DyLP-1.10.4/0000755000175200017520000000000013434203623011053 5ustar coincoinDyLP-1.10.4/install-sh0000755000175200017520000002202110442173473013061 0ustar coincoin#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # 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. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= 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: -c (ignored) -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. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; 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 for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi 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 "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # 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: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # 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 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $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 "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: DyLP-1.10.4/configure0000755000175200017520000273014013434071654013000 0ustar coincoin#! /bin/sh # From configure.ac 0.10. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for DyLP 1.10.4. # # Report bugs to . # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # # # Copyright 2006 International Business Machines and others. # All Rights Reserved. # This file is part of the open source package Coin which is distributed # under the Eclipse Public License. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1 && unset CDPATH if test -z "$ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if (echo_test_string=`eval $cmd`) 2>/dev/null && echo_test_string=`eval $cmd` && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi tagnames=${tagnames+${tagnames},}CXX tagnames=${tagnames+${tagnames},}F77 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='DyLP' PACKAGE_TARNAME='dylp' PACKAGE_VERSION='1.10.4' PACKAGE_STRING='DyLP 1.10.4' PACKAGE_BUGREPORT='coin-dylp@lists.coin-or.org' ac_unique_file="configure.ac" ac_default_prefix=`pwd` # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subdirs_all="$ac_subdirs_all Data/Sample" ac_subdirs_all="$ac_subdirs_all CoinUtils" ac_subdirs_all="$ac_subdirs_all Osi" ac_subdirs_all="$ac_subdirs_all DyLP" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os CDEFS ADD_CFLAGS DBG_CFLAGS OPT_CFLAGS sol_cc_compiler CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT COIN_CC_IS_CL_TRUE COIN_CC_IS_CL_FALSE MPICC CXXDEFS ADD_CXXFLAGS DBG_CXXFLAGS OPT_CXXFLAGS CXX CXXFLAGS ac_ct_CXX COIN_CXX_IS_CL_TRUE COIN_CXX_IS_CL_FALSE MPICXX ADD_FFLAGS DBG_FFLAGS OPT_FFLAGS F77 ac_ct_F77 FFLAGS MPIF77 EGREP LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOLM4 have_autoconf have_automake have_svn BUILDTOOLSDIR AUX_DIR abs_source_dir abs_lib_dir abs_include_dir abs_bin_dir HAVE_EXTERNALS_TRUE HAVE_EXTERNALS_FALSE host host_cpu host_vendor host_os ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP LIBTOOL ac_c_preproc_warn_flag ac_cxx_preproc_warn_flag RPATH_FLAGS DEPENDENCY_LINKING_TRUE DEPENDENCY_LINKING_FALSE LT_LDFLAGS COIN_SKIP_PROJECTS subdirs coin_have_doxygen coin_have_latex coin_doxy_usedot coin_doxy_tagname coin_doxy_logname COIN_HAS_DOXYGEN_TRUE COIN_HAS_DOXYGEN_FALSE COIN_HAS_LATEX_TRUE COIN_HAS_LATEX_FALSE coin_doxy_tagfiles coin_doxy_excludes LIBEXT VPATH_DISTCLEANFILES ABSBUILDDIR LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # 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. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= 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 ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -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 | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$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 ;; -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 ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) 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 ;; -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=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 ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && 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'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac 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 echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 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 # 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 its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | 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 if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CDEFS_set=${CDEFS+set} ac_env_CDEFS_value=$CDEFS ac_cv_env_CDEFS_set=${CDEFS+set} ac_cv_env_CDEFS_value=$CDEFS ac_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_cv_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_cv_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_cv_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_cv_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_cv_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_cv_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_MPICC_set=${MPICC+set} ac_env_MPICC_value=$MPICC ac_cv_env_MPICC_set=${MPICC+set} ac_cv_env_MPICC_value=$MPICC ac_env_CXXDEFS_set=${CXXDEFS+set} ac_env_CXXDEFS_value=$CXXDEFS ac_cv_env_CXXDEFS_set=${CXXDEFS+set} ac_cv_env_CXXDEFS_value=$CXXDEFS ac_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_cv_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_cv_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_cv_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_cv_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_cv_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_cv_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_MPICXX_set=${MPICXX+set} ac_env_MPICXX_value=$MPICXX ac_cv_env_MPICXX_set=${MPICXX+set} ac_cv_env_MPICXX_value=$MPICXX ac_env_ADD_FFLAGS_set=${ADD_FFLAGS+set} ac_env_ADD_FFLAGS_value=$ADD_FFLAGS ac_cv_env_ADD_FFLAGS_set=${ADD_FFLAGS+set} ac_cv_env_ADD_FFLAGS_value=$ADD_FFLAGS ac_env_DBG_FFLAGS_set=${DBG_FFLAGS+set} ac_env_DBG_FFLAGS_value=$DBG_FFLAGS ac_cv_env_DBG_FFLAGS_set=${DBG_FFLAGS+set} ac_cv_env_DBG_FFLAGS_value=$DBG_FFLAGS ac_env_OPT_FFLAGS_set=${OPT_FFLAGS+set} ac_env_OPT_FFLAGS_value=$OPT_FFLAGS ac_cv_env_OPT_FFLAGS_set=${OPT_FFLAGS+set} ac_cv_env_OPT_FFLAGS_value=$OPT_FFLAGS ac_env_F77_set=${F77+set} ac_env_F77_value=$F77 ac_cv_env_F77_set=${F77+set} ac_cv_env_F77_value=$F77 ac_env_FFLAGS_set=${FFLAGS+set} ac_env_FFLAGS_value=$FFLAGS ac_cv_env_FFLAGS_set=${FFLAGS+set} ac_cv_env_FFLAGS_value=$FFLAGS ac_env_MPIF77_set=${MPIF77+set} ac_env_MPIF77_value=$MPIF77 ac_cv_env_MPIF77_set=${MPIF77+set} ac_cv_env_MPIF77_value=$MPIF77 ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP ac_env_COIN_SKIP_PROJECTS_set=${COIN_SKIP_PROJECTS+set} ac_env_COIN_SKIP_PROJECTS_value=$COIN_SKIP_PROJECTS ac_cv_env_COIN_SKIP_PROJECTS_set=${COIN_SKIP_PROJECTS+set} ac_cv_env_COIN_SKIP_PROJECTS_value=$COIN_SKIP_PROJECTS # # 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 DyLP 1.10.4 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 \`..'] _ACEOF cat <<_ACEOF 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] --datadir=DIR read-only architecture-independent data [PREFIX/share] --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] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _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 DyLP 1.10.4:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug compile all projects with debug options tests (implies --disable-shared) --enable-msvc Prefer (i)cl/ifort/link over GNU on MinGW/Cygwin. --enable-static[=PKGS] build static libraries [default=no] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --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-dependency-linking disable linking library dependencies into shared libraries Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] --with-sample-lib linker flags for using project Sample --with-sample-incdir directory with header files for using project Sample --with-sample-datadir directory with data files for using project Sample --with-coinutils-lib linker flags for using project CoinUtils --with-coinutils-incdir directory with header files for using project CoinUtils --with-coinutils-datadir directory with data files for using project CoinUtils --with-osi-lib linker flags for using project Osi --with-osi-incdir directory with header files for using project Osi --with-osi-datadir directory with data files for using project Osi --with-dylp-lib linker flags for using project DyLP --with-dylp-incdir directory with header files for using project DyLP --with-dylp-datadir directory with data files for using project DyLP --with-dot use dot (from graphviz) when creating documentation with doxygen if available; --without-dot to disable Some influential environment variables: CDEFS Additional -D flags to be used when compiling C code. ADD_CFLAGS Additional C compiler options DBG_CFLAGS Debug C compiler options OPT_CFLAGS Optimize C compiler options CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory MPICC C MPI Compiler CXXDEFS Additional -D flags to be used when compiling C++ code. ADD_CXXFLAGS Additional C++ compiler options DBG_CXXFLAGS Debug C++ compiler options OPT_CXXFLAGS Optimize C++ compiler options CXX C++ compiler command CXXFLAGS C++ compiler flags MPICXX C++ MPI Compiler ADD_FFLAGS Additional Fortran compiler options DBG_FFLAGS Debug Fortran compiler options OPT_FFLAGS Optimize Fortran compiler options F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags MPIF77 Fortran MPI Compiler CPP C preprocessor CXXCPP C++ preprocessor COIN_SKIP_PROJECTS Set to the subdirectories of projects that should be skipped in the configuration 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 fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style 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 elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF DyLP configure 1.10.4 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by DyLP $as_me 1.10.4, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { 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` hostinfo = `(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=. echo "PATH: $as_dir" done } >&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_sep= 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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$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 ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >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 # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" 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. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 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 `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 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 { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`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. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } 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 # List one file in the package so that the configure script can test # whether the package is actually there # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. ############################################################################# # Do the tests necessary to configure compilers and initialise autotools # ############################################################################# ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; 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 { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Check if user wants to produce debugging code echo "$as_me:$LINENO: checking whether we want to compile in debug mode" >&5 echo $ECHO_N "checking whether we want to compile in debug mode... $ECHO_C" >&6 # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" case "${enableval}" in yes) coin_debug_compile=true if test "${enable_shared+set}" = set; then :; else enable_shared=no fi ;; no) coin_debug_compile=false ;; *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug" >&5 echo "$as_me: error: bad value ${enableval} for --enable-debug" >&2;} { (exit 1); exit 1; }; } ;; esac else coin_debug_compile=false fi; # m4_ifvaln([], if test $coin_debug_compile = true; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # m4_ifvaln([], # Get the name of the C compiler and appropriate compiler options # for backward compatibility # Check whether --enable-doscompile or --disable-doscompile was given. if test "${enable_doscompile+set}" = set; then enableval="$enable_doscompile" enable_doscompile=$enableval else enable_doscompile=no fi; # Check whether --enable-msvc or --disable-msvc was given. if test "${enable_msvc+set}" = set; then enableval="$enable_msvc" enable_msvc=$enableval else enable_msvc=no if test "$enable_doscompile" = msvc ; then enable_msvc=yes elif test "$enable_doscompile" != no ; then { { echo "$as_me:$LINENO: error: --enable-doscompile=$enable_doscompile not supported anymore." >&5 echo "$as_me: error: --enable-doscompile=$enable_doscompile not supported anymore." >&2;} { (exit 1); exit 1; }; } fi fi; if test "$enable_msvc" = MD; then enable_shared=yes enable_msvc=yes fi if test "$enable_msvc" = yes; then case $build in *-cygwin* | *-mingw*) ;; *) { { echo "$as_me:$LINENO: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&5 echo "$as_me: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&2;} { (exit 1); exit 1; }; } ;; esac 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 # For consistency, we set the C compiler to the same value of the C++ # compiler, if the C++ is set, but the C compiler isn't (only for CXX=cl) if test x"$CXX" != x; then case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) if test x"$CC" = x; then CC="$CXX" { echo "$as_me:$LINENO: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&5 echo "$as_me: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&2;} fi ;; esac fi coin_has_cc=yes save_cflags="$CFLAGS" # For *-*-solaris*, promote Studio/Workshop cc compiler to front of list. # Depending on the user's PATH, when Studio/Workshop cc is not present we may # find /usr/ucb/cc, which is almost certainly not a good choice for the C # compiler. In this case, put cc after gcc. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl gcc" else comps="gcc icl cl" fi ;; *-*-solaris*) # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_sol_cc_compiler+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$sol_cc_compiler"; then ac_cv_prog_sol_cc_compiler="$sol_cc_compiler" # 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_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_sol_cc_compiler="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done 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_sol_cc_compiler 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 sol_cc_compiler to just the basename; use the full file name. shift ac_cv_prog_sol_cc_compiler="$as_dir/$ac_word${1+' '}$@" fi fi fi fi sol_cc_compiler=$ac_cv_prog_sol_cc_compiler if test -n "$sol_cc_compiler"; then echo "$as_me:$LINENO: result: $sol_cc_compiler" >&5 echo "${ECHO_T}$sol_cc_compiler" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$sol_cc_compiler" = "cc" ; then comps="cc xlc gcc pgcc icc" else comps="xlc gcc pgcc icc cc" fi ;; *-*-darwin*) comps="clang gcc cc" ;; *-linux-gnu*) comps="gcc cc pgcc icc xlc" ;; *-linux-*) comps="xlc gcc cc pgcc icc" ;; *) comps="xlc_r xlc cc gcc pgcc icc" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CC || test "${ac_cv_prog_CC+set}" != set || { ac_cv_prog_CC=; export ac_cv_prog_CC; } # AC_MSG_NOTICE([C compiler candidates: $comps]) 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 for ac_prog in $comps 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out 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. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* 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 -std1 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 -std1. */ int osf4_cc_array ['\x00' == 0 ? 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 # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f 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 -z "$CC" ; then { { echo "$as_me:$LINENO: error: Failed to find a C compiler!" >&5 echo "$as_me: error: Failed to find a C compiler!" >&2;} { (exit 1); exit 1; }; } fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cc_g" = yes ; then ac_cv_prog_cc_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CFLAGS="$save_cflags" # add automake conditional so we can recognize cl compiler in makefile coin_cc_is_cl=false case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_cc_is_cl=true ;; esac if test $coin_cc_is_cl = true; then COIN_CC_IS_CL_TRUE= COIN_CC_IS_CL_FALSE='#' else COIN_CC_IS_CL_TRUE='#' COIN_CC_IS_CL_FALSE= fi # Check if a project specific CFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CFLAGS+set} if test x$coin_tmp = xset; then eval CFLAGS=\${${COIN_PRJCT}_CFLAGS} fi fi if test x"$CFLAGS" = x; then coin_add_cflags= coin_opt_cflags= coin_dbg_cflags= coin_warn_cflags= if test "$GCC" = "yes"; then case "$CC" in icc* | */icc*) ;; *) coin_opt_cflags="-O3" coin_add_cflags="-pipe" coin_dbg_cflags="-g -O0" coin_warn_cflags="-Wimplicit -Wparentheses -Wsequence-point -Wreturn-type -Wcast-qual -Wall -Wno-unknown-pragmas -Wno-long-long" esac fi if test -z "$coin_opt_cflags"; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -O2' coin_dbg_cflags='-MDd' else coin_opt_cflags='-MT -O2' coin_dbg_cflags='-MTd' fi coin_add_cflags='-nologo -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -Ox' coin_dbg_cflags='-MDd -debug' else coin_opt_cflags='-MT -Ox' coin_dbg_cflags='-MTd -debug' fi coin_add_cflags='-nologo -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CC" in icc* | */icc*) coin_opt_cflags="-O3 -ip -mp1" coin_add_cflags="" coin_dbg_cflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cflags="-i_dynamic $coin_add_cflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgcc* | */pgcc*) coin_opt_cflags="-fast" coin_add_cflags="-Kieee -pc 64" coin_dbg_cflags="-g" ;; esac ;; *-ibm-*) case "$CC" in xlc* | */xlc* | mpxlc* | */mpxlc*) coin_opt_cflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cflags="-bmaxdata:0x80000000 -qsuppress=1500-036 -qsuppress=1500-029" coin_dbg_cflags="-g" ;; esac ;; *-hp-*) coin_opt_cflags="-O" coin_add_cflags="-Ae" coin_dbg_cflags="-g" ;; *-*-solaris*) coin_opt_cflags="-xO4" coin_dbg_cflags="-g" ;; *-sgi-*) coin_opt_cflags="-O -OPT:Olimit=0" coin_dbg_cflags="-g" ;; esac fi if test "$ac_cv_prog_cc_g" = yes && test -z "$coin_dbg_cflags" ; then coin_dbg_cflags="-g" fi if test -z "$coin_opt_cflags"; then # Try if -O option works if nothing else is set CFLAGS="-O" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cflags" = xyes; then coin_warn_cflags= fi if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$coin_dbg_cflags $coin_add_cflags $coin_warn_cflags" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$coin_opt_cflags $coin_add_cflags -DNDEBUG $coin_warn_cflags" fi DBG_CFLAGS="$DBG_CFLAGS $ADD_CFLAGS $CDEFS" OPT_CFLAGS="$OPT_CFLAGS $ADD_CFLAGS $CDEFS" if test "$coin_debug_compile" = "true"; then CFLAGS="$DBG_CFLAGS" else CFLAGS="$OPT_CFLAGS" fi else CFLAGS="$CFLAGS $ADD_CFLAGS $CDEFS" if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$CFLAGS" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$CFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CFLAGS="$CFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CFLAGS works save_CFLAGS="$CFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&2;} CFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C compiler options are: $CFLAGS" >&5 echo "$as_me: C compiler options are: $CFLAGS" >&6;} if test x"$MPICC" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C compiler $MPICC" >&5 echo "$as_me: Will use MPI C compiler $MPICC" >&6;} CC="$MPICC" fi # Correct the LD variable if we are using the MS or Intel-windows compiler case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac 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 # Get the name of the C++ compiler and appropriate compiler options #Let's try if that overcomes configuration problem with VC++ 6.0 ac_ext=cc 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 coin_has_cxx=yes save_cxxflags="$CXXFLAGS" # For *-*-solaris*, promote Studio/Workshop compiler to front of list. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl g++" else comps="g++ icl cl" fi ;; *-*-solaris*) comps="CC xlC_r aCC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; *-darwin*) comps="clang++ g++ c++ CC" ;; *-linux-gnu*) comps="g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC xlC_r aCC CC" ;; *) comps="xlC_r aCC CC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CXX || test "${ac_cv_prog_CXX+set}" != set || { ac_cv_prog_CXX=; export ac_cv_prog_CXX; } # AC_MSG_NOTICE([C++ compiler candidates: $comps]) ac_ext=cc 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 -n "$ac_tool_prefix"; then for ac_prog in $CCC $comps 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$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 for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=cc 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_PROG_CXX sets CXX to g++ if it cannot find a working C++ compiler #thus, we test here whether $CXX is actually working ac_ext=cc 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 echo "$as_me:$LINENO: checking whether C++ compiler $CXX works" >&5 echo $ECHO_N "checking whether C++ compiler $CXX works... $ECHO_C" >&6; cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&5 echo "$as_me: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cc 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 coin_cxx_is_cl=false # It seems that we need to cleanup something here for the Windows case "$CXX" in clang* | */clang*) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) sed -e 's/^void exit (int);//' confdefs.h >> confdefs.hh mv confdefs.hh confdefs.h coin_cxx_is_cl=true ;; esac # add automake conditional so we can recognize cl compiler in makefile if test $coin_cxx_is_cl = true; then COIN_CXX_IS_CL_TRUE= COIN_CXX_IS_CL_FALSE='#' else COIN_CXX_IS_CL_TRUE='#' COIN_CXX_IS_CL_FALSE= fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cxx_g" = yes ; then ac_cv_prog_cxx_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CXXFLAGS="$save_cxxflags" # Check if a project specific CXXFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CXXFLAGS+set} if test x$coin_tmp = xset; then eval CXXFLAGS=\${${COIN_PRJCT}_CXXFLAGS} fi fi if test x"$CXXFLAGS" = x; then # ToDo decide whether we want -DNDEBUG for optimization coin_add_cxxflags= coin_opt_cxxflags= coin_dbg_cxxflags= coin_warn_cxxflags= if test "$GXX" = "yes"; then case "$CXX" in icpc* | */icpc*) ;; *) # ToDo decide about unroll-loops coin_opt_cxxflags="-O3" coin_add_cxxflags="-pipe" coin_dbg_cxxflags="-g -O0" coin_warn_cxxflags="-Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas -Wno-long-long" esac fi # Note that we do not need to cover GCC in the following tests. if test -z "$coin_opt_cxxflags"; then case $build in *-cygwin* | *-mingw*) case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -O2' coin_dbg_cxxflags='-MDd' else coin_opt_cxxflags='-MT -O2' coin_dbg_cxxflags='-MTd' fi coin_add_cxxflags='-nologo -EHsc -GR -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -Ox' coin_dbg_cxxflags='-MDd -debug' else coin_opt_cxxflags='-MT -Ox' coin_dbg_cxxflags='-MTd -debug' fi coin_add_cxxflags='-nologo -EHsc -GR -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CXX" in icpc* | */icpc*) coin_opt_cxxflags="-O3 -ip -mp1" coin_add_cxxflags="" coin_dbg_cxxflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CXXFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cxxflags="-i_dynamic $coin_add_cxxflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgCC* | */pgCC*) coin_opt_cxxflags="-fast" coin_add_cxxflags="-Kieee -pc 64" coin_dbg_cxxflags="-g" ;; esac ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) coin_opt_cxxflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cxxflags="-bmaxdata:0x80000000 -qrtti=dyna -qsuppress=1500-036 -qsuppress=1500-029 -qsourcetype=c++" coin_dbg_cxxflags="-g" ;; esac ;; *-hp-*) case "$CXX" in aCC* | */aCC* ) coin_opt_cxxflags="-O" coin_add_cxxflags="-AA" coin_dbg_cxxflags="-g" ;; esac ;; *-*-solaris*) coin_opt_cxxflags="-O4" coin_dbg_cxxflags="-g" ;; esac fi # Generic flag settings. If these don't work, add a case above. if test "$ac_cv_prog_cxx_g" = yes && test -z "$coin_dbg_cxxflags" ; then coin_dbg_cxxflags="-g" fi if test -z "$coin_opt_cxxflags"; then # Try if -O option works if nothing else is set CXXFLAGS=-O cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cxxflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cxxflags" = xyes; then coin_warn_cxxflags= fi # Do final setup of flags based on values determined above. if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$coin_dbg_cxxflags $coin_add_cxxflags $coin_warn_cxxflags" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$coin_opt_cxxflags $coin_add_cxxflags -DNDEBUG $coin_warn_cxxflags" fi DBG_CXXFLAGS="$DBG_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" OPT_CXXFLAGS="$OPT_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test "$coin_debug_compile" = "true"; then CXXFLAGS="$DBG_CXXFLAGS" else CXXFLAGS="$OPT_CXXFLAGS" fi # Handle the case where CXXFLAGS was set externally. else CXXFLAGS="$CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$CXXFLAGS" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$CXXFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CXXFLAGS="$CXXFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CXXFLAGS works save_CXXFLAGS="$CXXFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&2;} CXXFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C++ compiler options are: $CXXFLAGS" >&5 echo "$as_me: C++ compiler options are: $CXXFLAGS" >&6;} if test x"$MPICXX" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C++ compiler $MPICXX" >&5 echo "$as_me: Will use MPI C++ compiler $MPICXX" >&6;} CXX="$MPICXX" fi # correct the LD variable in a build with MS or Intel-windows compiler case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac 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 # Get the name of the Fortran compiler and appropriate compiler options case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then coin_f77_comps="ifort fl32 compile_f2c" else coin_f77_comps="gfortran ifort g95 g77 fl32 compile_f2c" fi ;; *-*-solaris*) coin_f77_comps="f95 f90 g95 f77 xlf_r fort77 gfortran g77 pgf90 pgf77 ifort ifc frt af77" ;; *-linux-gnu*) coin_f77_comps="gfortran ifort g95 fort77 f77 g77 pgf90 pgf77 ifc frt af77 xlf_r" ;; *) coin_f77_comps="xlf_r fort77 gfortran ifort g95 f77 g77 pgf90 pgf77 ifc frt af77" ;; esac ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu coin_has_f77=yes save_fflags="$FFLAGS" # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_F77 || test "${ac_cv_prog_F77+set}" != set || { ac_cv_prog_F77=; export ac_cv_prog_F77; } # This is a real belt-and-suspenders approach. AC_COIN_FIND_F77 will use # coin_f77_comps to see if there's a program that matches one of the names. # If there's no such program, F77 = unavailable. If we match the name, # feed AC_PROG_F77 the same search list, just to be sure it's a functioning # compiler. # AC_MSG_NOTICE([Fortran compiler candidates: $coin_f77_comps]) { echo "$as_me:$LINENO: Trying to determine Fortran compiler name" >&5 echo "$as_me: Trying to determine Fortran compiler name" >&6;} if test -n "$ac_tool_prefix"; then for ac_prog in $coin_f77_comps 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in $coin_f77_comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done test -n "$ac_ct_F77" || ac_ct_F77="unavailable" F77=$ac_ct_F77 fi if test "$F77" != "unavailable" ; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $coin_f77_comps 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in $coin_f77_comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done F77=$ac_ct_F77 fi # Provide some information about the compiler. echo "$as_me:4125:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo yes` ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu else { echo "$as_me:$LINENO: WARNING: Failed to find a Fortran compiler!" >&5 echo "$as_me: WARNING: Failed to find a Fortran compiler!" >&2;} fi FFLAGS="$save_fflags" # Check if a project specific FFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_FFLAGS+set} if test x$coin_tmp = xset; then eval FFLAGS=\${${COIN_PRJCT}_FFLAGS} fi fi if test "$F77" != "unavailable" && test x"$FFLAGS" = x ; then coin_add_fflags= coin_opt_fflags= coin_dbg_fflags= coin_warn_fflags= if test "$G77" = "yes"; then coin_opt_fflags="-O3" coin_add_fflags="-pipe" coin_dbg_fflags="-g -O0" else case $build in *-cygwin* | *-mingw*) case $F77 in ifort* | */ifort* | IFORT* | */IFORT* ) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_fflags='-MD -O3' coin_dbg_fflags='-MDd -debug' else coin_opt_fflags='-MT -O3' coin_dbg_fflags='-MTd -debug' fi coin_add_fflags='-fpp -nologo' ;; compile_f2c*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_fflags='-MD -O2' coin_dbg_fflags='-MDd' else coin_opt_fflags='-MT -O2' coin_dbg_fflags='-MTd' fi coin_add_fflags='-nologo -wd4996' ;; esac ;; *-linux-*) case $F77 in ifc* | */ifc* | ifort* | */ifort*) coin_opt_fflags="-O3 -ip" coin_add_fflags="-cm -w90 -w95" coin_dbg_fflags="-g -CA -CB -CS" # Check if -i_dynamic is necessary (for new glibc library) FFLAGS= cat >conftest.$ac_ext <<_ACEOF program main write(*,*) 'Hello world' end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_fflags="-i_dynamic $coin_add_fflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgf77* | */pgf77* | pgf90* | */pgf90*) coin_opt_fflags="-fast" coin_add_fflags="-Kieee -pc 64" coin_dbg_fflags="-g" ;; esac ;; *-ibm-*) case "$F77" in xlf* | */xlf* | mpxlf* | */mpxlf* ) coin_opt_fflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_fflags="-bmaxdata:0x80000000 -qsuppress=1500-036 -qsuppress=1500-029" coin_dbg_fflags="-g -C" ;; esac ;; *-hp-*) coin_opt_fflags="+O3" coin_add_fflags="+U77" coin_dbg_fflags="-C -g" ;; *-*-solaris*) coin_opt_fflags="-O4" coin_dbg_fflags="-g" ;; *-sgi-*) coin_opt_fflags="-O5 -OPT:Olimit=0" coin_dbg_fflags="-g" ;; esac fi if test "$ac_cv_prog_f77_g" = yes && test -z "$coin_dbg_fflags" ; then coin_dbg_fflags="-g" fi if test -z "$coin_opt_fflags"; then # Try if -O option works if nothing else is set FFLAGS=-O cat >conftest.$ac_ext <<_ACEOF program main integer i end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_fflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_fflags" = xyes; then coin_warn_fflags= fi if test x${DBG_FFLAGS+set} != xset; then DBG_FFLAGS="$coin_dbg_fflags $coin_add_fflags $coin_warn_fflags" fi if test x${OPT_FFLAGS+set} != xset; then OPT_FFLAGS="$coin_opt_fflags $coin_add_fflags $coin_warn_fflags" fi DBG_FFLAGS="$DBG_FFLAGS $ADD_FFLAGS" OPT_FFLAGS="$OPT_FFLAGS $ADD_FFLAGS" if test "$coin_debug_compile" = "true"; then FFLAGS="$DBG_FFLAGS" else FFLAGS="$OPT_FFLAGS" fi else FFLAGS="$FFLAGS $ADD_FFLAGS" if test x${DBG_FFLAGS+set} != xset; then DBG_FFLAGS="$FFLAGS" fi if test x${OPT_FFLAGS+set} != xset; then OPT_FFLAGS="$FFLAGS" fi fi # Try if FFLAGS works if test "$F77" != "unavailable" ; then cat >conftest.$ac_ext <<_ACEOF program main integer i end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 FFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$FFLAGS"; then { echo "$as_me:$LINENO: WARNING: The flags FFLAGS=\"$FFLAGS\" do not work. I will now just try '-O', but you might want to set FFLAGS manually." >&5 echo "$as_me: WARNING: The flags FFLAGS=\"$FFLAGS\" do not work. I will now just try '-O', but you might want to set FFLAGS manually." >&2;} FFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF program main integer i end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 FFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$FFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for FFLAGS does not work. I will continue with empty FFLAGS, but you might want to set FFLAGS manually." >&5 echo "$as_me: WARNING: This value for FFLAGS does not work. I will continue with empty FFLAGS, but you might want to set FFLAGS manually." >&2;} fi fi fi { echo "$as_me:$LINENO: Fortran compiler options are: $FFLAGS" >&5 echo "$as_me: Fortran compiler options are: $FFLAGS" >&6;} if test x"$MPIF77" = x; then :; else { echo "$as_me:$LINENO: Will use MPI Fortran compiler $MPIF77" >&5 echo "$as_me: Will use MPI Fortran compiler $MPIF77" >&6;} F77="$MPIF77" fi # correct the LD variable if we use the intel fortran compiler in windows case $build in *-cygwin* | *-mingw*) case "$F77" in ifort* | */ifort* | IFORT* | */IFORT*) LD=link ;; esac ;; esac 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 # Initialize automake and libtool # AC_MSG_NOTICE([Calling INIT_AUTO_TOOLS from CREATE_LIBTOOL.]) { # START coin_disable_shared=no # Test if force_shared has been set if test "x" = xforce_shared; then if test x$enable_shared = xno; then { { echo "$as_me:$LINENO: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&5 echo "$as_me: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&2;} { (exit 1); exit 1; }; } fi enable_shared=yes; else case $build in *-cygwin* | *-mingw*) coin_disable_shared=yes if test x"$enable_shared" = xyes; then case "$CC" in clang* ) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Building of DLLs not supported in this configuration." >&5 echo "$as_me: Building of DLLs not supported in this configuration." >&6;} ;; *gcc*) if test x"$enable_dependency_linking" = xyes; then coin_disable_shared=no else { echo "$as_me:$LINENO: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&5 echo "$as_me: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&2;} fi ;; *) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; esac fi ;; *-aix*) coin_disable_shared=yes platform=AIX if test x"$enable_shared" = xyes; then { echo "$as_me:$LINENO: WARNING: Shared objects are not supported." >&5 echo "$as_me: WARNING: Shared objects are not supported." >&2;} fi ;; esac fi if test x"$coin_disable_shared" = xyes; then if test x"$enable_shared" = xyes; then : else # we don't disable shared, because it was not selected anyway coin_disable_shared=no fi enable_shared=no fi # By default, we only want the shared objects to be compiled # Check whether --enable-static or --disable-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; # Initialize automake echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi am__api_version="1.9" # 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. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_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 ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done 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. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$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' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # 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 ( 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 rm -f conftest.file 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". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 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 $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-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='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi # AC_MSG_NOTICE([Beginning automake initialisation.]) # Stuff for automake # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } 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='dylp' VERSION='1.10.4' 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"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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'. 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 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 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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 echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$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 depcc="$CXX" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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'. 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 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 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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 echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 # Check whether --enable-maintainer-mode or --disable-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; echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$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 coin_have_externals=no if test "$enable_maintainer_mode" = yes; then # If maintainer mode is chosen, we make sure that the correct versions # of the tools are used, and that we know where libtool.m4 is (to # recreate acinclude.m4) LIBTOOLM4= # Normally, $HOME AUTOTOOLS_DFLT=$HOME echo "$as_me:$LINENO: checking whether we are using the correct autotools" >&5 echo $ECHO_N "checking whether we are using the correct autotools... $ECHO_C" >&6 if test "${ac_cv_use_correct_autotools+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_use_correct_autotools=check fi echo "$as_me:$LINENO: result: $ac_cv_use_correct_autotools" >&5 echo "${ECHO_T}$ac_cv_use_correct_autotools" >&6 if test $ac_cv_use_correct_autotools = check; then ac_cv_use_correct_autotools=yes # Check if we have autoconf # Extract the first word of "autoconf", so it can be a program name with args. set dummy autoconf; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_autoconf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_autoconf"; then ac_cv_prog_have_autoconf="$have_autoconf" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_autoconf="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_autoconf" && ac_cv_prog_have_autoconf="no" fi fi have_autoconf=$ac_cv_prog_have_autoconf if test -n "$have_autoconf"; then echo "$as_me:$LINENO: result: $have_autoconf" >&5 echo "${ECHO_T}$have_autoconf" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_autoconf = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether autoconf is the correct version correct_version='2.59' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of autoconf" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of autoconf... $ECHO_C" >&6 autoconf --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of autoconf as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of autoconf as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable autoconf is picked up from the correct location echo "$as_me:$LINENO: checking whether autoconf is coming from the correct location" >&5 echo $ECHO_N "checking whether autoconf is coming from the correct location... $ECHO_C" >&6 autoconf_dir=`which autoconf | sed -e 's=/autoconf=='` autoconf_dir=`cd $autoconf_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $autoconf_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if we have automake # Extract the first word of "automake", so it can be a program name with args. set dummy automake; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_automake+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_automake"; then ac_cv_prog_have_automake="$have_automake" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_automake="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_automake" && ac_cv_prog_have_automake="no" fi fi have_automake=$ac_cv_prog_have_automake if test -n "$have_automake"; then echo "$as_me:$LINENO: result: $have_automake" >&5 echo "${ECHO_T}$have_automake" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_automake = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether automake is the correct version correct_version='1.9.6' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of automake" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of automake... $ECHO_C" >&6 automake --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of automake as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of automake as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable automake is picked up from the correct location echo "$as_me:$LINENO: checking whether automake is coming from the correct location" >&5 echo $ECHO_N "checking whether automake is coming from the correct location... $ECHO_C" >&6 automake_dir=`which automake | sed -e 's=/automake=='` automake_dir=`cd $automake_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $automake_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if this is the correct version of libtool (with escaped dots) if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi correct_version='1.5.22' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` if test -r $want_dir/libtool/ltmain.sh; then have_ltmain=yes : else have_ltmain=no : fi echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of libtool." >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of libtool.... $ECHO_C" >&6 if test $have_ltmain = yes; then if $EGREP $grep_version $want_dir/libtool/ltmain.sh >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of libtool." >&5 echo "$as_me: error: You don't have the correct version of libtool." >&2;} { (exit 1); exit 1; }; } fi else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: I cannot find the ltmain.sh file." >&5 echo "$as_me: error: I cannot find the ltmain.sh file." >&2;} { (exit 1); exit 1; }; } fi fi # Check if we can find the libtool file if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi if test -r $want_dir/aclocal/libtool.m4; then LIBTOOLM4="$want_dir/aclocal/libtool.m4" : else { { echo "$as_me:$LINENO: error: I cannot find the libtool.m4 file." >&5 echo "$as_me: error: I cannot find the libtool.m4 file." >&2;} { (exit 1); exit 1; }; } : fi # Check if we have an Dependencies file if test -r $srcdir/Dependencies; then coin_have_externals=yes fi # Check if subversion is installed and understands https # Extract the first word of "svn", so it can be a program name with args. set dummy svn; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svn+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svn"; then ac_cv_prog_have_svn="$have_svn" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svn="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svn" && ac_cv_prog_have_svn="no" fi fi have_svn=$ac_cv_prog_have_svn if test -n "$have_svn"; then echo "$as_me:$LINENO: result: $have_svn" >&5 echo "${ECHO_T}$have_svn" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test x$have_svn = xyes; then echo "$as_me:$LINENO: checking whether svn understands https" >&5 echo $ECHO_N "checking whether svn understands https... $ECHO_C" >&6 if test "${ac_cv_svn_understands_https+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else svn --version > confauto.out 2>&1 if $EGREP https confauto.out >/dev/null 2>&1; then ac_cv_svn_understands_https=yes else ac_cv_svn_understands_https=no have_svn=no ac_cv_prog_have_svn=no fi rm -f confauto.out fi echo "$as_me:$LINENO: result: $ac_cv_svn_understands_https" >&5 echo "${ECHO_T}$ac_cv_svn_understands_https" >&6 fi # Find the location of the BuildTools directory BUILDTOOLSDIR= if test -r $srcdir/BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/BuildTools else if test -r $srcdir/../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../BuildTools else if test -r $srcdir/../../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../../BuildTools else { { echo "$as_me:$LINENO: error: Cannot find the BuildTools directory" >&5 echo "$as_me: error: Cannot find the BuildTools directory" >&2;} { (exit better disable maintainer mode.); exit better disable maintainer mode.; }; } fi fi fi # for running automake by make, we need to have Makemain.inc available at the place where it usually can be found during run_autotools if test "$BUILDTOOLSDIR" != "$srcdir/BuildTools" ; then $LN_S `cd $BUILDTOOLSDIR; pwd` "$srcdir/BuildTools" fi # The following variable is set to the name of the directory where # the autotool scripts are located AUX_DIR=$ac_aux_dir fi # helpful variable for the base directory of this package abs_source_dir=`cd $srcdir; pwd` # Stuff for example Makefiles if test x$prefix = xNONE; then full_prefix=$ac_default_prefix else full_prefix=$prefix fi full_prefix=`cd $full_prefix ; pwd` abs_lib_dir=$full_prefix/lib abs_include_dir=$full_prefix/include abs_bin_dir=$full_prefix/bin if test $coin_have_externals = yes && test x$have_svn = xyes; then HAVE_EXTERNALS_TRUE= HAVE_EXTERNALS_FALSE='#' else HAVE_EXTERNALS_TRUE='#' HAVE_EXTERNALS_FALSE= fi # AC_MSG_NOTICE([End automake initialisation.]) LIBTOOL= if test -f ../libtool; then coin_config_dir=.. LIBTOOL='$(SHELL) $(top_builddir)/../libtool' fi if test "x$LIBTOOL" = x; then if test -f ../../libtool; then coin_config_dir=../.. LIBTOOL='$(SHELL) $(top_builddir)/../../libtool' fi fi if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Creating libtool script (calling COIN_PROG_LIBTOOL).]) # Stuff for libtool # Check whether --enable-shared or --disable-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 --enable-fast-install or --disable-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; echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 if test "${lt_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # 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 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 fi SED=$lt_cv_path_SED echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 # Check whether --with-gnu-ld or --without-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. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&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 echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$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 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 echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 echo "${ECHO_T}$lt_cv_path_NM" >&6 NM="$lt_cv_path_NM" echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 aix4* | aix5*) 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'. lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | kfreebsd*-gnu | 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 ;; 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]) 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 ;; interix3*) # 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 Linux ELF. linux*) 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=unknown ;; 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 ;; solaris*) 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 ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac fi echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 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 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 whether --enable-libtool-lock or --disable-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:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 6353 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|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-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) 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" echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f 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 echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$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 ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) LD="${LD-ld} -64" ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" 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 echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f 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 echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #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)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF 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=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to coin-dylp@lists.coin-or.org ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done 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=cc 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 echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f 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 echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc 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 fi # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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*) # 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; ;; 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 ;; 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 ;; *) # 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. SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done 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` ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 else echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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]*\)' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \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\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; linux*) if test "$host_cpu" = ia64; then symcode='[ABCDGIRSTW]' lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" 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 # 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 # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Try without a prefix undercore, 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. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$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=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && 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 < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_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 -f 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 echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6 else echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6 objdir=$lt_cv_objdir 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 # 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 to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' 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 \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 <&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 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 echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 <&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 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 echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAGIC_CMD=: fi fi fi ;; esac enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-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 # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi; test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= 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;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' # 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 printf "$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 printf "$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 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... lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$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:8317: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8321: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$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= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 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*) # 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' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # 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' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; interix3*) # 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 ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; hpux*) # 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='-fPIC' ;; esac ;; *) lt_prog_compiler_pic='-fPIC' ;; 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 ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic='-qnocommon' lt_prog_compiler_wl='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # 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' ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # 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' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) 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 echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 echo "${ECHO_T}$lt_prog_compiler_pic" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext printf "$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:8585: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8589: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 if test x"$lt_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 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 # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works=yes fi else lt_prog_compiler_static_works=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 if test x"$lt_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:8689: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8693: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag= enable_shared_with_static_runtimes=no archive_cmds= archive_expsym_cmds= old_archive_From_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported link_all_deplibs=unknown hardcode_automatic=no module_cmds= module_expsym_cmds= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # 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_" # 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. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # 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 if test "$with_gnu_ld" = 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>/dev/null` in *\ [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 aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) 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 # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs=no ;; 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*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' 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/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' 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 ;; interix3*) 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' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= 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; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # 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; $echo \"$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' ;; esac archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; 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 -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi 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 $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' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&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. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then 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 ;; 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 ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$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 $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 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 ;; aix4* | aix5*) 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 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")) && (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].*|aix5*) 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_libdir_separator=':' link_all_deplibs=yes 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 hardcode_direct=yes 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 # 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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 echo "${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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' 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*) 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 # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32*) # 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. 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 `echo "$deplibs" | $SED -e '\''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' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs=no ;; esac fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=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* | kfreebsd*-gnu | dragonfly*) archive_cmds='$CC -shared -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 -fPIC ${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 -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${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 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 -a "$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 ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${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' ;; *) archive_cmds='$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 hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=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 $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld='-rpath $libdir' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: 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 ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no 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 ;; 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" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi 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} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${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='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -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; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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 hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${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 ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else 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' 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 linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; 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*) 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='`test -z "$SCOABSPATH" && echo ${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,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$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 fi echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6 test "$ld_shlibs" = no && can_build_shared=no # # 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 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:$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=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 echo "${ECHO_T}$archive_cmds_need_lc" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var" || \ test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existant 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_AC_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 echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6 if test "$hardcode_action" = relink; 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 striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&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" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}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" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac 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*) 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 echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; 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 ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* 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_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* 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_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" 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" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 < #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 #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=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; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && 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 echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$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\" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 < #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 #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=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; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && 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 echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$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 # Report which library types will actually be built echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&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 ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler \ CC \ LD \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_prog_compiler_no_builtin_flag \ export_dynamic_flag_spec \ thread_safe_flag_spec \ whole_archive_flag_spec \ enable_shared_with_static_runtimes \ old_archive_cmds \ old_archive_from_new_cmds \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ archive_cmds \ archive_expsym_cmds \ postinstall_cmds \ postuninstall_cmds \ old_archive_from_expsyms_cmds \ allow_undefined_flag \ no_undefined_flag \ export_symbols_cmds \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ hardcode_automatic \ module_cmds \ module_expsym_cmds \ lt_cv_prog_compiler_c_o \ exclude_expsyms \ include_expsyms; do case $var in old_archive_cmds | \ old_archive_from_new_cmds | \ archive_cmds | \ archive_expsym_cmds | \ module_cmds | \ module_expsym_cmds | \ old_archive_from_expsyms_cmds | \ export_symbols_cmds | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" { echo "$as_me:$LINENO: creating $ofile" >&5 echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 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 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # 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. # 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//" # 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 # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # 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 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler # Is the compiler the GNU C compiler? with_gcc=$GCC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # 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 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # 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 and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps # Dependencies to place after the objects being linked to create a # shared library. 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 # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # 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 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 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # 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 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_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 # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\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 EOF ;; esac # 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) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" # Check whether --with-tags or --without-tags was given. if test "${with_tags+set}" = set; then withval="$with_tags" tagnames="$withval" fi; if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi if test -z "$LTCFLAGS"; then eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 echo "$as_me: error: invalid tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} { (exit 1); exit 1; }; } fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) 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=cc 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= export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # 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= # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC 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++"} 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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # We don't want -fno-exception wen 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 or --without-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. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&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 echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$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 -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -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 "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix4* | aix5*) 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].*|aix5*) 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_libdir_separator_CXX=':' link_all_deplibs_CXX=yes 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 hardcode_direct_CXX=yes 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 # 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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 echo "${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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' 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*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' 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 ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='' link_all_deplibs_CXX=yes if test "$GXX" = yes ; then lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else 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' fi module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_CXX=no ;; esac 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 ;; freebsd[12]*) # 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* | kfreebsd*-gnu | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; 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) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${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*) hardcode_libdir_flag_spec_ld_CXX='+b $libdir' ;; *) 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_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; echo $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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${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 ;; interix3*) 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" && echo -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 -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${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=: ;; linux*) 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; echo $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*) # 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*) # Portland Group C++ compiler 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' 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; $echo \"$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=`echo $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; echo $list' ;; 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::"' ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no 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='echo' ;; osf3*) 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 # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) 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" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' 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. # # 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=`echo $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; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' 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 "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; 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. old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) 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" && echo -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' 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=`echo $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; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' 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 "\-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*) # 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 C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. We must also pass each convience library through # to the system linker between allextract/defaultextract. # The C++ compiler will combine linker options so we # cannot just pass the convience library names through # without $wl. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='echo' # 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 -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 -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 \"\-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 \"\-L\"" fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' 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. # 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. # So that behaviour is only enabled if SCOABSPATH is set to a # non-empty value in the environment. Most likely only useful for # creating official distributions of packages. # This is a hack until libtool officially supports absolute path # names for shared libraries. 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='`test -z "$SCOABSPATH" && echo ${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,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$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 echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$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... cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` for p in `eval $output_verbose_link_cmd`; do case $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 else prev= fi if test "$pre_test_object_deps_done" = no; then case $p 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 ;; *.$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 # PORTME: override above test on systems where it is broken case $host_os in interix3*) # 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= ;; solaris*) case $cc_basename in CC*) # 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. postdeps_CXX='-lCstd -lCrun' ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 # 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*) # 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' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # 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' ;; 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= ;; interix3*) # 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 IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # 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_AC_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 ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_CXX='-qnocommon' lt_prog_compiler_wl_CXX='-Wl,' ;; esac ;; 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* | kfreebsd*-gnu | 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*) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; icpc* | ecpc*) # Intel C++ lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC*) # 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' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; 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*) # 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 ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; 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 ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext printf "$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:13478: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:13482: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_CXX=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 if test x"$lt_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 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 # # 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\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_CXX=yes fi else lt_prog_compiler_static_works_CXX=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6 if test x"$lt_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_CXX=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:13582: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:13586: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # 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 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")) && (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*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no # # 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 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:$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=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else 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* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&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-existant 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_AC_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 echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 echo "${ECHO_T}$hardcode_action_CXX" >&6 if test "$hardcode_action_CXX" = relink; 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 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_CXX \ CC_CXX \ LD_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ export_dynamic_flag_spec_CXX \ thread_safe_flag_spec_CXX \ whole_archive_flag_spec_CXX \ enable_shared_with_static_runtimes_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ postinstall_cmds_CXX \ postuninstall_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ export_symbols_cmds_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ hardcode_automatic_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ lt_cv_prog_compiler_c_o_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX; do case $var in old_archive_cmds_CXX | \ old_archive_from_new_cmds_CXX | \ archive_cmds_CXX | \ archive_expsym_cmds_CXX | \ module_cmds_CXX | \ module_expsym_cmds_CXX | \ old_archive_from_expsyms_cmds_CXX | \ export_symbols_cmds_CXX | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # 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 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_CXX # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_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 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_CXX old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # 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 and install a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_CXX # Dependencies to place after the objects being linked to create a # shared library. 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 # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_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 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 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_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 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # 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 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld 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 else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # Code to be used in simple compile tests lt_simple_compile_test_code=" subroutine t\n return\n end\n" # Code to be used in simple link tests lt_simple_link_test_code=" program t\n end\n" # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${F77-"f77"} compiler=$CC compiler_F77=$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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&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 ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 GCC_F77="$G77" LD_F77="$LD" lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-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_F77='-Bstatic' fi ;; amigaos*) # 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_F77='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # 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_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; interix3*) # 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_F77=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; hpux*) # 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_F77='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_F77='-qnocommon' lt_prog_compiler_wl_F77='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # 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_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-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_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # 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:15152: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:15156: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_F77=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 if test x"$lt_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_F77=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_F77=yes fi else lt_prog_compiler_static_works_F77=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6 if test x"$lt_prog_compiler_static_works_F77" = xyes; then : else lt_prog_compiler_static_F77= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_F77=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:15256: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:15260: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_F77=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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_F77= enable_shared_with_static_runtimes_F77=no archive_cmds_F77= archive_expsym_cmds_F77= old_archive_From_new_cmds_F77= old_archive_from_expsyms_cmds_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= thread_safe_flag_spec_F77= hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_direct_F77=no hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported link_all_deplibs_F77=unknown hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= always_export_symbols_F77=no export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # 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_F77="_GLOBAL_OFFSET_TABLE_" # 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. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # 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_F77=yes if test "$with_gnu_ld" = 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_F77='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${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_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [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 aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_F77='$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_F77='-L$libdir' hardcode_minus_L_F77=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_F77=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_F77='$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_F77='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_F77=no fi ;; interix3*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${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_F77='$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_F77='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' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;; esac archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs_F77=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $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_F77=no cat <&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. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_F77=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 ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = no; then runpath_var= hardcode_libdir_flag_spec_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$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_F77=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_F77=unsupported fi ;; aix4* | aix5*) 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 if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$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].*|aix5*) 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_F77='' hardcode_direct_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes 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 hardcode_direct_F77=yes else # We have old collect2 hardcode_direct_F77=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_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= 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 # 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_F77=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_F77='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${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_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$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. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${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_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77='$convenience' archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="\$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*) archive_cmds_F77='$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_F77='-L$libdir' hardcode_minus_L_F77=yes # see comment about different semantics on the GNU ld section ld_shlibs_F77=no ;; bsdi[45]*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32*) # 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. hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=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_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_F77='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_F77=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported whole_archive_flag_spec_F77='' link_all_deplibs_F77=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_F77=no ;; esac fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; freebsd1*) ld_shlibs_F77=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_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${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_F77='$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_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$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_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared -fPIC ${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_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$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 hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_F77='+b $libdir' hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; *) hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: link_all_deplibs_F77=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; openbsd*) hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$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_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_F77='-rpath $libdir' fi hardcode_libdir_separator_F77=: ;; solaris*) no_undefined_flag_F77=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$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' fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_F77=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_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_F77='${wl}-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$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_F77='${wl}-z,text' allow_undefined_flag_F77='${wl}-z,nodefs' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 echo "${ECHO_T}$ld_shlibs_F77" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 pic_flag=$lt_prog_compiler_pic_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_F77=no else archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || \ test -n "$runpath_var_F77" || \ test "X$hardcode_automatic_F77" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_F77" != 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_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 echo "${ECHO_T}$hardcode_action_F77" >&6 if test "$hardcode_action_F77" = relink; 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 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_F77 \ CC_F77 \ LD_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_static_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ export_dynamic_flag_spec_F77 \ thread_safe_flag_spec_F77 \ whole_archive_flag_spec_F77 \ enable_shared_with_static_runtimes_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ predep_objects_F77 \ postdep_objects_F77 \ predeps_F77 \ postdeps_F77 \ compiler_lib_search_path_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ postinstall_cmds_F77 \ postuninstall_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ export_symbols_cmds_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_ld_F77 \ hardcode_libdir_separator_F77 \ hardcode_automatic_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ lt_cv_prog_compiler_c_o_F77 \ exclude_expsyms_F77 \ include_expsyms_F77; do case $var in old_archive_cmds_F77 | \ old_archive_from_new_cmds_F77 | \ archive_cmds_F77 | \ archive_expsym_cmds_F77 | \ module_cmds_F77 | \ module_expsym_cmds_F77 | \ old_archive_from_expsyms_cmds_F77 | \ export_symbols_cmds_F77 | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_F77 # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_F77 old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_F77 # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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_F77 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # 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_F77 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_F77" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o objext_GCJ=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}\n" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${GCJ-"gcj"} compiler=$CC compiler_GCJ=$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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # GCJ did not exist at the time GCC didn't implicitly link libc in. archive_cmds_need_lc_GCJ=no old_archive_cmds_GCJ=$old_archive_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... lt_prog_compiler_no_builtin_flag_GCJ= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$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:17463: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17467: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_static_GCJ='-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_GCJ='-Bstatic' fi ;; amigaos*) # 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_GCJ='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # 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_GCJ='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_GCJ='-fno-common' ;; interix3*) # 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_GCJ=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_GCJ=-Kconform_pic fi ;; hpux*) # 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_GCJ='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_GCJ='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' else lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_GCJ='-qnocommon' lt_prog_compiler_wl_GCJ='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # 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_GCJ='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_GCJ='-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_GCJ='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_GCJ='-non_shared' ;; newsos6) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-fpic' lt_prog_compiler_static_GCJ='-Bstatic' ;; ccc*) lt_prog_compiler_wl_GCJ='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_GCJ='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; solaris*) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_GCJ='-Qoption ld ';; *) lt_prog_compiler_wl_GCJ='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_GCJ='-Qoption ld ' lt_prog_compiler_pic_GCJ='-PIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_GCJ='-Kconform_pic' lt_prog_compiler_static_GCJ='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; unicos*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_can_build_shared_GCJ=no ;; uts4*) lt_prog_compiler_pic_GCJ='-pic' lt_prog_compiler_static_GCJ='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_GCJ" # 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:17731: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17735: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_GCJ=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in "" | " "*) ;; *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; esac else lt_prog_compiler_pic_GCJ= lt_prog_compiler_can_build_shared_GCJ=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_GCJ= ;; *) lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_GCJ=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_GCJ=yes fi else lt_prog_compiler_static_works_GCJ=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6 if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then : else lt_prog_compiler_static_GCJ= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:17835: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:17839: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_GCJ=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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_GCJ= enable_shared_with_static_runtimes_GCJ=no archive_cmds_GCJ= archive_expsym_cmds_GCJ= old_archive_From_new_cmds_GCJ= old_archive_from_expsyms_cmds_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= thread_safe_flag_spec_GCJ= hardcode_libdir_flag_spec_GCJ= hardcode_libdir_flag_spec_ld_GCJ= hardcode_libdir_separator_GCJ= hardcode_direct_GCJ=no hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=unsupported link_all_deplibs_GCJ=unknown hardcode_automatic_GCJ=no module_cmds_GCJ= module_expsym_cmds_GCJ= always_export_symbols_GCJ=no export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_GCJ= # 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_GCJ="_GLOBAL_OFFSET_TABLE_" # 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. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # 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_GCJ=yes if test "$with_gnu_ld" = 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_GCJ='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_GCJ='${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_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_GCJ= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [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 aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_GCJ=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_GCJ='$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_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_GCJ=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_GCJ=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_GCJ=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_GCJ='-L$libdir' allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=no enable_shared_with_static_runtimes_GCJ=yes export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_GCJ='$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_GCJ='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_GCJ=no fi ;; interix3*) hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${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_GCJ='$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_GCJ='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' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;; esac archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs_GCJ=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $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_GCJ=no cat <&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. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_GCJ=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 ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac ;; sunos4*) archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac if test "$ld_shlibs_GCJ" = no; then runpath_var= hardcode_libdir_flag_spec_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=yes archive_expsym_cmds_GCJ='$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_GCJ=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_GCJ=unsupported fi ;; aix4* | aix5*) 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 if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_GCJ='$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].*|aix5*) 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_GCJ='' hardcode_direct_GCJ=yes hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes 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 hardcode_direct_GCJ=yes else # We have old collect2 hardcode_direct_GCJ=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_GCJ=yes hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_libdir_separator_GCJ= 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 # 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_GCJ=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_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${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_GCJ='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_GCJ="-z nodefs" archive_expsym_cmds_GCJ="\$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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${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_GCJ=' ${wl}-bernotok' allow_undefined_flag_GCJ=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_GCJ='$convenience' archive_cmds_need_lc_GCJ=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_GCJ="\$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*) archive_cmds_GCJ='$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_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # see comment about different semantics on the GNU ld section ld_shlibs_GCJ=no ;; bsdi[45]*) export_dynamic_flag_spec_GCJ=-rdynamic ;; cygwin* | mingw* | pw32*) # 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. hardcode_libdir_flag_spec_GCJ=' ' allow_undefined_flag_GCJ=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_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_GCJ='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_GCJ=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_GCJ=no hardcode_direct_GCJ=no hardcode_automatic_GCJ=yes hardcode_shlibpath_var_GCJ=unsupported whole_archive_flag_spec_GCJ='' link_all_deplibs_GCJ=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_GCJ=no ;; esac fi ;; dgux*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; freebsd1*) ld_shlibs_GCJ=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_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${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_GCJ='$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_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$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_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -shared -fPIC ${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_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$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 hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no ;; *) hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: link_all_deplibs_GCJ=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; newsos6) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_shlibpath_var_GCJ=no ;; openbsd*) hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' ;; *) archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes allow_undefined_flag_GCJ=unsupported archive_cmds_GCJ='$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_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_GCJ='-rpath $libdir' fi hardcode_libdir_separator_GCJ=: ;; solaris*) no_undefined_flag_GCJ=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$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' fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_shlibpath_var_GCJ=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_GCJ=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_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; sysv4) case $host_vendor in sni) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_GCJ='$CC -r -o $output$reload_objs' hardcode_direct_GCJ=no ;; motorola) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv4.3*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_GCJ=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_GCJ='${wl}-z,text' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$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_GCJ='${wl}-z,text' allow_undefined_flag_GCJ='${wl}-z,nodefs' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; *) ld_shlibs_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 echo "${ECHO_T}$ld_shlibs_GCJ" >&6 test "$ld_shlibs_GCJ" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_GCJ" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_GCJ=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_GCJ 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_GCJ pic_flag=$lt_prog_compiler_pic_GCJ compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_GCJ=no else archive_cmds_need_lc_GCJ=yes fi allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var_GCJ" || \ test "X$hardcode_automatic_GCJ" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_GCJ" != 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_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && test "$hardcode_minus_L_GCJ" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_GCJ=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_GCJ=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_GCJ=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 echo "${ECHO_T}$hardcode_action_GCJ" >&6 if test "$hardcode_action_GCJ" = relink; 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 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_GCJ \ CC_GCJ \ LD_GCJ \ lt_prog_compiler_wl_GCJ \ lt_prog_compiler_pic_GCJ \ lt_prog_compiler_static_GCJ \ lt_prog_compiler_no_builtin_flag_GCJ \ export_dynamic_flag_spec_GCJ \ thread_safe_flag_spec_GCJ \ whole_archive_flag_spec_GCJ \ enable_shared_with_static_runtimes_GCJ \ old_archive_cmds_GCJ \ old_archive_from_new_cmds_GCJ \ predep_objects_GCJ \ postdep_objects_GCJ \ predeps_GCJ \ postdeps_GCJ \ compiler_lib_search_path_GCJ \ archive_cmds_GCJ \ archive_expsym_cmds_GCJ \ postinstall_cmds_GCJ \ postuninstall_cmds_GCJ \ old_archive_from_expsyms_cmds_GCJ \ allow_undefined_flag_GCJ \ no_undefined_flag_GCJ \ export_symbols_cmds_GCJ \ hardcode_libdir_flag_spec_GCJ \ hardcode_libdir_flag_spec_ld_GCJ \ hardcode_libdir_separator_GCJ \ hardcode_automatic_GCJ \ module_cmds_GCJ \ module_expsym_cmds_GCJ \ lt_cv_prog_compiler_c_o_GCJ \ exclude_expsyms_GCJ \ include_expsyms_GCJ; do case $var in old_archive_cmds_GCJ | \ old_archive_from_new_cmds_GCJ | \ archive_cmds_GCJ | \ archive_expsym_cmds_GCJ | \ module_cmds_GCJ | \ module_expsym_cmds_GCJ | \ old_archive_from_expsyms_cmds_GCJ | \ export_symbols_cmds_GCJ | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_GCJ # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_GCJ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_GCJ # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_GCJ # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_GCJ pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_GCJ # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_GCJ old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_GCJ archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_GCJ module_expsym_cmds=$lt_module_expsym_cmds_GCJ # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_GCJ # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_GCJ # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_GCJ # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_GCJ # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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_GCJ # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_GCJ # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_GCJ # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ # 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_GCJ # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_GCJ # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_GCJ" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_GCJ # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_GCJ # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_GCJ # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_GCJ # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" else tagname="" fi ;; RC) # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' # 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. # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${RC-"windres"} compiler=$CC compiler_RC=$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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` lt_cv_prog_compiler_c_o_RC=yes # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_RC \ CC_RC \ LD_RC \ lt_prog_compiler_wl_RC \ lt_prog_compiler_pic_RC \ lt_prog_compiler_static_RC \ lt_prog_compiler_no_builtin_flag_RC \ export_dynamic_flag_spec_RC \ thread_safe_flag_spec_RC \ whole_archive_flag_spec_RC \ enable_shared_with_static_runtimes_RC \ old_archive_cmds_RC \ old_archive_from_new_cmds_RC \ predep_objects_RC \ postdep_objects_RC \ predeps_RC \ postdeps_RC \ compiler_lib_search_path_RC \ archive_cmds_RC \ archive_expsym_cmds_RC \ postinstall_cmds_RC \ postuninstall_cmds_RC \ old_archive_from_expsyms_cmds_RC \ allow_undefined_flag_RC \ no_undefined_flag_RC \ export_symbols_cmds_RC \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_flag_spec_ld_RC \ hardcode_libdir_separator_RC \ hardcode_automatic_RC \ module_cmds_RC \ module_expsym_cmds_RC \ lt_cv_prog_compiler_c_o_RC \ exclude_expsyms_RC \ include_expsyms_RC; do case $var in old_archive_cmds_RC | \ old_archive_from_new_cmds_RC | \ archive_cmds_RC | \ archive_expsym_cmds_RC | \ module_cmds_RC | \ module_expsym_cmds_RC | \ old_archive_from_expsyms_cmds_RC | \ export_symbols_cmds_RC | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU C compiler? with_gcc=$GCC_RC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_RC # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_RC old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_RC # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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_RC # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_RC # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # 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_RC # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_RC" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" ;; *) { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 echo "$as_me: error: Unsupported tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 echo "$as_me: error: unable to update list of available tagged configurations." >&2;} { (exit 1); exit 1; }; } fi fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion # No longer needed now that CPPFLAGS is correctly set -- lh, 061214 -- # AC_REQUIRE([AC_COIN_DLFCN_H]) # NEW: If libtool exists in the directory higher up, we use that one # instead of creating a new one # It turns out that the code for AC_PROG_LIBTOOL is somehow AC_REQUIRED # out in front of this macro body. You'll notice that LIBTOOL is already # defined here. We'll have to count on this macro not being called if libtool # already exists, or at least move the libtool fixes outside the conditional. # AC_MSG_NOTICE([Entering coin_prog_libtool, LIBTOOL = "$LIBTOOL".]) # This test is therefore removed. -- lh, 061214 -- # if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Calling PROG_LIBTOOL.]) # AC_MSG_NOTICE([Finished PROG_LIBTOOL.]) { echo "$as_me:$LINENO: Build is \"$build\"." >&5 echo "$as_me: Build is \"$build\"." >&6;} mydos2unix='| dos2unix' case $build in *-mingw*) CYGPATH_W=echo ;; esac case $build in # Here we need to check if -m32 is specified. If so, we need to correct # sys_lib_search_path_spec *-cygwin* | *-mingw*) case "$CXX" in clang* ) # we assume that libtool patches for CLANG are the same as for GNU compiler - correct??? { echo "$as_me:$LINENO: Applying patches to libtool for CLANG compiler" >&5 echo "$as_me: Applying patches to libtool for CLANG 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 ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Applying patches to libtool for cl compiler" >&5 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 \\$('"$CYGPATH_W \$1"') '"$mydos2unix"' | xargs echo); echo \\$bla; for i in \\$bla; do lib -nologo -extract:\\$i \\$('"$CYGPATH_W \$1"'); done%' \ -e 's%$AR t "$f_ex_an_ar_oldlib"%lib -nologo -list \$('"$CYGPATH_W \$1"') '"$mydos2unix"'%' \ -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 ;; *) { echo "$as_me:$LINENO: Applying patches to libtool for GNU compiler" >&5 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 ;; esac mv conftest.bla libtool chmod 755 libtool ;; *x86_64-*) if test "$GCC" = yes && (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm32' >& /dev/null); then { echo "$as_me:$LINENO: Applying patches to libtool for 32bit compilation" >&5 echo "$as_me: Applying patches to libtool for 32bit compilation" >&6;} sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="/lib /usr/lib"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi ;; *-solaris*) if test "$GCC" = yes && \ (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm64' >/dev/null 2>&1) ; then hdwisa=`isainfo | sed -e 's/\([^ ]*\) .*$/\1/'` if `$EGREP 'sys_lib_search_path_spec=' libtool | $EGREP -v $hdwisa >/dev/null 2>&1` ; then { echo "$as_me:$LINENO: Applying patches to libtool for 64-bit GCC compilation" >&5 echo "$as_me: Applying patches to libtool for 64-bit GCC compilation" >&6;} fixlibtmp=`$CC -m64 -print-search-dirs | $EGREP '^libraries:'` fixlibtmp=`echo $fixlibtmp | sed -e 's/libraries: =//' -e 's/:/ /g'` if `echo "$fixlibtmp" | $EGREP -v $hdwisa >/dev/null 2>&1` ; then # AC_MSG_NOTICE(Compensating for broken gcc) for lib in $fixlibtmp ; do if test -d "${lib}${hdwisa}" ; then syslibpath64="$syslibpath64 ${lib}${hdwisa}/" fi done syslibpath64="${syslibpath64} ${fixlibtmp}" else syslibpath64="$fixlibtmp" fi sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="'"$syslibpath64"'"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi # AC_MSG_NOTICE(Result is ) # $EGREP 'sys_lib_search_path_spec=' libtool fi ;; # Cygwin. Ah, cygwin. Too big and ugly to inline; see the macro. *-darwin*) { echo "$as_me:$LINENO: Applying patches to libtool for Darwin" >&5 echo "$as_me: Applying patches to libtool for Darwin" >&6;} sed -e 's/verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"/verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"/' \ -e 's/ -dynamiclib / -dynamiclib -single_module /g' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; esac # This fi matches the commented `if test "x$LIBTOOL" = x;' up at the head of # the macro. -- lh, 061214 -- # fi # AC_MSG_NOTICE([End libtool initialisation.]) # AC_MSG_NOTICE([Finished COIN_PROG_LIBTOOL.]) # set RPATH_FLAGS to the compiler link flags required to hardcode location # of the shared objects RPATH_FLAGS= if test $enable_shared = yes; then case $build in *-linux-*) if test "$GXX" = "yes"; then RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -Wl,--rpath -Wl,$dir" done fi ;; *-darwin*) RPATH_FLAGS=nothing ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) RPATH_FLAGS=nothing ;; esac ;; *-hp-*) RPATH_FLAGS=nothing ;; *-mingw32) RPATH_FLAGS=nothing ;; *-*-solaris*) RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -R$dir" done esac if test "$RPATH_FLAGS" = ""; then { echo "$as_me:$LINENO: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&5 echo "$as_me: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&2;} fi if test "$RPATH_FLAGS" = "nothing"; then RPATH_FLAGS= fi fi else { echo "$as_me:$LINENO: Using libtool script in directory $coin_config_dir" >&5 echo "$as_me: Using libtool script in directory $coin_config_dir" >&6;} # get all missing information from the config.log file # output variables and defines as_save_IFS=$IFS IFS=' ' for oneline in `cat $coin_config_dir/config.status`; do case "$oneline" in # First some automake conditionals s,@am__fastdep* | s,@AR@* | s,@CPP@* | s,@CPPFLAGS@* | s,@CXXCPP@* | \ s,@RANLIB@* | s,@STRIP@* | s,@ac_ct_AR@* | s,@ac_ct_RANLIB@* | \ s,@ac_ct_STRIP@* | s,@host* | s,@LN_S@* | s,@RPATH_FLAGS@* | \ s,@ac_c_preproc_warn_flag@* | s,@ac_cxx_preproc_warn_flag@* ) command=`echo $oneline | sed -e 's/^s,@//' -e 's/@,/="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; s,@DEFS@* ) command=`echo $oneline | sed -e 's/^s,@DEFS@,/defsline="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; esac done IFS=$as_save_IFS # And some defines (assuming here that the packages base dir # doesn't have a config.h file for word in $defsline; do # echo word $word case $word in -DHAVE_[A-Z_]*_H=1 | -DSTDC_HEADERS=1 ) i=`echo $word | sed -e 's/-D/#define /' -e 's/=/ /'` # echo dd $i echo $i >>confdefs.h ;; esac done fi # AC_MSG_NOTICE([End of INIT_AUTO_TOOLS.]) # Check whether --enable-dependency-linking or --disable-dependency-linking was given. if test "${enable_dependency_linking+set}" = set; then enableval="$enable_dependency_linking" dependency_linking="$enableval" else dependency_linking=auto fi; if test "$dependency_linking" = auto; then # On Cygwin and AIX, building DLLs doesn't work dependency_linking=no if test x"$coin_disable_shared" = xno; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) dependency_linking=yes ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) dependency_linking=no ;; *gcc*) dependency_linking=yes ;; *) dependency_linking=yes ;; esac ;; *) dependency_linking=yes ;; esac fi fi if test "$dependency_linking" = yes ; then LT_LDFLAGS="-no-undefined" else LT_LDFLAGS= fi if test "$dependency_linking" = yes; then DEPENDENCY_LINKING_TRUE= DEPENDENCY_LINKING_FALSE='#' else DEPENDENCY_LINKING_TRUE='#' DEPENDENCY_LINKING_FALSE= fi # Check if we want to set the library version echo "$as_me:$LINENO: checking if library version is set" >&5 echo $ECHO_N "checking if library version is set... $ECHO_C" >&6 if test x"$coin_libversion" != x; then LT_LDFLAGS="$LT_LDFLAGS -version-info $coin_libversion" echo "$as_me:$LINENO: result: $coin_libversion" >&5 echo "${ECHO_T}$coin_libversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi #END } # AC_MSG_NOTICE([Finished INIT_AUTO_TOOLS from CREATE_LIBTOOL.]) ############################################################################# # Check which subprojects are there # ############################################################################# echo "$as_me:$LINENO: checking whether source of project Sample is available and should be compiled" >&5 echo $ECHO_N "checking whether source of project Sample is available and should be compiled... $ECHO_C" >&6 coin_has_sample=notGiven coin_reason= # check if user wants to skip project in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Sample"; then coin_has_sample="no" coin_reason="Sample has been specified in COIN_SKIP_PROJECTS" fi if test $dir = "Data/Sample"; then coin_has_sample="no" coin_reason="Data/Sample has been specified in COIN_SKIP_PROJECTS" fi done fi if test "$coin_has_sample" != no; then # Check whether --with-m4_tolower(Sample) or --without-m4_tolower(Sample) was given. if test "${with_sample+set}" = set; then withval="$with_sample" if test "$withval" = no ; then coin_has_sample="no" coin_reason="--without-sample has been specified" fi fi; fi if test "$coin_has_sample" != no; then # Check whether --with-m4_tolower(Sample)-lib or --without-m4_tolower(Sample)-lib was given. if test "${with_sample_lib+set}" = set; then withval="$with_sample_lib" if test "$withval" = no ; then coin_has_sample="no" coin_reason="--without-sample-lib has been specified" else coin_has_sample="no" coin_reason="--with-sample-lib has been specified" fi fi; fi if test "$coin_has_sample" != no; then # Check whether --with-m4_tolower(Sample)-incdir or --without-m4_tolower(Sample)-incdir was given. if test "${with_sample_incdir+set}" = set; then withval="$with_sample_incdir" if test "$withval" = no ; then coin_has_sample="no" coin_reason="--without-sample-incdir has been specified" else coin_has_sample="no" coin_reason="--with-sample-incdir has been specified" fi fi; fi if test "$coin_has_sample" != no; then # Check whether --with-m4_tolower(Sample)-datadir or --without-m4_tolower(Sample)-datadir was given. if test "${with_sample_datadir+set}" = set; then withval="$with_sample_datadir" if test "$withval" = no ; then coin_has_sample="no" coin_reason="--without-sample-datadir has been specified" else coin_has_sample="no" coin_reason="--with-sample-datadir has been specified" fi fi; fi # check if project is available in present directory if test "$coin_has_sample" = notGiven; then coin_has_sample=no if test -d $srcdir/Data/Sample; then coin_reason="source in Data/Sample" # If a third argument is given, then we have to check if one one the files given in that third argument is present. # If none of the files in the third argument is available, then we consider the project directory as non-existing. # However, if no third argument is given, then this means that there should be no check, and existence of the directory is sufficient. coin_has_sample="yes" fi fi if test -z "$coin_reason" ; then echo "$as_me:$LINENO: result: $coin_has_sample" >&5 echo "${ECHO_T}$coin_has_sample" >&6 else echo "$as_me:$LINENO: result: $coin_has_sample, $coin_reason" >&5 echo "${ECHO_T}$coin_has_sample, $coin_reason" >&6 fi if test "$coin_has_sample" = yes ; then if test -r $srcdir/Data/Sample/configure; then coin_subdirs="$coin_subdirs Data/Sample" subdirs="$subdirs Data/Sample" fi fi echo "$as_me:$LINENO: checking whether source of project CoinUtils is available and should be compiled" >&5 echo $ECHO_N "checking whether source of project CoinUtils is available and should be compiled... $ECHO_C" >&6 coin_has_coinutils=notGiven coin_reason= # check if user wants to skip project in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "CoinUtils"; then coin_has_coinutils="no" coin_reason="CoinUtils has been specified in COIN_SKIP_PROJECTS" fi done fi if test "$coin_has_coinutils" != no; then # Check whether --with-m4_tolower(CoinUtils) or --without-m4_tolower(CoinUtils) was given. if test "${with_coinutils+set}" = set; then withval="$with_coinutils" if test "$withval" = no ; then coin_has_coinutils="no" coin_reason="--without-coinutils has been specified" fi fi; fi if test "$coin_has_coinutils" != no; then # Check whether --with-m4_tolower(CoinUtils)-lib or --without-m4_tolower(CoinUtils)-lib was given. if test "${with_coinutils_lib+set}" = set; then withval="$with_coinutils_lib" if test "$withval" = no ; then coin_has_coinutils="no" coin_reason="--without-coinutils-lib has been specified" else coin_has_coinutils="no" coin_reason="--with-coinutils-lib has been specified" fi fi; fi if test "$coin_has_coinutils" != no; then # Check whether --with-m4_tolower(CoinUtils)-incdir or --without-m4_tolower(CoinUtils)-incdir was given. if test "${with_coinutils_incdir+set}" = set; then withval="$with_coinutils_incdir" if test "$withval" = no ; then coin_has_coinutils="no" coin_reason="--without-coinutils-incdir has been specified" else coin_has_coinutils="no" coin_reason="--with-coinutils-incdir has been specified" fi fi; fi if test "$coin_has_coinutils" != no; then # Check whether --with-m4_tolower(CoinUtils)-datadir or --without-m4_tolower(CoinUtils)-datadir was given. if test "${with_coinutils_datadir+set}" = set; then withval="$with_coinutils_datadir" if test "$withval" = no ; then coin_has_coinutils="no" coin_reason="--without-coinutils-datadir has been specified" else coin_has_coinutils="no" coin_reason="--with-coinutils-datadir has been specified" fi fi; fi # check if project is available in present directory if test "$coin_has_coinutils" = notGiven; then coin_has_coinutils=no if test -d $srcdir/CoinUtils; then coin_reason="source in CoinUtils" # If a third argument is given, then we have to check if one one the files given in that third argument is present. # If none of the files in the third argument is available, then we consider the project directory as non-existing. # However, if no third argument is given, then this means that there should be no check, and existence of the directory is sufficient. coin_has_coinutils="yes" fi fi if test -z "$coin_reason" ; then echo "$as_me:$LINENO: result: $coin_has_coinutils" >&5 echo "${ECHO_T}$coin_has_coinutils" >&6 else echo "$as_me:$LINENO: result: $coin_has_coinutils, $coin_reason" >&5 echo "${ECHO_T}$coin_has_coinutils, $coin_reason" >&6 fi if test "$coin_has_coinutils" = yes ; then if test -r $srcdir/CoinUtils/configure; then coin_subdirs="$coin_subdirs CoinUtils" subdirs="$subdirs CoinUtils" fi fi echo "$as_me:$LINENO: checking whether source of project Osi is available and should be compiled" >&5 echo $ECHO_N "checking whether source of project Osi is available and should be compiled... $ECHO_C" >&6 coin_has_osi=notGiven coin_reason= # check if user wants to skip project in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Osi"; then coin_has_osi="no" coin_reason="Osi has been specified in COIN_SKIP_PROJECTS" fi done fi if test "$coin_has_osi" != no; then # Check whether --with-m4_tolower(Osi) or --without-m4_tolower(Osi) was given. if test "${with_osi+set}" = set; then withval="$with_osi" if test "$withval" = no ; then coin_has_osi="no" coin_reason="--without-osi has been specified" fi fi; fi if test "$coin_has_osi" != no; then # Check whether --with-m4_tolower(Osi)-lib or --without-m4_tolower(Osi)-lib was given. if test "${with_osi_lib+set}" = set; then withval="$with_osi_lib" if test "$withval" = no ; then coin_has_osi="no" coin_reason="--without-osi-lib has been specified" else coin_has_osi="no" coin_reason="--with-osi-lib has been specified" fi fi; fi if test "$coin_has_osi" != no; then # Check whether --with-m4_tolower(Osi)-incdir or --without-m4_tolower(Osi)-incdir was given. if test "${with_osi_incdir+set}" = set; then withval="$with_osi_incdir" if test "$withval" = no ; then coin_has_osi="no" coin_reason="--without-osi-incdir has been specified" else coin_has_osi="no" coin_reason="--with-osi-incdir has been specified" fi fi; fi if test "$coin_has_osi" != no; then # Check whether --with-m4_tolower(Osi)-datadir or --without-m4_tolower(Osi)-datadir was given. if test "${with_osi_datadir+set}" = set; then withval="$with_osi_datadir" if test "$withval" = no ; then coin_has_osi="no" coin_reason="--without-osi-datadir has been specified" else coin_has_osi="no" coin_reason="--with-osi-datadir has been specified" fi fi; fi # check if project is available in present directory if test "$coin_has_osi" = notGiven; then coin_has_osi=no if test -d $srcdir/Osi; then coin_reason="source in Osi" # If a third argument is given, then we have to check if one one the files given in that third argument is present. # If none of the files in the third argument is available, then we consider the project directory as non-existing. # However, if no third argument is given, then this means that there should be no check, and existence of the directory is sufficient. coin_has_osi="yes" fi fi if test -z "$coin_reason" ; then echo "$as_me:$LINENO: result: $coin_has_osi" >&5 echo "${ECHO_T}$coin_has_osi" >&6 else echo "$as_me:$LINENO: result: $coin_has_osi, $coin_reason" >&5 echo "${ECHO_T}$coin_has_osi, $coin_reason" >&6 fi if test "$coin_has_osi" = yes ; then if test -r $srcdir/Osi/configure; then coin_subdirs="$coin_subdirs Osi" subdirs="$subdirs Osi" fi fi echo "$as_me:$LINENO: checking whether source of project DyLP is available and should be compiled" >&5 echo $ECHO_N "checking whether source of project DyLP is available and should be compiled... $ECHO_C" >&6 coin_has_dylp=notGiven coin_reason= # check if user wants to skip project in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "DyLP"; then coin_has_dylp="no" coin_reason="DyLP has been specified in COIN_SKIP_PROJECTS" fi done fi if test "$coin_has_dylp" != no; then # Check whether --with-m4_tolower(DyLP) or --without-m4_tolower(DyLP) was given. if test "${with_dylp+set}" = set; then withval="$with_dylp" if test "$withval" = no ; then coin_has_dylp="no" coin_reason="--without-dylp has been specified" fi fi; fi if test "$coin_has_dylp" != no; then # Check whether --with-m4_tolower(DyLP)-lib or --without-m4_tolower(DyLP)-lib was given. if test "${with_dylp_lib+set}" = set; then withval="$with_dylp_lib" if test "$withval" = no ; then coin_has_dylp="no" coin_reason="--without-dylp-lib has been specified" else coin_has_dylp="no" coin_reason="--with-dylp-lib has been specified" fi fi; fi if test "$coin_has_dylp" != no; then # Check whether --with-m4_tolower(DyLP)-incdir or --without-m4_tolower(DyLP)-incdir was given. if test "${with_dylp_incdir+set}" = set; then withval="$with_dylp_incdir" if test "$withval" = no ; then coin_has_dylp="no" coin_reason="--without-dylp-incdir has been specified" else coin_has_dylp="no" coin_reason="--with-dylp-incdir has been specified" fi fi; fi if test "$coin_has_dylp" != no; then # Check whether --with-m4_tolower(DyLP)-datadir or --without-m4_tolower(DyLP)-datadir was given. if test "${with_dylp_datadir+set}" = set; then withval="$with_dylp_datadir" if test "$withval" = no ; then coin_has_dylp="no" coin_reason="--without-dylp-datadir has been specified" else coin_has_dylp="no" coin_reason="--with-dylp-datadir has been specified" fi fi; fi # check if project is available in present directory if test "$coin_has_dylp" = notGiven; then coin_has_dylp=no if test -d $srcdir/DyLP; then coin_reason="source in DyLP" # If a third argument is given, then we have to check if one one the files given in that third argument is present. # If none of the files in the third argument is available, then we consider the project directory as non-existing. # However, if no third argument is given, then this means that there should be no check, and existence of the directory is sufficient. coin_has_dylp="yes" fi fi if test -z "$coin_reason" ; then echo "$as_me:$LINENO: result: $coin_has_dylp" >&5 echo "${ECHO_T}$coin_has_dylp" >&6 else echo "$as_me:$LINENO: result: $coin_has_dylp, $coin_reason" >&5 echo "${ECHO_T}$coin_has_dylp, $coin_reason" >&6 fi if test "$coin_has_dylp" = yes ; then if test -r $srcdir/DyLP/configure; then coin_subdirs="$coin_subdirs DyLP" subdirs="$subdirs DyLP" fi fi ############################################################################## # Documentation # ############################################################################## # Doxygen documentation. Dylp is independent of Coin code, but OsiDylp can # benefit from links to doxygen doc'n for CoinUtils and Osi. { echo "$as_me:$LINENO: configuring doxygen documentation options" >&5 echo "$as_me: configuring doxygen documentation options" >&6;} # Check to see if doxygen is available. # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_doxygen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_doxygen"; then ac_cv_prog_coin_have_doxygen="$coin_have_doxygen" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_doxygen="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_doxygen" && ac_cv_prog_coin_have_doxygen="no" fi fi coin_have_doxygen=$ac_cv_prog_coin_have_doxygen if test -n "$coin_have_doxygen"; then echo "$as_me:$LINENO: result: $coin_have_doxygen" >&5 echo "${ECHO_T}$coin_have_doxygen" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_latex+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_latex"; then ac_cv_prog_coin_have_latex="$coin_have_latex" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_latex="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_latex" && ac_cv_prog_coin_have_latex="no" fi fi coin_have_latex=$ac_cv_prog_coin_have_latex if test -n "$coin_have_latex"; then echo "$as_me:$LINENO: result: $coin_have_latex" >&5 echo "${ECHO_T}$coin_have_latex" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Look for the dot tool from the graphviz package, unless the user has # disabled it. # Check whether --with-dot or --without-dot was given. if test "${with_dot+set}" = set; then withval="$with_dot" else withval=yes fi; if test x"$withval" = xno ; then coin_doxy_usedot=NO echo "$as_me:$LINENO: checking for dot " >&5 echo $ECHO_N "checking for dot ... $ECHO_C" >&6 echo "$as_me:$LINENO: result: disabled" >&5 echo "${ECHO_T}disabled" >&6 else # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_doxy_usedot+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_doxy_usedot"; then ac_cv_prog_coin_doxy_usedot="$coin_doxy_usedot" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_doxy_usedot="YES" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_doxy_usedot" && ac_cv_prog_coin_doxy_usedot="NO" fi fi coin_doxy_usedot=$ac_cv_prog_coin_doxy_usedot if test -n "$coin_doxy_usedot"; then echo "$as_me:$LINENO: result: $coin_doxy_usedot" >&5 echo "${ECHO_T}$coin_doxy_usedot" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi # Generate a tag file name and a log file name coin_doxy_tagname=doxydoc/${PACKAGE}_doxy.tag coin_doxy_logname=doxydoc/${PACKAGE}_doxy.log if test $coin_have_doxygen = yes; then COIN_HAS_DOXYGEN_TRUE= COIN_HAS_DOXYGEN_FALSE='#' else COIN_HAS_DOXYGEN_TRUE='#' COIN_HAS_DOXYGEN_FALSE= fi if test $coin_have_latex = yes; then COIN_HAS_LATEX_TRUE= COIN_HAS_LATEX_FALSE='#' else COIN_HAS_LATEX_TRUE='#' COIN_HAS_LATEX_FALSE= fi # Process the list of project names and massage them into possible doxygen # doc'n directories. Prefer 1) classic external, source processed using # a project-specific doxygen.conf, we use the tag file; 2) classic # external, source processed using package doxygen.conf; 3) installed # doxydoc. Alternatives 1) and 2) are only possible if the directory will be # configured, which we can't know unless this is the package base configure, # since coin_subdirs is only set there. Hence it's sufficient to check for # membership. If we use a tag file from a classic external, exclude the # source from doxygen processing when doxygen runs in the base directory. coin_doxy_tagfiles= coin_doxy_excludes= tmp="CoinUtils Osi" for proj in $tmp ; do lc_proj=`echo $proj | tr [A-Z] [a-z]` echo "$as_me:$LINENO: checking for doxygen doc'n for $proj " >&5 echo $ECHO_N "checking for doxygen doc'n for $proj ... $ECHO_C" >&6 doxytag=${lc_proj}_doxy.tag doxyfound=no # proj will be configured, hence doxydoc present in build tree doxysrcdir="${srcdir}/../${proj}" # AC_MSG_NOTICE([Considering $doxysrcdir (base)]) if test -d "$doxysrcdir" ; then # with a doxydoc directory? doxydir="$doxysrcdir/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (base)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) if test -d "$doxydir" ; then # use tag file; don't process source doxydir="../${proj}/doxydoc" coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=../../$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 coin_doxy_excludes="$coin_doxy_excludes */${proj}" else # will process the source -- nothing further to be done here echo "$as_me:$LINENO: result: $doxysrcdir (src)" >&5 echo "${ECHO_T}$doxysrcdir (src)" >&6 fi doxyfound=yes fi # Not built, fall back to installed tag file if test $doxyfound = no ; then eval doxydir="${datadir}/coin/doc/${proj}/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (install)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 fi done ############################################################################## # Finishing up by writing all the output # ############################################################################## # Here list all the files that configure should create (except for the # configuration header file) ac_config_files="$ac_config_files Makefile" ac_config_files="$ac_config_files doxydoc/doxygen.conf" # Finally, we let configure write all the output... echo "$as_me:$LINENO: checking which command should be used to link input files" >&5 echo $ECHO_N "checking which command should be used to link input files... $ECHO_C" >&6 coin_link_input_cmd="$LN_S" case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_link_input_cmd=cp ;; esac echo "$as_me:$LINENO: result: $coin_link_input_cmd" >&5 echo "${ECHO_T}$coin_link_input_cmd" >&6 if test x$coin_skip_ac_output != xyes; then # library extension case "$CC" in clang* ) LIBEXT=a ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LIBEXT=lib ;; *) LIBEXT=a ;; esac # Define VPATH_DISTCLEANFILES to be everything that needs to be # cleaned for distclean in a vpath configuration VPATH_DISTCLEANFILES="$coin_vpath_link_files" # Take out subdirectories if their configuration concluded that they # don't need to be compiled if test x"$coin_ac_skip_subdirs" != x; then new_subdirs= for i in $subdirs; do skipme=no for j in $coin_ac_skip_subdirs; do if test $i = $j; then skipme=yes; fi done if test $skipme = no; then new_subdirs="$new_subdirs $i" fi done subdirs="$new_subdirs" fi # need to come before AC_OUTPUT if test x$coin_projectdir != xyes; then # write coin_subdirs to a file so that project configuration knows where to find uninstalled projects echo $coin_subdirs > coin_subdirs.txt else # substitute for OBJDIR, needed to setup .pc file for uninstalled project ABSBUILDDIR="`pwd`" fi 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, don't put newlines in cache variables' values. # 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. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *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 \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" 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}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ 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[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then we branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. cat >confdef2opt.sed <<\_ACEOF t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g t quote s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g t quote d : quote s,[ `~#$^&*(){}\\|;'"<>?],\\&,g s,\[,\\&,g s,\],\\&,g s,\$,$$,g p _ACEOF # We use echo to avoid assuming a particular line-breaking character. # The extra dot is to prevent the shell from consuming trailing # line-breaks from the sub-command output. A line-break within # single-quotes doesn't work because, if this script is created in a # platform that uses two characters for line-breaks (e.g., DOS), tr # would break. ac_LF_and_DOT=`echo; echo .` DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` rm -f confdef2opt.sed ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${COIN_CC_IS_CL_TRUE}" && test -z "${COIN_CC_IS_CL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_CC_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_CC_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_CXX_IS_CL_TRUE}" && test -z "${COIN_CXX_IS_CL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_CXX_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_CXX_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${HAVE_EXTERNALS_TRUE}" && test -z "${HAVE_EXTERNALS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DEPENDENCY_LINKING_TRUE}" && test -z "${DEPENDENCY_LINKING_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"DEPENDENCY_LINKING\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"DEPENDENCY_LINKING\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_DOXYGEN_TRUE}" && test -z "${COIN_HAS_DOXYGEN_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LATEX_TRUE}" && test -z "${COIN_HAS_LATEX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $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} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by DyLP $as_me 1.10.4, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -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 --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ DyLP config.status 1.10.4 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. 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=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; 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 if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doxydoc/doxygen.conf" ) CONFIG_FILES="$CONFIG_FILES doxydoc/doxygen.conf" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; 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_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 to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@CDEFS@,$CDEFS,;t t s,@ADD_CFLAGS@,$ADD_CFLAGS,;t t s,@DBG_CFLAGS@,$DBG_CFLAGS,;t t s,@OPT_CFLAGS@,$OPT_CFLAGS,;t t s,@sol_cc_compiler@,$sol_cc_compiler,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@COIN_CC_IS_CL_TRUE@,$COIN_CC_IS_CL_TRUE,;t t s,@COIN_CC_IS_CL_FALSE@,$COIN_CC_IS_CL_FALSE,;t t s,@MPICC@,$MPICC,;t t s,@CXXDEFS@,$CXXDEFS,;t t s,@ADD_CXXFLAGS@,$ADD_CXXFLAGS,;t t s,@DBG_CXXFLAGS@,$DBG_CXXFLAGS,;t t s,@OPT_CXXFLAGS@,$OPT_CXXFLAGS,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@COIN_CXX_IS_CL_TRUE@,$COIN_CXX_IS_CL_TRUE,;t t s,@COIN_CXX_IS_CL_FALSE@,$COIN_CXX_IS_CL_FALSE,;t t s,@MPICXX@,$MPICXX,;t t s,@ADD_FFLAGS@,$ADD_FFLAGS,;t t s,@DBG_FFLAGS@,$DBG_FFLAGS,;t t s,@OPT_FFLAGS@,$OPT_FFLAGS,;t t s,@F77@,$F77,;t t s,@ac_ct_F77@,$ac_ct_F77,;t t s,@FFLAGS@,$FFLAGS,;t t s,@MPIF77@,$MPIF77,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@mkdir_p@,$mkdir_p,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@AMTAR@,$AMTAR,;t t s,@am__tar@,$am__tar,;t t s,@am__untar@,$am__untar,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@CXXDEPMODE@,$CXXDEPMODE,;t t s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t s,@MAINT@,$MAINT,;t t s,@LIBTOOLM4@,$LIBTOOLM4,;t t s,@have_autoconf@,$have_autoconf,;t t s,@have_automake@,$have_automake,;t t s,@have_svn@,$have_svn,;t t s,@BUILDTOOLSDIR@,$BUILDTOOLSDIR,;t t s,@AUX_DIR@,$AUX_DIR,;t t s,@abs_source_dir@,$abs_source_dir,;t t s,@abs_lib_dir@,$abs_lib_dir,;t t s,@abs_include_dir@,$abs_include_dir,;t t s,@abs_bin_dir@,$abs_bin_dir,;t t s,@HAVE_EXTERNALS_TRUE@,$HAVE_EXTERNALS_TRUE,;t t s,@HAVE_EXTERNALS_FALSE@,$HAVE_EXTERNALS_FALSE,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@ECHO@,$ECHO,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@CPP@,$CPP,;t t s,@CXXCPP@,$CXXCPP,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@ac_c_preproc_warn_flag@,$ac_c_preproc_warn_flag,;t t s,@ac_cxx_preproc_warn_flag@,$ac_cxx_preproc_warn_flag,;t t s,@RPATH_FLAGS@,$RPATH_FLAGS,;t t s,@DEPENDENCY_LINKING_TRUE@,$DEPENDENCY_LINKING_TRUE,;t t s,@DEPENDENCY_LINKING_FALSE@,$DEPENDENCY_LINKING_FALSE,;t t s,@LT_LDFLAGS@,$LT_LDFLAGS,;t t s,@COIN_SKIP_PROJECTS@,$COIN_SKIP_PROJECTS,;t t s,@subdirs@,$subdirs,;t t s,@coin_have_doxygen@,$coin_have_doxygen,;t t s,@coin_have_latex@,$coin_have_latex,;t t s,@coin_doxy_usedot@,$coin_doxy_usedot,;t t s,@coin_doxy_tagname@,$coin_doxy_tagname,;t t s,@coin_doxy_logname@,$coin_doxy_logname,;t t s,@COIN_HAS_DOXYGEN_TRUE@,$COIN_HAS_DOXYGEN_TRUE,;t t s,@COIN_HAS_DOXYGEN_FALSE@,$COIN_HAS_DOXYGEN_FALSE,;t t s,@COIN_HAS_LATEX_TRUE@,$COIN_HAS_LATEX_TRUE,;t t s,@COIN_HAS_LATEX_FALSE@,$COIN_HAS_LATEX_FALSE,;t t s,@coin_doxy_tagfiles@,$coin_doxy_tagfiles,;t t s,@coin_doxy_excludes@,$coin_doxy_excludes,;t t s,@LIBEXT@,$LIBEXT,;t t s,@VPATH_DISTCLEANFILES@,$VPATH_DISTCLEANFILES,;t t s,@ABSBUILDDIR@,$ABSBUILDDIR,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # 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. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;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,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; 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. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || 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"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # 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 || { (exit 1); exit 1; } fi # # CONFIG_SUBDIRS section. # if test "$no_recursion" != yes; then # Remove --cache-file and --srcdir arguments so they do not pile up. ac_sub_configure_args= ac_prev= for ac_arg in $ac_configure_args; do if test -n "$ac_prev"; then ac_prev= continue fi case $ac_arg in -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=*) ;; --config-cache | -C) ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ;; *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;; esac done # Always prepend --prefix to ensure using the same prefix # in subdir configurations. ac_sub_configure_args="--prefix=$prefix $ac_sub_configure_args" ac_popdir=`pwd` for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue # Do not complain, so a configure script can configure whichever # parts of a large source tree are present. test -d $srcdir/$ac_dir || continue { echo "$as_me:$LINENO: configuring in $ac_dir" >&5 echo "$as_me: configuring in $ac_dir" >&6;} { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then ac_sub_configure="$SHELL '$ac_srcdir/configure.gnu'" elif test -f $ac_srcdir/configure; then ac_sub_configure="$SHELL '$ac_srcdir/configure'" elif test -f $ac_srcdir/configure.in; then ac_sub_configure=$ac_configure else { echo "$as_me:$LINENO: WARNING: no configuration information is in $ac_dir" >&5 echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} ac_sub_configure= fi # The recursion is here. if test -n "$ac_sub_configure"; then # Make the cache file name correct relative to the subdirectory. case $cache_file in [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; *) # Relative path. ac_sub_cache_file=$ac_top_builddir$cache_file ;; esac { echo "$as_me:$LINENO: running $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 echo "$as_me: running $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} # The eval makes quoting arguments work. eval $ac_sub_configure $ac_sub_configure_args \ --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir || { { echo "$as_me:$LINENO: error: $ac_sub_configure failed for $ac_dir" >&5 echo "$as_me: error: $ac_sub_configure failed for $ac_dir" >&2;} { (exit 1); exit 1; }; } fi cd $ac_popdir done fi if test x"$coin_vpath_link_files" = x; then : ; else lnkcmd="$coin_link_input_cmd" if test "$lnkcmd" = cp; then { echo "$as_me:$LINENO: Copying data files for VPATH configuration" >&5 echo "$as_me: Copying data files for VPATH configuration" >&6;} else { echo "$as_me:$LINENO: Creating VPATH links for data files" >&5 echo "$as_me: Creating VPATH links for data files" >&6;} fi for file in $coin_vpath_link_files; do dir=`(dirname "./$file") 2>/dev/null || $as_expr X"./$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"./$file" : 'X\(//\)[^/]' \| \ X"./$file" : 'X\(//\)$' \| \ X"./$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"./$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test -d $dir; then : ; else { if $as_mkdir_p; then mkdir -p $dir else as_dir=$dir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dir" >&5 echo "$as_me: error: cannot create directory $dir" >&2;} { (exit 1); exit 1; }; }; } fi rm -f $file $lnkcmd $abs_source_dir/$file $file done fi { echo "$as_me:$LINENO: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&5 echo "$as_me: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&6;} if test x$coin_projectdir = xyes; then { echo "$as_me:$LINENO: Configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Configuration of $PACKAGE_NAME successful" >&6;} else { echo "$as_me:$LINENO: Main configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Main configuration of $PACKAGE_NAME successful" >&6;} fi else { echo "$as_me:$LINENO: No configuration of $PACKAGE_NAME necessary" >&5 echo "$as_me: No configuration of $PACKAGE_NAME necessary" >&6;} fi DyLP-1.10.4/LICENSE0000644000175200017520000000032310445627054012065 0ustar coincoinFor licensing information for files in this directory, please see the comments in the header of each file. For licensing of files in each of the subdirectories, please see the LICENSE file in that subdirectory. DyLP-1.10.4/Makefile.in0000644000175200017520000007001412506276701013130 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 # Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 ######################################################################## # Documentation installation # ######################################################################## srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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@ DIST_COMMON = README $(am__configure_deps) \ $(srcdir)/BuildTools/Makemain.inc $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/configure \ $(top_srcdir)/doxydoc/doxygen.conf.in INSTALL config.guess \ config.sub depcomp install-sh ltmain.sh missing @HAVE_EXTERNALS_TRUE@am__append_1 = Dependencies @HAVE_EXTERNALS_TRUE@am__append_2 = .Dependencies-stamp subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.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 configure.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = doxydoc/doxygen.conf SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ADD_FFLAGS = @ADD_FFLAGS@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_SKIP_PROJECTS = @COIN_SKIP_PROJECTS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DBG_FFLAGS = @DBG_FFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OPT_FFLAGS = @OPT_FFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign EXTRA_DIST = INSTALL LICENSE README $(am__append_1) ######################################################################## # Subdirectories # ######################################################################## # subdirs is set by configure as the list of all subdirectories to recurse # into SUBDIRS = $(subdirs) ######################################################################## # Maintainer Stuff # ######################################################################## # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = coin_subdirs.txt $(am__append_2) \ $(VPATH_DISTCLEANFILES) DocFiles = README AUTHORS LICENSE DocInstallDir = $(datadir)/coin/doc/$(PACKAGE_NAME) COIN_HAS_DOXYGEN = @COIN_HAS_DOXYGEN_TRUE@TRUE COIN_HAS_LATEX = @COIN_HAS_LATEX_TRUE@TRUE all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/BuildTools/Makemain.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ cd $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ 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) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) doxydoc/doxygen.conf: $(top_builddir)/config.status $(top_srcdir)/doxydoc/doxygen.conf.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: # 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. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; 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; \ (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" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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 || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/BuildTools $(distdir)/doxydoc @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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 \ test -d "$(distdir)/$$subdir" \ || $(mkdir_p) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -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 $(SHELL) $(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__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__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) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(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 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { 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 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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 clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-exec-am: install-info: install-info-recursive install-man: 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-info-am uninstall-local uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ check-am clean clean-generic clean-libtool clean-local \ clean-recursive ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \ distclean-generic distclean-libtool distclean-recursive \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-exec install-exec-am \ install-info install-info-am install-man install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-generic \ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am uninstall-info-am \ uninstall-local ######################################################################## # Extra Targets # ######################################################################## test: all cd DyLP; $(MAKE) test unitTest: test tests: all for dir in $(subdirs); do \ if test -r $$dir/test/Makefile; then \ (cd $$dir; $(MAKE) test) \ fi; \ done unitTests: tests # Generate doxygen doc'n in subdirectories (except @PACKAGE_NAME@) if a doxydoc # directory is present, then do the base, if present. doxydoc: for dir in $(subdirs) ; do \ if test $$dir != @PACKAGE_NAME@ && test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) doxydoc) \ fi ; \ done ; \ if test -r doxydoc/doxygen.conf ; then \ doxygen doxydoc/doxygen.conf ; \ fi @echo "'make doc' to build typeset documentation." clean-doxydoc: ( cd doxydoc ; rm -rf html *.log *.tag ) # DocInstallDir is defined in Makemain.inc and is specific to the package. # For the short term, adopt the notion that we install only the package # doxydoc. install-doxydoc: doxydoc if test -r doxydoc/doxygen.conf ; then \ $(mkdir_p) $(DocInstallDir) ; \ cp -R doxydoc $(DocInstallDir) ; \ fi uninstall-doxydoc: rm -rf $(DocInstallDir)/doxydoc clean-local: clean-doxydoc # install-data-local: install-doxydoc uninstall-local: uninstall-doxydoc # Generate typeset documentation --- will work only if there's a complete # LaTeX installation in the expected places. doc: cd DyLP; $(MAKE) doc @echo "'make doxydoc' to build doxygen documentation." .PHONY: test unitTest tests unitTests doxydoc doc doxygen-docs: if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ doxygen doxydoc/doxygen.conf;\ fi;\ fi pdf-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/latex"; then \ if test "$(COIN_HAS_LATEX)" = TRUE; then \ cd doxydoc/latex;\ $(MAKE) pdf;\ cd -;\ fi;\ fi;\ fi clean-doxygen-docs: if test -d "doxydoc/"; then \ cd doxydoc ;\ rm -rf html latex *.log *.tag;\ fi install-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc"; \ $(INSTALL_DATA) @coin_doxy_tagname@ "$(DESTDIR)$(DocInstallDir)/@coin_doxy_tagname@";\ if test -f "doxydoc/latex/refman.pdf"; then \ $(INSTALL_DATA) doxydoc/latex/refman.pdf "$(DESTDIR)$(DocInstallDir)";\ fi;\ if test -d "doxydoc/html"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/search/" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc/search/"; \ $(INSTALL_DATA) doxydoc/html/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc";\ $(INSTALL_DATA) doxydoc/html/search/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc/search";\ fi;\ fi;\ fi uninstall-doxygen-docs: if test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/"; then \ rm -rf "$(DESTDIR)$(DocInstallDir)/doxydoc/"; \ fi if test -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; then \ rm -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; \ fi all-doxygen-docs: for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) doxygen-docs) \ fi ; \ done ; clean-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) clean-doxygen-docs) \ fi ; \ done ; install-all-doxygen-docs: all-doxygen-docs for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) install-doxygen-docs) \ fi ; \ done ; uninstall-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) uninstall-doxygen-docs) \ fi ; \ done ; install-doc: $(DocFiles) test -z "$(DocInstallDir)" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)" for file in $(DocFiles); do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ if test -f "$$dir$$file"; then $(INSTALL_DATA) "$$dir$$file" "$(DESTDIR)$(DocInstallDir)/$$file"; fi; \ done uninstall-doc: for file in $(DocFiles); do \ rm -f "$(DESTDIR)$(DocInstallDir)/$$file"; \ done ######################################################################## # Maintainer Stuff # ######################################################################## # Make sure acinclude is using most recent coin.m4 @MAINTAINER_MODE_TRUE@$(srcdir)/acinclude.m4: $(BUILDTOOLSDIR)/coin.m4 @MAINTAINER_MODE_TRUE@ cat $(LIBTOOLM4) $< > $@ # Make sure the autotools scripts are up to date @MAINTAINER_MODE_TRUE@$(AUX_DIR)/install-sh: $(BUILDTOOLSDIR)/install-sh @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/missing: $(BUILDTOOLSDIR)/missing @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.guess: $(BUILDTOOLSDIR)/config.guess @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.sub: $(BUILDTOOLSDIR)/config.sub @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/depcomp: $(BUILDTOOLSDIR)/depcomp @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/ltmain.sh: $(BUILDTOOLSDIR)/ltmain.sh @MAINTAINER_MODE_TRUE@ cp $< $@ # Take care of updating externals (if Dependencies file exists) @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@$(top_builddir)/Makefile: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@.Dependencies-stamp: $(srcdir)/Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); BuildTools/set_externals Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ touch .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@update-externals: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); svn update .PHONY: install-doc uninstall-doc update-externals # 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: DyLP-1.10.4/.travis.yml0000644000175200017520000000154413434070773013200 0ustar coincoinlanguage: cpp matrix: include: - os: linux addons: apt: packages: - gfortran - os: osx osx_image: xcode10 env: OSX=10.13 compiler: clang - os: osx osx_image: xcode9.2 env: OSX=10.12 compiler: clang - os: osx osx_image: xcode8 env: OSX=10.11 compiler: clang allow_failures: - os: osx before_script: - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; brew install bash gcc; brew link --overwrite gcc; gfortran --version; fi - git clone https://github.com/coin-or/COIN-OR-OptimizationSuite COIN - cd COIN - export PROJECT=`echo $TRAVIS_REPO_SLUG | cut -d "/" -f 2` - bash ./coin.install.sh fetch --no-prompt --main-proj=$PROJECT > /dev/null script: - bash ./coin.install.sh build --no-prompt --main-proj=$PROJECT --verbosity=2 --test DyLP-1.10.4/Dependencies0000644000175200017520000000054413434070773013377 0ustar coincoinBuildTools https://projects.coin-or.org/svn/BuildTools/stable/0.8 Data/Netlib https://projects.coin-or.org/svn/Data/Netlib/stable/1.2 Data/Sample https://projects.coin-or.org/svn/Data/Sample/stable/1.2 CoinUtils https://projects.coin-or.org/svn/CoinUtils/stable/2.11/CoinUtils Osi https://projects.coin-or.org/svn/Osi/stable/0.108/Osi DyLP-1.10.4/depcomp0000755000175200017520000003710010442173473012436 0ustar coincoin#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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 outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac 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" # 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 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. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## 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). ## - 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 -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## 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. tr ' ' ' ' < "$tmpdepfile" | ## 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. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -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 -eq 0; then : else 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 ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; 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. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else 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" ;; 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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in 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.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #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 $1 != '--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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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 $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac 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. -*|$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" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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 $1 != '--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, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; 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-end: "$" # End: DyLP-1.10.4/config.guess0000755000175200017520000012706310643314772013413 0ustar coincoin#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-05-17' # 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 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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 Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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 # 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 tupples: *-*-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 __ELF__ >/dev/null 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 ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-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'` exit ;; 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-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-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-unknown-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 ;; 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:SunOS:5.*:* | ix86xen:SunOS:5.*:*) echo i386-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-unknown-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:*:[45]) 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 __LP64__ >/dev/null 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}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-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-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-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-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu 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 ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${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-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa:Linux:*:*) echo xtensa-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; 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}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-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}-unknown-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 i386. echo i386-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-unknown-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; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-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-unknown-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 ;; 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 case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac 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 ;; 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}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-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-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-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 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 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: DyLP-1.10.4/README0000644000175200017520000000042010444601524011727 0ustar coincoin To install this package, please look at the INSTALL file. This package contains several subdirectories corresponding to COIN-OR projects (www.coin-or.org). The AUTHORS, LICENSE and README files in each of the subdirectories give more information about these projects. DyLP-1.10.4/config.sub0000755000175200017520000007772610643314772013070 0ustar coincoin#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-04-29' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # 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 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # 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. # 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) 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) os= basic_machine=$1 ;; -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*) 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 \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | 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 | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-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-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | 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-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | 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-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # 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 ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; 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 ;; cr16c) basic_machine=cr16c-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 ;; 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'm not sure what "Sysv32" means. Should this be sysv3.2? 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 ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; 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-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; 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 ;; 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 ;; 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) basic_machine=powerpc-unknown ;; ppc-*) 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) 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 ;; 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 ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; 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 ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-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[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. -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* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -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* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -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*) # 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 ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -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 ;; # 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 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) 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 ;; -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: DyLP-1.10.4/ltmain.sh0000755000175200017520000057753010442173473012724 0ustar coincoin# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 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 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # 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. basename="s,^.*/,,g" # 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" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" # 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 # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # 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 "$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" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # 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. func_win32_libid () { 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 if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $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_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 () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done 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 "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # 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. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # 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 $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi 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 my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do 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 have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2005 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --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 $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # 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= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # 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= 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) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$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,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$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. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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 $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) 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 "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 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 $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "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." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </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." $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 $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </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." $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 $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built fi 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 case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$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 dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= 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 compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes 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 $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" 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*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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*) # 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 deplibs="$deplibs -framework System" 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 deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -pg pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ -t[45]*|-txscale*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 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*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # 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 ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" 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. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'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\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; 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 test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$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 test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$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 case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; 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 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 "$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) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; 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 (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac 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 ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." 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 -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; 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 newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` 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 used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi 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. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # 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 case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$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 $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE 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. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$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 $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$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 notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi 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 newlib_search_path="$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*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test 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 test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$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 -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 *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if 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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; 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*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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 "$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 module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; 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 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; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$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 $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$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:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; 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:"*) ;; *) finalize_shlibpath="$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 [\\/]*) add_dir="$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*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$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" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared 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 "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs 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 "*) ;; *) lib_search_path="$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 "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$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 tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" 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 if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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="$2" number_minor="$3" number_revision="$4" # # 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 darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; 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]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE 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 major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` 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 iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` 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 iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; 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 $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$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) ;; $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 removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` dependency_libs=`$echo "$dependency_libs " | ${SED} -e "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 temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 "*) ;; *) dlfiles="$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 "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-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 deplibs="$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. $rm conftest.c cat > conftest.c </dev/null` 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$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 newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e '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 "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $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 fi ;; 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 is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; 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 # 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$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 if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$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 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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$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" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$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 "$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 realname="$2" shift; 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 linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "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"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $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:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # 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 output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$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. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 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~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "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" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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\" 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 # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(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 "$mode" = relink; then $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 $show "${rm}r $gentop" $run ${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 $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run 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 "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $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 wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${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" # $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" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$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 "*) ;; *) finalize_rpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$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 "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # 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/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= 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*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; 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 "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" 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 rpath="$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 rpath="$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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? 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" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e '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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` 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 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #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 # 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 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ 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; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); 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 ("getcwd failed"); 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 ("getcwd failed"); 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 * 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; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # 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 variable: 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 echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ 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 >> $output "\ # 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 $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE 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 $EXIT_FAILURE fi fi\ " chmod +x $output fi 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" 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" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$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 # 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 $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_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 for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$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= 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 save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; 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 "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then 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) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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' # Libraries that this one depends upon. dependency_libs='$dependency_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 fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # 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. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; 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. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$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 "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. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi 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 $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run 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 if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run 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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` 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 file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "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) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $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" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 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 -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # 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 ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" 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) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; 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 (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$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 rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [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 --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information 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. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [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: $modename [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 -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking 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: $modename [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: $modename [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: $modename [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 rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [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 -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 -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] 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: $modename [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." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # 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 disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: DyLP-1.10.4/configure.ac0000644000175200017520000000523713434071654013357 0ustar coincoin # Copyright (C) 2006 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: configure.ac 627 2019-02-22 22:11:56Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 # Lou Hafer SFU many mods since then ############################################################################# # Names and other basic things # ############################################################################# AC_PREREQ(2.59) AC_INIT([DyLP],[1.10.4],[coin-dylp@lists.coin-or.org]) AC_COPYRIGHT([ Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License.]) AC_REVISION(0.10) # List one file in the package so that the configure script can test # whether the package is actually there AC_CONFIG_SRCDIR(configure.ac) # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. AC_PREFIX_DEFAULT([`pwd`]) ############################################################################# # Do the tests necessary to configure compilers and initialise autotools # ############################################################################# AC_COIN_CREATE_LIBTOOL ############################################################################# # Check which subprojects are there # ############################################################################# AC_COIN_MAIN_PACKAGEDIR(Sample,Data) AC_COIN_MAIN_PACKAGEDIR(CoinUtils) AC_COIN_MAIN_PACKAGEDIR(Osi) AC_COIN_MAIN_PACKAGEDIR(DyLP) ############################################################################## # Documentation # ############################################################################## # Doxygen documentation. Dylp is independent of Coin code, but OsiDylp can # benefit from links to doxygen doc'n for CoinUtils and Osi. AC_COIN_DOXYGEN([CoinUtils Osi]) ############################################################################## # Finishing up by writing all the output # ############################################################################## # Here list all the files that configure should create (except for the # configuration header file) AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([doxydoc/doxygen.conf]) # Finally, we let configure write all the output... AC_COIN_FINALIZE DyLP-1.10.4/appveyor.yml0000644000175200017520000000331213434070773013452 0ustar coincoinplatform: - x64 environment: matrix: - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 ARCH: win32-msvc9 HOST_ARCH_ARG: --enable-msvc=MD ADD_PATH: /mingw64/bin - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 ARCH: win32-msvc14 HOST_ARCH_ARG: --enable-msvc ADD_PATH: /mingw64/bin - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 ARCH: win32-msvc15 HOST_ARCH_ARG: --enable-msvc ADD_PATH: /mingw64/bin - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 ARCH: x86_64-w64-mingw32 HOST_ARCH_ARG: --host=x86_64-w64-mingw32 ADD_PATH: /mingw64/bin - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 ARCH: i686-w64-mingw32 HOST_ARCH_ARG: --host=i686-w64-mingw32 ADD_PATH: /mingw32/bin install: - IF %ARCH%==win32-msvc9 (CALL C:\"Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat") - IF %ARCH%==win32-msvc14 (CALL C:\"Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat") - IF %ARCH%==win32-msvc15 (CALL C:\"Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 8.1) - C:\msys64\usr\bin\bash -lc "" build_script: - C:\msys64\usr\bin\bash -lc "cd $APPVEYOR_BUILD_FOLDER; git clone https://github.com/coin-or/COIN-OR-OptimizationSuite COIN" - C:\msys64\usr\bin\bash -lc "cd $APPVEYOR_BUILD_FOLDER/COIN; ./coin.install.sh fetch --no-prompt --main-proj=%APPVEYOR_PROJECT_NAME% --no-third-party" - C:\msys64\usr\bin\bash -lc "cd $APPVEYOR_BUILD_FOLDER/COIN; export PATH=$ADD_PATH:$PATH; ./coin.install.sh build --no-prompt --main-proj=%APPVEYOR_PROJECT_NAME% --no-third-party --build=x86_64-w64-mingw32 $HOST_ARCH_ARG --verbosity=2 --test" test: offDyLP-1.10.4/INSTALL0000644000175200017520000001016511417401754012113 0ustar coincoinThese instructions are for UNIX-like systems (including Linux, Cygwin and MSys) only. If Microsoft Developer Studio projects are maintained for this package, you can find instructions at https://projects.coin-or.org/MSVisualStudio ********************************************************************** *** DOWNLOAD *** ********************************************************************** You can obtain the source code for the DyLP package in two ways: 1. Obtain the source directly from the COIN-OR subversion repository (recommended). For this you needs the program 'svn' installed on your machine, and output of "svn --version" must contain "handles 'https' scheme". Assuming that you want to download the code into a subdirectory "Coin-DyLP", you type svn co https://projects.coin-or.org/svn/DyLP/trunk Coin-DyLP 2. Download the tarball from http://www.coin-or.org/Tarballs/DyLP and extract it, for example, with gunzip DyLP_2006Jun07.tgz tar xvf DyLP_2006Jun07.tar (Here "2006Jun07" is of course replaced by the string in the tarball you downloaded.) More detailed download instructions can be found at https://projects.coin-or.org/BuildTools/wiki/user-download ********************************************************************** *** CONFIGURATION *** ********************************************************************** Go into the directory that you just downloaded or extracted (e.g., Coin-DyLP or DyLP_2006Jun07). Then you type ./configure Note that you might have to specify additional options, in case you don't want to use the default choices that configure makes (e.g., compilers). Please visit https://projects.coin-or.org/BuildTools/wiki/user-configure and the DyLP Trac page https://projects.coin-or.org/DyLP for more information. If everything went fine, you will see at the end of the output "Main configuration of DyLP successful" ********************************************************************** *** COMPILATION AND INSTALLATION *** ********************************************************************** In the directory where you ran the configure script: 1. Compile the code by typing make 2. To test if the code works, you can type make test 3. To install the code, you type make install After this, you will find the executables, libraries and header files in the "bin", "lib" and "include" subdirectory, respectively. More information on the compilation and installation can be found at https://projects.coin-or.org/BuildTools/wiki/user-compile ********************************************************************** *** USING THE LIBRARIES *** ********************************************************************** Now you can link your own code with the installed libraries. You can find examples in the DyLP/examples/ subdirectory. To build dylp's example drivers, cd to DyLP/examples and read the README file there. It contains detailed instructions. See also the information at https://projects.coin-or.org/BuildTools/wiki/user-examples ********************************************************************** *** DOCUMENTATION *** ********************************************************************** In the DyLP/doc directory, you'll find a longish (about 90 pages) tech report (PostScript and PDF) which explains the algorithms used in dylp and the options and interfaces that are available. The code itself is heavily commented. Section 12, `Dynamic Simplex', (in particular, Fig. 3) is your best bet for a high-level overview of the dynamic simplex algorithm. OsiDylp, the OSI interface layer for dylp, is commented using doxygen conventions, but dylp is not (yet). LaTeX source for the tech report is included, should you want to build the documentation from scratch. There's no guarantee this will go smoothly, but your chances are fairly good if you have a modern TeX distribution. See the README in DyLP/doc. DyLP-1.10.4/DyLP/0000755000175200017520000000000013434203622011662 5ustar coincoinDyLP-1.10.4/DyLP/configure.ac0000644000175200017520000002432413434071654014165 0ustar coincoin# Copyright (C) 2006 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: configure.ac,v 1.1.2.1 2006/04/19 23:25:12 andreasw Exp $ # Author: Andreas Waechter IBM 2006-04-13 # Lou Hafer SFU many mods since then ############################################################################# # Names and other basic things # ############################################################################# AC_PREREQ(2.59) AC_INIT([DyLP],[1.10.4],[coin-dylp@list.coin-or.org]) AC_COPYRIGHT([ Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License.]) AC_REVISION(0.10) # List one file in the package so that the configure script can test # whether the package is actually there AC_CONFIG_SRCDIR(src/Dylp/dylp.h) # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. AC_PREFIX_DEFAULT([`pwd`]) ############################################################################# # Standard build tool stuff # ############################################################################# # Get the system type AC_CANONICAL_BUILD # Do a bit of basic setup for configuration AC_COIN_PROJECTDIR_INIT(DyLP,10:4:9) # Check if user wants to produce debugging code AC_COIN_DEBUG_COMPILE(DyLP) # Get the name of the C compiler and appropriate compiler options AC_COIN_PROG_CC # Get the name of the C++ compiler and appropriate compiler options AC_COIN_PROG_CXX # Initialize automake and libtool AC_COIN_INIT_AUTO_TOOLS ############################################################################# # COIN components # ############################################################################# # None of these are required to build and test libDylp. All are needed to # properly test libOsiDylp and to fully link the doxygen documentation. # (So we should actually not need to search for CoinUtils separately.) AC_COIN_CHECK_PACKAGE([CoinUtils],[coinutils],[OsiDyLPLib]) AC_COIN_CHECK_PACKAGE([Osi],[osi],[OsiDyLPLib]) AC_COIN_CHECK_PACKAGE([OsiTests],[osi-unittests]) # Just Sample will be enough to run basic tests. If Netlib is present, the # OsiDylp test will run the Netlib problem set. AC_COIN_CHECK_PACKAGE([Sample],[coindatasample]) AC_COIN_CHECK_PACKAGE([Netlib],[coindatanetlib]) ############################################################################# # Doing project specific tests # ############################################################################# # Tweak compilation flags. AC_DYLP_FIX_CPPFLAGS # Determine the C type that corresponds to the C++ bool type in size AC_DYLP_EQUIV_FOR_CPP_BOOL ######################################################################## AC_SUBST(DYLPLIB_LIBS) AC_SUBST(DYLPLIB_PCLIBS) AC_SUBST(DYLPLIB_LIBS_INSTALLED) # The floating point functions we'll be looking for seem to live in one of # the following headers: math.h, ieeefp.h, float.h, and sunmath.h. Check # for presence. We'll use the results to limit the work below. # check for presence/absence of -lm (for libmath) and store in DYLP_(PC)LIBS flags AC_COIN_CHECK_LIBM(DyLPLib) AC_CHECK_HEADER([math.h], [AC_DEFINE([HAVE_MATH_H],[1],[Define to 1 if math.h exists.]) fp_header_list="math.h" AC_C_ADD_TO_INCLUDES([math.h])], [AC_MSG_WARN([It appears that math.h is missing.]) AC_MSG_WARN([There is no hope of building dylp on this system.])]) AC_CHECK_HEADER([ieeefp.h], [AC_DEFINE([HAVE_IEEEFP_H],[1],[Define to 1 if ieeefp.h exists.]) fp_header_list="ieeefp.h $fp_header_list" AC_C_ADD_TO_INCLUDES([ieeefp.h])], []) AC_CHECK_HEADER([float.h], [AC_DEFINE([HAVE_FLOAT_H],[1],[Define to 1 if float.h exists.]) fp_header_list="float.h $fp_header_list" AC_C_ADD_TO_INCLUDES([float.h])], []) AC_CHECK_HEADER([sunmath.h], [AC_DEFINE([HAVE_SUNMATH_H],[1],[Define to 1 if sunmath.h exists.]) fp_header_list="sunmath.h $fp_header_list" AC_C_ADD_TO_INCLUDES([sunmath.h]) AC_DYLP_GET_SUNSTUDIO_LIBDIRS DYLPLIB_LIBS="-lsunmath $DYLPLIB_LIBS" DYLPLIB_LIBS_INSTALLED="-lsunmath $DYLPLIB_LIBS_INSTALLED" DYLPLIB_PCLIBS="-lsunmath $DYLPLIB_PCLIBS"], []) AC_MSG_NOTICE([Found floating point header files $fp_header_list.]) # AC_MSG_NOTICE([includes are now:]) # AC_MSG_NOTICE([$ac_includes_default]) # Now determine the names in this environment for isfinite() and isnan(). The # most common variants are finite() and isnan(). We check for others. After # these macros finish, DYLP_ISFINITE has the name for isfinite(), and # DYLP_ISNAN has the name for isnan(). AC_DYLP_FIND_ISFINITE AC_DYLP_FIND_ISNAN # Check for the presence of a quiet_nan function. To my knowledge, this will # exist only if sunmath is present, but hey, who knows what lurks out there. AC_CHECK_FUNC([quiet_nan], [AC_DEFINE([DYLP_HAS_QUIET_NAN],[1], [Define this symbol if the quiet_nan function exists. This function should return the bit pattern for IEEE quiet NaN.])]) # And determine whether we're big-endian or little-endian. This is necessary to # define the correct patterns for IEEE infinity and quiet_nan, in the event # that we can't get them any other way. This will define WORDS_BIGENDIAN if # we're on a big-endian machine, and do nothing otherwise. AC_C_BIGENDIAN # Finally, dylp needs to know where its error message text file is located. # This is made horribly complicated by Windows, which uses drive letters and # backslash in the native path format, and by the variation between faked unix # environments on Windows. Cygwin isn't too bad --- it provides cygpath to # translate a unix path into native Windows format. Mingw/Msys can't be # bothered, so we need to work harder. # Keep in mind the sed expressions are interpreted by the shell and then by # sed; the backslashes are halved each time. In the end we're left with # s,/,\\,g or s,\,\\,g as the actual substitutions. This gets us a double # backslash in DYLP_ERRMSGDIR, which the various compilers can strip down to # one. Sheesh. AC_ARG_VAR(DYLP_ERRMSGDIR, [Directory containing the DyLP error message text file (dy_errmsgs.txt). Should be set to /absolute/path/to/srcdir/DyLP/src/Dylp, using native path syntax (i.e., drive letters and backslashes on Windows).]) if test x"$DYLP_ERRMSGDIR" = x; then case $build in *-mingw*|*-msys*) DYLP_ERRMSGDIR="`(cd "$abs_source_dir";pwd -W)`/src/Dylp/" DYLP_ERRMSGDIR=`echo $DYLP_ERRMSGDIR | sed -e 's,/,\\\\\\\\,g'` ;; *-cygwin*) DYLP_ERRMSGDIR="`$CYGPATH_W $abs_source_dir/src/Dylp/`" DYLP_ERRMSGDIR=`echo $DYLP_ERRMSGDIR | sed -e 's,\\\\,\\\\\\\\,g'` ;; *) DYLP_ERRMSGDIR="$abs_source_dir/src/Dylp/" ;; esac fi AC_DEFINE_UNQUOTED([DYLP_ERRMSGDIR], ["$DYLP_ERRMSGDIR"], [Directory containing the DyLP error message text file (dy_errmsgs.txt). Should be set to /absolute/path/to/srcdir/DyLP/src/Dylp, using native path syntax (i.e., drive letters and backslashes on Windows).]) ############################################################################## # Dylp configuration options # ############################################################################## AC_DYLP_PARANOIA([no]) AC_DYLP_STATISTICS([no]) AC_DYLP_INFO([yes]) ############################################################################## # OsiDylp configuration options # ############################################################################## AC_ODSI_INFO(yes) AC_ODSI_STATISTICS(no) AC_ODSI_PARANOIA(1) ############################################################################## # Documentation # ############################################################################## # Doxygen documentation. Dylp is independent of Coin code, but OsiDylp can # benefit from links to doxygen doc'n for CoinUtils and Osi. AC_COIN_DOXYGEN([CoinUtils Osi]) ############################################################################## # VPATH links for example input files # ############################################################################## # In case this is a VPATH configuration we need to make sure that the # input files for the examples are available in the VPATH directory. AC_COIN_VPATH_LINK([examples/plain examples/generic.spc examples/greenbeb.spc]) ############################################################################## # Finishing up by writing all the output # ############################################################################## # Here list all the files that configure should create (except for the # configuration header file). First the usual stuff: DyLP's top-level Makefile, # the code Makefiles (src/*/Makefile), and the test Makefile. AC_CONFIG_FILES([Makefile examples/Makefile src/DylpStdLib/Makefile src/Dylp/Makefile src/OsiDylp/Makefile test/Makefile]) # Files for doxygen documentation AC_CONFIG_FILES([doxydoc/doxygen.conf]) # The pkg-config data files AC_CONFIG_FILES([dylp.pc dylp-uninstalled.pc]) if test $coin_has_osi = yes ; then AC_CONFIG_FILES([osi-dylp.pc:src/OsiDylp/osi-dylp.pc.in osi-dylp-uninstalled.pc:src/OsiDylp/osi-dylp-uninstalled.pc.in]) fi # And all the stuff that goes into building the documentation. See the note in # Makefile.am with respect to CONFIG_CLEAN_FILES and the distclean and # distclean-local targets. AC_CONFIG_FILES([doc/Makefile doc/dylpabsdir.tex doc/makefile.dylpdoc doc/Figures/Makefile doc/TexMF/Makefile]) AC_CONFIG_FILES([doc/build_dylpdoc],[chmod +x doc/build_dylpdoc]) # Here put the location and name of the configuration header files AC_CONFIG_HEADERS([src/DylpStdLib/config.h src/DylpStdLib/config_dylp.h]) # Finally, we let configure write all the output... AC_COIN_FINALIZE DyLP-1.10.4/DyLP/doc/0000755000175200017520000000000013434203622012427 5ustar coincoinDyLP-1.10.4/DyLP/doc/Figures/0000755000175200017520000000000013434203622014033 5ustar coincoinDyLP-1.10.4/DyLP/doc/Figures/varmgmtcalls.epsu0000644000175200017520000016202611171477034017442 0ustar coincoin%!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/varmgmt.epsu %%Creator: IslandDraw for lou %%CreationDate: Sat Sep 17 11:35:24 2005 %%Pages: 1 %%BoundingBox: 84 438 434 727 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 438 361 1 722 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000000c0000000000001810000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000040000000000000810000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000040000000000000800000000000000000000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000000000007ddc035fbbcdc78bb0d00000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000c4880489142e6cccd1200000000000000000000 % 00000000000000000000000000000000 % 00000000000000000000000000000000000001884c8074d90e4284851d00000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000030845000c6a324284850300000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000308c500446c46468c8d1100000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000607620078243b7c78f91e00000000000000000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000000000e0002000000004000010000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000000c000e3f0000004000050000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000018001800000000e0000e0000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000180000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000300000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000700000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000600000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000180000000007c0200079c000f801810000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000003800000000022020003080010880838010000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000003000000000022000003080010480828010000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000600035e3cdc22fe6ec111e7dc1ef8287bc000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000060004b142623c42332192120789884cc50000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000c0387600e4220422220a0720049087c810000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000001c0700e0324220422220e19210490846810000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000180e0471464230422220c23218891882c50000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000301c079e3be770e7777041df1f0eedc779c000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000030380000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000060700000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000e0e00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000c1c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000183800000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000187000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000030e000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000071c000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000638000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000c700000c00000001c77e3e0080002000081c100000000 % 001800000001c77e3e01000020001002 % 000000000000000000000000000000000ce00000400000010e2231100800070001808100200000 % 000800000010e2231101000070003002 % 0000000000000000000000000000000019c00000400000010a2211100000050000808000200000 % 000800000010a2211100000050001002 % 000000000000000000000000000000003b800007ddc0787bcb223117db76051f78b8830d780000 % 00f9dc078f3cb223117f376053e79702 % 000000000000000000000000000000003700030c488084c509a3e1e209990988c4c48112207fff % f188880858909a3e1e211990990c5882 % 000000000000000000000000000000006e001f084c801c8109a2110209110f888084811d207fff % f108c801d0109a2110211110f9081082 % 000000000000000000000000000000007c00fc084500648108e21102091108c880848503200000 % 0108500650108e21102111108d081080 % 00000000000000000000000000000000f807e008c5008cc50862118209111048c4848d11200000 % 01185008d890862118211111050c5082 % 00000000000000000000000000000001f03f000762007679dc67e3871fbbb8fc79cffb9e380000 % 00ec20076f1dc67e3873bbbb8f87b9c2 % 0000000600000000200000079c000001e1f8000002000000000000000000000000000000000000 % 00002000000000000000000000000002 % 00000002000000042000100308000003cfc000000e3f0000000000000000000000000000000000 % 0000e3f0000000000000000000000002 % 00000002000000040000100308000003fe00000018000000000000000000000000000000000000 % 00018000000000000000000000000002 % 0000003e7701e3cf6eef3ce111e7c687f000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000006222021624245091f1921209078000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000423200740426839100a0720e87c000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000004214019404228c9100e1920187f800000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000461402362423119190c2320883bf00000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000003b0801dbc7710edce041df0f03c7e00000c00000000008180000000030000e0000000000 % 00000000000000000000000000000002 % 00000000080000000000000000000001e0fc000040000000001808000000001000100004000000 % 00000000000000000000000000000002 % 0000000038fc00000000000000000000f01f80004000000000080ac00000001000100004000000 % 00000000000000000000000000000002 % 00000000600000000000000000000000f803f007ddc07879e3cb8900000001f77039e1ef3cf800 % 00000000000000000000000000000002 % 000000000000000000000000000000007c007e0c488084c7162c4a000000031220121314664000 % 00000000000000000000000000000002 % 000000000000000000000000000000007e000f084c801c8204084f01ffffc21320107204424000 % 00000000000000000000000000000002 % 00000000000000000000000000000000370001084500648204084901ffffc21140119204424000 % 00000000000000000000000000000002 % 000000000000000000000000000000001b800008c5008cc7162849800000023140123314464000 % 00000000000000000000000000000002 % 0000000000000000000000000000000019c0000762007679e3dcfdc0000001d88039d9e73ce000 % 00000000000000000000000000000002 % 000000000000000000000000000000000ce0000002000000000000000000000080000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000e7000000e3f000000000000000000038fc00000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000638000018000000000000000000000600000000000000 % 00000000000000000000000000000000 % 00000000000000000000000000000000031c000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000030e000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000187000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000001c3800000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000c1c00000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000060e00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000607000c0003800000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000030380040004400000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000381c0040004400000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000180e07ddc0ef7cf37000000000000000000000000000 % 00000000000000000000000000000003 % 00000000000000000000000000000000000c070c48804421098800000000000000000000000000 % 00000000000000000000000000000003 % 00000000000000000000000000000000000c03884c804420390800000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000006000845004420c90800000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000070008c5004421190800000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000300076200e770ef9c00000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000001800002000000000000000000000000000000000000 % 00000000000000000000000000000001 % 00000000000000000000000000000000000180000e3f0000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000c00018000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000e00000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000600000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000300000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000300000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000180000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000000001c0000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 0000000000000000000000000000000000000c00c0004004000040180800000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000000600400040044001c0080800000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000060040000000400040080000000000000000000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000000000307ddc0cdccf6e0478b9800000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000038c4880462447304cccc800000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000001884c804424421048484800000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000845004424421048484800000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000008c50044244230c8c8c800000000000000000000 % 00000000000000000000000000000000 % 00000000000000000000000000000000000000076200ee7e73e1e78f8800000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000002000000020000000800000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000000000e3f0000020000002800000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000018000000070000007000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000000c000c000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000040004040000000000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000040004040000000000000000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000007ddc05cf7de3700000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000c48806642211880000000000000000000000000 % 00000000000000000000000000000000 % 00000000000000000000000000000000000001884c804242071080000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000030845004242191080000000000000000000000000 % 00000000000000000000000000000003 % 0000000000000000000000000000000000000308c5004642231080000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000030762007c771db9c0000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000060002000000000000000000000000000000000000 % 00000000000000000000000000000003 % 00000000000000000000000000000000000006000e3f0000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000060018000000000000000000000000000000000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000000000c0000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000c0000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000180000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000180000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000180000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000300000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000300000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000300000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000600000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000600000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000001800000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000001800000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000001800000000040000000000000018000000038efc3e0 % 10000400010000000000000000000000 % 0000000000000000000000000000000000030004000001c000000000000000800000021c446110 % 10000e00030000000000000000000002 % 000000000000000000000000000000000003000400000040000000000000008000000214442110 % 00000a00010000000000000000000002 % 000000000000000000000000000000000006000fefb8e047779f000000000f9dc078f79644611f % b3760a3ef17000000000000000000002 % 000000000000000000000000000000000006010445cdf04228480ffffffe188880858a1347c1e4 % 11991311898800000000000000000000 % 00000000000000000000000000000000000603846485004341c80ffffffe108c801d0213442104 % 11111f11010800000000000000000002 % 00000000000000000000000000000000000c030428850041464800000000108500650211c42104 % 11111191010800000000000000000002 % 00000000000000000000000000000000000c0704288d90c188c8000000001185008d8a10c42184 % 11112091890800000000000000000002 % 00000000000000000000000000000000000c060710f8e1e0877c000000000ec20076f3b8cfc38e % 3bbbf1f8f39c00000000000000000002 % 0000000000000000000000000000000000180c0010800000000000000000000200000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000181c0070800000000000000000000e7e000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000301800c1c00000000000000000001800000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000030380000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000030300000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000060600000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000060e00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000060c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000c1c00000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 0000000000000000000000000000000000c1800000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000183000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000187000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000186000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000030e000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000030c000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000318000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000638000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000006300000000001c0000060000000000000001800000003 % 8efc3e01000040001000000000000002 % 000000000000000000000000000000000c70000400000220000020000000000000000800000021 % c44611010000e0003000000000000002 % 000000000000000000000000000000000c60000400000220000020000000000000000800000021 % 444211000000a0001000000000000000 % 000000000000000000000000000000000cc0000fefb8e2238efe2000000000000000f9dc078f79 % 644611fb3760a3ef1700000000000002 % 0000000000000000000000000000000019c0000445cdf067c461200000000000000188880858a1 % 347c1e41199131189880000000000002 % 0000000000000000000000000000000019800384648500440687200000000000007108c801d021 % 344210411111f1101080000000000002 % 000000000000000000000000000000001b80070428850084029920000000000000e10850065021 % 1c421041111119101080000000000002 % 0000000000000000000000000000000033001e04288d9116432320000000000003c1185008d8a1 % 0c421841111209189080000000000002 % 000000000000000000000000000000003600380710f8e3e3811df000000000000700ec20076f3b % 8cfc38e3bbbf1f8f39c0000000000002 % 000000000000000000000000000000006e00f0001080000000000000000000001e000020000000 % 00000000000000000000000000000002 % 000000000000000000000000000000006c01c000708000000000000000000000380000e7e00000 % 00000000000000000000000000000002 % 000000000000000000000000000000007c078000c1c000000000000000000000f0000180000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000d80e0000000000000000000000000001c0000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000f03c000000000000000000000000000780000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000f070000000000000000000000000000e00000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000001e1e0000000000000000000000000003c00000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000001e380000000000000000000000000007000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000003cf0000000000000000000000000001e000000000000000 % 00000000000000000000000000000002 % 000000060000300006000c0c000000039c000000000001c000004000000003800000180000c000 % 18008000000000000000000000000002 % 00000002000010000200040400000003f8000004000002200008400020000f0000000800004000 % 08008000400000000000000000000002 % 00000002000010000200040400000007e0000004000002200008000020001c0000000800004000 % 08000000400000000000000000000002 % 0000003e7701f211e23c7c7cefe7c687c000000fefb8e223c79eddde79c078000000f9dc07c847 % 89b9bbbcf00000000000000000000002 % 00000062220316321242c4c4461209070000000445cdf0642c4848a123e0e000000188880c58c8 % 49cc9166400000000000000000000002 % 0000004232021210720e848468720e87ffffff0464850040e8084d072200ffffffe108c8084841 % c8849a42400000000000000000000002 % 000000421402121192328484299201860000000428850083280845192200f00000010850084846 % 48848a42400000000000000000000000 % 000000461402323232468c8c3232088700000004288d91146c484623232038000001185008c8c8 % c88c8c46400000000000000000000002 % 0000003b0801d9d9df3b767611df0f038000000710f8e3e3b78ee21db9c01e000000ec20076767 % 7cf9c43c700000000000000000000002 % 00000000080000000000000000000003c000000010800000000000000000070000000020000000 % 00800000000000000000000000000000 % 0000000039f800000000000000000003c00000007080000000000000000003c0000000e7e00000 % 00800000000000000000000000000002 % 00000000600000000000000000000001e0000000c1c0000000000000000000e000000180000000 % 01c00000000000000000000000000000 % 00000000000000000000000000000001f000000000000000000000000000007800000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000f800000000000000000000000000001c00000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000d800000000000000000000000000000f00000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000006c00000000000000000000000000000380000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000006e000000000000000000000000000001e0000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000007700000000000000000000000000000070000000000000 % 00000000000000000000000000000003 % 00000000000000000000000000000000330000000000000000000000000000003c00180000c000 % 00000000000000000000000000000002 % 00000000000000000000000000000000318000000000000000000000000000000e000800004000 % 00000000000000000000000000000002 % 0000000000000000000000000000000019c0000000000000000000000000000007800800004000 % 00000000000000000000000000000002 % 0000000000000000000000000000000018e0000000000000000000000000000001c0f9dc07c847 % 371b8f00000000000000000000000002 % 000000000000000000000000000000000c60000000000000000000000000000000f188880c58cf % 988c5080000000000000000000000001 % 000000000000000000000000000000000c300000000000000000000000000000002108c8084848 % 10884380000000000000000000000001 % 000000000000000000000000000000000e38000000000000000000000000000000010850084848 % 10884c80000000000000000000000000 % 00000000000000000000000000000000061c00000000000000000000000000000001185008c8cc % 90885180000000000000000000000000 % 00000000000000000000000000000000060c00000000000000000000000000000000ec20076767 % 39dceec0000000000000000000000002 % 000000000000000000000000000000000306000000000000000000000000000000000020000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000003070000000000000000000000000000000000e7e00000 % 00000000000000000000000000000001 % 000000000000000000000000000000000183800000000000000000000000000000000180000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000181800000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 0000000000000000000000000000000001c0c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000c0e00000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000c0700000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000060300000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000060180000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000301c0000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000300e0000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000038060000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000018030000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 00000000000000000000000000000000001803ff00000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000c01fffff80000000000000000000000000000000000 % 00000000000000000000000000000001 % 00000000000000000000000000000000000c00000fffffc0000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000006000000007ffffe0000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000006000000000003fffff0000000000000000000001c00 % 00060000000000000000000000000002 % 000000000000000000000000000000000007000000000000001fffff8000000000008000002200 % 00020000000000000000000000000001 % 000000000000000000000000000000000003000000000000000000fffffc000000008000002200 % 00020000000000000000000000000001 % 0000000000000000000000000000000000030000000000000000000007ffffe00001eef71c0671 % dfc20000000000000000000000000000 % 0000000000000000000000000000000000018000000000000000000000003fffff008479be0cf8 % 8c220000000000000000000000000003 % 0000000000000000000000000000000000018000000000000000000000000001fff08650a00280 % d0e20000000000000000000000000002 % 000000000000000000000000000000000000c00000000000000000000000000000e08290a02280 % 53220000000000000000000000000000 % 000000000000000000000000000000000000c00000000000000000000000000003c08291b222c8 % 64620000000000000000000000000000 % 000000000000000000000000000000000000e0000000000000000000000000000700e11f1c1c70 % 23b70000000000000000000000000003 % 00000000000000000000000000000000000060000000000000000000000000001e000110000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000600000000000000000000000000038000710000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000003000000000000000000000000000f0000c38000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000003000000000000000000000000001c0000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000180000000000000000000000000780000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000180000000000000000000000000e00000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000001c0000000000000000000000003c00000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000c0000000000000000000000007000000000000000 % 00000000000000000000000000000003 % 0000000000000000000000000000000000000c000000000000000000000001e000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000600000001c000004000000003800000180000c000 % 18000000000000000000000000000001 % 0000000000000000000000000000000000000604000002200008400020000f0000000800004000 % 08000100000000000000000000000002 % 0000000000000000000000000000000000000304000002200008000020001c0000000800004000 % 08000100000000000000000000000002 % 000000000000000000000000000000000000030fefb8e063c79eddde79c078000000f9dc07c847 % 88f10bc0000000000000000000000000 % 000000000000000000000000000000000000038445cdf0c42c4848a123e0e000000188880c58c8 % 499b1900000000000000000000000002 % 000000000000000000000000000000000000018464850020e8084d072200ffffffe108c8084841 % c9090900000000000000000000000001 % 000000000000000000000000000000000000000428850223280845192200f00000010850084846 % 49090900000000000000000000000001 % 0000000000000000000000000000000000000004288d92246c484623232038000001185008c8c8 % c9191900000000000000000000000001 % 000000000000000000000000000000000000000710f8e1c3b78ee21db9c01e000000ec20076767 % 7cf0edc0000000000000000000000001 % 000000000000000000000000000000000000000010800000000000000000070000000020000000 % 00000000000000000000000000000000 % 00000000000000000000000000000000000000007080000000000000000003c0000000e7e00000 % 00000000000000000000000000000000 % 0000000000000000000000000000000000000000c1c0000000000000000000e000000180000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000007800000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000001c00000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000f00000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000380000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000000001e0000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000070000000000000 % 00000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000003c001800000003 % 8efc3e01000040001000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000e000800000021 % c44611010000e0003000000000000003 % 000000000000000000000000000000000000000000000000000000000000000007800800000021 % 444211000000a0001000000000000003 % 000000000000000000000000000000000000000000000000000000000000000001c0f9dc078f79 % 644611fb3760a3ef1700000000000003 % 000000000000000000000000000000000000000000000000000000000000000000f188880858a1 % 347c1e41199131189880000000000003 % 0000000000000000000000000000000000000000000000000000000000000000002108c801d021 % 344210411111f1101080000000000002 % 000000000000000000000000000000000000000000000000000000000000000000010850065021 % 1c421041111119101080000000000000 % 00000000000000000000000000000000000000000000000000000000000000000001185008d8a1 % 0c421841111209189080000000000001 % 00000000000000000000000000000000000000000000000000000000000000000000ec20076f3b % 8cfc38e3bbbf1f8f39c0000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000020000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000000000e7e00000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000180000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000000000000f802000f38000f8019f800000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000004402000610001090088c00000200000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000004400000610001050088600000200000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000006bc79b845f6dd8223cf9c3cf88270f1e780000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000096284c478826643242407918882f90b1200000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000001f0ec01c844082444140e400510882803a0200000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000fc01c0648440824441c3241051088680ca0200000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000007e008e28c8460824441846418911884c91b1200000000 % 00000000000000000000000000000002 % 000000000000000000000000000000003f000f3c77cee1c7eee083be1f1cedf870ede380000000 % 00000000000000000000000000000002 % 03000018000000400000079c00000001f800000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0100000800000840002003080000000fc000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0100000800000800002003080000007e0000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 1f3b80f8e3c3decefe79c113c7cd03f00000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 31110189f42628446123e19422120f800000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 2119010900e40846872200a0e21d0f000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 210a010903240842992200e3220307e00000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 230a011994662843232320c4621100fc0000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 1d8400ece3b3cee11db9c043b71e001f8000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00040000000000000000000000000003f000018000000e3bf1f0080001000080e0800000000018 % 0000c00000071df8f804000080004002 % 001c7e000000000000000000000000007e00008000008711188808000380018040802000000008 % 000040000043888c44040001c000c002 % 003000000000000000000000000000000fc0008000008511088800000280008040002000000008 % 00004000004288844400000140004002 % 0000000000000000000000000000000001f80f8e3c79e591188bf9bb029f3cb84186f8000000f9 % dc07c71e3cf2c88c45fcdd814f9e5c02 % 00000000000000000000000000000000003f189f42c484d1f0f108cc84c862c44089207ffff188 % 880c4fa1624268f87884664264316202 % 00000000000000000000000000000000000710900e8084d10881088887c84084408ea07ffff108 % c80848074042688440844443e4204202 % 00000000000000000000000000000000000010903280847108810888846840844281a000000108 % 50084819404238844084444234204202 % 000000000000000000000000000000000000119946c4843108c10888882862844688a000000118 % 5008cca3624218846084444414314202 % 0000000000000000000000000000000000000ece3b78ee33f1c39ddddc7c3dcefdcf38000000ec % 2007671dbc7719f8e1ceeeee3e1ee702 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 20000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % e3f00000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000001 % 80000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 64.0522 38.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1536 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_activateVars) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.73 46.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_ftran) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.73 31.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (scanPrimVarStdAct) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.73 26.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_swapobjs) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.73 51.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_initp1obj) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 112.606 36.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -2204 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_actNBPrimArchList) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 119.925 36.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_actNBPrimArch) s savemat setmatrix n 113.55 35 m 118.55 35 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 91.6511 41.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1016 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 99.1111 41.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_factor) s savemat setmatrix n 92.74 40 m 97.74 40 l gsave 0 0 0 0.1764 0 B grestore n 65 37.5 m 72.5 25 l gsave 0 0 0 0.1764 0 B grestore n 65 37.5 m 72.5 30 l gsave 0 0 0 0.1764 0 B grestore n 65 37.5 m 72.5 35 l gsave 0 0 0 0.1764 0 B grestore n 65 37.5 m 72.5 40 l gsave 0 0 0 0.1764 0 B grestore n 65 37.5 m 72.5 45 l gsave 0 0 0 0.1764 0 B grestore n 65 37.5 m 72.5 50 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 73.73 63.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_btran) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.73 78.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (type2eval) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.197 106.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_actNBPrimArch) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.197 96.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (type3eval) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 96.5194 101.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1292 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (type3activate) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.197 101.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dualout) s savemat setmatrix n 97.467 100 m 104.97 95 l gsave 0 0 0 0.1764 0 B grestore n 97.467 100 m 104.97 100 l gsave 0 0 0 0.1764 0 B grestore n 97.467 100 m 104.97 105 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 96.5194 83.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1292 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (type2activate) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.197 83.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dualpivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.197 88.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_duenna) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.197 78.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_actNBPrimArch) s savemat setmatrix n 97.467 82.5 m 104.97 77.5 l gsave 0 0 0 0.1764 0 B grestore n 97.467 82.5 m 104.97 82.5 l gsave 0 0 0 0.1764 0 B grestore n 97.467 82.5 m 104.97 87.5 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 88.6172 71.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -844 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (type1var) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 98.295 71.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_actNBPrimArch) s savemat setmatrix n 89.565 70 m 97.065 70 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 64.0522 83.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1544 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dualaddvars) s savemat setmatrix n 65 82.5 m 72.5 62.5 l gsave 0 0 0 0.1764 0 B grestore n 65 82.5 m 72.5 70 l gsave 0 0 0 0.1764 0 B grestore n 65 82.5 m 72.5 77.5 l gsave 0 0 0 0.1764 0 B grestore n 65 82.5 m 72.5 82.5 l gsave 0 0 0 0.1764 0 B grestore n 65 82.5 m 72.5 100 l gsave 0 0 0 0.1764 0 B grestore n 65 82.5 m 72.5 92.5 l 105 95 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 61.5522 121.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1764 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_deactivateVars) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 71.23 118.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (scanPrimVarStdDeact) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 108.272 123.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -2100 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (deactNBPrimArchList) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 115.311 123.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_deactNBPrimArch) s savemat setmatrix n 109.08 122.5 m 114.08 122.5 l gsave 0 0 0 0.1764 0 B grestore n 62.5 120 m 70 117.5 l gsave 0 0 0 0.1764 0 B grestore n 62.5 120 m 70 122.5 l gsave 0 0 0 0.1764 0 B grestore userdict /#copies 1 put grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore DyLP-1.10.4/DyLP/doc/Figures/factorcalls.epsu0000644000175200017520000010442011171477034017235 0ustar coincoin%!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/factorcalls.epsu %%Creator: IslandDraw for lou %%CreationDate: Thu Sep 1 12:19:36 2005 %%Pages: 1 %%BoundingBox: 144 368 453 528 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 388 202 1 404 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000005 % 000000000000000000000000000000000000000000000000006000200203000008000000000060 % 00100000018060000005 % 000000000000000000000000000000000000000000000000002000200221000008000000000020 % 00100000008020040005 % 0000000000000000000000000000000000000000000000000020000000210000000000000001a0 % 00000000008020040005 % 00000000000000000000000000000000000000000000000003eee066e67971e1b8680000000e2d % c03373b80f8e238f7005 % 0000000000000000000000000000000000000000000000000624402312219a124890000000112e % 60118910189f27c4f805 % 000000000000000000000000000000000000000000000000e426402212210873a8e81ffffc1124 % 201109a0109024048005 % 000000000000000000000000000000000000000000000003e42280221221099068180000000e24 % 201108a0109024048005 % 00000000000000000000000000000000000000000000000f8462802212211a3228880000001024 % 601108c011992644c80d % 00000000000000000000000000000000000000000000003e03b100773f39f1dbdcf00000001f77 % c03b9c400ece7387700d % 00000000000000000000006001c0001900000004000000f8000100000000000000000000001184 % 00000000000000000000 % 0000000000000000000000200200000900002004000003e000071f800000000000000000003184 % 0fc00007e0000000000c % 000000000000000000000020020000080000200000000f80000c00000000000000000000001e0e % 00000000000000000000 % 0000000000000000000000221700f0fb1086f8dc7dc03e00000000000000000000000000000000 % 00000000000000000000 % 00000000000000000000002632010989318921248be0f800000000000000000000000000000000 % 0000000000000000000f % 00000000000000000000062212003909108ea1d41200e000000000000000000000000000000000 % 0000000000000000000c % 000000000000000000000c221200c9091081a0342200f800000000000000000000000000000000 % 00000000000000000000 % 000000000000000000000c22320119191188a11447203e00000000000000000000000000000000 % 00000000000000000002 % 000000000000000000000c71df00eced0ecf39eef9c00f80000000000000000000000000000000 % 0000000000000000000d % 0000000000000000000018000000000100000000000003e000c0001c0001800002000000000060 % 0010000000000000000d % 000000000000000000001800007e000500000000000000f8004000200000800002000000000020 % 00100000000000020000 % 0000000000000000000018000000000e000000000000003e0040002000008000000000000001a0 % 0000000000000002000d % 00000000000000000000300000000000000000000000000f87cee077dc38b8f0d6340000000e2d % c03373b80f3ee1e79c0f % 000000000000000000003000000000000000000000000003ec4440223e7ccd092248000000112e % 601189101891f2123e03 % 000000000000000000003000000000000000000000000000e846402220408439d2741ffffc1124 % 201109a0101100722003 % 00000000000000000000600000000000000000000000000008428022204084c8320c0000000e24 % 201108a0101101922003 % 00000000000000000000600000000000000000000000000008c2802232648d1912440000001024 % 601108c0189192323203 % 000000000000000000006000000000000000000000000000076100771c38f8ede7780000001f77 % c03b9c400f38e1db9c03 % 00000000000000000000c006000000000080000000000000000100000000000000000000001184 % 00000000000000000003 % 00000000000000000000c00200000010008000000000000000073f000000000000000000003184 % 0fc00007e0000000000b % 00000000000000000000c002000000100000000000000000000c00000000000000000000001e0e % 00000000000000000003 % 00000000000000000001803eee01a73db99dee3cfb761a00000000000000000000000000000000 % 00000000000000000004 % 00000000000000000001806244024f91cc88f34241992400000000000000000000000000000000 % 00000000000000000002 % 000000000000000000018e426403a810848d210e41113a00000000000000000000000000000000 % 00000000000000000001 % 000000000000000000030c42280068108485213241110600000000000000000000000000000000 % 00000000000000000000 % 000000000000000000031c4628022c908c86234641112200000000000000000000000000000000 % 00000000000000000003 % 00000000000000000003183b1003c71cf9c23e3be3bbbc00000000000000000000000000000000 % 0000000000000000000d % 000000000000000000063800100000008000200000000000000000000000000000000000000000 % 0000000000000000000d % 00000000000000000006300071f800008000200000000000000000000000000000000000000000 % 00000000000000000008 % 000000000000000000067000c0000001c000700000000000000000000000000000000000000000 % 00000000000000000000 % 0000000000000000000c6000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 0000000000000000000ce000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 0000000000000000000cc000000000000000000000000000000000000000000000000000000000 % 0000000000000000000f % 00000000000000000019c000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 000000000000000000198000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 0000000000000000001b8001800020000003000000000000000000000000000000000000000000 % 00000000000000000000 % 000000000000000000330000800020000001000000000000000000000000000000000000000000 % 00000000000000000000 % 000000000000000000370003800000000001000000000000000000000000000000000000000000 % 00000000000000000000 % 00000000000000000036001c9b8066e7701f1c78f3766e00000000000000000000000000000000 % 00000000000000000000 % 0000000000000000006e00229cc0231220313ec599997300000000000000000000000000000000 % 00000000000000000000 % 0000000000000000006c0422884022134021208109112100000000000000000000000000000000 % 00000000000000000000 % 0000000000000000007c0c1c884022114021208109112100000000000000000000000000000000 % 00000000000000000000 % 000000000000000000d81c2088c02211802332c519112300000000000000000000000000000000 % 00000000000000000000 % 000000000000000000f8383fcf807738801d9c78f3bbbe00000000000000000000000000000000 % 00000000000000000000 % 000000000000000000f07023080000000000000000002000000000000000000000000000000000 % 00000000000000000000 % 000000000000000001f0e063081f80000fc0000000002000000000000000000000000000000000 % 00000000000000000000 % 000000000000000001e1c03c1c0000000000000000007000000000000000000000000000000000 % 00000000000000000000 % 000000000000000001e38000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 000000000000000003c70000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 000000000000000003ce0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 0000000000000000039c0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 000000000000000007b80000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 000000000000000007700000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 018000380000000007e000000c4000000600000800000000000000000000000000000000000000 % 00000000000000000008 % 00800040002000000fc00000044000100200000800000000000000000000000000000000000000 % 00000000000000000008 % 00800040002000000f800000040000100200000000000000000000000000000000000000000000 % 00000000000000000004 % 0f9dc0e78f79e7c00f00003c7cc8437c02e3c35868000000000000000000000000000000000000 % 00000000000000000000 % 1888804858a332001e000042c458c4900334248890000000000000000000000000000000000000 % 0000000000000000000c % 108c8041d02212001ffffc0e844847500210e748e8000000000000000000000000000000000000 % 00000000000000000002 % 108500465022120018000032844840d0021320c818000000000000000000000000000000000000 % 0000000000000000000a % 11850048d8a232001c0000468c48c4500234644888000000000000000000000000000000000000 % 00000000000000000008 % 0ec200e76f39e7000c00003b7647679c03e3b79cf0000000000000000000000000000000000000 % 00000000000000000000 % 00020000000000000e000000004000000000000000000000000000c00000030001800000000000 % 00000000000000000000 % 000e7e00000000000e00000001400001f800000000000000000000400000010000800000000000 % 00000000000000000008 % 00180000000000000e000000038000000000000000000000000000400000010000800000000000 % 00000000000000000008 % 00000000000000000f000000000000000000000000000000000007ddc078f11e78b8f3e0000000 % 00000000000000000004 % 00000000000000000f00000000000000000000000000000000000c4880c50931c4cd0900000000 % 00000000000000000000 % 00000000000000000f8000000000000000000000000000000006084c8080392080843900000000 % 0000000000000000000c % 00000000000000000f800000000000000000000000000000000e08450080c9208084c900000000 % 00000000000000000002 % 000000000000000007800000000000000000000000000000000c08c500c51931c48d1900000000 % 0000000000000000000a % 000000000000000007c00000000000000000000000000000001807620078ef9e78f8ef80000000 % 0000000000000000000a % 000000000000000007c00000000000000000000000000000003800020000000000000000000000 % 00000000000000000004 % 0000000000000000076000000000000000000000000000000070000e3f00000000000000000000 % 00000000000000000006 % 000000000000000007600000000000000000000000000000006000180000000000000000000000 % 0000000000000000000d % 000000000000000007e0000000000000000000000000000000c000000000000000000000000000 % 0000000000000000000f % 000000000000000007b0000000000000000000000000000001c000000000000000000000000000 % 00000000000000000003 % 000000000000000007b00000000000000000000000000000038000000000000000000000000000 % 0000000000000000000e % 000000000000000002980000000000000000000000000000030000000000000000000000000000 % 0000000000000000000b % 000000000000000002d80000000000000000000000000000060000000000000000000000000000 % 00000000000000000007 % 000000000000000003d800000000000000000000000000000e0000000000000000000000000000 % 00000000000000000000 % 000000000000000003cc00000000000000000000000000001c0000c0000c000000000000000000 % 00000000000000000000 % 000000000000000003cc0000000000000000000000000000180000400004000000000004000000 % 0000000000000000000f % 000000000000000003660000000000000000000000000000300000400004000c00000004000000 % 0000000000000000000f % 000000000000000003660000000000000000000000000000700007ddc07c70738dc7884f000000 % 0000000000000000000f % 000000000000000001660000000000000000000000000000e0020c4880c4f88fc62cd8c4000000 % 00000000000000000008 % 000000000000000001630000000000000000000000000000c00e084c8084808c04284844000000 % 00000000000000000009 % 000000000000000001b30000000000000000000000000001801c08450084807404284844000000 % 00000000000000000009 % 000000000000000001b18000000000000000000000000003807808c5008cc8864428c8c4000000 % 00000000000000000009 % 000000000000000001b1800000000000000000000000000700e00762007670fb8e778767000000 % 00000000000000000009 % 000000000000000001b1800000000000000000000000000603c000020000008c00000000000000 % 00000000000000000009 % 00000000000000000190c00000000000000000000000000c0700000e3f00018c00000000000000 % 0000000000000000000d % 00000000000000000198c00000000000000000000000001c1e000018000000f000000000000000 % 0000000000000000000f % 000000000000000000986000000000000000000000000038380000000000000000000000000000 % 0000000000000000000f % 000000000000000000986000000000000000000000000030f00000000000000000000000000000 % 00000000000000000000 % 000000000000000000c86000000000000000000000000061c00000000000000000000000000000 % 0000000000000000000f % 000000000000000000cc30000000000000000000000000e7800000000000000000000000000000 % 00000000000000000000 % 000000000000000000cc30000000000000000000000001ce000000000000000000000000000000 % 00000000000000000008 % 000000000000000000cc18000c40000000080000000001bc000000000000000000000000000000 % 00000000000000000000 % 000000000000000000cc1800044000080118000000040370000001800001800040000100000000 % 00000000000000000000 % 000000000000000000c618000400000801080000000407e0000000800000800040000100000000 % 00000000000000000000 % 000000000000000000460c3c7cc4235e03cb8e7ce1af0f80000000800000800000000000000000 % 00000000000000000006 % 000000000000000000460c42c44c6488010c5f21f2440f0000000f9dc078bedcddfee300000000 % 0000000000000000000d % 00000000000000000066060e844427480108502103a41fffffff188880c490e64891f100000000 % 00000000000000000007 % 000000000000000000630432844420c80108502100641fffffff108c808090424d110100000000 % 00000000000000000006 % 0000000000000000006300468c4464480108592192240f00000010850080904245110100000000 % 00000000000000000003 % 00000000000000000063003b7643b78e01dcee70e3c70fc00000118500c4904646119100000000 % 00000000000000000000 % 0000000000000000006300000040000000000000000007e000000ec20079f87ce238e100000000 % 00000000000000000000 % 00000000000000000021000001400000fc000000000007f8000000020000004000000100000000 % 00000000000000000000 % 0000000000000000002180000380000000000000000003fc0000000e3f00004000000500000000 % 00000000000000000000 % 00000000000000000031800000000000000000000000036f00000018000000e000000e00000000 % 00000000000000000000 % 0000000000000000003180000000000000000000000003f7800000000000000000000000000000 % 00000000000000000004 % 0000000000000000003080000000000000000000000001b9e00000000000000000000000000000 % 00000000000000000000 % 00000000000000000030c0000000000000000000000001d8f00000000000000000000000000000 % 00000000000000000000 % 00000000000000000030c0000000000000000000000001cc3c0000000000000000000000000000 % 0000000000000000000f % 00000000000000000030c0000000000000000000000000ee1e0000000000000000000000000000 % 00000000000000000000 % 00000000000000000010c0000000000000000000000000e7078001800000000200200000000000 % 00000000000000000000 % 0000000000000000001060000000000000000000000000f303c000800000000200220000000000 % 0000000000000000000c % 00000000000000000018600000000000000000000000007180f000800000000000020000000000 % 00000000000000000000 % 000000000000000000186000000000000000000000000079c0780f9dc0dc35c66e678000000000 % 00000000000000000002 % 000000000000000000186000000000000000000000000078e01e188880e64be231220000000000 % 0000000000000000000d % 00000000000000000018300000000000000000000000003c600e108c8042760221220000000000 % 00000000000000000000 % 00000000000000000018300000000000000000000000003c3000108500420e0221220000000000 % 00000000000000000004 % 000000000000000000183000000000000000000000000036380011850046472221220000000000 % 0000000000000000000f % 00000000000000000008300000000000000000000000001e1c000ec2007c79c773f38000000000 % 00000000000000000001 % 00000000000000000008100000000000000000000000001b0c0000020040000000000000000000 % 00000000000000000008 % 0000000000000000000c180000000000000000000000001b0600000e3f40000000000000000000 % 00000000000000000000 % 0000000000000000000c180000000000000000000000000d8700001800e0000000000000000000 % 00000000000000000000 % 0000000000000000000c180000000000000000000000000d838000000000000000000000000000 % 00000000000000000000 % 0000000000000000000c080000000000000000000000000cc18000000000000000000000000000 % 00000000000000000000 % 0000000000000000000c0c00000000000000000000000006c0c000000000000000000000000000 % 00000000000000000003 % 000000000000000000040c0000000000000000000000000660e000000000000000000000000000 % 00000000000000000007 % 000000000000000000040c00000000000000000000000006607000000000000000000000000000 % 00000000000000000000 % 000000000000000000060c00000000000000000000000003303000000000000000000000000000 % 00000000000000000000 % 00000000000000000006078000000000000000000000000330180180000c000200200000000000 % 00000000000000000000 % 0000000000000000000607fc000000000000000000000003181c00800004000200220000000000 % 0000000000000000000b % 00000000000000000006007fe00000000000000000000001980e00800004000000020000000000 % 00000000000000000000 % 000000000000000000060001ff80000000000000000000018c060f9dc07c35c66e678000000000 % 00000000000000000000 % 0000000000000000000600000ffc000000000000000000018c03188880c44be231220000000000 % 00000000000000000000 % 000000000000000000020000003ff0000000000000000000c603108c8084760221220000000000 % 00000000000000000000 % 0000000000000000000200000001ff800000000000000000c600108500840e0221220000000000 % 00000000000000000000 % 000000000000000000030000000007fe0000000000000000c3001185008c472221220000000000 % 00000000000000000000 % 0000000000000000000300000000003ff00000000000000063000ec2007679c773f38000000000 % 00000000000000000006 % 00000000000000000003000000000000ffc0000000000000618000020000000000000000000000 % 00000000000000000000 % 0000000000000000000300000000000007fe0000000000006180000e3f00000000000000000000 % 00000000000000000000 % 00000000000000000003000000000000001ff8000000000030c000180000000000000000000000 % 00000000000000000000 % 000000000000000000030000000000000000ffc00000000030c000000000000000000000000000 % 00000000000000000001 % 00000000000000000001000000000000000003ff00000000306000000000000000000000000000 % 00000000000000000008 % 000000000000000000010000000000000000001ff8000000186000000000000000000000000000 % 00000000000000000008 % 00000000000000000001800000000000000000007fe00000183000000000000000000000000000 % 00000000000000000000 % 000000000000000000018000000000000000000003ff0000183000000000000000000000000000 % 00000000000000000000 % 0000000000000000000180000000000000000000001ff8000c1800000000000000000000000000 % 00000000000000000000 % 000000000000000000018000000000000000000000007fe00c1800c0000003000c0000c0000000 % 00000000000000000003 % 0000000000000000000180000000000000000000000003ff0c0c00400000010004000040000000 % 00000000000000000000 % 00000000000000000000800000000000000000000000000ffe0c00400000010004000040000000 % 00000000000000000000 % 0000000000000000000080000000000000000000000000007fe607ddc078f11e7c423c43400000 % 00000000000000000008 % 00000000000000000000c00000000000000000000000000007fe0c4880c50931c4c64244800000 % 00000000000000000000 % 00000000000000000000c000000000000000000000000000030e084c8080392084420e47400000 % 00000000000000000000 % 00000000000000000000c000000000000000000000000000030008450080c92084423240c00000 % 00000000000000000000 % 00000000000000000000c000000000000000000000000000030008c500c519318c464644400000 % 00000000000000000000 % 00000000000000000000c000000000000000000000000000018007620078ef9e763b3be7800000 % 00000000000000000000 % 00000000000000000000fe00000000000000000000000000018000020000000000000000000000 % 00000000000000000009 % 000000000000000000003ff00000000000000000000000000180000e3f00000000000000000000 % 0000000000000000000f % 0000000000000000000000ffc0000000000000000000000000c000180000000000000000000000 % 00000000000000000000 % 000000000000000000000007ff000000000000000000000000c000000000000000000000000000 % 00000000000000000000 % 0000000000000000000000001ff80000000000000000000000c000000000000000000000000000 % 00000000000000000007 % 000000000000000000000000007fe0000000000000000000006000000000000000000000000000 % 00000000000000000009 % 0000000000000000000000000003ff800000000000000000006000000000000000000000000000 % 00000000000000000007 % 00000000000000000000000000000ffc0000000000000000006000000000000000000000000000 % 00000000000000000004 % 0000000000000000000000000000003ff000000000000000003000000000000000000000000000 % 00000000000000000000 % 00000000000000000000000000000000ffc0000000000000003000000000000000000000000000 % 00000000000000000004 % 0000000000000000000000000000000007ff000000000000003000000000000000000000000000 % 00000000000000000000 % 00000000000000000000000000000000001ff80000000000001800000000000000000000000000 % 00000000000000000000 % 0000000000000000000000000000000000007fe000000000001800000000000000000000000000 % 00000000000000000000 % 00000000000000000000000000000000000003ff80000000001800000000000000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000ffc000000000c00000000000000000000000000 % 00000000000000000000 % 00000000000000000000000000000000000000003ff00000000c00000000000000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000001ffc000000c00000000000000000000000000 % 00000000000000000000 % 00000000000000000000000000000000000000000007fe00000600c000000300000100000c0000 % 00000000000000000000 % 000000000000000000000000000000000000000000001ff8000600400000010000010000040000 % 00000000000000000001 % 0000000000000000000000000000000000000000000000ffe00600400000010000000000040000 % 00000000000000000004 % 000000000000000000000000000000000000000000000003ff0307ddc078f11edcfb6ec3c43400 % 00000000000000000000 % 0000000000000000000000000000000000000000000000000fff0c4880c50931e6413324244800 % 00000000000000000000 % 000000000000000000000000000000000000000000000000003f084c8080392042412220e47400 % 00000000000000000008 % 000000000000000000000000000000000000000000000000000008450080c92042412223240c00 % 00000000000000000000 % 000000000000000000000000000000000000000000000000000008c500c5193146412224644400 % 0000000000000000000a % 000000000000000000000000000000000000000000000000000007620078ef9e7ce3f773be7800 % 00000000000000000008 % 000000000000000000000000000000000000000000000000000000020000000040000000000000 % 00000000000000000008 % 0000000000000000000000000000000000000000000000000000000e3f00000040000000000000 % 0000000000000000000f % 0000000000000000000000000000000000000000000000000000001800000000e0000000000000 % 00000000000000000008 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000008 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 67.5 113.676] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -892 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_factor) s savemat setmatrix n 75 97.5 m 70 112.5 l gsave 0 0 0 0.176 0 B grestore n 75 107.5 m 70 112.5 l gsave 0 0 0 0.176 0 B grestore n 75 112.5 m 70 112.5 l gsave 0 0 0 0.176 0 B grestore n 75 125 m 70 112.5 l gsave 0 0 0 0.176 0 B grestore n 70 112.5 m 75 133.75 l 108.95 139.96 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 75.948 103.747] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_setpivparms) s savemat setmatrix n 70 112.5 m 75 102.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 110.634 148.493] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_calcprimals) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 110.634 141.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_calcduals) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 110.634 116.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_calccbar) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 110.634 121.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_degenout) s savemat setmatrix n 109.06 120 m 101.56 125 l gsave 0 0 0 0.176 0 B grestore n 109.06 115 m 101.56 125 l gsave 0 0 0 0.176 0 B grestore n 109.06 130 m 101.56 125 l gsave 0 0 0 0.176 0 B grestore n 109.06 140 m 101.56 125 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 110.606 136.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dseinit) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 110.606 131.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_pseinit) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 110.606 126.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_clrpivrej) s savemat setmatrix n 101.86 125 m 109.36 125 l gsave 0 0 0 0.176 0 B grestore n 101.86 125 m 109.36 135 l gsave 0 0 0 0.176 0 B grestore n 101.86 125 m 109.36 147.5 l gsave 0 0 0 0.176 0 B grestore n 70 112.5 m 73.75 141.25 l 109.33 147.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 75.938 108.619] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (glp_inv_decomp) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 75.988 113.594] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (adjust_basis) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 76.111 126.137] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (adjust_therest) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 76.017 98.535] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (luf_adjustsize) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.19 101.272] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_freebasis) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.402 96.131] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_initbasis) s savemat setmatrix n 100.6 97.5 m 105.6 95 l gsave 0 0 0 0.176 0 B grestore n 100.6 97.5 m 105.6 100 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 135 96.131] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (glp_inv_delete) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 135 101.272] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (glp_inv_create) s savemat setmatrix n 128.63 95 m 133.63 95 l gsave 0 0 0 0.176 0 B grestore n 128.63 100 m 133.63 100 l gsave 0 0 0 0.176 0 B grestore userdict /#copies 1 put grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore DyLP-1.10.4/DyLP/doc/Figures/primal1flow.epsu0000644000175200017520000056220511171477034017206 0ustar coincoin%!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/primal1flow.epsu %%Creator: IslandDraw for lou %%CreationDate: Wed Sep 14 11:02:30 2005 %%Pages: 1 %%BoundingBox: 31 61 589 750 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 699 862 1 2586 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000001c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000017 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000001d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000000c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000017 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000010 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000001b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000001c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000007 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000012 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000001d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000008 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000001e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000009 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000ff0000000000000000000000000000000000 % 00000000000000000014 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000ff0000000000000000000000000000000000 % 0000000000000000001f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000fe0000000000000000000000000000000000 % 0000000000000000000a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000fe0000000000000000000000000000000000 % 00000000000000000015 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000007e0000000000000000000000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000007c0000000000000000000000000000000000 % 0000000000000000000b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000007c0000000000000000000000000000000000 % 00000000000000000016 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000003c0000000000000000000000000000000000 % 00000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000380000000000000000000000000000000000 % 0000000000000000000c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000380000000000000000000000000000000000 % 0000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000180000000000000000000000000000000000 % 00000000000000000018 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000ffffffffffffffffffffffffffffffffffffff0000000000000000 % 00000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000019 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000004 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000000000f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000000001a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000430001001000010060220000000030000000000000000 % 00000000000000000010 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000810001001100070020220000000030000000000000000 % 0000000000000000001b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000001010000000100010020010000000030000000000000000 % 00000000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008000000011f77033733db811e2e610000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080000000131220118911cc13333210000000030000000000000000 % 0000000000000000001c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000001213201109108412121210000000030000000000000000 % 00000000000000000007 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000001211401109108412121210000000030000000000000000 % 00000000000000000012 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000001231401109108c32323210000000030000000000000000 % 0000000000000000001d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008000000011d8803b9f9cf879e3e210000000030000000000000000 % 00000000000000000008 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000001000800000008000000210000000030000000000000000 % 00000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008000000008038fc000008000000a20000000030000000000000000 % 0000000000000000001e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080000000000600000001c000001c00000000030000000000000000 % 00000000000000000009 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000014 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000000001f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000000000a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008000800000066000000c0400404018800000030000000000000000 % 00000000000000000015 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800080002002200000040400444008800000030000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000002002200000040000040008000000030000000000000000 % 0000000000000000000b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008001b706f9e2203cdc7c0cdccfc78986b800030000000000000000 % 00000000000000000016 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800098892212204262c40462444848897c00030000000000000000 % 00000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008000908ea072200e428404424441c88ec000030000000000000000 % 0000000000000000000c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080009081a19220324284044244464881c000030000000000000000 % 00000000000000000017 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080009088a2322046428c04424448c888e400030000000000000000 % 00000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008001f9cf39df703be7760ee7e7e77dcf3800030000000000000000 % 0000000000000000000c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000016 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000000001f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000016 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000000001f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000008 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080000000400000007000c040000200000000030000000000000000 % 00000000000000000016 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080000000c000000020004040004200000000030000000000000000 % 00000000000000000016 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000004000000020004000004000000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000dc5c7835c0203c5cce1ef677e00000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000e662844be02066665f314223f00000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080000042421c760020424250204235000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008000004242640e0020424250204215000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080000046428c472070464659314219900000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008000007ce77679c0703c7c4e1e7708e00000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000400000000000000040000000000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000400000000000000140000000000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000e00000000000000380000000000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000ffffffffffffffffffffffffffffffffffffff0000000000000000 % 00000000000000000007 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000ffffffffffffffffffffffffffffffffffffff0000000000000000 % 0000000000000000001a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000001c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000017 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000001d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000c0100600000000000000000000000000000000 % 0000000000000000000c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000f8103e00000000000000000000000000000000 % 00000000000000000017 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000ff11fe00000000000000000000000000000000 % 00000000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000fffffe00000000000000000000000000000000 % 00000000000000000010 % 0000000000000000000000000000000000000000000000000000007fffffffffffffffffffffff % ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffffffffff001b % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000000000000000ffd7fe00000000000000000000000000000000 % 00000000000000010006 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000000000000000fe10fe00000000000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000000000000000f0101e00000000000000000000000000000000 % 0000000000000001001c % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000080100200000000000000000000000000000000 % 00000000000000010007 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010012 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001001d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000ff0000000000000000000000000000000000 % 00000000000000010008 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000fe0000000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000fe0000000000000000000000000000000000 % 0000000000000001001e % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000fe0000000000000000000000000000000000 % 00000000000000010009 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000000000000000007c0000000000000000000000000000000000 % 00000000000000010014 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000000000000000007c0000000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000000000000000007c0000000000000000000000000000000000 % 0000000000000001000a % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000000000000000003c0000000000000000000000000000000000 % 00000000000000010015 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000380000000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000380000000000000000000000000000000000 % 0000000000000001000b % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000ffffffffffffffffffffffffffffffffffffff0000000000000000 % 00000000000000010016 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000ffffffffffffffffffffffffffffffffffffff0000000000000000 % 00000000000000010001 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000001000c % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000001000d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000010018 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000010003 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000218000000200000c80080000000030000000000000000 % 0000000000000001000e % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000408000000200000480080000000030000000000000000 % 00000000000000010019 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000808000000000000400040000000030000000000000000 % 00000000000000010004 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000008000000008f9dc0ddf66ec7859b840000000030000000000000000 % 0000000000000001000f % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000988880e6823328448c440000000030000000000000000 % 0000000000000001001a % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000908c8042822221c488440000000030000000000000000 % 00000000000000010005 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000908500428222264488440000000030000000000000000 % 00000000000000010010 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000080000000091850046822228c488440000000030000000000000000 % 0000000000000001001b % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000008000000008ec2007dc777776fdce40000000030000000000000000 % 00000000000000010006 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000800200400000000000040000000030000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000400e7e400000000000080000000030000000000000000 % 0000000000000001001c % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000001800e00000000000000000000030000000000000000 % 00000000000000010007 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000010012 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000001001d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000010008 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000080003000000000000008000000000200c180030000000000000000 % 00000000000000010013 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800010001000001000080000000002004080030000000000000000 % 0000000000000001001e % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000080001000100000100000000c000000004080030000000000000000 % 00000000000000010009 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000081ae1387bc0e373ce7db70707779f6785c8e030000000000000000 % 00000000000000010014 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000825f17cc501f1891f209888822848284669f030000000000000000 % 0000000000000001001f % 000000000000000000000000000000000000000000000000000000636000000000000000000000 % 00000000000000000000000083b014081010109102090888341c821c4290030000000000000000 % 0000000000000001000a % 000000000000000000000000000000000000000000000000000000612000000007ffffffffffff % ffffffffffffffffc0000000807014081010109102090870146482644290030000000000000000 % 00000000000000010015 % 000000000000000000000000000000000000000000000000000000614000000007ffffffffffff % ffffffffffffffffc00000008239164c5019109192090880188c828c4699030000000000000000 % 00000000000000010000 % 00000000000000000000000000000000000000000000000000000060c000000006000000000000 % 00000000000000004000000083ce3b879c0e39dce71f9cf80877c7767dce030000000000000000 % 0000000000000001000b % 000000000000000000000000000000000000000000000000000000608000000006000000000000 % 00000000000000004000000080000000000000000000008c000000000000030000000000000000 % 00000000000000010016 % 000000000000000000000000000000000000000000000000000000608000000006000000000000 % 00000000000000004000000080000000000000000000018c000000000000030000000000000000 % 00000000000000010001 % 000000000000000000000000000000000000000000000000000000630000000006000000000000 % 0000000000000000400000008000000000000000000000f0000000000000030000000000000000 % 0000000000000001000c % 0000000000000000000000000000000000000000000000000000006000000000061180000c0003 % 7b9e0101f000000840000000800000000000000000000000000000000000030000000000000000 % 00000000000000010017 % 000000000000000000000000000000000000000000000000000000600000000006208000040001 % 331a23008800008840000000800000000000000000000000000000000000030000000000000000 % 00000000000000010002 % 000000000000000000000000000000000000000000000000000000600000000006408000040001 % 310821008800008440000000800000000000000000000000000000000000030000000000000000 % 0000000000000001000c % 0000000000000000000000000000000000000000000000000000006000000000064f9dc07c71e1 % 11967970890b71e440000000ffffffffffffffffffffffffffffffffffffff0000000000000000 % 00000000000000010016 % 000000000000000000000000000000000000000000000003fffffffffffffc0006588880c4fa11 % 1a922188f319888440000000000000000001c00000000000030000000000000000000000000000 % 0000000000000001001f % 0000000000000000000000000000000000000000000000070000000000000e0006508c80848071 % 1ad221088109088440000000000000000003800000000000038000000000000000000000000000 % 00000000000000010016 % 00000000000000000000000000000000000000000000000e000000000000060006508500848191 % 0ae22108810908844000000000000000000700000000100001c000000000000000000000000000 % 0000000000000001001f % 00000000000000000000000000000000000000000000001c0000000000000300065185008cca31 % 0c622108c11908844000000000000000000600002000100000e000000000000000000000000000 % 00000000000000010008 % 000000000000000000000000000000000000000000000018000371c7ee000180064ec2007671db % 84473b9dc0ef9ce44000000000000000000c000020000000186000000000000000000000000000 % 00000000000000010016 % 00000000000000000000000000000000000000000000003000018be2440001c006400200000000 % 00000000000000044000000000000000001c1c6e79cfb6e0e03000000000000000000000000000 % 00000000000000010016 % 00000000000000000000000000000000000000000000007000010a03640000e006200e3f000000 % 0000000000000008400000000000000000383e3123e41311103800000000000000000000000000 % 00000000000000010011 % 0000000000000000000000000000000000000000000000e000010a01a800006006001800000000 % 000000000000000040000000000000000070202122041211101c00000000000000000000000000 % 00000000000000010011 % 0000000000000000000000000000000000000000000001c000010b21b000003006000000000000 % 000000000000000040000000000000000060202122041210e00e00000000000000000000000000 % 00000000000000010011 % 00000000000000000000000000000000000000000000018000039dc09000001806000000000000 % 0000000000000000400000000000000000c0322123241211000600000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000300000000000000001c06000000000000 % 0000000003000000400000000000000001c01c73b9ce3f39f00300000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000700000000000000000e06000108000000 % 201000000100000040000000000000000380000000000001180380000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000e00000000000000000606000108000000 % 2010000001000000400000000000000007000000000000031801c0000000000000000000000000 % 00000000000000010011 % 00000000000000000000000000000000000000006c001c0000000000000000030600f3dee37637 % 783cf03ee11e770040000000000000000600000000000001e000e0000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000032001800000018818000000186010909f19939 % a0119811f121160040000000000000000c00000000000000000060000000000000000000000000 % 00000000000000010011 % 0000000000000000000000000000000000000000220030000000088080100001c6003909011110 % a01108110107080040000000000000001c00000000000000000030000000000000000000000000 % 00000000000000010011 % 0000000000000000000000000000000000000000220070000000080080100000e600c909011110 % a011081101191c0040000000000000003800000000000000000038000000000000000000000000 % 00000000000000010011 % 00000000000000000000000000000000000000007700e03c79b8f98f9e3dc1a076011909911111 % a0111811912326004000000000000000700000000100606000001c000000000000000000000000 % 00000000000000010000 % 00000000000000000000000000000000000000000001c06284c58898a113e2403600edcee3bb9f % 381cf038e39df7004078000000000000600000000100202000000e000000000000000000000000 % 00000000000000010000 % 0000000000000000000000000000000000000000000180401c850890871203a01e000000000010 % 000000000000000043f8000000000000c000000000002020000006000000000000000000000000 % 00000000000000010000 % 00000000000000000000000000000000000000000003004064850890991200601e000000000010 % 00000000000000005ff8000000000001c0001dde7f1e2e23800003000000000000000000000000 % 00000000000000010013 % 000000000000000000000007ffffffffffffffffffff00628c851891a31322200e000000000038 % 00000000000000007fffffffffffffff800008a121213327c00003800000000000000000000000 % 00000000000000010007 % 000000000000000000000007fffffffffffffffffffe003c77ceedcedd9dc3c006000000000000 % 00000000000000007fffffffffffffff80000d0721072124000003800000000000000000000000 % 0000000000000001001a % 00000000000000000000000600000000000000000007000000000000000000000e000008000000 % 003000004000000047f8000000000001c000051921192124000007000000000000000000000000 % 00000000000000010000 % 00000000000000000000000600000000000000000003800000000000000000001e000008000200 % 001000084000000040f8000000000000e00006232123232640000e000000000000000000000000 % 00000000000000010013 % 00000000000000000000000600000000000000000001800000000000000000003e000000000200 % 001000080000000040180000000000007000021df39dbe7380000c000000000000000000000000 % 0000000000000001001c % 00000000000000000000000600000000000000000000c000000000000000000036000dd9dde781 % a711c3dec79b800040000000000000003000000000000000000018000000000000000000000000 % 00000000000000010013 % 00000000000000000000000600000000000000000000e000000000000000000066000e688b3202 % 4f93e6284ccc400040000000000001b01800000000000000000038000000000000000000000000 % 0000000000000001000e % 00000000000000000000000600000000000000000000700000002600c1800e00e6000428d21203 % a81204084848400040000000000000c81c00000000000000000070000000000000000000000000 % 00000000000000010006 % 0000000000000000000000060000000000000000000038000000220040803101c6000428521200 % 681204084848400040000000000000880e000000000000000000e0000000000000000000000000 % 0000000000000001000d % 000000000000000000000006000000000000000000001800000002004080210386000468623202 % 2c93262848c84000400000000000008807000000000000000000c0000000000000000000000000 % 00000000000000010017 % 000000000000000000000006000000000000000000000c079dde62785c8e0103060007dc21e383 % c739c3cee79ce00040000000000001dc0300000c0000000c380180000000000000000000000000 % 0000000000000001001d % 000000000000000000000006000000000000000000000e0848a12284669f020606000400000000 % 000000000000000040000000000000000180000400020004c40380000000000000000000000000 % 00000000000000010006 % 000000000000000000000006000000000000000000000701cd07221c4290040e06000400000000 % 0000000000000000400000000000000001c0000400020004840700000000000000000000000000 % 00000000000000010003 % 000000000000000000000006000000000000000000000386451922644290041c06000e00000000 % 0000000000000000400000000000000000e069c470f79c7c040e00000000000000000000000000 % 00000000000000010001 % 000000000000000000000006000000000000000000000188c623228c46990c3806000000000000 % 00000000000000004000000000000000007093e4f98a3ec4080c00000000000000000000000000 % 0000000000000001000c % 0000000000000000000000060000000000000000000000c7621df7767dce0c3006000000000000 % 000000000000000040000000000000000030ea0481022084101800000000000000000000000000 % 00000000000000010017 % 0000000000000000000000060000000000000000000000e0000000000000006006000000000000 % 0000000000000000400000000000000000181a0481022084103800000000000000000000000000 % 00000000000000010005 % 00000000000000000000000600000000000000000000007000000000000000e006000000000000 % 00000800000000004000000000000000001c8b24c98a328c307000000000000000000000000000 % 00000000000000010010 % 00000000000000000000000600000000000000000000003800000000000001c006000000000000 % 00000800000000004000000000000000000ef1ce70f39c7630e000000000000000000000000000 % 0000000000000001001b % 000000000000000000000006000000000000000000000018000000000000038006000006e78fbc % dd871ee3e68000004000000000000000000700000000000000c000000000000000000000000000 % 00000000000000010006 % 00000000000000000000000600000000000000000000000c000000000000030006000007384442 % 664f89f10900000040000000000000000003000000000000018000000000000000000000000000 % 00000000000000010011 % 00000000000000000000000600000000000000000000000e00000000000006000600000211c40e % 444809010e80000040000000000000000001800000000000038000000000000000000000000000 % 0000000000000001001c % 0000000000000000000000060000000000000000000000070000000000000e0006000002164432 % 444809010180000040000000000000000001ffffffffffffff0000000000000000000000000000 % 00000000000000010007 % 000000000000000000000006000000000000000000000003fffffffffffffc000600000238c446 % 444c89910880000040000000000000000000fffffffffffffe0000000000000000000000000000 % 00000000000000010012 % 000000000000000000000006000000000000000000000000000000000000000006000003e76e3b % eee70ee38f00000040000000000000000000000000100000000000000000000000000000000000 % 0000000000000001001d % 000000000000000000000006000000000000000000000000000000000000000006000002000000 % 000000000000000040000000000000000000000000100000000000000000000000000000000000 % 00000000000000010008 % 000000000000000000000006000000000000000000000000000000000000000006000002000000 % 000000000000000040000000000000000000000000100000000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000006000000000000000000000000000000000000000006000007000000 % 000000000000000040000000000000000000000000100000000000000000000000000000000000 % 0000000000000001001e % 000000000000000000000006000000000000000000000000000000000000000006000000000000 % 00000000000000004000000000000000000000006c100000000000000000000000000000000000 % 00000000000000010009 % 000000000000000000000006000000000000000000000000000000000000000006000000000000 % 000000000000000040000000000000000000000024100000000000000000000000000000000000 % 00000000000000010014 % 000000000000000000000006000000000000000000000000000000000000000006000000000000 % 000000000000000040000000000000000000000028100000000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000006000000000000000000000000000000000000000007ffffffffffff % ffffffffffffffffc0000000000000000000000018100000000000000000000000000000000000 % 0000000000000001000a % 000000000000000000000006000000000000000000000000000000000000000007ffffffffffff % ffffffffffffffffc0000000000000000000000010100000000000000000000000000000000000 % 00000000000000010015 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000010100000000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000060100000000000000000000000000000000000 % 0000000000000001000b % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010001 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001000c % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001000d % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010018 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010003 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001000e % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010019 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010004 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001000f % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001001a % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010005 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010010 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001001b % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010006 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001001c % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010007 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010012 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001001d % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010008 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000ff0000000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000ff0000000000000000000000000000000000 % 0000000000000001001e % 00000000000000000000000600000000007fffffffffffffffffffffffffffffffffffffffc000 % 000000000000000000000000000000000000000000fe0000000000000000000000000000000000 % 00000000000000010009 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000fe0000000000000000000000000000000000 % 00000000000000010014 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 0000000000000000000000000000000000000000007e0000000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 0000000000000000000000000000000000000000007c0000000000000000000000000000000000 % 0000000000000001000a % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 0000000000000000000000000000000000000000007c0000000000000000000000000000000000 % 00000000000000010015 % 00000000000000000000000600000000006000000008c000000100000600200000800000004018 % 0000000000000000000000000000000000000000003c0000000000000000000000000000000000 % 00000000000000010000 % 0000000000000000000000060000000000600000001040000001000002002000108000000040f8 % 000000000000000000000000000000000000000000380000000000000000000000000000000000 % 0000000000000001000b % 0000000000000000000000060000000000600000002040000000000002000000104000000047f8 % 000000000000000000000000000000000000000000380000000000000000000000000000000000 % 00000000000000010016 % 00000000000000000000000600000000006000000027cee06e7f3761e26e6eef3c400000007fff % fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000 % 00000000000000010001 % 0000000000000000000000060000000000600000002c4440732119921273245990400000007fff % fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000 % 0000000000000001000c % 000000000000000000000006000000000060000000284640212111107221269090400000004ff8 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010017 % 0000000000000000000000060000000000600000002842802121111192212290904000000041f8 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010002 % 00000000000000000000000600000000006000000028c280232111123223231190400000004038 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 0000000000000000000000060000000000600000002761003e73bbb9df3e710f1c400000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000060000000200100200000000020000000400000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 00000000000000000000000600000000006000000010071fa00000000020000000800000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000060000000000c00700000000070000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010008 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000060000030000018000008000000000200c0c000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000060000010001008000008000000000200404000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000060000010001008000000000c00000000404000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000006001ae1387bc08e3c779b8703bf8fe3c5c4710004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000060025f17cc5009f42228c48811844242664f90004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000006003b01408100900e34884881a1c420e424800004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000006000701408100903214884700a644232424800004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 0000000000000000000000060000000000600239164c500994618884800c8c4246464c90004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000006003ce3b879c1ce3b09dcef80476e73b7ce710004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000060000000000000000000008c00000000000010004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000060000000000000000000018c00000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000006000000000000000000000f000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000060000000000001000000c00001000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 000000000000000000000006000000000060000000000001000040400001000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010007 % 000000000000000000000006000000000060000000000000000040400000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001a % 0000000000000000000000060000000000600000000001bb3bbcf05c786b0d4000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 0000000000000000000000060000000000600000000001cd116640668491124000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 0000000000000000000000060000000000600000000000851a4240421ce91d0000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001c % 0000000000000000000000060000000000600000000000850a4240426419030000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 00000000000000000000000600000000006000000000008d0c4640468c89114000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000e % 0000000000000000000000060000000000600000000000fb843c707c76f39e4000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 000000000000000000000006000000000060000000000080000000000000004000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000d % 000000000000000000000006000000000060000000000080000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010017 % 0000000000000000000000060000000000600000000001c0000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010003 % 000000000000000000000006000000000060000000180000000000401818000007c7c7f0004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010001 % 000000000000000000000006000000000060000000080100000000400808000002284230004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 000000000000000000000006000000000060000000080100000000000808000002282208004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010017 % 0000000000000000000000060000000000600109b8f9e3dc077f1fc78b88e1a0022e0240004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010005 % 0000000000000000000000060000000000600319cd8a113e023088484cc9f24003c3c3c0004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010010 % 00000000000000000000000600000000006001088508712003438841c84903a002002240004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001b % 000000000000000000000006000000000060010885099120014c88464849006002082208004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 00000000000000000000000600000000006001188d1a313201918848c8c99224030c4210004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000006000ecf8edd9dc008edce76f9ce3c4070f87f0004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001c % 000000000000000000000006000000000060000080000000000000000000000400000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010007 % 000000000000000000000006000000000060000080000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010012 % 0000000000000000000000060000000000600001c0000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010008 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001e % 000000000000000000000006000000000060000000000000000006000000300000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010009 % 000000000000000000000006000000000060000000000000000002000000100000010000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010014 % 000000000000000000000006000000000060000000000000000002000000100000010000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 0000000000000000000000060000000000600371e7dbb0d007dc3e213c71f01e786bc6a0004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000a % 000000000000000000000006000000000060018b320cc920023e626362fb1031cc910920004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010015 % 000000000000000000000006000000000060010a120889d0022042214082102084e90e80004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000060010a12088830022042214082102084190180004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000b % 000000000000000000000006000000000060010a320889120232462362ca30318c8908a0004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000060039de71ddde2071c3b1dbc71d81e78f1cf20004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010001 % 000000000000000000000006000000000060000000000002000000000000000000000020004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000d % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010018 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010003 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000e % 000000000000000000000006000000000060000000180000000000000000000010000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010019 % 000000000000000000000006000000000060000000080004000000100000100010000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010004 % 000000000000000000000006000000000060000000080004000000100000100000001800004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000f % 0000000000000000000000060000000000600000d708e3cf0dc39dfc0e6e3dc7f370e000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001a % 00000000000000000000000600000000006000012f89f6240627c5901f3113e211891000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010005 % 0000000000000000000000060000000000600001d8090404042402101021120211091000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010010 % 00000000000000000000000600000000006000003809040404240710102112021108e000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001b % 00000000000000000000000600000000006000011c899624042649901921132211090000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 0000000000000000000000060000000000600001e71ce3c70e739ddc0e739dc73b9df000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000060000000000000000000000000000000011800004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001c % 000000000000000000000006000000000060000000000000000000000000000000031800004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010007 % 00000000000000000000000600000000006000000000000000000000000000000001e000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010012 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010008 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 00000000000000000000000600000000006000000000000000000200c180000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001e % 000000000000000000000006000000000060000000000000000002004080000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010009 % 000000000000000000000006000000000060000000000000000000004080000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010014 % 0000000000000000000000060000000000600000000000007779f6785c8e000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 00000000000000000000000600000000006000000000000022848284669f000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000a % 000000000000000000000006000000000060000000000000341c821c4290000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010015 % 000000000000000000000006000000000060000000000000146482644290000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000060000000000000188c828c4699000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000b % 0000000000000000000000060000000000600000000000000877c7767dce000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010001 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010017 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010002 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 00000000000000000000000600000000007fffffffffffffffffffffffffffffffffffffffc000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010008 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000003fc0000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000003fc0000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000003f80000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000001f80000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000001f80000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000001f00000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 000000000000000000000006000000000000000000000000000000f00000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010007 % 000000000000000000000006000000000000000000000000000000f00000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001a % 000000000000000000000006000000000000000000000000000000e00000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 0000000000000000000000060000000007fffffffffffffffffffffffffffffffffffffffffe00 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001c % 0000000000000000000000060000000007fffffffffffffffffffffffffffffffffffffffffe00 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000e % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000d % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010017 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 00000000000000000000000600000000060000000000010c000060000000000800000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010003 % 000000000000000000000006000000000600000000000204000020000000000800000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010001 % 000000000000000000000006000000000600000000000404000020000000000400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 00000000000000000000000600000000060000000000047cee03e4239b8dc78400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010017 % 0000000000000000000000060000000006000000000004c444062c67cc46284400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010005 % 00000000000000000000000600000000060000000000048464042424084421c400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010010 % 000000000000000000000006000000000600000000000484280424240844264400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001b % 00000000000000000000000600000000060000000000048c28046466484428c400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 0000000000000000000000060000000006000000000004761003b3b39cee776400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000600000000000400100000000000000400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001c % 00000000000000000000000600000000060000000000020073f000000000000800000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010007 % 000000000000000000000006000000000600000000000000c00000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010012 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010008 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 000000000000000000000006000000000600000000000000100000000010000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001e % 000000000000000000000006000000000600000000001001100000000010010000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010009 % 000000000000000000000006000000000600000000001001000000000000010000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010014 % 00000000000000000000000600000000066ef9ceee6e3de3f3bb81bb0f3373ce6e1e6e3c700600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 00000000000000000000000600000000067343e45f3112111117c0cc9091891f31213162f80600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000a % 00000000000000000000000600000000062142069021107111a400888391091021072140800600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010015 % 00000000000000000000000600000000062142029021119110a400888c91091021192140800600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 00000000000000000000000600000000062343231921123110c640889191091921232162c90600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000b % 00000000000000000000000600000000063ee1c10e739dd9f84381ddcefb9dce739df3bc710600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000620000000000000000000000000000000000000010600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010001 % 000000000000000000000006000000000620000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 000000000000000000000006000000000670000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000d % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010018 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010003 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000e % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010019 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010004 % 00000000000000000000000600000000060000000000e3ff3cf87ce3c79df8ff70000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000f % 00000000000000000000000600000000060000000001f108664021f62cc8fc4220000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001a % 00000000000000000000000600000000060000000001010842402104084d404320000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010005 % 000000000000000000000006000000000600000000010108424021040845404140000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010010 % 0000000000000000000000060000000006000000000191084640219628c6644140000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001b % 00000000000000000000000600000000060000000000e39c3ce070e3c78238e080000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 000000000000000000000006000000000600000000000000000000000000000080000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000600000000000000000000000000000380000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001c % 000000000000000000000006000000000600000000000000000000000000000600000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010007 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010012 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010008 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001e % 0000000000000000000000060000000007fffffffffffffffffffffffffffffffffffffffffe00 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010009 % 000000000000000000000006000000000000000000000e00000000000000000700000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010014 % 000000000000000000000006000000000000000000001c00000000000000000380000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 0000000000000000000000060000000000000000000038000000000000000001c0000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000a % 0000000000000000000000060000000000000000000070000000000000000000e0000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010015 % 00000000000000000000000600000000000000000000e000000000000000000070000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 00000000000000000000000600000000000000000001c000000000000000000038000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000b % 00000000000000000000000600000000000000000003800000000000000000001c000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 00000000000000000000000600000000000000000007000000000000000030300e000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010001 % 0000000000000000000000060000000000000000000e0000000000000000101007000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 0000000000000000000000060000000000000000001c0000000000000000101003800000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010017 % 0000000000000000000000060000000000000000003909b9f38f1e77e3ef1711c1c00000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010002 % 0000000000000000000000060000000000000000007318c487d8b323f1109993e0e00000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 000000000000000000000006000000000000000000e10884841021350103909200700000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000000000001c1088484102115010c909200380000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 0000000000000000000000060000000000000000038118848658a31991119193201c0000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 00000000000000000000000600000000000000000700edcfc38f1e08e38edf39c00e0000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 00000000000000000000000600000000fffffffffe000000000000000000000000070000000000 % 00000ffffffffffffffffffffffffffffffffffffffffffc000000000000000018000000000000 % 00000000000000010008 % 00000000000000000000000600000000fffffffffe000000000000000000000000070000000000 % 00000ffffffffffffffffffffffffffffffffffffffffffc000000000000000018000000000000 % 00000000000000010016 % 00000000000000000000000600000000c0000000070000000000000000000000000e0000000000 % 00000c000000000000000000000000000000000000000004000000000000000018000000000000 % 00000000000000010016 % 00000000000000000000000600000000c0000000038000000000000000000000001c0000000000 % 00000c000000000000000000000000000000000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c000000001c00000000000000000000000380000000000 % 00000c000000000000000000000000000000000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c0000006c0e00000000000000000000000700000000000 % 00000c000000000000000000000000000000000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c0000002407000000000000001c0000000e00000000000 % 00000c000000000000000000000000000000000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c000000280380000000000000620000001c00000000000 % 00000c00000000000400000030000400c044000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c0000001801c0000000000000420000003800000000000 % 00000c00000000000900000010001c004044000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c0000001000e000000e3ff3cf820000007000000000000 % 00000c000000000011000000158004004002000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c00000010007000001f10866404000000e000000000000 % 00000c000000000013ff770f1237043c5cc2000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c00000060003800001010842408000001c000000000000 % 00000c000000000011122f90943984666642000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c00000000001c000010108424080000038000000000000 % 00000c0000000000111b28039e1084424242000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c00000000000e000019108464180000070000000000000 % 00000c0000000000110d480c921084424242000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c00000000000700000e39c3ce1800000e0000000000000 % 00000c0000000000110d8c9193118c464642000000000004000000000000000018000000000000 % 00000000000000010000 % 00000000000000000000000600000000c0000000000038000000000000000001c0000000000000 % 00000c000000000011c4870efb9f1e3c7c42000000000004000000000000000018000000000000 % 00000000000000010000 % 00000000000000000000000600000007f800000000001c00000000000000000380000000000000 % 00000c000000000010000000001000000042000000000004000000000000000018000000000000 % 00000000000000010000 % 00000000000000000000000600000007f800000000000e00000000000000000700000000000000 % 00000c000000000008000000001000000144000000000004000000000000000018000000000000 % 00000000000000010013 % 00000000000000000000000600000003f8000000000007fffffffffffffffffe00000000000000 % 00000c000000000000000000003800000380000000000004000000000000000018000000000000 % 00000000000000010007 % 00000000000000000000000600000003f800000000000ffffffffffffffffffe00000000000000 % 00000c000000000000000000000000000000000000000004000000000000000018000000000000 % 0000000000000001001a % 00000000000000000000000600000003f000000000001c00000000000000000300000000000000 % 00000c000003100000000604000010000000200003000004000000000000000018000000000000 % 00000000000000010000 % 00000000000000000000000600000001f000000000003800000000000000000180000000000000 % 00000c000001100002000204000210000000600001000004000000000000000018000000000000 % 00000000000000010013 % 00000000000000000000000600000001f0000000000070000000000000000000c0000000000000 % 00000c000001000002000200000200000000200001580004000000000000000018000000000000 % 0000000000000001001c % 00000000000000000000000600000001e00000000000e000000000000000000060000000000000 % 00000c000f1f3108d781e2ec70f7b3bf000f2e3879200004000000000000000018000000000000 % 00000000000000010013 % 00000000000000000000000600000000e00000000001c000000000000000000030000000000000 % 00000c0010b1131922033334f98a111f8018b17cc5400004000000000000000018000000000000 % 0000000000000001000e % 00000000000000000000000600000000e000000000038000000000000000000018000000000000 % 00000c0003a11109d2021214810211a80010214081e00004000000000000000018000000000000 % 00000000000000010006 % 00000000000000000000000600000000c00000000007000000000000000000000c000000000000 % 00000c000ca1110832021214810210a80010214081200004000000000000000018000000000000 % 0000000000000001000d % 0000000000000000000000060000000040000000000e0000000000000000000006000000000000 % 00000c0011a3111912023234c98a10cc8818a164c5300004000000000000000018000000000000 % 00000000000000010017 % 0000000000000000000000060000000000000000001c0000000000000000000003000000000000 % 00000c000edd90ede381e3e470f3b847080f73b87bb80004000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000000000000000000380000000000000000000001800000000000 % 00000c000000100000000004000000000800000000000004000000000000000018000000000000 % 00000000000000010006 % 000000000000000000000006000000000000000000700000000000000000000000c00000000000 % 00000c000000500000000014000000000000000000000004000000000000000018000000000000 % 00000000000000010003 % 000000000000000000000006000000000000000000e000000c0000000180061c00600000000000 % 00000c000000e00000000038000000000000000000000004000000000000000018000000000000 % 00000000000000010001 % 000000000000000000000006000000000000000001c00000040000000080026200300000000000 % 00200c000000000000000000000000000000000000000004000000000000000018000000000000 % 0000000000000001000c % 000000000000000000000006000000000000000003800000040000000080024200180000000000 % 003c0c000000000000000000000000000000000000000004000000000000000018000000000000 % 00000000000000010017 % 00000000000000000000000600000000000000000700085b85cf109b8f8e3e02000c0000000000 % 003f8c00000000080000300e000013016200000070000004000000000000000018000000000000 % 00000000000000010005 % 00000000000000000000000600000000000000000e0018cc4679b18c589f620400060000000000 % 003ffc000000000800001010000011012220000080000004000000000000000018000000000000 % 00000000000000010010 % 00000000000000000000000600000000000000000c00084844309088509042080003ffffffffff % fffffc000000000000001010000001002020000080000004000000000000000018000000000000 % 0000000000000001001b % 00000000000000000000000600000020000000000e000848443090885090420800060000000000 % 003ffc00000373f9bb0f1039c7837173267bb879c0000004000000000000000018000000000000 % 00000000000000010006 % 0000000000000000000000060000002000000000070008c84471918851994618000c0000000000 % 003f8c0000039908cc909013e8449199222110cc80000004000000000000000018000000000000 % 00000000000000010011 % 0000000000000000000000060007ce7909fdc0000380077ce7cf0edceece3b1800180000000000 % 003c0c00000109088883901201c751092221908480000004000000000000000018000000000000 % 0000000000000001001c % 00000000000000000000000600021f231886200001c00000000000000000000000300000000000 % 00200c0000010908888c90120640d1092220a08480000004000000000000000018000000000000 % 00000000000000010007 % 000000000000000000000006000210210884200000e00000000000000000000000606c00000000 % 00000c00000119088891901328c451192220a08c80000004000000000000000018000000000000 % 00000000000000010012 % 000000000000000000000006000210210884200000700000000000000000000000c03200000000 % 00000c000001f39dddcef839c767b9f3f7384079c0000004000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000219211884200000380000000000000000000001802200000000 % 00000c000001000000000000000000000000400000000004000000000000000018000000000000 % 00000000000000010008 % 00000000000000000000000600070e38edce7000001c0000000000000000000003002200000000 % 00000c000001000000000000000000000001c00000000004000000000000000018000000000000 % 00000000000000010013 % 0000000000000000000000060000000000000000000e0000000000000000000006007700000000 % 00000c000003800000000000000000000003000000000004000000000000000018000000000000 % 0000000000000001001e % 00000000000000000000000600000000000000000007000000000000000000000c000000000000 % 00000c000000000000000000000000000000000000000004000000000000000018000000000000 % 00000000000000010009 % 000000000000000000000006000000000000000000038000000000000000000018000000000000 % 00000c0000000004018180000400001810000040000000040000000000000000186c0000000000 % 00000000000000010014 % 00000000000000000000000600000000000000000001c000000000000000000030000000000000 % 00000c000000000400808000040000081000084000000004000000000000000018240000000000 % 0000000000000001001f % 00000000000000000000000600000000000000000000e000000000000000000060000000000000 % 00000c000000000000808000000000080000080000000004000000000000000018280000000000 % 0000000000000001000a % 0000000000000000000000060000000000000000000070000000000000000000c0000000000000 % 00000c000077f1fc78b88e1a0db8078bb1c3decefc000004000000000000000018180000000000 % 00000000000000010015 % 000000000000000000000006000000000000000000003800000000000000000180000000000000 % 00000c000023088484cc9f2404c40cccd3e628447e000004000000000000000018100000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000001c00000000000000000300000000000000 % 00000c00003438841c84903a0484084852040846a0000004000000000000000018100000000000 % 0000000000000001000b % 00000000000000000000000600001cfbef3e000000000ffffffffffffffffffe00000000000000 % 00000c000014c884648490060484084852040842a0000004000000000000000018600000000000 % 00000000000000010016 % 00000000000000000000000600003e4119900000000007fffffffffffffffffc00000000000000 % 00000c00001918848c8c9922048408c8d326284332000004000000000000000018000000000000 % 00000000000000010001 % 000000000000000000000006000020411090000000000000000000600000000000000000000000 % 00000c000008edce76f9ce3c0fce078f91c3cee11c000004000000000000000018000000000000 % 0000000000000001000c % 000000000000000000000006000020411090000000000000000000600000000000000000000000 % 00000c000000000000000000000000001000000000000004000000000000000018000000000000 % 0000000000000001000d % 000000000000000000000006000032411190000000000000000000600000000000000000000000 % 00000c000000000000000000000000005000000000000004000000000000000018000000000000 % 00000000000000010018 % 00000000000000000000000600001ce38f38000000000000000000600000000000000000000000 % 00000c00000000000000000000000000e0000000000000040000000000ffffffffffffff000000 % 00000000000000010003 % 000000000000000000000006000000000000000000000000000000636000000000000000000000 % 00000c0000000000000000000000000000000000000000040000000000c0000000000003800000 % 0000000000000001000e % 000000000000000000000006000000000000000000000000000000612000000000000000000000 % 00000c000000000000000000000000000000000000000004000000000180000000000001c00000 % 00000000000000010019 % 000000000000000000000006000000000000000000000000000000614000000000000000000000 % 00000c000000000000000000000000000000000000000004000000000380000000080000c00000 % 00000000000000010004 % 00000000000000000000000600000000000000000000000000000060c000000000000000000000 % 00000ffffffffffffffffffffffffffffffffffffffffffc000000000700001000080000600000 % 0000000000000001000f % 000000000000000000000006000000000000000000000000000000608000000000000000000000 % 00000ffffffffffffffffffffffffffffffffffffffffffc000000000e0000100000000c700000 % 0000000000000001001a % 000000000000000000000006000000000000000000000000000000608000000000000000000000 % 000000000000000380000000000000000000700000000000000000000c0e373ce7db7070380000 % 00000000000000010005 % 000000000000000000000006000000000000000000000000000000630000000000000000000000 % 00000000000000070000000000000000000038000000000000000000181f1891f20988881c0000 % 00000000000000010010 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000e000000000000000000001c00000000000000000038101091020908880c0000 % 0000000000000001001b % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000001c000000000000000000000e0000000000000000007010109102090870060000 % 00000000000000010006 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000380000000000000000000007000000000000000000e019109192090880070000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000007000200000c000000c0000c3800000000000000000c00e39dce71f9cf8038000 % 0000000000000001001c % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000e00020000040000004000041c00000000000000001800000000000008c01c000 % 00000000000000010007 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000001c00000000040000004000040e00000000000000003800000000000018c00c000 % 00000000000000010012 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000038dcfe6ec3c4079f07c42784070000000000000000700000000000000f0006000 % 0000000000000001001d % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000070e6423324240cc80c4c6844038000000000000000e0000000000000000007000 % 00000000000000010008 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000000e042422220e40848084421c401c000000000000000c0000000080303000003800 % 00000000000000010013 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000001c0424222232408480844264400e00000000000000180000000080101000001c00 % 0000000000000001001e % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000380464222246408c808c468c400700000000000000380000000000101000000c00 % 00000000000000010009 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000007007ce77773be079c0763b76e0038000000000070070000eef3f8f1711c0000600 % 0000000000000f010014 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000e004000000000000000000000001c00000000007e0e000045090909993e0000700 % 0000000000000fe1001f % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000001c004000000000000000000000000e00000000007fcc00006839083909200000380 % 0000000000000ffd000a % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000001800e0000000000000000000000007fffffffffffff8000028c908c9092000001ff % ffffffffffffffff0015 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000001c0000000000000000000000000007fffffffffffffc000031190919193200001ff % ffffffffffffffff0000 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000e000000000000000000000000000e00000000007f8e000010ef9cedf39c0000300 % 0000000000000ff1000b % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000007000000000000000000000000001c00000000007c0600000000000000000000700 % 0000000000000f810016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000038000001c000026060070000000380000000000600300000000000000000000e00 % 0000000000000c010001 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000001c0000020000022020188000000706c00000000000380000000000000000001c1b % 0000000000000001000c % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000000e0000020000002020108000000e032000000000001c000000000000000000180c % 80000000000000010017 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000000700000738786e2e23808000001c022000000000000e0000000000000000003008 % 80000000000000010002 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000038000027c84923327c1000000380220000000000006000006000000061c007008 % 8000000000000001000c % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000001c00002401cea212402000000700770000000000003000002000100026200e01d % c0000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000e0000240641a212402000000e00000000000000003800002000100024201c000 % 0000000000000001001f % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000700002648c8a232646000001c00000000000000001c034e2387bce3e02018000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000003800073876f73e7386000003800000000000000000e049f27cc51f6204030000 % 0000000000000001001f % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000001c00000000000000000000070000000000000000006075024081104208070000 % 00000000000000010008 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000e000000000000000000000e000000000000000000300d0240811042080e0000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000000007000000000000000000001c00000000000000000038459264c51946181c0000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000380000000000000000000380000000000000000001c78e73879ce3b18180000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000000001c0000000000000000000700000000000000000000e00000000000000300000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000000000ffffffffffffffffffffe00000000000000000000600000000000000700000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000300000000000000e00000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000380000000000001c00000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c0000000000000000000000000000001c0000000000001800000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c0000000000000000000000000000000ffffffffffffff000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c06c00000000000000000000000000007fffffffffffff000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c024000000000000000000000000000000000000000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c028000000000000000000000000000000000000000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c018000000000000000000000000000000000000000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c010000000000000000000000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c010000000000000000000000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c060000000000000000000000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010007 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000300c000000000000000000000000000000000000000000000000000 % 0000000000000001001a % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000003e0c000000000000000000000000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000003fcc000000000000000000000000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffffffffffffffffffffc000000000000000000000000000000000000000000000000000 % 0000000000000001001c % 000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffffffffffffffffffffc000000000000000000000000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000003fec000000000000000000000000000000000000000000000000000 % 0000000000000001000e % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000003f0c000000000000000000000000000000000000000000000000000 % 00000000000000010006 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000380c000000000000000000000000000000000000000000000000000 % 0000000000000001000d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010017 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 0000000000000001001d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010006 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010003 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010001 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 0000000000000001000c % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010017 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010005 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010010 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 0000000000000001001b % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010006 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000007f800000000000000000000000000000000000000000000000000 % 0000000000000001001c % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000007f800000000000000000000000000000000000000000000000000 % 00000000000000010007 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000003f800000000000000000000000000000000000000000000000000 % 00000000000000010012 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000003f000000000000000000000000000000000000000000000000000 % 0000000000000001001d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000003f000000000000000000000000000000000000000000000000000 % 00000000000000010008 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000001f000000000000000000000000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000001e000000000000000000000000000000000000000000000000000 % 0000000000000001001e % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000001e000000000000000000000000000000000000000000000000000 % 00000000000000010009 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000e000000000000000000000000000000000000000000000000000 % 00000000000000010014 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000ffffffffffffffffffffffffffffffffffffffffffc0000000000000000000000000000000 % 0000000000000001000a % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000ffffffffffffffffffffffffffffffffffffffffffc0000000000000000000000000000000 % 00000000000000010015 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 0000000000000001000b % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 00000000000000010016 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 00000000000000010001 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 0000000000000001000c % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 0000000000000001000d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00008000000000002000021c0000803011000000000000c0000000000000000000000000000000 % 00000000000000010018 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000400002200003801011000000000000c0000000000000000000000000000000 % 00000000000000010003 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000800000200000801000800000000000c0000000000000000000000000000000 % 0000000000000001000e % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00008000000000009df8fe777dc08f1730800000000000c0000000000000000000000000000000 % 00000000000000010019 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000080000000000088fc42222e60999990800000000000c0000000000000000000000000000000 % 00000000000000010004 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00008000000000008d4042232420909090800000000000c0000000000000000000000000000000 % 0000000000000001000f % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000854042214420909090800000000000c0000000000000000000000000000000 % 0000000000000001001a % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000866442214461919190800000000000c0000000000000000000000000000000 % 00000000000000010005 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00008000000000008238e77087c3cf1f10800000000000c0000000000000000000000000000000 % 00000000000000010010 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000800000008400000010800000000000c0000000000000000000000000000000 % 0000000000000001001b % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000400000038400000051000000000000c0000000000000000000000000000000 % 00000000000000010006 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000060e000000e0000000000000c0000000000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 0000000000000001001c % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 00000000000000010007 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800001000018000004000018070000180b10000000c0000000000000000000000000000000 % 00000000000000010012 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800003000008000004000008080000080911000000c0000000000000000000000000000000 % 0000000000000001001d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000080000100000ac00000000008080000080101000000c0000000000000000000000000000000 % 00000000000000010008 % 000000000000000000000000000000000000000000000000000003fc0000000000000000000000 % 00008000f171c3c901b9fcdd87881ce3c34b9933ddc000c0000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000000000000000000000000000000000003fc0000000000000000000000 % 00008001898be62a01cc8466484809f4248cc911088000c0000000000000000000000000000000 % 0000000000000001001e % 000000000000000000000000000000000000000000000000000003f80000000000000000000000 % 00008001010a040f0084844441c80900e74849110c8000c0000000000000000000000000000000 % 00000000000000010009 % 000000000000000000000000000000000000000000000000000001f80000000000000000000000 % 00008001010a0409008484444648090320c84911050000c0000000000000000000000000000000 % 00000000000000010014 % 000000000000000000000000000000000000000000000000000001f80000000000000000000000 % 00008001890b2629808c844448c809946448c911050000c0000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000000000000000000000000000000000001f00000000000000000000000 % 00008000f39dc3ddc0f9ceeee77c1ce3b78f9fb9c20000c0000000000000000000000000000000 % 0000000000000001000a % 000000000000000000000000000000000000000000000000000000f00000000000000000000000 % 0000800000000000008000000000000000000000020000c0000001ffffffffffffffffffffffff % fffffffffc0000010015 % 000000000000000000000000000000000000000000000000000000f00000000000000000000000 % 00008000000000000080000000000000000000000e0000c0000001ffffffffffffffffffffffff % fffffffffc0000010000 % 000000000000000000000000000000000000000000000000000000e00000000000000000000000 % 000080000000000001c000000000000000000000180000c0000001800000000000000000000000 % 000000000c000001000b % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000001800000000000000000000000 % 000000000c0000010016 % 000000000000000000000000000000000003fffffffffffffffffffffffffffffffffffffc0000 % 0000800000000000000000000000000000000000000000c0000001800000000000000000000000 % 000000000c0000010001 % 000000000000000000000000000000000003fffffffffffffffffffffffffffffffffffffc0000 % 0000800000000000000000000000000000000000000000c000000180000010c00020020000400c % 048000000c000001000c % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 000080000000000070033000000200c0c0000000000000c000000180000020400020022001c004 % 048000000c0000010017 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 0000800000000000800110000002004040000000000000c0000001800000404000000020004004 % 004000000c0000010002 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 0000800000000000800110000000004040000000000000c000000180000047cee066e67ee043c5 % cc4000000c000001000c % 0000000000000000000000000000000000020000000080000000004000018800100000000c0000 % 0000800000000079c0f1103bf8fe3c5c470d0000000000c00000018000004c4440231227304666 % 644000000c0000010016 % 0000000000000000000000000000000000020000000100000000084000008900100000000c0000 % 00008000000000cc81091011844242664f920000000000c0000001800000484640221222104424 % 244000000c000001001f % 0000000000000000000000000000000000020000000200000000080000008100080000000c0000 % 00008000000000848039101a1c420e42481d0000000000c0000001800000484280221222104424 % 244000000c0000010016 % 000000000000000000000000000000000002000000026e7dc3cddecdd8789bddc80000000c0000 % 000080000000008480c9100a6442324248030000000000c000000180000048c28022122230c464 % 644000000c000001001f % 000000000000000000000000000000000002000000027323e66e684664848908880000000c0000 % 000080000000008c8119100c8c4246464c910000000000c0000001800000476100773f3be1e3c7 % c44000000c0000010008 % 00000000000000000000000000000000000200000002212204242844441c890c880000000c0000 % 0000800000000079c0efb80476e73b7ce71e0000000000c0000001800000400100000002000000 % 044000000c0000010016 % 0000000000000000000000000000000000020000000221220424284444648905080000000c0000 % 0000800000000000000000000000000000000000000000c000000180000020071f800002000000 % 148000000c0000010016 % 00000000000000000000000000000000000200000002232324646844448c8905080000000c0000 % 0000800000000000000000000000000000000000000000c0000001800000000c00000007000000 % 380000000c0000010011 % 000000000000000000000000000000000002000000023e71c3c7ceeeee77ddc2080000000c0000 % 0000800000000000000000000000000000000000000000c0000001800000000000000000000000 % 000000000c0000010011 % 0000000000000000000000000000000000020000000220000004000000000002080000000c0000 % 0000800000000000000000000000000000000000000000c0000001800000000000000000000000 % 000000000c0000010011 % 000000000000000000000000000000000002000000012000000400000000000e100000000c0000 % 0000800000000000000000000000000000000000000000c0000001800080080401880000030100 % 000400000c0000010011 % 000000000000000000000000000000000002000000007000000e000000000018000000000c0000 % 0000800000000000000000000000000000000000000000c0000001800080088400880000010100 % 008400000c0000010011 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 0000800000000000000000000000000000000000000000c0000001800000008000800000010000 % 008000000c0000010011 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 0000ffffffffffffffffffffffffffffffffffffffffffc00000019f399b99ec7898d380f1731c % 79edddc00c0000010011 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 0000ffffffffffffffffffffffffffffffffffffffffffc0000001887c8c4884848927c199993e % c4848be00c0000010011 % 0000000000000000000000000000000000020000380000000180000200000100001800000c0000 % 000000000000000001c0000000000001c00000000000000000000188408848841c89d401090920 % 8084d2000c0000010011 % 0000000000000000000000000000000000020000400010000080000200000300000800000c0000 % 00000000000000000380000000000000e000000000000000000001884088488464883401090920 % 808452000c0000010011 % 0000000000000000000000000000000000020000400010000080000000000100000ac0000c0000 % 00000000000000000700000000000000700000000000000000000188648848848c891641191932 % c48463240c0000010011 % 0000000000000000000000000000000000020000e787bcf3e0b8f0d61a00f171c78900000c0000 % 00000000000000000e0000000000000038000000000000000000019c39dcfcee77dde380f1f11c % 78ee21c40c0000010000 % 0000000000000000000000000000000000020000484c519900cd09222401898bec4a00000c0000 % 00000000000000001c006020000100001c00000000000000000001800000000000000000000100 % 000000040c0000010000 % 000000000000000000000000000000000002000041c81109008439d23a01010a080f00000c0000 % 000000000000000038002020002100000e00000000000000000001800000000000000000000500 % 000000000c0000010000 % 0000000000000000000000000000000000020000464811090084c8320601010a080900000c0000 % 000000000000000070002000002000000700000000000000000001800000000000000000000e00 % 000000000c0000010013 % 000000000000000000000000000000000002000048cc5119008d19122281890b2c4980000c0000 % 0000000000000000e01e2e670f7b3bf00380000000000000000001800000000000000000000000 % 000000000c0000010007 % 0000000000000000000000000000000000020000e7679cf380f8ede73c80f39dc79dc0000c0000 % 0000000000000001c033332f98a111f801c0000000000000000001800000000000000000000000 % 000000000c000001001a % 0000000000000000000000000000000000020000000000000000000000800000000000000c0000 % 00000000000000038021212810211a8000e0000000000000000001800000000000000000000000 % 000000000c0000010000 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 00000000000000070021212810210a800070000000000000000001800000004008000000001000 % 000000000c0000010013 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 000000000000000e0023232c98a10cc80038000000000000000001800000084018080000001000 % 080000000c000001001c % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 000000000000001c001e3e270f3b8470001c000000000000000001800000080068080000000000 % 080000000c0000010013 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0700 % 00000000000000380000002000000000000e0000000000000007018000001ec38b9e73703733bf % 9e0000000c000f01000e % 0000000000000000000000000000000000020000000000000000001800000003c00000000c3f00 % 0000000000000070000000a00000000000070000000000000007e180000008444c48f98839911c % c80000000c000fe10006 % 0000000000000000000000000000000000020000000000000000002400000004400000000dff00 % 00000000000000e0000001c00000000000038000000000000007fd8000000844484881081091a8 % 480000000c000ffd000d % 0000000000000000000000000000000000020000000000000000002400000004000000000fffff % ffffffffffffffc000000000000000000001ffffffffffffffffff8000000843884881081090a8 % 480000000fffffff0017 % 0000000000000000000000000000000000020001e3cf10be78f3b819c1e3cdcecfeec0000fff00 % 00000000000000e000000000000000000001c000000000000007ff80000008440848c9081190c8 % c80000000c000fff001d % 00000000000000000000000000000000000200021638b1908589102883166624443320000c7f00 % 0000000000000070000000000000000000038000000000000007f18000000ee7dcee739c1f3847 % 8e0000000c000ff10006 % 0000000000000000000000000000000000020000741010901d01904482042424442220000c0f00 % 000000000000003800000000000000e00007000000000000000781800000000460000000100000 % 000000000c000f810003 % 0000000000000000000000000000000000020001941010906500a04302042424442220000c0100 % 000000000000001c0000000000002310000e000000000000000401800000000c60000000100000 % 000000000c000c010001 % 0000000000000000000000000000000000020002363891908d88a06383146424442220000c0000 % 0000000000006c0e0000000000002210001c1b0000000000000001800000000780000000380000 % 000000000c000001000c % 0000000000000000000000000000000000020001dbcf0ef876f0403cc1e3ce7eee7770000c0000 % 000000000000240700079e7df70f781000380c8000000000000001800000000000000000000000 % 000000000c0000010017 % 0000000000000000000000000000000000020000000000000000400000000000000000000c0000 % 0000000000002803800c73208f98a0200070088000000000000001800000000000000000000000 % 000000000c0000010005 % 0000000000000000000000000000000000020000000000000001c00000000000000000000c0000 % 0000000000001801c00821208810204000e0088000000000000001800180000200000000000000 % 000000000c0000010010 % 0000000000000000000000000000000000020000000000000003000000000000000000000c0000 % 0000000000001000e00821208810204001c01dc000000000000001800080004200000000000000 % 001000000c000001001b % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 0000000000001000700c63208c98a0c00380000000000000000001800080004000000000000000 % 001000000c0000010006 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 000000000000600038079e71c70f38c007000000000000000000018d388e1ef63cdc0dc79f78dd % 8e3ce7c68c0000010011 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 00000000000000001c000000000000000e00000000000000000001927c9f314266620e68488466 % 5f11f2090c000001001c % 0000000000000000000000000000000000020000007000009809900000000000000000000c0000 % 00000000000000000e000000000000001c000000000000000000019d4090204242420421c81c44 % 5011020e8c0000010007 % 0000000000000000000000000000000000020000008000008808910000040040000000000c0000 % 000000000000000007000000000000003800000000000000000001834090204242420426486444 % 501102018c0000010012 % 0000000000000000000000000000000000020000008000000800810000040040000000000c0000 % 000000000000000003800000000000007000000000000000000001916499314246420468c88c44 % 591192088c000001001d % 000000000000000000000000000000000002000001ce1e1b8b98b3ddc0df3cf211a000000c0000 % 000000000000000001c0000000000000e0000000000000000000019e39ce1e773ce707c77c76ee % ee1ce70f0c0000010008 % 0000000000000000000000000000000000020000009f21248cc8910881244246324000000c0000 % 000000000000000000e0000000000001c000000000000000000001800000000000000400000000 % 000000000c0000010013 % 00000000000000000000000000000000000200000090073a8848910c81d40e4213a000000c0000 % 0000000000000000007fffffffffffff8000000000000000000001800000000000000400000000 % 000000000c000001001e % 0000000000000000000000000000000000020000009019068848910500343242106000000c0000 % 000000000000000000000000000000000000000000000000000001800000000000000e00000000 % 000000000c0000010009 % 00000000000000000000000000000000000200000099232288c8910501144642322000000c0000 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 000000000c0000010014 % 000000000000000000000000000000000002000001ce1dbdcf9df9c201e73b71dbc000000c0000 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 000000000c000001001f % 0000000000000000000000000000000000020000000000000000000200000000000000000c0000 % 000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffff % fffffffffc000001000a % 0000000000000000000000000000000000020000000000000000000e00000000000000000c0000 % 000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffff % fffffffffc0000010015 % 0000000000000000000000000000000000020000000000000000001800000000000000000c0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010000 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001000b % 000000000000000000000000000000000003fffffffffffffffffffffffffffffffffffffc0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010016 % 000000000000000000000000000000000003fffffffffffffffffffffffffffffffffffffc0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010001 % 0000000000000000000000000000000000000000000000060000000000000e0000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001000c % 00000000000000000000000000000000000000000000000c000000000000070000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001000d % 000000000000000000000000000000000000000000000018000000000000038000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010018 % 00000000000000000000000000000000000000000000003000000000000001c000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010003 % 00000000000000000000000000000000000000000000006000000800003000e000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001000e % 0000000000000000000000000000000000000000000000c0000008000010007000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010019 % 000000000000000000000000000000000000000000000180000000000010003800000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010004 % 0000000000000000000000000000000000000000000003000377d9bb1e10001c00000000000000 % 000000000000000000003ffffffffffffffffffffffffffffe0000000000000000000000000000 % 0000000000000001000f % 000000000000000000000000000000000000000000000600039a08cca110000e00000000000000 % 000000000000000000003ffffffffffffffffffffffffffffe0000000000000000000000000000 % 0000000000000001001a % 000000000000000000000000000000000000000000000c00010a08888710000700000000000000 % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 00000000000000010005 % 000000000000000000000000000000000000000000001800010a08889910000380000000000000 % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 00000000000000010010 % 000000000000000000000000000000000000000000003000011a0888a3100001c0000000000000 % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 0000000000000001001b % 00000000000000000000000000000000000000000000600001f71dddddb80000e0000000000000 % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 00000000000000010006 % 00000000000000000000000000000000000000000000c000010000000000000070000000000000 % 000000000000000000e03000000000000000000000000000060000000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000018000010000000000000038000000000000 % 000000000000000000fc3000000000000000000000000000060000000000000000000000000000 % 0000000000000001001c % 00000000000000000000000000000000000000000003000003800000000000001c000000000000 % 000000000000000000ffb000000000000000010000000380060000000000000000000000000000 % 00000000000000010007 % 00000000000000000000000000000000000000000006000000000000000000000fffffffffffff % fffffffffffffffffffff000000000000000030000000100060000000000000000000000000000 % 00000000000000010012 % 00000000000000000000000000000000000000000007000000000000000000000fffffffffffff % fffffffffffffffffffff000000000000000010000000100060000000000000000000000000000 % 0000000000000001001d % 00000000000000000000000000000000000000000003800000000000000000001c000000000000 % 000000000000000000ff3003e73761e77e037171e1a70100060000000000000000000000000000 % 00000000000000010008 % 00000000000000000000000000000000000000000001c000700000981801c00038000000000000 % 000000000000000000f830010f9993323f03998a124f8100060000000000000000000000000000 % 00000000000000010013 % 00000000000000000000000000000000000000000000e000800000880806200070000000000000 % 000000000000000000c03001081112135001090873a80100060000000000000000000000000000 % 0000000000000001001e % 0000000000000000000000000000000000000000000070008000000808042000e0d80000000000 % 000000000000000000003001081112115001090990680100060000000000000000000000000000 % 00000000000000010009 % 000000000000000000000000000000000000000000003801ce1e1b8b88e02001c0480000000000 % 0000000000000000000030010c9112319901190a322c8380060000000000000000000000000000 % 00000000000000010014 % 000000000000000000000000000000000000000000001c009f21248cc9f0400380500000000000 % 000000000000000000003003873bb9e08e01f39ddbc70380060000000000000100000000000000 % 0000000000000001001f % 000000000000000000000000000000000000000000000e0090073a884900800700300000000000 % 000000000000000000003000000000000001000000000000060000000000000100000000000000 % 0000000000000001000a % 000000000000000000000000000000000000000000000700901906884900800e00200000000000 % 0000000000000000000030000000000000010000000000000600000000003e73c85f6e00000000 % 00000000000000010015 % 00000000000000000000000000000000000000000000038099232288c991801c00200000000000 % 00000000000000000000300000000000000380000000000006000000000010f918c83100000000 % 00000000000000010000 % 0000000000000000000000000000000000000000000001c1ce1dbdcf9ce1803800c00000000000 % 000000000000000000003000000000000000000000000000060000000000108108482100000000 % 0000000000000001000b % 0000000000000000000000000000000000000000000000e0000000000000007000000000000000 % 000000000000000000003000000000000000000000000000060000000000108108482100000000 % 00000000000000010016 % 00000000000000000000000000000000000000000000007000000000000000e000000000000000 % 00000000000000000000300602000008000000000000000006000000000010c908c82100000000 % 00000000000000010001 % 00000000000000000000000000000000000000000000003800000000000001c000000000000000 % 0000000000000000000030020200010800000000000000000600000000003871c77c7380000000 % 0000000000000001000c % 00000000000000000000000000000000000000000000001c000000000000038000000000000000 % 00000000000000000000300200000100000000000000000006000003c000000000000000000000 % 00000000000000010017 % 00000000000000000000000000000000000000000000000e000000000000070000000000000000 % 0000000000000000000031e2e638f3dbbb881b9f39b8f3e706000003f800000000000000000000 % 00000000000000010002 % 0000000000000000000000000000000000000000000000070000000000000e0000000000000000 % 000000000000000000003333327d890917c81cc87dcd090f86000003ff00000000000000000000 % 0000000000000001000c % 000000000000000000000000000000000000000000000003fffffffffffffc0000000000000000 % 00000000000000000000321212410109a40008484084390807ffffffffc0000000000000000000 % 00000000000000010016 % 0000000000000000000000000000000000000000000000070000000000000e0000000000000000 % 00000000000000000000321212410108a40008484084c90806000003ff80000000000000000000 % 0000000000000001001f % 00000000000000000000000000000000000000000000000e000000000000070000000000000000 % 00000000000000000000323232658908c64808c8648d190c86000003fc00000000000000000000 % 00000000000000010016 % 00000000000000000000000000000000000000000000001c000000000000038000000000000000 % 0000000000000000000031e3e238f1dc43880f9c38f8ef8706000003e0000e0000130300000000 % 0000000000000001001f % 00000000000000000000000000000000000000000000003800000000000001c000000000000000 % 000000000000000000003000020000000008080000800000060000030000100000110100000000 % 00000000000000010008 % 00000000000000000000000000000000000000000000007000000000000000e000000000000000 % 0000000000000000000030000a0000000000080000800000060000000000100000010100000000 % 00000000000000010016 % 0000000000000000000000000000000000000000000000e00000c0001800007000000000000000 % 0000000000000000000030001c00000000001c0001c0000006000000000039c3c371711c000000 % 00000000000000010016 % 0000000000000000000000000000000000000000000001c0000040000800003800000000000000 % 00000000000000000000300000000000000000000000000006000000000013e42491993e000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000380000040000800001c00000000000000 % 0000000000000000000030000000000000000000000000000600000000001200e7510920000000 % 00000000000000010011 % 0000000000000000000000000000000000000000000007000007c4278800000e00000000000000 % 000000000000000000003000000000000000000000000000060000000000120320d10920000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000e00000c4c684800000700000000000000 % 000000000000000000003000000e000001000000039c0000060000000000132464511932000000 % 00000000000000010011 % 000000000000000000000000000000000000000000001c0000084421c800000380000000000000 % 00000000000000000000300000100000030000000108000006000000000039c3b7b9f39c000000 % 00000000000000010011 % 0000000000000000000000000000000000000000000038000008442648000001c0000000000000 % 000000000000000000003000001000000100000001080000060000000000000000000000000000 % 00000000000000010011 % 0000000000000000000000000000000000000000000070000008c468c8000000e0000000000000 % 0000000000000000000030000039e7c37171e1a701080000060000000000000000000000000000 % 00000000000000010011 % 00000000000000000000000000000000000000000000e000000763b77c00000070000000000000 % 00000000000000000000300000133203998a124f81080000060000000000000000000000000000 % 00000000000000010011 % 00000000000000000000000000000000000000000001c000000000000000000038000000000000 % 00000000000000000000300000121201090873a801080000060000000000000000000000000000 % 00000000000000010011 % 00000000000000000000000000000000000000000003800000000000000000001c000000000000 % 000000000000000000003000001212010909906801080000060000000000000000000000000000 % 00000000000000010011 % 00000000000000000000000000000000000000000007000000000000000000000e000000000000 % 00000000000000000000300000123201190a322c839c0000060000000000000000000000000000 % 00000000000000010011 % 0000000000000000000000000001fffffffffffffffe0000000000000000000007ffffffffffe0 % 0000000000000000000030000039e701f39ddbc7039c0000060000000000000000000000000000 % 00000000000000010000 % 00000000000000000000000000010000000000000007000000000000000000000c000000000020 % 000000000000000000003000000000010000000000000000060000000000000000000000000000 % 00000000000000010000 % 000000000000000000000000000100000000000000038000700000981801c00018000000000020 % 000000000000000000003000000000010000000000000000060000000000000000000000000000 % 00000000000000010000 % 00000000000000000000000000010000000000000001c000800000880806200030000000000020 % 000000000000000000003000000000038000000000000000060000000000000000000000000000 % 00000000000000010013 % 00000000000000000000000000010000000000000360e000800000080804200060d80000000020 % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 00000000000000010007 % 000000000000000000000000000100000000000001207001ce1e1b8b88e02000c0640000000020 % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 0000000000000001001a % 0000000000000000000000000001000000000000014038009f21248cc9f0400180440000000020 % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 00000000000000010000 % 000000000000000000000000000ff0000000000000c01c0090073a8849008003004400000003fe % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 00000000000000010013 % 000000000000000000000000000fe0000000000000800e00901906884900800600ee00000001fc % 000000000000000000003ffffffffffffffffffffffffffffe0000000000000000000000000000 % 0000000000000001001c % 000000000000000000000000000fe000000000000080070099232288c991800c000000000001fc % 000000000000000000003ffffffffffffffffffffffffffffe0000000000000000000000000000 % 00000000000000010013 % 000000000000000000000000000fe0000000000003000381ce1dbdcf9ce18018000000000001fc % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001000e % 0000000000000000000000000007c00000000000000001c00000000000000030000000000000f8 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010006 % 0000000000000000000000000007c00000000000000000e00000000000000060000000000000f8 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001000d % 0000000000000000000000000007c000000000000000007000000000000000c0000000000000f8 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010017 % 000000000000000000000000000380000000000000000038000000000000018000000000000070 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001001d % 00000000000000000000000000038000000000000000001c000000000000030000000000000070 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010006 % 00000000000000000000000000038000000000000000000e000000000000060000000000000070 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010003 % 000000000000000000000fffffffffffffe0000000000007fffffffffffffc0000001fffffffff % ffffffc00000000000000001fffffffffffffffe00000000000000000000000000000000000000 % 00000000000000010001 % 000000000000000000001ffffffffffffff0000000000003fffffffffffff80000003fffffffff % ffffffe00000000000000003ffffffffffffffff00000000000000000000000000000000000000 % 0000000000000001000c % 000000000000000000003800000000000038000000000000000000000000000000007000000000 % 000000700000000000000007000000000000000380000000000000000000000000000000000000 % 00000000000000010017 % 00000000000000000000700000000000001c00000000000000000000000000000000e000000000 % 00000038000000000000000e0000000000000001c0000000000000000000000000000000000000 % 00000000000000010005 % 00000000000000000000e00000000000000e00000000000000000000000000000001c000000000 % 0000001c000000000000001c0000000000000000e0000000000000000000000000000000000000 % 00000000000000010010 % 00000000000000000001c000000000000007000000000000000000000000000000038000000000 % 0000000e0000000000000038000000000000000070000000000000000000000000000000000000 % 0000000000000001001b % 000000000000000000039000e00001303003800000000000000000000000000000070000c00000 % 001800670000000000000070000000000000000038000000000000000000000000000000000000 % 00000000000000010006 % 000000000000000000071001000001101001c000000000000000000000000000000e0000400000 % 0008002380000000000000e000000000000000001c000000000000000000000100000000000000 % 00000000000000010011 % 0000000000000000000e0001000000101000e000000000000000000000000000001c0000400000 % 00080021c0000000000001c000000000000000000e000000000000000000000100000000000000 % 0000000000000001001c % 0000000000000000001c33739c3c371711c07000000000000000000000000000003885b85cf109 % b8f8e3e0e0000000000003800000000000000000070000000000000000003e73c85f6e00000000 % 00000000000000010007 % 0000000000000000003811893e42491993e0380000000000000000000000000000718cc4679b18 % c589f620700000000000070000000000000000000380000000000000000010f918c83100000000 % 00000000000000010012 % 000000000000000000701109200e751092001c0000000000000000000000000000e08484430908 % 850904203800000000000e00000000000000000001c00000000000000000108108482100000000 % 0000000000000001001d % 000000000000000000e0110920320d1092000e0000000000000000000000000001c08484430908 % 850904201c00000000001c00000000000000000000e00000000000000000108108482100000000 % 00000000000000010008 % 000000000000000001c01109324645119320070000000000000000000000000003808c84471918 % 851994600e0000000000380000000000000000000070000000000000000010c908c82100000000 % 00000000000000010013 % 000000000000000003803b9f9c3b7b9f39c00380000000000000000000000000070077ce7cf0ed % ceece3b0070000000000700000000000000e0000003800000000000000003871c77c7380000000 % 0000000000000001001e % 00000000000000000700000000000000000001c00000000000000000000000000e000000000000 % 00000000038000001e00e0000000000002310000001c000000000003c000000000000000000000 % 00000000000000010009 % 00000000000000000e00000000000000000000e00000000000000000000000001c000000000000 % 0000000001c000001fc1c0000000000002210000000e000000000003f800000000000000000000 % 00000000000000010014 % 00000000000000001c000000000000000000007000000000000000000000000038000000000000 % 0000000000e000001ffb80000006e216e78100000007000000000003ff00000000000000000000 % 0000000000000001001f % 00000001fffffffff8000000000000000000003800000000000000003ffffffff0000000000000 % 00000000007fffffffff000000073633120200000003ffffffffffffffc0000000000000000000 % 0000000000000001000a % 00000001fffffffff8000000000000000000003800000000000000003ffffffff0000000000000 % 00000000007fffffffff800000021212120400000003ffffffffffffffc0000000000000000000 % 00000000000000010015 % 00000001800000000c000000000000000000007000000000000000003000000038000000000000 % 0000000000e000001ff1c00000021212120400000007000000000003fe00000000000000000000 % 00000000000000010000 % 0000000180000000060000000000000018e000e00000000000000000300000001c000000000000 % 00061c0001c000001f80e00000023232120c0000000e000000000003f000000000000000000000 % 0000000000000001000b % 000000018000000003000000000008000b1001c00000000000000000300000000e000000000001 % 00026200038000001c0070000003e1df3b8c0000001c0000000000038000000000080000000000 % 00000000000000010016 % 000000018000001b01800000000008000a10038000000000000000003000003607000000000001 % 000242000706c00000003800000200000000000000386c00000000000000000000080000000000 % 00000000000000010001 % 000000018000000900c038efb9c3de70f81007000000000000000000300000120380073bee387b % ce3e02000e03200000001c000002000000000000007024000000000000003710b71e0000000000 % 0000000000000001000c % 000000018000000a00607c2dcfe628f988200e0000000000000000003000001401c00f8b737cc5 % 1f6204001c02200000000e00000700000000000000e0280000000000000039b198880000000000 % 0000000000000001000d % 0000000180000006003040108604088108401c0000000000000000003000000c00e00804214081 % 104208003802200000000700000000000000000001c01800000000000000109090880000000000 % 00000000000000010018 % 00000001800000040018403886040881084038000000000000000000300000080070080e214081 % 104208007007700000000380000000000000000003801000000000000000109090880000000000 % 00000000000000010003 % 0000000180000004000c644c8f2628c918c0700000000000000000003000000800380c932364c5 % 19461800e0000000000001c0000000000000000007001000000000000000119190880000000000 % 0000000000000001000e % 0000000180000018000638eef9c3ce70ecc0e000000000000000000030000030001c073bbe3879 % ce3b1801c0000000000000e000000000000000000e0060000000000000001f0ef9ce0000000000 % 00000000000000010019 % 000000018000000000030000800000000001c000000000000000000030000000000e0000200000 % 00000003800000000000007000000000000000001c000000000000000000100000000000000000 % 00000000000000010004 % 000000018000000000018000800000000003800000000000000000003000000000070000200000 % 000000070000000000000038000000000000000038000000000000000000100000000000000000 % 0000000000000001000f % 00000001800000000000c001c00000000007000000000000000000003000000000038000700000 % 0000000e000000000000001c000000000000000070000000000000000000380000000000000000 % 0000000000000001001a % 00000001800000000000600000000000000e00000000000000000000300000000001c000000000 % 0000001c000000000000000e0000000000000000e0000000000000000000000000000000000000 % 00000000000000010005 % 0000000ff00000000000300000000000001c00000000000000000001fe0000000000e000000000 % 0000003800000000000000070000000000000001c0000000000000000000000000000000000000 % 00000000000000010010 % 0000000ff00000000000180000000000003800000000000000000001fe00000000007000000000 % 000000700000000000000003800000000000000380000000000000000000000000000000000000 % 0000000000000001001b % 0000000fe000000000000ffffffffffffff000000000000000000001fc00000000003fffffffff % ffffffe00000000000000001ffffffffffffffff00000000000000000000000000000000000000 % 00000000000000010006 % 00000007e00000000000000000010000000000000000000000000001fc00000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010011 % 00000007e00000000000000000010000000000000000000000000000fc00000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001001c % 00000007c00000000000000000010000000000000000000000000000f800000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010007 % 00000003c00000000000000000010000000000000000000000000000f800000000000000000000 % 000000000000000000000000000000011b00000000000000000000000000000000000000000000 % 00000000000000010012 % 00000003c00000000000000000011b000000000000000000000000007800000000000000000000 % 000000000000000000000000000000010c80000000000000000000000000000000000000000000 % 0000000000000001001d % 00000003800000000000000000010c800000000000000000000000007000000000000000000000 % 000000000000000000000000000000010880000000000000000000000000000000000000000000 % 00000000000000010008 % 000000018000000000000000000108800000000000000000000000007000000000000000000000 % 000000000000000000000000000000010880000000000000000000000000000000000000000000 % 00000000000000010013 % 000000018000000000000000000108800000000000000000000000003000000000000000000000 % 000000000000000000000000000000011dc0000000000000000000000000000000000000000000 % 0000000000000001001e % 00000001000000000000000000011dc00000000000000000000000002000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010009 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010014 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001000a % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010015 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001000b % 000000400000000000000000000100000000000000000000000000080000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010016 % 000000400000000000000000000100000000000000000000000000080000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010001 % 000fb8f217db8000000000000001000000000000000000000001f71e84fee00000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001000c % 00047c46320c40000000000000010000000000000000000000008f898c43100000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010017 % 000440421208400000000000000100000000000000000000000088088442100000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010002 % 000440421208400000000000000100000000000000000000000088088442100000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001000c % 00046442320840000000000000010000000000000000000000008c888c42100000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010016 % 000e3871df1ce000000000000001000000000000000000000001c70e76e7380000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010016 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010008 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010016 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010016 % 1000e00000b03000000000000001000000000000000000000000c0000000180030000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010011 % 100100000090100000000000000100000000000000000000000040000000080010000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010011 % 000100000010100000000000000100000000000000000000000040000000080010000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010011 % 33739c3c359711c00000000000010000000000000000000084dc5c7885b8f8e1f0000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010011 % 11893e42489993e0000000000001000000000000000000018c6266cd8cc589f310000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010011 % 1109200e7490920000000000000100000000000000000000844242848485090210000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010011 % 110920320c90920000000000000100000000000000000000844242848485090210000000000000 % 000000000000000000000000000000010000000000000007ffffffffffffffffffffffffffffff % fffff000000000010011 % 1109324644919320000000000001000000000000000000008c42468c8c85199230000000000000 % 000000000000000000000000000000010000000000000007ffffffffffffffffffffffffffffff % fffff000000000010011 % 3b9f9c3b79df39c00000000000010000000000000000000076e77c7877ceece1d8000000000000 % 000000000000000000000000000000010000000000000004000000000000000000000000000000 % 00003000000000010011 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000004000000000000000000000000000000 % 00003000000000010011 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000004000000000000000000000000000000 % 00003000000000010011 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000004000000000000000000000000000000 % 00003000000000010000 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000004000000001002000000000400000000 % 00003000000000010000 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 0000000000000000000000000000001fe000000000000004000000021006020000000400020000 % 00003000000000010000 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 0000000000000000000000000000001fe00000000000000400000002001a020000000000020000 % 00003000000000010013 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000fe00000000000000400000007b0e2e79cdc0dccefe78000 % 00003000000000010007 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000fe000000000000004000000021113123e620e6447320000 % 0000300000000001001a % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000fc00000000000000400000002111212204204246a120000 % 00003000000000010000 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 00000000000000000000000000000007c0000000000000040000000210e212204204242a120000 % 00003000000000010013 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 00000000000000000000000000000007c000000000000004000000021102123242046432320000 % 0000300000000001001c % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 00000000000000000000000000000007800000000000000400000003b9f73b9ce707ce11e38000 % 00003000000000010013 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000038000000000003c04000000000118000000040000000000 % 0000300000000001000e % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000038000000000003f84000000000318000000040000000000 % 00003000000000010006 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000030000000000003ff40000000001e00000000e0000000000 % 0000300000000001000d % 0000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffff % fffffffffffffffffffffffffffffffffffffffffffffffc000000000000000000000000000000 % 00003fffffffffff0017 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000003ffc000000000000000000000000000000 % 0000300000000000001d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000003fc4000000000000000000000000000000 % 00003000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000003e04000060000080000000000000000000 % 00003000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000003004000020001080000000000000000400 % 00003000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004000020001000000000000000000400 % 0000300000000000000c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004034e2387bd8f370371e7de37638f39 % f1a03000000000000017 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004049f27cc509998839a12211997c47c % 82403000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004075024081090908108720711140440 % 83a03000000000000010 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000400d024081090908109921911140440 % 8060300000000000001b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000040459264c509190811a322311164464 % 82203000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004078e73879dcf39c1f1df1dbbbb8739 % c3c03000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004000000000000000100000000000000 % 0000300000000000001c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004000000000000000100000000000000 % 00003000000000000007 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004000000000000000380000000000000 % 00003000000000000012 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004000000000000000000000000000000 % 0000300000000000001d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004000000000000000000000000000000 % 00003000000000000008 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004000000000000000000000000000000 % 00003000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffff % fffff00000000000001e %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n 147.5 232.5 m 165 232.5 l n 165 232.5 m 161.97 233.51 l 161.97 231.49 l cl 0 0 0 F n 147.5 232.5 m 161.97 232.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.5 124.61] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -598 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_duenna\)) s -1292 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (preventative maintenance,) s -678 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error recovery) s savemat setmatrix n 48.75 120 m 96.25 120 l 96.25 135 l 48.75 135 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.5 86.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -782 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_primalpivot\)) s -1100 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select leaving variable;) s -556 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivot basis;) s -1074 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (update variables, PSE) s -1082 695 m 927 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (norms, reduced costs;) s -954 927 m 1159 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select next entering) s -386 1159 m 1391 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s savemat setmatrix n 50 82.5 m 95 82.5 l 95 112.5 l 50 112.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 147.5 54.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -640 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_primalin\)) s -1128 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select entering variable) s savemat setmatrix n 126.25 50 m 168.75 50 l 168.75 60 l 126.25 60 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 147.5 29.617] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -662 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_initp1obj\)) s -970 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (install and initialise) s -812 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (phase I objective) s savemat setmatrix n 126.25 25 m 168.75 25 l 168.75 40 l 126.25 40 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 128.75 144.237] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -620 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(tweakp1obj\)) s -1112 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (adjust objective, check) s -938 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal feasibility of) s -1022 431 m 647 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables in objective) s savemat setmatrix n 105 140 m 152.5 140 l 152.5 157.5 l 105 157.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 127.5 184.617] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -596 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(verifyp1obj\)) s -1104 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (check primal feasbility) s -708 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (of all variables) s savemat setmatrix n 103.75 180 m 151.25 180 l 151.25 195 l 103.75 195 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.5 193.838] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -708 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(preoptimality\)) s -914 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (factor basis, check) s -956 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (accuracy & confirm) s -806 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasibility status) s savemat setmatrix n 51.25 190 m 93.75 190 l 93.75 207.5 l 51.25 207.5 l 51.25 190 l cl gsave 0 0 0 0.176 0 B grestore n 147.5 25 m 146.49 21.972 l 148.51 21.972 l cl 0 0 0 F n 147.5 17.5 m 147.5 21.972 l gsave 0 0 0 0.176 0 B grestore n 147.5 50 m 146.49 46.972 l 148.51 46.972 l cl 0 0 0 F n 147.5 40 m 147.5 46.972 l gsave 0 0 0 0.176 0 B grestore n 147.5 85 m 146.49 81.972 l 148.51 81.972 l cl 0 0 0 F n 147.5 72.5 m 147.5 81.972 l gsave 0 0 0 0.176 0 B grestore n 72.5 120 m 71.491 116.97 l 73.509 116.97 l cl 0 0 0 F n 72.5 112.5 m 72.5 116.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.5 139.946] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -688 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unrecoverable) s -294 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error?) s savemat setmatrix n 72.5 135 m 62.5 135 l 57.5 140 l 62.5 145 l 82.5 145 l 87.5 140 l 82.5 135 l 72.5 135 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 172.645 159.458] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -402 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (entering) s -386 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s -444 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selected?) s savemat setmatrix n 172.5 156.25 m 165 156.25 l 160 162.5 l 165 168.75 l 180 168.75 l 185 162.5 l 180 156.25 l 172.5 156.25 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 128.421 161.976] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -700 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal or dual) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible?) s savemat setmatrix n 127.5 157.5 m 117.5 157.5 l 112.5 162.5 l 117.5 167.5 l 140 167.5 l 145 162.5 l 140 157.5 l 127.5 157.5 l cl gsave 0 0 0 0.176 0 B grestore n 127.5 195 m 120 195 l 115 200 l 120 205 l 135 205 l 140 200 l 135 195 l 127.5 195 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 127.5 199.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -424 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (objective) s -392 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (correct?) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 178.75 192.588] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -662 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_initp1obj\)) s -1000 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (reinitialise objective,) s -614 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (tighten pivot) s -1014 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selection parameters) s savemat setmatrix n 160 188.75 m 197.5 188.75 l 197.5 206.25 l 160 206.25 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.5 211.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible?) s savemat setmatrix n 72.5 207.5 m 65 207.5 l 60 212.5 l 65 217.5 l 80 217.5 l 85 212.5 l 80 207.5 l 72.5 207.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.5 221.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -218 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible?) s savemat setmatrix n 72.5 217.5 m 65 217.5 l 60 222.5 l 65 227.5 l 80 227.5 l 85 222.5 l 80 217.5 l 72.5 217.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 167.5 216.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s 0 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 42.5 231.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -464 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (infeasible) s -480 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (expected?) s savemat setmatrix n 42.5 227.5 m 35 227.5 l 30 232.5 l 35 237.5 l 50 237.5 l 55 232.5 l 50 227.5 l 42.5 227.5 l cl gsave 0 0 0 0.176 0 B grestore n 72.5 190 m 71.491 186.97 l 73.509 186.97 l cl 0 0 0 F n 72.5 155 m 72.5 186.97 l gsave 0 0 0 0.176 0 B grestore n 105 150 m 101.97 151.01 l 101.97 148.99 l cl 0 0 0 F n 87.5 150 m 101.97 150 l gsave 0 0 0 0.176 0 B grestore n 128.75 180 m 127.74 176.97 l 129.76 176.97 l cl 0 0 0 F n 128.75 167.5 m 128.75 176.97 l gsave 0 0 0 0.176 0 B grestore n 93.75 200 m 96.778 198.99 l 96.778 201.01 l cl 0 0 0 F n 115 200 m 96.778 200 l gsave 0 0 0 0.176 0 B grestore n 160 200 m 156.97 201.01 l 156.97 198.99 l cl 0 0 0 F n 140 200 m 156.97 200 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 47.5 152.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -240 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error) s savemat setmatrix n 42.5 227.5 m 41.491 224.47 l 43.509 224.47 l cl 0 0 0 F n 60 222.5 m 42.5 222.5 l 42.5 224.47 l gsave 0 0 0 0.176 0 B grestore n 97.5 227.5 m 96.491 224.47 l 98.509 224.47 l cl 0 0 0 F n 85 222.5 m 97.5 222.5 l 97.5 224.47 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 20 244.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -464 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (infeasible) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 75 244.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -562 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unbounded) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 172.5 251.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -614 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (tighten pivot) s -1014 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selection parameters) s savemat setmatrix n 152.5 247.5 m 192.5 247.5 l 192.5 257.5 l 152.5 257.5 l cl gsave 0 0 0 0.176 0 B grestore n 75 240 m 73.991 236.97 l 76.009 236.97 l cl 0 0 0 F n 83.75 232.5 m 75 232.5 l 75 236.97 l gsave 0 0 0 0.176 0 B grestore n 20 240 m 18.991 236.97 l 21.009 236.97 l cl 0 0 0 F n 30 232.5 m 20 232.5 l 20 236.97 l gsave 0 0 0 0.176 0 B grestore n 152.5 252.5 m 149.47 253.51 l 149.47 251.49 l cl 0 0 0 F n 42.5 237.5 m 42.5 252.5 l 149.47 252.5 l gsave 0 0 0 0.176 0 B grestore n 147.5 45 m 150.53 43.991 l 150.53 46.009 l cl 0 0 0 F n 192.5 252.5 m 205 252.5 l 205 45 l 150.53 45 l gsave 0 0 0 0.176 0 B grestore n 205 200 m 201.97 201.01 l 201.97 198.99 l cl 0 0 0 F n 197.5 200 m 201.97 200 l gsave 0 0 0 0.176 0 B grestore n 205 162.5 m 201.97 163.51 l 201.97 161.49 l cl 0 0 0 F n 185 162.5 m 201.97 162.5 l gsave 0 0 0 0.176 0 B grestore n 95 85 m 98.028 83.991 l 98.028 86.009 l cl 0 0 0 F n 172.5 156.25 m 172.5 85 l 98.028 85 l gsave 0 0 0 0.176 0 B grestore n 47.5 147.5 m 46.491 144.47 l 48.509 144.47 l cl 0 0 0 F n 57.5 140 m 47.5 140 l 47.5 144.47 l gsave 0 0 0 0.176 0 B grestore n 128.75 172.5 m 125.72 173.51 l 125.72 171.49 l cl 0 0 0 F n 60 66.25 m 37.5 66.25 l 37.5 172.5 l 125.72 172.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 146.074 75.472] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 134.617 69.181] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -105 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 56.919 142.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.73 157.81] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 88.251 152.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 29.419 235.17] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 83.169 235.17] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 59.419 225.17] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 43.73 240.31] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 85.751 225.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 112.001 235.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 145.751 165.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 140.751 202.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 114.419 202.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 131.23 170.31] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 185.751 165.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 173.872 154.463] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 138.75 214.617] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -738 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (remove phase I) s -862 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (objective; prepare) s -554 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (for phase II) s savemat setmatrix n 122.5 210 m 155 210 l 155 225 l 122.5 225 l cl gsave 0 0 0 0.176 0 B grestore n 122.5 212.5 m 119.47 213.51 l 119.47 211.49 l cl 0 0 0 F n 85 212.5 m 119.47 212.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 85.751 215.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n 160 162.5 m 156.97 163.51 l 156.97 161.49 l cl 0 0 0 F n 145 162.5 m 156.97 162.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 147.5 63.367] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -402 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (entering) s -386 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s -444 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selected?) s savemat setmatrix n 147.5 60 m 140 60 l 135 66.25 l 140 72.5 l 155 72.5 l 160 66.25 l 155 60 l 147.5 60 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.5 151.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -616 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unbounded?) s savemat setmatrix n 72.5 145 m 62.5 145 l 57.5 150 l 62.5 155 l 82.5 155 l 87.5 150 l 82.5 145 l 72.5 145 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 101.25 61.737] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -892 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_dealWithPunt\)) s -778 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (attempt to relax) s -698 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivot selection) s -554 431 m 647 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (parameters) s savemat setmatrix n 85 57.5 m 117.5 57.5 l 117.5 75 l 85 75 l cl gsave 0 0 0 0.176 0 B grestore n 72.5 60.204 m 65 60.204 l 60 66.454 l 65 72.704 l 80 72.704 l 85 66.454 l 80 60.204 l 72.5 60.204 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.742 62.9992] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -196 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (new) s -530 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (candidates) s -484 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (available?) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 58.57 65.472] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -105 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.876 58.541] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n 117.5 66.25 m 120.53 65.241 l 120.53 67.259 l cl 0 0 0 F n 135 66.25 m 120.53 66.25 l gsave 0 0 0 0.176 0 B grestore n 147.5 45 m 144.47 46.009 l 144.47 43.991 l cl 0 0 0 F n 72.5 60 m 72.5 45 l 144.47 45 l gsave 0 0 0 0.176 0 B grestore n 135 227.5 m 126.25 227.5 l 121.25 232.5 l 126.25 237.5 l 143.75 237.5 l 148.75 232.5 l 143.75 227.5 l 135 227.5 l cl 1 1 1 F gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 135 233.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -288 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (punt?) s savemat setmatrix n 165 217.5 m 161.97 218.51 l 161.97 216.49 l cl 0 0 0 F n 155 217.5 m 161.97 217.5 l gsave 0 0 0 0.176 0 B grestore n 121.25 232.5 m 118.22 233.51 l 118.22 231.49 l cl 0 0 0 F n 111.25 232.5 m 118.22 232.5 l gsave 0 0 0 0.176 0 B grestore n 135 252.5 m 133.99 249.47 l 136.01 249.47 l cl 0 0 0 F n 135 237.5 m 135 249.47 l gsave 0 0 0 0.176 0 B grestore n 97.5 227.5 m 88.75 227.5 l 83.75 232.5 l 88.75 237.5 l 106.25 237.5 l 111.25 232.5 l 106.25 227.5 l 97.5 227.5 l cl 1 1 1 F gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 97.5 231.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -562 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unbounded) s -480 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (expected?) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 136.154 240.045] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 149.016 235.17] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 167.5 231.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s 0 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (punt) s savemat setmatrix userdict /#copies 1 put grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore DyLP-1.10.4/DyLP/doc/Figures/Makefile.am0000644000175200017520000000170411507440660016075 0ustar coincoin# Copyright (C) 2009 Lou Hafer # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id$ # Author: Lou Hafer SFU 2009.04.15 AUTOMAKE_OPTIONS = foreign # Make sure the source for the figures is distributed. EXTRA_DIST = $(dylpdoc_FIGURES) dylpdoc_FIGURES = conmgmtcalls.drw \ conmgmtcalls.epsu \ dual2flow.drw \ dual2flow.epsu \ dualcalls.drw \ dualcalls.epsu \ dualerrorflow.drw \ dualerrorflow.epsu \ dualpivcalls.drw \ dualpivcalls.epsu \ dylpnormalflow.drw \ dylpnormalflow.epsu \ epsupatch.sed \ factorcalls.drw \ factorcalls.epsu \ primal1flow.drw \ primal1flow.epsu \ primal2flow.drw \ primal2flow.epsu \ primalcalls.drw \ primalcalls.epsu \ primalerrorflow.drw \ primalerrorflow.epsu \ primalpivcalls.drw \ primalpivcalls.epsu \ startupflow.drw \ startupflow.epsu \ varmgmtcalls.drw \ varmgmtcalls.epsu DyLP-1.10.4/DyLP/doc/Figures/primal2flow.epsu0000644000175200017520000042131311171477034017201 0ustar coincoin%!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/primal2flow.epsu %%Creator: IslandDraw for lou %%CreationDate: Wed Sep 14 11:16:10 2005 %%Pages: 1 %%BoundingBox: 56 168 567 715 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 639 685 1 2055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000c03 % 01c000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000f83 % 0fc000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000ff3 % 7fc000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 00000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000 % 0000 % 00000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000ff3 % 7fc000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000f83 % 0fc000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000c03 % 01c000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % 800000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000004300000004 % 000018800800000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000008100000004 % 000008800800000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000010100000000 % 000008000400000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000011f3b81b9fc % dd8789b70400000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001000000001311101cc84 % 664848988400000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000012119008484 % 4441c8908400000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001000000001210a008484 % 444648908400000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001000000001230a008c84 % 4448c8908400000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000011d8400f9ce % eee77df9c400000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000010004008000 % 000000000400000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000001000000000801c7e8000 % 000000000800000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001000000000003001c000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000600000000000001 % 000000000040181800600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000200010000020001 % 000000000040080800600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000200010000020000 % 000180000000080800600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001035c238f3c1c6e79cfb % 370e077f3ec78b89c0600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000104be27d8903e3123e41 % 1891023090484ccbe0600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010760241010202122041 % 109103439041c84a00600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c3600000000000000000000000000000000000000000000100e0241010202122041 % 108e014c9046484a00600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c12000000007ffffffffffffffffffffffffffff800000010472265890322123241 % 109001919048c8cb20600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c14000000007ffffffffffffffffffffffffffff80000001079c738f1c1c73b9ce3 % b9df008ef8e76f9dc0600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c0c0000000040000000000000000000000000000800000010000000000000000000 % 001180000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c080000000040000000000000000000000000000800000010000000000000000000 % 003180000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c080000000040000000000000000000000000000800000010000000000000000000 % 001e00000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c300000000040000000000000000000000000000800000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000040000000000000000000000000000800000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000042180001800067b9e0203e0000008800000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000004408000080002331a46011000010880000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000180000000000000 % 0001 % 00003fffffffffffff80004808000080002310842011000010480000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000180000000000000 % 0001 % 00007fffffffffffffc00048fbb80f8e1e21196f2e1121373c4800000000000000000038000000 % 000000700000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0000e0000000000000c000498910189f2121a924311e6318904800000000000000000070000000 % 000000380000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0001c0000000000000600049099010900721ad24211021109048000000000000000000e0000000 % 010000180000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 000380006e1cfdc00070004908a010901920ae24211021109048000000000000000000c0000200 % 0100000c0000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00030000313e48800038004918a011992320c62421182310904800000000000000000180000200 % 0000018e0000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0006000021206c80001c0048ec400ece1df0447773b81db9dc4800000000000000000381c6e79c % fb370e070000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 000e000021203500000c0048004000000000000000000000004800000000000000000703e3123e % 411891038000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 001c0000213236000006004401c7e0000000000000000000008800000000000000000e02021220 % 411091018000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00380000739c120000070040030000000000000000000000000800000000000000000c02021220 % 41108e00c000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 003000000000000000038040000000000000000000000000000800000000000000001803221232 % 41109000e000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00600000000000000001c040000000000000000000006000000800000000000000003801c73b9c % e3b9df007000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00e00000000000000000c040002100000002020000002000000800000000000000007000000000 % 000011803800000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 01c00000000000000000604000210000000202000000200000080000000000000000e000000000 % 000031801800000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0380000000000000000070401e7bce6ec6e7879e07ce23cee0080000000000003600c000000000 % 00001e000c00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 03000000031030000000384021211f3327320233021f2422c00800000000000019018000000000 % 000000000e00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 060000000110100200001c400721102222120221021020e1000800000000000011038000000008 % 030600000700000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0e0000000100100200000c40192110222212022102102323800800000000000011070000000008 % 010200000380000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 1c078f371f31f1e79c340640232119222232022302192464c0080300000000003b8e0000000000 % 010200000180000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 380c5098b11312123e4807401db9ce7773e3839e070e73bee0081f0000000000000c0001dde7d9 % e172380000c0000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 30080390a1121072207403c00000000002000000000000000008ff0000000000001800008a120a % 119a7c0000e0000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 60080c90a1121192200c01c0000000000200000000000000000ffffffffffffffff80000d07208 % 710a40000070000000000000000000000000000000000000000000000000000180000000000000 % 0001 % e00c5190a3123232324400c0000000000700000000000000000ffffffffffffffff00000519209 % 910a40000030000000000000000000000000000000000000000000000000000180000000000000 % 0001 % e0078ef9ddb9d9db9c7800c0000000000000000000000000000bff00000000000038000062320a % 311a64000070000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 6000000000000000000001c000000000000000000000000000087f0000000000001c000021df1d % d9f7380000e0000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 3000000000000000000003c000008000000003000008000000080f0000000000000c0000000000 % 0000000001c0000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 380000000000000000000740000080004000010001080000000800000000000000060000000000 % 000000000180000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 1c0000000000000000000640000000004000010001000000000800000000000000070000000000 % 000000000300000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0e00000004c0181801c00c4001b9bbbcf01ae1387bd8f370000800000000000000038000000000 % 000000000700000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 060000000440080806201c4001cc91664025f17cc509998800080000000000000001c000000000 % 000000000e00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 03000000004008080420384000849a42403b01408109090800080000000000000000c000006000 % 000063801c00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0380f1dfcc478b88e020704000848a424007014081090908000800000000000000006000002000 % 20002c401800000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 01c1088c24484cc9f0406040008c8c4640239164c5091908000800000000000000007000002000 % 200028403000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00e038d0e441c8490080c04000f9c43c703ce3b879dcf39c0008000000000000000038035c270f % 79c3e0407000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0060c853244648490081c040008000000000000000000000000800000000000000001c04be2f98 % a3e62080e000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 003118646448c8c991838040008000000000000000000000000800000000000000000c07602810 % 22042101c000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0038ec23bee76f9ce187004001c000000000000000000000000800000000000000000600e02810 % 220421018000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 001c00000000000000060040000000000000000000000000000800000000000000000704722c98 % a32463030000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000e000000000000000c00400000000000000000000000000008000000000000000003879c770f % 39c3b3070000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0006000000000000001c00400000000000000001000000000008000000000000000001c0000000 % 0000000e0000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0003000000000000003800400000000000000001000000000008000000000000000000c0000000 % 0000001c0000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0003800000000000007000400000dc79f78dd8e3ce7c6800000800000000000000000060000000 % 000000180000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0001c00000000000006000400000e684884665f11f209000000800000000000000000070000000 % 000000300000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000e0000000000000c000400000421c81c445011020e800000800000000000000000038000000 % 000000700000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00007fffffffffffffc0004000004264864445011020180000080000000000000000001fffffff % ffffffe00000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00003fffffffffffff8000400000468c88c4459119208800000800000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000004000007c77c76eeee1ce70f000000800000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000040000040000000000000000000000800000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c0000000000400000400000000000000000000008000000000000000000000006c3 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c0000000000400000e0000000000000000000000800000000000000000000000243 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000cd80000000040000000000000000000000000000800000000000000000000000283 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c640000000040000000000000000000000000000800000000000000000000000183 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c440000000040000000000000000000000000000800000000000000000000000103 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c44000000007ffffffffffffffffffffffffffff800000000000000000000000103 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000cee000000007ffffffffffffffffffffffffffff800000000000000000000000603 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 00c000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 07c000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 3fc000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % fffffffffffffffffffffffffffffffffffffffe00000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % fffffffffffffffffffffffffffffffffffffffe00000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 7fc000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 0fc000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 01c000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % c00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % 800000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000460000000800 % 003001000004000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000820000000800 % 001001000084000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000001020000000000 % 001000000082000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100000013e770373f9bb % 0f13737779e2000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100000016222039908cc % 90939922cc82000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000001423201090888 % 839109348482000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000001421401090888 % 8c9109148482000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000001461401190888 % 919119188c82000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100000013b0801f39ddd % cef9f38878e2000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000001000801000000 % 000100000002000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100000008038fd000000 % 000100000004000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000006003800000 % 000380000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100001800000c0000040 % 000000001006060000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000080008040000040 % 000000001002020000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000080008040000000 % 006000000002020000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000100d709c3de0471e3bcd % c381dfc7f1e2e23880600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000001012f8be62804fa11146 % 24408c221213327c80600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000101d80a0408048071a44 % 2440d0e21072124000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000100380a0408048190a44 % 238053221192124000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000001011c8b262804ca30c44 % 240064621232326480600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000101e71dc3ce0e71d84ee % 77c023b739dbe73880600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 046000000000000080600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 0c6000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 078000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000008000006 % 000008000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000008000202 % 000008000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000202 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000dd9dde782 % e3c3586a0000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000e688b3203 % 342488920000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000428d21202 % 10e748e80000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000428521202 % 1320c8180000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000468623202 % 3464488a0000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100000000007dc21e383 % e3b79cf20000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000400000000 % 000000020000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000400000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000e00000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000c00000000002 % 00c0c000003e3e3f80600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000400800000002 % 004040000011421180600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000400800000000 % 004040000011411040600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010084dc7cf1ee03bf8fe % 3c5c470d0011701200600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001018ce6c5089f0118442 % 42664f92001e1e1e00600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100844284389001a1c42 % 0e42481d0010011200600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000100844284c89000a6442 % 324248030010411040600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000001008c468d189900c8c42 % 46464c912018621080600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000100767c76ecee00476e7 % 3b7ce71e20387c3f80600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000400000000000000 % 000000002000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000400000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000e00000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000030 % 000001800000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000010 % 000000800000080000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000010 % 000000800000080000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000101b8f3edd86803ee1f1 % 09e38f80f3c35e3500600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100c599066490011f313 % 1b17d8818e64884900600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010085090444e80110211 % 0a0410810427487400600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010085090444180110211 % 0a0410810420c80c00600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010085190444890119231 % 1b1651818c64484500600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000101cef38eeef1038e1d8 % ede38ec0f3c78e7900600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000010000000 % 000000000000000100600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000c00000000000 % 000000000080000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000400020000000 % 800000800080000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000400020000000 % 80000080000000c000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100006b8471e786e1cef % e07371ee3f9b870000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001000097c4fb120313e2c % 80f9889f108c488000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000ec0482020212010 % 808108901088488000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100001c0482020212038 % 808108901088470000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100008e44cb12021324c % 80c908991088480000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000f38e71e38739cee % e0739cee39dcef8000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 00000000000008c000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 00000000000018c000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 0000000000000f0000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000010 % 060c00000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000010 % 020400000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 020400000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000003bbcfb3 % c2e470000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000001142414 % 2334f8000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000001a0e410 % e21480000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000a32413 % 221480000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000c46414 % 6234c8000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001000000000000043be3b % b3ee70000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % c00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % 800000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003000000000000860000300 % 000000004000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000001020000100 % 000000004000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000002020000100 % 000000002000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000030000000000023e7701f21 % 1cdc6e3c2000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000002622203163 % 3e6231422000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000002423202121 % 2042210e2000000000003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003000000000002421402121 % 204221322000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000002461402323 % 324221462000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000030000000000023b0801d9d % 9ce773bb2000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000002000800000 % 000000002000000000003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000030000000000010039f8000 % 000000004000000000003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003000000000000006000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000800000 % 000080000000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000008008800000 % 000080080000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000008008000000 % 000000080000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003377ce777371ef1f9ddc0d % d8799b9e7370f371e3803000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000339a1f22f988908888be06 % 64848c48f989098b17c03000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000310a1034810883888d2004 % 441c88488108390a04003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000310a101481088c88852004 % 446488488108c90a04003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000311a1918c9089188863204 % 448c8848c909190b16483000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000031f70e08739ceecfc21c0e % ee77dcee739cef9de3883000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003100000000000000000000 % 000000000000000000083000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003100000000000000000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003380000000000000000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000236000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000212000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000214000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 00000000000000000000300000000000000000020c000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000071ff9e7c3e7 % 1e3cefc7fb80000000003000000000000000000208000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000030000000000f884332010f % b16647e21100000000003000000000000000000208000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000080842120108 % 20426a021900000000003000000000000000000230000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000080842120108 % 20422a020a00000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000030000000000c884232010c % b14633220a00000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000071ce1e70387 % 1e3c11c70400000000003000000000001fffffffffffffc0000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 0000000004000000000030000000000030000000000000e0000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000001c00000000003000000000007000000000000070000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 00000000300000000000300000000000e000000002000038000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff00000000001c000040002000018000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff00000000001800004000000030c000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000006000000000 % 0000000038000000000000000000000301cdcf38fe6e1c0e000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000c000000000 % 000000001c000000000000000000000703e6247c42312207000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000018000000000 % 000000000e000000000000000000000e0204244042212203800000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000030000000000 % 0000000007000000000000000000001c0204244042211c01800000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000060000000001 % 000000000380000000000000000000180324246442212000c00000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000000c0000000021 % 0000000001c00000000000000000003001ce7738e773be00e00000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000180000000020 % 0000000000e0000000000000000000700000000000002300700000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000003000079e6e7b % 37108e000070000000000000000000e00000000000006300380000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000060000c733121 % 18b19f000038000000000000000001c00000000000003c00180000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000c00008212121 % 10909000001c0000000000000000018000000000000000000c0000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000001800008212121 % 10909000000e0000000000000000030000000000000000000e0000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000300000c632121 % 109199000007000000000000000007000000001006060000070000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000060000079e73bb % b9cece00000380000000000000000e000000001002020000038000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000c000000000000 % 000000000001c0000000000001c01c000000000002020000018000000000070180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000018000000000000 % 000000000000e0000000000001f8180001dfcfb1e2e2700000c00000000007e180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000030000000000000 % 00000000000070000000000001ff3000008c24121332f80000e00000000007fd80000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000060000000000000 % 0000000000003ffffffffffffffff00000d0e41072128000007fffffffffffff80000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000070000000000000 % 0000000000003ffffffffffffffff0000053241192128000007fffffffffffff80000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000038000000080000 % 20000700000070000000000001fe3800006464123232c80000e00000000007f980000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000001c000000080004 % 200018800000e0000000000001f01c000023be39dbe7700001c00000000007c180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000e000000000004 % 000030800001c0000000000001800c000000000000000000038000000000060180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000700001b9bbbcf % 6dc1c08000038360000000000000060000000000000000000306c0000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000380001cc91664 % 262221000007012000000000000007000000000000000000060320000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000001c0000849a424 % 24222200000e0140000000000000038000000000000000000e0220000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000e0000848a424 % 2421c200001c00c000000000000001c00000c0000000c3801c0220000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000700008c8c464 % 242206000038008000000000000000c00000400020004c40380770000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000038000f9c43c7 % 7e73e6000070008000000000000000600000400020004840300000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000000000001c0008000000 % 0002300000e003000000000000000070069c471e79c7c040600000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000000000000e0008000000 % 0006300001c000000000000000000038093e4fb123ec4080e00000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000007001c000000 % 0003c00003800000000000000000001c0ea0482022084101c00000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000038000000000 % 0000000007000000000000000000000c01a0482022084103800000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000001c000000000 % 000000000e000000000000000000000608b24cb12328c303000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000000e000000000 % 000000001c00000000000000000000070f1ce71e39c76306000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000007000000000 % 00000000380000000000000000000003800000000000000e000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000003fffffffff % fffffffff00000000000000000000001c00000000000001c000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000007000000000 % 00000000380000000000000000000000c000000000000038000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000e000000000 % 000000001c00000000000000000000006000000000000030000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000001c000000000 % 000000000e00000000000000000000007000000000000060000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000038000000000 % 000000000700000000000000000000003fffffffffffffe0000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000070000000000 % 000000000380000000000000000000001fffffffffffffc0000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000000e0000000000 % 0000000001c0000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000001c0000000000 % 0000000000e0000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000380000000000 % 000000000070000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000700000000000 % 000001818038000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000e00000000000 % 00000080801c000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000001c00000000000 % 00000080800e000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000003884dcf9c78f3 % bf1f78b88e07000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000718c6243ec599 % 1f8884cc9f03800000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000e084424208109 % a8081c849001c00000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000001c084424208108 % a80864849000e00000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000003808c42432c518 % cc888c8c9900700000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000070076e7e1c78f0 % 471c76f9ce003ffffffffffffffffff00000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000060000000000000 % 0000000000003ffffffffffffffffff00000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000030000000000000 % 000000000000700000000000000000300000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000018000000000000 % 000000000000e00000000000000000300000000000000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000c000000000000 % 000000000001c00000000000000000300000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000006000000000000 % 00000000000386c000000000000000300000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000003000000000000 % 000e00000007024000000000000000300000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000001800000000000 % 00310000000e028000000000000000300000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000c00000000000 % 00210000001c018000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000600000071ff9 % e7c100000038010000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000003000000f8843 % 320200000070010000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000180000080842 % 1204000000e0060000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000000c0000080842 % 1204000001c0000000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000000600000c8842 % 320c00000380000000000000000000300000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000030000071ce1 % e70c00000700000000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000018000000000 % 000000000e00000000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000c000000000 % 000000001c00000000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000006000000000 % 000000003800000000000000000001fe0000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000003fffffffff % fffffffff000000000000000000001fe0000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000001fffffffff % ffffffffe000000000000000000001fc0000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000fc0000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000fc0000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000f80000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 1b0000000000000000000000000000780000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 0c8000000000000000000000000000780000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 088000000000000000000000000000700000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 088000000000000000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 1dc000000000000000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000f03 % 000000000000000000000000000008000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000fe3 % 000000000000000000000000000008000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000fff % 00000000000000000000000001f71e42fb70000000000000000000000000000180000000000000 % 0000 % 00000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % 000000000000000000000000008f88c64188000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000fff % 000000000000000000000000008808424108000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000fe3 % 000000000000000000000000008808424108000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000f03 % 000000000000000000000000008c88464108000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000803 % 00000000000000000000000001c70e3be39c000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000e3ff3cf80000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000007 % 000000000000000000000000001f10866400000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000001010842400000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000001010842400000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000001910846400000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000e39c3ce00000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000040000000002 % 00000c400080000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000080000000042 % 000004480080000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000100000000040 % 000004080040000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000100000001373ee1e6ef6 % 6ec3c4deee40000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000001000000013991f337342 % 332424484440000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000110910212142 % 2220e4486440000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000110910212142 % 222324482840000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000111919232342 % 222464482840000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000001000000011f38e1e3e77 % 7773beee1040000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000110000002000 % 000000001040000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000090000002000 % 000000007080000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000038000007000 % 00000000c000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000100001c00000000c0000 % 100000080000c00000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000200008000040000 % 100000180000400000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000200008000040000 % 000000080000560000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000001000073c3de79f05c786 % b0d0078b8e3c480000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000242628cc8066849 % 11200c4c5f62500000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000000000000000000000000000000000000000000000000001000020e4088480421ce % 91d008085040780000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000232408848042641 % 903008085040480000600000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000100002466288c80468c8 % 91140c4859624c0000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000001000073b3ce79c07c76f % 39e4079cee3cee0000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000400000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % c00000001e00000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000001 % 200000002200000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000001 % 200000002000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000f1e7885f3c79dc0 % ce0f1e6e767f760000600000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000100010b1c58c842c4881 % 4418b3312221990000600000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000100003a0808480e80c82 % 241021212221110000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000ca0808483280502 % 181021212221110000600000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000100011b1c48c846c4503 % 1c18a3212221110000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000ede7877c3b78201 % e60f1e73f773bb8000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000200 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000e00 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000001800 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000003800004c04c80 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000004000004404488 % 000020020000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000004000000400408 % 000020020000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000000000000000000000000000000000000000000000000001000000e70f0dc5cc59e % ee06f9e7908d000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000004f90924664488 % 440922123192000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000000000000000000000000000000000100000048039d4424488 % 640ea072109d000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000000000000000000000000000000000000000000000000001000000480c834424488 % 2801a1921083000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000004c91914464488 % 2808a2321191000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000000000000000000000000000000000000000000000000001000000e70edee7cefce % 100f39db8ede000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 100000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 700000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % c00000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000200000000000000000000000000000180000000000000 % 0001 % 00000000000000000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000200000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000038000000 % 0000007000000000000000000000007dc7a13fb800000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000070000000 % 00000038000000000000000000000023e26310c400000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000000000000000e0000000 % 0000001c0000000000000000000000220221108400000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000000000000000000000000000000000000000000001c0000000 % 0000000e0000000000000000000000220221108400000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000380000000 % 000000070000000000000000000000232223108400000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000700000040 % 00018003800000000000000000000071c39db9ce00000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000e00000040 % 00008001c000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000001c00000000 % 00008000e000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000000000000038001bbecd % d8f080007000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000000000000070001cd046 % 650880003800000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000e000085044 % 443880001c00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000001c000085044 % 44c880000e00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000003800008d044 % 451880000700000000000000001800000000080000600000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000000000000700000fb8ee % eeedc0000380000000000700000800020000080000200000000000000000000180000000000000 % 0001 % 0000000000000000000000000000000000000000000000000000000000000000000e0000080000 % 0000000001c00000000007e0000800020000000000200000000000000000000180000000000000 % 0001 % 0000000000000000000000000000000000000000000000000000000000000000001c0000080000 % 0000000000e00000000007fc0008f0d786e7db761e200000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000ffffffffffffffff800001c0000 % 00000000007fffffffffffff800999220732099921200000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000ffffffffffffffff00000000000 % 00000000007fffffffffffff800909d20212091107200000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000800000000000000180000000000 % 0000000000e00000000007fc000908320212091119200000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000008000000000000000c0003800004 % c0c00e0001c00000000007e0000919120232091123200000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000800000000000000060004000004 % 404031000380000000000700001cf1e383e71fbb9df00000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000080000000000001b030004000000 % 404021000706c00000000000000000000200000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000080000000000000901800e70f0dc % 5c4701000e03200000000000000000000200000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000080000000000000a00c004f90924 % 664f82001c02200000000000000000000700000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000007f800000000000060060048039d4 % 424804003802200000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000007f0000000000000400300480c834 % 424804007007700000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000007f00000000000004001804c91914 % 464c8c00e0000000000000000000700000980b1000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000007f00000000000018000c0e70edee % 7ce70c01c000000000000000000080000088091100000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000003e00000000000000000600000000 % 000000038000000000000000000080000008010100000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000003e00000000000000000300000000 % 0000000700000000000000000001ce3c1b8b9933ddc00000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000003e00000000000000000180000000 % 0000000e000000000000000000009f42248cc91108800000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000001c000000000000000000c0000000 % 0000001c00000000000000000000900e3a8849110c800000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000001c00000000000000000060000000 % 000000380000000000000000000090320688491105000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000001c00000000000000000030000000 % 000000700000000000000000000099462288c91105000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000007fffffffffffff0000000000001fffffff % ffffffe000000000000000000001ce3b3dcf9fb9c2000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000ffffffffffffff8000000000000fffffff % ffffffc00000000000000000000000000000000002000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000001c0000000000001c0000000000000000000 % 00000000000000000000000000000000000000000e000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000380000000000000e0000000000000000000 % 000000000000000000000000000000000000000018000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000070000000000000070000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000e0000000000000038000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000001c000030000300001c000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000038000010000100000e000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000700000100001000007000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000e00001f108f1000003800000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000001c00003131909000001c00000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000003800002110839000000e00000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000070000021108c9000000700000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000e000002311919000000380000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000001c000001d8ecef8000001c0000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000380000000000000000000e0000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000070000000000000000000070000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000e0000000000000000000038000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000fffffffffc000000000000000000001ffffffffffffffff % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000c00000000e0000000000000000000038000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000c0000000070000e00001306003800070000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000c000000003800100000110200c4000e0000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000c000000d81c0010000001020084001c0000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000c000000480e0039c786b172380400381b00000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000c00000050070013e849119a7c0800700c80000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000007f8000003003801201ce910a401000e0088000000000001f % e00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000007f8000002001c0120641910a401001c0088000000000001f % e00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000007f0000002000e01328c8911a643003801dc000000000001f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000003f000000c0007039c76f39f738300700000000000000000f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000003f000000000038000000000000000e00000000000000000f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000003e00000000001c000000000000001c00000000000000000f % 800000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000001e00000000000e0000000000000038000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000001e0000000000070000000000000070000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000001c00000000000380000000000000e0000000000000000007 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000000c000000000001c0000000000001c0000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000c000000000000ffffffffffffff800000000001ffffffff % fffffffe0000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000080000000000007fffffffffffff000000000003ffffffff % ffffffff0000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000700000000 % 000000038000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000e00000000 % 00000001c000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000001c00000000 % 00000000e000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000003800000000 % 000000007000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000000000000070000c0000 % 0000c0033800000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000e000040000 % 000040011c00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000001c000040000 % 000040010e00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000003884dc5c788 % 5b87ce1f0700000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000020000000000000000000000000000000000000718c6266cd8 % cc4c5f310380000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000020000000000000000000000000000000000000e0844242848 % 4848502101c0000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000007dc790bedc0000000000000000000000000000001c0844242848 % 4848502100e0000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000023e23190620000000000000000000000000000003808c42468c8 % c848d9230070000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000220210904200000000000000000000000000000070076e77c787 % 7ce76e1d8038000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000002202109042000000000000000000000000000000e00000000000 % 00000000001c000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000002322119042000000000000000000000000000001c00000000000 % 00000000000e000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000071c38ef8e7000000000000000000000000000003800000000000 % 000000000007000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000000000000000000000000000000003ffffffff000000000000 % 000000000003ffffffffffffffc000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000000000000000000000000000000003ffffffff000000000000 % 000000000003ffffffffffffffc000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000300000003800000000000 % 00000000000700000000000000c000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000300000001c00000000000 % 000030e0000e00000000000000c000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000300000000e00000000000 % 08001310001c00000000000000c000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000300000360700000000000 % 08001210003836000000000000c000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000200000c00000000000000000000300000120380071df71c7 % 9ee1f010007019000000000000c000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000042000004000000000000000000003000001401c00f85b9bec % 49f3102000e011000000000007f800000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000040000004000000000000000000003000000c00e0080210a08 % 0902104001c011000000000007f800000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000003cdcf66ec78400000000000000000000300000080070080710a08 % 0902104003803b800000000007f800000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000066e642332844000000000000000000003000000800380c8991b2c % 499230c0070000000000000003f800000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000004242422221c40000000000000000000030000030001c071ddf1c7 % 8ee1d8c00e0000000000000003f000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000004242422226440000000000000000000030000000000e000010000 % 000000001c0000000000000003f000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000004646422228c400000000000000000000300000000007000010000 % 00000000380000000000000001f000000000000000000000000000000000000180000000000000 % 0001 % 00000000000000000000000003c7c7777776e00000000000000000000300000000003800038000 % 00000000700000000000000001e000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000400000000000000000000000000000300000000001c00000000 % 00000000e00000000000000001e000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000400000000000000000000000000001fe0000000000e00000000 % 00000001c00000000000000000e000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000e00000000000000000000000000001fe0000000000700000000 % 00000003800000000000000000c000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000001fe00000000003ffffffff % ffffffff000000000007fffffffffffff8000000000000ffffffffffffffffffffffffffffffff % ffff % 000000000000000000000000000000000000000000000000000000000fe0000000000000000000 % 0000000000000000000e0000000000001c000000000000c0000000000000000000000000000000 % 0003 % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000001c0000000000000e000000000000c0000000000000000000000000000000 % 0003 % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000003800000000000007000000000000c0000000000000000000000000000000 % 0002 % 0000000000000000000000000000000000000000000000000000000007c0000000000000000000 % 0000000000000000007000000000000003800000000000c0000000000000000000000000000000 % 0002 % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 000000000000000000e000000000000001c00000000000c0000000000000000000000000000000 % 0002 % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 000000000000000001c000000000000000e00000000000c0000000010040000000004000000000 % 0002 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000038000000000000000700000000000c00000002100c0400000004000200000 % 0002 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000070000000000000000380000000000c0000000200340400000000000200000 % 0002 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000e00000000000000001c0000000000c00000007b1c5cf38dc0dcddde780000 % 0002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000001c00000000000000000e0000000000c000000021226247c620e648b3200000 % 0003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000380000000000000000070000000000c0000000212242440420424d21200000 % 0003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000700000000000000000038000000000c0000000211c42440420424521200000 % 0003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000e0000000000003800001c000000000c0000000212042464420464623200000 % 0002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001c000000000008c400000e000000200c00000003bbee7738e707ce21e380000 % 0002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000038000000000008840000070000003c0c0000000002300000000400000000000 % 0002 % 000000000000000000000000000000000000000000000000000000008000000000000000000000 % 0000000000000007000001b909b9e040000038000003f8c0000000006300000000400000000000 % 0002 % 000000000000000000000000000000000000000000000000000000008000000000000000000000 % 000000000000000e000001cf18c4808000001c000003ffc0000000003c00000000e00000000000 % 0002 % 00000000000000000000000000000000000000000000000000001f39e42fb70000000000000000 % 0000007ffffffffc000000850884810000000fffffffffc0000000000000000000000000000000 % 0002 % 0000000000000000000000000000000000000000000000000000087c8c64188000000000000000 % 0000004000000006000000850884810000001c000003ffc0000000000000000000000000000000 % 0002 % 000000000000000000000000000000000000000000000000000008408424108000000000000000 % 00000040000000030000008d18848300000038000003f8c0000600001000000000000000000000 % 0002 % 000000000000000000000000000000000000000000000000000008408424108000000000000000 % 0000004000000001800000f8edcee300000070000003c0c0000200011000000000000000008000 % 0002 % 000000000000000000000000000000000000000000000000000008648464108000000000000000 % 00000040000006c0c0000080000000000000e0d8000000c0000200010000000000000000008000 % 0002 % 00000000000000000000000000000000000000000000000000001c38e3be39c000000000000000 % 000000400000024060000080000000000001c064000000c035c238f3f1e6e06e3cf9e6ec39e71f % 3402 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000004000000280300001c00000000000038044000000c04be27d8913331073424213327c8f88 % 4802 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000007fc00000180180000000000000000070044000000c076024101121210210e407222408808 % 7402 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000003f8000001000c00000000000000000e00ee000000c00e0241011212102132419222408808 % 0c02 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000003f8000001000600000000000000001c0000000000c0472265891232102346423222648c88 % 4402 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000003f800000600030000000000000000380000000000c079c738f1f9e7383e3be1df7738e71c % 7802 % 00000000000000000000000000000000000000000000000000000c00000000c003000000000000 % 000001f000000000018000000000000000700000000000c0000000000000002000000000000000 % 0002 % 000000000000000000000000000000000000000000000000000004000000004001000000000000 % 000001f00000000000c000000000000000e00000000000c0000000000000002000000000000000 % 0002 % 000000000000000000000000000000000000000000000000000004000000004001000000000000 % 000001f000000000006000000000000001c00000000000c0000000000000007000000000000000 % 0002 % 000000000000000000000000000000000000000000000000042dc5c7884dc7c71f000000000000 % 000000e000000000003000000000000003800000000000c0000000000000000000000000000000 % 0002 % 0000000000000000000000000000000000000000000000000c66266cd8c62c4fb1000000000000 % 000000e000000000001800000000000007000000000000c0000000000000000000000000000000 % 0002 % 000000000000000000000000000000000000000000000000042424284844284821000000000000 % 000000e000000000000c0000000000000e000000000000c0000000000000000000000000000000 % 0002 % 000000000000000000000000000000000000000000000000042424284844284821000000000000 % 00000040000000000007fffffffffffffc000000000000ffffffffffffffffffffffffffffffff % fffe % 00000000000000000000000000000000000000000000000004642468c8c428cca3000000000000 % 00000040000000000003fffffffffffff8000000000000ffffffffffffffffffffffffffffffff % fffe % 00000000000000000000000000000000000000000000000003be77c7876e77671d800000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000020000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000020000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 07ce7909fdc0000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 021f23188620000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 021021088420000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 021021088420000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 021921188420000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 070e38edce70000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000800000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000800000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0037109b9e00000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0039b18c4800000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 001090884800000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 001090884800000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 001191884800000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 001f0edcee00000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 003800000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n 137.5 200 m 136.49 196.97 l 138.51 196.97 l cl 0 0 0 F n 120 195 m 137.5 195 l 137.5 196.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 113.367] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -598 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_duenna\)) s -1292 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (preventative maintenance,) s -678 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error recovery) s savemat setmatrix n 83.75 110 m 131.25 110 l 131.25 122.5 l 83.75 122.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 76.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -782 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_primalpivot\)) s -1100 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select leaving variable;) s -556 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivot basis;) s -1074 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (update variables, PSE) s -1082 695 m 927 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (norms, reduced costs;) s -954 927 m 1159 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select next entering) s -386 1159 m 1391 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s savemat setmatrix n 86.25 72.5 m 128.75 72.5 l 128.75 102.5 l 86.25 102.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 44.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -640 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_primalin\)) s -1128 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select entering variable) s savemat setmatrix n 86.25 40 m 128.75 40 l 128.75 50 l 86.25 50 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 156.338] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -708 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(preoptimality\)) s -914 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (factor basis, check) s -956 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (accuracy & confirm) s -806 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasibility status) s savemat setmatrix n 86.25 152.5 m 128.75 152.5 l 128.75 170 l 86.25 170 l 86.25 152.5 l cl gsave 0 0 0 0.176 0 B grestore n 107.5 40 m 106.49 36.972 l 108.51 36.972 l cl 0 0 0 F n 107.5 30 m 107.5 36.972 l gsave 0 0 0 0.176 0 B grestore n 107.5 72.5 m 106.49 69.472 l 108.51 69.472 l cl 0 0 0 F n 107.5 62.5 m 107.5 69.472 l gsave 0 0 0 0.176 0 B grestore n 107.5 110 m 106.49 106.97 l 108.51 106.97 l cl 0 0 0 F n 107.5 102.5 m 107.5 106.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 137.6] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -688 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unrecoverable) s -294 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error?) s savemat setmatrix n 107.5 132.5 m 97.5 132.5 l 92.5 137.5 l 97.5 142.5 l 117.5 142.5 l 122.5 137.5 l 117.5 132.5 l 107.5 132.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.782 53.367] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -402 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (entering) s -386 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s -444 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selected?) s savemat setmatrix n 107.5 50 m 100 50 l 95 56.25 l 100 62.5 l 115 62.5 l 120 56.25 l 115 50 l 107.5 50 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 174.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible?) s savemat setmatrix n 107.5 170 m 100 170 l 95 175 l 100 180 l 115 180 l 120 175 l 115 170 l 107.5 170 l cl gsave 0 0 0 0.176 0 B grestore n 107.5 190 m 98.75 190 l 93.75 195 l 98.75 200 l 116.25 200 l 121.25 195 l 116.25 190 l 107.5 190 l cl 1 1 1 F gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 194.156] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -562 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unbounded) s -480 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (expected?) s savemat setmatrix n 107.5 152.5 m 106.49 149.47 l 108.51 149.47 l cl 0 0 0 F n 107.5 142.5 m 107.5 149.47 l gsave 0 0 0 0.176 0 B grestore n 140 127.5 m 136.97 128.51 l 136.97 126.49 l cl 0 0 0 F n 122.5 127.5 m 136.97 127.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 142.5 148.882] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -240 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 85 206.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -562 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unbounded) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 180 204.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -614 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (tighten pivot) s -1014 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selection parameters) s savemat setmatrix n 160 200 m 200 200 l 200 210 l 160 210 l cl gsave 0 0 0 0.176 0 B grestore n 85 202.5 m 83.991 199.47 l 86.009 199.47 l cl 0 0 0 F n 93.75 195 m 85 195 l 85 199.47 l gsave 0 0 0 0.176 0 B grestore n 107.5 67.5 m 110.53 66.491 l 110.53 68.509 l cl 0 0 0 F n 152.5 121.25 m 152.5 67.5 l 110.53 67.5 l gsave 0 0 0 0.176 0 B grestore n 142.5 145 m 141.49 141.97 l 143.51 141.97 l cl 0 0 0 F n 122.5 137.5 m 142.5 137.5 l 142.5 141.97 l gsave 0 0 0 0.176 0 B grestore n 107.5 147.5 m 104.47 148.51 l 104.47 146.49 l cl 0 0 0 F n 32.5 62.5 m 32.5 147.5 l 104.47 147.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 106.496 65.17] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.5556 55.4322] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -105 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 122.881 140.207] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.169 197.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 122.001 197.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 165.751 130.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 153.73 120.172] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 123.251 130.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 108.73 145.31] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n 77.5 180 m 76.491 176.97 l 78.509 176.97 l cl 0 0 0 F n 95 175 m 77.5 175 l 77.5 176.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 94.419 177.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 120.751 177.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 77.5 184.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -218 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible?) s savemat setmatrix n 77.5 180 m 70 180 l 65 185 l 70 190 l 85 190 l 90 185 l 85 180 l 77.5 180 l cl gsave 0 0 0 0.176 0 B grestore n 55 190 m 53.991 186.97 l 56.009 186.97 l cl 0 0 0 F n 65 185 m 55 185 l 55 186.97 l gsave 0 0 0 0.176 0 B grestore n 107.5 190 m 106.49 186.97 l 108.51 186.97 l cl 0 0 0 F n 90 185 m 107.5 185 l 107.5 186.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 64.419 187.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 90.751 187.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 147.5 172.117] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -526 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (lost primal) s -468 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasibility) s savemat setmatrix n 135 175 m 131.97 176.01 l 131.97 173.99 l cl 0 0 0 F n 120 175 m 131.97 175 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 55 195] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -368 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (optimal) s savemat setmatrix n 107.5 35 m 110.53 33.991 l 110.53 36.009 l cl 0 0 0 F n 180 200 m 180 35 l 110.53 35 l gsave 0 0 0 0.176 0 B grestore n 180 127.5 m 176.97 128.51 l 176.97 126.49 l cl 0 0 0 F n 165 127.5 m 176.97 127.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 152.782 124.617] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -402 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (entering) s -386 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s -444 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selected?) s savemat setmatrix n 152.5 121.25 m 145 121.25 l 140 127.5 l 145 133.75 l 160 133.75 l 165 127.5 l 160 121.25 l 152.5 121.25 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 126.466] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -428 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (continue) s -442 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivoting?) s savemat setmatrix n 107.5 122.5 m 97.5 122.5 l 92.5 127.5 l 97.5 132.5 l 117.5 132.5 l 122.5 127.5 l 117.5 122.5 l 107.5 122.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 61.25 51.9415] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -892 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_dealWithPunt\)) s -778 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (attempt to relax) s -698 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivot selection) s -554 431 m 647 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (parameters) s savemat setmatrix n 45 47.704 m 77.5 47.704 l 77.5 65.204 l 45 65.204 l cl gsave 0 0 0 0.176 0 B grestore n 32.5 50.204 m 25 50.204 l 20 56.454 l 25 62.704 l 40 62.704 l 45 56.454 l 40 50.204 l 32.5 50.204 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 32.742 52.9995] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -196 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (new) s -530 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (candidates) s -484 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (available?) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 33.57 65.6765] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 33.876 48.7455] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n 77.5 56.25 m 80.528 55.241 l 80.528 57.259 l cl 0 0 0 F n 95 56.25 m 80.528 56.25 l gsave 0 0 0 0.176 0 B grestore n 107.5 35 m 104.47 36.009 l 104.47 33.991 l cl 0 0 0 F n 32.5 50 m 32.5 35 l 104.47 35 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 137.5 206.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -288 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (punt?) s savemat setmatrix n 137.5 200 m 130 200 l 125 205 l 130 210 l 145 210 l 150 205 l 145 200 l 137.5 200 l cl gsave 0 0 0 0.176 0 B grestore n 160 205 m 156.97 206.01 l 156.97 203.99 l cl 0 0 0 F n 150 205 m 156.97 205 l gsave 0 0 0 0.176 0 B grestore n 115 210 m 113.99 206.97 l 116.01 206.97 l cl 0 0 0 F n 125 205 m 115 205 l 115 206.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 115 215] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -234 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (punt) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 124.419 207.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 150.751 207.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix userdict /#copies 1 put grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore DyLP-1.10.4/DyLP/doc/Figures/dual2flow.epsu0000644000175200017520000041600511171477034016644 0ustar coincoin%!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/dual2flow.epsu %%Creator: IslandDraw for lou %%CreationDate: Wed Sep 14 10:39:51 2005 %%Pages: 1 %%BoundingBox: 42 124 511 715 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 588 740 1 1480 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000e03 % 00c000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000fc3 % 07c000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000ffb % 3fc000000000000000000000000000000000000000000000000000000000000000000e % 000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00d % 000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00e % 000000000004000000000000000000000000000000000000000000000000000000000000000ffb % 3fc000000000000000000000000000000000000000000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000000000000000000000fc3 % 07c000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000e03 % 00c000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000000000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000000000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % e00000000000000000000000000000000000000000000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % c00000000000000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 800000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000860000600 % 006000002000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000001020000200 % 002000042000000000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000002020000200 % 002000041000000000200000000000000000000000000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000180000000023eee03e21 % 1e23c42f1000000000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000002624406263 % 21266c641000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000002426404221 % 072424241000000000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000002422804221 % 192424241000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000002462804623 % 232464641000000000200000000000000000000000000000000000000000000000c002 % 0000000000040000000000000000000000000000000000000000000000180000000023b1003b1d % 9df3c3b71000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000002001000000 % 000000001000000000200000000000000000000000000000000000000000000000c002 % 0000000000040000000000000000000000000000000000000000000000180000000010071f8000 % 000000002000000000200000000000000000000000000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000001800000000000c000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000060000030000010 % 000000000401818000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000020001010000010 % 000000000400808000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000020001010000000 % 001800000000808000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018035c238f3c11c3cef3 % 70e07779fc78b88e00200000000000000000000000000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000001804be27d89013e42451 % 891022848484cc9f00200000000000000000000000000000000000000000000000c000 % 00000000000436000000000000000000000000000000000000000000001807602410101200e691 % 0910341c841c849000200000000000000000000000000000000000000000000000c002 % 00000000000412000000007ffffffffffffffffffffffffffffc0000001800e024101012032291 % 08e014648464849000200000000000000000000000000000000000000000000000c000 % 00000000000414000000007ffffffffffffffffffffffffffffc00000018047226589013246311 % 0900188c848c8c9900200000000000000000000000000000000000000000000000c002 % 0000000000040c0000000060000000000000000000000000000c00000018079c738f1c39c3b13b % 9df00877ce76f9ce00200000000000000000000000000000000000000000000000c000 % 000000000004080000000060000000000000000000000000000c00000018000000000000000000 % 011800000000000000200000000000000000000000000000000000000000000000c002 % 000000000004080000000060000000000000000000000000000c00000018000000000000000000 % 031800000000000000200000000000000000000000000000000000000000000000c000 % 000000000004300000000060000000000000000000000000000c00000018000000000000000000 % 01e000000000000000200000000000000000000000000000000000000000000000c00a % 000000000004000000000060000000000000000000000000000c00000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000062180000c00067b9e0201f0000008c00000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c00a % 00000000000400000000006408000040002331a260088000108c00000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c00a % 00003fffffffffffff800068080000400023108220088000104c0000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000000c00a % 00007fffffffffffffc00068f9dc07ce1e211967ae08a1373c4c0000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000000c000 % 0000e0000000000000c0006988880c5f2121a922310f6318904c00000000000000000038000000 % 000000300000000000000000000000000000000000000000000000000000000000c00a % 0000c000000000000060006908c808500721ad2221082110904c00000000000000000070000000 % 000000380000000000000000000000000000000000000000000000000000000000c00a % 000180000000000000700069085008501920ae2221082110904c00000000000000000060600000 % 2000001c0000000000000000000000000000000000000000000000000000000000c00f % 00038000371cfdc000380069185008d92320c622210c2310904c000000000000000000c0200000 % 2000000e0000000000000000000000000000000000000000000000000000000000c00e % 0007000018be4880001c0068ec20076e1df04473f39c1db9dc4c000000000000000001c0200000 % 000030060000000000000000000000000000000000000000000000000000000000c00e % 000e000010a06c80000c0068002000000000000000000000004c0000000000000000038023879d % e6e1c0030000000000000000000000000000000000000000000000000000000000c00e % 000c000010a035000006006400e7e0000000000000000000008c0000000000000000070027c848 % a31220038000000000000000000000000000000000000000000000000000000000c00e % 0018000010b2360000070060018000000000000000000000000c000000000000000006002401cd % 22122001c000000000000000000000000000000000000000000000000000000000c00e % 0038000039dc120000038060000000000000000000000000000c00000000000000000c00240645 % 2211c000e000000000000000000000000000000000000000000000000000000000c00e % 00700000000000000001c060000000000000000000006000000c00000000000000001c002648c6 % 221200006000000000000000000000000000000000000000000000000000000000c00e % 00e00000000000000000c060002100000002010000002000000c00000000000000003800738762 % 773be0003000000000000000000000000000000000000000000000000000000000c00e % 00c000000000000000006060002100000002010000002000000c0000000000006c007000000000 % 000230003800000000000000000000000000000000000000000000000000000000c00e % 0180000000000000000070601e7bce6ec6e783de07ce23cee00c00000000000032006000000000 % 000630001c00000000000000000000000000000000000000000000000000000000c00e % 03800000019030000000386021211f3327320133021f2422c00c0000000000002200c000000000 % 0003c0000e00000000000000000000000000000000000000000000000000000000c000 % 070000000090100200001c600721102222120121021020e1000c0000000000002201c000000000 % 000000000600000000000000000000000000000000000000000000000000000000c000 % 0e0000000080100200000c60192110222212012102102323800c00000000000077038000000010 % 060600000300000000000000000000000000000000000000000000000000000000c000 % 0c03cf370fb1f1e79c340660232119222232012302192464c00c00000000000000070000000010 % 020200000380000000000000000000000000000000000000000000000000000000c008 % 18063098989312123e4807601db9ce7773e381de070e73bee00c03000000000000060000000000 % 0202000001c0000000000000000000000000000000000000000000000000000000c000 % 3804039090921072207403e0000000000200000000000000000c1f0000000000000c0001dfcfb1 % e2e2700000e0000000000000000000000000000000000000000000000000000000c000 % 70040c9090921192200c01e0000000000200000000000000000cff0000000000001c00008c2412 % 1332f8000060000000000000000000000000000000000000000000000000000000c000 % e006319091923232324400e0000000000700000000000000000ffffffffffffffff80000d0e410 % 721280000030000000000000000000000000000000000000000000000000000000c001 % e003cef9cef9d9db9c7800e0000000000000000000000000000ffffffffffffffff00000532411 % 921280000030000000000000000000000000000000000000000000000000000000c00c % 6000000000000000000001e0000000000000000000000000000dff000000000000180000646412 % 3232c8000070000000000000000000000000000000000000000000000000000000c000 % 3000000000000000000001e0000080000000030000080000000c3f0000000000001c000023be39 % dbe7700000e0000000000000000000000000000000000000000000000000000000c000 % 380000000000000000000360000080004000010000880000000c0f0000000000000e0000000000 % 0000000000c0000000000000000000000000000000000000000000000000000000c00d % 1c0000000000000000000760000000004000010000800000000c00000000000000070000000000 % 000000000180000000000000000000000000000000000000000000000000000000c00e % 0e0000000000000000000e6001b99dfcf01ae11c79f8f370000c00000000000000030000000000 % 000000000380000000000000000000000000000000000000000000000000000000c00d % 0600000002c0181801c01c6001cc88e64025f13ec4899988000c00000000000000018000000000 % 000000000700000000000000000000000000000000000000000000000000000000c00e % 03000000024008080620186000848d42403b012080890908000c0000000000000001c000000000 % 000000000e00000000000000000000000000000000000000000000000000000000c00d % 038000000040080804203060008485424007012080890908000c0000000000000000e00000c000 % 0000c3800c00000000000000000000000000000000000000000000000000000000c00e % 01c079dfc6478b88e0207060008c864640239132c4891908000c00000000000000007000004000 % 20004c401800000000000000000000000000000000000000000000000000000000c00d % 00e0848c22484cc9f040e06000f9c23c703ce39c78fcf39c000c00000000000000003000004000 % 200048403800000000000000000000000000000000000000000000000000000000c00e % 00601cd0e241c8490081c060008000000000000000000000000c00000000000000001806b8471e % 7b87c0407000000000000000000000000000000000000000000000000000000000c00d % 003064532246484900818060008000000000000000000000000c00000000000000001c097c4fb1 % 27cc4080e000000000000000000000000000000000000000000000000000000000c00e % 00388c646248c8c99183006001c000000000000000000000000c00000000000000000e0ec04820 % 24084100c000000000000000000000000000000000000000000000000000000000c00d % 001c7623b7e76f9ce1870060000000000000000000000000000c00000000000000000701c04820 % 240841018000000000000000000000000000000000000000000000000000000000c00e % 000e000000000000000e0060000000000000000000000000000c00000000000000000308e44cb1 % 2648c3038000000000000000000000000000000000000000000000000000000000c00d % 0006000000000000001c0060000000000000000100000000000c0000000000000000018f38e71e % 3b8763070000000000000000000000000000000000000000000000000000000000c00e % 000300000000000000180060000000000000000100000000000c000000000000000001c0000000 % 0000000e0000000000000000000000000000000000000000000000000000000000c00d % 0003800000000000003000600000dc79f3cdd873ce7c6800000c000000000000000000e0000000 % 0000000c0000000000000000000000000000000000000000000000000000000000c00e % 0001c00000000000007000600000e684842664f91f209000000c00000000000000000070000000 % 000000180000000000000000000000000000000000000000000000000000000000c00d % 0000e0000000000000e000600000421c80e444811020e800000c00000000000000000030000000 % 000000380000000000000000000000000000000000000000000000000000000000c00e % 000060000000000001c00060000042648324448110201800000c00000000000000000018000000 % 000000700000000000000000000000000000000000000000000000000000000000c00d % 00003fffffffffffff8000600000468c846444c919208800000c0000000000000000001fffffff % ffffffe00000000000000000000000000000000000000000000000000000000000c00e % 00000000000400000000006000007c77c3beee71ce70f000000c00000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000004000000000060000040000000000000000000000c00000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000060000040000000000000000000000c00000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 0000000000040000000000600000e0000000000000000000000c00000000000000000000000003 % 0d8000000000000000000000000000000000000000000000000000000000000000c00e % 0000000000046c0000000060000000000000000000000000000c00000000000000000000000003 % 048000000000000000000000000000000000000000000000000000000000000000c00d % 000000000004320000000060000000000000000000000000000c00000000000000000000000003 % 050000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004220000000060000000000000000000000000000c00000000000000000000000003 % 030000000000000000000000000000000000000000000000000000000000000000c00d % 000000000004220000000060000000000000000000000000000c00000000000000000000000003 % 020000000000000000000000000000000000000000000000000000000000000000c00e % 00000000000477000000007ffffffffffffffffffffffffffffc00000000000000000000000003 % 020000000000000000000000000000000000000000000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 0c0000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 00c000000000000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 07c000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 3fc000000000000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % fffffffffffffffffffffffffffffffffffffffe00000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % fffffffffffffffffffffffffffffffffffffffe00000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 7fc000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 0fc000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 01c000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % e00000000000000000000000000000000000000200000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % c00000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 800000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000010c00006000 % 0c0040000100000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000020400002000 % 040040002100000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000040400002000 % 040000002080000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000047cee03e423 % c4dcddde7880000000200000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000001800000004c444062c64 % 24e648b32080000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000048464042420 % e4424d212080000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000048428042423 % 244245212080000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000048c28046464 % 644646232080000000200000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000001800000004761003b3b3 % be7ce21e3880000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000040010000000 % 004000000080000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000020073f00000 % 004000000100000000200000000000000000000200000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000180000000000c0000000 % 00e000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018001800000000000004 % 000000000100606000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000800040000080004 % 000000000100202000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000800040000080000 % 000600000000202000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018d388e3cf039b9e71fc % dc381dfc7f1e2e2388200000000000000000000200000000000000000000000000c00a % 00000000000400000000000000000000000000000000000000000000001927c9f62407cc48f884 % 624408c221213327c8200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000019d40904040408488084 % 42440d0e2107212400200000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000018340904040408488084 % 423805322119212400200000000000000000000200000000000000000000000000c00a % 00000000000400000000000000000000000000000000000000000000001916499624064848c884 % 424006462123232648200000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000019e39ce3c7039cee71ce % e77c023b739dbe7388200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 004600000000000008200000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 00c600000000000000200000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 007800000000000000200000000000000000000200000000000000000000000000c00f % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000004000003 % 000008000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000004000201 % 000008000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000201 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000dcddde781 % 73c1b86a0000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000e648b3201 % 9c2248920000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000424d21201 % 08e3a8e80000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000424521201 % 0b2068180000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000464623201 % 1c62288a0000000000200000000000000000000200000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000180000000007ce21e381 % f3b3dcf20000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000400000000 % 000000020000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000400000000 % 000000000000000000200000000000000000000200000000000000000000000000c008 % 000000000004000000000000000000000000000000000000000000000018000000000e00000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000001800000000004 % 01818000007e0f9fc0200000000000000000000200000000000000000000000000c001 % 000000000004000000000000000000000000000000000000000000000018000000801000000004 % 0080800000231088c0200000000000000000000200000000000000000000000000c00c % 000000000004000000000000000000000000000000000000000000000018000000801000000000 % 008080000021904820200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018109b8f9e3dc077f1fc % 78b88e1a00209c0900200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018319cd8a113e0230884 % 84cc9f240020878f00200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018108850871200343884 % 1c84903a0020804900200000000000000000000200000000000000000000000000c00e % 00000000000400000000000000000000000000000000000000000000001810885099120014c884 % 648490060021904820200000000000000000000200000000000000000000000000c00d % 0000000000040000000000000000000000000000000000000000000000181188d1a31320191884 % 8c8c99224021188840200000000000000000000200000000000000000000000000c00e % 0000000000040000000000000000000000000000000000000000000000180ecf8edd9dc008edce % 76f9ce3c407e1f1fc0200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000800000000000000 % 000000004000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000800000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018001c00000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000000000000000030 % 000001800000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000010 % 000000800000080000200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000000000000000010 % 000000800000080000200000000000000000000200000000000000000000000000c00e % 0000000000040000000000000000000000000000000000000000000000181b8f3edd83403e71f1 % 09e38f80f1e1be3500200000000000000000000200000000000000000000000000c00d % 0000000000040000000000000000000000000000000000000000000000180c599066448010fb13 % 1b17d8818b32484900200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018085090444740108211 % 0a0410810213a87400200000000000000000000200000000000000000000000000c00d % 0000000000040000000000000000000000000000000000000000000000180850904440c0108211 % 0a0410810210680c00200000000000000000000200000000000000000000000000c00e % 00000000000400000000000000000000000000000000000000000000001808519044445010ca31 % 1b1651818a32284500200000000000000000000200000000000000000000000000c00d % 0000000000040000000000000000000000000000000000000000000000181cef38eee7903871d8 % ede38ec0f1e3ce7900200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000010000000 % 000000000000000100200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00d % 0000000000040000000000000000000000000000000000000000000000180000000c0000000000 % 000c00000400000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000040002000000 % 080400000400000000200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000000040002000000 % 080400000000060000200000000000000000000200000000000000000000000000c00e % 00000000000400000000000000000000000000000000000000000000001800006b8471e786e1ce % fe0471e77cdc380000200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000097c4fb120313e2 % c804fa122462440000200000000000000000000200000000000000000000000000c00e % 0000000000040000000000000000000000000000000000000000000000180000ec048202021201 % 080480734442440000200000000000000000000200000000000000000000000000c00d % 00000000000400000000000000000000000000000000000000000000001800001c048202021203 % 880481914442380000200000000000000000000200000000000000000000000000c00e % 00000000000400000000000000000000000000000000000000000000001800008e44cb12021324 % c804ca318442400000200000000000000000000200000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000180000f38e71e38739ce % ee0e71d88ee77c0000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000460000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000c60000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000780000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000010 % 060600000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000010 % 020200000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 020200000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000001dfcfb1 % e2e270000000000000200000000000000000000200000000000000000000000000c002 % 0000000000040000000000000000000000000000000000000000000000180000000000008c2412 % 1332f8000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000d0e410 % 721280000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000532411 % 921280000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000646412 % 3232c8000000000000200000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000001800000000000023be39 % dbe770000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % e00000000000000000000000000000000000000200000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % c00000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 800000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000001000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000001000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000003000000000000860000300 % 000000004000000000001000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000003000000000001020000100 % 000000004000000000001000000000000000000200000000000000000000000000c00f % 000000000004000000000000000000000000000000000000000000003000000000002020000100 % 000000002000000000001000000000000000000200000000000000000000000000c00e % 0000000000040000000000000000000000000000000000000000000030000000000023e7701f10 % 9c6e6e3c2000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000002622203131 % be3131422000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000002423202110 % a021210e2000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000002421402110 % a02121322000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000002461402311 % b22121462000000000001000000000000000000200000000000000000000000000c00e % 0000000000040000000000000000000000000000000000000000000030000000000023b0801d8e % dc73f3bb2000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000002000800000 % 000000002000000000001000000000000000000200000000000000000000000000c00e % 0000000000040000000000000000000000000000000000000000000030000000000010038fc000 % 000000004000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000000006000000 % 000000000000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000001000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000001000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000003000000000000000400000 % 000080000000000000001000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000003000000000008008400000 % 000080080000000000001000000000000000000200000000000000000000000000c008 % 000000000004000000000000000000000000000000000000000000003000000000008008000000 % 000000080000000000001000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000003373ee3bf1b9e79edddc0d % d8799b9e71b8f371e3801000000000000000000200000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000033991f11f8c4884848be06 % 64848c48f8c5098b17c01000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000003109101a808481c84d2004 % 441c88488084390a04001000000000000000000200000000000000000000000000c001 % 000000000004000000000000000000000000000000000000000000003109100a80848648452004 % 446488488084c90a04001000000000000000000200000000000000000000000000c00c % 000000000004000000000000000000000000000000000000000000003119190cc88488c8463204 % 448c8848c885190b16481000000000000000000200000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000031f38e0471cee76ee21c0e % ee77dcee71ceef9de3881000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000003100000000000000000000 % 000000000000000000081000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003100000000000000000000 % 000000000000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003380000000000000000000 % 000000000000000000001000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000001000000000000000000236000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000001000000000000000000212000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000001000000000000000000214000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 00000000000000000000100000000000000000020c000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003000000000071ff9e7c3e7 % 1e3cefc7fb80000000001000000000000000000208000000000000000000000000c00e % 0000000000040000000000000000000000000000000000000000000030000000000f884332010f % b16647e21100000000001000000000000000000208000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003000000000080842120108 % 20426a021900000000001000000000000000000230000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000080842120108 % 20422a020a00000000001000000000000000000200000000000000000000000000c00d % 0000000000040000000000000000000000000000000000000000000030000000000c884232010c % b14633220a00000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000071ce1e70387 % 1e3c11c70400000000001000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000400000000001000000000001fffffffffffffc0000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000001c00000000001000000000003800000000000060000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000003000000000001000000000007000000000000070000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 00000000000000000000100000000000e060000020000038000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff00000000000c02000002000001c000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff00000000001802000000000300c000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000000000000007000000000 % 0000000018000000000000000000000380238f3be6e1c006000000000000000000c00e % 00000000000400000000000000000000000000000000000000000000000000000000e000000000 % 000000000c00000000000000000000070027d09123122007000000000000000000c00d % 00000000000400000000000000000000000000000000000000000000000000000001c000000000 % 0000000006000000000000000000000e0024039a22122003800000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000038000000000 % 0000000003000000000000000000000c00240c8a2211c001c00000000000000000c00d % 000000000004000000000000000000000000000000000000000000000000000000070000000001 % 000000000180000000000000000000180026518c22120000c00000000000000000c00e % 0000000000040000000000000000000000000000000000000000000000000000000e0000000011 % 0000000000c00000000000000000003800738ec4773be000600000000000000000c00d % 0000000000040000000000000000000000000000000000000000000000000000001c0000000010 % 000000000060000000000000000000700000000000023000700000000000000000c00e % 0000000000040000000000000000000000000000000000000000000000000000003800079e6e3f % 37108e000030000000000000000000e00000000000063000380000000000000000c00d % 00000000000400000000000000000000000000000000000000000000000000000070000c733111 % 18b19f000018000000000000000000c0000000000003c0001c0000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000e00008212111 % 10909000000c0000000000000000018000000000000000000c0000000000000000c00d % 000000000004000000000000000000000000000000000000000000000000000001c00008212111 % 109090000006000000000000000003800000000000000000060000000000000000c00e % 00000000000400000000000000000000000000000000000000000000000000000380000c632111 % 10919900000300000000000000000700000000200c0c0000070000000000000000c00d % 0000000000040000000000000000000000000000000000000000000000000000070000079e739f % b9cece00000180000000000000000e000000002004040000038000000000000000c00e % 00000000000400000000000000000000000000000000000000000000000000000e000000000000 % 000000000000c0000000000001e00c00000000000404000001c000000000000380c000 % 00000000000400000000000000000000000000000000000000000000000000001c000000000000 % 00000000000060000000000001fc180003bbcfe3c5c4700000c0000000000003f0c002 % 000000000004000000000000000000000000000000000000000000000000000038000000000000 % 00000000000030000000000001ffb800011424242664f8000060000000000003fec000 % 000000000004000000000000000000000000000000000000000000000000000070000000000000 % 0000000000001ffffffffffffffff00001a0e420e4248000007fffffffffffffffc002 % 000000000004000000000000000000000000000000000000000000000000000070000000000000 % 0000000000003ffffffffffffffff00000a3242324248000007fffffffffffffffc000 % 000000000004000000000000000000000000000000000000000000000000000038000000000000 % 00000000000070000000000001fe380000c464246464c80000e0000000000003fcc002 % 00000000000400000000000000000000000000000000000000000000000000001c000000080000 % 200003800000e0000000000001f01c000043be73b7ce700001c0000000000003e0c000 % 00000000000400000000000000000000000000000000000000000000000000000e000000080004 % 20000c400001c0000000000001800e000000000000000000018000000000000300c002 % 000000000004000000000000000000000000000000000000000000000000000007000000000004 % 0000384000038360000000000000060000000000000000000306c0000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000380001b99dfcf % 66e1c0400007012000000000000003000000000000000000070320000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000001c0001cc88e64 % 23122080000e0140000000000000038000000000000000000e0220000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000e0000848d424 % 22122100001c00c000000000000001c000018000000187001c0220000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000700008485424 % 2211c1000038008000000000000000e00000800040009880180770000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000380008c86464 % 221203000070008000000000000000600000800040009080300000000000000000c002 % 0000000000040000000000000000000000000000000000000000000000000000001c000f9c23c7 % 773be30000e0030000000000000000300d388e1ef38f8080700000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000000000000e0008000000 % 0002300001c000000000000000000038127c9f3147d88100e00000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000070008000000 % 0006300003800000000000000000001c1d40902044108201c00000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000003801c000000 % 0003c00007000000000000000000000e0340902044108201800000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000001c000000000 % 000000000e00000000000000000000061164993146518603000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000e000000000 % 000000001c00000000000000000000031e39ce1e738ec607000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000007000000000 % 00000000380000000000000000000003800000000000000e000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000003fffffffff % fffffffff00000000000000000000001c00000000000001c000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000007000000000 % 00000000380000000000000000000000e000000000000018000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000e000000000 % 000000001c00000000000000000000006000000000000030000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000001c000000000 % 000000000e00000000000000000000003000000000000070000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000038000000000 % 000000000700000000000000000000003fffffffffffffe0000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000070000000000 % 000000000380000000000000000000001fffffffffffffc0000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000000000000e0000000000 % 0000000001c0000000000000000000000000000000000000000000000000000000c002 % 0000000000040000000000000000000000000000000000000000000000000000001c0000000000 % 0000000000e0000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000380000000000 % 000000c18070000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000700000000000 % 000000408038000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000e00000000000 % 00000040801c000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000001c42dcf9c78f3 % bf1f785c8e0e000000000000000000000000000000000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000000000038c66243ec599 % 1f8884669f07000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000007042424208109 % a8081c429003800000000000000000000000000000000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000e042424208108 % a80864429001c00000000000000000000000000000000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000001c04642432c518 % cc888c469900e00000000000000000000000000000000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000003803be7e1c78f0 % 471c767dce00700000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000070000000000000 % 0000000000003fffffffffffffffe0000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000070000000000000 % 0000000000001fffffffffffffffe0000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000038000000000000 % 000000000000300000000000000020000000000000000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000001c000000000000 % 000000000000600000000000000020000000000000000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000e000000000000 % 000000000000c00000000000000020000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000007000000000000 % 000e0000000186c000000000000020000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000003800000000000 % 003100000003024000000000000020000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000001c00000000000 % 002100000006028000000000000020000000000000000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000000000000e00000071ff9 % e7c10000000c0180000000000003fc000000000000000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000000000007000000f8843 % 3202000000180100000000000001fc000000000000000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000000000000380000080842 % 1204000000300100000000000001fc000000000000000000000000000000000000c00a % 0000000000040000000000000000000000000000000000000000000000000000001c0000080842 % 1204000000600600000000000001f8000000000000000000000000000000000000c00a % 0000000000040000000000000000000000000000000000000000000000000000000e00000c8842 % 320c000000c00000000000000000f8000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000070000071ce1 % e70c000001800000000000000000f8000000000000000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000000000000038000000000 % 0000000003000000000000000000f0000000000000000000000000000000000000c00a % 00000000000400000000000000000000000000000000000000000000000000000001c000000000 % 000000000600000000000000000070000000000000000000000000000000000000c00f % 00000000000400000000000000000000000000000000000000000000000000000000e000000000 % 000000000c00000000000000000070000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000007000000000 % 000000001800000000000000000060000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000003fffffffff % fffffffff000000000000000000020000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000001fffffffff % ffffffffe000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 1b0000000000000000000000001000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 0c8000000000000000000000001000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 088000000000000000000003ee3c85f6e000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 0880000000000000000000011f118c831000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 1dc000000000000000000001101084821000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000001101084821000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 00000000000000000000000119108c821000000000000000000000000000000000c008 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 0000000000000000000000038e1c77c73800000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000f03 % 000000000000000000000000000000000000000000000000000000000000000000c001 % 000000000004000000000000000000000000000000000000000000000000000000000000000fe3 % 000000000000000000000000000000000000000000000000000000000000000000c00c % 000000000004000000000000000000000000000000000000000000000000000000000000000fff % 000000000000000000000000000000000000000000000000000000000000000000c000 % 000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % 000000000000000000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000fff % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000ff3 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000f83 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000c03 % 0000000000000000000000001c7fe79f0000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 0000000000000000000000003e210cc80000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000202108480000000000000000000000000000000000c00e % 00000000000000000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000202108480000000000000000000000000000000000c00d % 00000000000000000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000322108c80000000000000000000000000000000000c00e % 00000000000000000000000000000000000000000000000000000000000000000000000000000f % e000000000000000000000001c73879c0000000000000000000000000000000000c00d % 00000000000000000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000000c00e % 00000000000000000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000007 % c00000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 800000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 00000000000000000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000018000000040000000002 % 00000c400080000000200000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000018000000080000000022 % 000004440080000000200000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000018000000100000000020 % 000004040040000000200000000000000000000000000000000000000000000000c00e % 0000000000000000000000000000000000000000000000000000000000180000001373ee1e6e7e % 6ec3c4cfee40000000200000000000000000000000000000000000000000000000c00d % 00000000000000000000000000000000000000000000000000000000001800000013991f337322 % 332424444440000000200000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000018000000110910212122 % 2220e4446440000000200000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000018000000110910212122 % 222324442840000000200000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000018000000111919232322 % 222464442840000000200000000000000000000000000000000000000000000000c00d % 00000000000000000000000000000000000000000000000000000000001800000011f38e1e3e3f % 7773bee71040000000200000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000018000000110000002000 % 000000001040000000200000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000018000000090000002000 % 000000007080000000200000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000018000000038000007000 % 00000000c000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000000000000000000000000000000000180000e0000000060000 % 100000080000c00000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000100008000020000 % 100000180000400000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000100008000020000 % 000000080000560000200000000000000000000000000000000000000000000000c000 % 00000000000000000000000000000000000000000000000000000000001800039e3de79f02e783 % 70d0078b8e1e480000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000121628cc8033844 % 91200c4c5f31500000200000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000000000000000000000000000000000180001074088480211c7 % 51d008085020780000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000119408848021640 % d03008085020480000200000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000000000000000000000000000000000180001236288c80238c4 % 51140c4859314c0000200000000000000000000000000000000000000000000000c002 % 00000000000000000000000000000000000000000000000000000000001800039dbce79c03e767 % b9e4079cee1eee0000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000400000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 600000001e00000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 900000002200000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 900000002000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000f1e3c84fbc79dc0 % 67079e6e767dbb0000200000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000000000000000000000000000000000180010b1638c442c4880 % a20c73312220cc8000200000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000000000000000000000000000000000180003a0408440e80c81 % 120821212220888000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000ca0408443280501 % 0c0821212220888000200000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000000000000000000000000000000000180011b1628c446c4501 % 8e0c63212220888000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000ede3c76e3b78200 % f3079e73f771ddc000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000200 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000e00 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000001800 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000003800002c04c40 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000004000002404448 % 000020020000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000004000000400408 % 000020020000000000200000000000000000000000000000000000000000000000c002 % 00000000000000000000000000000000000000000000000000000000001800000e70f0d65cc4de % ee06f9e79086800000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000004f90922664448 % 440922123189000000200000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000000000000000000000000000000000180000048039d2424448 % 640ea072108e800000200000000000000000000000000000000000000000000000c000 % 00000000000000000000000000000000000000000000000000000000001800000480c832424448 % 2801a1921081800000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000004c91912464448 % 2808a2321188800000200000000000000000000000000000000000000000000000c000 % 00000000000000000000000000000000000000000000000000000000001800000e70ede77ceeee % 100f39db8ecf000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 100000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 700000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % c00000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000040000000000000000000000000000000000c000 % 00000000000000000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000040000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000038000000 % 0000007000000000000000000000f9cf217db80000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000070000000 % 000000380000000000000000000043e46320c40000000000000000000000000000c00a % 0000000000000000000000000000000000000000000000000000000000000000000000e0000000 % 0000001c0000000000000000000042042120840000000000000000000000000000c000 % 0000000000000000000000000000000000000000000000000000000000000000000001c0000000 % 0000000e0000000000000000000042042120840000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000380000000 % 000000070000000000000000000043242320840000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000700000600 % 0060000380000000000000000000e1c71df1ce0000000000000000000000000000c00f % 000000000000000000000000000000000000000000000000000000000000000000000e00000200 % 00200001c000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000001c00000200 % 00200000e000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000003800003e21 % 3c2000007000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000007000006263 % 422000003800000000000000000000000000000000000000000000000000000000c00e % 00000000000000000000000000000000000000000000000000000000000000000000e000004221 % 0e2000001c00000000000000000000000000000000000000000000000000000000c00e % 00000000000000000000000000000000000000000000000000000000000000000001c000004221 % 322000000e00000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000038000004623 % 462000000700000000000000006000000180003000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000070000003b1d % bb7000000380000000000700002000100080001000000000000000000000000000c00e % 0000000000000000000000000000000000000000000000000000000000000000000e0000000000 % 0000000001c00000000007e0002000100080001000000000000000000000000000c00e % 0000000000000000000000000000000000000000000000000000000000000000001c0000000000 % 0000000000e00000000007fc0023c37c0f884f1000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000ffffffffffffffff80000000000 % 00000000007fffffffffffff802664901898d09000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000ffffffffffffffff80000000000 % 00000000003fffffffffffff802427501088439000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000c000000000000001c0000000000 % 0000000000600000000007fc002420d010884c9000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000c000000000000000e0003800002 % c0c00e0000c00000000007e0002464501188d19000000000000000000000000000c008 % 000000000000000000000000000000000000000000000000000c00000000000000070004000002 % 4040310001800000000007000073c79c0ec76ef800000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000c0000000000001b038004000000 % 404021000303600000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000c0000000000000901c00e70f0d6 % 5c4701000601900000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000c0000000000000a00e004f90922 % 664f82000c01100000000000000000000000000000000000000000000000000000c001 % 000000000000000000000000000000000000000000000000007f800000000000060070048039d2 % 424804001801100000000000000000000000000000000000000000000000000000c00c % 000000000000000000000000000000000000000000000000007f8000000000000400380480c832 % 424804003003b80000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000007f00000000000004001c04c91912 % 464c8c00600000000000000000e00000b013100000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000003f00000000000018000e0e70ede7 % 7ce70c00c000000000000000010000009011120000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000003f00000000000000000700000000 % 000000018000000000000000010000001001020000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000003e00000000000000000380000000 % 000000030000000000000000039c3c35973137bb80000000000000000000000000c00d % 000000000000000000000000000000000000000000000000001e000000000000000001c0000000 % 000000060000000000000000013e42489991121100000000000000000000000000c00e % 000000000000000000000000000000000000000000000000001e000000000000000000e0000000 % 0000000c000000000000000001200e749091121900000000000000000000000000c00d % 000000000000000000000000000000000000000000000000001c00000000000000000070000000 % 0000001800000000000000000120320c9091120a00000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000c00000000000000000038000000 % 000000300000000000000000013246449191120a00000000000000000000000000c00d % 000000000000000000000000000000000000000000007fffffffffffff8000000000001fffffff % ffffffe00000000000000000039c3b79df3bbb8400000000000000000000000000c00e % 00000000000000000000000000000000000000000000ffffffffffffffc000000000000fffffff % ffffffc00000000000000000000000000000000400000000000000000000000000c00d % 00000000000000000000000000000000000000000001c0000000000000e0000000000000000000 % 000000000000000000000000000000000000001c00000000000000000000000000c00e % 000000000000000000000000000000000000000000038000000000000070000000000000000000 % 000000000000000000000000000000000000003000000000000000000000000000c00d % 000000000000000000000000000000000000000000070000000000000038000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 0000000000000000000000000000000000000000000e000000000000001c000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 0000000000000000000000000000000000000000001c000001000006000e000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000380000010000020007000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000700000000000020003800000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000e0006efb3763c20001c00000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000001c00073411994220000e00000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000003800021411110e20000700000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000007000021411113220000380000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 00000000000000000000000000000000000000000e0000234111146200001c0000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 00000000000000000000000000000000000000001c00003ee3bbbbb700000e0000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000038000020000000000000070000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000070000020000000000000038000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 0000000000000000000000000000000000000000e000007000000000000001c000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 0000000000000000000000000000000fffffffffc000000000000000000000ffffffffffffffff % 000000000000000000000000000000000000000000000000000000000000000000c00e % 0000000000000000000000000000000c00000000e000000000000000000001c000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 0000000000000000000000000000000c0000000070000e00001303003800038000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 0000000000000000000000000000000c000000003800100000110100c400070000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 0000000000000000000000000000000c0000006c1c0010000001010084000e0000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 0000000000000000000000000000000c000000240e0039c3c371711c04001c1b00000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 0000000000000000000000000000000c00000028070013e42491993e0800380c80000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 0000000000000000000000000000007f8000001803801200e7510920100070088000000000001f % e00000000000000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000007f8000001001c0120320d109201000e0088000000000001f % e00000000000000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000003f8000001000e01324645119323001c01dc000000000000f % e00000000000000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000003f00000060007039c3b7b9f39c300380000000000000000f % c00000000000000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000003f000000000038000000000000000700000000000000000f % c00000000000000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000001f00000000001c000000000000000e000000000000000007 % c00000000000000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000001e00000000000e000000000000001c000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000001e0000000000070000000000000038000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000000e0000000000038000000000000070000000000000000003 % 800000000000000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000000c000000000001c0000000000000e0000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000000c000000000000ffffffffffffffc00000000001ffffffff % fffffffe0000000000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000040000000000007fffffffffffff800000000003ffffffff % ffffffff0000000000000000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000700000000 % 000000038000000000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000e00000000 % 00000001c000000000000000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000001c00000000 % 00000000e000000000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000003800000000 % 000000007000000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000000000000000000000000000000000000000000070000c0000 % 0000c0033800000000000000000000000000000000000000000000000000000000c000 % 00000000000000000000000000000000000000000000000000000000000000000000e000040000 % 000040011c00000000000000000000000000000000000000000000000000000000c002 % 00000000000000000000000000000000000000000000000000000000000000000001c000040000 % 000040010e00000000000000000000000000000000000000000000000000000000c000 % 00000000000000000000000000000000000000000000000000000000000000000003842dc5c788 % 4dc7c71f0700000000000000000000000000000000000000000000000000000000c002 % 000000000000000000000000000002000000000000000000000000000000000000070c66266cd8 % c62c4fb10380000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000020000000000000000000000000000000000000e0424242848 % 4428482101c0000000000000000000000000000000000000000000000000000000c002 % 000000000000000000000000007ce790bedc0000000000000000000000000000001c0424242848 % 4428482100e0000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000021f23190620000000000000000000000000000003804642468c8 % c428cca30070000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000021021090420000000000000000000000000000007003be77c787 % 6e77671d8038000000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000002102109042000000000000000000000000000000e00000000000 % 00000000001c000000000000000000000000000000000000000000000000000000c002 % 000000000000000000000000002192119042000000000000000000000000000001c00000000000 % 00000000000e000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000070e38ef8e7000000000000000000000000000003800000000000 % 000000000007000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000000000000000000000000000000001ffffffff000000000000 % 000000000003ffffffffffffffc000000000000000000000000000000000000000c000 % 0000000000000000000000000000000000000000000000000000000001ffffffff000000000000 % 000000000003ffffffffffffffc000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000100000001800000000000 % 000000000007000000000000004000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000100000000c00000000000 % 000030e0000e000000000000004000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000100000000600000000000 % 08001310001c000000000000004000000000000000000000000000000000000000c000 % 0000000000000000000000000000000000000000000000000000000001000001b0300000000000 % 080012100038360000000000004000000000000000000000000000000000000000c002 % 000000000000000000000000000000200000c00000000000000000000100000090180039df71c7 % 9e71f0100070190000000000004000000000000000000000000000000000000000c000 % 0000000000000000000000000000042000004000000000000000000001000000a00c007c5b9bec % 48fb102000e011000000000007fc00000000000000000000000000000000000000c002 % 000000000000000000000000000004000000400000000000000000000100000060060040210a08 % 0882104001c011000000000007fc00000000000000000000000000000000000000c000 % 00000000000000000000000001e6ef66ec3c400000000000000000000100000040030040710a08 % 0882104003803b800000000003f800000000000000000000000000000000000000c002 % 000000000000000000000000033734233242400000000000000000000100000040018064991b2c % 48ca30c0070000000000000003f800000000000000000000000000000000000000c000 % 00000000000000000000000002121422220e40000000000000000000010000018000c039ddf1c7 % 8e71d8c00e0000000000000003f800000000000000000000000000000000000000c002 % 000000000000000000000000021214222232400000000000000000000100000000006000010000 % 000000001c0000000000000001f000000000000000000000000000000000000000c000 % 000000000000000000000000023234222246400000000000000000000100000000003000010000 % 00000000380000000000000001f000000000000000000000000000000000000000c002 % 00000000000000000000000001e3e777773be00000000000000000000100000000001800038000 % 00000000700000000000000001f000000000000000000000000000000000000000c000 % 000000000000000000000000000200000000000000000000000000000100000000000c00000000 % 00000000e00000000000000000e000000000000000000000000000000000000000c002 % 000000000000000000000000000200000000000000000000000000001ff0000000000600000000 % 00000001c00000000000000000e000000000000000000000000000000000000000c000 % 000000000000000000000000000700000000000000000000000000001fe0000000000300000000 % 00000003800000000000000000e000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000fe00000000001ffffffff % ffffffff000000000003fffffffffffff800000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000fe0000000000000000000 % 000000000000000000070000000000001c00000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000e0000000000000e00000000000000000000000000000000c00a % 0000000000000000000000000000000000000000000000000000000007c0000000000000000000 % 0000000000000000001c0000000000000700000000000000000000000000000000c00a % 0000000000000000000000000000000000000000000000000000000007c0000000000000000000 % 000000000000000000380000000000000380000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000007000000000000001c0000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000380000000000000000000 % 000000000000000000e000000000000000e0000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000380000000000000000000 % 000000000000000001c00000000000000070000000000000000000008000000000c00f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 000000000000000003800000000000000038000000000000000000008000000000c00e % 000000000000000000000000000000000000000000000000000000000100000000000000000000 % 00000000000000000700000000000000001c00000000000000001f39e427f70000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000e00000000000000000e0000000000000000087c8c62188000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000001c000000000000000007000000000000000008408422108000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000038000000000000000003800000000000000008408422108000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000070000000000003800001c00000000000000008648462108000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000e000000000008c400000e0000000000080001c38e3b739c000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001c0000000000088400000700000000000f00000000000000000c00e % 000000000000000000000000000000000000000000000000000000008000000000000000000000 % 0000000000000003800001b885b9e0400000380000000000fe0000000000000000c00e % 000000000000000000000000000000000000000000000000000000008000000000000000000000 % 0000000000000007000001cd8cc4808000001c0000000000ffc000000000000000c00e % 00000000000000000000000000000000000000000000000000001f39e427f70000000000000000 % 000000000000000e000000848484810000000fffffffffffffe000000000000000c000 % 0000000000000000000000000000000000000000000000000000087c8c62188000000000000000 % 0000000000000007000000848484810000001c0000000000ffc000000000000000c000 % 000000000000000000000000000000000000000000000000000008408422108000000000000000 % 00000000000000038000008c8c8483000000380000000000fe0000000000000000c000 % 000000000000000000000000000000000000000000000000000008408422108000000000000000 % 0000000000000001c00000f877cee3000000700000000000f00000000004000000c008 % 000000000000000000000000000000000000000000000000000008648462108000000000000000 % 0000000000000000e0000080000000000000e0d800000000000000000004000000c000 % 00000000000000000000000000000000000000000000000000001c38e3b739c000000000000000 % 000000000000000070000080000000000001c0480000000000001b884dcf000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000380001c000000000000380500000000000001cd8c624000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000001c000000000000000007003000000000000008484424000000c001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000e00000000000000000e002000000000000008484424000000c00c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000700000000000000001c002000000000000008c8c424000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000380000000000000003800c00000000000000f876e77000000c000 % 000000000000000000000000000000000000000000000000000000460000620000000000000000 % 000000000000000001c00000000000000070000000000000000008000000000000c00d % 000000000000000000000000000000000000000000000000000000820000220000000000000000 % 000000000000000000e000000000000000e0000000000000000008000000000000c00e % 000000000000000000000000000000000000000000000000000001020000210000000000000000 % 0000000000000000007000000000000001c000000000000000001c000000000000c00d % 0000000000000000000000000000000000000000000000000000013e211e210000000000000000 % 000000000000000000380000000000000380000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000001626321210000000000000000 % 0000000000000000001c0000000000000700000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000001422107210000000000000000 % 0000000000000000000e0000000000000e00000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000001422119210000000000000000 % 00000000000000000007fffffffffffffc00000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000001462323210000000000000000 % 00000000000000000003fffffffffffff800000000000000000000000000000000c00e % 0000000000000000000000000000000000000000000000000000013b1d9df10000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000001000000010000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000800000020000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000046c0000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004320000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004220000000000000000000000000000000000000c00d % 00000000000000000000000000000000000000000000000000000600000000c003000000000000 % 000000000000000000000000004220000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000002000000004001000000000000 % 000000000000000000000000004770000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000002000000004001000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000042dc2e7884dc7c71f000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00d % 0000000000000000000000000000000000000000000000000c66233cd8c62c4fb1000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000042422184844284821000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000042422184844284821000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00e % 00000000000000000000000000000000000000000000000004642238c8c428cca3000000000000 % 00000000000000000000000007fc00000000000000000000000000000000000000c00d % 00000000000000000000000000000000000000000000000003be73e7876e77671d800000000000 % 00000000000000000000000007fc00000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000003f800000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000003f800000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000003f800000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000001f000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000001f000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000001f000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000e000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000e000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000e000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000003fffffffffffffffffffffffffffffffffff8000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000801000000000200000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000008803010000000200008000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000200000000800d010000000000008000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000200000001f87173ce6e03767779e000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000008889891f31039a22cc8000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000008889091021010a34848000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000008871091021010a14848000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000008881091921011a188c8000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000200000000fcfb9dce7381f70878e000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000200000000008c000000010000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000200000000018c000000010000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000020000000000f0000000038000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000018000040000000000000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000008000840000000000000000200000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000008000800000000000000000200000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000200d709c3dec79b81b8f3e79bb0e79cf8d008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002012f8be6284ccc41cd09084cc9f23e412008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000201d80a0408484840843901c889022041d008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000200380a040848484084c90648890220403008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002011c8b262848c8408d1908c8899232411008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000201e71dc3cee79ce0f8ef877ddce39ce1e008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000080000000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000080000000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000020000000000000001c0000000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000003fffffffffffffffffffffffffffffffffff8000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000003fffffffffffffffffffffffffffffffffff8000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000007fffffffffffffffffffffffffffffffffffffffc00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000007fffffffffffffffffffffffffffffffffffffffc00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000000000 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 102.5 113.642] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -598 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_duenna\)) s -1292 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (preventative maintenance,) s -678 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error recovery) s savemat setmatrix n 78.75 110 m 126.25 110 l 126.25 122.5 l 78.75 122.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 102.5 76.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -682 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_dualpivot\)) s -1160 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select entering variable;) s -556 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivot basis;) s -1092 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (update variables, DSE) s -1082 695 m 927 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (norms, reduced costs;) s -894 927 m 1159 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select next leaving) s -386 1159 m 1391 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s savemat setmatrix n 81.25 72.5 m 123.75 72.5 l 123.75 102.5 l 81.25 102.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 102.5 44.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -606 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_dualout\)) s -1068 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select leaving variable) s savemat setmatrix n 81.25 40 m 123.75 40 l 123.75 50 l 81.25 50 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 102.5 156.338] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -708 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(preoptimality\)) s -914 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (factor basis, check) s -956 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (accuracy & confirm) s -806 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasibility status) s savemat setmatrix n 81.25 152.5 m 123.75 152.5 l 123.75 170 l 81.25 170 l 81.25 152.5 l cl gsave 0 0 0 0.176 0 B grestore n 102.5 40 m 101.49 36.972 l 103.51 36.972 l cl 0 0 0 F n 102.5 30 m 102.5 36.972 l gsave 0 0 0 0.176 0 B grestore n 102.5 72.5 m 101.49 69.472 l 103.51 69.472 l cl 0 0 0 F n 102.5 62.5 m 102.5 69.472 l gsave 0 0 0 0.176 0 B grestore n 102.5 110 m 101.49 106.97 l 103.51 106.97 l cl 0 0 0 F n 102.5 102.5 m 102.5 106.97 l gsave 0 0 0 0.176 0 B grestore n 102.5 132.5 m 92.5 132.5 l 87.5 137.5 l 92.5 142.5 l 112.5 142.5 l 117.5 137.5 l 112.5 132.5 l 102.5 132.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 102.5 137.432] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -688 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unrecoverable) s -294 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error?) s savemat setmatrix n 102.5 122.5 m 92.5 122.5 l 87.5 127.5 l 92.5 132.5 l 112.5 132.5 l 117.5 127.5 l 112.5 122.5 l 102.5 122.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 102.5 126.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -428 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (continue) s -442 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivoting?) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 147.5 124.617] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -342 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (leaving) s -386 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s -444 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selected?) s savemat setmatrix n 147.5 121.25 m 140 121.25 l 135 127.5 l 140 133.75 l 155 133.75 l 160 127.5 l 155 121.25 l 147.5 121.25 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 102.5 174.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -218 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible?) s savemat setmatrix n 102.5 170 m 95 170 l 90 175 l 95 180 l 110 180 l 115 175 l 110 170 l 102.5 170 l cl gsave 0 0 0 0.176 0 B grestore n 132.5 200 m 125 200 l 120 205 l 125 210 l 140 210 l 145 205 l 140 200 l 132.5 200 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 132.5 206.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -288 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (punt?) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 102.5 194.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -562 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unbounded) s -480 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (expected?) s savemat setmatrix n 102.5 190 m 93.75 190 l 88.75 195 l 93.75 200 l 111.25 200 l 116.25 195 l 111.25 190 l 102.5 190 l cl gsave 0 0 0 0.176 0 B grestore n 102.5 152.5 m 101.49 149.47 l 103.51 149.47 l cl 0 0 0 F n 102.5 142.5 m 102.5 149.47 l gsave 0 0 0 0.176 0 B grestore n 135 127.5 m 131.97 128.51 l 131.97 126.49 l cl 0 0 0 F n 117.5 127.5 m 131.97 127.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 134.859 146.089] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -240 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error) s savemat setmatrix n 132.5 200 m 131.49 196.97 l 133.51 196.97 l cl 0 0 0 F n 116.25 195 m 132.5 195 l 132.5 196.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 80 206.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -278 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dual\)) s -562 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unbounded) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 132.5 221.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -614 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (tighten pivot) s -1014 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selection parameters) s savemat setmatrix n 112.5 217.5 m 152.5 217.5 l 152.5 227.5 l 112.5 227.5 l cl gsave 0 0 0 0.176 0 B grestore n 80 202.5 m 78.991 199.47 l 81.009 199.47 l cl 0 0 0 F n 88.75 195 m 80 195 l 80 199.47 l gsave 0 0 0 0.176 0 B grestore n 132.5 217.5 m 131.49 214.47 l 133.51 214.47 l cl 0 0 0 F n 132.5 210 m 132.5 214.47 l gsave 0 0 0 0.176 0 B grestore n 102.5 67.5 m 105.53 66.491 l 105.53 68.509 l cl 0 0 0 F n 147.5 121.25 m 147.5 67.5 l 105.53 67.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 103.996 65.0089] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 89.2333 55.0278] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -105 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 119.419 140.17] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 88.169 197.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 133.73 212.81] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 117.001 197.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 145.751 207.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 160.751 130.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 148.73 119.746] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 118.251 130.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 103.73 145.31] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n 72.5 180 m 71.491 176.97 l 73.509 176.97 l cl 0 0 0 F n 90 175 m 72.5 175 l 72.5 176.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 89.419 177.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 115.751 177.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 72.5 184.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible?) s savemat setmatrix n 72.5 180 m 65 180 l 60 185 l 65 190 l 80 190 l 85 185 l 80 180 l 72.5 180 l cl gsave 0 0 0 0.176 0 B grestore n 50 190 m 48.991 186.97 l 51.009 186.97 l cl 0 0 0 F n 60 185 m 50 185 l 50 186.97 l gsave 0 0 0 0.176 0 B grestore n 102.5 190 m 101.49 186.97 l 103.51 186.97 l cl 0 0 0 F n 85 185 m 102.5 185 l 102.5 186.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 59.419 187.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 85.751 187.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 140 172.117] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -426 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (lost dual) s -468 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasibility) s savemat setmatrix n 130 175 m 126.97 176.01 l 126.97 173.99 l cl 0 0 0 F n 115 175 m 126.97 175 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 50 195] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -368 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (optimal) s savemat setmatrix n 102.5 35 m 105.53 33.991 l 105.53 36.009 l cl 0 0 0 F n 132.5 227.5 m 132.5 232.5 l 177.5 232.5 l 177.5 35 l 105.53 35 l gsave 0 0 0 0.176 0 B grestore n 177.5 127.5 m 174.47 128.51 l 174.47 126.49 l cl 0 0 0 F n 160 127.5 m 174.47 127.5 l gsave 0 0 0 0.176 0 B grestore n 135 142.5 m 133.99 139.47 l 136.01 139.47 l cl 0 0 0 F n 117.5 137.5 m 135 137.5 l 135 139.47 l gsave 0 0 0 0.176 0 B grestore n 160 205 m 156.97 206.01 l 156.97 203.99 l cl 0 0 0 F n 145 205 m 156.97 205 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 162.5 204.156] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s 0 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (punt) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 102.5 53.367] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -342 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (leaving) s -386 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s -444 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selected?) s savemat setmatrix n 102.5 50 m 95 50 l 90 56.25 l 95 62.5 l 110 62.5 l 115 56.25 l 110 50 l 102.5 50 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 56.25 51.7375] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -892 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_dealWithPunt\)) s -778 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (attempt to relax) s -698 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivot selection) s -554 431 m 647 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (parameters) s savemat setmatrix n 40 47.5 m 72.5 47.5 l 72.5 65 l 40 65 l cl gsave 0 0 0 0.176 0 B grestore n 27.5 50 m 20 50 l 15 56.25 l 20 62.5 l 35 62.5 l 40 56.25 l 35 50 l 27.5 50 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 27.7422 52.7954] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -196 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (new) s -530 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (candidates) s -484 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (available?) s savemat setmatrix n 72.5 56.25 m 75.528 55.241 l 75.528 57.259 l cl 0 0 0 F n 90 56.25 m 75.528 56.25 l gsave 0 0 0 0.176 0 B grestore n 102.5 35 m 99.472 36.009 l 99.472 33.991 l cl 0 0 0 F n 27.5 50 m 27.5 35 l 99.472 35 l gsave 0 0 0 0.176 0 B grestore n 102.5 147.5 m 99.472 148.51 l 99.472 146.49 l cl 0 0 0 F n 27.5 62.5 m 27.5 147.5 l 99.472 147.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 28.57 65.4722] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 28.8757 48.5411] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix userdict /#copies 1 put grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore DyLP-1.10.4/DyLP/doc/Figures/primalpivcalls.drw0000644000175200017520000004403511171477034017607 0ustar coincoinª» €ì"€ ˆÈ sÇH6eb P%Ì™2SÒè)ƒBFŒ.r°q#‡ )XL3›0y˜¤³ðˆœ7uà,¤RK!rêÌAƒ¢I*E¤!† ,\¢DŒ!k`DZc†‹0b°ˆq´hW£H¹"ËÂoĨñÁƒÊ( ì„a“挶R’ABÄܺwyL…‚N1l¡HyûD •$Oœa‚« Â%Ù‚Å 17bê°AH‡m‹ B.SšGScæ°E!äÍ›5m¸IÛ Û6eȤ©Ó¦wÍ !æä˜5"`³‘3»ˆ“#L’LAÂû¤›3u–aÈÜsÖ°M»V™<_àÈI“› œ4vÞÐ9K§&9tÈQFm|Q†dø @H ¸“L Ðdm9íÔÓOA åRJåÁ”SP±pƒU1Äpƒˆ8\•ÕV_µ–‹eÅ[nÁ%]v±ÅDFôõWŽ‚E˜až)ƘcIF™eœi&$%yšh¤™†šjUºFXl³Õv[n»õö[pÃ7†Çñ \r 0çtÒQÇ Öa§w xžx䙇žzh©¥ |ôÍaôÇŸ H *È „7UÈ“O@ EY~øTH#ºPâ‰2ØàÂeZ‰µáªª’eV kµõV\?¶c~áØ`…–ØbP4öXd“Uvj“j>%[S®ÖÚi©QÉy[Ê6§—¸éÆÛ™c GœqÈ­éfÏE7ÆtÕ]—ÝvÝé¶çC}žFzë ê|f¨Û¢65:`&¸ H”R¨Ó¥jºj§M}*"‰&²`CŠX¥ #Y­võꌲÚX«Ž<ú¨+[¼ùë‘Ã*iìePÂá¤S-K‰å´<@;sk¯qy­mÙ†É-Àyk&šá²9n¹q¦k'»yº¼®ù9/ 3Þû…úºÁïþ ©À“úg°…˜f¸iW ƒ*Ä'Ö@ñŠÕUÜ1ÂJã¬72® ³É<,’Ä.ylË/s&³´Ï^É8µ°YKÏ`nëÐd~{fšk.×¹pž+'êÞÙîwOµ¼ôÚm5e<äLûñÐ_¿]?°¤‹ÓÁfª!§yØpˆ¡ŽÊBU*Z,÷ó,B¿± Ó:2·Š¬·ßCú8°Â&Y,“ˆ' ó²ŸÝle´ÎB®óä_j+&æBƒ«&›ž¿i.ºsÖ¹.žzJ]¼þT¯ö¼ç °“]´f;Få`‘X„|g©à™maÅóòØö°æEoUƒÑôbU#ëm/{¹Ú^ɼ'¸ðneÈÚL̘¥¾š9®}ZŠ\—('¿Ÿ­Löë\›>‡4Ñ)í§{—êÊÃ:ªÙë€÷ÉOínÇ5GAl½›ÐïÈ–°á¡-ƒÇ[›¨"f«Tìƒd ¡ôdD½æ H(ìÛ ‹>©Œ|™1Ÿâhø8²/K9“¶*7¿jŽh÷CÇ?Ò- €NãÓê躆 d Ã¢( 5lÍ_º‹ ƒ“™PxeSñ–Æ*¦BaD·ÞÍc׋ãõæx²Á¥l|‡Ë£ Ñ׬,Ù¬Üaü|v9Csø¢þ’Ö¿Ò1-€’d"%«F¨6´A4tHí>ùÀ¯ñn‚Z¬`*½È!0ªm+0Àˆ "Ëc9„s!Iˆ·¾éR…O\ íL– SYá#‰Ãdîl™–ë7W´ün£óŸéš†ºlJ­uU›Ãtc„7È óiÃê@‡!è† s §Í)Á‚maÂ;[;Yù΋Ðà#8ÐH=eI75®Ê–Õ{£­B–B ñò{(Ÿá ê2=Î0}}d( «¥ÌžE”~E¤ÆÈŒZ’…š6§VÀA½¤ úˆnÊüèG¦^ÛBžÜÔ‚ª< pw:LCxƒ4Y9 ) `‚Lr¢Wb$4ˆƒ$û!Òಙ… ƒøêWuvQ§ƒ-,O›ØÅÂıå,fMEY¡Ne³2¹WjË‚ÏE´£|I)ÑY)Tžƒ« QÃ\0ÏáÀŒp»X>×h·¤ú“©r ( ëøË©Æ¡‹[è ·ªÃ‡zµ™{fE¥yQj:‰UâÙê:B¡&kÀk(±Hܱáô‚«4Þ;“±çz°¨Ó=ê>oiB8bw—Ú¥cT_ˆÇª3¡XïiæPø×‡é b4ÉŠÑ#n›jý¨Û‡9”áP‰*ƒ~¯xNÒú°ìLmÚX«XÆÂV$œÍq Ô·( ì[ä#‹V$¤„MM›Sä Øa>Ñ ¬RÌzµ\°usù`€þm»¾c0- ^…s¼æªy âúQ4‘F[d‰«ùÈ$ p’ôåfJç2Îân¦z [:[e°èذ!ÊGf@-¿ížiL°«ÄìÆëò Âg–°/¥ Ãò]8¼oÞ0Îäìa:73Äw«žÝ«ÑkF2ÅMl«Æ@ý !p(ƒfLSE—‹,awéIWš[>°t_D]ŽušÌŸ6s÷DíB5S5qW-&Í´çò¶º‡¯¶³XGAò™=$49Mw¿÷Ä·–w®+ Ÿ1 a Qä·(Ebã¿®µË†4ƒZëãÇy²¦ÂÁ³9bd$ç€+B×r“ŸÌD•–ÑV¶j¯"Äöøµ>ìd‘þì,ýçIz×—^õšS9êÏ9ÁEÂs¬Çvë.H:´¿®õ°Ç½ë7(:piîôß|C§úÎ¯ÞØ¬s+]‘ÁmÁ^ƒ¼×`ydmßm~\G«]ðl'üëÞx#C¾è`Gußg¾õ›ç¬ðgúº‹^b¸/ûäÏÎûË;ßêÐ7¼L¦O{™\ßÇozò¹Ÿcï·üÀg¼ã‡äëÇ>÷Ûß}û›ÿþ¶»^þžG}Äg}d!€ø·~ú‡sü÷Nðçv({å‡×ç[ŸbzO‡lh×{ý§yâ{óg€Å×^WzU—Xl`RSÀ a‚&µRpbPR±9 3"pnƒw‚Ž¥/ƒ—ñxc¡ƒB3 ?Ø‚Bƒ!ps·4, v N¤IÈ„™„.…20„3€cˆ:˜…o@^hu`ø„1h†„E3°¥¢ƒÍQeZÈoÈ‚A8„>‡†ñ¤‡lÀ‡KØ„ƒ… C…1†7 ƒc`Rn`'x–‰X؆NHˆføx—áeŠ÷Wˆ#h@P²yÀ‰|ø‰q(г·5*³§ƒp0}xr ²ŠŽ6X„[:èL~á‘óážÈˆaƒ°´3 80‰Wèba¾XÀ(rÈ#b‹Wi:øyP£ñwŒH„3¨x¡‹¼ÈŽî˜‰ò82HŠQ騆dðãhehçuɰã/qâHˆöxƒçˆŠ"`RîÒ‡íøŽñX‘b8ƒå2 :¨Š¬8sWn€Y&Y†˜¥ƒ,É. “bøYxhƒ&’:xh0 t “DÈ“2€”—¡‡ePÑÈ AV¬Ñ)È 0•vQ•1,Ð6pM1X6@"Aˆ^i!ÁlÙ–nù–m9ŽfXŒ0`–§XuZ tÐ…ø•a9–8P–g …ÕH‡,k —Šé–r)“¶2‰—T¹—]Y~)–i'˜ Y˜E‹ù™l¹™¤H’Š'™[I™} –˜I–f)š–‰Š ¹˜®GwƒšÅ yÉ•>§ª ˜š)ŠdØ[Zq’V›Š™3p"øH*ÉišzÉ—^Y·waEˆ7àeÙ)"6˜ÆÉ˜hi™j‰›“ –)·W× …ÛÙžÝùp9Ž…œˆIž§iža–éY’ƒƒîÉÞ ŸýÑ™‡•›¨úIü9Žÿ™ Ÿ®y„öùœ•™ŸÓ©žú ï) q œu8œIy€ý!n ‚A Riu…a äuS¨"À à:º£<Ú£>ú£@¤B*p7P:Š£Ná61€;z†פNA;*L*¥:š”u9¥—a¥NaYz¥Ç¥ÄX—VФcŠ¥`ŠYSêC°¦_ê c¤:º¤´É£Eú¤Cº£fš§|*¤^¸¢cТ/£3jƒ4j£{Ú§Šº¨Œz¤9Ú¨©Bš¨’Z©•J©–ê§!¨‚š0*£KA£‡z…8j¦zª¨šªªºª¬Úª®úªªZª°:«´Z«¶j²z«ºº«¶š«¼z«Ê¢.ê©„ª†ê“¤ªFpËÚ¬Ìú«¦Ê¬ÒÚ¬ÐzªÓ*­¾Ê«×J­Õê¬ÞºªÙúªÛú¬Ý:®½ª¬«j®Ý¬:¬ŸZ¨5š¬Þ:­é:¯®ª®ªŠ¯õz­á­öÚªúŠª›ªkª8Z°Öú¯ùª°ûú­ »­ýê¯ÛÚ°ôºªìÚ©ïj¬ñz£ 0K®¿ú±ÓY®"{k«% ²ÚZ²¬z²éʲ՚²çʪ2[­ë®Åê!¢Š¬>û³>+B+´@ ´·x´ºU´?;´C«´>«[H[N8Ê´Dë´Q›´XkµRë´P µS˵5€£aûµ·¶\;µf{hkµS[µkÛ¶L«¶Y[7;¨ ª³ÇºÉ¶Ÿõ·5@S ¸€ë·{¸‚ë´„{¸o«ˆ‹¸ƒû¸Ÿe¸„¹‹K¹ˆK¶Š+¹]«´œ›¸J»¸“‹µ¢Û¸¢Û¹Eû¹–û¸wK¬y‹;Ë·=ëµu;¸Ux»UX¶Yk»¸›»N‹£k‹º@Û»·«»_Ë»½K·f«¹¡K¼ ›ºq«¸Î«¼QkºÓ‹µÑÛ¼ÄÛº«·‹¤M¾Yqä;¦gz¦â+¾Lº¾x*¥îK¦Yú¾OʾLš¾Y£å[¾çK¾ö;–óÛ¾ñ ¿ïk¥ôû¤ý›¿cФì¥ö[ÀLÀî;À_êÀYQÁá»À]º¿ÀkÁLÁ,Àü¿ë˽9 »{‹¨ˆ5C Â,¼Â.ÌÂ-Ã/ìÂ3,Ã1lÃ5LÃ6Œ£9¼e=œÃ?lÃ8ŒÃA\Ã8:Ä@ŒÄ7\Ä-ÌÄ/ŒÃGœÄNìÃJìÂ$üº±‹ÂCp[ÜÅ7ð\`L†gØ¿@Ú¿aÆ^ìÅ<²ÆFÀ#iÌÅ&«g,Æ,¾?jÆbŒÆp¬ÆmÜÇn¼Çp<ÇϾu\Æu,È* È[ÌÆlüÆ[ŒÈ…˜:§‡œÇbìÈEêÇ}|Åð:ª‹Áªë´¬º¿c*ÁRêÀdŒÁU[º¢¼ª¤¼¥ŒÊ… ʢ˼E;ÊlÊ",p©LÊ¡¬´ûÊ|Ê"LÆœ¬±žl¦ãË ÍüÌ ÍÌÍÔ<ÍÖìÌÕŒÍ× Í²Ê#¦êÍmü¬E€>jªCpªç¼ÍÙ,ÍÚÜÎì<1ʼÎò¬ÎôìÎóŒÍß|ªà<ÎßÇ?jÎèlõüÎÔ|ÌÞ›Ì p’ ­ÐÎKƒõÐуÕÐ ½Ð%rÑÑ%RÑ £ -Ñ ýÐÍÑ¡Ñ&½Ñ$ÝÐ8Ò!=Ò}Ò'MÒIé¼!½Ò íÒ Ó&mÐ&ü½  Ó@ÔB=ÔA ¼D}ÔHÔmÔJÝÔN­ÓLýÔDÍÓYœ¬æzÕöú£X½ÕöÊÕÛÕYí£\=Ö`MÖ_½­Z]ÖjMÖlí­“ mÝÖT}ÂòšF`×x}×z×yÝ×{­×í×}-Ø Ø‚]ª‚MØ„]ØŠ­Ø…ÍØŒ£Žíר•ý×—=Ø…-Ù=Ù{íÙy=×>]³ªJ¦}Ú¦M³0[Ú¨}Úª-²ÛÚ®ý²"˪²Ú´ý±-·ýÚº½ª·M¾í±¶}ÛKÚ©ܬ*Ú-¶Å-Û¬êÜÀÝÛ«*¶±Mݪ*ݬ ÝÕ͵»­ÜÝmµÏÝÚÑíÝÓ-Û«ÝÉÝ©ÊÜ<[µæ­ªE0ßô=ßå-Þ«*ú½ßú}ßL±õ]ßþ=´¬Êßü=àB»ÛNß.nàýÞL˪ >ßéß© ᮪î-»¶ ´'¼¸«¶&-âÅû»?]âÒK¼$®Ñ&î»J{Òþ³ ÝâýâÏ â*Ì Pã^»ãEÛÐŽÂ6ŽÑS;ÌE~уûÁâN‹ä?îâŠËäQ¾Ô p䦜ä%²ä¬å1иPã@>¼<ä}ûä>ŠãGžæ+ž¼(þ£jŽæ=çJû£3î³>^çl®½n®çsŽây^´pÞæ¸k柜ÒÎ{Ç&-Ó ­è-Óè>ÓˆN¼ŽžÑŒî¼oMéÝ蓾è•Þ»vžâê¸{émè;µCÐê®Þê!ͪ¬þê®ëàzåNKëµÒ²žëº>¶®ªûëÀÎë«:ëº쩊ì´nÓÝëJKì!­êÊ }íÖžíØ¾íÙ®íÞÎíàþíÚîá^ªâîçžîäþíëÞîÙnîÜ®îòÞîî^ï⎤öžïÖîÔ0àï?Ì/¶ÿ^ð¯Ë¦,¶ð-ðLð _ðÁ oðÿÁ ÿð\kñïðñ[ñ?ñ ßVËñ/òu)¶Ô¤Ü£!Íò»¼ç‚î£HÚò<úò?jó;ºæ>êÀoó=óîç./ô<êì ó,ó@Kí_üôÙ(tRïÐ ìT/õPõpõO_—SÿõW/¥YŸcÿÅ ö8`õ__öLZö^öh/ö\OösÿÅpïÐ<Œöl¿õYÿöq?õ|Ïõl÷iö[÷m_÷~OøTøOOíBP‘?ùCqÛ’ù“ßÕ˜ùÁMù”o®žù8Ü›ŸùãZú’ßù¨ú¨Ü8ŠúB ù¡/ªú¬ú¤?û¥zú³_û›o®ÔÞˬË,üçKüÅ\ÈøKÊÈ¿ôÆ_¾Í?¿ÏŸÀ=Ë1?ý°,Á²l¿¹Œñr|ý³ÌüÖO¿ÁêNÓ ÍéýÑéoÒøkê·Òê¿Ðì/ÑóßÑ=Žþöoþë¯ÿ}ÿÄIÓɱöWêÎñšv›JXá­NöÞ†CUê >ÀS) ׺pø-»M@SU9àÄU0¦ªhH  ¼€èJŠ@ ¸O•Ó+YÁ-eÅ@xÛd` ,Y£ïЬ¸uàÇâ?иu,(Ûl`$‚­Í&AÈÛŽ`t‚AP¶Q;çûª 'ÐjYA+˜ÿ›²Ú‚W° -0ûÄ`‚#ƒ$oÂI¸1xÛ`ü€TÐ †AØàj,°ßÉ9…å ÏãƒS®Ë½9¦÷³ÂÜÌzAŽÊ==…ëê\–Ûƒ;/°? yœ!Zƒ.t•¹Ø® 2k€!M¦…B’6 9Z)¬h5-¡‘B& Yá*”h­’4¤ÑbaD³…µðÞB]ÑÞŸ)t…¿Pr4=¸u%4†C§æ¡ÏÊ„‡.× ÂówÎ"BL˜ ¡!ÐzkÇVC°òÚ”9„­ªÃ6Ep@;|‡8 yH…º‡ghËàÃ{8û!=t‡ñ®ÃuÈÃ"; ˆ±ÖÃ}˜óá>ô‡þ! Äsh)¢:}1BDyÈqCtˆqfD"`Ñ¡E<ˆð°¯ØõáG„!qI¥DwXþ4Ú–¹‰7¹¡ª“†q¢Nlu´) 4.f혔‚lSfïûH¸&¥‚€ƒŒ'þNBRH™4.$•B?’C^£çr†@¤‘p EšHÔ¦ä‰DRÒEÊW!e¤Û`HÒëtÈ™†@ˆümêGÆ€)$³3’ÄèA¶H€¿dR“œ’P²FêÈI#­$eч$RKvENˆ±JXUãX¬Š¥éɈ–'÷¤ŸÜm~òO®ª@¹'û¤D£……rPJ–f(%¢,rQF´àÉ*¥ýbUd,SZÊMÙ6˜¦_˜’SŠÊO¹)=% •¤2UŽÊU™W¥ªl ’NÅÃx8!keR"N·²VÊÊ]9+ee®Ì•¶ÒVöÊaÉ+%Yû•Y&¥bI,g¥²¬BʲY2KÌ¢,ñW°\–Ò²Y>Ëk9!³e±ä–¸2X/o9,·e´,–Ski8,Õ¥†3ƒRG­Kxiße»Ô‚. ¾GÈ´æå½ì—öÒja@€ áH`ºÄ—“kU¸" ¶ü¥ÕZ˜ÖM8L¦1ÝeÂ|˜®aæËH13¦Å4pb«b"L‰E&Á$™sÁÌ“ÉßBf(/3fjÌ‹9·`¦Í|™sb­›y3g&ʬ™1ÓfúLþ¦/…Ï”™³e¦­£É0“æ~‹˜L3 ͧ¹4ƒæË¤v2-ç´•5{ÞÖôQîQ¹¼¯Ù£ºæØ”h\“¤: Ç£ÌæÍ#›mSmzÍC)6ã&GÓšhÓGaM¹y6“Øä›o3o–ÍYX7wÛÔRwsnúÍÁ™8{Ô£|`Œ³¢áÍÅi7%§âì……óJNà 7wÔÊÃ`—ó¡qMR69!Z`?¯s‚)V:EçèdŽs ζI:Cç`9µ3pF´·:m'ääQ+û <Ƙ“e§+žK ü¥/&þ´ßj,žŒy¿ð—¿Tô[_ÈÓx®?é©<9X÷`5ïy^Æèù)µ³Cè“ÒŒ1bé ˜”²ˆÖÉHÉO¸&î¾Ø¼Ÿ‰ýÉ?'äÿó‚/öIÆ^â ”~‚»-É@À–ä”:Ý€ô™>³±4Sî³$ÆO0?±·³Ÿ8–¥ýIB¡e ¨‚€Ö1$e@égõ ß®6ÐAWÞµ8åÐîØž¹¼–ˆ†n;àµCu(>:¢¡‡"¾ú+ƒè¹C¢HAÑ$Z?—(·—Nô†NÑ"jà·ó¡W4Z–½óùÁNÚ0;iºÌŒš24êýÔ(c£Ì08À‚â5iiÔ¤ÝQ–G5Ú0‹j­f´=šÑúÉ32‘*ÒDJŒ@#}¤‹4’BÒG*“*i<1yò’ZÒˆçïJU"ý¤Št’:ÒH JEégѤ—”“¢ÒMzHAé'-U¦””†ÒQJIW)&µ¥2I•ÊRFJK©'•¥¦Ô’²Òˆ'L/)µ›fH‡¢dŠLOúq t2bJfZ*JE2õ:ègž@SÍȪ˜©2•G,™:ÓDÊ@¥éªº¦ÕtžPÓlÚ@¹éªò¦ãžVÓRUN3ã4KìtZÓm [•<]¦â´šBÓ Ái 4ŠúTâÓ}º%íér£“8 ‹ÑµÙ5µ*ªE½¨5£¢8ÊQ;ªGµ¨×ð£ŠÔ‘ºQIêG})+¥ªÔ•ÊR[*t©05¦ÊT•úgªM½©-µ¦âÔ˜Š5‰ŒO¥RJ U"É~êO¥hF•J¥²¤J&óߪBµ¨BU"ƒT§êRª*MŽMUTqȶjU5ªWÕ¨Õ¤JÈÒSiÄk«ÆÃB¶2›–o5®6L¸JWߪ‹«uu®âU»Šëj^U—~•¯º­½ Wõª_½«µhJÂ*Xçc5¬x±îÕœX¥fÚz¬€•°¶U£i5a¦ÂÛZn‹i~VÏU2;«eu[ hòÌÑšº¦iU¬ÂkiUÍÕš¶RëÎ4­Sn5-ÑZ[•1l­¨•´Wà:·lëÕâq¬ÕhõVâÚ´Œ«TЭBë&WÙ:\•ku¥®Å¹.Wëš]™«ÐZŒFÏp†×›7^ÛgyÕQ>/sš×¥—óΫÎ#¯ìõè}¿øZôè+z=¯ëõ½öÖ8ã~Õ¯z¢zƒÖÕálT6H¥ÎÙ ©ì¢zœ–ÊÁXÖ_û”ƒ]y¿ZX KóÔk~e_•ê½6ªði_•ˆE°"¬Âò©K¬ëb€n¾úFÕ8ÊbãŒÍ“»¬7ÚXéÊvìmı>VÇþ¯;cì ,²ª1˜ùØÑøPY§Š¨0…Y'+9ecIœWV"S¶¬âq¤òÌÆ>gªÈ,|„kg–YyHDú\Š@it³™ÅJú;9 Vš ‰D†$Æ“"ölŸ}Ö Ðš#`%™Õÿ4UDÑV¶hÿAu´FªÊVÙ,›e_—õ²2³Ä>Mk̬™%‰Ì Ô²Ù0já,A-t–ÎæYsg“Ÿõ³H ÐÂD#Ð\í =´?2‘þÈFÛhƒÀ£õµFÊ陈a+–d±%¶!4ÙÞÏJÃl'(u"iζÙ6Re›lÅ’µ¶¾0§][kKm—m´u¶2íÛ2[ü‰?·í° ›Ç–Û’Û*mÁ-´m·ÓvÝšÛbKÒÒ­‰XiëÖ‘ŠÛgËÑöm¼¥¶Á5fX÷‰<ñ¼Œ*¾þÆ‚;p¥ŸÀí°í•à~Fƒ+>M£¢²²‘ánXòçb»WOChi¬Í“‘[J.É=¹&7å’\s5êÚÊ}¹*7æ¢\–+ÖìÕYóV07çÊܘKs{T[‹‹;Wç ÝA»­Žé5M¦5éÊÐhZᎮ7UºPwK.LoêMéiÔUº Óé"Ý¥ËuÛX…£º[WéZ]šuÁ.2½ºKwêj]´+v@Ù]»]7íV8 Û£º•ÝueöîêÝSõÏnÝÞåU}—V¹¬¿;'¬|±Ÿ0Æ‚>9û„›ã…šŒµ;øx/# g6Wb2^È[y#o›¼›·ó ·ËË϶Õ}œò’^‰å­(o꽑wñ‚AÑ W/软×ó”ú±Ö%é«p)Ë÷Z>àË…¯l[˜ÁWÃýÞ—|!\<¾ÄWdßÖ†|KÖôEm¯/úö^å;|UfÕQ Ðè 4¥3°ŠæÀB@là<eà Яú5 &â=)÷»~g@Uh¿éwýΠ$è¯QÀ ò—þŠ·Õ/WÈ,š¥ÿæ_®¬ÐüÍ¿EfTàŠðÈâ.2D%)`õK"Êãæ2TªêÔ7þ CÀ:<†&P2ÅxC¾( ‚H‚8qæ×((¯PšDB žÁYh¤æ@D@(/˜Aüà/0Ü@€_@“œà#œ„EBN@r`|År‚ÀxCî!|J„ƒõÅa "À ¿!2Ü(ÂÀþa˜"œ¡ß’Å M3æ€A6 *\@EBü÷¯D(SZ!óFL™3\ÀQ£"”(A% 6et€xA§ œ0dÔ¨ãŒ4dƼ±©²Ä9eÂÐy#Gf’9l¸!CDN˜; Ì0ÁæM¢G“ÒIóÆ ¥1ALQª¶ 1FÆ ¡C1b€F¢Pœ)3GfŒ¢B¼NMãæLb<2qèÝ)D » nȸQ”È›1uÚ”qCÇI™2dPK!ìUÎÂ2Q š¢óçУéL©›4ªY×q „l:£ÉÔ^Ydê¡¢IÏQ0'Œ23É|™cçKG5 ÊàƒDj3 Ô™SF™4cèÌ|ujÕ«DàËŸÑ×¼~ó¼àÑŒGt¤÷‚ç%°‡Œ‘a^fô!`„¢÷BŠGž… R¨À Fá jEˆçØ„‰{´Æ–E‹"¾ ÅÊñhá¨áC88ÇaÀ$äˆSÀÈ*Þ(`‹/Lq„‘eÐq†Uy,ùR8H‡Un@ä”9Їƒl€ÇVrœ!†—jŠq›nbõä–at‰¦†c8š×-åålÚ{p(…†—(vøŠl°áåXjÉå¥r8¸%aK!uéžVw—‰îñ›Y¾ª™®Z†o0†ê{<)ë@ÑñèŸ#¶á`oê*°/¸á «w4ê«—nàáà x”¡—î!±Æb›ª²ŠlœbdJ®P]Éá%©¹¢ñÆë’‘)aÌñkˆαæÕŽ´m±­®Ëî H‘G­¤øÆ[E€Ðƺt9æ4.¹’J!'‡ ÌAGfh(FIÁá •5x1iàQsØÆthÌñ@•1"APa„EDBH#©\Í6ØòË1Ã1smŒH_È(ß<û ´Ð#”õÏAƒÐuJM5wŽŽ6_oퟀ ^3áP×Ý+yó-yy•‡ýæn;›tçˆ+Îøˆ¦–aµÃJÉÑrÙ4-<»Õ¶WK¥³»×~{‹E%€$äàÆmrLÇÁŒÉמrdÅ” $à,bˆñ#º1ô OÏÔ{ñÍ´<Á¹‘/ß`òµh¾{ÿ ÈXøÌ;テ $@F€/Ø^÷¾Ç•7„ABeˆCÿöp°·t .péÃÅç> & f`šÎ–”œ…![ ¸Xu†ŽUkyäC‡jÑ!ýãÝíØGV ôQ¥@&ìH-CèÇ8™¡©ð ;üà:–%*ÀKTÖBx´&Å„Ká AÐB.‡Rðá€CáU‹†51#p¨²Aˆb‹cgpÄ$ºæfM4ã‘õ2Q‹(<" ]ÃØh<¤ rˆDºõð‡D‚#ã8ŒD‰LLã˜føF/¥AFƒù‚U<Ö?ŠPO噃„È€2”1ËÃtÐC"ÍD•Ö:Ï-ËÓ6 Ý+½DO^ðIÁ”A 똞$Ô†:Ðí 8 „p”4`Îc¶kLÙ0TvLB[èfGb¯q’mŠh¤vŠ9dšA…Iq¥x°É˜3( dç‘¥OÍa ¢¬—ÆøGË0Úòå æ/s)¢aêÓÊÌL4É0MTóš›Ôf‹¸éM3$‰= 'VXα-0i€‰EAyÌd"倈ƒeFíÙÀ|²ÔŸkØ#¾¤æÄÉá èbJ@IY=uŠGó#ZN\²Ò<¯Œå,k9„[JH¡åe†ÌþᇠŒæTØ?£“¥¥#=5ÚP³ò)vH×jÏUœM§8IZ“&à¨e5*"‡ã7”Aýé(ŠT½a©xMå*[UȲ/ȯ>ëæSì,/A~|¯ÚT$ u¿3cn`XªZ•¡ïÌ*ˆ¹ºUÿu&å•®uqI]hb—šÛ¥«w™*àî5Ž%Û9Û¼ñ¦thui4ü¼h@Ûyз5tC' A4H«¹'6êã°’ZÏ&ºÓ)µÿ]êìµ-@tlc#IÒ?0k’ÇÎ;¤‰ ZkɵòlåaŒzMµÙIÎGKìg½rš=à±ÅËz 5{­'ÏšØBZ©¶Å2©:‰Aë)Ϥ޶±˜1†”Á¸ß »,u{cUꀬ~j4#~R®Êg3 %ù¶Ó眥ăŒ³ü‚²@ˆ1+š/²‡G|›þëHöðEë’ZϵÖ\­jé»)³¦€ ž3ëz›ÃÌÉ A”ZMÇu_¾Ñ(¼»2ŸŠxd7_Y3‡±Ê±kÙ×Z/ÐDºÐoè°7HhuÃ… Ž ÊG* «jÍq‡»$ff‡xÍm«ËXpZ“2ƒÅÕ]ñ³¯}•¾„ÁÛŸLßø>éHHÁ÷,ô¤1Ie¬67e‰œ6 O>ÍÒÚ‡5äkXÞܰÀ™x4}zI;Úë®vÑOt•*ǺÖ7ÚFÔt,ëY Cú¨+ÚÀß öŸ—í4oì¨>ö³w¦Øjý¤ÉW>¿Ëí|Üç¾|»›»1ÎÒ[ó9_öD9Gd8ä!©4µÜj&ŽÙWãyÂàLMöÎ<†/S¶£æ¿Q÷Õo¡.vç9$ˆx/B©VÎ]ݪëOômá&[ÂXÑ&#"v²u¢'Ä%$nöB€Õó&\¡##g3ä“’Rt³%x1”˜ ¸˜Ioå%è#x4%x‚/ú§‚1Ó&Èmƒ³1ý'‚È3eð¿ñβ=0ˆ,Bpƒ+Ø:hØD1ná(ˆt„4£„@h_x K{à[ׂ,ˆ’TƒR Ð\fÅ8 Ð…"bVw !nˆf%mІ-bVlp‡s¨FÅ,Û㇂eT{( wÈ-­"ˆƒ8l.Œ‘ˆƒhTqGŽÈ*K¡ˆ‚ňòÁ*öT‰x…oÀ(V8†pp}èa @`ÇEâ!p Co`OVÐ8ƒ†!q+e@ n°x#b{B‘Û!#•ò)—>T²£1Œe0ÆH7Í%ŒVWŘ$l€Œõ³‹÷“,ep–sð`÷n¢A„Á…;ÌòQ‚Žêˆ`H%bP/Øé(À•<öˆðh#ܘ>÷ÈIòÈ(2QâŽáØ™™Œ2‚0ÑF—Œ-‘I)ÍUd%£<:3Eÿó">VWOá¡@S$’oq‘g`tÄ%ˆ´0)Ä, kuD7ÃÅ^ “íÈ“6bD²¶CA)A|g}4Eê¥^LY}û”mÚ¨F™0$b#N0&)Žúè•Ã…•á8Ž„aŽS‘„M]‘nöŽÐXŽç¸kI“FW5”_Ù+9Œ.iY>éF‚ Bé^bA–`)t¹—GyØ–‘XÖHŒs0¹GTÒŠÉ_ aï´ €# 2@G/8¥yš20[«™0ðš¨Y390¶)‹4›4ЛÐ4›‡aš©9³)¶9z±š|ñƉ2¹‰Ðyš3 šaÀ6°œ²ÉšÛ¸¹š§µœ¿Éš8°œÃ©›Õ›È©›ÛI6›‰È!tÚ1@2N Y3á+LÁyü1y {¢3̙֔3 ˜ñAÐf®w& ÊŸúíAi01 Ê'×± ê %¢•á cÁ©!¢ª9¯ñ•"*›E@ È!¢áY m0¡àÓ¡¿YŠ8á30œE¢:Ó¡8ôI`£K:›å¤;*¡0ñ£4€œI0¤Ê¡4МI ¤ J'ê)º¢s¡šO¥c*›OP¥=z¥cžOÀ¥E:¦¿ùb:Ãùgº¤4ФS€$>Âys1¥UÀ¦1PÈYpê£ Ê3Qvº¡‘z¢U°§5 šYP©Z²©„Z‘ža ¨5Pž*§‹šžž©M*V¢‹:¥TO jI¹ù§¹ÚœŽ÷.†j'ú¤‘«ªIT«Œ1`²éo²7¤Ú¬á™£‘«¿éhÙ”«ÃÉñAÃÚ¤440Ô¬Suð#Ú0± >1誮d o0a ÒÍyu‚²ó#õz¯ß÷úšR8îÿꮪ9°0SOl`;‹°Ïšîžw殿éëÑŒ±î:œÉQ/ ÓMJ/g0ÕÖSJ²&;¯o8€œNc;Vg¬ƒ *ýy¡ÈíA'‹'Ú(VÁ'{s³ª‰L•’%7+›ñŠ{l‘7žM‹ò&µ.û›U˲û:.;œ IJI{³Mú2Gx§.;¥1ëŸëv J›ý‰‡u1ë³qÛœè *àÊ›·'ÚLq›°³º¤9Рq£1Ṫº¸¿É«‹;œ22…·Múme@«š•?"{4»Ÿýá8ÀA¤–ÊÍY„Á³2[m|q¢%ʪù¢ (£|!›ª‹®¤1¢žhPñA¡"º¿‹ª›S|1œ£Êy|q¶Ž²¢;¥c@»1ºŸq1Byе "y1I‘¸:¾'Êfi¡qJ¡à«š¨Qº]н²¹‹…‹½á™l ¾¿ éË£ ¾ÃYMz§àÛ¤ŠS¿à;¥]A HÂN‡šÈ©±nÀ±¨Ùœ¤‘R+Šš'j@仟©9ŸÑ¿Vʾ± ¯z›3EàÁÇË*h$èšÃy>$ÁèÁM‹l¡?‚Áåë¡f¸¡5Kû9¢GòA¤šš'Êfb/E¬¦M :©é¦+œšáy>þ²RÄ‘k©!#r ¼G:u¿3Фuà¸à“šSZ'œ¥d,¦±ÙœaP¾d* o¬šzмûI²ùKáÉ/A8ÓÇ‘K·§¡»öG‹}Œ¤x›M 3Qáı9¥¡XÉR̨ \¾’*°í!#S!oÓ¡[~d˜hû¹©3‘ù ª3Aî²1«žY:ð™#œIŸ_0yÐÞC7¤™Ë²ËÚÑSBÜ%{k Q²˜YIt©2i )šùÑ÷q)ð’z©g†à \ó™ÚqÍïäŒ,™Ò¨B‰’‚¾ ÌHÔÍ ôÍvÎí8ÎÆì™óÌ>tëÓøÎ·¥ÏÉÃÏòÙ™õyŸôâýŒ×ØÎ;4•PfÑ}"ŸåÜ‘j™†Êì1ÌìÌŠ9Û1S ’\15Y'g[2öý|Ì%Íõ("3íÑ‹9(ðÝ<\ÑÓÆ•ÓaÉzAG-”@‰ AM(IBÍ ÍËE]_#gðNÍõïtÓïôNã| ¦—[ÝŽöÃ1ãÜ–ä2Kô$ )™O™qôNvY8ô{ðÓÔ¼ ¥ˆhŸÃG †Æ¬Ó^Ù"]ÑÀmÕ4}¬…í× ³d%#Kz×rÍÒF7[¿7[wMB-W<—#²4Ù]½ÒIׯ§uš%xíÙ‘&"[Іs0ÙÚ&iOD62B# ©Ò^ÏýXg"ÂÖ6òD ДT=¸sÕe’†#2ÖþèK½Í1`¡býÛâfíÛh \l–ImÜoýN#QÙ¥]v­ÚœíÔt3ÎŽ ÙÔÛ”MÚ- ˜ {©=éן­!´=ÚsmÞö­[è­1úÝÚèñÚ’=Nßœ¨à¸=#5’0¼}ÐÖÝ"Â}¬í”‚ÜT"|ý¥/²‡dà#oá+ð‘y†¬+ˆFîƒk¹±+§,Ž0›è0 °H ñ“  8`XmþB7³ƒQS€:UÕ-@¢uáÕcCãë}!.·gK^uD¬ea u`ø{RNZE£rþ‚ˆK1mÂá9- r\mæH®¤¥<àÃSዌhåë804`¸Ù2Àç~èÓÀØ1‚~9ೕ~fr£[6;‰¤FoÙ1zNéâUC–þX[ “´–>Á d#â_:áèpáÇaŽ91 }1ëÖ¥ÒG¬R54±å{Ñç²³Nå;gàé‘Ô~<[#q‡ä3(#Ê-À®C91ë|Ý|Õpþë`Þ5¿Þ €dzc;ÆÈ2vð#Ý<±Óey´Iàs3™Î•ïëõé u·Ø³u8à¥.§^dzʬ>p¼]±>ë´N]¶Žè ®ëWnD#Ážì·ßé‘ë8ÆìξÐ.í[í}qíÙŽÝ~Yý‘òàŽ¯XLóô‚ëNó.ÐïX‰éסéNn~·£^ø>I7°ï70[¾‰Y0`ê9™êß[ïê¶ð ñtóðI’èq$ñ¼Nñ¿þåžñÄç[ßñÆññ!?í$Oò'¿í+Ïíß.';.îän¯dRóíþlïÞ;;Ÿ÷òQïç'ô .G™aô³eÿðïô?[ÿêp!ë _ërëZŸì#2ñ¾Þ`oõ™V6dŸìfßìÿòRíjíl¯[(÷oß-?î_ é‡÷7ŸIN$ï=Oï›ôÕ"øù^ø±Åï–‘øK/ðM_ð«îøR¯ð’ßð‡õ¸¾õ™ßõ›oñSîùú6¾ìg_úi?òªoò¬ïöÞþúþ"÷á.û©1˃ ¶¿û8¿÷-Ó÷·øAïéƒ/ŸG?êïø->åõ˜_ÂS9Toò9¼Êñr]õÓ:^ó]¼*§iÐ÷SvÃã¿Ó'òÇÚ#Ú.å‰À¸§uÖ¹k£1Ä?Ù¡÷|Ÿý“.ŽÓÙ;àGô ŸðS|ÉOÕÀVwaÝóë ð-X¾ˆ÷{]ÅvÙ‚>ŽçýH߳〩ÏÚõ…¶7ÑŸ QtOoXu×1l Ìy|O÷±À¿×ûtþ ~Eoøý?@ê`|zQ¯F¾ªçù¤ßåsE0b?0§‰Ì€ßï ºÔ'þ¤ ¶+Uðü¥¿˜¥É–±&HA ¬@wçÅ ÏË5î- =—ýßlùsJé¡:!_„~Wf="¸ë àõC‚|pØUÀWöš Úƒ‚…°äMADèúád„/j 2¯@&a Ì}”HçÞË{ x` Äš¨ó,áZÄ„3ð Ö@58[袴‹ND½ùâ7ăñÆrèÏ!H „êp$¶CCHãaJ†ì7̼20Á`ý»‰Fo :Üt‡p¢Ž¥Å(zE/ËRŒ#e*¢Å¨ ñßïÓŒœÐ^§ÒbIbD¼‹¢1/V½½8ý¢æSäPìÍBÂh 7àaÌ…«ï$úÂÛèÍ]’ †½‘þÅ;µHÙb&t‹ÁO³¸?÷ÿÎX…/"†GçG£Ÿ7¼ƒ\Ï¢Ç$ÈãG ‰±‘~Àw¸çcc wc€Å™˜•"M´ŽÍ0@6:9[¶c]Làññ‰Gè -b_ĈçqRHõhE_{‰²$ÖFÆûTâ{p?bD¶‡‰ Odü›ÿ HÙëä5„‘¡QF2ÈñXË#Ž´~2òÈÖè#Ñ¡a”R1š?yÈ&c¹#kÝ1I›r@5Ä4šl†äXcž„&(#9vE¤ØIËslŠOTLÇ›è'óäÐŽ6ÎNò9G(¹âQÔsIÑ9ŠEè˜(Ï"RØy9 QJHYï$¥¼‚òR~Eg(7%¢4‹Qqç½+`ãjªÄM—!U.ÇLÙ*ÇbtT”Ÿ’cØÊä˜+‰cf @KWJV[\%Yì”±RXÞJË@*ef˜–ƒSÊfé+¡å¢´ Ó²XÚ¸w¥”¥¶d–‡òYÂÊo9,qeµ|W6[ªJæˆ.å¯ô”i±]RK>i-‰•¹\•`‘[rÊu,Á%±|—#A_fK€9Næ«”ŽS_ŠË;ô®Ä夗3]ÞËhi0Ý%¿|WWñbòJ‡©.!f¾ —óQþKŒÙ05¦·ü”ë¡=$£0¶—› c‰`ꌢ@¬Â©6+Á3ð¨Ü`PCp˜­á5ë‘0Î$;´ C“4ì†ÞðŽfÒ,ÔŒÃm‡îðà ¾LM  4ƒP”70Và@Ð¦Ú @¨´‰Àøàpu@7í¦0Àò@ðMê&Èà ìƒÀ€!ä»Á ý@‚@<ˆœ“€ÅI8è»ÈÐié$á  T0°:@€€(¸ûÔÎÛi €î,Àð9mgè4žÅ³â €î¬žÒÓy„뉲'õÄþ"ƒå @À?€Í“x*  9€`P€š' ˜œ  €_@´.àì‚w°àÁ<@›ø)à Ì@$ø‚ 0e` @ÀV†€@ð ^Á>ÈÀ`Ð=àÁꜜ ‚ÌYÀ`œ° vfPƒ0®'Èž3 ƒë‰²§ä4ÆàzrªDg`º38ð@ä$œE4QÝ9€à‰F€(:0€î,@ÜopTgää¢0à‹€B *+µs‹ŠNHç°ö`˜Q(*: @¡ 4O98Ó3Š2`€Hmgm€ ‘V(š"i"5À„?PD€ Ф´“~R´ÙIÙ@攢€À¬ÍºJÀ`Ad@Âç0à -à>Y( +PD9°›¿àP‚}à BÈŸàø`r7°›» ü‚tÐ ü7 ¦€@ÎÚ è3 ?܃J`ˆ€*ÐaÀð?¨€5È< \N9,´|àÒé;¸Ÿà¬ƒgÐîAÝ » |‚oð t3°‹ón‚ƒ0žèè¤Us`ÀiHÀ“º8Qj ,Us€A`I1èâ À€ÒªDy(¢ÓÀzS0Ø© OƒðÁÚsƒpE  |€÷yEÙÚl? üƒIð ÜÀ Áøà ¼* ` (€J V%8«ÿàob‚xPܪp9 ôƒ?Ð Ì@SÈÀ¼ƒ>²'`à¡:Õ  à`pòÔÀˆªè|ÏÀ³€0*+ €ª¡ ,Np`pŸJõŠâÐÕz¸ÁÀ›k5àǺZ€;z5œ(0[jq*Ö<€Š«ÙÀ©^ÖÌŠ6[jà0µºŠT~°RI©è´8À¤Ñ° N9ŠúÁ!pŸ€4NàΨqíà àƒ# @¿¨¯|øpð7Ó%¨Ì€¾ÚWàÀ@@÷àl‚o `(¢àÀpYÉ'°„´`‚FJH?#h¤ ŠzgÐH1@à 0Q@UÑ@%` ¸O"UñÀx-±@¿¾s08a@5­õoRyøæ‘5ØàÁž ܪ€pXt¸(ФQ4˜F Âì,h¤x`r €Yp^¹ìä$Ñ08AÀ›ÍúõÜ‚ÁÞ,ø›U@ N>àg¬˜ssrÀaAT¡Ó4R:g™  ‘r€ÉY*©AÀ­þÉizuŸxURˆÿ¼ÀdÏû X ® œL=©5 ƒþƒOà V-Dx®­3ѶNMŠ;™-ãt¶ rp=Á䜜 @ÚW K hž  n&€að ®x¨ÞÀÀ‚æ Äm0àÒÀ€?VAø¶Aˆ[ˆº~ÀkßÀðƒæ ê&J­µá•¾ƒ@Î& —ÎÆi7‚ÍŒ³q‹ Þ㔥—qŠNƹqC®è€q¾P“KqçhŸÁON”ª,=ÅS€8®A@ T\‘Kq€Ì%>·ã€ ÐsEîî@ìNŸk|AØS×éc8ÀйE7À\À>k­3;`ì"ÝZk»)·ÖFU Tr;VaoÀ‡˜ñäp”«½ Šg7€á(Upx/°»TÁ*`…Y$jÇXˆqt…:°Ž €•€}ðBïÂÅ ¢—ôšÞ¾éJU/>8½V@ôÒƒÒ T)ê5Ç`ö€Ú9Yé!н¼—p¢Ðð{i¯íý¡Rôßã‹;'xúÀøNOÜ™Dô•¾Ú³Ö&Ñð¢ïîµ½ÔzÐ}±/ñ àx_|ðDÏoú´WmjÏ€üݽò÷üÖßû«N ­­¹ö7þ"PÑ Žÿ•¿34„€CÀU)  XcP:0þÀ:”‡úÐÐDE'(¿ß×¾JQ$TApð%¤STt||¹¨àú†`>@5¢2øGQ:ê|Y°ö£=Øûê`ÑiHƒ°ùU¤Œô’H*I)iM¤˜”rRÍ™@>(½ø y‚SP…ÑAéµ/–/ À°æÃdØ €c:†¿ð‹…œÇ ¿ØzÒpF µ —á;LR­0ê÷ ·Ô”Ú]mªæ¨ÙÕ €™ZSyjNõ¬=õ§ÞƒÀe1(<ÀÂOÔ \âЛ‰71ûE›žø‰Z[L ŠI±û Å¥˜kWîû \é½Z8£’Vpà‡aqjͨ­Ôâ,¼ŠkëØÅì6£úÖp ^1/6ÄXVmc‹í&tÀx_WZÌŒµ«¸®…x ƒ×€°° }±å•{cû*Ü«8½qôÅâ×CÐÑ19°Ç ãƒt¬9ì9žÇáÂjN {é±±ýX›XûbWìèŧ×ÅjÎ{W/°± ¹»ÞÓëc5'=Ù Y™ Žë­¯/Ê6ä×K޳ìHɇ˜ œä.kDǬA(³"uŒdŠŒBeòG(4`d„lì¬èÔÉYt¢P6à‘y2 ´¢S%ßdjf²A€´¢Ó8åZ‹Bg@4~«(t\åM+:3À2ÆÂÍsÔŠÎð•U1 eÅ,û_JÒ²-6®(ÉãkÛGw1]®Áv'·Nçë:K/? z9ùÖ¿ ˜‡ï!Ìà/f⋘ùA=0á÷6æÇì>Yé1˜ÌùVôbfPp ÂØÌ$@3ûeÊ q è!|®Ý‘k¢më´¸ãѯÛ8=î¥Í¬¹Óf”«rqóÚݹM—5€wtqsÑ=ºI÷ ,ÝàLq €ˆºY—53zpu£3ŵž]×83Ëx€â­µ×;CDyLP-1.10.4/DyLP/doc/Figures/dualpivcalls.drw0000644000175200017520000005520711171477034017253 0ustar coincoinª» €7)€ ˆÈ sÇH6eb P%Ì™2SÒè)ƒBFŒ.r°q#‡ )XL3›0y˜¤³ðˆœ7uà,¤RK!rêÌAƒ¢I*E¤!† 8p°p‰E 0R„¤‹]È€ãêÑ¢_Zö«<ÞˆQフ'P@Ø Ã&Í7m¥$9‚„ ºvñò¨ 0bÚB‘÷‰*Iž8 ÂÙ­ J¶[¸dbnÄÔaƒNÛ1@ˆ&]Æ4§ ÆÌi‹BÈ›7kÚ„q“"¶™¶mÊIS§ï0›A.,BÌÉ1kDÄf#‡v'G˜$™‚¤÷I7gê8,Ó6† ºç¬i«–­2y¾ÏN;oè ¥S“Î:r”F_”á>(’.Á$ƒ/Å4Sµå´SO?5XH)ÅTNA% 7ØpÔ 7\uQF1hD–UbqèŒf¡Õ^[oÅ5W]wåµW_ñ(a†!¦cP8™d”Y¦Ugplv”Ÿ…6Zi§¥¶–¯&m¶á¦o¾'qÆar<,§Í=ÝtÕñ€ÂuÙm×ß…7^y祷^Zk%8`nì×ßXà .H“MêÄ“O@ E”XI-5ˆOE4¸`ƒ 4¨8ƒ 7p5£Œ1¾(ãY„²å\rÖ#La„_º9e‘Ÿ-ÖØc‘MVÙePJ UfpT¹ekYªv%µ]Æ6›aæ¶[ojš9\qÇ%çfœa@'ÝÔY‡vÜy·›ŸŠ^ê±Wè{ÃÉAF~häGr(j£h ‚ Š4éM^š¡¦vúaˆ¢²@*«3¤C 8°êª¬1ÆZ–U´Þx«ŽÁ¶Õë¯AÖ‘‡‹¤’É6É,´ÎRÙ–•¬¹†šµA—çå¶µÝæ-™áòܸi®iî›èªK§»yÆËç¼âÕûZ øz£büKGÀ̘ð£ KJ!N–b˜é†œzø)Æ#n|jªO…ÜjW$ŸüjŒ)ºr®Bºì+°6lÍG»¤²Nb¦Y›Ãzöó´Bky­k°}É­Òc‚û›Óg’«&›n2ç\ºs²[çïê)/x]“÷õ½ùÖjh|c ±†}vìŸÛŽ.©ÃsGl·†›eñÞ¡ö]ê _%êƒnxá(Û¨xŽŒËÌëã1ïJ³‘<›$²L.û$Ïœ?ë9h WÛ¶¦Kš˜¾U&ÖA­\mz“ìä´®vÙ OðÚSŸzg/AéË=ðùÂÞà3¤Am } pŸü(a̓TƳUêB˜¢^ÅôÖ”ì-h¤L䀫(€ 2Á ´Ò½§ÜÀ5XQ€""zlE¢ZPC\H7N oÖ£!¨DtÃî°‡"Y¢¨¢!&1Œ2iâ÷žX©H±…<©¢ÄîV½yª†\ Ý Ã:ðЇbâUtÄ3þ0GäÇÚ8"RQz1¤XÞî¸ÅŒ)`}ü#Q0FEÊÀŒJD$y7.¨ARÀÃ^8GNòb6ÔFP¥‘¤|¤Eâ£ÑX —8[¡oGêÓ _ §¾÷ÙÌr9³Ÿæ¢”?Ÿñotþƒ&‘Ö­ÔðihB`ìà4;«Ùkܽ|gà‰m_‡bCFC‡4¤!Qk[ó¦B¹QJŽÓ“d)É·ä T28‰L´ÂÎdºdA/q„+`îêeÄtßäà'?œÕ/sÍj&´¤%Í¡ý¯tÔD›†M×I-çêf툻¬Ikú…§€9Œa7FxƒDH—$¸a»!ÃN8O¸=O•Ñ«[$±hGXæñŸZ(˜eЄ"tVæóeC[¶>˜qÕ˜•›ßåtv¿Íqf£Ÿë¨èŠ6M0‰”i«+iÔ`§@n2ðjÌÖ&ÓrÎtls(BÆ@‡+¤ál0¡ƒOÍ@ÔFÑ3nл'$¯XÇëá1cP ¨ 4FБô+äShVʲÈA´}Âzåâw3úangfí\´ÒÊVJ¤n \Å•Í×Mm´kàí ¨»­ñ®¯` `[Âöl‹mìÛœ·ÂUâs©•Õb?YYæ ³U…hy9ÚÅ9T0§ýêD)ÖdbgÝиd[¶âötºUoMJ×”Þõ›yu©8)(Ó°]px_ˆ ZX8È! ºaÃPãÙ6ǵºIµ"gÈÏXvw³O¡j.eÚ…š—«éXY‹Ì‹Â–™ñí3k»V.ÝW€KÓ¯{{ÒmVm¥ÃÕëKë5¿˜¦Ü`?–P?^ž…©kOˆ)•²vjÆb0h–D‚ó¬UÇ›PÿÅìS¯j)ÚÚ±*3£1æ(‰fã£å6Ç×lÝ\k×àâµ¥á4î8+xä±9ø mÈDvSâÊl“òtëY+kØ•ûÔòˆ°‚‘\„³O oÉÈŒUáØ´iVñzÃjÑ×–Ʋ•3}kŒ­Ws¤qÕ³6ëúcႳ¸|-rrÏéž›²a ‹æU馲H•ì•7üJì= Þqh¯Š¸òžÕ^UõšÙÛj².³ghñ¬é\k;ãÏ$ÕµoQJ5•ú:À69‡}à÷ÄÇ Ú³{TëN–Ú™¶ö–k2ä E8]#S[}).æªYÜ^¿Ýòý_}묭;[3Þœ·íýgâî¦Â6g¿3ðÀ3Ò($ø §ǃcº© o$&¿H™|,d9€A-Û¸I¬¬*éK/e#yÎÊ|2Õ²•ºýÆC:¥d)ÑfqÀt¯_ÄDb—¥ÔßøÈiÿëÛ½äÖ5éuO³J 7(»Ñ.ÕBºQ$T¿.–«}Y­ó‘è›´{Úq –Pr’ïc÷ûÔáXuìf9è]<<׋ŽÅKUïA„¼Æ$Ïöž»]Ÿ@/|æ3Ùõ%z~³I/å&#~÷È#ñïŽ4ý¥Q÷XÊ]ótw}ؽ úÇ×~ô·Ÿ|Ûwuíú~è›OüðA Ù{ö‹'}¥+?ø¯h:$1#‰Àwv—eööV#7„ëd µ3ÛxE]kn8Çš¶ëþ¨»q|ò\§¼Ç¼ÆrhÀs¾36étS¢Amwa7äGvPsÀ}—zY>483 ~yw~âzÔWÑ1HD"â7jcfIC hoç|y´&Èe X#8‚7tƒ(X$RH;È‚¸‡Jbp§×|–G@h·m¤Öm·~Áô#•Z…±Zóçfï[ú#có…-#×n%÷ný·_{FoÀåM,årC6h¦\èDÈówð€T¶}‚w½÷T«"Ç6f¢6>äU…¥…q©¦qãÆjô÷fðuêF†´F:ûwk»µcüÅg½ÖrB6`È%s4¥dss ù±Al ‡”m–ÖJ¼Gƒ˜ˆƒhà#f;Xbê·ˆÕˆõˆWn’†Î4†¡Ãn˜x†ü‡kj¸kþåg‡¢s…Nñ!wsò4e¯x>7‹Kè‚s×z2{‘"§r{³‡éHˆŒTz2(Žß§GåÈydÇ*·X|èx‹¤wJr„&‹JXcDv„Ã="sˆ Å‹Š˜>»"L@¢f[Èf-æjç¦Q!§VÊh4̨‰:&WÐXoÿõ†¡(hfdtˆA¥` æŠÐ†„Ì—]ã8"v÷O£á#…èWj*sq¿nŽX‘ä‰_ka(k–Ø‘m…†Îȉk¸r%d†’£x”Û“7VG“õx“4“†8qSXq?i…A™…ñ'Œ]è^/rb(r—è‘’yöýE’Òh’U©o„¶’&TeðN‡Å•&m3yyªÇ]d“WQˆ i–=I…ié‹èŒZH,è…q©‘sÉ‘ú÷‘o’ò€Ñè†T™o˜Äf(vø`cPk€˜ò؇3X“«‡x×ç40–‘éw³W*¿™“ ¤|ºG`‰yö|æÈIÄ œ1P~ìXwF!ˆ 9D3@9€{à˜„ËÙ˜¿ÇzøÆYbä›ÒÙDI„{2©œŒ™ðZ4…"è— ‘™)”ÁH” —šJ™Œ£y—¥™—<¶—md¿örD¶o¤ˆ€ñd@:t‡e ¶É‡áXÌi:ÈeöÙ‚#ffj¹Ÿl)9nÙfš‘q†KY !•_Ú‰lØgªÙ q˜’ü†dôAeðnðN ‹óè¡ ¢ eÚvŸ‰˜Ÿçå8ü¹™\È¢碔ˆŒÑd_™x (— ž(€~Éšêš3G.ÉEúž_ŸÛ¥¤cv¡F™%Ú‹ú)¥)ºboy¥ö—”0J ·Õ¥4ú¥6*•}¹šX¦søšþökBX:µ¦^iy„'Ÿpz4Ф$ŠŸçs¢x *êŸÃh”Ÿù¢•¨\Jšƒê`z£Ÿ8' ˜‹:sñ‘N@*¤‰%©Š Ÿ•ú¦!:šº‹OÚ©˜ù©É™£ê™jªZÊe¸ŒºªÏ¨r8•:ZŠ•Vse9 žnK—zvsÊ“uúQÚUy*VŠ‘}zŒtÉ”¶æ¥¬Z¨Õz¨×j•ÖXhØøÈcBÞZTTv›žò9ž¼¹Dëø„Å7–)ˆ‡œGаq}Á' „k} +~Óyœ+®½ú|÷¸Ië=·I ‹|í9²‹Y²y¤°Ñçu)Û±$èu-KJQx”‡›ôÈœ4›±(p³[á±2±³30±0Ë« 'žûœF»²: ²3>»|N‹{²6+„8ëx;KL›µÉÙ¦2KŽÎÉyS‹´(0¶X›{;®3µl ¶G›³±5P¶r ´Hš°v‹²xKµ{˱5·ß³O+¸^»Dm«·I ²6À´ZÇ:5­±8„¹<¤RpbP‰{9°Y[1!!öáÑÑEž»¡;º[„0²ºB3 °«S²+º,ð˜ , voP »¼k± ºÀû=JÁeVA½«›¼ËÛÏ+wÑ;»N1JA3°µºÎQe Ê[ÝÛ¹¾+½£ #á„èËê»»½û¹à*˜ªk´º$„¹w@0ª¿eð¾Ë¿ý{µõkÑ·«Ë#h@™±yÀêËÀß ¼á7Á„S2°ºp@ë{b ìÀ ¨ë„WÑ*«+’aâ¡æ ¼¿¿;ºõy‚µt«Xa*\,ìÃòëÜ3Á@8–«›Äy XÜÂü;½¥+¥‹D|¼'ŒVŒÅopZüä „a»S¼¼dÆMlÕ ¢Ã[ÂÇ{pl /ÇL ¾^ÌÆ2L¶««SÌVƤqÆr È_\¹ÞƒÇ"`Á<t‘hn°È\<2P½1`¼"@ÉêÄA˜L»Ta¾ Ö«{h t0ÊQÊ¨ÂÆ[¾…ù¼» AV­ÁšË °ËwÑËA¿-`78—*ML¿,ÍÒ<ÍÔ,ÍMŒƒõ›*^lIÂÌÃtÀ`dÇœÌbÌ ¾AÌeJa\ÍîLÍ×Ü·§ÜÌËß\ÌEÁã¬Ìæ,ŒÌÆ\ÐüÎ=Ç]üÅ^ÜHÝLÌá¬ÏÈÌÏçÌŶ+Ð]ÑͱžV¿1 Ðö ÎcáÐäœý|ÍâË™j¾Æ[Ñï<ÇEÄÑ1=Ì÷ÜÐæ"åg>¾%2P5Ð* Ïàë̉ÓÞìÑù\Ó(bŽÜÄ;ÝÔ6àÓ?mÍè,Áêè|Næ"næ%Žæ–}è7.æpþ›¤þ›Qnä£^ꦾã˜-êw®ê«¾è]žêªnåRê1ë±né³þê°në>>éº~êLN륮éúíÜ ÝiŽâ\ñì!¶ÒÃP1íÒbÐŽÚÎxŒdûíÞîà¾íäŽí!†ÙÖNíÔníæþìÜNîÞïß.îñNîïÞî›î˜½îëŽïö®íò.ïôN¶ÿÎxøžî[ÁïÒÞêÙ8ÿðóñPñîÜŽì#®ì(ÀìŸ~I30ÿñòò$/ò!oò%Oò)ò'Ÿò˜Íò3°ò+ó0/ó,Oó.¯6_ò8ò;oò=¯ò,Ù3ÿó#ô!oñœ¾ì&Þì/CõRâ[õTßðÏZ¯õøNõ^_õQöRï+do¾"öbÙ_ÿõX*[Ïõ ¿ö`/õb_öeöSoõU¿ïþþöpoîrOõxõvoöF0ø7øK‹ïûî÷PÑõz/øt?ö†_öJOâLïéÿðN(é;žÚ Oí_ðþÎùBîù7úœ?ú¥úŒŽë,®ú¡Ïúöþúé~鬾á£ú[aûïï—ñÿßPQˆÇßíÈËßüÊÿüÉýÌýÓ/ýÎoý8Û¾òÙÛoöž]­âøŸ= MþØþÕŸþׯþÙ¯è¿þðOýñÿþ8Àý ÝýàÏý îþâøåoôþ ¿3çßPÜ'9€P×Ñ€¤À L "ÀA+ üðb6ø; Œ€Ð"\ÀˆC T{°‚À HI`DºÎ¢À¸%` °ÓÀVw{ ü@°òÀ H‹ ¬€Cð*Á%Ø“ ‚90óí@÷ÝŠ[qs|0À VÁ-¨OÛyガ vA08Ë ø‚¶M ’Á5hÛàä~Ï ºÁ(˜ñšÞÆ39êÁ<È÷`üƒ{PB@ø á „„еBCh!#d„‡Ð:BÌ ¡$\„—0fÂBx)a$¬„~pêA:XüPœ‚p ¨ÂU¨ ¯[† m¬ºBGáŒ@,\…³PÀ¥¶[Ø 9œ.œpæÂ· …¡/$†¤Zx ‹á-Lm¤Ðþ·$Wœa,LmÔÐÊBÒF k¡2ĆINâBná7$‡CNöÂÑ– “!/¬…íp´ÃÑ 5Š‹‡¢­èÃ}¨Áa:$mB Ä€ès\-ä‡ü° ¾¸Ô6¢Btq© ³!Ä}øClˆæ¸Ô6õ!<,‡£ #fDz’[™Ã|uÐʾG©[r#Ð%î:ç) Llt1®%úºZæFàJTq &^À›(- °ûu=q(îÄcWñ[²#€'î'xã$NdqT1×I<=—YœU,ŠÎmŤh¥âW$‹añÎÅPwßYd‹JÑÑI¼z8$Š;î..Å—è^¬Š~q/Îć¥bPÌ‹ÑÑ ;Äè÷Ž"OŒQ0ÒºÀ T€XК@]—Gà Ü€œÑñiÆ ˆE£gÜŒ°®ñù½Ñ(Kãj<¤14ú½šXc#¬ëŒ2:=Þ'Ú€ÜøÀñ7zÀÔæƒ#pŽÀ°8Ç!€G›r4ŽÍ±7î¾å(; qÜqÔ‘9ZGÒöƒã t€×ñÆeG¨ï €èñ<ªÇôÈÕãz|í1>ÂÇõ(å£k›ò?êÇúù£T÷±=îÇéÿ£œûî@*Èó(Ë£šƒABJÈÑ7ú¨¡„ŒÒ*ZEj˜!3äÔôÎBvÈ "凼$’Þ}È™äPd†¤ïDŽH©"÷\‹‘’FšÈ$ç l}ÝÎïy@,Xðô"d|{ûHþÈH$•dbŒqMÒÞ©Æ·7$äËŒG’J^I$©ª¤ãs’X2ÆõÈóÆÎÊdâ[€h’T¨É4¹Ÿ›,“f2N²É5I'ÛdœDw²ýÍÉ=©&ßä›Ì“g²N J;é'ýd™ä“PPÊÄ(¥£\”‹ÒQ"J—'%Ÿä“‹rL*!P8¥§ ¼°SŠJOYGå¨T†ŸòS·T)*1›24•¤¸ÁÊN‰*g媜•ÊP"²J!P*we­d•·’U¾Ê]9ÝxÛ¬¿ÒT7M‰ûøðƒwÍrÚ=KnçïÐ]í“xN2ZŠ>lyû°žéSÓàiËßÇ-ƒŸ·¼–52[žËt.q³„­1v@Öˆ9à¼ô‰–5ª:H/ ¼|€ýò“€FXÇ/áe½ü—0`ÂÀÔØ%ï弌³jJ|Ú(&h³˜Ÿ cnÈ+&Hm3d~ÌÐ&äFæÅ4™enL•É1+b5Ôˆ ‘´iÊS¨ i&/´™·gÆÂSè*o¦‚«™?Óg8 94ß!€ š9iîL¥É ufÓTp=3iM©)à”áÄ ‡¼2k! 2‡œÖÔš]Ó f¶¯¹5Ãæ‹#›¼ÒlBD´Y2ÿ!;LrhseºM‰5·¦ÝäšO®cžL¯y7í¦ÆÔ”vñIzÅ8Ã$‹}zÎHBIÂÉßžX¤w…“KÚEÆ™%µÞã x‘së%NÊ %çŠ}šÒ¾@ÑIg4PæËÓÙGgë,¯“u>ÀÏØ0g'ì´²ÓºNÜ™:; º»ºx6À8§æ4ž–yB…Ì™‰pŸðsª0?ë' XZøó~æÏüY?é§ÿ|Ÿ~²Oô9^Þ…ñ3~úÏþ)î§ÅŸûÓ2Ðÿ™@ßç]Ÿ4}ºÊ @è} 4‚.­ :?9¨Í …¶OÚþ<¨ý¡"PQA‰À»¼€1/‡æÐfHÚH Õ¡´ˆvŒWÚ’h=oLô³9ÑzDCÛ¢PSoJѨD—h‡“™M1Ä=EX¡=£h å€5ÊFÛ¨ý.i4ŽªÑ7JGרÅlr´ŽÖQ9šGõèå£q”úQ7 HÓè %¤…ôŒÖQAúG©=¤mÔ|ÉNFI3 (3“jRñU$[Ÿ%­¤\f“jÒN*%(µ¤¢4“rR%éIOi(U¥£”•Þ¾OjI%",U¥²´•ÒÒW*JIiðÛ¥—ô–bRµçKµ0奰´àÍLyèøj*tsoï"¼ÌT˜¸Þž‹ n.Žàq…˜i WÉÔz9γå8²%M"rNhÈåj˜äÎé8-§ms³¡Ót3Ýiâ"xåÔ™î;N!"5…¦\/q ¸ äüžEmD@›r=TËg=‰ÄO¢8% ;^dõ¨S;„l«zUJT7ˆR©,5¥¾T¥šT5ejK€<’¶ÀJXë0,¬õ¯"Ö¨Xàw$¬u±>ÀÈJX+¤¬’•2˶ÇYÛ]jów µ³ŠÖ§ÀðB+¶û¬£5µšVÑZZ³j]­°UµÊÖZ[kë³ #·N•¬Ê[Qaó­¼U· שB\Ap®½µ·×å:\cÀ<®Yº¢ŠæÊ\‰«týMÒµºR×N&]Ñ]r®Úµº^×ïšUÃks%¯¿5¹¶:óº\Çkvm®WÓkŠDµ™¸D"Þœ›sÈa6ûJ_ke™pS$¶Í3]ÜůûôlÎ×¼é2,%‰,À$n:”X ¬‚ň԰#jè`_œ†å˜ÖÅ}Ø‹a“܈•¯ÑŠ؎Èaì;±9.ÄzSc/lC̰1¾ÆX›ãŠ@ð±@6´Ø[å‚,±<ÖÃþØ%ëc‡ìÕrFöÇ:Ù¨bW”m²$öÉY&+e³ì@ä˜WVÈzYÈ!¯¬¦|KòbA4û%™¤ã£iÖ®ÙgàœÍ€…±vÊÙ7KgÛ¬šå³xÖÏ:@ðYíú¬t³~ïÌZ*‰hß›=´ÖïÁYAkg­¬³ ðÎ^ZÇgY“‚¦E€˜ÖÓZZPKi ¡…a‹vëyÉ·g>9_©µ’6ô…Ú k­Ý©]µ[ÏÕ¾ZZëheílÔ³•¶Öò»YK$u-£u¬p°×¦;bëP#¬S¼xPq7rÖÕW.·+®¤Ñ•ªKs·ï¨-½›¤Àô2jÛ‡7.÷]»¼¶âv—nÛlçmå]’œ¥§4Ý‚R%©)É—½ÝN⋺þ;Š>‹ ð·w?Ö¿«T‹À%=¸wÈ…Ëpe€Úk®œ5†¶Š‰›ñcR½¸F ©r„[~nÀ½½·Ú•˜¶>~ûoKnÀ­wàÜ•{pnÃÕ®moßIÜŠKqã#ÆÅ¸—ãšO›kz.Vð¹>W>FJ÷ú]%~lu@÷çb…¥k„nž$ºÇÕèò\¦‹ÐÕmºóqè’Wô*uáãÕUºI7@¾G­ ]¹n¦|¨6¢ªDp)ñH U$£Ïí<¸+ñhãS˜»#0îŽÀ·›wÛ.¾ä»Pï^@Àk¯´Šv×ðV@Â[§‹<2ÀDÞÉkh@å½¼–—òR^ËËy+oßú¼NèñnÔÐ zq$ pmšWòbÞÕ›z#oçå¼ ·ô>ÞØzM¯êÕ¼®íõ^ÞÖ»za/é­½³÷÷ö-ÛË{u/ @½·Wõ_Ú;|ƒ/íÕ”À X}’S}î©È¸w“~Öè«Y˜÷=L ûÂÒÔV}§¯ÃÕy\ÆúFÞ‹«}{è÷ (é÷_Œ;~I[ùÕ,÷÷T¸6ö«J·/š¿ï7ü&ÕþK~Ó¯ùÍ¿ë7ûfÒóëå/ü Àô“ª¶â ä*°¾À8ï> Ì;°¶ÀRñ‹à¼Iðž™§0«àÌ‚[0Ï<š.8Ëàü‚i° ¾Á1Šâà|f…ˆÞdp“ a!Òö~ðŽ€Fx“•¾$¬'càÂEø $,…—°>]R ”¸§…©°¶ÂF8'a¾Ç…“°ÂÂíŽQ)X9¤o8sX8L‡ß°®ÃpxÇa:Ì1ñ°†›~XÌV¹=ü‡½f ¾Ã„¸Êú×C¬åqÄŽ×aˈ±ÖÃxXÇ*Ù(Ë!¿\Žã²GVËyâ'A± þÄ£Æ]ÙN¼èL¬)VÄTî¯bQÜŠ_¬)îéXÉÍb0wã(°¥£Å¿˜cT\‹‰qŒƒÅ¹¸ÒÉ8`¼Œ…q3›±XÇ%ãhL䊱4vž6Òã8f¼‡œ$Ý’ªkÉÖ÷%Åq8¦x·Ök=09Žá•$Ç¿– Iu,Ûñ»+Ç­ïÔI|쎭†¶dTÚIH»g²Aî‘ö ŸÞd«j­BÞµy wZ^‘rB®ÈyÐ2dŒ<ñ²Ö3Ÿ¹sd‘,‘7ò:VÇ!%Wäw 9òInÉ.ù%o;}‘I2 ÅT–‚¾\êKÿ꿹Åt'çä‚ç“y2ãÊïN(e¢mq“ØÂI-© ßö[•}“WJêM=©-uqÛ¯™šR‹jK½Ûl[¤Õ•ºòy¿ï7]%ªVÕeo žjNªí¦&›´zRKDX]ªYÛ¬Õ°8ûú*;â)$Ö¡ÒXgQd} 5챉Åz">ë ›µ²ÖÐ:YKkǬc!œÞÖØ#Fk„èW+hÔC€l7Ë=DÛý<×ý¯Û·§ð=>[n¡¹¡ú½Ï–„À à•©p~ÊCIýÙõ¤mäo´u¿SÚº_Ã&mÝÏ`;ìò7àèrRÕ×Ôózn¸!pOC›NUqßïÅm6é©=ÏcÙF \«6‘ÃohK×nùþeÁ|}®iöøƒ ¢M^[Q–¯ïµ µÙXl~í¯‡¶-Ø•`#ÔdHÚv>mÝmbÛ?… ±«6ÕFØûc¸kg¯7vÇm;„ìk:þXœg;Ùd;D«Á·ÇIý­Öƒª ãñ¹åzGÇÎg«OPXuä‘( ãI×Ç×”~’B]É]N€8`¥â€ÓEK w¢%pÿÆMØ&÷t¥%;s[îLEK6 åÆÜž&HîÆíí÷TÜ”ÛpƒÝ„GØüöùüM‚o3¼}?I«û«Û Wnlm ·ƒdÛÒúú–…‘wR®@-»`H 6pzHYË»y…éôÔDBôvÞWKuYoæí¼IXwÚÞÒ[dToåͽ_ÃÞåû–l4ðíîŽñ"ßÍ{ˆ|Œ0¿+ÂGp8è;~»!‚Çê÷ª˜N†äz¯ †IRþˆ€öã C(™b t/–È€|¸$Ay¹¤lW_Ü‚'¯9œEY Hpþ`,øpa|¢ÀSø  9!ÈTÄA¸xÝk^  ÂAEx',AüðîeŠÿBœ",-©£Å M3æ€ÁQE *\ XB¦0ü÷¯D(SZ!óFL™3\ÀQ£"”(A% 6et€xA§ œ0dܰqcŒ4dƼ±©²Ä9eÂÐy#Gf’9l¸!CDN˜; Ì0ÁæM¢G“ÒIóÆ ¥1APASÄ”2p@Ĩ!—†Ž7tÀ¸B 5ŠB s¦Ì™1Š ñ:5›3‹ñÈ´1£/ häÀlÃoQ"oÆÔiSÆ 'eÊQ-ŰW9c ËDvjŠÏ¡G—¦3¥8lÒ°v]¶l´é”&s{e‘©C†’6=GÁœ0vÊÌ$óeŽ/Õ€(ƒg «Í(PPgN9dÒŒ¡3óiÔ©U¯‘OßçÈøó¡çápÔAÇz/ˆ‘^{ˆáè•aFNX¡z/!yæaè … ¼`„š1¡V¦‰˜^‰M ¸Ga¬aaYt¸Hâ R<¡oЖŽN1„sŒLD–8…ŒîÑÁb޾øÂG YgX•G“/P!„tXåTCV¹£p@Ȇxl`%Çb€É¦w¸ 'VQvÆ—jr8„¢É‘ÝR`ŽÁ¡]¹‡Rh€©â‡o¨È`ž¡%—^f*„]¶R™ÎêuÙ¹èÁ¹±åªª±i«e¨ñ†cªæ¹G”´Þ‘Zb¶ñÆ¡° û‚ºzÇ£À‚é¾€I‚ùér‹¬¶«ÊA+¢ÊÎ)Ʀæ Õ•`šº+oÜÑ.›’ÆÁŽÈámîqíHÝûj»îŠ”ipÜj‚oÄUm´K’e¾ac“+!¨”rr¸ÂtÔa‡B`”΀كÑe°1‚ïiLÇÏT%BFHQD „ôŸ… ´¼ñ{» ³Ì4Ëq%’Ç4Ò·…Ï@ MôH#qôÐ €ÝņU_ Gž%OqòÃ,—`3ξ3¾’lÚ_ÀFm¿½aÒrCK·Ów£QFg ±à V‘gäkƒ ¶×è¥aÇàJßÌôÔxÿŠßS~ÞådÇ·yÜsÞF (θã%¢ZFÖ+%ÇËhÓÔ0îYï~­•Я;ï/•€’t˜‚¹Éq0 ;Fß{@J­US $-bˆñ%º1Fõ cÏ€ô-ýôèÓW}/ª–a å¿¿[üR@È0 |/|ããÊÂ@¡2ÄA€{HX\À&¹ô‚æ‹ß3ÄÌ= hÒrJ†m c×O>v­9ä@¢®E‡<0x¼3Ønpx-TH—R‹@Ð#· A€£` @@—Ê‘ (á>¶%†PY%dÖN(·&……{a A0C2ÚPˆD|‚ox¼kéÐ4<—øD$–íŽKl" ßD)權m¼¢¾J3qŒ.Ü£ ihÃÄñ5i#lðC>BQLi\c’ˆÇ;ÎÀ#‘"#Y¦²AVJ ó«€ì=†D!ŸÎ3 ‘+d8f–‡ê$“FšI-±•ažn&V©ž¼@•„)ƒDö1>Q¨ u€"_H!Es+åcЖ€9ÌòcÚ‚9ï8|±ól[„¤¥´ÍÂLÓ 0LJ.ɲÝS‚¬'ÏÀ$PÍa ­¼ÇøË!óîd¦2‰I"g ôžÕÁ6ÉÐM|ssýtÌȹNwšaIî:±BAwš ‚òLL<ºJiR) TÜ.Å9R€ ° ÷Z*w`½ç êbJB_)58u‹r3êÎaÞ=ºä¥/9aRH¢=æ†&ÊLÓ‡ŒâT (@§>³¦­LHÇù¢¸ÕOy°Ã’*8בÖÕ©%¥e:×ÙÒó¼Ô® ØC[ ‚˜Îô¢7Õ§Nûʰ¸Hp±N…,>G2¿²¹@9ÈIJ‰YšF£Kì, \Pð›Päfi5Û¨Ö1ˆ F[Ž6Öi°­—ô Ev<å9O‚ä7Ü%-vƒ™­©7¨Xľõ´Ô\ge`‹NÞj4оõ¦êÂéO¿V°ç‰gq¦7OÓÚ3²9å'O+K_ !b™®G=(³*K Hå£R]¹P¨è S lw¯šKì½à ’º»šâMqHy^ ˜9£Ê!ÀëZ*Ç@@ÝÅ^±\õ*EñÖ“u¬'v+mµëÝarw£ý(yEJNÀžs˜+eçÇŽ x6v½»i/mqºÏ–·²ÐÍ JµS T¿ü i@¥|¡ÏtÃæÊš€¥ÀwQ²¢÷ …@je¬³]A bÜ •a Âñå ÐðB¸]í<ã5CW¶2à’sÏ×ò³ä2·9A#Xj…n]_À†>£çÏŒÎÊ !mèI³!Ñ—^t 7ý[IWôÓDµªËØPc¶¥­tª_XÝbÖ݃ۀ*CGK’D€k&å‘¥·CIž¸¡À¦.ÕvÇØ!ÙWÃå€4E ØÅSÊ(ÕÜj m¯´'ö6S†ªž.nÉpŸƒÚsžJµ®c3sÌ+wãµvç^ZÇÀ,6ÔA;` Ui\ü¤|õÐf@JŽ'Ñ1:[ÍŠ%,Ê’ùe‘fv4WÊ ç89žÖ‘ìá–.¦µ&Þ=kÙùZ×Z"7k;^6E\;Ü49™‡—C¸‚3_8m¾3ïê¼® ¨ø|{>ò(oÀò.|.^pμ³Ð[P÷–È—©7½‡{…æP1dhãhè }¤B¡‘¸ Ø'ϸKf&÷Ý·ÅŒÁ«õñ×{d~—9Þ“ ƒ½g¹¿úR’2ð=`(Je’Ê<(³öR9m`Ÿ0·4†6äa Á wþò' ÐëNwÀϽÞnðûÌÇKv³×•ŽªùXÙ¥ ñ9Û}êéã{ù[;µç=ñ³Y6`G©óŸ§ðt9Ü÷×Wß-ÁÙ§Ný”¿ âG+Y-¸7ÀÌÊo¡0d“”ÂCOäÏ´=ª p@ÜÕu\¸;ó9ÄA ’bÇcÔ’ hÒ‘gu%ä%Õ0/ä,Ék{DËEb6¹†B‰#ESIF© Hyxág“T_ •þµ=á¨K¹0&‚#N‡x#ùÚ±\\‰Ž×¸Ží†E]Ao—UkÉŽSa–CX;y˜ñQ6Ù•íóÊÈcE”O„ PyA÷•_õb ˜r‰yYËÁˆ%ÐË8ÚX’Wd%µ¸ªñZp€O[ 802 •ña€9€šª)»åš9²¹šta›3›2@I¶I¾É¶™©Éš#a›2›3°D®éqœ*3¯ª9­~aÌY›¯ÉÒ¹›¯yÌ œ¯‰ÌIœaÖI›É¹žÜy6ž‰ÊÑtÜ1B2%”N Z3,LÁ?>1y¢¡ Мۡ9;£ÑèC/x£!häá þ¡ññ†‘Õ¡~’ª Z^%Š:l°%ÚšCñq)aP¢µYª <¢»Y*m`¡ä¢ÀYŠ:ó¡3@œE0¢;:š9Š  *Z/?Z¡01¤4œIp¤ú¡4àœIà¤J*ê,ꢺ՚O0¥;JµùY¤[z¦»ù`š¤g œO`¦ºEœO°¦q ¡S $@Â?ºe¥U§ZÉYu*¤êœU°§ú¨*Z€Z­™˜ú¡5P›Z€¨eñ¨âé¨saž“z§s¡ž¡ú¨JVA¢sa¥%$R JÔI¨»êœ ™/ŠÚ3¦±«­ÉT­rŒ1`µ™p:§ú¬»™¥±«Àéhþ´«ÄéóAÅ ¡o46ô¬Vu$ú0á 7œêÊ®dÐo0a ‚Îyu ‚·$÷š¯é7ü*S:ã® ¯­Y°2#Rl°;#°Ñš𺛂¯À íÑŽÑðJœËq/£ƒj/gP•‡Vj²([¯§8œøµ;b‡¬£ŠÎIw Š¾ñd‘²—1b~â79ÛšÓt)[’³µ9¯Êq°gÀ™³» µªÑoU ³À‰µ. ±´³Äɰ0a,¥±9 ¡1…| ³V:³Úlç ·ùŸhÀxd7³AK·Î©®¢"®Qzt«¢ØD· [«;šÞy ‰»›­z¡1Àé«‘Kœ42‰J·ªne`«¡µAb 6ÛŸ± ʧ~áœea?K³•ç*Š¢~Ñš2ª‚5êµ¹ºêZBCº»ÉQB£ BºÀ™‹«+T~Aœ¦Ê?~¡¶™'²¤k¥cP»4ÚŸ1œBy¶ "¹5IÁ¸Ø«¢w–j§ ¾­©¤™ ¾µ©?ˆ‹½»™Ž ¾À)è ¤” ¾ÄùM§¿0;ŒS¿àk¥]a JÂYן~1뻚Îi2墫©¢ D¾«Ùš¡Ñ¿Zº¾´939ÀÕ¡›3EÁÇë*h°$걚Ĺ>4Á—Áš‹œ¡A’Á<ƒœ3‡z³dП&š$%tª¬©¢L€&ø‚Än ţÚsÚ¬¹›ëcP¢A+H<¹V±4"Ê»¤3Qù ¥gü¸äÚVZ±êžgl¦´éœaÄhJ qL­©ÍÛŸrºÂùK»É/a:È“{·©±»È‹€Ì¤{C›*3QÅ´i¥ªxÉU ©&Ä5°¯ïA#SÑo)\„û~bXiýé©3‘ù;ª3±ÚÊ»¹%£#Ÿ;ò™öùSm >PtšºÌ!¼Ì¹E'Nº21%n9–М €’q£Yšûñý¸q)0Ovà1kXhäLŸ ÉÙŒOÕ(“«‘ሔ.9 (ðËÁÌGß\“â|ÎÎcÎÈUŸ«qŸÀ,ÌD”îŒÚ(Ï¿ÅÏçáÏÇšøÉvûYÐÖèðD„•!t•à·e2Ÿ]–Ñl` ÓÌÏŒnÙ<¥/Ézu‚7vóõÌ(-–ûH"5-Òb9(ðß¼\ÖóÄUÍèÜËŽ)KT-ÐkO9¦AÔεÓIíÑSÑ;g€OŠ…z79VøäÏw€a<³Eø´†åè1þ— 3S%Y™DÖw„O:u>”|ó3Ô†²W/Y"]ÑÀo=ÇÌÓù"-ÃL9ØS¢‡Í‘d°ØÖ2z–]×ç±[É·[yÕ{ EG·#½TÙøD×/}w½{œ½%zM\¥†6[à`”-d£}ˆ#EAgC#62‘-ýÕãÜÕ/âÖ8²Ñ-"½#Y}&sÈÕ9]Ú }aj“e=gýÜj\w6Jo}ÕqmÙ#aÚ‰ÚºgvÍ1®íÏ-Ù»DÚ—}Ú™1Þï]ÞR Ú&Ú³íܘ-Gð½ÚPmÞ{ÚêÛëMÛ³MŠB–Û5r# ÓÛÏÝÜÖ±%‹Ñ-HÇÍ!ÌGÒè$q,ò1zˆ¬5Iñ3lÓÓ+§$®0£1“$gNäkŒÍR]]yE‚Tó€~ÕV2-BbvêElÃâô•½!FghAvG\fa`vk˜|H¾ZÿNã-¯Bbâã;2-‰5×ÒÜ\.!^®«õ<äãSQŒvŒ%ˆAì804`tÑ2@çvŽçÓÀÚ1z~9à»5h‚ f†;Gsù1rÎèHGÆÖ0*µDJ”t1ðY0g#棭lèuÑ¥™Öé±ê#Á]-­Ä3EATCQnF3U®ä9Wßê¡MM›»Õêw43ƒ‹a1¤ÜL0;t«î0ðÍY­V6"aí¥{‚ €dψÆlà2v$ß\¶ƒf€TJä“3‘®m^éq±˜ÞI;!7À¹U.‘êeÁ<¥¾[º…êã¥ê¬ÞêÌ÷ê€.d³Þä2Pç×.«®ëÌàëÑáCÂÞNÅ~ìkì˱ÎþÐ.íhñÕîYÙN' °í´$ŽQîÖÑîô‘fÄîÙ!éD¼S•ò.dK„4à!ð êñ ê?9êß«ï/§W¾9ÏêÞ¥ðKèwÔðµþð·.ñIŽðômj½.ëÃÞñöñR¡ìÌ>ò#oòÔŽòp¿òfçòñAÂg3+óç®m6¯î\ é9ïî“Îó×âóóŽër4ô=ï0‹ôŸîïLð§õrqíTïêëXßê%âð_º¹ö¯‹Ë^7€µ¸¸{g]8%qŽDQk‡(ÉH"I žA÷kb|{Ž.ÀøåÂ\à "Îv€¿!ˆ[vÂA‚¡d0&(Gœà Ä :p æÀ*˜ï°`äCгÁ/˜EÅü{5 ®¦4¨QÖàüYPÎmAvÒ ƒJðâ¼üüÿ‹w‡¯‚à}—ÉäˆòS9 ’ºçgê ô;x¢ÏêźHë"àöózV®¢ _—[h€Æsq¦ÏØ‘?¨úžÝ_p{"pýɽ–ÇíÀl 1Ö¿¾×û¡Î›ðÒ= ¸>‹±ªw©K6½Nõ>áÁ«~ ðê1<hë&`÷S…¤/üÅBÔG ÍŸ-Œvé/b»ö7÷P€sF€)¬À%‘ÜÀ`;s€þé>X ñß1,6ÂÏð-Ãfø›0ƒÎòtÌïßmÂX Þô+] ðÏiCìW »!èû†»ÎBØ1g¡P{æäÝÂt8c_ t0a>\—/D=4úò×áûê_ð‹?1ÓDc…lB”†’Ï:DPˆ %â(ä|Q^įIÄF²p~ÄØìÎßH %1âÉ>”xgèÀJ/1&¢;ÂW÷áMìyý/.‘ˆ$×O\zÅhã t)° ÌC6ÐǨŒ»,fÆF¸ÿ8£ÿC|UÊb† ü’Pä„Oo.J=ÔX5ß6LЧ°/V<^wÅ!mŒŠ¶‘0VÅsˆ ³â.Üv·h(°«) Ê@q|æn^Æuç5#@ĉiqF#}ÇïèBO|‹Í¯4fÇÓH#¢w¤ˆ{ÑÂÆñ¨£LTñ^Åݨò£ìk`cà%öÊrœ‰ü1žÅ =£td†¢ññ‘Æi¸ ­á廋Ùp5j=SÈ1"…ü‹æ10¢ÇòWÙ#ILŒr1òÂÆˆ¯Ìĉ$†˜±?2ÇÍ[d'™ ÊÏä¾p Gc‚¤‘Ño(^Cé‘b„\Š©06:E Y‰äzÌíIöÆ%é횤Tx’ûñïååÇï䈀!¡ONB7¨ãàj™ƒG°ŠA¤ 'CÒ£$ƒv¬ªGé' ¥ 4”…†Á%ø÷øÝ£œŽò@á„DÐ &ÊM©aä§”#ÂNTòÄRi)… 9”ªò*JNé1<娬”°CV’J å­Ì”«22Ê^Ùé~eÝ –>ñWºbm%D”º’U.KWé,Ce´œ•ÔòTbJl‰íà¶ô•Æ É¹8a)Ghe±¼”Ç’\îÊV©"¡sT‹r•éÀž€ôÒ ¸Ž Q;V¾‰#âæcà±GNȰ· [À Ð-AòBºI ©ÕoÔŠ%ðå±%q—:À“ÊQ.¨Œ}ù'A­L?áÒX^Ë\Y.%QQP£”Ì%µ/Ýeµ„ƒñ’eÎËmY/›c•„„ËÐø†I⽤B“B‘.rG2™ͤöS˜iòG&¦bVÄl“å°HÂÉ#y1ßc/\âHÜiE–£‰ûhhêÄZø‚ ¨Ž2òKņ¨4 &…sGZÄ×5¦l„…ç‘ÞÆÈúc×d‡¼PÔ¹udÈÔÙ¼=“JHµÙIrÛÜ’“$$XÇ97f]L92o¶Æðè#ýæš¼šC2k¾ÉÂÉ!Õ¡’|_@ ÌŸÇ9™áj!tn3fK}‡;'‰©T™„P^jK28 ‘æôs°ã6O·i3ÅeÎ4„-“WJɳIé~fgü{n.¼ 9ãæÑìœ rLÌ©Ÿ¦„웣Ï)RÍh„:§z¤˜qòp¾Nnç#Z ý0r¢MI9Ÿ§T\øŽ_nN¹‰ÃdÝŸwS5ŠÎ„y>)žé{íÓ#¾OÃ?“䜄²ÓI Ã}%S¤M´—Öó9VÿI(ÜLˆ‘¯€&Ííh7DèüŽg’o:Ðô Ag£tŸ’‚rM Š1}ã3rŽÁ%àÏ(©?«ç伞þ³ÓP¹ð6 çT¡t“…"Pj0a¨ùD“3ôû±ÉÔ98µ&ë´˜<ÔkjLÉðÀ¢ü6ºÊDie°zr*€ÆÌwi-ƒ§Îžx޲Q¼ ;mçgé“|ÔÌ€ß /W&ôÜ™ÄSÊQ>¨Fã¨\à„´Ž¦ÊCŠGÍæŠ~øÒÏé–¢é=ShÀ Ÿ72¾PyEe¨÷#O±#Æj$ gEœ°“›˜ÍÔ-‹2ñ’æÄN¢I? ‚üžPÔs.ÍñY&f E…Y•nQŠ¿¨ë¼ _³EéÒ ó#Í“–„QºD4© ˆ‘(4.ÖH1J©(ùtš<²žÒ AWi3­sÊ>i?•Ã-ͦ>s›fÒMç(¦'56rÓ¦iLK)2]§@Ò†JLÕ ?w¨ëœ§urZ1…{:=u©•D|štLýÒ:Nh9Å›V4bQ„ú79bà” ¬tkºÒ‡š1½Æ\ …z(ŠZD &]†½œL€JNª(­¢¤T¤šÒ¦XCç E©ïtC‚Q–êCí¤ ©4Ÿ¦M$ZA4i à¤áTAP)úQhHÝ›•¨–G…Š5»èê„§KUž¶Ô¾á㕉ôïuˆ<3­ŒF#ŽâLCª)•%,¡:¯º¸¹ºéPf$Ý«v”’úÕ¿X7]ƒ„µ]¦ÌBšXûª¹ü«wõ±N’˜Ùõ*ª”ƒwt±zŒÆ*…]dQyõf~V\©X/+cͬ¦•³ÒZ‰X'©eu™¯5°jÖÓŠê<ë¸ ­®u´ÂÖÁÊY m]­È2[ŠV»ª[ck`õd¾õyÞVéIZ+då¬5à°"Wá¹\«ën嬼*ºòÕdéZÛÃ{ЬÀGàÌ;b @0ÀL¬Ø[€0@WÀzÐañ@ ƒðÀ=0#[¼Ëd¸û€Àƒ) @> $o  ¨/ز$öˆÙðîÁÀ< (Y@0x¬š Y9„@°³að0;‚Á ðáà4@ À>@(ƒ ÎÀ`´àцY[0‚Á6x€ÀÚ/ f¿l``Ä’ZF­A èZÐj»ì¬…]0ä,©E¸v@ðcý«ý±¸¶Ô"pp@ßø²Ö `€‹0@'0ò¨T`k¥í‡5kãø| `´%µ@Ô` @Æ– g½¬A€_ö pÀ0àZ{ `À£M ä€O D=¸;€ \Rkp@ˆ÷ ˜' Xxž`âðhÔ3¸Ÿ`üƒwà þÁúàØ‚G @À—M€ÃþX8 ¸37ÏúXº?øôÀü7@pÍC¨‚5À<X” Ú§ 0À³¼Ö c{º:xïàt3 uÁ£]À ?ÀmáÁ³1—Ժݮ úÁ:Xþ`ô` jI- ´ D‚xP xÀ*Ъ Ô€˜+wï ±à´ƒJ°žÁ> ¼“WÉ ÙA˜²”wô*YÓ‹zIì£ àÚ.s»ìë}¹­×öðrÁ®» ´?Ûd¡míu´»÷ˆ^? „‰uÞvYPho‡}´À¿ xïAHG ÈwÀa?À#HàöfZ}cãåª@||Ð J¸^àøƒP¸À(ˆ¹€ÝY@ 8@<мœ—Ëþwð¾7гàüXs±u²€@@ z €öí²pÀøvÝ]keùÁ+à?€Ë€˜{€˜õ«@hàBo lVüƒ}@ƒC/ñ´]öl]dW°’Å`Ð (@¦¼À ZÀà >#–òB) i@ `@k}`ƒ¶h_rðt슥¼0 wY囀Á‡…Àô¾ÜÙk„ÈÃJvZÊ `é½|˜bðsÁ(¶yVÔÆÜ¯éŒ8Y ‰•,¨Ä—ðƒ Ð °>pøÝÄ«xY@ 8¨ \ЉÿÁÞ}¹äà|{ð ®?¨Å€àÑ`†Áœ­–ò‚`l€Á”}´Av?Ýg,zAí=½àõ–Þ˜k@À#v²]VÔêÞÒk*ðHh´€r@¼ïëåøÇâ p*Bø¾À¯^P{#À?`ÿ@ €SŠ3Ðǰ—ä[r°Þ€>ÈÿÀØ„l€©­Ãöõ kÇ1€ç +YBòëe  #€“ TòëE-9о^ \òÞ» ;,“•l`Æ(Šðë–—,ÙàðQ63àÑ€ª@ÀODeFAðè #ðh0˜€€àZškh.0h"Ò+dá2Íeƒ¶Ë²ƒ¸Œ­À³ˆà€«{6˜Âì¶ @˜W²A8Ì`Öw°ü?±4WGfq€d@-@+V÷2XÐa…ì“ÙX>šðȹ$€‚ g(ƒö5ëÜÌàr—ÍÍï¶ËŽYU|³k΀Íî<`œ•ð²ø`øú€ð€m u΀ÀëÛ% àÃ~Ïú9[08è¿À\æëÜh_3< Ï(ÙT2€Šð€Ì>€¾ iÙm7覀|ÛÄûd€àyÙ[À ³øVölƒCòò0Î` çrp´1 ¨Á]¶ä6{²À!ðÐ ƒ[zÛu÷®X@†0&câêÛo}®8¶Ñäh¨kÞ?P’`éþhÒ+hstÀYÀ*;]€u—ôêý,Ø€oPTîÚµÒy0〖Ás£ ýtä$|¦ýPÉ~™:ó8}¦û#°ÉÀ@Pk³øaôih<áÁ †´à ör£Æ€x¹ 5ò5À €0ôAqîɘz €® 0ΚöÄ‚ì<þ;@ÕŒø``¸Á:èÉà°0p¨Àp0 W_{€j-ò-`0€ ,õ£= '‹~lŠ~Ö   +û Òîµþ±€ƒ1Ë ÐAäUÁ9ºØ0 œÏ/pƸºh° Á¬`à€^mÚ&0ÖÐØôFp¨ €°Æ€QËX€8ND€ˇîØcà„ƒjpþAÐ~AÈ~ÍÔjƒÀ@4ò ²žkÊë ˜AŸ¦¼ËÀ mHû Ì€ŒF€À8³à&0œ,‰W³à" 4v¸2[kwÝ3€ –‡)H« ˆí °ÁÝÀtƒvÀe Ì`g Y ¶É4XÚ (íÄ#€)`ÔŽÚ€0 ä.ˆÚ„»<ÏN] îÔ†´ ju  |³Ý†´ ¼m{`¹“q—el Vßê2Œº7 ®Û,m`l€P¦{ÝN' Àå.`pj_À örÌ­±Ý£T£ã iï º€\îpjÀ7XÝ}8ÀZ àîÞ}úËA0€!À^þ²```à2úVvè>¢Ñw³éà ÀŸ¾›í¿€ðï.«gõr‡%µ¼ú€Üð}oc-Å­µÝ2p^;Á‹µ@*+å!ËÈp7@*3j PV쬕Ê€܃k` L¸AÃ5v¸UÀŠ€ găÖð°ì+ÈXÉ’Z „?0(«6/sœÄ ¨Á¤–M8ÀÄìÑ€ píÍ¥Þ!¼Û 8P8¸äi0Á¾¨Ú3.fçȃàH‚`P¨Akö± à´ƒ|ÐÚ¸»¸5«[ dã.'Àµ¡ÔàÐ &¹·ä€[@ðai¬Ñ@  iÀÿûÔh;$€0àU`”€{È÷Á=PåvÄÊÝGn½{¹Îu²ƒ]Ñû÷0w²Õ€ÄÊèc®dI,ž=怠ú*YvËÌBP¾XX€Îs!@£U»v÷Në‰Mlc3 ËZóf®d·y9gç € Àˆ×9X– hHkÏ€$€Ÿ›s  Pç±îo.m_¸(;€¡×óÝ« èÒœøƒpè,ºjGÀ*ø ù03¢ƒ€.ì"9Ћ<Æžcä`¶@ƒp¼¹é4|tª`°ÂJoé™·0ò®PÙq4`–„ mñ÷m´I–©§Îb—ú>hêO}É„Pšº¨õ±€«cõ»Õ»úTÏê`]¬Ÿu*»ÕUîT¹r÷¸u|@j?x\Ÿë>ÖÔ¹ÞÔóúêåëSݯ?jƒp r`׺ë·ëvº~l»Àíëˆæ>ö·~l3‰ÕЖÌZÂÁÿÁf¿ì™ý×rvˆ,ÚA;ÐìÒV²¿ÏžÚ—:<ííVµ³ö‚+Û).ÍÖMÝBÛvƒpV;©%¹¼Ý·çYš{„;½¥¹gÀ¸s]p^ûi'µËý8wÔö.î°½ºÓÜC0Ý /]¾÷ ©ÇÜÔkyåî-ïS}¼‹Þò>ÎzÇê½ò2il\{ÀëÇ`µ×^ÇŒƒ¹{fßï·×¿ŸöãûzÀÐïVF€t€¥-»]ð žv‡u<à-±ýžÄ\°k?f×âµ9؃ï‚Õú/½>˜øN,À^7ëüà©÷a$Lz7À0¸ê§]ÆCa.lÐçŽ?ñZ˜Ç;€¨œÙu¼’=ä׬äÌžŠã0é}Kþ´7y@ŒƒÁ7ò~˜Ê€A€ÞùÍíÃ…øƒ.ÿå1“]^½Sâ3Ÿæ}ð'¦Ë³ ÍS^M—'œ±ÖËÿ÷Ðbiî˜Ïì4÷silþ|…‡Æƒž€10âOû£ÕÆÖØ 0z@/’å®# Ñó ýŽã±VÖô~õzúê+½ó®½ Ôßw~hUý4GûÝÕh ë3;§É ¹Ò“d“¬dQ²M>µ1yÃä¼|><>øÑ3{cìoò²÷ê=9üäg?Õ›}@ÊÔþØ÷d­LÜ™ý¶ßÊÌÝØ#cšK– »¸ËmÙÜ7õqoæòz·Ë/¯ÞÉ®íin_ž÷‹]ÆÓ\Èl é½¾ï²Ø ¬Cû²LšÃºY§êºw|µŽð°RÖ¹ _ÆOaØlðÇúofÄÁy¯óhËoÙs¥Õÿàhz+ýs¡³ÈgòìyÝ“×~ þ84æ²\¨?Ç_ü]6QãǯŠ3ò‘ÚP~Å}#¿¦Þüó‹jÐ_øU5 ý _VÔ®¬¿,ÿjð ;8hͲŸX×~Žš/²f»_‹÷þ²­ Að¿ý…?[ƒãûç°¸fþ…_]Ã~Ûßü€¼¦ýÔ¿ðçëÉŸý~¿Æ½ƒƒ ~ù6#ÿ?ˆ·þƒm пWÿeÙa÷?þ ÿÅôþwÙ‘òá.›ÿ—ð9›xùA›H´m„›´Í__¶á5m '6ZT[ˆËY_צ^€Ùö6€mÛØhmxx› h„ 3 nx‚›‡Çñ=a–á&jq4 À¸Ý€à@ˆÌ< ˜ ¦[‹‡'`£…º!+àøáõ€„›ö»5€€ Àúmxµê÷¹ÑnÀ˜àm›®µája Šç¼yAð—ø5fžöV¶Æß˜voL ©%ð€–©µü=y ’ ÔJV€ ¦0šZ°Ÿ¨À‰à xÁ àÀÝ[œwlA4×`Ø"— n‚Q©•Áš ´Å ¦Y Ü'h v €*Xݱ‚LZ)ø j]D\ & ž‚BÜ«•äÝ‚ Çð‚]^öÄE[°—Z Èxz1XxýufÝ1èjÅuÍà2 š‚2^Z× Vƒ_u÷Õeƒ %gÉ8Àðá9ƒ+–A'Rƒ@9蜃Õ÷Uì 0Ö å ë7z_IV<8æƒ÷ RăÞ×7 Å_@Ä[öÆGs$–“ÅÌ%sJÖ2·Î)tÏœ5Í‘XÔÜ:WÎ]{;Ǩoé3§Ð¹s ¡ÃÖO²0 fðÏo a¼UO¥ˆ­°R/ŒW)ê5ª²Ê;¬F›bhc[Žì`VØ…@™ÂÅœ²­üTšb¹¯4èòg®JñÌMó ©ÌX™¶­^†³œošÓ­NJ®_²žÇÊç˜:Õ _4_*f®¶5§pµsW¡KG°JyÏkn¬¥hYÇ~øSaù.5I¼²úqÅÜ­7'ÙböŽó½š”±j=YãPºÇ¥´Ýlùk[ÿfÍ•æí€9hd[¶‡ ºÓ|ês媡®Þ„óÜRPKTC•ºT¦XPî¢ÚD–5[å®Y˜{Ö~²^18+YÚÒý,×ñ‡Vߺ3¶ÂFem}\Adï6–Dþm- ,/74_ú"¢M&³ÐÉ'-s§ÝmF‡:c}ìØâL=ÈsSv)«^·f_ýnô~ŽÅë§iq=À]§“ß6þ5ßðýγjõ,xnó)à βمvÚ–ç6ÇmnŽÞÅ©7ér;©Þưáb–Jy…äÐT_ª ©nñšx~-WñËçíâ[ß»æòå5Î}m_`óü>ïqÐÿ{A}ö6áþY‚\IF8ð•ìˆ5hŽh¹—`I$Up%EVÙ“ZÉs9”E‘XqfÉ—Ny—©L‚‚ù–YY†”ti—„ØaÍ$7è˜gÉŽ3YŠYsX™< —…¹)7ðšA€})7€ˆµ¹!X(š£)…GÙDªy•—Y‚® ›9›(p›È™›ºÙ”Å(–‡C–t˜ ƒÉše8œ7›A$…ɉ›¹œÆ™yé–«œe”Ä)›Å¸µÙË ™%(žÀ—åùš×Yœéi›øÉžº •Tø™ qgyBw(7,ñ’ii€|>3ø14ˆƒ\ Fpz¡jº¡Ú¡ª¡¢ú¡$Z¢Š¡j¢*º¡"*¢+ú¢-:¢š¢/ ¢'š¡5j¢1Š£/J£º£9j¢@h c€  Ê rà ‹ó ^!) ¤ ¥$*¥J¥?z£>Z¥7ª£[¥]:¥_Ú¡j¥Z£^j¦`Цez¢Yº¦.z¥jÚ¡Cz  º  êʤªôÙ§<¤ê§ô ¨Q*¨7Ц„Z¡†š¨Uº¨Ѝ:ꨌ ¢’Ú£Z¨‚:©:§EZ§Hª¤ú{¤Zª¤ÚD¨Šª¦jªåÖª«Zª©šª±Jª¯êª5P«A0¡³ªªµŠ«¯ª«½ÚDºz«·*¬Ã:¡Âj¬å†¬½Z¬Àš«¿:¬ºÊ«Ì «Óú¬µz­5À©Fj§IЧK¡NªÂÚ‘èZ4 «éš®çª®ðº®µÚ®ðZ­ ¯ñÊ®øÚ‘ïÚ®úJ¯ý¯Ê:¯û*­±Z°ò«ôʯ¿º°öº°»ªû¯øê­žz§’§ä:°±Ê­ìjƒ kƒË ¬²"[«ê±ój²'{°×Z²& ­Ìʱ«Ê²-+±/»²,+³¸ú°6;²Æ ³!k±Gб( ±¢Z®]±´P¡80°PQ µMË´Ýsµ8pµ0g\»µ]ÛµX¶UÛ´:µO+µgKµVKFa›µ[û¶\ûµoÛ¶W;¶]a¶›1¡i›¶v˶Yû·Q!·6·s ¸€Û·x‹¶S›²kK·n+¸‚†Û=D ® ª§å:3 ¹œ»¹žÛ¹ŸºË¹£+º¡kº¥Kº¦;¡©;¨‹º­Ûº¯›º±»º 0»¢[»¥‹»£«»§›º »¼ë¹Ã˹•û©âªMʺ70Íû¼8ÐzÒ½{1Qq½QÑ·Ñ»½Òë¼Þû¼­¾FÐ*ßû½ʽÜ[½Ø»¾Ú;½Ýû¼ß+¾â[¾Ðë¾Ñ«·}»¾ØÛ¾è»¹ð ¾ãÀäû¿ÎÛ¿ÔÛ·z«¿Ù»¶ì¿ô+¿|¼F‹´Ë«‰;±µJ¢{µ‘;¹8¿‰Ë«›ÁºÁgÛÁm Â&Œ°4kªœ¸(l¸*l¶«j&¼1Œµù+Áᚱ㚴 lnKÄQaćXÄJ|ÄKœÄLüÄNÅH<ÅMLÄ4Ú*ŠÅ㛡EÀ ¬¡C°¡a ÅTLÆU|ÆL<Äh,Åk\ÆllÆLœÅªÅ]œÅ‡ª `,Æ8üÆ~LÅ>|¹kÁAUÈAe³4 8Š¼ÈŒ,8ˆlȆÌu’<É”Ìu\ȊȼɊüÈ—l•Ê–üɈ|¾œ¼Éž|É¢,ÊŸ š6ËɦÜÈ© ɫʜ¼˜›²µ¼Ë¼Ü˾¼ËºüËÂ<ÌÄ<ÉÁ\ÌȜ̫|ÌÊìË· ÄÊ»§@:Í[šÇÔ|Í[ŠÍcšÍÕ¬ÀØüÍÜ ÎÛ£ÖÎæ Îè̦xìÍçÜÎ1úÌGÄl9@Ïö\Ïø|Ïù¼Ï÷lÏýÌÏû ÐÿìÏ¢-Ð=ÐЭР=¡ ÍÏ}ÐÝÏÐ Ñ Ñú|Ñö Ï,͕ʡDPÒ&]ÒS:ÒzÒ'Ò‚zÃ,mÒ.í§$Ó(©4ý¨aÓ3ݧ5ÍÓ8íÓjÓDpÆú§+ Ô Òò¼§ÃZ?Ó$úÔQÍÒS¬—ê¡D}Õ½ZÕ-ý¡T­Ó[ ÖÃêÕ2MÖ]=Ô6}Ãa­ÕJ-§!A¤ßŠ¼ÐœË÷ZÖZz½×zÍÕ³J¢BØ‚Ø~ª7Ì×|]ب ؃-ØŠÝD$:¡ˆ½× ÕÚØŽÖד]l׊لý¡LÍåZ¬¡,´ ‹Ú•¬Ú7kªÌ,É®°«*ʳÍÚ”ÜÂ¥ŠÈ¸=É·½­©² ÀÛÀÝÚ:k²¥m×½-ÛµJ¸\»Ü\ǮΠöjÛÍ-¸Ð­ ;ÝÙ­Û¤:Ý´mªÖ½Ýr›Ýö Þæ=¯Ó܃¬«yüÛ±úÞDzç­Àð½ªò­°?ÛÜ ìÝA@Üñmßó½Úü­¿>»³¾¾³ÍÞBLÈ—ŒÈyÌʤl³Ê­œÉ®Àþிɥ¼Înáβ^É­ áý­nÈ*>â•Ìàóü¡º:6~ã6ÎÉ$Zã8~ã:®Ó<ÞãCðãä=Näj¯Bžã›¼ãµºäCÞä4þäKËŒìä± åœ,ã{ŠÃ^®Ç`þåbæQ1æfNæg.æiŽæ0¢l~æoçk®ær^ç8ìæcnçznæs¾çl®·}èh~æ\~ÚÔ}èAÞŠþÔˆÞè‘+¸Oè’~虬èrËè“>éîÜ‘Þ艹•~éÃê釾é_Ûé™néÓÍ«£žêŸ®ê\ûÔ…žÀ ìÁyÌÉyì¸ùß+®ëµ¾É¹nëàµÞ¶´¾¾¸~ët;ì¼^ì“»âÉîìaËì¦:ë|º‹Ø~|´í‰ÜíܾíÚîØžíäîíæþí‰,îá®îØžÉèþîéNîÚ.ïØ~îöîòÎîÚ~ïî~îú.8ÿ~ï÷®ïïï>¦ôNïûnðþ.ïÖ.Eño6ñ/ñÙ|ñOÔ?ñ@Úñ?¡D­ñ¿£$ñòòD-Ù /ÿò)ò+ò#ÿòOz£'/3¯ñ@jí3¼·; ¸ê ÃÓíÁù[¶&<ôZô|ô)ܸ!<ÜPÿìNÂUÏÃR¿ô«®Â~õ:œõ ô$Îá,ËÉ-^Èš¼É¢\¶%n²h_ö þÊl/÷†Œág_÷(þö!÷{oö&k勜ö‡L÷límÝ¡‰Ï¡‹¿¡¯¡OýÙií¡o•_ù¬>ùŠÚ›¯ùŒÏùŸß«’¿Ù”ú›×tZ´?Ϧ=¦†JÔG û¯oÓ±Oû†*ò¶/¨²¯û¹ï§»ïûkͧ³ÓµOüÃÏÒÅü·¿ÓÆÏûÍü1øe óÔoBpùÃZýÕý¢O¡ÚoýÜ?«ßó៪ÖþÔŸù¤ßùâþç_þ‹=þ‘ŸÕ쟪ãoù¦¯¡ÖîÞÔ^ªèàØKº•7á¶ëLÕÿ#v N½ @ˆ½üÛlv ¼.þgà v€×K.kÇÉZYüdð’…@HË Üd‚@(Y $|Š,62ÈÈhà"³ŠÌíµÀ¸yà%Û0*PÀ`¤n°ÿ}7%˜è˜`ô+nA˜ ¬‚6LÄA蘵ƒC ŠA7Å Àg0 ~0!Ø d=p0¸®8Ý`¼ƒh0¦Á2‡ëâƒ0@ ªÁ;h…”ƒrB<(Ñ $ƒ}P Š<=˜ !!<„¬'&ÂEÈ)ጄ}šAOˆR'Ä„sPÂNè!! {•ÌuÉBYxÔH”(›…³°~¨¶w»p¡ëÒ…êúÂÒ¤Ò4”0ô…®/SíÂP6 ‰¡2 †Ìpµv q!0„k,@®]¬ÕÒÊU¥ø†à0VŠ@Ë¡9<‡9@ªÃoˆÛa9\‡jºCw¸åá Õ«¢BZ;‹ê*{¥*•ª°U¬ŠMD*NÅ£Èøx•þZŠ$M/f/¤ÖÇô¤[8lsiŒ¬p€ Htq1T…ò³®À`˜Au©üà” 1ã´qœñƒá°æ¥Ç²Vb ƒÚŽ'žFgãc¼<‰N2R¥Žd1£ ™‘3V¡½Òh4¢Qc FÓÈzÂàbs›KoÅE×øébãdÌŒµ4ÙÆr“†@hüŒa8Æ€Ñ8‘£bÔv`î5.ÇRhÁ(£sœŽ–Q7¢GÐÈç iÔŽFÀÚ‘¨SF¯Ü‡ªøD6¯—éã|ì§ì?62èï#€Drê@Hýh äáC}Jõ ²—¿*dã²…êËBjHõŸ6$TÀ2CŠÈ Ù!­ˆ‘(2D†Hj˜"[$Tà€åƒ}°ª@#AÓ!³‘42FêH#q$ެ‘5’G É2™¬ G4É!)#“¤ J’LrIÖ $Y¶€¤’Œ’LÒIZɪ€%‰ä–¼‘@2euI!©%¡$‘”~½J´]¿ü‡ÿÒ¤hƒWQ¨I8Yæ$›|jjRýÝÅú‡ªì¤çs|ÙïMbµÊæ'ׇB“âOPöªÎV𤢜UŒrþÊT)%f{j•ÒMb6=‰ª2e¢¼”ÃÊSÚ¿GiØ€¨ì“¤²Sv6D9*Aå¢ EVÊJGé*g•¬Œ•¸RR¦Ê&‚+oe •-ÒõÊ\i)§ä•¾2VËÁ&,“å²lóoXÎÊbÉ,©•´,Ö®•Ý:`§À´å¯kdyìÂiAìíÖ—·Ô_å{Ëõµ Ãå'Û–à²[¾ËoÉÈŽºœ—è’[F9×&XS+Wë’\êKs‰/‘ÝÀ¼——Ì^^¯ty½æÂ<˜ ³`6@þ/õ—Ô\Sjİ9 Çeļdð’‘å±/˜¸èå" —&,džL”¹¸<&Ƭ˜æ2ešLE–ëJ¦þj—ÝRfæK˜3ÍÖÌ Sqí-•I3½ ¿Ü†²‚=®'·"Nœ’¤ìiž‘¯·¶ô–Ñkš*Qj¦8©é!–ØÓ[LoFjͨù©¦ÝºšpKo9Í‹¸5Ë&ݲvU(nvŒÖ³$é–( ƒA1o€ ˜æô£ßŽE€ÎÁI†€ 0œˆSœ/"©¾Taá Sc¼¹íH9Àvä˜ó:©ž¹)7£$Oœ\wsoŠN½Ù7£éÄ„“p&ÎÄ%«—Þrœ’3rr3W9+gæÌœ_vZ„Ý©8x'ïÑ9*EñhD£Vt‹òQEêG %Q@PWIÒIJI+©%n—4“jÒM:Iý'ý¤ “†RN:š)=¥¨4•ªÒi(üV©+}¥°”•ÆÒYJK]i2¬¥¯4[:Æ]Š5nü¥Ž±zñR^úȆ)naÆ”<úRc*Lé/-¦ÎôƒI½dâ’i§``ÑÔ•±¬l*MÏ&5}eÙaSc M‡i;š— ²H'‚@;}§xÒÊÓvÊNç©;§ïTžÎ?{ O³?ý•Ô*ŸöÓ4ùOë©@=–u² T~ŠOí©A§’R¡>+zOý)Ee•2YTmu°¬¥³¤VÙjVI6éB*­º–%µ£¾Ji‰P•­D© U¥BJ’ŠÕ\êIý¨uUER‰SyjNeU=¨þÔRÕRMª¯’©´Ê¨+¥Zü[Jõ©¶’©ÚÔ£ºªŠ*R¥ªBuV-Äe‡.¹ª´#z]õÙ);Ã4}ÝXva­~U­u3½žWM«`Ù½U¹*VéjØ*«fÕ®ÆÕõõsÝΙ~5°¾LÀ*X£BYe˜…Õ`òÌÄÊ.)&ae¬ueBÖÈš]ædE¬0 ¯2Va7Yõ*[M¬x•³vÖ…9WG«Ú,­—µvV†W7«j=Œ/‘#j°Øúç#Ýúœ=q¶öÄ‘h[iëµuºÕ·z°Þº[o+ýãPÅ•·’6tj¹Ôiƒ#@ֺƀ¢X¨« (ޱ`W¸AÛ`w…y‰NC…W#P-TyU Ñ ½FÄ›Xn¢uLtïõ·Ê€¢è‹âå)!E»†˜G€ø+¦0ÖÑBN å l ˜8ìÀâ° €F©[ƒ•®ÒÕºZWÉ–]·+T;#0Ãñ:^ÏëyÅĶ×32bc@|¯õµ{ÌW·ˆ_ïkÐ[üu×#`ÿ뀎 8*ØËƒ`lPd°Aq(bŠ!›)Z‘%²óo’š%«z®Ó'k²Lö&Yà˜)ªìÕ´ÌÊVÙ)«£l“mePÊžÎÓ©e‡¬¸<²[vÌvÙ0KjÀ¬—•²j¶ÌÙO†f1ÅùR³”Í:ÙK¦gál’z%²’D®™ZeØJ´¬g&ZA›5/b;¬t+&Zh+nU´qÒŽ=æJ×XŸ]+gàìõˆÚMAjG­©-µ¨vÔ©G˧ÜÙŒMµ°öÔÊZT»jÙYŒg'jÖêÚX kk­þJgñ×îÚaû_ß§õ—­ŒBQqF›mí¤¢­J[gKm·#£\¶ZôŽV[gË(¥-ݶÏöÚzÛgK9µmíì¶Ø–Ù’[j+n±-¸u¶’-Ú¦Ûu»n¥f]_š*ߪ(V«oûm ûb:Íßjª<¤n˜ÀņÚ0ÖµAöñÜÌ#ä5âB\†Åî÷ƒ¸7âR\ 5¡î_ÆÍ¸×FÅ(+q5®Ûb[êþ‰¼’;qOnÅM¹—åš\ùeqÝßǸ’ÍåŠÜEro.Å-¥‚JM޼ÎvÔ„nÅ#ºËÏèÆ4FYtEÛÐlMwS2?–Æt •Ò¥ºH7è:ÝàWuµ.f{ºˆM>Fª EplœáQAñu(ÖCv®ÛâQ¦Á•F„€Ü-»9ÀÆÝZÛÕ_$íC…1¥ÅÊ*‡Òb‡7¯ý]|;ÇïŸj¯Û±0"AÃz©†@^äP‘Tq±¹ØÇ¸ =ã¼b·D½¦Uº(‡g÷ðj ¹KvY/+s 2*Àݧ%wéî*t½Šƒì] •wgÀî%¯}·CÝ4á;Ô¯âÕPY ñ6^Â{|Ioó=½—ë¬]R…|+ïåÝP™7lÞ§ÆLU†Ê ÷ØrÃÙZ5†äe=Y+(^/ãØ5—–…š[í n†­E€XÏÅx8LpH²¬…zi€ñœ¿7R:¶Wµ‡¬cæ9d!eký‘8Äuú¯dü#jï+IÐ$ã¶Àg„g2Œ€°‰µA 8[`ÐT€=®Bxw`%Éuøïà¿c…þFñAŸV×4œ ìýJEöë¶Ð¯èÄ^ï7*¬ %ÂÊÀpIg Í…€ØÀ"7$A4á',RÖ“H˜ÂP¸a +ì„¡p 9@ wá¤Àr“ÀÂf¡(!.ü„— ×Ãmx+%8\.¦ ÃVá…a6\‡ã&âÃZSœ¡3Ü…µÂVB ¢¸4(P€¸=I  À0ž(Jdà 4v~€ÂpE,&‘p‰31'NÒ"ˆ€,P*q‚(Å_`¸0¾@qĬØ‹ž€úďި <'ô&Â8!øAÉp – „ñBÆ‚" ,c÷0ÂÑŠ" Å M3æ€A5 *\€HB ü÷¯D(SZ!óFL™3\ÀQ£"”(A% 6et€xA§ œ0bÐÀCŒ4dƼ±©²Ä9eÂÐy#Gf’9l¸!CDN˜; Ì0ÁæM¢G“ÒIóÆ ¥1ALQª¶ 1nÀ…¡ƒF2f€ð £FQ(aΔ™#3FQ!^§¦qs1™5p€°£ˆ0FÞ¨áw%‘7cê´)ㆎ“2eȤ–2Ø«œ1ƒe¢@;5EÑÏ¡G—žR6iV·®ó:6ˆÙtH“±½²ÈÔ!CuÓ™£`N;ef’ù2ÇΗŽj@”Á3 Õf(¨3§Œ2iÆÐ™ù4êÔªW‰ÄŸ?#óùýçõ‚Gg,uÐ¡Þ b —Àb,FÆye˜ÑÇ€R˜Þ E<8^y6X¡/aăfH¨Ui!¢Gb'îÑFkTX-Žø‚O<(Çt •ã†S ñàc„Ó$Nc{t¬ˆã€.¾0ÅG–AÇVåÁä THñ V¹•Tê(²XÉq†_®)Æm¾‰”\†áešŽñ`hr`·Ô—c°1hWíÁ¡_¦èá)²ÁÆ—gd¹e—˜Êñ —ƒ-…¦s|jv_*ºpnhùFªjhÊjj¼±Xªxîå¬wE¤€’ØÆƒm¼aè«Á¾àƃ­Þáè¯_ºÇƒ/àA’†_zº‡Å›­ªrÌzh²rŠ¡i¹Bu%Ç—¥êŠÆw°K†¦d„1°"n8›{X;·ÆºÊn»„"U¶–vàoBìÒq$™oÔÈäJ*•œn€0u˜±¡%AD‡3È aÑe°1ÇîeLÇÆÏT$BFHQD „4’ƒ-kì^Ç.Ã,3Ír<܉dÀñÅŒómá3ÐB=ÒH[=4_w¡!ÕVÃ'ÉS˜ì0Ò%ØŒó/Ç B¯düŠöp ‘Ûn¯œôÍKÓí4h”‘Æh(øBÕ_à ¹Ú „Ýõv÷³s·ÑÆÝ¾¢±·ß“›gùØðe·Ü…{ޏâŒ;~jX?¬”/ŸMõc»µU>Ûûí¹»XTIÒQn€FœÁt ¼Ø|îýµVM%À³hˆ!ÆxèÆÒ+\=SðÉ7Só“}Âó 6Ÿ‹ç¿ ‹‰ï¼З/ñ!ƒ€^À=ï+oÄʇˆìaoù\àÒŽÏL@̳ö(€IÊ!Q´ŒYGt°òßå®}¥±¡µ$¾ÁR x¤–!D¤cì¡eôò# Žp Ó’?˜¬.k%ŒÛ “¢Bµð… ˆaiD) ñ E¬!ñ¬…Ú¬<ô¡¥ŽH¶:*±hrdž˜3)®‘Šù"QÌ”Å.²Ð‡0”!  C´±‘6˜`õ(D"‰ŽI¬ã l0’'FÑdº!Y¥4ÌH0_°ÊÇÜCHîÉÕÒÚ‡5(khÞÜ á”T}=Œ;ÜûŽqÕO]–R»ØEŠëÔx,ìMVŸuM›øœáþôóÙý€ôÙç>ø/†Á®¡´ùÎ+عÎûÞ¥ïw×üÆ|âTDïÁ/‘¡‘¬RÕx{•-ü C5Aù»ó8ÞLØ›¬dÝZ¿Åº0ŸCä  ã½@¦2 oñ1Ç5$…dnè&\ÂXá&$"w€v²'ñ³.€r€çv/ 5pÂj@"1r3S.âA)0¥G\b€S)l° { ‚Ÿ4W%È‚x+x‚.øP€183n€Ÿdo9S_!83eÀñÏÂ=7xeBàƒ2H‚AØÞT1nñ(ŽÔ„6…)˜,xL{@\è(M˜JeP eAX VS`.’Vw0!c8"i%Ÿs‡é‘Vl°‡sÈ U¤qŒe0ʨGdŒo€ŒspÌx?ÀHzÊ2ˆø¥sðh÷n£¡„ä±g:Ò,_ %êÈŽÙa†jb/e07R£!ï¨;b üXߨ>ÙIþ˜)2R¢;Í‘ ¹ôØŒ3‚0Á ׌.R‘ yó@f8@F`2‚¨X$@oÁ!ã³û$ „E%ùy 7B]âH ÓBy#x„k?¤G2D“ù“ skyT\F©ÜP*9Y¤aP9_Ý—L¡$£¤”˜g7âö(ˆw’ëøE©òH瘎g9{ÔðÖak¹ƒŽSÑ@H8i*ãQSé•3áÇ“šÅ”¹V”Vé^ð%ôø–d‘è1‰ÙaÊQ‰% Üè—GEU"‹Ê‘_ aõ´ €# y1a€9š«)4àš9 |ªÉš–ña3 ›¬I¼™4œ2 Ãi¹Ù¶)À9=Ä›>áË©2¼‰Ô¹š3 Ò 6ðœµyß¹œ»ùš7ðœÂùš8ðœÈÙ›ÙI›#1œßi6Ÿ‰ÉtÛ1A2#dN ÐY3ñ+LAzÌYraɡЩÜ´3 2 /sö¢Ñgãñ :¡ðბÔ}‚º š^'jA0l 'ÊCða)ap¢áYš <#¢»Yš>"*œEСH¡3!:ÈY%Ú£3 ¡I°£ *¢ŸõI¤ DJñ™Hú¡!JÑ™Oú 4`Nà¢0ªÜùTÚ£4žO ¥m0¤hº›O¦JЦÂùgªÈùl*§:Iò#¤§WZqú ˜1U`§xZÑY| ¢jU¨5ÀY©!ZᩉZZžZéI©\ ©í)ª*¡a&ZW:Bûô œäš…Ê«Ñù!Qayð²¨6`°Q¼ÊIÅ*Ä6žw cªÐº›y@¼*œ”öM¼Šœí!da¬ŠCc@CÐz¥qP@ò¡Œzñ¹®íJb`)¢ qgP'H;@f ¯å7ý S:ó®K°Üy°2³Ol€;±¯Òšñº›}¯ÂùìÑ‹ÁñŠœÊa/¢Z/g ’Wв*k¯£<1ï…;Û˜¬“ŠÑIwPнád±²8`Žb}Ò7;ËÏ„¯úŠáI¯É‘°gÀ¹³»)µ©q¯W+³Â©µ0+±³³Èé°0Q,¡4±2+¡1Ó„}*³WZ³Êh÷ · hx`W³Ck·Ñ¹®¡2®1zvkÔd· k«=Jœ®‰ ‹»›®š¡1Âù«“‹œ32Šj·jnep«ž¥@r 8ûŸþñ8Á‘¤šêÑYƒ´6+y>a*êÜI£'x£>ž®»®#´1¦»›hPŒ1B¢ bºÂi‹®ûS>œ§Jz>Á¶–G²¦{¥c€»6úŸ1ŸBy ¶ "µ5Iá¸Ükr–z§¯J¾Ü™©+¦Üžk¨¸Ü»›ið¨ä+œñÁ¾Bú¾q1Ûä¡}J¾º8øK¾WÚ’$l`uÿé3á±n²¬¥S0ÊšÖ™@èËšÜ ¼¥Êš¼+«º9AP¼¼­‚J’¬‰œèÃA<‰,¡¶¸À $Ì3yŸHQ I¥³yH2B¨šÖÉgr/ÿ¹3ñQ,:yA§.œ»‰>³2Å•kª1#rà¼L:uÀ¿QªÆ‘>yq¥u Â^ªÆgJ›ÑBœ¦3‘tÌz½ÿ9§,Ì¿4°›ñƒ¡3ƒ\¹y‹¾Ë¹8ÈMª7´)¡2RL›WZŠšŒÅ‘ZqB\üê32÷J2P†»~©øhÿù©3‘üKª3AïÂ1±¼›Z":ô©# ‰Ÿ_0yÐߣG¨ùËÌÛ‘XTBÝu k R™^ù– P“ÇAš¦©Œ1Ó‘29•€Ö1ÄUÎyŸª±Ü\OÒø’ªa\i•+) (@ÌÆüCâÌ@älæèÌÌ¢‰ÏǼ:  +?Ìó0“ÑfL4”1ÞÃ’÷/zD€85 ˜Õ²öb^Bv04^•Ý›"Qs$bçuaåÄMßs!åG#uÿˆK¡a¢ÕU"-„5Ö"ÝËmæ#‚ZÌ>Í1˜_Ä(‚×!Ä.€3@6`- {Þçî1œ#è7.P›ïw& fµóHoD—“ç“.^ì—;U¹=”IišZ{ò ¡f#㣱Üèp1§_ž91 ™1ëØõÒKS454¡ä{Áç²Þå¨5Bgàé¡-°èægãê43(€sÊ-À‹Ó8=1ë|!Î\­Áþ5¿¾í.4'1Ždè(®u•Ða&âL³3f~Já“3˜Î”ï“å逕uŒ~&»±Îº2pêe‘<«^›:QÇ5ë³NëÖeë‡Xº®åj4#åÁNå VìÇn’!ìu4ÌîìkíÒ;Õž×Þ[éáí,ÿë$¨âNîÔÊMha#4ë^ó>Öïjy騑éM¾éÖÒéŸnG“a´Åï=­œ•Ï“©>¾5Àêÿêp!ë _ërëˆ^GÏëÿë?åÞñê‘ëòÿ5òRíÓN'òؾòÝ~÷þñò(°Än Œ¦”îúIJ9ßîÕöî¿óó†?õÞ~FŸïsqœÕçEóïP/ðS_ð­ŽðR§ð /ì/æðJòõÂN"ïëþQö OÚÄ®ž2¯ìÃöÏþö%Oí|A÷*¯íxÏíyî0?îåNBÀ¶è÷mîÒþ1…¿óŸ4Eòôô®éÀ¶^øžI"ë9¡•ÿô¦.õ¿ÊVïê‡æù[ßð]ÿð¹núbú?ëfÿbúíú9µ`¿öÇ!ò$÷sŸòÙÞòþÁÛé=áG­Šßñ[0é®ùI?ž‡ø^†âs~ÓY¿£WñàB Pz5à³@'ïõP]ø«zü%<­ÇðB_ú}ý‰±—úàßê›mÆCí-»ü×ööŸÉË}þÏîÀÞ÷íÄNð#wn Õ)@ÚqøˆÞÏ« ¨…5 WªždN£Ï™( ÂíâB´ª#B Å%)QÁ3:F÷Â"¡61§ÏQ[Œ† Qpvh;À‚Z¬`m YT| ¦Ðd|Ô¯ÒM@ȵDBP‚2@é<Ì÷Ççƒu$Ð? ¿¤þÀž ìuØÅ?Ö‡öŒ]÷‚V÷o6»hûøÌ u÷íÀQø/€_Ì+wÙ ¬!èîŒ`ô»ƒ-.‡èÁ·pýÞöktµ¥‡BHUø ‡0ë}¾(úp#Üu+ÐýIÂ8ÿÖ ÇÓ„ú¯Þ@k wô}¥ÐžBàÃXa„~p¤êÉ,]h>Çm¢-ËÀšD;œ‚l¾A·`=ìúPÔõÃr8–Lqj n7ˆçáD ?/!òCAÇ Ý*ã ±JÄ6xâ!A´ˆ\0#îýÀmœG|ˆRgŒDXå`J|…Bï×ÌB”B'ÈltrLñBðç AàæÃzæ¯ê‘bHúÆ#dïÏËa¼³a ë_ìûк¸7 Q^5ü! …×p³ü>mÈ÷_º;‹‚O>xCè í`Nts‘'B¾îÅè*ƒdØ‹—¯/j¾«Wþ#×c„(pýF¨¸ ãˆp‡äEF·7=!5¼ŒÖ0,º¼±HîV™nÑçyÁžà|¨cdH>ëXÇþ¡L ˆQÚăxV"vlˆ×&FDðXbA¤‡!šGWè `HˆT&ŠGƒË£¨;qÞÇï˜ÃãIýqñÅB¢wïêâePz4@.üD¾è‹â_¬Ãð6ºÜx O_$T}¾QãÃdiq䊸ï8bFå¸ÃðS 3ïÜ•t§Ùóëy‰.âA¹¸ka´Jo_)Ë÷ý*¤_†€1C. IânT† òìQE7¡dD‘•QE&GR¨³a¸ëŒ°,>"p¾ßZT8ÒêÈ™}äé^4Àô9•1!c£‘œ"°óÙÆ%éõRà“ü‰QJ.ÆþåñŸ•<‘”±ÿ}Eˆ »dt‘eÒžÏX ˜™´‘m1MÆ;Óu¢½{|د¶¸ ©D¡xIbÈϧ!û¤nôˆQ* ÊßH%…ã¡´)Ò+"G°È%Å¢6|‘‘ÒøMÊ0é £¦<‚}³|Î`ãjK\–2&ºÃ*Øk"¬ƒ 2½=˜In@œ„Qª‡P†¡x'áQ\•çÏâÆ&ö’! ”•ò¯õ»9Iža•Œ†Å±+ê>^Ù(}¥‹lŽÔªžÉÙ7e¡‹TŸC#^†h¹ dµÜð±*Lfù9&ÉìÑ$¾Ç‹(1W"ÅD½Ê;Nˉø0äµ\íÁ~¨0¾™ i AòŒ¢@¬‘‘<žÁyH‡Ó„Ãp °0h%…/±ämЙîƒ7øàà3¦qÈffŽ;xð`O8¦zhM¨ƒ@ÌÀ70 ð€= ƒ:€@ðÜpx'øôàü€{ÀÄ&ø €°”A"`& PTà7@àDàìƒO° èì qNÀÒØÜœÀs€°9a:› œÎÀ€Paä´@lw`Àìœà €_p ’Á'qøNÁiÀèU`,€g€<Áæ?0€€ÐMÀr€ðû üƒ²9:¯g@4680àvÞNÒYüÁ/ØçàœÁ©<±€:¸Ô€|<°?ç'2°û`ÌoÀN§ò¼žàhÏð0†`tÐ8g§èðàv!  @€ÍÙ¹€ž’`üMx ú0˜+üƒžg¿€À‚>  e¡@xÏmð €Á€ÿ ƒ#ú7€1€ŸýÀ œ²¹9É蜈NÇip€è$£“@€¹iBg'€@ŒÎÀ)<ÀíüðÀ@ ðDK(úüÀ4p=ÿÁü¼ž3Üáù FÀ9ø¦ Ü€oð à›àøO0üÁX'  ƒD:ž' ä „ð>>Àz@ ÜQPÁðK€äY0 ©ðžß`´ƒ~Àî?ø>°ÎA=°Øä€ðÚÀ,œ€ ÀOƒö 3 „@E À6Už›“œÑ͉ Nçì œÑwT'x§ ŒÑw*€Á}§ìSƒph˜àT„êªAàû@€,:ä(Àú  ÜN>@`Ÿ8l®M à@ Àž  ÄN ðÀ'˜îààOì&Þü L@0âÁ?ÀgóoZ€%ð”@>HY@€þP8§ ˜e ü!z (Lµ9à<ƒ>à¾Áª’“rz‚ðòÀ/˜‘à؃¤:€€äÓ àPo¾æèä«~5øUXc'_=¬}Õ°¿ ’ç8›@m²Íð§Øœ›À§æÍ­Jú&ê €pNÄ©8ãü¬ À¤ÕÊ™þÁ`bssr€ÕiàÀÝœàÀŽÎqz:å(€ÚS‰Ê:!€©slÐÛ©>Ù'àŸÿ€@ Ô¨àì¨xTjoª<Ÿ+?øõó~žƒ”ú’€$ýý  ƒÀù@:ø&àüƒS€ ¼),€ üÏú ¦* ¥à U RÁ<øK xJÐ ÐA%T@{þÍçJvU Þ ¥î~°îÁ3PíàDÓpþÀ'ð—³ Øo*G7@ö4 ‹ÒMojWá€?ড€ý‰Om¹õ³ 8ì œ€ @ÖÁg%àx€€ ØÁ“LÕ @+;7À4½UVnŽNø ; ëè ¬ tÔ¿©à©›u´Y À¦•³`SƒîV6 6A›€ÏêY°ù”§Bx³€ jQ9§A(N D€o:g @ÐvÔ5Þ,¨´t6\J›g¿©@£VÚ €rý³¥¶ˆð\ñ¬å´1ÀÐ ðhÕ@غ–ÔAx@°…µ ƒ N,ðŠ´Ú° }#>Ì è à€ ¸H袎!èx*ÚìÐÀ œ€ jÀ­¸…Í–*X¬m·íu¤-<µ+ÔvÜ ø¬£Ó\O€\Ñh¾Ý· us} üAÀ›—߯ÎÍùX÷-r%£t3á>ÜÍÙ$îçܵëÔ ˜N| îÁ?P¡›x\ú7é) ¹½ŸÊÍ@r@G=ò•äÂSºsá,Íý¸æâÜ—Ë®'<8›<×ç²Q—K7{.€C7è]6zPG§ ¥B7‡îP¨{tÏ&>T÷çÞÓÑiE³îÙì¢Y—‚QÀÚèûvsšÑëÙdk:`»›Ó¼]À6ç ˜»u× Œtð6§à»›“ Ì]NçnÛ5ítëÂSyšCá©=ŧú4åŽÎ~úOGg@¨tÓ¡&TÍëØèØ>7£ŽÎGztg'é…¦7ôÆÎÓ+zÀéM½G·õ¾^Pþèý¼>wvV3+X{§™ˆõ÷ ÜÚ[peêðÝ·tõø_|ˆ¯Âe¸Î×ø„}ñm¨¾›Ó¶.\nê@@8 ±óûÆÙ¿)~ ­÷¿ä÷Œßó AÙoø¿=¶µÆMÜ*ñ-¨¿²ÿ Kî?ˆ›s³þàÿ+fëïîU  à’ÚAKÖ¬­u³6÷ÓY;«iõl³ØÏÚ üiGç¤íÀz¶,L[9­§µ­vÔ‚à5+˜ªUµ¥èW ƒõlp¹µvήY†PnÃ-·ßÖ[DyLP-1.10.4/DyLP/doc/Figures/primalcalls.epsu0000644000175200017520000016231711171477034017254 0ustar coincoin%!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/primalcalls.epsu %%Creator: IslandDraw for lou %%CreationDate: Sat Sep 10 14:59:05 2005 %%Pages: 1 %%BoundingBox: 33 423 414 684 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 477 327 1 654 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000060001 % 001000020060200000003000000000000060200001 % 000000000000000000000000000000000000000000000000000000000000000000000000020001 % 0011000e0020200000001000000000000020200001 % 000000000000000000000000000000000000000000000000000000000000000000000000020000 % 000100020020000000001000000000000020000000 % 0000000000000000000000000000000000000000000000000000000000000000000000003e7703 % 3733db821e2e60000001f3b806feef371e2e61a000 % 000000000000000000000000000000000000000000000000000000000000000000000000622201 % 18911cc23333200000031110092450b9b333224007 % 00000000000000000000000000000000000000000000000000000000000000000000001c423201 % 10910842212120ffffe211900eb64390a12123a007 % 0000000000000000000000000000000000000000000000000000000000000000000003fc421401 % 1091084221212000000210a0019a8c90a121206006 % 000000000000000000000000000000000000000000000000000000000000000000003fc0461401 % 109108c623232000000230a0089b1191a323222006 % 00000000000000000000000000000000000000000000000000000000000000000003fc003b0803 % b9f9cf8f1e3e20000001d8400f090edf1e3e23c005 % 0000000000000000000000000000000000000000000000000000000000000000007f8000000800 % 000008000000200000000040000000100000200005 % 000000000000000000000000000000000000000000000000000000000000000007f800000038fc % 000008000000a000000001c7e00000100000a00004 % 00000000000000000000000000000000000000000000000000000000000000007f800000006000 % 00001c000001c00000000300000000380001c00004 % 000000000000000000000000000000000000000000000000000000000000000ff0000000000000 % 000000000000000000000000000000000000000003 % 00000000000000000000000000000000000000000000000000000000000000ff00000000000000 % 000000000000000000000000000000000000000003 % 0000000000000000000000000000000000000000000000000000000000000ff000000000000000 % 000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000001fe0000000000000000 % 000000000000000000000000000000000000000002 % 00000000000000000000000000000000000000000000000000000000001fe00000000000000000 % 000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000001fe000000000000000000 % 000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000003fc0000000000000000000 % 030000400c04000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000003fc00000000000000200000 % 010001c00404000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000003fc000000000000000200000 % 015800400400000000000000000000000000000007 % 000000000000000000000000000000000000000000000000000007f800000000000000007bf771 % e126e043c5cc000000000000000000000000000007 % 00000000000000000000000000000000000000000000000000007f8000000000000000002122fa % 114730466664000000000000000000000000000006 % 0000000000000000000000000000000000000000000000000007f8000000000000003ffc21b280 % 71e210442424000000000000000000000000000006 % 00000000000000000000000000000000000000000000000000ff00000000000007ffffe020d481 % 912210442424000000000000000000000000000005 % 0000000000000000000000000000000000000000000000000ff00000000000fffffc000020d8ca % 313230c46464000000000000000000000000000005 % 000000000000000000000000000000000400003020000000ff000000001fffff80000000384871 % dbbbe1e3c7c4000000000000000000000000000004 % 0000000000000000000000000000000004000010e000001fe0000003fffff00000000000000000 % 000200000004000003000000000010300000000004 % 0000000000000000000000000000000000000010200001fe00007ffffe00000000000000000000 % 000200000014000001000000000030100000000003 % 00000000000000000000000000000373edbb0f1020001fe00fffffc00000000000000000000000 % 000700000038000001000000000010158000000003 % 0000000000000000000000000000039904cc90902003fdfffff800000000000000000000000000 % 00000000000000001f3b80f1e3cf17120000000002 % 0000000000000000000000000000010904888390203fffff000000000000000000000000000000 % 00000000000000003111010b163898940000000002 % 0000000000000000000000000001810904888c90203fff00000000000000000000000000000000 % 000000000000000e2119003a0410109e0000000001 % 0000000000000000000000000001811904889190603ffffff80000000000000000000000000000 % 000000000000001c210a00ca041010920000000005 % 000000000000000000000000000101f38fddcef8f01fff0fffffc0000000000000000000000000 % 0000000000000078230a011b163890930000000005 % 0000000000000000000000000003010000000000001ffff0007ffffe0000000000000000000000 % 00000000000000e01d8400ede3cf39fb8000000005 % 0000000000000000000000000003010000000000001fdf7f800003fffff0000000000000000004 % 38000200602003c000040000000000000000000005 % 0000000000000000000000000003038000000000000ff7e7f80000001fffff8000000000000004 % 40000e0020200700001c7e00000000000000000003 % 0000000000000000000000000006000000000000000ff8f87fc000000000fffffc000000000000 % 4000020020001e0000300000000000000000000005 % 00000000000000000000000000060000000000000007fe1f03fc000000000007ffffe0007773ec % eef7021e2e60380000000000000000000000000005 % 00000000000000000000000000060000000000000007ff07e03fc00000000000003ffffc22f904 % 447982333320f00000000000000000000000000001 % 00000000000000000000000000060000000000000003ffc0f803fe0000000000000001fc348104 % 465082212120e00000000000000000000000000005 % 000000000000000000000000000c0000000000000003ffe03f001fe00000000000000000148104 % 429082212120780000000000000000000000000005 % 000000000000000000000000000c0000000000000001dff807c001fe000000000000000018c904 % 4291862323201c0000000000000000000000000005 % 000000000000000000000000000c0000000000000001edfc00f8001ff00000000000000008738e % e11f0f1e3e200f0000000000000000000000000005 % 000000000000000000000000000c0000000000000001f67e003f0000ff00000000000000000000 % 011000000020038003000000000020000000000007 % 00000000000000000000000000180000000000000000f33f8007c0000ff0000000000000000000 % 0710000000a001e001000000040020000000000005 % 00000000000000000000000000180000000000000000fb9dc001f80000ff800000000000000000 % 0c38000001c0007001000000040000000000000005 % 0000000000000000000000000018000000000000000079cef0003e000007f80000000000000000 % 000000000000003c1f3b8069cf6e6efb8f3fbb0685 % 000000000000000000000000001000000000000000007ce7380007c000007f8000000000000000 % 000000000000000e31110093e473245cd090cc8905 % 000000000000000000000000003000000000000000003c71de0001f8000007fc00000000000000 % 0000000000000006211900ea042126884390888e85 % 000000000000000000000000003000000000000000003e38e700003e0000003fc0000000000000 % 0000000000000000210a001a042122884c90888185 % 000000000000000000000000003000000000000000001f1873c0000fc0000003fc000000000000 % 0000000000000000230a008b24232308d190888885 % 000000000000000000000000002000000000000000001f0c39e00001f00000003fe00000000000 % 00000000000000001d8400f1c73e710f8ef9ddcf01 % 000000000000000000000000006000000000000000001f8e1c7000003e00000001fe0000060000 % 000000000c04000000040000002000080000000002 % 000000000000000000000000006000000000000000000f870f3c00000fc00000001fe000020000 % 0000000004040000001c7e00002000080000000000 % 000000000000000000000000006000000000000000000fc3838e000001f000000001ff00020000 % 0000000004000000003000000070001c0000000007 % 00000000000000000000000000c0000000000000000007e1c1c78000007e000000000ff03e7700 % d7efe373c5cc340000000000000000000000000005 % 00000000000000000000000000c0000000000000000007e0e0e1c000000f8000000000fc622201 % 2246139e6664480000000000000000000000000005 % 00000000000000000000000000c0000000000000000003f06070f0000001f0000000000c423201 % d364710c2424740000000000000000000000000005 % 00000000000000000000000000c0000000000000000003f03038380000007e0000000000421400 % 31a9910c24240c0000000000000000000000000005 % 0000000000000000000000000180000000000000000001f8180e1e0000000f8000000000461401 % 11b2311c6464440000000000000000000000000005 % 0000000000000000000000000180000000000000000001fc1c070f00000003f0000000003b0801 % e091d9f3c7c4780000000000000000000000000004 % 0000000000000000000000000180000000000000000000fc0e0383800000007c00000000000800 % 000001000004000000000000000000000000000005 % 0000000000000000000000000180000000000000000000fe0701c1e00000000f800000000038fc % 000001000014000000000000000000000000000000 % 0000000000000000000000000300000000000000000000fe0380e07000000003f0000000006000 % 000003800038000000000000000000000000000002 % 00000000000000000000000003000000000000000000007b01c0783c000000007c000000000000 % 000000000000000000000000000000000000000000 % 00000000000000000000000003000000000000000000007f80c01c0e000000001f800000000000 % 000000000000000000000000000000000000000005 % 00000000000000000000000002000000000000000000003f80600e078000000003e00000000000 % 000000000000000000000000000000000000000005 % 00000000000000000000000006000000000000000000003fc0700701c0000000007c0000000000 % 000000000000000000000000000000000000000005 % 00000000000000000000000006000000000000000000001fc0380380f0000000001f8000000000 % 000000000000000000000000000000000000000005 % 00000000000000000000000006000000000000000000001f601c01c0780000000003e000060000 % 000008008000000000000000000000000000000003 % 00000000000000000000000004000000000000000000000fe00e00701c0000000000fc00020000 % 000008008800000000000000000000000000000005 % 0000000000000000000000000c000000000000000000000fb00700380f00000000001f00020000 % 000000000800000000000000000000000000000007 % 0000000000000000000000000c000000000000000000000ff803001c03800000000003e03e7703 % 70d719b99e00000000000000000000000000000004 % 0000000000000000000000000c0000000000000000000007d801800e01e00000000000fc622203 % 992f88c48800000000000000000000000000000003 % 000000000000000000000000180000000000000000000007ec00c007007000000000001c423201 % 09d808848800000000000000000000000000000003 % 000000000000000000000000180000000000000000000003ec00e003c03c000000000000421401 % 083808848800000000000000000000000000000003 % 000000000000000000000000180000000000000000000003f6007000e00e000000000000461401 % 191c88848800000000000000000000000000000004 % 000000000000000000000000180000000000000000000001f700380070078000000000003b0801 % f1e71dcfce00000000000000000000000000000003 % 000000000000000000000000300000000000000000000001fb001c003803c00000000000000801 % 000000000000000000000000000000000000000002 % 000000000000000000000000300000000000000000000000f9800e001c00e000000000000038fd % 000000000000000000000000000000000000000003 % 000000000000000000000000300000000000000000000000fd8006000e00780000000000006003 % 800000000000000000000000000000000000000004 % 000000000000000000000000300000000000000000000000fcc0030003801c0000000000000000 % 000000000000000000000000000000000000000004 % 0000000000000000000000006000000000000000000000007ee0038001c00f0000000000000000 % 000000000000000000000000000000000000000003 % 0000000000000000000000006000000000000000000000007e6001c000e0038000000000000000 % 000000000000000000000000000000000000000007 % 0000000000000000000000006000000000000000000000003f7000e0007001e000000000000000 % 000000000000000000000000000000000000000002 % 0000000000000000000000004000000000000000000000003f3000700038007000000000000000 % 000000000000000000000000000000000000000004 % 000000000000000000000000c000000000000000000000001f980038001e003c00000000000000 % 000000000000000000000000000000000000000006 % 000000000000000000000000c000000000000000000000001f9c00180007001e00000000000000 % 000000000000000000000000000000000000000006 % 000000000000000000000000c000000000000000000000000fcc000c0003800700000000000000 % 000000000000000000000000000000000000000006 % 0000000000000000000000008000000000000000000000000fce00060001c003c0000000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000180000000000000000000000007e600070000e000e0000000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000180000000000000000000000007f300038000700078000000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000180000000000000000000000007f30001c0001c001c000000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000300000000000000000000000003f98000e0000e000f000000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000300000000000000000000000003f9c0007000070003800000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000300000000000000000000000001fcc0003000038001e00000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000300000000000000000000000001fc6000180001c000f00000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000600000000000000000000000000fe60001c0000f000380000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000600000000000000000000000000fe30000e000038001e0000000000 % 000000000000000000000000000000000000000006 % 000000000000000000000006000000000000000000000000007f38000700001c00070000000000 % 000000000000000000000000000000000000000006 % 000000000000000000000006000000000000000000000000007b18000380000e0003c000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000c000000000000000000000000007d8c0001c000070000e000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000c000000000000000000000000003d8c0000c0000380007800000000 % 000000000000000000000000000000000000000000 % 00000000000000000000000c0000000000000000000000000036c60000600000e0001c00000000 % 000000000000000000000000000000000000000006 % 000000000000000000000008000000000000000000000000001ec7000030000070000f00000000 % 000000000000000000000000000000000000000000 % 000000000000000000000018000000000000000000000000001b63000038000038000780060000 % 0008000031000000000000400000c0000000000001 % 000000000000000000000018000000000000000000000000000f6380001c00001c0001c0020000 % 000800001100000000000040000040000000000001 % 000000000000000000000018000000000000000000000000000db180000e00000e0000f0020000 % 000000001000000000000000000056000000000001 % 0000000000000000000000100000000000000000000000000007b0c000070000078000383e7703 % 73f9bb0f13370000001bbec79c7748000000000001 % 0000000000000000000000300000000000000000000000000006d8e00003800001c0001c622203 % 9908cc90911887ffff1cd04c7e1650000000000001 % 0000000000000000000000300000000000000000000000000007d8600001800000e0001c423201 % 09088883911087ffff085048200878000000000001 % 00000000000000000000003000000000000000000000000000036c700000c00000700038421401 % 0908888c9110800000085048201c48000000000001 % 0000000000000000000000600000000000000000000000000003ec300000e00000380070461401 % 19088891911080000008d04c72264c000000000001 % 0000000000000000000000600000000000000000000000000001b61800007000001c00e03b0801 % f39dddcefbb9c000000fb8e79c77ee000000000001 % 0000000000000000000000600000000000000000000000000001b61800003800000703c0000801 % 000000000000000000080000000000000000000001 % 0000000000000000000000600000000000000000000000000000db0c00001c00000387000038fd % 000000000000000000080000000000000000000001 % 0000000000000000000000c00000000000000000000000000000db8e00000e000001ce00006003 % 8000000000000000001c0000000000000000000001 % 0000000000000000000000c000000000000000000000000000007d86000006000000fc00000000 % 000000000000000000000000000000000000000001 % 0000000000000000000000c000000000000000000000000000006dc30000030000007000000000 % 000000000000000000000000000000000000000001 % 0000000000000000000000c000000000000000000000000000003ec3000001800000fc00000000 % 000000000000000000000000000000000000000001 % 000000000000000000000180000000000000000000000000000036e1800001c00003ce00000000 % 000000000000000000000000000000000000000001 % 00000000000000000000018000000000000000000000000000003f61c00000e000070700000000 % 000000000000000000000000000000000000000000 % 00000000000000000000018000000000000000000000000000001b70c0000070000e0380060000 % 000800003001000000000000000000000000000002 % 00000000000000000000010000000000000000000000000000001bb060000038001c01c0020000 % 000800001001000080000000000000000000000000 % 00000000000000000000030000000000000000000000000000000db86000001c007800e0020000 % 000000001000000080000000000000000000000000 % 00000000000000000000030000000000000000000000000000000dd83000000c00e000383e7703 % 73f9bb0f13737779e0000000000000000000000000 % 000000000000000000000300000000000000000000000000000006cc3800000601c0001c622203 % 9908cc90939922cc80000000000000000000000007 % 000000000000000000000200000000000000000000000000000006cc180000070780000c423201 % 090888839109348480000000000000000000000000 % 000000000000000000000600000000000000000000000000000003661c0000038e00001c421401 % 0908888c9109148480000000000000000000000007 % 000000000000000000000600000000000000000000000000000003660c000001dc000078461401 % 190888919119188c80000000000000000000000000 % 000000000000000000000600000000000000000000000000000003b306000000f80001e03b0801 % f39dddcef9f38878e0000000000000000000000000 % 000000000000000000000c00000000000000000000000000000001b307000000f00003c0000801 % 000000000100000000000000000000000000000000 % 000000000000000000000c000000000000000000000000000000019983000001f0000f000038fd % 000000000100000000000000000000000000000002 % 000000000000000000000c00000000000000000000000000000000d98380000398003c00006003 % 800000000380000000000000000000000000000002 % 000000000000000000000c00000000000000000000000000000000ccc180000f0c007800000000 % 000000000000000000000000000000000000000001 % 0000000000000000000018000000000000000000000000000000006cc0c0001c0e01e000000000 % 000000000000000000000000000000000000000001 % 0000000000000000000018000000000000000000000000000000006660c0003807038000000000 % 000000000000000000000000000000000000000000 % 00000000000000000000180000000000000000000000000000000036606000f0038f0000000000 % 000000000000000000000000000000000000000000 % 00000000000000000000180000000000000000000000000000000033307001c001fc0000000000 % 000000000000000000000000000000000000000007 % 0000000000000000000030000000000000000000000000000000003b3030038000f80000000000 % 000000000000000000000000000000000000000007 % 0000000000000000000030000000000000000000000000000000001998180f0001e00000000000 % 000000000000000000300000000002030000000006 % 0000000000000000000030000000000000000000000000000000001d9c181c0007b00000000000 % 000000000000000000100000000006010000000006 % 0000000000000000000020000000000000000000000000000000000ccc0c38000f380000000000 % 000000000000000000100000000002015800000005 % 0000000000000000000060000000000000000000000000000000000cce0e70003c1c0000000000 % 000000000000000001f3b80f1e78f2e12000000005 % 00000000000000000000600000000000000000000000000000000006e607e000700e0000000000 % 000000000000000003111010b1c58b114000000004 % 0000000000000000000060000000000000000000000000000000000667078001e0070000000000 % 0000000000000000e2119003a0810211e000000004 % 000000000000000000004000000000000000000000000000000000037307000780038000000000 % 0000000000000001c210a00ca08102112000000003 % 00000000000000000000c00000000000000000000000000000000003339f800f00018000000000 % 00000000000000038230a011b1c58a113000000003 % 00000000000000000000c00000000000000000000000000000000001b9b9c03c0000c000000000 % 000000000000000701d8400ede78f73bb800000002 % 00000000000000000000c0000000000000000000000000000000000199f0c0f000006000000000 % 000000000000000e00004000000000000000000002 % 00000000000000000001800000000000000000000000000000000001dde0e1e000007000000000 % 000000000000001c0001cfc0000000000000000001 % 00000000000000000001800000000000000000000000000000000000cfe0678000003800000000 % 000000000000003800030000000000000000000001 % 00000000000000000001800000000000000000000000000000000000cf603e0000001c00000000 % 000000000000007000000000000000000000000000 % 000000000000000000018000000000000000000000000000000000006e303c0000000e00000000 % 00000000000000e000000000000000000000000000 % 000000000000000000030000000000000000000000000000000000007e30f80000000700000000 % 00000000000001c000000000000000000000000007 % 000000000000000000030000000000000000000000000000000000007319fc0000000300000000 % 000000000000038000000000000000000000000007 % 00000000000000000003000000000000000000000000000000000000f31f8c0000000180000000 % 000000000000070000000000000000000000000006 % 00000000000000000003000000000000000000000000000000000003d99e0600000001c0000000 % 0000000000000e0000000000000000000000000006 % 0000000000000000000600000000000000000000000000000000000719bc0600000000e0060000 % 3000000000001c0000600000060600000400000805 % 0000000000000000000600000000000000000000000000000000000e1cf6030000000070020000 % 100000000000380000200000020220000400000805 % 0000000000000000000600000000000000000000000000000000003c0dc6038000000038020000 % 100000000000700000200000020220000000000004 % 000000000000000000040000000000000000000000000000000000700fe301800000001c3e7701 % f109c6e6e3c0e00003e7701e3e3e79e6eceff71804 % 0000000000000000000c0000000000000000000000000000000000e01e6300c00000000c622203 % 131be3131421ffffc62220216262233734448f8803 % 0000000000000000000c0000000000000000000000000000000001c03e3180c00000003c423202 % 110a021210e1ffffc4232007424222121468880803 % 0000000000000000000c000000000000000000000000000000000780f3318060000003f8421402 % 110a02121320e00004214019424222121428880802 % 00000000000000000008000000000000000000000000000000000e03c318c07000001f80461402 % 311b221214607000046140234646223234308c8802 % 00000000000000000018000000000000000000000000000000001c078198e0300000fc003b0801 % d8edc73f3bb0380003b0801dbb3b39e3ee11c70801 % 0000000000000000001800000000000000000000000000000000781e018c60380007e000000800 % 0000000000001c0000008000000000020000000805 % 0000000000000000001800000000000000000000000000000000e03801cc7018007f00000038fc % 0000000000000e0000038fc0000000020000002805 % 0000000000000000003000000000000000000000000000000001c0f000c6300c03f00000006000 % 000000000000070000060000000000070000007005 % 000000000000000000300000000000000000000000000000000783c000e6380e1f800000000000 % 000000000000038000000000000000000000000005 % 000000000000000000300000000000000000000000000000000e078000671806fc000000000000 % 00000000000001c000000000000000000000000003 % 000000000000000000300000000000000000000000000000001c1e0000631c0fe0000000000000 % 00000000000000e000000000000000000000000005 % 0000000000000000006000000000000000000000000000000038780000338c7f00000000000000 % 000000000000007000000000000000000000000005 % 00000000000000000060000000000000000000000000000000f0f00000318ff180000000000000 % 000000000000003800000000000000000000000001 % 00000000000000000060000000000000000000000000000001c3c0000019df81c0000000000000 % 000000000000001c00000000000000000000000005 % 000000000000000000600000000000000000000000000000038700000019ff00c0000000000000 % 000000000000000e00600000600010000040000005 % 000000000000000000c000000000000000000000000000000f1e0000000fe300e0000000000000 % 000000000000000700200000200010000040000005 % 000000000000000000c000000000000000000000000000001c780000007e618060000000000000 % 000000000000000380200000200000000000000005 % 000000000000000000c0000000000000000000000000000038f0000003fe718030000000000000 % 0000000000000001c3e7701e2fb7377fb8c0000007 % 000000000000000000800000000000000000000000000000f3c000003f8630c030000000000000 % 0000000000000000e6222031243992247c40000005 % 000000000000000001800000000000000000000000000001cf000001f80630c018000000000000 % 000000000000000044232020241093444040000005 % 0000000000000000018000000000000000000000000000039e00000fc00318601c000000000000 % 000000000000000004214020241091444040000005 % 0000000000000000018000000000000000000000000000077800007e000318600c000000000000 % 000000000000000004614031241191846440000005 % 00000000000000000100000000000000000000000000001ee00007f000018c3006000000000000 % 000000000000000003b0801e7e1f388e3840000005 % 00000000000000000300000000000000000000000000003bc0003f0000018c3006000000000000 % 000000000000000000008000001000000040000005 % 00000000000000000300000000000000000000000000007f0001f8000000c61803000000000000 % 000000000000000000038fc0001000000140000005 % 0000000000000000030000000000000000000000000001fe000fc0000000c61803800000000000 % 000000000000000000060000003800000380000001 % 0000000000000000060000000000000000000000000003f800fe00000000e30c01800000000000 % 000000000000000000000000000000000000000002 % 0000000000000000060000000000000000000000000007e007e000000000630e01c00000000000 % 000000000000000000000000000000000000000000 % 000000000000000006000000000000000000000000001fc03f0000000000618600c00000000000 % 000000000000000000000000000000000000000007 % 000000000000000006000000000000000000000000003f01f80000000000318700600000000000 % 000000000000000000000000000000000000000005 % 00000000000000000c000000000000000000000000007c1fc0000000000030c300700000000000 % 000000000000000000000000000000000000000005 % 03000000040000180c0000000000000004000030e000f8fc00000000000018c380300000000000 % 000000000000000000000000000000000000000005 % 01000000040000080c00000000000000040000111003e7e0000000000000186180380000000000 % 000000000000000000000000000000000000000005 % 01000000000000080c00000000000000000000111007ff000000000000000c61c0180000000000 % 000000000000000000000000000000000000000005 % 1f3b81b9fcdd87881800000000000373edbb0f11100ff8000000000000000c30c00c0000000000 % 000000000000000000000000000000000000000004 % 311101cc84664848180000000000039904cc9090303f80000000000000000e30e00e0000000000 % 000000000000000000000000000000000000000005 % 21190084844441c81fffffffffff810904888390203c0000000000000000063860060000000000 % 000000000000000000000000000000000000000000 % 210a008484444648180000000000010904888c90403fe000000000000000071870070000000000 % 000000000000000000000000000000000000000002 % 230a008c844448c81c0000000000011904889190881ffe00000000000000031c30030000000000 % 000000000000000000000000000000000000000000 % 1d8400f9ceeee77c0c000000000001f38fddcef9f007ffe0000000000000030c38018000000000 % 000000000000000000000000000000000000000005 % 00040080000000000e00000000000100000000000003f9ff000000000000018e18018000000000 % 0000000000000000000000c000000000080c000005 % 001c7e80000000000600000000000100000000000001ff0ff0000000000001860c00c000000000 % 000000000000000000000040000000001804000005 % 003001c00000000007000000000003800000000000007fc0ff000000000000c70c00e000000000 % 000000000000000000000040000000000805600005 % 000000000000000007000000000000000000000000003ff00ff80000000000c306006000000000 % 0000000000000000000007cee03c79e3cb84800003 % 000000000000000003800000000000000000000000001ffc007f80000000006386003000000000 % 000000000000000000000c444042c7162c45000005 % 0000000000000000038000000000000000000000000007ef0007f8000000006183003000000000 % 000000000000000000018846400e82040847800007 % 000000000000000001c000000000000000000000000003fbc0007fc00000007183001800000000 % 000000000000000000030842803282040844800004 % 000000000000000001c000000000000000000000000001fcf80003fc00000030c1801c00000000 % 0000000000000000000608c28046c7162844c00003 % 000000000000000001e000000000000000000000000000ff3e00003fc0000030c1800c00000000 % 0000000000000000000c0761003b79e3dceee00003 % 000000000000000000e0000000000000000000000000003b8f800003fe00001860c00e00000000 % 000000000000000000180001000000000000000003 % 000000000000000000f0000000000000000000000000001de3e000001fe0001860c00600000000 % 0000000000000000003000073f0000000000000004 % 000000000000000000f0000000000000000000000000000f7878000001fe000c30600300000000 % 00000000000000000060000c000000000000000003 % 000000000000000000780000000000000000000000000003bc1e0000001ff00c30700380000000 % 000000000000000000c00000000000000000000002 % 000000000000000000780000000000000000000000000001cf07c0000000ff0618300180000000 % 000000000000000001800000000000000000000003 % 0000000000000000003c0000000000000000000000000000f3c1f00000000ff6183801c0000000 % 000000000000000003000000000000000000000004 % 0000000000000000003c000000000000000000000000000039e07c00000000ff8c1800c0000000 % 000000000000000006000000000000000000000004 % 0000000000000000003600000000000000000000000000001c781f0000000007fc1c0060000000 % 00000000000000000c000000000000000000000003 % 0000000000000000001e00000000000000000000000000000e1c03c0000000037f8c0070000000 % 000000000000000018000000000000000000000007 % 0000000000000000001b0000000000000000000000000000078f00f00000000187fe0030000000 % 0000200001880000300000c0000180004000010002 % 0000000000000000000f000000000000000000000000000001c3c03e00000001833fc038000000 % 000420000088800060000040000080004000010004 % 0000000000000000000d800000000000000000000000000000e1e00f80000000c307fc18000000 % 0004000000808000c0000040000080000000000006 % 0000000000000000000d800000000000000000000000000000787803e0000000c1833fec6e7ce3 % cdcf6dd87899eee1800007ddc0789fdccefe730006 % 00000000000000000006c000000000000000000000000000001c1e00f8000000618381fc7321f6 % 6e64266484888443ffff8c4880c488e64450f90006 % 00000000000000000006c000000000000000000000000000000e0f001e00000061c1801e212104 % 242424441c888643ffff884c808088424690810006 % 000000000000000000076000000000000000000000000000000783c00780000070c1c000212104 % 242424446488828380000845008088424290810006 % 0000000000000000000360000000000000000000000000000001c0e001f0000030e0c000232194 % 646424448c888281c00008c500c488464310c90006 % 0000000000000000000330000000000000000000000000000000e078007c0000386060003e70e3 % c7c77eee77dce100e00007620079dc7ce138710006 % 00000000000000000001b0000000000000000000000000000000701e001f000018706000200000 % 040000000000010070000002000000400000010006 % 00000000000000000001980000000000000000000000000000003c0f0007c00018303000200000 % 04000000000007003800000e3f0000400000050006 % 00000000000000000001980000000000000000000000000000000e03c000f0000c383000700000 % 0e00000000000c001c000018000000e000000e0006 % 00000000000000000000cc0000000000000000000000000000000700f0003c000c181800000000 % 00000000000000000e000000000000000000000006 % 00000000000000000000cc00000000000000000000000000000003c078000f80061c1800000000 % 000000000000000007000000000000000000000006 % 000000000000000000006600000000000000000000000000000000e01e0003e0060c0c00000000 % 000000000000000003800000000000000000000006 % 00000000000000000000660000000000000000000000000000000070070000f8030c0c00000000 % 000000000000000001c00000000000000000000006 % 0000000000000000000063000000000000000000000000000000003c03c0003e03060600000000 % 000000000000000000e00000000000000000000006 % 0000000000000000000033000000000000000000000000000000000e00f0000783860600000000 % 000000000000000000700000000000000000000006 % 0000000000000000000031800000000000000000000000000000000700380001e1830300000000 % 0000000000000000003800c0000c00000000000000 % 00000000000000000000398000000000000000000000000000000003801e00007d830380000000 % 0000000000000000001c0040000400000000000406 % 0000000000000000000018c000000000000000000000000000000001e00780001fc18180000000 % 0000000000000000000e00400004000c0000000400 % 0000000000000000000018c0000000000000000000000000000000007003c00007c181c0000000 % 0000000000000000000707ddc07c70738dc7884f01 % 000000000000000000000c60000000000000000000000000000000003800f00001f0c0c0000000 % 000000000000000000038c4880c4f88fc62cd8c401 % 000000000000000000000c60000000000000000000000000000000001e003800007cc0e0000000 % 00000000000000000001084c8084808c0428484401 % 000000000000000000000c300000000000000000000000000000000007001e00003f6060000000 % 000000000000000000000845008480740428484401 % 00000000000000000000063000000000000000000000000000000000038007800033e070000000 % 0000000000000000000008c5008cc8864428c8c401 % 0000000000000000000006180000000000000000000000000000000001e001c00038f830060000 % 060001000004000000000762007670fb8e77876701 % 00000000000000000000031800000000000000000000000000000000007000f000183e38020000 % 0200010000040000000000020000008c0000000001 % 00000000000000000000030c000000000000000000000000000000000038003c00181f98020000 % 02000000000000000000000e3f00018c0000000001 % 00000000000000000000030c00000000000000000000000000000000001c001e000c19fc3e7701 % e2fb7377fb8c000000000018000000f00000000001 % 00000000000000000000018600000000000000000000000000000000000f0007800c0c7c622203 % 1243992247c4000000000000000000000000000001 % 0000000000000000000001860000000000000000000000000000000000038001c0060c1e423202 % 024109344404000000000000000000000000000001 % 0000000000000000000001c3000000000000000000000000000000000001c000f0060e04421402 % 024109144404000000000000000000000000000001 % 0000000000000000000000c3000000000000000000000000000000000000f0003c030600461403 % 124119184644000000000000000000000000000001 % 0000000000000000000000c180000000000000000000000000000000000038000e0307003b0801 % e7e1f388e384000000000000000000000000000001 % 0000000000000000000000618000000000000000000000000000000000001c0007838300000800 % 000100000004000000000000000000000000000001 % 000000000000000000000060c000000000000000000000000000000000000f0001e183800038fc % 000100000014000000000000000000000000000001 % 000000000000000000000060c00000000000000000000000000000000000078000f1c180006000 % 000380000038000000000000000000000000000000 % 00000000000000000000003060000000000000000000000000000000000001c0003cc1c0000000 % 000000000000000000000000000000000000000002 % 00000000000000000000003060000000000000000000000000000000000000e0000ec0c0000000 % 000000000000000000000000000000000000000000 % 00000000000000000000001830000000000000000000000000000000000000780007e0e0000000 % 000000000000000000000000000000000000000000 % 000000000000000000000018300000000000000000000000000000000000001c0001e060000000 % 000000000000000000000000000000000000000000 % 000000000000000000000018180000000000000000000000000000000000000e00007060000000 % 000000000000000000000000000000000000000007 % 00000000000000000000000c180000000000000000000000000000000000000780003c30000000 % 000000000000000000000000000000000000000000 % 00000000000000000000000c0c00000000000000000000000000000000000001c0001f30060000 % 300000000000000000000000000000000000000007 % 00000000000000000000000e0c00000000000000000000000000000000000000e0001f98020000 % 100000000000200000000000000000000000000000 % 000000000000000000000006060000000000000000000000000000000000000078001df8020000 % 100060000000200000000000000000000000000000 % 00000000000000000000000606000000000000000000000000000000000000003c000c7c3e7701 % f1c38e371e21780000000000000000000000000000 % 00000000000000000000000303000000000000000000000000000000000000000e000c3c622203 % 13e45f18b363200000000000000000000000000002 % 00000000000000000000000303000000000000000000000000000000000000000700060e423202 % 12045010a121200000000000000000000000000002 % 000000000000000000000003018000000000000000000000000000000000000003c00600421402 % 12039010a121200000000000000000000000000001 % 000000000000000000000001818000000000000000000000000000000000000000e00300461402 % 33241910a323200000000000000000000000000001 % 00000000000000000000000180c0000000000000000000000000000000000000007003003b0801 % d9c7ce39de1db80000000000000000000000000000 % 000000000000000000000000c0c0000000000000000000000000000000000000003c0180000800 % 000460000000000000000000000000000000000000 % 000000000000000000000000c060000000000000000000000000000000000000000e01800038fc % 000c60000000000000000000000000000000000007 % 000000000000000000000000c060000000000000000000000000000000000000000701c0006000 % 000780000000000000000000000000000000000007 % 00000000000000000000000060300000000000000000000000000000000000000003c0c0000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000060300000000000000000000000000000000000000001e0c0000000 % 000000000000000000000000000000000000000006 % 000000000000000000000000701800000000000000000000000000000000000000007060000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000301800000000000000000000000000000000000000003860000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000300c00000000000000000000000000000000000000001e30000000 % 000000000000000000000000000000000000000004 % 000000000000000000000000180c00000000000000000000000000000000000000000730000000 % 000000000000000000000000000000000000000004 % 000000000000000000000000180600300000000002000000000000000000000000000398060000 % 000000400000000000000000000000000000000003 % 0000000000000000000000001806001000000040020000000000000000000000000001f8020000 % 000800400000000000000000000000000000000003 % 0000000000000000000000000c030010000000400000000000000000000000000000007c020000 % 000800000000000000000000000000000000000002 % 0000000000000000000000000c0301f3b8069cf6e6efb8f3fbb06800000000000000003c3e7700 % d39edcddf71e7f760d000000000000000000000002 % 0000000000000000000000000601831110093e473245cd090cc89000000000000000001e622201 % 27c8e648b9a1219912000000000000000000000001 % 00000000000000000000000006018211900ea042126884390888e800000000000000000e423201 % d408424d108721111d000000000000000000000001 % 00000000000000000000000006000210a001a042122884c9088818000000000000000000421400 % 340842451099211103000000000000000000000000 % 00000000000000000000000003000230a008b24232308d19088888000000000000000000461401 % 1648464611a3211111000000000000000000000000 % 000000000000000000000000030001d8400f1c73e710f8ef9ddcf00000000000000000003b0801 % e38e7ce21f1df3bb9e000000000000000000000007 % 000000000000000000000000038000004000000200008000000000000000000000000000000800 % 000040001000000000000000000000000000000007 % 00000000000000000000000001800001c7e00002000080000000000000000000000000000038fc % 000040001000000000000000000000000000000006 % 00000000000000000000000001800003000000070001c000000000000000000000000000006000 % 0000e0003800000000000000000000000000000006 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000004 % 000000000000000000000000006000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000004 % 000000000000000000000000006000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000003 % 000000000000000000000000003000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000003 % 000000000000000000000000003000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000002 % 000000000000000000000000003000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000002 % 000000000000000000000000001800000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000001 % 000000000000000000000000001800000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000001c00000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000c00000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000c00000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000600000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000003 % 000000000000000000000000000600000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000600e0000000000000018000040000000c000000000081800000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000301000000000000000080000400000004000000000180800000 % 000000000000000000000000000000000000000001 % 000000000000000000000000000301000000000000000080000000000004000000000080ac0000 % 000000000000000000000000000000000000000005 % 0000000000000000000000000001839e7cf383509b8e7cb9e0dc7800007ddc07879e3cb8900000 % 000000000000000000000000000000000000000005 % 00000000000000000000000000018133218fc4b19cdf20ce1124c40000c488084c7162c4a00000 % 000000000000000000000000000000000000000005 % 00000000000000000000000000000121210407508850208471d4801ff884c801c8204084f00000 % 000000000000000000000000000000000000000005 % 00000000000000000000000000000121210400d088502085903480000084500648204084900000 % 000000000000000000000000000000000000000007 % 00000000000000000000000000000123218e445188d9208e3114c400008c5008cc716284980000 % 000000000000000000000000000000000000000005 % 0000000000000000000000000000039e70f3878ecf8e70f9d9ee780000762007679e3dcfdc0000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000000000000000008000000000000000000200000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000000000000000008000000000000000000e3f000000000000000 % 000000000000000000000000000000000000000005 % 00000000000000000000000000000000000000001c000000000000000001800000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 93.628 76.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_primalpivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.628 103.676] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (preoptimality) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 123.628 103.676] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_clrpivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 123.628 108.676] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_degenout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 123.75 98.676] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n 117.5 102.5 m 122.5 97.5 l gsave 0 0 0 0.176 0 B grestore n 117.5 102.5 m 122.5 102.5 l gsave 0 0 0 0.176 0 B grestore n 117.5 102.5 m 122.5 107.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 93.628 86.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_duenna) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 119.612 86.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_addtopivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 119.612 91.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_clrpivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 119.734 81.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n 113.48 85 m 118.48 80 l gsave 0 0 0 0.176 0 B grestore n 113.48 85 m 118.48 85 l gsave 0 0 0 0.176 0 B grestore n 113.48 85 m 118.48 90 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 93.628 71.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_primalin) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 121.128 71.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pricexk) s savemat setmatrix n 115 70 m 120 70 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 93.628 111.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_clrpivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.628 116.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_degenout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.628 121.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_setpivparms) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.628 56.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_swapobjs) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.628 46.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (tweakp1obj) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.628 61.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_pseinit) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.628 41.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_initp1obj) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 122.112 41.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_swapobjs) s savemat setmatrix n 115.98 39.975 m 120.98 39.975 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 93.628 51.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (verifyp1obj) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 118.75 48.676] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 118.75 53.676] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_setpivparms) s savemat setmatrix n 113.75 50 m 117.5 47.5 l gsave 0 0 0 0.176 0 B grestore n 113.75 50 m 117.5 52.5 l gsave 0 0 0 0.176 0 B grestore n 60 95 m 92.5 70 l gsave 0 0 0 0.176 0 B grestore n 60 95 m 92.5 75 l gsave 0 0 0 0.176 0 B grestore n 60 95 m 92.5 85 l gsave 0 0 0 0.176 0 B grestore n 60 95 m 92.5 102.5 l gsave 0 0 0 0.176 0 B grestore n 60 95 m 92.5 110 l gsave 0 0 0 0.176 0 B grestore n 60 95 m 92.5 115 l gsave 0 0 0 0.176 0 B grestore n 60 95 m 92.5 120 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 60 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 40 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 45 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 50 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 55 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 70 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 75 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 85 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 102.5 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 110 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 115 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 120 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 45.4366 96.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal2) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 45.4366 48.5354] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal1) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 77.3726 128.957] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 45.4366 128.957] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (forcesuperbasic) s savemat setmatrix n 73.745 127.76 m 76.245 127.76 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 45.4366 121.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_setpivparms) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 12.5769 96.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_primal) s savemat setmatrix n 30.984 95 m 43.484 47.5 l gsave 0 0 0 0.176 0 B grestore n 30.984 95 m 43.484 95 l gsave 0 0 0 0.176 0 B grestore n 30.984 95 m 43.484 120 l gsave 0 0 0 0.176 0 B grestore n 30.984 95 m 43.484 127.5 l gsave 0 0 0 0.176 0 B grestore userdict /#copies 1 put grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore DyLP-1.10.4/DyLP/doc/Figures/dualcalls.epsu0000644000175200017520000010732211171477034016710 0ustar coincoin%!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/dualcalls.epsu %%Creator: IslandDraw for lou %%CreationDate: Wed Sep 14 12:17:35 2005 %%Pages: 1 %%BoundingBox: 85 417 420 578 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 420 202 1 404 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c00000c0002000008000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000040000040002000008000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000040000040000000000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000007cee03c5f6e6eff718000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000c44406248732448f88000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000060846404048212688808000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000c0842804048212288808000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000c08c2806248232308c88000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000180761003cfc3e711c708000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000180001000000200000008000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000003000071f8000200000028000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000030000c000000700000070000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000c00000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000c00000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000003000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000003000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000006000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000006000000000000000000000000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000c000000000000000000000000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000c000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000018000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000018000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000030000000000000000000000000 % 0000060000600010000030000000 % 0000000000000000000000000000000000000000000000000000300000c0000600006000000000 % 0000020000200010000010000000 % 000000000000000000000000000000000000000000000000000060000040000200002000040000 % 0000020000200000000015800000 % 000000000000000000000000000000000000000000000000000060000040000200002000040000 % 00003e211e26efb1e71dd2000000 % 0000000000000000000000000000000000000000000000000000c00007cee03e213c27884f0000 % 00006263212734131f8594000000 % 0000000000000000000000000000000000000000000000000000c0040c44406263422cd8c4007f % fff042210722141208021e000000 % 0000000000000000000000000000000000000000000000000001800e08464042210e284844007f % fff0422119221412080712000000 % 0000000000000000000000000000000000000000000000000001800c0842804221322848440000 % 00004623232234131c8993000000 % 0000000000000000000000000000000000000000000000000003001808c28046234628c8c40000 % 00003b1d9df3ee39e71dfb800000 % 000000000000000000000000000000000000000000000000000300380761003b1dbb7787670000 % 0000000000020000000000000000 % 000000000000000000000000000000000000000000000000000600700001000000000000000000 % 0000000000020000000000000000 % 0000000000000000000000000000000000000000000000000006006000071f8000000000000000 % 0000000000070000000000000000 % 000000000000000000000000000000000000000000000000000c00c0000c000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000c01c00000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000001801800000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000001803000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000003007000000000000000000000000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000300e000000000000000000000000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000600c000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000006018000000000000000000000000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000c038000000000000000000000000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000c030000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000018060000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000180e0000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000301c0000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000030180000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000060300000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000607000000c0000600006004000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000c0600000040000200002004000200 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000c0c00000040000200002000000200 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000181c000007cee03e213c2dccefe780 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000183800000c44406263422e64473200 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000003030000c08464042210e24246a1200 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000003060001c08428042213224242a1200 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000060e0003808c2804623462464323200 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000060c000700761003b1dbb77ce11e380 % 0000000000000000000000000000 % 000000000000000000018000000000200000000000000000c18001e00001000000000400000000 % 0000000000000000000000000000 % 000000000000000000008000000200200000000000000000c380038000071f8000000400000000 % 0000000000000000000000000000 % 00000000000000000000800000020000000000000000000187000700000c000000000e00000000 % 0000000000000000000000000000 % 0000000000000000000f9dc035c7b7677dcf1fdd8340000186000e000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000001888804be239a22e708866448000030c003c000000000000000000000000 % 0000000000000000000000000000 % 000000000000000003108c80760210a344238844474000031c0070000000000000000000000000 % 000000000000000000000000000f % 0000000000000000071085000e0210a1442c884440c000061800e0000000000000000000000000 % 0000000000000000000000000000 % 000000000000000006118500472211a184718844444000063001c0000000000000000000000000 % 0000000000000000000000000000 % 00000000000000000c0ec20079c39f7087cedceee780000c700780000000000000000000000000 % 0000000000000000000000000000 % 00000000000000001c00020000001000040000000000000ce00e00000000000000000000000000 % 0000180000000000818000000000 % 000000000000000018000e3f000010000400000000000018c01c00000000000000000000000000 % 0000080000000001808000000000 % 000000000000000030001800000038000e00000000000019803800000000000000000000000000 % 000008000000000080ac00000000 % 00000000000000007000000000000000000000000000003380f000000000000000000000000000 % 0000f9dc078f1e78b89000000000 % 00000000000000006000000000000000000000000000003301c000000000000000000000000000 % 030188880858b1c4c4a000000000 % 0000000000000000c0000000000000000000000000000066038000000000000000000000000000 % 070108c801d0208084f000000000 % 0000000000000001c000000000000000000000000000006e070000000000000000000000000000 % 0e01085006502080849000000000 % 0000000000000001800000000000000000000000000000dc1e0000000000000000000000000000 % 1c01185008d8b1c4849800000000 % 0000000000000003000000000000000000000000000000d8380000000000000000000000000000 % 3800ec20076f1e79cfdc00000000 % 0000000000000007000000000000000000000000000001b0700000000000000000000000000000 % 7000002000000000000000000000 % 0000000000000006000000000000000000000000000001f0e00000000000000000000000000000 % e00000e3f0000000000000000000 % 000000000000000c00000000000000000000000000000363c00000000000000000000000000001 % c000018000000000000000000000 % 000000000000001c000000000000000000000000000003c7000000000000000000000000000003 % 8000000000000000000000000000 % 0000000000000018000000000000000000000000000007ce000000000000000000000000000007 % 0000000000000000000000000000 % 00000000000000300000000000000000000000000000079c00000000000000000000000000000e % 0000000000000000000000000000 % 000000000000007000000000000000000000000000000f7800000000000000000000000000001c % 0000000000000000000000000000 % 000000000000006000000000000000000000000000000ee0000000000000000000000000000038 % 0000000000000000000000000000 % 00000000000000c000000000000000000000000000001fc00000000000c0000600000000000070 % 0000180000018180000100000200 % 03000018000181c000000000000000000003000031c01f800000000000400002000000000000e0 % 0000080000008088000100000200 % 010000080000818000000000000000000001000012203f000000000000400002000000000001c0 % 0000080000008088000000000000 % 010000080000830000000000000000000001000012203c000000000007cee03e2138dcdc780380 % 0000f9dc078f8f9e79bb3bfdc600 % 1f3b80f884f087000000000000000000001f109e12207800000000000c444062637c6262840700 % 0001888808589888cdcd1123e200 % 311101898d0887fffffffffffffffffffc3131a110607ffffffffffc08464042214042421c07ff % ff0108c801d0908884851a220200 % 21190108843887fffffffffffffffffffc21108710407ffffffffffc08428042214042426407ff % ff0108500650908884850a220200 % 210a010884c88700000000000000000000211099108070000000000008c28046236442428c0380 % 0001185008d191888c8d0c232200 % 230a01188d1883000000000000000000002311a311107000000000000761003b1db8e7e77601c0 % 0000ec20076ecece78fb8471c200 % 1d8400ec76edc3800000000000000000001d8eddbbe038000000000000010000000000000000e0 % 0000002000000000008000000200 % 00040000000001c000000000000000000000000000003c000000000000071f8000000000000070 % 000000e3f0000000008000000a00 % 001c7e00000000c000000000000000000000000000001c0000000000000c000000000000000038 % 000001800000000001c000001c00 % 00300000000000e000000000000000000000000000001e0000000000000000000000000000001c % 0000000000000000000000000000 % 000000000000007000000000000000000000000000000f0000000000000000000000000000000e % 0000000000000000000000000000 % 000000000000003000000000000000000000000000000f80000000000000000000000000000007 % 0000000000000000000000000000 % 000000000000003800000000000000000000000000000780000000000000000000000000000003 % 8000000000000000000000000000 % 000000000000001c000000000000000000000000000006c0000000000000000000000000000001 % c000000000000000000000000000 % 000000000000000c000000000000000000000000000003e0000000000000000000000000000000 % e00000000000000000000000000f % 000000000000000e00000000000000000000000000000360000000000000000000000000000000 % 7000180000180004000010000000 % 0000000000000007000000000000000000000000000003b0000000000000000000000000000000 % 3800080000080004000010000000 % 0000000000000003000000000000000000000000000001b8000000000000000000000000000000 % 1c00080000080000000000000000 % 00000000000000038000000000000000000000000000019c000000000000000000000000000000 % 0e00f9dc078bedcddfee3000000f % 0000000000000001c00000000000000000000000000000cc000000000000000000000000000000 % 070188880c490e64891f10000000 % 0000000000000000c00000000000000000000000000000c6000000000000000000000000000000 % 030108c808090424d11010000000 % 0000000000000000e0000000000000000000000000000067000000000000000000000000000000 % 0001085008090424511010000000 % 000000000000000070000000000000000000000000000063000000000000000000000000000000 % 000118500c490464611910000000 % 000000000000000030000000000000000000000000000031800000000000000000000000000000 % 0000ec20079f87ce238e10000000 % 000000000000000038000000000000000000000000000031c00000000000000000000000000000 % 0000002000000400000010000000 % 00000000000000001c030000000600030100000000000018e00000000000000000000000000000 % 000000e3f0000400000050000000 % 00000000000000000c010000000200010100000000000018600000000000000000000000000000 % 0000018000000e000000e000000e % 00000000000000000e01000000020001000000000000001c300000000000000000000000000000 % 0000000000000000000000000003 % 0000000000000000071f3b80f1e23cf1730000000000000c380000000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000033111018a126399990000000000000c180000000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000002119010072410909000000000000060c0000000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000210a010192410909000000000000060e0000000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000230a018a3263191900000000000003070000000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000001d8400f1df3cf1f100000000000003030000000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000400000000000100000000000001818000000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000001c7e00000000050000000000000181c000000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000003000000000000e00000000000000c0c000000000000000000000000000 % 000000000000000000000000000f % 000000000000000000000000000000000000000000000000c06000000000000000000000000000 % 0000000000000000000000000003 % 000000000000000000000000000000000000000000000000e07000000000000000000000000000 % 000000000000000000000000000f % 000000000000000000000000000000000000000000000000603800000000000000000000000000 % 000000000000000000000000000f % 000000000000000000000000000000000000000000000000601800000000000000000000000000 % 000000000000000000000000000f % 000000000000000000000000000000000000000000000000300c00000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000300e00000000000000000000000000 % 0000000060000000000206000000 % 000000000000000000000000000000000000000000000000180600000000000000000000000000 % 0000000020000000000602000000 % 000000000000000000000000000000000000000000000000180300000000000000000000000000 % 0000000020000000000202b00000 % 0000000000000000000000000000000000000000000000000c0380000000000000000000000000 % 00000003e7701e3c79e2e2400000 % 0000000000000000000000000000000000000000000000000c01c0000000000000000000000000 % 0000080622202162c71312800000 % 0000000000000000000000000000000000000000000000000600c0000000000000000000000000 % 00001c0423200740820213c0000f % 000000000000000000000000000000000000000000000000060060000000000000000000000000 % 000038042140194082021240000f % 000000000000000000000000000000000000000000000000070070000000000000000000000000 % 0000700461402362c71212600001 % 000000000000000000000000000000000000000000000000030030000000000000000000000000 % 0000e003b0801dbc79e73f700000 % 000000000000000000000000000000000000000000000000030018000000000000000000000000 % 0001c00000800000000000000000 % 00000000000000000000000000000000000000000000000001801c000000000000000000000000 % 00038000038fc000000000000000 % 00000000000000000000000000000000000000000000000001800e000000000000000000000000 % 0007000006000000000000000000 % 00000000000000000000000000000000000000000000000000c006000000000000000000000000 % 000e000000000000000000000000 % 00000000000000000000000000000000000000000000000000c003000000000000000000000000 % 001c000000000000000000000000 % 000000000000000000000000000000000000000000000000006003800000000000000000000000 % 0038000000000000000000000000 % 000000000000000000000000000000000000000000000000006001800000000000000000000000 % 0070000000000000000000000000 % 000000000000000000000000000000000000000000000000003000c00000000000000000000000 % 00e0000000000000000000000000 % 000000000000000000000000000000000000000000000000003000e00000000000040000310000 % 01c00000c0000c00000000000000 % 000000000000000000000000000000000000000000000000003800700000000000840000111000 % 0380000040000400000000000400 % 000000000000000000000000000000000000000000000000001800300000000000800000101000 % 07000000400004000c0000000400 % 000000000000000000000000000000000000000000000000001800180dcf9c79b9edbb0f133ddc % 0e000007ddc07c70738dc7884f00 % 000000000000000000000000000000000000000000000000000c001c0e643ecdcc84cc90911088 % 1c00000c4880c4f88fc62cd8c400 % 000000000000000000000000000000000000000000000000000c000c04242084848488839110c8 % 3ffff8084c8084808c0428484400 % 00000000000000000000000000000000000000000000000000060006042420848484888c911050 % 1ffff80845008480740428484400 % 000000000000000000000000000000000000000000000000000600000464328c8c848891911050 % 0c000008c5008cc8864428c8c400 % 0000000000000000000000000000000000000000000000000003000007ce1c78f8efddcefb9c20 % 0600000762007670fb8e77876700 % 000000000000000000000000000000000000000000000000000300000400000080000000000020 % 03000000020000008c0000000000 % 0000000000000000000000000000000000000000000000000001800004000000800000000000e0 % 018000000e3f00018c0000000000 % 000000000000000000000000000000000000000000000000000180000e000001c0000000000180 % 00c0000018000000f00000000000 % 0000000000000000000000000000000000000000000000000001c0000000000000000000000000 % 0060000000000000000000000000 % 0000000000000000000000000000000000000000000000000000c0000000000000000000000000 % 0030000000000000000000000000 % 0000000000000000000000000000000000000000000000000000c0000000000000000000000000 % 0018000000000000000000000000 % 000000000000000000000000000000000000000000000000000060000000000000000000000000 % 000c000000000000000000000000 % 000000000000000000000000000000000000000000000000000060000000000000000000000000 % 0006000000000000000000000000 % 000000000000000000000000000000000000000000000000000030000000000000000000000000 % 0003000000000000000000000000 % 000000000000000000000000000000000000000000000000000030000000000000000000000000 % 00018000600000c0002000004000 % 000000000000000000000000000000000000000000000000000018000000000000000000000000 % 0000c00020000040002000004000 % 000000000000000000000000000000000000000000000000000018000000000000000000000000 % 0000600020000040000000000000 % 00000000000000000000000000000000000000000000000000000c000000000000000000000000 % 00003003e7701e4fb7677fb8c000 % 00000000000000000000000000000000000000000000000000000c000000000000000000000000 % 000018062220314439a2247c4000 % 00000000000000000000000000000000000000000000000000000e000000000000000000000000 % 00000c042320204410a344404000 % 000000000000000000000000000000000000000000000000000006000000000000000000000000 % 000000042140204410a144404000 % 000000000000000000000000000000000000000000000000000006000000000000000000000000 % 000000046140314411a184644000 % 000000000000000000000000000000000000000000000000000003000000000000000000000000 % 00000003b0801eee1f708e384000 % 000000000000000000000000000000000000000000000000000003000000000000000000000000 % 0000000000800000100000004000 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 00000000038fc000100000014000 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 0000000006000000380000038000 % 000000000000000000000000000000000000000000000000000000c00000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000c00000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000700000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000300000000000000000000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000003000c0000000000800000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000180040000001000800000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000180040000001000000000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000c07cee01a73db9bbee3cfee % c1a0000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000c0c444024f91cc917342433 % 2240000000000000000000000000 % 000000000000000000000000000000000000000000000000000000060846403a810849a210e422 % 23a0000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000008428006810848a2132422 % 2060000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000008c28022c908c8c2346422 % 2220000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000761003c71cf9c43e3be77 % 73c0000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000001000000080002000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000071f8000080002000000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000c0000001c0007000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 37.5 103.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -384 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dual) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 60 111.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -506 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_calcobj) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 64.7178 96.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -762 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_setpivparms) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 74.0122 103.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -280 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual2) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.489 93.56] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dualpivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.489 131.06] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_setpivparms) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.489 78.56] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_clrpivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 113.468 103.56] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1076 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_duenna) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 122.48 98.56] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 122.48 103.56] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_addtopivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 122.48 108.56] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_clrpivrej) s savemat setmatrix n 119.98 97.359 m 114.98 102.36 l gsave 0 0 0 0.176 0 B grestore n 114.98 102.36 m 119.98 107.36 l gsave 0 0 0 0.176 0 B grestore n 114.98 102.36 m 119.98 102.36 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 113.75 86.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1092 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dualout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 123.045 86.06] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualpricexk) s savemat setmatrix n 116.11 85 m 121.11 85 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 117.349 121.06] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1296 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (preoptimality) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 125.873 121.06] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_degenout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 126.361 116.06] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 126.361 126.06] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_clrpivrej) s savemat setmatrix n 123.86 114.86 m 118.86 119.86 l gsave 0 0 0 0.176 0 B grestore n 118.86 119.86 m 123.86 124.86 l gsave 0 0 0 0.176 0 B grestore n 118.86 119.86 m 123.86 119.86 l gsave 0 0 0 0.176 0 B grestore n 80 102.5 m 92.5 77.5 l gsave 0 0 0 0.176 0 B grestore n 92.5 85 m 80 102.5 l gsave 0 0 0 0.176 0 B grestore n 80 102.5 m 92.5 92.5 l gsave 0 0 0 0.176 0 B grestore n 80 102.5 m 92.5 102.5 l gsave 0 0 0 0.176 0 B grestore n 80 102.5 m 92.5 120 l gsave 0 0 0 0.176 0 B grestore n 80 102.5 m 92.5 130 l gsave 0 0 0 0.176 0 B grestore n 50 95 m 45 102.5 l gsave 0 0 0 0.176 0 B grestore n 45 102.5 m 67.5 102.5 l gsave 0 0 0 0.176 0 B grestore n 45 102.5 m 50 110 l gsave 0 0 0 0.176 0 B grestore userdict /#copies 1 put grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore DyLP-1.10.4/DyLP/doc/Figures/primalerrorflow.drw0000644000175200017520000007277711171477034020031 0ustar coincoinª» €)-€ ˆÈ sÇH6eb P%Ì™2SÒè)ƒBFŒ.r°q#‡ )XL3›0y˜¤³ðˆœ7uà,¤RK!rêÌAƒ¢I*E¤!† 8p°p‰E 0R„|Š‹2\Ô`ãhQ¯F­vµ–…<ÞˆQフ'P@Ø Ã&Í7m‡qT ºvñò¨ 0bÚB‘÷‰*Iž8 ÂDW…K¶ ›NbnÄÔaƒNÛ1@ˆ&]Æ4§ ÆÌi‹BÈ›7kÚ„q“"¶™¶mÊIS§ï0›A.,BÌÉ1kDÄf#‡öÞ#L’LAÒû¤›3u–i«–­8rÒèfãÌ8>ÌQo²&Z:5éÌ¡#§L˜6_”áñ…¤€K0ɤM6Õ–ÓN=ýÔP_!¥Sy8•T\ápƒV\qâX–HbYg¥µV[oÅ5W]wåµW_Á(a†!¦cP8™d”Yæf hÆgEzÖVh£•vZj«9ùZa²ÑfnºñæpÂgÜf w¤rd6÷\tÓUÇ ×e·]w»'y+ž—Þz ¼!d„Çž{ðÉGBxÜ—ß~ýýà€ŠÄàMòäS_†•ÔReøTTSy8" nu"X^jUŠå±—\€Åȃ^|Uc`máxØg‹5öXd“UvYg›ÕÙgL²æjª5ÙZ[°U¹æ•¹íÖ˜\WÜqÉ-‚™a@'ÝÔYçvÚq‚wr>D§yÝÒ‘Æ\ø`F“í½ßo¸hi¸AG‘yìWF†Ú„¨ H 6DOAÈñÒsÔÄK!cW„„“N’J(Q–^˜©†œŠ4D¾tÀ$ V)À„L1x*j YÕ`àÌNÙbÎRø¨ƒ GH)ÉG]Š!ÊÆpCU,ølª‰¤žŠVªn­ú"­¯Î(k«7 ›#®<úÈk¿&,TIå²< û¶kÍÎöìmÑjI-ÁYûe˜Ù–é\·h‚«&›ãºi.ºá©«¢yó’Vo sŒ_?¬/ºpÃa<ŒBÄW,ÄÅoüDÇ,| á¤"m!¦MmÊ¡+ûë2Ì"ñ\sY9Tµ3Í8@ýзízÈGW¨ôɶOeÔÁ—Z5Õdy…êŠY»¶Œ±úõý`bߺ£®?ö*$‘F"Y’ÛÊ eüÌRiwmxg9ío|wy-˜bÒsç­4‰‹\o:Wœ7žÇÅ'e˜ƒæ¦(…5Š!¡ƒ˜ÄÞ@1‹aLcóX¤Œ;癬v2PîZV‡—ÅÌw7žðzG3äŒ+0@žÐòC´×‰¬RI;¡¦RÈ•”eSÖËž¹r½í±¥{¬²øh4>[鈹êÑ®€ä«!ëHb{ß’æö¤d«~±¹´ô·¥þù [cÒ· h¸*Nßaàºâã†7LsdÃÅÃå‘pd&¤ÝSv‘PáБS;b¯Æ½E‘k°¢¢ÉÇ6óa±l[T_ÚÚF%†Œq›ß§”F+åOZmì›—à(Àm°páZS›Ê…Çt50U‘L&tk -ìVˆ©€1 ¡ ÐIÁ•0AÞA1YˆÃ4X:¦.„­!ìY2E2M…,ÛÝ e‚ƒ#^ä(ÃCA;K%á%¯âü¡ìž‡Â”ÍS,9Ñõ$¹D'ªÊ{›Ìä×6iE²¡ïl]d|ÀÈ61ž’~©4£”êæJ,Áro²üàâ(¸3}+—ˆCàâ8'* ]ï ]˜9—ô !s`&  iò?d5?GÈrœ@œÝÒ¢"HTTMb‰ Å­¹J¡âchù®˜E³qq}_tŸ)‹%%¹a”£wó¨ÞøÒ¿L4©u™8^*0-&Lá5S@ŧ¦i¸iu ø¨›£¦ç.¨¼|6¯œK%b ‰©–… S¥ä-iUÁ`uV®jèù´˜>´yQmÖ1jÖU¢jÝ_µf ÀÀÅ•p'=Ü.ȸ¼Ö =ê¡ 3çÓ†ú꧇êb‰AÑ‘Žƒ¦CW'¢!uŸB<§ÊÒÙBÞÉL&1,¨´OŽèœÚ¡Q[BÈBˆæ½f/kYíiö —¼ª×²Ê5Ñ~ò¡_åDÅ ¿U¶v£öëhÞdëFÚŽ´–sÄ¥nëÊ[–:˜n(æÙ9 2·±ÖÕg"#ËÈÏi]â|íëÀªŽï³UܪCI Q°¢–À«5°*ÜÊ´.8–þs«mm)×:ÒU¥½Ô£Kû˜a’¨ ÂgˆDs2•*ô\ñ§FUξx¿  ['¹ ÊÒF4¬¥,pYw ·×®ñ£l 2-áJdÜÎ5¥w¼«/÷h§àþÉ^‚*.¡œ<Ô nstìàé>¨:ÖUÄîíçíV¨N:Å¢¯Î,ƒ§” ½A+*¤¦ÜÞ*“¸ižKª™¨âúZ­Å^N(˜c<æ{U”§%eEÇŠÊ·9Á>f#Hå\[’Þ–Ž(ÝíJñzá:exÃÈ ªb= :ç&:ºŒ磩¬Ô÷¦ wÜu!§Et3 ’5K¨£¼^R“ÓÔÞæÐ?¹2-c/³°ÖÚ—ÃæZÉx´·6­DצڋêX£¿î1l<ì7·̭íÚÛf³k îâ+3ñ¥/þðË_9õ«P`‡4¼á$ø!Ãa“;mkŠº‡Ì+u·%’/Ý®¾7ŠîëbYó›Ö…ñdWC)p4ïZÍpó5Ý€½paÇÙá¦s„%~ää6?ÕÐÝÞöî²¾}®Éþþû¿4p®œæ¯áKWø›×:[‘¾UŽ¿³²“ì[ó<ûëÔ~ù¶e¾wíÎû"Æ‹ªX&™o„brÖZ­5À‰~æ7ÞàG¥›_Iù[~ÈS×<…—½g—šAOc(ŸüÄL3øg>b8Hèл¼¹bW´t]ݼ“>»L·îº»Nyþž–>=ÎÓ+’C?WûÙ¦n8ÝÔÒ‡ŸÒä·ôÛGäwôý'û§3÷ÔnÞ‡vö_Gt7I9'x®§_?{AGf†k—ZmãxIÇf‘ç,Mg•'dÆVgÈ6aH¦gJLdàSø±qù²/ý¢ÖeîwmdÇ}ów€õ~D$~,$nÿ€\qr§Gd3ëb>ˆ]V¦€¥’ ¨z¬†oXk¯7†'{ˆpµ§kGVyh‚“Ç`m5g˜WdÉ6|œgqñÑ'[h]7hÑ–Xv}Ns„ŒDn\as9x<§…Xx¡uxCgf6&†ˆ{e¨{L—†@u—WRvfdxFq†uƒ|ÊG‡(ÎÐ'}Ôwƒ†–AˆÖM‹öMò7z…߆Dè;‚ñO8I H^ˆw~øƒ¶Ø43ЀÓSˆxˆƒ·…Š(fhk´÷ˆŒwt(?fÈJhÈ{jHlQ׆›ø†)xu|A”‡Th&eO8bñ6»ˆ„)V"†ØzùåY°×…Ó8{Ž(`‰d¨”(yÞx‰–‰Ç&aWaÌŠñ±W2%ƒ75r€Fr&‡r±rÒ¶‡PÖ‡‡dŒ§&Ž„UØj«WPÎúÈ…‹è…Xc©5eTÝ[ù{%|œ¸y*Øysè‚7‘"Çq4r¬È\9‹Û§mgG’ñ¸]ã—‹4#ˆ˜‘„ÿ÷‹ br7Œ07’PX’Mõ•2’öØŒøØYS´Pü86þH“‹7Ùkx†jt —À—yA ‡C)‡ @ŠÃ5(ö¡ŽÊzØ÷Šc‹e×}ÅX–U)„•Ö•»È„ç6"9–aç˜ð'‹fG”IsV9„mÇNG€ñ„ Ø™Âø™ï‡m¢)™d ¦i™ùו˜Æ¬™~Æ›(›:™ qnˆ‚óùõéGŠÙr!鎓¹ŸÚe„¼øŸ×Ãe-™oÉ_*— úui“¼ÆZyÉÊpî9¡RŸê‰êRèxŸÕIš ÊTRSwÌ ¯6 .™¢ýÆI:“Šwž·× J§— æt#Ȇšx‚ I|+èlùR@ÊnÄx›‘†RÓ›ˆ¤fq¢nÙ50), ¥htcˆ—Û¸{z£$H¡ã¸£Y|¦c*’úy¦ÚÕiÁI¢[ÆzJŠ¢p*žN:§å¥v*xú W*‚¾×§9Z¡]‡©L&¦ ’Œå¡f o¦ÉÈ™ŒªsZIú’’ê_tZt¶‡é™“ëi{š¥÷©ªƒ9ªŸwªO–ªø¡ˆÊT¹4«÷ø¨o cH©¨«x—2š§ì¬ª¥ Iu¨_jÀ…'z²|uH9ˆy\ˆµŽ`¤ïø¬D­iI­li­ái r*t•Z§»z§ßª©ÁÆ©k8¬âÈ¥UÇ£‚Z'/‘SŠ÷2ƒWƒ#0£¬ìHœP£y¯¬Šº‰•( ¯äOúw±i¯ÎZ²¦5(Yz…ß鯄°ãù¤Ë­×h°‡°!Ø{ Ž[Ê‹®D©;\–30™ã±õÚ˜³¹ƒR)¤øz‹lW~Òi¡n–V=`‹iM¨ª‡*³Lõ4^¶Gг³ºYµÊ¤@§­‰G°Ý£Cû«;i£ÂŠ´å*|åHŸ>Acú”•³hC„ËY~óæ¶QaiÁ¸`ù²dšŸ¦¶D„De›z* ·IJ«K©<;©»­a´˜z°|[£X:® ›´æ*”æ¸d:¯‹É‡h»¹i¢'™–6[¢ŽJºŠ­q™ºw ´v©·¹÷º›j´à¨&¨´çê¥MK¤SpPþòÃu¤á‘z¸¬ ²‰+²¶™¶¿{];¶P3YäE¹eÑ‹·ƒ¸¡™=³íë¸ïÛ•Páò»iÿ7o¹nøK›ú‹œ×©]'ËœVì‹‚xÀ÷ëŠWkœYK²ý˵W Á8"ÌiáeÏÉ~™ËÀËHóV¹¢+«£+·¥‹¼+ª¼`hÍ‹têéZáê·² ¸Õ[»‚y»À¤½N0L"‡oð0e°'Mür@¾ôʘ Œµ‹«µœëÁ¨Y~Š*À3Ô•.\Âë†M b¨¾›€)3À, ¢Vh¢à¹³*°¸¼«›ÃÙè«< ¬>|´Ô ”ò ±é‘/¨qI‰± r:%01 ýrR¼»Ú¬«ÚÁòª[qzm\¼2|¼ûXÃs|à :¥™ ½ +½˜ø— º´ØK˜ëú®ñq‡‰©»ʬeʾhÌ!j|Â/\­Æ{­,ÇÔè¢RÊ«T:£zºÇÓ‹ÊŪʢÊgÛW€¦”‹ÈI\r''S*w¸\œŠ;²ü{ËèôÁå§Æbli¹¬nb©Â[[ÉŽT»ܯ½ü¯qܳv Ê/Ê £œÇ}»|¬Ì{½Í¼dV¨½«w€È!ÛÉl˦¼¼É¾§ôlà zÏ¢ìºú » ›Ìð™Ê}¬ÚdTKÅÛ²µ¹¿“ Χy™þƒ^…~çJî7Ðãõ´4å!êDTéS¾âþêMõçëe ëw@ëxÞß–{EAàgprdì¥n.>=nX­ŽìòÉNê8Žë¾ãŒ®'q¢|±þåÊ~íþÍ‹b‘–nnp^$tÑùî¶^î. .s°îíní+^w>àN“~Ï:îÞàú.A^vQn AV­óÍ ñw1ñÁä-ðvO‘6@"ãLžê!Á(Ÿò*¿ò)_ꮺç0 òõômŸat€¼c!?ò—žé:Îé,_ô,ïò鯿bÑæRóŸó,°ó=ÿóË~ëò^ìFŸõ(_õ–;îõt;Nó_QïñBõâþàX¯õFÏõEÔç˜ÑSM/ñbÏ;}.õg/ò.¯ã4÷òlô×wMµqötóL΋HÈ€äôü}k.ù ä_ô¥^ò6‡ø_÷‹ÿvHh~ù(@ù¦où—¿ò¥Žéô¦œ>÷¯ødÏø¡ÿø¥~ú•ø©¿õi¿WOó‰?öØø¢38Žû’¯û»ïöû6/ûÃ_û£û“_ýÊŸú{¯}ïã qÁbÏå*±£3cii€a 1MÑáÞç"À `7@ÿö_ÿFÿú¿ÿüßÿù_ÿÐþù¿Hïßý“0ê¿ d€°ÿ!@øÿ þ£€^@8ûŸÄ€ðÄògþПúcÂýñ»‡? ÿsò?è-`œ0æÀ¸c`äòâ@ȉ 4‚CÐÞÀ$Øk ä"ž¿ô·þN† ä ,P4¾-¸Aàþã‚Ï ¾@0x– ¤dð ÎÀ4èÿÌ`dƒjðÿÁA8ÿÆ Œƒú/ –¿)x­ €{Y0ÂA(mŽ!4„„Ö€‹Àa"„‡ð>BAØá$ ò/"ÂI¸;!#¼„šÐæ\ÂJØ Aa(” ÆS¨ G¡',…œ0^ÂL¨ Ya$t…¤P–@*ˆQÀ„¨ÖaXhÀ%$†Ä"Ãbx ‹¡3¬;³P<ÃgØ —¡2œ†Æp.Ch( ±a0|„Û°\CdX §á8¤†“Pþ…Ãs8 Ë!1Ô…|° ¶¿?¸ãŸÀ…¯ð~¸}øáRá+\…ÚîÃh¨ Åa@ˆÙðþCGx">l„ß0"Ä~È kaCä‡>Bu8ýa%Ô‡š@y˜é!´‡0à)¨Ä”ˆ’rˆKt‰-1l­Ä‡jb;‰y8¶}¸œˆm¢Oœ‰)QþÅÄ—8ebJ<Ší$)ÖDž¨u"Oô‰J(â ˜èåUDIR*.E§Ø™"TPŠQñ(ªÄ¢Š¢üËŠ`q+2E®ØÓ"‰¼Ð>»“(ÿ†À °‹xñ.êż¸ûb^Ä‹Ñ/öEÁ£`¬‹‚‘0ÆÂ¨cadŒŒQþ9F¿ceü‹—q0FÉø'#_ÌŒx.öÁy8!î¸C5ªFÐâZ#k‹°*ÈFÙ(Y£ml©17ªÆ"`x£o4ºQ7Ê¿ÛxaãJœ³±6ºFܨuãoüÁq5.GÖh³"r¤Æ‘82Çèø{#plŽÒQ;Ç ¨®#vœ‰Ú‘5FÇÔØy£h$‰¾Ð$šF²ˆ ™á$€WÑ%²EØæ³"YÌ„ÛðâG²¸µ"ðù±>Ò€ˆHd~,ýq<ÒÇ™ë`ÿ˘BBŬø{á/Ì‚PÁÜD"G¤‰,‘(Hy"YdŠ\‘0²EÆÈ Èó_ìø¯Äó˜ÿ†€þó‘/RF É $­¢‹<’1’H"É!¹$ƒ¤Ô7RGÚÈ2Xy$pü‘F@I&É%Ù!å" ´‡û*L¼‰˜ʤ™<“Ia"N+1™–:›|“p²?±IÀ"š¼“eRMÎI‹'û¤œd“jr8âÉ;©'礟ô“{RMâIA‰& %›<”}²K’Æ/y!¥¥¼”˜2SZÊJ©);¥§ü”o’S‚ÊQI*¥¨,•™RR–ÄÒ˜? «ÌæTäÀWI+g¥ý ‚¶ÆÊZÉ+s¥¯¬¸RWšÇ^I,¥±–Uò:Ëb©*ã#«´‡F DËi)-«%µ´–Ø’ZNKm™-±e·ä–Û²["Ànù-¿%¸,—å\žËs)ÿÒe¶\—ä^jKyé-Áe»T—îòZÒËiÙ,?¤=$ƒ]PÿI0f œƒû¯`̃ Ý P˜“arÁ1 ¦œ˜m0 TL‰¹)æÆ¼˜ÓÿUL"à0¦Ç„˜°_ÊÇ, kÀÉT˜°e¾Ì…éÿZ¦Ã™13Î̈Y3ufÆÄ™=SîL‹Ùÿd¦È¬˜Óhö? ÙÿTæ³Ì„>³ÿ©I5§fΚþOhÍ­©5¯f$t˜U³jzÍC8¹&×›†pÊ¿°I5ѦÍ)›f³kÍH8ÙæÔLšQ“ÿÅM¹Ù4CÂ܃#ÑC®L{8 û$Htˆ“ÐONŒX!çEˆ‰Óp>NŠøý$ƒ„j²pÆÉÅ 9+§ä܈ sFÎÍ99i€Ó¤”÷ptÂÉKèb"tœàÐ+ÄÏ™[§æ\ÚPvªÎP™:¡íÜnòêNÏI:Açï$ž¸3v²ÅÓY/§ Œ•œ“rÖNó=]'!4’×±z²NêY:·çutžA@túNî ;â$„žR|NÏìY:™']T‰r"ÆJD9'Õäüì“{²N Äû'ã'BäŸpÒ Dì‰é' ”ŸæÑ€ŠIûiO¥› ü€¾I÷ià%4ƒbP•þÔŸŽL}ªO? Aí§òodÔª*>¨Õ :Ô‘¹6ª¨¢T‰zPªEmС P? /ECQC¦Åñx<¤WŒ@Q(ºT¶8JQ*UT©6Ѧ¶ÄBÊkª„œ©=uCþÔ”ê‡ã)Õ©úñ¥BÅ“Š?ë'™¼“ 4L*J¨Ú'…¢Sµ“Tµ^Uˆ'£ê¾ÒŸü°«6ÕŠUѤWMKRˆU­JV¹êä¥J“ÿÅÕý7Wõ_]Í6ÓBÊÕ¼IWùª]õ«x°¨‰5‹¦`½«F±æU·é2ç&Ùô¼`ŽLÉZ1)+Ä´¬ `&ÔÊJ'kgå¬`г†V¤©?ëe5­™µL̺ZÉàf=­£¶rÁ‘ WuæE½­F@(ÖPˆ[qënÕ„°·æÖß …ëE%®dÓ¸VºéX ¡qM¬‡Õ¶æÖéª[O¡^í«šð¹"V^ê=‘#ëÜÝu6 O¶ ?ií¯ç•Â^e#ø<ž©T¼æNòš^uéõ,èU–ÊWåÉy)žÜ“ÿuNX69`Å䢄ŸöNX›`Ñä‚u°sÒ––É{&)¬™´°¶ÁžI«J`l‡…°l’»ÖWï:b÷k|•í*”Wõ:Í+!t±-–Å>ÏÚ;O¬Š-±(ÇÞXýšc§Œ]£?6VòR0ˆ¬‘Å GÖȰd›ì1ÊJYGeëÍ °²UHÙ(Ëe™¬—m²I¶Èºfa€“u²\vË ,ke±,–U³]öÌ2Ù2‹dŬ‘M¨_Ö˦Ù4Ëfœ›¥²pÊæY0kgÅl¡U²ƒœÅ@Ûg¯lŸ ´5CΦ'¯¬¥µ´&ÓÿùÉK{i3mÿ³œ €ÓbZ„©ÿ6­¨;¤6ÿ™ZQS­XµœÖÓò?XÛi]ëu-µ}òÔ¢Ú;Yý¦ œ^²y*@l‹­±=¶6 (ÛeËl›m@¶Ð¶Ø:Ûi»l£­ü‹¶Ô–ÚF[l›mí¶…¶í²Û6Ûo‹lÅí¸%·Æ–Ú†[o‹n¥­¹]¶C¶?ö½y+ïŠÀ °·ø¶ÅyÒ´Hoéí½ý·øvßBųØoë-Àý·šT“ܾwpnÂÝ wm6\}ûp•âÂuUùÖá ܤ(ï:î¼Í¸ÿÖ¨VÜšxq'n0‘uišÇÉR4a[r|› Óæ GC¸ ¡ËM‰õaÚ¨)#!þ‹„° õM"  a@(|-3] +t ký+ºF—¹.]›ãr….Ë ¬2·ç¦MIu_îÕµ«™ð:ÂÜ„ysicÀÌ’æÑ¿jÅ,yAE; ®iC¦Uº1†D6$#Ÿ—n¦G ¨»{×Ñbп{ ³$j¢í„íY`jT/¨€mpWÈÝ5Zwg^ÝÉ»{׆ðÝ¿Ëãrk¬7ƒ×^P±x¯€+²n׈ÞE«8w#ï$¥¼v—ïb^ƒ—ya„WðYÑ oéU½m˜QÉkt!¯¢…ŸwöÖÞ¼Ëy—ïàõ¼Žöðò^#ÀKà ¼¾9Ôÿaßí‹Ô¦Zå¾××ú‚ßA)~Ѥ„ ¿ÚwüÒÐý§~Ïo÷M¿êMžT–JâÌŠø·þêß§p÷ïQ¼¿þ7ÿ `ÿÛí¯¦ Àx+`à0°>ŠþµfHà9­*°ÁC«¸Oà | ;pÍÈÀØ[`L‚9p P‡ xMŠ`ƒg‚KpNÁc»à,ï`°P\Á}o»`üád0 .Á8‹à³¨ƒ90Â3¸¶f×½‰\+Ž®ÀUìÍêZX÷ꎛMØæLáåšs­pq}ÂU»~a,l]ëÞ®¾pÆÅI)l[æ…v³¸a0 ãp^}ÚÐóV:|õð6›\Øúá1l6[æ >„xøk*€Cì„Ép¶›J˜sMCŠ@%¾ÄsØßBK̉+ñæÃ‚øwâL\ˆea'æÄ¤˜kb›sŠ1ñÖÄ’°ËáW\Š£°,©xkÚQYÌK÷ä&½“±Ò“R`lóg²Ì¤Äø: cUšŒ‘ã2®¥ßMã9ù‹¥q1¦ÆÃØüãÙøŒg£+E޽3ck¬ŒÅ12&ÇÎ8ÂnãVÚŒ¹±9öÆíX6vc÷Ïä4f“ÕØ_c|œ7ì:.‹ï˜£ãÙ8dÉb?¾¥Å8?æc„œc"+ýŠñ¸,*äƒ\&;©A¥ß˜Oäq¬2U¤ÈIá!cH\‘aÀEªR©‚Eëq%KÎÁGÕ8ZE©’sêÂuÉ×§E³ˆ_k2ǽÉõó%ÿޕВ[§U”·/'³dMÊKyœSž˯¹÷6QÏŒƒ‘ph¾Ì§¹4“æ-šDis ¶Íõ4 ïÂѸ*Qgô“­ÓOç>™œûdt l?*g¯ˆœ¥³s¦ÎUµ'sÅéÌ«3SäÎ<Ñ;sEè,ï°sœlÎq’»"Ò!*è²{nÏ4ÀÄçùüžë3}žÏé&?Ýõ,w÷³~–¤ xþµçížï³|®ÏÚ@_^ýœn4ƒÞÏAÓe¨ %4|>ÐøÙ?Cèõü ôz¶ÐC#@ Cô‚ÖÐZC§^:\•f¶!-ºE§%2—c@¾½¿1úÇý8Œlˆ ËwÆè}–‡ôŒnÏqùFkÚí£y´ŽþÑs9Hû?#­£©´ A€Iúßâè—פ™ôŽŽÒö–Ziç¢tÆ·gyK÷èí¥¡tïÕÒ)S8ÇCÁù4kì%¼Óx:Oëé=ÝBí4ŸþÓ€:P÷iAM¨ õŸŸ†:OGV€É¨µ£~ÔZ³–ÖHM©+µ¥–Ô—:SkjJÝj7µ¥îÅ®)TË€`J&Gµ©vM,UT‹j=©ªGµlÕÇWQžjSªgµkbÕ¶úUÛê´ «ã^v´Õc!ë)!aµ¬nÕÕñW·j\­ª9¤œ¶lø}ÚÑÓA­ƒ.®Ö:[ŸŽi­­­µîÖÛÚº‚koÍ[Ç5·®Ö×›kYˆ®­õ*®í:\·Âxý­Ûõ¹ÖÖwx]Ïkp]¯»u$îâØ·ÂXØ e±%ØŠøl…hŠö,Ø ;;lLI!v"ÜÅ{a_l8<±óª-ŒÅ[NB±o!–„'{–l” :5¶"Ù+[eol‹ý²£ðÇ–Ù5ÛdÇlQ˜²yvˆÙ3[gíCoi©76Ú™iE¥ÝJî?ö¤¸”içÒWºR12Ó^ÚU;igíYºµ›vZÉP›kûD!û¬×pq¶$ßĴͶ-Ä@fÛ"9#·mµ=·áv=fÈu›nçí…\&ÁvÞ–ÛPaÈîí©½·v×¶ÛQûpnÂ]¸éqØnÜ^{lCn­mývÝfܲQíŽÜ‡‹7÷¾µ¾Z‘/Üνq?·ö-ÝíDt×DÒí¹Ý"ènÝ¡ûÖæ?Ômºû& ø›Ã>úËkKdÉî%1OïiU\S (ÞõD>GYå}Q×hþsÞSVïú7ªg]fE ãfヌ{×h÷Ю x‡o¨p¼HùÖ²FÀï\Ô]ÿpoûnÏ¢~ëmtéw°ÑjûÜ»¿cÀðÞÁ{moäí2ûÞE5àFzCï齩7k¼Þ÷V{wÜïý½Ç÷ø6ºEÀ|gp«¸¾Ñ7ûŽN8Êoù]èw Ï’÷ûä¦p“\¶‰³³DÃ9¬˜œá6\ˆw_ ÎÃ÷äÿá„™0qžgŒ‘8Wâòù‰¯:'Îăx÷VœŠÊ)>¿xgâ\\‹›ñ·ØÂu÷à$¸/ypkÅ‹»¸!îK¶Ü”Ûâ å:¾’n¬ŒÛs|Ëñ>Çó¶ên't|ÛDÁ­,eúæEüGKòHNÉ'¹%‡äðkAG~É;y%ÿä—<“Ë,  '?å ü“‹òFÞ+¯m*Gå°<„C@Í£]t¾å’ùÕÆáZ>¤q¹/ï½qxHi,ýËqù.æ¶<—+óÞh7‘y‹þåÄ\2s^¾Ì—y0§æÅ\™¯M»IÍŸy5¿åq˜‘#G?èÞ±;ÚJƒÐú=§®Ó5¡t~žÐ½ãB‡è¡#t‡þÏ1úD×çk³¢×HƒêÑ5º@é‹ Na…j7æJç§-ÝÖ¾tˆ‡]úÞdélÓ¦ÇÍת0k:œé==¦«ô›NZ}úP›8=lVß7¨ÿÞù€mðäž:þ'àšº•¼‰ðxXïÁZëØêï<|õ‹*0¡ìÒÌç³ÛJæ?´Îÿ|¤ÔÔ"yÿÝH¹îÿnä;’ý/5ò¿ìÝ{Ñî… pPÝý'yaŽ<„õoÇÙh‰Ø©/=¶ï3"¡½¥÷ßS—•PTlõ¦¾Ù{$TàX}ÿiõü7½zgÇD€¬ç?±>TûÃ4ëüh&L‘éÿÜú^‡ëzu®CɺÎÛߺooë]¯SuAHÚë `/†„}všÛ# !þ Ì]œrä¨oO®lD½¿ã(&v—Ëìˆ,fˆy~GÀm mš%“‚›l'O}A*Í UpßWÂ÷â*dðŒHÌ£B4 tšô^wé;Zíï,¸¾ç÷ú.àñ;ÎÈïêпøýþáð»}ðÈwÿÎã²w›LKíý¼ÙHÞ-x‡ -:@çß1–¡ÂSØî×ÝįíêŽ{à¾*!Ã\…wà\ÅPH€ ܘD DŽßñFÁiX>¯ãy¼‰p"áÇóx¬àï’|‘7 1dÈ+ù±Pp€/ò]¡ïõ'¿ã»‚äqD~Çg…NÃêÂ|EøÉöÊ‹yàš ™Ÿ.Ài0%籂•7ÞkúT I’@(}a Ô¸A—ÈÀ%g>Ì _O¾Â× „ÞÐ'ú4à(‚ÈE@ЈHÿæ€pà ´ pé3}Ë AÌ//H½x5.N „/ ÍK¯¾ÆÕúC¾€¬§õžHÅ M3æ€AYe *\ZB & f€Y{À$å( ÚÁŬ#ž0tÌZsÈ~4:X‹yè_ïˆÇ¾ÒÌÐZ8€à,‚0€G (Rÿ8öÀÉèe+|A8†Žié†L—µŽ„I9aÇTÈB¸Ð‹1ì¡~ø„ A†Ã³V k’Fäp2;dÃÉFG#-‰K| Ξ˜Æ(æ‹D0{µ˜Â$¶ð…1LÀ A°ÆEÚ@‡JdƒÉhÆ9‘Ž3°ÁH˜èD6’‰†rüRf4˜/XÅcîä÷dž9Lˆ X!ƒyð ³,ÒL\y-ôìÒð^t„Ùª¸ÆJeG™ƒi¦V˜Yއ›Œ‰K-ω’”³³×Li/ñ—cÔå0©¡]ó›É¨<Ÿ ‚j’áš Èæ6?éM“•YQR{@PN¬œÓÏžíç/ZÐŽfC¡%}è>+z·>¦¦!H胖ÓXamh!MjB7{3ª³L!Ž‘$IÿÎìÉ!?o‘-Fè®'Ë´™‡1v¶Õh7¹5±Ÿ:åiö‚§”NšùÔº^h[œm¦ôtDWÔÒêæ&9°Ç<”ÚÜÆdÆTéžkìÄ´uY l¨Cv´:P‘&ÅHÉ*DÍ€”8¤øNŸ;8r¦°:X 32Ë!:ÈÌh^}¥ÌPñ‹“àdÉ^ianÚ£Èăœ­e­ÉXs/ˆ^ós]F™yX9ƒ!øò”}Wæ:›±ÍQñðæ|*ãÞ~5c•#‡ýîË3Ë<eo2™qºj ^¬ Í¡bÀÅÑ€Áù˜•Ž­ÚõÈ)î™±Ýâ<×­/c`Ajm¼ãðÞ].w¯Â îVÖï}¡„$¤ü{‚™¤2‡ Ê¡)DeÐ7Ÿaji mÈà ‚50ïnÀð žœ¾É¼Ýízo;¼Ý€÷—÷ëa÷(SÓ1°‡4}×-­áqf{ÒÏ'÷Êwv`ûßk»†æ5açbøîª‡>ÜOÏÝWj³“såg~7ø%2,r‘>mYESf4ðW( Óô¤ïòV¦Æ3ejþÐukݰë¾|qƒ‚\D"!˜j@ ã1 À%C2Håvn2Á%\nÒwòv²'ÇU€s€÷’€P'\¡$#g 3å"”ÂR’D€€2H•ÂØ¸ˆ}]"‚)8€ër‚“‚+øPà.(3n²€4n^4ø%Pà2S ’¥ÛS„É"<ø‚!øƒÈMSO˜(iЄ[Æt&˜exàK{\Ø’,\h5HQ eÐ¥Vc8"ju2‡é¡VbÐrè"jÅ|ˆ‡ €TͲ=ƒxj\Á‡{5³‡xj#‡á®òˆ†e‡t4‰­âˆˆHGqØ*q¡‰•ˆT‰òò(ŒÄ„ß–õqvÉó;ôqaî‘3m‡±ˆQâPP‹g@"»'ªÁ3b)_@yrásR%¬AÈXS°Œ’]ÇøÉ8ØØŒõŒ÷£,epþ¥sðfõn£‘„Äõ;ÍòRÂŽî˜fX%b`/e@7b£1\Ê£ü襎é³íatÙ‘"S!%òXŽ©ýXÎ8#xÁtÎè"É9Еd%³<;SEÿÓ0">ܘOâ¡@Ud’ ÑgÀt ƒB*Ô,ykx$IÆb5@y#w„kH9i)£QR)–ù’È(“™%”qt bôe_óH–aÉ•ñS!”(‘“¥ˆXÛØßHyQT%ã‘H·Zp0O[ 802 Hôa€9€šª)·åš•!›«©¶9¸)d›4Л™a›‡‘š¬9¶ÙÆ9“áš|ñË™2®‰Щš3КaÀ6€›3P›¯¹Ë©›¯yÜù›¯‰Ü9œaÕI›È¹žÛi6ž)‹Ê‘_0A2 DN ÀY3ñ+Lzý1y¡‘ ÀœÚ¡M:£1 9ôA@g¯!~6êŸ îAi@10 Ú'Øá  *¡îe¢ÒcÁªa¢­9°–&Z›E`  ²3!ª›E@¡¡Ñ >!ú›EÀ¡H‘3 :ÃY$Ê£=A:Š !êY/@j¡0A¤4€œI€¤ ¢4МIð¤JÒé-ú¢¶ÕšO0¥1õÅܸ¬“ŠÍIw`нádѲ8 Žb}Ò7=ÛšÍİüеi¯É!±gÀÙ³ºIµ©oYK³¿Éµ2K±°C³Ã ± [,ŸT±=¡0Ä|J³Vz³Êfå •ñŸh`x_w³E‹·ÍÙ®¡R®zx+Ò„·k«<º¾z «›®Š¡:ñ›„Š·Ã9#c¨x¡åV·ÚYÚ$ª³ýéIš©|ÑœeAC‹³ÇÒ™¢|Ñš3J‚6ʵùºí Bsºº‰uÐ $Q‘ §û›¶øº<ÅÃiª¡Çn;y&{ºV:¹[£ýÈÙ“y@¶ "µ5I¹Ý+s–j§J¾­™ª¦Ý[›Àȸݫ›ià¨äû›ñÁ¾AJ©ä;œÙÔ¡|J¾º8øK¾VÚ’$lPuýÉ3²n ²«Ùœ¥¬;³šÒi@軚­ ¬¥ïK›3“̺y1AP̼­‚J’«9œç“AL‰¡¶¸À $ÜŸ"º†º³gŚ͉$ tª¬)Lp&÷BÄn*ŠÚs ì©›ç£S¡1+Dl¹V¡3"Ïˤ3Qü¥/P“ >¬i¥u «î™ÆfJ›ÍŒ¦JÇ<1z ½ý)§.Ì¿4 ›ñ„‘3ƒl¹{‹¿«¹8ÈMª7´¡1SL›VjŠš|ÅšÂ\Íɲ32øFy¸é×…ÖŸž:YÀ¿£:Tð.˺©% #Ÿ:ò™õ¹Smà=’tš¾¼!À|—YE"^º2!%m ˜7Ò– `“Ç1𥩱—3ù—Æ1fXÎÚª!š¤9OÓ“ªqZi”Ò0(0ÌŬDâœ@älæè¼Ìë|ŸÄlÌ?„ðlØHÏ ÐþœÎÁ|ŸùY/ïqÐÔH—òÌCO¹}þ¤WéG2Ÿê,’Õ<`ÍÓümÉ5¥-ÉzÉt|çuáõmŸŽù8"7½9#_ ÎÆ%=î‘\=MÒa9HÔLI” bÔ…¢$ÙLŸ¡©Ô£ÒSñ;g0OÐ5zÉg^5Oè|¶’YÖ"ŽƒÎp‰@/ÓDP"‘–)AU4O#1O8Ét9D|ð#Õ¿UÏ$ÒL×ñ(ÐX.BØ5¬”ˆ-% ÀØl ‘I]-s i­×1m·E|·õ×¥qÔv5t:bKš=OœÝ‘æÑ×¶ÚZØ¥i#²r˜Ù?†Ú*d63R#ùÒdýÐ;s}#äÑ­Õ¯¤#]m&nH"óTÜi]Ögý—ÓöÓÖýÖÃ5gD×[m×i×0ÍÚnT{a'ÚØè\Ù—MK©Ö{íÙê °=£=Õ’dÚ¢Ûª}Þ{™Þ =€±½ßîMÛéaÛòÛ¸ Š?æÛ4b# #Ü»õÏ9"Çͬ}eÌý;ÚeÒŽçñ# ó+ñáy‹¬/¸FîãkºÁ+ §.ž0óÁ1|øH 1” Ù&¥Ö÷/’$€85 øáU"-AvåEdcãUé½}!B'hKΈg•Wn†Ä'å§e4×÷/Ýâ*ò…![äÖREÕ¢Ö¾"!="§µ<àÓS1ŒÿUŒxì8Лáf2Àç~®LÜR#Ñ2p9à·µxf:fÕÖHm$—£ç´CéŸd-T¹“qIÞ«œZf#⣰Ìèr!§`ž91 }ë3öÒ…Ôt454a¡E3^Nå5§àê4{ë€%3(sÊ-À¯C0À}!íâÜÕ ðå_ëšå!¨(@‹ÊÄâL q4|¨ÄƒìʾÌîìí±Ní˜ؾíÙÎísÒã(36±¥ã^˜^meÖG83ðó¡é¾ÓéŸ^Gr¡Z¨õŒ7@êŒTÈ“ê·e[]Šh¯ë²~]´Á¶Žî$rå¼®í¿ŽîÚåßÃN¯ć#1ì^`î.Íþìò>í}Qíö®í÷~ïÝþífW[ñ?Jðå~îQ³ *óÇÑîïŽóÒžó<í>õúvÞîï¿1/;dÆG›Ž–—Ž™n^6Téñåé?6fñÞ;ñ5Pêêy¡êßêrë?ëRë?†ë&ßç(ëÀ¾ò®-p/ìOOóQïSOïÖþóXÿ/ûîíÖªMh‘Ó$î£øªu[èÎô“áôÉù6ï“óT_ïVï–ŸõünêÜÒ³E’÷õomÿðrÿŒ®S¶ŒîYµµè43‹8€Zn¯ŒÎü4.G4F@öo¯µ5üQÓ³ÁŸüÓÏ,.;×þc§Õ¯J/,ž¤¢²3oö“ŽöêG< ßöt¡?÷êã[xÕq<¾÷ñ´KÈS#ïûåº]GøüCÊ«r¡&=(>iÕøbÞÌ[v«OêÍ»ûf_¾Ã|Z˜Ï‡ôf@Pzé®é]ÀšçnžäÛ€0 êy@|·B2_¿³%É¡ üÞ'ÿæCÁ{ƒfq¿hñŠßÑbtodÊÕ²æGhË#é,ŒŽ|‘¿DqþHö ‚5‹=}?šPeXt9Àg‘¿ x½Ÿ÷ò~ÅÏ„„€D à´Ò 3k3¸€0;õ£‚fð Ò…‘ SaœVraÊe’1hþÌ`ú3wi°ý…Š6HöÀÞüsrõÓÑAü§¡:éïîe<ø  yOä¾CÈ{]0œråMÀÕ$ ×%d.°õeÂØ9!гÌ#†½hØ {ŸÂ³ÓÔ]¸äž̆púÁëû8 @âðå‘ÃDh`°‹€Ã®? @Ç—ú*a<Ä„0PÚCmôˆÀpEéÑCJŸºC}P/¾@G7¡ìã„A ÌíE T(¶Åô-½•èVV`䓇!±ÞÄ¥k_âk€ ¤}HðÄÞí {5ëA?pž_gq{äËäêç³`ò ‹cq Z¿£ ³âªú~Y-R?2¸3Œ!mA†#A º?fÿDá?”† ƒí]’¬HùŸ©Cˆp!º:oØ a|ˆðä9@F!“j‰KovDxx ]åëyL±ÚÀÍWW’ƒJŒR.Q¾Ã£i¢H ÷0Ö¶ ë`( }NMj E>DÝáfdžQ‚Æ(C N„1@*REh]F?ì0.ímºª$Þƒ …ñ Ú½„Øõ^C,€ƒ0"Àq¸)báC‡•‘ÿ”;Ìó|cL´„Ð5*EâùiD §‘= E˜¨úàãL|}6‘>’D8÷¾! HfÝuÇU¡{ì18ÖÄáH룷;Ž2@9†>gÈùa_<{ÐpÆ:A"÷ã Úñÿ%FïÈýD±˜÷°¥C4€ò1NÄI)_K|NífÊ$é—$½œ2T–#~é!%Ü eÅÏ7¿UgÄ"õ{PÏ”1M§é0s¡öKtYf¨ð·©æ,†èoO&Ã5øþå©Ô "RU⿬ØV¦6ìŽ.<Ö3[ #qe·<•ñaDÙwf¼ì™óò3ÖËOy/wâX(eéÕÎ`ìàåo”—òGÎmßâ‘·‘Üñ„ ñ›ƒÔ”œÑ\ N ù$ùNä-J- I8$©\–¦²Y¢Í’¹*AÀâ” ÊmrÇ–Ù iåC¤›RÞÍÉø-õ¦e,v¿’\†Îÿ8:G"¨\— Ü¹ËÆ©'àŒœž2]BÉ|)%['•ì—d¯WÙ–­(¬¢`f°-î-Ê,I¸O@“U“-†ÏðǤŠà˜LŸr}ò¹Œ‰'í"Ì‹}²lŠÌè ©cíŸ]Jw.ÊÞ™-ç¶´›‘qRZDã©1eòÀ±SKœˆ‡æ”„ŽÊÒ_ÆÎ‘é,^@txYqq*ÐkÉ@_fx|‘Á2–C¼i3¡z¤uÒoZÏ9,Ñ% ׃Ä½è©øV¢~tœéäí”VM³ ÆÏ5y%Ã_¯Ú’øÓí‘Iþ 6¯ŸØ dSŽºÎ¿h@ ¥¯3X/QZK¸ÙBå¦c$ÓFÖPuØh@ ?™QyfÐ:8µ'¿S ÷Ñ4âÆÅ‰JSàé㙦Ÿtƒ“TP>ËjÅç)ͤՒerC†Ø"è­Œ”¡´f¦Cœ‰ÀthÂq—6Q8D‹ä»¬ž÷”yæSÒ *£¤×û ¢0„šMÙ)M(¡uX“û©PX¹Iy';õ0†ÊÌ\ICçéÞ,¥9ô‚âR%ú3gá ¢ŠMÑRÊ©ç-ý›¹´¤ÂÆÒéížh΢.á'"Ô}hE&÷äSišÒ;¨üž&„‚~DU™V?3z5 ©Ö¼ŽpÏÕ6Z·)¤!s„дi2!Hˆ2…›a…rÒ‹Ú@3*ðܨñt‚Þ̺ªÆ%…œ”‰GOˆ wjU,šá”dŽÓ‡j#*]x•šT*ƽ‡Q_èY¥Ô[æÍµjû¦H…©$µyÎTPKç,eœ©ñ¥îÐÈ:PM*åì¥fârN‡ü¸=gQ„¬øtBêÓ¹jO'Y€t©u < >(%…–}5øÑ.tºߦE]Œ…un>PxšX;ª”€¥ô”ÚÓ`™Z%§+õv°”\!NʼnY$@e®UµÔÂi9­0µ«²§BU½0ÀìçƒjšC•|]S£5'ƒzUª¸P~A¿ ½Ì+}µ-JµZU>‰UÁ©?§UmBTݺšx+bd¡dÕ… ×w*<‹+ñ\¬64\ÖÓǺY›köä¥ÐU¥úS—ªJá*+Ý®Ÿ_þ»ƒê=ikѯra,ÚWôŠüv‚R…šHU'¬Wh 1çkø#¦I3ü¹Xlª1«ª#å¦ÞT€ºS¨b·bYä,nÏÅÞN0ÚaÀ#‘±Œn2È‘øJHÝ%yG³´ØkšC²©Õ“@6ŽfU…©(fÜ,)Ê.YÔ4ñnÀJL±PµÐXµ1 )–mšaðÖ°§Í"e{l]ܯcs/fÕ¼Ufíç9Í çsÏ¢09 `ŠxÒrʪÉh1¹ŸÂœç”^½‘x0½ìŸý±WUÐúWèx[É)!³a•¢ ÖYYV ëpm°3ôÁŽRœù j)G ¨>S²ÚË*ß@0%…yµ„D¾z2Á$÷3”bõ·ÖV»`ë&qµ¢Ô£^JvHaqmà쬓µpæCðú:Eh°{UÀ:<ñ‰lU­o]§À•Ù~Rné`£íqvmu¹–Ëìê\1, ø„¿¶T~Û†:lÅ­$¦ã3Ù¢Ûe«`×-…¶òôÝ*>_™JßêõŒ««µ8ò»ciYKlB­­ZµÔÛSþ$¦aL§çv°~ÇohV_­ 5²VÚöÊWm±k®Å¶»ÖX¾®| ;÷mÅ­Å–ûÓÛ[wçÀ¹ŽR£"V„«V#,re¸íÑáÆT];9e.²ä¶ Õ¶Ø~ÛUY%‘~Wä¶Ó’Ë`O.Í,º¤Ô‚6Ü‘ja7è> ¢êb\›ËUkg‘Ý hÊÀÆÊ±šn n̺(×Ý‚Käêòäíò|¹ÚÕ³=è o F?m—FÒ–v؇ûa¯ 4¨ûRíâÕÿªWlÕ¥ ëš[Ÿ«uƒ«Á}¶y7áîÝaÇøüî*Õ¥ 6èUVÏg)Þèã°J—³ÞlËk»+îS‘'Ò\úvYÅä´¦Ô½v'¥Q ð,X ¾NÚ‹y#Þ 3´ºuøòXý jù«¨]¨$ÜZÞÚ©0w+Ï=°t—àzÒ»Ën‰î®¤ á’š^‹z/%íRgfÖÅ»tanÓ}¼8pvì@ÉÛSµ`y݊燺×U…Zn £m‚Òj/àW>&i™*ÇÈ[ä‹ä5Z/ø^à Uý´`6Ô‚ÌQ(+/Õ­7€¼ªÌÍ»@ìøºå7ô‚]Z [î¼¼õöìò;|ËPUÀó¬B/ù^ù(W€eRÒ2j5¯èHˆÀßÏÍîQ9I¾€0#Õ¦Õ7Ðn`ì»Ui'5ôM8ë²Z»‹‚® >¿Œµ‚RÛ±‹Zéí…•ÁÞnÛZ\žúûØ®¾$uÔùØï;w•-ÐÕ–]wfJP0lt3¢“]¿Œ·ýÒÞ’xSb»Daó7ö–]¹*q/ä·+^tà =ÖÄ9Tƒ<­Ö ›]Ö %ƒ„¥­®3êV”‘`(“p Ã “A“ˆÅ,Gt°Ì ìSg6à"LD]t'г”ÏÊð„¿l¶ ³ý+òB3{ZÙdp±Ý‰üeÙ†©hÿØ,–¯çÐvšÙWG o‹‹Ut)ÃÓrÌch}§°xo7i:áZL[ÈÌšRKÁg\eQ¦4^±›Å³\cßt·ñ#í¦bÖ ö«‘pi»• s#¿àpå2ÃìŠæx©Òbƒi‹Íkö’„Oªdê›»ñ7¥Â×ßzÕšTµpÜ$¹®6sÔ”«pAÂvÁ÷ÚÎÞ˜kM"JTœÎö’]M̈ƒ¦NF<8¦Š¿ç‰½Ám2.:/H¯øl6æU‹îhi†ç—< ;¦´ÿRÔ L© ?©2kêÅøkà‹,u=0`ÔÈF$øiÜIAr³¡zX±ÎÚzqý]É÷7VVêjk‘¨ËUÉ1˜ƒÖ_:Zg) 뜽QÓäˆk“Q€÷(^ð¡1ôdÛSÝp¸½¼(#âù²l‚Íòç…µ_¸x†áp™#ݲìÍËXè…» ›ˆg2 >ÃzYÄêËÝ‹‘§îW¾¼&ÒÐáŠús·nHv¶˜ùëòaRÚ–Qòé•©,Y.KWüxYëòu}Áx5‡fÛû]5g”ÌŸÓ4'çMš]kêL«s*Ö`R›kÖÔ`UÇëàYƒEþŒ)¤ò,æÎie* •ß±^Ê 6§ç±x”)²V¶ÈBÖ1o_üW?ß3µì¹%¸îžàÚ‚u³fîÃPþ’áL|š©sÐL»kø®6fÊ+l_ó}ϳyÕ~ä K ½°†°¤éÞÚ»Œ=4MíµO7B‡×ßן+ÊV4Œî‘`RLþºšDÏ8c²gæ{ÈFñ÷³Ñ9=wÁúÜH+²æÊ×5WÒKÒ*‹,eЖ™üzè=| y3ò\ÐÖ¶D×ä =I³uÕ¬Yâ¦ÞÇË=Iìl½¸E³EïÜï£ß,l‹bPŽØèË _ ÐÑË—ÎrŒcž •Ïi(l¤!éõíÊzI;Ä"Ó&wáÖ¬Ò\†ô–.¨½¢1°fD­}?ðÖ q8CCê ‡q³×¥Ò šž:®Lˆ7õs}Ä¥AãFê%“Kõt>Õ…ó¤µÞí¬o)t«¶ÐÔpãMfŒ`¡4‡žÔ#Yï¢_äº9=ó"&Ì'ºtõÄt5‰u#©fÐÇ\ƒÊò0gÖÀªNÒ^YQŸÌQ×e5çÔQº ƒÞ½–a^؈À9kiu]8q²{˜Ä,÷KÓßϬœƒæü`ÍìÁ=8£0zR g)*à]aÂãY Ÿ!Hé†Ó„Ãp °¡0d¥dmoƒÈ. ¼Á7“²C6;sÜÁ;€zr‘@h@ ` ´AF€z` @? €v`> ¨ƒ;àÀAxÿ Pm`µ±v¨OÀƒP*A`à°~€>áôƒ>0¶@< Û €lw`@ÒïÀ €¸m xÚ@pµ ÛP[n €ð p?àÜÀÁ>€Ú`n ¹@=ÀŸ›øU €8Ýàü`P¹€ævßãs€° ü 8à€(m€.7`Ú·íVÞ`|Þ}´å88 p0øÛJw@”78ø@|ÀÐwPÞ ¼z€”wø@í°¶Í·÷†Úø{P_ž¶ø^[€€ÒmøÁ¿ßdÛwØ ÀPÞ@€¾60˜G›i#€?°¶C¸A@xƒððœ·æF|n€·0 àá¬m00wÛ øƒ§Ýz8^j_íPÃ+w8Ý Av÷Ó.À@q„8ôÆà  <ƒ|p’·òãA„Çp¨ðÁã²àð€UxÀÓ> …‹ð>wƒî6Ð þÁ;Ê·pò À!¯ã‰<ð𹀇Óûdrï}€ãF_ûi€Œ¸ò&"œXn÷m  Üd„rWº‘Ùítàè°Þð@•³r+þÊ™À5xî ˜Pª ¨ÞÌpfº—@ ˜^@š3Ðp6/ßÊ{•Ã|p´›ù7xÞ@šc€À €!Ü øv®È 0 Ÿpë=¦7<ÀÞÈœn¨ ÀÀ;€–x¦78ÝÀ˜î£ÝбٖåÔÛz3€Êmê¡öàcz|YµóÖðsP¹9À‹/¸`Ì›r-øyˆÏæ@ð0м)ÿù çgóÊ;ý†ÇFd+ ø9¨ùß¾¿Cý£mÊÿÀ5ÀüTnðíkyGóZ`n0P¹ À·ÇåÍ‹²ýÉãþg§Þå`n·ySn޶ä ï#€ȳ×_ésœ¬-p<÷\¨ƒUNý?`÷ ,Ä¡6¯_åMþ ƒÓ=À ¨ø¨ ðž xã?²?mÞëÉö ¾dõ°ÌF6Üõ#nûoÁ7Àªÿ,ù×ŸÊ ðêãÀ p€RïÕ“v`Ú `þ€.xãŽÜóƒDpÁåöp¾€œÕŸÐÁ3€L[ `@üÀ˜Êà¨~>À XdWê„]PáPÿ ÿ@;à$þÀ7ë-[áwÐù@:`æ}à @TmÒg`]×»Íß@ð€uµW¹a‰ÔÕ!w¦@àoî: Âý@ÀÕ@-wHo€àm»`½™\TטÛ ¼qÞ Æq €õ†`qðÏ) ÷üÀéFlx“€ØÁ%ÿ]€GðÿÀÜÿ@0pµ "œ ˆýÝ-P €ƒþ)›€< Œÿ€( Ìx`ˆfìp @‡÷á{À7àÌž€70 H{cŸêò ¸Þh{ P¹a„›ÒÆÏÕwÇm‡½!(€¿µp£à×fþ!{µ ËÁ³àÑÆÏ}çž½G½ao': ô‚d?çƒQ\.XP¼à÷¹Í|Ö›4Ö ƒJ[ÐtÒàóf•Ûz'ß]ƒ@ü vªŸÀtjŸàVµÅ@@e—Õ À и‘ƒüÜ#¨´£A×ÉÀ6Ð’ƒ¢ÞäV ªrÀWGÛMz6þ6Õåf 0WØm‘€ÄÇ~n¸[*pì¡ÒÖ¶å¡;H¶ánßÀ5 Þ}n€ÞÆÂÑvLº‡ã-vÛ7Þ wê]KØð‘mÐ8È‚n7¡ÀéMoÁœŽ·žxÅF*mècÞ†½e Àöx>m_ìFpÿÀ'àÈì#ý8ÜÅnõà<  øüc÷è?tÂÜ6` òäô†Ä|’aÂ8?Îmm])>ºvl!OÀÐ@‚n¯]`Õ ‚€$Böud›/@ ì(äspˆ¿m>C–ŽåO÷Úas€)÷ü{À)AöùáÿÔ=ÀœâÆ?êmI$ ¤‚G¤Ý7àrˆãDGEÎz.'0âs[äühàrQÜ ñÙoLÛùÂesgdæ¨Fr…wÙ˜FŠoUÛæh6¾x‘¢ð&Ë™}À](CrŠzd—Íù‘¥£Ö¦Öup²0Ñç7@½=tF£¨w+îp²ÜÔØðe°õæÑÉ?@IºpL$ð ðÔ›Kç<‚n²Þ¦ÍQg# Ë…qÜ çx4ꃮd ‡Ï©wz£Ò¶~€÷,tyãÑFú]…€÷ô’ÀE8 “JYØÉ=+Læ’ŠbñÖÂ9À€ÓtöI¶<ð·ÐÉ‘ß$ðl“²¤õ§NfŽ'V7Â!{gcPà©~@@`¹’À§Ç-ê/@9€à“ªž(œU€`DbÀ?À-~·À+€ ë$ÔQJzP0è)mð£Ñxqÿ€4ðÊÝùãþx´Ýƒ À ¼rä©Qfpž€€ ¼r€é0™cp·øAmÈ¡ý–SmH\À `nf#×´w¬äxHà­]åWT‚nC¥ÇJn”kÛ¦÷T¦x\{܃8£UyÂ}ZeP÷É™rs.9RRom^ ǰ²$HGøoLfn±ÝæL“ÀÔž%=@/V–ÀPU›*ð@u€ÔЀh (<€;лmï;prÿ>pÁM”Ëâ?@oMce™ºÀç–È€ä›÷÷ù–Ð @J›ð<¹À<°xm¢› =–K€*`¶mú@9PÄ…DÝì p—LÀyI¶µïy ìDñ¦¬—É Ò65!‰´n†ž6 ¤¡'È‚#\¹,â…i¹I†3£ÒöÈ&  ðŒ€p>˜#æÚ÷`r˜è„Yµµ˜,f…ùbŽp#f‹Ycʘd›÷¶Ê¦Ž Åõ˜7d(ø˜ÀÀéÙ.&Ùv¸-™…›÷vENn ܆Âùs„!·%zÀð 0¶ Xf Ð”@'@|™Xæ øn׆fÆq¾Ò(¢oÀˆ©ct[Õ†ÂÙÿ@qH:{æP4‡æžéÔÔáaècŠ˜ÆbÕÆdþr@ ÅAštœp´iqýø}”¦7i®r& `OBmµ\¦9imL¤äfXA€ Dm9Þp×júÙ覨š€2p¶ušCÔÆj‚|½&À  –¶fáÖjJ€Ô)“f  À²y´µšâ@ Hšš½fÄš\«©;· òi@2ÉmŽš€Ù7è¯ÈVsX}C| 3@rจ ‹p N›×(ªŽ+@Ó6¸vªõÖ €—À @¾§A p¶›TU€ä›û&~C[ˆp]A|n€DлÑ8pÁ}œ!§ÓHrVr›ÜÉ)rVm*çߦrŽœUȉrn˜ÛP”œé!`sþÓÛÀpg]Íysöœ?ç,—XîœD'Р±nÒiøœJgÎétvqEçYÂðÏùtV‘ÞÕ™u&F§Òvuîÿ€pµÁoò[çñ}odçpµpgÀµsy[Û‰@pÝæÅy’[gԩȱÇä>µy$œ ×w†Ü÷¦ü_›Ãur Ôi¹nhÞâ øŸÛÐÃýp-œGuúÝoÀaž€æ©¸AqGÛÕ&yÖ¡§ 8z oãWØ q«ç­'z^ž°gÌq'žÇ깞úÞÑ&È n†œ—ÉUže§WçÙUr—>p|ŠžA÷ü@(—É)oùEÛMŸÜ; ÌµrtgöÙÐY…?g0Xu:'/'~’šÜ'—ÌÅvb¢"·~ @ûÙÇmsá§öIÚŸ@:ÇÊÉxž¦= bܧ€Ü’ú µ   ús ÂBœutܪÂÀzµ)“‚wâAmîâå©ía (Û9ÀádgZÑžÚþe›™Ó¥ è úÕAuP› ús–mc\j§Ó5tNX'B¾ <¨;Iƒ‚u-:„þœGeÞvÖ¡%£A0< üŠÜÉu èuR(j…¶cÜ馅€ÀúÜo‹åè Ÿ@z$Zof(ŠÙivÁ_ÂÀ¹¡‘Z~òµ]—Ú}~–§Ú5–¡{hŠÜv^] Ü w\qwÜ%¢w¨Î™‚*xÒ]‡Ò‚¨$r¦wà]+èz¶¡š¨ðljfßIw†âv((ú¤ så8¨jš¢¢Œж¢v#¸Wwp`ß´¹Šn¢ŠƒxÆ¢ºè$Šá9„k,š‹~¢ ^>w2þ¢Çh*ŠNn“3*ã-ž|ÙØtë\ ÷ 6Ù&äýE'7 ãÝœuÜ\8ôpà(w Œ£§¨9ŠŽ–ŸÁ€˜§Öqâ xž¡À€œ7âõh›—Ž6~@¹B–ähü¶è™|€»(@–cç)zQp†Þð (¤%òùÕI•saI‘‚ ¢çEÊéi¤)Gêz~u%è’.¤"i°x’¤³ÞIZ‘qÀJêà ¤a’¶žá€LJ“ò Ù Å)„«\ “N{dŸç“¢€…Ýôy!g·Çî-¥G©B;.¥–'8à”þ‚Qia7ÅU¥üÜSÚ“ž¡( —¿ýzLi%Çìa¥`©y7–R¥!çYÄE¥biÃW–‚ù p÷¬¤( 7—Ö¥OgZ‡Bm7§YÊòuq~©W˜¶¥ƒ©…t¦WÜè9½Ñ|ÒŸ]Z˜N›éåiÑ1}’ébJ™¦ KÜÒôõ¥šéW™v¦cÖGUn}¢)g:½‰}Ã]Ùç;N›¿¤cª'‚nìÜ4GÛ}u‘hlzyŽ˜Bßmz<‚¢º)<À›î}¸)pJv>{å+j½ýdgçGø¿éÓ›"§ÁérÚœ®mÑ(ÔD§É) ŠìU§Oçuú½Ñ‚Ûinzœ~§ÊixÊx£´àûÙR§éiwœpÁßð÷ž¢§Ü]Çœn£ÜjêÕÕœçéÈŸÓôxt§/a Êdr* š püÀÕYtö êM B¨hZ¡>¨ô[†J¡6jÕ¦ z¨ªˆŠ¡Þ¡%êHx¢¶¡À]»r¢y!èL x¨-*>ÀÉ£'ÄÙ¨@0½-°oe±š·±€ê2i©±J¬º·>±¸(YG³&žTìôfG Ž_›åÉÔm{}›[)Æt¶c›Ÿ²uê©åÆË•og¬Õ*ŸoìÇvpÖ)ÐÙ¸™±k칟º±H¬Ûdžpy, ˜öŽ—ãë¼ñ¤êèŲ‹ìÙÈ’c Ž7—q$‰îužU)&;A’ߪÚÉrw“lýh³†œžlÿ(EÖy:k*[Ê—,)ë@Æ|¢,ÔÊÈβŠ$zyº²¸,ÒšŠæ«²,y´mŽ¿,/+ÌBmuèÄêÉÎ6ݲ¡À,YX:³rã*WÌrwÓìkWçÍ×, ER³d2ÙÍV‘<‰Ì…‘Ô[éüՑ謩FVr_Û;G®‘Á»Ð}pÿ@mGÚ³Ôj>‹¿Õ‘ülWèÏRo_ÛÊšÁBm÷ìÏYÛár<€AÂ2“mm§H m&—д–$ýw¿>´m?[Û‰pLdEËL.žö¤* µm´mšjÊÁ’beG»xžŒ¨,yºõ®Lä/)Å^qij£—Læ•8mïMÒ¢oeO»f“è¤Kö®á$j6δۨ9‰NšÖô& ­£Të."§T¬gÕz§X,„¨Õ¦r\mûÕÚ¤Xíè:Ö ¤e-.zÖ^µÈ^V[S¢µm­Y{´Y‰\lŠ’Æ² è×FvÞµ£l^Ûòµ¨ìXù×’¥}íU©×†¤x­a;ض²‚­]KضpewÇ• éä¹T¦@'bÙ*¦–­,É­ú¥š-ñ‡Ùv¶”íh«ÔÚo$¥¢7U8#ýv¨šÜçÚjq°-SYµÍ¶i%èVV¾~¯-j º­•ågù6X¾°]pÔÆtw%P;Üþ•]_¼2·@`yÙ–Ñ[h‹¹]{‹%èÖX®y›Ì ¼ž´Og‰½‚·]œxûÝ€y›Éñsé-òJÞ¶·ã-z«ÞÊ©€;ð¬·@;pßV–ú-~Ûßò·û-xûß ¸n‡9àÖ‚®ÀÏý£a\’y42¸¦œ á&™fº6¸#æ‚û€b¸ì„Ëaj¸n„K¶Á˜3¦ˆ;ؘŠKâæ˜n+yâñ˜U‘)d™Ff‘™ââ˜Àá6éý<* °Éí¸=®ÓäÛk¹¹Ogs&¹@çËäZnNn§ä*mF. ð·±x»¨—¸a¹}+²h2®À€—Ëåfªb.˜»åš¹À˜ëÃy¹¦)×\žÅf°©)vš€¥YššÀ¦‰ºñšŸ¦)gjŠšG[©Él›µ&°©jÒÀ®‰m~š¿æ k ›@œ{è’ɦ´ÙkÒ,´iéNšrеÉç2 °*@дéAPœ§ÂÉê:œDyLP-1.10.4/DyLP/doc/Figures/Makefile.in0000644000175200017520000003406612506276701016120 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2009 Lou Hafer # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Lou Hafer SFU 2009.04.15 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = doc/Figures DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c_add_to_includes.m4 \ $(top_srcdir)/m4/ac_c_get_sunpro_libs.m4 \ $(top_srcdir)/m4/ac_dylp_equiv_for_cpp_bool.m4 \ $(top_srcdir)/m4/ac_dylp_find_fp_funcs.m4 \ $(top_srcdir)/m4/ac_dylp_fix_cppflags.m4 \ $(top_srcdir)/m4/ac_dylp_options.m4 \ $(top_srcdir)/m4/ac_osidylp_options.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/DylpStdLib/config.h \ $(top_builddir)/src/DylpStdLib/config_dylp.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_OSITESTS_FALSE = @COIN_HAS_OSITESTS_FALSE@ COIN_HAS_OSITESTS_TRUE = @COIN_HAS_OSITESTS_TRUE@ COIN_HAS_OSI_FALSE = @COIN_HAS_OSI_FALSE@ COIN_HAS_OSI_TRUE = @COIN_HAS_OSI_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ DYLPLIB_LIBS = @DYLPLIB_LIBS@ DYLPLIB_LIBS_INSTALLED = @DYLPLIB_LIBS_INSTALLED@ DYLPLIB_PCLIBS = @DYLPLIB_PCLIBS@ DYLP_ERRMSGDIR = @DYLP_ERRMSGDIR@ DYLP_SVN_REV = @DYLP_SVN_REV@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIDYLPLIB_CFLAGS = @OSIDYLPLIB_CFLAGS@ OSIDYLPLIB_CFLAGS_INSTALLED = @OSIDYLPLIB_CFLAGS_INSTALLED@ OSIDYLPLIB_DEPENDENCIES = @OSIDYLPLIB_DEPENDENCIES@ OSIDYLPLIB_LIBS = @OSIDYLPLIB_LIBS@ OSIDYLPLIB_LIBS_INSTALLED = @OSIDYLPLIB_LIBS_INSTALLED@ OSIDYLPLIB_PCLIBS = @OSIDYLPLIB_PCLIBS@ OSIDYLPLIB_PCREQUIRES = @OSIDYLPLIB_PCREQUIRES@ OSITESTS_CFLAGS = @OSITESTS_CFLAGS@ OSITESTS_CFLAGS_INSTALLED = @OSITESTS_CFLAGS_INSTALLED@ OSITESTS_DATA = @OSITESTS_DATA@ OSITESTS_DATA_INSTALLED = @OSITESTS_DATA_INSTALLED@ OSITESTS_DEPENDENCIES = @OSITESTS_DEPENDENCIES@ OSITESTS_LIBS = @OSITESTS_LIBS@ OSITESTS_LIBS_INSTALLED = @OSITESTS_LIBS_INSTALLED@ OSI_CFLAGS = @OSI_CFLAGS@ OSI_CFLAGS_INSTALLED = @OSI_CFLAGS_INSTALLED@ OSI_DATA = @OSI_DATA@ OSI_DATA_INSTALLED = @OSI_DATA_INSTALLED@ OSI_DEPENDENCIES = @OSI_DEPENDENCIES@ OSI_LIBS = @OSI_LIBS@ OSI_LIBS_INSTALLED = @OSI_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign # Make sure the source for the figures is distributed. EXTRA_DIST = $(dylpdoc_FIGURES) dylpdoc_FIGURES = conmgmtcalls.drw \ conmgmtcalls.epsu \ dual2flow.drw \ dual2flow.epsu \ dualcalls.drw \ dualcalls.epsu \ dualerrorflow.drw \ dualerrorflow.epsu \ dualpivcalls.drw \ dualpivcalls.epsu \ dylpnormalflow.drw \ dylpnormalflow.epsu \ epsupatch.sed \ factorcalls.drw \ factorcalls.epsu \ primal1flow.drw \ primal1flow.epsu \ primal2flow.drw \ primal2flow.epsu \ primalcalls.drw \ primalcalls.epsu \ primalerrorflow.drw \ primalerrorflow.epsu \ primalpivcalls.drw \ primalpivcalls.epsu \ startupflow.drw \ startupflow.epsu \ varmgmtcalls.drw \ varmgmtcalls.epsu 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Figures/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/Figures/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 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libtool dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: 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-info-am .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-exec install-exec-am \ install-info install-info-am install-man install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-info-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: DyLP-1.10.4/DyLP/doc/Figures/dualerrorflow.drw0000644000175200017520000007145611171477034017463 0ustar coincoinª» €,€ ˆÈ sÇH6eb P%Ì™2SÒè)ƒBFŒ.r°q#‡ )XL3›0y˜¤³ðˆœ7uà´|s!•2xX ‘SgM’P)"¥0\ÀÀƒ…K”(bÀ€‘"d.j°¨‘‹J‘†íúulX? x¼£Æ*O €°†Mš3nÜ)âd¨uïæåq*:aĸ…"%î)T’«¤Ö ¹õ¤k°©v-ÚnɆe·¹}Û¥¸< G®˜dž‹&tëR×n›oÂç¼õŽwï‹èÁWW¢÷í׆I8õ[à[:0CaŒ 3,„ÃKüÅ,Xl¡§Íá¨P™š³È$›Œ²H2í]Å,“í,ä{Μð 7üpÄW̩ϩo(´Ç®C{Éuœœ²Ì¬® 3í2eo3Ιîl:Æ?;ßqë!Z%C«60½tXJ“E+ŒQψõ½þu?aZÿX¬É*³œÅ™±¦l¢¡VÚ¦„-ظ[·‰—œº©\c*ºœÃ7éøÍ]n‚“¼æÕq÷qÃ$÷/JìRá›Ðø˜§1ó±®TéÛŠËL?X¹O~O£ŸŒpµ#üåhÂò‚t¬!)ËHÍB´Ø$³)ÐZWÔÖÛ"¸%pyÉ‚w3—™Ð¥.²é]ñ’½èdB|ÝGO|òS§€A :û¢#  ƒGñ`@þ¢œ -‡)‘hŠg§Ë¨‚v>‚Ì{HëaÓd¿³±-õ#"ÕxuÄ"òÏ0Jd¢×ž8@)PZVl U©Ezk‚_´[˜Ä¸Átu] \ ÇF;¡Pp oäCE9rx`¡ +%°BbNsœ#žç@‡¼Ñ)¯g¨«!ÇnH4éŒzÖã ¼‡;¥ènœ.ó9«!—ÀD&:“áò²¹ÈÕ -z,¸Áú´ƒ¸¬’“è¬.i+ûy’“Wód‰µÄ®9Q€a+à’x¶*©-‹Ì’½H7Yb0ocÜ›š>8ª±p¾¬UžöÔ§Ìͱ˜÷ÃÈ$†4 Q0]”`Ò ›žÁ€œÜ¤˜ CCŠožŠTÝóв–µ*4ø!¬:?LqjºB¨þÚ?†Šò¡`‹¢Ø&ZŲò¢¬Ì(ܺ8· zo<GzÆ n„k,aJñ¤8bJÇDH2ÿ©e¾ðrÁÛÜðŠ÷¹ã‰Žt3¤§RÙÍ}Svד‰>ŸÊ‘¬œs³üL•g—9áuÎx¡K^éZ¾mÞ3‡ ˜fÅiƒ}~¥³58'WàG³uÆpSØLª _ûHÛÆ€w•ªÓP˜I¬F«¿ÒÕB¹À¯A‘€I"ë´ÎÊ@¶µR£l¥à¸f™A½ÍµouÕåàHh¯ªÔ e¸ƒ2‡zXg2²Âu-ôrXN¯׸>”¤¬ªZPMfÕj[¥Útÿ×Ć»SD¥Y½‹V歹‹r/É ÒZ–—%½ëI{y¸÷ެ ó­\3‹Hò5O¿Lh¿BOR¹eîU÷]$v•º ¶n)ÇJ¶²V4[®Ò…_ÉQ·^®æµ%]ÿ†Æõæµ½nTÞ2ꥵã—çðƒrÅ+­bOÛØÔZsµÁm-#¹‰ÏØ^¶z³S™LjûT§æVœ»õo ÀgTyÆùÅs&®ˆüü•ö XE¶¤Ž¥ÆcG7k ôªC|]Sj7•î®’¯äʶu¼+oIÒ*ã¥%ÆS0Ó0L:6r„ $} ÉbüÊÙžû}dÒ+HûVnn¥ówé`ý˜Á£„¨X%Zäí†zm£Þx3Ë'ÓR®RF/•íºKö¶ñ—*43Q/w_Ö"Ø1ÉŒcÀg~øØ“LöŽjigÈÑ~°§« j‹Š:[K6µ†ßúíUO9—&å¥^c8¶ôO93qúWF9JÝõ…Pb£ÉXj>öš‰üõRùº;‡SÏ(˜·Ÿ?kÜì±3ÍÐ\ì4«Z_¿{啵sìðœYÜ ~<¤  {UÝ<žÀMùÏ)‹ÏA#ÝÆïÃ÷€ ªl~3Ûß>ÒtuIÑì|ÂÇ6ÂI½mXvÔÛå éyÍ8nõ¾šÄîÅ|å›k¡ª¸¨Po1 ë t|2:8Àº±‹-i¨í{“ýæê¿¡ ÖN™ŠÖN;FÙ¾Vn¿=Œq÷0«Óqsï5qñ±5­‘ r^:ê.Öf¢ƒ-cãâàŸ÷fürOi¯wRÁÏnèØ¥ áS2)óH>¸9a·;ô÷‡[Mn+Ã:ïg©é¨ñCé‘@-ì®ÑüLÓJµÕ„¬»eo–{sè/—Ù¼AKó§&~´½^?ᩞæ?µŠ7UÈÆuw`_'yap•7dÔ†y—|j·|ÚÖy·jP&wáFw'b‡e¿¤/üÒw-´nöuT‡Æ~…Ç_'âövc‘¶{BÔ{w€À7yÂdd7mfç€h›7Í×dØp"%nXnWvn&_­G~ív‚ûGgýg[€5€“fP3ø{Ò|_Åi ¸ƒvd mÃ|Lvj–jQ6}¤Ç¦Gq÷1kµ–S·6XA5‚!‡sæWr<÷f>‡‚ü2BNy&Æ•N'N3–N÷tO(u‚(… c*a1VHIXÈ{Zh€\ˆi Hy`Xvv|X†?¸Ei¸pp}g„!†„×—e}¥z#XMxîTˆQ¨h!q\ÿU/¨‰ùF€2è‰ Uƒ¡xƒgy 8†Y”dk„«ØmЧjE¨±h}x—eêÁîA‡‹“SfûÑv ¹Èn&(‰¿H{Á(ZüähZ·xT…Œø\‘ÇŒ[#ŠBFŠÆGQÓ¨|gh ‡¦sb®6b‡}o¤}.Å}a@(cö}}ÔŽ%hhð8Y”("ýd\ö¨{ƸuYh`üHƒ]hƒ_:XŠÉ]fø](„kx¢÷pÝxw™e·}w‘wä}9µG'‚†åz½¨ Œ_A_qňcú–Œ+ù‰Îæ’›“Å÷i=ˆŠi…† ùy Ù†£Ww¥—„§7‘qT‘9%Sn@S6U zdið'1 d~ºöwî葱ñ6•Æ%•ÉUŒW¹F´Œ-ÙŒ/™ƒ_yvd¸JF–á¥lˆn¨–pÈ–r¨µh‡«‡‹J9~€7r:‡~'g9\òhYðwˆ2!Œœµ=0g›¡Ehå·fç×fé‡rƒù”±Yˆ³•›¸u[¸)3ý”4˜ˆ¯'x’›…ÙOÿ”œ‰yƒŒY5, ŠÿèŒ (`Y™<@¨Šeù|gÉ™iy„Þø“è_™PHœÕIΉcV©*Ù˜ ö˜á™Ä7p™¤x‚Ú”Ú¢VŠ˜8 £.¨0hUXy£`¦Ã‡ªÑ¨ªj6„j˜¦®¸I«H:¡‰“‰qaF”c–«uú›w ˆyÊ«{êr´Té_€j¢ØÙ_O®œ®I¥æ [|µ‰˜ê4©Ì)•™A¨+j¯³WÞóœ-˜u&¹˜¢Úcˆ¬8(¦Ë:“e:–)¤C¨¦¯Èm šoJ“QzôSr&ûrà—~wf©i¨« œ­é‹Œtùš®ý:"˹g5#©ñ ³vú‡Ê¢Û¨7[t‘äôXü$¢ÐÙ›‡Êšxº«Ek³è¢0`[Kë§'"¾u¡Q+³SK´ígµ³¢^«´‹˜›Äh?›sA›¨õš©÷JˆGk¢i;"û¨’ª·O‰[¶ød.Ó[Âz’@T£Ëæ¥ &ž£“idY“ ‡±9I„ I}vw­m©eo` ï‘z戎üáì(§.˜°G·U‹O9{{Oõ©Ç¨¸¾Gª[©£É bȬ“k¦7­­ÈX­›+¡‹í1ûa`fLwàS¹ ¸¬+¸›º®½¬ K£œØ°ý( ¦š»a(“’û£ëªx¹K­š»–³øKpP$ëakˆaÑ‹©ÓY·")¶å©Áº°[º¸¶û¥ß±Êº»«y夯š±Óš¹o(‹ßøKz2Õ£'y@Gc€e ÷+˜Ó›‚•È;Ø)»(¹½\ê°þXÀϾ‘‹|by™ÛÀèûÀû¾ŸÙ¾*E²,t”²ë‘«»OÒ›¿­»©Ø*)j’ýI»[8ÀK ,¾0̪Õh¾h¼hɦÖj¼¡iPbky` eÐe†º$8°!<ˆ"yt^qØ‹ J¬Ý©ÂÞ+v¬»T|ŠVœž |¾Ò*¼ ŸµŠ­nyqîƦÕÓ}!µ>ê³3ݹnçxNèMÃÎå}þëœþâ©á‘*´.êÚôÖtúÄã•Õ7ÜåžO•MíšÞß{>hÛþæÈîí„ÛtÑ>ãsæžïÓ®îƒÞØð•MA߯Îí¤î_óîöÞßç¾ðéÎï€ìç¡ïÝ>ÖßNïâ®ðùŽîûîðÁž"ï¾èoðà^ï)ÓØ Ïñÿð½ÝÐ>Ù AZ£Û*a ›3cii€é1q×Ó-\ FpGŸôHoLßôNÿôPÏôH?õIõVõJ¯ôEõ\ßôTOõ]ö__õP¿õa/õY¿ôgõc¯öaoöPßökõ{8¯ó<ïó A/åt½õrõoõƒÿô…÷i÷†ŸölÏø‚ïø„ùO_ô‡¿øcÿø—ù™oùY¯øœöˆ¿ùO_÷w¿ó=ÿó|_ÕBÿ÷ î®ïösïô¯î±/ø³ž_ûGûºoø¼õ¹Ïö¿ßûR?üooô¶?ûÄßô¤Ÿó¦¯÷@¯ú~Oô ÖýÖ?hÚ¯ýØýÒýýÝýÛ¿ýãoýáþ5pþAPôåÏýç¯þáÏþï?hìŸþéOÿõ_ôôÿÒ­ÿïïþÉ¿õÿêûsþOüÀxþ` h~xïôí½Ñ÷¾ë£ú)ÖÀþ4 Ä€0rÀóçCàT"PvÀ¨Ÿ@ \%Њ@þGY 6pŽ¿Øã<<ðv¿S |~¨J? Hý ÿë€4 JA8 œ‚Qð:À+ˆûŸüã‚SÐ ª?¸±`ŒVšA*ˆý¶àù+zk ’¿4XÍàÌ{Ipf,Á¡Wô`€Tøƒ~03¬5¡ „€w(Â¥0¢Š#„QJ¨Â!î@„~°èBBH !&¬s•NÂIøa(\„Ÿpf†>¨ ?á)…¥ÆBJh a*서P=WX qÇ(t„³p*ôÂ;(£ŸÞb‚EoÌeÈ —¡3l†Ï06Cf8 ¥a4´†ÕZÃdh ±!6̆ÞÐfCp‹ž8”†ä°¦Ãi¸¯a64‡ãðBÃvÈ ‰!ôK}ÇÆ–0ø¡?Ä- D?HáT8ˆñÄ…û¡Cô‡EÀDĉhâC,z ‘!Ĉ¢Bˆ Ñ>DŠH-â?‰±ºÂŽ˜7"âA‰ËP$BD‰H#¢Iì‡1 ºÄL¨XbKD„9 ÞÄ@i¢=̃PªÂõÏŸÕÃ…ƒ0öBW¸Ý_SOq)JÅSH¡"Sdd°ûeE¯¸-aWÜ„Dð "?¨ç3CY¬„®ð(N@=˜YßT°¾/ÞżÈ÷¢_„z0öEÁø£aŒ‡ÑìED¦·%âÒ+&Â'2½!Ðô(caDŒ˜ñ2^Æ>H;ãaÔŒž13†ÆËÈ›^c„ŒŒ÷õDÉX+£Ÿ14ÊEc¸ú¨ÿº·12…ÝÈ{#Sˆƒ¸7ö“áH‹ãH Žü ®AßÈw#pDŽÁ8JÇãˆã FlŽÌñ9"Çé8¡#—[ŽÌñ:úFí¹£tœø°6îBóÈÛ£{|ìq=ÂÇùHë#q”ö1?êGîˆ÷ã{DJ°.R?¹G ŸO„2A2>Iù¤ô‰ 2B:H Ù ÇÞ”rBjȱÇYb†Ì’.ªG£—Œ@‰<‘&2EžHÉ"UdŠt‘-’EÆHù"cäÖ‹‘3rFÒÈ™#iäŽÜ‘E¯G¶È‰#‰¤‹4’2’FI)$Ud“D‘!2)²¾Ûûš¸’XòJ>ãçô²d–Ü’³/ø/‰%Áäë³zdRK&¿3 üBš4“®M¾É5'£^š$b’JÊI2iõ¢äd}õ¯ìI/iõå ü’Q/PŠÉ;Y(ëß¡,“‰ÒQ¶IF)ßߣT“PÏPÚÉ4)&5%Ô£”PÏO H÷')¡^8•¨òT6JKõ„€«|•®rU–?1™*S¥¬Ü~VVÂÊ[©ý¬^Ñ«•¨’Wš\©+ce¥,VXžÊNY*Ÿ^±4–¡2$Ø=ç‡碔l‚ P:‚A)xÿ´¥4ƒZÐ[ÖÁ.˜-ã¶<ƒão:†E컥¹ü–ä2]ŠËî§Áe¹,Žç’ˆÊé.ñåùû…°_Ç0Ãå»S¢¿yÉ. æ½¼Õï_ÎB9 f,¤˜ýä&LŒ©w ÀÜ—Óo]^¿™/ÙÉ„—aP-žÌq™2¦O,™ÿÒ'ŠLë×.c&K„™.ófªÅš™3;b¾™ÈPxÇ8x »#t$š>Ñh"Çz‰‹¦tškÐiG¨i;dGTšÁi²D¬‰µfGìÑj6ͤy¥eé«–´1d®Å§Çþ†€Û|›n³9Z½¶ 7ߦÜl“t³n» õòfÝä›lS-ê͸Éçæùœ{³pF=¿ 7Åco4œãq6G ©_£å„—3sbÎÍy99§çÔœ ósrÎÐ:·žè §3u’ÎϹ:[çæ4šSuÊÎÖé:k§è샶3wbÎÐI9/ ¿3xÃ`(ƒ'ð<ž 3aJä‰<á`òŒ…Å“y Ïç9 —§ñœž±ÐyBÏúw=‘çðü…ÖSz~Ï쉹§ôžã³zÖ¿ÞIýä+ô…,±9ºÏ^¸2»ßìƒôÓ'ÊÏ™?ufÏ숽Ðj"Äý©?_áË´™ñÓ€²DÇÉç§õ™ç}R¾ÛCAo 4ƒbÐ ªA+¨õ Ô‚rÐÚA1h­ 'ô„ÂÁÊBM(e )”‚’КAchÓy¡4t…’P Cqh e¡6”‡ÒÐÚú^è ¡?t‡‚P ª„@p¢PÔ(¤É'JE¡è‚¬¢UôNFÑ(*÷¶(-zw‹ZѶ'FŸ¨-£]´ŒÞÉ_éE…Àm£gÔ‹¦Q/FÛ(àK{eTÄQ,*÷˜èYÄ…oqîDðFæT܉š°ÆÂüùG£¢!åŠ;±**€@* )!¤¤8À’ºE€‰ ¨&MžÃÐlRËb˜Õ&×ÌàÑ7žRþ¥™£ºšG3•öÆUúÍ`s¤¥Ls ÞÒ§Km©+å¥Õq 2ÐÝHK[©od¢žòé%S§·L›^3ezŠrm2Óf9MYe¦¤¦Î›2=RiM•©65Ïœ~Óh*,å±Ä•Q‰RÉ;¹NÓd;%“ïÔKRI0êNo;µ§õtöÝS}Ê)[>…§ÿTžÔ,O êí£§•Ÿ&Ô×w'‘©£t£Õp(#jD¥¨ûÏèYT‰ŠQßßFu£Y~TnŠ,Ï©öû¨â´›VS‘*Q[êDͨ奆S&j2(œ˜!ZÌQ¨1mªýÄ©ÿó îÔGXShļ©¿°¨BPy1sªPU™@Õ~úÔ† ™hsôŽW:fUä¸UƒcsÔ„Z•9bU±V}ãX5«Ðq˜2…³ÚÙ*ot«»®2°ÊUÉj]E«È‘¦:Õ© Tuê^ýµ§úO©:X±_ý4¬SudÊÌ£JX—jcõ«A•¯V•™X­ßaU¬,‘‰Â€!°Y;«Ûô¬•àÑJZ3©ˆ§5µÂÁZWkkm­©µÊÖÑJ[I+hå¬C ÞVPZK«l­B`µ WÖúZ…+p­½u´îÖÏŠ[;+­­´õ·þÖá:\‹+‰8®§ºÚÖæŠ[¹khÕ®8`bWêJ\É+ À®ˆ'¹?*g€{}¯îUOF½é_á«|…z¯´¾¾×ûúôè«~M\²éùWýJù,Ó°õ•¿:=k_ª4°íõ¿*Xæ'J#à= #ÒhØ Ëa;¬ È 6ÄŠØ›<¬‰Ý°$6ņØ[ôN¬ŠU±'ÖžXcMlœ±#¶ÆzX›cu,‡U±7–ÆúXËcC¬fŠÐ.ÉB•"0˜¬“ lïó*Y%Ûd«¬“²T@•-›dŸì“¥ŸôsÊnY+ke±,W³4àW’Y& f¥,—³^¶ÉšY³ˆfã,“í¤mv¢Ùãbgß§:ý”>ñ*dJJ˜‡e—4Qû¹=íGh/B¯dzD`ÐʃXþ–^ù‹*ŽWFÚò£Þ ”õoÓn?h§ý¸)Ò{SUŠÚ 82­ …¦Ú!¢SH;h­4°¯¸?–hh»¤­mµUò5úD«ú _ã2D¸#$àÉjs@á p³L4é¸Â͈Ζں×Í:°m&}üsâcËY-h'%·2ª([Àl§³EtúIÚRÛÚRm±mdË‘D¸Í`¾-‚,·ãvµrVd»9—adµë}ºÛg[må-—›·Ò-t[|»m?k¿å·ÿ–àÛckA7'»eŠ¿3¼ Mh»p!®´µ·&wßR\n/®`¢V;ÊÜÇõf®ÍžRÜÜ™sw.vì¹¾Q­þÜšës§Ó+ºBèÝÞèG©ÓÅ„VÏJݧKu¥Â.¬º1êbÝ©Ëu±îÕ…ºóuëŠÝ®Kva€˜,»h— ZUÄÃv3iy»\Ž•ÆÝ·Ûvën&½»ˆgîÎ]¸ wñ®ßµ»1êÝ3x¹àý»w·ðFÁ‹xï•â»2@B^h×x¯â¼2 ò^Ì«xw¡æõ»——ñ^‡êQŸeHÝ~Ïò¥ªÔlúþŠ^ê=½'ÕôŽÓú—zIê¬õ¦¥·XÂÞAózaªIå½²wõ2=Ò[þzïûS–E ¢ßò‡|£©ñe¾ÊRùêÞú×|iï³´½Ú¯úæ^](µoñ]¾ÛïWF_ë;}¯²$¾¨üfß Pدû•¾Ü×¶ßùË~¯ú4ô—þÂ_X¹<óoý%¿ºûâ_÷«0ÿ•¿øÿnßÜz€ÿm¿û÷Uöß\˜¨wäŸÌñ@^`ý™}¢w ‘€vÄ ?;0K$Á_Sçšà 1°oÔÀ-˜ÝÕx‚cp ~ÁöÂ"Akù'm£  +!¢à„â¦Á@×`äè‚{# f‹U áL„•0 †Â7¸7‚àBH…Cpž šu)Ê`'ì½bn *naa……°Ãh¸ oÂ(ü…Ûâü¬ÃvïÆ5,†õ0S8šõ“bÒ7›d‡&!Tµp²BE: ‘,!6Äb–‘FR5Ü1š…ÄoVcB­ø ñç™}ÄGóÓO&ÙJñ ˆl•÷zWÎZ`@+~ŪçÊâ~[h@-¾Å4`È]Ì‹#¯Î¼N׺"Èal"Lèä·ÈØð[ŽÀŒõÉ 0Ŧ¸ñâÙP¸Š]±5†Å¤sËb\Œ‹{q/n¼Š¸' ãbLŒOg2NÆÍ¸kÖc\…D”ˆjÇí8tòÐÐ yèéÜ…ðø»ãx,:çñäżö˜ïc¥ ²EÇ/”ëÝ€ü9 ²>ÎǰÓsúãÁ m()˜Ó1aNÇ`˜‘gáFæ¤ZV:jdéÈ‘E²G&ÉY:öÁ“lK²qÉ-9%¿äY6û‰K.Ž0¹8ÒÔî‰9e€ðÉ@ÙСL”‡rPÊC9) e®À”cOf¶N¹)ŸO³kôŽòO.ÊXÙ*ûd¥œ”›²TæÉ^Ù)Oå«|”·W&ÊZ+wå¨,–Á2[æ c9-Ÿå4[•ÉòUžËa.»å°ÌDgÀqyǵÅ/ûeþU[”±2~²QW0S6Êö—1Qm±ÉØÊZ=Á ˜}1e&Ì>#æùª˜sc^ÌÙ0Kæ¨w™si®-[O3WÙÄü_Ïã=«çõ\ž ,{>Ï8ñÈçÌ«3¯}N<ƒt>Ïgਟ3/UìÏ"·>÷çü|Ÿí3.Й4’hë¨s4±s‰º–bA 7ñ‚^ŽZ%Bh} õs\$ΤêÍåù9JtP½Å÷D«èÏA¢Wô‰®¨.šEgÔý¢i/nÑ&E£Þmsô‰À5ÀGËè(¤a´ÆÑ+Úùòh"£´‹F¿ë×ÿ.ÏXþ(°®ÒT:ü:`+=¥q ο]zR_+ ¤`•~ÀaÚûi)=£³4÷CÓ0‚‚è +"Õ¦™6nÚþåi!¨¦àø+Ó{úNÃ?/í§ÅtÔzšPciE§õ ¦—å³P÷éEm¨Ëß‘} SPM- 9u>…k¸ÐDœ@Iõ¨…QØSwjS©Yõ¦vÕ«:®á({ªifÓÒÂ"Å<«ý0ütŸÀZâáÅz†wc°>Öl˜ #k÷)t—5°–Âκ ka$­¥u5Z‹êjý©a5°žÕÛš[Ójq=±·ÖÖªºZgYrݪQõ­ÎÕ;8mÍ<;gw'[¤×y6æ¾ÂiL¯Ÿ"¾Æ²úú_ókFè¯ë5˜ Ø{_?X¦—°v:Ó»zT*€öÑm)v P`ìSO èØÑM(£V‘íF'Ó3ÙcA¦l¤—ygÀOˆE`ËÆlh×mgͦʉcçìT[|ÇÇön´}mR‰¶.fz‰i×—£˜vÈÍ¿j[l‹½±5vÆþ•d JhçF¹¶@Ù(c#=±ý²]vËžÙ¹yËÞ웽³wvŒêÙo;ôÁ }^dFzÝoûä~»·Ó^Ú¯ñi·bÁ Ô©?9Ü‘Î;"nÄ­û­P~Æ»exÇȹ·6Žt˜ûpÓÕò˜¹1wãÆ¹-#tCîÉ-ºC·å¶ÜûpáÅí¹O7è¦Ü’:ÂîgìºûmêNÜБuûŒX»K÷è–ݾ{(n?ŠfÑu-ܳêúOÙ^]ªC!ò6Þp±xëZÍŸ·³vÄS6ZlÜa½—u(ÅÕg3D×é y!7dÒƒÌè›Þ¨ïô;׷ûNßrï~¶>óôÚ·ý~ßø»}ÇoÉø*dÖ»ß<ãïýí!é·h±<€+p¢=öúrcþ˸9‚Ÿãì,8e–àœß"_ÊL™Ss—àÈׂCð NÂ%¢²äà#\‚{ðsÂQ¸_þà|ƒ‹p®Âpwá%¼„#ßlÍ—Ÿçzòû‡ ñ¨w sî_~E|í‰É#>ú 6–Ø]Ô¥¶T"0&«8/Š‹1ŠoT*ÎÅ«8—{®WŠ»Ñ.Þű8Ú{(•Œ{ñšèJ£V|E™Æãøg㨋q;^Å%?ãY¯Ž«q,Îg_ê £Ê’Jò)šÈì"'“ÈW‘?KD,%y±D¨^2’ß¾GžÉ¹!ŸäýT“òbIÉk%Ì~M/‰¨âöZñ{z«5•³F_èöÀ›Ë>àÈïºÞò$ž„À p£Vò´~J*ΰY#¤z”ÑT6½5ìôc3z1‰—F¨×Ÿ^Ìæ·ÂV²N³7j­Óc·Öï1n?¤'Y-+æDŠöå:qy]9Qy3ÍNo•«lÓˆ oy*·ç“q*<=Z¾`³Ö-7{º|Ájl`Îôzù/ï’ÂüéaÊ.i'‘94_ækÓ™›Æ‡®Ì+º5Gæ°ïšÃrë·M‘_7߀ßüú‰ót^±ßÒCç¸VƒïQJ§¯%ó&çʶâƒ8pA$ç”°ÄmÖ€ߦ‚_Öäœ) GܱÊéò;æÂ„7²Åì܈º- j\Îw@BªFr@?)êΪ³Ò¬nx£zUê^ª‹¨ªµzX¿êQªKõ¯Îåš:âÑêJý!,V:Ô7k$„¡¯ñ÷ôÕju{¢N×Å­VeK©PÓá§Lïˆ0½pç •_®˜;Åa($ÀîÊ`$‚²[ö¤àOÒÝd¯ì—f\5‘ Ù/;¢r¤´'áÙK;Ѝ†-µ[v°íúˆl . Ü͵ÏnÙׇuÊì }}À7ÔÎÛ+‚ H<Žâ¶ÏàOþLq_îȰAøõ†à$I  ¿0›vKdà ¼´fÊenbaÖ‰„ïÞÉ;@(@d"ÐÝ!{ÿsÀ „8ðJF|Ÿïõ]$ð„ æÀñÝ <ÅF'ÂKt‰d$ø! ü#«K_ ÁSÛQÅ M3æ€ÁDa *\àTBtdü÷¯D(SZ!óFL™3\ÀQ£"”(A% 6et€xA§ œ0bä 1Œ4dƼ±©²Ä9eÂÐy#Gf’9l¸!CDN˜; Ì0ÁæM¢G“ÒIóÆ ¥1A‘“D:g@è”[CG:fŒ”F¢Pœ)3GfŒ¢B¼NMãæLb<2mÄ{£ˆ1f€¸!cFQ"oÆÔiSÆ 'eÊQ-…°W9cËDvjŠÏ¡G—¦3¥8lÒ°v]¶l´é”&s{e‘©C†’6=GÁœ0vÊÌ$óeŽ/Õ€(ƒg «Í(PPgN9dÒŒ¡3óiÔ©U¯‘O_ïÈøó¡çÁpÔAÇz/ˆ‘^{ˆÁè•aFNX¡z/!yæaè … ¼`„š1¡V¦‰˜^‰M ¸Ga¬aaYt¸Hâ R<¡oЖŽN1„sŒLD–8…ŒîÑÁb޾øÂG YgX•G“/P!„tXåTCV¹£p@Ȇxl`%Çb€É¦w¸ 'VQvÆ—jr8„¢É‘ÝR`ŽÁ¡]¹‡Rh€©â‡o¨È`ž¡%—^f*„]¶R™ÎêuÙ¹èÁ¹±åªª±i«e¨ñcªæ¹G”´Þ‘Zb¶ñÆ¡° û‚ºzÇ£À‚é¾€I‚ùér‹¬¶«ÊA+¢ÊÎ)Ʀæ Õ•`šº+oÜÑ.›’ÆÁŽÈámîqíHÝûj»îŠ”ipÜj‚oÀmíÒd™oØØäJ*¥œn€0u˜Á¡%A„‡3ȰaÑe°1‚ïeLÇÆÏT%BFHQD „ôŸ…,—`3ξóÌpÔÜF%’Ç4Ò·…Ï@ MôH#qôÐ €ÝņU_ Gž$Oar+·¬ñ{» 3 øJ°i ´ývÜJCË´Ý1ƒ€FiœÆ‚/XýEž’¯ ‚Ø^£—†„/M7Sçý+}^ùy˜“çÊ}óç¡/Þøã%¢ZFÖ +ÅÖµV.îYïŽö ЯûËh•€’t˜‚¹Éq0 3Fß{@Ê‘S:$´hˆ!Æx”èÆÕ/Œ=SÒ·lôÓ§Oß`ô½¸>|üX†n˜ÿnòƒ@†Râ#WÞ •!ÜCÂ6¹È¥<Ÿü0˜€4˜ái ÔÜÌæÉ@†ÓrVŸ*c­ b”v¶ƒÚ¢W¾â D0OyΓ ùyɸŒåàf3:@î±rÅçF±¢Ù^õ·›é&m?Òq°hìyæYœéÕµÚÕçdûÉÓó^ö¾BJÔ”R]~PfEevËT>.Õ• *Þ@ÕÁª=YÁ.AÐ˾@©lÉhÞ‡”ç)‚š;ª ¼.¦n ÖelfkF5~õ¬Æ„±2-ZÌÇõ¶Uí®6¿ëÝŽŽœ«3/IÍ)X”¶w|§Ù@À^éíæ½8žïNÿzYé¦ÀzÄ0AûëAuGПC¡éÎ…u€¾Ã]”¨ø=ŽZûlW@ÐŵeBeƒp|ù4¼™W;OÍЕ­·-&íóµ=9ÍqŽÐ ÖÞ¡/ʆ?£'ÐŽÎJ¡%=\J/úÒô¦Ûi“²áZ“Aµ®Ëâ§J+²=m¥-èg&€˜Žµ÷9 Íб’$¹uñ”âØöî0’+~è­+‡Kµ‡1vXöÕpW9 E1¨ ¶RÔ HR–¯Õ(ÞžN»b ieÜ¥á>'9´ç<•òÇfƘW6ñÖkí¶´nŽY l¨ƒvÂ:“P•FÆHëEÍ€¶¼Az–ŒÙ¤³ÕœÕÂb ò™ŸY ÑafGk¥Ìàq›“á¼ã^`éd~Ú¤ÏÄž¯…jñRHeA¦øÎÀ;i˜³|æ¶ Gq.N[Ü»=wf2nÙ<O£¯Ì§BòÙ£Ÿ…Þ‚¼7nN}5=Ý(4‡:ˆ!CGƒé# ÄU·^yÇ]2³¹\èã-f 8X­‘—ß"ûûd ÐXeˆ"ˆÞò*èˆw„‡â”h‰yãv04.oP‰Ž8xè*q‘‰®²•¨(oà(h‡ä§!öÑvbDô@ôqaï¡3u‡±ˆ±?Œ»x%"|B±ÝA#—ò›D Vҥьe0Ј7×ÅŒcG`sÐÒ˜?ÂæSwP`«1_Ðv_àa@Q¸\Ãã,_0%ñ8Úá†V"÷B`ú(¤¡\Îó™8RŽ±©"S1%÷¨Žé¹›G#x!q›÷" ‘tÀôq]þh@F`2ÏÃ3YT@Ó!ç3vCö@ E+é0 yWB^âX óBÎb‘¾¶GAÔ\(–“yE‰#zôkI© K‰xã‡AY4Aø¥VYPç¶$¦ô” c"8âüø’ë8gÙ\ €ÚèŽðH„ÑM]qo™å–á—S!‘sÙ“§2!Å”bé>ÏÑŒCöYGéDB•¤_bÑ–êh’|‰–™šh‘™µ–XàèŒã–()HV‚‹Ë¡_ aú´ €# 1a€9К¯)¾õaÐçš°iº™žá›20IÁI¶ ›Üœ‡á›z!›9 É9“¡›|ñΩ2º‰Øùš3 Ö 60¹9›ãéœÀ9›70Æ9›80˹›Ý‰›#œãy6£‰ÊAuÜ1B2%´N Z3,LÑ?ÏÉr«§ ™aœEð¡H¡3#:ËY'Ê3™A¡IУR:¤õI ¤ FJõ™J¢#JÕ™Q*¡4 N£2Ú[àùVª¦¹ù\J¤^ª¦ÀùcʤjjœO¦½µœOà¦RJ:J$ýÓ[YZs5PŸUp§E*¡˜1UЧ"Š©ÚY‚Zà™œ:¢5›Z°¨e©é©5О–š§’Ÿ¥Š©*V¢’š¥%DRúI²i¨¿Z š/jÚ¦ñ«àÙT­¢Œ1`¹Ép«7«:­À™¥ñ«Æ iõ«ËéóAÉJ¡o464­Yu$!Ú0!¡7PŸî ¯dp0a 7PgP,x;A²¯ýÊ'°2CR—b! žKS:#¯lá8[­i@¯ÀIhôjœÀÑmÀíA¯Ë¹÷B:þJ¡örƒ1nþš¥+Û²ùjJ1à35l1v̺1ª!¡8Ptp­èïA.‹Úù(Vá'ã³àIM Û¯8›÷ª{l ‘> œU«§µ5kœ];³K;5»œÛ°ÆBJë³3Tè§5›¥8k íÑvÊ›ŠWv8k´y[î**æÊ¦—·Ú™My ±¹*¥;!›¢á£:œ±º¡:aœÂªËI#cÀ¨yK¡íVº:ZÛ$«·³Ú ¢~ÊÕY„A´9;n|¡,Êài£,˜£|‘›°ë®%´1© œhPQB£ ’ºÆÉ‹°;T|±œªÚ?|ñ¶šw²©›¥c »8: 1PŸByP¶ "¼5I¹yƒ7^Tö =Í1}–þH"?½Òg9(ðéÜ\ÖóÐUÔjY“¡- •xÃÔ¦áÔKÎÌQ}ÒS1Î1Èh`Êx‚ر¾.€3@6`- }þçî1¬#1è7.à[’w&Qá£iFlGwé1{Ž;—Žl ÃR“¡D—q®uñ$”çÃ_2P.Šæœ"Ñ´^6 Å5UATCapv2àç³.´^åH—àê¡-€¨“4‚8s03(ãÊ-À³C0À}¡íé<Öqì`6Áž‚ €çFâ´$é\Én>Äì àÄíÒ¾Ôní›í´Îí ¨áZªûïänîI¡35´îÖ±éĶf”3 Oîm÷µ¡ÎIÏY¯g#©^¾¬î[½¦™&ë´^ëÞuë‰~X»Žå¿n4#ñåľcÿìNúî “dôÎ`ö.Õ~íú¾í}ÑíþîD¯º­›ƒ Ÿìr ïòþìÈQï÷îóÚþóBÿí_ôC' Pî|Žs°ôµï*ˆ€^W9?í<ïóóVßïX/îYoô\_î\€D \ o;Ü&/Ó–šžœnlpäécñ‡5Õ¤nwáZ_ÌsË­ò°.³^ò¶> ¸®èw´ò½ïÀ®º0Ïì2oìëQÕ¯ú8õ:?õù^õüîíÿ~ûã~÷(À­cï1 oø ßm»Cø3`‡N5žä7ðç’Dè)à à¤.0ZÆ´ÉM¦¤(q~XF@ø4ðø—aÈOêžä[6 Œ0àC¦¤ç(ZAâî¯ËBÀâK:*<ñÀ/ñˆ/ø×¢•Œ/êÏ)Ô€É×ñ,È{u#o󙼃ò–ècv%‚啾—7ìP_nS}ÈÎ|Ù¼f7ï`Ûs=oöí» '÷p_ÝÛzg§Ü¥;6°ôœTüDOoíí<èö°í#¶Oë<ØõP€Î° ^êïEÃxøœ¡bu¶¿Þ" )ßd”‰™¯&.@¼‘ èØ‰²ÐôU@ H€ÝP¼yE±6žÆ€È—¢süŠ*ŽEEvçg£ƒBŽîP9¢Æ¸ç5âs,wa1^Ç!H‡_Çà ¥.3€?ªñ¯êàdÈ 4àÑa?°üâ¢\øs"RfA»x!£\’DºH™"×_Œ„‘Æ6ˆîâË+~ï€ÀM2ƒcTsPM«"ü‹#¡6¿ #KÕ…5 L’Ì™#¼‘‡E¦AÉíŸID†(y¨Äðˆ%Ody,€¥ðÎÄXÇ 1ã7̉¯3òÄY8AcP¼\¤ARD­ø Uãd=ÐYÅàÇÿÎäaL“ý¯2F9ò#£dôxèÑ2ªÂ·5#Ô“ñ‘šCúH"2 È#Š¥1AVÄÛ¨s£ƒ(z¸ŠE™%wl†‰QñGQ‡!ãš’|Öð<ÊÉôX'9%¢Ã“›QzÆ>™úB#²Së0?&ÇUY(›ã«D”ån®…½2 £“´Š¼p?"Eé*…áF4ˆq[Î@+“aI4„//6IB7$‹$–D’¢j·,IIÕ$'Ó$„„OYeÈïg%ç cÔ’t¡Kú¹ç $h™„#¡Æy+õŸwÔ•žPÌÇøI.¥̆Äò2ËϧA%9üŒÍ2(R§h™*år$—sïZCð¡Q “Nï@†KÉa¦¹|>P•ˆE<Ð.+äv\†Ý1WR¼5)ê䥤z“1qXjJ›È蠟|&sYŽJ?Y©ûÁ-3+¾L®3ÍåÀ3†ÍòQ1ã±Yš’2<öJ¹ 0`°Ä”RsŠÌ›x,¯¦èëŒ|rk¦Ìú8Q¥ › ’lþLXéó¡T܇ß2lÚÆj٠ͦîK— 18fÀlWo^Ú“œâ’UJ™y.¡£Þã{~/mƵIøææ¬*˜r-~ÈSU#IdH˜T¤…_ÖκXA¤¤ëܘïÑuÒÎï÷%&Ž„˜òoGšIC8#‰dÁ¤w¡HV‘€/YdØ’i°ÏùË·"{gÀ|Œõ*H²:?ˆ=YÝãb˜í/LæÈˆ©< #ÒÄ•o3%ÆÍ¦ >-åÝü˜•QonJ¾I2ó¤² œ?‘k–ʪ†0 çΤ–±rêÀ³©ŽŠ¦vd›ïÓb*Mù¹Ã#ð¬Yös K95×#+ì›îñoîIù(8/ ³´,ópNÎZ.¨î[7“*ÒÆiI(YhÙt¡1BŽEÕY•!vt›‰nVP^9#a °Ô x“ƒêOªÉ­f…'“YšP•©å­¡ý±…fÄ£W®ð!·|œMïæÍPU‰E}&AÄ–±W©K†8µ:'DT{F1tRN-ª^Güˆ©³:üPÖÙ"3$Ò‚²NvRGGTJª>‘§Ää‘oP“nBŒ9)§\ÑÈ ãžÂaº?‹)U§±0Š–PÕ5`<ÕÐTtZKËia¨>µ¤0PgúSXÚ*ëénÔ}Õ–šE‘z1…è®ä$r`BÍ ZN5ß9ý ý3YÆT­ÙNij}|-TQZ’Q¢::yj”c‘»Øïª@g©AÌ{Ã… 2àZßꌭ絯RЧZ[©Q†\¯î5S.QÚa*༯õ„ÚÔãJC),=ª=U@ÆP·úJ%k‚ý¯HUhJÈ×úaoi`=‘‰ðHÕÁ‰Gä”r-R ŠAIQ ß‘¥FIv½2Ù'X<Óçô¨í“bÊIu"©„òWÔÓM¦YšU³v‹ÊÈ ²îgQY€Ù1¨Ñx\uï2º€-©¦ßÂ$ƒÆ³£ZÒºX~(T½kÚ½±@».D·ËG¥­…¹¸i覬égrK!‘¤ äOòΣ[gÉìËͳ¥°·P>x¾h®Ã“ÝÖŠÙ#«íòlòó¹ZRå¦(>ˆrsïÌåžU¶åŽG½El]®ï¤`ÒæÆÞ‰9uѤˆ·‰–.€¿”±u£&º¯,v݆ÝP9vè-Ô auÂ>ÞÕ +‰ÀpE`ÀâÆ»Y o45¼¼–#¢€ Áaƃô` v‚ØC§tm©ã ÜäW '$éîvK¤m!ògi£% ŸÞ’TÃÿjÏÉÀú\eж¯w}^RÙû]§‰M„Lù?èœ$‰l’nì{9:Ú4g£­,1²D¦`òYn¿Ê˜dŒ¬U°_ä•´”\—Ã'±e„ܤ–í9­„‘‘ÀR×YyY7ólÝ<ͬ×ÏUáEÌ>¥®7– —%CU-[¦²×EÇ6yËÔ®š_ÅÓÅÌj9)Dó‹~õa*~Ìâ·0¯eæš÷N—FVW-PõFØÏy”¥³rî&y ¬ü‹Mo©\ö«%õБã˜Üu;褭É™ÂØ¿ÜêWŽÎ’,ÃJµŠo´‡O%@µsvçül˜*À%¨× *úL|•”#sQÙºc‘À#t f¹tÓ2„ÜCÇõ`†º7×6 ßRç™S”£{~¨yLöáÖ‚ËD³TÍ®nšÙÌàè¼e®Y ØéÖ\ƒ íyž»tYä:ßìžõn:¾ÊÃ9"ÿI³K‘C2žÎ¯í&hR»W/AÖ͵µ5érìjÏñ{ÞËÇ4¸vbM› Ï.a~Òß™ãvãöð6Ï ákÏX¶d›‹¸Ì0aܬÐ0¤vjP Ãa¼†ØP¶ÇÂp¿¸¡O›†Þð‚C ÔÇœ)¹îðÂÃ>ÉÁ   4  ÂÀݨƒ ìAp£$S À¨}à܃Ð^u&³€Wýþ@®VÞàTk0†õÖ  0è ¼ƒ[`ª•µ@ëP”€? Öàüpð­uµµ>T@[Gë7p  µÀµ”ë`­€7ú@Wƒ€ Z(×à\ë|]0×w€\“ê|@¬€ _€ þû0ì@ó Zl‰½ö(¾@ˆ~`à €r ¾µÉ6|À ȃm >ˆÖ |ë 0ÙÀì€0´Á?Èô€aì7ð~À;!„l0‚A=¨ˆ@j €J DÀ(Ú líúÁˆÚ­Zœ?ð®öÂ^Ö ‚¡  øÙÑZ0` Ã6(@¬ÁA;0%,ðÚÁ·~ `ë  Â`Ø øƒj`ÈÜ p²ÀÑ Àôƒw 80@Óݺ€©V àìîlí¬'6  ´ºð­ 0(Þ>yGkSò€ÝM¸·òÖÕ¬Ú íÔ À@¹æç»°êë ®w7øÖ@x³ê0«€Á^ß~ûìý«½à@kðö÷Ï®Þøà€ °­Ww®.|u îf 0Ë6ݹÚg‹lp°Á `ÙùîйÀ¾†Ý(Üg¯ðέ^¸ÃD \>Ãu5(ÜàøƒUЬW7ÃŽÖû€XmˆÍ²€ÃßAÜüƒl`øÀI|äîͲÀК¼pá-±@ßÎ@ewñ¼M¬óõµÞ€ ‰ëê,^PÎfÙ´l£í¬ñ÷r¼œqs°´ñ¸Ö¤@ü½ºyçF‰;Zïî @Üw´ðÀ‘·êHξU€2€û;‰ €žÍä8 øÖày{{€B¹|ðSn€Açžãĺx€oÀ>øýÆÝ ;<ðÁ9±ž¾ 0nÉÛw0G( ˜gñ?ð¾9`æå s€ Š9àö฻\ƒ€`A(·”kÌ?@/?ç]|_§n9®Îø-/;fç`À$¹ßü–€æ=€ðç cÞ¼· €’<†tð²›5 `Ùùœ}?ïÔ-ÑË5È×à|ƒ€xÛvÝ`wstƒpÒa7H÷þ@À–ÆàÁ|ð°À Hç{@€“Æ€ä:½e/ðˆ­ç9Kãz|äôÆIõ=ã=¢î>®ºë¾ÝZ]|sõ{Þ¼ÀóëÀ¤+ër=90øài½©‚Î]®Õ÷%ëlk§.8(æåšyßõþ×k¹(·é°WqFžÔ[õÖâû¸‡=&(×BÛ ðÞØÁy¶†Ö`x‚ƒ‚(×Ý ÐïêÝÙ™9h| «<€ÚË5@Çâ ܵëk³î·Mzë¾è°l®=¼9€o÷Û³üƒ ñS}Ü€pGî°õæþÜ;øÇœ~m@ªz€™p ÞÔáÁÇî,Ý{ü€SpÖ À/˜$®»nªŽÚ[wc7­;XlÀ>¸Øëdç÷VM¶5(~§›ê BH<€œ\`t€˜ܵËñ¶¾¬ÀðÍ»» ­€pV ooï°;géßz€bÀã[õ/8Ç@4ùðÞ<ðÜÿà wbÄûvÝÅ „PæÁó@z€6ÿæ¼/0Àìƒc`±ó<©–ØÇ{Åþ£ßHo™ x2ØÖ< ¤n‰ &}³ž(`[»€Ko´Ý8ᬚÒKRP€¦wéËšp €$þ@@JÇÖ”¾ ƒmv}^Ï× hãðJ ÀÖî}àŒtJÈ{€ä½U{°¬×¨`À¼U  A?P@z#€i¿¬íÁ7Ø  ¼ƒ€Æó€>÷ÜëñÔî¬7û®ÞÄZ¢/p ±1àžÙ,[}ŸÀ 6ÇÖd`ü¦žïåú‡›ào@ >jø@|]ýÄé» °ø¿á³ööçî²@€|†?ð~æ&Ø/¼ô°òñ}Ëù/«ëüe}ñE~êð{üûžó>îúC?ä}_Ë%¶çùJŸà€³ÎôYû÷î>Ÿé‹öKðh¾\¿úD¿£»î X€?À€ýOáï:*Ž`ôkðØ6Þl¿êO}Ô¸À¨½Y·ý°÷[6àÖæa¹³|±O¬ÿWü6_ìäø8/ÜåúZ7üÀíº›u€ã³|íGkå-Æýhì0à|Ò¿¯ÍÁ=hì@õ“þ“ŸÒÇ»êoÖ  °wìáÍ7EwÝÔÀJâzøá¼ßc뮫Aâ^ô”¾omÀ Ãdñ°6#Hâà䃪AÏnÖ€PP ¼ÀðÆYüT@À?¸’O@J¼øÀpÖÁÄZpl†ø÷\ù@<ð à¸øöÁAYµ'¾ÑsÜê—Àn€ê7âwß:ÌÁB±V¾1š£—ºýk~›@Á†ûåuÁÛ>ð ho@?à `mÎHÇÀ€qœ®öÜ>ÀîæÄ}U0¼=ª. ½I\ÇæI\਱äÆ|ÕÀ/ ½=ê€?ÀBcߨ»U?À*àŸ\G³åjÀ€Äf”k Àù À¬š`æj`«Æœo€è‚¹Àª-Ô[ê–«Á‡`"úm KǪA‘ ±Æªa~ «6°j¾[^Ǫ•jž`((¾e‚«æ½m• ` ¦‚ßÛ#(¹‘‚)\®ÆÀ‚à›,È ¶‚¹"hàÔ[J— ²j<€#ø .o©š.à©Ú,¸ &ƒ¬ À wÈ[€ü~’[:@¬‰þÀlÖ P8êÀ·XƒÀàôÛ ä†¬ÍjÌ ¬yÝÏFã]ò?Jnòàw @ÊÛ(‡”|[>¸ \ìÀ¬FAÞ'àl£°¬õ€2à 0„®›° |þ? ±)¡õ÷`ïçºÇ=0Àì@@èºe¯€+À³ZJ7üák*!pøÿ@;ülÛ(€aÇvTûP¹5„€ àF!ìÆ&nÈO\¿À6Њ„ °¬¹ƒ1áðl.kÀ,rÄ!ñ£ ˆc(pÄ5ý ˆ@Þ(É!~ÑZÿ¶4©šп%3@ªÆ¿5y-€Yr À7`4ˆñâ°â\›ÍÐ)†ÆÜäw à@ÿfÖ]Œç\â¥t¬Z3GB"mÁà†°ÑšÉö‡7˜l¹¡ÊèCž‹¶[ Ù² ‘(s(þ‹,Äæˆs1¡i¸ÂIl|x葤‚‡Ø¡ÉvȑڡÏЇ&›Q·½adlgä9Ǫ­‹•Ýí3¢oý"±¶ºs¤üfà1!&‡G(܈¸Gšjê¡gX¤ˆôAH(œŒ¸À-’ç\ø#>’Œd´Ö$’|„ Ü)oZÖX.îjcŸ>ði£°ˆr[)07òˆËî7)~çÀßÈJŠŽD Pì‰ËZ¤XN†‡#ç‡ôŽÑ=ÈŒjNâЦòƒM]å­ „¡ò¶1BWR¨:²Ži#9x;æŽi#õ†<Îx£?@­-‰?¹Â=Ù€@ÉÒÍjÿ@`P&ÿd°Pú“ÂÜðPÞ“ýä=yJ‚Рȸ½‘Ò[ʈQ·8ãG醔Ó[F)¾m”&e?ùF¦j¨^pÇR®”"eëf¸‰”Ñ  \qod?è!J8å&¹¬)•€ÐSø@?Ød‰C%PW:kÖ`´6¬=•ë$пK™8þs:ÐVæƒêÀ*@W²tù >p 8–%ÀR–Ú0X§âð½†6ŸBP½e+ÇÒ!r—±fZXãÈèZ®–¦%æÆÁÀ§ <{ËšBðÄa[àº)À Àl‰ÈakÑZnyò±–À80—‰\G €®fZNpÜ@°h—´%@ýœj¹\²t1@o9ÁMp쀨^R—@ÇÆ¼—±eÀÆÅ²@-ÖVÁß Ì Ñ¸€/"#½´°qãZ"…" ¾uU"p$n…i\˜ú%U``&‚IÛìÔ^WPe‡@m%?`±ùùZ‹ùbÊq€Œ ¤&œ‰c¦m:f ×c†?&9¬ ÊÚöæbáÀ‘¹cE¦;g±…öÀ?Þ%k ã‘ eJ™,[“ieF™á] e>™\&?qܘ‰e:d&=`±)l€Á6ða™7%ÈøH™àÀ›Þí‹Û›šITâoÀ1P±ˆi¦Å†ÞÕߟ šDå÷0Zlp[ž)h*šf>pÄýzf—øý™g¥A@i>š—¦Å&Lš•&¤i±Ù &§Äý™ûÀ¤Y±­n›Û-÷¹iš¤n«[ëöº@¬ù¼ín|@ï¦jþÎ[ñ&¼Io À¯lntøÀ¤—ÒoÁ¦öƽn­ õG¾µlà@ü–¾­oäÛûfmªvئs‡¿éoç\ÿö¿k\S×Ê…›gG&p \wÎ=p>›×ÁÕw\ßM~ÜÇ„pÜß\Þöì›î­un€ 7±œ€ÁÞ5‘ÿÀr§pœ§Ó—VlËÝÉ·¯Qœ §Å q.wOÜÆÉp:œgÄù­}q gÅyª•œË‡ÀQœX\¨«•œÀ·vÈ©–€‹üªá! qÖœm™sJ™ƒ8Èe€ù@Äù°±t»ÛÐ ™\ $6'×t™Ÿd—tbk´œð¼9€€€øx¸ÜÖ.k_§ÎvöcçófÌ™câU)v’o§”Ù¾esGÜÜévjvg3‡@êe§ÝY³wy'ÛIwŽx—ÙÇùm…gÛ©«!žlç)sʇ@ãyx&~‘g€÷Ï•küž¦Ip¦n"æ)ejž ç)±ýŸ' zq™gRÇÚ•kÞ!®™z6z‰_Ò™Ê1Ýé™z®žÛ?0õ=u¿žç)eînîšM'vþžÄZO§{Ÿ'`ÔŸgé Ÿ §»¦ÇAŸ¤šÂ·|¦njã²ÑaŸb]ËæÕÉšL§“8ÖseÝY·Ò¹njÝyDv®£\G×vááéu.ßöÆvçÀþYvna÷Ø-p4£ÅÖZlÿçbwÉ5v¤b½2îŸ(€k7Þ}pêšþi€îŸñ@¹¶Ú­Ÿž@€B ¨m'äåv™Ûj±ÝèoçË© hs‚€Šß_¸ZþõYÝ€còyƒæ ¶[uçÙ šÖjÇÀ¡à0ÞíuæÝi„â t¦jÂx~‡ÈA¡¶'á]rö‚w…"¡÷ç„Çô^´¦fÚn^OÇá±tg¨îæ$æGfúµ£ü¨6JVvúè9Ž¡¹¦Å6 $}ï(ΗtÁCj:¤RfNwõmkYß÷ Tl¥ÚGª¤ÜF*e)Ô·Ý ~…_õ&’þÀ€Ý‡÷¤z_=W½ý)0pU~y_WÏùž.fËçÌ%~ i£÷fú¤$ä—†o2ÛPêËqs ©Ör~IiOú}¤,3ÚI¥~›ê7úYlóVú°e€ '%šƒó@:"q¬èêÇ•š¥*]Xº•6œê9v¶¥iéX Ä¥çYŠÅÕ¥'^:—¢¥»¨]ê—ê¥né ˜ Ÿ„)+j˜ö¥ˆ)]J‹.¦ÎšrwdZšG&Ë™FxÀd ­U¦¸æXŠ™j¦¨Å–Ä]¦’)§ydަžiišh†¦"#i𸦧igj±€[_xdê{`æ6&t‚`^—I:w‘ k·§Š $X ~””àqj Np¤àrÚª5§  ìÖœž‚Ò©rJª‚Ê)v: f§¸ rª Æ‚¢àwZ Š‚ ÿæ ƒ¼à:  rʃ¬2( âÊ[ÅF86ƒõéù( ‚ùé7ö)äf ¨h!Ô(hækª^˜ø1œø‚ªŸ:… ª 93þ™Ü¡ZÙ8J¨ #…Jî† ê„ºfn¨*Qé¡^l ª*¢f¨ªJ˜tލܡð³­¨(êÅ­½¨ÿÀ÷gz¡"!ŒÚÆYl^¨‚ª£7*ˆú£©*jÚ²©jBꆩ<ªG¸)©ڤƃ°¦Å¥"© *®ùg^©Sj’ºj6¢ûçN¨j©¾'˜j±‘yá“ú¥> g*Ò¨¦–©l*€¦æu›*§F†`äé¼h@ü=éY·ä©–èºH´‹€ªï)¨ª¡j&ªÈç úÔª?[€|ê¢:©t!€’Y®-wÂ\¦ª$nªþ@§úb–kÇa¨¨BnçbÁhªÞ˜åZt˜žjåš©j"²tÜ¡b{Zy¶*[§Ý]”­Zz¸½jâЫÚ_|ˆ’”Éê}ÜžG¦# Fkü¡8­ZlÒªÈÈÀ ˆšæ‘Iä… ¢jw­„Àƒ¨HŽ« W§sò­£l©ª«X&‡è®žu‰d¾‡e‚3£žYÏÁ«¨ÄVf.ž\]”)œye&òÙÒm‚c'Áªf"Ÿø§%˜°:š«ú°þ«ûªÄ:°:š +´f–¬c©¥©±N¬+´­é™Ý¢¹g>ŠÉªÜý™kÊj¥®¬‚&ì9²¾¬æÉڪͬc>Éi¾©9ëþéЊdjÏúb­ ©ÐzcN«É'zÅé©ÀþÉôEJ+©Ú´Z©ÐÔJ.­¦¨Ó:¯Y­ü€AØ.N­Y£Ô™´R !¾¶t£áǘޞ®ÛÙZ®Œ\ÛY÷ìŸM(qg´Œ@©A0·œŠ&ù0FwåÚÞÚp.p#éÓU¡+ݺÀ}Œ|¨ÈHhr‡‚kÚp¾­*£vØ2ê­t«3‡ú'áyÉiws¤ÎH­òŒ>c¹4Š­Dã¹Az†I£"¹4 #gª&}~#§÷ä Š&ìºfÚ®¸k22œF§ç–ƒÒt¿ëî*¼>¨Ýçö&°þl·ëƒš ËëÄֻ⑫ð³A¦k^Ug–^¯ë§Z½r¯1«åh±‚¯«é÷*›Ú¬qYúuv¯»£úz¾®yG¥Åº¾†¯ËÚÇŠ|þˆ(?°ÔnÞèýš¿ú§ü+Áé¿ò¨ œGÉÀ °gþJÀrýkû¿šp¹š“yG2plÚÁö¤`ƒ”U¦ï™ÁV°d{±½bkʸf’°¸ÜƤ¨¬g=i»®°$êŠC &l [½É‡`ä£Xp~3¬íJ·Ú>¤iDöäI¬‘´jKD‡ i·¯ªÿ×±1‘ÑšY«*™‚›ÙD* P,{Äf‘[$±êÅ_$in^±/¦àfF«ÆÜë)Ʀ±ÄÉÆ¾‘}¤4«áyGæ‘x,?ÀGÚ‘gÛ²­«çf!IBö±¤®†ÈJˆ,«f²®yɫɂ5+$ ­ý™”ì©I¿vŸÛùöÈbv—ì?àɲ¬¨ÝÇz¢j²6ëI×±Êq¬È*±ž²Ÿ,ð¹ÊV²®ì,‹Ê®yª,†zËò})>ÀÊ’²ïfAªƲºZ;›þ²›¬1ë¬!³«©2Û’Þ­D¥0{Ä‘Îì4ûNJ³õä»fZ³¬‘¹Í±ÚìÅÆÍ2”Þ¬8 Ί°àÀ8ëO–³éì9ËΪ³ál;‹OZ”(%HÙFb•#¥ KS’”Oe>;Gö³Ý[=›Ïª”.¥Hy¾™£òa?{Ð2œ mN)Ì¢ví;›B´>¥D»xâ³ íDûQ•íG ¤zfC«H‚´-V ¤z §×‡Uö,]JkÒ½‘(-#¶´2íÓ·—Þ˜rÜM«ÒÚ´)mNëÒR–4-NÔî´+\J‹Âò´/æQ[Ô&µ@-`ê(µž›QÛÔrœOíT;r¢ŽãÈ Õ¦œ çVËqÂ^­VkÕœa-YËÒu–Ÿeà~>—ÌåØ'Z6u¤¥ÀgZ¨åvg^âz,w×–,ݾv×R—€pù\rp2€\*—xmsI]B—Òå7Ø|v ^²–2à]N¶Ì¥ À—ˆ-tÉdj-§øEf…ya¦¶&DyLP-1.10.4/DyLP/doc/Figures/dylpnormalflow.epsu0000644000175200017520000042004211171477034020012 0ustar coincoin%!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/dylpnormalflow.epsu %%Creator: IslandDraw for lou %%CreationDate: Fri Aug 19 15:19:48 2005 %%Pages: 1 %%BoundingBox: 62 128 547 701 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 607 717 1 1434 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff801 % 001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000010c0006000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000001000002000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000002000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000006efb3763c2000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000007341199422000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000021411110e2000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000002141111322000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000002341111462000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000003ee3bbbbb7000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000002000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000002000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000007000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000400001800000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000400000800000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000800000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000000004001adbb1b88e77000c0000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000005000e00001000000003c00244cc9cc9f16000f8000000000 % 00000080006000062000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000900100000100000000f8003a48888490080003f000000000 % 00000100002000022000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000001000100000080000003e00006488884901c00007e00000000 % 00000200002000021000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000136e39c78688000001f00002248888c992600000fe0000000 % 000002426e2e6e3e1000000000000000000000000000000000000000000000000000001800 % 00100000000000000000000000000113113e84908000007c00003cfddcf9ce77000001fc000000 % 000002c6313331621000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000011211201ce8800001f000000000008000000000001f800000 % 00000242212121421000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000001121120641880000f80000000000080000000000003f00000 % 00000242212121421000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000011211328c8880003e000000000001c00000000000007f0000 % 00000246212321461000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000013f3b9c76f08000f8000000000000000000000000000fe000 % 0000023b73be73bb1000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000100000000008007c00000000000000000000000000000fc00 % 00000200000000001000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000008000000001001f0000000000000000000000000000001f80 % 00000100000000002000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000007c00000000000000000000000000000003f8 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000003e0000000000000000000000000000000007f % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000f800000000000000000000000000000000007 % e0000000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000003e000000000000000000000000000000000000 % fc000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000001f0000000000000000000000000000000000000 % 1fc00000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000007c0000000000000000000000000000000000000 % 03f80000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000001f000000000000000000c0000000000000000000 % 003f0000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000f8000000000000000000c0000000000000000000 % 0007e000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000183e0000000000000000000c0000000000000000000 % 0000fe00000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000038f80000000000000000000c0000000000000000000 % 00001fc0000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000ffc00000000000000000000c0000000000000000000 % 000001f8000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000001ff000000000000000000000c0000000000000000000 % 0000003f000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000003fe000000000000000000000c0000000000000000000 % 00000007f00000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000007fe000000000000000000000c0000000000000000000 % 00000000fe0000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000ffe000000000000000000000c0000000000000000000 % 000000000fc000000000000000000000000000000000000000000000000000000000001801 % 0010000002f81100000000000000000001ff8000000000000000000000c0800004000000000000 % 0000000001f800000000000000000000000000000000000000000000000000000000001801 % 0010000004447100000000000000000000000000000000000000000000c1000084000000000000 % 00000000003f80000000000000000000000000000000000000000000000000000000001801 % 0010000008441080000000000000000000000000000000000000000000c2000082000000000000 % 000000000007f0000000000000000000000000000000000000000000000000000000001801 % 0010000008441080000000000000000000000000000000000000000000c23cdde2000000000000 % 0000000000007e030000000000000000000000000000000000000000000000000000001801 % 0010000008781080000000000000000000000000000000000000000000c266e682000000000000 % 0000000000000fc7c000000000000000000000000000000000000000000000000000001801 % 0010000008401080000000000000000000000000000000000000000000c2424282000000000000 % 00000000000001ffe000000000000000000000000000000000000000000000000000001801 % 0010000008401080000000000000000000000000000000000000000000c2424282000000000000 % 000000000000003ff000000000000000000000000000000000000000000000000000001801 % 0010000008603080000000000000000000000000000000000000000000c2464682000000000000 % 000000000000000ffc00000000000000000000000000000000000000000000000000001800 % 0010000008e07880000000000000000000000000000000000000000000c23c7ce2000000000000 % 000000000000000ffe00000000000000000000000000000000000000000000000000001800 % 0010000008000080000000000080000000000000000000000000000000c2004002000000000000 % 000000000000000fff00000000010000000000000000000000000000000000000000001800 % 0010000004000100000000000880002000000000000000000000000000c1004004000000000000 % 00000000000000000000000000110000400000000000000000000000000000000000001800 % 0010000000000000000000000800002000000000000000000000000000c000e000000000000000 % 00000000000000000000000000100000400000000000000000000000000000000000001800 % 0010000000000000000003c79f9dde79c0000000000000000000000000c0000000000000000000 % 0000000000000000000000078f3f3bbcf38000000000000000000000000000000000001801 % 00100000000000000000042c4888a123e0000000000000000000000000c0000000000000000000 % 0000000000000000000000085891114247c000000000000000000000000000000000001800 % 0010060000000000000000e8088d072200000000000000000000000000c0000000000000000000 % 000000000000000000000001d0111a0e440000000000000000000000000000000000001800 % 00103e0000000000000003280885192200000000000000000000000000c0000000000000000000 % 00000000000000000000000650110a32440000000000000000000000000000000000001800 % 0011fe00000000000000046c4886232320000000000000000000000000c0000000000000000000 % 000000000000000000000008d8910c46464000000000000000000000000000000000001800 % 001ffe0000000000000003b78fc21db9c0000000000000000000000000c0000000000000000000 % 0000000000000000000000076f1f843b738000000000000000000000000000000000001800 % 001fffffffffffff800000000000000000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000000000000000005f1c2000000000000000000000001800 % 0017fe0000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000088a22000000000000000000000001801 % 0010fe0000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000108a21000000000000000000000001801 % 00101e0000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000108a21000000000000000000000001800 % 0010020000000000000000000000000000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000000000000000010f061000000000000000000000001800 % 0010000000000000000000000401818000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000800000000108041000000000000000000000001801 % 0010000000000000000000000400808000000000000000000000000000c0000000000000000000 % 00000000000000000000000000020000800800000108081000000000000000000000001801 % 0010000000000000000000000000808000000000000000000000000000c0000000000000000000 % 0000000000000000000000000002000000080000010c111000000000000000000000001800 % 001000000000000000007779fc78b88e1a000000000000000000000000c0000000000000000000 % 000000000000000000003cf3706fbef1b71e6800011c3e1000000000000000000000001800 % 0010000020000008000022848484cc9f24000000000000000000000000c0000000000000000000 % 00000000000000000000639988921108988890000100001000000000000000000000001801 % 00100000400000080000341c841c84903a000000000000000000000000c0000000000000000000 % 00000000000000000000410908ea10389088e8000080002000000000000000000000001801 % 0010000080000004000014648464849006000000000000000000000000c0000000000000000000 % 000000000000000000004109081a10c8908818000000000000000000000000000000001800 % 00100000b70e7ee40000188c848c8c9922000000000000000000000000c0000000000000000000 % 000000000000000000006319088a1118908888000000000000000000000000000000001800 % 00100000989f244400000877ce76f9ce3c000000000000000000000000c0000000000000000000 % 000000000000000000003cf39cf3b8edf9cef0000000000000000000000000000000001801 % 0010000090903644000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000601801 % 0010000090901a84000000000000000000000000000000000000000000c0000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000007c1800 % 0010000090991b04000000000000000000000000000000000000000000c0000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000007f9800 % 00100000b9ce0904000000000000000000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000000000000000fffffffffffffffffffffffffffffff801 % 0010000080000004000000000000000000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000000000000000fffffffffffffffffffffffffffffff801 % 0010000040000008000000000000000000000000000000000000000000c0000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000007fd800 % 0010000000000000000000000be0440000000000000000000000000000c0000000000000000000 % 000000000000000000000300000000310000400000000000000000000000000000007e1800 % 0010000000000000000000001111c40000000000000000000000000000c0000000000000000000 % 00000000000000000000050000000011000040000000000000000000000000000000701801 % 0010000000000000000000002110420000000000000000000000000000c0000000000000000000 % 000000000000000000000900000000100001a0000000000000000000000000000000001801 % 0010000000000000000000002110420000000000000000000000000000c0000000000000000000 % 000000000000000000000971e21371f36e0e20000000000000000000000000000000001800 % 00100000000000000000000021e0420000000000000000000000000000c0000000000000000000 % 00000000000000000000099b36318b11311120000000000000000000000000000000001800 % 0010000000000000000000002100420000000000000000000000000000c0000000000000000000 % 00000000000000000000090a12110a11211120000000000000000000000000000000001801 % 0010000000000000000000002100420000000000000000000000000000c0000000000000000000 % 00000000000000000000090a12110a11210e20000800000100000000000000000000001801 % 0010000000000000000000002180c20000000000000000000000000000c0000000000000000000 % 00000000000000000000091a32310a31211020001000000100000000000000000000001800 % 0010000000000000000000002381e20000000000000000000000000000c0000000000000000000 % 0000000000000000000009f1e1db9ddbf39f20002000000080000000000000000000001800 % 0010000000000000000000002000020000000000000000000000000000c0000000000000000000 % 000000000000000000000800000000000011a00026e38fdc80000000000000000000001801 % 0010000000000000000000001000040000000000000000000000000000c0000000000000000000 % 000000000000000000000400000000000031c0002317c48880000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000001e0000221406c880000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000002214035080000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000002216436080000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000000000000000273b812080000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000002000000080000000000000000000001800 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000001000000100000000000000000000001800 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000c010000000100000000000000000000c0000000000000000000 % 00000000000000000040000000401800000000000000000000000000000000000000001800 % 001000000000000000000000000c020000000100000000000000000000c0000000000000000000 % 00000000000000000080000000401800000000000000000000000000000000000000001801 % 001000000000000000000000000c040000000080000000000000000000c0000000000000000000 % 00000000000000000100000000201800000000000000000000000000000000000000001801 % 001000000000000000000000000c04dc79b87080000000000000000000c0000000000000000000 % 000000000000000001371e6e38201800000000000000000000000000000000000000001800 % 001000000000000000000000000c0462ccc4f880000000000000000000c0000000000000000000 % 00000000000000000118b3317c201800000000000000000000000000000000000000001800 % 001000000000000000000000000c044284848080000000000000000000c0000000000000000000 % 00000000000000000110a12140201800000000000000000000000000000000000000001801 % 001000000000000000000000000c044284848080000000000000000000c0000000000000000000 % 00000000000000000110a12140201800000000000000000000000000000000000000001801 % 001000000000000000000000000c04428c84c880000000000000000000c0000000000000000000 % 00000000000000000110a32164201800000000000000000000000000000000000000001800 % 001000000000000000000000000c04e779ce7080000000000000000000c0000000000000000000 % 00000000000000000139de73b8201800000000000000000000000000000000000000001800 % 001000000000000000000000000c040000000080000000000000000000c0000000000000000000 % 00000000000000000100000000201800000000000000000000000000000000000000001800 % 001000000000000000000000000c020000000100000000000000000000c0000000000000000000 % 00000000000000000080000000401800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000007f800000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000ff00000000000000000000000000000000000000001800 % 001000000000000000000000007f800000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000ff00000000000000000000000000000000000000001801 % 001000000000000000000000007f800000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000fe00000000000000000000000000000000000000001801 % 001000000000000000000000003f000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000007e00000000000000000000000000000000000000001800 % 001000000000000000000000003f000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000007e00000000000000000000000000000000000000001800 % 001000000000000000000000003f000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000007c00000000000000000000000000000000000000001801 % 001000000000000000000000001e000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000003c00000000000000000000000000000000000000001800 % 001000000000000000000000001e000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000003c00000000000000000000000000000000000000001800 % 001000000000000000000000001e000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000003c00000000000000000000000000000000000000001800 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 0000002fc1c20000000000000001180000000000005f042000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 000000446222000000000000001100004000000000889c2000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000084322100000000000000100000400000000108841000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0000008412210000000000078f3f3bbcf38000000108841000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0000008410610000000000085891114247c00000010f041000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 000000841041000000000001d0111a0e440000000108041000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000084308100000000000650110a32440000000108041000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 000000842111000000000008d8910c4646400000010c0c1000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0000008fc3e10000000000076f1f843b73800000011c1e1000000000000000000000001801 % 00100000000000000000003f03c71cfe00000000000000000000000000c0000000000000000000 % 00000080000100000000000000000000000000000100001000000000000000000000001801 % 0010000000000000000000118423884600000000000000000000000000c0000000000000000000 % 00000040000200000000000000000000000000000080002000000000000000000000001801 % 001000000000000000000010c822884100000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000104812c84800000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000104812687800000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000104812684800000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000800000000000000000000000000000000000701801 % 001000000000000000000010c832384100000000000000000000000000c0000000000000000000 % 000000000000000000000000000200008008000000000000000000000000000000007e1801 % 0010000000000000000000108422184200000000000000000000000000c0000000000000000000 % 000000000000000000000000000200000008000000000000000000000000000000007fd801 % 00100000000000000000003f03c718fe00000000000000000000000000c0000000000000000000 % 007ffffffffffffe00003cf3706fbef1b71e6800fffffffffffffffffffffffffffffff801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 007ffffffffffffe000063998892110898889000fffffffffffffffffffffffffffffff801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000410908ea10389088e80000000000000000000000000000007fd801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 004000000000000000004109081a10c89088180000000000000000000000000000007e1801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 004000000000000000006319088a1118908888000000000000000000000000000000701801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 004000000000000000003cf39cf3b8edf9cef0000000000000000000000000000000001801 % 001000000000000000014003800004c180100000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000240040000044080100000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000400040000004080080000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 00100000000000000004db8e71e1ac5c8e080000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000800000100000000000000000000001800 % 001000000000000000044c44fa1244669f080000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000001000000100000000000000000000001800 % 0010000000000000000448448073a44290080000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000002000000080000000000000000000001800 % 0010000000000000000448448190644290080000000000000000000000c0000000000000000000 % 004000000000000000000010100600000188000026e38fdc80000000000000000000001800 % 001000000000000000044844ca32244699080000000000000000000000c0000000000000000000 % 00400000000000000000002010020040008800002317c48880000000000000000000001801 % 00100000000000000004fcee71dbce7dce080000000000000000000000c0000000000000000000 % 0040000000000000000000400002004000840000221406c880000000000000000000001800 % 0010000000000000000400000000000000080000000000000000000000c0000000000000000000 % 00400000000000000000004ef1e23cf38f8400002214035080000000000000000000001800 % 0010000000000000000200000000000000100000000000000000000007f8000000000000000000 % 00400000000000000000004453324247d88400002216436080000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000004692120e4410840000273b812080000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000004292123244108400002000000080000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000004312324646518400001000000100000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000004139e73b738ec400000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000004000000000000400000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000002000000000000800000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000002f871000000000000800000000000000000000 % 00400000000000000040000000401800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000044489000000000008800020000000000000000 % 00400000000000000080000000401800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000084488800000000008000020000000000000000 % 00400000000000000100000000201800000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000008448880000003c79f9dde79c00000000000000 % 004000000000000001371e6e38201800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000087818800000042c4888a123e00000000000000 % 00400000000000000118b3317c201800000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000008401080000000e8088d0722000000000000000 % 00400000000000000110a12140201800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000084020800000032808851922000000000000000 % 00400000000000000110a12140201800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000086044800000046c48862323200000000000000 % 00400000000000000110a32164201800000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000008e0f880000003b78fc21db9c00000000000000 % 00400000000000000139de73b8201800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000080000800000000000000000000000000000000 % 00400000000000000100000000201800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000040001000000000000000000000000000000000 % 00400000000000000080000000401800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001006000000000000000000000000000000000000000000000000004018180000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 00103e000000000000000000000000000000000000000000000000004008080000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0011fe000000000000000000000000000000000000000000000000000008080000000000000000 % 0040000000000000000000000000ff00000000000000000000000000000000000000001801 % 001ffffffffffffffffffffffffffffffffffffffffffff80007779fc78b88e1a0000000000000 % 0040000000000000000000000000ff00000000000000000000000000000000000000001801 % 001ffffffffffffffffffffffffffffffffffffffffffff800022848484cc9f240000000000000 % 0040000000000000000000000000fe00000000000000000000000000000000000000001800 % 0013fe000000000000000000000000000000000000000000000341c841c84903a0000000000000 % 00400000000000000000000000007e00000000000000000000000000000000000000001800 % 00107e000000000000000000000000000000000000000000000146484648490060000000000000 % 00400000000000000000000000007e00000000000000000000000000000000000000001801 % 00100e000000000000000000000000000000000000000000000188c848c8c99220000000000000 % 00400000000000000000000000007c00000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000877ce76f9ce3c0000000000000 % 00400000000000000000000000003c00000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000003c00000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000003800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000200000080000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000400000080000000000000000000000000000000 % 00400000000000000000000000001000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000800000040000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000b70e7ee4000000000be1c400000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000989f24440000000011122400000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000909036440000000021122200000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000090901a840000000021122200000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000090991b040000000021e06200000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000b9ce09040000000021004200000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000800000040000000021008200000000000000000 % 004000000000000000000000001c03300000000000000000000fc0f1c77f00000000001800 % 001000000000000000000000000000000000000400000080000000021811200000000000000000 % 00400000000000000000000000200110000000000000000000046108e22300000000001800 % 00100000000000000000000000000000000000000000000000000002383e200000000000000000 % 00400000000000000000000000200110000000000000000000043208a22080000000001801 % 001000000000000000000000000000000000000000000000000000020000200000000000000000 % 00400000000000000000000000721110000000000000000000041204b22400000000001800 % 001000000000000000000000000000000000000000000000000000010000400000000000000000 % 004000000000000000000000002631100000000000000000000412049a3c00000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 004000000000000000000000002211100000000000000000000412049a2400000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000221110000000000000e0000004320c8e2080000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000223110000000000000fc0000042108862100000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 0040000000000000000000000071dbb8000000000000ff80000fc0f1c67f00000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000001ffffffffe000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000001ffffffffe000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000ff0000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000f00000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000800000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0040000000000000000000000000000001c000000000002000180000000180062000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000010000062000000000004000080000000080022000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000010000042000000000008000080000000080021000001801 % 0010000000000000000000000000000000000000000000000000000000c0100000001000000000 % 004000000000000000000006f737ce3760200000000000885b8b8f109b8f8e3e1000001801 % 0010000000000000000000000000000000000000000000000000000000c0200000001000000000 % 00400000000000000000000922491f199040000000000098cc4cd9b18c589f621000001801 % 0010000000000000000000000000000000000000000000000000000000c0400000000800000000 % 00400000000000000000000eb2751011108000000000008848485090885090421000001801 % 0010000000000000000000000000000000000000000000000000000000c04dc79b870800000000 % 004000000000000000000001940d1011108000000000008848485090885090421000001801 % 0010000000000000000000000000000000000000000000000000000000c0462ccc4f8800000000 % 004000000000000000000008944519111180000000000088c848d191885199461000001801 % 0010000000000000000000000000000000000000000000000000000000c0442848480800000000 % 00400000000000000000000f0879ce3bb9800000000000877cef8f0edceece3b1000001801 % 0010000000000000000000000000000000000000000000000000000000c0442848480800000000 % 00400000000000000000000008000000000000000000008000000000000000001000001801 % 0010000000000000000000000000000000000000000000000000000000c04428c84c8800000000 % 00400000000000000000000038000000000000000000004000000000000000002000001800 % 0010000000000000000000000000000000000000000000000000000000c04e779ce70800000000 % 00400000000000000000000060000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0400000000800000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0200000001000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 0040000000000000000000000000ff00000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000800000000000000000000 % 0040000000000000000000000000ff00000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000008800020000000000000000 % 0040000000000000000000000000fe00000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000008000020000000000000000 % 00400000000000000000000000007e00000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000000000000000003c79f9dde79c00000000000000 % 00400000000000000000000000007e00000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000042c4888a123e00000000000000 % 00400000000000000000000000007c00000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000000000000e8088d0722000000000000000 % 00400000000000000000000000003c00000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000032808851922000000000000000 % 00400000000000000000000000003c00000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000046c48862323200000000000000 % 00400000000000000000000000003800000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000000000003b78fc21db9c00000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000fc0f1c77f00000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000046108e22300000000000000000000000000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000043208a22080000000000000000000000000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000041204b22400000000000000000000000000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000412049a3c00000000000000000000000000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000412049a2400000000000000000000000000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 00100000000000004320c8e2080000038000000000000000000000000000040000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000421088621000001f8000000000000000000000001000040040000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000fc0f1c67f00000ff8000000000000000000000001000000040000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000007fffffffffffffffff801e3cdc37df3ccdcf1a00000000000 % 004000000000000000000000100000000700d8000000000000000000000000000000001800 % 001000000000000000000000000003fffffffffffffffff8031666249084246242400000000000 % 00400000000000000000000110000400080048000000000000000000000000000000001801 % 0010000000000000000000000000007f8000000000000000020424275080e44243a00000000000 % 00400000000000000000000100000400080048000000000000000000000000000000001801 % 0010000000000000000000000000000f800000000000000002042420d083244240600000000000 % 0040000000000000000078f3f3bbcf381c8448000000000000000000000000000000001800 % 001000000000000000000000000000018000000000000000031464245084644242200000000000 % 0040000000000000000085891114247c098c48000000000000000000000000000000001800 % 00100000000000000000000000000000000000000000000001e3ce779dc3bee773c00000000000 % 004000000000000000001d0111a0e440088448000000000000000000000000000000001801 % 001000000000002000010000062000000000000000000000000000000000000000000000000000 % 00400000000000000000650110a32440088448000000000000000000000000000000001801 % 001000000000004000110000022000000000000000000000000000000000000000000000000000 % 004000000000000000008d8910c46464088c48000000000000000000000000000000001800 % 001000000000008000100000021000000000000000000000000000000000000000000000000000 % 0040000000000000000076f1f843b7381c76fc000000000000000000000000000000001800 % 001000000000008f373f3761e21000000000200000002000000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000099b9911992121000000000400000002000000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000009090911110721000000000800000001000000080803000000c40000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000090909111119210000000009b8f371c1000000100801002000440000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000091919111123210000000008c5998be1000000200001002000420000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000008f1f1fbbb9df1000000000885090a010000002778f11e79c7c20000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000008010000000001000000000885090a010000002229992123ec420000000000000 % 00400000000000000000000000080000000000000000000000000000000000000000001800 % 001000000000004010000000002000000000885190b21000000234909072208420000000000000 % 00400000000000000000002000080080000008000000000000000000000000000000001800 % 0010000000000000380000000000000000009cef39dc1000000214909192208420000000000000 % 00400000000000000000002000000080000008000000000000000000000000000000001801 % 001000000000000000000000000000000000800000001000000218919232328c20000000000000 % 0040000000000003cf3706fbef1b71e06bb9be737600000000000000000000000000001801 % 001000000000000000000000000000000000400000002000000209cf39db9c7620000000000000 % 00400000000000063998892110898880911248f99900000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000200000000000020000000000000 % 004000000000000410908ea103890880e993a8811100000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000100000000000040000000000000 % 0040000000000004109081a10c89088018a068811100000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 0040000000000006319088a11189088088a228c91100000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 0040000000000003cf39cf3b8edf9ce0f043ce73bb80000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000000000004000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 0040000000000000000000000000000001c000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000000000030000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0020000008000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0040000008000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0080000004000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c009b8e3f74000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c008c5f1224000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0088501b24000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0088500d44000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0088590d84000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c009cee0484000000000 % 004000000000000000000000000018000000000002f81001f0e10000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0080000004000000000 % 00400000000000000000000000001800000000000444700c89110000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0040000008000000000 % 00400000000000000000000000001800000000000844100889108000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000844100889108000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 004000000000000000000000000018000000000008781010f0308000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000840101080208000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000840102080408000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 004000000000000000000000000018000000000008603020c0888000000000000000001800 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 004000000000000000000000000018000000000008e07841c1f08000000000000000001800 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000000000001800000000000800004000008000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 0040000000000000000000000000180000000000040000c000010000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000701801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 004000000000000000000000000018000000000000000000000000000000000000007e1801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 004000000000000000000000000018000000000000000000000000000000000000007fd800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001ffffffffffffffffffffffffffffffffffffffffff801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001ffffffffffffffffffffffffffffffffffffffffff801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 004000000000000000000000000018000000000000000000000000000000000000007f9801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 004000000000000000000000000018000000000000000000000000000000000000007c1801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000601801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000300000008000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000100000108000400000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000100000100000400000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000001f1c78f3dbbbcf38000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000000000313e85890914247c000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000021201d0109a0e440000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000002120650108a32440000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000023328d8908c46464000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000001d9c76f1dc43b738000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000040000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000001000040040000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000001000000040000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000000000000001e3cdc37df3ccdcf1a00000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000031666249084246242400000000000 % 0040000000000000000000bf07081800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000020424275080e44243a00000000000 % 00400000000000000000011188881800000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000000000000002042420d083244240600000000000 % 004000000000000000000210c8841800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000031464245084644242200000000000 % 00400000000000000000021048841800000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000000001e3ce779dc3bee773c00000000000 % 00400000000000000000021041841800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000021041041800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 004000000000000000000210c2041800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000021084441800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000023f0f841800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000020000041800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000010000081800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 03fc0000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 03fc0000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 03f80000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 03f80000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 01f80000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 01f00000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 01f00000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000020000000000 % 00f00000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000000000001e0000000000 % 00e00000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000fe0000000000 % 00e00000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000007fe0000000000 % 00600000000000000000000000001800000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000000000000001800030001fffffffffffff % fffffffffffffffffffffffffffff800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000008000100007fe0000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000008000100000fe0000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000f884f1000001e0000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000001898d0900000020000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000108843900000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000000000000000000010884c900000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000001188d1900000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000ec76ef80000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000004000300003100000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000008000100001100000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000010000100001080000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000001213717371f080000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000163189998b1080000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000121109090a1080000000400001800000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000121109090a1080000000400000800000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000123109190a3080000000000000800000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000011db9df39dd88004001adbb1b88e7700080000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000100000000000807c00244cc9cc9f16000f0000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000008000000000103f0003a48888490080007c000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000003f800006488884901c0000f800000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000001f800002248888c992600003e00000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000001fc000003cfddcf9ce77000007c0000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000fc000000000000800000000001f0000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000fe00000000000008000000000003e000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000007e00000000000001c000000000000f800000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000007f00000000000000000000000000001f00000 % 00000000000000000008000002000000000000000000000000000000017c70800000001800 % 00100000000000000000000000000000000000003f0000000000000000c00000000000007c0000 % 00000000000000000010000002000000000000000000000000000000022288800000001801 % 0010000000000000000000000000000000000003f80000000000000000c00000000000000f8180 % 00000000000000000020000001000000000000000000000000000000042288400000001801 % 001000000000000000000000000000000000c01f800000000000000000e000000000000003e1c0 % 00000000000000000026e39fb9000000000000000000000000000000042288400000001801 % 001000000000000000000000000000000003c1fc000000000000000001e0000000000000007de0 % 0000000000000000002317c911000000000000000000000000000000043c18400000001801 % 001000000000000000000000000000000007cfc0000000000000000001e0000000000000001ff8 % 00000000000000000022140d91000000000000000000000000000000042010400000001801 % 00100000000000000000000000000000001ffe00000000000000000001f00000000000000003fc % 000000000000000000221406a1000000000000000000000000000000042020400000001801 % 00100000000000000000000000000000003fe000000000000000000003f00000000000000007fe % 000000000000000000221646c1000000000000000000000000000000043044400000001801 % 0010000000000000000000000000000000ffe000000000000000000003f00000000000000007ff % 000000000000000000273b82410000000000000000000000000000000470f8400000001801 % 0010000000000000000000000000000001ffe000000000000000000003f80000002000008007ff % 80000100000000000020000001000000000300000008000000000000040000400000001801 % 00100000000000000000000000000000007fe000000000000000000007f8000000400010800000 % 00002100008000000010000002000000000100000108000400000000020000800000001801 % 0010000000000000000000000000000000000000000000000000000007f8000000800010400000 % 00002000008000000000000000000000000100000100000400000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c00000008f373c400000 % 0f1e7b7779e700000000000000000000001f1c78f3dbbbcf38000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c000000099b990400000 % 10b12122848f8000000000000000000000313e85890914247c000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000909090400000 % 03a021341c88000000000000000000000021201d0109a0e440000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000909090400000 % 0ca02114648800000000000000003800002120650108a32440000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000919190400000 % 11b121188c8c80000000000000003f000023328d8908c46464000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c00000008f1f1c400000 % 0ede3b8876e700000000000000003fe0001d9c76f1dc43b738000000000000000000001801 % 0010000000000000000000020000000000000000000000000000000000c0000000801000400000 % 0000000000000003fffffffffffffff80000000000000000000ffffffffffffffffffff801 % 0010000000000000000000420001000000000000000000000000000000c0000000401000800000 % 0000000000000003fffffffffffffff80000000000000000000ffffffffffffffffffff800 % 0010000000000000000000400001000000000000000000000000000000c0000000003800000000 % 00000000000000000000000000003fc0000000000000000000000000000000000000000000 % 0010000000000000001e3cf6eef3ce0000000000000000000000000000c0000000000000000000 % 00000000000000000000000000003e00000000000000000000000000000000000000000000 % 00100000000000000021624245091f0000000000000000000000000000c0000000000000000000 % 00000000000000000000000000003000000000000000000000000000000000000000000000 % 0010000000000000000740426839100000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 00100000000000000019404228c9100000000000000000000000000000c0000000000000000000 % 00000803060000000000000000000000000000004018180000000000000000000000000001 % 0010000000000000002362423119190000000000000000000000000000c0000000000000000000 % 00000801020000000000000000000000000000004008080000000000000000000000000000 % 0010000000000000001dbc7710edce0000000000000000000000000000c0000000000000000000 % 00000001020000000000000000000000000000000008080000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000001 % dde7d9e17238340000000000000000000007779fc78b88e1a0000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 8a120a119a7c4800000000000000000000022848484cc9f240000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % d07208710a4074000000000000000000000341c841c84903a0000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 519209910a400c000000000000000000000146484648490060000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 62320a311a6444000000000000000000000188c848c8c99220000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000200c0000000000000000000 % 21df1dd9f738780000000000000000000000877ce76f9ce3c0000000000000000000000001 % 001000000000000000000010060c0000000000000000000000000003c0c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 00100000000000000000001002040000000000000000000000000003f8c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 00100000000000000000000002040000000000000000000000000003ffc0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 001000000000000003bbcfb3c2e470680000ffffffffffffffffffffffc0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000011424142334f890000000000000000000000003ffc0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 001000000000000001a0e410e21480e8000000000000000000000003f8c0000000000000000000 % 00002f87080000000000000000000000000000000000000000000000000000000000000000 % 001000000000000000a3241322148018000000000000000000000003c0c0000000000000000000 % 00004448880000000000000000000000000000000000000000000000000000000000000001 % 001000000000000000c464146234c88800000000000000000000000200c0000000000000000000 % 00008448840000000000000000000000000000000000000000000000000000000000000001 % 00100000000000000043be3bb3ee70f000000000000000000000000000c0000000000000000000 % 00008448840000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00008781840000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00008401040000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00008402040000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000020000004000000000c0000000000000000000 % 00008604440000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000040000004000000000c0000000000000000000 % 00008e0f840000000000000000000000000000000000000000000000000000000000000000 % 001000000000086000060c00000000c400010000080000002000000000c0000000000000000000 % 00008000040000000000000000000000000000000000000000000000000000000000000001 % 001000000000102000020400000000440001000009b8e3f72000000000c0000000000000000000 % 00004000080000000000000000000000000000000000000000000000000000000000000001 % 001000000000202000020400000000400006800008c5f1222000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 00100000000023e213c205c7884dc7cdb8388000088501b22000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 00100000000026263422066cd8c62c44c4448000088500d42000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 001000000000242210e204284844284484448000088590d82000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 001000000000242213220428484428448438800009cee0482000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 001000000000246234620468c8c428c484408000080000002000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 00100000000023b1dbb707c7876e776fce7c8000040000004000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000002000000000000000000000468000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000001000000000000000000000c70000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000780000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000004000 % 00008010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000008000 % 00008010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000001800000000000000000000000000000000c0000000000000010000 % 00004010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000001800000000000000000000000000000000c0000000000000016e1e % 6e384010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000013133 % 317c4010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000012121 % 21404010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000001800000000000000000000000000000000c0000000000000012121 % 21404010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000001800000000000000000000000000000000c0000000000000012123 % 21644010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c000000000000001739e % 73b84010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000040000000401800000000000000000000000000000000c0000000000000010000 % 00004010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000080000000401800000000000000000000000000000000c0000000000000008000 % 00008010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000100000000201800000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 00100000000001371e6e1c201800000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000118b3313e201800000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000110a12120201800000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000110a12120201800000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000110a32132201800000000000000000000000000000000c0000000000000000000 % 000001fe000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000139de739c201800000000000000000000000000000000c0000000000000000000 % 000001fe000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000100000000201800000000000000000000000000000000c0000000000000000000 % 000000fe000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000080000000401800000000000000000000000000000000c0000000000000000000 % 000000fe000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 000000fc000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 0000007c000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 0000007c000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 00000078000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 00000038000000000000000000000000000000000000000000000000000000000000000000 % 001000000000000000000000ff00000000000000000000000000000000c0000000000000000000 % 00000038000000000000000000000000000000000000000000000000000000000000000001 % 001000000000000000000000ff00000000000000000000000000000000c0000000000000000000 % 00000030000000000000000000000000000000000000000000000000000000000000000001 % 001000000000000000000000ff00000000000000000000000000000000c0000000000000000000 % 00000110000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000007e00000000000000000000000000000000c0000000000000000000 % 00002100008000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000007e00000000000000000000000000000000c0000000000000000000 % 00002000008000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000007e00000000000000000000000000000000c0000000000000000000 % 0f1e7b7779e700000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000003c00000000000000000000000000000000c0000000000000000000 % 10b12122848f80000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000003c00000000000000000000000000000000c0000000000000000000 % 03a021341c8800000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000003c00000000000000000000000000000000c0000000000000000000 % 0ca02114648800000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 11b121188c8c80000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 0ede3b8876e700000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 00000000000000000000200000002000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000400000002000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000800000001000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 000000000000000000009b8f371c1000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 000000000000000000008c5998be1000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000885090a01000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000010000000000885090a01000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000200010010000000885190b21000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 000002000000100000009cef39dc1000000000000000000000000000000000000000000001 % 00100005f0220000000000008000000000000000000000000000000000c0000000000000000078 % f370d7fcf3373c680000800000001000000003f03c71cfe000000000000000000000000000 % 0010000888e20000000000108000400000000000000000000000000000c00000000000000000c5 % 99892221091890900000400000002000000001184238846000000000000000000000000001 % 0010001088210000000000100000400000000000000000000000000000c0000000000000000081 % 0909d220391090e800000000000000000000010c8228841000000000000000000000000001 % 001000108821000000078f3dbbbcf38000000000000000000000000000c0000000000000000081 % 09083220c9109018000000000000000000000104812c848000000000000000000000000001 % 00100010f021000000085890914247c000000000000000000000000000c00000000000000000c5 % 19091221191090880000000000000000000001048126878000000000000000000000000001 % 00100010802100000001d0109a0e440000000000000000000000000000c0000000000000000078 % f39de3f0efb9dcf00000000000000030000001048126848000000000000000000000000001 % 0010001080210000000650108a32440000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000003e0000010c8323841000000000000000000000000001 % 00100010c06100000008d8908c46464000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000003fc00001084221842000000000000000000000000001 % 00100011c0f1000000076f1dc43b738000000000000000000000000000c0000000000000000000 % 000000000000000001fffffffffffffff80003f03c718fe000000000000000000000000001 % 0010001000010000000000000000000000000000000000000000000000c0000000000000000000 % 000000000000000001fffffffffffffffc0000000000000000000000000000000000000001 % 0010000800020000000000000000000000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000003ff00000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 20100c0000019000000000000000003f800000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 4010040080009000000000000000003c000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 80000400800088000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000040183000000000000000000000000000000c0000000000000000000 % 9df3c479e70f88000000000000000000000040000200000c40000000000000000000000001 % 0010000000000000000000040081000000000000000000000000000000c0000000000000000000 % 889664848f9888000000000000000000000080004200000440000000000000000000000001 % 0010000000000000000000000081000000000000000000000000000000c0000000000000000000 % 8d14241c881088000000000000000000000100004000000420000000000000000000000001 % 001000000000000000eef3ecf0b91c1a00000000000000000000000000c0000000000000000000 % 8514246488108800000000000000000000011e6ef66ec3c420000000000000000000000001 % 00100000000000000045090508cd3e2400000000000000000000000000c0000000000000000000 % 8614648c8c9188000000000000000000000133734233242420000000000000000000000001 % 0010000000000000006839043885203a00000000000000000000000000c0000000000000000000 % 823bce76e70ec800000000000000000000012121422220e420000000000000000000000000 % 00100000000000000028c904c885200600000000000000000000000000c0000000000000000000 % 80000000000008000000000000000000000121214222232420000000000000000000000000 % 001000000000000000311905188d322200000000000000000000000000c0000000000000000000 % 40000000000010000000000000000000000123234222246420000000000000000000000000 % 00100000000000000010ef8eecfb9c3c00000000000000000000000000c0000000000000000000 % 0000000000000000000000000000000000011e3e777773be20000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000100200000000020000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000080200000000040000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000700000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 001000000000000000000017c088000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000222388000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000422084000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000422084000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 001000000000000000000043c084000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000420084000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 001fffffffffffff800000420084000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 001fffffffffffff800000430184000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000004703c4000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000400004000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000200008000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000001000 % 00020010000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000002000 % 00020010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000004000 % 00010010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000004dc7 % 1fb90010000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c000000000000000462f % 89110010000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000004428 % 0d910010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000004428 % 06a10010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c000000000000000442c % 86c101fe000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000004e77 % 024101fe000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000004000 % 000100fe000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000002000 % 000200fe000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 000000fc000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0000007c000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0000007c000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000078000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000038000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000038000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000030000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000110000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00002100008000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00002000008000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0f1e7b7779e700000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 10b12122848f80000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 03a021341c8800000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0ca02114648800000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 11b121188c8c80000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0ede3b8876e700000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000803060000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000801020000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000001020000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000001 % dde7d9e1723834000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 8a120a119a7c48000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % d07208710a4074000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 519209910a400c000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 62320a311a6444000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 21df1dd9f73878000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000ffffffffffffffff0000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000ffffffffffffffff0000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00005f83840000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000088c4440000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00010864420000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00010824420000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00010820c20000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00010820820000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00010861020000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00010842220000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00011f87c20000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00010000020000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00008000040000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 87.5 47.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 52.5 62.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -184 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 52.5 87.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -306 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (DONE) s -524 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(infeasible\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 172.5 110] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -306 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (DONE) s -622 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(unbounded\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 142.5 62.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s -524 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(bounding\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 142.5 85] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s -438 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(violated\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 142.5 110] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -160 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (full) s -396 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (system?) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 142.5 130] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -570 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate full) s -874 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraint system) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 87.5 170] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -218 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 117.5 180] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -184 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 117.5 225] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -202 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(D2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 117.5 202.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s -438 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(violated\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 157.5 180] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -492 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (deactivate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 157.5 207.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -306 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (DONE) s -428 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(optimal\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 49.482 182.484] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -774 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dual bounding\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 87.5 100] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -184 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 87.5 125] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s -438 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(violated\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 45 127.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -306 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (DONE) s -428 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(optimal\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 87.5 150] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -492 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (deactivate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 50 207.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -184 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1\)) s savemat setmatrix n 60 57.5 m 62.386 55.379 l 63.181 57.235 l cl 0 0 0 F n 77.5 50 m 62.783 56.307 l gsave 0 0 0 0.176 0 B grestore n 130 60 m 126.81 60.074 l 127.4 58.145 l cl 0 0 0 F n 97.5 50 m 127.11 59.11 l gsave 0 0 0 0.176 0 B grestore n 87.5 95 m 86.491 91.972 l 88.509 91.972 l cl 0 0 0 F n 87.5 55 m 87.5 91.972 l gsave 0 0 0 0.176 0 B grestore n 52.5 82.5 m 51.491 79.472 l 53.509 79.472 l cl 0 0 0 F n 52.5 72.5 m 52.5 79.472 l gsave 0 0 0 0.176 0 B grestore n 142.5 82.5 m 141.49 79.472 l 143.51 79.472 l cl 0 0 0 F n 142.5 72.5 m 142.5 79.472 l gsave 0 0 0 0.176 0 B grestore n 142.5 105 m 141.49 101.97 l 143.51 101.97 l cl 0 0 0 F n 142.5 95 m 142.5 101.97 l gsave 0 0 0 0.176 0 B grestore n 142.5 125 m 141.49 121.97 l 143.51 121.97 l cl 0 0 0 F n 142.5 115 m 142.5 121.97 l gsave 0 0 0 0.176 0 B grestore n 162.5 110 m 159.47 111.01 l 159.47 108.99 l cl 0 0 0 F n 152.5 110 m 159.47 110 l gsave 0 0 0 0.176 0 B grestore n 190 67.5 m 186.97 68.509 l 186.97 66.491 l cl 0 0 0 F n 155 67.5 m 186.97 67.5 l gsave 0 0 0 0.176 0 B grestore n 190 87.5 m 186.97 88.509 l 186.97 86.491 l cl 0 0 0 F n 155 87.5 m 186.97 87.5 l gsave 0 0 0 0.176 0 B grestore n 87.5 120 m 86.491 116.97 l 88.509 116.97 l cl 0 0 0 F n 87.5 110 m 87.5 116.97 l gsave 0 0 0 0.176 0 B grestore n 87.5 145 m 86.491 141.97 l 88.509 141.97 l cl 0 0 0 F n 87.5 135 m 87.5 141.97 l gsave 0 0 0 0.176 0 B grestore n 87.5 165 m 86.491 161.97 l 88.509 161.97 l cl 0 0 0 F n 87.5 155 m 87.5 161.97 l gsave 0 0 0 0.176 0 B grestore n 60 177.5 m 62.634 175.7 l 63.189 177.64 l cl 0 0 0 F n 77.5 172.5 m 62.911 176.67 l gsave 0 0 0 0.176 0 B grestore n 110 177.5 m 106.81 177.31 l 107.56 175.44 l cl 0 0 0 F n 97.5 172.5 m 107.19 176.38 l gsave 0 0 0 0.176 0 B grestore n 50 202.5 m 48.991 199.47 l 51.009 199.47 l cl 0 0 0 F n 50 192.5 m 50 199.47 l gsave 0 0 0 0.176 0 B grestore n 117.5 200 m 116.49 196.97 l 118.51 196.97 l cl 0 0 0 F n 117.5 190 m 117.5 196.97 l gsave 0 0 0 0.176 0 B grestore n 117.5 222.5 m 116.49 219.47 l 118.51 219.47 l cl 0 0 0 F n 117.5 212.5 m 117.5 219.47 l gsave 0 0 0 0.176 0 B grestore n 145 180 m 141.97 181.01 l 141.97 178.99 l cl 0 0 0 F n 127.5 180 m 141.97 180 l gsave 0 0 0 0.176 0 B grestore n 147.5 207.5 m 144.47 208.51 l 144.47 206.49 l cl 0 0 0 F n 130 207.5 m 144.47 207.5 l gsave 0 0 0 0.176 0 B grestore n 87.5 175 m 88.509 178.03 l 86.491 178.03 l cl 0 0 0 F n 105 230 m 87.5 230 l 87.5 178.03 l gsave 0 0 0 0.176 0 B grestore n 87.5 45 m 86.491 41.972 l 88.509 41.972 l cl 0 0 0 F n 40 215 m 25 215 l 25 35 l 87.5 35 l 87.5 41.972 l gsave 0 0 0 0.176 0 B grestore n 25 62.5 m 28.028 61.491 l 28.028 63.509 l cl 0 0 0 F n 40 62.5 m 28.028 62.5 l gsave 0 0 0 0.176 0 B grestore n 87.5 185 m 84.472 186.01 l 84.472 183.99 l cl 0 0 0 F n 62.5 185 m 84.472 185 l gsave 0 0 0 0.176 0 B grestore n 167.5 180 m 190 180 l 190 35 l 87.5 35 l gsave 0 0 0 0.176 0 B grestore n 190 145 m 186.97 146.01 l 186.97 143.99 l cl 0 0 0 F n 142.5 137.5 m 142.5 145 l 186.97 145 l gsave 0 0 0 0.176 0 B grestore n 55 127.5 m 58.028 126.49 l 58.028 128.51 l cl 0 0 0 F n 75 127.5 m 58.028 127.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 160 85] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -184 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 160 65] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -184 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 162.5 142.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -368 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1/P2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 137.5 155] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -202 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(D2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 35 60] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -184 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1\)) s savemat setmatrix n 25 102.5 m 28.028 101.49 l 28.028 103.51 l cl 0 0 0 F n 75 102.5 m 28.028 102.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 70 100] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -184 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 32.5 207.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -184 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 177.5 177.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -184 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 120 85] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -202 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(D2\)) s savemat setmatrix n 95 167.5 m 98.028 166.49 l 98.028 168.51 l cl 0 0 0 F n 142.5 145 m 142.5 167.5 l 98.028 167.5 l gsave 0 0 0 0.176 0 B grestore n 112.5 167.5 m 111.49 164.47 l 113.51 164.47 l cl 0 0 0 F n 127.5 87.5 m 112.5 87.5 l 112.5 164.47 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 100 180] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -216 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(opt\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 67.5 172.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -384 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(unbnd\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 92.5 60] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -216 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(opt\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 67.5 52.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -700 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(infeas\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 122.5 52.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -384 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(unbnd\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 42.5 197.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 72.5 190] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 160 72.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 135 77.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 135 100] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 160 92.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 135 177.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 110 195] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 137.5 205] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 110 220] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 35 67.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 60 77.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 70 107.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 95 115] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 67.5 132.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 95 140] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix userdict /#copies 1 put grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore DyLP-1.10.4/DyLP/doc/Figures/startupflow.drw0000644000175200017520000005666111171477034017167 0ustar coincoinª» €(€ ˆÈ sÇH6eb P%Ì™2SÒè)ƒBFŒ.r°q#‡ )XL3›0y˜¤³ðˆœ7uà,¤RK!rêÌAƒ¢I*E¤!† 8p°p‰E 0R„¼1ÃŽ6X̰ábFŒ,b-:Ö(Œ°eÇúQÀã5>xPy„0lÒœqWJ’#H¨€À«—/ŒPAÐ #&.)tŸH¡’䉓 L@ˆ•Dɸf;—lÌØ:lÒ‰Û"ˆÓ©Ë¬æĘ9qQyófM›0nRØ6·M2iê´4ˆÎEˆ99fÛlää.âä“$S?éæL‡eâÆ¸â÷œ5qÝÂU0æ 2,@Ü #§ [:5Ñ1r”F_”á>(’4Ù¤[N;õôSPC‘…”RLåáTR…W6 V FáƒFbe–†h¹¨[òÅ5W]wåµW\La„`„íxØQ-FÚc‘MVÙe™m& é¤™†šj¬¹–´Ù†ºñæpÂAÆ!§sÎA‚tÔY‡v`rçxâ@žyè©Çž{ðµõVƒûõ—oÐñ_€x`‚ 6ø K0Éa€êÄ“O@ E”YI-5‡OERR.ÜPCX]”U‹0¾ë‹k —\tÙ¤aCp×é`:†X‘Œ9’Qffš¹ÀÙ”Q&6Z\VÆ6[k¯])›zÝ–Ûn½ýÜpÅ—Ürf6ǃ›ÑMFuבÝvÝ}ÞxÀñùP|ƒ*P BaÌQe¼¥sØgGrü°¨Mˆ ‚ :(RrÀaŸ‡8ija§‚Êᨚ*o¤á* ˆ2¸°êEc倨‰c•:g5ß,ÃÍ0˼ÑÍ7Ü 4Ϧ>áMnz¡§†ÚaÉ!Ö  0€•CU2РԬiöYµÖˆ+Ž»òè#ÁÆ5¬bÅò€$²J.Û¤³OFûd•[n˶}ÏV›·`‚;æ¸f–«&ºf¨Ëî›îÂ;'½wÞ«g¾çíËÃzíh ª(BL ÄV¬4¦WÈ)†Ÿ%5É¥†˜ƒX5Ø@ [;ëuŒ±æ6 ez¶®móÐãÀæ¶”F›¤²L6ûìgëJ9mig™­µq þe˜á’I.šæ®™n›ÏAg¼óÖY/žø–—yz›ÿé9¿óêéŒ:Ý£(&)‘,-S®{ZÈd7²¦Ô.$_Á ”Ò»®}mx²^ñnu#ä9OykkžÞ=¹+YKb–“ •=iQ‰ZÝû›–´%8/}KLâ*Ó™Òt.6­«}ízßääW¹<íé~~êÜ{ø× úÜçaàÄ"e1P*&3a]Ó>»¨5T ÖÆ²Ø wÀ{QeD6¯ƒ9ú`¯œð«´ )1%œ íf½¼µpo0¤¡÷bø‡æKúçÃÇÁé]r’P`'{s}²UƒÌP 2€ @‹QÙqf°‘! ‹ñ ê0:Ô¡@s€bÄHÅaLclàØ_5‘‰Êa¦3wZÍdbS$W´Ô½ÉÅ^2pœT ‰9Çr˜1iÞØÜ©ÉãÉ“W¾ Š…=|žPŸ*Ä ý¹½jq p-èø —ÃóñP}c_! ¿IV’~—³_&A§²4Ð! „˜žÞ0¼t´‰opC£ÂpSÏäa@ehÃc€‚946/åI,¥˜º*à–/e*/(Nš“!Ãĩ˨’ªUÝ@V0àÊÏXpÛœåÖY«ÂѪ¢*÷(Gµ¢6•ªE­6œ³f9_”;3¢q«k„ÑmO;ÒS¬v¼ç‘ÎJ½´^Jüg Á'PBvk®ˆDÜÓÇ8ÇÑ}|"%çg¹#¶_19%€@`°ÃFv›c†g eˆ%M§ÒÒVµ¹„iSY]r†¶7-¦NoV Â€Ä&¾™ †ªb£~8©Yìæ.Ý/F•gÌY‰>’Û¬¶s«ÛõªwÃ*…±>f^ ïv^½©—{…+{åzÃòÉW¡xµ¯C#Éøí·ˆE¢&p9 v:žÄè»{»a³(WD‡O–!uˆ0D;á”¢Ž€vi†UKc/Bµ¦ &fNip³‹­ÑÐ<ËqÅf£­ŠÑ:¶trBžA/¹Ãt„!,!R€ÌBBhpÚµ&SÀ"K˜ÈgQd2Õ³PóA»FA¯µââqÚÓ ~ƒ¨ImjT«šÕ3võLi÷ÚY¯ÌÖ¸I°‡mÍ›×Ô-öÉP‰ìPZ¥>uªŸ°j´Z¦O…õ‡­]ëWf[×2cQ¯©í|¿ˆšî·°ÿ­éŸ67³ÕýlwGÞ­¥v¬éí\oûE+æ7¾NU³$ÆÜdšs =méV ·bI§aäwrmÉûn‘Ã[Öñ*™üD/[_eöJ™ ï­2BíJßFÞ÷¡]ö+/)XÍ.¤r0Ãú³YÑ•T' `…mKAëräÒŽ·Ä [Ïàf9°4ŽÑ®ö‹ j?»o žÍJÅXä {ÄM.U”[WíÌ.­\.ä˜ÙÈw$–ÍéV^&ûqçõù §ôCZ9¡‹\h^Ú>¤÷U¢€õ¯Óûu©S½`óßÕ³Ná?ײ¥¸üzÞ!Þá'Z¶,!*ïÔÔ³¤½§'ž»Ðtÿº#u¹w×ðs_=vÎÀï*Ç.;µKx8™ŽàµgÍ¥Çø%÷q­Úã¹[ýös¿QÙòCWä]ë«WüBÔËí/&G?ŸÒO]³¨‡ì}V?Ú­¿þ´^§|$'v|gSŠæ21@3¾Ç{˜¶€=Õ€aw=¥€h| An—lˆnͶníönNµwö gonc1i߯qèm‡ §lç–nÎÆnÐv´gcˆV‚·v‚,È;'p(R3A¸qCØ‚›ƒ8ƒØp Èa:Xm´Vq7l½¶‚_ñ"W(pYX3¸T‚µWS6À4°5'bXxÁ#6T}Ý•<ËÃ6$^Ü·Gû¤Vý~‘÷V“Ç%â#tu¥~EÇPŽÄeŸGDX•D€ÂDôadЮÇRÊew!'€z7†Á4l1Ð5Îb,²NnØNAf}†‡}3§}H¶xxh^LJëå‡e~•wPƒ8_ŒdˆG‡ˆúL׈cVmБµzƒÑJi`†5gs ›…QÒ¢´XapJhfF ”µ2–  `ºbfŒs° PX‡•XžSPƒ± ›Eïp`fc 2gp°Œ‰bgjPÊYù¡`›u®$b€JiY-°³`ÀqXõnà`c”HK–ˆa²Sb…±†2!–S5À{H2T)ù‰@ÕmÏÄ€âv– Ç gƒ‡ƒ!yhRxm&X…¸pç‰H³iZƒHƒxƒ³×“òfleg’C)4G("Î䉟xMT™KJi“2¸p5øa…>9’U‰€Ï'|3Ó–bÓ•«Â•.v|˜†<‰–S©’Ö*×EŠ+wŠq(G‡Gs­x‡håxàçB}H~h‹†„‹‰¤‹š§eç‹¥ˆ¡7Õ/œTžJÝ8Jà(`a J9ÑJ¯a¹R¦å‘š˜ƒiIv%‰€O‘3¦o8#6ºIM"ò"¿ö‚5É”L˜“f™—56›$8…A¹q:ãkEl œ÷ax•zÙ|x5Uµ1s£xÓ7x]…Š„©Šˆg‡&tsyØdéÕV1T~5dPt5™XÆ~œ·Wï§t`ƈbæ8fÙg³äšU„2`)JbÙ”M¨“O˜œ{y{"½)+w4ªvá•Ô\Ø ¡ÚI¡qT€Ùrå9˜óT˜¬¨xˆÙxß·‡Œ9‹ŽY‹³q~’ye™—eíçy¿¸taö_óJ¯ä­iau·M× ’ÙY€ i8`FÒ´r‚7#' sçYOu¸}ëÙ}8ç…£€Ôs´è^‘YŸ8º~F·eB”™_¶ˆ¢‡?OÑ5Jô9ýRfg†ñH/0u›U’Å•µfËÈ‘grFgv†gzÆg(U F {©u– Z€šS6ƒ›&wbia¡©aQiBs©”fGœdù”;ù¡ÌG©8«D)(¢Ǭ†I8œKxªN(©«j¬²Æœ=(”Tõ¬(¸©½º:2†œÙzcÃÖh%ú†UêA)Šž†É¢[úŠŠ ¦O6~×ò˜5z‹fŠyhÊ‹jš_l Œ?J 2 &U¤\'L z‘ ZœÂšªÄz®ˆF’È» ª«²«7°•²Ò±¡*+8P ›aù ûZ‹{NѬ+"²sù±u™‰([rÆê‰“&¥ãI¥fcžïŠ¥#¤¥ùä¢9çdðeúÊ-e_þZˆ›wˆk >êŸ@jJyà’càiÐ&Q û¥Z­ÁŠª7K€ÚЬ§{3°¬2Á©oë•É5kl0uS  a·S·RpbPËÄ*2°Y"Ðn`Ëy··¦¸œ±*.‚¸B3 Û· ¸a"Í„« Á"ÀŒ Vg—«¹Çjœ¹1_ó|»ˆkºª¡ºÛê¸~ë¹_¡4+iˆ;yf y»›û¸®ë"†[«p’g™›¼»¸¥‚«!o‹¸õ!n`w{ ólg¸Ë·ÊË»gg¸Yñ3QAº:‚uöy ¾ä+½K½%64Xu2€¸p€žtäå˺çK½0P¸“·…¸hxv ü!J¬»÷‹4ð*3 W¸sš šl¿®»À;¸‡¸!¬ eÊVÁ­ë¹?³*5¬’7à¿ÜÂ/ü½2|À‚kÃQ*,‰?<½_sFÄVÄ÷¡ /AG|Á7¼ÀXƒ¸S—/žäÂ0|Sìº7<"b³’ˆû¾ñ‹Æ8«kÁ`Œ"*ù5êÁhY_LÌ慻9€¸w€Bu,¹wÜ56ÌÃ[zQšû AVP² yË ðÈ{ÉÁ¼-PiO‘º#Ë[CS«,Pʦ|ʨlÊü »Ã¾fÉI’mg±É7ÐÉ8ðÉœÁªœÊœʫìÆì›†± É´œÉ¢ŒËºÌËm,ĻӾÃ\Í LÃÆ?“Ì—¼Ì¶Ìμ!Ќ͔KÄÖ\ÍT<¸+‚UœÜ<˵,6àÌÉâ¼;« »,@ìÜ5!qÎÂLÅo‹Ã³›Ã"˘üÍ#R4+Æ×¸XÁ[YýìϨ|ÁÌ[Ãï|ÐÌ›ÐEc%ÒÐ:Ñ"=Ñ­Ê®ë˽k\-íÍ]iÍÐüÐ4-¼%]ÑѼJÄ­Ìñ,ʽÐ=Ó" Ñ$}Óé\αÖÒ?=ª1=Ô®[ÓF}Ó§|Ͼ»Ï !œÓè"ž•ii€üA2¡ºX%\ PÑÖnýÖp×r=×t]×HqEÐÖk 5 "#ÛÖχnØXÓÖäÊnÝ5ˆmØœQØPa‹ýØHáØ ìÊ…½×•­Ø† šØP1žÙœ yÝÖJ¼"oׂm×nÙ¬ýÚu­º^a=ÖeÝgǤëÚ°ÝÛ¾ýÛzÍÖÀ=ÜÄ]×¼]ÜÈÜÇܱ³ ÖbMÖ †Û…‹Ö»­FÝÚ½ÝÜÝÝÞýÝàÞâÝÝk=Þæ}ÞèÞÙ]ÞêÝÞî­ÞìýÞí-Û_]ÛÒmÖÕ­ÛjÝ7`ýýßò­Ýà.àþ}à7ßò=à^àÙÍàýíÝ >ÞîàŽà ~Þnà îàôMÛÑ}Û’ÛaqÝNàÝ]áà­â)~âá á~áþÝ,ÎÝ5Þâ3ÎÝk}ã6îâÞÍãÛ ä.Þß1.ãþã>îÝݶ=Ý#žß%¾ß =åàT®Ð~åESäé­åU¾àZþÝ\þãa^à^žÞE~æ¾äö-â(@âi½ÖA0çt>çËtçw^çun5|~1 çtŽçxèsîç}^„k-èyNè‡îç‰ÎèË”è†nè‘.érîè•n5—Îè”þèˆî蒞苾é.êžNè¦^lâNþæPç éŒVë5@‰në¶Në·Þë¸NèºÞ뤮¾îë¹^ìŒÆëº~ìÁ®ì¾žé€ìÉîèÒÎìÅîìµ>ìÒꀎì·ní¶ÞêMŽßÄåЮ竞ë4°îìþëÝnêêÞîë>ìéìò>ïšþèñ.éç^ç÷Žïï®ïö~ïý~èÚð‘ï/ïâ~ßÔ]î²>ÚOQñœqñ•Ù™]ñ/Ø#ûñP5"oÙˆ=òò_ñkñ¯ñŸò£ ò _ò%?ò&/ó‚ óŸèò0°×,ŸÀ:ò3oó$OôBŸó¿ó?Ïó2°ÖAóMôëNó… õïæp~ÝC0[ßõ\ÿõ^öbïõ]Oöc/ögoöeök­ö3öiïön÷j/÷l¯t?övoöyOö{öj¿Öqß÷_Oø]õ¯žõû=7ÀøŽ8»’ùI?Úr­ó‘Ÿù’ÿøï#žo>ÂùŸà  ùš_ù¥ט?ù›?úú°ú®?ú¦/ù{ô—Ÿôµù¢ÏøŸÿù½ù¬Où:¿Ü¦­ûÃÏõ³ïû±ûˆOîÖ½ß??¹ÕNèßÍôTØPôÓßóÄ^ý€~ýÝ/õG¯"•ßýÞNÿNçâÏóä¿ýçÏóé?ìíÿóï/ôAÿüý˜míÿPæ–ÿG`€0"À(àôìÍGd7 ú"\¸-q-» í¶ ô€0Àþ'` ü€&À ¨Ý(àœ€¤O®i@hT` 4úïÉI¼ë¶’z` x^#)Á!Hqô>0)Á%Èìk Á)(à´M0 :Á+פ‚Vð jA-x»FÀ£‚^p †A$8³`„u;p¿µÁ9Hë ¤ƒNïêÁ=È™`샀0¶Á?(ïàT|;nÈ)B'×*œ#\„È)€GÈã%Œ„˜ð&ÂJ×.¡'Ì„ P6ÂP a¬3q9À¤ÂU¨ [á*d…°Ð¶BY aa-¤…³°–·Zx o!.ì…½þÂ_¸Ö‚a,†¼ÊBeh qa1†ÆÐFCVh ãàŽ+sÝhÃm¨ i6änÜzÃ+WäÂá6‡Tî»™ÃnH殜˜ ëN9uÛa:ôn뤹o¸Ýòáw«†üØI:zh¿›¤«1DL‡Ýða=ìn1!ŠCï%<,ˆq :DŒ5b6\‡E®"~DŽÈÝ¢~[t‘»•ÈWâBdtßMÈÄ™(_¢ +r-±%ÚD<iâL܉wîæD–—IOô‰B ("Dï6WbHL‰Û )ÖD%çÜꛫƒ~'qÖ©º,¸ïڥ㊠Ï+:B¸»"»ûŠMÐ, ºûˆ‹ ~Ôsm?ÒÇîfïã€änR>¦AÿèÝä|œ‚ç±¼Á€H!'¤…¬ÒB^È ™!;$‡¼ÒCJȹ!?$‰<‘ ÒDªÈ 9"K$Š|‘FÊH ¹×f¤ŒôrÖÁ€ÊÈ# £<ˆ;2HöHò'õbì‘QÐG= y$ƒ$‘¤zFRH:Éì—$—¤¤“’CRI–¼(Ù$Ÿ$ÑC‰ŒKNI/éÊbŽœkPO®QA4yô^£m|k{-MƵ5©&Ûäm|“o ê]G:9'íä[CpMNµIÙ$Îs“z.GB¾EyŒ £ô^ct–βÂaËh¹Öòaµœ–î[2Ëk).µ¥¸Ì‡kM\&Åp¹-…¹Ü–ær[zËvYÞØå·|—Õ²ÂåHîçþ²Ÿœä—öÏ_â¿Ê·òú%Ñû—ñ/`Ì óº_•¤y³aLˆÉ0;Þø£’¥¯MLwÿd޾̎HP NAñ¨ÏàÈl‹  :Þ;*H2C¦É,‚-Ó6Ç•y2»cɤ™0dúÀ.Xúj&uìŽ æH‘È݈æv3šÚ if·ƒøabFtšjM¨¨ÝÀ¤ SŠXói^M­‰çšæÖŒš_³$VE7îö_Vôrùm®CµiÙf8ôrÝrmj¹´97åæ•£›w$NºÙ6ùæÛô›ÜÐmN-7ûfÞ4œT.͘§JÓDÇé8#'ÓÄn”óqZNI—9“âæ„‰ÓjòD®yç:§ä¤šK“q>ÎÕ 9¢R4‘3GJ·6¥Þìlk¹.1®FD©m§lätŽüÝN¨@=£ožoQwâIܹ}çò„ ¹“èåH*X©ç´žO{"A4˜2¯ç¬žßÓ{Að9>¯ ¡‚䓦Oô)>Õgû‚+ï} Áõ9?¯ ìüwòxæO݈<+cÿ¼ŽÃsGâÏ?9@ig n4Pè¹@(   4€žIÐFAaÀz´ ´°A;¨Š1„ŠÐ¬ABŸÏÛ+¡$T„†ÐÊA[hÍ ´íÁP êB[è U¡B…šPŠBq( õ /´‚RP!ŠA»e Ý 7ô†êЬÁCy¨¡G”ƒÎP JDi(•áñ‰.ÑÚDaÀUbW”|Ì&øöÊhUsÝM šQ3ŠF¹›|kôíµÑí¦FãèÛâ‡Ú­ŽÆÑkè½›]£s4fA;zGÉaCL£ƒÔŽÒì–#Ë#}¤´ å€IJI+©%Í‘4“:ÒKÊI)©&]kš´“vRMJEé%%¥™´šRKŠJ#é*e¥­ô‘vRUzJcé&}¥”ôLn?}ÆK)T˜¿4˜Â®òwôzi/¦È4˜S=©/M¦È4M¦IgªÏ ©2•¦øš¦Kk:L±)È£¦_A˜^Óeêñ(”9å¥â™zArúMÏ©9å¦yÍêM&ñt`@ürÙĵ“)g3Šýp™¼µ;÷åîœcs4Õe‚Ûš ‹p‚k Ô ¸P݉atªâ JºŠŠçôÙ“ý-L^ÔÑÉQoT˜¨UϹµÑ™O— es4ø´,:¸–Pµ𧜠Ÿf7¹6=^ äz—rGÂŒÊhRs€4A¸Î‚f²ËPÄY¿k‚œÐõ¸"TD l|rdýTÐùÖéV…;X# ÕS*ûb4J•©®˜¦ U7Xä{>TÕXU¸ÃUµjÖmAu«î5“*Ve@eLªfµ¯‘´Ú5ÔªÕÈC ªNUÐ&WcÀU­«òíAÖèWOLXÅ¢gµ¬FÕ¦ªTÛê¬T5¼UºšUkŽün_0µAÔªZ[ë;l­®Õ»ÁVÕÊZ‹àù¤­²u¶~ÁÚ [okRà­º•îKÔG\aÞw zȵ¸*×§àô–ëh;®Î5¹JWçÚ\«®ØuºjWï]·«w…Óó´ù5 Õ5Ê«41¯æU¼ª×ñê×Ы4Ywîu‚¬×ùª"¢`|¯úŒ½ÒW%†_ß+zÕ¯ö´ùWÿºòlר¯¶¿Æ×` ìyu°NÁ®Wk`ìâdtR±uJÍ£É9¥â缉 Ã~X<'bQçéİRQtEÒ¹LJì†Mš)^Î×éaMì…t.VÐ5Å"09k,£Û±—3Çâ9 c}âA$²()ªØe‚dq¬Õ±M±ÇÊX†ØdI쓲MñÆZÙ)ûcƒ@ð²`VÊÙQ÷eˬ— ²WöΙY3+fi¢‘\³g¶ÈÒÄ%[àì—m³3ñÍ‚Ù2‹geâå´³A ÏjXA·g÷lŽ,ƒjr Ê5D;'m\cŽÂ-P:Z¸Æh%m\´W<òÉ·Vióä¤å´™¶ÑÚÖH jŸ`¢½´qíІZK[(íªõ´¨–ÒšORëÖ6mb{µµöÓÞZS×|ë_“µ¼–ÕALla-¼Ž6×ÆÚ·v&»Ÿ¨mµ”–çZhmYÞžÔµ›mé=Ûa»h¥í ì™ËÖ³i[a+çš³%·IÙz[tûk™í‘Ûµ2VRØÿŠ*M¤Óc»kïºÝ¸;,!ßÜõ¯}÷*˜È·ûvWá…»(7ðþÝòxÇ.†<¼mWï¶È )w¬ƒ ¨2ãf?-Hµ ùã¼RÏóbLÐKõD/Ñ#½6ÏôÒ¼7ÊÖBoü¼Y°ó¾ÞÍ{¥YT‚°· ÊÞ&(;Ť¿7ø_`ˆ¯ñ¾È÷ø_Á|OŒ˜$ªÎ·ù6ÉÊXÞ€¯õ ¾Ê·ø"ßë›}ÑjóEÓ7úŠßð»}oyë¾åwøjßå+~Á¯˜ü¾Î—ü^_î»~‹oõ-¿Ýþºß&©Á뻽Šfó/z¯¼°W)ÀA7è Óã:€eÀᤙ<` ›L¿ÛvI+Fð` |îö£ x‡`Lƒ©ÞÀ+æàòæ‘)fe"“àì‚O0æÀ*˜'àL›Þ!u£#á<ÀÛýLtH8 +á%Ì„ïb~ÂP8 'aÊ(…«°vÂWX +J/Ç…»°þÂ`nîÍ0L†Ë°Ãg8 «a2ÌG×p>´0#O)8Aê0Ì@}rXÁ<,_ÏÆ¢t˜ãa;\‡÷0!6 óóÌ?ÜÎtß!6ƒ÷î#b‹©ˆÏà#¾}Ž˜â<œÿþoÙ´§YÑH¢›Q-‰-Ũ݈âT\Š''+VÅ ñ·bÎ)‹W1)6Å¥³º[\Šé,/†Åžî»b^l‹SqÕÅÁøcV¬eÕl¡½³£ÕZ;k$¥q×T€¶w;2ûŒµ±ž;²ÏXÑ ÄT·=5ŽÆåXdžãËÙé¦q7FljÒ×S8Ûñ ³Æ.ßc}œä8&´øxÒdn÷áñž‹ÅÙ÷ãƒLŽ rC®stV! d~¼Lt©Ÿ¬µ9Ofd»‘Û3­“‡$Ÿ¼>’IòHþ¶‚Ò$ϼ@Ù‘9rIÆÈ8ï:S•¼ÚR­<ÆzòV&oÛr‹Ül­q£µÛþ6ŸüÛ|mr#ʾ{e¡ìYÀsƒ·Xñ/&å– ÛR2k“ÉV¸eeà6q_²V¦Ê½í#÷ä–ÜS½)9½~fÙ›¢Ö£·NÓò„ônì”®e·Ü–OZŽËÒt.ãe¶üƒ·Û^ÎËTÑ)[ÅOL³b‰H¬‡9èSi²˜e@€u2ß:™“beÌn—Y¡ÂÍÜߤêï|EÀœ†f}–X+ciö~0CŸ¦f¾VÌI5'I±DÄæõ`k“¹Ù fäæP„OLoEX«qõ­ÖÕ/°L‡XÖ¹:mµ±þÕÍOjKbõ±ÖË:svK_«“µ‘p½ÚY[ë`á²µ¯N—ÖšW3kj¬ß¾rÖ[6E/—®¡åº&œ!V*ªë¡È®åµ»¦×Z.ÃÎp¸cë5Rœ×9Ñ_ûDtÉ©ñ5º¶×æ0T•p‘®";ðkÔ($Àî®a ‚b[l£°lÚÄ®ØûìÌ€Œ ²B‰Ùc"Ac_ìÛâ±Uv‹èk$Ûb_³BªÐ5;f$ –²AvÌÈ`(ûc[ìïDÆz¶Å® ë¡V í7'3&ȇ©nÀ°Œ@O’@(b à.–ÈÀ@Ìh4$Ér±w‹QØf"k{í°Ð Y hí¡¶¿ÀÐZpà Ôš··ç¶HÈ AÌ/YÞ¶x¸+_ „/à§&ËM1܈ûA4n@µ2¾€â¦pI*(Å M3æ€ÁH *\`KBÐ>ü÷¯D(SZ!óFL™3\ÀQ£"”(A% 6et€xA§ œ0dÔ¨ãŒ4dƼ±©²Ä9eÂÐy#Gf’9l¸!CDN˜; Ì0ÁæM¢G“ÒIóÆ ¥1ALQª¶ 1FÂÈ¡ 3d€F¢Pœ)3GfŒ¢B¼NMãæLb<2}îµQ•oà¸Q”È›1uÚ”qCÇI™2dPK!ìUÎÂ2Q š¢óçУéL©›4ªY×q „l:£ÉÔ^Ydê¡¢IÏQ0'Œ23É|™cçKG5 ÊàƒDj3 Ô™SF™4cèÌ|ujÕ«DàËŸÑ×¼~ó¼àÑŒGt¤÷‚ç%°‡Œ‘a^fô!`„¢÷BŠGž… R¨À Fá jEˆçØ„‰{´Æ–E‹"¾ ÅÊñhá¨áC88ÇaÀ$äˆSÀÈ*Þ(`‹/Lq„‘eÐq†Uy,ùR8H‡Un@ä”9Їƒl€ÇVrœ!†—jŠq›nbõä–at‰¦†c8š×-åålÚ{p(…†—(vøŠl°áåXjÉå¥r8¸%aK!uéžVw—‰îñ›Y¾ª™®Z†o0†ê{<)ë@ÑñèŸ#¶á`oê*°/¸á «w4ê«—nàáà x”¡—î!±Æb›ª²ŠlœbdJ®P]Éá%©¹¢ñÆë’‘)aÌñkˆαæÕŽ´m±­®Ëî H‘G­¤øÆ[E€Ðƺt9æ4.¹’J!'‡ ÌAGfh(FIÁa^&p1iàQsØÆthÌñ@•1"APa„EDBH#5¸rÆíq̲Ë0Ë,‡ÃmŒH_È(ß<û ´ÐrõÏAƒ WJM5wŽ>­US $à,bˆñ#º1Fô SÏÔ{ñÍÄ<Á¹‘/ß`òµh¾{ÿ ÈXøÍ?テ $@F€/Ø^÷¾Ç•7„ABeˆCÿöp°·t-péÃÅç> & fx{°¤äŒ( ÙÁŪž0t¬ZsÈ|$:T‹yè_ïpÇ>Ò̰Z8€Ë ßP)€ ;RËúDZ‚ 23ØaA8†Žeé†D•µ¾„I9aÇTÈB¸Ð‹1ô¡€ø!ÊpxÕªaMЂBÐG•"¢ØæA$*‘ `âÍžˆÆ(âkD/sµ˜Â¶ð…1LÀ A ÆEÚ@‡pÄãƒH$9q$3°ÁH˜èÄ5މ†lð#•Ò £Á|Á*k G¨§òÌABdÀ ʃ‡˜åa: ø!‘fòJk‡—åi…x‰a¢'/ ¥`Ê uLOjCðxƒ<’AB9J0ç±Û5¦l ˜C+;&¡-ˆsŽ#±:ÉVE5R ;ÊL3Ͱ¤ÌR<ÝdÌ ÆSg^ú§Œæ°†SÖKcüËåwùu“˜¾2ÿ9Ïg‚ šÄ&´ÉÍO~³E᧒Ę+]SçØèÎ4Àd£¥d¦3‘rÀÃÕÒ£ûl ?c:Ð5ˆ2GïñU{¾€.¦4•OR«ø6ïñТêìe,ÍCK[âR—CॄÚÐ`f¢Æì_/s˜ÀR‘ÐHXÅë’_Ü%1{{Æ}~ͯÆÀ‚Óš”>>oÃî°& ð^åüÚ÷IGBJÀ÷`¡'I*sÈ ÄzKä´}òih–ÆÐ†<¬áÁ Xóîà† ¿`¤éƒ Üãî÷¹¯¾»à ûØAúFÔtLìNNßvM«ø›áõòÙ½€øÙç>ø2†¯ŸÄyÏ?ø¹Ö;ߥÿ÷×Ó8öYš«?ñ»A/‘a‘‹¤ÒÔz{½-ü Ã4=é;ó<¾L׋šÿ´ÝZ¿e»4žCä â½@¥" oá1¾¥.2Hè¦n2±%\m2"B`'X'z‚\B‚€éf/ ø4oÂj0"0r1C.á1).…G[rC)l° ({ ‚4W%È‚¨‚oÂ.øP€13mÒ€„o7cÈ!3eð¿ñβ=7ˆ,Bàƒ2H‚AØÝD1ná(ŒÔ„4…)ˆ,xðK{ \ׂ,ˆ’TƒR ]jµ8 0†"¢Vw !tˆj%ž“‡  VlЇ-¢T̲=hXJˆâ9ÜÒ*‡ˆˆ#!‡àÂŽˆˆJu‡s4‰¬²hX‘(¬²OšX‰]øŒÂ…iâ¦!ô‘v^$òpôûdí3n‡±ˆQâPP‹g0"½'©±2R)_€yp!sÿA%«1ÈXS°Œx]Çøue ŒIÂÍX?Àx?ÉRwÐ_©1_v_àa JX\¹Ã,_%íøŽØa†T"õÒö莢A\ʳýX6ŽéÃìa¤q‰"S%óhŽ©þxÎ(#xátÎØ"Ét€ò]ú@FP2Ë£3Uô?o±!âóuú TE'ùyNB\ÂH £BÌ"‘·vG‚ f“ò”624”kE)TxݧUô^ï•ܧ_×ó  ” C"6âø¸’çøcy\]iŽèHë8IyÔòÆbôXêÈŽ —9étzÁQTI– “È8“š5”‘ô”6_õEf^?B‰ÉbÉa‰%°É8ØH’QD%²˜¨ñZp@O[ 802 Iôa€9€šª)·åš9 |©¹š•a›3 ›«ùH¶I¾)Õd›‡‘›ü1a2à›3A®Éœzáš80ª9­|aÎY›¯éȹ›¯ÉÈ œ¯‰ÎYœË‰´9¶édã™x€J§S$SBå¤5¾Â¥—œ&  ðœÙ±M9£1 9ôA@g®~&úŸúíAi01@ AÀ'×á  *¡‘e¢ÕcÁ©a¢­9¯ñ•&Z›E` ¢3!º›E@¡ Ñ >! œEÀ¡H3 :ÅY$Ê£3¡I £¢ŸõI¤ DJð™Hê¡ JЙOê 4PNТ/j[­ùTÊ£4P›O ¥BÊ¥hº›O¦JЦÀùgj[Åùl*§:Hâ#¥g[WZqê 5ŸU`§C ©ÐY|ú¡ZU¨5КY© Zµ©‰ZJž5€ž”Ч¬Êž¢ ©*VQ¢¬z¥ ¤OªIÊY¨½ —÷.‹jÕù¤Ñ«­‰T«RŒ1`µyp:¨­»™£Ñ«ÀIiÞÔ«ÅÉñAÇ¡541­Wuð#Ú0á ’ñìê®d°o0a ÒÐyup‚³ó#ùº¯å7þêR8¯+¯­y°0£Olp;°#¯Óšòº›~&¯ÀéëÑŒ±òZœÉQ/¡ÓJ/g0“×Wв*{¯¡8Ÿôu;_§¬ƒŠÐIw`мÑd±²8Pb|²7;ÛšÍT)Y²³µY¯È‘°gÀ¹³»)µ¨±oW+³À©µ0+±‹³³Åé°0A,Ÿ4±2¡/Ó„}*³WZ³ºiç ·  h xaW³Ck·ÐÉ® B®Azv[Òd· {«<šày ‹»›¯Š¡1À ¬“[œ22Šj·Šne€«ž•?b 8ëŸýÑ8À‘¤šÊÐY„´6;y|Q)Ê­9£'h£|Q›®Ë® ¤1¦»›hPB¡bºÀi‹®ëS|Qœ§Zz|Á¶—G²¦{¥c€»5êŸq1By ¶ "µ5Iá¸Ü[s–z§J¾­‰©+¦Ü[›À¨¸Ü»›ið¨ä œðÁ¾AZ©ä[œÚÔ¡}J¾š8øK¾WÚ‚$l`uþÉ3á±n²« ¤áR/ºšÕi@軚­ù¼¥ïK›3!“¼º:1A°k¿™Â¬‚I‚«Yœç“AL‰¡¶¸Àú#¬3¬ Ÿlø¡9Kþy¢GB¨ÊšÕÉfb/Kü¦S:¬I§0Œ)첲ĕk©!#rà¼L:uÀ¿QªÆ‘ >¬y¥u0«ï©ÆgJ›ÐDœ¦3‘t|3¡ÑëŸsêÂüK»É/A8CÈ•›·§á»ü—‹„ܤxC› 3QAÅ´y¥¦¸ÉX©)LÄò¾¢ÇÈ ƒjä>¿–»Âp ðâŠD9Ù(µÖ“ç/Ù%5 èܧ!Ñ$cg^Cf07_qÑ"1t—Æä^§Äacg†Æ7å¨U4Û”‰¸Û!ÏM%ÑbÒ)gÝžæ"‚ZË>Ì1Ãè_Å(‚ÖAÄ.€3@”áf2ÐçèMüR#ÑÄ™.p[ïg&*f´ÓHlD—³ç“~^6T铵dD7›ñH™äÏ9d#⣱Üèp1§bŽ91 }Që¸Ó‡Ž]54Áå{áç´µ^å7×ßè¡-€¾:ž“N1ƒ‰A1¨ÜL8‹ÑÚÙ>Î^­a.Áþí+$'  (€.dÀuBm0ÎÓ!;dÆGŸ>7ƒélAéó_žÎÛT[6àšäF‘Úç“›êe<­~[¶å¥ˆ6ëµnëÛ…ë¬ësÄëX¡D3`Nì2–àÞ^ñ>öìѾÓ^í°ƒíš„ò0Àíè!î.ì$hîwÀîêî.tàîÔaïòmóÞ•—~™þäì‡;ïµïF„8à7P“K[­jð«>¾5àê ëpAëë’ë¼mñ¾ŽñÁ¾ñÌÞñÆž ÁðÌòÆ1ò%oítµÎ+ï[-îvß1Hýˆóg¿ë{¡ s òFòRAín÷}!÷,ïíwîxOîæ>"ìý!öV~ÛÇøÎ¾ö…ßö'Ÿí*ßø/ßâž÷6Ÿù:ßIPTü³süBlŽùi<f]«º-Ò³ÐPýXÝõSxÙ¼8¼‡7öðˆ÷CtOü}=ò§ñ†]´meã㥽õíÚßá3y×þm;ºçøèßãwcGæ±;ügüvçk>OóÉ|×~–¿ƒ Ï)µ@(8ý`”zØáIÀí×"ÞÖ›x]OްWþ<àù ê¯c>iwŸ Ô$òïÖ?Éwîxˆrè9¯ê¿>Âÿ‚°átoÁè5?†Wê(ƒ 8‚ ïÕ)Á17³ž@Pp×IÁ_—ñ„•û€¯ØÛòH Ûë‚'Oî)¾0è+¡¿ ƒ";  A‰ÎàthKÏ÷å8ÖAûã‚nñE¸×(!ä{…0°Ü¡z$nLˆÃ0ÐÀþg“ŸÏkayôE04^WPÄ0M¾PÒ”aëC-Nvˆ@tB[n€(~ŸÂc0â÷óxaŒÛtùΑ»UŸžOŠzy°êi? ø/ øsƒ vÀCx‹G  wkjÁShøR! |{’ñ±Àù ó^jЬ ø=Õ’CÒ)܇%ªÂk[á@ƒ0 ÂúÒw¢ÿÙ…ñÎrŒ¥W …¡ƒò %±õÅ…Êà !Il‰¡æ>±û6Kï›#ØPømØÿx Ñ €?ðnÝðb|€zÐêõAîgŸà÷‹‚½n r@Cæê¡ˆ@v6`(6Bˆøýa⫈s¯ÛÄÍùb ` .aý†’BÙüÞf¸-QðmÁ~8"+ ‹uÏ’ÅKhU]7 Òc‹¤’v‡ïaN|Äs:·2ÝE¼‹®p/JƼÇPÀ¡Ó'\ €ÄÍ'/JH ‰’!jÄ…×Â$Ãé#•á:¹ÄϘŸ!5µÜÄßü@ÅNlƒþï †C 8GB«xæPÕY¿©÷ ¬c‚íÐ)bÀð aس‚Åý™½Pg~rœ#4^q.>‹(1bY”…¼b‡…a­Ê„ß»2 ä=DSéâ?T|“ð"êÅ1haÑR€ dâ5ÌÍØ ÷ßE© 5ÀŠF” —áI¬ ÈÊ@’Äé£áž›†¼ÏâÄÚ¨ ‘OTƒ>QùñÆæè²]£ƒwðÇ$¨‘£Ö„OQ6GyH9Þi+{È..t/}È»b]„±;ÎÇŒhëÊíàr/%5T«m¢ÈÕyDaq±6FHø·#^l°>ÊÂʘ†rC=\#3òÇ5Øó8" }¢5•¾Ö§£ík}_ÒLH™y›l”´1?ŸG$jJzž‚t–FW°Tßü,{’ôÉÛ!A€ “#¡…¾DÉè¥^x26VÃkH!ç$Ǹ[2L"='-C£”Ö}|È'%¡¬‰‡òRŽ„–¸(=e©<†3±P¾IJ)'o#\•g*;NY°`j™ ÇpWæ€^ùïð!‰‰¡Uú<†Ç*³Ì•¡DXöJhé uŸ›œ”²VZHUyQÂߦì”6àß KS*ûÂg —¼ÒTBCeÉ-$<¼[èr\ÂÊ6¹û°eœÔ‰Û²ºÁÜã Ô!¢LFÇ) qLŠëžÈŽ3àŠœŠæ/:†@€à¢uäŠØñF‚ÅÈ8ó^ÍŠ?~/MUGϱ—dvl’ñQGFI) mžG¼yhPrÉÎÇ1¸Ø°4‰îf¶¾ ¨%‹ Ô’MFÊk9A@N´ùRffH}÷/!Èݘvð(Lu¸ÙáÂäz*rüˆIö¤#²‹R³ÙaL‰ø7¦|\™ßÑÜ}L¦@?á§…$S.òCÇh$Ç|yoæm‹—¹%yÍü0WÈÊ 3áJvÔ’$Í5 )­e½,šG³BrC¥‰üú¥Iiš@°κ¨)" &‰L˜~°û)Çwèõ¤âÖ„Ž]sb‚Í­X#3fÙ„ŒgS2JIµÙ@fat#1ŽM÷øa§Ê”,ÓÜ¡;¾3óŸßÄ£¶NÁ™§§´-L¯g>OV…8gµ¤‰DNÍJi+ïVáŒß²@¢è(a¹–ŒëU"ËB™*oe “Þ“|ÊX))!'÷Ì—¢ì{:K<)>Ógù %VUU&1D¡L/+bÕ<4=jO• _•ctHb5@©líw”¢†ti.C߬S´PuŽP×,Ÿ¦~Ý™LïÒÃAûh;*€5¨^U¤ÚWêIgáaS ]…ô¡Æ,‡Ší­ª´#aÒžWõJj5íª-}v·~ÔÒê[aèÓÔ” U¢¦Kˆ*@ª¼¤­õ•[2ϧÙiM%W嵡ö·Øk9¹¨Á”2–­Ç *:%,錇uîX{XÄXg”íS–˜Y2ØGaæ»3žV4¨Î,]l{ß«=ŸŸÅÞBZú*i}^‡Ô³a²C–¬ªñnë{šÖðÕ>ÛÞmah‹U“U•Ô\óYp·*e¸÷RÔN[±J\¯­Æ»NÙ6¶Una¥ë·­®GTÇ‚@{X´|,‡£(óÖYGJò@‚ƒ”øñ`bÿ&1dR&Qµˆ„!XêŒå1ºEuhÀW`‰lûíHD"55é%] Ûú®M°_u=´gôFÀ÷ª3:-Õ¢@¬B‘™<+Á3©Ü`PCp |ÃA?ª´„!fÝžmX»¤a7ô†4KVÜ%…¡ÜU&íÀ¼ƒ_U4&T€A€¨€ÉK€8§TÞÊ+€<›×ò:€ yÀ<€Ê+y[ïä5½÷ôž^doì…½´×öæ^Ü[{y¯îí½³—è^< {q@ñÕ½0àôÖ`EÀaìƒð?Ë×0ƒ°}€ô5àú._€¶¯ˆ¾\ßÂ/ö ï}€A€¸ßåÛÆÀ=áxßð>A>¸p`ÿÂß``î Þ7HÀX$p¿ö8€0~Á?``·ƒNð ÞA¾¾ØûöË ÀØà°‚ <ƒW0x€ð pF€ù‚_ ø÷½Á@dà0` æ/ØÁ Oá æÁ?€b €~€*Øû„á÷ Æ2` ¨á'Àú@Ч@Gáå æÀ-øA@xßà îÀ/øß ¿_€Я÷Â’8ûr€}1ñξ€ûvâ'àÁ$v¾ÿú^â0ðA¼wù¾âXŒzañì…²ßbY…oñïýŸWøâ^<‚õ½8àDàð 2ÎÀ`” 0{a€2`|àé øÁ æÆþ ' €äØdà€ÀúEæõàƒÕ1ø€àÐ^ @¼°A€/l#@ øÏ@ìN0QÀ?FÅ}d@ À°$€|àü0HŒ@ ¬æ;…=pßà0äÀ n€&à (d‰,Žp ``þt<ƒk2ê=ààúîätì“ÀèÔ—'“dƒ@œp(A™ùBàrÜ“² €W”cp} 0øÂ {l.øê ðr°‚½òÀÜ@ð²< ®Ø] °e©ÜÂ@ ¸H€,?‚° ÞÁ7èÄ -ƒ€ ºÁ7`ö8ý’ãxœz7@=.Êñx(WeÉl2³R¶ÇÜØpœ…²5¾½¦YïÞÔŒš Âi^Í®Y5÷^Ö › €¾`@‚Ó+”À= ¾ð€7ß œOoåÍÍ»Ù÷cÝ+Œ‘ññŽÆW fꎥ3i–Κy)¯ãy|™¥³WóWhgæ[ ÎÁhÞ˜ƒ œ @3Èæ@¬‚°ž½ó18÷€<ƒ{` Øó=ó—çìlÛó<ÞÉUÙ@…dzç`ü'Ðú³}Î@”ƒY`¡Ûó1øàôƒw`ü36ÑŸEeëL3°/VÎ/:Fß^½{ƒ/s~ÎÎ:Ÿ^Õ<ôõʘGûèô¤ ‚ÐHÕ|¤“t‘FW˜þ€@¤—4€ÒO9`•´2†ÒàDƒ`A•þÒ T<À2@8ÓÌW €oðæ Ó^ÚH#i8my÷tžîÓNÚJCiÔ ±@ÎÓPú <‚tp|ÀÀˆZÌ‚/À¤àT R»Š° äÀ; š{ßî Tñ`Ò~úI_aû ¢t¤¶¼€Ø_8=¨ø¹ P£iË»ªAÐÕWú €sð~5­^Õak@ͧ›t³NÕVÚûi%M£ïŒ¾Ö5[[ëÝKŽ< ¾àÀ “co¹ÈâÚ kszAXÁN‚= Ê5û¥ðõ"€{€¤À˜ð€À òu@Þý:èh °O7È×Wú\×ëû›®#6»F×ÝØ ø€sÍÎ5>¨ØÛ tlƒ*68×8à\Ó²U6Ë6)Û €'L}qðô¥¾ÓW¬ßÐL}köÌŽÀÿØ €ót0èÙ2Û cã my‰¶ÑFÚ _iƒ0«§²VVÂàú€/ Žö=QûñRí|9qÖö¾ ÚkS_ ‚ßÁ?X¿ÿ8Ði'L´½¯†¾j{‡`, *¡Fб`8޺Ā ]i³mpþ,&ÛÏਬz?Á? ‰ûk € ®o¨Úìøú€º=|pÞÆÂJ»j m§Í}‘v`/mÍ\ê6B9o'€ Aú­Ú×÷€€`»#@šÎÜk;·ƒgð ò?ÖŸ`äxP·À5ø_äíÅ- >Uû(ƒSÀ @AÝ®9À¤ä­·/è¹j7p ~õ&ÔG{ôí´Q7ÐÖÌCõ>í¯í¿g7OàE»uðŸmÀW·Wà5;S„鬳8õå\]Kìs *öº¦½܃opб-6'áãz„cì~±;x GýzD@°§]ø¸Žáø¸†Wlo ®0çׄ^ €‡ÑÚºò¢Þj­Ä€ÆMÀ3H?àtîûÆ@Ê@4ƒP<@%X<€$íÇQ¯-н `OðÎ5xãX8Œcò2~É9ê|0ðü³Í8Õfä°[ wáBý…í¯"îä¨"ƒI0 x@xéà€1}Q9HÉ€ÈX ~X»¼ƒ˜¬ŸÁ/Ø|  ô‚ð€,ã]ü”csS.­¯tÖÊ «`Ô ®y#È!€K€rÀõEæ œ€0 Ò'˜ï |ƒ€ NˆçräƒÂAè|@D€ÎËQ/*÷øàüƒ_0 èô>˜¾¢_sÿM{÷ôFçä:8lqY\Εy¸¾Š8Ø_@ÔuCépü`ƒ;p 8ÁxŸ ü8àÏã¹ ˆ*`p °ÊH*`ègŽï_pîAØ­ ´‚_à4úGå2tq…£ôG×äž<“gs‡€ÔŽÂöwV«_EޤÍzú A àŽÙº>wàÈ¢Á<˜Ïܼƒ `ÎÅ€0¨XŠ ìb ¤À(‡`˜ó10Ço?Àÿ`ü‚?° zÁ;ÈÝ @_P…™ïW·ëb½kcò+žÅ‘x¶¦½J<0q#}‹c{µ>½ç:؃T r»jз\o@Ûƒ»åµ¿  \€YÍ…°p|(w9þÀÊîíÇÝH÷r z#€Îj_cµƒ};Õ6îà”êŸ Êµ½Vï¸y´wìžÞ×{n&îô½ Çwü~®O5êeÇåÚ€|ð,~Àƒìƒ'¶Ë›Á³ë–t ŽWŸp ?µ@: À_®9<ËÀžÏs@{%<ç0à]ºAÀr@0?âcµVNçH€<µ¿À?Èèú€ÅËø¼"@=÷? ð_€À²ÒÖÉK~Æ×ëÏÔA'˜·Å„gy $º/Øö)Ûƒ ïÊÏY~ÃeEͨE€?ðÜ ÎOl?©+u¸Ë@dù"ŒÀ nZ,oêm°öÀ;ØY~heAÐŽ ‚C†ð"žÉkåIàÎÁ3èÐÓóøC¯•UA1`  "/G@ Èc^+çtOÿp«ZškS€Qïãç°QÃ> ܃;àzÖó%¾Â§! &Á,ÀÜÈ~ÆWø-`îøœ€×Ëù©Íµ“ðöö^Ìkø_à|‚_ðØõþvã®îÏ{ºëþÝÇ{óŽzÙ=¼w÷ô¸Ë{|Oµw;ô½í®}[ |`üÄ >ÌÆÑ_9»^É›‚e|×^¾¸dûË!>óýâ` N ü³XW  œ‚j`@€ÇÏßàœƒzð:>v¦Áÿxù.|…f5•Ûæ€jÛß›ÿß‚§¿c{Vçf zA Úç—çÏjª­£4°!è «E1؆Ãëäª8A¨D?­Sm¨¿õ…¾€*é¨O €GlƒmVÐÝá¾B˜Õ€€M¬ôÿvˆU ƒm^”µÓ×É€€Dîôã~Àá8€WôÜŽ€UØð!f<9\ÀEr@qŒA'ÎÕµAp®àô›ª]® @7€áhe×û€ì§üTÁ*`Ð/ú-miÁ]¡€°ãhPâ?ƒïdè‹ü•?0`þÃÙùCü“òô¯þËÿøGë¯ý©¿ô½®à‹mMð±us6ÄWG«ÿj¬| ÂÔ,ß ÿ«ïüÿõ_þ„ÿçÿèÿÁ1ÿ­cÀ!0¢^Àûÿ­cÀÀ•l1˜t4€õ?°Žž×·Ž @H>àü÷„€Á@R$ °‰)a—Øö‰1_¡X×6Š @)vŠ=_+æŠÙb—,ÆÒ^> -–z ½ùÇ{]cØ?À_H E°¢M ˆŒEO Œ `N`5Fâÿ@à„cHÚ:aƒ€;®keàh¤Àv°n ˆšmà¨rfF™v®ý¿ÙòWÉ¿X„q{  øüý@ H‚…à"H‚†à#˜F‚ˆà8Ö™c’ %XŽc+Zhöµhm6›Åf­™m&› g¦`)øš‚©`mv›!€ÉYoÖg¡àp6 g°`ùœ» Âg>gØu ‚‚)Ø7À¶HZ1x ‚É A` ‚kÍ ð "ƒØÙ4È VƒË`4h jƒÙ vö œ{åZ ö gá A0*xå pÂéà:Ø‚ƒØYŠ®hÃ`(è¢ãßk7ð-güà÷ ªBÚV¤Ik¡•¦Æ >P®)caB¸¢^——ChF„ñßCØV„!Bˆ2„aõev„ a´ÖŠQg¡÷u ú%áH ¦„'!KHŠ„-!LHíiþIø*cDœQÆáÐNx…;aOhyý„A¡•–…ñŸPx…>¡N˜…DáSˆª-kÎÚŸÖ£„ùà>˜cÝÚ·¼H™‚GŽ-a!? ”MlÀ B€3^Y(”}Ü`Š¥…káXèF~qá\¨gvá÷æ…Á^(d¡_ˆ²bza]HÞ…\ˆ†Š¡˜•p!Û.è±lÛ¹’c'Ìæ²•p¡ør†-[ÒFÀIp8[·³]p®ì–³ydÒW·‚!…Õõõºmª!0Šj´á1x¾†ºaÎ6î„¶¡k˜î†ÃaüWâ†:[p(:…µá'džÂ!tè‡Í!rh.‡À¡vøðlŸ\l˜µµw] õ¾nâ!?@Ú_ß!kN_^àzhº‡è!|¨xìáy¤‡òa{؇ü!~8þ‡ïax–‡þ¡òWÀ©nMÛǾ-ˆL7ÀEp7·ˆ,Ü ·Âip-œ×!¾p*œ Ç!jˆ"¢dˆÂ©k1Ü §Ã½p8 w"þ`^a¸¦ýÉiAÜWÄqY¡m—ÄE_€Dq Ÿ?Tq% ×mra\R·¹eõ@üGŽ5iKâÐ$V_äØ%N‰ø Ö¯…`Rbü§%Z^\"–ø%^‰^¢'÷ºáàÚ †¤‰õ8 &~rhb(”Átlbšh&‚qbTÖÍÕ‰mà›È'º‰a€ksâ7(ú`_6(:a†¢(.Š¢ˆ¦Í)ŠŽb£È(Êl‡â¤((VŠ˜¢¤HÖQŠ—"¥ˆ(6Š>)ZŠaÝ0(*x…¢A *go"ð**x±â¬ˆîíi¶b­¸*ÞŠ®â®¨+Š"Xgʼnü’–#Rm³åµ¾{þÞ»‡Á‘c"Ý—Û=‹§œ´HµQ‹µˆza‹Ñ"õ5-:ŠÙ¢·x-‚‹Ýâ¾.Òwð{çÞýdö|·.ÖwûÝ»¨ß!€ü]ôÅx=^cHàx?Xx ’xÞXvƒÿ"»¶µ]i£r˜/^ì€Âèƒ1Œ£A1F‡cÃH1JŒë@x}=ŒãÙÆ1jŒ cǸ1’s@Ãè1’Œ&ãȸ •Œ ã ¶2rgÛoF}¹Œ\Ìx}ÉŒ=ÞË2âŒ4#p·3Np=£Í¸¤c…Ç3SÛÑxÂŒ™ÒHîñ‹°˜ïÙ{óžxÇïµ{õž¹¨ïMZ#Õx5êv¼Ý²(6š7Úú$ž»Ã74–ƒ¿Ûøf`m£t7ÂoãÚ(7Öq£ëÕ‚eŸB°ÜYb„ZÎ÷ß…}€Ïw…õ}B•¦ô}H_اöe}j_Õ÷À_Ÿã(ô‘}wÕvö¥}[_”öànŸÝ'÷}Ù :þm2°÷YŽ Í·Çiu‹a˜ú¡^ƒóõúÅ~³ßíhûADyLP-1.10.4/DyLP/doc/Figures/varmgmtcalls.drw0000644000175200017520000005114111171477034017255 0ustar coincoinª» €š'€ ˆÈ sÇH6eb P%Ì™2SÒè)ƒBFŒ.r°q#‡ )XL3›0y˜¤³ðˆœ7uà´|s!•2xX ‘SgM’P)"¥0\ÀÀƒ…K”(bÀ€‘"¤ JkÈ`1‡‹0b°ˆ¡iÙ¤0Æž-ëG7bÔøàAå v°IsÆÍ\)IŽ ¡B/_¿<0NA'Œ˜¹P¤Ø}"…J’'N‚0AV %ç¢ý\ò17bê°AHgn‹ R¯.Óš‡TcæÌE!äÍ›5m¸IÛÌÜ6eȤ©Ó¦xÑ >!æä˜5"p³‘³»ˆ“#L’LABü¤›3u–™ÃˆàsÖÌ…+W™<_ÂŒ¡“&/2V„!Çný—ÓtÈQFm|Q†dø @H Ü”o<ù”PDeÖRM=•GTSUÅ 3|5 4Øà‚gb‘•Zª5#[nÑ7W]wåµW_s1Q„„dbJ}Ö˜i‘MVÙe™mÖipˆ–$hp˜†šj¬¹›l]ÚöYn»õö[pÃw\rË57†Ïñ ]t PgvÚqÇ Þ'y ˜‡žz칟|oÅ%á}_˜‘ pâD‚ 2è „Rh¡NþÔPE…SN 4¢TT…„¢Š\MãZ7¦%cm%*]váe$bBY؈)¦¤cIe–a¦g/Riåb¥Íµålµ½—´±7¦n{š œpĽ¹¦rÌ9Ýœvê‡çÛu÷]xã•'Ü ú^ñͧ¨sŒ!r¤ÑF€rLAAìé .ØàƒN(Ò¦öä)‡¡~Hªˆ$¦zbŠ(nä"Œ6ÖHã¬4Öª#®=îäE;—°ŒËC“Ç>©¬”Íbù,•Z‚™-Ö ]ÛmdvëÛ·iŠËräº ç¹t¦{]vìêÉç»Ê{^zõÚf(¾ˆêh~sÜôȃ“6l)Ä™N,iÅ~Ú¡¨JmljÇ&®r ®–Lãɰ² ²¢,ë*3½Æ|ØÌW.Y¬“ÉFɬg>Ëye´§íåµÔj‹·¼-f¸Æ=Íf¹oÆ9çtÕ©‹u»{ö / ‚‚½žØ÷ækë¢ø¥áFtÀ} Ç]éØJ¬€K0ÉTáÝ;Y¼!¨ŽâߨšC 2¸` 6p5rX†'Ž2ŽÃ7îãä<&˜äGÒlùÍÆ" å²SêÜh°4lUëK4]ÒRw&p©ÉuQ3—œèD»;ÝNkºëZ æå;{J_õa”~èà!L`AÃР5R»TÄ4…½NmooûTÂ’ñy$2¨úšõªXÕè}iYÜ­xä8úEîWôÓŸÍpæ¿mÎYžƒV–¤%:¢!°tb:]™Tç@§A­Mœ]jwµ<¹ËOñÚà×¼ïlùÙO O؆®ð…rƒÞ EÒ:ü${yÃX÷ú¦ÃS•ˆBCxƒè9  - `‚LÆ—¢Ô€\Q …4•xÅ“ œ(«B!êÕäzBäŸÇ7•j‡dAÈb±¨pHO†uƒ%§´§·Œyï–ŽôX<2>±Ð˜‰Cœ‰)?—AfË V3™ôḬ̀gÓ è¦¦¢]s›cl`ÓZN©ÉŽ‚k´ sǵ8öŽcžÙ§ý¼AöŒ!ݤWÈCÚ°Ÿ‹´%Çx(’HN²’— )øPÒ-£”InÐTA••"q¥õzŠ·YâðŸCÍ¥ŒJÉ:X“¤ìeYf@ÕD7(Ÿƒ¨¬2$ †ìê ýÉH€’’,ëY•*µ¦…­.p+aá*W®\•B\•å^ƒê7\zl¬E*Z «®´õ­qMl(ëj¢»æU²@­eeZZ²jv±†õlbAÛØ§’²xõ)?©ÚFþµ¨™5kR3ÉÙµ~v±¡" V‰ÛÓþ”·9ô+Q1{Tán±E¬b‰ËXÑÖà±¥ÕªMj¸[ZF7¬ÜŠl2öS¡´Êã˜xL^AÔ¡R¤(æþÇ3Îeôs[ Ý5= F*M¤¬cGµ Ún¥èÜ×èõ»vÚq¦øãÜÓ¹E†±|®yÁ ¾\ª÷D^KMV–`2”¾}"~'z¹œY´¿XÔh€9:4ks[!eZ‚!¸`qªÑjæÄ`KÕ9ǰY˜l ”ò‡2È  >ê° ó)^}ê5µç-±Ç¤â¢Lu,è#bûŒèbù.ј1¾ïãò[ã*F£U¢&­ FÍÀ ò7_gÒ§ôÁY{£„åHaBùŽñ$¡ ÖG¢AËø”ÅP ][V|i6ó t¹¾®ÅÃts1[ö8Ï™ÆüÛ¯¥™g°Ï_ü±,h3:(Eò­Á—:9¦ï¬Ï”«<,ëÓ;ñ>9â¾¢×D9pá4"„¾)SuC—LüIt1û£"4/êßZøÖÍõŸÌkoú:‚ gÕÊ9l–¦s¬ã£Í¶ì2Ì`„ýÁk ýa»…¸¼_µ¶˜A]æ3w[ÍïEõBÅ ãVË9аV÷¯(Àwó9ÞÙœ÷®mo’þ:ßGæ7„3èÒuÛQÆ#ÒØÐნM¶šÛ/wZâŸluËÝ©~Ä£FU]+¬d{Ô9`.!‹Îéj uâJìp—JÕE}*SçnÕ3u4?vëÎ…8_¿žtà.}ìR-{Û¥NªÃÀê{‡sÃ;ôñ>œÚ§;kC’íÄš™8h¯©Ý—êøuœ~åŽ(åÐíLYß¹Ý?Û³€qò£Ñ›ået9¾l™'Úß‹6v…‘ó‚ËáþYøÛ$C}Ó"NüjKfˆò’_³07ny8{ÜW3æ¼~mÌ_’ÿW‹ðî±¼M¿òn¦^Áá<)9UúúÛæ³Ç9¤ñ³s½À¡?oøùîvÏh;|Ú^ûð‰Züã3å+î•P_ÍÇjNôqÌ$}u¶n8VrØwrÚWz ÄMd4RàWhúæ`mT~4Çd&p2OìWâatù|rGY¾Å¡vf7bømnØDGâj §€±F}³†g¡·Q]ägÜ·@ÞgD~†&l3·dSê‡ay$i|äG—6ΣS 'tÕ³‘|úׂbåZÖµXNgv'WoµvWw"ŸUZ_¸‚½%]c\LGvO7j8 †~xz¨†pÈu`È‚txYdx‡y—‡i8[}Èvzø†vÕe*ˆxaXˆ&ò6£vÞÆb²Ry+syÈÊ}Ã2}vÆn9fr£‡r]hG8d%lã‡hçÔOxs¶/ySXØ{[¦iäE‰„xmŒç2u'Ò‰§ö‰ÌŠÎw€Ð÷j<(rÕGkA¸cC¸}d-w´¸oäw‹NÈh÷d!Bø1B{DiVˆ‚<%ˆrfuG]bw]8à5ÐK'UfHUè#D`q[Òft^·¹tY±‘€“Çf 8_Ó8Š÷£yHr•@¨gB8`ÞFFX²ør¬W‹hŽÿ†ŽP¸‹ìøíwd@¿è6p#Œ™Ö\ºeŒsˆŒv—°ÕY{Ȉܕ\,`€¨“)|bhˆvˆwØ%”|X”U©¢”]Ç”–v¯Å]±5”ÛEJFyw;™Çv?Ù•i%•D)––v‡™‰‰¥ca'€ÐH€Òh€YŠÖxŠ 8rÚè‘Ü’(’ˆ`ƒ¶zâG޶¨d+){޶ŽÄ“ ² ÷c“¼H9yKi™jɉ/²"ã#ƒ¹| I‘¢i_Õ¸ƒ¦Ùƒ©Ø€×WM­¯xz±›E6›˜dÄVsM–~.)!ýò/”F0CDЛòw“Äi\øJ“ˆ–=©–R¡Œqµ™É—qŸiƒ¡‰ƒˆ‘y¦X3¨È€ÖçnØÔš°H’â©„xh)i›±‡~¹™l‹BŸïˆB–ÖBõ9œõ·…û9YýYwãƒ30> ‘Ênðs õõ2Õ™€×‰?zª™}úÝg¡÷6žKèz*Ù¡éù¡9Ç(d ¢“F¢Œ÷¹…tÉŸvù[…™—¤$±1"Sù¥1€bº™IÙJ“™¥,º¥ÓuˆP‰”¢E>Y”'£‰³ˆq'˜HG˜rz]t*Dvšvby2dº§¬ÔZoÐsC IŽºRpbPž4@´00!!ïçØX“ª•z©ž!D3ò© B3 ¤zS”j©±\±g , vJ Ъ° \¥zªÑc1i!]ñ©½ú«t0¬˜U¬´ÈJ+B¦6ð©ÕA‚x᫬!­’*«¦J«3©Še'$øª±jIåz©¨24 ÌzŸ:7åfÐswPrl@‚âÚ¨äj¬Ö:Wè³ßõ©?‚tk+°í:«ðª™A#Zñ©p eg  2°Ô ¯0°©:`ñ©³qÁ0nP$[°´Ú"ɪ8`¯»: ²"ë5ë®2A¤\<+![yP«ñw0´‹©s•©ä“´‹N µüJµïjµqHñ©gШd¶ÆjMÑB42`¶hû /‘¶¶G‹®Võ©75/û´Q;µw»¶X{>jʰ|á° ¡m IjK«A$+2жgú©sÀ¸Ž;¸»\A¦*›Ÿzh° Ѫ¹¨Ê¹2€ºžÁ­eÀ4[ZAVp´ñS© 0»}Q»q®-uÿ‰W!Æz®G,¼Ê»¼Ì«¼ak­(ûw {Yº;³tðI•¿Ë‰ 2¼a‹³ÖÚ;‹¼Í[¾Ëû¼ß5½c±°R½¼›½,°½Á뽄;WgZ¶æ›¿É‹·™š·äãVíK»×Û»H¿ÀÛ½ Ä¿ªŠ¿úk¾ ¬©b#¥å¾œTb!¿L¼Õz­œºäÛÀÌ‹·lµ™£V¯,ÀØ{®íA–qÕ˜d¬7>1|"Û Âå¶ÆëI'¼»¬ÂPG–a¸a;ÃD\Ã6ÂÆ ¾È:¾ÌÃ)\À+ Ä.¬Á—ZÄ4üÁGLÅbk D½(LÀ²òÃ-,Ä0,ÃfŒÅGüÀ«ÚÄÖûÄaÌÂAü´jÅ1ŒÆ6ü¼ܹ Á§ÿ!n`¢(ý’ii€ò7p{«c±«\ Fp‘<É’l–|ɘœÉšlÉ’ÜÉ“¼É Ê”LÉ,ʦ|Éžìɧ¼Ê©üÉš\Ê«ÌÉ£\ɱ,Ê­LË« Ëš|˵,ÊÃ*Èc@ȆŒÈr È[±Èb!¥ÌË›ÌÌ ìÌ™ Í»<˺ͳlË×ÜÌÙüÌÛœÉ,ÍÖÜÊÚ,ÎÜLÎá<ÊÕ|Ϊ<ÍæœÉ¿<È…|ȉ ‹ŒÌެ,œÏ¸Ü˘¬Ï,ÌÏÍìÏ7ÎÉ]ÐÑ|ЛLж¬ÐÍÉËÐþüЗüÎÁÏÄlÌŒœÌ Ò íI$MÒ"-Ò„“Ò'Ò%]Ò- Ò+­Ò5ÓAðÈ/mÒ1MÓ+mÓ9íI6=Ó3íÓ?ýÑ;-Ô„CÔ9Ô<]Ó;ýÓ6ÓHÍÒO½Ô1=Õ5€ÑÂ,ÏÅLÏÇŒ«÷ìÓË5ÖŸdÓdMÖbýIjMf½ÖjÕ àÖcÝÖgíÔ--×eÓu½\i}ÖFÝÒ{m×'×l­×xÝ×k רsmØu­Õ=Ï#RÏ`­Ì ÀÔHmÖ4°Ùœ]Øw=ÕšÝÙ› ×XÚ¢íÓ ­×¢=ÚWÝÔ}Ò«ÍÚŸÍÓ¦ÝÙ˜MÓŠÛ¨MÛª½Ú=Ì’”ÝÈ–ÆÝmž‘Ü';ÊÜÝvÜKÝ8ÝWÝOµÙÖ]ÝÒ½ÝÏÝmÜÜ˽ÜÍÝÝÆ=ÝæMÝ×mÝéÞÛ}Þäm§àýÈâ-ÞïÝÞèÝØ½ÞSqÞî Ýð=ßóÜ\ßü}ßë­ßOeß8ðÛ\ÍÑölÙC0>á^ánáNá®áŽáÎáÞá â3ðáNâ$nâ Žâ"®*žá,Îá/®á1îá þÈ'>ã®ãÎàíÕ}ÏCpC^ä1ØHyþmÜSÑäMþÞ‘åHnäF>$VnCBåD>Ð åR¾ä¨âäOîß^>å[^åXžæY~æ[^æ‘'ßõ-æcÞÝn.ál>äW~åZ>äuæò-çSåInæZžçiîãÁ=Ü­àª{mÓ àËà ^ß8ýè1é—N鎖.é„ýÚ"Íé’îéíêàMØpmêàêü]߈ÞÕ“ýÕÄýç60Ýè£ë¹>½¾ë¾ÎëÂìÄìÆþëÈ>ìÇŽ°<$–ììX^ÉE€nÉCpÉ×^ìÉ®íʾíËŽëÝîÜ>îËNî¹þì— íÓþì\è0`íØnæ.î»>ë^ÙßM¦úN¦±MLñïðLÑïû¾ïuðð¯ïÜïÿðÿNð o _ñã3ñ©Û ñ/ñ oññÿðÿð_ð _ñöä>à)ÿò0ó2ÿò.?ó6ó8ð5Ÿó<ßó ¿ó>/ó+_ëAnÙ¼|ô×ìîH¿ô×ÌôßÜôIèL?õPOõOßÊJ_õZOõ\Î õ]OõC/ܶ¾èFgŸöh¿öjÏön¯öi÷oïös/÷q?÷¥<÷u_÷v¿÷{o÷}ß÷ü÷oøzoøpøto÷ƒø„ßöŠŸöc¯è÷,Ðû|ÉDùšŸùÏј¼ù›ßùþÌÐFúš/úú ʦÏùú «úù¬ú±ßú³¿É«O¤où´oú <ùeÏ?]½ú <üÅú›<ü¤ŸûÇÿÓÉúËý¯ïüÓŸÓÑÏúšŒü¸¿ú¤Ïýšlýš üEÓÔ¯ÉEþêŸþÏý›,ðÿðßþ/Múë¿þô_Ò ,ÿòŸÿ$ Êìþ©?ÿçIöÿ›×ï¥2˜þ¾ßùËdŽ¿Ì¶Ú#z-ï²]µŠWÛ8[P〽í´Å4 WP: l;iÏz6XñH]Hëw0á©ÀˆðrÛj£O’¿ ˆK`LÃo§Ž³Ili@pŠ´¨×ŠàLx.¤%A!HÕ›liL°¥É7G‰ ~ÛøN"A@7  ¶m~½3Øt›”sep ʹ(`àsqð¤¹;(å Dƒœ Þ:F7ñú» y…0¶Їñž"tˆpáBHÈájûsr.¼I˜ +¡$|„sPhÂ}Ç ÅœÅ„fo“Ù´!À [!+„x lºÂV _Ÿ,œ…C j²[8 ua&ƒk¸ð>¼XÓ‚a.†ª°Ã’'ðˆaK3†Þ3yG ß5¬†ØðN…lÈ µa7ĆßÐb:H&»a9<‡á¢Ãu(ïJ™8d‡ð¦Ãx(åÛ<¼‡Þ°JCË`@?ü‡I0 ?H"¥Cpà ĆõÛ@Tˆñ â·„X#"dˆñ§UDƒØ­E„ˆQ¿™¿œ¶-bHü;ÃobB9÷éÜÄsw nÞA''ßZ" {‰.Ѿ±A=˜ùÛJtr8ñ&êD88âPsÌ0àÁD›H[šJÄg;+*Æ Gq@U¼ŠR1+fÅ4­¢WÄŠU‘+JE±(ÞW<‹X‘,FÅ­Á"ZôŠj‘,±E·hÓ"[d‹]Ñ-ÚE²ߢ^dvPQ-âE¿HãâSE1*F£°ú£cTŒMï1>ÆÜ·#/«ŒŽñ‘å>ÉogLŒ”ñ3^ÆÏ˜û f‘ñ4†FÌ81ãf<Ël–}F!°%#/{Šªn¾Áºíæ$gØæ­¾}·SmbnTnÀQL-¹K‡³›q\ŽÄQ¿}ºã8é.b—Ó‰Ôñ7Çö†=á&Œmo껑'ð,^¾û„«-E›&‘ ,ŠSÁ f7¸V'õàôƒNNO¦7: èèàÄ“þ° ê7BÙOÚÄoŒòZÁ/H"3š‰¼wƒâaE0¸¥·d…ßÒ[0.Ë%¨1]ªËNÅ.•U‰k—ìR]¦ËyI.ëe¹ —ÝrŒ8| Ì¥¹œ—òRÀKwé.áeÀ¤—þ’\òKp™/½¥f´—õ`ÌÙ© fÁ<˜èbÞˆ™/9¦¸Ô˜€Qb®K‹Y1)&Æ4% “tÇ„WâZfËä}›Ìâ¹L— 35™ytq3³ÄÕÌL&3s&[ñ|—¬gæÌo4-™Ðœ™;“Mš9#$Ϭx>ógV´Möm€Õ¼šX3kÚ€Â5»¦×(Z3l^ͯI6¹¦Ø|db³l–M±™6Õæ×d›asð¹M¯ 7µæÜ¤›uk–M¹ù6󿨼›\s[NǃB8ÏT˜‡3qv…˜Xà gáDœ3q2Îö6à§áŒœ³%¶DËyP0§äÔœ©Žs@Ϲ8AçyãœÖJq~ÎÉ9§ê„œuF7ÔI:‹€‚{Š—ºpù>‰)ä˜Ï“ˆ9’†ËHZ‚ g’xó×ä^Z%{iOå"(@åùÒON»ÃoøQÏ’vPHÚH”d$ÑzbÈíé;‘'ñ„³yjHKF=§ùÜg2®É9à‰ùÜg »|òÐ=Å–(ï$ ˆAþpõCß™h@äbkÜ2À-áõ]z‰™ÁV“ë]²B3êä‘{wÓ­vË;5èÿ|*A@€ ž~X@èw tr!%ú@g@ˆ<Êj‚ ú?7híTÝòÞP 'ß|g•ý–ÐÀ@(Ü‚ ,4  *A»å Ô†ZÃ'Eå< 0PŠD{Im¡*ô„.Ñú./è5O”q¼5ðÔ(}£p?¾Ñ5êFç(Ç«£¯U²QÖYÝa64²½ÉFCÙN$å³l”Îâ%A‹—e+Þ–­x”ŽŽ/›ðºlÂ#³ÏÌ"¼G¹Þ¸,Ô²ÎÍê78‹ßÄì™z³^6Ϊ<*{)Y^„ˆýÐÈAKh- 0‡6ÑÚE«híwy´‚§$ÐH ií8\´ƒÖÐ"ÚM{h3-£å´ˆÒVÚ’(j#­¥Å´‚¶”5ÚMëi=íª].”ÖÔ’ÚXû]Nm«%´¯¶”ÝZMÛhKm­µ¥ö)ƨ¥­˜•µZ±H©ÀXÅéH‡­ @J™ÈÙB[9AÙ°E¶ùÕÅÛb«lc³™ÒöÙ[¸5m•mµÝd׶ئÛg›m»í·µ™á6ÚB¯r E!g([·H ßÚ›8Û-¸·â6ÞRÛÃÊz¥M;¸7á*Ü…«®Ã}¸áÒÁˆKq+nõ¸wZ¾Ëq;®Çý¸GÒG‚Ü‘KrKnÓ4¹(7åŽ\¢©rKnSÝC0wr9¼ÉEs÷˜‹¹1—àáÜÉeév.`œ¹;÷æÖ\š«s‡.¨[Ž>·ßm<£ #ÈÓ-º8·ç] ;táœÓݹP·æÊ:>Ûàüì LˆB „ݱk%Ů٠»`÷ìŠÝ²;vÍ®‚T»d÷KÂÝ£ ÕÚnÜý¦s7íÚ]jwÝnÝ…»lWíêݳkPóîßµ»·í‚T’fTbU{iKU¨BµÇ[Ò`䥻Ví®A5žêx5/A½¼:U©A^Î;y=ïHµ©o—òš4Ò›yOšÁl¥ö¶^”{iïì i¡Wõ5Ý+Øl/äå½t°óÊÞßkzaï…kÂ×÷ßâKÒçQ4Šn)>ß&Ç…¢O\«ÔwúB_Þȵoö¾¡°úv_ð‹U½ï~ó¾-ѳÆDëË}k+×½€(2ÂÄÙ:ë/õ ¬ó׳¢VûKùoþ «—ÕÿjVÃ*€0`,Àx²¾_Dš"°øEÀç—üò_õû€!p†À×UCàõ»ËïõíÀÛ÷¼)`P«,¦\t¦SvFºl:Õ¨}s°*x“ÉÎüGgð8äŸ2˜3N¬ƒÓ¯ÓÄd6Xsþ¾le)Úä–.l‰êNº„e@ØC; #Út9…Qc 5WXwJ2-,h#OFœºµèÖ%ÚÉð –ºséNÁSrvèñ|ÄaMd–¨$«¯–låá0ä–wAÀÛúCA|>–h!ŽM¸ @(ü„ƒH~ÄW8 ÿÏÒ7‰#èÃÇ3l†ÕðR@ÃSa§ºaQ,ßâ0 ˜Ãw˜ãá:hgè<}xÛÎ@l;q§&ºÅœãáb\Ì^{q{¥ 6cŒ'Œ…q…íÅœ(ßâ[©ïvq2öžKã`LŒ§±4>Æ3T+c«êŒ54þÅÅxO¼p¬`±ñÎêÆºXk¢‡­15ÇîøÐ~ãG„Oð=Û®ö³þnÎíꀱ«ãT¿ì÷tòãœ[g³Ä¾x»¡Î~\\‘k†ÁÙr2dé¶-¥ÞÖ›d™(#·‡¬‘;2GþÈ™—ä®ç‘K2H>ÉY$[äVvõF™I~É(ù$«d9×õÐfL†É8™·2a;nm·ýÉ#vÙ2Àž|m²Q†¢õÚ^ÛR”›²P€DÙ';å œ”£òQfÊ@ Fåu”rUVÊSù*kÔ¡ –¹rX&°µ"Ë9‹Æ–MÙAnËpYW»×—-š»ëe¤¯.H\"». ƒ—‘KnI"Pú 3a6tÎ.0ƒIÂ̘ 3bæeLM6æÆŒ˜eY+“̆Ù1«¹hwÍÔ¤fÌ̇y3'æÎ,˜QãdÖÌyN1 æÓL˜ h¶Ì£ 3ŸfĬqý8ÝŒ ÐòÝæÆ˜››æn6}U7G@Ü,…óC…}À¹7ÛæáÌ›‹³@ûÍ /*g}7_Z®Ç^7†2²tÉîr~*¸Ìv¢ˆLÖ©ºó\Öu¸L*0+KË”•èÃùs-Ÿ½÷Œ1º „Ù’ygö¹É®ú»dž“A;½É Ý~NsšlÈe21 Eãs¢œ °l LDAš´+i’,OB˳‡¡Ñ(vþ˃Дqg‰2ÙÏúÂçî¼¢­Ý6¤S!=Ÿ,øÜžOq‹&D >[²@Ÿ?ß}ÎdÚïóá¾þ\ ´ÓÐé®Hÿç%½ ûó>cÐ䤱ç‰&¡? …iú|Öa‘VɲÎùTËYOÌ-NÛÙär(w5n:Á±-néþÎùèT¨‚)dh¦PP¦Û‰¦4¶M³ÒÔ†Ç#X¢ûˆß¹á¿DæÕø¸ÓˆŒÇD LS£žWŽRGÝðµ 6Ô›x³êA ©Sן6%–[‰a2µb™0mNÜ»ÉiygX[ÄTˆQãðdq×úè&±vó–a¶Ži1—¡§¬%Æ£ \ÖuÖXH€ ÜKÂH(D²^ÖIAÕ0𬙵*ñT"¡Z'­º²µ²fÖ`aZWkADõ·& %˜ëeMb˜®¢Öߺ|Œž¯—uùhݺ^W°‡â–·^Ö)Bm—jÝI&Wi©ÇcR 0¼ƒehETLi²Ò€Iý$ø*7p¬“B1 A„BTì‹Ý«æ@¨Ad"0±EvÀ¸ØsÀÁ/@IöÊnÙ"' „ñ$ÉÂvO@ZÍ „ððÇ~ƃ%ˆ -­Œ6¥I;?œ„ Ü®ŠÅ M3æ€Á@ *\àIBB"ü÷¯D(SZ!óFL™3\ÀQ£"”(A% 6et€xA§ œ0bÐÀCŒ4dƼ±©²Ä9eÂÐy#Gf’9l¸!CDN˜; Ì0ÁæM¢G“ÒIóÆ ¥1ALQª¶ 1nÀ¡cF 0l€ð £FQ(aΔ™#3FQ!^§¦qs1™8h€ 1Çä’oȸQ”È›1uÚ”qCÇI™2dPKìUΘÁ2Q š¢óçУéL©›4ªY×q „l:£ÉÔ^Ydê¡¢IÏQ0'Œ23É|™cçKG5 ÊàƒDj3 Ô™SF™4cèÌ|ujÕ«DàËŸcäûøæñ‚Gg,uÐ‘Þ bœ—Àb,F†ye˜ÑÇ€RˆÞ E<(y6X¡/aăfH¨i!žGb'îÑFkTX-Žø‚O<(Çt •ã†S ñàc„Ó$N#{t¬ˆã€.¾0ÅG–AÇVåÁä THñ V¹•Tê(²XÉq†_®)Æm¾‰”\†áešŽñ hr\·Ô—c°1hWìÁ¡_¦èá)²ÁÆ—gd¹e—˜Êñ —ƒ-…¦s|ZÝu_*ºÇonhùFªjhÊjj¼±Xªxîå¬wE¤€’ØÆƒm¼aè«Á¾àƃ­Þáè¯_ºÇƒ/àA’†_zº‡Å›­ªrÌzh²rŠ¡i¹Bu%Ç—¥êŠÆw°K†¦d„1°"n8›{X;·ÆºÊn»„"E¶’vàoBìÒq$™oÔÈäJ*…œn€0u˜±¡%AD‡3È aÑe°1ÇíeLÇÆÏT$BFHQD „ä_…,—`3ξóÌpÔÜF$’Ç3Ê·…Ï@ MôH#qôÐ €Ý…†U_ ž$Oa²Ã¶¬q{» 3 ôJƯi ´ýöÊrßLwÓwƒ€Fiœ†‚/Xýž’¯ ‚Ø^›—†„+ý,ÓSçí+}^yy˜“ýçq{>7Ç·¡8ãŽC~jY?¬”/£MùgÍ»µU>üî½»XTIÒAnÜ&‡Át ¼˜|íý(GVLé@Ï¢!†oàA¢cX¯pöLý'Ÿ²ÒS¯¾|‚Éç"ûîé7`ºq~ü¹™ßƒ2èá_ù¸ò†0L¨ q àö°Á.} úæ—Á¤Á Oã“’C¢0h «NxÂà1kÍ! ø‘|è`-:ä€Âë]Ár“CkY&1|ƒ¥@&ðH-C `Ç,Ä-ˆC4á<¦¥*àK&\ÖP¨4&¥…ƒ¡ A@C2ÞˆR0âˆCäYk‡¤é!~E6(±lxlâE×䬊n¼b²bö .‚ñ…Aœa o˜9±&n^€ÈG¼ñˆEº#ñ8ŒDŠT„$™thÇ/¥aF‚ù‚U>ÖžB¦pOå™Ã„È€2”3ËÃtPÄ"ÍD–×:Ï/Ë· ý+ÅDO^pÊÀ”A !óØž&Ô†:àM.œe€²9’1hKÀ`é± maœxɽÒy¶->²RØi¦` i†&Å–âùïÀIÁÊS„ÉúçŒæ°UÚkcäe}ù‚u&ó˜ÁÑ2ÿIOi‚›dÐ&¸É9}.æ áDç:Í $ö€àœX±à:Í&Áw¦&Eå3£‰.—ßi? (P{­AùªšK'‡/¤‹)eåö@ÀÔ-*|B´è:IKóÜ2—»ìå~9¡‡6”˜‚h2 LË@R!ƒ ÈTfÊ´¢3ðæ>AꢴµOy°ƒ’.èQpÖ•©"¥9Ñ©Òò°Ô® Ø[™ —”¢4½çMûªS†- ‹e*dë9’ú•Í2ÈAfÍÌÆÔ™¢gaà‚à@.ÕÄ[6M»Ù½€`µ.ˆNH+ÛŒ6Öi¸m—ôŠ·6<ã)‚è7\%-¶ƒš•);¨XĺµÑDg\c[NÞ^­¾ÝæêäúÑp¶<îõàyÚyFÖ¦ùÌéeç{!¤DM)ÓÝ(eР^7•G-ê*êÔ½!ªínUm \‚@—|A€ÿ™7¢b'z *ä{~Õ£ ©®uKÁÅj•«­çWS,Ö°–غµÕ®wÉ]Œj”£äõ«DKN`¢4;. ÚÙXõ憽µ­)>q:×ËB7+%ÅN\',Ý\èƒ!jñ”¾„2Ó œk–‡ÜAÉŠà{”§…1Ïv-P\p%T†1g—/@ ávµòŒ× ]ÙÊ€Î<[‹Ï“Óç}àí :¸u}ölž>+:+v4¡#͆CW:ÑÎôo!-ÑN_ Óª.c?•ØšvÒ§†au hiWnŠ+%…ˆ·"0Í¢,òôxÉ+ôו«¥Úʳ; ûj¹«Ü¦ØS‚þÚxl9s ËÔ iE¦}±·™¢åuQKŸ;œä°žòPjit›ÙbXé@¼¯$‚Rº9æe1°¡Øñ*¨FÃâ ¥«…6RâPð;®ápÐYjRa1P–âË,K„è0³£©˜RfØxÇéð³Žd/ ´0«…ñeâÎÖ²³iÛñ®IâØáî£Ã¹Ì<ÀüÁ¤¹ÊlñywçuM€Ååëó©ˆg@zû•w_îtnt¼4÷,† D¹P=5V/Ö„æP1`ˆãhø |ÒŠÇVýåwÉÌâÎñ ûV˜1è µ@.r{‹¬ï3¿»1a w,ó7¿PBR¾‡ A‰LR™Á-N]"§ îû¥–ÆÐ†<¬!À XCôîà¿B¾€¤"Ýçþw¹ÛÛ }§ùxÉnöºR5+;”Ä]Õ.>gºG½|z? c‡ö»¾5Ëök(qÞóž®ýr×óÝú°w½ì»É'Nñt¿ì)÷†È G9VÉjÁÕ ÉÉó„Áš¢žy o¦oS­€â.®ßÂ]šÏ!r  ÊóB`*ò#\CbHëÖn2Á%\nB"Bp'h'{Â\ ˆ1 x/¸=pÂj@"1r3S.áA)/…7\²JS)lð$h{`‚¡„W)ƒ (†ƒ2øPP€583n¡´o9£É%83eð¿ñÏ>;è_B „6ˆ‚E‚úT1nñ(…6C…-˜,x L{`\Ø’,‰’WƒR‰¥mõ8 æ"mur†#ÒVb ;|ˆmÅ€ˆ‡ÐSÎò(t¸j\!;ø0³‹¸j#a‡á²®2‰Œ¥‡xt‰­"‰ŒˆGvØ* 剙ÈT‰ò†mˆY @l‡x pÀGoRVÐ:#‡!a+qü³P€‹g@"¿'©±3b)_y10túS%«1ÊXSÐŒx£XÉøË8ÚøŒúC ‹q>ˆèa©1_V_àa N˜\¾Ó,_ %íøŽØ¡†U"öRõx#÷(Èõ<ûØÿHâ üÈI‰)2R2ˆ8‘ éö˜y3‚0ÁR—y.r‘ ™ò¡Xúx@F`2‡¨[d@oÁ!èãåA,9~& yRgB]ÒX CÍ2‘ºVG’ A[¤†Ay#O´kC´\G©†~H9_•S Pߦ$v´” S"7âøxˆw0’î(Ë¥ôxêÈŽg9hÕõVbk郱ŽSñD8:Y*ÃQ5é•ïÓÊX^ž5”•T”ò‘Aö%jyŽöø–d9‘ç‰YbÉÁˆ%Ðߎî#HU"ÈátÚ¡aõ´ €# 2W/8«Ùš2 ±™0P›®éD¹9¼)z‘›4œr‘›†Áš¯9¹)¼9@›>áÊ™23!›ÔÙš3›aà6ðœ¸)›ßY¾)›œQÃ)›8ðœÇ9·Éœîùgšµ˜¨ñS$SaB椡5¿ÂþÃ3‘aȡЙ›³3 –ñA`g®€& úí1i01` Ú'ס J¡s…¢*C¡cÁ©¢°9¯ñ–(Š›E  Â3#ê›E`¡ Ñj>#:œEà¡H¡3":ÇY&꣕1<º #:Z/BŠ¡0a¤4ÀœI ¤ *¢4I¥J-ê/£:›OP¥>J¸ù[J¤]š¦¾ùbʤi:œO€¦:qœOЦs:¡S$?â?:¥U §ZÌYwZ¤‘UЧ!©-Z‚Z°™š*¢5€›Z ¨e©å ©1PéY©yÚªí9ª‘:¡a'ÚªXjB¡žt†ê«Ñù!Qyð¨6Т¯A¾ ›JÅ*Ç6€› — c‘ªÒê›y0¾:œŒ¶O¾zœìd¬ GcpCÒŠ¥qP@¢ŒzÌÙ®ïJþf  qgP+ˆ;@¢¯üª~/ð¯/¥3ñJ°ó ›+3żS;óJ­i0¯¾ hó:œ¾±m°ë1¯Ç™öB:q1¡õr‚nq¥)»²øjG1À35¼ã˺1¨¡8tpªÈíA,‹-ê(VÑ'ó° M–¢%<‹›öŠ {lp‘<ë›S‹þ†µ3;œ[³û8<{œ Å2J;³3Qè§3‹¥6; ë‘Vª›Š‹Gv6K´wí*åʤw·-ZMwë°¸ê£9ž ʸ¾ «90œÁJ¹Ç9#c°¨w;¡ëV¹*ZÙ$ š³Úú¡~êÑYƒ!´7 n>Ñ¢+ê°Y£+ˆ£>›®Û®&´1§ë›hPŒaB¡ rºÃ™‹®ûS>qœ¨ê?>Ѷ˜W²§‹¥c€»7  1ÀœBy0¶ "º5Iñ¸ÜÛ¢u–ЧJ¾°‰À±¤›J¾¸É?‹Ë½¾™J¾Ã ì;¤–J¾ÇÉMª[¿3;“¿ä‹¥]Q IÂ[çšÌù±n²®¤ñR1êš-Ú@èëš°ùÌ¥ï{›3!“<½9Aàk®¹¼­‚J‚®yœíBŒ‰*š‹ Ì¡@ÂÁ<³œ3‡!ª³jõšÑ‰$&”ª¯Ù¢Lp&÷ Û9O@Ťóšu Ãv‘Âî1P 1+Vl¹V‘3"Îë¤3Qý;¥/P’k>¯‰¥u@«ñÙÆhz›ÑE¬¦ŠÇ”1z½J§.Ü¿4à›ñƒ¡3‡l¹z{¾€¼xÈOÊ7·9¡2U|›XªŠž¼Å’šÂE\þÚ32þÆÂ5p¸ð熓  :Yп¥:Tð.C˾©%¤SŸ:"šø©Sm@>x£šÂ¼!Äœ—¹E(äM º2!%’)˜o©'ù(`š¨™ŒÁ—áAîd£†ƒ¶Î÷Iš_ÎõT1™ÙÈ•QÙ’‚ÇœÌBdÎ4™Îîü<íŒ\£™ÆŒÌÊlD§QÏØ¨ùü[]ýÌ­ŸüY/îÁÐÖh—÷K:"-Abvé5lCãóÕ½ý!GGhI‰j5fa`vjˆ|PÎZþÑMÿÒ-®r”ÒáGn-[ÄrÖMæbæèÁZÐc>Ì1ÅøaÇh‚ÖQÄ.€˜aNÔ2°ç}îDN S#è7. ôw& Jf¹óHrD—“ç‘ndqTl–µ@´IÓ*¯¬2•áôg#èƒ_2P‹túåœ"Ñ´î]5]èØaATCY¾|>ëpAëR®sŽ `Õ ª#!;ê43(€³Ê-Àó8=Aë|aÎc­^6ÀÞí14'  (@y°ŽäªWÈa&4æ<·cf€4Jæ“3–Î’®éoÁé@Öu!qqE6Z9!§^ÍCË­®_zi²NëµÎ]·Á¹ŽG»^å>l4#Ñåþ|ýºŽGsàìоÒNíµsíý‘í·õæßþò¨‹‚änîõHïN÷.ÚFïjYé×qéL½s•ü¾IOêqoê>™êãËê’Áð°³ñ¶. ¸dßëì¿ì_ì oñ"OòfòR1íÕN*¯òÚîò¨ îà.ó(àÄnPŒ§Äîr°ŸdP¡tpóñžmó><=øò‘ïô>_EŸGõïq%œKoðMŸð«¾ð¯îðUñË7ñJRñËN"ÿë¨ûõSNjÆòÍn%òkßö,¿íróÿ"î3îãtšßáîƒó?/øB_ï>;øŽé¿¯øÎøGð €Ê‘ðN¯ðQùãõðöxÃù†nñ Ïõ¢¿ñÂný¸­<¨ï1fíiòÖÎnßòÜ.ûŸó´_îç¾.1ð€Ÿó¡dEöÞû‡Oü“nÓ¿7'Ñ ¤ùM>Uõ\]Û~™uI<¬Gñ´Þö3;]oô}¿Ò‡6Ž“ ˮ쩾³ÇúRžú{}pÏÛÅ=`G÷hžµr$ƒw´ àеûùÏÿí¿@Òÿ„ßÿ zpß À ¢[]XuEcà±.ɇê(_”z˜¯ú?ìçùÆôu/ØE9ð÷ñ¸ÙK}ÏŽž¿ÖwûÃÛk+0 Î>³SûÐ]iˆ§„’‡èw Ïëº%$Ô'òÅd‡nÁ­…:;‚çN”ñvqaZá! â–”¨à=èQ xR† ɲÎÏ•¯2¥› ´|°›P?«7PÔuW0z¿-È•‡UË ÊîaˆÀ0hþÜ€Ú3ØÎ ²¿Ø§Ã”è.{¡5@åÝï+|úñÉ¢g A€hÉ-ºˆpÂ%èüœ (œz£Pó]? Øù, ¯Ã€ÝO z¹V8"¼`ƒ«o â•§ aŸû›{ñæ ¦P }ÿs†îH††';rÀ uûp$ÂÛaÓIn¹Šp$0BPñ1˜$”$|ð:Ù¡ZË^„*Ž ÂÏ’A XˆŽÐ!ö¢X"Jœ ‘)¶DŽ¢PlˆD‘&ʼnˆ-b)ˆ,Ñ)Ä„ø¿âTŒ„Ãê»JØïÒ“$ÿ®àUÃOýBa¬‹€Sf¿Ï÷ ± ×Û€ÄÎô½sHþF`-¼…é/€3È UàwÀP ؼÝgøì ჋?pÎÅÅG“_\¹€°Ô1A„Ç 6ŒWÏvCTXU¡8ìx©MìDf×i!Ú³…èí•Áɸ ß! Œ6$jÈÐ¥$ê¡Î|/ê@e8ô`]ì^s;%˜öâÓ»†Q°úÅFq µ_m ‡¤/1vÀñ7òão„ŒÂQ2RFãÿ~¡ Œ0ïÍÀè=ct.ŽØ$>fxóBnñ‡Î;2=Oøûâk”‚ã1ëÑÆÐ—ÓcØSŒ»q¦CàHåcqì…ðð&Ç20˜#è;ï3?I( —¡uÜ$•«µP®¨—–žw„~®1<’ÂÍ'«àÖ‡1^ÈhÕB‹Ê`ŒíÑ7–ÀÈȉ£;‘ÇQDæ¨1¬Õæ@ (:¿ÎH­Ü$Øñ@Ê…î%ëX׬|RGjÃ!£2¢G!ù1×#µÜ—#[šL>É4[à¹{pp?ÎÁB©%ðS•‹rŽ$E?@¥\¸&-öÄYi)Û"¦¼•X“SjÍ£è*ÕeR›M±T–͘bÚ” F‹mvÍW9GÂ&OŒ›d³+šM[ù¦\Ü•4s“DL`â‚ʸerb2Hi1{&Æü™ÊÒMþHÃØ1ï%´,‡- 2xDÞX-Å ‡\‡ëïIžÌ(‰Gd Ð+rÀeÞA˜ 3⤋0†'9;!±¤œïò/úÌm4½!Ç\…ž³hÒI$‰4Õ!“LÚÒý9M7˜e D²SEΦÖBé•,T•yw.EYiç&ª¼•†SWºÈÄÉø>]_pMÁ’ÔIÎß¹3+§ð¼œÄ3sM8é,“gø­ ‘1O‘éE¶H7ß"D\›4)zÏ Z)gÍ”$‘‚žDê7)¥Ü4¡çó!¦Ð­Yˆ %¡/”ƒÆÐ JC¯¢¨Ä¡S‡žMjC{hR<‚4Bõg+Ób=•CT:ÖAsù%Û§¬Ûƒð3EÎÐ.ÁãÅÜ‘ùs^nÌzÙ?qãÿ4vVMp’Îæy:Ÿ' D Le.Ðó5Â¥Þ{ ¼¯ZM)Ê"mçúÄȯLêš™%?¹(Åž~‘ê O6©?'íœf´ †L%Y@•æ‡L —‘ÜÙ=ý¨÷ø £ÙQ¦O™é%y%ì^ºSýD#aÙEÓä]“TБÉ2Êu# •”’¶QúF·¥-wt´zÆÁx %­š´\2ÌÛI‰`«rÐ ˆ¬ÒBÚJyæý£ŒTŒ¾Éãyk)È<št—ZRÕGYç…šúñz†Rà×½ ø!®‰mê‘OßæßÔ ´òRΑ˜£Qôžº¥…’O—(D÷)Mì§>á$n¼xÚDÇfù„¡Qt=´‡ÌóFÀ÷º3$-EÑ¢@¬ÂKi¶aHåÓ€‚Ãh ¯0p…a-×^HÅ ¤a7ô†ß`RQjqàfn;t‡ï`OêfzhM¨ƒ€`90à€ˆ*=@ªJ•<êRÅ |à\ÁÀV5«bÕ °À=¨•„Õ0V32~À ÀƒµŠU ¸€€§*V €WÕ¯Ö¾ €Á`e«ðƒ ìRÍ €¦êÀ‘¬šU!k@œƒ >Á/¨À€³Ï:6À5 J`0ƒL 6ëc¬`ÜnàJÁ?øÞ µÞÖ`þêpe†u¸&@0Xdàç € €`±à X¬€È:xH¿€@@м€€€X­`à €ŠÀ6xÿ`ƒ-püˆv`üƒg0 y…ú ¨ƒK€4A)(OàøK J2P©@‚À>ȯç  {°²>xíàÀ z€/°~`×°]A!€îz°jhŠÕ °TáÁ"È~ tx ]³*“%± ìTÀ z0¨² ¾bÖv°ìÁÈXµ© €K€Rͪ<¸~@øçµÄR€ê*¶ªA8UŒƒp€ˆ@"ÀàƒEà °j …z ¬ƒ*@þ4Õ€ <×h§ÅŠ}~à8ƒ#Ð|ÁsůÀ¼Þ:.x³œÖ Ø€*Kžkt®õÈ2×Û:+ ò€×W ‚mgâ5àƒÀæc…¬`”U) œí±m³üƒ}`mQíd½ñ °ÖÃÊY“+8œÕ¸žÛº šjuå«è6«Â è- «Y•¿î~ `¾%«X  (2Âê«Üv ÁZªxVÀQͪ·”pq @ǽ¸äŠ\ƒrIîÈ­®× x\• r•ê?Æv(Õˆ@ÌŪ ¼s`m.²UX€ È@ÀW}.p«gÀ¾*Œ,·*—³B€ÁJ8+  ºœ VŸ Ô-×õºœlÝr;vë`mº!»Uí´k­]ª  Ûîz@¢ý€Ä:‹l!« À´ƒið ~+!ø\àÌzøîÛu ”B~@Epª@HU @ßµ7˜7ðš*x¯â¸‚{ >/dk–°Ú`m®-®[÷özÝ\K̭ȵȕêæÚå*| Â­í»Æ·ÊÆZ`ø.è®×íBßX[l‰e·»€øjy뫘¾µð€àæ>ÝUØ>0ì4p·±vàÉÛ>À{€Ã®% B,ü%¯x ˜?ð +¨±½Àø žmu…à€,Vìs}»`‚ ÀÁ›}»àœØÀT?ðsåø8Ö¥ÊdI,À" ÄâƒK8ÀÄE@\~-\_š;Gàk›ý@»€ ÐdÕ"¸é ò+&>ààøÞPÂLËî€g ø@/øù  4‚tð`À?à–àä+ÀÀðR…ïà܃|¬)øùàð8@c;À?x6àÄÆÙ9 w°ìͪ6ÉV ‚Áv+¸à¬rŸ+ÁØ^ƒ€t0`Ó>W6`Šq{UÅè`à¶ðÈxùÚ\@—@ížÛç: ­èþà$Ùêšk3 ÐÁG<×ß[b‰o'.±Á÷°{K¬¸º$÷ö‚ã¥úzÀá–/ÕðÞpÌ ¿$ü`‰ ÈÅÐv²î`аTSE˜·Ú½ ÀøË6¸D@‰Ë- öZÀdÐ+ æk`Œ~P‘Ïë†6€³~]죮w¯œx©Z]íª‚IîJF¶6ç`—œW3þ%Â8Àë]%ŒUÀpäÀ ca-Ì…×À2®ºy5”MÀ†Ý0–Ú@û\½j Ú@ Ä…ø/c™kñˆÄÒ˜ä[L¬rƒ- °Ö,‡bXnÀ[¾$7ÜW º¯}¾ávÔâÀ~ݯ»%yÙë€ýÛUü¬ +`Lrk4Þ´'·ä.ÕÈœr'³É½Ì–y©nÜÍ 6nÇ5¶8VÐ(U¬Š<€Ä+àärÀ ”ªg}½ jД@&xH`æBpbØýàPƒO0üÀ`J KÀXªàÀdÕpÐÁ/8Éà|í\]ÀH  ̃ð pA;8·9àøo°ŠÁo%Ï­ÖÀ <ÀЮܵĢbðŠƒÉ+°»@½ÖWrð^Ù+øþÔ×ñš_À' /V<Ÿ‚&P`ýÀí`´~‚Sðv'@0zÀ `‚J0ªÀ8ÖÔ%@ ª@‹XU ã=úÁ8ð ïƒ>À|t/Ú9ë`Î "@< ÄvƒéJb¡ôt¶`º €¥¥Kìt…ÒVºÄ‚0] —¾ÒQúTW…` B ¾niƒ€}#+&Áî¢éí˜p˜&±ñ8´i=í¥ ‚-ÙvéíŠ €Ȫ‹:‚pÉ4šN¬ Øà?]¨@ XÓöØMÓ‚°@µ¢Ž¬Ì ˜×9 ©#+40È"òv¬Â߀3ã9È8àÀ.’½¨cº[»Á«' ¾cm’õ¬¦ V+üê`=rËŒí u7@pôŸÍ<œZÎ hÃõ¸þÖæZÜ–k}®À×ìZܾëtMXo¼×âö Üëv­n+xö€ÇÂí꯶À&ع6<‚€ öpeÇ Ûa[ü"6ÂöÆ?ÀbWð4öÄÎÆÛ—Ø\»<à±ù ×Ú“ÍcýA®å,ôƒ\‹>ÀÉ–Ù$ö ÛröÎÆÑ>»emœhÙÐW«í£´s¶Ñ.¬Ð÷8í£Mgs-øô€i‡ã‹@Ö†ÚÃfm¤½µÀÊÛЗì}®ß,u=²‡€mãè7‹_·ñ1Ûø€nßÞ3€·õ¶7¾}ÛSìÀ=±@ÜnÛÃÕpn}·7a5·ñèkz¹í5忬–;^Öy­¹ý5çÆ×*]wnr½¯ÿ,é¦× ãzf–˺3³d~Ý”™±Væ•‹lÉ5áæºàvÛnÇ»u·Ax¾Û]n´+¼7R€pïq|¼µ.Mîºez?o±û¼Í-×=ñàLVâ}²÷dÅÀ†Û{ðýÄ7@|ÇZŠ­¾s­·Ú¬opÚ·7îÆáÕ÷_s‹E¶Ú>ú \sÖÿ}³÷A®µ1Û€—Ø•]À_vϵ8ÀfóXðÀ¸ÙúÀjŸƒ›Írí<8À/)ÖÁ 0q'X±AÈS|kYü»³¸:»©zq@k&^\ ;cŒÆÿAÜË•{q ²é8þþƹ×ãX {Ï1Ûõâ±v°ã7ÌwÛøWÇÓÙ Ìã,\b9dÎð—rè+'+5ÇhxŽ;d®ùñ¸hrƒ8°wãÓ7Ýràp0Ê£o€s+ØCÎuoÀ,OåáÜòç­ËQ¹IN´»Ï6`õçe›ƒ >ЀËþÝytðéšÐñgý7Û¡+òˆ^ek¸Þ¸ ôS]¨U8ÉíÒS:‰Ÿi/¥Kì–æÔLGé1]¦G:‰ÕÓxš£ÇãP ú´KïÔƒzQciD-Ó•ì.pÔ­ºPG@©ƒz<Ž:@SßôxÌ–õ±NÖÅú©CDyLP-1.10.4/DyLP/doc/Figures/primal1flow.drw0000644000175200017520000010623111171477034017017 0ustar coincoinª» €•3€ ˆÈ sÇH6eb P%Ì™2SÒè)ƒBFŒ.r°q#‡ )XL3›0y˜¤³ðˆœ7uà,lH Š r^Þ™ƒBH!K‚H‘òäJH!rê̱Ù$ •"RŠaà 8X¸D‰" )B*òÆ ˜rPÀÉDf 7\ÔØ8C†\±m»ÚÀ¸VFÝ»aEº„)S•2xX"UÊÔ)T©T­j˜§ë×À7ìÎ!ƒ† 1XÄ\umiѤ%ûQÀã5>xPy„0lÒœq{H'O¥€À­›7¾0@Ð #&6¢PžH¡’䉓 L@Œ–‘¼dìÒÝá4çáFL6éÄn„yôeÔóð bÌœØ=ß¼YÓ&Œ›õ™[e‘FmÆw $—œbœ4Æ"ÔdžøývIL€'¹qF•›WÐßkÄæl  @F_QGn¸F <”ñ>(‡eØãrt¤a¤Ša¤aŽþQ =þd9½!DŽñ†‘räÁˆÑ1D†ÑÆ8’¤XIÈÇlT¶ØR(4d¥a5W^%o8I‡Jg¢@.ܰw’å`ƒ 26Õi[U(fš±€Ã¤›¥fšd£ÝºÖj­½ÛlµÝ–Ûn½ýÜpÇœrÌ9tÔY‡v”†÷UáWÞyé­×Þ{ÝΗœ}ø ¡þ8†€<h ‚ 2è JH¡…ò€‚†z¢#–袯1ÎøÅiôÇJ¾A>©Àe 4 †Nža[r¤ÁB;T)1Ãv8ì^sTrÄAÆDFd~òÈeÌÁPLQ„ÉAº¡e:sY`R’QßgÎñ²•W\ÆÅ ¸Q&GbÙ1Ð Üvs„eŒYæ™i®Ùæ›"Å9g¦2–§cQ­j•Ÿ­Z&¨H„Š(K5œ†C¬9pú·\,Ž+g„÷}¸f)0XL ‘ªØ©í)÷Zu¿Ò[qÍUƒgoÙ€š®‘­•ké,ðú⯴}œl±ÀA…lq±-»ÜxÏÑmu×e·µ<€BIÚ‚Ÿ·îq{¼¸õݧ¯¹ûõ÷_€x`‚ë.|ƒÜׯ„Žqa†NlØá‡LâCÃ(#+ì$ÄPSl1ÆY‡,¢Í"ƒ-vbd+ƒšØä7)Nr¢“(÷6Ë•Žn”±[ãòf–½uE“ª g:0ÊQI&s—Ù\'€æ£Cm•:Ö¬N6­íxà›Ø ‡8Ä:¶˜…»gM‡wÓúÝð€¼)/6Û‚|Ø“<1žh\ÎËOôÒE½vY^Ù“W÷"ô½{‰/_û*_¿Ð¢€±¯Wî3˜“Ò@8ÄàEô“˜“΄6 §€ d’ˆC1®Á ,+’‚M-IFúŸ™Ð$@³m P›gX9U=0+8¼C UÁ•\0ƒs©®HB]vðƒs¡ qÙ)6îq…‘+èJVEPs¢‘0ECÏøˆ§;ÍI§:_!1XP4NÎÚMñvÎÒÝ¥å;ÐÇ;]üÊ‹§¼1~«žgl^¹Î%=u±Ë]׋×öæå=ðá‹|æóWúD´>‰+E+j ƒ„:ÜA€k0$"¹2¨A)óäÅ”4¥ú ajk°dÈ3°eb8!óÐI3pÍkýCÈ"é†N¾æ“$ex¶¦-l»S+ãöÊ?¹*‡x£å¡léN½E„5ˆÕUq•UÂ]¤s¢Ukй:î…É”¡R™ÉTg ªœk pà™Q›¸"b7aóM×-qœ²+§å‰Nä.:ë쵸³ÅkÉó‹ä1ž=Ë.úëyüd㺪÷.ì™A{óz zG„îñ_ ØDc¦4˜!}M"ƒ4†“NñÃMK_ÓÜÐ!\{ƒåHœâlB%%QOiÔT"unKU[çËgBu–z£* fP¹bu;›ÁÁwUÙn»Ý5¯Y‘9µ2Pº6Äœu总8˜AV²IDþîʈÞ–_£Ø'¾n°É)ìawÇÎÅOx c¸È(Ù|^VèšÞfÝØY†–^£µãøôůó¡Ö]]Œ†±$Éï·³UÀg/¦¥•µ¬hµE)GÇ0†: d 45ÁÒÜ`†4È¡ \s)ËÒÐÛ™IJInÙhÀAÑÌ&k…ïå øVY’Å,hé [dRðŠ&,3 î›Þ4+ /lî% ʪæ2«;e5+¡ê”«Ý$K;éÉO‚2”¢å½5Üru»Õª¸nèÒ—°„3®aé%rø”KIeTÒËÖV÷Uv­m‘|ù×i Í›e"îM½ZÍ6ЪÏÁRgI»9/A÷* B¥æÁmfé?ß9 p`ô¨çÅ颺¨ÄÂÞ¢;æÓ•/£7W_,]45ðÈÒ÷KÄm¢îÞ}U"Øû»ŠêxÝù`/<² _¸žÆ‡÷³…ãgå(Ú‹”Äz4ñBQ|Fˆ²L¢*ÎßÖ`Ö5å´ \³ß' ¤r €Ê5e•ñët‡Ë¼nÜÍìó¼Ä@Ü5Àå±õ2VÝ û„»dÜï­ÊKc [¼»æîçJ|áKÝ»\ÕýzÑzîÉE—Ônýæ¤ù‹ˆ4¹Á¼ÛžWn˜¯–»8énà%Þ=ˆÕ{;[p¿Ósð‚¯,÷¹F ÿóžZÜÓxu„qxTb ÕG Õ>A’[ŽTc6‚IöRL†¥wz£4eEee5±LZVjì&³lµçáUduÂv{(HgÏnßç|¶Ç‚›a.h{´K7ˆlͧ‚Ï—ƒ¦“‚Æ6}æÆ­vñ{57¾F{Âv‚›¡^O(BRø‚œÂGg‚§ÁL÷|C·beuȶ…_!†]ñ…åµl"¡L®_ÙMqe_:wÕ_zu~ø6`ëçDü¦,çôo –X{G\dp÷7a÷4x–Ux™å§xHP!f€¦%y èq#R zœç%9ñI86©×rÄuÔçuÖGC×&vÚ'70Må¥~Bonwp—~‚µo‚õ~—wX4}÷X'aË“˳ˆüqˆ€6€ æx¥ywb ¸Zïó’[jcD"I"“ãSjTFB%œ—$g€dÒS(ã0¡'5#U¸2jX‚\¦'ŠÈ\´6Ð¥Š2§„Є]µ”jÀg:X‘^r• T^`ÅÄ4Bd(}¦X„lˆ„—ó†Påm1f7~¤S‹ª‡q—‹ìׇæDX€p¿è`OÙ‚p—ˆú§O˜ÕÇa·xG€¤•qÈq©õG*怸d`Ѝ·«g„Ø†Š¦‘½f$¨f9g>ˆtWˆ•Æ'u¹à¶{{!±ƒS·…4¸{ÊF–aÙtd˜gÇtŠy}«(•í–KñòV‡¤co$‰‹úv’»ø‡x-Ip…h2‰4yŒûw“ʸa‰€Œ÷ŒøxwZ“W*lp”0e+·\Mùrˆ}Øfj"Ø„U)u™–@w…°é•[(2(cÙP¨–µi–k©›·y–l —£â^t)sv¹96ÈC#ô¹Ç—õv‡U’ÆE`T€’FEðÇ`W-/iˆ‹‰ˆ”å˜6‰a‡'™ÌHqVP"v€‘—€÷G#Ä$,€ @$tàcnš6ù¸”,·åCs a—œ+~á‘{I‹å÷v™D&ɇƒ©’…郌1 xŒYžòŒ™žÿ×aìéŒîI‰Ò¨™—H”ã$Jšœ5ˆ£GJ™ʬ÷” ‚cgs¬™sjF º›jö…¶i–3°…Ñ•y¡¤3`–DTz…Oº{Uº¤€k¨iohFh vhÇùz47#˜kášZU]˜â†f¯æ¥6¦b*m¶f¦š„iz]klRGu(˜…–1VÆÄly€i²¦ÑVkeZmgê§ JS•jÜ×Ëù(°ˆ|²dšxú¨dJmP ¤­È„Tɦ+¸•†g¹T†‚¢¨Œª´6ª·ö£ºV©t©,±U}«ßG†ä†Š§Y—ªÙ)rÕUµ’j‹šo%˜vG˜Ý)ˆÀžŠé¡ä™p"ŠžšU¢;‰w™Ñ˜™–8Ÿ)F0úÉŸ&—%r0šªçr—ælš§Jª¸šš!U܆_i›±b¤=ºá*´CÎ,Š®ïœÔ÷!ÏÀ ÒL-ÒØÈÐÔC±Ï~Ë Í~)ÐêGОlТÌ`½Íš+ž: Ίè¶i­ž¤+®>ùž­ºœ¹Ërí­;Ú”xš÷ MùåN6 íNØ´²-MØ‚UÐ]m¹_Ð6Í¡d­Ê; º ·@+·¦;ËvûÖ×¾¼Ô¢}¸#:Çšv}­ÚºØ®=ØY½ÉÆ!Û3]Û5ý7½¹¦Û-Γ ®A;·CKÔµlÔ$}Ÿ- RÛ\£m¬ûJ'¼U1Ï<Ý-`Zm\ÝÙL³ ÝÝŽ]Ö ·Û=¢¾]ÎA}ν¢çZÜ«ÕÞ>@×Í”S«ÜymÌ­¸–޶ سÂÒÔíßÖžØ ¶ÝŠ­ÞüØfÎ’-º”½ÖæÝÖÃ=á««bŽá ߊœŠìᎌ8_!â>7WUWí¬°]×9Û~¨Ý¥ÌݸýÝ}Ö¡™ä ÜB-Ü™mËëÍ äðý»C^¬Èy¬o!þ}$ÞävèµÕýÒ+ŽÍŠmÛXã ý¡\ÞÛ¯ Ô–M·˜-áÝãœÏȽáÄ\ä¥ W9çÜÑÏ%.Øý~ÿ­âS.à{îâbÍй½å4ÞÓ6þå}Ù*j®‰¾ÙHÍèu­áòÍ᤭ 1ðÏ †ýÜÚÌúä™|ç…ÍØÍâ¤l¶}>ÖZ襎֧>Ñæ\чÎêš·f~ܱÚŽNäË­×p¥ß”‚Ò·—ßûÝë¯ ì‚•ç^=à‹¹ Óɾ­ËÞåýÛ©nè«^ÔëlÜJ}íB>ÌÚÞá‘~7Ì÷)Ï<–Ln♞‡ÁŽî´­î|þâÈ>Œàè >è•ÍÖbŽèÓ~Ôì}æ>ë¾íF‡&íTgÉáòîümç(ŽçNìÚÌîž­¾Ê¼]ñ?}ñ9žñÒNæúîÞ_¸iòoëúUB¡Ì¼nÕ¾ŽÕ/캨ç-~å/êï¾Óñ.è;ãÁÎ;ÞêÔN$m0r¸…Iá˜ÁõS#e$;€[Dr»D’d5vI™´II0ôGålަÅÛ¯œÁ ^ÁU²‰UkU»¾¤g±ÆÄìkÏd<•›ÇElÁøÌ™ÈþÞ÷V»¯ ^f`9çïòšžâ0óT_ìaÍÍî.ñ¤Ù¦îåÎþàÐ~ïéïÞÙïµj®Ã³ÚÂsüÃù§V½ZÂF\ƒ"”tCX Eÿïµîæ­fÜ5þŒé¤¯ðJN©?óžå®¯ì°Ïì²OïϮꨫÎp½Zš'"7åy%Çy¢w1¤§÷pÌùkÁZ‚]1ý†ê«+Ä !3NÈ*Åòac…LØÀ)ÉŸÏW*€«+,Àµp¶Žó«>ø¹í+Üó;ÆÓ+wQoûÕt÷é¬^¨k}9 ²Õ$ò7ï\¡;onǹº˜Q¨ü®÷Ý?È÷§$ŸrSJ'Ná&­’ŠN¡2CÌíÁ©ó¦– ¡Ú D-ÁeCô0 =³u0ÀÌ€“Öôœ,}/mê‘ÀªgìöÎ;ÁzáÞ?y×àÆ{cN½UËðÓ5º¸á 4@ÎÃà(t€L´8€1΂Ñ8 xÀ’Ä®á’DY°$¸Ëí.û¼þÑðëÅWMNÆnXé„4h’I†"F¾ˆ 1M<°Rí?«+€w ±I2¸B i“,œK§j%hn-äM¼°Qü¦Cqá熰*¼B³2ß& õ%’Y²¤“ªáè hæŽrq¿1¨úßñs£Nü­@6hñ¼^˜ƒƒè=:èÎV‹Õ¸\c ø13ÈÄà(·á àŒÌ6К»‚ÍQBÉ2Ã5„rÙš6*—’¨c}Þ- j½5ÈõÔZyûzîçÉÁù€ËÚ¡óx9P˜55F6ò6~?D ÒèO\x¨z¿Û³ž 4O,° ò<ŒíðÝúkg—'èy6ûª€Ÿsbø­¦T5ÅÎP1 d+èQ¤%f›ØÿyÄ+Š1Å<æm* +,XKpؤ°¸T„L“A@( nÜT¨'ÿ€d I=Ÿ¢A¸Tä fÆ/\>º˜KÙô^}Ñ,½…i¢XÿŒŠdÄb–—”ò^Yð þº¨ G`Ã+eðFÄ8ã(¢Î³ˆ`ÂõÄÛ·þŠ’ä‡v­Êp 8æ¨ú—#‰Q† °ç3Á’`ÌM¶QzÝ?Ç÷ÂÆØ3R[qåEð5‡£æÛUññùFUˆÇ„”ŒJj‘ÅSkÎ"H‹d-.ǶøáÌÆòM„Q.v/¥G¯aô‹Â“kboqlêñÎì¦ÆÑ Ô±ªatÁAѹ¾”ð¨ÌÚ†—‘ ®¾Æfó&ÞÖûŒ7î"žÃŒè)ÜÇ© ç’“ƒlýÃQCï:57gýÜÉçÀoVáì`?lH—ërÑBÄg =£Ïêz R4Ú>õç ¹@s¼O$ÖÇÎwÌh€GÈ‚¢cµI7r絟”“i2ÀÑĈÇ\x«qåϾAI)P¼O¹ÏÚe8lò ß*RŠßç!y»½°£Söó[-&ÈnHóÀ_“Äy îE‚ÆzÃÞÆcg1(®–½eIü`†\Ml@KLø°ÈB L @ œ1PàÔ™±dÜa„À0Ü…”Zb!(JFÉ…¨U˜”D‚ Ì€)妬WÔj EÇ ñÁhR)¤¥¦\”A¿d¾ _&å«L´’ ÙÊD‰+‘YV°oŠÏLÊq#lCí–¥òV2JÓ†ŒO½¸£2ZKF(¨‰j›R“Ò™@yQ¶³,ÁÒPfÊméÁPì“rX¨£á±hʹL—tb]žÊ‹)A¿œ”· !€€3@$p¾–û@J±âŠˆŽ€ea ˆþ ?Ð¥¶<•êÝÈŠ0))F˜Ó L}Y,Mš &“ˆ‚Y^W¨ärdšJ\Y)(Í£H™”7h’—‰”̔–2—\„O©2Ϙ•“fÎ9§*eÀ¤4šlà†œ7€4k%É䔎²S “I©%ÆÎ„™>3ibMåMœ¦Ê”—cà†²'2Åf£4ÒäÛ´JµÉØæÏd—/¡¼Ž0)ïÀI¡wóTæÍä…—¦(ºÁbŠ@¬@qˆdbP²à8wä¤Ô²Ø ¯€ÌŽH8•Ô²f†@:K§é<¥“]"³…)É*…,©œV#bNO©9o眒Œ]f̬@uF'êü¦Suö „^çã”Áf-ÔÎÛé9ñfÖ| DxJÏÏI3³¦£ä ÍrO2‘•¦ý”Ÿ¦SuPýé?ŧÕšÔmZPóéAm¨át¡T„êPõ);e¥Éô•ÆÓf*KÇ(4…¨Ö¤^S‘JMIj5m¨uŸRÔljR'jAŦ-uœ*€˜êRêI]©0§ÞÔ‚šRUêKÝ©6µš^TwªL¿(G§õ‚*ÕŠzN—ê}¨NõôÔpU™ª9­ª×tª†Ô¨ UjD…¦[Õ«þÓ¡ÚJ‹*3mšH•ŒµÊV×*œz«oµ­¶Õ2CW/B «l®ÂU¼ºVíj]­|5Q½Wùê_µ«•°Â©ÀêWýjbU¬jÕ°6Ö2óX +c=¬€Õ°*ÖÀ:X'ë]Õ¬–•¯zÖ@V3*—ç’Ѥ›t—.Ñ}ºO—é]¤;u‘®Õõ¹X×é¾\)›`=jØ=»h7íª]´»^×®Û}»p7è¶Ý¸KwënØ»vwíŽ]B›TW*D…¨kôïúÝÁ+xû)-¼5ðÞÅ‹x¯8¼+Uñ:ÞÉËx+o¯3•—òÚÓ½;eéi0Ÿ7ô‚ÞÑzE¯é%½£õž^Ó»zUoê]½Ýtõ¶ÞÖëzgïìu½µ·ö’ÑÛ{zs¯ìõ½¨ø²^×»{q/ï%½ÇWôrÞ²{x¹ª5%Ð7úBß‘ê|«©ô•¾ÔשöÔë}³ïR½¦Üwú†Õï«PBøõ¾Jüžßñ›~Ÿoøí©XÕýrßkº|c®b­êwþZÓû›¯ï5½¿ÛwýVSþ+ýïþU¬YÕüêߌ€ 0ö=À„µÿJßžJ€­¯¦¦õ·£Ö\M‹€þÀøÿr`j*J° .Á"˜°öT ‚S°^½¦'ø»`¸š€YðžÁoÇ` _°5µÁ˜àiºƒy°P5¦í´¬FY¾ nûªÓ%°V´>áÛ `uëÓ…ÂŒu ûÖ*,……n<7 ],Ü…ƒî½¯bØ SáûšÓªw-Ã@7°.Ù(ŒW¯ðm]²VX ËÕ9œ†ãðî±}Ø=~a> ‡Ý#lÅÃ…øÖéVB\‡õ°}]²m¸»Êa5J†ñê­Ärõòbâ¶z‰×°{å«kô ‡aPL‰=±|%Åiô bK\Š·0FÂU»Ê[ ,s‰.Ï]£Y×X\ìt™®ÑÝŶëâûÊ‹…®Ö°—7G]`œF•1ͽÅjïÝaŒ^‹qÐÄôÔšÖ!À»17Nº×t{ãn ŽË¯8ÇC WÓs<ŽÕ15Õ­èø#ÝpÌWãq:žÇÚ¸Ç㮫sé1^µÇI{Ô•Ka@A>È9!d…̲CnÈ ù!?än ‘rE¾È¹!gäœ)2BÆÈ y#sä‘ ‘é(I>Éù! dµ ‚@K~ÉÚVÛÞß—ì’kòžÃ÷×&Ûd£{“{ìLÖÉ0¹'sØœL“ƒråÉ>Y±e›“w,QÊMù(ïV¥ ”]rTÊŠu%ëR5úc×hÒe£]¹ïáh\FÃrýÊ^ÙÉŠeNœ–?ìåEË\Y-§bT|–å2åÇ9,Ûå3Xµò+úËT‡®æE±(Ò1aÌ€0Ï™Àü—iá`~̇Y˜$fª3™_‘Ñ…Ì8À0?æÊ,^*³cŽÌ˜Y23fÊ<š_h^g3sæÅœ˜?sh̬™1sæÓœ™1óá-͹4»fÚL˜có_ÖÊB çá,¯p>ÎÃÙï"gä~‰q&Îõ9g2Úœ—srn¨ÖY87g霣svnÎd4; åÌ·svöÎÒ¹:sçnŠËsøåÎ%· jåi;n—lX¦Ï$–Ü&YX;bë³»UËøyÈêç ,Rf±÷ÙÜægû¼Ÿ´€^²S@;è; =ì|ÆËø¾&]gÑÚE,©ëi[´1Ñâ5 Ãb¢º„;¯G­ÀÔHOS!-M‰t4Àê6Há"½¤t“6FúñNå܃ip•ÎÁWNá`8%„©4öÒxG+áA룛¯SmÎUMGU5}¦ÃoU¥ÎnzMÇé6Í}Óôœ^ªày¦Êé:½§¯¯æÓtÚOGU8 ¨ñôVªÍY+óßñ̨€ˆÒ÷·Q7jH Y¡©¤vÔ”š°^êñœ©_ð¦ÞÀ`zH+ÖM ¥Ÿô¢vÔ¨úQWê-]Hu”ÖÊ“x.[bh«Ñè!Äé¶Ïê[«ùòf±½:—ÊaZM—}µoEĬXVgâ2J¬“µ­þÕV+']¦;­‰nµö¹×šæ&Ý­‘.µöÖÖ\wkë‹k4¹×çz\çÜo®µ5×­Åêç²ëuMtau±6£Áú+äë–|¯õu®^ËlUWeeÍ– vÀ&Ëû:a÷k~í¬õ²ØûY7l3ª•a&½Øccl"€8¶ÇvfB „쑽]Jv“J³&»dl‘Ͳ;¶ËöØ;f_ì3+³cöÇþØ,{e ”}²OvÊÖÙ-ûfwìš}±5v̦Î/ÛeçìœÍ³·‹ÏöÙ@;d'm˜m´¹1цB›c¯×¨Ý´QöÓ†Q{®dí -tÓ¬Ù6Ûñ·š>ݳ}¶Ó65Ñr–m§Y·=M×¶ÜžRÕ÷m;Ý»=Ì4ùUÛ{ûnÓmij·åö›NÒu;pî¼=Mµ2{Ü;ró±jH¹+·å®†’;s?îË͹)·æ&£š»swnͺE÷å&Ý™{÷šn˺%÷êfÝ­rwnÕ}ºc÷æ~Ý”»bKÛ•È»ßB˜¿;xë—mëd{wïÞÈ;xï»^·ïNÞÈ»+we罡·ò–Þû™z‡gë=¼±÷…¥ÞÈLx_ïåíaß‚ùæÝâyGhï½GÁ7÷–£?Ö/[_5JVð$Í‚Zzš8…FßjE}«‰ô"`i#°¿kÀ6£z5ŸêUa"Àip‡«b…°:Šû«X8oà ÚžÖ:êƒ-¸màõÛIóo>À 8œš¤œ©ðÝšFó·þ¾ßYЪ®\5*­ìʵ²‹¹%ÿ —ü9`@¼qÖbº0+úÆ^(/öMš ln\^œÙÊ=´Y¼ÜpLj™=mBÆá‘L‡Ëî’xßX:Bœˆ"ŽÄßM~iRLÜ8ñ9CÅ¥øvÁ¤9|ŠÓÑv8-ìâFÊŽî…0ÞÄx™ÉC ‰/qLªÆcÀoãW‹»ñ-.V„I±_ûq!^Æ¥Égâ9àŒ³ñ(nȵò5¥º <ç~òPNÊ0)/åÖô”‡òQ®sñ2*¯¦ª”³òSîÊoî,å9w>‡ZX+c¯)/ßåÀü—Ù_b}y0?æÄ˜s kÌ“¹3GæÐ¼§>ói¾`¥õ'½£o¡3hóžk¤ºyg¸æà›ßÑm¾Í½¹7çáœ]rÎÍÙy:GçãÜœ×\v.MÞy:—çFjÄâs{Ïéy5¡çðÜžãsÛ„Ï×k@ïçø| tE=ª‹p§†«EXU‡j&­‚@Dèoõ¢›ê†¾ƒAµþÒzU£OtÒúªÎÒ­Ú¤t#ÀÐ5µJ׫@¸Dê—Wc:’é0Ïô|m:GÁ½¦ëôŸ~‚{úPwé<½Rût¤ƒº né%=©Ö"¨ºU;½©oÖ«nÕo:M«\½ªcu¢n‚srX—éd½u°.Ö¯zV/ê[½­Wõ·^Ö•º\§êt½›õ»®•™®WFºkÔ¯seÀ®FËõ_×¹èö¼\Ø;Y†ËhT°ŸežF%;ÝÖ[9²;öÉŽØi¸˜6­Ç–[ö3 Ùéf¿ì”]³ûÜ·œÚM»Ï]ì87±¿öÇÞÚ élç쌽²ŸvÒþ®e;Í…í7wVl;Ø;{ew¶À+°QËÚ{dGîÅ=·wKÛ{#¥îÑ=¶vèŽÚ[yf¿îC6¹ãÑ4Z± ô³eКzkÝóm¾4е±þAgoöÞs£.}÷.:Ö¼YfÞË·z·Å÷ݽSØl»céèî¦ïëÝywe­lß|2kRéü+ÀXab´Oˆ½ðs"¿"5Îáqg þé! H<‰µè<Ô~í&å [|†wȆ<ÆCÎj|fˆdÞÁgAtI'üÕ¶ð0ÃûB„¼áq@‡7;!Äÿs_â¹C„DZttÅgx?䲌—ñ6ÞÆWloùðâÏíòá!sf®Ð=³C^¯`>ðyy¼(æq3™èfÞʧùý>ç ¹†wó Îëf.¿æ¿üš÷È yÌçyyŽ›oƒ_²Ow?]m›è¡í¢‡Ð  ÑïØGßc%½‹¥ô,n+z§Ëè^èÎaiìC}Ðýô×ø³Ëb˜K‹«²A–FÖËz#@h½­¯õ³~Ö×ú]Oëû†¯+Kù%ÿú_ïê»i®õ·>Ù{XÏëwý°ö®þÙ÷ Wìs}7mö¶~Ù'{gì‰}°—öÁÞ%Wûqí‘+4ÕöåÜGûnìµ²~Óo¶)è¼ûÀtfüŒÞ¾üÝc ‚ÌVgÐ ö>y_Óyï÷;Áß÷ö>à{kÚïë¿oøûàroM¾¼ï÷¿›Æø…¯¶õýÃ÷øü>àÿnljñ¼Gøxï÷|ïïù=È—øFycS{Xk¾Í¿ù8?ç§[Ïó{¾Ï·ù_øç ý¡¿ó‰þÏ÷ËU5é+ý¥Ïô›þávúP?êK}¥ï·§¾Õ¿úK¿êc}§ß×ÿ†×—&GWšˆý¿áh¿þ×_ºf¿žwÛ´V4zeûN^ÖŽ}±öç>·•±vì#cO›÷Ë~Þ¯ûfÚ²ý°Ÿö_­ÜOû€ìÃZ¨¾W}‚ã=¤CþÉïròãwü‘šòO~$­ù1ÿ¨îücݲ^~ÈŸùG¿åïükNþÊ¿YWé×ü§ÿòßtÐû)ÿëüŒŸ­‡õœ Zõê]Ÿë›µ÷ÃÕðüûy?kë\ÝøWÅzÖë”öýÂ?®žuå?W™ñ¯Ô•Õ÷OÿàWiþò­ÇüèþÉÿ²¦þy•ûÿ½ýkû_áÙŸý—ù¿þ ëü·ÿç_ýWñ¿ÿõªîÞËf”Y—éXu8zXoHÚ)€Ä›^f–RVÜxÙ1€`¨b€ÖåÕZ€J–gÇScZhç†ÕR¥.U¶QÍt·K€¶T-§ÜS, ØÛÁ€µÝWP±‘€ (úRßݸÚRà.eà倨T¸&Y`˜ÖpìöÖl5ËÛ'çd­oä›gMUU RÖˆJoZà8"nÒ”ZSŽ›Å&‘rD-$´FJð7Ôr`¥@ë‰lwàx&î{`hOù±^~oæ[`¾r."Xcñ}màßЊEšA¢ãÙ Q ÞF@ gO‘xÑÔßÐ Ö3ÀÊ ®\A€Â×’™‚'D — Æpàè†gs`ˆ­Dã-Ȧd} æ*qƒ !¸ù‚1€"¨:‚W+ J‚‘ U ‚mFÀ‘ b‚œ ë©q£ X ž‚rT)(Gùe·G7h;1]Þ 7häƒ\`F2™Ñ…žƒµ98ÚNð`7È­Ñ\á <è–ƒë :Ètåƒæ`‡×áŃñ`¹VÞ÷ ‘ÇêƒêàAØúƒTÇ@„·ÇÔÅÒzü`:èsU„ ¡;8ŸQo: Š¾óñ–r€íÛ}¦wô](ÖJxÅ›IØZX÷ ‡F€¡K¨~X7`Ey<ááö„@áO(ö„€Y¶…HaP¨ …E¡N¸RA^ÕR(&…HaSJe^RÚT¨R…Π|¦êXdWÌ5ïÍ{ _YxåÝ{@Xçš…l¡!Ó…ýžÆ×š…1ZHž…xa¦„Á…úM[(^yu!_˜æ…o¡]8ú… @`hÎ…gaL—¢QUdx’e’aeX>\å—exN¡\à”V¥²t_aÆ|ÍT+©Fp¨áixk¡Zƒ—i˜¢†«a|†P‘Q®áih[˜Vk˜ª¡j·ámFg»áxF½†ª!nèS!Tµákø–†Á!qˆ†gÆ¡nx©õ†°!nˆô9U]u„UUÙ¡q¶j]¦Ú`Ü¡xè’‡QUDG¨]_1]y¸ƒ‡,˜{ƒåiíazhr_Žaã X W┎˜ ÀÜju!ˆbUp{0P ‚X n ’’Hà VYEp ˆ¢/Ä :ˆ¹‚u!ˆ£ÁJ|ˆ]A£`vˆv'„"~©ÍŠø7˜M "†È]Ü]‰ƒÈ]d8@ãr<0N$M@LÁÁ”5‚’@Ô.nO  ÍO¢X`$"‰ƒŒ‚ˆY@@$J‰!’8èpÀp\‰Yâ–($Áîò”W¢ðKBðx M"šÐ$˜mâ›(ЉdÃH|q"E0¿ Å M3æ€Á u *\àKB0Žü÷¯D(SZ!óFL™3\ÀQ£"”(A% 6et€xA§ œ0bäˆÁF2cÞØTYbˆœ2a輑#3É6aÜ!"'Ìf–‚`ó¦Q£Hé¤yã†HÒ˜ ®”!bJ8 bЈC :bà!ŒD¡„9SfŽÌD…t•šÆÍÅxdΈÂå8r€¸QQ"oÆÔiSÆ 'eÖ®•R¸«œ1…e¢8+5ÅçУKÓ™R6iV·®ó:6ˆÙtJ“±½²ˆÔ!BI›ž£`N;ef’ù2ÇΗŽj@”Á3 2eÌ(PPgN9dÒŒ¡3Ó)T©T­‘O†ßóü×ÑpÔAÇz/ˆž ì!Fcl=Øž—ž/áxå]èà†/aD„fP˜•i">Èa'îÑFk¤G-’(ÅÊñgå¨Þ S ác„“N£{t¬ˆ#.yÄ‘eÐqFUy0ùRDHGUn<$•$ŠG„l„ÇÆUrœ!†—jŠq›n^å–at‰æcD(šØ)åålÊ•{p$…†—)~øFŠl°áåXjÉå¥rD¸eaJuéžZ‡—‰îœY¾ª™®Z†o4†ê{@)ë?Ññ蟶aoê*°/¸!«w4ê«—nàá x¤¡^vº‡Ä›mªrÈj(²qŠ‘i¹Aq%‡—¤æŠÆw°KF¦d„1ǯ#9Çš{T;·Å¶Ên»ƒeµš†àpBìÒqä˜oÔÈäJ&•œn€0u˜1¤%A„‡3ÈpmÑe°1‚ïeLÇÆÏñSBFHQD „4Òƒ,—`3ξóÌpÔÜF’Ç3Ò·…Ï@ MôH#qôÐ €ÝŵU_ Ç$Oa²ÃH·¬ñ{» 3 ðJ†¯i ´ýöÊrßLwÓwƒ€FiœÆ‚/XýÅ’¯ ‚Ø^háJ;ËôÔy÷ŠF߀WnædÇ·yÜÏÍñÃm(θã›ZFÖ'%ÇËhÓÄ0îYï^m•ί;ï.•@’t”‚¸Éa07Fß{>ÊÕR:$€³hˆ!ÆxpèÆÕ+ŒýRñÍ7ôë–>}„ÑçâúðX`cæG?ýüR@È0 €O|äÛÊÂÀ–2ÄA€{@\À—¸ô‚ç›ß3ÕÞƒÛ€ðèÃ&â­³'<½EšX¡¹®œ,ÕfžÆØ!ØWÃ]å|EÚ˧Þ+^R:)fúw{rx­‰/”•l_¬“ž;œäÐóLjit›YcTÉ@œ{®‚R¸9†e1°¡Ùáê§J3âe«6ÃQâÐo;‰®àpÐz@¬`1Ô˜Ë/ Ë„è0³£ 3â"›xÅÁ)ð²Žd/hô/©ÅpïQËÍÕªer«²îªIáÙa-¢Á‰Ì< Ád9¡_¾³sšæÿ®Í¥2éÍW>ÇÃ͹»Íkz òeª©t¢óðao`Ëê  Q ¤OTØ2VåäwÉÌÒNñœgô«1Øà´&e»;ãjw{…† ¹KÙ¾ó…’ŽÂï=\JcŠÊ<˜ípÞ29mh}š¥1´!kØ/Ö½;¸aÂ/©û(Ãöµã½í¥1¹N®Åc¬=}XkZÂç,öapí tïìl½ë²÷¹g¼%Ëc~¿Î0Ýí¾ü¼§>·4ÎÒ\ýY_÷PyHdXä"ê²Í¨ìhÛOO¦éIá'ñeê6Õ8 ÖÊ.¸}ûâ ‡%ïB(àò±Þ®ëOƒ4nå&[²WÑ&"v¢u¢'Ç%$Hn÷B€Úó&[¡#g03å"“âRx³%ˆ1”˜ ¸ØIså%è#¨4%x‚/ù§‚3Ó&n®“3ˆ,P 3S¡paeŽƒÈ"7¸‚¨ƒØMóIˆ(ip„I>Jˆ_xðK{\×r(FˆJe` dÐ¥V]¸!julцê¡Vb;r¨jÅvè"JÅ,àƒ‡Ö¶±S‡Xg,€hm#±†áÒ­rˆ†‡u´ˆ¬¢ލT‰H¬²O’؈J…(oÀ(Uh„×§!ö1va4ô?ôûdï¡3gˆ±‰Q†­xb{AÜ1#•ò’- UÂ¥ñ‹e0ˆ7Ðå‹YWÁ¨$l@Œúƒ‹Ÿ—,epD5sðc÷n¤1„ÄÕ;ÌòRBŽæ˜`X%b`/ÔØŽåHÃå<òHìx#Øè>óèýhîˆ)"R¢ŽÝ˜YþXŒ3‚0áHWŒ.ÒIÿHÐd&ó<<ƒEr>Y§Oâñ@Xä‘p1‘g€t$Ä%ŒÄ0.Ä, Iky„ â^ В鈓7²DµDÆå“g}„EìÅ^””ÕmÖ¨B©0%r#NðŽ"éö¨•ÆE•ÝøèŽãx…aM\Ñn¶ŽÌH–RQg “H§2õ“[™'ù‹*©Y:Iª›E0¡G¡3:¿YÊ3Š I£F:šñI`£ :Jè™>Z¡J”á¤EZ 4МN@¢&*¦ùJꥭùPŠ£Rê¥ÜùW ¤^ª›OÐ¥rñ›O ¦FJ:Iâ#Ÿ'MZg1U°¦9Z 5°¥U§ʨÍYvZ¦™z¡5КZð§dÁ¨Ü…Z੨mj¨ä™©ŒŠ ƒQj¨MJBúT šD›zJ«[ "Pyð¨6М°a´jšHµ*¼6К—{bñ©ÈÊyP´ª›‘æM´ú›î1c᫚CcPCÈÚ¤qP?R¡Žzè9®åJöf° 1p[zu‚·ó#ð*¯7МöêR:s®ûš®¦ù¯2£Ol°;´“®ÊšéÊz–®ºùíÑÑéú›Êa/£3¯Z/g@Ù6¯M ²"뮡¤è5»“uÁº1kQ 8°¥tpŸØï1#‹ÍÙ(UÁ'#³¦ÙL•’%2Ûšìš{lÐ2ËI»öæ´z¡›Q‹² û82û› ÄòI «3F(§zѤ,›Ÿí1vú𸉄·u,«³m»¥ã *ÛÊž×¶Í)Mm[°®j¤9€¢!£:Á¦ú :¡›·ª¿9#c¨m‹ ãV¯êYÚñ#¹÷²öùJ¡rÚ[J…³-›m}Ñœ Ú¦©¢ Ø¢}Ñš¤;®$´1ËhPŽAB£ Ò¹ºéФëS}ñ›žúy}1¶‘DZۤcàº,jŸ1€žAyµ "<1HQ¸<£½ÍùfiÀ lú Úkšk?©ÚÛše¸ÒËip¦Ú«›ò1¾7º¨Úû›Úºì«3Ñ8ð«½MÊ’$luöÙ3a±n€±¤¹¥¦áR&JšÍ¹@Þ»À¦ø¥æËš3‘’þK²9A€k¹¬‚J¢¤ù›ìãÄ Œ ®8Àú#ü½üy‚T1[š[Š$$ô©¥ÙœL`&÷bŸÒ9O Ä£SšiŠÂ3Àì3P¢!+L̸U3"Ä+¤3Qô;Z‰[>¥Ù¤u ªç9Æ]Êš[ßû¥3‘nL¦©ÇkŸ4КA@¿4Àñ…¡3~̸p›´[±èÇCÊ7¬‰ 2KÌšMú‰–ŇqßÛ¨3!²3"öFÂ5зäw…ŒfŸ–:Y@¿›:Tð.ÃÊÜ™%£³ž$‚™ïùSm0>xšº<$¼¼ ‰E&ä]¹·2!%‡Y•t`– à’ÇÁ™ž¹Ž1—+i—}Ö1`ÎÃåžè±ØLOʈ’èáŒÖè“$9 (ðËÁÜDÞì@àl✎ä|ÌšIÏÂ7sGŽu®ÕeaÐu`ˆ×NŽZGÓtÿÒ-­rm¢á$-"MrÏ-æÈ­¨õ<åÓR¡‹MäŠ(n;öé804`³Ù2€çzÎçƒÀÙ1~~9às~f"£^†;ôFk4p©Å)sé±ó¬˜þç³JÃéG¬é¸ê9PM¥ œ²–aê¨>Š®¡„(l^ÛF@•”né³9ê³I5È®Þé—Jx¬ÅÒDüRD54qå|‘ç"1[å2Wàê¡-P9°ð¾c3ƒŠQ1£ÜLÐ8sîÞ0àÍYÍæû¾YÿÁåÿ"'  (À(@y@ŒøæåÈ)àÍÔ±Ôõ}4.Ä“ð ¿ ÿð´#ñ~Añ¯¯ñÉþò¬h¹º‘Ûsa0Ôåx>eÀ,/ð6p{!ó±³çnEófóQáðO:¯ó=ñŸñ??ô(€?õØ!yõ¶f}ôIåÓ1|êœaŒð®9`œ5›:¡Ô÷U¼ p÷y¡ŸãÄnçȾYóÊì àìŸò1K!íCíÓétß^Ú^ÛSçépä÷50îdÁ<¬œîr±îÝÕîïï-&ï„^Ûö>åj4üîîþÞbùð-@õ0;é¤õ ßõ8ñ/ö½åófÿüBïñ /ò$ï7»#Œ.c?¢òQ¿ÔN^G±#ós`ü\ï^ŸóËÏóÍOöAßþ/$ý(à0á>0q*YW»så0±Ý_¤Šé”áêÙ€¬wjÞÍûzaOý]¼ŸÇ3ÚË~?‚@Ø Åÿ<†À›^7`.`=grÀlpë@ô7ñüÂØk€e/úu×êErøo~Ù›ÂÀ.Ç(Ýozñ¬Êài\qª& Pá‰@ä‡ÓŸ \(Ðý¡=èÁ-æ@ ü7hìõ…1*`Ëó€sáÒ8ž@ðf^<~æ/ù=#Xñ ôS‚ðOþ½L¤ŠÄCkÓ'ÝÏŒ=.øY ßNð‚B ž?åWËà<ƒ@ïý­@õ_€{œ>„?Ò1Ï"u=ð6¾ÈH_(9T•pØ9¾:gìj²Sv”ÏòA»Ì‡ëâ^ç³vå‡w°—ÐwIîÔ¥ÛTµeÏ¡¾r—½ÐÝ\h}]nsÀ¾wçshŸ’(tàCà>}÷úì{mo=´€dUïÞ,{p öÁÏü£~%)“UÁý, ÷;PàâAHIàÎ;‚0¢ÁA¨݇nÈYߤÎ@Dˆä^*¬{ÆÈï;p¨| Àxo6*Vó^­JY2@Φƒ¸ ‹‡Š|¨eòÕQ*Há´«‡§PÉÝCзíìH®»t%ÜÍ«Y¨úÎëûc¹0.ì;^ïļ†{ïÞuÜ—ñŒa”K†RïW…Ãâ÷ G <‡~Ðù©Ã@ˆö°áh .ÄðÐ ¯ º ‡âüùDi©áP´†ƒpÝ 'Þ¢XPêzÙ¥2¬ž|€ãp†Á"8 ÍàUt€ðïoÐ#SänÄ€XƒIÞŽi³é®3P ‘/ô:ZUw]ãCV…Q¾ >×ݬ{|"‚‰øì*âQ(…‰Å]»Ï· ;"¿3F‰±õq!EÍ-Tw)qº»^èk_½†øŽ&CÞw CÛ†z ìàñÄ< Å`D‡BÑýaÅòP@ÍB k@)2Å•ç y‚‚І*-êAßH­¢p„‹ƒ¨ö@À^Ä5°<¼™5ÐýlSÕ‹ŽW9Ar¸Í!óK‡×QGm(Œ°RÐ8л“ï‚ÊÐc°2T:éØÙbUt‹ñ±ã ByÔMÇðŽÚ ;èE{8EBÝ_ t{ÏP‘>¹°5¤·«ºñM/À"5!­sˆÇ®¶EÄeG/_´ÃŒ‘>x>óÓEŸ1 ‘zÜY†PkáIt}MG5þ‡–È\c0”‰ùN÷ÅÚx; ð#x”øÈ©øƒ"û „Ãqúœeò€r´‹MñN¯¹pð¢bO,‡?ñ=G,‰‰£xkA\?»âAìE~t oϪ«ª‡œ äT²:"H6)AÞ¹yg ²0LH¾8÷„Ç_„!añဠ٨ ŸÊ‘•r. )b\è‘>D9›]eÄ|—ñ"îE‰ }M¶óŒ¤Û>Ûèp@\}·%²»•¸‰ä û…¶6ÎDb¸ûž\mü}ÊpOîÄ)‰&©¢š¼’IPG‘Wô†XFx2L¶€@&cžz”ŠÍ²JZGB© ‰£ìÑ ÉB…ÇÅ'Ëãÿ3‹p=ªÅh(.e´D{›‹8äbj’HÜ¢ûMÊG²cGü€à²=¦I¸&ï%ü«“øÑ¥àIf2æÀ¢T„òeàºL9+­\|nkðEÊ]Bä%vû°xiBŽù)#¢è-TJDSé"-âG4ŒcNÅ:¾ìNÊHYw”i/W÷37aä»u¡®Òy»éë”æ®ë™ý ñ¡HOˆNJeå;•/2i†È~¨3i€fØsDSDMÊ6}&â£uGó/:MŘ3]ál*›Q2ŽÊO83¯fÍL•7Ž F¹à÷¼&šES.DP6³Âf¨L›ZóÒÉʶ¹6 §Ù”›)’n²Hš9 ñæâ |9“^Å:ÊÀüÞ©C|7@ÕÁÍÐ9ƒÝá´u¸îr(R§:=g5œT3ÙÕMŠˆ*5Ÿ)d•ÑUÂVè/'“2u²Ð_–ÄÓˆ we쫾ÞÉa¨$mâ¿s’Êð<·Ù#½”ð‘\JKèŽÛ{†°ûu–nþ¾å™T˜Î’aBK@ˆöðǸ˜Ô†zowø æ†<|—G:Fð«¼Ý C|’Ò5> ?ce| ó~6¾—95%ãìÄš6óvjÆX#[a·KV$2Ñ 2[)áß;Œ,qDIž‰0Ïçõl‹ÙÓa.HY>½á› Ú«×É7óCÑg½ ¢5”ÆŒ5¸Þ§” }ÑQ†ºËIª ߦt†*0²:~×?#ý‡ž2eMʸ€Fóž|eTD®Ñ0ZøR£ŽfFF™99ífå´™qFªÂWi# @üRœ³Õ:p+Mb®’º0„"OªÌû˜f ¥X4câC…#K¤å ½Ôd¨Õ G-á0Å‘SOrH6*LåB1U¦ëU)Sßô!…)™’3BP¼ÉK½]Üt lS¦¬èHñD$SN"òð¡S 9ÊiÊ:|âBáHP™G(Õ¦wÆÈ ª;M ¬äœÔtV&:¾ÙH‰§®|}’”5ɺQjU5Ž_ß@@:ÐåB\å€=P^NG“ZW©j¡ŒST[!ŸõŽ6†Å¼¢0U—þÅZ%¶<¥¯;uÞΧ¦Ñ¶"«S¥UíàщM«æͧ0rUòS›êOmäâÔ^À.Y1Òê#)=žEõ%ˤÚ<3)S…žo2LO))X $]Ž¢t¬½RªJISW¥ Å5PjÔäJgé´¥ð3¦âÃ×Z25]e ™Â´V/M(èö—&\£æu€>McŠ^»kãã®Ö4•VÙÙGigÖÜ|ûTV‹ Ú;I_ wÁ¨zPÛ:TYâ]¨Gõö9ÔÞQ5éDÕ^Ãõ¢~UŠ\íêaE¥l ¹ŽTèš0¥ja}‹‡bÖR˜àRsé=Lþu^y×òªbŸx%Mäu×TÚNgl(yN|ÆÐvÚb(Hì±QÎMÓZ_·©>U­ú•#Òdú4ýŸ›­¶¶¢ÆÛ+¬Q…‰Hõ’ÎÆû[Yh3¬žö¸ZI [.AÞQ#ê5ÃV:Wf…5¬eˆØyY÷©vM­4µ×°VÞù¿H„u²µ  U„Š[}¥n5¡Z6…ö>d\)j²Z–ÑU†NW2»=Q@c˜³0A•®Ñ2éU«˜—B”8އ¨1ªhv•¬vÏ¿ÎØØ¡Nm¬N¼ñ©S!µ2Û)­m|þOØáÚ+Lý¬Œ¯B6rY|úGQ¬7Ý{šÓkrNj:@èL-£3.0ÛÏy:)ÒœŸ$r0^Îiû:E¥°¥¯ÄÖ2j¾¸æô‚šå¶ÝQ†”•‚à4u²Îh¢ÎŽA@?d†l·ŸÓP-F{šM[d± uj§®Q_GM3`Nuæ4ѱÈÉ×lÑæ¼;•ɶ̀»ø–]³å·ÃÖߊ[\÷1IæÞ#|7€ê}J€ˆ¹Ÿß ¹U¯Ý愳J']ð¸9äŠ\wêmc§ä+²¨5Ô‰×!ɨ®è ë¶çºÛ‚oY®Í½¶Ë´œúº.ú9i.Æ··vâÙŒ¨g9#!½$kÓCž>ÚŠ+§,¡%ª†ÖHZÒ‹I¹,£Ý¤“á…‚YOëfÇ,œ­´g–8¸ñ¹î8-‡õ¡`uª‚Ø8‹?Ní‰Mµ qÕ&>`§ls,¸¡DA[Í@šo·u¸Ö×½XÒG5|mŽ5¦–·ñ*ºnûton¸•º³þZHØ7ï æE¼|opFÛÓûx[îÃű vV‹øD¯áݼRs¾zÞ¨{_%h’察ñœþ±XeS߀õºA2¡†]†:v‡%ƒU¡ö6‚„çU#-(´oíÅÝ4kD­Ýªy÷Ã&ÈJ{ii)Å¥‘õïâW$Û*÷,NÍ{¬ ÜT®ëH‘o$-´VöÐ6Tç[v¡o—¨iÒvØðûf÷.ÜÍr·ÿ=Uoyw])v»íé®ñ¡»Î™ß­ë7Ïê†~Êg+ȼò¯•2ÐÒ_ƒ IU"þÅÉË*Xþ»eýïÙ¨nUã] Ç/Ú ´C¯n“ÑW-*› ³mÔFQâØ›UÝ !5]`ù©uùÂÚ¼¬þum¦¬â})¦Áñµæ:Pœûo7î[wTãÙzÊPšn(±¸~ñf’†ëz#/½™º6sîºL÷^ç°ÖÂ÷”÷ÚLá›!I®é]ÃÔVzí;5|‡!o¹¶°–çÌsªˆC #¾ÃwE~ÞûÚ„ÏåõRÕYªÔtî=w„7Þâ‘pm3ï­Í™™÷”AÓL,i$¶šöÕfºMù¶7;CjÁ#Šw cJÔÒÊÀf6º.—§VáKŒN-±&D§ÿ3eÙâ^Üø^ñiíÂŘçþܦ«rƒî4®&:Áã‡ë¸@¢4Æ·¨î?ÀÎ-<‰÷ð…DVijQUgÕñ¯Û™ÕöÿE‹ŽIÝ5f£®X÷Jb=Œ7#á`$ºwa/è;]<øb@.}ƒx»áœº!»è>ôu‹Çd‘%2î·”sãÚ=ýÉ4_éåœÃõÍh+Qï(×Ö /ÓÊ[@_Ö ÉœWÃb#û).à[œÝEÍyÅŽÍ©NVó*+dyÜ1j• ŒTãåÏzŠ?ð4ýÉ Y:c.¬‘30ÕÝÀî·úbƒË6¯ ´öëXLIU°°L’ýwÑÚFà§Ce°F€ÈÊ/Äe!ÌQ‰cžD¿vÕZeÜYuiäÕõˆJGÎ+X[fX¶¿&ìæ_±›eÉn VËÈò^Èê;€á²&É š„.+W0wë¬j½³3õ*oF¿|Sm$ÓÕ ”îÏM½Ã\<År•%ËÖ,óÖ´|,›j[¦Ì38çÅeÌ\ƒµ'Ú»Ë/5/«_ßÛ~­niæv‘’Ö”HÃ<‚mò=Á"6ïÖD Q]ðZ^_üZf¹œ™íåyÀÙÄb`â\Ssk½$š—[Õ¬CYóA}Ί6_Ùéì˜mm®ÙÙúÒËÝ<—½s]y/f½Lžûò =Î1$j)5ŒîFbsËðy,GçùŒhësu†Ì¶y‡®]ãñøswŽ¥›9<§ßñH‹3i>ÏQß…+L× yäƒFÌBr’Jç Í‚í³D•¾·Ù“êgßè¡{s¨ÏKØ/†f¾Œ•Ís¾ 5Ë&eçžKpŒÎ­Œy£åÇ|Ÿ7iŽ&®•Y7_æþ ¢«ë Ñ™DçW} QtŸMÎNµL†&}[ãó„Ö¿ÍwJÛèèðòs–îÐ[úC‹U/MtpÐùD—ç}¤õf@$Ã&±j±i*+Bå3œnÌ5úBWéäa§s3žæÎ>ú;sæ ­E÷òj5Ò85Êe]˜‹/-캭9B¿æ7¥Ï2 •Ô7ºN»å6 öz´fæÓšSËTOý{ÿògt¦‡š6èöü¢SõýuÓ)˜>Gê¥ú‚oc¥~ËZSßê”ê§Å³ü,ÐEšP‡j*¬SW¸#ÖQU¿çc-¡“5–Ó°šNcçY „kužÎÔÿyS{f y­µÞ¯¾ÚËE§¤ïB¸sÑáºþëÄ\®Ë²²F×Ìú: ¼+-aÙ®»–Öþ9Dëj|ˆ­Gs™.Ô eÒuåÖt±×{U›ëý‹°}k³–Õ¸Z_jÞ<­ï*˜ÔbšýꋪŸS°~V¥zQ»æFͪ™/¤.ÙfWa?kZÍ›YvÄÆÕòZ@Ók!Í«É4¾FпúÙP  ±žÎVÕ<{dÇéW°#óÐn×E›Kïé”ú²—v§®Ø4_sN3æ)Û—HØÆWÊì'½|¬«Vª&[a?3Æ®öÛwõ(€9ÁÂJJ˜ ¸|6`¢J)-ÚS«ØaÈI*tú_,ƒ—hqGÓà–bµ‚\4܇{^3Jõk R,¥|š2×–0„¨jè8ÎÃô£{‰y+>_œXDê„OÌà±¼]Ȱ—˜¶ÍÝ= Çk3–Éϸ*£mŒSm6g Æ*gl'­|³Ï–Ò\;o{í¾Í¡¶ÑîÒd{bOV2Z»™.6€¹[#Üwì7ã1)V›Ï´¯ï8úº1²UÞö:[Ól­"Ñw&Û§Z`ƒlºm½íöl¦Ò±ZºPî-]Ã*uM©7†T†ýƒývãξð/QªÒ?&ý¤vþ´G;¥aS+º1&é^›µjÓ­;†ˆ@—ò>d§ØSΦÅ9F+5T ±C¢p—)_÷¨ýŽÅxsygen×QfN¸ÚäZdìs½ƒvd^†ÈŠKZî¸áß^ ç¬ÄŽhùy9ÿ§ýôŸ¸¶—.Æ8ŠÃhC bÜŒƒq ø’q=EÞTYv qP]HÛí>lu¡€Uijö'ÙMÜ:?ñÌ v?xáwÕ(¢%q\€º‹hK” {¨ÊNŸØÿ¹abȨ'Pt¿x•(€4ä˜^oæ½E柶ܮ&+ x§S9玳Œ•48VñMobG¦¯°™öX7šf¸ë¾È7vß×Å©I8 ¸-ßµ2 –Ø…øŒrߌe¡DÐu;u5nìHØæÏ€.ÄkÞÍCÓHhæÔü “>t΃ìT.ÇA<[ì§m¦cåŸË€*£z–â„ÄC¶ŸÑ€o;ñ¦º¸¤øõ¥â|2‹þ7œÊdtÔÜ |ßÕ$Á\ ¢4¢8‰¢Ç%º¸ÁöÀ›¼®¸C¨ÅÃt½Ó3›žjÌZª ŸóÊýœ€;êV}Àçôÿ•¾ä6em[ÈkµÞâL{Žkk×è#aé›*Äôê=Ó¯÷Ý~¾?ôýü®oy¥-Û£óqîE!/Æ#/]ޙӝ^,ݹÅm˜(>®þ½ú-¶áŸõóãq»6½8šÂ½¾8ÚMÇ»DámÐ=É×–™#[ÒçÆKr5qãr]™ËâVË4óaá{aÓeÎac û)šp¸45SÅ7Ù¡ifwµ²»n\An]b¿ßr\ž§m¨ígm¤<âÓ»Ml€¾µº oª*Ânè®w5ù L¦¡¤Ãl&Ìb¹"Euz!}—º¦‹¬|7`ÿ‹ª»ÇúCt›^s¯Oæ¨Í”©ˆ}]rw®©N¹ó€Þa]ûþÝjÝ9ZöÚýÝËb#FæPW±sSuªŠ÷¦t*º˜ ÷¾S¿·ró»INëï;ÔÍÚ_®N½¦~‡ï»W¾k>Û+Úiœf…¿®VßÁß÷þàçp3­–]˜Kö8Ìncƒ|³ØrÎÒŽà÷±‚ŸºDzž+ÙKÂàm€ÛâšzCg­ý³yTߤ¤ªCôC.Ñë¯ÀkAÓ®ÙNÛ½ÿö¿«£–Š’án¶wµPßß­p *$Ê­ŸùÖ Ø$X¶+qÚ^ãmû§ÔSGWõžgºIêªykåD‡™IµƒÆòιËh Сú¤vÖa~;oÀ}X±º ÙXÅ_,q…X¸#UK}ÆÿñÚnç8ÕÄÒ–Ú–“ùŒfýôïèû‚ôßÉÅw{xÅ茀êg*ÈWB­D T!“mVh¸Qº5¨2Àæ€k€ †a{( Z}`½ià ¾8[Op½L¨fŽ;xðPO¤®hM¨ƒ`H@5×Þ„ í@¸ö×~P¶½¸äÞÜûrïíÏ= Àݳûàîá}½÷Øû|¿ï<˜÷çô{ï˜÷èÀ <|ð ÐÛ>á¼}_âS|‹ñ@ÂW °í €·ø€|@” (ŠàäC|oÿñC>à}À°mpò3¾Êù€¨€R TAÏ÷ø?Ÿå“ƒ=`ø€2ù)å € °PŸæ„.¾Ï_ù  €0Ž~Í'@€P‚¸ø3?Ôüð ˜ï |¸õ€øÊ D‚*ø€×Gú ßìƒÐæÁ7øûàðküŠßõQ¾ÖŸø”ŸïkýòCþÄ÷ÿëÛ|p@f?韃# l€>øà@óËý¤_Þhe` Ù_ó@ðÇÀl>$¿ÈùÀô@°í;þäçøqÿùWþè¿õ3¿óWø ßáû|°ð¾å§÷ë^Ý£û~ÿî ~ºo÷áßÛ“oÏB¼_ÿà¼xïI?9hø þyàíÀ?`÷ùŸA°ÿy{ÀÀîú_<þ!€ à`hü{AÈò9€pÀ( AÀ^€ÁÁWêööçýÍ| Pb~ПH&}ÀØ0!Ÿæ÷ª€IŸ {€É§ù¥€% ÔçìÿÀÿY~@`h T*@9@d}7`ò rÀðúqY_¸ò <`X}?à ÈN# ¸r}6à ø}ûÀñ X~QàÏ'èÞAø‚|ûÀ5ðüüÀ9ðyï É÷,~ ?$〠 šÀ8@”a€!HöÀ°þà#ø lÀ=°„ÿ€=h‚ˆ A´€É‡8‚8Ðü¡€ð`ò `€A@Œaà ¸ b@ð¨œð¢Hà øÿ€dø€ üî/ïu X2óhX@&° (©€*@ô,°í÷€8@7 `2pô_.°Ðð Ì=X–€€Àð@ÜŽ @ÀƒÿÀ üÜP@ X0/¯ X’+€À À! °b _0@ð pñá0ðü¼®€8è‡Ü„ €È7ö@Mxñ5|ÿðõà?,èÞî |¡à”M¡A0Àƒ3`LX60À 4(ª@ €Èaap€'áPT€ÐœÎÐè³€ ðj!à‚0L…õ`å€%0x0@ú)€-8§À(À\|ø€XüÀ?P ýäÇ À ßÔ €ò€< †¦á¶V~ð`ƒ¾ ž¡Õùñå`ièð†!0.pÀÐ<¼@/€ ´|@>†½¡·ç2¶ À´…€à ÄVcYhÄ„Ðá ¨¢D@ l¬@7À|¶@]8™!ÀЇ۞#hÔlÀ @0@EX^|`…`}XlŸ€ `Ì)!ËWÞÀàS¡†ø<ÿÀ` „ˆ‡9"Ùgb;`.@Æ,RbA(ž|¢x¸íQƒ<°þý@ð0…dá@ :|ebPê€YH´èx~„0"Ÿxþ¢+È'Þ|Þ^0(ŠžàâðŽ MxþŒâ'ø(FŠ-ßx¦ ঘþŠÛ§Ø'âˆÞž¨¸(†Š"ª8*b‰¥bªØ*®Š â«x*ÊŠ~¢ª8+¢"ØâƒÁýñ+ ˆ%òŠ,Ÿsˆr€š"à‰&Ÿ`ʃ6Ÿ‘ˆ,âˆË¢Èò‘|€ ƒáG(‚„Ž`À,‡øÀÀ<y¼wÄ Ÿ?€:‚Õ"˧b*À*  èdéð"ßÌG)*‹ãb€ ÜëÀ?Ð,À/ þb¸8. 3€-èZ}€È0îŠÌ¢±h1¾‹Šá¸Œ…ÇŸ”¸1âˆâ¢µ„€H£Ap1‚‹@ÉÈò=½@ø‚ ) ´Œý"ÉÈ,z2@(À T–`=ðŒ/ã¿(3@?0 ø}*è." #ÙÇ,Ò‚ža,82‹cè2rŒÄ┈è‰[#¨6‚~ @8|^cÏ3. ß<`¼@Û˜4:ŒÖâqH ï€Æø5ö†p#é7 ˜ÿÀx7vŒy#î‚T#Ž6ún#¨X<Œ 0TŽãÛ8.®,_äþ@æ*. À9ð t=@à|Ø@æ¨42‹@À <—@%à HQ€ëˆ7ÎŒgÀ;püÛ@?0øºãq8.J‡V£ÝX5>ŽÊ£ãØ5‚€nã¿6ƒÀHòA‡ãôx†|Kañ¸4rßÀ꨸âÀà ˆŽ»#°¤^àd%À'À xÌâð pŸÀ`Œn€>P<žào¨5þ\£9Ž“£µ8Ì|ô£µØõ‰|èÞØ×@Ê‹ùÀ: ¼?@%¢1#³„•@ ˆ°À* 2¯£lí€-°xýÀ>pBFŽŽ`Øñé„3döøÀÿU‰ÀåqxLs€ —‡cr‰[n•%À p€¿elIø:@*З)ãi 3j— %û@„—`6ð ̶zé#Ú–@0x†N¥ÅÇUF—­¤Z `—Ucéíy†?@kèðUŽàazùF*˜ÿ¥AÐ`zÊ_Ù·Nƒ› …¨^‚Š ¦{’…fÙ§ö€ÚG‚ûe2bv‚ !Y„—€ð 0þÀ€Lô0ÐbŽ/æÉG†å,¾€$€ ¨à€   °˜êå¿øY’|@EH™ €>À0ÖÀ”‚jâ‡y®•áØ‡@Š#éWö킳dåøcrŒ¥`õí€ê£P9€b”9f*†À ¬òã P9î ß€!øfÒ•Šá_`tK€ZIL|€Š(`ò-šëe0ØJâ@ð ôºÀð[þ@ðH}€° ðn€„™Lþ6á?ð ¢e’øZÎ*_%  ª+@ Èšd08 ”@€à> @fxM6ýÀðüß=kršÿ"­9lÿp(ˆ€³Yöa5ä˜Èi&–¿a98dB˜±áyˆî¹™b¦XÙõ!}™2Á |ûe @|b$‰$º—$&}IÐgÀ.|Ë@Ã×o 0@ÀY‚—}éxV@ \ aú›@ŸbƒÀ7`a¶†ÓaÙ·E¾ó@6  4ë±YFD€) 'ò‰À¡o~“Áàð Üœ¥eÊØ.^–G"Ä$‚!xˆâ–¡eE˜Xœ`Ò¹I^àÅ ™Ng%i8çÔé ?`T„'éâdáP“`%˜uÞ‘`¤Ì€èÞ€~€P ž‚€YøtŠ!8lšW9Ö„á½ùw²|ß,~$ÀCÌ—@b’…e§Øx•€ @P9`Φ`ðažZ'ãIúV ?àÜþ@•X¨…€ žp'@ù9â#È8ô30pe<Àâ©{~|¢œ¨À)° x‚¦òYñÍ€Í'5Xx.ÿÀ= |Õgê¹|.¡Égzc"…Ub€XŸ¯eÙò‰ò c †Þ^ pw"’ dÅ\|À0 ¬`Œ9î~@&X9*Ÿ¥¡ 0ïÀ* r•€<°€â)~6 `Ày@ÞÉø»d2Ðw€çí)R¶¡2@ Ì'¨_éHΡåÙ„À9`l£ÀÛH:‡€ƒÉ|‡•£@vŠŸì0Ðßx„æžI(Ä7'6–ü§Èîß0mþTh#É@²{À˜y²|ì1à*ŸI¨*~–€ ¨¡¹'ú¼¡Gb;ÐðÑ¡Ÿ8‡Š¡j ʇZ¡Vâªÿ¥¡e ˆ¢!š‡¢ áÊò±¡ÿ¥#Šv}à€$ ‰V¢ˆ(»‡‰‚„ƒè!ʉ €Ígd ¬€7`(z‡’¢úŸˆ|„£¨ Šn}¬è ˜¶€ç·iA@åØŠ~¢,_¸x~!(€ˆæà.:‹¾–ž÷ùd¶@1ŠŠ¾¢¿¨A­€ 8£®h/ŠŒn}¿@=Ð ÈØè"ªF£òâp†£ÇèÄ‹"¢¾( :›0 0Æh*º@0è9F¨@B(‹Ö‹ 2zóaï@>0¤Ü& °‹~€@;ªÄT@pDŸ@5 (¤Ï¨²ØŽ¼‘x ,~›?€‘f£ŠßÖ§‹Âƒ@Ù× æÿ€àZ€ €*z'v‚(Ä ^Ÿ×xžŸP?ä H“..cÈ—8ii˜d†¶¨ÚWD‚~ MŠ (‡™aÇG,îŸ0@ò1¥ ÐúÀ€ à–€@€ôü@3€0f¥ßà_Æ!0ö¥% øO€€ ¥ ½¨ LO \j9ú—wÀ3ð @9‰—ºÿÀùx eZŠ ìü@;0l¥Ièí­@àdŽ©:*”:|À ȃ,Dp“΀þå Ð |_?Pš®¢"MzCr¦°éT[ʆ®)nꀲ !‡i“"¥Û^ih“â¦Q©Ã@Æ%"P¸¦Ÿgjfº‚e_føl’Íé/°Ð€1ð <ü€aªƒT©É—-î›0@A¸U:¡*% š~ +P Àæi0ÜÆÀ€ <ÑX„@wè*»À&ÉËÀÐ ð¦ç) ¤…€?€¬)О²|€¥‰T™äq¸aB¨Á`?p ý=°làÀ†šwÎyÀÄ 5)oj&²|•£‹Ê(¢À* æ„ÌŸàÚ¤Ÿ·çn¨@ž“ôÝ&<¨ì~AÀxuR§8iÊüéŸxçÜy=™  ,é1М¥0P¤ª•Š!¸o?ÀþIpVž¿å°ûåX€(à —0À€œF¨‰@‡p ‹0paƘ _kø¤>žÀ,P`lê?€œÒš €5 ¨É@PH À মŸpêqè08€b¸[Â>À£$íÀ/`ŒÀ=à€ñ(Þél À‘@(ŸUøšz{Na Jdèð\ÖÄþyñ)¡"Ÿaj¤¿êÀ°¦€ ¼»% pú)t ²š“2«h#`lÀ&œ  À/ ìãÀ$ ˜ö^`Ç—@Ò ½¹¡j‰báÊ”L@4”bÀ"ЮV|ªÉ À.¸¡2¡æ ªòÍûÀ`_ö[Àp`î©Áà0 lÀ#à ¸A c†‚%Ù—æ§ŠáP ¤Ÿ@à t¬dßÚ…Ö¨ÚŸÊW±B~ü@'à8‚0À<àî¦1ë_)²2«:+Kê’îªÛ*D *ž©Ù6Û’~=¥Bj%ƒ€ZXö%†°¬{ aʇZ-rËt2®À©/K%†³ð¬òY²!àH;P¦†§8[%΀ÜìwË`R7+ÙG™^³ _6›Ö2–ܬšJo|¢°ˆð‹Â¥ÞŠyò‰ºäÖÇßÚ·d!&À'Š€§*  ³‚„ _O ¸!`¹—à.¸lmˆÊ>²ìÞ~{È:|íÄÇßú‹®† ƒˆb#Yÿ‰¸@Jêünê¿(ìßÀ.*â~©@ •£‹P ÀÈߦ¤¶@·™ã©,),àãV€ ®€‹äz€!î»J"†C.ÙÇü@ÀG8ã `4“»"¿ X¹übŠ;ÐþûlˆJ(´^€€¹àpÑÚ°@Ž[z´Õ@&ðå*¹ß°Ò¾|€œËòÉ´}€=°æš¤ÁÀ’‚·á “K覌íkb$¹ŸÙgB5¤£ é–¹=âχ€2‰!Øábº;àð øÖa'Øé^ºPé¸(Å@zÈé.¹.ð™êrÁã&À ˜º°. àÐ&câ°av‚D&pšèƺ@¯ 4º‡l:pÀ¶¬A î 4`d¡‰!øç­Vš#ßn¹Θ€8ðF}à7Àx}À?àp»Þ.0D‚fÀ"𠬀Pí¦»À'° øÍÀ? ¼šóîqiƒâ´Þ.£«v»® ²ëí¼†î?€è~{ Áÿ)*]߰탱¥Å l{t`Å;—Ž•×dó7z{¡Æ»Ä¤A€õ&€=p«–¼t'p„žã.ØñžÀ`Ðñz{8¯·‡õɼ@"  €¼øðº¼$@ ‡/.9š£oÎ{àÀï)òÒ’1Ë;&žoßÀòî‚'€|²¼ï àqF€pŠ€7G@Uð7È3t À.‹È²HÇðç8›[ŸAГèžÄ3Æ©¤ÕZŠ¡>ˆKáëòBgïTP\soÝ+ßÔ™!Wln €ím¾Ý··í{æÀ—þ«"é[þÉ{âßé;îõ{ú^Á×úž{Â"éKð|ýÞ·8ûqÙß÷'ý@È÷°¤þÄ—ðõ¾Üð ܭïïkü"¿æäï»Y ¿Í¯ñ ý¿Î¯¿Çü®€=ß’…³ö«ýº—Ž`ÂçýƷ᯷‡d¿ÛoÊ7þ¾©ZßúÕ"}îoùëþr¿â¯;šýùׯýÛ.B¿k`Nºÿ¿úïãšÿú¿°ú»‹0Œ×¿ 0óK ê¾Õ_è‡ôá¾Þßö~¨/ú7þ™äŸè[úÂíßû×ÿÍ@ýwܼèÿýˆ(ÿ€`Û8)n€ºb ì ‹) C 8Ê3~‹I ÷Yâ"ç HüŠ­ŒeÀi‡|Hð¨›ædL#¢%à üNÁ)pÌ_ÁOð#sÁTðœ‡ÁÜ_=ÀXúbà`?€˜g¼ãmð/ËXÎ|jðœÒ†s°Â÷£Á½"Ã'¤–Áv0/z(»lp!:Âà!\¢À.¨Tº—½l4¸í©ÏïÛjó­ XŠðÀðZdfÂÿåà(v–°0€ÂàÀD[ ƒ„l(9ˆ ¿£°¿X²‹è÷ ÄÂh,@ ûÀ#€ ƒ„³pKê Íå* õðP ¿¹ð.l,ä00lñ=™p-Ì@Ãiej<ò­‰`ÃŒf×G ãÒï‘X™0H˜ý!«dEx¤ÃÀ:,qf‰g<,›ÃÁ `ß¡"çÄù€ÂÌðË'–á@(¼áà¸Ä§AŒ7®ü0>,ªŠ|Kâù³© ñ<|£6­—h›•góW'ž†É¬šhƒ¨Üßœx ‰‚kë¸ò•ã|ë^Ö¯…â­j?Š116Ko{€â¡XÊÄàÀNìí}„–"¤XèêÄ,q¡ë(ÅXíL|$î²@±Rë)ŠSñ­h*ÖŠ´â‘xkÅ®"®ø)VÅX±WLÛŠaq®˜,‹À÷ 8‡Â¢”9.‚ƒk1áš,~–&\ìöÀ’ã[œ´:‡@°#Hs„0 3þÅpñ‚[lZ‹…ñÉ„ €À °{‡ãbÌò5ÆÞdÌ1JÆeìðYÆ8"f¬?ƶ¥gìsÆ0£h\+ÆÌâgLÿ‹¦ñfŒ3Æ£19.z‚Žë¾(ç@m¼0rŒ!¦#¬O˜³qnßîÆ½ao\èþÆv$fü|¿À@ýV*Ç̱s|3‹Ëñ*wÆÔqtgÇÖñkÌòUÇ áuŒ%BÇÝqṙÇÞ17ÇÛ±ø¬ÁÀÀjL RÇð±|ÌòÑÇw¨}¬×ÇíñwÌ›ÇîñãÇ ¡~L ÇÇéñ0ÆU#f¬ 3– roè /Èý1ð ?€òxÌ,^Èø@† *NÈr‚L!»˜³ñãÙ.ž‘Ʊ·ç(ú(r‰¼"·Èy£‰ü¸ÂÈB¯ŒÌ"Ç1ò‹Ìs¦ <¤¹#§‘ ?°FΠ˜d Y$ÉyäIY*Éi%“Œ‚ú‘Ir¡ËH.ž‹d”üHZÉ“¤•|IþÈJ%E™2r”¼1Lù¿ îm¼LÆ”dr†LÌŠÉi2Ž|&ÉÞŸ‡L¾R“p²Ã''×°v`\&“Ètr›lG†˜y²ŸV‹ÀAìïÙÇ„²¡,,ê…®¢Œ('•Ž2—)•òfù(Wʇ²¤l)Û–Ÿå† üúÄñ`+˜$Ë>k<,ç‘qⲌU¢©ž µVz{Lí>À’¢†š¥d™GÉÿ€¯(f–ÚïxëH0rØñ:¿êr2)³Ë,©»[ÂË”és¬\¶Ë¶à½|èæË ò¾\/÷Ë ß¿¼.óËï²ÁœL:žLç&œÚ˳ 0㈠s…Ér® o¿|˜Á9)é_2˜¦±:lÌްǼ`žœæXI2wÌaòT9b’´*3ÇŒ„•A&ËíÚ„+óÌœ`*—B&·3—Ì;ó#Û²~˃@μ-£©ˆ&œÍ2óÑü2Jó0`4W]ßp¿¸lªö»UŽU3(œ5ÓšÀ@XÙ5Óš_óÖÌ1ŽÍ=§Ö6SÍ6¡6 fÀ1¯Í½aÕì6S°qóÜlj¶‹ h¤Ø6É9jÞ 6ïÍkß,on•2fMˆj¿µ°–È7×ÍÁàâÇÏŽ•x«0ì8Î3°ø5|•Ÿâ\97΄óáŠ#> _ºù9džs¢è 3>Ž"LƒŠ…§³É:·µÔàël5~¿îbKÊüý‹³³æªð:‡&Ðð½~΢ ʶRƒð¼I­z¤îl<ËÁɳXÈ1ªpñ<†âÁ`BÌðe¶Õ3óÇ€ÀöìtÏÏ3Y2ij÷,~⤑%&>{¡š'dÙðÁ¯_ƒ;†.ŸÀ>Ç·õó“Œ?;û³{I<ÉçúÌþÐÀ@öò–lª°¬@ЀCøÀÞð]öMÐ4}ñaÐ9é÷¼UrРëêí¢pKÚ >ij#x?—†@žºøÑª¤_ ]>ÛÎÿîWC·¤Žà÷Ìý ¡ß¡ }?³{ß5Ø6ð)ülˆAt| úM¡>è Dc³±¡Ëú„’Ot|›,RÑAí^†Å_hÍ^Ñ3(ê‡úÏr(*pÚ¡h6:‰î¡j´mFw¢it ¬ˆ¦€s4ýF3¢w´L‰Z¢ß&îÑ™èT)ˆâу´6*Ÿ¢j´)ê&ÒdŸç—ðº—1¡=:8ÒÀt|;JÒ™4$ÍŽ6Ò…n%I¿¢“t(­I3Ò¥t¶|JûÀµìù»ƒk­=Šý¾Ò±ô+:KÇ·µ´6zK»—¹t@ºKÃÒÙhCjþ~´4IÚJÓ¸´1=L»-éKZÿµØ/;Ðð…8)ã)º  ðHSÓ"Åë_Ó o6ýHÓ:!Ù÷MßÊá´Ã7NW|åtòŒC£ÓM«6]I³ÓÞô;*ÇÓÛ4=mNÛÓß2è§ýêÓîô£(¸v‚ÿôGi'¶‹5PPÓš‘¥3©· uÅGkJÓïiDmPo’M+9iZÔ u:MöõÏ õAQ·­ _HQƒ¯ õ?ùi–5Ð?_|RðJ}R;­/5 S[|,uSùú›6õ,S_Ä}«Âë öÔ _>°RÄ[¥ÒLTF5N½<;‚†¤JíT¿Ó@ö—ÔUóSí ZÕuVMUsÕí¢>]U·¤¶àXÍT[ÔåôX]ͪÒßAý¸ŠÕ ß}òÝ ‰«TVg”') 7óÄau7½U+ÑÌ.Êý¢ÕÁ Yà&ºD*\mE3ÕÍôkzWÇ·1gÏêVÃ, v:Š”uÔŠh–Ð aeÍþqÖ™uìÚ†‚Ö«¬Û*Z»Ðwhi-‹²¡$4fýÉ걚µ êZ{{ÆÀ°£€‹ë£›Zóª¶õ* [|ÇìôÖ !nmñqM8\gÂñ²÷JMß¡5amÍ\S¦Þk\ƒ¼?Àtµ~Ž×õf­]Ç®©æuMúuÃÍõ XýžyM]«¯•#0¶ª×oëýj毽"-Ü®JƒŽbº.6Ö^+ά ë×öµhÍVþ×£e€Ý_3ß&ÑIúØbt‚=ƒ¼@7<´ö×0€ƒM…"š6ÍZ[Ø‘¢C(aß×A0°"wØ TM'×#6„Í𭵟¡LybØ+ö!²Ð/¶Cc'º36^]„²îýêÒØ;6(‹ß²|zuL©c÷Ьl]d+Ä´¦?ì²@/kxº–‡çT eG•ãúšÇ ³Å±1KÖŠ…%1›ÊÌVŽÎ,<Í:‚˳5 EÅô-ŽÈ’N³¯ß4¸ÌÉqbj/Üï› G6ÙðíãZgKÌ`°ü@˜ŽëÍÊ&*|v6uvêÙ¤Ÿ¡ì¦>‰v ­#2Ú€„}BGÚ®{=hº–6÷‡iÇ ùë¦Í¦ZÚ¤ h;|[í·S2ÓÀ3ði—ÔdóÀj¿˜v…{ñut`ú4|´ö©½Ôž|¸¶Á÷ìÚ@¯Ý\s΀@°­kóÚµ6²­lÿà ß'0'Û”©­lûÁÂv:,SÛ€m·}è|ÞÞ ¹"Ú¾¶zÞ’}! 8˜\­˜$§·dßz;h×ïíšÝ·¾ !»n+¼æ °èÌ⤨¾Ý†¬‡õ¿pû·ûvÈú-Ü ý ÜæàÂ=…Ê¢wÂmìÃÍ6&Ø9i ŠöÕ®Hú¥†7÷« û×'Š;r{Ã÷Ér‡¹+wÉ ‚Ü3nÌ´Ü47ksãÜo5ž‹”ÚâaÎ]2ÚÍóã:ó͸Dw¡}tó·I÷ÿrߤ¢vÑ-£¸M·Ñçb|Q·Ò½è&¼ˆ.Ö g;Ý€¶Û@ƒÍ®¢éê€c÷VYvǺ´Øý|ËÀ€§k”¹h÷Û 6ËÝm·È·ÚÝj7¤ ËÖÝp÷Ú­ëò™½âÞ wËÝ@¯»“ÂÝ@È{ùó7ðý>Þ /úëï!¼j1æíxkÞº0ç xÞ/`ðï¡ë2¼zïã*ôæ¼÷ñÐkñù½¤Æ\¼Þ^Æ›ôÒ’eŸÆ |¼¶È» 1¯B[î¨Í;õn{;oÒkü¼A¯Ì;|ç£GoÓ $ @Àô*ßG õÞ¼/Càò† °²â¢ŒêkÙèˆ<Ë× ¾×åâË~¾DyLP-1.10.4/DyLP/doc/Figures/factorcalls.drw0000644000175200017520000004412711171477034017064 0ustar coincoinª» €A#€ ˆÈ sÇH6eb P%Ì™2SÒè)ƒBFŒ.r°q#‡ )XL3›0y˜¤³ðˆœ7uà,¤RK!rêÌAƒ¢I*E¤!† ,\¢DŒ!mÜpQƒEŒ3\HµaõhQ¯F‘ÆëÕoĨñÁƒÊ( ì„a“挶R’ABÄܺwy`t ‚N1l¡HyûD •$Oœab¬  J² ‹¹$bnÄÔaƒÛ1@ˆ&]Æ4¦ ÆÌa‹BÈ›7kÚ„q“"¶¶mÊIS§ï0›A`Æ,BÌÉ1kDÄf#‡v'G˜$™‚¤÷I7gê8,Ã6íZdò|1f 7rÎÒ©Ig9e´ùRÆ  „ÄÐläA—á¤O>%Qaá€CRåÁ”SP‰Åi¸A‡Jö¡pÃ`,ä0UU7„eU 2P•!CaÐÁ“‚;õôSPC}ƒ„.ÕÔSñ†‡0ÉR 0!Óˆ^5u¢€JЍâU-Ö•€x`‚9ÕØ ŽÅ£Rþøâ†~¸’ˆ$RI )6É¢‹XÆ8c— Þø ŽcVx!" IdF"%“bÉ0”KN9§•gÚYž6:˜c„’ùç‹‚¾Gè‘"êh•Œ²Ùä YXjS8dDWXy”ƒ WŠD“M“.X)˜:öX&†!1™ 6•* 7t…”ŠS’…”Yh©Å–[pÉE—]l1Q„}ý…­`GafØgŠ1æd’QfYgplnfp|Úh¥–Újõ¾†™l´Ù†›n¼ùœpÄ7{É-BsÏE7]u< p]vÛuÂwáWž´è©7Gkp¤aaÈÑÆòÑg~úñç€Xh`‡\êú垘úºiÌi‚ÈRœb= g›0*à­7Qzó¥^ijfHWeà 4XEìG9Ì l¯Í.[ÖYæMûV\Þ¦-·~]Ø`â–ØbP4öXd“UæÂeðºK˜glÍËšk¨©FoklÁÆoÄþæ¶[o<\qÇ%¬ÜÂεçðÔY‡vÜy·[Æm|^z_Œ1×pÈ‘†nl ÌÃ|6­œß~ýý ­ôå꥞L#å4°+JMµÕcÅp¬Îö:–×Ï‚-m[c[ X¶Ûv«6[læ6åÆ}.ÝêÞÍ®ÞìÊ‹/á<~¾k†Ï†ømŠÜ8Á=n0Â<(Ì\åÐI‡9ÄÛ\Å<ñ„.Z£SéØ02ˆ§u)‹Ý}fç2Û-w4Ê“¥Âä;?=-xZÞUlàã!yÊK´Â½j•zh{!¸3®·™kné²Þ4“¿wñ 4ë³—àþV¸}¹¯6ðã~C?‚Aî`ÈÉßäö×0ÿe.bãœÅ0f@ò @¤[àÆ †’E°>lYí`†;\epW8kšµVEÅ;ÞÖ˜Õ$:o--$Ûõxp6ëMo†m#Ü䆮º­+o=Ü[¼úÄôÝkpì3b¿’¸85Ñ~‘“¢Âf9+0‹¼Øçº(:0ª‡ exˆ`B‡3ÊN/»Œd¤; ò*g¿”:U$P%I&Mñ j,…eU0K ˜iE¥VÒÍz ÇÞõÉGÀPỊ̈֔Pó*D“æ9­)Ì,Í AÜ\¿ù«vrÈC>»2Ï9ƒ)E“*ë\TÌ´ Ï7Ê“O™š£=Ç¢r.³™4ð§:›ÉÎ!-ž¼ã Î>XGÀV3 ¡ ÷˜¼åõj…Ï£– YÈ´2{5äÞ"¿—ÃGò3ð2&…XÉömò_œ_ý JýQ®ŠÓÅ:§Êjì‹û>Ö¡4Ôòu*K#íryA7*-£½ f†:úQ«Ì 'äZQˆR@ªTzßj© aº½î1|:_$ËGÉZrˆùòéû€*?&õ‰ø3*)û—T, ©\|jØ¢ ªºÁª¶ÔjÙ¨€‹¬*+Ôš¢•²²H¤z4)ÅâÇ/®f«žK¿EWEÞ°‘áÛa»öšÓ¾ñ¯=Õä`ã·DÇŠ’£b)À¥nq•’åX©2;àG ™eÙV-¨!™m £DèFÉ&|’óŸ8¨¬Øixdê­¦@»KКí.¼ÀTè™î©¦†¢7¾,"Ú{ ßkÖ‰—ŸÅ¯˜ NaóS†Bæ×»¨PIxÀ°B|'›vÁãuðשœ,ê`†/°[Ö¶ž½7Ëg^ß·ß!ëGKhärDO¶ŠÚÊì•ÆÕᑦ¡´o‹W›îöÚ:Õö%;ÝíOÕ°á.ªÈMmÊ3§2²)—®zÌ€Ÿ2ÔúÖX• viÞÕ¤ñ;Žþö1ÔvQ Ïª„g úZ•Ýèè5<†WzÄïZS*ßÔâQÏòÔ¹›#ZÝã`ù¸GÞõs«ìk;œ/K‡³»vh\ûž9 Þ~ÿúƒÃq1#ü'ªä *&r‘Œ—ézØ ”ô 6}úA•ø˜­?4ìŸ4{Œ¿½ÏÄñ¾o÷œC­ÀH¹;Vb wÖ*¼ïÍf)Òi q(ÞÒÖF¼oØW½ã_µÖGÉu梲Ð=` lÝÌa ­nó›ã<çÒ”aæ£×FnÇ|½ã|f•Nws@·h ÇwJæwÎxI—HÞWiÕVq’”x·xæ×x?õmB•uÈ%J“CyîgréöTóWapùçf›'gcÀ2ó€\¥!’’{pwzáô`¿%,Ò*6 ñz×$c¨¢DX"·‡ƒæg;¸{¨çƒÆ„2 „Kø#G|X‘CØsÉw%AB ð1­±BÂð±RpbPÓd9t—1!!!ãÑ1†jh$ ІoxU±,wˆd0"À‡kø‡nX;Â3°€4, vÒ `ˆ‰(d臀XAfVH!Av‡—˜‰tЉ©×‡l؈X1!4 52 ´R‰ÎQe˜X¬˜†‹ŠË²Ët‡¹Xˆ¨ˆ ‹Na5aŠ7p‡u&n`jxñ¦+W¿ø‰¯ø†XQ—ÁŠò•x-h@™±y ºØ®ÈˆàXtXÔw2p‡$ƒ peçðŒÌH‡Ëd)r‡êq º¡:Ëø†¯bVÑX‰ýøùL±b‡Èr‡þXýyP¤ñwБò‡â‡,r‘x8»˜’+Ù’Ê葊"ŽQ$I dà’¡hÅbU‰Aɰä/1”;ù’=IŒUQwŸs“*yDÙˆS9‰’çXé˜sÑCÒ•X‰R,.v‡sp–i•EIâX‹™wxh«H—^i—!˜µhŽÍQuÁ/"a€Ñóa†,¡ŽiIÃØRÁ*8`Uó’ÃØ“!Á¤Yš¦yš¥ù’XAUSŽ/R™Bó*H¡™7À™ž)¡8‘±È9š¨œ¦©šl’bÁ–¯ù˜²‰™EÁ¶‰›ŸY”qhUcŽÂyºé•Ó)“Š’œ–¹œ´éœ›Éc¹)•qHˆØyæÙb9@}—Þ›³)ây›ä°8Š/¶2@‰éœRilÕ”,П—žów j•o¨Gz‹ÿ‰š Ùœ¢) °y Ã˜  –*"\¡À9¡©¹› 5!¿‰¡Ê9ŸÍÉ¡ è¡/¡Á6¢$ú¡SI@©¢ßÉ¢b!Ú 1¢BJ£$ºžÍ)L žê£/ ¤¡(£ÇC¤ªšúéžý‰M ±œÔ˜OA0cii€%ã'‘‰ X‰\ NѦnú¦p§r:§tZ§;rEЦkê5€1€nÚO;¨NQmz…0`¨NÑŸ‰ê¦…©¨EÓz80©‰j¨{Z4Ec©.æ¨N1žÚ¨mú#y:ª~šoЧƒj§nš©¬úªuÚ‰]ú¥a:¦eºgz¦Ô'® «¾ú«Àª§l¬ÄZ¬uÚ«Æš¬ÉЬÊ«!1«`*¦d*f tºª¦ `Úº­ÜÚ­Þú­à®â:®Þº¦äz®èš®êª­æº®îú®ëÚ®ðꮲê¥Ñj«ÔŠ«Öš¦¼š­7`ÿ°óº­+°K°›°7 ¯óZ° {°Úê°ÿú­ K® ±«°‹®‹° ±õJ«Òz«’«üj®û­) ®+Û­-ë­Û±û±,«± ³6+®/»­kº³Üê³9{³*›³Cë°2;³[´Iû­!{¯ÓZ­hjت TKµ[µU{µX« G«®[« Z»µàÚµ*ûµa‹µêz´_+´ðÚ´µú´úµ»º¦AP·v[·Ó”·y{·wk~{1À·v«·z+¸u ¸[†kJ¸{k¸‰ ¸‹ë¸Ó´¸ˆ‹¸“K¹t ¹—k™ë¸–¹Š ¹”»¸Û¹Kº k¸¨[n;²ùZ²û*µý:¹vy»5@‹‹»¸k»¹û»ºk¸¼û»¦«À ¼»{¼v黼›¼Ã˼À»¹‚;¼Ë ¹Ôë¼Ç ½·[¼Ô;º‚«¼¹‹½¸ûºø µ×Z»¬+º»;‰ì;‰“‹ºëÛ¾îk¸kÚºñ+¿ï¹÷Û¾¡Û¹ÒË·ò˾ù{¹û+ÀéÛ¹ÜÀÁû½ð+¼ L¾p+»r‹­ÑTÁMáL—‘Á‹ª©|Á<¨€Â…Ú¨5‰$,ª",Â|ÁkªÁÌÁ¼ÂœÂ«ZÂ$lÃ6 Â:,à Ã{ê‘úÁ¬¢Ã€zÂ%ŒÃ(LÄBM@|0œÁõ»Ä4\ÄHlÂH¬Ä8Á$‹&K»k:3ÆbÆd<Æe|Æc,ÆiŒÆgÌÆk¬ÆlüÅlìÆnüÆtLÇolÇv¼¦xŒÆz<ÇœÆÜÆoÌÇyÜÇf<Èb¬Å±Ëų;·ÃtC É”ŒAvÉ–¼Ä?§®·Îã/>äy äAŽãþãßjä.^â3Þ­KÎäÞªâÔl¹[]Àó+¸\Íå Ì·†ÝÔ`®åO]欻Õìl·BmæNæ^¾åô«mžægîÀŒå^¬nNæ†kĉÚçL½»€^¼_þçU,èWAèH¬è1°æu èa~·‡>½…nço>ç’îèŒ~ÂzÉ‹+§pη¢Žçø«éq:êw[êÓ«À¡§u.¸¬À®þç©>ç³Nê¹Þêy.à"[¾üLÍh­ÀrzÖY-ÔǾÕ^=ÕÆÎÉÌžìϧÈÕBMÚÕ®ÔÊíO]ì,§cÞÕÒþíÜîÔŸ®Úߺ¸C°îì¾îV ®êÞîìþîñïò>ôî­ö.ïùÞ­Å{ïî^Õðn¸ïŸîðkmÔ/¸oÕçÞ¯7=ñ0@ñ_ñOñ¿ñßñŸñïñæúñOò&òò*ñ#ñ'ÿò*¿ò2ÿñ{:ó6_ññt AÀó>ßÍÝŒà>ßóD/é’ŽàE_ôSmôH,ôIÿóLOÂH?ôPÄKßô”KõEôF<õOÏõVo¼Yÿô=öRO¹:?Óp:ÅrjÕsÊö½Îëpº§p¿öUýöJ÷«ÞöDLÚnÏ÷4¬÷v‹÷?÷ ð÷qZ÷oº¸iùøŽO,’_©8€ï“O,ŽŸù_Úo‘‰Jù—ú•Êùš¯ ïøS-úÄbù¢_ú›ïú)ú²?ú°ûªOù_|û¶Oúÿù³ù¼Ÿù¶?û¬?ù={ú€ û¾ûÀûi/EýÒ?íýÖ/ýA{ý×ÿßÓ?ýÛýÖ¿¦ÿ­ýØ/±äýÜþßþÿ½¦ç/ÙþBþà¿þà?þò²6ûþô¯ý›öò †á3ÖÊÊ ;gK¬…½³˜÷ €!Ìjª«wÂàž¼ pG\@£§Êà3€HlŠÀhgí˜UËv@-­5®ÖÂÆü:$PÛ™Àª†š³ `0°Û¹Àö•š·“_ ¯¨ÕÀ 6ZÚcqÜ n+%¨­˜ ˆpÙªÉ9)˜ä¨à4ArW0¾9Á-8å’`\‚š+ †8g\€cЊÀ52ׯÖÖsƒí ¢798ÞÖ–ø‹ƒ_ë æA<¸µô`loÙíÎÁ=8a$„‡Ð¼m¸Dˆµü`#loG0ÃÁ¿Ih„t\”^BÂe®2a%Ü„zËÂ?P˜äDaãú‚Mr‰Â'ˆ Y¡‡…P Ö€UèÓÞ«ƒS¡.Ñá:\(¼.à"m¹ÐˆÝÂÅ× Ý.|S±nÓC7ÕélØ0d†šNÒ:ÁW·ºYÚ³j^ f5mÕ¸¡R³j-°Vµl8·a9‡G­Ù¾sø Ù!Pó†ïÐþ4pèÓСQ#‡é0«ÙÂeئža?ä‡NÁDTÇ §aA”{ÄÐ &D„تø@äyQ BD… ¡Ú«ˆ ñRÄ6•ö`¨úˆ$‚D"€H¢IôSB ¤Ä•ú‰Kl‰/ñ%®D•HK¢M4‰1'~Ä/¦sâI<‰4q& –H]bL$ŠB±&þÄ’Ø?¢H̉âï&ÚÄ ‹bQ<Šý$)¦D©ˆŸâºkŠ0`)’Äú¥­¢Q4‹0@+þ)±8Ÿy‹Æ¦¿q+®iÌÚW,PÔETq¿]Ü‹}Ñ[ýź×›`Üj{1.Š-¿ˆã×:Zƒ.ÆìœVKmýÊhÆÍÈ;£ È 14ŠÆÑ8+<£iÔŒ¤15†ÆÓ¸¦N£jT§Ñ5¾FÒMãq›£±6zFܘu#gT·‘6úÆÍÈEcGž‡d@Ï‹‘âé."QgbKH©ÈÌ¢+„*Bb‘ñS7M’U<@•$Aê;|OIÞ€ˆšä“ìyQ’-Ù%*i%‡Ð•Ô’3€àtÉuŒ˜,mf’L¶DPµ$Ë䞊‘mÒI:÷BÅ•¤“ý©NÚ£0¾äžU~²OÊB %ÆS”ˆ´09 '·ä£AO^!¤ä%õd?“™Ò¤=p%Öj%ÃûV¶2Wâ §+m%­ì•bíWµ è+q%°ìwÜêXK !,¥Q€­l—É0¼-«¥´leQìZz0j©-­¥·¼–ÙòƒqËoI.»e·„Œå’\^Ã?Å.ýT£|—ý)¨ÅËwÙ.륟º—j^ÎKx /ñ¥¿´—ŽÎéËF90ûÀü—÷²`N¢‚‰0¦‹)˜-Œ_̆‰0¦Äl”`^LyÉ/ëWÆô—“aÌHˆ «)œ&UζB(˜2Oæ,4™+SV¹éäÆ áj™1³d.¹XXq&¼rÿvHH†à|&á‚rE hÂLÇ…4YæÒ<šPNiîLÊÕ4eæ’£™z«jêÌ ‡à´æÍ|šzËýEM«É5©&”#™_sj2Í Pئ۔šetµÍ¹É6¦Ú<šn“nÂ͇ôèæÜÜ›6kæ-¿ù6É&ß,]„3iNgœ5®oæM¶™ö¼ZÛ»{qÊr&>Ì §Ôáå _ôÜfNÌ{µ9Õ=igQ#mõÓ~ÎÏíy;#˜\ëip†@óHf²+ /Æ ±&@+ Žh þ)(Ú؞ʀîFÐí¨@+h-atïÒÇ Z@Ù^Ú›E(”jô€ =uXDyŠ%OÉÐÒöñŸŸ¼¡‰ÊCå?ô‡ê²Ùʰ" MH”äõÉ%júäÏQ@P4…¦Ðhò/3 {¡=1†Â€š".ž Ý•`Ô3íÐ1º0ƒ(}OD™±)#šD“hÇc¢Lô‰>ÑŽøF-‚ewôŽz<Û2%&ò뢯~åQ<ŠGôh E~}T_þQ%:He@ +¤xd"Ò‹¹1i…¤Zm¶¼ÇG))Ãt~ýó2b7:踚¤ãjÝÌ”V1T èÂ]ÔX¥[-•nµSKK©šcS°ô©ÉÒ§FKu©-å¥UÌ•v*$¦JW³…Z¯âÉ#°L›© Ï4šBSgêL¡©5}¦l)›.“dú$·©6%{0À\QSf*MËé8]¦×ÔšjÓošL×é6§ä”šš«tMÏi9U§Þô¶Ó|Ê–à©=¥§ë,[ýÓ{êNûé>u§i﬜•Z4„*BM´‰>G¼¨Pm‘-š>‘hÙ&jÁ•Ce¨ŽT/NQcÀDõ‹U£bT‹ºQ#jGýVÕ¢ÆÔ!d®–èIŒ)õ¢æÔ–Ú'«c¸š©¦h¤ZÔ’êC*E]M*u§rTæ®öáâzªP5ªJÕ©:稪U½ªXªÆº¬ÊU»jUõªYµñ­­±JV˪Y=«vP ÕµÊVÛ*Y-Œn5®ÊÕ² Wç*Z­œM2¯^!ªv…új“ÔdzU¯bµÀz…¾a•tÎúÕ¾ Xk“¬ŽÕ°:Ökwøë{êe–²VÉXù*aÕe˜•°jV¿ªÏBéÄŒ‚³r °Z[kÑd­°uµ"½Ö[_+m•­a0¶ÖVU¨[q+躭¬Õ¶êÖÙÚ[Së,ì­³tW•‰ ‘+q½­,Ó¹*×Þ*\i+ÚÌš“³m"=ÕE¸²kÝ,]Ü5l*ǹ]¿âÌ®å•ouMïj\?WwMœéµoQMï ÝkႯàUp9Uõš_ùëê2¯ÿÕ¿v×9_W•¯ÁXË "ƒ-\áõq=X +`!¬E,°xëÀXÇuóÞÚó°‰ÄO ;ûžõl¡…/ĦØ»bKl‹u ø‘>ëbiì‡}±Ñ‘´EGkcÝTG„UïÓWYXwb©çø,VCöU-Ë"f¬’,«ŠÉê}þX Kb•âcU:öÊ+-¬B(޲UvËšXeÅe‘ÌåQ›¡YìH+•XŒÍj6>®Ç6»fßì Š³kvŠÑY9›cÅ`·â³sö ¦A¡9ìöœG©”‡6ÈF¹he@h’5àÑ*Šgª)-üëyÚ ÓÈÒ¶iÿ—d¦–¬ÌGQûb*eÏ3µá´²È&Y —I@U‘UÁ?2kÇ0³µ?T[5I]kpnZ¯åy&Øæ©D›hm£uVÒ&¸ÿ˜­дš¶@þ+i jg@µ%µ&u>¢ZTËjw„ hµ±ÖÕæ€=5kÓ¢بÿªR¦Ûeê'Ùmz±¶ËÞ¦Ê<5oa@ã3øö6yµ|›oÁ(}¦k2à" ¯&pî¿£·)áâÛp¨ÔømÂõ·þYHÜ€Kp'®Ä=¸~Rá*\uèpĽ¡—âfµ‚{q?®Eê¸ûVãU†qCîÀ¹.ãf1Ó:4±•’t B(Cbe„4!‰)±€¨3oø>lbárÀBàbÉGÅ M3æ€ÁU6 *\ YBTü÷¯D(SZ!óFL™3\ÀQ£"”(A% 6et€xA§ œ0`ЈqƒŒ4dƼ±©²Ä9eÂÐy#Gf’9l¸!CDN˜; Ì0ÁæM¢G“ÒIóÆ ¥1APASÄ”2p@€ˆ1W†Ž8tаBFÎE¡„9SfŽÌE…xšÆÍÅxÓ b†  hÔ˜¢† E‰¼S§M7tœ”)C†µ”Â^åŒ),Ú©)B.}šÎ”:pà°IãvÙ´AئsšLî•E¦jõsÂØ)3“Ì—9v¾tT¢ ž1h@´6£@A9eäI3†Î̧Q§V½J„¾ý9©çŸzÀàÑGt´÷‚ë%°‡‘¡^fôa`…²÷Bš‡ž†b¨À F!¡j…‰ëØ„Š{´Æ–EŒ&¾ ÅÊñhñèáCH8ÇaÀdä‰SÐ.îh`Œ/Lq„’eÐq†Uy<ùRHH‡Un@Uä•=Ї„lÇVrœ!†˜nŠqœrb5å—a„ɦ‡cHHšÛ-%ælÚ|p(…†˜,†ø‹l°!æ\z æ¦rHøeaK!µé¢f·˜î1œ]¾Áª¾Z†o4Æêž{Lië@Ñ1é '¶!ao$*+±/¸!!¬wD*¬˜nà!á xÔ¡˜¡î!²ÊrÛª¶*ÊlbtŠ®P]É!&ª½¢ñÆï’Ñ)aÌ1l‰ÎñæÙŽôm²±¾ ï¡H¡G®¨)øF\E€ÐÆ»t(yæ8>¹’‚J1'‡ ÌAGfx(FIâ 2t˜ÀÆp¤GlÌ¡`|Óá1ÈsUƉPA…REe"¹ sÇñóÌ5ß,‡ÄmœH_ØhßA]ôÑ#Ô5ÑFƒvZ5{žôÒÇ/¡ C^à=ð‰+oƒ…Êîaaq Û\æÒ–/~L@Ì@3ø(àIÍ9Qº‚e§tÈò@àíî}¨±a¶0C!eJ-RÁÜ2‚L‚t©Ae\ø†Žp !ë’?Ȭ:k%,Ü “¢Âµð… ˆaiD!>ˆ54^¶pX5‚€‡LÌ”ÍFÇ$.чlÁy&E5R‘_'¢™„²ØE2†2¤at62’/=lbÉdF4&àˆu¤£eFòÄ(¶ñL7dñ”æ VY|iB?¥g"VÈ<Ø,×I%‘4Xjk=½LOÜ0ÔK¬ “= xA)S1,d~²PêÇè‘  PÒ°9‘éÎ1iKÀ\2 maœt‰¾Ò‰6,²SÜY&aœi&…–æñfcÎà08dPž?@m4‡5 2_ûŸ.ƒÈˬó˜Åü¥‰’ PzBÖT`6A°Ín‚œ1'9ÍÐ$ø€àœX‘à:ÏæÀw¦&5e3Ÿ‰.Ζå'ÿ)S‚®a”=š°âóv1å ªœš\@€ÅÂ…¯‰]§/e©žZÞ2—»B/-Q‡ ³C=&}‰êq* \”)S‹rFŸ èZ•;4i‚pågHå‚N©š*MK —=¨u©.…iEizϛ浟ý<¬\[Ï‘ÌÏl.Ar 1jJ6¦Ì´(]. ÔÖœf5úYÊö¤uA b@Õ^ÓBc°C` &»æQD‚-ÏyÒ³ ùõ¶I‡Íàde À –°3q-:9c[_Ú6£Ø|#GU²œ†“¯éqçq¤OÐΓ±6ͧw!Y !bi.G9X³€2  EmâQS™Ð¦è Píë+c9K«‚—|Qu'Ó¼-)Î’4T9ä·]Hõœ{X6«[•h=½*â°‚ÕÃÐekhŸ9ÝÎæÑºÔÄèmµÛÑî~S¯rê€O X:®Ôlíläx{S^×ÖŸ8½q?•›•’r‡3 ¨|7ØAû’€JñžB•é†Í‰5KÃí¦4ÅîIÊ€ÖÚØe»‚(n·*ȓˠ¡…qÃZz¸k†®l%·» ©³•çÉi.+~ž Ãù6àY=z>tŸ¬hÝ2𠄆´¡ùœèFZ:¤˜ž ¬õÜ¥j+ªý¬£EÝÂç0Ò©æ^Ü Ä™Hþ°4ó'…½Þ0Å Íuåf¹¶ô4ÆÂÆÚí*'$(4_?åñ”âÉ2›ZCÚû,бÍ ²G‹]r]ÝÄ ‡÷¤çRû˜Í£J‚Ýt=Ñ”Äý±-‹ uàNWGuš¿)\e´ëIt‡CÏZ#â‹á±_~AY(D›˜/Å-Λu${xÁ£1žé&qÎV¶è¢Ñ×r×M çŽmmr‘§üÀlyË^®pŸ¹ØÓžhîÝ<Üüà{KmQ>óИ»-¿ìóÄ=ºX“é­Ù¡ÄÞ`¡9ÔA ª86h©Xh$°ÊuÈ'î›±½â9Ï.0cÁk]Ê ·ÆÛ÷Xu§r}å;¥%!¥ß{ÐДÎ$•9pPcÅ%sÚ°>û8´KchCÖ°`¬áywpÄ_@RöÑåínß;ÜQ?cîzì!í!kBöõ&³Ï¶£=<Ïj_zûàÞ@øæÎëmïûà ×SÊüæÜÜ ß=ïÏç;ë[îú.ÑõŸôõ ˜ÈÀHFbéj»½AË.î} …šŸ žzŸ&íU-€²í¬ãbÛ–Ï!rhò^ „T(."Ã[FBHäfn2ñ%\qr"B 'þ—'~b\¸1¨/85sÂjp"4r6ƒ.åq)/•G_2…ƒ)lpè€{àžDW!ˆ‚8(„„‚*øPÐ-h3q’€žDo<#Ìh3e0ÃÒâ=3xeB ƒ.‚=˜Þ„1p!)”„9Ä%È,xL{\ÛÂ,Œ’XƒRL¥kõ8 ð…&²Vw`!pÈk% S‡l8l‡1"Ðâ={hj}h  .±2ˆK5nH.‘ˆ¦&sHGŽ+K¡ˆrÁˆö+üT‰˜…o)XX†pàm* €fFæapàCoÀOV=£†!+‘e€ n°x'¢{BÑßa#™ò•WÂ>Xò§1Œe0ƘG†%Œ\WÅØ$l€Œø³‹úÓ,epùÕsðf÷n¦a„ÃÅ;ÐòU‚ŽêÈbˆ%b/ØéhÂÕ<öˆð¨#ÜÈ>÷‰òÈ,2UâŽáØ™™Œ6‚0᲌ôc"yt0öaXõ8@F2Îó3X$@qñ!åÃuûT „E#y9B`ÒHÓBÐÒµGyT\¦2ÙŽ=©#KdkAÉ C)xÚG”Å^ä”ö¥=Ú¨GÙ0(¢#N0')Žúè•Å…•á8Ž…aŽS‘…¡G]ánöŽÐXŽç¸kY“Ù2•YiyÑ1Œ/yY?‰G ”ô^ñõŽaÉ{Ù!ØÖ‘XÖHŒs0 IEXÒŠÍÁ_ aõ´ €# 2À/8£Yš2@©™ÇGš¦©D±9­iš|›4›2`M±‰´ 39 ¹9t‘š~ÃÙ2©‰ÎYš3€šaà6œ°©šÙ9œ¶©š7œ»©š 1œÀiœÓùš#›Ù‰6™‰ÌÑtÞ1D2#dN  Y3!,L!zÄ)ra@Ì¡ÊÙÜä3 Ÿ1A0g²Q}f ªŸ/°Ä=s1ðŸA(Û‘ Z¡7¢ÐcÁ­¢¨9³1™ ›E  ò3j›Eà ¤Ñ:>º›E0ñQi ¡3œEà¡6:˜ñI@£º¡œå¤: ¡0á£>qBŠ¡Eš ;qJê¥Ðé'𢴅šO¥6:3ñUÊ£Wꥶù[J¤ºm¦´œOP¦kÚ¤SÀ$B"z´5¥U ¦ ZëYoÚ£‰ºœUP§š¨ÐYzº3‘’Ú¥1P°©‚Z‰úˆÚ©ãÙ¨qک繩zZÅy©S:Bû” 6°žJñRfjË)"QAyóB¨6³´ŠšIõ*À6› c!ªÊj›yp´º›“öM´ œðQd¬MŠCc@CÊ:¥qPCB¤Ž zëY®çJ÷fÐ <±œgP#h;C"¯ô*~3q¯/Õ3éʯ늚[3ûĺ3;ëʬi°®¶Ùg뺛ÂñmÐï±®ÀÙù2:<Ѥør„y<1¥!;²ð*Jx±žð¥;\7¬Ã ŠËIwŠÀdA²8‘b€ò73‹šÎ”)]2³°é®Ì!°gÀ9³¶©´¬qoO‹»)µ)»°3³Ày°0, Ä°xѤ4“„“ŠSÚ²üùf— ²¹Ÿhpx^ײ;ë¶ËY®¤Ò­zn Óä¶k9°j£9`›¨*¡„»›~ê¶Ài#c0¨nÛ¤äVƒ»YÝ1$ ³ù ‘s¡vú¹ËY…‘³. y~#ê¨Ù¢#£~›¦[®#ä1Ÿk›lá#TQÁ Ÿ»›±hº?åÀª¢çdKyû¹S:°û¢ùë)pZÛ 20[3‘‡;½Ð)gið p*¡Û‹š¬!º“º½°¹‹‚û3Ûk›i€¨Û»›ô1¾;ê¨Û œÛ4¤ë‹Ñ¦Û;¥] LÂS—Ÿ~1ëkšË‰¸ ¿¦9 ô½¦‰š£¿Vj¾¯iÁ¬ªÀ¶¸¦› +hÐ$ìašÀ©>ÔÀ¨ÀM‹ï«ÀS:$œŸÿ‰†E³d Ã˹$#$ª§ L &ú¢ÃhŠÄ£sš°ù%<¶©>E¶¢ÃŽk­a#rP¼G:u@¿L Æ‹;>§9¥uÂê Æü¥© ¿4y Æ4€šz€¼ùɦJ¿š±¹/Q=“ÇŽ·«a»ùG‹yŒ¤|óšMZ3Q‘įyÃLœŸŠjÁð[ö62÷v2à Œ~fèh”ŒšY@¿ž:kÑŸ”l›]2:îÙ#š)Ÿ_0yÐá“G¢Ë2ËÞÑXTBÝ k UB—_yÌó¨3©ž šýá÷Xq)“P™[ #†Ø,\ñÙÞñÌõäŒ-ÙÒ¨C™’‚¶ŒËMTÍ tÍvÍí¸Í¾Ì™ëœËB´ãÓxΞ&ÏÍCÏð¹™óYŸø"ùüŒ×XÎ?4•ÙP @•Ä!ïÙÍ©–L%Ì"CÌÆ,tù9¥*ɧa“éÁrÙõX/PÏ¿ìÑ^Y&ÂÒÌ#_PÍÅU=ñá[Ì<дœ˜ÜAœÑJ9˜c;\2 Ô=¼sõdX¤×{FLõ´Íwð`(™Tm Þ2ÛÜ– 43P4% ™„E•ÅÕv™˜1|ó£ÓˆrW*y"]qÀgÝŽ¾<Ó^#w­ÂH¹×U¢Í ¹d0ØØ2zÀÕõÔÖ™A{`GqÔsG4×#¸ÔØõôØ%‘o]{”Ý%rí[@—6[ð†ŒN¶ÚœÈÚhc#8Ò#}ÕñÜÕ1bÖ:òAýÐMíwÕi²†S ÓýÏ6¤PYOb˜?`}Ûb-\ræIgíÔiÍÕ#áÙéÖ’ [¤mÙ¦½Íˆ­Ø¶ÄÙlýÙéAÃ7ÚGí1áýiš½ÚÇ Ù¡=ÙÞÝÞIÙðÍ©]Þ¬½Ù'ÉOÛ7’# SÛÈmÜØÑ%ƒíÐUöÛ¼cþå/Êd $q!,ôñy€¬.ÈFñÃkÒó+§ Î0›(1 À ” @Ø)ÕÕ'0/fX5áXR-DvâÕk ƒâE½9‘43gi=¾u? favb8|D^ZÇM”ˆˆK±aâÔ;ž-X„-¸ML$BÑ&RZÎ3>Ð1¾¨_ÀèÚ¿.€3°JÔ2ðæqnJ$Ä05t~9à”Á~j2 av;ŽäFo2mnèC–Cˆþ0'EH´â7`Zs±¡.`7`h#壔 ès1S¾91 9‘ê?7ÒzÎT54Ñä}ç¨>©nä1–Ùì¡-°šã§âêd3( ³É-Àó80à9ÁìÕ Õ åaSëÒîBvòâ(@yÎÊÕ|µ3f}Jã27 D9PéJT5ìzéu®D¢Äæ*AÓÎ|1BàáZ*?cîJD½ê®âí>[ïÎ^;ÑÎÚ¥eït”ï£"2LÑïõï jéì>oéñŽðôŽY ïúN*•_ëŽQ_ñð~ðmžðô.[›Þð!ñHAò¯òÿïÕéçnðÔ‹.¸s1ž|±ñ-ßñ ó ÿðüNòáNm‡Nîµ’žIçô4ÀC0=q^Ëê”A[YÊ]§žêªn[¬~À®NG°žäŸ帮ßA·ë¯îcÂNìk`ìÈ>;ËžêÎ[ìQíˆ_ë ¨Ù¾íóÆM?ÛsðíØ±èÔFf~dî)_ðìþïË®ñ,?ï ó÷¿ï#Ï3–oS¯~ìeõ¬M³UZ6ç£ô43öŸ®½5 êf_êsêj¿êÒê¬÷²>÷µn÷#qäyß{ìÊá÷€Ÿìt0øÍžÏ~øÔþý²ø_TMb> VR”õöùäõ«/â¾öèqû“>û™nû´uêöÎûcÿÉÀOê‡&í©½çcÚ^“x{ÏïDÈ=ZW÷nÄ{iÃå»Ñ÷Ìß“ Çûi?í×ý¢ø›váïÚ1>mGþØÀ è/dT¾í îÒÌp,Pê5:˜-^ßÕÃx—Žöá?eEúø¨óe¢=â·ö àñs{ÉO.?ˆñàÏÑuÒîñ½êg¯ŸàcvÐðyÀ‘øB ØÛî€A¯{$ÒßûcÁÚäh`Õ»ÄþÕ¾²·½z Nê}doÔ=*'‹Û;‚0 Æ:°Ãü`‘{€§ yL? H‹ |Ê >h×A Àã¯5†çÁ Ì` \ã. ‚ êõç`$Y` ƒzºp Wž¼ûJôÉ<§—úl])„$Jb$(° [¡Á{…°Þ1=Ó7óžÞ(„·pè%@UhZ|!Ò}/ïãCZXóŽa2¤-Ë6C“÷ 9Þ蓆§OäUCE÷ ៣£z60öåÀLg ‡ž °ƒž®ÿý¾ ¸M !ÁW§ !´u‡ð î·(øü¦à°«‚PJBî§+!fñ‚ØŽ’øÐ\‚'\ƒ ªAF× ¤£™D¶Ã ¥ÿ6ô}ÿ¯¿ˆ àžƒ{ýpÖѽ&¡_\„s :B7¯ ácˆ”ð>ÄKøÇŸÂanÀ"ª@õWm29ĈæÐ ¦ÃúG½Øá)|‡ûïÊÔ(üú`Ì#.êÂA(›Ÿ´‰ŠP R¿ƒ¸{b$ü‰0 :Äj'þH £1à 5p[à9†§øÂªA ]€eà†Ï~ÃaižÄc†‚‘Fdh!‰ë†Io1–¾Æh m]`Œ¶°2Žº€—ƒ¡ÇcŒÅ°Þ<·Q¼Þ¿Û ™eåÆê4A0Œ…à05ŽC¦ØúvÇTÄz¿O÷q= §«rÀĨÁ/ÞÖ_b$‹…&J9ý$ èX‹Ö/!úÄí¢P¤‹˜°iacƒŒäÌP€}ñò…¨úÊao¬Zàˆx¦«…ë8A=Ø—£ñÓ‡BÇèü¨ãMT‹Œ-^@ž ³ßBìŽA‘ Eñ§@ÔÀ{øH©H¥ÇŒøŸ"G”qþÉGŒ‚¹—‚ŠGJ?ÎCþ¨Yâ û&È™§#Z4ÖÑ fG©á¢\üŽŠVÈ ù* ©ØM±ýµG¨øß :Üt"'€€ô6C P‘\±EÀ‰ü䤑òFê=™á‚t‹ÒGzG É&‰"¶Ã7fÀ‘ )2z†(H ²GÉA¤ü‹têzaEΠ“ À’ô°?ºÈ|#¤Œü’f±&溘#±#Bä‘Û1 FHK8­]Q$§™ä ¹Ïàz,w|’õÍÀ (ëŸ)tËnJ¢È€(Yä\”F@:DZ) ¡œ”Õ'êÄ3Ù 7à$ô~m²SÖÅmWé@†œ|¥²êITIä2Ý” x©ü>¾ ôJ#nDÔð19n‰-mݶˆ˜¦YØôPßn|Mò7âÀ%+e‹rª•ÉñVnIFÙ%å“gXÈ‚h)Ûb±|?2Y‚Ç¢(¿yl 09äÉS¹ûdüC‡ñ1P^ÆB)~ð¥äƒþ‘_ÆÈçØ+¥ãÝK„8RXšI+ø¹cÂä” Û5Lò8¹ÄžŒ–PqZ’<E9ƒÐK…;¯öMIWè £!¸t—ñ3Ü?t 4C‚Ð$réR1ÍͨÆ{ˆÉèŒëEg&ÈX —ía%P«ðRâƒnØQ½A5°†â0bÃl0 Y)íH4y6yjø Áa8°M·™˜™–ûáa<ØÇØš@*À e ¨@ öÀ tÈù€ €` :x“|€Gà ’;ôap|° €rP¨À/ðàP@ Œü r2@üAî<œàøo<ØC x<™'€ 0à@?àÌ@€À?@žÀ<ðVÁ;àxrÂÎäin@ïà@p ? ÿ|ùÀü‚?Àà=€Ÿ 8€à<@ œO ’gò` y6€@À Ñ Rè"t|ƒGàÁ=€²Sð_?9¨åd¼ ô‚<‡g1ˆÔ |PaðC9À#°ßÀy|€=ûÀ> És‚ȉœg(Ÿçs€À>çù<à„ƒð ÈÁ?€ôŒ€\0ÄÁ*ðJÀ9zFÀ&èo@Pƒ`Îg`€@ æâ<Ÿ_¼ƒÐ ©¤A@Ò&)å<Ÿé3Êö((à„*LéxìƒA@¾8ˆ£°Ó¸TPÁ2PЗðà=¶@ÜRWÊœÁ8`tâÒÐÁëÜ àu€°A}€6à{D'(¥ €yšÐhJÀ÷l¥ à<€àðŸ xpàHÀ8Õüw` |ÁøË´…B€ðì>àìƒ ð€A˜œèƒ‹Š 800 € © ý ˜RT*ø@0N°Q7(ب‡ô,€f° AM57õ”€pþAà?šnÔ`¸¡”lTÀ gTªw€ ÐM±ªU5`£ €A¡ªAÐ8 €ÌI9-§HÝ `£`ðŠj.X€ÀrÂUœ: N@ð ¸U®J9«iõ Ž€¨ö[Ð Á…Ô°¢ÏÀ àøÀ”àX)§eÕª’:€êYÁV=TÖðVEçs(0 :M(ø-t‘fÖóÙh§ €r’ÓÉ €ø©½•ô/ðØ(.? yÞlàV!kî|>àøP zÀøK@”‚9p\Mi¡u`8žk8öàøTóÚD*ø¨ÀÄO8  €[%´tÖÛª?=@€í¬àƒ¯‚ݧ ÖÁ&OððÀt®&ÏÐ8Áä `ªXÏJZ Àx?Àüw~j00ô”€a° @<¨*5ÃÆXpÀ@04¯„`ICèå<0Àð³"hòü¢¸€Á ðd&²T–rfÀ`È¢À|O³*À(©§4œƒ‘ bsläÄœÿà|€0 ~ÀX±BL€0š9§((K ÜX7»V ™už¼× ›T)èDpžXV³J9gú̬ hU°A5èåü• hÕBJ9éùï“ œVHjjaçà&£‚àb)ÿüòÀ„†S°Q?¨5ÿ¦*‚:P€åôµ–ÓLÚ :Á90¶=ô×b¢úîÀ?²”XN€,+¦ýOöÀƒŠ´ê°œà YªúZÑmˆ³˜Û¦¨óDŸZ5¸Ô€_ ä̬àÚÆÏ{9_m䄜7|x00*Hý wÞÙa kO¨÷Ý Ûw.ÀMÓÄ2[*p >å| €Ú¾kà>èx À²rЩ'67…nS¶:Bæ!dΞt€ºàrú\Êt{.Ñ¥œ€ ݦútÙjÐ}‘S!Xƒ`8AH¡I7Þr]Y"ú\º5T¥[tÙjغ¶•é3.ÀÙ-º§4 pJÑ®ð`ô]¼kŒAàl—éºÝu ÂñŒŸÎ ì€Æ{w €9ä4ì^  ªȩ«ð7èƒÍ˜xÑ€Y$jȨs!5~vh`N@ 5³·öB€ÐK¬V`½®73È–Úêð:n€ýùìÁû„Ì×ùîÑèû>ï§Aøïà}ªƒŠ}ß'8à¾ÙŒÛë~¿/ù}Ÿçàƒþ€ðkÔoùý +ÖûÂß÷«B?è¨ò× |ƒð[>èþ}Ÿôàƒ~‚òËj°÷eµ¿xßÝZjÿ€¾¯*Ú/ꀽo.T†>`p+©A÷à}ƒ¬I)çHÀ"8{Úz‹‚9(®·?àƒüb°~ÁÀ»`ͪbe0 ïàÈÚ‚g0Èÿ ”nÓy°€ B`Â÷õ†BappC×ÁûïÓ ƒÏª…G)°Â'4 _á÷iSéíøH8 ¯Ô JÓ0^ÃôÖ á1¼R¥*ådsX _UÇ«U k~¥· ¿á V)§@uÃdø¬Ò[00‡·0l½¾ôâD|[éí0hÄ£”°RÓΚA&n¡‘•SÖI¬Y9넵¬Ÿ8´RÎÑúd=ª~Ÿ°3µ~ƒx@.jjý´ØŒR΀‹ÿ. àÐbXl]Y«0öÅšµ|€\œŒ—q-FŸö c°z`Ÿ¬‚°–Ã[“Š`+,>ŸvµvX$|oGì‹]­'ökVÛŠ‡:Ö±O¶Ç’ã![dãqKÝÆ”ÓÉjY\ðŽóq–ý¢WV³NÙ*Ë úñý²¥Öôã2{fYí9XÈp–ÕŽ‚y¬gù,ìÄ4ôãB ]Á½…ý¸Ò>Zƒ€ B²£½´ PdNtA)¨làOàVpøÄ¨µÔ‚0újM)fµœ×’bdK9‰("޶èv eƒ d@ >ÊÙÝ>å°…Á-å·Obt«n7hUîÞRUÈIoí­A Z•ìÛ~Û‡3+¸rX/Rà– ®¨Àsù†€…{†å2 иó._b¿,ó»ÅË£r²VÄü(@ÌÀ1#æ ™ý2°¹©4wK‹vÑ'Ï]º@·Ô&ÞÌytóñh–»_t4GÝ©{šmkÙ½»rȪÝÓìváng¦»v7î²U@vù®ÔÅ» €ÞÁ+w8¼´™!pÝÜ l¯ì¥½ÍDyLP-1.10.4/DyLP/doc/Figures/primal2flow.drw0000644000175200017520000007171211171477034017025 0ustar coincoinª» €Ì-€ ˆÈ sÇH6eb P%Ì™2SÒè)ƒBFŒ.r°q#‡ )XL3›0y˜¤³ðˆœ7uà,„ò†M6iÜP "çå9(„²$ˆ)O®„"§Î4(š$¡RDJ",`¸€ —(QÄ€#EH†orÒQ9‡e Za°ˆ‘£Ü3n¸¨1·îÖ¹y÷n$»Õ¬H—0e* RK¦N¡J¥jkܯóˆ%kx¬^¾1ðº˜aãÆÜ¿—/Ç@ý×oĨñÁƒÊ( ì„ÁyÆ í!EœP±;MoÚva€ F m(H¡<‘B%É'A˜€X DIÚq•—tÎØ:lÒ¡Ý"ˆóéˬç1Ę9´ƒ¾y³¦M7)Øgmm”AFu´!`à œr"ˆqÒkˆ`räÜL$1žäÆu8Tm±Í¦ däñu”á†a¤ÀCoÀáƒpÈQ†22GG@‚àŸZ2þ7F,ܘãŽeôô† ø8Æ@Ê‘Çkt4FG[>†ÑÆ2’±ãYIÈGMšAöTTSUuUV[u…YXc•uMj±Å3¸phcý…w„ª6¢sÉ ƒ`€ š£{™ub1-ĘcA5õædrZöXšåÙ Ÿ±pƒ ‚­&Wj†²&—k°ÉF›m¸éÆ›o<'\UÄíŠÜVÊ1Gt·MWÝuÙmçBwßñžwpgzê±ç|ÙÒ§Ü}ù ±_ÿ8Æ€<x`‚ 6ø NXá…ò€Â†~â$šˆ¢­+¶øEiøÇD¾A‡8ê¨Àe 4 †9‘[r¤ÑB;8é0Âv(ü^srÃ;ÆDF]nÜñÇeÌÁPLQ„È;º1e6Wi`K’aßmͱò“G\ÆÄ èäAF™1Ï è6³„epé%˜eˆI¦f*€¦šlvœ”Í—¤n¦§H|º±ÖJ(àÀª |Ýðè¤8Hªêß>è\0®÷³ %^©a `ªØ¦y*Yœ•Ñ)Wܦ†ä™`4ÐàB 4ØpÚ«²ž®9 ´¦xëm ÛkpÃwÉ-×ÜsÑ)kvÚq'žŽÒK­µÜʧí{Ø*ï­}øÙ+.þ( "¨à¹ Jëà÷ñ†A¡…c`¨¡zbÅü–øÐ¿*²è"ÁçÄ0ÓKLqÕ(³Ç\óšcÀ&¶2I$iZ“MÔö)̹­N^ágö”»ù)o{ã T#ÃiƒdA .³8¾‰0.–:ÌK2µ/1ðrmÕæ2#·S¥ê"¬šÁ ¼âªÕ©&u­³Um`§+ãðÊWµ“]îŒÅ»dQçw͵Àc¼ñÐæZñ™O{˜—EÚÔ\ÒWõÌ….ui¯]Þ{WøÆG¯ó¥O_ì‘ûNT«øõ¨aCªòp?‡™A|t˜ÒÉR´1 áikÀšøÆP‡Œ! 0ÁÑÜ`†4È¡ X3CØR&†ƒ¤aÞ’Sø%:„iL4Ý`7Á0Tšƒ ;'’!¼Án0‘ƒXD™”45øÛYz)– î"Âä¥LÞÂÜ…ÊÄ ãæò̤-6Á‰NPÀŸE(D1 R”ÂW² –o‹à,'H· Þ­-›IÕ Tƒ*С‚ÙÌÉN¤ô“  ¥(GIÊR,wÎÌ¥óN¥b'Zú„·ÏñÅ„sèà×Î|n³›oè'8:ή T… BkHA†ÂS¢c‰h=eM&FS.4'H8C<±¥1]au ¾ÆuCÌ•íŽH;` uXdÑݱz÷DfotãbR­Xžäiq[͛ϣ§ê•ëzéÊ»¸ç.ðIH|ó*_½î…¾|­ODýzŸ·d@#¡l ðk™¬„¥(Ñ kQz‰~@J¢’ld+_XPšÊÒ¦sS€-qÙÈ]*€˜8Mæee’ƒÎ@³ÄÌADSƒarö†4í2ÙªÔV*šoígL+ւ泃œä`Ê)™:P†#¥åçn€ˆ0P¤1ÍNS·ÜYýTˆ¸ŠST)kº¸3y€,é4xΪO´¦EU,vk‹Võâ·¸:=rYï\Ø[×öþXV•ju£[÷%G͵®þ™^ë%»YmDXÓ‚µü=­Kd ,º4@S†í°eÛÓb}ÃXª²›l +Ø®ô„…1ñeF˜âÍ¢À/r©Ai›§¿@ôµ.]XpãÒÂ.‘1ãh|‘ ßS·+œ\L :SàJpn(½èH§ÓÔýuÎ%pP¥{;$U‰ÚÝw™º,ðJq¼U¬ÖÓËôfU½Ð —¿ ß°Êﲯ¼Èg>{áK}ü+]Ç£Ž,“›L×$LáRžrl^%ZÉäßz8¸ q.-‹Ù;š9&Ì]ªY–h˜šv¡±¨ç‚Pc¶Èwiu‹1 äQ§¶°¦æ‘/•ä™,Ö éAAÜæ†QþSœ-g¥;|Ð'‡ø–#Öe‰C}øš³Í´ö¬9¨ÃÑåÖ.ÎAáríÚfp0å~ £¾½msO“.G åÛäÕ9ÛsžÎÁ”e¬:žö»5ÏÍ–‹Øåê^÷vKsw}çTgA‹xäUsUßÜf¬vñy`ìª{Éß3’5fÝsýÜV@ÇQÐyU@̲°x€Ãƒ Äè¯Y¸€ˆ5›†'ÍM~~óØ%'‡Ñ)Ò{×Ú›– µ[«Úx¶*˜¹•4TŠýópÝ£ dvÑ×YMWVé´Ž(GpŒÙ j쥅ܼ‡Òš&Ê® ×ã6wuw¢À£Kp¢þʺGÍnR·»ðïFñYQ-ÞT%n^ç¹ùâ[•³Wß[F±Î·{y†×}ÓÚg¶¾ñ­íó/¡}D‡Fº°R’CaoŽáÄ®}ÙDw;IY€ƒÃ…U6(Ý¿±¼{ÖüuB•—æÁ+œÌP|êÃ¥:<äQüñÝŠ|'Ïq;{œ¾ ×3Zù¼Ö?îsL9éMµ•‹¡åd0ÐêJ^¿´…½…}Û1 eYË.SÖýݯ¼:½ŸË~—DØ•pKåDevx˧xÍ·fÏgqÑ·^’·q`eFc…}™·Fœ×}%÷}¡'W„6$g€]â @2 Ó`N31ipK%È1b"Q2ëwa–X ”6lçXövS7ïä6päöCx«V„Q(w„D¨„×Ô7…•l9(CŃgáu]øc²EvËw€á‡9F‰¤“jjHˆÞdˆnˆu¯Ôv‹8{’…t_M¸õPM—ŠsA–Øi¨5[j·dW¨u²'\0À*4¦cáL½Ç—áxRG€Tpp¼B€Mä]¨|‰qÎwqÐç<Ò§qc4–‡gߣ}øÕyÞzýåÃ8g[2a6Ç~9w¯W‹±'‡!¡o{Áo5€4ðYÁ+¼GŒ|gŒÈ¨ŒÌˆTÅr|˜|7iVç倨Ó'uF—W_š'rùErŸháG6`W–règn0ƒ8iðW9ò8F[.Ð%F:ZÊeeþØ¿WŒ²ÃE`ËxÎ8f Ùpgq É€Ö‘Z%‘ÚHg•wgw›Ç}úeràç_1’6`„V’ಎfX5¨J+IoX8*ZX²•AzQýØSÿ¸“);ǘŒAY|Y€Ð¨GÉ|Ç£”ÉEg¹ÙSù¹}#çyûurù•é–(ÙzfY7/I)d1“å6 7sÙ{IDç“@Y‚×—ÏÈpf†xS¤€ƒ9qKi˜‰˜OIyW˜ç˜h•9™YiŽ*–øq’ìXaœŠ4Esá‹’2“ó4:¦¹99Œv©š=ù“{9€aæ—²‰€ ¹xéxL g×^Š•×œjT•‘9Ž)zçx™Ë™™e ´Ø™.¹–sQÝ6¢Îdw8I—:©ew‰]¬9žWž±ixÒX›ÔH˜ì©›Mɛ𠕿y‘Ù÷˜á¨I™ú™œüébÙŽ4Ø~ò ÒédúÂ7Ø© ÛÙ ¨ùÁ'¡âéšCYxѸš”¸Y˜l–!ê›Öœ9œ÷¹äˆrö-ú¢Î£ï8£ñ×’Óù’\!(š‰£1“>šw@ €´1¡Dj¡Dù—FI›h¦žzUêžì5gPj‘ÞXŸ)ŽVšŸÈ¹#ÊéÌ9–¬÷ŸuúÔs؆Wg…‡F·P„7§æL;v74(ª­b³¦—j£ V¢CtAMqy“¼'Œ¡à‰]yIB)§F ˜vŠ”xº¤Ú¤Nù¤Õ¨)¨¹‘’‰•8hû©Žþ)£g™ˆöv£@6(3Iª¥Ye³Úµ Tz;pº«ÆgžФwº€Âª§Ä ¢~z¬ŒiÂiŸÌŠŸ*z¨Zj’Óú¥‘ÓkÕ ‡ªÊˆªrC8ÞêCàšeâz«÷wqz®z¤i›åÅf×ø¡ï¯Ü(•ôª¬'z•XŽÐª"0²ˆ†2І5×¥)™XPHibªˆ;HŠŽÈi2Aª aªÑDj¬VnÖkàFL> oív†}QnÚ&´G»c1`ªO¸†…H©Uh­Y¸ªGÇ…uMAËjC+ùh(gH[a{Kû„l¢Mû4©@Wµ{i™êƒ´´^k(ž†´(u¶Šª5z­X›{ñªO«§É¦¶¤·“«ÚŒ¼Š|uš€Ú®Ëó®K};ŸSj¯„š¢ÇY²ˆº¥ý 4ÚX;{Ú¦­¬—=ú­ê‡ë¦õº}G]k®°é½éZ±‘;¾·§×§–뻘«¾š‹¢ÄK²â'äG¿9’G»Àf³’šQUwˆo8³pK ¥¨µvø´B(j4f,Áí&QP¬';7uSkÀClÁ l³¦øˆ9ÖµoñŠËäÄa,ˆ»°Dì¼7 uÄewtEšÔËÁuéÁ7|;½Z§â¬ìŠÂ˧Ÿ#¨Á²Åé¬4ü_"é•Ã?WC¿ öWôë`Cs<\Åhi‹£HKGL‡Ó†Y|¨nC[4à´1Ê—ÈAb,¥l(:$)4Æ„Üm>öŦ¼Ê[ÉAzxMg¤{Á³‡R2 ‹6°þf¸ ‹¸ÚK|܋ǎ;›·¬~Üž+È"¥$J•ƒ*ÈŒ¥„v%v“1‚5&8$#Ò²Žæ¥*éÃV»uXÛÉ›öÉËäi”RË¡uCõL[¢Õ*h§ÏžÕt¡ñÏ’XLb‡Ë¶Õ(iˆdï×ËÌ›–·ÈN6À(5°ú¦¦¬û£t,|'´K UI*ÍKͼÛÂè›ÍõºÍ"{¥™RvW)'?/6lpŸ„P°r £HtÐ%mHBsx@Î C1”<$·DÎ.X ]"2؜鬼g£@m‚Àî¬Àr‹7­,ÐûL4P° £`-Ö…øÇ]Ích  ¡Ð,ÄÎXÍ5ËÉ7+Ï(ÀŠ,†´Å7F†x Mµ&BºXíb~-7Ö´evŠý(ŒMk-d¥|ØÄäØ(Æ×œÉ±·Éì„[Rf\P—¤]¸œÌ°kÇMxÏ|x{,˜Û€*\ÒyÒ„ Ž¸Ò†JG.½È)§w€5cðò2]2ФA3èL–í··Ü·jŒµ¯\¦a¥aÌÌuÚØ«Ìo:¤«t ÍéÙÇ#=ÛækÒƒœ¬…œÛ‡<²Þ­à‚¼.«™ÐÍÙJÝ‚«¢Ö†Sʦ=ǨýÁ± Þ³ËÚEIÞ!mÞ²M¹,\Ûëý±íMœÍ ß-Í•0¥‰Ê¥Smߘ\ÀTxÀiœÕ\ŒÄ¦¶cBÆ7´¥³„=d=8ÀuÅ!žÅÒM✼Õð¤×—ÁŠSŒ8ò¤‰.ÅB¾Ü¼6~S¤5{­°Ö˰ÝÚ}àâý½êÊÇâ{ÞnÍ:¯À‹Ûޝ›rp ÓÍݨÔ*×#N×Ô Ï$[G^„4–F˜n‰=_+rž„é¶Ö‘n,f„wަsnM›hÅl;ã øË[l×]¼µ9öçvŲéT,u?llˆn©5®æ™z³I\çpè¹êQ<êN¸ÙíÌé7jê|ÑÈüä®ÚRŽ®Í ž›Yž˜×Œ¬îåUʹś¥ñ;¿L3ævsÉ`ÝŠ®–Xû­úª6Iš²Êä=à©—wÜÑy¬àáÛ¸^¾ðªÞØ|Û&êÞÎÒ+ú¹Ò*ÕÎí¯CîÐÔyZºÑÞ­þ Öž­Þ´n»å}å î• áãÎ޾ξÀžÈ–ɯìnæïølö+S  aK¿RpbPùØÆ3"€0nP!XS‚ñ_0À¯"ò>B3 'ñ ñ^Á¤Ø"€15!BC4t6ó±C€q;$ò@¯E_ŠG¿òxáû¸Ã,ò#¹±‚P_ó)ó+ÿ*v®õl#3öº$öŸ'­¨2"%òkö{Qòg_QoñaôxÁ··#$ò¼!‚Þ±´õ|¯ö*ßöÁDø3L"»Q p>"#}òkø‰cçº&ò€qP"þÑ?oô¿òú7Áß"1aù›ï?õmÊ7t"¯ùe # s÷¹ßú9ßñ¾ß(ÀÏ#ùÅü•üŸ¿òÍo.ü5AôŽÏöñ´ÕÉŸÅýl~{õÞÏú׿ü‚ßòj]j"0%ü‚ùÆŸÕÿýHßü¹ŒÐ†oˆoì†6pK¬ßããxw¡ƒÌÒ1û`ÔØÀ9 »ÓDÞ8$0Â?º"ø$ \ÐzeÀ84¾³ ‚0"ò¡KL<– N`oHìµ€Ò0ºBî Hìù¾Àz ü@Ђ?¼ðñÜá‹,.P'ô´˜XÀ ¼5Po„5ð÷ú¼‚ì ‚X0Ár DKpkÉ…'oàd~¤#+ðÀ,ÈÏ àëxo!툄$Å ¤tÍ î¿Ž÷òØ tƒ}¡ÄÀ…9è`¼ w æÁ)ø”ž«ÂzÍfÁ ˜œßF{gÁv ;¸•@•ßè௿‰B°%!:0B0¸ É^'U!áÀ•7 U)4…X ê¥'û2!+d‚KÈÆB¥ƒôjáª(…¸°B‹Ö¾à <„Mð~BY MÇ(D†É¾<_ø [a4, °CkH±!.‚ŽPÒ•¨µå× s` ¤4Òà4„ñ<èÇYø‡1 ÄH ¢A<ˆ\áØÉB ÀJìή'âù‡Ä­Dº¢1"þÙˆcá"’'‡[»ˆ Ñ$rDŒ¨äJ"¹‘,”Ä<±ÿáÓ‚7Q!RD„S"Oü‰±èÁCyHí!> úÐîðC›¢S|ŠÑ'BÅ©H ¢T¬ŠX+^ŬCÂPœ‡õðö¤h\ö¡è‡F -ªÅµÈÛ¢[|‹p1.ÊŶˆç¢]¼‹x1/º¨û¢_Ì‹|ñ/êE¡Á¢Q‹š!)Î…¥hn@c|ŒŽQ0¦EÇH£dT‹•‘2Æ¿˜-ãe„Œ Ñ-nF¹Ø#ãg,€Q¼EÔø #Q ‹G11–E¥xU#kl‹·Ñ-æÆµ¸Ùbi“4šFÝ(Wcq„‹½1-öÃäˆ#ntŽÄ±3FGЃ£t|Ž×±-ºFÃ(óál\ŒµÑŠÇáÈÇ#¨:æñTǼ˜É£_loq=êÆôˆÍcj\ôñ2nÇ¢ØÉâ£ý0È) ó‘4’@N´yb@‚ò@>HÙ d ˜A FH9!-dƒÄ2aÈ Y!Adˆ ’DN4¹!G¤‡¼2DbH ©"dŒl‘²FÖ€ýc^ûŽ%¦6‚ÈÊfØ †$’DrHÉÊv$—d‘œ‘ ÀI2É ‰$Ÿd‡¬’4 IVI%‰$QäƒÄ’0òAJI#I%Ç$—\’PLžÉ)ù%Ç$<ŒÞñ?‚G/™ uä‘ x2t€Èy'󤞜ýÐNRI?ù'Å$Ÿ”„ÒEªH:I e¡L/ÒF~IG©(-dš¤”)ÒCöI?ù&û£l”“A²!Ž…Q©äà‚©4‰*Q%’JRÙjZåNÜ °ò$jÄXI]e«Y•J®žÊS™*M%®¬µòUÎJY+/¢­¤ˆ¿rWšÄ†¨,û®<–­fXÂÊbÙ¡¥’»–£²YŽÄ^(±åµ´–Ò’XË`Ù*;elü‘ r)°.Û%»|—î^ÊKwÙ.éå¼”—÷Ò^ÖË{Ùõ¥ñ—ú`ÞË|™/¦½ì‡3`&L|i0áeÃŒ—úa*̇ù/f»4—>R1†JÉr†@Çü˜€"dîyò+ ⯙"ÓcªÌù“Z¦øI+seöC”92½%©$ˆ'sd¦Ì¹2]¦ËŒ™ SgŽLQi3M¦Í¤™€hzLŸù2€Ò$.BPͰmâÑŒšì’g²Ì¦é21fœ4‹º²W¶<,‰!ߢØüˆÔZ–Lm©!Éæ„4›Ú’ZnµY4µå˜¤Œr@ÂM±)7É%WX›bónBɽ©,û&ÝÄ•^Ó?‚M¦XšÈBãÌEÑòqJÎÈI9g儜–3sbÎÍ99-g]üIit¾ÌÈXžÉ@L‹C@-¦NÍÙ99çål“3%ÂÎ×I;Ygít–3tªEÑY:C§zdŠuªN#`;‹§ëLœŸrqNÀåIWeWxžÐ3zvG™Z˜§£ Ø3{jÏÐ`=E?¤žÒ3|>OêÙ=-Âö<ŸÜ³{RÏ™)>Ã'ùìžè}–Oð>Ù§ô|ŸÖ3~žOä‰.§þüŸ4€ P(¨= T{ÐÊ@¨þ\ t€òO¹Q£-Žñ‚jÐâ¸A—#Å qƒŠÐ:B=hgÌ $4…ŽÐJg@d¡,t‚IƘŒ@ ½¡64‡ÞPÊCuhõ¡=”‡Q úCƒ(Z ¢CtˆÑ$šD‰è]¢ý°‰öÐ'ŠD©¨µ¢B”ˆFQ'*EuhÅ¡24]†Çü؉€=£f?ÚG·ˆFѨÕ±žÑ7*ߢM£óqÒÅ€pGé¨'´£}4ŽG@*G«#|d£T;zÅÂÈÏ%­!²Ò6ú#é$u£n1’ÆÑDÊ-)"•£•4DÆG> J3©(ý¤”Ô”nÈKzF«£'-£œt-†ÑÅùJÙb¸¥¸ô–†ÒUê…€/ý¥¾t—FÈê˜Ks©0=o˜Ócj Gi1Å¥Ì4%SeLUi„|‹Ïô–ºÒSÚ©i5U¤,à+6ÒŒ9C…dŽ<Ÿ›2OŽHtŠ(ý$”DŸéO®ÓíO%DŸyS@RÏyª=ëi–<§ôP*€} Pûi;Í“³@*~š=1d¸ü§žRÉpùNÙéƒ|¨ {IŠZP³g> µ£jÔ‰J-3jh€’!5¢ZÔÙ7êœ\¨’ úS‡:gª@•©UžÆÔššSíé€$ˆ• ^Tž:)åNˆ—Ò¨U¤ÚSi€KݘóÓQâÌóU åTÝžåó{JÕ(?ÕçVˆ]Õz®O Ã*ó¤žWU{VU? T€Y]žh•«îÏEúá¤âT¨oC½ÊW÷ªøÌ«²¯öÕ¿*aꃬ|•°¶E½ŠX‡€be‹P²±:Öð Xkc}¬k‘±"Vû=+k‚”¬âó©2F@ßé;}«ï<¹¾·üßî»W·/ Ⱦ²7P¢_òK}é/ @¿O þÞÚí©Cúoÿ=¤m}ú_ÿ €Ù"°Àÿ—Œàó‰€uH^‹¸G\=º€ùo~Àj1#`ƒ[o+°ölÀyAËRºÊi9í‡Å,«à\ÌH› ~Á0˜´±àœ‚c° vÁ4Ïà|ƒi0 æÁ6ØÏà( „a°fÁEØa|ƒ‰p ^ÂL8 »àÕ«6]•&E`dá-¼Cü¦µ¼ÂWX ‹á-ì…½p ÃXx ‹akù…I‡vUj˜ ³áM‹†ñ¦àÂ\xË:Œð°.ÃUø §a?kõ0EäÃqøCËë‰À@´nö¶$*9u«‰@> ˆr8H‘xЭ°Ä5@¾þÃ#äéÄÈÈ–·!E$ ‘ªx£â›ë7¤C¼¦Ÿø@^DT ‰Á­ˆæ6-‚♘Èc(Ž’‘WbI¬äÜ#ñˆj×oOv¹b›kq©† è¾áÖ@êŸEoŒ_DöQÑ!¯—.@DâÙ1Ik«™Æ0ÑÆ*€w¼{ãñ ׸åÔmN-ÑýãÏbŽrê·_…œ2Dö½ ù´Vä±iue?¾ÈáX#c‚GB7踓d#ÐaßbûüÉÕ-塌F)QÊ>ù(·Ï¤,=ýîRÊJ³ªÅ¨ì”™rTζ$xœòÛ—Z2»rÑ|‹^9,Oͱ<º¥X `™,«å³¼–-¬[ýÊn‘-Ëå¶Ì–«ã\žËj÷&BDˆ˜Zú2]q~¹/ëåÁ¼—õò_Ìù/æÅL˜©æ@=Ì2 fÆL™Ÿ–dnž—¹2WæÄœZt%gnÌšù2‡ŽÌ š3gÌ’9PjfÂ,šOse¹:×›ÒÜ¢+›{®/ÞýЛ ]œ;oc35ͺùæâb{"u3p®Í¸¹÷f”‹œ‡3[„ÍÌù7‡ÈlZ"©qžÎÙtÜ^ç I­ss>ݹ8{Sá ž³³x–ÎÜÙ<ûfe:nÃóz¦‘”:Cç¹#d÷9?#$~þÏùY;g©Ÿõ3fÏ2²@ãç LÉ3Ðÿ™AÿR쪠«óyFÐɹBïç Ÿ4„.¶|"ØðIE4„%Ñ1«’Õø`¢‰î¯(Z ¾h­Û¢7b÷ÑÒ³DßèÝ”WôHÜÑ0:GC㬼oïêKÑ6F»h Ma•´¶žÖI{D뉣£§Ž¦ÒÑ)_iæY¥1lŠfÒIºGoéåÙ¥Ÿ'A\½Ú’G[é-6ËtW(ˆÍ2J iݦմ—fÓÊ2KÏc)½-ó´6Ó%ºN7i1§S¥›Ž–qõ–Z´9,1žŸ‚ØU]Z›É,Wí§%µuR£áI=k¹¥?µµ2R“M-ˆ9µ·¤µÅ’ÀÒáHMª¯°µì°û(VÏ€}¤äó~ –¤û¡…È«Ql%. 9XKÁ"@ˆ5±N-C@$ëd-*muÉ4¿¾ú™HëÚš«µHÈ![û )3«»5­nÌ)q»ß] zõ3Q­Àº(«ëÜc¬‹õh^ÖÊz:kJí¡õ´žÖ®ÕZ[km­­Wo¾¶;¶¨›€ýZylkÎÌ>ֵʀ °¶º)ØXö`'f,{®[ëÀغòb[ˆ=c%6d¦ØÔÚa_O‡í[Y«ÁæÌ®¹ÆÂêp‰>*úì›-[n¾lóêVϧË>Ÿ0ÛfËlœÍ²ÏgCÜÙÛ3goÏ›´{öЖ›4{ míI´µ'ÒU¯¤U©Mµ °ÚXûjWíª}µ»¶Õ!`»åAml,¶Ã6}uËS;msí¬µ·vÚöÚ];l›m¨-·ÅöÙVÛj-Âí¶·¥öÞöÇuûl×ír·Ý¶ßfÛv¸o¿mÄ=¸ÇvÙ~ÜvQ, GQ$wl(×úZsa°,¹‡Ù0;Ÿ¢D´Ì=†ß¢å¦Ü2a Ô¹cÀæŽË[tƒnÏ=ºrév‹§Ûsçnˆ‚«õëÀ±ûsïÚmÄ0\ÜÝqou{îÖ½…S·rÎÀÃ{vËnÒ…á¢ãÅØ;{kïíͽj÷þÞà;|gï*¾Ë·ùöÞç[|3âöȾ۷û~ßð›ÇïùM¿ëwûžÀö;ëï÷¿÷÷üÑÅ%€wðÙA xq™š\€“ÏÞAÖ&ÇZU×ðŽÀ'xqYàÜ[ð±úÀáÑ´àÓÖO‚pˆX78gàDsUvp žÀKæ|FB!†ÝŒrg¸  ØU†Çpë|Ãmø¸íá;¼8ñ Ý"uø çáF<‡qŒ8—‘N‰÷p%®Ãµó§â7\ŠËðž44v½‘þ¹Bq1Io½¸ŒãRŒŸq2Î?t†Œ’kRzè=ÆåxWÐ?#H5Ž#äõ¶ãþY‹HA&¹„¨u\AÆqEÞÇ 9‡dãÃtë2ò@Éy%äŽ|?H&^È'¹%Ïä;’HÛÕä©PË0„Õ°•SXUÎ`m¥ƒeå«üXžrYžÊi9†å—›òZ,gy°Ô¯»<–÷ò!Ni‘&å/µ)Öh¨¸Ì ¢œ^ÓU±™;E-¥¹2¯Ÿ>Ú)JóÕ«Ìuy7·å<˜WØo>Ì«¢ªçÌÜ›kó›Íɹ«<Ó¢ÜSöO…jˆ ±Ù¬ç€Ø'ûÍB ˆ)â=ïçzXŸãs~î*ÿ9>‡– —áê¨Ðº[ì°A$GôàˆSKE—E ¸Ô€ŒÎ7¬6îõ胤¦E‘þ‰QEIwŒçxjŠ"à†Yº«ÉÞØAºåââˆiºC,Öf£[›A„xº3qš?=Y§Åâ2Ô ñ4êÍÕu'õ…8Ñ'úE¿èV£stIêªmU7$¤;bǸÕUú ðê.Ýu»a˜ÎzeºM·é-§§õÐyúý5Í1‚d¹.µr]¯=_½ååõ  ÔùúBdÄÎ$°CÁò)Ø»ºÖV[Ê(vWT>ûbGìê JöÀŽx™ga—ì‡ý°»¢Í®Ø;gßì]!OöÉ®¢/»3ÉìÁú³wöîéØA;jço¦°vg23C»jgì¬ý¶‡v0ië°;?Ä¢zcêH Ì}¹«äÃÂ=Tûv=ÍË{pÿí|9R7E‚ÜÑpr/—ñÜ‹QýÊB#šwßJàý»‹÷ðNÞ¿;jl«Ý½¼«÷ñÎÞÉûy¡ÅÑ„‚ÆöNß×»zï‘…¢`û^ßûûO—´Ùœnw`¹-wë>ðúZsgSÐÍ༃OÈÔ¹ÀŠÞýàÁkø—™M%ü¢xð^__x¿á7|„Çð%ÄßáOâ+|‚—Ï~+oL‚øk¼[l«6>Ç«E_Xuü_äñwQ>úxžãôÆŒ³AèOÌä—<ÓHÞå.ù)ÏäŸË·y&hß¼—¯Œl>Ì?ùõmusͦíÑÏ›Y@¯q€ —£Ô9Ð{Ó?ÿL=5ݸm4ѧÇCé }Ÿ_ôwÅ7úIé}6¥yÃDŸ\‚¾ÄB@làÔ!rP½ªWPÇP$¸úUÁBž¬Oõ«>˜ä€Vëç].âõªÞUóœÖ$6A MnŠò›- ç8ͤö€ÀœW± :Ë&Aw¦&­è<ëé@ÅÙò£û¤ ?+:Ð5_Ts‰âäðt-Å «Ì–ºÅ¤‰OˆÐì,eižZÞ2— í%[ŽÙP®BÔ˜àô¥e ‚¨A‚\*E™9Ót §àTëžò`‡$]0Ÿ ÕP–zNuú¥è”ê:Ó ‚îu©Œ^üÞS¶>ó(5Å'\)ÈOÂ.õŸ3IýÈæä £¦e+Ïgq³0pA p™iÞ횣Åì3S†Zðd.®-«Fi‡4€`®u½Û‡Ê3’á(A¿ÝRp ÛÁËV”€4¬ZeKÏsº5·¾ÌmF7ÚÑ·zsŸ!åkyÚ©ØÒ0–º4½çM¿ËÏöZè(PK t9 ˜¨kE¥Q‰ªJ„6u@o€j_§jžYZ¸œè~ÿ‰·¡bçy *$|z垢 ñ¨ý¥Yt KAÂf¢[µVWEüU‡Ò³Ã‡Í¯E«{•ëR“œ¡­¦n¹›:ïê3®Qõk9Ï©Râ’‰ýßb_ O™>Öž6ÅkNÖ\¬”;n]ðs`¡†ð§ÃKÊ÷šLÆhN¢ P n÷$+z¯Q ŒÖÅ6Ë´ q¾PÆœ\¾ 0|›ÕÊSc3pE+cè-8ïL-=K.sXùsöíÛ¾€ y6Ïžíç/ZÐŽfC¡%}è>+š·Ö«¦/ˆ†hI±‘»ŠkG iRÃаœôª»÷6¹u’B¼[xæPYzŽD±.¥ÀkÊÍ2måñr±­v;ÊõhŠ­—O»G¼¤€Ò̈…²"‡Ñ¢xÛKÁ²†ºˆ¥ÎN r`Oy$¥´¹ÉŒ1«t Ø=× =ÉÜã2ƒØPìxÕS¤1ñLŽbG›á(q8ƒòÖ+…§)gç1ñDÅ d‰'“,’ùI™!ã23š^NÖ‘ìá‘æø¦CšL<È™ZÔâ5÷‚è‡ë,Æ g2óðr_pæ)«±Í#ž[Fëœâpå¹TÄ3 †—'·._º9Zã™o¼bf¢~ž©‹-s¨ƒ.$4|p>fÅãªx}rŒ»Dfn׸Ìw ÌtPZù¼C¦÷¹Sˆ˜0¸»•í;ß'é(߃…ž$¦¨Ì„Ý'.‘ÓöÍ¢XCò°†ý‚` Ï»ƒ$8’¶ˆq‡;ßß>o7è}æ5ûØC:ɵtLìNn_nO‹xœáÞôóÙý€øÙç>ø/†¯Ÿ¤yÎﺤÏ;륯ñÔÏÑzÒßq ‰ Žt$•ªæÛ¤ÌhâGO¨Êà™§ñdâöÔ ( ÜÖ.¹ùâ !ïB@*“\AbHè¦n2¡%[ql²!BP'H'yB?êâ'˜nö²€Ùã&[¡#g 3ä’òRw£%x1“‚¸#Jse‚-h€È‚(ø‚/(ƒ2Ã& Jø†3Ø%P ‚2S ñpÑ,߃ƒø%?8ƒ%(„ØMóòHNX3Q¨‚Ç‚À´ÆU!Çr(i`5GQ dQX  VŽd¨!julQ‡é¡Vb;z‡3Á~Ø"Kµ,߈Ù&ˆ;ÜÂ*ˆˆX#1‡àÂŽ˜mK…‡x4‰«¢¸T‘8«²OšX‰^ø‹Ò…jÞ§!õ‘vÈó|ôûdî‘3o‡±ˆQâPP‹g°!½ç±2B)_`yqtB%«AÈXS°Œw3@ÇøÉ8ØØŒúŒüƒ,epvsðfõn£±„ãÁg#²,_%ìèŽØq†hR/eP6r£ñÈ;bÀþXàØ>ÙI‰("QÂ;Ë2‘ ÙöèŒ2‚0Ñ çŒ-r‘ ™ó1@gx@FP2γ3[d@pÁ!æÃ7A °E' y gB[òH Ci#O„kC„ ó‘A69A™0·VGÇu” À}"T“íEY$•‚ÄmIbGKyyF`#N€+iŽöØŽi” @Õ˜Žëh–„QV\!o¦–ÜHê(„¤¡“å‘2E•]9ÍŒ7¶YMIIO©m _a‘–å8’n9–é ”8‘––XÛØßhy‚D%âK§Zp@O[ 802 nõa€9 š¬)s›9 |«ÙšN„›3@›­9¸IÀ)™›‡±›ý1a2œ3D°É¡œ)›8P¬9¯|aÐy›± žÊÙ›±yÐ)œ±‰ÐyœÍ©¶9¸ žfš²˜kñSð#RaB夞5½²£·œ(¡ Ù±M:£1 –ñA@g®!~&  îAi01` A°'ס J¡ß…¢×bÁ碯9¯”(z›E€  ²3#Ú›E`¡¸‘¡ä3¢ÂYz9#¢3pœE`¢>:š<ª # Z/BŠ¡0Q¤4 ŸI¤ *¢4 I¥J×é/£rñšOP¥>J·ù[ÚDš¦½ùbº¤i*œO€¦rqœOЦs:¡S€$=2zr¥U §ZòYwš§œ!UЧ!©×Y‚Z¯™š*¢5p›Z ¨d©æ ©œ¡ž•Ú¥‘ꞣ©*Uq¢œ¥&¤OÚIÌi¨½*•÷.Œj×ù¥Ñ«¯™TªRŒwq›‡ b‘ªwÑ›y@½*œ•æM½zœí!cq¬ºCcpCw¥qP>¢zò¹®íJb@)è¡ 1°3qu€‚¶ã#0aúj~ýú¯1£OøJ°ñúšþúR9ó®º3;ñ*­i¯½égñ*œ¾ÁmÀì¯Ç™õ":û:¡ôrƒÑmûŠ¥)»²öjG1€ò 5ºÃʪ1k¡8 tp¦Èî1,‹×É(U±'~ó¯éLøª¯8p›ôŠ{lp‘<Û›S»÷е3+œ[³ë8<{œ‹¯Ã"J;³ 3Nè§3‹¥6; ìaVš›Šˆv6K´w+ëú)ãÊ¢w·×9Mwë°·ê£9 ž ʸ½ùªª ¬:qœ22‹z·Šne€«Ÿ•>‚ 9  þ9À¡¤›ÊÒI„!´7Ûm|q+ʯY£(ˆ£|q›®»®&¤1¦Û›hPaB¢ bºÂi‹®ëS|qœ¨:z|Ѷ•W²¦‹¥c€»7  1 ŸAy0¶ "<1Hñ¸Ü{s–Ч°J¾¯¹©;¦Ü{›À¸¸ÜÛ›i©ä+œñÁ¾Cú¾û:Úô¡~J¾Ê8øK¾XÊ‚$l€u­)Ÿë!ÛšÒY/£­y „¾­ùš À\ª¡­É»³Ê›3»œ3áºh$éњǹ> TÁ” úÂhÚšXê#¼3®)Ÿm¢:{V®)GbB©êš×Éeb/Ê3ñQ,:®Y§-<½¹>±2Å•[ç!#rà¼M:uÀ¿RªÆ’K>®‰¥uÂ_ªÆ=\¦Ì)Äj:y@ǯ©Ñ  tºÂüK½É/A9#È•«·¨á»ý—‹‚ì¤{c›3P!ŶùÃW  ’úÂB\Ò¹²2"÷:2P‡Ë~kižªü[ª3Aî²1žÜ›X":õ9"¡‰ŸÚ1yÐâs7©¹ËBÒËx9‘[„Bo… k Q™]é– p“ÆQš§©QÒ‘áAídc\6Î÷9š_€Íô41y׸•ŠÙ’‚À,ÌBäÍ4ÎæÜ<å,¢y¿ÌÃlD¨ÑÎÖˆñÌ[û\ýŒÌ­ŸüI/ïAÐÔX—ï?Îã0 0 ᔌRÖC à/wS€85 øSX-$Ðò#cG^Bf02NYÝÛ"sF‡äÃDåÆe|OžZF³M™ØˆJ¡m¢áóH-[4-;Lþwé‘ZÎC>Ì!ÃxaÅ8‚Ö!Ä.€3@6àD- y¾ç}Þ1Œ#ñç7.0ðW& *f·Ir4—qѤªµþ15Fºè E¹.™!³RªZ@äé ¾0nG4F–Ï8:áDšnéNë¨>¢7pé¦ê'^;=X©µ¯“1BpâJ *;ƒ3wéåÕ~»CY[DšÔ½¹^ë#êœtfæ#_©¼èqA§]®91 }qî8×ÒK S454c'¡EëçåE—ßé¡-P9`#;é$3(SÊ-ÀŒã80À}ÁðÞ¬Õ=nîœå\î/qòâ(À(@yÐŒýæíÈ)àÍÓÁÔžu~4žÄ#ð¿ð³³ðçîð¿Õæ_ñoñc§(@‹Ÿ?I±MØ!#DÝŽæS,@òún7`*;|îVsÀòæòQqð O2ßð}ñð6Oñ7/ñ%ÈóøSOAqrJ_;dH¢D>£ç.pÖþï(Zî©L#!êx_ë­yév$÷tÿŒ€îDvt(½~翾ê¶uÃÅî)³ÉÞ1Ënm’þöííUê0Píšaªµíd±<ž îrQÇ5VîçŽî¹¥î…XîNåò.ñ[nï/VàùÞMò¿òÆÑò/Ÿõ[¿õ^ñ`Ÿü:ñÏñ}£;ËØ2và#"¯ôLýäx;*?õÁ_õÃó oü5ü_öþ1ö(Ð0Ñ>0a7VWºï0±Ö_’± õ6 õT_ðWó /üÑ<ˆ‡ó  Ø»xGúºÝøª¨OÜ!Ö×úþÝ‹}IÂÐe¿ Aû䞸}¾´á;õÐl@ûwxDn@:Ø} ‚"ç¡¿æ×ñhÑ2QÕ^¿ ·_ÿ³zÔ Š?l÷ ú#ƒí#~ ­oòY  ¼mÏÙÁ½9’ é›Ý‹P“pðÕ1™Õß' |ý𠦺Ä÷ ]ã{|¤ðS˜Be‡Sá’Ó‡›ÏÂ:X¨ë$¶“RµÐô}»¹úÆ]\0w­/Ý ˆu' íÞ»‹wÆÞA¹døÚ4„¾“WþŽÆ¼î—·`´†_PjC¨ñ|Þ ËÈ%äpåBöÃ@DöÄ:Xüà×k‡C±­°B” $sf X¿ 8ž}ÛrpúD;ó`6<€}t CL€Or(b[X?š5( ì°€ð~¿ŸØƒâ[‚Z)ä ñlH3ûsàÚkSßž«Ãý3>*Xk*»„‘‡ ;K­“W¨3šÆ¸ð9a òu 0Ø9¾Qhì$"uãÔîÒÕ1MD -œäÓ,™&¡(#¢Ô¥ŒÃ§êK«ÃŸïÒ-'Þú‚£rDužpgÄÆ‡H%²su¹ñnFÞèA‹\tÃBGRWÑãr\ˆ ð9rD'‚¬¡z}瑤Çì¸øÐ w$vµqòÝÆù¨÷†z,•09òºÈ»—‚Duˆ/>‚Çè¨ Çã}Ôu½Q8bGØèE!€ôŽÑòUÄùùÜ´Óˆ$”èú~áJŒ}펻½+áL”rËpéလøû¤":\‹Uñ^Å=˜1ñ: gÏ=BëçYæB9ä iq*VÃÂè±"\ÄxøãHÆ|hE #èQã€:]‡2.¡sb“ ÏެÉZ§¦@ã¾Òuu2F¨Íˆëìä™l“z’BVºÍÈ ‡d|òÈïH'#‰T…“Žr¾i{ße ÙÎEÞÂ\¨ú¼/L‰¯ïFCÙ§#aâ¼ó‘\H†šÝ÷¥|_4Œ<0®Ã% ù ˜Lƒa bƧH¾#O<’TñF/‰1^=„ ÖNÍ…^Iãhƒ2’ƒ‘-rIvÈ$¿ä„ep-ˆIˆ ¡Û ô}2Øý¢ ôˆy8Ž„ú¨'±$»¼u|á2ôC™…%¢ŠTˆ‡ÂP*¾í˜(#¢€¬|ÝrÅñH &å+T‘ûŠÌÂyE"Œ w’ÜÑÈLg# ކ/‘GžJd¨*φ¾‹NDòUþÊh™$¯!­ÔƒèÏ.£dÙšx峄•éPVZEòW-‹%Ï! nËé0+#¸4“º5’Ëcˆåäi ”°ŽfÝ:,9³Hc„‚uƒ^žF§)(G#„|û²CÎÆY $ÂÄ[°£ß‰F¼%'CÂà³ur2 :†·4û!Û$ˆ}/.Ø@z™Éæ…¬uv3_–º Òêø#¿ÜšŠDÈ€Y"Ÿ¤D‘žïL6.Û"4åé‹‘ó$öBš ÙÆ,†³ÞÑDÝÇ %ƒ«Ü‰XXnÉYI3k%ú#^âƒx´d©4ËáË™±RZ’ÎZÙ$É€òA[ŽIÊø-]F¸ìˆÒArºp§èôã­[DZQ¡Ç«ÙYÝ邏Á³jþÆåiGü¦Ö„ˆ‹2DÊXgœìã¦;u¡ñ8Šº¡$slž @>îI]×=eŠ"ŸísCfMD 8ý%£‘ŽR`bÄÙùŸ¤“pHÊÇ9!¦Iü”5ònTΖh 3fí;†š³c"¡ž"蜃HRXvÉš)QÀQøƒJ>Ô÷:C'ÉÔ ÔÒt’@ü±;½¥><…ƒP®Â‚‰8çÈÚÌÎar;‡É)èĤœ¢ÒrºDÌiû"è½[•Ì0:}Î,):Õá̤ÖÒƒb‰áàê²r™Qffж˜BQ& DŠaurËê3}g£dvq†¶ÂþÙ41” :´ô½Èº ¨J´˜£2G:ÐÉ1¨Çl†N^Pµ,¹èÉèO,ÌŽ€£é€ Ì V’„fQØ3eçŠQV+ºaBð‘ÆˆŒctD^CHFÛœlómš.SÚ½n¯"_¤±JÿØ/³ç€ÌN˜ÎBʽÏRê> õ,}¡ÓùRãy>%$ÇÈfoºO\Š6UÞ,ž¼ÎzÒOì)8+ŸŠdzÞ³{©·bÊ#¡—©TÕ8ã@K1uŽà±5>£¸©éÔ)6m—á”›ÆI†¨¯gwìšÖ4O†;÷)ÊÝo wåîÔÉ,gÙ Ë”†<§D}þ½ZGë ¤\à“ u þÏ€Mgiù«¥Õôy†;ÐǦñ” Æñ›ªGšàèðD¨xD>Êg!Wê 0€¤nÔK(Miiý´¥3†NjÁ?)eyœ }®ñЇYëèä¼£„.^Îù@ebªô£tW R&J2ïB_°ªÃ’ƒÚJž§öBiþ,£ûpBJÍ×S_áâ´÷Ïþ-:”1@æ…œ>ô¨†J<*D(… ?ªÚD¦æ,(U9¡“V“Y:½h¬¢^•L’R±šF ævoH–º/ÕY>ßP¥£3R®V̤ZWgSå£F4÷Év'2M(`µªƒ5«ªÐ>ØUy&íaU§ŽUy8û'2µ-Pn²HmçV7%\5ª½©²DR¹G3g^­HTßIUøW+é`M­tµb¼ÖJ^ë =£Ø8Vƒ¹×çUÕ­. 2ÄQ[ø8 (p•›u¸êÑ»êTqŸ2L®¤ujɘ‡Z±jt5¬±ºVQ Va¨(Ý©‘UºWêúƒmÁŒ—õ·fÖà:W9+õ¬¦²ˆ×÷ê1ãksE’õµ“¨VüÊóôku寰տæO[V»+¨š{·†/4¾¶ºCߪy]°èUÑ[*5¦„}ªÈµÂúUhyZ«}í¢ˆ”Rמb±ë£l¬dµ¶BÖÊ l°C°½µ¼U›@]¥±Åõƺך˜ï,,u®–°BQ›‰†¬u-“øj×$KCÙèz¼·Æa»`_¬§´£ V½.Õ‹Wq,…E^V‹RÅ0»aƒìam¡£Ô2rŒp&•æÔp|œ®ÔAZªšžj)§qaÒòº‰NéÑ4Œ6hFÂP{dõ´¨¡ð¦fT#+C·k ]œeªÓ…Z¦Wg§ìÕ¬2öÊWöŠ*·,çT®¯H ZâGhï«¡®ˆ¶¿²Z«d¦Š%°™–EBÙë[í¬ÄĵVÖÁîÚÏj\ý,—U–’bX«am;D–È^×4›]ã‡å®„ÔÆ…¨µ0k­Œ¼µ 6½^Ì!Êmµìæ ’nfíØaëD•da=¶<Ï€$ –é*Í¡¸-¤Óòž[ˆ3#LØ™ö«YÍÐh¡!jl£vdÐͬQ ëì&3µ›xk䦯Z§4툼¹©N_6ÄizOmcå³rÓîX^:oM­ðˆÁ´çTøØikËuŸ8WåÚ‘¤«)mM½¨ªŸjTð3ä?ýZC—A&Ϧ»i›cBuu)—RG]‡K‰c£õ¹O7ÕRS©»lg«ál³šÄ.:0ow«½œ”bæZm»^ûmŸõµw¹ Û‡KlÉ­˜Å¤dÖÌ‚ØuËX×,m…»f5µ@Û™%mÇ+U°ø6Æf[=Ëoùl{ý·ðuà^újx íÄ=´‰•w2^ÙŠdïc=˜ú1h:žÀ[©­”½·×6ßî]ÎkWýîç• {U‰Š^Óê\Q¨Äu‡$ðƒRÑú'‚-T¼°wv"Þª(fô[¸âÏ9½üwùßè•™wÌvЊ›£RL¶÷GeZ~4¤° "uDQÔLBJuž¸1^î+ö;÷¯üœ¹6uíÚ\«fÝ­«íŸI÷Þݸª{7ï¾í½ž·×‚Þ?*|§ê—Ý¢÷àž^Œ§|C¨8ä$!Óá_ ,}c=Šßý®[ÉŪ6§ÜéÓÅApºM‘£¹3§D÷ëâF¥yJyÖHhÁ4G´+ð¿J3BqÔå~¡ødÂà³ùžÔœRÁ£ÈŸšNÓ>£yJ„ÿcàd»ìöÈ:Þ·ûzM, ³”JaÚ€}µ€Ïk•] Û6÷Ñ;A[åðÅ Ñ÷’šà­ŠäáwѕΗY^à<~§/>–0û2f õJ(z˜XvPMª;S¯ E³š‘}²Ó}ºNWã@åžóT.0ÔdêJa] Žš½Êï…b_¡â¦ÌR§­ØÇÜ.ŒQÁpã5Àl¶ §Èª)…ùœåu±¶6÷j^8Üwåphý³{UM…LùÚDÁïáÝÃèÛÙ·~“,÷˜ëœ¤#˜?cİ©>Á¸êóâ49' Ÿ›ä“ñSNþIB ¡î$CeÇëSûIö Çñ%Ì—´8êà¶ÛzÉ0¼"kx5вOW¦j@¦²z×+ÕÎkcÿÎéRH\ˆ¡1QÜxï<$‰+ T ñ¢Lñ&6=^‰%1EÞÆZýÉ ›0CÞ@= xÀúY@§‡%16~Ä%K׸M &WõO–9K ò§IÎɦùöA¤åIs‘ F³†Œ¾å:y…[*m,œÊ1ÕÉÛ º»P]TæÊYù|æc#|?Wª¤ª¬¸e/8‘³Ü•íH¼ôˆ†l.¸eúx†Ã²¨cõ‘*{åµìe™©clÙ.›åÔÒ–g1ª-Â5÷óã1ÌS›íFl“7`}ÆÏ¢€£l Æ’³ã=Û¯^Ý}”K"ÏWgœ”k' Xõo9]I_™OriŽ¢Hb1œ@ÂÀ:—eM¦oŽx"#es«”1žu/‚ã3»XY/c°š$×€ÌT™^Ÿ;È™÷ ÏØ8Ü™%0ðí²¢¹k½b d7p‡}ÊÅù¿ºÝÆ ysH`-}1 2ƒl™‰*îÍÌÃx:ãê<‡‘1v¶ÀWáqçãkš¯Æ]·ò].ÓpºÃÔªm©4Kµè\—Êp0§ÕÁj’/¯Æ©‘ U™eÐÿ·žÒ\®¹ d î¨Ë38]â(Sc0Ͻ¿éÓÕ f¹RðH ÑCø0{aû"oñÀÌÅÿxE^ºïTYél{ƬÑ9!of†ÜT­ógf†jC_×Ì›M3‚( Ãyñbâ†zJ+)õñ†êÉåKo]TîÒ¯øJëÉ/¥QèS¥øXF×âmU1?õˆ§ŽGë…Wü m— fžÆ”5Ši‡ §3uÊÐè1shÅLÖf+Õt×.tñhJËDŸ^XÔ]}*T-í‚)µÔÄthWMëcBm£÷§cN‘X²WBga,uí|.ÒõùÛ~Ì ŠŸ¿¯%­ÈÜýu`ûçö]Ò»¹;÷æø‘Á³¢ íG×Ð4`ÜàúAØ;À‚gf€A@×ÔÄ€»•ûÏâºû ü.ðz9L‡z[‡Sí°Äu70Ûà½Ç÷©à BmoÚ»\@‚ýÞÁân{—€Ý üáTÛxøÞà÷Ï&ð‡Û™£í ¿¸ÃöØðs[¾[ø0ÆáfÏìü½Ã€òÎ>ñ"^ÅG€ÿâ9üÛÖÙåÀøãñvŽßñ‚àoã7‘ñ<ÞÈ×x$äaÀ‘Gñ×[ŒWn°­ãmüè¦âTÈÃoк€ ·ßèô%åá7îŽM;Ì‚×}ßÉ|Œ/àà„ƒo zÀ9€cþgŸx°ÅÍ|ëÎ`@¼Ø|–ÇÜ}^uãî ¾Á+èæÏ·y=oå±7xú\›ÏðI_åÓw¢ÞSÜtz&¿ÐëÃ}äùN_æ}넚7m4Ïéµ¼«÷õàœ‚}Ð |@&@µÑ_oÖ”!˜WàL‚j‚=©wõwÀ<ƒ|pÁ?ØÀ~Ô·zPO´v8ëþÝÙoû+/êÝ<'÷«ÞÖs{° À¶¸ó‘;v»mg^ÖÓ}¥ß?àdÔßý¹ÇÞÀLƒ 𠨹½öp|€&° þž?øã¾kËîŽÞµº¿òFüâoùÖz8#èáßÕ³o1ˆ8ø äðà ø güû­íáýðf0Àx+€J†ÊwÞ=àð‚ðÞ=p)¿æÿû ¿u¸©/÷”á£ûŸoº}Øä+}ŒïíÅ< ÀáTŸuÏ?€ ø€:؉àà°OX@)À1`KààÛor€¼ƒmÐvA¶7÷×ûéøÜMõC=Ä·ù\>‰ë¨Ïêm>înì4œës¶?Î+8¼ ܃ËÍö€! T (að ÿ¿gÝà Ø‚mÀ öÀ=`Ú…Ÿ,~@Êc?–üðÛðÇ~«.õ>î_ßV?„àû£~Ä—÷a{ÄOPüÿ¿gß&\䃀š¿ºÝÑÿô_`ý+½îßú¹?ãƒÿõݹM‡OþÍßmôÿû{<û7þêÇ·ÿõŸþ“¼ü‡ÿöÿg×ÿ Ïö¿…ïÿdŸäáþ_‡×Õ€=ØþmnÀÇŒ ^Hµ=€ AðéÝnBëés²›Õ‡ÿ {à'0\î€ÉǾA€ AP Ô@@T}Úžhæe€œÀ °tŒœèü€Á Õ%q0`øQP¾é€×ßApÆ€`¸.€LœA ès€˜wB Qל÷€ðüÉÀ2@ €«Û`(ò-P¨¨/` ž™÷È{À>0 Ôþ@0× Lày—ûaå @BsO ñ'®oF`TI !¨NI  Äývù€> Þ)‚@$(Ä % P \€"¸Âo €—õåÛ€àâ±o’y‡Öy@ýfœo¬à1gºõpßG¹špÕ)u¸ Í§ þ¼ AÐɽîgãÝqWÝ+ȹépÀ+Wx8@0Èã1r€UwÖýr¯Ÿ7ÀÓÅMÛ7 H@ØÖæ-vPÝ!|â`çü/”sÀÀ9‡ ‚€8ˆÍ€À³)ƒy]qwÊ݃趉ƒ0@Ð wÕ Ð`gÖ&à@IxšpXœ/ÐøÀK¨hu ðÈa„a›1pÈ}„&€ÞqªÉÐü¼ d€Ù û6ütÛÞ7p€+Pì Ìl€À^wP…G¡ùæ uÀ' áÀ!ÇØ9v†A膃æÛ@ â¼Ü!7xv 58¶1ƒgÝl·Ê±og@k÷Úù…aØfÎInÐà ðèv—¶õÞ‰×Ãrað–¶Ínçœf·΃ˠbè 2aå†Ò…Uh(Þ¹‚§a>»EpÔ…†IœU‡€HÝKhh»=ð ÐÏ ^ƒæ› P ,.€ À `Ãá_h¾÷€-P üßÐ&†³›fwP†³ÛâG*už!Øx‡U!G·çäáKxÜum3œ à Ž‡¡áðÄýï2„ï!y¾‰ƒç›0Ìp€x¨>nâà#÷¼ €' "qta3˜Öivða7¶m†õ ìfÕðÀ€HÀm†yG^u"ƒèþy‡à€†¼­$¢‰äM)¢ˆx·±ˆè¡‹·ÉˆžˆX¶ár€j· ¾oMÛ8˜x]›Øö08ÄT<`ÉÔ(P$²mL. 8}À6ðÀOâÌ% ^ç³ým^¢A&o>[ã&vu‰[ØV&ÚpwÀ6d‰j¢ÎF¿B@)`"n†:x¸‰pb¶%~eüfÆApiÛãg@0ùýp3[¡ØºßÀ; ø‹"êæ(²o¬@Päf@¥XÆ]ŠÀ7`ô€<à)o—âY÷Ä À©È¶m†£¶ÁŠTœ¬è'boúœ°4J|@ìx(ݶE†tmˆ¨ù(¹ít=  µ Àà0ºæØö5Î À;  ¬;^䆯ýˆ­à”×µ}÷@?p^qŸ[Ö÷ åÛåÈ¿y‡Àù\nòsÇHmHIÊ€ÀAîm$ûfÅqqÀ©Ã]nF¨ zœÏ†â±xá`2ä ‰=juï€È|ÞçÆ;rt9$°ø E0é}ä<°ß-~À ˜Œ3\CX#"yP䀠 ^‘(^¹º>€7 Œ=\—FÒpÌãô8è¸@0 ôpc¢E>4pAúC€3ˆ<‘])g˽ˆvwD ’¿]:¶™‰k¤]è8ÀùH6m&ÜY¾1‘Ib_Ô¡šdÝ(æ!@'¹Ø=s€58bÀ* ¼ÀÐ×y‡€‹g i€ I 0Úp€>Ð=šoÀøß0"y6\`؉ Ùá†Ø]»èlýÀ›ˆÝÂáÂ(}@¢Âç îˆ$#—¸&~‘!‡äÝ~â$@µý/‡æä)P“cg2@p < À0Pµà$Ð.n¿9à:2ÏÜ0€,+€ ÿd@Ù.–U€à:&cp0Û€30”se4ÙµeŸÀ0Db”¦ÛO7Ó)†À€DYµ‘ Ý;i ^u-åÂ8ð\XSZŒ]NéMþ@P'4r&Üç4*€ÀÓÁ“‹ß/¸*€ ÀÔøBqüÛ…xTºxb75êsH€Éùío›a,Yµim €R©Ïùdß;à„m€:`!&qT>çXÀÀ°•nemè×Á“Cà7` ¼6^ D?]Îmúœ7»s›!‡$„Ë€7œo,^S¹¿ÝqÀp ‰AÒé© pP€ 0'^–M P  l]¦<½`Åyý›0Ü5sfi|ì€7|}ŒÀTÉx‡€7à àäÀ:à/Æ€Ô†D‚€!@VâÞ#,4€Ð`¢Üæ\Ó]TÈü€Ž€?ð Øêð „¹e×öIž‹§5§Ç™p€Áç Vˆ¿à7’°ðr¦Û̶UZ–¢#ûvd«À'€ hmQ¥uWµ1w€9Ñ5€ðA óãÔø qE%×6a~yÀ/Ð,˜æsGô•8!×f³Ál$à³uo]Ûo÷ L[Î6œŒ©PcƘ#À´Ál2Ûg³ñlMÓvÅIm€pälH¦   ™~’9 ƒÍ¥u÷bÚlƒ¥*†AÀ̶¿m™WK¶áp`&[iÖum G/ç[™™fâ‘K\Àgt¼€3—æ5“s¦4 y²ÛÙx@€fsf\`Ô‚f&p ¢¹Äu¡€=¦™s¦;l“¦1|uFXfš1À9·Í™þ@°ˆš²›`<€¨I/z’&p¯rsT~C| 3<rจ ‹p €Uçß@ €lvP ˜oÝÀÃwHhh„2¡Bà(s.¡C(«‡*¡GèZðœeÚæ~[èÕI„nnahÚ–¡&\j ¡†àº¾±¡j(öÈ…¦¡gè:†®¡v¨*øýȧ3¨‡Ên|(Õæ‡&{hšF¢€¨! ¢‚è!Zé1¢ü›#*õU}<'ׇ•èЉRšh&z‡²ožè%Š6‚›¨%JŠŽ¢Þ€}îo—è*ú‰ª¢mç+ꊶ¢±(-ÊŠ’¢³(.Z‹&L߀qÖ—P`/ú‹|j¨0ú@£¼(à‹£Á¨2:Œ6£Ë(0z‡£Òè*¹•žd àÇz¨ì¶ú›w¨6Šv£×è×FŽrnãh8ꦣ—èí÷‰–*ýGƒêóèûç‚Ê£D(>z¶ ,(=šŠ‰6(@…€é8*€Ÿè€&¤ç:ny¦`ÊYÔý éBª† ©Cچ΅EhF:‘Þ¡iØ&‘J¢{›A¨º…¤ÀHºƒþ«èiAFy,iÛé’z1)/‡Ö¤3é$zŵ¤^(GÊò¤/ib’5— ¥h\Qêé]o!érâ=Qj”"~BœSеE¥IéTúï5¥O)VÊNj¥LiUÚ•Ré$Ê•²“¥ëðßYú~†p#ÜZz”bœoé—²¥Â H}gÛ‰—‡WÝ!0ÂAAáé—–‡¸ëI˜ŒçaZ²™Šiùv Ü¥ˆ)™†m“©cꆺ†±áeªQÆ¥ø@Iê0Àe:¨¥¡éK˜(F¦€9 –î!!` <çZz Ÿ9!` Цm§?`•V•€)À›f}@Êé ~zÌ 0œîÅ© ªµ¦Àpš|Æi‡œ†mÀpŠ|ÕéfÊ ¼)Nø”ª¦¹ç`Ô¢8¡jº>ƒÁö™žòx“!æH~š£â-»y†u\kÈÈñ¦ ]GÞUˆß!Òw(mžBŸjʉ –‡ Ÿ‚j}:‡Àà Ò†oÀ„ú> )0P5:‡Þ·{bˆby(Ãy¨ugˆú Ú\ ¢n¨‰¡ðÄ©¨ð@ˆº6mçŒ*£ˆf‰º¢Šˆ˜¥÷ð$sw£Ö§œá[ "‡è!^ˆ!âÓÙãa’Ég‡¤ÞmP*< ¥ÒˆUê•ê¤R©Md7¤œ?eJN€™áùçÛ©*g™ê¶ùˆÞ˜š¦Úˆf]7é¦òjj׆$&Ÿg*™ŠºE‰À”Xµ¡©têž:f¶©€jfø%œ‡*ê¶& ”Ü£¢:¸Ño#œ¡ú¨2ª™áÝö°™!žØÂeª2ç¥Ú¨~Šj‰·#j‹‰ß ªZŠ¡j’8ªÂ‹¥ê© ª¶ªª*ªÊô]œXÛª:+Æo´ªx*«¹*>`«ÞгjCê«îª½ê¯š¶«µ*±*¬«ñÛ°¬îªÎj² ª2}ÑjòɬR« )Ašç‰­Jk)µ:§í)×*·âr!㸠­3dØvÌ©ëÝzª«Ùi®ØÝåàˆk¶Á+ )Dîž…«c*‘ * yÃE¨%žæŠÃ-¡É§çʹ&‰š+óºò¥ëèŠj®¤œ„‹2’vd y³*’…$ɹт¥$iHºm•äyI6‘äÇÙ4†t«H©ð¡©CdñŠL’¥Èk—’švÆëмVmÊ+ŠÓI¯ThȹU¯:Üõ:½†pÜ«@ɼf¯Q)š ì’`\ |(¾ Óý#qäªÞêòzÅůýýêRÞ¯ìdþz®¯ðkÿ:¿þ¯ök+¿ê¯,þ:¿Rn@8°SZ¯éë?ÀÌ1t*ª»¿°ÌœO¹aÒ§,ÉxS’¥2PIL¤FåSYº%•³«—òo&, 'UB˜+,ˆ‡`•ó%û¶Uưaå*‚yü[ ëV²™cjÚÌõ¡wÜgÕ9r@ªÃ±ÿ€U‡Œ©ké/`œ2±VÝ)çwJ±‚(Kµ¹Y,£Jµéq@ Ç¿i±a Æv±ƒi×¶›Š±º¤¸{ Ànš”†tq@ûŠÒ¢p¬û!Á‡Åòowìî¹S£T95þ±m,‰º4{f×aJ˜n¬ËÈF¨fŠi²¤ewb’°f$Ë¿Im>/ˆµ•m¡,šŠ²Œ!ÖÆ!–²£lÒ&Ê®®®¬)‹Ê>ƒ­lùHm#\Ù†Ëþº,£Ê!î²½ì·F™Œj0ûü²Å,ºÉ*žqˆ¦Ǿi™ifÐe*†ƒ¦b(fd&¥Yh>r`& °f¶™”¦ì¶g:šÁ € šÕ¬Ä:³š}¦3»h6š}æwÀ€¤I/š™7.pifšø,0Ði¦³‰&Cà|A XCH @›Ò&µimÓ&DyLP-1.10.4/DyLP/doc/Figures/dual2flow.drw0000644000175200017520000007152611171477034016471 0ustar coincoinª» € -€ ˆÈ sÇH6eb P%Ì™2SÒè)ƒBFŒ.r°q#‡ )XL3›0y˜¤³ðˆœ7uà´|s!•2xX ‘SgM’P)"¥0\À`á%Š0`¤ U†‹,bĘá Y•"›ti ²bý(àñFŒ<¨<ÂN6iθ;¤ˆ“¡R@ÜÍ»—ƨ 脊”¹O¤PIòÄI& ÎBQnYœá0æáFL6éÀm„iÔeTóØÉ¤žh˜\U)èÓ2Dm% W±Àô˜®i´›5ÅY2ÏvúXÐbíùTŸTa 4¸ 6„¥èÝvÉ‚ZlQ×\ìbJé_D]J\š&¶XcAÙd•]–—¦ ˆªR•¯kl¯ºÖ*ç³g›²·òæpÂñz\rË ±Ó…QÝucd·Ý}ãEûдòY{ŸylÀÔíÊâ’kr(«;ð»/ÇŒ¢ŠÌ×ìŒ Șó9îTgx¢-$‘j­$ÒN®„ÂÖ]²@¢U§é>üV³P–ìcu¿RlŠ6œrÒÉŽÊ>½•m]ËÚE¶4ƒ)QzC”¡öÆ(¿=*p‡ãA_˜ÁLÊ0˜S\§÷¸PIŽT•óLK¢¹ÏɆ5žƒlh3:ÜèÆtºJгº_1Ç9¯+–ìŽU»d- wÍÚ]ïÌ󻾯@ßZPoðB‡dšO$Kb¦úª’5ê%¼…\ð=e%ó¸¡@9ùSÙ—fôׄß÷MÿtŠãÇr·pV€75$Ÿ† ‰(9\jqC¥„?Ü´O)~£•pëh~¶‡Xø5Wr'†õøJÚÇ„yág™Š" g )htF&“6g³eèLí„€D¥€ú‡Šå\‘9P76 )¨sXjèsYåbLPF@wøb"t‹±VcIw‚Kˆ ó‹ ã‚¿6ŒˆXŒ4hƒK–l^·lPÖD1`â=È8 :>P"fm xf¥(@Ey4‰Q53`?‡!dfQ]SÙw.&IpH •µ‚ƒ‡‹…7k»8–½ˆw–Á˜–‡huG¶ˆ5¨dÈ–ƒ_Çlti—Š•—{Y+n ŽŠCiŠ…‰T4©AÀ—y6b®•<7™²˜A–‰™šÙjœé•G§‹~(šMç‹‚Œ|)u†Hd2¸šYךÈèˆq ‰<èŒzÉ—~IfGHŽƒ‰Ž†™†SR—˜,å“oøŠ{Çœ?W™—™™[i‹2¶‡`i‚éukÙIš?vš‘ž÷Uy¬é–¯©Œ:(›ž7vëY+í ˜ãÈ›.G”f8Ÿ ©ŠQ³˜aL³ŸÊ ‹×U•t•Y9 ÓY žÉ‡a™ ª2še¹¦Ù…H_Áž:žšyÈŒb'j¹ù—h÷¡‚Y†ÄD¢3G=r|ù‰9A-ÚŸsøŸ1Š•Ñx5jt¹š×™x<úB> W@*Œ©I¤Šh¤®‰¤ç©¤’¨¡·é¤º‰m¢H¥GÅa%jœQ%rV*]ú¥Ó™8¦0úA2z¦C—¦#ø™}ˆx ª‚=ZšrZ+Þ)¤1¡wzŒ˜—Œš›s™¡Lú§}¨HØ›„9¢Ày”–&[ Mrã¥, ©R)©*V•J£yØ™_Y‚¡é¦ ú© :§¨ ¡‰hŒÆÖˆp¹Œ;ØŒVÖ¤>ð¤î˜‚D¨k&sThœÄ·˜ÂI%w—œÀºœÂÊpQ¬›y¬Ô¹¦›*–Ìê©p ªð­:¤¦J­Œø–°)—‘読¥»9¥"Z¥·z¨Z1%]²«I¾Ê®oÈwÍI©fj¬0†¬Õɦœº£Íº¯Ï*ªA ƒÄ8ƒ–Gž©jžØŠ¡¶Éž² Ÿâ wh(±0p¢ˆê3°¥¹±þ9©Äú±ó²õª©9jk&«¯î5ˆþú;­m™§ªš¤Ùº¤ «Þê¡ ›môtM´ä’ÞÇ‘øW¿)>êxN•>P|fÁoS£@tO ¤† è›¶j¨Wª5ÃYœ§”Ÿ7ð«Dû®Ýõœš´]i£Éj%»^PËx)+WÑZµlù²Gšµ{ºµ}úª6 ¥¬'¥áú°…j@«oŠš7Ш†‡K¦;£Œûj™Š£ê´’Ëcfª–û¯¥jµš‹µ2{¡­Z³¸y³ :ŠŸé·åŠ·V‚vç¨%&™ˆ;‹X»zx£º¬Ê»qÚ¯*K§Òš¹J¼×j¼Ûƒ’Smù2m±ze6«)Ÿ3Ùÿ§Z2!½öö|M &z{S¹j(|lrSy}—ÀL}«„(zË’i¶NØ‘2ɶ é¶ý[’lo,û3ÁÂwÂYÑÀÙ7¶³¤‘g “P±L“oÛLLÂ`¢P9Lw®¢|Kèû·ø‚+[]Q¸ »E;¬p¡¸– ‚ôê¸#{¯:º»N7¾¡S¾—¼è‹§å¹¾¬Ú¾ê « ;ºa;¨¦;®q÷· ¼ºëºKŒ½±(»GK»Ò9ÅjÊ´¹Ë‹'µÜÉÅÀ۲≪ÖZ°è©­~Ê—_˰‚J«ú ½!9hûf¿õºtü¢N¬AÛ›ÇJKÅöÚ´~<¹½K¾¿Kµ^ì²éƈ̧냱Q‰ýrec.Ï&¿tdGU¤¼‚¹$ÖôÂÍ黽ÀÅᬕ“{ ÍDÝÆåê˜WQ¸üa`1ØÁZØ\´^ݽK²Ž-Îd­å+«–ªéå[ÞZK³eÌȧýÌ‘<Ä­>%²U740%5@œÒ]ëÔÝ]]=åÞ¼Øa¹ÝýëP7µçÜå•]ì`ξnM›T†¼¶qÆ^çUX$ƒ 1*  "’p‡âc]ŸqØïá:‡ ñ#ŠDuˆò¦a5¼†Ùp:…n8ë¾a8‰01&ÊDrg¢M¼‰è°&âĸu"O$‰!Á$ZCl¨ 9ÄJ ÞP€C#À›¢S|ŠP1*JÅ©H«"T\ŠV1+jÅ­ÈVìŠ`1,rů(»bI¤†C1%ÅÁ³‚K47.ÊŸX™b\¼‹r±.6E¼xÉ¢Xä‹yQ/ÎÅÁýbUŒtQ0"Ʊ¨¤âbŒgñ$E•È‘bKTŠñ1BEÍ9£SôŒO1F»8cg,Ž5NEÐÈÁ!kÜ‹ªq3ÆÆÓiã`¤±6ÊFÝ#cZ,ŠÜÐ2ºEÌ‹£iü‹Æ±u)Æäxp#WdŽÇ1,BG©è;#s\ŽÉ‘1:Æë¨}#JŽG‘ø]FpÊ£y,ˆ&=¦Çóx›{¼1€=šGõ¨åcy„ï±ØÇ éãz´ù>îGÿˆhö#~Ä’@’Gy [‚ô2@êGI ÷clñ‘BBHûˆ!k€wœŒk´E9ƒ¤ü;‘Õn?¢Hi"«‹¤*òEºH ©d䉌‘+rBÊG™"ícŽ”-rE.Hùø#u${ä‘0ÒGòÈ ù"id‘d’7RIæÈ©ƒ£xŽC’=vH 7º$Ü’KzÉ/iÁá–ô‘c’LîÈ0‰&Ód„lYò<¦I5y$Ù$‘œ“o2?:I<É ¤˜“TÍ$û|Ÿð3~O÷)?ë§ýŸôó~²Oò0‰#j\Œ‹ñÐÿI@(^tt0 Ðj@¨E €q6Ð ê@)h\ä™0À‚VP¹È?Ÿå[ÌF„ŠÐJBEè=¡%”„¦PzBYè U¡,t)²PêB_( ¥¡/Ô†ÚPpˆCQ¨¡?4…ÑúByhí¡%‰ŽÐj>‰#w„ŠD ŠJÑ(º³cTœ¢S´ŠG܈E¥¨-ŽR±‹RQëhE¯b@£_†Q4JFãí¢¸q:^Q6Úƒ"ZüŽÍ²öGùF±¨T$5 fѨH¹(}Š€TzQBÊG ãí¢´‘BÑCêé…£j*ZÒI I£"•››ô)QJJGi$õRQ¨ÒUªJO)}Ä¥´”ºRõ˜JYé*¥é‘:*€XJJq)¢©¥¶TøÒ@yé(Å¡Ô)ÓVêIí¨d¬’qs<*é<ÿ¤—¤¦ÂÓšvIù<µ)<Ý´MŽIl:?§©8½¦²šžÓmšN³iÚ¬äxzSðI¥i<ýûQkÞS­ "Ÿ&7U§òQŸ¶ÓàÙOSå>Ý™æ4 ÚʃZPq%CM›U>†S"ù4ë)–L¨ìñÎÓ|j7*Dí¨ëô›šGR“d@5‡`³<ÂSûHR亂d© U>O>yRËá<µ¨Ðr{ÎIéOœú£â~`5¬‚Õä)¿ªX «dÕ‘šÕ³:Ò*T\«gÕ­>EÉVÇ*ò,«ö±®¶Õ»êUój]õžº¯ÊG½š<¹*f\ˆ$ÖŪXkbu¬•±JÖÈêX'ëd]Š”u²fÖÍjY#kgý¬³2VÎJZ?+h=­”¢ÖÕªX'«a%0 ÄÖÙJ6É& ­²5·jM­ Hu«n5ž»5UÞVßJ[ƒë©ì­¸µ¸¦Jà*\ drÕ­µõX"Wâ]—kt®ÄU¶V×ãJ _ëK4‡Å¼"Ot^m*L-‡ð°¼’ÃäI^•eLͨçVbPö_Ý«y­©åP½‚Ä9^ëëª|¯çÑ»J‰+[¨—vÓ®­"XK` l-°¶ªØ »`ßGƒ•-VJO ‹ì„Ͱò&ÃJØ Ëa-,„Ű'VJØiG.9,ˆ}° vÄ–Ø c!,ˆ]±–úÆbS¬ŒÅ±¶ÆXï*Š@‘=²FAŒÙ%{dÿ'“e²b” Y$»§ì’‡QöÉ6YĨel”µ²E¶ÊvÙ( »¬0å²`öËvY1ke³,˜]ŠhV˪Y+»½«Ùt•d3¼ÞÙF™gu%ÃDšx¶mº×=»(û¬¦$´¯RÚR©3³æ¢”ˆÖiZW=+5å£]–Îô7æQНêì䞺ÓÓÒÎ9™<Ÿ§§œªi²ÔJÕ§Jj‘§¨-žŠ¶Õ†ÚU‹Uemî|µÒ3MÖ[Kk?­­ÅÞ5™6Eaˉ­0¶…4“"RIºlQ)#u¶š”Ù:Å= m›-}¦ØöÙ¾Re[I¥í°õ¶LQÀ2Ç( Éí¸£åÝ2G,«n“£¹u·íÖ8¾[y+F]ã¹í¢éßÞ[,šoùíº}¤þÞê[‹Eƒ-¦×dK nÂe¸þq):\… qéãĦ—–^\j{mµ­z¼¸Ç܆\Tzq“í0¹ÆÖ»rÔûšQêy%‡ µRÒÈ–ÚråÊ…¹>ÒŸ¾ÜýšO].~‡1·Þ\  Q}.|e¹r²¢fZ< 09í®ÅÑ3yF]ä9uugÕͧ–xJ]æ¹uµ.Õåº_—x>ÝÛyu¡.صºg7w–ÝÛ™u{g×u»a·wªÜ+‡nÝ¥»QÁîæÝŠtG*€õ»}·<ÒÜóxSªlý»‚ñÞÀ»xq®Lý®Ž÷èF^Âk½+ ˜ˆ˜÷òfÞÌKp@çý¼LCÄÑKz{–é…& äôš^Ò;z[¯ç}½Ÿ÷òÊ^ÌK.g¯ì½ ·õ²^! zQ/êU½»×õâ^Ïk{1ïæ•½Xö¾^Ý«{{oÏú½¿7øŠ^å{/X-¾0`øv^3)}oê…¾0@úb,íkgg9¿çWŽBÅç‰~ѯú}ЦV´ßôûDá¯ù¿.¥þ:Eö‹ímµ¿Âÿæßÿ»ïïü…ޏ‘ÿ`ýÛ½« xÀ8K` ”*°¾ÀJik`Œ;pÞÀàp{`¼EðÆÀ%XóÐ|SðfÁ-ØG`¼‚Q° æÀ0¸[^®IœzðÜ(3 a5•¥öÁA8 á",_­êþÁJ8 Ëbù„‰S^ÂSØÏVá2{…‰p–”Ux+ a,Ì„3åÜ8Ã=x 'aêY†Á0>Ã]ØÒJ EÍa ˆŽÕŽ^bÚ‰¢!‡éÑ4¦Ç¸‡)SôÃ5`ŠCúHéãû(Ĺ«Çã« %’xbjýc<츙XBâÄ8‰q.íÈÆ""šã˜ˆkd94ÄN‘D-Wgå]º ÒhJÓb¹:¥åƒ­8@ÈÖ<\w| Œ¼¼A`¤x©ûÑ”€ÏÎsL©¬¦±: ¦b•7½x"jØÙX}ñ§ÆÂxãÈÖb|?ä2VÆîd;cɧ0¡‰46Ô8ƒjclܳ&â/ÎÆð0`¬]ÇñW‡Mé#tìÜrÀ˜ÆÑx"ÂãPçq7öÆô8ëcà)˱?&ÈÈx;¦€,s@;–Çט!{W©X=Krî$É&9%ëÒ”¬’£"K6É(YwŽÝ’“_2_…Š6™"ó×Àê’s2ò´³–arJ©(”ƒ²Q.ʲ(#J¢|”›²R6ÊIyX2å§L•²UNÀV¹*Cï:5"Óø `±4C± –½²YîÊó,“å°–ÑòY6ËÆS-¹ŒXÞ²[NËlYzÒå»l—ç]ö”y™8ñå»L—áÆ^îËn90e¶l&óY.ÌŠ™/\ÿ¸L®È¤•9ã¦Gp˜™/sÃ]¦šÑTfŽKK=nzìÌÕ¶ÛRfЬ ¹í·]ÍÁ4åâbh ;¥)ffÍþјÛ› ¤nN¶¨™>þæÏÜ›s³1åͶ”4§Çá ›m) eÎ7o[èüq¥³zÔÍ“9:gáŠ@wþÎÈ™•öVïLž»3p¶ÎËù;—çð¼Jdzz6ÏÄ99_×Üüž½3{V¥î¹<ïæø,ž[³~Ïü¹=WÈÿ\¼kôŒ¯ýµhñª;Ï¡P…¼ã¾*h扠´9\Ðèu'çNM¡ô†¾Ð:¿vO‰g…þÐåÐ@‡èõš É!†fÑzB‹]$´‹^ѺEûCý54îäÐ&ÚCÿh¤E´L¦Ñ€‚G×h--ïÔÒ·ÓAÿÊ=¤/t°DÒ6š"ºJ*¥¥ô–ÎÐYú!~i#¢ô”&Ó¸ƒ>i(=$Ρ崻•¿á¹üTç4Æ´VZZA{h«ðö´Ó”–SÆJxxi¿òœþÓO8PK¶y)Ó«>ÔGP+Kïºó*õ ØydÐ-×èRù>Žo£q‡ :ƒRV)Kõ ,4U£ê¯0d@«nÕ†RS3Lð MP‰­Õ’•!ëj#À9‚¯Ž'ŸæR kLý–âªìÔ¶÷SÀPJ+©Æ¦Ú+¨êTm˜_µ«.oYgÂCZ-ªou³Ž¬»zWÿê_mysuŠ ­]ŸëÉ b!ó^±’ÕLžë5¯Ñ5»æ±î:/óØo½XÕµºö”þÚ"Üë ›¯Õò¾Î¬;]×kÑ YÛu`ŽÌ–R?Íç©5Ÿ'٤ضÒb?Íü <+¶ó¼ØÎÓc O-< õ±ÔØ©cŸì=±C¶­äØ¿“dO‘›gólŸM´{öý8Úçf㤴³+ÕlŒB[gí©µsvÑ&ÚH»iß쬴¶ÔÚKñjÿìª=µ±6ÓîÚ[ûl߯M¶Å6 XŠm»lsíµ¶¹¶w ZA«L¸¼ÝZÜ ¯æÕC˜(ãm-¡%¶Bs'6`W+a©È·õ¶ x—†Ûqÿí¸£¢á)ˆûrîÄý·wTlÜ„t»“¥¨«+÷úÜ™uîÎ „§¢è®‘›pOn!ü¸]3SÔÜ©ûp¯n†œ„§âÜÝÀ;x ïáM¼Ófñ>ÞÈ;yoë¼›·ó6ÞÏ[y‹[èH½«·õ¾ÞØûßfïíͽ»wõö¿Þ;|‹ïë ¾Ç÷ö6ÐÁ8};¦ãé˜Úw0Ö™ê[}/Ïøí˜º&ýÖÉì›~Ão÷ݾç7ÿŽš‚ú~×Nêù¿±5Ì,àþ;~Ûïÿ¿ùwË|”÷;׎ÉÀ‡ev®ù$ƒËL™7¸Ï'½UƒgpÌüÁ=x²-á#¼á¢ð ÂQ8 á,¼BÂp! œEó oá"ü…—pþÁó —á.\…Ãð žžÿsoÕô±>Ãç ¹#ý³?âMBh(~$}³¯áF²=èúLŵ8}6â­ùA&ñ)^!íãï®âL'q$^Ùø|¼]|>–ñ(¾Æéx·ã›£zñ:®Æïxã¼@¦Í8Žçx ÷³YP–O¹Y„Á«}uäÿ5¿>rI®)çë$_¯—|SGrHÎhÁt&‡ú”rMÞÉ1ùªÄ œ’—rrhyGb˜–‰¯<'bi& ËiyLœÉô'Ær˜˜È²£?í`ÌÏ9z<,»g ïaÚhHú)19.¶j¦ŒYú_[/=¶Rn™îõ¹>ÿçþ¼Ÿ—YNÐ)q¦?Ý0t†Ñ!:4žè8%õ Ñ5ºG÷è¤GõIzø5‰[¥Ÿô•s6<Žé1=Ìt±îì)9ë10z¢u´­Ûz©þ0pýÓÄæ)×ãºÏvëm=êõ³Þv}ç^×ëxý­×u¹=;\7Õ¦ú¯Ÿõ½Ö;b‡Öv°ÓõÈ~×»bOëØó²SÏÇÞ³ û\'žž½²ãu;[…y¹¶Ó1QNainÊ95j7í}zN^,}ÚŸpjÔG&šs7lÛa{¦ æäPƒ&îá^—Š;q?îÆ=¹÷ZU…»rîÈ=º'wæ^#ŒÒ=»C÷çN݃û ÁÛ]»‹÷“ïöå6Ü“;½‡kÀmLÏ;ßVïð!ëf¾Í·Iw|WïºÙ½£÷õÎß-¦1¥ïû]½Û÷pß|кïë}¾ëw/àwi{7ðý½¿cçD¾i›(ŒkVÕ Ïá›"êt¤^,~x­XC¼ Ã€ä†ÎâW|Í4™TÅ·xÿâK'`äÌ 7Ç ÓÏãiüÐDœUVÇçøßãk|Ÿ¸XvÆ»øŸ£Œ'òLÞÆ;y!¿ã•¼WÜ¥L>ÆSy+¿äkæô6Ž•9ËSèæ•ì˜ÿ·e¾‹êf2¿LÅ?yÝ xtÆb ÀQè½ Fyf$°‡‹±Å`FHžy ¼P„ƒà‰GႾ`„šaV£}È`†M¸Ga¬aYt¨¢O8(Çtœeãy/L1„ƒsŒL?f8…‹ëÑb®äD–AÇUå‘ä THá U¹ñ”Q†(²áWÉq†[ž)Æi®yU“X†¡e™@ŽáàgrT§Ô–c°ñ'WëÁ‘[šÈá&²ÁÆ–gTye–”Êá –ƒ)u¥sl:]u[ºGonXùF©jXŠjj¼±X©tîÑä«wüD£|f؆ƒm¼!誽¾à†ƒ©Þ¡è®[º‡ƒ/àAÒ…fl©ér;¬µ¦Êñê Åº)†¥âÅ•[†j+oÜ‘.–’Ƽ‚ähî!íHÙ «jºêzÔhpÈ:ZoÀUm¤K‘`¾!c’+˜”qr¸ÂtÔaB`”Î ƒ T Gx”ÁƲg1k<ÇOedET!EQ€ÒH(«|1{¯ÜòË1ËÁp’Ç0Æ·ÅÎ=ÿôH#aí3Ð pݵQO !O1òÂE—0sͲì2¹’±kÙ_ÀFi¯MmÊn/ ·Òs£QFg à RAgãgƒàµÖýÙñ·Ñ4#ý4ݺ¢÷Þ79ØîYÞöÛš·Ñ†#®x†£–Q5ÃIÉÁ2Ù4%<{Õ¶K+å²»×~ûŠD%`$âà†gÁ LGÁ‹ÅÇÞŽNgÅT ,‹†b¼G†nŒýÁÓ/å|3-/°hÏŸ`ñ­X~{þ ¸øÌËáüøï¡@dÐ ´Ç=ïmå a`Kâð¿= .\‹K\úÐÀðñ‚ Hƒ\¶$é8 õ@P±é|' “Öò‚ŇÒ¢Cþǻۭo45”$¸#I K ÀQ[†ð?E0 ¨ÐZøŠp ³R=X,k$t› ‘’±Ѕ €agøC)ñ C¤¡ð¤uÚ¬;DbÙPİÙ‰JœÈ›IqT´W†\æ ,vq…L|a g˜€‚ Ž´›È†2ž1 0âí8Œä‰Qt#˜lHÇ-¥F‚ùBU8ÆžB–ðN㙃„®B†ñàfyˆN€(¤™ÈrZ òåxØf_^…˜çIÀ N˜2ˆÁc»[ÚP‡JÞ dË’ËqÌvŒ![æË±e ä´ãHè¥Î±a±‘²3óL3´)µÏ7s„ÁƒóÌ™)Q)»y­A•ó˜ƒþÇË!˜Å|A:‘ù¿e´žÑÄ 6É MpÓ›£ çŠÆYN3i= @çU"ÈN±5ži€‰G/ Í£$Ðp· i?P‚Âhk¤”ܳ+ö|Á\KA(+‚¦bÑmÝkbFÙùK2ÐÒ–¸ÔeC}Éd>Ô«=¦8¹ÃbS* ü_S-ÚLŒêqŸ"ÅPÖš§<ØáH„k?GÚÔtRõœédéx\:Wø¯°M…©LŠQ›æ3§àÜiÂü©Ö¦Î´­Ð üÂæä  «fe›ÊXh"q³0pA ppMjV2›£½,=¡)Ôº€'sqíFÙ2;¤u½k%;4Øï„g<z_–„[Y ’– ÿÃàa×ZZ{¦Sºý¥n¯™M8z´tÓ©8û:žw6}ñ”­3kŠOœêÕŸð¥ÐQà–èztƒ/h±zÔ&&u• }j€Þ U¿Ær–äÁ*rYQ¤ÚŽ t3ÜQ”Ç£ö§¨rèï¹”Š1H·²¬ìV%ÚUj}ÕÄa…¨=C\X¶ÎÖºWÁn5ÍZkîÖ» odÇ;Õ§4°vliØÜùÈóŽ&½Õ½çMõ)^žVÖ¤ù]¢ƒj_ rP¿‚`R´·Pe.ÆrM€Rà0»&M1{‹*à³*¶Y®€ ¬ûm„Ê0ßèòh`!Û¦6ðš+ZéíoGŠgiíÙq•à  &hq¾€ z&Ÿýg3Ú·Žfƒ¡%h?/ú‘˜©¦%ˆ†gMײ»Škc iR³ð°œôª±Ç6éQŽ”$ÉÿÐ,Ê"ë}Ždñ.¥°kÈÑÒlãùr±§6;ÈíŠýiP±¼¤„òÌ–õ0V–[SÈzBÅ­$8͉Aê¤P—1˜-†• Áºë ;r-c]Vê`°rJ4*žÉQJLh3%WPÝv•ð3ݬ<*®¨ÞæBбc0-þ1ŒÃŒhr5¸YG²‡Dz㛩2ñ0giI ‰Ý=Y7‡‡[G·V¹É[¾` Æ<ÑÇYA=h¹&`ââÍÏçÔ¹¡³\*àÁ1x»»Ùå!{H¼æÓË£C†½-s¨ƒ*4h0>QaËHRµë’_Ü%0{{ÆaÎQǃЂ”<.ïŽÃÝçu& ðnåüÚ·IE: À÷@¡&)*sØ þ·BV¶á|ñ‘¨•ÆÐ†<¬ÁÁ XÃòîà ¿À¤èC¢Üãî÷Œ¯þÆà ûØG*ǵlLìX út{ZÅÛ ÷¨ï´oëÈ>÷»Ÿ1 vÝ$Î{ÞÁѵ°Þù>ý¿¿¾»±·R]Šßn‰ ŽtäPW†ÉMüæ C5EÙ;ò<^LÖƒ¤ÛZÃE·ÝCä€ â½@¢Bsá\èÂ'†tné&X²W¡&"s€rr'Êõ#ˆnô¢€NÃ&[¡â"g3âòS•„%X1‘Âø¸!JuE‚+H€)è6+Ø‚/ƒ0£& Jå–1ˆ‚Å 3eà½Ë¢=6X,BЃ18‚@Èß$1o±(Ô„3…F˜exL{@\ÔB(M¨Je0 daX °VŠcˆ!kul1‡ç±Vb°:xø†3Á|¸"M•,Úã‡Ùˆ²:Ú¢*†hY#‡Þ²Œ˜mMe‡v‰©¢ØT©ÒO˜8‰]ø‰Â……’pnça 0iFàpÐCoÐOVÀ7Ó†!a+qk¸P@‹g!¾å‘0")_€y“Ñè#%©!ÆXSŒ•ä?Åøue€ŒGÂËX?¿XzÆRwÐ_å1_v_àaJx\¸“,_ð$ëØŽÖa†R"ó²ôÈŽ¡a\É“û84òè£ëA£Qÿh"Rñ$ñHމüXÌ#xŒÁp̸"©t`ñá?ø(@F02Ê“3X@p¡!áóuüô „E% y 'BYòH ÃBÉ‘·¶G•”\¦4 ?I#K„k>D”TxÞg”ðõ@E •úe=ݨIy0"B#N`)YŽý–É¥•ähŽƒ‘ŽRÁƒM\o!&ÓˆŽêèmy“ '%•[™yËaŒ1¹YA9Gr E9_õ%cù}I-’‘!v”XÙxŒs`"IER‹Ç±_ aö´ €# 2 G/8¥yš”1aËgš¨©D«™3ðš¨)I¹I¼)×”›†a›û!›9 ¼9H´š{áÆ)«‰Ðyš3 ša°6°œs1Ûiœ¸Éš7°œ¾Éš8°œÃ9›ÕI#‘›Û96›‰ÆuØ1=""tN àY3±+KQzÇirºw 9Ü×ÑM8£1 ;ôAPg¬ ÊŸêì1i1 A'Õ¡ ê ‘%¢ÒbÁå!¢ª9­á’"ÚE0 Æ!¢¸Yjú=ê›E€¡Gq3:ÃY š3Ú I`£J: õI°£ >zò!¤Ê¡4МI¤ 3á)º¢r¡šOà¤aÚO@¥mУaŠ›O ¥D¦¾ù`*Ãùeª¤4РS`$;Rzr¥U ¦šÑžUà¦pªÍYtº¡ ZÒYyZª™‘Ê¡y1Z ¨d1©á‰¨5PžŒj¥“šž›:© U¢š¥"ÄO êI²Ù§µÚœ—×.„jÒÙ£Q«ª¹T¨2Œ1`Ýipº'¡š¬¸™¢Q«¾YiàT«Ã¹ð1¿Ú 743”¬QuÀ#Ê0¡ 7Оäj®d ’b™1gP&(;<f0¯7 ÷S7ƒ®üꯪ°/ÃOl`;‰ã¯Ëšꊛ¦®¾ÉêÑ‹¡ê:œÇ1/žC¯ */g “G¯Q*²$û®t8Оôe;_'¬³ ŠÍIw@ŠºÁcQ²8 ŠRy¢75«šÏ¯óŠÝÙ®Æ1°gÀY³¸É´k¯Q˲¾Iµ*˰¯Ã²Ã‰°0,£Ô°5Û .Ó„uʲQú²þ©i§ ´ÙŸh xa÷²= ·ÍI®Â­Azp+Ô·ûªJš݉¨9€›§J¡:ᛸªà #c0¨pÛ çV°úY×Á#º'³ûÉŒãC*©{Ñœd1; ³“·ÒY¢{¡š/j‚2ºÝyºä*B󹸉uÀ"Pq Ÿë›µxºAµà ª¥·f{yû¹Q:±£ûíp\‹ 2p/€Ÿq£Ý+t–ú¦¨Ú½ª¹¢»¥ÕÛkH¸Õ‹›i ¦Ýë›ïa¾<š¾ô:Ü”¡uÚ½ Š8òÛ½QÊb$l`uû¹3±n ±¨Ùœ£S+ŠšÒ‰@á›3¨©šž¡¿UJ¡¨Y»«z›3EÐÀÄ›*hp$çšÃi>Á’ØÀ Z‹l¡?õ¯ÒÄŽ[å#rp¼F:u`¿3Рu°¸ß“šQZ%Œ¥/P`JÍ,¦&÷ƪ©Ê»Ÿ4ÐA`¿4€›ñƒq3~ì¸sk·Ë¸èÇGz7”Ñ /LLQJŠ–,Å5ОoÀÁ–a¯ì#R¯Ñ!”úÀ뇊¶Ÿ˜:Y`¿Ê%ì’1®Œ›Vâ9ð"œIŸ_0yÐÝSI¤¹Ë@ÒËØ‘XDBá¥{k Ob—aÍö¨5I )šøÁú) “RÙ[c†âl\óYØ‘Íö/YÕØE¹’‚À,ÌMôÍ Îv0ÎðXÎÈì™õ<ÌAdíLÖÏ ÆÏÉãÏòÙ™õyŸòÒ-ÚøÎ>ô”Ý'P `•d!ñyÎ É–†ÅÌãÌÐ\v™:¥,¹¢“ãAw`'^ßÛо¼˜÷òcÓèÒÒ<(ðßœ\ÑÃÌõÏÉŒÒ`‰DzÔL9”RÔr$ÖÌÓž‰Ó-¸söä?§}VLöTÎw a*‰` á˜ÐoàAg¡‘’IAXdO#aOx9;t|ð#ÕÂõ©øhžáÂJi†ÈìÓ`¹"\¡ÀrÍÓ ©‹MØãdð$rKz€ÖxýÒ 7Ç7}=FW9"¹”Ùö´Ù©×·7v m%~MÚ¡†![ ‡sÙtÚ)ÙO460"#ÙÒc½Ïi½"MbÙ}eY-!!ÂÕbâ†_bÍÖe¡RiOfh?SÎo©@-EÇ]ØZM×h}×.½ÚÞÅ×°-ÚS]IåLÙ–-·­Ùç Ó àÙ¸÷ÚbÁÞ]Ú@¢Û©]ß ·×ù \ë1ý=ÛçQÛ˜­N 6ߟèà¾#3r0ÂÍÖÒ}á=¬ÉmxâÑ!2c†/ºgd°#p±+ï!z‡¬1ØFüãk΃+M§0î>ÊÃ0 I !” Ù+•Ö“Ç/•Ä1A5 ¸Üñ(Ÿa0væõkƒãTi½|!C×h=2vÁBÿ“åi}|TžZD3sü²ˆJ¡m¢ÕRâ,#-Å]L®æ’ZÊó=Ê!Áè_ÂÔÁÁ.€3@6 D- 胾1 l#Qè7.0ï7&7:f³Io—Óç—ndìw;T¹HtDtaèJÄ!¡¬206A>IáÊ‘<æ–"Á¸>t-]Ä2APCM :4#æVŽs Ž-P9°C#±:ë3(€CÊ-À®C0°|ÁíßÌÕ æ\sëœÅ#¨(À(@y°ŒüæìÈ)ðÍÑáÔže~:Þ½J4ÒNík`íØÞ°ÛŽëÞ\ç!îå>îæþ&?޳ˆ¹ì“ÝtsaPÔì>eÀô®-`7°Cú®ã4` üNþðÙ>ðÝÎß~ðäŽðî(0?÷Õ!y°ñ±Sf4Jߣ1ï7pêÖË0jEô#±²2€ô¨<¦¾ ôCõª%õ…ââ±îžZô*I#!.>¤ž’36ÃéÖ†é>_¢îàHd½QH_¬NÇës!X ^¶Žë¹®[»¾èþë^>ìänìÏ>cþ­ì6ð³víÓïöïQqí)Ïí*ßòáþòœ¿ðc‡îêÎîî~$+c<"ïïÔÉêëÂNò’_í•ðŠ£ò™oð›Ï0Oî2¿0>ìóátW¶Óä0±©_¥ÚúH´:‚þV¯Oùn`ùùî¹ûºÏðè^ú< 󲡯¿1o½Éyß6€];ž¸‘oò“òÓOð,oûׯðü¢ý( òb üõ ¯ƒÁ €L"ú¬—ã³êou$§kRò¦]û‹}—þÁÍ7ÿ^ ±Ë#[Ì8pÒ˜í c„¿zךæÂÔq<Ù­?û¢ŸìÓvÔ/þY¿ÎGÿ.àçC¼Îx¢XäÒ¨?I}gL’¤@в::ÔNX'¾¿•7å ´€2ÿ¿2 óÐ^|03€Dcج¤W~®ÔXP!¡êý««ÇôÂà©Ûvd°4Ùº§÷Ò`Öãs!*‚Œ»¯gGħàKÁìmºêÐé Ü§“¡nÔm’6¨DþØmtuÏÕq¯ëô­‹ ·Îïé:ÁëÝãË…Ð>\wì_²ãxžìé¸hÇþZ ô›}1° Î@ìÇ ëß }í.€‰®@PŸøsj0 ñ=>几 Œ€L>Á˜gÿr ú€ >0øÍª)Xù µÁ‚>O+Á‘5XŸ]…2ƒ÷mé]C¡§D:™ÔÛ‚OÏÒ‘7¸õä g¡ƒaoìuŠ<( w^ÚótÁf²´=RGãB©r× $»‡Êá¬K4}Ïï%¾JøŽ„%´†Ànì>þ€ø®Ü'lëÊÙÂ^h _ í«~.¯BAû§î^ ÉÈ%ä[XïvÂ\xv¼°&Á_¸kß*¬Äð­€6tf ¤¾Ä%I†˜È;úB(…¡FŒ‰ ¯sÝÃBLOr&"[¤¾–%IšŸŽC€ûîù¹?TXàQÌ~2)Ü ÑdH3ës ”+Øóz‡4‡§ŽRyÁÉ€ 5CÔ+ƒÜ0.¬«oH õ¢6„‹öð.Ú¸T»Þm‘{uPâÁ£ ë!–ú‚9!Ò–NârÀ¿’zÖ+$„2Êh%Ã8¤#æÐ4F4˜G¬a=䌗‘ŽÀÁœa½bL‡w°ìƸõ £­£ FºÔ¨ `€fD"º‘ðƬgãÕV^°7F½àÈW#דƒ‡QÚA²Ç5F=ì FÏzÝFÐb½žeÄŒ¾Qµ¼½\X¯Ég|ŽvD4ZGÒXê’ãu$ßQ5FèˆAÀt\‡Œq=F½UA@rºzü1 ²i¤ÒàÈýˆ&é${\P‚±P—ù¨N¢cbŒÕq®El2<„Å.EN¤§¬lÀ>|uý0Fî½™%!ࣄ‚Ï×aÂ`·‹tˆEçK¤Ù(×Þ‰¤‡ÒpEÍå™)›'@—ZSzâH„˜ ‰Ýõì„îí!–ªwy6W"’¤—]RoÞKt×»ºGïBgº²eÍMˆ‰6%&•Óþú4æ˜|†m‘e˜É¸·`]Œ[tdHæEà8±áîä }ñ…&+.ÈB)g_Ô ‘3~rN }§‡ !RRÚE÷q£¬ƒtÂ<þÆ#º±htpêQˆ6Èìø'qc•AÓ‡JGài4;”ÊT"_9•ÇÉ€Ä#f£ßqA!=#z‹£u„_4;¢Ñkb3Ùdï¤?”‹êAá åÒ„”¤CAMêÄHhMô³j:Âû™5'Ḡ•9²n°‰ìR¥²cNÔ{ÚMð¹6‡áø< #c¤>ö4A‘HÀ´ ]ƒ>A™7?>h³œ"Öñx–NÓ(Fhã£(s‰ÞÒø89$ˆ¢<Áéºh¢¤úËÆÔ;šG­—EñèE”F“úA¥™R)‘ Ú ["©É-5¥óÄŸŽTÑMOQY=ýgC¬¤c“vÏSú='f½T ÝÒààFéÇ+¥šô€¦ÒйJ9¢Û<$‘ã P^Èü€";ݤî4fÐØ@]–‚3}ŠÐõù§©­¦ÔR–N0m*5[Ý‹ì–ß´‘ŠKqº?»¦$í‘”ÔZRP(ÖiÝÔ§²’ŸjD™'Àá~t æ+Ù+)¨—û4o.Ô†g UÒ!öc¤Eˆ:"§úŒ ÒuÂÉ/(¥êÍÔÂiBbU=ÙKïh¡üÐTbSö5‚Þgy{ŸåŠªÁ[ÇÓjm£Pô-–ѪWC¡†­¡)´Ø¹ÕeêU;ä3-š£S£ÂQ9º&Ô|«,ÊŒv¯ÃºL‰c\¥º³è…ÑÈÊX¥^_=‡y4¬ŽPGDá+³kô®¬¾ ZôHãS-0´ÀÕLyæ™ì‹_еî8®j½<«i媗Õ5þUü¸Gçðd{Ö”.„„Ï"IÝ­C¤Ü”y.Ò)Rm¤þäš„TZÏsªRƒ$ë+ GÒ"®¾œàIÞéPEw9©.J‰úóŽfEMš•iFÊÖÔY®“A~"A8éÃäZ?—+§§#•\’Ó“š.±':ÕžµÕ¥FÌvº]WŸwí§7°žŠW2 KÍ+‰ì£î³xBét‚¬s‰¤2RNõk$•®æôTþW Áñú¥€­ Ö“pWŠ)Tlà ¯3¢†Ðò*MÑk„ý£(R…Š+*!=^†õ¦ÖS:×G:N?ì¹ ±)5€®Ô`bQ"v–¯ÀvW…êbÁ«+uªÕÁ2J’^ƒk‡ ƒzd|ý¹ðcí'så°ù’òO;Iýku%×5ŸjWk`©ìLÅ€W–¼¶Cß aM¤„”Ù´y7;éWÔ´³ˆ™ÀÍ[Þ%Ý ¹05|‚ÞŠúæX„ çå6XÕ;9WG¢›œt¤fR'©w}QhiÒ«é²É»*Aéõ-¿¼“PúU±Ë[¥¡7Ä¡FÝžÕÕëu€e`«ô×é:VÖ* µ/µ¿ÅnûÒ‘÷Û/nnšR³Îaj‹(w,À¼43šQ¬¥Ÿ(ÿÕ‚â—ŠîG¬9‘ný=À`uìžÛ…‹x%³«°ØíÂÝ:y·æµÕ¹Ù6{’X&ë/á%й½öóþ^æ{r‰-é=¶fWÝ’:ê´xdãs¼•ÞÂ^{ë‚7îåÁ#VU‚Üìms0à݈DwÁ‚Ð\vM/ËE½€¶dŽÁ@»‚ƒ,~®/ø SW\‹{”Ï彜TI¶Øp+O­=›5øøRa SçpàEwˆ"~¼M]© }bAu~È—+ßO›¯XLdQ$ÞÛ¡0çÿU£côë‰$Âô¦.½®ªµ—ºQ¨š8/qÓËÄ[gV¬r½ðÙÃ&X¯Ò=׫„knìmÂF¶öb^¬*A‚Þ¼}w`ÊáLË|ç©(½…¤UêáJ«6‡ñòmÄQøNây/1i}e-sþŽVÛ*4_Åû7=6FšU/±F•¥+«í^=$¦ Õqñ“Ü8eZVõ‹Yw«èlŒîx2LUuUYT e鸟b6*Šk\¨™å8;>Í&ZGçq3ýª«¸ýÆRY«æ2‚jõGm☉D«ÇoOHs¬"i«<ÆÈˆUÛã ºújgv¼‡ß1›æÌ“¯É몌àø#„ÖŠaá2B là ¸4Êg@…ˆ÷%†<鼕ów-ÆÁ&¼7pO H}ä9ÌûæSÇry¦ÎÀ÷X²ÅÞgT_§yËoÇ%Qò‡Ís•uxH54(UµüT±”lͺWO¶šßåÈ&±T¢;*7'Ê„ì {åHÍÝð7Ó¦šéˆ<.Ñ K½f©'G3‡Þ¡@ìBä•}ßþq—"³uù8ËÝü9•Óð^nÎ×ZWal¥Ûf.·eR=°fôFö²3¤,iV¢@ªBLa´y<‡ÒpÈ@j˜«¡5†ms0´2‚à ›}ä†ÝÐ~Ä[&X35—¶Cw¸'÷X4&T€AØ€Äì™-³k6pÀƒ›³w6Î:›gmŸÝ³…vÐþÙAû0& ˆà„¤6 Ú€j[m¬-äÁÒnÚ€Àk€«mÔÚg›l/í³ÍÒ6×fÛn»lŸm·×¶A ÛAm›í»]·€=0Hm`ð·Ç6×.Ü{pn½]¸ >0@`qn  €A@¹%wÙþÛ•Û ‚€èÜy{r‡nð È|uîÏM¹-7(‰àœ* »wí6œàü|Àz·ê¶ÝC`¼i7pܲ;Lî`¹èK;‚Èm¤7íÝ@@ØÞ…Û{/mÐm>€˜Ó 8ƒ/Àà÷Þ{(À>ø À`ÜàúAx;À0µ B€mœto äÁ2èO€ À€ØÙÏ;Lƒtà 4·>Çß $ñà 6yÖNâ@€çƒ€z÷ÖÜ‹œð0̳6B·Ü€¢{tüƱ÷àc[†+€¥ Á³6ö6å€à¡Á€| ؃sð ¼7ðæ(”òÓ×ø0§"Б\ðÀ*PH½¤pæÈùç]S‘fЬøo`ìr (†€’ð.Á*ÈŒï¥MÆÇÀ9xž€ PrK~þÁ=˜}­ßC`J&å ”€Y¾´Å9ÿoàtÌÛ¸A˜ë LƒwàÀÁ."} SrS ¤6·Ü^ `b`ÚùGã£$qÀÄÀøVàƒÓ~’¸æ¦äR»øp^¶I8ÚÞáYÛ‡;wàÜ!ÀÙvà`@„Ow$@؆îú;»'vŶ7þ[jûç.®ûÛÎÙî]n—oðÝñ÷{ ¾«ï½ >€àðÀ¹ïw¨> È9[Àßwíà¶‚—ï@;‡Cç®·Ù¶„§ðïð€ Ÿº!<àð³Ûn€Ÿà;¼ˆÇ ÞwWñÿ ù„7ñ~û³çp àâ1ü÷¶Ütõò ¹k<ŒgßK€àÖk8/ñ!>Ƈnà:@x>ÀÈûø$ä€%8yà 0)ä}÷’—à¼Àå®í+}Œßõÿyßt æ=»Gó*ò 2wůÜsàp? v"xå7ß°€RÀRÀ •ÀØï—ÿïW…°ï`0‚}€*>õ.Û©¤ü[_ñ€åŽìÝå÷úzƒ<é.ù?þwçƒu ÞØ8;è€pP *€ÈÙ !ÈýmÐlÁ:øëÀ }XoôÁÒvƒßÖ¯û±ò¹>ÓoÜ7ý‹ýqïëoú=ŸüÛ~r»{ƒ Ð:æ7ù[€ €Ž>ÚÞ¢?¥ûÓOø?å‡ùŽŸñ#nÏôÏ6Hñþö3~Ûû!¼îýüý÷g~ßßûE¼ð7ù~÷>Püù;‰þs»ùGÙoþÀç¿ú_ÿì¯B8@gŸsórîïý ÁØæåƒð Á+pD ý¯ÿÛMØA òŸúwà=~A7xèêŸþçý 8Àò–ÿ…À ä¶Î‚@wï€ÃŸ¥×¤z×À=à|@2° ÜŸ0 (ºP¨¨/` 0€ ’×Ä{À?0ÔþÀ=ð ô¤@ö`9  *€àƒóãµ'*y!\d—è¿Ý8€~”['”0@)p L î-_>° ˆ  x&€$Üæ‡þUqÆ"7ê%€Û@ò™qA‹wúYÿÀ°×íq}°È {Ú_¸×az@$,rz›>ÇÚ­p€¬œ5€‚\›!ÈÔ•rm+÷|¡$X¶ésÀ` q —íá”]’Ç :€ð¼-]¸Âýzû'ÈÍ€ ÀæžV'ÎeršàÒÆ â@/à HmòÞó6ÈA0 ŽzP¼ÅqœŸ9 ÐEž€g‡Ú‚8°×wÿ@ Ñå]? µÅ‚Ùà^÷$qÞ ðô¾ Úw› 妼@'ЕoÇö¦ 6Xš}À/  9€÷7Üt@1h m³ +Pä€pƵqÃp(„Øà!7ÔŸ@„dÜæF,¿^FxØnÀ HŒïÀ À 0½  *uåSGÆÝŒ€°`1¡!˜Â­pv /wü7€.0ÂxjÜ;èü+rÐ\¬·¼­pz ŒçÒ„YÛ6hÜÉ ¡M—Ô-rÜàØÖ~v7& èt‘àòvÓ!`ÀC—f{=ð Иœ[˜3@°¸.€Ø…ñ Ü¶@1ðü `è ÆZ¡ÔÆäpØ w®pd˜â‚Laúgƃ@1h@p2@ ÇËm†‹¡À¼ýï2„s@ʄϛå&Lœ0°Â¹†Ì 1Øß½ @·Â9¯áUˆÚv¯!Tø ‡HaõgÜaš!Œgûõm¶Ÿs¼†gÛP¼ À€4xžA`.m €@ p‡¹ßuøüöyèûõm^[0Xw0^{8ÀuÛHmôaÞ¦´¹‡Ð@Ú¶ ÀuxppÜáÏÆ\‡€ˆËßux ∗¶ýlxÛØF!Nˆð]ÞÈYq„›†¸´YnH0œ}÷  Æ…n$@FÞâv"ZnÀ7àü‘€?Ð"zˆ("+Ð<„VÀ8¶½ˆ¼Ü7`ô€>à#šˆ¿SǼ À‘Èq}.¢œ§Ãýˆ¿[G¾•nÌ[‰$€¹À”ˆ$Vn@9ð d@8ð˜b"¨˜À/ °U@›X»µ|ßÀðDïÀ€¾uoOâ^Ì{éÛ“8㊟ §¿EoO¢>ØÇ…‰Sb ð" $À+p<À; µ5p/â°œ«€ÀTJÀŸˆ¿uжÀ? <À7`$rŠŸÝ+¸×ÁŠ(¢HØ{À 0+"Š¡>W€ºÇ+Zn>À#Ðø>€.€ DŠ@bð TÕ‚5ð¸ÁŠ¡›Æ÷ÈwÀ>°³ÑŠ¿^)È-Š€¢œ7x@ƒ')n‚[׿õü€á‡¿!t·]U(€à.;€dnÀÀQ(8ßÀ>p/æ‹0éˆrÝ[¾TË%Œ¼0x@0×½Amºàð€aÖÖæ¡qÞÙÖ1"žÝÀÀ€ àÕS›q·êvÿ@e˜Ìª€Êؽ±Œ]7(ÀzÌXžäÀ;`3âo8#R׌ˆ0”ŒÀÀ>0 üÞÍX¶ p@0 ö0$†R£ðˆ†0@0Ð ÔcÀ\§Ó±Œ À×¹¬ž>@Ù |p/âŒbØgð„•°Ì€Û"§š{C=°¼Q#ÑØ7N…AU88úÀ*x[7äpa!47äQ$ àÝœŸä¸×EvV›»ØÊuoœ£ˆ(:· þV:z‚YÛ:œc€ø‘ŒL];@:Ê|€°'¦p¶£ê(óဠà@ï;Ê|p@F÷ D„Æ#瀷Ð;†ß0P\á`Üå‡c›áwìÅøÜ0§‡Ý#ð=¢q €€€æÞsW>~áNà<À°Â‘Ô£ùø5À à °`À0°Âµmy›÷xðŒ @J÷ X!¶U¬cF7µ-rbþ8°Ž`_Ì'!UÜ1h –‚À95ÂŒ“£A =⇀ €Ðµãئ0’o@Éå‹À=WÆ¥cp d«À'° ¤îb¹h ÖV€‘4ucž÷è­^løä¿@€ œ…yžWX¥€»ØÄ%Žn¡¢èlý àÜéuN§Æa‡ÿ<°×cdxFÒsÅ Ðǵ€d˜ÃÉ¢çÚzÀ°ÂÕ‘¤pºy >g<]À5 4S8*ŠÀ/@’ôÜ0€,*€$ d(Š@ày>LÀ6à ” #YEfm À'ð€´Ü  ”t$k÷HNmÕã çG"Žº¤‡8Än¸à ‡7jnndÖÓõwB§ñ±zÜ! Gâ Ù]ÖMÞm›ºX¾åTbgˆàát+œ8ˆH"ÐÖàuŒhœÄõÀئ…v£ ,RÀ?¼“"œß¨NÇ"0pOš%],‰¥`9yà @Á¸ PŒ¶Û×øGêsÀp À†_Áé© P9>”K P  †I<½ ‡ÞålcDi|ì@HÉÆ‰†(¸­Ëâ?ó!8@5)¤ü›M92¢áðà)åÒ6Ó†8™ ¾‚¥P‚§M¦pîbS'\R@TÉËU“L]U Qf×€V üIwQ^„˜µ}?`V.mœ À9¶‘yÛ9·A†úÜCþ~˜^yîñr¼AÐWæm,#pðŸ.`G–¼©A ‹åØVX>‘Q$.ðMRm!:Pº’c›fiÊq–€€g™Âe–(0Ú•ÈdÞ–:ù€Ô†ìu€@êH4xly Ž|éß^W[ª–e'äCÚ–½e7ü‡@>°³í–cÛ-˜ø–ò@, hÙs[—€=ðŒé,`>—ɧ¼Iß%oÉËÑ–Ä¥ÙÆ9wÖåmÙÇ€è×ǵ—½¥PÜÇÀ Àîˆqù\âÊ@& Èê@1pô—¼åsyh—³@‘˜*Ò—¼Üqh@˜³å„I\ž—¦yÉZº–æ† ¼–uå]bÒ•cj H–˜"&ŠIb&æi™b²˜@a‡bʘ€@7ÀùÙ˜å›Í†c;¦Aœ}Ç wp~¤[iÊÑœ_æfdòx5aÖ¦´qbðõ=™ Að,m ð²I=÷‰p/:<•$– lô@P8™œ“h™eæÙtøÝhfnü@ È|T&j7äÁl"“ɰqÝ’yö1€™Ùòƒõà h’| Àt_&¤ÈÔt3€)àŠh5G@U 7¼0Cs À.p‹È¹ˆÆ`èÔt¦‰ ø˜2%Byš›d’·9‡|»¹Aª›í&¬Ç!zn0ß cÖ€iŸ×W¾µ–ºÝ\é»é›¿‰oÆy§ÀéoNn§zwpÒn g¿™oâxçégÔÿÀkظQœž¤®7qVœgè¨Û¹‹gÆÙ2ªw 'ÆÙq nH]ÈÙq¦'<˜µ±œ"çËÙržwý[aÀÀÿ¦Û¥o: Þ¥o¤0p\ÞœéÝÎÙ½átC'<ÐèœþÐ9È%Ó tZnIg uˆß:ðs~t€Ïit²t€×Ùt~t7€×‰ðœg€ÙÉsžòÀ? e:çÙùÑmgËwº–<ç1p\ ÖÛÝùaòœaÀÞ €> µse Ä‚gð žÄcâ d§«xxJž€à Xž‘çG×hžEâåùÑšçy"žÝ@üdá)zâo€58׆gëyz&ž¬kǼў¬ç /ævIœÀÄñždåˆÜMmÚ¥n·È±‘ðΨ¾e—êÝò¹=:ŸÞ¦Ë¸×Qw&äôÙqZŸÍ]ö‰RŸSÛ·ÞyŸø)â1ŸæçÞÖeêw÷]~gÞexþ~xx^ƒ‡è x僇ä៞òÔIÁ†ç>-àôýÝÍâ¦]–  ¾™¸1 -àßæ€ n(8²ž 臸âa ÔßZ>œèêrž|BÜ? |6€UÅy‚F €› ú¸± )¨ ú‚B1è Jƒ– 6è؂ʠ((:ƒž~>hxõ©ƒ'VÈ‚¡¡çØv?ŽY›í–„¡P Z„.¡iŸjµQ¡qžª„RÏʼnµÁ çJƒ†¡\(Š‚š¡`¨Z†ª¡g( †®ž¤Ûêvž¡p(:‡Ê¡qèZ‡â¡vhšö½…껢hHˆ ¢“Û!š*¢Ô#jˆv‚h:„úø@ö7‰Æ–¨íF‰f¢€&Jý]¢®%'ZÅy¢B¨&JŠ‚¡® Ê!Ö~9Ú ¯hÚŠúŸÇŸ»Y‹Â›±(ò·ü¹¢Ìßꊠºèˆ—ªƒÛúÜ›Xè¿Âœê]2Šp.£§3ÊpB£ÍhJêvÒ(š7î›ÕhzúÙèÉ÷À¡5$ :ŽºåèHŽÂ çh ÇŽ®£æ(<ªŽ¢£'$Õ6¦põh¶Çn£&>°Âå£:(?Êoú£Þ§=Jp†pýè?*9f{Êh×Zž 9§ *Àí£éCÚþoHEêò éR§âщ A°tJ¤#há’îuQ'IŠ šrÇÀÿÆ€Z*iZè.i`¤;cZXÖ¤Á9€“.„€pw2 -)IJÀPú¸’éã¶’âJiëØ”Ž †  ”æÀÝ)|öƒ2)8ð´–v'¿y”z¥`©?àa¥pÀðß}üæSú•ºû[ºµÅƒHé[p~m©LêØ¥øÀ7—Ò¥_z>+éðžêv‚+éO¸íu¦çbª·%…êÝix¦\›qøÙM†‰ãX¸‘ž •£gºa‚¦i h:&ž—á[úa.œ‹awšZ…Á ðšv…gÀl×_p¸´ewI(= ›>pŠ)à›Â¦À0×›þ¦Ì[êü¦(乜æ†L[púœ.„€ ðð&h LJ® <)Âq§êàr¸ÂýØ)s‡‹ž‰)y:¸Å„gzº³©§æ©¹éžŽ•å)W(ŸŸïi}ÊžzŸé©~j‹B¦þi’'â\›|È=ªmö!~h–§ð!¸ÐÀ‚Š:¨å€(¡x„ x¡6¨y›†ŠÞ1¨êݶ¡†¨ï& p!æmg›ZŠ&“U\ò $“ú¦Š àÁ¨–›Œú¢zˆ1êw£R‰9ꊊ£Ö¨:*Ú¿©¢”9Șa‘j©Ža2i¤"©Nê’ ¥*©L*¤R‰Oj“J¥N©§bùf<\ê¹(e‚©Zj—:¦Ê˜;ª˜ú¥¢©ž¤w¦ú¨fêš §ª©dêŒ.¾©vjœZ§¦©g$J÷ߘ碾I’˜ªŸjµµ©è  ¨ö©Äè¡. ªÿÝ'Pž‚+\¡Ú¨²n“j¥j(.m!Ü©†‹¨àËyª‡g¥º³ ©*ªöwŸê»X¾aªê¨Úªâ‹å «²ª¥*Ä€¤êóH|šªå0Ы‚¿êŸ´µqÃj±Š¿xäÿ–sµg¥Š3‚Žv'ä¹öžRcÖÖ`«†ã¢X¾ÁÜj À2z«7g¸:®ªåjHÚ­¢«àªº*®¶ŽœXŠ µç^÷®Vqú¤Ý˜µÕ«ÙjÝ(ÂQ…ˆ ¿Š¿EŽ…èFÉK²žöê\И+Âz;º‡Ÿ€Î 8wôªÃê;À ±"tÇcPª±ž«óÈ|¬ÄcÈZ¾á$+8`²p@Êj²§'BgA^¿y ~òäX©£Š9ë°³’™›ÏŠò¬_£Ðj¥ò¬¤ÑÊ ­c%XZ¢B-£wZA~‚ç'‚"äÒ&ÀIŽ9ó™B"tO¨¿ ¶¡‰§sGªØ[[êoš­­*3:¶­­&ä§ê†­¯$®J<–rÝšDÆ­¹*ªª·Š‘|ëÝz7îu0€NçÜýÿ[ÇVÂréŠy¸b¤5¤½ §®c%äj²©u+âj‚F®˜ëÞZ¹n®—ëœú¸‚®’kžJ¹j®|§E(¸Í}¦e暸ÖÕße´®ž«æÊÖ“,ä"G»"‰À2yBÎd[yM £YW¹Èƒê4™MN„X!òªÛrÀ7év§ý›ËÈ ‘^a:‰Þ¹Œï¤‘Š Å›óêèsÿÛMÇ$‚&høê2’¯ܫо‚¯ €øÊ¾Þt™Ü÷Ê<Àú ”¯µ*ô©Ûͯîkò9¾î¯í+ªê¿°:'4g¤ °|¢“s€sÚÀÖ§” V8H°r~Q¡üšÁú§WÉM"‘l[VæmìzºV ¯(ì;¸‘pï [âŒOhñÃ౫ÕfÃê°Œep*úƒ<¬d™ÃŽm;,ÛÃÖ°/& [„"„ ¥kµ1±¤ågÅŽ–y›h¹»¢–»ëj9¦—}œj ü‘· ٿ٬`ìÒÖÅ’±¼¥ëÅ–±j,Û\š±c,~XÆÊ| è[Ô±æåË­^—tì›:ê±$ ÈÚ±xìÛDzl!ËÇV˜å¥!Ûv˜[ìˆyb˜+f‹)ɺ˜•ì‹iÉΘV›]Icî˜;¦Žyc¶™L¢nggÊ™C^=Gd™eŸ‘ ™*›É㚃œ‘ D™Sf›Iò™væ G€k¦¡ÉùÁ™}æœYg–™¾¬Š¸gšg €€fŸI€H©,KºÉ™ P+€øçLf'@kÚš¸æ8ËkBDyLP-1.10.4/DyLP/doc/Figures/primalpivcalls.epsu0000644000175200017520000013151011171477034017762 0ustar coincoin%!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/primpivcalls.epsu %%Creator: IslandDraw for lou %%CreationDate: Sat Sep 10 14:28:31 2005 %%Pages: 1 %%BoundingBox: 81 552 528 727 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 559 219 1 438 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000060001c00000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000020002200000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000020002200000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000003eee077be79b800000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000000000062440221084c400000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000006004264022101c8400000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000600422802210648400000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000c004628022108c8400000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000c003b10073b877ce00000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000001800001000000000000000000000300000206000200 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000018000071f8000000000000000000100000602000200 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000300000c000000000000000000000100000202b00000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000003000000000000000000000000001f7701e2e246e6ee % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000006000000000000000000000000003122031312873244 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000006000000000000000000000000c02132020213c21268 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000e000000000000000000000001c02114020212421228 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000c000000000000000000000003802314031212623230 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000000c000000000000000000000007001d8801e73f73e710 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000001800000000000000000000000e000008000000020000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000001800000000000000000000001c000038fc0000020000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000030000000000000000000000038000060000000070000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000030000000000000000000000070000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000600000000000000000000000e0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000600000000000000000000001c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000c0000000000000000000000380000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000c0000000000000000000000700000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000001c0000000100000600000000e00000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000180000000100000200004001c00000006200300010000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000180000000000000200004003800000002200100230000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000003000006efb3763c27884f007000000002000100210000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000003000007341199422cd8c400e00000373e67df1e7973be % e39f0000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000060040021411110e28484401ffffc039e2223133218917 % 37c80000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000060060021411113228484401ffffc010c2222121210992 % 14080000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000c00c0023411114628c8c401c0000010c22221212108a2 % 14080000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000c01c003ee3bbbbb77876700e0000011c62223232108a2 % 36480000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000001801800200000000000000007000001f3b771d9e3b9c43 % e39c0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000001803000200000000000000003800001000000000000042 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000003807000700000000000000001c000010000000000001c2 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000003006000000000000000000000e00003800000000000307 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000300e000000000000000000000700000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000600c000000000000000000000380000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000060180000000000000000000001c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000c0380000000000000000000000e0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000c030000000000000000000000070000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000018060000000000000000000000038000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000180e000000000000000000000001c00000c000400000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000300c000000000000000000000000e000004008c00000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000301c0000000000000000000000007000004008400000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000070180000000000000000000000003801e7c79e5cefb9c7c % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000060300000000000000000000000001c031c4cc86245cfe20 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000060700000000000000000000000000c02084848426486020 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000c0600000000000000000000000000002084848422886020 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000c0c0000000000000000000000000000318c8c842288f220 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000181c00000000000000000000000000001e7678ee710f9c70 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000181800000000000000000000000000000000000001080000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000303800000000000000000000000000000000000007080000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000030300000000000000000000000000000000000000c1c0000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000606000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000060e000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000e0c000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000c18000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000c38000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000001830000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000001870000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000003060000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000030c0000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000061c0000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000006180000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000c300000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000c700000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000001c600000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000018e000000000001000000003010000000000000000000007e0 % 003e010000f00000e800006000000000000000000000007c000003e2000001 % 000000000000000000000000000018c00000000000100000000121000020000000000000000230 % 00110100010800411800002000000000000000000004008400000112000101 % 000000000000000000000000000031800000000000000000000120000020000000000000000208 % 00110000020800420800002000000000000000000004008200000110000101 % 0000000000000000000000000000338000000006efb3766ec2117b1e21780000000035e3cdc247 % 9f11fb37620484f205e6e3e1a000000006e7de6ec3cf38e0f1b8e11677f3c0 % 000000000000000000000000000063000000000734119933263121336320000000004b142623cc % c81e411992058c4202131622400000000732333326647c3d08c5f1e2239901 % 000000000000000000000000000066000000e0021411112222112121212007ffff007600e42248 % 481041111204844200721423a03ffff8021221222424400238850102350901 % 0000000000000000000000000000ce000003c0021411112222112121212007ffff000e03242208 % 48104111120c844205921420600000000212212224244082c8850102150901 % 0000000000000000000000000000cc000007800234111122223121232320000000004714642708 % c818411111088c410a3214622000000002322322246464c518859182191900 % 00000000000000000000000000019c00001e0003ee3bbbf771dbbb9e1db80000000079e3be7707 % 9c38e3bbb8f07670f1df3bb3c000000003e71e7773c738f8edcee38708f1c1 % 000000000000000000000000000198000078000200000000000000000000000000000000000000 % 00000000000000000000000000000000020000000000000000000000000001 % 0000000000000000000000000003b00000f0000200000000000000000000000000000000000000 % 00000000000000000000000000000000020000000000000000000000000001 % 0000000000000000000000000003700003c0000700000000000000000000000000000000000000 % 00000000000000000000000000000000070000000000000000000000000001 % 000000000000000000000000000360000f00000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000006c0001e00000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000007c0007800000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000d8001e000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000f8003c000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000001b000f0000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000001e003c0000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000003e00780000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000003c01e00000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000007807800000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000780f000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000703c000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000f0f0000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000e1e0000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000001c780000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 03000000040000180100000001de00000000000060000600000002000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 01000000040000080100004003bc00000000000020000200000002000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 01000000000000080000004003f000000000000020000200060000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 1f3b81b9fcdd8789bb3bbcf007c0000000000003eee03e3839c6e66e0000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 311101cc84664849cd11664007ffffffffffe0062440627c47e312310000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 21190084844441c8851a424007ffffffffffe00426404240460212210000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 210a008484444648850a424007f0000000000004228042403a0212210000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 230a008c844448c88d0c464003fe00000000000462804664432212210000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 1d8400f9ceeee77cfb843c7003ff800000000003b1003b387dc73f738000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00040080000000008000000001fbf0000000000001000000460000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 001c7e80000000008000000001fc7c0000000000071f8000c60000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 003001c000000001c000000001fe1f80000000000c000000780000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000ff83e00000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000fdc0fc0000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000007ee01f0000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000007f7007e000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000007fbc00f800000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000003f8e003f00000060000600000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000003ec70007c0000020000200000000000200000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000001fe38001f8000020000200060000000200000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000001ff1e0003e0003eee03e3839c6e3c42780000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000fb870000fc0062440627c47e3166c6200000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000fdc380001e00426404240460214242200000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000fcc1c00004004228042403a0214242200000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000007e60f0000000462804664432214646200000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000007f70380000003b1003b387dc73bc3b380000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000003f381c000000001000000460000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000003d9c0e0000000071f8000c60000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000003fce0780000000c000000780000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000001ec601c00000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000001fe300e00000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000f6380700000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000fb1c03c0000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000007b8e00e0000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000007d870070000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000006cc300380000600000060c0000040000100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000003ee1801e000020000002044000040000100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000003661c007000020000002044000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000001f70e0038003eee03c3e7cf3cdcddfee300000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000001b307001c00624404262c4466e64891f100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000001f983800e00426400e4284442424d110100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000d9c1800000422803242844424245110100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000dcc0c000004628046468c4464646119100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000006c60e000003b1003b3b7673c7ce238e100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000006e70700000001000000000004000000100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000036303800000071f8000000004000000500000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000037381c000000c00000000000e000000e00000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000033180c0000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000001b8c060000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000198e070000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000dc6038000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000cc301c000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000ee380e000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000661806000060006000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000671c03000020002020000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000330c03800020002020000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000338601c003eee02e7bef1b80000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000198700e00624403321108c40000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000019c300600426402121038840000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000018c1800004228021210c8840000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000ce1c0000462802321118840000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000c60c00003b1003e3b8edce0000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000670e0000001000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000630600000071f8000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000007383000000c000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000031838000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000031c18000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000018c0c000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000018e0e000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000c606000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000c707000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000c303000060000020000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000006381800020000020001000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000006181c00020000000001000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000031c0c003eee06e677f3c00000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000030c0600624407322399000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000038e0400426402123509000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000001860000422802121509000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000001870000462802321919000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000c300003b1003e708f1c00000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000c38000001002000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000006180000071fa000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000061c00000c007000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000060c000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000030e000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000306000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000187000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000183000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000001c3800000100000600000600000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000c1800000100000200000200400000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000c1c00000000000200000200400000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000060c006efb3763c2426e3e78f70000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000060e007341199422c67362844f8000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000003060021411110e24221421c480000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000030000214111132242214264480000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000003000023411114624623468c4c8000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000180003ee3bbbbb73b3e3b76770000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000018000200000000000200000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000000c000200000000000200000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000000c000700000000000700000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000000e000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000006000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000006000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000003000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000003000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000001800000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000001800000000000030000000000000000080000180000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000001800000000000010020000000000000080000080000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000c000000000000100200000000000000000000ac000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000c006e34e21371f3c7b800000000373f8f1cee90000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000006007349f6339b14227c00000000399098be2ca0000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000600217502110a10e24001ffffc01090902010f0000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000210d02110a13224000000000109090203890000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000234592311a34626400000000119098b24c98000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000003e78e1d9f1dbb3b8000000001f39cf1cefdc000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000200000010000000000000000100000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000200000010000000000000000100000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000700000038000000000000000380000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 55 53.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1444 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_primalpivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 78.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primalupdate) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 26.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_ftran) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 68.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_btran) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 58.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_degenout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 53.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_degenin) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 73.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_pivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 63.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_addtopivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 46.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primmultiout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 105.617 46.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (scanForPrimOutCands) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 154.489 46.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (promoteSanePivot) s savemat setmatrix n 98.117 45.141 m 103.12 45.141 l gsave 0 0 0 0.176 0 B grestore n 146.99 45 m 151.99 45 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 100.617 83.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pricexk) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 83.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pseupdate) s savemat setmatrix n 93.117 82.5 m 98.117 82.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 73.1174 33.5601] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primalout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 99.3474 38.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (cdothyper) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 99.3474 33.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pdirdothyper) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 99.3474 28.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_chkpiv) s savemat setmatrix n 96.847 27.5 m 91.847 32.5 l gsave 0 0 0 0.176 0 B grestore n 91.847 32.5 m 96.847 32.5 l gsave 0 0 0 0.176 0 B grestore n 91.847 32.5 m 96.847 37.5 l gsave 0 0 0 0.176 0 B grestore n 70 25 m 57.5 52.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 82.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 77.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 72.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 67.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 62.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 57.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 52.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 45 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 32.5 l gsave 0 0 0 0.176 0 B grestore userdict /#copies 1 put grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore DyLP-1.10.4/DyLP/doc/Figures/primalcalls.drw0000644000175200017520000005436311171477034017075 0ustar coincoinª» €~'€ ˆÈ sÇH6eb P%Ì™2SÒè)ƒBFŒ.r°q#‡ )XL3›0y˜¤³ðˆœ7uà´|s!•2xX ‘SgM’P)"¥0\À`á%Š0`¤™c† 2p°¸aÃE ®,b(E:6éR±KͲð£€Ç1j|ð ò ;aؤ9ãF.“"F¨€È»·/ŒQAÐ #F.)uŸH¡’䉓 L@ˆ•DI¹f;—lÌØ:lÒ‘Û"ˆÓ©Ë¬æĘ9rQyófM›0nRØ6#·M2iê´4ˆÎEˆ99fÛlää.âä“$S?éæL‡e侫€Lž/pä¤ùÍN;oè´¥ƒ“Î:r”F_”á>(’.Á$“7å¤O>%QF‘µTSy<ÕT,TuUVaÁ`• `¡¥áŠ*ªÅ–[pÉE—]xéÅ—_€ F؇)ÕÙb¤=Ùd•]–Ùf¢ÁšžÁAši¨©Æšk°II[g·å¶[o¿7\qÇ%·Üf4ÇtÏ uÖa§(pçxâ@žyè©£ñ•ñtÌGyì×ßXà .¡NþÔPE¥‡JR 2œH"T'¦XÖ¨g‘ºV[ëÉX×];öW`ƒÙhb?2ædPHF™e˜iægM.™ØhrAÛl­½¥lrÕ–%œ[úœpd‚‰œrÌ9‡æšaTwÝÙm×ÝwážéÉž{_€+‡}v¨†¡9!* "¨ HNØ“¤Vº"¦PiV§#jW‰š–©-Žõbªs­Zca8ÂÚª\´*f+BæJ$¯Gþš¤°I>Y%³<$»òlÎâ-oÒzY-Æ];f™Ú¦É­·nŠ;g¹vž{^º0®ûe<äLúñÀ_½Þ»¨¾Žöço…“bhéX¸)Â7Ô"Ã(Ú–©jE¼ÔÄ1VLãÆ<¼ª£¬3 ä­Cîj¤¯À~v&“Ä–öò”ÊÛ,–2ëFs—Ô‡s˜Ø’i&šÑM×m›î Mnw^Ò ²Ûíc ±½þU­h¾ŠÔ`M ½ÁFz¹AÑNÿZHi†fá UØמ†t¨ôßS_¹`6T28pôfçpƒó Ö~{î»Gê»× ÏÔ@œ=oŸüJÌ_ÿ< ÔO/=ôØ/ˆþöÇwß{×?<ù™:_ú§<–Ä yï‹§÷M%{³{P¿xǵ€l4U<¥tå+js‹L·¸ÈUx«[Žb…±%fo Õ®ŠÔ+$kpÃrR±×2*- fŒÓÒã¦õ¥Éé,[gJSæØô­pÁINŸ3WyD§®Ò-­rCXg¯×1j_ ¢‰µFA€ýîkÊ ØÂØ€S,ð W¶¢¶‘Uq› [h7ò¨c0 Ù I¸“á0e;ü!âx3!r‰ˆ7Ë™˜ˆ95ih{â¸è$Et.UíyOÈ@:üé>òâ¢ëðõŬI¨Œßë¢A6ºŽ9 ×ö°^òrE%TÕÜRØGºòc‚Ùßl(¸Ð4IeŠìaâ¬ÔÈ™=Òf’“dåx–Äm]’sNŒÓ&‰º<‘.”íʼR)µC­òj±ƒ½Ç¿ ¦‘–k< Gn0ÄQ—tT‹}Ì^ŒGÅLá1ƒ$CeÖÐd7tfáŒe%—E³šŽ»fä¬5IËõl‰›kâ›Ä94ÐÍœ 4êR·ºvR-Q¬Äšìĸûá.[3#øü7>|}ê+ ó¬Bøˆa#ÊzT³ºËi,í)>â 0¨ì; QǤp©\EªRžzӨ²žh¬ª:Àõ-O« «WcVæÀ©\Pm2ÏýY=-ßE„­Ü !dÛXDXP=ÔU+4¦ÞÙP¿=4pJ:ä3©8i22ˆÖ¬ÙFØQnVògà)9Y´)¢tO슠r§J˜ÂŒ¤ç_¶VqJ—$:ìëË&t,ÝÚÂ…òMd–-fQ¶YÃEÓ¢Åh´ WDmîìrJ´$ƒ¦É’v’Šç”ípÒÒ©µÎ¶°cCèð“³î–§V]ÐÞ€<˜ÈKQdrÀ¤ÞÀ©"ðS83–õüêkÏÈ[Ÿ‚ˆ°Ÿ:àp)ÐÅÞ‘t]nd:Y†ö†Ò5¤DuhÝÎb—š Í¨h»K¹ï~T¼!%/I£ØZOVîZgæåÒ÷Z-¾®„”_)|©Þn0alü`@!öaŠ)—˜#nn‰Ÿ;ÈeB´™„c1EYöb–iwˆØäè6ÁëÍñfrǬ-'ÒRº´¦jµ=r+#üJÝ2y–‚5†f‘ ‹Ð¸.B®0÷ˆÐ,ÿqË1<1!™™ÙCÓÅ>ÌnŒ· ÉlÖ˜’áE­H=ç“ζlà‡0È¡ sȳ±¦WšÊ³ÏKÞ) øä² R&n=LPE‡Ë#ñ )+i/OW³åa™h›Æq:ͤ]óE­ãÕ’ÓÔŸDõæp‡0Àa=±.rcÏÜæZ–÷ ô…9È›ÃT.6ˆ¯ÌGGÏ ÒÉŒn!#æKW4Ó0®¶#gÉO{´›>ûæ¨ËËc9‡›=t¸ƒ€Ö‡¬GÖìÆ­„u ïÀò:Dô~£¡[*}[Ùb"N¶–—mbè¢xà`ΡÁÉŒp3oÍ£õ.¨Ûœã7{Û¤®=µÒà£êã¥!jî]÷mkí ¾âzºŽ÷É]oÄâÛ—Œ56¿-óGÓœËM1ÁuÎÙƒOÓç -w~ćŸVâÝ'Ò}|Nv9ÿ¸ºß‰d>+ë%ϯü(ƒ®¯¼¸Ä>î¾aŽì»Í¼V5ïòeU\ð¶óüíÔ~–Œçî麛6Ôx7ºÞÏûÚ¥“ÛÜèùÔE2ßúú9ëjµ°~ùkÊ:ü7À .pF¸:X¯ >ƒs@|ã—-¯3­ú­Or{š¼–\¯×ùDO~˜ý.û¿Ïi›OúË•î|‹ÝþÙ¸¾Ój¶1ÄAŠÉpõJOÊ 3ä!ðp!{…7}R…V&o›BW.P6õ†6SvU–G”~–gv˜‡vGiÔm×Õs¡gm@Gc¦Çfçfö·z=†^tö§ÃR¸gh_¦uµôU h65*ÂÖa-'y/~dWãwå§yj—sˆ´~Ÿ×~¢wmAçp§Gtõ§Z(hq?Æ.ªx÷Ñj¯–nQGx0X{x_J‘{(ûÕ_¾` F`1` X&`nè>õæ@çô5†3h†'§iØ{¿×†Cuƒ¿6‡Á‡@¿F=ye?zh{ïFUÿ£{hÈ{þņtˆ6 9€É'9?¦)ޏ‡2ˆ{“x†€h‰k|2±‰cщcEˆ¡(=eó`¥‰ˆ'‰×·F«¨†ƒ˜‰°¸²(´?bEŠ´÷ˆ|ˆŠ½Xé‹…9–Kñ“ˆ©@1”j‰“w¬(–#9™e й˜îÖ‘xr5ù3p!roÜ׃Þ÷ƒŒYâ—7äp7§Ð&fÒæ‹ã~N(‚¥E‚ô—Z¤ömIwq "[ô!/(S1¨™§YK©I«Ù€Î3ÏÃr_w*ß7›#„¶I„¸y~Ïfiž‡,¾y%À‚t7œÛ–z'h^)ØzË)ôÏO{þ8kt׳š3p0 Ó‰¬ùšÝÙX„~4„“yi‡séÇvJ¨ž ÷›M螥Ÿó‡cSxœ{§‚âÖ‚ª³Ÿ"wuF  S×É)Z Êa÷ž:žй‰~È›˜¡ì¹¡%œÚö¡Ü¦zôi…çdo ë51Ábsc€¢öc;e¥?¦9˜` TÄ>ü´€5y0×S6jÿr¦œ’¦À¦‘¥¹¢MF‰.š …¶K Z£²y£*T›.Dž•Õ£ç©~c†¡L‚EúžGzw&H…K nW˜j«¶…®kZ}´3§RÉ¢¾E=Úš7l°)1b× ´)žº£E8¡º‰žºHõs‹Ú¡Šz*¢ø§œèÄœy‘©ÚÓ¥vé˜I{m%T3ÌgWIeqåO”¹¥På¥tZ†ÉVXµ<É:|ÌJ’[Õ­?ÅÒ ¦xÙ™"¹­ËZŽ©`ÎÊT³˜™ùŸäÊ™üÃ=¬¼oø¸0àO€[<-¬;tÀ]+Ã4¬²6,\ÛºM »; ÄXìÃB|ÀG,¹H|ÂK ÃHáćÅ6pÃÖÛ»áOƘÅn,Å=«ÆÍ ¸Ù“Ä/ÜÄ3\ÆÂsÆplÀ«½oìÆøÛ¼¹±1PÇ`ÌÄgAÆ5ÌÇB,´]µ0ÈXŒ¿/ÊA˶ bÇaÜÄ1€"j›ØÇ(¦,µ”\É\›Ã ‹È.ÜÉ1üÉz¢`\{Ê[Ê©üÃÊKÅŒš,œ¬Èc,Ë¡üɶŒ²¸ÌW¼Ë<<ÈØËÆ®¬ÄÄ| LËÈLÊˬËÎüÌiüÇ_üÊÕ¾³\ËÚ¼¦èÜÌÎüÈN¹ü üÈràBs0iPxàjIJ,Б+\ QqÐÐ ½Ð ÝÐýÐ*{EpÐ5€t…Ðɪ²4€ÐYQÄ ýÑ}Ðü+Ò& %œaT ]Ä%]Ñð?+=Ó.ûÒ008]Ó3ÑMWm”ÐÍÑÐ2]ÔHýÐ9kÏø¬ÏüìÏNгGÔV}ÕXMÑÕ\ÝÕ]Õ^Öa Öb­Ô!ÁÔù¼Ïý,ÿÜxSMÐ `r=×t]×v}×x×z½×v]Ð|ý׀؂-×~=؆}؃]؈mØK}ÏiýÔlÕnݲT×7`—Ù‹=ך­Ù›ÍÙ˜Ú7 Ø‹ÝÙ¡ýÙrmÚ—}פÍתک-Ú§ Ø­ Ú¦ÚÝÔj Õ"Õ” ײíÙvýÚyMÜÃÜz­ÚµÛ·×Æ]×Ï}ÜÍ]×ÝÐÜwmÝt­ÝÈ}ÙËÍÜ²ÝØ}×¹ýØkÝÖýÛÕ=ËìÚìÝÞŸýÞ³üÝ‚-ßêÞö×ôÝùßýMÛqÍßòÛgíØN}Þ’ÞaQÙAÐàÞà áþà®}~1@á.á®á Žá^Íáîá!Žá#nâ ;â â+Îâ½â/®}1nâ.žâ"Žâ,>â%^ãÎã8îá@^å}༾½àp½â5ùä5@#åPîäQ~åRîáT~å>®XŽåSþå5iåTæ[NæX>ãZ.æ;®álžå¾åcŽârÞårÞæþæfþåG¾Û‘ÝÛ“Íäj®áE>å/{è/Kã)n舞è^Ð…®åîènäŒÞè9^ãƒNá“Néyné’>é™âvÞéŠþâ—Žè}ÙèýÖ °œ2ÓœÁ´Në±ë8ÀÑ»¾ë"MÒ0ýë(Ýë¼.ëÆë]ë·~뵞ëÆNìÄ.ì$ ìÀ^ìÄîì³®ìœQÑÚ?ØníDMíÁ.îà¾ëØÞí¶Žî~ìÏîÒ>îÂ^î«Žà€®à]ÐC0ù¾ïúÞïüîïÏïû.ððOð_ðø^ððßð ðÿðñ?ñ ñ¯ñð/ñÿï¿ïóžäK~ï€xC ò,Bûò.Ïî±ÎÐØîò6ÿò+Ÿó,¿ÚEp` -×C0×»ïú¬ÿúÀÿûÂ2=ü¾¿úÈüʯú³?×´û³?Ú[­ÐºÏûF°üƯúšŸà®®üý2ÐéE%<ä_þæoTþ|@ìßþîÏxê/-þç_ÿä/þñoï¿ÿð¯þâ/ôö¯þá¿øÇÿø_þ£õž¿¨þ àþÛ~õ®û9À H+ ¤€îjÀ ÈÝ_ì€ 0:À(/ t{ö®²½¶ˆÜ |Ý-z75› ”8°æ@#PÝZàBÓ@pêÀ±×@„ ¼l'ðäU6#˜ l‚Pð FÁ)ø`¤‚S ^A+ˆýÔ‚Zp ‚A0¸Å ,hd šÁ/¸«`Ì‚[ –Á4(ß L‚oOþ·ºFú ìƒÎmÒµ?ø¡|ûn„ÐÂ÷†×! pŒµG¸á›]s„D βFè¿›}[m—’·§ÛX÷ã|,®pÂDˆ×Rá*$„­PƸPÈ ïš+¼k˜0š8ý6 k¡]»…´ÚB÷ ÿàw†|PÚ5<˜á2¤kE JÃh¨ 9^Ø0bÃj(á¾Û4œ†Ü0Â]Cm˜ ÃaÃâ…ßPšCUx×Èa9†»ð®¥Ãhx ‰a;t‡B¯1Ãîçâö_ª;týðýýCO÷àH`ûˆpŽÂñ?„= `ˆDΆ:Lâ£Sâ¯!ĉ¨êH¡y3yy°ÉUD÷7â,ŸFdSîÝu¹…èáLâH܈qN%¾Dö—øœK$t1&Š»“x@ºÜMTˆ9‘Ó½»}ÈùJâBƒˆŽ¡!E G—âƒSŠ ¶Ä…V\FœŠ Í)ÚÄ£x¯bRäŠq®ÓEAçýâŸø£yûïv:´øþòßü[‹ ÍšE¸¨Ðä¢ÿëtDÐ.‚¿³Óâ\œt Í ²?µûâû‹(¯¸!À#c´ŠÑÃ9FÇ%ábœŒ±þEF ‡3ãùÛŒLuÆÊh×.#f$uÍ4NFhþ@ãƒëŒCÀþ!Æ%®Ÿm¬¸ñ6êFܘ{ãnü¾17Gàèׂ#p4ŽÈq8úFåÈqcqÜÉ1:2ÇæHƒcE«ŽØ±6ÇÙØä`@ðŽà‘ð¾T¿£y´|–/žÇó8ÿУ¸#ë1<ºÇ_§Ë£|wíñ=²8ûxÅ£´«ñÑ?âG/·ããwô‘ÅqG"XîšýkhŽ*~E…VÑ"äB{ÒÝeE¬¨ÐÄRC&4£"õUT ²CŠH„6â$ f0òë1£B#cãŒ,*_/GÂÈ#Y£‘7Hº4™#‰$ŒœB²¨ØH!i$¿$’?2HJÉ'#›d’¤‘øîJZI*™#£ä•¼‘\˜YI)‰–䌬n=ÒI6I/I&™J˜¼.R9I'‚#œ“x’Nv·<™'1a¬“¯íOâÉ‚† ù¤žTm†rNúÉD(%&,h‰2"JA)¥ l”‚²PRJ¿6) ¥¥ä“¯ÍE¾n×øÜݨ¼u¥Ú}»dg÷Re±+zУU¾;Çw*•]~v²VÞ½Y‰ù Ÿ¬¹ÒW’J^ íD¥_¼‹“ÎþéÅï‡ÏÿKv±Ñ)Ëc¹;Ý´l‹ñï-&Ëú·,%X³4ÝòáEÉ-©%³´–õÏE>ù¶.åZ»4ï2ÖÃxø ía½¤—uí]–8{™/ù%]‹—þ’]ÊÂuH0G! @kH®í)A¸ö 1aÃt„3FLBø %Ä´oc^Lù–19f'¤Sb†LŠ92ÿàÄ4™öÍbŠL¹2ß&T—Ä0ÊL# ¦‰›™3Ófr8¿†3i¦Î”p=3þLq4÷%¾ü—,.hÂË€é.c&Í|š5s`ÂC§4ߥ‹$‘#²%â=¬É"µœLœ|Ó/k&Å­É!»¦Nv\S«•D²9!ŦP܉eó ùD¶Iá$äÛv.Òþå?½ÿø¦úó›àÏþAË¿Yÿöfá웇“pž?·H.'âtœŠÓüNÈ8`YŒœåorJÎøw5ãfTH›ŸÓszGÑéÁbÝ4OunÅ Ù6ÚC$°³uÊÍØífêd§S¡¹ÈœÆ;uc켓àáI<1šˆÇ3yšˆå™¬f@ódž0 y"Ïé9<«'ñž¾ßaOP<‹çô”žBz6Ïçù<Á'õìžÃs{þNßÉ; ¥õ¬žßó{ŠOA>—§ù<žïóz²Oß¹?ƒgþ$~ ~*Ïúé<ççý¤+è“Ë÷ç<hý„xÿ9P AïÚ³Tô ¹&A3èjÚ r­ƒfÐõ6à,èþó ´„Ú5:A+æ,¬k,”‚‚P#à"m€ ½¡84‡Ú€ÀC{¨ý¡9@‡ Ñ D‹h¢mˆQ#:D•è¢MTˆ¢Á'úC£¨¥¢UÔŠâP#:E¡¨%¢X´‡îNZI\–¥E`¤Ñ5*´¤Þ+£pÔŒªÑ9ºFݨµƒtq޲Q6!#d•£{TÚQUùGi¤¤£s´‚»Bú†éDS¤„ôŒº,G:„Þ åhŒ‘ÖQÇç"Aá\# MFýš&ëÎá lX -ÂyÒ·Ò.‚8”kD aí˃ÆáV‡ûh®TÂXÊá䞉+©ÅñR WF#œÑ¼l&΢YÃ]JL£B.¥M•ÒÒW KOkXž^–8…fJ!)•uÙT®1´¼ ¾ã‘ÞÈ€ïå`@ GLÊå´ À²<ˆ_mÄ:e…ÊÛF»~*¯6î:sªÓ¾ž%%¨ ä£uÊN¿ã;§rhÐÓ¬PXðé;->./YõS#ðOHA¨&B§¡S‚ZÑÚéB]§EÌ¡ÂÓ‹&¾æ)ËÒ§ö´ ÊOuGõ£âFç©S¯J5©4žªÔzÚR%j>%ªu¦2ŸPo* õˆ só‘E¼«jk¼kV5«â^¨U­*Uíªð«ž?Ö˜UÅ*XýŒX¬’UògVÏjù•°2®:»*Wëê·»«0`ÝáÕXGW÷ª]ý«xU¯²»¾ X «_õ«ßí°Vc—7FÃhð4²†¿w6Y#«c½¬Õ±VÖÊ*Y%kfý¬˜5Ì¿Í OIkø ­ õ±šÖ—eZS+juY¦5ÙuÖÓêZSëj­ð´¶†VÜJY;+¤Ó­Ÿõ¶¶ÖÐ 3o&>š FÍ£)0M\AS®Èµ@W¦¹4«;4šËô^RÍãJ]Sátu®/iZWrh5¡ªŸ“ª(Ï»rW7‹€zu‡©°½ÊKð]9œ|MšëÕ¾ÎÃ÷J±«„»¯ãUÆ×ýŠ_á«,°ÛÕÀ²×yX\,yeqE DØ ø«€íqvÂÎ×úú_%¬‡°6ªÇ +aC,6ô¯ŽÄ‚Øû`qœŠ5±Ëug*[aYì…u±VºÈüç ëCã±ÒÇ.4ÆÙcÏßEÖüYõ§’²H6ÈY(Ëd¥¬ù#‚@¶C YÝi^Maä|Y6¡¥Heµì”UhDÖÊ–¿% þ’욥²möDŽY“VfÅì–Mha¡ ΰIf«¬™}²\ö`¸óz ÉbåS³äïÇÚ=7›h­¶ûwö¥u;F+<ZÜ“³‘Ö¤-ZD[ií²û³åËnZPÛh-Â$´_ÖÐêÊÁG,y$…£ðÕf4)ö ãkµ½NÖ–Vÿ'kƒ¥³SwÍUæÚBkÿ¨¯ew·–ÚUHÌGlÍb¯w.Ò:IÛ~ö@kTx£ÛsM´mÛ@‚ã×ã¨àÖ†4Jnáéçöܾ:kûíh·=0ðÖ8âÔykp*G¸·´ìLÛi+ë@«LöýSÛÂn{`vã·Ýª÷ŒÛ…ËZÓ-ºå ¡VV4woãío¤·ôßâÛÝyq-‚Ç] ¿åãG+)\gkšô‘¿Ò}\»rËÈ=¹%w³žÜ‚ëCnÈMv6×"¼\#s=ëšì¸9·åZ„çØI.nå­37Ú¾;þgùøácºxÏé¾;Á¨˜¢îþ{ºû¯é^Ý¥»ÿ*šÕ}X÷ýi]°ËuÅ.Þ£º7MÜA]iÇÿ®&¬2ÀÄݹkh@ݽ»v—îÒ]»Ëwë®ú»rïí²ÓÀ x d^kzWîâÝÅ›xãnß廀·ð¾ÝÈx ¯âÕ»~íñÞÝÆ»x!/á­¼“÷óÊ!ËËy5¯!E¼—Wñš^Ê;zC/åu‘3à -¬{c/ÿ õ¶Þ²ÑZ{£VÔ’½, +¼‘ÜKGñZí½òƒÊÞÛwçíîµ ½Wø_ß;|qjñ½kÇ—ùf_ßëלïå½CLúFßßK|Óh^Û¾´wùúÞÜÖhò¿Á÷÷Žßêk¾¯>ì²ôòÃÇû¯ÿý¿¸ËàL€ pÿ­Š8+`¼€ p'ý„8Kà L]h¾À8G`ª;°žÀø_à«NKpV Y!«SXi‚M0þkÁYïÁ`Š‚a0 VÁ)øãàÇ÷kgðÿC‘;â"½ ¬ƒ[° ÞÁ5O=«G„Óß Î|ø$6CÛâ„@°ÂXØ»^á-l…Õ#æÂZø waYÈ…ÁpÒ,Ãcljá+†Ë°FÃTXº¢á«†ÑpþÂoX oØ9œ‡Íð͜à ¶Ã’Xõ(ä8\ŽÕ°=®wÃ{ˆé°!VÄîÅ&b7aq¾q†X9JÌ^ñ|ÅÄN?b ×99ñ(Îs“obU|Š "\Å.ÇbX¼ádq-¯ øÄ™â‰[\/Æs®˜ïb]ÌŠ%Ü]‘ÍBfH©"™q‰äuëYiÜ !$5¶¤Î¸¿Jmí–ñ6³àŽA*cpœÚîLjs«¥ã†iÏlW[ÇVm­vZ¯ѱåkëø£cjlÕÆqQÇüx—㬶lòUóÇïøŽòÙ¬†9…¤v´îAdHJUÃ1м¤5ðMd7Z‘726.v#—»Ž,’õåÛÈ}ôþ ÚR˜fÍiÈl¦‚Rx:“e@P§5à&®º‹üŽr (ïÒ"J/Û>•».¯˜Q¥\FgêwtʇW‚R©lÑŠÀ]ÉÉw%n"­üº^W>·rM†åtýȲwl¿gy¢m¢™º–c@M®É'ëdUXFóa]6BY(å¡l”]RV£KÙŒBe¨L•©²Ü³Ê‡9T4­=À¹l32Ç]Ž:™‘Ê (Ë—9-kæNú:óaÉžÙ3#Üp[wõ­i®Hùï4ŸfÒŒp‹kî̃ü…f×<šGsEºÍ¦95ãæÛÌš9êk~ÍŒs6…Ú nwsnŽª™7g`&œAóoþ B¯7gÔŒœ§soÆ¢²öãE*k2³}µ ò;Fê#im²ÞxÐ:A+´ ˜D!ôƒ¾Ð]Ù´Á^à+{Ù¯‡Æ¸ºwrèãû¡K4Nm¯Ç÷øv_ý¡ÛëˆîÐ :Fû¼y˜¢aô‡^Ñ×E×èØË¢A4Š~Ñ=úFÏX½£e´Œn¯õ¡Á¶%]ך,“~Ò×/÷IB(}Øš`ÛoTº“"7¥™ »ô.U{`:ré/í¥·ô3mÏj>M/]¦Á´ì ”j:²é/m¦átÏ$”dšN»ið¦ÙÆôœ®Ó[:Nçi/ )÷´˜Ôs:šé,ß”k¡œ‡ŸÐQßIH2é+>|Ôé0R_êI©í›rU™„°½jjwˆ©¿á¨&‡rHwêF½©!’Î*Aw\v×XH€ Üc­D®ÞÕI„øj]Í«µÓ ÖÀÚyÈ€€¬yõAe àW?¥pÑšµX(£‡L$Hk±À`V´&ÖÑã€Ä®o½«£‡½aÖÚ\»uÚ¿Òõ®¶ _!+Ik«à¸†Ö‚¨nàéÜj0¸ehE€RL¤…¹ÒøÈaf])þr«“à" tL$샭°ÓÀt " ½ &ö¸Ñ"pà ˜±76Òâ AÌ/À_H¶xHë\ „vÁ°DP.f/·åÅÍF,¨< %‡WÅ M3æ€ADC *\ÀT† þûW"”)-‚y#¦L‹.`€(rÑÈÇ J” ’†›2:@¼ ÓÎ 2jÔˆqF2cÞÔLYbˆœ2a輑3É6aÜ!"'Ìf–‚`ó¦Q£Hé¤yã†HR˜ ¦$M[ˆ"cÐÐQ] dÀ€Qƒ(”0gỂƒ¨®RÓ¸9sOÌ3@Й†\6pÐ Jä͘:mʸ¡ã¤L2§¥î*gŒà˜(ÎJMÁÙ3hÑt¦Ô‡MšÔ«ë´~ "6Ñdh«,"uˆÐУç(˜ÆN™d¾Ì±ó…£eðŒAµ êÌ)#‡Lš1td:…*•ªU"ïãÏØ[>ùÝ tt†b ÀQè½ †y ì!†bd”W†}¡„ç½PDƒáWá‚*ð‚F4h„Yö¡y"6Qâm„±Æ„dѱbˆ/HñDƒr¼AÇY7f8Å Î1F/)â/®GGŠ6Èâ SQdtœQUJ¾@… ÒQ•O)%ŽbÀÑ ß±q•gˆÑešbܱf›W9©e\ž™á ~&‡uJu9rµI¡Ñ剾q"ltyÆ•Yni© j)˜RGY:G§ÔY×%¢{øæ–oœª¦ª–¡ÆŠjçNÆzÇOt8꧈m4ØÆ„¶úë n4¸êŒöÚ¥x4ø#aØ%§{È1l±×¢*G¬… §˜ŽWrt9*®h¼q‡ºd`JFsø b†s¨¹µ"iK,«ê®+èQ£ÁAëh¾áV ´¡.EŠùÆŒJªT`RÇÉásÐQ‡ qQDl8ƒ &`1iàQsÈÞÅtd¼ñ?•!"APa„EDH"1¸2Æìm̲Ë0Ë,GÃmˆH_Äß<û ´Ð"‰”õÏAƒÐuJM5vŠ<É ]Í6ØòË ìJF¯f ¨ÍvÊGל´ÜLƒ€Fiœ‚/Lý…Ž£ Â×[÷gào7wmÔÍ+yó9y”‡íÞånÃ=8ç†#®8㥖auÃIÉÑrÙ3)<»Õ¶S;e³»×~;‹D%p$ãà†mrL‡ÁŠÅÇ^OgÅT 4‹†b¼‡ˆnŒ=ÂÓ/å|2-?0nãÇX|,–ßž*>óηߠ à Úãž÷¶ò†0D¨ qàß æ–®½å-}P`øÚÁ¤Á /[”„…[ °uÀŽQkyAâCjÑ!üãÝíÖ7R ì¥@ð%è(-Cà߯Ô`h*|Ã?8ŽaɆ<Ö“µ‡¾m„H1!ÇR¸B´Ð‹0ä¡|ø ÆPxÔ¢!MÐQ‡l¢ØæXÄ#FŽ `âÍžˆÆ(ÞKD/kµˆÂ$²Ð…0L€ A ÆEÚ ‡JdƒÉhÆ ‘Žsœ DÂD'®QL3Œc—Ò£À|¡*c E˜'òÌ!Bd¸ ȃ‡˜åA: èádòÊj™‡—äiÛ„xyaž'/ %`Ê †q,OjC$yƒ<’!B8üI.×1Û-¦l ˜C+9¡-ˆsŽ"©:ÉVE5Nê:Ê L3Í B¤Ì2<ÝṪ ÆSg£,¥ì赆SÒ+cûËåwùu“˜¾ 2ÿ9Ïg‚ šÄ&´ÉMP~“Eá§´˜ó*TçØèÎ4¼d£­èQ x¸ZztŸ ô§@c4‡5øqJîé{¾p®¥4•OR«ø¶î)Ñ¢êìe,ËCK[âR—Càe„ÚÐ`b¢Æä_/qˆÀR`„*ü¢ë¨As ËÀÂbU«¥gWC Ö¯vx°21ït=+IëNó¢¶Õ.G»ëͼƪ6é_ç¨R±±ó°Í#¯KáÉVzÎôž6­1?“‹’^'2 þg|/˜Áúþ€IÑ^B“é†Ë…5JÃìœÅì5J€Ñ²f¹‚N·*Ã~ƒË !…m£y¸k®h·º©©•çÇY+~~ Áù6à¹tŸÿ«èÜ2𠄆´¡ùœhFZ¤˜~ ¢å\+ÕqWQ-h-ê–º‘V5öڠȼ1’#៙? dç-òÄ Õuädy6ò(ƦÚì"×£&þ“§>ÅðÖBæ>šZÃXY hO\!ëý4DWÄ’æ'9¨‡<’RÆb¦˜Též«ˆœ4nmY l¨Ãu¸ê)ÑøGÙ*£Íp”8ü»NŸ;8p†š#X ýò Èò :ĬhÜ8È*~qp¼¬"Ùà ýËi9{ÓŠ3µ¨UÄŒæåÐibøuj»h"3*7ð]Ž2îÆ ÅÒÚ‡5(kXÞÜ áŒ}EŒ;Üû.wÕǘ»`;HßxŽ…½Éè«-i³ÛŸ>>ºP¾¯{ÜÿÅ0е“6ßy3WÂyß{ôýîz—ÃKsõç|5Ø%2,r‘@eÙEQV4ðO( ÓüdïÊãx2Y/jýPmií–Úº|q‚ˆ÷!*@nÑ1»•.~2Håvn1¡%[ql""BP'ÿG'yR\Ab€æV/ ø4n²j "/r13.à!).%IZR3)l{‚ž4W#¨‚ˆ‚o£‚,øPà/3l²€žTo7CÇ3eà¾áÍ¢=5x,BÀƒ0(‚?¸Ý41mÑ(Œ´„4ã„'x,xðK{ð[Ör,‡’TsB à\jµ8 †!¢Vw!rxj%s‡  Vl°‡,¢TË¢=}hXJõ‡Ò9ÛÂ*…hˆ"‡ß¢ŒhˆJU‡s‰«¢hX«²O˜8‰[ø‹¢…gßvóv^ñ:ôûdì3l…¡†QâP0‹g "¼¨¡1B)_pyoÑsþ1%ª!ÆXSŒ’ä\Åèue€ŒHÂËH?¾h?ÈRw€_¨1_€v_àaH(\¸³,_%ëØŽ×A†S"ô²ôÈŽ¡\É“û85òè£ëA£Qÿx"R%ñHމüXÌ#xð‹ÑtÌÈ"©t`ñá\øø?F@2Ê£3Uä?n¡!áãuú TE%éyM÷A[ÂH “BË‘¶–D;D\¦4 ?Y#HtkCy EIxÜg”‘µ^•õe=ݨI‰0#R#N`)YŽý–Ä¥•ähŽ‚‘ŽRÁ‚‘G\ñn&ÓˆŽêèmy“M‡2%•[‰yÌaŒ1‰YA‰GDAî_ò8–ÿØ—"‰ÙaÈA‰%Ç8Ö(’Q4%°ˆ§ñZp@O[ 802@28¤iš2€/9|¥yšG›90­yš„››Q›2PM¸Yµ¹©™2°›3PD±©}Qœ(›8𜦠©©6 œ°©šÙYœ·©š7 œ½©š8 œÂ)›Ôùš"›ÙI6š‰Ç‘tÙ1?"TN °Y2Ñ+KAzÆ9raðǡˉÛ”3 2€C/sÖ Ñgá‘ úÙ îÁ‚‘Òÿ{b Z  Zc!A l€!/0®á”! ›E ¢3z›Eð ŸÑú=Ú›Ep¡G3:ÂYŠ£3À I`£Ê¡õIÀ£ú@Jë™Dš¡jò±¤ :2á(ª¢rÁ¢O¥8J°ùVê£X:¦·ù]j¤cÚ›O ¦r!œOp¦mÊ Sp$=Bzr1¥UÀ¦ ZëYqú£‹ÊœUp§º¨ÑY|Z,š”º¡5›Z@¨d±¨ß©¨1Pãù¨szªçÙ©‹Ê €Q zªSúAú” ›”š€Š«ÌÙ!Payîb¨6®1¸Ê¢H¥*Ã6› b1ªÌz›y ¸Ú›“æM¸*œëc!¬ JCcCÌ:¥qP>’¡‹ñ Ú2q®éJøöf€ <ÁœgP%(;>B¯özÑ™¯.…3ëê¯íÊ¢ 3úĶó:íê¬iЮ·ÙgíÚ›½¡m êѮ‰ô:<Á ór!y<1¥#[²òG1€ëù^¶ãuÅš1§‘ 8Àœtp¤¸ì1&‹ÑÉ(U±'{c³,ÚL”‚%6 ›ðz{l@‘6{›M{ø&µ-Û›U»² »86+œ ûÃJÛ² ú2Kˆ§-;¥0ËŸêv :›û‰‰v0ë³qËœçú)ߺ£·Ñ)Mq‹°²Š£9°j¸·©ª9Л»ê¸Â#cP¨qË åV³ÊYØá#:³ùÉóEZ©zÁœd!<³’§ÑI¢zÁ¢/Z‚2ª°™ºçúAº·‰u°Pq ¡Û›´˜º>¥Â)ª¤§gkyºS:³£ù 2p]‹ 20[2‰{½Ñ)gi¡r:¡ßË¢§Aº^z½°é‹…{½·™Šú½½ùçÛ£ú½Â©MЧßË ‰3¿ß;¥\1 GÂU—Ÿz!ë{šÌ9.¥¢§4¾§É¢ž±¿Wª¾¯)0À¦›2EàÀÆ»*h€$çqšÂi>Á’èÀ J‹\¡>rÁ:C멆J³dŸ"j$4ª”LP&õbÄjêÄ CoºÂ”q›æÃSŸ+F ¹U1"É‹¤2Q÷Û¤e̸ßCSZ®ªže,¦¯ÉœaðÃd:roL,ªÌ›ŸnšÂ÷K·¹.!8ãÇK·¦‘»úw‹~œ¤xóš 3Pñį9¥¤XÉS̨$üÃ;!%#RoÒ‘›~hèhù©©2‘÷û©2Aí¢1«|›X:î‰#›)Ÿ_0yÐÝ#I£™Ë²ËÙ‘UBÝ kPb—aùÌö¨5YŸšø±úhq) “R‰[C†à\ñ‰ÙqÍô/‰ÕØE¹’‚¾ ÌJÔÍôÍvÎð8ÎÆÜ™óÌ>dëLÖøÎž¦ÏÉÃÏðÉ™óYŸóÒ-ÚØÎ;T•ÛP `•~t!ïYÎ É–m¨ÌÃÌÎ\v©7¥,¹¢“äÑrÙY/ÐÏÇlÒ`‰!BÓ Í"_ÐÍÄ=ìq\:­˜×QD‘ÑL)IA=C$ԼмlÔ-¸sôä\¦{6Lô4Îwà`*‰\ á¸1ãü–ä2Mä$™TEô$ô„—äCÅ÷>B=(vÅ’" üÖðhÌ; –,Ø0¬”„ % €Øl‘IŒ=-s d]×-ÝtxQ|x¡×NÍ×’Ts8rK–MO˜½‘wm{b×ÙX²×½%te³qXÙèd`´ý‰µM612#¹Ò_ÏeÍ"n]#”Ñ]Õ€—!XM&m("ô„Ó¦}Ð †¡RùÜðX?h Üj\ræIomÕqMÖtÍÒ¨­]yÝÚŸýÚãÙ“]K¥MÖv-ª-ßž1êýi£MÛÑßx}{¬-émW¢}²íÞµMÚ)¹O¤Û2B#ãÛÒ ÝÓ%ŒmÑU†Ü¸óbý•/zdÐ#nÑ+ïz†¬0¨FíÓk¸¡+ §(~0žØ0˜Ñfw„kRe-yýÒbñ±Q£€>%Ðò#b'^AV00Yp±!t‹Fä]WÄ`bG†Å·ä¦U4Ût‰‹¨Øö V-äÔRE&Ý_ÎÑ!bZÊó=Ë!Á˜_ÂÕñÃ.€3@6pD- u~çyÎ1 |"±ç7.€íW&f³ÓHl—3ç>^5ôè cREDD ›.0¬8t6 [ N6A>I±Ê‡þnªå—!±°t+Ä/å@Q3TžvþêoëMNsø} `ë<3(p#Ê-À‰³88ëzÝŒÕÃÎëYÞ5¼.‚ €dz³`HÂ2và#Ý,±3f|Jßs3’¾Ž®î‘µ™ŽIœîé½60êtÂNìédìȾÊÎì¯óì{íÓ~מYüòÚŽ²˜„p ÉØyPîÓÑîñQmꮕ‘n“~äêw;ë%ïµ]D Šï zï®ï¥~<¨ŽÏêoñê/ëBë‚>G Ÿë ÏëXþë/6àèAñcñÿ…ñQ±ìÍNÏñ_í#oíÙ' °íÝNT +îG¡.îÔ–î½Cóvï¾~;?ïqÑŒ@ïF0€Co¤NFŸÿ¾êÏôÿb$Qñ"²ð»ÎWñYì[/õÅ^Ÿñc_ö¿[ ¯öiÏ%ÿö¨Ës uóžEìnóîNé9O-ßó‚ï7pD9`øùŽøû¾øþŽôŽÏ]Oðœ/I“_ëRùTŸùÏäÏÛÄÃõsàõÉöïìÑnö¨öؾúýÂönïíŸ;k0û¸óxß24?[7pZ½ÎçG5 ªÿ›~ÿG$ŽÈ9å@°Ox$"A˜¸"*tÆÆ°ø.ø?þwš" NÀ0v »ÚfZàQ€ž¢c,øx‚œ€ÊÿÁ¸Lœ,€™Å&Àø)F Þ£}}Oç]:ž§éê]Ðáî&>~wôT]Àc~?¼§‡ðlõ;UOó=<'çù6 Ä }Çî둾7þNµ y`pí‰õ·Œô`Gðo È¿Ýw㟊«tð®÷iºÙbèl€‚j#Aè)¾SÇø”ßÜrͯé-ÁÔ§®ƒ‚Ö¯×a?*(ñ>߬x¢O ‚¿Ò×÷ÂÙ ƒèO…¨?nÇþ®I˜Ù&s/ ¢;6xûÔàÜ}ñð=:Øéî`puBðøñÁäg•^ Œ|Ð R¾„÷u]ÃS„YŽ– +(ã aü~n@ìqAhg Ë&<éo rB¸'䞬…wÖÏq¿;×F`¡$‚}°>>ç—ý¢_åk½0 ^¿`ñ†!÷ó~`/†?²W ¥3T}ÐPJ÷×þÐÀûã/Ï Ê¼¼÷9Ô¡Ã!Ó ÎÃG ¢HÈ€sŽ@P÷i < õÏ!VÄ6²ÿTËzˆ$±@; Gœ!°†D0#"ÿ;‰#QnaDÈE ÚÀRxó|¥s <Þ ¾‹b_Ñ›…ﶺ$Øu¡ô³|‡ÐZ½)X·è3†£o.ÃŽ× ¿ @yѰíMCY¤LT6\ƒ¶oEÜðk¾¡ïSP°0èÝ€¦8‘_T´…TÑéÂ]è³¢<†X/´UÁ{ ‘¡2ÌКÅLHò6![t xà š;Ú·é_C<"îªs((‘à®v"Kì‰2(zD™HsΫ‹Hnº¥8[ø¢,ìwq:?Áè£!Ä|¿pó C¯ø»^ċ‘FÆKx+ã@ôv‡¢‚Âkˆ÷^íë#­‘ïé>؈é|Ÿt#ÌÊ'öE¨è#;äPÆD(»bˆ †,JB}H —ã?¤ŒbP-º>_$ºx‹×qæeÇSÈ“bàûŽÍÈ6>EÜXu£ ”|VñN=D¹bçk„ð †Eú8Éßd ˆÎQ?z;z³M„V˜²3®;¹èb´‹=p)¢*ñx‹`Òs¸ð? Æ«×c…\„îqâ}Eãx ‘ã>4}e1õáGÖ· ßž8MÞEVGÎ8ÿV¤u솩Ð;.E’ÌN9 ¢fLˆ¦PEþɹýŒœ™†o_jª›Y#¯%˜Ü™²r[úÌŒYý~¤Ðì˜Br\âCLù+G¦º¬“ÓDÚ/¡æ(Œ‹³$hÍ+ `³%úÄŽˆ0AbCÔ›G„“‰F˜8ý_àD3(Ö@ÉDBØ›Îÿ•F˜gj”œ‘æªË)ãþ˜œ“'ÀÁ …"å˜Ót‘ˆø8Wçç\ v–Nx`ê<¶3râÎ×i9c§ Ä^µ°Îƒé:EgñÜðT©Ä9"èd•sÓÏøÀ’çF´žÃÓyJØ9dgöôž|Nñù7ñ_ùô}ºDõÙÊßX6ƒ&ÇÔzR>:Æi?äÛ,™j‘-&#Ð2±£Â$ S6bQ=f‰ÍÔTŸ g~I©¸ôx¦Ž›²ŒÞÊ3ºÙäÚ4—™]Ëg(ã(¸c1 Ž È;ê,¯fà»÷IÉ€G¢  ß异ÔkÒ[¨Åæ­•Štcf?4ú1&Õ”Jó2M‚H½ÜŸ&eˆœ”Šê@+ŠIö¨mF¦´ Ò®ù*¿f! £‡ô•öH‰gi#U›n’¶Í\JIKžõp v‹= ¤÷ðK=ãEÑ›‚¬Ý?Ž5@fI§ j>’ÚB“èËt‘UTf>cÚGd͙Δ•VEŒ™H)¤µ¦•Ò‘fSy.½`ºì¦MrDŠ›ùANd9µ’8P˜zCbøÔiu…‹VËD9HÍ#4u‡dÓ .R„*.w%¹™õ—ºQˆú¿][¼¨4o?øKÍ =á¡{ˆxÒS$*E‡†i~xtFŸZ“jµ¡õ´¨êT¤ÚS;Så©£qz†Ð:BƒèƘªÀü ààÐëwþ€ _ò€ è˜ú5ð `ÀªUÄV€ ¨V(@8XýúÁ„íè dX aë~?ð8-(P@Ãâðj Â0àð3ðòA6€¶Á" €À€`"xXp`À 0ð€†=àˆ`ðþÀ?€3v´V€ª¬†- @ȃ#ðüÁ=p­$‚ ªì> 4}ðÎÁ?o–ÐX` ¤*°³®5`ƒpüŽ@@Z0"A;°üÑêWÕZÀŸýÿ Å Àn@¾ÞYÝš`À?ðUv"`ðþÁ<°Ç@îÚ ZÀØç0Z€*A*hL@× Z@ðxàô×züÁ,°N@Ù®Ö ›d@œ¶`€0Á]µÜþƒA:ì%‚R«ZÑ­ºxÅjX0àÁ?xòàà€UK¦møðà€î¬ ± TW ðÁ¶Àðƒ ì“]¶º54wp ôèºˆ× ùŠb 8°«P_~€8ð¯u× h_ÝÊ€àà7ú@P_ý€ø ý®ZöëZ€³€À¿Öר*_ €ýÀèßKÀÀàÀ~ Ã8ý ]ƒðk]ëÀ^ùª[ßí0À€ Lïl¯ÀÙÎÝ ¼ZMð€ Þ‚ƒÉ«_9°¸³ àÈÖXp€Cjï´ `æÚà;68p™ X«ô-BXÊáÀÄ,0~ ËŽ€yðîÀ50QصNav[‡«%Pª@¬‚ Ø@à €€É  €Ï²pöÁ+h­W¸ÞÙ0‡ÙëÀÎwÚ²WùÊ€†%wø^Ûˆqƒ]´38 c ‹ú à€€Ú«ak°AØÄ–p0ÿ€¾†á €¨ÃÀdá0¼y Ã0@ÃÚb00®ðNîpà@Œkñ¾×àa>ë ØÀ2æÀÍ8t' 8€óÕ¯€@Ãr`¶k1Ap€¿ÞGì0Áˆ™Ø³×Gü˜Ø€€b0 aÀ`ÀœÙ +m ýø˜8ÀÎì( @ƒ~,f8°g–ˆ€$À $r?ó  ‡ÛX@¨J@‡ãDû Ê-ý%€ì7àeYðJ†·ÿ€öŽ_6 ˜¶ÓÂÞd+_ÁË8(ÇÖ;øÁÖ…xüêWEauë=¶€—'å™Û`!@’…€@ׯÅS™wåðœ, ²µ@j@PÄ +;€°h±°ø¹ ãƒàöÁ?Š˜ÁÀú"xº–`Ä‚+ð ôÈ• |Elºr¸Œð9àº03ÈàØmÐ @gîÊçÀƒ€°Å³€ð'8ó#Î`©[‚g®"&ø?€1€ö/ýMË•Ãð®øÝÊÑÙµv`púu`0Õ À#¾±G8\€¤ËŠØ»V›û°zƳ`0ß_À|10Áñ"0àp¨+TXÿl‚ãìl€@ãYÔün/€Ï¸``À)hÆ€ðŽÛy«ˆ5´Šý´Ø px1 0Á>àÆiÀ¢³AxÑ*6W° Àá%2ÏŠ^&›g«³AHŒàGßW"›Zu+‘ü¶¶Cà_ÀȲ’`Ü-|Àl¥àJ/P ô€—ýŠ@Í«_mÀ08¼ 4€~ð´tî³QzµZ€0p“[+ÄÀt]'–gî?`¾`ðéGLI­‹v¸y,pŸ @„%“À3h<ûÄ+x…@Àk,°Ô%›Ú|pÐr&Ð  {à üª6Àá>| ƒ±Ž`àåæëp-ø€àè›+_±p¸àÌ0€s¦Ê¾YÅöaû̵¦ÀØùœY?ðryíx†´±µÆ‚E Å5ˆ;àè×_` ¨ @–AP³DøŒæ» üÁ;Ø¿€üs ž@­õ×'Ö:G€‚k6øU T/ *3PUüä{Ÿ‹0'à  Ú‹ýø9†À ؈ a'òb~°`Ðt)p>77Ê*epðˆçÀ f`úÖÞkl@Á#ÆøÖ åâÌáÁ#fpÀ Œk†¡Á#>àl-äm“æÀx 9‚Lt@ HGŒ~ó0y˜àþÀ>й€³¦ À`¢d‚p`"¦ ¶à_@hçQÖ›|N–ç9( "4ôu¾ºAÐ*– 3m6@FŸç @€Ó+ÏK¹Büü7_uv@JèàUÁ¢l{þÎ@½çô Yµ#PöÆ{ˆΡº`‹ä.Ú|ŽP€n  ¹K½©€§®Ó§BU¸ Eý¨KÙâd¹B`Ç Ð€Í;síA•õ;zŸõ´nÖáëŽ>m­„?׿ë~ u}Óªuøš_ÝëþÀ:ÛúšκjìV¿vøªZý+¼…¾‹Ý¨ÖRü ³ÓU솽˜€Êþ.;]?ë”ݲƒÛâ:e/ì±°‡öÎÎÖA»í8®ßYû `»n•í–³_ö€Û!ìà³ ÌâvV»Z]-¬ ƒáÎkñì¯ ¶Œv±óƒi»j™­n}¶Ñ–<óö³^ÝEy·³±»û`<»nÛmkÝîðÕÞºÖ?›oñA)þ™6½KÙik®Âe¸€ýââYËql~o¾ôåºÜ… †{Êų>è„Ò.Þ!-}_ºM—ù>€È^oO1}Ϻ[÷…SøB~áÍ.(l;³¯Ú«‹gßnÜíï…½¹‡ßÅŒwõ.ßõ»7š¾ ^ÝìŸeì‹<ÆãYÆëx™l0¸ñþ€º£VúŽy5o<òB¾ò:÷Ò{z.’§¼°×¹Ë^ÚËdŸüªòyö÷Þmýjå¥/}W¾a€ùÚøÌ¾â•vÀÖ—ËŸõ$?~›r÷ý¾9žY“_ó+W<ý îþÊ_ƒð’íoÀ¿X(÷ßÿ€=ÿ]­8/`}0ŽÀ ¸;`œ›Ipv­8à0\Opöv¶þ¬s`à‚ap¼ õàÑâY vpHõCXÅa$ :¬—²¾ 0‚U=$Îõe¸×sà8¬b qn·^ûÉKŒsA\¯Ä\ǃg?_-q¡øàX÷@ŒŠ €'ű Ûo{ÜíU1+ÎÏÚ¶r`ZLn±p»:ÝËãfÜî‰1¯÷êþF?âgì{ãý¸×÷Ú™w€l_[7jÝ÷æÄ‚ïhY0?v­íøå¬ê>¨Ç÷ø9ÿÚŠŸ²ص†™#dݪ2ÈWõ6{Tä‹|ò£òGÉ#dž|>ÿ›[r xÎ ¾ÇWšŸhs²œÏÍ:_)e~P”9ð0ÌBŸ);å$•±sUWÄ€TO•í÷W€ê«e8Û–Á«Ö×­ö{//Ú^Ÿ˜íwc~Ì ®¿f×ú™CsPûµ×~ÇæÙŒêÿA¶¶ÔÁy8€¯œá,.XÎÍ9À¤ß|¥3u¶ÎàþìL¶swFüg`ñ›çúËdáÁ}æÃ‹_>úlŸW­Ô]ó§@ã-¡ÓkÐý²<è½jÀâwÛ·CèÖÿúM0ж+šöÛZm hôáåÂe»Gÿ~Þ¤‡ÙžÒþø0]Š»óYWþnºùgZ.Ìq÷4â?Ó¿³E}ý³?ÇÔ—ûÛ}Ô_ß=uÕž?Ó¦êUݪ_õª½êWëj^Ýê}õª=ýô+{¬Z‘µ²^µÇ@þ_9kК´F­e}ãžufmk›9€*bîÚŠU®ùÈ^ÆkóÚ! õpÖÙÅ7°›=0þq€.XÅ\lp_W© '[Êl€ñÖ#†³él¡Þ`m®•ц´ÉžÓæZAmx€ÔÆU`UÛÕ–µmm‚_¦Åym®Ø&¶-k ¨g¤mpÖÚÖ¶ÝJ AP·%Zw[ ${ƒ›nU¸y@²¹éV“ÛÐ P{@è†ÜqìÛ=À¾nºUìöÙÁWXî¦[ín½Û†G¼1eÇÛ â‘gЛôv¾Yo±€¨_uoçø– ‚\ùv¾¥oó›'ÀoÍ€"ȾÕoÅ Ðh‚ýÛùoõX!È¿pú8@ âxûW§_Mp )ampúh‚@ §_9Å›ˆg¸p'V/ˆãÉp42ÀÃÆÀ@ðµ ¢ˆÊ`•U4ƒŸÜ ß58Û…×à3  êW1À/@ðß`\ƒÁ¾~)Zè`9ˆ´ƒg¦•ÈÅy À$W>r“œpÉ?à€³ÝÐVYá‰5þƒÊ–oç„´ÝB¨aQv¡fwâ€!Aø¼U„!¥¥ |Ó­s‰VY¶Í‰sB÷Ðs&¡B—Εt±Õ;Ǿ™„ ]@÷zs À`Ð¥„3CGÐ=tÝLh$èÀE÷Ñ­s€%ÐÑ …ÞÜà Œt8!C€g1uNTNuDyLP-1.10.4/DyLP/doc/Figures/conmgmtcalls.epsu0000644000175200017520000011472711171477034017436 0ustar coincoin%!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/conmgmt.epsu %%Creator: IslandDraw for lou %%CreationDate: Sat Sep 17 10:49:58 2005 %%Pages: 1 %%BoundingBox: 58 615 500 755 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 553 176 1 352 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000018 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000013 % 000000000000000000000000000000000000000000000003e0080007400007c00c100000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 00000000000000000000000000000000000000000000000110080008c000084804380100000000 % 0000000000000000000000000000000000000000000000000000000000000a % 000000000000000000000000000000000000000000000001100000104000082804280100000000 % 00000000000000000000000000000000000000000000000000000000000006 % 00000000000000000000000000000000000000001af1e6e117db76102f370e1e7c287bc0000000 % 0000000000000000000000000000000000000000000000000000000000005c % 0000000000000000000000000000000000000004258a1311e2099910199883c8c44cc500000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000c3b0072110209111010908028847c8100000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000001807019211020911103090882884468100000000 % 0000000000000000000000000000000000000000000000000000000000005c % 0000000000000000000000000000000000000030238a32118209110851908c488c82c500000000 % 0000000000000000000000000000000000000000000000000000000000003a % 00000000000000000000000000000000000000603cf1df3b871fbb878f39cf8e77c779c0000000 % 0000000000000000000000000000000000000000000000000000000000003a % 00000000000000000000000000000000000000c000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000018000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000030000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000060000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 0000000000000000000000000000000000000c0000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000180000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000300000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000600000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000c00000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000000180000600000000400000079c000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000003000002000000084000100308000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000006000002000000080000100308000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 00000000000000000000000000000000000c00003e7701e3decefe3dc111e7cd00000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000018001c6222021628446113e192121200000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000003000fc423200740846871200a0721d00000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000006007e0421401940842991200e1920300000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 0000000000000000000000000000000000c03f00461402362843231320c2321100000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 00000000c0000000080000001d0000000181f8003b0801dbcee11d9dc041df1e00000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000400000010800040023000000030fc00000080000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000400000010000040041000000067e00000039f800000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000007ddc0787bd9dfcf3840bcdc340ff0000000600000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 0000000c488084c5088c247c406662481f80000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000084c801c8108d0e440404242743c00000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000008450064810853244040c2420c3f00000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000008c5008cc508646464214642441fe0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 0000000762007679dc23b7381e3ce7780efc000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000008 % 00000000020000000000000000000000071f800006000000000040600000000300007000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000e3f000000000000000000000383f000020000000000c0200000000100008000200000 % 00000000000000000000000000000000000000000000000000000000000044 % 0000000018000000000000000000000001c07e00020000000000402b0000000100008000200000 % 0000000000000000000000000000000000000000000000000000000000006c % 0000000000000000000000000000000000e00fc03e7701e3cf1e5c240000001f3b81cf1e79e7c0 % 0000000000000000000000000000000000000000000000000000000000001e % 00000000000000000000000000000000007001f86222021638b1622800000031110090b1233200 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000038003c423200741020423c0ffffe21190083a0221200 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000001c000c4214019410204224000000210a008ca0221200 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000000e00184614023638b14226000000230a0091b1223200 % 0000000000000000000000000000000000000000000000000000000000001e % 00000000000000000000000000000000000700183b0801dbcf1ee7770000001d8401cede39e700 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000003803000080000000000000000000004000000000000 % 0000000000000000000000000000000000000000000000000000000000005b % 000000000000000000000000000000000001c0300039f80000000000000000001c7e0000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000e06000600000000000000000000030000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000706000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000022 % 00000000000000000000000000000000000038c000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 0000000000000000000000000000000000001cc000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 0000000000000000000000000000000000000f8000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003f % 000000000000000000000000000000000000078000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000038000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 00000000000000000000000000000000000003c006000000007e700000f8040003a0000e080000 % 000000c000000007e700001f0080003a000000000006000300000c00000056 % 00000000000000000000000000000000000006e002000000082320000044040004600004080100 % 0000004000000082320000088080004600000000000200010000040000003a % 000000000000000000000000000000000000067002000000082120000644000008200004000100 % 0000004000000082120000c88000008200000000000200010000040000001e % 0000000000000000000000000000000000000c383e7701e3de23203c3847ecdd8813cdc4186bc0 % 000007cee03c79e232078708bf9bb08179b80000003e77011e3c7c79e6e008 % 0000000000000000000000000000000000000c1c62220216283e20664479046648066624089107 % ffff0c444042c483e20cc88f108cc880ccc41ffff86222013342c4c733105c % 000000000000000000000000000000000000180c4232007408212042444104444804242408e907 % ffff0846400e8082120848881088888084841ffff8423201210e848212105c % 000000000000000000000000000000000000181c42140194082121423841044448142424281900 % 0000084280328082121847081088888184840000004214012132848212107f % 000000000000000000000000000000000000303846140236282123464061044444246424688900 % 000008c28046c4821238c80c108888428c8400000046140123468cc632100f % 00000000000000000000000000000000000030303b0801dbce7e7e3c7ce38eeee3c3ce7fdcf1c0 % 00000761003b78e7e7e78f9c39dddc3c79ce0000003b08039e3b7679e7380f % 000000000000000000000000000000000000606000080000000000004600000000000000000000 % 0000000100000000000008c00000000000000000000008000000000000000f % 00000000000000000000000000000000000060e00039f80000000000c600000000000000000000 % 000000071f800000000018c00000000000000000000038fc0000000000000f % 000000000000000000000000000000000000c1c000600000000000007800000000000000000000 % 0000000c0000000000000f000000000000000000000060000000000000000f % 000000000000000000000000000000000000c18000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000001830000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000001870000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 0000000000000000000000000000000000030e0000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 0000000000000000000000000000000000030c0000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000006180000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000006380000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 00000000000000000000000000000000000c700000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 00000000000000000000000000000000000c600000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000018c00000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000019c00000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000033800000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000033000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000066000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 00000000000000000000000000000000006e000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 0000000000000000000000000000000000dc000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000007f % 0000000000000000000000000000000000d8000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 0000000000000000000000000000000001b0000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000013 % 0000000000000000000000000000000001f0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 0000000000000000000000000000000003e0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000e % 0000000000000000000000000000000003c0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000780000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000780000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 030000000010000001f8000c1d0000000f00000000000003e008000740000fc000c08000000000 % 060000e000000000000000000000000000000000000000000000000000000f % 0100000002100008008c0004230000000e0000000000000110080008c00004600041c008000000 % 0200011000000000000000000000000000000000000000000000000000000f % 010000000200000800840004410000001c00000000000001100000104000042000414008000000 % 0200011000000000000000000000000000000000000000000000000000000f % 1f3b80f1e7b7779e708cdc7c40bcdc341c0000001af1e6e117db76102f37046dc7c1479e000000 % 3e7703bdf78dc000000000000000000000000000000000000000000000005e % 3111010b12122848f8f862c44066624838000000258a1311e2099910199887c62c426c48000000 % 6222011088462000000000000000000000000000000000000000000000005e % 2119003a021341c880844284404242743ffffffc3b00721102091110109084242843e8081ffffc % 4232011081c42000000000000000000000000000000000000000000000005e % 210a00ca021146488084428440c2420c3ffffffc070192110209111030908424284238081ffffc % 4214011086442000000000000000000000000000000000000000000000005e % 230a011b121188c8c884428c2146424400000000238a3211820911085190842428c41c48000000 % 4614011088c42000000000000000000000000000000000000000000000005e % 1d8400ede3b8876e71f8e7761e3ce778000000003cf1df3b871fbb878f39cfce776e3f8e000000 % 3b08039dc76e7000000000000000000000000000000000000000000000003f % 000400000000000000000000000000000000000000000000000000000000000000000000000000 % 00080000000000000000000000000000000000000000000000000000000000 % 001c7e000000000000000000000000000000000000000000000000000000000000000000000000 % 0038fc00000000000000000000000000000000000000000000000000000056 % 003000000000000000000000000000000000000000000000000000000000000000000000000000 % 00600000000000000000000000000000000000000000000000000000000021 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000043 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000018 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000000000000003e0080007400007c00cfc0000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 00000000000000000000000000000000000000000000000110080008c000084804460000010000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000000000000001100000104000082804430000010000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000000000001af1e6e117db76102f370e1e7c413878f3c000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000c258a1311e2099910199883c8c4417c85890000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000001c3b00721102091110109080288441401d010000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000007807019211020911103090882884434065010000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000000000f0238a32118209110851908c488c42648d890000 % 0000000000000000000000000000000000000000000000000000000000001e % 00000000000000000000000000000000000003c03cf1df3b871fbb878f39cf8e76fc3876f1c000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000078000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 0000000000000000000000000000000000001e0000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 0000000000000000000000000000000000003c0000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000f00000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000001e00000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000007800000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 00000000000000000000000000000000000f000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000003c000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000078000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 0000600003000000080000001d00000001e00000060000001f9c00007c020000e8000700000000 % 00030000180000007e700001f0080003a0000000000000000000000000005c % 0000200001000001080004002300000003c000000200000208c800002202000118000200080000 % 0001000008000008232000008808000460000000000000000000000000005c % 000020000100000100000400410000000f00000002000002084800032200000208000200080000 % 00010000080000082120000c8800000820000000000000000000000000005c % 0003e7701f1c787bd9dfcf3840bcdc341e0000003e38f1e788c81e1c22fe6ec205e6e201be0000 % 001f3b80f8e3c79e232078708bf9bb08179b8000000000000000000000005c % 00062220313e84c5088c247c406662483ffffffc627d0b120f8833223c42332203331202480fff % fc31110189f42c483e20cc88f108cc880ccc4000000000000000000000001e % 0004232021201c8108d0e440404242743ffffffc42403a02084821222042222202121203a80fff % fc2119010900e8082120848881088888084840000000000000000000000008 % 00042140212064810853244040c2420c1e0000004240ca020848611c2042222206121210680000 % 00210a0109032808212184708108888818484000000000000000000000001e % 0004614023328cc508646464214642440780000046651b120848e320304222210a321232280000 % 00230a0119946c4821238c80c108888428c840000000000000000000000044 % 0003b0801d9c7679dc23b7381e3ce77803c000003b38ede39f9f9e3e70e77770f1e73fe3ce0000 % 001d8400ece3b78e7e7e78f9c39dddc3c79ce000000000000000000000006c % 0000008000000000000000000000000000f0000000000000000000230000000000000000000000 % 00000400000000000000008c0000000000000000000000000000000000001e % 0000038fc000000000000000000000000078000000000000000000630000000000000000000000 % 00001c7e000000000000018c0000000000000000000000000000000000005c % 00000600000000000000000000000000001e0000000000000000003c0000000000000000000000 % 0000300000000000000000f00000000000000000000000000000000000005c % 00000000000000000000000000000000000f000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000003c00000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000001e00000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000780000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005b % 0000000000000000000000000000000000003c0000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 0000000000000000000000000000000000000f00060000e0000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000078002000100008000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000022 % 00000000000000000000000000000000000001e002000100008000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000000000f03e77039e3de79f000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000003c62220121628cc8000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003f % 000000000000000000000000000000000000001c42320107408848000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000000042140119408848000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 0000000000000000000000000000000000000000461401236288c8000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000056 % 00000000000000000000000000000000000000003b08039dbce79c000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000000000080000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 00000000000000000000000000000000000000000039f800000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000008 % 000000000000000000000000000000000000000000600000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000007f %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 42.5 23.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -792 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_activateCons) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 79.7178 21.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -768 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_activateVars) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 66.1711 16.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (scanPrimConStdAct) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 107.234 31.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -2328 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_actBLogPrimConList) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 131.912 31.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -984 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_actBLogPrimCon) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 156.59 31.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_loadcon) s savemat setmatrix n 150.22 30 m 155.22 30 l gsave 0 0 0 0.1764 0 B grestore n 108.04 30 m 113.04 30 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 84.0922 26.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1016 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 91.4111 26.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_factor) s savemat setmatrix n 85.181 25 m 90.181 25 l gsave 0 0 0 0.1764 0 B grestore n 65 15 m 57.5 22.5 l gsave 0 0 0 0.1764 0 B grestore n 57.5 22.5 m 65 30 l gsave 0 0 0 0.1764 0 B grestore n 57.5 22.5 m 65 25 l gsave 0 0 0 0.1764 0 B grestore n 57.5 22.5 m 65 20 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 56.47 41.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1988 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_activateBndCons) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 84.0569 41.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1014 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (scanPrimConBndAct) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 109.158 41.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_ftran) s savemat setmatrix n 102.93 40 m 107.93 40 l gsave 0 0 0 0.1764 0 B grestore n 57.5 40 m 65 40 l gsave 0 0 0 0.1764 0 B grestore n 57.5 40 m 65 30 l gsave 0 0 0 0.1764 0 B grestore n 57.5 40 m 65 25 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 56.47 56.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1812 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_deactivateCons) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 66.1711 51.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (scanPrimConStdDeact) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 104.342 56.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -2164 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (deactBLogPrimConLst) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 111.661 56.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_deactBLogPrimCon) s savemat setmatrix n 105.29 55 m 110.29 55 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 74.0381 61.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -446 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_factor) s savemat setmatrix n 65 50 m 57.5 55 l gsave 0 0 0 0.1764 0 B grestore n 57.5 55 m 65 55 l gsave 0 0 0 0.1764 0 B grestore n 57.5 55 m 65 60 l gsave 0 0 0 0.1764 0 B grestore userdict /#copies 1 put grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore DyLP-1.10.4/DyLP/doc/Figures/dualpivcalls.epsu0000644000175200017520000023023311171477034017425 0ustar coincoin%!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/dualpivcalls.epsu %%Creator: IslandDraw for lou %%CreationDate: Thu Sep 15 14:17:38 2005 %%Pages: 1 %%BoundingBox: 63 282 492 620 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 537 423 1 846 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000054 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005d % 00000000000000000000000000000000000000000000000000000000000000018000c000000000 % 0000000000000000000000000000000000000000000000000000000065 % 000000000000000000000000000000000000000000000000000000000000000080004040000000 % 000000000000000000000000000000000000000000000000000000006e % 000000000000000000000000000000000000000000000000000000000000000080004040000000 % 0000000000000000000000000000000000000000000000000000000076 % 000000000000000000000000000000000000000000000000000000000000000f9dc05cff9e6e00 % 000000000000000000000000000000000000000000000000000000007f % 000000000000000000000000000000000000000000000000000000000000001888806644213100 % 0000000000000000000000000000000000000000000000000000000007 % 000000000000000000000000000000000000000000000000000000000000e0108c804244072100 % 0000000000000000000000000000000000000000000000000000000010 % 000000000000000000000000000000000000000000000000000000000003e01085004244192100 % 0000000000000000000000000000000000000000000000000000000018 % 00000000000000000000000000000000000000000000000000000000000f801185004644232100 % 0000000000000000000000000000000000000000000000000000000021 % 00000000000000000000000000000000000000000000000000000000003e000ec2007c7e1df380 % 0000000000000000000000000000000000000000000000000000000029 % 0000000000000000000000000000000000000018000300100000000000f8000002000000000000 % 0000000000000000000000000000000000000000000000000000000032 % 0000000000000000000000000000000000000008000100100000000003e000000e3f0000000000 % 000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000000800010000000000000f80000018000000000000 % 0000000000000000000000000000000000000000000000000000000043 % 00000000000000000000000000000000000000f884f13733bf9e7ee03e00000000000000000000 % 000000000000000000000000000000000000000000000000000000004b % 00000000000000000000000000000000000001898d09399114332440f800000000000000000000 % 0000000000000000000000000000000000000000000000000000000054 % 000000000000000000000000000000000006010884391091a4213640f000000000000000000000 % 000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000006010884c91090a4211a807c00000000000000000000 % 0000000000000000000000000000000000000000000000000000000065 % 00000000000000000000000000000000000601188d191190c4231b001f00000000000000000000 % 000000000000000000000000000000000000000000000000000000006d % 00000000000000000000000000000000000600ec76ef9f384e1e090007c0000000000000000000 % 0000000000000000000000000000000000000000000000000000000076 % 00000000000000000000000000000000000c0000000010000000000001f0000000000000000180 % 00000c000000000000000000000000000000000000000000000000007e % 00000000000000000000000000000000000c00000000100000000000007c000000000000000080 % 1000040000000000000000000000000000000000000000000000000007 % 00000000000000000000000000000000000c00000000380000000000001f000000000000000080 % 100004000000000000000000000000000000000000000000000000004c % 000000000000000000000000000000000008000000000000000000000007c00f1e6e1bdcd00f8f % 3de3c40000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000018000000000000000000000001e018b3312489201899 % 9316640000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000018000000000000000000000000601021213ac9d01090 % 9204240000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000018000000000000000000000000001021210650301090 % 920424000000000000000000000000000000000000000000000000006a % 0000000000000000000000000000000000300000000000000000000000000018a3212251101191 % 9314640000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000030000000000000000000000000000f1e73bc21e00ecf % 1de3ce0000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000030000000000000000000000000000000000020000000 % 0000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000300000000000000000000000000000000000e007e000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000000060000000000000000000000000000000000180000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000060000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000060000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000000040000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005c % 0000000000000000000000000000000000c0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000000000000c0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000c0000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000180000000000000000000000000000000000000000000 % 000000000000000000000000000c0000c0000006000000000000000055 % 000000000000000000000000000000000180000000000000000000000000000000000000000000 % 0000000000000000000000000004000040000002000000000000000055 % 000000000000000000000000000000000180000000000000000000000000000000000000000000 % 0000000000000000000000000004000040000002000000000000000055 % 000000000000000000000000000000000180000000000000000000000000000000000000000000 % 000000000000000000000000007c42784f1e6e3e00f376370000000063 % 000000000000000000000000000000000300000000000000000000000000000000000000000000 % 00000000000000000000000180c4c68458a13162018999398000000055 % 000000000000000000000000000000000300000000000000000000000000000000000000000000 % 0000000000000000000000078084421c50072142010111108000000011 % 000000000000000000000000000000000300000000000000000000000000000000000000000000 % 00000000000000000000001e0084426450192142010111108000000000 % 000000000000000000000000000000000200000000000000000000000000000000000000000000 % 000000000000000000000078008c468c58a32146018911118000000055 % 000000000000000000000000000000000600000000000000000000000000000000000000000000 % 0000000000000000000001e000763b76ef1df3bb00f3bb9f0000000055 % 00000000000000000000000000000000060000000000000000000000000000000000000fc000fc % 000067000e800003000007800000000000000000000000100000000055 % 000000000000000000000000000000000600000000000000000000000000000000000004600046 % 000022001180000100001e0000000000000000007e0000100000000055 % 000000000000000000000000000000000c00000000000000000000000000000000000004100043 % 0000220020800001000078000000000000000000000000380000000032 % 000000000000000000000000000000000c000000000000000000000000000000d3cf1b848f3e41 % 211e226e204f371f0d01e0000000000000000000000000000000000037 % 000000000000000000000000000000000c00000000000000000000000000060126308c47999041 % 63212231201098b1120380000000000000000000000000000000000037 % 000000000000000000000000000000000c000000000000000000000000000601d4038844909041 % 21072221200390a11d03c0000000000000000000000000000000000055 % 0000000000000000000000000000000018000000000000000000000000000c00340c8844109043 % 21192221204c90a10300f0000000000000000000000000000000000033 % 0000000000000000000000000000000018000000000000000000000000000c011631884e119042 % 23232721109190a311003c000000000000000000000000000000000055 % 0000000000000000000000000000000018000000000000000000000000000c01e3cedcee0f38fc % 1d9df7738f0ef9dd9e000f00000000000000003e000001f10000000055 % 000000000000000000000000000000001000000000000000000000000000180000000000000000 % 0000000000000000000003c0000000000002004200000089000080005b % 000000000000000000000000000000003000000000000000000000000000180000000000000000 % 0000000000000000000000f00000000000020041000000880000800000 % 000000000000000000000000000000003000000000000000000000000000300000000000000000 % 00000000000000000000003c0373ef3761e79c7078dc708b3bf9e00055 % 000000000000000000000000000000003000000000000000000000000000300000000000000000 % 00000000000000000000000f0399199993323e1e8462f8f111cc800046 % 000000000000000000000000000000006000000000000000000000000000300000000000000000 % 00000000000000000000000381091091121220011c4280811a84800055 % 000000000000000000000000000000006000000000000000000000000000600000000000000000 % 0000000000000000000000000109109112122041644280810a84800055 % 000000000000000000000000000000006000000000000000000000000000600000000000000000 % 00000000000000000000000001191191123232628c42c8c10c8c800055 % 000000000000000000000000000000006000000000000000000000000000c00000000000000000 % 00000000000000000000000001f38f3bb9e39c7c76e771c38478e0000f % 00000000000000000000000000000000c000000000000000000000000000c000001800007b9e02 % 0000003800e0000000000000010000000000000000000000000000002c % 00000000000000000000000000000000c000000000000000000000000000c00000080004331a26 % 000002100100000000000000010000000000000000000000000000002b % 00000000000000000000000000000000c000000000000000000000000001800000080004310822 % 000002100100000000000000038000000000000000000000000000002b % 0000000000000000000000000000000080000000000000000000000000018000d388e1ef11967a % e1e217937380000000000000000000000000000000000000000000002a % 000000000000000000000000000000018000000000000000000000000003000127c9f3141a9223 % 133632118900000000000000000000000000000000000000000000002c % 0000000000000000000000000000000180000000000000000000000000030601d40902041ad222 % 121212110900000000000000000000000000000000000000000000002b % 0000000000000000000000000000000180000000000000000000000000030e00340902040ae222 % 121212110900000000000000000000000000000000000000000000002b % 0000000000000000000000000000000300000000000000000000000000060c01164993140c6222 % 123232390900000000000000000000000000000000000000000000002a % 0000000000000000000000000000000300000000000000000000000000061801e39ce1e704473f % 39e1dbbb9f800000000000000000000000000000000000000000000028 % 00000000000000000000000000000003000000000000000000000000000c380000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000000000003000000000000000000000000000c300000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000000000006000000000000000000000000000c600000000000000000 % 000000000000000000000000000000000000000000000000000000002a % 000000000000000000000000000000060000000000000000000000000018e00000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 000000000000000000000000000000060000000000000000000000000018c00000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000000000000040000000000000000000000000031800000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 0000000000000000000000000000000c0000000000000000000000000033800000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 0000000000000000000000000000000c0000000000000000000000000033000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 0000000000000000000000000000000c0000000000000000000000000066000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000000000000018000000000000000000000000006e0000001800007b9e02 % 03800e00000000000c01c0073a40000000000000000180003800000056 % 0000000000000000000000000000001800000000000000000000000000cc000000080004331a26 % 01001000000000000400800846c0000000000000000080004400000056 % 0000000000000000000000000000001800000000000000000000000000d8000000080004310822 % 0100100000000000040080088240000006000000000080004400000056 % 0000000000000000000000000000001800000000000000000000000000f80000d388e1ef11967a % e1373800000000f3c4789b9c815c3cdc38e00000000f9dc0eff9e6e056 % 0000000000000000000000000000003000000000000000000000000001b0060127c9f3141a9223 % 11189003ffff818c24c48c488062426245f03ffff81888804442131056 % 0000000000000000000000000000003000000000000000000000000001e01e01d40902041ad222 % 11109003ffff8100e480884880420e4245003ffff8108c804440721056 % 0000000000000000000000000000003000000000000000000000000003e07c00340902040ae222 % 1110900000000103248088488142324239000000001085004441921056 % 0000000000000000000000000000002000000000000000000000000003c1f001164993140c6222 % 139090000000018c64c5c8484242464241900000001185004442321056 % 000000000000000000000000000000600000001800030000030088000387c001e39ce1e704473f % 3bb9f800000000f3be79dcfc3ce73be77ce00000000ec200e7e1df3856 % 00000000000000000000000000000060000000080001000001108800079f000000000000000000 % 0000000000000000000000000000000046000000000002000000000056 % 00000000000000000000000000000060000000080001000001100000077c000000000000000000 % 00000000000000000000000000000000c600000000000e7e0000000010 % 000000000000000000000000000000c0000000f884f13761093d9b700ff0000000000000000000 % 0000000000000000000000000000000078000000000018000000000056 % 000000000000000000000000000000c0000001898d091993191089880fc0000000000000000000 % 0000000000000000000000000000000000000000000000000000000040 % 000000000000000000000000000000c00002010884391111091089080f00000000000000000000 % 000000000000000000000000000000000000000000000000000000007f % 000000000000000000000000000000c00006010884c91111091089080f00000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000180000601188d191111191089080fc0000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000180000c00ec76efbbb8ef9ddf9c0ff0000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000180000c00000000000000000000077c000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000100001800000000000000000000079f000030000700000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000003000018000000000000000000000387c00010000880000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000030000380000000000000000000003c1f00010000880000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000030000300000000000000000000003e07c01f3b81defbc6e00 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000060000700000000000000000000001e01e0311100884423100 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000060000600000000000000000000001b00602119008840e2100 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000060000600000000000000000000000f8000210a00884322100 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000060000c00000000000000000000000d8000230a00884462100 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000c0000c00000000000000000000000cc0001d8401cee3b7380 % 0000000000000000000000000000000000000000000000000000000003 % 00000000000000000000000000000c00018000000000000000000000006e000000400000000000 % 0000000000000000000000000000000000000000000000000000000040 % 00000000000000000000000000000c000180000000000000000000000066000001c7e000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000008000300000000000000000000000033000003000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000018000300000000000000000000000033800000000000000000 % 0000000000000000000000000000000000000000000000000000000024 % 000000000000000000000000000018000600000000000000000000000031800000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000018000600000000000000000000000018c00000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000030000e00000000000000000000000018e00000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000030000c0000000000000000000000000c600000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 000000000000000000000000000030001c0000000000000000000000000c300030000000018000 % 0000080000300000000000000000000000000000000000000000000064 % 00000000000000000000000000003000180000000000000000000000000c380010000000008010 % 0000080000100000000000000000000000000000000000000000000070 % 000000000000000000000000000060001800000000000000000000000006180010000000008010 % 0000000000100000000000000000000000000000000000000000000030 % 0000000000000000000000000000600030000000000000000000000000060c01f3b8084dcf8f3c % e377d9bb1e11a000000000000000000000000000000000000000000054 % 0000000000000000000000000000600030000000000000000000000000030e03111018ce789091 % f39a08cca112400000000000000000000000000000000000000000005d % 000000000000000000000000000040006000000000000000000000000003060211900844308391 % 010a08888713a000000000000000000000000000000000000000000065 % 0000000000000000000000000000c0006000000000000000000000000003000210a00844308c91 % 010a08889910600000000000000000000000000000000000000000006e % 0000000000000000000000000000c000c000000000000000000000000001800230a008c4719191 % 911a0888a3122000000000000000000000000000000000000000000076 % 0000000000000000000000000000c000c0000000000000000000000000018001d8400767cecedc % e1f71dddddbbc00000000000000000000000000000000000000000007f % 000000000000000000000000000180018000000000000000000000000000c00000400004000000 % 0100000000000000000000000000000000000000000000000000000007 % 000000000000000000000000000180018000000000000000000000000000c00001c7e004000000 % 0100000000000000000000000000000000000000000000000000000010 % 000000000000000000000000000180038000000000000000000000000000c0000300000e000000 % 0380000000000000000000000000000000000000000000000000000018 % 000000000000000000000000000180030000000000000000000000000000600000000000000000 % 0000000000000000000000000000000000000000000000000000000021 % 000000000000000000000000000300070000000000000000000000000000600000000000000000 % 0000000000000000000000000000000000000000000000000000000029 % 000000000000000000000000000300060000000000000000000000000000300000000000000000 % 0000000000000000000000000000000000000000000000000000000032 % 000000000000000000000000000300060000000000000000000000000000300000000000000000 % 000000000000000000000000000000000000000000000000000000003a % 0000000000000000000000000002000c0000000000000000000000000000300000000000000000 % 0000000000000000000000000000000000000000000000000000000043 % 0000000000000000000000000006000c0000000000000000000000000000180000000000000000 % 000000000000000000000000000000000000000000000000000000004b % 000000000000000000000000000600180000000000000000000000000000180030000000001e00 % 001f80000cf88000000000000000000000000000000000000000000054 % 0000000000000000000000000006001800000000000000000000000000000c0010000000002200 % 0008c0000444800040000000000000000000000000000000000000005c % 000000000000000000000000000c003000000000000000000000000000000c0010000000002000 % 0008600004440000400000000000000000000000000000000000000065 % 000000000000000000000000000c003000000000000000000000000000000c01f3b80f1e6e767f % 7608242784459dfcf0000000000000000000000000000000000000006d % 000000000000000000000000000c006000000000000000000000000000000603111018b3312221 % 99082c68447888e6400000000000000000000000000000000000000076 % 000000000000000000000000000c00600000000000000000000000000000060211901021212221 % 11082421c4408d4240000000000000000000000000000000000000007e % 000000000000000000000000001800e00000000000000000000000000000000210a01021212221 % 1108642644408542400000000000000000000000000000000000000007 % 000000000000000000000000001800c00000000000000000000000000000000230a018a3212221 % 11084468c460864640000000000000000000000000000000000000004c % 000000000000000000000000001801c000000000000000000000000000000001d8400f1e73f773 % bb9f83b76ee1c23c700000000000000000000000000000000000000055 % 000000000000000000000000001001800000000000000000000000000000000000400000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000003001800000000000000000000000000000000001c7e000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000003003000000000000000000000000000000000003000000000000 % 000000000000000000000000000000000000000000000000000000006a % 000000000000000000000000003003000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000006006000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000006006000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000600c000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000600c000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000c018000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000c018000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000c038000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000008030000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000018070000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000018060000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000018060000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000300c0000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000300c0000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000030180000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000063 % 00000000000000000000000003018000000000000000000000000000c0000040c0008000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000006030000000000000000000000000000400000c040008000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000060300000000000000000000000000004000004056000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000006060000000000000000000000000007cee03c5c48dd9dc0000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000406000000000000000000000000180c4440626250e68880000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000c0e00000000000000000000000018084640404278428d00000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000c0c00000000000000000000000030084280404248428500000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000c1c0000000000000000000000007008c28062424c468600000000 % 0000000000000000000000000000000000000000000000000000000032 % 0000000000000000000000001818000000000000000000000000600761003ce7ee7dc200000000 % 0000000000000000000000000000000000000000000000000000000037 % 0000000000000000000000001818000000000000000000000000c0000100000000400000000000 % 0000000000000000000000000000000000000000000000000000000037 % 0000000000000000000000001830000000000000000000000001c000071f800000400000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000183000000000000000000000000180000c00000000e00000000000 % 0000000000000000000000000000000000000000000000000000000033 % 000000000000000000000000306000000000000000000000000300000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000306000000000000000000000000700000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000030c000000000000000000000000600000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005b % 00000000000000000000000020c000000000000000000000000c00000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000618000000000000000000000001c00000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000061800000000000000000000000180000c0c4006000200000000000 % 0000000000000000000000000000000000000000000000000000000046 % 000000000000000000000000638000000000000000000000003000004044002004600000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000c30000000000000000000000007000004040002004200000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000c7000000000000000000000000600007c7ccfbe3cf2e77dce3e000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000c6000000000000000000000000c0000c4c444626643122e7f10000 % 000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000c6000000000000000000000001c038084844442424213243010000 % 000000000000000000000000000000000000000000000000000000002c % 0000000000000000000000018c00000000000000000000000180f8084844442424211443010000 % 000000000000000000000000000000000000000000000000000000002b % 0000000000000000000000018c00000000000000000000000303e008c8c4446464211447910000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000001980000000000001800031000070f8007676ee3b3c773887ce38000 % 000000000000000000000000000000000000000000000000000000002a % 000000000000000000000001180000000000000800011000063e00000000000000000840000000 % 000000000000000000000000000000000000000000000000000000002c % 0000000000000000000000033000000000000008000100000cf800000000000000003840000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000330000000000000f884f133701fe0000000000000000060e0000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000360000000000001898d0911881f8000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002a % 0000000000000000000000066000000000000108843911083e0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000028 % 000000000000000000000006e0000000001e010884c91108380000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000006c000000000fc01188d1911083e0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000007c000000007e000ec76efbb9c1f8000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002a % 00000000000000000000000d800000003f000000000000001de000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 00000000000000000000000d80000001f8000000000000000e78000600c0004000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000f0000000fc000000000000000061e0002004008c000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000b0000007e0000000000000000070780020040084000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000001e000003f000000000000000000381e002e7c79e5cefb8e7c0000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000001e00001f800000000000000000018078033c4cc86245cdf200000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000001c0000fc00000000000000000001c018021848484264850200000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000003c0007e000000000000000000000e000021848484228850200000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000038003f000000000000000000000060000238c8c842288d9200000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000003801f80000000000000000000000700003e7678ee710f8e700000000 % 0000000000000000000000000000000000000000000000000000000056 % 0300001800030010000000380fc000000000000000000000003800000000000010800000000000 % 0000000000000000000000000000000000000000000000000000000056 % 0100000800010010000800707e0000000000000000000000001800000000000070800000000000 % 0000000000000000000000000000000000000000000000000000000056 % 010000080001000000080073f00000000000000000000000001c000000000000c1c00000000000 % 0000000000000000000000000000000000000000000000000000000056 % 1f3b80f884f13733bf9e007f800000000000000000000000000e00000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 311101898d0939911cc8007c000000000000000000000000000600000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 2119010884391091a8480070000000000000000000000000000700000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 210a010884c91090a8480078000000000000000000000000000380000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000010 % 230a01188d191190c8c8007e000000000000000000000000000180000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 1d8400ec76ef9f38478e007f0000000000000000000000000001c0000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000040 % 00040000000010000000003fc000000000000000000000000000e00060000000007800007e0000 % 31f200000000000000000000000000000000000000000000000000007f % 001c7e00000010000000003fe00000000000000000000000000060002000000000880000230000 % 108a000080000000000000000000000000000000000000000000000011 % 00300000000038000000003ff80000000000000000000000000070002000000000800000218000 % 1088000080000000000000000000000000000000000000000000000011 % 00000000000000000000003ffc000000000000000000000000003803eee03c79b9d9fdd820908f % 108e7779e0000000000000000000000000000000000000000000000011 % 00000000000000000000001fef000000000000000000000000001806244062ccc488866420b190 % 90f222cc80000000000000000000000000000000000000000000000011 % 00000000000000000000001ff78000000000000000000000000018042640408484888444209083 % 9082348480000000000000000000000000000000000000000000000011 % 00000000000000000000001ff9e00000000000000000000000000004228040848488844421908c % 9082148480000000000000000000000000000000000000000000000011 % 00000000000000000000000ffcf000000000000000000000000000046280628c84888444211191 % 90c2188c80000000000000000000000000000000000000000000000011 % 00000000000000000000000ffe3c0000000000000000000000000003b1003c79cfddceee7e0ece % f9c70878e0000000000000000000000000000000000000000000000011 % 00000000000000000000000fff1e00000000000000000000000000000100000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000ffb878000000000000000000000000000071f800000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000007fdc3c0000000000000000000000000000c00000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000007fee0f0000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000007ff7078000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000003 % 000000000000000000000003fb381e000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000040 % 000000000000000000000003ff9c0f000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000003ffce03c00000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000003fee701e00000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000024 % 000000000000000000000001ff6380780000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000001ff71c03c0000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000001ffb8e00f0000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000bfdc70078000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 000000000000000000000000ffcc3801e000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000064 % 000000000000000000000000df6e1c00f000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000070 % 000000000000000000000000dfe70e003c00000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000030 % 0000000000000000000000007fb387001e00000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000054 % 0000000000000000000000006ff983800780001800038000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005d % 0000000000000000000000006fd9c1c003c0000800044000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000065 % 0000000000000000000000002fece0e000f0000800044000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000006e % 00000000000000000000000037ec7070007800f9dc0eff9e6e0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000076 % 00000000000000000000000037f63038001e018888044421310000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000007f % 00000000000000000000000033b7381c000e0108c8044407210000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000007 % 0000000000000000000000001bfb1c0e0000010850044419210000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000010 % 0000000000000000000000001bd98e070000011850044423210000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000018 % 00000000000000000000000019fd8603800000ec200e7e1df38000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000021 % 00000000000000000000000009ecc701c000000020000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000029 % 0000000000000000000000000dbee380e0000000e7e00000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000032 % 0000000000000000000000000cf661c07000000180000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000003a % 0000000000000000000000000cf730c03800000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000043 % 000000000000000000000000067b30e01c00000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000004b % 000000000000000000000000067b98700e00000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000054 % 000000000000000000000000066d9c380700000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000023dcc180380000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000065 % 0000000000000000000000000336c61c01c0000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000006d % 0000000000000000000000000336e60e00e0001800030300000001000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000076 % 000000000000000000000000031e63070070000800010100000001000000000000000000000000 % 000000000000000000000000000000000000000000000000000000007e % 000000000000000000000000019b73830038000800010100060000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000007 % 000000000000000000000000018f3183801c00f884f11f1c38e373370000000000000000000000 % 000000000000000000000000000000000000000000000000000000004c % 000000000000000000000000018db8c1c00e01898d09313e45f189188000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000008d98c0e006010884392120450109108000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000c6dc606000010884c92120390109108000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000c6cc70700001188d192332419109108000000000000000000000 % 000000000000000000000000000000000000000000000000000000006a % 00000000000000000000000000c6ce30380000ec76ef9d9c7ce39fb9c000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000006366181c00000000000000460000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000006367180c00000000000000c60000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000061b30c0e00000000000000780000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000021b38e0700000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000003199860380000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000030d9c30180000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000030d8c301c0000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005c % 0000000000000000000000000018cce180e0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000186c61c070000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000186670c03000180000c000181800000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000836306038000800004000080800000000001000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000c3338601c000800004000080800300000001000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000c3318300e00f9dc07c84788f8e1c7370f10bc00000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000c1b1c38060188880c58c84989f22f9899b19000000000000000 % 0000000000000000000000000000000000000000000000000000000063 % 0000000000000000000000000006198c18060108c8084841c90902281090909000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000006198e0c00010850084846490901c81090909000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000060cc60c0001185008c8c8c919920c9091919000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000020cc7060000ec200767677cece3e739cf0edc00000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000306630700000020000000000002300000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000003066383000000e7e00000000006300000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000306618180000180000000000003c00000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000018331c180000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000032 % 00000000000000000000000000018330c0c0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000037 % 00000000000000000000000000018318e0e0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000037 % 000000000000000000000000000081986060000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000000c18c7030000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000033 % 0000000000000000000000000000c0cc3030000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000000c0cc3818001800000181800001000004000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000060c6181c000800000080900001000004000000000000000000 % 000000000000000000000000000000000000000000000000000000005b % 000000000000000000000000000060661c0c000800000080900000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000060630c0600f9dc078f8fbcf3733bf9cc000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000020630e06018888085898919b991143e4000000000000000000 % 0000000000000000000000000000000000000000000000000000000046 % 0000000000000000000000000000303186000108c801d0909109091a4204000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000000303187000108500650909109090a4204000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000003019830001185008d1919119190c4324000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000001818c38000ec20076ecedcf1f384e1c4000000000000000000 % 000000000000000000000000000000000000000000000000000000000f % 00000000000000000000000000001818c180000020000000000100000004000000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 0000000000000000000000000000180c61c00000e7e00000000100000014000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 0000000000000000000000000000080c60c0000180000000000380000038000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000000000c0c30e0000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002a % 00000000000000000000000000000c063060000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 00000000000000000000000000000c063070000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000000000006031830000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000000000006031838000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002a % 000000000000000000000000000006030c18001800038000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000028 % 000000000000000000000000000002018c1c000800040002000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000000000301860c000800040002000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000000000301860e00f9dc0e78f79e7c00000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002a % 00000000000000000000000000000300c60601888804858a332000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 00000000000000000000000000000180c3060108c8041d02212000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000000000001806300010850046502212000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000000000001806180011850048d8a232000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000000000000080618000ec200e76f39e7000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000c030c0000020000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000c030c00000e7e00000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000c030c0000180000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000601860000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000601860000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000600c30000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000200c30000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000300c18000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000300618000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000300618001800000800000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000000000000018060c000800000800020000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000000000000018030c000800000000020000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000010 % 00000000000000000000000000000018030600f9dc0dd9dde78000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 0000000000000000000000000000000801860188880e688b320000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000040 % 0000000000000000000000000000000c01820108c80428d2120000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000007f % 0000000000000000000000000000000c0180010850042852120000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000000c00c0011850046862320000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000000600c000ec2007dc21e38000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000000600c0000020040000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000000600600000e7e40000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000000200600001800e0000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000030030000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000030030000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000030030000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000018018000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000018018000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000018018000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000000800c001800030000030000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000003 % 00000000000000000000000000000000c00c000800010000010020000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000040 % 00000000000000000000000000000000c006000800010000010020000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000000c00600f884f1109b9f1e79c00000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000600601898d09319cf12123e00000000000000000000000 % 0000000000000000000000000000000000000000000000000000000024 % 000000000000000000000000000000006002010884391088610722000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000006000010884c91088611922000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000200001188d191188e32323200000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000300000ec76ef8ecf9d9db9c00000000000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 000000000000000000000000000000003000000000000008000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000064 % 000000000000000000000000000000003000000000000008000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000070 % 00000000000000000000000000000000180000000000001c000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000030 % 000000000000000000000000000000001800000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000054 % 000000000000000000000000000000001800000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005d % 000000000000000000000000000000000800000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000065 % 000000000000000000000000000000000c00000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000006e % 000000000000000000000000000000000c00000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000076 % 000000000000000000000000000000000c00000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000007f % 000000000000000000000000000000000600000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000007 % 000000000000000000000000000000000600000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000010 % 000000000000000000000000000000000600000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000018 % 000000000000000000000000000000000200000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000021 % 000000000000000000000000000000000300000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000029 % 000000000000000000000000000000000300000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000032 % 000000000000000000000000000000000300000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000180000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000043 % 000000000000000000000000000000000180000000000000000000000000003000030000800001 % 800000000000000000000000000000000000000000000000000000004b % 000000000000000000000000000000000180000000000000000000000000001000010000800000 % 8000000000000000000000000000000000000000000000000000000054 % 000000000000000000000000000000000080000000000000000000000000001000010000000000 % ac0000000000000000000000000000000000000000000000000000005c % 0000000000000000000000000000000000c000000000000000000000000001f108f1377d8f38ee % 9000000000000000000000000000000000000000000000000000000065 % 0000000000000000000000000000000000c00000000000000000000000000313190939a098fc2c % a00000000000000000000000000000000000000000000000000000006d % 0000000000000000000000000000000000c000000000000000000000000e0211083910a0904010 % f000000000000000000000000000000000000000000000000000000076 % 00000000000000000000000000000000006000000000000000000000001c021108c910a0904038 % 900000000000000000000000000000000000000000000000000000007e % 0000000000000000000000000000000000600000000000000000000000380231191911a098e44c % 9800000000000000000000000000000000000000000000000000000007 % 00000000000000000000000000000000006000000000000000000000007001d8ecef9f71cf38ef % dc0000000000000000000000000000000000000000000000000000004c % 0000000000000000000000000000000000200000000000000000000000e0000000001000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000000000000300000000000000000000001c0000000001000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000030000000000000000000000380000000003800000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000030000000000000000000000700000000000000000000 % 000000000000000000000000000000000000000000000000000000006a % 000000000000000000000000000000000018000000000000000000000e00000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000018000000000000000000001c00000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000018000000000000000000003800000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000008000000000000000000007000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000000000c00000000000000000000e000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000000000000c001800000000c0000001c000003000180000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000000000000c000800000000400800038000001000080800000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000000006000800000000400800070000001000080800000000 % 000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000000600f86b842dc7c79e700e000001f3b80b9efbcdc000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000006018897cc6e6c4848f80fffff8311100cc844262000 % 0000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000020108ec04242841c8800fffff021190084840e42000 % 000000000000000000000000000000000000000000000000000000000d % 00000000000000000000000000000000000001081c0424284648800e00000210a0084843242000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000000000000001188e446468c8c8c80700000230a008c844642000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000000000000000ecf383b7c7676e7003800001d8400f8ee3be7000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000000000000000000000040000000001c000000040000000000000 % 0000000000000000000000000000000000000000000000000000000063 % 00000000000000000000000000000000000000000000040000000000e0000001c7e00000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000e00000000007000000300000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000000000000000000000000000003800000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000001c00000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000000000000000e00000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000000000000000700000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000000000000000380000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000000000000000000000000000000000001c0000000000000000000 % 0000000000000000000000000000000000000000000000000000000032 % 0000000000000000000000000000000000000000000000000000000000e0003000018000400400 % 0000000000000000000000000000000000000000000000000000000037 % 000000000000000000000000000000000000000000000000000000000070001000008000400440 % 0000000000000000000000000000000000000000000000000000000037 % 000000000000000000000000000000000000000000000000000000000038001000008000000040 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000000000000000000000000000000000001c01f3b80f86b8cdccf0 % 0000000000000000000000000000000000000000000000000000000033 % 00000000000000000000000000000000000000000000000000000000000e03111018897c462440 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000000000000000004021190108ec0442440 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000000000000000000000000000000000000000210a01081c0442440 % 000000000000000000000000000000000000000000000000000000005b % 0000000000000000000000000000000000000000000000000000000000000230a01188e4442440 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001d8400ecf38ee7e70 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000000000000000000000040000000000000 % 0000000000000000000000000000000000000000000000000000000046 % 0000000000000000000000000000000000000000000000000000000000000001c7e00000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000000000000000000000300000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 45 121.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1244 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dualpivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 76.077 115.919] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -628 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualin) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 84.624 113.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (ddirdothyper) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 84.737 118.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (bdothyper) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 84.624 108.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_chkpiv) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 84.737 123.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_confirmDualPivot) s savemat setmatrix n 82.237 107.5 m 77.237 115 l gsave 0 0 0 0.176 0 B grestore n 82.237 112.5 m 77.237 115 l gsave 0 0 0 0.176 0 B grestore n 82.237 117.5 m 77.237 115 l gsave 0 0 0 0.176 0 B grestore n 82.237 122.5 m 77.237 115 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 85.249 88.419] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1148 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualmultiin) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.262 76.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (scanForDualInCands) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.262 81.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selectWithoutInf) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.262 86.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selectWithInf) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.262 96.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_updateprimals) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.262 101.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_confirmDualPivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 139.262 78.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (promoteSanePivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 125.915 86.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (calcInfChange) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.262 91.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_ftran) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 158.697 86.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_ftran) s savemat setmatrix n 118.91 85 m 123.91 85 l gsave 0 0 0 0.176 0 B grestore n 151.76 85 m 156.76 85 l gsave 0 0 0 0.176 0 B grestore n 91.762 75 m 86.762 87.5 l gsave 0 0 0 0.176 0 B grestore n 91.762 80 m 86.762 87.5 l gsave 0 0 0 0.176 0 B grestore n 91.762 85 m 86.762 87.5 l gsave 0 0 0 0.176 0 B grestore n 91.762 90 m 86.762 87.5 l gsave 0 0 0 0.176 0 B grestore n 91.762 95 m 86.762 87.5 l gsave 0 0 0 0.176 0 B grestore n 91.762 100 m 86.762 87.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 152.5 73.7722] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -714 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualcand_cmp) s savemat setmatrix n 132.5 75 m 137.5 72.5 l gsave 0 0 0 0.176 0 B grestore n 132.5 75 m 137.5 77.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 84.05 66.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1080 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualpivrow) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.297 68.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (consys_dotcol) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.297 63.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_btran) s savemat setmatrix n 90.797 62.5 m 85.797 65 l gsave 0 0 0 0.176 0 B grestore n 85.797 65 m 90.797 67.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 82.851 173.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1012 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dseupdate) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 91.947 173.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_btran) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 91.947 178.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dseinit) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 91.947 168.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualpricexk) s savemat setmatrix n 89.447 167.5 m 84.447 172.5 l gsave 0 0 0 0.176 0 B grestore n 84.447 172.5 m 90.291 172.35 l gsave 0 0 0 0.176 0 B grestore n 84.447 172.5 m 89.447 177.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 65 146.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_addtopivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 65 136.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualdegenin) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 65 161.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualupdate) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 65 151.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_factor) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 65 141.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dualdegenout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 65 131.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_ftran) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 65 156.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_pivot) s savemat setmatrix n 62.5 65 m 47.5 120 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 172.5 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 87.5 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 115 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 130 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 135 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 140 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 145 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 150 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 155 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 160 l gsave 0 0 0 0.176 0 B grestore userdict /#copies 1 put grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore DyLP-1.10.4/DyLP/doc/Figures/dualcalls.drw0000644000175200017520000004370211171477034016531 0ustar coincoinª» €ï"€ ˆÈ sÇH6eb P%Ì™2SÒè)ƒBFŒ.r°q#‡ )XL3›0y˜¤³ðˆœ7uà,¤RK!rêÌAƒ¢I*E¤!† ,\¢DŒ!gÜpQƒEÓ.nÀˆaõhQ¯F‘ÆëÕoĨñÁƒÊ( ì„a“挶CŠ8*Äܺwy`t ‚N1l¡HyûD •$Oœab¬  J² ‹¹$bnÄÔaƒÛ1@ˆ&]Æ4¦ ÆÌa‹BÈ›7kÚ„q“"¶¶mÊIS§ï0›A`Æ,BÌÉ1kDÄf#‡¶Þ#L’LAÒû¤›3u–a›v­2y¾ Ïæ,štæÐ‘S&L›/eÜñ¡ ¤š6Õ–ÓN=ýÔP_!¥TL9 6„eU –mÕRJ8†eU[nÁ%]vá¥_~‘Ø`˜ö™bŒ9™d”U˜›ÕŸ…6Zi§¥¶¯a&m¶á¦o¾'qÆar<,§Í=ÝtÕñ€ÂuÙm×Ýnà‰GžZü¡÷ÅsQž{ðÉGŸ}øéÇŸÞ4 O>ñ… „ 6øTH6ÐU 8°ƒ .\ÆÕ† F ©„f¡…f[oÅõW‰<äµWP)Æ‹…–ØbP4öXd“UÖèŽ9æ[>²æjªýØ[°ée’¹íÖ›”NWÜqÉY™eÐI7uÖ9vÜà]™ižšs´GvÀ†m̧MrÖw_~ûõ'RžêħBè@ 65( 7º• VÁ€•V’Å¡X³Pé‡˜Š¸i`ž¢øð¨:–ú"ªªÎتšUYñ¬  ¹+¸ŠìZ¯³ýz[°LËCpÆF9e²W.Û,—ÑN+¦µd†—­¥Û²'ùñͧníúçL2ý_¼öy ½^ªïƒ9Jå€U 6\©† /|iˆšªÈEAE¨œ’êâ©1®J£«—ÝëŽ=šd®¶òjdʵ­¼ä°¿½üä±RRi%sÎ1»å³]~)m˜Õ^ëóx¯Ù‚ns¬¡mšé­7×·v¼AÑéÒÉîï>“¼úIµ‚ø еÖ\[5ÆaOš°ðH™½VÃi‹ÊÛnýbÅsócª2²Zã«z{,+´úM²ºž<8’† Û¤â1#[å•ké,´^‚Ií˜ßmΫ砋4é_tKêâ"—¹xðtÍuvr—Ó4»¨ÑëOUËÝÕB’µôî8 JðF¶ƒ)ÌCgËÔˆ”Ǽ·ML0Ð3•ô0V½»q GÚã[÷Â÷7|J2ŸË`%õ=K‘»år†9úa‹s1À_B7ºó¤‡r¨£XwÀu%Pi/‰ÉLd·§ÚM-RVsPH(„Ø QWÑ Ø2äâ}pÈ!§¤„# Á„jC!a¢7½ŒYo°ŠáúFÃïŽH7TY[–82nfëSV'?Ëé,s=3Sç>·Dý}ȉê©C~Ü*ÎÉŠI‹»(µzQ‚b´Š d`AEelk^Ù@x<´É10%tÅö¨Â>¶pcØëg9ÃÀÒ†ãS$ËW¬6Žfí“Üû*'¿iN“Iä$÷Jfa hXƒ)ö:«ó²Ý+—2AYÒrkûÚ=ØÁHD"ˆBŽ¥Fv <òJj¨ K±òÔ{Gaê±Eeê_¸7f:´Æà³ª~±ªÃFúׇ^Õè6‰èÑošU¤ 6O’Ë R:¤A7t¡CÜŠJ™¾ÓÊtŽ Ç(Œàà3eŸÝØOJñ SñQ Ýâ*Ú…É„*CiLÕHç76„£´Ž-ÊckzÀÝÄ$H?à´–® qÃYMahã¿;¼ô5#Y³In:Èö4Aíí/˜N. ”ÙyEUÒÝ¡•õºïÜîèÂ[–"¦wyÂ`“pØû&æ{ýÐù.»™Í>ä'ãŠnÓ>0 Üé²N¼ÛG~"uVÚR·®Õ ¤2v{‹åÑÎZ$ÃE­— ‹Ø» ¼ñ6™™ËuÊfìòÈØ§+©óöÊ¢Õ°îü“uÁný¸g?yb¿Û/ï+hß©Øq;e¹VyÎ!‡A–ƒKw.k]µ³Í{¼ÕÞ÷²ÿýëz§-ß7ËöÎäw=Êâ¯ÞWÇÛò(À†^K3瀖U¹ÁTjÐy·Ã:ñ£yãO{ú/¿ž*k.ó—UßFÖÓ>·†Ÿ:ÜEouÝcÝôÅ-;ñÅb|×Ã^Q°¯}òßžîÜÏýù¼þd§]ÚûþúMÉ>òw{ûÐ+¾ùß/}øï.ò§¿õçþNâ}ö#ÞýÞWOò×e¨gÕ—U3Àë÷y €ð'€u'~2Q’ÂWv V|êWxþz7€±4€÷eH}Ù÷e60{åט]¾#8ô‡'Ø‚_fmÔmæfÏç`r0­±~„ !g Q øz!0!!ßâÑÑxF¨H¨„—Q…ôA3 Vøƒ……IXŠÇ30•, voP ð…bøƒdx„gØah´€18…q8‡­q‡¥w…YÈ€È4k³dQè¢rX†X„yh†Jˆ!Oh~Y"Ja8†e˜ˆúbzö‡7…n"n`ve ªÁ¢t‰s˜‰¤øXO6µöoH"h@™±y0‹µ(Šz¨„0µö(5 Q(.g@ùa‹ˆx†é׉V¡Qøsaá¡Jæe€¸x†fä;c–ŠoØ-a@Öèè8ŠÚˆkÁ„ŒèŽ"Pe e@opõ˜ŒKXµ–€sQ9¯xš˜qE…g0‡d@‘‰hhdU±†É‘ùñ‰Œ¹ÜH¾(dH&)i*ù‘ú˜Db1KQŒÂ8sÑå‘{h²„F•…@ÉBI7¹‡ ¶³ÔÌ%w€õAD©…Q)]y‘XuqŽœ%a€Ñï!„,¡hijIœØ+èSáE"‘ˆœ¸!Á~ù—€˜Y‘ ÈŒ–|õ–æHïáeHA—7`—…’—ê<‹xk})˜š ˜„i”½hÈYŠ—ŽÉ)™x¹’úhxé‹›ù𔩅«™“µ&šiɘrY¦Y—ï7™ªÉ… ›¯ù›V‘\á(¶ —¸ée\qš½™š¹˜(4pœ^™™Â˜+)²t¨˜œ‹Ù˜œ˜D²w!±‰76éÉ/xšY‘{É„ÞIšá¹‚²Wž…•ˆë¹ŸíéžØ™ˆë¨€‰‚™þ1šËYŸã‰ŸçÉŸìiþyž,ÉšY · žº)ž÷©“ ªžê þIœ]H¡Êi¡baŸä©¡É éé¡îI˜‹8R ë÷¬¨òA0cii€ã’;k¨†lø†\ N‘¤Jº¤LÚ¤Nú¤P¥ŠwE¤Gê5€ˆ¢¤ ¨x\ê.™¤2 zaê^ùaJ:Kh*¦MQ¦¯¥xnz4¦Wú¦g*¦[§N1i ¦Jª/Uš¤ˆB[KJ¥^*¥JZ§ˆº¨Qz‡9º£=ú£AºC:¤\!ŠÊ¨šº©œj¥HÚ© ªQš©¢Zª¥Jª¦Ú¨!ñ¨<ê£@*B 0–j¤ `¶z«¸š«ºº«¼Ú«¾ú«ºz¤À:¬ÄZ¬Æj«Âz¬Êº¬Çš¬Ìª¬Žª£­*©°J©²Z¤˜Z«7`ÛÚ­Ïz«Þê­ß ®ÜZ®7à¬Ï®å:®¶ª®Ûº«è ¬îÊ®íj®ëJ¬ñJ®ê樄 ©®:© R©Ø*¬óº«Ë«›« ««îš¯õº¯k¯ïʰë« {«Gz±¸ª±;±[±«®û°ö²%»«ý:­¯«Dj´:ž0ë±Ì³ãÉ®4+{#k¬7+³Ëº³¼š³{³6+´Å:²>;®)©+k­-{©GPµPË„TKµR+µ5pZ›µWµU[µ] µ[»µaGúµV¶Y»¶Z[¶hË„e;¶kë¶oû´j+·1@·h·l;·jû¶e{¶x«·_Ë·r›´ÿZ­{­.›­n b[4P¶‘¹+¹˜;¹a[¹˜¸ ¹™K¹  b—[¹¢Ë¹¥›¹vÛµœKºjÛº§ º© ¹žÛº50»’»‘‹¸Ôʲ³ê¸a‹··»¹sZ¼s궃K¼Æ{¼a{¤ÂK¹Ë˼]Û·m«¼Ëk¸}»ºW½Ò{µÔ˵Ök¼ØK¶Í«Ü«¹Ó›¼¬Ë½¼»´‹Û´´ºòÛûwök¦vúZô;¿^ªzþë§.ÀŒ¦aú¿ÿ»¿ô{¤÷{¿ùk¿,¿|¨,À¼¦¬z\¿ù{¥ ¬¿üëSý+Á<§#ìüÁÿÒÀø»À΋Â'\Â$<Á&Â8о‹Û¸G:3ÀÃ>ÜÃ@üÃA<Ä?ìÃELÄCŒÄGlÄH¼ÃH¬ÄJ¼ÄP ÅK,ÅR|¤TLÄVüÄ[\Ä]œÄKŒÅUœÅBüÅ>lʋÌë´}uCàÆpŒ€8ÇrŒÂúÒ¤,Çz<ÇoÜÇpÜ6€lmãÇ~|¤{¼Çvü¤yLÇ| Ç~ÈLÈqÌÈr|¥¬È|È,É,ÈF Éo¬ÉuœÁ¨*¨™LÉ=ìÈìɌƾ;° ÐÁ[»aË«*,§%|Á—,Ë0p¶´Üµ¶ÌË2ì’ºŒÂ¼<º’«½RÌ*<Ì4¬x»¬ÂÈŒ¾W;²· ÃϬ¥(ìÊLû»uzFNÎ#¦zãÎä,Îè|ÎêlÎì\ÎîœÎí|FÉÚ6¶JÏ‚ü®E Mj«Cp«ýÏëüÎ ÏýÍ}ÐЭÐgTÏ·jÏù\Ïçú©LÊÏþl ÐãÌÍïëͱáþà_;² Þà^µNá¾áTÝÎà ΄îáBPâ彫#¾àþߺŠâ޲«*­J{ÃjM«q»Óн;þÒ=~½åËÓA.¾ÁËãá[¼?Ö PäJ~ä@žäÝ+µD^¾ç»ä-íäszà:ÜäPîÒe ÃXÎÒ”[ž[å]+æ_žå›kækÎÒʵjÞµh¾½nNçHÞµW:ÌcN!e.Ã\ÎÆaÞ¤ZNÍR뤅.å†.ç„ÎèƒÎ¤qµW¶‹¾¾>né®çæË½‘¾¤…è´ŠÔÜë¤GÓçkê;íÓ3]êx¼ê¨îêLzê1}¾„Më*ê¯þÒ¤½NjÖ-ÝëË«ê/-êÙÊ«e;ʾìÊnÓȶÌÎìί^޵ѾìÓ®«É~íCí¹ê¹ÜÞí5ýìÖÎíÞŽ«Û~íKmÒä~µánÓÆ.¬0€Ñô>ïö^ïønï÷¾ïùÞïü~ïþîïòðûþïðoð Ÿï_ðÿðüñoïW:ñïïñÞä0ßñÎìÌäÝñ?òØ<ÌäMò$?Ó%_Á!ò¿ò|ò"ÿò2¬ò2Üò3Ïñ?Â2ïò;_óŸû¶9Oó0OÞÿ¤/̤6ôϼéWûëHšôKºôN*õJúéSOÄMõMjõIŠõJêõN±î%ÍôìôR›ñ´ö·†[óönÝ÷[Ãöl_Øm¿ö÷tÏ÷n÷vo÷m?Ó~¿5sï÷‚A€Ÿ÷{ß÷Ž¿økŸø…÷;<ù’ù·Öø“O÷˜/{yßöŽ/÷“Ÿ±Ÿ¯ø‰¯ù¡ÿöŸñBP­ÿúCÑÜ®?û¯ß±´OûÛ û°?¯º?ûGºÝ·_ûîü®ŸûÄÏûÄ¿ÝGJü)>ü½/ÆßûÈßûÀÿü+±Ìý·?¯ÍìÌ/ìýù þ4|É Ü̹Üôâ¿äoÀëÿ¦6_ÁáoÌè/ÃÅüÀÂ\†¬þôÿýéoÀÝÖÕ:îeÓp]HKj&§)°X½  Ìu°¦@™Öé |€0ž´ (Ò€šp€¼Ž./xWãüUïêfÆåªw«X ­rF€¼½8çßh ~³+P⪳¥[`|?0AèÞnà×Rqá­ª,—زÕÎÚnO°¹EAä6‡ÛÎú}RðfAA-˜iÖô‚Í-·A*ÈÉà´‚e 7ü¦cÖtƒÍ-㥷G€€ä­ÖA<ØÞì ¤ƒ|méA?à <âª<ø áÜo‡ª¸C(á­Êx`Ï)„9>§é˜ÔŸ«`ŠíÉ9N˜æD!¥»sO¯IM:7Â2áÆks2Ì*:R˜ =!,¬`Ϧù4]˜ÓxaLó…*ͦ-À_XÓva1ì…Çž4V÷“a0t†! FChÒ„áGS†&Í.܆ ;!¨ó†W~=q¨ Ë×¥«…ß°ÚBu˜Ña¢ªvîp²Ãp8åa<,‡œî:SÈñšÔÑãS(;HùÀ1!j)!¢Cq͉a€Clˆ!jÄ„X âëˆq#jDŒx…@E”ˆ‘"–ÄŒ¨9b@ˆ/‘ þ>‘xI"I<‰#%BÄ•Èi"B‰1&†Ä–ˆœOĉ'òDDA‰@|i1*FÅ£¥«xšT”ŠT1W)@p§¢w»UV±+J…¯h«ÂbWƒÙ­*î4±8¡Û®2‹Wñ A­¸ÅbVÄUÏèŽÈû¢ È€10 ÆÁ¸(ü¢aÔ‹„11ÆÃx¤£bTŒ‡Ñ1>F ãi›Œƒ±2úE̘5#_TŒ—‘2zƽÈãÑÓeÓ)5V–"0X£kDÙ왩FÕØk£kŒÌyÍÆÕhkã ;a»q:õÆÛøË_p\~Ã6ÇÿÐk$ޏ±U–队cmÜËÑK5ÇäX¥.˜ÚÛmMªð,ɵ¤.Š»UD€ -)ªå±¨V™2&ÎV¥ÇÀ“Ô×zW_Ë%ÁÇ7« x[7€¼‘·þèác"ÜVh KA#@ ÃÔ~œXþÑ>†8ôȄܔy”Yôñs1©øøÝÜ”Sˆ< £ùC%xãÒXŽËV' £õ0¼·ñp€ àxä1kô¢É%ƒÀ /H$Ñ–F4¦’¢²£-Z £¹±y§zT$ŸÂ ûÏH6—\$Œäx2Ò˜y#mÀ˜Ò‘Yc,9b€’…íHIÁ§X¤‘¼Rä±I¾È%i@­Á‘TÒ+Uɬ•ºä–\@ñKzÉ0i&s¢˜´wk2MÅX&%Û䜬‘;òPþÈ;É'õ¤Èx¼J¨IJv·«&¥¥ÄÑíRNÊH©)…§TjÍPS~ÊNyÒF¥¥${$ÍT’J’ÖýÙ%{`¼êUºÊY)+[˜¬Ü_±’VêÊ[9+m%ÿÊ•¼2XîÊa9²„¥±”_¹pPi)-å&›¥WiϲY*Ëi¹,•e´Œ–ÎÒYVËmI-cÀL»–n\z¥nÉ-—¥¸œSâ²\’ËÊ".X¶—ê²\žËwé&ãe·¤—Ð2[:/{¹-çeºì–rðmɸ;ø¡Œ+„UëH L„IµfÁüZ3.H#Xµ¦%‚ÅIÂ1f ˜ÓÑ·Wò ÇD[$“Z̯•2æÉd™-Îd¢8‰YµZfȤp#3fºLÙÞlfÇä™(³ÅÌŸ)2ßVG3i™Y4÷–ÒLš*óeÖL¤I5&ÓÄ™€ëi"Í«9áh&ÕÒšVsg6ÍÂ6¹¦„#‚`siŠM¬é4«&ÒÌx>­êÕ4'7»ÞÜlRÌPnž4º™Óô¦Iã›1 êq½%U7•ÞÝdR…sêÕ4–8ÃÞá\Rp³oÚͽ‰7%§á¤œˆ3§m½Ç™¦,§âÄœ„Ós¾ÃÁÙ9çäü›•Ót^N“Æ8Eg’"Iêèñ²ÓYöð¦ ó›µÓv²0Šö9Q'â¼´“¤=©Ù)éB¥ï$œÀsuæÎßÙÁ‚g^aœÉ³w.O%uôÞ.³Æ‘:²KT§=§ÓüC`¬þÉ¿ì9‘Z÷ÜRgÏzî¹ÿ'ƒ£ùÜß“å¿ v¥Pc÷|ŸÚó„e¼FÄ?g@#Ú Ür†1G !ª”-lÿƒ|Éz—Š p ÔM0A'¨%  —L'. ­ÀAh¿ó’ ÔxIŽ@BÉS¿ðŸ(ôvË:Á\RL, 0à€j…|§@1¥ -ô¢Ë JAý`WJƒ"Ð:Cù] ¡%´„½jšèNq¢NÔßI>ù.K_æëwÎ Š>Q>E¨¥¢×ÒŠQ|ÇE¹¨+£AŠ~Qz‰/ŨÁC£[T‹6¼z7EÙhºL|û³„ñ4ÆÓœÙf}Tÿ)€?:© #¤ÌV°­ÈGwšÝiô¥=Ò—ÀK›¤.-’º4L8ôŒ€ ð¤ ô“Ò#0JKi(=¥¦´”Z Uú‡Œl¥¬Ôåq`Zu™ì­¢Õ­ VÓêX5«–,®zÕ¹ŠU/ÙÐ[B ÖÁš«a ¬'o°ÖªXk{;¬‹U`BVǺ·«`e¬5±NV¯É„,+e-\ž³*VÍÚXUædU›•u²ŠVÃúW¿¦Û ›{ëoµÍ§yòdë…Si³¶N¯¬ùZu«÷2š¯Õl½Øº[gkÕô­X ¸jM"H¸ÀVÙ\a«×Âe[ÁVuM[ÓÕºr:äêµ kvÅ®¿•¸†×ÛÚ\Ákr¯ç•º~W¸U¾¸ëÔò®ãµjƦ§ôèk׳¯a¿f=¶õôk~={õÀÞW;:ýëë4°bïÀXÂ[l°!ÌI=F;9U…}R›t‚ª «©Pe^1U–Â.NÞ¹a9gì$‘‰ë¤²±M•`5U‹…zf/Šª˨ê§u±7–Åj=Û©Zl.ŒŽÙÑ–eÇå)Ÿv²ónW!Y"[)—l/û€ÏLÈ:Ù Vd‡ll´fVö7ŽÔ’šbQ`—‹]ÌÆ"ðad™u“EÀEÖ€4[kHiCt³)ŽãÙ*9Ë [ÝV=ғʱ"0ùìtê’Ð>YIf -–*9à?"Z‹h"DŠƒ7ÛªKFÚOú%)-™™­`Ú·O9m•³böÌšÙ2»üÔ,›-oÓ)Å¥Z#@gé,™ÝV¯VÏbÚég÷ét´‚ÖÐZE›h×l¸R–ÑBÚO"?™¥µ´š6ÓnÚ Ði™m•R{ 2ÚF&Ÿ&m¥­ e ¤´_h[@žrڶݶØÖ†F¦qm‡¡J«¶ãöÚ^[nËnµ­Oû¶ì6Ü~IrKn™!º‘êv¶Ûvûn÷m¿··æÞR[z " ™¼õ·Ü¶ßÂ[€Ûý‚#Žm¡çSǺ¿ãÈc¡pŒ¸·}vO a™#Æ¥°ä“:vX( qw£Äí_–I6xÃr“ˆËm¹0÷åÊÜ–;¯ Þʹ87æê\™[s›Ô¼êköjç Ýœ‹s{®ÊltM Ý¥Kt‡­ºò¦ítœêÓ©{DÏi‹‹ºô”êj]/I2é)=U¨[—ê’L¬+u«®Ùd-Îë–]ª vèØU»¿#ìVÝ®Kvå.ÛÅ­WîžÝ³K2Sî’¢W€7WA½ÀKxEdE£v…wY9)c´ïwTW”0ÈÉ+y;=ã}0ÅIÞÍ;y-ïÏU‘—òv^VæÉäZè引—ôF4È›yÀゥ·“™ÞÖ‹zG/$üƒ°öJÞå§zI–·:½¢×òöTš50_‹ÛYÅWöß›¥0eœñqÈ×ù*_è{³"&ôm$3ú¢¸ç›á´¯‡S~x—ú_é‹Üú.gQ æè ˆ¥3ŒæÀB@làæãà¯ü5 ²=)û;Ë ¨¿ñwþ>#²Ã‚VпüwCd),ÇÂtŠ ˜)d…Bi ž©Àá/b` DÿÅ Òüìßü5Æg©n Ä "FhE€/LCTÒPà‚$È!7à~B­ù µI$Ôà‡æ@pAd"0ƒýÃî¤|”‚—p 9!È9ðþ vOÀ‘ „°&þŠœi°|á0ìÜžh°Xœï€pRÅ M3æ€Á6 *\ GBVü÷¯D(SZ!óFL™3\ÀQ£"”(A% 6et€xA§ œ0bäˆÁF2cÞØTYbˆœ2a輑#3É6aÜ!"'Ìf–‚`ó¦Q£Hé¤yã†HÒ˜ ®”!bJ8 bЈ+CGŒ:dÌ•F ¢Pœ)3Gf ¢BºJMãæLb<2qÔAã.e¾ jÜÀA”È›1uÚ”qCÇI™µk¥î*g a™(ÎJMÑùsèÑt¦Ô‡MšÔ«ë´~ "6Ñdh¯,"uˆPѤç(˜ÆN™™d¾Ì±ó¥£eðŒA‚L3 Ô™SF™4cèÌt U*U«DàËŸÑ·¼þò»àÑŒGt¤÷‚晑Àb0ÆVƒ}(ayç)ðB†7^… fø‚Faˆ4,Þ´nX5‚`‡Hì!Š8¶:"q23Xb[s³(ªqŠÆzÙƒ°ÈÅ.ñ…1œar62Ò^R¼‡Pdº!saM€Rà`;'I±{Œ2 ´,¦Y®€ ˆó­„Ê0†ßÜòh`¡ÛªFž›+Zá­o?Šçií9r˜Ã  ±'èo¾€ z.Ÿýç3º·Žfƒ¡%h?/º‘˜þ¨¦'ˆhIwÅJ…ÜUZ+ZH“š…§à¤YÍ=·(q”$IˆæO9zŒTqBy=¹X¢<Œ±±«f»Éñ艥WO¹7¼¤xò̆…oöä ZW(+Ü®˜'9W81Èa=ä‰TÒä3ƤR P÷\5ä$rk¬Ëb`C®ÃÕNæÄ/8ÊVm†£ÄàtÂá€3ó˜Áb`r˜_@–Ñ!fE&ÅAfqŒ³àeÉ^i_Jëáܓ֜§5-$be7FSïƒÛFô˜yX¹‚'øòDËD”¤}d”ïå^Oy_Û÷mKÑ ”3"5âö˜’åØa‰\[IŽæHé( IÕÄðbò8討þè–7Ùt(³QRÉ•—ÇÆ“š”rd R”òg9–y—b ‘ ‰ bÈaˆ%Ç8Ö(’€4%±ˆkñZp0O[ 802 yôa€9€šª©39€|©¹š“áš90²¹šÄ›4ð›2@M¼y¹Éµ™2ð›3€D®É‘œ(㚒ᜭ|aÎ9ÖÉɹ›¯yΜ¯ÉÉiœ¶9ªI#Á›ÜY6ž‰Ç‘tÙ1>""DN ÐY3Á+K1zÊIraǡωÚ”3 2°C/uÖ¡ñgáÑ þ¡ïÑ„‘Òzb š Y%ZA l`%ÚšCàï1)aP¢ÞYŠ :¢»Y m`¡ã¢ÁYz8ó¡3`œE0¢;:š9z  úY/?Z¡01¤î9GÚ¡ZóᤠJÕé,ê¢rÑšO0¥;JÞùY¤[Z¦»ù_š¤eœO@¦raœO¦o ¡Sp$<2zra¥UঠZïYs*¤ U§Ú¨ÕY~Z­™–ú¡5àZ`¨dѨâɨ1Pæ©ušªêù© ¡‚Q$šªV*BùÔ ›T›‚ª«Ðé!PQy6P®AºÚšH•*Ã6àW bQªÎº›y0ºœ•ÖMºjœìcA¬zCc0CÎj¥qP=Ò¡ zï™®ëJùf wgP&X;=b¯øJ~3±¯-…3í °ïÚš 3ùĹ#;ï ­ið®»ùg±mÀëñ®Æ‰ô:w¡órƒÁmwa¥%{²ô:G1€ïù4¹ÓuÇš1kÑ 8tp¤¸í1(‹Õ¹(U¡'}ƒ³­ÉL“r%8ëòz{l@‘8»›O»ùFµ/œWÛ²Û88kœ ÂJû²ú2L¨§/k¥2  ëqv z›ÿ‰ˆ÷u2 ´s éê)áÊ¢7·ÕMs«°´º£9ਚ»ÉªªÁÙ«:aœ12‡:·jneP«ž…=R 5ÛŸýñ8¿¤—ÊÐI„á³3Ëm|Q(Ê­)£&X£|᪛®"”1¢»›hP!B¡"ºÁY‹ªÛS|aœ¤:z|‘¶•²¢k¥c@»4ÚŸ1ðžAyðµ "<1Ha :¾ÕIgi@¡tz¡àÛškQº`Š½Þ©†‡‹½»™Œ ¾Á é ¤’ ¾Æ™Mª§à ¡‹S¿àk¥\A GÂU·šï¹±nб« ¤ÑR.ºšÕ™@äÛŸ¬9ŸÑ¿Zʾ´Iq°ª›3EàÁÇ«*h€$豚Ʃ>$Á‘èÁZ‹œ¡=‚Áå; GA Hu³¬ F"B¥ÊšÕÉdR/ý9lÚġÚqºÂ¬¹›ê#P +O¹Ua1"Ê»¤3Qù ¥eì¸ãÚVZ'Ü¥/PdªÐåk¦3‘oÜšzмý §)œ¿4°›ñ„3¹v{º»¸øÇLª7z¡0N¬VJŠ–<ÅŽ Âå[úÚ1"ù&2Pƒ«~¨iýÉ©3‘ùª3Aí¢1­¼›W:ò)"ŸiŸ_0yÐác7§¹ËAÒËÙ‘WDBàU k Pâ˜~y— P“Å1𥙡—2)•¼µ1eÎÅUŸæ‘ØY[€D˜´¤©0ðeåC_§ìèq§až91 }QëA·ÒGìR$54a÷ D3_^å5wàé80#ñ:è3(3Ê-À‹Ó80À}íÞŒÕpNë›Õ`Þ/pÂã(@y°ŒfÌÞ,´Sf~Jãs3™nm•ïïõéŽD»Ê³Žº©NÊÓÊ®.]zc³^ë¶Ž[¸ŽèÎëXìÞ>ìË.c®}ìŽ IËþcÎík íÔ.;×^ëÚþ[èîßî5Þ>‚ PîçÞÀA!j°îÓ1ïòaf$ïÖ¡éO¾~ºã^øŽIÏê70² 6ÀY9ñï«þ½50ð°žhðo7 $‰^Gïë ñý!ñVnì Ð7P¬X¯ñÅÁñ_ítòÙÞÛ^òÞnò&¯ò,¯WÂ2v@´m02ßîÖfó𾕘žóô¾éêvdQ4 Š2ÙkêIÏ“K/ðsAð±´Žð· ¹~õË®!ßç_ëÄNñ`/è0[öÍ~öÖñQ1íjÏölÿöÝîqŸòã¾ò„$2Ð÷4m7?øµSø;lž®øÂ^ôO°Yô!¡ªJð­~ùOoð›Ÿð2VõºŽõ¢¯õ\/ì¦?õBg6pÎú³ñ¯Ÿö íµOò·ò¸ßtoîèŽ$xß#ÀOø5ÿîÀ#ø~O>Ô;ö“øòóstÏD<0ýX]Ó³~OÌE=Χð<ÃÛußïב¾®7þ¾ÞÐAç/ãµ¾g·þbßdzvîoäq;¹—ûèßî«{õF›è=¾Ç1fÿ~ç?hø\øy‹/q!ÀϲR ¤|Ôᄎ(ë²_¨€èz¿^§ƒ©£rä¯â…À7Ñž œ})ÐíÁ?8ÿÄ]Øá}-Ïaá½£ój`ÄÿOê<`Óé~ ò› ©Gþ¸èkpëm@ñ‡= ùSj0`ì¡¿9 þ¢Ýl"O ®À(ÿÌ ¹³d4°£ý·á`Ë€Áoö¼äg,z8À"A3ßÔ~TÏZ½†—ÃßsŽðxì:³G-¡}˜°íÁÛG;a yöt‡5@ ÝÝáC…7P">VˆI\¡ó#uÑ諸$X ¡ž,„º°û…>*¨­ ×+v0= Ã.Xá \{apŽANxòžá¬{ÖdÌh6X ÿžÿ;…rÐøÑA{W»ájz…Ù+J¿Y! -<‡/ îB È}á;D}ñp 2»ôçúŒ!2D™PnÂ2Øë_”k0VÄþw 7Oht9`‡ä€àf@ ø,¯Ã¶¸€œHê&Ù +ŽvlA”w0+I} aåÂPäƒF’EpIO<Šs$Ï‘( Â%áH€Š¢c,ª¬"QÌ^YñÆÝÄ®{"$ ‹J‘,n–¦XGТT\‹Ø°jÃ{w‘Hz“=G-ß¼ˆ„0#º8GŸ;ì€ððf/æ4 +!쳇`0%2C~8÷ á¹ë}\AÌDSïˆßÄ >°¤Fº@4Ù9z0@û%–ƈg|ÔÐ ?ÀÛâÑ _’A.‚¯Ú‚DÂ#^ÔsKq/šÅ§=`Lˆ<ðøÕAÙØ ïBO¤ŸÅA-À?è1Ÿo”z’ñóñBâxaf<J­³8Å‘H Kbs¼‡´OÂ=é¨ûþá,RBp@,$#—V#wDˆ®Q!ÂÆù—Ÿƒjz«׌ÇÜÈ«ßcüpû¥ÃC˜õª`é3 Ñü)ÇÉÙJT†£‘Bº@êxÕÐhè tÀCÄÖøcC\|êèiÃè¬D‚n¬|.Ò?b¿ß(#5¢p¬‘íðFÙ!D"1ô‚ 1¾¿•è §ã'G Ûd…|“DE D™¨oà‡l*$(Æ¶ØøFåVŒ…£r.ŽÊó8já‹g±=ªÅ£ øxª„$ªR+ÒF>‡+õ¯DŠbQgèÅW¹ý¢{¤•UñV¶ÅFg*weªäŠ«2)¢ÇaY[Š¥¬œŠ‚oõÕÅÉð:˜Ó¨»ó/ÒÊõÐ˜Ñ ÛËÎL³ô3uQ UÁÈp›•à€n0 ¨ ¨†9À\CaÈM:ÇÚà5Iƒnà ¾8Má`6eB5ëpÚ;xz’.ÓCh@„À ÎAPóÀ {p8'   Bpœ€ø€*'Hô€PAЈÀs‚NÑi8€!°ï xN: €p€0;C'`õ@qúNài€ïÄÁOƒ€<§ï„ÉS<Ïä¹: ž¡³€ "§AèžÀ€Ï™=@€>€€v€ >À! Z(O)°ÖÁ4 x:€0J@"ðfüƒdp ª€ ñS€CÀÁØØ@y^Ð~p €Áž`8ܹ  ðÅ3x€@<€P¡ yºP =-§ e5ôsÞÐëiCÙ'ÔS…f ª8ƒgˆñ|æƒ*>g8Ÿ €Ù<€ö“ ìwJ¨ò žÀ ê ªÀðœTy2ƒÖiA÷A+•³„)*:±À,QÊü … €€ põ”£ `Àƒ?ðtÁàÀCú9i,ˆ-à”>0ÀÅ¢ˆt@‚và >A?À`tQñ 9@TŽ"0p¬' 0àTNÐ=((ˆ¥”ÐpÁ.}Á@8ð‰äh䦔Ð0$À0¨ªà—À* LÓà†À<Øð@y¢P0*gðà „ €Ê œ©X§í”}vaj8€½§¸Ôsîω¼hX§ ÀsúÏ)N-ç€ç“ÈÑ€>ÁPœ…p9#À:M¤Ü`‚>úJq0P”}ƒî‰@`ü€ `•@pppC Óp¾Á?¸` L^ð úÁ?äààŠà (6¨ãà©f VA 8€nêøü |€ êºA<åtØ‚nÐÀªà© r0`p' =À pö À65 Õ ÀÏ ¼è@¨Õs€ʹN @dež^4àSÏÉ*' …œ`à£nVƒà*çà¥@€îY¸©7õ¢¥Uydúzã¬Î”Ÿ€`Z€©€ €[ƒé0mpT|:€ Ðz< ®rt„vªYÙ'`Ý¥‚u_k0u²Àw®Rëéd—ç35¡NVz c1À…U«ÀwY3 9€œ¾ÀX€b/¨î|ž0vŒ) xž•³p€A°Ö9x¶Ì3Ú0>/ìñ ÃÜ"Vq H(¶%r"°G@è<À~þƒ?0 ò?}·¤ó(‚V®0p² q¶NGÐ~Á5Nv$Î nçmæN?êJÑ';Uèó–Ú‹;GÀeŸÝS»v\‹»B9.a-st|Š\ö¹À)Å5—:‚°>{éïÄ¥¤ D€íÚqg¨&}’ܘÛJY®A0àð\£[hAТãâRX6@Ôí¹€Q»r…î/`ñv@Øm¥vQ®øäaWÞŽ@Uèð!f8˜è . W[O$àÒn  XŸ€ð^@w§BU¸ ·Hä¢Ñø²Hàë¸'øú@ÂuŠ8 轤×óž^0z-§ê ½¬÷£†Îºz[/ùdŸ ö®Sùr/ìµ½¼—è^á‰X“§«•¡Ç7zNOçÉ>aÀ°6Ì^0ð|£ïô­¾@úªTì‹f/0à¾ÁsðëG'(ö=áW„žßô+|¡/P0T†¾PÜ›Cµ,ûÄ¡AôþòPêGèÈÿ@ÍöP0Dÿo†¥4ü"Q,€¿¨u¢ ›[pE#0¥ÀÀ+OgúÞêØ7`‚°åäÀø@ÃÂ'ûøAôu¦? €l~À>ø0XÓ`Ђ5,:p¦o@³` ~°AxB¸a#üjÁ©•]¡=XâºÖoN‡éˆÂç`´¾ÓxÊ>@VZxŸSð…C/ú|D¸¬„‚j9Íðn…Ñ× ?8œ}å0FvXÃÞ Þyâp†éð9½Ñ˜^÷{ ëv§0 ƒƒÊzYˆÂá`´€Îz£p:Ðıµ÷Fáz0…a«;•©D¸8Óg{áÁ0 £x·bÏ‹ ˜ÅJXꌋy0~¼X»WƒÀ[Uð}åÀ­Øwd¬añÁ0Þ­°—ìÑ?àTÀ8x°Ó¸“ƒ ›5,8à°Ý|c›\?o5Æ*ôÅâ^j¬aÙ Õ±ÃÔ°cq,d‰ìÖÇãØ7Ô€æq8¿QÖÇÞ+À¾é`ËJì믙]¿àŒOì;Žðçu¿ã¬^do~½)EîÈ€ûºU;L©o5>¾“ŸæØy¬|'­õ¡ÀëÚa*|«18¶Ã4÷Údd rñ1´5½;9Ûeo|<=§O·Ø6_ 4ìì%€);åuœ‚áçX*'å•ÿU¸¦·*ÃR…–½2,mªW,€qç'@¡E×â>Q‹Ûu€Æí¦A×ãÎÑ+uI®víº€ÀíöÞ¼ÜJuîÒµ¸ üܼ‘B%É'A˜€Ð*ˆ’j½Z.i˜‡1uØ ¤£¶E  E—!Í£)ˆ1sÔ¢òæÍš6aܤxmFm›2dÒÔiÃ;Lf–-‹sr̯ÙÈ‘÷“$Sì>éæL‡eÔžM«Žœ4¸Ùð(óŽsЛ¬Y–NM:sèÈ)¦Í—2nñ^H ÐdÓl9íÔÓOA ÅRJåÁ”SP±Pƒ T±`†YuåáWŽUÖxj±å\rÑe^zñ•â_YFXgˆ)ƘcIFÙfîñ ÙeptöYh£•vZjE¶fl²ÑfnºñæpÂ7†ÆùˆÜ–Ë5÷\tÓñ€Bu×e·]nÞ'Zï…1iÀeßzí½×y…!4î)€1¤Pß}ùí×ß(’7%È“Oz9(V„>Ò…J•!XvÊ©Xd™ÅæZm½Õ—Š<Ü•WP.ú¥VŒƒvXbP,ÖØc‘MæBe@fvB"¹š‘¨9¬’¯Å&¦“·å¶Û•S7\qÇ%B—n~9†tÔ9avÚÀ]š­IÁç{(¤á†üÅÇ\‚ò`ŸM…òç€*@ £êô(ƒB5é@6e) 1ÜÀ!ÃMmõiˆ#*‰¤žxê_ª¶¸ñ«¿ÆJ#­¶â˜ë޽ú2gj ©k¦û²Z®1¹lmÍF -¿Ik%–ÕrÉ\¶Ðmæ˜Þ–î¸ß•+ê¹é®ëgŸÁ põÞ‹Ÿ~ú"Úï¿÷¬ ¤ ¼¥ W o¸iˆbU,âÓ%–Š¢«©²ÈêÇ€…<ã¬6Þš£®¼b¦²`,{&,ÌGËZÍÊΆ3”ÏöÆ3•Ó^™¥µÊ í\ÑÜŠI&¸gv×txt+à&œr–!õo¸Qhîâ'5 bX\wYÊõ¡ü*Z`Ø8 ¼`¤fCˆp¥j³i` Ã-qˆj¢©/®¸ê^|Ãú75Öz#®:îÊ£¯ˆÙòâIJ¬Í’?鬔—ûL­–Öbû9˜Ý~k¦¸h:¹Úô¦8…aNìéìd§Ú¹Áv d—Òð†“Ø‡ ½Ã×ïö•(-ŠxŽ:^Ù:…6 …dm‹AÄ@ŠQoDÖ³ß:¶·ìõM0ß _ÉÈG¸óXës\û„ø¾È1‹rôëY•îǹkyN[¡Cšÿ–@5¥Î D’ÚòŸ2´áƒÒ ¡8øµ¨xc#˜¤Î¶¼´ÐyY™AܤÇÂNU/-ÃÞhÈ=zOVà#Ùø‡2Ãý(q.KRÌܹ&Mn~;Sb怆?¡y tGÝÿ˜fE©®€­EóºØÍ®v—á¢}ÚÆ­Ñk†<¶Ñ„,ÐTVn0Çú2z¿¼cÝ4fC>¶ UYàLV¾ÂõèêSIÄFÞL~:³œ$¶¹-uî’ü]ÒH@Óu’M ÃwÔAøÈ!xhe¾€×A°1„d+˜-—âFˆa…a8èe§ *âñzwC•1»ç7@êp'3_Ê ¬i6nfEt$6+­%j.hß$Z8¥¨´Ò‘ už\X'Ü) y*ÞÚù'dЕ] ž‡wOãåsÊã'.UøOÈzr#èV„™Ç„rLo}Ä[2'>ÁEÔ™è¢41JMŒZ3~9ãhý¡`‚„+õúJÚ³Q>ì>6Ôü3Þ/•j1Æ6u†e(*H«6Ó‡ "W/êÙ%ñ‘Ùìè$»™¿'b2µääd[ÑIþ¼•¥}šë¼æÀÛœÖÓŒÀMc-&TÂ×°08nbåÆT„Bw{‘Ùt)»CBJÔ™­èveÖÝdi4¬I-½iZ‘¢VœS4©S‡.'¨‹¦íSzn:O2Æ„ÁÝ/û[!x„8@1„c(V,ÌÆ \Ìèúq²TmðU±aí*’»Çú,xÅºÍ —÷´QÔ$͹^ò¨´uR“¯žn§Î¸ Fwî:‹÷ê[üŠ–#ä/q¦K†9E¹ÅsAéöÜ"#Xº2¢î2yXÈg6y«O¦p”½{a$FRídH÷÷a’¦—­(Eç—a+×0ài¾·ƒB^íå»ÞÞ—§ù…³>å̼¨÷¨zva0Kä=YªHä ŒÕI‰f$£¯‰áGÛ/Òf5ïHµ,âszù½qméOùÀÚJ‚ÄZ}éYFT¿Y„«žñœkŒT޼m¹±n.ŸkýØ?yÁI†èu1›>`sÊ6X-Úc—•Ãg=/ˆU«ÞLCÍÄ·K1zâ²fSwÛ¯1޳¸[ËãÖ ÈA.° ýì±wšÁò¾,„ëíä{+:ß&6¿ÅKZIw˜ÒYVë–Y›ºön¾ï™vi»m÷Æú•xPÇ})±TFÀè®ãž‡¼q[»×ðÖue ý`C“Ñ&vÊ÷Z–[Ù’ŽyˆW;b·¾ç.õ4LAMS@5ܾÝnx9¼äs˜M†°„ H!1WÉ,Á Tà@°4&ÐbG˜ÈHQdrƒ^ü(š< l –ÿÖ*’;Ýíþ¼ëï~¼àÿ*cñDÉâèxÈ‹Dó9°¼W2/“Èq+œÇ|…rÀÑß=ïBØ{ßÿþ„À³`ð?MÞëK¸0̾ñux|ä5_ç†÷(¨s¾?|Ñ£ îÇ?ýòUÿ|Ö }úƒþõk¿}™`ª*£ øïŸK^$æ‡~¥‡|Ê—zÍ·zn®wxÔ'ŒG·×{pÄù÷yȘcúW~Åw~¤gzɇzÌç|Ð'\^‰'{˜}¶'yø0ã‡yˆB›äz(€ X€#ˆ€A§€({Ö·‚Ú7ƒ¨Bßg„)k–‚ƒsçé‚ëw€í—€…Ç€ñ§xDØ‚šw)´Bàn“`ÈO¨ƒ(‚ìW‚­„7„´Ç‚õÇÞ|X†9 6p‡fh|¨~H‚î„X˜‚pˆ}Eè‚t=º„‡bш}…(…胪v…°÷†ó'‡Xg*´{øj»‰hˆ=X…?ˆ‰ ¨…q˜ˆÜw\3„Šè‰4pƒ˜ƒ˜†S(ˆV(}…(„›èŠ2á‰uø¡¸)6`‹Äw†¹hŠk8ˆª˜…*ØŠ\HyÇUà|_Qyè„~¸ƒjH…lø~¿¨‰[8‡¹·)Ø8ƒ+Ä0Üøy¤ØŒ”xŠãHˆ™ØO‡Šxy_‘þwü¸0àñ…<øŒ½ø nˆÁXLÑ0›’‡2¨ˆ…U•1ŠÞ(‰à¸‹–Hx¾x¸”œH‘i‘1ð$YTFÕ·ÈŒ޼˜Š¹ŠÓˆˆy’Ç•\ÆH‘µ(1:ùËøºX‰¨x‰3)")ŒLñ{Hqtúg„E`,”9”ôGiˆ 9‡M=2À”àWg_ гxÊ€òx∕ YŽ yŽHFw©yL¸t¹“v =±X—ÃøO}©—™!=Ù„-)”θ– y‚n’[—zˆ’{ |™‘¥8)“m ’Õ÷˜Š8†%‹¯¸)8p–XѨ•pI‘{HšdÙ…ù?9ƒ±É–€iš.9‰j“F¹™4™”7y„3p‡J¸)…鈓œÉ›0Ù‘ÑœH陚wåfœûxS qšÉjý$†ˆTöBëÖtíÖqP÷qñf]"guZµYŒsr4£o ^c5^¥pË&sÍÖeìâv=ÇW¿õmÑéC¥"žI÷cKEkæùTO‡L¹öPìYhYõk%ŸZ?õIeöoWvi5v×Z5õvÜöb=Õ÷ Iƒ² æ Äätè)¡QG¡–e¡¾†HîÓY‹¶ušaþF^`s#Jp˜f¢€ò¢†¢>7 ¨X4é{§ y¦t Zž5zž5”ž"³ž;Zuê£%Ÿ¥r]wŸ-—lX–¤—ÆeÇ.x¥êfS:\˜‚qé&d1Ô¥z£’•£Õ5¦½–]X§¡ÕDŸSF¤de¤“†VèµVrʤ mF•—Ù›Ði‚G±Ž¹šÕ‰Tù”Šx—MQ™xÊ–º0¼$1w¦¥¿4£\êXƒú¥8ªžR§dó6rïù£ø6ŸBú¨Æ©ù©l•Ældçlÿ9jZÓbwêmyúª2ã”1š¥ ªnL'¨ÚC¨ Æ«:Ju‰zhð9D^娩øérú¹¬üÙ¬þé'Jjbw*šj©§ßùŽîˆtÜj«ßŠ«áª«…J®‡j®LvuéÊ@Šrj¬ý†¬ðª¬b§¤—š:'ª©§Æ¿i­'T[Qššq4j°y¡ ¦½r<ª¨±Ä:±íz¬ïê¦"Z©3WvètWÐZjúºShù’Y”ýʘœé€ÔÈ•G˜œÇ™­iŠƒ_1µ@Y´Îy´ÕªÙ™¤Ú{æVÈŽS¶$™BX;| ›´^»´'4«å§´ ¨õ U»ê²åÊk ¬gº¡ßu³›³‡±pj©4çI(bvº©m[ oK“S뎈%£äY°N•· vC »kKFo€;a‚ÛhkZeÈv¸oʳý9§Sóò¸ t!;¹Òè‚ Iõ§®++®žË· ë·¢‹¡‹ª®f³ÅV¸mªº;;pqº¸?ë¸ûp´ë¶ ·by—;°™¨*+IpH@;U/[¡dÚ£š%¬h*e„ëu©¢HʺôŠ:b¸1k`¢î/a0²k½+Z»Ù[¥+Yü·»uÛ»*»P'¼ û«îi¼3;¬iÊuö‰º z¤” ½Šë³äT#±[½ûJ  zÀÒx„鸭@Æ»)»¹¿‹°ã*ÁSG¼ÀjÁî[ºjºÁ*©/÷Á–ÂÎê'n;ô‚Â?WÀØ+ª°šBµÉÀÝj·Eà ¦94¼¡»ÃfJºZ¬ñ˦_7©WÄ={Ä(àepœÂ]ËÂ)ž[QUŒ²·ŠÅ·¶·[<ÁíY¦í¸a¬¼+GÆóëÁg̬%ʱlìÆL,¥®j»şKÅ ¾z̲7ÜÇ9ÜÅüÅÁ6ȃ»¼òÛÁf¼Ÿ$º¤Œ¬ÄoÜÄü*¹r{¾gªt[ÅœÉÀ‹¾}ëÉ€loŒº®bLʆlÊCœÈóºÈŒ›ÄlÜʼ˜’,ËŠ»0,k‹•Ç–ËÊÅÜËмAJȧÄɺº œÆõºÆmÌÌ­ê̱Lq³,1•<ž³fÍgÃÁËɾúÇìëËÞ,±£\È,Äñš±Ñ+ÂìÒÈêL­‘ÜÎßÙŽ1`µw,Ãôl£ö¬ËÚ¬Ï2Ûâlº@\¤ãü¼hܺ&ªÌKŒ¯8•¢®¬ÂmøµjSœ†¥1ÜÀ3|ÍÍ~³èªÑÀ Îm±:[¿å,Ò«¼Ì¼Î,ÊÐCÕŽFUË—|·¾›Å|,h¼ÍûÜÍ‹Áð+ÌýÑ@Ò÷;Òé\Ô ÍÎP|­ÐS¹–ü½NýÀ{ܲø ³ë›Ñ‚¼ÓÿÎ}±äìÕÈü³-Ö‘»ÂeϘ;ÏšKÓzëÖRÏ8í°:¼uÝÓ†K¿D¬ÈªœÌ¬ì×× ËMq#•Ó\«j}ň}¾6=ÕÓs Ùí¡wýÓ•}Ì—Í×amÒÒ ¹› Ø,„'+ч]ω½É‹ ×çêØ«ýÍ‘íÚ>í¼]mÙ‹ÙDmÛl6»NÌÙ»½½›‚­ç潆ɥ h8ÌØq­Ú`L×­í®ÍKÙÆœÊÑÍ×™MÝÇ ÝÙ½-—¿-Óí¥Ã}ÏÅ­¾Ç=º¡ŒÞ?ÌܓȨ¬±Ò;Â}-ßC ”‹Ço S° á¾RpbPÞÇ0þ(3"îòZ(á§Þá•QaAâûA3 )žá,Îááz¶©ck, ¸5 0ã6®‚*®á:þ•‡ç{M98@âC¾G>„Ižãî{‡G3°2`$ÎuPomT~ã+Þâ¶×”6æl0æ5ŽæJžåNÁ06¶ÅIâ°#ï"áwPr€o^UŽái®ã³,6°Gâ)‚tpk‚>æ…^A8®æ^Èè1À0Bâpd~û —~åš>¹KÆ(Uqð¸ql|ê™®ã4°è¾§RAâsÀ @êe`êrŽåLq]~TUq$.ìyP¢Qz¶~è.þáÊÎ0ê¢íÒîçÕ>çn’0ÞìDánìÑäÉØãæÎíå/îÅ®æÙþâVÑêŽ&díÓ~énïžÚnSAþè‘>qѱðK~qÚÞäkãë ßðõ¾äµèå>Þ$~hÀtàð.žñ2@ò•æe0„>|AVà«aÎ ðòtó,Ð{؆g>fì:¯ì!ÁFôHŸôGoì¾§c•ácGU}6ÏÆt`k¾ó=¿€@/jžë åWôJ?öHÏôõž.õ0_õ9_X>[¯îؾ6E!ödOöto‘TÃ7õ8õ<÷ZôãwŸ÷Š¿÷ Þé•(ølo{>øq?÷šö4àø%÷ŠŸôê^œÚ~x~¿öV¯óbXyCðÆ~‹û柯÷j>ôÞwú7?ùª¿‡•gœÇõ:.ûÄOûµ¯ôÆîõZö‘úmµ¬ü‘§æÅ?ûžüÂí&écj¿û©ïö«ÿû®Oý±_þ×üŒãÍïýÏÏ0¾ßúÁÿúåoýØú™¿åœfh|®ùq~s` ¤4Òð4Ë[õ8†一07JÀh* ¼€0VÀÈ% ü€ pN@K ì€Ðª@è3 TPR@Yà T/0Ú@\€°@»³ ìt"€î@ ¸?`Ä€OPÊÀe` ´‚L :A-ˆ`¬‚,0 †Á-8Á ¤‚f0JÁ2ˆ} $€As `}xðòÀ ˜Yßd‚}ð Á?!!„‚†P˜ál„8ðÂ>è- €pp&@:èãì`ø„ ðzŸQ8 Ca(¬!¢BS I!)d…ŸPªBX +,…°êÂTH o¡÷¡…²PöB_è{a0ŒÃðÃ]( s¡/¤…¶ð&CW¸ ƒá% ‚qJ#Ø “ è…µ(Ö@ Å¡8‡ã0’CXhÓ!4TêP–ÃxX‹Ð¡9œ‡íЪÃbÈéa ЇáÆC€8ßa;¬‡¹ð Dqx 3¡܆œzÃjÈ Ë! ¸ˆq²BfÈ ÙaFĈïðþCø5¢)䈫$~DЍ ù!+,‰ÑrD‹XYb3d…&šÄS( UbFlˆBð!¢n( h Hñ(–Ä™âR´G1*ú<×C KXñ*fŬX»bRDŠð)6E±¿bW (Vq+jÅ«ÈåÒY¤Šfñ$9E¦hÉb\|‹i±-®Eµˆ¥¢T$‹N,:À»ˆ»¢^ÄŠjÑ-F´³á&\€HÐ0+#e¼Œ–3jFËX9ãfÔŒŸÑ3vÆÏ(?ch ¢ñ4žFјS£\›±5šFÙÈi#h¯‘5ÂÆÌh+ccÔ„s2ÚÁ!pˆ£q¼8Ê)Çäè“¢SxŽÏ1.&Çé¨ãq,F;jG#`‹£ TÔ‘:6Ǩ¡£t\ŽÕÑ;^Çìȱcw$ŽáQ9Å»X£csŒÉñ=Þ€í¸õ#~”#qÑ(ÖG§pã£~äìñ7 E¢`ô‡;~À¹¸#^¼‹€Ñ*DX8!£…\Œ®CRHt]¢)ì#òCžE)!ä;D‘bQE.Æ»¨ µáPŒˆ Ò)Ø«¸#u$ü‘>2H€9$d‘’D2II%ù±ct’Ù‘^2 +à°€WI.É-©%µ¤€T’]òHŠI09&¹d™|’JNÉ'ù$ °’XÒ„I2©$käc¬ƒÞШèI=© Ÿü“€ÒðèÄ=¹'Uˆ¡<”ˆR…J=™ab |”~rP.J‹(+¥¢œ”:ÑBJH))¥¥´”“²ä9ÊG©)e§$”Ÿ²RÚÉàˆ'cª|•°2VÊÊWé*g¥­¼•¸òPÖÊ\É+{å§Ü•¾RV®Jˆ(½á<–VÐM"Ëei™¥l–Ér@2Ëi -©å³dʲZjKjÉ-Ï È–Ý’ZËY,I`0ç2]¢Ëu™.Õ¥»d—ë^¾Kw9/åe¼œ—æR^ÖËzi/÷å¾´—ý²_:Àù.æ¼$˜ðÒ`êK{90&Âl— S]ŽKi¡´€D cjÌŒé!áܘ³cöÁEh@¦Æ™yðšLŽ9 S¦" +eâA•3[æÌÔ€+“L‹I3M朘8ÒúÂÐ3AæšE3djÀ¡I2sæÑô…Iód.M¨ù2æÔ¼…Q“ef@¤‰3W&ÉäšÐjf@ Y.á!ÕÌ€E mªÍ´ù4±¦p3nÂͶé IæÚ\›t“~@¹)7óæ(ü€ðnªM¿é}ö&ßœ›WÓ~@Á™6¿æÙÄ€‡qŽÍð1aP´‘s"ÂBKIWâæ¬”3#†DÐéAâçL”¡Ót²BKi"C¡N†¤ó%ÂD؉:aa£¬‰§Q¦Î‹H6[å7̇’Æ«H;u';ž£³v²Âá!caì4…²xêÊß¹<£ô4”åyOìi;¿¥õÜž*${ªÅÞÙ ['(t“»³yôY:cb÷dŸ²w.Ï™>…ç€4ŸŸðuÂBø =gçþ¤ŸÝSÎÏú˜>ÉgQt˜&ºIP™@Kâ­”¡òv~Äš(C¥N¤ ˆÒ‚ÂDY袼 ÒƒJZ¥¡Ô 4„ªJÊù/ç,Ÿ’0ÒÂ!@Ck( …”p†ÚЊC_¦Ý¡C ‡ÊPXDoè£Ì¡Ý³ˆÑ#ªè¢ЉÚÐR(‘(+T¢Ò€6H9ÉEߤí¢`ô‹:…0JFÅh£gԌ¨FËh}£iÂÑ9*'Ùh¥£x”ŒÆÑ<ªFâý£f´ŒjQOÖ§!ežˆthÒEzH-dbš‡ôæDDªi$]¤Žô0BRFŠI‡ç$­¤¾“6RJÚ7é%ͤjцÒKº>Qi)õ…ƒÔºÉ¾8 !å,‘V‘€þÏú-q©›´¥¿ô-ÐZq)-À´– S]JL‘é2-TPÞÒg ia,õ‚R!›"ǃ¸©7í¦Ú4œ†Sä¸MÁé7ý¦äT›¦ÓtšÍ©;E§ãÔð¬ÓlzNß)8§•'žÖÓv Oçi<-§õ´ŸªS}jO÷錧ÿ´ *T|zM€(5¢…• Q+jDm–Õ¢æL‰*Qw G­¨0gfÔ‹jG*Dݨ&Õ£šÔœ8?ªÀ¨.¥~T•úQEªKU‚2Ф ™šQw`Ce‘sQFF Z!‡'.½‹a1EUaJT™¢PE‹Mµ2|R½èKÇãªRªjñ¨ŽGéIÁ#SݪX•ªžÅŸ AèG„”"tOöÉGÉ:è•2­òI¸ (åªQ‘ ­–Õ·Zõj5«1šþI»**ûê£l¨`&Ö ¸X-`c­€L3†*ÖÇÉX)«cµ¬³Uê6·¦f}¬F´FVÂI4§ÞÔ€ ÕbæLÕº2Y«Ét­ Ób†ÔÖWkm¥­}жæV¯yoëkõ­±¸nLØ:\álý­»¹æÁœ‰X¡æK}®F@ˆV_]¡ët½…$°ºF×ëê µëKå®zÓ»rVÅiZG¡w ­ŸÕ¹F×õ*]‰¡d­¬·ð¼‚Ö†j?™©)džõµ<ŠO½øùg(į»T¿Oµ˜_¡#þl¥‡±À>Çýš¬Sè¯ß³™.Ø«*¤ •vRfØE¹a %¤ ‹öQbXbåˆ5±“R°úÉ (YìŸt±+¶ÄJËaIlE±‹’¾Øjºc'¬„}°=ÈâÄo9Lïk‘ý¯Gö|&ÙOè&¬U²öÉFY(+`‡ì“e²Kv}Ȇ †@—ý²4Ì~Y"€Ȭ™Å1@¤Ù5+`€y³nÎÂY5Kg×l™½³fVÌzÙ! õ, 8³g–ͲY7Kh߬œ%´u¶ÎâY<ëgÃìžý²!uÑ’YAKg m¡=´r$ÑÚY@[fí£}´œ–ÌFMÛf1-¦…¤¹„Z²š(g€«}µ®–gj@K ka­¬Í€mµÖ¾Ú[‹i­®-NÓúZ]ëƒm¶µ–×^@dkkë{¶•ò×[JˆZY¨åtŒ¬†Ú€mËm»­·µ9 ÜŠÛqKnsÀ·=·Ü¶Üª[q‹n º]·ëݾ[x[nåí¹˜ô–ÜÚÛo›oõí¾í¶ëßÖÛ›nû­¸å²Guó)ܵQf@Ã}¸P®/‚È…»p®Å}¸÷,FŠËp/®Åõ¥¾”ãn>‹qA“äF\“[E®ï¸%7ãBU‘ s-®¦”¹TÑåªÜ"€SkØÆekºÅèX8?¦÷)£ðŽÂ¡{þf$ÞG•>GWH]¡\jºzêºBt ­ÓÐô…Z—n¾QÈY#à-t n3ìŽCI g )„ާõézŸ¡{½¬¶°>ÝIw äÅ”“[ÖÚbCàH,}§/•“”1À” cÖçÚÍlãâÃ.°•Ü»8Éè¡q9å }hhVNÇ7P¯—EŽ7×ô¹Äxe€ã]Ÿ7êÕ"Êky7ÄåÕ¼3 tÞ.;b€½æô–^7ëe¯¥ŒFqí¶ÞV {#ï好%¯ö¢ÂÐ{u¯«å½¤×÷_ã‹x/rô¢®—DR%oó•¾”÷rÞdÄ{Aïõ½¿×÷6Ô¸)ë/ ¤¿ö7ÿNð˜í/þí¿›òÿÎXþ €0®¢ð“_|°>¬‚×!bΠé ï¢ðk`«Ê›Â`ìÀ~1ƒà L‚Að6‹"¸«àÌ‚Iæ ^Á¹È`4Ë6jpÉ3*6¸ÏàŒf{0r¹Á98ß`L„yp ȉ@ø'a\„›ðÂq s^#ì„¡° ‹P˜ Sa)……°®ÂR˜ Æ/̃¹°vÂÍ5¾FNðj^×pzÅ®Õ wÖɪ†'ö>‘SŒ×¸K‡»«&¯žµóÍÑZ^ñðæÃ0 ûa;ì gšyxh:âȉ1ã„ćxNbê9÷°&¾Äœ˜ßÂM,ˆåfd%Å‹x[bÁ©ˆIa%ÅA ÄâYŒ‰E15”Ÿ8SâLì}rq.®ÅªXúb]Šù¦'îųøcSü ‡ñ#^Æqó'cZ á&$uÆ 5TþÒGé&µq-åÆ2‚Ùb Žë£7&DzOÊ&Ë€ÿ¤:^”Û8‡ãuüå1…Žç™–ãò˜é1:–¦ó×c€lŽSì8ÖÇò¸ äìŽ2¡dÇÉ´<æcè‘ñ±?FÈø?äÜë#—ŒÙOvã ²9¦÷ø9Väç’C²á™¥-š¶c‘ŽI²KÎ¥'Y,Þä”m2C¦É9»Ðl{@90Wͪ'wm(e¶)—²R®ªò[e±:#E®uÊ›*ƒÕ§hŸjˆ´ÊM™ãje³8•±¢QL¸Xù*‹å·ØP¹œ[ž\î ¿ÅOûey®]†<÷Œâ€ßË—q@ 90Ó€! ³a¾ÂàÑsàSËKs€i£¾72ßË*³Ã¸où-;á› "é²—½ËwY/÷åß+˜óa>ÌNتEÆü˜3•Ì’Ù2[f.ûš-‚m>I·ù6—Q|šc ðƧmt0æfÜ|’гEØÍñÔ Ká ™‡3bvÎÚ7Œòfåì…sm6ÎÄy8ÛQ1:}órf¨BÛ^j!-%ó´”å¹RžçJi!Mè'JŒèyxšgøÌžås¥ìʇ1>«ÅùœŸëó~VωÑ=¯ ûœ(×s¢¤¯¢ôMÊ#° ´ :BChí !´…~Ð'CÛ íx7´†f¥kôRh-¡Kôˆ^ÐÚBkè Wô†Ñ$šB“À¡Ot‰VÑúE·è}q`´¦Ñ4€þèí¢{ôŽvÑ uøܼ!”´’6*b2Ofˆ›ô—ûrK[m ™/îtÒL1ƒi(½ #3•žµVzKgé+Í¥¥´—Ö€cúJÇé AÍ´Å­ÒMOM§i,í¦.œÓ_iI“i).bÆÓZKïé6í{ïôÏ Ï„—\úNZH©+µ¥¾Ô˜šRØLÍ©;µ§þ„›úS‹êQ=dIµ¨N­3U«êUͪ[µlí­®:VËêYýªiµ­¾Õ±ºØâêYsŒ¯æ¼}’ó ëcUõ¯”Æz oÕd½€ƒu².ÖÃZX#ëhf—5µÎ”à‘Z?¾û¨­§µ±ÆÌÚYGëùÈ­“µ·Ö4R/H |Œÿaòy×A ½Æ×xM¯“$…×ï×kzY÷u¾¦®þ:Ük­¯ñµÀ~†[›Íym°6¾.ØûÚa×kJ°%ö¿fØûºkâi,‹!©3ÆÛcoD÷ꌶ2üØ·8d?C”M Kv»ž†¯Ð‹ì“؈9¶É®›Ô“fƒl_<³C¡ŽÙ'hSC– …ö+ìž=»®l£]´uöÐfÚQ7gŸÂ¥í´6Ô‰Wû&mQHµ§ö-D¸ÔT%‡mŠ<¶ii0]Œ<Ùl+S¹¶ ãÙvÛ2¹ª¾íÂØ¶éöܦŠu›*¦mµM¶Ùvàe•sð®ë²9Korá>Ü*y#î´½’÷O~ÉŽ»p«XȹKrG®Ü{cnË ”ù±ºžÀ„sËíÍÝ·á¶ãÞÛ£›t;…Ô­ºC4ßVݬ»uÓƒ,»Ë6 °°8×äNH–+séï[äÌ8wwçn¼è»yw@Þ…Qxo ·/%™Î›yONÀÝBų¤Ö¶]<õ^"pe÷fE ÇÔ€ð}Ttš5ß/u}V@õ]2LûŽ€œw0èäX”rýÞ|½w}æïc¸wÿF»E ï<ôR9OoÜæ ˜cx ß6‚B]H)8çé½<|oïݽ§ø&ßDsó½TnØ7ûæÞ…Ïoù¿ïw¡VÊû{ÿïÿmƒx ÏF±€£Z#À¥#`ïõá ú÷ñÒÁ¸œœà<‰ßîÏýB(Ü{â 7{J(þÄ÷²çËW!‹cf‡1)·¸‡ÐWÜŠSñ(NcQåGŽ£y/ñ-*½¸Oã¿÷ŒKqB9ÏxÇânü*´ñ5ÆÓ¸•QœŠkJ8Îǹø¢Ì㘎〟*rE÷[t¹›-Sܽ· $wäU+³ã»mɱ²Â¨Ü’|)cnäs=y$«Lœ(çHi¹-% —~åb(–ÃòY.Ëk9,ßì¸[Òò]nË{9-Ç嬜^KÈË‹¹/ïåÀ¼>vKw{̹3Gà,0Igé%M¨«9lžÒŒsšƒikÎÍ}¯#Ó`ºNwsk95¿æè<;2Np~έ¹8‡Íåœ+éq~Í¿¹9§çî\Äó{žÎë9ãä²U² ôÈŽºA×€nrÿôJ˜Ði É\èm0•g'nÏ+(™ý¢#H'éQÙëz½è £oôè-zFéí‘=BK“Ò5zJ_“,ð¼†Ô“îÒäJ÷è/µ¥£tþØÑµ«N¿èó¥ÇÀ˜ŽÓiúNo¨ºæa‘Ê8-æR§¨MÝÙ>u“éˆzädê‚ÓªÎã 2«z œê]=ª+õ«Î[½úX?œXýnÎ_FhúK7ç"; èfÛz@·Š7pUÉïÍ* 3í^oè9@Ì€—Š1Õlؼè°¡?] x%ѦLÛJFv %»JÇ€ÄÖoß x¬SxC`î^@×û ¥dÛ¼H]žöµ+foÓð­»ï4`öz[·íVrŒ^@¼¾lÒ^~}ÙzoÂ^û`ÿ˜†j͉3;eì’U²§ÉçîØ«»fgìzp³ÓõOXA»h·€¤=˜ö¤k%C!?ä ÏÒX#.Ï}ŽÅ¹H÷Í’|'ÌN!×9%½º¥‚œ4<†2 ¼õ ­ps`TÂ\®~óIÐ{q€?*yyè*ú#£B<ä}ð8øÂ—¼“dcl „‡ð~óAøœˆáA|¨ðqÂGx_ò;_$à»ìE\@ìý%ëw7ë¥ò}¿HM½ÝøžKÝ{ydïNÁÆewQ®@Ê;.ï($ÀîäñZ‚Ê[y£Ð0hß”¯òW>8‘ å¯ü…ÈYÌ^âåË NO Xý˜n À/Ðxbý¬¯r9!È9ðb‡¥wO Ê¡ „ðtÎly Ç>Ùgï@èÀXö, Å M3æ€Á%e *\ MBfrü÷¯D(SZ!óFL™3\ÀQ£"”(A% 6et€xA§ œ0bä 1Œ4dƼ±©²Ä9eÂÐy#Gf’9l¸!CDN˜; Ì0ÁæM¢G“ÒIóÆ ¥1A‘“D:g@è”[C‡N®¼! *Cü·„5¬kr‘K8¾÷M0i0ÓtÆ$å( ÚÁŬ#ž0tÌZsÈ~4:X‹yð_ï¬Õ>ÒÌ•‰Á ß`)„ <A‘üÇ1ê°CÛaA8†Žii† ø—µ„I9aÇTÈB¸Ð‹1ô¡€ø!A†Ãó] k’FkåP‰l ¢ØæxÄ$þh‰®¹ÙÛÅd½ìAVÔb wØÂÆ07\ã mÁ;Úí‡AbŠHÇ9ÎÀ#a¢ÙH&5ÆñKi˜‘`¾`¹#Ü“yæ0!2`… æÁCÌò@ü°H3aåµÐ“Kó´—/˜V~9¢¼ ”)ƒ@Ö±=M¨ u°[f8¡Ê% ™ó[S¶³c«œÐ¾ Á{Íd«â+•d f™fXaR`9m.&.¼ ;9˜¬}Îhk ¥½4Ö?[Ž—Áô¥†r9ÌnS”Êdæ7§I†j‚àšÙì$7]äMUfEIíÁ8±RNóŒëLL. Qxʉ“¥FñÉ0}BôŸkèc¾¤æ’ÄÉá ébŠ@Mi=µŠGû› ÎŽµò•±œe-o9„\Nˆ˜ñLè.+ÄЭ¦Ç›U ¤BúϨM¦Kgб™v­}ʃ”A{n´˜Fý¦9u9Òs6õ¤ 8êY ‚”®tŸ.E LëéV. ƒ5*b™9’ø‰Í2ÈAjÍȲT­ÌÔ¡eaà‚à 3д5=;ÙxJf´.ˆA hÀYÕV´°vhK\çj·™T<ä1‚à×%Þö‚’…¨ÿ.¸‡Á¦õÅ [SëÔÚjf¬·µ&êں͸p4¯æQgœ—v~ºñT,=eÚÝǺ÷BHqšR–{Q ÂŒŸ;}n€ÊC¡–’ HЖª×pžª %hé¿•-½›O³Ã<>¿rÕ5T€¹ƒuà`©jU¯öÒÄÁl(/EØ™´–©Ófu©KQ‹b”»÷|+S÷*NrÎÑœcxÉKó¾X½1µ+Má€ÜÞ7‰Þ'}3¸AVéYÜ+è1Ý9¬úOw´ƒ·7ÀïMëb–í Z€¸¶H¨ cpH-_€þ’jæÙ®º²•1äÖ¡h°Ö#‡¹¬ðÙz~n G_À;ŸÏ…Þó€ýçE³AÐ&´ž[EóÒ tA ›i¬¤Ö³µ ›«=È™çÔÚû¥€ØªCG’ÄdædaÇû¼²Ø ¸žÜ+ÏfžÅØ!ØT£Ýä~ÔDÚ+§Ú žR69fR_H+rð,‹¯Í+èŠZâ\áÄ ö˜‡R«ÛXÌcJ‚Ýq]¸ã¶1-‹ uÈVgªÑ )Wu¨ß t‡ÎRãÕ‹AÉ 7fY"D‡˜«/ ”(nñn\¬#Ùà  LLsÔ˜xx³µ¬¥Cjê¥ÐkZxv¨›èn3*_p]ž2lHá9³nÍOþp·â|*ãÞ~eÝ”#ÝÝ®Ë-[a\ë03NO Ô‹5¡9ÔA ª828²Î±U¸ùÄ]³µW|ç·åe .H-süÝ!»{ËãÎUÐÊ÷¥/”„ïáBP"“Tæ Ál{“–ÉiCúæL-¡ yXÃA°æÝÁ œ‰ >º½íygû»Ýpw—o×ë`çh­QÓ±¯T}ÔmáofûÑã^Æ:¼w¾kvßχº0À5”.Ÿù/7ôvW}ôß~zì¶Òç|â”ÿßooˆ 7¼a•¦Ö–H¦hâ¯P¢ÉIâå­LŒgJÔþ' êʺaÔuùâ ¹ˆDB`*?×V À%CHäfn2Á%\n€w"€v²'Äu€“€÷²€Ö'\¡$#g3å"”¢Rvc€€H•Âø¸!¸IqE‚+X€ë’‚³‚-øP€03nÒ€›$nC€(˜_P‚1SŸñ ƒebƒ_">ƒ#„¨MSÜSXNH3]x„U‚¼´¾…-É’(i@5HQ e!d €V“`.‚Vw0!d8"h%m@‡z8lЇy˜FÕ,܇¤Æ}ȇµ0Kˆ¤6s.‹á*HXw8G”Ø*˜ˆs4‡­›h‰F•(oÐ(Q¨†e1!õavÉówôqaî3o†±‡QâPP‹g@"»'©Á3b)_0y“ñêS%«1ÈXS°ŒvÓ\ÇøÉ8ØØŒöŒø£,epü•sðdõn¢±„Áõ;ÍòRÂŽî˜gX%b`/ûUí(À¥<úÈôx#à¨>ûØIö)2R"å‘ ÙéŒ3‚0ÁLçŒ.R‘ I9Í•d%³<:SEÔ02>ܘc ¤Ud’ ³‘gÀt Ô%…Å0*Ô,Ikpt òa4æ”7’DµÆCv3\FÉ}t”ŽåX$•}„mJGJ©0%r#Np*iŽþ(–Ã¥óX鸎ÿ8cÕî&biɃ¡ŽSÑn‰“L'u”]IyÎŒ9fYBikP9Añ%hYŽ!‰—c‘èQ‰)bÊ‘ˆ%°Ýø“×GU2ÉtÛ¡añ´ €# 2ÀV/8§™š2@[­™ɇšª‰Dµ9±©šŒT›4Л2µi¸Ù39 ½9:Ôš{áÇ)­‰Ò™š3Àša°6М´éšÝyœºéš7М¿éš8Мĩœ×9›#Q›ÝI6)‹Ê_0A2 $N Y3ñ+LzÈ9r¤— :ãœÚM9£1@3q桱gãÁ þùáH3Ô}‚ Š Ú]#JA0l#ÊšCðða)a0¢´Yš#ª›E¡ Ñ>ú›Eî1iС3@œE¢:ã¡•ñIp£M:›¥<:¡0¤4ðžI@¤z¤ JÏ™L¦Ôé*Ê¢³ÅšO ¥aJ›Op¥>š¥aª›Oà¥FÚ¡4ð›OP¦³EœO¦MJO:Iò# 7[UZn5ðžU §?Ê 5ðœU€§J©ÔY~Z¬™˜ ¦ŽJ›Zp¨eA©ãÙ¨5pž’J§Žºž¡Ú¡¦•œZ¥ tO ŠIÉ)¨¹úœ’/‰3ñ¤‘«¬IT¬RŒ1`´9p¤7§Ú¬º™£‘«¿)iÛ”«ÄÙòAÃú¤541Ô¬Uu$FÊ0Á ›1誮dpo0a 7ðœgP&8;@R¯÷j~üƯ0sO–R!ËšûªR8îlÁ8û¬i஺¹gîú›¾Ám°ìá®Ä©ö:øú¤õr‚‘møZ¥%{²óG1à3á4lÁƪ1¨Á 8ðœtp§ÈîA(‹Ôé(VÑ'}ƒ³¬¹L{¯8@›ñš {lP‘8«›O‹÷Fµ/û›WÛ² ;/Kœ {°ÅÒI‹³Oú2N˜©/[¥2  ìAV j›ÿ‰…çu2 ´sûœè*àÊŸ7·Ô Ms«°V!¢:ñ £:¡›­Z¡:ñ›¼ªÄ9#c€¨sû¤äVˆ«YÚ$¤W³ý飡y:ºÏYƒá³3›m{A&º¬ £&8£{A›ª‹® ¤1£«›hPŒB¡ 2º¿i‹ª›S{Aœ¦ z{‘¶’²£[¥c@»2ÚŸ1ðžByðµ "²5I±¸:¾Ô gi ¡sZ¡àËš¨aº™ ¾´ Œ‡[¾Žêbn ¾¿éÛ£“ ¾ÄyME¿/ëbe ¾UÚ’$lPuªùžë«šÏI*Å¢ªID¾ý¹š3ñý‹¥ì;›«¬›AP|¼­‚J’ªIœè£A\‰ü¤¶X¿\¥@rÁå; mx¤6[V«ùœHB§ºšÔÉgr/ý™3ñM:« §*¼šº‰>ÿ³òÄ’k©1#r ¼I:u¿=aÆ>«Y¥u`ÂîiÆ,¦ÉY¾4@yÇyñzмýI´ùKºÉ/18óÇ’k·§¡»ý—‹¬¤z3›O 3QáijÉÃSÜŸúÁå[©üæ32÷F2PƒË~kØhœü©ù{3Aï²1œ¬›Z:ò©#žYŸÛ1yÐßc7¦™Ë²Ëw‘U$BmEzk RÒ–y#m©6y¢IšúÁûXq)  ¤NvÀ1gègâLŸ ù×OÓ“©q[i”,) (àËÀÌCÝ<“à\ÎÊCÎÀõ™©ÑË¿Ì@tìlØϸ¥ÏæÁÏÆüÏ÷™ŸõòMtéÎ=t•öÕ}]e!’!óéÏ Íæ1ÌìÌÙ–Ü1S Ð’\19i{×unõ mŸe ù8"5½7#_ÐÍÃ%=îa\;Òb©ClÕMÙCCME­$ÔlÎÝÓ:åÑ:rñÔ\/O9OñÄÏw0aGéÕñx?ÃÏp™@.ÓDP‘•9AUO#Ozi•{¨%D](tÕ’$Ò ×ñØÐH ."Ø/¼”†-%  Øl‘IŽ]-s Y‘Ùw ´¥×´?}Í[ö;´„Ù`ÝÒ‰×ÄÇÙ{=Pí×v3t#² vÙ~UÚ*D63R#) aÎHY6o}#Q¤XÙÑSñ;Zm&pØÕÃÍKÁÍ1c]¤e=ÜhÐänãg›×Ë-×™]רýÒ8´Ú ýÚ¢ÍÏ“]Ù²dÚšíÒL×Ù¶÷Ù|­Þt%Û‚Û§½Ùy]ß­Úù]i³]Û˜ A¸Š~ÅÛ4b# ÃÒÓÝ#RÜǺѧܭ¤#26ÒŽòçñ# ó+ñÑyˆ¬1¸Fï³kDö•¸tæ¡(ž0óÁ1}ÈH 1”MRÃmÿb7#„QÀW½ÜU"-AvC¶?2î^ÙË"!tväXV åg¨×MNZEãsÿÒ-®òaBä:"-B6ÖòÕ`!bž¤µ<áÓS1ŒýUŒ!xåë80{ŠD- x®ç6€DG¼R#Ñç7.@[Šg&Q£`6mŠÔF…–cç´éd-޵:dD8t¥ÅÙ ^d#ã3_§œèrÈ[ž91 |ëÖÅÒƒîÓs54`GD3Yþä4Gàé¡ QÀ#ч#11ƒˆA1£ÜLð:t{ÁÕÞÍZ­ZÞ5°~Yþ1‚ €´ˆLlÐÍÔ7ÀHÇ®ªìÇÑìkðìѱÔë×^€lÞíÛîíÿ2' î8cYjîÕaéÓ&f|t3?˜N<›Þé•„Ê¡¥Uêe<œ¬ê³µ¥…öê±.ëÔEë lëÇN"RÎëÝþëÇ.cú­è^ëžìËïò.íõní|íùîû¾ïà.ß:WÉAð-À0_;ì®CîÎìïRí6_í7¯óÚ®ïVÿíþîsźs@ô/K[EŒô{ÊVKOóO?ïsóSïUÏóWßï`î\€P\/;a¶G™Né|é¼–¾Æ0"ñ¾n~ŽD§Uñ=yêß[Ïêë?ëRë~…ë'Ÿç)ëÀÎòÂîòý¡îH/óïÞô5OïRïÙÞóq¿BYDðNPDÊ´µîcöªŸöQoï9ïö°÷X?÷(P÷‹¡Aö’÷Vy¿÷ Om _éØqéƒoC’þð~¥Cøºør‘½ùO[ßêraù /c"¯$$_;&¯ëzáùþ¡òPîiÃ0`úÈÞ13ÿûnê±>á¨^ñãvÇïßÑ>Û‡û:±‹ çéõ¾ÿçì€ßÄyøÅ>Ÿ7ûêðúÀëŸE?øæÂû{ ïú ¾Wø§ë~«üQT¶'`ê«€O0øa@X`¸3uÚ$ H¯ç[€îKzdϘ½&¸ú֞̀TÐø!@¹§ëT ŒaR‡HýP õ›+°×l?Ã÷=ÝlÖiüÙ@ɇ9žTþ!äe¾‘·ù„àüëurÁÞ¿â¡cžÿû‚NPÚAHõ ¿“}È ½2°#`ò‚L ªÂ(È 5 +ä€È *ž5HôŒìCeïæÂTÙžëÛy{ðþ¼º—[xZ ‚°à©@è÷nà›~ Ïwp?GxÇBlA'5ÕQÂUg }μ|š°ah>ÂùäÊ«¢0Øá?—׬è!D…uŽA_ ¡4ѤܵA*Åÿà ïÓ…Íð¶Â‚hg_ 1%màH¿mX½a D„ /ûµqÈ_y„æ°?HBu8ùÚ¡«Ã„Gð¾¿z8A¡ýÓ‡¤°¼+Sø™¡l{y"šA 7faVHˆDï´ì> Øîè \…1(¾BƒxËB”[#nDØ[Æ7äˆáPÓ•DØø¾B‡¦n¶Dô÷ןÜ„î¯溚øùœÜlyÄ|½þ×¢3œ‚Ðp*VDä@”ÑKR ¢½0xb`<€°P<ß0¶b߉áã#b?¸] Iô~øÊú„•ùÖbåã1.Á’7?a]Ôr£0 &©½ø—¡_”ˆQ0EY¨Û 1ä}M >EèßžPäƒZïVu½ÁöšÖ1älrP.Æ]øñàcŒ}ÓÐîÉ€lHO G<„›Qf:÷Ò+‰luzᔑÆòÇÙ"LÄ|òÒCOx‹ ]Œ#‚ØÍÆ%ˆúlãp¬ŽQ7"G¢˜‡žoLcÀQé9EÆ‹#d¤Š(`ë¥åÈÏÝëzŽÉ°/þGÜ(!cv$ÛQï‘Àéç½¢fL„„¯3>xCÝër|i‘%VB÷ˆácÇA°5ÖÇPxq¢l¼´±?NÇˆØ ;$vœ}¼Ñ@ž»À¤t€Ô‘C^GWøó„¡U †²2Œ=d5$ƒ$ŽÏÐ8 ÈÈH÷"$Yht¨;’Ènh"Á#ŠÔ~ãqšG(ÑâÅ“‘íñ4ò@9sd糉ùPôíCbG–|’ñ'†É9`jH’´0KvÁàè¿$€ÌröIH i›ÌŒn2$rÆ89!D"Ë FÞÉÒ8#õ$ ¨¦,š^ïhbÈ.)>$â“ÙñîñNOY5A€®:•ðâõFÂ$]@’Ú,qDÆ–œe@ã 0.Ž@‘`(ÝÁ u,jP< ÉVV• …™!ŽÔ95C/ ¾2}BÀÄm(Q¡38†‡ º*j4(€çt& †6(PG[LKl¹œq$Qh;¿RC9F@9ÔBºðU]ø¢²cŒÎÐØ’îæHƒ)4ÑOêr‰8€ŠJ’^Ý• qà€Ò6K!u‡†ŠÑ"ZFù(a’ð/d>ÒH Gíœ='t‰*ÑP¡G)Äc|à/jTªDWH5ƒ¶XqÄS1ÒÍrè,¡Ÿ”†šRðg~B*奯‘š¸8ZDI˵££4"J‡Q©/ S¯®PºR[*L×Ti¹:ÁT’ÊP2ÊLË!é¥ÔL…ºZŠ„éÕÅ4”"S<ÊD»)øË^át¶DÓÍ’½ i S!”ÕSHzO')7u¢ÞøQø×LC¡=…¡ç4—Ñ::îè-¥õž2‚*¦Xéd8¨.‹'\Ó‹ÊOµ©B­¤U¶ÄÓ€Ú 0ê0õ¤éô˜6ÔdÚNè %ÏQ½ÒðçñtˆËj£¶4.RÏF·)©§¦TœŠ„j'%¢~Ř2TàPIé2u¢tË G)H;ª X¤ …â,*zF=¨ m¥=õ£2SL*UŸéÖ²ªèñ¨¢Ó¤ªNW*;…¨rn…LªÊU3ƒ"¥Z´ªvÕª:H=*%«ŒoªnÕŽ2ÕªBUª¢ô­>UK:J_m¥²¥®ÂлšUßd «•cpÍì•IÑcdí¨†5¥.Õ¦ªL÷(×¼œ€ô«z¿ŠÚU)Vm¤«Î¤úÓŸJ鏿 §§Õ¤&TÑšXêbåš.“ªV¹`L*e…­ÍJ¶úÔ9RI‹'nõ¬Å´žT¤:GU*Se©pUWá+ÁJñä ù»’ж%n¨³ò«ÿT3xVpBý\!õ~éÎHU„JLÙªu%­-U¨nW³ºÿªhyuÊeÑÒÂHð%¤-˜5½žQsÈ^¥è€ GÔ„V†Ðj_G+v]¬ñ“Ú=SBI!«fÉ©±tÒÓ[T,måL'¤RbIì=Ý­¶·:Õ=Ú"Qe&dPÍÊ¢F.é*[°ª÷Ë——fÖðçYé– fÈJW[]-¬b¥±H6=®ØÏ*MˆÅ±>V/è„+;[™+3²æË¬‚Ù-[b§ëZm²2¶´vS³³¤(kÍ /«¦jÑ7[^wªVí²ºÔ‰§:IQêË Í®SßJc1ƒ‹°#•äÔçµQ3ª¢-ªÜÉ¢šX/ëD‘“ü¤¨63\Ú@ Jïë…5­ë·¾Vz $E[I¤Ãud™ZôzbC!ªDN€=®&@{šÖë"…§ÖÌÖ¶z]ŸlmE¨õ4 ×7+Lëf!¶¬–Òr¶‘¾ÂéDm¶0t¢ÞÖÉŠ§m"¶öÔœÖWAëV -¥›¨/5jP‘à ¢k_#ã–ÚUZY'mž]¶tŦÛr þ8-·ó´¾V³zVë”I3-·¬ª9a²ú[¹àùxªM¯/õeáÖ«pé+J±ƒvÆ2Ó²Êf×Nðu0ËeÑ-k[kCÇe²ÖÉz[¨êë‚íYíª³…Š\—¥Wá¬F5¸xV-¸Ó”(XC*¬(÷æ‚Ü{+r%.Š5‹{6œzQu;¾* ºªAeYw+s9xÅœÏéæ ëp©kÈM³ùµZŠÄ¸"¡®Š„élÚO±Y.a%ó”•ÏmÞE˜ÉÔœc] ´3@ÖË>h÷ðÆÔ†s}þN©5_?ô ó“ü‰Ë±ûËîò<—Í“&ºFþ=ýg {§S€Æ]L0énÔÜ TÓw†Jà99³æð4 ×›ϰYx;§ÙE¼hwÚÇÆ‹qå% ’nÓ_ÂMŠ;ë.’š#R}vP­;*=o×5IÊ2ÉÑKxÓŸáE™¨W†Nµ‹óß…|»CròɧY{A$æíŠÔn]Yß´Å$Ä7’]Ó{x˦óT½µ2m¶Þüy¡/¯”¾ÊBÖ= zw»£ÞÕ fQÃ:Û[›ts‚¤íOü7‡àÚF{p[íÓÍ^ò6‡Âz«kykÄU³{wûRÎß›øÞU“ ¿.Ñø’_äk~ïŽd—ŽW¶ß¶9;ǧܭ¼eòòÖ_©yyoð‹Ÿ×û‚?ù‰iäΟéý‚àõËÝ. ® `’€ò͈Yw¯/äŒÀ½WxRà“xCÍb®Á&3žÞ<+¡§úÅ‹mw)òE |)§/묽*xjb_öy5;¯î¾'q/àÀ«‘çøUžøsžßåËx¯0Û}¾?Xòš`ÊK}é®õ]ÁºWóÔf%Xs€nVF7Žbr›C®*޹ •¤š\’Jqaè"&º„8ÔÙÛ…Šuáªly§•øÈÎSâšiµ¨‡Ú¨Íª3]Juç*Ž…„iõ›Cguew.'~ÀYWû&a¼„½_ýa·~ŠßÒ ‡qðʤ‹uxí®Mýyáîö·“î:K#|]°æÅhØŠ®×Å…ï§.¿rØ·ÌþɃõ£ÞÂzØ‚ áÄ™?àT Æ»W¿à÷éé–Óij“‚—dc \Œc¥òEÆ«×/ãfÕŒ£ï3Ž¿83ù5K8@àq –ÇטW’J|J»ñÆŸþ8ÓာŒIáfð‡Öógªã:„' X~Ia8äêgá¤ïÍÆ“üUä`Ž«0ó½•ù¯?€d¼Ì@‰²X.“dúYfú™ò.–È~wÚ^`м9/2N6Æ;Y1Óe¶«šóõËÐx2Çf¿Ü&3÷å̺ÊKe±k“Çæ.Íi73æ>ç˜ÝïqÂ$™óårÄœ³¯mžÇjÙûéæ'Ì›Ýð[þÍù g—Y޹ó].ÁÈ!źW™ÅðÞ¼|7ŸDÎÚ¸ óhöœ:yÏeúŒ…‹³wÉàÙ5GcجºÊ3漚sæàkc§³0ÍÖ'hql…}²ëíÊèø+Gè°<¡òržÍ™3Ÿçˆœž…ê3Ð!:''^Ó¬Q³Ë³ËÆBwaýL„ûsîUʵ¹c6åÍ ¿ïgþšÚ÷ã¸,Ÿ?0ƒ¾ÃÝÙ+ åœ2&Ï0z #aôÜw#ˆ®bÏPº&ƒèã œô|&Ç EeÈœŸ%³—¦Ì:LÿgçÙ.»d³l”­²e6ÌNÙ$Ûd·lœý²wvÍÖÙ4;gÏì˜ ´c¶Ú<í›]³—¶ÏÚLj?mÍ ;ˆÚ'[\mŸ]Röø"`kÓì®-€ b[c“í þAÚNÙ]`uÀ´»Óž¼m@¶ {{€@0pฃ>0?HÙ€PŽí³7‚ŠÝª€ðÀ îG¹i¶å¾ßà‚þ€èàˆî+pt@éÖØ–[°‚w|@ÇŽØ;HU  nwÊÜàüàà.|dû{ Œ·@Þ™; `ð¼ ÐÜÀXo|`>€>Ù„nŸM¾Èå{}Ólø*6ýà 0mø ì.ÙüÀ ðýí³Ïwýæÿ›ðð€<`Ú|Àƒ.¸>xàd`@ÁË7Ù@€`7çà)›`Âñ7ÞnÙ@„»pRvP €?ðÂEv ' ÔpÐ|ðžÀg —ŸìÌ5÷áö^À àh@ÐúÀ|Í ¹Ÿ]ûk¿#Þ±É7{àøoàÇÀW= †—ì«-Àÿáí t@Ð(ðçÊ|,t¼Ý¿ÛvÅ>Ü €ÿ€ÈíùáþÛà| €0úçQ¼ž Ö8éàïrí AG_é€ð‚@ü¸Æ^àH ¥—li.fÁ*PôŒŸòŸ²±€óVé_œìƒ)î·ÀRŸé!«t-Éù@ø¨à”›¤½ÊS6ˆè@¬“uV^x2Pë=bŸï’ Ì €OÙr®ëð0×0OÙ5ØødÙ ÃïðÑ…g—ìÀ¸t Ú »+¿¦ýdwöÂ>J@%@­´³VÛC¶@í- °öŽ=ÚÀ€éí à·ÇõÉ^Ù1@'ß™](vå¾×»ÆžîŒÝ°Óõë~²©»¿d{oGîÝëï w¬~Þ»A8Ø=®›wðîÞËy|¯îõ¾w÷ìÞ×w‚\c?î`Ê÷;a×î À¿»õÇ]T€ßç”+÷œ-¸À$@Aóñ°޹l'ë^ ƒ°ÈëÈnEpÂî^€ ‚&çä` hsÁâA6À´ó/àøèÿØñ™-Â{|ÊbÀ ò™=Øá8’§@ÀŽs0ÌEúXìF~üøo ä;vO€"À@Í­9Û¦Øà`°çì/æÿ<8çéüœùŠ­æ½¼Aûžçó}nå±|ž?Ü€;®Ã§Ùy^@„¡¿óð[(õ“ýRv¢ßèÀèGÿ·#}U‡ë‰¾ t‚z 8=€ÝàÆPðÕúOô÷àø}`êQ½ @@ œõ´þêE÷ãß:ÜzTï ”A?€mý­x’-ìï<ªß; ˆp á“v³ÿÛpü|ƒv üø„7×þÔv ``€·'ë…þÐ{~çÕ=º¿ó:<±xwï¹»oOÙôþoÇ{Åþð}½ì'[ ¤lòý€ÿÆó[³+ö$0ðƒy. „öðMîA¶A@î _ïà À þà úŠÿÚ‘;hø @|=p˜ÁÈÝ»Ýä£üY`±ý@>ù û¸+ö“¯ñm<8øƒü{K÷€ïïõ½½wE!tí¤ÿ¿£üÑO|éËnôÓ»#?ùý¦A4ðàà×;}«²‘€?‡À|äƒ<Âþ¿×ï!û$ý´ÿúÁ/b_‡Ã} ð@¾wúöýdgüH¸ÀÁß÷‚?eGzNByoúˆ?dó|ømÀ3  {ˆû¿}è'ø¨€róÎùOöPüá{Ø2²GÀæû8ò¾Où7Ùg€ô} P=xíÛñl¯û¸èýá{X‹ „¿ß¯÷@ 0*10 €çÿýÎþ@èî߀¸ƒàÏó×<¤á¡ü’ÇýwßéÑ?Pÿ|Ÿýöíü»ó7ÿ»† Ú)@óÏø›À{ŸÓÇdnÀ€ATv€Ðü•á› ×ü9{@ðÔ}(Û% ¬Ÿ€.ðòl`.° @|Ø^øè*@ÔV@!ðÅ*›h X(›¸×äí€:ð½Ÿ@ð ô 2·À-@n~@¡'Éÿ8ŸÑð…l 'Ê{’ŸüùeZàÑ×÷1{…Þh´…OŸµGN÷ŸøaA›¸B€ìÞ¨Øõ}ÛŸXô­ ߸f|u Ù—ªl€ÄùÀη¥l ŸÈ÷ö͇ Àò¹|‹`âÇ·¥l6ß;0†oy 0ÈÍ¿8@²á'›ÿ§ ¦lLÀ|‚‡ž€G ^*x²=–ÞJ7ìà@ãÀ €ð•~!Ûp¼•o ÜÖgøù¾€; öÍu€Gü‚À úÀ PT^€ØÇ)õ[àÇe|þ]ã–çÝq¿@?Àˆ}yð,ó@5àÇ]À]ç·À'˜ç9ª@7¨ƒ'°ÜuÉ àþmíß߯à=oÀ0 y€@w]pðŠ€8êx-Øwè¥ ¡A ¨«€2`ä÷Àgл ¡³e„@0 ¬¿ž%`7}@*p”„‡€ÜïÀgðÉ@IÇå‚@@àÓ¡~û8ƒ3áã–T| @<ÐðçÀ3ð$„j[a·â}ƒ[Åg¬ë€&ð|Š}²±þžPñ5ïÀ/°¸]€>`ÒlŸGà…Ï/øïÈ© _ˆµÅ&aȶ þléÞÉF8•Ý Nm ÈVŠN  Ð<†Gß·'–eˆ’{1 И”a;(º5—]ÈVä • èô‰†)›8À &Àâ«á]'Ø/ md k(Hlø†{œox dÃÝÔ¦´õ†w çÜ ‡g Èþ{ÒaØðtm `¸×Åz[¿—~Y_Å6ètwåilu 8 ]0×-† €wH¶ @p V‡ìáJ7Ðç`$G*v0GÎ@*Ð ”„a~xÏýoÀ7 ä}Gzø2mé!~X!ˆ<.¨ Bˆh`€¸Ò ƒÅ 5²"†¨ FƒÓ`5xç r@ ˜ˆ"8(’ƒ)[`H&âßÇ"–/"…¸"Öˆ{€4`"Ò†&  ‰n`„h⇴a‚Ø$*‰„ᄨ*pRbvH%Êá•N‡Xâ”"‰Ú!”V‰c ™hš‰MÛ—˜%ª‰S¢ º9‰››$ˆùÞœ%>p\A`'vˆ)žøüz—Ÿ¨²µt`À€„rþ’(ð@;À´um¤]5 Ž"×väÝ ÀÞv¾}q‡²}ð€¦XØùm€ ÐâepÀ pèÀ©H³o@  ¬( (*À>° ´x~àÁ¥„w¸-n½ç³ÕpI×¹}nà€±H³!‹¾›ë»ñÎbyXÎIp¿[ÿV-6|Í`7h'†lîa0èM€¨_ý†üz À€‡°Û¢¨¹=ohH. "]ð 8nÛ€÷ p@\HßÙuy¹'ÓÑ‹ ÛÀ$pž×..À¿(#FgÀ5p°[Pøm>»[3ð½]vvÝ3 0jl# ‡É\€´tã÷–¹A•Ýá–ŒP8„Eá @àžÝPð¿€.§²!·ßF Ò€/°ã L€:Ð PBcÍxû©„Gã<ð à ë¶ØýÀ>5®t·NHú9ƒ¡8ð¿ýýš‡Ñýo}W²ñod#`6h£Ú Æp/@9€„wå\{x7T€; rþ]Ìu#À\‡ÑIrOˆ r· 7g€âHÖÁqÀ'À<„…]Ðdî@‡Ñål>^2  <žÝp T•ÜhHØMv!Ç ÿ@;àxvÀ?° ð¢cÊf €]Ȥª ÀøÀ9ð¡?@<Þ À4° < \À,p,Ý÷7 ÆŠÿÀ;àTÌÀ·dúDðî @9P>vö\bÈî¡ÀúèÜu$@ñ!£@H% @ ?ÞuB sš›dHîí÷Üÿh8¨@&p |î €tD0?S/` ä^ ðRpANÀ? |€7°¾%[¬?\ógÂyo\ó·>Öx6¤APçµØ_ù¸î¥‹…]憼w×üõu’HDF$€DvÀ 0øŒ™/v€2@ ,‘Zk(DZ‘%›$gØôÉ*‘Oä¹1fä]EÎý]YD²†YäGæL$k8F–‘w$<àCz‘%™à~dYEö‘T$a'HVppÀ ©HÞ‘`€#©Ãá¤$iP’vž¤ xâlÀ}èŒœÆÆØ’q"m—4‚ä)JÒvV#ÐJ>’˜ßFüu;$Ýenù¡ùø³Aw À' à’dt—˜Â@×öˆpÀ_7H€€ ,~€<ð×½v]@ |o@Á‡ÈÁn Àð Ô÷à·1À9ð€œðÅìÀævȼc*I¤¾€+  Ðs&P ¸ZÀ;I€*pu²ãJwìtï€Û‡˜@+Tp¥P8å6p°ˆ\×FðéäÀN‘Ëdý,tä[Ú(ÐýpÜ=W²ýo~ÀJ‰Õ%ncB©F†€°1™€P”¾cHÔ”pÜÐ<ž€g •P9 À`Ì]ÞKYØ©„æ€ àÙM?@ 8•yž”Ç@UiS"ÿÀ=Tv+° P`%ÈÖM¦•ßä¨h$…Ýp¬õ$IÖqlj¤Ç7HÞaÎVA~› Y>f|&KwG.‘Œ%ȶ$eùÈó™p @6PYX(§¹ý Àf t–Ë$ °t¢¥€="xŠ¥APtƒ%d [Jr~°D"³e ‘–en9,»*°D¾e K¤à[.x2PH¯å™*ÊmÏetÉCÏ%n™X"n½åv –Ä¥wIÊe&)l’x¢uiSŽ’;cz [ÎŽ«$ž¨]Z•“],)_–dxY²–°eḗ™¤ä`Ò—™ãæx_¦’Zžéø ˜ô%íh;â‰åå~I^â—®%E÷'†rø@¾—TŠÉœeY)^ä#gY)Je@ù¨Œ˜Y@èöaö‹%‡9,– ›Â6ZfxÝx(º1ÀYØ)õ º‰p6¦Å÷Ñùs;¦è¢d~t¢Û€×€AÀx@ewוlR&-D+Bp×qÀ@P™B¦èe¾ƒŸA ¾ šùe"€@@ކð 4lsfšÉ`@fnCfŽyeŠqð`I·<™]&<ˆÜrˆ&’ êp8)ðŠ,7G€UÐ7Ä1t À.€‹ÈºÇàçÀ AO à  À¾uЀApTv¬)kB“&U``Ÿf¨ÉÙĤfW`âyn Ș ›Ã¦l6l…ÆÆüIlhц´ýlÓ¦Ôf%V›=Ûµ™%b›6Û”Èmmd·é´e‡ã¦Ñ6mÆm?À>þõ…“`ì¦n¾ì&ºùnñ&Ý8oÖ›îæºù(Ú›ú¦¥˜o›L[{ضœ>›ÀÙošnt£=€(Êo¸[ÂI±ùÀ»É8r gì¦p§ÄIq2ƒ?ÀÅ™q6ggq>œ'ÈÉ´qqgɹ<†œ('É©qžœüæû7Èyo*çÄ sþ›\a+‡Ôœ!gûö¾ÅoûúÜoù[ÐÙ¿%p:Ü÷+pH§xçÀ- £wYJ¶l’aÉ<‡é÷\üÀðÁyV'ÅöhÌcFçÂÁlUgWÊU•[ç2Àñph§§vjn:\Ûi0–sJ\ÜIXŠ@Øv:Üãö¼›ì¢Þùð~'óxÒ„%Ṧˆgÿ¦xêpjÜà¹v>žrgäÙv.ÿ›å©¹Å†€\€—oö%›@çyžà"$÷륛Ëd˜ÈíÿÀ݉²}r¡\ ж‘ž¯çá{p"!¶²©›ŸÜVWîžÍ_ÀÒ‘š¿gì‰.¶oçì È¥oʧðë9Ÿ!ô|u„àôÉ{>Ÿ‡âõ©KfŸÄç#§sFŸØgÿ¦}ŸÕg÷¹|‚§XЉŸÖ#¢ˆÈ5t]õë…råçP¨ö'E°Õ繘²‘t& nâŸßg9€r1]z€þŸÓgèF³phþ΋¨ÿiÆž(SW& ðÚüÍvhû‚b‹X^Îfa2(¨'‰à¥}wÝ)º Ö] )ƒŽ ü]}ÇÎvþœçÉðo5§ýÙÉw€ „JœöZ„¾›?hĆ„òx ÜÊ5¡…ÝJã¡F¨Ú<Úå P¡A¨…f¡Uè*†ŒdhzïxÖXÞµwܱۘw5%0'‡¾¡uè{wß}w|ãÞgD"x:\0„Ÿh_ˆ¢²g!j ¢„(ûLjʞ¹ä!~6y„ úý]‰(ïI‰Jž"h˜‰â F'ê{b¢ˆ(ïYäýo7hùyæa—±á&šŠ& «¨ûyå¹¢–¨G´yðÀ°Òy± ºL’oTâ-*æé¢hÞ`÷ë ¿(`øëÅ¢ƒÜ,Ú‹"£=Ÿ–¸Œ^ ˆÞ{w{£J èFVz£ /f£ 5jŒZ£É¨4ªŠ sh7 b£?b8ŠŽ*wÇè5º¶£5 ’£=_¸÷ëÕ£ïè™(ž£(躧Šn§?þà¨{ˆ(¤~áú$º¡ä!DúnÞ!ÿÆŸ Z¤ÓgFj…:iì鑚¡T êçŽb¤Zèòhÿy~'éHª’–}&éEê’Ö“`HŠ’–¡/iÈFû‰n‡b7“ÚPŸt€º™¾Á‡A)<@”¥øÀØ7ÞÁ¤á¡?P”RlMé÷”J~gßRJ•~{ŸÜ'”j¥G©ÞÇ üÛp(†¥z¨$X–ž¥üRj’š¥[[ú¾¥l©ÓÇ<®¤ti\j—Rla'p ä¥Öã^z¸Í!YúÞÕ¥ÜÕÙ—&€©\º<ò¥s'cÚnŒzib ™2Àˆ7‘>¦ƒ)fª™>‰W'00wþ¥Qbûçˆ%`»Ñ¡œdJ²5ï¦?𸱦€kjÀ¦ˆâlÊ}¦·ilª›f¦In ȦmZ˜¾¦¾iqʧ½inªœÖ¦ÁirJ›Ú¦`lú¿±p –8—–¦ðajJЉà›˜Σ]âxª‚§a"˜Š§t`•Øž–§_×6pº¥“à|j•ªw0i}Ê~…`~*Ÿî§biÀCÆŸÃéãfŸ¦¥Tà€Š™§*&(ø)¨ÎiƒÊRêõyœ…]sÈ‚®ž'WØ æeã€<*‡šþýzˆ*7ЍÀ€jÑùªÌY¾©¨nŸ`CšogŒê¡¦¨!êƒz×á¨›ŽŠ¢Ò¨,ê4Cj²aF*’:£*© a“º<&©+êÉ–4©wgìv(ʨ0Üz¤f©†â‰z²¡X*å¹¥r…]jùö¥š©bj²)œ`ê™*¢¢…½$_G|j©m*]8îÑrªx“†©\ê^Ȳ›´!¡ªzƒ!åÖýa¦ÿ¥a8ü-ª—'x@ªŸ§¤J©ž‚¢¢:wž1äTªñɆê¦êä½wêæ§zRm¢j†Jªþ¢ * x©Žªå\©ŠX‰d`§*«’›µê]ç©Îªe¢Ñg«²ª½ªÓ÷«~ª\â–¸$š‡´ê¿‚Þaz¸¬®‡"²ê!Vt¡='(þu±(Eš²a«íg‚È­V«Þ*û ®B‰ß*v®R«æ*¹J7v¨çªŽÚ®v¨¿eš“Òl±a¦4)½º®Š©…¾jÿM«öj¿J’꫱¼z¯¬â?*°Î«Åj¼ê¯®‰í¨¼š¯«pbzÊ$&‰™*Æz±Z¬`âyš±r¬kyJ±¢§ëÆú~¬'«É*ž«kÉÚ±º‰ÖêÆšPÖo{¢…¨'&ˆqÛpuâ5«‰˜³î¬"~˜³îŸÃ©ÏúÞa¦êÛ¾YÎ!­ gÊ6× Ÿ\ÓJ0šŸ¦Ôú´ÆzÃ©Õ ~f­¿"Õʵº©P«? µz­bk×¶J­ĦR+t'Á­­ ©*ë½wi#øÖó @ò9œÂnêæ1Z·r“ô[ú†.ª‹…gßJ·®Nkx/® ۾ȷέå\Ý$®þÜÁ˜Â5ƒì@íI¹RŒ)[Aðd®vkÉØ.z® ëä:(’®šë xû}g)ù¢Špã2ªn—h3ˆµ¯kñÙ‹>³kíú`­²ŸÝØò®ZŸïÊ2« êE·»Ÿ—èÙXªþ¥–gãæ:Ê®hB9z&€Ñë¸8‚Ìk*y½6ž±§öÚ‹þ·ç÷f½²ž¤gö:½.lå«Uù½ª¯_7J¾––“ªóÚz‚¯Òküúëͯ-]Àدé+áùëɯ[êõX¾a¦à@Ü&¿–¯Ö£÷ ° ìþÊÀ†lÙHLv“Ï)¾Ø "°l(G›j°¬«C¦lìÚ‰¢r°#,ûÁž°"¬/YÂjn,¬ÜØÁf°W0„¾°˜ê9Øá°ÿ›KÂÜáuéÃþl«ç¼·ýElúwÄ’W$ιÄÒ’adÌ ±1$ë)£F±NlYÅΛŒkËDn±ü*éÅj`ì+ÆZ±S¬{ס±èbkùÅ®±\¬wù\’±pl[Áͱe¬‡:XαLìuÙH¦°:œ ù¿M¥Ü;I¾’±*†iÈ^’ˆ,!‹,²Ÿd#ûn>²¦$a‡Jº¯Ž,${ÉZ¯€Â)7¶“},'ëÉŽ”¾dÎÖ¾}ï&)›Kî£D«*Â=Ýç(·ÊÍãïËÆž²¬èFËN©Á ðÊÆ²Ml°ËŽƒ:ä/‹Ë³Ã쯧³@. ²Ýžþ ±*³Ì¬3kÆ¥ÓlùÊÆz¸çÿÆ£¬÷ë2+ ŸÝlùö¢^¨¤ç= Ζ³Í E ³  : Ϻ¯@*80Ïʳ·§ëéÍZtöl>ëWv£ó¬õZÏÞ³½h@»Ï¢y-@ëÏ ´üì<[Xvl$Û<Û÷y³,(ó[.–Aå{Z´nld©ÑâoÞåm™Ñ†° ­kYv GÒr´räŒI{ª´mHkb:°1­IëZÒ´mÂÊ$›zÃz‚œen©Ñò´A­N‹À’lú¥»Óµ@„©Ôµ¦Q[6ö´BíRK²Í—ƒå;Z¾—«j!k$µƒì$û×9µa­"Õb²bíYËɦµ[­÷šÉµî«KÉ`­;Örµ8ç_§^Ú¯ïŸ^‹×¢±VË×í_;oÞµÞ+`;avl¤uyaö|?fJغ–Žbì&Ù¶•md›þa¶tãeK^f¶’m×Ún¶”mgKÚB—£íû׵ɘ'ß —çñ˜ á±ñ˜8¦Ž¹d>¦\ùg¦™Dæ’yd&™»í;¸e&šOf`ˆ™»íyf¶j&›IÜÞu9€gæ™]`ܙԭAx}frË(ÀG×l–] Àjê¯f¬ ÄÑš¶æz DyLP-1.10.4/DyLP/doc/Figures/startupflow.epsu0000644000175200017520000027770111171477034017347 0ustar coincoin%!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/startup.epsu %%Creator: IslandDraw for lou %%CreationDate: Sat Sep 10 09:05:11 2005 %%Pages: 1 %%BoundingBox: 70 265 435 787 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 457 653 1 1306 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000076 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000003f % 000000000000000000000000000000000000000000000000000000008000400000000000000000 % 00000000000000000000000000000000000068 % 000000000000000000000000000000000000000000000000000000008000400000000000000000 % 00000000000000000000000000000000000066 % 00000000000000000000000000000000000000000000000000000035ef1ff00000000000000000 % 00000000000000000000000000000000000068 % 000000000000000000000000000000000000000000000000000000489088400000000000000000 % 00000000000000000000000000000000000006 % 000000000000000000000000000000000000000000000000000000748388400000000000000000 % 00000000000000000000000000000000000079 % 0000000000000000000000000000000000000000000000000000000c8c88400000000000000000 % 00000000000000000000000000000000000078 % 000000000000000000000000000000000000000000000000000000449188400000000000000000 % 00000000000000000000000000000000000079 % 00000000000000000000000000000000000000000000000000000078eedc700000000000000000 % 00000000000000000000000000000000000078 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000079 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000078 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000079 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000075 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000075 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000075 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000075 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000006d % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000062 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000001fc0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 00000000000000000000000000000000000067 % 000000000000000000000000000000000000000000000000000000000f80000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000000000000005d % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000700000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000fffffffffff80000000000007ff % ffffffffffffffffffffffff8000000000005c % 000000000000000000000000000000000000000000000000001fffffffffffc0000000000007ff % ffffffffffffffffffffffff8000000000005c % 000000000000000000000000000000000000000000000000003000000000006000000000000600 % 00000000000000000000000180000000000014 % 000000000000000000000000000000000000000000000000006000000000003000000000000600 % 0000000000000000000000018000000000005c % 00000000000000000000000000000000000000000000000000c000000000001800000000000600 % 00000000000000000000000180000000000006 % 000000000000000000000000000000000000000000000000018000000000000c00000000000600 % 0000000000000000000000018000000000001f % 000000000000000000000000000000000000000000000000030000600000000600000000000600 % 0380000000000080000600018000000000005c % 000000000000000000000000000000000000000000000000060000200000000300000000000600 % 0400000000080080000200018000000000005c % 0000000000000000000000000000000000000000000000000c0000200000000180000000000600 % 0400000000080000000200018000000000005c % 0000000000000000000000000000000000000000000000001807dc270f0d3800c0000000000600 % 0ef9c701f71ef1b70e3e00018000000000005c % 00000000000000000000000000000000000000000000000030023e2f90927c0060000000000600 % 0443ef808f8908989f6200018000000000001e % 00000000000000000000000000000000000000000000000060022028039d400030000000000600 % 0442080088083890904200018000000000005f % 000000000000000000000000000000000000000000000000c00220280c83400018000000000600 % 044208008808c8909042000180000000000000 % 0000000000000000000000000000000000000000000000018002322c919164000c000000000600 % 04432c808c8918909946000180000000000001 % 00000000000000000000000000000000000000000000000300071c770ede380006000000000600 % 0ee1c701c70eedf9ce3b00018000000000005c % 0000000000000000000000000000000000000000000000060000000000000000030000001c0600 % 0000000000000000000000018000000000005c % 00000000000000000000000000000000000000000000000c0000000000000000018000001f8600 % 0000000000000000000000018000000000005c % 000000000000000000000000000000000000000000000018000000000000000000c000001ff600 % 0000000000000000000000018000000000005c % 0000000000000000000000000000000000000000000000300000000000000000007ffffffffe00 % 000000000000000000000001ffffffe0000000 % 000000000000000000000000000000000000000000000038000000000000000000fffffffffe00 % 000000000000000000000001ffffffe0000064 % 00000000000000000000000000000000000000000000001c000000000000000001c000001fe600 % 00000000000000000000000180000020000000 % 00000000000000000000000000000000000000000000000e0000003000003800038000001f0601 % 8000000000000000000000018000002000005c % 000000000000000000000000000000000000000000000007000000100000c40007000000180600 % 8010000020000010000000018000002000003f % 00000000000000000000000000000000000000000000000380000010000084000e000000000600 % 8010000020000010000000018000002000005c % 000000000000000000000000000000000000000000000001c001af13bf1f04001c0d800000060f % 8f3cf00d7fc84f3c85f386818000002000005c % 000000000000000000000000000000000000000000000000e00259911f88080038048000000618 % 909108122218d8918c87c9018000002000005c % 0000000000000000000000000000000000000000000000007003b091a808100070050000000610 % 8390381d2208501084840e818000002000005c % 00000000000000000000000000000000000000000000000038007090a8081000e0030000000610 % 8c90c80322085010848401818000002000005c % 0000000000000000000000000000000000000000000000001c023190cc883001c0020000000611 % 919118112208d8908c86488180000020000058 % 0000000000000000000000000000000000000000000000000e03cf38471c30038002000000060e % cedcec1e3f076f1c77c38f018000002000007f % 0000000000000000000000000000000000000000000000000700000000000007000c0000000600 % 0000000000000000000000018000002000000f % 000000000000000000000000000000000000000000000000038000000000000e00000000000600 % 0000000000000000000000018000002000000f % 00000000000000000000000000000000000000000000000001c000000000001c00000000000600 % 0000000000000000000000018000002000000f % 00000000000000000000000000000000000000000000000000e000000000003800000000000600 % 0000000000000000000000018000002000000e % 000000000000000000000000000000000000000000000000007000000000007000000000000600 % 000000000000000000000001800001fe00000f % 00000000000000000000000000000000000000000000000000380000000000e000000000000600 % 000000000000000000000001800001fe00000f % 000000000000000000000000000000000000000000000000001fffffffffffc0000000000007ff % ffffffffffffffffffffffff800001fc000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 000000000000000000000000000001fc00000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 000000000000000000000000000000fc00000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 000000000000000000000000000000f800000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 000000000000000000000000000000f800000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000007800007f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000007000000e % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000007000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000003000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000002000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000001fc0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000080000003a % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000080000003a % 000000000000000000000000000000000000000000000000000000000f80000000000000000000 % 00000000000000000000000001f71e84fee03a % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 000000000000000000000000008f898c431000 % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000088088442103a % 000000000000000000000000000000000000000000000000000000000700000000000000000000 % 00000000000000000000000000880884421000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 000000000000000000000000008c888c42103a % fffffffffffffffffffffffffff000000000000000007ffffffffffffffffffffffffff8000000 % 00000000000000000000000001c70e76e73818 % fffffffffffffffffffffffffff000000000000000007ffffffffffffffffffffffffff8000000 % 0000000000000000000000000000000000001e % 800000000000000000000000003000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000001e % 800000000000000000000000003000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000001e % 800000000000000000000000003000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000001e % 800000000000000000000000003000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000001e % 8000700000000000200000c0003000003000000000006000000c00000000080000000018000000 % 0000000000000000000000000000000000001e % 8000800000000200200000400030000010c0000000006000000401000000080000000018000000 % 0000000000000000000000000000000000001e % 800080000000020000000040003000001040000000006000000401000000000000000018000000 % 0000000000000000000000000000000000001e % 8001df70e07ce79e66e387c0003000e393c036ddefb06000007c73ce7dbb1b70e0000018000000 % 0000000000000000000000000000000000001e % 800088f9f021f2212317cc40003001145440126284c8600000c4f91f20cc8989f0000018000000 % 0000000000000000000000000000000000001e % 800088810021020722140840003001045440169e84886000008481102088890900000018000000 % 0000000000000000000000000000000000001e % 8000888100210219221408400030011c54401fa284886000008481102088890900000018000000 % 0000000000000000000000000000000000001e % 800088c990219223221648c0003000e3bbe8091fcfdc6000008cc9192088890990000018000000 % 0000000000000000000000000000000000001e % 8001dc70e070e39df73b8760003000000008000000006000007671ce71dddf9ce0000018000000 % 0000000000000000000000000000000000001e % 80000000000000000000000000301c000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000001e % 8000000000000000000000000030fc000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000001e % 8000000000000000000000000037fc000000000000006000000000000000000000000018000000 % 00000000000000000000000000000000000008 % 800000000000000000000000003fffffffffffffffffe000000000000000000000000018000000 % 00000000000000000000000000000000000000 % 800000000000000000000000003fffffffffffffffffe000000000000000000000000018000000 % 0000000000000000000000000000000000005a % 8000000000000000000000000033fc000000000000006000000000000000000000000018000000 % 00000000000000000000000000000000000000 % 80300000000000000000000000307c0000000000000060000000000000e0000000000018000000 % 00000000000000000000000000000000000000 % 80100200000800000200000000300c000000000000006000100000000100020001000018000000 % 00000000000000000000000000000000000000 % 801002000008000002000000003000000000000000006000100000000100020001000018000000 % 00000000000000000000000000000000000000 % 81f1e79e01bef909e7a13ee0d030000000000000000060003fbee380f380d79e7fc00018000000 % 00000000000000000000000000000000000000 % 831212210248431b126311f1203000000000000000006000111737c19901222121000018000000 % 00000000000000000000000000000000000000 % 8210720703a8410a02211101d03000000000000000006000119214010901d20721000018000000 % 00000000000000000000000000000000000069 % 821192190068410a0221110030300000000000000000600010a214010900321921000018000000 % 00000000000000000000000000000000000064 % 823232230228411b1223119110300000000000000000600010a236411901122321000018000000 % 00000000000000000000000000000000000073 % 81d9db9d83cee0ede39db8e1e030000000000000000060001c43e380f381e39df1c00018000000 % 00000000000000000000000000000000000076 % 800000000000000000000000003000000000000000006000004200000000000000000018000000 % 0000000000000000000000000000000000003f % 80000000000000000000000000300000000000000000600001c200000000000000000018000000 % 00000000000000000000000000000000000068 % 800000000000000000000000003000000000000000006000030700000000000000000018000000 % 00000000000000000000000000000000000066 % 800000000000000000000000003000000000000000006000000000000000000000000018000000 % 00000000000000000000000000000000000068 % 800000000000000000000000003000000000000000006000000000000000000000000018000000 % 00000000000000000000000000000000000006 % 800000000000000000000000003000000000000000006000000000000000000000000018000000 % 00000000000000000000000000000000000079 % fffffffffffffffffffffffffff000000000000000007ffffffffffffffffffffffffff8000000 % 00000000000000000000000000000000000078 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000079 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000078 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000079 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000078 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000079 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000073 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000075 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000073 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000075 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000073 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000075 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000073 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000075 % 0000000000000600000000000000000000000000000000000000000c0300000000000000000000 % 00000000000000000000000000000000000073 % 0000000000000600000000000000000000000000000000000000000f8300000000000000000000 % 0000000000000000000000000000000000006d % 0000000000000600000000000000000000000000000000000000000ff300000000000000000000 % 0000000000000000000000000000000000005c % 00000000000007ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 % 0000000000000000000000000000000000005c % 00000000000007ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 % 0000000000000000000000000000000000005c % 0000000000000000000000000000000000000000000000000000000ffb00000000000000000000 % 0000000000000000000000000000000000005c % 0000000000000000000000000000000000000000000000000000000fc300000000000000000000 % 0000000000000000000000000000000000005c % 0000000000000000000000000000000000000000000000000000000e0300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000062 % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000001fc0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000f80000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 00000000000000000000000000000000000067 % 000000000000000000000000000000000000000000000000000000000700000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005d % 000000000000000000000000000000000000000000007ffffffffffffffffffffffffff8000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000007ffffffffffffffffffffffffff8000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 00000000000000000000000000000000000014 % 000000000000000000000000000000000000000000006000000600000000000800000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000200400000010800000018000000 % 00000000000000000000000000000000000006 % 000000000000000000000000000000000000000000006000000200400000010000000018000000 % 0000000000000000000000000000000000001f % 0000000000000000000000000000000000000000000060216e3e3cf380f373d9e6e0d018000000 % 0000000000000000000000000000000000005c % 00000000000000000000000000000000000000000000606373624247c19b990b33112018000000 % 0000000000000000000000000000000000005c % 00000000000000000000000000000000000000000000602121420e440109090a1211d018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006021214232440109090a12103018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006023234646464119190a32111018000000 % 0000000000000000000000000000000000001e % 00000000000000000000000000000000000000000000601dbe3b3b7380f1f1dde739e018000000 % 0000000000000000000000000000000000005f % 000000000000000000000000000000000000000000006000200000000001000000000018000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000006000200000000001000000000018000000 % 00000000000000000000000000000000000001 % 000000000000000000000000000000000000000000006000700000000003800000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000600006000000000000018000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000006000000202002000000000000018000000 % 00000000000000000000000000000000000064 % 000000000000000000000000000000000000000000006000000202002000000000000018000000 % 00000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000601e6e3e079e271f78dc79c1a018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006021316202332f888462c7e24018000000 % 0000000000000000000000000000000000003f % 0000000000000000000000000000000000000000000060072142022128081c428203a018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006019214202212808644282006018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006023214602232c888c42c7222018000000 % 0000000000000000000000000000000000005c % 00000000000000000000000000000000000000000000601df3bb039e771c76e779c3c018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 00000000000000000000000000000000000058 % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000007f % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000007ffffffffffffffffffffffffff8000000 % 0000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000007f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000001fc0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000f80000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000700000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 00000000000000000000000000000000000000000007ffffffffffffffffffffffffffff800000 % 0000000000000000000000000000000000003a % 00000000000000000000000000000000000000000007ffffffffffffffffffffffffffff800000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000018 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000001e % 0000000000000000000000000000000000000000000400040040200c40000c0000060000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040004004420044000040000020000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000400040000040000020000800000 % 0000000000000000000000000000000000001e % 00000000000000000000000000000000000000000004000cdccf63c4c69c0478f1e20000800000 % 0000000000000000000000000000000000001e % 00000000000000000000000000000000000000000004000462442424493e04cd8a120000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040004424420e44ea0048500720000800000 % 0000000000000000000000000000000000001e % 0000000000000000000000000000000000000000000400044244232441a0048501920000800000 % 0000000000000000000000000000000000001e % 0000000000000000000000000000000000000000000400044244246448b2048d8a320000800000 % 0000000000000000000000000000000000001e % 00000000000000000000000000000000000000000004000ee7e773beef1c0e78f1df0000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000008 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000040000000000010000000000000000800000 % 0000000000000000000000000000000000005a % 000000000000000000000000000000000000000000040000000400010010000001000000800000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000040000000400000010000001000000800000 % 00000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000479e6e0df7de36e3c0d7737ce6ec0800000 % 00000000000000000000000000000000000000 % 00000000000000000000000000000000000000000004c7331124221131101222491f3320800000 % 00000000000000000000000000000000000000 % 00000000000000000000000000000000000000000004821211d4207121101d3275102220800000 % 00000000000000000000000000000000000000 % 00000000000000000000000000000000000000000004821210342191211003140d102220800000 % 00000000000000000000000000000000000000 % 00000000000000000000000000000000000000000004c632111422312110111445192220800000 % 00000000000000000000000000000000000069 % 0000000000000000000000000000000000000000000479e739e771dbf39c1e0879ce7770800000 % 00000000000000000000000000000000000064 % 000000000000000000000000000000000000000000040000000000000000000800000000800000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000040000000000000000003800000000800000 % 00000000000000000000000000000000000076 % 000000000000000000000000000000000000000000040000000000000000006000000000800000 % 0000000000000000000000000000000000003f % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000068 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000066 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000068 % 000000000000000000000000000000000000000000040000000080000620000400000000800000 % 00000000000000000000000000000000000006 % 000000000000000000000000000000000000000000040000000100000220000400000000800000 % 00000000000000000000000000000000000079 % 000000000000000000000000000000000000000000040000000200000200003200000000800000 % 00000000000000000000000000000000000078 % 00000000000000000000000000000000000000000004000000021a79e266e1c200000000800000 % 00000000000000000000000000000000000079 % 000000000000000000000000000000000000000000040000000224c61223122200000000800000 % 00000000000000000000000000000000000078 % 00000000000000000000000000000000000000000004000000023a807222122200000000800000 % 00000000000000000000000000000000000079 % 00000000000000000000000000000000000000000004000000020681922211c200000000800000 % 00000000000000000000000000000000000078 % 000000000000000000000000000000000000000000040000000222c63222120200000000800000 % 00000000000000000000000000000000000079 % 00000000000000000000000000000000000000000004000000023c79df773be200000000800000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000040000000200000000023200000000800000 % 00000000000000000000000000000000000075 % 000000000000000000000000000000000000000000040000000100000000063400000000800000 % 00000000000000000000000000000000000073 % 00000000000000000000000000000000000000000004000000000000000003c000000000800000 % 00000000000000000000000000000000000075 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000075 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000075 % 00000000000000000000000000000000000000000007ffffffffffffffffffffffffffff800000 % 00000000000000000000000000000000000073 % 00000000000000000000000000000000000000000007ffffffffffffffffffffffffffff800000 % 0000000000000000000000000000000000006d % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000062 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff % fffffffffffffff80000000000000000000067 % 0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff % fffffffffffffff8000000000000000000005c % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000005d % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000005c % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000c00000000000000005c % 0000000000000000000000c3000800000000000000000000000000000300000000000000000000 % 0000000000000008000430000000000000005c % 0000000000000000000000c1001000000000000000000000000000000300000000000000000000 % 0000000000000008000410000000000000005c % 0000000000000000000000c167380000000000000000000000000000030db73fec000000000000 % 00000000000000081ce4f0000000000000005c % 0000000000000000000000c1989000000000000000000000000000000304989132000000000000 % 00000000000000082315100000000000000014 % 0000000000000000000000c1189000000000000000000000000000000305a79122000000000000 % 0000000000000008211510000000000000005c % 0000000000000000000000c1189000000000000000000000000000000307e89122000000000000 % 00000000000000082315100000000000000006 % 0000000000000000000000c3bf1c0000000000000000000000000000030247fbf7000000000000 % 00000000000000081ceef8000000000000001f % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000005c % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000005c % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000005c % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000005c % 0000000000000000000007f8000000000000000000000000000000001fe0000000000000000000 % 000000000000007f800000000000000000001e % 0000000000000000000007f8000000000000000000000000000000001fe0000000000000000000 % 000000000000007f800000000000000000005f % 0000000000000000000007f8000000000000000000000000000000001fe0000000000000000000 % 000000000000007f0000000000000000000000 % 0000000000000000000003f0000000000000000000000000000000000fc0000000000000000000 % 000000000000007f0000000000000000000001 % 0000000000000000000003f0000000000000000000000000000000000fc0000000000000000000 % 000000000000003f000000000000000000005c % 0000000000000000000003f0000000000000000000000000000000000fc0000000000000000000 % 000000000000003e000000000000000000005c % 0000000000000000000001e0000000000000000000000000000000000780000000000000000000 % 000000000000003e000000000000000000005c % 0000000000000000000001e0000000000000000000000000000000000780000000000000000000 % 000000000000001e000000000000000000005c % 0000000000000000000001e0000000000000000000000000000000000780000000000000000000 % 000000000000001c0000000000000000000000 % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 000000000000001c0000000000000000000064 % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 000000000000000c0000000000000000000000 % 000000001ffffffffffffffffffffffffffe000000007ffffffffffffffffffffffffff8000000 % 01ffffffffffffffffffffffffffe00000005c % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000003f % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000005c % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000005c % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000005c % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000005c % 000000001800000000000380000000000002000000006000000000000e00000000000018000000 % 0100000000000038000000000000600000005c % 000000001800000000000400000000000002000000006000000000001000000000000018000000 % 01000000000000400000000000006000000058 % 000000001800000000000400000000000002000000006000000000001000000000000018000000 % 0100000000000040000000000000600000007f % 00000000180000006e71fe79f6ec00000002000000006000000371c7f9e7dbb000000018000000 % 010000000dc73ee79fdd80000000600000000f % 000000001800000073f884cc83320000000200000000600000039be213320cc800000018000000 % 010000000e6f904cc86640000000600000000f % 00000000180000002180848482220000000200000000600000010a021212088800000018000000 % 0100000004281048484440000000600000000f % 00000000180000002180848482220000000200000000600000010a021212088800000018000000 % 0100000004281048484440000000600000000e % 000000001800000023c8848c82220000000200000000600000011b221232088800000018000000 % 01000000046c9048c84440000000600000000f % 00000000180000003e71ce79c777000000020000000060000001f1c739e71ddc00000018000000 % 0100000007c738e79ceee0000000600000000f % 000000001800000020000000000000000002000000006000000100000000000000000018000000 % 01000000040000000000000000006000000000 % 000000001800000020000000000000000002000000006000000100000000000000000018000000 % 0100000004000000000000000000600000000f % 000000001800000070000000000000000002000000006000000380000000000000000018000000 % 010000000e000000000000000000600000000f % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000000f % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000000f % 000000001800000100000000000000000002000000006000000000000000000000000018000000 % 0100000000060600000000000000600000007f % 000000001800000300010002000100000002000000006000000000000000100008000018000000 % 0100000000020200080004000000600000000e % 000000001800000100010002000100000002000000006000000000000000100008000018000000 % 0100000000020200080004000000600000000f % 000000001800000170f3c0d79e7fc000000200000000600007eef3fbb006bde3fe000018000000 % 01000000f1e23e035e79ff000000600000003a % 0000000018000001899901222121000000020000000060000245090cc809121108000018000000 % 010000018b326204888484000000600000003a % 0000000018000001090901d207210000000200000000600003643908880e907108000018000000 % 0100000102124207481c84000000600000003a % 00000000180000010909003219210000000200000000600001a8c9088801919108000018000000 % 0100000102124200c86484000000600000003a % 00000000180000010919011223210000000200000000600001b119088808923108000018000000 % 010000018a324604488c84000000600000003a % 00000000180000039cf1c1e39df1c00000020000000060000090ef9ddc0f1ddb8e000018000000 % 01000000f1e73b078e77c7000000600000003a % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000003a % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000003a % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000003a % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000003a % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000003a % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000003a % 000000001ffffffffffffffffffffffffffe000000007ffffffffffffffffffffffffff8000000 % 01ffffffffffffffffffffffffffe00000003a % 000000001ffffffffffffffffffffffffffe000000007ffffffffffffffffffffffffff8000000 % 01ffffffffffffffffffffffffffe00000003a % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 00000000000000080000000000000000000000 % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000003a % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 00000000000000080000000000000000000000 % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000003a % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 00000000000000080000000000000000000018 % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c00000000000000000000000000000000f0303c00000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c00000000000000000000000000000000fe31fc00000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c00000000000000000000000000000000fffffc00000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff % fffffffffffffff8000000000000000000001e % 0000000000000000000000000000000000000000000000000000000fffffc00000000000000000 % 0000000000000000000000000000000000001e % 0000000000000000000000000000000000000000000000000000000fe31fc00000000000000000 % 0000000000000000000000000000000000001e % 0000000000000000000000000000000000000000000000000000000f0303c00000000000000000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000000000000000080300400000000000000000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000008 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000069 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000064 % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 00000000000000000000000000000000000076 % 000000000000000000000000000000000000000000000000000000001fc0000000000000000000 % 0000000000000000000000000000000000003f % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 00000000000000000000000000000000000068 % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 00000000000000000000000000000000000066 % 000000000000000000000000000000000000000000000000000000000f80000000000000000000 % 00000000000000000000000000000000000068 % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 00000000000000000000000000000000000006 % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 00000000000000000000000000000000000079 % 000000000000000000000000000000000000000000000000000000000700000000000000000000 % 00000000000000000000000000000000000078 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000079 % 00000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffe00000000000000000000000000078 % 00000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffe00000000000000000000000000079 % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000078 % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000079 % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000073 % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000075 % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000073 % 000000000000000000000000000018000000000000000000000000000000000000400808000000 % 00000000600000000000000000000000000075 % 000000000000000000000000000018000000000000000000000000040002000004400908000000 % 00000000600000000000000000000000000073 % 000000000000000000000000000018000000000000000000000000040002000004000100000000 % 00000000600000000000000000000000000075 % 0000000000000000000000000000180000000003cf3763761e6e01af78ff81e3cfcefbd8e1a400 % 00000000600000000000000000000000000073 % 000000000000000000000000000018000000000639999199333102448442021624444909f24400 % 00000000600000000000000000000000000075 % 000000000000000000000000000018000000000410911111212103a41c4200740446890903a000 % 00000000600000000000000000000000000073 % 000000000000000000000000000018000000000410911111212100646442019404428909006000 % 0000000060000000000000000000000000006d % 000000000000000000000000000018000000000631911111232102248c42023624430909922400 % 0000000060000000000000000000000000005c % 0000000000000000000000000000180000000003cf3bbbbb9e7383c776e381dbc7e11ddce3c400 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 00000000000000000000000000001800000c000000000800006000018030300000000000000100 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000004010000000800002000008010100000000004000100 % 10000000600000000000000000000000000062 % 000000000000000000000000000018000004010000000000002000008010100000000004000000 % 1000000060000000000000000000000000005c % 00000000000000000000000000001800007c73ce7dbb1b70e023c78f8f1711c078f370df7cf337 % 3c68000060000000000000000000000000005c % 0000000000000000000000000000180000c4f91f20cc8989f0266858909993e0c5998924210918 % 9090000060000000000000000000000000005c % 000000000000000000000000000018000084811020888909002421d083909200810909d4203910 % 90e8000060000000000000000000000000005c % 000000000000000000000000000018000084811020888909002426508c9092008109083420c910 % 9018000060000000000000000000000000005c % 00000000000000000000000000001800008cc91920888909902468d191919320c5190914211910 % 9088000060000000000000000000000000005c % 00000000000000000000000000001800007671ce71dddf9ce073c76ecedf39c078f39de770efb9 % dcf0000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000067 % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005d % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 0000000000000000000000000000180000000180000010060600000200201006200003e1f3f800 % 0003000060000000000000000000000000005c % 000000000000000000000000000018000000008000001002020000020022100220000112111800 % 0001000060000000000000000000000000005c % 000000000000000000000000000018000000008000000002020000000002000200000112090400 % 00010000600000000000000000000000000014 % 000000000000000000000000000018000f1b8f81dfcfb1e2e2706a066e67b1e2634e011381201e % 371f000060000000000000000000000000005c % 00000000000000000000000000001800108c58808c24121332f8920231221212249f01e0f1e021 % 18b10000600000000000000000000000000006 % 0000000000000000000000000000180003885080d0e410721280e8022122107227500100092007 % 10a1000060000000000000000000000000001f % 000000000000000000000000000018000c88508053241192128018022122119220d00102090419 % 10a1000060000000000000000000000000005c % 00000000000000000000000000001800118851806464123232c88a022122123224590183110823 % 10a3000060000000000000000000000000005c % 000000000000000000000000000018000edceec023be39dbe770f20773f3b9df778e0383e3f81d % b9dd800060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000002000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000001e % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005f % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000000 % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000001 % 000000000000000000000000000018000fc1f3f800008010000000040000000010000040000000 % 0003000060000000000000000000000000005c % 000000000000000000000000000018000462111800008010000000040002000010000840000000 % 0001000060000000000000000000000000005c % 000000000000000000000000000018000432090400000000001800000002000000000800000000 % 0001000060000000000000000000000000005c % 0000000000000000000000000000180004138120373f8f36e0e00dccefe783e731c79ecf37000f % 371f000060000000000000000000000000005c % 000000000000000000000000000018000410f1e03990989311100e644732010f93ec4859988010 % 98b10000600000000000000000000000000000 % 000000000000000000000000000018000410092010909012111004246a12010812080850908003 % 90a10000600000000000000000000000000064 % 00000000000000000000000000001800043209041090901210e004242a1201081208085090800c % 90a10000600000000000000000000000000000 % 000000000000000000000000000018000423110811909892110404643232010c932c4851908811 % 90a3000060000000000000000000000000005c % 000000000000000000000000000018000fc3e3f81f39cf3f39f407ce11e3838711c78eef39c80e % f9dd800060000000000000000000000000003f % 000000000000000000000000000018000000000010000000011c04000000000010000000000800 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000010000000031804000000000050000000000000 % 0000000060000000000000000000000000005c % 00000000000000000000000000001800000000003800000001e00e0000000000e0000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000058 % 000000000000000000000000000018000000000030000100000300000003000000106000000000 % 0000000060000000000000000000000000007f % 000000000000000000000000000018000000800010002100000100000001000002102000000000 % 0000000060000000000000000000000000000f % 000000000000000000000000000018000000800010002000000100000001000002002000600000 % 0000000060000000000000000000000000000f % 0000000000000000000000000000181b8e3fe42f971e7b3cdc0173c1ae1f03c6e7b3e3839c6e38 % fbc79dc060000000000000000000000000000f % 0000000000000000000000000000181cdf108c6419a1216662019c225f310423121627c47e317c % 442c488060000000000000000000000000000e % 000000000000000000000000000018085010842410872142423d08e3b02100e212142404602140 % 40e80c8060000000000000000000000000000f % 00000000000000000000000000001808501084241099214242010b207021032212142403a02140 % 4328050060000000000000000000000000000f % 00000000000000000000000000001808d910846411a3214642011c623923046212146644322164 % 446c4500600000000000000000000000000000 % 0000000000000000000000000000180f8e38e3be1f1dbbbce701f3b3ce1d83b73bbbb387dc73b8 % e3b7820060000000000000000000000000000f % 000000000000000000000000000018080000000000000000000000000000000000000004600000 % 0000020060000000000000000000000000000f % 00000000000000000000000000001808000000000000000000000000000000000000000c600000 % 00000e0060000000000000000000000000000f % 0000000000000000000000000000181c0000000000000000000000000000000000000007800000 % 0000180060000000000000000000000000000f % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000007f % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000000e % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000000f % 00000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffe0000000000000000000000000003a % 00000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffe0000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffff % ff000000000000000000000000000000000018 % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 000000000000000000000000000000000002000300000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 00000000000000000000000000000000000200010c000000000000000000000000000000000000 % 0100000000030004000000000000000000001e % 000000000000000000000000000000000002000104000000000000000000000000000000000000 % 0100000000010008000000000000000000001e % 0000000000000000000000000000000000020e713c000000000000000000000000000000000000 % 0106df3df601639c000000000000000000001e % 000000000000000000000000000000000002118944000000000000000000000000000000000000 % 0102489099019448000000000000000000001e % 000000000000000000000000000000000002108944000000000000000000000000000000000000 % 0102d79091011448000000000000000000001e % 000000000000000000000000000000000002118944000000000000000000000000000000000000 % 0103f89091011448000000000000000000001e % 0000000000000000000000000000000000020e73be000000000000000000000000000000000000 % 010127f9fbc3bb8e000000000000000000001e % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000400000000000000000000000001e % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 00000000000000000000000000000000003fc00000000000000000000000000000000000000000 % 1ff0000000000000000000000000000000001e % 00000000000000000000000000000000003fc00000000000000000000000000000000000000000 % 0fe00000000000000000000000000000000008 % 00000000000000000000000000000000001fc00000000000000000000000000000000000000000 % 0fe00000000000000000000000000000000000 % 00000000000000000000000000000000001fc00000000000000000000000000000000000000000 % 0fe0000000000000000000000000000000005a % 00000000000000000000000000000000001f800000000000000000000000000000000000000000 % 07c00000000000000000000000000000000000 % 00000000000000000000000000000000000f800000000000000000000000000000000000000000 % 07c00000000000000000000000000000000000 % 00000000000000000000000000000000000f800000000000000000000000000000000000000000 % 07c00000000000000000000000000000000000 % 00000000000000000000000000000000000f000000000000000000000000000000000000000000 % 03800000000000000000000000000000000000 % 000000000000000000000000000000000007000000000000000000000000000000000000000000 % 03800000000000000000000000000000000000 % 000000000000000000000000000000000007000000000000000000000000000000000000000000 % 03800000000000000000000000000000000000 % 000000000000000001fffffffffffffffffffffffffffffffffffc00000000ffffffffffffffff % fffffffffffffffffffe000000000000000069 % 000000000000000001fffffffffffffffffffffffffffffffffffc00000000ffffffffffffffff % fffffffffffffffffffe000000000000000064 % 00000000000000000100000000000000000000000000000000000c000000008000000000000000 % 00000000000000000002000000000000000073 % 00000000000000000100000000000000000000000000000000000c000000008000000000000000 % 00000000000000000002000000000000000076 % 00000000000000000100000000000000000000000000000000000c000000008000000000000000 % 0000000000000000000200000000000000003f % 00000000000000000100000000000000000000000000000000000c000000008000000000100606 % 00000001800000000002000000000000000068 % 00000000000000000100000000000000000000000000000000000c000000008000000000100202 % 0000000080c000000002000000000000000066 % 00000000000000000100000000000000000000000000000000000c000000008000000000000202 % 00000000808000000002000000000000000068 % 00000000000000000100000000000000000000000000000000000c00000000800001dde7f1e2e2 % 380f1b8f809e7c000002000000000000000006 % 00000000000000000100000000000000000000000000000000000c000000008000008a12121332 % 7c108c58813320000002000000000000000079 % 00000000000000000100000000000000000000000000000000000c00000000800000d072107212 % 40038850812120000002000000000000000078 % 00000000000000000100000010060600018000000400001000000c000000008000005192119212 % 400c8850822120000002000000000000000079 % 00000000000000000100000010020200008000008400021000000c000000008000006232123232 % 64118851822320000002000000000000000078 % 00000000000000000100000000020200008000008000020000000c0000000080000021df39dbe7 % 380edceec41e70000002000000000000000079 % 00000000000000000101dfcfb1e2e2700f8e3c79eddde7b1e6e00c000000008000000000000000 % 00000000040000000002000000000000000078 % 000000000000000001008c24121332f8189f42c4848a121333100c000000008000000000000000 % 000000000c0000000002000000000000000079 % 00000000000000000100d0e41072128010900e8084d0721212100c000000008000000000000000 % 00000000000000000002000000000000000073 % 00000000000000000100532411921280109032808451921212100c000000008000000000000000 % 00000000000000000002000000000000000075 % 000000000000000001006464123232c8119946c48462321232100c000000008000000000000100 % 00000002000008000002000000000000000073 % 0000000000000000010023be39dbe7700ece3b78ee21dbb9e7380c000000008000000004000100 % 10000042000108000002000000000000000075 % 00000000000000000100000000000000000000000000000000000c000000008000000004000000 % 10000040000100000002000000000000000073 % 00000000000000000100000000000000000000000000000000000c000000008079e6e0df7de36e % 3c1e1ef677f3d8f37002000000000000000075 % 00000000000000000100000000000000000000000000000000000c0000000080c7331124221131 % 10213142230909998802000000000000000073 % 00000000000000000100000000000000000000000000000000000c0000000080821211d4207121 % 10072042343909090802000000000000000075 % 00000000000000000100000000000000000000000000000000000c000000008082121034219121 % 1019204214c909090802000000000000000073 % 00000000000000000100000008188000000000000000008000000c0000000080c6321114223121 % 1023314219190919080200000000000000006d % 00000000000000000100000010088000200000000000088000000c000000008079e739e771dbf3 % 9c1d9e7708eddcf39c0200000000000000005c % 00000000000000000100000020080000200000000000084000000c000000008000000000000000 % 0000000000000000000200000000000000005c % 00000000000000000100000027899c6e783ee1f211c35e4000000c000000008000000000000000 % 0000000000000000000200000000000000005c % 0000000000000000010000002c48be312011f31633e4884000000c000000008000000000000000 % 0000000000000000000200000000000000005c % 0000000000000000010000002808a021201102121207484000000c000000008000000000000000 % 0000000000000000000200000000000000005c % 0000000000000000010000002808a021201102121200c84000000c000000008000000000000000 % 0000000000000000000200000000000000005c % 0000000000000000010000002c48b221201192323324484000000c00000000800000040c400000 % 0000000000004000000200000000000000005c % 000000000000000001000000279ddc73b838e1d1d9c78e4000000c000000008000000804400010 % 0000000000044000000200000000000000005c % 00000000000000000100000020000000000000100000004000000c000000008000001004000010 % 00000000000420000002000000000000000062 % 00000000000000000100000010000000000000100000008000000c0000000080000013c4ce373c % 1f70f908e1af2000000200000000000000005c % 00000000000000000100000000000000000000380000000000000c0000000080000016245f1890 % 08f98b19f2442000000200000000000000005c % 00000000000000000100000000000000000000000000000000000c000000008000001404501090 % 0881090903a42000000200000000000000005c % 00000000000000000100000000000000000000000000000000000c000000008000001404501090 % 0881090900642000000200000000000000005c % 00000000000000000100000000000000000000000000000000000c000000008000001624591090 % 08c9191992242000000200000000000000005c % 00000000000000000100000000000000000000000000000000000c0000000080000013ceee39dc % 1c70e8ece3c72000000200000000000000005c % 00000000000000000100000000000000000000000000000000000c000000008000001000000000 % 0000080000002000000200000000000000005c % 00000000000000000100000000000000000000000000000000000c000000008000000800000000 % 00000800000040000002000000000000000067 % 00000000000000000100000000000000000000000000000000000c000000008000000000000000 % 00001c0000000000000200000000000000005c % 00000000000000000100000000000000000000000000000000000c000000008000000000000000 % 0000000000000000000200000000000000005d % 000000000000000001fffffffffffffffffffffffffffffffffffc00000000ffffffffffffffff % fffffffffffffffffffe00000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 01000000000000000000000000000000000014 % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 01000000000000000000000000000000000006 % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001f % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005f % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 01000000000000000000000000000000000000 % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 01000000000000000000000000000000000001 % 000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffff % ff00000000000000000000000000000000005c % 000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffff % ff00000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000064 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000058 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000007f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000001fc0000000000000000000 % 0000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000f80000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000700000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000007f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000180000000020000200000600000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000080000000020000200000200000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000080000000000000000000200000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000f9dee1e6ec67806e6ec6e271dc0000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000001888b1213322c4092332732f8580000000 % 0000000000000000000000000000000000003a % 00000000000000000000000000000000000000000000108ca1072222800ea22221280200000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000001085211922228001a22221280700000000 % 0000000000000000000000000000000000003a % 00000000000000000000000000000000000000000000118521232222c408a222232c8980000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000ec2739df777780f77773e771dc0000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000002000000000000000020000000000000 % 0000000000000000000000000000000000003a % 00000000000000000000000000000000000000000000000e000000000000000020000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000018000000000000000070000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000018 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 73.876 36.313] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -860 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (cold, warm) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 116.608 150.819] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (warm, hot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 88.75 19.156] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -340 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (release) s -340 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (solver?) s savemat setmatrix n 82.5 15 m 95 15 l 100 20 l 95 25 l 82.5 25 l 77.5 20 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 51.403 93.248] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (hot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 91.564 93.248] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (warm) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 131.528 93.248] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (cold) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 40 36.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -614 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (free retained) s -756 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (data structures) s savemat setmatrix n 25 32.5 m 55 32.5 l 55 42.5 l 25 42.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 90 36.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -490 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (determine) s -588 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (type of start) s savemat setmatrix n 75 32.5 m 105 32.5 l 105 42.5 l 75 42.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 90 74.61] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -674 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (initialise local) s -874 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraint system) s -402 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(scaling\)) s savemat setmatrix n 73.75 70 m 106.25 70 l 106.25 85 l 73.75 85 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 90 56.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -732 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (update options) s -718 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (and tolerances) s savemat setmatrix n 75 52.5 m 105 52.5 l 105 62.5 l 75 62.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 65 160.406] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1010 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable deactivation) s -724 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(client request\)) s savemat setmatrix n 45 155 m 85 155 l 85 167.5 l 45 167.5 l cl gsave 0 0 0 0.176 0 B grestore n 90 32.5 m 88.991 29.472 l 91.009 29.472 l cl 0 0 0 F n 90 25 m 90 29.472 l gsave 0 0 0 0.176 0 B grestore n 90 52.5 m 88.991 49.472 l 91.009 49.472 l cl 0 0 0 F n 90 42.5 m 90 49.472 l gsave 0 0 0 0.176 0 B grestore n 90 47.5 m 86.972 48.509 l 86.972 46.491 l cl 0 0 0 F n 40 42.5 m 40 47.5 l 86.972 47.5 l gsave 0 0 0 0.176 0 B grestore n 90 70 m 88.991 66.972 l 91.009 66.972 l cl 0 0 0 F n 90 62.5 m 90 66.972 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 50 101.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -384 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (perform) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (hot start) s savemat setmatrix n 35 97.5 m 65 97.5 l 65 107.5 l 35 107.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 90 101.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -384 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (perform) s -536 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (warm start) s savemat setmatrix n 75 97.5 m 105 97.5 l 105 107.5 l 75 107.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 130 101.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -384 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (perform) s -462 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (cold start) s savemat setmatrix n 115 97.5 m 145 97.5 l 145 107.5 l 115 107.5 l cl gsave 0 0 0 0.176 0 B grestore n 90 97.5 m 88.991 94.472 l 91.009 94.472 l cl 0 0 0 F n 90 85 m 90 94.472 l gsave 0 0 0 0.176 0 B grestore n 50 97.5 m 48.991 94.472 l 51.009 94.472 l cl 0 0 0 F n 90 90 m 50 90 l 50 94.472 l gsave 0 0 0 0.176 0 B grestore n 130 97.5 m 128.99 94.472 l 131.01 94.472 l cl 0 0 0 F n 90 90 m 130 90 l 130 94.472 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 66.493 150.766] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (cold) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 90 124.269] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1176 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (common start activities:) s -1514 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (determine loadable constraints) s -1586 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (and variables; initialise PSE and) s -1592 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (DSE pricing, pivot rejection, and) s -1714 695 m 927 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (perturbation-based antidegeneracy) s savemat setmatrix n 57.5 120 m 122.5 120 l 122.5 142.5 l 57.5 142.5 l cl gsave 0 0 0 0.176 0 B grestore n 90 120 m 88.991 116.97 l 91.009 116.97 l cl 0 0 0 F n 90 107.5 m 90 116.97 l gsave 0 0 0 0.176 0 B grestore n 90 112.5 m 86.972 113.51 l 86.972 111.49 l cl 0 0 0 F n 50 107.5 m 50 112.5 l 86.972 112.5 l gsave 0 0 0 0.176 0 B grestore n 90 112.5 m 93.028 111.49 l 93.028 113.51 l cl 0 0 0 F n 130 107.5 m 130 112.5 l 93.028 112.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 125 19.156] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -614 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (free retained) s -756 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (data structures) s savemat setmatrix n 110 15 m 140 15 l 140 25 l 110 25 l cl gsave 0 0 0 0.176 0 B grestore n 110 20 m 106.97 21.009 l 106.97 18.991 l cl 0 0 0 F n 100 20 m 106.97 20 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 101.474 22.879] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -43 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n 147.5 27.5 m 146.49 24.472 l 148.51 24.472 l cl 0 0 0 F n 140 20 m 147.5 20 l 147.5 24.472 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 147.5 32.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 115 158.642] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -764 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable and/or) s -1010 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraint activation) s -724 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(client request\)) s savemat setmatrix n 95 155 m 135 155 l 135 167.5 l 95 167.5 l cl gsave 0 0 0 0.176 0 B grestore n 65 155 m 63.991 151.97 l 66.009 151.97 l cl 0 0 0 F n 90 142.5 m 90 147.5 l 65 147.5 l 65 151.97 l gsave 0 0 0 0.176 0 B grestore n 115 155 m 113.99 151.97 l 116.01 151.97 l cl 0 0 0 F n 90 147.5 m 115 147.5 l 115 151.97 l gsave 0 0 0 0.176 0 B grestore n 90 15 m 88.991 11.972 l 91.009 11.972 l cl 0 0 0 F n 90 7.5 m 90 11.972 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 90 5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -230 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (start) s savemat setmatrix n 90 180 m 88.991 176.97 l 91.009 176.97 l cl 0 0 0 F n 65 167.5 m 65 172.5 l 90 172.5 l 90 176.97 l gsave 0 0 0 0.176 0 B grestore n 115 167.5 m 115 172.5 l 90 172.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 90 185] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -824 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dynamic simplex) s savemat setmatrix n 55 37.5 m 58.028 36.491 l 58.028 38.509 l cl 0 0 0 F n 75 37.5 m 58.028 37.5 l gsave 0 0 0 0.176 0 B grestore userdict /#copies 1 put grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore DyLP-1.10.4/DyLP/doc/Figures/epsupatch.sed0000644000175200017520000000260711171477034016537 0ustar coincoin# Patch file for .eps files produced by IslandDraw 2.3 for SunOS, running on # Solaris in compatibility mode. We get garbage at the beginning and at the # end, which has to be stripped. Note that this file must be run with the # -n flag for sed --- it works by not printing the junk lines. # -- lh, 97.3.2 -- # Conveniently enough, this same set of actions does a great job of deleting # the binary header and preview image of an EPSF file with TIFF preview. # -- lh, 98.12.10 -- # For IslandDraw 2.3, the first line(s) are # "<>%!PS-Adobe-2.0 EPSF-2.0" # We want to strip the binary junk, leaving the proper first line. For # IslandDraw 4.10, there won't be any binary junk, but that's ok. 1,/%!PS-Adobe/s/^[^%]*%!PS-Adobe/%!PS-Adobe/p # God only knows what this line is doing in the file, but it's not needed. /userdict \/#copies [0-9][0-9]* put/d # Except for the previous line, we want lines 2 through the final restore. # After the final line ("restore"), there's yet more binary junk. It might be # safe to search for "restore" on a line by itself, but it strikes me as more # robust to look for "%%Trailer" and then print the rest of the lines down # to the final restore. >> Order is important here! << The trick is to use # %%Trailer twice, deleting one of them. You can't delete the line before # printing it, eh? /%%Trailer/,/restore$/p 2,/%%Trailer/{ /%%Trailer/d p } DyLP-1.10.4/DyLP/doc/dylp.tex0000644000175200017520000000676311507440660014141 0ustar coincoin\documentclass[titlepage]{article} \usepackage{loubookman} \usepackage{loustandard} \usepackage{graphics} \usepackage{amsmath} \usepackage{loumath} \usepackage{codedocn} %\newcommand{\mypath}{/cs/mitacs1/lou/Bonsai/Doc/Dylp.Coin091002} \input{dylpabsdir} \newcommand{\figures}{\mypath/Figures} \newsavebox{\tmpbox} \newcommand{\bonsai}{\textbf{bonsai}\xspace} \newcommand{\glpk}{GLPK\xspace} \newcommand{\consys}{\textsc{consys}\xspace} \newcommand{\dylp}{\textsc{dylp}\xspace} \newcommand{\Dylp}{\textsc{Dylp}\xspace} \newcommand{\bonsaiG}{\textbf{bonsaiG}\xspace} \newcommand{\coin}{\textsc{Coin-OR}\xspace} \newcommand{\netlib}{Netlib\xspace} \newcommand{\miplib}{MIPLIB\xspace} \renewcommand{\textfraction}{.1} \renewcommand{\topfraction}{.9} \renewcommand{\bottomfraction}{\topfraction} \makeatletter % numberline amounts to \hbox to \@tempdima {box contents}. This change % will set the section number (#1) right-justified, with a bit more space % before the section title. See texmf-dist/tex/latex/base/latex.ltx. \renewcommand{\numberline}[1]{\hb@xt@\@tempdima{\hfil#1\hspace{1.5ex}}} % In order to accommodate the extra space for numberline, we have to go in % and change the space for l@section and l@subsection. (Don't need % l@subsubsection so far, but it's here if needed.) See texmf-dist/tex/latex/ % base/article.cls and Sec. 2.3.2 in the Latex Companion, 2e. \renewcommand*{\l@section}[2]{% \ifnum \c@tocdepth >\z@ \addpenalty\@secpenalty \addvspace{1.0em \@plus\p@}% \setlength\@tempdima{3.5em}% \begingroup \parindent \z@ \rightskip \@pnumwidth \parfillskip -\@pnumwidth \leavevmode \bfseries \advance\leftskip\@tempdima \hskip -\leftskip #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par \endgroup \fi} \renewcommand*{\l@subsection}{\@dottedtocline{2}{3.5em}{3.5em}} \renewcommand*{\l@subsubsection}{\@dottedtocline{3}{3.8em}{3.2em}} \makeatother \title{\bfseries \dylp: a dynamic LP code} \author{Lou Hafer} \date{October, 2009} \begin{document} \maketitle \thispagestyle{empty} \vspace*{\fill} \noindent Copyright (C) 2005, 2006, 2007, 2008, 2009 Lou Hafer \noindent An earlier version of this document is available as SFU-CMPT TR 2005-18. \noindent All rights reserved. This documentation is made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution. A copy of the EPL v1.0 can also be obtained from the URL \texttt{http://www.eclipse.org/legal/epl-v10.html} \begin{abstract}\noindent \dylp is a full implementation of the dynamic simplex algorithm for linear programming. Dynamic simplex attempts to maintain a reduced active constraint system by regularly purging loose constraints and variables with unfavourable reduced costs, and adding violated constraints and variables with favourable reduced costs. In abstract, the code alternates between primal and dual simplex algorithms, using dual simplex to reoptimise after updating the constraint set and primal simplex to reoptimise after updating the variable set. \end{abstract} \tableofcontents \pagebreak \listoffigures \listoftables \include{intro} \include{notation} \include{updateformulae} \include{pricing} \include{perturbed} \include{antidegenlite} \include{lpbasis} \include{accuracy} \include{scaling} \include{solutions} \include{startup} \include{dynamic} \include{dual} \include{primal} \include{varmgmt} \include{conmgmt} \include{interface} \include{statistics} \include{debug} \bibliographystyle{louplain} \bibliography{dylp} \end{document} DyLP-1.10.4/DyLP/doc/Makefile.am0000644000175200017520000000207311507440660014471 0ustar coincoin# Copyright (C) 2009 Lou Hafer # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id$ # Author: Lou Hafer SFU 2009.04.15 AUTOMAKE_OPTIONS = foreign # See the comment for distclean-local in ../Makefile.am CONFIG_CLEAN_FILES = DyLPDocInstalldir = @DYLPDOCDIR@ DyLPDocInstall_DATA = dylp.pdf dylp.ps # Make sure the source files are distributed. BUT NOTE that Coin doesn't handle # distributions this way and it's highly unlikely this will work as you'd # like. EXTRA_DIST = $(dylpdoc_SOURCES) # The TeX source files for the dylp documentation. dylpfigs.tex is actually a # shell to build just the figures. Handy for presentations. dylpdoc_SOURCES = accuracy.tex \ antidegenlite.tex \ conmgmt.tex \ debug.tex \ dual.tex \ dylp.tex \ dylpfigs.tex \ dynamic.tex \ interface.tex \ intro.tex \ lpbasis.tex \ notation.tex \ perturbed.tex \ pricing.tex \ primal.tex \ scaling.tex \ solutions.tex \ startup.tex \ statistics.tex \ updateformulae.tex \ varmgmt.tex DyLP-1.10.4/DyLP/doc/antidegenlite.tex0000644000175200017520000004013411171477034015775 0ustar coincoin\section{Lightweight Anti-Degeneracy Measures Based on Hyperplane Alignment} \label{sec:AntiDegenLite} \newcommand{\nblb}{\,\underline{\makebox[\width-3pt][c]{$\scriptstyle \,N$}}} \newcommand{\nbub}{\;\overline{\makebox[\width-3pt][c]{$\scriptstyle N\,$}}} In addition to the perturbed subproblem anti-degeneracy algorithm described in \secref{sec:PerturbedAntiDegeneracy}, \dylp provides a light-weight anti-degeneracy mechanism based on hyperplane alignment. In the code and documentation, this is referred to as `anti-degen lite'. Each constraint $a_k x \leq b_k$ defines an associated hyperplane at equality. In the absence of degeneracy, a simplex pivot consists of moving away from one hyperplane along an edge until another hyperplane blocks further progress. The hyperplane being left becomes loose, and the blocking hyperplane becomes tight. The choice of entering variable $x_j$ determines the constraint that will become loose, and the choice of leaving variable $x_i$ determines the constraint that will become tight. Ideally, the choice of constraints is unique, but life is seldom ideal. Most often the lack of uniqueness is due to degeneracy, in which one or more basic variables are at their upper or lower bounds. Geometrically, there are more tight constraints than required to define the current extreme point. In this case the change of basis that occurs with the pivot will not result in a move to a new extreme point. This section describes a suite of measures based on hyperplane alignment which try to better the odds of selecting hyperplanes which will form an edge that escapes from the degenerate extreme point. Because all constraints at a degenerate vertex are tight, some terminology will be useful to describe the changes associated with a pivot. For this section only, the terms activate and deactivate will be used as follows: \begin{itemize} \item When the slack variable for a constraint moves to the basic partition, the constraint is deactivated. When the slack variable moves to the nonbasic partition, the constraint is activated. \item When an architectural variable moves to the basic partition, the relevant bound constraint is deactivated. When an architectural variable moves to the nonbasic partition, the relevant bound constraint is activated. \end{itemize} \subsection{Activation of Constraints} In both the primal and dual simplex algorithms, the constraint which is activated by a pivot depends on the leaving variable and its direction of motion. Before discussing the types of alignment calculations, it will be useful to discuss the activation of constraints. Knowing the type of constraint (`$\leq$' or `$\geq$') is necessary because it determines the direction of the normal with respect to the feasible region. \dylp assumes that the majority of explicit constraints of the primal problem are of the form $a_k x \leq b_k$. It also understands range constraints of the form $\check{b}_k \leq a_k x \leq b_k$. These are implemented by placing an upper bound on the associated slack variable $s_k$, but for purposes of determining the constraint to be activated we need to recognise that there are really two constraints, $a_k x \geq \check{b}_k$ and $a_k x \leq b_k$. Bounded variables are handled implicitly by the primal simplex algorithm. When a bounded variable becomes nonbasic at its lower bound, the constraint $x_k \geq l_k$ is activated; when it becomes nonbasic at its upper bound, the constraint $x_k \leq u_k$ is activated. A final complication is introduced in phase I of the primal simplex, where it's possible to approach a constraint from the `wrong' side in the process of finding a primal feasible basic solution. For example, if a slack variable $s_k < 0$ will increase and leave the basis at 0, the constraint which is becoming tight is actually $a_k x \geq b_k$. \aside{Is this really a valid insight? In terms of blocking motion, it's true. In terms of alignment with the objective, for example, I have doubts.} Turning to the dual problem, the question of what constraint is being activated is substantially obscured by the mechanics of running the dual simplex algorithm from the primal data structures. A much clearer picture can be obtained by expanding the primal system to include explicit upper and lower bound constraints and examining the resulting dual constraints (\cite[\S3.4]{For92}, or see \cite{Haf98a} for an extended development). Briefly, let $y$ be the dual variables associated with the original explicit constraints $a_k x \leq b_k$ (the architectural constraints), $\check{y}$ be the dual variables associated with the lower bound constraints, and $\hat{y}$ be the dual variables associated with the upper bound constraints. A superscript $\underline{N}$ will represent the set of primal variables at their lower bound, $\overline{N}$ the set of primal variables at their upper bound, and $B$ the set of basic primal variables. The set of dual constraints can then be written as \begin{equation*} \begin{aligned} yB - \check{y}^{B}I + \hat{y}^{B}I & = c^B \\ y\underline{N} - \check{y}^{\nblb}I + \hat{y}^{\nblb}I & = c^{\nblb} \\ y\overline{N} - \check{y}^{\nbub}I + \hat{y}^{\nbub}I & = c^{\nbub} \end{aligned} \end{equation*} where the first term in each dual constraint comes from the primal architectural constraints, the second term from the lower bound constraints, and the third term from the upper bound constraints. The variables $\check{y}^{B}$, $\hat{y}^{B}$, $\hat{y}^{\nblb}$, and $\check{y}^{\nbub}$ are dual nonbasic and therefore have the value zero. (They are associated with primal bound constraints which are not tight.) We can rewrite the dual constraints as \begin{equation*} \begin{aligned} yB = c^B \\ y\underline{N} - \check{y}^{\nblb}I = c^{\nblb} \\ y\overline{N} + \hat{y}^{\nbub}I = c^{\nbub} \end{aligned} \end{equation*} We can then interpret the constraints $y\underline{N} - \check{y}^{\nblb}I = c^{\nblb}$ as $y\underline{N} \geq c^{\nblb}$, with $\check{y}^{\nblb}$ acting as the surplus variables. Similarly, the constraints $y\overline{N} + \hat{y}^{\nbub}I = c^{\nbub}$ can be interpreted as $y\overline{N} \leq c^{\nbub}$, with $\hat{y}^{\nbub}$ acting as the slack variables. With this interpretation in hand, it's easy to determine the hyperplane that's activated by a pivot. When a dual variable $\check{y}^{\nblb}_k$ is driven out of the basis at 0 ($x_k$ enters rising from its lower bound), the constraint $y a_k \geq c_k$ becomes tight. When a dual variable $\hat{y}^{\nbub}_k$ is driven out of the basis at 0 ($x_k$ enters decreasing from its upper bound), the constraint $y a_k \leq c_k$ becomes tight. This interpretation is uniform for the original primal variables as well as the primal slack variables. For the most common case of a primal constraint $a_i x \leq b_i$, with associated slack $s_i$, $0 \leq s_i \leq \infty$, the dual constraint reduces to $y_i \geq 0$, and this is handled as an implicit bound by the dual simplex algorithm implemented in \dylp. (Range constraints complicate the interpretation, but not the mechanics, of the implementation. Again, see \cite{Haf98a} for a detailed explanation.) In the sections which follow, the alignment calculations are developed in terms of the most common constraint form ($a_k x \leq b_k$ in the case of the primal simplex, and $y a_k \geq c_k$ in the case of the dual simplex). Accommodating the different constraint types described in this section is simply a matter of correcting the sign of the calculation as needed to account for the direction of the constraint normal. \subsection{Alignment With Respect to the Objective Function} The primal objective used in \dylp is $\min cx$. We need to move in the direction $-c$ until we reach an extreme point of the polytope where the cone formed by the normals of the active constraints includes $-c$. If the goal is to travel in the direction $-c$, one approach would be to leave each vertex by moving along the edge which most nearly points in the direction $-c$. The edges traversed by the simplex algorithm are simply the intersections of active hyperplanes. If we're trying to construct an edge with which we can leave a degenerate vertex, we could choose to activate a hyperplane $a_k x = b_k$ such that $-c$ most nearly lies in the hyperplane, on the theory that its intersection with other active hyperplanes at the vertex is more likely to produce an edge with the desired orientation. This is the `Aligned' strategy, because we want the hyperplanes most closely aligned with the normal of the objective. Going to the other extreme, at the optimal vertex it must be true that the active hyperplanes block further motion in the direction $-c$, and $-c$ must lie within the cone of normals of the active hyperplanes. One can make the argument that a good choice of hyperplane would the one that most nearly blocks motion in the direction $-c$, as it's likely to be active at the optimal vertex. This is called the `Perpendicular' strategy, because we want the hyperplanes which are most nearly perpendicular to the normal of the objective. For constraints $a_k x \leq b_k$ the normal points out of the feasible region. Let the alignment of the normal $a_k$ with $-c$ be calculated as $\displaystyle \frac{a_i \cdot c}{\norm{a_i}\norm{c}}$. Then for the Perpendicular strategy, we want to select the hyperplane $a_i x = b_i$ such that $\displaystyle i = \arg \max_k \frac{a_k \cdot c}{\norm{a_k}}$ over all constraints $a_k x \leq b_k$ in the degenerate set. For the Aligned strategy, the criteria is a bit more subtle. If $a_k \cdot -c = 0$, $-c$ lies in the hyperplane $a_k x = b_k$. Selecting the hyperplane $i$ such that $\displaystyle i = \arg \min_k \abs{\frac{a_k \cdot c}{\norm{a_k}}}$ is not quite sufficient. Where possible, \dylp attempts to choose hyperplanes which are tilted in the direction of the objective, so as to bound the problem. The preferred hyperplane is $a_i x = b_i$ such that $\displaystyle i = \arg \min_{\{k \mid a_k \cdot c \geq 0\}} \frac{a_k \cdot c}{\norm{a_k}}$ over the constraints in the degenerate set. If $a_k \cdot c < 0$ for all $k$, the preferred hyperplane is chosen as $\displaystyle i = \arg \max_k \frac{a_k \cdot c}{\norm{a_k}}$. The dual objective used in \dylp is $\min yb$, but we must be careful here to to include the effect of the bounds on the primal variables. The objective is properly stated as $\min \begin{bmatrix} y & \check{y} & \hat{y} \end{bmatrix} \trans{\begin{bmatrix} b & -l & u \end{bmatrix}}$, and we will need to include the coefficients of $\check{y}$ and $\hat{y}$ in the constraint normals. (In the primal we could ignore this effect, because the objective coefficients associated with the slack variables are uniformly zero.) For dual constraints $y a_k \geq c_k$, the normal $\begin{bmatrix} a_k & -e_k & 0 \end{bmatrix}$ will point into the feasible region and \dylp calculates the alignment of $\begin{bmatrix} -b & l & -u \end{bmatrix}$ with the hyperplane as $\displaystyle \frac{b \cdot a_k + l_k} {(\norm{a_k}+1)\norm{\begin{bmatrix} b & -l & u \end{bmatrix}}}$, so that a positive result identifies a constraint which blocks motion in the direction of the objective. For a constraint $y a_k \leq c_k$, the calculation is $\displaystyle \frac{(-b) \cdot a_k - u_k} {(\norm{a_k}+1)\norm{\begin{bmatrix} b & -l & u \end{bmatrix}}}$. Selection of a specific leaving variable $\check{y}^{\nblb}_k$ or $\hat{y}^{\nbub}_k$ is done using the same criteria outlined for the Perpendicular and Aligned cases in the primal problem. \subsection{Alignment With Respect to the Direction of Motion} The selection of an entering variable specifies the desired direction of motion for the pivot. At a degenerate vertex, we cannot move in the desired direction because the set of active hyperplanes does not contain this edge. Intuitively, activating a hyperplane which is closely aligned with the desired direction of motion might increase the chance of being able to move in that direction. For the primal simplex, the direction of motion derived in \secref{sec:PSEPricing} is $\eta_j = \trans{\begin{bmatrix} -B^{\,-1}a_j & -e_j \end{bmatrix}}$. The normal of a constraint $a_k x \leq b_k$ points out of the feasible region. The alignment of $\eta_j$ and the normal $a_k$ is calculated as $\displaystyle \frac{a_k \cdot \eta_j}{\norm{a_k}\norm{\eta_j}}$, so that a positive value identifies a hyperplane which blocks motion in the direction $\eta_j$. It's important to note that normal $a_k$ in this calculation is that of the inequality --- the coefficient associated with the slack $s_k$ is \textit{not} included. This means that $a_k \cdot \eta_j \equiv -\overline{a}_{kj}$. For a bound constraint, the relation is obvious by inspection. If, for example, the constraint is $x_k \leq u_k$, the normal is $e_k$, and $e_k \cdot -\overline{a}_j = -\overline{a}_{kj}$. For an architectural constraint, it's necessary to look at the calculation in a way that separates the contributions of the architectural and slack variables, and basic and nonbasic variables. We are interested in the structure of the product $\begin{bmatrix} B & N \end{bmatrix} \begin{bmatrix} -B^{\,-1}N \\ I \end{bmatrix}$ for loose constraints which will be activated by pivoting the associated slack variable out of the basis. Breaking up the matrices as detailed in \secref{sec:Notation}, we have \begin{align*} \begin{bmatrix} B^l & I & N^l & 0 \end{bmatrix} \begin{bmatrix} -B^{\,-1}N \\ I \end{bmatrix} & = \begin{bmatrix} B^l & I & N^l & 0 \end{bmatrix} \begin{bmatrix} -\begin{bmatrix} (B^t)^{-1} & 0 \\ -B^l(B^t)^{-1} & I \end{bmatrix} \begin{bmatrix} N^t \\ N^l \end{bmatrix} \\ \begin{bmatrix} I & 0 \\ 0 & I \end{bmatrix} \end{bmatrix} \\ & = \begin{bmatrix} B^l & I & N^l & 0 \end{bmatrix} \begin{bmatrix} -(B^t)^{-1} N^t & -(B^t)^{-1} \\ B^l(B^t)^{-1}N^t - N^l & B^l(B^t)^{-1} \\ I & 0 \\ 0 & I \end{bmatrix} \\ & = \begin{bmatrix} -B^l(B^t)^{-1} N^t + B^l(B^t)^{-1} N^t - N^l + N^l & -B^l(B^t)^{-1} + B^l(B^t)^{-1} \end{bmatrix} \end{align*} Removing the contribution due to the basic slack variables, we have $\begin{bmatrix} -B^l(B^t)^{-1} N^t + N^l & -B^l(B^t)^{-1} \end{bmatrix}$. Because the leaving variable for the pivot is a slack, the pivot element $\overline{a}_{kj}$ will be drawn from the component $\begin{bmatrix} B^l(B^t)^{-1}N^t - N^l & B^l(B^t)^{-1} \end{bmatrix}$ in $-B^{-1}N$, and the equivalence is verified. To finish the alignment calculation for the purposes of selecting a leaving variable, all that is needed is to perform the normalisation by $\norm{a_k}\norm{\eta_j}$, and since $\norm{\eta_j}$ is constant during the selection of the leaving variable, we need only divide by $\norm{a_k}$ for comparison purposes. The selection of a leaving variable using the Aligned strategy is as outlined in the previous section. Given that $a_k \cdot \eta_j \equiv -\overline{a}_{kj}$, it's worth taking a moment to consider a common tie-breaking rule for selecting the leaving variable --- pick the variable with the largest $\abs{\overline{a}_{kj}}$, to maintain numerical stability. In fact, this amounts to selecting a hyperplane to activate using an unnormalised variation of the Perpendicular strategy. The obvious corollary is that using the Aligned strategy presents a potential danger to numerical stability by deliberately choosing small pivots. For the dual simplex, the direction of motion $\zeta_i$ is more complicated. Fortunately, we need only consider the portion of $\zeta_i$ in the space of the dual variables $y$. As derived in \secref{sec:DSEPricing}, this is simply row $\beta_i$ of $B^{\,-1}$. For the dual constraints $y a_k \geq c_k$, the normal points into the feasible region. To maintain the convention that the alignment calculation should produce a positive result if the constraint blocks motion, the alignment calculation used by \dylp is $\displaystyle -\frac{\zeta_i \cdot a_k}{\norm{\zeta_i}\norm{a_k}}$. Given that we're only interested in the portion of $\zeta_i \cdot a_k$ contributed by the dual variables $y$, it's immediately apparent that the alignment calculation can be reduced to $\displaystyle -\frac{\overline{a}_{ik}}{\norm{a_k}}$ for purposes of selecting the leaving dual variable. The final selection of a leaving dual variable using the Aligned or Perpendicular strategy proceeds as outlined in the previous section. DyLP-1.10.4/DyLP/doc/varmgmt.tex0000644000175200017520000002567011171477034014646 0ustar coincoin\section{Variable Management} \label{sec:VariableManagement} Activation and deactivation of variables and constraints is a core activity for dynamic simplex. The activation or deactivation of variables can occur as an independent activity or as a consequence of constraint activation and deactivation (\vid \secref{sec:ConstraintManagement}). During normal execution (\vid Fig.~\ref{fig:DylpFlow}) variables are activated (\pgmid{dy_activateVars}) when primal simplex returns an indication of infeasibility or when primal or dual simplex achieve optimality. Variables are deactivated (\pgmid{dy_deactivateVars}) when dual simplex achieves optimality and returns to primal phase~II after adding variables. In a somewhat different context, dual feasible variables are evaluated as dual bounding constraints and activated (\pgmid{dy_dualaddvars}) when dual simplex indicates an unbounded dual (infeasible primal). Dual feasible variables are also activated (\pgmid{dy_activateVars}) when dual simplex will be reentered after adding constraints without an intervening primal simplex phase. The motivation is to increase the probability that the dual problem will remain bounded. Figure \ref{fig:VarmgmtCalls} shows the call structure for the top-level variable activation and deactivation routines. \begin{figure}[htbp] \centering \includegraphics{\figures/varmgmtcalls} \caption{Call Graph for Variable Management Routines}\label{fig:VarmgmtCalls} \end{figure} \subsection{Variable Management Primitives} There are two primitive variable management routines: \begin{itemize} \item \pgmid{dy_actNBPrimArch} activates a primal architectural variable into the nonbasic partition. \item \pgmid{dy_deactNBPrimArch} deactivates a nonbasic primal architectural variable. \end{itemize} \dylp assumes that inactive variables are feasible and at bound and provides no independent way to specify the value of the variable. As a special case, inactive free variables are assumed to have the value zero. A consequence of this is that it is not possible to deactivate a basic variable; the variable must first be forced into the nonbasic partition. Unless the variable is basic at bound, this will change the variable's value. The special-purpose routine \pgmid{dy_deactBPrimArch} performs this service when \dylp is attempting to force primal feasibility by deactivating infeasible basic variables. \dylp provides no method for activating an architectural variable into the basic partition. When activating a constraint, the logical variable associated with the constraint is always used as the new basic variable. \subsection{Activation of Variables} \label{sec:VariableActivation} \dylp looks for variables to activate whenever optimality is attained for the current set of constraints and variables, or when the active system is found to be infeasible. The set of inactive variables is scanned and any variables with favourable reduced costs are activated and placed in the primal nonbasic partition. If an optimal solution has been found for the active constraint system by either primal or dual simplex, \pgmid{scanPrimVarStdAct} is called to select a set of variables to be activated under the assumption that primal phase~II iterations will resume after the variables are added. The reduced costs are calculated using the original objective function for the problem. Variables are selected for activation if their reduced cost indicates they are not at their optimal bound (\ie, dual infeasible). If phase~I of the primal simplex has found the problem to be infeasible, \pgmid{scanPrimVarStdAct} is again used to select the set of variables to be activated, but the reduced costs are calculated using the phase~I objective (as described in \secref{sec:PrimalPhaseI}). Primal phase~I iterations resume after variables are added. Normally, when dual simplex indicates optimality, primal phase~II is executed after adding variables with favourable (dual infeasible) reduced costs. It can happen, however, that there are no such variables. In this case, \dylp will attempt to add violated constraints and, if any are found, resume execution of dual simplex. To increase the likelihood that the dual problem will remain bounded, \dylp will again attempt to add variables before resuming dual simplex iterations, but the criteria in this case will be variables whose reduced costs are dual feasible (\ie, unfavourable from a primal perspective). Activating a variable into the nonbasic partition will not change to the basis, primal or dual variable values, or DSE pricing information. The reduced cost and the projected column norm used for PSE pricing must be properly initialised for the new variable. The action taken for the projected column norm depends on the context of variable activation. If primal simplex was executing prior to variable activation and will be resumed after variable activation, the projected column norms are up-to-date and correct values must be calculated for the new variables. In other cases, PSE pricing information will be initialised when primal simplex iterations resume and no action is required. If the dual simplex has found the problem to be primal infeasible (dual unbounded), the problem of selecting variables to add should be viewed from the perspective of looking for dual constraints which will bound the problem. The goal is to activate one or more dual constraints and return to dual simplex iterations. The selection of the candidate entering dual variable $y_i$ (leaving primal variable $x_i$) has fixed the direction of travel, $\zeta_i$. The best outcome will be to add dual constraints (primal variables) which block travel in the direction $\zeta_i$. If that isn't possible (because activating any bounding dual constraint would result in the loss of dual feasibility) a second possibility is to activate variables which will change the dual reduced costs (the values of the primal basic variables) so that a different dual variable $y_k$ is selected to enter. The hope is that motion in a different direction $\zeta_k$ may make it possible to activate constraints which will bound the dual without loss of feasibility. The subroutine \pgmid{dy_dualaddvars} controls the search process, and can activate three classes of variables, for convenience called type~1, type~2, and type~3. Type~1 variables are those variables which constitute feasible dual constraints which bound the dual problem. These can be activated and placed in the primal nonbasic partition without losing dual feasibility. Type~1 variables are preferred, as \pgmid{dy_dualaddvars} can activate any number of them in a given call. If there are no type~1 variables, \pgmid{dy_dualaddvars} considers type~2 variables. Type~2 variables are those variables which constitute dual constraints that bound the dual problem and which, while not dual feasible if activated into the primal nonbasic partition, will give a dual feasible solution if activated and immediately pivoted into the basis. This is equivalent to adding a cutting plane which renders the current solution infeasible and executing a single pivot to regain feasibility; necessarily, the objective will deteriorate. In the context of Table \ref{Tbl:DualPivotRules} in \secref{sec:DualStdSelectInVar}, this amounts to selecting a pivot with the signs of $\overline{c}_j$ and $\overline{a}_{ij}$ reversed. The pivot is sufficiently similar to a normal dual pivot that it can be handled by \pgmid{dy_dualpivot}. It is not standard in that the entering primal variable will move away from its bound toward the infeasible side (\eg, $x_j$ would enter falling from its lower bound with $\overline{c}_j < 0$ and $\overline{a}_{ij} > 0$). One such variable can be activated on each call to \pgmid{dy_dualaddvars}. In the absence of type~1 or type~2 variables, type~3 variables are considered. These are variables which are not dual feasible at their current bound but which will reduce the infeasibility of the leaving primal variable if activated and changed to their opposite bound. The motivation for activating a type~3 variable is that it makes the reduced cost of $y_i$ less desirable, so that some other variable $y_k$ can be selected to enter (thus moving in a different direction $\zeta_k$). The routine \pgmid{type3activate} will attempt to activate as many type~3 variables as required in order to change the entering dual variable $y_i$. Activation of type~2 or type~3 variables is generally not cost-effective. By default, \dylp limits \pgmid{dy_dualaddvars} to type~1 activations. The dynamic simplex algorithm will revert to primal phase~I if no type~1 variables exist. An option allows the client to specify whether type~1, type~2, or type~3 variables will be considered. Activation of a type~1 variable is no different from any other activation into the nonbasic partition, as described above. For type~2 variables, the pivot will cause a change of basis. \pgmid{dy_dualpivot} will take care of the required calculations and updates in the context of dual simplex. For type~3 variables, the basis doesn't change, and the values of the dual variables and DSE norms are unchanged. The values of the primal variables do change, however, and this changes the DSE pricing information. \subsection{Deactivation of Variables} \label{sec:VariableDeactivation} Deactivation of variables occurs when dual simplex finds an optimal solution for the active constraint system and variable activation identifies dual infeasible variables for activation. In this case, variable deactivation is performed before entering primal phase~II simplex. The subroutine \pgmid{dy_deactivateVars} is called to deactivate variables according to a client-specified threshold, expressed as a percentage of the maximum unfavourable reduced cost over all active variables. Specifically, \pgmid{dy_deactivateVars} scans the reduced costs of the active variables and determines a pair of values $\displaystyle \check{c} = \max_{\{k : c_k < 0\}}\abs{c_k}$ and $\displaystyle \hat{c} = \max_{\{k : c_k > 0\}}\abs{c_k}$. It then deactivates variables with $c_k > \hat{c}(\pgmid{dy_tols.purgevar})$ or $c_k < -\check{c}(\pgmid{dy_tols.purgevar})$. \subsection{Initial Variable Selection} For a cold start, the initial set of active variables is completely determined by the initial set of constraints. All variables referenced in the constraints are activated. As noted in \secref{sec:Startup}, the client can set parameters which will cause variable deactivation to be executed prior to starting simplex iterations. For a hot start, the initial set of active variables is the set that was active at return from the previous call to \pgmid{dylp}. For a warm start, the set of active constraints is specified by the basis. The initial set of active variables can be determined from the constraints as for a cold start, or the client can specify a set of variables which should be activated as the active constraint system is created. As noted in \secref{sec:Startup}, for a hot or warm start the client can set parameters which will cause variable activation to be executed prior to starting simplex iterations. DyLP-1.10.4/DyLP/doc/updateformulae.tex0000644000175200017520000000752311171477034016203 0ustar coincoin\section{Updating Formul\ae} \label{sec:UpdatingFormulas} For purposes of the updating formul\ae, the distinction between original variables $x$ and slack variables $s$ is not important. For simplicity, $x_k$ is used to represent both original variables and slack variables in this section. In the same vein, $c^B$ and $c^N$ will denote $\begin{bmatrix} c^B & 0 \end{bmatrix}$ and $\begin{bmatrix} c^N & 0 \end{bmatrix}$, respectively. \subsection{Basis Updates} \label{sec:BasisUpdates} While these formul\ae{} are not applied directly to update the basis, they are useful in deriving update formul\ae{} for other values. Suppose that $x_i$ will leave basis position $k$ and be replaced by $x_j$. The new basis $B'$ can be expressed as $B' = B - a_i e_k + a_j e_k$. Premultiplying by $B^{\,-1}$ and postmultiplying by $(B')^{\,-1}$, we have \begin{align} \begin{split}\label{Eqn:BasisUpdate} B^{\,-1}B'(B')^{\,-1} & = B^{\,-1}B(B')^{\,-1} - B^{\,-1}a_i e_k(B')^{\,-1} + B^{\,-1}a_j e_k(B')^{\,-1} \\ B^{\,-1} & = (B')^{\,-1} - \overline{a}_i \beta'_k + \overline{a}_j \beta'_k \\ (B')^{\,-1} & = B^{\,-1} + \overline{a}_i \beta'_k - \overline{a}_j \beta'_k \\ \end{split} \end{align} Since $x_i$ was basic, $\overline{a}_i = e_k$. This gives \begin{equation*} (B')^{\,-1} = B^{\,-1} + e_k\beta'_k - \overline{a}_{j} \beta'_k. \end{equation*} Premultiplying by $e_l$ to obtain an update formula for row $l$, we have \begin{align} \begin{alignedat}{2} \beta'_l & = \beta_l - \frac{\overline{a}_{lj}}{\overline{a}_{kj}}\beta_k & \qquad l \neq k & \\ \beta'_k & = \frac{1}{\overline{a}_{kj}}\beta_k \end{alignedat} \label{Eqn:betaupdate} \end{align} \subsection{Primal Variable Updates} Updating the primal variables is straightforward and follows directly from \eqref{Eqn:PrimalBasicVars}. Both primal and dual pivots calculate the change in the entering primal variable, $\Delta_j$. The entering variable $x_j$ is set to $u_j+\Delta_j$ or $l_j+\Delta_j$, for $x_j$ entering from its upper or lower bound, respectively. The leaving variable $x_i$ is set to $u_i$ or $l_i$, for $x_i$ leaving at its upper or lower bound, respectively. The remaining basic variables $x_k$, $k \neq i$, are updated according to the formula \begin{equation*} x_k = \overline{b}_k - \overline{a}_{kj}\Delta_j. \end{equation*} \subsection{Dual Variable Updates} \label{sec:DualUpdates} Updating the dual variables is simple in the final implementation, but a little work is necessary to derive the updating formula. The difficulty lies in the fact that the dual variables of interest are $y = \begin{bmatrix} y^\mathcal{B} & y^\mathcal{N} \end{bmatrix}$, \ie, a mixture of basic and nonbasic dual variables. Direct application of \eqref{Eqn:DualBasicVars} is not possible. Assume that the leaving variable $x_i$ occupies row $k$ in the basis $B$. The new vector of basic costs, $(c')^B$, can be expressed as $(c')^B = c^B - [0 \ldots c_i \ldots 0] + [0 \ldots c_j \ldots 0]$, where $c_i$ and $c_j$ occur in the $k$\textsuperscript{th} position. From \eqnref{Eqn:BasisUpdate}, it is easy to show $B(B')^{-1} = I + a_i(\beta')_k - a_j(\beta')_k$. We can proceed to derive the update formul\ae{} for $y$ as follows: \begin{align*} y' & = (c')^B (B')^{-1} \\ & = c^B B^{\,-1} B (B')^{-1} - c_i(\beta')_k + c_j(\beta')_k \\ & = y(I + a_i(\beta')_k - a_j(\beta')_k) - c_i(\beta')_k + c_j(\beta')_k \\ & = y + (c_j - y a_j)(\beta')_k - (c_i - y a_i)(\beta')_k . \\ % \intertext{Recognising that $\overline{c}_j = c_j - y a_j$ is the reduced cost of $x_j$ before the basis change, and noting that $\overline{c}_i = c_i - y a_i = 0$ since $x_i$ was basic, we have} % y' & = y + \overline{c}_j(\beta')_k . \\ % \intertext{As a further observation, note that $(\beta')_k = \beta_k/\overline{a}_{kj}$, so we can update $y$ using a row of $B^{\,-1}$ as} % y' & = y + \overline{c}_j\beta_k/\overline{a}_{kj}. \end{align*} DyLP-1.10.4/DyLP/doc/scaling.tex0000644000175200017520000000440111263240452014570 0ustar coincoin\section{Scaling} \label{sec:Scaling} \dylp provides the capability for row and column scaling of the original LP problem. This section develops the algebra used for scaling and describes some additional details of the implementation. The following section (\secref{sec:Solutions}) describes unscaling in the context of generating solution, ray, and tableau vectors for the client. Let $R$ be a diagonal matrix used to scale the rows of the LP problem and $S$ be a diagonal matrix used to scale the columns of the LP problem. The original problem \eqnref{Eqn:BoundedPrimal} is scaled as \begin{align*} \min \:(cS)(\inv{S}x) & \\ (RAS)(\inv{S}x) & \leq (Rb) \\ (\inv{S}l) \leq (\inv{S}x) & \leq (\inv{S}u) \intertext{to produce the scaled problem} \min \breve{c}\breve{x} & & \\ \breve{A}\breve{x} & \leq \breve{b} \\ \breve{l} \leq \breve{x} & \leq \breve{u} \\ \end{align*} where $\breve{A} = RAS$, $\breve{b} = Rb$, $\breve{c} = cS$, $\breve{l} = \inv{S}l$, $\breve{u} = \inv{S}u$, and $\breve{x} = \inv{S}x$. \dylp then treats the scaled problem as the original problem. By default, \dylp will calculate scaling matrices $R$ and $S$ and scale the constraint system unless the coefficients satisfy the conditions $.5 < \min_{ij} \abs{a_{ij}}$ and $\max_{ij} \abs{a_{ij}} < 2$. The client can forbid scaling entirely, or supply a pair of vectors that will be used as the diagonal coefficients of $R$ and $S$. A few additional details are helpful to understand the implementation. The first is that \dylp uses row scaling to convert `$\geq$' constraints to `$\leq$' constraints. Given a constraint system with `$\geq$' constraints, \dylp will generate scaling vectors with coefficients of $\pm 1.0$ even if scaling is otherwise forbidden. If scaling is active for numerical reasons, the relevant row scaling coefficients will be negated. \dylp scales the original constraint system before generating logical variables. Nonetheless, it is desirable to maintain a coefficient of 1.0 for each logical. The row scaling coefficient $r_{ii}$ for constraint $i$ is already determined. To keep the coefficients of logical variables at $1.0$, the column scaling factor is chosen to be $1/r_{ii}$ and the column scaling matrix $S$ is conceptually extended to include logical variables. DyLP-1.10.4/DyLP/doc/makefile.dylpdoc.in0000644000175200017520000000655211263240452016201 0ustar coincoin# Partial makefile for LaTeX documents. Use with build script to scan log # file and detect the need for additional LaTeX runs. SRCDIR = @abs_srcdir@ ISLDIR = @abs_srcdir@/Figures PICSRCDIR = @abs_srcdir@ BIBDIR = $(TEXMFHOME)/bibtex ISLUPICS = Figures/conmgmtcalls.epsu \ Figures/dualpivcalls.epsu \ Figures/dualcalls.epsu \ Figures/dual2flow.epsu \ Figures/dualerrorflow.epsu \ Figures/dylpnormalflow.epsu \ Figures/factorcalls.epsu \ Figures/primal1flow.epsu \ Figures/primal2flow.epsu \ Figures/primalcalls.epsu \ Figures/primalerrorflow.epsu \ Figures/primalpivcalls.epsu \ Figures/startupflow.epsu \ Figures/varmgmtcalls.epsu # dylp.tex is the root file. DYLPSRC = $(SRCDIR)/accuracy.tex \ $(SRCDIR)/antidegenlite.tex \ $(SRCDIR)/conmgmt.tex \ $(SRCDIR)/debug.tex \ $(SRCDIR)/dual.tex \ $(SRCDIR)/dylp.tex \ $(SRCDIR)/dynamic.tex \ $(SRCDIR)/interface.tex \ $(SRCDIR)/intro.tex \ $(SRCDIR)/lpbasis.tex \ $(SRCDIR)/notation.tex \ $(SRCDIR)/perturbed.tex \ $(SRCDIR)/pricing.tex \ $(SRCDIR)/primal.tex \ $(SRCDIR)/scaling.tex \ $(SRCDIR)/solutions.tex \ $(SRCDIR)/startup.tex \ $(SRCDIR)/statistics.tex \ $(SRCDIR)/updateformulae.tex \ $(SRCDIR)/varmgmt.tex DYLPFIGSRC = $(SRCDIR)/dylpfigs.tex BIBSRC = $(BIBDIR)/bib/dylp.bib $(ISLUPICS:.epsu=.eps): Figures/%.eps: $(PICSRCDIR)/Figures/%.epsu \ $(ISLDIR)/epsupatch.sed @echo "munching $< to produce $@" @sed -n -f $(ISLDIR)/epsupatch.sed < $< > $@ $(ISLXPICS:.epsx=.eps): Figures/%.eps: $(PICSRCDIR)/Figures/%.epsx \ $(ISLDIR)/epsupatch.sed $(ISLDIR)/epsxpatch.sed $(ISLDIR)/epsxpatch.ps @echo "munching $< to produce $@" @sed -n -f $(ISLDIR)/epsupatch.sed < $< | \ sed -f $(ISLDIR)/epsxpatch.sed > $@ %.pdf: %.eps @echo "munching $< to produce $@" @epstopdf --outfile=$@ $< dylp: dylp.dvi dylpfigs: dylpfigs.dvi %.dvi: $(SRCDIR)/%.tex @echo "TeXing $< to produce $@ ..." @latex $< @echo "done." # Intended to be used with make -q to determine if *.bbl needs to be rebuilt # due to changes in bib files. dylp.bbl: $(BIBSRC) $(BIBDIR)/bst/louplain.bst bibtex $(basename $@) # The .bbl file (and BIBSRC) are deliberately excluded here, so that we'll # only indicate a need to run LaTeX based on direct source files. The build # script will force LaTeX if it runs BibTeX. dylpabsdir.tex is generated during # configure. dylp.dvi: $(DYLPSRC) dylpabsdir.tex \ $(TEXMFHOME)/tex/latex/loustandard.sty \ $(TEXMFHOME)/tex/latex/loubookman.sty \ $(TEXMFHOME)/tex/latex/loumath.sty \ $(TEXMFHOME)/tex/latex/codedocn.sty \ $(ISLUPICS:.epsu=.eps) # The easy way out. dylp.pdf: dylp.dvi \ $(ISLUPICS:.epsu=.pdf) @echo "TeXing $(<:.dvi=.tex) to produce $@ ..." @pdflatex $(<:.dvi=.tex) @echo "done." dylpfigs.dvi: dylpfigs.tex \ $(TEXMFHOME)/tex/latex/loustandard.sty \ $(TEXMFHOME)/tex/latex/loubookman.sty \ $(ISLUPICS:.epsu=.eps) clean: @rm -f $(ISLUPICS:.epsu=.eps) @rm -f $(ISLXPICS:.epsx=.eps) @rm -f $(ISLUPICS:.epsu=.pdf) @rm -f $(ISLXPICS:.epsx=.pdf) @rm -f $(patsubst $(SRCDIR)/%.tex,%.aux,$(DYLPSRC) $(DYLPFIGSRC)) @rm -f $(patsubst $(SRCDIR)/%.tex,%.dvi,$(DYLPSRC) $(DYLPFIGSRC)) @rm -f $(patsubst $(SRCDIR)/%.tex,%.log,$(DYLPSRC) $(DYLPFIGSRC)) @rm -f $(patsubst %.tex,%.bbl,dylp.tex dylpfigs.tex) @rm -f $(patsubst %.tex,%.blg,dylp.tex dylpfigs.tex) @rm -f $(patsubst %.tex,%.toc,dylp.tex) @rm -f $(patsubst %.tex,%.lof,dylp.tex) @rm -f $(patsubst %.tex,%.lot,dylp.tex) DyLP-1.10.4/DyLP/doc/dylp.pdf0000644000175200017520000201475111507440660014110 0ustar coincoin%PDF-1.4 %ÐÔÅØ 3 0 obj << /Length 213 /Filter /FlateDecode >> stream xÚEŽAK1 …ïó+rLÀÖI“N¢"²àzñ°Î¸àADþ{S+xHúÚæ{/—m:¿Ñ,±”$ÐŽÀ–#s-)ª(´ ñŠÂ’ðÁ»àîWïé©Ý ¶ÄÄY;«“̺  lx  Rq#Æo—†ï®^o¯ÞÖñ»s¹r¥´àÉï ãËÈÉ ˜£e?{ÎÍW j±²Œ4_K²sÎ|¹äŠ·=äHÝÃ?º„îâHu±Þ¯úôÉeÆç$W<fÉ翲n5]·éE[EW endstream endobj 2 0 obj << /Type /Page /Contents 3 0 R /Resources 1 0 R /MediaBox [0 0 612 792] /Parent 6 0 R >> endobj 1 0 obj << /Font << /F47 4 0 R /F52 5 0 R >> /ProcSet [ /PDF /Text ] >> endobj 9 0 obj << /Length 588 /Filter /FlateDecode >> stream xÚTK›0¾ï¯àhK…066¸·v•¨ªZiÕ²§¶‡„‰,Qõßwfl«¤j†ñ<¿ùfàcù0[¹ÄYe£rå*‰†¨\G?Ä£ÑI â€Âok'Ž2'š-*vxΨ„BüLMJÎøÒ8¡ð–†cð¼óŽSµ½¯Î%äöž¡¸ïï¼ê ¾ŒG{ñšOK´nðÔRYþ«ü¥Q yâ´ö ~@ë‹÷®Q¤€#ž¶ !lyS€8IÑtt WañXiNþ¾fþ@T’@Øs&*90×».ef±RìDÓ.©ÂŠ­„£‚!`ñ;Š <ÏxâG©@|EéIÆÊ‰Ò»”¨øvK#†@hò7ZÚ#s};p Wd1Ìâ]MèZsúؘœen¤ƒÿA Æ—ÙÆ¸>~ÏãÒTEÓƒÊÿ ½.¡Lˆ ƒFƒÞëñÞÛ‘ÕýØz?ó› -æ¡©¶9°¿Ð=q«Y¨©ê!qÆxêqU*ЦíÀǤðËL, UN\û­«dFû!–qTT¬£­%ü‡°å”¶ñ³ão6·ð›‹²ö;°¢‰\(ßt,YGWD^¿D”)}! Â^Þá}ãÛ¨š|Ï*ÞŸùƒ"¨˜a¶°0ùuÚ"љƴœnw>ÞÏf×ë5©+\…StÇí¬­·ËvVÚøÒdwÞ·”éa^>ü=Ž?¡ endstream endobj 8 0 obj << /Type /Page /Contents 9 0 R /Resources 7 0 R /MediaBox [0 0 612 792] /Parent 6 0 R >> endobj 7 0 obj << /Font << /F52 5 0 R /F61 10 0 R >> /ProcSet [ /PDF /Text ] >> endobj 13 0 obj << /Length 736 /Filter /FlateDecode >> stream xÚVMoÛ0 ½÷Wø(“k}Ú:nè lØa‡\†a‡4]7 –¦]ÿýHŠ–íÖ[’R(ùøøH1ý0»º¾uuËL(fëÂ4® ±ð•/c –eñ]¼—ZܤÕâN¿à3—:ˆ…ôhù1û|}ëMQC@¥CmJç4겉Œr#U0âüµâ ¿æØAþºô¶¨RÈæ •óÒ)*±†ÌGi‚hÛdØHe*ñæ=|Z©+±BfhƒØJ$¨4"øÄ~³C€mÂÝa ðî'^­ÒÕ¾¿He#@½Š@›Eº?H­§óƒL¿&Fµ÷Ò@WnJ7b“\W\£¬„Û&Ì-¯83_íÓ1íû¾D€ÙuÁJ©Èyóg…bSGê:Jë2zŸdž¨06§+Œu/ëcRóLtµ‹'byA@䜟æP|´q4öüZúÁ7ŒGí…¸K6'ú3Çÿ—þð¿ÿê­>ýÛjuþQÁã%RéfZ*Ýœ'gÎRés¹UÂ÷Ò\}œ]ý>Ç( endstream endobj 12 0 obj << /Type /Page /Contents 13 0 R /Resources 11 0 R /MediaBox [0 0 612 792] /Parent 6 0 R >> endobj 11 0 obj << /Font << /F47 4 0 R /F52 5 0 R >> /ProcSet [ /PDF /Text ] >> endobj 16 0 obj << /Length 1234 /Filter /FlateDecode >> stream xÚíYMsÛ6½ûWèHÌ”,ñMý§i“Ö+ΡéA’[­íj"+üû.v ([™NšI¤m‚€Ý·»oà£ñÁ§Êޏª¤2b4~?²bdœ¨jiGãËÑïÅ1ãÅßL˜â^โ'¾/ÙãŸqW9#Œ_@ÔUÃí¨Ž଴º.^Äï|`äÅ%S¦X1É‹ÓôÑ¼Û Ö)UW†7£šÒ8XÆÑRتqš>´É¯¸-6ÙnU;´ª¡Ï$­úX Å½Uï™4Å5+¥lŠSÜEyÿJÞwLjðŽ·ð¼p‡övŸ |¥‚`(x/¹­œÑ^Tðx0…,ŽÐ?K–`l9hæ30«äµi`R9·³¿¸6œ ü ]™£+Ý3FQtäRÔKBûÖãìŠ XNzs&>Á¦þ¼ØŸ ‰vÇá–÷ÉêËàkÌneu‡Ka*îDΓŠ-d¸C› °Ùa`®ë„Õh¶Gøž;Laep’ç¥u&‹û§¡W9; ’öŸLhì.3ß(’ïK õyÒ~®¼E‹6Ô8'= ¹f›˜#I5Ϙà!ŸîýŒkOŒßr:%:øûe¦rVë—ÙÔpþUXYl[dšŠì0J¾rJxNcM…EJJ†<ÿ@á1XŸ¨ ß´=¾WŸúuÆ’/?ø—‡Ó¶v$ÕÎÊ{ºhØ0õwK†@ACHmÓôUÇ„Jý2ä×ËàÏu`ïß?Wkƒ-üG ^…Y¤w4.Ö8º¤I ¦H]ÂßÂEc¢‡íé&!F§¼wö-5w5Be·¤>“SßaJtóž^;mÙZͤÆ÷ôšiñeür­«Ã ÍKÇ¿S…+ÒÑžÉiã8o#˜`Ô· P›S[Ã×-ê˜+m¨p†¡}½¡œÃ¿›62ˆ/SN¥ð}6!F\Xþ5u!*¿¢'sè5}87ÔÇ«äø×Îi¬þß¡`@½m»°D«c,ß*ä‰ö¬Ïo¡,é<)UUóÔñÜv©Þ™²†}ý¡< «eÜšŽ’”·@¹ üç/Ñ(ßf~¡‘#&ÖOž÷p¤ï‰ôI´ ã³–ë%nhµþF¹¨Å½_9Ä‚ >Mœæ!íU~Ò‰BÊ5|×Oì.3ÀEpI€ŸEömy!¹‘zëÓX«A.ó¸ëüƬé¤ï,<«N¢dºî‰Ù.\þÕé¹V]v"pÒžSó‹Èvn$¡„”h÷ Œudãy°o’½ ±7PkvUhsÇ92>.ü|ƒ¬ÝpqxŽÉ©É$ÏÞ¥%’mñÍ~,þ”÷ñ3hÔ~0Õø8°¢ ¬©;ä"Âp+à`ï}n†Õ­vyÝ‘û™À%¿$§^Ð9–öî fyÞÚS+œS;_yÍP[IÑ2wìo‚ÖoÉBÞ­¶[Ú=ßÔÝS¨)œW# í[öga-ÑÉžbRÚæZu?è“›àÔEòo¹[n”Å8^Øõ0óœÊŽ[*Ë.#½fëL(µ•ûÐ>hµ©¨xNeo™A&óªX8/µrãš=ÈCX“ðáMS©ÆŒJÃ+®ÛÿÇÂGÏÆÿ·Ú![ endstream endobj 15 0 obj << /Type /Page /Contents 16 0 R /Resources 14 0 R /MediaBox [0 0 612 792] /Parent 6 0 R >> endobj 14 0 obj << /Font << /F47 4 0 R /F52 5 0 R >> /ProcSet [ /PDF /Text ] >> endobj 19 0 obj << /Length 1090 /Filter /FlateDecode >> stream xÚíšKoÓ@Çïý>Ú›}Îî¶P¨¢B„©¡¨´¥|{fv×ñºIj»”C¯7~¬~óú{âg“½'‡Zd®r ›|Ë8•U"'*&M6ùš}ÌyÁý§Â,J#dþòÇ—E)¹ÍO»|Š£‹¸Ç„ÀJåܸI7N „Ès]|š¼zr¨LB¿Pi‡SY§ø¡k–ïãð2wùìÅ¿¾à” f ÝE!Yþgø™Šç7t«L)V7 ×¥5@XCËJÅUÅ„ÉJn*'eºŠà<¸À[žÓå/ŠR8¼mXÒ9…ËŸÒð49çæ—¸ÿÝ/Ñ;ÎaX$ËÉ™~¥¹¦÷ØÑ ‹@ø †Òƒ%G÷Î[–,/Àûö¸s\Ä ;ÆY€mÄ™lâì*qçáÁ¥¼‡—l×þU;œ&@M-9ÞÝûÀkÜhïKãã±F†GÃ+O42±ŠZ¬G}“Mý*±õÀpÿ#Qȱ’ÝzOGÍ@`ç×¾$D €*£Zù)æ, #ØnÚº‹¶ ´Oš¬€6T ¹ŸÓüàÖdŒoaÊ3þ4»b¦…ŸgÚ&£ƒÞ`£ðó5Þ0¥«|Nî^j®?{èb¯ö"&±ö5&„¤qÇ“[—x’ø@dvýºÒ6Æ/fm"|<ËyÌÙ8דóÖ?ªÔhM—‚†¶ Rè8ø¬‹â‡³EeƒD‘j‹¢ã[YfqOÄv»Š,í°.ÊT[u ߬•J7ê¤6ßT6Ôª@ºl/LµU#ð\uW£"}8Úº‹¶~0EzåÔeÓïhÂåªÔJþˆÁCW‡!r´GöIU“2;åäÐåä¦éÙÝ,=´¦-ÛŠt jÍØ.¡6:v:ÈÔ÷…QµC­J;ê:jR¯WßÄùº{~l„v¶Ì+h¦Ã:ì­—qÛ t[¨öÌ>ä kÖDÙ¿‰]nò›e[}. 2(ÕcnÖ^`7œn+Ô§­:rMöŸúî²ÒÏ>ž¥ær—bÏuQRu?t…ÐMÿ#{§ÌöÒ†»žÂt[§Å40o4jR.d›^Œm7ê§²žÝe湯É=‚Eruëiž$ë¾ÕF8°a9¢µvµ¹Û;ºÖ•súg~—‡ηÔ'Ħ€„/:ý Á}òã[žüĦRUj×Rl)j9 Õ5êÍb÷yˆU îãî%ÈüýJV >ÊêõñºÂØúœ£•§v‹VjìJš—ÜA:Q)#ëÓ yQævËXTÂÊÕ@57fÇ“¥©IPÿ¬_9™‘;Ü49Ï·Ï’÷(J«ÍØá Ö…jC;éO“ [Ôÿ¤¶¯_añ̯h²Õ{[>ǸÝxî] ›[¨ŒY©-Æ‘ È}ÊÜ;˜ìýxƒôÒ endstream endobj 18 0 obj << /Type /Page /Contents 19 0 R /Resources 17 0 R /MediaBox [0 0 612 792] /Parent 6 0 R >> endobj 17 0 obj << /Font << /F52 5 0 R /F47 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 22 0 obj << /Length 812 /Filter /FlateDecode >> stream xÚí˜IO1Çï|Š9ÚRíúy÷R+ªFmz¨ÚXE…APÅ·ïó³g& £„.¨zðdÆãm~¿ÅÙo½ÜsºI2yí›ñI`¥‹¾ñIKeB3>n>1àÀ‡à™Ä;ÃEІmãí–kÀή¹0Ù¨TzvİoµÉi®™”¯ðyŠålž/\hEMÎq„Ü{Ñ‹×Û ‹Rz*?Éjæñ=ÿ2~ݨF@Éè!Ò¶n‘`™q ì ±%v1,3>¨ŽËã.Ï]¨›ïÈ/Þ`å„{”ÐŽ‹båZá¢yü Ãh3ÚÐïñöËE-ÜmÁ5# p0²,(È6“”TÎã 4òRÖì#^ Û§ûQ×§·3í%hhûä‰ç\@ꦜg9o¸ñìrPÓÜã+-ÛÍ©hß©¥ì/‹'ˆ!A" "Aëtñ½.³¼GÏ9¨þ“Û=ìEò®jv‹ÍºÊpcdã°{æ 9iM馈&ìç"O5;®Ú(k•ÄÍv ïQq¸Ïޏ^øxÞáÞ€¢ŽOÌuÿsÄŠx7:ùx‡yK2»„ûÂNÎ<[Ø+Ìõæ}ž ó¼ÏsÊFnïÛÂÜK¸úr¿Ö—ç'U¸ó ¾t—îáQŸDÖ\]ò’—ö—»øwIé °â£>+¥éa0ŒOŽ»Ù¼Í¡õ@+ ‹1Òùô; ËÛK+1­"`dýwhÅ¿*’!‘\1—$ò^ 5¤?®TÎwÌBö4Éz]ÕDiJc|ŸÓhó¬5‹½6,0dtèßt1ù^ÂØ5îEÓJF¿t0$š&ÑL+ÚÒ8®qù<°èÈÈÀLÿpDys<©Û`Ú®±;Z k•ôÐ.Úõ‹N²èꎹStŒ:¥"´¥Oó>Ë飉l¯6­ßGG:÷”Tü:Ÿourô1i`‹ Ò9{×÷%Õž0ÐX\´HªVÚ@Fø¬ƒù¦€Ó 1pZ躇Þc‹“ÑåhÚþÛ#¬ÒÿÙ®ž([ÊÀ!Fi£o25™bõ=ý·vÇ[?2ú endstream endobj 21 0 obj << /Type /Page /Contents 22 0 R /Resources 20 0 R /MediaBox [0 0 612 792] /Parent 6 0 R >> endobj 20 0 obj << /Font << /F52 5 0 R /F47 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 25 0 obj << /Length 843 /Filter /FlateDecode >> stream xÚå˜YO1Çßùûh?¬ñ}<¶@*ªVE%ªTUU•†+G›Z¾}gÆÞ  E–¦@¼‰í‰½ùýgÆÇëáÚúÀ†JYa¬×Õð  ºòI m5Ü«¾°w\± ”_Ü(6ãµ1‘Aý ”îC(çP¦\I¶Oö_‡o×NWI$¯=Ž­­°ÁTµNylÅë -Ûó”ãcS%öfJ Ƴø8ÂÖ*˜Øâ4²’®Š0´78t´"&_É<ðÞå·n%ggÓŽ±Q(øÛÅZðÚ¦´R?’5LUƒ„ªZ#¤yTɘÌF·ô 1H…ô”ÞØ†Þ&¯½fŸáiÀYðûN—ô^(­›ß4Îb²Ó@M{ð ôŽ`£yÒÏܬB£Ù>?rÿß“54s MÁù"¡Î°M޲ÍKàšˆ2?ú‘MÆö.…q­%´+P‚12èô'›¼ÂÆÃy¢x“Ôòhh3h~ˆâ78ƒ /,t’ÕÄ;oy=Xl&½U\ù–¦°<{ô]PTÐürÎyœã49ÃÞSʧÔ{% R}‡·Z´òQ.Í©t]oyÛÈ>PÌÍ®¼¯¢Qö¹Ç· Ë ¾yêBî–|ó|iŒ£±K÷n Ó«.Ô~Õ:äÕº7´`Â*,Ä o}wÉÛ¡äíävJÊ‘‡ÒIž¾ õ퇧jØN­kÛåÛñ1}š\QI)äèR<ì“Á·Í*ù¶ëâúðî·æù'´{ûWÜüi™w„°ïöþ:|E½ €¹ ew®‰}òŒƒcÙ*àïLéŠÖÖ~ä{fy-_6÷Îô®Hâ¾ÈeýSÎß'»>ïncoú°ÿÄ},×sF¸]þŽ’ÜÉô}™ 9ä¢ûø8)ç€Sžo±Àø#Íck÷à­jíÜ8õ<ÐÇÛÐÛ>è7¨Þ‡Ê iZÆjq5Dðò)÷M~¿yyZ«(Œ Um¥N/tƒ:ä ÒovèÍ÷½>Ý-W¯'¥äPÑÍá¶™êa'×;2[#äù•H$å’wÏq³Úy­£ï˹ÿ¥Ìƒ±Cý9­žxkiEt®ªt‡ö6 úÖ¶†k%…Í endstream endobj 24 0 obj << /Type /Page /Contents 25 0 R /Resources 23 0 R /MediaBox [0 0 612 792] /Parent 27 0 R >> endobj 23 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F105 26 0 R >> /ProcSet [ /PDF /Text ] >> endobj 30 0 obj << /Length 3952 /Filter /FlateDecode >> stream xÚ¥[IǾûWÌ)!‘®½»‘S¼ÈPbØF, dælcjÉyþ½ë-µv±Ù­fØKÕ«í-ß[ú«—_|ùÜtWÒlµqêêåýU§®Ü ·¦7W/o¯^­äz3 ÃêÅ»µ\üßÃzX½÷¿·kãV×Z®nÖ–^íýßûµr«wë__þãËçV]uÛ¡芭2ÃÕF Dö›õÆ©Õü½ú¯Іíà”ƒNÊn­“W‚úìëò-wð#W‡½ÿ~0)Ww~èÎ[| K‡3}7ôþ-þmä°Šo€~V|Oò­ü¤ç7°$Z²†‘ð!_»Õ†ßÃ<ßø–&xÂýÀæ×ëØóãÚHßK•mar¼<èö^ÅH; é_ÀjO¸ãå"ä*,àüÌC–§§ÓÁX70É7þb§âÍn{yµ‘r;XK§±‹Óò­nü¿0Úi½1ºOÃÕÜù×0Kž¾o3œ;?è¾øü œß ÿ>ŒRï\m×›ÎÚÕ œ¶¹*@úÃZ;\6œ,Ÿ4ŽÂôËåêqM4áz7OãáAsùžFÉßS<Ñe~æ4kàï@Þ>Ãå|ˆÛÆÏá`Ù¯>ÁkÆßw°½–×e%º£©Ó®È>°/\þ"„òwø>£÷¯½ŽÇfӸƹ¬¥ˆ[è‡Nœƒ½w°]·ÌIcâUë$LÖåSv쪓:ÒÊ+•,zl6aÀVzéé éd•Í•¦ BahÓ•®µÃuú€G¡‘AÓµËkÄ– #á—IÂX‡×HÁÄ•' 0Aó(ÄÐam1bœ5¯Ø- ,tŽ£é—;2¦«´´÷ßÅÖ[Í‚ã(]°d¬Iá2)2Ož˜ÛE©%{á2Ù{L-$iE‘ý6±½Žö]¿öêl¤·?FºåGýv;ZDĶ¥íÆbaÅv¹ã SøPíXìg8ÙÚ(”ƒcùéÌ¡.:G…ùxGX+‹Ì‹óï4¡PUTT†ÆýË à~aÇOi d Ú1ÌWuü›Lees 7ÆÈB ‘ÎEk ZÖ’wDËù”¬M9LBŽ’=“? +M­Õ7ºs±utáùŸÞ²jļ ëÜ¢ óÍÛÖ¹Ö¹3ÆA€¸aþ~hÀËÂô¥ ‘P\k®vÓþ²ÎéÜY5‘Û]ö!Џ˜˜o#ôñÞ8c+Õ„ÏJ¼I< =yCL ÓeüÀR¨Â ßótOMA5B½yJ½GÂSÐÙº¦ÙÊá 'tÙŒû-î…Y}•ZßPßæ±Á´^„I&Ë?Ý\†.eÆi4<ˆ"¯6ÞÓÈÐv(ü‘Ñ»ðÆ·êS¸‘³Ãت€±~ö߯ íD¾í­\ží/K &³i!Ëã‰>Ï]ã̱ ëV¡ù}—\Üû¬^ášÈ¼Ò¬ñÜ0kž¿­CÚ,ÈE¥’G™4¹ú+å‘6_R¡ârŸH•fî“Zˆ¯£ƒÅ˜%¶ä@É PÔR…È­ <+“¹(ÅŸ]]/Ð…Ò‹‡Üt<#NMÆý>î© Ãš-áH—¿e©\Ñfá’:Ž“ÝÑŸlGå!óô}wÉàfŸ³RÆ‹-÷Qqömà /f¬¦„£ ΑÀ]ÌlöͰ'j„;¢Ï²,h?® àÅáÏ'>ª§´äñ¾mK)°ÆAàνfi:…,>þ¼a*J=ИïÒ¶a.ìr÷Ý:+ ÀŸªDîáLg°C Ý(cFUØš(•“%À ¡4¬|içÒB2€¯ªd¸R ÙãfÁ þž¹ÜÜŸ£±ýü»1?9 “Œ/D…¹‡Õie—P MÈG¬ü†òÄ3w0$jG¹%!.ªi ;æ!Bøª·Ì."î vÛÑ£sº2_8Eù°ø”§p[[!|¬â_~§;dxÎ×bkå©üx\‡4 Éüâˆæ_IÿN¤Â„0ÚªQž]ÄÎvFqóvÄ™m"¾´*ÉÆá)Åžg%µq°UeFÄÊÆâô,¤#[H‡êp¿©`ާXÀœˆ‰ãö·œ2Š˜ô"‚ «äår¸^¢m¼¼ ,¼`êáŠÙˆ,ni€ûõ$΋¯WY…O­§ë ŠU´ÛËÿ'L€¡1#Ù׸¡Ša mlÄþÆñ"c—*)Ï×%Û²NÈ(/Çp0‘d²M•t0v,!­ý! ¸X-Ñ9t5ÞQç’˜kÔ.f±nìAÇ1vŽ 0vý˜·B1â>ϸäÊ™m¯jóDyNJ¶êQº·Lk§,BQÜ[b¯~FZSE}+Nà{„½šÕmZ7®oº/¦8ÈD™2t[_ï˲Î^GÕWHÄ¿š(&hØ·‹–…ëÁ üÓˆ8]¬ËN#î÷»|Áã‡n©lóD8Ð'ÃýTêâS¥+•‘ú\O”%ô娟o³€°ýùbˆcšCŒ1ûo[”ªèLî½ ]î2;Ø(ÖVÝVØX[ð5jQƒü€×?gšåç†NÑÃÖÚ!ôÏõ‚–u…Ø©ž4Îï°/>LyȪ´{é‰÷%Û¿²ìç;#0B”—†{'B„øCvd9(aÝ`DÅ%Ó{¤¤©ÈJHo0_†¤­ M¶ˆ™1Q—Nò’Þ6L°é»ú“^o‚%f—!°°MeU—ø]ú6êŸ-¥óÊ¥ÐuññT¹µ^¾•Öñ[öâ2wʪr³H:g_Ó³¢”þ"xVT2¬diµ¢ û_—Eê•áÏ%ëï¹ûEpÃCEhôC¯õ†ÁS™³§7; Ç3¾`#BÍµŽŸBð1§âbÙ?0ÓÕ—F”ŠÈ½IQ Ù×ßqµõ;Ê„hÝG ÿ¿€÷EØK§ï—àrN¨aÿépÊМ-h;g†t”ræô=bí·¡Úo=õ%ßÙö²±²ÏäÚ5”bÛ[µ8ñb;“>àá%TŸœqÑ®kòqvåÎh\BÐM%xýR*„ٳܳòKÇyÌY–BʼµÕ] ²RÄ.*ØTœ%S „$Í1æ¼§Ëù5Ø|(ÎçM3/²2¡´ç†EFdÑÄX‹mûŽ}–†f: %4o/Çx>E?›êg«-;óu”OXÑ´r¹ŸN>±µèºXѧS†›90 î™GaÀ¶²W)kÇÄ ­œt ¼‚(Ç’3„aÏë^á!”“},k@Ów¶ÌÑÔGÙ1ÛsjŠ•ø×»1äÊÊÊ“ô _íZ3ÍVUòd“hèÅžýd¤åû[ÙÝ2ßz5¿ä™t/°z¢OúcÏ÷säCõæŒ| KªA ÀB3V÷±<Ä»‰pÇáÛ]èÔÀpð¢õ!eVQ×ø~byÙ—&±BçŽæ¿4 ¡80þÌÊ\ŸàHŸ¤‡rƒýqô]Lü \ëaÒý¤#Û®~WJ#ß-­ÒôjèsÆc‰G¨ææªµâ«wUÄTö£J” tž¹…-ëB¡Ç%ç6›THù·~<6´ýÖIƆ^}ñíË/þ…Kö endstream endobj 29 0 obj << /Type /Page /Contents 30 0 R /Resources 28 0 R /MediaBox [0 0 612 792] /Parent 27 0 R >> endobj 28 0 obj << /Font << /F47 4 0 R /F52 5 0 R >> /ProcSet [ /PDF /Text ] >> endobj 33 0 obj << /Length 1363 /Filter /FlateDecode >> stream xÚXIsÛ6¾ûWèHNJ–XŠÇ6ngÒé6.™4Y’¶”톎]ÿû¾ eØ’{ €oùðð6èûÕÙ·?¶zÑ×½Ón±º\tzáz]7¦[¬¶‹ÅT¶ªøZWÜâè¶TÅMiUñweel?ªx ušþSjðÚáëKY©¾v¥Y@àŠ .ß”Jû’Ÿ\¹†ÁøÈ2€©vå…©b%˜n™f(+ÝMÖüsQ†¶†nëgT~e‹“M©âÝ ’ À íPÒ¿2ù¨ZK›—íƒ ”+®f0®qs;2 Íï˪'HÂM|kTw¯±T ‹óÓê§E³¨”ªû¶åÃ8@- ülKËfCq#®õÄ<Ü“µyW5ª ãïê¾k¿jkÕÐ KưÖó²rºøoSüLãßgtíjk &žM8°\ÛT´A~Å™}8LXEÿÔg˜wmñ6ƒ­·µu×ðáyGx~ÍàQ€§[zê ¼§Axÿ*\ñQƒºO¨ñ(rÉâRló øÅë#ã5$6âBW‚:PçÓü-Ìß¼apªiK@ç £ëjílØÌ4œ?Ž·™m˜¶îmÜô{øŽ…‡ÃåX3¼‡5nhƒa+Pð@FÜÑ„À':þÊöMñ:еu×Ï]ÎkÔ½}…F¤¾Á|ÿW©9˜7¨ú¿ {„“ÊDÇž¯M,jÍ?¥†ÓУWƒúi˜šuÌ£zbí1?ÌT#ÿDRÊîiï18~÷㈠müf|ˆ²7a´ Ûò0P½¸ëÿcÖ;ŠàLr˜9Ÿ6þœILJöIÞb  ï#gÉK ;ýâæˆj†[J+”µrÎÝ6õRµ'9·‡ºg†Œ‹(gYædÚpZÑŽÞÑŒ¶¯r±DÖ ˆ4µÁT EÕöŠ—ã¥ïCE£“Wsj yª·ó£ õC²ŒåˆõÕ1Öšz@ã8Å‚,Å8DK4О ˆ¤àœÀP}OávsÇö—-˜¾öE;ɆBp5ä}ÁA·’Å–ªXa2ó(8€Ú t ¸’¾C>’蛘3%ÆjͲÿl]bØó àR¼ ¥&¤–´€ÃÔFVÛ°3´~»Dš¨›séÓC‰ó!MŸAº#q*f.úKÔÆv)‡+ø«$*«ÌZbMLr!ý>˳£Ç²§=ÝÇ=”5A‘ŽZ  VŠÃn&[um íÀiÉJw'%+é­Uïê¦íçíÔÌU©|ˆùBà ‹Î·H‰ÜA²ñL¾gô@rG%æ'󂈊´oÿfž—Hv™ Y/cãŸ}{ÐÝîcó‰äI†ÁéaŠkIå$ÓÆÆ8f¤ }?ªÃq/óŸF ç^ ½•Í»Ñ˃‚Ú{ÙöÉ-ˆ³¸Áûò™#“â±,L*úÙV”)*&ÜŽkƒÆCûÄ 4é.¥Íž\Lsp÷ºMî^ŒÜ§^û‚5â1'Í€Ø=JʺYÆ^¾ú(w±§™ÙP;6Æá1;zbÇÃcvŒÅŸ€gVÅg[åª4dÞ«$>P¦Gæ×-g1l‡ªN¼$f$½ªÏú}’;ñW’þ“ÃˤÝSöŠ]Wæ–§c§›¹Û™zéBÇxNw»t·{áÆ©)|…‡U}4-yDÇÃcaÈĽo6…¡=’×´öH¶ašÿnX'ç¸÷urÖM‘øðÞa‚õ9ÝÁ•xÙÜï¸Lfþ€Üï§'þ€bâ VÕ«ž\¼¨ŸüÉá§³VgÿÂ.Å endstream endobj 32 0 obj << /Type /Page /Contents 33 0 R /Resources 31 0 R /MediaBox [0 0 612 792] /Parent 27 0 R >> endobj 31 0 obj << /Font << /F52 5 0 R /F105 26 0 R >> /ProcSet [ /PDF /Text ] >> endobj 36 0 obj << /Length 3455 /Filter /FlateDecode >> stream xÚí\ÙŽ·}Ÿ¯h$éF\4÷åÁ$8lB‚ `¶F›%käŒ5’%çës.ɪ"«YKÆö8ÖÃH]Ý,.w9<—¼äýó³?Ón'4SÚÊÝùÓ“;Ó^ïÎï¾ÞËCBØ?8ˆýð÷“><_J»ÿáðíùfäαภŠ8“:ì:R=Ÿ:+÷ÿÆ¿jÿeüüá¥À‚•–^’– )w<½ó6Ö¯Åþ>¼Àßõ¡S£¹¡hüÍ!¸ÀßååÏ©½úœúø,=§(ý$=¿Í5u÷•ÒL±3N2£}jôAkóShŒ`"¨¬Fðy«2 Ô¨ÕÊ:¸•Šu°ÀÕŠxeYßåLç¼¾Iï.´`ÐGXÒ²àÇÞ-kA?Å” •.kÁ7ºÉŽjG§œñ`7ÚÀ“>£üÁŒÄ ŸÝµp€miGL^›ŒÌ@󫑤$ÐÀÉî¿£×í2Ü6¡DhÈÂè]áÈó@¢…®€ä]K¶P¤Õ¥lï7sf¼R¸×­ÚPÌû-µ_›ä\ß*‹|Ь ÌúÙÒ5Ó¬­&AArÊ„)œ áápÒZ—„+4Ú„…‡ k™$\ðÜÇr©ØÓqiÅ1aä„ÀL€\³÷G­:³˜c€aF…±ŠNkQL‡G2QD¨ý6‹#wÆ$#´(8Þ±VhÑL%¤)Õº­¶ËÆ Uƒîi6ªU(µ¢VAj ZnR+º‹¸†Wبµ`· D?ðý9T†àà&“±ÿþ iHeèø ÿÑÑadB£Kb/ÚÈãq’±ü ‰Ç«)¯«S)B~Œc["4曓}TScz/OÄ"˜•­.ŠEÒÔ‚éu™‹ŽU5†h™vfuˆr‡¦Éf2Æß…L'&ì™óæ¦qCk†¯ki·Àl¥”ˆËA…õ_smE&û©ú«ƒ ½—/ú5´gÑãµÝ—Se¹t‚(Ž;BoÌrü h#Ü­Í*î@a¬ˆñžqâ&äº&€eâÄB/J¬@÷r–5”LC}5õŠ#sÁô³Bü"uB0=χh!O ët3 œêV»f‰å!B€NÕ¦E’íF²äH»ÍF6D9´D¸ÁF:‘ij—Ço²p4Y9'·8áÈÛG¿³Ÿœ´W|´cšÛzÅç¤`gßñ0óvúÏxï«Ôi7Ìwˆ÷!®vAYUÁÆ·ÅżûκØIÚˆhÜFÆõÚº‹žîÿL´…Ñ5VÜ|ÑôŽc…ýCX'Â0åÕ&-|ˆQ&$Q£l'”Ÿß¹“1ꮲ2·…•yÇ8E»œ nFí©™Ýç€)FLw{›Dß@I!åðÜÏÿ6¹¹°ÃÊÏ,Ü´+|⺕۶nåN\GÊÓî$>Qœ´=Ôs·QÜJ¤çZµUÐ팋{~}Q[¯îU¾\ڪȺÿë ¹MÕš Ëq®-.«Öž®Zy¸»Pn¸ »Pþ6v¡:áÁ`Ãì1¨ ~kîÄzó¶õßéüÈ ‹Aü6K‹¾3ŽÏ‰8å)mòŸ_y‰ö²’ð|À¢?XÓ W™Pgά»(ͬi¡ÎÞ±ù­÷ÔÚI-å³´Ðl"hcýÊÙT±™r¿"9òžj‹æý¸rQÕWÓç׬öŽfa̬.o¬ôÑ «êÚˆx+Ðgÿ®°…´ƒç¨-fÕ<üä$ö! ½q@K´óWÖÂÝh•ÖÿRöwšIÅjK†ee¬Û1/mWôsH½óo¸ßÿØ'ï_‰,)7£L«. ±¹t[“îÔmm ž’tçVöÇh1ÜF´˜&A‰mŸg‹JPaáJ¥f.d‹Âò"6Î&‹R]”$ª8t¡í< Ìr9]˜¸Œ bmÛÐÞ¶A‰":W‘wŸS˜¢M–)Iô<$ål¨ø Ù&~uñ@ÌÓö‹G™ëUmÛR™Œ1GõntšZgÖ2¯eüÜÔ-œÍ¯%ÅÔ4.åJƒZ]sxÏ@bkÒ ŠLÙÅÒª?TJ¤çÇ”ýÐ+ñßy~ªm ‡eš[«•-¦2M+qÎSc‚Á,ˆ§_ ªJÉdÐÑÍg“x€_\Åþ¤pÝž²Üõ«†ëbc¸nþ0áº=«&/^ ×›'–hó¡(¸æ²ù·˜(7æÊ*Û—ÎÐÁØï)xs¾,M9ý•\˜:<¿ÒFõG ÅþmzÎéµø,ç3rsIš‚šyÛ.2:þËk ¶% cÊá9w½½ ‰]õ™ÂyÔjx*pÏôyÍñ½×“†ãÇ"iÏY<9ç8½ƒßå‡ÈJQP £ôð°¯[BwªÏ¥–ã×Q­5Dj'Á¡€k>Ĉi‘K¥dóYŒŒu9ªKb~æŽ&O Ç ¦C¶ªmÊE)Qc!’þT^‰”iÙ¢Ÿ\y§³º—6|’ϵ‚»Ž ïfPÙU”YÌí‹9߃¡×͈h»Ïc]Ï &¥„£i)¾ÿt4 Av¼sÇÄàÇ}²ýóélJ ÁO¦'sËtùæ¼G–ÎÅüª÷QªR> endobj 34 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F109 37 0 R /F86 38 0 R /F1 39 0 R /F118 40 0 R /F107 41 0 R /F106 42 0 R /F112 43 0 R >> /ProcSet [ /PDF /Text ] >> endobj 46 0 obj << /Length 3126 /Filter /FlateDecode >> stream xÚå[KsÜÆ¾óWì-»%a<ïÇÁ9°Uœr©’˜U)—íÅ¥$F¤Äˆ´hæ×§{^˜ ,¹’Âä jwÑôtýœÆñÉÑ7/_9â4׫“×+ÃWÚqB…YlW?¯ï6l}q Þn:ÁéúlÃõúÃF²õÇ þëÔú|£×7ÅÖ×ð˼þ>lñÆM·À7½~nG’ÓM¸ù6-}‘oºÙüzò—o^°‚!&‘ʬ,¡Fž~¡”GBjVŒ«GZI¸”«H­¤iAÛ"΋dÚ_D3¨ŽÓj®|°"Ö˜UWÐÝ·Wc´½Zѧ–›`Ž ].÷r‚9gÝæ¸j®V¬€’Hm²|E «¡A„d^ºI¯½Â=&ÈìŠVìU+î"Áó¦Ø4‘&¯qÓ^°š×ð(C„ Ž6Ë‘}9…¦’ý&²Œ”g=Y/aE4w‹ÀÄj}M¬¦œ˜ÕwØÊÍêku@{u5T„çë$íÜúdÓI¾ì÷<È\së‹7Þe#ïÞF«:ñd7†¿Ý76¸é„–ÄhcÄ©¸ƒW ®,Šg\ÜG\ÁãÀ!ý†|!'W|L`àÖ† [¤”•‡Ã;)|üòWJN̺°[¼»EwÈü*ñ†}]$ˆ ¾)t‘éÂJõÓdXâ·è>q©Ë £ðƒÌÏþ´é\t°^ ž÷S\âþñô™(¥¬\·w.Ånm¸ëÔ¡A Ð4°°Jq’°à­¸OH'pÉÁÂh…€Új4ØBåån[8D€Û/Mð`Ï» B¨•€M5´R‚1„kô·A jÕqÂD Zlº9²¯/ya€rh€ÌÇ,*-ì&ü˜#1 $êñ£§á,Ýçíàò¿8¿ÈyPJk£„YÐ/w„%Çrœîed ,bTa,ïŸI`‰­YÛˆ vý·c™ZˆQ2B•H‹rÙöT ]·5:Ñ©¦²‘6ûŽã–® Q–Ía –á²ày¬!î£vEW ¥æÎmjľl±hÁÑÛÀÿ©¥ZµS’XŠqAcmqGc'š(“Œï[ DùVòVo#nÛs R2¡Vœ*3[\5mÙ€©w%Ž ’QYð†6Ç ¨^†kÿØh—Œ´ˆè¹ýo!ºJM{ĘtDkå©Ñvy -gRhéåf¦ÐfQ =X­èxA–ª‰-”iÏ·àûõhŸÂ @C²´0÷éq\ûFNÌÐlF.Qy—(—¹D¦yp‰ró*Ïsà3÷¬ä¢Ä,,AÌ¢Ä<¤©E ù1è¡ÔîKHtXSÜ`_2‘¥ò†eÀt¡þí8Ä÷Ù(´W‘Ä=™óËFÎ_qgÑOuC'ÙŒx§3‹óyà\•y’Ñ⠇ЩÀC{_°WÝ8Ò‚~šZ¨±ËÑï‰"ú´]7µuƒá€O|Ñž‹yhÏ%z8x”±;S\f!ýñ9.s½°¦àáàIj!<Ìx˜…ð0{©Yd¤;X„ºD˜Ü-9+~HÁØå‚jRX*}¶ë¨ØÇ¼/›lbQz8¿¢Wç˼º›cQA1o†V¡E’ɲ0rÙt$ k7 wHøK¨ôë…‰­iÝÎÚIb’ͱby¿]•Ob2fW}Ü£Ñ1õö„Ä8p§œAÅnøw3 c:·†öM Zg‰eu–ýœuVÇ„êã¹`ŒE£üÐ}<6„_³ù=ÑVãÎM·Õl8”<+uŠžýXsZŸ§;ûØn©œí–vÌ2À1Örœh-žZ#`wÀ9–€WÖ 2)¨Ž›‡BNÕM… ÀËCÞü·tÔî†Âtø¤vô!_V— hòð8ÑÕa|ävè¢6‡þ:h Á¢ÞLŠÂL£ï&È)˜à„ùjAÝ\œ쨛«Ó‡Çå¹ÅRÓIQý¼é¤hǩȤ®Ô¬‡a1æ¹Õ³'YZëÏ^ZsJ$ umýø2éË—>ýL€®YÔ¢ÒIu]Šîðp¤Ž/,»$û•¢ÿc…Ò”Rõ!réEx]ôª?xUT·«. øàéèjp\Ey˜z¸?g–fD:®®Æ€G.>ù‘œI€ßD:µîçp-—yžVð„gñ(ü2< oðs!á361|Ä™ó§I Û¶œ5ž 2"] ÿl$¢î‰úÓvà3œ¶ûý–#a ’­‹ù?Ï¢užMÁ/ïQ,qWð©ž8K—ÚOx±„G,›i ‘3’&¼†â±Xî+žzL©R àËzlW“A7Sº™8dë´z8‰ÑëG(\ª4ªY ?AáG{:îÒØLúÎFóQêHp1ÝOf܆"¼ˆHþ>F­¦¹¥ø0¯ü]D`ߦ{ø ediù*€ëâ: Ê@w‡¦¢í&¦K”\Õ{*ƉðëlA.Ù̯Ê!¦sÜÉêÁŽ’ê°Ó€ åk†®ª¡ðݦÓ|ýüëüç¿¶´ŽyBÆn“#°³zp 7Þc<¼$N>•y„aÒF„Ûž7¶!pf*‡¸ï<ç?yÎðŸ›üC4ºwM$i¶KÑ8þû îÇæ2`Òÿš4¢—RM'æR}Åû̼3îi„ íÓLÚ7Ý";§‰‹b„-OϽñ\¨ r¤,¦5œö¸{ßä+!»€EFlB€ÎÑõ÷½ ðAåÄT†|´k]:œ"}†ÄÀí-¥m‰·ÔÊ@M÷4Êûc±ÝB®Ï[×›BZÈçmœ¿ŒlŸ…©Ë8o©£¾‰ÈHÊÖNHò98¸‹"`·B'u„K±ë¨a6T-—F4p}@†2ÒM¶±™"T,nc/ªPµÛ+3°A#•Ȱ‘jðH¤(aã`ê—1€¬(­R"Ã:” !~:E˜sC>ߘ(ì·ž÷˜E<ýˆµÒ CuS–ž9ÏÉÈøžGšúE#8 E}N! ð1†=&:áR—â`Õb§ûƱ`¬ò£Þ5OǨq«‚èYƒyCaQ½„yí'?wqo¡RWÜŸ¶;nÀ>ÈÜé´‰A‹Ä@#ËmlÛqøJZµf«‹IU¹T ,ËŠ­j‰ô8KM«‘¥r>0@ÿ¸”À¥¥[n6ù´ûÇÕA€k©žH_‹*ÿ‚^£E–ã˜(ÞÂ{‹~¹jY 3ðIÆæ|CçÚ{´èú"Р¸Æ@ùzç:2½t'û÷ÚÃN$7%YûÀƒ3Ì1sÝy>‘… ׂdÌ%¬¬«´ñ‹`z¢·¯òóßÛ'ÒUGÛæì¾šU°$—Ó,žôæb”d¬MNEÎÏB8}®~Ê©P,?Ê[ …œbsÞzìñp=й4Œç Zn7eæ”j½P•Áw*÷ˆ“EM_Ÿ»ß™Çä0,ê“·ð%æ ù]º"= ÿ±úe<ÿ%õÃvÊ u2E9x–ò®©{Û2eÏ*_m1ÊÙßS¿y䨧¹ ç(Ñ7X> endobj 44 0 obj << /Font << /F52 5 0 R /F1 39 0 R /F107 41 0 R /F112 43 0 R /F109 37 0 R /F118 40 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 49 0 obj << /Length 3323 /Filter /FlateDecode >> stream xÚíÉr·õίèãLIc_º¨U%WR–“ƒå7Ù IQIKúû¼‡¥@£—áŒYv*‡‘zAoßðÀ×ïN¾{+MÇ$Róî݇ÎðN;F¤•Ý»‹î§Øîœs›·ló ~ð;Ý*¶y€‹+ø}Ü ½ùe»ÂnÞÂýÝV²ÍçíŽÙÍíV¨Í#<»ß{X`ûó»¿}÷VñΧ¹Æåh·ã.¬”-†åóŸŽkßÁï~ËÙær«áÿìCýºå^ûWYæ§5óPãw²u¹¨aŠGüçÆÃÌ6/·;ÅÆóã´W÷d1ïæ¼t‡£?†Uζ· o¾ø›ðû˜‰ts›+ŒËlÆSOC?ì7`‡¿Cý˜S\ç̃¼e4’ÇÓšQ—[RG(Ÿ‚mðƒ1BH#N=|HAÃ=ÂqФ;Gr^ã÷ÝNrJWݾuJ…/ƒÓ© ÷ (‘¦Gx°N <ÈÈC¸kÞöÂ#ƒ$=x€fÈ ²Ýiø4—?ü°eÕ$7Wç¸È~õ P@ÙhÀÏ4'F¨ŠÎ8Fg„Å1Š(á€fDº¨i×MD©Ñ]6(!ûˆ€Fez^„§¸ˆ„ ÷)pAEzó$v=¡Î¶‰n(àþÑ iNíÁe?ë N^p¸„ ÁÉØN*¹ÏB8<ëoZ^Wý}O‚‘¢zQ°”oþõR‰Rëý×·^}#pa¾DM©àŠ£M’Šó¶Th0‡‚h¦Ã¨×-¥„[lXAÙÑ‚0ÁÖU aÙ„ß·×µp•¯‹†ìêm“R°¸H²Å‰ºŒëe)C ãáŽ\O)oZÂ¥ìvÕ«ÈffȦ`ÕH¶8ŒŽaÓ„iÝe h¢1›%Ú˜n—áPó äbO„ÕÁüÒ„«’_›.[paIB–áð2Ú-A.*5Î Ž &¨Ô¸ 3¨ºÁŽ’°"Æ"~ƒ˜ê>ÁqlÃBHò:jb´ÓÌ[ˆBš¡Ê¥ߎ?aŠ…%þ•lE´(;®ynzê_,D~Ìé`}ý}î¥Â{¥¨ä`’9Çw>ˆgÄ’õpÝ…Ëv¬3†ßߟ„»72ˆþ­ åxe|-ËàqX4Û¿°9àQºh)VKvæcð~pm³ ¾èŠgöãÀá(Ž;”yÚêë!øÁ#œó, Kw’™ÞßDLJ®-›d\5d×Îd Ö°‹ŒpH}”‡¯f¿8 Âb|“œb+¾ˆÏ²ƒë¶¯0ζâÈA¦ S’ãºkÒøo-@œ%ÌÎÇY`µ*Hù︯Qž“cBÇ6ï7ø棄`M¾´©Ù€Ò‚ãÑ.A]c¨ÁözVj€gì™ 5 R…ÿ:‹ÌéŒ2ÄVÎUAù%êã×í($u( âs:ÌJxÁÚ[½ˆ ëÆn§ò'ΊÂ9½j®LµZ Èž¸ï)“­Y@!¡í¥±-'Ö´T®œB)•ËÉåÓc{C¨Í§z1¸š¦Ñ¬%àUH,eG‚¦•¶`|ÿ÷A¬@S2ãìíɧàºj€Â6­à ¤ØÙ?@l‰´¹¨¡°–Aâ„aÀÖ š=ƒ Œ~voüå{ªhÓh2KS+ÍÀŒâp ;/%Yƒ44m¬'r>ãË€K¨SøË_KOÒ@†qÀÄBDÅᡘçÀ’©`ÿW`Z6tÆàd£¦è&й¦X%>³ÂÂ=eÁ)F™ zÔÕŒ ²‘“6S/)Í ¨L™b|°ÁÓTÕ+ÄUùZªÚUT¥ÞéjʶÂ1±hŽÖ–ê’•Ïá–ä*Û^DB>%Av–2ûbŠ—üXZ²Š™ÇvÕÿ£Ü¬Ü çŒ`I‡2ìIª·hDw\ÑÏíCè?‡¨'Ëuò—w'ÿ9Áv¬ƒì¤]wÒAæa÷ùíÉO?Óî^BŽM¤j_üÐ[ÇÊ7Ý'ÿ8y;D•xâ\`É¥•DƒtÍ/'TÛx_MTŽ·¬k‘X*LƒÄå’;J`î¤JÆ.„Þœ¨¤¼SLPŒ…ÅQ(†si*VPÌ@jÛ¢ šþ¬$Û1TC_•Ä:q§ Æå:aÖÌÌÅqȆs´-“ •Ô­TRö¼t㸓oYÎg»½ŽܪÓáf ‰;–p—6‹MlÝNó¸#FÙë—ÙrWW/Oc?¦ÔCaí<íª•À´²®81àþœËI˜Kj[йˆ hû',Ò=5‡šLª`†R/6îç†<>îÀƒÔ{¡ß‘wÌþ?=ž ü—2ljT&x“+›¢/Ùüì±RÛ É}«‚«`‡…K0“ª“\eÝ‘,ñó†KÈ'ž“ÄžLjõÙ *Z42ǯ›Z›ëè’ÄEtošVZˆ oqPj1ñkŠBg=5ýþ_ÚCˆ—“”õŽ]¹«wÚÞÒƒÿ´¯Õ~iæk¨ß#ßÂJãz °¶ÖYHÔ·ž|­Ó€á´GõïvpÈ#@1ø°'þª ]áTX›ûNÛEî+BϹ?†A^ &@ì 8õÃÂ0˜Ëà\àa§¼0n eZ{ÐLPC(BÛ ƒrBžÔ©ÄÖ ‘žÏbMÌ©öAò{+é„¡sD‚°Y"RSå$óMÁüëvÃ’ñ±Œ@ PÄqCY÷=7lÂêj»¸V(F!tEk%Ýq4ʬH44Ø·ÌN¿J;ÿ ø£!¨Ì=Ƹ¨¢ ŠiÌÓ„*Í! |pxaFSœ‹AÂÆ×I•ú=¤j&Nå € k—e(6ËPê> !aQH-^¶ñШó­@·Øü…Ýüskdje #ðælË•oN¾<¼sh¢AºöØy/NÚtÌ{o³Kx¸Oƒ%Ì–Bü~ ósœîê—Ø”òàû¥³vØ”uùøã"÷ÛýÆh3ÞøõîâWq­™&¥ôqr×È—~TD†O·Ú¼.ûR¥¢sä‚°è3ÑèÃó!G>÷I3߇±©•âæ¼ïhÊéXÕ ŠŸÈÔéÓYÿ6ëAz™µç ResúÂl¥|d ©:×kÉ„/DÃü¦bã.ÚSúgLÝ?S F°¬nLYC·¶x" fl±SH.bŠcÔ‘-]ßVì;üýƒ)·z<•/ZEX÷Ú)ªs~Õì Ñe0(¹:ób¹hCZ8˜iSGàåšÉ?†#)Æ“¢H?Za’﯎$ZÕ.îJµY|x•¬›SUÇbšKfþx]˜÷|ÐYò½e©ý—kˆ\¸8´ýw§•¨Ûí¨lt1VØÓŒVü´³ÇèĤ֎Œ­3 ‚ðáÈÈã^½ó°Ì¨)(¡e³jÊÉ2ö‚€¯ÔFr½¤6’Èud¶?Âkd&úvÝ+ Tš) Rº (Ò ¥V”¼ª;’yýˆ¥˜©ÂQ^\/û¡Ÿrf‹cÇïPrúº®ä4_ÉÎÏŒÚPAzT•Ry©#Œ/æ¥àúî¶hkYŠòŽø¹ÒVÑK«}€yŽ“ ©:7S„»v¶0W(kµN@bj˜(«ú_éXÕBŽv4êJ #s܉’raKNøÊÁL™„yø9UÄÄÔó¬m…2kn+›aš¥l0‹T#œÐCKÙaÍr žXç©"žª¯ç ¨§Ú¦lžÅñ~ž‚5äÄSÂo¶,Ï·þ8™·Q¥.=JñÙ>é6 ÷é6LÝ:)Ïùa}M|† Áp±üh¥1íé¢uÏÎoú²»ª1¢¥r€V1—}‹†ÿn¼Ç{¨Àü’—®ÃÈ«ˆiê!î ÷§Rñ îCÔçu’-£¬}è2¼+ˆBÙª£Û8nÎ_imí+i˜õÊž»È¾òþ‡ØÌMÃy¬ÀnšïmŒ@gÁÒé•p²¶Ô£ÐÄu$‡0Ù>rHY:ŸÃX& ÙAEæÄZŽƒ’*CÿÖl·ºo |5>Yh‰²+OyR©üÑÂôWÒ¦ã…dT4NyVA-v¿˜â˜ÌÄlx82õ}ól$\€#Ófñl¤ŸÇ,ÚŠùpCi3™hô5u»@=‰l†` óš/%¦†(O_½|pÿ¼BŒe¤ì%IªFˆ(eQ”ý‘{ou8k2’o¹õZ, ß¼Õ=”õñÉóÂ`¤?ÀP &}ùQ¥z³ÈÛ9Yü ³ë+ê…*çDªe±-T49wƒ¿4ÙEWåR´ñ_£ÿ endstream endobj 48 0 obj << /Type /Page /Contents 49 0 R /Resources 47 0 R /MediaBox [0 0 612 792] /Parent 27 0 R >> endobj 47 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F109 37 0 R /F1 39 0 R /F118 40 0 R /F107 41 0 R /F86 38 0 R /F106 42 0 R /F112 43 0 R >> /ProcSet [ /PDF /Text ] >> endobj 52 0 obj << /Length 1947 /Filter /FlateDecode >> stream xÚÝZIoÝ6¾ûWè¨ç1’Ã¥@ ÐÍ­­’¼%q³Øm'ÿ¾3¤ôDÊÔ“l«FÐÃ[5"‡³|ó‘£§GŸ¡j‚VÙæèuã­Æ46(!µkŽÎšíÏ›­ í§zCh¿l ý@¯sú_†ö3}}K¯c¾ö9ÿOÙ^æý$}g!cÛ¯ôåb³U²ý¸Û¾I2_7Û@סýg³…Ð ó 'üÖ ñêèùãg C¦3XÊb#“ºßZŒÓžeP˜ÍèÃ$±‹$V¬Þ жɄ.IÓîõe£m{ŪŸo,Y"*MºÚ(u]ÓÌ:áÁ÷н«ÌR8½Do”ª O¢ùØ@:|ªÎ§DлùžVWˆ°›NòÖµGÑ¿»© º¢»®{פŸ§¬×åÆD?ñE^ý뚊§<³Õ„W†Œ" ¦©Oy¶Ë(Ú I÷´xß¾”(kËÓFXzíO;2°#ÿ[×ùB£…›¤dÅŠ¬I±AŠf„ZØh¡) 2ÁšMQ8tÅpÝ:N;sCuÑ:çéë9¯úý¾JñŽmŠ©˜bŠÅÈI‘\r) p/ è¾WùžB7ŸiègY#ÌÒF3Kýº>ï:¿f ZB‚nÃ̓³Æ•aMƒ1kÔ£S93i; ¤6+¬¿EY'› ‹`W8ÞYV<7iBáÜ °ê !x؇ë$Y–R¯r¾fuX.ì þVcbÈ Úß­žÂ¤óɵÎýø $ëÞÓoKÏpƒwKý†KüÆ»?s—Zz_·ù‡/ª~¨ 5o0·ÊDJ/ý¾ë0u}¡7ÝáîE:²,»… Ç]Gøà—£ƒ¿˜êȆJ:Ú±»-1$i›Ó/^ÉæŒ.>o$í¬}sE?ž±gö¾ùãà·ƒ§Ü …<ºØgœŽ)v&»àtNbÈSûqŒ7ö ‘÷!O›Ï¶g¿Ô-‘÷›{OËçŃãú^£é;ñ„Èð¹Þ¥S#¾iÜ.Œw¦Æc-ûeÖíí£µfÑ _ÄIš•9aZÊÍ¥;¶ÝRL¹ÐG4¤s2î¬hŸõ5â ¹!Èký¼¹K"8EËg>pŸpJ@ƒ†Ä`oDj …U/ªñÄ?>œCp\‚à¸Råe×wYe<—“}c$‡µ>â+j™Ý'n˜Õ‡"^ù\Ÿë]tF…ƽûŽ|áz8h}›?ÁQÕV!¡ˆ‹Ø¤û/7'(_˜£|ºØ—9¢ÈÈ\SQYa¹O¢ðPŠê *)ŒÔËŠÅÿ™¹O±%i+(™  ÊGb´'ì©Ï 9¦¶ \2òlòG'X¶{ž¨k ýÎ.¬ X-ºãL} ´jo L¤E,læ¸EÍ·]¶åsOªú u\ ÖßÞÁ+ æƒPÎ7(ùy§½ f»Ó•é £±4i#ŒW{­x¨Rÿ-xYM4ÂSœ(<Úµí;VŽ_Sý©Ú1;Ž]ÜjúÂt¡Â³ÉžAëòa‚9 Œ 7í£^AˆÇèDÈy̦ÚQëx±Ã€‹‚]TÌ¢¢`V<˜, Æ!1·FQ06tö.;ˆQò*áeÁ.æ—$0N'0ÙƘO`ËèPZc.qA«’p¥BCFcÌ4Z“Ūìù/?(Š endstream endobj 51 0 obj << /Type /Page /Contents 52 0 R /Resources 50 0 R /MediaBox [0 0 612 792] /Parent 53 0 R >> endobj 50 0 obj << /Font << /F52 5 0 R /F109 37 0 R /F118 40 0 R /F107 41 0 R >> /ProcSet [ /PDF /Text ] >> endobj 56 0 obj << /Length 4886 /Filter /FlateDecode >> stream xÚåk·ñ»…¾UB*†ïGƒ|ˆ‘¤HQ)b (â9Ÿ}¶“³}õÙNÜ_ß¾ÉåjW'ÙI‘º“v¹ÃáÌpÞÜûî}úµ4&‰šo\m ßhLj´róàñæû­ÜísÛowlû¾nŸÃ—Køàÿ—;¡·Ow{!ìö ø} Ÿ§ðyµ“Õè7ðyŸ·»ü-ÌLjSÊÏG7{A‰s¬žÖD¶ý >Oüì*}²ãzû8LÿÝ.]ÃLÜîÞñƒ¾‚ß#ŽOÂ¥CëòØ–Ž8ÍuD–+ È>Øí¥ƒµÎ…YCx{N·/à÷…§ Ü€ cÕ›@3 O’¿~xME–iˆcxñ2chˆ3”!†L " êür·×|ûoø+¶÷ß¿¬Škb•LϼÅiowI¤áK½.ÁUä„è8¸Ý–‹ +ta…ËOx^DêñíCª(2™‰¼‚ß,Ü©èz‰¨%0í™ù0‚Û(i<Ã[ %Pb—(áZÂ/“SÄ•1»}~þ?Æu„EiŒ íÚ.¼üÅgØö=b…Hû/Òrüýµ†¡+ £¦†‹Hàã&˜Á†mÿT(ŸåøexþëBK®šL{á·K¸þõÞ»Æù®âLøè£p÷{ß ž ‚œD6€, ‘÷0!ìT ÷Ô‹]øYA3²ÖöJž|‡úþ"éÞ·áNPu-ÜvEÌ5ìiTã— å"v¿r„áqàÃG*jSqÏ< Œñ&!bD½Y ³d,žx¶Ð–!ÑŠdm]íΉ. 8y[À*SÀ 'Ú£16‚}H¹Œ#©«Æ*bÌf¦'üµŒÒpUX¥‰Öj#ˆf:Œº?‚µ‡`Àž)¢ ; NÔÐþ1]ƒ&Ü 0„D0™W vϦe›ªè~|>g‰ÔvSš#£¤%È£°yªåÔõA¬SÉ:‚¯ Šg3=X¸ƒ3¸ Öͬi×ý29KajÕÒA¤õkO~ãýµ–$ò,*ePÈW™Ö0½]Ã3) †¯£èÚߨcÈ6 Õ¸Zkžï²¦Y»,Ÿ¯ßÔ>]Jy¥ÔO¶ï×ïÁ:†¤ <è“*øÿ6Ь¥¡¥×¢õ4¿IÎNS<©}+ÎЭ}\¼ÉDs=~ïBÉy©“o¢·x±“º8.!Mv þïx‡:Ó-òN­áÝ€uv‘u˜·qóÕB…TÚ›áÆ1,Oˆ>#ŠZ|Q† ƒ2(©.fq>aYÉÄÙ~oep î¶‘Û©Pµ±¡ŸXCt¬³ÁHé>Öyð;:â1Îp¾„—·¯¥« †‹ÅuðEº …L/xhu›ëýºŽ†œ[“û¤"lÓ6E†'rÀRmy±«Ê“,hÿtÜ,9œÁk©jŸÅ$àð\y¹œaÏ¢é©Ò#íU)ÄŸz6E´gÃáÙ$˜FYÏ6ç€ç^üÓ¹ a‡ ël*¼óç”" — &¶§¹sJS%-ˆÁwî Ý17Ú©´"%õ«—5PÅoQñ_bš ç<†F•ÁI˜í’MŠèuÈyx§ó|…&I’Vø4™7qáQ ®C‰ÕE×Ô5e!Vls©˜{[Ú Ê\)Åi°ƒW8àjÇ›r CÄ3ì²¶ìbí;¶+t» n_U¥ÓжÀ\rdYF4.\äÔT°ÒqŠT™ä]%.Y©w½ñ^ã "6ÓRq_ŽŠ²2e»‚¬\(Èúç²”:ÞtÏ A”´É,1ì´=  ´ʼn4+÷ìÁ”(Äou(DfäÏ0ðDÌjüØT¦¢CÕÏFtOÁósò  ÐEækc¤ch]Õ‡þ€ÂŸAf”tìÃÉL …=kŽÖñ!×B)H…ô9R¥y²µâ]×GŸûvóŠ’9sh櫲ÏÕ¡ZQ@3¾lWžzËB ÜLȇÃ1ƒqwɘµÂà Äã !ÂAØ {í€ðpøé‹+µø4jfO[~¤˜˜bâ¶n! àŒpûAØ©,Ç0–‘V••ÌIeUë [lòâ™ME]ÛK©©Va „û@qEÔæZ`¸¯BnÚÆ±òÏ KEþÎÄÑ6]®w…F$w(û |æ‚X¬cS¢•n}þac9]iKæÍhr2§jYÎF5ÕKÚõ.¿¼²¦V›s( î€Ïuñ챪¢›ü³œÜ‹‰G›jÛl­§LvðªÞ¶žý3½·“<§QÿÝ·ëúß°¾Üÿ†£&®^÷¿q«è‹ÏNšUñ⻵ «Øìè™wDñî4…ÆÒ\“|lèÈýWúü.¯‰8ÃûÙ<”R.î7Ɉ‚˜…ž;U¸ CM½s aí¾{BòOy1ªM3×€z¤{Ü¥õ°4܆yŒ×œ¼kï,ªVGÅ#ÌðæÒŸÌqÂå9òŸ”U]î*Ikºa¹¢yè²€õ–@òªÒ“`Í?r•ë)ëú8`¾oŠ®.IP WKõ#×+Éú*PÚªkb[‹7f€\¶ëØÏ7ìÇ M³Œ±‹í&øÌú¶KOÔ@QEWSÖi˜ w‚XnÖn/©D³½N¨YHð¿ºðžÃrX Gc¯ŒI)‰*Áuænå0ã-F¦I ¦Çޝ×HÇ7yvvyÖm>™$ÜS!Q@5Mã™™¯Â¨\-CðüqLMZðìD×WµÚ[C 0”üC‰ÆÁJ¼Ñ®ŽÅ¦¹jê³ U94ëfjü>¾Àõ”‹ºZê‹Tc1¡kÛÊæPL²ùœš¬ŽäÀÕGJcíEUôµž>Énæ¬2bY`úü͸ï¿õÇa`l ½‡½N®Ò^A0ÂÜÌYEE+n¸ èbã½zø{nJ¸É·¿ÓÓ~(¤®Z‹-Ü>b<³àÉã«À8%CÂE—;¬¸9]SHP4÷‚âÈáO˜úðÁ‘TÇRµŸ žRDÝ*ˆ²X‹TüØFÁÄʃ£êŒàç üÜ"fÅ/xÙ‡JÅÁaÙÁ¹40TÄ3z"ìMÙö²ŽòeRÀ†9ld Û¬ìù°s]µ…Ïܦš•x#HÕûqù7M:±&Àìì—®+þ·DŒ°lÔJNjT'„/Ú¿5Õ#C8m îšÄ'rläX“š÷Ǥ/5/ Ù†}æDZÓAÁ4 ªµ `´bµm§C–mOX]ë&'κC­›=úÖÍaáÜ·µbÿ\³·¿w—Š÷'cgÇ”Xâb†Ùþ4FÕ‚<ìÏËßµ§ µ ´YRÙˆØjdNaA‹?bÖvØý<¤”mÄóiQ#ùA‚UµÇTRÌ.RÌ®¡_M1·H1 ¥Y€÷o…w4BŠáçÝ(%RÅnñœCUtëR5>Mã/ËUÔ§J”õác³ûžIçó´K;ŸŸBÄSv>õUŽÅo‰árªèïNÄ`Џžõ“A¿ v¾cÚ" Êæ¤†€ÅÀ2@ítúmFë8¡þ¸Z§+¬QÔ÷ú,,ð° 4_fÁºòsë±ÎÔcb¬ÇJ×tNµö‡¢.Ê­rxÊš3 Üqˆ¸œÖ•_õ(Å:áõ\O®Iä×rÍÅ%­ü±bºåÜ”ñç Ž;ìËÆúÜi³"„äm*ìÓA£CYãÛÀÌSd aI ÿ±ÖžKÖ,X%ÖEò,V§àý1’0x?E~=](M Ûa¾0§¯J­Á©££ÐÑÉ £ë¡d™…R¦Oïìçf¤e'ž³87¶Ü8Ðå[G˜;Í< ,¡„)ê\ö!ch¬_Ò] · ¸Ó ¨Rvš@X$iX­1G¯ò( ›5}êOákþ¡wíU'Z|fõ²¶î­‰}Ïæ\9œúË€7œ1?%N °Ÿ€2WÞ|:ðˆUºcÀ3z3›ÀW<Ä y>dÀ©ŠLZ½õ Ïû,ã·ø*Û)_|Qx`â´w• ,Ïéü»»j¾4I1|-\«—†¦X‚JÍœ›áÛ~|{ýÞùw;Tºñ¾€íèš®®õ¤`¾"Š' N%ÅJˆ(Wëv¾œê·~½ ©îÀzõ úõB(Ç0ÿk婌ÇcÁ‹ïñ9n±x.©´XÖ–Æ-/PÎE1£½d²o{ä,㪽¤†þ”2"¼&ˆµI…î†òw®#&>‰†}!ÃK‹ž#¾K›ÏŽ—ÇdñšÚëAó•;{2Ïa`)40ŽŠß«õ l|vàó“6Â’àD ÆëölX!—SDC0ÓAÜ-EäðÕ„(ujÌáé+†/ãbúhU<ç„õA7NØü KÿŸ<!Á_Òü,Â₟Í#P„•–¯áëͰwIŸË#îã‘È3xH |¡Ò=‚1„a¼Ò3yBB8XœÁ%@ÒQzgŸÀÉÑ«ä0òqüwîô½4Οf8‹ºXÌÕ:u-Öªë„á)êÚ@¤+íyô5Àìü ›úJ|¥°££`aùxŒÍŠL†tU$ÕÿvG endstream endobj 55 0 obj << /Type /Page /Contents 56 0 R /Resources 54 0 R /MediaBox [0 0 612 792] /Parent 53 0 R >> endobj 54 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F1 39 0 R /F109 37 0 R /F106 42 0 R /F107 41 0 R /F118 40 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 59 0 obj << /Length 4360 /Filter /FlateDecode >> stream xÚÕÙŽ·ñ]_1o™A44¯â‘À1$ òàÀŒÀ6ծ޵WZÙ’,;_Ÿ*^Mö°§{·[ô íLY],ÖÍ*~õäÁ_ƒÜyæ4»'ÏwVŒ+»{rµû~ÿÝAòýõ»ƒØ¿<µ‚ýýÑû›ðŒþÝß?‹?ÆqBìoJìߤٿˆÂOq”Ñ.Œ¾ÄGøïuù?&8o’>ǯØ8Z˜Ÿá[Ò¼W‡£ðûë+||ÕAí ýõp”žFüøX‹ýü=}3Ãû_'ÌßF ·à5-0A}™–pó<»ÅÏÏk|ÜÞŒÀBïÒåxøñÉ?w|w‚y€¸ç:½™ý‡DˆëKÂûe^¹/ÿ-¼…V€ ¾øZp_m®ŒsÀÀ¿C óV9b˜4`Úë8ì§8¬åÆAìªA׸&^¨uSài"Ö[" b½IMs¯Gë…DÓ„«Ý ÎxIh%˜Ó*/èe$"(±qAÄË çÄA¼·jÎ ’ûˆ‹·Ó‹–Ìr‰ÿkǰÃÑj»ÿ‚˜úf­·i9éYÜvZoË1 7NH…¨™³;¸ÍÆ]w7NßyÛ^“0¤ ÁOã]$–=*'˜•ªåܳ[+ˆpi¨)¾^ä]¡–xHÜq5½0&ÍÒç μ’cž‘Ê#ÌÑJ™Õ—²­`O#~TȸD;-N¤þæ"ή” }}:L½¤aA‘Þààôޤ™ð—«8!n\’sÆY/GÎhV%=r³ÊWâñ%.ØrÜe¡û¥™Õúì>f¼šUF’9ÞìÓ4èÁã'~y >߉…ãÅÎXÍ”q»ËW¾ÿ‘ï®ðGT¸Ly·û†¾¢×;Bëf÷íƒ?øŠ,d+Œ4R aÇD¦ÈEïZüF]ïxwL÷Ø-ÊYÔKâ„g§+®¨MH Ì}—g|—;pã5šžjlâkbQ‰hãk•È·r$DГ¯ŠB f¾¥Lt5ˆhµ2Šß§eœ–Ñ”6§cz/H")‰ò¾_'§"ìœØ·*ðm_p­gH‹YÑ‘ö0-ÀœÕ˜‹ÁÉé½ ï™1f‡;ƒå¬âШÎÛUÁƒ][lB×(i Ía2gôs ¯ÏÓDhÙðcïm†9ßÈÙ¤†r ÙDA‘ãмø©+.˜P(xš†šU"L°$GX ˜˜b}¢£¸ˆ´›ÀP‘#)Îa(ˆÌ¦ ØÂðÎî ²˜vå*1R‚%˜±f+MŒ, PnSÒ• DT/ïL"£ÈÂ(‰çÐðÖºÝA1Ä?H+z`E毧äåR|J¦¸]$Ÿz‘e/Ú7퀦‰T ºÎÛvÐð‰l»tH@Ø1Db G,!Gg‡«íl»lm{´xR ¡< …ÚV ºl¢Lr2м%T¥š(’€ü#¹^ótA–§е‘a;…“SI†P‰ü°žl_ Qnþ ßÉL©!è&Jγƒ1»Š_§L­™²v(¼ÞfyQÈWÓZiWy©r‚—%Æ‚3A «¸6ˆ3Ú4­"¨hˆîIÙ üE‡# {Y¼÷¸ÞDõDÜõ‘«òÛáè« &‡·"¥ èc»Yb’”%¤F¶w²õ––¸2•¾—Ýý5-æºÎÙTEH=”é„Ô_.!7Ô’DéiŒÜɆc\åÜh»ÇÊKãˆÊË+=ë]è@Jye©1™ ¾gõRÙuUZÕc5êÎÊ=ô¤Õ˜—èÒÔKTÒvñB½ŒÒ1‡—[„×<éJ’0¢Zd>›Òb:&¸¹À,õó༟'kçw?–øypÎÏ“cQ •uº¶j½Âpã@D*qg{Õ÷ó †ÿZ{/?0³éìõêE"¿zäGðò%åÐHùª…Eé)-‹ÌŸÕ~~–½ÅçËÞ ]Rð[°7Áh¯·eï‚á ö&QDÖó·Ò* ñ§dp„¢È Ò!Ø)7‹½g UÍBw2T›YôÉtvëzÚ’N·.  \!(Žâã7 Ä3‚Ú£«p?íÈÔ Å”•+Wi‚C eBÝy‘çØŽøÞZu"aÖ0( õRu1h#ŽÜ9¥\ÑŠ߀3 ”–°3—ëÖˆàÎÄ`/$¯¶àÌËšeœ¹RµN¾Tœ0¹uXq7;½‚‡ížÁQÐY¦¼íébK2ëW‰å©`ßú€˜s™e@¬šØoö7W½Ó–p]—†%PÄ|V"§À2îƒYåŸðCšs{¿$¬Ä¹”ÒÓF‡dìº5:fè„Í1«Í2Ý«$L4ÌN‚(Qì;—šyÍ$®J[Á¼^sùxĦ xzÅÑÒÄË:e¤žÄÐÔî¡úC8€®¸÷ÙÄa6ÆYCr,¿mr'&š\˜RA8•U…x*L‡`ÝtÉ€KÝÑöÊ3à$+9ͯÓÔËú°EìY² °½sž .>Ø_>K@+T\C+:“"˜ÌLèªòYŽèÊsPK,ºå!ÙBÝ($×vc}S0\¡p3'Ý& 'À"Y^¤qÔg¦ÃB›˜»”Û.æ®o‡-Ê´h‡Qw ‡5Ÿ¹!âj½‰!Öš¹¥Ç:‹ ±æ¸:¿Î+tÆ lbˆ•`Rêkˆ'6Ì fÁ2Ë•æ€`9|¥V.Ù|,+ Cƒš3¿êÈÆ®©vì+„Ø‹þiŸl%¿Ž[ý¨Ä¬„­{âî% ç-pÆqç·+‚%o— –^jq2†+$‹`xÔ9[H–"J ³P´>‹ã—Y=kq:mÄu@…¸Ðž`«æ[áNIÜ©£ÅøT¨OuF(¢¯8Sà Ðãü\C ‡ï-q” Ü?åá4b­Ó"ñ3ù鈛Sk³Ð%É7ST"çŠJˆ£Iq\¦\™@XLyŒ’¬HB5;Š”áÖ7ue›$zV—ãx¤ØF”#X~)å'–è)éP­ŽR‘õÇv“‹¶^“´ÕP ÙeL*Ò;åÐùTn%c*f•ÚQõ¾òm$5Z$Y–ÊÅ’ý¢T­±vv ¤¡ ¥ê­F¥Oz¢ôI1'’qÈ/C­œÖÀTئì ”ÝãÇ÷TìÒ–Ùƒ™*å R¹}"Ο*5†¦·"€áš,.¹Ce@ª¾I¤HKÈÀIyìÊšÔQEÚ¸Aßù(T^Jè:ˆËHkz—QÓUUt5M1Øh n6ÕcÊ@eSFƒn(óbâ@†ŠiîZ­K%å&4¾ž'o‰IñåV´ÅX¡†.ÕƒãžÓÄ«Tw'Ýr7Wù7Y ÈroP©;¿mÆ4?Õ rô, û'ÿ¶zéû°\¤‡ô ‘Çž·Ó·…‰ÚY)5c×ïª>¶\›&Š,š~T N7¯IÒQ5pàê2t*È3bvïJ½û¨¿)¬ Ç´‡’¸D ¹Mïæ†øú·¤ÄiÒŽ*sºµ‹ùUÍó+0=ü¡E^ D0ì… •[âµ\Ž:5¯G­S± RÌ+5”²ÏyCmáï¹²Dy¶,1LϬë©ÜDâÚžTys*:(Æ=i>~œ3;ÞLÚ¶öÒ›Üuª ²©Ë5\úõ溘!eïn&ÁaÈdKÛÛeW8†ëP§Ú(]‚^Q[ÆôƬ上!\­ä:æ²Ug[oÆm4‰6&Z¨Òñ4/5Ì…EÞÖb|ê2i‹^œÚIÏ™ÑgØÀ”;ë1éØCN7¤n#$ £‡Ê_:_DY2Tç»cê|î8‰~ò&ë#@Þ÷Ö7VMRß¿Fí4bé7ÁA9¿ †[U¼qÉ€ÐGàÌêŽcBòSh½UMFÂÏ…Ãùû5í(äBÚ)ôÁùÚ¦Å@P(I%|Š’Œ 3r®]ÇÞ¹]g¬t<PR^)½Nçxf’Œ{µDë˜EiÃíý{~ÆÀe7Y.‚Tg¹÷✳€é 5:o °_pnîS‹üúCꪗÀâ´.ÑG÷M* :1bö&½\‡þZòCŽÞûý£ÔNb´šÊ…Ûw‡J¤«0ž æ5 zœ ø‹d»ñÑ7Ñw¡~_¼†ëà5(SåI†%ðp()J‘B}a‚•íý€èÚÕ¦Öß7CÐ…ˆýçeO<¿Å’üΠМˆâò<:ÜÿÿWû…ÏßtóLnTíÜÄ~§ILU—ˆf "Îç¿Rsø¨½ g峄Ö4?{·¯"½‡ŠnwXʈӮBòôP&Äòa‰1™?xßæÞç•R(u;œ'†`í¿µ‹7MØ0‰¢ÜB>[G~_×ÁBÕ¾6¨ÓøõïñÚ…«Ôÿ”/±xýž¢Çc8CD:'©ƒ™–¹%ÊtjÿJìû>þbz¾ª æ_TA¨ ˜Õ3G¨Ê™sªˆ`Á²¤ŒR¡ÒÓ®z^xþËž±shËD1}BªBwj÷„t OE5ŒïáåëªÞ:t"šÖ¬OßgCéD?t Ù© ¯xæþ“wÌíô¬lzbôÀ‘1D!^ÔdQÐØ®PÙÿ-±aa•Û¤rS†H'|Ë}-„ߣ‹ê¢¢ÿÅ@9J(©„þ«Ñ¥,“z%€.¢sJ QO/z¹Zóe!NÊM=¤ç®½8©˜^“®2ñ.œÛB|ÿÔ2ÕÍ•£ðÎnÈ…»Ñ‹¬©Ãc8ŒücÂñ®1æ}—ŠºÀ«A)§5^å”·¶JFtî2‘L¡!¥¢[;×z2£"–°È²(Ž—H çw^âËÂi'C2 #¥nÞœlLÛìª<†06_ b2ùDÊ ù&ù,}{‘}¿‰Û¯³ùLýš9ùEr]z¡s«´ô¦ºª)ßäeR¯4}¶ ´PH±œj¡xu 'ý¢\ 6ZF|'ddÈf÷ú6-åÕ¡à]‘;$Öy§0æC¾£éå&ËéÍÈÿ`½«ÊF^†šTYc–Þg ¥÷Yé¿ Í㯡ãUièzUÚÌh?šØu7…I´) «zNÏU‚ªPü}P5XÛf›qª¨«Í¢ðQ)ŽSëÔõÝ,e˜”f™ZÐçÔ‚ß^þÓ?l5®\ îts׸®J4w õ «J[d“Wmû‘1°uåŠ9}ÿëÄ&i€s©Û‰äŠ $ø¹‹0ég‰Ô½ ®}ŸíšäJéÁ{˜ÒÀLÊÐÖírqPÏ€‹ùR>~áŸ,XøÅò·Ã©(òÖd»;˜l°6wòº<1»i ªfÓ*ÙIùÈP4%P€9w«$`)‚EçJ°ZqÍÅYñ† ¹³Ióë 1”…¦´ãSÖ÷¤Ö^XÎ8Ý—¢kÓfŽÉä@(Gï>v‹Ÿˆ”¡þrAç^ò#)Ÿ‘®–ž£„gî|ÆGx=N˜5r<ã r8õñU‡èèÑ&ÿ¦Ž é>ÊŽ’|„· µ¼åÐ^ëh¥Ÿ“¢x~£[ØŠoŠ84¬ìeJ’«Ë-QžQ P‡'ßô¯¤×2„¬LVŽYDL•‚*UÑ™zšlªÎ3:Hè.*€ê&бk=ÂOïï7íêš s=º˜Ï\ˆW{Aä»QGc‡k‡þI*UÅÝÉüO^“ÜýÚUŽÈ endstream endobj 58 0 obj << /Type /Page /Contents 59 0 R /Resources 57 0 R /MediaBox [0 0 612 792] /Parent 53 0 R >> endobj 57 0 obj << /Font << /F52 5 0 R /F109 37 0 R /F107 41 0 R /F118 40 0 R /F86 38 0 R /F1 39 0 R /F47 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 62 0 obj << /Length 4292 /Filter /FlateDecode >> stream xÚåÙ’·í]_1ož©x:¼ÉNU¢ÄNœª¸*¶Þ,?ì¡•'^í®½:²9þ=OÍžî±7–l?h5Ý ’ .ȧϞüöS-6ã0a6Ï®6VlÌ(&íæÙåæ«íëß~³fûb·—–oïwšoïàåÙŽ›íÅNÆ/l{ /¯P݈m/wÊlß„FÛk|'¶owûÑ?¿Ûóq{ØíƒghtŽ®wœAsòí°Ûk-¶Ïv{5BÇ|{¸¿„Vj{x ¯¬þ,|Äoø þÜî”JŒÛWꮌ}±Sšpê9Óì®ÌV„f‘PF‘…Äp%’öœ1A *Qâ[T› e¢Êz4ïBósß› pï"SÃ}wS¹’‹Ävÿ³H­Ë×›½üÇ:ñ,&îŽR2áíšF+Ú5eØÀ˜ÝÈÁðhÚx+æO ŽëÍž@õÙ+5κZÀ ÁdnAz*’ò"<ƒ*tÔE€møÓ—ðû“ð¨¼Ç—~d3B!k2U’Añ_¨às´T‘á¡›¢»8zÔ^ã(=|û6XVQ„?ß56úUa¥pšZ»d%£íöøÁ_ûæãgý&X1&aŒSâÉ`$¡ñUÅæ¾¾— øÅùy߆Ÿ8öwØÇ›Êæ•ñ`¨¶šèæXËv0ÀU V^7˜Pv‡ x§£’Th`‘MÁD&ý.H-§B;Æ €¬‘Éâ€Ñ õœ N"H¸@j¹9@ï#§úb໤Úò4õ6’‘¹¥°•¾<ô{ã¬Ûé Fä ÐSÆæ)ÈŽŠšÁHí'`#·"¢™gÆs裋¨`‚Ô7¸èt«áÒwÏÎ<#˜,«fP Ó40γÝt¸7Ó)Üp0- ü„2`q€LøÇ3WHCÙñù sG7®a®ÐÝÞ*¦qaúÌ­I¬ | ÜýŒï’5_ØÕô†n` w/Ì ¹IÂ3AÖšnŽÞcµZxr¹/ XÁæ4*O S¨ÂÎOx ¶™C5ªóŠÂŽh€ˆ¤«§]·Ú6jÖPʵr_Úå8ðug@èF´ãñ[…»–„«-9Œ•U¿Ÿ÷PtƒTn E° àƯ☫b f¹0®á‚ùyr¡^¡A$èÍqÛÍÃ}¥Zfñä*‹gVZ<³`ñl¯·5/š8Êfb ÕF7 ÃiÁ% ±æÄc„‘ôJñ°kÄî{¢’ÚUJzE1z‚äq¨EˆÇ$Œ[O˜=x ƒfè¿‚D0yŠz_wÑäZ?¢=ïѪ‹uV}\BQr²ÒÍ-­hvÊ2rÝ5$`?5þ þ)Xúþ–µáPÌÖLè^Ž^6Œ¡…(ÓÍaXˆÆ5|õë&S•¦Äf]Ž@p4‚9|à.âû¯®ÆÍ˜hxªsøÃ–¦i™¥HË­YšR¤eNŒ´ |td2QÆ °,§Ywå¸+D&ÞyOÁóÖ¦#€¼•?p&ô8‰ª¾„bˆAŒ.mÈLq‘Ç( -§û›_‘ñ‚« ñŠ?2W¯{\E3¦ÀùÑ+ÙÊË>[/šsÀXd÷B &m{|P[úXh:YxÀ:Ò­€ó효§]á™ö5#ðê±Þ>ªÀ›êaOØÙn)̯ŸÌM½ÅËU;<ýPž<Îìëp11;lÕF‡y?Ò‹z2iæm‡ð*(oTpFýÀ(½"p^À+Î5^?ÊÑ%]Í{E:t½¢GàUÇÂ. ÝeÍÿÀ—:ó­ô8†àÚ}pq’;%NòâCàOs»ê`TÙA1SÇ¢'-ø8²Q¬Œ»—§Ñø)=*S[ WD] P`u5³²ÁQ’[uإԵ拘¾JéºkL Žn’©£­“K@|>ðMø²Ÿ2–“†v’RÆÎbÊ/æ#/š‹L|¿g%óß·$!#’§˜˜/…1SÕt*CFoyBÇr¬Ðå]I*5«ªñ°˜Ud¢Ž€Ûj‘ªh@­˜ u'ƒR‘ ´l;ž$üÕIŒÀ.(#ð¹b^rp;BhDs"DÕ`ëpŸ39`X!NÅóA$»û*û Cèr9]Ô“cùŸ–žÈ¥¶Šøo¾^è)@=`a’Î}œ•"&,Âú,¡r¶€ëÊ'}” ñ³/ÿÉ5?M-•öo&eb¾+¤àS] b2­>3‹U 8È»T’*1ÎrPžTœ_¬þ‰åA[Dn{€nðUä˜àI˜ÓÙò†u¹‡EdR¢”_ÐRãCª®ŠWø*–±ùß¹îp.Búú²C®H¸H¦!c!hRB¡Šíx‘ îr¡‹ È&É3+£!*eW  (õYéµ’*x^$°G¼¡C-¡(KæÌCýHžéYa-J[ÇÈ¢‰ÔL/Xл‰õ-_]WõÛP¶å±—qz¥€7Ǭ|^«³:ÑY¥è,ãIðý YË9cÔôcÛË‚Î[RÈbMª·°¯hRçyjM»O#ùUŠ2ÇÔ*"Œ)KÇ;Z j¬ï3âP0†¤$Î?Ÿð»lwyüžêGè˜weÖxu¦çáÚlm²H8NEc-ö;qeáÝá¾ôw›Àdò³¤½€¥­ÐwyjóºSLê$U ’m¹«°¢¥lßàÆ:©`µNØÑŒuJ=܆ŸÔ:©`Ôj뤨uRuRë¤Xö¼—¬“Ѫ)SÇO´G3ÎûŒ75±NV—r“Ü£>—Ym¢[T{ñe°NÖ$¹Í’ÜFãä1-~©oÚ5N~vÄ8UÓRgjœ¼÷ˇ‰ºàû7¡ŒXó¦–¸åFÏ:¡+M­>Ÿ…ÿJ1ýË^‰;‚c¼\ŽÕ¸ëš¨9W>Éhª!wù<¶“c‹ô¸?«Š} S¼Iîš2vç÷àÕçQ§f Ä@¦x ­‡’ðyè&ÂT˜¤‘«=QÁksvè¾»aމš>òxbMñ}/„“ÿÂËój!JEÅXN^¨ÝÉ)ì¹¶0_³Õ`ÐV\PëªV-–ÈøÙ,9tÍ´X.râÍFìãóü¼‹V|•Ó´ ô1Ê¿~zÂüªªœÜû©]Åäû`«œ~É…k?¤ÊÉ Öâ=µaCŒ»$žp`DSŽ™öhÈœ÷¹¤è8f2º<’§X$¸=²rÅd80x¸~ýœáª›ÂÃuÇ ”ä<’”ÍÙFèâÈ‘")ùQoZ/lÎMY$–ØW+Žî2yVþí_nÉA¸·ÅõÓÎï)J=tž¦OŽ'ácšÁ·» ¾–Jæ\•¼m:GòÕŽž4Ü Í§Y]Ñšž ú(î!HdvüÍS¨£Y-rd©yst,¾ ½š1i#r2–¨šBÚ(éô²äT6Í»N%~(Gã´˜ rŽ˜©–t½ÇއŸ|YÓȶéœg4" â»»’—ˆÛ¨†×–;žD0éd©09ì1¼»Í<=iÜÁxr|•êm؛ںÈ0œÑÂí¿ä³[4ØÉôöï­Èûî†jYg#)*ÌZ'ls¸ÑÊ`€â¡åòhÀ$Íÿˆ¦ÿ¬*Z–_”½¶jwƒne=# üC_~aü ªÀ]Š5‘HDñ/KN0õ¤¶ÿî®—Ø&üq¦vÖEvªŸKnz½@Ö$ /ú«®«2úW±Fð=Ћäíÿ§° «Ø Ç1¡½wnû‡N‡Xè öÂÈnIœ¡1Ùú=­‡esjîã>Þºdø–I=l¦4Ûíí¸ýo`o±Ë>d £9§»y{%Ø4 ÃÉ©žÞÍ€6ô´»rn¤õÕ.Ÿ·,¼dõa8b«ùœ­ž1£Øü”„¾¦ö£ö€ðÛ™7ñµtòã´˜-oÿ[ÑŠ}FÅí¨–<ÈK»Åu*/¹dÓ =9­êt§nòbð̈s€ÏÅqëÇÙÂ3®ñHˆ§Uµ[§euÄë´ v ^AÑÉöŒaƒÖº)»lögœÈËœ ”Å5ˆ 0ávh)Ïw²\Rq(…*eÑ12/:º:yŽt¯9LÔwÔdôJ(,Ø.[€œTs×u˜N–’ëhò!fÙBÓÕÆOŽ11ˆcdDKi[ûU}¿ÕWª¶2°ñ£y<öúó; €µ¥*œ0‰ž¬Ù §WšÁ'÷oèÎ5ºï–û/eoœ™„*mšó¢ZáKרø/Ók¢Y<Ïj<Ÿö‚ Ñ“Ož=ùî N± Ç€¸uƒÓ›‹WO¾úšm.á5Ø%XŒÝæzµáÎ|DaºÞ|ùäïOžÆ‹„°òÒƒe„ÀBí(;X0ì… 1ÅàÆfoš7µ1ý?À³Lðáj†i#[ø–À|~WÅE±ÓøNÔ ªŸ0»ÉôIŸ†¤ôŽ“ Ëv¶¾Ð]…xï"ìî‹©.ÙÄ å‡×»¨(õ[îM un~9ü1ÛO©1"©+IÒ»aó±Ù=÷»Ô®ëeXk³n§äD#4û( ¸b'‘ü1¡ù,*@¦58#Y×bœ—Ë% "2§×d)d¼ÈÙ’Ïô õf¼ˆ~‹Ì1šKvì'J&4˜+¥7\ÁâǧªÆÇ¬jzЮQ44|…Ø—Úp< 'DâB6…¸ð]!mv©Z¥CZ0¸s_€²})—}É&Í&W†˜¶Sú±:ù(³o9|Þ\^dI+æÐ4eµJàä+ŰÊ@ÓD¢¬#>IB@N®ÒòÇ,bWJ¢%{¥kú¤ç‡¨›ÅÁoj©ºÓ·/ùj-§}ªñäè†n+ÓpUçÛ€ðç 5‚÷ýH.üšoÊõ[™ä÷}¬CSM¶©dZï¢[WEæ±P9Ó¹A«hRÉÍp±H”úžÊIÏ÷y˜9O4wRדK™îˆc\¿DŒesnKÆAÚ"§PãPê'}?‡Î–Q³Ôôˆ…ËñÄòjñJ'[—Mz“nîºì]‚5rJCÂÀ¨v‹ ûRNµ o'–ï s¼³¥îxŠGEq ]s%›ãM.Ûu 4Z̪»¼Šàý¬º‹›ü QM±^¨Üt?Ž.ð¾]ÓáqvMŸ*XSÓ©‰ƒÊIáAºo«—ï_¾*Îù‹µ†î)!Ýì ‡UM%'”oeZ‘ÿUƒœO endstream endobj 61 0 obj << /Type /Page /Contents 62 0 R /Resources 60 0 R /MediaBox [0 0 612 792] /Parent 53 0 R >> endobj 60 0 obj << /Font << /F52 5 0 R /F1 39 0 R /F107 41 0 R /F112 43 0 R /F109 37 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 65 0 obj << /Length 2224 /Filter /FlateDecode >> stream xÚ­ZYo¹~ׯè·F2\ÅëÁ/²‚ @°ò°Ú£#–l¯%[ÙŸ*^MvsfÚ=ŒÕG‘¬ã«¯Šl¿??ûù-ϼ‘f8¿¬Œ—Œ+;œß ¿m^F±¹¥ÙìÆ­|sMןF%6#Þ~Å×Oøûˆ¿ç(ñ /oÇßÏÿñó/B4S“ 'þ׸bó> ¢ †y«É `G(fDRâ‚ Š‹">M+SrØVâãVò Ò7üEeéª<7›»¤ ÷ÕL`˜Cû‹‚˵“Ög†öz±9·à{>Ñ5Ÿƒøä#=Ù%g½ÔÎÚ*îƒì§ð5M‚LV;ÜÌãñ<ê¸Ä%™u=ªøçËSwÝŒ`BèpÆŸ‘«¶>ÜÁÀø´è% º¢B´w£Á;ž“˜Ó6{æÏŽë¿&Ç ]†üDS\HiãäwÁIJÃÞºk ‡6øk@/`ZÞ÷@o’úÿv ‡RV Mf§Ù™ò.2ÔWBÖU\—¯p\æ«ïõ;­€—i>œýCŒ|à$oÚȯg9$E—£%2›âÛÛ‘²e¿ä’çrÃõ“P‡D_ÂÜáòu%á0iQåW–Ï–Óý ìhÔ„á‡ÇçX`ŒÖ›_›Õ3!åõÈ5?Uµ“žOú>U$’Ó$êô‰#Ÿç\qvcÒés¸˜IR!Ä7S¶SLø¢~mïªEH‹—äè§è{jk )ìÜÞÅËÐYfÞ˜¸`a‰T¾åÇÔUШ¯äS²ô¦‘[6ãØo!A('B¹Òœ”dýÐ%ͤ_Ë ºav1Ÿ*¡jÐÌ8_Sƒì0‚Å®L6„𮫸càôÚþ³ÕÜ™zËÂ|«ù…ŠÕ[Лðc¾j,œ»*A­anBMþƒî3ë”þ†O¥žÛŸ¦!’>´Mõ*>©JLÏ\ÚçàvsÖø}Ÿ§v‹ÚpäÍG[ii-rfüÓËš)‚µÁc”< ÌB¦[HµÅ¾~ L³Bê¹­MLäy8æ[M¨ÚDxs!Áâ{•ú‘jW —¤yãþ|W¯@柅ÕÑ™€·w°=æ`l¬pó*]‚RÊk8eÓ¨š~å]’°ñöíØް_ÓÏï£?WÊôéÏjßžÅ<“߫ڋ…ŒÛŸûT{nëÒþZ3ÆMž+ž‰p¹¢Ù¾$9#ýOü£s©ï5€¤‹v'‡ý¯ï0ðbEü<¾®„RM%E›}°‡zcöÖóî™Æ`·ïŽoJŠ>¨÷,TˆOîZh˜4úèƒ ¦k!Ì,ÔU¢¶\13V4Bª´`Bèeçí›­Øm+‘7™™::Î1‚Yy<ú+vR.N|®Ó¯PÑCµ‰\VªF/Ã8Ÿ·9³“3'ʶ½œêÍvÉxÕœétÏé´g’Ûå¨Âg¦ è*‡´fQ×›¯¿‡c†"þ3Ÿ…ïë”Øõy×!1ÑÆVZ&{ÚÅDÆ^ËcBçÕà¤x/¼[ÎhØÖ0mÍ¡ìÖ ÉÀˆÃœ6N'ìà\ƒ§°ãÄȰg;?ûãLàJ|@µ4ätm€i)†ë§³ß~çà ¾Ä]SÞ ¯Aô‰qÔ<¿žýûì=ôÏmi.liµ¦]oί.gx§šîNñ„ŽÔ1W°VjœT1kÌ!…fÂë¢ao£“'‰sá*¨ë¬,ep+Ï9‹¿g€˜s¡1øSäy?ÃÀþ.^K{¬æ73£W¨y³à_"âè´uS%dÊ€ŽæíÖV‚NÑ7 è¦9NÍæ-@7ÿ„ÒB.ÎZ5‰“úšå,y®äà»5ûx¦—j8‚tÄ2¿ÒŠÞTŽqs¸ó%°b«#CmoWÕ8\8Ö½-m»CicpK)‘úK뾕š—¼–* a JÒG*‰M„´¤nÌýG–9G8#i.s µ.)×ÁÕ¸ú•p…cpÕ®p®¶á^ eè„$?e§M«®×·>ülA0 É’=‡†³ï`àäþÍ) ¿†ÃÈÇxs5=ÿ\µÒJ,÷°Ó&\{XéãXœæñá}Ù´/õU‹&2ìádñ¸ï§ØkåËž-Nž_çcæØSgß?ô ÊÌ×χ)åëÜ9ösóCê^ʪéÈÿ]Ÿn¼1'}X´†jöiVô“‰kÚQ»Œªóˆ8¤"Ú„ÙývÌy¢"—‹A:)§æ:}T¦>ôžþ+¡Nó6~Âuú2‘qèêœ"SPU¬ö|éÁªl¦-Îi§©OÒoÙ'éC^Vrh´ª¼X¾Ißþ@¿|a‰X‚1È/–Ùh¢Èãÿüâí© endstream endobj 64 0 obj << /Type /Page /Contents 65 0 R /Resources 63 0 R /MediaBox [0 0 612 792] /Parent 53 0 R >> endobj 63 0 obj << /Font << /F52 5 0 R /F112 43 0 R /F109 37 0 R /F107 41 0 R /F118 40 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 68 0 obj << /Length 4961 /Filter /FlateDecode >> stream xÚ­<ÙnÉ‘ïúŠ~ZtcÕå¼À~ðìì6ð¥Å žW¤D“”hþxGDÞYYÝÕÈ®#32#22î¬Þ¼úÕOÊn¸š¤2bóæzcÅÆx>)§6o.7?oõnï½ßþvÇ·áï þnào?ÂßÕNóí;ºÀ/„Ù>ÀÝÙŽ›í\|Ýí¥tÛÿ…ËÇý¡©~ôâ,üüqWu~‹Ïp7çôø24û <øŒ½Ïïéµß~Â9œï„ÞÞ†‰ðíÝî—7¿ÿÕOZlüä0ˆÛì…HýŽf°WRC?bïñ‘Ú¸{îa¦{Á!ÐᵡK$Åep¹Sa¦U“ˆfê|Oo8ƒ¹þw¯óüìä-ã8?nÙd¬†yÒÜíÜþþ‹íÿÐÿ?v.÷ «p—( ú¦~–È 2R´¾û˰’–Ö¤® k› ݾ#RªL¼@R\ jó_U”ùˆ0Þ¥þ™òqŒ½qÀd€ð`‘ üòÉk0mù#uƒ%ÑÈ#°.ç‘/ó‰é(3cYMLñ„4"0ÓÛË@.û »~ -Σ@X•؇^ŠÓˆT$vbéL˜v¾‚fù5ôùón¯-Üð´8øð?ðGnÿðqMD>- 5û™Ã;¿„ö‰Ìôò9.ÆÍv~Ҳ݆Ö_`£ÓƒšõÏp–5É\Ö.Gì§q*’;ºDô%ï*œ±ÅáA—ï [X­/Ô†žÑpHËçŠ%ðEÀ_ aÒá;l.ÿYsR¨Ú¹xKRä'xÿmƒd>Þ¾eLÙð†–!k!±@¼z¥€bÀÇRнŽ÷€º0„²·ÍÖm!T?ÊéýÑ­† nÃïUìvÝ- bïÖñ%I „7O€ñî"Ehâ"ÞÅmPp: J±ùš­i¤Øþ_ËÃ|2«dT#i*¾EB)f°¸‘¯ˆ.’œ/Ifï•°$ª˜IÜn›?<ûŽÐZŸ&‘~šÙu»ßï:ÀxSZç<£Nβª%òBx@k‡ êµÃW=èŒfXœI£ŒòðKÚB·_š)›ÂUxS :+'é! ã¿eš-É™¯Ô¤öó¢¨É¹"•“²65˜F0äÄ­K-® ô$+Ä0’¹Sé8Ù˜Éñƒ³7“ñ>5ˆÌ&‘‰ƒ¬—yyqLCŒWÿýæÕß_qèÆ6|#Œš4¨YÃç6w¯~þ…m.á%¬Ë[nóLMï`4é \ÝnþòêO¯~@#²0Â2 àMVò0­ó‚š£Gº0qÉ,,ú¤¼^FOOJoª6¿Añt¬8GîY/Rç¬Óh{}o¢ k±—ÚLL¹Áaq€õRØ4&kôm hFmñ%[yðÔÐ^ˆ­PÀÄuç©>û :ܸ*m6zx¿l•GŽVšlµv½™ãU¼O k5G¸ùR™áÔÌvXšNIŒØú9)â÷Õ£7ŽšÉ¹ ¹£™þZ$Çì¬óz5€­OSØãsm—ß&ÂÐꤛ8~¥¯¹«™×’Õ„…©û™‚@P ‚Dæ8Iì‹líF*@£rZ'jP‡/-We’t²^âÐFÏ‘±‹Ô¼ Fm3F¤¸Ê¦5‚=kÌ½Š»…©CKð‘ (+k âWè–$‘2º—Dv`ÜíG¯6ö„ÌcÞ…a!–E½ÍüÐÉ~"Îù6~ÒB|ŸìXŠ`±É½Nú©CÒO¿©5rpzêCx6ß–itC-d¥Ö%M‚^'ÿ—b(¦ Mí nz:¡ ™´GE/¨|…Øm;ø€Duž|C2ëx¥ÒÐÆå¢74pìf2²÷…:¹´Å‡YD‡-möÕŽ£u؇ÝÑnü ¡Ù HîØd…LÖú‚hd`Ïrbº–Œä¡ÊΑƒ˜[Ž ÆÉ/(cì|ÐÿÌúµ£'ÝŸî?òèõ&«ƒÄf-ÃÃò;?9+:Ǿþ ¡º,É>¦IÛ9î7•AXÐÈíOP‹ª=ï¥æYê žºdÇÛm£Ç jµÒ¢BÔÁà·BÉ/¹Éðì÷ýcÇOÜ›Ê^ÀF‚+=`(ŽŽVæLd'É¢‚£™v‘º¹eÝd¹Þhd…ú>/ `9®6šYPi¶Ù,ͤE“ýîߌ¨ä'©3)È Êvs`±Àì˜Ñ<~Ë@“ŽAÑÆ¬šžmg:2>"+GF„ fð„"Ri?i~H/bˆ÷°ZT“` I >ÐÚ^,ØéV7Üÿ%é'ËDÀ}¸á.ÝGWöÃ@á 2e“w7ѯöгbãú·^F)™è3“ãðì:Jβ™HÞ6M°ˆ}/"ùé …“%=ÀÙªIóÚñðÙá-Ëà}ËѼ‹dTæ÷5î1ÄM’P1=Œ£6‚Vó¹ÔÑò$©£yÚÐü¸LÁF#™/‚†½®õàCèpUœ«˜"ŠR· qa8Ó«yúUW¾úÅŽç•nÒq:¬bÏ›à5¢97ËÂÐ{!VfØ‘ìáPÁdé-¯‘H]SKP™%)°{¶Ú¿$c㞦 RÓX1Þ>° ß2&‹åx݇}ë•qâ%̓ӻ²hA›ÖŠ¡']”³6«­´NÃkÓX‹x´òAWÉå LöH¦G—L6§íÚ&ß”'›]‰Ú®zHÛÃ, è:E¶hŽ+dƉ‹¬&RŠÁËËÝbÉEPÄÑï„óºâé9®a޼¯Ê²”»JÈ”t“Èò3®Y=Ó6À„¯N3C°Ç‰:*“­]ޱÑWD~Thsü@m¡I™w]&p<ó!³çWdö|ÉIúU¹¼;góR0U1þRî+ujŠÛD¤eÅù2&kýö6mó¼)KÞ3+ë ÅóQnÐ*(Ʀë6"OEMM%›„òírýHµ”¥êʃu•Ld×8–.Š’ÇÐGrJãåCµÇSB'ZŒzã°‘ä’ƒi©sPàòëßΡŸ>? æ¡Àu¾ %5!Íj틲Ûë`%õJw”³Tᬸ\H8ÑÛÀË*Ⱦ³šy¤µŸIm6ôߥñp”ˆjr} )Ã)± 6ã7Р ¿Ÿž«Š•¢¤Ô—Je«yG²ápVi/¬MìÇ;-­!áL\Òœ±[±F¢×œBÓøúhÁÖÁõ³®¯""ËažäZBŸÆØ³TŽç•-øtD ¦wax• 1z­5(çø¨„½²pdŽY¹¤an>Æ0GÎ;QòoUÐþæ2=¤ŸëÔ-ùúøðP}CÑŽg=Pà}G»¡0—«ÂÙÉŠ¦V}…L5SÉhEér‘ Ý— Dvž—êm¹õ“õîPÁ­…š7Þ1úñ’„ù0N®qeÚ3<g¸ÑÜûú iÝÏ•cA J11Õgì–ƒ®©&Ë-¥yÊ+Ë¡<ܳÉ3³ÙWM«Ü ¶eÂ.²-ÒY9ù²ÓÂeù&¶fbÐhMî¦ —ÅH½mJ „ï«Çë€fuXa^Œ'±¸™„·s[λy\>g®£Û£UBXßžf{ äz&7¹$«›kâ ¿‡žCTg) _«Œ¢F™PVõ6PÖ[­× ûR1\ÎÆùµªÚÐpS{Ö4‹•¶,öÍžn¶&»˜!P¹Iq`¸^5ÉE{.Ïq—¥õÕ¸põ[­ÎÀú^Ô¬?KîpÐ~XU*Œ›ˆƒUÞ©Cé„¥5‚ù;“„ÉPx©;ÁgÃ,[L.ʧ¾àVO‹AaI#Ö¡ãd'ÐöÜÑÅÆÔøä¸ì¢|Q£J>;ïպ˩í]Š›ËRŽQb‚¹¶h^q¡êBžE h…&á¶)œ{ŠC?×!Ë¡6—xÒÆ­³¸O™Áa‚OÎË0Á€ÙŒ} Ä|)¿Q_r5:ÄÂEàã ¼+tær—¬ÊР̵ͻ2/“Ó]wAÿ×@iØ6š/Ίï“A €fKg„eê\¸Z5xà!&,–Gv)hlçßWèýz#à :=„ ñÃÈ; ð2¸(kÖ¡žä•É«up…Ÿ¡Þ µÉÃ뚯cí÷S[ÕYNÞ×q”¯õs[Z6·»êÓÑó£x+ðð ¬+h&µÂ|µ/eU+ ±«·ãr¨^œ.ø:½g1"Ï©¼Õf#AÌF5C!qÁýdŽÔ;¦:–DK€ËI)ûR–דÆu“Lœøõ¸–Ô¬BµJ‘ªö¨Tµ³~´Œ˜zü¥Ý¢Á„ºJ`ãª5ë î§£æ~¡%·“$_b¡–Cѽf¡Zk#í…†Ù#Ñ`ŽèS‡úèamCcfƒl¢ñQ :’-X4—ªRÃîè‚`s/ ¦|ëÍÃÎPÐÒ{¦ÂMÁÚâKÁúªôP¤©Ú¬y‚{Ra8µB {\Ïê‚›õóXVÌ׿ô¡ÀhÏ'r$SèS¸íÃÆtÞ“Y°oíüûù8RW~ ÷Knâ¨ÆØÔ¼NƒÒ•%Ì>@ãÙ½ÌáÞ÷g‰ïï¯v”ºGÃýáq¤%Ä$džGVt:å;²+>R:γ^U§ç‡Æ«oªèªiœïšÜ/AÃÁjÌsÕý6³:éü:‚<æšÏ¦aFgñtÇ#úÆOàx°•ÚØò‘L£]ð^ˆïJ ¼Åtp¨c®¯$ŽP/˜ÓGÜd:ð­ŽÇ0Ï&h¯IrJ¡‚ýi¹Ou¨þnP•"O80/Á‘jùÀü^ªR:¡§àÉuw.ªÊgk–th>D—MŒÍKë¨QlftØiåÙvÍN=Û'õnVù‰œä)®ëïxV·ÊÍÄ’Íg[š:Ôdìqû˜rMwuHüaÙª*󆈜gr]ÛSù@P9”kË"·drɦqð!00VL9ÒÔL.î!ªìêð1w­ŸmÒ¤c|pô™¤¶J¹êsöç{Çf ºp“SzVý> ³Pý@o×|P§M …¿ZóÜÕ·â³³ù´ªæôé]øÒ³ú¿ƒñX>ƒ[¦.Í×tÖéñAðaÅ%)åŽe؇h[Å9Œ¬SðVÒgùJ’s«”h­’ü·å˜;73ØÕ›ŸEß ýê;TE?ç¸:t¸¹N ”~ÖéóQìÍ‚ÉäìKEíŸ%…_NÎëq(žëx:¨¯$3°[ÊÙÎ˯ãÌ¢W9h÷·ôÿ³]ýôévdýo§fGªÁÈI”#ýóêa'Xଔ£˜Ë…Œã‚ðíB:<Ú àëù&¦ÓÅ“JP'6;ïB©e©ÀOcf¸XÍȱ"bm,É—º `,í’¿ßÀÜ+ ¾|ü8ƒÖöF`mÞ„©¾#ÝV†Q+#<>/Í‹0ÄãÄaŠQ¬·°6ªÿÑb{à4µn–k>.⤞mKë‡îÈ9ÕÊ-ëO¯M²¾9;`}®O‚ËÇ*W÷%JZmËéDž'{<>´’…¹î ß ‰.•¡øÒÊʦ#7ËIü½ IÀÃÙ3i9 YbLÿZ=¾ endstream endobj 67 0 obj << /Type /Page /Contents 68 0 R /Resources 66 0 R /MediaBox [0 0 612 792] /Parent 53 0 R >> endobj 66 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F109 37 0 R /F86 38 0 R /F107 41 0 R /F105 26 0 R /F106 42 0 R >> /ProcSet [ /PDF /Text ] >> endobj 71 0 obj << /Length 336 /Filter /FlateDecode >> stream xÚmQ=OÃ0Ýû+<Ú69ûlÇ+ÄÀ!Úô#RÕh+ñï¹³“4C‡ºw÷žß{9?4‹ûg¨’H&D³Ñ!YS¹(šV|Ƚúl^ -˜]Í4k’Ð`0a!u…äíLŠÙQÌH_ ä¯Ò.9¹UÚ¢ì.4YÓïP¦'*ûI)Òý XÉGS;Q•G¥ƒ•ït:ùšë·æ6˜:Âx‡”öd– Šq@îÿ À³oeƒ<àþNiK±0K¸„²UÈb­ç¹s9¸6°ÈÌéz†íi°¹ÞßMz(y-Ôs´Ó‡›eŽåoÈÍ–Û²ßZêÙÜçàd·uÛBìèªùò‡´N¡škze0Éû²Çãu /%yy9lu¦Œ[åÿíT»@ ;êLö°ôJQè€hªÚ <0¾xjÿØ?˜^ endstream endobj 70 0 obj << /Type /Page /Contents 71 0 R /Resources 69 0 R /MediaBox [0 0 612 792] /Parent 72 0 R >> endobj 69 0 obj << /Font << /F109 37 0 R /F52 5 0 R >> /ProcSet [ /PDF /Text ] >> endobj 75 0 obj << /Length 3447 /Filter /FlateDecode >> stream xÚ½ÉnÇõ®¯˜›‡€¦]{w%')²'Àˆ˜‹(=s“þ>o©µ»f¦[4t²—WÛÛ·~}úâû·¦_IÓiãÔêôjÕ«•ó²3ƒY^®þ³v'ïýú§¹ÞÂïü>Âï~Oï'7jÐëWpù)Ààë üÞÀïý‰eØ÷ ñB¹õïpwv"Ýú.¾àfýÏÏ×w8ì.PÐÓ;^çu€YhªK}ƒ×Ÿèo4©\ßžËáÍ.ŒùïéßWJwÃj#ûÎkŧã)ñX×ïÓù`Ð÷o­ZùÎ;å}žCùNÉsüHàc ¬§q“’~[ÂOÜ«±švÃ÷„R:ÝWÛ¿Ç‹€‘õy|sÉ“tGon jã`^‹°· htë븫‚^›KƇ¦»@+¹‡VqøîmÝÐbÒóÙ%®ySaR»“0Ö&¸z÷½Q"âã2=¼·ð{™p ÔéµW+£D§kãù S¯†¿ دÿÕ ê;Ó›8¦@ò)2ÁƘ¾´F·–7Å)6xÆÿvÛR*6Ow‹§-üsÐŒ«\‡i/ËóÂ\wŒg:Ï"‘ñŠ/"›áF>¼‹p@NGŒŸD—Ñ—‘¿¾äZ¼¿Àëâw]Mú‰ž!ºEçKâ#I˜¬‰,s†ÜSŠ2L<¬#Ïmïø>þ[>èUyâüø2¿áKÆ!]þR úévG|¾!C áA»zc‚bÑ|Î2…‰œÕ]áTw¸Â}ò3RB,IóHá Îî‡np6röYq 1z@×ibìÎø ÞkÍd;#Õª€úÌPƒ+€†ÎJWIÕÍ=u}ÞÒy{K PcK•ÔæäPîè2™wB(bŒÀ¸$ˆM&\öœÿHøKE„&†J&Ï“žÛ²åƒQHùÿEåÌÂsÏ —ADqAðR\xÇŠµv_fº 4a1Üú·HTbRÛÎ×¢ÕÒ,¸/”žž•™ˆ!B ô:[JÁ+}f|¸} ’zÏÏÆ¼+I£(Ywà×aôcÉ׎B€gh¾ž¿ðˆ«BU³¾£yAV.5S·YVÇt²8¯î¢‚¢ËÀ Ç4ò¡Ô;ŒBE”$ºÒznæ>½-löM´¿”zCX‰žÀxY^Y¸Yí¹$ȘN™õ)]ŸÕ7L¾d“ÁæÕ¤„9óå{_ƒGûõ<[VHç½)¥8ÕH]‚­ŒÎ~„U[ûzŠ€[qx÷Žý¸Ê' [åÇÈhÌù Û(êø* ‹®Œn¤-:O5²ðœuBO ´JöüzZ ®†!jêÏmM­œaMPökCSƒ‰Q~U=eêí+T/Õ!&¬ñ4Û2ãeRÎøì‰ÄuÇúQy1ެY`a7F»,élÉ’[yïÚî#3‚2§8êõ7ÕŒ8Ó×SØèN þ …ÁîûŠÀÛ¦)6B=‹Àm Í'pŸ ŒÏ"á¦oÒR…8o£,XÇD}ÇçhHíÄ{S9¤ Çv~—l©ñb½¹½ô·™þ5¤ÿqÌ6ü6iÜå{z (&TŽPà»íUàìbŽ4ì‚â7—BŸpZÐgƒè)J¿É[-Îy!D¾n‚‘]pBH9Ùy‰(/¨³ç€_‘5ÛXaè@øÿå(€Òƒàáó»ùñW ¬µ"ǧ8ÇS 8¢+—„pXŒ××E˜l#@Ú$ÍEç º‹G>;©çŒrOý1"lvò€C8ìTð\ DvЃɵÐ^­ÿú>óS¡+ÂÑ.¦B¤eáÃÅH:ÝK1Å*ÝCp)KXœ'‡Û4MX¦ðõ·u0†Ý0øþX¥X  š³K—VJQߘ&Á/Oµ1µÃ ÿ6Hi}:ŠFlŠF® Ÿñþ¢Î%0!b!˜:á’£Œoc´—5ßÕ+¦*Œ¹(¿‡|¼zŠI³í͌Ò4m‚òºtÐéeá Gý¸ ¯’œãÍÿ+c–÷-ZT úèŒC÷‡©…û¨µ/‘}JÆ*˜æì›\DþÎIFx}$ÇZСy¶} © z–P)A3ÊÔ&ÄP3-ÅåÍsÀykûÓR0QÌø0Jú—|{“·—”Ò¦aƒ úFed„¬š!Óµ_ztÅ—…yŽ^¦Píè 9..Ó8°,ü!8ãU¡#Ù7C ÔðrêF$ U¹™w$'´oOª½Lõªf˜ß”•Y¬õ¾FŽ^'1¬ý€ÈŠºO«h¢øz±!QE,¢8Ù¢–a<Öe™Ó2JÔfQÉ©Cû’ŸÇ$X o"ð^ßÔ¦–Ùø@Zç ¯›øL«(Kô¼Ä`ˆÿYÇ2dÔ–ªð¥_[]Á^ÍȘýV‰sƒÞ,Mz32>†m‚Ûœ`WÝúm%nfd\Í!%¯ke—"ÖÉA'D“Å]1wð&33E$„ oKÿÐØ†8fÊœg!qÀå$¹ÎZI“`¾%ÒúO!BµeÒYªÎ{‰\ç…Žº`¤â椋Áî¿K˜Š uî½°» ZsP‚Oçyá4a©`ÙI¥Ç‹2œ Nˆˆ\›û‹ðj> ÐmxõĶQ1$,Ûl¨°À¸1ëDAnøGv V‡äÆ7H5JðÁ}‹Tv>©LÇ6ãx¼¤‰*£d åvÊ'|g¢Ü”ÛcBš°Ú¢M@Sç•ûj)Jy/¸tÙú$훊aa›EÑš“ï4n.Ý`µÝœKts#º9Û ”ssÕ÷“©r„—Ü·´õ”yäI£=YjçÖöÆ’CT×j¶ŽÎB…‰± å´J” —‹)§õlÊiÕ¤œÎ.€®ƒ9¼?*qZÍ!ä(Õˆ£Ž²A€&YåBõ^Ô¤‰/vèÐ^·˜€w$úÕFÛκԦƒÐr-¹]çUt–bÎãYy—ºôê pù—üªyY¸´Sm!È,K[·½hëòbFÒe],S%6º.XÍUÉǺ˜Ø+@úT¸ ƒ§…KÛkUaÇãeÖ*åQÚºiH† ò[7‹ü4à<@iLÂTU|¨‘ÿ<âÝÛ"@¡©ê]î’êݨm–"pÌLñGÐÒÓ„Ûí}Ü…åN¨”æjxýËUo—I-é¡´þú¤5ª„ ½Œ½2œZ29˜žÎŽ0ÂÊñ¸ËHL[;”•hP%e=/R\Ôhm i”A¬AèlʰÞDgÛ}(Ü29÷{1AoëP]æÕ"µdr²C/ ¹ !å?Ê:úS#32Ý_M™ÃiÊÇaYƸë°â—FŒTDœ4ÁTzÑvÆ¥ºÛwPÐèÕiXššÆ|Ø`žÑ)äm'†”ö¹kw Yí—Ó=Y1jGÁ½V¹S¾ÎÕßÛºçŠMÙä3Û'™6b.­ëÝ0MT&š¨…yQ•‹ÿ*gõh8ÒCƒ Z„ö ž<¸ô¾ž¾ð¡Tîñ Ÿ¨4ÍÄì+¿¯¿Bú+ÊEb—íò>xè7‹qÚóºÎûo¨ëkøÙ¾“ )PåÏ7ÏÖ‹ãì !Èp2ûwéÛ‰‰àÊ®7Ã7ü`ý 3aýð@V%&š þXÇu½}´õzªuu!@ý¢æ*Ý[ÒõIà¾üúæ2›œ<ÿÈ"%¿˜êyMÍ(Ó€¯9º½=žçêÍñ<6$CX1I ÓXZæü÷véÍ.Âë€95—¤Ï°2’š¶ìžN5áZÇ ¥™~RgzÞç8hF2Gn“5ÝDS²~VS/1l³k­§€bþ¨¬ ‹@ËjNæšàÓ¤’ç84> endobj 73 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F109 37 0 R /F86 38 0 R /F156 76 0 R >> /ProcSet [ /PDF /Text ] >> endobj 79 0 obj << /Length 4774 /Filter /FlateDecode >> stream xÚÍ\YÜÆ~ׯ˜·ÌÀºê HÈH (Œ$’ì©x/kG’•_Ÿª>Èn²IwÆŽ¤å}VUW}U]Ýß¼yñõ·J¬\ã´Ð«7×+«°ÒN4LšÕ›ËÕÛõ«ÍV1±~ǘØl¹[ßoøú ÿÝÒ{¹¾Ø½~Øp¾¾Ã—ôawá‹(¾ÞãÃîJ܇VvO¡Ön³Ì7EE>l¶¾õåôúãFrlVêõÕ¼Œ5c ÿ㑾ÞÄæäÂqk¤ÐP¶à,¾À?&ñÄ“=öȦšßW»Î%>ú—9áè÷¿±øyÇ¢¡y½~Oßqƾë0¿Kê2Ök7lÔ”Ó‰<׉R¾Fd%="x™O$¢%À“Á9?ß«Vz ¡†Î‹Ïž5¬dÊõû@Cõ?R¹Àóu³ÙJÃÖßzæ‚’@Ùie‰:èI™0¡±•ëPøŒþxº®o#¿Q ~ o?m¶Î·’OöŒºÏ'„cÿú[Î\¶Ð¹ƒ†Î(Τ-‚ ÀHKET£¤Ã7à û1+4†iw«¬Ðïi vÍÂèI\v··áG'w~qÑ”‹˜fE¿‹}µ–2g¤>mÚr¹0QÁ’gO©1¯‡ü3K佺‹–Œ_¥‚éÆ8[JDP ^^š”BùÐßó(t¹Â옖„X&!zÛÚ—­Dðä+£`ß~©²Ùð†›Äæ³›u#¥lV›Ë–Tœ¯²R?‡RVçæ£±(2±·wBËZK¶aާBçõ!q0µ!’§°”ÈG„« 8ï„Jý*”LÏበW:õüšä º¿ÙŧWgDFÿ|þ|:»Ý]†ÇÝýÓîýÍþøËšõëûXûêÃ]¬þpþâÊcëÛ‡ ’Úw÷ïÃÛ»‡ýîáþe¡áNQ"{dÐnÿ» ô­±õþÃÇ+œ0"öź¾Xì —úíîýýÝÕý>üü¼ÛßIJ7W±äù®.ö»OW/Ãïë‡ááêç³»ÇÛôúuøssö)Ö»| Ñ:ß?Ñlš ù¥d´· ““eNÎ4NŠðù 6ö1è)ôw)öÂA´ø(ËÕ‰Ÿ".h•8½ËL®ð\ßa“wq¥£²/Û’ëŸÂº™©)` µOkºÕ#øy‰}¥6¼„a½¤†sÏ—5~z="¨ƒò¦žèãG"Ëy7R'IyîÛ~2ýÐC:0'Ð+ÎõEÇ)Õõ að_Âc©<ÁS;¨6à-,»ŠÐr*”hŠb÷©XIJ5Õ|=_ü}fIáî#KïB™ú© `QÐX.3 ñLð• ÉH°6ÓÜ‘ÆÚ¾©aŒW¤õiP¢ÅÅɲVeÆ1çÙ* ç®ÚgÛ@`•ÿÄÓ?F‘:“ª–KD¦Z_Âc l35YN_ª:A_*þä;ÉÖZ\å¾nTô˜CŒ—Ñdœš(I¾ UÛ‡ê œ)YaKŽPnú~H¾?wµü‡s?2ÙI»¯ —(°~œé÷Ù‘’(˜VÂß™èyEBÚs_©©+º×>küï˜boeÐË’q´`ð—ô¢Ï×€ÿ~ˆŸZ°ì ”Kø[_0 ãº[Ø£LB¾fˆ;ŠN$¤Ì%Ù¤ÉÁ$uiâ­ì&¨œ~&Qh°%$7¢ó°¬ Œ¬E,>Bó­°=õ6 $\"È7uË":ËR̈ž@âHÉð[?„ì¿Où‘øùp’Åè²[¿ñá÷C5P²ž¡ÏV ØÑ},Öù“Ü–LŒïlå6m%$¼ƒæþëÙ\ã(jZÃj‹ËÇšdv¶ÆÖÙ§ÁZëóŽqðãÇ&aƒ?ú€L3µ‚†sUÈRO7Ráȳb¯+cÆR¢]¤_Œ÷›üëךָü¡h•nWÙE}·A ;;ž­…Æhо7`2ÞËšMÚ6’‰ À8ÔŸGØ4a,>ë8îyó Zk.sbÔfG;8Œ† ¶0®–óqÚQëú½áŽ—³Ì_X.™ºDö+ÅO1u)”7ÂLýx×8w=770 ˆÓ°Uã*qØ”‘8´œèýu¢£huGHS0^öù݈Y媪—ᘥÔ_$­7ÇJôù3ÈÙqOPRI1ÆŠùÔZ§îµ&üºZ~dœ`ö’»FšSÎ~ùzê¯Dí³ÃUÇD}vŰ/)_r+Ìæû¾ýd0¥Ú…·°g“Šu>„ÏÀÐ.Ëœ0mŒ?Ë÷À—ƒh†aË’?ºò<Å7CœC»JVHBfÒë¢ÏÏ .þœXF%\ Ve.fÙüeøZa¾RA™AÃUg>Ô‚ôþ9±´Qù&@r>Ž´³µó4_:¯~{fÄã™Xb€l˜vÏ ÎzŸÆHèù4 ùÇȱ$š4ÎOðe£¹wL(„§Y©—Q±+¬|rø~Ähàô -맆W¥_ ´“²kªë+Ä!€-±ÆB;3ÔY¬Ë”¢‘ÇIANPº"%`hÝô‘p‚à ¶% èÁ$RbFlÌözýâ˜) ~×/½¸K[#¨L®MâÒ˜1¡óm¶®Ï›^BV¯rÑv r)â³æ¬/úo¦cBô–B6l*!d"ÄMÑ4*Ú¬\ÆŠðtêàøŽ®yÖŽè ],Í ›‘I|ŒOÓO ›§´µB¤²ënÐr_¥]æ6“mùò~àåj°C\1¥ƒ=E¾8Ò=Ö¸šÛÃÃ:F™ÄÜ|ÌA!&ÔЉš+i/;8*è€=JË$ö·t,ÐBÒ^õ0¤²Ìõ梱èÓû¿ºÞ¨“ð“LN˜l(µôZ~Ô¢X’zŽúPç{c[Vó²Ïyßû«Çû8ד!×þ5§Éåœ1åÁœÔ¦á  ®g’”SÌñÔõÙõ\OÍ}É­ø2*¢¤ïŠt.D(ƒð;)ur»‘˜mÄ…]ƒ^ýØü±™ÜqtÙU—ã2¹uˆ‰ÈÅGúZu”¥f±%ŠäØ·:” úð'W¢3HØ)”@D(ŽÓ¡Œ£³UÎîu5KØ´µt ŸU ffbRÈÆrý¼‰õ’‹Ñ60QNl|GH5BÚY©’è ,z¦T9@(,/N0Sò­œ²1ÊS­Ë#D¼¤ªŒi¼Õ™Ñ¯v[Tjá{,¢ 7uSëï7]j³¯s{»½ír µ*³ì”:…Ž6—ž*òûž<Ê+ig‰J׸@m)|#%'I›‚,R@²ÍOY„>^"ѹGô~œs^€¢%†H˜…,ÙŠ¨ëoÖå Œ@Óå†Ö RJœbv’9„?¶:»^þ¡äe*ÏPªÍÀÇ‘I–tªÔ„I@üé䔃¤íu)¦¶(¤V‘âÂl œäóÙŸBð V‚²~“â¬tn)¥v–•Ár–±DÔ@0°²á”Å|ªU©9Áê$“Uˆ–à9r;a4¼Þi}bB?ÿüi ãOsÒÛev"$kÆÓw•CÜyþÇMï¨ 0å)hÅy[‚hÐ۠ǘz¼²[‘Ÿl¡FÑ 5Æa|Ùð2?ò1’¹R3; žò sXÐz uÊ“UÒgx^<†FR/ìo(<ê¹f2]–•eé?æ‹öô¸ô:dCˆ 0îÒ òwÀ}ÈŠÛãbî­Õm¨j˜ãÙíä½Zai£G^Â= [R}ê²ÊˆÈ1tëÙú¢éx¹ì¥ŠK76ˆj‚q5"¡I˜Ó"骆ÉÓ@]¨¬Ð¨×…«]ÕÀ‡~s-]„®|ØwMŽ$€›T#`EÏ·Gª êÓ)ÊB¥Ãõ”â:§DÄr>N*¢oM‰«Û4‹LV)¯ŸÇ`$`»‹08±w—ï(GŸó·5Ô|ÈBî&‚ðe'!Û Ë6a= MM ü™Aü’@~ÝŒ„žé‡ò% Q™RtB‰È?­×ž.i¡I ‚ðv&6„FŽZ´€°Z‰™SšÂ–‡"wµ¦°¡xeÍäU&ŽËyOk=sN“ùKbC*#²>±4+Dð zgj‘„ Oå‚ÊYV ¿æ§/÷ìi°Z([˼h`Eg qž¨hÍ>©šo¡°ç6ž¯m ÄxŽ¡°•6vá}!ØF~÷FïB´pZ*Úć*;¦+zÉËÙ„åuxÜ‹NÖ¬ÒKŽ7´V<ÞÌdEü+„¨æbŠŽIͦÇûP­wóGw‘•«¦éXÙ^bÒcŒ›¹b$øýš¢I¢<·9wïYåj»ñîš4»ÌëÜ·L@µO´'¶S Ò´«øOˆÄäú_ø¿XÿÕ?ÿ­Â9ÚI†[FT@@ôOàñ½–çüduƯ¼ê`JóŽÁ!å%Ae?¸"¡Šz鯿 á4ïÝ20wÃMØáíuu5Hp¿GfC™pÖ¯ðñý€Ö/ST±»*ƒ~§«2pô±ÕYø“ÇÝÚ{^ŠH¥ÊKÒÔ«£Œ¹hl"ÒæF ÅÈ^¸òälÙo÷)T$ÌQ½ë´Ôo‹Ø…Oí¹2˜Ð[…ï7zøæÖ¹ !ìªLô©k­KŠ„ÙDÚ¥,eEÄ(¢ž± èTCŠõ€ÜèýNãàŽZ]t^˱;e4&l£:C?w»ÌÜ®Q„Áê·kHfça…Ò‡^¯1—]Ü}8`i.y}=ÉÜI4VËü=¥$ÿÓ§Ÿ~[è Ô+Ì%ä™H‰Ð‡zÂ3 °Ïe@€t\"ö奲O\á½|x½›eE¼'H[ëõ÷ÅÀUO ù²Ðªe„…«Ê`‚+Íp´¢HÚî4×Ëxœs·•‚¾7É[ï3¿uâ> endobj 77 0 obj << /Font << /F52 5 0 R /F109 37 0 R /F86 38 0 R /F159 80 0 R >> /ProcSet [ /PDF /Text ] >> endobj 83 0 obj << /Length 4772 /Filter /FlateDecode >> stream xÚÍ\[·‘~ׯ8o™ƒø0dñl$Øõ"‹`“Ýq€ÌhÆÎÄ#bI–µ—ÿ¾U¼“ÍîÓG3vò0RŸn6Y$ëòU±ªõòÅÏ>Wö óZÃáå— ãqi/o¼2GqÅðŽ'ïýÕ/ñòÿîñï+üûÿ^ߥ‹wÇ“”îêÇ“¡Å;üûK¼ùŸxIíÞµ¸z“~¼¢é-jûX/ÿrTÛ„ß¿½ùkÿBÿ»ôøs¼~HC‹Ç#¼ý§—ÿö³Ïqzžy†fÉ'ÐLè8Ç—Ç“ò8"Ä5¿Åixìæüê5þ¾SÇÇûÅAnð÷_ a2 û] 5ôòþ¨hÂ@7°ï[º+R•*˼储J0 © dýóñdäÕá¿põ›pý»ÉTÀ0¥}~çþmúuC|Jpß¼&)còk¯Ž'k¯¾Ÿt¬áŒÎí­”Á6>N2l|Ü›:G(›(¡KÜ­º.™¬Ò´]ú[ZD\ûq]Ó^†1¿àBÍ&%¬eʹ:«å|³¾Lû}a\ íí‡Jg¡·Þ`oŠ(Å.'é“^NQrboס7|SáKHö÷©çÜ kq[¼IË’×"Ê> ›_Ò¥–&¿ƒ=?|L]‡_oj¯êøO8<ûzE×iMEz_ãÀÔ§ 4ƒOôæmUå?Îûû†Ø|x5HÌÛaZã«:¯îB€"Q’d^ÐØw»vô˜¶†§=1IJ“WQsñ°é·ÔÕÝÑ\u­2”ÂK[ü¤¸*9G)vHJ¶„øè×qúàú郓A>VýN)ÎMc«:oÔ‹ßå}Éí³@Íú?'PôΪ@9…jÂí]€ÏhëEÏVDÂõQdÓ¤ù‘“g\Ä*ñ!³ôû0¹Ûx÷æX:* ¢â^Þõ+Ü-{–užMÜ’$´ ð1^¶ÚªðŽÁ= ; \1´Ž=‹]gÆÊÓ¦æùÕY”‚å4½Èâh™\j™ÉH,îE{Xáác|0S%"p¶Ö­®]*”óºV¯²® ÷ËÆIsµ0µËE1™ò9Ç{\˜T]õÒrÍßÒªU#þ&oVÚÿ¸­Î3Å'Úüá«F’=}—6ëu´C×U»‡ß³Á>ÎÌܸYãÔ&›‘vTTM*V5'"?³mHz¢•Yý‰hÓeÖPôò‡„¶~2L/ïÈÇQ8ÊÓÇx¹¡·ßG–ÙZT« VhõyÚ"í>ÃJ'&Ò“nÉŽ­ŸGpb®4èÁuü/ÙYH(k•–ð:ÃËôÞš^¤ %B¥µmZ•V½ÅÛrwö±2A˜@^U7Ùí“_Гæ±kûgö,㪼ëÚÆ J•ŽÚ&¥Á]aÊ«ØìëYWš)‡¦Õ ]zÆ‹†øù¬ÇœÊ næÔt`&Ôt㜔æ45ähÐDl|‘ÄÉTh{•e<--Þ[ÇZâì–´8l™Á¨Öi¸©Z§1î“2¤VÕ “…Ç–»v;p$ n/vÒSó»(¾h§ c£,¾/_¬ÒB­DÓïÇâ760–ºŸ*» ¿ g^‰^QìV€'iŠáµë55>[…ô0ø[øÒëÆPèüæÃýר}Œ·²8ã+º%}”uc:k.l½Äø¼Ó†©÷Jºka®¨–>ÙÍÀ Õ´5N¼hôJ5?dÁ‘ÈlÁEš{Xƒ‰¦îhAdõgê1„î¿êÔêm°4¡Í€ðu³Þ_…aqGy`dÅEÂ…"éø ÊªUžª*ßxyÝÄ) L¿/`™)ˆæTõ1;”6_Og_È«vm¤M¯»WñqÄÿ§ëó‘ ‘Ü¡P¨TïÅüëãÒòÛÊÔvà@ëçÒL6=äd=U•Ëi×É÷}w“0 ÚÎuɵË…ÿ_SƒÄ9² –|Ž7+Ž9·s)~7+‚ˆ*ßñï¸9/ˆØfÕeÀ”U—" $‘Dã'4fº1"œDðc|š•(^®(Cn+ƒ`«q²gT<¾½î1² ¢‡+Q†Ð¢Y=(TÂ2Jê" ÉSŒZÉÞ"SË?ãïߌxW”VàâÌ)N`êì cÔ CÄ$ C]@‡žö¤_trß‹M7ÛÈu9ʵ™ÉÅD¤Þ\¶ˆ„b2 ·8[@Iø¢M&o~"4’qŸ7€ Œtièz”VKN®ø!]qgzOەѾ%çî¸Ïá;|ÜÔ[Àm¸BÉkO©½ÿ.ßH–V/ÆùòX94úHUg§&‰Ë£d‚ê"¥4ÍIj¡Dp¥Ãý c¹JaDR3)t„6-×úòÌ’eì§ñÑʰ®Ý´Îs7ë‡à™ãj;Hâ…­lCùFUmÜjÝÄè„ÀÈ´}3~µÈÕçg•Þœ?¸žiï'‚€­šF_H°Ó(ÓП™¼ø——/þö‚Ä‹ÄǮࠤd€ äÕëü?ÜâCÔŽLzwøš¾>H“àíÃá÷/þãůèÀ^ÜlæÂ¡qé $óÜmª0gØœ›-C?¢d\:^9)7_òÖ[ß÷Ö"Ž×ÜAEÿJ]N¤5ýIB@¯Ä1ݦ‘}€ Ÿ_h±©‹ý¶l±Ä4Ö`‰39ñiÈAédoÒQ2-H¼æLÔ$þ÷©a^«Q"åY^˜ŠÄ \P9ùsQ^ âŠ3a^ÃáŒ]á~Ê›³ (lÉY†x%˜ Î_ˆ0Z(^¤e>”°Í¤N eã¡ÞvE-?›ʾBµ|"Ýd7¤V€ õÆæ>E‡w:ÌRÀ}§ ³[*Ìst%äA‘ #]* õx¹©Â°3«­¸`ÜØ§©°5D4(¡äáŒ½Ãæ§Hª'µªy,)ž&{ xmŸôy¦Ðü˜ Oí}Ü?蓾ÓÕѳÐm—ÅÅœ‡HÉÈË]•ÿ eUl¹¾ƒï©¯Wסé~û 9:61*М.gÖ*Ù[×±]H ñ:ÿ¼‰Ø+\/Î"UÑO¤¦’æÕÎu6øNöY»› õººÁö"ê=ꛎ5Êu â­áH4öÌY›á¾UÉè˜òcYúU|J–öLÒÈ2r=—óM¬†öfÜÛO5Ï'dcæ r2¸OÙ…¥.í6ÌÏb¡‚ð+í­Û«ôº"¨Ú·B:cíÕï+ˆh6„|lò±ažK%›°]Âq®é„óMX/ç§t¹ž DO÷nÁ»eà–ºh·yìû‡. â}kÖü`Öüù„R_â¬Ë×÷ÅYƒÅ&×[ž»jÑ7@ýÙÅÁòÑ„ªÙg Bß)X•è¦êrQE 7Ämb1ü>ä,Ö7S2Å—ínô9Jì=´BºïßÎщ a™çqÖἯîϦdãŸÅW§D¬m_½ìÚ_Ý Ø¶¬ ]kY o-« !Ô…eÅ.êœP¬•ÔdY$#ö?³¹Cðùh¿jÅ ô  þwÖ . ¹(M³fã))dìLEcÁ•YM“ ˆ]iÔ›ÌvT'Æ@íГ©Õ_€‘“•’³¦6üx²þêÿ¦®.£Ê#É´1Oö3*(ÐOŠjŸ ‚Gü‰ €:SèòJ!˜uçPx.X‡3ø›[°XÆ€XÆ:ypL 9‰@^^¡Þ9“’~I®V ÿ¤¹\wm…Ç¥ÖŸx2°œpz5¶½K^yòŸ(ŒlHnhrm8›~§`Óܽh¼ãy ÝHÝžíáñ\a´Ë°áÎí4l´áo3³´à¦ä…~Sç6µ€¸ }§dúåfHVv”æ—†d)–9óžþAB²[ªKPá3h£ž¤ºX\héÁ›ÕE.M§¹RÍ‚$òuN èdyRÕI™Ï)ɶ–Z…س¥œÔlYÊ Æm•râfH »ºRNú|)§( ½rM3.ëÕ> ô€¶VËRC]OË!åßÅé-“å¨ÁM]•WÇ®&©Œ÷¹2ÍøI1"Ô,h0®^ú3µz¥u»£yLŽÿ@»{¡uÍŠ= ÷A"²;ÜõfíÌqˆ>š55kÞÚÅ{ÕÂô8jˆ!¬ ¦ó9J‚Õo ¼kÍ.>űÓT’L[!šTt¨/°%nÝe{æ¶6;Wt9cÁ–µ‹Š†ÌfüEÞûT‰qD¿'ùu©øœŒ4ã²ô|j²¢–95MwvâÂEïP`wÍ,p¾2Z˜µ™û œÛ™Oe{Vþ¢H8r™!sA&ð0èHgQ¾¨ã ·Ñ¾ò7•}Ž_Ì ¬¢XÍ!¢ÏTDõëfåÐÑû6µ®ÚÄìÌûpffÔ¤~ÜÔúq#Ïi…ܺ–=È JS—ç#Joc7U]Z?#ý32 gÎ6>|^™0:LdAŸÂ›ëcU°=Â=— ÷ðþFNs„Þ@‰Úšÿ:×­,‡\וQOË´[ÖüÝÅlÎY ‡«t0c Ž¯áƒ€A½X·1ÛïŸ)+ñC ÉîÏATâ/bKŸsÓbÔÒ¤LbÅŒ š›èéŠIô†ŽH7µrßÚo¦&Iœ]%¬pÅ‚ÞO¾(2…±Í7Çqb,€µØ—e©;D!9Ððg8„¯eÿ¡‚wm RØñïÏ,JèdŒ­4cºT7¢J¥nÛGí‹ü†Ï&bÚM$lu¿d†ï´ñ@f¢±:—¹½AÄ©¤t3}Q¼›¨™–~߈¦‘Ï€0fnXÇ£C¼85«Ö?¾ö±–ò1rû¸{ç²Wñ•µìÕð~g‡†¾+Á”ŽáŸìRítcÐ=k*r¶R8MVr£ŠÚN™õ¢ëñhÓP¨€Ö[\:dˆˆîâ«Ô\麔<„ /ÁnïgœåQzÎs–£,ÌS3ÑsZg¼¦Xœiàƒ'$ª±CV@ #¯‡3”ž¬ä>|òÓ•¦Ø~˜Çí½òËÁ†è0Ú$ƒÀ_X\ìp#Ä‚*±´èc,=æÎ É äÍÖ|Aòœ¢{?îÁò˜iSGû)áu%ŽºZïE<É0]Ã!“³jÖÏÅva\”zF7Êíu£ÄºÕDü£Vi汞ÒlC€([gÅ}wÜ©‚¨© ~i뛀EST§T(ªS²9ßI 艒(ia¤†Óû÷É“j¾„Ö¾ªg%ã ê2A;mƒ}mTÅ)µR§dãȨ¡VâpËÌX[_Û¤êzëK»xsGŽ^ Ø›¨E **—ò³>ö™ÿþ“|ü endstream endobj 82 0 obj << /Type /Page /Contents 83 0 R /Resources 81 0 R /MediaBox [0 0 612 792] /Parent 72 0 R >> endobj 81 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F109 37 0 R /F86 38 0 R /F118 40 0 R /F1 39 0 R >> /ProcSet [ /PDF /Text ] >> endobj 86 0 obj << /Length 5029 /Filter /FlateDecode >> stream xÚíÙnÇñ]_±o!ï¤ïã!,$$†“ˤ(Y‘¦,R’äãSÕwõôìÎ’´£À~Xrw¦§§»î£«?}ô›/”Ýp>y­ÅæéËãÅĤÝ<½Ø|}bNùÉyºõÞŸ|_/᳃Ϸðù>W/Ò—ÛÓ­”îä§[.È[ø¼Šÿ_qÜÍ©æ'oÒçø#=…c¯ë×W§ÊÀ˜ðû÷é…oO9kŸ‹W¯O…ׇ‘×ðûeüú—pk6ì›§úͰU?y# î˜m¶BO\Çý>=Ý*oñíNÀŠ®.\Ö÷Ë4qy¹ãååðÌY€H¸Z“fy àñ°¤­`xÃÃ3ïÂáÁvÀ>qÞ¼<-‰Ö·{Ƙ Ü /ŽP¬û¸ÀEÇû€·è¸ ‹8þâ´^oQ´[¼*ðtÌËpC…}àoºŽ¸îÝû;¼Óé@Z·|€&DL$̈™´~Ïd¸ rxJg0o¥F€67ãuxøøò 0ìäC‹Ûå iøyqaž¼Ó÷uxÆ^¸O6¨Z¯4Ìq^›öõ!šH1ÌÒ¿5ÝSeÙW:ìÌ4/z_aô ¾~<ÍÄ”`…?.Ï*|q'-BLFH„K¦9+)è¬BÚ4™óÂEî˜+ü`PÜ \L“$X5xF |=)¬ÞáÍvE`',b×Ùù¦{ÁAØÞzÿ­Hù!/û9ýUÜKÞÃó('YF#A>æ—ÁíÝ·„„/ê´»,8 tž—™bLk샴ƫЄ¯W­ÐlÇ\E™ômÚóm¼Z %ryÏÙiC«ÜQZ…ß b•å`aåf³œÌ¶Íä"¯:¤ÙI¦õfµÍ’ŠÐX,¤CDW“W ´›8W_4BOIOvŒ¿ßtrý*mþ2ÞŽØ+wÞdêi%–2ói¡Ç$xâ×!zã<’j§ÂSq@ÕúL( ÷U2 xr•+g`P°Éi )ü¤µ €z•ù™¼•ǘÉx „=)Ÿàù¯¢Ö“å0uôÛ4W3ÆMÙÄ A/ÎçRGÚÉ;•rU×VGšIY“Wÿ¸LUï&å6r2ÜÔ‰øh&?1ã7ÛfèÙ†‰ƒÀàb2FµÐXÞ³6oàÅü¦¼±…¬˜,Ã(ë deƬZc3h5pÇ$œ#7X¿Q›- Ô%X€Œ·ÚPû ¹ ikâBQ¹—Md8á ?‰JóÕüs&ºÉœò6=W%Ù톜ëÀëlÞÌ$¥!P|=šJOŠóo?ÄQ‡–T„+ov“£™Ü¤e¡Ìóñ’8X÷ƒ%TN¹lWô&‰‰(³ÈkÝ;ämp5•óøûe’ßQ ˆ#"ŸNÂ+Xu[¡ˆ°ÝZ!;ƒg%Ê3`¾q@âqE#a$4pƒyY„ãE ³¬É.fˆD,ðY$À‰å‡ˆx€mi'éïHdéˆÂ´K6 cžÄ/×Il –±9"H=9€70¦×-S“e€YܦóL ;Ä©š´pQ*È Jýáé£ïqx”møF0/ _À™àöùÕ£¯¿a› ¸ VÀÞm>„¡W%`ŸøÜåæïþúè1zÑ(aQàà:Ë“Y ¶‚Ý+„¹£X!où¤¿BtõdðÕ[¿fN  ZáÅ™É4ƒ¿2 B ) &Øk@|3{,Z¸•ÅQ” ăa¼ºÍAª¼ËV&<·KVMõ¿{/¹¾c¥ÙÌÍ~x¼Šµël ¿Î\@´¨…Š¸ÉƒES{`¦VËù€Á7D6‹Ã‰z3dOi dŠÄçÁž’"Þ{’öö+\ã ÊvÑY¸IòE¿Ð zÇ&[t_ëU4äÛ-½àµ£ä)7$Œ]Ë{z™¼í¤iEUÁ`»Ð]‚Á>)[èwí4éÜz;RH…q¢X~ò}ö•£Ö¼ tæ&@ †oýÉVJœxFx¾¤xSe«HàH  œeK+1zŽU¥ÈV§Z„Äù]hEh‰Ž4™ÇFˆ¿Ì8{3B¬ÓÉÔ”LlÝiÊÑ YË_ß¾íÈ'E‡·Þs_¼ñÅ.¢$­(VP¢£•zѸÐ7-Ä µ áã&gåÝ”QÑ 5ˆ²¬¡™º£¶!ïSàR—õoÊñb='·ˆj{ÅÀ  ›¬Þ«íMð©²' sy˜K‚)Â÷Bg¢PÎaCa‹f§Â6PBi@„ŸÅçár0Í‹!Šs„߃Q†ÀÌR¹ÉA=®žk¨i$¿t’_ðÿïž§PÌ.­Q%‚•áÎÇôDYLàb,ž1¢#à}’È3ÎW¢'gÉOhâ*å¡~_G,osd­£½¯ “ýp”êì`N¹lÁ-TµÙ»»»hH%¿§=¸Ðj,–ƒm-÷#Ö‰æ¥UV7lðö­Rt5§„ýâ>¸j,»`“v~¿<ò B”Þhp°ý}ÄL¥9Njio˜É2¿"榤¤1·­°ja\ÈI*õ ÛÀ¹W÷Éc„jgÁ†ÌB+T1èžów)Td] Zïn©`JÖÛÊÒêcoHYìZƒ9æSxy•InK´§Òº‚ìÌi‚ëøPñCðó:o(¹U–š{1Iƒ³‰ýiHnÔ¬MÊ—¨`±…eÕaLbœ™æh\;ÉšlÕ›f/M4Ùå¹$›¥”J\ý<¦É„étÅM|®¤†Y7%¿Š%oc>qOq‘´®[Jë†N ©úyÏIíy¼HÆ”œeزà³GræÈ‚ž¢ëÒÍq]À%ŠÛ“œ`&L…Yø­;zΩ]i–D‘à_%&xš`DÊ.ïðGˆüfS;˜&e]☠02ëO¾Ìk&Žs38ÇÎQϽµùŽPC9,ôêt…>”®à!_aæ+F›¡_F&÷· ?™ïœÎGÇЗÍé¡TÖ íbðtŠCmlåºM-Š#ÅlŠÇH º(¼<<–â1ó¸×ѽ¼Œ?Îs*QïÏ-×ü«ÎÖ-~{賚ª‹öè#h|b ƒàê:†’ð~¼Ò±{Ár©”I‚Bz t×%ƒ_¶«‘‘Gû¹iî«V9$ըĔæùkr¡UZÚ¥]ÖÜ8 ´¥œ¦HR®|¨™ã¨½@|ĸãŒÔ%°1zvŒu±Br€½Ý»–K{óLS6±$¸Ä†ðèØ17ºÈ!2+ØThͧ¥a Å™•Í7mÀ1±›f¡æN¨=TV)Gr°L3(ÓÀ¼VœÊ´aºZôúÔ©F®¢{_ªÁ²Hd#»EçÜÉú*×ÀÅ5 ¯j˜ˆ0Ro¸+ˆÏ(Ž O‚—Øân‚aÏN[¤aÇ ­k6Œ‰Úކ—g²á<#L#ýÂûø€#p•_` ÔÇð5e YBÃ%4Œ©|{¼Ù1ßht9ÜGË‚nïS']ž ÒtÎ QÁâñL7rdËñxM¡µÞ#ž¤ F§c¾^ýÆøà~°ñ.¢ …pƒÏ6Ðâtn€8¢B€w Ša"%ñ01x„¸Ééž›fT„B³1”ŸŒ˜Né˱b^]Rù=¤%²Äê|·éA¤‹MØG¼%GòÉä“ȧ‘Ò[…MÖ´`Ç­Pml˜•jç6Ì:µa~µ¡jç6Má¾J6º²ÿ’hèãdá}EÓ½ŒŸƒ ?Zžê›­ï“‚É:qN;²‘ƒ?köT¢'©íŒHƇ٤)‰ujmIHN1ð³ÆæÖšÂGúÖùàÙH«x·—V5 @ܵjÀ¦¶j^j^hOþciOÁ@1o%KéNêsvHXíù‹ùû¿•¿‹<¿ú ðIÄÖÜÁAøÉEw÷BæÅl¯y›[evºUûûfn~_ ’[´’#ÅÏ•#»j(ë¾f‚j.%ÀßíŒdéRÌ)•ÌRËD£è¢Kç +M†gRn¬N’O_Ò´pk–ŽÄ‹ó¼^=&Lj8œÈQw‘JñöFݱl×ÊõÕ>+¹9Ž–(׬¦\ó):F?®.ù„Dû¡û!ÕOh‘½BH&*Ü–Žƒg?¹þ¸àãý̲Ë&Âïr0¯ð|—1”zu¼T4ƒÕÄ*ÄÆÛ þt›«£&Ç"ÚñÁÆY¤Ë®;ö•‰(yºUý¬¢%†ÒwÕE$Ø™H9Ìíö8n¯šŒ1o¸Xàë˜T^Ø; [ä.!@f+÷pü¥Wñ—Þ׌AêByTˆÛÜ€2Í*à°ˆ}•”è{ž»²ç™±­†8KêÙKuGé’w«};š|I>š¦×þŸ/´Zâ®?-¬›.aß|¤As´=&‹ó·E· 'Lû…½iÉÎkãâ_׋¨µ=þ˜Êãƒß%œ_QªÁÊeêAJB]Y*¹½›„íjB½«jBk ¡xÉAmÈÎÝ«xÉI`¹€+ÕºšP}DM¨®šÐkZ7„ÿ@Ëëc=u „¬Aæ'²ñ>“z–Î3 4ÓuüÚ«(^Ån4™ò”ulšóªéÛ˜' %åÛs|þÀÙq|âm±“\Àu7ò2Ï 9*‹Ö[²ÂuÆ;¬ä„[«äÂt©ßÅa»<Ÿ½ù¨YIýhq•;ì•‚›9I<ýiDb€ÀÿÌyG:3 °`~b÷«¦Æ©¤À©D8 ·*z5d²Ì:.ŸëûϰÁ…ò`ï4{ ¦*Ñ»bÍ“Bà\cP?¸d°¼+n\õ#Ÿ7•²Î÷¦Ý6_H¶ó_ÎC¼-õpÀN‡©ÜâI ±ñb£Å)ÁG6´É"7¥$šÔŒßf§k+=sŒëÇcìþ­l¨’Vv½ª¬& _Öýº”m†ÚÒÌs茉V[›%ÓsÓ¸k„ÙtÚ¤]9ÙÉWýö_§…GJÈN|4ò4_c•$ܱö¶›æûêíqEI«Š•èP·Õ¤:Q‰tå©ü9Û_2¾Öm3LјI¦D-µ†§ƒ¢¡7§mט¦ PBl¬ã䱋b¢J“EböùISÉ5,–†2nélù‘+!ìÎOÇýlsëЦw&oÊᆆðMZg‰˜p?¯A»ÙkI’²hÖuºe¼úžyïL®je)Y—aâp§RV[Ú2>lŸ4ìø†¥èµ?Ø¿ÇÅþ m‰¥¹03è›–û«¦*•‰«v¹{>Cjîðzå j²¥påw#:ÈMn™.29@¬:ÈÑ=S`ê?L¯,rÒvUÓ–õ-œH­8ßÓƒûQ‰zÒð^±ÊŒÔõùzKO‘¬eÒÚ¸{ðÐŒÂ-?âTð픞¼(ñ„Ãm ]\#tÑaÝŸ‘x“µ§[+ p躵æ G'»ÆËù?²p&o'­»˜P)±þ°À‚`Èç’ñí¹_o¯‰¯Gˆ¬Ëa“ÃUeÐÎ<Å3¶?p·àΑ“3)[åHÆHÇÞ,†´-ÆòŠÁó{À†8ù'ü•'ß¿9¾@¸B“„£Y_*Ñ žâGõ«×)qM„ú,€g—½Ò#Ê»»ÄáûP…º™5ro›WÐ[!é´Øæ5Ïå@›äzƒÃù¤ã€Õ½qbšÓÉÑu} }í»÷£g.f]^ƒa«úpô¼õ~ŽX½AÌjF#ÍìW.%¼Go¶Ú‡6½©âDzDõ endstream endobj 85 0 obj << /Type /Page /Contents 86 0 R /Resources 84 0 R /MediaBox [0 0 612 792] /Parent 72 0 R >> endobj 84 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F107 41 0 R /F109 37 0 R /F1 39 0 R /F118 40 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 89 0 obj << /Length 778 /Filter /FlateDecode >> stream xÚUËR[1 Ýç+¼«=Ók,¿®½,3eÁªf,’ðh†„¤¤Ð¡__Éûw€éb[²,{:Ÿœ9Í¢Œ^{6¿e­f>j©LËæ×삯E£ÀãßО?ŠÆáÊóƒ0ƒãkјàéD¼6düIÆ›¼ßã~',`Œ|s½#kòvh~+®æç'g ZJ5eÆI ©œÔßê™—±5|œ4XÒF[sOnÁês‚e§K£Û>\ïh¥¦>¸˜zÐãƒ~ôà}vdŒ£WTq);ƒð˜ [/…þD†1¦Ž/qÿ2…¨Cëñ`ŠÀ7tÖògÑÄ´/S tiIÿ6TéßDÝà ª«üe¢$/µóÕá³h¬Ò|M‰}"B:à«[<ÝöÕ@—Œ0gó’kYCAÓ¾T¨*L…5Æ´2€Cà±Þå,2,P7F»1Tø“Zß•h9«9]XUi‘±éí‰:p|È—)T²”„S±©1ÈŠÊêÚYÚ»Ëþ— ,•5û:Ÿýš‚ª0£•Äô!Hå[mgWŠ]£íœ¡%ö'yn‰HgÅ6ìÇìûì”ÆyÜN e-†Í¿ÉæhÜÑø4ÑgN¥‡È; Ì·­t^¿•ŸÖÒêp” 2ζ ¬Á|ºªÎý3Qüÿ äøE”kØ;c‹î€Á¼ ¦Pì¶×®Ôº=õöId-ËÂFä×Pf+µ:KZò/¦~3 »ªÊz~7MÞî΂xõ> endobj 87 0 obj << /Font << /F52 5 0 R /F107 41 0 R /F109 37 0 R /F86 38 0 R /F118 40 0 R >> /ProcSet [ /PDF /Text ] >> endobj 92 0 obj << /Length 3299 /Filter /FlateDecode >> stream xÚ­[Y“·~ׯØ7sªÄñàÀyŠãȥĮÒÃ&U©$¥pOÑâj™]îJë_ïn q†‡J+r8h>¾þýxþêû7rÁ·–¹ï+ú¼Ä±¯“ô¾¸Bm>á\6œÈ^LéL K&za@uªWšyU\7”ÅXo™ÊzãG×8´ŸÓ}'ÝÚ˜M“Õ‹[?)œÐM®CçÛ\¶ït«2…¯ði—4ToIyÏNš?¸6Ü«²oëÅ/ÔJ«˜@[§þédOÕÂþyGƒ šÏl g°~&KØ·Dyìße ÁÞx°3gí8ôf}™/}¯?uK9ÚÅ5üÏ)¿|Èìø;øƒ÷ ZÔ…B+üe[àè:`qΦÑGkôLž11I|‰ ~ñ½äº¯ Ýc£C6óÀlœù•—Ú’ÊÃNШ4ìö$˜›×Õ§>¯-3ÉŒ‹Œ šÅgÿ<«Ÿ`€/ßÞ§Š ½ä²×*Ä~b¨Ò |‰ÓP>¶JVN[iKvj<%‰f‚g±àYW/ï/VNGâ¿lx¢”½1*´³–#€“6 <:Úo@ÌØ… ÃS¸â36ϼ|0+lX˜ óâ[d;J(4˜7ý(~åÅßüÆ™yŒ¥¹2è¸çîÎ}‘˜]ÔÉS­`ë7×Ï1%‹ ÆÑ:jÞs®Ë­Ì@ч"n4bv‚à—#ý7BÕ̇+Dv×±Q¼Rk¤sÑEñ{q£ìÌôÃåëÉñFÁIa;÷â,òú(Ö)N×®N' ÊÊ6jhÉl®`ù^ú¢Å/IØVáâšþZfg!¡›·µyÆËÍs꓃K©ŒìäŸÝ˜…Zð75¨:¶ÇÙ¼€uz4£ O!]mv3IªøãiI5H´“*û!â¯üG0%”[nVniIOØâHwÉÒ*]E­0e+7“z˜ŒÖŠ«¼·Æ†0y»Ù®!-˜¸ÅL`¢g,V£ìÌÀà]laä@{‰?šÂÉÅ„GÝøA e¹‘ê¼ËÖxÔÙ Ž5@\ªq\¼¥ à–‘ö‰»LŒv)¬œ,0ß&|žX.ø’fµÙÐŒÔðKsaVèÌŸ6T ÃNÎÂ#¦Cq#gm@ƒSZ–Áæé¦SsûÏz#l¹ÿØy ðu;âÔVþÊmÄú°˜5€KßÀïÌe ÀhŠëŒx骛 L3 î@WLƒç‰%¤ñfËXì2«–ý¸´’ãS–W@È!nsíØ¢tVg·[X;?q¥a˜Ÿ©ØÂî’ÉÃË_#¾à‹]‚Û®³ß}›I^ñ"¢È‡$²¢ï²ìŠÛäT ”ö»MÁÆ•ï¸Ûɦ¡ °qÂÎ…]¦( ê: 1™©*)#«Âem!”€‘$´RB[(…ðm+T9FÈ-z!¾]Zï<Æú BØ%BcÊšzSM7æ‰o]íÚ:‚»±ªPá¹7Ù>þC¦ µTü£ÛÎÞ#™rÌ4|Ø5*÷H¹Þ©OXlêÄ‘–rSÙW#g7€ä%{n©Så|Ã~*j¦Ã…lž—ø\Ôm¾Šß÷na“Ë¡<îÛ"”³^˜H˜¹HâRM­É^±¼œrýr9:°É2è)ˆî6Z³Ê PjÊcáºè3dRžÌp&L Òlê°HœñJþUÞ8Êž+yãÍC'×׳)z¥rõŒ€ÒþBvFï¢)—UxÅ –æ ñƒÎƒr¡éq™3… 'K³šÒa°ÉýÀch:’çÇ7Ç»Õ cÆó$Óà4¢3’Ëöؘi…Y–¸†•™á§8!J˜ÒTÁÇ ª «/ॵ,š‰Òð™eçíºîâÛ\è…ÍSLç±òä#žmŒÓÈ1†«*†Ë`À„ü’cÒS<”) õQÑh¿w “k9I0êp‚‘”¿°©ŒS#­|ìòÌä:‘úЊ’ѲÊeªVÆTô)÷ •øŠ?a8aä"†°¬R%ù„£Ä±,öFg1ÞOë¢ ‰¹Hû¢d³ÎcE@œ¼®G±yÅ“ðV­ÅÍ>ŽDÈÜlüCÓλ7ëù<7Î~¢WMæŒ'pLOa<þzóƒî2Šnòœ—w~º ¡p '3½+O&YëX7L=ÿ-žw<–DÔô”˜ lΆRWéÒ®U‹ÔzÝH’§O̺—vÏÁIc2SSû‰„4>¬ümû²8%«XYh˜Ú?N‘/àõÍ Ín씕>P‚ù€à¨p<â“ÂYà—~t7©#3mÛËX ^ðc²Å²¬›!\›w¦DiJx7ÁdÓùâãÜ)?ã½µìÔSþšÖ7{`²?…,£Ê~.6A5ùÁöÞÃÊÏ9Õÿqše‰Oβqáû”·“#²oy`ª¿MHqT0‘ލö†ïE}>ád°ÅmN}î°qïæˆ(&y¯l„†ºCJrõåýí~¹oöØ^kY‘’ÌÖáÐéÎ! åû9ËÆâfˆ#jrÂàˆV÷àRÑk6úQ±%oéš÷L:k™RÌuÏeoÔ˜w¯[Ëî “E×m³ W.ù©7(j€%ëô‘ÅŠ;Ažñ.Àª‹×’|IݪýfäÓü(3FtŠ(¯ ÷ö,ÁßGµ’îÜí¢û™³aÔõ8²Ì†ó£Ê§íÕûÝý¦¡z(9¨8™bC¨‡ SëAÖhâÛØ´¶=ç֞ĤnÛ4GoyúkŒ:ë¿l!Àot1ÆLÐ Àƒ:5ê½%C‹¸ï:TÄ¡G™¦—ê/Y¡€o÷亢#+Ü‘ŽÓÏk|e'ÌtMˆb÷B)/í½$~ûp±ëYîÇ0geÌq8x tµð)ç·Nš‰’AÀÓi"ù¥Ë Û:w+™?qçšr(j}ɸmáYù× f\(¾HW˜*ÈÊ”èÓ½#!+`ö»ÎQ×qz( ¬ð¨§J”rˆW P° ‚¶iŒá »Øo!¹ìÒY 7~~YŽ€Í¹8Ì/Õh'9Ö‹¸ÈË#“n÷@»ÉY€»IÇ T¾®î+3–¤°ä¼ˆ U½­Ë6'} z¯2Í0s°H3sÛDÀ›~8èO I¥‹.ϳð¹åfî…Líqt-Áƒ¸ó$Ü.1Ð!¿ÌÊ-ŽÔºe}áó£H¯ŽâÚƒJ[Aâíí·h¿æ¹ ·G5?™®ÖytØ«ðFMN²¶Í"¿§•A”ù»Ã.¾y)nÆd*É«[fn[¬I +Xñââ ‹ôqµÖÓ(“X¤ÞðòFOÇ@Ey·²ŠÆ|åÚ(TFÙ?^ï¶ëçíÊ~/îZ´ýÈL™s3|M–kÒ5#c÷¸sl™¯låÌ!cãLðØ´à{ms¼‰¡„C39öÜŒ5¸¬ŒHÛIyèà €Ð?SÐ6qÉtXW!U7¦­í‘Ã$¼ÊîßÝuS²"ÅimÜ´CèŠ ¥¤/YÈH M\@'U{NQÛ`ô+aêÒÜ¥£†Ñék bl”öÆ´+6J®†ˆqNI]7)<6Œ¼0èP<]zÁùj޾ö׺ÀdY/,Ÿ¹ú„¨·Û—ä&;³Óƒh„¢š w‹˜¿¼âÕF·vToø”‘ûTsTÞ,E¼÷œ®fÇFI],pÏN©2²*ìhÜ(oFÎ;RýŸ3V”V«ô¶Ç\æjÎ)«vØBÎà\÷iê@]ð@µ¼úëù«?.F1a endstream endobj 91 0 obj << /Type /Page /Contents 92 0 R /Resources 90 0 R /MediaBox [0 0 612 792] /Parent 93 0 R >> endobj 90 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F156 76 0 R /F105 26 0 R /F109 37 0 R >> /ProcSet [ /PDF /Text ] >> endobj 97 0 obj << /Length 2722 /Filter /FlateDecode >> stream xÚZKsÛȾûWðHT…0æLnÙx½åd›Š.©$å¢HÊ¢MJ\‰²¬¿ÝÓ=/`HQ[.‹ ÐÓÓÓ¯àOWïÞìå̵ÎH3»º™ ¦uZÏŒ“m§ììj=ûïü·FÌšE?ßÀÅ¢YHÓÍ—pyÿ×ðµwó\ÞÃÿÇF‰ùÉö´ó§Fšù¿o‘b·]ÁßeÓÍöß\}C—ßá·Zf÷F ½'¸†ËºÄÇ·Èfƒßÿhé)lÀô[øè¼¸Äȉ›´Îù5|Æx øn¼\¸j»FiüÚuÚª*… +a×€?l™ØûÿWÿxÿQtýlå…Ê×¶¦·³Žô¾~ù|s|h`ÙòŽÈ S-´’­éÄl!Dëúž%ÃT6¢5vÈø_Ÿá¯†Ö8ˆÿÒ,”‚Žð`ÅÃØRÛ¨àÝK#:1o‰±¶3RzÉM×*kg Õ·½Ñ´m„5@/æ²Y8çæÉ”¸÷…,ТxJeæ_*‚w30B+X!³…Ê¢“E¶¥{-Dæ)ÈÈeaZ\>v0á53ôÂ×| bau+LŸÛ¿Ñ`Õñþ¡rN ‡T:PŸôX´•—ˆDþ²ý_×Io;æHgŽÂü’ò" ¬ä~Q/´UüÄ,“kp´‹ Nˆ~¼&3(ô(8'ØO¸V‚ó‘k:!Cºa¡l1ûÝ\">Ùî¶^‚  x–ñúåWoD¹6è±þîU³Ð®Ø#(j·Ãï.a݃?®Šg…%OœàÚ-oë£æ…Dž½Žˆ€]ÃA—E;‰ ÑpH½ûùêÓw31½hû™Vªí¬œ­öï~ðoíÆûO{1ûpÿî_ð/ÓÆ(9¥(ˆª¾“¥©Pö]jB¾aµ:¼ ÕmQÓøïe§0¿Ó\§âÔºWNŽÄ¡ÌO‰1Tö ìS•ßîH3Á½·:‚;gÏ$k™~b¥Dä¾ÖÉÕ7¹%é\D:/ýŽîeZª$©ijWÙ\‘G¹LôîOðÀ»—TvÖsVeÔ™ÅRƶN)’æåghÈËXP*èT‡ÚÈwJž’MËM©DQ q¤µä!ša? Ý>—ÁR„hþ(/çÿ¿jþ«¿þ­‚Rz±S7¯¨Fô$þÔ(3)YÉw@DŸrBÌá RŒÇ«jí9Æo§_Ê¡ξ¡_¶:V >þ±Áý²Þ®²tm§F0Î æx»Aón•-jMçF¸«¬¢Æê+JÌéG1¨‘óÌoz°þ›_yóKo~U7?” &M~’Ý©¬ó›^ØÐ2®ád¸äZ­l¡f|I'c¤èÀR‡šx0Ár¦õ°©%°o)À) ø² ŸbM¬ŸǸ$×£~AOÚŽÝÌ«Á^…jÉ¿õ%‡L{Ç­ò1Š/­sóÄÒ6“8öE?\jRsä`˜G °’1 hn‰–I©2Z5Y¦âÌäIž¨Ó¹ï…Šv„í#¹e9[ÓR¿ÉSqýsÃÈ«`²ç3$áS“Ç1ÓÝûåM_LÇNVMJ­¡>NOøFîE¬òÁÒwÕú·-<ÏÐpµÜ­žÇvïç¼»Z) x¢LL À^ÐF¹Ë‚˜k¬Ûž¢,>^´0­éNÉ hp#éÖOu‘z@»±DÝ[ /²‰ê.±‰œTœÃ¨¤µE%àÕ "Ö…’Ò¦ ÆcÑLÚÓ*õi5Œ”²º^>Ô;ãrø¢ÚåÎ.3 ªUÒÓs}ø7Üø™®CɃ×8 ¥GÔÇàL°·eœ2†mÐã+> vòùÝúq³½ÛÖR§¶­Tq~þµ†lmŸ»Öá4W,ƒ†¼ 4{ÓK¨ú^%´Û¤ËtÈ!í(ÄÑ6BÒÆB¼¡µÀ•û,E|Ëø(¦(~Oâx›sò\Ê¡+fÁ®ur4®ÇÎ…Uô)«kÝ"·újG¨tØ~÷µÓך¥\Ûݦúi€‘&ÿ±A«É•O—˜‡ÿ8äï.²ä!8åsƒ’: n\³W-½( ãû糺B‚_‹<6_6w÷O5oíQ6WBµ^(0˜LÙ”\6Pé̤&–Ú¥×'Ù„„\çÇHÀå.;ÝcÂø U×^ä‹íM8MÞ³$|—$Ìq £ef»é»*O˜—aKÑa|™ìCÇum?*9êDrBlÇ÷σ‹z‚§wáEÊ>ñ÷ô«TH×euK1¡-ßy½OôÆ33ÏøZ{ˆ“*+·GU½(Îó%õøÌÞpK&;Uèç†Ôš=÷TK'æ}Ê‘Wûη "ÈÐ%FrÂs²œ—LۙɈî‚8Öòò8öÄ1ÜŒlîK®MROè'Îc!ujPÛâéЧ„ti°'³0ÍMèQbO•‹[Ac!ùö†>Ërã2HÁbùBH©ÄP@]Si«M½Üºi u/0X‹˜º X;}!X3³4.V]–3Jd¢~W›y@3¸w]vøkÍ3ää2ß=á˜Jsrd“?˜¢¸)êŒ é\gû5Ç&Ì> endobj 94 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/factorcalls.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 98 0 R /BBox [0 0 309 160] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 99 0 R >>/Font << /R8 100 0 R>> >> /Length 101 0 R /Filter /FlateDecode >> stream xœ•TMoÛ0 ½ûWè¶õN”D}\ »ì²Î÷Àu”̅ݤ¶Óaûõ£lÇuZdYàƒò‰¢Þ{Ô³€B¦oú—MöéÞ‰]— QqÿuZ´»ì9Ãq=ýÊF|ÎîS ßfc œöÖqÁ9‘7ÙÇÍïõ¶(û}{—?f_òì{f x¼ø•YOi-Ð8 J‹&#c@‘á„ µ¨³¯( \ß^CM±£l°`C¸€zkæ}Æx°Ö3 -/5 åXí†}ÿK“CPž‚@ xêb¨^EÛt3Y—[A­ ÐMç¢ `e¤#Nç–E]Úª)êá\)”gЈ|3ç7Ç9ë$xk—Éò¡äEè´È¿ ™MÜŧý±¿û0^-_Á8áµ£ _ /½›ÕHw9¡‚gcÚk("v“ WPŠ 'y©Ö-ì‘böóÏþØÛt±zªú‘›‘™¹ÃûÜÌ[ݲØm|œ¥Fcè¥7¹6È›;]DÔ> endobj 99 0 obj << /Type /ExtGState /OPM 1 >> endobj 100 0 obj << /BaseFont /TXMTCF#2BBookman-Light /FontDescriptor 102 0 R /Type /Font /FirstChar 95 /LastChar 122 /Widths [ 500 0 580 620 520 620 520 320 540 660 300 300 0 300 940 660 560 620 0 440 520 380 680 520 0 0 540 480] /Encoding /WinAnsiEncoding /Subtype /Type1 >> endobj 101 0 obj 598 endobj 102 0 obj << /Type /FontDescriptor /FontName /TXMTCF#2BBookman-Light /FontBBox [ -109 -241 928 734] /Flags 32 /Ascent 734 /CapHeight 734 /Descent -241 /ItalicAngle 0 /StemV 139 /MissingWidth 500 /XHeight 563 /CharSet (/a/b/c/d/e/f/g/h/i/j/l/m/n/o/p/r/s/t/u/underscore/v/y/z) /FontFile3 103 0 R >> endobj 103 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2528 >> stream xœ–yTSWÇ_ò^-R%Í@¤¦ÚG=vq\ªÝd)" ÈŽ„°$ $ KX®(PA «†„„5ÅA£XÇ¥¶Ói{N­íÚN‹ÕŽÓê}øøc^RmÇÓqþ˜sÞÉyçæ÷~÷÷ýÜßr)ˆ÷„B¡øí ‹øÙ‚ 1܎Ľ²¢àÏ,ÁWy¢þþ¦…ŸUHLWå2àë|½õÏ¿™ ¨±[·¤³´CyL?<Æè¸´ïþ²MèÃÜm= ½±WÞSÝ­ê˜Ýd´1iv¾ñ€D¬RˆƒÅJUþœÆÆÚ:e-æ‡÷ü‚õìÔ|á…oÁKéBª²àÀ@–&0ž{u÷¶˜“ùwELøtÑéj£1RÙ;cãÌÎü`™^©;8‚q©D¤Ú96“3vð2`@ß¹kß}ÀvlÒ3 怸M~DÑÊ(ï÷vrÌ6ûé•};ìÁ6ª¾œÜ|›òÓ¼œ'õ«atõñTVÒÚ¬ðKbjž­ìDårÌ‚qãÐ)‘!›+©æ,Müî·L8W£~ ;j&rAèÉN-ɰ /úŒ¶R„S¹hª¼¬iGý#@Å(m2>*^#ø” ¿v[•6¾®zÄ*éG…Æb3o¤jüœ5}uÍèðöÏÑ xºáXƒ´3€^Ýa?ÜÚ½s³<ÔY§VÓà+‹ôÀY*Üï™g­–S ‘ÃG'꺫(*ê«HŸŸÕ8Yø+ÿÁ;ÛoA>)% Çà0ð­V5g)/áÞ ……]Nýúê¤Þu5˜ön²v@24ìÇúÌå'+ªª ²ÎÚž:uS8‰A .Töçóõ©]™àH–³+0š}¿”›ÍY)6”è3û‚›û|,N£ë#'')˜8âMKJIÌ–¦íË™¸úå{p]—»nj&ðu”¯æá²£²éljZ™¤þíZŒ‡šfT2ð2cqÐ…šÎ_IwV\"SâÙïÂupõúŒÈŒ²ÔDf²÷Ô¹Qýy€}þub9á¿{{h2K;ì.†a¢þò„:ò=XÏ5¶7·y j:G[IœyèdÝ1¥6¾½¸9°$¡4™“/ %P¶Uw•˜•meˆ%ŹÁŒc¨gÀÎì·éíŸÃ·ð?š\&ÃLÖOˆøè¥F„@V'”ó+²Ã4ýÓ çBzbDNIÀÖDÞ€Ë]“ÚQ¦qbÔt`Ó§xf3ÇG`(µX ¦~»t À̶ìWïa ¾4;‹•Y Â1bííçà 7¯]Ÿ&{˜„,ó׬\_¦ ;v?Ÿÿ<`ä²Ãùpߨ8”šH¼Ð¯0Möèû´ŒA“K3 @Ód­'®“r»>øjªçÈ„ßâô'Ã&SĉoÇcéÉÃiÝdÀÄŠõäÈ[«`1÷¿/¸l`ð»ÚÒ¥é°ôc´´(¸ÃŠÊ[2;ªtà ¿ÍFÓž þá Òœ‹[½YIĉ d›¥ãCÊI0œ§º‡ŒScæs` TͰ<윰ÍW8(8 Ò veòcA8H]­T½>ÂàÔæóÕC…#ìSq'"ÈW…®!ÖDz7“éL{¿äðpidêïñäÒÛÇÚz»õz‹MãgÀH‰6ƒl"ÅÍ ¬õƒ“_µÃœ“”{ó^÷ð4:ñÍc›â7·í¡wQ0ÒnèîQ«µG{Èö¨QjÊÕåê²=š :£=ß”‘-)8ÀÌ)<˜vbû·¢ž4†±:ø‚ ÚÚ/ú÷\~}Ü©þ0€v_Ó>¤³ÚÊŽ#èíÑY4Žj]ãÙf´ÃC}­Œ‚³¼éÔAµ»‹ìÈàpsW-ÖYw´±`†înÃñÒÞ">·ZZÆ”Ëk•²B¶FÒÊmAAP7îM0ïŸÉgÒî#Q¥<Þþ•€m(ž’a´Å7ßòŠ2VNgLvºôŠürèlþùÒ-s͉*-³Ìœ¯ŽèðxY‚o¦_³g®gÕæUI™•¥EU\€…sÆoÎ9¦¯1IOs‹‡é«±”ƒ\ 9(UðËâäÑäÁ ;F]#ÛŒŽùËÔß4Ar†ÇÈ&Íz\­o,ÿtÖå:AÖù9 7ŠIT<ÖP‚‹ ×(Ôæud‚H[¼k/æÏ<˜Œp™ÿ<\FPÈ\ÿùÁˆŽSªRÜÓQ÷pD?:õVTÜÂj­pû§á™ø¼zrÍ"û€Ùl·‹ú ™äD½sáÉ;|—ýѳAÖãÆï-ŒF‰´X©(¯- h“š*tжJ€•He¥'K.ÍL÷ØF™ãÃêAð1FÃ3þëÆÀJ¹KBÍô@ý}ùy VHX*±[‹ÖŠJjñ»ÿ¦‡Šdš¼¶ü4¥î'€6ˆ÷àOÐߟrôŽ“ÊœÆ$(7Hë”r™R%PÉÜŽ4^¾L?½5*­4.,Xt!Ï"À¾²Ý‰íÆU.úû+У|IW²ᑺ#ÕFÍ1•˜1؉ÒOŸwhǃÎ/ÜÉ$ŠÝ"JYõR÷j+*maµUÜ"ðFbãÊzï=xãÔ¯L‡Ët0\G]zóÉÑV_ß›­¾ËäßlÐ¢Š endstream endobj 95 0 obj << /Font << /F52 5 0 R /F105 26 0 R /F47 4 0 R >> /XObject << /Im1 94 0 R >> /ProcSet [ /PDF /Text ] >> endobj 106 0 obj << /Length 2799 /Filter /FlateDecode >> stream xÚåZYoÇ~篘ÇYÀÛîû@q ÉùX†°â’æZ+’Ö.) ÈOUß=Ó{È”Ÿò@îÝÕÕu|U]5/./¾~)ÍÀqJñáòf0|ÐŽ*Ìp¹~Í‚=’Åbéœ€Ë ü=Ýÿ}¼¹[=þ²øùòÛ¯_GœæÉÑaÉa*ósŸà_™»äf3œ½T›]ø}€·× ®Ç÷pÏÆ?I2¼ån|—Þ®q´ßÀý§°<£j°°¾¸>cŽØ ¬?½~ï÷n…9¤±_!i3~Ò·Èê.¸»Âµïñð>¾¢”/jÖâö~* º÷0–ðð]µ9æ4Wð·Åq¦ ¾Zá(ÜÝf»ÙûMúý¢ünú‹<´2öÏüZÛ£p¢Ë3Ï{±Š·k”ʰdJÃ9\xËÉ\nw=Qƒž¹ÎÒûeûðzs·í>½~|X¯ö×yJ,Zœ²÷Lƒ¶í|ð¬Ù(Ü¿‰ììPª`6 ¬Ô3oœÞ qBÚ— Má© çg"IÇ_ðïÑoœ 2]Ì žVØöS 3WY%qoJ…ì©>[Ñ~s»…bÑØHXD¿xŠ,Æá,`¹h‘)oÜ©xoaJÑ0Håâo—¿]05Ø œ T ¥ \Wï.~ú™kx÷í@‰pvøàG¾À!¬„«íðãÅ¿.^ ^0êj—ARH¡ï8¤½Jöá€G•P "]4(ïý¨ƒ¹e8"åP }‡û|DL’FÑ\ãõÇ 8í%˜µBj f*÷õB"A‘…î§¿òV$„ä`­ 4$5ÿþ0ĵ†''|FÄ­ }xU#[ÛMÆ:ñŠ*Ú3©ˆÒ.ùËöñf¡èHÑ^ïï·)JJ˜NÃ*CC4dÒ$ðC™÷cXÐÈ4ë¯ 0>þþ‹ñ;ýCg!®‰™±™Åz¹pÖâPeíIŸ+@ #T…õ •W9†úJãLGLýº­Ô†¥ä,DF ÑÉP2|\,•‹ñ-n aèž„c‘⢿iŒ‚ñÞÛ1ËìíÇã£ÉñJ°°l‚´»4PFŒ5ƒ†À àù,hRV!)A¨µG <Ú 2 ëa‚L`C5èÏ…Vœex‘É”Å,‘vD3“Î$ëS¢àlËjèæ©æ'™×À¼«™G+ŽˆÄŠ¡”<ÀèÙòï Áj"ì¡­†¡I÷¨ìŒqæê•†þˆz=){Žzùe#¡MW½Æuµ ù)ä Êñ =[ õVSÄ1×[mbð¾YïûO 2a^#(q#é)„ÑY¨8Kyd±4‚?.JÌHV]*tb àµÆ™Þ«oü[Å*œÜᘒPÏaS:eôgâºü@¤9™¡ë°˜ 3¬®gXÂhη_q-{yà´(Jd#íø)È^€ÙL<•÷´YŒk=µÆCÃLÂP”e¸qÄñÀsŽG&¤Q œÀ:òa/iiþ8©¹¥Tf-28Íe¤Ùñ¬²!DßÊz„·î­G²X{ +À%ÏÊ pàQÙ+‹¶t¡¯ÚNt”ýl‹þ¾ÇÓçåÖ~ Zñ7:K…P,A\ñ”vŸ¹‹'˜›rŽm¬ ž0«”iW¹p-¿Ù÷*iWæ]YíPPÑÓ~:ßD@h8úðIð< •ÓgÂN§¢f%±:˜>ö[„µñô ½VóÚj>x7E¡0“»wpé²BÞc(9bnÎúë¶s¨Ï2¾H½mBÂî79Ò{ŒãË èpÖ4Âggéqƨ9&Ÿ¥.H"‰á“öÅÇ~EUº“å[ÀÎëzªw g*É™¢$7iï:{–’\GI0µU’büwn°ÆÚÎSñ‚%©›ª?z5nÖ‰žiÀÙº¯8ñfÞÜÙúuNØÙðí‚5åßít%“Ûþíì6°?)AŸeçýf{aŽj©ð‹÷ëT¯Bì-]Ù6±­¢¼¿yÅáTÇü9{ͤ_äŸIâ¤l{öy–ÎÙ³4Špn½«¥Ú>(±ïá÷&<ßÄùq3:¸ÉUt?,ómCJn,Ž*a)ÁˆâÁQÓüà H:rÒhÿÐÄ’xTY„NrÎ%HàfÇ?ŸUÑ0ò"ª$Ç6-ffl&±ç¦Úƒƒ_11MÝ”›79û,;^LœM›ëîX}5œXܼê[ž粎¯›e’ßûáBW ˜uØx4¾9>RÉÍp7ÒkQVÓr ¸ÙQ™êÌ]•š}‹Qí—1Ù8ü‹ŒpqJLJÐsÿTOe9ÕM¿ÉdU“ñWçÜ÷õY´öùßb9K¬¬?ÅZ?^ßÝ­úyêš¶S’ò>Kî?^a-ü|_þugåw6)-¤Ýâó>‚b„ó|ÜÉ)Áì› ]áá>\&“UúD¡C…ÏØ6ÿN.Àö…r=ï»NNÍԗ3úæ\ë:­XQ¬Â·ßµ7‘@Æ å!7QÃoÀ ÙäÀZ"–)6ƒ›8?7Ó—ÑTœ#LMíSà@äÚ‰œ|¶!ý7F[ócü´ã> ¯?1ÜVD(ÀèeÙ \ìHÿÉYYÏHxŸŒ¨÷Œ`=¾Ù¿Ç‹Õ]ÏaáZ¾²Œ®(³ÝqÄ^Üwµ†»:_kV«<áðák¡¢÷íâaáר׏`øFo-Õ—ŠWÑÓÊáj7«L¿\Ìñ»Õq•ŽÚÅEO‰VLö˜îÀõ±ÏGDtÑ€0µ!ÖDDDÄ”© ñ?í’ endstream endobj 105 0 obj << /Type /Page /Contents 106 0 R /Resources 104 0 R /MediaBox [0 0 612 792] /Parent 93 0 R >> endobj 104 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F105 26 0 R /F109 37 0 R /F107 41 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 109 0 obj << /Length 4133 /Filter /FlateDecode >> stream xÚå\Y·~ׯ˜·ÌÀºy“òÙ1 #qœX@X†±ÚË+Ïj×Ú]Ë üãSÅ›lö±òJ’Ù=ÝÕd±Ž¯²÷ñÓGŸ})ô† Â…b›§gÍ6ÊR"ŒØ<=Ù|·5»½µvûç݇wðïü;ÚQån¼Ùí97ÛÏáòÇPÛSG(éö'¸¸ñxûrÇéöÄÿþ›`{áîÓí-ü; ׉öxÇq´ïŸ~õÙ—’m,±Š)ärØì™õ ~ã¸ÙS CíÙ°½ `#ÃX~Z#àÀß]I"ò:&DÇ;«c£ÕÑí§»½†íõïdDnÏ‚ ŽüÀ œç(¡ÃÅmäƒ/òA뉸4,†{1_á%§/ññ¹çë Îüåí.Íä~?¯X»Aµ "(%VJ¯Œã¤½=§Æ½qê/a>éXþG¼óÃ*‹GÝÃOë'v<*`ˆSOîn5?zIyë +,F ¢ƒÜ0!ÅÑ„¨ád(¬Àq~ò懣ãããêX›€·ÀÜåý”§Y®"ñU úâ ™ ²xÑÜìÞ€¯ÃxÞXeAzx³£`$­D«a¥°’=£Šh®Akp“s¿¢/@zlûoø/ßþÕ]Ó‘SDˆ$…À4L7i`Þ÷gI[ð»5$¸9Tf+ýòÜð¯pán’h·Ì:ß ƒ/{¯¤Ó^†pLºë°.˜ò¹sÚ8x9;6“Yeyã„¿LzWžÈ¥-ÖÉ -J\I° 7yà% Žˆˆ¶”(Áj7 N*îätñ‹“ŽgéÆß|è"š§D¥&VÀXŒ{)Ð& q>çÔ†OK5âïVhr{ 2zì4'8Ya&2ŠôÖ‹IÊYà LGÃð#ÖÀY¬kÚŠÅul ÎtßÁµekŒêeV${Âk\çk¯Ëà&O‡¶DgyòüÊý"¼O«íw»>‚ã`×8ѵé¹Oà÷Ï@0 È`Ôª}RÌVa ©[mà=oéåk÷„Þ«~"‚›çM0Šb¹ÌAîQpØQÍ.÷z #‚vF‚O™Å`+fwLÆ=AÍáÿ×FœÓ1wp¹Š¶QéPË£à"rp™¶òI–S0¨C W‚(Ë‹xrwúòåQü¥ ƒMÁò¶ž<{’¨cs0C4¤“#‡*`+DÈ1ƨšBÊxy‡›Äüñ˜÷É’ÜÛ2q׿"7»:Þ8õ‹Àhp„ÐWÅ“®ö i·BÔ‘|.‹‘œH&£ ïÀ(»ÎðY~†>Û ð£ãÛ«W½$I‘Urö †Ñ UçH=Ê ðf¡,|'@Ì©Þ#|¨.Ü^mÇŸ7¨€ê™†¼áìI55ºÀÏ «mR¨H DSY»À¿v…yB2 dmKø{, H+2¶'šÓT=¹[Ó"—dåø³ئ Ó9V•ÃôX]F'i–ªËGþEf/€•N†{þjäWW—Ïö‘W‡òd77«¦ŒXjâPÓ"¨NQ=‚C¾–ãÀÁ) '9i™ÇïêÆŽý€SÖ¨GÖèÈ/Ëj¡\ŽªW–xñÊßÌp„ãÝ5¯”f”æð¢éP½ñ?ƒþR‘¯¢å²æMð¯ƒqÔ?šˆIA€ÁÖ/‹VÂm°.ïˆd2?Ò—±––ÜdÏ M‰’IÅ[¸œ·u$ê'øÄÅüfK† sy±(ò5SC#RŽÀ ]ùËPRâåŠê,CAH+éZQ°‡E@Æ ‘Â30ù§q¾Ôuœí|îu[¦cÀè9tÚ …Š|Ï¥§"Þ¨ˆeF!¤(3CÇi)‘58+íu`ðÛ”=¦$âU®ÕJ?J¼]ù7c³!ܽ8HU4ÝŠ5¼ð¦—m~h(* ÑyµÆE«Æ íó]Q –f¸çC ò,W²9zåßOº|«T_„ |=e9„àž‹nŘvÖ·¢$A,fã¶ÃDlYТü³U¥‡Ô¡”sÿjttw^]„‘ëÊÌ.ºšs(¦-1J´m¹É¸ÅlYúºß7eŒpuý³a`e)D)‡cv¬,o÷ðxîH‚bÝõe«}¼â¼Ó>:~ø*_vì¶ßýn½Ì/j…—Å—s_-bhòóÐíÐgÿ>æ¢ë8F]´[Ìaïhàã YSd?—»ämÚLÅô «qD±ªp©édŸ:ŒÐ*]s|¿ 7¥BºåÄÕÎñD{§‚e­W²Ö÷‚em*oÃ×S'à*·kZDÖ: ²»¬0o¬Ä`/,ËRdpܸÀÁ¹×\VÞG5/šào /UÔ˜ûUŠLÖ ~rçœÉQ5ò.5³ñUÒÕ÷²ôçÀ§XxøÁz‹ [¡ez驯(ÃÖ¢ ]ɶÓ•},©U{aÖ“M9 zÖ•Z%îëôçFX^@¹,‘£oÓ²bEÕÊ\кêñN(}R9NƒcŽû`Ò.ö}í:n‚:Ä6Pz<‰“ŽZ*Ôªx§rìW‡RfrÿÌ'"ǧã¢%…\Uõ¶ /ÑÀTûV¬§^¤˜ë„0WHJ›m*DÖ¼%ƒOŸ rÈ~âÔeدõ+Ça&¯ÇkOs"„ª½ø.oèÆäìZ¤¬Í±ß´N£d ½£~ <‹{”VNº¼äG­‰.S ñPW'þ…ÂÖJ¿ÄGôÁïñ®Ü|[*Èî!…а”Uå(‹b{„ ²n œ‚ÚŒÁÐ;®òÈÁNãt†8:Œ!nX›H öȼWÊl¿-¸p¼"T„ýL”8<ËÃçîÈ|cÏ=îìŠà8Oüÿ®vacòÅŽ5nŸÆ1Ÿµ¦yR.Ú‘új§£‹ÒœæÀ)½ˆÈ–Íž2°¢"1°|ùˆÐxÛ-bG6ظ¯˜»–H8W—µPRæ0Ü/EÁŽk:‹l¤&^¦ :.Ö}ƒÃgk˽˜,EYÎgé³õ{ÝéâÔ¬ð"|i¼×±6»¤÷Ë.£Œ å=‚ˆ¼1S”»÷bu›vŒýÖÖ˱f·a…óQšSÓÛ¼Ž™Z£˜fþéxìiÃï5øÖIáàÍuø¦\“ÂQ^îLRgò!WÍQ}ÍÛª?ê²/›Y®lv”3‚UßV{žO‚Á½ÔfO@ ªó#ÕS+šoz:Y§á^† ŸÛ$¼‡jªàç˜äSÉÔownÞ—Mw ò}”¼Wvp6»óΙ\‘àQ¿ÇÑ/ÒŸ-÷7„$bH-°Ç`J¨»D©ˆÕÜ„íFÌï8QTEâqFlӰЂêO½i ‘6mÐ<ï#ÒfⳊþ(Ü$¢¯ArÜLð. Õ¦äýëΜŠ0Ë+Þ‰·þÏs[ª~ê©A’|8îyo ¬ÑÍ yp C¹Z¼%9íh‡iØ&Ó Èu›º0ªÉ-ÝÞžÞÞ˜H~èn!"ki/ûêÐÝÄâ/qÿ€xCZøu¿³Ì(1Y:ˆŒÄ§4OÑ }45mû­ xsøAW4gM|ðö6æ=¹Øä <‹#M±Ø± n ×Í’0¥ZÓ(‹Ú²ÎmeCÖùœ0±Nrí¿'Œ„R9'…•{t;Åå„s³‹Á÷¤,½ËdSîGÿQ[9 QÕzí0=c‚÷&… §Þ`4 ÷#1ü®!ƒ­ ñ ÃC< ÅvÛ›r`o{‚’M$ød*¹`Äè$6E›nÖy‘”‰®›1\(›Ïat\BfµŸ‡¨c¼ú~1—\Æx<^:Šñ‘h:Æ#E}¨–MÇøxw9ëì8,CÊ›îê¢s÷1…™%ߤ«œ“®uNûÞâù²sf ˜tNKùCÄóQÿæƒ âF‚äeâ÷5ªŽóbœÓΫÝiÕ}A5G51Tvq§^ê\©uÖÌV„Fö€‘ñw:[á{ìÝõBécÈO‡¸Ø­¿å|ý-Ùò×Y8ÄD„d|*BJC²¡:¦¥ Íâ+ìª Ž4§·¿vFÒo`K£€°¥Èçƒ{­¥…–öt ÌKmCÁhËW¿î̬ÿ"D+QÒÕÍ-DáÝQ8n<ˆ~W¨± [ÕBñ#(Ãu#°”C´=%¬yÑw|°«‚èS“²mõ\O) vNÆ6ù 㲚0 à/“5_ }t®}}†{®§G½± αѿqyPR1¨Ô>騇aþ z&ÜÿÒo]{ dËû‚ì~ªç$ø­dè1ÿ­·ƒV3úÚPèò0P¯Ò¥²ê°\IŒäµåN¡‚f (Ôói2(ºÂpSN÷ jÍNÚ'Ø0üƒ¬É>Ô{—Šç'äàÎOàn>¯ÐC;`|”ÚñžƒGÿÁäJ O÷ö&iÂû ¯˜´®áoý·1».v¿Ìì÷’H»£ÝOu©ÿH8{tëat|‚ŸÏœà_Ïc¬"d<ÓPîðÙ¼)gËì¾<²Wn¤x¢vo;Î\}=åîæ²vb! çîê/öRM{›Ë™xÜ£ÿ­ÕâÔ⧆ý¯«”~¯ä‡ ‘šðTb\Ü”_¤õö —oqoåÑ™]͇`n!(tòŸSFªÿ½™ÈôÆÓ|Ï´r«ƒ "™þÈ_ARÀsçjÏä0Ú|AÀ"ÀQaòÁŠó0w)5€ó#ƒLåcÝêÄbSD 3[S 5›0@*à>¯Éac¦—\PÝ£ùóè/OýüaØP0RNŒ²Ê Î_>úîûas¿ ±ðµ#½Äí'3 û‡Í·þñè1þÁ’fƒJk¢ í¥ÌHð,ãI¡dÒ::t3“Z¢”hæ¬ã1”83DÅ¿”r9V&hQR†u)§Y™¼ÛÚàœ¹3…Ú}úгO Êû ±i¨!§mr4µ:ýqç~Ë¿9>:ôþ´ ãPÅ©ª‰…vü’” Šlî*¸îQ‚NëÙå£_ÌL0¡Ѹ¬Y@Mn¯æ\J·­5íQ0”tCU§±zŽbrbâl¢t¡Ù(ÃN‡åNÁL³1D„ÍFÞ쟩ÄXLj˜y«¿`€ïy%ž‡ Ï*0Qµchügj˜¹O;†óÁwŒY·cÌrǘ™¶ãóòÿzNï4jÙ¢© Ë"nŠUîÈï0+Há@s֠·ÀKõ2•rª^®’%X-ÿ ›¦ ic΋³c½ž¥"4}¿DÓ0Ì–"]®–øLWO¢ã›iU4|U™-n°0UC 0Ä»±UÕO: S-Ñí£H5þ/ìY?@Ϙ¹æADú¸5äÍ©)éšÓóžáÑ¡7{ֆߩÊè§ÿbV0 endstream endobj 108 0 obj << /Type /Page /Contents 109 0 R /Resources 107 0 R /MediaBox [0 0 612 792] /Parent 93 0 R >> endobj 107 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F105 26 0 R /F109 37 0 R /F118 40 0 R /F86 38 0 R /F1 39 0 R >> /ProcSet [ /PDF /Text ] >> endobj 112 0 obj << /Length 510 /Filter /FlateDecode >> stream xÚ½”=oÛ@ †wý Ž' b޼/Þ%@3d+ª- ò‹ vÜVŠüûR_¶Õ(m‡"ƒ[¯ž—|É»«º¸¸ säõCÌŒÖ%¨¸5mY9Ó–dÖú¬ôÙ•dͦähšáåVÿüQVÑJ"³/ï뛋k²D¹Ñõ\‹¬v 6/χ¢Ù\Úçá“Y%Áaô2}Ñù¶KàÊ't'L6MøYÌ>M¼‡%–Ç,<)ú0Yü$Â%ŒCNG£f[j“›Õ‹#u—F°^EÙ<öÉè /Cö³ù2:Ÿ'1[ßUhƒ¨w–y’t8¡N*XCS¸W~:ÉçDÔŸc/'ú$Í\I3­}sÎÌ.¨ÌÁk•¦ÑeNne¨z4ÔiŠuñ½ -Â'DbŒ(L°Þ·÷}yê–~öÒ=°âB7Ì|.>WݦϋÒ!að¤0qÌëÛ‚§h“)÷2áü'ÏŒ*úÍr–gÇâ$CB›hðÜ¿ž¤Ž$:âã$Ý éò;§˜Í> endobj 110 0 obj << /Font << /F52 5 0 R /F105 26 0 R /F1 39 0 R /F118 40 0 R /F109 37 0 R >> /ProcSet [ /PDF /Text ] >> endobj 115 0 obj << /Length 2759 /Filter /FlateDecode >> stream xÚÝZYo¹~÷¯˜·ônºy“ÀæÁ‹ƒA°ˆõ²ˆìX‡wÙ4’`|ªŠG“=œîI› y©»I‹_,òû³¯Þ(»âŠIeÄêìjeÅÊxΔS«³‹Õß;¿î½÷ÝÛ5ïÎá·ß5ü¶ðû´–¦û°þÇÙŸ_½Ñbe™·Gʯzá‰Ö½ÝOðWv¡çó ϼ Ãç«!Œ¹úw织Ï8áÅZòîrmºÝº—Êv÷ðñ—µ0ðÞwÀÑ-=@Ã{v½ÅŽßBŸ+x¼Y+"ïy†/á}C«âÝE")°YÒ’‡îZ>RjÝ•l×½p,"BÍHöªÍjbûn ½…êòð0tsˆ|ü1Œ)Ñ–Ôˆ©Kœ¹bë^9ÑÁ?³ÁÒw‰OÀ!³°äe{ƒÃ?¡@J†³ê9g^ë~„:™§"$ ,œ©–…ïÄúäç2À/‘eß©ùW™æ‹ðµ ¾Ï šæˆNw…Rà0a}¿ÎÊ©’ ƒ3¿ÙàôÛ–Àd1`·8‡Bìö†Ô*ŽRnÁ˜Çùn×|"¬Ë¸ŒDQׂAi¢p†Z.I¶ae’B£‚F ¡*ó®Æ ;Vj~7èáP¾sø ðƒOÝQ #‘‡¸¨"¹- þ^JÐF4¹ˆÂ=M³ Xaˆ8>F]£Y£VÝѼ Î ¼¶ha&À¿\÷zP‘:>ĺP¾†p’(Ió ë ì<€-r ªBT}²)ìPy(^ãƒïç„é¨>ISÀƒ{¥€#ðÂRŽÀH4—.|áq¹c\»äqÿÖðÉ<ù`S÷Ñt¬'“¶.ŒÐ| Þ§L Ë$ªÎ×@ á€z†wuÜ5.دðäÁ?AŸd›‘âØ½p­Ø¸àZã‚ ÑO”€ú DÂémIÏ´ømp$'.gÎòZ#÷ÁMu[à¶•î@Ìj›‚]cðÅàå˜(&½šxº0ÃrÌä˲DRèìÖz O¼ŽÜî‚2‚·¡%“Áq®Ã,ç. þ1ðƒg&k茀” 5ªÄ9dY¼©8\0%r?d÷Eä3û:h -“ŽR;¦a€bœ«D+ðœèóôS^®ú¢ÿ×0+·%{A!µbPé9duÚäÖ&ã²M;º¡žƒ«}½îíÐD æ Wo€“±fÊúÜG(Ù ޼\åQÈi *ßÐ!ÉÜàö…䨮9VHÒÛ0ù)XJQcyÝ`\2[ðÛb)½û?×–g¡ªøÐ\ ‡æ=ÕB³AÂpðƒRŒ˜BåÐTíÿ.Ö ·’ò&s(JÍ:î…¸@]kf¬Yª=:vïìS}a’-€zÎ`½«¾èzÞq=åtE¯¥R=,C¢ë…e¿HÒ¢–šLŒa¯›ÙË~âI,VíÀÙ†>Æ®ÀÙ„ósD­/º¶œ`/¡*,;œY¤©!5&š•{ª–a˜Ìexfy®::õ4èàI¸#çD¹—s¶lLÀ…dG:fSzùe´?Úxõ¸×@ ‘à° _:õDõƒmˆäèß·(a~í™C¼$®X«ŸQß<äwþ$žŠÞYN×?£_.Õ³üäl5‹Ç›ŽN øß%`•ZŽä2TsB +ú/æ*IJ^ë6³êÃvˆOviå£Ò ñOXùbˆ‰eÈaR*‘‚ÿŒ!lë?ŒårEÿC¹\ÖÖ¨‹Ãæ\È\ø â?QA|¦,n™âyL‘óPZÅêrô¾E}krjR_›­‹$)T´‡)ë*Â1;êÍX ˜feϳoŸ+s}êûªT©¡¬ oHêž*{ûm*„ÐR"GThf\CåÖk¬ÐX="‹aæ,ËÀâ\}š[5ž˜ôšPyØ«â)øZ*ãq“VfKYÝåæ+Yʪ}Zû‹ËÕ:5)¿©I•w—Š¡©è:jÈýH÷[Ùs,Í©\vŽšÐk÷N09ði©¶`GûÄNTwà ÖÂëø€­ÀRYrÝ…a»ªÖ¼£XPE=©8j7Yrãĉ0ßix†~‡ÿìþ$mtfЂ&ïéã©ûÐý³‘B‚GÛã£ýÚÔ6ž·ÅQع1vÇÎlØ¡{æJÁ`cÛÝzâQËÚQM¾¶øQ@}ÿ5(ì³B¡˜ É[ž8ª„ˆ¥R;-•u®ÏòÇ€#½^•gïÃù*ééaÿBÚ‘ŸØSiÛŠÐ÷åÓ2„­:yf:¬Õñ|ì[ %y¿¾‰ä&æÅ3”`zÙ6é[vÓlb¿·kä3ñl¹T3<£Œ«l•n¼%­šwòæ8êܪ‹–ºi¥®™U¯°ÎmEz_£ †SÈËxŠnÝ1çªÒúÃçªHr3&5DsÜh^ßFGâkhN•#:RJk—Å™`ŒižtÈo'‡óÖ=õض×VŽ6iU’<¯X¡Év%Ye÷%!†óƒ¹£lf*ñ3Õæð±P¸Má}}—çnbïrƒÏ'tøX¶|cà.À„=~n¸?.éy,dÙ Êä4þw­ùfsžV—ÙuMf,‘IqDKÛýµH?s.UÚçtOœUw{Ý8Vàymª[ªùêÞeâ|Ÿ^é!…Wó±…tJîÒ½ì¸ ÿNSnš-]ƒÑœ ÀûjôZÊ {FFR䘱ÓA)¦Ö¹é%;UçFø>w¿ f=mI]P“}ý]s›Ëø7ü*ï5jM»üƒÇ1¹kSP­™°å5hÁ¤Ë%§m»ŒosþGž\Èiá|ãFâ[h-w £û~R!á•ÿêÕ@Bå’R@ ó¯‰ÒmøVù!åt…ÌÛTxœ³vx?ÞÚ#0q/ ¼•‘=´P“ÈÃw¶ÂõÏ„žzçÂU±¢ZÚX­Ž•,sZz¾uú)ôÊÛ4•÷àð•ÖóªYÛÔŽ‰aÙÌ‘–à™4ª´„j/8‘ê¹/€Ï—rqðÁëzû«¬ªÐoÛ&¬¬®¬e¯ŒËÄ*l\ïñóC⎪+V——iǼkÜ)0ÜÄ\N&§õžÑöÏ×4‘U2æ´€8-Öѵ È•þ½cRGùážÚbû‹?œ½ø7«Ž÷Ó endstream endobj 114 0 obj << /Type /Page /Contents 115 0 R /Resources 113 0 R /MediaBox [0 0 612 792] /Parent 93 0 R >> endobj 113 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F109 37 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 118 0 obj << /Length 3885 /Filter /FlateDecode >> stream xÚÅÙŽ\Gõ=_Ñoé–èJí Q„0`ÊC䌈FÊ,»EÛ3d<¶‡¯çœÚëÞº›Áƒ=·ï­åì[zvñÕ7Ï¥Ù1I„Ô|wq»3|§#ÒÊÝÅÍî{v`{z8:çö†ÇWðïÝAà×û_à×åA±ý{x8…OzÿúpÂî„ßwøñ 8<ºÃïàáþý&Œ~á—bû§öõeÚï&ü¾8pá_^¸ò+¿ŠÀ¿,õï®\wÉ<¤‡^üõ›çŠïqškD—îŽÜL/Géöo¶W°–q°'Âs΋›¼=™ÛŸ®Ãw€:r ØþþàqÅíàO8& p~]Àðó¬7a9\§»ÓþM xÀÄÓü&̹ò°%„ q†2DˆKJ¬€˜Gꇣæû¿Ãÿbÿ½þ¡C®‰á6Í à¤Md À#¤* $­@i @¢ƒÂ"Äþåcüôo„ú1“ÕÂtÐ÷´Ièâ`”Ö,ýÑSÊÏÅ:0L¢Û#N©tœè—éKgDÊ˧¤j)^$4Š' ²û úÎ<&@ç%T wiW ×Ë-nöÞ3þç_ákàcÚŒEÑ#Ñe{ŒÐf ¦8íÁ;AñF "Õ,úý VÜåã!S/žx¥òÚ×ø=ÕßáèÙC[¾<à¼ûZéo ÜЈ#<²¸O@ ?Ý&£q>E¹¥Y <2¬p%©.AËöE$!ãkÑöÛÄ=a˜§EÚtó1!ñe¼OÞFkP¶ÇÇX Ûloh±Qoƒ…Nbt› Ÿg¾~hlrEhÍñ¢ ‚±÷µ ˆX6GÑð ?M)~ë*€žõÖòàô()øXòd%=}(h´2´ìȨ$\ÈÈS”mFÞÒ¼x"Ÿ²}‹ž)JÏÀLeƒ'8¯-®ðe‘úVà YyVÐè+jbµ¾.ÃÔYi’Aœe ó°MV‡èzºëÕÅeË …Gƒ…éšÃ{#…ÊæVB€ƒ¹Êœ7^6øH€?TZ¯ÞV‡ò >†D®$º¢ç'…`Cì—jh'øØùý"|ÑRéý¿ºëßV°¦á¾²„nZaš;Ïè»üÈÀ €MñNa>Æ} ˆk=y⢷vSû]x 2…‚ºŽ¨q(ƒgY/†ÊŸÚ* Ûþaι4LájàŽ›Žƒü×HÅÞÄe¯mfm€ÞªsÅqs»ÎHùÕN}P¦Ãõ,ÿ~\hêȵRðýOíÒÒ!By zˆ‚&9%ŠBPM¨ˆÂö’2Ũ«8u ùÖ±ú©ŒÓàj…Åqšh-w‚hf¨g¶b”+£¾óð0J´S;Ù]‡sÕвQÆnM ¬'Ä(Õc°aCv´^Øj ™d÷ª³ †íu !HpŠRKb9oU¼ ˜SÁa!+~mæ¨%æX"œ0ò»+ÚÛqBYŽ®~ìmlµ‹R¡@*t³1ìÈ:\å@7ÇÕ> ‰#oÖý,QYZôEwQæ6.*‹•êÊÓDJ™¨¾†E|‘EâÿÉ"±ŠEzË¢‚ËfÑ«®ÒçeJÜØYƒÍ±9#øu¬³#”ó/×*ÞÛZeùÿЊŒ%ƒG§|íUíh1lQ|”Ä—w1ÜQ9r*ågbì¡æ²B?ùv”ÀäˆN5^,à("”iÍô%ŒµqsŒ'b~]`V´ùŠ `( ®§€MA´ß¡AÜÖañ‡6ÚäyJŠG³«òØÇ°Ú¡,›&”²>¿r&†Ë~tSÄ97éEU ´¬Š‰„—\êB¨¢€jƒÒ¦å‹aY'Tž%,I„5‰¤B°xd9ó¬¸Ì ãu˜3âëÓT¿šê\\ÉåÆÓû¶ÆCxÿK»U\|žFo™ýôê]Ø9Ê>æ02ÖüK_È_²œŸÂj· è˜çù—=»ÌrÚÊ܆l¼&Fd/xîÆ``·ÖÙwFŒÉæÇžÏÓè²M^*…†Æ´Ì=3ÄÁßq¸WR\ ‚ )ÓMÉÁxUX‰ò$Bö•M ŒO5ަ|ˆó¢²`8cææ¿´Ù¤ž3¯~ÿi«ŸgÌ+¼lh¦¦¥6bÿ1zƒS®†dÒ¨¤¬C]©ãÛRNì—ÏO‘-’8)‡Ö] c®wY—9JâŸËðR¶”tª›Æ^RÊë˜wß–æx]_ •ØAiÕ¯^,igëûîaªç» &;îzYY•×ùÙþ{SÕó=ߣœòxNo1}¸e⫝̸ÌÆÈ 5$¥1‚nJUçðï1 ‹e&(©†‹(”ÚVÅöËl©ðãø—œ|2#l~Žâ·ºƒ¯Ã¨éúfp¯Ô3̧háüŒ豬ù¡ ?| KwX#¬ªsæ&tÔ[ÖZ?üÐ0Nd¢“!„%>”rÍ]Ä<]¾…!Rå°3uþMYr˯êÐë&À’äÆöf h„&!Ì]:R渧ëÈš/E«ùø»åIT_#‡¡8‹¦»ÒÁEŠYg€“BH©Å¨d‹Ó†U­‡D“îçJϤŸ‰/¶©.ΨœÑùÀfFCHS u(Êù”Ï1EˆÇ%qf׸%5ª€wªÅsþÝnÏ qþ­ÿ§^pæ…HcìôÃDt¥r¨VÓ$F§‚%Lڤ㘊 ü6ºw#ˆc $ ê j‰-xTÔˆ{' .AHh®â€Ÿ{Ú¨ú™<çÄq±“„19ŸSœÕ¨R}P2ùYZ5%+˜)ûk[èfŠ­@NƒªÆׯâ8­Ç¨ÔU-ÝêmH, µ4¤} gW”ÌV0MO0­S2›Á£[€ìî¾'K‹NW5×Rüȵ KPŒ(£¬ÞwJÊ“^ƒMñ2šw‡‘»FËÏÅâY4.øYY5›xÚXb¿íB !£]‘Ÿ3Š7ñe·ˆá¿x¿1<×ë¼j6;GʳûÉÌgœÓ º]ð÷š$Þ°ÏIâ™Ù/¦õÜ­bÊõUZAÕB¯™]›Å•âI\¿Õâ*¬\nØÖ28ÓÊþÎéô]]4´i„hyšý¤àª•†/葚ÎUG¥P©DœoÂÛT“‚ùcÅ&X@éEk4éN+õãNjÚF u³›n¥{¼ëCx9_v íôh­ Ö4W 5› ,uÒé3H\[N±9CÊåæ¹n»±?d¤®ÊÖGO§nÑÍr9ŒäæZÇr^å›&ë ׇ~Ì¥‰°¼X‰îÙ‡hO:œlÀù~ævÕ¨O]$žîrˉæ.–ûx*÷±èo0°~7î0±*wÙAEǪq“‡Õ[{¢Ð_U­N^l´cÉäÅæ¶±$‹T†É(9°½R,+ÿ¼ ÝœúØAYf|þîJa •YPžº§‚Tèë÷‚bPbÚy«·×=¡S ¶s`Ö.¢ ø‹Ï@[WÇ Õ¦Yt•Z5Ù¼­jê^Já{)ùBïvi„Èü¬yWëÂÌA ~®}Ú„z,v½[ÙúP[WUí¸šÝÕˆXi¡‚Zt YZ«Ê©Üxö| &¸gnÀ=»Ö=÷z¾¶¶Hz3ÚuѳÕmEÚ±¡ÞOª:ÒÖÞ Œ«¥ÒÓï(Ž-L§{O \,vàࡵHMºµ<õbCÈ9]îT¹†|Üt-;£ 7Ö•æß@ìOè‹ÃÉ׺žã€TYº²C/,·¦Ów®Ì Ñ 5Oš(É |Ëx«‚7úQz!09Ñr9-ð~œÐi_ÐÛ¦éDˆŒ˜rÑÏ"©Êƒ®8j„š[•;µY±¬®Vuxô¸X KweªNà_BÚÍ+œ®¸1ÉW𥠱–­`wÛ/[1½J¹/]¼y“.ò8—òŽdÛ^§«´½CÒÆÅt‡]õ ñÀSØjÊ®Õ*Ü“2¥ˆ¥«…Ï–„Ûÿ4¬€[/ÊБQÄwëŒb;tÜ7@Ó­‰¬.h‹-—lJ !Ô˧JwýÓªaSr0ÏZy©ÒN«pæ ÊE<ýf+¡Gé/¨ü¹NºzÀŒ<‹2›ŽöâYZ9ˆ›¢ kËšk³FÐÇÇj*Ó½ÖÓ^”’|PI‘©·öVñÌö â!ç¥{ãÝÆ6×;¾ÄESŽFÉ. ÂI“Ç-ö„cŽ`xi,‘|Rrð[S·z TÊm%|%ëqRsÜâYä_·6NòÖOÌ ó[ë;.ª¸üsXýìí‘æ h‰¿It|7R#±¢)ÿwØG#öÏûå> endobj 116 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F109 37 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 122 0 obj << /Length 4048 /Filter /FlateDecode >> stream xÚí\IÜÆ¾ëWôÍÝ€š®zµÈ!†ã I,,‘F–ÔñŒFÖbYþõy¯ÖÂb“œi >ä`¹IÖú–ï-õj¾zôàËo¸Ò;78 z÷èùÎÊÁ9¾Ó&ÌîѳÝ÷û?<úÛ—ß((Úq>8®w,´øæÀ÷·É÷oGáøþ>¿<€Æ®þùÙAêý{|ùÿ»~^Òï·AÿpÝùþê|:áG†ù‘†yz|ÀçSÛ?ÿ',Ì–à3•Vö´è,_ Ò¤&_„Á®h¢[úçUZMõ&®:,‹>½óŸùþáá(™›ì?aëøöUxA;{¾†.ôö¿Ž.>s†sk$®Âß’ÆÐ_£UÕ„:$¾þÇÿè״عRƒ0  • tˆ£à¾_ø ¤“þù6ü¼)Û\Ñ¢^ÒUí‘v™ÄÅÀ™ÜƤ´€—åÌ_òŸ]ÆAA×ëae¯# 5öÚ,õ$Så}l?[E œ–»ýéWü9 ö¨•ßËémšÀ‘‰9áFâÜŠš¾q;(#k¾Õ’™¶ôŒ8òŽgÞñÄ;¾ÿÉ·÷¯NïÂÿ<$Å$ñ¯žÊ ÃiÝHãSIÊz¶÷Ô7’»;@«’«¬‘r°ÓSúÇëFìÞUí…*1£¿zàãiõ˜18R<üˆˆ”÷F\`5ùû|> n#!ýÏù㻆SCý‡`±jª¸ƒ­Ÿ RCb°[l Äø¼Ž[ž'yU#ÙðI½UZé+ZBT7üõ4˥׸ðÔ¿Ú)6x}O:ôšZ½N;ˆ„yê …{~?ê‹ÿ˜)6óÊ“B輦!ùþØ“ZÊé— [B¸QAóÌà ãÄü·ÒtÓsÀ7¡“êuÐåWB׺: £ó\#æJ$àƒµcìðkn¢‘¶ÂR=€¦èf@¿:4ûoxÔÀìŠFzêmÁ¨÷½ù 6à½ù³¶œ®ÐÍ D7}jt—>Ì1&‘pô©ð¹eŒ¹Ìÿó1ã²GrÐÊ.²CÞ‡Q…FnÌ­ UËŒkºî­I ÚÈE–Á@ÚZ4 Ø~š VеŒ³-Ä;ãÁÐCÇU–ëÂõñMêÓœ dœMf½×1±þ­÷'x#Çî&™,’ ÿ<8g·!nKsÁR}´Ñ;äDAP#ïв(Dþh h¾'‡ß…Q]‹Á1dêÀ„¹ßÕWäªèÆM{«qƒ‚q5ôsp6gVÎÁT5ÅUOÌÐKÂÆc2í«ÎB,¢º‡#ݬ0€ «m;`žÕ€ªUÌêõ„£õâÝép+EsÊQˆìºŽf?x]à0Éá"œ°~;%'¦¬íØb–ÒÎïYW„ië¸×Øì»@·¢3Xƒç¥¹‹¢Ç®j T«¿ð„¼Ã mE‹–ÿ-q @5îœP™û úÏî Ü´NvêÖøÄÒJ~ ˆU„ÑŸ€0Ò}4¶;9—è£ÁúÙQËÑÜ–³gߦç3 |e;0fÍÖÿm@§Þjy^0ðìRí˜øÆ\ñQ Åœ7Òôõ&9r <ñ­ò>Zì¾” Á&)ª–:wT)ÔÁBŽQULw=c¨ì*w«uí9h5u´YßQØPBŠXë"Ùìó¦dË_%ã]FAGÅ dË„}N™Ñ€cü^ª0Dë”A î„>x{ûùõˆ}7Ý—:dbͰ޷L¾YMáNjpcªu&±29è¾ÿV„ aâàÉ’¦KòƒÑ«bôc³ôû¤ß9¡w?ÉÊ1@cÏ£¾ _'{+õkE*YÖ±çtê|T¥®žÜ~-b¤ÅA‘´@Ú=øó£??àÈb¶ã; áSï_ÆäîêæÁ÷?°Ý3üˆRàíÿßôm ãt½ûîÁ?|åÏ`+ü’@á‹Â¡0üÐ⌠íÖ1P1ˆr‘©ãݦKhÿÏ3 pâÉ¡Gf`j0®©¢Pø.ùT¡¡4úÿŸŒ*”àV)ÀŽùE‹‹jŽICBÅKjjÈ•@B M§ã9~Ž€ñ¢†TŠûƒF2)«zãüÞä è[”äVסI·«ã!¾* B˾´éÆ2}lÃпì‚ÐD/€«Å £/iVDhfU„fÊY—Ü;npP‰QÂâ®-実Ü=cuÔ0HN>…¤wgK•¶mŒoC%^%\f¢%X±úY!êä÷¸\.L…d\JâÒØl6Ö“Kc½JBæƒK³"¸\1¡i'œ.ψn7ìξA–.ï5èQA_P#”’”çeeähŽ´ã­6¢ßÏf…ƒìoµ>"ßG™ärì=m6#7r‹ÁÕƒÞ'DV˜íºÐ0†EׇډAª'CJüŒþ#CyAæßÇËAÌ%#C îâeLÕábú€0„¾*zR<¹fÓH®·dœskuB=ÐfW4J>“âÁ7Öç|AŽÑTXlâ÷a ¥üP ‡\Ç%µF°/`z'7Î׳<¥_®ÎJQZ»NÞùÄ…«Š¤(dŸOC¬Fc6A®Nè6ûøÁઠ,‹Œnt/ 24”`æR"c¡*Uðå ¸ËvßäÌF?ãqý1ñ£Ìœ®'çsœ\H-…,nØÐ™GGFEo~£§‡ù„1€…\è.Ï'™ b>¦¹]8FLµF ×o–ÃqŒ¡±‰ÀÚÉûÅŸÝ%J46Ká¸\¥)þTMÖ—1sÁC?Dì¶n ’Ö­qÚm¹ÍtzÑ©þ,œR}My¢®tjJ*­®>íßèò–r€°$ÒzË9´mΡÿÔG ùx4T?9†L3õ©Ñ_N¹þñ(YS¥Äì™ê$lÜb¹¨ö;ºÈdjŠlëE³N¾9͹;º˜n>!ƒËPb1]'ÿ_ rH–‚5r·¦:Ž™3•ô51f'£ßQpÑÕÂíJÕ­]¯ùu¨ï uàXžMê"^Ýæ²Ðú¾ _[Þ×ZEå’°¶Ès‹üðÌzK¬m¬kg‘€ñÞçO] §…*ªÓ½¬Óu½ ㌋èá­*ƹ…Eð×0©ÅxMnL\ë±Ph,ψ[0OsÅkºá–]i›tDÒßrâË t ùôªb¾ÊÛøßåûdÐÜ_65~ø‚ñóM*`Ö.<7\ª£Î›ùEå/ Ú2'à+Y \w»Ž<õæS¤ ò#)ÐpC¾©ø!V>ûò¤Pê^§h¬Ž1cšãõ˜÷éŽÅݯ€´&uþÓ©9H¡DG7.‘¡ž•`ÂÊ¥èäÌI][ñ`’Ë“º„ðµeC`æã±do8á+Nf°Ü.iHÛfZ›¡,/ýÔwq¸ˆ{Þ^³¼Ž7X¼ºŠ;tÚgµÉ8/ÜŽ‘F-n±ªÿ½înï•õï¿/š¶"<[oä¯}3K‰î)Qø„&\û:ë$‘ª'‘Æ B„ÃüBz$ k‡Ar‘ó.]Ïø–*ÕR¦ÓG›%0ƒcª¢¾²·ç(ñ {éAð:(ÛÒŒ;¹í ­”œ¦?*Èù¿d뛂qÅö¥—ó°ë¿ ]^˜uÝ`EšI¡:’Õ¶äŽx&ÍÇœÔ(š]j8§VFâb7*òçên€N[£°g´»vγu›…™3 ¯@l“æë®43:)ZÅ‚üf•Ñ_¶ÞÙ­n!oûë"ÁåB¿8¹\º÷‡/4l*’ÖPxjN¯p±4ÜÉÅR ÒbõaÄd÷ ‚oZy=:ÝŠï¸Z‹Äà°1ÅAÞžó€¼À²iè³Ø|Uê¿ÊÂooäâþU•Õí º˜]£N³H׃`)©ÀÛ]à, M'×e¤[ÈÁh]ÁØù˜ôœ$€†}¤Œ'š¾[[5ï{œ1Dõb›#g•obÏFœM(¬y³cXŠj~|;C›™æL >»¿ª¯vÕßõ³³4rd¾`¤Ê ó90µœ ô¬jëd Ð0bIÉÕš+úeeÅŽ;7("“ŠºO~µK•ÿ2Ào endstream endobj 121 0 obj << /Type /Page /Contents 122 0 R /Resources 120 0 R /MediaBox [0 0 612 792] /Parent 119 0 R >> endobj 120 0 obj << /Font << /F156 76 0 R /F52 5 0 R /F86 38 0 R /F109 37 0 R /F47 4 0 R /F107 41 0 R /F1 39 0 R >> /ProcSet [ /PDF /Text ] >> endobj 125 0 obj << /Length 4408 /Filter /FlateDecode >> stream xÚå\Io\ǾëW œƒgM»«÷FâCÇ #Hlå`ØBI”¬„”d‘–ìüúTïËë· ‡‚³\È™÷z­ª®újéùäу>“lg‰ULí=ÛE¬;e¡\ï=Ý}»ÿìûWû7‡£¤|߯®Üg¹q82º‰Oð©Ú?9pØßâ·oñÏehuŠÀþ96ûOBë}âíáhýwlñâÀÔþ±ûã{_Ôþ&Œö•ôðý£/>ú ¨­VJÉÙŽ†E¿mšÍq"´N ÈhN@›Ôâr0„$¼öqQ’.oQœ¶E±Ö| ‘Ÿ¸^¹?®ÝMjò&.¤ që_ƒ£#ÄÕ»îÕÓ0ýp$Å×.ˆ¤€€X)öÎq³'ìƒÁ‡¡7.ÜXþaZ½ÿâõƒëz¾ºH·Z|øSµé¸‚מœiH¿§L¨‡I ô(1Ò2ÇeÆ81ЍàñÐܸ6Š(Ë‘DXšýc(/€CV>‰!Rõb×ÏÆ”XM›Ù~[“ ÷‰œþ?uL¾t’vë™ …í—ŽBOC³ÀøÑÿ»qô~û0È|ÍT’ÉB3dˆqC˜§œ&–ó°Î?]Œó¾),­DW9 ã¶€ò[ úË(Þõbv]oIØt\8tRsí{ãüñуòƒî`ÇG.ì”2„[Ø=¹~ðí÷t÷ß}±£øÈìÞù–׎[Fà§«Ý×þúà§[[6# EåªaÃÎ/FÜÖÈG»A¶83«²e Ь?ÉÔÉF£æSõýw²j¹¯e•á|Ǫý̨b«[Px< ÞB`÷&ª•wQú„õÒ‡üÙ‹ÅuP*WQÁ¸F¯káÉ¢Ä yDûa_I ÕÅ;itH&²AdŽQ¬òx«ÝR®¢BLÒUOs.ãÛ¡zs6ÀŸŸƒzóoTÑðõA•jÿö:‘_’ÞdA/ÞÍ{™üÔ¸|äVìÿ”Ìh䯒öú½¬ñÔú´-Gy@=Â¥³MÄ ,% æÓ“ Æà¹“;ÅÑŠ¡v?ç(»±àX ÿkµr–Í&;Á'g7GÀ¸çíC³µ~AG†ëÑnžÜtþ°  LJ½YšDe7´Ð+Óã¼Ú4Óÿ&ƒ±9A”¸“õ<2<›³ÐM¯’²ûzF/!A+|2œWKµ;6d’0 'C9±Käìu§f¼wŽGêœA¿ VŸ6(ë=J6q䦔Cnvö˜žÜl…:G@®$Äôd‹„Èû‘ýž$„m’“˜éMvÕ~ÖdÃ6.Â&.Ê­\D³ŠHÀ«J‹ °7+?UcÖ¼lv %®× Œ¨óŒVˆëp$ªÐmvrIí\WÕÈc•«¬¥Z±Ù¡Üè(sRo’p1/á–w¦¶ÕKV±<\í¤µ^§Ÿq,IÝX8&ªŠs Yü¡rH)8‡ô£¡r¸“Œ•×”“\kTÝä87"jãB`¯£'^@$w,Dÿ3a™Ï=>:2Ó@Ô€h0ôo"üÍß×"®ÍɃ‡œÉæXºq@U`–®­ïVÍÞw”²ƒ4|ˆ®dtãÄ͆z:Ôc`¯{{p³È{ôOBÜDLló¤?”í<<šÝX´y.Pà~ÄËA†ÖeÈq—S<vÆch\qC }Þ–qj0=¨Ü´•Ô3:ÝÑY_Ö¤Y\«weâàɵ;§¡åš"”I¬óªÑ£ÃÊ dE»ÿN¬b{êæÜ®0§•T…÷ Çâþ[VIn-ü4­»¢’ô}Hܧš·÷Ý=Y 4+çè&¬Ï#çÁŸ8ŠÀ€'¨C’¶PPÒ >¢ëtBðߪÀì$EIRg:7n,4¹Â¢Áضá‚sƒ­Z/±MNi3—­U…Íø~ã·íQ ~z$:žä$mwðU¯ 6:fŒGsÛ ûõ”ßÿ {Oæ¯Ëxá×™Ç%“Õ•ûàó“½²4m81oƒ0pHA½¼²‹j—Ïóg\äk÷燸[—Å6ÖÎ*@šù´åKC[¥‹”>©Ø G+q}ìû¸Ì2-‚‡…BJ­=áhËEOxRLÍÜÌÌ©.V†¸ê(0Ü ÷YºØ¥ÝX೑çÀ Š«t :]nÍUm,®²´-®r|Šÿ·Wa³tXüGÿo¹¸*ÀU¦ íTÈ àÊ—k<:…íi"7 ‰„º(,—«x«ÔHL*9úê•­4WØwbq`•æis„é «_’=„e]äͦ–?Tå(OGIÅû-€Ck ¾T£‚ -“„¶^7døO÷lZ „³ÆGa­®ß­ï盯›_ßã"üËzýݰ&ÒU¼&k"%±ÐÛCÇÕ´ukÑš§Õ* ’®ÑJòÂ7¹ ýçKÅ:ZõÂ)²JîÊéÜE®JíÑtf° Mz# D§æJPõ¨iWÆ%XkuÝrgc(®ñ”1 Vã š”ƒöêÞ+š|¼öà£åQ­¯úqHkÎVŒ «[*Fª!*F¶9­æ§Õ—ÿ g?JÃ2”ªý|MÑVÒãXë]#AXÑÉ[á9Q«´•ï”tƒÉx½¨ ¸Ó™ÐíYѨ—£:¨lvYOsyàWgÄ‘˜Z %föó Ì9¥fâáÂrû\óÔ†4Q @çù‚†ªU æqíK£.V +Ç|é„NØò #%‰p…ûˆQ‡“MâbÒֳݽ2Í¡a[Íæ=•Œ®WŽª‹l ­“öüBAå#SÂ;,ª´’Dƒ{Žz8ŒN“£žµR4hgD…hîÑ."~ÀaM?èêGà„ªpÖ¨Jžk@ +‡ùˆ‘S–“ ÊJ`Pk“š^†µ\ºÇ?ŠOôrRaPðv¼ =‘«¬QÛÕ¡õhœ-QRæqe+>ÒBº8ÊìZÍû ù ¤ØHXu!cºtsš=”q¸œ÷Kè2kAÝËZ,Üxo{/µÀÚiáB¸¸¦øàÇㄨñ`,ÕB¡û„k®üÍÀb˜¾âÖE,@Ó}À­ºr]ÇÎûŠov*S´q/ÖH »‰'°‰'ây¢†y&÷ •õY^ů™‡jb³BcF¤†äCæè,Ó|e%ô/&½.‡^tâÉ;e"–“O)òî:Æ„•ûXBŒQ6¯³-ºòýü ~™–â|SêuÄÑh©%+1ùá­&FDíÔV¢Ve‘¬ËÄÆ•ú­®ìÌË&=e1CQáVìÙm ô ƒîsJÃcÛ,¾h —ÿ#ò;uôòÕOt¹løúÊsˆ'ìÉ)ÒݽP›%£×b\ ûC‚ÿÈUN‰ág­*äb_|ô®º§xvÍ_ÑñÓ9¸!»cèƒÓçÅÈ©D hvˆ¹‰1+ih.WýN¨¬U¹§ž ¡æö¸ï)¯¦:¼¿Ÿro»4I­èÐþ÷€Dµ€s“`XÙçQÌF£éØ’ØXqõÿâñ1²‘‹*ðìÀ½4[Ó^Ê#ò‘‹©ÊúJˆÏQ`³j‹—˜Á¢ºØõâm«¹Â1H?¯!ô. æ™HñDJ#aO}[ØóÃÑZëÍÁEtÊêJ-ÐüW—c0‘ºXà·í1ñ{e2%qš´ o/·(›ûü¯žHÝæ¼ :™S·éi†øýºIþYÌïCú%•  Ü=`Â>Q3¦HÊ"ÛÀËDhÓ ]:/®¥ÇŒu²š:,ï²ã™DòY–ÿQ½»Œ_ u>#4“Ó} !…ç©ì@·Þ|–¼ ­^Üt­gÒ6Ü5º± þ$RïѤ ™ï9 {]PMYª%4þa®ªI+L±ÎÂö=Ûb"Á©gÝv˜÷?ŠÐÕdóÝŽ:`I¿Zfh-çšps¨eÚÔ?Š·¶~w³Å6Mh©Ci®ÇU"Jý0ãxÓAu»r^ ·KgdCê³øw»˜¦Û8ÓnÞi;_Ûu^Ï­ÄÖîìór|·Ôú`{µ¨°IÕY9©“LÔa¸& ²óRmÆ8ùâài¤)æbš¢÷$N.J“4Ä’:¦ñ-ÊÑñ¿ âW’~Õ*l¹±îQsÁñåÂïÓ`ÛA0š-‹ X{c°¿€D“[‚Ì>|ß„O[w7Žœò–ó¾èÇ6û,T¬g¸jrä·³E±Ð¯ÆU ëh;WÍ© ž`¾<éA6ý•1®C1Œ^ÖºæÔÈ ãr”òÍ@^úX¬N8Y»×jËÖ¥JK«®òPõ¾ù´pš_ÖDY(qࣤõ÷‚ØîwNiKŸâº‹YÌ"„¯•Z.vVœÁÏÑ¡” YÑU­á³ûjC™àã(A VÒ@Á&¨uµÿû` Ž^HñÉfæþB|lóaâÒ Õ‘‡·]Æ®ÒÒ¼Zª;Ð2–JÂ%¦Ø!wÉåÊÄH`]Ñ×u"}Ñ[ÖË¢k:ßú=Šn_œTb‹¾4Ä8Š Nét;­¢!‡œL‚›Ð§…îk_CHÒÛšTJëjx˜îËÆ˜ÍA3?¯ò…c,##·‹1ÛVÁðgÑÔµ–,¬ªÙi¼, 5²5e}[ÙÚÀUI ^ÿ†až?§>œUª9~gC ÿáH¬CdåÄ9¨ +3в]͸ a“«ç{ƒ ªû:ôéŠ&ãœÉ’úe¦w¡>I†c0gn”¯Ìw@ÂæŸÆdËÕ ¾i‰øý Pä‚%e6€RR_•³é «ßtÂv0Ýê"ñ>ýhMwb…qõ[l¾—“›2Z)ÀsïR×½ŸÔŸ¸ÛÊe|ÿ0ö[Wõoi¯B£Ç‡œy.e¡¾pܸß*ÅŸí Û¹çÖ4Þ¬c Cꯊ(ITºPÃ}($îþ ''t endstream endobj 124 0 obj << /Type /Page /Contents 125 0 R /Resources 123 0 R /MediaBox [0 0 612 792] /Parent 119 0 R >> endobj 123 0 obj << /Font << /F52 5 0 R /F109 37 0 R /F107 41 0 R /F1 39 0 R /F47 4 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 128 0 obj << /Length 4243 /Filter /FlateDecode >> stream xÚÍ\Y·~ׯ˜·Ì ºy“QÀ‚c$A`$ˆ‚ ° dö’&^ÖÎjmÿúTñ.6çZÉF´ÓY$‹Å:¾ªÖóO>ûJ‹…gÞ³xq³°ba¼`“´‹W‹o–ïWkî—Û—+¾|ÿv«µŸêå5Üÿ°fyÛôÈ,ï°‰_nbË |·‹ÞÂõM|¼‹ô8<“•:_>…V²´àËø‡Ã}¿Ðøýʨ%[­\¿€máòšLÜ®ø”z®qN|ù&¯Â/_Ãåf¥yšMèÏ }¼½„?w‘ì6-í_’¹½I Vk1ÅOÙSé½ÅGo*Ño'=y¸…_Ž«žÊ,¯Vß½øËbZ¬9g^ë¸Ø|¥§%‡Sêö úq7|…o|œ8/|Q|ù.1´Ì+pë*6K¬lÂÓ›®ú¾÷—Ø ¬æC"ˆ×Û|q¹’§Ëß…¥pÙ‘b±šñÉæq…o?ûŠ·bÈ¤á ®Ø¤en'r»É7-5³Ê/Ö–y§bË籈µaÞJ‡­Sn!™á¦ŽÊGä<› kšnj³JÏB3;ÔOóß2j%¶æŽY¡áwb Ú÷ &#6Y Û]5LUdPNàôB@#© çt&g0§½ˆô ´Y·\þr¼X¯Ýh\²XØS Û4úNˆãxƒ¹fN7øÉ_<ùá NL ¾Ü2ØHîåë'ß|7-®àœ &½[<„†¯qº Óâvñ'òåo {k@ Ë {6×ÂýñÍ@~Õ½01öVè_}o%ÝÛD˶ƒ:¦MYæ«ñ2 -“NWJ„é#&ϰ_飪$jÕÓZ)ÏŒƒ¨.RÓ/‚u ÊzZ^•™ôýŒ[09<©þ×+ÌGÒ¦ù1Õ²·?Å.w+ufV—OG¢ÃpEêÌÕ÷ƒ:8ò<7ئ©¢†/fú‡Ú¦ãFû§a{?ºâèÙÐL¤íÓ.à‡tÇeز?“è‚ɃVÓ °!М6ZzR ¸eÚŸ¦ ɘ`Î/±QêU€PÆ–ÉÔŒ»ª:8ŠÐP1®€šýébË? æo Õb ¶Ô&«÷,Êhã© îÚ»ê…í÷lø'1¹@8pŸŽÂ]ÚxØn³[ÅÑI 'U8 ¦“kd²¼b{e’/œ”‹U{Ä£p,3ý{ûUGò‚ª3‡¾•PšgÁàŸ¿Á¯QÌ#ÁÀxpoÂdþœ4æ$£2¸Š¾peUx½ ,(—…Ûpÿy{‘¼«mr•Ud0¼~ƒ.è5>}9ÚˆÐæè&Ð$­a‚g{…̼GúÉ‘é a9ÓÜŸªõ(hÝšFXÙr¥uIg9¹ß%wümfŸwΫ|»*\Ü^4ѹ|¹N²çA]iKeo~¸+|9ËqÈ+$ÞF3‘s@’èïÁÑÜ\G”Õ?0pX§*|h¹N¤.Kð<…kSftÛ”X)ɆAŸ–K#[þ®32OãÇ#Úí€,€Ræ¶•…`Ö\Ørƒâˆ;[b+ÐÁ¨ÂûÄTYݨ ºÆV—„7Ès°Þáa8¦iÈ{þwH®Q|áÍŪ°MÈÖsEpS,øýãã‰ê5'Ä»Ù&¿O+N§Izhý*qô uH‘P&‚8< #ÅT¬þÝH4SÔÍØ…„µ76‹J;ºz·ó*Îÿ!¡Wq!›øø?q4×î‰sLê¢Ù¿F]=Uö›H«Wv2Î"Ke9‚‡1-lÒo£-ÞAD¡¯KÿÈð£ÜqoF+PÎÓ2i0ÏhaPÚ„E·OR‰ÿ´€XþþÊå_ÃõßF‡T²’uÉ2* ÛNì]Aµp‰V“õçCÑú>=Em О97ðl„À$¯¬Ùõ‘¬£Ž¸”fì±kS…Â};L_šÇñŠŒ(hÊÇ<ÚvFtÆPQªä0(Dù´åý8ÆÏ–7^]¿?¢ìó¡½q§îýD{sêÖ¸nk:¶+^&ôÛ± sû Lʹéá6Ð4‡¸еþè^»Ç±+(ºF©EL•ù v¶ŠÑ?È2S™±» ¼ÿ•ÒÍÉåŽÆj5o5V›.üç)`L8§.Qpˆy?7ñ%:ú· ´ßÇ—'Ǻ1)§!Ð}Žh Œh´ÁëC h@£ #´´ÔƒèK»hI¼OX@°@—'3`ÿ>ßIykÊ ww¦Ûƒï$ô¸c_¦l{bE1è*ÍæjÕM‚c¶…O±¨w`MHÊW°n`MÁ±Ãåa\&cÒk<2‡ N!þJ…Ry b•á6ë‚V$qÇ÷wiÚ>Eóea&mÆÏqÚ¹[^6ÞÏ£ìUè(m’JXîÍ€VŽá—vìT…œˆæÞQæý°j‹Vn¯âô.êBσd°s É p”óÏ?TÈtÓVÓÃqð!Ð…Ú¹åóŠVP:äàðp¾éÓQ”½ïpGù1hrèO²Aì °¼:“Ðü,Ü iÞÅß>=T {Ñ@6Òa]Áѳª&6ÕËžp1q” »Àsºú¤öJ›ÛŸÆŠéŒšâ9\ƒŠL‚NºDx•ßFmßÚœ÷ öË;MÂL’øˆxKðötJÙ¥úˆ¯ZéÓ*3øIY°:"<;¸_– K£ýRÌÕ„=ž%#c‘è-‹þ‡d›´*iÒdÖ6­s3ww5^×Y®ù4e'³}§êÿQŽT˜ÖæPÞCaaL;€ž–_ 9®™tîÌì纺qa•7݆QÎÈrøïnÍwS·IÏomê#„Œj ø?ÓjÛq«yAäì’(EdßÌluãa‹I™ÆºìHö»9<Ê6 9t¤§ùªÐ&|Q&¯·•× ;溅‰c̘¥ÜiHv¦/.`áh«?F«šCöÒ@tá rx"Vo˜ª(èUJûæ*U/y;ñœ©®ö3©¡¨0¼d:  dwŸFÉ’ÒM ö+Û’Ð(ŸM´>J‰Î*ïO¾‡9#¹^¾Mg< 1ÍòëÈé¬piž\ ›$A)•öÎ=“æø§wßÄJ²áÿ£Jýö{¨’„ÁRk™¿*HniiYr¾iTÒ¶”¿Ø¦g¬ð§ê§Ð½ø8þfÉx–B ”+¢fû†·4(@rTç$Sí†ðqèUÔxße<ßws„FsUÀOæH‡“\Õh`S¶2Dx;^Ái­µ_U·>m¤’ü‡/q[÷»|®fPTaÅU¾¬3|mSºU¶6Ÿrìý'Roü„kBk߇7Ý%û:è“k(ý°†Rd&ú?>Ðh¯Í$ÒJ`!1íácá>ª8ÐÏ+‚'g&¼£eŒß#)ô¬tm¶û¾ ;ä{Ì^U±Pc¡ò¥˜‘šÿgc‰«¶»¦<=•ÑLÇKJSØþ*úƒ*Åî~‹E]l ³SW+™4BWø’Pd‘üŸëg+_ÅæAûXT uÞÞîÒ›¢Õ¯sàÍ/¡ð×Às>üˆtÁoƒÚ—8Çhk8Cü‹UÕMû­œöÖ†ÃF•‰Œ¿cÂÔôY4c%™Á×ãRKsÛSo¬=¹ôûÔm#A#Ü/ý¤ûB¨*0YÇÇh\NÌHÙ'NP[¶-HŠ}¥ßkml(@$¦z„¬‰Üd.„ŒGù§8P¶DV·UâáÕ&>ÎÁ^ƒÉ ¯ÓE E®›Ï­)ŸYBož&<Å70IÃ×pIŸà—›AHezÕrÃôvxVÌ?í©)4ºÇ·–“X¤F°Šéu†DGãÕ”ÊœÕ eÊsß›ƒ¢DϨ OŸOÎ+fiò‘¥áª«´T1⧘Lën•¨@Ì£j•¾U!Ø&Ó6-“3mTó‘Ì9©<ìqQüƒÄÖÖg÷L‰sÃwÕÈÆ…ÇÇÜyls8f퀌S½Zíœ/íÏ͈j_dO7yPx¼'ªÝ€.lÚGåÛaòýoh;µݼ¬UÇ/ǵß{ŠJËö;ïZ–”9Ð)4;Ð9 è•èvG¿ ¢¨[sð(Í5ü*¹ß_¶&ÿì¯Ol‡<[EÖ öf›Š›[m×lÙ «A߯ü üŒ*×¹4Ì~féú¬¤úH ±)ù.EÞíjO)]·ú`é:øbnf¦Ïó J ùÛýûB—½Î@ –DuÛ–(;?ÒÊÎ>ÃSæhóö“¸ˆ/…¤B/—{$0 ÷fˆ÷ûÎàé)ðˆÿ´ç?¢=ÔçpH^Ί¸`êT“¡sm†*CÝ8%íoSÂë¹–Á§Äp„PLÉRЄ h|Y|“æ;cÕSi2K°ÿ&>9\„ O4ŒHŒØjisÁ^Ž­Y^SoͰG)1éÙþsC JMø2Q´™i‰‰NÕ!Ô‘64i&KL’t鈚,zÞìˆuõ5ÒðyZØ”3b’¸ëÂâ‹VJ› ”eA¿,}™Zóö5}*d_ö`M£÷þѧ)„úD6­¢_Zt ¢6jÙ°zÈÑfÙ)õС¸«ì÷lçékIŒª–gGŒZ¶²·é¨¶ua"w5¹þ6vßÄŸ“Z9G4uLâ»ÖŸÊ¶è(J8—i©Æ­•{ÝZ5Ÿ>ÅÎg²:Àªvȣήë¦å_Ýe0[d@UYwy“¦ÍÞÒqºœÊ D'uî“û9¼½ÿ¿ ¢(RŒòÅÄ™”v±6"üwal¹JPÂÿî©Ëô endstream endobj 127 0 obj << /Type /Page /Contents 128 0 R /Resources 126 0 R /MediaBox [0 0 612 792] /Parent 119 0 R >> endobj 126 0 obj << /Font << /F52 5 0 R /F1 39 0 R /F109 37 0 R /F106 42 0 R /F107 41 0 R /F118 40 0 R /F156 76 0 R /F86 38 0 R /F112 43 0 R >> /ProcSet [ /PDF /Text ] >> endobj 132 0 obj << /Length 3757 /Filter /FlateDecode >> stream xÚ¥Ën$¹í>_á[ºtmé-%§ fH ì @ÍÁvÛ3ØãŽ{ìÉü}DŠz–ªºË{°»ª$Q_")êOßýðAš+&!5¿úxeø•v|…¹ú¸¿úç†m™ÿÛ9ç6¿øÇ¯þïÚÿ=ã3×›—­Ð›ãö_ÿòÃůÌàÌÈÐ8pé®vÜ8ï·;Í7ÿðÿÅæ¯øüsä§¹†AÜ Ö^aÈçÙéÍ“xõ‡ýV°ÍÝVoNÛtÒcâÔæy‚¶‡½ïöûíN »ù–PõHlcƒÃ_üß>ù¼e §ø f®X)ö¼Eˆ¸^xð“ÞV Ê÷-Ùfð¤âróa %Nž•5¢ó“¦S‚ aauÞ@ÐÓ–ù<YÿÄž#6ŹŒ®øà__=é"Ã<9¢rF9ðÞôFîÂ#|ý Ýé=OŒLŠ@=ÿ¨3¯’Y³"œéd ÷¼ÐÝ¥XÂwüv»Uú ^¨‡ÎôBÄnR/·˜v@ÆŒ5G*G{ÑmµÛVH¡g>Së…PŒ"޹ƒÉþçÁ‘j†¨h*ŽÔM߈¯Â*z6’Xø–ç¼Àð×Û¤#™(f|øú]@-5±í& ã:NKÚ“È¡KœYgÝ—5T)ÆÇAjöf•ò*ÊÐ‰Úæq2w =¢žï·/Ö€Ò@ ‹É_à…– “Êv™ÃLµz@G…õíQaý×›HÐí£è©Š|ñO‘‰Al¼:ü:Ž_Þþc¢˜cfsÌòDiù; ´Æ4{ö1]*…@¥à¨¢¯Ú?Æ!Ëò5ò©|ùo‡¨3ð\ØÈQ¯á_¢¢@¿.Ç•üy4 ™èß“é~8ìפ䷠|¸“· óû’«ã6ðHšèm¾‰6ûh«kY̶J·>ü¨ç6 ¯;Z¹zïuôZüsötÒZï b E´LM&¢#fNʪµ~ÚTº<–w~E l}iÔ:b–¼L§ËÜ—Ñ,¸/£n6 CÃd¶Ë]ΖYÊ9CbT<Ýo¥¦…à8Ðêû <…C8 ðÀ3ð?%ËJñ”úWú0…æó¶ÆÌk”`5Ùb—“ÆÏ’€h’yZ±ŠVå¶Étm—HÑ1ÿÑå‰bôÃäबí*m[Ü*\ ·ÒäÉŽÁ÷¾ç‘—cȺÄî‹Öú_´¿"¸‚@0ð~Å ¬K•þñ7"Ñ£èÃÆÿ„M°A–v9ñ  &«ˆtŸaD™ 3‚gWá.7ŸK°ÏkØýñÂ2 ‰!NäOÁãÚd˜ÒÍLb‹˜foªÜóaH­:“¼Ø&¶#Âþ§ÚÑF³dÅõ¸ù1wl¨—P _™MÒÓ9FŸ,ò¬œ¿ËFDø[ö6A÷qÒ~è'Î.xu“×Ñ»´¯®ƒå‡¤Lc‰%…ƒ}ËB Ä H¨a`+¯Ú=„ZØ=„îfID„ŠrœÒº@=ì!kT)¥Èỷ€¸27yÌ”Ía÷Ã~ž ]]JÈÕÉíxs_³SuÒLEC­hçŠýë?ÅlUt×¼‚Xm¢­…á‡S?W¨·Šúš½åv³EPQB:HNŒRìDIÁÂÒ3°l}Š ©kØo!éá~Mþ2ø˜Ìƺ:4] 2ÍeA¦æo2ÌA¦ó– óM³ã°YêM±›mÌ!aŽTx–D¯+b^ÓÑÚ÷.áì ™YœQzk§"XùC¿¹ÙZ…Ë]'D£3¨ë™ðõ%4ìÛ:†Ÿ§*ÎÍ>’âÀcí!Ú•¢]òm†ó@fgmÔ;§¹0Ê¿­WZPf™„K>à/m’9ºN·LåΜ6AçÒŸŠnÂ!çŸ÷íš&Þa'Q€S—µtKŒí¤œMÒ ŒrX"*x×Ù†¹¸Q«MŠyÓ8EtTG~#Sg²‰/CSÌÊlìNØq˪ŒéЃR+ÏYyñó<Ács5Åš0‚dÐC!? ‘¡€ÖÞN6§Ǹó=O}yï3ÙYd5ÖΈ'rCŠº ¼ó{~Íñ@"I?¢j?P·è^PèW¥m|3½×bJÞÉÃ{+òðlóG?Æšà~àXlÊÕg'¾=ü†™#ËÛԫΧq'r® ÓZŽõ²3¢tö@Yd-lË•1‘…Ž ¾†éúâ‰M¸†1ñ>­ rãØ¤$´ºœQÃOQÔÆq&~åÜ„>E$I¡ßØ/>€†äxm*q @;Á¥ÉPÁMÒ<Þl&ÜL6áàç!Áú\‡¡“sbhKÈsÓ CfhÅ)Äí¥Ë©“ ~`ª ‡ˆ›KU˜„@0¾¦”=u8T*…AÝà·Ù¡§9¼º %¾0ìâu ×1)ðuÍÑà[YáZ;—mocl•Ûn1ïå¶¡Ï4ƒŸ£Ã*ÇùƒWß*—"96™ßqšoj,ûsÒÐþ_9ä‰ y×ñ¢!ñ<ü6nÃOïX”VÍ¥ Çj!¥nr,pÎ_rŸ++R¥xÇ:(Qõk¬ƒâK\Õ¼ÆQñuAŠ AŠoD]TÅ¡t ïœ÷¢R­B€ÌY’_v€ÒÌÙƒ+svÐv‡ñ*l,c†DæÌâ\¾TÈÅØ@º…³¶´R™åD6r"]'d“Rø÷ i*]¢©´5M%ˆ2ÏDjÎR¤#›j«,|Þé¿n›MŒ”UioK+dÈ•eœ•f9jßB¢tãLŠf“2`|%Í¢5áŠò!²^·TöÕ©UЬÚLü° i… F 5[§†z¡©\Éœ*$ô©_³X‡ØßÔg 3'GÞŇJßÛ‘ê¹Ñ„I.Û·ïÚqY¬+x¹•´plŽÜ—|i]5\ÍLWzÚhð£§\Ž“F;Öøºãå•:D嬚qT!"h ò6q– ‹E'ÅN2V½°œ¦=7»Ò¢>’9^Ø)4¢[¸ÀØüZ¡±·Všã)ßýX;G¼4¹ó)À+Ý´$KÑu,'®£XírÑJl¼DD%[*ŒÅŒ•‰ñ®[KyQJRû:0í§FöÉMÊd:àa±›¸ MM¥–Mrîpª#Ï:in]!Ôf\ÂÒÖYûí’ˆ¥¨1Ó¤ v>•¬W¢ª6{ÕÉN¬,•ËÅ¡±¼rh9”e²–hĦuÆNVýÚZx±à!mr6®ïõêŲæ5ÇÀ,ô±æ˜Íó@²E«¸Ð£¿!Ü‘p>€×á©lö™ ûÔÖn);ŠÝ“æð›5ëÒ ödÝ9µ%ƒ)›ŒdùЖ™ÒêX’ŽðÖu4ÜÖ¨pcg$ZÖH<ôŸ•xhÄrcæÀ"£ý«T¾±KU=ÜT=ônËg8%˜Ûª–òô“ˆQ‚ ¯ôXF~9¥œ?¦(µ[á|¾Ðñ¸Åóêf“/¬s] Um”óFóoU¾«&ÿ¢Ö9[|áü_x!ý¤VÛ·àç\)ÈcΠ"Øù;&ä¦OÎ|¸ZL‡æfñó…G΀T¢Û¼¯rA³fsUé·Õué·=³ø²Ç6&Ø¿ÿìßá|¼£à[ßMDzˆ7»kØ"¸mà7E%¶ª ­VÈèȤˆwwS ~^ÊuéäÝ,Hæè÷9{/T‚Ð1”›‡OÛ:‰¶•RÇâÖßéå“Ѐ>å×”ŒëÔ”®×Y”æUÛ;¯L„@ßœÝY0þoŠ¥9‡}ÎäÍTÆj7H»ö„Sr´ùÓ™‚Xʦ6ie¹®¬),rάISɃ4½t^LÅ;t¡F–ƒòí9Žä<Om¾Ï%Ç ÏùJm¾.@'þÃÎu 0@N†‚³K¯‚À°·M@„\ƒ_Jr”„Qsy×im’Iâ‚« ââ« ;©äæï[m/¼C³’ˆÉ)ü>& OF;]€öâ²QÒGݪ×úæÉSuæ2Eµí½øîÐ%NqoñnL̇§áܶÿ\ÒkZ^iq]œLìC÷º†Gþês­æ$FáŒPØ6É¿t‘/1Õ˱E¥0‰œ‰+iP2çP 5Bt=©>˜¦º<5sçO/*Rg·£"”é¯eËWm饿”ŽNªí†ÇK ‘]oR,•Xv¹3I-À^‡~M@oÙÜ5ËÂ>aÇÆCcñnVpnÊR[[¦kOVÏÆ›˜Å¶kn–C÷öîbá[S:MnçÑ†Æ Îat>‡©¡£'ÂFue½+¢º"ÊR¥â£Û§‡ýëÎÊŸqY§Ž÷"ávq1ã@‘”)÷Óõv!ŽÇæØ­½E\Ôë,\à ÷3•˜&& ßÌ¡ùÝOßýTH0 endstream endobj 131 0 obj << /Type /Page /Contents 132 0 R /Resources 130 0 R /MediaBox [0 0 612 792] /Parent 119 0 R >> endobj 130 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F105 26 0 R >> /ProcSet [ /PDF /Text ] >> endobj 135 0 obj << /Length 215 /Filter /FlateDecode >> stream xÚm»n‚1 …÷<…G{HÀv“FH †VÊR!†ŠÒŠ{ûþ8?¥e¨¬Xvìs¾„¡oÁø)Ž ë;9þ¹où¿‹Þl'0>¸‹ûÈ›‰pU×›FJ’õDr(¥K ¢ê;,qJŒÛObÆo«Îä#nÈ+P¬ÒªÎ;“æ>7Cd#vê1ù$øjYqÑÕÏ¿Šp ,r×\H¿ÈsÁ·Ù:IÆ×„ÇûBÂöÆÓmb©u{;ë¶¶iðbÎàåï?j+Ú¦nRÝI.K. endstream endobj 134 0 obj << /Type /Page /Contents 135 0 R /Resources 133 0 R /MediaBox [0 0 612 792] /Parent 119 0 R >> endobj 129 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/startupflow.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 136 0 R /BBox [0 0 365 522] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 137 0 R >>/Font << /R8 138 0 R>> >> /Length 139 0 R /Filter /FlateDecode >> stream xœ­WKsÜD¾ëWÌ ›òNæý€U)ª(ïpPveG©Õ®£• þ÷|=’F³&v²ä§ÝÓýõûÓG&¸d‚þNÿnºêÕÏnU’²7?O?ô·ÕÇJŽ?Oÿl:öãê.ðG²õM5š‘,:n¤²Ì(Ã…slÝU›Ãn{Åþªûîrý¡’Îp©ÙJCÃÃÖÛê‚~wÅÞR Ëp£«hyti¯¹’1©öÍ®©M²$¹µlýkuq<ìšþ‡Ëoª×ëê÷ÊðB ì/8ÓÛÈL0†źJƨxTY²«”Ô†;@öBs É:ÖI®-If;‹Ä ÔàŠWï«ëórå-÷"¦œâΧ\ýqAIXIå´à:åÿ“F nS/ÿ\ÿRfÈÁ¹Ò†I'øRtÓ7 뛡n÷Í–µò(ójJ¶õP³ãÐßo†û¾9’JÊ[àΘ„³\E,@DËTÐÜ C}óbˆ#¤9:Bä€È(@D”Ô Ûfhú°*”©D5<Þ5ìp`u?dLˆM¿&+S–´´Ü¢h„©Ý·C[ïÚcÃv‡M½KÐð¬@¶9ì‘-¤s`ÇÇãФ>FX.)¹¤óöâˆÇíþöíå‚]GA6T@.¬cQIŽb3 =v&vƒ$ì#Fì÷w(%’v7´€H~÷%òz¿eÃa×ôõ~SzNª61píþ_RÑ‚Þ*ͼâZ8€=Ô}[¿Û5lÛÔ›¡}¨ `šYÃu ðíÅf×6Hlß|¼oŽC‘=‹ù°h‹¬E¯™”ZÓÄi Z e@I©Ë4Òã- xP ‹…ˆhd1ªÁGîc!¹ùvy8Mt·H²Úb^û §ý1™×ÁyŒKa~‘”æ§¶]Ì/j…ùˆn² „‡>àè1iÑÌ’h—“yC©°±0?KfSåÃYR8TËÇ•ñh/OÓµHŠxæŽ)âÉj_Þ2ˆÄbÿ3…­ŒJ-s×ô7‡ñD¬äéfÀN|²´DÜ (ŽÓ>w²§ˆHžCã§AŸÐÐR~fI}8 é×Â> GŸ&‡®ÂÓìXÑ /Ù맬pã»´‚²È®([{‘­0oµ®05«]W^zžJœÍ»€ ÅO‹–7ÈšrϘ÷ñÓÃlj’ì ã‹CÑÒ”¶ìPEKl¤ÐÒBbk‡Ï9̦²ÃÅøâð¬[/a ”ƒÅÈ!ŸyÑ)áñð¦A\°ù¤ˆaªo×öc…YZ¦¸WÍñ»qPÜi3ä‹[VoÓ^Ž×qjŸòlј—õñ{VÃß®_3ü6½ÓÒßü„ßÜõíÇîŠÝµÚÞš íø«üÆMœc|ƒ×x—îÀêÜŠC»mn›=®Óæ17oT15…T @Ì3À­Â™ñhEÚ¼28äµl^é<¨¢yIYìi4–æ]ÔŠÙXûB{Y ì.SlW…Bå­Ÿû2[Ï’ÉRñ0K>é/"\¡ óY2#€¿Ü–Ù_–,þò»Å߯"‹nÑ$æ'ÎñŸÙ¥óâRæ‹;n¥pJ:²ÒD«n=ͳqÞ`„hg‰×’¦yLÅ_<Ì ýÌ™U`‰&’gãSôKŸ‚pȄԀär¨ U†(…wc'i‹êySH€T+GL®@šMe¤Y’~yÑ(lKo‘JD°Q¯û~?® P0ùZië±¾Ç%“ù¦÷Õ¡UšzA´ê þ$§<|ŽÒÍV/S:9| ÐE"EУg‘ 1’" Ò!KI1Ûóæ(f[àö$n3Ùþ—`1tÏçsæ^j)h¡?`´ÞeKÙÝ,(Ýeª¸|£Î6R ¶¤°YR¸³•Ä+(lV;ƒá#›¾×,êÔømô„åÌáüÍŒ {¢d ³„€NIžËÞe‰‚+3në™?•,¦–Ò,–fÉK–ÎùÈÒ#£•bä^ÛÇ}ݵvl»»]ó÷òµ Ç‚8¸iÁvU¤FIŸ¼–;òœ%Ò£]æ4Ò~âá(!È‚ÝÂÉ?W&â endstream endobj 136 0 obj << /Producer (GPL Ghostscript 8.71) /CreationDate (D:20101231111147-08'00') /ModDate (D:20101231111147-08'00') /Title (/cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/startup.epsu) /Creator (IslandDraw for lou) >> endobj 137 0 obj << /Type /ExtGState /OPM 1 >> endobj 138 0 obj << /BaseFont /IPUGJF#2BBookman-Light /FontDescriptor 140 0 R /Type /Font /FirstChar 32 /LastChar 121 /Widths [ 320 0 0 0 0 0 0 0 300 300 0 0 320 400 0 600 0 0 0 0 0 0 0 0 0 0 320 320 0 0 0 540 0 0 0 0 800 720 0 0 0 0 0 0 0 0 0 0 620 0 0 660 0 0 0 0 0 0 0 0 0 0 0 0 0 580 620 520 620 520 320 540 660 300 300 0 300 940 660 560 620 580 440 520 380 680 520 780 560 540] /Encoding /WinAnsiEncoding /Subtype /Type1 >> endobj 139 0 obj 1520 endobj 140 0 obj << /Type /FontDescriptor /FontName /IPUGJF#2BBookman-Light /FontBBox [ -109 -241 928 734] /Flags 32 /Ascent 734 /CapHeight 694 /Descent -241 /ItalicAngle 0 /StemV 139 /MissingWidth 500 /XHeight 563 /CharSet (/D/E/P/S/a/b/c/colon/comma/d/e/f/g/h/hyphen/i/j/l/m/n/o/p/parenleft/parenright/q/question/r/s/semicolon/slash/space/t/u/v/w/x/y) /FontFile3 141 0 R >> endobj 141 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3715 >> stream xœ—{TSW¾ÇOrŽ ¨Ä\‰B¯bÑkµŽ•JëTDñ*ˆ<”@x%< ’ð í %@x% áA—ˆø¨ïNgœ©Ööjm;XõÚi݇îº÷µ3®ïw­³ÎÊÚÙû·÷÷³û»‡‚8Ï@(Šû‘(UÀ®ÞÍãp¥Ž–Õø" ¾x¾Ä‰ Å¿®Ÿ»,AvWç¸W'àê¬_áû£\ —?y}®I¯'÷{±‡‚Z?Ø‘ú£ÑÄ‚±ùƒ5þ Áùc÷¿aºO"D–îëךsúHU/& åùÚSÈšµOÉ/Ù«"EéKGTZ9)j*árqlÉ?,õ¸¼Œ2à´Ÿ;˜óÀ í1œ—]‘]ãõ1iÎr‚Í;íV$åÜ3ÖÝ4 °oÇ7 jðÆ£X IäRNƒ6üÚ(Ðí¾Îr‚npøåÉ"ŠÄjO>Gáp¿ñöå㧃'`"ñiÈø¶k¾&Â`Ä8ŸÚ¬)ª–?ƳJ:è>V_¡©ª9£îr‡¶Ú¢tÛÁ§`“ts|dtÈG)+@4ˆ¯8\­Ô¨ksÇÿü ÅÚ>`ý„^FBˆ ¦‡Fž o Œ`”Áae†€íÀ¿e×`l7w4c ƒÓµ—Î`ÄÆ·¡Y¹ô(Gž°{îÃYç+‡t6fSï iôkvG,æ>™Úø½p¤÷¾¾×Ëoó 9, eãO'?¦OݤÒT|ô7SKÐßÀвùø]ô;ÈãkIŸðö‹%VFàUä4T•Ô 9D¿í\Íj¬Žð¨‡—fH7l3ü„zµ¥á!\|'‰pþÞËRíâŽïžNp SN'øÚÿŸì.E;ìÆZ¨'ÕõŠº¼ZU=À¬M “æi⤕Râ%ÉW•ŒW« ‹ò Iúu/SûüCXó•þ!žAQó9qí±5$ùåíòÛÝ›üKÎOÊ3È@*#",aKpˆ±/ÙK®Ï×îÂxÔvb›‹•ZÙ3ßsø`@ׇ·~¸™`_¯gÌvI¹â¸ò#K£¨:¬·ÇrñÎõƒþV/ ÕŸKNîg¥üm Nz‰¥pgõ1'vÿÊ,åkâ! ¢µ|KfKNG¾ \ý†Ž³iž¼Diž`‘’Óß1a\ŠºOú $¾D8í $Ã\<õßàN3õ7@8•‡F(2Ký‹ß*Aiƒ{ƒö £íµßaÂo½2ÔŸ¨Þè•„‚¨ ‘!ÝÈïÊ盾¹åÀtø>¶=¤.p¨¤ª¤œd½Vc=vœÖþÝÃö|Ó( îÇ1ØI'\óTe±JÂI ‚°€kßÞÔÝð¢oh—^\Ô¬U­Æ¬Ïì\¥*È€¼²°®H[Z z1ÈEÁ¥œ¶xC²>¢:ÄpEB6F³’ñØÜ…’ÆÌ–Vƒ¡Õ«¬ÕÅÔgû¼»ß‹8îLÛ Œ-‹Zt0±kàÆ×g o5“´áW°ï@ ýÁ£çÌu׫I!Ú©:U²AQIAqá_OÿÇEU(gmÕIÓ1ÍO3qÄÁ¹^ÑÁ†3‰w= ±”™žs°ˆ!€R3Zx4®ÍÙÚÃpñí¹£¬iÁ}°ÜçÙ)8 zÒ9;bÁ`+ˆèH»‘kSŸcðµl<¯#¥+álHK ¹Æ%>ˈeAÍA§c˜}‘—Å߃«]Ã0âGÈ£Ÿì)¯¯ÕëM–;8ºÄ Ѥÿ¥—)15ê¿ þ#+Œï¥¼˜pzGÒ‰GoõóGO­>¿  ëdcmVÛPQG:{M~M–6K[@:{S£Î`MnŠÞ·SʉcƧN[°C¦nˆ€6XÝ Ç{^Þg°—¬-ø0ž¡Ãw¨×Á%mwÓˆµý3p ƒ³|¿ þËø†J»÷–›ŽûÚÐäcQÇs›Á= u†Å(?Z¯y|ót^ªÉ«9­:™<Öì<ŽX$à%çíØtövÂ`|×m–“W<ê.‰¾ÚùržçÝ^@ûU #oÓYå™UÀêët¦{žNÝNºêhCgG«©¡tƒóü‘›Î\[M^gàXYu!VYT¡Ö¬±¶¶±9£>UÀË“e2ŠÂ|yJBô`´I%A]ãï³Ïxh4™Iû Êàó- éÃrŒ6õûOEüÔè…€ÛÊí‘e\WÜ$«¦ ?_}b,hÉm`f“µšé(3ð ô[Ö˜U¬Â¤\3'#5—°­ÜþÇí#·˜d¤‡SÇè,0eD =,KËd†(v’©úwu™,£:æË²uý¹Ó°Š¼áXo³ˆMoÍ€£èű±Ò.˜xAL"û­•(¸¢4ñ ¢†$M Ø‚Ów„bîðÜ«²bºyL@7‚Bž¶Ÿ_Õ˜!ÊÕGi¡{]c¾YZèͨä(ëD¶#> Á;èäH Ϙfm7­Ö´Ö‡Â¼ÇQ2ÏãdéÄ¡*8.´ÛÃBk6“5èœøÔ8^z48ëÙ-imüs’¿dÂ…<ϧ’v؃møx×2]ñ¸0Ð+Yq»tR†.Ç]ϼKúæûÐ}ºvt嘂(#´óÌžï5%¶QìÒÕ³÷ßô¾íe©r!EÅ}“³_©þº½3-:ömõÔ µT–ž¯Ì*ÌR ,—5eë”å9Ëäœ^ñÕÑ‘:K7³¿Sk_`4> /XObject << /Im2 129 0 R >> /ProcSet [ /PDF /Text ] >> endobj 144 0 obj << /Length 3749 /Filter /FlateDecode >> stream xÚ­Ërܸñ®¯˜Kj9U,ñS•C6‰+IåÔ:‡Ôz+½lŲ¤•d+Ê×§h¼HCºr† Ñènô›?¼;ûþ­» F˜Ý»ë;3ÖK»{w¹û©{Ütwµ¦»Ü+Ó}ÙKÞ]ì¥gaU÷¼çÝG|íïuw?}wOoðU¸=ÂÕmxÿ´çðô¿ð€ÜÃåu¸¼@8÷øç?áRãþŽ ¾zN°º×räÕž›î³â¾D4>†û¯~ Àô3ý³Û£_Bup2íâ±ü/Øy9ëi‚õ×ýaèÒŽaü9þ»Ýó¦›8ó}¯ûýÏïþüý[Þá¥sLöv׺_…1o4“fˆXãÖÅš ´Íx÷rp¸GE¤M¬à%ÉòîîTüî zÁ”P»çlÐ:€¾†Y÷f‰¨(Ptǽ¼º)Í‘*ÜïhÇ‚³l2€û·N.´Î+ÃõwlÅ?ôˆ»ºˆÐohæ]$™qÅ"ÊKÈýžÓaHChYx(h)ù”H<4”ÎoQžðõ?/D†eD…Eôü;" =éÍÍuø%¤y÷Kb\àtÎ<šžÿ‰_ûÏÃñR\VúAq,P7ûŽÆöãúÓ<t‰Çg³<7Oáw=õ~:ôå8v!Wžy?t¥TþôŠÇ{A“*®·hKdT_³hý¤í=ýðw¥P ôG½GØöõçšY%£êù=ìVtÿ€ÿ²û‹¿þkCY ÃŒL Ï+óÛ[Dw(Ãb—9Oz÷5ìÐÊÚ&²Çn œ×÷8çÙKAºŒ úxJIoÚpä¼}nk¸ý HÑÑL:1alV:Ö–”’“@ñ•TÊðg¿žÖÚyá¿"‚å>÷\ðùH|Á›óhØm8÷åfhÍ#þˆœT'vØ(' [|"&ˆ’Ùcă,‰w0ÌŒœ ÌP<«Í›ìïØløÍ WÇÁYü¯`åÿúcBPrKx¸1¥k[H2#ŸC pωµZ ATÕ_ô)ünP0ÞÕ4výxŨqt¶MŸHþîÂaÅI™G9 ŒtÉ€øÁõ‚|™]ŽŸf—ãËìjYÂÀ­–>Ûms[zwIΕÐ]iO£§læx"ô©-{Þ)ÐS\\\µt»ñþÚ¯ ÞÌW¯E%'·†·Læi¬B²ß¢p`“@r¥~¤ûyɯmÚî ÜÔ,¾ò^2Èoã‹Çwdy” ÞÜ]¥Š‘OoT^ÒŒZð/þÆG‡äÄXžÇëÇü{OÒ21X8ãHd²:˜œFÜ0s)HûôfÍÛ½-\&›<ÙÈDУkDOs½AôNÎ ùã7¤ÐR‹ÂÐ*a~G®¼¦.ÏKyMCj§Ç7ˆ ²yÚgd½à畲ˆ÷ĽbhæSò``ýÒ'%8k|Ì_éAüÍ&ûhº’JY[¶|€âÀ">ó¶dŠÉÁA†uB¥µ¦ ü-  ïP´/ÁÛ ÇL¶_¿Œ«s°ì%†óOj):ÕR¿ þÂ\¿—whì'æl ÛlÓ'A$˜½nk]|L;%HýTSೞq a˜:=ÿ½.ÎoÚ'¼NzŒès4Ôçü–¿©ôÜ£¥¸IŽÑÔ¹Á1ä@â"ãéy+‘Ž˜€j¦]F̙Р欔uÉëDÞ¯ÒCÜÕz(ÀYëzçFÙ]؃@ïv$5ÓF…qÇýXü= Ã@í …Ç@ºîGâQNdL}­ž 5€7­×|c\á’¿u:}€mP>-3ÈÈBŒB/Ë™¼ ¼IB…q;/Áá»–y7^ÎÁÚJgºw Õ‡ìé˜bì-×DÀmç•Í0´M1E«ïò²F›‘zç€tFúD¤Î)ÕxùúÏ‹ûÛ˧ç㣟óÜJMJfâxBjáèGýSÄ äÉŠ‘V2§ã|?Ï»mùi鳪KñÿÀG¬Ã%[êµ.ÀYª¾ßÌÁ’-jÁìàJ>î‘ROÌÇØ U°1ÚÀ>¿½‚SÁÛ83b”ßXd­ÚxJáY+¯ ôç24¾[+êØr8[bF¦ðͦšÇÀdêM‹‹B*¦Ô¶sh˜æ)S×Ô%<ºŠžx§C¬þ”Ésñ%)”ºnSpœö³¨yè5úQ„ýc:5°áœ‘2ódàÙÈ‹‡1מÓhô¼s°ñ¼÷b–7~5'å”d\ˆ°£¬û‚„Íö÷2êùÁ‡swõn|j¶—žxc•0õOäœj;…zá1É×Ñyí§qqÔ97É»0Ã6²ÂøyÜBö5iH¸­vl{O¿W¸ µƒã>9T öbÒ'.qû¡°÷8?²€Ð(’ÓýbÍ4"yaÑ 'gÍQqrŸÚ·ô>=e›Z¼¸)hݘеiéݵœÌ“aü¼òÉï1×¼„Œ”4nñ û('CJ缑x4Ý7"D2…³'™ä€h†1ËE^Ò—ýã‡Êm[²m%ÅsÔã 2CÍÁ8¦¥ž¯9€ç×22çÞ)}{LKk4r¼ö}xXd›Iƒµü—¼R%˜S“½–URv¿…$)Ö®Wî¼ áŠl`Y{ñ s)G|‘ËÞNnªñÆ©_ò?\¢*š°)Ño’n(ð«‹Òƒ[Oq»*V ¾dbòù—ÐP‘}äEIX‡µíȧ°QjuŠËÄ"ÎdŽÛèÙŽ2QU ˜r(ÓeŠrŽy (%+Ž1L8 O#ÈÈ08ñk»˜™âÌ5¬)C'UÜYÊÆá™¢0ܾSŒsC̦ü L®3r‹tÅ"@>ÃèÜ®ô^ ÛZT1-lÅ£šÆR8&µ]Cc –S™;¤2h/8¬"ò§Zš Ã×*”š£%£¬ê¸ÚA¹öš0©¨Ñ_´ Zéü~jÇpb‚ãQãnŠfŸ*ùªT&Þ“çE“êŸ>•nEá!‹5…°°HUÈî_ ÁáÀaSÊã½P²Ùo§rËÞwø6§¤nœ'ŒfõíSÜ'9×bäõÉ g?P"|ämŠÂ÷}&Ïp°¾Å§²$÷¹Ãeš*ؤÎ%÷^ÕMx˜1*ùÔXbÞ*Ák±„Ü9¡=,FË뮥61mßpwÿ¿k6€Q&DêÅZµú€Íö.2„€¼Ê;&ŸÕ7#Ji¶Å,RÇ '³Š×øb‰uÒ6LƒGnH$§†ÿ€óLÊÇ0¯2Ÿ!šÓb="$C(u f0 vËJ+#v‡<¨Šüä(#Íò&M’ÏzfH…iX–ëña;)´ÂljíøßçaŸÇøðöæSô¥n_ãèy³m?—ñ4© 4_„$}Dyri-eeµtoN÷D¸ðÅÝ…­í¤lSqY Wã˜MDMõ3"ÆÁ©(ajX1Ý;/bq”Ϫ~Ê.|8b>Š FõETêýh §xœ| ?×¹=À÷Ð$Žo’žS#e•gÅ-WÆœ&ánÌ}ˆEÙÛפeÎý 2}÷wÒB×eÊå9JÏÝ$³p”Z¥Á¤óU$»û]êýq£çi/SHZÍuq*òQɯVó>µÇ“½ÖøŽZd¡ø}BSÚœ±«k8v>e— ¾:\Vö êý!-—4–Ëi¿#‘·€nâV^ÆyH]®õ£]Ö®‘î4ñäÔÈNç¢ûèƒ|µ½X϶üêlUý7"'­ªŸÓV7´Nð#Ò’Eæ÷*¬Ò6rVׯgÔc†£l|&3×t“5᢫”zê\­f|”Ÿ+÷Æñ2p›Ú‘_òWÛ…KOUÍ3o:±”>bΪúôMJX)²c+–ÚÜüÈ J ·ú( ~U‰°8‘bsÛ€üBQ_õªûN¶(Ó¾×ÑVS7ü3q³ùj˜(£ +u£ø-ªäãï²rƒ‡¬{Æà^{ÿ˜w¿ ý)*G9G¹) ,¢6È©ZôO[ê.Á™ôÑ4QZ:S0î§¶{fƒèùD ˜à¼Œ€É\¹n˜ ,¸aàNBå5ÔÐáš²ܱÍnv-%˜±üw° ɸá[wñ3õÍ+Ù“£ÄÁÜg’‚ .%T°„È®PrY+©XŸSvo‚íÚ’ýP3á©Q'ò/²® UvM?^¸Iv=Úœ’ªÄ£N£Öe±–-¼Q“ó¶PºòæuýÒ½É Ëúq£|)« Q±¹ãö:ÜGm¢lúšK¨¡ø®²ðqü£\ñYÊqªšù<Êψv_**åÒ­v5÷IÎ\²©sÕŽ;öowEçL¿|0. /ŸŠïâ÷T’šÈ}‘EÚGš.uƒêÔŸ>Áò@ë¾<·¦‘ǹä—GP[TŸ?+Ó‚õnsÑß 9ýúÐ §¾‰cº8~C«vØc> endobj 142 0 obj << /Font << /F52 5 0 R /F109 37 0 R /F47 4 0 R /F105 26 0 R /F92 145 0 R /F107 41 0 R /F86 38 0 R /F118 40 0 R >> /ProcSet [ /PDF /Text ] >> endobj 149 0 obj << /Length 3018 /Filter /FlateDecode >> stream xÚ¥Yoä¶ù}…ß2V /|LÚ.Ú¢@ ÄEQ$A3öØk7¾º3^Çÿ>ßEŠ”¨ñÈ}Xk$’¿û"÷ûóß~jÍ™o|gº³ó볡k¼sg7²ýÙùîìÇÍß*½¹¬l·¹ªj׺ÍÞo*#ïíæ¶ªÚà¬[â×-üºãñKœûˆpξ²š@|Û8‡<?_Ó™W•î6÷¼ù힟Oðý'<áŸg„~·­Ú°^wðãcõóù_¿ý¤U{6‘E"Ó5öL1}»×ÿ\~©åý OÏXâlc;&‡í/ù»»J«°a ÄhÒ¾2‚‹Ì">F:qýƒPõ /d;`Fô¦‰¨öï•FTkã}c{VkÝø¶e”ÿXÕÙüþÚÍßè÷? dš®imÈ|„®çëÊ0_h÷Ú¶^ä¬[" ôÀv*ˆƒEp›œV]_-ÃÙ©áø1€ ,ø½Z‚ü…VkEä|€Àè8ûˆ0~aÀ¨B j—¨G¿Âk6‡Å¥SàÛÀ…K$ì&àžyNt]vm`ö›ïÒ"Š(&j×ôƒËe:ephgŸs¾‹Õ°ãHC‚üŽ—=Ë@Ë {ôÁ–áË}¥Åu¢è;^ËúC+fl¥ )3aÒVxD’ÿI)C435ð›ŸT«ƒšá­j(Ô>‚ /{ì6º\9ç,üÅÝ~%!£tT.—®Ž4Á¬ J—x¥LAðqKäç` Æ3’!aú`vð&)3 –GjXãÿ”DÁF̫لº±V|õ!P!;qó£‘}Å£2‹50ebuILo)ózw¼Ê¹ãÕ),q*u{—Á[=‹Æ¡ažh&ë‘*{÷Ên¯ù¥+ @ÇJ½þƒB5»´¦~Ç1mDvsÌDÕ-yºÁŸ 6^EµùöV‰Çz/¢´n ?S‰Yô{µß íéØCI} ^`ð™+>UÇ 6µ†z˜h|x].«|[¡}ˆ‘v”½ÖR"k­s`”€)¡¤À'îBÞïîÁ¥OËLÃ/’ ÝŠêÀ"cmpƨÃ,Ô _háèÇÊCþ½˜i»Á@*Z€sHYüZæd~ÑE>P˵tÄ2 DñXu”FbÍçÜ0Éxhxfóø1<£Š}Í™š„3®²åüµy9L8bmÏø)6¶–]{žˆ·C˜’pšûÊ‘`Så7g!6úmT|T”há¡TÄ@P=ïÇmˆ5—EŸ*¦š%„¤ˆÈ'Ò­èÌ­·Xù¼Û<‚÷G!%³*¸I hÔ º6r6˜ –?ô˜;xøž7yž¼…Sü5PÌŸbá`^-áž)$¦ûÄ­ë®Xk;þ5óPm1²è‰ï-Hà]!È>ÝÉ ó)oV©_Xå«§>Â2¾ŸÅõ1ûí©^ÎN; 84wP–\ìíÐBbV4+ǶrŒNA-‹Òý µ(+ËÍ„]tÀÑw|,Tá®mºv•ô‰Õ·!_)k¾á W›¾`¦ïNw`SEzô9ÉBPô¡˜¿gȉwÀ•bZ8áHöX«Øv…FâôYÜŽ£¦˜¾Ï²-ã<ŠIÝÐtÊÌmÛ0´!ˆú ½Õ£Bµ.8â:6(ØY¤}& 0&é4¼$º µc½Ë @D‚žÑ9`áÂo<”Æ €’áF1Pl&¿aU‰¥"¨§Pë>æ+(úæ)Ç40ËB™š‚‘-Po ŸËZz†ï”.þ?$f:Ô©QU’hB_Ó ÷’Lú©ÔHÜS¶Ôe᜹ €ü–sr×ÒE6ñC5sžG*¯ÐÃñ“ ïAábÎB…|C¢Þ¡=Ô±|‰}"?¶Žç^T;ݘ^§nÔ’5«ÝhºQ1…ö]! ñîn·zÃÍF”²¨êÛ,€r&k/&L»à?¿ÇÍ1Oäoœww®1ºÍí+É߇Ífÿ\¨™,Oþ¡*蹈¬j”µK²Kmf§cp ™çrœo¸!–>®gºc'Z8Êý7Ä”&¾q§G5vêƒ Ücñ`½ݺY œUÂõ±³.ˆJž%ÃŒ”íxþEìCÖ½n@!æm®˜§Xö4Õà˹pR | +c]þ¾ôÕ—rý!>óLmöÀòg¼™øÃxüáú3&Ø r³mÓvŽÉG-×4Wo äÞC ßÛ˜f $:ëIßIOáPP\€mÚF·…®B톄û›:ïΡ:Ýô@Àx õRaaˆ  ¶?Ð/UĦ³Š~n”ÜqÇ»gL·üxK+Êèãä¨ Ô¬óÛ¾@5õ,oÓ¢ÔJ¥ƒ±ˆ}Êucôf8+Ôå´;׉ID§\Åú˜¤Ù£EìÿŒkú¡?ÞF$­6¾Ï‘wÛLÉ©†ñ6;ã±$¢‡LqœÿúÐ> ³çg4i­kà c˜€w˜à݆S>o$#n ; &VôqMqIç^££æZ¬“ PR ŸUñ£«2G7ÖˆWs¾×~“E‚£eþªVy›dV×IÖ袥›i¸v!cêÆ>ˆo×i¶Ù¥>šßHš³o—Ž`±[<­…iç‰õrÒ£GˆnÔ¨«Ø¾óíRÑ|¼eésÃáXÄÙ¦^8l£‘uº.BXŽŽå„†aUhÐ ôSZyvì*à›Dè):½äjK–ÒCB×u+; H¦ k¶A³ÄņêPÊ3Ë<q6ükaÐzYMdå`¹)£Õ‹©sL¢ÿŠ;‡Ôߣ“ÎUƒë¸X„ŒtŒ$ü–Vwä¼ð2tòðî¶£!RHñ¾Ìk¸s9Ì‘$_WccRM )5·@éF)*¯“n*:n݇±o]‘Öª#÷mpðž‰s£ÂòA®.ïFe.J~Â…îÂbÍc¦ª7õ´•\s䎅çÇ’×yDÍCÜþ[™vröµ kk²xН§y˜:MPbr s¡!„ULæ'HLò¤à÷#â{Î#ÿžÕ FçÌ5ºsÃÂå®÷.’ŽÉXÛæ(³pÌ!ÎýXß‘³ØÏ5‰»å +¹w4OÉ@ šç¢kÍ  ƒG2$fL.fX™×ÚôŠÖŽ›Q)ò£Vë„¥sWnÛ¿¶;Ü5¦…ÂüÌö áÓfQ¾Ϲ­;ª^´òfÚ?‡E²è*Fz0Yß´};½ùâÊkÄà©ØzõžÂI«¡¼O*§›ÇÃÑz©5êcÁ´—ÛA›‘ü~b9t±ìI´ä8K'—Æú´7'ÀMr¬=:阬vS8¯ G|Nãm6?xÛœ,é)PG[¼¸ôžz®ö±:XöÊØ¤&Abh—²ÂÁ­‹w„–)Æ;VRÈyÿ)̇Œ²º¬¤&ÌÐŽNFgEu†y¦W;5Ï›×_”§X…OtÜúÆŽ­µ‡˜ÇέAã)HœyB™v}£ãx ,jšñ~¢6œef-rÖU8Y(´;×8µ¶ÉØ6Þé“rß@AEU~;I+Êá%i€+5© Oai²øiZd@QáðûÓ GʤÉZåC,M޼’Þ[ÖßЧtþh ñ&[Ì—ÓsÛÕðã‰üYxOSlúp$~ Ö<ðëÜñ*?—±Vaô»Xߌþý¡zûL¿ ÓÔ¯šFUç8+¼”¡O:;²éÛAîÓ‘ìÙÊi^ÞjqüßÎ?ü—Ü]Í endstream endobj 148 0 obj << /Type /Page /Contents 149 0 R /Resources 147 0 R /MediaBox [0 0 612 792] /Parent 146 0 R >> endobj 147 0 obj << /Font << /F52 5 0 R /F105 26 0 R /F47 4 0 R /F109 37 0 R >> /ProcSet [ /PDF /Text ] >> endobj 153 0 obj << /Length 3638 /Filter /FlateDecode >> stream xÚ­Ùn¹ñÝ_¡·ôžIóìîäÉ g‹ìq€H–dOv¬<²µúûe±Šd‘ÍéCÞI3Ýd‘u,ê‡ËWþQwBï”¶òâòv;Ýë‹Ë›‹ÿ4b#¹ÙÃмuŸ7[54÷îÓ•ûù¼w¿>¸Gªoþé>Â×ÏÕ6îÃÁýÜn´h~Ûü÷òï¸ŽØ ÆøuÚ‹­jwà ù2¢Ù¹ËýÃ}<Âü/›­è\ÑúE¸ÞZâ#6ø<ºŸO~'nàÐüHîç ·â¶0ì+-íDš0wÃ÷¨h¾n}àÀ)\qËnà‰,ÊWØQR&“ã¢I/ï¥î¼·Kžÿ}Átj°oΜ*ò‘™Ü*÷g™½F| )Êæßã|â±"©å §\¼Ÿs90fήyNžÂ ~ñ$T@KÿDZ–ü>º?]é×€ïÑOqØèEëVÓ¸¯(HÂ×(î‘ÌÈ=…e>c4‘ä7ü2å †s[²ÑºgÊÂf‘J˜‘é승**´ ûlsRÆô0ß4é‘ûE d(ºÑ&ò¹ Ö¬Ë}¥ÅH@TI†Û«ˆÈ…òŠ ‡J˜(­¸“QˆØ¿Ô_a©Þ}òJåÁ¹‘ÉÆÙ¾Ùž`1§FÖ1ׇ÷Q}Ü´TZCdmƒ‰ÐÅå ¤97,XR/$]«9—L0Ed["ø¸.“)q—Fß|Û°}>ãü9Ú¶Ò{ÊØ«€ ‹O¨=¼^ M/Qšé²­Ep+クÛ3‹*‘¥|°‚‰ô‰Üp] Ì´>­Xyýrwˆ¾D·¹kwßÉzh–øƒž…/ÌÑkŒ-Ÿ@æXu ÜQŒ¾áTŒÓšü^®š6öLfü¶Æ£àæE?ï¶Ë(…›—fq¦‹>ߦba·TØÊŒ!ån®uUb'…$xãc'ità)*ä@ wÍr[e [ÛÍbñš¾¦ÈxE«v­T<å•>åU>å•õ”×îtoRäo+q(¨ÍÞÛt¢³ ¸ +²ÝÑ&CŒ®1c§„Ü0f*=¡Š V¯ÒšˆÊS#Õ@ül Ã\šä¨—‰w)~çv‡âDb5af!Âç‰D-!©™ËäìÎ)J2±€—L4¨¨ÒUæÂÉ)1Ú~fñêùUR²1 ™¢ RÌT!=<+J>a%`’v`«viåb'ÈopRnVYæ /cy‡@û‡ŒSè@°9•µPß®‹øÛ'KÈ“áûGÇ1ú¯À¡0üxžú3 ²‰;nP ȃ!„RVÖ¦°«Jc ³ÇÕ²¦\’‚%Ôzº «EÕPúy`*Þ¡w¶ÅŒØ ¢>fêhÚWf‚ö´  ÿ~aø‡>û¯×›ˆÀŒÔP-Ée`¦»ô¹¾ K#¤óº’ß3eÄZ~é TߢNöbR»pÏ`TqÎDQ½xYí`¥‘aL”z¹ªÆÐm¥(öóg ª"®ð æ=D,âÄã™ìpºârê”J±ñï_’ìk§lû;œOBóãªYžç˜p7> À£Ñå"àæÎKœä%n°sG)}”¸a¼ç>Fœ ‘‰FL“+zC‡>y€$'¹"‡ÕÂîaršÓ÷–ã5 ¶Ü & P¾'bq0à/óR’¬”TæOeaÌž64 9&‚—°Õ<™¬z24 ­nþU*·1)yÔsbjì©7Bñ ò⺴W•K‹3Y§Mš)ŸòΙ$(KÏ!³¦Ê\a ?Pre€#Å‚GÖ™8 ÎÏM0ßá(²pkîÕÿ6b2P—gBx!Œó^J‹g©.Å*Ïö'\à|¤+Å(TÂ0¹ÅÞÕX"¢²YD_¯SE|±]ƒ“ƒŒTŸÔÕ-ÐÕ§œbÙqĤ~ÉqÞiß;ªô©¾æ‰ aÜJtwÎ/§„+½ÄB™h¡æ žÉý2™¾Ü¿lì¿ì t ”ÑÓ¼XW¯¼PžZ5ð¬æ”ØëS? ºÒyéÌjpHoeƒû¥¨cµ2<Ûçü´5º>®ã½ E!C¼R`È1_ž©.nÀÐÙï/)Tä›ûHòY=• ‘§Øð96V°ó•g‚Ëæ¥‡wß9î´,ʽû8Y)ÊŽï`ô¸X¤çO¶AÙœCECó«Ï€—ÜÈ‚…È•¤8LÍÆaj>C¥u,Ê=‹™uñÊœqñÊDï>’‹Wöœ~ÊäVÌjï¦L³L­˜¥C³Çø´8R¸¬†Àö öù:OÐÏtt‰Ù ã!‡TvŠÝ&IAà5©=|¼gÐK«*;È¿Mó3 vxNð¸hóʛخ¸tЂ“qÇ‚Mù1Ó‰c»ÖwÍ9÷2 ÄJŒŠ–´'fª_h$únTEIYßÕ†›SˆBÖÒmá¼;0c!v3òÂÓ‹vîç=¥í€0•®«Ô!ïK´TSÌ«0bu"±r„™4«²ž§\feÊ¥—¤\f”r¡ÿ£6@iòìˬpÚ*g‹ºìF¦m"É(sJ=áýZžÂœóΫÒà<»Øy‘ÎB’ôA;˜ÉsRCí:S& Ç̤B0ˆ$Ç'‰Gz,–;“w1Ìk w%—¡mhi'O d7o¡ ÆÙ‡JƒïÓÉ$dËëÑ#¿Æ„lÿˆ[ðòw 9Y4µ¾ã] ÿhJràýZÉÑ2ïÍNºÈHÑÏó¸³ï(Þ€A:ñ¨aJÞJŽ_×UzЇõI1è#ïdyÔëVxàvë¡(uê®O=Ù]~xÒu £sf¤>BÑlcš}¸ÁÃèN(¯´¼Åãð_7ñ çy)"¡>jxï¹° ¦T¡o—ßMð Aä€2Zu"Ü *hv“Â=<ì œ>”´i<ðrfvùÒ[öS±Á³âˆ¹Po7à'ÿä—M„’ºáÜ‘YÕq£"“añÆ!ÝV‘#ø'×0‚7ÑÅŽéí+ÍlYCMŸ4âh–t—›IVJÌÛw-E2¬’Žj7é}T47è€Æ"¶¸úA'’çŒÔ´„dÔ­À‹(edgíMHw‡édlP«B¢A èÐG‰‡‡Çìx³Ì!¦¢esÞc¯7$•(ÔV|Ç+tó¶8æ ¢ó ë×’•{",ÏV©&Ó_1ck²¶D>½þ€ç“sÖ‘sK‰¼¤Ü¦’r:7Ç®ÿh$ÄðŽn¢dÝ[¨¬Ô‰«·Ð”D%å¢MU‰9J- ÙX%ÂI"A%0âºß›Ô$Ðko}Ü£±ÆözY˜8B&f5h\‘9µñý®^3ýïMq?SO;UuˆÝá}²A— œ!9—ùåËSز­0u PST0_ÈW3„ù»R²ïgnHµTÐͬ;ï ¯"°ªŸìóCnø>ÕöÞÏ÷3ˆ©4ä„CXÎÅ«0ë÷3#ÿl;#ù§í)©ùoTÆûi¬üƒ·ã¢´ó~تÌi ×ÂDv ÎGÎr0BËÔ yàR2Ñ*”÷åýPñåýàá=‡Ë»EXÔ÷¡óFNôHErhì²€r¹!·\èֻ L_”¡$.â½¼sÆ‚Ê~V;Do²ºómvc"ž£¥ûÌJ‰‘aË·ÚÌ/ù# …õ4FH“7§¤™¯Ì©¾²¯]-mÉÈ6}D ‘ØÇnítzš”•m¤žªâpL=lO…yëÿ:‹vâ%ÿ{|›ËØ„ü‡ÑLÅÓš_þ‚x:ôÿ w Š&8˜†µòè‡ Šÿ¬ wÖã5gîÊÀ”uj!W²¸BÖ;Þ]4Zúr°‰ñ?I\w#÷ŠæìÕÍîì1c¬ì(67ô“="åùkéªgƒ¢çé£(üðmr•DÐHiwìívJQL¨Ük ¯_ýíòÕïB‚š endstream endobj 152 0 obj << /Type /Page /Contents 153 0 R /Resources 151 0 R /MediaBox [0 0 612 792] /Parent 146 0 R >> endobj 151 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F109 37 0 R >> /ProcSet [ /PDF /Text ] >> endobj 156 0 obj << /Length 201 /Filter /FlateDecode >> stream xÚmN»Â0 Üóí!¥Nú l R 6D6Ä€xK”C©`@–“óù|6C,Á`ÃQ–ZXVê¬øÃ‡÷ÑUŠZM$Ú–ýã2ðªS¦\ä2“߀‰92IÎE¹MÁ¯`†%1î·ÄŒ7AÒ)®I[º'Ð%X<ÃGa’iv¸_6ºip mbáO’âX\,㣑ô)K°¦ä½$Œ_¥Þ5nAS¶ƒµ€;Íý\:³ß[ÃEy訡W/#ìC\ endstream endobj 155 0 obj << /Type /Page /Contents 156 0 R /Resources 154 0 R /MediaBox [0 0 612 792] /Parent 146 0 R >> endobj 150 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/dylpnormalflow.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 157 0 R /BBox [0 0 485 573] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 158 0 R >>/Font << /R8 159 0 R>> >> /Length 160 0 R /Filter /FlateDecode >> stream xœ­XÛnG }߯ط:4’s}*P$(P½Ä~kúàØ²¡B’_’öï{8»;;+ÉE‚ê€CžåðrÈчÞê­þ7þ½Úu/ßÄþö¡+ÒþÍOã?îo» ÿÿ\íú/ žTpqÓ ÔSšpï9ñ¾¿Øugïï7»Ëí‹‹¿»›Ü¯ˆŒž\wg›ÝûíúŸr”a@Œc±&‡œ‹ÂåÕãæãåãºhHkúñò~sùn»~Ð#bËa(goÏ~§·/ŠMÀÝV.šHÃÑ«ß~}]ÈVW¬­6û›õå胵x2Ö§~åÙ0g9@ð&YØ6N½={Ú¿»{Ú_¯¯ÇïG6I²ïÉÁ“Ž/•FÏG„«»ýÃãýåfÿ8\̸Ž øf; Gƒ8kçø¥Èþ b7w[XŽ~“htš¸Ý$öˆLh$€Ÿ ¡T—wU2«ÁùŠGi娊ófuå÷¡;ÆTV®õ}4#öÎzU%“ÖŒ-JšƒÒˆ­÷LÖ7೤A¬’¤AŸÕ”dr‰yÌŠà Y y‚({›•[¶q/Ô ð9§O’ïiZ£×ìŠDÇ똊è—\% ¤è&Š§Ú ÃQ²(ymeI¥t‡GO ðKÉM0KÔ{8¦İ/Y¡FÉv–TÃùƒ^tDrÓcÞiú¦Çf >赈A½¢¼õƒP ÁQ•lgIÀX(_?w,©àçÕÎé ”r,˜âd]Õ®JP*ñÀ©S†ƒdd<téP-UCô$`– OÇMçëNr:e8H ºÚ¶8ü\H“äÿ"3†™_'Šg,Xxk5“=ÊÈ-&£úŒÄf`NH­Ý$9ïtᲟXPGé0²\ö±èhWâ>JÐ.ÕĈ·?m7HýsG°ö€Þá)Ú(¿#Ì«¨í•IÆÕ¸YèY{(`}eÒÒ× öeUÁAÃ÷+˃}Ÿfœ`èuaíÌ|jž S@”Æ7å%1Ȱ™ÎÄ$ŃÛÁ—„GŸCŒFÑeÈK Ït ² ´\~Kqhcp ‡íÞêàé{ù Š:È‚ˈ[¢¶‘ !%¬ÞY‹‹ ¥‡¤ ª)³a$‹‡EY‹y’LH­á$Á¼ÀÛ/ˆö{ƒPy9ǨƒvŨ‘4„^÷£ ©îGºš}~XÛ¡ õ ¹_s5H¦/Ö'vª¦§ý»ýøNDû1ŠIwX£Ï£úœ^¨Èž+€Îÿ¬?TAg¥åÔ¿.~îV Ñ¤U>ezÀÝßíÇ_¶tÝ×Ì7¸z¾þ4³.àeÏC÷a¶¯°s·V„àF9‚GÆcÔ~iäßu“Ù3_]Åâ5`±%™ìüóßÅ{"Øpüa¤0{l4ècÔ\ðG +ŒÛX4ÀŠžÆŸÛo0ékBßD¨þäσvxþ‚Œ«|54×Ñ%{½ã2‡Óž»¤>€†KžŽcéPÛßâÿÿC8Æj endstream endobj 157 0 obj << /Producer (GPL Ghostscript 8.71) /CreationDate (D:20101231111146-08'00') /ModDate (D:20101231111146-08'00') /Title (/cs/mitacs1/lou/Bonsai/Doc/Dylp.New/dylpnormalflow.epsu) /Creator (IslandDraw for lou) >> endobj 158 0 obj << /Type /ExtGState /OPM 1 >> endobj 159 0 obj << /BaseFont /COGVAS#2BBookman-Light /FontDescriptor 161 0 R /Type /Font /FirstChar 32 /LastChar 121 /Widths [ 320 0 0 0 0 0 0 0 300 300 0 0 0 0 0 600 0 620 620 0 0 0 0 0 0 0 0 0 0 0 0 540 0 0 0 0 800 720 0 0 0 0 0 0 0 0 740 800 620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 580 620 520 620 520 320 540 0 300 0 0 300 940 660 560 620 0 440 520 380 680 520 780 560 540] /Encoding /WinAnsiEncoding /Subtype /Type1 >> endobj 160 0 obj 1870 endobj 161 0 obj << /Type /FontDescriptor /FontName /COGVAS#2BBookman-Light /FontBBox [ -23 -241 928 734] /Flags 32 /Ascent 734 /CapHeight 694 /Descent -241 /ItalicAngle 0 /StemV 139 /MissingWidth 500 /XHeight 563 /CharSet (/D/E/N/O/P/a/b/c/d/e/f/g/i/l/m/n/o/one/p/parenleft/parenright/question/r/s/slash/space/t/two/u/v/w/x/y) /FontFile3 162 0 R >> endobj 162 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3524 >> stream xœWyX“WÖ#÷U*™Œ¤Ö„ŽK¡¸¶ÖJ¥u*.” .ˆld'„%!¶$CàºHØ„ÂQqiÝ:ãÔùZ·ÑZ[¬úÙ™z_ú2ó}7¨úÌ3óÇu€dsÅÅÆD§} 6”÷žÐ .~ôz^_JdÇœôoûûã˜÷G×R (FèúwWìþ3œ3vëÇu£r,pǹВ7€P=›€Oç1Cî4¨r~Éve(Qé¤ÔTB¤™Ñ%¿:ê!i eÁø`ò‰¼Ïá ¸è‚ä"o€ÃØ}<)Ð0ÿ*â†áŽýc}ÍÀøf| 5¢®}?œÛØ€Žr´“ÿ×Nƒ.OÈUp–t‹˜À§PªÌT»óá8W€[M_œ¿<~ä!x&âo¾èm¦¼Aóé-ê¥V|XOª™ ï`C•¦¦ö˜f@ø:ù䯮pýð1X'^ôAÊb« ´rºØ×ÉxÐÎ? GŽÞÒ÷òÛÝÐAæ1rÉÇ“2§®Ð*>þ‹‡©ø/'cäòɯño!¯£h”‡O4åXá€W•×XTSR:˜ô'ü+Й¬YFt½`a–x ÖÃ蟷6Þƒo\O °;´N®äÖé zùt†Íc|÷ߤW)Þm3Õ™A=¨T7Èê ëT €°6;8 w«À¸W,RÉEl‘BU«V+Å„+Yÿ<·N߃µ7È÷É,f]‘´·3º6°ð©ÏÖ£‰?¥sàoRO% •·!0È4È–ú‚^‚Gï¤6;YéÕý£±ý :ß»úÝ•8Ûj‡âtŠ*d‡ä嬬艣ýg¯_Šôµ²;è®ääÜÇJû넜@x©…0 ¾Ÿz-z—W ‘r›º‡ƒ¿#»5¯[Ñ΂Ac÷ñô&w^¼¸Pˆ0Ñ‘o9°.Ä]'}‹†âŸS8}E‡ùdêoa€…þ A$‡‡Ê²K}÷½B¨gœØî¿]1kZçuüƾ*Ký‘ê•U 8¯J3f˜ø½ù#ààtó«vú€žÜ¡§Áö{LÊ ž,©)©•,`Ði¬€Êý‡÷JÍÇ”:¹1 ¾;Åt?K‡Ëà3ÓY‹ùx5«ƒŠàCʺBÀŠ’Ü}ù(# Ïm’gî3“êªÒj»É–:ͱ d¬­—×(÷ÔǸ¿MU½ ‡Õ‡Õ à0rZ¯±D+ä¼·¤)§ ½¦æ¹_¤ÃYÐö„²9}A‡ðYÛeƒ~TDzPü¸Ú$< Wg—Ș? p‡Èwmn]O×=‚Äá.’€=LʹPU-§ÒvFÂïbè7—OÆ.³GB;Ågç÷kM›)§Õ=7_®Ê ­.®WêJµà(“qp.¯=Ö˜hÕF½ D—K0¬{$¼˜ä×EMÙ­mFc»¬ÍÉ<`ûÃ@ò.6uÈ‘±kwpŒ$|~d|ïÐåÛÇ ·–ƒêà ²¯ÃæÝïFOYê/i$Þ£:\r²¤h_ñow߇Jª T°€®¦Ò|P³ßÝBí·óÜ ëŽ3©·Ü)µ–‘©d  Ø‚Ø[‘§zÐTêªkž@G÷û”[Eñ!P²@ŽL©$ÐbÁCª¤5ѧP”°¢!Ò{ˆvgžBEÙ2†GËïÛRLðñ¦ÒQUµ¼ÃšêÛÇ/…ä~Ž.Æïžü½áÂ¥?R¬ÍÙ¡ÁœÇá3}†q@|?þ5‡rûtg·±ÕE²‡Úwq’‰Ðö~ϤæÂ3êʲŠéÔª­î+GQ.àã'”(¢à–©5î™;²B’ÓK…ÚL“¢"B‘8#Þ&µu×wZ9í†.ë×ðcòm÷æ±æ¦Q-ÑN¥ ðSŠZ9HRešLðÏ‚€Ä¦ôHtcoŠÍ Ģͷàœ1͉Æ>Žq¨¯ù4 FŽó“9eÉN¦,³¹©¹Ý*éL2±ãÌ{tۀ؞ÍÊØ 6”×ãÅð­‡—»oŒ°§™Cwõý7ä£%Ù¹Ž d†ô„Õ!/ÔÜ¥¨ž. 4øwr9]{Î /€Ðuت3kk5æv‚æ}-¸ì@”&_N±ÈÇqxøKÚ /ig L­uäîÚ+ á Æ$ÌíVœƒ`@s¼®Û8Üo:†@gþ(2ç…gÈ%g=?2I|êG§{d'ÜÔF*[º·S€w©‡U:ø€5ÅÁ©¯Èn'Jô+ýùµ:ð!hÇ“†•4ƒ,;©°ÂçÚh$º3“>‰‚ ´;ýr~—êøŸÐËÆ »Sz㎵nB<,ð\D-òoñ?Å;Ÿù%x>ï¾KP?@³²¿¢¡Î`0wÔÚÀ)ЛÙjlF™œP£Zx¤pˆ„C´cp™‰•ôœ `RQÔ»Ô *ŒâÂåÔrÈEJ¼q‰sâ\Ëup›€±”|›Ša—F2á’” Bù/£fR‹©%Ë¡3Ü·N ¯ÅWx IÕV{”ölÂáƤîÿ[EºÿØêùz+›êêuºÆªz¤MµŠÚ]Ž®iSs“ÞhMlŽØ NÚˉM)Hˆ=ï§ h‡Ú£p¼ÿ¹"ã¨=áà xŒ ߤ_çt}Í#ÖÎÏÀEÎò¾F-gSwèŒÿF«ùp O<~(¿Eît„ûp´AóðÊ‘ÂT3»%]›ˆ SLaRfš€—X¸ Ó÷¯êá[°«£ò‚[ý¹´›OaÒÓÂ/æ1~–ð/˜ÜŠì` õzs­­P¯îDº0ÚØÓÝfn}à4$´Ko©Ó"AË´ÅDµ²J­DS]]SKVCª€W(ÉæÈdÅ iJ\­¸œƤœ¢¯ðõÜaÚ3šÈaüŒùgñù{^qMÃR‚1õûÓø©¯ƒä¶ä~éɬK²+¨ñZó·Ï™ŠZó9Ù¦DÝ&Í´•äæUkÔRnqB¾„“—•šÏÄÆäÁ‡÷l#W9ÈÒ½©ƒÌ?™s@<HÒsÙA²”x¸oßX¯¹cT‚}êE_2]Ü&  EC×õo/ºÄ yŠj·½7Ñ¿ì_íM \t€[žkÏEv3Ñ{!…gJ·všLVkz[Ês´ŸüGM×ϽÈSëÉ\1W%²›l´àâ—&]þýôáÄ#¨ýë”Ø?ó]d=9“y~ØÖ0ˆ ”)ÑC q *‘(2©B%TIí†j_í›n‡Ÿ\ë–äÇN?—`ô›@dö§ÁãÖeþ¯Íð«0‘)é´CÊC…µ¬¢•˜X3ºNŽÛçŸiIÙÀ¡2ì ²¸û$ö : .9À­Èm²ƒ€××툀UA‰´()7…/MMØ"óT ÔÆw¾ ´ˆ›Š‡Š‰^ÜÇœy@ 1ˆ£±åîM³=S !“ì²ÑLCù bP f¢P˜œdvw™ÍÝ]B3Ó4Î,»oè¼Òj­q¬³è -Í:ÊÓ³‚Óf®i{ÝNð ð“Äñ÷ò2¢AÓÊï6·[4¥ [©-= ª‰¡Ïz¿úv8|õ.—ËgïŒIÊ‚OY p¿|6ÀÀ9õ”7ÓZ®;ÔPÕ]omoèè½Zó?î°L|×÷‚À˜u8ò0‘€ß¶¬”†ˆÂј¹ÚGˆÀü@šïѧˆ¿?vºM·WËäl$ƒ=äk¨)O¥äKJÞ’¡ˆØJ¯©52àËšb ç‰:O¡ÈËÈSKSì4oÁS¬//¨aÙ­Ü$ÏÑ@‹½$^ƒÛ˜ …˜÷¡¸`%`QÙt8ûËžÖGàÌGãÀÒß ¡§ÊŒ÷GZ’z-¦Ö6J«¬bK›Ô• žºrìÚÍÑßõ‰ë×.g²!(’rûˆØDæâ®ÙzRª‡õô¾Yg÷•;;?,wvÁ°ÿÕã­´ endstream endobj 154 0 obj << /Font << /F52 5 0 R >> /XObject << /Im3 150 0 R >> /ProcSet [ /PDF /Text ] >> endobj 166 0 obj << /Length 3618 /Filter /FlateDecode >> stream xÚ­[Ko¹¾ûWè¶=€gÜ|v9%ÈpÃ"+ ²"K–=ñhFd{ýïÃbUñÑÍ~Å9HÓÝ,’E²žÉ?]¿zóÖÈ+wpVÚ«ëû«ÞœÖWÖÉC«º«ë»«6ïv¢¹ßí¥ÑÍ£|Úí…kŽþCÛ<ø÷ÿw‚bÓ<ï„ÈJC‰h›;%šß±‰ßÚV†ξôÎÿ=ã÷ÿø)4g„ íá7i}Æwe›[h JŽ_ý?*ñ=7ßCcTøH°ðH] gç0œ@xG¦ßC7Ĭh^{JÛÕúoNý¿ËNlj`Æ©³oÀÙ‰&„S°„ó’ð21¸½Kõ?ìþuý—«½ÐayöBœ1¸o‘"O~Kœñõý.vuŸ‹ëøk,+Ú¿çjôÑ÷˜«h1¬@>ÓÔ ãÐÔ‘[¯ã‡0ÍQ£ºƒSª0xÚ·>3áZt‹š¨<ø>4xéN¼× õ\7xPíH]àHT–Á¢°ÒòhÝÖzŸ5wÀGÚ Öu¬:møŠ¸L¶ƒè¦¬ L$°ÍG$#{4?›³'ZÍ$4/ìd0”0Ðã-ŒþSúHÖ]³þ1—¤A“uÒ?()‰D!‰ö‘:¼°Ÿ•ó~VUEø ‹ã¥¢EmïdòÝŠmL0×i@g«-—)3²·l dßMšé$kˆ ó 4ä ¢…†&ÈBjèŸ\È4@܆Ù‡ö³ê*û¾n¡LÛÈ>ÚH(a Ï•ô,n–­ÞþsÆjtÓ#­,Ñ‚¼ìUkЀúß\¨U«£•G’ ­†V‹"%ÕöØõ ɾâ"zÒS¦®´fó„AòL&xŽð®Ðtå†,R²‹õì¯3¨õ°ÃA£…µÜ-‰’òŸÇÖ¢#î°8W†{˜]Á"ÈêüYŒV¡ágü]7#ÔzPßäg®ró-É3ÍÞG Œ6¬Å™ëû‹Ye]8ðÍ÷mRve—QÎë¾$a¢1T>}G:60q²€ŸS3Çw­©™íÖ³I¹ÙŸýš¨æþ¿lþž©äsR†@”êüDáY™Y¼LJ”èÑ3=Â\SSW{–qŸvØÀc-ÿºyéu`eñ4U”E÷c”E—Y¼O ,zÆŽC—Ççi–WÊ9T‡œ|.ŒÓnCŽ™wÀr˜ìl”n)¹™ÌJª O¿&áéXú‘~>¹šáLjÏ⊄zÚ,@w 3½¯G õ€Z£L 8Œ™”Rš‚Ná…a&¥K¡bŒFy•Ò=»WU‘MeÚ•É”Ni š0L”—©QóÚmÛt‰®èd)õLØfìªPW÷‹QŒÒÉLOŒé‡â^­bæìŸky)PŒd_mO l*¡3šJ(™šJŒE†„øj‹HˆÊ€_`uøj6Øø¼)ðäà¹È ò7‘®…|µ¡!_mÜò…šUÈ Š 6ng³¢ž¸C;ï°ú D¨ça È²ÇlP$qEØsàP/GÕá}]znÕ…mC¢»+\B QŠo@™ƒ± YZøÝ;皟iEŸv. ­R}ó·hh¹¾Ò²€­‡C¾#i‚çàJ#¢¸àõ.Î^š(öÚ!‚‡¡Î½`‹h¢+!„EÖý?B8è&•âs‚SlÄ™òyÙ‰&›šP‰Ât‰t%ÇQ€&„A¾Åàð2„ÓB[lÀäù¥-Ñ_hb. ²].«P{wÙ~h¨÷Ö´'Ôxk¡#•h—ìfžac¡Æ¬†9qò æí‚³pÖ:ØMLÞŸËÒB;¿ Ǹ_!x*y·E¦žYæ…@¾Ã·;BÇR¶ü€3p‹åKxœ‚ù0s` Ø3HµàE¤œh¨º,ÐY¡­(’ÏXƒèXñäWºkûA*´õ™êÃLAùâ>‰\ác= Ó… —"qv{rà¶ýû†€¡â&§Q«®#ScVŠÒä?qÈé/‰’ÂÍWUunE‡øW'âàr!C#sŸóP²ëb(ÙuÑáÄà¯Èôe–Õv1sÇ)¡8À—ôAmˆö)vËz^ơԉ­ª­šô9õU2³ìbj…ƒ¶žcjBXöØÞ«§yÊB‹gl§ŒG‰¥—4jh¹-éÕh¨c4;ŽZboäf0÷ 8©Ðû‚q¹¥s…ÒC+Ñ4Ž:ª,OÅèÖå8ñwü2ÄL"«O9&ƒÈÖ•aT[BP>3P¼jr¾ÂK¶[ÏA”À…°Þ­ †³u£¡¯î™&X‹Âl”“Á³Çž ôÃõVTV£¥ËRéÍò[hä#ư%š¦F0]¶ËŸV“Šˆ ýM¦M.q¤s6|Ú翤£ EP™R!æmÞ¼pXÂsÎæ@Û/ȸ §;v"Æ«)ÿJ§>vªeÇ•û½~dtŽ ÔaÙ‹©´kо“hä& ­°‘LF 5r…ƒ÷"íÛù U¹ EöbùÐT_‚ºÐmÈ0>AãŒqŸ‘0ÅËþ¥.ÆP¢3„µ‚á “Îáì•ì4ZËxŸ+²CânW‘¾@ÇâlÍÈ–gh9_£_ŒQ¹V›GË‘ ËhITËÈÑcx)ÂfkšëK,)xžÝW³› Y%t©2ž‹‘UÙ‡>É|ppí(~$B’+²âqÇ Ù›ˆxÃ]ôS¡V_·}qwØÛZXš>ÅÈ‚i­fÔHë cí¿É¡Œ…БŸÒ­uWh]/¾§ºÖA iTºÁ/sx˜6+•/´aœ4`¹«ÅÔÍ7RÆ0bV­Ïq‹lîxWˆÛÒ¦9<®Ú4×n|^X»ÒÎÍÜМYÜ© ü‹™7ÖÍà¬"É‚nævò}àé|®ûë„È1O&k(ßîËâMšÚê¾-H6QC?å!Ð\BY¾ý—7á?ª*œS¹[¬v¨z²=tZå ž  ž  žœõÔÔÓºËfá>íÁR‚Ph>¦òmò<|äšÊ 9WˆîÊPýxA".„œ¡œ[?\Õ‡áöý¡UòJ¬° ¯5•AºƒPâjŸQââã¡â¢íD$©iaÁé`m¯t{èµ+a¨çäÄÍ'Æ<´*ðÅ9ZGé¦vÅœÕbb«Ó.{åèv¾©ç~ðÌŒ‰lˆÃû0nÑic7ã©>)e[n HŠ÷•Ñ8}£)ûžÜç̦Þ0¡[8C¾ro¯ð¸9ýûL™Ç°á¨Ù"´b»qpBÊtzhŽô­ N‘0ÚcÙp´Œ¿@úÄœzåéÊ­üŽí!E³ð퀶@6ï)\Aº2ùØWÜkÔßÙSyšÃ7UQûNåº+¡V¢Ÿ_Èná…ËIÚ}„ÑJU»ŒB\“Çá4^ò´P=ü¯Sãàœ¸äx–^G§¡€%ùóTâ’… {å)ß3žœ}Ù¥$7æžtæ«D"ÛdõмW¶áîªMª W.qœxh¬è(Ôx,võ¢gg$^—û(b͹Špf1ÛŸlû ›”¥«¬¦“&?£&ÓFÂm¼&qÖò¢ *)áY'@"‚$C5>±–ÜYy ±†ÊEWâŸ3\ZO$E v|ñÌ·o"í9g'òbÈM¥HÇb;ènÍ%ðysœšÛhš¬«vÉV¡0ùÆžº¥q'ýuG®è"Gm«±‡#fŠS2/™@h——,¶`)ºržJÑ^PD‰c°1™}mºö§ÌŠkÊV®ý)3qíO ®ý©©k ¯ý)³âžÔò. Ÿ2å‡*/qÄ!dÍq¡r«T)»| J¥‹Ên»¹±"óQ‹J7VLvcÅl, /®¥èt-ÅÌ^K)1c³ð5^„%Ý£êíÂ-Ù>Ý’ÅÆç/…õóPp˜›Î‘‰æxHþx?éP†•ù¥´+óÕ­º’VoØÿÀãìa½N:ɪ$HVm$«²£5jûý(_ghÌ`ïd뮌TQË‘KEÀ_S*¡»t7GwñÜJCë.÷> —Õþ^§è_ÏgIº_á!Ó=ÈôRÌHRØŸ7í²Ór(iº–£{<tΙq:oKÃÎË"¥=HpNV|À‹£|qů~¾~õ_š#¦K endstream endobj 165 0 obj << /Type /Page /Contents 166 0 R /Resources 164 0 R /MediaBox [0 0 612 792] /Parent 146 0 R >> endobj 164 0 obj << /Font << /F52 5 0 R /F109 37 0 R /F47 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 169 0 obj << /Length 244 /Filter /FlateDecode >> stream xÚuIO1 …ïù>:‡¤qVÒˆV‚ [nT¦U%†aiü{œ Ë@Q¢gOÏV ‚dlÒ¬{ñ,è«_ß¿³³ÞÃé ®ø|#Å!j’rRÄl,d£P6@Þèä ÚºåV¸”„»­$«©vR9:BÏõœeö¸h¨áˆƒôMUÏ57;¾ki+ |k .ªýc47ƒ#Ü×YC¥¬^Gºa9¼çPÆTÖ`Ïõ߇Š3ÞÔŒðÔžÉùïc¿Û^êìýd_j)Œ¼Ím9 I“@ÅüûEŽ-¹b±(âÅÔ]æ endstream endobj 168 0 obj << /Type /Page /Contents 169 0 R /Resources 167 0 R /MediaBox [0 0 612 792] /Parent 146 0 R >> endobj 163 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/primalerrorflow.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 170 0 R /BBox [0 0 506 562] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 171 0 R >>/Font << /R8 172 0 R>> >> /Length 173 0 R /Filter /FlateDecode >> stream xœ­XËn[7Ýë+¸t ˆá ß«Eƒ]ôïš.YNÔê‘H²“ü}Ï÷Ák7­oˆ^r8Ï3gø^MÊÈ¿îïz¿xþ[To΋²ª~û¡ûqz³x¿ ú»û³Þ«ï®±=ÉÂõí¢J Ådt´Iyo5%V×ûÅÕ»Óv¿Ú=»þs±dÕ’H{¯®oWçíþÝnóQ>1E<¾²!m\.ßëIu<©›»*‚æÏHXfUHš-ŸVëËö~uÙ¨Û»]½üôðúx8_N«íá¢ÎŸÎ—Í^v½¸^üºpÁ8£²ÞEí£Ú/œA[§l°V» v؃_¡Y¸ýfC)å¤>Œ’…=V$ô+×Ov«ƒwLpÊÁ­!^­"&.)¦|;Úâ­Ó"‚œö¢‡ ¬C™F/–xD³râû;Slfm±Í2îÎå` Ú%Lqœ£¿MI'*Ât„01àÓæ<èhS†wGm¶A'ØKÙkÄs‡•XÔpä½ø³êH&éLŽ6û ‚q^ÓL'‚yriÒÞ†¢äáX} ÇXÈNÒ GÿóO/Ê×÷6x…Ô[ßVëOò5"+åc¨)÷v³þëÕ³ÁpXƒ ¬¬CzIž‘ç¬ Qòâeòp»mW`ùp.#vîÇ•aÛÓ-'ñ6ÎÂÿÚùbx_=Å@Ûšw¿:mW¯w5zÄó^]ýBÕ:b$;²œ~R³%r•d@HK†>Ø"þ\ª« âBë22¬I²Ó¥Åy6àXçjŽN³WÈ@¨VÏ1J+‰Nv–«%σ‡JÔB8l>4V[D~’c‡ã¡: ”‘Üj‰DO@™Æ³C¥ˆ©ƒñŒrâ6Ƴ“K&¶s€…‘ÛÙbcú"ÛY P”xd{Õ1 ))ޏÂ8¹,¡Ša'Á=¹Œ3$Q³"ZvG¬D Ûæƒ˜îÀv’»©KÐG]¤ä¯¾÷Ûã'oº$N'$á½û—(ÂþŠc†ëbÊ fj$£Ñì°‚O^L$AÎÞhÛ'±d‚[R·žówØ…6àæ¹(eÍ¢…•Šôm Q>/¥Œ(×.~{<­7C7ÓD½Ý¬ÎÛ×ÛÝöòé(Ž‰Ð£âÏ'‰0` ØæPló`p!ÃMyâBëK–7.„¿`ÈÔ‡¨WIÁàC‹¬D{žãC€Š+jÕ—‹o6ŸÉi6Étr_•þ”pWħê(CY´W`ÊptEìÛ7¢úm3ÒÐR΢÷ZKÕ”.ÜÀ«Ï“Ј$šÜ$÷…¹2T:Y#1l@ƒAiÃJì€H-h Ûf@p=d8ôŠäZ‚³dID,­PË›áÿ”Ò.ÁR#Õ ss¨·:y‡N3ƒ·¹qà¸Ò8È–Ö2:pÜ6Ã1#“BÝq&÷Ôš˜€æ=­ äMD™5&Œ+­ Cý +ö—˜98 )Å“ÏNÀ»d¤@‘+ À©8E£/з ¤ã–*=g!]ôˆ$‚6£ôîË¢@€À®7çóö¾8* ˆÝ[òyÞñ.|¬-‡\¿¶X?9%@_$ }`y_G…§a yüNÙ§¸> endobj 171 0 obj << /Type /ExtGState /OPM 1 >> endobj 172 0 obj << /BaseFont /GAAZWQ#2BBookman-Light /FontDescriptor 174 0 R /Type /Font /FirstChar 32 /LastChar 121 /Widths [ 320 0 0 0 0 0 0 0 300 300 0 0 0 0 0 600 0 620 620 0 0 0 0 0 0 0 0 0 0 0 0 540 0 0 0 0 800 720 0 0 0 0 0 0 0 0 740 800 620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 580 620 520 620 520 320 540 660 300 0 620 300 940 660 560 620 0 440 520 380 680 520 780 560 540] /Encoding /WinAnsiEncoding /Subtype /Type1 >> endobj 173 0 obj 2028 endobj 174 0 obj << /Type /FontDescriptor /FontName /GAAZWQ#2BBookman-Light /FontBBox [ -23 -241 928 734] /Flags 32 /Ascent 734 /CapHeight 694 /Descent -241 /ItalicAngle 0 /StemV 139 /MissingWidth 500 /XHeight 563 /CharSet (/D/E/N/O/P/a/b/c/d/e/f/g/h/i/k/l/m/n/o/one/p/parenleft/parenright/question/r/s/slash/space/t/two/u/v/w/x/y) /FontFile3 175 0 R >> endobj 175 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3671 >> stream xœW TS׺>È9*P%7WR+á>‡Bql­•Jë­8 ™$ÈL CB LI „à$@˜„ÂQq¨cïõÖûZ§j­-V}ö¶îƒ›7œ öÖu—o½õÖÊ:É:ù÷ÿïïûÿýÿ¦a¶30æ¸!99‰)X¶Ÿ ²¾YJΧ‘ïÌ ؈PáóÕ“iv °mÕÙÀÞØÛêÞ™ó•ü~.Ô¾³æ`64Z&¨öNN‘¤Y×»ºî r÷ðXúÏ7«<==]£$¯þqÝ+äÆ \—P?ı¼ä~¬@´ÎÕ›²æñ¸Ñ®ñ0”ý ã!œ_äö³{ŽÇû™|çoABN0bÛ7ÖÛ4 ˆïÆ× yˆî·ö£NCW,µ•# üï6txB®‚³l \Äžyâ EšÊ™Çq¸ÜjüòÜåñ#Á#0óØ|óE#òçÑ›U#Šj1ðd=©d‚Þƒõꪚcêaià›„;C´[Àg`h}Tp¨ÿljK@(ˆªÈ­–©UµÀB8NÆ€6ÞQ8rô–¾w”׿Dmd#‹|<ù sê ¡äá¿E˜Z€ÿ¶3FüÿryDC®žÈ°B·"»!¿ª¨´0þoø× #A½Œè€#\zîÂtÑ@¬‡ŸÒ/´4܃ï\E¶\Ú«íÉmÓ´²é ›ÇøáÿS^Åx—ÅPku \U/­Ë«UÖÂܤog3œÍ|ý>‘P)ºåÊ¢°(•ª@!/ ɺµuꬹiC~D¦3“éòø}5€µøãÏ=·û5… ÿt"O/I¬ €è ~þ†þ8‰N®Íí!¸ô´ÙÎL¯ìê˽XÐþÞÕ®D[VëØˆÝ!,“’•²2ÕÒz %ŽöµŸ¹~)ÌËìÒNw$çPÁ=Í´LØÀ /Z}céÐ[»Ý‹ˆÄÛèB5¼öŒ–ì.y'8ô]ÇS¹1¢<> ‚…G¾gÃ>¸wœôÊŒyAáôm 8Ì!“þ}Môß"é\3œ1W²ÚQTÔæeæP©{á“<}Ÿ¹žPUWZ]6ת•QÎò){Y•¼ao]¤ó{¨âOpXuXUSAëÔ–ƒ”…Œ÷5fÖs ûÔ<ç‹t8 Zž ‹Ý—tè Ÿµ^ÖiG5,JåãÇU1à™*£HJù{~?güÀâÔùtÝ#ȧ8ÜM°›‰ìó”û#dÈ&yW(ð!¼/}wyH7vÙ…q$°¡Ctf~0Wµ2[œ³rdÊ, ’Ê‚:…¦¸%`Îf·EéãtAÕá`”Fg ó^172ámacFK«^ß겿ÕÎØ¯ûKÂntÈ–±{O@¤8d~XLÏàåÛÇ G5›êƒ/ɾÛ™w=iª»TM‰çãÝÊÃE (Šò Öx8{=T¨• Œ4UåÆƒêÎ&tÀÊs½´+ÎDï:#ZÈ NÍS°øPd Jö•e«–ÔåšÊª'ÐÖù>r*+8$ È”*šLx`…¤*â$•%,ô¤Ý™€'©¦ì3ÉŒ¦gˆ ·<¼±xTY)ﳦ:Çð¦ñK!ýY¨ƒñoO~…páÒŸkshFP;Ðvøt¯n?ŽŠæ §Ï×¹rº©¾Hv£Â‹“L mÏL4žV•ï/›.­šÊÞR*˹<|HAÕA8Ü2µÆ9mgz`B\ `ɼ,¯:Í /Ë„@(J±F-]ufv[»®Óü üŒ|Ϲi¬©q´šhC)|ü¤¼F’D‘,åÿ³!PbSü6$:16E¥ùbÑæ[pΘz¨¡—­ìm:ˆ‘ã¼öþ;AcºÑØØÔfwÄ\¢{5Û7Ø‘Á OÝ 6ÈýñbøîÃË]7F\¦™£ÎêGýNTŒnªÈúÉu¤3°;¸–Š‚æ.¥úé"?O‡Ý¹÷œàÃi0:rF9T"3_ qš\rÚ†¢çg&‰Oýlwì ƒ›Õº‘òæƒÎmððNÕ°R#³¦Ø8úšì²CÂßéÏïÕAžp0¸4· Ü`YIí‡e8×B#9Й¿5œï6‚ ®”Ë9Êcà/|Bß?ž×•Ø}Ü¿eÅ÷Eh‘O³Ï‘pvð¹´¯Àp¡gø.~‚\fy_Y}­Ngl¯±€“ '­!”걩ûe„Šê…GòI8H;g‘i”¢’n“¾LŽ>@+P0âÀåh9äPJ¸q‰=t¶ù:¸MÀ(äßC‘.ÅaL¸är@Ègš‰£%Ë¡=Ü·MP_‹ÙŽð%U›aÔQÚ³ ›gd0Ý£"Ýlvû=åµuMCE¥M5òšLM¦&ŸÒ¦¦F­Þ׺ÓW¿•˜6{?J¤0`  V…ã}/¥ÆL…ǘðOôKଦ·iÄÜñ¸HÀY×Ðrt‡Î¸ñ­æÁþ6<î`È¡œf*p—-,ļÑzõÃ+Gò’Œ.Í)ÕqTcŠÌ‹OKæsãò¶búüuC?-|·v¶—Ÿwª;›|Ó÷)Œš÷å<Æs þ’É)˨zP_§5ÖXò´ªJFº»Z ý œâujMµÕ” ƒƒû« ˆJE…J ˆÆÚÚÆæôú$>7OœÁ–J ä’ÄèQ)ŒI¢¯ðrÛiØ;Çf<Ç|Òy¼½oƒèÆÔa Á˜úógɼ¤Ð·ABkBŸäDú%éjðZóË…G†ü–œv†!N³I=íe¹†yÕ¾”S›#fg§'åp±1aàá=ËÈU6åéÞÔAæßò™ ˆrÅ)Yü ©/Ux¸WïX±}TË~1ù®¤2 «(漩ɭ{c”àgÆÆZ¨wÚÈõa£¬7Êpp^fäê“bÕá`3ðKݺ‹p„'_FƒÐÁi: Õ/~y9¦úË•{¬Ã‘öÕ˜úúp¤3áÂNi–Õ?ƒ '»˜ÔÕ%‘kH1w fsJk¢u¦lÑZk>‡7˜ý–s£ýÚo­²Ò À{Tõr ¤…ùb Z‰Þq&¢ñÿþÔ’}¥’&j:¾…߸ú ZZ'ªH9,+Wd§XôíxøáØ–¸¡i¿Rñçéý×f6í>KÄQ ­+L¸è*ÇçžæG4B ñÿ˜€bëg£“¬#g2Ï [ê¨&mˆóf#„Eb…\*‘+J‰ÕQÍë³ãík}‚Óý½]RÎÆê½Á&–ñyÁ¸u™‹ÿë…àu¦)W’’äCŠCy5¬ü*¥X‰3:OŒ[æŸnNÜÀF©VéœB±uÆ„‹K8eYVðÅÁuŠ€6Š€Den‘$?>+‘'IŠÝ"õÈ •þý¯ýL¢Æ‚Á¢÷4¦ÝPM àÔ³ùîM£õ´æA&Ùi¡&!óÄl  Ì8 !Þ(èê4»:F.»qœ¹ÿ¾®ãJ‹¹Êy Ö¤Õ57µk,ÔY=Ã?jävÔî[·8𷛢‰È^—±Y߬..“ë\ÕŇA%1øEÏ×߇¬Þ-äpx.»bãsàsÈ; ;aM(œ3aS‡<˜æRÍ¡úŠ®:s[}{ÏÕªp'€ûEw½Îóõé‡Ã±øMAój€ÔD8N=ÓV{ (0?‘FЉéSÄ>¶»MŸ.ÒÉÙÔ(Ð=aC¾E]L’è¾9â¢w¥TF,Å×Tj)ðbM1¨+š*[.ÏÎæË’Š­4ÿh“JÖ—æÖ‚oYV/7Ésƒ´Ðd•…kp;3V-q?å®,”A‡³¿ên:g>î¾øZD]×f|¸8Ìßc2´´ª•ÕŠ I£ªÔƒWŽ]»9èµ>nýÚå.[7ø‡!§O‰Md%%Z¸QKïõpvo©½ýÃR{ ûrh14 endstream endobj 167 0 obj << /Font << /F52 5 0 R >> /XObject << /Im4 163 0 R >> /ProcSet [ /PDF /Text ] >> endobj 179 0 obj << /Length 3421 /Filter /FlateDecode >> stream xÚåËn¹ñî¯ÐqðÌòQd÷\]'ì!rØÍA¶${bÉR$Å^ÿ}XÅâ³ÙÍn!@9ØšnÉb±ÞUýæý«ŸÞuq:ž¬²ïo.uaOê(ôpñþêâ·Ýó^î>ï•Ý]ïzP»K÷|ûÉýw¿¹{Üäiwö@rw‡0r÷Ýý<ßÞâƒvŒ¤Uðßõ^Z%wô‚V|¦ÅhâM¶®Ù}Üë¸íÕìîßn˜ö÷+ßøéÕÓ^º=?ÐÆ„οâ‡ð—ÐÞââ¥ó·ýá”°<ïJì¾"È'?Çãa àIòÿ»ÝKá–µ…xøÏˆÍ=¡¥d8é§ða|DzG@ñ·ŸÉø=íÿñþ/ââ åñdŒ¿FÇÐÚÊ8|•ßiª`J.·j‹\ Zæwan÷Ó[)NSHGí° ÝϦà}„aÇÖ"ú(‡1@\7–0G­ w¯=ÞëîO€gþê˜Ý)>ý.„"8&¶f*©œJ|ù-<2á"{ðÝàºF÷°{·G¦¥ƒDœŸü…ìÐÓr¬[q&mdr¼ß:žÊã¢Op…[æfOøÊt˜œvéfúÆSFK&:x:?¤ieЇ“¢$1­CÂ&…tÅú“}."ð¦þ8Ögd;EŸ%ÂD4åÌîâ½OŒt× _ˆ0U1ب!ˆ§Ñh® ¬]Fˆ n2F”;„t@fLùF>fêËÁ¥)SfÁÚØ..|ã@8S`´ðœ¸ä:œ‡þôXa0£áV­§Ü€NÚºŠ8 icRAÅOAûèd“™ÅÜ;àðÙdöY–ùQm&dÆOÓRkˆžE渀‘…Æ.LHïéB˜•MI\Dœåïè9oµI±2¤Ü´p7¬ù¸3yumÖiàF,ô±¬ô±¬õ±Ü¨å¸…ËÒ¢àsyxŒ/ó˜†ôï’S9óý:¹)5˜¶¦ñ¾é`³³\ùäƒLù kÒS«ž½h¯›9ƒ}{“G5Y4†Û”þ{×­!˜j2ì:W&Ð0RáhuŽ¿W%øÔ\ÁØSU&P#Ì‹PŽóY^îþ…äAÀ3C’)ÐÃp§±©‰òŒ]ÜÅÉF§ÔŠH@вbÿ«pc¥AÑ¥ŽÂç˘0 NÂÄÏCiMÙ§Õ*”¹@—©Ðl{™ÜtŸL­ Ó”0àÝBx8?ù­½ó¡£ŒHðB{—¶¢Õ2ìZçŠ}Õa}Y kŽe·&å’24n™aÈØL”ÊàgNÓdùÔ¿‘È! Z„­¼µú£Á¶-W/dZCÞZÌø18ÒõcjÁgááB“!BRíüÊÏ(‹¢J´‹FBõU c²¤L”a+|j/–V9qŠIñ¹ŒËΟ‚áÎç›TÿxG“\?ÎmO¤õ UÊ^)Uëb^-ø±Je¡¼J®Ý ))ÍQ$C•*­ZÎ*Ý]_{¸„Ç*•RѤ«Fµ]­¨¶Óé(×~ö“_° ë©fÅ,•#D*GˆaÉaLa§M¢*¶ŠFz\¬Ð*ÂöMçÑ^H¡¿bâ³$¿R„»\èá€w9)`½/éVÍËW ñD‹2¨žNÒ°··Lª1\ª´rí.¡ï^®bÒXÈK83þGQj (Œ {:ÉSòU̹x·Þ–œŸs<ñ›½ßÌYyMqªA<¬âq^OÏ"L&±){ƒ«êBS;+·)P8‰Ž»Á¹OhM£™•fk= •PŸH(ñ3}¡Õ+ª  Uè*psn(Hr8:¹áíÍ(45Ì‚"ÈúBloäÚ[ joÁW¶·Ö‘žý”pýÍ,ÛRùH¥º±¯¹uš‚D·óI6’dJnO‡ª2÷&OK:©>H ƒUí§Sl<šY¦oºÅ\¶¤q;ÁÞäaQtú¡,vs²T8·›^³ÈŠH)1â×\f³¥ÏM`6 3-tý4»þh`Údô˜݈“øŠ:¸gú8‹%wÿÜ+“ç3³ ­ëòdÊëXÖf˜Uá_Š™\Ì™ÿ²÷;g¡¸®SÊvœ4€¡î•Ü 2äý#URË F®áìBI• ;,·aœ6qž[-Jržº>ÆF+Ç ¯ÅÁœyƒÔ´ð%&â T9ìýl;¶s[rw˜£ÊÀ)&¥²tm•¨ÂÐlÚé;¬h:fwð"„Çu3¯aåÅö;TâÃÑoõ“šüè_fmZñö'ñ5N]VNøÅ4o–Õ{ôÃe|è÷ ©”)}–‚ƒ†"èY>»(µ Ùúxaeí"4#Ô[… „É Á©ó*´R:Õš/£‡iw5I›,Ê´Y”i[ö„]úwf©uRšu„-ÔŠ~°Æõî¢é7׃Ñý Hý50mé™å©‹hÞ_4z»궈.”\~£[´÷è[:¸»¬ š$}ÒSòIóÎO­`µé©&æÊª¯«jåĬeª-õ75X¿Z†ó2oÊäe'ËaäÁ8^ûÓuê2ŽqgÜfeA½Äw©/Ç—fؤ´:…ðÆÄPfÀE¯r“z:†`±ðç™'‡EëÞAÿòü%ï=‚Ô:œé˜pfÕy€pKbÃ}ßk+äûG¬ŠœëcÞ½½÷$ZÃv‘Œ­²*èU^½”³maZVùN)û–YʾÆB  ­øBAÊ~H7íGô7‡tR–n®\éʃ´0XÒ5n'x`#³àï\™±±…íY]6³éÔ̆?g¹¡î*»"¦[Ñã§!õÈ÷ûÜfSLg«˜În‰éæ»"<9ÎDxn á5Êêÿo1Ý$+ª§Ÿµá»nTC§‘+¡udÜH‚c wÞ°nøÎRꟊ¿0Û„‚cKÄ¥…bãïÔM¹dýá—z×x_5HVßð l&¤‹Ñ[C|­i6Ž[³BªmÊÔô?¢ ˜E¿ÄBÏ‘ßÜPJш‰ºÖš–~µ/øΚB¿Zõë†ÏIšgk*t¿0"RIS4juÖ%"Ç”ˆ*Ù)¡_ÐXªË*ŸJU>=o‘D- Ý·HB­à]¡suzm? ÐÏÊÄJ%è—}¾ zYŠ %Eé{X0/’"Äîç¨nçˈ^dTГqùï y;DºüÔ6%ƒnó9)þ­âXáÕ¯’3+¼ZÛüYù1rcnZ®ÉM‹¹Ü´œËMË 57e¬ú~Lêý[€•ÿ{¿g¥§ßò}rÌ{.W5¦ =À­ƒ·uL‘¹¾Ç°JÌqºçå¶9æôuG燬Ê1•¾8X8ª Á Rßâ«_Þ¿úʧ:¤ endstream endobj 178 0 obj << /Type /Page /Contents 179 0 R /Resources 177 0 R /MediaBox [0 0 612 792] /Parent 180 0 R >> endobj 177 0 obj << /Font << /F52 5 0 R /F109 37 0 R /F47 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 183 0 obj << /Length 242 /Filter /FlateDecode >> stream xÚuPËN1 ¼ç+|tIã¼èöj+Á¹!¨ÝV•Xú@ð÷ØÙ"öŠ=“ËŽÁÔYç(DK)ÀªSïŠÎœ¼5&×]‚y¯îøüPældFNWEM–ÉCc›ì3” PLÖÇ‘·>$(kxÄ¥&Üm5žíµIØjhЉëÃ&â¢R•ÎØëX‘hî¹Ùò]i/áGmp!ò¯AtYð(Y½°¯Œ»a8¶œËÏ|_¤nðA>iãvŒÞ*AŽCØðsøòïx·' ;ޤêÒêÌñOåxY¼‹æ"ÿî$²„„V‹¢¾܇\ endstream endobj 182 0 obj << /Type /Page /Contents 183 0 R /Resources 181 0 R /MediaBox [0 0 612 792] /Parent 180 0 R >> endobj 176 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/dualerrorflow.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 184 0 R /BBox [0 0 452 548] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 185 0 R >>/Font << /R8 186 0 R>> >> /Length 187 0 R /Filter /FlateDecode >> stream xœ­XMo7½ëWì1) –ä ¿NŠzè—}kzPdÅQ«D’øß÷ ¹Ë庎!5A€X˜Î’oÞ¼îÇN+Óiù×ÿ]ngßÿºÛã,[»?~êngg¦üîÿ,·Ý×pb¸~7+L‚òÉÚŽƒSÖ§îz;{ñnX®º›»Åæåõß3­R77F9×]ßàájq\¿]oÖ§y:¤ØÙÐÍÙ)Ô}ËÓú~qZejWß/ëÅÛÍê(`Žù¡ÏÏÞ¼xeß¼”Vb¦Ø¹¨\$›Ÿ>”5¯¯g¿Ï(Zelê˜lPœºíŒÉ(MǬ±Öw›û ´%ø JË»ïf¬RŒüiÈã¡cop@'!8)C°P4ˆŽWg£hK…8¨  Š~ó0ð¸Þ~ج>×ÃXÖ*¯õ&ªH؉…sHÔQЬ¼lÝú¨Rò‡© “¶Ê ÕRÝ®p“T¢«”Œ¨ÌØ5É9fMÑëº PµT·ó¤Á$ÉWB7h·Ï$PH»nn£"öî"Y&úÍͽŸá˜c>zÀFTÀ&é¨ëj:ª¥IÇÙŒ²Ny°ÐF’‚ה؟¼?Är¿;ž‹õîT€Q<Áåíþnw³ÞÝöè8§œ0sðÅÛTŠö\¾–JÇÎl°Èœ“W)5›bÈBh-аÐáýØj©nW³¨Àfؘ”¯è½2)u–E0^1œüB¤>¼ñFPÃÇæ C…óñQi!¬E¦9…BØÕ'AJ²âA`¢Ežvû]IŒMØ$fÂçÍ~q#¬Í¬ì“Œþ¡B<``Bðª…ÀD†„5˜€ÑO09•L´Zt Å#i¸%›äŒxa~„P‘è2 ž´@, r4Œœ[T¢`>!Ý4Z£…ó7ßIFеò‰›ŒhœÝ·*1ZÚŒX×r›’êvŒ:œõÂA/(,î' 08zdx¢ïÛÄXÆxe.ã””…¹‰h~^&A,§€+U#£¥ÀD±`t;™%á,«ܹ“ T%ÈÀ9ÃhúÑ/Ï…#îÙÉ•†Âoë9‘ÛÆCó•sB/ÐK#3MtúoÌçÛ¬{ö~½ß`åÍÐfS!VßfÃEm–,š–oû YD‘[FÉ*…N4ZÀŸºÐ[™‚¶£¡z]a Ä´ôTV¢L6hL;¹ß X9ÄÎJ×… ÅI Ÿ2qŒ€ä–¡{΄‚ÍiØ2æ¹ÅMj³LÍýj‹Äåé$l9Æ.h€´SŽN)U¡ ‚ádDŒÀ¬hÑÐäZqvzòopGaç›9I½Ñ>ÿSöB2xŽ©-MêdžS-Õíj´ ÐÕèQ2Ò -­*p5ÎàuAê¡mÖEi»’³F•Ñ1SžpxЯ”äͪ-J;­ÉI¥üúøÙ„Iœ¥…È e¯69‘&ƒòò¦¿Q ¤ªøYéô¡ŒÅŽí?§!=Ê@½’6<"8Zš‘Á•t„pt»€{è[ƒY«ì¯~ýåu¦^®ê¤7/ö§÷«C·:ö‡¶M÷# ÇÄš i4N(£(edÓEdqIÒ¬J“JlbIep·É”«çЮºøó4ÀeH¤cÀÉJ£O€Óh¹ÃçuïŽpóY s4TG,5ytÃÆƒÜHr•d ù5„k³‘×Ñ‘z9ò4Ët7²ƒ@’ÇQÒ R>‡w.à ¦jÂÉáZŽòå¨ÝÈ!§¥á·áײQ!+j/äÁtãä~ävM¢Ä$ÚJ^%|µcrÂ?±°X.4xKIÒxK!nöÇSýø 3Ïôx IÊQʤöWŸ—«ãq}Ÿ‹5Ê0™“>áš×úþš¤õ†Ò?ÜíNÝþ{À#õ<-6yKpwâN`*÷}Ï^Þˇ²nڲ߯–ÿdÙá AÎlÿ*×DùÆÛ5¹JòL¾Ä̱YÖ uÆà®ld^ï$ÃާÕ6_ãd|”ÎS_Å: ЕО§ç‹®«…Ê¢e`ýMíª‚4±•üçO^ÚH'…„3ý8I!’›á/n²¿äÓ—ÍI»°áÉç5ˆ–µŠN|¬9O¥ÅY):„ÁÁç^9ÃõP•& "T"Šœ>7. øŒ_m/“›¯/¬å²<ýjS×Õ¯6ÕÒ|µtºAŸp¿•Ï‹k¢ hò!èËo&èC¤òÿúEá$z çrý37Î9T¬L]ÿ\ ÑÝ-þÿÙÞÚ endstream endobj 184 0 obj << /Producer (GPL Ghostscript 8.71) /CreationDate (D:20101231111146-08'00') /ModDate (D:20101231111146-08'00') /Title (/cs/mitacs1/lou/Bonsai/Doc/Dylp.New/dualerrorflow.epsu) /Creator (IslandDraw for lou) >> endobj 185 0 obj << /Type /ExtGState /OPM 1 >> endobj 186 0 obj << /BaseFont /GMQABE#2BBookman-Light /FontDescriptor 188 0 R /Type /Font /FirstChar 32 /LastChar 121 /Widths [ 320 0 0 0 0 0 0 0 300 300 0 0 0 0 0 0 0 620 620 0 0 0 0 0 0 0 0 0 0 0 0 540 0 0 0 0 800 720 0 0 0 0 0 0 0 0 740 800 620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 580 620 520 620 520 320 540 660 300 0 620 300 940 660 560 620 0 440 520 380 680 520 780 560 540] /Encoding /WinAnsiEncoding /Subtype /Type1 >> endobj 187 0 obj 1902 endobj 188 0 obj << /Type /FontDescriptor /FontName /GMQABE#2BBookman-Light /FontBBox [ -23 -241 928 734] /Flags 32 /Ascent 734 /CapHeight 694 /Descent -241 /ItalicAngle 0 /StemV 139 /MissingWidth 500 /XHeight 563 /CharSet (/D/E/N/O/P/a/b/c/d/e/f/g/h/i/k/l/m/n/o/one/p/parenleft/parenright/question/r/s/space/t/two/u/v/w/x/y) /FontFile3 189 0 R >> endobj 189 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3652 >> stream xœW TS׺>È9*P%7OR+á^'(Ž­×J¥õV ˆLd&„!!¦$Cp‹H˜„ÂQqhzŸ·ÞתµZk‹UŸ½­ûàf½÷NP{ëºË·Þzkedüûÿ÷÷ýÿþ¿Ó0ûFsÞ˜ššÂ,ßÎMLÙÞ,#çÓÈwf ìDèÀó5“ °íš\'àhíõïÌ9íïÍ… oÁœ9˜– 4¾©i’ ÛzwàÝ!ž^^Ëþùfµ···{ŒäÕ?î›â…ÜDûê‡8ž—šÆˆÖ»ûRÖ<7Ö=‘'IKºGÇÅÅÇÙ–íæÅ§¸oáò¸ii©bw_O÷÷V­Z½œzü™òèþrûîÛݧ¼ö ð? RÓ6mΊ2ÅYÑÙ1’ظÀø ;“¸)<¾»ÇÏÕïaØl'¶ [Œ-Á‚°=X0¶ ÁB±Xæ‹…c›°ÍØJl ¶ ÛŠ­Æü°m˜?¶ À16sÇfa.[H±‰Ùc ìKZ4íÛ 3îØEÚµÚ³í…ö?9¢³èúS<¿Kl!¬3çÎÌš99ë¿fKgßqŒuÔ9Å9%:µ:¯q9Ÿ|k)©ržôfÒÓœ=(йÀ°fbã&Œ&%L.=@š\TLðñ¦’áâšl°ƒ…¤8Ø#E)3J\ù°ÑŒg”F•I à œa»x®ulþs’?åþ/–·w-ß°3cû&7gòl¡•\o¥u?…=Oí`;YÈÜ „±1ÑQ©Ÿ€ÍòúÉzÂÅž@K¢Ë nѧüZ?Ä¡XæýÑuhb„lxåÞ¿Ãùðc·ï°'1”m†»úÉ…æÜ~ Õ³ Øþtã1äLƒÚ%ãïTR ô%#J­„5‹ƒ`IFTñï¶zDÒ FYp%>4”û ã!œ]_âö³{O&˜ýço!BN(fß7ÖÛ4 ˆïÆ×¢yˆ°îƒ0NCW<µ•c üï6tzB®†³ì \ÄÞâE†Ê•Çq¸Ünüâ•ñcÁ#0÷8p|Ë%/òçÑ›U# x³žT1AïáúJuuÍ õ0€4ðuÒ©Maº­à°^´!&4<ðÃä% ÄTækdjU-°Γq wŽ¿­ƒïçµ¹P™ÇÈ!O~ÄœºJg(yøo¦à¿íŒ‘Ã#¿Æ¿‡\žÑ»wò¬0À­Ìm(¬.®íLüþèHR/':à—ž¿0S´àÇôÏ[îÁwnÄ#ûnígrût…lºÂæ1~øÿ”W Þe5Öš@¨PÕKë j•õ€°4ÚÙ W ß°_$TÊ„nB¹²8"F¥*RÈ‹g²îEm¹knÙ‘™ÌTºÅá’€ÝLäX <%Cv©»Ãá{)ä»+Cú±+nŒcÁ ¢sóû€¥ºÕ˜Ýâš“'Sæ1TÕ)´%pœ€I88ŸÛcHЇh"Á~,Í!–}bntÒÛÂÆ¬–Vƒ¡Õí`«ƒ©ß0ö×þ¤=nèˆ=cÏÞ hqØüˆ¸žÁ+ßœ€^6Õ_’}¶3ïþ0zÚ\wYCIäãÝʣŠ(Š ­õrõy¨P++A9 h«+L‡Õ‡\ÍèçziW4œ‰–º"ZÈ MÏP°øPdÆ‹J÷—窎ÔÚªê'ÐÞõ>r)/:" È–*"šÍxp¥¤:ê4•%¬pô¤Ý™€§©¦ì7ÍŒ¥‡f‰l-"xxcɨ²JÞcMuŽáMã—Ãús>§ÆŸžü ½àÂe?#Ö–ð¬ v°ýðÙ^ý8 ~ÿÍA.Ÿ®÷æ4tS}‘ìF.M2)´=?2Ñ\xVUq°|º´jªz˨,çóð!U‘pëÔZ׌]™ÁI i€%òòM†Q^žP”gŒZ»ê:,ì¶v}§åkø ù®kÓXS㨆hCi|ü´¼FRD‘*åÿ³!PbSòŸv$º0ƒ6ÇdbÑ–ÛpΘz¨¡—mìm:ˆ‘“¼$öÁ$Ac¦ÉÔØÔfw$ÝbMû´;€/Ø™ʼnLß6Èóñb¸ôá•®›#nÓÌQgõƒ~*F7Udýäz2€ÜZKEAs—QýtQ€Þ¯ƒÃîÜwAp´ƒÎ£­IS£6µŒP?ècÆ¥¥‘ê<8Í"Çâa¯h׿¢Ñ?µÎž³g¿0„h£x §K>@¿údm—a¸Ïx ‚޼Q•Èì—Dœ%—œµ£èù™IâS?;Ü#;èà–F?RÑ|ص Þ©Vj…àCÖG_‘]Hø;ýù½:ð hÓ‡–å7›,©ý°Ü çZi$º2·EòÀ&Ò•v%¯Syü•€OèÇ º’{bO¶l¦xXà±-òkö;Éî½ñ%x>ï¾K Ÿ —YÑW^_«×›Úk¬à4èÉh§zlúA¡¢z᱂AÒNÀYd¥¨¤Ç¤?E¢÷ÑJŠ8pZ9”Rc§n^fo¾¾!` ò„ï¢h·’&\ò9¡`ä·ÍD‹Ñ’Ðî€Û'¨¯Ålgx’ª-0æ8íÙ„Ý32”‰î¿Q‘î?¶xüŠƒžŠÆÚ:­¶¡²ŽÒ¦yM¶6[[HiSS£Î`Ih ßå/JÜÏŽIÎO‰}$S0Ð5Çáxß E†Ç©ñ„Óá &ü#ý28¯ím±t|.p–×u´Â Ý¡3n¾A«y°¿ O8v$¯™ÊÜmà Þh½úáÕc)&·æ4MÕ˜¢ 3RùÜ„‚€˜>Ý0@—¶ÃÎöŠ‹.uçSoù?…‰O ¾˜Çx.ƒ¡_09åYÕÀêët¦kNÕAéÂhCwW«©¡ô‚3¼‘N¹VC 28|PSDT)*Uj@4ÖÖ66gÖ§ð¹â,¶TZ$—$ÇÖˆÊx€`LÊ}¥Ç.ã¾Ñ6ã9æ—Éãí{Ä6¦KÆÔ_>I奄¿ ’Z“ú$§2/K¯Rƒ×Ú_>d,lÉk`g´›ÕÓ^fk™×,‘Ë8EñybvnfJ›’Þ³Ž\cSžîMfþ­Ð” â€(_œ–ÃÏ ”úS…‡ûôŽõ˜ÚGuì“ïšA*Ó°šÒhΛšÜú7V@)~nl¬…jpgM\?6Êy£¡ e&®!µ!^ ¶€€ôm» gxúå`4\& ¢Qýâ——cj ,Y¹×6é^©¯Gz3.,å”åØü3ÈH²‹IÝZ’¹Æ4K‡Ñh±¤µ&Û&a*ÀV­–ásx“Ùo½0Ú¯ûÖ&+ ¼GU/Ù@z P,A«Ð;®dR,þÀŸ^º¿LÒDMÇ·ñ›×~AËêD•™ òåŠì’4›‘¡<ß’0ô#íW*~ä4½ÿÚ̦Ýçˆ8J¡meƒ½Båüü/ÓüˆF¨!þPlûÌct’uäLæ…akýÕ¤ ¾l$À°X¬K%r¥@)±9ªy}vü&ìÔ:¿ÐÌ@_·´óñ_°Dd}D0n_áâÿz!xiÊ•¤4õˆâHA «°Z©FVáŒÎSãÖ†ùg›“7²Qº D&ç€Ø¶@kÆÅ¥œòœFxâàE@E@²2¿XR˜˜“Ì“¤Äo•zÊðÞWfQcÑ`у{›2î¨&pêÙ|÷–ÉvZ “ì´ÒŒƒù bvP f‚@”htušL]—Ý8Î> /XObject << /Im5 176 0 R >> /ProcSet [ /PDF /Text ] >> endobj 193 0 obj << /Length 2370 /Filter /FlateDecode >> stream xÚÅÙnÛVöÝ_¡G(™»“ìcÆMá¢3¨¢hÙŠ!²­X²3þû9Ë]Ij1Z`(¦xÏ=÷ìÛÕûë‹wL·¦ÕÆ©ÅõÝ¢S 7ÈÖôfq½ZüYÉZVºn†a¨.áñ>KølêFë¾ú ×𹯵¨¶ô^VŸj#«ÿÖÿ¾þåÝ«];tB"nÑ*3,50ê˺qªúþ×Õ¯ôüϸih§nR®•Ò.ïùŽnðtÙW·xЗZÊê±æÏ®Vx>­®jã záÝ×u£,Ŷh$`::âK­¼”ÕnÀ‡b Þ>1¦}‚¢]·^8OôilØ €´~ã a n#9èÖžŠgćˆ×øôÀ;×;þ;ÇÏ]ÍÔ%Ì7¸ÓóD 7µ•3áy@=&ʶL±2Áð  Жkµ3‹FÊv°–µpüXYµuÓ;Y]×¢”Lgž…R{eXÎeB5Ñ{Çc9˜ÎžÔ+îã击TZµ=X¦Hv©É.Õ1»ìZ×™°•ä©gÕ[’r¢ŒßéV–šF&ï¾ <»ÐV>ó)¹ñá÷e­ÈEÒg=Âk¼ð¼6Ek•.ÕùÂðàHÙú ,DX°m…*!„¨pÍ O^‘>z»cýë~é1ͪøº÷åÄ4•Q¼ðâ£:øæm hǧ°x${Ž˜3)„Zúó<“+B>Õ®òû Oo½ŽÞ‘ÐVˆôC/ž‘› A?_¢Ã¨¸çŠ÷°â bG-‰R=K”PˆuÕ:D£Ò,T? t0çªBÉJ^A^[f¤­y|§#(Âü-ã¹É ¼å6¶mSæB^a‡ÍõSHMÛ¸‰Vh§7w ¢”žÿlÌŠKLq?Á¾ÈB;޵“…´[Ôl©-¡ù¨L€†œCVÊ#ü!t¤„$¬2DÆÆ’‰–ˆ8-32¨#\¹YÃÏOÌd”Á¼€ÖÞ½§>Á' Çë—:¸ÆˆeYSfLȶΎßãCH—7sQVÍMé0³Tâ}Þ€åϤ´Åçõùi¹’ªöY$ÐòˆÄU ¯Œ–Èùœ,š,(D®ûH‘(σ)R–VÌÍû:Ä>/¼gD“×?ã eZ? gÔCÍ›ùÜ2°ʲéV’”¯Sæ‚(¬_›‹ $ùg/Ç›QåæK |ôlRq)8”v˜ÕBQ™ÿ—Éq’€eà9«\‡y­M )4”Ì*/LÎ+˜UÜs8ð'ß$S„㿦22È…v ~>Ï^ö¤ï\¯3¥å9Ø‚ùƒ¸M R(ìÿŠ,¯±B‘ÌÑ©†¨®ûiýä1`<Ö \EmQ,Û<øf6ŽØŽðd…Îr׉ÌKÈnýºçÄŸ‡~ŠöÍžñÞõwÜ nã‘/û í‡ßa"?ÞðŒ,b4÷èƒl¢ –¸)o8#›.—"}ߦï.ÐÅ‹A~ð¥ a›KÕÞš{2ZyC‰Jð;®~Šê€CVCö…Tø.M†¤á,‘#Œ`HÊÉ Ùo”Yì9}Ò)¡<2¤—$'‚Ñ™üwÊ™=Ê"Hã[ =NôÐ Õ¤s@À²5xÄ—ªì^D<ˆt§ä´SF˜mÖ(î§M޾mG†BÛ(dtÎBÿ>u§w£KÈi dŸWI;c¼į́ HÉZެ–…çcfF-b²Òr´YLã³Vy"µ²°.oݘ'µ™à:±Î§nJ :2*ŠºªçXve¦Š[òP‹øõ•Wçx‹#ʨußâï‰0dd¶œ!¾Ñ½Þóß zK”úx@/‚}eçÐ~€e«ÜñÉr3“!åΘ ‘”GT݉üSi¦ØFkÝÛ ÛÃ$ä¬r‘Ë"’(ý9/DRVÒN´Ó³=ò|DJq¢t‘X÷å² ÙÊh9µ.£‹œðeݽ[òö¬ðˆÍQŒNvÓ: ¤zHõ8rî-$kB²g¸léŒ0žN_B¿b3:íÐM\VÀajÒî𣈻ÖXŠ»{ÞCÁÊõ)‚pé +Û8*Öó~!²ÏæÊßëÉØö*ò8$ßÎç5DÄ’¦Žîλ>IsCŠ8﹑æBve>w`VQtî$%]Tiø=²ò-ôéë4y[1Lä\)CrªSs²Á}ÙT,Rù–óZeÅ=c1"ÒÎs1¶ 5T¿—³ÿÈhœ&:íã†,â:ÓxjŒmHÿÀdYÏÆÓ&ì*¼)ê䥤Äóoﻊ±ƒNm×NÇ̱CpùÜDDÀo©û4ew“À˺¼ò@ø}®ÖW~w¨Ôe2P6q™XŠÃâñ¦ 1'£Íàôä(çÇ$<ÝVµ¬¨x²X¦Ïi‹æ-eå3„Ue oÙNSZÜyå¼2p‘N¬/ølh÷”µm?Ž|xáiØŒÇ÷m=¨Ps€;\Æ|ÀŸÃ-A,}a³ ¿Ì°£`7w«ÒÇ2bk«ldñ\ë˜ÿ”›œ•ÝDŒÑþ.k¼¼.~º¾Àl)r!ußÚ…ìûV9³¸½¿ø—ðÿ¹ï®îÝâòñâ_ð/,5Œ§É½Ç_•f*uÛ÷j!Ã#Ö“¬~Ä¡¿©þ1RÁÏ\Hèxïï8¢‹Â÷Ë‘t«OE˜Þ´ÐR 7"Qhè6×Ëí\Upr endstream endobj 192 0 obj << /Type /Page /Contents 193 0 R /Resources 191 0 R /MediaBox [0 0 612 792] /Parent 180 0 R >> endobj 190 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/dualcalls.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 194 0 R /BBox [0 0 335 161] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 195 0 R >>/Font << /R8 196 0 R>> >> /Length 197 0 R /Filter /FlateDecode >> stream xœ•TMoA ½Ï¯˜[ÛCÌØãùº"!$Ä…²7„вYBJ6I7)Ðgv³ ‰hŠr˜•íyÏ~~“{mµÉ¿ñl:õê6èÅN•¨¾};~ô u¯pø¦Ó¯+)9P}Sj“‘ކÕU§®ç_æõꦺS.€)è!7¤«yÉ7õªÙ|½Ë%\°l£f‡)Jví~»ü¹­ûnW 0{7 ¹‡2¡¡œ Ò³Ó!°ÇFÎ ÈfŸkÐx Œÿþ ÿJGŽq¢oV½¤û¶ô83` :O DïŸÚõº.-$°™0ØC¾nšæûB?Æöz>ßoF‚«Â+õ¦RCŠQý¥È9‘uJˆ‚î±I@QGi:«²RÏbÝt/ÈäBý|Ñ1ÔK·‘ ²œÖ€wt¼ýÍC=HÅr6%oÒ´µm¿lÚßE˜2,1#ØŒÄb_úŠV–:Eþ¿/«-B´1ä¾>]oûv³Ý/»zµÜ?Þ̈QüÀ¥ßvÑ®sß«wJ4¶ìÂ?÷(³Y§q‘gk#/&à$·­-c ´u, ,á$Ö —EEŸ+9FAÆAž3pÊ’aÈïÀitÎ’M±IØÓ{°\¬z–ͳ|¡Ê‹ñ}dp>€%1‘±O§˜¸Ä1žÆºüÖ­XîBÕÝgŸ¤Ñè…,ñK2-3 endstream endobj 194 0 obj << /Producer (GPL Ghostscript 8.71) /CreationDate (D:20101231111146-08'00') /ModDate (D:20101231111146-08'00') /Title (/cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/dualcalls.epsu) /Creator (IslandDraw for lou) >> endobj 195 0 obj << /Type /ExtGState /OPM 1 >> endobj 196 0 obj << /BaseFont /HIKFLN#2BBookman-Light /FontDescriptor 198 0 R /Type /Font /FirstChar 50 /LastChar 121 /Widths [ 620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 580 620 520 620 520 0 540 660 300 300 620 300 940 660 560 620 0 440 520 380 680 520 0 560 540] /Encoding /WinAnsiEncoding /Subtype /Type1 >> endobj 197 0 obj 536 endobj 198 0 obj << /Type /FontDescriptor /FontName /HIKFLN#2BBookman-Light /FontBBox [ -109 -241 928 717] /Flags 32 /Ascent 717 /CapHeight 717 /Descent -241 /ItalicAngle 0 /StemV 139 /MissingWidth 500 /XHeight 563 /CharSet (/a/b/c/d/e/g/h/i/j/k/l/m/n/o/p/r/s/t/two/u/underscore/v/x/y) /FontFile3 199 0 R >> endobj 199 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2707 >> stream xœVyTSWaÉ{*R%ÍH¤fÔ):ÚÍêÈÔV–"Š€l aI !„@I!®( a‡„ !1aØ È"‹:.µÖöœªuj;µXk.÷áóyAާãœ9sNNNÎÍw¿ïþ~ßòû(ˆ‹B¡PÜw…Yvö†0^Wâ8Ù€{Qð—œðUÎ…(øú<ÛuÖX´¸97ýKnpv9Ô¾‹–!ÎJh Šd¹>¾1{c×ùù­ÿåä•­[·ú¤Èžþã˜&æedûüžü!Mã E‚´lÉ6ŸÒšÏçq|2ø2WìÃNMMKu\ÛÇæ§eùóø<‘H(õñ Xçóê¦M¯l ¿Þ =úe/˜ƾӢO^ª¤D°8ñÉ¿3á\ºÏû—ޤ>¦p¡:ÛI‹ñ¬ßÀP3õ_áT+ϯô/†P1Jݲ';Á+LØó ~é°ÊÓ¼¥~Æ* ñÇ„†# xüœí¼uÕAÐá‘: j ©¡ÎtX{ÈÓLrÀm“÷±á"âeO‚F¬fÅå%ª(1£eÕj‹´@ÇÚº¦ú†ûÐÅó+£¶ìˆ¨ @®JTah6£1Çd ÉÙÄ¥#¸ßåÖœ ÇBÈ<›Î¡ÆåKÊß-ÃøhG夺^^e<êB;g.ÇÛ /’õù»û?A?¸zý?FpB~l3ÆelzP?°ofÞ"–»¶ùưÚûÙO”_š§“h¾¡Ëá´¦®ªv!ÃÍõƒ5dnòÑQUƒ²= ¾ûh³gnd^ 7]J ¬-iÌ5*kó–-–ä¤Ú²'m}­=Væ ‹¾×ú|ÿƒgçTgÇd#v‚ Ð e³L%” ~éKrÜU~ïŒó =*(%7`k‚oÂeSÚÑöA¦ad°ó,ÀÆOó¹Ì*®kvGžÉÔÑyÂ*íÉ0zsLû›vƒ°'ÌJÊ ±î»µðå»Wú®{/0G¶Ì›v2F?Ydv|Nék!£Ëדʹ&\ÒÃböî?Ÿ}X@ïQk“©±Yk:ÑâB ¿•W'i‹u`‚ÇAãŸÒ®J;Íþh‹ +ú€8 ĶQ:\اÃÀ®=ÝÒg2NƒÐS<ÉZl‡µ6¸ÜFÁYГž±3IAlŸèJq¯ú=ð!ïS«fJú28§#º‚È7®ò]C¬ 9r2‰i;Ÿ{ | .Œ}ßB½n¨¶­E¯7Yšm` ä¶'c(§JiÐ…¬öÃp|Ù{-u€J>XA{¨€qÐYµù ÀÚZu¦f[‰NÓC6ýd{_·©ÝÁYþxl¯ÎÜÒHN[p¸ª± «WÓhÖÑÒÒq<¯-KÀ+‘æ3åò2¥,“Ó,©áŒ6¯ ¨ý}#û'Ó™´‡HHŸ¿%àtäŒÉ0Ú£·ßò³Vn7wHv&ï²ü}RP6ÿxñž±´«¸™oLo Ò.xqÂ7Ó¯Z“Ö³ÊÒŠ¥Ì¢¼¬bÀ¹ÃwoÛÆ¯2IO·¦\j*©@rP**äGÈCIÊPÿÁ©“eRÇ|¬è¯PHÝk 0ëy­³í¹‚SÎNMu‘m3mâ…0‰Âç*PpAaâ„íiÚ$ ÂsvîÅÜáÄÕK=æàR‚BVáOä7B‘©ÞçP>ÝSù}VùôfT\ͪ)tø§áIxÜ­2yF‘µÇh´ZEÝ™L2QnŸ_ò$¸ô· ’Ÿ'­÷P@04iŽRQPV$@Q+í,Ô)j‹–+•åeœÊ½89Þjd÷7õ‚0ž0ùÏ#$²wu$µÎð!¼N·ÛÎOÚusLÉölt@Ó¦@^^*•›ˆ—P#ë$×›èõ«?ë[%Çò@1Tª *E#ƒM:šÖ•>ú˜\ÊOdü¤…¼þº7ÜJXj±ãf»•<¥ÓýáÛ ‰‘Œ“[ÑsPêø¬ õâ­ø"úù1[Û09sŒéL"â ©J)—)ÕÙj™ÃQó³Éçñg¶„ÄåEx‹Î¥@HÌß…Ñn^á¡¿Þ°žM1éJV-<¢:RÒÌ(mPëƒõ(­÷ÌŒ­}Økúxæ&‘ã‘Ç*—:.4™Qi5«¶°Ã×ÏQÖ»ìÆ5çPGFnàçG(Ã_C3\ìŒwÓÓ´J ïÏ’ƒ›ƒÈ§Â%×ú»FOÂE÷f¾·0H]{XC®iNo¬M4g ˜]ÝZu£ê˜·¬CSZ±‘÷ßûèÆdŒÿöôí[þè½sGD"áñ„¢îù:\¦ƒ:êàâ»KkÜÜîÖ¸-Ex 8 endstream endobj 191 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F105 26 0 R >> /XObject << /Im6 190 0 R >> /ProcSet [ /PDF /Text ] >> endobj 203 0 obj << /Length 3799 /Filter /FlateDecode >> stream xÚ­[YoÜÈ~ß_¡·Ì.û`x 8X`ˆ‚}H‚dtØ;¶4£htÄÿ>UÕw³yÈȃ4$»ÙG_U5ÿ|ùä¾`¬³ÃÀ/.?]h~¡,ïz¡/.o.þ¾a[¶ð×ÁÛ›÷pù {ø»Ûî„0›Ë-×›Ó–«Íƒ{ð ´ÝÂßË->¼Ûþóò/?~€lgW8Q±ãCÇ7Íûl@)Íæ¼elsØîx¿¹‡§ÔÂzS°Í±ÚÎø«Ã37á5-æ|¢pqãz½Âýx½Žn„§ôŒúÜÀý7Ø€…n9÷Û³›Ãµë¿¼* }àú‰^Ûoæ×AM÷nP‹”8qëˆÃÞº)ÜêXZþ#\œç†&Ò²~¸0@[%¶²g‘hLĽùöþo[Ùo~ú¥Á!:ËBÏÎMôþäÖó¸Ý ´¨¾{±“bèô`.vNfÜkÿÁ…"¾;‘mÞ-U¿yÿW¸þ®N4{ DåÔæ³ël¥ßв9êà[n±q‘g.'uð%F#VT¯ã7·­ ¸ËÂÝ#·…þ½¶ao?䨗‚i6«ò°„½"pÙ҃܇ŠxöºB@ ¡ø´ŒÛÎe7}8¶¬¸ê´õNÝ x© lHÓéõÝq›sÚ l°±*œû-Å—Ç3¡éólG eƒ½-ì­{I¶’7ÎÿÏlYˆ52Ìx~¸Ù?ݶýgç«…Åׄà)¦¤à%ª4QaÈ`±!/Ä¥YÈ aïäFf²ÇhÐ~»!Ka’Ãve¸,CÅš{iô$¶= !p52ì&O5Ä~¹á06¥”£ª€oî¥,_Ÿ µ<ø‘‚:Ã_¢LØ­ìˬ£]ÆZÀú j‹ˑM–=Y©@“cFtomUT•5s¨<ˆ…í=Á¡9Ô;Xȸ‡HBaC™Á£ìk»¯~›Âä¹qü”†ò‹ËƒÇRGáÅ ‡¢¢œ{g ä Õ;9Ÿ…-ÓïT“á.ð6¸ ‘û•祓z)G«iÇxOãÐPø¸9KTZìÍnͧg¤\–ËŽ“è ³j12ˆ|ôŽXm5Ÿ±ÂYfF§IZNÈúÛ]&¶€Íub‹7«#X÷i”J¿žÝÛN%€pŸºQÞN¶“¢FÅl‡ö¥%͓ʫq\å…+gë„UÓ(F0¾$ŠÔÇ¥ÛøÈbN¥—òÜ?s% rÞ&¶d¢‚K·…&VÎÓ.#ôÉÝ’Ú]–=G«!X¢W@‰Ld>XÄ`„ñäy½ ”â¯`<{{C4ä™;¿®¦Oj¨ßÉ[ÈÜJ.f¬|1ÖðÊïÞ ÜR±5—¢E©5÷/x¿O÷Nt=&N8g@T6܈Â>+mFkÑEÜð1ˆÂ‡uœ†Ï¨6oBØX JZÙP•¥Ã"~|~^Î Ï^#+èÖï0n¨´|’±øí%EöcÈÙßWÑóuvP$q…#¢ñPü:àLA¨Šðì\¿“ñ[S˜½5ÃAÃ\yCP‰±¤Ò¢ûp=¹šÃ´jTešlh„š…ØgЮÔvÌûú@†¹.«;S¡Q]ÏäªÐvÅ¢—òÒ\àOZÇ܉ ¸ö_3P× ºL'¹^8¨8¤²–§K°_#¨¬+A>ìî»^ªÀÇmú…ªˆœc1„0· L••ÞJ»ÂÚ¾æUY‡_v\˳ 8¦‰3@÷ë(ïd§"T6ÑIZ;š{¢`MŽØ[S–›gm†0źL?À)#Ê‚¯ã^ Ôm}mB¹ûº6¬6oH×Ü$wkû)ƒ€¡ Ïœ1Ø:í;±µˆÍü}Ûibkȧ›Ùz6ïÝω°ÏJ§‰])ãoŸüK¾Ÿ…r6^_WÑ÷ᦑ À_«Â=|È5’Ö¼k¸OpI¼‹=6wß0SĽÒ>»¿<õŃÅÁËõþ {OTwBÙ`Þ±[nÞñ~yç\uRêu Æ:ìmJ]É߸ƒ1eöÖíŸ~þMç2¬‹]þ”H4]ôc¦Ó"O0ßÜîï~GKvxúã·çc³ê ÝOõc#è7fª*h’ý3&‰Ébþ)¾Í¥±³b‚ý×§¤IT/c¼o£ ÑïÙý6‚×r7!®ùVlK›—QeV³Üd¤ð~ý‡»†Ík†ñKþ‰÷è²<<Á­W#ê3Yï6=3¶¶Z,mñ2ë|×”]Ä(OŸŸRñ|Ý“"–—{&‘Çñ<ƒunÇ.»¸~KUm’êaÙ¼8BßõâèÍeß©Z݂ƨQÒp«­aÌ=.6FD}Ú/¹Ô&ŽØ~”›,¼Âª4È8ó—yN™Wê)KßÒåœ-R¾uÜçÒÅE‚¡¡f‹‡>³0çê® uy(³ãÿ^o裀Ei»Ó©ÔuÞËG¥0«8…ý0jœÉóHa›Ù4m~˜PT—”© y’q…È#Õ àùA!þÿÛf}̾zè„a¥ˆÔY*iôê,UyBíì^^"±Ñ ©´±Á Üdy”ìÐZšY…øÛ[»Zš‹E3•Yš©#f4ç(àÁ‡·™ëôT™Å9•Ö>†càœ•dk,áfâø4Oǧ«tÉÜØ€U¸.ÁCä]®ôÌÇÑæ v]cÐ:÷‰Q©úør]ÜÃgsg7Ò GèøODgAqɹVaÇ'ÿ!i^v4)™@¿‘ûk Y<É—€dSçfJ#%«Ïme¼V êÜ—ñýN*Qóôf)ÏU1÷*¯I–”Ëß<qô¶[òU°%î!¶2#ÙèdD¶Åsy¢vÞE‘TŠ}ýß™2»+`G´¢C~È£lÖ$oÞ (™)e*{M ±mWª¤7þXMàhpÕ1GPI_@ã?_þð?pÝßÿ endstream endobj 202 0 obj << /Type /Page /Contents 203 0 R /Resources 201 0 R /MediaBox [0 0 612 792] /Parent 180 0 R >> endobj 201 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F105 26 0 R /F109 37 0 R >> /ProcSet [ /PDF /Text ] >> endobj 206 0 obj << /Length 199 /Filter /FlateDecode >> stream xÚuN; Â0Þó+n¼ ‰½6M7E uRÈ&â³`_ø÷½Æˆ.r„|÷½8‚Œ‡ÀíËÈTšœ…M'.Bû(¦/R”ìÿˆAÓU09‹Eœ¨R»ú©1¨™óÚÛÜBØCN¤Mf¨ÔEVBØÂkIØ$>]¥*q'UA+Þ‡ ½ÁI¯­ùzÉãœá1Q7™Ó'ÒðÞ¼á¨ws/ž¥‰½kï)×½=ul¤Œ=„O¹ 3pV»Âªü÷DêéU1 âôCFž endstream endobj 205 0 obj << /Type /Page /Contents 206 0 R /Resources 204 0 R /MediaBox [0 0 612 792] /Parent 180 0 R >> endobj 200 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/dual2flow.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 207 0 R /BBox [0 0 469 591] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 208 0 R >>/Font << /R8 209 0 R>> >> /Length 210 0 R /Filter /FlateDecode >> stream xœ­YIo[ɾóW¼SbV§÷sdKÉHÀ\ Ïä“Ì„‹†zÔXÿ>_õþHMb±S*VUwm_Uµ8§¿ùs½_ýñ'7<½¬"uøé¯ù‡ÓÓê—•H?çõ~øóØ=WIƒ¤ðÌ9(m˜·vxد>|þ°yûçæ<ãçþµºSš¹áNpæÌð°Y}x>M¯Óaçíë4ìÇíažãa=}"nÅ3³¼Óét< §i}|NoÄðãÃê+Í‚÷Á¿®„’É0(É3nJ[¦í ŒfJIˆ®îo°G3 {´L˜Þœq÷¼}=ÎÙ"©XÀ%3É¢—i7­çFM§íáixOÛñËnú![$#³MÖ“žáËø²}ù!)³°µ}~ÞŒóTU¼|þrÿ#1rf:¶Ãñ´Çw§is^O›a}|™“¾ÀtÇ–ov˜¾ÍÃn_q;b’fÁU«þÞ+ò€rNãX!9b¨o8SÁÜêTÏ$œj´D’¨¥WçΧâŸæK¿yE#­d6Ô;Jµ½ùޤKRjæ•ÏwD¢Ÿçí~Ümç·|Md¦ê¯ù8®gdhŒç§aýuZÿ;™“­±œëÈ8®×çÓ¸~~‡`·§=ñ¹EP'¨ù²¥ã†ÈùåÊ\á-rSTsu°Œ£ô¢¹R{ÃÈÕEæ=(éc•@Í ;„I.tGyüCô20+£`¦T¶¦^[rSèÔkGå-;õÒ©×{¦l§¾±5õÊÀÄ^»²Ú1:íÒiÏÉÚ”7®¦\Ü]“ä’qSÐÍ-b ç%SŽ(…Åjά&гž¼ÑQ z©ÂS/Þ­¾ÞI13g:Ïùñ°ÔƒK€ ù§š:Õ"›í…ÒŒWÜÊUo|5ãÊ®lz'“Y:½gßh¼tÑxÅ‹uëQ<óöpކߥfQ‹1b+Ð"Ú.”Àà˜âBF†Q¡²wZ0ø.tM(AÑ´i.U.U¡’ˆÉ~…fã™É¿îVJsËœïS¤÷è˜äœŠyS)Z ²î¥2OQÛz£#•‹Z B”IøFð[ M. -¢ÐnºÎ >”A>jDZ(vHG‘¦ðçr±Øà#x5ŠWyÓKž¦ùâôdºRʰ>ž²Qè!ªQ(C=¬òƒOi¹«,‰%1%´ÈtàÝ e–¦÷òìÛ‚¡`ª€4ÝXÆŒçóaŽþ¾ƒõŽz,¦&ÁyJÀóáËñ|ØLâÐË>9}{¾HÎê/4E„¢…øk_)TïÁPæ#ç$Fž­ÌӼ產S:Šw†IßKž¦ùâô䛊ʠ¤]îRk…Ö{£tà^·¡{c»¿ª8$'ö³dŒY!à^ºh¿€°^®Tá 0ZÜBE*(®§i>Ÿq DïÃFÝðä:™“\ÍÑàcZ¢›1£®}ST#ÔTg¹ï·GX$*š3:›DoXÚ#–Ðû9âI’ôbä]¤¯Àh"Á+ Þ†$=oŸ¾b "€'æ×ÃàöŽñ4î'ÌÙm4ª)<$“Þ.'A|áhЄ7šŠ›ÌC¢rLÃŽ"-¼³Ô…||Q)ûªªù¸Rª`Ã'Jj,!ÅHÈŒ ]LÁ‚H-¨­›Åœµyb3N0-@Á…elÇ•¢<ãy»l]ù×¢§—*”ÿ–1PŒ?bÑlàÜ×ð¿“©kÇÕí^B¢æ±•öúÂ[à«A}H-˜Ò ô’º#†RZ0æ‡,ô–ú»"ïßa­Âꦎј7Z8lkçÀ°`Ÿ¸€¢Ô¨ÊÀjDÀÍÖÛNp˜;ă± jq5$ :4´]}3p_/·¼Bæ-*ZgDNY¡¦µÀÓ˜Œô“ë)”ŒMvßTÕZ)UðÖøq‚h*MÚâ‡4h‰ÊæŒkã¸êìjèq'm†ÀË`Ÿ–~Ú£¢sÌÿ7ÞqŽî©ƒƒžÓl/tª]ã©§–e£(i:©ÂÓ4_œžX#‘Ì­© ŽCÁ\øƒ&¸Xþ¡§ d—Ý7Uõ•Rïßëâ¹c6®Ò1—^ØØ:f;°RºoÊ_ ‚J…õSÊßÊÌ[潡ªIKªœÖZ!‹Þ²;¾ÌCWëf}¹2·n*Ñ»¹éªD ¬·ÔÑâÀ¿k§Ë|1ŠvRµ¶¾¿wúh5#¤{ò: e~óÉæg†«ÎXïò¦Q Öá´±&Рآy”^Øš%…çÚÒÁׄrX¯ºPî S›”´A¶[Ñ&¬Fè&¬Ë­¦—kV™ßÚ”§2I`ýtÒ&S”½Zt”n€+ë÷¾©ª y£Áûz­<äãVœP^Á”‰æ ŠÓòâßårÐÉ•máûSDÓë©¢8ÈÀ¯Æ«”K«ÁÇßV=Ár´¢“ôÿuŸ­ù–ÓÚ‚W(mÁ3<ñ¶¯<ë´å­£äªê¤2O§ùâôÛÖ)Üî%ivèß§q÷óvþúw80 ¦fùN2Î󴞇ùˆq7~‹ƒ@ç§ôT[gÏô^'{†ëaÔ Ìž&Ððã¨Nn³–ït k¤ëÜMS1:GóZPÀÑæ·ÌÒ\k`9ºCG)‡7¡ÂÓ_ž}ãC:m§†z{†µÃôkšúíÒ½ëñ°ÙÒcvôŽŒï¦ð\}}·»ñÝÆ_î¿8¬cñ<êtÑ …ÂÑ Cy`¼ÈÍN°ºâþ=TUæ½C+¥â,UýU¼*¥afUÕ0³­ªHùþ<©`Äubš­‹óÚ{i¡dM\!ÜØÀ#ˆÄ<ÅCê>7iNÿ“ÄÄüOó¶kSm žðï#°{ endstream endobj 207 0 obj << /Producer (GPL Ghostscript 8.71) /CreationDate (D:20101231111146-08'00') /ModDate (D:20101231111146-08'00') /Title (/cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/dual2flow.epsu) /Creator (IslandDraw for lou) >> endobj 208 0 obj << /Type /ExtGState /OPM 1 >> endobj 209 0 obj << /BaseFont /JMCLCD#2BBookman-Light /FontDescriptor 211 0 R /Type /Font /FirstChar 32 /LastChar 121 /Widths [ 320 0 0 0 0 0 800 0 300 300 0 0 320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 320 0 0 0 540 0 0 0 0 800 720 0 0 0 0 0 0 0 0 0 0 620 0 0 660 0 0 0 960 0 0 0 0 0 0 0 500 0 580 620 520 620 520 320 540 660 300 0 620 300 940 660 560 620 0 440 520 380 680 520 780 560 540] /Encoding /WinAnsiEncoding /Subtype /Type1 >> endobj 210 0 obj 2185 endobj 211 0 obj << /Type /FontDescriptor /FontName /JMCLCD#2BBookman-Light /FontBBox [ -30 -241 984 734] /Flags 32 /Ascent 734 /CapHeight 694 /Descent -241 /ItalicAngle 0 /StemV 147 /MissingWidth 500 /XHeight 563 /CharSet (/D/E/P/S/W/a/ampersand/b/c/comma/d/e/f/g/h/i/k/l/m/n/o/p/parenleft/parenright/question/r/s/semicolon/space/t/u/underscore/v/w/x/y) /FontFile3 212 0 R >> endobj 212 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3908 >> stream xœW TS׺>È9Z¡Jš+Q›Ð«u(öÚÁZ©¶¶Åpd‚Œ!„@B € †ÀV S $$Œ™DÄ¡âÔ{{í­V½Z;`«Ïw[÷¡‡·Þ=Á¶÷¹îê[o½µ²ÎÊ:ù÷¿÷ÿýßþþ/Ä}B¡P¼>ÎÈHçÇ ^ârRÅ®7kð%|éüe7>qøgÞt–ÇËH.ßÌwóÝKŽxÃïBã‹0oâF¡ä]@†PšåZï»*|_Äj?¿5ÿz󦿿¿o‚ô×_|·$‹¸ï ò‹$™—!ä' Ä}Èh›èËáI…©"ßø¤¤ä$ײýñ¼ätßm\W(Ìø® XíûÖo¼ù:ùx‡ÌèûËñ}ƒ|g xî‚ ËÂ-[³DâlIN|n‚41)9e'•šÎãGøn\±jóê5q²ÙƒìE^EV ¡HŽìG"Häc$ @¢‘-ÈVd²y Dv ;‘uHŒ„  ²A‘¹ˆ/2ñD>D^%1EÜòWJ<åïsRæÜu‹uksg¹‹Ü¿÷8BeP¥Ô'h(zÛõÍ}wÞ¦yÃ/0_èÿÎüLÏõž#žc^s½>{‘þ¢ùÅ{ <,Á5^Ó«€ _m˼áœ)X7µˆv ÆãR:—,O+-ÆøhsÉHq].ØÍ ä(“ŠãÔY%>|h²¡YGãÊ¥fp†JsŒ_<×6¾äŒ-u'‹Èÿ_"oïz}󞬠-L/ül¡ßè¤t?=OÜ /¤oÁ¢Ä„ø¸ŒÀVŒðû~\ _ýá1\5)¾œ2ÀŒl{`GéÆ6/´ˆÍo¯Ýÿ9\_¿}—å5¹6¸·_fËï'«z:íOÑAölQ{¼â=j²(cɨZ/%‹šIDA¸4+®øµLÚÆp-::”ÿ À í!œ—_”LrûY´ý§8Á¶Kv€;‹rïïmØWë‰E5xûQ즮dò(ÇA;þßíèùÎsƒžp9øË$ª,N p-¸mº~áÊÄñ‡à0•ô(dbÛ¤Ÿ•ð1Á£¶hFU: ðg<®¡ƒÞcÕÚÚº“Ú)àfêð–Î(ÃvðØ(Þœò^Ú  ªéZM=pb^ÓI wŽž¸m€¯àµ{“YDËÃM¿OŸ¹J¥©yèo;̼Œþv2Z¿‰~ ¹<=A!|ýãˆÕ€¸ÕùM…µÅõÀŽAÎgè #Uû:ÖG¹ÔC˲Åë¶~@½ÔÚt.½‘L¸ôë<¼ð Y†ƒb–a‹hßþèU‚v9-õVÐ*5òY½º`Žf³EóqðÍÅ"µBÄ)ÕÅ4š"•²óžqëÌ}X÷¥þ.žMÏ *9;âêBãÕ÷vùHùIÈ‚/¥ËÌΈMü88Äҟ”•†C=—ÚAlópPkúÆúMœÿÚ·WëŒ,‚Õ!ª—)ʹZy#0`'úìçn\>°ÉÁ´S½ðäæþÊ?¦ÜàY/± îL¦!^Œ []Œ¥Ý!î£ ZÏ³ç´æw);Á90`î:%4ùp“Ä2>À"EÇ¿fÁ>¸ õšÞT8˜ô ÂÙ+ÚDbX€§ÿî´Q§rÑyNɦÃÏ*BiC{÷¢—etÜ`Á¯\QÙšÔÏE%£ ª:ÜiáõŒ‚?ƒ3Íw¯¹à|¯ÛïÓ 8\\[\*À¨×:Ž•GªŽ`6BÃCûUz…9¾=C÷9G…¯Ã§–s6멆HࣃªzàeqÞá’‘Æg9ñ³èËà°¦º¤Æ•²¥^{²‚LVHÆ+j•M1 ñ>¯Õ¯ÀM•¦T‘›6hÇÈí)6å6²áê™E>“T8:NëTè Ÿ¶]1Æô ‘ÉGOi,À MN±œ,æóÂ~ö þ¶Ó»óÉÆ ŸÄ0 Ç`7˜/S—Æ)·Œ}Ñ  ˜ŒøêÊqü “v<¼©C|nIpÔ¶Yr[}ò ê< Òš¢•¾DN`0çóÛÌ)Æ],8Âå‰yÍ#áÆ§.™rZÛÌæ6fi›‡µß<þij“(s§…í—D-9Ô3xåÎIè§c‘:ø Ø7 ~ïÛ±Ó¶†Ë:²íVWƒ< *.<\´ÞÏgÓC•V] *@_[i=¦=âc#ޏpn”wÅùÄJ‚F,cGfæP1øPlC‹Ž¬È×h+õ5µ¡»Ï»¢¨LT +WPa|h³¡áÕÒÚ¸Ód—ÂAÜorw ž&E9p:žžHÌÞ^„ñPSɘºF ÞbÌtŽ£Í—£úó.‘ã‚~pÙšÿ$Û¢s"BYáî#g{ûnâbá½kãªpvS7©‹x7qxršNVÛóXÏj*K+f©UWÓ[NvùR‘<ˆ…ÛgÖûdíÍOM†(+dº,‹²"`‘83É)sv5t8Xívc§ã&üͧy¼Ù4¦ÃÚ !=­¬S€ UeÈùÿrØ”ü‡Î…ÞôЭ Y![¾í6\0®jêe™{›Ïlô/•Ušê!0e[­¦æv‡¤ƒca&Zcô»AؓǎÍܶ`ÄêG¯Â•¯tÝeÎ"GÞÕwû½É=ºI’õãñ`zxwd=¹ ±p ©§ËƒlVgÌÁE`U½UW§µ¶c´È@¸É†ÊÆj à4”ˆFý »ñWØiý3ÜÙaE¡ Ä[$y]Ê!0úµ§ê»Ì#}–³`tŒ±g î‡N¸ÐIÁÙЇÎÙË[@D—ðJA§ú$øƒ©¥²®´žÄS!­[É3¾¼j9±<°%ðx,«?òBÖ_Á7àRÏÈ=Œøré•}õF£Õ^ç§AOVS4©™¥ LƒzÁ¿Bÿž&œ ü(ƒ—½¤¶¥öI‡³/˯’¶eý—~°¶4±r,)ú­ÚÙ,sðõôkŽØ5ì¢ä +?;½€ °-©ï;G¯±ÈL÷gŽÑ?+´æ‚$ >$æñsBä;Ij ›zÇ{¬ö1ë™o\7HvÖ’Žý{±ñwp=7>ÞJÊÃY+7Eäýn V®9£)Y ¶àÌû0/xú[1=½§ 'A!oÛ¿˜¼Ešz¿ËZ~5yÏ[ £ e—ç¹òÓðX¼‹Nºÿ4®Eèè°Xa[š«BÙ ¾ÕßL3xŸ{‚£$Ï–â&Ò:q¨rŽíûŽÐ}u›I¸??!ý 73Iñ­ÂvÞiÑßràb®Ï#QìÆÖ¿¿k9®ø3\¼•™"Ÿ$¤ÝÔ¦á /çÜ$uó è5çwö˜YüÁ( ´ m>¯5'µƒ1ìü¥S·ÞŒô½Î´×z¸Èo÷\÷ þ oÑûÆú w Š&Ú£iT‚\ ?\(‘oK}ðÔDôÿГ̣˥߽ͤ޺ö#±¦A\ àR•["t™íhlUrkÊÐ3Ü)?‘ûÇζüßåi6}ž˜­¹V6ÙPñ¯H{ýüálÏÄ£¤-ÿÇ”¸>‹hx>—~aÄÙ8@Ê®%%€EP *–¨”r©R-PK]‰êžwƒw¢†7Ff‡0…ç“Í`+8³+£Ý¾ÂEÿÝâ?ß}2•ôhF™ªLVÇ(¬Uƒ5(­sxÂÙ4°älKÚÇ,"ÓUD6û°Äµ@oC%GÙy¦Ù"€Á5»¦7üîÇ»í÷/•1Ú‰r9©ËJ«‹ J]i”š<’X<³Î‡Xï%'\%¨fCÞP^s¬ìˆå9¡,<ôrAKFëZâ…™…®¸ âÒiÀÚPs¦ŒŒhá¡×ò*UíïÀ=3Ý.{µßWÎìð å–ü6ÀáK”oàKnJ¸Ó?mïŸ`CüîDŽ0#9Í(²ÕV«­g*c²³°1ü6#Èà¤ZVkg§ÀÊuýO‘ ¤uãÿåôîb¼?$elhºgÓ ŸzU¦S‚D––¾oÏÍÍ7wßi;ó ¸Œ}¶ë̺•›‚Þ 7Å Æ1wå ¸éñ‰¢H B:vN9™~%÷2¸ ÆÍ7®Òu2“ £äÙô%“K¾ï¡ÊK œ¤©æûÖ“õ½ “-O«ªïÔc3Á5ô¨‘ÜNЇ u÷ wqÄc’²™…êR ”c´†½AôÏ÷ßyãsÂ#|wXfÀ^Ùòt»Ý;r«™EòóIÎv’œiêCÅÒBN^Ošž¼]îˆ@hÌo}l›Š‹°Ôßšu@-6€’Ï–{_Z]ê.ƒt¼ÓI±L BúSˆ¸AÄè)A*Ç*è"AëšÍ4A/}`ì¸Úê¨õ¨·Œ-Ív½“Ôösü3ÑV¶eOý>°Hy¤6ÄD,¾•×em1·hK*”F¦JWRj°ÁOz¾øz$j]˜ˆÍæ1÷%…s `ÈŽ(Žä¸.\0åÖ@øÑåú²Æê®G{£½çZíßÜ `©øÞ¦‹|svÕ*,ýRвZ,%ŸYëüØ,A(%‰q½½g\üé¦,«®ÊEŒÂ1?^DÖ­!Öž§¬qßkΣ^9\j€[ ÔÞy_è-Ÿ?ÿaù|Où'p¡š endstream endobj 204 0 obj << /Font << /F52 5 0 R >> /XObject << /Im7 200 0 R >> /ProcSet [ /PDF /Text ] >> endobj 216 0 obj << /Length 1638 /Filter /FlateDecode >> stream xÚXKsÛ6¾ûWðHΔ °95MÓi§Ó¦3¾t’dËv4•-5’ìúßwŠ´ew<²H`w±oлó³7:UôMo•-ί o›Þ˜Âöªiµ+Ηŧò¼ªM_~­”-¯ðÑÚò¶‚rS(¿Uu'‹®¼$‚MÀÛB‚+wÂ(¡\àgWí^gIÖ¢Ò¶ÜVà?aIüwøÙ ׺‚–NDyšþñ"½_‹”­ðA_®ªZµ¬ÉZË6šiåêŸVëÕ¿EÚ‚tØ =-ç^Ø3¿bÛTÒ‡“îX,³¢ÄÜÒL½eelyH:}9ÿµ¨Á°ÿk€¦ï:ñ¿è–,Ø25Z~EVÿ[ÕºSåj'ߢc:×t¹Úi¢— êÚòFvhUÄðûB¾¶tØ!ùÊïpÝFç1É’H®*K #ºäü‹è¨e‰Ïr(ïCB™;QßWu!D(]a£ŸÛVŸÞÈÇf‡ë\áhÎŽt=ˆÝtÄD8…¦%G¬V–£²º6í§žU.‡1³ÜU*’'OÀU+? ×AE ’-RtYèÃZZgEr Í‘Ëv²:V×¥ ŒéC\«$!6ƒ-174Œ¼%©é=R¾JžoMÛ‘3“CB†Î„å’Iö2ÿ‘ºÖ?[œ:]\ˉDßI×ûŒ)ÄC¼b\Êb؈Œ5H_9'T Îèü]¼IĤÔõ†ÜiâÞ Ø¢µú¸ààñQÙmZ¨•Çøaš,÷³”™ZÕ¾ªJAù–àÇAÇ÷¬1hkHŽ—¢>s‘k–ñ+BǬ-/‡s7òøY‡o€ÅþŽßdVªÀ®éµÛþ˜8]›ñY6Â[ÒÇ´˜T]Kß|€¶Ï:¬íÛZôK¾’Qîì¼a¿™¡p>RÜÌJèl?ˆÚ`¬Ä>Ö8ŒÏzT¤™‹hþDÜ¥ÅG±ïÙL›Q´k:ïë—3êƒn:éÎjšz\4M¨Ý_ {´øŠê7€©>jnˆêW5ÜqшÙI«›`üà¦Êkë0ýØØ@(›öÒÇ•éçŽù·¯žˆ)Lsyt”¡¸ÖŸžBb­o²úLjÄp+4£™`æìñ¸ÒAäÖ&£ßlIÚ'Gð”r9çˆÙa\!nV„¬KšÀˆÓ)ËuÈr£Dß—¹†`Ùz5ÅUÛ,™0û] ,¯Q¦Çˆv t 2ߣºªü ÿëò7~þ8cäp­Š0–Ðs5ŽÅB9é„R è55d é}ì…1K€‚rÝ$ôʹó”ߣŸ.aG…!ú=K!{ÁALw S¤tJbxˆ='T• %èícÓ¢ý§ºdb‡È€q"¾l¤¬•ï¹ÿ(ïQ ò5 \©ßÆ6CôY‰ ¶IrÚä¡9Gž[Dt1F £z3>©go!{˜wy+kQ26 F¦I@ûvPºH¬O~Ð-ë°mÖa¿È Ñî™)bm¨6*›Ê+îeuŒ÷Ÿœqû5>M¸åõÜ^|§#–‡Åzu7Iw‰ÙA/\ׯ²_nvBmôñ-îdv?5lžš8ÞÎY `=€ž,Åj÷âõ~Öbã1­Üë-f­_—ÿÇFN„³ŸÎÏUl (zh:¬ ðJc»âòö쟴GÿçÞürë‹÷›³?ñ/nÕAPIz7ùõVáÍÉ[U@ 5îÙJA™±aÿ˜gúó·x#ßÒ¿0÷~ôÂ÷÷Gîùø¬{uÞ4Ú«¢¦[pTÐ a÷ ú6 endstream endobj 215 0 obj << /Type /Page /Contents 216 0 R /Resources 214 0 R /MediaBox [0 0 612 792] /Parent 180 0 R >> endobj 213 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/dualpivcalls.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 217 0 R /BBox [0 0 429 338] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 218 0 R >>/Font << /R8 219 0 R>> >> /Length 220 0 R /Filter /FlateDecode >> stream xœVMsÛ6½óWà–ø -vñ}mú1éøÐ&šé¡Óñ0$-3I…¢›úßwÈ4åÊRÆãƒdàa±ûö탾 (dü;|V]ñÃ'6û"­Š¿¾Œ›âkùûá£êÄk†û¸°¾-rÊøÀ«Ö‚VA¬»âmýpSß—Û]ûÏ0]­?ˆ|P5GN¬kÆ0 íã®1`É9a¼3y³nÇz˜îvÍ!I…$VÒ õi YÍò ´=z¸©î¾p"ÇQ4ÁðúÛvì~â”~ÌùçuñGÁùúXÜ·D@%HgEW 1´@¯™N+¶ÅÇ„¤ºr6À% Æ}o‡Èp§8‚²:wˆKíî·S›[à ‚öZ( V)›xÙWeÿË0FRÞ÷ïʾާV&þÅúšͶ©¦?Ûén¸ŸÞ÷·Wo–kyaîÅu"ú~W—S³Û®Üîy{îæõé>0"`‚° œ Y:»q膩ùXöÍÜ®•rà9Ò*Ë-‹ÀªÜVœÇ»»²ß4 å82úQG¸Æ2Ì„e®^ØN¢ Ç=°^ L”y>¦q^‰ÝQÖ!x»@) ìƒËª Nƒ¤ØgO±Ïd‘3=ÆxE@á> endobj 218 0 obj << /Type /ExtGState /OPM 1 >> endobj 219 0 obj << /BaseFont /NCRHDG#2BBookman-Light /FontDescriptor 221 0 R /Type /Font /FirstChar 67 /LastChar 121 /Widths [ 740 800 0 640 0 0 340 0 0 0 0 0 0 620 0 0 660 0 0 0 960 0 0 0 0 0 0 0 500 0 580 620 520 620 520 320 540 660 300 300 620 300 940 660 560 620 0 440 520 380 680 520 780 560 540] /Encoding /WinAnsiEncoding /Subtype /Type1 >> endobj 220 0 obj 863 endobj 221 0 obj << /Type /FontDescriptor /FontName /NCRHDG#2BBookman-Light /FontBBox [ -109 -241 984 734] /Flags 32 /Ascent 734 /CapHeight 694 /Descent -241 /ItalicAngle 0 /StemV 147 /MissingWidth 500 /XHeight 563 /CharSet (/C/D/F/I/P/S/W/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/underscore/v/w/x/y) /FontFile3 222 0 R >> endobj 222 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3574 >> stream xœW TSWº>È9mQÒŒ‰VBÇŠ^mk­V;mEðÈC ïG !@B€$Á­¼$@x„$„gD£ ˆˆ¬Î´Ó¹S‡öÖÚë`ÕëÖ}èaÝ{wP{Ç5×»îºkeeeíüçßçÿþoÿß·i˜óŒF£¹ï Ó±éëyÉ)bÇÊzr)|k¹Ì‰¢QE?óg³\–au¹nÀÕ ¸:·¼µPí§Á¦_ÁÜ…˜&u¾Â y–#—wèÁ°5>>ëþ{å­[·zÅÉ_üãµ3QÄKN÷Z…~Hù Abºx›—/Šæóyñ^É|yFŠÈ+6!!1ÁñØáX~bš×.Ÿ—‘!”xyû®ñzwãÆwÖ£¯÷QF¯çïïè5_ÁKK†y¥ }3vf퉳÷H¤±²8y|BbÒþä^Hj_aû°ýØ ì¶ ÁVc‡°Pì0¶ ñXæ‹Eb;1?l¶{óÇö`Ø&l/ˆaÁØììm$挩±?ÒvЦ-¸êètÝ™á œoºüÆ¥¾~ ÷Æ[ˆD%ñ¯%¼öýëÞà¿1åëúg·(7;×ý{÷Iû¬70“k̲¡t½\0ëg3îÀXRÎäу©%!%„o+)©—}lJƒCrqtqV)K[ÍxÖÉè ¹\bC€3¬ãׯtŽ/½dN àP¹ÿKäôÁáõïÏ ÜééN^.°‘Ûl´¾'°ÿ‰ì" ˜~ H-üø”ÏÞp \ùð1ôžO%óŒ½àßù NÄ3ïm¡–QŒ°ßÛpøOp)|s|úŽû¬,ˆ„C´³ðu§Y·ÙMÌTº$v¿=¸ù}ÀÞÖGï H}¬'¨£Ð‡Z ¹ùä2Ä¿ðŒiK‘f§ŠØG’Äa øZc†ŽŽdÞ÷è÷.†¬/¾ˆÝ}Þ³YX+±„]t÷YŒ’™á;¹ÜœkG>]O3Aî<€”ü’ýÅÀ–ÒÑb8ƒPyVtÉßÁR.ocl¸?—2œû;@@Ƹ®¸.™äÙ9ŒÃ瓃ÌK÷€07œˆphÄw›©Å=hËÜæÞDTöi`!ÿÓBƒnÉwPéÐ ®`‚­ù’0u–†Å‡8ܦ[o_»9qúxfOìšô1Q>€ &øôvͨºN¶²×0Á@YSµ¶¶þ¬v@ø*åÂΞýnð)Ø&þ8.<2øÃÔU ÄU«Sj5 ÀF¸“óDzå<‘3îÿXTŠ÷ÚŒ &Ъ4MŠÆü†â&@XÛ ]Ë*0ĈEÅJ‘§HU\r$N£)T« ÷Ù7Þ8ó®ä[<‹›È?Ï~Äœ¢3&ùø/•Í-Ãÿ‘Ó<µ,¼âX¸Ã†‘Sø0°(Z2ëe•²ª0‡ùôbn‰\%—¥ •€Ø7ÒÁÙ }m-ÁؤÓõ:»º;qß.ïj`¹“Ïx|é.¬ÿ‹ù™ÍÒUÉ1ÝÑõ!€½òý[Ï$ý”Áo¦]È7H@;,$~GP°Ñžä)oQéõ»½`(áYçÇA3jd™ök`¦ÿÒ%’ÎÃÃÒÒíE/uU„3†÷ûïO\(ìþ’¿sDek~[üRT""ª…†L#¿?oü\jûæáï?g/ñØ òÉn&˜®i«Ö—±,”ë5c5r°e¾ƒ[”òЩ£ƒ .- ­V6i6êГô4h¹Ë¤\à…’Ú’zPÅ-:­µì$¨:qêa¦4|Ü®Ö) áð½9&ë ®‡OW̦ó5ì.*N€©ò¨JrŠòµZžå$/ßc.‡4Õ¥5Ž”í Ú³•(YŠWÖªš6ƲÖRÕoÃÍ)M8…6mÔÚÊP„R€÷—´Êš¸pÍÜbÖ$¾m)›Ëm:ô‚O;o¶èÇtl3•)ÀÏkŒÀJ´DNÓŸ ìÜ!ò=›GÏ“m¡µáIÀ>&åš_|†Î¬{”Gea¹¨Ù@¦PQh6ã¡ÕòÚ苨KXÁé3Dûf^Dâ?ËŒ§‡KÅE» >ÞZ:VŒ¸ó.{®go›˜Š°çÜ@gë7‚>pùº§Ø»"¥a!œPç‘Ë-€øëÄo©…”ÇÞmÞ¡Üæ>4ZÉ>ªhr–‰ªíÿ+“Z/kªŽWÎS«¾f uùV#DÁÝs›YY²CS’2[T•ùuYFU¥é"qf‚-}ÌÖÛØmåXºZz¬_ÁOɵ¬¶ñ¶Ö±:ÂBeð‹ªz%¹Z¨¿Ì¤¥ÿæDò 3Ä/.++vMÃ…ãÚáæŽah í FÏóS8ÇS\Ò[³M¦Ö6‹UÒlôŒ7Õí¾`vl47*sØIPk­„«Üì½3ê9:îØ=Ð}ˆdvrÄ í o@»P‹Ö!;¶"¨Å¿›Ëé9z-ý:è=§¬:S]½Öd!áþp»WœŒÒæéÁE6ù(x{Ë Øö¹-ÎÜC1¢b’s9½ªapصçz #ƒÆË`tçqç ¶ÃJ\d£‘\Èb&ï‰ ¬7ãf^OñYð{>¦ŸÈïMí?Üá‡Þq™÷ j…»ÿé(Ž=üZÖÁ¿‚ý#ßÔǬ¬ljhi1uÕÛÀEПÕ‰Fhæq%¡ÁÝáçH°>´Â¸3´§3NOÉp&utï‘Õû'ôWµ64êtÍÕH¡êUõ2LW€ª­Uo°&µE'ÇpâR%ÄÑRÑ@Å8ÕÏ¥ žAþ€3áY&|›>®êÚF­Ý¿“|ÝçsêŸ<©oèŒ;¯-»O*‹(ÏkwˆÖAgX„3øcMÚŸÎO3y¶gÔ%¡c›Ÿœ%ð’ò÷bž½}0HWwÁž®ªëW… x“Ÿäß^ÌøY Ão3¹•ÒZ`MzS½-_¯éFƒy¬¹¯·ÓÔlà4¬Gon¨C² ÊŽ×5êj­ ­íÙMi^¾DÊQ( UòÔøzqŒY%Eß°Ýû€ñèX‡ñ3æŸÍç]â[3Gäcî“O…ü´È% ¥3eP~!{Jñr>›¼ñÐXБ×Ì‘“t~Úù, ÈÍÌ[Ö¨uÜÂÄ< '7;-ˆ)çܵÞâ Lwçʘ_˜d ˆI2rÒ`E¢¾}`¼ßÔ5¦ç<³¹›†P§a-Iî«FĶW2à$~e|¼‡Ë&ž?‡Êye ו&žAØœ¨»@P枃Hà.>·GCÐÍcºQ4tÚ~|©Å‡IÿÂ'¾l‘Z̸è$·"Ç‘ŸAF‘½Lt1Iå3¬ÝF£ÕšÑ™ê¨Ù^?=|w(Uïqå ‰#ž½E¶"”LW$»0~è9Xÿ1ò‘‡sãÒbx™‘àHhŠíȰð/ŠþY —ðXDݰØüÑÞ¾êp‰Ÿg’b’’»ôÑ›/\‹™’~…ææFè>]{ úó ÁP„‘Â:¨EfÖÚ¶ #®Þ8?ýà«p¯Ûž]µ.¨hªÈ>ûÆóªïC··ç‹Ž~•/|ˆŠ­K2UJY¡ ˆ²RÒ–£WVæ"K"ÏN>“ucl´±k€s®O×>'däìÿ ¡½[ï8Øðgx‡i·]³ëÿÅ¡PÍéx¿¦Id@QT ‘S©·XdJ<þ CæÉ˜ yòêÓø[?RëÅÕÙ Ž©Ô²Ò G¡ :•Ø‘4ü¬á´ŸÐþQó\ûǹ8Ÿ>GÌ-9žl6ãâ-vÿù“y²ˆGÑ•âo3Pâø,fôäkÌk#¶¦shÞ“|9T:D%µJ!W§Ë‰ê_¶Ó_G\Øâžìë™q5Ñà üÀéÞ‚1}“‡ÿãõäeÚ¡Tò“Âruy~=» ¶¸ Xƒ3z.LØšÏ-½ÜžºƒCe:ŠÈæIè̸ä$·2§u¾ˆC@ïÍÙ-¿†‡É¾®»MM7ÊÙª‚,Bùñ꽪NŠü‰J“£QQKæ6±¨Uä$­U š ô5:}EMYù c’F#ŸÊkvl Þ˜[äˆ ,©AVL˦ƚKå(¢ßÊ©R[Þ‡ûçú¾n¹®žÛãâNj¨ Wiëœ÷‘𫏻TOÊõp§ž>€.Ä®®*\Ý0ì¿Ý¯E endstream endobj 214 0 obj << /Font << /F52 5 0 R /F109 37 0 R /F47 4 0 R /F105 26 0 R >> /XObject << /Im8 213 0 R >> /ProcSet [ /PDF /Text ] >> endobj 225 0 obj << /Length 4583 /Filter /FlateDecode >> stream xÚµ;ÙŽÇ‘ïüІ_Ü «ËyXèA‚-À†áÕB„ý »Cöl±93Ë!‡â~ýFdFž•]]3„†ìªÊ#2î+¿þìÏ?h±ñ“7Âlž¿Þ83y¥6Æ‹‰I»y~Øü¼}¾Û+¿}»f{½ÛKé¶/;¾ý÷;É·ãë«7ÛWñßðüõ?ûíq·l{³ûåùßÿügzã`[#q[¯'nù†Å _þûðéêt+H¶½ýg4pj?9•Æïãþ¸W æ+x˜¶'üñ ?œ®vš »Åç›Ù-¼x}n øß¯ñG8¸ðš~àWXê>ßìâºJ^ÑÏV¼K¸¹ÝeÌ}Øíã.Ÿáï<ﳿ>ö¿Ï%lÃ7ÊÛÉ=Œw“°~óêý³Ÿa›|üû†MÒ»Íç0ôý0sÚüô쿞}æÌW¨Ãµ<3-¯U<.`¥Ã‘ðKêÍžOÊ+Âôˆ“~S ú6­e7œMN{8k2Ú$ŠñÑvzòܶká—ðÝÕûýsTDíºÙ+£&'ìÀ'¯uüö2ò§ð h!2¡ð™ˆ"‰w× sä‡[ /|™øÃæÜâ?Ÿ*7Á4cvpjûo|ŒŒC ñ´Ó޳íu`oe¶2î2½}cœ|ö!¼P¿OÒ—xØí}x®Ç\á/ƒ¤ÄÂÐ+âïC\¸æ%-|hAYÄASº ¾¥Eã¾({”;’Ú„¤¥›¤á-Q£ô èÃÅÄ}¯gŽ7#²[+›FÞî"j¼¢w®¦ø{$Þ§ÓÇãp]Í&-2½ ÿ:襋Æ"ôÃaøE¤ßÆA„ÃB$ž”n™õÒÛZ; ÁoPe¿‰×qG&UV Ôìo¤æ`Û7¸íU<œæX@>ĽÈ·Ÿ Gâ»N1òˆ°P¤ºà“ÔÕ3ÿHî`m•¹TjO:©'ëõ£H'²CE}8cs E ÑXNœ÷@ξ`«?¿@ÀÁ´I®FΞ¬ÌJûÛ‘Oà'Y”ê÷y‰â[¸I9®ƒá&zÁ¸âC€üÄÀ¿ØWcùØ9bÚÊNùä&:1˜Bc&cÉ·z78’Ÿ,¬.ÀqŇEÔ-ù¬™7€5ëà¼Zß…YÃpF\\¤úŽQµgX-[ÔÍ^ Õ[ÜÖ'°Û¿ü/þŠ¿MíˆD¹Gga 3—G7Ét .4wEpõûGý Ÿ8ˆ¬ðëoôõ?`&édÕjcTô)ò{P<¸Q±â4'ŠÀÈðþ”ª’׃»x52@]YûQû¨Œ®Ö] ¦$pµ^ã,GÔ‚õg_|jcâR•M2>¼ÊÂXø³&˜Ié4Û’#þ´÷_&¥°`’ÿ¾Þ#Ë|B_s•!‹JT—fn¶Û‚׬,o¬–e37‡<ÆJYÖ¸€ø|N èHF41u3òL5¨4Y»7ŸîW¯Gž§4;»¤JøÌKÑ¢KʤT–GçØ_¤!çõ ¬7“÷`OM/¤2q ÅÒ¸±$ÓcšØTðE?ƒYdÝ„¿—uS8á£tStœÄ6b&9É‹Ó"<Ð4pÌlJ>²æ%õ­ø}œÝD š/³L˜qžIŒx!ýáþú,“@ Ê•+jb/ ;Ë+¸iˆ,€_b\ %U`81‚"§UPXâwÁ(ÜÇWqtð€h$X’¿Œ†T´¾Ê0VØ 'auKÕ%tiˆP b›pa)€ Bøï’GŒcVñ8´F0>7ÔçÞ†—3“9Å“Bdñ<¦=0 ƒLNSRðH¦½÷~ûÓ®›NÄ'l‘rnžS9}öš‹§~8±’ðñ_;L >¬Š€ M{ÎéêTØLŽ’Ö.P«Î"ÂÀ´m#|¾HK³`y¤]KêoŒ6/þóoãÔ›ò}frÜÖ‰7̬Ë.Àñfÿל ¸l²%mö匃Ž~ü…CIpãyw(¡ ie€<B¢2%/Ï*¾õ»£!•Ÿ„}<—õ*d‹Îéë‹“\6ˆ¡±§EaRŸÎ`‚TOzY› [eãpõ±ºÕàÇuký §G£RI¡"Úß%¯,j%10º‘Ëžv |à÷qjrÜÉÒ„oíò³µ»E$Z«q…m5®è4nþ.S¶/¥ÿ;~ƒŠL.%g5ÂÏ%m•‰ó#ÖF‘DVð5¨}UFž3ïÁÓÅ-Ûó»ì‡á·e? G?ÁžËÒÉXCÖq<Ǹ?g7-i¸ð}`}ˆ`nâžGH,Ttà`@6³äó‘ ·Anbs¦©Ì I཯joÜgÿ’Œ8‡èõs9]Ô:³Žkñù@GÊ“U>:º ?_Ñ_D‘vAp™¡ñ Å“NÒ(;ûiXÿ“r²)rw.}NÞÎmü™TÈ;š/´ÆäŸõ…"dÑRs_H_ècŽ_e’šPTejpgþBˆN¬¯~$oé!Òå¼?wþ¡ævÝq»Ö#*€ìuŒÔÜxk=×Jð.|~Sí™ÌÑ[bÙ6È µÒÇÒº„j¶Æ:O„?çhi½ZÃëX¹èÚi=rždVxòN¸Ï•ü2Y×f»aýb@í&^Vº~”4õ!Z¹›-u$`¦›2PðtØØ¥c'W@×OW&p[Ë%×mÑEçR1È@¨C4 ^Ÿ-Ë…ŸS·ÖÛøÌãUS†yœ¤qÏ'güãDíLá¡ÍÊ(¡UVóÈ^­°LSFƒIWñõÓVÔ}#gŒƒ–­nW¥çsÝÐö… H[$5› “_Õ&t—JMÒˆ }aªcÛ=°Çè 5­hŒÜ·çª®R?M¥öZ€7Û9”æ" ÀVz†PÏ‚ö¼ä  ]áKɩɷ“ð~à ‹¶M f^Šf­+ŸâÉ{´Ñ$ç8|^ÂÈÑ6c®­NµNºL"JTç­Uæ,ªÊBÁä™õ—ë/u’•+Í’N²·f^c ÂÎÑ먨Î/ê”仡å1VÖ)É”ÞÑóÀi˜©Ç0«©nS$X›‰@Á(¼¡ˆïc¡[×Ë9¼o);Uÿ(YU×¹¶ xÇC¯J™ã\DÈýפÞÙZK Ö¨!ÕXJÁôdC¡± ^¾ÛÅ3öˆ«³Oà[³X—>ô:–ÎȬĜœŒÛø“ŠîT] ÉãwC)S±Ãø’(˜¢ ˜œõw6.2K­xï㘒L‰õsÛœ–pà\)ˆ¯>«€Ðà×±ä›öøº9%ÈSuÄœ³H]þ€iÕåãìŒ3 Ùðç aä}–e6X8–ÃÆ?Œ@?†ådíN[Þã…ä†Vá-Ò‰y“_]Öíj5ó¤í%cí¬høëX9ûNCí…f€¨¡uJv–S³ç4#'¦2¶~†MU#Æ g]Ýš×Ê †lÌ8wÜ-mîr!O—Ÿ«·\—‚ý .‡8H•‹A¿é*ŒZAW×\2i8^ž£@«'\º ƒ~iy#]ii ,Œô{.1±[ãnp jM­rdñ!2tÆ»óRàæ*¥ A“Y÷¨×¶}ÝZ3)@FAÒ……ÿµÿ[ŒK)&B„˹}´-îÓx›a@ªÍbœ >© Y‹Úh 9v¾ÆT‡¥`ˆÐà#ȯ1ÕmÂÊlð„Õ¿¡{U ΆÆ<šr¶4ƒ`Ë5w”ò`NÁX"9½”`ƒR¤âÃ1%6/K:`N(uÉ»VO0‚Åú4Ö×´ÎÝ8s]. x×±îEªC\t7tϹ_5Ë(ÜúcŒÒ¼6 [Åpû8šOæÒ'ül2ò§:œ mrÿ³ãO¢…v¾¤uÏc鈚¬• ÊwuËééKRÅ¥œ7…çp´7„¨¾6'“qÌý6†“)»…º"ÍTuõx¢ ¾Ð¨·F×Ò†—B?‘”¶èZéÂEU_Šc±¨__¸’ƒbžôÊN$r`“0æBE7ŒAÑòhJW¤æJׇ‘>Q Nšk°îÏØoô *ìíÔ¡áŸëQ*ðÁãªòUùcdj”²îz ³* Ð¥œAWYP©¹I.ô—PwÊ7±Cäuábqgû†'Ý2wÆ»>kO‡«¦×MNº.PDUC=‘Á{±†¤BA/òì!Ϋ“]65„”ë–ù=È—›ÕrsãêD%®Dqžª®žÛÒ¤sש¨úý/¥ƒ4³™8~t/Ž©[Ãç¸Þ›HO’;›šÁí¹fpÔ7ƒ‡—s\àV”.ÄWñäÄE­ mQ]º±q^s“0w÷ðK˜IUõÿ›‡„œGŸß â]‹oϘ$ºlfãóý¸6©xˆ_ÛþÄpë8‰Ä—¨r åèøîøz ßÅ"½ç¹wcáEî ð|Þò/¯{Çþúë†Ù;£Þ-•K‡è ŸDP›ÿmx¤K ø»I½¤`Ph>æ›ÐsÐU4uf“Ü„xÀ*knTˆÁŠðr.D Êë¸ô êù¾òúø5;÷ú0`±ACÑ,GÌ#¨Ç"&n×€*…_]е²»à¤ÈÕh|W©ü@–î:Œ•ƒO«;¦púÙÓ(o€£‰qÈyÄ3ÓŠSþ¯Z-’/›™ê²™ê°#W^_^4hOoVΙWÎçr¼ÏnjêÙÖ8·ŽÜ \&I(þþÔ‡ŒwçΊ¨–ݵQçªfP>ë—Åï3.Ò &¾ðJ‹“reåMwù¬ºõßÓb,(¼.¾JPø@PàÝZ>àCA˜æ††'IŸ ’³¶Æ½|Ì›e0 ã­ÛeF b59ðÝëV¼an]ß¶Û7ÙýŒ™¬•$ÙÔá|CÜ ÐŽ‚•/t—3a®óÃ'ZIñ³]U³r¡‡ Á•;7hR¬ÇÎúb¹ËÍšÙžN{’èÔ©BHáMÛòº*ÉL2G1¥E‡ÿ9/{Þ¶²ŒGÞáØfUúñB°› µ ÓjªAOêì*Fã(šä%æ¶Ç¹ž°>TUîœÖnÊËö€j6/±¬²l³H]¸ÇÜ)Æ%Ž÷³c4M5=+Âp‰ƒéâÆ‡aOfÚä6þ\Ê/Ñ%óÍÃÃC¯åf¯)„é“8öÿÇúSµ endstream endobj 224 0 obj << /Type /Page /Contents 225 0 R /Resources 223 0 R /MediaBox [0 0 612 792] /Parent 226 0 R >> endobj 223 0 obj << /Font << /F52 5 0 R /F105 26 0 R /F109 37 0 R /F107 41 0 R /F47 4 0 R /F86 38 0 R /F112 43 0 R /F1 39 0 R >> /ProcSet [ /PDF /Text ] >> endobj 229 0 obj << /Length 4237 /Filter /FlateDecode >> stream xÚÝ[YÇ~ׯàKÛ}‰ ‚cÃNœX@X²‡V¢³+­¥•åøï©ª>¦»§IÎ<¬Dû¨®ã«£kž<}ôé—F® VÚÕÓ‹•³L{µ²^0îÂêéùêûõåFðõóXŸl´]¿‡»ÍVòõ«°ë›ž~óé—‚‡jeYpbÅãü¿OCð¹ò8Ä0V[ÿš8jG5Ôɸp«j’û®oàïùFÚõ›ÍV„£iŸñ™ #‚,ãÁß" À)vývcÄúÒty3àÑ£ß=}ôÓ#d _‰•T޹ ÑŽ)¹:»zôý|u¿}³âL%hä0J!á—«ïýñÑX{4\ÉÓJ•ÈÎÆ,W\üWy®áÓ!%°LZÓPôãˆ"Á¬õ5EwÒHËåðNÞ˜²õz7Éý>]ÎÅ®¹bÊ<„Øq%m–ˆÛÝ…É×xäík’ýü,Ú3®õ‚³-^< ,%„ns2>LPºÓaà7Ÿ ôK„úLϸЃ“xÎŒô+4œDßK,°”Å¥<0€t‘Xt%–Ž2ç±X1cÃ!Â"ÜÄäÁÝÜOL°”+ë4“Z/“’>*¥Àœ²+œO‚ÿ|ÎÚnµ»Á•œv÷K!ÀN`W/pØVKΈ|+C|†C6!€V„^@l}:à‡¶*â£==³“7K[y[ŸÒ° ËNϤUƒ|ê·éxÅ4ÑÛRС›ÈÙ*«åú“ÁŽx€ßîÙ®83·€p1­²U:Èõg a–ãW)Œ+–¾ò`Ó nzÁÃÿˆ‘¹9&q´‘ Àà ½ Œi5­c^ ü ²aÚ)ËÛ¯„½è{”ÎÚ¿•†·Tö‚ÙJ©^ éœ÷.Î|·W@šy]Øþ 2Ì…¬7 ÑT؉ÛH/Я H™´GF¬‰Û‡‘ §Î¦Ûp¾9( 8øØ+ ÈgÎ…wû@}­[ Ÿ,ýÿ ·Ò¹# `‚dÎø gСuk…«Íâ(øÿ PøìaAÁXƒÔÈÈ@ ÀÍqÜ>,¥ÕVq8¹P !ZrO!…2½þn#H‚WéÓŠ7ð÷1ŽÄÈü"~üâ]úù¿šSœwM?ÐJ@.FS¾mü.‰¢!Úä”6NÆ,7KNåxD»É,æNJ2é’À¾Øl­\ÿþUë?ÐçoJ<À>¥\Z¢ˆÒºs¤7î –„Òo72å¢%<ÑtŠ×øüU˜8„é7¹=Å¡)oLûÛìôq—´äfr Oa„Ô¸\¡ìüôwŽérÙ2=‹i3î˜Î!šïW8 *Tƒßœ.Šiæyd ‘$I‰ Edì⾤}ZR¹Mz_úŸâ†bÊT;›VR²¬‡¦ý+£ŽCñ€‡$AÆáöw>ަ;»” Xàü|kÐ&p‚ÊõÎ-*QÚPïûù>¯Éé—…jÊ|h)»jꃼp ºšÁà,`Ï`Õ:d‰ÃGR{ìÐfõÚ"îÞÆñ7dŽôh¿Ž—‘ÓN€‡Ë¤ªo«aﲬmåP3ܸ ¦)­=RÄ3*4¬ûÛˆ]p¯æVª”)<ÆSÐ⊡diàŒí„9׳°_ÏúšX50\S8PAÕëßfY€Üv/…HéåÇ„îË\ª5°+’¢®LÝ´¤de¥/Y;øÝÆøDyñ‰È?¦Ð¢K‚ aäAQ2®Ž!Q<‰ÁF1Ü.aÂtq‘žŠâÁñc‘—·û!{œ¦J#"× ÇÎðÔ»‹¨3økUðÐb^ꤕôß2Δ+>Ψd*M^>Ö²’Ñw<ÆpÇÔÙ|¹I‚ü¿_Uµ–y—ZUÒ¢qsÂM.¥¥½`Ç4®ûÊÆÁæ*‘žR|¢s=+ÔËðqáíEŸâ¯ r³PF8óv2»D~ìFÚl7Z³ôë' ßÑ(æñ ŠQÖ3¡Ü­£ŒË̤76s~{RAÀ0®L+ÐÛ[¼ôš”ðEú«ÚŒT.+½Ï[_¢šúV±a~ 2¥·U›ÊM•#Q)AU¤ 83«ºÈúê&îv19e'3ÎG KtÑãÊnjsJ“nec°èCÛX еKw”cÀ$e˜±©@„¥yEc1 Û†Ö_•8Oµ–îÆvñ({äã_$CÍåz•jñ$—f›NG ‰‘I—”ñb@¡b&€}]Ç/rVc gÙùɰ¨©‹æ$)Ôâä;EÀþ µ´OïoSÃu\]»{Yb8"û4‰åùtääÚDëÈŒØLc?8¡ñþ°f£T»×Ÿ›j®ôÓ­CèkífvGáéÊhc8)—‡¿éêHB¶ëtWªª´èª4Ÿ{>˜ƒnÍ•–qäIu¤ËŽ†Þ½¼Œ=Æ.íÈÓû `–‰¶¼\I‘pB·º¢i«"eßmЇ d½É Û 8£¢„9§ŽÖ¨ýòö(lóëÇæòE_Èdü(O—X¤õ¦¹à(^»èò.=Ê Æ'‹IzÒˆ÷€g%NÈ_©Ù¸Ñî{´fN›¦quÐHV¬À0¥Â}É`%‰+¹@½oÿ¥eNèšø\åærýJo£×ÆHI›õWÃÌŸÆøq‰Šs9÷€øs™pFYÊ÷߯g *Â÷ŸÊÕeƒ5ÄAFüLJõçÞ!ÁÜø½vc‘Óf³[Uçùªú&æAé`'Ó=X Ë4^B5ªÖTÙ„¶¥{º”ýn^ÿfCÄëyAMU„«RîIl†Á:À½,µÜLÊ+ЧžÒ1À;¥Ž") ˆ}¢ÕËu©æ”DÀO^Á·BŸ NÓÄwÕ/ÑWZ{jš{„6¢°½ˆãmŸÏŸki î"¾'S(L¤ÇÂøê?EWuF&æLšˆv¥°­tì¶§¢êù·ÿq£ÒöÖ$ϲŒ‘¢*? J¼iÌuçK¯ªú¦³÷‰¼$ Œx€v|S|Ã< ÁœVˆò2>Ê :||×Y{òÆÎ6É lê•Ó¸¼~ªgfS9”ƒ5J ¼p¹ÚpÚØð—­áÇ ¢pÍ Škµ`™ ‰T¬mqµ_á'„.x¯:„U¹Óh³HV2` =ÇØò¯SrûJêB$rîç)âÄXêÙÞµ!&böà… N?À;à es‹šÙ˜â“ʼ†YõK$O’sRœ2·ÞjFtÊq'æEq r|W|ön/ÆúýìAy¥ÌÝQ{½|€žOýÐ+g­ló»û`˜Ô dêàÐ÷»º‡¥”P¤ ¾ÃW÷”EÔ'Ú ¿ç Ȩ¹l›~ö\.«R{²8ëGŒìú¥™lƒŸá ذÃ@ªíà3hÖz&JW/aj-ójØuÕLzNsWÊl—ñ1Tªª¶ ¢”ÞgJï‡9¡±jé ¡óRÆgºJÎ1Õ‘¢›(1Di¹<¿? ÖY2a¥˜÷èv%×·‡ÊðyY!Fᆨ0|ÀtÍ'5éÆdÁtŽÖªQ·«Þ¦lܔۭ: ê^AõÔÔ)Xf=l¬ÊÛƒ/¡ÂZ,ðµ7‘Œõtl¬ 혜 ³^ 44jî;ªTbVݨÕ~E–Lè‡)°t[Nš<Ýb-‘u4nH†¾Î4wñ _ì|)ãZ×z )Ϙ°Kv“¥˜œÁ÷›RÁ[j9H‰l„ñºõÁóªÊãq£#õÇÝÿÕqË´j*<ÕÕ%âìT9‰€ŠÀÇAIWù’ðÏPÚ/«ïãÄ0©¥õ}Š ÍÌuh,œ u¼Oâm÷óÛ8ö¢.2W?bϦÇå¯ü ëºòÌuÕ ºö/º…Lu³©o¢·¸ÕPU÷ ~mÚÕR[Q¹[Ƭf®´Q`™tèÐ dÞnºÙdUs(öôB2!5³ÜM-Yo¢(»1E7Ú}’nŽÅˆ4¦iN•3ÊÅy,¥]Â×î?~+&‰ë*×\L³ÌÕŠí-^+ íë7¡Téa¨~ª¬¥&“ö/¹¸¡¹øõj~Wy7vo³ÎÅÞØ­Œ=Ú@‡c’3ÚŒí|CUm‘M©ƒ;ä¼.÷·®Þ‹sèiÓž™fÓÎR¶M‹ÖµÚ©ïìz&ÜâÆh^kÃö0¹ã*K4Ñ„±ýð]ìN»‰?Š¡•uSË/Ðt®Š®]æmÓ4ÝÖ®¤„[0­K·€» /ÿ9Æi¸ endstream endobj 228 0 obj << /Type /Page /Contents 229 0 R /Resources 227 0 R /MediaBox [0 0 612 792] /Parent 226 0 R >> endobj 227 0 obj << /Font << /F52 5 0 R /F109 37 0 R /F118 40 0 R /F86 38 0 R /F107 41 0 R /F47 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 232 0 obj << /Length 4521 /Filter /FlateDecode >> stream xÚ­\YÇ~ׯà[H@l÷} ȃG€ °!F`Á^²í.iíʲ€üøTWß=MÎP»Òr†==ÕÕu~UÍoÞ¼øêSzåˆÓ\¯Þ¼]YIœc+í8¡Â¬Þ\¯~^ßl~}óýW¯¯Æ1FÓ+F¼Ùl¥[¿Ûp ƒ·RÚõaÃÖ6[æÖ»Í–Óõ\_À¿[ÿµ[ÿ±Ù:¼®Ç\øç/ý·FÓkuõ{)'ÌŠôâ?ËMœÖÑDJ½Ú2" ÃÞV`arU òäÔ©nZ.ÁäèVjÃŒyË87¨ýDVh †ç•q‡ãà±õË$Vˆ“Z® ;€t}â—žb  @R-uKê¤}R¦Ø(2HY”'6ñ€L~êz`¡E4Šq[Ôs(¾Œ¦&‰5C]DgšêÈû—5k—üªJžfº[ò ±Ãf‰€Dê‹‘|ˆZ`a}6 K v h­å•šZ#Џ¤¡ØÌ¶Ï 6–ppÕ !OkUb›xdâæ)÷IØj[S¶Ä°õ_a7˜lÍümð;r">I_÷;Z“8„25 œÏ¥çØ?ÇÝ3è÷Vj¢Àa %R³sv4Oƒ¯Oš‡ µÎoF"z^Üá0cö*.8Å·þ£9¹uðõ2[€“–Ø#+ÿ´ˆÛ»v%ÓéØó¤;xq&Š9ÏFòìT²üó‘Ñe³”\ 3ãӻȨ,À1=i—Ø`SDÿªFxÎPµ-/ïa€ø—âC|.%‡JÖ,ŽíÃÇ6fòøÆ’}ƒ—î" ­²MVmE^E´ÔeI8Té‰ß]³DaX’Gê&RD]—ßu»³ žS¸]ÌêbÎ9 š&R÷Ί…P•!Ï0”…ì’gtÁ-£o½Š®ÿ ÿ‹õ?ñó#À5Ñ&»ƒa¤Òu=2 ~YFž#àfê”…Q3"]F)‚÷¡‘#j¸}ܸÍ\º ß&l6„Ê8ŸÈÂß]* H»“2ê €ˆ„øCwPÁ2IÐcÏ% ±3«&Lš&‹}? ÿ´auû U´ÎH•<KRbYºà§>…8(ù4qêc[7ãÝ•p³L½“¢c;l!ín£_|#i~é‹J$CŽ®dbiŒˆz>F«ÃØ€u1‹ŒÓ6FºVC»¼ïÚï]P•£®:Ln禴ð9ü1ÅÜ”F­AÙ¢r†Hˆ„ xËðÒÿ%vCrA‰UŽãž@Ð ¬w=Þˆø;f ¾öýà͆­V>ÀçÍ›{ ÁÚæ½µŒSl[ð(­È^UI‹E*‰wÃàˆhWü¤M¦×½Cð÷f9~Žû^FûUd?eMwör‡ÒØ#FNP•ÉêóEJ¤Ðh<þµ™e¤b†‘Bð` pŸÕ]^Žÿrº^œioá˜ã<‡Ké=‡:´Ñf4B¸DÌĵWôޔІ×`/€U Jdxω"’ ^öügh”|l¨ºT9…&Ùs·®-qFõB7Oífï ²‰ˆAŒ‘ÒºKþVhåEZ÷áã§ÂEÉÖ=O‡ÆB¨cY2úG­KŸÓUÖ¥EÔ)¤æªNíþ+º¦Â²?R%Z¨§PÒØ¹)%¿pÃÆÀtõèÑ’‚ð˜S=¸'D~¼µ6_W褯iM:«Mq÷—ÐZÌ>ž¾(ŒÂï/½P°¼Ï™®kÝáa|æ,fÃcMDŸo¢“«C8æ¶\tø©>éžP(#³£¬Ý°¼$xZµ1Wʺ°¢ h•à®-rVÊc84³:E¦ùnÔXH"~ ß 3 –,fú ¦n*÷)6×4‰,,m~ItÞOË+Ê-Šmü¸Á¹9©#%V–ù¨ù4ÉöZÔi{üket’/C]yA]y«ÚÓ&†—ÒO[Ô+5PÌIÌ4ÝóŸåòÔ°6@®³A‹sPð+Ë•.x7g*N8Æ©•{¦”©òÍÿxóâ÷Þ“ÐÃÂä¹²qØöÕÕÝ‹Ÿ¥«køîû˜#‘wÞÏX ŸnW¯_üøâìaêkéTó•0†p–s×!Þã„ø©ß‡93—n.gVDxl¤Ê™}ôdu…ÈÈàŽ(kGJC&Šë -™`DÃ÷ÏÁF?—YÌGùÌØCËÆ w‡ sý Ý ²Tì>Va@ ¿Žf„ÒkMµ¬Ê‚Ðu£TyÿC|!JÄ:>4”ý`ý\B¥™à>í>Â\ ϲ’rP‡'hÃûa0fuÓKöÕ` œÃŒúyáËŽOZÅ1¶s²ÈCkSµ_¾R+[0Ä‹EW#H‘V%18ú·YCB© dÞSwc0£ËÒgÓxˆL&¥+¸×9Ðaÿ¤…ð})À«Ž¼–ÛÔoÑ;iu"°õ»Ñ€i±­ºF„«póTTë³"v$ÎCõ…aÔMµ‚'[q¤c ²È\ø+ÛN†ßœ”Dó&㎨”®{ ´®Bû«MBÝÑS²eÁÒö ©4™/]Ç¡NjùúõæD Âm®ñÓýÜ.­FÀP>Ž$pãü{vño’úf…ïÅË ÌU>ï‡]¦ðãY –]üÓ=“óêkgá¤”IâJ®Š•_¢­\Äê„`Ç ª”¹Í Å̸iæãv1©T!øµÛÏ3`ϰ%°R.=g.`RPTÝ3˜q–×qWP£€å‰3hTy§}˜šåey® mžËÝÔ*ްkz–9ôXKïZíj¹‚æ”>ÖˆâË¡ø¡xèöuCô–3BÑ?)¨™É*B´[ ëü®¨CŠÄBoïËP3IÁÙ07ñ3˜Sa€˜®݈›sØkÍÂ{ ‡Ô$ L8s'Ü%†46ࢠž+pÅ’uí+©„–D×ÌékšußS‡—U|W Íçæ[ÿq¦e&Dè®ê3~äU]˜ _O²ÿŒ†ö£ ±¦ø‚¹AÃx×Eã¯ì&£¥^éŽêNcddÛ½3,ÂHJdpŸVÕŠ-€U-ªÇU¥àCnì+ðˆÑÑ„Övýc Vvˆ½³•˜AcJ½«/b½^C–-y«‰‰º}êÕEÝS.Ö}ã[ #ðnFpb49‡EÊ”\:€/tŒŸªVŠÓLÌE×}*m)´ ±¤ŸO:ñYz«”OÅÞBNâõ8·ÜäfS­¯$»øU=Û%T,*wØ—P­{÷Æ[ÒD„ÖÊé…¼®Ê;äÍÑ}%B¨3ƒ†ÜÁ£gù*=MaŠØñ'ëS:ºž%M”]AböçþdǵéäpDÒh‰<]¹d‚8è:”ò×ËL®”M§‡õ MßÕX=¸nû­CÃìøÉ¶…IÆ&ÿwaë`9X(+¸«¥éhxZû©ûfYÛï¥üA@­¦ž‚0ž»ñ®.î_í?|ûñâö»û¿_Ü_?Œºß|ÿwzbÒ]OÑ 6¹—ìf…ù¯ÿsuw!~\aöCéX x1ÃÝ)™ã 6–ËJ+¹,–±ÔÁüØÿn$mÇ¿%F™:Jm©‚\Öy& LVòs¸‹¾(o3ÏÒŠëvÑòßHš¨kŸ28NVâ¬gO´–·Åõ'w6Ÿ³•Ç%::já× çöh~Ñqnrè1Õ¥fAUOÁR½96Sú0ÅDµÄ½ò’í×õLÔÏå¤Zq*ð,Åù˜èˆsŒÊ›À±òb­ê––Þ‹zÔì‡ÍIů’0ÇΉ‡a +…>%öSû:“©ÃvúhÔdã%Jȃ¿LÉ'í;L¡©ŸÊ7}ˆee™&×~V\œkà\ų±Üš&Ûõ5­«&ÅëKÌ;ü×£’3·¶ìwl×Ù7>†ÓüÁŽŠ"i‰ˆ}ø¾5XõÜ„µTúgçĪ¥Â__„gOj¢¦…MrL1ù}Q’@(ºƒÅ‘Æ ú¸Öé”hû3Æ9Èuî×ÅzÍÅÑ_h¶9TóJÚ½úx¤€Ú‹¡†µ¿êöz¸Öi/¦sËzq:±™÷ƒÈ¹m¦›ÙWù(%ÔÈeÝÝ|Yw·;®Ê]Ø9ƒU-Q½YÛ¾é®~e‰`üYiA|‡8§'¤Îàbx(µ$–ójšß„ ÝDzMÎâ!w̲ì—~¶ÄHý ŠßS{%Ä-AG'˜&T¡rÝF5>ù¹­†=@ƒ=ŽÍA&§þC´¯¸X1# –Orp8¬€iKÀ‰|y`Óɯ¯|6AáY(Û1U³sò«ˆmw#€ ²NâãaC!+Ó¥TN€Œ)Ø£ŽþÚE> £ë9­¥U@Kؾui*ìGŽŽs1+¦¿®P ž™ëO©ªß-¡ ÆÀûG×5 ÒÕéÄL ¢9ž`“×’VáÿžŠŠúSQL¨ê(eD»t¾ØË%>X¬TßUx’ö ÃUÃU!ÆVs¹”„Ó«­Ÿêiêú­Û_IçKã ‹EÉÛ±ƒ§»Øæ{.‚Sž¹â"~Åy>l`äþnÿxóúâþæ Â—çGRå{¥M’hEŒr}Ù8wÓ¶-å áu¸LuÀÁÈ\ý/LÆûÓ8+6ßþV9ßp½‹IöËpp´I1:jÁ|~àî!=;ƒšT´Wë­;hDµˆŠj ²¥š6A.ÂIøÙÓØnÙilg˯ØEegÏàcñm¶§¹óøS-ÝÎæ£Ç.TôÝòsìnÔ5L:rÛ“ð4¤Ý ®¾=‘4UX m†Gono®òÓìßí?>~w?úõÉ5Ù‡ô·Ù&BêgZýèJG¤iz¤9YJ{³·oË¿…ƒxJÈ)”zñöJsÎÉ5™óùŽÊx´’¦ÕÙG+ã¹¼\NOg¯#(U[é¡…ü¶SœtV“ñÅóšÌŠ&7'AXuú/oq1Rü¯DMt"¸Î5Æà[±xrâ¾¶)nÿ?/,ŠÐ endstream endobj 231 0 obj << /Type /Page /Contents 232 0 R /Resources 230 0 R /MediaBox [0 0 612 792] /Parent 226 0 R >> endobj 230 0 obj << /Font << /F156 76 0 R /F52 5 0 R /F109 37 0 R /F86 38 0 R /F107 41 0 R /F105 26 0 R >> /ProcSet [ /PDF /Text ] >> endobj 235 0 obj << /Length 2719 /Filter /FlateDecode >> stream xÚ¥ZYoãÈ~÷¯Ð# ¬öI‹<Ìdd‚Ù ÁÎ>È’lkWc{Fòxæß§ëè“”D!¶xTUWW]WóýíÍŸþfä¢k†®‹ÛûEß5bP ;ȦUÝâv³øµú©^ZYý×ýWÕ?ñúçú·Û çÐ VZà”¶1}¿h‰gW/e[}ªEõâþöµh«m-,>qÕ“û;º¿C½TÖTϵ´ð ^âƒU­lµqð·ʧqï@"’mk%ªo<ʾÔK1$ÃÇÁày`µÕ%¹Q^ð±ÞÁ({ì;‰óƒ?ÂÊ|¢70–FfÕv‡Zò³ Qojm«×\uv÷Õý{fSxùN°“^5õÒ(S½«—zpfr_,µhº^,–B4ƒ1déÒ¢»Ô–¤‚îº8Cî+óüàÆ]õ±mp¾Ô†,™©‚ìO0%–ì®îx.f·&à,ÍÏÖÝà]Ò¤4¬–ûDZ †¶ßïYÅ`|xuÎøL¿®5­ÚŠÈ¬gB´¤2ÜÕP‰Wz4‹ÝÃeÏÒ`-Ú|h^dDŒWè £Iƒ±Á¨të+-2àÕÈÀ@tÆÀJË+ ŒèÒn#¨ƒ2»CäGV~ø”A£4Èt`AS‰±Ø‹„Hà X8D˜7› ¶¤ù©v«urAEõ££025áÄy[ýþ ‚œ…T/PG&{¤‡8b/ó%Ab¶6\àÄ÷+P8ÝtHHËêt¸ùëíÍçáTib!‡T]·°V6Z¨ÅúÓͯ¿µ‹{é´mÔÐ/ÞôÓÂ6C¯ÝÕ~ñŸ›ß¼/-Ú!u¶N–ÖN–±è¤Ç ze t:Õ%ˆRÎØL8o„X$D޲"ÕÐH­½‡ÄÄÁúF;÷¤+,}l…Ó¢Z;,– é 핲µïÝ2÷©ö÷°¸ÎÛˆ0DQ¶žO>Êlð¯è6Cˆ ®A ’žØA÷¶ú¥v»ŒƒD‚pœi¦–’8žÌäYÐéKc-‡Î…ò°³¤=è÷@¿Ó›¹ó›iünt—øè×¹)‚üQ»Eg'ªÏð]*黆¨Ëƒ{(Å5ñ8Ñíïw.>I»(”–ÌꎗÓ=Eº¥QFŒãèÌ„l uÁÛx»Çµ‡…±ƒ7*^¿y;Tº‡™»èã¿9´E¿/-CyÎÅ'"à6‹,eÎ3t MWôó)ã)Ì.Ó¦k“ƒÒ±Ñ¬Üý8¼Ùáªø>0é^KW]Ê~xºŸˆÆ4­Vž£!‡;¸JÆÅÖ¥pQQ)zõ2—àùF­¨ª(Ò€˜÷š35JéµQneM²òoT!i£Òý¶„g¯µö[(OØÊS\G{yïÕyo’Ï¥ùnºó½ŸÖ3™]èfpéE Ÿõ‘9(’IòæBQ#`óyÀžÈP„”Q!Ýù6žhÍé‰ö™ÇTre,¥'L„.ÖéÆEUÐuE?uœî†üîþ’f÷ô½8o¡9¤„X‹¼£âÓÑ% )60bù¼–Þ5ú´EçžÈÞ<º÷{ðoƒ¬~Ê5å K^vÛ­ÇÏ\!MùR .”è!ìŒÂaœHðcErXå¼ú éè T^Ë7âeÓ‡8bRaíC?Î{y¯ês.öTDš­i§ö6È °=Ö¢\d‚DC…Ø»:… '7/õd¦Õ‹$šËq f Î΄FŽa¸(‚¿êsèª>×qDI5”ó‰#òz`«³9rE:±®qá^ËlïKæh9Œ¡Rižš5…TÌdøG-‚΄½.»ø‰2!xÊI b÷)lÔÏ>Úۉ«gºL\—ï:Gï©çÁ°å&¨þîw›WV¦÷ µ¯©á¿Ó{òT:4>aWD¬ö|»Qœs«‘ÙC\føQCo?éÄFHw´wË%ïͤ)ö:õà¡Dý×¼õè&mµÌa¤4÷†g;þõFùN·¾×à.7°È\¯"^ÄDA…¢b`mcµpŒ ER¬ÃªIqÂgÒæVLƒÜq%¾ïWSkâ“Ó×ÅLƒŠ¶°)⎗ã|±?‹.q…O¢â³îx’% ždeUÜÌ“,Ót"”‘wZºÞ¯¨›Ý=¡ArøHï¯8ô’x$ƒ\Ô“ ýs,¼òðÝu³ 6ê)ÉxxS4!à2×I¼X¯kÖCp— EÒyŽ3^ê›ÏÊ’^Glّᆞû¨˜1ø†å[Ñhð«6ôhf’#nIy.‡a²‘9ÄdMhtãªÖxÈ9jt×e …RˆjDеjJ4ÊQ»$9£Óss¦+V4ñ¿HåS*G8½¸-C6j•Pqþkš'%?íý Ò¹% U†ÖÕ×]_"ÃÐ)Ûïµ4EçËgœÀu. }à³;¥Ñck¥ü.Ö±( D1êµ(÷S·ÛƒÏMŽý,©žãð¥€smG~Íi©# …ò§¨Ä3‘¬¢£N5NÖWaN앾{‘L£©ì|ë/óÆl :Qà5öé!%߉Ÿ“I—[CHô”*lŒNNúÄQ§ÍóD×8îB°¹íÕTu²g—ÎvF'õâ‚è¯)D?nñ‹~4ê…ø~Ýa5Ì2ô“€î[è±ØŸÕ)kCï4ýPÃqg‡íUŸy8™£>Kk/|æAM±3ĹñsÌZZ{6HTõÎ'zÔð8° !i4EÅ;4§ ’Is:98Ùµ½K1|áÂáG˰F¾4òg˜+Ÿñnˆ,iYÀíüµêr-´´s>¹é„)@ÂÆÎ‡—#žWò<ðîßÊå¿–+,3-‹šöÒT„Ãë«l:رM‡þ¾õ>÷Ð|Àu!Û˜¨›ø‘õºÄ„ aÿ?Cœ8>·íUü FÙYŽž /¸ru¾‹©ì…²êlz½cÏÅ^®_€è Gªì<'®ì”ïrOi>3㨞¡ž;tÞ¥_Û± ÔìÔCŠc”á.7òò.ï‹0Dð‹ ,¯Z0`?FøøÄ7ax¬páîó#¾þÚCsCøÞ ¾½‚Z©Q=ð¥ÝûÁhö?Ãô6 endstream endobj 234 0 obj << /Type /Page /Contents 235 0 R /Resources 233 0 R /MediaBox [0 0 612 792] /Parent 226 0 R >> endobj 233 0 obj << /Font << /F52 5 0 R /F109 37 0 R /F105 26 0 R >> /ProcSet [ /PDF /Text ] >> endobj 239 0 obj << /Length 1851 /Filter /FlateDecode >> stream xÚ­XKoÜ6¾ûWè(Ã!EjÙ[Ó$…‹p_Ц(loìl{7¶cÇÿ¾3Ç(…Òn›ÂWâcf8óq^/Nž¿îú :¡;«ªÓ˪W•u ºUW®«ßkh îšÖ9WŸàë-¾Ö|¹n@Ögøò±iµ^ÕoñÕkYïxê÷Mõ—æÓŸž¿6ªrÂYe‰‹¬Zå<ƒÓ¦í\ý¡Q—·T¼ù1j•$V‘S'u}×d3—ÄÝš˜1‰â4XÁ—úŸ{fqÖzEŠ[á&ß“$ï…ë%äà”p¨é¥Ù´V׿áU¿áÿ'…ã*+œqqÏæÎ39ó?ÄüŸ->í®Ñ•á|×(ˆJa\ñ².©‡¶~ðƨEIX ¢ÿ6aI²ÍÇ ú âýô¿ ç"ÎÛ ™T­îW®lÕ ãÉï3¦²D· e¡>nèá5¬ Æ[×›ùÍ£·~Ãý°Šw]à÷g–š%796hýybJR^øMw¤-ÉÇ’~&z#Ñ"²1QXÀ²B[\<LΉHPAÁ@d¤oHÛAÈuÓY>ÅÁt ,hà ¼Hv&Sɱ歮Ã]Ÿ9¡Ö°×À´¦h`¢}ì&Æå±Ü”ô½dJšÿÊ”A¸eSÒN2%ý&Tm2Þ[è!^[zÏ,¦ü¼:ÀbËL|'ÌãÔòDKMç‡ɬ—Ë4È Àþ7M—ý'Ýë9—¤Ë.©rÿ þ6oÓ™¼Åù\»&¸ô $%y*V¶×K¾ 8J ¸X ê%/ŒH]7ÀÏf6ÆJ| @y6Ñä­ÍíjI›Á¶­‚•è” &¶þ°os¹åÚ#V‹€ÃÁò¥Â}Çþ'©ìÉChÜ„!Š—,!~¿ ñ¸tê£h¾„xòAÌì õõ3¿{s~ƒ\£»ß—‘ðÇpË-* ½æß~z`£þ1 r]‡ÚG°jUº`ºïݯö»;$ñ-ÉɰßÃAÙ¨gO-}¤­Ñžƒì–qúW£¼ý/H´û)×~éÝ0Ò¸]¢¥½SÅUaàu ¡UýNI©"!÷>ø ~&ÓÝr|߈ í}§ºž“N2 pJ$žùK’¬4J"ô 1¯¿uò{ihÐv ³3>w ¼~¿TfìöS´ã©ëÁWøÚep²EÈYr0á ñ$‚1³+¥,³e@šj…¦±:˜&÷—ë§“_þþ ¬h¤·ŠIoj$(!uJ¨#EU ˆ0ìeªì¹ôE4žLaž3Ÿ†0ÿÌ׊£2ºóøõÑ>'ƒó—Yý=Td1‰¥µ— ¤€ê=ûL¦‡Tg3DÊB𥵡ˆ¯¹€¡df›ªRY,OØ}‚ÎÉMò,~~U¢*wpúÅÕ¬¦^;7±UƒçBÂ×!.i9ä<ç¡ ŒònýëÿD‡âwŸ5‹ŒpÐGL=„.຀> À}R†>d4›ìqQ¼¤Ðÿ¡õ \V Åî) ÷­U+):L!F¶_?ý¹»å›ë†t\r̽Nçuì$w`éÂeEæZ ã\Hcô¿ámEÉ€…0? “ ÇýI;vtÒ †º¼ág“S”¶žé[Zª6ioŽŸ‘óÂ麄ŸÉ1JnQ£Ò%Ä !y•ý(yÈĦ!­™ª7¢×fF&5'“úZ¦LASe.6¹ûšÜÖ/oCsU¯Ä õ8Âär»¸µ˜)M;Hýþe¥zh¶í¦à”Ñ–Ìm›«Ã€kô¸y2åm'ó«YÁç9ó‹R£'tˆxð1(dÒ®b–óû OiÔV%?±gýõùÿB‡‘%'žƒP¸Ð½DaHíJ%4‡š6ô¬òÍË¢f”w§r(ñ”NˆTYÏìaœA^ÜMhÎtã‰Ù±Ÿß\ÆuóWz_÷‡)n÷dŒ˜jÑ`j)åLRïn^P<@¬ •²BQa؃P¼M +.Ô>ÿ.Íw endstream endobj 238 0 obj << /Type /Page /Contents 239 0 R /Resources 237 0 R /MediaBox [0 0 612 792] /Parent 226 0 R >> endobj 236 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/primalcalls.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 240 0 R /BBox [0 0 381 261] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 241 0 R >>/Font << /R8 242 0 R>> >> /Length 243 0 R /Filter /FlateDecode >> stream xœUMoÛ0 ½ûWè¶f@8‰ú¾ »¬óm†Ôq3·MâÚi»þûQRœÚ‹wEv¨g‰|gãá·ëìÃ¥e«6‹QvùyÿÒ¬²ûL¤÷ý£X³9Á]ä×YÚA0”ŠK&´n<Ë×ÙÅòùWÝTëÅ]]=nw³ü&³¼FËò¯YþþÇEÝ”ÛzÕîy6G޼ ßw }Ô”7³Ÿù—ÌiàÒk6 „•,_ÆÍ—åªÜlâΤҖ@GoFw˜EQ¿oâSž}Ëxç¼cO™äœƒÌ:ʶΤPTƒf  dwÙ÷3 .reèa FÔ3‰ ,b`òG¬ö¡Ül³¹ðD‡V±¸år·íñd%­xz!óõD¡s†R§,kâô…òŒJC@k:ƒÚG&PB:pòmü ¨^øIV«6!¯ Ù«*Ê?·‘šT”GN3a¹ …D¬í‘·$BŽwÚÈÎò¶“*~àØwño[îZ/šuKÚ“ „;IÚ§E½½ºi£l½vOåâ¶´ÖÈdšjî©Û²ÚT»¸£6`|4Bä(ÄÓgÔlšƒszDi TjÚÀ%¢¼i‘·…±½u$ê±lªëçC ¤ ¤îŒÅcSþCä¹½c=µ†©è˜sêK”JµEòâIr.õª–bžyO yE($ï×£œAi£€OîÕë‘Ó¨þ¤9ÒÄ`lçQJÒÌ7jEý JQ‡½ì½ó€8Š~z ¥H_5¹×^³ ” "ýÔ‰c:Ž FtAèxŒÓñ5¦ã1jLÇ&z:¾¶WirZO{ÒÒ` ½š&+¦1$$]Æ*¡´ ‚'®œ9‰ÞØãžw×®·MQ¶uÙ\-Úª8\<ÂÔPîF9*G8IÓÁ"o)éÊäÞu3º?>bjÝŠŒ˜tÆt¹§ò™iå(~ÃxN~Äá€9ê"çQ}ÑN£¬¦k3ù’³%÷}´2ª endstream endobj 240 0 obj << /Producer (GPL Ghostscript 8.71) /CreationDate (D:20101231111147-08'00') /ModDate (D:20101231111147-08'00') /Title (/cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/primalcalls.epsu) /Creator (IslandDraw for lou) >> endobj 241 0 obj << /Type /ExtGState /OPM 1 >> endobj 242 0 obj << /BaseFont /KWJRSS#2BBookman-Light /FontDescriptor 244 0 R /Type /Font /FirstChar 49 /LastChar 121 /Widths [ 620 620 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 580 620 520 620 520 320 540 660 300 300 620 300 940 660 560 620 0 440 520 380 680 520 780 560 540] /Encoding /WinAnsiEncoding /Subtype /Type1 >> endobj 243 0 obj 778 endobj 244 0 obj << /Type /FontDescriptor /FontName /KWJRSS#2BBookman-Light /FontBBox [ -109 -241 928 734] /Flags 32 /Ascent 734 /CapHeight 734 /Descent -241 /ItalicAngle 0 /StemV 139 /MissingWidth 500 /XHeight 563 /CharSet (/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/one/p/r/s/t/two/u/underscore/v/w/x/y) /FontFile3 245 0 R >> endobj 245 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2962 >> stream xœV{PSg¿á‘{U¤Jš•ˆºêŠUWûòQimEPDä%AÞ$„$’à' H€@ !HHLxF4‚¾Ög»nÛ™ªµµ®«®»Õïâå½AÝ®Óuggg2™Ì—sçþ~ç|¿s(ˆ‹B¡PÜ7ðx™Ü„¬åÁì´tãd9îEÁç9áó QöüÉ\×ùHp}áLàæ Ü\ôóf^ò€WgÃú·`á,Ä™Bz^¶8×àã±#rÉÒ¥Ë~=yoíÚµ>‰âWÿølLá³Ó²|þ@þ¦pxÙÜ”,Á:2šÃa'ù¤qÄÙé|Ÿ„ää”dÇc»8)™>›Øvv6Oèãë¿Äçý•+ß[N~}D"ú¼|Ÿ`Ÿ)¯!â•ÅËÎå ò„ù ¢DqRrJjZ:;#“Ãï}Ù†lGÂpd'ìB"‘(dø#1ÈF$Ù„lF‘-H² FBPä3Ä¡!óHåDŽ|EI |ëådpžëœå|ÏEéú¶«Àõgj(õ&„vc}ÓVM«›>kú¡éWgÔÌ0̸ï«Ü'|_b dé< Ó8lŸC»p1M ‘d(Õm-R6ˆÀ6!AÁN± ^‘[îÉ…-f4·"¾Rl§ 4ëè…³í£^§ÍéAL¢ð¿DÞÚ1¸|ýöÜàÞîøX‰ _g£t?=Oœ¡/¡€~RbB<ïs€Kö…Kࢇ¡ï%ÁåÔ~ï„“íŸlýîÈb>A‹\ÿÁŠ]ß@/øöè­ÛL÷ „™a˜_`.´“¬žCË“9´G5E*LÊQnW¤ôåà ˜$5™„‚qn¼òß^õ ø0aÀhú`áŸi \xAx‰mgÒvH 1ym‘|VíÒ7ÚÛ:°Ϭ"æÔ5«£YÍ])LwÞº6øXêÓl&|;ód±A2‘áIBBöTo±^¦ÛÛƒ±©Ä&W+µ¶o$±oï%À€nw®Ý¿šdûPÏ$˜ü*ÉAi%C¤–4v¬Ïröë˱~Vo ÕŸE&_k¥ücÜŽ“|‰0(…ºŸx+~ç%–ñq1Ž%¿­°KÖ Î‚~C׉ìOv² ˜ °(þÑ¿2a\€ºOø• $¿pª;›I ‹ðÌßÁ 3õ_áT6)É/÷+{MP>Jܸ=+Æ+˜×ñ5þèˆÊS}ªx-*Ñ5—ß’ßÖn0´{ïkw5Ù £_ÚÓwz]h;w…'£½b“{®|w.­'oÉØK±¿†ú÷GN™µ—ëI"i\´[qH €\YRVºj©§ß¹ZQª@SWm: Þïi&ö;tn’t%ÀiÄbO‚F,`EåÆÊ\(0£¥{ª Õ@ÇêjMmÝcèây—ð¨*=(rIä±rŒ Íf4¢F\ЬR2€/ Ü‡§H? œH 'Q£òe›K1ÚR>¢¨ƒ÷“£hë™ËÑö‚‹äÅøýã§p)\°ìïcSL~d83Âeh¬W`?ù”˜Exl]çÁjîvXB7Qvi‚N²íù‰N̆cªê}US­ÕPÛ[IVy/”“}7O®òÌ Ë‹HOÍ U×çeUùËâ r’mY#¶.m‡•yÄ¢ï´~ ?Çßõlmm©ÇŽÙ\ô”¬A x@,çI¸¿é³åsÆÙЃ˜ °…›nÁY£êÁæ^¦a ·õ4À†OpÒ™ûÒ]³ZòL¦–Ö#VaGšÑ;É´[³ øƒíy ñ¬¸œM`#F,y´.~p¥ëư÷”rä]]m÷ st“MfÇ×á!ôˆî¨F2 1{9Á†è;XÌÎÝç³. è> /XObject << /Im9 236 0 R >> /ProcSet [ /PDF /Text ] >> endobj 249 0 obj << /Length 4137 /Filter /FlateDecode >> stream xÚ¥Ùn#Çñ}¿‚$²œô9Ó“<ʼnlÀI¼@ØF@I”—¶.‹ÚUô÷©ª®¾fz:ç¨î©®ª®»¿úøî·¶jÓ7}«ÚÍÇÛM§6m¯¡»ÍÇ›ÍwÛ¿îöÚnwr{Þiü·×ZÓý-^ªí\>ïö²ßžv{%¶÷p€¿;|mJnü輓r{º‚«ÓÝé~Þü'žõÅOey€•ôä¸SíöÆCøYhÐÁ?yÀ9?ÃãûÊÈ\ÇíöÞáßgú€Lߊ5´°.øèÎr·“ñhiâßœÛWDqúä'?¦¹ ?T€ŸÅ/i™=Õi]_ž"xûhð ï»>þe#6{)›ÞZÏûŒÐˆ “à= öZ:ZÎ ¿ƒlzñÏÎ;Åß +ô´§pB_hœ–Ž1EÊ?øAˆ[KlðCâY~ú‘Ø'=“"êŠi—üm`Lu äõ4D išÞ G×ôZ{z|z 4îµQòy^ˆ\ù3œY¡–E¦xMl’~ZÈÀHÓWŸK~µÛýðƒÿñ³çoI˜‘ILW„º*p9û‡ß +¾W¦ƒçð×µ@$¹U;z!=>—¬ù Ùú)~HynÀ‹pïÆ^¸[š0ì·Öm÷Ä£}dR&´%þ´/lƒ}„'"uÀùòíçÅ Àº´a;šòèß\#F“Z…go¬Ù~»ã-k¨u—¢FJáŽÔ]ÔViÛÁK¾74™êÙïÞ<@\I·°‚¾Ù™–µXE°´›à#¼øPS'aSÃìVÈ\÷Ðý5^?Ò{-ÃÃC26×¼D4K\=;ño¤•ÑÊi…/QÅÐgµŸýa—‘áy„()hX™±¶é;íÐŒ©N7FªnZÙúÅš–¬iœ´›}âÒ½ý'“Ùl¾Ó>°¦Ã lE¤°ÜþâUpTQQ›K¿H=¶7F²! ·sü¥ý¥:×(Õ•l¬3ÝJÞ¼p)2)µŠLßÁ³ÏÄ: ^;!‘:àôÎÐÐWþ«í¿á¿F¯®ÿ^¡¨jcº0ÆÂ…¶Íc ˜ÕJv…&¶2—aœ±ng_.é–E å®i¾D Nqù¿™’ÑÆ˜ÏÈw«cìˆJø,“œ`•#Ðh7oÊ€§%A0ÁEXf0ÎT‹ý“ƒ4H^ÖlôØc§Øëg¦ x°®Â³<•™|ÏlÁ¹ç“8œdéÞ);ÈÄ|a¬§S ®ªí¢ŠíãïCÞ+)ÕúÐ9(å˜)•©8œ©ðøøý5Êià1gZFœÀPIãÄyp‘>Ç^F#s &ŒöjåæX <­f¢fÿÉʶÅÙ?DVT3ަe¦’tôô\WœµvÆ ›ˆFüP½å fÌ1‹‹9 ,„å’3peÖM'‡íòôKáŠÂý^úßÜ%›¶«O{µËs’ÁuÒ…ä³hzàÕzëñºáSÙx—,ZtyX$'09‡,Y_ØRÿôÔîR|øÌQz>&ÖŠä·ˆí7¼Œ\ŒžCn3î.„˜H vœ¬vF‚»îtÐnÞþsz8½<ÉÇ«Ÿ*>÷>€|ÊéÄFã<ƒÄ¢Ÿ×àµv¹¥„‘5l¥úeg†k“ß@P¢¤äÇ*§0lýœõÖÆ©‘åŸpp#)J»×ÇDÉÖ›ü8õMu©kŒÒûÚ¦:³;}¶üòúÉbÇ0y”n›»v¨‡Má¦úG®E,Ì•hWýè»»s¥¥0öÿ³Üß.È ßjÄDN _|ð?+ì/:´iuňq¥Â¤ÄÅ,: ©R#Œëñ¾…øðÄ(kyÝ”¶"ceEÇè^6ª5™Žyz&^Ÿî1ƒt¸;=TtÕM«u–9"³nlß8#K™žH'YÓIp9]Q‹‘TpŸé™äÔÏÚ¶UšŒœœhn!eï„-}/³ØåáUNÆœDø³ÿ]वóœ4Â4R¶Óœ|ÁÖðù—ªñàÑãJ âˆk|XE,-dž‡áó¼…;¨MmiÒ¸Föú×-­íÝ÷a,:•á}žkoz(*It.¦md¥ _Wó”šIž¨ÕÃ’ÉrGeßãá'ÊÞ=î/#Cƒ0ë\Da¶î‚´®kŒŽ+Ðõñs¢TFï2ŠÊ÷¬ZÙ8­‡•2ÌU](ãý¨,‹§PîlŠ/†îë0)QÝ+g'Ãå*z3yCÕ.*BÇ)‚\äžÎ-]b;‰uÜúütsx9ÖÔuêºF…æ3Dq´ÕQ|>+Á_sF¿5ˆA]›x{HÔH„MîXT<ÕJ–È”Ù5ã -I„×rÐ7.E‚EȸJ‹F›(eOçã$uQ9)•S³aNSö7Æ(Æ×Œ[‘e3•Ƚ!Háp¦Ö` XÙ>Z‡¤‚k~F¦<úO›cÏê¾Úuµú7x6r¥ùUruzK•Ò÷…ÑUÑÔR¢Þû J®µ.¸œ´©@¡Ü|>><jDD#•¥O`ñÙÏãÜ[Û’ûA8CùŸA| ¬2º"w´s™a_ð¶ª1C¾U‹èÚr"ɤü_¥Ë©Å~t}ÊíÅ=WzÞü ¬é'y:ôæ)ÚD]‹ ýjE¡ð°9÷ÃïxW{8py;öâœ(S¥ÄÞY Yˆ>dŸëÍ$ vÒMg]k\Ò’·i*Êøf¢ †â4.ŒC¼¡Õ^HµR&¡êRB.¤bAN’íœØ¢³´ÌÚ¯YW©1ªó—W´­ÇÃÏSikÙEð3ó,g« ^Hº H‘tñKÍš3b‡7U¦mÖ†o¦Š;Ý2%|‚áŽËðÊ€7+Ü8e4““ÑÂ\”“áDÙ ¿+ÌšÁnw)ñVQ@áûø¬O›ÜЄF„”ù° ð1)g²mŠÎyì‰9E,uDS£aêâÌÜ ¿0åžPÝ=ƒˆo¨%†Ž&–K.p4}½I¥Ö ³Ž„¾@æ8/æÄ0Ñk-ßzi‡ƒmL¨äc ²SN0ß(ÓiÊ‘Þú!/UËÁå¶âž+„±Ø6Û–‹Uƒ€~\¨“ã^²¥º­Áªo½š§.Mì"“£¼â ŽlB|&DD˜µ.–lgÛš#û²òuµIeáÖz§¸ÜŽt„©•úñá0ý\({nô.»¢ïñ„›„›º‘nÏyÿVÈF€N/B™¥â˜ÑœÉ߬ñ45´«¶L¶fÐXf–„´øÆÐ;›jSÈx§SÎ .¹[–æ,‚°iÝÛ_›èøk›üoVp\!/¶¡#a¸ewÄ9e|ÓÖ=Ój XŽ|¥ygä_ÃŽóQ¯[6Ñnh¢»˜:ôl“]Ò6,¡¶š™¨]¹K¥Çñí·\6ÕúHÔº¼ ™œŠ«nP?Ž»Í_Pñ㺦[—÷aMçO8.é'Ô²’í7$zN°m¨P°•M§eJê!ý8crû6IFÑXUX©j¸¢_„*Œ$Ǫ3±Þ¥ºö²ì-ìÞO«+š}ÅžUÎ ’Zf±7><Ò¾ø0ŠÞÑœÈOÕ† ±Í}ì÷» X89–”»(;³–Â'˜6+íàèjwBâ)ï úâe]'s½½ãYç KÕ©ÓpœÒ/w‰¯hÑBÿéÊÁ'ݯ<øÄƒYŸêýnl«¸Ý¢/}Ä3ýòñ§ Å©´mDò-Êæ 6»TÈòb¢<S­€ä ˆ;7CŸînB¯Ÿd‰±W<æ2m[¼NìEã”Ö‡sƒ3ò}}wA H"ì5ñ´9ç¬îws‘—áÓe”ÆU%u:-pµ ~¬(ND™ÔIø3Ol¨a’~²±M­®ç,3SÝôé×rêWÔª,ª^Ý ±ªù*”•mì*m‹CoD›”×èÝnaG‡ú<8½Z’裴ÛÙOµè ¶£ïšÀAeʤ2¯5àj}—šÚj  h¹ðÁWŒÞiи?h“½­U'ÁŽÚTž¼N é”–%g1;}õUEÙõ]—ŸÑJɪ½fWãqÝ”ØÉÒ±ƒs‹¼ºÝ©R¦Ù…!]ÑÙÎV3 ã£hÒµBd °GÑÌð(š…¸e„êÂè&…A×ÄÇ7KÕ5mê¶X¨×¸™k(øDÈl ØIó.jTª¡¥üÝ×ßýò`±‘x"]j¥Þm®ïß}÷ƒØÜÀsÃFãW‚º§š°ìñ`ÐÝæÛwÿx÷Ÿl·À‡®åÓlp°0Rfx$0z30 ˆ›j\Ï6àoŹôD]›7ÍìÛr)ÙQAÕ«Õ'„pÖKœn7pºax™égÌä”ãˆ&P·p6Í?WCvSm³0 ÂË¢¦áÊ<¾ =ŠÏ;™•QÒ\’áåšÞ£ÀÙBñNÕyÛ…Ó¶ÂNœøÆ7!$…J?kÎz›Gå‰q*:b˜ü2U$cÜïwL'X=By¡ÁOº®qðcÂfÂ0”têTØDù^Uv苾!l!aˆÉ‰éR¸Kb1ÛéÇž=¶>AÆçm®´&Õqú¶ l¤é<ãÍâŠ!jÏêªÁl­¾dÑ®Iõ­=…“ö+œFg—.'ÊÒ Bý›ÝÔ¡º²È¢ÝÝì±Bº`‘°ˆuïÿÅÂ|¾ endstream endobj 248 0 obj << /Type /Page /Contents 249 0 R /Resources 247 0 R /MediaBox [0 0 612 792] /Parent 226 0 R >> endobj 247 0 obj << /Font << /F52 5 0 R /F105 26 0 R /F47 4 0 R /F109 37 0 R >> /ProcSet [ /PDF /Text ] >> endobj 252 0 obj << /Length 209 /Filter /FlateDecode >> stream xÚuŽ=Â0 †÷ü λ¤iØ@P ¦Cʆn8Ýñ%Q!¾ÄßÇMËÁ‚,+¶Ÿ×¯Cà$Q´ì<ü6ꤜ­Š*øLßë ©_ú4Ìr0=ªeŽ'5rļ]™$5¨=C´±äÒØPˆÁr ýÁ kM¸ßj"¼IuÖÆãZ›‚*$éäHÚ8įSĽ6ì°‘þGòЪcÆ»~tÑLO—y÷Œ[¥œÁ£þû\û¦ÓÔÙœhïú;- ²õ.€)éõc/”[ªfI=Œ¹J endstream endobj 251 0 obj << /Type /Page /Contents 252 0 R /Resources 250 0 R /MediaBox [0 0 612 792] /Parent 253 0 R >> endobj 246 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/primal1flow.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 254 0 R /BBox [0 0 558 689] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 255 0 R >>/Font << /R8 256 0 R>> >> /Length 257 0 R /Filter /FlateDecode >> stream xœÍZK7¾ëWôi/2\¾È!ÀÁ"À²{ °hK=¶=&šžIæßïWì&YÝ£VN± .‹¬bÕWê—N ÕIú;n›üºO›Lí.7Öø Tè‚JÂÚÔ7VG%tì|’"êîP ÁF!3åáï+RŒ)v¿Î¢~ø×ÆÄ „RWDÊas¿ùe£¦óÇöØýó=މðþa3TuÊZá•îL"×½?n¾üñËÝëÿvÏÃéÔÿøîÝûŸ6wÆŠÐÝ)%8v›//ÃËpûqÿ2tÇ~‡SÚ_·‘3³Ï¼Ãår¾t—a{~.¯ÄðíûÍp<¨Sgl4B›Në…õÕN¨”°à-ŒZØèD”¶iñxÙûÃãþå<Ϊ('Wåi8 Û±; ýËþô±{é/ûþÃaøš˜uši’Åtú§ýSþúNYÓ÷Ï»~ªˆ§¯ºïï¿ÍŒRXÆw:_Žøò2잷î۞ŸÆI _°Í'; ¿Œ=\p¾|ª¸`+Û5Ë´ÂÀJ+!aYœp©‹N “Üm–5×osð§üÚ²ûÓlVmçC-ÍZÎݽ9¥Ñ> 8œó2 ­qJ '3†;Xó)­8¥·AHÚ)÷§ýø¨Î~j·¿8æþô4ö‡Cןvñî¡ÒS>dX\íã§þiè¾ë jÁëßèáUðB¹ªÇŸòc#µHŸZ UÜxüuèæJÀÖ^JÒCÒÎt¾~÷ÓóÓØŽ÷U·ý4l&ö˜£ 3G.][÷0À‹?ìûñµ;?d©6ûzá«N ³\ÑZ{ï…‰¸- ‹Ú½É éý­ZK`„Áo}(·´Ø?¼.ô^]^V±cM /0²ë;?ttËU)¦Ð 1¡BÔº Ýè…Ê$Ä \pì`œI`åùqÌÁ2¾7D$rMúíÌЮî^À´è·ÛçK¿}íþÌ8=ì/ÇÉQãá ןŸ.X-‚äA,ÕSóéI×’]¼—J‡ìb"–Y$*‘Â"²‹‰)‰`™ª.ŒÊELTakâ]LZøÄÄ»¢pš‰o.~³&¾±5ñ6Á¥œgâmŠpØÄÄ7 ï4$&&¾±ÝoT€·S²LlÀ¥‚ò´¹IÉæ@ FNø²°@ò‘‰*l·äl™ýÌ -H#?{>Ͷ€,"`‘²sþ¦9CÙN¿8‘õp"_)PÅ@H2´Ä¡°(2aEKør £¨ I¡º¨²4¹«½›O7hoMD±´ÀµÃxY{žeŽüŠŒ<ñ žø)G »fëBVòÁ¨¶š ·B¡:MgÈÓAâ¢Q ÓpK”÷6 JÂe)¾¨°4Á«Ío3‹N(uÂ(«Ü”¨gh²ìžûCö ³¬~&¸8 ÍÆTCvD‚Ô’Î\(¸ÒH¶L›Êãà!‰În¼Ãµ/(A©¹á*O•¼Þ}²A¡”¦3%èÐ(8S²À| ¸·²œiæAÓiAA#‚2Ÿ€­*˜ ¥h–(T Õ^eáœ)ŽLTaÃé z;+RãÖ:˜–ݵR”r.L׉/, ß°¬rY*ç Õª°F)ÒéW„/lâ?7"™a@Ù<¨u8˜eªÈ%Ý8tÄ}+íºD]q ó&MŠGF!çYAñŠja_(m!nÄ:CëÚ†:·M\¼¶TÏ‹ רr¬¢Ú†…Â7ül8…ËSÙŠOÊ.mx–F\â!±CìòTZWÂ_ú|úp~>í†Ý4+ÂyQ7Ü¡†“‰ºØ?Ê®‹)Éï¥W‰ aWªec‚Z nýrB‚^ÓQÎÅ¡áä:‡>Ú-˜Ü¡¾ 6cv2;NÉ—à- F6F,¢náu!nÝyê Ú~ÌܘttŸû­±ôX$µíŠh¶[µË¹ ÐPQSÃO&£]·*íbñׂȨ̂'Il]!°æW¢X·ÓvF/árZ“ÿ+(Z‡âG„v>çä4t+R ¡È¬BÊïÛš !ÎÂðÊ2ìi†=­õ¡×6ì)âKÝݸ´n)^¬«øUÏÂÖÕ žp9æm-·¶ÓD ÕnÊç`ž)dßägéo{­™RD±…•—&h ê1‘ýV"á .ŒV– ~+½£ Ü(æÝì± ªím!Ôe,«Y›¸„vS6h/|öÀB±6NCUgaQIv Žªc])‡J)¹¨Bù#ØC²Àµh7ЙmpÓOÝñë4Ãj @#b†EšDO˜Ãh$^€BYM•^äp]Îô,ª¼mßÀdpN8>·Ä¤¡dÁÎBMpEÕlYC1a¼Á9+éÎSaDS_xwì šqP¼.¶ž‹B³Á)€ ÑZ¿ˆ(™,vfÒò7É Ä bi9ŠŸLž¥z!±¯¨ÇµÈf’R²QÚ­í¢:x@@ÂU„=¨JycÓ>†`Ы¶¤å¯;Eþ稓CÁåæ‹¸ ÇóËÐÍèÉhËŽ 6x_w—™dJenñLðp¾ßµf_ùÜÒ&òH1I+¡Ñ¹-ÆŸ…©ô?Ô}Ÿ+MÍ@î‘ Å`[©VyþÊÂÒJÝèÞšðå@ž£iæÞ‹†´!V©ÅÒU Gºõh‚-dP÷Ù-?œš^#Üñø;ªz}W&Tjð_RÕYåürr¬5h¡´)FÚÊ3O8a ³jŒ2Û¯­ªç/v¤?åšÈœpÍ„kG ï—y;#áüR}mÞº®åP ;Bf-´‹ M§ê—~L€èŠáZ‰LµÏÈüžJý儦‹)jÞ}1ÅŒì>âßÿh@.– endstream endobj 254 0 obj << /Producer (GPL Ghostscript 8.71) /CreationDate (D:20101231111147-08'00') /ModDate (D:20101231111147-08'00') /Title (/cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/primal1flow.epsu) /Creator (IslandDraw for lou) >> endobj 255 0 obj << /Type /ExtGState /OPM 1 >> endobj 256 0 obj << /BaseFont /ROZPMS#2BBookman-Light /FontDescriptor 258 0 R /Type /Font /FirstChar 32 /LastChar 121 /Widths [ 320 0 0 0 0 0 800 0 300 300 0 0 320 0 0 0 0 620 0 0 0 0 0 0 0 0 0 320 0 0 0 540 0 0 0 0 0 720 0 0 0 340 0 0 0 0 0 0 620 0 0 660 0 0 0 960 0 0 0 0 0 0 0 500 0 580 620 520 620 520 320 540 660 300 300 620 300 940 660 560 620 0 440 520 380 680 520 780 560 540] /Encoding /WinAnsiEncoding /Subtype /Type1 >> endobj 257 0 obj 3028 endobj 258 0 obj << /Type /FontDescriptor /FontName /ROZPMS#2BBookman-Light /FontBBox [ -109 -241 984 734] /Flags 32 /Ascent 734 /CapHeight 694 /Descent -241 /ItalicAngle 0 /StemV 147 /MissingWidth 500 /XHeight 563 /CharSet (/E/I/P/S/W/a/ampersand/b/c/comma/d/e/f/g/h/i/j/k/l/m/n/o/one/p/parenleft/parenright/question/r/s/semicolon/space/t/u/underscore/v/w/x/y) /FontFile3 259 0 R >> endobj 259 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4006 >> stream xœW TSç¶>È9u@%MMÔ&ôiª¾N^+•Ö¶ˆE„0$ ’~e¦„!!aŒ(È$âPëØÞöÚ[-¶Z;`«×w[ÿƒ‡»îýƒí½ÏuŸo½õÖÊÊÊ:Ùgÿgïýíïû sœ‡Ñh4ç’““„‘¢MÞüø‰ýÊ&r\9|Ñ¢Q3iN/bÞuÙ‹ÀB°ÐQ¿Òe üËRغf/Áh´LP瑜"K³'p]p pý† ÿuåu777×(Ùïÿ¸îˆóãE®kÐi¬ 9E+’lsõ@Ñ?Ú5^ KI»FÆÄÄÆØo;)ˆMrÝÉðSR’¥®ë<Ö»¾ñÚk¯oB_@]{~Wo×¹ žº„aØQrŠgšX’¾Kš™%‹Ž‰ÛŸÀ÷KL]·­Y·}ýÆð×1l¶óÅÖ`~˜?€Ä^Á± ì,óÀB°˜'¶û{óÂva»±ÍØÌóÁöb[1¶ñç0Wl>¶{sÁÖ¢ÖbŽ˜ û-’öݼˆy_9¬uÐ9ÜvÜâØã´Ïé&Ý~ o'\ˆLâñsŸ¯˜ÿÍ‚ô÷¦.ìZ”¶èñ¢¿9{.^ºØwñÔÎ’]K—4‘jç™uÀL®7g‹t.pÞ4¬Ÿ^Ƹ #I“O÷‘'ùB¼µx¬¨>ìcSrøË$á…iÅ,!l1ãiGÃËepš ΰN^8×1¹â´9a7—Êþ_"§ŒlÚ¾?Í{Ç™<“g#·Ùh½aßCh!ó˜žÀGžü>ð$¨ ?­ƒëáË??€ë.I.Ç q"G½:ÞÄ‘hæÝ‰­Ô‹#pû›¯ü®€ÏON}ÍužÁ¨L3ô$W™³QU¦¡åá2Æ}È›+ÊW!(Ú_ˆŠÒje¨¨ÙhÈÒ‹þÛ£–ÉÚÀ¾Š%Œd ȸçÁÕ¤—øƒ\ÆÁ“ñ>æÝ+v@1/ˆv˜ìoÄ·g·PË(ºÏÖ·‚yÍ=±èQb@§à8?>¥ƒ¯tºÀE–1²Èû3ï0g¯Ò…¼M=®ª“7öì‹8pË•ªÒÔ,F–€¼ù-ÚW·pj=`~uvs^mQ°0þsüKЕ ÙDtÁq>ýðªtÉ@l‡ïÒ/¶7ß+¯ÇRŽßs,uNΤ÷Ü„N17áeŒþ?ã-Æ{lÆh•ê&ycnCa ¬­ —Á² q¡BÌ+ ‹E©Õù*e>áL6>™íé;°þ+ò-2™LWÆGt…×ûöËoïqó>÷k >Ÿ4šk‚$v _ô>{ƒq™^©;ÜGðé]ÔN'+½f`"jàð%À† ï\ûáj´m³žKq»Äò2E9;S#o:âø€åÜõˇܭ Ý™\‚w³Òþ:í§Q½Ô*¸;–~„ZˆH¼EÝÁAˆV`ÉhÏîQvƒs`ÈÐs2¥…Å‘ä $>öÀU¸óŒ{ÞpÌ“έH3êa™ôÜm¦ÿ³A$Ê3ŠÝ žj¨gŒì÷Ú/ YáÜu ¿µG¥«ß-|**ÁÕɆT£ /güœnýúá äß;ixàdLÕ4MTëJY”A€ëÔy52°u9[²€¼ 5K xFi@µ¢ L±Ñ€ŽôÕÑ`ç&åG‹j‹êA%èµkéQPy¤êa¦Ô|P¥U‚à›³LÖ9:ÜÏ™M'kØ*Jˆ«r(‹² rçý“œä™»ÌUpT]]\cOÙÖ 9Q’å¡xE­²9´1’õ UýSW©›@:´Qc+E !ÞWÔ’Ùăëg—±.Ñá|h{@Ùœ>¡CWø¨ãŠ^7¡e›©T!~Rm”>P¨3ŠäN_ä ò†É7m.Ý·ý …h þ${™ÔÂÜÂ’på| x—¿½2¢Ÿ¼Âa hî’œ[1¬µÆÌvVVŽ¢0 H¬&¿Q¥-®Ç ˜€ƒóÙQ†8}`]ˆòè,‚a •ò#–‹[2Ú; †NI‡“iÐ0ùé`‚?‡*sdøô‹”¯8Ó7|åÖ ¸¡Ž‹¨ì·f_‡æí&N™/סBâ…xoaUȪ¢¼‚ü-Xî÷TšÂjPÁÚÚJS©æËL±÷¹IÞ Ÿ£Ö²(µŠ”š}HÅB‰Ï?Q‘­:6ÐTjkj@GÖ]Ê¥"¿LTl)WRBh6ãÕ²ÚðShJXÞ0¹a˜öõ4<…xÕk&’MÊ|˜Oð–â‰B„7سݓxëÙËÁƒYÑnýǃ_á¸jãQì!~ÜDZ3ýú³€øñì»ÔÊe϶u¼æ^Dmd/Upi†‰ªíû‘I-…gÔ•%sЪ¯é/GS>,ÀGTaðÃÙ-¬4ßô€„¸ÀVeEn]šQY‘‘X’cMØz»¬ÜN‹¾Ûz¾O¾Âjlm™¨#:©!~JY¯É@¦J– ÿÅ)H/Šÿâ@ò¡ ÓÏ3*m/ VK&5#Íý\Ãpëi@ŒŸ$pKœD-é&SKk§UÚoäD›Bµû€ØŸÎ KÝ vÔúû/õ÷®ôÜçÌu­û[ƒ.èŒ^²Aréà è j@§PK7"J^í£÷êâq»C?]Ð]eÕšêê5¦N‚äÝ͸üh˜&GN±ÉûÑxðïm×ÿÞvÆàìVGž„؃H£t(«G9†À ædCalÀx ƒ®œ Þ\Áƒ°Â—Úh$²˜ñ»Â„>`ìI¹’Ó]x|JÀô’³¹=‰}Ñ'÷¶{¢g|qÝjjµW›×±0î`ÐGi߃‹}c· ê'ÈgVT45èõ&K½ œ}iÍ!ˆBSK„w†Ÿ!­xÛ £ŽÓM;<"ƒ˜ÔÝgJÂÝûÖu¿â ¯²¥¡Q«m®nDâP¯¬ÏÔfjó8´¶è Ö¸ÖßÝ’ønTâá8ðúV""T tºãðìÀI„Ç‘> `*<Á„/Ñ/ƒóÚþÖqk×ÇàçoøŒúOõ5qób)€ƒx\ipYN¸É†aÎL4iî]=–›dâ´¥ÔÅ¡µŽÌOKòãr÷b½½ÐG×Z`·¥ò‚Kãùä¯v?„ñs?YÆx¬€AŸ0yµÀšu¦z[®NÝ…ˆy¢¹·§ÃÔ<úÁiÁx`·ÎÜP‡”–Ôå5ªjµ- -méMIB~®4ƒ+—ç+e‰Ñõ’r 3 Šþªû:_cèD—ñóJB—ƒè–Ô1Á˜}ïýdARÈrБ0 M¿,¿ŠœÇ–_.þlÌkÏiæfã´žš¹,óÈ-ÌkÖ°¼üØ)7;=)‡ˆ C÷îØÆ¯qQ¦;³¥ÌÏóL™ HKS²„{å»4p÷þÉ>“eBÇ}bý6£IÃZ$’¼gQĶg"à(~nr²ÑÃß‹Ke=3Pƒ ßÜ« ;Oê®HàNýæL†á"—i¸ˆ¢¡mûå7Ÿ¶W‘XxÐîNt¿û´§Ý‰ÞŒ‹òʳìùdÙÃDV>‘oL±vVkJG¢½ÂÜaÒSßNÔ¹œ{Hâg+Éä¾âéòx'ÆO]~ê·#w0;*)‚Ÿ˜¦Èö”NÁ)ñŸ3àr>뾸Kö[ÞÙ³šÂ×ü.÷äÄÉ/Q2§^zóèG—3n Þ| :OÃ…=y}9®p8ØHaíÔR3ë•Ö˜N0Aœ¿xrêÞ ×O8–Z'T4U08³à·ª€‹^š+:üY–ìgPlµDšªTdæg PTH[³tŠŠl@¤IeéñÇÓ.NŒ7Zú¹C½ÚnðÁ Cf|ÿ§f`¨Ûêì‹ ÛÌAÛGƒºoì Õ,ÂûÔMJ äyRõµ’E&Dãÿ0¤(—µ"¯<…ß¼ö µ±QRrØà°R•Yœb2Xð°ªØö¸‘'§ýŠÎ›ÃÚ¿óâ\ú, ¯Pl¿³ÙŒK~±óã÷æÀ"G–þ¯ÓPjÿ,ct“äsÌÆlMCˆïq\J„q‘T¥”Ë”…¢B™=QýÓNöVðèV¯ ô½œ”ó±à eìñ#SWøø¿¿< ;”Jv4¹LU–[ÏΫ-Ô#kpF÷èY[óЊ3m‰p©T{鼩ý­—åUdµÌátvÑœÙú»™E­!}‘´V‚j6ÐÕhuå5¥eGŒ¥HürN[rû«Ô‚Ù¥ö8ï¢dÅ4l`j¬9]†"Úøµ¬JUçàþÙ^»¯[Cî‚kgw!~†>:ø |žö=|ÞÒ)Gæ§}#àcbDØŸ’›¨›k«Kk8ÊÐtQD1AN1ãEÉñ &Qw·ÉÔÝ-2ñ¬Žå%ö’³¹ >Ôßï!þ™©$yLJ%¤_Í­S‚hàŸíŸt`ÿí7vÞê8ý1¸L|¾çôæµîÞo´„‡södŠrøI‘Ñâ öví9w"éJæeð5˜4\¿¢KªËmÉ%9Yfmñ¥?õÑå% ‡$<Á°÷ŽéDC㥶GUÕ·ˆYŸfðXf7 FzûFF{ø‡BSBcÒ9y…% EN0}½™_¼õÚ”SÀ>ÿT@¼´ãsè0Õ?v³•‹ðy³3±ðp‘,/>+Q KŠýP€RÞøÒÇ,iÉÎ'úp7SÚm5Ä޾Ûne²ËJ.d’Ý6šqz2AÌ* ÁŒ‰âM¢Ô´ž¹¦µœe–ÜÕw]m·Ö²†Ì:}[«EkC¢rNx:ÄÄ3îo8vi´‘R8ˆ&"Û=¦6C›¦¸B©ç¨êŠ«@ 1üqß—ßoöóxΘ€øØÃ¹GG2ìË—L;4R˜ÖrmYSuO£µ³ÉÒw­öÏúX"¹í~AhH¯:TEÄâ_‰Ú6JC„!¶Ñ¤mvs¡Aã“ξQpáŸÀHjI3ÕUÙ‘*FŠQÝjêÕó´ŽûHõù9y7Ï,@÷öN;‹Ù&ÑwçH‹ÖÊÑVÙŠ?SkäÀ=Ë@/Ýêl¥2;[¨H*N´¯Êf<éèöòà à¶s†Ž”éà½þ½ýå Þ+_¸Ãþ!…ãÄ endstream endobj 250 0 obj << /Font << /F52 5 0 R >> /XObject << /Im10 246 0 R >> /ProcSet [ /PDF /Text ] >> endobj 263 0 obj << /Length 3939 /Filter /FlateDecode >> stream xÚÕ[Y·~ׯ˜·ÌžvólyŠ‘QÄ"@l#™ÕîJc¯v'šÙUôïSEÏfãä%»ÓG‘,ëüÈþæÍ«¯¿U|c;«¹Þ¼¹ß |£-ïz1lÞÜn~ØÞìØön·—Jo/pùaǵ¿WôJoÏ;Áॣù±WýÓN²í'Os4/ŽŽm=ÉÁÿ¼‡'Oôw Ð’ù7ï°ý‡óïŽïvB»öÝnoúaû¨lÆÚ‹@þÙ‹—÷¡; |Â;æ&¼áàúI†íñì[Á dH‘£#Ý2èBø–ô.ŠãÉ·+%C}?ãƒØè“ó°c=MHNpñN§¾cžGþéÍŸ¾þ–õjc`}´Àõé7{Æ:«”_žÛ/ÿ81ï·Ç;øx8>úfŪ*Þ™^Cc×Ç:>Àܳa30M«Rq\†¹âš+^žwœ¦DTQ<îõÁ/4^ú5g… `À£c^ 8—ÝÞº†9Á[Üãt8³Í^ Ñä0tV?¥×;ÏÁ â,ýíw *tÚ)/ñ»ðRÒÂ!Šíq‚OþzÝ€pÝ)*Ž=-ȤgH ô¥¥ \ËN&¬êé|÷|º=\îZëÏ:£á½[Lo£8À3^7žCš^&"¯Û^< Ñ'™3Ei‚’E³ K'XÇ^êðs•'ƒP¤rþ-Y²îG®yã¶W74ò£7„άì4³A–+íOÚNóب}åÈ`Ô3²^(‹ªƒSøHòˆÚP !¾õNBù¤½Eœ±ÏøEIO•ö~ ÞÀ/—²ãÒ”K—1Œä§Ä¯Ó½4ÌËßôÎïÃíMp~Ïd[¸û°ÚûÆk×úŸÔýñ…(±Åo|—ÁÙ§AȆÝL¹“àŠ£Yi²ØëœxÅ«ÚRlrD—–Ï$¹rÔ%KD"ù/¯š¬b9,xôÏy P@â'úî¦ÿO¶«;¡tév·cy/•¸â#õäQñí´zâÛÜQqÅÜýÁÅ.äïÙ/“2RSŒB™…”r•ƒÇ6+µûDñ†òà‚ïH¼p*oÇÛÜwúÌÊ5úœ1§{JÓ³ñKÄdg¥,•âÅûagQÎÏ_  ÉÉY:Þû? ¾÷‹â.ƒ5ž‘=¼rhH@ò±¡ž}ú&´u‘úÑ“iwQ8›Vz.À÷Õ2 ^ÚQÄ¥ÈÌùÖç›Å*$ÜwB™s"'„åûhE fºAÈŒçÛ»ÃÃ[Œ^ǡïŸ/ –÷²W°år¦ÜͤÜÍLæn&ånpõŧå¤ÑÑšòY‡–1ôÃpsú‚ôëlDmнtÚpï[£F¹ß³ÿmdOålB€ú%plCrâb.•YóƒIø?>4²O§ŒµË]HI„ŽE…Ä×@Gn‹[²' Ó醱üZ]׬™îiIò˜òÙÈM¬rîßEX ànµ)V§ÜåºZ‹+j€½Ù½¡ÑœAÀõ¬†Âûz”è7y§­ ¥Õ^nMÅu½3ÒQSÆ ¾ÚWºÄV %*±¢ZT%¶ÈFÈ_2UΧ¬KñU3bzÙ±:åsùü—(_’ä”ÒŸýŸýq zñçkè'ã3¾mØÙtrêŠØæaÊðáRš×þ'½r·#^å:1ŽbªÃS…‰׋R¬àÄpbÞ¬3ñ>’¹}]çåz”"šhUÿå-º¦ç8œˆ {¦¼?·¯w™|ú¸ð¨dŠ•:è•øìé¾ Ø‹+¢~¤œ¦ˆéŸgÎ9 n]à[hRHKRP«ê qzCVZ¬…—HB˜™ [Põ€—à Cg:e!ˆL53&†®Wk p•·øÂ– ¸0©¬ök!yu8ÒwYõÑâ¬7”,Ï7žïÁÂÆÄ(7'¿Ü!ÈzÍf$öx‰'BÏÔݧ€a@¡ú–¹FeeCÉë¼$”jÊ}• ªÈÜ׎…gf1~3Ût³%$VÙ†ÿðM ÿeÙDæ(@LRü*¼Á$¼ÁK^êŽqQVpoïÈE‹ƒ¾SF^ŸnëLßg3l_çX³&"±~¢*`}ßñBã+6O CNŸZ™¶ÖQüŸsKtTÁÂõsȽ0‡È¬œÌ)³"Ôî>F‰†ö\«Ž‹¡4¬ËgœýÝá—{ºù¹µP ½¸bêRê¹hŒ¯ïÉW$|ãÆ%ÕÅîå`r‡ëZ¦ñI„œÓ˜EMYæRª±ua»»,ý?{ºyƒÃ¢KFexqò#Uºÿ2)FîÀ±Ì¿ãØí¢ Yˆ ?TyLdÉgVµçñüÞë“rt!H P’Rʲ¢‘£q\ YùDªCÉò1EíêœéN';#„"àét‰Þâò¥e€+ñ 9%>s\¼L°.ÁCYpˆ;Q¢Ä±ñ¾à¼NjA[Ág— JÀ£¡ƒé˜©jsœ a|ˆé4»[äqß¡uý²K6Îóx@ f–ÃQÌ%Çãþ(ŸÌH†•:%]Bíc'×€'¾9dМ ì“ rI…“qNé–N’°óšY£v€@r^Äb/»¼û9.ŠÚï)5ÆÞVÕ6Ø&€Óœ¯ŠØ³ð9 $K FI+øûßì šç³®Ÿç%ß¾µëôL,À„’õQ¿øÛrKÙ ó+ò`÷í4]vƒU×»$ȽB£âœêZíìÙªÑ^ÉXésXn17²¢¤0Œö«àwNÒŒ7EYA RˆveŒÝ¿ö?Oô–Ål@—Ö]æ>,+ë}›¶Z-[YïÛ¸aã/W –Õ „ÅpLÃ^g¡v±¬,®l¶gyŠV½Ûj½»§ÀÕ‹îa‘à[6®t-k¤ö–­ö9A:‹ãm~½µZ@¢„,ì€6þÌ9THOçu Hô² ã0y ·¡¢k7PT­vQeÙPI{ˆî¹ÆÝYHæ Ú`ÛŸw|ª|„Þ€mnÒs²ðxœ%E}•)H˜ ¥9IÞËìŽL®ðP3ÖÆ_ƒªE)ž¹µ¼Üa —&€‰žg»ÐÊðjZÐFæ§ 8÷šP.²a ‰gð›é¾ö4ÊÃÊ~öT1Ï‹ÇC²Œ‘dÊ] ¶bÝ}>a©Ïêmà–¸Eµ¦“JŽr¿è%{Q¨SDh$ {8UŽ@Á²ŽbÁ""ê·,îvåŒF7Åvèhš™ØXr%Ù,Ò¸œ£¸2X7xl) ¼xÝr©k<…æ~R:žh “¿ÐË„øû¤è!”„¶³ºÌSß<ôÌç$`Ç6nbþä+¶‡ÿ|ûgwý}Ã~9ü0>Å¥ë3<š‚¢Ž{¸ŽåKàkz{'Ç]^nd0ÙV¡¾ÆŠ\—i?ŠW.šÂ§/¶VÜy«H¥²FRšb H\¨Ý¢ž;0Qõ?r9)ƒ?î¯ÿÅ„{:â •l!$k¼œ‰ÌÜ,×ïØEvð ›dQÓÃ$²ÈÿâæSQ“ßSõpI… +N`æñeÌ.kœªÌ•oéL8ëTU(Sv%ÇQT-ë'Ò©«Úà™Û—åš¹™(\?c v}_Ê12(&ßû9eiÍ1ä&°)¢#wšTÏ}.VjI “úˆ~%¤x6÷ø56³”®“ÃPàüu¢céŒhskª:;šèc¬pGé= ‡®btáÃÊJ§­–¢Í*ð¢ó@GCùº5 8Ë,k#7Å1ab´ò–‹ÁŠ{cý¼‹`Ö­?½$*L'¢¹™>ãVz)ÕõLÔÀm¥÷e°R6¨$•Ù£ Ø¤qºj/†>®yWQåíXÀš- ØfUŠqöŽKlÝâB¥­YÝÏít;Ò%ì• %M*ç¯ûÚ›6RÆÕ¡àS,aò”çÿÀíW§‘…!Ê \)†¹ãÆÂÌ7¦0&ì«<–hœžÀV#ÍÀ‡UÃH?¥°+¶;†ÔUÛÙáþÜÆuy2¨›0T4cÀÞ ¾xÔ:~ÇbÆX¤òÇëÜïÙÓæûbÕVPÈ·2þ£a|pÆÌ¡Ê@JŠä^Ý\¥IÝßÏ ùÉ—í¹£ñrôÏpM\ÌóóA†sC'´sý‘IiyÔh#7)*ü6ÉaJ¼©³Qk°^EÛ.ñȼåIø¬Pt£j9=UÍcyà-­ÉÓ¤ 9’ÁÜþ™7ãcú´×úJ@Z¶°±¦ ‹‰ÖòeOaéx¾ÍXzÙåÕe¾7i#ð)6Žã/•aœ ÀÝ[&¶!bØh—:nœñÑØ§ü ÔXiRÏl>?јJã©Ów ®‰mÛ®¸³h!ô¶(ðõ1‹œïG-S{NPUVåQ‰â}:,¾­‹ iËyH[æ&7¹úË”ÃHÛH¥¥]•Jû„¨ìlÕÆ ÐÅEˆßQF0:=øŸy våD|2ÇàíCÐéÄÅ?Ä"fæ($p@ˆÒWùÁº«¢`j1 "Í•{¾‚É &’N:LÒÚ©¿v|èBïâ!6-² öøÝøˆ5SíF,ð@JâÒ'÷ NêÐŽ/¾§Ì"äõy 6ŠÇáªý óùoÂúë> ¶üð> ^¼Ïù˜NñUyo˜q©é*Xœn¡ÓÈDñ1jCà¹iÏwï›;1˜ËMß+r0—;0ו¯pÝs¹Óø¼tõ‡7¯þõ ÷œû Ã/±™°bróîã«~ê7·ð¤Þ k6ŸÕÇ 3CÇü°ùÛ«¿¾ú†¾èVÀÝ಼z}ñNJZ*Õ˜…„~ìfÏÝT2$(¯2=â6Q8§Ã]Üö#Tq `EšCó@H%ù؃7ƒ ónÁ˜Ù× ôÑ“KHó*ú*„5À˵߃•(oÍáÏ;s æû1bEÉr·:ˆ4G-ñY*;ÈFm'µÊ¿æO;± çD->#ª¾îŽO60Ö5û.éLîê3㬬,S¦Áb ±öóì,ëÈÁœ¹ÃÉŽxI2úž)ë0W×$Öêën0æA8sëd:™9>\ž,W˜NÚ,?%ã½é”›½‘]o†àØVÇóä{ endstream endobj 262 0 obj << /Type /Page /Contents 263 0 R /Resources 261 0 R /MediaBox [0 0 612 792] /Parent 253 0 R >> endobj 261 0 obj << /Font << /F52 5 0 R /F105 26 0 R /F109 37 0 R >> /ProcSet [ /PDF /Text ] >> endobj 266 0 obj << /Length 678 /Filter /FlateDecode >> stream xÚUKÓ0¾çWø’õرsc•Ê ¤Ü€C·m–B»-},ðï™?’®ºUQ'ž×73Ÿ'÷}q7kZP{kµèÑjá¼®•iE¿ŸKP6øÔøYyïË(Q,7(ì$¨rÂVVÆt¬ü†¤vå:œÏçòkÿán†Y|ív”L‰JÛlHÕ˪ñè¼.÷äŸ5cÔ-eò¦ü¢”‘lô+‘8׃4n RÌ9¾ÏÇðCð<3ì1ó!ÔTd¥•™«Dó%5Ö`#ÖÒ@ù;„Øœ’­å–$¤P>Eö/3<ß<’Õ%¤¶ Mx•ƒöF—¶ï{Ù°+e]Q¼0 R§rPÊå’ú³–áá\Š÷}8%€jÛŠå®øY¨Úƒí+§2+“Ïkwó€x·/>ñ/i+ÌQIWÄЪ©Uãh_;"&ñã•A—[ô†joAoüKŠBŠ’˜â[²ÆTej)Å:G¿]°™¥¡‡±b±&£w¥ ¶*ÀGv쬻î6=u×Ò/&Òû9cF2ƒé”³!fN„F¤‰¤—ò)éÿÓ@çÛ“âíƒúABŠ:°˜€í§‘Ùq9µšbqM{øˆGMf~‹î|B<–:ðtI·‰¢mženṌ$Ž{Ê÷t]ã…òÆÞ¢vÅ#•ÃÛÎ…áŒHN)V(ÖÏ9m èb¡Y¤ÄÙqi†£ÓV˜Ðí?ꢀÿ¬‹o?Q;Ý~ëý–d‘Í„Vä?Yš(„¡ý >·ÖW*"ì6»ZŠøþrãææðfeE‡7غÁÆ«Z{ýæ>Žœm³“Ôœ­¾ñ108•êx¡¼Åa‰Ê¶uÛÅ™Yþ$Å­õÁ\€ª endstream endobj 265 0 obj << /Type /Page /Contents 266 0 R /Resources 264 0 R /MediaBox [0 0 612 792] /Parent 253 0 R >> endobj 260 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/primal2flow.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 267 0 R /BBox [0 0 511 547] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 268 0 R >>/Font << /R8 269 0 R>> >> /Length 270 0 R /Filter /FlateDecode >> stream xœÍYËncÇÝó+zŒƒQ§ßdaÀ€á­m ÈÆ@p‡¼Ò0áC¦.åÑßçTß~]Rc ƒ,2†P±ºº«úTÕ©ÖïLpÉýäÏõ~õ·_={zY%);=­´Öž;ìÜKÉöˆÈ…bÎ:îð¹ƒÄ9®|'yüëÊðB ìlëןV*Ém`^*nŒM¶fëE²«’fë~õûJÎ6òÇzÏ~xÀI Wóá%S2ð ,ÓBÁ„eûÕ‡ß>lÞþ¹9‡ÃðÛwß=üku§ ÷Bv'q(mVžOãëx˜†iû:²ý°=Lãa8¬Ç´@‹¦ï’úx:Oì4®¯ãét~|Xý²’A ŒòÎsë™ÔÆq㘶†k­°à_d_Œð\v®<Ÿ¶ûa÷¼}=NÙiy¼ðçeÜë‰íÆáu{xb¯Ãi;|Ú'}å¹Zº“Œ±OÃËö%iÜ©Îâ¬r~Þ ÓX ½|d?ßÿ˜tïõÇÓ_žÆÍy=nØúø2Í6!tìTóã—‰!öã 'Mç ‹eË.ÊÁð€b¸eR ܧfÁ ®£½1ÈÒqOAŽŽÓ—QÞrˆ•¡ã¿ârröÕs𠀯Xª‚(n>¨æ•Að C>(`{|žÒI§·‚„¡?çã°žÖt»Ùúó¸þ÷ìR>E™ü"Åa½>Ÿ†õû ®íð¸=íI@î.ãq„™O[ÚŽ½ ]Î/WîJ£$G(îšè¸pnvW™ôYf¥p„ê=$6çD‰‚tW€¡“ ˜Ô…:PZ¤…ÅTQkæœÏÒÌEåKu曤3oŒ \»Î|Sk浄‹½u­¤>vÖ›¤³žÛŒ7­[`”ÖäZT(#÷Œ àm+Xß×»*ûãÓp*éJ MÉø!œâ‚v1ŠkO’¢‚âAõŸZB/‰TÆ«ŠN5¼Üz·ú|‹ï*r£ 3^¥´%ßûÒÜè½îSxé»Ðe︹ŽIIW Š7Ü5 /5ÌMh.Ü&4 H\Œ<,$¹ëu«ŠN³|±ûqÁ±¨ïI´*mçê0W°äºåjQRïÆkßKî6ß‹¤ù.•\‡Îw)çŽÝüê$Ù÷nUÑi–/vŸ}GÁHù: ‹JŸrSéÈ•ª‚kôÜ„ŽFB[н$xÏ…ìWeÎòÅî‹„þ9Å«¶oO&‘†×Üiçs!ùt<6ㆠar‡È°¿<%ePÁQ|WQ4ª~W›¤‹_©­"6µû•6"p‹ƒâ”hz‰-RvÀ¼Elgâ™±0Åz©B×ë²ä–z‹µ oäj¾Ÿ)ÂiœÎ§Câ†hŒ}Œ¨ÎÎmŒØFÊ;‹Neúº­»Ãm¿ry…ÅŽr-ä«Â´}ú VÊY›+š¸æ#Û#4†Ó°Q[sÖÑ[à ÜqCœ „gÉEÐ4#ÅÍP‚¹{H€äª ­œòY¨/4 üêûjªÁ¸HÚ®]kårS·@£D× × ?Y¢@ÑÊh¡=ºS wDºÞük±Ó­ª‚Ó\‚”Dñ„VmlêJ£ŽÐ£- 'd'éñ”»Ú¾™ª}®JêÂûÓHŠ™.Ch 褂ƥ]'ªÍáÔNrEœ¥’‘"É–úuYðgx†Gø'¹OUÍÜPEʹÿV‡£ˆ„)Á =Ã6!÷fÚ±7×bå¼& M‘Nº†Ð}@ýðƒ!A Úd›= N-¤£âüŠí :‚ð–n%RÞ6r øÈÁ»ë¯à¶GÁª¥ÕÞÌN‘GøÒ™Q‡«¦â…²Ì-A )k©ˆ4 ]þEÛÛ7Sµ¥5IYxëu€ŒÄ™q«±]’-‚ÌæúÅ…´RuGÙlUkÄEÊù6çÜþAzÔÅðrMÞ ˜V PmæRE&ḞԭŠJëD%Í;IÄÃ…¶(«tv/öžZD6vM6¢M" ,"%™„S×IpeÇÜWKõUP—Ý¿×Ós3kZ¥™-·[:ØzYÝ® ºín€…”ƒpr`ìkøX&X×ÊÀ;âjà™V᪉4,Tpì0´³FgâüÎغ õ+ºÑiN¥™w®°»&Ñ¢ŒtÔ°_U2ëÛÛ4¦ MWêQ)M~úé|Ti2¨.æ©ùŠÉXe|s±Ê;nb×S¬Ât¥òhgìÜÚëX•dSýÂ"¹¯Z£àÐŽšhå6UÐs#gªõκÿ†Û`i¤>J§·ÿÛyê²G[ Aå_wWÜn׌AÖ¥žZHK•\zßéd³ý¦·Î–~ž«Ñ¬œçêõñ0mç1?t-²$ñ0Äé©:?ÿucu–tsuõàzô¾™/øl§Òì^ì}›ïÀgª+X÷®7‡Ý?¶ÓçŸÏ‡üÚh— Ã4ûç‰MGpÈÝð%Í .æ§ÅÊMç%Õ+\“U"k#‘7VxUæCé%)?£V’¤›Ë®$”P•Ë’Ý ЏŒq 9>uš¢cp )L”›u£IêöuUÕ©–/w¿j4â«ØõèîÃøGž–^‡Í–Þ^_æZ¬»Ø ¯Ãv7”6~Ñ;@|­!®DïEDçkcÀrç%=y£îøÚ‚ ”ç DÖÏÆaà—T›š„ü/h¯#ýÂòòqÿ^©Íd¶Ö&)Å·§Åõ¦HºR[¶RûÍÅ»k`·n¢ž À3pß•´ë?… Á¥q¨ ð#hšEM¯’E¥Œ^]¥k7¿a¶EY¥Ù½Ü{F\)y!B¤ e½¥¹H,1úËņݺr‚ûúPSމ‹rÔ]ÓÔÏòó½Ö‡N’æ¥Eöí¹«/‚¶ì†ä¡?¦¤÷#œWº«y<.Š4îïÜ  #FÇh´G-m ðg|*A@°'üÿ­Ûà¶ endstream endobj 267 0 obj << /Producer (GPL Ghostscript 8.71) /CreationDate (D:20101231111147-08'00') /ModDate (D:20101231111147-08'00') /Title (/cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/primal2flow.epsu) /Creator (IslandDraw for lou) >> endobj 268 0 obj << /Type /ExtGState /OPM 1 >> endobj 269 0 obj << /BaseFont /HZSEOK#2BBookman-Light /FontDescriptor 271 0 R /Type /Font /FirstChar 32 /LastChar 121 /Widths [ 320 0 0 0 0 0 800 0 300 300 0 0 320 0 0 0 0 0 0 0 0 0 0 0 0 0 0 320 0 0 0 540 0 0 0 0 0 720 0 0 0 0 0 0 0 0 0 0 620 0 0 660 0 0 0 960 0 0 0 0 0 0 0 500 0 580 620 520 620 520 320 540 660 300 0 620 300 940 660 560 620 0 440 520 380 680 520 780 560 540] /Encoding /WinAnsiEncoding /Subtype /Type1 >> endobj 270 0 obj 2221 endobj 271 0 obj << /Type /FontDescriptor /FontName /HZSEOK#2BBookman-Light /FontBBox [ -30 -241 984 734] /Flags 32 /Ascent 734 /CapHeight 694 /Descent -241 /ItalicAngle 0 /StemV 147 /MissingWidth 500 /XHeight 563 /CharSet (/E/P/S/W/a/ampersand/b/c/comma/d/e/f/g/h/i/k/l/m/n/o/p/parenleft/parenright/question/r/s/semicolon/space/t/u/underscore/v/w/x/y) /FontFile3 272 0 R >> endobj 272 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3795 >> stream xœV TS׺>È9µŠ•4WâЫu¨ú´­µRmm‹ZTpÂLd‚„@1¶Ê L BB˜¢ “ˆcÛÞ^{ëø´Ú^lõùÚºÞZoÛ{Ÿë.ßzë­uÖYY'ÿþ÷þ¿ÿÛßÿÑ0÷iFóüT,NƈVðyI2×—ä<9¹ÀMH|&˜HóX€TgÏ3ÜÀ wÓüÙ¾^ðÁlhœ³^ÃÜh´LPí'–(Ò\ë}–†ì ]¶|ùŠ~yÛ×××'VñÇ?>›¤|žÈg1ú!Oˆ%‘l½Šøq>ÅÂ1?l¶ ÛŒmÁ>ÃÞÆü±­Ø6l €b;°u ›áØ+˜6›‰}Œ-B€bî˜û+-†ö`Zô´›nKÜŒn¿¸ =P•\T@ñ¦ÂႚL°“E©p¬EiÓ ½…°Ñ†§Ž*Q˜ÁI8Ã1vþLëØ¼“¶¤m*û‰¼µgpåÆ]i›Øžä©<'¹ÞIëz»Ÿ¸A;™ÇÜ ¥q±1QâOÀf‚ZþÓR¸ ¾ùóc¸ô¢ìRb?;fÈ¿õC@ŠcÞ]G- ¡ß]µ÷[8¾>vëÇs£2mpw¹Ð–݇ªz:íOæ0AîTQ»s»´¨(SáˆÖ @EMÆá D‘Uð?ŽZ¬h£,¸ ïOÌþñNƒ‹ÎË/òû8Œ½Çy¶mó¶‚P)7ŒwïëiÄ÷§×Rs(zàº÷ù è(ñ Mp޽e„o´yÁ™ç0²ÈG2'¯ÐZÞ¬ÑTË/kr|•òPMšÎ›‘% ¯ã _` h”oµ °Â¿"»!¯ª Ø Èûÿ´'éWíp„O?°0]¶áGô - ÷àük ”ûl{µ‡'0Õa`ÌêðÆÿŸöâNK­Ô2]½ªNY«­„£Élç0¼Bs´LªÍ•²¥jmÁþX._£Î'<ɺç½=yÖÜt#ß'Ó™bºšÝUXo~°Ý7àhâo|=eHi–ƒVhPܧ;,}‰l…Im<ÐMðéíÔ½²w4¶÷ÀEÀ‚3î]ýñJœs‰CqÚ¥¥ªâÜV¦^UŒÄÑ^û™k—öop°ítOò5´¹¯ƒö˸GõR á¶ú!jVTð²"ù6uû {FKv§ºœýæÎã’Fo~¼L)D˜ôóØ âžòâŸC8uE†9dÊŸà6ý‘t>ªÊ(Üpð@¥8cp—ÿ.Ѿyâökø½+*]÷‘ö…¨„WˆÍ©AwÎøœlºsÕ0’»4ØvIyÀ¡‚ª‚PÆ&ƒÞqä0(;T~ˆ°Q:Þ§1äšÃ໓Lï3t¸>µœ±YW²ìT¬ÐÔ*¨ ²æž¦ç9ÉS÷™ ᮢ°Ò•²¹V¬%ËCñ¹Uꆈºï·¨Š7à°®\WÊѦuzç‘+Ä» 3ë¹pÙäï‹t8:SN/éÐ>m½l2ŽX6*Uˆ×Yä€ru*TÌ·y}Üò]§WÇ“õ?C!Â0˜$`“š¡ÔEåRnâ=û€?áw1ôû˃¦±ËlÆç! í²3óz£ªÕ’Ùâ•“«Ír ¨Ì¯Ó «ÁQ&áàlv[¬9ÑZ ¢Aˆ*.‹`8"äü˜¤¹ÒÆŒ–V³¹•]Ôêaí3}Õ—̦ŠÝÁ{ƒbäáóöÇw\¾} .¯æ úìkÐμûãè [Ý¥jTOˆwiË @ÐäÌ_»Ü{ÃC^[JYÀPUf=¢?äm£¹p®WuÆÀW¨%ÞƒZÈ KÍÞ¯a ¡Ì†çŽ.ÍÖ# èË •U¡»÷}Ê«4¿X4,©Òì×Bh³á!Šª¨¨KXÞ¹|€vgž@¢è?ÃŒ£‡eÈ~–OðÆÂQm¥¼ÃšìÛN_ ï˺€.ÆŸÿ—Ã…+þ“bmÙ—Ä q>Õc: ˆ¿ŸþˆzòÚ¾~i·¡ éÙE¼8ÁDÕvÿI͆§teE¥SÔª©ì)A]> À5ˆ‘ð³ÉµÞi»ÓC’%€¥êReušE]š‘T–ï:;ëÚœ6»©Ãq~B¾åÝ4ÖÔ8ZM´Q!~B]“ Ä@¡«„ÿ$ö…ÿáFò¡3hslÚ@,Úr ¾6¦lèá˜zšNbä¸ ‰S”ä!jL·Z›Úòvž…g0ì~`WzL72u ØDP˽ —<¼Üyc„=…º«ï÷y¡=ºÉúÈõd 3¤+¬íBÍ^ôtQ É¿Ëéˆ8':ì £Üa°V×è­m#Ìn°áªÃ‘ú#8Á"ÅááÀnúvFßä:wnp´4„ƒ‹¼?«S=úAŸþxm§y¸×r €öœQîTÁ}°Ô g;i$z3y[#…`í”\ÎéÐ_ð1½è´²3¹;îøŽ–ÍèŒ –.¢ù7ûÉé ;—öWð¸Ð=|— ~‚|fYoi}­Édµ×8Á ÐÖ°é_jQ.¡Ã=á_Ðà€±GiOÇÝž’aLêþKõüþ#ÇÒßpÐ]ÖX[g04TÔ!e¯Q×d2 yHÙ›fGbÓ¾ÝÛd¼hNlòDð)ñ~2RC ´Áê£ðtïóy¢á*€©ð¾A¿ÎzšFí_€‹œ¾ü/Ô¿±©;tÆ—L:ìkÄç4ƒ,¸ÇÄ‚ÑzýÃ+Ÿ+S¬ìfIu"ºÖ1J^šXÈOTîÄ{»` .±Ã{Ùy¯º³â›Ûž@Þå—sÏraØ—LniF0ƒú:£µÆ©4êÚ‘ªŽ6tu¶Zú@8) í0Új«Ñ8GŠªó‰JM…NˆÆÚÚÆæôú!_)Ïà¨TùjEr\¬DÆD.E_µaénKÄh"‡ñ óO"悸ÆÔaÁ˜üø± eß\ÔšÔ«J¿¤º‚lÃÚ_/ülÉkÉiàdX ›õSY¦‘k™W‘+¸ù 9rNvzJ›’úÞsŽ\å L÷&0¿É³f‚x ; —d 3v¨¶!jàzƺ­öQ#ç¹o[3€: «Ð„ã¾L"Ö¿”‡ñ3cc-HNYùþ*륹88Ÿkå›Å úH°¦nÝCx¿ۊ8ÓkΤhè¶ýú»ÉÚ‘›¬Ýë²Æ?LÖ‹ÖÂdÃ¥‡¹%Y®ü 2’ìd"ãÌ·Hí‹Ã!iMvU¨ 7á;ÉF¯3OHñl>Ùˆ¬®ây0~jÚS³™°½Ù±)ÑüÔ}`?ˆ¯i‘´ NHÿ–çò½IÛ…`'±öÃí‹(|ñ×pîfv¢ê"¥ðè¢7 ‹¾”qéæjè9gtæuç˜9Âp …µP³mÞo5Å·Qâì…ã·^óù’m¯òp‘ßF~ftÝ/ø Þ`ö9ÏöÿÝ5(Dx·®^ 2ê`ž\A­¦æ{“Iqøÿ¡'©‡£KMÈoÞÂo\ý•ZQ'«H9,p@­É,”¸‚Ìv<²<¡%qð9î´ßÐþ‘S-ÿWyšJŸ%ãj¥®• 6\öÒžÏ>žê™lÙâ_Æ¡ÜõÌatuä+ÌsÃÎú~$»–D?%´@®Q«j­H«p%ªyÑ ÞZç–¾Ã-9›`ö›ÁþŒíAãÖe>þ¯ûÅî£TŠÃâbM±²†•W¥5 +qFÇÐigCÿ¼SÍÉŸr¨TWé܃r׃ —æ–f5N Œ®Ù5±îOp/Ùe¿W_¡˜ÕF•Ф..ª(0ª«3MPë²tjjîäoj1¹M¸2PÁÆJƒ±¤òHñ!Ë4¡,üRN³¸eõêälW\@A%rDz°ÖUž,FÍüjV™¦í=¸k²Ëe¯“[á’É­HnÑsÐ…¯Ó~€¯»A:åÎüª­{|A »âxqB²Ij«ª8RUËVG¤‹¢ÓˆQò“'󒬢Ž«µ£Cdå#ª®ìOî"ÿËéÕ÷Ät~Œdlp¢Œä2)~EY­q 8;8eÏ®ë¯oºÝzò p‰øfûÉ5K6|Ò5ÅÞž)Êá§ÄÄIÃ@ØÑ¾ýDⱔ˙—À0f¾vÙ˜R­lTŒœ,›¡ð⼟ºéª¢\‡&i’yÇ=ë±Úžº‹ÍOË+nד•ÌðáÌÐK vuuò÷GH"âÓÙyÚ" QŒºÝÌo÷Þ^ý-å²38ÕolúºÝê¾ÑÄAü¼†Èنș¬=P Èãe% ) Ÿ©|µP:ó;ßÚdùùD7îkM»  žèÇÑ»ùîM«KÝ•Iv8i–ñÈ| 17˜ f¢H”ijŠ:hS 5žfÝ7µ_iqTy÷×ÚŒ¦æ&»Á‰´ýŒðä>+ײ«vØ üäq¤ Q ŽˆitZ›ÍÍúÂRµ‰­©.,•ÄÀÝß=_,årì=ñ!¼ØÎÊC¹‡2\— ¾6îVG-g:J Åõu޶z{÷Õª¿¸À"ÙÝ ç…æôòýåD~SÔ¼Pz"Gï´5¾"bŠ 4ˆ#b|ÙÖ=Îÿƒ)iÖêr1ò"dÂ)ª[G­:K[ᾓÔÅ=3Œ¤Â7é=Ó¾ÚS2cÆÃ’31ì¿{^r endstream endobj 264 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F105 26 0 R >> /XObject << /Im11 260 0 R >> /ProcSet [ /PDF /Text ] >> endobj 276 0 obj << /Length 3057 /Filter /FlateDecode >> stream xÚ¥ZYoÇ~ׯ˜·ìÚVß=#¢ÈøA †e—”6!EZ\Já¿OUõ=Ó³»¤!¬83}U×ùUu¿>{ñê#ϼ•v8»F˼փõ’q决íðëêl½Ñ~õi-íêr½‘ίvð‡¯>¯þ|…¦/Ø4®îàãî+üw ¿=¾¤¾võ1Œ¾^ NÍ·k%`}üïçð»ÓÜ┸ÀõchÇ©¾Ñz½Ç¡øír­-z¿?¯7Êiú^“;¡)laOcd¤þú*¬ûž¾þí쟯~Ü #ðÅ*ä‹SÚ<°dûøï»/´±ÝÍþ?¿¾ƒlkF7LµŠ£Nca CGNûÅ=nÃÚS²o"K ·Ã†Ã 4øb­p¬:l”åL8=l„`Þ˜°^µ 2' K À,pDÓ“rÿšþ» ¯¾®EéÿÆ_ÁãCY; 9Ëë>̵ÄG¡5­®ø¸}¸üüù¼Ã5 ÂÔ\c@ U«Ÿ ŸŒÎ*Z1¡Æeaí>wÖ3Š)ëÓ Âô-îï‚8n’lاN*\«zÛ5©ØcàGäs#B²Q=O±6šk&„m~ é£<ôQ1Að`4’ù>díRQW¶Å-Ø`§qÁZ¿ñ}Á‹àš3ý/óRyÊ¢ÛÎ*¡™ãYƒ€¯ ý·wû¬ûÇž± ð|Y»¸ÐEâ Q÷I¤^•…EÑx¢9¼ç\F[W›h¥Î0êÙí¦–R1'ÖUoÁŒxê¶8s6ó=éö²QÆ%»‡¯Â.m1ì¼3cZùK:\6Ho‡þ÷%4XMJ•¥)Itk4:®#è÷@<åãcXò‡e[¿@þü7úzZ«ã´±ò.è&| ZOK¶0D'Œ~ªþ/r´¸dÒ™VlÛµ¶D}§$xͧ÷zîs\÷…š A6ïBéÆG+±¨C‘{Ñn—HWr:_Ê«KŠ?RDÓ•o£•Z½]£ i¢ŠƒA¼†x©DÚo~'/qžïQnIÄå1üVœ0Ç6v‡Ñ®`)ÒzHä[²SU‡9/+¾ˆ1´…=Ñ{`=r¢É<©ãmä=žàQ©_4*x~®G®*¶pÌ+¶ü#ê/–ܯæ6ª¹™éƒæî˜>Ð8Œê…14”ù!q©z¸æ]½¡}´Ü€°yIûTá™mš59Y\8"CìÙ”†4Ü£|3X¾ŒµV£!ÈøºJ!Sžf£U‰ÄˆñÓð…½ŠŽ>ÚñEØÿ.–3hýdc¥ Ù€[°}NS6 æÆ»ÕëB`ÙU‰´8dOZ0÷_Zj¦]N§ÞÛú…ÜÖô¼à¼œ§‘€LK¹…jm«öÙÏgÖÁûqõK ö€.’? Q65¼×Š"€ÄGÐ}`R2­Zru“Cû.5¼/”ªlè%Æ™46©ÂlÚƒ 57nS«SX²Ñ°·•O¤#Íêä2+¢ŽrV†pŽ™qÝ>ôê:Z3'e[Šº‰¹SVãXMÐÊA0µ­7¸©b%ªpJ :D~ßua©åLI7cñááz¿ësÂ8Ƶ;Ì »´ÝÓìãî–¬çÅ÷g/°"Ã1Œ’ðÒifÅpqóâ÷Ü„ÿ÷>¼z{#äðæöÅ¿à_jÛĉ6e¦×³z½ä€ˆ¸¤‘ÌúÃf { f 倨ÿ^[$ìõ‰ªœ Ñ ¦Âïï3ìÝA†…4 rPÕTÌ‹Þ!‚§\ö(€?·õ)Z(§¨Ðœë© çàÚž[ÃëZ"•±õEøž]\(ja™§=zÌPs>‡,ÕwRRâf2á[aª‰²œqî¥2:²œÂßÄI_&.zêä AXÜŽ¨†¿þƇ-|ÂD´oÔëf°ÌÓ1Çõðè1)«à¾b¢“Œ»A ’Ò¦Ó‰()ñ,Šý€×XeÚÇŒã?=ßÀ´•CÕé/e®ÒË3©²Ü^çiÊb#Óã ÀÂ\:iZôgâ’–ªëñÈ:F¼d%ªNXÿ1H¨„ONìùä äjÿ…t½wžòùQ,ú3vÏ5²xWSU«b‚†ÂÏà?ègGqjª Ús³Ÿ®ÖV¤®J`~Yóipå?@†X"'õœi±êe*ê…rmFk¹,4ŠU qâ©€@;WòÞÅÃ$Y‡çÙóIÌX8úhëËY[¹…óÐçt8e{U°*ì%•®ù6ry¢Þò&ýÃ×£¤ó§œä2Ç;¤ÞG ÜÄ£ ®šóÕÚGI­˜1%Nõ̼V%Ö›D1á²Ó¸ìz^UÍL€[ª#¹±ôOæ Û%¯¾ôŸjíЕŽà`Ú›Àz,ÇpÑAŠPú઱ÉPÂpœ™©Aw*ïer­ =–“£mê³Pئc)^P•‘³'N@›2Uzý{Êzvå8n[÷•5=•Mö.+(Ï´Yp0wÛóýeÿ–‚(…Êj±‡S®Ë]ÎdÁFçJ-AÓMIã:—ÃC84倆ý$C~ÊI w’ÒŸécBÃìÔ –xêÙ^©Þ’ûŠŸèØrâ²åüÊ~ÛÅ5ŽWé©ôUñ †Æ0;¹™“ÏGù½(,gH_'nBô­Ò)ÐØûãû,!¦”æzG'¦¸‘Iáçq©àfÀÕÚ·…†OG%À‡câ±kòü«oÆègæäÏ˼ԩ¶alf÷Ë´%‡«ÆËpÔ>—çH)zÙ€ ×7Ù@?&ƒo“di}A¬#‰¯±¬1½­R~{AšqEú^ª.dÚ<⦪kÊkÄÙŒ´ÖQ|€h tŒþÚÛ.ä€$7–I×ä>í’v* Òò„´ÌÎÒ²VP$m¨ùt(+O¦†ýK„÷¦+G["BÇA…(¥“°õ™-8ÇÄSÎs„äm^#ã[òûœóûœ?Ñï‡9Ϊž0ÑÌfhöû@ÖâÉ vú\„ÖïVL (ÏÖX`HϾVÖ K=÷…A·ýû’Y.NÌ{7©ûµÉÂ’ÌËzþC¥#JÑž)9/4h5É诛”>"éꇼ—ÚA_ø9K\é9;¦8«'•r|Ÿ‰?.FtZ6^ÝQ"^ÕRá&VŽ÷é˜lrëV®ËkÝ\yÂ…fWR Ëé±›ŒÏx6ºŽs<‡äÉö¢Æº1`:2w|Û3@µ9WŠEÌŒuZW:vû6Ä›ªàyd3Ô83yÊ/mï•¶aäl {T)!o蘆·“C±dFsë¡ÜdŠ" ³#† A7ëˆG™Tü?Å3™º endstream endobj 275 0 obj << /Type /Page /Contents 276 0 R /Resources 274 0 R /MediaBox [0 0 612 792] /Parent 253 0 R >> endobj 273 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/primalpivcalls.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 277 0 R /BBox [0 0 447 175] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 278 0 R >>/Font << /R8 279 0 R>> >> /Length 280 0 R /Filter /FlateDecode >> stream xœ•TMoÓ@½ï¯Øáag¿÷ $„Di}«2¶›¦ãÔq€þ{fwí$ªÚ4([oÞ̾7o.¹ˆ¿ñYµìÝ¥ã‹-K(¿ü<¾ô öÀ0¿ªåï ¢û7,O@.Á £÷œs¼hÙ¬~ü¹é—m¹Ú,wÃÛ⎡T`Œãs'À[Ë‹šÍ2e·©Ë¡‰¦=x ©J3n†¾\çnÚ)^|Mø¯„¿¡éAik¦†ºY4ën7LÓcÓQm™Æ 6ì§eÏL+ëzè¨Ú7wy `EÔ·»Õ°ŒçÍ¥ t˜m«rý©ë/¨øm7|(×õ6ŠÅMßµÝÐ\•ëæ"ú£øÂ>ì;Ó¼žÿa‚t“gÉ[&ˆ°GVìŠ)=˜ˆéÌR:ú°G"ëì…‰:&©œI ’»ªù{}σ`$1ShÛæXÒŽ^0š[¤s'-“‡ ù-(-H+)< ÞMZ螌±: Ê(äsJ׌éVu7Ü>nšþ8wåÖËþ¹ê”qu{O ¼eÒömÜuò₊îP;´œèå)ÖúÎc)å@äŒÉ‘¤$m@rF,ú HË"øLzµû®ã ¿H’BÚÓ×ð4I{ºtÒ¼")~Eæ’£¿ºÒ'9çø?¾í/“ŽB|A1ÿKÃ'w endstream endobj 277 0 obj << /Producer (GPL Ghostscript 8.71) /CreationDate (D:20101231111147-08'00') /ModDate (D:20101231111147-08'00') /Title (/cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/primpivcalls.epsu) /Creator (IslandDraw for lou) >> endobj 278 0 obj << /Type /ExtGState /OPM 1 >> endobj 279 0 obj << /BaseFont /DWXUOL#2BBookman-Light /FontDescriptor 281 0 R /Type /Font /FirstChar 67 /LastChar 121 /Widths [ 740 0 0 640 0 0 0 0 0 0 0 0 800 620 0 0 660 0 0 0 0 0 0 0 0 0 0 0 500 0 580 620 520 620 520 320 540 660 300 300 620 300 940 660 560 620 0 440 520 380 680 520 0 560 540] /Encoding /WinAnsiEncoding /Subtype /Type1 >> endobj 280 0 obj 516 endobj 281 0 obj << /Type /FontDescriptor /FontName /DWXUOL#2BBookman-Light /FontBBox [ -109 -241 928 734] /Flags 32 /Ascent 734 /CapHeight 694 /Descent -241 /ItalicAngle 0 /StemV 139 /MissingWidth 500 /XHeight 563 /CharSet (/C/F/O/P/S/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/underscore/v/x/y) /FontFile3 282 0 R >> endobj 282 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3252 >> stream xœV TSWº>È9U •4c"5aFm±hµÕ±u´ÓVDˆ¼$Þ„BHÜ¢€"$@A!á- Šˆ¢Ž`íLÎLÛ[ëVgÚµî=¡Ú×\ïºë®••œµ³÷¿Ï÷ýï£aî 0æ½U,Îñ³×„ Ò3d®•5¤/|m¹Ì ÑPÙ“ ³¹˰ІB/àé<Ý[^{ùex{14¼ _ÁÜh4hK”¹®~þ‘û¢V¬þçÊÛ›6mòKR>ûÇo[ªTží÷:õ OŠ%¢ÔlÙf¿@j·P(HöK*%R?~JJjŠëؾ05Ëo»@(HÄr?ÿÀU~ï¬[÷öêë—TD¿§ïïê7à¹% Öe‹%¹Û¥²<9_‘¤LNIݶ'=C‘™%%`Ønl¶Û‹E`o`û±Hì…mÅb°@,Û†aÛ±uØìm,Û‰…`°]X(†…cbŠ?ÌÓb¿§m¥M-ر`Òm§Ûq÷Eî îÿåqÄã[z }Ä/~„î%b¡×£ -*]4ç©òtz©½Ž’Þ³þÀJ®²*œÙ&¸`f–0¦!ŸT2ô0UfyD9!ÂÛ*/”`7©p°_)KÐåV²D°ÕŠçV%T+Íàœa¿>Ñ1î{ÉšÂE…ÿËÎ;ûFÖ|°'7tÇ›¼\2Hn¤õ=†ýÝ ,a0ir?Aü"PÀ·þp\ùàôŸ”M¥ søçƒ;ÞÄ‘dæ½±÷Ð2Ĉú`ýÚ€¾ðÕñ;_r½gÅN:igáB·Y¯Ù ÌLºœ¿Çnü%`okÂw†‡d®kt 7!2_†ømNb[vb~^¦”—"‹a ОèsÎIgL ñS£Ú9ØÄž[†ƒMÅò(mnKOwá™G£«µi6ŒÂG@—ª%Ç ¨QÔF]pDH×ñÊ•¥"S¬ÄN¸ŽÎV›êë Æ½¾ïøY_覓¾Znkdy“M?ÖÑ¥»Ððg7ò]2)¦kÒ» €½òW»6…žIû^Â…¯f/6ËA;*"ykX¸Å‘ÆQ¶hL‡ú ½m÷°ÓO% šlèy÷Ö7'nhá"n·´FuL]ÍVÔ©š‰83d›øl*n‹C•ù uù&;í3np†"-‡!©ô#èå„ý«Ê‰Ì/Ð]Äê…¶üöÂ^M˜ÃæÞs’V– EV,D´ôôrá\Ž{Ïn)q¦ü˜Çùv4R‰,"³~C¬ôŸ²DÒx”*¿rKÙsY•⌑=Á{²c}CÅÝŸqá×®]y¿Ö=·+1'Äæ‹°¿hü\jûòAÑLä^ vÝe"x¾¼¾ÜjÙ E_g?Zj?BXQ…whõjs4\?ÇdMÐáøƒeÂÚyî$Û†’D¸SÛX „@S^PVDÅüC‰ƒç$×úô<ÞüŠ((ûIö1‘g±îp‚¹‰÷Å‚`"p2êë›#-ã79ŒÓ‘ÆnÙ„ï°×wXí¬‚"µ®Èòdi“V_ÙÎ0W »’Ìi-Q ñ Dª’ †ý \ÀÏX*mÍoï0›;8‡;<:æñß:2ösÐ1wÆþ|yŒo\J¿óæga@Õ1—Ÿbþ Ú˜_}3vÑÚ4ÕÀ¶¢tÞ§;^ €¶¼¤¬tckË}mî¨a}}mçѺ#,+:â‚Û¬êå×Ð,Ä@ËyÑ9…qZ¶ʬxiUbMa0±A]­þdý#èκ‡|jJ©€– *mœ–A«<¡¬O¸H5Vâ$œ´/gàEjÏò™Éôè|YÙŽRBˆ·VŽéN*Á;칞q¼íÊTŒ£àUŸ¿xô= €ËWÿ±·ÇæGEp#Ý/\h¹ˆ¿^ù5zùìÚìÉ3ö¹ÆC*›œeRhûÿÊD‹áåŠÚÃ5ó6œ¨¦r{Hˆhë5Æx¸cn#+wo^dFš°5@SSÜkÑÔä"[*ËIÌìmê¶s»l-=öÏáG䛬¶ñ¶Ö±¢ IDøEA Ä@©«DÄO}IÍ÷Ê¿¹‘èÃŒJÊ ÄŠíwà+ãu#Æ®Ù9Ðv £ç„ÜÃÙ­y­m]vywº…“ÜyP¿‚=yü^|Îv°@«®„oÜ¿Ù;=Ê™gŽj™w>Ô}T‘9ÈÍd3²/º‘º-^Myˆa-ÁÝ\ЫÃÀQw®±×|aÈr8AwÑo°Ö ÂŃ4’YÌôñ¢0° DõJnõè΂ßðýð•âÞÌþäsáíAÔ;.ó_VŸ >ÏuD_Ëý=ø ¸Ñá+} ÌÚ¡šæÆ––N›a\ý¹ÆXj åVÔ¸8ý“Ö‘¹”Þ‘þ³!LÖ£µ(ñà[è-Jß@ìüôwäê©ÏÀLB«à›ˆÏ©ŒcÂ×ÿ‚¼P$ ^ƒ^B+ÑëoAO¸†ÎP?+¹ÞðSJR~e‡Igh?̸ý@F3ѽ*ǽ‡vÿïqÐ_ÛÚØ¤×O4QbÐz…¾„Ò¶V“ÙžÖ»7D–žÈMÊ<”¶ßͤ0`”|4œWžŠMWÅy Ó²„ñD £?aòjòë47™: ƒÅ¦ŠnjtŽûz;:0. G£zLÖÆJ8ÁÑà ¥ÄI퉊:@´66¶žÊkÎ Šåù\•ªT£ÌL6Ȫ…€`̪}íÿ½–ƒci\Æ,8O(<¸$·æ\PŒ¹? ³b—‚ŒŽŒ!åù¼)ÕÇ”7ØøÝ–’ö"#7ß’¦ª›²€Üȼe_Í+M-’s 󲊀ؖ1|ÿîàè-.éîÜQæí’NH²CrI(?\B¾e`¼¿Ó6fâþh78©LÃzJÆx/@›_XUøÄøx;5|.w ‚¹¨à…Õ8¸®î˜ÅÆÔºx°„åìÜGxËO ŒzùÌ@/D£zù»§N*\©;à21¦gNêyÓbÅ¥U¼êW|Oö2)¯ž)°HìÝ‹Ý.éÈt!¤š%Èßqfš|&“8Ug¯‘­”OI§«Ò=ßvGì3|@9­…IY‰‚œXRšùí’.áEéóáRë¡´[vßßµá¯ÿ. ⤩&‘Ò£n<-q*ÿsj*¯ƒÞTõ–ô™¹"gŒaíh±•õf[J#®Þ8wçþçÑ~ŸplõhTæ˜]ôõ7Ðëçó ^äÜà±+dòZQª2 ®‘·˜Ô5…€È•+óÒÏäÞm² p‡ûô=àS‚AÆÎîýŸÈÀ(¶w˜\ ŸÀi¦cðÚ˜Ãô.ý3fãýÍ ª²¹­C¯±ÈŒdüÿP 9U‰ÕÊ6ÊÍÞÁ§o}‡V7ÉNä"68¤Ñ**%®Mf<µ=mäDŽӾ§îŸ¯µŸºóá d<ÔuÒhÅeÏRìýäÃùb‘R¦û3Pîú,aôMäKÌk›‡)5±¤rQ6¤år­F¥Ôè²uJW Ãó†÷‹˜óïGç…r$WSÍ ÄåïŠ wn ð7ðÏ—JY%>¦=Vl`—ÔëZ€…€'qFÏù+ƒÆaß˧2·rQŽ D¯Lî: ·âò*^MA« YÖ^¥­vßMV\ŽóM¤Ò·™è ï/¨öô¼_íé…aÿ ÄÞB endstream endobj 274 0 obj << /Font << /F52 5 0 R /F105 26 0 R /F47 4 0 R /F109 37 0 R /F107 41 0 R /F118 40 0 R >> /XObject << /Im12 273 0 R >> /ProcSet [ /PDF /Text ] >> endobj 285 0 obj << /Length 3059 /Filter /FlateDecode >> stream xÚ½ioÇõ»~Q  ˜“¹¢# ÜZ(PÄA!J²Ëš²ë° ôÇ÷½7ÇÎ,‡Ë•ÕôƒD.çí¼ûœyqzòíF. VÚÅéÛ…“ $ãÊ-N/¿,·«µäË+±| ×+-–á§°¼‚dz•Ë;ø²½^I Pk%ñWA/\ÄG7ËK\¿Xi»¼_)±<_)›# sü~ /Ýâò})›¥èùß¼¡Ý+üÃVr¹ç/«_OþöGÁÍÂkV!kRjfà+œÝÜ^Þß\œÝ]FØF Ú3!e†|7¾GæoWB B±Ëw‘,$â_HÄ2iqO’Åÿvo”¶æš$N_ßHíàIÃ?AŸkÍõò{øƒ¤€ÅZ:ɬ7‹µ,9ˆT_ l‘á£Ä€ÿ$<‘N"•ÏzÂ3ŠYéçÈÎVdü mc·C”H§LšÚ!Þ 'QÍ&-¨¨ŒÄ€«uÈ&RÎðM…‡@k¡ãs£1xþ€"ºDz>¯ M¨ÁíÃ*ªãŽO k·ˆâ•ÈñZpÍHg­ X˜Ž¼‹Jgè aùz5 ñŸˆp$R¾¨_eBu$ž_v„hƒhtï"ÔßWNgÉÄU|©˜„|_qŒÇ0‘L¦¦•·R¼]ëB©Ö®).ÍR#ÎSc²ÊP‘,¬cÁsû<ÀXüÝ#ŒeT²L‡ÄÚ¿;Ì;& ôU@µ½ g‘Ç›•WI²;\cƒ¡7··ñÕª0PE?ÄÅCA×ZyÅ]Bç%ýÁ¾7ôÅæ•¤ •¥ ÂñÀ9H- %@Æ™ðU˜-@z™ÙA4¢yiSEféé­~TS°R¢¾s›SpDvEHõÎ2ÛJûCÁ3\ öÃJvI—ÏÓcŠVôÛö6~Æ­J@'ÇÛÏ2z|qfìÂ=›„QèY}¼ öĶ£=P$‡ÛèiÌž±âoCÄ6n¹I9 ~?¼«ì pQt"¬fÒë™Ä:‘!¥RK‰P6‘ž_Á3F¯——IÄçÈÄXöÑ5lÚd“ hE÷„¸”/Ù,b–†Ö(®“mÖüþ§”mØ3šä:ÖKŽ,•X) Ô sGø("1Ó|5”aˆ#—siÃ(v åÓÀr´òX£ÙPÜd› /KÕËÉ £ÙÁó5!•ÜŒ§º«µv‚Tvš°Ð1>Í-3Òd“ºøòÏ›ôÊŠ/ðºÝöCÏSÂæ—¶·QuÚæµhU—£Æ.yGrˆTg\ǯ9Ò¼_•2l\…L¹Ù ¿n—v(?îV¹@WÙ£ÈJ9Ñ …ëºf¸Â…l-i¸Î¦| †("’ú߯¯MÒƒçòæÖ@{Lw¼âõƒdÆ™ÉúÁ@MË[¢^ùàT,t±"m?éÓ¾ =ÏÔ>vÁ¦jöCÉ>¢«ä@I<䛸Põoñ1Ñ%SUqWë,–Î0\ë„·Þ K% fدæKó±ôJPÎÔ¸]¬2Ȫn¥JE¬ßS•+Æ{’by»/À0•Ú; c¨£süš6*û/~=Gî“m¦Jç}ת´eâˆMÕÕûŽQy&ecTÏèäåéÉo'¸?_ˆ…4†y+¡c Ìr¹8¿:ùåW¾¸€E( ˜ ~ñ‰@¯½òÍv‹×'=y­K7½8 –pnú55äÍ£ô;¦]Cÿ.t‡çëm0N²¨„8Ìì%¬mY8ë³€[µ,@Ìsw ¸]μ 2êB@̯ èmê˜C<¼i#ºõõž•­½á\’{gOûlB#ÀdŸÿ ®5Ä&`è¦w†¤”ëÀCq±aWXÎŒpÙˆfoÑÒ4ˆüª¸[Ubw¼k­¥ÚÚ`³ë(Á|ÏJÁÈj+µJ7V*µê!Fw _çÖ{Õ<„ÜUpß •7‚ÿC(“—Wo—À„,Ô¼ºèÅ¡ˆèEÏ 8³`H4­@ɨ½'gfÐIë¸Ïû„[2¦£¸,XH#êÔ"ôrìÄQöÄïÁß[’Þ=žÃñXíSí5&Ò«•è]Zƒ)•š«‡E1«‹­áT èå)MêZyhÛRmEO¡êL¨)„–yYZÓ<{ë”çÇŠÑGÎ$›ñèæ¼Ö‚s¦Ž9s.L±!T‰Ùϱá‰Ô …=H=èØ’ ÌÀ2ÎWQ/4F / Šô²MíØ@á\ÿgÿè¶lPÒ‚BªÇÑ´xZåƒ{™`À4¡¤4_QùŒI3ŒK(¤4(lŠ0¨`¡ÁŸ¦ ¶‚0 •`ʙɂf?4MÌ lí¬úÿéod­ki= ñ SZ (&޶¹):ÞÖÃK­¥êv(<©Í󞃊Eº&' 1Ú—6ÊÉ ÚFO´ãÊ 5z¸C·Ñ“7gkØŒ2a}F+Н5!¾×NѪÖï!…d5¼%4¥Fænˆ9QFY´Å§hT&â;›U ‹:ä]çŽWc;‰“â`Ûzô’Û˪ÎlŽ#­¬ó*ýUF••ÃüßM ÓË (ÓìZÞîG,”TcQùʦjyXãæ?E¦¦Ó‰Œû,.ÍÍT6òähTzYP£÷^Ú4ÓŸØÄ]ò¯˦7É£Dꨘš~ƒYŽf]2¯#i¹ã° #xzu e‡6©‚š3ÿïEŠiéædéÃY`­£Fk"ö³•ƒ¾OØ…ÒP½|RÿM{yÜ‹Cžn¿•‰$4d+¨w YP^ÄHØPI¥7¾9PX{'‡RÍp­´Stî¹éín ¹¥:þ¦wŠ)J-_òn±3¤É‚p5Ìbü¨þØÃŒ#ÝR,×bÉHXje#jßì9%£]’‘ÕS2‚‰ëù2ún¶ŒüÿXFµvâh»(]°”%ÉöC/”zÿ;Ž×«^hÇË%Yµ ¯c±²½šÌoy‡‰4Ž ë¤ñÈ"÷ÐTR!«£Öš(HS!=ì´ T>µ5UHOÙD„á#7)Ã}ÜæÑâtJ(K@wxjÏ£v=ô^Æ ƒ¦5„þÀµü }ÕQ8Ô‹bÅÔõGL+"ìwnYå8»‘Û‘§vzŒ?’ E‚ hÓ 9…á H‡ƒtjò±~Ê”I)£LÓ?²ú6}f'£QÜ1ÏG#ûf踽«ÎÑCs­Kz•­I–c=éõè0\÷“;.tH¦]Ë×îK—/=,}ÉL¡Ù&zè³N7TãÀd?» †³¬J{ÄžÅÙGTãÓü}וÎårwÊs,y.~Í5—t‡L ¡™’ôí7Âö•Ûß$’p?kÓI»ó5­å4õ¼Ä¼ú]æ¬!æñþ­‚ƒ0"æ:¸™rp¨/ê>½. ½áü•íÇEÈ@†)Úöpfx¾L ©´ån̶º°³ÖRÒ |Ì9{&À|Z+å#ù"–y‡|¨õÈ’­6 âç]ô`cÏjÒ„mIëLÛÆEC+ÕxD_Êhg"ÚMM ª»n.v­ŸÏÕœ˜º„š!L)-D[½­À¾úÂÞAÆ#Ö™§Hæðá*^B©…Õ9NsâÀqZ£J#êºý«ìlÜ€ÊÐöK¹ˆ*tÅ/ê÷»Dc:›åIÐû.vUÍ•¢““”¦!Ûc¶ç½[â:Ø#aìíKÜžL(˜bB!_sÌ¡ƒVÓ)+-Ï<ѫѷ)ö5ýîVðšÎ”ãrÀž‰C¼+·=|;Ay47÷èÉL]z °> endobj 283 0 obj << /Font << /F52 5 0 R /F105 26 0 R /F47 4 0 R /F109 37 0 R /F106 42 0 R /F86 38 0 R /F1 39 0 R /F118 40 0 R >> /ProcSet [ /PDF /Text ] >> endobj 288 0 obj << /Length 3644 /Filter /FlateDecode >> stream xÚ­koãÆñ»…¾…N ÷I2A>$MH WÄhP䂞ߧžl9–}®ÛëïÌìì‹\JTšw&—»³³óžÙÑ7§'Ÿ¿6rÑ×½•vqz½håÂö²nT»8½\üR-Eõ°ÔÕÍr%TWÝÂ+ýkùë響M¿°uߪת¶¶²]¬D­{í–pó:›LÓµÕfѸ o•°EXu+Z?éÏJ‚hm;½u×+7éN:ùîôä· ›…X ³¬uµlûÅÅíÉ/¿6‹KøøÃ¢©Uß-žiê-î àšÅfñÓÉ_O¾Aº Bq?„Õ*3¤Nu¥TX‰®©þY8FW -GÇ0E¨Å îݤWqß”"¶’e`„¨¥ò¾Z®doªÿ” Y›>°èCí¾6­]$}rà>ypv!šº3½dŠ \$Ó¿-®ôäJ8Sk%²¿*"ØÕ½èýy¿ €RÔ„Íyz ¨õÕŽÝTw%bëº Œ þ jóe˜ØèFÐĦ›¯¬ªþÿËêGz~SÀÇ=äõf³\i©ª§¥Õn)Eu…¢z„¯ïqÆß%|SnðtÙ¸—+%×}õâæÃè‹q‰¯–ÒV×~;mpe]:“Êwé™$IÑ™äô™ÐÈlvKa«­Cçž0^Ứ>ây+ 'h‹•nTÝk \uÔ!8ˆð'>¹õ [Y8“ k<Ãz‹Ç¹c㆔lÄBI]­Ýæóœ×2å%nPšŠ!Ó¤÷DRAg¡9ü²Á¥°=1Í¡ƒë7JV÷ŠŸ‡WH’†÷£]Zˆêq}pòy¾Œè `/°´ê­Ô-|·ÄEàNW}M»ÐL¢Ú=ïè D˹ÍR4Ä‹gÂ9Ðä¤w‚ËðL¢spð«s :‚û€ß5àù[1GT=ä­{tçåÕž„ëQFyL^’JQ¾ 6¤¤'iGåv’"¯Øþ|ïH§¤e‰0Ð’êÚ=2³èÂzÎ&"q†ÃNXÇîÎdÈ!˜LŠñá‰I•2gîœÆjK_M287!E³¦ÃÞy½:aÚ$䆸¢ƒ(zCt›Qa¿ÈâÄ(²ðÂ"kœÊ>$bGvN4 B@€Ë•Ó®5蜴ùñI Ú¦:%á ´†CAƒgÌuz•¶ †ä1RY9“"DÎBX’k!‚”À·™ì…™G±×™ x÷ìˆH’M¿¡á0ãÙ©–&e/„ ÝöNçOð¤Ï{¶exêõµ“üúi£3J hÊ™û32aÇÙ‚+žJãÒcÊ+éü(¦´&( oú~ÉŒ|vï·Ë¨O/~—TT¨Ûœ˜@þ÷ž¡€Á8¸qïÁm™{ä´ðÌD;|n‡ {Mi{èµqËæ–Áy<•ÇñW¬}o4¼1™mwÚ,»ê¶ï½Ýȼ*2ÊBœ©Ú#£3 Qiˆ~R¹±žò³ÈC&ˆ ù†Éz¼ÆËN“Þð?&›uœß¡0±ÀájÓ.lXâLÙÙè­SK‡S5žE‘¯%iÀ•^Ô…H”Ýéìv‰²QýÆNÂ/Nô&U'^t”ŽÐß«cvBÇ8.ÖíÂqŽ X¤Lm,çæiš+ª<„]ßavý>•Fߨ1¤½qÇ`ެKã£VÿÇ?:<ÆÒ (H¡¶ÃàkË­Tk=ïB¬ZýåC’ïŒ<§“k˜þžV“ŸuqXKÜÂ?NÆÒOøåð]Wo›FÒwžÛ¼þ< á™Á8ξÿÕ‰åL³êúÊûÜ€`~æÄVÝ¡L82Ñû=s/Q‰ôćšmQE½YF7™}:j‚ "u)¶;¥ým£Æb7ˆ¢9–ÛŒ)ØbúÑýM$¼vDcغE™Í§ˆn ?¤îÅOÎÂÏóàUG±êp£Áï|ÏìĸqÇr`›Ô'xö°4Ÿ’”’’—„¢‹ùG×Ï7‹¸Ž¥Sø €('& ël+Ã!ñzCDyqKCPŒK2Ftû3ŸÉáDOÖŒ°2¨ó€s°fžqpޏ1ÕÏKÛ{ðIœ…²`¿SŽ~ïÆÍËÉ‚ªì¦'¦ó2H[îH"‘­˜¯Ä4{¤ ö°.ب]6óê, ~Ù•ÃîÌÍ#tžÂ±Dnxo6/1ðãˆIaËA»H¢×KWv9nnsý¢LÚó½ߎèn=#G“}¢ô~’ã‡ïÙ>´&‹iñÓY\5úšwupŠîá<û|áç© MM#½Nñ)Ó@é€:{I]eušt^Á­:Ë÷*µ,3Ñ¡'±?ûD—'N&åÞ²ææ]Š’i0˜î¤ÞçRRÉÌÀ(êBª †1¶’I"ü蜉,`“3I÷…«Uþ<ˆnÿÏ£xÝw:e=Ù®‚÷I몤¬×ÒöÑ›5yÜŽß‚Ãhœ4îÜð„,Ñ··irçÒT HŸí`Ä+—[fÞr F޾Eµ§aŸ1Ú4ÎK-w;p„ð~Hë,‹l, ›“s¿ûâÀ‘Uz¶c­×Â-ß1oS²9òà[¦z`ÈqÞì÷@¸Åš8–—­ìˆu8§¥ã¸+Ç™¬Ü‹)žNu~0w¢ÒDÎìK˜buÑ—:3iüIØSN`N¨Ä(á€X›êFgÌ%±qš„ ®c>Ã뢄eJ sÜÞ*†ß*˜4xôSóêüj2–WFL3¬s" a;'YR=ÂäÔÄæø ¢·uÐ/£Ó+³q]òÔð=µ÷Ö°ø<nÝ÷`‹dšÜGJwý¥ˆö2Dâ®4‰_oG5-‰x3·BFø…»#ñQ†Ú¿õèL87IÕLw˜aÈ ÅlïÌ‹ûCeű‚„ô ±³ZY_PñþqÃÃÌvMɢ귲^xµ(¤²©Eó@GF ïA¬å@†¦y¹q@ïc`Â%>Oôl÷`~8'ܦW5ðõÌý9¦ Äë2zÍ Ì‹i̸x¦‹n"æ¦?G#ÆêÂßÍL0Ž‰ì§Šeù%²©E¯ò°~æU²­m/|6ÚÜûXrâÊhzµÇU!λc’áH‘ÖàZ³×¤·ö`ªÇe­÷HQ¾ó¡ߦ ·)äñ#€yàb¼HëPßJ f‡R+¾T6†¨¶­Š]@¦Ö@û´Ub]`‘­Û¾MÛ#’ÂÚ¸ôpÅ7üJÔ¢k÷\3wM!*Go׉êoKÛÍ-ev"Oźì6 _Ë™Y'¦caXÄ È,ÍÅ‘±ô7¤ûæùš)9‚'¡ó=…/þ®±Ô£`ŒÖƒ†˜a³Žèô€Í@ÐЬ“q»¯;Ý¥Ü>KʬþÆIŠÀ“ü&Çñ^tµníøš1¾Äî}7ö}}?íZÄp}´7sàx8q‚ÊÜÉ1û¤´"?Ôx¯ëç¡v; ðú~`úz7"]ha”9¨pdàµØí‹R‡á~Fù«3h™X?A]Ñ¥2œu‡ -ëÎ*nòKûâ'€‡U2o²5û¿Ì¬Ö41§§Od¿rGÊØ?Ëýâ¼¾àt³˜ýú®Üèr¨7‡÷…Ä«öEž¶nIï<è›Ð:ïÚâÒw¸s¤¾ãAkn‰Žénœ j•êð}Ž+£‰ixæv÷x¯,J…÷äÖ4»:¯Ìô ÖŒÅÜh$ÄÍZ'09N“å¶AOÇã0 LÜ»ÁæG ª‚v_× -¤»‹³»×Û‡7´r ‰¬Í_žÿtvw¹+µ<6]Ý •¶ð…Üb¸•”µmÂV÷ù°ñå?.nï {´¦–ájÚuTõ:•!éÈ?cKª{`«ë)œ6W°ëšºïÌEˆÌZ‡ûÐ2ÜljcÔ0é‚,¹«Þ¡É;ÌA¡™SÿÌMœ4Èf þ¦ËmGZØ`Spé¦ù ·+Õ1úÃw}©ÚÓ ÚršpõøëANngœš&ùÉ7˘×1æX8+z¡AVTk¤åL©µy%ÒÌÍ”Z»7CJj¾éJc¼£åîe£De1#¶+¥öðÅ^kçßX бֻúp©âÛZÆQgI“ÞA”[ïJu£à®~ó4ëX¸,ßÉxO„2'•«ÇÈ‘ôH5Cú$Wa}ÖU€ã!Þ •œï†Ånk\1Lª‘[¤"X¼¢’2¢Â&Àÿò˜âæë„ªõÒöÛºÇýwŽ´Í›C£UÁ=1¿ÆÊ+ÓÂæ°¯ ¹èÍ•41tŒ{&CWZˆ¶ÊW fi ¥Ð´%õq Ï¬¾Í ´1ì<^©çÝŒ+°áXáÎѨc.˜‹Í‡šAÜõ”UÑΪ7¾œ¥Øôh=íñqO-DÚöÀj¤"0où}9SrÅ//<âh9£O£«±Í‚pçvçž¹ÎÎýfÛ?Û¶šãW&ªm¸Õï¸`'‘k|߉ adØ¡„ªJz~C­¸™ãZ›6ì¸Ï@°l6y±ñ?‹Õ€{P·fF¿IÓÓo‚¾Óë´˜~¼Øhb[Lãj¨M·W7Üî©ÐßQ‚½æ´îØä"®¹+ç…ûÊœ¢OÏã5:Ð1ÏÎóøZ©¦Ö¶M€½½Ý>^ýtvwõާà½Ô½‘¹Œ)J{d۶ϓѯS{Ô/ŒÒ“ѳQjfo3B9¾OW­w2…©²úÎ:\¯ÆY{é?ïó Q¢Ñ2w““éçþ_/­Š¿•J/~ǯNÿ\(ýÁ–èò&–X£Š*uœ*ùSJ[K¢‡ì릎 †ú{ù÷©ÿ‚ž endstream endobj 287 0 obj << /Type /Page /Contents 288 0 R /Resources 286 0 R /MediaBox [0 0 612 792] /Parent 253 0 R >> endobj 286 0 obj << /Font << /F52 5 0 R /F109 37 0 R /F86 38 0 R /F106 42 0 R /F47 4 0 R /F105 26 0 R >> /ProcSet [ /PDF /Text ] >> endobj 292 0 obj << /Length 1655 /Filter /FlateDecode >> stream xÚ­YYoÛF~÷¯à# ” ÷^æ-iêÂZ¤…‘—¶(d¶ËN,9mþ}çØ]¢D -™×ÌìœßÌnÞß^½¹Ö.ºRÚÊìv“9™ÙFTÚëìv•ýž‹Bä¦(›¦É?Nç x~ç| 7øpWH“?Âͺ(•òùÏáýS¸ÞÓ'!òÝ:¼=ÞþôæÚȬ©+-.[g¥lxÅw@²,Ò‰|û×Z&<>Ò‚RZVYᣋ¢•ð½'á^l˜;P‘q­+e Ï@{‡ÀÀ„Û|?ºöi‚d4aí—à–ƶ‹(b›DuEhÒÀ 7Ã:}[àÞ}c¦ ÜF$_ñ'Õ$÷ïØœ%Óï1¬Í>~†_° Vøž*`v6¿-JÝä¨Ò£…ñ¢jŒáÍtqãZíq„ˆ#ܧ"äF"äË”‡IÐ2ü^‹¤Ò"Ä(:Äm¼‚Êš}µNQWíÃ!I:©z‹Òe˜?’ÅÁ7¯^ °” †}3 ²¢-g†C9ÑM{d¼0 ÈòGmj®Q7¾©TãÀ2ÜG c •&RVA®Ôè®,ü`_Œ1ù‡×AÎ<¡²÷Ìö„®ncCU9ÙŸU[ë”:`Ê|£¬®œŸm“Øt ÷±*E®‚a¬Û|ÄÂ)•W•¬ýQ'¸QÆãÅbäíYl2vX…vX_ ìX}ûk±<€šÖŸ@%€´Òt?âÛTNÊÈL5>ÿVhË€4ø<°|²û‘Y&ŽDË5šG…³€Ë&z„W죂@Hc9nl­>ϦH¥”»C¾ÇH… l¦ å*oc -»éŒ#%br;Ð[³™ïSŽ Ðˆi¡Q# F¾rÇghSÌw(ÄP°N‚u¢æ$ö¦ëç6ڀʩ!’ s '¦*rœJU¥êJ)ÑÉÕÕú¢lõ¢‚Q©Ÿ­èÑa¶Žxž¢©…¬jH÷^ENæ­ð§ÃA^CЉp±¤„çð8Y@s ‘ƒnÏ• ¼üŒ½ê!¥¼äønàù¦U`St‚öß+Ke¶ê6,†má/À>Ì;ô6l£5øÚU’ìë›PÛU¤Ë×x¦i5”+3U:Q‘N\cÙÕ6݉Éúm˜- í¾Ã9í¸&•—£XÑšEÂ/˜WÙ¾Ð{–žDñkÎÔû¨D0|¨«Êï(OUOã;rFð,¥g3†gÓŸ¿ž @x  oWÒø.¼.«£Áipue¤€LG `ô1ü3 ¿Àw®ñD¨L>¡[Ž…cÑQ}Œ)…^:ß¹Úã@:èÜÞö¡ì$<„áL9ÏÃY\ÙÕS™$½Ì÷爫û Ć„u fäpžÊ©EeœþOCϰ€^Gåêé ²¶á.´n0)ÁV„®P˜ â(Óg£M JŒ£8½?âJ\¼k†ŽÍ–”SjÓLž4yâÛ>{P+vJ¶öX¥s-MÉéîL"ŽÛM?ô6ÖD¾£ Ø8¡9{¾rÿÙõµö.Q@ í°ûÚ¼êvqŒ„aÀÅÔ›Nc§Ž;ê4ôh‹ü¾c¾” ÈU·ÉýÑ6¢=‹i£ý^±‡â~*0(hIÛFÅ·{T2$·ÿ=蚊Ïñ€ÊJ«~þ¾*bµ“TZ¯wn3"ûMDß•Ñ[!wÉ´ä¼!€H'wèŽ0†)SkÕïñ‘%[u·Ë19E.»úáö ±¯ÎD&`—µ«, árwõ%}À¿c/ÞÜì„Ê><_ý ÿâ·Å”9ïñ³¿Ù†]jíšLxS¹úlr`¾qrˆü-l:ÿ¾wÌÖ¯”•OLÝãó¼m‘Žœ Ú¶ºC&ÿVˆ)WSËÁS^ :å-K(5¸ÉºîQ/ÏQþç#_"üØ•´Û¦ý döš mü`ØTÂÖ±‡Ÿm+J{‰îó!ÔïÉÝ Ý§Óºõ%[ "Ý]¨yEñ6 0 wòUVMƒI-+ïÚ¯G§Xˆ°œ¾üòþ#ÏÛÝ»—®Ë‡±½¬®D:|›˜ˆÒ.s1k˜ÂÒîXéD­=¾ ÑoõÏã­)õLÉØè┹lMYUQÓmQBkž" hJþ‹ÆG4ûð¿F endstream endobj 291 0 obj << /Type /Page /Contents 292 0 R /Resources 290 0 R /MediaBox [0 0 612 792] /Parent 293 0 R >> endobj 289 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/varmgmtcalls.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 294 0 R /BBox [0 0 350 289] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 295 0 R >>/Font << /R8 296 0 R>> >> /Length 297 0 R /Filter /FlateDecode >> stream xœUÉnÛ@ ½ë+æÖú`vÈÙ Z(‚¢M^Š¢P$'q/‘ùûrF‹eÄKø ƒó†ËããðAH@!ã¯ýóìÃ¥7ë,YÅåçöOu“=dØüo?Å\œOî£ar5Pg¤5Ppb2ÏÞ—Ïò¢žmòzú3¯Ö£É;ãc¥Ä˜È/&eÂ]×U¾ˆ)4Á`ÒɺÈߪٜ¯ÿ¨Ë³¢n ¨ÒÝåõS¾Z^Ý¥N‚·–.ÒÑl1«Wȇ£w½ëïýj³ûzýŸUÅíÅl]Æ$ë^œŽ~O¾dŸ&Ù÷Ì€”R‘xÊH9Î2Úbž‘a´ï-÷ÙW3ˆ¤!prì#mŽEqû—C®ÚêDg¶¬¶¡óž«fî¥4œ%Á„Þó@)¹|b›s )¢ [¼BP'QÖ°t 5¨üêuy‘Õ OFD"°oãšUZub½êDØKET?¯¦4Ýä÷¬ @À×bÌ9Cªà®R’DÉƒÒÆ%Dt¡’ >÷N’ŠÉ5jL˜nZ¸ÛN+”è¼|Ìï—õ Ý öF8i@Ye‡Ê€QÂ3÷2膰ƒ¨Îre¬ân¿‘V´à”o4œN‹|@ª5iß¡Iblî¶$TíNá{P­åJšîmìâqËnòª%Fá‘—mHsŽÆ~mÓœ#çezËÿ¤Ã/•Š/ö Y]Sò²Ü´v¸¾- Ýð¡³Ü»3¢{PƒôŽ †í9Œ¶ç jGãQyŽ-2ŠÛjINЫ‰r>pùéW¾_}åôÅò㨖—‡ðÖÑž ÷1ÞIZKÆy$3œ^Ó=;‹WW«ú û´C¼š@ja˜¸YÉ*(p®·Ä’/‚¤ å¹–ˆâ­Ã›wœ i¯G }IqÃqÿèµìr endstream endobj 294 0 obj << /Producer (GPL Ghostscript 8.71) /CreationDate (D:20101231111148-08'00') /ModDate (D:20101231111148-08'00') /Title (/cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/varmgmt.epsu) /Creator (IslandDraw for lou) >> endobj 295 0 obj << /Type /ExtGState /OPM 1 >> endobj 296 0 obj << /BaseFont /HUGFHA#2BBookman-Light /FontDescriptor 298 0 R /Type /Font /FirstChar 49 /LastChar 121 /Widths [ 620 620 620 0 0 0 0 0 0 0 0 0 0 0 0 0 680 740 0 800 0 0 0 0 0 0 0 600 0 740 0 620 0 0 660 0 0 700 0 0 0 0 0 0 0 0 500 0 580 620 520 620 520 320 0 660 300 300 620 300 940 660 560 620 0 440 520 380 680 520 780 0 540] /Encoding /WinAnsiEncoding /Subtype /Type1 >> endobj 297 0 obj 721 endobj 298 0 obj << /Type /FontDescriptor /FontName /HUGFHA#2BBookman-Light /FontBBox [ -109 -241 928 734] /Flags 32 /Ascent 734 /CapHeight 694 /Descent -241 /ItalicAngle 0 /StemV 139 /MissingWidth 500 /XHeight 494 /CharSet (/A/B/D/L/N/P/S/V/a/b/c/d/e/f/h/i/j/k/l/m/n/o/one/p/r/s/t/three/two/u/underscore/v/w/y) /FontFile3 299 0 R >> endobj 299 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3664 >> stream xœW TSç¶>È9*b%Í“hMèu¸Z´Žu¨¶¶ŠŠ(8 2( 3@ 0&ˆ!¸A „1a $„1 Qf‡ëØ[×õÞ[kíµ}­8=mëèa­÷NP{ëº×·ÞzkeeeýÙgÿgßþ¿ýý Ìv Æ`0¶…1±ÁqËvó#£$Ö•eä\ùÞrž Å Žýºf<Án¶[“:ìmÀÞV÷Þ,Ü}7 ig¢Ôw0#4[…"Y‚5óbïý>K\\–þseå† œCd¯ÿqv ó#ãœÑ?¤á¡(6˜/¶ÛŠ-Ãü1Wl¶ÛŽíÀVb;1wl ¶ Ûy`ë0Oì]ì3Ìcaói81[L‚ýÌh›Â˜’gco£´µ±õ°µãØ1W1‹˜?á1ø5â018uÙÔSÓØÓJ¦¡é4¢ö9öÃ3¸3î;˜ÎÍÄfÆ’*‡ñM Eé§I†–ArÆ?aȤ>›ðp£6§JÜ28ò\;ÒñÈ‚”“ò¢4µ¢ ª ¼¨±ÔØü­*aöQì”å@úÑŒŒ£YÙéª(%!@-FÜ]Yù#11¹°‘ DLjÐÎa|1È%†äž8­#š2†ÊÇf³î `RÆæ3=2£s¼rˆX¼.·?§<öp¨LÈ$AÊ„\§XTcÀòƒ dµpžƒg™†/_hž{ÞåΣRÿ—È»û{—mÞ›°Û•ë0ž FAº|åw ŒŽhÆSôàÙgÈn6+ÑH—ÏÊàõªl6p&æá°!Cê“ rb% HŽlàfEûYSӌˆ°ï!¶ZRì­é/Õ©ëµKj¬­lëœ}žÀ†ýÞ’@Pk©.6Z©Õ qo„¬]íE­áRÄ6šÆ|ƒÊÆL‚•Ø#Õì™~ÒÃQñáqû2>.I×eiTÕÐK8#Yfr£™Ñþ u<³AÍd{xˆCC‚ƒ„ŸÃ6‚ry´-A ?E‹¯J®Eœå÷¹5~D^(ûû¡õÔ<Šå³yõòƒEsÑ»ÃwïñÆ1*Ù€öYÈù†T MÈ‹1Ôül6ë œäcŸ\³WIó¡ËP–Éh>&Bqð–%åü哲zâ åøÙ¨ÞÔ?XÑ´à²ô*ßÂc<éapŸ»|ľ„Ÿm÷pg]?ß®¥fSLõëü«ÛÂéWé#ùßFM¹M³A3Ðöoè Ð(Ž–ÃÝš/.]íza,ì‰çèö«.M” ð¨€ùkOKØÐy¢ªX]Z~F݈_Eõ¹¶úiwÀç°Q²9Ä×ßóãèEà!Åé¹ZUfÜÝ“} Zùd_ÎfýøÿiÊ\¼Í¬¯h‚J(RUeVfT(«€0ÕÕ6óXN¦ØÚ#±R.æŠÊœC!*ÕÑlÅQzçÊ—´ž¿Ê¿¶!ב‰l!Sy¤%¨Ü 8 ?Þµa÷éˆ_D<ônL_F­b8>^¡[<<õ–®L§Ð¦w|f µÝÎÄ,é éN¿ dÿæ7BÍkt<Š×".Ì<)/à$«3«@Kœîn¾pûÚ¡M&n3Ó|‡Þ|ƒ‰ñÓ˜ £ë¥æ#÷pf53èÀ’"úê>þe‚椆Ô6E+\€³µmçD5Nü0IF,¾â®ÿä¡n4§…$«'ì%„“»šÆ0Œùän`þÉäã>™I¹›Ž½¨gõîuÛç?w·°å6}gJT}ª|#*¿bam¼^Б6_Âùº{7­ð–ܧe ã}6e‡úrJsÊ¡ˆº2µéD>åÊ# ”J€[²Ëäµ¾hõÛé-C/ô MçJ8ÍTH,Þ“]‘Pä¤K#Æu/s’#ß³ç£>Uqn‰5e}…úL!,‹Ž——*ªW;}@¿úU§TUpŠÞ´Rm>AGÈcñŽœšäª@´db¶ÓU&š†ÌO)³ÝLäŒ^4^×i‡Ê8*>?§ÒKrURN&]Ì_³,=äj³cë³Q,á’@ílÊ>Cyrd{m IðbÁö»èauou'¯¶§³î<çQ¼ãQvq5‰MM5uF“´%RÏ m:\¶¶ÂÞÄà À€øíàJPKž,D|x½íÎw’úü­³8Ò{´Óc!7’lïvß zjÖRÚc-ðйµòZ_Š» ÍÐzÊTÖ¤)W7 –¯ÚdÀ3óÔiZäOBq¿×¼ê^óʲL¬· wIä^Htzl!¯‹¦U#ÒœF£Ý¯ÌÉiz P<:ÃFï3¯ÁŲκSËŸà*¦¹Ü¢>äR÷˜¬;o1-d1â'üN¦ÕÓx¡ý¶èÎ U©ÞèʈiâÖ‹4´gD&cù{€xiÐÖôÐE¢Rz(¾íˆo|kñùø…ááúx4ñÝxTÊ[å8\–7ñk…ÕáêØñ;÷hðÕ$îA3ÇÐ ŠA7óϯ,‰§š¯™Zôz“IÔM‹ØâŒr›­ê‰Ö:^xFâ4Äï‘5´û‹dfFÚ±µxí/ßL[–ƒ©!1Gøñþpª‚DFÁ øoIhß鉸%ök?Ùµ€Â}‰ælãFd^¥dvíÌê¾KG®%}EëÞ ä0†ìÛ²:Òjy±=~z k fœ>¨ 3Âqñʹ»¿òuþ‚Û\jGM³ŒOUõhÆû“E½Í‚<Æâ¨$Òx…<ùh2H@^(­KÑÊ SHÊ#O'\¨lîäm/k…[‹ôß÷ïÀÀh´wh­=~EwØó¥!‹ö[ =ªãðU•’!óX–TF­ Þs"£BñÿC3Äç)ÕѶð.~çæÏÔÒJIq"¤Ñ—Evr®ÈTÛŒœ oˆè}I8ãzÿ€É^ûWÙ™LŸ" TŠ­OVpÉkŠÆ÷‚Ö*ç¤-²aS®¤¿R“SjT””Wh Ôùmy´ð‚ã'çÁhveªiJœ8ít‘‰„dc÷ãrÍíS#¥àWTÉòœT« øõ³É>” ÐÆø§1$µ~f³ZÉJr*ûR¿¹ê,­Ôúˆ­<*qŽ4[‘)S(ã”2ë;–¿i ¿ñë[ïæ›è¹•+º^»¶Á¡¤]^ëîu>þ¯&ûÍŽ¦SÉò…'³Of”s²J•:Шgµöš«ÏΩÞÂ£â­ø$“Z(3àÒüÀ”šI|° ºÝŠ-Žf„¹>D„}b½í<§5å9»ëde^)X ']/mNÐúƒ±p×ç ðâ*!7¹4­*àDÞ‰¼‚¢(%š%uÑ|‘ <¢.¼SÈ틺z›6ü›ý?ÃÁ ¯S_ìY:¢i(i ¯CZkºÌs,ºIq÷ø¥‹B¹‚¸""êE&C}MCQî)U17SOg?Et7ݸ;ä¿™Ÿž˜Ìû¥úÃQHÉKÈ£¨ŠZ~‘±Ôv©º8)“†ñéôo³!gÒ'7†éž&Íùc&£9÷–J ›8,ú²¢JU(RScå1¹ÑVpð˜üÍéð­øš¼ÔÃ8û2ÐWòÚÃW+$üO$é+€C%1Ñô¿´7ôv¡©G€{b.¼C- /.S>ZxÈÙaÐ74ª•šìb®¬FU•DÏ3·¾òÞ´9bóú¹;·x¢?%¶‘)¸C’–”i‘«–Ù9íáôÎ{û‡ö30ì`þ5ƒ endstream endobj 290 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F109 37 0 R /F105 26 0 R /F156 76 0 R >> /XObject << /Im13 289 0 R >> /ProcSet [ /PDF /Text ] >> endobj 302 0 obj << /Length 3520 /Filter /FlateDecode >> stream xÚÅ[Y·~ׯط̞o6‘'r†aÀŠ# ‚ÕÖD+íZ»²¢üúT‹l²›}%ò°;ÍæU,ÖñU‘ýí«g¿ÿ£´î"tÁ)wñêö¢7]òÂÕ í/^]_üõpsüÛ«?ACa/zhè46”² Ò]ˆØäúë߯o.¯ž~øöÇOÇ“‡ó‡çŸŽð{õ.v¶ª˜$¸Nêûµ„9äáò(Ýá KOP:ÿv<xgcñæèÇ“–=¼£ŸG%÷GåâÓÛ84’Ðù*¶y€@ ‡3‘õÝau G¨¶0«‘‡w8kœK&:`ôÏÔ¨êǤÕc_bã·øïî( ÒåÅû.x!qñ'àc×[}qR¶ BG&¼8žœ:ü ÿõá{zþ±Á8å:Û÷‰qqµÿ“Ì£œ%¾½#ʉ‰ðÎ0­[ìÆ¾ÔoÛòò4™‹Üýö˜÷“w£ìFT`ÒpFHZÚÇ{¤êó¸MQ4ig´•¤ýÌr”Ébù çaÕÜ ¶ûÉ,ÞÆÂrþâddç{ û’nmdù^ÖWÖhbÜ}|¤=xÈÂSŸoSCÅ;L¸‰­3‡‰)Ÿ‹\Îí0úÐIíº“qáð~1ú^ÎRÉ£DÙ6Þ¦S±Ù7ø>¬  ;H‚ÜGuÜ5¢&.·„º^—›€[&êÍŠ¢oÜ!Q¨G<Õ³5ÿJÓd)C¾êùŠõWXÇæ§àÖ¯ÑdÐ8Qœ€Syд»™àßc,§ß‰ÒbÝSÙF%ÑÎõÇXdFMUN² [-.5¾Œ?SóZroE"ÿÐÚžr+T¿u0hª@ˆÉ†Wüx#„b[]¾~ׂýn‰&}Ú˜(IØrqfö“¹æv°Í¿üÄC‘W9gaAÒ0òŸY@  í£!êiÕvîD)Á.MÒ’X%ÎŒL-ªûì^Ea5^“<ßÝÅBvžl¢ÝáüwkË…`y«ÌüŽ™a¼jk)ñ±·ýáºrŽE3wzHKÆíT‡˜¦c§V0(m^ Ù†C  S~Œ‡¶Á!Ù “¡ÔCaw´¬DV2~쟔éœ× ¥CZ Ç~2Ù#¬þ2lnÝ­PM'Ú^>ù™ðÉ÷ôÜD)¾Ó*£”DI¶+Œ°­å!iHâ/ µgÄǦÚR;3F4‘ .éã×8ÄÛáq›]œ’:Øè“æ+µ’öRJß—À†‹œÛî9ÛHSÚN”x¥Õ.œi;ïT)‘óP -M‚ZÑ63¾bQŒêEv$ͽÚÃhnåü¸ºïò2r‹;hYµÑþÿe¢| Ô‚t¹ÒéLÒ½#‡Ýû >áî‰õâãajtÔ37pûÿ—7„A0ÅF^bÓÆÉ(H•Y΃aÌý%ñí]aLÛŽõQÂNÄ Àñäc°žá„ª©¸”’••]ƒº)òl†£;ãFã/¢(TJ˜PÛÎ:'”ÐÎR[yP0n@ÄlÍ‚ÊzY–˜Y€Üúˆö‡×GoQb²HÑóذ.¢S&P+í.Û–.d’% ÿÞGfë*Caì®»'çaí*ÆÅæ#7È;ù[á‰q$BµÃÊþ&{íÌDïÄɆ FD)ÑëÕº3YK1Y²e9¾bÙÆö,¶†_Ø´½XWëÉ)šØoTmfVL.ŠWÁa¸Ùœ ‰> Œ±ÃBåлjñqÆF¸‰5Yƒu+¨òÌß6ò ˆL""CŠŒÜîÊɈ»àÇàS†Ñf(‘7C®Ñ »²'|Ölå@©ÉdH^‹6,Ó)Eñk,îšµ¯m5t¿-#ïûn7¼´g™&ê ºm-ëè ± ÛͳW)ƒ¸–%Ÿåªö]ê\ÎÝç}[ c7¤·f-á’!MŒatÇYÄ—,i½HP —ìVlÁNY—V9'5z—I¥â[Ö›a¢¦ªù¿c»JÃ#­- ‡š=Nž2cü€ôû¨Àç‚ 6òP³Qôy´§(¤å·èÓóÞæÑ†ˆüg ¹Ç¥—ݱŸ|¼ºü˜cÉ×Ð\ö§Ÿž®Ÿ_=5|l>VË*#DÈdñììÚÜÇÇeKÇ;CÕ—U+“ß'×ï²£¹“î7ê°!ØVepÓFNàÚIÚÐÛ&к‘]̺’“TÓ¼œÔ˺ŽÕ`FÞÕùT õôe|>&'ö„M| mß)íþC€à:çJ€“Oà"{#§.ò—Þ:iáZ ‘#o|\€©evbÄj‘ƒX¬Ûã«j"˜áø¸SD©˜¿±9ýß$wÝ6 7³ˆÚìÆ†-6 YĬ[‹KŒš#&¨ßàȰ5š¨”ƒ^E&˜sO¼Co«SÚRt ×e<Ôc ËäV²'ãÌáÇdeôêb6¡*#€”™RFî;Ñ®€S#¾Ÿ…Q“3ø?L„"¨‡¸GøZÐýIbÅM ¹qýºetn‹/5ÎoI.Ylçg|T0t&ºxâGÝpÒ#ǯ9Pp®¹›Ø»Ø€†R5ƒ¼=àG™l†N›³#ÐUnâ„zîsÂØ§OÀfÁjùv¦…ð¥‰yÉH¨€Ýc1n—F¨jëë5hSCqôå8ɰÚ>¶Ó@ËWÁœrƒá¬ñk3+ÏS^$§Ó‘¼•;Ùˆ‡/ùÊËê¸çh\žiËÉN[Uªn:’s&÷ *¯OV‰ªt|åE)í¼|²ŠZ6üM\ÐŽS¤Ç8æeu›à¤zA(?NŸÓŒ©å|4HéBØ@_ká¼íîÂM¢h– F¦07ˆõÌ &Á+C´+5!޾ÄuÉÚB9U&±>Ð `$ß'æß³ªðáéСPŒÆ ­U¬DŽÔoH/@‡D²ËVy!ÿÙˆet§¦ `B§z¿Sþ]×÷Sù×ÁÍ Ô`—$œHmÅÀòì!Ãú®ÂM¬m‰ê©<ˆ‡·ÐrºnÕGë`¶žx#mmIµ¼ƒÐÐ.ÀGe+lWºÐ‚7ÔnØeë;nÊŽÍ#½¶R h]íÛ•¬/óà8ë8]Ùœ®Fw[Ucx˗…À¾‡¸Ýþ?{5¤Nwà‘Ç 4¹Z^n‹K"$ÞÅMí•#‘‡RtGW·ê¤L'´Î?žú,\”‘º6ßbýôF¾¬4%l8á +'<Ô¢°p¡NAAyþÆ]"h†¶š˜l–·(„lÑðy¤ÿ%J>5s ·84ÀÖ/~‚÷ßá³*é..”äËYJPò$ršJpé^L.ªõ65š$#ñeyf®ê+DX]ݯšFßᇃºz>ÆZ“b… =MÛXQß@À2ÆßÌf,.³[L¯äâ[¶çÅnˆ³ÎCèJM†­:ãÇU‚K¦b¹¼ƒå—çU£íÇFÙ£¤«qît¿ãýp :"²œTÊéýV9("´†`íT(n™ûô!:;:Ë`ûãý„¸:ˆô0~J½#–ö+÷œ|ÜöÛN bðéeÊÜjZ,ÖA ñ%[Æž,Dµ'q•zdKé†4äæOjÒ‡.[ÎN8¥Q|!3¸ —ÏRñý\ ÄâÄßÖL2]ÎýÏ©ŽÐc,]Îmýù#†"¨á Ñíiª*Oy°ü9&.äáôÄQ×éºNtånÌr,òôft5+¥¹•3ó¾h|Éà²ÙŒ3¬'†qšÊ¹¹ÚFV öPíúÆ‹ó.ç=œe,Rçdš»Sáýìѵ¯> endobj 300 0 obj << /Font << /F156 76 0 R /F105 26 0 R /F52 5 0 R /F47 4 0 R /F109 37 0 R >> /ProcSet [ /PDF /Text ] >> endobj 305 0 obj << /Length 4145 /Filter /FlateDecode >> stream xÚ­ÙnÇñ]_±oÙ¼ã¾g İ 8¶¬HQ¢½“­|}ªºªÏé¥õ@íLß]÷5úêå‹/¿µjãï”Û¼¼ÙLnðÆlœWƒÐãæåõæ‡íËÝÞøíÛrÛ×»½öjû°Sž¡á¸“žäöj§åönï°ý= ¼ƒ†zľ¼†† r{€¿÷ðwó®Cƒ¥Ux£×<€š`ò¯»½ôÛÛÝ^ ìpÛ74ðzgÜö/y¤>îö>¼—“¸Ê«âè?½üë—ßJá ('£åFÐý?å1QO8Æ ÂO›= ô††ÝÒ° œ0Þ›bЊ³ú#Þ}vŸûæØï>ÓÕ¤œ†ÉMñj¿õ®fá¸go¦aes3I‡{Ëg} «ü(„‚·ß" ¯qµÍÞH7La#9xki‘’HŒa€;Ú4fL¢1þ R–hô‹xK@…&ëÂÀtÅÿú Ð@ÃbØíGgÆÁ¾ gršp>?<ÀAáŽðW’å<í ï|<ÒøW±xꎆvÚp]GÈÕ aŒŽkÐÉx†±‚ Cë­ƒ»@ŒxŠuĈ—–D%ÿR)`2[ãÿ)àŽrµ3ø´×Z«Üˆø{Nâ›:ãuÒÈ$}`Í3„Õ¥7NŸ‰^rq³ýŽ…e:n’‡áÈ·, ÿ°ã6ÄÄ]ÄåRÍm ó01ˆ±L8’%¯E¢32Êò°Ü%P#–Er#¤´HâûSÄ“ŒÄ\ˆõfÖŒ2‰F§bª‰árÝk§ñdf:^S+#ÉÏÆ.ž)Ä5‰à¶¡1ê3×Ñ8NC—dÁž±œ{û $£„¡Ú•¡/›ËòÙ»è-¤[ðÙXàã"ù~ë¹1$Îð©™|!¥¼ØrGÒñˆ~Ir†VrÞgÒ V`Äzu`TÛÂÄ(.3y Üš¦@õí.éÊár¨ÇÑ ŸôHçxKÐág”_5›­•Ša©Ò]yŠ,°íPaÃ6ŸÝà‚7;•ì$[XOäæk!!-Ë6’4c% éHÃiGSŠC"h½heFРfáëž½@¾Z˜×ر.X*,2î#c˜´ýLCß;fÈÚÐ…Á…(1ÄÛzZÌsTˆQ0Ó§sªhôg¿7NÁ²ˆ%1'id¤o”0rJ¯¿0 éö‘~Ï* ñgŒ¹ÔJÁ9s»ƒ<Ò@Ùå”—HÞgL"Y°19ÈÊ^ S暣¦€ÇsZAH Pdk0HÑùm8x­úΗŽzÌ ‹êÀ¸®±!ˆdæ] |æÓˆô ™ÉEê¹þôŸë‡ãáúúã•ú¯aöC‡XF3˜l0×x"Å£謭ӗÔ‹»MƒÞû¼Fõ.‘Öö …,ÆÆ ¯g)ÌgÎNLW¸¤ÇCF¤ŠÆzè%Œ’¹¦ ˜t-…/ø_dʸCüÚ#ýL7ø|,<œÉ”×f‘ÈTöÆ}f+™·íôªÜ{˜3H3Xï–)¶š`„Ý¢ræ…Y‡Œ¢ð^p`6[Ÿ±îÜx5NHàQå2gñIz]=2³h„½ÜÿêÖö„ÑeDGA–•-£æV€Q¦d<++ 3½ ØÞÂ×ÂÈe¨Š ÊNª:Ë‘lËÑÀHxøzÏÜè«OÚ_Ú .kp×÷xhF‚’Û—80f£ðÏAqZ%t¬åBAÈ™G¤::G‹óJC·QÙ–ß´òÈo¸î|ÃK~Ã÷ûü£o²I%+Ûœ‡ŽGíèŠC[ó …£‡)Û˜¥¤W+l 5U*À%¨D4ÒÄ«|¡À<ÚLƒtºF]¡Æ : \AvP²û‚ä ?€U ³Û,¾aÝšvã€G Ø-ÛÐ#+4áH&è4« l’4ë2íÔA¢´jÞ> ‰E0µ•2D~uA['®"AI…žK®<¢§à*/†ÀD£ ˜Íc/ˆÙè)måEühEǨµr½žÂf‚ŪËÍk+殕}ƒÚ6q”g8£o¼C½l ’:ÖçŽì«¶ò—9$ŠÖ†nJ?-7«¢+Ñ1U ,ïr˜¦Œ3-Eúá\çÔU\⤺"@ºp‡`ÙJFå€Ô³aÃq ]ÆV/¶Å s\ NWQÌËàz—ÊÄUåÇO´Â=m}ø¼üØÃÖØ`Ë5ðg cH¦‘äøÁ˜~rÿ%îÌד9¦‘B®Ü¸ˆçÏL†‹0 •J‚u'H C¢Uøƒç£yZÔ¡Š™„Æ•á¥F–BºöŸ£‘0(cᜑ­|e1jlÕ1Ï$kÐÔ`1!vÏÔôʼô7“î}W ¶}ÓÈÏÐ}6üÇ^8Õs åq¤È0·M¾ãÂMQ°ÊíÏ;Õ–˜é GÙ:‘læéVöQ«ül üÉè`´¼§]ëSŒABÑc<']aðˤ˜©Ã0LÒO.ŒÿQ™f£_K©ÜÚ]âFœz`9Q©¬èg¹¤ê0Çb®»æ6©ÈÔ3²Á®ÂeïuäI1¼á£=ÐB)èðâ›—/þûÍ(±‘¥í Á¼2VÒO›«w/~øIl®¡.0hhz Cßa…ÇÍ÷/þùâ+Lø7ÉnXJáRÆe¼:‘òmQü¹cîÙaRª çJµ¹†›†ÑØ5×€cLfñ°Ö$m}Cÿ^›&IxÝëøAV ü$Ø>î*‰¨ 4Pâ» ÝIÕ! Mj" ßa†|¹ò–‰ŠøRMPg‰bX ’P`éëŽö8P Ûoñù®NÂ)©/›Œü̘:ט:ËIRx’•ã6EÇ+<¾mŠ@ê@ýÔuG&ü¦Ú¹¿ ÞÈÝc0Ý`RеöD²+ö~+cqJ2‚·³åzÜ~†2r°ï\U`\ˆ'*9ÁÓ±ptL¯iÀFUfÌ…f'ÀÇý©™ŒA –˜5óÙ,[õ»ŠÔG0cÄøJËü *罩y•K?VÕšù\k滵f¡=W¦ ÛÐ^úVmÁY@æÉ_÷fU™×Ï* ;Øg×ãTÙtÂð ÚÏ@à8%:¥KϨUB0Œ°GbûtÿZ®ÉÝ?<ö¼8g'RÒ9k0S„19”IE÷ R“B¼4öLšÙˆôµƒÉ&fÍLÔá(M?—$Ëm Ÿ3 ¥ Ã3I‘ì?[ÅòÛËž®Ú }¼gW˜YÖ8Qh÷üjTó9$í¼4ŸÌ?.¿mŒö¿4Qõ®þÄxY4i&5£hRæIu`ýQš~.¡˜‰kÃá—±˜’@¶$'è©_ªSZ½… Q ͳ ”›ìö+¦ÿIw“¿< 2ü$dG!€åøÄŒÎ¯Qœlÿ ÿêíßÂó?:˜STSòµŽUXôñTe ¨Bðµõó<=ŒYS…®Ý¼ó%°·¥¿Cqd3‹#OAâs9 ¥ÔF¸èõWa:SFȾ¤2¿ã›¢1ê--7« íG¾g5¾K m‰µô`TåOÄT‚ÏwÄj ÒyªX$g žçTö$.+{‚Y(Ö#»0^èe`ñ÷´j*¯Ù[ø¢3F¼xåÊä£oKí̓øJѶçBHûL‹è˜…ÕLÏâ:.ì½ÞTöYÈŸþ:ºç‚]é^Aö‰ŠïeOÿTñÔ:q,Ò‡„ºS‘ô³6r%<ÉÚŠHý* NŠNîcP¿*Moes 쮨ÆHi·ß–…ÔÊÎ 3õ\Z¥Ífj‚róô—²i+wê»p‡ð³`fAo¤Oe»å&5†ßY}åR.lÏ3fñ,ºƒžŠŒWüêCçÀi pé1V7€‚®³Fªs,6Õk»Ú0lPVÁܨJîSB.Ùä.Ž/>g§[.NÀééjc§D÷¬–%âÍ]§žEL±I÷+’ªñm†œÑ~î u·ËLW|SŠÝ'‰3íR–Ý4_NšòËÂùgvùÊÞÄYiº»(ˆlœjöõ÷ðü uõ²ßŬ¢ª³ÑrRÌ})„Ðí¬n¿ú.¿O˜D$vÇ@„Y,eî²ï ã¿vXır¹€õ‰%maõÙ)Ž*ÁÝÝ,m“ÎTߨF„u°PÀ‚L£™GYÇ™gu3¡Â¢ÔŒÚ'DF`WÙ[öÿ$W ¡Êhï½wD–i¥èÊ·¤yujÃã¿vcÊFø0ðŠÑAÚyåž§çR|PÎî}]œàœæ³:^æAòÌ«TN'cýv=•AjÞh&'G}Þù?‰ÀóÄ 5ïqÈK×øÌµ – q™ê›«±ùDmìT÷ÊØS+Œ}¿Xlé#uüüä…ÿCŽ.RÍ3vV_ÀØõ‘p³’pd´¬s˜æ–ÿ‡Ž7„ì%•™ÍѧeѤl…”Õסϒ$Vñ(º]%:蹪ÝNVhëSvÚ&è­„¸¥B`œz_Š»B*å¸R"Mrôî5õ® ³ÅMO©ÐÝñƱ3ÒßÑ^kìœI¶õn¸È§ª‘”rƒBŸÁŽƒf¡ë WÄ’‰ÿZ9r? endstream endobj 304 0 obj << /Type /Page /Contents 305 0 R /Resources 303 0 R /MediaBox [0 0 612 792] /Parent 293 0 R >> endobj 303 0 obj << /Font << /F52 5 0 R /F109 37 0 R /F107 41 0 R /F105 26 0 R /F47 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 308 0 obj << /Length 1781 /Filter /FlateDecode >> stream xÚíXKo7¾çWìq°>wÉ¢ Ð Ð^cälˉPùÈvb´ýï>–ÔRò*é¡z°%‘ÃysøÍütúâåk#Ç\/ûæôªdÓ;ɸšÓËæ]{߉vÝ-$oo:!ÚU÷Ûé¯/_ n gz…g¤bÜ ÷'.ŸÞ_®–÷ëÇNñvy¿zÛ ®Ûå'â²õ ™¶gBÛx~½íZ÷íH^ÂßfçA°ìÛKÜH§[OtÙ)TŠ(ñü"»…ƒ5㮦.‚ƒI‰ÏûÊãHq»©=»¤M¾c56 êAt÷ÐÇ´àíÂÇ÷O¶ |¦tf¥ð˜43ÎðÀg…¶ˆ­…VBÏF6¤¿9ÙA©&#‚ê-{š í‘«a(Èzƃ胬ÿ²2yk=4¤Hï0 .SðÄ*ÃLœ&à:£¢ÕPT™êaBñˆ *²íÛnбb¸´ ÕÂ`µ tTo"ªÚ$kFv·¸sS1„7 2æãk¢õ•V‚:'•€¤ouh#¢w‹™—u»ÐWä ©ºóµ,=2Q+› ‡$0€9¯B âÎ1í#*±-Œ‚Þâ»Kl xŸ[Cè08¢}òÒ¾Ñ"¸/*/p°ƒ›AüO'Aøc¾- 7í±±2Guàʘ¬ë¸*zÒØŽ–ˆÑI :]´ÆkYŽ tü}èÙ%M2ËÚEN7èèÛ® ¤Bç3©ØáïA®XRNªÑŠ=t6¦ ³b;­¿î¦yú7C¨ë ¤ø8.®}LJ5[v† ´3/äÄq¸Y‡Ò‘0uÁ¯ç]’™æ«ÐÝROV8ÜJÅ´ÃrOÕ)‡?(p‹72N7ŠK®ôNñ Àu]øybœØ7AÓ©,Nü3"e+”Må†2­ìáZá¹åIdEêëí¾²‰§Ž¹óÖ—MüÜUn",³`9úh–3½;€*ÒG?ù3É}éÉ9p N|æ—óœI¡1ãìÇìõ|Ei†3ëm”øÜL5V‡§ñ‚ç*Ÿ§¤”~T¿•Sí)Õïœôà ¡:p¤õ{sç˜[Ãy^î%à»X 9ÿ D ¦9ÏKlDGGóx;£Œ”„´LÉÁÈ@® S ˇr×Wø³’?W>YÃ2­Tól~ÔØÒÖžV»;ï§×kÚçã0zÙñïè÷ºˆnP–Q®u˜ñ¯S½3YM¬!§}/^SÐ_ÕÁn$0%mS2SÒ‰"íjéOæO'þIô´.âb5+i§ÈB;…kD”ßXâ–U\˜ Т‚EÅEhÒîhH6/a÷ª¹XÍŽÀªHâ9XÍÖ±ZÁr&V³Ïa5Ÿ®óÑ™”=“èå,tè¹{Ê9Øñóé‹¿é7¨i endstream endobj 307 0 obj << /Type /Page /Contents 308 0 R /Resources 306 0 R /MediaBox [0 0 612 792] /Parent 293 0 R >> endobj 306 0 obj << /Font << /F52 5 0 R /F105 26 0 R /F109 37 0 R /F86 38 0 R /F47 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 312 0 obj << /Length 2284 /Filter /FlateDecode >> stream xÚ½Ënã6ðž¯ðQj­ø%õ¶Ûí[t¶ (š'Þµo'Íßwf8|Ù”-õPŽ%r8œ÷ ‡~wyñæƒngBWJ9»\ÎZ93½¨t§g—·³? QŠÂ”ó¾ï‹ïàñ±”¦x€‡]©DñÃç>+øàÄS9Wª+>ñðÏ])D±¹ó€^þøæC#g}Õip÷z6—½ÝøÜnsY»ýtW›ãý nhh&ìIÀ×8¾p8WÏøžîJ{ÌÂ#¤×ÂB»Râ³Å–a,UEw‡DßZИLd'^PëRÔD[ …Y&ÀGXÚGœ»Ç©»CÄ–pzERÖ8v‚øOö ª•!DÕ7UÈ‘Ðæ}`ÚÓ­ºÞÑ­º®x¶s°h}$ ª‘*z¾!èžµuSj@¥„rk8ÜÌuÝz븵hnqá]4/ÒÜ#,œðf2uU97µ)>ZSCÎtŒ¥å–¯³šIŒ£&D—³Zíì·3úó“Ø‚è“1Zã¼À>:ÎÅ6Éà²þC²¯²bV-Ð<îS®-ÌU´/µ!»‰í— œïÏ2³9àu6%uD™¨§p”ÑÉd޲mЃªW8µziº¹~ÅÖ1ˆh+_q~ï8H¢.ŒWX‹©ùâ„ßXœÇÚ80 ¯±ìøj÷g»ÃEìx€øª®%©ñÐ4[›eQÙD² :’¦‡5ñOé43oâkÅX­lÙ3R7¬|&j«¾­f"¥+!;XOëÞƒ“Êâwø¯ŠŸèùçLö’¦2Rº5ž¶m)Ò ÒS,“û9hŒxæT[O %´=gELïrŽŸQ¦" #· ¶:³²PÂ8¾®¤VæûJh/¯ÑfDñ¯ÑMñǾà‚}P%Ñ…ˆ¶äóÞn_EI.ŽZŸ«ZWRèÔ%]F'ñˆ>•è_XCL¬'Btài"ä*‘lHïSÂÂL:"ñ\|š¶` l\b…Ñ$¾ˆ"è$wñýå…%Ö31뚪_ÐM]µš-6_ýþÏ ¼ù¸©¿¼øþÜÜœ1Í#Tï°òLìGTU;Ó²«:Åþ:`ÂY…(¾…×^Sµëö+yˆJ[üwŸ×â„Á?­1ø×PÍ Lµá&++ÙrÑýž¹Å •Ö?™Ä1`ı´>]àcb»­9YKªv¢mþ“©OõÒËðÕîϦ›r|ûÝDE²S€ž­f–¥/lä'¬œ‹¸ÆlCN£—ë³BÌ%÷9œz­ â`’²>푞 /[* -V·0óâ”poÍ8Q•œ˜*,wêÆ$ë|å¶4‰UO#à¼L¢(Õ;?µx˜ãêw¯ãÌ$“ôGÒ •˜ø½‰â«W>¶=s¨l‰y _}¤9 \q.B!£à}s„) bðžÚˆš¨¢ÀôEâ=)c¸*ÉE@ô©b‰€vyÒ|Að’+™o¼ò•þs2'+ø®¥c†9}¢µ/2}ÁHƒv/_Zng2Á„šªñ}ßPÕ¦yµµëÆŒ5OmO@øÍJ2±r‰ŒEˆ¸¬í|î1ɉ3NÛœ‘ÑÔ¤,ûnJˆGð8 âû-’¸J v¼,}EÄBO|¯ê¦^ˆ6Ô“ð}ëGæ .í#^™ •á}.r· ÏòÞ&>¾Ù#ž³G/õÚ’Çö˜‘RþPzÞ$'U§d’¶Æk’Ÿs…ô)“/c–#ë1ÉeÑñŒ‹ñ¸ =4LLd§Í‘ í™/(àÈ©”UÏoA¶T7T¯Àפ ð¤øw\`)Yý×ÍD“h Þ1-¯%àøËŽŽMbµI“Xfƒÿ‰_ôÒ¾öéšZ0ƒõÞ&­¡¼#ÑhT±díú%0lå5`aiÏ4º¬ÛÈØ•H){>ˆd=í6j[¯³i"Þ… ^@$7ëUS5&¹)@XÏtcðñ/žøÛ¹‰ê¦Ý&|.CéÅ•W°2šüuBS‰F„Ó¤“•tÐ`%/¾]e%Hs΄ŽÃ“sš½os=qŸ™è¾Ý(ÚÓ­ú\°µ=UœÐS퉞*|QûTø“ÞĤ)@G¾~ÀìNñ”—’èÒ-ßzÀª¥¦ß†Z4'k?$µi]. C|ô®üFM¯6‘zÓR³E|ê€Ñ·äë;‹à½ö±<¸¸i¢3#¾\IÝ’QÛê¹gw¤ â[$â(nSÃ@zƒ$ØSy Gíq[0øj@7og3¨ÏžqO²,:5)tkü,rWfm ë»QSÄ ½5qAíÝûŒrÀóÒs-¢:WG!²U"ã#vüõL×ÖîzÆqÈ©‚ijâ/ˆ|Em|!€Ez¨¸^›<ÿSyÙ9ch"øh,²ÍdzÉÉ`qÁÄ)¤¦`d!Êl£>šOåΩÁ…ˤê”ꧪ¬$ IYÀøS¼©¼µ'Â|ïI*OÂÄÂ&'ƒ¿Q™¸gÜ·<ÿ˜ŽƒÀ7bÇtc&ÞyCé&]X¬¦º…sÎ}к·>ÛÐ=ql¬X9‹\"˜{llŸ£®é“3I;ñÞן™ fù Õp-uÜ»¶LÑeZUÁ3tr¥Ë\ƒ™ø{“ïa òpÞ4¦VƒÒVƒoë¶çëLGõžé„:Q؆úÁ5^]IݧUàÈ»¼¦2À ¿Ë ÛÄYY¶éO3d;Ípý¸h޹)mù’Ùúžã’íˆÐzØ効[ÿ(Ã#{´ ®A¶ÄÒâ"÷S%bãDu½IMÔŸsè·™»aDuz2êÒæ—캴“áç8—’rúï;6/º®÷a Ÿ§4ÆûXC´í“üªÁdšÕØä¢>•>j= ºT`Ã?Ù@}IiÀÓ Ä7}ÕÕ¬/C¾Ï׊ÿ|{´ó endstream endobj 311 0 obj << /Type /Page /Contents 312 0 R /Resources 310 0 R /MediaBox [0 0 612 792] /Parent 293 0 R >> endobj 309 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/conmgmtcalls.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 313 0 R /BBox [0 0 442 140] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 314 0 R >>/Font << /R8 315 0 R>> >> /Length 316 0 R /Filter /FlateDecode >> stream xœTMoÓ@½ï¯Ø#=dØ™ÙÏc õ­Å¥BȲÓ4P'jbø÷ÌÚŽã$­»zûv>ÞÎó³6€ÚäoX«F½½ z¹Sªo?›íR=+ì÷ÃR5z^=f xP}ÔDAD ºhÔ›úÏ÷²jW¿Êvñn³Þ]?$˜Ÿ’`¢gÖE}DûZn;šD´€mGØUåúóvÕH»¶¾®ÚL™01` zf JXaßñæ7›åpéfµk¯fd‚æó㣣§MYW‚}+>©…ú¢œ¤1Lú·b"ê„ ¼´Ø(޲MnDžÔ"¥7a‘' ”ŽX—ÊŠ”À” pVu诪v…[ð6CÒÔf{¨#[p9žG`'u` ˜F$×R8ÁØZˆ”YÆJO¬™r·ëkÆ{Óž^ge|E†e,þIÈ{íÄ24¨¨ùºîFoF!§Ž’åQ ­ò†í¶œ<=1¨={@—Å!X;"Ó†¬}C—±^’ðœ5•ðâáA°'ƒxÎø½'ëÅ™+1‚ûô¦{Ásïó•ΘÓØ"ùâÄrƒãd:Øs깃ÈÖIË뉓8k쬌©‘ÿ± Ëï `Úw> endobj 314 0 obj << /Type /ExtGState /OPM 1 >> endobj 315 0 obj << /BaseFont /FXJFMY#2BBookman-Light /FontDescriptor 317 0 R /Type /Font /FirstChar 65 /LastChar 121 /Widths [ 680 740 740 800 0 0 0 0 0 0 0 600 0 0 0 620 0 0 660 0 0 700 0 0 0 0 0 0 0 0 500 0 580 0 520 620 520 320 540 660 300 0 620 300 940 660 560 0 0 440 520 380 0 520 0 0 540] /Encoding /WinAnsiEncoding /Subtype /Type1 >> endobj 316 0 obj 518 endobj 317 0 obj << /Type /FontDescriptor /FontName /FXJFMY#2BBookman-Light /FontBBox [ -37 -241 928 734] /Flags 32 /Ascent 734 /CapHeight 694 /Descent -241 /ItalicAngle 0 /StemV 139 /MissingWidth 500 /XHeight 563 /CharSet (/A/B/C/D/L/P/S/V/a/c/d/e/f/g/h/i/k/l/m/n/o/r/s/t/underscore/v/y) /FontFile3 318 0 R >> endobj 318 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3118 >> stream xœV PSg¾?È9µÈV²‰„»µ],Ú—ÖÖjÇ HQTò ÏH„G€!ðj H HHBxFE@DD·jív»©kw¯Û{[|ô2Ûö;x˜¹÷„¶»³³Û;wîÌ™3g¾ó}ÿÇïÿû~ÿ?ó^1 ¿}I®˜Ÿ·å0[ ÷¬l&×1Èõ+È ^YÔ©gÛ |6`‡Œ¥«À× |½;ÖûñüÑÝÕ¨ùg¨äÌ‹Á(cˆDª,ðœ :~4vSpðæ¿¯¼±cÇŽÀ4åC3eÂì¼À—éE¦H"gæÉw†Ð»E"az`¶H)Èù™žc'ø¢ÌÜÀýB‘P*•(ƒB6¾ùúëol¡_oÑ?ðPàrÿ°„aغ½yû$!¡2¹‚H™ž‘™-ÆäŠNˆS0ìØaìE,Ûˆ½„Å`ǰãX,¶Û‚%`¡X¶;€½…c±lv‹ÄÞÆ¢°=Øz8Ì“cß0V0VˆW<ñÊöú‹÷«Þ>¿ð©ô¡˜IÌÇx<>Eì}nÿss+ƒV^y~÷ó¥ÏÿÖ·Õ×Aêýw•’ ƒä,¾Ç~•IíYŠ §v—ÊÃUMu8ñìú’³šÆ2ƒ¶ÚÁÔØÓììýsjbNP솒z%Tr ¼R¥ª¬¨*× t„õ9ñƒº)ûKbi f#/t1©«>~‹Aà 79ŠÇó,þhÅ<2ͯaÝG|RÉ2#Õ9Õ1Õ„滋¬6Ãa¥Æá˜Rž¢+¨ £N^P—R¯´Â5œåš¹u£gfÝ5‡ ‚G•þ/;½²ewtÁ¡P®ßb18EЭQT7,rú£U_£¯ö Ÿ5¬B'>«N„Ÿ×OU°ƒ³´‡*ElU>€U("8ò‚{­“ƒ—\öë0 ×%'b³üÜqãds‡á¼…`)œÖ¶áµ0!OîN²E7m‚ÚN]`£wðO,F„#îGiÛ·F¨m\ŠHe£•̯મGM° Ƕ¤Ãk!^‘(ÈÏÌ;¢z "ßTÞQaÔ›á áG^¯p“;ÝŒÁ4´à…zÉ vDÊÒÓø)’½FPÁƒÐ&ôÒ“¯QÐmù¬K\þDxÏ{@œNg1ýµbÅîÞúډߣuèç3þÄ£ÁP“hœq­ôZ\µ¸ÃTð£Ç¢Ìog'lI‰:‘³¶T" ¦^AɈ½páŸrS»òR‹ sdœ“ÙòX:ÎWêxâdþ}ø‚@aOÐðé§ü—¹fI³ÂCô2ý/€“üo'ƒFœ|ƒö‡V¡ì¿Á+B³8z t~|óîì…Gðæ3žFÍî¿l§‚igEÌ¿•åë&6 Ÿi?gh6]4LbÀg‚‰ÐþxËØ ;å»Óâ¢ÞÍy í\¹Qcз‚›FïÐ2ñÀ¢Y&ÞÖ—ÿÖÕàn[«Ú Qß®nSµêÚpuY{y¬—Øš*—é42®L««>™¦×WVi+iÏmß×íÚCdú£ù6YÈ–0µÙ©})¦à¼ôîû;f}+塟çN¨¬ ÈåÄÆ¤ï‹Œ²eq•ZKù!döQû}\̦‘é´‘òÛÀA¾ï}ùQº{[âõÉÔg5õœbƒº,ÄèHïßÝ9¹ËÅ¥a'_ ïp1þ:ï…æé|©QD&ó4õ³”c›ª‰œÏ©‡8$´ˆz‹ºK´ýp.Y.K;„r•ˆ8Ù…ÿà¡ô"N§òˆ…œÙ”š¨n®6A#:Z ®3uÐxúƒÓ„ƒÒ‹ð±ª5m]bÜ`¢-è;Û ‡ýr§—JããU­*¶ºäT Íï+Æ’ÇÉ­nÿþ…O˜.Ë1’@ƒlÊW¥«MÑP^’£ N„ÜŽýËÝ+3w¹¬ ÇÍ}òëFÀÕÜc+î()ÓèJ@ʦʶª–#ŒH€Ã\©3ÍšÕkL‚T8®N/!X®D…/X+ë,êî±Z{¸µ=>ö1ë̯ÇǸÔYoÖ±1|Eüº“Cãw?¿ˆ‚C{ÉWºfº:§„“’Šñ«Z“$ ¬’¨Åç$­%5ÿåE ‘?;&,­ ˆû f WÌÃ<ëøp×5 ¦.‹¼ZO^g¡ÝÞÙåt)ú²mÜt{bËaèB~JrRþ~%¨MO_B¿|twàþ-´XÅx†ƒ|{ÌŸö1HvŒÜIF²ƵÒ^¨Õ›)µ1²#¼/™×Ÿx3ïôBÿ®»Ñd°; V\8ÚåÀÕuI†2 \åOÓñø"ù©•„神Ö5)áMkléïäc©²ˆ¾Mq©d@{.Á˜árë€urÄvÆ¡¯l:y9á1ÔàF«Ý 2°³&‰#!b¤wËúuá×úšY;«ÈJ¿ÕFǸ!h#µ1ü|ø…$ÞXÜ͂߇C“ÿNP‘Ý8ÒÐÞÚÑaï5¹á* ˜è+˜_«!ô¸ú ­5ïºPÚ(ã»y¯ïÈ86õÅOJÊO]Aßâ0ÔØÙÚÖÒb>×F‹‹Ik*n)n© Å¥«Óbueu%‰g§òÒrʳ`‘øvN# NdE³#?4²Ñ…5,ÊGÙèߘw`®e¸kÊÕ÷+¸M •Á¿¡^åRb²îÿDƒ¡1'žu&þlÙy¸ÏAG½Ñ)œ%šn7<úè‚*×Î=/5fÑW‰¯Ê.ˆ…YªÃ@,³wEZÐ/{Qoã-ÿ¶9É#Pö‚êã5¬g÷1;¹¡¨¬ÐÞf±›Ü*‹¾>ióà@Ý<ÃpM4Ûoq´iE…3µÆJ¢©êœÞDgkkçùÂö\±P¥(â©Õ•ZeNºI^/‚µ¨¡˜¯í :bKœÎⱞaá…"QâZHïÌŸT¬¥={%¢Ü„µ èŒ(' ï¨?mÿæÃ'¶Šî23¯È–ÕfX¶²‚ÜξçJÚœ\™Y¦à•æ– \zôÐ=uG[z¸t†ýi…½2@^®–ˆ‹¢Ô45ð]Ã3CöÞi ïû‰fÛ8]iÔL‹lò"ŸÎŒû‘«?ruiçO2 ¿13Ó= Äu»0œG•üäF ·4v¡UbÎ4$Á~ˆÌ?x”ðCWèlãh•ÿ›Íå’öäx2¤Ç„0 zs<ÇâcÄiž­';éq)›©Îöa=î‹9jÚ½î œ(MËMæ'ÀIÈhçwK¢«²?¡µÂ€§²>1&¶¿÷þF ù´6Œ›¥¾M)}™æ‰›©wŠ>£{ÚëÈoùT •Yyâñx…uS«¯te8aš˜ûðòƒGŸÅ~ÌímöñßA°xîz†î³ÇÜ7§Ç,6r”9Ò·k¡Ô§*Jêuj})HÇÿ5ɯK­WvÁ4ç~ÿÞ7Ôæ6ù¹B(£‡[mUqÔ³ÉÚ‹'}Ùuå{ÜßÒþ“–KþÏò´l¾Dž¬“yNš¸üG¤ý£Áâ‘}Òy±©P2Ag¬nZ›L­õÆzCÝÀiZ·§Dx}íÙÚÓ0[ÕVêÚ… —Fæ˜HBöŒ<1÷ÇIYDø‡úA5Õ¥žžúlÏ2äSô„ý×y¤ð•ïÁ§0ù”Âs Å+ê’J:=øzêµ9Æfïä~÷+²J µ0‡W>z~¸Þ×÷Q½ï* ûùÔÌ endstream endobj 310 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F86 38 0 R >> /XObject << /Im14 309 0 R >> /ProcSet [ /PDF /Text ] >> endobj 321 0 obj << /Length 3816 /Filter /FlateDecode >> stream xÚ­ÙŽ·ñÝ_±o™4ÞM"Aù° ‚8°W{Hãìj7šìÍ×§ŠÅ»Ù3Ý#=¬¦"YU,ÖÝúòõüV‹ 78#ÌÅëÛ‹Q\'&Ç‹××ÿÜìÛtbs»å›‡­ä›ÿÂÅ{ø»ÆçróäŸ{7pyC—òîñõ~»lsW—ðw÷bû¯×õ«ŽƒÇU97ƒfê‚Ñ¢_owFnþÿŠÍwþú‡4(£*Ì`Œc®âüw‚åL_Xfð _?ÿ|yõ´ÿ¸•lsùtóÕÃûCgd6Ž)(=l’J ~Øî4¬®øæ]fÉ»­0‘Dÿ{7*_>f†]!üþƒp‡ò!¬‘§xò¯ý:´%Êc€sàt{Ïù»Ë­&Мòi»Ø 5Â^ì8œÖ‘k«Öå›¶C©Íß3(;ÅxE7Þ#øs9ë ’O/Q®ð·'WЉÈm r…—$èY3L&jù¦'cÂŽƒ1¼”1áeLzs2ætóc"p'å±:!zÊÛÝŒè}ùþzFúœF­jéóû¨´ l`µ‘ó"©¬«·ÆÚ“"‰cÖŠ$Ž)E×¹Ýf¤@`ÔœðnËÙùËØÍožxYÒ˜g~ØâžÀ øwŸz”½çчŒÄ,üœã–.KHœÃ–DOÂ|ð›Ãê]yfáÀ5J«äyc¸íÉqA³Ù¼¥Á«™Sß ÔÃÃF¼€wp|ŸÊãûLk$Á¹¡ñp¯+ÉØá³Z¯¤ñäÂí#ÍW⯉ï’L’7x¼zEKkÓèG?Ú‹ ‘„à^ð´;&2˜û!It·åû‚~øÙˆ"µO‡èEïk5p'VšG5éÄYS( ¢Šx‰o‚ÚfI$„W‘ÍÏt{DÛ‡5Ö‰L¹Ä5aØÍƒð#w…© Žò¬Rü˜·‘€‚sD&¼Fã’ VɰI†˜Õ ÒñŠ~’éãx¢•ñ{Múw\ˆ$ɸ·¦þR"žšGdMöbJÔ fGéâjpJö`l¤ ìÿ¶Åsû3Úõû3ÖGçØ«Çà>˜¨¼’¾(^r#*œá’@¦Ë¿ *öiËK­N%áh9l³|O3ý‰oKõë±>a|pø9~‰´|ó”‚‹«‘lÅÍ)ÎÞÝ,ÑqFNÛÃ/ÇÁ2òáêòýüý=ýŸ®_^=uο…K—|TÜ)У.ˆ)#ÉlãwÚÙh4M2øpS~Œû±Õ&ø¹HY~È"ÅóX;A3ŽÃιÒW’zP:ñè÷žO3ˆÌRÛÀŠ …(ƒ7XsI(ÜEƒæ&„.vrƒV¶V$Ç4¥Ôö,YÓ\Ö²æg:%W¸½Ùâ½T5ç!~÷ð¶”µïö‡ž¤qpU¹ÐSæö‚!ð¯×[‹ËÁŒÉ¬=F†zm\9°}÷Ákt|sK©ÔŒM‚B]ûgiœ›o£u—\¿ß&.ÔÊ©ÁIÒÊ4Èñì[¢îTè|&{ƒ¯Ó‰©­Œ/}^Â5«¹„øµ¬"ƒäxøµö"МìÎAf×»2è¹Ö5zSyëWÄ ž`ÕÂ} è¨ ¿:. з5Ÿâƒ2\ƒQ•û“]Ò\%#ðq‹¡xÀ%H’¾ªœ)b™6.ù4Å@‚ìàÁO9 J/ΣŸB´‰í€PŽq¾ÎsÜÅQ­å"UýÒ‘¢H*½ø.’xùC&²Þ¹xª³y1P\Ŭû·Z€2ÑÖ|ªöÓÃÈ’iI.©äc<92ûÛ)è |ò?ÁÅTáyÅ•eD’ ’îWÛ–Oç5…­)„h¾ ›µ[ª«@D-Ð÷2¸hOņá,UØ«ÝôÄâÃì`'˜›-Oime]eåôdñŠ»J»„À£ŸTĘZ±e aæLÙÅ©ï›!¹™9]4¾Ú¦*£6òû µJªbäÓxd”§ã‘‘r;æ|ê(jÕ3ò¨CxöD—,0ÒUÊØêljîž{4íN¤vpÄ ‹ˆDÖª4L&94ó{Ñ„û½€ì•—èNêY J¬Í ˜?)”xÍç& _PÒ¹’N8TåóªUíþ&¤m„ª¼:–~útj‘é½ö©Û2ØÜñîaøÌ1šÉ X¼öÔ¨ƒd#ï¹û° yW7“FQÌ&Î{Ô|â‰ÏK±ÓÈÁ´¥²dn&wb~DVüû «+”Ðd§<JÉÓIÉ»OIæâV4â5%Ê’CÊ7GáH^Û3Wæ™OÁ+³¢Ìsfª½©óPc6©Þxð ¼í%¹Ü3y3Mx7Þ}Äg^#S ˆéÁéÕŽÆ4ÔMíJ‹£i„Ÿ:ãZ,Y‘ûKšdM^çÏVR«™´?‚Ýo£¶(Ý]-Ó„]ŠO‚Ìœ' Ü„£½ËÉÝQZ„1ƒq˜à”SökGÍ „/€öÝL‹qu9Òï.'ìX-·'0p´ó•ôw#„?VòZØÞ&-UMgêjÞw„ÕèUô]Gz~‘"÷)DMâö=Añ¸Gò¾¡Û…¶ÂÃÞ§92 “U*ûëVè™l–Ñe‚>ÖÄïƒc–‰­\°nfbÝÙDo¶R¢AœÁ×…3ÅXTv±ùÏž¾¢¸dí Ý'›žJ\à¡Þt9šÚI˹¿¢ï N‡‹À–Ò²29ŸÆÁßÎuŒ’]—&¶¢æ9 gÁl7MÕÌ †En6ëÇ2ÝÑm¤kdÁvrþVœCZtj;X•ù5¿–l=9[¤åª‡jtG/vvj¹ ûFAêGû æ’zÐ&màŒ‡å qnóuNUY žÂ–]–wÉãÏ/¿Ê¯ºnF)ØÓ Ðzà:„ý§&«üI–CÐ…±Š ñ -øè™W¥­p>š´j¹¼yýüóõÍ‚²Õ°'.“Ó„ì8Œr\Ý-r>vY­€„PFª:\žò:^l‡UÕådVîBá•)@lÒ}l?Un…X\ìóÞ“Ùü3ëeò‡ÿÀ† òÒwÐ_Ѱšºˆ?nU˾Zpr~ eÞøp#«›Qh¸÷`Ø´ Í<Æ´ÄšØ á×ñ®£fÈuUÔ»û˜¬¡˜42öË †£±+ÅwÄ8N”lJžˆÖ2ún¸êôJ ¿TýI.«êdô¥ªý<Ï–´Á ÷Á”÷~ØÕ %À‹Á…C³RÝw¿]¸¬X{¶jClt£"T(]âe…£¿Ö®6±¸Cì#ŠT<¬4D˜ºõ4Ì:sl¦{„[ªîQœeõ^Î%VL F±Á¬ds‚g\ÞÓzÅW‹VåMœ[kçp J¡²sO³¶Ìï/þÌÉÎqÞì]ðd=^§Hé8‡~¼¢ š\~ăoüa‹ÃIU8U87éoXá{ Í&§ÐKN?ÜŒÓv“ؾÑn o ­êSÖ|­¨•ÈŸ)j҃Ο.´X¼rQ¾hXSœ…­"ºÓõ:µ!RTßxH±ÎKèi6#˜aƤ#à´4ã×{0'§±=yö/V†bÚ"… Y{Ó—GüÒ§é·†…ë´¬È-{ëx7“Oˆ|†Ï´nâ§&Ë|‚œ[߇¤ùû–z¦ËºáÔžóÙ‚ààçk;ß-|D¯åÊf‡ ¹°kÎè:Y_V§‚ù.}Û´ü‰œWÅËÕ_¿ØªUQ„DoѪˆ|Ó|¤ˆ£ÎˆDÓáˆÓœÙü/5~5‘";Ü…=¯ ¤Ù šºÇÿ•Û0rIÇ?WùcÔÊrsß³á›ôÑ´9YX ±ùvz}t?Q¶U.}§ªv“mHšeÚ¸S _"³TAAßĈǰ•jG”á aM:§êà ·E–ûï®MSÐ0l.EoÖ9Œ?ÿ¹·a9 '¤v(Sgñ~ÛžÌêj Œ˜ÿF£[Ž]â,¨ýÞGh5-ÃàÃøûXºH!‚¦*5â“û[Ovxò•qJí?ÇìŽ v‡–Ð|â§ëQð<—»ˆ µ¤oR÷ô/c|Ó[ù1ª<öCfŸNÍ—Íë$¸Xk‚ÙÊ¢1Ëÿ«ES×Àûi§Ç(Ã×Ó@Öø-›3„yÁ0uÜIÒ—û’ˆèLšé 3æô¡Ç®:aò×ìy›oÄ~éQèù®êÔ¾$©:æìý(Îk›°fu*÷“V cfÒé© ¾îôï‰Û(Z_…6йÁ¬NŠ™ò¿Æˆ¡ ¹|ö0Áª‘8¡a|*ÞñÍë/þÍãí endstream endobj 320 0 obj << /Type /Page /Contents 321 0 R /Resources 319 0 R /MediaBox [0 0 612 792] /Parent 293 0 R >> endobj 319 0 obj << /Font << /F52 5 0 R /F105 26 0 R /F109 37 0 R /F107 41 0 R /F86 38 0 R /F47 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 324 0 obj << /Length 657 /Filter /FlateDecode >> stream xÚ•UMoÛ0 ½çWø(³'êËÖuhlØ¡À|¶Ò|¬’4hÚ Û¯II¶•EsˆCYäÓ#Eègï?:]…&xí«~]µºòA7Ê´U¿¬¾‹'Y;±’Ú‹µ1—àÅBϸz”ÈÁ˜@;b¿%.­Êa€Î%¶d¼Îv.]Œ_ÅP2h'­’Q!ˆ¬µ» AÐPœ„ÞKi=.¿eMaætÄ=3 ð0/ŽèÒÈÚºNôø çÀê `v_r‘m/5Ù”8o-¨vrHÇ‹_ô ’½#›#R‰´ŸýçJU5@œ‹TŽümÔ,å`Hãó;vZM„ŽYÎcÜ wk2í%`VÕšÄ ì£”&8Ì„£¯QrV-™SÌDšÏ.¹Ø3þeRœé¥´ÔÁ%ƒv}•úç9â é:äÆo˜½Æ<´›Å¤”cZŒ´I%ý—aHä×\Òñ3«Mc3ì©")6Ñ Z…®,†Üáú+þni©s) DFÔÈ»¿h.xëÿ˜Ûm\ܧkÚ‘؃±cuÖ&=….Ñ;_zGÞ®@JÒMJ/ÕÍæÑ0¢¾¦Gg®º“ ûwšà1Éï)µŠWC«ø“<¼:“Yk—%;Ù{d1w©bÜ<ŠÛ&´ hƒé cB7Ø;F|ç_øy7ó[ûÆY—cXÿƒï·Ï“{ÊÚg‰ìj™\‘Ÿºßé¹IõQFŸÚ.;at‡âxh3ª+Ê™Œšä‰J’Öà]ƒe,•}!®þ‚Là†©ãy~A7Î^´ßô=;‡(ʈëW.%î^¾”yXh”V[[Õ^u†ô}ö¸oivÛÏþh¿‹ endstream endobj 323 0 obj << /Type /Page /Contents 324 0 R /Resources 322 0 R /MediaBox [0 0 612 792] /Parent 325 0 R >> endobj 322 0 obj << /Font << /F52 5 0 R >> /ProcSet [ /PDF /Text ] >> endobj 328 0 obj << /Length 3300 /Filter /FlateDecode >> stream xÚ­[ɒǽë+psÃA”»ö*ûdKV–©yqH š3’Á˜Àæß;3kï®0¢â4ºkËíåVúË˯þð­²+®˜TF¬^¾YY±2ž3åÔêåÝêǯù`×?¿ü[_¬ÅqR2Ãåj £¾YoŒþÿÊáïôü}™S—ž —æ<¿‡¥Oðßv-Ìða½ánx?_¯¹n×ÒÀZC‹•gÞƒKl¬`ÎËÕFø°ÌËõFùáLÜ×áìp\ \”ã"a‡ÝnqŸÍp‡o·kãpˆæ´·v7ëôž–9­,+ðôûžÎ¦ãŠi0-¸ƒ?ã0¥6™RCËàˇµÂ]u–y;r¤NpÏFàUÅVIlÄV™ØÚ°Dæ•JslíÔðNv|»ßÁ¶øßnÂ@çCzä ÉïH!0(ŽÚ Lúqè)||ÉG½rpJ#ñ”Üp6º¬1wŸ÷‡-Ü1§Mô ÖõòâŽ(2XjµQ‚+ôjz굋 °‚&¢ á7®Èã.j„@.ÁQˈ¦D!ò$HܦÃè¦  Žàñäû5«ãGp"ÑÊJ‡p›88J,}2ÃÛ°ê‡(–Ïë|üyOâ9P`¯q“ü‡Ü&~ ƒ‚ WfI¦cBió+"÷Ð^nÑΚÓÅYãd–¨g5Æ2›bçò‹¤éÑ5Kë‰Ì¯‘˜Oáçû°Ù±È ¹°k…¡Q£1—ŠÀAöU£8GÓòFÿ\/ÀK\ÈEÐäÖÀ¿èåOBxA´Ÿuø|G' òGÑ¿»VÑZ»ð¼7QŽH•E‚ˆz‹¾é`Rœ9ë¾ k‚ÙÅœ­ØÎsIj3aƒ /—¤¶“Ï>|¾Þ4¦fþ¾>h`ͺi¹‡ð¸Œó}õuÆ/©5ü‹ÎÙjÓ2AF™ú‹ÆMpl¯5æ8ºF&ÏŸn˜Â‹k Sº‹† ^qj˜|ñ‚Úá^ó!"|¸¤z¸Lƒÿ>à^ð?áo0jÕD nŸõ qXω ª£[ÕQ.êjÒ¸¼AU1†_p…8ä†üÌ=€AŒO½ÎÑCV‘ „™Ã·•âŽËáJ dÃ|‡*Îî#a)¾Áçw¨VÁ5ÑcmðfV¸/!1JéS‰OGSÞŸÊ‘¢Ú@-ƒ0»Ñ…¸JÔz‡A¶$ýhpÄú SH"¨“W¾ž‚™¥£¦×ûÏíV½PÏ;&…®C=ö®Ã+92íó°¢Ê%­j—_·§Ç»í¬ª,3TÂj;é°f‹\ù_e¤‡u¶!pW0ïckº‘µ$R‰¬ãì]…»ØÊIdZ¤Å[玿ïBF‘,Cæ=GÂzê«ÇD‰Ã+)Ÿ¬ÃÙÉÿ.¹8PÔn$•}B„Ëì*üÙæ˜µ,¬Cöb­=ê4sÆ/E/ „¦¸›+\Ä x»S Š4 @69ˆÎ¡¨È1Ò´¯)Î.J99|W¡ñçȌ̺»ÄT€aeÈJ ð"·>Âí£B‰‘)¡Z…úiELÕb*àˆaá-“¥»LöœpUóXEŸÇžI[bóY.‰_ó™w.‡?,@2ª±ŽW¹*_>B²ž¡¶hÖ[´äÈŒ¨\ø˜QàX-“}yÖîˆë Ó¼0¾Ì§ŸóÆ$eÂg¤å{ú œôè|›-~ˆßGI. þ€vèöGתtnØÔÎ%™Ù¡ây|›¹$Gu½/‰—Ï5ØH+é±]?FKûϳzV<¿iÏv„O·Ù_ÒÑR–_¶Mñƒ¢R¯’ xNEMÑrS±VULp—I8>IÊŠÝðeá_e_Y­“ø:!ßm ‹4bIÇ E Æ¡ÁQÏ–¨&¸ë'h@¥:8}ö›»ý¬p‘aÁ™AÜ#í$5Ù7%ˈK‹Õ­ß8Ÿ8¼Í.dFg^ñu#¥›ûr9a•t³8ªŠñ_×¼Nó¹]#“íP6CuªÐÖŸe©WÉËáߘ …Çf‰s…ƨƾ®À€ˆ¸åÓèl»n°ÿèèè´bFåÉ-K*?”QΙ3jle©P_ E½ [J1I€²FÖÖ1ÓÍX·€!zìѪ౺ëÕ£¨¹]÷6füneôéµ§Ê ±ÂoIü©(JõŸÔ±míß¶Å·ˆ†U)>–Év“øðâ>LMaõmµ½THckWä†GHÔðmLFU›Ÿ êýâ÷,ŠÒѨ8_·ð÷²°ÛÅ.Ê•úŠÒÚºè¸ÚÐ?Ñ•TˆãU”î*–ˆ‚Ïb 㬂ÅÜOBÂNàqL·Ý ŽÎ„]³¨œª—fU«fèÊØïÝW£TÆÜpËJ76FtÔL›æ6HÕØôÞSÛeG˜#Ç%Bšdð€çÃk4j~dBA< ç5"¾s‘ñîØ }_z!w5#ƒy;^yõ z Àˆ°Ìùä¹ÖjØž^mï߇övðõøD`COûŒÃ<ìæÕñô8ûx{ ß~ÿ^ìÞ¾Úž¥ñ‡ÓñìX@ÏyÊéa~  k ë˜3“FÂþpìy¾#ˆ‹47A&ãøœA˜ªSÊ÷.`4ø›sÅ)áw7¹‘p “šÞ‹Íþ¦ÔzŠ'¢K÷Rz‹=ál)=™ µ½ÖÅË*°Bl±("ÒйJ`måìOkíR Ât ý‰FçÎò–4Dj–h¼oר9ì0§¨[aȵ sg"†x=Ó™|ÎÉAÎë[ÖíÒV“¯· ¢ú|YhA½¸{RœÃòÒ’ó«áÔÊœ’ûèæÅè_Ÿ ¨Àų€Ê+@¯T½Ò—ÖÌ:—Kâ ©+¥ýðì”LôÈ÷¿EÉO2ÿ$›“Våh9ÓUm£õéÏ‹·œ²Óø:y¢bž•§(ºÏýeyæ ¸$ÔñV/]&Êíµ·Sx Dð3ž|RL] vgÞS6…•öæS„ÀNãá‚5RðpBB;ñúà¬Þ5z&|Ǹ!:[²n?f HØU6êëÚ:’‘®1M:¼¥³Š‹U]Ò)ÇY«1×ý;W¯Û†kg¥û>XÛçvvwuhjOÀðiG,M,ÝŽ¢ØÉ%ë»äÅ"û4¹˜»©ºúL9pÖor¼¹Ûש{y^~Í-¤º–§:àFà­}q.!ü~ZƒÚ6fú!T€~Hùê2#êŒLe§95c›Nj¸<¢cÎÙìóÿðß¼ï¶Åœ žè1WYg©w„„±®pMÕ­ æuî.ü/Æ0«ì“ ¼T> endobj 326 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F105 26 0 R /F109 37 0 R /F181 329 0 R >> /ProcSet [ /PDF /Text ] >> endobj 332 0 obj << /Length 3420 /Filter /FlateDecode >> stream xÚ­[K“ÛÆ¾ï¯à-€£E0O âÊ!Jâ”'åÄÊ!e»T»$×b™»K‹\Éë_Ÿ~ÌrIÅIà §g¦§ûëôúÍÕï¾0r1v£•vñænádgÜÂŽ²ëÕ°x³Z|ÛÈV4]{­Ç±yƒÿ4ïZi›5<ʾYÂËíf ?ÀŸŠfß Û<¶B4÷0ˆ/ßái>ò´ukJÑ 167ÈñÿÚnö­a $"úC+²e‘•Í{š»ù¡½–ºÙÐÜÄ n É$ìNâF` >3/ÜÆ]­§‡¿‘ß .Ä\a ˜ÚãAkF¹Æ“ß³À†^€À˜—ß,Ãæ¶0/_mý&àý¾ýþÍßBwJ‹k!ºÑ¾‚øz ‡R Æ[Z{àv­ú±IŒ™9>& Ñ_t0äxì`Äì|öWŽo€+32aiº8 )—íÆA9T.)\×[µP–Of#YÒAÝ9a×Õ+>W¸õâ`'Gz¯O¸ÓC~Ü(ÈᖸĻ4¥l ú¦U¶Y1ïÿ¿†?ßÐ%^K);7¸ò¿ë{IÊ)zbÕ1-ݸ…AÒ“ª£F'\ÅèD®{–©èÍÂPAà ÔQuƒ‹žÙ¯žß.ß­aŠi~\­ïZ âzÚö•Ûp¢c˜çÅ‹›ˆ¨-%©ý^©ûM¦_ :¨) ÍüÐ^Þ`A&O¹Õ›Ù­h1z¾tQĈÃ6j"-µbº[Oç7^ŒÁ,ø*lßY¸ƒâÚv¼b†$QçI›üŽ™a‹’¶Àü}‘ J{[ФóÊ'Hýzü4ƒ ô)“WÚW4W‹$kw'gw'ø¼CqȈL&š?RXÂÒ]-Ñ~ˆá®­à?Û^FïoÁcÀ-OñøÜäiØŠ@ÝÈÔ\B7ö£rèÜè/òC‹ð¿I×£  êƒ °êÓàw½éùi»{Üöo÷‡÷tŒ§åÇ?û ÇiìU <á%Y¦[È‘²ïz½Ç[E€/”ž(Sj\ü†ÿ9„»÷ê={•¢sÞ®<±]=X¡îq[Û®°3öÈvwaŸ»xY9Ä(דF“ûY9˜Ü˜èwŽ(rÐe•l"Ú䊧­Œdvô€wvà÷Ç1ßÞÍú½$Œ3ê ?ƒžÊæ¿ð·j¾¢ç¯k.»Q«0œH¤ùgËñaÐP8Þ¨~Õ³ÐïiœJËžã»Ð8¢›Õ$Z+@ñL…tÁ¦+ºéT§Fû)޻î»êqioôô\8.Úü¢N\…ö"'ǼÐ5TÎuz”ÖíX/„s ß—ûçjÃh‰îGüÀÙnà2/`k^@YsF kuã#%,QÍ~ôîXlyÂ='N‡ô"Þ¿=ÏhÒqc÷yxB;eqÖižó08{LÐ!4Ë–ÍVàg_x«-Ô\ê!¨¹Ô¥šã«KÔéOæ‰jÍ £Ä›v͵ßÀ·íðiç£~¶Zd{í´ËaÈ#ʘëœMòñ·âò ks‘©>äPèÓð ]…  †PÍ»mŸóïgB¥Ü'äÐÉw«;_‘_„ñw»ÁÉ2Rä‹«x+ ‘Ƨ8«8ç7~ûÊç•x”Þ厦“ç˜hv!Eé1E9ÙîׇãÐæáà‘ª€?ö°õa{&Òý?a¬õ2€éDœ%]¬o›äûWLº Ò÷ƒ˜ò̳‹ ÐÓúLJ 'bíƒHÑ|SŒDx¤©©  e™éâÛ˜9ÁËcz§ú±ëU®wŠôN’Þ©Kô. M®ð¦:+,DûÜúIuǯE‘ü*Fr,2•ÞÃÊ‹Aa]x¯ê˜ägž€3œ: 5'á¹SOÙ¨m-ÜéŒÑYhi Gýw2TÉûE¥Œ5¸ÊRFufN¯2’*Òüãÿ±éù •“z(3¯'“Ñ—²+~½ªç-®³)ƒ:±]7Ù®àí^RŒÅÝNü(X‹‚Qw¥é„¥{öâûæ¯_Ñ-à~þÎ#·Å–÷<¸;¶ßÈè ¥Wz-²Û2.³¦SN^è mç"Òß×ïpyqÌ €º ¹%¿[eõzŸÏx©fà ³ëˆ`DÄ:&QÂëR>¾æÃ?éª7¹,¹L &*¥,Mô¶Í7áÔš[ù¥d½ N”GLѪã½yº»v’ýMz‹ÍmÙ¥¡ Ôö£ñh‡EÜE¹÷ðӲñ=(R¸ÉBþtlæ¼DÖñÙù$&Þ×®• b¯ç¤ +pã7‘ðk“­ ˆ›fy¡¤Oá4×,fsYÙÄØí9`Fr¢iË2ô]¹SeÊĜֱelÔHxS±c“ú ÆäCØäý¤ÔŒdåiíDNÆDO`ìL2s‚Á“$R´lìÜ «™ÿÙæÍJjQL&F sD Ò—šIYBÊ:Ì"‘]Vô^Õ6Ôf/0 ßøÛØ‚Ù)¢ÎK_YRÉ™›ay³­Ù_SË¿X,ÄŠ^vzÊBÀy¬ã-@GÈðíË QH§£Ó¢Ì õÄØçç¤Ãš‹¡?M™@ÔY鑇QÓ}óeÈGÏÃ$Žo§.EgÛá:[Üÿqï ©m.‹ÓùNõû¶äwÛuì¶WbX­ >§‚õvW/,e½ß ×VwnêÛ&ÑJÑÎ z.ÜezNô&~›6«´@#Î}clPÇŽë4ê¤t „ÂyGÀÃ2={b«°A½Ÿ%Z!ò…SäH‘¼¡4´yØnoö›ã%¡åãÃòáðj2Ê¥ôåáñýÛ;´–õOžbõøt»]óó/ë÷Höøö𸖌&ÝÁJͨØÝ\_0/O ÍËݳéKdúŠW ªK´¹Ìý#r¹åkG‚rY3‰°q¡Å8­ͦTrÚôD6/8Ä®&ÿk/ÍÂÎøæ+¢W¶“©´e vh1Bfít‰˜ÎÄcý {c¸àe{Ïs¦y¼˜@tdO>Á¼Í?*q1œ@ºý÷üþeWä?& ‰;jqUŒ ’*'¢ßæf\n$5=–Ý â”Í\^ „€PMÅ/ Œï¸pDüBéfʇƒOÁY­J—æ &¦V±y‰4Udü^|™ûc`ÍO³¡ `›Äš¯+‚/^Ã]¢RÅgTL:æ.“ZûB'h*òÑ£ÔÍÑ éY#³fˆ/†õ¹³Žt¶ˆ_Œõôãoœqïoáhhªø{ón9‹s,Q{)*B†Ô„E*£’ˆa…)b•B£^û²çô'ð8þ?=›jÍÔuÖ¤ ÛîØ§)’ ]Ä'3óïd*½&ã¯1s¶±|ý[î¯\zú™Ÿé%a“¯ZM^ƒÖ¸#Åb¥;Ú~è®1< w]A}8žL‚¼6zÌMò• ¯¸ß'<~0‡ý¡ ù">o*ÏD•>2ær¾ÙÇ5¶³ëÌ Ðþ— ÿ,Å\Μû=’R*è¼ñü(ÔtfÒ Š<é1ðyæŸGZ"ÞSeVêƒ>g¦Ö\;)޳}íUÚÔôƒ?|N5Xúú•ªø ¥ò1Q¶—c`™”®Ò‡ËzÝv^ù=ÕMž—”§Ý—¾®ÅíB.¢«y„;§)éDqÙ| ×§ÚW±o§8ëÈíögbD\R]e—przUfu× ÷óØŠòTÜCåî_fu­°ÅIa'&<,­â+h5ßª¢:S?znýžv?k¯­„ó;”Õ Òb÷ùGW!kê›nùûr•ÂBá>†WysõÓ~‡Ý/Äb ñãbyõí÷ýb£ ¦Nnñ‘hî!I:AÝÈí⛫]½öÿgKL·yÆ ÕõzöY}ò¤Ø8@QH SêŸèi”Äâ½ ŠÙ ¤á€ü5UeU<Þ}ÈÊ+d ËK,Kò±üªí¤Ÿo/lÁ”¡ÉÙåÿ%œô‘Ë:¹žT±ôÀ&p0¸¸„I_”¥„\lÕ…Â|¡Sžë6¸† 8è[›Ô½ÅOhFŠOª–ù©ŸñåÕ“hºq†ï$fæãþ˜±–TïÿŸ„Õu.(º`eGÃúw &4 endstream endobj 331 0 obj << /Type /Page /Contents 332 0 R /Resources 330 0 R /MediaBox [0 0 612 792] /Parent 325 0 R >> endobj 330 0 obj << /Font << /F52 5 0 R /F105 26 0 R /F181 329 0 R /F109 37 0 R /F86 38 0 R /F47 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 335 0 obj << /Length 3076 /Filter /FlateDecode >> stream xÚíZKo9¾ûWèØ DLóÝ=Ídg€,ö=¾,fÙ’laeËëGÿû­bñÙbKìa‰ÕÍb±X¬çÇþþòâý¼ç‹ž ÆÈÅåvaÅ ‚uÒ..׋Ÿ›O­èšÃnÝ.Eß5ë·ß¶­j6›«ÕÓî‰^þÒéŽ~•Äðž·¿^þéýZ,XA\A(6tv±ä=빡U.Û¥šÛ–7ÈTò¾yl—¦9´’7/­0Í3Û®¹o9o6DôŠo÷{|š-<À, ƒ‘§Ýâ|ÿ¼†çU«9 ,aÊŠÞ>á2Ïn:.×ô&¾$®¦ñ²­à¬Êa¯-ÒFž¸.ÌYÙ<¿Õå 9Ž‹“Ǥ+Þéì8$|Ñ‘ž@ÿ»ûÝ3)ÿXµªgšÛ@̈BÙçlÐ@ $KÙKÖk ?4ÓF)‡õmË­I¼Qír†æ#¨ÚiõÐ*§üww»sƒ°­{؆$ÅÜ£êÖôüƒ×éc;D&øþ/NSœÿäuq_†Y6ØŽ£ÔjX,…f\sù` ¢ùü/›?»ß¯›aZõA#/(ÃS+xDÝÓ_2xÅs¥ é9bŠªðßhâ³qœÁHv[:h$|MíYù'RràlaÆ.Îë‚,i¯’ +ú“§%I‹œÒ²ûlö¦8ï Þ¸·Ã¥dÐþ\ÑŸÒÜxó¸r‘^àŸkæç-ÞÉí¹\ùPðìÇ¿Ž ¸yýÀyŒÕnڨ棳Ž<‘|FfÄd º£Ô®²(5(¯JGö³K>á¶¶K!fM´ëVÅ:!W…e+nVäC”ÝW’#i¾ U„ÌB Ðm齋*Ÿ[²ê}•𴡨:þ€¤0|ª¥R‘òìI ¬ï{ÚÓ—— 3K€´"‡²Q)X¶cƒàeÙè £×ÍG˜ýþoô{ÂH`dRd @±¢?×ÈÚ‹M”Á¡v¹gõÊ¢”ª=ŸàGðsFxD²/-âÚÓYß™”H;s9»ì”žÛï¹Õ–ÂXÏÒ)\S^n<¨é}þCÒ<ÜàÐÈ](ƬÑn‘ìý³ã‹Igz#ÖGIÁ‡ÃëšFh·ÀæF‰ùe“Ùšû·<¡b@p{|8¸Eäã „HÕ¨çA‚ìì*Á¥ÖV»¼Ä*Ü;t0[¬í.„ŸL4gOʇšéYWñTº®¡`·:”ÝŸ¶nÝýó¶V¤C$dj[–tD¶ê„Ìʽ“ ÉÇPœ“…—([4{\l¹ÅR±å™ŸËv~í÷­¥Žððîè,ªñˆÜ¬ï7}™¿ï²h2v1%}süÏ ÞÙñ~”Ó[Œlœ’¢·¼¯%oL¾j²¹p¾)`h:†L1€™Œ‡ M4ǾʟÛñ|MùÞ‘—Å•™hppäTðq¬ªJæ ’ÅO^a›£•+Þ÷î••°*û9%S"õhæI¾|V©ÀW!–¢#£Œ¦ì<ÔY4$®“ÚÐÓ¤²æd!¥¾8 )y>/ _‡U"†ê8ã½ 1àðò|}ûX =“2†Šw5V†k2FÛ»ç:##†‚Ñb© ô¹BŒ›Íà•Å„`&d«}^×V³°ZŒ‡Œ¹ö¹?jŸ…OSµ° ÃÒù^D+Rh™áÌj™#è·{xÚý¶~Û?°ëZ«o˜"âTV@)'y"ÁV$Ä6kÎnbƒ–rŽIvÔÇããVÓQV 9òÞ£³ášé”W®oo6”‡ö‡›ÊÆ—Jà„òôgáÁ¿¨ê ‡¢’wc þ…Åû"¹Š¿ ûÄEO¹^&€gí‘O>ªO2kƒñrÞÐó¸[t­A,͹e8'u¡N>nŸjÛUEy'ÑŦ7)~íÛÉWŸðøl é‹$CI„g’ˆèN7‘ŽvTJhYr–v~¡¡ZÓÔ"ùyì7Ê ,çÄúеWkõÝáâZ@@<ãt„ãO#‚º; @êo µž .Õ×·æZ'Lñs’?Žžò9o±ÚEb ™’üŽWô§lÅœ‡ =°NŒîʧhú\îŸV»Ð?¹ÿÙóçZ±c:fU*«¢dƒ=jÇ‹O8¤d¼EÒì¯7†NçUÙ.ÏÃh°WTê„F)zŠÇXŒì&É`fË`“ŸohRÝYòA!¾£T[*ÉñûÊvOvƒ-ݼ¶x{ŒÇÇTjR3#æ5|K¥ r.ˆ,¢êÓMÝ}²¦¢“Œè½Ùe6jTðˆ–ˆâªÝ¤ð,ø,­Ð.D©ÒüûòÄÅéïcÁÎË8™ã9 Ë/ÁW ŸbCå}•¢?]fÍlܨ¤¯™¼µ?rùò@é¬:Å"ô2nÌ—ªøóäGmto­«QÔD]áãš&ÊuÆw¼]ºùt\…¨QÇrb=yn0õ4 Q¦„¢Hó—û2~âU× Öd× •/0Ê\(+h§]'è9× :]'}ý:A'˜U«#Aæ]'èêu‚N× ðsÎuð9W["«©DÉŽéÁÌŽtœáÄ j'r§’õ´ºgRG¨~D p ^/hÖqþe×éÿYÿ×AÖP6MA­&PÏc­Cib óˆ«„RˆëÅ—ÿ¹ÀÊ [püž›ƒj½ë»‹Ÿíkx¡ŠÉ¡_¼:ª»TfŒXí?]üãâ{ü0ÒP¾Y·Ð ˜íúç`Â’?Mež>ø¥®+¨kßv;²Œ‰·E¥¿)r™%}a†TŒÓ‡qflVœ“möñ åõâvÊæ1ÌÍ˾ Œ †é V(´ B¡ÓÝrîO2¹ý~ù–>»$ßé›eœ“u?Y`ͪÏX.{„vá|W.o1ql[Q|Òå4äó*£S}W™H*á<Ø´ÍRdÄ~Bíͪ¸ ;Bñ1æút5…Ÿí›…ñ%ey¥7FÖüc1¬Òí;Τ„fÌ ÿ{_0î;{ï¤ÿ8ÍIN endstream endobj 334 0 obj << /Type /Page /Contents 335 0 R /Resources 333 0 R /MediaBox [0 0 612 792] /Parent 325 0 R >> endobj 333 0 obj << /Font << /F181 329 0 R /F52 5 0 R /F105 26 0 R /F47 4 0 R /F109 37 0 R >> /ProcSet [ /PDF /Text ] >> endobj 338 0 obj << /Length 2816 /Filter /FlateDecode >> stream xÚ­ZKs㸾ϯÐ-dÊÂO’•S²Ù©J*U;•õ%•IMlI++KŠ%ÛëŸF£ñ"A=fs°E‰ Ðèþúëø§Û?ñŽÏ:Ö#g·³VÌL/X#ÛÙíröÏêµMµ[/ë¹èšjõü MµÞ®î—/nÜÕb·=ЋǻgwõûÕÓáÛþ®žëêøxsràf7x¿Ûm⺪Z-w°+óú_·ýøI‹YÆn@(Ö7ílÎ{Æ9mâ¶ž«¾z¬…©VpiÚj_óêþžéó þVµâÕ/`à³››7:ÕŽa­–³ÆMëöv|,H¡`ujÍqÉü-jÁ«õ—¦øƒ»(’]9‘FljÞøŸööÎþÛÖVTØ$J¿F£lÓ+S}+OK›³[ŸÛÉ^Ù;OAÉáŸSÌ7;•û•W¬žwJüÿÔ9çB³ž¸à¬×šÔŠH(«U1¡ÕÅj•}âàÇ@›²ïQ_QXeÅݹËûøë‹ÝÉÁÎ[YºÇ“±8ëµ…ßË:¶wÎëø QÙWë÷ÉA˜o³·Pü·ÌŽr;;Ÿ­¬‚gsÒif‚­ÝìÎaLjn0Lˆš@LèF 0!µú^Lp)Àqyð±àù8È–µðp ‡G«¯Ý¿SÚÒmÀ[ä"Cª°9oHº´ò¾$û@Kh=¥vq^íðø…Ò9(«04`mÅMϺ¡¿8ùKªL‹HBÇ¥Uf1%뺠E™=Ð66¤.üÑ!"ð éãÍò ³xp’dQen8“\Ïæ¢e]oN…–ã >¹¥âK>üûwL7Ò­óCô{·'ëø–tÊ^ji©xío-íW æLuŒÏ,kg˜7?e$ ß'Hf=…|”ÜÆ `ý_òèn-î_âÚ¿"¤÷ãCÐBNÆ¢¸÷4Å#®¦ è œÑížJ8kr<®whCaù¨`!‹9@›Í&ðóà>É\ á‘äL—kàûšx½"=ZÉEñZúPA–¹³ê=ŽÔe[³¼£½¥g+¸ù4’bᵫC|ÀIïîësðAààÃ(EÎ4›Ïu¼ÞFKêŸÀüR5^H— \æh×#dsT±Ò¹ÊT3%„ž“µž„(N1Ivð´';äbÞ-¬³Îíj¼jžS»ÐÖjZgôùV'OÃJ÷d ˜(S„âcÝ6hÒs[ öàÀ2j2ÿ˜•Ô;VŸÖ8q¯y!•»)Ã:Š_Îhq;¡uÓ™d˜'6üq@j 3»«væö.Èÿ¥fÚ(§ ãÚš·FóJ×󲎟kÇ%OOÖD>/°&‘]Ê,0so§âÀxË„ dñg@ª¬þÿEõ7¼þ\ˆV†‡~¦˜å—LwÎ*¹ƒJ‡d´T³-Ð`¾´Î99aásr¶»„3XNCj°Ð§øqpwþ*œ»Ž …SW¹¥ö¢ê 5ÏÑJ}¥YÛ‡–Ôò}³/ï°HË Û|¯iz,ÖŠÿv3w&™Ù´Ì¨0óadayH!L Àß•V?©>î£ZRß–Ú=¡94ˆÄ‡˜Í-XtœÑº&)”B÷$³c­Ã%‘—§ÉÑ9ï–µ“ÆÄt¥3¡xqh= Êø†1ê* z£È†iAª z3QŸ“R!¥*Š€aviIµý\ëΗÉNeÒj8”E%às£¥Ü4òÛøýw¿Ï-mr B£hÁ«rQwv蟔ŠÖeø´“d6É^kB­åô9çZ3ÑÄù‚›õ¢œ9c@&A"j$°Ãú˜tA Oëdî]¾îGP}Jóš•«®—qm—êR¿èº„TiNˆdd~w“¦å¢ÉÊŤîÇ‘ÁÖË@Ky.ç†%Ήß'ï²ÑL«ë†¢Ó9”¼Œ€œ•@0¥€©^“˜ SxÔº”Òq5>I‹RRª7C2´mâZ“6M4†e¸lÁáÕõÙêp¿@6]•ŽJq@ÎIË.5àáßêþî°>”˜_2­““«Âœ†ÉècqÆÃn³8¶ï)\dÁRDîXñjßlx?ø5JÛ ¬¡Y¶Óí 6wyšRn±¹?€qná9Ýã7±Ç¿³SoÒöù:µÙ E‘šršR#þ¶®à¿¯¾‚p_â,»Ð[ökm)‡©³4L¨žzõü*Û<ò i¦KŒH˜éâÑC‰´ƒéŽ)§‚p¾5ÍKÌ^¦,ŒSxÿÎ}PÖË#<Ò†:@Ö¦^¼_>œ 9.À”Ù‘¹P£g†íS®˜ìi ÊíÍ ¡²…ñ^æaŒ:¾ÓŸ5htvìq‹£Âì`ð ’.1H×Äàf¾sàxLÏBvÛ5 Ny}PèBNB¯äà(Õdœréz|Žöï~Y‡ @xwÃü1œÐIIš+‘V2u|s ?EQvhd=¬±HÒ‚Ã7†u’ç}Ø1±y\¤‘-Än¿•rFp†;n|R›’Î{Þâ|!qÚç¹¾Èe²Ç7Å$jtØßQÒ.ÆÁ ×zpôJL;n0"ìû@@F¨ØÜéìí?Þ~ø‘¡ endstream endobj 337 0 obj << /Type /Page /Contents 338 0 R /Resources 336 0 R /MediaBox [0 0 612 792] /Parent 325 0 R >> endobj 336 0 obj << /Font << /F181 329 0 R /F52 5 0 R /F105 26 0 R /F47 4 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 341 0 obj << /Length 2703 /Filter /FlateDecode >> stream xÚÍZKsã6¾ûWè*5Bˆñ8ì!®lª²µ•šÍø²§&²%;Ú•-íÈÛÿ~»ñ"@‚”èWÍŦˆF7ÐèÇ×Mœ_œýð³P3CŒdrvq3Sl& #5W³‹Õì÷êÜV»yC«-<<Ι¬àacßÂûù‚s]ý~g÷sN«5<æ\ü㇟–¢‚!f Vèv1_Sý…<ÖÀ˜ÕÕe l¶ ¿†GZ=Yî0øSYÝ!5Õ§ùB:Êd ž!a–#6ð[P ± ¦øŠ»Ç™qÀøó|aªåÜ* vÌn¸ ÷¸wœ`Š|¿Ý<;¼´ ¡ÕÊý\Í…žDQ)›%J¼Â?v‰ìÇËi‰è·+褵ÃÁÍá¬(%¦iÜY¾XZ …Ñ_ì‚ህc¾uÏ×^ØaÎhœòŽ ksƒ4<ÛþÆ9ÛÍÚkàÁ1ZYc‰§t÷Ès×’øJûî3ÉÊ©¥^:¢Ïsg¶×NƒÈ@ØiHs“ý½•yûÂ4Þ·aCê$ÖÂvÐ&Râ1Ôþ¤;¯BïN‰c¶F©+«xëxTәϓ=ø0Aj#ÂA¢-€Lƒ]¾|¼Þmz\nîÅeÝÔîi»ßšÓ¦Ú]}<<|²çýxýàÆ¾ß¹›ÛÛý;Ïj÷xµ]ûñï÷¯¯–Ÿæª©üðÕn·uOÙ:K Qnje£F-¼"~³;.9´5ufXvHÌЧFjïý‰¬ç¶ Žk‚Û¢lgêÿPéÏŽÑ8-?B+ÔÚƒ[‰ýíÚ†_xºŠþ‘nsíhF¢OñÞwxg¿8ûßã©gt&Œ" NDÖ†ðZήïÎ~ÿ£ž­`ì”p£gO–ônÖ®áa;ûpö¯³sÌ7´6ɉ"+mYqRK\®½Ý¥$F lHcøL*|núµ` Ú-ª¿µ¼R2®,k\š˜q"©“Vs3[$T—5% Á©* ¢’%3©äóCIX#2Ñçq-/Mø~g}´ÄÏ[Ý0S&è ™×<æY0,¶ìó°w-jMÏŽšåšÊ‡] þ4—3תzß‚ KïR\ áÑí4Kñäíú¤Q·¢®×š~²­;ÉVñZ3ÙkMÇkuÕÀD/ýh’bôò =¸ìË5¡Úä†ã%B¢×Öÿ=òi¼ÇÈmqÐíÜɳô* {›EÝFŽ0óçjc Ø¢]kÄZö-F À-YæœbÊ䯬¸]»¼×oMƒ2ö¹¼³W퀔2ï/6?xj’Ì Dœïèdµ¾/‰Æ:§'ß bQÊ⠯欑è%Jûpë1ÌÌ7FØÑ&àu$u´ç‘ƒóÙs‘ l¦M÷Qgþí!E ‰4=–‹’aéêŒÔûÀÓîœäÄ™¬O4’èšæ>1l×` –䀰äÁ¥9@Cщô—xv â*HÅ“fA´‡÷,ŸWÿ†¿¬ú§}~_/ÌÂè$zòúu‹‚@àð»Ì%þ„Œ88RÕØò‡©°£ÍÁý߇p´Ž±Ì[êÿ¥¼?ÁêdžT×tƃ&>æk€†³aßYPð6î“éq'â@¬S'âLDÇ~ ÊEeû²°-/›Ü‡pâ‰>„sSY©áX,­DOdgi–¦_ Ê£^óÒƒ¿CU…󇽽Áº•×f£LŠ› n¤÷p.Cš‡—j(8ÛÃtÈ`âq«‘%«K„[r^žíÛ>†‹Æ‚QÞÓ,§± (§”ï@~ŧy§ôqÿû°‡€ˆÆræ²Ý½ýí#ÇDܯ-IØ;<Þ¢J|€‰cm»A—Õ£•%)V]v$-ªKÌ{’6fFÕ=P/b!©åÍ@%ìÊ]|ûô&1‚Öú«ÔÃÔn?©æ*ï¦àï‘—Šåpibï\”˜äÀ}°F¡YÔ+,j2Ð{Wª‡x£”£>±¼k!£#Á@•©¡8®¿Z¯»p“W­˜µl+9Tcl“=ùÜP ØN§ 8VÐI-†Ó½fœŸŽ•¼‘V¿+beÁóø„9V¦'çyœë„õó¼ 1Ï㣩‚È×`e˜6†•Ûá!T`JC,ˆõ¢?àq)BÜįA\¡I#3„Ë,Âåá²a„O!Ó#å’ë§Sl€s•A=ÉËP¯ÈO ¬ÿT¨s,Ö‡z0¢£d=‘=¨'û ÄŠªÃÎ`Y®î:ò\!;Mu“.‰¨U·Åîý¤ÿBÔfJüFÖÓâ·¨u¿‘ßL ‰r¢M<ìK&yÁ" €Ž$ß…NC«¸ !qdd,Øâ€ðÅŠº0QŸ^…ƒÜoð0ÈÞ\ª.ØãÒÑàäuÑ™Wx˜âb 9D)ÂŒióÙBëêÇÒw9¤‹iíOàùŸ¹¨Ã‡£Ì=µVÿõ™ô;7}ÇÂΩݗ°9ìéµ”±î¡¹%2|p}‹pŽ E ã}ÚnÍ%'XXÀÑ ¬.ò6„±ã¶+M‡õdäBB£­q¹Ñp”ìƽÞmß{¤z÷÷ù4øª à­Óðk¡<Á¯¹!Äìd¬š£fâ˽…Ot¬îÖ4Ò7ÂÀ;ÖÉڽϒ)‡Œ bê…ƒ]?ï—÷«çÝþ¡ x©‰M›¨GÌHØV;½TzSs:÷›û‡öíæ~uþµíLðη].FìLðˆJ{ŸèðåÔãÍT.¢"û¿ÛßîhÓYLÛ«G¡cv©`(¿¡lÛ dû'¾/#ƒ ËJ)47¦ÀßêŠ9›ñã P?X»à E7щ¼aÌÉ*Ls‘oG5l\5¬µV²x9ø¡‡›i ã…‰¤Ñæûfí¯Z{mwެH.:½ÚØ´ùÜÆ°$wcxª,NC³ðج‰Ýƒ©9ö zGÛÝí[B`ÿm¥ÖîÄ#éuĸ¿FöMƒß‘|ûêäôáa‰<¿ø|/ëš/oÉm™Ýöà¹õsî\[Âßã·ÅL ä<¹¼ÅM3ÞŸžÄhr€1†¢ìšFºOŒU¿ÎÛ›ëtßI Ÿ¼Ûø­»Kˆš%2\×CnBk Òƒüç* asüœÚøÃhôUOÄòp8øS3R·uà„öhóbѵ y!GÏ7ô-àþv¾Õi=~Ì·Ú’á‰onÄtßb©oñ> endobj 339 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F181 329 0 R /F109 37 0 R /F105 26 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 344 0 obj << /Length 3345 /Filter /FlateDecode >> stream xÚÕÙr¹ñÝ_¡·‹ûxLÊÙªM¥*©-¿¤²)‡:Í %jEÉ^ý}ºqc3:ÎC,Ï F_èüã‡wßÿ Í…#Ns}ñáîÂð í8¡Â\|¸¹øÇê§5[máßÛz#„õ¯‡5׫Wüóo;ø÷¸lu Çõ??üùû¯02Iœ”N‰ã,`ý°ÞH·ú„Óë ·zõ×Ù=㻂EØê. Á ï°Dµ( ƒe.«WÇ ¨à]2€ñ$2üÄzœ8óŽÜ&ø´7–PÀ&ôê!~ôÿ+Ö.©W÷Ý]À´A»†Z]¯Y$„%úâ—²oøÎ\\ ­½Ça¨eØ ºY˰©jüÙòÛ:˜ð‡Ü–5ýôu±I²aŒ8¥‚l¾” ¥É8¬K^o\Ñ~‹ãWøg¿fÔC^¤P@ŸÀ5ý¬¿t~Ll‘ŒÑá^Ò+O-÷Dà#òüiTêzÍaÅŸ)å ê&@]­cçžéû]á4[“QYï è,!Q ‘à®à茺±–Ô/ži{|qd?Œ×ñ‘•¨ÎÂ/"”‰[KúŸlÖ Æ=þšVz0‘õé1í§Lþšuõùé¡´µh½‡„Ñ&,eêdžËxB7·óÛ°Ñá¹#([¨¬>¢EÅ%"@/¨òyîWùwV‰Î¿K°+­€pÝÊð¡@X}#˜­¼¦ & ßvéÿcøÿ)3P¹Có0w&º[\ ³§Ì3“pÁÉæÇC4‹O ²®1— )îl$Œfû=U«éèµ™eB Tм%ÖÄØìêpðÁ]ݼ}|zö¸wÛýOÛ·cøþ3U4<ퟀA´võñø@_¯_ÂØw‡8÷þãþé2|Û=¦Á§¯%]Åá›ÃëÕþ6B|0Ïõš¬wz@C èl‡‰²Î22¹'ù,ÿ%ü8{iˆ°£ QHÖz@IgƒÄ°à\”'$›Œò`Ðä˜,-}èQSÜ¿çE\úd,Öq¬!2‹®LUšá¦t9>(*0–«tÄ€’FH8í»õÞZÏ—½…5#RÉ% +NŒÌ çÀ;“Ì)8"#"~,²Çš Àééx óy2ÎFë¥|ŽÄ:ÆÛ¿fDå„/ÃSÖà:±Ñ(âñ8=¡Ñ‹ãp *ƒ˜ŸRš1þøÎñØÌ,8ê¤+ñÜc8$rJÛSÕyû¼ÖMÅ€æü3%Â1}ÏÓlRÜŒt G³÷Ñø1™Šé V§bÏÈ %ÜèEÂç†(žA1…´zÀz ¨(…J铌^œ…°lºä<Åóãý¡aFÐ$Å»{}›çUሠgˆ¥¼Ô ¾B¤»Þ>ŒX/ë@&ga<Ûrä÷y^d°ÿdÕŒãb˜Ýy·®ˆºW´Q!ž­Ìx ÏâOø¡@îoÂX6JdºÊɱ»ÎÞ.D/a*¦ÓU…¢“ˆRG´Pg&¢–Ð’¼~ÊQ”_ònæúïµ³GúOE†ª”ET¬aÄí΄!ˆ8­»‰Á°0D;>>wgbqŠºä•m@Õ鏿|)ŒÁ×#ßõ¹Öµˆý=ÀÓº’òþJ$K¬ Ï=–ЦÀºÞÏÆÔ!²?,ô«Ý–ø¢9*:ÁO l&w1ÏHiOâ·Ãd>´UDyÚÐpR³rN¤ó—ùê¨Ì§ûk²,¯/<éËW“*¼bžMe!d TÞÂkÉ—Ûž›銫ûRÜÈ%¥™Kèu‡Z“bîè)Ãc\3ÛFÉÖƒìgÝ£nÜÖXrö6'ƒ”ozEW?‘±mRÚÃÑ ôò¶›×o“°¤w¯{IJËéÚWfs4 ÈÂÙÂÌÀ…åõu·ïa+óIàFSb™O¹³Ë’@&JÈT'­V£Ì¦,Îü˜ìd~¬µ šÍüü‚³™`˜Îü`0g~¬øÍã̉Uxœ:™ë Ìïd²WçzNú\ï„ÅLçzŽ™…¹žSn”z c¨J6M®7¨ì´Œ´3µuVÊ—ÌŽUËÎæz§1ŠÜ6LK¢•n¸S‘z²S¢u. &KïäjœQJ‡ÇÐ;­Ø '“M#Å¿&$Ë›)ÛÔIVØ«™C„ËàCg/Ž(+›éĈ±óóGÆÚȶ×;'ad9\Éñ‡¨ARc±d­ž¦Q l“W×úOn ýxëcz¢Di:tgÍ娜TG.¡r‰> € µ>ºN ã‰5uôDut"ãX¨Ž™Ôщ¢ŽXPÕ„6òñÇpG[a·ÖÎé* 1:kóï{8àè3Ùé=vph𱤓:$¤µ¶K©]Åà9ÕÍ_z´8JDiéu7$ˆ.õ¡¶¾äÏ Ø.’Ô´>Ôhp™´ÈºhJ‹C ·À„`Æ„:4Æ@]Ç„’§%¶fÐÖhM²öìŸñ>yIwsÊ5ì´<’“ò@ aï y øyòÀ†`-áí”ç5b›ªd|׿D1ßw¨aF7t¸ôr±±’ðeöa‡u¥×ñkD–é» VB¦Û^lC„)B@hL+]Ǹþõ1i½HL¼ˆ f4bÒáJÎî>vë^·"ŒPz 8ã`§ÆFti½ÎOÅO|ž<ãý¢qK³ÅOœ/~b¼E™h/vœW ¡bUÌL§fi #ê÷‡0¥.†ø¶[EÐÙè¸?jþ»j§YZí4çU;ÃØÜØçò ¨:@‹Ò_¤®„GÖw^¼êa†Ý‹£Å £$lrb÷±@aéÀ%^·ÆZ.0Xš.ÂðŠQ˜Éæm£¥¼ó4ò‚åŠ@"=륾zfÙ¨;ߤ™Çþ% Kgý²eµñ¢U’Xm{e÷ž±fʇø1ôÙ5e1XeøvàL­)FlãdE†Ñ…ͺL_7§æRppIqnÞ‚c9àŸ/Sʦ°Ígëë#¹ 8Âù]‰3ýõa?‰–YÒìè}5 ë9Q–/6›€c[_º‹[/È—bfQÛÚ ~Xh+³mìb\ú5¶‚ók[GŽ£u¢ÇðíT±~¥æ.d”tÒD&ú½R|ËË\r~E¨/¥aŒKèrû>æ2WKJÓ³xL yKU98P“b¼Ê}R= ½=ð™&m“æšýØ¿‚>[]‡lÆ â’Åp-ºq›Ôæw_Åfï…D™W6 £ç¾fÝ:‡`ÛÄË`'Ûxû`ª ˆšb çÆ›h¤;s³m@æàd0®nrß¾ Èûm@Eœ´6`Üéž/[øI‹/Žn­ÑÁ%J´è¼\b‘ˆËö¹ ç%žs— ” ¯ ¢:ø +"Ö¥Çî´b÷…ŸD…04¹`ì¸ruoQVWp‚Õîê‹{þþ ïÞÆÙÑtdSa×¥¶5/R–ïñˆñu{'g¯=¦ÚÜàV÷ÌUHâ™Ü`£mƒÍœöñ8§jÈâëDC±¥ÍYº¨!‹SJ[Žv²‰èCÏýN:ÿúônqê^Uv^îû&S+¥^ão±FcãÃá¯1zªý›aâåþÜÐ÷çëDÃÇš†/~h«Ãô´K¬Ì ß¿OÈk¾ÚÐ|whDV4 y²²ûˆaÂw/Ùæöoj›ŒÏûÒé´›û¾ÿŸ ßæGY¥ß눵6Ã<”œA‰•¿ötûõò[­aZîW4žÃ·E¿Öà_gYÓ¶Âùý⮓ÓçXZ$õÜÜಋ“ƒ’`\ hÅçÒ½cͦÄ· SÖ?i~’¥;¿aöœ€0km9¢úÿ–†’‚xÛÙ ^ñÊú[¿Ý9f!³'Xøwз¨(WÛç_¾Ùíó—û—¿to)> endobj 342 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F109 37 0 R /F181 329 0 R /F105 26 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 348 0 obj << /Length 3812 /Filter /FlateDecode >> stream xÚÍ[ë·ÿî¿B¥ bù^2M Ôh4Ò´qQq`èN²­TwR}:Ÿƒ¦ÿ{gøæŠ»+Ù£0ÎÚÇìpÈyýf–ûìù“ß}­øÌ«¹ž=5³šXÚʹ儊nö|=ûqþ·›o’Í ®ç÷pöv±äv~ Gw‹ŸžóäOÏŸüû ›QøÇfLÒ1 < á]ß<ùñ':[ÃÍof”kfŽôfƒ G»ÙOþúäJè-Äq¼Œ­åYᘞt eG:8_2"­ôd?{²jzŠ0ËgÑW™W¦2p¤A,Gñ,±Éƒ" › ¢Yée’µXYB5ˆUHO5;CzcJá_ö¨Ї`X»ŸkTÓ~!Ø|·`Ô)ìþn[òiALšê#ж‡_yqŽpøEÚTâÁÞ€s$oáo[°-ên=ý»¡"Õ’Ùùö=’ -hÂ)L pW+ÍlÉ;¢”õÒ\í÷;`kè|ýËË«Íqõ³?{AõG»ÃPóýÕË»ã['ÂýõÑßûlï/l_¿Ü>÷×¶·áæñõñåÏáâzµÛ„‡>;ôFbeãÒ¹Û’3"”:ÇÝ.Ö°aÄ€ÍÓaÝi"x²Å] Ý-¨)ˆ’ÕõÎÉ äo Ç36ÿü4@p#A5l¦'\ˆ±º´]?@t3F‰Q0)\A`¦ÕLKA~¬eÇšh+`¥I§§âC¦ ÝTxpÑAOG¢C Ý´EçZzTòƒÔÔǶ@Ôv®)¡²q#j~µ Fÿ¨ž²ð”zÈwÚžçN0E!?.{QFºŽ=JöR“”‰±p$T¥àmÓ8•d¥‚¬SS::7]k´š‘€áL9Üx&<µõJxÆ ëºÊÖÒœi†ZRIÈ4úç׋zœWÓûT) $Sh[ˆ¦ÁN¨]/„]ÚZ™„¸Ç«ÇòA¹4r)ìEÝí~ñL®ã¹ÁЉÕëÀ&t³q¸ef! ‚„^)!¯öqÝþÛ%š÷Á Ü»½º¾=ž\w7†§ÒJïK¨’H°d®¥åyñÝú4„`LØ3êQqN½éxU>&ΗžwßqáÉhqb:À!KŒ «)SÒ¢WT9­?£Sd"´pM8z*Á†m‚…÷xqܨU"¬$uïôÂXb\‹¤ðú髤ÓÕm8/; ,† wçü5ŒŒBp§£¡«^V ® Χ Å Ñ7” F(™ðPY6V"C¤ÇX“üB{•z-¶!Ù+s&b5,"¸ÈŽE—†Ÿ`¬nó "‘\ù…Cú6T¬üN´‹ä¥vñ™k— 3ÖsiÖÊJ¯âˆ§Ü¢ös{%ãfG°Ý“Ù2,h‹+~‚OƤ¹À7ü ~ôl¼æ&ù™æ`»[û{¡©‚‡‡‘³=¯àN&L ‡ ÷ÔE®¬F̆ IT®ÐÛHsÂÌðò½©Þ8)+‡1‚b¤Ç¼Š >YÌúPÂãÓ2Q¼o¹óÂŒ¬§Øó̘,”nYw$÷™0P@PÙs$š0ÙïÙ&Nô.95ïñq66kcúRUbà0ÅûÚ²YY½røyôz›Nf^¶4O9Æ‚v%j÷mQ~Ñ^d{çÐeA¹ASº € ÂX¿WëÛb€&•½Ê>´…Â<¹UUfÁó>Àö‘>‹åˆP Ó¼Î3äV_Xˆ€Çéù?z Þë­p¸eø˜ò8n¥åàãÈÐ…ó²ìªµ©º°žÛi½ÖH•ãjîD ,±Ü¼6r8EWnT÷[fŽj$ŠJK¤eàzøÎ%+X,'¦žZÅU½Ãݧ²-˜Aê åª ä>f¡ýVƨûz ¦”{EŽªKYÜÑõÅ^VÆg¡~Ö)`k؉Nj„ËÏ ¼È§4|²n+es8ñ˜¢qÚÕ  ù”!3 ¤ë·¦zðDiBó;Ç!pÂ1¹6hÖ?¡\d>çØ.7DehÖ~ô$ÆŽ¨ž% dZÀ«@%…öWéµ’,,ðm~í=XWuÒ²¾ôÔz‚çœßÜÑj,áØ£ܰw:Òcí,Ø£šÞoo×ïÛ nï¯Z»Þ·.Þî]–Q(&…íá—8`»uÝî[ÓykÏC¯/^Ý;¼¼?ln·í[k¼5Ñ×N]¾ΚýpÊΨ8(?«N{U!e­wT<¿£:¥o¾£â§ï¨(o¼£º4Jã€J§uá¥&ÊÒ˜ÚÀ›ËXÀs+‹‚?ÍŽù«ÒlÔ¿(Kα̵íZkÃÉy[Êl¹ÏƯLzçwÓ .KØ3jÝ5ÜÙ¬™ª#OÞ+uS¿}ꮹŨ#’V浩¿*(–@‚<¸±‰[6½³)}Q´·ÿ£Áž¨P'ÊðÝÌ¿]eÇDp5c–hò¢‰±ÀoÒwמÆk 7Þb~ÑÜÌd°®¦nûWÚöä²èÀ—=)"Œ›ÉˆI©«ˆÉöþ/–ñЇ @ËŠõ–56˹ï­`i… |at·œëm n‚GV Yq5¾j¿nO n‚—…Êûߎ “ŠqNÆwñ1I:m“d `7ªÓµÃŸ[J(C^`ŠBMlñ—=õ,¡Lm˜5š.î‡áÁVmiÓºaÓÁößÞvOÁEœQl»ÿO3EàÚ$„„„ XÚ?ã ö¿L·­–&šïLõJr«î¨~=չШ0g@Ÿ>F_¢C}+ëÚž÷EFK]õS×~-h¿\àg6sÚš1î§fyÝk¯gSÞ®„=õ–“ýó]Øœž$kަóMh@Ý­šÔyÕG€0;~ªN© Rõ(úD^JÉß\¡O'ÊÏQ¨ø-útR¡C¹IN¦œßešÿæoX¤`øÝn Ò1Õ€„k~‚5Ä%HÞÆ%¦#e¹ße—H¿ãšãVía`Ú(h—P{.‘<àóÁ¸d$†Oà}!.¹ÿðK€F&b™°Éšôs™ªÝ·} ~åÔ>þqd‚¬˜cEÌN “–·ô%à.j† 88M îög}T¦£2šðO©/üöðSæ÷8ŒCÀ§5LðûÍI`Ò-ì2j™FX'fÖºzú£ô¬8TŸV¤–¢®zÛ“,] Ó¸fƒŠKMâ’ŽzvSciLðê[å\ÂÕÙ¸D [¸€®kñ60ѰöâQ´‰¬ýµùåÿ­6ŸNjs ”¨QP"*m¨?¼ë@QKÕ¥…ïàvJ$ÿ:ݳð endstream endobj 347 0 obj << /Type /Page /Contents 348 0 R /Resources 346 0 R /MediaBox [0 0 612 792] /Parent 345 0 R >> endobj 346 0 obj << /Font << /F52 5 0 R /F109 37 0 R /F181 329 0 R /F107 41 0 R /F105 26 0 R /F47 4 0 R /F1 39 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 351 0 obj << /Length 2971 /Filter /FlateDecode >> stream xÚ­ZY¹~÷¯Ð£XÜæÙ$ö)A²€ƒ Y,f‚xaè²G€FFÒØ³¿>U¼É¦Ôï>̨ê"YçWEþíáÝ?I61Ä(¦&Ÿ'FÓõeéx?yXOþ7}˜Í)ŸfsNÙô8£ÓÍŒ©é3ÞO?Ãía&(Þ23}‡|z†§H´qf@z6fº€W{ø[Ã^Ãwn2Þî=¾Û!ŸWÇržáÅyï3IíPÛÞï“|Fõ½6 èa®Ž¢¦_÷…£]úAN3 T+÷ðe67aª°÷ñG\ÚiÌhçÖéÖíåäÖi/ãpöýeñŲó+B*‘†± /Nztú~öÛÃ?'ÝdN)1R:äòR#o'¹¯îÞ²8Øû¤-|±´ä(Á xn,ŽKZ'ê ŽÿÃO”ê í×­„JM¤‘0-;µ§éLfI‚螊o‰ ¬ç)$†ÂÂàG8²mk0N:9ɈüŒJ³%ªWa°E¾6=*¬ËŒ+0=°¥c!-sEZúÍÒÒœô Ó[^“•ÖÛ…µjKÚEÍÙ\S‰>.L!¦ÚÐ ç–¢.­ñ>i-šj¾ÓFŠ)P_.›FTÜ«Æ^fOcøYaxxÄ@röhåÌþRyª)º(8à':Ä&P\Å÷Iˆ¢2$DÑRȾS™ÉÙ ¢J\Úöä~ÝàÖ¨i+P)n§úÙ]Ó´ZÁÑ®Ñê^ Â¥)Uo_¬;ØÏ©ÎÂÝKð“ÝËluu•&ôM)ÂüîĺJÚÅwÑÅh“ Y)é7ÔÙñ¥LË;¹ß= +[¶ËKŽ™µªÉÉî5ÌV¿ ãZÉ9½{Ó— F­85Æ|I‚EÃHrúm»_kØ?•¨ŽO)–QŸð>v³¼ ÆÊ¨È©Þ)ñÀïXù§…qqå¢+ÆKƧ;Ù-Ù Å#åÖÏùÖÂ_æWÑ\¤÷Ÿ€~xI3öžQ}킟“²s¢Q0™5²µ¼¿9]kú"Xß íáWãå+Rp‹z£åR”,mší)‘\Ĉ»m¦RÖGS Æ^/à†±Û÷M0“I¥‘ ($1jÄwåÀ*0f&‘Ns%6>½àåSv¼Žx¾˜ uê„üôÐl:FzÆÊÀù/;ÒÏ3ÕaÐçoÑ>øäT¡¼_Eÿd4< P¥&¿J¼ˆRǬ(óðÝ V~2o°Æ÷˜E† ºb"ÒGX»2Á[¼4é’Õ~kñÑ0›kvõQŸÕG 6=,™Órµ?·Žqð£`«ºÞ[„ •WÄmV^çf3À€òX…ÑÇ€Ž?öÄqò ÷ì»sòÍYÃ5‚’ú~$Ö[ ÞSÔÎh_^ºØµ¬ˆ’}³Ý¡Llw(3Ò°é’ü+l8U3Ò§¾i7¨TÊ ¥á7c‘¤¬ØökõòTêå©j§@Ùí »à§Dò¶ž·cñšSƨ/½`Ùç,>§Þw¾/è M'ˆ¢ˆ¿¶‡Ó ç”ðt–"ɰ 9`ãù1JÊe"h R(nuô õ²¬Š¾TBEÞ±Aøõ ¯ó.Ät3(0ÂóO›ýå©|ôæªà—´¸‰OOŶùÑ7Å æyšü7·ºÍ-úzcîfƒ íˆÆu ~æ'š;<¥Ðë…Û M‚›Ú™K5sì õú†š‹Ó¦ÖòúÕ>Δlï×&ÑåO+aoôÏ6æ-lÔX2€ôÍm`}i¬26Ò!b-`÷ÔøéM€ õ[­~òœOUÖiÆs ò½íª±U¬ ;zÒ[;¯§>¶ÝŠîÂ8”ŸíĺÐömxE´¨ö§2ø¸HÞ÷Õky^”yσàÜñ=pµY/%øœÒ¼ ‘ª¯¼ÐX{ è—/¾x°ˆ.wvI(ÞçB1[Ü+–»5w@Šp&}Ólb­Ü»¥kþÚÓ´üc/:€–ƒ­ðº 1´íƒH|ì˜0J½Û|Äú°-Î-œ–QÕY›æ‚SÇØ Þ¼}‰-¼®îÝýÁx.{ÂÓÄÑ—SÛTBRx"Èúž-»®)*?vðöïß9Çò8Õw¡t¸l“œÍº`> endobj 349 0 obj << /Font << /F52 5 0 R /F118 40 0 R /F109 37 0 R /F105 26 0 R /F86 38 0 R /F47 4 0 R /F181 329 0 R >> /ProcSet [ /PDF /Text ] >> endobj 354 0 obj << /Length 2984 /Filter /FlateDecode >> stream xÚ½ZÝoã6ß¿"Òâ¬)~ ÷´ívŠvq›+P´EàØÉ®'öÅÎ.Ò¿¾3äðK¦d¹=ÜCb‰‡Ãáo>Èo®_½yÏ »2M¯Twu}¥ù•êyÓvúêz}õku»Ûmë7mµ~¹Y?ïo—‡ÍÁ5üÖÊÖ=mDs8ÞXŠÃwÿpMöõæp|‚×¶z^åë×û›@m?¡?<ÕºZeô¿_ÿëÊȆéþjÁXÓKédÎÄ9—õBVÇçD¦ßÚ¶[~:ä’DÂTœÀ‹ÆTÛ»Ç"» -†¿y/ùUúæ õ½PmÃAé Ö7Œ‘Ò¯ë…è«Ï5«p®dhCU»ºcÕsÍUuÄOVÌÇš±êÎ}ÅÖí_xµ®…âNU{hÞnVðYöµZûøùƒ[Kê2õCcŒ íë…°Þ³ã8ŽÀ/þ‰þðùÅ1¬œ¯ÞQ/Ç eéº<ãËʵXÎvòDT~„lž·u˜?ŽͬM!lÂÀkÉÖxÚÜnhVý×¼¡&êÌLµ¹w¿‰êpжmeµï5gV”£{? 4´$ðäÖ%eî$³û:jì$D2›§ WkUù6^pÑô­†_ݘžæ;øþ©ÕÝÝa·}nâí~,eµ»-ì¾øqÒšý¨Ì4fƹžaÌ@™›ê>j6dÆ ïë¸ÞÞ¶ õ"Ûz²dž˜ µsŸQF+üv]ä;—~|Fsµ†'¼Ã'ÜW"]×F XÃ%bfg>©êÓ¥seÕ¢dêåùka5½C<á{—O¾!ÂÉoô\€ž_ìÒý‡a¤ñ,öNààfü@c¡h™HF—‘|©½ß†Í%¹ÅV«w®{ ëâÔ@32ùxb ‰?«8™Í²L;Ó9R¨)·2cjRÂït¡¯ÜRòl§w²‘J8& úéši}˜}ƒMÞ÷=nFå3ª…í X+³¶ ¬È=Œh}—(* ƒð}õ±v°uGfº?ð~|·+·5ðS€ sðÚ2‡§Xйeêµ2 ^Xc`¨Öq¶˜³š`¼z½s ›O7Û}AÆaÓxN\(Ù)8Ú";÷¸FAí7«\}ib°™ð= ¾õ« þ`)`gH#h(/®nzÝ2—ÞHͼ¼ï€ ¯~ÿv xþPkÝ(¥}ŸÄÚ“"}‹| 8Nm8+´gØ0†19àxö¸¿¾F¶-÷cÉ–eÂO+ò‘®óÑ…½Õ÷έbŸ ‘-Ü`Ï}í|oÄÕç ãí¢qh4:®ª€Ò™Q.|mÿCˆu:?–]8‹'RhR¥-c~™‰`(à4 JV˜Ó paš— „Ó0ž“MÄÕ‰cæ’à=bxŸp¢=nè6d>`³¨+öæ¼MF$Ù ÝçuqNïm+;츇 dÉ8ÂdÎQ50Þcf[ØB¦WÕwN H,P£¶ã@`ËÛŸQ.9ÖÓšwC@úÛÀÀÇ⨢‚Mê6›ïÓÐn…¬6ÄÐ~&DÑè0,¤…Üä˜ ¯%ÚŸÜl ã™æYX„áþ—žúx’ØwÒKÉ;u6ÇÛõËvß|.Á²jLÛ{²rtp¯aÓè~¹:~©!\:Ïv(°0=üã[ŒÇã2û±‹wN/1$Àå»§Œ£U²êM­ÛŒ÷”_ñ£Ä¸Zx1œ)`ÃÎn?P)ãÝE{»qÁA’œÕÑTZW°«$É#`óʰå÷Ib4;´„1e‚‰ú¼ÚQO_Rç÷5ªãcÅÊ{N³´}öÃÑ,¶cðÆÉרìÒ‡‰åŒQ6hÔd’ïSp¸N aç× ‚ö[扜vŽ„ÏÚ£¾íU»‰©¦GÿhÞή°Ù• dWøe¾]Yž«š™ 7­~)ì „×Î.µì™4²‰S+fyó¼G—$Ûød+eâK@qûâȰ(‚òHpˆLÁ³–1<_·ok˜Å·×?ƒ¶xõöß¿ÿ±`#ºmŒ ˆˆÕ6Ræ'þà†,¤ê™!œ‘î•$Ûí%íºFô©,¹{o(–}úAY25¨ ,$?ã B%D¡Üà0O¨ «ïdçYŽÃ•P©%"­Ç ¡Ò ÄÆ&ºOÍ#¿ÐÓð-Tß@ŸfD!gzëBXw!óéö+úe  [ ‚¡“M/2ìÚÍÅ®Ükp-‹3ÆölÆØ@3æzÌ‘ñÙµàÈ ³IÒ½ëMµH;ƨy á׬5KØÓ’Uaëˆ;Cª9îÌ& §inÛpÑçÙÌ;›äþb“Üìó‡rL%Bvݤ0Ó5ckƒíÂ6 þÑ~œòq2³X!2±»t^±J豄ÀŒ@ºír8»MYº·uë–ŽC3О’ý°€8 õ¦i›DúŸþs]‚z¸Ù•¡ÞÇÐiJ¾…ŒKÂB=þ±`;Z5¼ëÓ É ³§ xZ¡<€ni…¢“î`¹®YÕfM2_–Í¥ÓœµxvXšçš-ÒÀQKrÔ2FGÒYð¾fI>M ­[.a;Î÷ë¦h·A ý1~¡š «¯›51¸0çMÆLÏYð}–Ö\¤¨äK8šËLY2^6å©h=©Èóˉ ëTÓ2IQ7 éÎH ± kŒH³?#J' FÌ-ÁZÚ¬Û=¯¾IªÊKçsbèYä›Ç &¦ƒ®RJ肪žKÓŒúqƒ¶ iå¡Tn‹Ëlxj©.fë“ Ñã NåÎ$a³;e@rPÔÑ$:Ù!/œp+Wwélذ‰@Ó°ÉÄÆ7~2ÌâŽäÖ¾ÖW(ÑL0±~¶CNÒuûr7,¤a㩾H€]hÌϧÒiù÷ÓiTöÒýœ¤ÓØ8‘Xô±R„Sétgº’¡p¿GD¼?€­õ ?“{8˜0jlFƒ ZR¢,‡š1Õ‚aÍDXä4Á"CÈío4Á"“ÝeŽ œ` ‡ ù–!æþ?R aÊI¶ý@ß¶!F0*¤,H? 4H˜¤,žDO¤,HŸÐú@ZGRAÓ1eé:…cD;Œ;GOæL{’¯¸Ê‚’éDîcÎ$1±¦Ç† s‹|ƒ°CußóœV»íá»RØ¡›.–Lr‘­šsmÉ’=î}Þƒ?QóU ºíD`Ì ¢^$dÙHŸõ©B„­37½³]©ó©bIÞC"sÃq‰·Ã Ëßæb§³%–]#CEmÆ ¬ëC x2mgbF7­ ã Nw¥øùº’u°tf0¼N£ GÀľàSˆSÒ3±‰?Îu> endobj 352 0 obj << /Font << /F181 329 0 R /F52 5 0 R /F47 4 0 R /F105 26 0 R >> /ProcSet [ /PDF /Text ] >> endobj 357 0 obj << /Length 3476 /Filter /FlateDecode >> stream xÚÍZYs·~ׯà[f«¼c\ *O¤HZ´iR%R®¨â<ð”ÖY‰ I‘f~}Æ5‹™]ZN*¢fgpöñõ× ìœ¾ú~¿[¶µZè­Óë-.ykŒÞÒV´Lš­ÓË­¿7¿²ŽÍþqúã÷ûœu[=4ÖÒ5­ííó–·ËÝ™d͇_fœ‰fûð`×÷*f躖3z}WW·¦+Ç=:Þ··WM´Òˆµ£õÅhÇG‡3Ë›#cjÞ2fBØ<ÿn6—]ßÜÏ:ÞÜÎxsÿ.f‚7‹kxzv_móŸfBÃWlíÞÍæüÖÐUøn_°«¤V¶¹ß×¾ÃÅL¹xsæÛ鿣ûã»c 7ÅÍäl¾Ã"Ïá×ÜmmkÎ{ÕZËá·¶ëH  !·Ý|žÍ••Øáf&yó•Öx ÿîÝ71ª~­[nu!Ù÷;G»¯ßüPªjù¤šú–YS v8>h]Û÷îÍI}4°È>Y¤Ó·Û· jQ ¢`›‰ŽLæ±xD£@IŽI«g­ÚáÎ#+2à|ª´@T¦bà–)•9n–Š™f1› †ûXàRñ§ÛÚÒ}·Íãlnñ7X·ñ;XÖ¹ûC–‚Ce¶ñýÌ0‰Â~Š9ëÎøàÏ4ÍÙsZÆCLÄetô“–£ðŠëŒ*Dzptp:S]³=S¬y}JHô®fC¦Uý´ ™V(35üëã£ÊÈ T™Mµ—[™àSʼðz%üòû[Ž`v#q+bça¬UCà¶fÐ4)óqÃ[°€&¼¦D˜wT‰Æ¸çBÊåÔ¤ èÓq±F²ï¦F&ˆ”o{èRèåäøýieZM”Í•ÛÒÔ=Ϧ(óê`HèêzºÖ‹‡«;”Ü}m`Óv2ÊáÔIx°݇ÛàÀA ¶ðÏQŸÐëÎ÷ á…»èŃº–·8êmÛ DPÿŠ&yò¦¾aa[am8„™Û»™j®jÛõÍG·K‘S¹ÀÛ¯³`b_üw‚ç7’‡N×)r'(¸|äMä@ƒ`<„ž9€y×D!Àò缃ð»8 73 Ú¡Ûás”'ª<*ºèj:ÜÃýó»„h„£ã²twieÓî%"Æ'·®´àå¥ÿv>‹Í‚ éEG¦QsIÉø2\=~{zðóöa-P±V³sTûþ¨†¦R^è“m•v”sá—¼eÑaõÁ±5/ˆ—à0O}ò¿¯q.¥›Ç\Ô‡QÐK’C('9©=¾ÃA£ËFFä ”W¬eý ðœ;&Ø™+Y}O¤×C`$2Ϭ¤ˆNOޏxŒ‘#Ú ~¤U¼ÐD7þ1Ù½_ j„ÀŒƒih…´qœòWÆÄLØŽˆÙ„„(ˆe ¤`mDzœððøät# %Ôý7cD àÏ Æe|À?Åïøóœºø]á+R¦}|™_X¼ÆÑqÀ"8Ýo•Íø+šC|~[‹¥º•±Ë`QC”š–‡&ÀÛ-RŸeŠŒVÈœßoR˜F&ÔÇQTLV¡=y LùqàçUY‡ÜÕ‘·N`Iè‚©¤½ê*ÉG]»ê‘¢:u/rÕºŸ”\r¯6Rã¸X%ä**«O«^¿~óSE¯†¢…E‰K•“òE¢@ª—!e Y„š‚&+ÂÁ(¦(yá|àŸUi¬òm^Dò‰}ÏyoÛ^„^‡íŸ¼…½(* T딲Õ]?/.Aþá j~roØ€ûÜûfë2d=®!Åß"#ÀfY™ÿØß‚¤‘Ê_Q(ÓÅ‹Peˆ» ®/xŒ¾EEˆ¬=¼C›'™&_‚]EFîeù1Ogc vTÁV€z3–±?3XëéŠ5 ÃÈáã¿e%*«:(Ç,Cëë”sç9¾õû0Î6¶n,Ù ˆÈ VÑ)'e¿Ô¹‡Ñ<ß~…ÕÈVHó2N3—€ÝÃèCì“§$:ç´.K+bN*›øâFfp p(ÓÉR®²’y’TÁÄâûñÒ°â²rsþ[MvØÄ²ŸUÒ”ÊGÓLåÔ®…ÍÏBò°| HÜuƒ²¡I ¥ráKŸ*…ýJ§Mêߢ'yŃŽa©…ˆ-ä`·&í¶ß8;ÇÆãå™1ð0|¤¤fd3•“±f…9;e¸áToØÍ@†Û,ÅÇ^zYÙ`Z(D.#baÐ äÆëÉåK‘p³¼W+t"VÌ ºÒð¡Åµÿ?_¢û½á¡…kš2eøÙ…-E y–¤Ìõšàìîsõ¸Œ¶uKVåí!w|G‹‡ÊòtQiY_ۧ2 ¾êj[0Ti—<Å„çT?΄Ÿ Ëëê³kïb+êYi–7üÎcâ’=|[µAl=ðàê ,uÛk^¢òí§³{*_)“‡ôJ[ŒlΣ<ò×мkµŽ<÷ ÞÕ -뙀kè·ªÂ;åó=RéaéU¤•—Ï»ÇG5öé6Ô ÏJŠ ±^‹WXœ-p‰´£}ÉŒ=~¦¼3Ö´ÑY•PªU7Ëgÿâ6¯Æ%qÔ›1q«èaËe(*ØV)1( ߯ЅëYæW/£—C&—û„ßE(–Ð=úçqÕûªÜ<ɇ‰ÇULUB5äƒmÅædËE™<àfS(Ït]_Èdö9Ãî/õƒC¼ØPÍ›U¡ÂB>Ñ%XÒËçYâ÷uG@® J÷c†Ž>ÿ÷ÆëzýÄ(úñã—®§Ì»Z›êZ“ꙣŽ; c P˜º%Ï•O<’5À—gL‰ l€|ÓÊÑ”MÇþ¶Ï iy™W]°xêR0ÛÇdçKZ{¾JBÂ,Li©ˆîÔNÐvÔÝó½Iùu=oîæ k™îÆŽq7¯R bü:;¼;pë9áOì+‡96“8Ò.ªH¨ñy„Vñdʯ²e60ŠBÕ…ÿ)„¤Zì²UlpÑåþáÌõ|øZw.cbÙcVZ¬¬ë‰­Û­ Vš|üÅ‘®f'Ø 8ÄŸ‘ZO<,¯ª {¯VùyµÎ’UW“öm }!h$,øß--¦4Róá‘å] ðÒ°è¶šM^ΕZ¬q.ÍjdA³Hàqš¤øò¤àc»K‡Hˆ¤šebÖ§Ú6÷4,nŒðYjñ%ÅU2…)&ömA?¯3åIþt‰k}^ýg¤Õ×ÕõuÜLkð¤âåT®VÎ,lßW&«¸ÑÈ]£uñ器±ûµm|Ç˶ -MÝf«–®‹£•ãÕþv˜²e­RY»Nx¡á:¨íÓuPÛvÄQŸ²ÃjÛb‹\ŸN]Î@w¸lŸÚÚx„bó2Õm^ V”´œe÷ò}eN­:+;Ûj®_zŽG½V ÖÖ®g³ÅÝÕì=ç‡á·Å¯‘»Ù¬Õª/ÃA-O媵éæÂöŸÀ¤‡P4`ªð™®ôm3/  »lú2ª;bõ ±Û/—åÿ[LU×ÿ* H¡§lF˜”ÚèAZdj‰É$PKÑ¿> endobj 355 0 obj << /Font << /F52 5 0 R /F105 26 0 R /F181 329 0 R /F47 4 0 R >> /ProcSet [ /PDF /Text ] >> endobj 360 0 obj << /Length 3730 /Filter /FlateDecode >> stream xÚµ[[o+·~ϯð[% Úð²$wSä!A EÒ¨¢hŠ@–ìsÔèX®%ÇA|g†Ãër%;H`{wyÎõ›!ÏWן|öäÕÐÖê«ë»+)mg¥¾²£ê„vW×Û«.^–ÿºþógßu5BGe©£é$ ¾Ç—Ë•–Ãb»”‹õÒÈÅi¹’#<Ò×ãRã¹x„Ÿ'|Ùø/ÊÂ+~^™Å­ï‹ÝþñýRâ3ôÜoSã{Å?.W¸tXJSQ‹…õ¨õ wíÛeï—öƒáÛ˜&{$ÚwË•ðƒnð-ág—‹Î3¤wCÄ ëDïò£0:îàeƒÊtvÂÀ·°jÃôßû×xä–ßÓ >"[œågÙNøÌsöå2j ×ÌûQE,ºŸa`-6¿VÌ€h’0¦`Ûáµl»^®ú1R×÷âŒN`+ë>æÛêaóµNà··èħ0Ä îƒ¬ažÃ¯_–‰ù8-ŠêÅSqà QÙwLå³ÀDBw~O¬\9+ߦÜ/ÉÒŒ+E­Áï=QŸãZÀVÒWÙóG4[Ð8 «Ã’°ßåãGÆGVŽ´Ý\’ø}JZ¸fUÆ¿ˆ¶ÞÓE3?.Í| BvÝè„ôÎÅurƒ”ÿº¬ÿ€ßzñ=ÿµ¥¶“J…1¸ÙÝžU“DJÒ:s¢—Š&ø[àç´µr£¹j{n*¯Ûv蜽Zið’ÚzŠ$ôvKé,Œ‘ô&3³0¶§­÷¦sjÈw®içŠv®ÃÎËõ´êœŽFñrþÄÞ'*αÁç•:%Ù¢4òܬ K¢æêQgêpbMÌ,uiTÑûÀˆà¶àqíÿ€Ñ^d:+†—›[œÁ[+úM²1o‹R±žÊ°jÐ`X#h;*C~€¾¾’èQ‹½Wâ~ñn)m •T創ú&)45†ÈƒIu¢<2a%[ÐÍï£G§ S/#/ÑXW BšÒdïüH›¬FjíxàÎ>2su¿È6!ƒ[dhÍÎ0o±;ù¶œ+ð9•6ı…ó’f:°x¡÷‡bwÔãàŒ øw™9ðÂrñ¹·+il¬T7Ž$ÞƒëÐ~ÚÛƒe¥Mø<y»6ð=ùÀ*B.œM CT.:zïÃRVÍ£Ÿ3…xä ’˜z·d‰1U%²ãy Š‚±6˜²âÝæë2Sv!…E³ >\.þÁ(läðIÜÀ÷Ú…¥]fÞ¦ð4 Âà;¢^%µŒó×"€&$xv¹—Âþìå(NN=¶Ò}g@=fâì¯ÇSØãÉ`§Qh´üså ˆ%§|+¹Nüì-×_ù9›BÑAygeg†±4¨K ’ìdŽíEùQo2ÙÓ{D"Ÿ¾…}1fáý}Îz0X„÷ >Rh#E0BL– þïÅ¿fÊlÜ Üâ×þOðÏþuÖWtGYÑ<2±þžõÛ¶¼íÍ2Å®ÜGŒjuØ­Ê ÞyÐbñm'w~ pòp Q¨Ž›ÞÒ{•Ôˆ|ëÀ‡Ñ Ÿå…z©ˆ9O´KêSªwä16……6AŸn#D¥éª ´gòù%41œÂi’X| ˜î¢kiñ&ÊÀ‘¢ßþä—xÚÇ÷FzâévwY)Jœ"uæác åoq+SëÑGÌ`†¬°ïpU!jýÐV\Ù—¾Bö 1Õ陵za“RÎÐpyOžØaòš†9VÝ?NÇŸŽ§Gù´95\¦ü®"¢~eZî1Ý _'dæÑ%ÒFy³Ì·ÙûŒþ²¼½cÛ ¸9ã¼ÉÍ:Þ`Gn£ï-“¡æ°@psÏdwÞSbìкԔÄèMò²’\ElBW©Œ8¯–ý…`:QC;˜3‹ÚÆHÜØL6kD4ö¼:Ù®Ç.†­mÀ#ˆè‰vHtCY´KõAòÛ—ýC÷¾¡ ZtZDÉ %cTŸ*a˜r™@7A; Îvýh ?oOOݦ¥§’ÞH†ß5 » ¶¦ÊJV°BÛΣ,ðáY©_,ÃM’ø–c._Êês—I — ÔƒTY(«¶yÍ0Æ®B·9/Ž çGT›U9žSÝçT%´ó>ïû©4ç³A\¨¼Œ‡9ÆŽ|}œˆã¡¬MÛ"ñÛÍ=õ6­Uۼ˪…ÒT(RgÉ×A‰b8EØÑι¨Ó”ilhÊ+E)Ø&†¼¢Hµ#ß‹ò•ÌsЇl%-ìYîP‡&ê—¡’j&…+d¨ZYšTfía¬ò‘­Ó°z%l'T S›ÛÝý©iôEEuR˜ÛÕ[jTôØEy»ƒ T€÷TÓíø<ÙR©ÎÉñuÞJtvˆŽmFô’&ïÎäÐiW…®Ï–N—wàÍw“*½øª)3ácN °;±ñ#×˶­¬⦌dw<­ê×ñRU¯çÂ5ô1N…<»9è£ÿ¶®Ê­Ea2¹&犌keìnBÃsÊAð5„F"€0Š\ü' ™]ÌèÝpÆòqðÄo„Éct‡÷ª(*¾W+Ê ªt/äŨœU(ÂLFûÅE_f—„ñ+«m œ+¥xiák|ðš³^‹à1€±°ZV6}©Â}B]Á¿ú>-c·ºëíð6Lê:[ÇzZá!jGbPÐz,z«ÇO"Š˜šzß Î䨍e-C7›¬ÅÛ¯…¡J•Òþ’‚R9¨×A`=ä¥8Õ´BÅ8k¬¯`ðk<^kç®ïzá2'·½½[öb±~ÚŸŽ-Yi¬èO=]KT§U6óæý-˜¤Yü|a‰²-«óÞvV±bïRœ qâè˶\rÖã˜EÁ]â YØ.¦áƒjk4䥒`ŠšÀkÛ%f=‡åßÿð3·PzÕ¾p÷od-{'hV]Î*Éj›r/ǨuZ’e˜ëªî0‘¬É%Ý`b ,ŒÑhVCQv,–Wv(Î)Y!võ¨¢ðÚˆ4ìÁ6#Òj‹»Àœæ.Æ}•³ÂòS²cÎ’ä†3ï #¦ž³‡à6SÎ=2‡Á*(÷‹Ÿ0åNÌ)x'œä&VÇš8µôGî,nÜÜ š¸Uí0¨®ûíòÓÏàh](ÓÊÈÁ€ïE®žÍÑÃøéO—Ÿ á°Ýó¨ŠÅ4ä|¥)ü{ …LU*‹UË«Öô’“¥´ÛáœüÔ8–Ç„´‘oML–ázAˆÍQgÇ!5óäg­­>Coce80·À@.6Üäè58 "IõÏ8¶)ª¸¡"4N˘¹lA½V-‚è{.|/ ÷z&™¥–TGl Ë ÍúvÂD£ÉÁp=gÂÁtÇeÈO»Ô ‡Hžêu+þw}‚Y¸öo ”³Dçó@Ÿ6xò܉‘CÆ ²`ƒ°HÖéãúq·¾Ùß6ó ƒ›Î Gèú…Œ!70é¶ÛgÖM5#ÿéq½»?5WµAË«®êƒr¥^tþ wYŸò¢»Yb3!–3íÙ¤Pf g“qd[wÕÉVÀ1ÞÉ¿L¼4oÒµ."E-±B–“Äd]à KÕº¯Ëe§FÝXƒL¿™ˆ*'ÓAV‘*>!|i€mx¿KȤåÝÐÁ°w+uñ²$uÏ€,¾¾! €Èƒl^ÈVYçoH{3Ló“^‹ò¬îå4GqFˆ¡¢ïç²2¸…ðyE¾/…¯ÅÕD¤àT\ŸaPît}¸†cçzl—ç/FÒn¨l \I7¯@´¨ZÈ2è‰9`Ë›2b!f3bZ¶q†¼ò~µÙ R¡â5E!&jØT~Ô»õ½.Ø’ì™Ö`xa—ÆÎ_>ÄÆ`‘ƽÉ"-,ÒØ·Z$‰ _J²Ý›ä‹ãgå‹UÍ3;4 K7K˜Ú` ^SÂtEÁ_—Ö“|í\çÆêœuNŸËëexð‹yIJq3G¥ŠCJìºFÏ ~Εr¾K¡‹o“Ÿ7!c30.€±¥\7ïøò 7ÓËç“c¾E‡Ç%blsXLO’•ê’˜C}€ˆuï ÐmB-Õhøí6]2`O–W›ù\ ™¾&*?–§Ë)IÏÑi¨Ê†öþ¶Å®˜ÿ—x-a¥²~80æ’A]Ê/.-¦˜Qcd,ºà~|ît)¦û_ó+ö³‰ÐLLø?TIE‰iÿ’¡BôRý8ž¢#ŠØTÄ7Îh;Õ€k-¬ÙOJ¸»¦÷,çÒ‰åyP)!5H'L_`?QâdÜÚY°Ù».ݦý]‰ŸA«ïØ”'ÎѼ;¶ÎsµÍÓÑû(Ù¦{—¢8H‹aªãiᇤìËÞ¨ WÕ;3ê–9EkÝñ픑ÿ H}Åט¸ùòâ¤-ëYøž.g£{OZ_ggV VΞ¸K¼­4&xg’%Ê~<«JBnT¶»§ýþøÒÔ& Úäò‹h”­o¡YÕ‚‹V¾.Ú²òØbyÓÇùƒp݉q„|”/¶»òõõ'ÿž"z endstream endobj 359 0 obj << /Type /Page /Contents 360 0 R /Resources 358 0 R /MediaBox [0 0 612 792] /Parent 345 0 R >> endobj 358 0 obj << /Font << /F181 329 0 R /F52 5 0 R /F47 4 0 R /F156 76 0 R /F105 26 0 R /F109 37 0 R /F86 38 0 R /F61 10 0 R /F186 361 0 R >> /ProcSet [ /PDF /Text ] >> endobj 364 0 obj << /Length 2882 /Filter /FlateDecode >> stream xÚÕ[KoɾûWð`Žû=3Ù“›A€Xë=Ð%¦H…¤å0ÈOUW?gzÈ¡á5ƒ$§ºº»º_Uµ~¼{óîg-f]Ýafw3.yÝ4ff:Q3ÙÌîîg¿ÎW•0ó=þÚU|~¬$ŸŸàÃ~–𳩂ÙW§j!Y|~N)×7ógxÉÙü ŽØnéá£}i­*,©¯öCaÚ{"±CñË'Má}`¥™¿ÐÊ ®Ü 9 ~ÜÓè§ŠãgXâö>¾Lù=Àóg|ö˽I@?&>[ýv÷—›-8¯;­IÎqÓvB;¾½q¾Ö~‰÷ôøZ-:ûˆ•wŽ|‰ì>Ú]U°Äu‰ÒrlÜHw·„Ò÷8få=C¢=*Xn“ãpc™…SwéãçJág+%Á¶FA¾û™·|Ö‚‰Z¼P¼ UØu-§ÅËûû×J‚4ÄðDïÝF¤Û—Õ~w:ìa†ÁˆÕéuyØnžÝ\L'sqnêlÈ ÝìNëÇui )ëÖtžî¢ÈŒoÁ5«àø¡6Ü­û¯öØèðžé O$¡T¦³BI«\(˜ƒ%ua¼G‰=Ó˜j>=sg‚@p xD7M -EÚs}³]á1=•[ÏŽÁ#ùE…ñ €c¼šûQVýÎô·ãªàÄÍ“N®ª`OQ †çö¬ŒÌä‰ÏnY⊠!é4 @ÊÔó''™#ú(\m]-ZÑÎßgsšâs²¤°Z1gôͦYáÎ0á‹ïOÉ—!! àH¦¬ ¬ÃYµBÆ'w–ný–㺧ÏÛž>Ú/7Ç’p׎óƒu½Ê9ygêö”që%+– XƒÊ­xõ´†SÕóO% #ú²ãÀO%†Hתod¿|ïÙ/'ÊÖ$”mmtãY}½.-¬Ožæ¡RÖí…yaVÖIOú΄ÍEaV®êFªlÚ…Ð ?éÒvtS+¥Ün ºƒ£îb””Ü«ç^BT"íµDi¨ þ†§Jd¹ET_œj’Y6Îļe‡PH_ž‰È¹aœ þDva('á¢vnLktá'Y¹}8¥Î²³Æs¤7Î(¥ìÁ+ wÇÌæ…|Qœb xÙ~øv¾ÞJu{ö@BñàpvHüˆ¿\ðÏ Ïƒg‚…oŽÞ>í UxïÎaì,”2ãgoô.äj2lôB€ \CNΟ©@ì÷kßfÞÏrî)Š‹è >Y™àU•ÉÌjö**5N’iúE½ä !ßB5]‚Ÿ¼Å7Œ£Å±Z¨Î©òOà½ÄüŸð["€Ï/{Ù´Þ²#ÀRÚJ3(\î…­†.ø£Ê§eßøûÚn?ŒÎă>;xæÚK~X¤Æ} 2"c¤Kð¡æYÌuÚBê ¢ó_¼id«²€N“P‚ñ2v·ëÁPÅ I#š[#ØB´ vcS°iç&àÍ ZŠV{èb 2×^Bh­ ­ÕE'$—ü(¾¿êG‘hÔv­.‹.ñHþ’³ñ0ȉÉ.—t¿àì®ûõèÄúÚ o6Î7^Óõ<±H²–èIO!¯zv¹é™-âa ƒ¨3éô÷•2n¯YØDßl ˆ{Xˋǂ.z¹‘¤™G!•jjÞˆ¤ÚoCf„“KùVÈ`y8–Ó#V7š¯šËèJ©Ú<âϦ£«Œ[ ®4ˆ‹…Ÿ!?›×í yÆ0þP]h8LçÁô—*Ñí]¡¾ÁÙ /=ál˜ˆpÏᆌÉ#ö)¬æ[CÜê}}€Ù`Ĺçïë3–|Þ…Xäx@ׯ ðyQ+{îgIJó•íÛ à5Si1D™ 1u^-¹—Ekµ4>û×!Bý+ –NÓÌÇö²´! ŒÕ<» L@ÅD &œ³þçM q¥}g…3Äd]qQXÁx~JWªi½­+Vó˜ÖM†Q¬-À(˜&€ÆT•\ÅÊ¢žX[Ó¸›LRG³è–ä-Ì÷ˆÕD®»TÊ.¨ FÓ9‡„m€y 6³…1µ¹îå‹ I²aC˜„ä6¬6Ö}xN+ø¡pèXŒcÑO>u£ÌðÔQn\Nè‹'kZË’–ö%€b„©…Ç §!Œàéc’"A¹Þ“J`¢g°èLZËÉöxÀêF‰Üª²jlêŒÇOó±Èy´É$[†M&¤)ƒœ',Y£_Ä?ý&RMh2!Y¡Ée‘¦/}ùú–S YdE—[šL¹=]3îdÏ2Úóýz4Ì»!e‹¶ãÒ@Ÿß¯mݰPœøµÀ]Ô]ly·?®ð ‹~Xî–'0Â!#ÅëV…FÔo%ÑÕÜ\®òˆ¶©%ÎQÉï‡^¾â&Ãï cžªäBÌú<#x¦p\ÔRÊizt#‰û?MJp!åÊA¶‰½äyšÍ¸ª¿ @¬0|èõáËL\ð|9Ðc¿ºr%²}t†vd”g]V]î‚nJ¢©U4ŠºÄÒh‚EË«eÂ2•&¿„ éfïNº$xAd]Íz Ù‡+#ôÕ•íØƒ–ÐóÒöªxç§Ÿ%úK~¼TŸÃŠ®D 0E’£Hóª¢ÞàÈeEÖb•VÍ4½F¢JienÐoMJ/[í™)¤ÕiŸñC+a*ÁÌ0Éw÷Ýõ—«Rͺ¦>¡má›t Þ.šy=ûO‚ iâ "nP©ÑéfWÖ±/Òv·¸´Žeæ”<ž‰× ©én¬µ=JêúšÎΉp€3²#*fQ££½Ù  ÿo4lP‰âLÕM‡-_øRøRÁ gl ì©)°y<žK­1#j¦Í|ØVk`vžß}Üï·ëå®Ô}cµÐêJ~×Õ¢5yñõϾ'Ôù#QÁQ‡zuTé³ï?•êézoo®¬rÑ +«‚”~ë ¨ç˜÷û$ó“Ç<õƒÚh|é Á’>ÑKìïãÎû¸Ð«6ªQ¿Lž°ï6X8gæ?ÆÙ.†–·~ÖØ:^k¥sc+îŒwåm2AɃ• N_mÅ6º—…›OñŠ‡Ç­ãWT’Öåô*{Lkü’6 ^È×fßzµ„öÏPD1Ýö#b CO:üÆÜæoíxo^&õ$§QiƒÝep7nª$ÃõV:Ù àmÕÁ¢Çü¦ž”`ƒË¢d>š'WìÉ/ÒX¦’Î?JãÞ]èüÛðG¼Ö&x˜xs NeL{ÐiTòOnòEj7î®RfwµfܘZ™v˜ŒÄÜÀ+ƒ¯ÞüéîÍÿ.™S endstream endobj 363 0 obj << /Type /Page /Contents 364 0 R /Resources 362 0 R /MediaBox [0 0 612 792] /Parent 365 0 R >> endobj 362 0 obj << /Font << /F52 5 0 R /F181 329 0 R /F61 10 0 R /F105 26 0 R /F86 38 0 R /F109 37 0 R >> /ProcSet [ /PDF /Text ] >> endobj 368 0 obj << /Length 2707 /Filter /FlateDecode >> stream xÚíZKoä6¾Ï¯ðQ¦ñ)29mØÅö``drhÛmGI¿ÖnÛãÅþø­âK¤D©Õ3ÙXlOÔY,Öã«o¯ß}õƒdW-1mC¯®ï¯(g¤aòJø?o¯®ï®~ª¾«WŠU?¿¼ú`Ÿÿ^ÿ|ý7ÛÕ£˜Â®L#ÄUãú<ׂVO5£Õ¦Vð°MSjZýR3ïà7­nñù€ÿìklÍ©mòkøëêkì§“ëÿoiËMMUµsžjIaX®ª#>áó¶Û ð;×{m{Ú¶k÷æè î¬HdC×ÇZ‰ŠÀœ«þÑkOA«¨Ñ­ï½úªêÁÓù‰Ã;«låõáñ‰Vï£-{7¬¼1W”#å…nŠ7ì¼n¿ÕÑ\2œ?—¼ÚÖ´û'Spï½_¸³â›ëƒíîÝcêGl@›=Ö+jªfÎD⺱ØEîÆa¦Ü6[q…½†ÞŽ3œvLÒ›ÚÑî\aÄ‚i­ZÊr?d³§: -‚?M v›ûÅÇá KLÜ‹]fb¯{ÙÄÄÅÕôJCpAHa\rMØÔ †y{Üm6{×ZÑ$}[‰Ûãíaz<€¢ “qê’Ž´‘É0”‚Ù!ª}×›Ãa»Y—† a2û7…tXQÙ’¦A•%¤”køWÊ'ÁáÂa $;áà¾ÝÛúFå\m9i :|gÓóG›žìs1I["Û8¿WôÌvëÆßãX‡:꓆¥Õ*Qhpì± ;Áó÷øÕ_:Çv1*V7~^^ªGH2¶_y˜‚0(êÑd°5¾¾uዚX[=XûõÁêÔElµ EJ¸Ò>£” 7’ò©$cç›2m¸†øµ?>2ÑÂwiƒuŨ®A“¥Mµ÷ÁÏøkëã¿KÒíà3ƒã‹ßÉÀ!Á?ÏÀ`·‰””`PÝRrÛ6…œñíËi9è˜-7Dr“cáO…1ÚùÇîåpZßO‰Ò¶©óï’²fm&«”M†h­Ï‰‰ ÖÛîa¸ùµ I´D3:'ÉÚcš•´¹{(YK",,Wê¸yj›M5Ôö͵KsÝg)¼½O ßâó/˜™‡Úý=áñ°7)|­å£aö8Öîrõíhrx´õÁe%¤¶ÿpÈ|߃Âàg`¼ðíuH^e›LÜÓt‰7Ü€ËÊœ‘`ïØg] U½ûëåöÛ.UØD#£¸;”òœ©WÆô^Æu¸É´~>eét—T”ÔÒÎJõEÍÕ—b¤GçUwÑúu0êÆÕȦ”Îùg@)È£0_d„ßÖ£ŒÇBR¹¤Ó‘þŽãZ#å`ý¬áwpãƒå.VEow+1,ô`Á¿ÑbÝK‰¾óÔջǢ3Ò?x¬Ø$õY¼1‹×,DGL`l‹vFIù9ïY^t›O|ïKY󰧇°ÇžHÛ×= @«Þº—ËbÚ6}õÔ©Kõðäÿ%L«Ý€îDðaê\ÿêÙÌÊÙ›8f¦5a¶¼÷ÈN/γÅÙ¦ÀÀD©3ôŒ†¶o¥šg1,fb8´ðmÏǰèc¸$`ÃØæòFÓ E: Äé¢rTÌÓÌÖ/ý¾ ÚLNÇ» ³+ç^&'1ª`Tk§ˆ•[뙚 òÀDÒaW;€žóe Û,ÍQh:ÎQÿÒ.è¸6ƒ-˜~^¾§Ã'¦I£å4@1¡mk\¬g »ó±î—¶å.ÚÄ¡ÆFSÜHJÿ›ëâ6J²5Èû”ò”4ÔË/Y]-g&­òØÜç¶Ì{â'éVQ¿ÖLˆC¸B‘F¨xö)Ñ7,3 TÚ˜4¡ôKõ®´Æ!¢_o’ NhO¶‹ÄŸðD‚«S…š1c4Ìæ¡]š(j}g7™º¤df8ê¢rÐëဠÜPÌà€_ sK$3à,æsð ]Èѵþ³ñ@ñ@ñ€j×YIMÈ*` ñ@:Š&ì=ƒØe°g¶l —_ÚDÿSû„Â*XT.mSHû¹¥£_»yê÷æ3OÇ•O¶¹ß{3º›©ànvÎݶ둆*™îðýPÃtaâþ¨Áo3Ù—#€. N9füsðжDšvžY_Ž:".!£ó»)"ÇNÿ9hu.H£f;ÔBÌá´`t*À¨‹Û¤Û$·uXxƒ`—¸e;Èt;ÌLmmûÕM/’U ‚&YJÜ6šá%r-tCšÆü `¡Æ›m , –S–iÐÂŽÌo~£º•J€í–a=“Ó5Ñ­€çkÏ`5|!+›éyžÊúí¾Éóø&.Ýäýo­±Xõ?²Æâ†. ÃÆáoèDøz1¾ñͰ‘’gƒÜЪ‰¦ELË™™¤ x–ð‘þæóa¶ŒgaÇ…!€M'y–ðÜþñÐ)´M|!—#>î®4Š3(¿“K¾<¥zOÏ-¿;‡43!t£CK* i¸H ’SËc÷²ív¥Ã)‘:²tn ]Ÿ¾ü:˜¿N è茺†Z¥%(•ýÈ/kI¿1%Cg2Ê|’%Õ˜$¬Í/:|°îg/ñ<þ©´N0.Øžý=¨›${±qp<Ó£K&,`…G±ŒÜçÜñÌ0ØZ ËYìh1€ãYˆé°Jìûýc¼W5 óÎ6» èù{]¾Ðæ‹._˜æÜå {†e]ýÅ6¯xÔË4á^pkk¢™rr çnâl{ë z¦ç¨žKM½ (ù`£‘ = ý6#æ²—¨˜Pde|rà©Ò ´*"HYÌñæUH@}[«á‘¤ßç ¾Œ¹°$Ú•lXñÎä=™öi~sæ% ¤ä›O¦ ‚rµÎÈÀ‡'î˜)BíÝÇôBËñi³ý‚þ«žNk”z‚:ÌtƒÇ+ThªOþÅz»=àï×ý¬Yºš†è¡rXPž×ÛÝóöÔEƒš‹e¥ãMnß=–†âD+s¦¦h"¥(^ª`=y„cÄc>Ïxp»}7dK„ï3ú³Ý·2ŠîØF~öZ<½KocæøãQêþD1»Ñß%Pñ.UÆÄ 5ÙœcÔܶ7ˆjÎFÈÌÙ å†0å}ÔaýÀSTIUdÉm ÜBƒ»Ù×/™)6< ¶Sž®‘Õ¶ÝïÍÞ›¹”Ó3— ‘Š.ž¹LgŽrÇ3W~æß@‹¶p]bt))Ö8»o"BémÜ&à@ÇWýÝ´Y–Їjyé2Í.' Ô ¿A˜×&*8á òQj ²Æ‰AÛ´øùÝ÷×ïþ /ª endstream endobj 367 0 obj << /Type /Page /Contents 368 0 R /Resources 366 0 R /MediaBox [0 0 612 792] /Parent 365 0 R >> endobj 366 0 obj << /Font << /F52 5 0 R /F181 329 0 R /F61 10 0 R /F105 26 0 R /F109 37 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 371 0 obj << /Length 3354 /Filter /FlateDecode >> stream xÚ­[[o+·~ϯð[µÀÑf‡·%ä¡m EŠäÁ(4*ßNÔÊÇŽ%Çÿ¾3^w)iÕäÁ’–;$‡œÛÇúO×_|ù­W®wF˜«ë‡+У¹2Nôƒ¯®ï®þ¹ÝŒs«˜Õ}«Oþfõ‚OüÛm÷mwÝZjúRfõßS›]=ãÏígüx¿=tk1Ðx†F_}…d£ž’ùán;«Ÿibj ³+øvôc=1á#rëÂÀß¡§'¥^?Ë÷±+sûk·Ö¹›àe<òL‰ãÕCÇ,lð‹j½Ô¾t-¾÷mxÿ‰;ßt¼àY×Qò^äZ𨯦 : =0Ôç¦Jrið9ÑÚÙ¡6‹ížMᄎàÛ?„‚h8gå %F5?ÜSëG?Þ{Ü0ð«{auÁPÔŸ¬óþá•60K˦½ÏBÝÝÕýpi_~ ƒ¾²*Œ¤P!¤èG­PŽ~wÏûû]¿?¼t¤ÙîQÅ¥úA‰H߇íM?:ãÕhÓ~±J¡7Ž/YéÏëó6H©p2Û˜·¦W^‹7)$m.7žp"ú "¸¥æ4Ï!Ë_¦—;Spª‡4ß’€8Tg’ä˜ÉdÑôXù ŸM¼anÑÌBož.™ûZ¡5½=º£G_§´­mácÒPopÔñäÎõ-]3öã0Ñ¥Ÿ†AÞÿÚV$—HsÑL¼äwï=Á=j¥Îø ¡VÛ`D üµIbÆG‰@Ð6×0ŒbõWW…âA,àíÒ§øÆ›x¢°§Ão€x UoˆgZX}j(ÿ¾8 æp¡”«e´" Q蹌j¤Ã(Ç=¨h¯ýÏÝT9÷ñ}>c|PGƒ–k“½BgX‚æéH²£§¸z9$ʯ‘;ÔQ8­ÿÎüw€> -„@x´Ä Ñ™gÚçéì/SJã¹ééTγr×t*gÜ Qoñ|_E¸Kò^£Cï ‡yÎq˜Á¤ê\Pð`Ð@À]c0ÃÑo¦’»ãö ]0‰§ß'ü «ýó/çhyÙ†e¶–È< hq)òl€Ú³hk®ÔˆÞÙ„‰?û$?Wû…èYgáûOBGíC9¬DØ×Ö¡Á¯a¹ó€âvnõÎØóRÇT¹·uçUI*¿I1©ìG8¥Â)Ù§½+²âÀü^I² &ÓÂý×úKäU’‰Ÿ¯®` µBÔ¨Hó4ƽ­™2RcP÷±)ã'4g¤žòn&«*ð–O.馦Òc$‡É1®J;=77–øÙ׬Êé2W!i™ÓÅñ)î#s¶’楂b7Ÿywf‘([<Ò²v±³©(sRÖ™I¢bjäAé½5‘y¾EÅÖÞMCÍ,SŠZfF¹ú{WBt¢‹Ë¥A.Ð,rôü³<+Å稨©ÈVÒãM~³hw‰°Hó<¦Ãï.žÓÑVëÖ6måt%IaÈÇ” ¶äd*|6݃¢7BëËìPeÕ¤¾7y´E«§>¤ŒÔašN‰žAM<…ŽŠ“zMÖüµ|Á[ÉßeS¦ÞBgP× •½D¨±á” å„ÒÙQktª‘ÎQç*…¥£ âþ>fðj, ^MJ—Êž5ñ8ö ÿÐÒù›t’>pÕb œª ©4H?—)§«ÉÔ/×ÎË`¥WÀÕ 9?j—Ã× ï‰{Tx$ªwmŸ‰}P+Éu‹Öùî%hìæ™2+û“µÂ ¾Oõ[ “œL~VœƒH2ùX)‡:%g>–HʯL>–Þ`«Ž‚G#˜,2`¾Sš( 4N¤¤=¯ÜÅðÓe»Ó•ß2£¾4ù+œÍSK(”kO8zÉŽž'2ZñX1sÔ$éK\ä­<ë’´¬Xˆ7Ðû+Ä„0Tñ,SL wS ¦°ÂTfoS ¦š®v}Ü©‹&Äl;Ýà·Ó]H¨WµÖË»7e[ˆ&aJX ‡ÂqP8” ~#(Œ ŽF OQ$òÃy*%y'àAÕ!8çuó,ݺØëüÈ7Øú´Ê‹râÇéyWÝø‰Å"š;—.Íx²9Ø_ r|÷…§R?›’“õÁÔ‰YM¹¹Ð£‡> endobj 369 0 obj << /Font << /F52 5 0 R /F105 26 0 R /F61 10 0 R /F181 329 0 R /F109 37 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 374 0 obj << /Length 3013 /Filter /FlateDecode >> stream xÚåZÝo¹Ï_áÇ] Ëã÷’ úr¸Hq8Eqw²l'BdÉ•œäôïÌðcÉ]Ê–ÒP –¥Ýáp8œùÍùýõ«ïþbä•gÞJ{u}%”`ãh¯¬—Œ«ñêúöê—ï>ôÒvwý FÑ}ê•í{#àCÀCxsÀ7¼ÛnúAòî¡„ï6O|s /½°ÝFÜÃßü½í»þ+‰02?rA"˸·WU÷#}ÿ)šä––YÇ|Ö›í'•8¹0µA±Óx· ¢!é þ@|黤ìPÔ÷tshWáç$zQ#iñ¢ûÜž¸m{Á‹Ù& ¡g¢û'¾Œ¶#Ÿ’*oáËk wº»Éb?᪯¡%µ„/‚ycæë¸)Hɨ|áh¶]Ôù¾×"ȰƼ OÓZè÷|EǂʅWtnê|І9° b^FQ~å\î?Á¢{ר©8(îTÖØ¡Ç= ëÖ(Î?vô‚øXQðá0¯a^>ÛÇõ~÷t؃,çÝýf·Š_A–$‡p¶_HÇFž%A™…™‡ããÝ:à¦`8^%úáÇw?_g¹,˜¯rÄvdZ]f¹„¯ÂÌÁï¡ zÛvAÜ¢Þí–¤•Šb`sIÐ7 À7d<–)c¹½û=÷LÀóâñ/ ‘-6;ØçÕa³ºÙÞÛ³Þ'Ê5XÁ¶Yï°oǧÃj³{j1³†F'ÚßZÛR v³ßoïV»'Ð¥Ï1ÑlD ÿ¹O&ÐæÀЀézå •#ïŠî¡Eé,äøKsží.į‘)‘×I`0ƒ«¢ÿooƒ4àÖ^ ö€D#"ÒÒZp-à<÷Hkë‘yÀfb1÷ÀP‡È)£$ ]eN¢û®¨KRáËÂÍ Shð ™ßÐÚ.ï"Àü;;¸[œþ.Lm»‚0›È×ÄŸQÜA QîšÏdtHó$Âu‹R˜å!Œù| Cn¢±\cT™¶Ÿ''ê'Ú¢"‚Ç÷ÀÆ]!Œý 3#ÒvÔÝ÷ô€xĵÓ{¢OaûDp¹´?e5ÓZ_l€Ü¨y¥Q^0íǽd†J ˜fZfˆÏ›fˆã¢â×KÌy^h)AÊjòÿ‚Ðç™û³ò¤{^+ýÔ" `Þô…‘La>FôMÌâ3‚1Ê?ÊÄç˜ý,¶¦ô/f1Þ‚eú·Ý¬“aÖbù1+ÅÛËvÒ§™«aàs©E÷Í1_¸ˆâœ™CÍ®OiÖÒ› #2S޹g©³¸1ó;bäI¸Ü÷Gñ Ìj¿AIq;9gŒß÷Ÿ¶Ûã×c;O½I‚Õ˜”÷¦íŽY3Ëöî{PûþÐC¸¸[ï!D5‚½ 8çÍ_0œb”‚Lü9`Œ]bL%/Ô@-À2ÇŸÀ›/«ÃÃÿÞL˜ñFÉè«­‡3ͳù=(Ö}jÕÖàxÂçÊêuHF*RâHHÁsAŠ;%H))I ¥N”4vRJœ“UÊ Í;7ñ]en²07(CÌÜg•xÉg•8í³ƒD ²3@ú¿õ]a$SJÏòƒ2©®mmzÞvÛ3üõ¨mö/:u¦&½‡0¢CèÊZv¸éŲlþ_Q¤Ÿ»(‚˜†ÝȲ³–l´±Šéô`ûq!uMlѵ`ŸŠQA›d™{>»ÈÄéÍ/Ž­î@˜Å{Ú´ØS ?>Dz×}$ÅãŒ/q·|0Г"ð½²Òù9*ƒÜð´TcçO”w&Ì3`=¦chÄcw›~†•jlOäçþ‰L§–^0—F”/Ox¢i R d4N*Ìh„¢£ËF$=òá×´Åô#Ë”²|¸Ø m”­qåNfëFÝS«'ö{íÔ÷<)TÕ‰µ%Lm&ûIë€û“äÑQaHò{³ûTrz(õÄâ³ZÚçq"¨Æ¨Ú µÌm1-kŸÕ±—ƒ3Òž $ø“zMÁBç3ÎØ®Ü~ ¯~å†S±Tž%Ò›ò¤Ó°”VA.ðµ#/(;‹ 3¥M¡Î©ô&~‰ç*e`=Qý9fd?¾§“®ý¾UçòvùþÇTI‚—Ìé<¨uÌ%™w¹zÇ'ðbvPÓ(1¡6æò Þú©£¤Ät|V…<&Éé_t‰ÂŸcjôyJ\O`±o ˆ¬Œ }šª²>“S>JA²…“1(#Œ4Í#S8á'båÁÀË™T]*Æ•Gf>†7÷ )ëJsv«b:‹ÈçZ¥å¤¹óŠ’rOwßc;>6Ô1Ì.4мŸa§¥- ­hCñ@Dhºt1ŠßËp#@«À¤ö‡}`_@rìÚÌ—O¦ ÞWî*.ï<*„CžÏžBZ$}7í@yßf2œïÛWÔ‡a+i@ô¬¬e™ÔºR¼@ç¡i¡„çV–Ý)çt1‡šªžçÖTp Å@v£ÖmbºÜ½Ê©áSa#’Šè*žÖn#µ[&–õv Éj¶r‘óá ä¥éIÖ›ê\|ö-þ^0K"‹ì¿äN™Qð ò,>.ÃR¾îÓ*Ò¬mq„0 Ø!ÿ´ÜŽ¡@H'ÂŒrÊdʇá¸?_wÊ>¥EYy”n1¿¦u:ú²§èÓúlô™N*šcÏ‹8'ïŒÆÔ6ùá.$y›õñ pxåA>¾Æž&ïe³˜,¨3 ÇŠOs²ÓUÑ ›©‹í>¤’—7Òù鸟ÚXââÛ@Â:Ƽ8{QSž:µ?tQé¥@òFZÖ+›e>áu¤º¤ “´È!bcï+†xT'¼f¦ëT¥mÑû—ñ.Ó–…Zp’E«¨`y‹•ø§âö†ð$?Îlø¡&½ï³‚r>ûP]Öi4{gyØr+àLM‰À»˜ë9²¡\Ù”æŒsuñ'õ¤´çÏ›T Ëywn÷î.Œ{FÃ8ï•-]¹òªQæ”-cáf–àç[.%d£aÜùoɤs¶ØÊ¦KOøFkÿƒŒr€ÜN€É” ÙÆÖ¦e*nγL…ì/;ãÕì¸}ì¢PûðõlËLãâîÌë‚NzÀCnŠ\³¾+$¹g\çúsÓR4Ó£.´.11•ÿ­ó^æ›Ô,6ˆ¹«ŠX)–žƒ‚ç⌒¬"§É=r‰wPÆe/ò°ü\ŸkîWR4ÛÁ87Þ©ÈãëW¾~õoÈÎ4 endstream endobj 373 0 obj << /Type /Page /Contents 374 0 R /Resources 372 0 R /MediaBox [0 0 612 792] /Parent 365 0 R >> endobj 372 0 obj << /Font << /F52 5 0 R /F181 329 0 R /F61 10 0 R /F186 361 0 R /F105 26 0 R /F109 37 0 R >> /ProcSet [ /PDF /Text ] >> endobj 377 0 obj << /Length 3311 /Filter /FlateDecode >> stream xÚåZÝ·÷_¡—Rk1üæ2A’:Rø!@ï%°B'Ýù¶Þ;]O:».úÇw†ßÜåê¤ 4€s»Úáp8œß ùÃÕ«o~R|a‰Õ\/®nL0bŒ^hË fqµ[¼[þ°bË=ü;¿»ÕZ î^oñ1þÊõòf¥—‡gðàhv+ÏðåH6+Å–Ïø6óÀ½'õl9„ñlIVk#ÔòO~j¶¼‡‡GdèXf=KäÒïñLJÈy àÔÿpÂOnTì‘v»ÚËÊ@n?öë ŸL~],ÎÈœxÒOë¦^­9Evzù±çô?Þç÷«W^ÐÅš1b•òºÅO«°,F°nÙüßœÍ+Þ½?ãÄA„ U¯PP–°rysÙ47¬ÅÚ†¥=ø×k§ ÷¸Aìàýo+I#÷°1n†§KÚ¾FA¼ó?ùn5kí¤þ–†“ßGY¸Î쎙øÀ*@?ßüÄ:¶èÀ µ@ƒ\‹Žh%Ai–H&¼ÒúÝp3ô÷ž^³Â~5õtÃãvÿp|ÚƒEhJݰ0UÅ&Nƒú‡ãÍÇ›§st6Ò}ç)*÷Y3N‰Ñ]Øcê);]P¢œ&²zÏ¥hp3ðI芦S~ܦº ò¦PŒ&=ü¾Á@Ë’ÞSE[êäÄvIØ€íñÁ ”),‹dh1q™Š›§8Úöîó ;KXf¢±Æú‘—¨HU:oë—ÁååzÇ•j ØÓ+Óf!ˆf!äúÞìo+л К¨¹-Èü x[^tƒ‘!œñR_ï)k ¿æF±¢ Êüˆ*Ö¬%UËÁ‡Â{d1`Òä뎠ŒîÛÆõç•í×EFâ˜`àƒJÿ¹ÈA?ÞÅúaŨûð¥Z8 ßûÙ01uÄÁA®(7«Ã×gÇÐ…pŸ’|È*†½DGÑV·›ÿàÿº¸îæÏé™7¢P Pr‘Ý׿÷€OpId·½ûÔr•8¦Ú\C[dË÷”rç&Î’ÕMÄDð5>Fc…Ç~W¾M¼À@g4:(îÇÀï>oBü©NÇ {mWÉWòfœ7ù! ޤ"]Äklù)9S"<”‹l8G‚X«ôÛŒÉ Kà 6ÍiÞ:f¿ø—¸ÿOÀOu+õ»ƒô›„{Üë}nxØ0ü² PÿDtû#:¶üÙ¸,w–q60â,û<®¥}ü}>ô5´{Â… -\X׺Äç¸0 K@<îdñ(pÃñ˜R„ÓŽ*°W¹`¥D¤{( ÝÌS.ÉåŒÿ";_þ ÿhðüK‹©&Z¤l½AI¯Š¥G³AϸþÂpÁà]q£ž½pœ«±R q9ƒ¶áñ/W+©–ß¿}û㛆d’Ö%Ɉ—"T®Žy§öaqvž$`³Êbò N¢”Ï}Ø2í ¤–†5àŸŒß8åþê”ûÖ=7U¬ˆ‘ «9k_ƒÙsž½Í*¥ÆJmâ,“RtÈÁôÉ“ŽIr‡^ÂÕÌTX*¼1TÕoZlÒ-1Z½ˆ ^S Ê ò«Mø`S •‰rd] QëÚªJy€=ç!~Äzþ¸ŠÙ?ßæ³H*ø:“áK—ŠÈ_¦øG)¨¬0[{Τt”0n,eÃýñzsèú.з‹Çí~Øë®  r£Òž½kðÆ¢(Áöðٶð˜G—K§5Ø(p¼‡ýÇ~»Z¡‚‘NŠ—u¹¶ÚÞõÇ›íñù©ÉÎbh’þCƒ0údeÌ;‘‚0*ë*‚y¬rÚ¦j —d.YOlÒÁ*•ãVg,¿¦–# ±s(ésk't”ðûu‚ , <ÆP‚=Q¤ÄÔQ9Êð&°p?^Ø Ùù#HÐkaveØ^·’üÁéH±Ø»ux*g„°dà; ÿHúîÄÂT‡VVÁ8Bœi®²*ÞÁ.@Pä{¢È"­é Ñ$ÈHS9iŒSÀ°A`ãÔðÉëP±ª. ¨ÔTªŽVåM,›„nr´ š 5ðªôpœËÇ÷Ú¤¶þÇ1O¿¥ öÓªz_›yˆi%”z)Œ×“È ¦¤Î©€ /XS ëC;îYíÆQûr—ljÍ +A¢u±Ar{¹iP½±hbž°)f¬E9µ Þ\¬fÇL]d;0Oe;ð>µøñ|žQû€à¬bµ]}†üv[9e>,ÝF„Pø÷ÄÈ.Rlh%àÀTo¤º?gÈtÆúºØ¦;ßú.KŸÞ ™xÑ ÿC»jéœIÿ¯X! (&þop]DûŽO¡+@Ò÷°Høoyû´Ù¾ö(¿gÃþñæ!¿¥§çê÷çøÄ+zžèyEÏŸ[(ð›ìj7ÂÊÃ~³køA}Îò..\Îl ›ÝúÖõý7Ûc¿hðTšˆ >´xVØOw\‹ŒFß¡ÙúåÓäÞë·?CaQ´â ‘‚’Ö´«Z•º ¬y±.ˆ¾kÉ ;íšìèúX¢x*=¾»úÖ‡u"ÖyP½úc³Aø[AŽ&ö›cSH£#/Qh}8#a[ÙIu-c5/ʨÚèzçjlìi,Ÿ¯ñ¯Z×þ};ì7À…xE‰´#ÁaP£’“Äds:GÒ‰6+IOiSPÂÕ¨šBÃÜøùï Å5QvÜ!ÊênØŸ 27ëήòކl1áV³x3=QÏzF§BË P>²‘¡Œ—ÆIgõoYš-Í,MŸ½´­Ú«a¶>ç©芋ZžUcû¶<Ÿ<²G’ÑÁ Igré‚Áè–ÐÄó=xÜL¥š”ß8͉J{SÎáé€á!ÝçHx¸w+™Z´Ì6ÜTË÷%y³²nèPYÚáa›´N“6•èúd5.;[œ.ÂËL5Žå§—èÄïh7:œél"~HÇ3Aë[_=YµË–VçùP¨«›ÜëÊ«‹,mÕžižL\°ß:CéYMÍGʲ[¯Õr¤8ç0ãä$MW³gE}Ï7«‚f@¤Û¼:Ý8ìôRz·q\G˜~ˆ¨Ü¯îËÜ£rçb3%EÙ ŃÜ×=Ô×”Æî.&>=š@‰ì¬ˆÔêº ˆè)÷D ÔêPÀ€)¼Ø:D‘¾ŒÁ^_Ø ìè¤Âë'þ{,ßœN}DZ˜?«—í G±‘YLá£Cë\#I“j$©_Øl×¾ª·›pš‡°Ç*•PÚ´'4ØÙ[—“<¼Nìž[ìÀVµ9a-ñðCŽ®5¸”"p½i7έ¤®N KE~)Û2ž6 Vܲó]^©S³ZªÊýÝ.rŠp…ÍϘÁŠ­ §Ñ }A}¥¤)Ô`°ñ1©bò½q;¾Üè[ttÜtm]„ô3ÑE®ŸÝ`˃zºÇâ®Îw0„ò¾¹.f)1¼°«ç¹…Y":S­,8ätef²²‰9„HèŸs"Æ5É‹ëea½ÌN×뺾÷cöE÷3'ÜÏ@‘’#gÏ[î×5Žák6€˜u—™<·}¸¸v—YS„ê]ØÌÉéàtPèUÅ"gm¡sI,^m,/Ö$Ûl$åCyfçcJ8¤Óª•´óéèãjæî³çŸ®ò”jwf‚Ÿ½8FMèR¢«º×tv ë1£Aßp¢œLhFLŸ‚¾Æ^ïAž.]GÛÌ<š4`tâ}ò‡à#`Nžµ®1pM¡Æ_¡,oMªž°úx„ÿ;/[Œá´‹·ŒÜóit°1*=¬''—û|G²ƒ(Ú×BŒ"®0“;9rjPn\VtÀ¤ž^fZ8ÒhÙéqTSŒä°ù¦F}éU0A„XÒ¥›-­Ë¢ù:ÖÔ9W1ÓA‚˜Ù1SïÎ舻ÀÍ/ƒ¸x»¢uY¼2ˆl¾랈òß±Žú'KÃA> endobj 375 0 obj << /Font << /F52 5 0 R /F181 329 0 R /F61 10 0 R /F105 26 0 R /F86 38 0 R /F186 361 0 R >> /ProcSet [ /PDF /Text ] >> endobj 380 0 obj << /Length 3043 /Filter /FlateDecode >> stream xÚµZK“·¾ëWð–aÂxcàT.*Ë)¥œT*ÙR–\>´c‘K†ÃݵRþñi¼ —«µZ 1=  Ÿ_7ðöæÍ7ßK2ÓHK*g7Ûa)%gRS„™šÝ¬g?6»ãêp>vó…ĸÙ–k÷„”p?ŒÝS‹ršÿtó×o¾4ãŽg Ê&ŽíóÍaNšåœÉf Ý|Aqs?'²ùoIÛœaônNe³q¿Wæ¾!ÍÞáßnN0¼åÄÒ–dð˜5ýœ¹·';Y6ŒZú?申†½{ùd¾p ©®©Ÿ ·øÈÌ Ô0¦ö‡™O8–_•K!õR.“â&q·þéi{¶]ïhֹ ¢H-‰ÈÁ eÌ´HªHivú_³³±ÇùB[¹z](Z,íÖîqé$,›OC]‡ùÒ ;ƈé0ßw°MÚüþ2c7ðüÊ©DóðÍ`âÝ“W¾Ó³0fÓUbUª¶ðûÁüÞíÁ‹ L0û€®*EK¤ˆ 1V´­l·E„G ¡ÀHÀ¸–’ ‰h’áöa·ë?÷5¹1$Ót°*‚`7ïƒ1Ìà'˜ng °-„#µžaEJµÊ?xúdÆ„õŠÓ|!’ƒž­@ì˽3 fü„;ï‚ÑBð»÷¢Ý{­ãAõ»ƒaluw¶òÊnmÆŒ}þh8nnoÊL>™  aª^lƒ<WTÄ c#ë´rg8ÙsK2ƒ°Ø2ÕvÈÚóî³Ó m9âd ™cö#Vb#dÇDFt%Úö1foßvØkиAŒföç:Ä×Þe& ø#É)[áÒ°»µÓ»ø¾”0Ÿ Ä A¬­Íà*$zVK2ÏZ0‰e tP=õBïΛ“]ñ®ÛW¼ÿWüù¶¯ù0dâ–ÇÀÛÝŸ7a– w†Z½–„š¸BàA Í}^ð¨•Ed‘"ÅÊY…ø‰ $Ä„‹cž°>‚ºž©¨.Œ¤ÿû  ¯Í"®‰”"ÝFIV÷µŒgœ<ù5F°\·´<ÍAõ«»Ç v‘ÄÎÙÊþâJ¿JðÂ׈kúÆ4mš’Ü —H5sÉÂRõÝÿ6‡”š@øŠµ6ƒI$ˆ®ë!ñŒ©sË®0Rˆš í&ÕÅ/(×6òÂ/ðf¾à:¦Ž™ ŒàêèØ±]ˆ¾6æøÁ$‡éoM²/߇¥ÄèèFÉøÉ3¸L0ë9wèÏOÇ„ª/Õ¼pLI„B4cFŒxSÚ YμlGj3 ÕæÒº”Q`y«{ô9v<£Ë'½V»V¤ávÌgJ fÁÑvFAð«82Å@7Œ€Ã DEt½qJ*ÑŠ@‚É„!Š;m;en£]†¬œœÌâr¸e~瀃[äW3[&“O±PX… —ÉŠG “‹ÞÅÁ‹O^²#@Ûâ…€ä©Y^Td`l¤š 9?+%å4à¡Õ¯yH r°ãÊ.uá© ¸ÚWb !V¡Á r°JäýÍ»þðþoµlÕ¦$™a˜¸ŠÝnë£'¬Ã£?CÐ9¨mŸ^ŸìŠ-UD]ÆáºÌqêª"´Eª}¹ª$Õ#ìm¦›Gu‘¢³ßF4h™+õÞDi¯t§AL™ Ž£°y ´eWá$% ËŽ3õÐÇ™vñ2b­zÌ%~uLAR‚q•u–Ùž Ž».+úÍFSai¢ÇÚ ×¹‰a5Œ%¨´P¶®P4oƒávÌËvÃC¶–¬S“j ûfè„„´2“W¡t;/KÆT>µUåNVÐ3)+ƒãÒ˜ÛyuW^—ñ£KeÁíá°Û,k½%Ž!°Ëe ]¬…/ ¡ÏŒá¼¹Ë»,:¼y܆4í‰êÎ,M§B¾¼ŽÎÊž>ÍçÝ×DI[Ò“[îÕ ?€­uÅðì1ܨãÈLµéwMo ‰X²7T·1Ájgôqó6´9p–—¶a ŽÏy*M) ¥œz¼Bì‹­^K8Cqøj9´žÛ?P ÷_«·?y·¶&ttc}â/'hlÛ‰Ã^3zgÌ©ñá y’Z ¿K=…§¬ƒqu(JsŽíÜ´üŒvlÞ.5 ÍLŽÇ~³«×é†vÂÝOÝ~ÿ°;wGÀ©µ Î8’)-¾®n)Kæn_ rþŒà‚àЖ‰¿Ï>ÁÜÏ ¥ˆ dà‡žg8 ºEIÁ(PPÞtUùÕHÎ#”`Á‹f‘¡E„°”†¬”5¼ÇŠ)ó§D-%©a›R,¼š6f¥î3S]ûæâ‰BÞv»õ1¦r$áâ$³%ˆïÊ>UÏW†mF+k"‹ä¶"™Cm߯Ò%Ës @jTP}Ø^4!¿ƒ 6Ã`ð›1&[è#Lcα 3”²Ã“ ŽDêâ Ï—rô qëö¤‘¾€õBÂgœÞCüîÍ¢.F}ËÆn1"£sÑf¥¦¿¢œ4äšÔ„yVNòy9©BN Äí¹AÅ?i¯ÙÂåðü>s¨ÖàÌíÞþ(Ì[Ÿ R Ü­Ëïj]EF‘Jµ¹ÿ¨?Û®à²ÖäáÜðª™ħ‰ I‡÷cǬ\T£Ätw„ÀÈÔ‰5à ÙArsÖ9Ø™@,µ/'5È9å¤ ‚9¢­#“;ÙÜ߯À#¾K`ÈÕÕŸ++2²³ŒèvÙwÕ#0Ú66Ž­°=¤2 ’öþ㾪T¸œ=Ç(δ:-û»/^O$XƒFî§Ø¨ëÙ<,wõóÁÔ¹þuRÌž`¿üùpz½ˆwË~Cj­ ÐF^½'ˇNñ×óéçîþcMç ²ÿ%FP‚·éïO›Ÿ7«š †”Ö×ËêÔ­&–ö2sìWËÝkÅõ›óÃñõvý¸<ïë݇åIæ9Hæò.–£Û†Ò…”“¹‚O¦Ù/ûú)Ô#¾*«ˆréåS ¤Y¿‘„^>4´a-ËtW¢óË;ÍÓÞúP³á(yâ/š˜sii»­…Ñg!ÖR a7îqxôñ¼ô0è…í*¢^BC(6plÂoÍ„4‹Jå Cá^ùÞ>:¯1î„ÑÒ‹*„×9  ù-óš%«r‹£é0åT;˜·,­Tw¾À±bªžÐyѧ)²}-5ª¼Q`85o KèKÎ#ËZÑPÇ"?n ã !2ø1±_Ë» Ìð§@zäBö»¢zY‘øÞ¦~}6÷5r«Hý‚\8.Z#ðs.¿¹nŒ·çn¾FCµëZJû–\¥Un¡*ÚkÌFj£›j±t5¨ëÃz†·ë #³4Åm8¦Ë x‘”Âã«.é‹òÎH^:ÖA©•zÜÂß¿{÷öß©% ¦¢ŠO9‡-¬Íl©ÍŸUâ¶ :ͳ3–¢Où ݶ!µ{%ƒî ·Ë*“PØH˽ð¬õd› r8‘¢,ÅŠŒ_vŽu½QU|6ã¹Fl£‹peÒÃx÷$t%Æ2üZVvIÖ>õÕ]¯±ZD‹¸h_¬‘²'Õ"´?r. ‹ö‘½¡Qˆ-á•ëÄ&ôçåyˆÐ53÷¦¬Å £­ãå“TÔc‹[wˆï±íjWˆƒ" çÈÐj µ»v´­ERðöÍ»›7ÿ9- à endstream endobj 379 0 obj << /Type /Page /Contents 380 0 R /Resources 378 0 R /MediaBox [0 0 612 792] /Parent 365 0 R >> endobj 378 0 obj << /Font << /F61 10 0 R /F52 5 0 R /F109 37 0 R /F105 26 0 R /F181 329 0 R /F86 38 0 R /F186 361 0 R >> /ProcSet [ /PDF /Text ] >> endobj 383 0 obj << /Length 3747 /Filter /FlateDecode >> stream xÚÍ[[oc·~ϯÐ[¥6âò~iš‡I€y(P£Eѭ﫬¼r-ywôÇwfx?‡²å @ûàÝs‡Cr8—o†Ô×gŸ½ùNx±ð,X«g7 Á9óJ.lŒ+·8»Zü}¹¿<¿úÇÙ÷o¾³b€VZ¤Uœ­<mï/wï»íjm9oúnš¼eÞ–N›÷‡ëÛë‡st!Ó})Œl(ÖBr攂‰„r%–œþ¨ƒ·M Ad–?J­Ftð”iÎV’//ß~¸|Ì@&+Ã7«µà0ùÀBÃ<õ|àŽŽ[x‰²ŒøÇ°Ãb`°)í‚ÿ ­÷ðw —+)–›9—ôÁ.÷«µ6~y€×·+iá½ßÁLÃr³ZÃâÞC[|ºCŠGx½C*‡-"½‹åq‚‡Èbï7ññ?ïVJ,·+@îŒÓøi|çr¥ñ©|Ül·ñ%²§Ç=-D,Ïš } ò¼é—þÐ,ç.õ$¾™‰¦eMbä @Á‚1Q‚÷«4ók\çÕZN"ÛÁ£G2M Qáü€ò)Ï#Uš¦€uÑçv W¸Ô+ú`±¾Ž®Á¡‘n»3vy¹}X­±k αÇE71†Æç—g°úE¾ îÓtÒÿw4¢î‡ŽËQ¨MÔªí&©Îv‡d8ÝíS¤ýXõ ×10¦‰¨¯žþyÿ@sßÜ¡eo7ï¦`$ó¼!-Aø"ÑmZmÔlÉ›%ü³›%zKÀ÷Ó6OÛ"ý‘žeZ/Öë¼ÌËú@†‡Ê18 #L¦d‰¯ÔèÑ5hÚj±4ðà –Æë\ùZqÉ483˜0 È™=Ï·«5SAqç]·~÷\îx±Ûm¯‡ñBs&zÞ¥kÀyëàþÚ+ÙZ«²Ë¤¾ô!i>Þd5IDbù94X—ö>š’˺O›¿IÊM-É©êý!9׬&û2oðØŽ‹¸µŽq_¢Õ7 3¹üü«–?ÐóŸ‹•Ž)Q´ü&މžTD yÄ%6>,k$¶]­tt×ÙÝ©™»›z6òΨå×ðø”Ù¨¤ú7ÙA=’FHr󵮥ÔLÛ[ö‰K¶LÈb%(°¨´T)²MׇD/¬úMœ}»'õ@þ*Ësê7i²Ú-â¢$­°Š€Oke˜±ºFf0CgÉñM–¾ÉHH ÆNúV G’pTN?ž’gR§³•t0iCKÌÎ)ÇEn-®q¤kç™6ËÀ^‰Wí,Ö ò6 6#->Âü84@š ð±£kýëelf«Ê.vk,K´qtÞÄSêL÷± ¬1,`{&)hªÑ€DR1Ð ME G˜‰sÀ.30åR¦Cï­6ç ñŠ\·îßr‘ŽGt‚[æ{ãÚ¢½*-[¤WK‘ÿk€©¶éÆ&.qYï➎9;!o”`eŠx9çÛÛF~¸ÃÙÛÞÕf’‹ÇȆ̖}ˆ“ÏÁh_ØP¥UàGòI(·Sš²¿Ø#ªï'>£ÌÕIyûâ–N~سü¶¶$‰xñŽ×Ù3Û„ˆMíE+èp„©¾C ÒîSs‹ˆv«¨Â_€ûÒܦùWcÀˆÉE/LàTb"Ä9Ú‰›-kbÐHG³Ýô Ô6“ Þ·Áèp¹½goG ½kmVÔgTÅI"›í¾&]€E¸Æ,Ü+¸ç’uUpи-Ôc²TF÷BLï'ú<$?M €p´ÍÔÐú¦È1ªå,)èõ˜ð=õ¤mËŸVšgŸ¦& ý4ˆB`NÌð×Â"Ë´/ñ§¸L'­ÂF͈A½èJBEÂô¸)ˆ ¢¸W°ºWšÆÛÉ,çèû’™gàAA–Ðí¶âû)ÞA•5-¦ nÙÿ0HëQŠ16ó»(ÑZÎ%Gƒ†õ%„ûHuÿK†ØfØý\VÙþ2Nú\v½3(lô-¡ÊÈc›Ö7ϧ–¼›ZVåÕj„ç*©£²þ•'!Ù(¸ë7qÿ×ê%p¼òPZw!4åEdç­v‚ÑU/ó.Ô$/%¢ç6D»Ø>þˆIò¦"/ƒˆòǨ¨w³ä†ˆºõ„™[TÎh½?:™›3Þˆ )æ0ÙÞÛôa€pÃ}š¡È£>¦U4ˆšèŸîuK2ÐgÓ¨$’¯!kóÁæT÷öq?ª]bSɤ›N}8 ’y]’£«ÝãÅözÄÒtÿB]Ô1 iV›EsL‹‘@S"ÃrÝ”ì±öÍÕ¤ì‡üò_X ¹HIÕmô|:& Ðz4;p¬‹HNÛŽä¾Üò/+ë“c¢ £¬iAð'¨tËo+Š\BÂÅu?_Sµw7òœiWê1”x=Ó˜Ø2|$úϨ$ ÿź!û4àeÁpÜŒ×B3¯L×ùx Û =^V_—Ì×tü·#V–9§ji§¨î `¢. þeça2–ˆQZyf亰ݼ+èæ)×\ñ¥åâqúZ*ÝÐÔ#†¬õDš+ؔ՜$”´'{-[D}JR€¨[›Ôb:ø ïe…ÙThúµr ã%ÐÓ–ÃË ÚXks26§¦EÆç9Ö*€Û‡dì(<ÀU%´ä|C®$ä3ñ!%Œ“¸¢7q¹<[¼·}ÍÕ­¹"㣫 q¨ÐTÊõøÀô5AB˜Å Ù *‹mšØ¡Îû¶ËhFh¦ÇBiÏUNlµל/I„ã}8³a ôŒáËïÚì:ΪhîÔÃ[ŽŸ¤ÕÀbß#”)ü|ˆß(#´ap¨ cb‘Ø«sΖ>_Ñ@à?7FióÁÀigVÀïܪd–—pq¹ÛÎ…g"Ÿ‹óaû(Údž£¸ÜŸ9´JM-ùHD ÃúCBBÁ±Îð©Vwu=Y½ö|YÊæ¥³ ÙãM„d"癹½ ¸ô­M¶+,ƒe‹ÿiZ:zŠíÙI{Q‹òTíÊ·Í4[Ÿ›³eÓàðy)½™ù&­t(ø¢Õ¶Îg–FL*ÙšÏpùÔx Ñ.>¦x†§øSsq —m ±Ù¥ç¡Éš÷•?Þ.å#‹ÇÇ÷¾êžO*RšF­r©#Õ‰±ÑÔˆd™N¬£)ذ?¦µåÜM:Ûgíù6&iãc“|<Å/ ¬ Žy´fR¸_]êiv‰ã¼X»E¢ãµÛÉ:Ú:V³Ø0=í§ý››Ê£€û$¸N=ñckñ*û©Ù„uLØIª—”XÖ²á‰J,½­IÃÍT›¥7ý„½Íª:Sµml>exd{$9mœ¹îDzÝ—WÕWü“r*RÎSÝÑ ê(­˜Sæ Þœ™g<ÅI^ô!T1£'›59®¨5›x솚×ëÕŒíüŒ"*x;rrÜ2?ýõô#: þ<¾ÉÞ9¹8·œy讄µí‹§Q"Æ™©_ƳÔhüË»ü©VéªkÁë/!1ÚÂ5_þ4pià­”Zæƒz¶òÇ­ìŠw磡-ˆqêÈ–q#÷Z¬ú’#š ]UV£8Zˆ8 ÌÈËÿ™Hü¯.’™DH*ó0^Åù6ÊP|ë®úöZ§˜e_7=NUi0|ªÑ½(³¸—(S ¯UšRíÏ¢µ8ˆˆ²óeÁ‚ƒJ¨î|¡f§@œU8iÅx–÷c¹<ói‰3ŸÜÀI.æÓH<àã*¸¯F›"˜ª)X @Ã]ÌÖKš/mƒÎnm>¨E°‹†¨„’I™š«ô åIûtÝ>ðÉ•o~¡¨Aà A‘À¢l1¡FÛòpäî+éWCp'­jn¶Zk‡¦zì] ‡Â–ºúzR=Í%“x}¯ @Õñ~à%Ÿ®9 áQ FxlëÝ…‹Á HP4¥Üº¸ª•ÀÓPù+X7äª3ï7ãøÉ{åp#ÁâY”j‡û:_¾ÉM€÷7e³.Çø¾ætˆÚ¥’ôÓ ¼Ÿ ùj̵Üv…öZGÂS¡žn C±ÎÄây ‡T $Bßc9Š´â‘&)£ÝÐLý¼†û>¬»f.Y¨7‘7£_­@|°Õ,(OÙÁë¡*W9”{Â}ŠWÈÈtx¤lŽ'¬Õ/|9üåXs˜Wß§'š¡íÑüRÔë`¯Ë/ÑÖAžíf{GÇ^§êÐ0NV3:x‚ä±Ü{ K7:Öë¼{® ƒ\º S¼tã}þ =gø.—è¨à¬‰ê çf%»Úɹ|šRÊP‰Å´ü_¿åJ?…â…> endobj 381 0 obj << /Font << /F181 329 0 R /F61 10 0 R /F105 26 0 R /F52 5 0 R /F86 38 0 R /F109 37 0 R /F47 4 0 R /F107 41 0 R /F118 40 0 R >> /ProcSet [ /PDF /Text ] >> endobj 387 0 obj << /Length 2966 /Filter /FlateDecode >> stream xÚíZÝo¹¿¿BoÝÅE ¿?®èC®IÚIQ ¾¢ÅåȲtV#[Fl'ñ¡|gH.—\q%mEÙÚÕpHÎ g~3œϾ{üœY6³Äi-fgë™sD3ÓŽ*Ìììböss±¼|Ûþrö—ÇÏ5›9 åI'̹ DÛ›åîúîÝnÛÎ5¥ÙFUÆßjbµì]ìîÏ·«oI¬+’ý>P(žQÌg„K_q2>]µ\7ë–5‹V±æŸ¶wðøC;N6¬»†àXZ±T.Ÿô5ײ2¯!’ꎆkÚmÓÍ4qFX¤bÈäLÍt ½M¼z*A,Ⱥ›2Y›dRžg¬Áf˜m>Àä—¸C¿éwí\5«~-™,-á"-ù¶:Ýïhç\ÑæÊË5áóš*JQh"{fgŒzYÁ`)íwq^a/‰¦<ÙIËh³®¿ÖÌtÉY¢]¼k9m–—Ëåõ]/ïñ÷°p*ƒvUm¡ T§’½.«º¥ ˜LíœÕp$͹6D[QÜY;—®Óh…5­Ô`xAz[|Çñ«† ™ÿàoïÂïáåC¸leÒ'>ý¾ ÃÑ€w­`AvQÛa‚kO*˜Gi6Ðr\ ŒZµž#Ëw¸¥fsÞ²Àè"nPxÀÍ?¼æÒÀï>Ï ¯ls“^Å¿[IaOç„Ép­WžyXÜ] ?÷û¬':f[§–Im7^zsMˆuv¶8š )°(ÐXˆRkÜçûnã[»s½=î¼Øx¿t”¡³~Giç0à¸2hD™‘Ýqez&kO*ýñùÖóϽÂY¯ú¥¢GØ„õúWÕq ¿w3úq™+ýÈ‘»1ž<¨ªxPn¢Fî¬^s#ªJ³è”*üüq 0Ú:b¸,Õ7à’ȼ€„sHK: ;ƒq¼;ëÕ¢ÆPÀ+ü@”¢r„ôÞn__Ac³õ à#zCŽb¤ÔܫĻêΨAä¥áoãô"ØSvÊxŠ HuËg¯¢,Á-16…¼åî¶n8'Š©„„ÂÉévšËò<ÉÌÇ®àA#‚òÒ“¯ñ"ºï¤ÑdB öTÔ`sÔ`KÔP3#ˆôÆèhE:³¢7·ËE5 ÐðÌX†Ñ`)_H]¬d_&ÅpD2ñÕ¤ßóoùÅÔüBLË/ì—Í/ž?Çupn÷èÆn<\)¼Ð"‡>^²NwBËOˆÛ%{ k’Ó"E¬Ö(ºzà’pêú˜2W‚–‘Ò/çØ‚{õœG¤¿ô€¤óO* LbÈîBJ?} ÜcÐÜÿXÎsç}iÉ¥û 4_„³†ƒsmL^¦8 # öS BáŽaAf sHÁëæ§¶†7ýâ²½E8¨ˆ²n˜P‹¸Ò×”r¿øë®~°É\Áœ;VÙ…ÁÈg, š#L§ÈöPƒ+Ûƒ@&p_E \êYFԹËê¼`•ŠN·šne>/JRvå"Ÿÿ×Å+SJBŸ¤ËG5@H‚SpêÏñ”˜„§ÛcpJŒÃ©Bpò³:Îg(^)L®€ÇuC#¬Ç‚Ÿ¡o Ëùt_ z¬!í€;£0@Ëٳ㠀ÙÓ}h•çEeb"”Ã7åöÕ¿-Æ(ãV2fV26jý×ñÌR§X=õÈíH`º—Q!4¢«ÁájpXw.B¦±Ýrex‹„PöjD°í ~ùÏñªŸzÈ{/Òûß2`€ø( <^j`¬Fp3¬ u¦ìè`• ÃŽÖFæÔÂ2Lé þ?Ý2:þ~\D‹±xwÓæ5óLq¶–EF›_cú.<ÈiŽË¦RÈÜ׳ŠzÕò%”ª²úµ¹^WJ ‘²^¯€!›ëÍÝC-&€›1& ü¹Æš¸Þk¿xöìY £ ÀhÉü§ÂpZï>ŸþøòÍ«'ÿ¬'¾VŠ£Òe!'[«±”Å@Ž-…ª_j%æ`†sëë99Ê|5·\ )¡I‘ÀÈÀ:)‹›&9è§ Þü þŠæ¥ÿþ·šDay¼èÙ­I¬D»ŽWuƒ˜XU».‹eµU¯ö3µQ¢C|²ÝÏæ"–Ó§¯jx†#’üù§?={ó˜€7O^†"A‘Åí‘ mË™´Ð‡,Ö‡,Ø#ê÷YúøWX[Tð‘§H!J3ƒ˜Yïú|µx×aL9\7äÐm[’qØM.âWƒ‹kÊ\sä–é*w›}†xhÒj¼Ø¤µ]ªâ½µ'é/ø¼öïŠ,ª+ ëîu´årBü1ÕÉó»Ä¬TZqŸjã4U£ÅN5ÚAÚúj¨6_σOXV\Ì6°B𽓃v0°76Ñ×’Äd]µNî©§LY˜¢ŒvîOàù¯ðù;|^„W ”·…¬Ïû˜UÍ%žîá&»Å¹üaÜ©Jt‘v€õRE¨Ü“— 6Yf1W]±#–îü­ ÒDäq<ɘó"qöu¯A™Ä¹ˆ3÷CÉpê=12‰,¥–Š6Ï‹RWrºÂ˜M˜£¾\˜£*Vvú%µóR µ`I!#¥f|‘'ÖC¥1Ô¢(ñÄqë ]’í]XkŸâXý‹]WÂ$b*ØÄ8iˆé+¾xàdBà{—ѦôYñ -Ò?‚Ex³Œe­dAøò€›ôc?tç>ÞúAùŒ¾2—ÍRÓa€ïö%K€yÜ“=êâO H @AºhÒLx²Ä…‚p•h:^-ß–rbÍïÐuÄ:ìÈéb}¡ótX±‡Ž!Ð!X o>¡cðæ[Çà't ª¯öFOL¸Ñcý÷£7zŒ»ÿáÖ„Ü¡ŽA#;Æúàšåþò„†#ÇZŒœÔ<Úg¼Û€‘§µaßeó Ò¬²ã)×Fh4ØIaª#Üðjó`×+hÁ–hÐW(X­yP2~¸yP²ýI&Ž+t¹œÜ êIsà„3lÄyêŠÏ{̓ý~RŒŒG›A°B¹i̓NŸÒ<À•£T™û.Bï¹'6jÞ&<ØÈÄ^s pj¤9™åÍø<¼çuÓk¶t¼—yB6ZÉÄ&tJêŽuJj÷;qÜI€H‘ 2*Îu§,ÐŽ1ê&uj=èkó{·yM¶_°Ðbß×'÷²Ã}€ÌÔó·9ÔûÔ>@!ìÁÐ'Üñ²·S$þ2%òÉS[Ôc-y)ÀNi „tÔØTþmåaÌ®~/ûô¶‹Öb;Ò(€‹Òmþ_µæFõim7ßÚ¿µ~MI£Õ\@ Txœ<2úîÙÙwÿŸõ° endstream endobj 386 0 obj << /Type /Page /Contents 387 0 R /Resources 385 0 R /MediaBox [0 0 612 792] /Parent 384 0 R >> endobj 385 0 obj << /Font << /F181 329 0 R /F61 10 0 R /F105 26 0 R /F52 5 0 R /F86 38 0 R /F109 37 0 R /F118 40 0 R /F107 41 0 R >> /ProcSet [ /PDF /Text ] >> endobj 390 0 obj << /Length 4020 /Filter /FlateDecode >> stream xÚÍÛn[Çñ]_Á·’h¸Þû¥A8)Úä!EE¤²Dɲ%Q¡(ÉúñÙûîYR$ìyx.³³»³sŸ9_¿:yñ­â3GœæzöêbÆ#Æè™vœPaf¯Îg?Ï¿Z,¹ãóó…`óÕ‚ÍÏ\Ï×x÷°z~®¯†ÎoLÏ/ø B=à¿ë-@\°>؈‡…dóûG¬ðô<&7ÓÄaÄí¬€Hð0ب%\³Y4ñµšyAu).Žœwäà­çEB‚Óò˜êó”’PË>Î/ʲ ˆ&\eTã[™wþWXž`Y™¢vxM¥¨Izf‘rÂ2¿TNlf¼7ô’hšÑgºž¨ÁØg8}E¤hNáŘÛ3æ3º†eózº?£ I”/7W#²1C¤Êt;â´*“â5e d•¥0gOä €ùå4ùõþìôz5˜ ¤˜lÝtç}žk4NÎ$g]¸#œuá´÷1\2¸¤#3&ˆ63øÇÌnK"Œ‚¥( ®G*9Nïs0$k•5‚üá®dxó…yU¦îqÿ^{4ÂÉa6Ño$]ªVñþÿÌr~à¦D÷㮲~÷5™«Å×Á?ËE8Àm5xêaõt˜ÒþXXä´H` âö%ƒˆòq:Õò6 kS˜5‚'­ww¶¾ÝnÖ KšR˜µrë@—¹=_?¼IâÚ"Q° êË‘<3fˆóÖ§z9ŽOØü/Èq5‹ +J©ÕµFu^u%}ŽÓДHªL%ïT‰{ð¤Qu¥Ý†–Œà²TA¬ lÊQhçΛÝuŒ€àYa×Èþà{qÀ½Ù í5»‚ã«ÝS%î¯<#* \ÄH³xƒ°¯“o^üv‚$¦36†$˜ŠèÙÙÍÉÏ¿ÐÙ9¼_™p1ž<à ÖJ¸ºžýxòÏ“¯1=×:ˆÉRÀÄáÁæDoh ˆáʰc2€yY£àÌNOÇÁò̬‚-öÂÐl/´«£/bQÝn+7‚ù¸E»"¦ë8¸£Æ³B(‹’²é‚=àt‘5ˆ¿i·ðk«ãÅ›*Js2\^Vº ·QMÝDübš•3ñôüBÿ;=v`´°=ü~ÊÁ#.Å:T>sðªñrÚƒo6‚ùAo¨¶.—&[VÛ%!Æž¹ÕűQt˜ü„Íe÷5­(š¶Ï9(æ*tlJÛ55Ê; Øäµý:tÍaaY nA¥°€äÒz‡lä6;|?PÄ•Fð¨Ü|``á®áƒwã¥ÚÄV%äÉÉÍÐsD2— ”V‚(ÀYyW×¹ ’÷¹ºŽ”@ õ×ñ‘€=v™ØÞ¯Hþ>½‚_i!˜Ñ­¶™è~Ëv²,4ðéùBê˜ùYÖ©¡àòX͸W¬"Í'w³JãÁÍß¾÷w?À ïbFž&7:.?¦^MÒƒ–?§CB ‡x”Í—·¸ãœ q^s†LhùÔ)<ŠS‡|X“o«}O<ÇÊdŒ|ÃÉq…”˜Ž‰©B6‚0)gÒ¡ÁûD… ¸8C\ÀðI{l‰Gº¥6Á$ KGû$I§¤€g‡9H’¶ïË="—{ð6ypYR‘³D–‰”¦ÙˆÂŽ Ð…Í#@m–JÛKŒçÿ†ÿbþ½¿þad" <•‰¨rTçÑéÀù¶M8s}GF‹×AD„²#Û’†ö5VSwÝUc¢Ïâ|–£Ñ"Oã<·¯‹øÔ#\ËŒsÛdYÎl錀ÕѲQ·üˆa‚ȹ™#FoÄχÃDÌEÝÞÉ4áZ5³½&F$oÏ·žÑ€‘#õjoºå¸õÝ‚«–³3ßU#ÏJ T4´‡hTŠS9‚gÇyÿñ|ZÍ£€oÔ3i8ÑÌ}ŠæQpÒ¢(©5ÆŽy‚χKI9a˜•ß@BŒšY¹åbP±1$.–öŠâ>Èá÷9ƒ°ÏÇÀÚ lx^[²s½üÑKOΣµ~œôîs•+G¼¡ŽÁ-÷Æ3ü¢——´/„§B·Ê7WÎöÁ+†D¬u^wúÃ’˜’ÈžžgUÚ ™GÊÙ𰯸’†ÍùÀ\pöÉA.Ê [JˆT zø4'pA`!Á%äÚ|¾0—+Qk›&Oϳr:‚½ã´.¨¤ôWäOo9üØ)I©?²Ø(ƒ,óØ #ј(>ÆKþ·Y¶«{_΋yÀN‰eàªRÈ2Ö&yS±Úv¢[J‰©\Ί1, ñJý“7M*ó><¼+Ž/àzAR³BL«Ü:DE_aÙð«m3ÊŠêÉ’½w ~l×/ƒ “sö£—„ëž±P"L”e]w~Dm™<µTmQVŠã¼,W.;†õs½æÜ”eÕEx|–U®Is=­v{ö ·vä«°äA4ΟQ„SVû~Âû~|Ÿï§ >Ì:ÜÛ™U1ø¡*isÖ/Ïð¼3ÁÖÅ)„·®­÷NïŸUá„¿/©|¢´ÂÅf t·“•”"ÜR•l”?é²$›V:ÖÕXÇ÷Ñ*QF(×ÓBb‹ÜO6Y™ìì*{×øšuV žq‡ÝÈöÒ¡@d /‹öQ£êAÚ$ë©€ø½~P¶q (2J[¡¾D7­‹NˤO'¿ÙÙü'¬&†ªCló2ÁvÑmÛj–7ŠrM4­²”Vf=sݧx_© Ò‚pûõ?BTœ?ˉ~Ð.¦C §e•{™n¬jZ±J**“™ <ÿMŒ@¯g,áÜîÒ3bWŒ©”ÞcÂøQŒ©ëìŒFóåŸá¨«©CUõ•!pî^Kº}7ã'òïKN^+|•F6œ¯ÙnŽòë. ,QU›‚tô 8¢vÒ0&y_Ê~ÏóL)Þ Û¯"³bÊiG]Oãd¬ëÅæîåa~9¬½ø…½‡Íå ž ;è0+läaÅ=¶¿º'1²Pøêž)Õ½º¥q„qæi”5~I]ÂößBÆ Î¸ÎŒ‰µåæäRnÛº›J¥ÎF>i0]½5…Ý´±ør—‰@ÈÔˆ*M7_© bÓÜCôÕü°‹Øïw;L»!¢ÜV‡!*?¢1xfÍQ:´“@«ÿÖo¾Š(&Í€=ëœÛªÚꪦc`ÛùÍ8&̽÷ŒKI9F%vûÆ>“•®iš¢6S¢ŠZ¢'Ī.'ÂÍX;ìU ÔTvêòé ]=!]ç®”crq¦0(õq*êm‹t±‹4¸òå$iµ‚Ç\Àxœv\xD5›¿8–7ÚåÁÎìùnúcºÇÆB‚ÂR;`ó®ßéf ÖãÐ=vãñtóG´˜àRM‹nTë?M¾Í0:G/F?S´ÉÐ¥‹^ªt¸QÇ*2[ã`4šä:î!}Bã/ýÏqæÅK0Øã8¨‹–íf¤–“A¸¨³=Q÷%ae@Ÿ¯²T=ZEºR3<³¹%.jT®›Åúd©ŠÉR±[ºqÎ6-VøÈêbsz3âø?©M=¬“(ôLKñ§´Y çH(vÈ5îX¾s%UÍS,¯ZZ¹4¦KbÀ}þ$ï|b ÏÄžœ…qÍDMòÃ`Ôz£t¹˜jbh›eü²ÆÅoaÜón_ÜÇ:L[Yú˦Â0´½h«5AwÙIJ».甘¯ø¦Á¼Îµ÷=ÎClº<«+äÍö²*“ïǤ Ý®œvz®|âÔúÈ)@‚à6´´5ûª¾m©‡ È:ùv ³•cžÄ7gÅ·jRŸ{úd;ÖDØIÕ4æ\e'PaÆÖ¡ˆéûßr-»?5y/ÿD “¯§iî6äØ5ÇéÈÜÇBdžÉÇYÕ%1¯JÉÈþ••{[ݬj*Ìuš¨ë.)>/âœöЍÒJÍ×Ça¶?07Ñ€IbçMI.­ÃmqPrUBäŠnȹÔú2`èQj.%øEN¸HÑ|>·”]uï{²H&'0}ÆSäD{Ðõ÷ºÂÕÛq0i1V¿÷¹eí©Œ¶1)ÉàÃ6lÈÒš—8}ÕaÓ“y¬ÈgØ [Ê ï‡ßt(Â]IR [œ¶Mùïýh.°Ì’ϦP}«Ÿ¼n,“N£–Z×QAÌÿmÍ Ý÷8f§,¢.·àØÝÖ1í°¸øªþf  Ì_*øËXVÂe;GáßcN|PóØMXtfÆS¶;»ú×}Õür®øÿ^¼¬¿„ü=‚?Å2}øÚò®N ðnþôU"ÓšHdy¿€—©Žý?hÂľ endstream endobj 389 0 obj << /Type /Page /Contents 390 0 R /Resources 388 0 R /MediaBox [0 0 612 792] /Parent 384 0 R >> endobj 388 0 obj << /Font << /F52 5 0 R /F105 26 0 R /F107 41 0 R /F109 37 0 R /F118 40 0 R /F181 329 0 R /F61 10 0 R /F86 38 0 R >> /ProcSet [ /PDF /Text ] >> endobj 393 0 obj << /Length 2128 /Filter /FlateDecode >> stream xÚÕYYoE~ϯØÇ‘i÷}ñ"xàÁBB!{{aãµìÝ$FüxªúžÙÞõ‚"¡x-Ywó^hx:pãò’}/Y÷ØsÈ5#O¸@~K¤Â‡ËÀo<á¯?Þx dÈ`WüO7G·e/º»ÁŸøv ÿ(<öQÌ-î%¾ü€ŽÀe^©}xƒrüÛ-¼XµÞÃýC&‹üßGñ|Í ßšæ ×_û€&DA ‚|î#N©±ýƒDኄ›hðõ_îá*ZqÖ¥-ã‚zËxßÔÕ¿©”Ù¢-¯è(¤¸*„Þò(f¨ÐÙønŽ ·èÜé}Ü-°RÙûiWÛÆÓú­0Ÿ^!b|N¹5ì9Ù9Z}PŽwßG{Y9ÙŽŒÑ­ùzNc2‡6Æe“ͳÛà«FbÖÃdJñª—K¨>&Q½„ˆ¡ô@|È–£÷}N`¯ˆ§¹G]RÅ|õ/>¢æ› Þ¨¾hB#1d.‹¼Geˆ2¯ŠaP‡\Úä(Í¢û~y÷£¿þ©U‘@á6z0V¤²æŠ_bÝÐY9ܳ9Ìàò:®}Þg&É–‚û)"1Uýb=ñeÆ/|GMnt•ÌAw²¹…|ð‹k3U¤@ÉT¢$‘/—è±ns±á?ˆc$Ê5Îè‰oGÀ˜ÇÀßm·×ëVôK3_Hï#ÊÂ:—…+ÊPMk dPk7iiPÔÛ©é›F¤ht0“ cè=¾êÁÏ]ŒF!åéöúŒq§[Ô¢—¡æö‚¡é crÏzZ—‘Ïcè¤l\Ç|ÚßxK<Ò¾‚×&ýe\#e,ßAøŸ1Ŷux®­’[•Îó>¤àC_ñM6Oè¶î _gC[I= v M[hP/ãÂÅÓï‹ýÕŒNÞìÖ÷`*Ý}÷jôx}×JL ˆe°ˆ©þ±î\GÇúÍÄ '2ÔQ¢%‹)Cö¯%˜D’‡”C;wàºmK{«‰Õò<|Ëž¸ °¸úBŠÄ;Ê$ó³áGAÐ5*LR˜f¥(½á¯ lèÔXÎCÄ!ÅÀ0?÷Ú¶±f V:NͰêU‰÷¡Y±Õ@“šQ"œ JüÝL âÔËŠ ƒÓ|c¦0Þà9²¬"ZÛËiâÇÜ­æ|UjCT:)[+`¶#,Vw`Ö ­šÔôZÂÚç”PÆN´É̹’&Ï=…Ûë0œ$&ë›è¾4åÜ¡N©–IÐc½jb'Z#jìÄ=v;ñ&v‚‘”Ñ ý>Y »qig)Æñ~ÜÊ&ícbÝ¢³Ê]Ó§ðjUP¢WÏ뻞<‚ôeoÁ/”9Á}q#ƒG}®7ë·vì`:˜D¨f1ôÍŒQbç£e´&†g4öÔ*”¨Bñ ( –|üK.þT ^)FBe°N™âÉÛ‹v4 ꛋ։I®Öð‘ªc®º”X Ѳ9W²&Tº†äq+6Œ <@» ÿÌQò]Ó$°#Ëÿ7“ØÏn’‹x«6&()Æú¾dRƒf,ÇÛ­Ifªç†4€:è±) ÑèËÊû&Œ–m‰r““2!Ž€f¤ÌÉâ‚ w¦b''ÕAN'÷+K4bwA¨3i×,–¥ƒ‚Sw¤"5âÈ bŠá^·œc«Ìj2áN½À‰¶ü\7¨TÖ…Z=«ˆ’èx,ÔsPžå ¹Ú‰÷M Ö€Z @Fi›™h¹ìa ↊ôur-ªÙXkÝL 7ÎÖØÒ›Ææ²Ôzy’rÀ»fÜ€Já÷ÈžR´üË(”YŒ„´QkšÑúuC(äHñFÝú¯VX6Œ†ìVàVDíþH˜1ÿR\˰¶-jq_añ•a&P-»1¨þ*;kÞjjœ,!ä±Ƞ¥š`v ¸à³ƒwÏÆt”•'IEÉD~Ñ™ Ü/x —Ç&.oÀHV~¯ZÃò’p%OG³@0bÕ>•âÄÙ£ëÖÁ‘F—tk°)Ù]ËfÄ S8°œ-ãY„zÌD[sȸùBŒZ=JÕ)¯Iæªggà)™}vµê¼9T|' gôÔ‰ RÔŸTÃT$HÆŸ Œ+*ãKºÇa“ øøØ_Îv6xƒOñÌe½×遲ŸextUQ­0…V=ÏYVŽtòì·ôˆr·am™eU˜%ò³˜»Ó­W½'TiG¸˜¸úÄ0’ƹpž?.ÀhÉ+)õATšnRwTáØÆ,R>æT3Ua[cÖóHæèl•i4& ª-#ßùc"+±(Ÿ“£V‹ƒQ6û(c¡÷‡<%W™|Ze8’Îðó÷„$t— ZæÑ>û2ƒ†‡OùÀdtS‡Tëxÿ¨½+f¢†Sñ³Ÿ‡Ãc>ª‰£qõ9â|.ÍïW𼓣Žp|Á`’•xæ"Ç:p£7¸MŸw_|wùâ*%u endstream endobj 392 0 obj << /Type /Page /Contents 393 0 R /Resources 391 0 R /MediaBox [0 0 612 792] /Parent 384 0 R >> endobj 391 0 obj << /Font << /F181 329 0 R /F61 10 0 R /F105 26 0 R /F52 5 0 R /F86 38 0 R /F109 37 0 R /F107 41 0 R /F118 40 0 R >> /ProcSet [ /PDF /Text ] >> endobj 396 0 obj << /Length 3670 /Filter /FlateDecode >> stream xÚ½[K“#· ¾Ï¯Ð-RUÄ4ßÍä'v•S>ØÙ¹¸—K#iv:+iÆ#Íì®}¾ÉfëqÉa5R7H‚|¸ßÜßýå;¡gT.›Ý?Î4›)C‰èÅì~3ûeNtÞ/~½ÿ—#„7Z#çDQ>ëÕ?KÅæ?Ã'Ÿÿ`¿ÿ˜Æ¤É¹!¬c>ÀÌ'ø·ZH÷e€ÇO?ÖöG²™&Fw§YjF”³%3–‡a†ÅcŠÐÞ„å?ã"»ÝbÉ™‚•àã׆'´›oíê–x/æü¾]û€à;J¹A*˜waSiGn;–rxtñùΰuëx>àão68Êpá’gJç{xøb9JËúž/:ÿ _¥|€n«NF´“³„¤¸U£„KË»ùÏ?üøÛ‡û…ó¿ãÇý÷î¿ÿLJ†„uGL2ŠÁoÖ øùO×1+ž²íEGç§š-í‰îúÙ¬ÌHé&¹_,…‰2ŠV¨ùûb´°Âwøáb©®Ó…€8Ëëb)ÃHÏ®²b[ãØW;Í€‚ êFÂ$ôïÂö¸5¾KÖ¡ p‘Ó‚¥MÀï¯ËWÿ÷cüμ„'Ï!ÌôÙZ‰åZà7ûð1ªÑn ÁÒý ÞJéß Ë_¶©Ê€ýüÁV±#nø EŒÛ]ZÍt¥J¬½(vË&ÿ$ÈteÀ~2¤;µŒMs"dt›¯»òÔ>¸}.Y,{£æÿû·ó;—áNƒú–¢—™úò¼‰^…­xÃipH)°ØE“>žV§áxÖG;+Y7¸=áZ†/κìI«.½* æÂ9·?펅kŒ*²LË®Ék×i2qþ6†²|l±©ˆêã9‡9©W¡ç˜šŒ»B¼ ¬ÕXM8¯£Í#&ù^`mó¶™bMuDÓŠ3N{+çíOhÓÁwGé¸`V¾H‚Bt_ W ¿7I¾î@اÑCàa|Ã> ÀÀ·ÌQ í¤0<él¯¯ 1ßn§¶+)Ñð-Û/ñÓö4›vÉ”$=èwÉ4üUŽ|uø¸Ûþ¶@1¬¾€¨XßÍ÷ÃÁ{{m,Ê5‘Ú€î$1"È—¢—¡Ñ_à÷B¬†)ëѼ^TèÔaªÃJç¿;ã?…ˆEG%ÓÏ*·Jûô˜˜znó÷Œ[C×öß“yœ‡©ÞÎp µþóÍ›["ˆl€ô3ÿ.ó²8yÉkrž dL½9·oL&ד$ŒÆ3=´4 X(Z*Ýp¿k«?0ÿ®ƒ„×‹à˜£®ChCºU@^àT$¡€ ‰"¤skûwßÞßý~‡‡µ›ÑÓ’h5“ \ g³õþî—_»ÙÞÛýl)÷3õè"w³w?Ý}ƒ0”v;ÒKc¡"ë)8ý~&¥!¼òÎt¼}0àŽ#ƒ=÷.(£ ;‚4ï=¹Rt&¥"8*hKôŒð‡à¹ðüÙ³–¨Ò„ -b"Â9šz$TÎ2¢õXz îø²ô¸"RÔò+ùñž:çæÊ¥÷©Å˜W4žÉýéæþÊIWìïƪö’0Èè Ö­Ùd–'|jEÒC‚’é$ïE…Ñ’÷Þâ¿€ãmœÍ>Y»+nHüÎ*ŠŒw¤Ãìm\ë §˜Ýšð!%aäSxçCÔSá—Ÿ ðh¹C¢ˆzð‡LQ ´©•°Z€(Ë©Åõ^†Ï-DŠ€(‘ˆ’X4¶ûQVÐ[ÏppŰöç€mžŠM”ûÖ9؉)ЙàhFìC”ì%ÜÈþCáqÛq–áaà¯Á ˆaÁ©<Ž!ÌÿØúàj£oø¾>­'ÿc³-~"ó_rZnœÃÞd¿÷âÌÁ<3Þ¤GÈP©¹O…J` or ¹ ‘€¨Èb.Òé[£-ƒLToJ`m9Ÿˈ‡HS¹am;UnZ­ùb¨of1gâ?ÈáBüǪ+L £,œq>­lMùÕ½ àGåÙŠ;5 ÝΟp½££\¡ s—¦qPTáÃð§?_ôª â~ªI¼ñÕ‚ cü"ç„®L®:âÎKM`ó[,ÁÎsŒS5ôYûÃz¹é, ß›ÚçUŒŠlbuW€Év=æqÒ 1H<x9'äÁþ†ô2¼»48˜ÓöÕþn%qªäZ P~}^äõ€z_Iz÷ª?¹gy„4“·í–/b ·ótŽ|TÀ 26.ïQeˆbK‹å!¿„˜Ûeh@ÖhÀtͽµu»<:‚Ü\ðùä)g)ÅA:_ýஹƢŽ;êÜéý1bp¨À©DyŠŽ¸Xò/Ér j˜õ®‚UÁñ4µ €ú¢ò„˜ ¼°vrDë}ö³exÀ³öf %Ñ€ŒoçòK'â%³ Õ¾ðáÆ…/ûý€é~6kSêÑÕ5üTY*³‡5««Ú¢ N¸ÍeFT¥¢YWVr¤Ûcò+ÛVîO¸NVÛÎt„›3H•ÕÆ¬/ý—e­®æ8ðÀl¼ïÌH/8$UÌ`ãÚcé@‘(Ç}á0äa€˶9A«€ë^…ho—x/ f^0Ø}uGÈHªU7Žø9Ò|ð“Ç8õ†΋Iuبe‡ÏŠrT Š# ^%|\8“\vëlo–ò-ÆÝ¬²]IŽž) !¯Êfûq{A%áÕÕûÇãðG¨%­¾¤§çS{€¸~Cì£FÙ1pqc݉Yå=”‡Ñ«yü³OÈ79­„¼Â°yÁCå\ÆK©*$Žx3R9ñŠª¬ ©Ë2zV¶td#ÇÄÝ«Ç åáaiÙ¯©=[4H¢‚õ ç3·™£ ».‚‚E2–‘.ôgºBiyé‹icMï§áa´Ê÷Ø/ÀÓSwDhq¾Ú… È«=æeŸKÍÊö²nB­åsû §o²}³Ý¸âøBAÔ)È1”$šFÜ5]©p檫3¨«ôÇ%]Ø$¼WÞUÊÂcj¤cRˆ_Û©‘VEI ›²GÂÜÁ]¹£n-ÏYîcºÒ»Ã8ßf,OE80ž"¥ðóR¥ i¦Ä\ êÊ8©|v2ñzÉÛ{Þ»——b¼õöÙ­nûE([›ÑMU‰…(ST÷󜀑¡Ii¹ìÞt ÿZ‘S\­Â\¡ $bT±FÖlÃälyX¶F«jH]Ó¦!BK¼¹Yjâf©iož_±YZ4¥S^û5,ÂTи}p“3²²ŒB¸A–ØØ³ª:þ’ÇFy°äW ë ðuÓZ—1.ÚùQ.¡ú#— ÌaÄ7»SOÙº`ªäc(‘)+ËLÖ'ïµ]›Þ‡t¿IåS–|Ù½×ô¦*Ÿàb«–`/º¡²-Šíoé¾6T2]žà†t´F“°¤»Ó%Þˆ^^Vèƒb¥4áÌõê°)€ã è<áþùˆχ“+m ïÃjçŸnq¥w¼œ²Ú¸Ë9‡wœäÿ©©áy h„ ÞTEdzÜW¹yƓՓwC„­¯awà­-'˜vÎöÖË/©ðù¨ÈÛ5êu¢æŽÜîc†ñÐw„½÷P8¦ßÖ  çO©KÚÁs«S^ãÒ·Õ.šÐph·Ê© ©u4ykË«B¹4X[ÉpŸá¦ØÑ¥Žh¬SŽZwK8¶äáTOdÆ$Ï RiÁAÇ{Š*eáa¶Çr2•6¯Vy¹5oV¹õdÇÊ»*u½ÊRì“–/xKãq¨±rBF6øF?‹€ å5”‹õµ$¢/Áfíã,/fG’³›ÌEÆÃØðµ[Æë C«òÎ54‚ê} •šì,ÖÑú|%â¹h¤‰ÒÄl—¨`d²Šñ°(_¯fŵ NÔmFüÕ·á%U6®¬šœQ+Û,0Aëv%Üðt…&DØ;„V‚%óù6{óBþÓº½9îáeŒKÂòu‡q GÜàu<µ8¬]oH3•”ó®³&ÿÏÊñ–k-„VjE:V¥•²‘ºìBËʇБ’>£w)£údÙ_ƒŸo®èëF°Ïۯɩce\1½lΜyÆ:à¥ÖÅMútbdÂR_4aYy9‘¼!á´mK9È%“‘õ¥ÀlKEM#® é ãE@`ˉ,»ýÆšéª%[M+Tè²µ#Tšk«"FUí"u®]¤R»h¢)ÌŒMx®]ɌΠƒÔ5ãTÙ¿S#$áÚORÆt]*tWªfE­{ˆMæxEôÑßÛK=Ú?¼‹M$¼Î^8 ¿®"&¨oúĵŸ¼ëŒ>¶p*ÖÃgù3Ž)¹š"u·Ê«L·Ðq²ÆAô]=Q;'rXoÚ8ã”IüÊp% „¶lדǰÍ×íX!Þ²Ò›}#;ü}% rr«ntãø36–*llªÎÈbÙ"”2ðÙÊý9&Aаި ÏŠ d «SBj7%U¸ÌDóÚ˜mùóŒ©À5½ Øþ+Еï–)ÃȽ³bá˜.õyÊt³O÷Aµü¢Æa‘:ÝÕ¦”£ög€'\Ætï›ÆuNM$ex–ê ·9!Wö*X$¸îȹ*®;~j‚*X~ÝÑ—tâÿËíd}‹A;dÃaÚ*U+"€> endobj 394 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F105 26 0 R /F181 329 0 R /F109 37 0 R /F107 41 0 R /F118 40 0 R >> /ProcSet [ /PDF /Text ] >> endobj 399 0 obj << /Length 3092 /Filter /FlateDecode >> stream xÚí[YÜÆ~ׯØGÐÐì›´ßÛ@‚<È"AÂhgvEa®ìÌŽ¤üúTõÝÍ&9#¿Æ€¤aÕÝu~UÝþÓã»~%yèš^Jöðøüг¦WìAö´i™zxÜ<ü«z®‰¨ÖO—ãëõŠÀÕÓáò¾^Ñ®­N¯5¯¶5m«ëi¸Ö}[ÙŽõõÎðá›ö믺éßùáWAzX•J\•©¦kÙʈpѿդºÀr}µ®þ$Õp®™ýõmÖ1覲úßGì}ï öPݸÖ‰ž¬‡?›FY=9bÇš“êU/5èí°ûzšz%º®z¬W¼¯>!å­Ù¾ ˶†™aÿzÂÞù ëô^Ž0×H^ Ž’¾ÁM'‚›VÒyõ€Ÿ'T«W2£‡Ðn¦pÓöE˜?‡ÐŸZ4Þ¢ %4¢J¼¨hCˆ‚CuöPÃáy»>;5é˜À ÷u9^¦¼TÔôôé¦ä‹–´Âíê^7¦¹Œ±ìKÌ)ɶ~Ó¶f˜·¬C”Þ¡CÞ­ûP¸Z¢ƒZÛ6-÷èçz%iõOø›UÕ¿+ø Nª8Àí¬—Ð{²zÉÌÙ‘§,Õ4øÎxDƒeA§³,:…¨Ã'ÄùºÂ"tÆ|ãEèëWŽÀ±)¡©° b¡eî0m ÐiRÇ´1kБВ wÒÈýÇ™ÆPò¨¸Xä?¬+ÅšØ. çÝ‘¸åNNðCXWïS{r†tYºw«¨Ì+Rû½m 1)®¼VÚXX†Z¢£ ˜ZX¼…dB¨TX±§!©–p2£%8ØyB˪ˆc¾‚–à`™îCŸ×Ô—Ü¿¨QJ¯ÛvN¾šÐ•ë²gy²Œ”Äš®ô±ÅRvØuw63>zÀmƒârÝW:ò³×-0r;v‘’ÑŽšÚw—e-.c1î8@~=2¨ ‘kÕÅz£5´# ‡£Ù~çLumÖï“éL‘¢\ðŸ(°;õ PÕnm|×bœ2tül Š È«Ù ‹‰(tˆpÚ/ L§„ôÐÚ{ôMŒ“¶f­m„‹by6u‡ïÀá‰íÁ÷´í‘ê'Ò±ùê+ÒȃÑÌ(ð|‘5¼ÆÉÛ¸ |wÅk®\¾’é$É®dJ1’6Lö“—kŠ,^®©ìrM-;qŒg’÷ܶr‰}è!#Ú78T¤0ÊpÉ01Jˆî1ŒRªìpHJz•²wS`/²j¬à”$GÊ;GQÆÛný:Q>齈§ÅçÅL-QÉÀ~q_äs‘»Ó`.nóå8°x¦d’ÚÁ°E«k9¢k:Ö§¥œ±~?ºAqUÊ!/ë¸sˆú»Œ•+î$é€bùš¬o»IketÑZYVVfseeÊÊl¢`hÒˆ s!2Ôv#™  ZîY°ùöa³]ïþ„†Ë§ßÞŠ”l:å º=ÇÝÜ`ÔH+¡?ùÓ^MÞõ«Uð“/à()B'<ï¥Í\‰-niB÷„Ai,ÅA {A$2pÉo—Rð¡È|aÇø¢’2Þ62ˆ(ÉyÊ…Æä„ª9€kôU±äÅlQ±ÍJ”dF}a°S_I&Ô׌®^²;06¾rÓm=F7r > ÓwÎ)îtŸÆC¼ÍXw%¹¥êÝÙ1IŠ÷§¯sUUŲß8¾x¶Ž£Ë€G±û‚„‡ÑFÐWÃ-æ!¹©×#ÙC}TØ\*¡ûãj}vâ"=ÀËâ¥oxB¿Oó‹ÑßN]öPYŸá ~‚^K¸IšU&]ȇ—v…8é ¯†8s9Bá«6‡¨éâoúÍÆAJ-©1sf‚Txº`çåV^8ÏŠbá²Í^eÝv¤¢¥°CBvZ€1„…; :,°ÓYÜ73mÉ¥[}5ÉÐ9¹Í¬HAC[(I ¡Æ>¬,_X­MeöŽ)~ÖßíP’T â×!þÁ£ Y]nCåê~T»Ì ™Û$S¶õû‰Êž i£½ü'ŸcõMKXv¥ó‰·ÝeWòŸÖ‡MRš?ѱa¸ë]x\JDuÜ/Û’…ºEï-Ú·"»Ú À·«²$—{ƒ/á¿: ¦|?"ÀCò}™’9Κ+s´r¡B¨)èÑ/Ùë9‡öÆ-J!ª_BÅœ›g509B–z=cÔ'“—î­˜L¶¸óB>¾•¼ DÖûW¯á>j7úÍd¯«Nª‹lÝ£ø¹Êqö=O>lùh~–®¬5Éô±f?Uð AȽˆíÓ‚›E@öÆælˆ;Ù3>Èr-ñAóU»gBR;ç=Äi¬°\cܧ0¾Ä S_“,Ý—Ùr×­‘=ä÷¯™?øÎ]Q¾ðP]5]üž%>¢›yÖl„ÈN%º‰7ŒÐ1ˆDˆpBEîêS,>Üé›NøÜé¯H#[Ÿï½7¯<æ ]ð“úô=‹c¥Œ’6J±åz—{͉ÉA£D7N€â‚ßL!lT‡§…âgàÃ'7H?ÎÑ㕃™â^U!¹ä¡Œ )Y¨¶Ï*}Ó€ƒÊŽ ,Ö¢¹ÑçÛ¢©X4•qØrSP„ƒ]M–Ÿ9áK¹I_À±¹p<¼€ãS/àø¨"À5ØÕ]çà_í32>®¯@[”àìS̃3òÀÆîíší×,f^j^%̽­€ZúÿÌõ‘xÓ &",öì Ka×»_ßýÛM1e endstream endobj 398 0 obj << /Type /Page /Contents 399 0 R /Resources 397 0 R /MediaBox [0 0 612 792] /Parent 384 0 R >> endobj 397 0 obj << /Font << /F181 329 0 R /F52 5 0 R /F105 26 0 R >> /ProcSet [ /PDF /Text ] >> endobj 402 0 obj << /Length 430 /Filter /FlateDecode >> stream xÚ•SMkÃ0 ½÷WøhÃâZvü‘+lçÜÆY“²@Û”Æ+l¿~²ì²vÆ 5Rôô"½ç<´‹å ° ç k7 T,s–ÊxÖöì…Ç)Þ‹ ðÇãi•VüÏ ø‡#å³xmŸ—+«YƒdÚ%2m¤m€U`eSgªy ŸðˆQÃ;Œ¶¢20Ox”ª@å=þûœŽãAhÇtÂ& vMéÑ>cÖ)ž„þQšdÎÅ Ñ×€ý”§Ò{jÎÍG*3EÂÓf ì…NZ£>¾f*¯Õn7€ ƒug,DW‚WÚƒTΣJاm†ž„Q¼+ÊžµŸ¿†¢z·Žë},I?äôÆû’`ü•OE”K%tÃw7õ¬•翚4Å,¦Šç#—í)Ö½¨ _ŒM¸“¨²ÑG²<·Z<¶êïÐ#หõpåK_’ýLs¾ý\âŸhÂÑôÄ¿#P"-[ücêçÜ‚h‡÷Âi CQŠÆè“òh2º$´›tþusûD0d]þ¤ƒ|U8'kXeñkÔ¾0¬‡T_<¶‹o2݆ endstream endobj 401 0 obj << /Type /Page /Contents 402 0 R /Resources 400 0 R /MediaBox [0 0 612 792] /Parent 403 0 R >> endobj 400 0 obj << /Font << /F181 329 0 R /F52 5 0 R /F105 26 0 R >> /ProcSet [ /PDF /Text ] >> endobj 406 0 obj << /Length 3158 /Filter /FlateDecode >> stream xÚ­Ër¹ñî¯Ð-d•9¼fÙ“·¼N9µµq¥”ÃVœ%Q2RRLJŽÿ>F£ñ 9¬ä`C4~wþùúÍ?èþJèFéN^]ß_õòª³¢Ñƒ¾º¾»úÇB,ÅÂ.ÿyý3}ïà”j:¡®Zõ~¹êäâwø[-~Åñ§¸&"W¶‘C\#øs³4íâøg%õb £Ç¥êܧRÃâ®—F,ŽKÙ!ü·¥hñçƒßËÈ«¾±}+ÜV«^6ÖW+iÏËlc;Ù¹e²kl p ´´@‡Xܺ-Ÿ–÷\<Ãþ ’}²R¶ÃÏïÄŸ?h]õŸ÷~x·Tn 6¹qè^Ü(åÑáùð÷üXÚ@,þÀ×µ_@€¿ÜqŽØýûîvk¿3üµó,Å5ÏJØ„neœµû†m`~·õ'†¹ÞýŽ+ï"Òõ2°ÎMIœØÞ9i€¸úFh{µM³ÆxAÜ:fqômPpè¡ØÅ¢cÊaq½\i@V „;“zP†IêËöàa6tЧd‡'P'p¦ñÑ/;Æßæø²Ø£â ’€WDÑš«4±S¨‰CÛ´]”ñ·÷¿üü÷?W4V·éë,Ì|=ú£†}n[‰|óˆä*h“ÂÄž4w˺AóœÜ“*¾õâS²m:ÕçòKu@+O£û7̆TB–ö{=ù¡C´C:žÐÄxž™ ßN–„0e†º%;@à`„0d¼%y÷ÑàÁà‘ëØ˜ƒ0öú9±x]2EqÏlbç&t¤K†hÄ r[{aà\`%Á éÃ,y‚ÈÃT<'¡6MÆ<¥ÁhgX’Éì´³1 8 Sæ¤1#¶IÃÅÙuôYˆîœ‘Á’‘‘ÁoùÌeFfu3@” ëùÜÓ‹w{÷Û_?¾«Ùšm´ì3[Sú¼mQ¬È•iÛ¢ó¤¶åíJëF‚™{áuc»CÎOøžc_ì †Ï10x•Ü4ÎzÝz <[<¬“ª`BŽðskÚ‚¶Ãó‚~Î#|¥_`•pÀÖ+ ÓqpKPW'Ô ¶¸[jŽƒ©Û÷Žßé¡hœY úåiÝ'ô1à$¹˜æ5`TÊ4¦Ër&+`¼²Ö:ÍrtYJmB,â4g¬k€SšFÆ‘tMÄ!¥/‰ è&©MKŸ†<'_8}ÎY²¢Vv"Eª%zkq6%Z­ k¢!U7K/ØôÕ1m¥ òyGPÇ ü‘BêF 9Æl,‰ŒÞAó†îCþT÷Ó)§û)?í³šÖù•ûÞ9öÙÚ˜¶íœW:Òpä&6N]'Œ/È11­RV”Z{•.ÿÇÊ%wð×—`‘-‡À-.b¸g‡œr˜¹q¿¦b£È™“dMÞ1Å"ЖXpéâ Â Þ6$Ê?ÕÂbÆbt}&º.Ÿ'²ûC€Sf†®Ùˆ8ƈï¯,úÔi+NUtðm\ijë%pœŒ¹À}š|äŽ?gݰ ÃÒJàTmÛô=×rw?vÏÍ—º™-WTä<Å TRÙ¦3sÿÁRl»Y¶‡ B%À’x]MòAÿdß]šÁ¹%‘[»‘”=;ºO™ºÒ®ˆL~ S^»ïš‹†Ì¥Wr0YýI²xAQú,‡ÝM}]ê6¤qÊ Œa‡HÈ“?ÖÁ»²•UÍ$žó SqÜE|ám¼~9‘§¾óQ=‡ó¾*7Ë1•I²ÚWÄþZèò8pÂ’y62Ë]Q¨¯ ºµ—*¨F/HãÂá¹¹ýRÎÓHMŽ÷ÞãÉ»¬6ÁÇ—¤£‚j%ç+¨ÛJl½¥¸>:bkSáë¸JµŒ9ðy´žâ¡ .'@Ø•ÑF£ÐF|ñ>ê³6:#Ó¨˜~& eò‚hFåMÇ<º«O¥}ðpß™ÈáÃëCü±cãr³•á³lO?Â8)‡ô±jøcqš¾(b ý–“„|ˆjkúPÅÃø"ÕãµÌža&ƒi%9HTÏ\;ÿ­JÒ$Z¬KUb`YRãÓñ1|…©¬¢ÇH|ÌË2ߘ¶åò¨=Ϥ*þ”Mj>†èÆ:j¾»¨ûU¥šA”~õÛúPK#ö¼WUV_ܸ±*åZ.¤ï*åAÑp€ïù 'N<‘îmì„ óÕDA 5ß;,÷#±•EshêhIkN’-m’Q_žÈØøvkó#Ýú/ôšŠ¦úí0Ó6Ñö[–ÄþÒ—;>dêâš6øé»+Y–ÀxÍ?Fb.M;agùa…û±7ÇÎ=Úï„Á–ÙýˆëîÇù\''+vB¹9UÂp=é( ¹ îw›‡ÍcÍxØI–¾ØhìãRVš–uˆŒ<§3:'¸àyI-®§œª4thUdÖIP`á†*Ä-¦t]{"“®™´0óÃ3®É!T/!¥ÿŒþKWNqÏé„[ÚFqáîe½«U—9#*˜‹‹A…)CM ²Ì¢LûMrÂÜ HÆ+?Ó0”飃Iê—Ð)&ÁÒnÎát].ÓÍj|Œ7@ÎQa4áöŸj­!#Y Ï_Ö‡¨îv§;½mzX”ù€ýúëÓ·>ÓHͽøkljTÅ’Þp_„Zø©üWnòô*÷êÑŠÃúoI½ïWæyd\ÙõŽo&B…¶FNœ”7â@õx(¢vheî#LíN\Aq:´úâFm=Ç] _ù:ÛßP€ðô k7è~Ås}Zví„ðµh†²ÎžÔ&žaúƒ¼Øô‡©àeB…ï9¦`A-Û¤Y«`>Ž@ËÍN”¤ü¬Ãp×åè¼£®âè8É-è÷šˆMjÊv•~]¼¦I:èh¤Í¯¦¤µçr„Ée5¤=ýhŒ ÈÕÓòÓáŠ5pÞƒ©ÏRö~ô®0oÊk•´'Ï!-92±"½7ųÍ›²jÅ]t÷ºá\ˆTw¶‰¡t}Óiv»Úö¶bRB5F$­Z°hÖGÃÚÿ³OS¹­ïûáD½?-{ZÙsɈúŽ+ò~Ä^×&p—® G¦5¨ã®flQ$éí¸7ˆh“¢;EèÚш®¸{Iò­·§uˆþúÈé±Ù¡zÁs=o5Á„‚åñõNô6ù}HgY?ÁáËý 7Uÿíh|‰·ê"ÀOXÃí­Æ*½_Àã›P8O¦[dø0®,ÉÍR>xK]¨ª=™#–±'ÞQUœ½<÷â2ÛtûL›drdõ<l\•ì]+%þt»ÎÍÖ-H ѥעʻ¬4`Ñš»È++ܽ ð“}þjCöæ¼!rB‚ì4ÿQG™´û‰nŽ«µ[™¢ºïÒŠ™ÐÒbå bK ø'ºSÑY^-{=ã¢ÕíSÏ6À·Tu{"Q“Ö/í"}ÞƒÒUÕ&€â&¿ædm²@q£²†ŠÛñtßÜ-mIÆ9íD¾X?"¹_—ÒWÊÁ•¿öytZª%Kî† lá댕( Å„m¹¡@YkHIg°Là&ïKL!âSŒô%F%¶¦‚óï¤Csæú¸¼Ž¦*[åãS.ª–z‹AâkŒ¬ðÂÜ[þO¹·þŸewÑÈÈYewl…™aBÕGøþX€—UúpÒ÷;³`ï‹‚}( ö‰0X+âó[μˆO® *eû`æ•ìêtɉQÓ+S”m`·@ÎÓqûX{Ú¤5–ù3HÛËŸaò‹*£C%w‚§ñÐ#L›½r»óã*o¿u^µÔöOÞi€ë~·èµ=­em‚Þf©YZy¤8«Í¼¼Û$­˜{—&mÑno'ââÁOr·¿-nÚ2"C4¶i³=gÜq›ˆ¿¿‡¾ár¦‹1Š'ò2ÄAeQØé¿ež;üî ã=Ý·?‘ù}ÛÃ'ÍÂ}»/e8B6Jõ1ža˜Ú1ý•.nŒ.ŠLÓÁÄ4­Š`²}uñjóus[Û^³BЏ<¤ˆxý\» á§ž§nîøB¥òüΫ¢;{ý´ß±Ÿö+Ž«]5¸ñÝñ’ç4¥Qdï_*RJâžCaž®ùÛÂ=gIØk“ "c›®ë=CøŸ>o~¹~ó_3üÕõ endstream endobj 405 0 obj << /Type /Page /Contents 406 0 R /Resources 404 0 R /MediaBox [0 0 612 792] /Parent 403 0 R >> endobj 404 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F105 26 0 R /F181 329 0 R /F109 37 0 R >> /ProcSet [ /PDF /Text ] >> endobj 409 0 obj << /Length 2568 /Filter /FlateDecode >> stream xÚµZÝsÛ¸Ï_¡·“f"ñI¢}rbßôÚûð\|7M'ãÈŽ£‹©‘äTÿ}±‹¸ A}>8!ˆ°Øýí'õêæÅ·ß‰VÌÚÊY«f7fNT¦nfÖɪVÍìænöÏùîËb)ëùzµþü°ø×Íß¿ýÎÈ™óK¤…%º®¤u³:_/ÄÜÓ 7_ãªÏ~|ð{?r5{ùÁÿm©¥›?úáíÂâõv!­§Â%~ÞÌïJÌF„7w@w³~‰aõGX|Æ»ŽÕB–Vl‘|\ÑþÀnÇ™º_Øx‹œ÷á©÷´IXæß÷$’ßõ¤õHl`:?c³aãÛ…¶ó'ÿ°ex¹/…¨œ1Aþý3œ¿‰§?v«ºöË—.Š2~ œ¾‡ÒY•'o›ùÞw‹ò9…a¢|ŠW¥h3ò “¸@„ÿN8ãu Œ}ŒÑºàüî}Xµc`“ª®œmLc§6=µP6Ro’p˜6]‡Yò¬ƒêvl„Ó;¦Ï8^?Ñ%aÅ_á†ðÀ°ó ì´/]h)­¨jÛäZ wÂ3"–¶A[ªÁKÃèÍ*h…¿àÊCÔ¦BGÐÍ•hÏݦ9âa¼ àÑQ_ø’Ðl=¥¿w†$‹ìíRA ™ÛY m+Ù8ÿà™•$…ýêv3âsD%¬™às€­gúX2Ùç1âéHàæ¾bFçÇpûôj¸ S÷'0^Á3ñ×Rå/´¿5ÒïÑeÒ@YúJUVi¾%áߎ»’IÚ ¢WϽzŽèUOP~ŒpÛâ:eGÖt¾Çâú胊ö£LF]¥íðñ\{h /=VìüBÅ“)þLpðJŠ\R<-AQRdB‘bb|°qõWòwñžÒ–¤Ì8¶ž7âfMG%ô¯GÓñAœø ™”ÂÃõ­Û(ÕÕöó˜ì•O‘)U7³ ”juÕJé=¬©ŒÕTø£â@Ì¥¿ß×ÉÕuðߢ­Âxx¶Ç©ô‘܈°ã«àâ)º@Ÿ†ëIÕµ>Ðÿ4Px )fŠIJôˆºHêc ú\%Ðå=²íèLòG¢[û2]©©\S Ì줪D“rµKï:Õü7ÿ¯¿êŸ¯ r¶ª…Œk¸+Å#uè®ü0ŸOwk I™E÷÷,ÂÃdBf@\Tz˜S¼½N–ŒùÓ?Q*„bðš+nÛÜõD°MÊÑ™9…ÇNqoëZ¢i|®><Œº0ýÂ;46ifl¡¨ÛÐOxà6ؽ·Azää9û0M¥ l†^ç0ÏúÓA(ø6C)>*I+1aã)Ljq5ƘïQÀùÍ» ëxÂc®MŸóMáò2 W%K[’e=®É¦vwÚŸF,M»?ahÚ´ MwÆÐ`2´°]Ü¡g]°KߺâÚ¤¹Ùa?(Ÿã~Ì ÆcmѰ´æÏd"Øût3L¼×Ú‹>“ì ”råEd‚(mRŠ]}A…p¨rRzµ ©Üû¦WR„â]Fƒ•Ýg‡Œ(Ét`”(?„Õg\÷X+iÛvyÌ 7WOk…K7™H/Ožiy Y¯é7Öè ï»-²"¡ØùZŽ'S½N«©×kE–Ü+’õnØJé²-+'Ý77Ç#ñ¿¬ƒQD‰¡¨±ž0RçèaÅ®íµcó3BGôÀ SÏmÞC²]YÆšl!TÁä†é 5QDkŽàÀC’UQþ˜Ìg¤»í ž*‚P%¤U# ܈ ^C(VÅù3‰”Ú&+£NpÚ¥¿kg¯yŸ—q“›5ÂMmÖ¤”Õ—£½fÍ~,”žIZóY }½ñ:²íÊfxÎ>¦·ÍûаAø†;XßN÷pa Ö±lGÄèªS#»¨ÝÃÛt@”öøÊïKì6vûžì¼ÍSÞË Ö $̾ ¶“Cç%r›¼³(ÚäA‹H-£¥˜II჻JøÛÕë¼ûõ§7¯¡ŸvñÃÕå»WW7 mæß¿U7ðÜk°÷²:©E¥šÞ‡“ÿŒŽÑõÀäÚ `tvýãú÷Lž]É1ä×bžýÚ¤ÿ;޶¼ZüfðÆÿ]…a×>Kßã¯Ú˜.d¡oŸ®s^²=t§ìR€Ÿ}.ü¤–~ð˜É_ËÉ.Pj5Ñ®ã.°Ô°VMeM“£úúÍÕ»_¯/Æ}sõ¦B§¼=¤z!Ë„§ÔÏ"?ärÚ!²Ò:7›ÙRk]ÑK´Ç²s¶¾ÇÙq—Jd~ÃG £ 5¡HÌ#óæ¦óÆ·)¨•Õà<…@ê¯"Ë|•­/9Ccε‘°1·ò#Æ=qbŸýÐF>€fA}¤q+S†°¦显%w¥l—`ijJ]³ñ,/<Ëc'ïc£à>ÕmøI ü§5ÃŒ/°e;QšíÙ/¿ºVø—α ^¬&üËÚ‡ ?²r¶jý°>ÂÖ0ÿâêæÅÈÊUö endstream endobj 408 0 obj << /Type /Page /Contents 409 0 R /Resources 407 0 R /MediaBox [0 0 612 792] /Parent 403 0 R >> endobj 407 0 obj << /Font << /F181 329 0 R /F52 5 0 R /F109 37 0 R /F105 26 0 R /F47 4 0 R /F156 76 0 R >> /ProcSet [ /PDF /Text ] >> endobj 412 0 obj << /Length 1937 /Filter /FlateDecode >> stream xÚÅYKsÛ8 ¾÷Wø(ÍTŠø”Ø[š4}ìæ1iÚ™N·ÇqOÝØë8M³¿~¤(EŽ›ÃÎèH" ‚À‡ óúìÅήGB—J[9:»Õrd(u£Gg£¯Ùi.²i.lvIÒf«\Tø)»É•È&¹²ôv›;û°s`äÈ•ÎJ‹Âl鄲.«ªöò¾æÉD^Ûì[^˜ª¢ʼPU“½†ÇÙ/ø9‡öËP®êì=|øm mÎë[úâÙçæ…¬ðÍfW^"~½F¥§ø^g㨞4ØÉ/?å„jÁs…Èðpí h\v*¹ŽÔ÷¬Ã¬UbL¢¡×Ñ®Æd 5»¥í’©Då[))J'ëQåít ãNQÝ]çªìC¶Á5­ÈËHPkAJÐã¥=ÞEãx%¯ü$”)]#ÂÚ/qȨÐZ–ª¶£B€fÆú> "þªL¥ü_ñ þJhZߤ´øÞ@ñ/AWÑáïX¥-’¨OÀ»ã&ƒy`ÕºW=¥aô`?wyŒ¦?‚VŸza¨ï¿]m«ÝøÁY—dÈàå´"5=¬ñ Lcƒr6Ì¿$yZí—I`€4Ãææ5Q8ódáUzÔŽƒà J»f{úÍǽ£åyï»8ög^8š9›qsüa Ó2¬ùØŠÄǦ)kå‚‹¯×ëå«ûûûr²˜Ý‹U¹X CC”¦²aûFV5@Côœ£Zç|ÈkCa-evÐZ,šÒ›Óˆ1ûä¿îçM&¿]à¸ù{lÌN:÷¬¡•#h­™ (p—ÑÒìÕ‚ÜsAà>jA²Ç'È€›_%ÎGù5#ëÖë€Þ瑊:¾Æ®¥´¡W =Xi…”Ç6Ð…†•J¿² [Á!,šRõv€4åÅÆ 3LPÓÀ&Îe'«Ü%2£…xz’K*S6ð%r ÁÒ0= ](¦A „¡¸7!ŒM¤ eéê†ÇœôU·Àû“l‡Ð&{7fØp|Z=µ$VÅGÌ”?ô)p>§éßOƒ¨ù`œoûÙ2HÂÅéñ$艀ckkY§øÇÑûwi·Ý’µ„ßS…‰‰á…²Ò¤»Øi'1.×~i\ ãõSÄÐí!‡!äN-¸°r ü”…®ã=Ì…ôþFïjNAIïæ˜í«`8”Ù¡ò%޹C{d{çX*¨6 UA¬Nh]׳dL °ÐA'È$CàOÁ”?[,YÇZ…×xÝfi°ÏÒÄÔãJh{h‡’tD{W]S6¾1ñ‘s-‡Éþ4Ù¥¯ˆÎŸH¯Í–ôjIAÔ Rˆý"²TïéÒZBXNA!SX †¿éË~~ÌÊ–¦å4¨·tƒÁA*\ýÀ±ða²œøþ j–c’ÑÇ)Z(çXƒÞC´#£aÏÆèß '”³1œ°³N¨i(j`HˆØÂ`ÔȈŒ¢ÑeEI7©Ç6G’ªÛHª«gD’ÝIªQ›" ænŽ$Ðb(’ÄP$©FþV$…q½H"cìX÷(v ûéØˆÅçD’m#i—O8¢‰iú{{¶ÐÝÌpÃ… ä­AÌ´ÅíÛ#½ûj è?yf­A“þ'™ÿ§½º¹ÃRtçvq¹¾¯¦;Wóåwú)¯×?æ¬!AÍÊ4½UI8}JÕsKýÈ-Ò<Ã-Jèž[púSnÆ=ß (4ºá•'‡ß9£¤G• ©ÀD€‚Ó¢»ø„ŸaDÎÚ€½ð£·œ˜QÀæóz˜¶ÞΗdoÉWa“ä¸eS1òÜ[ÏXÞÆ÷¾!ÚžÉû–Iσ1ÌøØÇä8ݺVì?%ý5ËJÎãvÌA`˜s³â‡c̓„œ_q[ˆ¦iýž¹Ã¨ˆè»÷Ö•Z&9ûÑÕìžl¯¤>=C˜²cž„ö7oÏßÑØXÛxV™¦U./=§ï†0†‡,%Ìñà]•2å‚¢v–b‰`{Ç ) Mµ ¥œÏé Q¯b%ª tâ]nÆÅ>EQ›ÄB¢–N–Æôó(­¢óùËnjØÁÛ–Œ+™„Ú:.ú4j h\ šC¦A[Ó&Ù T¨7Cknâí¡qñt8õÐA3JºÔZ®?ãßò>À¤g-‘ž‹ðõMîÏ;ë„n{°º†ˆqá’#©¬k"®•žwÈ‚*/zôˆŽ Îe©»s&÷Ezõ. íªê„Üù,‰®õ#a“MÔª”µìeÀÁû»Ìâ«›†æÂ6Yñ9¯“m>æí1ÚŽØLµ_rS·èþ>|Ž7-*á¯u•þjØ#˜Ñ™^A• ‹<äÁ‚ðQõ¯ŽÍØs|Ë(ÉÜ×^m¤I]eÇ7~ZçžXúê6ÅF(”câ€9¡¶†Çw³+vóüÁ اÉ6aÝþ%!ßD=YÆIµ­~·]O܉Foº)š¦·Eв¦K[ÿåMQUê¦SÄ7Cñ¦¨aà„{"ÏD|5š\TªTð¥*SÚ†ÿ÷àH4ô¿xsöâ_tƒï endstream endobj 411 0 obj << /Type /Page /Contents 412 0 R /Resources 410 0 R /MediaBox [0 0 612 792] /Parent 403 0 R >> endobj 410 0 obj << /Font << /F47 4 0 R /F52 5 0 R /F109 37 0 R /F61 10 0 R >> /ProcSet [ /PDF /Text ] >> endobj 414 0 obj [332 277 437 554 554 554 554 554 554 554 554 554 554 277 277 606 606 606 591 867 740 574 813 744 536 485 872 683 226 482 591 462 919 740 869 592 871 607 498 426 655 702 960 609 592 480 351 605 351 606 500 351 683 682 647 685 650 314 673 610 200 203 502 200 938 610 655 682 682 301 388 339 608 554 831 480 536 425] endobj 415 0 obj [520 520 160 700 480 320 340 360 0 480 600 0 500 460 540 240 0 0 0 0 0 0 0 0 0 0 0 0 420 220 280 280 360 560 560 860 680 280 380 380 440 600 280 420 280 460 560 560 560 560 560 560 560 560 560 560 280 280 600 600 600 560 740 740 580 780 700 520 480 840 680 280 480 620 440 900 740 840 560 840 580 520 420 640 700 900 680 620 500 320 640 320 600 500 280 660 660 640 660 640 280 660 600 240 260 580 240 940 600 640 660 660 320 440 300 600 560 800 560 580 460] endobj 416 0 obj [722.2] endobj 417 0 obj [240 260 220 420 520 220 280 220 340 440 440 440 440 440 440 440 440 440 440 260 240 520 520 520 380 700 620 600 520 700 620 580 620 680 380 400 660 580 840 700 600 540 600 600 460 500 740 640 880 560 560 620 240 480 320 520 500 240 420 420 340 440 340 320 400 440 240 220 440 240 620 460 400 440 400 300 320 320 460 440 680 420 400] endobj 418 0 obj [696] endobj 419 0 obj [761.1 602.6 830.5 608.2 649.3 604.4 884.5 430.8 506.1 822.9 715.4 982.3 774.1] endobj 420 0 obj [660] endobj 421 0 obj [534 534 640 534 527 485 684 297 534 250 580 500 587 534 693 0 641 581 705 660 611 722 611 742 333 672 667 641 833 657 682 749 611 611 657 596 676 611 787 678 863 606 627 556 688 333 696 0 587 534 426 534 426 640 480 534 267 587 534 480 534 480 534 587 480 534 534 426 534 445 693 480 693 480] endobj 422 0 obj [1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 761.9 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3] endobj 423 0 obj [458.3 458.3 416.7 416.7 472.2 472.2 472.2 472.2 583.3 583.3 472.2 472.2 333.3 555.6 577.8 577.8 597.2 597.2 736.1 736.1 527.8 527.8 583.3 583.3 583.3 583.3 750 750 750 750 1044.4 1044.4 791.7 791.7 583.3 583.3 638.9 638.9 638.9 638.9 805.6 805.6 805.6 805.6 1277.8 1277.8 811.1 811.1 875 875 666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 888.9 888.9 888.9 888.9] endobj 424 0 obj [713 500 549 833 778 439 333 333 500 549 250 549 250 278 500 500 500 500 500 500 500 500 500 500 278 278 549 549 549 444 549 722 667 722 612 611 763 603 722 333 631 722 686 889 722 722 768 741 556 592 611 690 439 768 645 795 611 333 863 333 658 500 500 631 549 549 494 439 521 411 603 329 603 549 549 576 521 549 549 521 549 603 439 576 713 686 493 686 494 480 200 480 549 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 620 247 549 167 713 500 753 753 753 753 1042 987 603 987 603 400 549 411 549 549 713 494 460 549 549 549 549 1000 603 1000 658 823 686 795 987 768 768 823 768 768 713 713 713 713 713 713 713 768 713 790 790 890 823 549 250 713 603 603 1042 987 603 987] endobj 425 0 obj [320 300 600 620 620 620 620 620 620 620 620 620 620 300 300 600 600 600 540 780 700 720 720 740 680 620 760 800 320 560 720 580 860 720 760 600 780 700 640 600 720 680 960 700 660 580 260 600 260 600 500 280 620 600 480 640 540 340 560 620 280 280 600 280 880 620 540 600 560 400 540 340 620 540 880 540 600 520] endobj 426 0 obj [485 166 552 517 300 302 332 0 453 606 0 480 425 502 200 0 0 0 0 0 0 0 0 0 0 0 0 378 198 277 295 309 554 554 775 757 351 369 369 425 606 277 332 277 437 554 554 554 554 554 554 554 554 554 554 277 277 606 606 606 591 867 740 574 813 744 536 485 872 683 226 482 591 462 919 740 869 592 871 607 498 426 655 702 960 609 592 480 351 605 351 606 500 351 683 682 647 685 650 314 673 610 200 203 502 200 938 610 655 682 682 301 388 339 608 554 831 480 536 425 351 672] endobj 427 0 obj [600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600] endobj 428 0 obj [620 620 140 380 600 320 320 320 0 460 600 0 640 480 420 300 0 0 0 0 0 0 0 0 0 0 0 0 340 220 320 300 380 620 620 900 800 220 300 300 440 600 320 400 320 600 620 620 620 620 620 620 620 620 620 620 320 320 600 600 600 540 820 680 740 740 800 720 640 800 800 340 600 720 600 920 740 800 620 820 720 660 620 780 700 960 720 640 640 300 600 300 600 500 220 580 620 520 620 520 320 540 660 300 300 620 300 940 660 560 620 580 440 520 380 680 520 780 560 540 480 280 600 280 600 0 0 0 220 620 400 1000 540 540 420 1280 660 240 1240 0 0 0 0 0 0 400 400 460 500 1000 440 980 520 240 900 0 0 640 0 300 620 620 620 620 600 520 420 740 420 360 600 400 740 440 400 600 372 372 340 680 600 320 320 372 420 360 930 930 930 540 680 680 680 680 680 680 1260 740 720 720 720 720 340 340 340 340 800 740 800 800 800 800 800 600 800 780 780 780 780 640 620 660 580 580 580 580 580 580 860] endobj 429 0 obj [740 740 120 440 640 340 320 340 0 500 600 0 640 560 500 360 0 0 0 0 0 0 0 0 0 0 0 0 400 240 340 360 420 660 660 940 800 320 320 320 460 600 340 360 340 600 660 660 660 660 660 660 660 660 660 660 340 340 600 600 600 660 820 720 720 740 780 720 680 780 820 400 640 800 640 940 740 800 660 800 780 660 700 740 720 940 780 700 640 300 600 300 600 500 320 580 600 580 640 580 380 580 680 360 340 660 340 1000 680 620 640 620 460 520 460 660 600 800 600 620 560 320 600 320 600 0 0 0 320 660 540 1000 440 380 500 1360 660 220 1220 0 0 0 0 0 0 540 540 460 500 1000 480 980 520 220 940 0 0 700 0 360 660 660 660 660 600 600 500 740 400 400 600 360 740 460 400 600 396 396 400 660 800 340 360 396 400 400 990 990 990 660 720 720 720 720 720 720 1140 740 720 720 720 720 400 400 400 400 780 740 800 800 800 800 800 600 800 740 740 740 740 700 660 660 580 580 580 580 580 580 880] endobj 430 0 obj << /Length1 1300 /Length2 3098 /Length3 0 /Length 3792 /Filter /FlateDecode >> stream xÚ­”y<”ëÀ)ÂÈ‘-^;!c«dßM¶ìÒ˜ffcÌ „eM‘,¡±“J¥RQ’­"Mö-…ì{Ù“Û½Wî¿¿ÏûÏ<ç{Îy¾sžç}%E­lt8¤KPkú–†Ž`%|TI $)©GÂhÖF@j`MMeÀ,ÀPV”ÁZÊÊZª I@çKÆ£½P@F_öW’: ëƒÄ£á0,` # >´p˜7`‹ƒ£‘òQ@×Û°ùUáØ ý‘x"q4œx ½ÐXâ/%S¬'Pÿ+Œðý‘xš óËR 9"pXo2€@z‚¡8ÚfHšÊÿÃjws£oo(ÌçWûí9ý‡Ã|ÐÞäß8ßXâHîê;ÁŽ Õ¿IøÕKíåõSþy w¥Ýè_ÙU¶CâϽvþÏ?ûíôƒüC¶ÕÿTù“ýaþÛ¡¸»p‡ã®ývJîj¹Ã’¦ï Ã#±»çÖøì ¿ÁÄÁš»ÈD›,I"Ðî¹?zû}øEþ{ãõôp¤`eU@AYSvUiƒWWW>ÿG&<OÛ„°ýA¡5ü{퉦µ¥]A$Ôõ?u.õÑ¥¢PüÖbÆ#ôz^¡jÚŸ³Fv&Ñ{ç7™ûé¿ï¸Z’ÎÍ>Â8"¸.è[býÎhæ‚_bus„xv$=艠ã|º%ù›¯ØÈ Žg>-NBèO}ìo.Jqºó&s¶~"ÇJÆÀn”©W”®Ö…XY{+JMÝÑ(ÝûtôÅûR*¢6œi~E—U£û9S’ú>D†ž‹f®’ë™ÃUp­æ1ß¾¶éºTÕT_ðâa«ñÛ­»G†ø9û™pàÃ)­!¥¯ÅÎ^Îì+H[Pvº´QQ2Ðo®3š#Jµždöšh2¨±w˜íMÒVb , ©££7« Wbz}jÊBO2¶Rõ˜o—‡É¼USªU©Œ{ñé’fîc¨óü(ç³› ƃ‹š#ÐÒ‡¦Ø¨Íø '—FOæU¹SOèõÃ!'ÅÔ…í}Ë(§Ž 0¬–C„#šÉfEhy„ *–P_PÆRUD:.~¦v\Ô^J0á8Âϰì‚­}Ðù(XEül|ñ•ø3Q Ì>A+ÝV8Ûôc$±sæ©Óeó<ðU—Fû¨ù ƒN‚5m÷ï8á[ ‡ÑñW••cMªY„/ÇD£"­¾—Y¦ML¤…¾–¾Ž»Zpâ wõîÝtOz§f©WÒL´àëuŽ­ÃÕ#‘ì¡,=iAøc#õlQÊU”q–ÀE1{ߎŒ¾o¥¬KE)M¾¬îs+aõڃ⠳f™Àkþ´{G=‰¯= ç]72P_ÇÓ:çééw[AÆ…ñèN‹,)ÞÚRtž¹;ÛØ4t Û¬o4ŠE¢“úX{Zf˜RXæÿ©Ï°Ÿß3¯JRhï%^ ˆcxŸKû¶’KBÉN„ø´e¿ÃP ©,ªÈ‚ŒªBke.î½ïE7í‚ÐQÕ/>‹¯øD±Æ• Ë—òì³l«mK \ž—cÜ|4›µtž«,™}vRÊ=T‚›«Éžwrix­$ºé·¼4´¯6}0FãUD™QaŽÉAy'&êÖ>Íík«ƒ[ãbý“|UX(› ¨°^r®rbroÂú¬yKÒQ¿ê"¢ÐF¿=%œ¬¯qúUƒLΜLbÛ{Ú)v†eŸa­ãÙ+ñÂA}ûZØý3ö D£¼q´´Ÿ3«»¤þà÷™±‰(!=Y9F•ðv,÷©†‡ö]0óü\e^¿­º&tötGî=Gy¹­9¦;8¦‚¦¥"KáͽYÑ}ŠwÚp3mt™3üZ_ò™SËÏ€×7›íïR2ˆ:·r ߊT:"ÔÝS9Éiyñ ¨##8ˆ5}{.ºE¼,”E‘o‰·Mêô#ñ\² Ìé1¼ˆÒ25cKþ\ç#}Jz:º,ÂÄg¤s ºs ûÛê"1Ùao J4Õe rg:½%Œ °‘k•JÜbµefŽš^»Q+JéU ¡æïYsŽö’Í7š’{÷Sàç~Öø§í&`‰d%>Ç=úYAÆZÉñ·"œ-/?xúWë ߟÝ3„‰>Æ’ÖvŽoZ:üÓÎÂzöÍYŠË}víÚ© ¼ÛŠiøðüi¯ÜªwG×2?nÍXͰ$¸;¨Ç5¦å.¢c¨u½ÅòRd49©&iljn*ÑéG{Éd4Ñ ¬öÆ´øã•ŒWO$æïMQ¸¬ ‹ƒ;L~lÚÖªoECܯnƨ!FóæŠ^*£YU^0øJߛđ➒JªxY6áñ5·gè=ÃaW×gÇ>€~ÞÅ]Sþ$­ã'ÇÿÍ±Îø*“Ñgeĺ|ÛÍÓb&OÂ!{R¡û¿íÏùÊoÒŒµ·­-ÆFUï,›"ÒdµÔøÖ¤X““IŒ8Ë+Ó[Ÿg ÷?S6,·5Ö]ó¨ý+¦NÒŒ999w2$R`7h-Ò-h³ g^œ"Þ‘±(R‰™°ñ]&€Ž?k¡šq>oV+ŒõFRÆéÛ$;jæŽXöǃêü̺8]"¥ÝM»Þ_þÌæ‹m:4öÄðŒÝ:ûÂFrç@Ká;œ'æ30¿V ”óˆkkIÐT¿[TÖ5“[ÙÃ(L½tI=½XŽ™-¥èž-æ–êR·8–qÜé$(²1טȿçVã!áço‚G¦8Ÿeœ].–ŽÅS¸;sßú(HÜ4:õåù܇§µkCüžÎ¢}²»Pfæè@Ÿ×Óx¨:ªQgºœyðÁ“ƒDʉÎcy z:©í\«Vk]Iýß»¦ÂÇjöY E:ÈØ;RO¿Ï«7N¸Sdèlþý_Ü„lЗ¬ú“gó+ú‰Š›M®ÜòÓǼȗu„áí*£Íj9C^„ºY½hÇjÇõ”‡Mz‰ÃQõz5SÅd¶BËÏŒ`¯ ‹9ÀÏ¿%76(ûxî.WÔI5wf);÷ÐD?×â½ 9Ï ÅsgX©WÊû<Ý>:Kä|>us ¶£Õ ÷¢½ÎazCÉVQ(KˆÚÔ?sß5zµßÅa*!žø\ù碚t‘›¹FÍpkOÃ7nGn?c9?L«‘<…dÊk½S©UK¦ [×ëË–…ß¡8 ó]ÆÛxÛ¥o®(³õSÀ²/x®¦Ûz¯þ˜Èbнóþã4FÚÃâ#‹.eúKŠp!%WÕ╹cв†XîÏùÛ«|k\gÐinÈÔ‘•£ i°k•ySr˜!½å3gÃ}\OÝ©SZ?€`Ÿ1ýÄS¹íø WQæ†Å‡³ªë²aßÝÄHÜð:iß:ök#ŒÛ_FpGä<Š1à?óúÆ•GWÜ GUÖܦKz©Xn’»¢±ø¼°,•wƃs”ôÆ"æ{`-†E¿#g‘e 3Õ#%8&9§yíG-¸ »ûTÿkfòC½"_™§Gl›ˆÓlYöîWéHÝmëC™êÙ\E—¯¢NH¾;Í胺6mÏóœ?}2E`ä¯ðžå|ê'ÜOmö%¾/½,³ÕËÉ'îöÕ—UŽû•L ÐÝÝZ*c:‹²,škP!¯„Fc3ˆämŠÇô˜"cgY®dRÖm_¤ÍyšåeìgÈì«8wR@hðÍËÃ÷‹<‘먕Ìg\ØÝúR`̲âæÎÙµj²º»ÆJ1>œ‹2»qÄiN‘ávÎ&D©g>+/VøªÕ¤w·¢R¿Ewݼו!™÷Ø­Y5Û\"lE Ö= µÙu‘t"FSøtî,SwÂK¦ìæÎë+dÅggŒI‚9uÓØn;ž¿…Ù³<7Ë‘ô»ñäÑ.äTuF@Y'§sÖ…þ¸d“.å.òméHþê-edá—Õ¹ì.ˆû!¶>Ésƒ[Y¥ÝúÈ¢³oLß»®Æq>éoÞšsöCµZd«czVÉqBz«]©Ã$^”C¨R¾à­'ß~5,‹®hÜe±ðøº³sÂŒ½äJé #Áßí80á—3&ëýÙ‡[L®A¶a£{èssä‰PVæûá˜ÖâçÜnZÓé${W‰¢ZTåE7öÍ5Ȥ˜’tíJ*ï|™R úߌ|þÑ9ÖN‰7©Ôr!ûŠt0À™wKQ^¶bú"LpSS†ùá¼ø\¹eµ–9'žfwsMŠÎXò† öò øÔÏ‹*¥c× L¼Tv´Îø\€CVÏ¥èäÔù»®Ô¡1,¯v{íbT‚dÍžÉéysäd¢1þµÄwÝú3\yŸãïÞ9~ .W\w Ç ÂYc™e{4BääâäíÒ:èržÂ˜ ©½2 ‚W³ê©Ì~y÷8·FøØk¡IæšCråAWàóGÔîv¿%ÚhVû÷êKZÈe:-_¿!3ª)Ï^íóðàe§1NÛÆÛº>–[Žî}d>$‘Y'¿OàUÿ*„Žj}^Ã9¾]Ó¯Ã"u2¡Xþ˜-ˆ§×7¯Îr¯›#Œ_ÏMÊöKQ7ÛæsºÄ[KYµ/¬êòlÔmpÕ-‡V¸_ƒyŠ®:ý/Jñ„r›ô¸Q} âÏ Œÿ Ó¯- endstream endobj 431 0 obj << /Type /FontDescriptor /FontName /MJNNJK+CMEX10 /Flags 4 /FontBBox [-24 -2960 1454 772] /Ascent 40 /CapHeight 0 /Descent -600 /ItalicAngle 0 /StemV 47 /XHeight 431 /CharSet (/braceex/braceleftbt/bracelefttp/bracerightbt/bracerighttp/bracketleftBigg/bracketleftbig/bracketleftbigg/bracketleftbt/bracketleftex/bracketlefttp/bracketrightBigg/bracketrightbig/bracketrightbigg/bracketrightbt/bracketrightex/bracketrighttp/parenleftbig/parenleftbigg/parenrightbig/parenrightbigg/vextendsingle) /FontFile 430 0 R >> endobj 432 0 obj << /Length1 963 /Length2 1636 /Length3 0 /Length 2267 /Filter /FlateDecode >> stream xÚ­Sy<”{Ôd,-dŸzJnQfcŒ±ÄKÒ ²–73Ï0Œ™é™™"CZÈÎûÚE()q[_„›²EJis£PŒ%Ky¯(Kº-÷Öý÷ý<ÿüÎù~Ï9ßÏ÷œGgƒ“‹>™Éómy\¡>3(T—=8,€Cc‘::¤ Ù<®5]š8 E~Ž`‰&x¬ ˆÔ(<~Äöó[(º $"@!6ƒÎ¨t¡?÷`Ð9€ Á…!h€Ìá»*ÀnPBA&‰ÃL6Cø‚~l.³ ÈžËâÄ/i¦ˆÿ :BX°© À™<.'`‚,$†Æƒg°’ÿ‡¨Ÿ›ÛŠ8=h¡ý¢KÿÀéAlNÈW/ˆ/‚@å1Aˆû3Õü"Ž 2Ù¢ ŸQ{!Ãf¹~ÐÇ¢±„/[`Ë™Nl!Ã`Ñ9p1r™?Kí[‚¡’<¬¶~Ýë"èDgs…®!|ÀþÅ^ŒqŰK;ð¢±XL„¿o¯}? ³á2xL6×ÀŒ:ÑCðÁÅl. À`X1Íå á¶& `ñ äÂZ ˆ®ââò x3tpÿ…<ÑO —ùÒ!¦/ço9,€a€l{Á:ÖßɸïÀ—³ø†à ,ýÀ'‘¾f$á ‡.\81!ÿ=m÷àClØíïóp0¢3Ol!ùÏíXYñ‚Cõñ$@Ÿd»…ÃD"!ì"CA W¸øÀ;þ³Øð]€`0È@v´ó¦'2Ê£ŠÃmζ]\†‘nþõMâ¶çðSlf˜ á´ó?aápAoYb½jà#µ Ó4%è¿ê ´xï÷g”JËbó‹<“#·ÐÏ]TCŽÇ¦+ÌoÝt·Ë­ÑÛý½ÄŽ ˆ.)Õ®Á'ëÿ¸q$£Éœñ¶µs—½“ªÀ6vó#Öv9ß÷ô) rëà£G[ȵO‡z©1çV9Æßò EEo<©ó¿—¢àÉØpÍÐß[øÕÇÑ# “bGYä-”UcW[ý‰¦^LR„] j—VsŸÿ¬FóVZº²¶Û@úÚÀ õ{·«—q'?!4Î…,¢æT¤¢¬G8_mþÁM5! íPž¹ç]au½\{õZœ’ÅÓJÒtž,íþòXÉ»ç#a«;tëÚÙ2¦AF“,a–"*É)o![ë~†]æÄC3Ùâ“28Zñ;Ćô-ªÊZ¯™ÚèO鲰ʣ΅â3$é+–ç¤njimÊË/è=@=Û¢%ÉÏwí3«ø˜¯ÕˆÏÑ–_m†èmVv¢œÞßh!Š“ \užÿKGû®Ô„µû¹Á·Ë>×òý ‘Ü2:Q¯ó ¦WUª®Ø”V\Õ¾ó°šÎmÖfÝhÜCæ]³Êäí³dê^”+ë›æ\£Ý©±r,@-/%Ùv­DP±4àDzAÆÜs7cËÕmVkV8fòpÊÝÁ§ó¡¥ŠeèÆ„àGÝêiNå–·Z°Tk\g2•KÚ'z²¢ÊͶø¤ÌÛó\KÄ`–SªÕc`§^éá>Ë; qKR‰’ô©îüÁ6» 1"qͦÉkrýÍÞÒ E¦¦íOœ:’1ÞPM_Zwg‰r(0ff4žk%ꢕÚ~Â#×Fu“÷»u¸¥[ø ™'u$ET™÷þ–Ýå¨3ñ ¾Æ*Šræ­Üã*º®ˆÉ=WÒ»*/­Žò^9D¦©Øþv1¼+9ÊHâ¹p®ßÇ[û±•Ù†4ˆäñ$8Bí?dKrP?|tZSn£üŽè?›‚>Š‚²¼\—mO ×ÐìÝ„g™­Šl;{MšB>ß·cÌpYq ïàhF¡¹"*Ïhz­‹çÔ0XV¥äÏî[ûžý„ »IË7Û*¢;õ®u®pÒ±Ñí¤ FÒ¼F÷†» “ä[²JKQqûõ £+Åødoçö&Ïî‹BÇqýæ¹åŽSϼo–«µè\9N}vçøLøðyþ94ЍpÌÁ©µiÜ& µõ;ºg"m/ï@[Rz ×ýÎ ³³b­H ÅÕ?êr}±øEÀ ûÍÈ”l ‡˜O¨W6/>K 3ÒöNá™ìˆVw“­{صäì3Mp]¢š–QjPq Jt‰?uª©³©wäŒò›e²‘Ýö™¡ÛöfÍ-õ‘Ù+gjŒÜù¦þãÛüzÈӱɿx£óF/~m0kóï˜òVu${]%¶ÏÅkRûWû=XѳAå^^\£” j„4±†DÔˆÃVƈ.×ÑízÔ ’~7;:D=ì1[M¦“ bGÑä´¥Žñ–λfÛh²Jb— tø//×H§#,–w¿|–½gøl"†øºoG·q€›\ÕÝW¾ŸÖ Ûvžž^êÁYUœ,z‚eöäêŸ~Å]# endstream endobj 433 0 obj << /Type /FontDescriptor /FontName /MAPKWB+CMSY10 /Flags 4 /FontBBox [-29 -960 1116 775] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 85 /XHeight 431 /CharSet (/arrownortheast/arrowsoutheast/bardbl/ceilingleft/ceilingright/floorleft/floorright/latticetop/prime/radical) /FontFile 432 0 R >> endobj 434 0 obj << /Length1 786 /Length2 1630 /Length3 0 /Length 2190 /Filter /FlateDecode >> stream xÚ­R{<Ómw5ZC¬RúQcŽÛœ&ÊamSdBDRfû™i6¶9,‡ •C/’sQ‰r*Š·½¼""O9F¬C¥gôô¾Ÿ·çß÷sÿs¯ë{_×÷úÞBí°³ž5•å YL®Fc\œí1hÀ@A ö³A2—ÎbâÉ\Ð ÀìÙcXÁ€À`Í MÌŒŒ €ÄÙ€¨Ù @9t¤Þ<àÈö'3™À1r€¾ˆ¼ŸÀcÓi¾\¹_kµ"°öÙt ™ Ø“¹¾ ¿¨!…ÌœY:ÈåéÖ à´ú‚8 Rõ! @¥S¸€7H£3!¨Uù™>,û#L ø™ ÙÑR4‘ š‡Êb2x">‰%ꊔü?DýZœÄ`Èþ¢ò?,ý[žìOgðþb¬Zø+á(øC’=H¥ùÿš=È%3èk&è!:‡H©‡é\Š/àCfpÀµ8ȤþÚZd×Zc”›OÄéüõékÉÃd:“{„🲫ì5Œù/¹Â¦‡h}4#"ŠÎÏ›ç/ÍL ‹JgÒc€Ìf“yÑúˆ1†èL* €¡"Å(}&‹+zq#DûƬ~£‰ €Â­†ÖÖ@‘ÖÐß'ÂáX¡az¦€f°ÇÄÀšFüÄfƒLîÚŠˆ\ù‰}è"A0¤@^¿bQÌcü®WÆEnvKi‹ãhUWH÷Ÿ¼¬“î½*ÎÈo± Ô¼ç¶\"P„ŽJî ùªÂ¹Pîø‚8s.ðJZ÷Êh°×¨àô#·O{ÞH€úBô䦚ʮ¹)cq‡ÎÁÖ¢÷¼¦,aódÎa$þȘÌ5±àІŒ¬QÀp៿§a¨æK ,Š3â„ÀR’Ö ´GGúñ×?ÔéÿȪ RX¾¹>;yåøÜD§•‡rÖpô×½žÕn‘n¯¢oȧ\ÚfqÑÙëö6±!æM~™”A+¸J¿Ñ¿ ¹~²i‹_@õÞ⪞ש£DAz|ßU¸›÷¾K>oÊÅ ×½D/ï‚•ÓˆUÜk¯#À™…‰Ø½:Ôvªœ4zÇ»IÒÛ §ú›€í\ÛûL¼CÜí3ZŒü´­jÜPr¿ò´qo³9N;–êÌP´Ê{\ÆÔ °»¹ßMÅÞZNMVç\ü|ÚØ“XÞR‰P¨t'Ç´èKÖ §v¥âøЕ}¯¯(ÿ.¬Ùöm´òÞ#N(Á®…ç/ëPd4qNPÄÉÉÞ¤)¼Qö5Þ—‰ÇNbë£ðq»:×€Õχ_” t3Õð*$å;F ×å]¿EØnFœ±ËùøQ ž`÷ç«“‹2æ“Sdm± Ö¢j|ù({zÉSa|›oÂ)Ü(é¯Ì”më¤Ö ²87ÚŠîˆ]ý¹Ÿ:¬×Ü»l+ÔÆlLH¨zóÔ<uvƒ¦žú#Ç{\º\㾕ܶ0IͧŽv‰ÓÒã­ã­cêv…C+F³b†šÌÅMb¥Ò¹¥ÛDZSfÉÌ¡†~6KN‹s.p]ë«îmáÉ¡­‡æ–᯿զHØKîú¨ø÷NüQ‘û¸]`Ññ-ç±°lÁæœðîå'³ß4æØÕ½çóå¶6ؾÛÿkÍ«±o¹Çr­®éåË_n‡æ½œ/T=Û²œÛÿÖòœ'9›^`7.‹¢¸XKC-gÓÍQ #Å”Jn 8á,€fw„ÏǸgEíDŠ›†=€¡oõ[ÀkJbõÚ¢±­KMeI¬Ô)®¡õý—êƒóÿªÐQO¥£¶žòR»îÒAx¼¼ÙVaÐ,߿͇ðÙÜáQ*R+çµT‹'§]ê/¾Í;%![žê~p½ŒL—-×,‘¸áãð˜TÉAC4ó«¬9*ïŒ "u¤N0ÁÙÜæü›ƒtp-œÈ)Ü M³§2nXÿq6tÒÜlŸ­Rr6.ÝÜt&Ñ")SbÇôÁì ¾ÁLç<^ãœøíÌÀuƯlËЦØìèÆª¾A0çI–)Mõ^T{(µHïî>²ËµÙžêËÒÍ4ýï3*›ß=¡ £}klH݆iiÄ¢\{OUφ0¸’eËW>×» *UA¨¿»ÛtÂòN \î†ì?n6'f"Ÿ|x˜vGEW©ëLT  §’Ôö»×{£P¢þ÷œÝ¼ºÑúïg¦u…W“rt^¥ÿ-Ýp^ª*¾e=—O x»S¦¿eéÚS®~3[²u(ªDÙ·½§Û…öúõ0¹®IkßÎÍVÈ'ñ±å]oÛä‚$mtßT–c²-sîÝ«uvý›FÙÓ*âééa–dG¢Q3W®Zú´C±­D¶1|ëVmÒ‰ÚííÛ¥¥Š^¯½ÇèÚIF™v¥(jM±PÝϱmM6>éÈ(¨¡ï®FZë ¾ÆïãPƒ¡Pq+·¤:ÿúðérHÝlA¶‚;møÙhVOeUbðRW6?o´û²ixNœê÷ð™î»Âñ1ÜO¬))˜ä«ä¥U+ni:Hâ"‚^,·5¨¿íme¯¡ú`[V ô<É,ÅGÜ qã–‰¤Cjõ‰ýEÒ¨"/Ç/Ï«ÐÁòŠÕ» •I8ÏÉ€÷ºåÚ„7(Îb»Yˆ·ÃLé–%@Ke'µÅ§czH›4\ Y#M”ÒËŠ®øƒª?9üô endstream endobj 435 0 obj << /Type /FontDescriptor /FontName /XRDDFB+EUSM10 /Flags 4 /FontBBox [-8 -194 963 738] /Ascent 0 /CapHeight 702 /Descent 0 /ItalicAngle 0 /StemV 70 /XHeight 459 /CharSet (/B/N) /FontFile 434 0 R >> endobj 436 0 obj << /Length1 804 /Length2 1033 /Length3 0 /Length 1576 /Filter /FlateDecode >> stream xÚ­RiPSg•NDpYôÓ ²%$„$¬bĺ• € ò’|„§¼¼„qaQAPÜE¡¢1:¢ ›¸ ¸¥îFq\Q´£¢BPÛ)þèŸÎûóÝ{Ï=çžû®ÃĹ"OŠ‹¡—4&é„"žÉt&ÅÁ¯„âò „€>€éíÍ"¨L.`xû0Ø> Å"ˆtqb1$ $@%R¨Ber(b b!àÅA%*Aä}xGòJ ˆp äáã •ÅÀ‰ïÜ+ÆýÀÃ0ÚÛ¡¡P•(¥S˜L E%C*§¸÷:›!Á·?-U+¾•4P©"Í'Ò¬3 ­Jq9¦#¡¸‡à¤$'ù?†H.PcXGÒ÷oû»:‡bº~D°ƒÊ€pØ?’JQuÜÀê ÁP O.à `ô§P•ÕBé\”Ä‚SÁ¾<”KJ“ëêvŸ. œæú×=ôç"¨œÓ)þ¦íE÷ÅÌbr+JT 1è “’ß·×’bÁr .Eå2àÁæD©DtIåÁfƒL€Ê¥P  –œØ.Ç ²(ÔÄJòÈ””ÞßèíÜ‘>—dšò½À@\»Â Ð<9,Àd±˜€É`°Vþ 'Q+•PNô]¹Œoq J’B¨…J[+.ñM[¶£b]ɪà=× v1 ”Ï 9zºåİÔ[›Í°}—fÅ»Ü+‹è*Õ[SÛ·OHøb«Ê¨MšwEБŸ³óFw»&º]ŸXeÑ©êž(&}H}1¢¦Âøþ%ÛlN󽯒­‘Åç ÞœQ4×)(ì©Å‰ƒÎ,Ò;“ŸÆáFôØüôµeެ‰¡–;ãKÖ{¦ßM°ÜºÅüîµÔUËÒ‡TºÞ~‹×ª­ºö )Ìí^üatöHI­]º,óYæä*Ïýb l+ëñ™¡v2-¹gipÛ²¼…bTŒîy&(xø!·éœOC²[­ñ‡ Cû÷RÏ}Ím-œ=%µœZ¼&ÒôtššÛ˜5Ä :,¤§C7¨¼Á#ï]†lë¤I»ýL&!m|)MŒ!] ÅM3éÝ^Û¦|Ê¢Î8±¨¹áFö§Æ_´m„º®4LvÓß5jJbÀvNžWÉ}j•mÛèOîÉI¯ƒƒ<nrýlšùDè»Ç`~âÝû÷>®ü<ÚÇuÚX[Ÿ£n_ê¶³éð R°ìâ"mM;O¤TœðàÔejœ6ú94½xVz4‹:³0¾IøcýÔüŸý#ÍŒ~ôú0=¿7ïUØŽª¢³vÕAÕ=ÖÏ'fG¹nâìObÏÜÑøúû>®×¹{ÖøÍj›úÅwN=/—¿ I³-Ùp7k·þuâŠÉ‡ŽÁYìüv€Êw6%ÁtguÀñÍ‹Ëòž: ã¹§kg]v캖‘H=ò$0§yuwhÙ­Õ†!”¦¨‡;gs¼`X¹1¬ZŠ–­Ûðc“Û¥\àHT\«°Ž×d ÞwÊä|Î H§!W2_vS{üWå…)klº£Oé:+Ì—Þ›£­ÝÝ:î€Êï:ÏÝ^Ÿd]*eeãŒêGsÞ-u@l¿úMG;-uá${J’õ.zLò×êˆ.ß5Æ1/½ÂÎûN+vt Nö{QƾC{j"ÈâÊÈ”#ë¤--‡=‡Ã*Ô®óú¥“•Ts±ÿ`Çâ—¿9Q_ÿ„‰–*جå%[ÓeÂ5ê¼³÷K™`¡inÌ_ëh¬tÔÙ ›ï…§$»ˆ_æ%i\ÇæÓ¶Ìœ™&]鲉µ)™{îøI³ŠÚQÁLsÎ*ÃÕé¾–zqGÐÒuÍ"ÓÕ{}JçñTó3xa+›þ8æ*cZ-ÎÖ;w®Þ\Þ¾Ñë­‰ZÞ0Îî&«~k5£§µ3¯¸U²þ8¨QÛvtMáP غ½ž(26”ûUåÖëí­.%X=·MÉÈîZ(à'E*Ç=xõ¨.ðv­½"Ëh ¯,çNN»:¦æÕ‚TË <ãä'1 N°U”M›8"«súCÀÒ€œ¸#{o¹]¼¦ýDâþà endstream endobj 437 0 obj << /Type /FontDescriptor /FontName /GMBUNT+MSAM10 /Flags 4 /FontBBox [8 -463 1331 1003] /Ascent 692 /CapHeight 550 /Descent 0 /ItalicAngle 0 /StemV 40 /XHeight 431 /CharSet (/angle) /FontFile 436 0 R >> endobj 438 0 obj << /Length1 1127 /Length2 996 /Length3 0 /Length 1722 /Filter /FlateDecode >> stream xÚ•RkTSWÆ*"×v˜ÄÒa0OòD (È#ÖÈ[ÇKîIr!¹7ÜÜHBÄšÖ:àƒ)ˆHµP©Ei†G]–©²¬R ‚ˆ]ÔUV•ÖÜ]­ø§³îs÷·¿}öwöþ–(ÖsVbdŒ! š#àòÃ@’jÐõÂÕ«)sŸÏÀ|>°Š‚(“„¥a†òB^¨  4ÂÄR†‘œ`2¢&)à E C(#`5$ ÅÔ` ËH …´"®€Â0V‘ …k´4Pjá”  Èl¨bî •€-\Ç)åð…¾Œ)X)R©™>mѶŠÔë!AG 9N1Å$eáMOAæÖW`5N`j¦`&oçš`¬ü9™_1 ¤H$ …¡æhViyŽ–J‹:“ŒXÕ@€Õa®†ÌXèhÊ ¬¿M¼!B>ÀpæíYPƒˆóöXBMd g½Èm”‘Ù `?ßS`¶„‘„Î0¨fjM:]"ª‡€=íůQ=®³ü.j tîŠ1ܤŸž¥Q®ZIhtð§ ܃›!¦Ài•vj Søƒ”' ‚4âkŽ€ÏŸ–SjqUF ~žJ$i\ÅÈüÿl3]'Ô36}Ñ 5ªï8-åŒ188üå MŸ³ç´xQñ)kåÁÓådE*à Š%¥(Ô‚ðƒÅb`ÆsÐìtàq ’fJ€ÁD5I!Ž%Kd€'‡:uÀÈË(þÜtü_9cÁT¼ž¦È˜‚c´ö·””¦psŸq‹€Á™ïÅ߯W_Eš­‰p„2>IB€L$+x‰§2Q3*§1™1½ˆÕ8³ÍP… ô‘ªå;²ЇþĽӥÓH\¼â‘¡~íc_ÌÍíj.Û¶ÏßóÏÿȺ`øú`A>X`ö+ŸýQ…­¹7Q8²ñÜšS»<î׉—Åïs×û+š9ÿ2–—^Àæ\¼ÑXp,¸ô—’á‘ÙÇëú P_¼Gú͉Ϯ]X¢É8ËË+zZ&æ]~Í›kÃgTwÜJ?x©<ýíªz1‹·;ˆ·Mã*¨Ý†¼^•UºlRò¤ÏæuÊ7v¤>û¹&?ŽÇöŠ&çD¸©AÛSG2'b{ìAg—·D)#¯Î7>øñH9ÆÃÃßjI _Ò4×ëïûþ»Ë^ÛÝvÈ›õq€`Û½á÷n±ºšÛDAÃsf€º÷;ã?<7çY>«®â£]»ÏÊÇîmNiÕ ¨ ñ:þ榽Ê7«kJº«²Z.œg•rLWf´]›•9ÊJ‹-5nÝ‘Ô;h[Ò°AÆš§]÷`Ï3EHEج¿Ñù >ß™b™uWÔR¿·½Z÷idü¹…<ÞQ2ñ#Û//Y€¿i»Ñßðµb¶äI°«©I­U7õ(HŸ‰µöÐênÈ"­§:¤YØ×úzS‹8²fðò_ãþ­>Õ{#cÙØÛWõƲ›BÙ‘<Ü9>6h¶¬Xxíøšíe§†ÇKö¦•¶”Í‚?ØËN”¯y ê÷à†ˆ#;ýF»ÎŽ~{î§¢¸…C•.#÷]â^ø"¦íô }ÛÀ½®ý{¯eOú箪Hû&ÕsJ\ŸÞvõ Æ÷I—ùh§÷Ììeóš"‹ƒ> endobj 440 0 obj << /Length1 1347 /Length2 2552 /Length3 0 /Length 3397 /Filter /FlateDecode >> stream xÚ•S{û½×󬵾Ï^ëùª«M‡HA~ `õÐzúp†5;ˆ1è~\€è~‘ ¶?Háh##<¢·ü6ÐEatQ†p¥³1``€0ð9ËÊlYTk6“ ²¸Äò6 .fC|ä¿üT‹Ê ÿ7–Æ`Qip€Ê Bîf1‚y ƒÍ×BüƒÑA.€Åà0# À0ŠrY‘®èe˜Ä¢F„±ƒ)F0h üB„sH! À…x`Dø÷㨠xdÎ`!Vº;°hlÿ‚¾q! Ä÷h~Ý™oŒÊfò*Hƒky®$&hþïÿ¯|“ÈÿŸ?§z+ Ôt© ógöK{K=tÑè/ ƒcÇ©—â÷e2_ðÝ,*2X Ía,û .A¡~âˆ~ J äpÜWÊ•ÍeP`¡ÿ?7ý¬dÂîýv‰C-µâ´•˜ ~–m· €,êσ·³2/än¢£«•·ö¿8l%Ù–EaS,:€Áá‘øl „£؃`ØŠ£¤‹Í…K€ 7 ±!ÄòÒ±F’ rIß.˜[—g+ ä’¾ƒ°üÐt“ù„ÆÈ Æ?1 ÇœÌC~lbq¿+ÃHƒþC'<€ä’xßµ‚…}ßn%ø¦çÇHŒ¯·õÏDW⯮ñäBìЋAåú}ŸâBâBŒ0l{4ŒÃÏ·/ßÿÞ•;,\×ÈÐÅàô#,0ÄFü‚W½rÃà5‹i ØÁ R=lŠÉqÿ›Iý2zã­t¼ÂËn±‹“»seߊ½ö*nß·5u^Á©£¡D¦.%.ç1lÞ à)—X*‘™¡à+)%Ôºf³¯g¥2Ïx誆K:úâlŸÖ½Wd–XDªÇ|úî[Ú­Ÿj¢Æ¥{åðG';gon²N¤zbÂ[Ój§£âOÿÆ7ž;§×Udú|<ïyLTW¡kO³0L?»·rƒ¼¢Ø}?‘2`&bz)Z5~ Ã${l­8ã~ßlÐ5~ßÍšS®òÇ…;Ô7ùD.i“×›¿¨Zÿz‚_zÓûÝ¥ü{J—´¬[>—4Fü)l$$¯ »ÿylÌá´žûô©Æ—y]{o/l—c'++ i·ôãòÛNæ4/­ÿ4þK™*KÅŸßã_u7¡ëÖ‹¼sòÎÕªãIle¥Àr£ùŠçMö&Ký=ôjb‡£ãu™Î&LÕe•…ѽë“M:7÷yFLo°¶Rž†â/½rãf…“ÙÅÑÊK2.•˜ãİþûîÕÚÃÔæq¤§ÄÎ{0UNìéx]¦¶CÁ@Mœ‡6†5±èÿ@êœw½´âõ;ò‡lì¤Þ*_XAµD¸;.×égü¥Š¤àξ÷ª3þÄÝäŒßŒÙúê d±`Jd?î©áHdÙäî4 ó‰zÞvTñHE3ñyK~';×úˆlâØq©yQ¡ÚzI5wþ»jù[÷ŒÎZöæêתZ'­Û)Ó"{h®êÀ¯2½ÒâšWÀ:aèAA3Ø)P‘=r·ërCæá›XN‡aÀT¯N‘‰7xí]Uo„/ê$3h—D0LssK˜²tª­ëBT¼RÂo§nò;íÿkZíhÙ›Šyõ­êËŽ1VÏ}ÔH®£ >9T Ó•ºsÍ Ýe•]}[r'F#›OtŸ<é­!õW¿pÕ@iœ¹=¹@hÊÆ«œ¹cÚR.Qð1|k”Ç•Sn7ë7=LЫ—°Q2&œi V^¬¥ïê" GVî:/‘®R÷oü0Ñu"¿]ËûK%ª{,7wp¯Oꢆò°CòÒU×kýS/­¯pÐà:¶SYV·Þ·‹¿eaÒ¾íEFL€puvæ÷†]j-^'MÊÚsƒ×ÒßWüÞÕ˜ÆÚ+š}zƒ JZv1»u§Æí…‡µ×}ñÍâ¸ÑÃrAò黎,ƒ±6”@oê¨:Õ°ö?‰ ‘ Éú>tiÒæ=ÊûŠˆØæ¬^Aj²tÉãŒ×Û×ÐF¬h%M•—¶\_ä‰qÁß}×e2=óãF5¥Zo~~¹ÃË#ìô£§{éÆ1l±ç*ƒ„F 3×)lËÒû®-±X÷37П ¾"ÝÛT¤µ÷vÉËD÷…¹?§]Ï:õì¯g ë¼—j} œºÇÎÕ/Œ¼º#¢“‡•Úý×5U^†S+1l›˜%Ѧb7Æv8ñ*»¡™÷ÉÇvìêzî_WºQqiéþP$tžmqf$utÚGXäÖlÒpÝþ1®)-'"-y˜–¨'ïmBÐæjëï1àwÇ?r$(ÍëÆ»-¬_¯u"¤¯9㔽jäu¿èÓ-O=.ÝK÷½èØXú‘Ol ­ÉÚf1R(éQ… ‘…ºüV?ÁÙích«' o?áÖV‰Ä’?ÇdJa=µˆÓÈ%v“ûæY=«YTe[PU(ÐþJÒܱړmå<®KV¨IN¸­aÊáI„Á!j÷¬_ãžé‡ž8v §®Û€®ôÁ¹u@öAÖñ{­œÌûjŒíåôÙþi‰;Фìí1y;V_+%r;¦ÔKƒW_Þ»8:ŸÑîîJš~ÞÑðîEÏ»÷9VÔ¡Í}‰×œþ¾Þ%ñ Od& øîýI¢o‚Ûí>?À—"i´‚-5Å:þÜ4K»ßä©=E[(ê´umˆ¾»Å{fÝí²ûøâPõ¶ÔŒ*_©ÔfápvJ¦ðù:â-öæxݬ†ÉØÞ»-å*vI-Ó4-ŸqÇwU{ÐvŠÇ–vÚX<©´œÖy&Q­”ûÌ){pй˜#ÜÛò9d)VKóèyO뜀œÙõÇì>z«ñl(d%(ìGý:Õöèf‹¤ ºcs$å©Y¾e@Ò¸o‚épÓj·Qé¡òþÒ˽zÛ̃KªØôÂy•mÙʼnZ…)[56T›§¤+¬ÇdHwAv:‰îâ¯Ý¬Z4 Ye;¶Ø÷+ÒlU©N2{t5er÷–Ä—N´jòQ|ï²)CÕõäBg–áÉ稩Ä8J[¸xï'cû‹1Ô6f¤F½s9ùV˦iµ7¸—;†R‡Û©ŽU {Ñ¿q»}'Ùó{Y½BѵÇa"°*^.Ÿ £xR\:-œ}î­™ãÜÈ •üCaWÁË÷²W3dK{µ#"^;b‰´Çâe2~o<툄·¬‘*~ÀºTô9Åå—æÙÊÒVƒÆ˜ÎLq‰ö>=} ‰ý÷«Ó¬»ÊÒÌÎLZ¶öîùäTyañuo¦ÓÊŸå_N~:ƒ¹rÁ±èàŒÌU«ö{ɳlµ^n¹±¦úñ¨ÕΩgÑ:Ýq&sZk2ÜÃU_Ôº¿8™#¾»èMQ®o^m›Ôû©Ø™N>ñ¸_,󠫨L !Òäúˆã¢žˆ¼qµnkA×=€XŸ,'·ê;ÑWO|špz6{)O¦K˜Æì»²kNºª´!ò…Q£Nw›ÙýÛýÙ–¹9~—6É;\=¯~‡|´„$&Å9à)¥=u¸ôBFíúíWuÙy‚6 ç䬽:º?ÔeÃÃ-¸cQ¥Öéªcõm×K{÷éëªË¨=\Åãå4uù‡è›ã÷—°+Èó™JcŠrÍëNöfÔïHhì §ŠŒ˜›=)döZZìÛ|cÁŽéå¦ )øcm‚h =žqÞÈ”`O“¦r,.™8(_ÌûtHóJþ2afpNç”–9.먚•Þò“ PŒ+ã}»ós¯ bsP… £ÑC–®dû£kdùÙþ¶Ãk úÁìÞó#âEç~‹w›’tìØÈïgÙäo?tN¯læÍ¤ °ÿÓìi‘—OÚÅ_;#nŸ!#£H·}n„XŸ‘»¹+_>zXç2[Ò Ô3"lPf–x!ÒLèNEÖq(ð-?ÿŠÿ«ò†ô £VË &wð„×qƒ³~wÈ÷S¾6”RXÿè•f#R^óbÉ/Â#ôÎíácŸSˆÏý4Š ôS–áÖ ì£ôÞ¸øµ#Ý“r Äðj=]]mdÑNõë3eˆÛSmjñgóëå² šÂ¸7bÍÄï G75{è„èØj¨zo¤®ã­:B.µE4HGo®ïkÝpLCLTòxÊxëÓÎ=¦±òq]øt> endobj 442 0 obj << /Length1 1606 /Length2 8726 /Length3 0 /Length 9542 /Filter /FlateDecode >> stream xÚ­ueTœÑ’mp –àÚ8wwww‡n ¡¡‘Æàî‚kð ÁÝÁ î$H€ðHîÌÜYwæ×¼û£×úNÉ®]µëœ¦£ÒÐf•B­@rP'+'‡@WK_ ³[«°Ê€Á€g#/:´+Ȇ:ÉXÂ@B} ²pq8ÑéÒPgoW°­ ÀøŒÀÄÌÌòOËŸ€•÷zž3ÝÀ¶Núçêìr‚=CüŸµA ̰C@iu CE5y£¼š.@ärµ„4Ü­ `k€ ØääbØ@]ÖP' øOknlÏX’nK€›3Èüœò²9ÿq±œA®Ž`7·çoØ `ëjé{ž ;YCÜ<Ûm  9»BŸ#Ÿ}Ï`P7˜›µ+Øx®ª!#÷ž0;KØŸÚnàg7jó „Z»ÿié¯ïæÙ ³;¹` /ØŸZV ìæ ±ô~®ý æì þKÃÝ ìdûO,W­¥+rs{†yÆþ3ö øoÝ[:;C¼ÿfCÿFý0Ì ±aCçäz®i {®m vBgÿ³(ŠN6P'Ç?ì@wçÿôy€\ÿˆñÏÎ0=“°B Þ È] {. `ü¿©Ìöïùß ñ¿Eà‹¼ÿâþ«FÿíÿÿÞç…–s‡@Ô,A“ÿxa*€?OÌÿµtC¼ÿgð¿ÆéƒþÁïÃP„Y>AÒÉöY6ŽÁnr`/P ³¶ØXBž'ô×®ë¹BÀN g%ÿÀ*Èý/.g N&.ø4ð_y?kó—5»Œ¢²”–6ó¿>¥£4ž%‡éx;?óú6T¡Àÿ:üÁ’‚z|Y9¹8¬\¼œN.çëÆÁáÿ¿ü‹Äùϳª%Ìì0~nšƒóoëÿñûçÉô_`d¬¡À?[¢ ³t>/Öþ¸­Ý]]Ÿõü{ן{þÏóß¼@Öè‹sPkáPûŒ÷™°„yCc2Æ}=œCaÎe :Å…A5ÐîÀŒÈuÁJ‹‡Ú0¶Æ ¡ß­Þß·•Þì ÷@ºÓA§dþ4L½…¸«ôíüÌ;!ìfe˜™Gú±¾g³*kˆF|z;cšZf¥ÈäíÜ®¨g7LA4…Ax´×ÎXÖïêð;p_¼úXtxDŸ²sÍ00òyh°û©w›”97NØ“>&È%—TÜHOCñÇÒfBͲAÎ`)îúÛ¯û>bç§ÊqÖÚ¾ÊHÝ&¯µ<¶ùx³?œzfÎcü\yØ? !g3˲ŸG–T+Ç“ÁBÀÇè¨1e™zo¬ âòBåµ0@ÎÆg[[¿U¹ñióFÓÄYÂíT­\~ ») ù!îfTJv"?+À-õtëªq(0OS sá-3|«hYçî€|c”ª#¦u˘ídu<ž ¸òÞ]Ÿß›ãkŽÑq„TÂM›:¿éÐ[…¯×`l³´•‹ü&,ß|ð#ª' WpVçÝZ‘ï ©†ìÒ«(T§®ïÀÏúò¼¹h÷vú"‰© Þ÷ £Éú~Œ­3Ãe;àвÒå²'CGÚB2ªpù®wŸÄ‚¡Ã<ÿC£‰Ô¡Ñan>ßU÷Ù'–BxÂ!&™!;¢NWzx„ ÃŒÖoûÝ>åâÔI˜}–<ÀÖÕ6_‡H¨Þ9B×Á·ðf¶õÂÕ|#“Ä]óVÛb‹@C¨õG›«¬%Ýó ,؉šØP¸”=X¨â:™µky¸Éºœ Ÿµ\º"iQˆ‰*ž’  ,é„ôˆUó‘¾ëS]ý Ø -¢8EÏÄä5'þËSÒT6{] E:fÞK•ANJßO銂\™!îñq  =GäÅü=Š{gwot! \Výt•X}1Ï‚MÒ(?á݆@w'®ÌŒ”dBòîL`û1œ8—òlÝ’ȱ×ü¹|öÜÞ½^4Ùcž•Z›WTþLwÕ:ëæ¸@. #ûØË©tBš@#å—úK)Sðþ–G,A~Ö3?!)sgÉ+áQØ ÊA;¥oB¸p,RÑÈMü>)=ûoEÊ6zäRÑ¡{„k¾£ôt ,JVöõ㺜-Ußc³ß?;JOVVcÒÖú¹¾ °âdÔ%l(|Z¯þòuú² lU6¤Ÿ³R}TM\ôíŸ>r ñp—þ}ÉàG^C“Ø­ƒr¿š.·N`× @’Á|*6ºëc^ìKAÿp^kïø$°ç?:.4Ä2¶\«T¬_>’.+sfcÓk$‡‹2Œ/G÷)\øckíˆh9o:À>uGÓMd6žgYåœÔ‚9O­0˳ar.zÆ0¥iMT؃i4MãÈfUËÙ®ÿSéf4Ç–ÕŸ2 Õwô))RA¬á““ž×d®c³·ÑÊbÒ]ÖŒŸGÊŠ$À(êØX¼ØSÍ”a÷Šõ ®îÞû×Ú ›o»^Šsâ7”¯ßÚ18ŒËÑyò8±Œ4SŽwý<ñËÐ;eÃPØÃä¥\NjûšßÅüò’Áø®..#ÝˬnsGÊ,pÎEJŠÈak¿ìÎe†b3“Æc> ²;Ȇ v=ο_ÚTÚcŽL¥®+{ûáìͰ?O“„;u%·$Ũj ‡ËæJëz¹EwmBÇ‹p±òáA>ÿ r„1Éd; À” „rSìúe,[L0 ‰UM€—^åqRË8yŸRïú€G5$ëʈDÑÏLZ9ëf¶e5è0r|O-ŠM tÄ8€Ûá ´ Ð i8G‹ù0”§;Ë©fÀÁ ¹d(´,E”Bíå‡éÒ±‰øÝl]@cÝÃ)]LïmNÍëÄð+´D×ÅçIšßë„»Ì,=˜t´;~eû‰0ìسa-eX‹¬lÕ86ÜC€hÝõiM«eù‘ùüí¶9ò& V¼*¬KÓ{½Qûdï(·O§$f¿¡V¼Í¤‡[¸.ÚéÚúlþÁ¯0?Q¢Þ[Qb ÏQä«Tñn$ª(T"nny¹ç+¿»I„fa.#»+U)SÒ«š8…]cÇÞœþôÑ”æ[4uçÍb/©Ë—5A±²]ÍýÌ) ŽýêOU<¸Q^¤ñ†›™I·ñfzã[ë<„*AaEûaÒáIi¢‡3ÃGF¯‘~â¥ÔÃ\ÓÎl÷iʼnmG>*V.GA箚C®N8´€AzJX¶Ÿwµ+‰ÊŽ‹† b /Þ¿m–),7 ¸ŽøxÕ6K†­®~ñ+zÿÀM¬h”¡î)¬âRÂù§WÜÐ2-¢ÝÖ1¥’)´.NÇÝóâ?/צ©Ï`8ˆî:¤õ÷ÑQ4úsu$Bà†>£gy §B?¨Y‹{«§jÀ9j¨®*¥1É^Oø÷rWíïP•.–Î/<Ž3³ÆÅQš†Ÿ5;.à]§}øÉ7´Š:ê¿¥tÎ'„ø«íÊMœýuxÉÑ\®âðƒÏ†™ƒ–nªM7‰ûçhÏ æF¾h¿ë¼þüúˆDC–ÄTΊ±ãÆÒH f+ˆUh^df_€}ÒÙ͵WÛªãÇa†#älf+—G7 T­@ Û§hÃùR&³Ýíß:€ S±EW‰ðÆ€ÊÝüFô‡ÏM¡ž%iK#Ú3‹ä"µìƒ«\ÎúQ*t×`å×ld¨b6Ÿâ±ÐäV4_‘½Úº$ÛZieÕ/\c<‡ˆå±¨eûèpË;€’|ÒMU’§K’.Ë_[y=ÕYÙ?ü¦ÜîÃr”wgô–UÔžHhŒZôrÇ| {Þà3V„»òâ‰ážÓqœÀõ~]”l¹U’À'ðæN¨3ÍÍ{ @ª*nº·ðËËlâsfšÍM µO‚à—‚G¤ªœ7VGUÎâüO›ÂêïK„*´äTÅæK„ùûM„4ÑgÖuí/÷z‚<À~Á¥DïúØD«‰5]Ú¦GŽºyôÛ5{f*’tÞZ6D»fŸï®YçlöíE"8(ØÞaJôn?Á,ó(QïâÊ»ÔÉl;1C«ºÖV.;¿| Jx¼FÄÙþ…„Zé³èoóÿzFÕg‰ÆÚ2Øý5÷.Aÿ‘ãñµ~jêFî™Ä ‰m`)zTá™}«I e%º øJÊïUy ú¾¼"ÏLnjòØ~ok<Ï”“ý n"Š‘þóÈïfghÒª ’ Be›Ihv’Ú–ë‹/ IxÒŠümÂéÐâ"ãSßóû,%F­ŒQ\Ç;Ö É´-_š@’S¤÷ñ”rœæÖÂUê#7íb7tR7a:‹’xâ¢X3t'PåζæE¨€¯VÏÈØqVnS Úé­Î:šn·fÃôFP5ú©Ÿ{I[ŸZ®tµ^›ƒq’É·/ðŒí›:Lh²Ÿefàzz½÷–¿ˆ"ÿ8ÕšHÜÏæcÓU‰ç²4Ùé±¶RZÊQð±=$Ï¢ž*˜Ú,mcÔ¶´Hòß@˜¬Ø3ƒwÞ±:ôì7d²ø°š:\ÒSœsì÷UÞ*žMsìšÈfc…-¢0ó}«óŸcÂNÕ–ÿ–mH³Å³~µè}\ã¦ñƒ—dHú×ÍǬ2ÑìúÞF [üþŠÖùò$žÈúYÒà7¸«Æx ÅD+ ê ìJ&ûÝ)q7ˆYü!¦AõZ½W\o_Ÿèá.ŒµT9k«ÙCñ.–„QyödlÞ¡¸`^>6oF ñ/k»£×æßwLªÒôõúÕmæ™,ÛX@CÉã'N6Wl4úRqX9%pZ*3±/8„ì¼oðU« Ý틉¹po%äaðÝpcFÆU>ß'$ÓD¬?N1ëpwÿ$ŽÓñKO-LŒ¸N9ìóù #tÍW?dHÕ³c,wdÃI½¥§7CîÛÜ_K›˜6 kWIêêÌ’Ù}Ó€íø™©×²Zè"=EþŽD ¢» bcî਑B|ohÅ-nˆŽ{$<ÙÆK}<^(8ޤì%¾°æó €”C®?…¶ÐÁ"œ¿‰üîíÜÒð‹aÂû6Í=”fLJ›芩º¥èÊfWt™–áð­îúD·”ž‘f“ÀÕ\uÉŽ¸%jE(¢#E· bƒqшP"9#8¥§$û,¿íPÿK) ½Þå2¾­ÀÕ`F)Âò²ÕíÊ“ˆžÆ14rBm`TBÛ®ºöE;KZâP ™;ÇКy!šJôZUŽI2XŸr‡YrPEcÆúºK˜á1:ìHŒü ¨Èïâí}z§^?Öà8W=v÷~Ö¤¾,ñšŠ Y ×!뵘%Ûš²¹›H?ÉE;½³›ö:Ðô‘ʆjÂ1†ó¡Ípô£ûOxN'Çø¸âŒÏ5}Ë-Õmôå÷Z¦q}ŒWÖ#’¿CÃÖ/9ïP-TPœg3/Ú^Q×jÇEÞ¾»[ï*W¦zU§*¦ùH8$Ø·'ŸNUž­R|Ûí‡ûŠúNçkBçVÇLy>šÃ̧÷]¸‚<„Ú®¢ÍdAÃGç3‚’ˆL¿.—ÀËÔaiŒNJ™úÓ“ªvÖBbþ‚Ì.ÁµQ²ú…Á29Ò™",e"Â’Ù–Õ¯lôE] Zƒf ôT7ùQˆã£¡bDàFýÝbcŸü ´³»Taï³¶Á÷ˆ¿ÕqDgV§ìGè~HXÙœ'íƒù¥Ì6OÄO ôŠ$$»ƒýýpÁQš_ ½\!8À‹š%ƒšÉ“*EúG˜@£lFø{• u2‚xÇÛ—b H”ë•B>J7ib`d7‹ZßÕëɳõÀù–y´¢te«ÀËò©±vóÑÿ!¦~™¸³ª»ÆûÉ `ŠÛÕ%,‘XmH9+I*¹ZŠúƒIâ=lã‹a“lI5Mª-3¼ÉVÑ:j)iš–ääë—*“ô¤²ú’ÑøŒm¾ðŸ_qÜp|0Ö6ö|*hŠjŒÌ¸Pfk3KdÍ6s¡‡—2Ísä?ú–„qÃþ,©f.†bR'¸´ÆÙšî?»¶ÖL‹¯.†aîšÂ‰Ü½:±5¬§§`[ù±†&ûµš©½`yڴԶܸƒ~tYÈÔ¶bÎÕ¾XO~‘QtÆmGK›ªÎcDïiü tBßm>]°¾%ä9RqñÒ’™ÅØà Ç ×F¸£lˆÁ¤Ê¹îC¥§DÆy‡'ùÁ%ËE©Ë÷øö¤’ Ícö3*rÓmbòÌ´Ù™5ööR엋ݦå%ÔpÒsQVŸx8uŽç¥´?‡ÝôËáç=e¤ÀÞÉ´m*UÞt£ ¢¨Á´xyZ+¢ø|•ëE‚£|qν¢XMܵ7HàJöEüBÁ#G§¥AS¦pp¾1êZ+„ðä„3Õ½ÿ>FpJàšÐ²~îÆ-ö΀XTÞ¥‡!±MP§>rœ]³ EÜ œ-Ò4A– CRòUÁ jë F“a½a¬5¿ñÖ˜Md®˜-ešò2G Å„’”.:åêÙ¨Ÿõ¸ ¯ÛFÂò®PS^|@ØÂÕdBaC X‡N|Í»:Rü[Mõv!e©Õö“ìÕ„¾ÁñTÂx_{¶3"°Juû¦JKëê ì’]kdøN縚ªvg>BÍ’¸#ï² ƒœõ ~LÌÌyúUÊÖÆ+:ÇKè/¨–o^úãë%åã·÷|o ±ÞhÓFìp°`¿Q\CUÌôl!së¢F³êŠ¥DTQ ×ågâ ´¯g™Íû"×ûüg1Ñ`Ö›Sõí]Õ•à~Ûï@üQ³OZßX‘2u'îH’üjZõPj#…¶ÁðøÖfÁ›Ò¦¯Ð߸oÙ×"t |À[Ý´Æu]è@û€ØŒÃœ"l]e“ȆV>òµJxÈ_$"Îö³Bû…ŽP<ÚôÑC_x †I ïw®r}æ-[úV~ ‘øœò«y?úî¾ûJؽ \b1‘qÅjR¡O'娇¯F¿ô>‘:àtæa›t޶»Ú,š<*˜&|'6÷ÃùÃYÒžÏ(éöœo.‚2¿Ÿ« SÆÎ…Ȉ ÿ=e ªq**¦¢˜MÑC´/™Œ#¬êŠ~£!Jd[ç TËÑýók©Œƒ£½ûK×âO$Üú7t‹…‘¤G~69rì¦Õ6æ¹á6¨-õóódÊ~ß>Ÿò©7¨ØÝÎ=-æ6‘#vÎ>_*×ê™§5œVkYéuþwÀY¯~9O…ñZð5ß9ÍÉ=u ø‹NâÇYŠÃ,ŽðEÂïŸÀ&p–˜-ûWïFçIs*®|±›ã$ï`4ã8ö¨‡DV¿­‚Þ[Ž…Æ×B¢ìÿ}7‡ „Ù--3^óÔñR=š !ŒTÍ[—ñM2±Þ‚ûÂKªXý¤á¦z*I’o¥g'}L‹8ÈOäKùñ%Ùƒ·[ut’ve†µ3çpY£–ÄãÕ%ÈïÐÿë‰5Æá\?µ-nCÿ¢N!µGäÜÀÅ”íe¸}öYæ+´é¢Ù­o«*l÷tgL1Þ[B…2]ˆ¸æ.²•ðSfµ_™¸<ÄÛ çwcæ|™=«pT™ªÍ9ø4UIúœ·Ð">íLf€ÇsÁ€óíj'IŒ(eØpÚýWÇì^¦}VÖáƒ))Æ4:Å#&Ç·ox`œ'Èq–¤ªŠ‚A—XÝ9iªùb/ܪ9»&¨Q"lôPÞ_Êî€Ì¯™K´ÐZÎMudPOò !;Å£KsSbØ7·¬{*ïr#™û®¢ñ Î-‰„iªGJ(ÈùË=:‰p»Ö&C¯´Æ×®çóW?õÔ-¯·Mµ ‹Û˜ø¸ë¸pG*k¢‰ælR|%Š»ñ{œ“qáÈáØ\~ùÛOÚ!!Ó.ËÆcYaC\˜ôj©Á’Þ«›¶p5Il9V;Ÿ³Ÿ–% Ö’»²ûºPµï„+´2‹CˆB¬Á¤×Çü;^Á¿³§ª£¿¤²5+W‡ß†YOguаéœ4½ enBŽkîL6ŸŒ Žw:—És¿B­ô%h£G‚›¸–¿©½¦.Â7Õ^îì…21†¬ÕŒÏh$eÞx'n¤HM,*Ò~ƒô$eùaÕ Oc´>wþÜ—mÆ•eTèÒp™åí•<ÝÖª]œçíÍá¿—c›³XÿYÌß\ó‰rå=ˆÙ%5irß«-|ËzÍŒöÅ'kÑ1Éw0ù2 ›8=ù¾ƒU,A.šÖk[-™kwëÓZPcƒTBEÊ~‚õs…!5º“Fã­“ð-ËÁóhä}õºŒ.Rr!f¨ßXݬ”ýî^9üľò¤ÞŽ1ÄVÎÊ-÷R¼ÎS\ Y ú)ôü-ŠUK…w#Éêk`GÏ==€@úV8Ô’)ô5¡4«Ê-§8ÅFöƒ-&ÉDÃBw·íA6ÎøÒK˜—w,ùJÔ´æ|“Ù-w×EÐyü8O×€  Æï}BM2¿Hwg”xý7Týh­Ðäœ/C3 w¸Ÿ–ٴןz›ìF¡Î–šI‰+Bñ~î®f˜Ļǧ)%˦h8`ƾöñpTëºÝîÀM×Õ§õž)o>¨gÐpMD‹  î#óÞðsrÆæ„V™¡?¶¸Jßôü-îYÑί/ÁòObµ×yÖS$æÝº¸|Q½îp,[&?©©GZßéÔ®ì… Æ‹Žj‰÷WcÈ÷ÁýQw³JBc¸Vj”åP$²ÑUP¯Œk|&„~¬ÉÂþéÄèÛ endstream endobj 443 0 obj << /Type /FontDescriptor /FontName /DIKBRS+URWGothicL-Demi /Flags 4 /FontBBox [-121 -251 1248 1000] /Ascent 756 /CapHeight 756 /Descent -192 /ItalicAngle 0 /StemV 134 /XHeight 555 /CharSet (/B/D/P/R/S/a/asterisk/b/c/colon/comma/d/e/f/fi/fl/g/h/i/j/k/l/m/n/o/one/p/parenleft/parenright/q/r/s/t/two/u/underscore/v/w/x/y/z) /FontFile 442 0 R >> endobj 444 0 obj << /Length1 1605 /Length2 9806 /Length3 0 /Length 10601 /Filter /FlateDecode >> stream xÚ­tUT\Ñ–-šàîPÁ݃»w'x…R…»[àNpw÷,XpMpwwäöíÛãvõë3Æ^6×\kߩ¨3‹™Û›¥íÁPfv6~€¦š¶Œ=Ô d¦À,nooxq¾G¡¦–pš@Aö`I(  4HÍv>>>j€„½ƒ»ÈÒ  {A gddú—çO ÀÔýŸ‘—JÈ  y9¸míì€`è ÄÿºP@­€ - ¡¬¢+«$ “QÒÈÁ@'[€Š³©-È  2‚!@z€…½ÀöÀÌlú3„åK 0@€f —2 ›ÐáOˆ àt²A /g°t2C_vµ€Àf¶Îæ¼ø-ìÿrp²ɰ{‰½€©ØC 3'ðÒUERú<¡V&Ð?½! —0ÀÞâ%ÓÜÞÌùÏHc/0/Q¨  @nÐ?½LsÄÁÖÄý¥÷ ˜ƒè/ glù/L' ¥‰“¹-yyÁþ³Í ø/Ó›88غÿ­¶ÿ›õŸ@PÐÖ‚…㥧ô¥·%ŒÂúç¢È‚-ììlÿð›;;ü3ætú» º?w†þ…„‰¹=ØÖ`´@aU²‡¾´ÐýïTfù¿ùÿ@âÿÿOäýÿ÷ß5ú/?ñÿïÿüïÐÒζ¶J&vÀ¿E€¼0ÀŸ'æ¿¥šØlÝÿ{ò¿çiÿÁïÂ…š¼,A lù" Û?œ ˆ4È h®‚šY,Ll_6ôׯ 6:Ù‚ÀÀ%ÿ.ÀÌÇýo! 6à?Ïû7›ÿ;ïmþ²fÕÓÓÖS×bü÷§ôo–Ê‹äP w‡^ÿ1†¢½ù0ÄÅíÝžÌììïÌ\l€—;€‡Ûûè÷ˆý_¶¢ Ô äЙ™ýïäÿñýËúøo0R`3{ó?—Dj6¹Wÿéø6svrz‘óï¯þ2ò?í¿7tš¡,ÌÚ› Y§¤§B« ³ûG$õ¿}e‡ïv(ªÓÈÏõ«´ïòM [å+3~¬ f©ÿÁÿÔâ>³ïð{SŽaëûW[Ú®$àq™7%}w.öMãV«azêö'Ï“i…=n6­­µU5ÃÂÇWo~´q:!ÜÐûQºäúáQ];`ø˜%ׯà·cÕÃàTçíÐÄïÞ\Óöô÷u!vo’2fÅ S ¸  ÓDú9f‘Šèi©Èž®ì¿ZlÉŒ"I6­Ô¨A )øµl‡~õ”q#al¦æ2³[âÐzJ`˜6 Ôq-$&:•õ(³Xñlâ®ÇõÚK{: "Q¦]KÂw@Ew œ+ø®zÆ"4‹³…¥‚õlk¯ Ì¿tyg$¡æ¾ø ‘O‰ ΰ °ê´¦ê ܹE|¹qV"Œ.Q• מEcË8립HU±ÍYïzø‡%»Æê ª¢tÒkâ¹/ F扞eyÑpB±uuïDä>¢®zÊHÜï°©© ÑòQ!èç2Z÷ € ¸mdDæ_JåqªšêªÇÏÍrÿQɆD1S¶gS ßLÅ[ox*[¤heû / iŠ`µ„MбãŽRD ŸÀjáGSÖ†l—@ÛÙMï]˜ÎS•[-pFûÔUß\Dx‡(xŠI³Ú‚)¯9Lô`ZR¸:ëhj¦øŠEÞ &ÆnIñç ¸rO2Ùí$ØÔå!¸ûÒzW©lI´ "G3[ç+ÜDˆS1#Hn6OaޤO¡tJ Ä$¯­B‚pšˆÅ¯%ü)ïŠ °~¾Þ“ˆ{ÕbÙúåÖD²?Y¿6SWöãnæÛœ U˜.Wvò+¢îÌâJ¥œZYäËË[-õŠ8|«H6B¾­7ÓªóîUi®çu¸oæ±ÞL¯župÓwK¥³§ŒŸÄд¡Œ©Ôü²1ºÇu+œÕŒi1r8>^)chH¡!Ñ XLŠy$ô‡ƒ+ý„i1) 92Ì&‰’&’ëÌ‘gÌ› ÚømoÛèà†‘•ŒÏ{³Æd½«à¨çKA`EJ¸—5mTôؽx§pûHñýØI CŒ£1#–+\àOYŸ<-9­¹"žLës~9®½™ã=žÑÿ% éÇ:k€KCÌÙ•]?'MÞ#6ª/4² Ë›ósçKÚ`±Öf Uw³êáÓ™!ûîâó·Zv}i ¯FùêØ% XówªÊ'¤lZùI(>Ì5Âu ÍU‰´è¥–¼['|=êѨ&˜ +È!Y2þ%?8¥%¾¯|Vwï,‹§å]Ð’+Qìå 8â±5¢ÿê³ñ6/ymjQ˜~bBµ¸:,aÝè#©½cüƤÎÙ-u¤iD±ˆ5±…‘Ì5´÷š¢ã*EóÛD*½"ÅØ”ª$ÔH¼B…§!ùíE"MÒ*öM»8ä4?%øz'°èûá ÷ªÿ9 $ó¥—î²›÷f1hœ£l˜Ù +މÜO'•Öí¼Ývyª‚jûªöϘ•ã°ª£‰¹[ná(A÷¾¯À¶·-9zÄz£¾4ꎮŸ$¼¶·–ÕžNã/× f! Ã쇩#8ô ­(–ï_ˆé ø_€ÙÔò ±ÝVvªLÜšÑö.ÃÉs‚~íTeÚö'í•-“ý .¤îÈÜßQJ²F?MFŸÚ`õE¨á#fEEÀ7²ˆjÅp‘¾¹^… _T{˜A ýuÊᙢv(™¯¯r=í›O¢ˆà¿-1c^ks"lX&Òãxm{¸{¶Ïrn ¬ëùæj§¸LF¥<Ü\Z#É3VzÂ1fi3Ô§†rÆò7¹ ›÷á° €CiMä`0£ír)ýxGð\Ýô‚féü‹îòšÖízk,&tðß#™ƒîò¿œðÂÿîxgSs«”]{ôò¿§ºŠRzÛ}p°òC+3gD1»ßQ^76Úf’ƒÈ‘—±"™Ë8 Vö`£«“ßÃ3ßprgòËŽ¯.Ìç;‹ß<¥…‰(0Dó—n6nÞÄÔÀ ÁkÍ æÛ¬ðF3~ä6먑09÷:Ä/™ n§Ñ=!l·%ñO=߇(<ÏQáP§](Pѳ7$kŸsrs^ôÍ¥ôvb¨ïB®p`¢+bˆ=)yF´‡ŽFð@QX …Ï ÅOËßÍTÁ°u¼±è½¤²bè*‚g‹pÔ¨XÖ8 Eξ` &Äâyoºõ¨7Ö{á/G™Ò¶æ7ró~—fR%î0†=2ZŸfn ý¦7p@’;9æèY‘ß1ULò¤@¸‹S*z3xà„rO¡€õà×`ýcJ?m8uY>¢IQìŠMcL"­³Ž>]›µa¿[üäFë[ñ‰¾3›£z2vëù»Ðøêr9" µÎX„oFÔFãɰJy»©ø®cJq]Z³‰tùr¯Xãgðça;ß÷ ¡¾¡ú[Ø‚}=AkÏ·™9Ç™ƒNKOÚ*-0Ù¡b¯ð€ß«fäKoQ—S ¢5êÙèÉZxë‚DñÌ«sFa»ˆg/ÄY}â) ¸ ›…üÂàT‰^5‡@J#0n‚ žüEì}¸_µ;áÒ‚2Ùìc½%ÓÂMV(Ž»¯'ž WØä™Ègo.œòëlR"J¸²& ¸¶i¶ûФ£o}YŸ,ì~E›¯¹qžtðŠ’? ϯ#·ÎØÄ·Ól.‹+Aêí?ÿ™úXû{–÷àQz3»ü‘É`böšE7!hÎ\×/\’Xrð‹öT2<Ή…Ò –à/"[&µ÷ë×!M¬m Á—fwf9ÆîZD~»ãföa÷®ºÊòþHfú<vÿ•PG=Yã²3áªçà Ý„Nl#°<ñŒBHÿþm®lH‹Õ˜—¦,7¡J¤|âxìès4 I¨÷¼‘C³¢Ѷ•âÔÛ×­|µa£q·!œ%œ¨2õ7³æõ)Dîý)$*vÒã(J¿ûzPJ´d#wk.Þ£oo‡wÿÜ“‰¸Ûá2"™WÈ\f,`Ž^«™º…'›¼´öwhl²QdaѪ€U‡6“j!ÔÒµ’ -ßÌ;æÌôèæ}§0n§èUl!çœÇ/Ïì¹ONd/Ê*ؘqÛ+?Jâéã«Lò[»guópÅ6‹Ò6ÖJ Ø†'dôh×<ÈÐ#Ë‘R‡—ì`е?‚¿æ¼xŒnD²ðèoÂÛ¦­ù™âr ü¤RF'ߘ¾Ñ9KÝæµ)L‹}jT~"+€¡Eöc û¦'ÝE¿E|Ͻ4g™+i±ê©D:{޼:k$côÖ»Y!@*ùú«3 ;3zé o&º“ódë9 ½)3£ß_Í23õ7X­UÀÉMÖ0ÇòІg`HíS]KA9œÔƒ¼ B³Õ½H'¢~åøFòJ¾—¦ìG®Ÿ®>(“O¯G‹K®,Žç£<³+™ ¢ZÞYÙVSKýf¬ÜL*Ä{ÕúŠÅŸó@'ø~Â9 <ï°Ë J>B“µi?ÊФÅP,:Ãuöçvã»íe…«ÇŠ€ÿ4ü•ÛLT´¸Œbá-ï ŸGò>ºZyÏjçføÜöÔ©óa€¥ºÕ“0>5u¸œjogÚH¼àOº ùí}RSgÀtŸ1‚N³ÕÐí%¿Èf#Oô›¼§4t‹ß`äßúO¬FáÎ)}Já_”N% ŽdHôܰªÍûfthÏþÙbDyêmw}æ‰ÃŸ·3ØÏ`ãÉL“Ï¿,¹ØØ¿XÀ£qãßö@0.±›žÆ‡—…£ ¥ ¦zËÇfά§ó?h•£P­cŽŒ©;P÷ñûéà&"£'éÐ~HVI@ò°Û§§ßí±§GÒ …ÎÈùM•\ç VLJO§kH›3ßs9·Ö›¯S»`v+y½Ÿæb…šÍ½‡ïÅÖ=ªp@¿HxÓùÔ)åÚD`„ÔC‡Óž¸ZýMzf?»t«©¶êvÐ’Þ~ ¦Òi5齡Ÿ6Ò˜_2(AuŽÈdæM¨6Q[›ƒÉNNÿ%®[x ·öM€öׇ9Z-õ&CöªC„VåR‚q²%T­FWT¹z޵•ˆ÷”ž?Kkv¿mÐØ™£I\ÅqÒo¢ h·©Ð£Hb„]úÇo¶ØÞ¥²šÀœä3ɱ#“²Š=ÈËÞ¡oŒU-Ë\[äN'ì‹Ï&Ü’e½i,½©GžËlòCÝ¿yã@â^ÛÙPN/~9Lýí(lÔ… ”Àµì€ö( îaå Ý»O&Uä ›rÖU –˜bøs‹­“ªM H§c6¿ÒÅñð®:Íú¿{1vÌöFÒ(¬Òbƒ‰sɱ÷…¶tá…ê…{ˆ°¤‰Tî?|2&!ªº1ögcúÕchàD¯€Þ§jæé ê‹å‰¼VÒy®©–´4¤ó  Ï½‚ä–O]Xu]piÇ­eèþó1©ÜÏTà ˜@Œ¨±3rÈMØDÞ–&‡ÜÂWžÓ"6síUó}í=©Š‹•ú²bzó6:·|8¢H„±O¾¨víÄu_°\ð Ú~¸xÆÞÒ×îľtØÔØ_K¬Ç1M–û»ÐÓŒhæC2-ˆƒ¯.–™{ì´üÛüßB‘2g"SÆ?”¡g_ÄCôüç£bïnh„$†]Ûm.R>8ø,¨Ç5¸ÖsÜ Äý¼íã¦û µJŒWéã¼ÛMI:ôHï)¤µá†à”ŵ34‰™Fl~A"Œô`oñØ}¼‡ÇÄþ]sÄlɈ-¾a™mnT«Tñ(ÈoÂŽ0áèóqÙªrójà’Z0’ìÖ¿¨ yUÂÊØ¬u´½CÜv³C>v×ëZÏg. z–üÞrö#1=ph½U…fDžPÒÐÔk’X£ü _Ð_g䵿®éš#s±½»¾àaÞ—ååjÿnq`µuQ×Eú-Ï»5ëÕC;AÑ2Å+VʪM4÷U§ëŒ‰šøWa))Júoûã˜è\AL’±mtú…èe|î¿™P«æ"/CüÞO͆Æ8ÌÉÂZ&?à>T_¹J-¨XNKð)E.]xõf ¶ÂRÖ/^@9ŽÃpiÌrj¨³˜…ì%N'¶ÑVSï}DVHö}]p'¥KõÖ:±T”ð—ryD·Ž†?`ÝÐþHu«|“e›¾Nt2†Ø~Õ]Ÿ ®V÷†-BolÚ·@¬LÖá‹6ÙL89Ó#:™8§S!•UFįvñ~•ÖŒˆžYNQªµX[ãÍÅ›Om®¯Ùng` “ËT3)HáwcʧÄ[:^¡Ÿw;(ÓÝ<<õç\ƒR±%4i?flÙ7]Y ¡g,bº³`Óè¡Lü®"VöÝ|“ø}0p=C„^öˆ85ø¡‚6GŒ-?ÄŰ;kûSŠÐëù×¶% à €ž¾§êæÚ;©g¼Ë¸òùÙ~j¥)|b±/õÉ-ºÛ²/кüäN#W„¸Í#;D6x0}9,^OSüD,YjäõìÙ‡ã|GFÖ=f0$ßUš€*Â×&Jù^@Š%çÌ­yP©À™—ÄÃÃM7à7ÞæÁ”Ù:ƒù–Vf7˦xtW¶÷-1›³®,æ¬]ìOJžŒwÀ€¾?YŽ›œä”ÏW“Zš4ô³V¦°w·eöŽùNÂÉÆ3ò„v80áCŸtB)¨Ÿ'þ!†5´âÿQÆO6ujÚÅIt2˜åÓ¢Ñ|,ìÄ+/’$±&sB”éë]–Öu=q3{ueF—øI ñ§BÜ­4ºi,··M3ª¦ÖgØÚjÄÔO¶`Ôuk“û¾Wªã&Û_B'˘^ª”ùx2=ECóüm"ÅGï|7Ô _¤OY¯¡°ÈbG7uSû˜'|EyZˆm–ÉO_Ì‘WÌJ-“du^©âsm=¸i}|åù™Úceû¡Ï`ÿà–öÞByW?Ùßj_À:{ù|I 9µw‘~¿ëÆûÌCˆrÇ—>K{úknH< ÇYX€G£"žžG`m!-ûÁ‘$ÿè±fh£¦ëª,¯ÃÅâ[ò$Ý æU%n¹;[­©ܧûSÇû¨ÏT`¸Ê¶o"ˆ%õöܱ¶æÐ/It‹ãQn°7ìŒ9 ·øiÉÌfYpÖ¬.ÆvǸˆxâpþ F½S—ÔE÷ô›qaýovù~mÓôfͽ«Þ¯Nú<·1ž0Èá»è›Oô?ÉëÁ¢5““B©÷ð&ãûÁ,€”ñ”ãáí»#ºÓ úµ/n¿âõ„á'®òaµËZô­§q ôø¤hž. {ÛÞ€ÞµÚ&n¤mWVÙ9>…_ƒ´ñð7Õy•ƒÚýÙG0û¬¢WÂbÕØ­n ©b.’ä²T!S¤íì¸ ©;‰5'—m¶,R3§Ê˜“ì)“ÌkØÿ½È;6a4mQò •u_!~ƒ¬¶ûþo†ëÔÓ¸5r‹öê(YN—tïì\QÒ‹ç{Ãañ|k£¤UK±ŒxáÜüÞ#vã"ìÃJ|{æøðU~ŸÏ¢dT{—ý=\Z’5Bèᓨ~¶AZ ÜAUÁˆàˆ¡K3d†åz[‰yø8úQ^ákÊU5n(.|¨’ ðµi'W¬ÊÔ$æ?qš¶˜rÆB%‡íÒÅŠåÁçšöJ†ÏAƒ¨‡'~y ª…±ú”hKÕA=ý¸èæ-ïHÉb½#ü“c?¨·(Q‹ E‹P>17Wò. ä“p¨.Ó"yY¸‡]½p†¶'¾÷ÄMqžk58Û6xž4hY ¹ªöw?rËAq„TC½ëÝðÙZ,òÔòš,±O?¿•-½Lî™¶m<›T`¹È«M¿àç²û†Tàݵp×øý~¹RýÊØõ¬ˆHñ&EKƒ¨_.m}׌™îÝ7)®«3qåÕüJ¡;JŠìŠÆ"AÁ‚ÏS³3¶–ÙÚ¯n1³qi✾iúÔ~…µ0e.2»Gê!àXE„œ®ª,´ÈàïÛl¿‚É®¡O¨³k‰$˜„3à}ÛòkIګЂ®F¥`}îª_H£%9:}xÞ¸r|Ü¥ä»nÿvÐÁ¿×az\A\ݽúž 2·*Ç„v(ùô°ØÝËñhtë‘¿¦ª¶*ÓcgÂ×»¸íôkƺïØÈš‘^;¦LGÔç§RÌÆ6¹`ÐÜ’«µ›ŠÇT¯âhäcÔõô@‡«^+±÷œ?™1ñ9^©…l–Œ®©Äsmƒ>WӳΣPÏÞ‹ û©^PÛéÅР·µ ¹–?fBÍdd¹N‹U=ÖÚw3NþÒüuÞ˪ˆ>™Ì‘õîÞlZÔL&ñž>!" FheOúV†xžã›'sÙ}Ù¾ø]u ‡«:ý†ä:ýzÉñ9è:Œ¾+dÔhl™`’˜v˜zé~Çeù8ÿÄ;Y´³G*Ö¯2ôN~Û&bå'޳qÿ9“ !®À^yÙ(áõlºÈQ‡O­ÂpþˆÊ-îíðQAŒ“<ÿ×Ô\ŒÁM$%Ka±ÖÙ™ ˜t%z¬Y‰¸.îÕŠx}7\SB÷wS¢L—ÙDEù×^T™úÆ´kŠ&O+ˆ»ª^ÔwÅOŸœípQ%BöõJÐ-á—C Ÿ±ÐMPìA” M“=ª3õü+ŽÞ6·Ôi¹{§sðœX½£JhòŸ%ó8hË|“ï²5‘î$ 7™§ìEE™ðÎÑ Sš3Oøì·´û5Y‹•sÓ]5E_þUtäÎRùÍÓHzP ¦!CݧyJ­ˆå¦JÏÛ5Úñ¡¯otWsñøó1çÆÐô›fœÉóØŸä,o¯?jS¡+äYŒÈ[{Ò<É<…|€X4RZ|:œÎ{Rúr|aÆu”÷‘ ÿ# ¼["?W5®wV'8ñmŽ=ïóÒJ\bTß9á¤ÒàÅoÐ_¢"Þ„(&m©ù1Ƨï9 Ä„êÜ‚ W.ËŸ?dçÁ,¬6]NèV ¤Ÿ^ËE. Kohïw¹LO#¥šF_ —DZƒ4hHäÝì6•†ÊÑJ;ή£ò̓ :òàݶ̴ÊWC ï W‘• ú§ÏG›¬à–ÐHö ©›çÀ6RL“\|pEßgÎÇŸ{ï$_ãÀ‚f»á£ P«+’Hƒ³õ<±C™¸Éã¼UèWžW™G×k{TØr/Æ ÅØÈ¾^!­9ÁsFPpäÈGo¥¤Ÿ9‰MæûN?+&‰±cö³ŸÛN ŸbNn\w¹Þ?Øl)º¶Ñ^æS°®ÜWáòþNðOŽÒAõ~BhvU"uB°y¦—.î¾w«?1í‡Lƒûó-ð•gaG€ãåˆ;ûâºÂ)1ÀF³½½y–l[Pl’ŽvòRHÝak fŠ¥¼nfVŠ¡ßQ¤¦\…h%m¨œ| ioÌ»÷wZüvZøuIO‡²-Ò7¾—ÉµÏ Mr!ƒÏÕÞ¨ýbmX#ý½±•ç^á’]Iöõçü˜Ãv×D§MúOqÑ®àQŸÓþ¹–a·Ï¾N6ɦ)¶%æŸÍƒzêÅÝÇ{?Qu'G lF_žèóstLk ²þNòÄr$—û Ì’ûe[SAüð@†ÚŒgiÎ<´Zf¤H®Z/Ô“¢JÁûƒý2—ôh©'.¼©r¼äJcÍW§,/"8FÖònµJÓö#˘· ³ÊÒxm}ú«”¸æJñð‹ùEššÙ[i:R]šß˞䯴9äø ‰Ô+—\<›Z©ƒLkï÷ý• *uô¡É”܉¦ oÊÒ€£¹$¡’V^l.ûƒT[Ò½Lר§ó5H,Yq#:بxfUž’zN¥m^¥™ëi8ß% ª¦z×]NªÂ׎÷'lIM€œ Y¬.Ó°8ò’n²&û¥qòi.Ä –ªå¯ƒèÑUs(ïV#õnWÞæyÖ %ÔÞlѱõÌo…÷æëm{ò¿w‘–nÃ3èµ±ø Pü¬MP<·‚—-ü#-íÛ0– »øjKò՘Ω“d®Ïzy0ØyÅ=OÀ&Wá®"k² ”Eõò(»HÀŠ œŽÈ|¿ý‰õÂqämµÇÈ‘Jˆç\hUKéÑ-Í@BÄ¡´MÕˆüôÑíÝí>ÃGÛ7éüVº YjUŠnIo¶eGù¡4eN BW½ÄìÃn,7¼;Ÿ˜ÂZUžÁ¸îï î[µgÖë(dC‰;4·j׉Òì­8ïæEÊIóÙª»³³Ý†'Û-1Ò˜P«îjZ|Î|»|Vt1 ’f™^s>ʲíù…Ê*cªGƒx\%;,èºÿãy!d@µYŒ\;Lb"•RÍÀ‰°A›úz½Á‹$Ó¯Îç»T÷V¥„$Šhav9 ®¤ÂU&@ôw6¬[W"‚S§AçÈ•ܨá7¡w(FìÆvˆÒc—S”Ó³"J¿®˜|ëÚ¾I<¤õ\ FÆÒÍk•­Vͧ8HÁ†®¸~‰ ',Ciì%Ã*4zX,æÇ©çz¥öî[(ËÂ3Ù'eÍYsË‘à]Ç%è¶–ñ¯Þ‰Ùê÷ž#ö«üRÔ$ž ÿÍ3-8]®;ÃÍ"F>i—UìñðDàQ‰>z4'Kñ!íl^ ¡l±S*Ùñ0¸D‡²ÃÂ9þ< ŠÙÆZôHMñ‡Á3T#‰œ%ç“êøêUùiMeÌWÔ6Ã~º€±Ôx™ v„§Ô]‡Ênéª4æ:Ið!³ÑŸÚ§W³Mä Áë²ã›ÿˆy°GÊ7¹ˆã œÙ0m¶-‡> endobj 446 0 obj << /Length1 1623 /Length2 6013 /Length3 0 /Length 6839 /Filter /FlateDecode >> stream xÚ­teX”m·6-´ôÒÝ ‚t÷03ÀÀ0Ì€ %-%  !©Ò]""Ý‚ ¤ „€ð>ßû>ûxöþµ÷ûc港u®u®sÅuñpšˆÜ#œ š8JDBTüÀÌØB r…‚ôDÔw'€dHyxÔ½!@×¢ w0@HJ$HyêO´7ÔÅàDz ÿmùípBÿ ÁF"¡.p/öÃCxz@à(,Åÿ:Р\!g( P70´ÒÑ×ðké›´ pˆ70ôÁ–èAA8"pFx`  ý]RËu žñA<CÂOˆ·‰Ä~ H€‹7ŽÂö…@á ˜ø·¬ÝñG§7ëáŰd†$ ò†z¢Ø¬†šéD¹Q¿s#¡X€pÆz‚ Ÿß%ýÁ°4X„‘Äõ;—†"=a@467–ÌÓúG† wù[0Àâôà H$–Ëý»;× ø/Õ==aè?ш?^ÿÖE!!0gQR IlN ›Û 'û½,:pg@Bü/;ØÇó_˜/ÄûOƒøïŒVŒ€ÃÐ0Ä™TL¦ðÿï¦,úŸò`Äÿ‘ÿGÆûî?gô_.ñÿõ>ÿ“ZÓÓz@þþzez€ßÏ à÷;ãåùo!@( ý߃þégùKço®b:( ¶÷à.؈Hˆ‹Êüe†"5¡~°!r8aØ^ý±›ÁÁoÁÎôO;" ²ÿ€L±"Üá¿{/#ÿ‚ÀÁÿTŽÒÝbjúššjBÿÓÃúÇÓ»(S´' þÿ‹yˆÿûð›GM ᑈHJaß[I9€‚œdÐÿó‘Äßç‡@”7Ô`#.*..Àþÿë÷÷Éî4÷á ø÷ʘ €p0vËþmø ƒ|¼½±Ãýsñ±eÿëügß!?ˆtî¤á–ž™ªfÌý0¤aó¾SÿC¤gQiþëJDÇãôhŒB™ãeU¤hýÈ«&ôô¶ç¯µ‚ë;`|©ýW¬AÜ]¯©y[ä„ÖÃÄì‹(2v,â¦ô–¬eÅÍ×—‡ŒŒí /‰ØFZ¤¼‰NB¸}_‡ÐÝ>ñ¤ ¥Õ&ҷެǡ©~³½Ã›¼uzÂ×Óß÷¡·ã°kE('‘„GÑ—€‚7.Ä+‡EÅÚÜPç»Ë nžwÎ$ã'uî›öÌ4\‡(¸B—è_·¿$‡WûþxÅ2uð£º}KчŠy+íFÜ2úÍ<Ùð‚‡#ÕÕ-r“ SFŸ³)¿“L®ÿ#Ò+0}½ˆ¨Y б:Ö^—6©­ªµ†ƒ}“´O¨ŠL4i6Dº³ƒî•ü{¦1~õ¸p`åÚß{Nªç)/]j‹XkgTÓoÈsÊ/,dhèuѺ„)ZF!•ܪF“\y»rU¹DŸðhIØh7¼ô<Û8ôÓ´ƒÒFÀª:‰:ÖÌÂbo!0¥y~¯äl‚' ’xªéóÛPì²Ç˜oN(ó„þ\­Ñ6®wÈ¥Bøàó§{påŸî!ÜPoé)º«EoõúÐLñöâ–§Mby›‹¬b f¹Aß^¿Úkí¨ `Ý¿þ‘˜5Hƒ§3ÄÀÐÚSßiØ«µ(•¬ë𙕴 öÒs+¾CŒ2Ô,Õ·èÌŒ˜áö^ù¥_¬¹*¸õÝ’ ·ûAKRÇœøñÕçQ9pŠLZxŠ÷T–17­ûXû ü=£×|' M")È=YòXÿذ굋¼çËÀ°d6&RULŸvÍéQçÎAxqÎÆ×Nžj¢R· ûU pÆ@Íàó£ms?ájùõí C{I _ÑITi€¦–¤Úx¹^{ltÀÕFJÅdLÇ/%ËúhRôl… ÷Àõ!¡JñìÇûzÁ/ÛÒµÑѾZ¡è`QÙT‡ƒGîÃl«~DŸë»-o* ?Âô÷$öª*t¦ pˆ¤ÀG:G¾R;Í;÷wõ7ðÄÊáDD=2ÜÞ^ö-€à#¥7kú\f>‰óüÔ”?†lE‹¾;ŸúÔø¹V„êLC,ý™ñ³ýŸ„tg ‰S‰d.náåLò—+K™>MÖô“§ºl¸ñ2cÅsS³ÀDæP»ÇY²W…\¿ØÕçtõ½îNhæ‰EÅpV™Ê…”¦4©{ù PNü*%AßEÍó(ÀZé">››ßxF—)ʼn<»¶Ù¡¦Ø‘*‹y~|}Ý̲ÓÈïÂÚoë[ì$ó¦nê%*"滬7Q)¸ðùm [O7ÐÔ–k£É3:•5–>‚¿wüñW3Xü2ßÊÆÝ-hô̱{ 8´i62¯ó’êWÁš›ˆî A@ÖÓÛÉ$Ïo‡uÉÙIñc·¦z¯Ô˜BøKtœüÞó,lGyœeXM³‚û^m¤½Åtå?º=:%vó'#œBR`ÆÈò°¶ö¡Ù©Ã>H æ¦NZX\â·reC‡êÒË%á^QP¾Õ%ŸÏv¬lMDsô2·-G§CƒÊéƒå#wägÄ·ZÃSŸÜ'z7Ñô}çµ·Æ.¤ Ìi³!­A”)ÓIi¡0æ¨94ƒU ¨ÔõÊOeY«14“®/–<¥ Nfê5ONIw¾[ .ÓH™ sŸ÷­4Â÷d~!èŸJ¼")[%2@}ñmÈÕ¥!½PÄõhXÐé 1KêlÝÍT¬ÎrX÷ÿ(tŸ‡ÛÇ8Y[ LUs™R/vh¨z ¿¾å–Dð3ûoëÏ\çn[ܳ^ß(U>ä 9_3ùª*Æ36|fSœ ªÔ”ŸËÛe•[˜A—#ïéý/—hïð‰[¢¦*û]”Zò9à=Ï«ˆEÝlŒÏIØQ{(aì%€E½–ß8ë$ r~÷ü !îá­…Z9µ€…%²ˆ_•‚AŠˆçÖ|B²\i'D@ã}©i\qb„.}dníeš¯d‰&àS•á k¡¸‰äAì5S*"c¬ïwÉzª¦”÷Õy:f€Ë›å‡ds#Gâ Z^¢ÞéÅñÈ6„ Z`_زƒd’âªæ%Þx|¾fÌúÛg!…9|ñ ËýHú­ÁÎyéÍìÐfy™ TQSŽœÌAñÜFN]ùæócxìSL¼:w˜ÞXê™[ óµsñ6‹|·£%áÓÊ[©B¥PJßj»á¬¶Y2ÃA÷rû•×.ü¦;Nu¨ë|}`ºÀŇ:“y‹—T43 Û8{Õó Žs½Lr¨ß<œì%³±—gÑŽº¢|!ÄÔ> jXÄ#·á/èØJþ6é]±kÃ|sV=Êå¨|ÕCvy™ââÆêÐx?H3ü½ æ3˽•÷—¨Ûûƒì‰?rÞÈy“>éa®À1Zê+€À5IÒ¯û„E¹0ÏWæVçøif·­Š`iî³s«¼–Ñ$“{N×ôc¸Gf·2 \M"=Ïý€ÚÿœÌɪé³lOÒ,£\š#É 1µ¼ýQÊ•9 †¾ž(ä Âê1»iÔ/ô‰cÏ";E©rR ÛÛÈJZõçL:Š©ÎFIûÆc+ís©ƒ{ÜZçÜÆ|Ò¨OxxÇoÁ§etFs• /Þ% ·@TŸî·$°®®îWÉAîTeõ½‘7IÕaÙè ë;'y"¼tÙæ•l@˜öÁˆ«Í\Å—%)š:VÓž»”Z[­Ë£i&!x7X÷ýhŒH¿ã½qÏ~”ٲȀ¾»skcîwÞn`;­ƒþMzê& |_STØ«¯0®ÕZoõE ëØ%Ù³þÜœ7+Se<ߌchˆs‘ë æÞ‘8 \ùç„DQ"e WÚÉMUÁ  Õýv5œäµ¼GòwYËí’ÐC~%–mròþ|Õ…¢TÝ—3â ÅCYeKÙ »¬µÖÁÊÏ2Å[ö±ÉönÐÞ¨X^LAÀ0ݯ2Ž,Å7f8uT,­«»“œ ©Õ-ÉßîŽ&…ÀMfï ‹ó¨ê8NkG÷‰j¤>[Ìšº=k™Ê)úŠgßÓYnúý‹Ä4½šyµ@÷14¥uF¿ãä<¶a÷>Þ©ì©ÛN³ C'÷b‚ì@¼¿)ªj­@í#˜-èEðbSgnÓ•7oËꜫaãBäÇèU¥ŽbÓ—ñÐôÎê³Y“²3Æ—ÓmÏ× ¯kEÃADôhR¹~ŸãÙþù“ÊŒ²¼[¼r2DâjóÝ[‹&± Aè½wxh˜ó¿Î±»­›G÷Äü” •Ú¯·¦%Íõ¤<ò¤xÚû.Ç–p~ý0d ܈–}Át̺ò…»pªØ§ãàŽ“izÕb¾1Õ]8òÅíùŒµ”¹å«„wøè ëâÏ6w§¸ö'†îð+¨üÍ ­kÉ~OP —7‚)'‰=¤šaÚºq©p!#ÏŒiAÄ–u¢-¶"W‰§Jf#GWx+çÅ™+†>á‹ó}£ÛH×ò,ÏÔ•‚ìÞJø°šMè]kQ÷⣨/¹lpƒÌíÌ’ÀRӌٸ ~ÍßužÎq?LÌ8ÂOp Yt4Q8&·’2)¬}ô±Hé5¡9÷N[R±ZªïÜ:‘I€JÜCS²ÙZ…âÅÓ2èϱzj”Â9t¸ÜÓ« kYÀè w¨PŒ'11¿¶æil/L6kf° y¹kÜžbD=æÉá=ô]½ø3å Ý鬠ÒSááÑðá{%ŸAÖ tKªŸ2™?>·O ý±X]è}›BÉ&¨Óìni^x™}~ùþñÑ¡nfcï\KJ^\CÓ²K§ ÎÍãÿ^®ý9ÓÎæüAí¥‹"•‚YF÷¬¬/÷7•;W AY™ˆd9|{¿É$ý !jêöøP®+nGò\°#KB+á¯hBESÃ!Þæ:Ó&½4[*œÚö¦6ïÐÍÛ+ü+Ó»b…ùÝ0kÕæ•VE™.?V…qíâ€Gr³ÛS«tŠBÔäÏÈ*,HTÊæì8*,÷Ú?N}E‹ DüÒL±C}Yê~£s¨JO÷m/­í5ðåŠÓÞ+ï’Ìq÷èU8‘räf»îÍ_¶‚‘T6KO4žZG¥íÁ<ƒ*Ã’¥Çïx¹&@Æé®c’y˜L>ý¤E\~^¡Š\ð"Á £öæ{u™"vëÆÖ.eZÕñ)•˶"Gû›Û`ü G:JˆÒÎYlOoéð'ž(É«ƒ6š7TÈzÄÆ×Áu2g€‰4ÉӇμ÷ƒÐSvð,ÎZ õ럷ºŠµQÒÊiß¹-GŒ…p¾~©eŸ‘i´ž^.ø#ó3^P]:$YHú¹CÜ‘#ƒI©›c®­yÐÚ#Ù9 Ó/í%3ø™Í®•\wuÀÄ"[,÷)¾5S-7ß(³=h±O#Y¡~ÐaÀi°ð³æñåâ.$ÒO%Ò´&êtj?ºÉ÷Þî7Ø`iÄ{,.”Û†)7Ÿêû»µ:µª‰‹DPrµÉ_¥ÈΩNÞO÷H}WÀ]¡eø@ƒø~TjŒV|ƒú¤˜ÃR>\Qï(ˆƒ")Û"å¥ü»ˆGÔƒ rá¹L¦ì u-ÐÄBåêüTsB’,ݬ þW{BÌÏy]NÛ–e¢j2 e×óÉM ©÷7OodFÄhînWÛY=re¯§àËhþίŒW²B0ò¥k›kˆ"dOŽLkõ…ð‚œÀ1ç{F ÛGê{KwdB¬G·Ði“Î8ý£Ûô®yó×õ…á Ôð ºÆ*V¢>[ϰEÜ^©»©J¯e5yĆøQÉ ý™LÊ]æÊ·§Hùñ±Ò}MÛ"Ü”ÙÁ!²>°T¨y‹åÁÏÀ¯‡%ƪDªœ,Æm‡Î.1Szá-Ãáw¸K ŸÊ•ýð“Bs0ò{1+Þ?–0ÇVQl°œ<ÿ”Ï}º1hùÝýóRoiåƒWWE87n±âklŸ«È@¼Ï^ågFcxº§µÔßœ»¾œë׫½M:3¶À<¡œ^©p­µ!ð殉Ûò¹a”‰ù-]ý)aA›OoåØ$Ð3âABMëäà :‘ªòâEέRU²é÷|øôÂä†7žõ¹gÙ&\÷¬,½ƒUÂ&wY¬ÛBJîí-â¯âÓÚãTJˇUÜHj.<M¾-þ¢å²3Ç·;ùS›íßà±;¾™kídžÙv)ð—ªf½þè=€GãÓ+ý \Ò±·H1 BNÂÆn|u/®îrrešXÝ©ï–Tf9x^”íÀÐI¸…÷õü‰Rúp.ðÔúB›2v“(Ä߈±D“õù¯âº¯~øž”†Iı٢R?aSÜQï¥K4ÂÚŒ2AÙOŠººlÖç8¹?ÑzÁf‰ø ÙÚ ¿…µñ}¿}ß8ÜêçY߯àG¼¦÷>7f¥ß¼k¹øÖ6ÊhŒ~ìÙÿ¢Éëêb ÅYdÉœûbS‘x|›w„¼5íê :~‡“/­eÓo᳕ oë!ý<½Üƒžlu72Ûí15ʧgn`„%ñƒ@ÓoTW%ž‘ !…âÆxò1ΉzÊ/à¨Ù'ÀèÊåΦÝ÷‘£Îºæ¾qùZ¥]ŠcgÖs÷Þ–~Jå ÞñN*€;è§\ª3©µáé&=1ˆ„ Ó„ÕuÖEc ãœ~µ@ø•fáû±éÝ¥¥UZkeŸ#EåòÚùå4”õkÛ·ek•Ù4tüE7l£†ÝžêIš®¬çæftÚàÉSìÊoð¹pñJhR˜¥‘!ƒ}Ðùå~Ï:IØ*øÞM*ç 1ÏÓAW>¸0¹ÆµÝG˜Å‡×®É-cЪ#Ú-6o.WøîRßòùXVÎö$ÆìLãžkJQi‹É 'ÍM7?øCü+¢+ ¦:‘£5zÍW}-4¥¿Ú#[ÅXÓ‹î9¤yªï…?Á‰~³³ ¡´QH˜=ê»Âæ¦l;¾ëÙ}ÏšÎXšš¯üÚ^ºÙ—©&ñ$c±4|„i½ð"޹}ñõv¯9\,½Bv›,é0^]2·2E}µOÓ|fî/Âéâ£-XÍFÇsýkc¨`Ÿ#)9Ö.án*×­YŽpYê©ãßH”’Q+3D6Gƒ GTž®G¹!X5ýhÞÃ`Š¥nF‹ð…Ù¶ÃäAuãØì7ºWr Í œ§Œ^­KÖ4G÷4QszÕöâ3Ð6{J­r%â<•*}'ð“ zÁ¤}‡{v}Ùé4§ä¢™«ÔkO«ûو㺿4Ew¥#KBÒŸPŠð™;|’rÚSÅ ž¸ûßþCª fV¢Àf7Ì¥ÏÐàcz6Xµ0§ùÐ2¦Â4§ìiJéIVqü§^5Iv?ã›” ‡{x¼{rìùHÿ«[X>4mˆŠk— a'Í÷+ܸSnüܵ1I׿UI)Zmf·Êj‘"ÏjºÎ$#dzuz£å¶—0S÷EÕv{ÂÞ77Blw*ñõd0ˆåÓh´³½yØýjé$oàgùúPèD£MqªN@,ÇYtÞÒ´ŸpOP=Ã<ø;”«YEzýï&?©4b Ôe“Vjj~ìägnýÁ¯’ß©OB*?"ióÛgK,êËð¢eËý4,œtÏš‹w¶“eµ)²“ª©óà…ßìÅÝ_+*t›ßÂ~ÑòŸÏ–³ÆïKtÛºÞ¶!|ÏöîPAñ|‰„k•ýÊ4oPý©®ôWžàKY ýtò:`å΀‡Wý¯"kaaTÜ4¡˜No"ÉŒIÒàvþã[Á[0KÂÂãÚþÚøùq7uÛ[3¬¸%#õÉ«eSÇ!8³ñÈž3óMX~$ºÙ¸—1RdÏT_=¹wÚꥬ‰á!ù \ÏÔâäºLJò¢öÕ)Ü„·œCÆVQ¬6(öl›ê†Pós|+¸ fKcyóq‘Zâ• éÍèíja¾niÊJ“—»Ù8«GåŠn¡ØtOFG GÄ|ú»ò¤e‹ÞõgRÜQÓ„yä• lÇ¥6ù8€²…F$ºáʼ²¿ðp=\-`»)Ï`FNh8aOöi™Ô¬U)-oT&ûñkk‘ýÍ+ 6¹—kšÂVÃá›þùx=åä(Ië¥÷=¾vnJ£Ÿ’Uk6¸+Ñg=]¦G znŠí´´åá•í/ßk‡æ92ص^2q=¹ ?adÀ½çH²Yq Há9.oݿڔÐÙl‹_ˆ¶-qS-/»lØÜ–ѼÓÞ}+Hcz%ä1ÞaÍö‹ˆX±N Ð[:æ#U Þu•x€ÇaÆ|ë¾ë³°/iD:ÎOl½Êæô²O\zRÖis÷’Ù‹>; .NõïP×G±-m=ÚÓÞ/dÛèg"ÖÙþ• »8……ñÝ9kµ¼IqýbrÜÜ:²´¶ª+v'Äðdoèvq ±‘fÇ9Œ†9D8L³_è…ò «¬ŽB»þD–L¶::ü+ óBd¥•R*3HÅRý…õÅ{³Ùº=8A­!?54´÷èÛ±#ë¸àîè ~E„ùÍ ƒÆ/0ûWx$ ãuõòÿMÆ endstream endobj 447 0 obj << /Type /FontDescriptor /FontName /BNFWFB+URWGothicL-BookObli /Flags 4 /FontBBox [-115 -232 1275 972] /Ascent 752 /CapHeight 752 /Descent -206 /ItalicAngle -10 /StemV 78 /XHeight 547 /CharSet (/a/b/c/d/e/f/g/h/hyphen/i/l/m/n/o/p/r/s/t/u/v/w/z) /FontFile 446 0 R >> endobj 448 0 obj << /Length1 1623 /Length2 15862 /Length3 0 /Length 16699 /Filter /FlateDecode >> stream xÚ¬´ct¥]´%»bóTlÛ6+6OœœØFEÛ¶UaŶm£bUüÕûÞ¾}{ܯu÷gŒg/Ì5ךkoŠ¯Êª "f  $ÈÞ……‘™ þMS²±3¶—gÚY‰‚lÍ=bN@c+½¸±   4ˆM¬¬ €ÈÁÓÉÊÂÒ@ý††ŽŽþ¿,ÿ„L<ÿÓó7ÓÙÊÂ@ù÷Ç h r°Ú»ü…ø?NT.–@€¹•- ¦¤¬-£( –RTHíNƶeW[+S€¼•)ÐÞH09lÿã0Ù›YýÓš3ã_,g€1ÀÙhjõ7 èa tøÇEp:ÙY9;ÿýX9,œŒí]þÎÀ°²7µu5û‡À_»9è_BN ¿v}Á”AÎ.ΦNV.€¿U•Å%ÿƒ§‹¥±Ë?µ­þº ó¿‘f S×Zú×÷æ¯×ÅØÊÞàôpù§– `fåì`kìù·ö_0'«i¸:[Ù[üz€ÐÂØÉÌèìüæ/ö?Óù¯>ÿK÷ƶžÿfƒþúŸ¬\œ¶æŒ,¬kšºü­maeÀôÏ¶ÈØ›ƒ,Ìÿa7suøOŸÐéßQÿ³34I›ìm=f@s&EËß’êÿ3•ÿ߉üÿ@âÿ'ÿ?‘÷ÿNÜÿ®Ñÿr‰ÿoïó‡–tµµU4¶þ›øÏ @ðÏ;øç¡ùÿ%ÛYÙzþoRþ{ &ð?hþï@d\ŒÿÎBÄÞâ¯ÌŒÌÿa´r–´òš)[¹˜ZÌmÿê_»º½ÐÉÖÊøWÐg ``aåøo>5K+Sû&Ïùp@{³ÿÎü¯Fÿòf“‘–¥ûß¾«ÿ†*ÿÕßEÍÓá/»ÿÑŒÈìþy¼XxØ lÌœ6vN+—ïÿ¦è¿@,ÿuV0vq²òèþ휙åßþÿÇ÷_'ýÿ#ao 2ûgcT]ŒíÍþ.Ùÿ4üã6uurú«í¿÷þoßÿyþwÝ@ )ÂêÈ”/Ä:-3Ý¥'whB\·¯‡r(Ô¡´Q­¨  Ô퟾ÃSiôVÊØ4ÅûÑæ¹xæð~ K{8ÒƒmKÕ¼Ì'ô%£é-@Û¤ìà¢; b2(ý’~®ùÃûjA~J‡“YãpwBå›AÉ ÑT›ÜÕM™[A&ù£²ŸijC,V'jz]áÙ9eâÉÓ#ÕÀèðÐ`÷ tï]N,<ŸÔʨÇ! e9u´ÈÆ/ú´”½!ê]óìw Ôu.á÷ç[ ÒÀU­”ÄŠüS‘1ù߃È&9v{ƒb±|8z÷O+YÍ^íì‘É&´¿àSû–õç´’8^<µkƒÓI §ò6+Bw§«|›V¿¨RDYX ÌUÉŸñ.+ËFs^½j©ÝòÓ¸¿6wz{‡KŽJgq[×Û·ß/òGx`ü¸JpNzpÑ:Ce,÷L!jdÝɈû*"x!ú0æË¥¾Ó6(›@TÞ®ËN!µz^ܳðÚè'“ Öyl}aµ£ÌÍr˜:áŠ9>¾áÌp y­<±ŽsHñkƒ)Âõe1ý«Ð×CÙ>‚…ÀL5[¨í±f^µ /˜jWfð’¸{SæCž]ûƒ³ù]wû±½›šI ›îjÊèlfšÅƒVgȰRc¸?¯hêP>c «ª×§Á7!^}Nzš£š‹Œ‘ΤS¥‹±ë‡ñ~Í2”šaLòàÒb67q|‘–`ÍÉœÇ+ç>ñÜwþXR…÷|‡Ñî(­ôƒc‡ƒâæƒ~{]m×6An…ÜÞ|…µÇ³1’™nê|Å2,Âesצ*JÄK-¼ñ/~ÚÇ6ç`oÀypªÈ(-‹óì“q<ú¶Ö¯"7;%Ôädß0b"éš«Õ6@ü,_Ñç"zñ4;(å–pU;L]V¹šx¡\ÀnÃ" ‚A3P®l5Æ5G,% õ¸éL#ƒK»(*Ñrg‡ðâ7̤U»ÍvÕž‚B/IâÉeºØ)M‡ÜÍgÒp/!Û…U§P7íûƒMYžH!e¦Ý8Õ?P2§‰%²²½úûœÐídðsj—·e…¸í§!»±’ ŽBž%cÜÜ·:Ò›g_ã“󊬽3°qkOpGb¾ïæ kÎ5?k´fÙñbIÈyË)ÈäKo®V!™M×_„—(ŠuÔ‡½q5m!¢Q>dS‚x´V¡\Ûu‹ü,°¯…,IP|ÃX³WÁ´Ìh6jL²»Ê5ë¸g» (§èbÙ9‘1È\жƈù~_ahày% »r0vÅf“ÚY¯ºâúAvq°'10Î϶ .«…С†&ÁÉúŽÀzI¦ª¨ää©Ð±}æDøÌgüEÕ,‚iÙ9†ƒðýPeãy…‡`Þhn¾`ZþÝÕF ;6÷U³š•_¶G“–š%Ñ£°” ‡ÄZêFQsšBãaŠÑ›Ž1±€Ðép Ÿ‹·À±d{n›6• M‹j3j'&Pj0„ƒäA‚&¬¹Ûë÷æ½'NRךyä5Ï«}p…ZͲúÜ$þ·g&›:B?Æ\§h6ÚküÀC‚ë±M#ûLp&ÿ©õü™ÒiœW.’ÂàõE¯]ðÇ|oz[ŸuC[Š·¬æU‹q 5‹•Š\”é9(xnj’›¾2馜T†´©¸#ñ›A Õf9¤Ù€$SôSs8OLÉè ã`A(¨zjj•”ã£Ü{ÀŠ9g-tëOBHÄò¢”júËo—“!ÊqûãÌ~<Ñþ =ºð «ð1›Éìs^œp°|û 1ÓÎ8JÁÑï¶«¯Þ±Õ¿Û£iYBùºW|v2qÃÃȹ9˜ÞL68_-4ª\Çlbøµdµ`o‰¹p0%ôðT¦4,ljœÜ)u»üÒ=vt‹¢-G¹S?#±ãiÁÊBwqrô}M ’‘W«Ëú!„q[2#©u¦Lßêê¹,5ÐÞ×Nþ$}éhµê‰JHŽß*©¶Å§(M¾{Œ"-{Þkwý.T käÇÒ æàr»¾®O´1>ñå»2U¨%znƒPʧ—>/“@jà¸[Xw³²|¬4 ¦¢7:?h5kçÒ:»sãœNÙ$mX£9~®þ1”|1ä¡~uæ‚áôÝt3®ztüÅé$öN­A~ée¦küÇñ·ä(£«¯sQöKŸ²Äc l[”R£ë1Ò#û‚Ÿ&²‚ ”gAm-’£Ý¾®dDáZ¤äGf[PÅw†÷œa¿ä¨š“æeÒ…~Ï tž{´˜ÍLûò×GÈWØ´¦ÿb!`•ÌŒs:¯îÂ*÷?›’P :O¸b u]sø·wônÿàY·©öx¿Hã]Ë®þ²a03(Û‰»áñÍ…'èãŒâ=ufG¬ BJ“½È€üÈaA"ïÓ«ñF¨_å*HêQKÇÎÙy"TзÏ:à3—ú§ 5E ùS„ׂT ;3èSó»Q;2þ‡‘Ï£` áV×ìd‘*B``¯c P29þj¨Ú‚Q¨U$³ÒÓqQÐÉl 5º‹|Ž„ÇBã¨v8}? ª;¼Í9èÌu¥³úsð6ãû5Š‹ÃûŽMßÍ&|L z7ZâpB(Ìj°tSf´&‰Hî¿·|—ÏPÍVYŒëlꊃjÑà›W:…BÓûEɺ>ζ©ä9á ~ÕRX.7[ºb´Î+< Y•UÓ0ÌSq|¯B¬`dßCw9£ŠLõ½´ùrŠÜjôú>ÃŒÁp%H ôa•,ZhÑÔ\%äýi޲<g,À–®C`Q¾Ô\ßÇ¡G¸áF³ô¨¯GlDßòíãt qI3„ÓC# ëÅ—Ý£”7=®µimà9äT X±ÔjI¿…F±ù]Ù]L;,wî7ã}.$ÑÔ´ŸûIsëÌ !ƦøF¯qy³ÎË»"GUò§wÇ×ÞOä¤D‰ú·@•) ©60uö/žÉB\?€á@ Û_í*ÈßâñaÕzN¸5¾¤°ìI½Ž‰ËŸÙrd©_‘Ȭ̮VËêBæl÷'Þ<™âôPÃÌh!bqûqUÊ’¼«ô?Ùí?’°ˆ/iÝhû?×d†ù*Û›…d]“@O ùkÓ ÜîªÂRŽ p¼<=ÏÈo?j¤ƒÅFÉø4¬fÑ(Z—ó´Îíà@´?³Š¿ZLÄòíOC~ …Ó î-Ù€(*»JŒé]Q£gÓñŠ›¨4ö5y\WfØnP³ 'âöEãx ‘ü~ØŽ®wJg(:Ëh ج@½ÉÎ}¥I|ÉòdMôä.Lšó‚”2UÚ0*pð+`6-8N[%EØ7ïñ vµ)øq©ÖÙL‘ŠîöÔÓç6‚çy2FlB¼Íé÷}mÁB qrUŒ°y™l$Õ­  /¼Oÿ†ÇÍ8šÚß9ruÜÏ›nc6Q7EÉve2yzåQ±y3Ü—¶×[ŸÈôêÛ!­?Aî'p ì› —b?YCg+ þ¨‚×´ES·™á´=p?0 Y×§>_±ˆØmƒU3x~‚¯7ŽX5)æ’yéK9Ì·¢æZ«R+]z•§›iÁY]Š<ëŠ`M&—d)Ñ6ÒÏ_„{1«¸|Ïë:\ÈúóŽ›Q¾rlÔ1 I[ š©R«³‚‘„ê¯U+¥F«CÇõ2ybµ#¼’×·üáÉ-[hLgsÇpNß>ííN÷¾nvµ«4cˆ±X!_ÊpRüÁÿ âþ¢ù\Ì—Ñ­ˆeA}":bF;Èÿér`QD é!§µÔŒ-†XýBæ½^ÑUZð‰ä½áÅîD,G×¼T7)ö‹Íþ«Ï;Ç#é6¡D¥›5ÖÀfï\`%„ò•»‚¼‰SábŸ¹¯b’òþ]q›o®øù‚€à¬}³Nr–MjÓ@Øz¬Î@]’À8?­‡*ÁÏJÁåd£ûÌà-ÿøU§¤õy#7äWƧ`Õ±ÏωC GÍ4{-y-þì˜LCß×;ž5”³V ¥‰[Íëþ¦ÏNúîÜôqçW]wo¥l~Ô$È’qGß©Š^W#Èý‹X¼Ø};{WÍ7B²g ,'³u÷,®ó¯>%Œ8ºŒàÏ/Ÿ>z{T‘?“eŽІÎx~W}ó(…ªpva¬ÅŒ]†dú#”‰’—'-´ R¥9Ä8õÉÐÔ"¦Qì´˜unÊý­ï‘ž\˧§(Ô¥~ôk&Ÿ{4îȇb*äà°¶zÀÙ®Õ¬œwÒç’Bš¡@%R¾Ó}@à‚…D~™úv1 ^PÙ©~Õ¢‘ÝÔ÷GÛ%DÀ €®¼û~a\çh}—ËÍ|Iélæ.ª-fÞ髱‰[F ÆaÌò{”˜‘ÒJÐݰw·ñ¯”–$x¹G)pþ•ó 鯯¦^Ìü´ZÇ5Þ¾×ûrÏO¨6©-8(¦ä ú@ËòÊMç‘'–ä˽Ÿ¶Î-èÒŽU¯G>%X·äÏ0HÚÎaá™^NÁ¼ËˆS¦gF+_ǵ¦~ÎXÇ|a7rˆ¡Žz´½¹Xä×96™¨¹VþÍ1d_3‡eúýáÞŸ‚ˆßß7 îÜ¢D-8`$«Ûø ~(\'ÜÉ0ų۫¿ój®ˆÀØud²‰€ºÞ¬C t«ZÓµúÉ3Ÿ=Qhec%„äþ®`-*ŽŠQ“lˆ  Ùä?ƵñYy˜>Jrå+‡æ(£‘x#äóá;ù †ð8øëé¦Ö5rÑX³©ð•L~K`[Wî¡ir¢`¤Íë‚SC_«®Q©YU9&à®Ò€×Ö©YýžH6HTr€èÚ ŽgoŒÃ`œR¨œÇ¡¡oÄïEý+@àßßdNrHÃMÙêYg‹)´;›DOä*Ï‘P““¡n­<èße•AßÓ‚cKmÜn¦ôe á¹Ä.?Z r«¼A6½XB„}KdƒÊ`è¯þv'ƒï$>Çùw *Ss¥]Z¨hÄi\É0Ç /Vøâ [þZ÷…¬ÆaÌ}àîöŸ?äl¼|qOž+¢wã‚ÂÕVyÍWT–²¦Ë¯)g+ÉYúö*c˜¼Rš¢dd?4T »s©Ç~MÙä·Kˆõ¹}}oH.öB^Ì&Yy’éàKÇ…†ïæ}ýêø¡#¨Õðê£é^÷L/–»«]1R±À¥"bʦ–œ²2Téǰ¬lÄ2×ÞÓ ÃMe`¼ì[—€·[¦ÅBu¸s]ü˜ä™l© Ê”PU¶*`ñªŽÚ®²ìåyJG‘cŒ‹íøæ¤«›£d÷Ó·ß—šÃW¡ˆ!Âe%Ú¡íó¡_œNUYU'’iO•Ú„…m-›n;Tñ²¶t¿í€ ëû½—Ï£-&Üã*U¶Ž£‹îtnùÌuòÃßÔív)W»~¡)ì8‡ÏBË¥DÍ"öò¤@k\(«SJSawÕõ Ò§wyã$@èzQzÀ[³á… ÕJlÃÔ¢­ÝÓJŒà<…•òM›d·¿Z¹®+SJoªøÉÀõ%ØfÎ|à;•>!]ª±Ìïîfi¦—§±öVß0O€IêM!a;¼•„Ö31ºë™@s5d08c‹‡ ¿fn½z®‡p4&0§Ì´igv`Ê{žŠaÅ­š¦hQŸSçíõ²QgFýéâ³÷À¡ËÝù”âׂýMÂÃŒÂvBfÜå+ñ]ŘÐÔ®YÖ Õ}¹(ÕàÌÎ.÷Çõã€æùæToc¯ÆÝ/º°ë×Ñ´²î{õõ…?ëû¸” _«ŠRêa˜Ö9 ¡&.•ÀqYl€j&}“‡çÖÅ߃2kE k¬[<ŸûÀCL¿f©'¯è8CKrmè>¢f© !¼—eåÑ´aV«“5ð|.Ej7øÏ•”jõ Ñ ,“Îj,Ï=¨s­vþ”gË—ÒÖ¦Öó%ß…0ö/ÄåG:´:'1Úüþ$¦: @ë45¡•Æu¯qÖ1{I$ÃT*.q0ç y6Àï 7ÕtEô`Ë-ØlÖ~—;Môã6i|­_L Èç=â#ãÊE“,*µÜd!ž„ÃÑk›-®ôÞwEòjOv]¾”™¹'Ô™øëØ~f>K€Ü2jtgÅlŽAGuphð}BWœ–Ì {¼—–Ñ+XY?–§!¾5úBÂ3°Gþâf”ƒÎãëW¶ûÞÊ1OX“ _&:¸¥|)¶{ ˽]7 `´äwÂX¾e¾tÏo¨#+Pfî3Š]z¡+¦‡D&„ŒˆÐ(š%½&˜¢+htÁª6¤Äç˜èA’ÛtNQºà(ßÝ 5)Y‚‰&”‘áYùöÉB®3Õ0"¬}Àp¥ÊÕÔXþ‰0ØÜôÇÜd®¾ØbYÀ<1[ÕûýåYä®08 ,´uü¿¯­wè¨Æf;NK –Øv¥¾kìèSÔe˜‚°>– £½r&©›Æú£¾ãÉþæls%s½ä”¡ø³å8‰ÝÁ¢ôå ±yr[C{³ñ’ >¯ñméÁ•6âóîhJbFëzÝ8ŠUAtO,©ìÃÀŒŒWW¬¤ S4ÔÓUùÌq)빋i´žƒ‰áTh7ýJݤ›<â."Ùe{n¶»·=‚ªá¶c†S–k*1‚‰…ã|&÷Ô\[¡˜UJoV9Íæ:鄟ø=fÝb×iÆò·à¥?| F²šø¬7&P…‡Ã¤E–÷ÍY*Å9™ÀýÁ•ÐÝw_© nY-P3T–„ëM(ÛJ(v§¬®á¢$Þ äÙJ̾C¦+&Z^Þøô?ö‚š¾e¢Ã™»Ï‡Ñ :U‰zh(µÍ’t¬0œ/÷x^†Â«÷wÅÎ8¨ÁJ¾ I“cÿ0D¿ñ¾’ôTy÷0z;½ž}\×31 î ‹*ýhêð׫ëø”Í2»òïÛ*AP Jýýu` “ùAü„æb=@¨R*§Å¡G$=ô‡¼©ú´Ûj&gí´Ò‡S±ÕÅKD ‡B<·W¢ð¢^–Î~–ÖŸcßéÖ;4(rÅŸX‘]®®?Q˜/ž}Ï4%;KÜ ÒÏæé4Bz»Xω ǪcOðó™þæ7 ªEÃÓ(ôšB#¶ÐË^u ”l²¬ZòËӘ½6÷PŽªÁ \^ 0[ü,͵í­ŠïT®ŠQé~Ë-b½Žñ⤵üŸ„„ëéÜJØ;f°/ö%Iy‚e<±OÄ%ô¤oÿÓ¶õ¨Ïz·@W¬çÙ:¶ìz˜KÞWÜPà:p¸Ëå;š÷gvƒwÁŽ&äEK¯;ÝùÃõf“Eµ²C‚úk5vÅÖ…ò:^†_×tÿªÓ;XT+‡é¦ù0•¶êio¥ÿJmÃÍ$4ú®7vo¸Ío~°í7ÿÞÜïÉå~^­Hϳ–eT5´ö=c-nÜn:sé,ÆŒãwá!†`ˆKa±±T¦œø~vhwfИb”0 q…ýš!²8Aû-WícWEûmäp¾`ÝjËTwôˆÕD”o°6ƒÈâîDfÀ¤R@Ô¯âw»Ñy¾}‘P¬Å2ž{[­b—n_Ó Âɴ̼H±ÞÈè‡Q>-UI6·FqË]¸sKUG}?¹ `"öóžz£e4¡K©¼cxä(a•ûZ‘ªyÏdn×ÒU«ÿ L­!ÅL9Šž¯(‰?¤C%Ã05¥ÞÍ¿o÷O1:dò3)ÑWjC…ërŽÓû´`m"ND9”øœ“ÞÊÉéÒ+#PxmU’C…ƒQЂ#(ȼƒ,·®’ä¹Ì‹Õ1px®–IQ TDb§#ÙÄ¿ w[Ãå©Ï@Ñ®ê,`&¿õÒB$Úı{‚ãÈZnÛ=ñtEé)Æ;.ò0V‘mm”Šÿ!ΘnŠd-îE<ÉPÅ—!7_¢Ey1Iõ–é»<ê.,ÜŒó/Pºš¹Ä¯c±XÉ‘HÃVyìZ×dÄvíRl¢)›¨Ñh‡·ùD¯q5ð¨" £¦Ôó sÚ£1èRHQúÚø€8A¯ù¯¾âoÍÒ—Œv‚š·_óæ(³X틉‹×<—+mÚð#-w ã*l:"Ô^]rÙÎ㹡3äÑ—à®SÂÜ¡+î„ *ÚËñÓ‚É:_˜t.:jJGOµG¹@1‹_ˆ÷Ê?þ¨EÕL´šüôôŒïŠpÁ±Vu¬ YlïîX5Ð^‘Ï—÷k8¹Žàà4£IÔÁYÐá`ب Òj³-¸‹$ ‡ž„ÍT/~ …£~çØ{~ï®îDÞgËã&׌»BP—+› ÚÊ;n²ø¸‡oŠS5 t>ÝÐG,x,ã αî'_ˆÃ3J©¿‹Q¤‹±ñ”ŠþÝ ße›úêz_Øô¬IÀË/¥“fÄ %Ì—W½ëžî`#ûN­Õ–O†cÚ)RÄ‚HÞÐ~¨Wo£Šbåýî$ß„PPºšìôÉ©ãn²”¿›€nÇ 4°ž-fT:.Õa³îï€È"¤ÀNúý¹ÖG2Øg¸Îïþ«Í›÷ã±é ½„sÌJ-¥,ËïÕs°Ux †/$ÀÂ\+§ÛýÒi~ÔÆeÒ`j{Š‘ÃØjê¢ìØÉÚºóÎZA1}ŽýH©kcøfvûƒ´ìJeùA"Ýo Î¥ß|×q„jœS€»p,<ÈRöä^*Õî¯ÝõºÇ!Yåov ¿L_E«ìz@ºÕ÷S)_HÕÆ¼M…*t=9'‰ùÙÿN.Ìùü5ç±g°IÆ\.KÂ=3˜³»BÔ^šHG(« *CÈ`)PòÈvBÓå°AË_wíN5´æH)ºÕ˜[|¥.畞Ïdv䦮›Hž¸®bFU,e¼"¼gíÛIMl+5?—„­Åàåú+XÇF¢†i˜3Tíýâ¼åËroŽËw#Ò§ÔĹ‚  ²Ÿ¤{É#ùFûÝKŸ"é?¿¾Fvñ³@™—M²A¥áÑtÐ ’pZý]¼7üÜî+ü^î*ð…}KDZø haD©6²#^ïc>³7„Yõ•~9iðÄÈkö+éBì^¾IntkDVAûÀFBu¿ü°€”`–­ßø½T•J°î‚×X”t¢2íWCSM¾þ t»en¶ë|@Ž×ßóâLCœ3‘Þt”Ùo&uAˆõËɪN„ÞùC2R×ǹڃéøÀ…©È.·Q[D°æ)Y1x°¬òø |·6^Òæì<âqöU»„~J¼Í¡¼¤>zEwR$jø”“ Uü¸hV¯¯Q …Ì– ÐèH±þŠ6öávø¤!Ë6tøœYaaœòoçU›€1öŠ®½U'˜©Ñ¢õpÄò½¡ÄñmƒtH¸xÕƒ§±špM£{’SN®û½Z9 ¨|[‰ÇÛI²˜_ÒÈ]î_«‡©?v 7 ¢4 ¯¨Íÿ„+<²ü4U€çbáëÞ®a¢@Ûªq®ÙóàýtïÓά LÙ¼F¤ZÝ­`ÈÀ’ñ ¼Ùd‘¼¶‚SÁÓõ„X­ÿ®Ñ9m>Ô+—èusÝž\…){\2´†výÌ£Õ÷TYÃCK§BNÖ£Ô„^Ã\o›3Ôè8ðþðåÒÂ85^J£ÔçV›}_¹ûòc>̵wm®N²¤UKOò¬c,qüÙ’°¾ÞïÓLe"m¦6}¸êEÎ#—o8?õŸná~4zXÁKæÔÅz²AG£ìÒ\Ã@Eêã£öÍ“ œãÏ£ž4èuoŠ”~’´žæÍ»MJÛA¥ ýp‹³6Ýè# \¸…ÿ»/,Ì è Ò˜äd—}™¬¶xy'2?tºä¢f «P0;k½Eª=ÏùlŸpŽ ÖcÏTÒ‡qFzôÜÖ.Îàél´2COH®¢Ïî•q“mï¨ßºÁ)ß0õŸ¢Ÿ³s7Ck^jxºï¦‹Ei[s ˆL²[ÅAÐéDïFAWa¾FÚ‚¾Ë5iŸÛªšyJ‘.“Å|¾ŽÃ2“Ô_B*Ä^1vÚ-è ¾t /½á¬¤ù£HE§Â@ÀH­ï@`ÉãÂWÔôLl)-†øvPÞtÙw‚ý@Eh2 üÒ5ÒIf3˜Fìzƒ–aŒµëRÂÔÞåGo”w —ƒPAûüT»õkǤÐÄÚ=£çÇ"É,(3a/ü`<Ö©ãÂóƒ‡J ×Ë$UYÖÀ¨|ÂmDÒ9Ó¥èO–Ñôâ>öåëÔØD‚míÔx¦EêÕŒû¢ÝÇkSôþ#MýlEË€ )o ~Z¬úJås1> s³’>µ:“ÿó´sÂ=vKî®:»~ä•‚È;¼?p?+ÍšèpFY‘ûÓÝ|³po‚2åQ‚8¾÷ªn3pÝ[Ì)¥ÏÉŽ.r_t½ÈÖÈÄWû÷K{ÙË<Ûe’@²°ŸõV-DèªBçOßMo -GdM‹·¸â‹|bÆÎ”9D¿Ó_t2ìi.[¤¤¬b]Ü*æŠÈö”½D| ªÖ¨qÉNO¯¯-ÿŒîpQlj9râǦ7Ë.:÷pg#•ƒhb ¯»r‚· Zé”Sq!Q­²%×°Á†ƒsÿ8‘K_b¿^Ò§˜2¸X_¦m7/WMwýöÊÒöz¡:åNYoWe"DÒ•µe-~©«ÖÙöƒ~AJ[€úŠ%¨s¦4„b}Üí}ÐFLÞ¶ÃÇz,jÌÇ"7ÿ\œË õr1{¹Îuƒ\jcÚêi¹ whF`’&¼YîË͵ƒÄÝZeÀº´øí@ˆu7ÄÌ>%àî¤`tŽêIô£L¾Ï™²}8Úõ¹Î¹Ùä1!)¾Ô×Ðõ·“Î4—þ8ÒVñ§,{ÀÈÞé;ºï¡ ì9£KÀ.À™&)ó¥ˆ"ƒõwr¬›ÊQ®!ùŒô;ÁŸÀÍ>‰ÐN{»¼ 𳍔¶˜¬*”TnogITZM‚|¯ê-³Q–€ýx;¨¨UÂ;blî<yŠg3…2¶ÖøëaK¼®þ% Û ) *T|X+Ž!ìÂýËŠVØa§>= ú/w‹¡¡!-æ7ÿÙ]XÖ „_ô1HËýq¾/|"ç»ãuÁ-„±2FT+3⃡h•Ég¿g!BÊf)K^d·O¬‡”á: kyùY‚V Z4pwíĵq:Rʱ¼/(hîs>ÛÐÐ ê^‘Ãó”õuÄ‘l:Ú•Õûw‹3¾ëûð¥:…F‹œé)NCLÐ(G{µ·wÂ3«û‡Ÿý\xÀ‘Z½X2f©aïl%æGéø®ÓÏÌ#Z¦ðPno·c AQzâ}ŸAMDß* .‹pÓ qëµy]Os^ú¢RÇ ¸„“™ûØÎ1ML䤭îM—Ÿ“®xg@xoMÕ+ÂY›ý¢ pÀª‡Þe­ƒe‚YG *p€r¹kÍm[¾íÐÓwCÈýèEÎG[ÕÚÓ%ÐNËî_aö`h¡(ùŠm(â8Þ¼ö‹hØ?ÁÁŒ«¡B=Sµ[~Gʒ䳚û¦H­ý8Ì-:þp6OâÑÜóvëïN¿4™‹L[ÌÚÒë7ÃÂûÖ o!Qmý‰åb[t¦Êlj[f‹ä À$»ä=«[bø`˜F‡³èºá ýê|rÿúÚ°fu¯uU‹?U”d‰B6k‹©g8$Díù«§úŠÒ<‰ÝóHav_‘†ÃúÚçëõkȬ‰N+¬<`/±n%ÃÖf”ÔÿRãžÄšÒ"ó‹î~è·MícþÅ–‹q˜QÜQÙœA4Ñ‹fÁMX>6Ðý³ôõ%ægÔ÷öJîàcê÷ ]2´¾ÂÖ0Yd‡ ò?ߊèVéL¾Â”uºèÁ^Ãöz=úw5 ¿]åK¶ñ§×)² Í^Ýäl £â:9ªã/•#BŽ3¿ç>®¤? Ÿ]¨ ×¹v|Y^{¬Àʇ,8RË”1‰ÏS®v˜4i7™t4¶T¾U!erg0 _Ùj®Õ|? œçÂì3ˆVøž•ŽH½še À‚[s¡VÛªGs€ Í(³-c&šG²Ì˜ÁXºò˜•¼åüÝžê”a•Z²a£Þvšš“TÉ¿ Š> ¯ÑÄ×O½O?Æ@4çØSþ)xNùëBÞPÉVÐJÏ ®íµýÙ4\œb$¡Êí̹]°¸ÛYlúš:Ÿ[]µìˬíw¤Êàæ¥p‡6`ŽD»5õ¯«UŠím“KG]q¹s);Û³µï H8¸Ó|èïÎfïš²ûê-qÓ2Ú¡„b~X™}Ä÷°ý;‰[ð®ÑƒwJ$6ì»ËcP†æ¼üîÑM©×Ž›/ªÔ‚½gX«¤²¿ô‘ yà ,Ï)iÃSÌ%áÆ;lËÒ•´J—ayù:Ë!…=/Û‚þYEfÁy?%m2ŒÝ(m;u=ÉuµcÞJ$¦`w9m‚ÝäM[ÓÏ+Sµµ.wjá¼F®ÒÅ\Ó‚¯¤ßañSÞÚ£m 1kÅ,:Õ­ ÙöG[S7ñCÐI *?°‚aÊK+jÄ;Wöôãd>•½Žž`3C"$Ÿ© ÚãÓWûýæ/€£8•\¯ [Óu­ÄxeÌV!Xj|!­ß¦÷²íÒt&¦ù¤ÿÐÀïï<ó¸Wï—ÅKŠþȰûöË}&§û{Írà€KZÔêù5b)FIÏá÷û‹}wiD†7Ö>»ƒ€¬G×zëý%ª¬ªèjð÷-LÛ© ê¤Éß9Ivà §8±…`¯=þýÓL{މjb«:t,36ìQËÆõ9²/on•m0´ŸÕ$5_@ª\$?òE· ³¿èº½$…Š¢~ͪðPµìáåéÊIó`{°˜«É$MŒzJ%ÚÝxZo:·ëMŠu6M>#-«Ôµådªá€äô˘\CLvà ‡Ò¬öhú¢•s¨òåE¨§…üž!I ßÅÂëgSËüfÎý«ƒ•±]ã³ñÊ5YáÓ"q•Ò[ˆ“ê!¤ïÓ8s]BBÈQK:|îÛ¿8«¿„ú³jSسÅûc9ë …8¼V®|ÓÙ ž²w¯–h<«jÞPìFª³âvÛ;oô„an³=,e¶pDƒiŒò‘l"±õFùI&šêík’¢«ôaø@þLj@à0ï…·¢f¶-‰+~kQÞÙ¶ªL+½šôÜ'ÄhÙŠHýÖšuVë‘,›)6]>Cz £s¯1_Œ$CË5ö—oMîK%i7aëû&¿º{À;£’ Á‘ÄCs¶$ó•0G0±´í;lœ}ÄÆ9}PÒ!©%à^ :d87cM$bä©Z(/á# ‘k]¯SË«,e2,“ +–Q†ŽGÌÑl ÄüQ_DµÕX¹Ï>±^" t (ÜŽƒ¢­šøáFèwÿKv¬jA…„×2TOŽ_¢-Ô˜&n² ÕüV÷3=³¾DÞ1:tºN˜¶£Ó 7pÿzw¡c ±ÓNãøè¸ä8UÃÄ}z¾ê¦æTd™`Y:áäÉ[Qlûen‹½–‚kŵ²s„üF®@´AEžÜÖ¡LÓ½†íNªo{³ÍxbÕªÑֻʪ"º÷w®/Ú Kþã,u€ˆƒ6¬8,–:#Íi¥†UÓ¦öµ@4MæŠh%ä+z¨ç$®O÷qþ¶l"ÞCB!á€ÇÛïë;€ÜZ_G8sm^Å‹¨O]Ÿ€D»™ì š2Þ“<¿¹ë7¦8ÑW¨cl»CâC¨¤ü® ‰$_y_wüKG“Œ‡zÝ™è›fk¹SôëW¸Ñˆ Ló¥`ºæ}ˆ³qºèûñVÜ 7ú…VÛoDüÍ]ÁLÑ…Îäfµ+×JÕî£ÑJ¹gL?ÓÅÌÃ;T¸ìOÄœ œ¡Æ<ÿeMkÃþ„Xõò$ckÉ®…rB|.s WÛè­lkîþE$ Fs Ì@C>L u¼Boü7L¢³bœo,¥4RßV¸VÞp‚ý¯¢òo”£yí³÷ÒN>HxI#Æ Ñ[¤âOP¢9ì[ù{‚R·£Öœ¢,-Ä;¡40nþG—©ÌW¢tà¼=$;‚Íb~wJø%‚šYŽîì•Ñš´éyýÏ[8ôÌhši K­gI¡Þ^ÜFÌS‹˜ 8e ¯3ôvæŒûú*ècóÀZšu l‹8¾÷ðþ1ušdúEŸ‘‘uó|·ªÛ±™ôÏ)ÚJЍÆL%¾Kã"yc’§ fW\èkb¸—iò78õ#'öš@¥?•Xšt™‘œÉ?2¶»:³1[l$#f„©§ª4:œ©gíñpŽµëÆ²¹$´õ~FŠæÃ™'jçuz}Õ|gÅ;¬+íf,l¨íTÇæ õ¼°‡˜µT¡57W}9è­É'žQ‡Ìiº'&øHxEÆÝ6Ëk@pô9ÊuRŠ0úr&Æ5òاþ° ¬—ÜvÙ!¯0FYªjßAƒ*à²m‡$ô¾¯| ZŠ8“–“gü¡ðÓÓ-¥AÔŽ}Ut -`K4á?pÿsÅ¡xD¸WøeC_; /hm©½„»ºpõÈtÉØù æC_Y<9¾~%NÅ!$ÌÈ«¥9M¡o'ëàýíñ¾ÅÂqŸ©¡×|Â:39‚YürÞDØY- §>·w$P¢À0€v–^£ÉÇŸ87 €‡¤íÞÞᩈ.U¨/¦ëYDÆ8bdжպ¯DYÈ^ˆÓ.&¯KzZþ®¥QøbÈ”:òYwGàŒƒ€Œèü`G£¦BçÞù¡cß:í.+ÑÉgÚâã{ 8Àµ5fÓütX•è©6máŸEؾ¶¼‘%‹wV›ôÖB»!¶/åRv %p#*né<Õa#0‰Š -¶—~%!t·{oTùÐìMB*ð¶~²Ý•ŸÀ?+ åU¦f°¶B–A‡J#ÀîU>'šæGÁ7›·tÀsš=¢7ï –ÒÜ b÷ÍE]—'‹-xtu)Š„%²ª¬'óî`}ƒQ~qÂÒoð»qÂ÷Ñ=Ø ~Ñž”ÿ¦9çîÕ(œÍØòT0­¡ÌÊÓöEŽè$Ì_GîH‚ˆ¥‰’JÏoNòvª :–œÜøÕÏÙBVo1ˆ¿·h¿;¬DëA =üDK›]Á*UzˆÂyBì®ï]AKO6~b`O^™UK÷Åp:zš$Œ"2_­KÀ>Â(.îÙ¸§bt ½pZû%b.ñ^Ÿq÷ò=ÍüCX¹6{D(¤Ó•pà³[zï´”¯^©Îæ%ŽÙ˜Ç(º›rÙ¼½`°o8;ôñîTÝ¿±Eð³¢Òóó[ADèZ•'}nÈ”LùŒŸšê¤ Li×÷’<‰Ý†f¶pø.†CNÛp­oöÊOÙKœËÔù1°W¸K;íÔõ& 1}òÓR€Hc×ÄÅÈÓXq”&‘ ´ýi³ééB Ï÷ò§î2åÝ–Í,­©Eá”HÂU' ß_¥&Ù¿Ðì+]š‹üÓH‘»q j¯Ã ^=òlÅ0. òæ=él¤[19’ÍÿàhB¸:{PE 2` ‚…7Ï÷—…žÍ `bRåÈSô£ùq³t)íáŽrü²¦Áq§$í(™ÒcÂáÕk`¶;ÆI”Èé“õÇM¯…[2Wjó }ª évªúÅ;Ê©Dã÷F£“›êkutx‡6¤°‘Šx݆1Î4ÕØ›äv lò‹°È 8½ ÷g¶à„4–扴•Gt‰tÑ“°¡W±è)*XÝfÏÀÉàÄÄz «/¶iê=#g߬ºÙÿ©Ô¼9!|cf=™enX^ìÙ˜i…¦ÛX×hÌÒ‰Õ 7#°s7DÉ,‡Ûk&Yäªø»>3XãxƒŒ<¬|%˜tó‹ÿkMZ·ÊTkJàg€›j·õ ÎÚ< û^1×ï´4"­Z©Ñca¼CîYk˜–ÐC¯(Œ·aÿ‘?(ò¢ÑcÜwH%?®¸Õ츽àïEðÞDóhSÄUôR¨ï´÷3Ž …"Ši¡ÑíèŒîg=^"ŸàýbUæ‹oZ;5O€ôm,ò¼pAɯ ¢Á…OøT7Íi4amHô3ÛÏÑÔ<ù¶X­N5˨׷ýÁ¤ßÊ œÅ©9…ïÂ Ü ¡lB48Àn¨¿©ži½Ð5×Ðþ8 G&È%àÚË.¶p*+C¬£‹ðàgϧ;…NÓÙ÷;J½éê;ÎÃ÷ªDr–EªK錦(÷¦Èåâ"ݪÌ÷È!ӅC À.1·íÒ9Òl½ÎZeQ—IÁo‚èuå0eñ¸n ]÷¯o3Z DÐ=6]€p8dË«f5kê+;¶çÝGÇ^䟽ƒ›Ð³Œ"³r¡¶Ÿ:¿ûVûF¥Zf¢dg¨òÎ~±ïu¸(Ê PÜT>ZgÉ} ¯c¨Û.ÿ ·˜ùf«6¹7IboûÄe¿n-ÿ“«¡¬%n`2ô×þÏz-CÊ`I§Œ[j›†¶«)ô”m smü»kó'ŽQâá¸ÑæÞPèÊD)RQ …f¤#k†â#%™ŽÄº^âvÂŒ’üWZÓ,¶â©<[«ÒM¬À»¢|®jpj!4 ~—áLb­¢õ•”'X3DEŒÙ–O¤Têo_ŸÄj‘bZõ¨{l» ¢(]– ‡wHcÒ¢üRº?à^ X *2ˆˆ\_ÎD>*£oŒx[LJŒ÷´èäÓZ8™ÛV0ðD˦ô³ô(XféT¼R¢Z_SeœZ8Õ€Rk Òxºú÷çÖ Áô!ªx)ÚNB"v‘»gj{1Œýó©µ²&]î\&à5;bdÞ^X åšNæ,xÕ>L#!@¿aÑ0Hý„gV¸¹®¹ë±µa›ˆI¤z®ŸØõPFRrÛ{¨ÛÄÑ,7ìÃ(?Fâpr4„LÞrᣡJØ'ƒR¯½‘ÂQ+ù¨WkÇô.7 EmÑJ‹y©ï²™ßÜ Qí4¨ÔP㘠’eé¢tH¿-+ºp³Â!yÑyétòM%÷úb–Z ^—(¢â+¸²ó4àkð%½W‘lç¾5&c%Ú Î ßñΓLdþìϲ0øh@UÞ™± •¾uveÁ*ü"3ݼ{/^‚ýÐ}"_”¯tÀö‰Ø ¯Oó“üÍãzRŸ²ÖJÚ“êÈ3};5’!&˼U:¥MÚ ·lÛ.b|=m}ø£ä i `-½ñ‡¥Ð"¾íq‹åî”´“©a:NnPe®…V è2—Úät†`>wІ8˜í¿Ø«׬^ŠÆ”P®ö©Âm´ñI¬\ mÃa"1tÞU(„"±¨({‰\ZwÅr 6Á*ZùäA¿ËKó$Ý™®" ïÂI²¿°œaþͳ8Gu@þ³âúwo”c-G1Ñí®¹Ð/S“ôZâ{Úlèo\“ÌRwu™[áîJ@£œ=ÂÔÑäÛUä”­¨¹„Œ Ú©œBÂ6v½Ë?/ ªÑä]ÁÏq±:'aRàêoôT·ÎG1îL¡I™\ܳ¶\'bµ”7ø…(×¹ãÌ—-½ÒŠW’+Lo€MDGÂäۻʧ0P_ïþ8]Ãý•FµQ©Iæ&ÕÊÁTŒxíñ±¥…+R+NˆY˜¨ ³]ް#Ýx]©O]ìÚâO©§±ï_oÝ á–tg¬É)'.’À#VM/ÛR[aÿ¥æ¼³fXÑx$˜?£ gauÂå{¿ÇuŸ ×ûý&FN, c%˜ðølªëÜVTÂR{k’ôâúå4L‹@îuUàÓŸS ÎPc~ ½ˆ8jÇ„½&TszaPL¡ë^ÐÃnû)>ã ÂlÓ©¼¯M&Yõ-%þæ…׆µø•Ú£ƒ_,µI¸ò„‹­Ä?Sa*A1LÓê†ßõJóÎF4™µþ+nØËæcTt.¥Ñ1‰7âpÔoÓ™“n¾¦Š2=µ'[Kúܺ¾Q+àŽlM¹ï*O²ÀÙ}É}]IöQK«ì“n€Qù2i“¹'ª ¬;˜Âoò©}¾U¾•9DOÕyÌêgvLv}r4ÙLØ– K££Q÷á»(}»Í©Þ¤UgEíò†V×|¤þD…–„b´¹ùЦ€·®üÌ(gs¶K”_Ä›¸¿²ää³÷!Æ8Q¼¤yìä™a¼ìÛ1^U¦¢,^[¾-‚;øK.-ñEu\|jšº{2ÕcÝDÄ:=€ ?ìŒ5i™&-t Žô…Õ Ca7òÁí–TÈÚ>‘H2•)H|^~ÅÕlb0?á[~o䳊£àCùÕ,á¶ë¨¹¤–Û Àü"dl{òÊpXnt¼ pÅK/ï¥ÑÝŽM:Ì‘×mŒä·z˜åU˜A9σê•y?n‚nihÏi^(¾£ePB”Å5xg!qZOŒÓ»­ö…5h—.ÓÊž}pó잀› Qƒ†—ùåÜI ÜßÕÃ!Y·q˜Q<`ªejidþÎNK¹}ZÊþáEK¼0òèúrþMt{â_'o*ÛU‹« ¡¢¶é[´ˆó3è©[*ææ8ü,M&ãÆÙ•#¯±ê;P‰%Ï2¹•py5½$²y8íâÞÇÈ{FÜlªyÇ,ɤq³>B¾8²h>w)é¥ÅSŸ—Ådh~AºsC¸Ðϰ´ÌSõt7¬1ƒ*¶=ü=’%ë à6Jž½‰ĵ/˜ƒÅ÷B$ˆ "¤_km9ª+ÈÄÿ©—§Îq]¶ë¸£+`àÃÎX~ßtg±¿„у¥gÔ-@—GŒõ(|Á¶; ÞÎïôë»dô¼rüF±’õttõµ}ÖI ªœ÷Ùí-)©bÉ)”IsVŸ÷÷ÕÁiR5Fì¹— ý˜¾ÖùËÍKh3Añ WN¢ýÅ=6iÏ@\¯ÿ/@¿ÿRáâWD³jO(¡…@¾·ØìféXàO·çe«íYRÜ©z‹Äóʧ¶ûÏÔdgÛ@éË$Õ,GÆ$eoãjV!òÝ endstream endobj 449 0 obj << /Type /FontDescriptor /FontName /CHAHEJ+URWBookmanL-DemiBold /Flags 4 /FontBBox [-194 -306 1346 927] /Ascent 740 /CapHeight 675 /Descent -208 /ItalicAngle 0 /StemV 163 /XHeight 502 /CharSet (/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/R/S/T/U/V/W/Y/a/ae/b/c/colon/comma/d/e/eight/f/fi/five/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/r/s/seven/six/t/three/two/u/v/w/x/y/zero) /FontFile 448 0 R >> endobj 450 0 obj << /Length1 1614 /Length2 20294 /Length3 0 /Length 21126 /Filter /FlateDecode >> stream xÚ¬·stå]°&;['¶mÛ¶s‚îØ6;¶N:¶íŽmÛ¶¾~ß;wî¬;ó×|óÇYë·«j?õT=µ÷Ú‡œXI•^ØÌÎ(agëLÏÌÀÄPWѱ³ûacl+G/gea øke‡#'u;[ÙÙŠ;yš@3€ÐÀÂ`æææ†#ˆÚÙ{8þwPý… ¦¥¥û/Ë?!ÿôüÝédea  øûá ´¶³·Ú:ÿ…ø¿Þ¨ œ-s+k @TQI[ZA@%© Ú­J.&ÖV¦9+S ­`nç°þÀÔÎÖÌêŸÒœþb ;ŒNö@S«¿Û€î¦@û\t{ £•“Óßo€•ÀÂÑØÖùoœíV¶¦Ö.fÿøk7·û—½£Ýß›¿¾¿`JvNÎN¦ŽVö΀¿Y•Ä$þƒ§³¥±ó?¹¬þºvæ#ÍìL]þ)é_ß_˜¿^gc+['€3ÐÝùŸ\&@€™•“½µ±ÇßÜÁì­þ¥áâdekñ_ èŽ@ cG3k “Ó_˜¿Øÿtç¿êü/ÕÛÛ[{ü»ÛîߨÿÉÁÊÙ hmÎÇÌò7§©óßÜV¶pŒÿLŠ´­¹€™é?ìf.öÿés:þÛ ªf†ú/ c3;[k€ÐŽQÁÎùoJÕÿÊ ÿïDþ ñÿÿŸÈûÿOÜÿ®Ñÿrˆÿÿžçÿ-ábm­`lüwà\19À?wÌÿllceíñÿïšÀÿ ¨´p±6vüïnigã¿­¶µø+Ó­œ$¬ÜfJVΦ–scë¿}ú×®nkt´¶²þÕóßVè™YØÿ›OÍÒÊô‡í?çø8 ­Ù'ÿW¢©3ÊJêHhIÑþoWê¿aJ¥wVó°ÿËìÔ"ogö?ÿ€ˆˆØ¹¼è™¹¸ô,\f7+“Ïÿ!á¿@Ìÿµ–7vv´rèþ­š‰ùßÚÿÇï¿Vúÿ FÜÖÔÎìŸaQu6¶5û;_ÿÓðÛÔÅÑñ¯¬ÿù¿5ÿçúßIݦp+‹v¦¼ÁßÓ2Ók°r‡ÆÅtûz˜Á‡BìÕ«øWÙuû¥…os—½W‡04Lò|¶z,œÚìËÐŒô`ZSv§/óñ}H©{ P6(Ú9i ~!¦ŸiFy]ÍËmAèp0iìŒ+«”¼CL¶³:Â\=Qû“ºø£“=Úó5M­‹Åè@nA­)<=£H<~z¤ì¾ìÝǣ͉…%çu…@¤ˆôwÈÁÔÑP’UGg7|n=èîi1’éxÌ’zï¨Ân¿ãI ÌÈâjŒ…Å^¬¾QÖÂ×ÊÒx/òs–m&±ê¬9=‰`дxKým°€**×*¤ú»]îÐvÈjø5ÒxÒî×cÅ %o¥äþ,nG5ÿÕEB¼¶9˜=%ß0Žu ã ÏGÁ‘®™‘cú1¿¾[»ñõS8kî3ß7[ù¦¥ä‚–dø%p}l•·wÒð³Cð}N"Ä+ÆùòÍÈP/=¸+Q¦gБµ¶ó£ƒkÎÊr½Y7ÞœÌd÷Q…½ZͶƒ¨ý ûŠÊ«€/YIS,͹’k¹hö»ŽÍôѸ&âÄôõ¢º½ƒ4§ÀYƒßù²BÊÿÄŠWƒ¢’ù°üÖ÷ …ãT:»PáúƬÄâï[GâÊl©…Öá4™U# ™PœOÜÀÎ3ãE‘=`+Y~¿o‰dΧÌÜ+¤XeY‰â‡³þK7>MXÇ¢¦Þ9‹“d”›œk5S”³®õB †OÁsIk¿àxÎ,¢¯Ù¥®qZùO ;½°2§˜oy VÂfèvdÖ(ÒSwÖ‡3µ·1Bú¤"„ðhgàïF#dGxQL=œ…¯=ƵقSp‚:; xÙÔGvû€2u³aA®ÞÌ|õ §‡Až@<ÊÆî÷‡šgv=ö]&á¸4CâÙ:ÐDœàÔv!°šÎMA])ÝøºIAB±Ô>Â0wˆ±Õó¢µ7™‚½‘Ù”Úqˆ¶ aŽô#¼›¦¬Î²ºé , üºo‚ý“ïtȾӢª-Ë%AVä¬k×;®s¥ u`*šÅ¦ïTŠüK C —õ»#Íz@>2²å¨ˆWãëk döÆ¥8¡›Ï—è|[v*\®üè¢EÇ.ÂKñ؇óeñFÕVYÉšnäõ4åPÀ°”M£ôfE->”áõ¿Áz`Ì_VSGaê ¬ÈG ãú6Í,òñ{' ô"yoØÇEÆ}z©UV›ûr£ªÂèÇAÞôièo¥(,ö-qõÈÑ”t| ÂïT¿.³už‹0.õÈ_Æ_“V¢ä2™ÈßË]Ïfió.šf©tp‘ `'ki+?¡Dÿ±TN,C™©^HmåG‰gpYQ+4½N^n9å{=ëÓ¤y·ï´ _îØR²³ÇÕÚn9—ê/âC„HÈrªž¢ƒ¢0-*ŠèÚÅ…”ê.>ƒÜ'¥Ó:$¢íä4„zìEÉßôS&è†BüÖHwƒ¤¹Î‹ÊÄf£œ‘E ük¸ab¬©xÔ³Ô¨Õº3Dj¤ƒdÝÛÂÕÙ:gvÌhv›„9•M äf­‚(sÆâ½Þò¡_3 TÄóJ,$I¥ƶ”ý%c»J„^‹o×FN!ºÝ"‹•0ßÙݳ-J £¤èWio îp”.võ“‘a’a÷5R`CøÌ~];Wµü+hMÕ^ù¯jˆ‘A€–?kÜŸh»Ö?É<¦i«Ï…÷»° D–5¢n'«Ë^ÚõmcÓ­®fcz+úܵ@;kÜ1åZ˜ÂÌi¸ñºp>ÒàItÛƒ3«ÇÌ ¿£ñ¹aO¥­¹ßáAÖ)¡z½%WŽª Î\‡S¦íA Ï ÃÏiÕZñB´²Ä³²[ë1 [Ó|`ÎÚèÚ…Hî4ˆMª¢´çJÐ °³Úa5ÌÔeX:¥ð,Š/°9?(~]=êv“q0L˳ëÂnR‘\ÁŠÓ©|Wå¢ö$°Óì!`ˆ|AÃk“çT#s$zØÅwçoœã¥ËwÃ2ª©ìà)`ï`e¨•.ÁpŽDù ÷ÌxÞ&äççvJšëvйŸãxIûŠÒøN¥*&´–›’ŽtC7“ÊòUR7kîL‡cÍ~ð¡Â˜³h•£¹ êÇwM4‹‰ïåÑ#Yl¸ªÛ-pBÞ߸ßz©“Óm1Nf“u`%®˜6üĈ„ š20ðMÂ¥n*y6,¯Ñ9„†Jÿ~Çmws,jÄàÍGaòù]õÐx~ â”»‘åý0Sqt-ʰb¢Xrg¾êÏ/ÐEV/-Ÿ¯_ †jA‘ 7"`”$ñZ÷ð[öú÷×ÎÑ PåŸ9h-HÒшkÒdû;¥éjÍŸ‰žg´½"µ^ÊzÑ|¦Ô‡s½ âÛŠ“îÂ,úu·vCâ̸¾©iÛ`pêx²–Ðâ<Ÿ`òЀۣ§f«^kî»´˜2¢÷¶ÔK€Ùœ眤KiLÅþ­F}Á=±ÿ2A”äE¸Úkãí!3;j§€¶›èô2›'X¢ªyl#Í~ Gu,•£@,òW`Ê»ç.0¸ÓíinҰ¼ÜÍ2ÿ ó€¤å\Yð 2JªÊDdˆ¬áØ_ë,$Yã ²Ñu!¸8Ä6èM\ðB•„92¾Ì£»¸´¯†í@v_éŒ.˺²R´½T†bŽÁCªSYA¼±W=^|CržÁA.€²÷ŸU2Žˆ×KŸó,x;õj¬¼ž&ô°{ý¨µáĵW•ý¤þV®dÓ§t1ùU5D a¾q6‘^ïb9Y+Àh¨ŸWÂî!•¿TSg‹ ðÕÕt4ĸ]ýÍÔ(\¹-ˆ¡}ð„93)DTâgiQ†•\°ÚZþþ`Ùm^DÄËÓ²´Ç§x±‘ Æ\=t|@>O@k°Ý=Rv=Ðç¾Ûû òÙ#t>9 ÁhMÎÏ$wú"[:¬W4 Éý”bAèGÂFü¬¦«vï…‰/˜DžŒöÙkeÅ÷&»«—Ô×hŒðO³HÝtòò~R®Cp±œm{¾AQ‚„Ù0&éeG:ám.ý"²ÕcòjvƱ²íŠ$bRïà-ªüØ=„4ZÈÑâ ýNvõR3àI€Q”gƒ­3v+…ŠÙ{¯©ÂSü[f¤)Î¥®´qÂ×$Ô™°!%/¯I©¢K·Cùó‚Æƒ®9ð²É¥çpšXNøÔåhåÆŽ¨- —¹æ§Aù|È`cžÕRàþ/|‹êãUŠv¯2isár{á·á‚Îi(ËÔÛD÷Å{éZ1 ~ŒŽo½z2‡–n½ïKš=r<3׿b³+è%t‹«SØTƒuø'¼Ý¢¸ÊTVo]ý1,­úà¤Ë äúËV™‚öuÝ8ý‹|oa»ñ®àà‚o¼È©{õÑAø÷"•ÐO­ÔK^I/Ñ2ë‘õ›¤säCL­¥Žó‚Ðæ½I§ž’³/^Žõ+„0Üü,<+âÝÞgÎå‚$?Ó [Е[§æ“ZŽ.XÁª»QaŽK«l2•Yu>Ì©[y¾«‰Ü uØ“t¤ŸC¾2FÈ Ç.€/]O¤È—†Rßx¨dÜ×<2½Ùûi» >)íI)Ü®bgé!,®1tFˆØç- þí¸ògXÙèæ®^{”<‚:ÅîD¹¯ílv:I;ßY¢ÞDZÆãÓ\‡„žbºËuµ˜‚¢[qì¸Ø£±(Ý—½I´pœ n,96º®sˆ6äöti¥kø×ùw­2Eîi!™÷ô ú5©f²gía,u…ô£³u¾4Ùn‚”3ûDw‰ ;õÔöÍ0ìD‹”ƒ$Ør/9Æy~ÄÝ?‘8laŤùc;êçgäv[ÉÇ]^ÑeN¦åÞ¯öëPøˆ´­˜%ï9¹r²p‘F(G0Ùú¬‚HÖÒ{;òYˆý|7Òó€7=5_Æ»@’u¸LÓ¦ßZžîg~ÞáÓþ„^‘>'¶œ|5yŸŸh!óK@w¾ÕáêÔ†®I}¥qФ ©¦ò²»¼íú‚ô¤z³PÏ0òÙµK¬t¢—>’zßx´¤0â¹Ý2È.ž½ŠÙ§ùÌ :L ET£˜Q~FGÎq!‡AYVZˆ&[&ýJÊclâ­¯(¨€%Û1¬5{vÜ”±Ü8ÚºpÔÀˠ3+‹,ÝðG× íýªšê5Dq†C+¸h5s·\ üõç÷î4]aƒ<7‚dt>ŸŽð•ì<á?n˜nÙ|j}CLùßžÞW|¢k‰·ì§XÚcŒ‰ÅØó×¹ škÿޏ”Óc–aÊl'麗—gWû”(ò}Ú)kª]¬ zk'åð©Zçë[ÂÂÃ仨‘Êà»Öç. üÕ^¤V”ÙxÊZ´ªL/£&‹ü·KíšCÍ”»×Ê~|ž>Çà †Á½©rÄóËéX‡|-nÂè˜,Ä ±¶YoÒÈü¸û¤†`ÙÜ!›ŽÐ#{+_:•![7‹½ºa÷¬MiðâÆ€­Ú°QÆ5$ŠàÚzp€IHê~ÃQ`´”>$d~¯ò°ºQCLry*?áJwß·L¶:ßÁvë¯÷µÔ£PR×*uP%h(©¼äV³³g…¯êiZW;_ù56—œLñ„…ÇMx;ùœOiïY † Г<ª´åˆâ€q]ª°i±­T-@-Q¤kjjˆ‡Û…GÈO1ñ qùkn“um¾½¡M¨Yv–üm.›7þ±´Èr¹¦ßª ~P]wìD%°&ÊŽJQŒÄQZ_ÁZé’iÕª¡C{ÓhŠÖDÃZÜzÓo±¬½ÌOq„Vu»•7Ï£ü!)u¼`&“HÆQ MÁkÅ‘°ìêÓ²OTn¨½v¶Ð‹\­À¼êfx›D  àG3È(sZ6Öx^TÙ‡/^ØÊpzWØ)²î‰=ovܯ¿œN¾z÷g”ñL®Ëä ×–_aÏ|ùXPiýâ=H%-&݆Ì=Œ^·šÂ„ŒŠRõôw™Äe¥&ËÌ„×Ø33Ž[ ¹n™›nNmu152Á«3Qce]gàpÔ­PØç²6ôÖmpŽÜT$—½Àå/ ¸ß„ê­çoÜ×õ¯Ý VJfü3Û@s |Ç2x~Ó“eÖ¶,=ª¾ÈXƒU…Sê,uå ,ySxEWIÎŵäëGlL dR¯ ¾þGkê!Ü*Ê` Úþ [ˆå¡a²gDÑüú¶Æ+Uw Ä kc@z`a·sHiV_{gs¡’ÐxJêºÝñ ú¾BÐw^òlŠÖw÷kmÚT+D‚b6"™h0¢ ’@kpõDæ]Ý-WÇügjÝ˵™I1¤,%êïºßœì(ò¿ndú§>Œk‚ûtD]-s½ìŸñUÇ ¯2h4N#q îŽÛÐQYr\z¢á²rôR&H²“I‰ú ìÙnf3ß­Ž…R©Å^ ¿Ã¾|´QÔ#*9MÒ¨>)Õ”hÃ-€v>sôÿÑð$AqT™Y¢±É†ôôýXæ}¿ Þæ3ê²GC4´a›’œf…#ÍÑ-..ËŠ²caï \áæL¯ûë×Ζˆ•mŸƒÛÚäaq‰ù21hf–g¢$Ÿ¼»£Aü\‰Ï£%}C©Ã“„Ò“‰Î×C v´"ˆØß¶ 3ÿÀ¤”ÁèˆÛ™bßi´üT ÃáÉm<‹Ï HèÒÕé¬ ·ôož鮉<|ä«b+|*kU|¥}°x±%˜gEÛŸ&“\˜ÍV­8Â¥KžHЈk‰›Œ+öŸøÙ驱¬•­œ-úm•ÐøäÉÓÞýÈ$ Ç×þÒS©‘dˆŒ›B¿6IxT –—/v~C›™X`@HCW¯X|ØyÞ_,ÁÓ@ÐYÈàfè€ÝfÌÌ s&õ­Ž´"’Á’`ÂÂlFn© _":Üï'ûõv«?ZtäèùЃÛ&ùr÷çd‰½îùÖükÅš´—§s­Ò‰µy:FߎD¶ÜÁÍ+ßî§ŒY«o7òsëû •l=Za¯Ù!æØ‹œr‘p™~—]ñaа:Ä,ô2ßÂ&K£O]’ŸÌ³uÑ‚FƒÛÕ&=:scZU)k¢·Oˆ:°l_{; ê3ŒùÐÈP[œÿ*0¯T­î÷ÄÃ4SÊ ñU"„ÊÚ†‹§g}¡†~yÈͧ{b*‹·åÔ¥©þ)ÛÝÉŠ!v¹’uy¿WÆÜYÅÙŽõ•R’ñ b½mÅ¿húú‡(Ýj@L˜È±zà¶ ßZ'‚Æ“‡ÿûŸG¶*O‚™ý2|ö.SÜjYÕ°¶Ý‹ÿ·Q·z?«¯<çîØÓë_xŸo®f„~°Ý“u|nJæ8B ‘ñë°b¿¨_m~å©tiCn`cO ô>|”©²ç·’ev7¢3ÜVj'ÊnEø¡*8Iã$ SA‚×$—ù7âŠ'oÅË©¥}&‡JÉ®HÖz@q¿S&¼ù§SÖEP“†’B)ýÖ9áKfôìÄ¥ˆ×ž\vÕa¶ý4ò0¤/{æjqkå œÉ—·ß94Ƴâ/^à“´à^ ˆÛ† ŽŒÅ‡vVÙ‡bWKµ[8ž¯ŸÏkjü)öPôZkñ¶ÒÎ,Ò§ ,¸ñT’ÕT/ÈFO ]o=è ‚ó¡‘Öùî0ZÚk”/ §Ž{„dÃ[Œö?®š—âkz’S)×¼*²Syu¾^Ûý5wýzR¶V{•ü#ºd·›È] áwþzýÑÊó–‚ò#* ‚B9¬+ƒ Ê6JÉß­·LÚŸ¿[Ü_›ýÚÆ1O¤šOýþøöÎc•=Â8B×»=»?µû·ßJâR½æ"¤‹6A“ŒV¡¤a“˜­ˆyhm×};’¹,×EMY(–3 /?[n5òI޵÷ÓH<È÷%c¿r <æ;ZcŠ5¶g†µë ˆ³ØË¾ß¬Õù—b¸+š‚®¾>Aµ  ‰©_§µIjG(_šÞ&Î „;sú©1ýù-TÑÒ^nÁœ @v¶q8|–}ó@y KÙ‡|+ÚÙìjíÅWcÊŽü2ÞÂêVXGÒhÁšž.õ‰?Ñyª:Ñéݘ‡4†¥oìžËÉô3Í+xý¥g¨Q2Éê …ÆÞk‹':óõ^¯›×îñ«l³¦²‘õ÷s„°½zAT%°âëkËûù³Ã-îC¡[ìP aÓD¾3QGÀ2Šwôî9ÂáŠ;vÝ'ÔÔ!F%­îTøârœ+2ËÈvÆÒ¡ý¹[q²Џ´òHã„”4’AøîÉ‚"!g:úºé,Î9Œ¡í(͈Ÿ2‘ÒÙd@ÚSù­ÈOê#Ð#уÛü4‹æ°cÿÇT$”Jà·~öç~jÊ*¶mEÙKÿµÖH”H¿ÃìÂáË´ÿœy‰YBóŠIXv¥è\xXVÀWÎÁ ú–Åû8.¾Î·C¼ È8Rư–ôí–ùq âŸ$õÀ‡Î•|7•Ll;F[ %VÍ¥96&¨ÃT™í–ª†³9×ÄʇåÌF%fö‹jJ­°8??Ï,Ù•’l[TÂÎC®C9‘‰b‰{X…FÞaÓZUUÅ燦¶ÀºøÞS] WÓe¶÷Ä W 0~ãÖ|Œ·cå0²Jcí†ú›«` œ;^eÁºÓ®ûµ’dÍMFVA¨-%yqÅhÈ•·¾lãlái¡a _ [EÑ+=%*šS Õ_ŽÖ¢NŒÍ‡–ÀiÓá¾*û }tAj`þ·î¼…¿ÏÓ«õÊkŠÊeY9ž?Ĩ·%YÜ…Ž•ZjèBG„‚+mùX¥Ü†¬ ~˜ÊîjiÒÈ}…Ò³µyª€–ÿÎ2å·xÄÏÒ% ±ë¨ “YpzÝV»«í„Î_p±Mº ýøñm!çüFGøƒzÆù¦Ž±(¡&õª¿©ðŒhTY8»µÏ¡óˆK¯èÂÍ dJžLþæÓAü½^û9TÁ¥äþJÂÚþÔ2qþW͵$èïoF" ù^'e¤PSmÕà ©å¢Ä™›vö£¾/ñÙÞZ~§ùÛ°ð 㲘QiƒTèè~ŸÈ…U‘ÙtÞ\>cruž€&ò²­ „".åÖŠ±‘T:ݲã{ŒjÛ"T,HV¤,e&ê°à•wWæ5y|Úöw†OÄIämTÙÕ˜ jæ¾9í¯Ÿ«bûýÂÍAˆ7Ó+1Ú ñr„3uœg9gj†ç‰öà.T –„)]èß=ÔásŒh\ÒëºÄŽRâzìk6a‰ÝôÚsÞ‡aceJ#Ž{«-Ø >‡Ä½aà‡ˆ#otØ\§·N:‘QέPºég Æ[|ÚUPÙߨ€Ð@§™dà‰ì;õ.HkQH"ñ‰#âöà‡Ù®7¨á31±89ÿ¼­^ù¦_ÑÐ6/:”óU]`&Ñ÷¨EÊûq¼Y¤±Ó¢¦5vm{†¯Ãg§ÍfÙkWë¢Ú¾˜ ÷7,YiìÖ5.»b Í훀ûö<àöá«øÊ…!Õœ³‡Ãk]¢^nï[±3­‡vúDÚŒ>ïànxÁ«ÏdqŒãhêè3Î?¶æ²oÞãÒ¸/Qš’¡hˆ”â~²,¼€)➌ދÊœ™c=ð8ïÎ Õïclĵ"ê`÷³Ìå`¾<”û4SYjÒ³Ÿ²/TB³yY­ ØÌÝÕ¯`“yšÐTÿš{³–’rYãVÌ-$Î횉‰=©æX”ö¨MžÚý„%ý8»Lé“Α×2£–‡W±ªÈi!Û©*ñVEC@1¿L;†‡A€‹”ÊË!3- 7K?mÎê»WE0pì\¸4ôܯ»¨¹˜#â¾á!ÛÑòqÍà½×„\SŒ<:.ùøÃ0TÙÉçRjtò™±Ì¬~a;Ù*Ca Óz™š)bj¡vÈW­pæâæòÛûÜ0YGÃ:Ñ v©KEÍ—3bcò¶GÏËGM[;‹IŠÁßÙ¼£ŒS~múŽDÞ}.‰wšý”ĉ¬Þý°{׈ ¥,c¶ŽJÀi^ ,=` |¿pÒ‚-;%åFarѹž±ö-döû#ëüQ[ê±`Úù謊b•¤áSò±8˜QÕgV¤õ€L‹.Ý3D£…™éc†=‚$Ì+Ñ8wJåÆÜ ÒÇOmŒmAr¼—þu¼žïcHµ‘¥C=ÃéÈ$<)`ù+èDç[ô@~׾ɢpŠž³Îˆÿ’‡ÿú¬;ø*®ß§V²lk>¯oF8“Ì1ÁXî7ÿα©)eö 33’Ùã6”#­~ÀI¾wSEs¦ÄÐH6cK ¯¾Ú:ɼ›Dh÷þpB(ÏVåÍ;ûZÖœB‡¥v9yî»Àâoût£=$HµõáGá¸Üªý§@nëDGd ês•>[Ý“ñ.hлï.R45èä_P[»"<ë,h> tÌA¦_€ÆùvSp–J¦Þ6£úĹ–>æ+璾Š~{=ñÊŠ¤ò§:$þþÚ‰,fÅàÛóÕ˜³+Å©ÿÁÅn¡ÆªöÚÙª t ʼn‡Ø/9£ñ‡ ²ôºÃ7}ã*ä‹Ðê/½LtÎûó¦ñ:GÇ©´Ž¹›ns»~Yöû>šlª·7u’•^ï¹Jü‰öÜäo枢+sðG­Šæ2‘ÔyH­/üñbþÁi%±wZ&«V‘y3üÝŠPKij¯<{QøáµÚSâw&¥‘=³-¹æWÐê[Ý>q…ixÎÿy¸©|Ëw†¯ˆ‘Cù¦àÀ‚¹Ïctc ÇqYÐ5Ç|uñ-™R*…ÇÌêIC­##kWñx¦„9;¬XÇo !¸â œ²LerW‰$[“±ÛBú*¼Ë…lObºâà‚ÄGÝoõäQcŸ‚áÄEÔR7wíôÍŽ>gÛû/)’ÌÂÌS{óØä¬¦Ø« ¾Òý´EŒ|à†¾Åh¢BLà}QL’y>#E±3tŒÜN¤o3Ã*ÃÒYj îò/?(ãF‚ú÷ß9 ç@ÔuèÞu>AíÊêAMáZ"Ï.)ÒºˆfßõSP¯:ArxÇLo¦ÒSmQ¿ƒÓ¾b®çµû¸j 9äÁë¾¾ôÿÞ0ݲìß9Þœ~µÀ þ(—\è/Tn§-”o¯2#¿­Í(qeÄþLv'â }ÜHÓjð>ÄŒ4+{†r‘žed*’º)øUjß»aÑ0ÐÕ+»NdÚO¯²r9¼ñêÙ¿|iúä÷hØ0‚(ð#¶ŠølxîÀ§¢ÿu¤C¸Û —}ÆzÖbSóS²O³AnnDŽF ;ƒ&NÄúÑžWZµ—àͽý–´Šl ä—åàܹ¶DË”·ÐöËfbÈFŸ1s=Ú–Ié*/ÂL4rS°¬Lô'™¿C:]µºùS4´‹Ñƒð‹Æ¼`î¸ý^ÊdÖw¤láÍDÞqjö5{Ï{(å+Ÿ ²([ÿC,Æ7ª¤¯±€È«7Ã-Ò_K)Óeü.7Wo(Œpòý—Ó÷u“˜}•¦Ä¦Ëtø›äx0u9½„ûÇüÁÉû¼oKèNG*Ã»º”^)÷¢Z]¯¬>³ §SÍ&¡•pУR.{öŸíE$ªxJO¿™lü$اmÐqæ ÜP\îþ0áš½ÑB$®,»$PjÿÒøêÑJwÑŸ€~©ˆ`dyYä:½âî•N nŒ!Åž¢ú^¹¢BÊ ºp¼ sQSã¿HÎGÙh3"mð•Æß6Z`xA]„dKš>àÕ=kßc^È0Om`ü»T.Ü=aØzÌíUq­µèÓOF–MhûáHï„ö›ë¼ì÷}‹Ã.yµ¸«)ÁâuÓ”éév»CbÀ„s¦)Ø¥Z(,–TDþ0£$ÌvtNÝ4.-8‰Ë,x`¬f(ç ˆïHë¯ë5w…àÁ¾;Лy!ŸsåÙÌýœÐIâ³?Ž#Êh$熓‰Zç/vÔùR[[á¤o«9§CwAúfÜu.z×.O‚ìI¢aØTJ|œùsbWhÖDf©ðê½Ó=/rÇÕ†v–i©h…™}oQgÇ*®M;º;›ú(ü@f+|QÄ»ÒÜà-7!ÿ§4—òf뫺ÕÀ•¢Jçv9õ ?Ý“ŒÜŠ(~JbRó(Ï?9Y½.GÉÆ¦)*6Ä(¤tZ *›@SY‘æ¹¹- 02>õLÅ l"ÐÉÊéû@»¨ÜÊ0ôh´†·UâåÜèsÚ‚hð ÿ |l+°e'Ö•¤b ø ù±/H•»†qQŒÁúºŠ ×ëèâ·~ßiðÞ%fX—¾® ó'?(gPÐI’‘ßhÜŸ¾‹fŒû åRQ}#O_T8nP«/¿/+´h°,D¹–ÿѱy<¾±€‹Ö®M"WÛ‚ÿ“ œ˜‘rNžËð9šS3]]šJ Bö1¡ºÔí öúÊâü¢¨½´x8¿:ïO6SÝvÏÁí¬H ŸÍQœ™¶ÿéh>„Ó[ãM(äI¶f_^!•Ù­‰»›»Ü®ï×ÍØT» 1Éj £â¤,Êæ¶Ð§ä¤˜×±ËBÅ_”ªˆ¨Ó?"?ç¿bñ2VÐq~¹¥ó¯Ž'JݺAÌœóë:ߢ+~&=eªÄQFt-;BçDÿWÍJ“EYYbüàB§MÔj…ä2h…_àUªŽòü3s_QZ8dGEûê"EWTÇ(«(†ôwŒèÛЙC‡¥T©m³…ï*í&ˆÔUÍ4Ç*îB•÷=‹§šµ- ˜J. ìå¬G´.ú ‚Z: piàhÕ‡µS^ƒ2þ¡›Ì'ž[è&·*H”zR‘^¿¶ÞcÕí*ëhlÊÇìr) \¿L²_óal±<ö$ˆÀJ…F{ñTOÚ Ô8Ä%A”ÿÔYûѵ¹¼bB3tQûĉUkÜ:¢ ¦M¤ßÐÅåíÄ6‡ ŠÖ6-+"Ýŵºh.·Û5¢¤£_³­M¬È•u4ÝÒœ!2¿ )VzØÈß¡mW}þÕHa=Õþ¶18 \ÞU+7Â߆_7¾ÉΡG¨ÿ÷¥¾ûÒ|dŒ°‹ƒ¯ÎâN?ú ÏØû³l¦BìéQBqÈ¡ú¨tø ÐÖqÆbÕ­8èÝs›Î\«‹#(YÎí3ï7Aˆ îd`ôvwÝËíÈà û`(vi“4ˆ’r]¢¤þ–¡¤‰ç¦æŽ3ZÕh”'KE6CÒ&zýzŒÈä–„%̱13¸“ƒ­%i(=«Ì<šÓÝøË æ‹-gg1"©é<¯,«¼ôä"²juˆÚNM±^âRÛïÁôÂòE¨®ÁRÆu]¶²öŸhÞÆ&Ó>ÒZ]¸(‡x5ûAÛ[ *C#íeÕ¦•ߣ¤¨.9B,¬¢¾žTþ­ÌgAK ¹ýŠA:ºs5ÞË|×.o[C{·ìbáâ· ««* vc»¥J–Šc–U¦µE™9¯xXÏF ]UÀëúê”/*aÇîVÝ×’Ë X.´÷ßpÌ,ò:…cí.±ÐÓC8Œ;†¹`œ$9¾˜ßÀæ~*äVÞ€àçOFu—ß[ÝeüQº¸3/ö·ÿ4nù^¼f—v,šÎú]¾ú”Î…,©e/²“²i¹W¨,çJ»:(7¥Ô©á§h6¬Ä…>^Þà ¼ÊRïšö+bÖóò84ôñ@HH°Õ™gjè_½(Ñ @ÁÆT¸—´^AG}ÎÿlÎr Úý&…ׇÛäPi/Öjžnˆã™H ±3-éK·PþªîÛP/`°‚7;L¼qH‡Ñ6ÇúÁÊ?+@ð¥¯ÓÚ¶R_2ðº<Æx?SÛ€¼£/)ïxcÞ:¢sÿhÍK|%Kæ%ä.D}Á7¢J Û…¶9›é Ãw5{üµblk¶K€Æ`R/æƒRã| 1q¸ÈŠþ­ïþ˜Ô^.W72Úš$«W%¥æD= ˜–ó-VMH®ÿt#›e1ñÆS%ž¬eUÓÆZÇ ^ýË©\†·T4×”3•)ÁìÀŽjTs&Çš!VvÛ!:-ù”ºÌüåõ¹è."VN ÆÝ w C{Ipñדålº2¦íy|P!þ9‚\ç¨2‡tAŠ>¿^¾® [·H~+,ØÕa_?jèÊÊ”ƒ!Œ2R±Üìð¬k‚Es¤M_î™ñéë@„•R>9ÕJ²æQÐ:·ïÃt¼EàݰìÅŸ+W„ Ñöl+óëYVìäŽn›6ßMxGôMj¿t‡V›FÃ{ ÍÁOVdµûØÿH*ìË¥•K FàªE?¤Z|÷¹—¿Äë· Y°(IÜP$98fWSGzü³…_ºžÝ>EQâòs<ªɼp”N ë]&~u`ãä+ ô6V±ôËH)@$ÏÄÉùÛ'{hÏô›dÒS†[‰[-³ì›× ¶^>UOHX«»%š˜Í 5ä§øÁ±}×'ÍãEÌFD?œî?¦åjÏ?Ì|¡€\"—“•Šn»F2Ì óu±,ʼR[[„éJ,¿ùH%Šl¾™vŽxCÿl@j†E >²ÃÌqGø½'‰z=ÄÄöž72öâmïVUGï9‰0š—=ÿ-éqÚÉ€—ß[>UW¼@¥Í,‹†XƒIîmP‘ûr?|§x¤78ÅŽß\pWšÇJ?›g¬VfóŒá  Ç'h:NüŠ!ò-+ei_i5æÂM©ï·7Âa|mB«K¶Ïéw ¶e¥ƒ\¥H™ü æðö¢9žn|mÈE»Â[»äœÚÙyœØ­YÃ…²œèH'KÍ =»ûëÑûÏm%›¢Ïtí\²|l¨Ï×ExÌšÁ«|Í~ê—j·a½hA ÝOø}÷Š`ašÀ,z£ê8º—Ú#9É/wìP”É¢ µèRÿßV‚ÞXã¨6ªj|ð}Òò5M Â6¸KJzþ–ù5ó`þýN„÷á©AÊ”¸7:¿SãË~êTH!sj1Oqë¥!Õüá’“Ü~J·Þ¼19?Aj*]ŸÕÂ…O°*˜ã ƒJÎŽWéæ]D)sí¹¿¶2¶Ï㶪û²:¾w@øýK 2.cÚižº·—Y66Ko‹œÌ:Sìm/29ÔØ_l@W—k±Å4ˆr>5pc¨rBCÔæÏy²ûUGþkª ´¢²ŽÒM—âZ#øÉ° áà ¢Qv«w~@úâqXIØzûŠPÛßtÇ',—Á!ç ÓvG`A×zh•€~P Ð 8ø E|üSr¶ÕŸ å‹¿æré)ºGá_´§Johh¾ÑŽ'ÐGYnðÅ!æ«.ï_g 6˜øÈY´zqÿH›»®!ڶ窼|½4æJÜyT')¯K }æX>Sü÷ñ®jâ¡–Qæq”˜ã¹-l«™äÅ<Œ"†)LÄ:¯<¼’s©Ô§Œ^Å57î„1žP?•ë‰'?1w56…§¿•Hƒ¨ÌT¤ëh¬åŒ\+›écßHsäïÇ1膑}ræË‰¸•óY\ÖQæ‹Î"(µæ,g¤‚%DšRM –Ðå(šÙ?¬Ž˜k>bVÕao”ß[#æ§sÙÔË®ÌÀ©í”‹ªhë‘Tag…ЇHÔÑ® þ5VóƘ‘ÍϤxr<ò¨rw‹Cå¼ýM"pê1HÆ›]BˆÌ¢A_W¹<ÁWtÀ Ž"ÅÄóõ*fdS. QÒŠŒC‰n±uûM(DGÿºöC3ÄåçïqDN²w^§áùç=õïDMi’IÓß%Èzðša¢=eFëctì ·”ÍÈo@Éuy°<›yÞ‚ÀݽôFÚºèÔzÚÉÔ-ð P]ɾþY"¥J§,ÂdncZÌâÜÙÐu6lT–EA‰%­—²äo”ÑùÆ"ß(oµôO…¢ôðæ7r ƶ>Vd½3Çw.uæø¤å$ÌøEª^t8ØÛ*”墰!ˆ‰"?Þ>Ã’QÑ*˜å^“,¡q~V•Úa¬Ð“§í%ÇÐ&·Ú:dR×èµ¹'اÔþ½ˆC@£µ$¢‡;#êÞ´‚5\oØŠJ/Ðý”ò‰‰¿o#D-2‘Óº4é.Fì¹üz…î"ßSš£UGbð{«¹kSÊ:bVÛ£¶š8@U‰…¥ §ùíÚ6™°}6ÊÒà£Í´x‘eß™’}) ÔÑ>µîøÀí©»µ!ÿ­_Ø4*ö ){€´:ðmΓâÝ^¢íÏÈ_´ðöž›ÊU.#Mø _Œ`cHBo\g:Ïxdèÿ™é§1­ÄÌ©p|gxEã]­&^ˆÝU š9щ垻á2¤ÂÚ>×¼_'Öœ†{ó×#‡:LÁކÚXºz”‘—Þª]‰IÊ[/5ÆRW±Ï“E˜|Áì'L¸ú¦“M%¿rûÈ@J.`ÔæÌÓ¨;›±ú1©Ýmrqý«Ì ÔúXñ.Ã(¥ÒKƃâ¡G¢s´éÚxg*ðÜ7Yk0c\ûV`‹rhïåîk – iß× ¾±’`Æ>è?œ|f[ÕJ~óïÞmO䳡Ö”¼0nÂßý<Þ÷)d çØû} "s¨÷è‡èR5e†¢`¸L{äÿ)p|ž^n%5+LÂzñçþ‰ÑÜ‘ˆàÁ­ êfh˜Ý‚_Uç'³. y™™á»°ÅhgX¬¬R²ÒvF§³ËÂ~=üØë»,I…S•ÛüÌÐ ùŠeå&Xù÷|°£â»½ZÅA»V Q|O4z9öö$~G •Â[ä®-,"ð¹ÐI¼æÄì?ˆafLñ }ebÅSé4t±ŽžÔˆÂw­|æsÇò¤tú¦F‹#p’·ÆÛVíNƒ­Ùš[iáÕ~J…DçBðB ë´áå%›ýXâÒQcïØ]£úƒôÖPö!Í3û‚2Ñâ\ç:å_/ ‰?ЯÿÆã¸¿2Å„¿å÷êt”3@ü‡?J‡½;…»ä…„™iz2¸Û¿p ÔvKÎXÕ°_ J®fx¨Ê™êL}ev\Œ÷W~‰¯´G_> ÇÈ~H 0Hå¶céã66Öo¾—’öaäÀyÆšö9c®Å9NA×ð9†Žn… r†„… Þ]w¨fv‰BÏiÉÐlË y¸ù*œX(Écj¬ÙI˜õÐMAéeõ²<Þ£T½n2Ô³žPIØ~‹ïš$šŸ`2uj²mžÏEÎRC ïqÝÆxs¯[[2paA¦`)øþvç­¿¼ôW˜5&îú®@Á$S!‚žvÙ÷+“à=צ€5ð vZ>‡ C>3ð*§wèNœÓéefOÉlSÕ‹QÕ|ªk†Z·–Ɇ×,¦¿•žOƒH]­ÂLo8÷²™Ô …âªèþª¸5Ø;è âבømøÕúÌ Ëõ#ƒ%T˜ —¹tâ­ÚB†;ÛWÍDº¸sN*¥Í駈§‹¤¿{j(3áÃâeöþäžÚÑL…L'±pBcR¿fúßø(Ùú3Tz©«ì~ì;yð)÷tÐ'ÿwŒ5A”IÝä²`8k®³a‹.ŸÑ!K¹óì‰**ëLLS ˜|6p~âkkãëÉ0ìèέúe^XUUÞhæyÅ™­â>¼¾zµÚ\@RJU } *(ZùWMc‘dÌT(AÔo,ßi¸¯01¾Ôä2é°Æ„CGRõ'ª‘/¾, Õ Ü®·M†~¿š¥À#Yvä™ö„V“I‹ÎÙ`ÿäI~U%c¶_I`3‡ï ÍÛ˜…kí¸¶ú;}¦&íuôE5 ù 3ÓJð|‰1þ3Þ€È6½X%]åýi’ôFUÞìF1-†Mµ¶)¬fžÌ{·v³së£ ‰=úM{„zVs—}Üsn}•P’2™‹E„šÿ¥c hfßs¬õúþ¡ÏÜ–áhÌK¶‡÷¡“ï4dŽGî`WÝ;êV¤7û‰wIæc¤ó;Ÿ/åÀ´´³èb<*(cš†Üd ]¾UÓz$‚jmL¤ÉtI;u7ï†Þ¥ï±^¾ /\ŠV h‰MmÍÊE’îPŒ]ÎäN“À•¥ê«>eÞY)Ë`b:öÙé=M³²¼RQPï!;P~Q gt®Z(,„* ‰ÐÒïá‘?ñ×Z¹¦3[Júá;(N(|£ÎƒPIøæ%_Çææ¾Ön‹sˆ½¡ Å=äᬚ‰+ûc6ÊàFxÒÌ‹û^ –gÇ'äý4l’Íý1œ.u¤fP+¿s¶ã Ï»ìEêY9øŽõDeF…(ò&²5)‘?·»È@vr5‡³2"clÈ¿vð)Wæv}]”Pë¢ÆýK“§P 3RãhÊp÷ ëæl¥¿½u~6ÛwTi±Lù­,ë×"5ê²’ÝáøÀ­4|œô{`…O¿Ñ„ÆÑüÔá‘b!~~;\ }j—C•=$€í8FÛ-wœÆ]m cž»häàœèhÀ›º?DDÜ7‚;qm]é™›a´còÊøÙ‹]2ašiðMßnírh{»”d2®¤Ò¶ñ@¿¹ú…ETé" g«ÌäC+æbéT÷Ü‚åùFYÊàcĹÂ*]ýÍEWŽT®(-ÊÌ¿.’oš†YÅè|ž£–ú©VÞ„V}>´Ÿ7”@Ÿ£¶7DkÖØ¹ç7—AO`¶>­¬ƒ÷.»UUš'Ÿñ3ZûI.f˜¾õÍÊSA­üšŒŠ­™p·É_H#ziOðaØŠùimÖw’#M×$¥û²a &4adtiVF$óŒs£µÄ0M…çÙ2Íâò7„Mn^,¶QÔ^”(|‘¶‚R·³BòŠæ·ýEžN$ıÆðã’þ¨À4·.”¾µjÿbãC|ƒgŽ Å.lR¨‡hѶ•Ÿ‹àÝTmLt%jf€l¼³½à–ž(Bà¬]eì…Oœ=¬âdï9„Ûº_¤§=¥T´šbþª¬4Íù½$Eùt"•}_ˆ­{ì XŠºI.’áçº_w8† JÚöD¾ u¯¼Ë‡j¨_©¨S Á—p0ûv‹¥<¯ðØTèÐüϼ‘dË“¿ÿ\ä„Y^o¢ »ÅŒ¦3• ^’ˆâ'’êâØòU`c²1a«ÏØWª_™¼JHK PM÷WP"BXõ6g·ž€Ÿ_8ôr<ø@Ž=.ó½gÞ ö-™–z÷ï-Tãód…Mük–kùÆß§c‚,ò³Ö;!=!ŽúÞb˜OiQµ+ \uÿR-¥ð‹²å¨¨Þs§Þï’@I±küÒå«· Äß^EG€²ìMzªk‘Éï¡u#mnÞ@îà6BŽ—„¨/´0ž{"§® "ØyMIÛãcPTb+X’zf7(µ£íÁù-˜³èG nvúêÏ °îrü·‡$|4QZ€ÕöDøÿù‹3)ëå;ó ]7žBh˜ç1¡ ¤Ï´À˜t„´Ü0}%¢(\IT{yNs,†$)á«+žgp¦s‰Ç.S‰‰âõûªô×A÷wÒïû”Z§ogõoýqbÜ\n‹™AM&׎aôl×WqçÚk•€ ΈpoÃÖ¡ì?4#焘лy\ÎÁy— DGïÞæ=ðŠIñ|į(R¾-J¾¹öëæ¹`/®FüÕ,M«Ç¹º(7¯‘ó?v îÝ­òÿªCnß¡î¦=(Ù$ú@·~|É™›ì뮂+k¶ö¿QH8¬ ÕfŽ>¦ùÍx×ÒÓ”¥÷äATPÈè•éÁÐΦ†@Îæ-æ.¼æjLnÆjKÈÕß³DÀñ¾è±é'1ôZD§°šêô+Óšu$HÒ çJ ÷Á.À˧m@Ó‡O3™-ÎĪªðÜK~õ¿Þž`‡„Ý2R4‹¸zà)¬Ö:îâ¾DJ}{P•ºÍ•"ŽÛÐ"ð]Þ]µÖŠ„Õ2îQ»`qŸ±”ìë»y: qW{*1šYæ_ѺùUì—§éÉçv}ü ÀÛBÀi‰:l1GB’2®{Ñ ì1‡à—z~çV\vÝ[î2e?µ­ïB›[Ý`û ¦sn"äÐ:oÎÅ“‡Þ×ÍÙrX€Fâí(ÄömZÏÕ#¼®ª¯AT›L%2‘Ó}#»ÜN‘éʾ¼’Ù÷e¨Û{>€Î"ófÝÿñœSüF‡×Ô[qQ²?pÉ­Ê9@’í¹½¶4nPŽû Ò¨éM Û“(5§.?8ãDô½`E­R†9dÿXmwî—¬TsTLP ¾DÁG,ìTµÂÑjéÏLnðo ­Cƒ_â jÑ·VÝ> endobj 452 0 obj << /Length1 1631 /Length2 10993 /Length3 0 /Length 11838 /Filter /FlateDecode >> stream xÚ­weXœÛ’5NÐà.»†à‡ ÁÝ­!t#Kp\ƒÜÝÝ!hcÁ-Xà’sîܹóÜo~ÍÌîçݵªVUíU{¿Ý 4jš’V   åàáähkèJA væ`eeÍG¨¹=ày‹ÎÀ í 4‡‚ `s(P  ´È-¼¼!!!t€4ÄÑÓù% `~¡aaccÿ—å/€…ç?‘—H Àøòà´‡8:ÁЊÿq &€~¬Aö@€´ªš¾‚Š<€Y^E _šPsµ°Y”A–@° ` qØÿc°„€­@µæÂùÂ%é0¸8-A/a@K ã_;Àèìrqyy€\6Îæ`èË@!ØÒÞÕê¯^ìÖ¿ rt†¼x8¼`/dj¨‹¥3È xɪ&#÷:¡Í¡åv½Àˆõ‹§ÄÒõ¯–þÆ^h^P¨9ì€= å²¬@.Žöæž/¹_ÈA—áêÛü«v€3ÐÆÜÙÊèâòBóÂý×îü«OÀéÞÜÑÑÞóïhÈß^ÿYê´·æDçá}Éi }Ém£sý5- `k€‡ûv+WÇbn@ç¿7ˆù¯™ay)ÂÜ ¶÷X­Ñ¹T З”æÿ™Êœÿw"ÿHü"ðÿ‰¼ÿ;qÿ]£ÿrˆÿ·çùß©å\ííUÌ€þãš(”ÿfüë¦Yþ1æ {Ïÿ&êßuÿ¨Thãjoîüïð?Ø%Á6/ªpðps¾ù‡ä"òZ© –Öæö/ö·]lt¶/Âþ½§/A¼oÿ Óú²´ÿ¥?÷ßlõïå¿hõwñ\Z*²šZlÿíýú·«ÚË@µ<îÿèèÄê?IIA<Þ¼¼‚^A/¿@è ·ï“ôo"ž­?˜CACnNnnÀË÷??ÿZÿ,Øbõ×ähBÍÁV/ÃöŸ†¿`KWgçÿ>ÿ/}ÿsý÷Ø@Kô¥ˆ¥H°mjF´šøëฌao7â`ˆcqVAž%¤ëSjø†P™ÙcUgý¤ðs‹çü¡ãÓŽ"ëîp7‘=SW2ð4—Â—Ž¥'÷c›Ûn —I1VÚ‘n´÷¯9åu$~nÝÍqu “¢GÊɶ7ί~ݰøÓ¹åùÐ_;bûY¦ÔƶãÔÃáUç1&Ü\3õ t#÷ì³eÇ¢1ˆ¸!a1Fù;e“‹è¨)iãéZÞ}no(è¦M룀ž[zðõj®> >­}¬ÎœhÛsIÌö6¬GªûzÞ°€^]Þ°!Âä—)g¦"öñýk|¯– mòýDggÝ=É\]zô%Ô9NÚÛ’i䆓½ƒj ø{-Ì)Áß3‚h—ÌғЃÎ2LÒÁã–p›)ÉSMÊ‘’_-Lƒ_1ŽÎ>bì¡5ëpˆÃ4/Šã´$’uT&wóÖ‚“žmOuûª§ÇÒ«–Û…XMV¤1Ú¶YN®eeÞ]<ìë5 «†F® ÄÔ£¢Ô¢¨¤z~&n™¶ÊàÞ‘ùqjµ^Ü¡<óî“÷Adëô/¤ÒÈ ;Fj=ªÈ¡ä7x ñßlÃ\+á§Cϧ³v´B¸ùÔÞC éøéŒ¸k lWmºušL>UŸ`öÈGHr ñ—ô¯N¬¸Ëë‚oõàóF;*¹} ‹êÙÜMô\D‡ò"¾k'Jâ|[?2øí7-üJË>ï!œÀå2ÞJn³UÅ‹ýC Ý ~|ž`y†æ65qª‹Ã >QbÂÁæ\æ¯HXh` úŸÛ¥«c©­)Û®þ,Xµ'ªsîÏK¶úHEÉ©N¿|Ûh¬¢e ñœ÷ï’*á«8öÑ[¬Õ XZDz¤Œ‘zó%Þ¿Û ‹Ÿýc«Ä)I´ÄéYÚ‚©_0è‘ÓSΡ$ón‰Sþ÷+Ô¼Þ–Œí•ì·‹.¤±¼F‚)ŽåegzÞ¹äSìøèi”ÉEð%¨÷]بgõdÑàË€MówyµN×ó:š÷ÉZgZªLQÅe¤Ž³ a5¬ {Ìuu×b¾íöáèÂÛüSª{˜Ýuï‘иßUô;¹ä‹a'Íë²OJF5AÃ(ÂGPu7bà/ÒËRbèý7Uè––à@TæÑ¢ol˜¦™%š—Åé:§¹÷þ(F}ñ$1ÅâÛ„éÚüe«qe©ç@¶›’ew¬0‹œ&=\„åPxÃâ¢=f¿×}Y\ïÀã Vsœ¼?3ÅÙ Fœ· t ~_ïÉ}E¤Qõºýó¶©|ð´N)aÆ„ã'YWÀp9suêJܾÖõéຢÂGìõºØ×ˆ¢Þ_–÷{¸Ø¦lb®Ç0á2Š·‡ƒƒÑ“Z¤²ÞJ}"~Pr–øq ·pobÌÁ|x»‹0¥äú_]ܯ¡p4»RÝâûpxŸaBX˜GQ°‹åÃÎZ¸O’[ÍR‘Ûƒ…Akp$tÖ³ÈBÆÙ8õrƒáñÚ¨ ˜zpËs¥ÍD*À^çPÒºéÅSzEâ=PUNΓÞýT€Wùk,Ð!·ËcRYÔ7SûÊý÷ÇÉÚÔ…_¼tŒ’ì 9çÞîæ£L!§µ°ÁP éKk+½·šL…ŒZûêHÓNW±Ti±êú¼Îvéöàà‘{;²RnþÇ5Ç~O¤µtU; Lª¹# ›ýMûC¹‹±Í`Ä¢ŸÂlòïÖØË·ø*òÚ+$ ªyvtEõÌÜéYQ Ò¨IÛTTØy©õ£IÇ <©­W¯±6xÞ¥Fµ¾öð=Õb—õùæ‹XÑ–M½¹È‹â7€Ÿ¾{çÓûš6ÍMó©l -GìuÙÂ÷=TMOºêK‘P_âÍô0:älS“¨ åº,dŽnqÇF:èñl>Ñû"µ¥Â»Ë<ùA@ª¢"‹›ˆÛ‡Š¬Ã ñÍîÆú.íwÁ«?ë‚b7£²1|§ßéÀÍ$Άp|t¶gm—‚u¡eº‹ÉGb,\“‘üˆB¯_UmD²¼üM ŒvÉ:ý‰§‚àòʪÄ`í§@îè;,óëSôüÒgk¸¹—¨ñ#ŒúàU[â]ÛÈ}GßË?Òë9 lÀž?în¬³ãÁÉ ™Tei=3©H3—øÊ©Ä¿Mg~µ0È^ ÷%MäxŒ×Ë‹ nÛþ´t…ánu#VÙÝxƤ꒦ŽÓ¼/ĽnR‰£á„¶Â0]’VvÖ2ú¦<2¨M‰æ›ÕÓ÷rË,£xsábÛ6ý$Qõ‘?… *†ê"P1ê#y0Jæ“Ûì=GôùF<')6cÔ´b™wJVEõ¥K ƨŒõãi îv¬¥4izˆ²”Ý®#Mö~–2'MGÀmT¨îéùyѵ”N4·@ãsŽ¢*o<'ár âá_…p«œrÏ-l˜‘§ô“'ï gLq~‰Sú€U¬¶Ž°iaéѯ®édúÜ™/zy 3o!é6rïDŸÐÓyøÚ@@Úƒiý¨¢5£Õ"ƒ²ŠsÖk´kÛN“3É×úE;`õ45™ñ=Õ ¿†-G³ëƒÙåDWô§ ¯:F.ñ‹Åˆ¡oÉ(Jþ¨Ê;}¬‹¥€à¯zÈ펂e2UßJ\WÞäú£·2N›4‹R-@Æ><§Ê¿7¨ k{uÒ¦šVÂσz1ú­yˆ~ãÍÏÑêq“V²VYÝTÃ…¨}ŸXÙQ1nW{“|-ÀüÞeºug@K ƒáÐYf[Wèë ôÖÛ ^¡RD~ç¡‘ý»wI!a‡ÑpÑþÜw`d¬™Ýk6‚.d´É Ãá ¸fþÁšñpHçvJóï0ãAÌþÆöÅk*b/k‹Øç%!@$#Æ'ªì9àQ|8ËR]¶„}‰ÊÄöPFoKÓ¨Tøÿü|›ê¨}ÜÇ;ÂHæÍó±m‹Æõdð}gÿÖX5™Ãƒ°¾~/…©¹Ö±®O@MEOÃýs©Ï󺞅ï³ÑfoZ=cèÙxíÕSWø¨ZDRqÓ9ÇSXÜapƒœ^¶ £»êÂï”ÆßhÃã¢!j˜°,ìOË?DÙÐìóMÈ]ˆ–q?˜ŸŽÊó‚U}Í[Û̳ô@ åW6pî¯ÅΙY–y†Lñ¬¼ÖÐ`Ê|ÉªÓøä\­Þt]?±'í±rWñð,rmì§Àd³Ä“ W¶;ÅÔ8N³@«µÅ>zjô,G0¡½<’ŽrŠîYZ¢$kcÏíûº×<8ž6PÃVÊè6ÙÅ l4’`šn8}y Œæ¨‰Ö/–¾ìÛb-<¯tiÐâ§Žm|?®Õ쓠͸H÷SBߨb¿_>hÈEO§ÐÚG¹Qö’"ÙåøèÉοd@—Ø Ú¦ŠÓÙ iåÝÜMÔ)æoµ%ž\üdkTnÚež“¸öðÑ{Y JFf`!7ŒFr ò;X Q ý“óyX\p9⬙o“œ5O ëyë¯:ø½8ôÞFÓž§¤Sm³ ü8—ȯcÏœ'S5llòž$¡ ´®È̉}Y–œ#ŸËš~TˆÍÃÈ¡± f_=M_lª×œˆžX­¬89üÙ庅¬JbáÍj±éìû!äÉ µá¢œ_8° º¤¬¸~¢o€Ÿ¡´†¾CÂÄòHc[R¾u3øJ”Á\~Á+šš¤õ.ý#€ð¸´@µ¯"Aä8;±_ÕyV£TWj‘ûRºmÒ¸iâÓ±€!"6Q{ͶkgyõSq öïÁKQL"±—=c~£6~,œfþbKS¦¤L §}mÕ¯'õˆüðM}9ï8O‚[l&yÎ³È ÅgL¡âOߪr7<@š¾6}uý¼µŠH<ôÏf#Cñ¬#x~ŽÓ˜ÂH§)v‚OEcÜŽ;A "—û²C# GªŒét'zÅÛ§Ö¶¨[ü±¬ZŸzůœ¹½÷ô¸Ûô_ÄHI±´Ç/¿¢Ï+rÕò£K½þlØ2é/Ë>#ÏY%:°¹×œÁpÊhõS!Ä>ovéy÷«×Û jÇhí¼=¿Äò£ç›8ϸEó¿Í¤7ï,ü”9€×1@u¡—jÿ-å×—ž²^ÃX184ÆšMr~rÜÂUñØD“pDë—ÿÌÏ©b¾!Ò€’7s‡»e¦TÝ)·x6t @>ÁOá ZÒ¸à‚@&Ìx’}mB{l,QK߇®ïß{ujq#&/ÔïRß0ã6# ñÇi­ê$½5ørj„\¢ß§¸Î‘ERu5°°|tã’IwðŒ$5žv“{EæRçV˱? ôlj>­ûUá1×ü “UKæ`-AI:‰Ð'‘ø÷æ¡­¦… ¨¿P{§¶)¨ƒVQæÞ+÷N–~|¿ ôš–¯ÀóÅ•+}XBfŸkÑBÅÆòÈd|Ó[çÑú?몎_l"ÝÎà„¶yºu*9íèiÊý¨ ØÂe¶†.\ !¨†/¢Æûì!<Ê™õ²º$ŽßG[$²ï'Œ”]Ö}„-퓜q²b(׊>Ý( •åD F²5!ĽÒÔVéê¢0ÑsÒ4é­W ¦œÄ¸Þò\8Í…ÿcÍßg,yv]@‚Å%þç÷8=,ìǨٵ‘†58ÔN`­6ò- –ýñ.Û06á€3Cc ÃÁi¡¾[ßyü>ŠøSë³(«lhèd2Æ ù±~5eðÑ3—L©•’³’rç¯Ë{Ùüê@ó²û¬¤Þ‰WndéÏ¹ŽšïÜ¿š±ÆÏU—Û&ËAø-l™‹ 4NHaÍÑl´ÕC·ñÛ[Û#Nã'•;† eY¦MfƸÄÑñNÔD¢`zï H´ñ„áe2ÉΕs@²ûÛ²¸7v;¦¸ƒ$_)zŒþ„09–¯ ÔuxA/ƒ“¿“eëèFÌKFw†¹öЍ=ëÃÆ ¦E¿+àé5ÆÀ+2•J·¾d¡ñÝküØ×œÅÃzïáÔÄ,Kòº¤~|`h4ö‡÷%Ïj4àwöº2". /÷DëzP3‘†\…A¨c—žWcDšï÷•t ý¶#ÆSU¾z.s[3oTßïî5—©Sò…ŨíݶðÛ.5&ï–/ƒ·1Æ&”–AG« û§Ó]’á™Xbg-;#¨ŽL ÎÎ[ƒì©Zã!Ñ(1ßÑ;ÃØUP›¸ÄJÞp÷ã™”Û¬ŽÃ¡:àµÉ¬Kgëc_¢nod¯•Äë ÇîmF 2Œ5wÄ^OÁ)úº‡¾ì$Ù ç7\‡¢Ï½ï¥}€]wóÌ£l Gxz0CÂ7Van¦$_†n(•T#ÅXŪ”z㮽ôƒKt (”-HõV#q £n€¤áê(³¹ê=ŒÄ|Gš#"wäž8ÁfÿKw¸Âj¬N¼GWý3_G’¤–Uå«îeÁ%Û?p‹X"égcâ•¿oÕçû™‡Žò­?¶¨•è<Ú÷…²<òI¾Îó¼Œz³ŸÖ¹¦ê¿;µäpóÃŽÑ Õ›V$¿zžù¾&Â_e’rxÍd´„L0¢°ë¦ÐÚ…U9!“ñí|ÒSªr>4we‹-éx !ÝŽÄÊ–ª¯rSs«¦”Ô´bbøãåeIéÀ*E7UÊâ*Õµ³¸CÊÆýëo§Æ,I Þy£¼'/R“uHK–a´½ÂÞâÎSKµAX‚ð ¬ÉO(fw¦A;^^]°KáÚJå*$C+Å™“ô6$¹’ul‘å; ÆF%ʳˆÍ2[c?@lO쌻‰«àеIfôú†C{‡æÁÔi¿(D%§>`òÕ®~{8}Õþ,*¨&­`IeÙ*·ÎÙxVNÈTâæX]êKµw9^Ø÷ñ†ÅjãÄÿåGüç+S¤Ûô´“³Y©€Õ¬Ñº‡Ô·¤B)K5st×Fßr;å\‡8J¡ 1¬}ÖÖ¦×14È(£³è†1,‹î¹¥Ö@‰dwŒBö»šî°¬Áu_ëǯåè±íë:”éæ–¨< vZP{ãê„è.þ ¯Ôpî¶ô¦~³­W/ÄÕ-¹ïœGëÉFî¦v}˜QÏHy²jr5~?¦S¸¦Ç²ÞåÛºžìM(4àcs`HËßlŠG~–Ž.š|Íÿ…¡a\jâAºêr9§NÂ;eڵ݌½tŸÓm1µ$ŠPy-6’1_×ÑL'±¡vÑ…¹«i“3Ñ!2^÷×8³!hoúI1ñ Sƒ2‹JÌ[e.ª ¯šîŒñyŽØQ ·õÕQÎeRÇ„cŽïþ¤øV¡a\©ÎíK`Æwñ{þ°F ÊÕôt‘(up ]EÇ9hßÒþéåzI•)ã7’G~å8CA.þÞ÷†Ê«ñ«3IÅºÔ &W££M8J›nél`ixr<“Jt'±¶Åé!…È›Gp*ƒìžb–`Eåd–þ¸L¥n¿ÍÈÞ’)sòSÊd[ ꤽJû¢ÛI0v‰„ÀrMÕnvÙv‚ˆÀHç&G“2žÀ¸ ëy­PßZC?I 3颥¡ÍÀ~`ßý©ø^¦Õ“ÜÔ|CDËŒcðõ2TÄM¸@k[T•ØB£?y’Šš@£Ÿ´°’¶‘šÏQßjåÙ{û[ûõ•ý…¢Ú™A£Á½o7ÕÜPÅï0¬‚e•I1©N阶„_?ÊD ³éGU?¯57¹iëZç»[úøžK÷hú;.‡µZ/ßüÝ?#œ+<<©Þõ_5ËÚ¬êgÐ"á;†ëö9ÌF‰(ñŸgïó6¯»+3²Ù­j.?ébTË·V‡Ûüˆ‘ÆsÜ?ùYÈÊÞß߫óå‰%¬¥š,:O+;n:ê§Åæ+VD{,óÓ’xû¹ïÝE•kʪøý8}È>N{ÛâÞuWñPŒX6 á^ Ž ˆwíaÎ`t&FâP÷­ÜºÊ…œš 3×ÙP!oKÙ®·`•ê¥ø•âm* ‡S·,ý”Dù‡§¤ò»þ”P[ؤšÕéÍŸ@ŸûòCSðËbÒ~´ø×ÏR½¹Ð¾;ÆÏ– úH«û6¯fžµ0ò<¢8ì3MY*}"Ä—hf…‹)Ï)ÛìÒ³ÇH±DÉÏûí,2Îp½XŸ¡ºZ© ?TC Õ'Ûˆa}Abó"bþ*OE¡{Õm¥F%9ž›;j'ÊåÂkà»z€a-Kå§Õ\¬G¼œùNižUˆ<y¶RhÄhgÏÄd-3ï³â<¾U¨-Ü€P¢’oª0GMøX±»yí¨„*¸±å#Ýü«)Ëq°÷¨®íÚ”áÀømÒYðe9TË™Dn—^âòØ—gHTïÜ€Ôkçìž%?ƒáÁ4ާùÞdA•# ^û1qª0•»S›ª‘j$ÍZ¯£³Zd5brì ¼1]z6^µ»b“Í«ü2Ú½=7iÏ­ìÜßÖ³iÀ¢W»¿ ,˜7ʼ¬¿Û´ºëj­9îmŸÀ™ßQ0ÝÛhà¬É»*”~PzÏo)E¥ÊkÂYdßäk’F "Uö„÷ÐèM¡Ú€@ýæî'BÇÊç®õ¾hÍî&¢¸™öàᘠAµþñ@ï}@ªÉüØ((†buF½ 7Ó8„ç6ç#Æž ÚXRKW»€z¿_¬ÃäŒé…„Jr!†6=‚X7 I s¼œ(t >yÓ RJÙê”/¤7;<ÜÆ½t½e­"¡®¿¸€tÐäü Çg'Â?±½(‘ùmÊ7|!læ ¬nºO…)s?µúÅö,1pN;éfm9:žŒã§dR¯ä™ßç©´Rí×P&I±í:ÛQ䨩Gr #‚ÿü¹N㆕’EB‚õ&äg?j!òT7ƒ 'B"â cµÚ¼"kÎõh o¤pKÌz.ã¼óëQz:$›MÈEs%y¾a :<]@ï\uä*å"¢VƒÒ‰¯³?ZõÐ|@*y|2<Ê·ñn“!¾7NL]yJôYt0Îéœ3‡®:-ˆ¤ÀËo¼Ú/–Tš¦èFX¯~dŠÒÈ<ã—óÙ:\R8ÛŒî\+ç¶^&h…ýÇtú‰õ›´•rS—2ÕŽÓ­}³3>PÁà ÀÈk̈»d?;ĘæC¾¥y<ŸºŸ‚Õ­aïisó@Ė˵©ôví¦ÊÓ0æld¾Ù#±¡O®²*‚Tw[Šº?ÃÂA¾Pwëûõ Ù6|ÿ\V‰4F¯eèÍûÖÄDαZ„,¶ŒKœ «Ð‘ºµO«á-] ð§|)3¦r×§¬=Vê˜Ú8ŠÝdØœ}Ùòy|ùüôú|@wŽñ8û‰ÿ×hò¤ÆG,¦?Òòs$32¼bwÐ/—çÉ)BuÖ‹…Ô;âåß.vâÙ¤ÕÔ÷7 í8íiͺ~nÌ—ñÇa4ïòÄøY::7T»¦Ñ'&µ£,®¶QƒiÎÜ¿>¼¯þ+¥\Êo‰×;Ì,­~äœÃõ{<×ÖûÌ¥°Lë¹<È%’)¢ò`-¬û™Cö ¾àmf¤9.ï#áõ…~³é#~ý¥ÓR¯¹ã- ‘®ôø#¶b±_'!aÊ1—¥Ø {ËÉCÄx.„ Ž(Ð2Y[VàOý3(¯»öm®h.™å&ë㦥æ¶”Ô{fù0ÙKÃúŠ%»’]ŽÎZ|}R±‹“”¶ûÙeæˆýµ84ÆÞ`^»œ¹¥ÔðÔßc+‘„ ª¼ ™u@ZO¤‹u^)ùç«i|%i;wPè8ìÃy61Õ#ŒÜ9ŽýáxÄú ºX¾å›^—5.ZQ+h˜x‰Bü¼ÃEŸeˆð@‰~”SŠ<ú}kË6ƒz bàDkÓÀ”­;q[l˜G…­q\xÄÎóx1}PVpTâ“WVw]s%F]]ðÒÓ»N‚üÉnªž{/Ÿ½åÙvtμ¹9Txs½õ†z R )û°´Ã>䆆Ўød'úÖôžu…䉋ZÊJQ­éÖÏä+Ê^¿µãwµUnäôÄñ\•ïû’£ îüž üU_ïHZv;åÇt}V0qG´”ìò•ð[T¾ýwr¶¸»‡ÇÒØ ÁÁp€Ü$øC¶÷á!Ôî5©G¡½;*b·gG§Ÿo~Šÿéwú/ÉäB–öþ™#:,KçÖìÓÿ¼.?EôsÉNpp¡EÞ~Q½ˆtÈW_p«”^¡ºÐU~´=µ$<›°³‘´G¦ ™1‡ôäÈû…érz<£1~¸›DŠá{ýF¹¦¨§k¦vìáU•sÛ³jÎç)=¯5Ñï^Ê훦RìN;ß ½c,–Ië§ËŠ7…rxǿʑ£UÙƒä£ÉŸÕxàï4ñ¬57ÞŽeÌöÅVnJl\–ÞÁúQ7tLñxúï³ÆY3 9[à%, ƒ!MЮl“™ÙL'@Éã[)póï õtÎ`®º »¾ì”QÀÙw[²w>c´V‰J†·¶o¼§¶¶n˜È|„~0ˆŒÍŒ<ó´ b²×êüR×O†¨@>Ÿs(•nÀŽN„éªv™Z¨ÑÔVsš?{”åì¿Ee6]ó9ËN·1mÑ© ØUÔ@O‘5~QX›•ÁøÊ"Œ½4¡J„ó§oë@ã»v û7ùqê&% Dùø&ØAT:ÙØÁ,WŒ+lõ™®f ÓU“»VX‘6ÑʾVߺ3ùCU÷ÙSÁ„šï´†œh)šöžÙÈì="Ù|3ÔA¾Z>â ˜ZÞž¶%†—9®äMAŒc½œ»Ü«i¼cmÑð¨, ÑÖÓKÔ¤Šá9ÒÖ%´ W©KÞ­W-Ó•J½÷‰àбäCa¥ëncwœÔq4íž1À{®GˆPêëJ˜úð%+Y4-qjÂnáÛÐá¦g½3)ˆ.=šÉ’Ayq?R¦£eÚ ‘¢“2Y¬@ýú”Ê2ÊqÕ¬ÌÃ-­FæOôDVîða§²LvOfßlìÆ/-•Ó ÃR6rȱ<§Çڅ͘X`§[îÊ©¯fån¶‡R¶«'®ÚQóŠ-Omœ>´x$ψ1 ·šy;¯ÃÎyМŸ5TÏ>Zö acÔ7M¿·ÛÐöâè‹Þ^O^ª=&;)ÙÞëúÀ*-=ipéîS8ßòZY(ÚPôuQAÉìcÃØÙ\{{Z…ØÕÈr{+†£†î…©ë¤ÏÙà÷H™‚ȨwQk;ñMl„úÜ6蕸R&çH?Ÿèª“HZ˜‰$þhÒÅJõ€Š>:¥Vw|.þ20„þšÆªñ±üÝçÛ…p­ÔekHȉËÜγ¶Ã—ãçC…¯¼h'_ Ù9§8`ìÂe¶Íœ¯b=ã% $š¼¸Ìe;]ZB`R«ìæÉ]ð â­öØPSÊ,W€bO+–dPlF#b³n‚q=T}t+r„Ç‚“BÔ_PV Ák³LŠ6 ³Wퟕš”Øê]*(¬-T “¶¬YÿÞ •–5²ËŠë°èþn¬h !ÂÑ£ÕÜò q÷ôî?ãÌóޱº=ñ±x×ÑAçÕoümè””cÈ\*´?Mç:]ßÒçt\Û¼‚ë ªÈ\âæ>®AžW3ä·NyTAõP5au‹¬¬~ü}Öð0º/³åmÒn ÜøpÎ…ë~QƒêýŒGÌ­· £y-LÕM‹CÈ£ùiÏÔα–äŽe$3Ö¢sGBÝOPTïK`ˆš¼ÈÇ3j"÷åÈ?‹”Í›QÍܯ"weš­ƒƒ/‚;|J]i¤žçóTdAÓ5“lJç'¤@Zò »ÀÑëáE¿SÃ}O¸˜~ƒ˜´˜öRÎíAö’YwßS>ð…s ›„‹×VÔµµZ©lmÎ’H1^Pš=ÁŸˆ‚Öºªê /‚Èå¾&/V„ l) =Wób(ˇ ×ÄßIÙ">•CðI4F2!U¼ŒðuPb$»½iŸùWR5ÖêÁIóVÆâ‰YËæÂŒ† ï2Í»ëRD6)2b2 ñ0û|%JªÊm›ô”Hø½= Ç(‰5áÍTFÇì´ô —ÐN…öæÂ é$Æßº=ò‹=¦ôwÅFÏŸ€]¤Ê­­‡éÞ»Q:-9Ñ!*ÑBþ—;ùròìS}Ñ~WM@jÌTÄñZ51Ø!sv oh”óOôÅ;Yz8S¸$PA°Áœ–±4,o9ˆ}K)~”àì’ g—:5‡b€Oª@óS´}{Y‰zWNIýöƒD »wËgAkÁù4> endobj 454 0 obj << /Length1 1612 /Length2 12688 /Length3 0 /Length 13520 /Filter /FlateDecode >> stream xÚ­xeT]Ý’-Ü5Xààî\‚{p·ää@pÜÝ5×à.Á-A‚»Üåñ}·oß÷õûÓ¯ì1öªª5kVÍZkŒ½i)Õ>²JXBÌ20”•“ã=@ä`îê¢ +±j­]¯F^TZZ)g K›Aï:@K€4ÐÀÅàD¥HA=œAÖ6Pƒ–†#33Ë¿,…Ì=þéyÝé²è^_Ü€öG ú ñ?Þø@m€+= ¥ª¦'¯" `UÑÈÁ@g3{€š«¹=È ²‚]€Œ+ˆ3Àþ €l ú«4¶W, €ÀÅhzÝt·:þåb8@..¯ï ÀÚÙ }í-ì]-ÿ"ðj·‚üMÈÑòáðê{Sƒ¸@],œAŽPÀkV5i™ð„Ú˜AÿÊízu V¯‘– ׿JúÛ÷ óê…šÀ.(ÐúW.s ÀäâhoæñšûÌÑô7 WØú_ XÎ@k3gK{ ‹Ë+Ì+ö_ÝùW€ÿR½™££½Çß»!Gý'ÔhoņÊÉõšÓúšÛFeÿkPäÁV'Ç?ì–®Žÿô¹ÿnÃ_3ÃøJÂ̶÷X­PÙU Ð×”†ÿ™Êlÿ{"ÿ/Hü¿"ðÿмÿâþ»Fÿåÿÿžç‡–qµ·W1sx€\0€×PüuÇØ›9ÿ_áf {ÿfÿêÿAòÿ#5{m†ØúU6ŽA.2 w ¥ja°2³íÔßv-°%ÐÙ¾*úw3¬œÿæÓ´YØÿj=ï?\@°å¿“éoêìÒúÊÊRÒÌÿ~§þ¥öª=TÓÃñ•Ø”¢ ±üÏÅ_’’w€ëë dåâæð½&àäôùo²ý Ãù¯µ²Ôä0x-™ƒóïÂÿãù×Êèß`>€- –ÍÊG¨Øòu¼þÓð—ÛÂÕÙùUÕ¿OükÁÿ\ÿ=è@ ;Ðuab!d›š‘­~›30*mÐÓÅ ?ìXR§Y˜ï_ éôK [,3}¬ f«ÿÜìñëÀñiKiûG¡=}g2ð$̇š±;g™®•Ÿy;€Ý¸#íP'ÒëÏO¥Õ7ú|ÚÛë£êÆÅˆïÆ[¹‘ÿÜ0úS»åûãÓ\;búZ¤ÔÆ´a×ÃàVÒ%ìÝ\Ó÷ ôwž!to‘2gÇ Ð ¹½Á ‹ðwÊ&Ó×*óúˆ˜Ö€NzÖòç™B§ÃË8—–†„&ÜAé^Í:ï7¸Eé1!­EL8AÙY®i«\—ðtz¿Û:å—ãÞèÛ<Âï“Ã÷ÍÃWHÁšç´¤«¬®-«¹uíH0|Aä3:5-ü¢ œ!E"KqÏ Cÿ{¨¡—â­;!7Â7Lèµp!‰cisèÝ%YH•þ2ÙœVõóðg7%º~èIKô'UºH`ülŸv`À‹g0bÇCØõ£’N&ŠZwÙ…´”¿A w5|G‹ó»ƒ!|],Çz‡)’ø®êý¹1\63–ƒ€H ÿž”ÛˆÒK“)'§àÈ™"L²ÓL+¼¸bðWŠñ(3JÚR<æn¡ËŒO„?V\)¦†[Ã17GÛš·³¨¸Wtò*Ì™aº.ÞZ{=o Íq¥“F†CS…"#cYñö»å̯šç6ˆB]cAݶqš‘ m«×ôø­5Ø…¸ääsÏ´hØÂ¤¹§ÛTº2³|49µÞº¿OEÓ•E¼Ü÷ƒ—tÎf69{{hÛθHÝyñV©spѿ܌u´ýô-FQ»TœSpshÅé¼=øAâîNÿ€‰A*”g)}àÓgñy´Ëæ‰#4,÷J÷æüè(udÅ‹ÍFwg… fF×ÔÍqd_’9Ÿ§H]pn›g ]¦ !ÑÇâÔq´·#ÉoDAä†ÃMTê \:#Áï% ׈ñ}lÙʈè@H‚F?öŸ½Ðx‘FSµÞGÇdC/xoKG˜•hãx6BÍ‹ÏåJpÚ` TJß»±è­KGŽ7ÃmØëß7 dcƒ×ü^~Åv,9 §ÿ,Ç­ÎdKVèŠñÃx“ç­ÁÝ32Ä:)LE¸Ñ _D_h§Í«ÇqSW5nstRñ¢ wÑÌ!uqìÁòxUnæÓÉÞ4X°yaƒþ†¥(o1aÍ,ϳ"þp2Ê—©ÍËhTt_èqc×Å„†ûénéÜV9š3IµYì{ì@ÓÁOÈîÎù µêñ³¬«£§“°#ËÖÞ'­ƒÐ­ÖÛœãaˆÿÎÖl:ÆKڼÜ'½hÐ÷cŽÇ{ljÔÙ¡=Ò«m=CFñð#…ÏòÜAz·[›‡þ²±¾»/{JJyk„«V©=>–»ÞWQì~Ä߇S¿:v‹´mz0q5wyÌ.“ª‘¿?Ÿ’£·úvt¦ºMô³mó±Wi¡‹”F™êwRî‰Ò&*^׸ʴ ù_À­ ø‹Ñ)¼Ù ‚šy>t]Ëä„Ù)m)ÒÒb?ÂòáÔQ£EɰÔbH¯'4œfV½¿èü² D+¼´OÏ:Îñ³¸2ç„®¯_2í¦yª!-ïÙn“V+MÝ…ÞW%s½ Pà'ZZúò|›ÇY|Eánɽ}ÚFñŒ5L*NÈ–ÂywY‘*ë°dÜU¿‰*ÎD§5Ó†¼c­ÇI6£3Èp'ü…šœ'D8©‹ûÖ}Ÿs\è˜H}A½. …å‹äŸn€$c³H5k½®êsn~G·²kÂJ‚çOÞi‘Ñ¥×vãyüÜð^Î}ΫuîK°&ïÔ1Fûl¼|û Þ{! yºg×ì\äz}ò¢ê0.iœ?³ ‰¹”¹ƒž¾ûÚh¿3°!'%Ui©ü@n6¢esŠÞÃÒËÅÙÙ°§ûè2ã=¿v ]üEÒzâÆ8¥ QkUQ“„ߟґþˆ †'¨u`ñ±Ð­ hËÑÉr`”£ðõ?æ‹r =¬å¢@å«©é髱•ç ·™RÞШÜJ®¿à·„Ô\£·Ç­`¹ÎR|Öm„n:"x·áˆ™¶™ìíº³n›-ä#ö¨8–7Ñ¡‡–'ª3’Jp [m¶9FòLjKG|È='ñ™¦›hÑ*d0*õˆé&¦¨Bh÷±Ì­Ü4’ÒŒ‚º5ØŸ ™#‘äÏòM¤¤,³ßÍ¥9t“~ámGg<[ùT1NôDÂ)!â“ëh„Û«ô$Ú!âßH@F“ʽ®›QEúm•™Ñ”-‹£<¦ÐgðD¬Wk›fDQñ†“^ÓJ;ÀƒC§g_'Nvä]e¦éünÕ…«öG¦;Í+ÝÀ_N¾;ô1õ9à ¹Åꜧ~V³ œžéQ3ÍÇ—oãŸ#§“ûÎÕ©Ø?±Z}ù<Æím3’£ÜÙ "°ñS2C-·²:%¶O˜~Ûž)ŸÄt¹–ÓGØ¿¦ÍéÛGWÂâÊlMhÅy‰_^ÌÇ·.¨ÜIml]H׿ÅûÓײ§™öÂäq.5z¹ˆ·GíyÕIÚB¹*Pæ¾e(C–©¤Ä°ÞMÚÉ =!敪øN WŠõÔ? Þ^‹µ¬Y†qýŠ¿-S&Içøbú ÇL·('6r‘!Ÿ|b¦c­ŽZQȧÔoT7†\ƒ„/u›âvƒ e<Óçfz”®Š¹U`ŽÖg*ãzàt!-/®ð¸žx•™ÐÏß¾™WZ8’–¾ªÜýc—GÖh¶Žy ±àRiÙÙ$ý넎øXq=|w²ÖáÅÑçÞ|ö­¢¯.Ýùö–µ7¤oðiJØt]YLN×µ‰ñÐ=ؼגLt²D¿}>Q+âfÚ¼s¡ä¤Ï”ú¬²Hnûd£,סþqÓŒù3°2ðax`À3 {—O1³D&­¨Ùã3n8žJçhH‚i&ê³ KÞm,—•” ia¤=Ü['W)°˜ºJ õ#Æ}¼)W#­QPZ·­wžL怜.êjš´}ö7› ‚¡1¬™£ÕgÜ™ñ&óÁÜ,d£¹ùÛë»Á9ãDåö´äg_<£·As 5+œÂò÷ÕÂŤý¡Ex,…{ì¼w«ÊIë$è…´éhÐ:œ³H³±>G‰$jÎS ôW®o*…3Ñ.¾e ²u—.9(Ø ç{ö ë÷­ÖŠp¡wÈIÚ»%U?Ag7o(ðÐ9£·øéìCñû²,0ÁõÆ*!ÚÃ1ÐJºÑLÁlÍ¡'­dQ‰½ix‘¶K4Æ÷Ú©ž˜:ži.»*8Ï»oåÏSõ üç‘å•Ôôütgãî G#¨¾dÖìÎa+ÛÞ§=áçÙø/ødí“ 8ÅhšWº|y)›ßgïtk¾5ŒîÝYJJdzK¼Xfêß]ú‘G`haàæä].R;“=æ“G'ÉUZ°ó`«é.’\çJøÎéÙ4 Î(Xs_¼ôxS#&ccBÌЕa7ÄÞì‰1÷‰ÿV5Qeë,À’8øWú­*âÆþ8‰ D%µ’G>ëöîÅû%ë7ˆAÜIÌ `Z3µ+{sEꃴÀxèºC¼·^‘¿µSsZ¾2òeÕ–ÙvþŸÀU“rÔÈ0Vö÷M!~Ò·HÖÖE…I†N8£Í¡gŸ64º%®ˆ[ö’UÇ»Z0(S0R´ |ʽµ6££“GM÷gx·+‰6ú2ƒ?ƒÎ`áÜbáGÝziþàY3Dn%â—¡.44nê3.¡Äü½Â83½×£Î<ôO!ߥ9(ž«w[nºõŽžÑXËÛYÊ€±ãÑÔ¦Gý6ê¢ÎJõa_"|J©–ÿ°ÆB}þ¬é”ˆÇ; ØQ[çó°ü^ú–Ø'^Üz"ò)þÉ>C4Õ=æÚðùÙÚ‘½bà‰{¿zILÐí6×:3Ù¦¾0”ËMIÊvå9iþ°*o5gþ,¿– Fnc(_¯]ÿO‹…ißiýUÜzh¦Ë³¨<€ðÞi*'ò&Yc9Gغ'ö2Ï Ðg³)%îýZ¥û’Ž#}s7ù=oèwÚ‹Hÿ½¯oX?›¡.ÙïÄßvSå˜×§w¶!?©ÃIdbñr<à]q€`Ox™\}š‚ ±xñ@Œ®P Q¸75cpa ­Þ%yæÐïÀ¢nÑ÷áu`méðpÛv{ÇÌŒ‚¤¤ £@«ø¼cw¶Âo3¿J]…žÏ;Y$"U1Þèc®îç`ÞèœWÍݾ"¬> ð}bÒç @°ZJ±„NáØ¬hk@0ÏR ‹÷pLÓZ./T¹“¦Ñq5—)n³&¨ÙjîÐËQ ¤ÍsÊ3 ;GXW?²"_†6y“ 5¨©SÉI®>—èÈm¡,ïgŒ¾—ŠœØwtÕÏõ=cÊ;ØÏú•ÃO?ˆêäx$)«ÌBôù‚·8æ½ý ¦ ­¼‡ò¦«<ÔoV…Ò=¹ƒ£E§v?œ%žò¯bÃZ#¥Åýì|ZŠL¡%pÖF¤JÉ0ñQà͌ÿ•Ô·9]§¡ÍGĬJ7Žrà˜çGPÃ|' ãA+Ž“Gæ¬ôÅܺ^@n13 û‰œS1×aÝ‹ß ,Nƒ}錟ܾF‘Ž JâçîŒô«P6/9|´nùŠ]©sÍ3‰•e]þSuÁ¯¨JâJ£M^ˆÀBWâ~í`Y(·bgTÌ€?²„²¶Ù1bÌœÂS´>x l•®6"*pJ"ÎùxVö,‚qÞîŠÐF6ßd·ØJL^ Ri(éx:ÒW¬ŽŸQi÷'#8¿erd‚Ä-6þ0 üEÚóæFHÏŽb¾+\©>øžºgNö½;ã'¤ïÞö’Ÿ|uµúƒE·-cèÞ’§HlëÁ5ñ#奄làÄ“ÝhÐ(4²¿|¨Á×F³s^ÂØg@Æs RùÐèð€Y™º ¿æŠ¼Qþô&M¾gÈc–5ôüe&nXWˆD!l_ʰà÷î~Âű7[uHÓ…;’o‹+ÁÐ:÷Æ·Ë÷^¤¼_ý>Bÿá1Ùø÷F Ùñܶ®RÁS¾ÐqÚ6£Ccý¶\O™¢Ù{ZtëüI ”d¬‰p¨)_Ù®‰O„Æ4‰ˆ7´³¬#Þ¢½è`n30úT¬N«ß;®¾Ç|ÞX”áß8‚CÏ‘‰åWL%Ný¢òË!)k Üîµ Ÿ_i!@ºÙƒ™°øÛL+{ƒ©G"âÆ„oû¶Ø_î"öó6Qsøï™@‡F”à5±{ (ãX‡×wrŽKÈ3|òáOûÐ÷6-êO2}ò)Ú”ù—¿3h³¼ýpS%êÉÖÓ#—Èr_£¢r³ÀÕ‰¬I0Vß™ê<·HTÓ¹_¡R™t%˜óï?.hïc6æÆ3’ØmßOYÔG綨àÕlØž‡UãB…™$ë\iG e?ÌUm–ù”VoŒÄ®ì¿so.+fàæ"k‡sñ1:,BXð%¦)€n+!0z0q7xõ†W?ú›£Ø dÕ-¿YÿnZsø-“VU6»¦^8•ˆk*xJšÊÓ[ñy0?•˜½ò#…tFŠ–åÊù„2xqËîŒéÑñØðpiê%Ÿžf¾u\Öº¯òl¢w&‡5sâx@!£½»×(ËòkfL½†&…,Unå‰ïy›ãùÍd—i§G2?…Ò¹ô>OßX˜Ñb÷ð?´trù2¿0¾5_;,Ÿ*§,ý Bë^P g¯h`ýRù‰ÛIÝú]õ¬ŽKA›¸ÊËϱþȃ"!TƒíŸÌ¼žþÆ3”_-]Åò‚aðò"p±±˜Só/gXI£ƒp»Îà•ç~žÜÆsÕ)ÎOÇ6’›ò§UIê…˜¦åå]*&†OØË\ñz?kú³µÅaÝ>âU—–ѣ󕚣]{Ó ÃŽÄ…ÓLjioYNª^žQ}]‡/÷õ-׫¢Â®gáÉß›ñÊÌuÁQ¨¥ÿ®¼'=Ùû¹=0tÚ·_~Õ>븳ô»Äç!°½£š*ΗFXë«\œ‡3ÑŸ¢…M6~icãhÒ¢_E(:gûªþ×ÂF¦sT1dÉÓF¶@’¤œ†˜Ù[!¥ë±O_pl¸4¨ìf»ö?íeœ-ô–pú~ƒù·ãcÆìvî@Z¹›%l=ëãeÈÄ‚+^Äuž©”øgjzLÍot¨]à0²p ƒÜ:êRYüN=ðk ÁbØ~:ýz]ÝiDùñϾá`ï]R5†…‘ü°ÃOí¹£‰NòÄbÕù=îI›ÝD/y^GÏ] ­7e…d—Ó`"Fþ£2ŽÍOœÁX|<´ß<6å¬Ó8ìéaÐß&âC§ÐHÙ™ “X˜šC CÖMƒþŸ*¯šAÖÑzÉDô®Xȳ_l2Ž“m—Ò{'IÁ4‹µè’‘pmfÆâÛ" ¨àVß~#(3ú.ï×ÓZÞM~ÂC\mú FŠni#Ì?¶\ø‘@å’âÀik'•5DA@4P÷n×úX”3#ñš©§mK¹ôÊZ?­¡»ýÔÏØÁá‚tËÌǦ\žê¨ƒ·È[²ký:÷ó¿Ôò®ÉW]S6‰Ç3[,eû¿¼•XË£~hßî¬l)–`¶mÙ`þ¡*Ä.Á`\& x!‘Å£ŸÖÁAm{ÆãÃc=Q4G‡eR7Ã×ü,…ˆ–mä\É:$Tn'›Ë{ùâ:Ï²Š ¯QÚ“™:8ã§’ º·R |yýÞ]ö«ò[¡¨wÒŸŠŒ_EøVØðc* B«k_/¥É‰"™Ã¼ý{ÂߥîS˜îéKË )÷Îî y¬««bîjr«¹’ï—…žÈA¼?ï¸^læo6˜Cçö.0ŒùP:Ñ»?àCI˜OFu]CI¦Ø#Ÿ\»ŽÃèè-­ñ ¦’íZë8ÈJ¿'™C8g@¸'ú™Ï)‹móW$êw0åŽ1ßæ§cr+a€N{/™;á˜ïÀ­$dÙ†$T<ßSh•s¿Sk Âm…áúú¬‹,­Ê¸ä²HeÛ…×~×xÎ^Fl‡8Ô;Û\e7ª˜H‘·;3 Ž-É]J"2 ¬c4JÈd|Ý ^j¨ôN`–ñ‘ç^_K©ø)¹s|†Îb»Øm›2šÂx?pUzÖíu÷xÍ¥pԣà Ÿ›áF¼¸5}"ìE­@øöƒVÜu0Û©Ýo{›†Å´ÚzFpòkL— hd—žÞg|±RÒ“‰=¯ùi 1!Åò¹ß• ¿“‰ “`•í'v2,m²-Ïs¹ÿ×;n¥XÈÝ(ýÇ£ÇÓ|—˜’¼qö~D9¢ ÒäÊà™ „¤‰²Ù)^Ò_¥#<…vµ>Àªì‡®,ØOÐuñÀipè±­¤ð u~Êèx>èrî£P_–¨—²x þf†Åt^ËôdP=8žï)•cy\j#b} ³üí‰A‡Ïf6M"¿ 6WÆé—, 3AégÑhïó¶ë÷ ¾¸Œ -¨Ö.?6¿‘d%I@:ÒcDý€RaèqÊþ¦‰à‰ý¥N¹–bC'nËõäEس¸øVz=XIÉQ˜æq:§•Ì+»|çi"‘oÚýŠ/ÝOÖÐfÍÀ¹…„¤± óÍBj‰Ý†UÅÇ¡[ïfNDŽc{ën rø¤½¢‚5#ù~óªptûêa‚üŽìÓi;rºšxõ:/b$̽æ¸v˜ý†Ââëh¼ÅĪŸ…m±Ò¾ hº¤…ꎺ…~Wú‘l”/3EÊH&–žÄ+ÆIýñ­JíPâü7Üõ§«Ùkºe$£1|û\7• ÅNþ ŒŽ!ÛµKÈ©þ‡ݪ âöM+ÿØEöÜ}ÕgÞp›DŽÊ‰†¦B]‚ÌhIâí%[Äu-š /†Ù7 o´P‰Xë5vë²²¬¦w6µcdFö^΄¾ˆnr Ãæ¹ÇfO?®j)ŒÞC¥qñizÿ¸<êü>¾Þ¾‹;ŽH+:7þçÐÇÌ0{7°°tR‘]aëq®jÑŠ¡1‚ÑeîÕ¤éNzÿʼ…É;QzIQœáó‡w9âŽp¬Èæn† ¾Ã”æÃìÝ‚E樞ÍnZÚÓNwrÁù%îxÌ+¦ƒroÖ ‰ÙJ¿ß3zåôÚ/ÛêÿB¥#+ãmÌCšmã_òÌú‘:VÓù©<EäC©âú¬éÒðÄ’ìl˜zÉS—í”USzð@KgO[MÃݰQªV€R¦ä¯Ç–u“wZU#Fg:ëÞŒ7v¦ràüv‘)uÞ­† ÃVxy#ÄSë†ã æ ÍߊÝ·)ãyþƒAaŠžiŒb(ŽÎҬ܇zÜç~_lCè ‚áðÉÛ¤™òA7â2v;a¤éu@Ü¢\“”]äÌF…£ð1ÿž-â)Þ™½m×2SÃØr¡æ&‡—qñDq¿Ñ«pZWÙêd×Þ”S°£þ}W,;Ó±°ù ƒ,ÇlõUA*ÅÈ÷ ‘Ü?4¨hpà—»­T½|ðÙ’‚9¬0–±DyÔ¥Dûós¸¤ žN¶ÈÒ VT!ê SôbRXÝ%Å9ñ\Bl³©²†å0úÕSÒÎF!Ru õ5¡Õ1÷7Qˉ;>äÙ«V¤S—0.XÊ£‚ï»i^WÑôd|¬Á*g"$éJð ©ôŽçîþ½Ë£ž/Ù±/ÒßÙhËò=ýÈð-]ò¢ õhà¿8g‰D¯¥¿Ëн®Ì]'ê|¨yC,"ù5x¹ £ÖZêñœ™vˆÞMPud’¹…Ú¦GàÇî©*1°¹*’¸J‡ç‰kNnÜŽjv4Q6Õ!ëNÜçš©».ßß„ÕËc¤ï„8Np…JU*ÙXcþYàÿ¨kj_êVÈQŽûuC3´gbgŠD()íãiÝuIŸ>á€æï¸NÍš¼ì]< þ ùêÇ‘‘c,oÅ ×l ^ÞÜ>äZ" >Æ®AOŽ®Sƒaõà;¿æ^)eú·ÎÁzV…uïASÿ~š5¬”­õŒT¢y3Á‹¶DŸ«Ø__ôòÇ)üê¦{v Wl÷1éž׫ªááÅCdyîtޤïÚ8ÕjVN%¤_V·Ò¤v)%‹ª&‘´Æ\”ÑÊë6@.æ³VÔ£n'øÌ#Îì~ã•'eÝïLQò^XG†*ÍVñ¡µ‹­Ý§‘ƒ,N˜ß MÔ&[aw  –@¨þˆd¾íÚ8å"ÅFÉù‰…ãLÄ»`Ë8”áù¬ñ¨¸]_ZSB‹æ}ˆrûª\¯sÕ¸þÐfs@ñôþF3‘™ÁsúÊ;3ëS!%¡š9¶O´‘Rrœ )ØöBÿƒü¥Tí]ŠG Ó/ÿ^#Ån&?ì·Âie›ù5©×Ò«3 ¢¿ Æó;3$£$žÒºÝ9ò©¬¿ûeB›=G­Øðg:,kÞ›”–Dà/›s7Œ/Ý‘o;b,e¥1(µ-°­_òðÞ ùüI Q–çvC•¤BAÀ#ë߸σý‚*ÝÊ•än6¸·ñ±yŠ¡”axgð h¶¸‘Ä<ˆ¾—Ÿ*œ>,á 5Zæj¦§yNˆß-G ÷qz#ù}4ñ@ða‘m›7êËgïE}}ŒsÇü­ìÞh®f#xj¹?9év¤b°s Ë›hEbÉÛ,H•ë\Ó xl•;g¹™Ê}pemñζ‹ðC o( #Xý:hIÞ×ܽví•ÒŒ#ÛÏx>ïÅîYOWñùz®É·muH28LÆGú„ÊIѬQ2îþ”ß0ê¿Ï:'A‡ÙâdÃû}r:o„Ývú9Á¸±õ£ƒŒzî/ÂZz7ªcÓ-ø ¬‚O~øÿ€K#Ê`­ÄAá§Ñ½¥íUäÔlð2u’ÚÎ(AzmrnñѬׂ‘£è”z?˜¥tþ8*ídW)ƒÝ°îΉ”Æ`i<üÒb¨ÄGÐáiwŽtÀ_ùôv;¹)œHì‡ï™~ìTj¼AéPÄ6Jò󂸵[,$›Z”Œêj\¼øÈZ£R¹¦LŒ…•â’ù€Ð²J¤±#b҆צÒ¾û„àú£€ù²"#'£˜‘®³ZÇÙÅœqrŠU 1‚·GÝÅ0Ôkãìž–Ù´ýáéóËׯ߳0G3§"xÖ/õË»—ÞB‘4ÿx·Æ; ÷«$q"Ç6áõr#Lð¿ÌˆVò¢¡¨}ïexêeŽÍrŸÉ%P®LfYºÉzP¨ gšóøºE•Cδç½éEMbG¢ÌrsH;‹ ¤âîZ`?à%]))Ðñër§OA¤d¬™6‚ IHð£•0ç®sÄZs° ,.Íë ø/hÉ>ìJô䊎>+b‹þáû}ßÀà W×OQ(51¡RñælyŒNÀ’áá²ËܵÁËLz ©øIò׎Ϥ)²gÆx?¯€Õ ¡ð\äFÆì‘E“ìâ7YüùÝíXÕ%~³±3- ò“<iqSáŽ!2Ù%þٜš&˜2x´Šù~íj—©ÃßÄêÝAœ¾Œx¦V¸´éüIÉBÎ)e]øƒlƒ¸æPŠi( | (—*‡]Œ° ØJ ÐȦùsOú«q™vàÂÛÅ2¿jÒ¿ 1Æ“l¥¥Aì±AS/K‡!*Ïr¿Æc™CsÚ ^ rX“8ÐS>£(t§ Т0|ÿ‰EZ½p•9t¤àQ«æŠÄ£ þXÎMë´‹Ø ¬=‡Ûü(õë ¹€øÎœ°»Ì$¿éøûšÅQž'Ú58ªƒýdÚ¾gêC4ø›˜­^Ïè"€ŸÏzê&âÐ WÀº‰^"±“Éè â§ù>QNñ÷ØtÔ›¯^Ëf “ÈŸŠÎ~Àû7szù__œ3–ÁÙê¬÷#¾µ43~Ç›PµF h-9Øú•<²=W3øÎSvØžIYÄ=ÚÍÚÉYQU¼8§œâëÚLL™~@Cñ‡(ýª_,®mH(ªÏøù¿½°vï<Ñ=²RK¯çƦNØ·==`©ô¤)Èæw+x¾S¤sÁ+Úý¦²tñÛ³ ¹®”ŸÝܯûU*:`™É¬ÇÅ·ÝìiÛÖM{2æÖÅdi.iü ‹N NÍR#VÕ»ócÂë±*úÅ& 9£ÜàJ~3£>ˆMÛuü®ŸjŒjdäÐ úµ‡‘KÃz2ë9À¤ã—>õ˜ç¾:ì*ÑÈLqK„ǘ®=åÏ-[Üü‹ À\üÙ¨;K5û—Ç©ä·Hqïdn,w©Æ$‚ÖùêG¡5ÉúÏáEaª%ç…ŠäA‚™²Ûá˜jøûTÞïÖZ©ÜﺻNJŞ֨è:Ö˜-çñ´°äñ–Æâ Ô;îC?%OPØIž¥î%ÆÄ¯áühµë$íÝÒr–±cŠû,d+çÃ;ØãíD‹ ‡ßÖ3î;_ˆVzîó";ØþlMËunçPÉø¶Ø%@ÃÏ¡Þ3´T­:ox¯{ ¥‡Î*¬¶¸–»'ñ-à.äE^:5¹-*0Fº–OD½ñ„WêVH¿ïv™lÊ.j®[9«ZqÁºIO¤.§™õRH£Ð `-éEõk•˜ õ2æ-dغÿ!í~»vwœ{”ë¬UöMäôy±W Ìez€Ö^²™±»áùä»)Þ„Ñ/ŽpAÌ÷­ãDò[ïŸúìÖ²%±çÛ 5·ÖV5ó’4Ú‚)CÉåA™mÚBs³©ˆ˜u—ŠƒIɇ¨Oª¦RéîVªõhê.ª…ûT×%Å^0ËP{aР{×ôZñK]Þ-!§R†4¡×vø„>ÇÑ5Zìûå Y«RR)šRŒÃw£˜™%LÐCÓ@‡­ün„¼Ð­ ²”´Æ¯Ê?Ú¦Jßû…¶­¦NC‘š6ÿ¬4.Ìêùùm¼~gàé<õÖ.vêG4~œ@š--…üqÍ é¹Z“û:þ~ûK>îãe‚6®æzž\Üš –]ªL­BÐ:£·6±\t§ ÌUæ*f÷ÀeÅ\ <ý-×Õ"ÇÒ‡awAc܈¦6‚ƒùeYàyr9†hrrF”ý:VÒ›Ç?³+ïÙç ÝŠºøâÄÂÌ…oªªO‹|Zô/¶«cÚëQ¾)›¡žÊ‰k1Èo¥Û¿ó”m>.ØïtDØ3jŸo)“D§ilóHŒZHŽï9ËЮe†° ³¦IÚ¦†lìPüb#ëÎ4uÚ[Ú2ŽŽëüø˜Ó‘„Ž“‘äžE„!Í]W˜lÓÉcÔ)døÆ†ìÑLXŽ)8â-E7MbvÐ$Æ„w±Ã"î>ÓD5³$I+úÂAUkJÙ ï3öþà›ËC!4«Îv€ßÐéw•3'{­»&&c±Õa¡Hï¯sõE}$ 1ÓrX¢Ý{ÎÙ'ŽÈ8§ÎIüp²¿Y 'åÖ ZsŸ$ûS*yýGv­q¿ôWµÁÆÌÌtßp)SŒ? Ñ6¼½ë)–õøZû(:·1Z“«¥÷®Z]ìLs ÿ¬¶M¦ô–€Ä ©ïT™Ivõ˜ôÌ]â©ÝÈÌÉé‹÷ˆkëת)ÿŠyŸô4즳s[Q½Ù—Ü¡«Hh½"¸gtãö;œ²zOïÔZßE(p0BÔ½ë¤Ä’àë;éW‰Èov˜Z[|ÿùsMÑNX +ŒßÄ/ödD©0²CÇ©>P[õrèPôªÜÒwÝÍUþéŒlrÂä]0ä`…ÇSU=À‘úÁdĪyNböÔãó±e¥‚$^9áœU‚z_ŒÞa6áãäÝWû*!£%Î󻇿¬þ¿†Ç…×u`2˜=Æ: †>X:&§·’½ì½×ÑoIÔ&¨y½¸Š7uË WÐ5Œl8êŠW!Ñž>뉩?V<éÅUÚg¥‰ÌîBŸ0Û7µi¯—ªJ)¾|Iª)ÿEe÷•x=šÁó6ྗX‡^+}·Š}§;ÚTÃc÷M÷ÀR>óÈ’îçý·M“ ’Fç–¶ÙöÅiZ²¸§v²Õp…Ûpd±9l%Q¸b6ƒ¯Õ¾½eOX £Ž¦ÌÁùÈÅx7¿zìýípÌÿÌDyoÃb¾ÏÇ—®ô?ÊÁ‰ÜCqÀ›a^–¼Å«+ŠÜ 6ÐUɧõ‡»Ý3¼‡ËmŒ 2ç’mmŠØGø*ù|UžøáP”“g3ÂÚM²g6žƒ¢^K(àÙÐ(‚Ï`ð‘L‡±|K°as·A×õb¦€5„Âô—Wo‰ ñ²ÔÔ®X ìhàªÏäS(ï"Íÿ”ó.ÕŸV²êC“rµ`LÕ¶×[ø•þ¨wòSûíº6Áð»…á'Nä<æ\­¾Øˆ@žvÕ=ɼ¾¬>€pËá÷?ÑûXÊÕ<â,ÎyÆ(¬ôëi9 |fòÁ¤ñ2¸Ý¦ËŒéâð¸üÊb>E ·¦cFþ |Üþ)—8¼8&yxìõ â4¡,;ß E`i~Mâ番åýéNÆNÝ4d#ÙêcÞçDØ_&zns6gG¹:ŒÂôãá=ÒyE|)ú˜¶ cÔçÈzZÚý›º¾ endstream endobj 455 0 obj << /Type /FontDescriptor /FontName /DZMMCD+NimbusMonL-Regu /Flags 4 /FontBBox [-12 -237 650 811] /Ascent 625 /CapHeight 557 /Descent -147 /ItalicAngle 0 /StemV 41 /XHeight 426 /CharSet (/A/B/D/E/I/L/M/X/a/b/bracketleft/bracketright/c/colon/comma/d/e/eight/f/five/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/r/s/semicolon/seven/slash/t/two/u/underscore/v/w/y/z/zero) /FontFile 454 0 R >> endobj 456 0 obj << /Length1 1968 /Length2 4069 /Length3 0 /Length 5101 /Filter /FlateDecode >> stream xÚ­Uy<”ëÛ¯$û^–,=ûŒeˆl “,!Dd˜ÇÆÌ˜EFYÊRYÒ û–­¬E–,•5)ád •P©l©D²ý:§Îé}ÿø½Ÿ÷ü1ó™ûú^÷÷ú^Û=Ò{­l 0D7ИH *•T6T4ƒ&clè>GȦ¢Î.-}ˆ ¢©8"ÁM¶ž4ÀÒ à\KK‹]8D$ÑÉ8¬'8nmØ=¨§ÑdPáovÈ ¸Ñ7pÈÿ¿ó²A€ê 8<²´:²0dM,Ž& $£ñ€Í sŽâÜA„D2€ÿq܉ nC4E â2 h€BÝqÐ5Ðß$m@ $ûà(è7€£X2š@1•àîxfCd÷€ ‘ÈDÈà2+"…Jq'ãHTŠjedüC'ÕM݈MÁA0@ô€<1DwšH nb „RÑ8 ‚þÔXn €ÁQHx4Š ‘‘ȸM4 Ž€ý¥@ ƒX¨9xBh îêüÊø[öh Oß¼MÜôú©G¥€x%v8Š 5Ñ ÄâìÊ#€"x¸Ê;†Fú óÉ›’ýs `4†HÀÓ èÁ®lA¤BQÙÿ¢«Jÿ^Sÿ…–þ+ ýWÚùÿkæï ùUzÙÿÓfþÎcLÃã-Ð>Pkÿzèap#â)ÀÑÿá‹öÁáéÿ­·=øCž5ˆ¥áÑäßa ån@ÀBõWQRùaÄQŒqþ Æ Gu÷<Ðx¨0›öã HÆã ÔÀÍÚŠ„Öo˜­'ÎÝ›°Qi5M$`~Ïêɦ~e”µ™Õ1ù<†›.VPŸ©¶t¤êÏ<̉˜Ÿ‡ CC¢?pF®©©ÐR…ÖIKú‚«þ/Ñ6™à¿Îæh*ç8A)«À7ÿóóëäüÍa‚;³1u M&£éìP<褜Csý7vÃPV"©Ð€D£nìûƆÃ5‘€24^d¢?èKƒöB7d2ñ4Æ ÿcPþ‚Ô6 $ã(Þ>hªçOŽP”ÝÐä_$pu@C¤þà ¡¢(ƒxps€^ÕÜ0úÒp~h8í—U¨84nã1ýÓùt§‘ÉPE6ß^h6ÿ:o>A 躳 ݵü’ÓR¨·„²t957™„“®ß¶ÍË )#ÞN¾8ªUìºr3\©²ëÀZ-½’´úæˆÜÛ‡‚øý÷ÁÙkbR°¦¾—2õHù·ç•]®s¥LÙGŸùØwôÕvG »·cǬ] VvˆwÕ«’Y?.ÂB¤ürBvî[ q¹'UÄîjà­ÜÂ+wrJ&þýâÂþÖŽöm÷?17½•ÏŒe“ÖöÛÎ%â›)ªçx¼ÈdÇÐŽ}fyí¤5'µð¹Ð‡„ ‹áÇ•þoOI ûÇ¿œËŠ‹c‘žY½V\+k(’þºÊ‰ dœ’ˆª"æKp°ó_0‰èÔÛ×ñ€užó45Áç]ï4QÊŒ®Ã }Àƈ¤˜£sÖ`qV²ã¬#uoÄ8îOd-ÅqÙRnjÊ`ö÷½ªÝÊuÙ_TX¯>œv±Ó=]-ª³bu2í“ØJú×K£o‡ø|oRtÙ ¸zž:,Øt¿™!êŒr\5ò]Õû£lÕàJ¿Jó¡÷ò%Kõ5Ž9»[`w¥oNY‡õ¬]ça±'™œ–L.~$ÚÈUtòG´Tæ÷Áë¡×d8Îí,ïú´¼6ù.Í¢Es_õͽ\³¬Ê ù+/ó“={úU÷ó]fOïV öåšzÖ•êq-M5sºòŽ^hlL:ÚÊVDÙ,Ìúë·º|IîñXCɦïŽIÏ“µ»³L=L®OÓóJøR.³ì±v]0¹ÌÂÅ}爚ìY=';ýn£"9¡}_ç¼í{è66Ú| ?(îbÛú¹µo»,š°7-ˆF¨íù~½¦vŠÇ¤ín^…éòzÔ®7¯¢.fÆUžÌ\]|Ì·§ÂÍ ÷Ö6ªX&±sý\§_©Æ8ïx…ƒùαšÕ§Á"êþ|‘Þ‘…©£×qÓlì¨Ï¯gux™~môÁ'ÏÛü8´‚¹—ÚAᎀˆõëy£mšpåÔû¦Žkη©)_RO‡gW|˜<ò "õ™;à•dY"?ÝgŠ¡Éœz”ÿ>Õ²IŽ!g»F]9.˜Î:‡Þiìé«NŠöõ­Ú3bèÈžOFÅŠ&ºó ‡ä(S—/͆À¹Ð_IO>n9¹=ø|y¬ÚÞO5é #›Ù…m;YRõ}e©ñÝ®¡Nö©",w±Ò-Wžß $¶ÑU±Ó ï\ŵîoî­y|±ö•Ñh4òÀº #»wžpæ“b¦zs†ñ†ý9¯MSZÙÎ"éŸñC~Ì`SÙ#ËsËb½ Í‹ó9¤äÎßî•ÃGDÉ„[ £¹¿­¡À¼*»Mƒ›[cu °¶ÒÕÜ.Ýñ Ýü±jÎV˜‹>Æ«ðì3Z<:œOözÆõ»t±FxdÁ”Ûí¼n€Ø%!°…áôMÐ<õ[FýëÊDÁ6‰ó 2sp$Õ±ßCRXFµUÖPÝh²û&Ñb}ܡѶÃ2¸Ö»¹ÕN'0¤qÞ£ÚÿØË^ר6vDðÖŠÐ$‰s—ZDîH"¾š äÛ»órÓÄøcSuÇâI.^ìú6FWýHQlàÇõï~Õú+ÌÙ!Æ‚Œ’œ'ÌËòÔ͂ؗ’¥†²¸ñ‹²gIÞœ-ã£8Ö==• |/ÓÒ4â’©šÙ‘*ÀjŠžï^"šÛ/ Â|3,sΈöI Ђ»ÖoÑÎ\¬©ÃcWêŽ,i›Ÿ0šýþàʺ˜ÐðA3ïG‘®ÛÂéw&•ˆ-c÷øŽ"™Þ}e×k—º…=sçÕyåô*ºgHƒ¡Í°¸²vs4¥½Y;ÿëD˜ßž/»‡ÞI#šO¨[Mq}5Ÿ« Î+é¯[”»Þ¨S­Éëï×ò{7Ä…˜ìê[Içô“±èM T]ªºÑzÉ9sïü˜Xã»2ÚòcðÖNÎéRë|¢èêáD¬QVMovSq‚'ËaV£"çœê:i»Ñ˜óÉ«üÝcñ^èIxIežÏ}¦ÎbÚ¿ex»vgãçoâë®ÕðÚõ?:ùj&—ç2ߢ"#XV¶ËÆ9§gÎzæ“ÙÞ­’ª'󾉌Ì=à=PtÇz8ó(q´“è(ÔsãBÕ=W<ûÞáz…-½ÙSŽÑ’‰‚¤Ì—ú‰M}ƒB¯ç<½BD»?Üt`ãl:˜»#i™¹3lùŒøšòSquóa«ˆRZ‹ ²ckzδWh/;–ч`C%—5›xmË}ÙÄÀD²,3ÕßWâXæÐ~'J¾¹†.Ý@ÝL,¬X˜‡«À<›6“4e‹­~Œþ5ê§°1õÃõY_s­ðYê |ófú­¹8Ÿâð%=tð0 Ú²‹Ð¼3EeþuÒ$›¦(â[¨Ðýª‚Øü‚FK‚õ>ýñ6A×°ñJ±ÃÂÉrícÁueÙf'1ŒŠýa|í.ì[ÖžsΉa›c#ÇÚÞq‘ ¥v·rj[ °'˜ª*=È|"efT?\à‰ "p¦¡M½Eüb3‹õƒ€ÞáÖ#IH¿¶ïcnÎäðBß._FPó,g<›Ú­$Ïoa¨‡mõx9ð‡ òÈUNV‹Ös-N¯Ç·{`˜ÂAõ½v $ÿÇ÷~Ö[ ­åITÛ: grmïàÔÝ~u3×WÞïv=d…é§,Ðáñ\ És-©20§g,ùé5qË.2|?Ý„4{sNC^ÅÿÒ•J­"õöIê¬ÜÑ lXz (²_?ãnðÁwé ÏÉýܯ¿3GXygxuʧ%óèÔìÖ˜=>ŠÔOˆ­Å/å5w”çÈ—Ÿ›(Y®ùVO}ó¬Þm¹ÿtàxÐMdBŸb¾tÆÀreé—úý[mõIÖ?ÝŸåîØ[Õ"¸‡Ö2†Ö­Ä'½ï#•<϶(žIéú0(ô•¸ 9ùxu ûãx‹óƒ­×îjbÊÕÎÛñ0+¸Ž}:¡Ï9ªá9ê·Ú_ßñ4ØG´æ­)Pîäç5 ¹f Ê÷õÝ1"¹uȲ‘dJñ–Ù÷f50óÖCÞ Þ:ù=Á¦¢èúÒös}·ÂåÝ:äqÊ#=':u˃‘q5ÂÉa³%£µÉíu¡/õ œW–NŽÑ Ȭü Vö#ê+è[ mE²ln-ög¯ä‰tMùè>=Ÿ\úèòº¸þË©ý§™¹[Ï­ãʾ”u¸Îj?™ÑÀ í1wêÜ]c8.çåL)¯:¢@|þ ×à;¬ãtUØPBœˆû£ ½%=æ³= UcƒJ¾»KåÅÌcu‰¹Ã<óå× Œ œ¢¯F©Èù#×2œ´¨–âÚÀë\œ½Æ"éQhÑi ?åD¾Ûp„/Ú€MwEŒR[fÊQWˆÔ¾nײmŸ0‹àþÔØ±0×þé‡úÞg1´]Å®¥×©jL;"òˆu+_™ËòÜuñìgÅQIiC±W½v¨W+“Åå¼Ï/d<ãÁp}yWÝS„ÕO¾‹vêOÀ¬à„ž‰"öíoµ·s1i™s0¨ÆØ×,ʳBC=-ð°éå)ºšQF•²ÇuÏ\áqÞÞwXH‹Äpk_…ÔZUÞ³`œÊ,Uuš;®<­²„0ó!tòkW`‰ÅY47+vYNGïêÒ(cXñEÊûÛ_kyÊ8†Ê8xæ¸Ñ2ÝØ4ö£[ˆs°%;3å©b•’äÍìÈ»Ì7öîÚ“¬¶š‘ø¢ç(ÚµÎ~¦ÇKcZ\{·47B?UfîÈ÷;’ Á´kº-U¥f×Î^ÊZ™xF‹”±’š˜ Ϋò-4çW29öZÀkqà¤ïéŽz Ïz•ø3Ñ“A ew.œœÓ:Ó¶ zpkiP¢ëìȵÞÓë`Í÷…ü‡²¦ˆ`M&Ë»í3j°³WÇó²°â^á5£L¬ôè…ÅnWH/?¨sh)d½²Ú×nÍöIï°ï‰þ»3Ô®‹°W6;žÚ–]ßÁ϶ϪÊ{‰Oó,=[[øêù)­šdoã {GŒw¥3c Buy´ä¾ÎñŽ—Èjá¤Ø`@ËÒÓãkò]I7¾<ëÀ5GmHÑhÑ~p’¹»Ó.§È§dQ–vmü‹ª¿§ ¹Þ{7æ€ä“/£Î¶zW«lýbzßÆÊæØ¯î¹‡` ñÇTºŒöÚcÙ"ZÆ;§<䂞³OÓ’m–@Â鼸–‰UæCsà`@÷ÔÇY‡ÈøÆ{»Ú.Erèà ³µ ˜Ýº{åΧ£i]óÞgøÈ€2Ò­â·a]!˜:r2"¾XH!sÕí€Ùî|ÁžÈÆìÆVš%°ôVüÐºë‡Øgºùøˆê/•îs/ÍSbn§ªn™4iãt±lzÔµ-Y»Gd[«QzÆøÒ=NéWƒ^Uªd6…PB³ØÖ ¯E×p—šNÀõ•ìdDEZƼi°f奪—©}¥LêäDH1ÅͯL«YE â M¶íÃEsM f;¦ûèpXîÙ?<椰;åÙŠ¤¹5Œï¶y<Óì|åž-µ&GU4äÍëMíøT£î½&¨{t5Êã‰È‡ÐDî嬮ÇEa‘çŒ [ÍòŸ$Îiæþª¦€ù endstream endobj 457 0 obj << /Type /FontDescriptor /FontName /XIRKPQ+StandardSymL /Flags 4 /FontBBox [-180 -293 1090 1010] /Ascent 504 /CapHeight 687 /Descent -228 /ItalicAngle 0 /StemV 0 /XHeight 400 /CharSet (/approxequal/arrowdblright/asteriskmath/bar/dotmath/element/equivalence/greaterequal/infinity/less/lessequal/logicaland/logicalor/multiply/notequal/plusminus/universal) /FontFile 456 0 R >> endobj 458 0 obj << /Length1 1635 /Length2 9706 /Length3 0 /Length 10545 /Filter /FlateDecode >> stream xÚ­teTœÛ²-îN°`»»»»[ph¤i‚»»ww‚w Ü‚…à<@€ìýÎ=wìwÝw~t¯jVͪZ³Ö¢¡P×b‘°r²Ê:ÝX8XÙ:šzR¶æ`K ‹·2‹ Ð ¤àfîx…xPhh¤\€æn '°´¹P ´H-œœ€”ÄÛdcë åa`bbþ·çOÀÂû_Èk¦+È  }ýð:8A`·WŠÿu¢p³¬A@€”šº‚ª€^NU ]^‡Pw·pY”A–@°+`íäpøÛX:­@Fse}å’p˜\!@KÐkÐËù1 @G«ëë7ä °q1»½ž›¶tp·úÓÀ«ßÚ鯆 .N¯ޝØ+™º“«›«¥ âx­ª.-ûwŸn¶ænj»‚^a€“õk¤•“¥ûŸ‘þÂ^i^Q7sØàôrûS˰¹B̽_k¿’A\@µáî Ûü»f€ ÐÆÜÅÊèêúJóÊýçtþ='à¿Mo8xÿ•íôWÔõrs:X³¢pp¾Ö´t{­m£°ýY°µ€ƒýo¿•;ä_˜Ð寢ÿ³3 ¯M˜[9¼V@k6U'·×’úÿʬÿ9‘ÿÿGþÈûÿ'î?5úo—øÿ÷>ÿ“ZÖÝÁAÕÜøWà_ï @ðç¡qwüyk@–ÿO–¹#ÈÁûÊûg¤ðïfÿ¦û'ú7»ØæUnVö¿Ý WYÐJäfi °6wx=²¿ü:`+ ‹ |•ö¯S}Mâdÿ¦m ²´ÿÑ€ço¶úgû¯jýÕ<›¶º¼®¤,ÓÿüÄþ«þº nÚÞ àÿÒSq²ú/㓤¤“À‡…ƒ‹ ÀÂ)Àþzùø\~ÿCÕ¿ˆ8þm«˜»¹€¼Fì¬ìì€×ÿýþmÿƒFlédõgy´ÜÌÁV¯ûö_Ž?°¥»‹Ë«Ì=¯ƒÿËþkó@/ %Êê’“¥P¨]Fv¦[AþȤ´Ñ@ìH¤¼I»¤(°Î©7 #ò›@µÙïú0Öæ/‚Ïíދǧ]Eƽ±>|ºÞtàY!‰Cöm'Ó^0›I9zæ‰^¬Ïù‚òœ!/»îÞö¤†¦IÙoÒ/\.Hçw TEo¨o!þ–>&àua5Cá4ŸÐ¦ÞÝÒ Ž ÷^Â÷ï3å% ÓyÀ¡ÓÆ:ç‹êTI€¨v0Ìß"vDÆd*ãˆ&AÍ-˜lœnüwð¡æƒVƸEå×AqeârX‚%ui÷‹ä7ü1¬ºLWM!ä÷} ßåñÂBÑÑ.g©3ñn¥›ëDÏ›¡…Ȳ‰ÈX;´)[TQ¾–Ï’é u4¾öÖ vzQ# C›Ñ2–ÏËzrKÀzÞ¿ª;ƒWœ!TÎé#…¡áù‘ÙoÀø¼‚äî–ðœËg—Síd€‡ÃÞ~—9ÿ¯a-3;j]¤û¨Lñ™d¹…îŸj yU‡ü„›šœcŸø2fYîË?=ûã. hm úÔ´ðnä=5€ùÕ6Á½ÒÁÁc%l0`æ ’uŽ‘ Ä´‡€ì}¨íÝ.S²5aÞæuBvèüž Zñ "†–01b=µ:ª6ŒKÞYgOï# Y†Mµ7Õ€·;²“–ãsç…·G˜ö˜ÐÑܾ~gØQFÂJrÄ­žfÉnöm:k}~®¥MSÂí¬]±ˆÅX•ÎvØ2g#tîjîY_s¨òw'‰×ìÇr]‰ÚIz¸•ç \ùà|³.cs,/1kVÀB©ÞM«øƒ˜ã{ýƒ9‡×|zbYˆ·Æ¶âÊJSPí'7¬ùì·Z/´6DTtw#-wm­W®ö…Pë•OM %ÀzÕ~³èéV‹ØÏ¡fyG™ÓJçC Ç»à¿/ガrœùïE-$­™)Eˆº+Ë}õßËRú&LP°ªñ»üˆ™¦¸<ÃíVVQQgm‚îûIƒ¢S¼»¡9Ñî&¡W;ª,Ý[²Rê‡k\Æ£%™pßyÜ0+33hó¶Ÿ ï·hýðøÔèÏZzÅ —ž¬¬øtPBÄèã¨õž¢h͹Tú{0f}€„‘ðÔAÕÚ´ Èg2÷¯æ‡'iŠ©ÛËjVK* ¢£øLŠï[í+7«ÁoªJxNG3çIvä×áÖ¨&È:Ø[Ö‡çRÓ”÷BüK¸R"Ý”O¥è?¥„P£Oí,›¾b19Þ«ZˆÇSã)UØ3Q瀌úøŠÂ3Wû®ÏR«8w†â…Œi U¤Šµ–‰•¨ßGDE§£ßÆ¢¡ÖCÆÀù>‚“Vku×OS‚}Õ‰þ;’{RKˆ:=†‰QŸIl¯üÜÊp¯«…P2†¥·HžÜ¨æ~áôÑ ®Û»,/¢é¥ý^Wp­Ù>®Þü~ ˆA̸»öH—íÿÁ'RÑ>`=WE%5pÖYXÓØg¬K¢×ê-ϬÜͦ¶yýɱš>Ýæ²Ý•gz“1µ°.ë@ÛjS„ÿè7…ÔI·Ei~©Ë²¥©0(Aa=ø»‘WK÷oGèºs´oï1ŸI2Èp˜yðzéq=à Ô¢Ã#RÅ3özšµž„ Ú2l~¡ç*X×-,½”rÛy`tî©ò6Îɲae\¯YK‡kíñ¯¤„oK‘hhr‘A1›^†•³ÅP,É;,¼ üOaü‹vÈ,ܬ¶Qߨ}ú»âŽ©ÌdöÆ×±×Î:¹1'Ô¦åišêñ †æHÃzi\~Ñ2v7É®”eœVÄÔ{qŠÁ’ )‰˜ðW,º)š»¢I™‘mÑ:DLxè>ZQÃÖ¬—‰Gê'"š†ÄñíÇÈ;Ä•,Ø´ñvõš–G%‚;w®èsn[í{)°4{7*ÒÉ´ò8QØœÌç¬CgçN6¶ìJ—v‘á³ÙkȘ–g+íä)¼QÈË4È´iK£ [á±®y[ß*qË`Ý'þˆ«¸ZJý2¡¹ZÖ4`¼cäm47|‘2ÙQíA¾èãwŠ]c5‘”M7匸@ÉÒÀ¨"Oaþ–ç…•¼…¼wô£oxii4¦,š«÷¯x‘;𫨅´ØÅÔú_ùÏwÆåcY¥Y«{‚ö(Hå‘ÑPBîr+!Zæ2Øã*0ÆO©4gwi(z(ЬÐö¦Ç›o½ûêk#¸¹;´/·ÑÒ‰”ÌÛê“—è=ÕEòaòà‹f9$vôVnD¸—Ño©7[¬’¹§O9hæ]ˆÒÀÜ{å–(wD2n&ß7fõ±4ðiœ{š!_è›+yÎ`ÓгüzÇÑcÔF)CMpµAoÁËë'¶p¼üØ!b™ÅȨtñ./³JóìB„#Nº@¸7¿ÝïY(š¬s ðÌ¡,iG·í2»»ð¿H#~L%"¤º×§)È8ÒY²XÏZNÈYGj-ÕhèǦ! û>J,º7gfYÞ0{÷Ó”üèà©÷ЬÞÉUÏ ›ïdôS ›Ì ’›4À-,¯9÷ÓѾ7”B,[·wý¬¼æˆë¡Æ•Añ ÆËœ‚³‘ªC<ÝçôTðh²ùîT_ýœÞà•÷º¦^ÝÂKyD‰YÍ©lbÀ›a!Jö'µ*wsù´ÉI*ÆÛ<—ÈbiÞjØæÒ9 “„?wâI*tÔ<Ì8lpyq·KJ: ÇÃx!zLܹ¾åKƒ “ª›nÞ :£/g/ƒ‹æKvÜÇ(ž®[ßS«Ÿ­Ö޶Uó2°¬÷¹žQΊ!„>D¤ôcàO2?oGÿþ®M³X`Žëœ8Ê -_ëì-Ö*q6ÆMþ„x<šÐòC¶Ç:öÃQd=¢—!u¬³“m¦š;Üžª÷E«ƒ¾¾¶cyeÙ"/ûß~Ë%>—”qH:Þë²À2%+n¨Ôï~–cݬ]Ò_†»UÖ,€íAœÐlå$«h£7ëXd•PÚy`\ yÿ¨óQõCæ{ƒsS黨å0.¾‘Œ¬éüŒ cÂ5Ùþ±˜ËJÌÜç òÚmÞ÷–ì~ƒ%4¿Ä½ŽÞ£ºB[« ëpÙá^&îÙË¥÷3a>Gí3¿hŒ%é[dñF$úuØÿ^ÚÊ][÷…RukîÙ¤‹_¬ A¥æ ³K°{ÄQfÅ>Ã(ÕîZLdE'‚š˜¢¡™f)j‘hw³¬ iu‡zi6bïÇKŽ ö)z¨(j÷©mƒ•`q 4'ùa“ «NZ¤yÄÍ:àÊ¥¥Ö+p§pb#GÏÑÌÕpÇÆWJ6ã÷i˜ü|ÊýÞÁ8Ê#Õ„¨þcÏ^|y’L­ªaßæeÌ96o}Ç–º°fU4"ŽÏv—A%÷ÏÒ~<ÙxY†âZ=2D„Ú£ØBQSGe…¥ë$¨1kõ ’ P_üê^ì¨Q3µ®_F*d3Øå…BHÈÇØ¿ó©æ«ª8Kgµa¹^úhØ@óóÑ_·b߬"¹**Þì‰À7}mO ÷¬Gë]F› UÓ…>ýÂWf5žÂqà3‡e&úá"6ä› Þy÷ÜÖµ1é?Øg‘¯f]‚ÜìV8®Z@üLDqïÞûXò˜È¦®&ó¹à "ïñWMI¯öÍTÇiáxgpK†sž$gVøÛ³;ORf,ôZZ'¶QxPe¥pz šB¤…¿‚ Ì!¯] “Mc¨ ÐÞj¢óZÌÕ¼­›Ãë>3Þ”´øˆ§ ÈŒê-¼WŽô›L$|^¿’€¦â`2¼¾àdP>H‚˜ü°ÁÞ ¡: Û«¤?â…—šÉ RÔsåd¾'€½œ¯P’Sµ ÿÔùÕ•ÝD”Íq¾.)açŽð–µLð ù,þ3ûJDؾ‘¾v>>dÃÛ&§}g?Ûo¼NA^€i=A–óJuå.L4lF Ûe.«‘2:ü=XGÆ…°œMâ›ËQ܃í¹j¸÷̈lIß=?üxü]3_KÂcâDضˆ 2ÙÊœÀ}æ:²–ð°sÖËêØ¤¢ÙÐXmnìϲ™"HÞÞË =`D=߉ѵêR_Ìñ0¯C}"œ9Û¹ Ð"«'ÿ  Ïú©bL>PÚ¸f‹i‹$½’,þ¨õÕJî¼Ò:õ%æzÉ:óBs|[%iOmo“ïÚµø0ƒêÕ‡¯C95»®Ýåu»bPPNpZ•ö•RiýØ‚É%E7ÂP´€ c¾+šRÌ¿>•í²tá”:ÓÜ”-ÍÐáXÜËY=ª]XÓQê0[¥‰#ÙÅ-¾N5†œ^µ÷×é­·JÏ!“ðLQÏdñK•É1¥4¿™Ðjñ!8ACyª¬­*o‘ýS ÒÚ;bcÑÅLã…g/ä k  +VY‹•§3urØ)2°Íƒ„8»‰b~Ê« 4/rCNvgl!ؽu·HÆÚïôœQ½©Æ·NHU;ÂC»sns2š%««ƒ¿©eùkHà÷C]%ᤥF¡œRÀ—I(Ç„ùa­Ä$ Ê áÎCRÁS‡¤’M'“K¼â½G‘ÞPĉì¤IVöp¦:Û¡Ýl©0Š‚|mèKÿE_è©5ã«ÿ’Cóë7¹Ò²–Ô˜÷%YT’…~®ó”ï ÒÖ¬Öë&#ì-qŽÁܨ> Íaé²N™^©ž%YÜ9ž¿ÛA:S/í±çž€c˜rÒ /õoSHæë ãÏ`ŒÄIž±x‰ ¨¬èäkµ§ôI ö¬`¸Ýظ}x¾3â³r˜ Âm‰sm:“ …ÖË”Å>£¼!*ýu„·T)MÝñD²¦fXJ·ìÛ÷ÂΪ.¶/¬ÂÄ‹0a‚]¸¥7èÎ+†7œF·#Õµ9ž+M\û-°„«J©ôã¬mßÝ‚êêÅHâ”ýkSåF ˜a4v” ‹¾ùã™Á·Ÿ}u%4݉.Ù³>78,ÖÄú ¯}¸ÝˆQ†#™:ܺ—ÙË/TF*î{U=ô#ÔÂ%¥BÇUÁýޝ8â¹¾ŸºÛœz|Æ´v¼—…íU¦¼³÷BÏݰ¡÷E¼Vvq¹ÅèÁê4½g„qKÖ¦6Ÿ-²-Ò\FXw5 Ö±*DŰù’0ÌÝ.Ž+)ÚlîrŒÝlNp†ú¼rúò·™ý‡(Ø)ëæ˜œ§Þ*ü,c:e+ˆ¯ }~ =‰ÎÛFç.%ÎÃ"@2hÂ÷kÁœ±§Fùò×UWwÚ^Ã6:œ‰X½lwòN«ÂL¥¡NPàÆ›Vä÷߉³‰ojà—½ií¥:ãDÐr æYë­bþ½‘j“÷Œ¶¼a*Гbº¨ëÛµ–\5Q1‰;JöÇßÓ§$ ê&.]ªèÈ Ó§ì˜h4ÎóáCý¼sàIÿ)èÄRƒÔ½rƒr‰AJÖƒM|µ(aÂMî–kYžs%Zt³ò’erϩʥyw£Á Õ“1W K"F Ô V Íh®œº:¦Ho˜SJ|Ou:$ÏBÛYåU7¶XIHàñÄ4›Së²Ýºµâ@0C¼h{û³!´„§d3ê6ªN_s+k»L/éleº{2´¯TŒY3 7ý2–„`U¶”F‚€“¼à]u 3cÓ˜®гpl4ÄxtQÿÐæŒ«>ÝH¡rÎ 6\YÔî&ïÊòwaD›®/³½¼¤©ojßòœˆ—x†ÚÃ-ÓÚâ™~H\&.¤‘®»äͶyIðçÔtu»Ü(¯<Ç“ÿ†rü0ÙžjdWºÆ”ïuJÌ4AĽžk€w<wœØð¬Ü¦<½WjÀÜ }NðTÐÅëiOË6ÂßÄr®îyïy.sW—ÒÖ®º€° aï‘D„wsV6élÒlQqšGn:%U¥¹w¾åÑWŒµöÁ…ùh¤iŒ7|á`ùÝô­øcà‰Î†ŽGu2«¹ð›ù‘pé É]éS$þï)×"'¢nc†i‚cÜ¾äý~ £èìf?þÒH8Ÿ¸1z¿AJöÙ|?‘Žóv–u:ƒœyEÉü ôè¢é¸ˆ¯ætBÞ­l[ºp¾{@íæ¤tp+Ïï‰-?2}8ÚÇô×LÞ *×¹ò’¥U °‘e š¬cTĪm·Ï%Zîî ž絿'óKLµ8OòÍ–ÏXþ?¢œ¹S`­©A ¢-&²©ø6Q·»iŸ²‘$Ï3j8Õ™L‚î¸ÀüÐ øc'Í“d>oVGù,Õ§O“îco7"^ÐFB 3‘4rºh8&V¬Ùã–ŠÈ츧¤ë?;`(=Yh èëá^– …Á)t«}̦S-Ì^´’!’J¾ÓÁyˆ”›1éë*eÞ¡F—lmêßÅ¡…¿Xâq+R}[ëê yvw$G@Sð!¦úÆýŒŒ-*}¦`SpñâˆZ7drd-µwNh›´¹øgŸ’)ö6ޏ´QU_–ìn I)Û©ÒQêÓØ-fbm·Ï¤}HùÁøíéD³SX¾ÑÔêhe¢+s]•ä²Ù<‘mUäÇ¢f¹T¯g| ŸäÜeöÎÛE^{Ía $²ºÙµ§6E­ÊwØ^Sè'¥VÔ0€÷!îG-TžÚ$sØ·j½š€X,Åê$ÜvDÖ¯ç…k^®Ør¶ÚðòjؓޕTݼL^ ïr—]•qe€A‚ÒD_ ©¡iÈ‘õ`D²ðø$Ê©¿œ#mäkbÂîÝ(@Ì&)͹¦w*%Ÿúu, ¬Û0ÝãžJ—¼e!yœÇÅp.(N1Nú~yz£â‘BÁnõž”J| XËÆ"XÓwNf0áËM_@C$èÂm9CBþlI„Þå¹Ê<~[ò^Bz¹tOIÕ4t6HÎ^ ²sÖ¡íyaDïú\õSNîù·á™ÀÛIÖ#­Ï,ÔkÒÞFÑÄçó!+ô躷“YŸ† éŒ '¬Zf[2`rýõ>kãA‡þ~ËÊm©âɺïÐ7ôPìb³÷){Uª9«W;Þ8¹ ”lÕì{m’eëÈWg¦TWâ]^‚õGµšƒ“Øc³b ×sÆ>ò~÷½jsÁå˜qsVßÔ#!ÌÆš×¶,Ð_yY±5ˆT%œ»ÍÎvÒ:\þ½À’á‘:åÝl§§©pßl*²{/2´ö-[†nv£ýñÿM<_¦”PÎÔ»ÓÚ½¯ËwgyÖ"g‹_DS]•h?« RŸïÒ4õøK~çWŸÃâfWòÕJ}¶ØÒí,?ÿ9sz4áYwVl¾Ÿ¸N¨äyq8gE•o©»îö÷½Þô' Ð*%F}Ó…ãUœÐ^]#É!]ˆl)}sX¼qÂv;¦¬­‡!’óÉ 1œ…=±&:ˆ:r“‘e$ N¯EÚô†Oé)z©KæîÞR,J—ÞIƳ}‹[-f'ŸðKÙ?Ï2`çŒØ¹îÓlÜò—ÎM±íÓÄ@m"Ý>»R®öÁ´Ãíí/FåÙ*$Dö”õ€ÙbC?ó ÄÕSpÍŠ|óùI=#ÙÕH!0Rlzî냔Р1H{«¹(AíeQí‘5 ;½›œ8è0{·ݺHgÈ ú^W:&E–KzYø|³Ò•Ï"~ÆŽ`)©ÌŸÕj8/têÔ¿\bi%ÏœŠ÷¯|†z¾Î~t4BH¹&WÛnàfÊæx²è`¯ÀÃ7sCSÌš(0¬°[)j†bô•êá†sÇ¡ïZδù»§Ê¨³Zj¼[_f^³"3ö,8®`*¡©â—'ýnÒ„¯ä¨ŒSZø”ˆ¿`I%oò[sao÷Ï ±Dçø~]×\b¸Ò™ìf8D§ºÞû© ®‹ušú<È"ù2qŸ¤RʾY®ÅQú[¨-*æ!´â^^H䩚”=ìt’´‘ž*®žçs%E¹ÁÞåèx5ìO¢ŒF÷¤u^êÞsŽMýØj.'jÓµOû\t¤´Œi[Ë– „i,ŽTÎPÓ“Á&Pl”_®R}³ÿÈV|ÕËäY@M5ùûq­âêâ%COàâkZ’-zPˆÅÃò·çqt¸ñ÷®Ð]~Cû¨¾ }Åà$Óg¶÷ >ݰûBgÑòršÔs“€ÐÎÁ5YøôÊQB;›tǘdágê"t•”¡Íõ&ô霸æÓMÉ_)EwþjL!³,½‘†Ù‚â‡êþηS$zŽôÓMkÒÕbÆ ‚¼¾ˆbÃíߨÁÆóÏ‹«¶i AÖGæ¾E;މä­+ÓS¶C–Ĭ‚Ç¡w{ôìàă^ª$Òü4J¨UäØá\§ÑöÛ 8‡µ¡ñ³¢Õ)iJq±P£˜ äˆÖdОy4K´™¨•FÉÖ!È£“‘‚íâÆ´ÌÌé~œNL5,Z©jr»ðÖ¬JM± Ÿð¡ç@öx“Τۦ¨áé§Tã´&HbF£-x?a”7Þf*u¸(s¤ñ¡q ˜ôÔ⑲¶`±’èå.õâÒ庾¿7é?ùZÆ 2çðm|ž'î¸7”e9†B— c<.\'OJÖç‹ÆçU¬×¿÷×Ë¢~xĶ•ÞçžÇçèü†Ö~÷0ýôÆIžñDñ¸!½ÜͰ!ÎêªÞ½xF$‡(KØïûˆKs‡"mÖë_E:1sO‘nåqíØA˺ä|ûzós#È÷;¾ë†ƒP¯œÀ ±Ä—žŸb4&V¢jÞ±Õ?"Ÿ)=¦¢ýß®xXJݻˆ¤µž4p­&êbׯý†ežh ’¼'1rÿø5¯kSSvËwx„¬šsˆpKî´yOD±jõþ71ŒCÒD nÞ7¥ôlñ‡Ë¦sþ#{…B L5«· ³Þs¹c=ß±—‚Ѩ;™çe!D ·=Ë£ëVæ©Ñj’çòø/â‘ XcBähGÈ1¢jýãm?ó·——2—Õ1¹ ÷³$Û´”‘BüŽæÏrz\T$¯s îœ*\D(~ýÔÌP·aû݇†¹O9ßï©•ÔÒŸÉ9ÙFÚêZD÷œIPS*ÍBIÜï?_û‘Ö׊¯¤‰3íGˆ•5à } œço9lž²| hÚjFEÍyyA‚9Oñ—J6“¹‰§\ˆTÂÅ”}O_„ä+™”çÊbW•O8nÌYC§†¶š¢”³ì›H¿çr Ä uTéŸÍ6G«ø”ßXøÂ§s!“°Ô×Çl¤YöÉáçF^(Æ Qªbd4“Ý¿TÛƒÚ„¨|ê% Žóñ‡ê)gp@åÛ˜zg´?X\E¿ÖwÜb2)vë|»¸þÑSDw¬Uè~ W„¯Ÿþ3Í9J Ðy-a& é¶@Kíä°®u5󗸮îÚLHÄäø‡-ÆÝå&ÑÎgQË7õ¤…7X …ÏfÐJzÞ/5é¬ún›o¡hƵËn\¡ç‹²µ›j¢hv°S 2*¡Ê3äs'K§X®¾áƒ˜îÆ¢x^•%šaÉ׌ù!¿{B{üKx04Ín; Ämó«{‹ß(‹ðÈan.ÅïN†ÜOÖ’oQ„ºùdfäw k»ž$0^3‘æëS£^PŠ£1Hy÷¶þ@]~ˆÝñPBQh`^I=§pé¶KXA…ߢ„Áò¹…k[ÝÝEŸUÑâ‰Ø \-WxÖ‘T\ñØå½pe²a|yŒ q]ìílÓS{x„;G÷y#¯8Aáe3þVtö#‰ì"Ÿ"1ÜÉýY{ìК5êN gu5.@]ü”怎%HgDKÉò î'k´ë딉H#Y„Z;?Àûœ)7–…Ý¥ÜÄ]÷„üÞ»Cc'Çü¶ætÂêYYÎbqÔšL¢ýÖ óff&þóÈXÏy¦ûÇìüɾ úCtVnjÞdz5Ó¸$Œ(è?{}›¬ÞËÎÜLñ"…?Ƴ÷é<¥Át„–“F—d |šý¨Já>¬†ÅJCÍØqìêíÄÍì^-H}¼H ŸÛ)àk»bØÕ?e¢hÙìЭ„+ÁŸ&rQ)oÀ曈>Üü¸ß×èkúVï«â…Q‚HE[L4îU'Ÿª$ ˜§F°Mä/ðåZµÜÑg’9¢ì¤÷c’åÊÛ„ ÑGꌗ©QEaE9ýDÊoAbñû»à¦+¸EÝ,&•f[² _€´rˆ»ÇRrt¦—d S uò¢È½*+ŒÓsÞ à¦8\ Úô–;øæl÷VíF¹d>÷_žÑ££Çáçl` Û]Àøät¾µWú)eä»ÝG{Ðø•YËæ”ﳪ<Ò)øëîu#Q˨5€ -ô8>L;ê ÄOL둆7¶€,ŠÉkxlg‚Ã!Ü5Š>ƒ^9Ko8Êd"_žÆ [n¡ [ ÈÙï{[¨Êeg%•Å•L)õ éÂ9xà3&Q¿MBGˆ ¦ñò–žo7X!/üö&>u'¬–5;C:+c¬þ&ሮûò§eî#-Xߣ =2¸²!H¦,î×û:&¤×7~ì[„ÃO@&ú1ׇ‡§ª %uÂv÷Ô%øC‡îY!~6õQ½ÒwîÿþGð endstream endobj 459 0 obj << /Type /FontDescriptor /FontName /TPHVBF+URWChanceryL-MediItal /Flags 4 /FontBBox [-133 -290 1078 913] /Ascent 711 /CapHeight 711 /Descent -307 /ItalicAngle -14 /StemV 78 /XHeight 438 /CharSet (/I/a/b/c/comma/d/e/f/g/h/i/j/k/l/m/n/o/p/period/question/quoteright/r/s/t/u/v/w/x/y) /FontFile 458 0 R >> endobj 460 0 obj << /Length1 1568 /Length2 1289 /Length3 0 /Length 2079 /Filter /FlateDecode >> stream xÚ­T{TgGH*Dpµ Š ~*‘ðÈy*>‚ „  "ˆ “ Œ„™03‘DŠBÅWߨH]¨â* ¢¬´ "KQTØ¢ EÃ"huÑr„¶“hµe÷îYÏIÎɽ¿ûýîïÞß÷…=Sº’»X†Ç ¾8Fq…<'ðA±Øˆ"@@Ç›-&ˆBqÌ¢O¢B@L¡ýñð`±Wj46Ž¡+ÂÀJ\N%Aâô»<]èb4:œ®ÿsU+Pq£ ˆƒ¤áþ?Àñ“„?CH¤ª ƒå(Œ`$bä8o㘠Չ&y4×b@€T"0JCÔ0¢ÔAN@‰ (IÒ¿J‚XÂ(D( ¬PÉt輜^M¢$pº"Æh2)NR$L J Ð]¥>¾ouRq¥ëM¢4 p9])ÃaU‚QzŒ¦¡Q B1PˆšÒõŠA€ %• HC÷¦É”ª—¡"i+>(p 2B’4 Í­Û·9Á驪”J…F×W½×€R$¢óXBÝ“61‰E1_g¿?&ÇPð6/S)Ã6 „~AœwžÖÉpL¡2DÎâKpŠî 8ÂUÞÇ3õ#XúQ ý(vþfŽ6äÃê9ÿÓËÍã«R($Pmíûÿ„ÿ(P…æE£k·ZV ±*DŒ†ý)ˆt1K/[À¼M¢¤/ªFdR”‚ã€RÐ[ÐçC1B(P ¡ÝÒ/ pÝD£ 8ŽÇt[uvÕC&-›Þ¿^4? ,Täø~@=,¥ý¤B4JZлqÙû@wØÛWƒd®p…s‡»¸ =RþK=‹ðCQªô¤¡~ÞwßÑÚQ4K0—é칸ˆ K@SŠ\\@²¾»2D­»ÿq€ÏÃpŠ>”**E÷nXºW,¤™ùë\]–õfXEô5Ò¿wzG¿Åúk jfµ·áð¼ôõ‡ss¨Ò)ùuM>Wj„Fu[•Åe!Ç SOãÕ›ïøÁ£$zøÌV^y³çÏ•šÖ>åˆ6À¡»¡ÆBaW}yvÔ:e¶ýå‰s.¹9vÎ*6Ëy–™üüÎòŒ5®‚UÝ]MÁ+¢Š†?™Þ|É™0~þÚ>uö†ÂÔɶ¯”ã7Á‡Îí6¯šPnðié±¾'sö?~ýÊ®¶±¾îZu?ó²ÖÊ1o· {Þ†ÙœŒÔÄ<«…kBKÈφ ƒ¼Œ²† ¸»+v^40õì<ÓÕQ% )[¿Úr¬ø¿£¸p™l°g¨cÏtm»7Oäè5¿jBÍbG¦ð¬$mRPËýÚäoU“µ²žÐq{Œ‚)³]«4v>¯v28?gæd-ûë…î‚¢‚©DoÛÉjymév‹c¹íݧjd6Òx¥˜iÛ“¼)<­ïéðæ X<õbK´8Ý¥"²nïøèüIÇz>wd/ºÛÙ&?ÝüyçZ×;ÃíÚïmf¶Ú¥wz]¢¦fò—ZM+S’vCrQª"ð…O‰^u`Ìàƒ‹9¦ÓL,fl)¼9Ѹ¢öôÕôˆòWŸîxíì›úŬµ«j–=é·{|oòù|C•á™p-f_Øw;‚{üYÊÕEela¦õÙ¿©.vgÇuÎÌ®TQQÀCqn——…糤̓ƒÅ_Ý4mº;o÷‰ÙÁá’­/ÌSI;m×!ñËFÑqÌÚ²•׳sß”Uiö„æmwÿgÙ/3NŽpš3¿|0ÿ2kWJ³ûþŒòCm{„,£Ô{¢­´Ÿf«Ë¥‡îµâ+\¸›÷O›fM®¡®;ÇH¦ÛXº'Ub…§±(ï8^þ²’“{<ú®)þ/wÍ7ï­°d–-÷øš)ÞÎRô÷þNhÍáY«ŒƒÝ£‚ÝB rnY9s²ýž=¬”Tk¹o&»•iÄlŒ«¶9ºÄþ‹¡ž~¿Ò¬ÄJg‡KÉQý+XY–ƒ³ÊYHŽŽŸÒ[¾®7À¤5¨ØÏ¤až±íP|#ñr„ÈÀ¶ï®ù ñ}¬ÞlÃéþÆ|ƒÓ¶Gno–8š¸rÖ,‹ÅLi[*ÝRgë`^_)䪕r÷{_™Àà™¥·þ 豜Zàöý¤ãO¯]RxãjßÈ¡sØ·f§§H§û³›Tó32ž2o¬ëÞo4u\é%—†`¯—ƒ<“ð2Ï-®Q›â7¦0̶/™éûðûõ 2’Pmä’[]½’©3Ãx!ÆæÜ›A÷æ~æ¬ðs£ëöåñÖžéȘ1v&·'µíRq²üæ/Þ[VPÚóRoI»0±5òÚmo¸??±ÿD[ïÀãÀ©[/°.;UuòÆ/Ä"ÆõÒ;{ÏÛÎÌ#êö™fð3¿”mìOxÊI–Hxh”° ÉµË“øË¹’•'"Ûwö]xX-Jœq >`áÀT3Ì[tÍû§íçãïg˜¿èk*Þ[Ñö]ì~Ì'Æ?Þ¤r°Õn9Y…8ç†_<Ðv¸Q[eí—02°.4°{­ŠÀ€²D·Õ“ŠÔ_g?p (5ÍŠ:º{¬•éÐ1mZ䙢æËO¢ÐšÉI®}¯Wµ,ÿÇjuIâˆK¾ê_õu#w-gý ¶„Å endstream endobj 461 0 obj << /Type /FontDescriptor /FontName /JWUPMO+Dingbats /Flags 4 /FontBBox [-1 -143 981 819] /Ascent 708 /CapHeight 708 /Descent 0 /ItalicAngle 0 /StemV 0 /XHeight 400 /CharSet (/a64) /FontFile 460 0 R >> endobj 413 0 obj << /Type /Encoding /Differences [2/fi/fl 11/breve/minus 16/caron 37/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question 65/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y 91/bracketleft 93/bracketright 95/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright 136/circumflex 147/quotedblleft/quotedblright 150/endash/emdash/tilde 167/section 171/guillemotleft 187/guillemotright 230/ae] >> endobj 39 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MJNNJK+CMEX10 /FontDescriptor 431 0 R /FirstChar 0 /LastChar 62 /Widths 423 0 R >> endobj 40 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MAPKWB+CMSY10 /FontDescriptor 433 0 R /FirstChar 37 /LastChar 112 /Widths 422 0 R >> endobj 43 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XRDDFB+EUSM10 /FontDescriptor 435 0 R /FirstChar 66 /LastChar 78 /Widths 419 0 R >> endobj 145 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GMBUNT+MSAM10 /FontDescriptor 437 0 R /FirstChar 92 /LastChar 92 /Widths 416 0 R >> endobj 42 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BLWHND+OmegaSerifGreek /FontDescriptor 439 0 R /FirstChar 68 /LastChar 68 /Widths 420 0 R >> endobj 41 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UTJNBZ+OmegaSerifGreek-Italic /FontDescriptor 441 0 R /FirstChar 49 /LastChar 122 /Widths 421 0 R >> endobj 329 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DIKBRS+URWGothicL-Demi /FontDescriptor 443 0 R /FirstChar 2 /LastChar 122 /Widths 415 0 R /Encoding 413 0 R >> endobj 26 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZZWZSV+URWGothicL-Book /FontDescriptor 445 0 R /FirstChar 3 /LastChar 124 /Widths 426 0 R /Encoding 413 0 R >> endobj 361 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BNFWFB+URWGothicL-BookObli /FontDescriptor 447 0 R /FirstChar 45 /LastChar 122 /Widths 414 0 R /Encoding 413 0 R >> endobj 4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /CHAHEJ+URWBookmanL-DemiBold /FontDescriptor 449 0 R /FirstChar 2 /LastChar 230 /Widths 429 0 R /Encoding 413 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KGZFXH+URWBookmanL-Ligh /FontDescriptor 451 0 R /FirstChar 2 /LastChar 230 /Widths 428 0 R /Encoding 413 0 R >> endobj 37 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TZNEST+URWBookmanL-LighItal /FontDescriptor 453 0 R /FirstChar 45 /LastChar 122 /Widths 425 0 R /Encoding 413 0 R >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DZMMCD+NimbusMonL-Regu /FontDescriptor 455 0 R /FirstChar 40 /LastChar 122 /Widths 427 0 R /Encoding 413 0 R >> endobj 38 0 obj << /Type /Font /Subtype /Type1 /BaseFont /XIRKPQ+StandardSymL /FontDescriptor 457 0 R /FirstChar 34 /LastChar 222 /Widths 424 0 R >> endobj 80 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TPHVBF+URWChanceryL-MediItal /FontDescriptor 459 0 R /FirstChar 39 /LastChar 121 /Widths 417 0 R /Encoding 413 0 R >> endobj 76 0 obj << /Type /Font /Subtype /Type1 /BaseFont /JWUPMO+Dingbats /FontDescriptor 461 0 R /FirstChar 101 /LastChar 101 /Widths 418 0 R >> endobj 6 0 obj << /Type /Pages /Count 6 /Parent 462 0 R /Kids [2 0 R 8 0 R 12 0 R 15 0 R 18 0 R 21 0 R] >> endobj 27 0 obj << /Type /Pages /Count 6 /Parent 462 0 R /Kids [24 0 R 29 0 R 32 0 R 35 0 R 45 0 R 48 0 R] >> endobj 53 0 obj << /Type /Pages /Count 6 /Parent 462 0 R /Kids [51 0 R 55 0 R 58 0 R 61 0 R 64 0 R 67 0 R] >> endobj 72 0 obj << /Type /Pages /Count 6 /Parent 462 0 R /Kids [70 0 R 74 0 R 78 0 R 82 0 R 85 0 R 88 0 R] >> endobj 93 0 obj << /Type /Pages /Count 6 /Parent 462 0 R /Kids [91 0 R 96 0 R 105 0 R 108 0 R 111 0 R 114 0 R] >> endobj 119 0 obj << /Type /Pages /Count 6 /Parent 462 0 R /Kids [117 0 R 121 0 R 124 0 R 127 0 R 131 0 R 134 0 R] >> endobj 146 0 obj << /Type /Pages /Count 6 /Parent 463 0 R /Kids [143 0 R 148 0 R 152 0 R 155 0 R 165 0 R 168 0 R] >> endobj 180 0 obj << /Type /Pages /Count 6 /Parent 463 0 R /Kids [178 0 R 182 0 R 192 0 R 202 0 R 205 0 R 215 0 R] >> endobj 226 0 obj << /Type /Pages /Count 6 /Parent 463 0 R /Kids [224 0 R 228 0 R 231 0 R 234 0 R 238 0 R 248 0 R] >> endobj 253 0 obj << /Type /Pages /Count 6 /Parent 463 0 R /Kids [251 0 R 262 0 R 265 0 R 275 0 R 284 0 R 287 0 R] >> endobj 293 0 obj << /Type /Pages /Count 6 /Parent 463 0 R /Kids [291 0 R 301 0 R 304 0 R 307 0 R 311 0 R 320 0 R] >> endobj 325 0 obj << /Type /Pages /Count 6 /Parent 463 0 R /Kids [323 0 R 327 0 R 331 0 R 334 0 R 337 0 R 340 0 R] >> endobj 345 0 obj << /Type /Pages /Count 6 /Parent 464 0 R /Kids [343 0 R 347 0 R 350 0 R 353 0 R 356 0 R 359 0 R] >> endobj 365 0 obj << /Type /Pages /Count 6 /Parent 464 0 R /Kids [363 0 R 367 0 R 370 0 R 373 0 R 376 0 R 379 0 R] >> endobj 384 0 obj << /Type /Pages /Count 6 /Parent 464 0 R /Kids [382 0 R 386 0 R 389 0 R 392 0 R 395 0 R 398 0 R] >> endobj 403 0 obj << /Type /Pages /Count 4 /Parent 464 0 R /Kids [401 0 R 405 0 R 408 0 R 411 0 R] >> endobj 462 0 obj << /Type /Pages /Count 36 /Parent 465 0 R /Kids [6 0 R 27 0 R 53 0 R 72 0 R 93 0 R 119 0 R] >> endobj 463 0 obj << /Type /Pages /Count 36 /Parent 465 0 R /Kids [146 0 R 180 0 R 226 0 R 253 0 R 293 0 R 325 0 R] >> endobj 464 0 obj << /Type /Pages /Count 22 /Parent 465 0 R /Kids [345 0 R 365 0 R 384 0 R 403 0 R] >> endobj 465 0 obj << /Type /Pages /Count 94 /Kids [462 0 R 463 0 R 464 0 R] >> endobj 466 0 obj << /Type /Catalog /Pages 465 0 R >> endobj 467 0 obj << /Producer (pdfTeX-1.40.3) /Creator (TeX) /CreationDate (D:20101231111430-08'00') /ModDate (D:20101231111430-08'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6) >> endobj xref 0 468 0000000000 65535 f 0000000411 00000 n 0000000307 00000 n 0000000015 00000 n 0000517684 00000 n 0000517857 00000 n 0000518842 00000 n 0000001261 00000 n 0000001157 00000 n 0000000490 00000 n 0000518201 00000 n 0000002264 00000 n 0000002157 00000 n 0000001341 00000 n 0000003765 00000 n 0000003658 00000 n 0000002344 00000 n 0000005122 00000 n 0000005015 00000 n 0000003845 00000 n 0000006201 00000 n 0000006094 00000 n 0000005202 00000 n 0000007312 00000 n 0000007204 00000 n 0000006281 00000 n 0000517340 00000 n 0000518949 00000 n 0000011545 00000 n 0000011437 00000 n 0000007405 00000 n 0000013176 00000 n 0000013068 00000 n 0000011625 00000 n 0000016901 00000 n 0000016793 00000 n 0000013258 00000 n 0000518026 00000 n 0000518371 00000 n 0000516291 00000 n 0000516432 00000 n 0000517011 00000 n 0000516860 00000 n 0000516575 00000 n 0000020383 00000 n 0000020275 00000 n 0000017069 00000 n 0000024038 00000 n 0000023930 00000 n 0000020527 00000 n 0000026341 00000 n 0000026233 00000 n 0000024206 00000 n 0000519059 00000 n 0000031523 00000 n 0000031415 00000 n 0000026449 00000 n 0000036226 00000 n 0000036118 00000 n 0000031678 00000 n 0000040848 00000 n 0000040740 00000 n 0000036368 00000 n 0000043391 00000 n 0000043283 00000 n 0000040979 00000 n 0000048673 00000 n 0000048565 00000 n 0000043524 00000 n 0000049341 00000 n 0000049233 00000 n 0000048817 00000 n 0000519169 00000 n 0000053058 00000 n 0000052950 00000 n 0000049423 00000 n 0000518696 00000 n 0000058138 00000 n 0000058030 00000 n 0000053176 00000 n 0000518520 00000 n 0000063205 00000 n 0000063097 00000 n 0000058245 00000 n 0000068551 00000 n 0000068443 00000 n 0000063334 00000 n 0000069659 00000 n 0000069551 00000 n 0000068693 00000 n 0000073266 00000 n 0000073158 00000 n 0000069779 00000 n 0000519279 00000 n 0000076295 00000 n 0000080749 00000 n 0000076187 00000 n 0000073385 00000 n 0000077251 00000 n 0000077481 00000 n 0000077527 00000 n 0000077804 00000 n 0000077825 00000 n 0000078129 00000 n 0000083860 00000 n 0000083749 00000 n 0000080869 00000 n 0000088317 00000 n 0000088206 00000 n 0000083992 00000 n 0000089162 00000 n 0000089051 00000 n 0000088460 00000 n 0000092233 00000 n 0000092122 00000 n 0000089282 00000 n 0000096417 00000 n 0000096305 00000 n 0000092339 00000 n 0000519393 00000 n 0000100764 00000 n 0000100652 00000 n 0000096523 00000 n 0000105508 00000 n 0000105396 00000 n 0000100907 00000 n 0000110074 00000 n 0000109962 00000 n 0000105638 00000 n 0000114697 00000 n 0000114195 00000 n 0000114083 00000 n 0000110245 00000 n 0000121486 00000 n 0000114585 00000 n 0000114289 00000 n 0000116578 00000 n 0000116805 00000 n 0000116852 00000 n 0000117281 00000 n 0000117303 00000 n 0000117679 00000 n 0000125526 00000 n 0000125414 00000 n 0000121584 00000 n 0000516717 00000 n 0000519510 00000 n 0000128895 00000 n 0000128783 00000 n 0000125684 00000 n 0000133321 00000 n 0000132833 00000 n 0000132721 00000 n 0000129002 00000 n 0000140237 00000 n 0000133209 00000 n 0000132927 00000 n 0000135555 00000 n 0000135781 00000 n 0000135828 00000 n 0000136249 00000 n 0000136271 00000 n 0000136621 00000 n 0000144677 00000 n 0000144146 00000 n 0000144034 00000 n 0000140335 00000 n 0000151908 00000 n 0000144565 00000 n 0000144240 00000 n 0000147070 00000 n 0000147297 00000 n 0000147344 00000 n 0000147769 00000 n 0000147791 00000 n 0000148145 00000 n 0000156149 00000 n 0000155620 00000 n 0000155508 00000 n 0000152006 00000 n 0000519627 00000 n 0000163223 00000 n 0000156037 00000 n 0000155714 00000 n 0000158414 00000 n 0000158639 00000 n 0000158686 00000 n 0000159109 00000 n 0000159131 00000 n 0000159479 00000 n 0000165884 00000 n 0000170550 00000 n 0000165772 00000 n 0000163321 00000 n 0000166779 00000 n 0000167008 00000 n 0000167055 00000 n 0000167422 00000 n 0000167443 00000 n 0000167751 00000 n 0000175163 00000 n 0000174664 00000 n 0000174552 00000 n 0000170672 00000 n 0000182809 00000 n 0000175051 00000 n 0000174771 00000 n 0000177707 00000 n 0000177936 00000 n 0000177983 00000 n 0000178410 00000 n 0000178432 00000 n 0000178809 00000 n 0000184738 00000 n 0000190600 00000 n 0000184626 00000 n 0000182907 00000 n 0000185963 00000 n 0000186195 00000 n 0000186242 00000 n 0000186591 00000 n 0000186612 00000 n 0000186934 00000 n 0000195511 00000 n 0000195399 00000 n 0000190735 00000 n 0000519744 00000 n 0000200097 00000 n 0000199985 00000 n 0000195667 00000 n 0000204943 00000 n 0000204831 00000 n 0000200229 00000 n 0000207989 00000 n 0000207877 00000 n 0000205077 00000 n 0000210129 00000 n 0000215312 00000 n 0000210017 00000 n 0000208085 00000 n 0000211268 00000 n 0000211499 00000 n 0000211546 00000 n 0000211921 00000 n 0000211942 00000 n 0000212258 00000 n 0000220286 00000 n 0000219777 00000 n 0000219665 00000 n 0000215447 00000 n 0000228888 00000 n 0000220174 00000 n 0000219884 00000 n 0000519861 00000 n 0000223675 00000 n 0000223906 00000 n 0000223953 00000 n 0000224384 00000 n 0000224406 00000 n 0000224790 00000 n 0000234086 00000 n 0000233119 00000 n 0000233007 00000 n 0000228987 00000 n 0000241655 00000 n 0000233974 00000 n 0000233215 00000 n 0000236668 00000 n 0000236899 00000 n 0000236946 00000 n 0000237371 00000 n 0000237393 00000 n 0000237768 00000 n 0000245028 00000 n 0000250210 00000 n 0000244916 00000 n 0000241778 00000 n 0000245908 00000 n 0000246140 00000 n 0000246187 00000 n 0000246530 00000 n 0000246551 00000 n 0000246867 00000 n 0000253624 00000 n 0000253512 00000 n 0000250372 00000 n 0000257617 00000 n 0000257505 00000 n 0000253780 00000 n 0000259597 00000 n 0000265454 00000 n 0000259485 00000 n 0000257749 00000 n 0000519978 00000 n 0000260680 00000 n 0000260907 00000 n 0000260954 00000 n 0000261343 00000 n 0000261364 00000 n 0000261698 00000 n 0000269316 00000 n 0000269204 00000 n 0000265603 00000 n 0000273774 00000 n 0000273662 00000 n 0000269436 00000 n 0000275868 00000 n 0000275756 00000 n 0000273894 00000 n 0000278464 00000 n 0000283503 00000 n 0000278352 00000 n 0000275987 00000 n 0000279344 00000 n 0000279571 00000 n 0000279618 00000 n 0000279961 00000 n 0000279982 00000 n 0000280293 00000 n 0000287634 00000 n 0000287522 00000 n 0000283625 00000 n 0000288616 00000 n 0000288504 00000 n 0000287766 00000 n 0000520095 00000 n 0000292179 00000 n 0000292067 00000 n 0000288686 00000 n 0000517170 00000 n 0000295913 00000 n 0000295801 00000 n 0000292300 00000 n 0000299315 00000 n 0000299203 00000 n 0000296046 00000 n 0000302445 00000 n 0000302333 00000 n 0000299436 00000 n 0000305461 00000 n 0000305349 00000 n 0000302565 00000 n 0000309132 00000 n 0000309020 00000 n 0000305594 00000 n 0000520212 00000 n 0000313270 00000 n 0000313158 00000 n 0000309265 00000 n 0000316591 00000 n 0000316479 00000 n 0000313427 00000 n 0000319914 00000 n 0000319802 00000 n 0000316737 00000 n 0000323691 00000 n 0000323579 00000 n 0000320022 00000 n 0000327722 00000 n 0000327610 00000 n 0000323799 00000 n 0000517509 00000 n 0000330969 00000 n 0000330857 00000 n 0000327894 00000 n 0000520329 00000 n 0000334003 00000 n 0000333891 00000 n 0000331103 00000 n 0000337684 00000 n 0000337572 00000 n 0000334137 00000 n 0000341024 00000 n 0000340912 00000 n 0000337818 00000 n 0000344664 00000 n 0000344552 00000 n 0000341160 00000 n 0000348035 00000 n 0000347923 00000 n 0000344799 00000 n 0000352123 00000 n 0000352011 00000 n 0000348183 00000 n 0000520446 00000 n 0000355453 00000 n 0000355341 00000 n 0000352294 00000 n 0000359826 00000 n 0000359714 00000 n 0000355613 00000 n 0000362307 00000 n 0000362195 00000 n 0000359986 00000 n 0000366330 00000 n 0000366218 00000 n 0000362467 00000 n 0000369762 00000 n 0000369650 00000 n 0000366477 00000 n 0000370482 00000 n 0000370370 00000 n 0000369859 00000 n 0000520563 00000 n 0000373930 00000 n 0000373818 00000 n 0000370579 00000 n 0000376812 00000 n 0000376700 00000 n 0000374051 00000 n 0000379076 00000 n 0000378964 00000 n 0000376946 00000 n 0000515707 00000 n 0000379182 00000 n 0000379513 00000 n 0000379988 00000 n 0000380013 00000 n 0000380364 00000 n 0000380387 00000 n 0000380484 00000 n 0000380507 00000 n 0000380818 00000 n 0000381264 00000 n 0000381653 00000 n 0000382364 00000 n 0000382695 00000 n 0000383174 00000 n 0000383525 00000 n 0000384413 00000 n 0000385302 00000 n 0000389214 00000 n 0000389742 00000 n 0000392128 00000 n 0000392456 00000 n 0000394765 00000 n 0000394980 00000 n 0000396675 00000 n 0000396895 00000 n 0000398736 00000 n 0000398963 00000 n 0000402480 00000 n 0000402772 00000 n 0000412434 00000 n 0000412793 00000 n 0000423514 00000 n 0000423903 00000 n 0000430862 00000 n 0000431145 00000 n 0000447965 00000 n 0000448394 00000 n 0000469641 00000 n 0000470338 00000 n 0000482297 00000 n 0000482628 00000 n 0000496269 00000 n 0000496693 00000 n 0000501914 00000 n 0000502306 00000 n 0000512971 00000 n 0000513290 00000 n 0000515489 00000 n 0000520664 00000 n 0000520776 00000 n 0000520894 00000 n 0000520996 00000 n 0000521074 00000 n 0000521127 00000 n trailer << /Size 468 /Root 466 0 R /Info 467 0 R /ID [ ] >> startxref 521399 %%EOF DyLP-1.10.4/DyLP/doc/dylpfigs.tex0000644000175200017520000000233311171477034015001 0ustar coincoin\documentclass[titlepage]{article} \usepackage{graphics} \usepackage{loustandard} \usepackage{loubookman} %\newcommand{\mypath}{/cs/mitacs1/lou/Bonsai/Doc/Dylp.Coin} \input{dylpabsdir} \newcommand{\figures}{\mypath/Figures} \newcommand{\dylp}{\textsc{dylp}\xspace} \begin{document} \markright{\dylp Figures} \begin{figure} \begin{center} \includegraphics{\figures/dylpnormalflow} \end{center} \caption{\dylp normal execution flow} \end{figure} \begin{figure} \begin{center} \includegraphics{\figures/dualerrorflow} \end{center} \caption{\dylp dual simplex error recovery} \end{figure} \begin{figure} \begin{center} \includegraphics{\figures/primalerrorflow} \end{center} \caption{\dylp primal simplex error recovery} \end{figure} \begin{figure} \begin{center} \scalebox{.9}{\includegraphics{\figures/dual2flow}} \end{center} \caption{Dual Phase II Algorithm Flow} \label{fig:DualPhaseIIFlow} \end{figure} \begin{figure} \centering \scalebox{.85}{\includegraphics{\figures/primal1flow}} \caption{Primal Phase I Algorithm Flow} \label{fig:PrimalPhaseIFlow} \end{figure} \begin{figure} \centering \includegraphics{\figures/primal2flow} \caption{Primal Phase II Algorithm Flow} \label{fig:PrimalPhaseIIFlow} \end{figure} \end{document} DyLP-1.10.4/DyLP/doc/Makefile.in0000644000175200017520000003760412506276701014515 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2009 Lou Hafer # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Lou Hafer SFU 2009.04.15 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = doc DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/build_dylpdoc.in $(srcdir)/dylpabsdir.tex.in \ $(srcdir)/makefile.dylpdoc.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c_add_to_includes.m4 \ $(top_srcdir)/m4/ac_c_get_sunpro_libs.m4 \ $(top_srcdir)/m4/ac_dylp_equiv_for_cpp_bool.m4 \ $(top_srcdir)/m4/ac_dylp_find_fp_funcs.m4 \ $(top_srcdir)/m4/ac_dylp_fix_cppflags.m4 \ $(top_srcdir)/m4/ac_dylp_options.m4 \ $(top_srcdir)/m4/ac_osidylp_options.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/DylpStdLib/config.h \ $(top_builddir)/src/DylpStdLib/config_dylp.h SOURCES = DIST_SOURCES = 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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(DyLPDocInstalldir)" DyLPDocInstallDATA_INSTALL = $(INSTALL_DATA) DATA = $(DyLPDocInstall_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_OSITESTS_FALSE = @COIN_HAS_OSITESTS_FALSE@ COIN_HAS_OSITESTS_TRUE = @COIN_HAS_OSITESTS_TRUE@ COIN_HAS_OSI_FALSE = @COIN_HAS_OSI_FALSE@ COIN_HAS_OSI_TRUE = @COIN_HAS_OSI_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ DYLPLIB_LIBS = @DYLPLIB_LIBS@ DYLPLIB_LIBS_INSTALLED = @DYLPLIB_LIBS_INSTALLED@ DYLPLIB_PCLIBS = @DYLPLIB_PCLIBS@ DYLP_ERRMSGDIR = @DYLP_ERRMSGDIR@ DYLP_SVN_REV = @DYLP_SVN_REV@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIDYLPLIB_CFLAGS = @OSIDYLPLIB_CFLAGS@ OSIDYLPLIB_CFLAGS_INSTALLED = @OSIDYLPLIB_CFLAGS_INSTALLED@ OSIDYLPLIB_DEPENDENCIES = @OSIDYLPLIB_DEPENDENCIES@ OSIDYLPLIB_LIBS = @OSIDYLPLIB_LIBS@ OSIDYLPLIB_LIBS_INSTALLED = @OSIDYLPLIB_LIBS_INSTALLED@ OSIDYLPLIB_PCLIBS = @OSIDYLPLIB_PCLIBS@ OSIDYLPLIB_PCREQUIRES = @OSIDYLPLIB_PCREQUIRES@ OSITESTS_CFLAGS = @OSITESTS_CFLAGS@ OSITESTS_CFLAGS_INSTALLED = @OSITESTS_CFLAGS_INSTALLED@ OSITESTS_DATA = @OSITESTS_DATA@ OSITESTS_DATA_INSTALLED = @OSITESTS_DATA_INSTALLED@ OSITESTS_DEPENDENCIES = @OSITESTS_DEPENDENCIES@ OSITESTS_LIBS = @OSITESTS_LIBS@ OSITESTS_LIBS_INSTALLED = @OSITESTS_LIBS_INSTALLED@ OSI_CFLAGS = @OSI_CFLAGS@ OSI_CFLAGS_INSTALLED = @OSI_CFLAGS_INSTALLED@ OSI_DATA = @OSI_DATA@ OSI_DATA_INSTALLED = @OSI_DATA_INSTALLED@ OSI_DEPENDENCIES = @OSI_DEPENDENCIES@ OSI_LIBS = @OSI_LIBS@ OSI_LIBS_INSTALLED = @OSI_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign # See the comment for distclean-local in ../Makefile.am CONFIG_CLEAN_FILES = DyLPDocInstalldir = @DYLPDOCDIR@ DyLPDocInstall_DATA = dylp.pdf dylp.ps # Make sure the source files are distributed. BUT NOTE that Coin doesn't handle # distributions this way and it's highly unlikely this will work as you'd # like. EXTRA_DIST = $(dylpdoc_SOURCES) # The TeX source files for the dylp documentation. dylpfigs.tex is actually a # shell to build just the figures. Handy for presentations. dylpdoc_SOURCES = accuracy.tex \ antidegenlite.tex \ conmgmt.tex \ debug.tex \ dual.tex \ dylp.tex \ dylpfigs.tex \ dynamic.tex \ interface.tex \ intro.tex \ lpbasis.tex \ notation.tex \ perturbed.tex \ pricing.tex \ primal.tex \ scaling.tex \ solutions.tex \ startup.tex \ statistics.tex \ updateformulae.tex \ varmgmt.tex 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/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 dylpabsdir.tex: $(top_builddir)/config.status $(srcdir)/dylpabsdir.tex.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ makefile.dylpdoc: $(top_builddir)/config.status $(srcdir)/makefile.dylpdoc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ build_dylpdoc: $(top_builddir)/config.status $(srcdir)/build_dylpdoc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-DyLPDocInstallDATA: $(DyLPDocInstall_DATA) @$(NORMAL_INSTALL) test -z "$(DyLPDocInstalldir)" || $(mkdir_p) "$(DESTDIR)$(DyLPDocInstalldir)" @list='$(DyLPDocInstall_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(DyLPDocInstallDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(DyLPDocInstalldir)/$$f'"; \ $(DyLPDocInstallDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(DyLPDocInstalldir)/$$f"; \ done uninstall-DyLPDocInstallDATA: @$(NORMAL_UNINSTALL) @list='$(DyLPDocInstall_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(DyLPDocInstalldir)/$$f'"; \ rm -f "$(DESTDIR)$(DyLPDocInstalldir)/$$f"; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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 $(DATA) installdirs: for dir in "$(DESTDIR)$(DyLPDocInstalldir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libtool dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-DyLPDocInstallDATA install-exec-am: install-info: install-info-am install-man: 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-DyLPDocInstallDATA uninstall-info-am .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install \ install-DyLPDocInstallDATA install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall \ uninstall-DyLPDocInstallDATA uninstall-am uninstall-info-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: DyLP-1.10.4/DyLP/doc/build_dylpdoc.in0000644000175200017520000001023512260622414015575 0ustar coincoin#!/bin/sh # usage: build [-c] [-f] [-u N] [-ps] [-pdf] [target] # With no flags, will be handed to make as `make ' # With the -f flag, the first command run is `latex ' # In either case, the log file is scanned to decide what more needs to be done. # You can limit the total number of latex runs with the -u N argument. knownTargets="dylp dylpfigs" dfltTarget=dylp makecmd='make -f makefile.dylpdoc' # Make sure we have a directory for generated .eps files for figures. if ! test -d Figures ; then mkdir Figures fi # Tell TeX where to find its inputs. TEXMFHOME is predefined in TeX Live to # allow a user to point to a local source tree for style files, fonts, etc. # This tree must have the same structure as the distribution tree. # TEXINPUTS is for general input files. See the TeX Live documentation. If your # TeX distribution uses different mechanisms, well, good luck. # abs_srcdir=/home/Coin/Split/DyLP/DyLP/doc # TEXMFHOME=$abs_srcdir/TexMF # TEXINPUTS=$abs_srcdir/: TEXMFHOME=@abs_srcdir@/TexMF TEXINPUTS=@abs_srcdir@/: export TEXMFHOME TEXINPUTS printenv | grep TEX force=0 clean=0 ltxlimit=5 needLaTeX=0 needBibTeX=0 buildPDF=0 buildPS=0 while test $# -ge 1 ; do case $1 in *-c*) clean=1 ;; *-f*) force=1 ;; *-pdf) buildPDF=1 ;; *-ps) buildPS=1 ;; *-u) shift ltxlimit=$1 ;; *-h*) echo "usage: $0 [-c|--clean] [-f|--force] [-u N] [-ps] [-pdf] [target]" echo " known targets: $knownTargets" echo " default target: $dfltTarget" echo " $0 --clean with no target will clean and exit" echo " $0 --clean with a target will clean and then build the target" echo " For all options, you can use \`-' or \`--'." exit ;; *) tgt=$1 ;; esac shift done # Clean out the previous build? if test $clean = 1 ; then $makecmd clean if test ${tgt:-0} = 0 ; then exit ; fi fi # Known target? if test ${tgt:-0} = 0 ; then tgt=$dfltTarget fi found=0 for knowntgt in $knownTargets ; do if test "$knowntgt" = "$tgt" ; then echo "Building $tgt" found=1 break fi done if test ${found:-0} = 0 ; then echo "$0: Unknown target \"$tgt\"; try \"$0 --help\"" exit fi # Check if we need to do anything. if test ${needLaTeX:-0} = 0 ; then $makecmd -q $tgt if test $? -eq 0 ; then echo "Make says no need to run LaTeX." else needLaTeX=1 echo "Make says run LaTeX." fi fi if test ${needBibTeX:-0} = 0 ; then $makecmd -q $tgt.bbl if test $? -eq 0 ; then echo "Make says no need to run BibTeX." else needBibTeX=1 echo "Make says run BibTeX." fi fi if test ${force:-0} = 0 ; then if test ${needLaTeX:-0} = 1 ; then echo "Calling make for $tgt" $makecmd $tgt ltxlimit=`expr $ltxlimit - 1` fi else echo "Forcing LaTeX for $tgt" latex $tgt ltxlimit=`expr $ltxlimit - 1` fi if test $ltxlimit -eq 0 ; then exit ; fi # Now check if we need to run BibTex. There are two conditions to check: # 1) The log file contains one or both of the following lines: # No file dylp.bbl. # LaTeX Warning: Citation `----' on page N undefined ... # 2) tgt.bbl already exists, and make -q tgt.bbl indicates work to be done # This section runs LaTex only once --- we'll need to run a second time, but # that'll be swept up in the next block for labels. egrep 'No file [^.]*\.bbl|Citation .* undefined' $tgt.log if test $? -eq 0 ; then needBibTeX=2 fi if test $needBibTeX -gt 0 ; then echo "Running BibTex to generate/update $tgt.bbl." bibtex $tgt echo "Running LaTeX for initial scan of $tgt.bbl" latex $tgt ltxlimit=`expr $ltxlimit - 1` if test $ltxlimit -eq 0 ; then exit ; fi fi # Do we need to run again to get labels right? egrep 'Rerun' $tgt.log if test $? -eq 0 ; then echo "Running LaTex for cross-references" latex $tgt ltxlimit=`expr $ltxlimit - 1` if test $ltxlimit -eq 0 ; then exit ; fi fi # And did the user ask for more than a DVI file? We can build PostScript or # PDF. if test ${buildPS:-0} = 1 ; then echo "Running dvips for PostScript output" dvips -D1200 -o dylp.ps dylp.dvi fi if test ${buildPDF:-0} = 1 ; then echo "Running pdflatex for PDF output" make -f makefile.dylpdoc $tgt.pdf fi DyLP-1.10.4/DyLP/doc/primal.tex0000644000175200017520000004676711171477034014467 0ustar coincoin \section{Primal Simplex} \label{sec:PrimalSimplex} The primal simplex implementation in \dylp is a two-phase algorithm. \dylp will choose primal simplex phase~II whenever the current basic solution is primal feasible but not dual feasible. It will choose primal simplex phase~I when the current basic solution is neither primal or dual feasible. The primary role of primal simplex in \dylp is to reoptimise following the addition of variables. Since primal phase~I requires neither primal or dual feasibility, it is the fallback simplex. The primal simplex implementation incorporates projected steepest edge (PSE) pricing (\secref{sec:PSEPricing}), standard (\secref{sec:PrimalStdSelectOutVar}) and generalised (\secref{sec:PrimalGenSelectOutVar}) pivoting, and perturbation-based (\secref{sec:PerturbedAntiDegeneracy}) and alignment-based (\secref{sec:AntiDegenLite}) antidegeneracy algorithms. Figure \ref{fig:PrimalCallGraph} shows the call structure of the primal simplex implementation. \begin{figure}[htb] \centering \includegraphics{\figures/primalcalls} \caption{Call Graph for Primal Simplex} \label{fig:PrimalCallGraph} \end{figure} \subsection{Primal Top Level} Primal simplex is executed when the dynamic simplex state machine enters one of the states \pgmid{dyPRIMAL1} or \pgmid{dyPRIMAL2}. If required, the PSE reference frame is initialised to the nonbasic variables and the projected column norms are initialised to one (\vid \secref{sec:PSEPricing}), and the primal simplex routine \pgmid{dy_primal} is called. \pgmid{dy_primal} controls the use of phase~I (\pgmid{primal1}) and phase~II (\pgmid{primal2}) of the primal simplex algorithm. The primary purpose of \pgmid{dy_primal} is to provide a loop which allows a limited number (currently hardwired to 10) of reversions to phase~I if primal feasibility is lost during phase II. Loss of primal feasibility is treated as a numeric accuracy problem; with each such reversion the minimum pivot selection tolerances are tightened by one step. To maintain primal feasibility when repairing a singular basis (\secref{sec:BasisFactoring}) in primal phase~II, superbasic variables may be created. Superbasic variables will not normally be created during phase~I and the code assumes that it will not encounter them\footnote{% More strongly, superbasic variables are introduced only in primal phase~II for the purpose of maintaining feasibility during repair of a singular basis. They will appear outside of \pgmid{primal2} only if the problem is unbounded or if \pgmid{primal2} terminates with an error condition.}. Rarely, a sequence of errors during phase~II will cause \dylp to lose primal feasibility and revert to phase~I with superbasic variables still present in the nonbasic partition. The routine \pgmid{forcesuperbasic} is called to ensure that any superbasic variables are forced to bound in such a phase~II to phase~I transition. \subsection{Primal Phase I} \label{sec:PrimalPhaseI} The overall flow of phase I of the primal simplex is shown in Figure \ref{fig:PrimalPhaseIFlow}. \begin{figure}[htbp] \centering \resizebox{\linewidth}{!}{\includegraphics{\figures/primal1flow}} \caption{Primal Phase I Algorithm Flow} \label{fig:PrimalPhaseIFlow} \end{figure} The body of the routine is structured as two nested loops. The outer loop handles startup and termination, and the inner loop handles the majority of routine pivots. A pivot iteration in phase~I normally consists of three steps: the actual pivot and variable updates, routine maintenance checks, and revision of the objective. A dynamically modified artificial objective is used to guide pivoting to feasibility during phase~I\@. The (minimisation) coefficients assigned to variables are -1 for variables below their bound, 0 for variables within bounds, and +1 for variables above their bound. On entry to phase~I, \pgmid{dy_initp1obj} forms a working set containing all infeasible variables, constructs the corresponding objective, swaps out the original objective, and installs the phase~I objective. Once the phase~I objective has been constructed, the outer loop is entered and \pgmid{dy_primalin} is called to select the initial entering variable. Then the inner loop is entered and \pgmid{dy_primalpivot} is called to perform the pivot. \pgmid{dy_primalpivot} (\vid \secref{sec:PrimalPivoting}) will choose a leaving variable (\pgmid{primalout}), pivot the basis (\pgmid{dy_pivot}), update the primal and dual variables (\pgmid{primalupdate}), and update the PSE pricing information and reduced costs (\pgmid{pseupdate}). For a routine pivot, \pgmid{pseupdate} will also select an entering variable for the next pivot. \pgmid{dy_duenna} evaluates the outcome of the pivot, handles error detection and recovery where possible, and performs the routine maintenance activities of accuracy checks and refactoring of the basis. As the final step in a routine pivot, \pgmid{tweakp1obj} scans the working set and removes any newly feasible variables. The objective function is adjusted to reflect any changes and reduced costs and dual variables are adjusted or recalculated as required. If there are no problems, the pivoting loop iterates, using the leaving variable selected in \pgmid{pseupdate}. The loop continues until primal feasibility is reached, the problem is determined to be infeasible, or an exception or fatal error occurs. When the working set becomes empty, \pgmid{tweakp1obj} will give a preliminary indication of primal feasibility. If \pgmid{verifyp1obj} confirms that all variables are primal feasible, the pivoting loop will end. If accumulated numerical inaccuracy has caused previously feasible variables to become infeasible, the pivot selection parameters will be tightened, \pgmid{dy_initp1obj} will be called to build a new working set and objective, and pivoting will resume. Changes to the objective coefficients may make it necessary to select a new entering variable. This situation arises when a variable gains feasibility but remains basic, as changing an entry of $c^B$ can potentially affect all reduced costs\footnote{% Less commonly, the problem arises because the newly feasible leaving variable of the just-completed pivot has been selected to reenter. The objective coefficient for this variable is incorrect when it is used by \pgmid{pseupdate}.}. The variable selected in \pgmid{pseupdate} may no longer be the best (or even a good) choice. The flow of control is redirected to the outer loop, where \pgmid{dy_primalin} will be called to select an entering variable. It can happen that no entering variable is selected by \pgmid{pseupdate} for use in the next iteration. Here, too, control flow is redirected to \pgmid{dy_primalin}. The single most common reason in primal simplex is a bound-to-bound `pivot' of a nonbasic variable --- since there is no basis change, \pgmid{pseupdate} is not called. Another common reason for failure to select an entering variable is that all candidates were previously flagged as unsuitable pivots. In this case, \pgmid{dy_primalin} will indicate a `punt' and \pgmid{dy_dealWithPunt} will be called to reevaluate the flagged variables. If it is able to make new candidates available, control returns to \pgmid{dy_primalin} for another attempt to find an entering variable. If all flagged variables remain unsuitable, control flow moves to the preoptimality actions with an indication that primal phase~I has punted. If the current pivot is aborted due to numerical problems (an unsuitable pivot coefficient being the most common of these), \pgmid{pseupdate} is not executed. Once \pgmid{dy_duenna} has taken the necessary corrective action, the flow of control moves to the outer loop and \pgmid{dy_primalin}. When \pgmid{dy_primalin} indicates optimality, \pgmid{dy_primalpivot} indicates optimality or unboundedness, or \pgmid{tweakp1obj} indicates primal feasibility, the inner pivoting loop ends and \pgmid{verifyp1obj} is called to verify feasibility. If feasibility is confirmed, \pgmid{preoptimality} is called to refactor the basis, perform accuracy checks, and confirm primal and dual feasibility. If there are no surprises, primal phase I terminates with an indication of optimality (primal feasibility), unboundedness, or primal infeasibility. In any event, if \pgmid{preoptimality} reports that the solution is primal feasible, phase~I will end with an indication of optimality even if it was not expected from the pivot loop termination condition. If a primal feasible solution has been found, the original objective will be restored before returning from \pgmid{primal1}. The transition to phase~II entails calculating the objective, dual variables, and reduced costs for the original objective. If the problem is infeasible or unbounded, the phase~I objective is left in place and \dylp will use it as it attempts to activate variables or constraints to deal with the problem (\secref{sec:ErrorRecovery}). Loss of primal feasibility can occur when the basis is factored during the preoptimality checks. The pivot selection parameters are tightened and pivoting resumes. Loss of dual feasibility is considered only when it is accompanied by lack of primal feasibility (\ie, a false indication of infeasibility). Loss of dual feasibility can occur for two distinct reasons. In the less common case, loss of dual feasibility stems from loss of numeric accuracy. The pivot selection rules are tightened and pivoting resumes. The more common reason for apparent loss of dual feasibility at the termination of phase~I primal simplex is that it is ending with a punt, as described above. The variables flagged as unsuitable for pivoting are not dual feasible, and when the flags are removed to perform the preoptimality checks, dual feasibility is revealed as an illusion. No further action is possible within primal simplex; the reader is again referred to \secref{sec:ErrorRecovery}. When the number of false indications of optimality exceeds a hard-coded limit (currently 15), primal simplex terminates with a fatal error. Other errors also result in termination of the primal simplex algorithm, and ultimately in an error return from \dylp. \subsection{Primal Phase II} \label{sec:PrimalPhaseII} The overall flow of phase~II of the primal simplex is shown in Figure \ref{fig:PrimalPhaseIIFlow}. \begin{figure}[htbp] \centering \resizebox{\linewidth}{!}{\includegraphics{\figures/primal2flow}} \caption{Primal Phase II Algorithm Flow} \label{fig:PrimalPhaseIIFlow} \end{figure} The major differences from phase~I are that the problem is know to be feasible and the original objective function is used instead of an artificial objective function. This considerably simplifies the flow of \pgmid{primal2}. The inner pivoting loop has only two steps: the pivot itself (\pgmid{dy_primalpivot}) and the maintenance and error recovery functions (\pgmid{dy_duenna}). When \pgmid{dy_primalin} indicates optimality or \pgmid{dy_primalpivot} indicates optimality or unboundedness the inner loop ends and \pgmid{preoptimality} is called for confirmation. \pgmid{preoptimality} will refactor the basis, perform accuracy checks, recompute the primal and dual variables, and confirm primal and dual feasibility. If there are no surprises, primal phase~II will end with an indication of optimality or unboundedness. Loss of dual feasibility (including punts) is handled as described for primal phase~I. Loss of primal feasibility causes \pgmid{primal2} to return with an indication that it has lost primal feasibility, and \pgmid{dy_primal} will arrange a return to primal phase~I\@. \subsection{Pivoting} \label{sec:PrimalPivoting} \dylp offers two flavours of primal pivoting: A standard primal pivot algorithm in which a single primal variable is selected and pivoted into the basis, and an extended primal pivot algorithm which allows somewhat greater flexibility in the choice of leaving variable. By default, \dylp will use the extended algorithm. Figure~\ref{fig:PrimalPivotCallGraph} shows the call structure of the primal pivot algorithm. The routine \pgmid{primalout} implements standard primal pivoting; \pgmid{primmultiout} implements extended primal pivoting. \begin{figure}[htb] \centering \includegraphics{\figures/primalpivcalls} \caption{Call Graph for Primal Pivoting} \label{fig:PrimalPivotCallGraph} \end{figure} The first activity in \pgmid{dy_primalpivot} is the calculation of the coefficients of the pivot column, $\overline{a}_{j} = B^{\,-1} a_j$, by the routine \pgmid{dy_ftran}. With the entering primal variable and the ftran'd column in hand, one of \pgmid{primalout} or \pgmid{primmultiout} are called to select the leaving variable. If the entering and leaving variables are the same (\ie, a nonbasic variable is moving from one bound to the other), all that is required is to call \pgmid{primalupdate} to update the values of the primal variables. The basis, dual variables, reduced costs, and PSE pricing information are unchanged. If the entering and leaving variables are distinct, the pivot is performed in several steps. Prior to the pivot, the $i$\textsuperscript{th} row of the basis inverse, $\beta_i$, and the vector $\trans{\tilde{a}_j} B^{\,-1}$ are calculated for use during the update of the PSE pricing information. The basis is pivoted next; this involves calls to \pgmid{dy_ftran} and \pgmid{dy_pivot}, as outlined in \secref{sec:BasisPivoting}. If the basis change succeeds, the primal and dual variables are updated by \pgmid{primalupdate} using the iterative update formul\ae{} of \secref{sec:UpdatingFormulas}, and then the PSE pricing information and reduced costs are updated by \pgmid{pseupdate}, using the update formul\ae{} of \secref{sec:PSEPricing}. As a side effect, \pgmid{pseupdate} will select an entering variable for the next pivot. \subsection{Selection of the Entering Variable} \label{sec:PrimalStdSelectInVar} Selection of the entering variable $x_j$ for a primal pivot is made using the primal steepest edge criterion described in \secref{sec:PSEPricing}. As outlined above, the normal case is that the entering variable for the following pivot will be selected as \pgmid{pseupdate} updates the PSE pricing information for the current pivot. In various exceptional circumstances where this does not occur, the routine \pgmid{dy_primalin} is called to make the selection. \subsection{Standard Primal Pivot} \label{sec:PrimalStdSelectOutVar} Selection of the leaving variable $x_i$ is made using standard primal pivoting rules and a set of tie-breaking strategies. Abstractly, we need to check $x_k = \overline{b}_k - \overline{a}_{kj}\Delta_{kj}$ to find the maximum allowable $\Delta_{kj}$ such that $l_k \leq x_k \leq u_k \: \forall k \in B$ and $x_i = l_i$ or $x_i = u_i$ for some $i$. The index $i$ of the leaving variable will be \begin{displaymath} i = \arg \min_{k} \abs{\frac{\overline{b}_k}{a_{kj}}} \end{displaymath} for suitable $x_k \in B$. The primal pivoting rules are the standard set for revised simplex with bounded variables, and are summarised in Table \ref{Tbl:PrimalPivotRules}. \begin{table}[htb] \renewcommand{\arraystretch}{2.5}\setlength{\tabcolsep}{.75\tabcolsep} \begin{center} \begin{tabular}{*{3}{>{$}c<{$}}} \text{leaving } x_i & \text{entering } x_j & \text{pivot } \overline{a}_{ij} \\[.5\baselineskip] \nearrow \mathit{ub} & \mathit{lb} \nearrow & < 0 \\ & \mathit{ub} \searrow & > 0 \\ \searrow \mathit{lb} & \mathit{lb} \nearrow & > 0 \\ & \mathit{ub} \searrow & < 0 \\ \end{tabular} \end{center} \caption{Summary of Primal Simplex Pivoting Rules} \label{Tbl:PrimalPivotRules} \end{table} During phase~I, when a variable is infeasible below its lower bound and must increase to become feasible, \dylp sets the limiting $\Delta_j$ based on the upper bound, if it is finite, and uses the lower bound only when the upper bound is infinite. Similarly, when a variable must decrease to its upper bound, the lower bound is used to calculate the limiting $\Delta_j$ if it is finite. \dylp provides a selection of tie-breaking strategies when there are multiple candidates with equal $\abs{\Delta_{kj}} = \Delta_{\mathrm{min}}$. The simplest is to select the first variable $x_k$ such that $\Delta_{kj} = 0$. A slightly more sophisticated strategy is to scan all variables eligible to leave and pick $x_i$ such that $i = \arg \max_{k \in K} \abs{\overline{a}_{kj}}$, $K = \{ k \mid \abs{\Delta_{kj}} = \Delta_{\mathrm{min}} \}$; \dylp will use this strategy by default. \dylp also provides four additional strategies based on hyperplane alignment, as described in \secref{sec:AntiDegenLite}. An option allows the tie-breaking strategy to be selected by the client. In case of degeneracy, the perturbed subproblem anti-degeneracy algorithm described in \secref{sec:PerturbedAntiDegeneracy} is also available. The client can control the use of perturbed subproblems through two options which specify whether a perturbed subproblem can be used, and how many consecutive degenerate pivots must occur before the perturbed subproblem is created. By default, \dylp uses perturbed subproblems aggressively and will introduce one when faced with a second consecutive degenerate pivot. \subsection{Extended Primal Pivot} \label{sec:PrimalGenSelectOutVar} All dual variables have a single finite bound of zero, so it's not possible to develop a generalised primal pivoting algorithm analogous to the dual pivoting algorithm of \secref{sec:DualGenSelectInVar}. It is, however, possible to introduce some flexibility in the selection of the leaving variable. We can also apply the same strategy used in generalised dual pivoting to promote a numerically stable pivot candidate over an unstable candidate. In phase~I, for an infeasible basic variable with finite upper and lower bounds, there are two points where the variable can be pivoted out of the basis: When the variable moves from infeasibility to one of its bounds (the `near' bound), and when it has crossed the feasible region to the opposite (`far') bound. Pivoting when the near bound is reached is optional; pivoting at the far bound is mandatory if primal feasibility is to be maintained. The same notion can be applied in phase~II, but its utility is much more limited: In cases where a basic variable is at its near bound and could be pushed to the far bound, we may prefer to choose a degenerate and numerically stable pivot over a degenerate and numerically unstable pivot. \dylp implements extended primal pivoting by first collecting the set of candidates $x_i$ to leave the basis. Variables with two finite bounds get two entries, one with the value of $\Delta_{ij}$ associated with the near bound, the other the value associated with the far bound. The set is then sorted using nondecreasing value of $\abs{\Delta_{kj}}$, with numerical stability as the tie-breaker. The process of scanning for candidates and sorting the resulting set is implemented in the routines \pgmid{scanForPrimalOutCands} and \pgmid{primalcand_cmp}. For efficiency, \pgmid{scanForPrimalOutCands} keeps a `best candidate' using the standard primal pivoting rules. If this candidate is good (nondegenerate and numerically stable), it is accepted as the leaving variable and no further processing is required. If a good candidate is not identified by the scan, an attempt is made to promote a good candidate to the front of the sorted list. The criteria is as outlined for generalised dual pivoting: If the amount of primal infeasibility that would result from promoting a stable, nondegenerate candidate is tolerable, that candidate is promoted and made the leaving variable. This promotion of a stable pivot over an unstable pivot is implemented in the primal version of \pgmid{promoteSanePivot}. Antidegeneracy using perturbed subproblems is used with extended primal pivoting. The alignment-based anti-degeneracy strategies are not implemented. DyLP-1.10.4/DyLP/doc/dynamic.tex0000644000175200017520000003100311171477034014600 0ustar coincoin\section{Dynamic Simplex} \label{sec:DynamicSimplex} \subsection{Normal Algorithm Flow} \label{sec:NormalDynamicFlow} Figure~\ref{fig:DylpFlow} gives the normal flow of the dynamic simplex algorithm implemented in \dylp. \begin{figure} \centering \includegraphics{\figures/dylpnormalflow} \caption{Dynamic Simplex Algorithm Flow} \label{fig:DylpFlow} \end{figure} The outcomes included in the normal flow of the algorithm are primal optimality, infeasibility, and unboundedness, and dual optimality and unboundedness. Other outcomes (\eg, loss of dual feasibility during dual simplex, or numerical instability) are discussed in \secref{sec:ErrorRecovery}. The implementation of the dynamic simplex algorithm is structured as a finite state machine, with six normal states, primal simplex, dual simplex, deactivate variables, activate variables, deactivate constraints, and activate constraints; two user-supplied states, generate variables and generate constraints; and three error recovery states, force primal feasibility, force dual feasibility, and force full constraint system. State transitions are determined by the previous state, the type of simplex in use, and the outcome of actions in a state. As described in \secref{sec:Startup}, \dylp establishes an initial active constraint system, determines whether the system is primal or dual feasible, and chooses the appropriate simplex as the starting phase. The most common execution pattern is as described in the Introduction: The initial active constraint system is neither primal or dual feasible. Primal simplex is used to solve this system to optimality. A minor loop then activates variables with favourable reduced cost and reoptimises using primal phase~II\@. This loop repeats until no variables can be activated; at this point the solution is optimal for the active constraints, over all variables. The algorithm then attempts to activate violated constraints; if none are found, the solution is optimal for the original problem. After violated constraints are activated, loose constraints are deactivated and dual simplex is used to reoptimise. When an optimal solution is reached, the algorithm attempts to activate variables with favourable reduced cost and return to the `primal phase~II -- activate variables' minor loop. If no variables can be activated, the algorithm attempts to activate violated constraints. If none are found, the solution is optimal for the original problem. If violated constraints are activated, then an attempt is made to activate dual feasible variables and dual simplex is used to reoptimise. There is an obvious asymmetry in the use of primal and dual simplex. When primal simplex reaches an optimal solution, the `primal phase~II -- activate variables' minor loop iterates until no useful variables remain to be activated. Only then does the algorithm activate violated constraints and move to dual simplex. The analogous minor loop for dual simplex would be to add violated constraints (dual variables with favourable reduced costs) and reoptimise with dual simplex until no violated constraints remain. Instead, the algorithm attempts to add variables and return to primal simplex; failing that, it will add both violated constraints and dual feasible variables (satisfied dual constraints). The purpose of this asymmetry is two-fold: It acknowledges that primal infeasibility is much more likely than primal unboundedness when solving LPs in the context of a branch-and-cut algorithm, and it attempts to avoid the large swings in the values of primal variables which often accompany dual unboundedness. Dual simplex moves between primal infeasible basic solutions which can be at a large distance from the primal feasible region and at a large distance from one another in the primal space. This presents a challenge for numerical stability. Because the primal simplex remains within the primal feasible region, primal unboundedness does not present the same difficulty. To avoid cycling by repeatedly deactivating and reactivating the same constraint when the dimension of the optimal face is greater than one, constraint deactivation is skipped unless there has been an improvement in the objective function since the previous constraint deactivation phase. This guarantees that the simplex will not return to a previous extreme point. If primal simplex finds that the active system is infeasible, the algorithm will attempt to activate variables with favourable reduced cost under the phase~I objective function (\vid \secref{sec:PrimalSimplex}) and resume primal phase~I\@. If no variables can be found, the original problem is infeasible. If primal simplex finds that the active system is unbounded, the algorithm first attempts to activate bounding constraints which will not cause the loss of primal feasibility. If such constraints can be found, execution returns to primal phase~II\@. If no such constraints can be found, or primal feasibility is not an issue, all violated constraints are added and execution moves to dual simplex. If no violated constraints can be found, the full constraint system is activated. If primal simplex again returns an indication of unboundedness, the original problem is declared to be unbounded. The effort expended before indicating a problem is unbounded acknowledges that unboundedness is expected to be extremely rare in \dylp's intended application. If dual simplex finds that the active system is dual unbounded (primal infeasible), the algorithm first attempts to activate dual bounding constraints (primal variables) which will not cause the loss of dual feasibility. If such dual constraints can be found, execution returns to dual simplex. If no such dual constraints can be found, the algorithm will attempt to activate variables with favourable reduced cost under the primal phase~I objective function and continue with primal phase~I\@. \subsection{Error Recovery} \label{sec:ErrorRecovery} A substantial amount of \dylp's error recovery capability is hidden within the primal and dual simplex algorithms. It is also possible to use the capabilities present in a dynamic simplex algorithm to attempt error recovery at this level. The dynamic simplex algorithm modifies the constraint system as part of its normal execution. This ability can be harnessed to force a transition from one simplex to another when one simplex runs into trouble. The actions described in this section are fully integrated with the actions described in \secref{sec:NormalDynamicFlow}. They are described separately to avoid reducing Figure~\ref{fig:DylpFlow} to an incomprehensible snarl of state transitions. \noindent \textbf{Primal Simplex} The error recovery actions associated with the primal simplex algorithm are shown in Figure~\ref{fig:DynErrRecPrimal}. \begin{figure} \centering \includegraphics{\figures/primalerrorflow} \caption{Error Recovery Actions for Primal Simplex Error Outcomes} \label{fig:DynErrRecPrimal} \end{figure} There are five conditions of interest, excessive change in the value of primal variables (excessive swing), stalling (stall), inability to perform a pivot (punt), numerical instability (accuracy check), and other errors (other error). Excessive change (`swing') in the value of a primal variable during primal simplex is taken as an indication that the primal problem is verging on unboundedness. Swing is defined as $(\textrm{new value})/(\textrm{old value})$. \dylp's default tolerance for this ratio is $10^{15}$. The action taken is the same as that used for normal detection of unboundedness, with the exception that the algorithm will always return to primal simplex. When primal simplex stalls or is forced to punt, the strategy is to attempt to modify the constraint system so that the simplex algorithm will be able to choose a new pivot and again make progress toward one of the standard outcomes of optimality, infeasibility, or unboundedness. The specific actions vary slightly depending on whether primal feasibility has been achieved. If primal simplex is still in phase~I, the first action is to try to activate variables which have a favourable reduced cost under the phase~I objective. If this succeeds, execution returns to primal simplex. If no variables can be found, the algorithm will attempt to activate violated constraints; if successful, execution returns to primal simplex. If no variables or constraints have been activated, there is no point in returning to primal simplex as the outcome will be unchanged. In this case, the algorithm will attempt to force dual feasibility by deactivating variables whose reduced costs are not dual feasible (\ie, deactivate unsatisfied dual constraints). If this succeeds, the algorithm will deactivate loose constraints (dual variables) to reduce the chance of dual unboundedness and continue with dual simplex. Failing all the above, the ultimate action is to active the full constraint system and attempt to solve it with primal or dual simplex. This can be done only once, to avoid a cycle in which the full system is activated, pared down while forcing primal or dual feasibility, and then reactivated when lesser measures again fail. When a stall or punt occurs in primal phase~II, the first action is again to attempt to activate variables with a favourable reduced cost. However, if no new variables can be found, the algorithm immediately attempts to force dual feasibility. Only if this can be achieved will it proceed to activate violated constraints, deactivate loose constraints, and proceed to dual simplex. Failure to force dual feasibility or to activate any constraints causes forced activation of the full constraint system as described above. Both the primal and dual simplex algorithm incorporate extensive checks and error recovery actions to detect and recover from numerical instability. By the time a simplex gives up and reports that it cannot overcome numerical problems, there is little to be done but force activation of the full constraint system for one last attempt. Other errors indicate algorithmic failures within the simplex algorithms (\eg, failure to acquire resources, or conditions not anticipated by the code) and no attempt is made to recover at the dynamic simplex level. \noindent \textbf{Dual Simplex} The error recovery actions associated with the dual simplex algorithm are shown in Figure~\ref{fig:DynErrRecDual}. \begin{figure} \centering \includegraphics{\figures/dualerrorflow} \caption{Error Recovery Actions for Dual Simplex Error Outcomes} \label{fig:DynErrRecDual} \end{figure} In addition to the five outcomes cited for primal simplex, loss of dual feasibility (lost dual feasibility) can be reported by the dual simplex algorithm. (Loss of primal feasibility is handled internally by the primal simplex, which simply returns to phase~I simplex iterations.) When the dual simplex algorithm loses feasibility, the algorithm will attempt to force dual feasibility by deleting the offending dual constraints (primal variables). If this succeeds, it will attempt to activate feasible dual constraints and return to dual simplex. If dual feasibility cannot be restored, the algorithm attempts to activate variables with favourable reduced costs under the primal phase~I objective and executes primal phase~1\@. Excessive change in the value of primal variables during dual simplex is taken as an indication that the dual algorithm is moving between basic solutions which are far outside the primal feasible region and far from each other. When excessive change in a primal variable is detected, the algorithm attempts to activate primal constraints which will bound this motion. If this is successful, execution of dual simplex resumes. General activation of violated primal constraints is not attempted as it is less likely to bound the primal swing. If no bounding constraints can be found, the algorithm attempts to activate feasible dual constraints and return to dual simplex. If no such constraints can be found, the algorithm attempts to activate variables with favourable reduced costs under the primal phase~I objective and executes primal phase~1\@. When dual simplex reports that it has stalled or cannot execute necessary pivots, the algorithm first attempts to activate violated primal constraints. If such constraints can be activated, execution returns to dual simplex. If no constraints can be found, the algorithm attempts to force primal feasibility by deactivating violated primal constraints. Depending on the result of this action, the algorithm attempts to activate variables with favourable reduced costs under the primal phase~I or phase~II objective and executes primal simplex. Loss of numerical stability and other errors are handled as for primal simplex. DyLP-1.10.4/DyLP/doc/TexMF/0000755000175200017520000000000013434203622013412 5ustar coincoinDyLP-1.10.4/DyLP/doc/TexMF/README0000644000175200017520000000257111267165330014304 0ustar coincoin This TexMF directory tree contains various original and customised files used in the course of building dylp's documentation. Here's what you'll find: * Under bibtex, the bibliography file dylp.bib, and a slightly tweaked version of the plain bibliography style in louplain.bst. * Under fonts, a bevy of .tfm and .vf files. As mentioned in the top-level README, I'm not a fan of Computer Modern and have gone to a fair bit of trouble to avoid using it. For text, this is relatively straightforward. For math, it takes real work. The .tfm and .vf files in this directory are all used in some way to avoid Computer Modern and make the result look decent in Bookman (with a selection of glyphs from other fonts thrown in on the math side). The .tfm files are used while LaTeX is typesetting. The .vf files are used by dvips (and xdvi, if memory serves) to find the underlying glyph shapes. To regenerate these files (and the .fd files in the tex subtree) you should be comfortable with font manipulation and virtual font generation using fontinst. Email me (lou@cs.sfu.ca) and I'll forward the necessary sources and makefiles. * Under tex, there are a number of style files that I use and yet more font files --- .fd files that specify how LaTeX font directives should map to the underlying fonts. Lou Hafer, 091019 DyLP-1.10.4/DyLP/doc/TexMF/bibtex/0000755000175200017520000000000013434203622014667 5ustar coincoinDyLP-1.10.4/DyLP/doc/TexMF/bibtex/bst/0000755000175200017520000000000013434203622015457 5ustar coincoinDyLP-1.10.4/DyLP/doc/TexMF/bibtex/bst/louplain.bst0000644000175200017520000004556211171477034020036 0ustar coincoin% BibTeX standard bibliography style `plain' % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. % Copyright (C) 1985, all rights reserved. % Copying of this file is authorized only if either % (1) you make absolutely no changes to your copy, including name, or % (2) if you do make changes, you name it something other than % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst. % This restriction helps ensure that all standard styles are identical. % The file btxbst.doc has the documentation for this style. % Modifications by Lou Hafer % * `title' is no longer forced to lower case. ENTRY { address author booktitle chapter edition editor howpublished institution journal key month note number organization pages publisher school series title type volume year } {} { label } INTEGERS { output.state before.all mid.sentence after.sentence after.block } FUNCTION {init.state.consts} { #0 'before.all := #1 'mid.sentence := #2 'after.sentence := #3 'after.block := } STRINGS { s t } FUNCTION {output.nonnull} { 's := output.state mid.sentence = { ", " * write$ } { output.state after.block = { add.period$ write$ newline$ "\newblock " write$ } { output.state before.all = 'write$ { add.period$ " " * write$ } if$ } if$ mid.sentence 'output.state := } if$ s } FUNCTION {output} { duplicate$ empty$ 'pop$ 'output.nonnull if$ } FUNCTION {output.check} { 't := duplicate$ empty$ { pop$ "empty " t * " in " * cite$ * warning$ } 'output.nonnull if$ } FUNCTION {output.bibitem} { newline$ "\bibitem{" write$ cite$ write$ "}" write$ newline$ "" before.all 'output.state := } FUNCTION {fin.entry} { add.period$ write$ newline$ } FUNCTION {new.block} { output.state before.all = 'skip$ { after.block 'output.state := } if$ } FUNCTION {new.sentence} { output.state after.block = 'skip$ { output.state before.all = 'skip$ { after.sentence 'output.state := } if$ } if$ } FUNCTION {not} { { #0 } { #1 } if$ } FUNCTION {and} { 'skip$ { pop$ #0 } if$ } FUNCTION {or} { { pop$ #1 } 'skip$ if$ } FUNCTION {new.block.checka} { empty$ 'skip$ 'new.block if$ } FUNCTION {new.block.checkb} { empty$ swap$ empty$ and 'skip$ 'new.block if$ } FUNCTION {new.sentence.checka} { empty$ 'skip$ 'new.sentence if$ } FUNCTION {new.sentence.checkb} { empty$ swap$ empty$ and 'skip$ 'new.sentence if$ } FUNCTION {field.or.null} { duplicate$ empty$ { pop$ "" } 'skip$ if$ } FUNCTION {emphasize} { duplicate$ empty$ { pop$ "" } { "{\em " swap$ * "}" * } if$ } INTEGERS { nameptr namesleft numnames } FUNCTION {format.names} { 's := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := nameptr #1 > { namesleft #1 > { ", " * t * } { numnames #2 > { "," * } 'skip$ if$ t "others" = { " et~al." * } { " and " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {format.authors} { author empty$ { "" } { author format.names } if$ } FUNCTION {format.editors} { editor empty$ { "" } { editor format.names editor num.names$ #1 > { ", editors" * } { ", editor" * } if$ } if$ } FUNCTION {format.title} { title empty$ { "" } { title } if$ } FUNCTION {n.dashify} { 't := "" { t empty$ not } { t #1 #1 substring$ "-" = { t #1 #2 substring$ "--" = not { "--" * t #2 global.max$ substring$ 't := } { { t #1 #1 substring$ "-" = } { "-" * t #2 global.max$ substring$ 't := } while$ } if$ } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } if$ } while$ } FUNCTION {format.date} { year empty$ { month empty$ { "" } { "there's a month but no year in " cite$ * warning$ month } if$ } { month empty$ 'year { month " " * year * } if$ } if$ } FUNCTION {format.btitle} { title emphasize } FUNCTION {tie.or.space.connect} { duplicate$ text.length$ #3 < { "~" } { " " } if$ swap$ * * } FUNCTION {either.or.check} { empty$ 'pop$ { "can't use both " swap$ * " fields in " * cite$ * warning$ } if$ } FUNCTION {format.bvolume} { volume empty$ { "" } { "volume" volume tie.or.space.connect series empty$ 'skip$ { " of " * series emphasize * } if$ "volume and number" number either.or.check } if$ } FUNCTION {format.number.series} { volume empty$ { number empty$ { series field.or.null } { output.state mid.sentence = { "number" } { "Number" } if$ number tie.or.space.connect series empty$ { "there's a number but no series in " cite$ * warning$ } { " in " * series * } if$ } if$ } { "" } if$ } FUNCTION {format.edition} { edition empty$ { "" } { output.state mid.sentence = { edition "l" change.case$ " edition" * } { edition "t" change.case$ " edition" * } if$ } if$ } INTEGERS { multiresult } FUNCTION {multi.page.check} { 't := #0 'multiresult := { multiresult not t empty$ not and } { t #1 #1 substring$ duplicate$ "-" = swap$ duplicate$ "," = swap$ "+" = or or { #1 'multiresult := } { t #2 global.max$ substring$ 't := } if$ } while$ multiresult } FUNCTION {format.pages} { pages empty$ { "" } { pages multi.page.check { "pages" pages n.dashify tie.or.space.connect } { "page" pages tie.or.space.connect } if$ } if$ } FUNCTION {format.vol.num.pages} { volume field.or.null number empty$ 'skip$ { "(" number * ")" * * volume empty$ { "there's a number but no volume in " cite$ * warning$ } 'skip$ if$ } if$ pages empty$ 'skip$ { duplicate$ empty$ { pop$ format.pages } { ":" * pages n.dashify * } if$ } if$ } FUNCTION {format.chapter.pages} { chapter empty$ 'format.pages { type empty$ { "chapter" } { type "l" change.case$ } if$ chapter tie.or.space.connect pages empty$ 'skip$ { ", " * format.pages * } if$ } if$ } FUNCTION {format.in.ed.booktitle} { booktitle empty$ { "" } { editor empty$ { "In " booktitle emphasize * } { "In " format.editors * ", " * booktitle emphasize * } if$ } if$ } FUNCTION {empty.misc.check} { author empty$ title empty$ howpublished empty$ month empty$ year empty$ note empty$ and and and and and key empty$ not and { "all relevant fields are empty in " cite$ * warning$ } 'skip$ if$ } FUNCTION {format.thesis.type} { type empty$ 'skip$ { pop$ type "t" change.case$ } if$ } FUNCTION {format.tr.number} { type empty$ { "Technical Report" } 'type if$ number empty$ { "t" change.case$ } { number tie.or.space.connect } if$ } FUNCTION {format.article.crossref} { key empty$ { journal empty$ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ "" } { "In {\em " journal * "\/}" * } if$ } { "In " key * } if$ " \cite{" * crossref * "}" * } FUNCTION {format.crossref.editor} { editor #1 "{vv~}{ll}" format.name$ editor num.names$ duplicate$ #2 > { pop$ " et~al." * } { #2 < 'skip$ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = { " et~al." * } { " and " * editor #2 "{vv~}{ll}" format.name$ * } if$ } if$ } if$ } FUNCTION {format.book.crossref} { volume empty$ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ "In " } { "Volume" volume tie.or.space.connect " of " * } if$ editor empty$ editor field.or.null author field.or.null = or { key empty$ { series empty$ { "need editor, key, or series for " cite$ * " to crossref " * crossref * warning$ "" * } { "{\em " * series * "\/}" * } if$ } { key * } if$ } { format.crossref.editor * } if$ " \cite{" * crossref * "}" * } FUNCTION {format.incoll.inproc.crossref} { editor empty$ editor field.or.null author field.or.null = or { key empty$ { booktitle empty$ { "need editor, key, or booktitle for " cite$ * " to crossref " * crossref * warning$ "" } { "In {\em " booktitle * "\/}" * } if$ } { "In " key * } if$ } { "In " format.crossref.editor * } if$ " \cite{" * crossref * "}" * } FUNCTION {article} { output.bibitem format.authors "author" output.check new.block format.title "title" output.check new.block crossref missing$ { journal emphasize "journal" output.check format.vol.num.pages output format.date "year" output.check } { format.article.crossref output.nonnull format.pages output } if$ new.block note output fin.entry } FUNCTION {book} { output.bibitem author empty$ { format.editors "author and editor" output.check } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ new.block format.btitle "title" output.check crossref missing$ { format.bvolume output new.block format.number.series output new.sentence publisher "publisher" output.check address output } { new.block format.book.crossref output.nonnull } if$ format.edition output format.date "year" output.check new.block note output fin.entry } FUNCTION {booklet} { output.bibitem format.authors output new.block format.title "title" output.check howpublished address new.block.checkb howpublished output address output format.date output new.block note output fin.entry } FUNCTION {inbook} { output.bibitem author empty$ { format.editors "author and editor" output.check } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ new.block format.btitle "title" output.check crossref missing$ { format.bvolume output format.chapter.pages "chapter and pages" output.check new.block format.number.series output new.sentence publisher "publisher" output.check address output } { format.chapter.pages "chapter and pages" output.check new.block format.book.crossref output.nonnull } if$ format.edition output format.date "year" output.check new.block note output fin.entry } FUNCTION {incollection} { output.bibitem format.authors "author" output.check new.block format.title "title" output.check new.block crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output format.chapter.pages output new.sentence publisher "publisher" output.check address output format.edition output format.date "year" output.check } { format.incoll.inproc.crossref output.nonnull format.chapter.pages output } if$ new.block note output fin.entry } FUNCTION {inproceedings} { output.bibitem format.authors "author" output.check new.block format.title "title" output.check new.block crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output format.pages output address empty$ { organization publisher new.sentence.checkb organization output publisher output format.date "year" output.check } { address output.nonnull format.date "year" output.check new.sentence organization output publisher output } if$ } { format.incoll.inproc.crossref output.nonnull format.pages output } if$ new.block note output fin.entry } FUNCTION {conference} { inproceedings } FUNCTION {manual} { output.bibitem author empty$ { organization empty$ 'skip$ { organization output.nonnull address output } if$ } { format.authors output.nonnull } if$ new.block format.btitle "title" output.check author empty$ { organization empty$ { address new.block.checka address output } 'skip$ if$ } { organization address new.block.checkb organization output address output } if$ format.edition output format.date output new.block note output fin.entry } FUNCTION {mastersthesis} { output.bibitem format.authors "author" output.check new.block format.title "title" output.check new.block "Master's thesis" format.thesis.type output.nonnull school "school" output.check address output format.date "year" output.check new.block note output fin.entry } FUNCTION {misc} { output.bibitem format.authors output title howpublished new.block.checkb format.title output howpublished new.block.checka howpublished output format.date output new.block note output fin.entry empty.misc.check } FUNCTION {phdthesis} { output.bibitem format.authors "author" output.check new.block format.btitle "title" output.check new.block "PhD thesis" format.thesis.type output.nonnull school "school" output.check address output format.date "year" output.check new.block note output fin.entry } FUNCTION {proceedings} { output.bibitem editor empty$ { organization output } { format.editors output.nonnull } if$ new.block format.btitle "title" output.check format.bvolume output format.number.series output address empty$ { editor empty$ { publisher new.sentence.checka } { organization publisher new.sentence.checkb organization output } if$ publisher output format.date "year" output.check } { address output.nonnull format.date "year" output.check new.sentence editor empty$ 'skip$ { organization output } if$ publisher output } if$ new.block note output fin.entry } FUNCTION {techreport} { output.bibitem format.authors "author" output.check new.block format.title "title" output.check new.block format.tr.number output.nonnull institution "institution" output.check address output format.date "year" output.check new.block note output fin.entry } FUNCTION {unpublished} { output.bibitem format.authors "author" output.check new.block format.title "title" output.check new.block note "note" output.check format.date output fin.entry } FUNCTION {default.type} { misc } MACRO {jan} {"January"} MACRO {feb} {"February"} MACRO {mar} {"March"} MACRO {apr} {"April"} MACRO {may} {"May"} MACRO {jun} {"June"} MACRO {jul} {"July"} MACRO {aug} {"August"} MACRO {sep} {"September"} MACRO {oct} {"October"} MACRO {nov} {"November"} MACRO {dec} {"December"} MACRO {acmcs} {"ACM Computing Surveys"} MACRO {acta} {"Acta Informatica"} MACRO {cacm} {"Communications of the ACM"} MACRO {ibmjrd} {"IBM Journal of Research and Development"} MACRO {ibmsj} {"IBM Systems Journal"} MACRO {ieeese} {"IEEE Transactions on Software Engineering"} MACRO {ieeetc} {"IEEE Transactions on Computers"} MACRO {ieeetcad} {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} MACRO {ipl} {"Information Processing Letters"} MACRO {jacm} {"Journal of the ACM"} MACRO {jcss} {"Journal of Computer and System Sciences"} MACRO {scp} {"Science of Computer Programming"} MACRO {sicomp} {"SIAM Journal on Computing"} MACRO {tocs} {"ACM Transactions on Computer Systems"} MACRO {tods} {"ACM Transactions on Database Systems"} MACRO {tog} {"ACM Transactions on Graphics"} MACRO {toms} {"ACM Transactions on Mathematical Software"} MACRO {toois} {"ACM Transactions on Office Information Systems"} MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} MACRO {tcs} {"Theoretical Computer Science"} READ FUNCTION {sortify} { purify$ "l" change.case$ } INTEGERS { len } FUNCTION {chop.word} { 's := 'len := s #1 len substring$ = { s len #1 + global.max$ substring$ } 's if$ } FUNCTION {sort.format.names} { 's := #1 'nameptr := "" s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { nameptr #1 > { " " * } 'skip$ if$ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := nameptr numnames = t "others" = and { "et al" * } { t sortify * } if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {sort.format.title} { 't := "A " #2 "An " #3 "The " #4 t chop.word chop.word chop.word sortify #1 global.max$ substring$ } FUNCTION {author.sort} { author empty$ { key empty$ { "to sort, need author or key in " cite$ * warning$ "" } { key sortify } if$ } { author sort.format.names } if$ } FUNCTION {author.editor.sort} { author empty$ { editor empty$ { key empty$ { "to sort, need author, editor, or key in " cite$ * warning$ "" } { key sortify } if$ } { editor sort.format.names } if$ } { author sort.format.names } if$ } FUNCTION {author.organization.sort} { author empty$ { organization empty$ { key empty$ { "to sort, need author, organization, or key in " cite$ * warning$ "" } { key sortify } if$ } { "The " #4 organization chop.word sortify } if$ } { author sort.format.names } if$ } FUNCTION {editor.organization.sort} { editor empty$ { organization empty$ { key empty$ { "to sort, need editor, organization, or key in " cite$ * warning$ "" } { key sortify } if$ } { "The " #4 organization chop.word sortify } if$ } { editor sort.format.names } if$ } FUNCTION {presort} { type$ "book" = type$ "inbook" = or 'author.editor.sort { type$ "proceedings" = 'editor.organization.sort { type$ "manual" = 'author.organization.sort 'author.sort if$ } if$ } if$ " " * year field.or.null sortify * " " * title field.or.null sort.format.title * #1 entry.max$ substring$ 'sort.key$ := } ITERATE {presort} SORT STRINGS { longest.label } INTEGERS { number.label longest.label.width } FUNCTION {initialize.longest.label} { "" 'longest.label := #1 'number.label := #0 'longest.label.width := } FUNCTION {longest.label.pass} { number.label int.to.str$ 'label := number.label #1 + 'number.label := label width$ longest.label.width > { label 'longest.label := label width$ 'longest.label.width := } 'skip$ if$ } EXECUTE {initialize.longest.label} ITERATE {longest.label.pass} FUNCTION {begin.bib} { preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$ "\begin{thebibliography}{" longest.label * "}" * write$ newline$ } EXECUTE {begin.bib} EXECUTE {init.state.consts} ITERATE {call.type$} FUNCTION {end.bib} { newline$ "\end{thebibliography}" write$ newline$ } EXECUTE {end.bib} DyLP-1.10.4/DyLP/doc/TexMF/bibtex/bib/0000755000175200017520000000000013434203622015423 5ustar coincoinDyLP-1.10.4/DyLP/doc/TexMF/bibtex/bib/dylp.bib0000644000175200017520000000534211171477034017063 0ustar coincoin @article{Bix92a, author = "Bixby, R.", title = "Implementing the Simplex Method: The Initial Basis", journal = "ORSA Journal on Computing", volume = "4", number = "3", pages = "267--284", month = "Summer", year = "1992", key = "Bixby" } @misc{COIN, title = "COIN-OR (Common Infrastructure for Operations Research)", howpublished = "\\Available at \texttt{http:{/}/www.coin-or.org}", key = "COIN" } @article{For92, author = "Forrest, J. and Goldfarb, D.", title = "Steepest-edge simplex algorithms for linear programming", journal = "Mathematical Programming", volume = "57", pages = "341--374", year = "1992", key = "Forrest" } @TechReport{Haf98a, author = "Hafer, L.", title = "A Note on the Relationship of Primal and Dual Simplex", number = "SFU-CMPT TR 1998-21", institution = "School of Computing Science, Simon Fraser University", address = "Burnaby, B.C., V5A 1S6", month = dec, year = "1998", key = "Hafer", date = "December 10, 1998", comment = "Previously cited as Haf97b." } @TechReport{Haf98b, author = "Hafer, L.", title = "\textsc{consys}: a dynamic constraint system", number = "SFU-CMPT TR 1998-22", institution = "School of Computing Science, Simon Fraser University", address = "Burnaby, B.C., V5A 1S6", month = dec, year = "1998", key = "Hafer", date = "December 16, 1998", comment = "Previously cited as Haf97a." } @misc{GLPK, author = "Makhorin, A.", title = "GLPK (GNU Linear Programming Kit)", howpublished = "\\Available at \texttt{http:{/}/www.gnu.org/software/glpk/glpk.html}", key = "Makhorin" } @techreport{Mak01, author = "Makhorin, A.", title = "GLPK Linear Programming Kit: Implementation of the Revised Simplex Method", type = "GLPK documentation", institution = "Moscow Aviation Institute", address = "Moscow, Russia", month = feb, year = "2001", key = "Makhorin" } @book{Mar03, author = "Maros, I.", title = "Computational Techniques of the Simplex Method", publisher = "Kluwer Academic Publishers", address = "Norwell, Massachusetts", year = "2003", isbn = "1-4020-7332-1", key = "Maros" } @book{Pad95, author = "Padberg, M.", title = "Linear Optimization and Extensions", series = "Algorithms and Combinatorics", volume = "12", publisher = "Springer-Verlag", address = "New York", year = "1995", isbn = "3-540-58734-9", key = "Padberg" } @article{Rya88, author = "Ryan, D. and Osborne, M.", title = "On the Solution of Highly Degenerate Linear Programmes", journal = "Mathematical Programming", volume = "41", pages = "385--392", year = "1988", key = "Ryan", comment = "This is a accessible description of the antidegeneracy mechanism used in dylp.", } DyLP-1.10.4/DyLP/doc/TexMF/tex/0000755000175200017520000000000013434203622014212 5ustar coincoinDyLP-1.10.4/DyLP/doc/TexMF/tex/latex/0000755000175200017520000000000013434203622015327 5ustar coincoinDyLP-1.10.4/DyLP/doc/TexMF/tex/latex/loubookman.sty0000644000175200017520000000717511171477034020256 0ustar coincoin%% %% This is file `loubookman.sty', modified %% from the distribution bookman.sty by Lou Hafer, 96.03.30 %% %% The original source files were: %% %% psfonts.dtx (with options: `bookman') %% %% Copyright (C) 1994 Sebastian Rahtz %% All rights reserved. %% %% This file is part of the PSNFSS2e package. %% ----------------------------------------- %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{loubookman}% [96/04/26\space1.0\space Bookman Text & Math PSNFSS2e package] % The basic commands to set up Bookman/AvantGarde/Courier as the default % text fonts. \renewcommand{\encodingdefault}{T1} \renewcommand{\rmdefault}{pbk} \renewcommand{\sfdefault}{pag} \renewcommand{\ttdefault}{pcr} % The math fonts are the pbk fonts as generated by the fontinst package and the % pbkmath.tex file. Replace the basic symbol fonts with the pbk virtual fonts, % then reset the \mathbf, \mathsf, \mathtt, and \mathit fonts to Bookman % Demibold, AvantGarde, Courier, and Bookman Italic (OT1 encoding), % respectively, so we don't default to Computer Modern fonts. We also add the % Postscript Symbol font so we can pick up symbols from it that TeX would % normally build with overstrikes. \DeclareSymbolFont{operators} {OT1}{pbk}{l}{n} \DeclareSymbolFont{letters} {OML}{pbk}{l}{it} \DeclareSymbolFont{boldletters} {OML}{pbk}{db}{it} \DeclareSymbolFont{symbols} {OMS}{pbk}{l}{n} \DeclareSymbolFont{largesymbols}{OMX}{pbk}{l}{n} \DeclareSymbolFont{pisymbols} {U}{psy}{m}{n} \DeclareSymbolFont{slpisymbols} {U}{psy}{m}{sl} \DeclareSymbolFontAlphabet{\mathbi}{boldletters} \SetMathAlphabet{\mathbf}{normal}{OT1}{pbk}{db}{n} \SetMathAlphabet{\mathsf}{normal}{OT1}{pag}{m}{n} \SetMathAlphabet{\mathtt}{normal}{OT1}{pcr}{m}{n} \SetMathAlphabet{\mathit}{normal}{OT1}{pbk}{l}{i} % The same deal, for the bold math version. \SetSymbolFont{operators}{bold}{OT1}{pbk}{db}{n} \SetSymbolFont{letters}{bold}{OML}{pbk}{db}{it} \SetSymbolFont{boldletters}{bold} {OML}{pbk}{db}{it} \SetSymbolFont{symbols}{bold}{OMS}{pbk}{db}{n} \SetSymbolFont{largesymbols}{bold}{OMX}{pbk}{m}{n} \SetMathAlphabet{\mathbf}{bold}{OT1}{pbk}{db}{n} \SetMathAlphabet{\mathsf}{bold}{OT1}{pag}{db}{n} \SetMathAlphabet{\mathtt}{bold}{OT1}{pcr}{b}{n} \SetMathAlphabet{\mathit}{bold}{OT1}{pbk}{db}{i} % Symbols taken from the Postscript Symbol font. % These next few are normally composite. We have to whack LaTeX over % the head to allow us to redefine them with DeclareMathSymbol. (vid. % Sec. 3.6 of the LaTeX2e Font Selection Guide). \let\neq\relax \DeclareMathSymbol{\neq}{\mathrel}{pisymbols}{"B9} \let\notin\relax \DeclareMathSymbol{\notin}{\mathrel}{pisymbols}{"CF} % It turns out that the majority of greek letters are declared as \mathord, % which means they aren't affected by math alphabet changes. So, if I want % a bold beta from \mathbi{\beta}, it has to be redeclared as type \mathalpha. % Also, TeX Math Italic doesn't contain superfluous Greek letters (i.e., the % ones that look like standard alphabetic letters). But the Symbol font does, % and it's nice to have them for consistency. % This section will no doubt grow. %\DeclareMathSymbol{\beta}{\mathalpha}{letters}{"0C} \DeclareMathSymbol{\omicron}{\mathalpha}{slpisymbols}{"6F} \DeclareMathSymbol{\Eta}{\mathalpha}{slpisymbols}{"48} % Some additional Greek. Added as needed. % Reduce the space around math operators. This was in the original that I % cribbed from the fontinst distribution. It reduces the plain TeX definitions % by .5 mu and significantly cuts the adjustability of medmuskip and % thickmuskip. \thinmuskip=2.5mu \medmuskip=3.5mu plus 1mu minus 1mu \thickmuskip=4.5mu plus 1.5mu minus 1mu \endinput %% %% End of file `loubookman.sty'. DyLP-1.10.4/DyLP/doc/TexMF/tex/latex/loumath.sty0000644000175200017520000001151611263240452017545 0ustar coincoin \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{loumath}[1998/09/09 v2.0 Lou Hafer Math macros] \RequirePackage{theorem} \RequirePackage{amssymb} % Retool theorem, definition, etc., to be more to my liking. \theoremheaderfont{\bfseries\scshape} \theorembodyfont{\rmfamily} \newcommand{\thmref}[1]{Theorem~\ref{#1}} \newcommand{\propref}[1]{Proposition~\ref{#1}} \newcommand{\corref}[1]{Corollary~\ref{#1}} % I originally used \labelsep to separate `Proof' from the start of the text. % Unfortunately, this tends to screw up nested list environments, so I changed % to adding the space directly, as part of the label. Because this isn't used % as an enumerated list environment, nested enumerated lists look better if the % list depth isn't incremented. The hack at the end of the proof environment % to print a black square, right-justified & pushed to the next line only % if necessary, comes from p.106 of the TeX Book. \newenvironment{proof} {\begin{list}{\textsc{Proof.\hspace{4ex}}}% {\setlength{\leftmargin}{0pt}% \setlength{\labelwidth}{0pt}% \setlength{\itemindent}{\labelsep}% \setlength{\listparindent}{\parindent}% \global\advance\@listdepth\m@ne}% \item\relax} {\unskip\nobreak\hfil\penalty50\hskip1em\hbox{}\nobreak\hfill$\blacksquare$% \global\advance\@listdepth\@ne% \end{list}} \newenvironment{definition*} {\begin{list}{\textsc{\bfseries Definition.}}% {\setlength{\leftmargin}{0pt}% \setlength{\labelwidth}{0pt}% \setlength{\labelsep}{4ex}% \setlength{\itemindent}{\labelsep}}% \item} {\end{list}} % Redid the norm, abs, floor, and ceil macros so that they'll automatically % choose reasonable delimiters. Not so easy as I thought it'd be. \newlength{\loumath@tmpA} \newlength{\loumath@tmpB} \newsavebox{\loumath@bxA} % All this work is necessary so that we can decide whether to try for simple % characters or the constructed delimiters. The trouble is that the smallest % of the constructed delimiters is just a bit too big for your typical % trivial use --- \norm{x} just doesn't look right with \left\| and \right\| % surrounding it; you need \|x\|. It'd all go relatively easily except that % we have to get the math mode right when we build the inner formula in a % box to measure its height. Once that rears its ugly head, it just keeps % getting worse. The \with@delims macro is probably a bit more general than % it needs to be, but it was interesting to craft it up. \newcommand{\with@delims}[7]% {\sbox{\loumath@bxA}{\ensuremath{#1 #4}}% \settoheight{\loumath@tmpA}{\usebox{\loumath@bxA}}% \settodepth{\loumath@tmpB}{\usebox{\loumath@bxA}}% \addtolength{\loumath@tmpA}{\loumath@tmpB}% \ifthenelse{\lengthtest{\loumath@tmpA > 1.1\baselineskip}}% {\left#2% \usebox{\loumath@bxA}% \right#6_{\kern -.09em \raisebox{-.4ex}{$\scriptscriptstyle #7$}}}% {#3% \usebox{\loumath@bxA}% #5_{\raisebox{-.4ex}{$\scriptscriptstyle #7$}}}} % vector norm, with optional argument to specify type of norm. Also absolute % value, floor, and ceiling. \newcommand{\norm}[2][]% {\mathchoice{\with@delims{\displaystyle}{\|}{\|}{#2}{\|}{\|}{#1}} {\with@delims{\textstyle}{\|}{\|}{#2}{\|}{\|}{#1}} {\with@delims{\scriptstyle}{\|}{\|}{#2}{\|}{\|}{#1}} {\with@delims{\scriptscriptstyle}{\|}{\|}{#2}{\|}{\|}{#1}}} \newcommand{\abs}[1]% {\mathchoice% {\with@delims{\displaystyle}{|}{|}{#1}{|}{|}{}} {\with@delims{\textstyle}{|}{|}{#1}{|}{|}{}} {\with@delims{\scriptstyle}{|}{|}{#1}{|}{|}{}} {\with@delims{\scriptscriptstyle}{|}{|}{#1}{|}{|}{}}} \newcommand{\floor}[1]% {\mathchoice% {\with@delims{\displaystyle}{\lfloor}{\lfloor}{#1}{\rfloor}{\rfloor}{}} {\with@delims{\textstyle}{\lfloor}{\lfloor}{#1}{\rfloor}{\rfloor}{}} {\with@delims{\scriptstyle}{\lfloor}{\lfloor}{#1}{\rfloor}{\rfloor}{}} {\with@delims{\scriptscriptstyle}{\lfloor}{\lfloor}{#1}{\rfloor}{\rfloor}{}}} \newcommand{\ceil}[1]% {\mathchoice% {\with@delims{\displaystyle}{\lceil}{\lceil}{#1}{\rceil}{\rceil}{}} {\with@delims{\textstyle}{\lceil}{\lceil}{#1}{\rceil}{\rceil}{}} {\with@delims{\scriptstyle}{\lceil}{\lceil}{#1}{\rceil}{\rceil}{}} {\with@delims{\scriptscriptstyle}{\lceil}{\lceil}{#1}{\rceil}{\rceil}{}}} % Matrix transpose \newcommand{\trans}[1]{\ensuremath{#1^\top}} % Matrix inverse --- the problem here is picky spacing at the top of the % italic capital that's typically used for a matrix variable. The default % 2mu is about right at the top of an italic `B'. The second bit of spacing % pulls the `1' closer to the `-' in `-1'. \newcommand{\inv}[2][2]{\ensuremath{#2^{\mspace{#1mu}-\mspace{-2mu}1}}} % A general macro for things of the form F(k), where `F' is something in roman % type. There are specific convenience macros for `big-O' complexity and % Fibonacci numbers F(k) \newcommand{\romanFunc}[2]{\ensuremath{\mathrm{#1}(#2)}} \newcommand{\bigO}[1]{\romanFunc{O}{#1}} \newcommand{\fib}[1]{\romanFunc{F}{#1}} DyLP-1.10.4/DyLP/doc/TexMF/tex/latex/codedocn.sty0000644000175200017520000002707511171477034017667 0ustar coincoin\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{codedocn}% [1996/04/10 v1.0 Lou Hafer Code documentation macros.] \RequirePackage{ifthen} % These macros are intended to make it easier to do documentation of code. % By default, the sans serif typeface is used for for code --- this has much % to do with my dislike of Courier. But it's changeable with this option. % Beware! The AvantGarde sans serif face is just too big to coexist with % the usual fonts. Rather than pick a size here (\small was about right), % I used the scaling capability of DeclareFontShape to scale it by .9. % See the private copy of T1pag.fd. \DeclareOption{rm}% {\renewcommand{\codefamily}{\rmfamily}% \renewcommand{\mathcodefam}[1]{\mathrm{#1}}} \DeclareOption{sf}% {\renewcommand{\codefamily}{\sffamily}% \renewcommand{\mathcodefam}[1]{\mathsf{#1}}} \DeclareOption{tt}% {\renewcommand{\codefamily}{\ttfamily}% \renewcommand{\mathcodefam}[1]{\mathtt{#1}}} \newcommand{\codefamily}{\sffamily} \newcommand{\mathcodefam}[1]{\mathsf{#1}} \ProcessOptions % Fix up the verbatim package so it's using a compatible font. \renewcommand{\verbatim@font}{\normalfont\codefamily} % Boxes and lengthes we can use. \newsavebox{\code@docnbx} \newlength{\code@docnlen} \newsavebox{\code@docnbxA} \newlength{\code@docnlenA} % A pair of macros to handle the common instance of program identifier names % with `_' included as a letter. The trick is to get TeX to execute the catcode % change before it scans the identifier and sees the `_'. The \relax is % critical, otherwise TeX starts to expand \@pgmid to see if it'll add to the % 12 that ends the catcode change. \newcommand{\pgmid}{\begingroup\catcode`\_=12\relax\@pgmid} \newcommand{\@pgmid}[1]{\ifmmode\mathcodefam{#1}\else\codefamily #1\fi\endgroup} % Similar fooling around to get a more complicated reference that can include % (optionally) a file name and/or a subroutine name. \newcommand{\coderef}{\begingroup\catcode`\_=12\relax\@coderef} \newcommand{\@coderef}[2]% {\codefamily% \ifthenelse{\equal{#1}{}}% {#2}% {\ifthenelse{\equal{#2}{}}{#1}{#1:#2}}% \endgroup} % A list environment for subroutine documentation. % The subrdoc environment doesn't do anything in particular; it's just a % precaution. % The subrhdr command takes two parameters, the type and name of the % subroutine, and the parameter list. The parameter list can be broken % into multiple lines with \\, and they will be indented by the length of % the type and name. `()' around the parameters are supplied automatically. % To use, % \begin{subrdoc} % \item % \subrhdr{int *foo}{int parm1, int parm2,\\char *somestring} % \end{subrdoc} % \newenvironment{subrdoc}% {\begin{list}{}{\setlength{\itemsep}{\baselineskip}}} {\end{list}} \newcommand{\subrhdr}{\begingroup\catcode`\_=12\relax\@subrhdr} \newcommand{\@subrhdr}[2] {\settowidth{\code@docnlenA}{\codefamily\bfseries #1 ( }% \sbox{\code@docnbxA}% {\hspace*{\code@docnlenA}% \parbox[t]{\linewidth-\code@docnlenA-\rightmargin-5.0pt}% {\codefamily\bfseries\raggedright\makebox[0pt][r]{#1 ( }#2 )\\[1ex]}}% \setlength{\code@docnlenA}{-\labelwidth-\labelsep}% \hspace{\code@docnlenA}\usebox{\code@docnbxA}\endgroup\par} % A list environment for field names, parameters, etc. The header for an % item is a single name. All we're doing here is recreating a description % environment while making it easy to typeset the header. Usage is as for % subrdoc --- \item\varhdr{...}. NOTE that the \@varhdr macro has >> 2 << % parameters. The net effect is that it gobbles the next non-space character. % This gets around TeX's inclination to insert an inter-word space in the % normal sort of usage, where there's a space or line break after the % obvious parameter, i.e., \item\varhdr{hdr_name} Now the text ... \newenvironment{codedoc}[1][\hspace{5em}]% {\begin{list}{}{\settowidth{\labelwidth}{#1}% \setlength{\labelsep}{1em}% \setlength{\leftmargin}{\labelwidth+\labelsep}}} {\end{list}} \newcommand{\varhdr}{\begingroup\catcode`\_=12\relax\@varhdr} \newcommand{\@varhdr}[2] {\hspace{-\leftmargin}\codefamily\bfseries% \settowidth{\code@docnlenA}{#1}% \ifthenelse{\lengthtest{\code@docnlenA > \labelwidth}}% {\mbox{#1}}% {\makebox[\labelwidth][r]{#1}}% \endgroup\hspace{\labelsep}#2} % And the big version, Varhdr. This one is intended for substructures. The % first parameter will become the item header (typically the name of the % substructure). The 2nd parameter should contain all the fields. The lot % will be typeset much as for subrhdr, indented by the size of the first % parameter. \newcommand{\Varhdr}{\begingroup\catcode`\_=12\relax\@Varhdr} \newcommand{\@Varhdr}[2] {\settowidth{\code@docnlenA}{\codefamily\bfseries #1: }% \sbox{\code@docnbxA}% {\ifthenelse{\lengthtest{\code@docnlenA > \labelwidth}}% {\hspace*{\code@docnlenA}% \parbox[t]{\linewidth-\code@docnlenA-\rightmargin-5.0pt}% {\codefamily\bfseries\raggedright\makebox[0pt][r]{#1: }#2\\[.25ex]}}% {\setlength{\code@docnlenA}{\labelwidth+\labelsep}% \hspace*{\code@docnlenA}% \parbox[t]{\linewidth-\labelwidth-\labelsep-\rightmargin-5.0pt}% {\codefamily\bfseries\raggedright% \makebox[0pt][r]{#1:\hspace{\labelsep}}#2\\[.25ex]}}}% \setlength{\code@docnlenA}{-\labelwidth-\labelsep}% \hspace{\code@docnlenA}\usebox{\code@docnbxA}\endgroup\par} % Macros intended to make it a bit easier to set BNF syntax descriptions. \newcommand{\keywd@font}{\ttfamily\upshape} \newcommand{\term@font}{\codefamily\upshape} \newcommand{\nterm@font}{\codefamily\itshape} \newcommand{\kw}[1]{{\keywd@font#1}} \newcommand{\te}[1]{{\term@font#1}} \newcommand{\nt}[1]{{\nterm@font#1}} \newcommand{\bnflist}[2][]{#2\te{-LIST}\textsuperscript{\kw{#1}}} % An environment for typesetting bnf descriptions. The lhs command is used % only inside this environment, as an alias for \item. \newenvironment{bnf}[1][\quad]% {\begin{list}{}{\renewcommand{\makelabel}[1]{##1 \hfill}% \settowidth{\labelwidth}{#1}% \setlength{\leftmargin}{\labelwidth+\labelsep}% \term@font}} {\end{list}} \newcommand{\lhs}[1]{\item[\nt{#1} \bnfeq ]} % Various special symbols. bnfnull writes the word null in a distinct script. % bnfeq does up `::=' with decent alignment. \newcommand{\bnfnull}{{\fontfamily{pzc}\fontshape{it}\selectfont null}} \newcommand{\bnfeq}{::\raise-1.1pt\hbox{=} } % And now an environment and various commands aimed at psuedocode. Basically % we set up a tabbing environment, in the codefamily font. Comments revert % to textrm. The surrounding list allows us to shrink the margins. \newcommand{\pseudo@indent}{\{ } \newenvironment{pseudocode}[1][\parindent] {\begin{list}{}{\setlength{\leftmargin}{#1}\setlength{\topsep}{0pt}}% \codefamily\bfseries% \renewcommand{\textit}[1]{{\rmfamily\itshape\mdseries ##1}}% \renewcommand{\textrm}[1]{{\rmfamily\upshape\mdseries ##1}}% \item% \begin{tabbing}% \pseudo@indent\=\pseudo@indent\=\pseudo@indent\=\pseudo@indent\=% \pseudo@indent\=\pseudo@indent\= \kill} {\end{tabbing} \end{list}} \newcommand{\pseudocomment}[1]% {\sbox{\code@docnbx}{/* \textrm{#1} */}% \settowidth{\code@docnlen}{\usebox{\code@docnbx}}% \ifthenelse{\lengthtest{\code@docnlen > \linewidth}}% {/*\+\\ \parbox{\linewidth}{\raggedright\textrm{#1}}\-\\ {}*/\\}% {\\[-.25\baselineskip]/* \textrm{#1} */\\[.25\baselineskip]}% } % An environment and commands suitable for assembly language. % The following are generic sizes. We have to % delay setting the comment length until execution so that we get the current % value for \linewidth. % A macro for sizing the environment. The assumption is that some point size % has been established. \newlength{\assem@comindent} \newlength{\assem@datasze} \newlength{\assem@addrsze} \newlength{\assem@blkcomsze} \newlength{\assem@commentsze} \newlength{\assem@operandsze} \newlength{\assem@opcodesze} \newlength{\assem@lblsze} \newboolean{assem@listing} \newcommand{\assem@comchar}{;} \newcommand{\setassemsize}[1][\normalsize]% {#1% \setlength{\assem@lblsze}{10ex}% \setlength{\assem@opcodesze}{6ex}% \setlength{\assem@operandsze}{20ex}% \setlength{\assem@addrsze}{6ex}% \setlength{\assem@datasze}{3ex}% } \setassemsize \newenvironment{assembler}[1][\assem@comchar] {\begin{flushleft}\codefamily% \setboolean{assem@listing}{false}% \setlength{\assem@commentsze}% {\linewidth-\assem@lblsze-\assem@opcodesze-\assem@operandsze-8\tabcolsep}% \setlength{\assem@blkcomsze}{\linewidth-2\tabcolsep}% \begin{tabular}% {p{\assem@lblsze}p{\assem@opcodesze}% p{\assem@operandsze}>{#1 }p{\assem@commentsze}}} {\end{tabular}\end{flushleft}} \newenvironment{assemblerlisting} {\begin{flushleft}\codefamily% \setboolean{assem@listing}{true}% \setlength{\assem@comindent}% {\assem@addrsze+\assem@datasze+4\tabcolsep} \setlength{\assem@commentsze}% {\linewidth-\assem@lblsze-\assem@opcodesze-\assem@operandsze-12\tabcolsep}% \addtolength{\assem@commentsze}{-\assem@addrsze-\assem@datasze}% \setlength{\assem@blkcomsze}{\linewidth-\assem@comindent} \begin{tabular}% {p{\assem@addrsze}p{\assem@datasze}% p{\assem@lblsze}p{\assem@opcodesze}% p{\assem@operandsze}>{\assem@comchar\ }p{\assem@commentsze}}} {\end{tabular}\end{flushleft}} % A block comment macro. The user-level call is \assemblkcom{the comment}. % It will automatically break up the comment into lines, adding the `;' at the % front. The strategy is to suck the entire comment into a box, and see if % it'll fit on one line. If it doesn't, we initialise a box to `; ', then call % break@comment, which will try to add words to the line until the next word % won't fit. Then it dumps the box, reinitialises it, and continues. The string % end@comment is tacked onto the end, and when we see that we're done. Turns % out \multicolumn has problems inside an ifthenelse, for some reason, so I've % fallen back on \makebox, lying about the width. `&' also seems to have % trouble, but only in the \break@comment macro. To all appearances, when I % try to leave two blank columns in listing format with `& &', the % \code@docnbx seems to be emptied (?). Faked it with hspace. \def\break@comment #1 #2 {% \settowidth{\code@docnlen}{\usebox{\code@docnbx}}% \settowidth{\code@docnlenA}{ #1}% \addtolength{\code@docnlenA}{\code@docnlen}% \ifthenelse{\lengthtest{\code@docnlenA > \assem@blkcomsze}}% {\ifthenelse{\boolean{assem@listing}}% {\makebox[\assem@addrsze][l]% {\hspace{\assem@comindent}\usebox{\code@docnbx}} \\}% {\makebox[\assem@lblsze][l]{\usebox{\code@docnbx}} \\}% \sbox{\code@docnbx}{\assem@comchar{}}% \def\bk@nxt{\break@comment #1 }}% {\sbox{\code@docnbx}{\usebox{\code@docnbx} #1}% \ifthenelse{\equal{#2}{end@comment}}% {\ifthenelse{\boolean{assem@listing}}% {\makebox[\assem@addrsze][l]% {\hspace{\assem@comindent}\usebox{\code@docnbx}}}% {\makebox[\assem@lblsze][l]{\usebox{\code@docnbx}}}% \def\bk@nxt ##1 {}}% {\let\bk@nxt\break@comment}} \bk@nxt #2 % } \newcommand{\assemblkcom}[1]% {\sbox{\code@docnbx}{\assem@comchar\ #1}% \settowidth{\code@docnlen}{\usebox{\code@docnbx}}% \ifthenelse{\lengthtest{\code@docnlen > \assem@blkcomsze}}% {\sbox{\code@docnbx}{\assem@comchar{}}\break@comment #1 end@comment}% {\ifthenelse{\boolean{assem@listing}}{& &}{}% \makebox[\assem@lblsze][l]{\assem@comchar\ #1}}% } % This will format the label on a line by itself if it's longer than the % label column. \newcommand{\assemlbl}[1]% {\sbox{\code@docnbx}{#1:}% \settowidth{\code@docnlen}{\usebox{\code@docnbx}}% \ifthenelse{\lengthtest{\code@docnlen > \assem@lblsze}}% {\makebox[\assem@lblsze][l]{#1:}\\% \ifthenelse{\boolean{assem@listing}}{& &}{}}% {#1:}% } DyLP-1.10.4/DyLP/doc/TexMF/tex/latex/psnfss/0000755000175200017520000000000013434203622016643 5ustar coincoinDyLP-1.10.4/DyLP/doc/TexMF/tex/latex/psnfss/t1pbk.fd0000644000175200017520000000317111171477034020207 0ustar coincoin%Filename: T1pbk.fd %Created by: tex 12657bookman %Created using fontinst v1.335 %THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY \ProvidesFile{T1pbk.fd} [1995/08/11 Fontinst v1.335 font definitions for T1/pbk.] \DeclareFontFamily{T1}{pbk}{} \DeclareFontShape{T1}{pbk}{db}{n}{ <-> pbkd8t }{} \DeclareFontShape{T1}{pbk}{db}{sc}{ <-> pbkdc8t }{} \DeclareFontShape{T1}{pbk}{db}{sl}{ <-> pbkdo8t }{} \DeclareFontShape{T1}{pbk}{db}{it}{ <-> pbkdi8t }{} \DeclareFontShape{T1}{pbk}{db}{ui}{ <-> pbkdu8t }{} \DeclareFontShape{T1}{pbk}{l}{n}{ <-> pbkl8t }{} \DeclareFontShape{T1}{pbk}{l}{sc}{ <-> pbklc8t }{} \DeclareFontShape{T1}{pbk}{l}{sl}{ <-> pbklo8t }{} \DeclareFontShape{T1}{pbk}{l}{it}{ <-> pbkli8t }{} \DeclareFontShape{T1}{pbk}{l}{ui}{ <-> pbklu8t }{} \DeclareFontShape{T1}{pbk}{b}{n}{<->ssub * pbk/db/n}{} \DeclareFontShape{T1}{pbk}{bx}{n}{<->ssub * pbk/b/n}{} \DeclareFontShape{T1}{pbk}{b}{sc}{<->ssub * pbk/db/sc}{} \DeclareFontShape{T1}{pbk}{bx}{sc}{<->ssub * pbk/b/sc}{} \DeclareFontShape{T1}{pbk}{b}{sl}{<->ssub * pbk/db/sl}{} \DeclareFontShape{T1}{pbk}{bx}{sl}{<->ssub * pbk/b/sl}{} \DeclareFontShape{T1}{pbk}{b}{it}{<->ssub * pbk/db/it}{} \DeclareFontShape{T1}{pbk}{bx}{it}{<->ssub * pbk/b/it}{} \DeclareFontShape{T1}{pbk}{b}{ui}{<->ssub * pbk/db/ui}{} \DeclareFontShape{T1}{pbk}{bx}{ui}{<->ssub * pbk/b/ui}{} \DeclareFontShape{T1}{pbk}{m}{n}{<->ssub * pbk/l/n}{} \DeclareFontShape{T1}{pbk}{m}{sc}{<->ssub * pbk/l/sc}{} \DeclareFontShape{T1}{pbk}{m}{sl}{<->ssub * pbk/l/sl}{} \DeclareFontShape{T1}{pbk}{m}{it}{<->ssub * pbk/l/it}{} \DeclareFontShape{T1}{pbk}{m}{ui}{<->ssub * pbk/l/ui}{} \endinput DyLP-1.10.4/DyLP/doc/TexMF/tex/latex/psnfss/upbk.fd0000644000175200017520000000313411171477034020126 0ustar coincoin%Filename: Upbk.fd %Created by: tex 12657bookman %Created by hand %THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY \ProvidesFile{Upbk.fd} [1995/08/11 Created by Lou Hafer so I can get at the Adobe characters] \DeclareFontFamily{U}{pbk}{} \DeclareFontShape{U}{pbk}{db}{n}{ <-> pbkd8r }{} \DeclareFontShape{U}{pbk}{db}{sc}{ <-> pbkdc8r }{} \DeclareFontShape{U}{pbk}{db}{sl}{ <-> pbkdo8r }{} \DeclareFontShape{U}{pbk}{db}{it}{ <-> pbkdi8r }{} \DeclareFontShape{U}{pbk}{db}{ui}{ <-> pbkdu8r }{} \DeclareFontShape{U}{pbk}{l}{n}{ <-> pbkl8r }{} \DeclareFontShape{U}{pbk}{l}{sc}{ <-> pbklc8r }{} \DeclareFontShape{U}{pbk}{l}{sl}{ <-> pbklo8r }{} \DeclareFontShape{U}{pbk}{l}{it}{ <-> pbkli8r }{} \DeclareFontShape{U}{pbk}{l}{ui}{ <-> pbklu8r }{} \DeclareFontShape{U}{pbk}{b}{n}{<->ssub * pbk/db/n}{} \DeclareFontShape{U}{pbk}{bx}{n}{<->ssub * pbk/b/n}{} \DeclareFontShape{U}{pbk}{b}{sc}{<->ssub * pbk/db/sc}{} \DeclareFontShape{U}{pbk}{bx}{sc}{<->ssub * pbk/b/sc}{} \DeclareFontShape{U}{pbk}{b}{sl}{<->ssub * pbk/db/sl}{} \DeclareFontShape{U}{pbk}{bx}{sl}{<->ssub * pbk/b/sl}{} \DeclareFontShape{U}{pbk}{b}{it}{<->ssub * pbk/db/it}{} \DeclareFontShape{U}{pbk}{bx}{it}{<->ssub * pbk/b/it}{} \DeclareFontShape{U}{pbk}{b}{ui}{<->ssub * pbk/db/ui}{} \DeclareFontShape{U}{pbk}{bx}{ui}{<->ssub * pbk/b/ui}{} \DeclareFontShape{U}{pbk}{m}{n}{<->ssub * pbk/l/n}{} \DeclareFontShape{U}{pbk}{m}{sc}{<->ssub * pbk/l/sc}{} \DeclareFontShape{U}{pbk}{m}{sl}{<->ssub * pbk/l/sl}{} \DeclareFontShape{U}{pbk}{m}{it}{<->ssub * pbk/l/it}{} \DeclareFontShape{U}{pbk}{m}{ui}{<->ssub * pbk/l/ui}{} \endinput DyLP-1.10.4/DyLP/doc/TexMF/tex/latex/psnfss/omlpbk.fd0000644000175200017520000000216411171477034020453 0ustar coincoin%Filename: OMLpbk.fd %Created by: tex pbkmath %Created using fontinst v1.504 %THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY \ProvidesFile{OMLpbk.fd} [1996/07/31 Fontinst v1.504 font definitions for OML/pbk.] \DeclareFontFamily{OML}{pbk}{\skewchar \font =127} \DeclareFontShape{OML}{pbk}{l}{it}{ <-> pbkli7m }{} \DeclareFontShape{OML}{pbk}{db}{it}{ <-> pbkdi7m }{} \DeclareFontShape{OML}{pbk}{l}{ui}{<->sub * pbk/l/it}{} \DeclareFontShape{OML}{pbk}{m}{ui}{<->ssub * pbk/l/ui}{} \DeclareFontShape{OML}{pbk}{db}{ui}{<->sub * pbk/db/it}{} \DeclareFontShape{OML}{pbk}{b}{n}{<->ssub * pbk/db/n}{} \DeclareFontShape{OML}{pbk}{bx}{n}{<->ssub * pbk/b/n}{} \DeclareFontShape{OML}{pbk}{m}{it}{<->ssub * pbk/l/it}{} \DeclareFontShape{OML}{pbk}{l}{sl}{<->ssub * pbk/l/it}{} \DeclareFontShape{OML}{pbk}{m}{sl}{<->ssub * pbk/l/sl}{} \DeclareFontShape{OML}{pbk}{b}{it}{<->ssub * pbk/db/it}{} \DeclareFontShape{OML}{pbk}{bx}{it}{<->ssub * pbk/b/it}{} \DeclareFontShape{OML}{pbk}{db}{sl}{<->ssub * pbk/db/it}{} \DeclareFontShape{OML}{pbk}{b}{sl}{<->ssub * pbk/db/sl}{} \DeclareFontShape{OML}{pbk}{bx}{sl}{<->ssub * pbk/b/sl}{} \endinput DyLP-1.10.4/DyLP/doc/TexMF/tex/latex/psnfss/omspbk.fd0000644000175200017520000000265311171477034020465 0ustar coincoin%Filename: OMSpbk.fd %Created by: tex pbkmath %Created using fontinst v1.504 %THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY \ProvidesFile{OMSpbk.fd} [1996/07/31 Fontinst v1.504 font definitions for OMS/pbk.] \DeclareFontFamily{OMS}{pbk}{} \DeclareFontShape{OMS}{pbk}{l}{n}{ <-> pbkl7y }{} \DeclareFontShape{OMS}{pbk}{l}{it}{ <-> pbkli7y }{} \DeclareFontShape{OMS}{pbk}{db}{n}{ <-> pbkd7y }{} \DeclareFontShape{OMS}{pbk}{db}{it}{ <-> pbkdi7y }{} \DeclareFontShape{OMS}{pbk}{b}{n}{<->ssub * pbk/db/n}{} \DeclareFontShape{OMS}{pbk}{bx}{n}{<->ssub * pbk/b/n}{} \DeclareFontShape{OMS}{pbk}{b}{sc}{<->ssub * pbk/db/sc}{} \DeclareFontShape{OMS}{pbk}{bx}{sc}{<->ssub * pbk/b/sc}{} \DeclareFontShape{OMS}{pbk}{b}{sl}{<->ssub * pbk/b/n}{} \DeclareFontShape{OMS}{pbk}{bx}{sl}{<->ssub * pbk/b/sl}{} \DeclareFontShape{OMS}{pbk}{b}{it}{<->ssub * pbk/db/n}{} \DeclareFontShape{OMS}{pbk}{bx}{it}{<->ssub * pbk/b/it}{} \DeclareFontShape{OMS}{pbk}{b}{ui}{<->ssub * pbk/db/n}{} \DeclareFontShape{OMS}{pbk}{bx}{ui}{<->ssub * pbk/b/ui}{} \DeclareFontShape{OMS}{pbk}{m}{n}{<->ssub * pbk/l/n}{} \DeclareFontShape{OMS}{pbk}{m}{sc}{<->ssub * pbk/l/sc}{} \DeclareFontShape{OMS}{pbk}{m}{it}{<->ssub * pbk/l/it}{} \DeclareFontShape{OMS}{pbk}{l}{sl}{<->ssub * pbk/l/it}{} \DeclareFontShape{OMS}{pbk}{m}{sl}{<->ssub * pbk/l/sl}{} \DeclareFontShape{OMS}{pbk}{l}{ui}{<->sub * pbk/l/it}{} \DeclareFontShape{OMS}{pbk}{m}{ui}{<->ssub * pbk/l/ui}{} \endinput DyLP-1.10.4/DyLP/doc/TexMF/tex/latex/psnfss/ot1pag.fd0000644000175200017520000000343211171477034020361 0ustar coincoin%Filename: OT1pag.fd %Created by: tex 12466avantgar %Created using fontinst v1.335 %THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY % Modified to shrink the font by .9 to match the x height with Bookman. \ProvidesFile{OT1pag.fd} [1995/08/11 Fontinst v1.335 font definitions for OT1/pag.] \DeclareFontFamily{OT1}{pag}{} \DeclareFontShape{OT1}{pag}{db}{n}{ <-> s * [.9] pagd8t }{} \DeclareFontShape{OT1}{pag}{db}{sc}{ <-> s * [.9] pagdc8t }{} \DeclareFontShape{OT1}{pag}{db}{sl}{ <-> s * [.9] pagdo8t }{} \DeclareFontShape{OT1}{pag}{m}{n}{ <-> s * [.9] pagk8t }{} \DeclareFontShape{OT1}{pag}{m}{sc}{ <-> s * [.9] pagkc8t }{} \DeclareFontShape{OT1}{pag}{m}{sl}{ <-> s * [.9] pagko8t }{} \DeclareFontShape{OT1}{pag}{b}{n}{<->ssub * pag/db/n}{} \DeclareFontShape{OT1}{pag}{bx}{n}{<->ssub * pag/b/n}{} \DeclareFontShape{OT1}{pag}{b}{sc}{<->ssub * pag/db/sc}{} \DeclareFontShape{OT1}{pag}{bx}{sc}{<->ssub * pag/b/sc}{} \DeclareFontShape{OT1}{pag}{b}{sl}{<->ssub * pag/db/sl}{} \DeclareFontShape{OT1}{pag}{bx}{sl}{<->ssub * pag/b/sl}{} \DeclareFontShape{OT1}{pag}{db}{it}{<->ssub * pag/db/sl}{} \DeclareFontShape{OT1}{pag}{b}{it}{<->ssub * pag/db/it}{} \DeclareFontShape{OT1}{pag}{bx}{it}{<->ssub * pag/b/it}{} \DeclareFontShape{OT1}{pag}{db}{ui}{<->sub * pag/db/it}{} \DeclareFontShape{OT1}{pag}{b}{ui}{<->ssub * pag/db/ui}{} \DeclareFontShape{OT1}{pag}{bx}{ui}{<->ssub * pag/b/ui}{} \DeclareFontShape{OT1}{pag}{l}{n}{<->ssub * pag/m/n}{} \DeclareFontShape{OT1}{pag}{l}{sc}{<->ssub * pag/m/sc}{} \DeclareFontShape{OT1}{pag}{l}{sl}{<->ssub * pag/m/sl}{} \DeclareFontShape{OT1}{pag}{m}{it}{<->ssub * pag/m/sl}{} \DeclareFontShape{OT1}{pag}{l}{it}{<->ssub * pag/m/it}{} \DeclareFontShape{OT1}{pag}{m}{ui}{<->sub * pag/m/it}{} \DeclareFontShape{OT1}{pag}{l}{ui}{<->ssub * pag/m/ui}{} \endinput DyLP-1.10.4/DyLP/doc/TexMF/tex/latex/psnfss/t1pag.fd0000644000175200017520000000337511267165330020207 0ustar coincoin%Filename: T1pag.fd %Created by: tex 12466avantgar %Created using fontinst v1.335 %THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY % Modified to shrink the font by .9 to match the x height with Bookman. \ProvidesFile{T1pag.fd} [1995/08/11 Fontinst v1.335 font definitions for T1/pag.] \DeclareFontFamily{T1}{pag}{} \DeclareFontShape{T1}{pag}{db}{n}{ <-> s * [.9] pagd8t }{} \DeclareFontShape{T1}{pag}{db}{sc}{ <-> s * [.9] pagdc8t }{} \DeclareFontShape{T1}{pag}{db}{sl}{ <-> s * [.9] pagdo8t }{} \DeclareFontShape{T1}{pag}{m}{n}{ <-> s * [.9] pagk8t }{} \DeclareFontShape{T1}{pag}{m}{sc}{ <-> s * [.9] pagkc8t }{} \DeclareFontShape{T1}{pag}{m}{sl}{ <-> s * [.9] pagko8t }{} \DeclareFontShape{T1}{pag}{b}{n}{<->ssub * pag/db/n}{} \DeclareFontShape{T1}{pag}{bx}{n}{<->ssub * pag/b/n}{} \DeclareFontShape{T1}{pag}{b}{sc}{<->ssub * pag/db/sc}{} \DeclareFontShape{T1}{pag}{bx}{sc}{<->ssub * pag/b/sc}{} \DeclareFontShape{T1}{pag}{b}{sl}{<->ssub * pag/db/sl}{} \DeclareFontShape{T1}{pag}{bx}{sl}{<->ssub * pag/b/sl}{} \DeclareFontShape{T1}{pag}{db}{it}{<->ssub * pag/db/sl}{} \DeclareFontShape{T1}{pag}{b}{it}{<->ssub * pag/db/it}{} \DeclareFontShape{T1}{pag}{bx}{it}{<->ssub * pag/b/it}{} \DeclareFontShape{T1}{pag}{db}{ui}{<->sub * pag/db/it}{} \DeclareFontShape{T1}{pag}{b}{ui}{<->ssub * pag/db/ui}{} \DeclareFontShape{T1}{pag}{bx}{ui}{<->ssub * pag/b/ui}{} \DeclareFontShape{T1}{pag}{l}{n}{<->ssub * pag/m/n}{} \DeclareFontShape{T1}{pag}{l}{sc}{<->ssub * pag/m/sc}{} \DeclareFontShape{T1}{pag}{l}{sl}{<->ssub * pag/m/sl}{} \DeclareFontShape{T1}{pag}{m}{it}{<->ssub * pag/m/sl}{} \DeclareFontShape{T1}{pag}{l}{it}{<->ssub * pag/m/it}{} \DeclareFontShape{T1}{pag}{m}{ui}{<->sub * pag/m/it}{} \DeclareFontShape{T1}{pag}{l}{ui}{<->ssub * pag/m/ui}{} \endinput DyLP-1.10.4/DyLP/doc/TexMF/tex/latex/psnfss/omxpbk.fd0000644000175200017520000000056211171477034020467 0ustar coincoin%Filename: OMXpbk.fd %Created by: tex pbkmath %Created using fontinst v1.335 %THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY \ProvidesFile{OMXpbk.fd} [1996/07/13 Fontinst v1.335 font definitions for OMX/pbk.] \DeclareFontFamily{OMX}{pbk}{} \DeclareFontShape{OMX}{pbk}{l}{n}{ <-> pbkl7v }{} \DeclareFontShape{OMX}{pbk}{m}{n}{<->ssub * pbk/l/n}{} \endinput DyLP-1.10.4/DyLP/doc/TexMF/tex/latex/psnfss/ot1pbk.fd0000644000175200017520000000146011171477034020365 0ustar coincoin%Filename: OT1pbk.fd %Created by: tex pbkmath %Created using fontinst v1.504 %THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY \ProvidesFile{OT1pbk.fd} [1996/07/31 Fontinst v1.504 font definitions for OT1/pbk.] \DeclareFontFamily{OT1}{pbk}{} \DeclareFontShape{OT1}{pbk}{l}{n}{ <-> pbkl7t }{} \DeclareFontShape{OT1}{pbk}{l}{i}{ <-> pbkli7t }{} \DeclareFontShape{OT1}{pbk}{db}{n}{ <-> pbkd7t }{} \DeclareFontShape{OT1}{pbk}{db}{i}{ <-> pbkdi7t }{} \DeclareFontShape{OT1}{pbk}{m}{n}{<->ssub * pbk/l/n}{} \DeclareFontShape{OT1}{pbk}{m}{i}{<->ssub * pbk/l/i}{} \DeclareFontShape{OT1}{pbk}{b}{n}{<->ssub * pbk/db/n}{} \DeclareFontShape{OT1}{pbk}{bx}{n}{<->ssub * pbk/b/n}{} \DeclareFontShape{OT1}{pbk}{b}{i}{<->ssub * pbk/db/i}{} \DeclareFontShape{OT1}{pbk}{bx}{i}{<->ssub * pbk/b/i}{} \endinput DyLP-1.10.4/DyLP/doc/TexMF/tex/latex/psnfss/upsy.fd0000644000175200017520000000034011171477034020161 0ustar coincoin% LaTeX2e fd file for Symbol font. for PSNFSS 1995/08/11 % % Edited to add oblique Symbol. \DeclareFontFamily{U}{psy}{} \DeclareFontShape{U}{psy}{m}{n}{<->psyr}{} \DeclareFontShape{U}{psy}{m}{sl}{ <-> psyro }{} \endinput DyLP-1.10.4/DyLP/doc/TexMF/tex/latex/loustandard.sty0000644000175200017520000003044611171477034020425 0ustar coincoin \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{loustandard}% [1996/04/10 v1.0 Lou Hafer Standard macros, style modifications, etc.] \RequirePackage{calc} \RequirePackage{xspace} \RequirePackage{ifthen} \RequirePackage{array} \RequirePackage{version} % Basic Page Setup % The first thing we do is cancel the horizontal and vertical offsets. \setlength{\hoffset}{-1in} \setlength{\voffset}{-1in} % For one-sided printing, arrange for 1 inch margins on each side. For % two-sided printing, add 1/2 inch to the binding margin (right margin for even % pages, left margin for odd pages). Because of the way LaTeX specifies the % page layout, the easiest way to get this to work is to set evenmargin to % the desired margin, odd margin to margin+bindingmargin, and then set the % linewidth to whatever's left. LaTeX won't make any use of evensidemargin in % onesided mode. \ifthenelse{\boolean{@twoside}} {\setlength{\oddsidemargin}{1.5in} \setlength{\evensidemargin}{1in}} {\setlength{\oddsidemargin}{1in} \setlength{\evensidemargin}{1in}} \setlength{\textwidth}{\paperwidth-\oddsidemargin-\evensidemargin} % For top and bottom margins, arrange for 1.25 inch % margin on top, with the running head set in the margin; 1.25 inch margin at % bottom, with the running foot set in the margin. \setlength{\topmargin}{.75in} \setlength{\headsep}{1.25in-\topmargin-\headheight} \setlength{\footskip}{.75in} \setlength{\textheight}{\paperheight-2.5in} % Get control of the running headers, if the document defines the myheadings % page style. Also install a default footer with the page number. \ifx\ps@myheadings\undefined \else \pagestyle{myheadings} \renewcommand{\@oddhead}{\rightmark} \renewcommand{\@oddfoot}{\hfill \textrm{\thepage} \hfill} \fi % Add a little spread between paragraphs. \addtolength{\parskip}{.5\baselineskip} % Tabular Utility Commands % \pbs preserves the \\ command over raggedleft, centering, or raggedright % in p columns. % \tnl is just a shorthand for \tabularnewline, which the LaTeX people % introduced as an alternate solution to the problem. \newcommand{\pbs}[1]{\let\pbs@temp=\\#1\let\\=\pbs@temp} \newcommand{\tnl}{\tabularnewline} % A command that makes nice double rules for total lines in tables, etc. % The optional parameter specifies the separation (the top rule will be % lifted by this much. \newcommand{\dblrulefill}[1][2pt] {\leavevmode% \cleaders% \hbox{\rule[#1]{2pt}{.4pt}\kern-2pt\rule{2pt}{.4pt}}% \hfill\kern 0pt} % Font and Glyph Utility Commands % Basic commands for convenient access to glyphs in the symbol and dingbats % fonts. Cribbed from the pifont package. \newcommand{\Pifont}[1]% {\fontfamily{#1}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont} \newcommand{\Pisymbol}[2]{{\Pifont{#1}\char#2}} % This next bit requires a Upxx.fd file around somewhere (replace xx with your % favourite Adobe font), so that we can go in directly with the Adobe encoding. % Might be worth defining the Adobe encoding vector some time. \newcommand{\cent}{\fontencoding{U}\selectfont\char"A2} \newcommand{\bkslsh}{\fontencoding{U}\selectfont\char"5C\relax} % The degree symbol. Use a superscript sans-serif `o'. The ring accent just % doesn't cut it. Usage is \degs{180}, for example. \newcommand{\degs}[1]{#1\raise.8ex\hbox{\scriptsize\textsf o}} % Environments, Commands, etc. % Reference commands, that'll automatically include the appropriate surround. % With \secref, the first (optional) parameter can be used to override the % default \S prefix; an `*' will suppress the prefix entirely. \newcommand{\eqnref}[1]{(\ref{#1})} \newcommand{\secref}[2][]% {\ifthenelse{\equal{#1}{}}% {\S}% {\ifthenelse{\equal{#1}{*}}{}{#1}}% \ref{#2}% } % Redefine footnote formatting to eliminate paragraph indent. It looks silly. \renewcommand{\@makefnmark}{\makebox{\textsuperscript{\@thefnmark}}} \renewcommand{\@makefntext}[1]% {\begin{quotation}[\hspace{2ex}]% \makebox[2ex][r]{\textsuperscript{\@thefnmark}}#1% \end{quotation}% } % A commentary environment, for big blocks of commentary. Puts a neat little % hooked bar at the beginning and end of the commentary block. Because this % isn't really used as an enumerated list environment, nested enumerated lists % look better if the list depth isn't incremented inside the environment. % The fussing at the beginning (\mbox{}\raggedright\newline) makes sure that % there's a line to end, and ends it. \newenvironment{commentary}% {{\mbox{}\raggedright\newline}\vspace{.5\baselineskip}\noindent% \rule[-6pt]{2pt}{8pt}\rule{15em}{2pt}\vspace{-10pt}% \ifnum \@listdepth = 0\relax \vspace{-\topsep} \else \fi% \begin{list}{}% {\setlength{\leftmargin}{2ex}% \setlength{\listparindent}{\parindent}% \setlength{\itemindent}{\parindent}% \global\advance\@listdepth\m@ne}% \item\relax} {\global\advance\@listdepth\@ne% \end{list}\vspace*{-\parskip}% \ifnum \@listdepth = 0\relax \vspace{-\topsep} \else \fi% {\raggedright\noindent% \rule{2pt}{8pt}\rule{15em}{2pt}\\[.4\baselineskip]}} % An `aside' environment, set off with guillemots and typeset in Zapf Chancery. % This depends on the existence of XXpzc.fd, where XX is the current encoding. % I need to fix the scaling properly for Zapf, but for now kludge it with the % unaside command. \newcommand{\aside}[1]% {<< {\fontfamily{pzc}\fontshape{it}\selectfont\large #1} >>} \newcommand{\unaside}[1]{\bgroup\normalsize #1\egroup} % Common latin abbreviations. The \@ prevents addition of end-of-sentence space % after a period by resetting the space factor to 1000. (See Chap.12 of the % TexBook, and ltspaces.dtx for the definition of \@). Not used for \etc and % \etal because they often end sentences. Prabably not necessary for e.g. and % i.e., as they're virtually always followed by a comma in the manuscript. \newcommand{\vid}{\textit{vid}.\@\xspace} \newcommand{\cf}{\textit{cf}.\@\xspace} \newcommand{\ie}{\textit{i\/}.\textit{e}.\@\xspace} \newcommand{\eg}{\textit{e}.\textit{g}.\@\xspace} \newcommand{\etc}{\textit{etc}.\xspace} \newcommand{\etal}{\textit{et al}.\xspace} \newcommand{\vs}{\textit{vs}.\@\xspace} % Unnumbered heading and subheading. \newcommand{\heading}[1]{% \@startsection{heading}% {1}{0pt}{\baselineskip}{\baselineskip}{\centering\bfseries\Large}*% {#1}} % Default for subheading is centered; \subheading[l]{...} does flush left, % \subheading[r]{....} does flushright (and [c] will center). \newcommand{\subheading}[2][c]{% \if#1l% \@startsection{subheading}% {2}{0pt}{\baselineskip}{.25\baselineskip}{\raggedright\bfseries}*% {#2}% \else\if#1c% \@startsection{subheading}% {2}{0pt}{\baselineskip}{.25\baselineskip}{\centering\bfseries}*% {#2}% \else \@startsection{subheading}% {2}{0pt}{\baselineskip}{.25\baselineskip}{\raggedleft\bfseries}*% {#2}% \fi\fi} % Redefine quotation so that it will outdent the initial line by the width % of an opening double quote. Make the `quote' string a parameter, in case % we want to change it some day. \renewenvironment{quotation}[1][``]% {\begin{list}{}% {\listparindent 0pt% \settowidth{\labelwidth}{#1}% \setlength{\itemindent}{-\labelwidth}% \rightmargin \leftmargin% \parsep \z@ \@plus\p@}% \item\relax} {\end{list}} % Redefine description so that it allows convenient adjustment of the % indent. \renewenvironment{description}[1][\quad]% {\begin{list}{}{\renewcommand{\makelabel}[1]{##1 \hfill}% \settowidth{\labelwidth}{#1 }% \setlength{\leftmargin}{\labelwidth+\labelsep}}} {\end{list}} % Make the \itemize environment use dingbats for the labels. \renewcommand{\labelitemi}{\Pisymbol{pzd}{101}} \renewcommand{\labelitemii}{\Pisymbol{pzd}{102}} \renewcommand{\labelitemiii}{\Pisymbol{pzd}{100}} \renewcommand{\labelitemiv}{\Pisymbol{pzd}{83}} % Handy macro, txtfrac{}{\@setfontsize \tiny \@vpt \@vipt % where the three parameters to @setfontsize are , , % , in that order. isn't always given as a % variable. The extractptsize macro could well fail under some variation I % didn't spot. \makeatother \def\extractptsize#1@#2@#3 #4|{\csname@#3\endcsname} \makeatletter \newcommand{\pointsize}[1]{\expandafter\extractptsize\meaning#1|} % This ugly little number compares the present point size to the point size % for the defined sizes and returns an integer code matching the size. It % isn't convenient to do this with numeric comparison because the calc % package chokes on fractional point sizes. \newcounter{currsizecode} \newcommand{\currsize}% {\ifthenelse{\equal{\f@size}{\pointsize{\normalsize}}}% {\setcounter{currsizecode}{4}}% {\ifthenelse{\equal{\f@size}{\pointsize{\large}}}% {\setcounter{currsizecode}{5}}% {\ifthenelse{\equal{\f@size}{\pointsize{\small}}}% {\setcounter{currsizecode}{3}}% {\ifthenelse{\equal{\f@size}{\pointsize{\Large}}}% {\setcounter{currsizecode}{6}}% {\ifthenelse{\equal{\f@size}{\pointsize{\footnotesize}}}% {\setcounter{currsizecode}{2}}% {\ifthenelse{\equal{\f@size}{\pointsize{\LARGE}}}% {\setcounter{currsizecode}{7}}% {\ifthenelse{\equal{\f@size}{\pointsize{\scriptsize}}}% {\setcounter{currsizecode}{1}}% {\ifthenelse{\equal{\f@size}{\pointsize{\huge}}}% {\setcounter{currsizecode}{8}}% {\ifthenelse{\equal{\f@size}{\pointsize{\tiny}}}% {\setcounter{currsizecode}{0}}% {\ifthenelse{\equal{\f@size}{\pointsize{\Huge}}}% {\setcounter{currsizecode}{9}}% {\setcounter{currsizecode}{10}}% }% }% }% }% }% }% }% }% }% } % This guy specifies the appropriate adjustments to font size and baseline % height. \newcommand{\subsupadjust} {\currsize% \ifcase\value{currsizecode}% \def\newsize{\tiny}\def\newheight{.7ex}% 0: \tiny \or% \def\newsize{\tiny}\def\newheight{.7ex}% 1: \scriptsize \or% \def\newsize{\tiny}\def\newheight{.7ex}% 2: \footnotesize \or% \def\newsize{\scriptsize}\def\newheight{.7ex}% 3: \small \or% \def\newsize{\scriptsize}\def\newheight{.7ex}% 4: \normalsize \or% \def\newsize{\footnotesize}\def\newheight{.7ex}% 5: \large \or% \def\newsize{\small}\def\newheight{.7ex}% 6: \Large \or% \def\newsize{\small}\def\newheight{.7ex}% 7: \LARGE \or% \def\newsize{\small}\def\newheight{.7ex}% 8: \huge \or% \def\newsize{\normalsize}\def\newheight{.7ex}% 9: \Huge \else% \def\newsize{\normalsize}\def\newheight{.7ex}% 10: other \fi} % And finally, a pair of macros that actually take text as an argument. \newcommand{\up}[1]% {\subsupadjust\raisebox{\newheight}{\newsize#1}} \newcommand{\dn}[1]% {\subsupadjust\raisebox{-\newheight}{\newsize#1}} DyLP-1.10.4/DyLP/doc/TexMF/Makefile.in0000644000175200017520000003770512506276701015502 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2009 Lou Hafer # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Lou Hafer SFU 2009.04.15 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = doc/TexMF DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c_add_to_includes.m4 \ $(top_srcdir)/m4/ac_c_get_sunpro_libs.m4 \ $(top_srcdir)/m4/ac_dylp_equiv_for_cpp_bool.m4 \ $(top_srcdir)/m4/ac_dylp_find_fp_funcs.m4 \ $(top_srcdir)/m4/ac_dylp_fix_cppflags.m4 \ $(top_srcdir)/m4/ac_dylp_options.m4 \ $(top_srcdir)/m4/ac_osidylp_options.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/DylpStdLib/config.h \ $(top_builddir)/src/DylpStdLib/config_dylp.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_OSITESTS_FALSE = @COIN_HAS_OSITESTS_FALSE@ COIN_HAS_OSITESTS_TRUE = @COIN_HAS_OSITESTS_TRUE@ COIN_HAS_OSI_FALSE = @COIN_HAS_OSI_FALSE@ COIN_HAS_OSI_TRUE = @COIN_HAS_OSI_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ DYLPLIB_LIBS = @DYLPLIB_LIBS@ DYLPLIB_LIBS_INSTALLED = @DYLPLIB_LIBS_INSTALLED@ DYLPLIB_PCLIBS = @DYLPLIB_PCLIBS@ DYLP_ERRMSGDIR = @DYLP_ERRMSGDIR@ DYLP_SVN_REV = @DYLP_SVN_REV@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIDYLPLIB_CFLAGS = @OSIDYLPLIB_CFLAGS@ OSIDYLPLIB_CFLAGS_INSTALLED = @OSIDYLPLIB_CFLAGS_INSTALLED@ OSIDYLPLIB_DEPENDENCIES = @OSIDYLPLIB_DEPENDENCIES@ OSIDYLPLIB_LIBS = @OSIDYLPLIB_LIBS@ OSIDYLPLIB_LIBS_INSTALLED = @OSIDYLPLIB_LIBS_INSTALLED@ OSIDYLPLIB_PCLIBS = @OSIDYLPLIB_PCLIBS@ OSIDYLPLIB_PCREQUIRES = @OSIDYLPLIB_PCREQUIRES@ OSITESTS_CFLAGS = @OSITESTS_CFLAGS@ OSITESTS_CFLAGS_INSTALLED = @OSITESTS_CFLAGS_INSTALLED@ OSITESTS_DATA = @OSITESTS_DATA@ OSITESTS_DATA_INSTALLED = @OSITESTS_DATA_INSTALLED@ OSITESTS_DEPENDENCIES = @OSITESTS_DEPENDENCIES@ OSITESTS_LIBS = @OSITESTS_LIBS@ OSITESTS_LIBS_INSTALLED = @OSITESTS_LIBS_INSTALLED@ OSI_CFLAGS = @OSI_CFLAGS@ OSI_CFLAGS_INSTALLED = @OSI_CFLAGS_INSTALLED@ OSI_DATA = @OSI_DATA@ OSI_DATA_INSTALLED = @OSI_DATA_INSTALLED@ OSI_DEPENDENCIES = @OSI_DEPENDENCIES@ OSI_LIBS = @OSI_LIBS@ OSI_LIBS_INSTALLED = @OSI_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign # Make sure all the supporting TeX files get distributed. The only thing in # this subtree that's directly part of the dylp documenation is dylp.bib. All # the rest is supporting definition files for formats and fonts. This won't # change, so there's no sense in putting Makefile.am's in the subdirectories. EXTRA_DIST = $(dylpdoc_BIBTEX) $(dylpdoc_LATEXDEFS) \ $(dylpdoc_FONTTFM) $(dylpdoc_FONTVF) dylpdoc_BIBTEX = bibtex/bst/louplain.bst \ bibtex/bib/dylp.bib dylpdoc_LATEXDEFS = tex/latex/loubookman.sty \ tex/latex/loustandard.sty \ tex/latex/loumath.sty \ tex/latex/codedocn.sty \ tex/latex/psnfss/t1pbk.fd \ tex/latex/psnfss/ot1pbk.fd \ tex/latex/psnfss/omlpbk.fd \ tex/latex/psnfss/omspbk.fd \ tex/latex/psnfss/omxpbk.fd \ tex/latex/psnfss/upbk.fd \ tex/latex/psnfss/t1pag.fd \ tex/latex/psnfss/ot1pag.fd \ tex/latex/psnfss/upag.fd \ tex/latex/psnfss/upsy.fd # You might think these are in your local TeX distribution, but they're either # tweaked or completely custom. dylpdoc_FONTTFM = fonts/tfm/omselabo.tfm \ fonts/tfm/omselabo8t.tfm \ fonts/tfm/omselabu.tfm \ fonts/tfm/omselabu8t.tfm \ fonts/tfm/omselao.tfm \ fonts/tfm/omselao8t.tfm \ fonts/tfm/omselau.tfm \ fonts/tfm/omselau8t.tfm \ fonts/tfm/pbkd7t.tfm \ fonts/tfm/pbkd7y.tfm \ fonts/tfm/pbkd8t.tfm \ fonts/tfm/pbkdi7m.tfm \ fonts/tfm/pbkdi7t.tfm \ fonts/tfm/pbkdi7y.tfm \ fonts/tfm/pbkdi8t.tfm \ fonts/tfm/pbkdo8t.tfm \ fonts/tfm/pbkdu8r.tfm \ fonts/tfm/pbkdu8t.tfm \ fonts/tfm/pbkl7t.tfm \ fonts/tfm/pbkl7v.tfm \ fonts/tfm/pbkl7y.tfm \ fonts/tfm/pbkl8t.tfm \ fonts/tfm/pbkli7m.tfm \ fonts/tfm/pbkli7t.tfm \ fonts/tfm/pbkli7y.tfm \ fonts/tfm/pbkli8t.tfm \ fonts/tfm/pbklo8t.tfm \ fonts/tfm/pbklu8r.tfm \ fonts/tfm/pbklu8t.tfm \ fonts/tfm/psyro.tfm # Virtual font definitions. These are the core of replacing the Computer Modern # fonts with something that looks better --- Bookman is more to my taste. dylpdoc_FONTVF = fonts/vf/pbkd7t.vf \ fonts/vf/pbkd7y.vf \ fonts/vf/pbkd8t.vf \ fonts/vf/pbkdi7m.vf \ fonts/vf/pbkdi7t.vf \ fonts/vf/pbkdi7y.vf \ fonts/vf/pbkdi8t.vf \ fonts/vf/pbkdo8t.vf \ fonts/vf/pbkdu8t.vf \ fonts/vf/pbkl7t.vf \ fonts/vf/pbkl7v.vf \ fonts/vf/pbkl7y.vf \ fonts/vf/pbkl8t.vf \ fonts/vf/pbkli7m.vf \ fonts/vf/pbkli7t.vf \ fonts/vf/pbkli7y.vf \ fonts/vf/pbkli8t.vf \ fonts/vf/pbklo8t.vf \ fonts/vf/pbklu8t.vf 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/TexMF/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/TexMF/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 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) $(mkdir_p) $(distdir)/bibtex/bib $(distdir)/bibtex/bst $(distdir)/fonts/tfm $(distdir)/fonts/vf $(distdir)/tex/latex $(distdir)/tex/latex/psnfss @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libtool dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: 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-info-am .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-exec install-exec-am \ install-info install-info-am install-man install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-info-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: DyLP-1.10.4/DyLP/doc/TexMF/Makefile.am0000644000175200017520000000527711507440660015465 0ustar coincoin# Copyright (C) 2009 Lou Hafer # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id$ # Author: Lou Hafer SFU 2009.04.15 AUTOMAKE_OPTIONS = foreign # Make sure all the supporting TeX files get distributed. The only thing in # this subtree that's directly part of the dylp documenation is dylp.bib. All # the rest is supporting definition files for formats and fonts. This won't # change, so there's no sense in putting Makefile.am's in the subdirectories. EXTRA_DIST = $(dylpdoc_BIBTEX) $(dylpdoc_LATEXDEFS) \ $(dylpdoc_FONTTFM) $(dylpdoc_FONTVF) dylpdoc_BIBTEX = bibtex/bst/louplain.bst \ bibtex/bib/dylp.bib dylpdoc_LATEXDEFS = tex/latex/loubookman.sty \ tex/latex/loustandard.sty \ tex/latex/loumath.sty \ tex/latex/codedocn.sty \ tex/latex/psnfss/t1pbk.fd \ tex/latex/psnfss/ot1pbk.fd \ tex/latex/psnfss/omlpbk.fd \ tex/latex/psnfss/omspbk.fd \ tex/latex/psnfss/omxpbk.fd \ tex/latex/psnfss/upbk.fd \ tex/latex/psnfss/t1pag.fd \ tex/latex/psnfss/ot1pag.fd \ tex/latex/psnfss/upag.fd \ tex/latex/psnfss/upsy.fd # You might think these are in your local TeX distribution, but they're either # tweaked or completely custom. dylpdoc_FONTTFM = fonts/tfm/omselabo.tfm \ fonts/tfm/omselabo8t.tfm \ fonts/tfm/omselabu.tfm \ fonts/tfm/omselabu8t.tfm \ fonts/tfm/omselao.tfm \ fonts/tfm/omselao8t.tfm \ fonts/tfm/omselau.tfm \ fonts/tfm/omselau8t.tfm \ fonts/tfm/pbkd7t.tfm \ fonts/tfm/pbkd7y.tfm \ fonts/tfm/pbkd8t.tfm \ fonts/tfm/pbkdi7m.tfm \ fonts/tfm/pbkdi7t.tfm \ fonts/tfm/pbkdi7y.tfm \ fonts/tfm/pbkdi8t.tfm \ fonts/tfm/pbkdo8t.tfm \ fonts/tfm/pbkdu8r.tfm \ fonts/tfm/pbkdu8t.tfm \ fonts/tfm/pbkl7t.tfm \ fonts/tfm/pbkl7v.tfm \ fonts/tfm/pbkl7y.tfm \ fonts/tfm/pbkl8t.tfm \ fonts/tfm/pbkli7m.tfm \ fonts/tfm/pbkli7t.tfm \ fonts/tfm/pbkli7y.tfm \ fonts/tfm/pbkli8t.tfm \ fonts/tfm/pbklo8t.tfm \ fonts/tfm/pbklu8r.tfm \ fonts/tfm/pbklu8t.tfm \ fonts/tfm/psyro.tfm # Virtual font definitions. These are the core of replacing the Computer Modern # fonts with something that looks better --- Bookman is more to my taste. dylpdoc_FONTVF = fonts/vf/pbkd7t.vf \ fonts/vf/pbkd7y.vf \ fonts/vf/pbkd8t.vf \ fonts/vf/pbkdi7m.vf \ fonts/vf/pbkdi7t.vf \ fonts/vf/pbkdi7y.vf \ fonts/vf/pbkdi8t.vf \ fonts/vf/pbkdo8t.vf \ fonts/vf/pbkdu8t.vf \ fonts/vf/pbkl7t.vf \ fonts/vf/pbkl7v.vf \ fonts/vf/pbkl7y.vf \ fonts/vf/pbkl8t.vf \ fonts/vf/pbkli7m.vf \ fonts/vf/pbkli7t.vf \ fonts/vf/pbkli7y.vf \ fonts/vf/pbkli8t.vf \ fonts/vf/pbklo8t.vf \ fonts/vf/pbklu8t.vf DyLP-1.10.4/DyLP/doc/TexMF/fonts/0000755000175200017520000000000013434203622014543 5ustar coincoinDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/0000755000175200017520000000000013434203622015156 5ustar coincoinDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkd8t.vf0000644000175200017520000000443011171477034016716 0ustar coincoin÷ÊÌ$àó pbkd8ró³ omselabó‡' omselab󙚠omselabffff€´€ˆ©ô€˜€¨l   X €¯ š ¾t€¸ š š€‚€‹€›Ÿ´€“Ÿ´€”Ÿ´€„ff€«ff€»€–€— „ 3„ï(Warning: missing glyph `perthousandzero'¾t²'£§¬: ÷Íf•× f Òç –ÿ33¥Ù–ú Ù –ú›ÿ33( G§¤33–ÌÍ„33£Í„£Íff„33£Í“©üÌÍ!¾t!"´3"# ‹@#$ ‹@$%%& ÌÍ&'š'(š()š)*X *+ ™š+,l,-¾t-.l./ ™š/0 ‹@01 ‹@12 ‹@23 ‹@34 ‹@45 ‹@56 ‹@67 ‹@78 ‹@89 ‹@9:l:;l;< ™š<= ™š=> ™š>? ‹@?@ š@A AB BC ÒçCD vÀDE EF Ý'FG vÀGH šHIffIJ 9NJK ÌÍKL 9NLMMN ÒçNO ÌÍOP ‹@PQ ÌÍQR vÀRS ‹@ST 33TU ÒçUV VWWX vÀXY 33YZ 9NZ[ÌÍ[\ ™š\]ÌÍ]^ ™š^__`š`a Cab ™šbc Ccd 9Nde CefZfg Cgh Ý'hi¾tijljk ‹@klllmmn Ý'no çfop 9Npq çfqrX rsMÍstX tu ‹@uv ™švw ÌÍwx ™šxy çfyzñ§z{š{| ™š|}š}~ ™š~¾t- € ¤ý7M–¾t ŽA –ÎÍŽA ‚ Òç¤ü´@–´3€´ŽC ƒ Òç¤ü´@–çfŽC „ vÀ¤ý7M–™šŽD … ¤ý7M–¾tŽE† –;ZŽE ‡ vÀ¤ü´@–9N ŽG ˆ 9N¤ý7M–ÿX€´ŽL‰ ÀL–üÌÍ'Š 9N ‹ Òç¤ý7M–´3€´ŽN Œ Òç¤ý7M–çfŽN 뀭- Ž Ìͤü´@–åZŽO vÀ¤ý7M–€´ŽR vÀ¤ý7M–9NŽR ‘ ‹@¤ü´@–Z€´ŽS’ ‹@€Š “ ‹@–ff€¸ŽS ” 33¤ý7M–™šŽT • 33–¼f€¸ŽT – Òç¤ý7M–ffŽU — Òç¤ý7M–33 ŽU˜ 33€Ÿ ™ 9N¤ý7M–çf€´ŽZš 9N › 9N¤ý7M–ZŽZœŸ´IJ ff¤ý7M–§æŽI ž 9N–á@¤á@€¯ŽdŸ ™š€§   C£× –Ÿ´ Ža¡ C–SôŽa ¢ C£× –l€´Žc £ C£× –Ÿ´Žc¤ Àd–þÌÍ' ¥ C£× –Ÿ´Že¦ C–tŽe § C¤þ‡3–Ÿ´ Žg ¨l¤ü13• €´Žl©íl–þff'ªl « Ý'£× –9N€´Žn ¬ Ý'£× –lŽn­ Ƨ®= ® çf£× –p™Žo ¯X £× •vÀ€´Žr °X £× •ªŽr ±MÍ£× –ñ§€´Žs²MÍ€š ³MÍ–G§€¸Žs´ ?rt–þÌÍ' µX –ÌÍ€¸Žt ¶ ‹@£× –ÂŽu · ‹@£× –Z Žu¸ çf€ÿ ¹ñ§£× –C€´Žzºñ§ »ñ§£× –뀎z¼ +ij½¾t€¡¾ ‹@€¿¿ ‹@€£À €ÀÁ €Á €Âà €ÃÄ €ÄÅ €ÅÆ9N€ÆÇ Òç€ÇÈ €ÈÉ €ÉÊ €ÊË €ËÌff€ÌÍff€ÍÎff€ÎÏff€ÏÐ vÀ€ÐÑ Òç€ÑÒ ÌÍ€ÒÓ ÌÍ€ÓÔ ÌÍ€ÔÕ ÌÍ€ÕÖ ÌÍ€Ö×€ŒØ ÌÍ€ØÙ Òç€ÙÚ Òç€ÚÛ Òç€ÛÜ Òç€ÜÝ 33€ÝÞ ‹@€Þ߀SSà C€àá C€áâ C€âã C€ãä C€äå C€åæZ€æç C€çè C€èé C€éê C€êë C€ëì¾t€ìí¾t€íî¾t€îï¾t€ïð çf€ðñ Ý'€ñò çf€òó çf€óô çf€ôõ çf€õö çf€ö÷€œø çf€øù ‹@€ùú ‹@€úû ‹@€ûü ‹@€üý çf€ýþ 9N€þÿ ‹@€ßøøøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkdi7m.vf0000644000175200017520000000323011171477034017054 0ustar coincoin÷Ê“í—H ó™š omsegrbió¬ cmmib10ó pbkd8ró pbkdi8ró³ omselabi …•(ôG“ X•(ôD“ •(ôJ“ ?•(ôL“ €•(ôX“ ÿó•(ôP“ *ó•(ôS“ •(ôU“ xÍ•(ôF“ •s•(ôY“ \•(ôW“ õ³•(ôa“ ÿó•(ô1“ ÿó•(ôg“ ÿó•(ôd“^'•(ô¬“ •(ôz“ õ³•(ôh“ ÿó•(ô2“ ³•(ôi“ åZ•(ôšãY5“ •(ôl“ õ³•(ôm“ •(ôn“ •(ôx“ õ³•(ôp“ ÿó•(ô4“ ÿó•(ôs“Z•(ôt“ ÿó•(ôu“ ï•(ô3“ •(ôq“ åZ•(ôy“! åZ•(ôw“"Z•(ôe“# õ³•(ôj“$ åZ•(ô7“% ÿó•(ôr“&Z•(ôc“' ï•(ôf“(xÍ•(ô¬(“)xÍ•(ô¬)“*xÍ•(ô¬*“+xÍ•(ô¬+“,¡À•(ô¬,“-¡À•(ô¬-“. ãM•(ô¬.“/ ãM•(ô¬/“0 ãM•(ô¬0“1 ãM•(ô¬1“2 ãM•(ô¬2“3 ãM•(ô¬3“4 ãM•(ô¬4“5 ãM•(ô¬5“6 ãM•(ô¬6“7 ãM•(ô¬7“8 ãM•(ô¬8“9 ãM•(ô¬9“:¾f•(ô­.“;¾f•(ô­,“< 뀕(ô­<“= 뀕(ô­/“> 뀕(ô­>“? ãM•(ô¬?“@ ȧ•(ô¬@“ A Ÿ´•(ô›ÌÍ®A“ B Z•(ô›£Í®B™š“ C M•(ôšï¦®C™š“ D Ý'•(ô›£Í®Dš“ E b@•(ô›Z®E“F Òç•(ô›Z®F‘þff“ G 9N•(ô“®Gš™š“ H Sæ•(ô››™®H™š“ Iȧ•(ô›ÌÍ®I™š“ J ȧ•(ô›õÁ®J™š“ K ´3•(ô“®KšÂš“ L •(ôšzÚ®L“ Mb@•(ô›¸M®M™š“ N MÍ•(ô›Z®N™š“ O ‹3•(ôšzÚ®O™š“P •s•(ô›£Í®P‘þff“ Q •(ô›Z®Q“ R ȧ•(ô›£Í®R“ S  •(ôš~ô®S“ T ‡•(ôš53®T‘þÌÍ“ U |æ•(ôš¾€®U™š“ V 9N•(ô“®V›ÿ33“ W…•(ô®W›ÿ33“ X MÍ•(ô›Z®X™š“ Y Z•(ô®Y›ÿ33“ Z ¾f•(ô›Z®Z“[€•(ô¬[“\€•(ô¬\“]€•(ô¬]“^xÍ•(ô¬^“_xÍ•(ô¬_“`1•(ô¬`“ a "À•(ôšóÁ®a“b 뀕(ô®b“c C•(ô®c“d / •(ô®d“e C•(ô®e“ f •(ô›t®fff“ g “f•(ôšZ®g“ h ™•(ôšt®h“ iE™•(ôšãY®i“ j€•(ô›©ô®j“k …•(ô®k“lb@•(ô®l“m©ô•(ô®m“n / •(ô®n“o 뀕(ô®o“ p C•(ôšff®p“q 9N•(ô®q“ r(æ•(ôš× ®r“sñ™•(ô®s“tX•(ô®t“u / •(ô®u“vñ™•(ô®v“wZ•(ô®w“ x ~ô•(ôšE™®x“ y ™•(ôš®®y“ z @•(ôšI³®z“{b@•(ô®“ |f•(ô£§¯:“} §æ•(ô¬}“~ ãM•(ô¬~“¡À•(ô¬“øøøøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkd7y.vf0000644000175200017520000000210011171477034016712 0ustar coincoin÷Ê×G»/ ó pbkd8ró¬ cmbsy10ó eusb10 ™š OÚ¬åZ¬ ‘f¬åZ¬ ‘f¬åZ¬åZ¬åZ¬ åZ¬  åZ¬  åZ¬  åZ¬  &æ¬  ‘f¬X €•åZ¬åZ¬åZ¬åZ¬åZ¬åZ¬åZ¬åZ¬ ÷Í­åZ¬åZ¬åZ¬&æ¬&æ¬åZ¬åZ¬ &æ¬ !&æ¬!" ‘f¬"# ‘f¬#$&æ¬$%&æ¬%&&æ¬&'åZ¬'(&æ¬()&æ¬)* ²'¬*+ ²'¬+,&æ¬,-&æ¬-.&æ¬./åZ¬/0 ?•Qæ¬01&æ¬12 Äš¬23 Äš¬34¬45¬56¬67¬78 Ÿ´¬89 Ÿ´¬9: ^3­:; ‘f¬;<õÁ­<=  ­=>åZ¬>?åZ¬?@­@A(ô­AB ;Z•¥æ­BšÂšC I³•¥æ­CšÂšDjs•¥æ­DšÂšE £Í•¥æ­EF ™š­F•…&G Qæ•¥æ­GšÂšH•€­H•™šIjs•¥æ­IšÂšJ M•(ô­JšÂšKbM•…&­KL Äš•× ­LM•€­M•× N ûæ­NO E™•¥æ­Oš× P ²'­P•šQ ãM•¥æ­QR M­RS hf­S•× T I³­T•× U Z–ÿ\3­UšëŒ V åZ–ÿ\3­Vš…& WÀ€–ÿ\3­Wš…&X Ý'­X•ëŒY ff­Y•…&Z …•¥æ­Z[ Äš¬[\ Äš¬\] Äš¬]^­^_­_` ²'¬`a ²'¬abƒ ¬bcƒ ¬cdƒ ¬deƒ ¬efbM{–G§gbM–G§}hp™¬hip™¬ijÛ­jk ‘f¬kl ‘f¬lm ²'¬mn ‘f¬noOÚ¬op÷ͬpqùÚ¬qr÷ͬrs t³¬st Äš¬tu Äš¬uvåZ¬vwåZ¬wx ™š€§y€†zZ€‡{ ÌÍ€¶|åZ¬|}åZ¬}~åZ¬~åZ¬øøøøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkl7t.vf0000644000175200017520000000205411171477034016725 0ustar coincoin÷Ê›m óp™ omsegró pbkl8ró³ omsela 53G D §æJ “tL ñ§X “tP íS ÀU íF  3Y 33W ?¬f•× f çf¬ çf¬€¬–ûG³¬–û33ÌͬÀ€£§­:l¬l¬€´´3¬X ¬ ¬€¯ Ý'–á@¬ “𬀏 ‹@¬€ß ¾t¬€æff¬€œñ§¬€ø$Ú¬€ÆÒ笀Œ Ìͬ€Ø/ „ï$Warning: missing glyph `lslashslash'!Ìͬ!"ff¬€”# çf¬#$ çf¬$%ff¬%& Ìͬ&'¬'(Ìͬ()Ìͬ)*¬*+ ™š¬+,š¬,-ff¬-.š¬./ ™š¬/0 çf¬01 çf¬12 çf¬23 çf¬34 çf¬45 çf¬56 çf¬67 çf¬78 çf¬89 çf¬9:š¬:;š¬;<Ìͬ€¡= ™š¬=>Ÿ´¬€¿?Ÿ´¬?@ š¬@A Ý'¬AB Òç¬BC Òç¬CD ÌͬDE ¬EF 9N¬FG ÌͬGH ÌͬHIl¬IJ ™š¬JK ¬KL 뀬L•QæM´3¬MN Òç¬NO ÌͬOP çf¬PQ š¬QR ¬RS ‹@¬ST çf¬TU vÀ¬UV 33¬VWX ¬WX ¬XY 9N¬YZ 9N¬Z[Ìͬ[\ff¬€“]Ìͬ]^´3¬€ˆ_$Ú¬`¬`a C¬ab çf¬bcMͬcd çf¬deMͬefš¬fgŸ´¬gh ‹@¬hiÌͬijÌͬjk çf¬klÌͬlm¬mn ‹@¬noñ§¬op çf¬pq C¬qr¬rsMͬstZ¬tu Ý'¬uvMͬvw vÀ¬wxñ§¬xyŸ´¬yz©ô¬z{¬€–|¬€—}Z¬~¬€˜´3¬€¨Š ™š¬ªš¬øøøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkdi7t.vf0000644000175200017520000000206011171477034017063 0ustar coincoin÷ÊÈ4Ö¡ ó™š omsegrbió pbkdi8ró³ omselabi 33G D ´3J ºZL p™X ® P Ù S ´3U &æF CY 3W M¬f•$Úf ¬•ff š¬ó³¬f•$Úó³¬f•$ÚZ¬À€£§­:Z¬l¬€´©ô¬X ¬ ©ô¬€¯ –á@¬ “¾t¬€¸ ‹@¬€ßZ¬€æ´3¬€œ ™š¬€ø9N¬€ÆÝ'¬€Œ $Ú¬€Ø/ „ï$Warning: missing glyph `lslashslash'!š¬!"Mͬ€”# Ý'¬#$ Ý'¬$%Z¬%&©ô¬&'š¬'($Ú¬()$Ú¬)*X ¬*+ ™š¬+,l¬,-vÀ¬-.l¬./¾t¬/0 Ý'¬01 Ý'¬12 Ý'¬23 Ý'¬34 Ý'¬45 Ý'¬56 Ý'¬67 Ý'¬78 Ý'¬89 Ý'¬9:l¬:;l¬;<𬀡= ™š¬=> çf¬€¿? çf¬?@ vÀ¬@A ¬AB ¬BC 33¬CD $Ú¬DE ¬EF ‹@¬FG $Ú¬GH ÌͬHIZ¬IJ çf¬JK vÀ¬KL 9N¬LM ¾t¬MN Òç¬NO $Ú¬OP 9N¬PQ $Ú¬QR Òç¬RS 33¬ST 33¬TU Òç¬UV ‹@¬VW¬WX Òç¬XY ‹@¬YZ Ý'¬Z[$Ú¬[\Mͬ€“]$Ú¬]^©ô¬€ˆ_Z¬`š¬`a Ý'¬ab ™š¬bcñ§¬cd Ý'¬deñ§¬ef´3¬fg çf¬gh 33¬hiZ¬ijš¬jk 33¬klZ¬lmX ¬mn Ý'¬no ™š¬op ‹@¬pq çf¬qr¬rsŸ´¬st¬tu Ý'¬uvŸ´¬vw ¾t¬wx çf¬xy ™š¬yzñ§¬z{¬€–|¬€—}ñ§¬~©ô¬€˜Mͬ€¨Š 9N¬ªZ¬øøøøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkl8t.vf0000644000175200017520000000442011171477034016725 0ustar coincoin÷Ê åE\ ó pbkl8ró³ omselaó‡' omsela󙚠omselall€´´3€ˆ€˜´3€¨Zš ´3X  €¯ $Ú š€¸ š €‚Ò瀋Ò瀛ff€“ff€”ff€„¾t€«¾t€»€–€— „ºZ3„ï(Warning: missing glyph `perthousandzero'ÌÍÀ€£§¬: ?f•× f çf çf€–ûG³–û33( G§¤33–ÌÍ„33£Í„£Íff„33£Í“©üÌÍ!ÌÍ!"Z"# çf#$ çf$%ff%& ÌÍ&''(ÌÍ()ÌÍ)**+ ™š+,š,-ff-.š./ ™š/0 çf01 çf12 çf23 çf34 çf45 çf56 çf67 çf78 çf89 çf9:š:;š;< ™š<= ™š=> ™š>?Ÿ´?@ š@A Ý'AB ÒçBC ÒçCD ÌÍDE EF 9NFG ÌÍGH ÌÍHIlIJ ™šJK KL ë€L•QæM´3MN ÒçNO ÌÍOP çfPQ šQR RS ‹@ST çfTU vÀUV 33VWX WX XY 9NYZ 9NZ[ÌÍ[\ ™š\]ÌÍ]^ ™š^__``a Cab çfbcMÍcd çfdeMÍefšfgŸ´gh ‹@hiÌÍijÌÍjk çfklÌÍlmmn ‹@noñ§op çfpq CqrrsMÍstZtu Ý'uvMÍvw vÀwxñ§xyŸ´yz©ôz{vÀ{| ™š|}vÀ}~ ™š~ff- € Ý'¤üÈÀ– ŽA Ý'–;ZŽA ‚ Òç¤üÈÀ–33€´ŽC ƒ Òç¤üÈÀ–ZŽC „ ÌͤüÈÀ–jsŽD … ¤üÈÀ–ffŽE† –;ZŽE ‡ ÌͤüÈÀ–¼f ŽG ˆ ™š¤üÈÀ•²3€´ŽL‰ çfL–üÌÍ'Š ™š ‹ Òç¤üÈÀ–33€´ŽN Œ Òç¤üÈÀ–ZŽN 뀭- Ž ÌͤüÈÀ–`AŽO ¤üÈÀ– 3€´ŽR ¤üÈÀ–ffŽR ‘ ‹@¤üÈÀ–Z€´ŽS’ ‹@€Š “ ‹@–¸M€¸ŽS ” çf¤üÈÀ–™šŽT • çf–ff€¸ŽT – vÀ¤üÈÀ–33ŽU — vÀ¤üÈÀ–® ŽU˜ 9N€Ÿ ™ 9N¤üÈÀ–ff€´ŽZš 9N › 9N¤üÈÀ– 3ŽZœIJ l¤üÈÀ–£ÍŽI ž çf–á@¤¬€¯ŽdŸMÍ€§   C£Âš–õÁ Ža¡ C–SôŽa ¢Mͣš–p™€´Žc £Mͣš–ÌÍŽc¤ 53d–þÌÍ' ¥Mͣš–ÌÍŽe¦MÍ–™šŽe §Ÿ´¤þzæ–£Í Žg ¨Ìͤü•²3€´Žl©´3l–þff'ªš « ‹@£Âš–Z€´Žn ¬ ‹@£Âš–뀎n­ÌÍ®= ®ñ§£Âš–p™Žo ¯£Âš–ÌÍ€´Žr °£Âš•(ôŽr ±Mͣš–p™€´Žs²MÍ€š ³MÍ–™š€¸Žs´^3t–þÌÍ'µZ•zÚ€¸Žt ¶ Ý'£Âš–ffŽu · Ý'£Âš–á@ Žu¸Ÿ´€ÿ ¹©ô£Âš–³€´Žzº©ô »©ô£Âš–ÂŽz¼ ™šij½ÌÍ€¡¾Ÿ´€¿¿ çf€£À Ý'€ÀÁ Ý'€Á Ý'€Âà Ý'€ÃÄ Ý'€ÄÅ Ý'€ÅÆ$Ú€ÆÇ Òç€ÇÈ €ÈÉ €ÉÊ €ÊË €ËÌl€ÌÍl€ÍÎl€ÎÏl€ÏÐ ÌÍ€ÐÑ Òç€ÑÒ ÌÍ€ÒÓ ÌÍ€ÓÔ ÌÍ€ÔÕ ÌÍ€ÕÖ ÌÍ€Ö×Ò瀌Ø ÌÍ€ØÙ vÀ€ÙÚ vÀ€ÚÛ vÀ€ÛÜ vÀ€ÜÝ 9N€ÝÞ çf€Þ߀SSà C€àá C€áâ C€âã C€ãä C€äå C€åæ ¾t€æçMÍ€çèMÍ€èéMÍ€éêMÍ€êëMÍ€ëìÌÍ€ìíÌÍ€íîÌÍ€îïÌÍ€ïðñ§€ðñ ‹@€ñòñ§€òóñ§€óôñ§€ôõñ§€õöñ§€ö÷ff€œøñ§€øù Ý'€ùú Ý'€úû Ý'€ûü Ý'€üýŸ´€ýþ çf€þÿ ‹@€ßøøøøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkdi8t.vf0000644000175200017520000000434411171477034017073 0ustar coincoin÷ÊW™ ó pbkdi8ró³ omselabió‡' omselabi󙚠omselabiZl€´©ô€ˆ©ô€˜MÍ€¨ñ§¾t ©ôX  ©ô€¯ Z ¾t€¸ š ÌÍ€‚€‹€›MÍ€“MÍ€”MÍ€„Z€«Z€»€–€— „9N3„ï(Warning: missing glyph `perthousandzero'ZÀ€£§¬: Mf•$Úf •ff šó³f•$Úó³f•$Ú( G§¤33–ÌÍ„33£Í„£Íff„33£Í“©üÌÍ!š!"Z"# Ý'#$ Ý'$%Z%&©ô&'š'($Ú()$Ú)*X *+ ™š+,l,-vÀ-.l./¾t/0 Ý'01 Ý'12 Ý'23 Ý'34 Ý'45 Ý'56 Ý'67 Ý'78 Ý'89 Ý'9:l:;l;< çf<= ™š=> çf>? çf?@ vÀ@A AB BC 33CD $ÚDE EF ‹@FG $ÚGH ÌÍHIZIJ çfJK vÀKL 9NLM ¾tMN ÒçNO $ÚOP 9NPQ $ÚQR ÒçRS 33ST 33TU ÒçUV ‹@VWWX ÒçXY ‹@YZ Ý'Z[$Ú[\ C\]$Ú]^ çf^__`š`a Ý'ab ™šbcñ§cd Ý'deñ§ef´3fg çfgh 33hiZijšjk 33klZlmX mn Ý'no ™šop ‹@pq çfqrrsŸ´sttu Ý'uvŸ´vw ¾twx çfxy ™šyzñ§z{ÌÍ{| çf|}ÌÍ}~ çf~vÀ- € ¤ýxÙ–ƒ ŽA –ÎÍŽA ‚ 33¤üõÍ–l€´ŽC ƒ 33¤üõÍ–MÍŽC „ $Ú¤ýxÙ–ZŽD … ¤ýxÙ–ZŽE† –;ZŽE ‡ $Ú¤üõÍ–í ŽG ˆ 9N¤ýxÙ•E™€´ŽL‰ ÀL–üÌÍ'Š 9N ‹ Òç¤ýxÙ–¡À€´ŽN Œ Òç¤ýxÙ–ƒ ŽN 뀭- Ž $Ú¤üõÍ– ÀŽO Òç¤ýxÙ–¡À€´ŽR Òç¤ýxÙ–ƒ ŽR ‘ 33¤üõÍ–l€´ŽS’ 33€Š “ 33–¼f€¸ŽS ” 33¤ýxÙ–53ŽT • 33–¼f€¸ŽT – Òç¤ýxÙ–ß3ŽU — Òç¤ýxÙ–xÍ ŽU˜ ‹@€Ÿ ™ Ý'¤ýxÙ–&怴ŽZš Ý' › Ý'¤ýxÙ–ÔôŽZœ÷ÍIJ Z¤ýxÙ•nŽI ž Ý'–33¤?r€¯ŽdŸ çf€§  Ý'– Ža¡ Ý'–°Ža ¢ñ§–€´Žc£ñ§–£ÍŽc¤Äšd–þÌÍ'¥ñ§–£ÍŽe¦ñ§–뀎e§ çf–G§ Žg ¨Z¤üff–ñ§€´Žl© ‘fl–þff'ªZ « Ý'–¸M€´Žn¬ Ý'–™šŽn­ §®=® ™š•VŽo ¯–KÀ€´Žr°•- Žr ±Ÿ´–™š€´Žs²Ÿ´€š ³Ÿ´–p™€¸Žs´ ít–þÌÍ' µ–£Í€¸Žt¶ Ý'–õÁŽu· Ý'–Z Žu¸ ™š€ÿ ¹ñ§–€´Žzºñ§»ñ§–p™Žz¼ +ij½š€¡¾ çf€¿¿ Ý'€£À €ÀÁ €Á €Âà €ÃÄ €ÄÅ €ÅÆ9N€ÆÇ 33€ÇÈ €ÈÉ €ÉÊ €ÊË €ËÌZ€ÌÍZ€ÍÎZ€ÎÏZ€ÏÐ $Ú€ÐÑ Òç€ÑÒ $Ú€ÒÓ $Ú€ÓÔ $Ú€ÔÕ $Ú€ÕÖ $Ú€Ö×Ý'€ŒØ $Ú€ØÙ Òç€ÙÚ Òç€ÚÛ Òç€ÛÜ Òç€ÜÝ ‹@€ÝÞ 9N€ÞßffSSà Ý'€àá Ý'€áâ Ý'€âã Ý'€ãä Ý'€äå Ý'€åæZ€æçñ§€çèñ§€èéñ§€éêñ§€êëñ§€ëìZ€ìíZ€íîZ€îïZ€ï𠙚€ðñ Ý'€ñò ™š€òó ™š€óô ™š€ôõ ™š€õö ™š€ö÷´3€œø ™š€øù Ý'€ùú Ý'€úû Ý'€ûü Ý'€üý ™š€ýþ ‹@€þÿ ‹@€ßøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkl7v.vf0000644000175200017520000000144411171477034016731 0ustar coincoin÷Ê´`“¹ ó cmex10SôSô§æ§æMMMM Sô Sô  M  M  Sô  á@  ;Z ;Z M M Ƨ Ƨnn Sô Sô Sô Sô    ´3´3 §æ ! §æ!" Sô"# Sô#$ 53$% 53%& 53&' 53'( á@() á@)* á@*+ á@+,n,-n-. ùÚ./ ùÚ/00112 §æ23 §æ34 §æ45 §æ56 §æ67 §æ785389539:53:;53;<53<=53=>53>? §æ?@@AABBCCD ƧDE ƧEF SôFGƧGHMHIá@IJƧJK- KLƧLM- MNƧNO- OPá@PQšQRMRS SôST SôTU SôUV SôVW SôWXšXYnYZá@Z[Ƨ[\Ƨ\]Ƨ]^Ƨ^_Ƨ_`š`anabá@bccdšdeá@effgšghMhiMijnjknklnlmnmn §æno §æoppqqrrsstá@tuá@uvá@vw nwx §æxy §æyz33z{33{|33|}33}~ n~ nøøøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkli7m.vf0000644000175200017520000000325411171477034017072 0ustar coincoin÷Ê[Ù óp™ omsegrió¬ cmmi10ó pbkl8ró psyroó pbkli8ró³ omselai õ³•(ôG“ Òç•(ôD“ '•(ôJ“ |æ•(ôL“ $Ì•(ôX“ `3•(ôP“ Æ™•(ôS“ •(ôU“ åZ•(ôF“ \•(ôY“ '•(ôW“ ‹3•(ôa“ ¡À•(ô1“ °•(ôg“ ¡À•(ôd“f•(ô¬“°•(ôz“ ¡À•(ôh“ ¡À•(ô2“ùÍ•(ôi“ dM•(ôšãY5“°•(ôl“ ¡À•(ôm“°•(ôn“°•(ôx“ ‹3•(ôp“ ¡À•(ô4“ ¡À•(ôs“¾f•(ôt“ ¡À•(ôu“ xÍ•(ô3“°•(ôq“ fZ•(ôy“! fZ•(ôw“"¾f•(ôe“# ‹3•(ôj“$ =f•(ô7“% ¡À•(ôr“&¾f•(ôc“' xÍ•(ôf“(ýæ•(ô¬(“)ýæ•(ô¬)“*ýæ•(ô¬*“+ýæ•(ô¬+“,퀕(ô¬,“-퀕(ô¬-“.§æ•(ô¬.“/§æ•(ô¬/“0§æ•(ô¬0“1§æ•(ô¬1“2§æ•(ô¬2“3§æ•(ô¬3“4§æ•(ô¬4“5§æ•(ô¬5“6§æ•(ô¬6“7§æ•(ô¬7“8§æ•(ô¬8“9§æ•(ô¬9“:l•(ô­.“;l•(ô­,“< 뀕(ô­<“= 뀕(ô­/“> 뀕(ô­>“?§æ•(ô¬?“@9N•(ô®€¶“ A Qæ•(ô›ÌͯA“ B Z•(ô›£Í¯B™š“ C \•(ôšï¦¯C™š“ D ‹3•(ô›£Í¯Dš“ E ¾f•(ô›Z¯E“F / •(ô›Z¯F‘þff“ G 9N•(ô“¯Gš™š“ H Sæ•(ô››™¯H™š“ IÒç•(ô›ÌͯI™š“ J Òç•(ô›õÁ¯J™š“ K ¾f•(ô“¯KšÂš“ L Z•(ôšzÚ¯L“ Mb@•(ô›¸M¯M™š“ N ûÚ•(ô›Z¯N™š“ O ‹3•(ôšzÚ¯O™š“Põ³•(ô›£Í¯P‘þff“ Q X•(ô›Z¯Q“ R (æ•(ô›£Í¯R“ S 3•(ôš~ô¯S“ T퀕(ôš53¯T‘þÌÍ“ U *ó•(ô𾀝U™š“ V ‹3•(ô“¯V›ÿ33“ WÝ'•(ô¯W›ÿ33“ X ® •(ô›Z¯X™š“ Y Z•(ô¯Y›ÿ33“ Z $Ì•(ô›Z¯Z“[ȧ•(ô¬[“\ȧ•(ô¬\“]ȧ•(ô¬]“^ýæ•(ô¬^“_ýæ•(ô¬_“`?r•(ô¬`“ a -•(ôšóÁ¯a“b 뀕(ô¯b“cûÚ•(ô¯c“d ‹3•(ô¯d“eñ™•(ô¯e“ f9N•(ô›t¯fff“ g §•(ôšZ¯g“ h MÍ•(ôšt¯h“ i¬•(ôšãY¯i“ jr¦•(ô›©ô¯j“k 뀕(ô¯k“lȧ•(ô¯l“mb@•(ô¯m“n 9N•(ô¯n“oñ™•(ô¯o“ p Qæ•(ôšff¯p“q C•(ô¯q“ rL•(ôš× ¯r“sñ™•(ô¯s“t¾f•(ô¯t“u 9N•(ô¯u“vñ™•(ô¯v“wb@•(ô¯w“ x 7@•(ôšE™¯x“ y ™•(ôš®¯y“ zét•(ôšI³¯z“{ȧ•(ô¯“ |f•(ô£§°:“}§•(ô®€Ã“~§æ•(ô¬~“퀕(ô¬“øøøøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkl7y.vf0000644000175200017520000000222011171477034016725 0ustar coincoin÷ÊnË(d ó pbkl8ró psyró¬ cmsy10ó eusm10 ™š ¬€×ȳ¬€´¬*ȳ¬€¸V­ȳ¬€± ñ§­ I³¬€Å ñ§­  I³¬€Ä ñ§­  ñ§­  ¬­ V­X €• ñ§­ȳ¬€º hf¬€Í hf¬€Êȳ¬€£ȳ¬€³ ñ§­ ñ§­ȳ¬~ȳ¬€» hf¬€Ì hf¬€É ‘f¬<–ü< ‘f¬>–ü> ñ§­ ñ§­ ÊÁ¬€¬!ÊÁ¬€®" ¥Ù¬€­# ¥Ù¬€¯$¬¬€«%¬­%&¬­&' ñ§­'(ÊÁ¬€Ü)ÊÁ¬€Þ* ¥Ù¬€Ý+ ¥Ù¬€ß,¬¬€Û-¬­-.¬­./ hf¬€µ0åZ•Qæ­01 hf¬€¥253¬€Î–üÌÍ3¬'4ÌÍ­45ÌÍ­56­67­78 hf¬"9ȳ¬$: hf¬€Ø;V­;< ¸M¬€Â= ùÚ¬€Á> ñ§­>? ‡'¬^@ +¬€ÀA Qæ®AB •€•¥æ®BšÂšC 3•¥æ®CšÂšD °•¥æ®DšÂšE `A•¥æ®EF çf®F•…&G f•¥æ®GšÂšH ¾t®H•™šII³•¥æ®IšÂšJ •(ô®JšÂšK ¬•…&®KL G§•× ®LMM®M•× N bM®NO ÌÍ•¥æ®Oš× P Qæ®P•šQ =f•¥æ®QR M®RSƒ ®S•× T 7@®T•× U ´3–ÿ\3®UšëŒ V –ÿ\3®Vš…& W´3–ÿ\3®Wš…&X `A®X•ëŒY 3®Y•…&Z $Ú•¥æ®Z[ I³¬€È\ I³¬€Ç] €­]^ ¥Ù¬€Ù_ ¥Ù¬€Ú` - ­`a - ­abdZ­bcdZ­cddZ­dedZ­ef¾t{–G§g¾t–G§}hC¬€áiC¬€ñ j33¤ÿ\3¬|©£ÍkV­klV­lm - ­mn ™š\o›™­op ß3­pq ~ô­qr hf¬€ÑsbM¬€òt €­tu €­uv ñ§­vw ñ§­wxMÍ€§yŸ´€†zŸ´€‡{ ™š€¶| ?¬€§} ?¬€¨~ ?¬€© ?¬€ªøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkdi7y.vf0000644000175200017520000000222411171477034017072 0ustar coincoin÷ÊBï© ó pbkdi8ró psyró¬ cmbsy10ó eusb10 ™š ¬€×ȳ¬€´¬*ȳ¬€¸ ‘f­ȳ¬€±åZ­ I³¬€Å åZ­  I³¬€Ä åZ­  åZ­  &æ­  ‘f­¾t€•åZ­ȳ¬€º hf¬€Í hf¬€Êȳ¬€£ȳ¬€³åZ­åZ­ȳ¬~ȳ¬€» hf¬€Ì hf¬€É ‘f¬<–ü< ‘f¬>–ü>åZ­åZ­ ÊÁ¬€¬!ÊÁ¬€®" ¥Ù¬€­# ¥Ù¬€¯$¬¬€«%&æ­%&&æ­&'åZ­'(ÊÁ¬€Ü)ÊÁ¬€Þ* ¥Ù¬€Ý+ ¥Ù¬€ß,¬¬€Û-&æ­-.&æ­./ hf¬€µ0 ?•Qæ­01 hf¬€¥253¬€Î–üÌÍ3¬'4­45­56­67­78 hf¬"9ȳ¬$: hf¬€Ø; ‘f­;< ¸M¬€Â= ùÚ¬€Á>åZ­>? ‡'¬^@ +¬€ÀA(ô®AB ;Z•¥æ®BšÂšC I³•¥æ®CšÂšDjs•¥æ®DšÂšE £Í•¥æ®EF ™š®F•…&G Qæ•¥æ®GšÂšH•€®H•™šIjs•¥æ®IšÂšJ M•(ô®JšÂšKbM•…&®KL Äš•× ®LM•€®M•× N ûæ®NO E™•¥æ®Oš× P ²'®P•šQ ãM•¥æ®QR M®RS hf®S•× T I³®T•× U Z–ÿ\3®UšëŒ V åZ–ÿ\3®Vš…& WÀ€–ÿ\3®Wš…&X Ý'®X•ëŒY ff®Y•…&Z …•¥æ®Z[ I³¬€È\ I³¬€Ç] Äš­]^ ¥Ù¬€Ù_ ¥Ù¬€Ú` ²'­`a ²'­abƒ ­bcƒ ­cdƒ ­deƒ ­eft{–G§gt–G§}hC¬€áiC¬€ñ j33¤ÿ\3¬|©£Ík ‘f­kl ‘f­lm ²'­mn C\oOÚ­op÷Í­pqùÚ­qr hf¬€ÑsbM¬€òt Äš­tu Äš­uvåZ­vwåZ­wx çf€§y´3€†z´3€‡{ Ý'€¶| ?¬€§} ?¬€¨~ ?¬€© ?¬€ªøøøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkdo8t.vf0000644000175200017520000000443411171477034017101 0ustar coincoin÷ÊÌ$àó pbkdo8ró³ omselaboó‡' omselabo󙚠omselaboffff€´€ˆ©ô€˜€¨l   X €¯ š ¾t€¸ š š€‚€‹€›Ÿ´€“Ÿ´€”Ÿ´€„ff€«ff€»€–€— „ 3„ï(Warning: missing glyph `perthousandzero'¾t²'£§¬: ÷Íf•× f Òç –ÿ33¥Ù–ú Ù –ú›ÿ33( G§¤33–ÌÍ„33£Í„£Íff„33£Í“©üÌÍ!¾t!"´3"# ‹@#$ ‹@$%%& ÌÍ&'š'(š()š)*X *+ ™š+,l,-¾t-.l./ ™š/0 ‹@01 ‹@12 ‹@23 ‹@34 ‹@45 ‹@56 ‹@67 ‹@78 ‹@89 ‹@9:l:;l;< ™š<= ™š=> ™š>? ‹@?@ š@A AB BC ÒçCD vÀDE EF Ý'FG vÀGH šHIffIJ 9NJK ÌÍKL 9NLMMN ÒçNO ÌÍOP ‹@PQ ÌÍQR vÀRS ‹@ST 33TU ÒçUV VWWX vÀXY 33YZ 9NZ[ÌÍ[\ ™š\]ÌÍ]^ ™š^__`š`a Cab ™šbc Ccd 9Nde CefZfg Cgh Ý'hi¾tijljk ‹@klllmmn Ý'no çfop 9Npq çfqrX rsMÍstX tu ‹@uv ™švw ÌÍwx ™šxy çfyzñ§z{š{| ™š|}š}~ ™š~¾t- € ¤ý7M–1' ŽA –ÎÍŽA ‚ Òç¤ü´@–?r€´ŽC ƒ Òç¤ü´@–r¦ŽC „ vÀ¤ý7M– ?ŽD … ¤ý7M–1'ŽE† –;ZŽE ‡ vÀ¤ü´@–Äš ŽG ˆ 9N¤ý7M•ÊÍ€´ŽL‰ ÀL–üÌÍ'Š 9N ‹ Òç¤ý7M–&怴ŽN Œ Òç¤ý7M–ZŽN 뀭- Ž Ìͤü´@–p™ŽO vÀ¤ý7M–xÍ€´ŽR vÀ¤ý7M–¬ŽR ‘ ‹@¤ü´@–›™€´ŽS’ ‹@€Š “ ‹@–ff€¸ŽS ” 33¤ý7M– ?ŽT • 33–¼f€¸ŽT – Òç¤ý7M–Ù ŽU — Òç¤ý7M–¥Ù ŽU˜ 33€Ÿ ™ 9N¤ý7M–Z€´ŽZš 9N › 9N¤ý7M–ŽZœŸ´IJ ff¤ý7M–šŽI ž 9N–á@¤á@€¯ŽdŸ ™š€§   C£× –£Í Ža¡ C–SôŽa ¢ C£× –p™€´Žc £ C£× –£ÍŽc¤ Àd–þÌÍ' ¥ C£× –£ÍŽe¦ C–tŽe § C¤þ‡3–Ý' Žg ¨l¤ü13• À€´Žl©íl–þff'ªl « Ý'£× –=f€´Žn ¬ Ý'£× –p™Žn­ Ƨ®= ® çf£× –t³Žo ¯X £× •zÚ€´Žr °X £× •®Žr ±MÍ£× –õÁ€´Žs²MÍ€š ³MÍ–G§€¸Žs´ ?rt–þÌÍ' µX –ÌÍ€¸Žt ¶ ‹@£× –ƧŽu · ‹@£× –“t Žu¸ çf€ÿ ¹ñ§£× –G§€´Žzºñ§ »ñ§£× –z¼ +ij½¾t€¡¾ ‹@€¿¿ ‹@€£À €ÀÁ €Á €Âà €ÃÄ €ÄÅ €ÅÆ9N€ÆÇ Òç€ÇÈ €ÈÉ €ÉÊ €ÊË €ËÌff€ÌÍff€ÍÎff€ÎÏff€ÏÐ vÀ€ÐÑ Òç€ÑÒ ÌÍ€ÒÓ ÌÍ€ÓÔ ÌÍ€ÔÕ ÌÍ€ÕÖ ÌÍ€Ö×€ŒØ ÌÍ€ØÙ Òç€ÙÚ Òç€ÚÛ Òç€ÛÜ Òç€ÜÝ 33€ÝÞ ‹@€Þ߀SSà C€àá C€áâ C€âã C€ãä C€äå C€åæZ€æç C€çè C€èé C€éê C€êë C€ëì¾t€ìí¾t€íî¾t€îï¾t€ïð çf€ðñ Ý'€ñò çf€òó çf€óô çf€ôõ çf€õö çf€ö÷€œø çf€øù ‹@€ùú ‹@€úû ‹@€ûü ‹@€üý çf€ýþ 9N€þÿ ‹@€ßøøøøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkli7t.vf0000644000175200017520000000206011171477034017073 0ustar coincoin÷Êçðwµ óp™ omsegrió pbkli8ró³ omselai £ÍG D ¶@J +L ÒçX MP t³S ƧU “tF  3Y ¶@W Z¬f•¶Mf ¬–ÌÍ ‹@¬\'¬f•¶M® ¬f•¶MvÀ¬À€£§­:l¬𬀴¬¬ ¬€¯ 33–33¬ “𬀏 çf¬€ßZ¬€æff¬€œŸ´¬€ø¬€ÆÝ'¬€Œ $Ú¬€Ø/ „ï$Warning: missing glyph `lslashslash'!š¬!"¬€”# çf¬#$ çf¬$% Ìͬ%& š¬&'vÀ¬'(vÀ¬()vÀ¬)*¬*+ ™š¬+,Ìͬ,-š¬-.Ìͬ./ ™š¬/0 çf¬01 çf¬12 çf¬23 çf¬34 çf¬45 çf¬56 çf¬67 çf¬78 çf¬89 çf¬9:Ìͬ:;Ìͬ;<𬀡= ™š¬=>Ÿ´¬€¿?Ÿ´¬?@ vÀ¬@A 33¬AB ¬BC ¬CD Òç¬DE Ý'¬EF çf¬FG $Ú¬GH ÌͬHIš¬IJñ§¬JK ¬KL 9N¬L–õÁM ¾t¬MN ¬NO $Ú¬OP ™š¬PQ vÀ¬QR 33¬RS 9N¬ST ™š¬TU ¬UV Ý'¬VWX ¬WX 33¬XY ‹@¬YZ C¬Z[$Ú¬[\¬€“]$Ú¬]^¬€ˆ_$Ú¬`vÀ¬`a çf¬ab ™š¬bc©ô¬cd 9N¬deŸ´¬efl¬fgñ§¬gh çf¬hivÀ¬ijvÀ¬jk ™š¬klvÀ¬lmZ¬mn çf¬noŸ´¬op ™š¬pqñ§¬qrff¬rsŸ´¬stl¬tu çf¬uvŸ´¬vwZ¬wxŸ´¬xy ™š¬yzMͬz{¬€–|¬€—}l¬~¬€˜´3¬€¨Š C¬ªl¬øDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkli8t.vf0000644000175200017520000000435011171477034017100 0ustar coincoin÷ʆ6$ ó pbkli8ró³ omselaió‡' omselai󙚠omselailš€´€ˆ€˜´3€¨lÌÍ   €¯ $Ú š€¸ $Ú š€‚Ý'€‹Ý'€›€“€”©ô€„ÌÍ€«ÌÍ€»€–€— „ãM3„ï(Warning: missing glyph `perthousandzero'vÀÀ€£§¬: Zf•¶Mf –ÌÍ ‹@\'f•¶M® f•¶M( G§¤33–ÌÍ„33£Í„£Íff„33£Í“©üÌÍ!š!"¾t"# çf#$ çf$% ÌÍ%& š&'vÀ'(vÀ()vÀ)**+ ™š+,ÌÍ,-š-.ÌÍ./ ™š/0 çf01 çf12 çf23 çf34 çf45 çf56 çf67 çf78 çf89 çf9:ÌÍ:;ÌÍ;< ™š<= ™š=> ™š>?Ÿ´?@ vÀ@A 33AB BC CD ÒçDE Ý'EF çfFG $ÚGH ÌÍHIšIJñ§JK KL 9NL–õÁM ¾tMN NO $ÚOP ™šPQ vÀQR 33RS 9NST ™šTU UV Ý'VWX WX 33XY ‹@YZ CZ[$Ú[\ ™š\]$Ú]^ ™š^__`vÀ`a çfab ™šbc©ôcd 9NdeŸ´eflfgñ§gh çfhivÀijvÀjk ™šklvÀlmZmn çfnoŸ´op ™špqñ§qrffrsŸ´stltu çfuvŸ´vwZwxŸ´xy ™šyzMÍz{¾t{| ™š|}Z}~ ™š~š- € 33¤ý+ –— ŽA 33– ŽA ‚ ¤üĦ–€´ŽC ƒ ¤üĦ–ÌÍŽC „ Òç¤ý+ –MÍŽD … Ý'¤ý+ –jsŽE† Ý'–+ŽE ‡ $Ú¤üĦ–³ ŽG ˆ C¤ý+ •A€€´ŽL‰ ‡'L–üÌÍ'Š C ‹ ¤ý+ –²'€´ŽN Œ ¤ý+ –¼fŽN ­- Ž $Ú¤üĦ–뀎O 33¤ý+ –M€´ŽR 33¤ý+ –—ŽR ‘ 9N¤üĦ–³€´ŽS’ 9N€Š “ 9N–Z€¸ŽS ” ™š¤ý+ –ÊÁŽT • ™š–A€€¸ŽT – ¤ý+ –‰3ŽU — ¤ý+ –× ŽU˜ ‹@€Ÿ ™ C¤ý+ –“t€´ŽZš C › C¤ý+ –MŽZœ ?IJ š¤ý+ –ùÚŽI ž 9N–33¤ùÚ€¯ŽdŸ çf€§  çf–p™ Ža¡ çf–ZŽa ¢©ô–G§€´Žc£©ô•QæŽc¤ |æd–þÌÍ'¥Ÿ´–ÌÍŽe¦Ÿ´–=fŽe§ñ§–õÁ Žg ¨vÀ¤üE¦•V€´Žl©Sôl–þff'ªl « çf–ff€´Žn¬ çf–p™Žn­ÌÍ®=®Ÿ´–™šŽo ¯ff–§æ€´Žr°ff•²3Žr ±Ÿ´–€´Žs²Ÿ´€š ³Ÿ´–€¸Žs´°t–þÌÍ'µl•(ô€¸Žt¶ çf–=fŽu· çf–‹@ Žu¸ ™š€ÿ ¹MÍ–™š€´ŽzºMÍ»MÍ–tŽz¼íij½š€¡¾Ÿ´€¿¿ çf€£À 33€ÀÁ 33€Á 33€Âà 33€ÃÄ 33€ÄÅ 33€ÅÆ€ÆÇ €ÇÈ Ý'€ÈÉ Ý'€ÉÊ Ý'€ÊË Ý'€ËÌš€ÌÍš€ÍΚ€ÎÏš€ÏÐ Òç€ÐÑ €ÑÒ $Ú€ÒÓ $Ú€ÓÔ $Ú€ÔÕ $Ú€ÕÖ $Ú€Ö×Ý'€ŒØ $Ú€ØÙ €ÙÚ €ÚÛ €ÛÜ €ÜÝ ‹@€ÝÞ ™š€Þßr¦SSà çf€àá çf€áâ çf€âã çf€ãä çf€äå çf€åæZ€æç©ô€ç蟴€è韴€éꟴ€ê럴€ëìvÀ€ìívÀ€íîvÀ€îïvÀ€ï🴀ðñ çf€ñòŸ´€òóŸ´€óôŸ´€ôõŸ´€õöŸ´€ö÷ff€œøŸ´€øù çf€ùú çf€úû çf€ûü çf€üý ™š€ýþ ™š€þÿ çf€ßøøøøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkli7y.vf0000644000175200017520000000222411171477034017102 0ustar coincoin÷ÊZ[t ó pbkli8ró psyró¬ cmsy10ó eusm10 ™š ¬€×ȳ¬€´¬*ȳ¬€¸V­ȳ¬€± ñ§­ I³¬€Å ñ§­  I³¬€Ä ñ§­  ñ§­  ¬­ V­X €• ñ§­ȳ¬€º hf¬€Í hf¬€Êȳ¬€£ȳ¬€³ ñ§­ ñ§­ȳ¬~ȳ¬€» hf¬€Ì hf¬€É ‘f¬<–ü< ‘f¬>–ü> ñ§­ ñ§­ ÊÁ¬€¬!ÊÁ¬€®" ¥Ù¬€­# ¥Ù¬€¯$¬¬€«%¬­%&¬­&' ñ§­'(ÊÁ¬€Ü)ÊÁ¬€Þ* ¥Ù¬€Ý+ ¥Ù¬€ß,¬¬€Û-¬­-.¬­./ hf¬€µ0åZ•Qæ­01 hf¬€¥253¬€Î–üÌÍ3¬'4ÌÍ­45ÌÍ­56­67­78 hf¬"9ȳ¬$: hf¬€Ø;V­;< ¸M¬€Â= ùÚ¬€Á> ñ§­>? ‡'¬^@ +¬€ÀA Qæ®AB •€•¥æ®BšÂšC 3•¥æ®CšÂšD °•¥æ®DšÂšE `A•¥æ®EF çf®F•…&G f•¥æ®GšÂšH ¾t®H•™šII³•¥æ®IšÂšJ •(ô®JšÂšK ¬•…&®KL G§•× ®LMM®M•× N bM®NO ÌÍ•¥æ®Oš× P Qæ®P•šQ =f•¥æ®QR M®RSƒ ®S•× T 7@®T•× U ´3–ÿ\3®UšëŒ V –ÿ\3®Vš…& W´3–ÿ\3®Wš…&X `A®X•ëŒY 3®Y•…&Z $Ú•¥æ®Z[ I³¬€È\ I³¬€Ç] €­]^ ¥Ù¬€Ù_ ¥Ù¬€Ú` - ­`a - ­abdZ­bcdZ­cddZ­dedZ­ef{–G§gX –G§}hC¬€áiC¬€ñ j33¤ÿ\3¬|©£ÍkV­klV­lm - ­mn ™š\o›™­op ß3­pq ~ô­qr hf¬€ÑsbM¬€òt €­tu €­uv ñ§­vw ñ§­wx çf€§y çf€†z çf€‡{ çf€¶| ?¬€§} ?¬€¨~ ?¬€© ?¬€ªøøøøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkdu8t.vf0000644000175200017520000000434411171477034017107 0ustar coincoin÷ʈœèl ó pbkdu8ró³ omselabuó‡' omselabu󙚠omselabutp™€´® €ˆ® €˜Q怨õÁ ® \'  ® €¯ t €¸ ³ ÌÍ€‚…€‹…€›Q怓Q怔Q怄t€«t€»€–€— „=f3„ï(Warning: missing glyph `perthousandzero'tÀ€£§¬: ™šf•(ôf …•ff ³f•(ôf•(ô( ™š¤33–ÌÍ„33ÌÍ„ÌÍff„33ÌÍ“©üÌÍ!³!"t"# á@#$ á@$%t%&® &'³'((ô()(ô)*\'*+ ™š+,p™,-zÚ-.p™./Â/0 á@01 á@12 á@23 á@34 á@45 á@56 á@67 á@78 á@89 á@9:p™:;p™;< ë€<= ™š=> ë€>? ë€?@ zÚ@A …AB …BC 33CD (ôDE …EF ZFG (ôGH ÌÍHItIJ ë€JK zÚKL =fLM ÂMN ×NO (ôOP =fPQ (ôQR ×RS 33ST 33TU ×UV ZVWWX ×XY ZYZ á@Z[(ô[\ G§\](ô]^ ë€^__`³`a á@ab ™šbcõÁcd á@deõÁef¸Mfg ë€gh 33hitij³jk 33kltlm\'mn á@no ™šop Zpq ë€qrrs£Íst 3tu á@uv£Ívw Âwx ë€xy ™šyzõÁz{ÌÍ{| ë€|}ÌÍ}~ ë€~zÚ- € …¤ýX– ŽA …–ÎÍŽA ‚ 33¤ýs–åZ€´ŽC ƒ 33¤ýs–ƧŽC „ (ô¤ýX–¥ÙŽD … …¤ýX–E† …–;ZŽE ‡ (ô¤ýs–js ŽG ˆ =f¤ýX•Û&€´ŽL‰ (ôL–üÌÍ'Š =f ‹ פýX–7@€´ŽN Œ פýX–ŽN 뀭- Ž (ô¤ýs–§ŽO פýX–7@€´ŽR פýX–ŽR ‘ 33¤ýs–åZ€´ŽS’ 33€Š “ 33–¸M€¸ŽS ” 33¤ýX–ƧŽT • 33–¸M€¸ŽT – פýX–t³ŽU — פýX–M ŽU˜ Z€Ÿ ™ á@¤ýX–¼f€´ŽZš á@ › á@¤ýX–jsŽZœIJ t¤ýX• ŽI ž á@–33¤€€¯ŽdŸ 뀀§  á@– Ža¡ á@–°Ža ¢õÁ–€´Žc£õÁ–£ÍŽc¤ÌÍd–þÌÍ'¥õÁ–£ÍŽe¦õÁ–뀎e§ 뀖G§ Žg ¨t¤ü‡3•V€´Žl© ™šl–þff'ªt « á@–¸M€´Žn¬ á@–™šŽn­ §®=® ™š•QæŽo ¯–G§€´Žr°•(ôŽr ±£Í–™š€´Žs²£Í€š ³£Í–p™€¸Žs´ õÁt–þÌÍ' µ 3–£Í€¸Žt¶ á@–õÁŽu· á@–Z Žu¸ ™š€ÿ ¹õÁ–€´ŽzºõÁ»õÁ–p™Žz¼ 33ij½³€¡¾ 뀀¿¿ á@€£À …€ÀÁ …€Á …€Âà …€ÃÄ …€ÄÅ …€ÅÆ=f€ÆÇ 33€ÇÈ …€ÈÉ …€ÉÊ …€ÊË …€ËÌt€ÌÍt€ÍÎt€ÎÏt€ÏÐ (ô€ÐÑ ×€ÑÒ (ô€ÒÓ (ô€ÓÔ (ô€ÔÕ (ô€ÕÖ (ô€Ö×á@€ŒØ (ô€ØÙ ×€ÙÚ ×€ÚÛ ×€ÛÜ ×€ÜÝ Z€ÝÞ =f€ÞßffSSà á@€àá á@€áâ á@€âã á@€ãä á@€äå á@€åæt€æçõÁ€çèõÁ€èéõÁ€éêõÁ€êëõÁ€ëìt€ìít€íît€îït€ï𠙚€ðñ á@€ñò ™š€òó ™š€óô ™š€ôõ ™š€õö ™š€ö÷¸M€œø ™š€øù á@€ùú á@€úû á@€ûü á@€üý ™š€ýþ Z€þÿ Z€ßøøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbklo8t.vf0000644000175200017520000000442411171477034017110 0ustar coincoin÷Ê åE\ ó pbklo8ró³ omselaoó‡' omselao󙚠omselaoll€´´3€ˆ€˜´3€¨Zš ´3X  €¯ $Ú š€¸ š €‚Ò瀋Ò瀛ff€“ff€”ff€„¾t€«¾t€»€–€— „ºZ3„ï(Warning: missing glyph `perthousandzero'ÌÍÀ€£§¬: ?f•× f çf çf€–ûG³–û33( G§¤33–ÌÍ„33£Í„£Íff„33£Í“©üÌÍ!ÌÍ!"Z"# çf#$ çf$%ff%& ÌÍ&''(ÌÍ()ÌÍ)**+ ™š+,š,-ff-.š./ ™š/0 çf01 çf12 çf23 çf34 çf45 çf56 çf67 çf78 çf89 çf9:š:;š;< ™š<= ™š=> ™š>?Ÿ´?@ š@A Ý'AB ÒçBC ÒçCD ÌÍDE EF 9NFG ÌÍGH ÌÍHIlIJ ™šJK KL ë€L•QæM´3MN ÒçNO ÌÍOP çfPQ šQR RS ‹@ST çfTU vÀUV 33VWX WX XY 9NYZ 9NZ[ÌÍ[\ ™š\]ÌÍ]^ ™š^__``a Cab çfbcMÍcd çfdeMÍefšfgŸ´gh ‹@hiÌÍijÌÍjk çfklÌÍlmmn ‹@noñ§op çfpq CqrrsMÍstZtu Ý'uvMÍvw vÀwxñ§xyŸ´yz©ôz{vÀ{| ™š|}vÀ}~ ™š~ff- € Ý'¤üÈÀ–I³ ŽA Ý'–;ZŽA ‚ Òç¤üÈÀ–ºZ€´ŽC ƒ Òç¤üÈÀ–€ŽC „ ÌͤüÈÀ–ñ§ŽD … ¤üÈÀ–íŽE† –;ZŽE ‡ ÌͤüÈÀ–C ŽG ˆ ™š¤üÈÀ•9N€´ŽL‰ çfL–üÌÍ'Š ™š ‹ Òç¤üÈÀ–ºZ€´ŽN Œ Òç¤üÈÀ–€ŽN 뀭- Ž ÌͤüÈÀ–çfŽO ¤üÈÀ–‘f€´ŽR ¤üÈÀ–íŽR ‘ ‹@¤üÈÀ–€€´ŽS’ ‹@€Š “ ‹@–¸M€¸ŽS ” çf¤üÈÀ– ÀŽT • çf–ff€¸ŽT – vÀ¤üÈÀ–ºZŽU — vÀ¤üÈÀ–53 ŽU˜ 9N€Ÿ ™ 9N¤üÈÀ–퀴ŽZš 9N › 9N¤üÈÀ–‘fŽZœIJ l¤üÈÀ–+ŽI ž çf–á@¤¬€¯ŽdŸMÍ€§   C£Âš–ýô Ža¡ C–SôŽa ¢Mͣš–xÍ€´Žc £Mͣš–ÔôŽc¤ 53d–þÌÍ' ¥Mͣš–ÔôŽe¦MÍ–™šŽe §Ÿ´¤þzæ–á@ Žg ¨Ìͤü•Z€´Žl©´3l–þff'ªš « ‹@£Âš–—€´Žn ¬ ‹@£Âš–ó³Žn­ÌÍ®= ®ñ§£Âš–xÍŽo ¯£Âš–Ôô€´Žr °£Âš•1'Žr ±Mͣš–xÍ€´Žs²MÍ€š ³MÍ–™š€¸Žs´^3t–þÌÍ'µZ•zÚ€¸Žt ¶ Ý'£Âš–nŽu · Ý'£Âš–ét Žu¸Ÿ´€ÿ ¹©ô£Âš–&怴Žzº©ô »©ô£Âš–ÊÁŽz¼ ™šij½ÌÍ€¡¾Ÿ´€¿¿ çf€£À Ý'€ÀÁ Ý'€Á Ý'€Âà Ý'€ÃÄ Ý'€ÄÅ Ý'€ÅÆ$Ú€ÆÇ Òç€ÇÈ €ÈÉ €ÉÊ €ÊË €ËÌl€ÌÍl€ÍÎl€ÎÏl€ÏÐ ÌÍ€ÐÑ Òç€ÑÒ ÌÍ€ÒÓ ÌÍ€ÓÔ ÌÍ€ÔÕ ÌÍ€ÕÖ ÌÍ€Ö×Ò瀌Ø ÌÍ€ØÙ vÀ€ÙÚ vÀ€ÚÛ vÀ€ÛÜ vÀ€ÜÝ 9N€ÝÞ çf€Þ߀SSà C€àá C€áâ C€âã C€ãä C€äå C€åæ ¾t€æçMÍ€çèMÍ€èéMÍ€éêMÍ€êëMÍ€ëìÌÍ€ìíÌÍ€íîÌÍ€îïÌÍ€ïðñ§€ðñ ‹@€ñòñ§€òóñ§€óôñ§€ôõñ§€õöñ§€ö÷ff€œøñ§€øù Ý'€ùú Ý'€úû Ý'€ûü Ý'€üýŸ´€ýþ çf€þÿ ‹@€ßøøøøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbklu8t.vf0000644000175200017520000000434411171477034017117 0ustar coincoin÷Ê0Òˆ ó pbklu8ró³ omselauó‡' omselau󙚠omselaup™³€´ 3€ˆ 3€˜¸M€¨p™ÌÍ  3 3   3€¯ (ô ³€¸ (ô ³€‚á@€‹á@€› 3€“ 3€”® €„ÌÍ€«ÌÍ€»€–€— „çf3„ï(Warning: missing glyph `perthousandzero'zÚÀ€£§¬: “tf•²3f 3–ÌÍ Z`Af•²3²'f•²3( ™š¤33–ÌÍ„33ÌÍ„ÌÍff„33ÌÍ“©üÌÍ!³!"Â"# ë€#$ ë€$% ÌÍ%& ³&'zÚ'(zÚ()zÚ)* 3*+ ™š+,ÌÍ,-³-.ÌÍ./ ™š/0 ë€01 ë€12 ë€23 ë€34 ë€45 ë€56 ë€67 ë€78 ë€89 ë€9:ÌÍ:;ÌÍ;< ™š<= ™š=> ™š>?£Í?@ zÚ@A 33AB …BC …CD ×DE á@EF ë€FG (ôGH ÌÍHI³IJõÁJK …KL =fL–õÁM ÂMN …NO (ôOP ™šPQ zÚQR 33RS =fST ™šTU …UV á@VW\'WX 33XY ZYZ G§Z[(ô[\ ™š\](ô]^ ™š^__`zÚ`a ë€ab ™šbc® cd =fde£Íefp™fgõÁgh ë€hizÚijzÚjk ™šklzÚlmtmn ë€no£Íop ™špqõÁqrffrs£Ístp™tu ë€uv£Ívwtwx£Íxy ™šyzQæz{Â{| ™š|}t}~ ™š~³- € 33¤ý – ŽA 33–ŽA ‚ …¤ü¼s–7@€´ŽC ƒ …¤ü¼s–A€ŽC „ פý –ÒçŽD … á@¤ý –E† á@–+ŽE ‡ (ô¤ü¼s–“t ŽG ˆ G§¤ý •Ʋ€´ŽL‰ ZL–üÌÍ'Š G§ ‹ …¤ý –7@€´ŽN Œ …¤ý –A€ŽN ­- Ž (ô¤ü¼s–`AŽO 33¤ý –M€´ŽR 33¤ý –ŽR ‘ =f¤ü¼s–“t€´ŽS’ =f€Š “ =f–Z€¸ŽS ” ™š¤ý –KÀŽT • ™š–=f€¸ŽT – …¤ý –MŽU — …¤ý –`A ŽU˜ Z€Ÿ ™ G§¤ý –€´ŽZš G§ › G§¤ý –“tŽZœtIJ ³¤ý •~ôŽI ž =f–33¤Ù €¯ŽdŸ 뀀§  뀖p™ Ža¡ 뀖ZŽa ¢® –G§€´Žc£® •QæŽc¤ …d–þÌÍ'¥£Í–ÌÍŽe¦£Í–=fŽe§õÁ–õÁ Žg ¨zÚ¤ünš•¶M€´Žl©\'l–þff'ªp™ « 뀖ff€´Žn¬ 뀖p™Žn­ÌÍ®=®£Í–™šŽo ¯ff–£Í€´Žr°ff•®Žr ±£Í–€´Žs²£Í€š ³£Í–€¸Žs´¸Mt–þÌÍ'µp™•(ô€¸Žt¶ 뀖=fŽu· 뀖Z Žu¸ ™š€ÿ ¹Qæ–™š€´ŽzºQæ»Qæ–tŽz¼õÁij½³€¡¾£Í€¿¿ 뀀£À 33€ÀÁ 33€Á 33€Âà 33€ÃÄ 33€ÄÅ 33€ÅÆ…€ÆÇ …€ÇÈ á@€ÈÉ á@€ÉÊ á@€ÊË á@€Ë̳€Ìͳ€Íγ€Îϳ€ÏÐ ×€ÐÑ …€ÑÒ (ô€ÒÓ (ô€ÓÔ (ô€ÔÕ (ô€ÕÖ (ô€Ö×á@€ŒØ (ô€ØÙ …€ÙÚ …€ÚÛ …€ÛÜ …€ÜÝ Z€ÝÞ ™š€ÞßzÚSSà 뀀àá 뀀áâ 뀀âã 뀀ãä 뀀äå 뀀åæt€æç® €çè£Í€èé£Í€éê£Í€êë£Í€ëìzÚ€ìízÚ€íîzÚ€îïzÚ€ïð£Í€ðñ 뀀ñò£Í€òó£Í€óô£Í€ôõ£Í€õö£Í€ö÷ff€œø£Í€øù 뀀ùú 뀀úû 뀀ûü 뀀üý ™š€ýþ ™š€þÿ ë€€ßøDyLP-1.10.4/DyLP/doc/TexMF/fonts/vf/pbkd7t.vf0000644000175200017520000000206411171477034016716 0ustar coincoin÷Ê ʽ ó™š omsegrbó pbkd8ró³ omselab À€G X D ® J ´3L p™XI³P p™S ´3UCF CY E™W ÷ͬf•× f Òç¬ ¬–ÿ33¥Ù¬–ú Ù ¬–ú›ÿ33¾t¬²'£§­:ff¬ff¬€´¬¬ X ¬€¯ – 3¬ “¾t¬€¸ ‹@¬€ßZ¬€æ¬€œ çf¬€ø9N¬€Æ¬€Œ Ìͬ€Ø/ „ï$Warning: missing glyph `lslashslash'!¾t¬!"Ÿ´¬€”# ‹@¬#$ ‹@¬$%¬%& Ìͬ&'š¬'(š¬()š¬)*X ¬*+ ™š¬+,l¬,-¾t¬-.l¬./ ™š¬/0 ‹@¬01 ‹@¬12 ‹@¬23 ‹@¬34 ‹@¬45 ‹@¬56 ‹@¬67 ‹@¬78 ‹@¬89 ‹@¬9:l¬:;l¬;<¾t¬€¡= ™š¬=> ‹@¬€¿? ‹@¬?@ š¬@A ¬AB ¬BC Òç¬CD vÀ¬DE ¬EF Ý'¬FG vÀ¬GH š¬HIff¬IJ 9N¬JK ÌͬKL 9N¬LM¬MN Òç¬NO ÌͬOP ‹@¬PQ ÌͬQR vÀ¬RS ‹@¬ST 33¬TU Òç¬UV ¬VW¬WX vÀ¬XY 33¬YZ 9N¬Z[Ìͬ[\Ÿ´¬€“]Ìͬ]^¬€ˆ_š¬`š¬`a C¬ab ™š¬bc C¬cd 9N¬de C¬efZ¬fg C¬gh Ý'¬hi¾t¬ijl¬jk ‹@¬kll¬lm¬mn Ý'¬no çf¬op 9N¬pq çf¬qrX ¬rsMͬstX ¬tu ‹@¬uv ™š¬vw Ìͬwx ™š¬xy çf¬yzñ§¬z{¬€–|¬€—}¬~©ô¬€˜¬€¨Š 9N¬ªl¬øøøøDyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/0000755000175200017520000000000013434203622015331 5ustar coincoinDyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkli7m.tfm0000644000175200017520000000271011171477034017414 0ustar coincoinrF:-[Ù TEX MATH ITALIC UNSPECIFIED€'ÀT0Ð2Ö,Ð5À?ÀD/ÀL4Ð0<ÀCÀ”@À&eÿoõ 0ùoÕUpXõ_`û&e ouPe e+Ïm:Ÿ:ee&õ8…4ok$+oE"E"E"E"SSSS000;;; ; ;tØtSæ°9 -3 a*¶a; m. m á7¶‰= ¡ ¹¦Á . ©  „A ­ 1 µ ;¶q  Í>ºI6 U(¶= Ý)¦Å& ÐB Ð- ½  Ø! ¥ ð Ë ËE!E! À"VuÖ0V]&ÖiVUÞÕ^1$Öx¦‰ ®=ÖlÖ™AV#Ve V!%ZA"Z9# P$V%¦}&#Vu'V1(AV)V‘*^)+V],V|MDŒœàÈÀä¬ȧí€ùÍfl¾fÒçr¦Lȧf?r¾fûÚ9N§æ°étí€ñ™õ³ / 7@ C dM ™ § ¡À Òç ë€ Z $Ì - 9N MÍ Qæ ‹3 õ³ 3 *ó \ xÍ |æ ® ¾f Æ™ Òç ûÚ ' Z  $Ì (æ 9N =f Qæ fZ ‹3 åZ Sæ X `3'b@Ý'\§ýæÛ+lÈ­§hm ³ - ºZ ³ xÓ ©ú és dSÿý¥æÿýÊÍÿÿlŒÿÿçs(ôMÍïš“t³9S`A£ÍºZß3' ?Z§- 1'A€E™I³MÍVZ^3nvÀzÚ~ô‡'‹@Z£Í§æÌÍÔôÝ'åZ 3€³"Í33;ZG§\'hfxÍ…ÊÁÒçãMë€ûæ'- 9N=fV‹@á@ñ§M+33¶@£Í€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€33™šÌÍ33ffff‹ `ADyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkl7v.tfm0000644000175200017520000000173411171477034017261 0ustar coincoin÷ ´`“¹ TEX MATH EXTENSION UNSPECIFIED€hijklm n oDE./   !"# $ % & '()*+,-01 2 3 4 5 6 789                G(I K(M(O(XYZ[\]^_(( (((((a(@cPdP@fPgP  qrst   0000Sô§æ33SôMná@ ;Z Sô M Ƨ 53 §æ Ƨ n §æ á@ ùÚ Sô53š´3á@Ƨnš- Ÿ´™šçf M ÌÍõÁ ™šffƧZ(ôÌÍ#M%Â/\'šš 0@B1AC246357465726378<:>9=;>8:>9;>?w>xy?8;>9:>BCvtu~wx?y?~wwá@£ÍƧ¬33 ™š™šDyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/omselau.tfm0000644000175200017520000000304011171477034017511 0ustar coincoinˆ!ÿ1@n«’Ï  UNSPECIFIED UNSPECIFIED€)<È« ¬ ›@h›|%L!–lœŒ.•4¸%L ¥ I0 ¬ +L ¥¨+L ¥›,Lœ¥@ ,L%LEL›` –8@H–h|–p„&X•Œ–𠦏–`–¸&–¬d¸x5|-Æ/Æ„-L +L %L ¥%L ¥<%L¬è ,L ¥•œ¥(¥ %L %L %L ,L ,L ˆ%LEL %L&L&L%T,L'P¬è UüU,¥($@–(¥¬*м¥¥œH'¦œ–¸¥|% ¥ +•ˆ#œˆ ,L–,¦€! ¦4¬ ¸œ¸–„ • ° ¥ ¥ ¥ %LU,¥ ¥ /L %L%L %L¬è¬l%T¥ •¥( µ%L,ˆš %L,L ¬ %L¬èIL¥ðLL &¨ 5,´x•œ•<,P•@E4x––¥€ ¬ì ¬ «(¬ ¬( ¬¬ «t¬t ¬ ¬ "¬ 0¬ ¬ì ¬ «(¬ ¬(¥0Õ'P,P,t  D,\ ,L ,L““¤“|‚ÔaÌ“Èr r¼³$³0“ô“Ð£à“”ä¤ÀãøãˆóØãÄãÜã¨ó˜ãÄr¦Sô9NÙ š&æ® ÂE™jsȳÙ åZ ™š Ƨ × - =f Z £Í ¬ &æ ?r ‰3 M ¥Ù ó³ ÷Í t Z ^3 vÀ ~ô ¬ Sô ÎÍ Û9NE™ff‡'étš+53ÿýÛ&÷ÆVÌÇ  Sô ‡ ûæ ‡& ÌÇ € zÙ ó³ p  ÿ÷|óÿ÷ÌÓÿø€ÿù7M3-SóKÀ´47Gí3-OÚ‰3¾t£Íÿþÿþ-ÿþ39ÿþ;fÿþAŒÿþMÙÿþ\3ÿþbYÿþj€ÿþtÀÿþÿþ…'ÿþZÿþ“ÿþ™ ÿþ¡ÌÿþÈÀÿþÌÍÿþÕÿþÝ3ÿþáMÿþåfÿþíšÿþñ³ÿþõÍÿþùæÿþþÿÿ ÿÿ ?ÿÿYÿÿsÿÿ¦ÿÿ"Ùÿÿ33ÿÿ7Mÿÿ;fÿÿG³ÿÿKÍÿÿOçÿÿXÿÿ\3ÿÿhsÿÿlŒÿÿp¦ÿÿtÀÿÿ|óÿÿ‰@ÿÿZÿÿ™šÿÿ¡Íÿÿ²3ÿÿºgÿÿ× ÿÿãYÿÿëŒZ‡'›™¬°á@"ÍDyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkdi8t.tfm0000644000175200017520000001214011171477034017412 0ustar coincoinÿ5<BW™ "EXTENDED TEX FONT ENCODING - LATIN UNSPECIFIED °T°„ Pd \°l °X P l`   . <w4w4‘)‘I< w( w(@‘0@pp yH~(®í '®5;&®43®5<3®4 ™Y= ’ؽ*™.™@‘5>¬ÝB¬| ’\x<HDII9 ¬à™$™0™™$qK™™8y|‰Mf‰N™]O$™ ]PL™h#Tl¹^#™ˆ%Ä ¼™±o$¬q)Ä ¼#™X™|#žT )™8µ˜ ™ÑÀéÂ0¥ã ¨åt¬Ì ¬ “‘yh©<yD©<y@ ®í~]©@ ©I®Œ©8 ©4-y@y@y0~ ~p•y< ™]yHy8)y8y<~Ly(¬È¯¬lU@HÀ]]éhÙh#ÐTÐll#Ɉà"4™ ༠м!ž,#éX à) Ð) é8Ù8ž8е žµ éÐ éÐÀåàtÐtÐt/™° м«<œ™h}h¹D©D,©4©@}@ž\ ù4©4 ©9¹@©@~¹0°” ”¹<©<~<™4 ž\¹H¹H®L¹(©(©(®Œ}$}™ÀÐ]Ð]Ð]À]À]Ð]1„žhÐlÐlÐlÀl м м ÐÈ ÀÔ#T À¼#ÙX#ÙX#ÙX#ÉX#ÉX2™€#©  ÙÐ ÙÐ ÙÐ ÉÐÐåx4™8¹h¹h©h™h©h¹h*y<~D¹@¹@©@©@ ¹T ¹H ©d ©¬©|™@¹0¹0©0™0©0+yLŠx¹H¹H©H©H¾L® ®L$ÚvÀÀ€ÌÍšl¾tZ´3X ©ôMÍŸ´ñ§ C G§ ‘f ™š § çf 9N ‹@ Ý' í + 33 Òç ë€ À $Ú vÀ ÌÍ š M ¾tZ´3ÄšX ©ô÷Í9NÝ'ó³ffÿþÌÍÿÿãYÌÍMÊÁ¸Mß4  Òç zÚ G› CtÿùxÙÿúE¦ÿû³ÿü›¦ÿýTÿþ³ÿþ§óÿÿ¾€I³Ù ?rïš~ó't$Ú1'=fE™MÍV^3ffjsnvÀ~ô‡'Z—Ÿ´§æ¬´3¸MÄšÌÍÔôÝ'åZíñ§õÁýôMf"Í&æKÀSôX dZl‘f™š§¡À©ô²'¾tÊÁÎÍÒçãM 'A€~ô‡'…þÛþÁþ§þþsþYþ?þ>þüþÕþ®þ£þ˜þ‚þwþjþ]þ\þ=þ<þ;þ*þ&þb€e€€A€.€,€€;€-€J€ilf€€€€€€€f€€€€€€)€'€y€€€€€€€€€€€€f€€f€€`½'.€,€€;€b€j€ V€W€X€ €Y€€,-€.€€,€€<€>€`¾y€ w€ v€ Y€ W€ V€T€˜€ Ý€ ”€•€Ý€ ˜€ €s€.€,€A€ À€ Á€ € À Ä€ Å€ Á€ €€ € Ä€ À€ € Å€ €Ã€ .€€,€y€Y€W€V€T€ ˜€Ý€”€ •€ Ý€€˜€.€,€A€À€Á€€ÀĀŀÁ€€€€Ä€À€€Å€€Ã€y€Y€W€V€T€˜€Ý€”€•€Ý€€˜€y€w€u€;€ s€!r€".€#o€i€-€$e€%,€:€ c€a€A€&À€&Á€&€&À&Ä€&Å€&瀀$Á€&€€&€&Ä€&À€&€&Å€&À&¡€ç€¦€%¼€÷€ø€³€!€Y€ .€€,€y€'u€!;€(r€).€*o€i€+-€$e€,€,:€-a€A€À€Á€€ÀĀŀ€$Á€€€€Ä€À€€Å€À¡€¦€¼€+÷€€ø€y€u€.;€/r€0.€1o€i€-€(e€,€2:€3a€A€4À€4Á€4€4À4Ä€4Å€4€(Á€4€€4€4Ä€4À€4€4Å€4À4¡€¦€¼€÷€€ø€v€ u€!;€q€5.€6o€7i€ -€$e€8,€9:€:a€;A€<À€<Á€<€<À<Ä€<Å€<€$Á€<€€<€<Ä€<À€<€<Å€<À<¡€;¦€8¼€ ÷€7ø€7€'€=`b€e€€A€iflf€€€€€€)€'€y€€€€€€€€y€€f€q€.€>o€!n€?m€?-€$h€ g€@f€e€Ad€,€6c€ç€€$瀦€A€€€€€­€?÷€!ø€!€€€€€€a€€?€y€ w€ v€ Y€ W€ V€T€˜€ Ý€ ”€•€Ý€ €˜€ y€ w€ v€ Y€ W€ V€T€˜€ Ý€ ”€•€Ý€ €˜€ y€Y€W€V€T€ ˜€Ý€”€ •€ Ý€€˜€y€Y€W€V€T€ ˜€Ý€y€Y€W€V€T€ ˜€Ý€”€ ”€ •€ •€ ݀݀˜€€˜€y€Y€W€V€T€˜€Ý€”€•€Ý€€˜€y€Y€W€V€T€˜€Ý€”€•€Ý€€˜€y€w€u€;€ s€!r€".€#o€i€-€$e€%,€:€ c€a€A€&À€&Á€&€&À&Ä€&Å€&瀀$Á€&€€&€&Ä€&À€&€&Å€&À&¡€ç€¦€%¼€÷€ø€€³€!y€w€u€;€ s€!r€".€#o€i€-€$e€%,€:€ c€a€A€&À€&Á€&€&À&Ä€&Å€&瀀$Á€&€€&€&Ä€&À€&€&Å€&À&¡€ç€¦€%¼€÷€ø€€³€!v€ u€!;€q€5.€6o€7i€ -€$e€8,€9:€:a€;A€<À€<Á€<€<À<Ä€<Å€<€$Á€<€€<€<Ä€<À€<€<Å€<À<v€ u€!;€q€5.€6o€7i€ -€$e€8,€9:€:a€;A€<À€<Á€<€<À<Ä€<Å€<€$Á€<€€<€<Ä€<À€<€<Å€<À<¡€;¡€;¦€8¦€8¼€ ¼€ ÷€7÷€7ø€7€ø€7€?€ y€ w€ v€ Y€ W€ V€T€˜€ Ý€ y€ w€ v€ Y€ W€ V€T€˜€ Ý€ ”€”€•€•€Ý€ Ý€ ˜€ €˜€ y€ w€ v€ Y€ W€ V€T€˜€ Ý€ y€ w€ v€ Y€ W€ V€T€˜€ Ý€ ”€”€•€•€Ý€ Ý€ ˜€ €˜€ y€ w€ v€ Y€ W€ V€T€˜€ Ý€ y€ w€ v€ Y€ W€ V€T€˜€ Ý€ ”€”€•€•€Ý€ Ý€ ˜€ €˜€ y€ w€ v€ Y€ W€ V€T€˜€ Ý€ y€ w€ v€ Y€ W€ V€T€˜€ Ý€ ”€”€•€•€Ý€ Ý€ ˜€ €˜€ y€ w€ v€ Y€ W€ V€T€˜€ Ý€ y€ w€ v€ Y€ W€ V€T€˜€ Ý€ ”€”€•€•€Ý€ Ý€ ˜€ €˜€ y€ w€ v€ Y€ W€ V€T€˜€ Ý€ y€ w€ v€ Y€ W€ V€T€˜€ Ý€ ”€”€•€•€Ý€ Ý€ ˜€ €˜€ v€ u€!;€q€5.€6o€7i€ -€$e€8,€9:€:a€;A€<À€<Á€<€<À<Ä€<Å€<€$Á€<€€<€<Ä€<À€<€<Å€<À<v€ u€!;€q€5.€6o€7i€ -€$e€8,€9:€:a€;A€<À€<Á€<€<À<Ä€<Å€<€$Á€<€€<€<Ä€<À€<€<Å€<À<¡€;¡€;¦€8¦€8¼€ ¼€ ÷€7÷€7ø€7€ø€7(ôÿÿp¦ÿÿ33ÿþffÌÍ$Ú33ÌÍÿÿšQæffMÍÿÿ™šÿÿtÀÿÿ`Lÿÿ¾€¸MÿþV ÿþr³ýôÿÿï¦ÿÿƲÿÿ¶Mÿÿ…&js ?ÿÿóÁÿÿãYÿÿ÷Ùá@€§æzÚ£ÍÿþMÙÿÿ²3ÿÿÛ&ÿÿXA€ÿÿª ÿþ-~ôÿýÎÙÿÿ‘sÿþé€ÿþ¸YÿþõÍÿýŒÿüÌÍÿþ£ÙÿþÈÀÿÿTÿþ5?ÿÿ\3ÿÿG³ÿþQóÿÿß@ÿÿKÍÿÿ‰@=fÿþš›™ÿÿ¥æÿÿëŒÐål?rKÀ9NKÀ À€ ÒçÔôX õÁG§ Ý'33DyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/omselabu.tfm0000644000175200017520000000310411171477034017654 0ustar coincoin‘!ÿ<>¢^*  UNSPECIFIED UNSPECIFIED€8$$$$Ø$©º™(*`™TEŒ4—@$$št8¥$˜$EŒµhXºJŒµ¸JŒµªJŒªµXJŒ$EŒuL$™d $¥0$$$$$¥*`T—l$3•|$•t$¥,$ª$¥˜$•d•¨3•¬x¨$U„5Å 7Å JŒJŒEŒµEŒµ@EŒºäJŒµ¥ª µµ0*EŒEŒEŒJŒJŒ@ŒEŒuLEŒEŒEŒEŒJŒF”ºäuD%uDµ+$$  ¥9¥2$p è'X$¥¥$)š$9¥"•$&µT0$µ01•Ð6šdMŒ$¥:¥((¥Ý˜˜,•$ ¥ ¤µµµEŒ!e\µµOŒEŒEŒEŒºäºà EŒµ0¥µ µÔ*EJŒšHEŒ*EŒºEŒºä|LµàzL5œ EŒJŒ$•饀 K”•hu@w<$¥$¥$µ,ºÜºº/º.ººP/ºPº4.º8º/º-º;ººÜºº/º.ºÅ#åF” K” K” L”JŒ+JŒ³³ £€’ÐÀ£°’,’¼Ã(óô£Ì³ð£lì¤ãØãHó´ó”ãˆãˆó€ó„dZr¦ÄšSô'9Nš³`AÛß3ë€ À€åZét š ³ KÀ Sô t³ Ƨ Òç =f ff — ¬ ° ¼f Ù åZ t³ M ® ë€ ó³ § MÍ r¦ ñ§ ùÚ ³ "Í / C ¥Ù Òç9Njs‡'´3¸MšdZ9N\'ÿýûótÙ MÍ® Û F ÷Í —‡ çf =m ¾s ?t ´3 ñ§ÿ÷&ôÿ÷ƒÿ÷™ÿúš=m?r•€ó³Äš;`vÀ´4t¸MG§ÿýóÁÿý÷Ùÿþfÿþšÿþ Íÿþ$çÿþ-ÿþ13ÿþ9Yÿþ=sÿþAŒÿþV ÿþ^@ÿþbYÿþffÿþj€ÿþnšÿþr³ÿþvÍÿþzæÿþÿþƒÿþ‹Mÿþgÿþ“ÿþ—šÿþ›¦ÿþŸ¿ÿþ£Ùÿþ§óÿþ¬ ÿþ´@ÿþ¸YÿþÀŽÿþĦÿþÈÀÿþÐæÿþÙÿþÝ3ÿþáMÿþùæÿþþÿÿ ?ÿÿYÿÿ+ ÿÿ33ÿÿG³ÿÿKÍÿÿOçÿÿXÿÿhsÿÿp¦ÿÿtÀÿÿãYÿÿëŒÿÿï¦ÿÿóÁA€V´3ȳDyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkl7y.tfm0000644000175200017520000000255411171477034017265 0ustar coincoin[=,nË(d TEX MATH SYMBOLS UNSPECIFIED€! f sDE 3™,·3™,·3™3™<ÍE R3UD(J(J  3ª3ª"3(@(@5`5`3x3x;g;gð÷,Bï© TEX MATH SYMBOLS UNSPECIFIED€! f sEV 4¬(·4¬(·4¬4¬=ÍVb 4gE K K  4Í4Í!3 @ @/`/`4š4š7g7gðø9g=Í=Í4g7g7h÷ø9h=Í=Í 3€ 3 @ W;Í;ÍÍ4 ÀÀ é)×Ù4À°-¨1À.À%À%3ÀÀ"À1 Ë 6À% À% Ë 2À*À<À0À'À#À$À,ÀÀ À9!&À#À1$:À1&+À(À))!À+(W(`*€@P#À#Àîîîî Û< Û,ÝÝÌîî#îÐÍ85À Èû*€*€4Í4ÍË Ë$ Ë4°%h%x%h%x33bMCOÚ¾t ?t´353jsƒ ȳ M C hf ‘f ™š ¥Ù çf I³ Qæ ff ‡' £Í Ý' åZ ùÚ hf … ™š ²' ãM ? Z E™ I³ ¸M Äš Ý' M + ;Z ‘f ûæ(ôbMjsåZùÚ•€ÊÁ÷ͬÀ€•€&æýôÔóhmMÍÐàSôʺ ?r ¾t bG Ʀ jz × ~ônÿü®ÿýTÿýï ÿþ5?ÿþÆ­ÿÿ¸Y¹n“á@hfÝ'3-7G(ô©ô(ô=fE™QæffzÚZ´3¸MÌÍåZõÁ 3t³ÊÁY€W€V€T€€0€€0€€0€€0€€0€A€€0€€0€€0€€0€€0€ €0€ Y€ W€ V€ T€€0€€0€€0€€0€A€€0€€0€Y€W€V€T€€0€€0€A€€0€€0€A€€0€A€€0€€0€A€€0€€0€ÿÿ™šÿÿtÀÿÿ`Lÿÿ¾€¶@£Í‘f§ƒ / 3ÿÿï¦ÿÿƲÿÿ¶Mÿÿ…& ?ÿÿóÁÿÿãYÿÿ÷ÙÿÿXÿÿ33ÿþÈÀÿÿ‰@Ðå9N ÔôMÍš ùÚ…›™ÎÍŸ´ffó³- ÌÍ&=f(ôDyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/omselao8t.tfm0000644000175200017520000000232411171477034017763 0ustar coincoin5ÿ  @éYl  UNSPECIFIED UNSPECIFIED€ -     p P … P PP … PPU P PP T …P ‰ P… P U TT P P P#“ #“ # -      #,, #C  z Z P ] U“ *( - P Pa ¶$P #£ #7 œ ’ r¦Sô9NšÝ'åZ ® Ƨ ¬ M ™š r¦ "Í /9Nš33\'ÐÚ C — ° ȳ ÐÚ í ùÚ ¾t$Ú(ô- 9NG§ÊÁ°Ù "Íp™xÍ|æ337@x͉3ÂƧÊÁÒçó³DyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkdo8t.tfm0000644000175200017520000001306011171477034017422 0ustar coincoinŒÿ1 ¬GÌ$à"EXTENDED TEX FONT ENCODING - LATIN UNSPECIFIED °T °X°X  D H °\°` L P  <°T  )ff¡I0¡I8) f f0;*0ppp$n "°]> °\°]X-°\,°]Y  IZ ¢H @Éh) H% H¡I[ºa_º` £Hp() f4g ºUi H Aj H H @ P H Ak H Hp,y,€1mV€1n Io& H Ar @  H$ @ @ A$ H& @  @ A“% @ A–) @  A¢% H A£%¬H$ Aµ H AÀ  Aé Aí) A/$ A. A- A,ºU+°TºT£@¡I*p-)°U(p-'°U&p-%°]$Ÿ9#°U"°T¼U!°U °U*p-p-p-|-|- p%p-  =p%p%%p%p%|%p%ºT¿`ºTE0ÐAªA àH ÐH$Ð@Ð@ª@$ÐHÐA# H A Ð@ Ð@!¬H%àH$ÐA $ÐA àHÐt¬HÐA ¬A Ð@ Ð@ÐqÐ@ÐtÐ@+ @ Ð@¸TªH°,z,°,°,(°H°,z,Ï8ðT°H°U°,°,},°, °$ °$°, L|, H ¬<°$°$¬H°$ L°$¼T|,|, HàyàyàyÐmÐqà}. @ ¬HàxàxàxÐp àx àx àx Ðp$ @ Ðl%àx%àx%àx%Ðl%Ðp/ H%Éd àx àx àx Ðpày @0 H°T°X°X D H°`'p,|,°T°X°X H°T°X°X H°\ D°T°X°X D H)p,‡4°T°X°X H¼X¼T©HÌÍšl²'¾tZff´3X ©ôMÍŸ´íñ§ C G§ ™š Ƨ çf 9N ‹@ Ý'  + 33 ?r Òç ë€ ÷Í À vÀ ÌÍ šZ ÀŸ´Ù ¥Ù9N€ÿþÌ̓ ³Ƨ¸M‰4(ó¼f |æ S ºZ ºZZí¡ÀÿøùæÿùÊÍÿû;fÿüé€ÿý\3ÿþ-Ÿ´á@¶@~ô33V‘f•€ïš^3jsnÔôõÁš33KÀOÚX \'lt³‘f¾tÊÁÒç×ãMçfë€ïšó³Z ÀMÍQæ^3ffvÀþhþNþ4þþþæþÌþËþ‡þcþ?þ4þ)þþþûþîþìþåþãþáþàþÚþØþÏþ®þ­þªþ£þžþ›þšþ™þ˜þ–þ‘þþrþoþiþdþ`þWþVþUþ2þ1þb€e€g€w€v€A€J€€T€.€,€€;€-J€€b€ ilf€ € € € € € € f€ € € € € € )€'€€ € € € € € € € €€ €y€ €y€ €`½'.€,€€;€b€g€ j€ y€V€W€€Y€€,-€€o€€]€,€€.€€<€>`¾,€€.€y€w€v€Y€W€V€T€˜€Ý€”€•€Ý€˜€'€€s€.€,€A€À€Á€€ÀĀŀÁ€€€€Ä€À€€Å€À€'€.€,€€u€y€Y€W€V€T€ ˜€Ý€”€ •€ Ý€˜€€'€€'€.€!,€"A€À€Á€€ÀĀŀÁ€€€€Ä€À€€Å€À€'€y€Y€W€#V€$T€ ˜€Ý€”€ •€ Ý€€˜€;€%s€&r€'.€(o€)i€'-€&e€$,€(:€*c€$a€#A€+À€+Á€+€+À+Ä€+Å€+ç€$€&Á€+€€+€+Ä€+À€+€+Å€+À+¡€#ç€$¦€$¼€'÷€)ø€)³€&'€ :€;€b€€h€ '€.€,€€A€y€,u€-;€.r€/.€0o€1i€2-€&e€3,€4:€.a€5A€6À€6Á€6€6À6Ä€6Å€6€&Á€6€€6€6Ä€6À€6€6Å€6À6¡€5¦€3¼€2÷€1ø€1€'€y€,u€-;€.r€/.€0o€7i€2-€&e€1,€4:€.a€8A€9À€9Á€9€9À9Ä€9Å€9€&Á€9€€9€9Ä€9À€9€9Å€9À9¡€8¦€1¼€2÷€7ø€7€'€€'€v€:u€;;€<q€=.€0p€>o€=i€?-€&e€@,€4:€Aa€9A€BÀ€BÁ€B€BÀBÄ€BÅ€B€&Á€B€€B€BÄ€BÀ€B€BÅ€BÀB¡€9¦€@¼€?÷€=ø€=€'€€'€€1€`b€e€g€w€v€A€J€€T€'€c€ p€€t€b€l€r€Ct€€u€e€h€k€o€r€€t€d€-e€D€u€/€d€f€ g€l€m€-r€p€t€x€€ € € € €€ iflf€ € € € € € )€'€€ € € € €€ '€)€?€i€€y€e€€o€ €u€€?€€y€ a€-p€D€u€c€Dd€De€Dg€€v€b€l€m€n€p€r€€u€h€p€€u€D€u€q€.€Eo€n€Fm€F-€&h€>g€f€Fe€&d€&,€c€ç€€&瀦€&€F€F€F€F€F­€F÷€ø€€F€F€F€F€F'€?€€i€e€h€i€-k€o€ p€s€Dt€D€u€?€€u€b€c€De€p€s€€t€€'€?€€'€'€€?€'€?€.€,€m€n€€r€'€€?€y€w€v€Y€W€V€T€˜€Ý€”€•€Ý€€˜€y€w€v€Y€W€V€T€˜€Ý€”€•€Ý€€˜€y€Y€W€V€T€ ˜€Ý€”€ •€ Ý€€˜€y€Y€W€V€T€ ˜€Ý€y€Y€W€V€T€ ˜€Ý€”€ ”€ •€ •€ ݀݀˜€€˜€y€Y€W€#V€$T€ ˜€Ý€”€ •€ Ý€€˜€y€Y€W€#V€$T€ ˜€Ý€”€ •€ Ý€€˜€;€%s€&r€'.€(o€)i€'-€&e€$,€(:€*c€$a€#A€+À€+Á€+€+À+Ä€+Å€+ç€$€&Á€+€€+€+Ä€+À€+€+Å€+À+¡€#ç€$¦€$¼€'÷€)ø€)€³€&;€%s€&r€'.€(o€)i€'-€&e€$,€(:€*c€$a€#A€+À€+Á€+€+À+Ä€+Å€+ç€$€&Á€+€€+€+Ä€+À€+€+Å€+À+¡€#ç€$¦€$¼€'÷€)ø€)€³€&v€:u€;;€<q€=.€0p€>o€=i€?-€&e€@,€4:€Aa€9A€BÀ€BÁ€B€BÀBÄ€BÅ€B€&Á€B€€B€BÄ€BÀ€B€BÅ€BÀBv€:u€;;€<q€=.€0p€>o€=i€?-€&e€@,€4:€Aa€9A€BÀ€BÁ€B€BÀBÄ€BÅ€B€&Á€B€€B€BÄ€BÀ€B€BÅ€BÀB¡€9¡€9¦€@¦€@¼€?¼€?÷€=÷€=ø€=€ø€=€?€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€v€:u€;;€<q€=.€0p€>o€=i€?-€&e€@,€4:€Aa€9A€BÀ€BÁ€B€BÀBÄ€BÅ€B€&Á€B€€B€BÄ€BÀ€B€BÅ€BÀBv€:u€;;€<q€=.€0p€>o€=i€?-€&e€@,€4:€Aa€9A€BÀ€BÁ€B€BÀBÄ€BÅ€B€&Á€B€€B€BÄ€BÀ€B€BÅ€BÀB¡€9¡€9¦€@¦€@¼€?¼€?÷€=÷€=ø€=€ø€=(ôÿÿp¦ÿÿ™šffÿÿ33ÿþÌÍÌÍÿþffff™šQæÿÿšZ£Í33ÿþáMÿÿG³ÿý33ÿÿß@ÿÿãYÿÿ/&ÿÿ²3ÿþíšÿÿ`Lÿýçsÿýï¦ÿÿsI³ÿÿtÀÿÿ\3ÿÿóÁÿý÷ÙÿýóÁÿÿ¡ÍÿÿZZÿÿÛ&jsÿþfÿÿ‘sÿÿX1'ÿÿ× ÿÿhsÿÿƲÿþV ÿþÀŽ9Nÿþ¼sÿþ^@ÿþÕÿþ›¦ÿþĦÿþÙÿÿY^3ÿÿÎÙÿÿxÙÿþõÍÿÿ¥æ ÿþñ³ÿÿ ÿÿÀÿÿ®ÿÿ…&ÿþbYMͧål?rKÀ KÀ ÌÍ Òç¼fïš X í ‹@33DyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/psyro.tfm0000644000175200017520000000301011171477034017215 0ustar coincoin‚ þ47ûo“6  UNSPECIFIED UNSPECIFIED€¨„" ”¨„°˜-™x(˜| h@­„­„v`pT, 5(˜t¨Œ „ Œ¨Œ Œ¨Œ¨Œ¨„¨Œ¨ŒX,\,`LF`L ¨ŒP4# „ „# „ Œ „& „ „# „ „¨# „  Œ/ „#¨„#¨Œ' „$¨Œ „ „ „! „ n@' Œ „+ Œ „¬„.P4¬„ „ÑÈh@¾¨n@¸¨ h@®„ n@mHhDn@`@¸¨n@hDh@h8¨n@h@ h@hD"ˆh h@θ n@δ­„¬„­„5 Œ²¤p¨ˆ"F ­Œ%yT%y\%yP%y\3hH1hHÐÀ1hHؼ £Œt ²¨pxL"F ȬV0W,y\W$F2(ûØ25˜l,˜x ¹¨+¸¤1d'¨„'¨„,¹ '`H'h<"P0"[0"zX"P0"[0"P0"z`' „"¸œ*¨„*¨„0¤„,˰ÙÈ5"0P(P43hH1hHØÄ1hDؼÀ¬ͬ*¨€*¨„)¤„"˰ ïÌ êÌ ïÌ êÌ êÌ êÌêÌêÐêÌêÐͬÛÄ ÚÈ úÔ ÚÈ ïÌ êÌ ïÌ êÌ êÌ êÌêÌêÐê̬33ó³bMr¦CSô$Úff“tš\'® ãMçfVȳåZ 7@ xÍ ¥Ù Ƨ ÊÁ ë€  Qæ ‡' ¬ ùÚ 3 hf M Û ? 53 I³ r¦ “t £Í ¸M + Sô ÎÍ9N=fÊÁ¬ÿü´@—‡°Z^,m¡Ç ?z Qç ÿú •z €xÍáGáGÿñçsÿø§óÿù× ÿûOçÿüƒÿý÷ÚÿþÆ­­¬*úÎÓ¡À&çÌǰÿÿtÀ=fE™¼fÄšÐÚ 3f+337@?rCKÀOÚSôX \'dZhflp™t³xÍ…M® ²'¶@¾tÂƧÊÁÎÍÒç×ß3ãMçfë€ó³÷Íûæ '^3jsnr¦vÀ~ô—°DyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkli7t.tfm0000644000175200017520000000512411171477034017425 0ustar coincoin•ª0:þEçðwµ TEX TEXT UNSPECIFIED°PÐ×а #°D°Là0!°)°´%ÀÝåÝ•Ýp+Ý•,ÝpV˜L T p \ € ` L ©L'VT(Vh xH/h.¦xùX `¦1 ¡!ø"¦$¦<¡%ÚÅ*Ú ¢Œ…#)01Ú2¦83 (¦$–¦Tq4¦P¦@VY[4 [ ¦‰6 ¦0-98¦8\xÕ>¦p"°¼–Ȩ¡B&ÀĦX¥F «HQJ¦<ÙN–Ñ`Ýb*ÝqÍ€á͑ڹ’ ¡q“Úh  X@¡mœV‘¦Ö1ª V]«Öu¬ VQ®Ýå¸]0Ö”–™È<ÖxÖ„'VœVp VIÊ[-Ì[4P¥Í Vê–™ïV V0'V V­ñ] V\ ó- €Є h d¡õÖ}ý$ÚvÀÀ€ÌÍšlff´3©ôMÍŸ´ñ§ C ™š çf 9N ‹@ Z £Í Ý'  + 33 t³ ¶@ Ƨ Òç $Ú vÀ “t ÌÍ M š ¶@ ¾tZff 3X \'® Ý'çfCílÎÍVÝ' ¸M ³ `A ‰3 Ÿ¹ ¶@ 53ÿøzæÿúÕÿû¶Mÿý\3ÿÿ`LI³MÍMÊÁzÚ³¥ÙºZ' ?§ À(ô- 1'53=fMÍV^3ffnvÀzÚ~ô‡'Z—›™§æ°¼fÄšÌÍÔôÝ'åZétõÁýô 3€³"Í33G§Sô\'dZhfp™t³…¡À® Òçïšó³$Ú^3t³ilf€€€ € € € €f€€€ € € €)€'€ € € €€€ € €€€€.€€,€.€€,€lª€LŠ€`<.€,€;€€:€'".€,€;€€:€b€j€V€W€X€€Y€€-{€,€ €o€ €]€ .€ €,€ `>,€€.€Y€ W€V€T€€'€ .€,€A€€'€y€Y€W€€V€.€,€A€€'€Y€W€V€€T€;€s€ r€!.€o€"i€#-€e€$,€%:€c€a€A€&€"€"'€T€'€Y€,€(€.€(y€&u€);€*r€+.€o€,i€--€e€,,€.:€/a€,A€,€,€€,y€&u€+;€0r€.€o€1i€--€e€1,€.:€/a€1A€1€1€€1€'€v€u€2;€3q€4.€p€5o€6i€(-€e€,€.:€/a€%A€7€6€€6€'€8€1€ b€e€9A€ T€T€V€W€Y€€Z€(`\b€e€9A€ T€T€V€W€Y€€Z€(.€,€:€:€r€;€l€<€a€(.€€,€.€a€<f€6g€ x€ €6 €6€6 €6€€6i f l f€€€ € € €)€'€ € €€ €€€.€€,€b€(€p€ €h€(q€&.€=o€)n€>m€>-€h€+g€?f€@e€Ad€@,€Bc€C€@€@ €@ €@ €@€)€) €@ €@€@ €@€@?€;a€<i€;€u€;h€ o€(p€s€€t€(?€€a€<?€D€i€-|€J€y€Y€W€V€y€Y€W€€V€€?€ÿÿ¶M33õÁÌÍÿþffÿÿ33zÚÌÍG§ÿÿ™šÿþ=sÿþáMÿý33ÿÿ ÿþÙÿþĦÿÿï¦ÿþvÍÿþr³ÿÿš=fMÍ À ?ÿþV ÿþQóÿÿ‰@(ô À€ÿÿçsM53³$ÚÿþÀŽÿÿÊÍ\'ÿÿ× ÿÿÛ&ÿÿOçÿÿ²3ÿþåf'ÿþE¦ÿÿtÀÿÿXÿÿYÿÿ…&ÿÿ`LÿþÝ3ÿÿhsÿþÌÍÿþ´@Zÿÿp¦ffQæÿÿ®ÿýß@—ÿÿ÷Ùÿÿß@ÿÿƲÿýºgÿÿãY¸MÐåÌÍá@&æãM&æDyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkli8t.tfm0000644000175200017520000001216411171477034017430 0ustar coincoinÿ4=E†6$ "EXTENDED TEX FONT ENCODING - LATIN UNSPECIFIED H d  L  \  X°| @  P  t  T 8  *V4V, ¡e# ¡,*VV0u000tpphn¿ñ2 ¿L¿d.¿N/¿d ¨)P ¡P É&¨'¨4¡ Q»ÉV» ¢„—*\3](_»`¨0 a ¨ ¨¨H eb¨D¨8hj—dU—e¨f%¨(! %i" 0"¨0# P l Ùt$¨d& ¬ ´¨Ì" ¤ ™†) ¸" È$¨L Ž%¬<! E ¨4 Ýª"¨ÕÑ éÓ- éô! Ñ" í! Ñ »±°»\£¡ah‰¸)hQ¸ihE¿ño(¸Œ¨‘¯4¸l¸|+h”hdh=l%l, `h ¨‘hˆh(+hh©o hP ¼ Ï ¼D0!Ð%!«%"è0"Ø0#ÐPÐl«l$ØdЙ  ™ "ÐÈ"ÐÈ ­x$øL!ÐE !ÐE è4Ø4¬4ÐÝ ¬Ý "èÔ"ØÔÐíÐÐÐÐÐÐ*¨Ìд¹h¬ ¨ˆkˆ¨P¨P(¸¨DkD¯(ø|¸¸q¨d¨dn¸<  œ  œ¨¨l¨¬¸ˆ¨ˆ¯ ¨P¨P¨P¯4ll¨ !à%!à%!Ð%!Ð%!Ð%!à%2 \"¬0àlàlÐlÐlà´à´ÐäÐà# P"ÐÈ$èL$èL$ØL$ØL$ØL1¨l$ÊL"èÔ"èÔ"ØÔ"ØÔàí l3¨4¨ˆ¨ˆ¨ˆ¨ˆ¨ˆ¨ˆ+hHlP¨D¨D¨D¨D¨¨¨À¨¼¸Ä¨d¨<¨<¨<¨<¨<,h\‰<¨ˆ¨ˆ¨ˆ¨ˆ¯ ¼$ª@Ý'$ÚvÀÀ€ÌÍšl¾tZff´3Sô©ôMÍŸ´°ÌÍíñ§ C G§ ™š çf 9N ‡' ‹@ Z Ý'  33 Òç $Ú vÀ ÌÍ š |æ ¾t ?ZffX \'® Ý'r¦ÿþÌÍçfCûæí§ñ¦VÝ' ë€ § 53 À€G¦Ù ÿøzæÿúÕÿû¶Mÿü‡3ÿý\3ÿþE¦ÿÿ`LI³ÊÁzÚ(óhf£ÍºZ'§ À(ô1'53=fE™MÍV^3ffnvÀ~ô‡'Z—›™§æ°¼fÄšÌÍÔôÝ'åZétõÁùÚýô 3€³"Í33G§KÀSô\'dZp™t³…‰3‘f§¡À® Òçïšó³  ?$Ú^3t³þÛþÇþ³þŸþ‹þwþcþbþþúþÖþÌþÂþ²þªþ þ–þ”þ’þþkþjþhþfþVþLþJþIþHþDþ:þ9þ8þþb€e€A€T€T€V€W€Y€€Z€.€,€;€€:€-€J€ilf€ € € € € € € f€ € € € € € )€ '€ € € € € € € € € €€ .€ €,€.€ €,€€`½'.€,€;€€:€b€ j€ V€ W€X€€Y€€,-€€,€€o€€]€.€€,€€<€>`¾,€€.€Y€W€V€T€˜€Ý€”€•€Ý€˜€€'€.€,€A€À€Á€€ÀĀŀÁ€€€€Ä€À€€Å€À€'€y€Y€W€V€˜€Ý€Ý€€˜€.€,€A€À€Á€€ÀĀŀÁ€€€€Ä€À€€Å€À€'€Y€W€V€T€ ˜€Ý€”€ •€ Ý€€˜€;€!s€"r€#.€o€$i€%-€e€&,€':€!c€a€A€(À€(Á€(€(À(Ä€(Å€(瀀Á€(€€(€(Ä€(À€(€(Å€(À(¡€ç€¦€&¼€%÷€$ø€$³€"'€T€)€Y€ ,€€.€y€(u€*;€+r€,.€o€-i€.-€e€-,€/:€0a€-A€-À€-Á€-€-À-Ä€-Å€-€Á€-€€-€-Ä€-À€-€-Å€-À-¡€-¦€-¼€.÷€-€ø€-y€(u€,;€1r€.€o€2i€.-€e€2,€/:€0a€2A€2À€2Á€2€2À2Ä€2Å€2€Á€2€€2€2Ä€2À€2€2Å€2À2¡€2¦€2¼€.÷€2€ø€2€'€v€ u€3;€4q€5.€p€6o€7i€-€e€,€/:€0a€'A€8À€8Á€8€8À8Ä€8Å€8€Á€8€€8€8Ä€8À€8€8Å€8À8¡€'¦€¼€÷€7€ø€7€'€9€1€`b€e€A€T€T€V€W€Y€€Z€.€,€:€:€r€;€l€<€a€.€€,€.€a€<f€7g€x€€7€7€7€7€€7iflf€ € € € € € )€ '€ € € € € €€ .€ €,€b€€p€€h€q€(.€=o€*n€>m€>-€h€,g€?f€@e€Ad€@,€Bc€Cç€C€ç€C¦€A€@€@€@€@€@­€>÷€*ø€*€@€@€@€@€@?€;a€<i€;€u€;h€o€p€s€€t€?€€a€<?€D€i€Y€W€V€T€˜€Ý€”€•€Ý€€˜€Y€W€V€T€˜€Ý€”€•€Ý€€˜€y€Y€W€V€˜€Ý€Ý€€˜€y€Y€W€V€˜€Ý€y€Y€W€V€˜€Ý€Ý€Ý€˜€€˜€Y€W€V€T€ ˜€Ý€”€ •€ Ý€€˜€Y€W€V€T€ ˜€Ý€”€ •€ Ý€€˜€;€!s€"r€#.€o€$i€%-€e€&,€':€!c€a€A€(À€(Á€(€(À(Ä€(Å€(瀀Á€(€€(€(Ä€(À€(€(Å€(À(¡€ç€¦€&¼€%÷€$ø€$€³€";€!s€"r€#.€o€$i€%-€e€&,€':€!c€a€A€(À€(Á€(€(À(Ä€(Å€(瀀Á€(€€(€(Ä€(À€(€(Å€(À(¡€ç€¦€&¼€%÷€$ø€$€³€"v€ u€3;€4q€5.€p€6o€7i€-€e€,€/:€0a€'A€8À€8Á€8€8À8Ä€8Å€8€Á€8€€8€8Ä€8À€8€8Å€8À8v€ u€3;€4q€5.€p€6o€7i€-€e€,€/:€0a€'A€8À€8Á€8€8À8Ä€8Å€8€Á€8€€8€8Ä€8À€8€8Å€8À8¡€'¡€'¦€¦€¼€¼€÷€7÷€7ø€7€ø€7€?€Y€W€V€T€˜€Ý€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€Y€W€V€T€˜€Ý€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€Y€W€V€T€˜€Ý€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€Y€W€V€T€˜€Ý€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€Y€W€V€T€˜€Ý€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€Y€W€V€T€˜€Ý€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€v€ u€3;€4q€5.€p€6o€7i€-€e€,€/:€0a€'A€8À€8Á€8€8À8Ä€8Å€8€Á€8€€8€8Ä€8À€8€8Å€8À8v€ u€3;€4q€5.€p€6o€7i€-€e€,€/:€0a€'A€8À€8Á€8€8À8Ä€8Å€8€Á€8€€8€8Ä€8À€8€8Å€8À8¡€'¡€'¦€¦€¼€¼€÷€7÷€7ø€7€ø€7(ôÿÿp¦ÿÿ™šÿÿš=fÿÿ× ÿþffÿÿ33ÌÍÿÿ¶M33õÁzÚÌÍG§ÿþ=sÿþáMÿý33ÿÿ ÿþÙÿþĦÿÿï¦ÿþvÍÿþr³MÍ À ?ÿþV ÿþQóÿÿ‰@ À€ÿÿçsM53³$ÚÿþÀŽÿÿÊÍ\'ÿÿÛ&ÿÿOçÿÿ²3ÿþåf'ÿþE¦ÿÿtÀÿÿXÿÿYÿÿ…&ÿÿ`LÿþÝ3ÿÿhsÿþÌÍÿþ´@ZffQæÿÿ®ÿýß@—ÿÿ÷Ùÿÿß@ÿÿƲÿýºgÿÿãY¸MÐåÌÍá@&æãM&æ ¸M §§ºZ £Í çf33DyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/omselabo8t.tfm0000644000175200017520000000232011171477034020121 0ustar coincoin4ÿ  ØÄC$  UNSPECIFIED UNSPECIFIED€€€€ € € p P † P PP † PPY P PP U †P ‹ P– P V UT P P P#S#S#€.P€ŒPP  #-- #B  z Z P \YS**P,ŒP Pa § P #ƒ #8 ]‚r¦Sô9NšåZ Ƨ ÊÁ ¬ M r¦ Sô X 1'š`A‘fȳ t ÐÚ ñ§ 3 M f ÊÁt1'9N=fI³MÍ/x͉3ÄšÐÚ?rG§KÀ|æ7@?rt³® ÊÁÒç×÷ÍDyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkdu8r.tfm0000644000175200017520000000322011171477034017423 0ustar coincoin¤ÿ-@þᜊ  UNSPECIFIED UNSPECIFIED€ Á!Î<!Î< üÒ` ° Ê@ ÒP±tF„ð<Ê0ÁP z˜ ÑL´Ôºd ´ä Ý#»4'»T³HÌÜÌt´hzL<¬FÀ:° Ìè»< °» L«»< „» »Lzd|\Š@hdŠ@ºh»( p d»t h € È»  Ð  Ì«Ä À °" Ð Ì»d °¾d D»L Ä«Ø ô( ¸ ¼ ð „ÌÈÀ̤¥ä³,z¬ÊDzŒÊDzŒ Îø~¤ÊH ÊH΄Ê@ Ê<&zŒzˆzx~p~lpÐz„ªtz˜z„"z€zˆ~œzxÌÈÏÌhWt<´Íx<´(:° ¼d ¼ŒÁP,»û y€+»ˆ³@³\ wœFì(Fì±p%¥dÊ<y€$z”àà}tº»È™8 Ä­¼4Á`»£x y|hd»±p ³HpL µ  µœÑt~˜ XWx .Ô ¥£0 y|) X) 4)°T}Hð$ð$ð,à4à0ð$* ”¾tð0ð0ð8à< ðˆ ðˆ ð  ଠhàœû û û(ë0ë,zL˨ûœûœû¤ë¨ðÔ ˆÎTÚ`Ú`ÊdºtÊlÚ\#z„~ŒÚ<Ú<ÊDÊH ÚL ÚD Ê` ʸÊtºPÚ0Ú0Ê4º@Ê8zH›¨ÚDÚDÊLÊPÞHÎ0ÎTë€á@…(ôzÚÌͳp™Âtff‡'¸M 3\'® Qæ£ÍõÁ G§ ™š ë€ =f Z á@ 33 … × (ô zÚ ÌÍ ³ Ât¸M 3\'® Qæ=fá@ÂÿþÌÍÿÿß@ÎÓmÎÓ¼f1 £Í "Í Ä“ E™ × |æ33Ù ÿö¥íÿ÷YÿùtÀÿúCšÿû™ ÿü—“ÿýQìÿþ™ÿþ¥æÿÿß:‘`ñ§çgvÀÿþÿþ @ÿþfÿþšÿþ$çÿþ/&ÿþ5?ÿþ=sÿþG³ÿþMÙÿþXÿþfmÿþp¦ÿþzæÿþ…'ÿþZÿþ•Œÿþ³ÿþ¥æÿþ®ÿþ¶Lÿþ¾€ÿþÌÓÿþ× ÿþß@ÿþçsÿþï§ÿþ÷Ùÿÿÿÿ Lÿÿsÿÿ³ÿÿ$çÿÿ-ÿÿ5@ÿÿ;fÿÿE¦ÿÿKÍÿÿV ÿÿ`Lÿÿjÿÿr³ÿÿƒÿÿ‹Mÿÿ‘sÿÿ¡Íÿÿ¶MÿÿÈÀÿÿÐæÿÿÙÿÿß@ÿÿñ³'t§/MÍZ´3¼f‘fbMDyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/omselau8t.tfm0000644000175200017520000000252411171477034017773 0ustar coincoinUÿ$1‚ù‰  UNSPECIFIED UNSPECIFIED€"D-DÍŒÍ Û$ Í Ý$  P u0 P P8 P@ u P\PlUd PpPPP Tx u P y P…P„ UT U„U€ PXP„Ph"Dâ"Dã4"D­ˆ,Dábmâ â !D!D"D+D.D t#D2D"D%D %D"L,DH š Z8P ]xU`ã|*D*Dâ<-DmP4 Pq, ÷ P "Dâ "DH(ë½ r¦Sô9NšjsÙ åZ Ƨ ¬ M ó³ ÷Í Z Sô9NšÙ Y¼fÝ' r¦ vÀ §æ ¬ ° Ù Ý' åZ ét í M"Í/53=fI³KÀ® (ôét"ÍEšKÀOÚX xÍÿþ€ÿþ-ÿþ13ÿþ9YÿþAŒÿþMÙÿþZ'ÿþr³ÿþvÍÿþ‡3ÿþ‹Mÿþ“ÿþ›¦ÿþŸ¿ÿþ£ÙÿþÌÍÿþÕÿþÝ3ÿþáMÿþåfÿþñ³ÿþõÍÿþùæÿþþÿÿ ÿÿYÿÿsÿÿ"Ùÿÿ33ÿÿ7MÿÿhsÿÿlŒÿÿ|ó‡'›™DyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkdu8t.tfm0000644000175200017520000000764011171477034017437 0ustar coincoinèÿ0 !Cˆœèl "EXTENDED TEX FONT ENCODING - LATIN UNSPECIFIED ÀÀ° °À À°   ° . :vv¡¡: v v@!+@ pp w~$½-#½8"½.½9.½ §: ¢Ì&¨*¨¡;» ?» ¢w:EDF7 º¨ ¨˜¨H¨¨wz‡Jf‡K§L ¨M¨Y¨! ˜d f%¨o­z¨ƒ˜ ¤)¦+Á%ܺ°º“¡øw·w·w ½-ü}· ·½· ·)www}}pw —ww%ww}wº¿ºU@МøèààœØà  ààøà à øè®à ž èèÐààÐ+˜ з«§|Ç·(··|­ ÷· ·Ç·~ÇÀ°Ç·~§ žÇǽǷ·½}|¨àààÐÐà,®àààÐ à à à ÐÐèèèØØ-¨¨èèèØà/¨ÇÇ·§·Ç&w~ÇÇ·· Ç Ç · ··§ÇÇ·§·'w‰ÇÇ··Í½½…(ôzÚÀ€Ìͳp™Ât¸M 3\'® Qæ£ÍõÁ G§ ™š § ë€ =f Z á@ õÁ 33 … × ë€ (ô zÚ ÌÍ ³ … ™š Ât¸MÌÍ\'® =fá@ffÿþÌÍÿÿß@ÎÓýíãM¼fãM ʺ `@ åZ |æ/Ù ‰-ÿùG³ÿúCšÿû ÿüƒÿýhsÿþtÀ^-Ý'Ù+Òç;Y•y 't§- 1'MÍZ´3¼f‘fþþûþðþåþÚþÏþÄþÃþ¨þˆþhþ_þVþMþDþ9þ.þ-þþþ b€e€€A€.€,€€;€-€J€ilf€€€€€€€f€€€€€€)€'€y€€€€€€€€€€€€f€€f€€`½'.€,€€;€b€j€V€W€X€ €Y€€,-€.€€,€€<€>€`¾y€ w€ v€ Y€ W€V€ T€ ”€ •€ Ý€ ˜€ €s€.€,€A€Á€€€€Ä€À€€Å€€Ã€.€€,€y€Y€W€V€T€”€•€Ý€€˜€.€,€A€Á€€€€Ä€À€€Å€€Ã€y€Y€W€V€T€”€•€Ý€€˜€y€w€u€;€s€r€ .€!o€i€-€"e€#,€:€$c€a€A€%€"Á€%€€%€%Ä€%À€%€%Å€%À%¡€ç€¦€#¼€÷€ø€³€€Y€ .€€,€y€&u€;€'r€(.€)o€i€*-€"e€,€+:€,a€A€€"Á€€€€Ä€À€€Å€À¡€¦€¼€*÷€€ø€y€-u€.;€/r€0.€1o€i€2-€'e€,€3:€4a€A€5€'Á€5€€5€5Ä€5À€5€5Å€5À5¡€¦€¼€2÷€€ø€v€$u€;€q€6.€7o€8i€ -€"e€9,€::€;a€<A€=€"Á€=€€=€=Ä€=À€=€=Å€=À=¡€<¦€9¼€ ÷€8ø€8€'€>`b€e€€A€iflf€€€€€€)€'€y€€€€€€€€y€€f€q€.€?o€n€@m€@-€"h€g€Af€e€Bd€,€7c€€"瀦€B€€€€€­€@÷€ø€€€€€€€a€€?€y€ w€ v€ Y€ W€V€ T€ ”€ •€ Ý€ €˜€ y€ w€ v€ Y€ W€V€ T€ ”€ •€ Ý€ €˜€ y€Y€W€V€T€”€•€Ý€€˜€y€Y€W€V€T€”€•€Ý€€˜€y€Y€W€V€T€”€•€Ý€€˜€y€Y€W€V€T€”€•€Ý€€˜€y€w€u€;€s€r€ .€!o€i€-€"e€#,€:€$c€a€A€%€"Á€%€€%€%Ä€%À€%€%Å€%À%¡€ç€¦€#¼€÷€ø€€³€y€w€u€;€s€r€ .€!o€i€-€"e€#,€:€$c€a€A€%€"Á€%€€%€%Ä€%À€%€%Å€%À%¡€ç€¦€#¼€÷€ø€€³€v€$u€;€q€6.€7o€8i€ -€"e€9,€::€;a€<A€=€"Á€=€€=€=Ä€=À€=€=Å€=À=¡€<¦€9¼€ ÷€8€ø€8€?€ y€ w€ v€ Y€ W€V€ T€ ”€ •€ Ý€ €˜€ y€ w€ v€ Y€ W€V€ T€ ”€ •€ Ý€ €˜€ y€ w€ v€ Y€ W€V€ T€ ”€ •€ Ý€ €˜€ y€ w€ v€ Y€ W€V€ T€ ”€ •€ Ý€ €˜€ y€ w€ v€ Y€ W€V€ T€ ”€ •€ Ý€ €˜€ y€ w€ v€ Y€ W€V€ T€ ”€ •€ Ý€ €˜€ v€$u€;€q€6.€7o€8i€ -€"e€9,€::€;a€<A€=€"Á€=€€=€=Ä€=À€=€=Å€=À=¡€<¦€9¼€ ÷€8€ø€8(ôÿÿp¦ÿÿ33ÿþffÌÍ33ÌÍÿÿšQæffQæÿÿ™šÿÿ\3ÿÿºg¸MÿþQóÿþnšýôÿÿëŒÿÿ²3ÿÿ•ÿÿ nZÿÿï¦ÿÿß@ÿÿóÁåZš¬~ôÿÿûó§æÿþIÀÿÿ®ÿÿ× jsÿÿTE™ÿÿ¥æ'ÿþ)ƒ ÿýÎÙÿÿZÿÿ/&ÿþåfÿþ´@ÿþñ³ÿýsÿÿlŒÿüÈÀÿþŸ¿ÿþĦÿÿOçÿþ13ÿÿXÿÿCšÿþMÙÿÿÛ&ÿÿG³ÿÿ…&=fÿþ€Ÿ´ÿÿ¡Íÿÿçs$Óp™CKÀ=fKÀ åZ ¶@MhfM á@33DyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkli7y.tfm0000644000175200017520000000255411171477034017436 0ustar coincoin[:+Z[t TEX MATH SYMBOLS UNSPECIFIED€1 w „UV 0š)¸0š)¸0š0š9ÍV s0fU%[%[  0¬0¬"D%P%P2p2p0‰0‰8x8xðø9x9Í9Í0f8x8x÷ø9x9Í9Í%D%DP h6Í6ÍÍD%ÀÀ% é/Ø!Ù0À°1¨*À'À%À%.À!ÀÀ= Ë 3À- À% Ë -À#À7À+À ÀÀ!À&ÀÀÀ5 À!"À1#5À1%$À'À)(À*)h)p"P`ÀÀ î î î î Í8 ÍÝÝÌîîîÀÍ4,À%Èú""0¬0¬½ »»°@(x(‰(x(‰33bM›™åZCI³X dZ 53Vƒ ȳ 3 f 7@ `A ™š ¥Ù çf $Ú - =f Qæ ‡' ´3 ÌÍ ùÚ € G§ `A hf M •€ ? I³ Qæ bM ~ô ¬ ° ¸M ñ§ + ‘f ¾t ß3´3ÌÍMÊÁ¬£ÍÈ­CG§MÍÐàSôß: zÙ fa ë€ l€ × ~ônÿû¶MÿüÀŽÿý\3ÿýé€ÿþÆ­ÿÿ?ÿÿëŒbG¾t‹@çg7G-(ô(ô=fE™QæffzÚ‡'Z¸MÌÍíõÁ³KÀdZMY€W€V€T€€0€€0€€0€€0€€0€A€€0€€0€€0€€0€ €0€ €0€ Y€ W€ V€€0€€0€€0€€0€A€€0€€0€Y€W€V€T€€0€€0€A€€0€ €0€A€€0€ A€€0€€0€A€€0€€0€ÿÿ ÿþÙÿþĦÿÿï¦;ZI³`A×ÿÿšr¦À€ét À ?ÿÿ‰@(ô ÿÿÊÍÿþåfÿÿYÿþ´@ÐåãM ÔôMÍš ùÚ…›™ÎÍŸ´ffó³- ÌÍ&=f(ôDyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/omselabu8t.tfm0000644000175200017520000000247011171477034020135 0ustar coincoinNÿn,Òš  UNSPECIFIED UNSPECIFIED€1P>PÍlÍÝÍ Ý € ` ”$ ` ` ` ” `8`0f@ `T `bL cD ” ` ž `” `\ d< d`dd `H `` `3P² 2P²(2P­pPŽ` `q ø ` 2P² 2PG4½ ër¦Sô9NšÀ€åZ Sô Ƨ ¬ M r¦ "Í /9Njsšt/dZõÁ ´3 Ôô ïš õÁ + / ?r C G§ 9N"Í3-;ZI³?r•€çfÄš"Í33?rG§Qç|æÿý÷Ùÿþ Íÿþ$çÿþ-ÿþ13ÿþ9Yÿþ=sÿþAŒÿþV ÿþj€ÿþvÍÿþÿþƒÿþgÿþ“ÿþ›¦ÿþ£Ùÿþ§óÿþ¬ ÿþĦÿþÈÀÿþÐæÿþÙÿþþÿÿ ?ÿÿ33ÿÿëŒÿÿóÁDyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbklo8t.tfm0000644000175200017520000001317411171477034017440 0ustar coincoinŸÿ3"¸J åE\ "EXTENDED TEX FONT ENCODING - LATIN UNSPECIFIED  T  T  P D  L  X°d  L P < L  +gg ¡Y3 ¡Y; + g g0?/0ppp $°eG°eX°e[-°e^+°ea ¨Yd ¡Ye LÛl)¨X&©X¡Yf¼ak¼`¢Xx,+ s 4t( ¼]v©X Mw X©X L¹\©X Mz©X©Xx${$ˆ1}Vˆ1~¨Y'©X M‚" L"©Y‘& M“! L M”&©X& L  L©M¦! L Mª* L" M¹&©X Mº'­X! MÍ©X MØ%©M2  M1. M0! M/ M. M-»],°\»\£L¡Y+x%*¸])x%(¸]'x%&°e%Ÿ9$°]# A"¯A!°] °],p%p%x%%%p%x% ¨Ix!p!%p!p!!p!»\¿h»\E 0àM¬M"éX"éX&àL!àL!¬L&éXàM X M "àL"àL#®P&éX!àM !àM éXét­XàM ­M %éL%ùLàyàLàtàL,©L àLº\¬X°$|$°$°$$°X°$|$Ï8ð\ °X°]°$°$(°$°$°$°$¨L}$ X ­H° À ¯L°  L° ¯@}$}$©Xààà}àqàyð…1 L"­X!à€!à€!à|!àx à€ à€ à| àx& L"àp&é€&é€&é|&ép&éx0©X&¹d%é€%é€%é|%éxà L2©X¨T¨T¨P¨D¨L¸d(x$}$¨T¨T¨P¨L T T P L¸d D¨T¨T¨P¨D¨L)x$‰4¨T¨T¨P¨L¯T¿\«XÒç$ÚvÀÀ€ÌÍšl¾tZff´3X ©ôMÍ^3Ÿ´ÌÍñ§ C G§ ™š çf ë€ ? 9N ‹@ Ý' 33 Òç ë€ 53 vÀ ÌÍ š ¾tff´3€X Òç$Ú€ÿþÌÍÛ¸MlZýôétvÀ ?r ¬ tº 7G £Í ãMºZÿøƒÿúÌÍÿû¡Íÿü^@ÿýŒÿýûóÿþ—šÿÿçs‹@¬ïš“t7G™šÔôE™I³MÍÀ€ét 3"ÍCKÀSôX dZhf|æ® ºZ¾tÂÊÁÎÍÒç×ãMë€ïš53=fA€E™I³ffþxþ^þDþ*þþöþÜþÛþ›þyþWþLþAþ+þ þþþþýþúþøþöþîþëþâþÆþÅþÂþ»þ¶þ´þ±þ°þ®þ«þ©þ¡þ•þŠþˆþþ|þsþjþiþhþFþEþ%þþb€e€g€w€v€A€J€€T€.€,€;€€s€-J€ 1€4€6€ 8€0€€b€ilf€ € € € € € f€ € € € € € )€ '€ €h€a€m€€n€e€o€€u€a€m€€n€e€o€€u€€`½€/€'.€,€;€€s€1€b€g€j€y€V€ W€ €Y€ €,-€€o€]€)€€-€.€,€€/€€<€>`¾,€€.€y€w€v€Y€W€V€T€˜€Ý€”€•€Ý€˜€'€€s€.€€M€€.€ .€!,€A€À€Á€€ÀĀŀÁ€€€€Ä€À€€Å€À€'€.€,€e€!€u€y€"Y€#W€V€$T€%˜€#Ý€#”€%•€%Ý€#˜€#'€a€e€€o€€'€.€&,€'A€(À€(Á€(€(À(Ä€(Å€(Á€(€€(€(Ä€(À€(€(Å€(À('€€T€)y€*Y€W€#V€+T€,˜€Ý€”€,•€,Ý€€˜€s€r€-.€.o€/i€0-€1e€#,€2c€3a€4A€À€Á€€ÀĀŀç€3€1Á€€€€Ä€À€€Å€À¡€4ç€3¦€#¼€0÷€/ø€/³€'€5:€;€b€h€I€6T€5€Y€ '€.€€,€y€/u€7r€.€o€i€8-€e€9,€:a€;A€<À€<Á€<€<À<Ä€<Å€<€Á€<€€<€<Ä€<À€<€<Å€<À<¡€;¦€9¼€8÷€ø€€'€ y€/u€7r€.€o€=i€8-€e€;,€:a€<A€>À€>Á€>€>À>Ä€>Å€>€Á€>€€>€>Ä€>À€>€>Å€>À>¡€<¦€;¼€8÷€=ø€=€'€ €'€ v€/u€7q€'.€p€o€?i€7-€e€@,€:a€AA€BÀ€BÁ€B€BÀBÄ€BÅ€B€Á€B€€B€BÄ€BÀ€B€BÅ€BÀB¡€A¦€@¼€7÷€?ø€?'€ €e€€'€€1€C`b€e€g€w€v€A€J€€T€'€b€c€Dd€p€t€u€v€!€w€!b€l€r€t€€u€e€h€i€k€o€r€€t€e€€u€!b€d€f€g€m€Dl€p€r€s€Et€€x€iflf€ € € € € € )€ '€ €h€'€)€ ?€ e€Di€j€ u€€y€e€€o€a€m€€n€e€€u€€?€e€o€€u€i€€u€b€e€g€Do€€u€b€l€m€n€p€r€€u€h€p€€u€€u€q€F.€>o€+n€)m€)-€Gh€g€$f€He€d€,€@c€ç€€G瀦€€H€H€H€H€H­€)÷€+ø€+'€ ?€ €i€e€h€i€k€o€Dp€s€t€€u€?€ a€€u€b€!c€e€g€l€p€s€€t€'€€a€?€ €'€ '€?€ €i€6'€?€ .€,€m€In€I€r€I'€€?€y€w€v€Y€W€V€T€˜€Ý€”€•€Ý€€˜€y€w€v€Y€W€V€T€˜€Ý€”€•€Ý€€˜€y€"Y€#W€V€$T€%˜€#Ý€#”€%•€%Ý€#€˜€#y€"Y€#W€V€$T€%˜€#Ý€#y€"Y€#W€V€$T€%˜€#Ý€#”€%”€%•€%•€%Ý€#Ý€#˜€#€˜€#y€*Y€W€#V€+T€,˜€Ý€”€,•€,Ý€€˜€y€*Y€W€#V€+T€,˜€Ý€”€,•€,Ý€€˜€s€r€-.€.o€/i€0-€1e€#,€2c€3a€4A€À€Á€€ÀĀŀç€3€1Á€€€€Ä€À€€Å€À¡€4ç€3¦€#¼€0÷€/ø€/€³€s€r€-.€.o€/i€0-€1e€#,€2c€3a€4A€À€Á€€ÀĀŀç€3€1Á€€€€Ä€À€€Å€À¡€4ç€3¦€#¼€0÷€/ø€/€³€v€/u€7q€'.€p€o€?i€7-€e€@,€:a€AA€BÀ€BÁ€B€BÀBÄ€BÅ€B€Á€B€€B€BÄ€BÀ€B€BÅ€BÀBv€/u€7q€'.€p€o€?i€7-€e€@,€:a€AA€BÀ€BÁ€B€BÀBÄ€BÅ€B€Á€B€€B€BÄ€BÀ€B€BÅ€BÀB¡€A¡€A¦€@¦€@¼€7¼€7÷€?÷€?ø€?€ø€?€?€ y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€v€/u€7q€'.€p€o€?i€7-€e€@,€:a€AA€BÀ€BÁ€B€BÀBÄ€BÅ€B€Á€B€€B€BÄ€BÀ€B€BÅ€BÀBv€/u€7q€'.€p€o€?i€7-€e€@,€:a€AA€BÀ€BÁ€B€BÀBÄ€BÅ€B€Á€B€€B€BÄ€BÀ€B€BÅ€BÀB¡€A¡€A¦€@¦€@¼€7¼€7÷€?÷€?ø€?€ø€?(ôÿÿp¦ÿÿ™šffÿÿ33ÿþÌÍÌÍÿþffÿÿ…&33r¦33ÌÍZQæÿÿ× ÿýš=fZ(ôÿþáMÿý33~ô ?ÿÿtÀÿÿ`LÿÿÀÿÿ\3ÿÿ®ÿþ¸YÿÿG³?r1'ÿÿóÁnÿÿYÿÿ"ÙÿÿãYzÚí§³—ÿÿ|ó9N§ælÿÿ‘s53A€™šõÁÿÿhsÿÿ²3ÿþÝ3ÿÿxÙÿþé€ÿþõÍÿþíšÿþþÿÿ¦ÿÿŒÿÿ&ôÿÿ+ ÿþ£ÙÿÿšÿÿëŒ Àšƒ £Í§åšM7@ºZ7@ ñ§ ºZƒ Òç /£Í çf33DyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbklu8r.tfm0000644000175200017520000000321011171477034017432 0ustar coincoin¢ÿ+@7L|9  UNSPECIFIED UNSPECIFIED€¢PψÏh üÂx ¤Ëx²L¡ˆ6„à´«`¡`k̲P³h»< ³\  Ü »(!»D³$ÍÀ͵ŒŠ@,À6¤+¼Í»@  °0» 0« »T x»P»DkLlLŠ<X`Š@»ˆ»< < D»@ d € è»t  ¸ ¼«Ð ° ¤" Ä Ì»X ¬¾H X»D ì«ä ð& ð Ø ô ØÍ´ÀÍd¦ ì³lkÄË4kœËpk”ÏøoxËŒ« ¯LËtË€#kÌk°kŒntn| `Ôk\« kÈkx#khkÜodkœ Τß ÎGp,ÀÏ,À(+¼½¼±\)»8ëX˜)»|³t³(xH6à(6à¡p'¦ «$X$k¨àÜnLË»¨™4 Ø® ¾4 ±l»`´˜X|X`»`¡p ´8€@ ¶ ¶²poÈ ÈGx ¶ ´xXh%  %  %°nLððà ààð* p¾@ð@ð@àDàDð„ð„àÈàÄ dà¤û$û$ë(ë,ë(Š@Ü@û¸û¸ë¼ë¼ðØ €¼L»Œ»Œ»«”»»Œ#k˜nœ»L»L»T»T»”»”»È»ÄËÀ«|»H»H»L«P»LŠ@{€»Œ»Œ»»¿$Î0¿(Qæá@33(ôzÚÌͳp™Âó³tff¸M 3\'® Qæ£ÍõÁ G§ ™š ë€ =f Z á@ 33 … × (ô zÚ ÌÍ ³ Âtffá@\'® á@…ÿþÌÍétG­ÿúïšÒíX ß: t³ ¼g À Ÿ³ 7G ´3 Àÿö§óÿ÷?†ÿøxÚÿù¥æÿúÐæÿû²3ÿüƒÿý›­ÿþ“ÿÿ^9tº®;`€¾sÿý÷Ùÿþ ÿþ3ÿþfÿþšÿþ&óÿþ-ÿþ39ÿþG³ÿþTÿþ^@ÿþhsÿþnšÿþvÍÿþ ÿþZÿþ™ ÿþ¥æÿþ®ÿþ¶Lÿþ¼sÿþĦÿþÎÚÿþ× ÿþß@ÿþçsÿþï§ÿþ÷Ùÿÿÿÿ3ÿÿfÿÿŒÿÿÀÿÿ)ÿÿ1-ÿÿ9ZÿÿAÿÿMÚÿÿZ'ÿÿ`LÿÿfmÿÿtÀÿÿ|óÿÿ‰@ÿÿZÿÿ™šÿÿ§óÿÿ´@ÿÿ¼sÿÿĦÿÿÙÿÿãYÿÿûó'g§$Ú(ô1'Z“t‰3 3DyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbklu8t.tfm0000644000175200017520000000777011171477034017453 0ustar coincoinþÿ1 7C0Òˆ "EXTENDED TEX FONT ENCODING - LATIN UNSPECIFIED    °    +VV ¡! ¡*+VV0.-0ppho¾)0¾J¾+¾L,¾¨N ¡Ê$¨%¨¡O¼T¼ ¢‡+Z3[(]¬^¨_ ¨˜¨`¨¨x{‡bU‡c¨d#¨g ¨!p"¨$˜ |' "¨‚#­Ž¨– ˜¶!¸*!Óî%ï ¬ ¬“¡x¨x¨x¾)~¨˜ž¨¨(xxx~~ px˜hx(xx nx ­¿ ­D0Ð è è!ÐÐ"èà  à О"øà Ð èØ­Ð  ø èÐ àÐÐ(˜Ð¨­˜}¨˜&¨˜}žø¨¨¨˜o¸   ¨˜}¨¸¨®¨˜˜ž~~¨ààÐÐÐà/ ­ààÐÐààÐÐ! Ð"è"è"Ø"Ø"Ø.¨"Ê è è Ø Øà0¨¨¨˜˜¨¨(x}¨¨˜¨¨¨˜¨¸˜¨¨˜˜¨)x‰¨¨˜¨®®«á@(ôzÚÀ€Ìͳp™Âtff¸M 3\'® Qæ£Í¸MÌÍõÁ G§ ™š ë€ =f Z “t á@  3 33 … × (ô zÚ ÌÍ ³ … Âtff\'`A²'á@…zÚÿþÌÍét33- ïš—‡ó³¾t ¾t =f ÌÍ OÚ À€X ïšÿøÿúÐæÿû£àÿü°&ÿýlŒÿýï¦ÿÿd`5:ȳp ãSG­és`@Ðà'Zt§$Ú(ô1'Z“t‰3þþþ þþûþóþëþêþÎþ±þ”þŒþ„þ~þxþpþhþfþdþ_þ>þ=þ;þ9þ)þþþþþþ þ þ b€e€A€T€T€V€W€Y€€Z€.€,€;€€:€-€J€ilf€ € € € € € € f€ € € € € € )€ '€ € € € € € € € € €€ .€ €,€.€ €,€€`½'.€,€;€€:€b€ j€ V€ W€X€€Y€€,-€€,€€o€€]€.€€,€€<€>`¾,€€.€Y€W€V€T€”€•€Ý€˜€€'€.€,€A€Á€€€€Ä€À€€Å€À€'€y€Y€W€V€Ý€€˜€.€,€A€Á€€€€Ä€À€€Å€À€'€Y€ W€!V€!T€"”€"•€"Ý€ €˜€ ;€#s€$r€%.€o€&i€'-€e€,€(:€#c€)a€A€*€Á€*€€*€*Ä€*À€*€*Å€*À*¡€ç€)¦€¼€'÷€&ø€&³€$'€T€+€Y€ ,€€.€y€*u€;€,r€-.€o€i€.-€e€,€/:€a€A€€Á€€€€Ä€À€€Å€À¡€¦€¼€.÷€€ø€y€*u€-;€0r€.€o€1i€.-€e€1,€/:€a€1A€1€Á€1€€1€1Ä€1À€1€1Å€1À1¡€1¦€1¼€.÷€1€ø€1€'€v€ u€2;€3q€4.€p€5o€6i€7-€e€,€/:€a€(A€8€Á€8€€8€8Ä€8À€8€8Å€8À8¡€(¦€¼€7÷€6€ø€6€'€9€1€`b€e€A€T€T€V€W€Y€€Z€.€,€:€:€r€€l€-€a€.€€,€.€a€-f€6g€x€€6€6€6€6€€6iflf€ € € € € € )€ '€ € € € € €€ .€ €,€b€€p€€h€q€*.€;o€n€<m€=-€h€-g€>f€?e€d€?,€@c€A€ç€A¦€€?€?€?€?€?­€<÷€ø€€?€?€?€?€??€a€-i€€u€h€o€p€s€€t€?€€a€-?€B€i€Y€W€V€T€”€•€Ý€€˜€Y€W€V€T€”€•€Ý€€˜€y€Y€W€V€Ý€€˜€y€Y€W€V€Ý€€˜€Y€ W€!V€!T€"”€"•€"Ý€ €˜€ Y€ W€!V€!T€"”€"•€"Ý€ €˜€ ;€#s€$r€%.€o€&i€'-€e€,€(:€#c€)a€A€*€Á€*€€*€*Ä€*À€*€*Å€*À*¡€ç€)¦€¼€'÷€&ø€&€³€$;€#s€$r€%.€o€&i€'-€e€,€(:€#c€)a€A€*€Á€*€€*€*Ä€*À€*€*Å€*À*¡€ç€)¦€¼€'÷€&ø€&€³€$v€ u€2;€3q€4.€p€5o€6i€7-€e€,€/:€a€(A€8€Á€8€€8€8Ä€8À€8€8Å€8À8¡€(¦€¼€7÷€6€ø€6€?€Y€W€V€T€”€•€Ý€€˜€Y€W€V€T€”€•€Ý€€˜€Y€W€V€T€”€•€Ý€€˜€Y€W€V€T€”€•€Ý€€˜€Y€W€V€T€”€•€Ý€€˜€Y€W€V€T€”€•€Ý€€˜€v€ u€2;€3q€4.€p€5o€6i€7-€e€,€/:€a€(A€8€Á€8€€8€8Ä€8À€8€8Å€8À8¡€(¦€¼€7÷€6€ø€6(ôÿÿp¦ÿÿ™šÿÿš=fÿÿ× ÿþffÿÿ33ÌÍÿÿ²333õÁzÚÌÍG§ÿþ=sÿþáMÿý33ÿÿ ÿþÕÿþÀŽÿÿëŒÿþr³ÿþnšÿÿ¾€Qæ§$ÚZÿþQóÿþMÙÿÿ…&- ' 3ÄšÿÿãYf9N"Íÿþ¼sA€ÿÿƲ\'ÿÿKÍÿÿ® ?ÿþAŒÿÿTÿÿ ?ÿÿ ÿÿ\3ÿþÙÿÿhsÿþÌÍÿÿÒóÿþ°&ZffÿýÛ&›™—ÿÿóÁÿÿÛ&ÿý¶Mÿÿß@¸M$ÓÌÍá@&æçf&æ åZ xÍ À‰3 À ë€33DyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkd7t.tfm0000644000175200017520000000532411171477034017246 0ustar coincoinµª, [G ʽ TEX TEXT UNSPECIFIEDÀ Ð!åа$À°À&°&Ð#а°°*)°(°+`J°°     ° §"`%`v*+ ÷ P, . ¡/÷%  ¡2¸6¸ ¢`#=¸> ?    @  `gi4i B E N RUV%\ ]©a fz~%ŽžŸ°¸± ¡²¸ °°¡º`ðÇ`̰Ò`Õ°ä‹ô°ù°¹û°ü°þ'`ÿ``i i ` `  ````i` ' °  °ÌÍšl²'¾tZffX ©ôMÍŸ´ñ§ C ™š çf 9N ‹@ À€ Ý'  33 p™ Òç ÷Í vÀ ´3 ÌÍ š X ® ZE™I³CÙ ¥Ù9Nƒ ³¸MƧ- ¼f |æ ÌÍ OÚ Ôô ãM $Ú (ô ¬ÿøùæÿû;fÿüé€ÿþ-Q柴¶@~ôSô•€ïšþZþPþMþKþDþBþ@þ?þ9þ7þ.þþþþþilf€€€ € € € €f€€€ € € €)€'€ € € €€€ € €€€€€y€€y€lª€LŠ€`<.€,€€;€'".€,€€;€b€g€j€y€V€ W€ €Y€ €-{€o€ €]€ ,€ €.€ `>,€ €.€ y€w€v€Y€W€V€T€'€€s€.€,€A€€'€.€,€€u€€e€y€Y€W€V€T€€'€ €'€.€,€ A€ €'€y€Y€W€!V€"€T€;€#s€$r€%.€&o€'i€%-€$e€",€&:€(c€"a€!A€)€'€''€*:€;€b€€h€'€.€,€€A€y€+u€,;€-r€..€/o€0i€1-€$e€2,€3:€-a€4A€5€0€0€'€ y€+u€,;€-r€..€/o€6i€1-€$e€0,€3:€-a€7A€8€6€6€'€ €'€ v€9u€:;€;q€<.€/p€=o€<i€>-€$e€?,€3:€@a€8A€A€<€<€'€ €'€€1€ b€Be€Cg€w€v€A€J€ €T€`\b€Be€Cg€w€v€A€J€ €T€'€c€p€C€t€b€l€r€t€C€u€e€Ch€k€o€r€€t€d€,e€D€u€ /€Cd€f€g€l€m€,r€p€t€x€ € €€ €€€i f l f€€€ € € €)€'€ € €€ €€€'€)€ ?€ i€€y€e€ €o€€u€?€€e€€y€a€,p€D€u€Cc€Dd€De€Dg€C€v€b€l€m€n€p€r€€u€h€Cp€€u€D€u€q€.€Eo€n€Fm€F-€$h€=g€f€Fe€$d€$,€c€€F€F €F €F €F€€ €F €F€F €F€F'€ ?€ €i€Be€h€i€,k€Co€p€s€Dt€D€u€?€€u€b€Cc€De€p€Cs€€t€€'€?€ €'€ '€€?€ '€?€ .€,€m€n€€r€'€€?€-|J€€b€*y€Y€W€V€T€y€Y€W€V€€T€€?€ Qæffÿÿšÿþffÿÿ™šffZ£Í33ÿþáMÿÿG³ÿý33ÿþÌÍÿÿß@ÿÿãYÿÿ/&ÿÿ²3ÿþíšÿÿ`Lÿÿ33ÌÍÿýçsÿýï¦ÿÿsÿÿ®I³ÿÿtÀÿÿ\3ÿÿóÁÿý÷ÙÿýóÁÿÿ¡ÍÿÿZZÿÿÛ&jsÿþfÿÿ‘sÿÿX™š1'ÿÿ× ÿÿhsÿÿƲÿþV ÿþÀŽ9Nÿþ¼sÿþ^@ÿþÕÿþ›¦ÿþĦÿþÙÿÿY^3ÿÿÎÙÿÿxÙÿþõÍÿÿ¥æ ÿþñ³ÿÿ ÿÿÀ(ôÿÿp¦ÿÿ…&ÿþbYMÍl?rKÀ KÀDyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkd8t.tfm0000644000175200017520000001266411171477034017254 0ustar coincoinmÿ1¬GÌ$à"EXTENDED TEX FONT ENCODING - LATIN UNSPECIFIED ° °°    °°    °  )ff¡0¡8) f f0;*0pppn"°> °°X-°,°Y  Z ¢ É) % ¡[º_º £p)f4g ºi  j      k  py€mV€n o&  r   $   $ &    “%  –)   ¢%  £%¬$ µ  À  é í) /$ . - ,º+°º£¡*p)°(p'°&p%°$Ÿ#°"°¼!° °*ppp|| pp  pp%pp|pº¿ºE0Ъ à Ð$ÐЪ$ÐÐ#   Ð Ð!¬%à$Ð $Ð àЬР¬ Ð ÐÐÐÐÐ+  иª°z°°(°°zÏð°°°°}° ° °° |  ¬°°¬° °¼|| àààÐÐà.  ¬àààÐ à à à Ð$  Ð%à%à%à%Ð%Ð/ %É à à à Ðà 0 °°°  °'p|°°° °°° ° °°°  )p‡°°° ¼¼©ÌÍšl²'¾tZff´3X ©ôMÍŸ´íñ§ C G§ ™š Ƨ çf 9N ‹@ Ý'  + 33 ?r Òç ë€ ÷Í À vÀ ÌÍ šZ ÀŸ´Ù ¥Ù9N€ÿþÌ̓ ³Ƨ¸M‰4(ó¼f |æ S ºZ ºZZí¡ÀÿøùæÿùÊÍÿû;fÿüé€ÿý\3ÿþ-Ÿ´á@¶@~ô33V‘f•€ïšþhþNþ4þþþæþÌþËþ‡þcþ?þ4þ)þþþûþîþìþåþãþáþàþÚþØþÏþ®þ­þªþ£þžþ›þšþ™þ˜þ–þ‘þþrþoþiþdþ`þWþVþUþ2þ1þb€e€g€w€v€A€J€€T€.€,€€;€-J€€b€ ilf€ € € € € € € f€ € € € € € )€'€€ € € € € € € € €€ €y€ €y€ €`½'.€,€€;€b€g€ j€ y€V€W€€Y€€,-€€o€€]€,€€.€€<€>`¾,€€.€y€w€v€Y€W€V€T€˜€Ý€”€•€Ý€˜€'€€s€.€,€A€À€Á€€ÀĀŀÁ€€€€Ä€À€€Å€À€'€.€,€€u€y€Y€W€V€T€ ˜€Ý€”€ •€ Ý€˜€€'€€'€.€!,€"A€À€Á€€ÀĀŀÁ€€€€Ä€À€€Å€À€'€y€Y€W€#V€$T€ ˜€Ý€”€ •€ Ý€€˜€;€%s€&r€'.€(o€)i€'-€&e€$,€(:€*c€$a€#A€+À€+Á€+€+À+Ä€+Å€+ç€$€&Á€+€€+€+Ä€+À€+€+Å€+À+¡€#ç€$¦€$¼€'÷€)ø€)³€&'€ :€;€b€€h€ '€.€,€€A€y€,u€-;€.r€/.€0o€1i€2-€&e€3,€4:€.a€5A€6À€6Á€6€6À6Ä€6Å€6€&Á€6€€6€6Ä€6À€6€6Å€6À6¡€5¦€3¼€2÷€1ø€1€'€y€,u€-;€.r€/.€0o€7i€2-€&e€1,€4:€.a€8A€9À€9Á€9€9À9Ä€9Å€9€&Á€9€€9€9Ä€9À€9€9Å€9À9¡€8¦€1¼€2÷€7ø€7€'€€'€v€:u€;;€<q€=.€0p€>o€=i€?-€&e€@,€4:€Aa€9A€BÀ€BÁ€B€BÀBÄ€BÅ€B€&Á€B€€B€BÄ€BÀ€B€BÅ€BÀB¡€9¦€@¼€?÷€=ø€=€'€€'€€1€`b€e€g€w€v€A€J€€T€'€c€ p€€t€b€l€r€Ct€€u€e€h€k€o€r€€t€d€-e€D€u€/€d€f€ g€l€m€-r€p€t€x€€ € € € €€ iflf€ € € € € € )€'€€ € € € €€ '€)€?€i€€y€e€€o€ €u€€?€€y€ a€-p€D€u€c€Dd€De€Dg€€v€b€l€m€n€p€r€€u€h€p€€u€D€u€q€.€Eo€n€Fm€F-€&h€>g€f€Fe€&d€&,€c€ç€€&瀦€&€F€F€F€F€F­€F÷€ø€€F€F€F€F€F'€?€€i€e€h€i€-k€o€ p€s€Dt€D€u€?€€u€b€c€De€p€s€€t€€'€?€€'€'€€?€'€?€.€,€m€n€€r€'€€?€y€w€v€Y€W€V€T€˜€Ý€”€•€Ý€€˜€y€w€v€Y€W€V€T€˜€Ý€”€•€Ý€€˜€y€Y€W€V€T€ ˜€Ý€”€ •€ Ý€€˜€y€Y€W€V€T€ ˜€Ý€y€Y€W€V€T€ ˜€Ý€”€ ”€ •€ •€ ݀݀˜€€˜€y€Y€W€#V€$T€ ˜€Ý€”€ •€ Ý€€˜€y€Y€W€#V€$T€ ˜€Ý€”€ •€ Ý€€˜€;€%s€&r€'.€(o€)i€'-€&e€$,€(:€*c€$a€#A€+À€+Á€+€+À+Ä€+Å€+ç€$€&Á€+€€+€+Ä€+À€+€+Å€+À+¡€#ç€$¦€$¼€'÷€)ø€)€³€&;€%s€&r€'.€(o€)i€'-€&e€$,€(:€*c€$a€#A€+À€+Á€+€+À+Ä€+Å€+ç€$€&Á€+€€+€+Ä€+À€+€+Å€+À+¡€#ç€$¦€$¼€'÷€)ø€)€³€&v€:u€;;€<q€=.€0p€>o€=i€?-€&e€@,€4:€Aa€9A€BÀ€BÁ€B€BÀBÄ€BÅ€B€&Á€B€€B€BÄ€BÀ€B€BÅ€BÀBv€:u€;;€<q€=.€0p€>o€=i€?-€&e€@,€4:€Aa€9A€BÀ€BÁ€B€BÀBÄ€BÅ€B€&Á€B€€B€BÄ€BÀ€B€BÅ€BÀB¡€9¡€9¦€@¦€@¼€?¼€?÷€=÷€=ø€=€ø€=€?€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€v€:u€;;€<q€=.€0p€>o€=i€?-€&e€@,€4:€Aa€9A€BÀ€BÁ€B€BÀBÄ€BÅ€B€&Á€B€€B€BÄ€BÀ€B€BÅ€BÀBv€:u€;;€<q€=.€0p€>o€=i€?-€&e€@,€4:€Aa€9A€BÀ€BÁ€B€BÀBÄ€BÅ€B€&Á€B€€B€BÄ€BÀ€B€BÅ€BÀB¡€9¡€9¦€@¦€@¼€?¼€?÷€=÷€=ø€=€ø€=(ôÿÿp¦ÿÿ™šffÿÿ33ÿþÌÍÌÍÿþffff™šQæÿÿšZ£Í33ÿþáMÿÿG³ÿý33ÿÿß@ÿÿãYÿÿ/&ÿÿ²3ÿþíšÿÿ`Lÿýçsÿýï¦ÿÿsI³ÿÿtÀÿÿ\3ÿÿóÁÿý÷ÙÿýóÁÿÿ¡ÍÿÿZZÿÿÛ&jsÿþfÿÿ‘sÿÿX1'ÿÿ× ÿÿhsÿÿƲÿþV ÿþÀŽ9Nÿþ¼sÿþ^@ÿþÕÿþ›¦ÿþĦÿþÙÿÿY^3ÿÿÎÙÿÿxÙÿþõÍÿÿ¥æ ÿþñ³ÿÿ ÿÿÀÿÿ®ÿÿ…&ÿþbYMÍl?rKÀ KÀ ÌÍ Òç¼fïš X í ‹@33DyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkdi7m.tfm0000644000175200017520000000264011171477034017406 0ustar coincoinhG/-“í—H TEX MATH ITALIC UNSPECIFIED€(°(=À:Æ.À+°$@° ;°:À\?°DÐ<>À!eþnõ@ù!nÕe på!meú!une ue,Ìl9œ9e e!õ9… o z,lF2F2F2F2ddSS@@@IIIIIp¸pS°`4I/e#¦q8Y2Uµ0¦}<™–‘ 6‰ "xB 1… 3¦i ¥:ªA7%-¦-¡'–•°C”1¬*Y à ¹ ¹F!F! °$fQ¶0f9%¶1f5º©jI)¶4¶Eºm(¶,¶YEf5%f5 f!&j-"j# `u$f1% –I&%f='f-(Af-)f1*jM+f%,f<[5IÀœ°¸f¡À¾f ³E™b@ȧ€X€Z(æ1^'ñ™  C @ •s ™ Òç ãM ë€ ÿó Z 9N ~ô ‡ “f ȧ åZ õ³  M "À / C |æ … ™ ¾f € ï  ? Z 9N MÍ b@ ‹3 Ÿ´ §æ ´3 ȧ Ý' åZ  *ó Sæ X \ xÍ ÿóZb@…•s©ôx̓  ƒ dZÒí=m§í § £Ó C ²' ùÓ 1 xÍ Û ÿý¶Mÿþ5?ÿÿZ'9NKÀ¶@~ô3-\'¥Ù¶@ƧZ9N'Z$ÚA€MÍQæZ^3ffr¦~ô‡'Z—Ÿ´´3¼fÄšÐÚÝ'åZñ§õÁ 3M³"ÍCKÀX xÍçfZ À$Ú(ô9NbMZÐÚí³KÀSôdZxÍ€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€33™šÌÍ33ffff‹ ¡ÀDyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/omselao.tfm0000644000175200017520000000272011171477034017507 0ustar coincoint!ÿ= nRºk  UNSPECIFIED UNSPECIFIED€7D&D&ÈhD&œL§TœD&DœD0(—DD&D7—HD!7§TY$­T <§T : T¬T=­T T=&7g,&œD&L!D!—L&DDD&—L&DD—D&DD7D&—D&—LD&›L!D—LD&—D&—D9—D&D&DD@ 6·d8·d&D> < 7§T 7§T 7 T= T T­T T T+007==07g,7 7 &7 0 = 0  T W($W( T,D!D!@!—L4—L4D!DDD&—L—LD5—L —D)§TD-D T:—D3D=&—L;—L%D—LD¬T!DD*L'—D1H§T§P§T 7W("—L§P/ 7 7 7®T®T7 7 TL·\+7 >#œD7+=L7®Tk,—Ln,7 7!=D—D—D> —D g,y4&—L&—LD T T T T2 T0 TªT2ªT T0 T­T.­T/­T<­T T T T2 T0 T#·X(×p 0 ; ; L K= =¤P¤P”L‚<q0”Dƒ8ƒ8Õl´`¤P”L¤P”D–Lätätô|äxätätô|äxr¦À€åZSôÒç9NE™¼fÐÚšKÀ® ¾tE™‹@—§æÝ'åZ xÍ ™š ® Ƨ × ' - I³ Qæ £Í ¬ ¸M Ôô "Í `A M •€ ™š ©ô § r¦ ÌÍ õÁ ùÚ f "Í &æ / ¡À Û çft9N=fš³°SôÿþÌÍX È­ëz C ¸G € ¬ és MÍ ¾t 9S •z +ÿ÷?€ÿ÷|óÿ÷¡Íÿ÷Û&ÿøfÿùs*úG§Â§çés€vÀ¥à£Íÿÿ®³337@;Z?rCOÚx͉3™š¡À©ô²'¾tÂƧÊÁÎÍÒçÛß3ãMçfó³  ?t§1'DyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkd7y.tfm0000644000175200017520000000250011171477034017244 0ustar coincoinP3 ,×G»/ TEX MATH SYMBOLS UNSPECIFIED€!T*ªT*ªT*ª*ª*ª*ª*ª*ª*ª2ÜTb*e*e*Ü*Ü*Ü*Ü*Ü*ÜP*v*˜*˜2˜2˜*˜*˜2323ÜÜ232Ü2Ü*e2323ÜÜ232Ü2Ü*@€2@ ˜ ˜0Ü0ÜÜ3ÐÐP÷+ÀÀ*Ð*Ð&À'À$ÀÀ)ÀÀÀ% É -À À É (À À1À%À ÀÀÀ #À  À À)!À#À%$/À%&"À(À!)À + € € €&À&ÀÐÐ þ þ þ þëë þ þíþþþþÜ.,Ð.ÐÜ, € €*Ü*ÜËËË!°*Ú*Ú*Ú*ÚÛOÚ ?ZbMX p™jsƒ M hf t³ ‘f ™š ÷Í  I³ Qæ ff Ÿ´ £Í åZ … ™š ²' ãM Z E™ ^3 Äš ÌÍ Ý' M ;Z ûæ(ôbMjsåZõÁùÚ•€÷ÍÀ€•€&æýô³ƒ dZÒíE ¼f ?r ¾t ‹@ ÌÍ Eš ƒ çg ~ôÿüé€ÿý\3ÿþ5?ÿÿg'fféthf -~ô?tûæ(ô©ô(ô=fQæffzÚZ¸MÌÍõÁt³§0€Y€W€V€€T€€0€€0€€0€€0€0€€A€€0€€0€€0€ €0€ €0€ 0€Y€ W€ V€€T€€0€€0€€0€0€€A€€0€0€Y€W€V€€T€€0€0€ €A€€0€0€ €A€0€€A€€0€0€€A€€0€¶@ÿÿ/&ÿÿ²3ÿþíšÿÿ`L£Í‘f§ÿÿsƒ / 3ÿÿtÀÿÿ\3ÿÿ33ÿÿóÁÿÿG³ÿÿ¡ÍÿÿZÿÿXÿþ›¦ÿÿYÿÿÀ  ÔôMÍš ùÚ…›™ÎÍŸ´ffó³- ÌÍ&=f(ôDyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/omselabo.tfm0000644000175200017520000000270011171477034017647 0ustar coincoinp!ÿ?ª&Üè  UNSPECIFIED UNSPECIFIED€<€4#€4(ÇX€4#™@•@‰4(€4‰40 4ˆ4€4#Š4<•<€4#5•@HŠ49…4 9€4™@: š@€4:#5u(#‰4#@€4#–@#€4€4€4(–@(€4€4ˆ4(€4€48€4#†4(–@€4(™@#€4–@€4#†4#†4<…4#€4#€4€40 6¶T3¶T(€4: 9 5…4 5…4 5@:€4@š@€4€4.005:: 05u(5 5 #5 0 : 0 @U "U €41€4€4<#–@:–@6€4€4€4€4(–@–@&ˆ49–@'…4,…4€44€4€4;•87Š4:(–@>–@*€4–@€4@€4ˆ4-–@¦D28…4•@•< 5!5•@•@/ 5 5 5@š@ 5 …4@@ ¥L.5 :%Š45+:š@5@}( •@}(5 5 :€4†4†4;†4 u(h$(–@(–@€4€4@@@/@/@™@/™@@/@š@0š@5š@=š@@@@/@/@$Õ\)õd 0 ;;<;: :³P³P£H‚4q,“@‚0‚0Ó\ÃX³P£H³P“@”@ã`ã`ãdãdã`ã`ãdãd…r¦;ZSô ?9NA€ƒ  3šÛë€ ÀQævÀÌÍÝ'åZétõÁ ³ Ƨ ÊÁ MÍ ff vÀ ¬ Ôô õÁ G§ hf xÍ M ‘f ÷Í Z js r¦ ‡' Ÿ´ ¸M ét ùÚ Sô X dZ ¥Ù Ƨ1'E™ff“tšxÍ™š® ´3fÿýûóétzàȳýô ºZ "Í ¾m ÿú =m Ðà À ;` X ÿöõÍÿ÷Sùÿ÷YÿúMÙ(íI³/Fʺ7GxÍ|æ® ¸Míÿÿª&æ7@;Z?rCt³|æ§® ²'ƧÊÁÎÍÒç×Ûß3ãMçfïš÷Í 1'9NDyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkl7t.tfm0000644000175200017520000000554411171477034017262 0ustar coincoinÙª2 vI›m TEX TEXT UNSPECIFIED°Ð"Æ!а!°°À$°,°&àÀÀ(À+-À.*À1PL       À ¨'U(Uw1 0§#Ç `4¥6¡7 ø(¥#§¡;É@É ¢U#HÉI§ J § Ç§ M§§UXZ4Z¥P%§ S §\# ^  _#§#  §c g h)  q#§ r%ª w§ | §‘ ”. ¢ ° ± ÁÈ¡ÃÈ   ¡ËUÔÅÝUâÅéUëÀö‹À›ÀÀ+PPU[ [ P U • UP PP[ P /     À$ÚÀ€ÌÍšlZff´3X ©ôMÍŸ´ñ§ C ™š çf ë€ ? 53 9N ‹@ Ý' í ñ§ 33 Òç À vÀ “t §æ ÌÍ í š 33 ¾tff´3 3€X Òç$ÚÛ¸MZÂ÷ÍvÀ ?r ff ñ§ ‡& ¸M ¾t Ƨ £ÍÿøƒÿúÌÍÿü^@ÿýûóÿÿçs53‹@ïš“t;ZÒç×þuþkþcþaþZþWþUþSþKþHþ?þ(þ'þ$þþþþþþþ þ þilf€€€ € € €f€€€ € € €)€'€€h€a€m€€n€e€o€€u€a€m€€n€e€o€€u€lª€LŠ€`<.€,€;€€s€'".€,€;€€s€1€ b€ g€ j€ y€ V€W€€Y€€-{€o€]€)€ €-€.€,€€/€ `>,€€.€y€w€v€Y€W€V€T€'€ €s€ .€€M€€.€.€,€A€€'€ .€,€e€€u€€e€y€Y€W€V€T€ '€a€!e€ €o€ €'€".€#,€$A€%'€"€T€&y€'Y€"W€V€(€T€)s€ r€*.€+o€,i€--€.e€,€/c€0a€1A€€,€,'€2:€ ;€ b€ h€ I€3T€2€Y€'€ .€ €,€ y€,u€4r€.€o€i€5-€!e€6,€7a€8A€9€€€'€y€,u€4r€.€o€:i€5-€!e€8,€7a€9A€;€:€:€'€€'€v€,u€4q€$.€p€o€<i€4-€!e€=,€7a€>A€?€<€<'€€e€@€'€ €1€Ab€!e€@g€w€"v€"A€ J€€T€ `\b€!e€@g€w€"v€"A€ J€€T€ '€ b€c€Bd€@p€@t€ u€ v€€w€b€ l€r€t€@€u€ e€@h€i€k€ o€r€ €t€e€€u€b€d€f€g€m€Bl€p€r€s€Ct€€x€i f l f€€€ € € €)€'€€h€'€ )€?€e€Bi€"j€Du€€y€ e€€o€a€m€€n€e€€u€?€ €e€e€o€€u€i€€u€b€e€g€Bo€€u€b€ l€m€n€p€r€€u€h€@p€ €u€€u€q€E.€;o€(n€&m€&-€Fh€g€f€Ge€d€,€=c€€G€G €G €G €G€(€('€?€€i€e€h€ i€k€@o€Bp€ s€t€€u€ ?€a€€u€b€c€e€g€l€p€@s€€t€'€ €a€!?€€'€'€ ?€€i€3'€ ?€.€,€m€Hn€H€r€H'€ €?€ -|J€D1€4€ 6€8€ 0€ €b€"y€Y€W€V€T€ y€Y€W€V€€T€ €?€r¦33ÌÍZQæÿÿ× ÿþffÿÿ™šÿÿ…&ÿÿ33=fZ(ôÌÍ33ÿþáMÿþÌÍÿý33~ô ?ÿÿtÀÿÿ`LÿÿÀÿÿ\3ÿÿ®ÿþ¸YÿÿG³?r1'ÿÿóÁn(ôffÿÿYÿÿ"ÙÿÿãYzÚí§³—ÿÿ|ó9N§ælÿÿ‘s53A€™šõÁÿÿhsÿÿ²3ÿþÝ3ÿÿxÙÿþé€ÿþõÍÿþíšÿþþÿÿ¦ÿÿŒÿÿ&ôÿÿ+ ÿÿp¦ÿþ£ÙÿÿšÿÿëŒ Àšƒ £ÍšM7@ºZ7@DyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkl8t.tfm0000644000175200017520000001277011171477034017262 0ustar coincoin~ÿ3¸J åE\ "EXTENDED TEX FONT ENCODING - LATIN UNSPECIFIED           °       +gg ¡3 ¡; + g g0?/0ppp°G°X°[-°^+°a ¨d ¡e Û)¨&©¡f¼k¼¢x+s 4t(¼v© w © ¹© z©©x{ˆ}Vˆ~¨'© ‚" "©‘& “!  ”&©&   ©¦!  ª* " ¹&© º'­! Í© Ø%©2  1. 0! / . -»,°»£¡+x*¸)x(¸'x&°%Ÿ$°# "¯!° °,ppxpx ¨xp%ppp»¿»E 0à¬"é"é&à!à!¬&éà   "à"à#®&é!à !à éé­à ­ %é%ùàààà,© ຬ°|°°$°°|Ïð °°°°°°°°¨}  ­°À¯° °¯}}©àààààð1 "­!à!à!à!à à à à à& "à&é&é&é&é&é0©&¹%é%é%é%éà 2©¨¨¨¨¨¸(x}¨¨¨¨    ¸ ¨¨¨¨¨)x‰¨¨¨¨¯¿«Òç$ÚvÀÀ€ÌÍšl¾tZff´3X ©ôMÍ^3Ÿ´ÌÍñ§ C G§ ™š çf ë€ ? 9N ‹@ Ý' 33 Òç ë€ 53 vÀ ÌÍ š ¾tff´3€X Òç$Ú€ÿþÌÍÛ¸MlZýôétvÀ ?r ¬ tº 7G £Í ãMºZÿøƒÿúÌÍÿû¡Íÿü^@ÿýŒÿýûóÿþ—šÿÿçs‹@¬ïš“t7G™šÔôþxþ^þDþ*þþöþÜþÛþ›þyþWþLþAþ+þ þþþþýþúþøþöþîþëþâþÆþÅþÂþ»þ¶þ´þ±þ°þ®þ«þ©þ¡þ•þŠþˆþþ|þsþjþiþhþFþEþ%þþb€e€g€w€v€A€J€€T€.€,€;€€s€-J€ 1€4€6€ 8€0€€b€ilf€ € € € € € f€ € € € € € )€ '€ €h€a€m€€n€e€o€€u€a€m€€n€e€o€€u€€`½€/€'.€,€;€€s€1€b€g€j€y€V€ W€ €Y€ €,-€€o€]€)€€-€.€,€€/€€<€>`¾,€€.€y€w€v€Y€W€V€T€˜€Ý€”€•€Ý€˜€'€€s€.€€M€€.€ .€!,€A€À€Á€€ÀĀŀÁ€€€€Ä€À€€Å€À€'€.€,€e€!€u€y€"Y€#W€V€$T€%˜€#Ý€#”€%•€%Ý€#˜€#'€a€e€€o€€'€.€&,€'A€(À€(Á€(€(À(Ä€(Å€(Á€(€€(€(Ä€(À€(€(Å€(À('€€T€)y€*Y€W€#V€+T€,˜€Ý€”€,•€,Ý€€˜€s€r€-.€.o€/i€0-€1e€#,€2c€3a€4A€À€Á€€ÀĀŀç€3€1Á€€€€Ä€À€€Å€À¡€4ç€3¦€#¼€0÷€/ø€/³€'€5:€;€b€h€I€6T€5€Y€ '€.€€,€y€/u€7r€.€o€i€8-€e€9,€:a€;A€<À€<Á€<€<À<Ä€<Å€<€Á€<€€<€<Ä€<À€<€<Å€<À<¡€;¦€9¼€8÷€ø€€'€ y€/u€7r€.€o€=i€8-€e€;,€:a€<A€>À€>Á€>€>À>Ä€>Å€>€Á€>€€>€>Ä€>À€>€>Å€>À>¡€<¦€;¼€8÷€=ø€=€'€ €'€ v€/u€7q€'.€p€o€?i€7-€e€@,€:a€AA€BÀ€BÁ€B€BÀBÄ€BÅ€B€Á€B€€B€BÄ€BÀ€B€BÅ€BÀB¡€A¦€@¼€7÷€?ø€?'€ €e€€'€€1€C`b€e€g€w€v€A€J€€T€'€b€c€Dd€p€t€u€v€!€w€!b€l€r€t€€u€e€h€i€k€o€r€€t€e€€u€!b€d€f€g€m€Dl€p€r€s€Et€€x€iflf€ € € € € € )€ '€ €h€'€)€ ?€ e€Di€j€ u€€y€e€€o€a€m€€n€e€€u€€?€e€o€€u€i€€u€b€e€g€Do€€u€b€l€m€n€p€r€€u€h€p€€u€€u€q€F.€>o€+n€)m€)-€Gh€g€$f€He€d€,€@c€ç€€G瀦€€H€H€H€H€H­€)÷€+ø€+'€ ?€ €i€e€h€i€k€o€Dp€s€t€€u€?€ a€€u€b€!c€e€g€l€p€s€€t€'€€a€?€ €'€ '€?€ €i€6'€?€ .€,€m€In€I€r€I'€€?€y€w€v€Y€W€V€T€˜€Ý€”€•€Ý€€˜€y€w€v€Y€W€V€T€˜€Ý€”€•€Ý€€˜€y€"Y€#W€V€$T€%˜€#Ý€#”€%•€%Ý€#€˜€#y€"Y€#W€V€$T€%˜€#Ý€#y€"Y€#W€V€$T€%˜€#Ý€#”€%”€%•€%•€%Ý€#Ý€#˜€#€˜€#y€*Y€W€#V€+T€,˜€Ý€”€,•€,Ý€€˜€y€*Y€W€#V€+T€,˜€Ý€”€,•€,Ý€€˜€s€r€-.€.o€/i€0-€1e€#,€2c€3a€4A€À€Á€€ÀĀŀç€3€1Á€€€€Ä€À€€Å€À¡€4ç€3¦€#¼€0÷€/ø€/€³€s€r€-.€.o€/i€0-€1e€#,€2c€3a€4A€À€Á€€ÀĀŀç€3€1Á€€€€Ä€À€€Å€À¡€4ç€3¦€#¼€0÷€/ø€/€³€v€/u€7q€'.€p€o€?i€7-€e€@,€:a€AA€BÀ€BÁ€B€BÀBÄ€BÅ€B€Á€B€€B€BÄ€BÀ€B€BÅ€BÀBv€/u€7q€'.€p€o€?i€7-€e€@,€:a€AA€BÀ€BÁ€B€BÀBÄ€BÅ€B€Á€B€€B€BÄ€BÀ€B€BÅ€BÀB¡€A¡€A¦€@¦€@¼€7¼€7÷€?÷€?ø€?€ø€?€?€ y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€y€w€v€Y€W€V€T€˜€Ý€y€w€v€Y€W€V€T€˜€Ý€”€”€•€•€Ý€Ý€˜€€˜€v€/u€7q€'.€p€o€?i€7-€e€@,€:a€AA€BÀ€BÁ€B€BÀBÄ€BÅ€B€Á€B€€B€BÄ€BÀ€B€BÅ€BÀBv€/u€7q€'.€p€o€?i€7-€e€@,€:a€AA€BÀ€BÁ€B€BÀBÄ€BÅ€B€Á€B€€B€BÄ€BÀ€B€BÅ€BÀB¡€A¡€A¦€@¦€@¼€7¼€7÷€?÷€?ø€?€ø€?(ôÿÿp¦ÿÿ™šffÿÿ33ÿþÌÍÌÍÿþffÿÿ…&33r¦33ÌÍZQæÿÿ× ÿýš=fZ(ôÿþáMÿý33~ô ?ÿÿtÀÿÿ`LÿÿÀÿÿ\3ÿÿ®ÿþ¸YÿÿG³?r1'ÿÿóÁnÿÿYÿÿ"ÙÿÿãYzÚí§³—ÿÿ|ó9N§ælÿÿ‘s53A€™šõÁÿÿhsÿÿ²3ÿþÝ3ÿÿxÙÿþé€ÿþõÍÿþíšÿþþÿÿ¦ÿÿŒÿÿ&ôÿÿ+ ÿþ£ÙÿÿšÿÿëŒ Àšƒ £ÍšM7@ºZ7@ ñ§ ºZƒ Òç /£Í çf33DyLP-1.10.4/DyLP/doc/TexMF/fonts/tfm/pbkdi7t.tfm0000644000175200017520000000461011171477034017414 0ustar coincoinbª0 9ÐBÈ4Ö¡ TEX TEXT UNSPECIFIED°4Ð×а,%°(°À|"°)àL À$»á#»9!»8/»9/»8vL\ðXðˆ °T  p  dð\»P'v@(vPˆ|-ˆ.¦„¶¤ `¦] ¡M ú'¦ +¦D¡9#¹Ñ'¹€ ¢`u)3M-&¹Ô¦( ¦0–¦(u.¦ ¦<vyz(Dz¦a0¦a1P¦lXp½9¦ŒÄÀ–µ<°¡>&ÄÀ¦\C«X-F¦<¹K–Í^Ý`,©o¬Ù~x¹È ¡-޹¤ °T°¡‘vl¶@vH¶@vD»á•{a¦¶D¶M§»¶<¶8*vDvDv0{${ p™¨v@ –aÂvLv<&v<v@{Pv, 0•Ã,0”ðp  h °`Ŷ=Ï$ÚvÀÀ€šl¾tZ´3X ©ôMÍŸ´ñ§ ™š çf 9N ‹@ Ý' 33 p™ ºZ Òç $Ú vÀ ´3 ÌÍ Ù  3 š &æ M ® ¾tZ´3CX ©ô9NÝ'ó³ÿÿãYÌÍM¸MÊÁ- ³ À€ C ʺ ãM & $Ú zÚÿùxÙÿúE¦ÿü›¦ÿþ³ÿÿ¾€I³MÍÙ ïšÔôX ¥Ù'Zt$Ú1'=fE™MÍV^3ffnr¦vÀ~ô‡'Z—Ÿ´§æ¬´3¸MÄšÌÍÔôÝ'åZíñ§õÁýôMf"Í&æKÀSôX dZl‘f™š§¡À©ô¾tÎÍÒç'A€~ô‡'…ilf€€€ € € € €f€€€ € € €)€'€y€ € € €€€ € €€€€€f€€f€lª€LŠ€`<.€,€€;€'".€,€€;€b€j€V€W€X€€Y€€-{.€€,€€`>y€ w€ v€ Y€ W€ V€ T€ €s€.€,€€A€ .€€,€y€Y€W€V€€T€ .€,€€A€y€Y€W€V€€T€y€w€u€;€s€ r€!.€"o€i€-€#e€$,€:€c€a€A€%€€€Y€.€€,€y€&u€ ;€'r€(.€)o€i€*-€#e€,€+:€,a€A€€€€y€u€-;€.r€/.€0o€i€1-€'e€,€2:€3a€A€4€€€v€u€ ;€q€5.€6o€7i€ -€#e€8,€9:€:a€;A€<€7€7€'€=b€e€1€A€`\b€e€1€A€i f l f€€€ € € €)€'€y€ € €€ €€€€y€€f€q€.€>o€ n€?m€?-€#h€ g€@f€e€Ad€,€6c€€€ € € €€ € € €€ €€€a€€?€-|€J€y€Y€W€V€T€ y€Y€W€V€€T€ €?€$Ú33ÌÍ(ôÿÿšÿþffÌÍQæffMÍÿÿ™šÿÿtÀÿÿ`Lÿÿ¾€¸MÿþV ÿþr³ÿÿ33ýôÿÿï¦ÿÿƲÿÿ¶Mÿÿ…&js ?ÿÿóÁÿÿãYÿÿ÷Ùá@€§æzÚ£ÍÿþMÙÿÿ²3ÿÿÛ&ÿÿXA€ÿÿª ÿþ-~ôÿýÎÙÿÿ‘sÿþé€ÿþ¸YÿþõÍÿýŒÿÿp¦ÿüÌÍÿþ£ÙÿþÈÀÿÿTÿþ5?ÿÿ\3ÿÿG³ÿþQóÿÿß@ÿÿKÍÿÿ‰@=fÿþš›™ÿÿ¥æÿÿëŒÐål?rKÀ9NKÀDyLP-1.10.4/DyLP/doc/dual.tex0000644000175200017520000005436111171477034014115 0ustar coincoin\section{Dual Simplex} \dylp will choose dual simplex whenever the current basic solution is dual feasible but not primal feasible. The primary role of dual simplex in \dylp is reoptimisation following the addition of violated constraints. The implementation reflects this role and does not provide a dual phase~I for achieving dual feasibility. The dual simplex implementation incorporates dual steepest edge (DSE) pricing (\secref{sec:DSEPricing}), standard (\secref{sec:DualStdSelectInVar}) and generalised (\secref{sec:DualGenSelectInVar}) pivoting, and perturbation-based (\secref{sec:PerturbedAntiDegeneracy}) and alignment-based (\secref{sec:AntiDegenLite}) antidegeneracy algorithms. Because the dual simplex implementation does not provide a phase~I, a number of exceptional conditions will cause \dylp fall back from dual simplex to primal simplex. In dynamic simplex, apparent primal infeasibility can result because only a subset of the variables are present in the active constraint system. In some cases, the variables needed to regain feasibility cannot be activated into the nonbasic partition while maintaining dual feasibility. In the context of the dual problem, the problem is unbounded and any dual constraint which would bound it would also make the current basic solution dual infeasible. \dylp implements a variable activation procedure which can pivot a single variable into the basis as it is activated in order to maintain dual feasibilty. It is still possible, however, to reach a basic solution where multiple pivots are required to regain dual feasibility for any candidate variable. When this occurs, \dylp reverts to primal simplex. If primal infeasible variables remain but they cannot be pivoted because their pivot coefficients do not satisfy the current pivot selection tolerances, \pgmid{dy_dual} will punt and \dylp will return to phase~I of the primal simplex algorithm in the hope that addition of variables and/or the application of primal pivoting rules will allow pivoting to continue. In addition, if the dual simplex terminates due to stalling or loss of feasibility, \dylp will try the primal simplex algorithm before giving up. Figure \ref{fig:DualCallGraph} shows the call structure of the dual simplex implementation. \begin{figure}[htb] \centering \includegraphics{\figures/dualcalls} \caption{Call Graph for Dual Simplex} \label{fig:DualCallGraph} \end{figure} \subsection{Dual Top Level} Dual simplex is executed when the dynamic simplex state machine enters state \pgmid{dyDUAL}. If required, DSE pricing is initialised by calculating the square of the norms of the rows of the basis inverse (\vid \secref{sec:DSEPricing}) and the dual simplex routine \pgmid{dy_dual} is called. \pgmid{dy_dual} is a trivial shell which calculates the objective (\pgmid{dy_calcobj}) and calls the dual phase~II routine \pgmid{dual2} to do the optimisation. \subsection{Dual Phase II} The overall flow of phase~II of the dual algorithm is shown in Figure \ref{fig:DualPhaseIIFlow}. \begin{figure}[htbp] \begin{center} \scalebox{.9}{\includegraphics{\figures/dual2flow}} \end{center} \caption{Dual Phase II Algorithm Flow} \label{fig:DualPhaseIIFlow} \end{figure} The body of the routine is structured as two nested loops. The outer loop handles startup and termination, and the inner loop handles the majority of routine pivots. On entry to \pgmid{dual2}, the outer loop is entered and \pgmid{dy_dualout} is called to select the initial leaving variable. Then the inner loop is entered and \pgmid{dy_dualpivot} is called to perform the pivot. \pgmid{dy_dualpivot} (\vid \secref{sec:DualPivoting}) will calculate the coefficients of the pivot row (\pgmid{dualpivrow}), select an entering variable (\pgmid{dualin}), pivot the basis (\pgmid{dy_pivot}), update the primal and dual variables (\pgmid{dualupdate}), and update the DSE pricing information and reduced costs (\pgmid{dseupdate}). For a routine pivot, \pgmid{dseupdate} will also select a leaving variable for the next pivot. \pgmid{dy_duenna} evaluates the outcome of the pivot, handles error detection and recovery where possible, and performs the routine maintenance activities of accuracy checks and refactoring of the basis. If there are no problems, the pivoting loop iterates, using the leaving variable selected in \pgmid{dseupdate}. The loop continues until optimality is reached, the problem is determined to be primal infeasible (dual unbounded), or an exception or fatal error occurs. One common reason for a failure to select a leaving variable for the next pivot is that the current pivot was aborted due to numerical problems (an unsuitable pivot coefficient being the most common of these). In this case, \pgmid{dseupdate} never executes. Once \pgmid{dy_duenna} has taken the necessary corrective action, the flow of control escapes to the outer loop and calls \pgmid{dy_dualout} to select a new leaving variable. Another common reason for failure to select a leaving variable is that all candidates were previously flagged as unsuitable pivots. In this case, \pgmid{dy_dualout} will indicate a `punt' and \pgmid{dy_dealWithPunt} will be called to reevaluate the flagged variables. If it is able to make new candidates available, control returns to \pgmid{dy_dualout} for another attempt to find a leaving variable. If all flagged variables remain unsuitable, control flow moves to the preoptimality actions with an indication that dual simplex has punted. When \pgmid{dy_dualout} indicates optimality (primal feasibility) or \pgmid{dy_dualpivot} indicates optimality, dual unboundedness (primal infeasibility), or loss of dual feasibility, the inner loop ends and \pgmid{preoptimality} is called for confirmation. \pgmid{preoptimality} will refactor the basis, check for accuracy, recompute the primal and dual variables, and confirm dual and primal feasibility status. If there are no surprises, dual phase~II terminates with an indication of optimality, dual unboundedness, or loss of dual feasibility. Loss of dual feasibility stems from loss of numeric accuracy, but it cannot be corrected within dual phase~II. The error recovery actions taken by the dynamic simplex algorithm are described in \secref{sec:ErrorRecovery}. Loss of primal feasibility can occur for two distinct reasons. In the less common case, loss of primal feasibility stems from loss of numeric accuracy. The pivot selection rules are tightened and dual simplex iterations are resumed. When the number of false indications of optimality exceeds a hard-coded limit (currently 15), dual simplex terminates with a fatal error. The more common reason for apparent loss of primal feasibility at the termination of dual simplex is that it is ending with a punt, as described above. The variables flagged as unsuitable for pivoting are not primal feasible, and when the flags are removed to perform the preoptimality checks, primal feasibility is revealed as an illusion. No further action is possible within dual simplex; the reader is again referred to \secref{sec:ErrorRecovery}. Other errors (\eg, stalling, accuracy checks, \etc) not shown in Figure~\ref{fig:DualPhaseIIFlow} can occur and result in termination of the dual simplex algorithm with the appropriate error indication. \subsection{Pivoting} \label{sec:DualPivoting} \dylp offers two flavours of dual pivoting: A standard dual pivot algorithm in which a single primal variable is selected and pivoted into the basis, and a generalised dual pivot algorithm \cite[\S10.2]{Mar03} in which multiple primal variables may undergo bound-to-bound flips prior to the basis pivot. The choice of standard or generalised dual pivoting can be controlled with an option; \dylp will use generalised pivoting by default. Figure~\ref{fig:DualPivotCallGraph} shows the call structure of the dual pivot algorithm. The routine \pgmid{dualin} implements standard dual pivoting; \pgmid{dualmultin} implements generalised dual pivoting. \begin{figure}[htb] \centering \includegraphics{\figures/dualpivcalls} \caption{Call Graph for Dual Pivoting} \label{fig:DualPivotCallGraph} \end{figure} The first activity in \pgmid{dy_dualpivot} is the calculation of the coefficients of the pivot row, $\overline{a}_{i} = \beta_i N$, by the routine \pgmid{dualpivrow}. With the leaving primal variable and the basis inverse row in hand, one of \pgmid{dy_dualin} or \pgmid{dualmultiin} are called to select the entering variable. (If generalised dual pivoting is in use, \pgmid{dualmultiin} will perform any bound-to-bound flips before returning.) Once the entering and leaving variables have been chosen, the actual pivot is performed in several steps. Prior to the pivot, the vector $\tau = B^{\,-1}\beta^T_k$ is calculated for use during the update of the DSE pricing information. The basis is pivoted next; this involves calls to \pgmid{dy_ftran} and \pgmid{dy_pivot}, as outlined in \secref{sec:BasisPivoting}. If the basis change succeeds, the primal and dual variables are updated by \pgmid{dualupdate} using the iterative update formul\ae{} of \secref{sec:UpdatingFormulas}, and then the DSE pricing information and reduced costs are updated by \pgmid{dseupdate}, using the update formul\ae{} of \secref{sec:DSEPricing}. As a side effect, \pgmid{dseupdate} will select a leaving variable for the next pivot. \subsection{Selection of the Leaving Variable} The selection of the leaving primal variable $x_i$ (entering dual variable $y_i$) is made using the dual steepest edge criterion described in \secref{sec:DSEPricing}. As outlined above, the normal case is that the leaving variable for the following pivot will be selected as \pgmid{dseupdate} updates the DSE pricing information for the current pivot. In various exceptional circumstances where this does not occur, the routine \pgmid{dy_dualout} is called to make the selection. \subsection{Standard Dual Pivot} \label{sec:DualStdSelectInVar} For the standard dual pivot algorithm, the selection of the entering primal variable (leaving dual variable) is made using the usual dual pivoting rules and a set of tie-breaking strategies. Let $x_i$ be the leaving primal variable, for simplicity of exposition occupying basis position $i$. $\beta_{i}$ is obtained by calling \pgmid{dy_btran} to calculate $e_{i}B^{\,-1}$, where $e_{i}$ is the unit row vector with $1$ in position~${i}$. The pivot coefficient for a variable $x_k$ is $\overline{a}_{ik} = \beta_i a_k$. Let $y_i$ be the dual variable associated with the constraint in basis position $i$ and let $y_k$ be the dual variable associated with the tight bound constraint for the nonbasic primal variable $x_k$. Abstractly, we need to check $y_k = \overline{c}_k + \overline{a}_{ik}\delta_{ik}$ to find the maximum allowable $\delta_{ij}$ such that $y_k \geq 0 \: \forall k \in \mathcal{B}$ and $y_j = 0$ for some $j$. The index $j$ of the entering primal variable $x_j$ will be \begin{equation} \label{eq:AbstractDualPivot} j = \arg \mathop{\min}_{k} \abs{\frac{\overline{c}_k}{\overline{a}_{ik}}} \end{equation} for suitable $x_k \in N$. In practice, it's impossible to explain `suitable $x_k$' properly without going deep into the details of the workings of the revised dual simplex algorithm (\vid \cite{Haf98a}). Table~\ref{Tbl:DualPivotRules} gives the rules in tabular form, from the perspective that when all is said and done, the leaving primal variable must end up nonbasic at bound and the sign of the reduced cost must be appropriate for that bound. \begin{table} \renewcommand{\arraystretch}{2.5}\setlength{\tabcolsep}{.75\tabcolsep} \begin{tabular}{*{7}{>{$}c<{$}}>{$\displaystyle}c<{$}} \text{leaving } x_i & \text{entering } y_i & \text{resulting } \overline{c}_i & \text{entering } x_j & \text{leaving } y_j & \text{initial } \overline{c}_j & \text{pivot } \overline{a}_{ij} & -\frac{\overline{c}_j}{\overline{a}_{ij}} = \overline{c}_i \\[.5\baselineskip] \nearrow \mathit{lb} & 0 \nearrow & \geq 0 & \mathit{lb} \nearrow & \searrow 0 & \geq 0 & < 0 & -\frac{(+)}{(-)} = (+) \\ & & & \mathit{ub} \searrow & \nearrow 0 & \leq 0 & > 0 & -\frac{(-)}{(+)} = (+) \\ \searrow \mathit{ub} & 0 \searrow & \leq 0 & \mathit{lb} \nearrow & \searrow 0 & \geq 0 & > 0 & -\frac{(+)}{(+)} = (-) \\ & & & \mathit{ub} \searrow & \nearrow 0 & \leq 0 & < 0 & -\frac{(-)}{(-)} = (-) \\ \end{tabular} \caption{Summary of Dual Simplex Pivoting Rules} \label{Tbl:DualPivotRules} \end{table} Interpreting the table, the second line says that if the leaving variable will be made primal feasible by rising to its lower bound, the resulting reduced cost must be positive to retain primal optimality, hence the corresponding dual variable must enter by rising from zero. If the entering primal variable will be decreasing from its upper bound, the current reduced cost must be negative, hence the corresponding dual variable must leave by rising to zero\footnote{% Properly accounting for these \textit{apparently} negative dual variables is the difficulty in trying to explain pivoting from the dual simplex perspective. In fact, negative dual variables are an artifact of running the dual simplex algorithm using representation and data structures appropriate for primal simplex with implicit bound constraints.}. The final columns simply illustrate that the sign of the pivot is well-defined from the update formula. \dylp provides a selection of tie-breaking strategies when there are multiple candidates with equal $\abs{\delta_{ik}} = \delta_{\mathrm{min}}$. The simplest is to select the first variable $x_k$ such that $\delta_{ik} = 0$. A slightly more sophisticated strategy is to scan all variables $x_k$ eligible to enter and pick $x_j$ such that $j = \arg \max_{k \in K} \abs{\overline{a}_{ik}}$, $K = \{ k \mid \abs{\delta_{ik}} = \delta_{\mathrm{min}} \}$; \dylp will use this strategy by default. \dylp also provides four additional strategies based on hyperplane alignment as described in \secref{sec:AntiDegenLite}. An option allows the tie-breaking strategy to be selected by the client. In case of degeneracy, the perturbed subproblem anti-degeneracy algorithm described in \secref{sec:PerturbedAntiDegeneracy} is also available. The client can control the use of perturbed subproblems through two options which specify whether a perturbed subproblem can be used, and how many consecutive degenerate pivots must occur before the perturbed subproblem is created. By default, \dylp uses perturbed subproblems aggressively and will introduce one when faced with a second consecutive degenerate pivot. \subsection{Generalised Dual Pivot} \label{sec:DualGenSelectInVar} Suppose that an entering dual variable $y_i$ has been chosen, and the ratio test of equation \eqnref{eq:AbstractDualPivot} has been used to select a leaving variable $y_j$ and determine the change $\delta_{ij}$ in $y_i$ required to drive $y_j = \overline{c}_j$ to zero. Generalised dual pivoting asks the question ``What happens when we push past this limit?'' Immediately, dual feasibility is lost as the value of $y_j$ changes sign. But $\ldots$ suppose that the corresponding nonbasic primal variable $x_j$ has both an upper and lower bound. If the value of this variable is changed to the opposite bound (`flipped'), the sign of $y_j$ is again correct with respect to the value of $x_j$ and dual feasibility is restored. Flipping $x_j$ will change the value of any basic primal variable $x_k$ where $\overline{a}_{kj} = \beta_k a_j \neq 0$. In particular, the value of $x_i$ will move toward feasibility. In terms of dual simplex, the reduced cost $\overline{b}_i = x_i$ of $y_i$ will be reduced. If $\overline{b}_i$ is not yet reduced to zero, $y_i$ can still be used as the entering dual variable (albeit with a less favourable reduced cost) and the ratio test can be repeated to determine a new leaving dual variable $y_{j'}$. Repeating this procedure will identify a maximum sequence of primal variable flips. The sequence ends for one of two reasons: \begin{itemize} \item The primal variable $x_{f}$ associated with a dual variable $y_f$ has only one finite bound and cannot be flipped. \item Flipping the primal variable $x_f$ will push $x_i$ over its bound and into feasibility. In dual simplex terms, $y_i$ will acquire an unfavourable reduced cost and will no longer be a suitable choice for the entering dual variable. \end{itemize} The dual variable $y_f$ corresponding to $x_f$ becomes the leaving dual variable. The dual basis pivot will have $y_f$ leaving and $y_i$ entering; the corresponding primal pivot has $x_i$ leaving and $x_f$ entering. This sequence of primal variable flips culminating in a final pivot is generalised dual pivoting. Note that it's possible to choose any variable within the maximum sequence of flips and use it as the pivot variable. \dylp implements generalised dual pivoting by first collecting the set of potential leaving dual variables $y_k$ (and associated entering primal variables $x_k$). This set is then sorted using nondecreasing value of $\abs{\delta_{ik}}$ and numerical stability of the pivot as the primary and secondary sort criteria. (Numerical stability is a binary condition for this purpose; a pivot is either acceptable or not.) The tertiary sort criterion varies according to whether $\delta_{ik} = 0$ or $\delta_{ik} \neq 0$. \begin{itemize} \item For variables with $\delta_{ik} = 0$, give preference to primal variables which can be flipped to their opposite bound. \item For variables with $\delta_{ik} \neq 0$, give preference to variables which cannot be flipped. \end{itemize} Any remaining ties are broken with a preference for pivot coefficients with better numerical stability (compared as an analog value). This final tie-breaking criterion is important when flipping a sequence of variables because numerical stability is relative to the largest coefficient value $\abs{\overline{a}_{iq}} = \max_k \abs{\overline{a}_{ik}}$ in a column. An unstable pivot has a small ratio $\abs{\overline{a}_{ik}/\overline{a}_{iq}}$; this implies a high probability that when $x_k$ is flipped, other basic primal variables (at the least, $x_q$) will incur large changes. Stability of primal variable values is thus improved by preferring large pivot coefficients. A nondegenerate dual pivot is clearly preferable to a degenerate pivot, and this motivates the preference for flippable variables within the set of candidates with $\delta_{ik} = 0$. Ideally, all variables in this group can be flipped; failing this, it's preferable to flip as many as possible. When consideration moves into the group of candidates with $\delta_{ik} \neq 0$, the goal changes. Quick selection of a good pivot will minimise further unpredictable changes to other dual reduced costs (primal basic variables). Since pivoting is the goal, it is reasonable to give preference to variables that must be pivoted. The process of scanning for candidates and sorting the resulting set is implemented in the routines \pgmid{scanForDualInCands} and \pgmid{dualcand_cmp}. The sorting procedure just described may result in an ordered list where one or more unflippable candidates $y_u$ with numerically unstable pivots $\overline{a}_{iu}$ precede the first candidate $y_s$ with a stable pivot $\overline{a}_{is}$. In this case, a final attempt is made to promote the candidate with a stable pivot so that it precedes the the unsuitable candidates $y_u$. From the sort criteria, it must be that $\abs{\delta_{is}} \geq \abs{\delta_{iu}}$. For a given variable $y_u$, if $\abs{y_u - \overline{a}_{iu} \delta_{is}}$ is less than the dual feasibilty tolerance, the resulting dual infeasibility will be tolerable and $y_s$ can be promoted over $y_u$. This promotion of a stable pivot over an unstable pivot is implemented in \pgmid{promoteSanePivot}. At the end of the above sort algorithm, the list of candidates is ordered so that it begins with a maximum sequence of flippable variables, followed by a variable which must be pivoted. The routine \pgmid{selectWithoutInf} scans the sorted list and selects the actual pivot variable according to the criteria specified above for a maximum sequence of flips and final pivot. \dylp implements one additional experimental capability within generalised dual pivoting. As mentioned above, flipping nonbasic primal variables will, in general, change the values of an arbitrary set of the basic primal variables. It is possible, but expensive, to track this change; the major cost is the calculation of $\overline{a}_k = B^{\,-1} a_k$ for each candidate column. With this information in hand, it is possible to locate, within the sequence of variables eligible to be flipped or pivoted, the point at which the maximum primal infeasibility is at a minimum over the basic variables; this variable becomes the pivot variable. This method of selecting the pivot variable is implemented in the routine \pgmid{selectWithInf}. Computational experience shows that using the minimum maximum primal infeasibility to choose the pivot variable $x_f$ is not a good strategy when dual simplex is behaving well. Dual simplex moves through a sequence of primal infeasible basic solutions. Observation of dual simplex in operation often shows a pattern where the values of primal variables grow increasingly infeasible and then, within a relatively few pivots, collapse to feasibility (hence optimality). Attempting to suppress the initial growth of primal infeasibility is counterproductive, lengthening the sequence of pivots required to attain optimality. However, very large infeasible primal values present challenges to numerical accuracy, so that it may be desirable in extreme cases to choose pivots with a goal of reducing primal infeasibility. \dylp by default implements a flexible strategy which normally chooses the maximum sequence of flips followed by a final pivot (\ie, the pivot is chosen to maximise the improvement in the dual objective). If it detects that the magnitude of the primal variables has grown to a point where numerical accuracy may be compromised, it will switch to choosing the pivot variable to minimise the maximum infeasibility over the primal variables. The strategy used for generalised dual pivoting is controlled by the same option used to choose between standard and generalised dual pivoting. The complete set of options is standard dual pivoting; generalised dual pivoting to maximise dual objective improvement; generalised dual pivoting to minimise maximum primal infeasibility; and the flexible generalised strategy used as the default. Antidegeneracy using perturbed subproblems is used with generalised dual pivoting. The alignment-based anti-degeneracy strategies are not implemented. DyLP-1.10.4/DyLP/doc/debug.tex0000644000175200017520000001331511171477034014250 0ustar coincoin\section{\dylp Debugging Features} \label{sec:DylpDebugging} \dylp incorporates two types of debugging features: a controllable printing facility and paranoid checks. The printing facility is enabled when the symbol \pgmid{NDEBUG} is not defined at compile time, and is intended to allow the generation of log information at whatever level of detail is desired by the user. The paranoid checks are enabled when the symbol \pgmid{PARANOIA} is defined at compile time and are intended to provide significant (and expensive) cross-checks during code development. \subsection{Printing} The amount of output generated by \dylp can be varied from next to nothing to a level of detail intended only for detailed debugging. The paragraphs which follow briefly outline the capabilities; for specific output at a given print level, please refer to the file \coderef{dylp.h}{}. \begin{codedoc} \item\varhdr{basis} Prints information related to management of the basis, including adjustments to suppress numerical instability and recover from singularity. \item\varhdr{conmgmt} Prints information on the management of constraints, including activation and deactivation, changes to primal and dual variables, and (at the highest level) a running commentary on all constraint and variable additions, deletions, and motions attributable to activation and deactivation of constraints. \item\varhdr{crash} Prints information regarding the generation of the initial basis, including factoring, the initial set of basic variables, and their values. For a cold start, information on the selection of the basic variables can be printed. \item\varhdr{degen} Prints information about degenerate pivots and restricted subproblem formation to deal with degeneracy. \item\varhdr{dual} Prints information about the execution of the dual simplex, with capabilities similar to \pgmid{phase1}. \item\varhdr{major} Tracks the major state transitions of the dynamic simplex algorithm as \dylp solves an LP. \item\varhdr{phase1} Prints information about the execution of phase I of the primal simplex. At the low end, messages are printed for extraordinary events --- unboundedness, serious pivoting problems, \etc At a medium level, a one line message is printed summarising each pivot, as well as messages about routine but infrequent events --- refactoring, accuracy checks, and various minor problems. At the highest level, all primal and dual variables are printed as they are recalculated for each pivot, along with detailed information about reduction of infeasibility and changes to the phase I objective function. This is \textit{an enormous amount} of output for large problems. \item\varhdr{phase2} Prints information about the execution of phase II of the primal simplex, with capabilities similar to \pgmid{phase1}. \item\varhdr{pivoting} Prints information on the evaluation of candidates for the leaving primal or entering dual variable and details of the pivot column or row. At least one line per pivot; at the highest level, produces \textit{a lot} of output. \item\varhdr{pivreject} Prints information on the operation of \dylp's pivot rejection mechanism. \item\varhdr{pricing} Prints information regarding the pricing of candidates for the entering primal or leaving dual variable. At any level above 1 you'll get \textit{many} lines of output per pivot; that's \textit{an enormous amount} of output for large problems. \item\varhdr{scaling} Prints information regarding numerical scaling of the constraint system. \item\varhdr{setup} Prints information regarding the loading and initialisation of an LP problem, including the constraints and variables which are activated and the angle of inequalities to the objective function. \item\varhdr{varmgmt} Prints information on the activation and deactivation of variables, much as \pgmid{conmgmt}. \end{codedoc} \subsection{Paranoia} Because it is intended as a development code, \dylp incorporates a large number of sanity checks, enabled by defining the conditional compilation symbol \pgmid{PARANOIA}. Many of these tests are cheap and simple --- checks for null parameters, sensible constraint and variable counts, proper major phase, and range checks on indices. Others are more elaborate and expensive. There are two dedicated subroutines which are used at several points to check the integrity of the current simplex point (basis, status, and primal variable values) and the constraint system: \begin{itemize} \item \pgmid{dy_chkstatus} implements extensive checks to make sure that the status and value of a primal variable agree across multiple data structures and are appropriate for the current major phase. \item \pgmid{dy_chkdysys} implements extensive checks to ensure that the active constraint system and associated data structures are correct and consistent. \end{itemize} There is another set of checks which track the numerical accuracy of calculations by performing an independent calculation of a quantity. These are of little use unless there is some reason to doubt the correctness of the calculation, hence the separate conditional compilation symbols. \begin{itemize} \item Checks on the accuracy of the calculations to produce unscaled rows of the basis inverse are controlled by the symbol \pgmid{CHECK_UNSCALED_BETAI}. \item Checks on the accuracy of iterative updating for PSE column norms and DSE row norms are controlled by the conditional compilation symbols \pgmid{CHECK_PSE_UPDATES} and \pgmid{CHECK_DSE_UPDATES}. These checks calculate the norms directly for comparison with the updated values, and the computational expense is unacceptable unless there is specific reason to suspect an error. \end{itemize} DyLP-1.10.4/DyLP/doc/dylp.ps0000644000175200017520000764575211507440660014001 0ustar coincoin%!PS-Adobe-2.0 %%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software %%Title: dylp.dvi %%CreationDate: Fri Dec 31 11:14:32 2010 %%Pages: 94 %%PageOrder: Ascend %%BoundingBox: 0 0 595 842 %%DocumentFonts: Bookman-Demi Bookman-Light Courier AvantGarde-Book %%+ OmegaSerifGreek OmegaSerifGreek-Italic Bookman-LightItalic Symbol %%+ CMEX10 CMSY10 EUSM10 ZapfDingbats ZapfChancery-MediumItalic MSAM10 %%+ AvantGarde-Demi AvantGarde-BookOblique %%DocumentPaperSizes: a4 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -D1200 -o dylp.ps dylp.dvi %DVIPSParameters: dpi=1200 %DVIPSSource: TeX output 2010.12.31:1114 %%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 /p{show}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: 8r.enc 0 0 % File 8r.enc TeX Base 1 Encoding Revision 2.0 2002-10-30 % % @@psencodingfile@{ % author = "S. Rahtz, P. MacKay, Alan Jeffrey, B. Horn, K. Berry, % W. Schmidt, P. Lehman", % version = "2.0", % date = "27nov06", % filename = "8r.enc", % email = "tex-fonts@@tug.org", % docstring = "This is the encoding vector for Type1 and TrueType % fonts to be used with TeX. This file is part of the % PSNFSS bundle, version 9" % @} % % The idea is to have all the characters normally included in Type 1 fonts % available for typesetting. This is effectively the characters in Adobe % Standard encoding, ISO Latin 1, Windows ANSI including the euro symbol, % MacRoman, and some extra characters from Lucida. % % Character code assignments were made as follows: % % (1) the Windows ANSI characters are almost all in their Windows ANSI % positions, because some Windows users cannot easily reencode the % fonts, and it makes no difference on other systems. The only Windows % ANSI characters not available are those that make no sense for % typesetting -- rubout (127 decimal), nobreakspace (160), softhyphen % (173). quotesingle and grave are moved just because it's such an % irritation not having them in TeX positions. % % (2) Remaining characters are assigned arbitrarily to the lower part % of the range, avoiding 0, 10 and 13 in case we meet dumb software. % % (3) Y&Y Lucida Bright includes some extra text characters; in the % hopes that other PostScript fonts, perhaps created for public % consumption, will include them, they are included starting at 0x12. % These are /dotlessj /ff /ffi /ffl. % % (4) hyphen appears twice for compatibility with both ASCII and Windows. % % (5) /Euro was assigned to 128, as in Windows ANSI % % (6) Missing characters from MacRoman encoding incorporated as follows: % % PostScript MacRoman TeXBase1 % -------------- -------------- -------------- % /notequal 173 0x16 % /infinity 176 0x17 % /lessequal 178 0x18 % /greaterequal 179 0x19 % /partialdiff 182 0x1A % /summation 183 0x1B % /product 184 0x1C % /pi 185 0x1D % /integral 186 0x81 % /Omega 189 0x8D % /radical 195 0x8E % /approxequal 197 0x8F % /Delta 198 0x9D % /lozenge 215 0x9E % /TeXBase1Encoding [ % 0x00 /.notdef /dotaccent /fi /fl /fraction /hungarumlaut /Lslash /lslash /ogonek /ring /.notdef /breve /minus /.notdef /Zcaron /zcaron % 0x10 /caron /dotlessi /dotlessj /ff /ffi /ffl /notequal /infinity /lessequal /greaterequal /partialdiff /summation /product /pi /grave /quotesingle % 0x20 /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash % 0x30 /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question % 0x40 /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O % 0x50 /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore % 0x60 /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o % 0x70 /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef % 0x80 /Euro /integral /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl /circumflex /perthousand /Scaron /guilsinglleft /OE /Omega /radical /approxequal % 0x90 /.notdef /.notdef /.notdef /quotedblleft /quotedblright /bullet /endash /emdash /tilde /trademark /scaron /guilsinglright /oe /Delta /lozenge /Ydieresis % 0xA0 /.notdef /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron % 0xB0 /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown % 0xC0 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis % 0xD0 /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls % 0xE0 /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis % 0xF0 /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def %%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 %%BeginFont: CMSY10 %!PS-AdobeFont-1.1: CMSY10 1.0 %%CreationDate: 1991 Aug 15 07:20:57 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.0) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.035 def /isFixedPitch false def end readonly def /FontName /CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 37 /arrownortheast put dup 38 /arrowsoutheast put dup 48 /prime put dup 62 /latticetop put dup 98 /floorleft put dup 99 /floorright put dup 100 /ceilingleft put dup 101 /ceilingright put dup 107 /bardbl put dup 112 /radical put readonly def /FontBBox{-29 -960 1116 775}readonly def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A 221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A 27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF 5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A 71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C 515DB70A8D4F6146FE068DC1E5DE8BC57034F7455AB67138A1B6DFCA01660EDA B8076445878555259A240F7ABC026360D54EEE04300E2A2E984847BB0D9C9D82 93E6F5DDBBB98EF0012EBEDC91E1B9217CB07BFE57E467C80D32D03FBEEE41A4 19B357D09698A6CC7C7A13A7D05738C048F06CC5ECF8089801858AE307C1EC33 3E3F0FDC0857F99EEE569E81B9589C4EA972393194BBD62CBA38AE31C5881EB3 8EAF53A52A8DC00B70434F750C720B9F2037C3E4078C9A0293CE8A7C80CCC115 8F01C297A4F5907CEAB9F3952F7724977442E51ADAB9D1D46B333D8C4B60DB9C 909F6DFA4CBB071E3E94888713B2474D51DC437DFC1AD2235D27C41350CDB770 1893513D70A0F027CD6EC4DC83DD0DCA283F1135445E50DD8EC20EA4C7F6F9BA 3A821B16CD68D8587B0EE5410075C9371F3E93233E6E341DF51DD6AC5543FEB9 ED2A1A155AAEE4F3BAF343DF5DE4EFD8EB7DE442C66144C1FBB5643397C70935 FB4375AB9CB6CA414429FF72E753FC7CE8FA9A7C8704314EA9EF07E81A02BF4D 16153A5B7904C188FD7302B57DB98151A47CA23902B040A501BD1C361C249FA0 A1E2714DA3CA1CE4A0A054E33CC1E6F8A02586C5329C230C113C07E2C8145043 9E5FC53F758B0B6B10A77026D9D64C948DAB18CC9D78C0B5FFC170825C0790CA ECE880C30E89CE89E21701C2A93B4EA9BAD64AA8EA1825C066272988579D77F7 FE5499B50C499904C2DBB6142D3B9CB24EC6BE424FA10A3606AC3946DD0F0743 C5304E208496A197FCCE3D55384011D04212106A71817D3ACFF6564B60DACF40 16407B228D78D1DE1995CE9B369DB6CD3F6617BE54FA9814ABD6F3DF9986B63C 2C6A6093FE37D69F54AB7C6599136401CD57E64A2AAC7AE340C60D8B009437E4 96DB0701DEA0E7D0476DED373712248DE4E141C3E84E4940501D414D955F8EF6 7F97F0C4BB6103C2C60014BA3265730D63FAFA1AD8236B363507AB6B19750F23 67747FB2EC29905F55DD6A55963F6874648725E4A64D04F46840DEB61DA26B8C 8D6238A8B7A69CFE42568BB7DDB07C41DFB095D25635B9AE11865E0FE8414E16 46BCAA7B3283DD6D0AEC638F6F7FA8A5E5605E23D2423C2195723957D3789872 1D5F7749888A394B197A81F91B0B220C48222EF273246DF8756D995B54053E93 7E1A1BE2528F32663C1085D0A3B2024341A7E348ED3405A9896F76EC7D2F0DC8 B7869F36F9155358F6EA65B5BA136869E3118AF46488D33529241C629A4280DE 94C9449D73205023794529DA6173EB955BEC59A47BEA53EA390CCA99ABCB759A AC1D8B5F2D3488B97C32905E51D6C758DEAA744FF02DC8FC064FF6D55EBDB618 CA25B0834DD5C683FA8B65CFD8A0A51A954375A4ED4B50CDC7F045861D2BEF69 88DFF3802E490C4B417D00AC719D56C6F2D9B7C4FBFB7C1C85E443546886AFC3 A97CDB6AE756BD85939A3F4B89FD1DE045DBFD8294E87E7D3BF623785E936F3A 48881955E4A61ECFDD00A3D51B651E8E181C36C41DE70EE6BA75AE6E8CF69BC7 DAC7E2EBA214E9F7B50985DE49987B2C5A99FC0360045A0B3B380A4AE9C3F8F3 693DB379D4EDF584D9B73D3236A736DBADC43CD068D9F65E1475D933905BB137 D6FC8C1B4DE54F1167CE08DF2116CB9F8BC5017386EB39F31239371A8B30B989 75AFC26147DF18338FD73C84654B86CFE7DF3C1F88414D3841338AEC2E3F4108 4E03A14F8C40514CFBD04E09137C53B72E7E26DC120296073F06DEDCD59A59EA A38E2F37E1E348DE386A550BBAC9E062FD12EA46DA9EF903576C10A99075D332 E03CD3B1 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: MSAM10 %!PS-AdobeFont-1.1: MSAM10 2.1 %%CreationDate: 1993 Sep 17 09:05:00 % Math Symbol fonts were designed by the American Mathematical Society. % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (2.1) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (MSAM10) readonly def /FamilyName (Euler) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /MSAM10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 92 /angle put readonly def /FontBBox{8 -463 1331 1003}readonly def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1C87678CE98C24B934A76220 4DD9B2FF3A49786028E35DDE10AD2C926BD30AD47015FFE9469DE1F793D1C53A C8812CBCD402444EAEA7A50EC5FD93D6A04C2783B50EA48059E3E7407537CB8D 4C206846EF0764C05289733920E2399E58AD8F137C229F3CE3E34D2D1EAB2D53 20D44EFAC8EFA4D14A2EFE389D952527F98D0E49BD5BD2C8D58FF9CB9C78D974 75C2AB5467D73D2B5E277A3FDC35909938A9DF0EB91BD9159D3437BE22EE4544 3429AC8E2BFBE34AE54D3BA3AD04BDF3F4F43A2B43992DF88678681B3AB32CFD A23E2C98D1AF00AB206AC95B78BBE6316F7A0AB6BD3236C28C76288B3C25D1EB E9ABB3576C5EC15A71D26177F5883E9B48293D59015615E2EEAF2E9BA04151ED 5497B9A1C41CBA44BAFF13EA218F5EAC11952EE336AD1DBE6CE92F002EAA3B3D 3BE4C3792F3405763C4BD93EFC3B4FC34193439561841BA989DD8D9F9AEE7A7B 24AEB4654B35023C9720B8F31AA9452E29753FB7915CB29977E725611E37C0B7 784BCC26FACF8A7A0EB1E54290D27FFE52B2D87FAD080AD15EE1984C37E0EB30 122C3012D3A16B09C28903D138352AB5462674B6CFB63F1371768D094DDF288C 36FB9B58443F872D61F2CD8CED42FE0EFF3D7E9952A172BB1AFECB60BF79F2B6 04265FDE4F78BC9FD619AA733CD0412F1D9A7C13B271BF827DCBDC8ABAE24FF0 74D3C220621D7FF0EFE62D835A221D0A7C139E2E6681FC2BBA58FA3B80D416EC 3854C63BA040A4262B458340DAA18AA6AEA3BBAC61615CB85982B18664D3D3AF 340C65B969071CF2D0CABEB80E04623D0526F862ECA8280EEE236C535F70561A 854181132E677674AD5E14C6636F57541D3C821F0776D2CB9B8526D4B826791A 0B179B386F82812A62EC997C762B179B2D969D4A4A84647D2A8E338E8137C5B7 BE01B6F77814451FE3AD04367EADCE473B109A62EF445F86D253E38973F49A82 F2B1623E04C16FA0D6353357E460659974C7B866D607C4C329F27F91B5E68B38 F1E30EB5C8191CD733C394BA30FFF2691C04B6CC5EA988C7430C4309D478C854 B380A0090765D696C374B544D4C8B53CB993C39A1D12CA7713A1EA1B828A8FFA 53BF5A4643A47C59427219E0EDE2C242DB8A43854D36607B8DD4D43F57B8B537 2484CE16BBED568310C741D424E566703645125E1AD962588DF2470FAD3F5F3F 906DB1A5D82CC9CF78 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: OmegaSerifGreek %!PS-AdobeFont-1.0: OmegaSerifGreek 001.000 %%CreationDate: 29/12/98 at 11:57 %%VMusage: 1024 29265 % Generated by Fontographer 4.1.3 % Copyright The Omega Project 1996 v. 1997-02-08 % ADL: 776 224 0 %%EndComments FontDirectory/OmegaSerifGreek known{/OmegaSerifGreek findfont dup/UniqueID known{dup /UniqueID get 4475229 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 20 dict begin /FontInfo 16 dict dup begin /version (001.000) readonly def /FullName (OmegaSerifGreek) readonly def /FamilyName (OmegaSerifGreek) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /Notice (Copyright The Omega Project 1996 v. 1997-02-08) readonly def /em 1000 def /ascent 776 def /descent 224 def end readonly def /FontName /OmegaSerifGreek def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 68 /Delta put readonly def /PaintType 0 def /FontType 1 def /StrokeWidth 0 def /FontMatrix[0.001 0 0 0.001 0 0]readonly def /FontBBox{-66 -280 863 848}readonly def currentdict end currentfile eexec D9D66F633B846AB28EDC112EE8CE6C673600174C0ADCD768F61D640707D87128 819324132AA262CA70C79A7D7A2015702B229606D56E9E6448EDF888E45D102E A8AF8A0FEEB189353B894CE01AEC180DD26708C1739692D834976408CCDFB47D A62B92F591DEE406A6B4B0D67D611D69D337CBAAACDBCA21675BA3492F5BEB89 FB9437452FD102182E81641B5BA4C5E65A9ACD965A529EB124351F2F8B292F7E 670531AB7E0A0C9E4D42922CFE36F7D68117B365445DC558FCF0A87A7A65F346 A017456F083E97E36761C058E44D5CF849D3C829BE3BB8425440D81473EFE99B 3454EB2F693C1EDCB84E3C21B50B178F93FD8AC8ABD0BA9B181F9F25315E2809 B27F83E61FCEB7BA34C529DE0B250120B085C94C9027C308FC7A1FB0989C8A8B BE44EBED6057B96DA3259D3317B33C1C5E8D540D27A4A891F1096362B8CAC41F 922D75D201BADB045CE52E425949E592737C844FD4DA8121B255381F1268474A EF8CFC5033983A04B822E5D9142715AD86560323B57BF2E2CD064045793627D4 D0BA81B4B20FBA3C03C02EE864AAB0C4A7EE05190FABEB0FAE6959783D631F98 AC99320BA10AF8543ECE35B0850A7904EC34B8B18DC0A46CA740D665D50AE60A F68491E43EE92822775631691C81CD3ED7D04DC7500636F72B0575D70A58AB66 B5D3544D6F1AF84BC839A43F070A1968136633B732D6B90CB5B83540A85132D1 5F4AF966A942D4DF5B2CEB52D86D73E46FD77E5054C54F2BDEB25CF3EBDA7879 3F16DBA9488094AFDEEBB4918D59916F815760310EC894AA9648EF34D70F2E33 342740C922E5CEBEE5CFC3EA894A16C5DC9D00E4EE004A02D9BB46BAB3DAC87E D9EDCE958DD2A34928FEDA1AA92E439859CB5822658A81962D9105FBE7050F6E F393372CBC9C861803D96A2C121675408E29138B56DA6A8B9DEBA5BFDBA4A1F5 E53E24A6862D602E5A97651E39ECD39E1A3566F04BB494565EC9E4AEA0A19222 BB61078079DC3F513AFE00D1245A9A8EA080734F2B09B366193FD9055CC8CFB0 1373D33A9D22D14C37AB7C60E6E7DEFE6764141F24ADD0E8F159567077FE882B C9A9D984F182698895506B51DCF7F3DD0B1A50D4DD65C2CC3181AB3A2834A51D B9BCC07B95C49D5724B94EDFD6DE13E5EAE869906FD05D4B05323823297B9857 47F6460751C04BBCB5E31B67141DC2D778FB7A8071B228C88387E08279E79A70 1BC9D6943BD48822FC59CC046B99132D5542AE53B1D788F12774F2AF8C777F5A 0958C48E002E1D4EAF23C809F8E31F6571B1624077896235B712ABEE67C53C44 3866FE68B77ADEF39F27B750189B274C97934FDE8EE201E5BF4ADA7BB9A12F5E 56BA6AAE32F2DD7C6AC34AA68C499E36FAD25C725932DF7415AAA8C879443075 699423B6 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark{restore}if %%EndFont %%BeginFont: OmegaSerifGreek-Italic %!PS-AdobeFont-1.0: OmegaSerifGreek-Italic 001.000 %%CreationDate: 6/03/98 at 9:46 %%VMusage: 1024 29167 % Generated by Fontographer 4.1.3 % Copyright The Omega Project 1996 v. 1997-02-08 % ADL: 776 224 0 %%EndComments FontDirectory/OmegaSerifGreek-Italic known{/OmegaSerifGreek-Italic findfont dup/UniqueID known{dup /UniqueID get 4475229 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 20 dict begin /FontInfo 16 dict dup begin /version (001.000) readonly def /FullName (OmegaSerifGreek-Italic) readonly def /FamilyName (OmegaSerifGreek) readonly def /Weight (Medium) readonly def /ItalicAngle -11 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /Notice (Copyright The Omega Project 1996 v. 1997-02-08) readonly def /em 1000 def /ascent 776 def /descent 224 def end readonly def /FontName /OmegaSerifGreek-Italic def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 49 /betacurled put dup 52 /rhoscript put dup 100 /delta put dup 103 /gamma put dup 104 /eta put dup 112 /pi put dup 115 /sigma put dup 116 /tau put dup 120 /xi put dup 121 /psi put dup 122 /zeta put readonly def /PaintType 0 def /FontType 1 def /StrokeWidth 0 def /FontMatrix[0.001 0 0 0.001 0 0]readonly def /FontBBox{-99 -253 944 848}readonly def currentdict end currentfile eexec D9D66F633B846AB28EDC112EE8CE6C67360019E9D804A1EC559F12F004ED7153 00B301E3D3591F91FA194BD4C1AB11BF90898C3552E33FC10D6B53138CAD0997 95195D0B0D00CE081A5D537863B7A33AE2AC264D9331A1F4DB29C5EA626E047D 9152F6369355B52BCEFBBC80E80EDA133682ECD6F4B21743937A9153327BCE92 BEF2808A94BD793AF9992ED7A93DE0E8A3F162E7032D19A93447664038939858 B715181B04C66802B020F37DFA72D27F03B8E883326D62521FB49651C63EDF4E 8A59B2BC8D4E37188401D425175B7FFF2B62103FE1B810EDEB79ADB25AF1A61D A4C51DA22BC143CAFDABC27F6BDD7ADFC2508E9DB878C6FDE7E749942E51F28D C2F6A1FF7AA3D758B9FC27136F8F1E19E22BCADC35A4D35FEC9EC7FF10FBE814 B0226E214E36A4D96AB8C38BD7B5E1A399184CBB22E88E6F1E1D6CB3395EA41B 9D3B588F0DF7E2EAEB2A4A4AAF6A11D6C432B8A61E4421FCE658A1DFC08F3BD6 1ADB5381E4EB84C143421EF2728AA2EA4F749C3854007B8F6FAA49811EFF114D B732845478DCC651BB2BE364C7E82F6873AB465ADF911304D2E8BF972B49A7DE BC89522B326EEBFE6AC80D995AC00E1BAFBA187C4B4447490D8BF16C1D71A0FC 7630CA8086C3E813D6684471E130222F63358C4998F557BF3AFB74174C361A32 1FEAD17240FC3D546FCCD9BC73099B449FDF3C38785B80E0D0821B7EB4D94C54 CF184179D66F9F437E128CE7840DFA035200BEC00B235138DBC323A41CDF56E6 F441DA9F33BE22438E0F3C11CA1260F9B85EB61163376167B740AE576B0F0172 C8A7C765D67A2109037EC3D8344DB111C9EE8873D4386BEFDA2CC4546D3637ED 5AB872BB16727AE1BF0B9566A202326D5299F9F7093D6E2CB87ACE0F76215790 7BB9911768946AB692BEE6B0EEC1632E6207B5BBA54A8542E05B23614EC981A7 F60049B431931DD89F3FA851121E4E5DCA9FEBE67FC786D887875A260DE5DC01 B8DEAD893F4762A700EF4457D865F3BA3DCAA79309A7F87B1F8052A68D4FB2C0 17C98CDE2EC009441D3A5096CE711EFEBE6748D4E250E37FB7489D099C31B822 FA6AC2F6EBD786A4D3295AAE6E1230032D837135F95F585BBF22FE261EE3498F FFAC4EAEDCEFB4E9CB10B44926744AD3631B6EDDBBCEC6467D05B5403BD324E1 95856B01BB9C979651C1482309CA57873BB0D08C9F710C67F5B46BCDD7C2926E 58039C941544300E12FE9CCE3C26B97619C97A23EDDB8AC70535E67C137018F1 EFC2148AC871110A764338093117D4BE808DC10C9A8C197F198F335B670E611A 561E59A95434C79BCA75A7918F0EABCC95C8AFD30866E6C1DE438B66ABC4B7CC FF1CAF0C7053324D36B9655D0F976D53A489E6280DCA1BB2FDE92A57527894CB D256200EC2E734AA5306378BC2093E4EEF34CAFFF5D71C8834519695EBB131FD 505D02D824210E297AC548181181DB7851E066AF9B8DD5E5D5FC7A43A3E923DB A7F8374BD8E799C0FCE4EE00BA022CA3340DE255E5AE2275803273BE02726945 C46DAB813D04B1E755E8DE4B75B7D872D911F58F833C5FD7D7E06ABFAD161BFF FFC6E2A372009D6F4096E491E6F25B0102B5F48EE3BF5CE7743D669E7D928FE3 668C2E185A38765028E3742B33563F7D79D88ACB4A501DFA2D8A4FFC0CE81029 A072509308964B9C06E4EDDC03EE3D1CD252A2B96B04935DA14AC2ADF87954D0 77BC9B2440E4A80B52B83420A82FA82D79CE687A9827E73142D119F0F8E2350C B8028862FD85970D34532954F27D2FFF6F8BD1BC47C7F42E42F89B641E194565 22006C47A68EF9FC83BE87D0B375744D9B773B9E7B453890EB50D1BF09376064 D8BA9BB689D5337786835E9EBFD837671DF6402F1FDE12C89B84C5B45F424B3F DBBC3A4C4713336F6A928C2A3161F66F2785A33C6CDE1907AEAB035474D4EF25 AD7107A558FEE677FA95D3514E61F2E0D4C1F1E1D9F1AB51F96EBC0D601ADB16 54AE4BF7AFD709C8A302F36BAAC3C6EC730ADBEB74D851FADE790D6126CE65CA BCAA2C6A74924146BD1BC11864D9C80AA91F7E1B2CD0D71581C31C5AF30FB9B0 C636AA7725D09195B85D0D91C7017B6F9097019DBF730AF034B2E8BFF4263BE7 58C3CAB321468ECAF266295BE84A2AC322D931461B83FF3C4440D1B7407A942C D509BB1D9FD54B9CDFDF4CAA748501DACAFD76FF882928829D534465744C8B2F EC0248CFF45967D96EC2987772433450195C30B6EFD0CBB2CA0B7A7072BA447E 90D23EA4416B8EE85D8B3DE3C4074FE60EE2B3DCADA5DA2E243E50DFFF223493 A8FA21249CAA8C29A8901F2615BB3F9093191032950ED772462C8C5105F70C1A 22A9DE0BB845E7FEDC320568A928CE21BB8E3ECBAC90ECF235F061790E8C42C4 5B1BF54D1795224E87FCD69B3887E030EF8C8963A74F7B05DAFB3A4786FEEB85 64D06D7F26C04CB362B5CA17F892BEB174324DBA95383261D44F8DD406656FFE 6AC2272667FA350BD9CDDCB0C019A9AECCE5327D3421DDA5B3EC786353634DD6 404C5BC508F973B197770BCF1948A7E9F512160720F362411147237E02572A88 5466CC05B01168EE53477E0278E4508C1C080DAAC86EA2A9FD904D14C7F4B7AD CE37C285D6970509D3DB372E3340095CC5DFBB9243D7B0923E96EC41CEDA56FB 4BB7A0FEEDDA974B9AB3D5A4A58FD2F30A02A6A04AA95FF311AC42D3C58FF4A0 4529E91C02B108BBCCE642A0738DD57D812CD8893BF9290895517B22E1BE4F3A E1879E0555A9EE765413CA363FBB458EDAFBAA4C676286CCDC04975F4E031190 507F3BAFE44AFE2E02183ABB2DCEA7DCD7C574F17D6B885B9B4B26F601B5C0D6 31AC86FBEB4BD5F4A2A311D701666DDBA648F90EB8ADC17FE139C22CD8D03EBA 5C276A6F419F9ECBCD0E3BA37CB381FA25BA6282AB61040D735E530D2BEF7CAD A095BE1027AC2D6FA3F67016019E9E0CACE65C774D15C91C35AB3A031DCEF2B8 83C0D0AFADDA59332D251123C90675759EC4D76A76333D3A365CAB6FB462FA97 1DE71B13C70F87DA95C02A8BC2D4629102E43F3ED1A87A9B7C57FC18D2AA5DC7 B1FC466D574F190B7ACFF3313B0ACA779965964C16757AB0A7327CF261EF9E40 A23B491EA1A3FB601832EA18A550F3DFF92C8D293F359B8223422E15625E878B 72854E69F5D34CE057A004F9CB30A88BD4E681E2414E6247820812799C6A45E3 087267A67AF4589DE405A999BD8A4FEF0B4AD41679DC6E44A42760992EB0F3EE C82F7A6CDCFBF49402E9D1D305ED4C0AB996622F8061B95BB178A74084FA8513 B248A41881E32CA56588ABD620C0697D4430F6F3FF75760E6D4972BAB49B8472 6CF079A4A66AEAB3C193708295DDBB12DF7AEC2A75010F74719BCD49A4681EAE E290A8C0CBEA28C22F1828A1AB1401E467D6277BE7FD9054E06AFC26C1A97231 D26E4950B5862134CB93DA898A0CE4D8EC13C1547BBB2E2D2D2B2FA93C257D52 AFF3B00AB9EFD0238A98A4C0139CA7C47874B1883E05C50181C4C7522C762C45 26225A16640F75067E62AD450AC7E40E803A1AB405DBCE15832604030B8490E8 C1EA944CD93D881889D736933662197DE34BA4DED8A83444 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark{restore}if %%EndFont %%BeginFont: EUSM10 %!PS-AdobeFont-1.1: EUSM10 2.1 %%CreationDate: 1992 Nov 20 17:36:44 % Euler fonts were designed by Hermann Zapf. % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (2.1) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (EUSM10) readonly def /FamilyName (Euler) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /EUSM10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 66 /B put dup 78 /N put readonly def /FontBBox{-8 -194 963 738}readonly def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF4E9D2405B169DE483FC3C5DBA587E58D683 9E11948C1A3E8B5360ADE57410E9F910E561F679EBFBEB0730125606CD072EB1 0A975FC5186A70BA3CAA77642D606B57469AD72289DA911758623D8C66DCB000 A804D330FA2310AB619846B77495D97E7065EFF7E9863C2B64CF640C06301DE3 EB4EE29B52BEA3204AF4CCEA9C444F88AD777F296CE544EE4A1E88E093DB16EE 35D8C6473B422A716796536C1347DEF0115B8E31BBDD72D574FF3800E34CFA96 9322738BF68A0EC2D78FB0CAB62512B656837C6184CA2E03BB30EC2396428702 0EFE3DD99016DFF0BB433068C23FF079C1EA255E1510957CA6FA2B6307274252 0E255FEBD892EC4434A09579FBE9BF52000882448823D29A95205EBAC8E4CDAB 252C9C21441B4E3616AE348DE997113556FD7D4A14256BE54BA2EFF1F19A01A6 4824F691EBBFA99BF593940B4A376C6FF81E89B0E672EEF95D12E8E962873673 A80D036D1687EA75A40ECCD264BB3228450B425867FE2CE54BDA69C86A2210D8 3B62AF190E473AE7F045B7DCC33B892F8009272D22B951B29B74690CC2FB8740 0C1A7B0327C30AD0CF027A06E8CBE8CBE7C2224BA8E0FE349B5BF30033D027C2 6EF80F00AC06A2AC1CE7C237ECB5F3616EE0C1CDD06A47F952F8F455172C4191 59CC7C7D9378CB4CF4F7FA17D9FDBC94024D0323F115206DDBDEE9C97DB4A29F 174BBD203ED0FDA1BFF0AFF74781F045E3D3F23AC926F472734F1E3C858FA60C 1C5CC4DECF246DFCBBD6E7FDA25AA240952DA6118ECF0EA4D3F589A81E541018 43E874DBE23F815D1728DE8699A74BE80B2F63553EA85A982FFAA0679AC682ED A87E0015ABA520C142F0F320306F35D07CF584599D572F3DDE2801387BB51030 A5DA81F7442703372DCC8337CBF9C5AF926F96EC743341B3D322DEF5CEB42C7D 07228D650682196B60219755D045C38476FA144A262532C611DB1A6645F63B4F B9962829717960F9BC4461988CDBAAAD796B020BB0965949080707D44A743A8F 4609F1E4E705AB4933306EFC0B3B2FA47F9A7D96E5BD9AE97314CC53ED749410 0AD0743E534807C0C01F2BBAE7CC319811BE723536AA2FEEBA9A67DD0AAA768E BC9609E49AF5364A802935C617299A1166475D8A2104B078F27040211186CBDE C5D48D5128A735CAA167FB7BBA27D7B5F359104079C4777EEC4CD2C6998C5BB6 76C19234962EC42D28BBEBE95C3E9A7473E260A13B5A5933217D9C8E7630A8CC 165FF00F760E984D69DE6C9E41E18010E05F3B3A3D4A1593A042993B38EF8F3E 929C021DEE49A0B48732EFD2F544268101AD9C7104EDE8901A9B2A63471DD537 217A9E453B793403AF15EC8062F821B805F84511D5D5542356B628CFA044C368 6F2A78A120DD276DB36CB6C6E3C067E43068BB474ED533989846A9A24D5D1E5D C17B17153FCAFC2BAB87745525428A1E05B445BEB12438E93FAEAB170C9E0BC7 57143B469C28C8DDEDB898AE1B2C15D47F82A79AAF421B92CCFB373C620DF002 BEDFA12479BDE6BEFF7FEE2CF09192A12BCD4606D106C18B17AC1E01180F69A2 87450C70E21F07DBCAF72856D7B022A3A003CBE082AB0C28DA1CD7D55567FF0E FC5061BDC5293D1F144048615F4486B0D4E2CF6C61A7922A30DAEC9D51934A6E F81762D8298008DCC20B7A1B0199997B3F61512F25C2278842B01EACC3D013CC AB0BC27C19192A4E5EBC1CCF1C0605A9D9FEA9EA312C4B03827538D494132AE7 EC728D2FD5C82586CCC547669928820E1245DAB12698CBFE44BB6ADC51E0C133 3220B4A5A2ABBAA697E47AB00ABDF3A7A0125967E4C4E69DD7B6B78F76F9D4A0 87A4E6D58E387CA1881E39597CEFD5B1F08D015E84E1B38FBBABA7EB871BA4E8 20ACC2B7B8B4A5274F03427D75BFA88BAAE83E7832BEAD62404D261EB51A9D94 0E854E3A94660132C20D18E9924C0221BE8FDBA9314EE62B25A4A16AA460A84F 3F9040E3B41BEB177959427E6C17D858A2477CC113F34C72584048894B31EC2C AF8D0EAC0BEB2A0013EE84D74E0F2656459DE5C563AC703FB4D489FE32B7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: CMEX10 %!PS-AdobeFont-1.1: CMEX10 1.00 %%CreationDate: 1992 Jul 23 21:22:48 % Copyright (C) 1997 American Mathematical Society. All Rights Reserved. 11 dict begin /FontInfo 7 dict dup begin /version (1.00) readonly def /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMEX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /FontName /CMEX10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /parenleftbig put dup 1 /parenrightbig put dup 2 /bracketleftbig put dup 3 /bracketrightbig put dup 12 /vextendsingle put dup 18 /parenleftbigg put dup 19 /parenrightbigg put dup 20 /bracketleftbigg put dup 21 /bracketrightbigg put dup 34 /bracketleftBigg put dup 35 /bracketrightBigg put dup 50 /bracketlefttp put dup 51 /bracketrighttp put dup 52 /bracketleftbt put dup 53 /bracketrightbt put dup 54 /bracketleftex put dup 55 /bracketrightex put dup 56 /bracelefttp put dup 57 /bracerighttp put dup 58 /braceleftbt put dup 59 /bracerightbt put dup 62 /braceex put readonly def /FontBBox{-24 -2960 1454 772}readonly def currentdict end currentfile eexec D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 2BDBF16FBC7512FAA308A093FE5CF5B8CAC6A7BEB5D02276E511FFAF2AE11910 DE076F24311D94D07CACC323F360887F1EA11BDDA7927FF3325986FDB0ABDFC8 8E4B40E7988921D551EC0867EBCA44C05657F0DC913E7B3004A5F3E1337B6987 FEBC45F989C8DC6DC0AD577E903F05D0D54208A0AE7F28C734F130C133B48422 BED48639A2B74E4C08F2E710E24A99F347E0F4394CE64EACB549576E89044E52 EABE595BC964156D9D8C2BAB0F49664E951D7C1A3D1789C47F03C7051A63D5E8 DF04FAAC47351E82CAE0794AA9692C6452688A74A7A6A7AD09B8A9783C235EC1 EA2156261B8FB331827145DE315B6EC1B3D8B67B3323F761EAF4C223BB214C4C 6B062D1B281F5041D068319F4911058376D8EFBA59884BA3318C5BC95684F281 E0591BC0D1B2A4592A137FF301610019B8AC46AE6E48BC091E888E4487688350 E9AD5074EE4848271CE4ACC38D8CBC8F3DB32813DDD5B341AF9A6601281ABA38 4A978B98483A63FCC458D0E3BCE6FD830E7E09B0DB987A6B63B74638FC9F21A5 8C68479E1A85225670D79CDDE5AC0B77F5A994CA700B5F0FF1F97FC63EFDE023 8135F04A9D20C31998B12AE06676C362141AAAA395CDEF0A49E0141D335965F2 FB4198499799CECCC8AA5D255264784CD30A3E8295888EFBC2060ADDD7BAC45A EEEECDFF7A47A88E69D84C9E572616C1AC69A34B5F0D0DE8EE4EDF9F4ADE0387 680924D8D5B73EF04EAD7F45977CA8AD73D4DD45DE1966A3B8251C0386164C35 5880DD2609C80E96D1AB861C9259748E98F6711D4E241A269ED51FF328344664 3AF9F18DCE671611DB2F5D3EA77EE734D2BED623F973E6840B8DAD1E2C3C2666 DD4DD1C1C82B90E877F6F22B05FEB6F09284F57D12AD920EF0EC265F7E241319 638A390EA33FF5E3F3693021FE71F6F5E106C19AE08938C282AD46A8A148142C 5240B9483751C96DCBD3FBFAE0FFEA22DEEC18B86E404E0D1B211E4292A23290 92DC8D6451604BCC912E71BCA9761CFDDE56A58079433855C29E0428A1F12890 D1F3150E984F0E04F66DE33A3C9FF98E1E7ADD06CC0E739C031A87686C6F813A 3A74D4B708375B97F7196DEF5282AB78B9F93B740AAB15205409B2D545170681 4A66D6B8567D43D1BCC07EF055D7A2B1582C730F2BFFF107A46F07A7CAFDF5A9 4D1EFE039E87DD2FA4D16FEFD1009DA7EF199C3AE2A6089490AE7DCF63C6CB4A 0CD93044846AF911A65078ACE61CDADBB4EC104D85146120C47964102A22CAE5 BD21FF007BF61C9EA51F2CCC8E5391D71B717815864D77A1DB4585728441E149 4A0D92D6C46D1A874F27EE87AD94350712630500597AA4119FE5FAF476925703 8F6B0A357A904941054FAD3480DF1FA4EE9ACC7F072054E62BD02690FF0B5308 0884EEFB96C11A97A5DC2F7CD5A602FB5A876729A646EDE12BCDF81AF80C1AD0 8EBAD362483124923062185802439EA51B05C125EAC71F10CCC9BFCF6673BC42 E3B2F002E16B873B0998D16A18EE414EE3BF6BD3090B60C560A55BB952430E3E C1EDEB725DF94980E3F25567A28FD56CD78212F6196FFB473645AB7BDA7ADB51 68E83A5A8D879A1F40453A95CC4D8683C44E9291C091E8EDF1ED9059F7D3ABEC 8776447FC196EE23B7F99CC2B924F2B1EDA51250A8AA7BD76407710D3E5134C7 217C5F8CFE893664E7A3F1AA1486ADD54650B48144E401DC910F945F949778B0 BFC47FEB62E4A2DBE1CE04A4E35C5CBB3BCF0AF8AF6F9332D42740712B19B2C5 3BD88EB848E7BBAD76C4A653FE55224877BA5780350294804E0CE50CA1E41948 CB6E5653C1AA6E462046B8CD4DCA8298291B3E753618FCDF27F751799278056F 4D8BEEFF82D61D9F76450CBB3245AE534741FB62B4E7CFA222377839893FECF1 3F7C7535A754E0511FDA1B52F3424BAA942280D79CF41FB46BEB5270F6740A3C BBD11FD54A10BAEACB36A88A6C65A5EA01D125D7C0F12A4DDE8E0AC4714AD910 5B83275F49D9CE88D60D706ECA17E8B9455E54FC0EF3FD92D8DFCCA8CD6F666B D620F2FBAE751CA1B612FFF51B4943DA21295C9D133262467F37ACF5379AB04E 77AE6BF0ACA54160AA168726D9374C3B9C823C593F0A83C9A2477619029BC917 1EFDBDC57A1BE6ED10BB9C60F37BAC1E278A6E47A513D8A2C76D2D249946559E E23D796ADF0F664AD5D9FD23B140F456925F1C9D9DE7DFDD67BA8E4E3768C940 EEAE08E0B3B91476A53D7C103BB51644902DDBD8D5D312FA8250FBD991DEE9D9 EE8F80E8C006501C835728565A17379AB20B8A42EA748B89A9455A4BE96A188D EB297A5E5B9EDF013FB7F0A6B0DE764C2FFECA5CD8131A2CEE0F3B677986C817 D780A97254B4874AC1107CBE7E5D50BED36E3E8DDBAE802E91BF6F6FD542DC39 972228FF7EAE055EE87461C3A71DE589111919FF2BE8E029B7F1AF1812843F04 365F0826545F7E90715CAA032DA1BDA735AAB0F15E0BD514F9AEDD665DD25A24 A1D64F99DF8AAE6B3AD06367A52E950F499630532F1C9E1CD5CADEEFB25C87FA DE5A680F49242390BD32F8F43627A95D4B38C0E3D0DBC8E513581371472B716B 8FC2E6A32D967915A5C3424F97B8F5491135FF95C6ADF5771E1BCD680F45A65B EAD116D32799F9320DDEA53129BE158C9A536CFAF7EB9E0441A4CF01D2EE6B27 624CD20941A5EEE2941EA8A5A2344CC24B5894323822A2F8F2A0FA18FB125E69 985D6597E6F92EF3986193B4A3EDCF2DA1072F35DCAEEF60806D5C4FB123E6B0 7F30FC3C200A61D66BDE764FA2EBD372EF38445C2108C8F4B5F034FC297FE95D 2278115D724098E5D78F0C3E6447D3BF82138744A1B68944DF195EC3968BB68B 5FA8E733FB5DEEABDCD56E13785F2F4723F21E29D516EF6210E778C54C89E977 C16B0943D7A1F409DFD89762947B8992A1CBFBF7C11531A7DADA4F9119FB0B9D 92B542A97028BA2A53CA76EE0D9E565F8C007877DAD1A7FCE19D37FD9F1A12A9 88908C683D25CD55056D6893EE5615BD199AEC941AE078732DCE097D97D46F8B 66573E0ED73018E2DC09F0BCF6923F8FAFDDC6ADB4EA71ABED1A00AF027EAC28 49F0684DA9F1C83379F97E843B0D4483198ACA8E6BDB49658AF0098B9DA5FC53 C2E698F1664A46A39C0C049DDDB06A3F1A1CE0C5BF1DB2A9046665B5C4D5B408 5E5B0E5DDD946108B029234B816A527BA9D0390B5B1E5C8A260877B5F1844A96 2A5B654BA5247C135A9F7484379DBBAEAA2DE43ACA421416B0CB35C6FF00954B DC5C04920E6FB75DCB349F4B247FF91A8A5F7F68FED985783D89391E55A2F007 D7138FBF079FCBE61095F9624C77792FBB5E47781BA1B541980DA0587D9B6B02 F6E8634AA1257196B9F776547C4FBC9C75ADD8105A9E81DE8DDF9248D90AA5CF 6F83C7ACE6A6FA9B3265A8E2FAF19FD9355F170DDD256AE0FF9EACDA4365A960 C549CE5D1DBC6F10B9DECBFFF15A7168D04C9F37AA6BDBFA798D1C42FAD997E3 78166857910AB42CA7C766180C366E0941218D882822808EC460F11E05DCC979 B4271104E67BE9540F6B8088479CECC6730EE3CC48937A35FF586124E70201A2 A12C764E0B08B2806BD0F7236A5D99510040926CB82168CC342F2C21FD0246F1 C828944979464154ABB4A4E2EC1C2DD5739983BDD25A8A54301691AC4DF39F8B 264EE083206F4BDA26A5BFD1A86BDD82486FEDB0ED45A6801672A22BF63696B6 F610EBBA9FDA12EC22205A6E798104FD0EAEB0526311C068F88533AC858AFC74 0716D50E6940EAF175579EDB8687CF7997F2AF5CD5E189226E163EA90EC1F484 8F25C002ECEEF24B65E635EBC98EC324E941C65E12A3D68D77AFA43C93632BAA C49B6F0B0A6F516E0829DC57387CB3A1A26F2C5864D3274069AE15A8899C2603 28F31B8C9EC6D50871A3B110FFE6180EB576C14E914B39E12BAE7A8B63F22A37 8FAFDAC7765239B0200C0342AA254C2B9D59F4DF3CFC9628E7392C0EBC6DB514 88597C221053C9A0416D4D14CC2E03B6449AE1249DA7848D2C061AC2DEFA3500 D5517D385A8ED33971D74C97EC8FAA2C3B530A15DC707A723709B1DA0F7F1942 5D2653E2A9DA0DFEBD00909BF59EC1BE50C4A35237526FBCCC17F913C33115A9 8C5931738527A71A46151A7E0F7805CA421368DDC8C823BBA747 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont TeXDict begin 39139632 55387786 1000 1200 1200 (dylp.dvi) @start /Fa 211[70 44[{TeXBase1Encoding ReEncodeFont}1 116.231 /Courier rf /Fb 133[64 2[124 83 91 51 58 45 1[102 98 91 140 30 2[30 91 101 47 97 102 97 102 102 51[50 45[{ TeXBase1Encoding ReEncodeFont}22 149.439 /AvantGarde-BookOblique rf /Fc 166[112 8[105 3[102 7[124 68[{TeXBase1Encoding ReEncodeFont}4 159.402 /Bookman-Demi rf /Fd 133[69 87 84 120 84 90 45 66 48 99 99 96 90 140 36 87 39 36 90 99 42 96 99 96 99 99 1[75 11[78 87 1[84 11[105 1[87 7[42 7[84 84 4[42 1[66 57 57 36[78 78 2[{TeXBase1Encoding ReEncodeFont}41 149.439 /AvantGarde-Demi rf /Fe 166[134 8[126 3[122 7[149 68[{ TeXBase1Encoding ReEncodeFont}4 191.283 /Bookman-Demi rf /Ff 134[64 3[73 41 46 36 1[82 78 73 112 24 2[24 3[78 82 77 1[82 46[66 50[{TeXBase1Encoding ReEncodeFont}16 119.551 /AvantGarde-Book rf /Fg 207[24 48[{}1 86.5083 /CMSY10 rf /Fh 133[44 5[35 41 3[69 64 4[21 2[33 68 101[{ TeXBase1Encoding ReEncodeFont}8 104.607 /AvantGarde-Book rf /Fi 163[120 92[{}1 166.044 /MSAM10 rf /Fk 148[50 107[{ TeXBase1Encoding ReEncodeFont}1 83.022 /Bookman-LightItalic rf /Fl 206[51 49[{TeXBase1Encoding ReEncodeFont}1 83.022 /Bookman-Light rf /Fn 134[80 84 135 88 92 64 64 60 1[88 80 92 124 48 88 44 48 88 80 64 68 88 68 84 84 23[76 9[76 16[44 1[44 4[48 39[{TeXBase1Encoding ReEncodeFont}29 199.253 /ZapfChancery-MediumItalic rf /Fo 154[116 101[{}1 166.044 /ZapfDingbats rf /Fp 150[28 105[{TeXBase1Encoding ReEncodeFont} 1 99.6264 /Bookman-LightItalic rf /Fr 134[80 4[45 1[53 1[80 1[82 1[37 6[72 3[82 97[{TeXBase1Encoding ReEncodeFont}8 132.835 /Bookman-LightItalic rf /Ft 200[62 62 62 62 62 62 62 49[{TeXBase1Encoding ReEncodeFont}7 99.6264 /Bookman-Light rf /Fu 134[124 120 159 120 132 92 104 92 1[128 124 135 199 68 132 68 72 135 116 76 116 128 116 120 116 9[187 143 147 139 132 155 1[132 159 147 187 128 159 1[80 163 155 135 143 155 147 143 143 7[132 132 132 132 132 132 132 132 132 132 1[68 1[68 41[147 2[{TeXBase1Encoding ReEncodeFont}58 199.253 /Bookman-Demi rf /Fw 177[90 11[88 66[{}2 116.231 /EUSM10 rf /Fx 193[94 13[33 48[{}2 121.112 /CMSY10 rf /Fy 40[29 8[83 26[64 54[23 124[{}4 116.231 /Symbol rf /Fz 138[72 40 63 1[65 70 2[102 33 70 33 33 2[40 1[74 56 1[72 12[70 5[84 2[84 8[84 66[{TeXBase1Encoding ReEncodeFont}18 116.231 /Bookman-LightItalic rf /FA 130[33 1[33 6[44 5[77 109 3[35 77 41[70 1[70 1[37 2[72 72 72 72 72 72 72 72 70 37 2[70 1[35 35 27[70 12[{TeXBase1Encoding ReEncodeFont}24 116.231 /Bookman-Light rf /FC 193[148 2[148 148 148 148 111 111 111 111 111 111 14[97 97 12[88 88 122 122 5[55 8[69 69 76 76{}22 166.044 /CMEX10 rf /FD 177[129 11[126 66[{}2 166.044 /EUSM10 rf /FE 143[144 4[87 5[77 77 77 77 59[173 173 37[{}8 173.017 /CMSY10 rf /FF 33[164 3[100 100 1[42 8[118 18[91 91 91 4[91 91 1[91 11[118 1[91 38[33 63[91 17[83 7[118 34[{}17 166.044 /Symbol rf /FG 133[86 100 90 146 90 103 56 90 66 93 100 90 103 146 46 100 46 46 103 93 56 90 106 80 100 103 12[100 106 116 1[100 126 120 143 96 120 93 53 3[113 1[120 120 116 18[50 53 45[{ TeXBase1Encoding ReEncodeFont}43 166.044 /Bookman-LightItalic rf /FH 133[87 125 87 3[77 97 2[106 7[97 87 2[97 47[97 2[97 49[{}11 180.986 /OmegaSerifGreek-Italic rf /FI 187[119 68[{}1 180.986 /OmegaSerifGreek rf /FJ 131[100 1[64 80 72 124 83 91 51 58 45 102 102 98 91 140 30 75 30 30 91 101 47 97 102 97 102 102 1[75 5[88 91 143 105 98 64 74 91 1[88 130 111 137 69 88 72 34 102 130 72 80 111 121 86 111 6[41 6[83 83 83 2[41 50 2[64 38[72 3[{ TeXBase1Encoding ReEncodeFont}60 149.439 /AvantGarde-Book rf /FK 166[93 8[88 3[85 7[104 68[{TeXBase1Encoding ReEncodeFont}4 132.835 /Bookman-Demi rf /FL 25[210 108[148 143 191 1[158 110 124 110 1[153 148 163 239 81 158 1[86 163 139 91 139 153 139 143 139 10[172 177 167 158 186 1[158 1[177 225 153 2[96 196 186 163 1[186 177 172 172 7[158 158 158 158 158 158 158 158 158 158 2[86 81 44[{ TeXBase1Encoding ReEncodeFont}52 239.103 /Bookman-Demi rf /FM 134[72 74 104 69 90 50 69 58 1[82 74 88 125 40 82 40 40 88 72 43 69 82 69 82 77 3[40 1[40 1[85 4[82 88 2[82 106 98 122 80 2[45 1[106 85 1[106 98 15[82 82 2[80 43 53 43 4[29 36[82 2[{TeXBase1Encoding ReEncodeFont}47 132.835 /Bookman-Light rf /FN 25[146 108[103 100 133 1[110 76 86 76 1[106 103 113 166 56 110 1[60 113 96 63 96 106 96 100 96 10[120 123 116 110 130 1[110 1[123 156 106 2[66 136 130 113 120 130 123 120 120 7[110 110 110 110 110 110 110 110 110 110 2[60 56 2[53 53 40[{ TeXBase1Encoding ReEncodeFont}55 166.044 /Bookman-Demi rf /FO 133[100 100 1[100 100 100 100 100 100 1[100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1[100 1[100 1[100 2[100 10[100 100 2[100 3[100 100 1[100 100 5[100 100 100 100 100 1[100 2[100 100 100 100 100 100 3[100 100 40[{TeXBase1Encoding ReEncodeFont}49 166.044 /Courier rf /FP 25[143 42[60 15[60 3[86 14[73 166 83 1[66 66 10[70 10[46 100 46 80 90 93 130 86 113 63 86 73 96 103 93 110 156 50 103 50 50 110 90 53 86 103 86 103 96 37 83 1[50 1[50 1[106 1[159 116 130 103 110 120 136 103 133 123 153 100 120 100 56 133 133 106 120 133 123 123 113 1[90 100 100 100 53 53 103 103 103 103 103 103 103 103 103 103 100 53 66 53 100 1[50 50 37 133 149 20[70 3[100 76 7[103 103 2[{TeXBase1Encoding ReEncodeFont}98 166.044 /Bookman-Light rf /FQ 138[135 76 1[88 2[112 8[64 104 1[104 124 116 17[159 2[120 3[159 14[124 6[124 1[124 3[64 44[{TeXBase1Encoding ReEncodeFont}16 199.253 /Bookman-Light rf /FR 134[178 9[178 195 287 3[103 3[166 184 166 1[166 16[189 3[184 17[98 58[{TeXBase1Encoding ReEncodeFont}12 286.924 /Bookman-Demi rf /FS 166[161 8[151 3[147 7[179 68[{TeXBase1Encoding ReEncodeFont}4 229.539 /Bookman-Demi rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 1200dpi TeXDict begin %%PaperSize: A4 end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 2052 4126 a FS(D)14 b(Y)g(L)g(P)7 b FR(:)121 b(a)97 b(dy)11 b(namic)97 b(LP)g(c)-7 b(od)e(e)3422 4956 y FQ(L)7 b(o)-6 b(u)63 b(Hafe)-5 b(r)3224 5537 y(Oc)f(to)c(be)-5 b(r)-11 b(,)60 b(2009)p eop end %%Page: 1 2 TeXDict begin 1 1 bop 0 9478 a FP(Co)-5 b(py)7 b(r)s(ight)50 b(\(C\))j(2005,)f(2006,)g(2007)-29 b(,)52 b(2008,)g(2009)g(L)5 b(o)-5 b(u)53 b(Hafe)l(r)0 9777 y(An)f(earlie)l(r)h(ve)l(rs)n(io)l(n)f (of)h(this)f(document)g(is)h(a)-7 b(v)r(aila)l(b)l(l)n(e)52 b(as)i(SFU-C)m(MP)5 b(T)50 b(TR)j(2005-18.)0 10076 y(All)61 b(r)s(ights)g(r)q(e)o(s)m(e)l(rve)l(d.)93 b(T)8 b(his)61 b(document)s(a)-8 b(tio)l(n)60 b(is)i(ma)-6 b(d)h(e)62 b(a)-7 b(v)r(aila)l(b)l(l)n(e)61 b(und)-5 b(e)l(r)61 b(th)l(e)h(te)l(r)5 b(ms)61 b(of)h(th)l(e)g(Eclips)m(e)f(Pu)-7 b(b)l(lic)0 10275 y(L)s(ic)h(ens)m(e)64 b(v1.0)h(whic)-7 b(h)63 b(a)n(cc)l(o)n(mpanie)o(s)h(this)g(dis)-5 b(tr)s(ib)d(u)l(tio)l (n.)99 b(A)64 b(c)l(o)-5 b(py)64 b(of)g(th)l(e)g(EPL)j(v1.0)d(can)h (als)n(o)f(be)g(o)-8 b(b)i(t)s(ai)s(n)n(e)l(d)0 10474 y(fr)q(o)n(m)53 b(th)l(e)f(URL)j FO(http://www.eclipse.org/leg)o(al/)o (ep)o(l-v)o(10.)o(ht)o(ml)p eop end %%Page: 1 3 TeXDict begin 1 2 bop 3545 3567 a FN(Abs)-5 b(tra)n(c)d(t)4 4032 y FM(D)8 b(Y)g(L)g(P)82 b FP(is)76 b(a)h(fu)l(ll)f(i)s(mpl)n(e)n (ment)s(a)-8 b(tio)l(n)74 b(of)i(th)l(e)g(dy)7 b(nam)s(ic)75 b(s)n(i)s(mpl)n(e)-5 b(x)77 b(algo)-7 b(r)s(ithm)76 b(fo)-7 b(r)76 b(li)s(n)n(ear)g(pr)q(ogramm)s(i)s(n)n(g.)134 b(Dy-)0 4231 y(nam)s(ic)83 b(s)n(i)s(mpl)n(e)-5 b(x)83 b(a)-8 b(tte)n(mpts)82 b(to)g(mai)s(nt)s(ai)s(n)h(a)g(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)82 b(a)n(c)-5 b(tive)83 b(c)l(o)l(ns)-5 b(trai)s(nt)81 b(sys)-5 b(te)n(m)82 b(by)g(r)q(e)-5 b(g)n(u)l(larly)82 b(p)-5 b(urg)t(i)s(n)n(g)0 4430 y(l)n(oos)m(e)55 b(c)l(o)l(ns)-5 b(trai)s(nts)55 b(and)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(with)e(unfa)-7 b(vo)i(ura)l(b)l(l)n(e)54 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)55 b(c)l(os)-5 b(ts,)56 b(and)f(a)-6 b(ddi)s(n)n(g)53 b(vio)-5 b(la)d(te)l(d)55 b(c)l(o)l(ns)-5 b(trai)s(nts)0 4630 y(and)54 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(with)f(fa)-7 b(vo)i(ura)l(b)l(l)n(e)53 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)54 b(c)l(os)-5 b(ts.)71 b(In)55 b(a)l(bs)-5 b(tra)n(c)g(t,)54 b(th)l(e)g(c)l(od)-5 b(e)55 b(alte)l(r)5 b(na)-8 b(te)o(s)54 b(be)-7 b(tween)54 b(pr)s(i)s(mal)h(and)0 4829 y(d)-7 b(ual)61 b(s)n(i)s(mpl)n(e)-5 b(x)63 b(algo)-7 b(r)s(ithms,)64 b(u)-7 b(s)n(i)s(n)n(g)61 b(d)-7 b(ual)62 b(s)n(i)s(mpl)n(e)-5 b(x)63 b(to)f(r)q(eo)-5 b(pti)s(m)s(is)m(e)62 b(afte)l(r)g(u)-6 b(pda)e(ti)s(n)n(g)60 b(th)l(e)i(c)l(o)l(ns)-5 b(trai)s(nt)61 b(s)m(e)-7 b(t)63 b(and)0 5028 y(pr)s(i)s(mal)53 b(s)n(i)s(mpl)n(e)-5 b(x)53 b(to)g(r)q(eo)-5 b(pti)s(m)s(is)m(e)53 b(afte)l(r)g(u)-6 b(pda)e(ti)s(n)n(g)51 b(th)l(e)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(s)m(e)-7 b(t.)p eop end %%Page: 1 4 TeXDict begin 1 3 bop 0 466 a FL(Co)-6 b(ntents)347 949 y FN(1)124 b(Intr)o(od)-7 b(u)i(c)d(tio)l(n)6037 b(5)347 1414 y(2)124 b(Nota)-8 b(tio)l(n)6372 b(7)347 1879 y(3)124 b(Upda)-8 b(tin)i(g)56 b(Fo)-7 b(r)s(m)h(ul\346)5532 b(9)783 2178 y FP(3.1)120 b(Bas)n(is)54 b(Upda)-8 b(te)o(s)176 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)259 b(9)783 2477 y(3.2)120 b(Pr)s(i)s(mal)53 b(V)-11 b(ar)s(i)s(a)l(b)l(l)n(e)54 b(Upda)-8 b(te)o(s)53 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)259 b(9)783 2776 y(3.3)120 b(Dual)53 b(V)-11 b(ar)s(i)s(a)l(b)l(l)n(e)53 b(Upda)-8 b(te)o(s)60 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)259 b(9)347 3241 y FN(4)124 b(Pr)r(icin)-6 b(g)55 b(Algo)-7 b(r)r(ithms)5391 b(11)783 3540 y FP(4.1)120 b(Pr)q(oj)l(ec)-5 b(te)l(d)53 b(Stee)-7 b(pe)o(s)i(t)53 b(Edg)n(e)e(Pr)s(ic)m(i)s(n)n(g)169 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)156 b(11)783 3839 y(4.2)120 b(Dual)53 b(Stee)-7 b(pe)o(s)i(t)53 b(Edg)n(e)e(Pr)s(ic)m(i)s(n)n(g)100 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(12)347 4303 y FN(5)124 b(Anti-De)-8 b(gen)j(e)l(ra)n(cy)54 b(Us)n(in)-6 b(g)56 b(a)h(Pe)l(rt)l(urbe)l(d)e(Su)-6 b(bpr)o(o)e(b)l(le)n(m)2968 b(15)347 4768 y(6)124 b(Lightweight)56 b(Anti-De)-8 b(gen)j(e)l(ra)n (cy)54 b(Meas)-8 b(ur)o(es)56 b(Bas)l(e)l(d)f(o)l(n)h(Hype)l(rplan)-5 b(e)57 b(Alignment)861 b(17)783 5067 y FP(6.1)120 b(Ac)-5 b(tiv)r(a)d(tio)l(n)51 b(of)i(Co)l(ns)-5 b(trai)s(nts)151 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(17)783 5366 y(6.2)120 b(Alignment)51 b(W)m(ith)h(Re)o(s)-8 b(pec)j(t)53 b(to)g(th)l(e)f(Obj)l(ec)-5 b(tive)53 b(Func)-5 b(tio)l(n)43 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)156 b(19)783 5665 y(6.3)120 b(Alignment)51 b(W)m(ith)h(Re)o(s)-8 b(pec)j(t)53 b(to)g(th)l(e)f(Dir)q(ec)-5 b(tio)l(n)52 b(of)g(Motio)l(n)144 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(20)347 6130 y FN(7)124 b(T)s(h)-7 b(e)56 b(LP)g(Bas)n(is)5905 b(22)813 6429 y FP(7)-29 b(.1)119 b(T)8 b(h)l(e)53 b(GL)s(PK)f(Bas)n(is)h(Mod)-7 b(u)l(l)n(e)52 b(Inte)l(r)5 b(fa)n(c)-6 b(e)125 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(22)813 6728 y(7)-29 b(.2)119 b(Fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)162 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)156 b(23)813 7027 y(7)-29 b(.3)119 b(Pivoti)s(n)n(g)137 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(24)347 7492 y FN(8)124 b(Accura)n(cy)55 b(Ch)-7 b(ec)f(ks)55 b(an)-5 b(d)56 b(Maintenan)-5 b(c)f(e)4024 b(25)347 7956 y(9)124 b(Scalin)-6 b(g)6379 b(27)238 8421 y(10)123 b(Gen)-5 b(e)l(ra)d(tin)i(g)56 b(So)-8 b(lu)l(tio)l(ns,)54 b(Rays,)i(an)-5 b(d)56 b(T)l(ab)l(leau)h(V) -13 b(ec)-8 b(to)h(rs)2867 b(28)681 8720 y FP(10.1)119 b(So)-5 b(l)n(u)l(tio)l(n)51 b(V)-12 b(ec)-5 b(to)e(rs)166 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)156 b(28)681 9019 y(10.2)119 b(T)s(a)l(b)l(l)n(ea)-8 b(u)52 b(V)-12 b(ec)-5 b(to)e(rs)64 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(29)681 9318 y(10.3)119 b(Rays)g(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(30)238 9783 y FN(11)123 b(Start)l(u)-6 b(p)6360 b(32)681 10082 y FP(11.1)119 b(Co)-5 b(ld)52 b(St)s(art)95 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)156 b(34)681 10381 y(11.2)119 b(W)-11 b(ar)5 b(m)54 b(St)s(art)115 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(35)3822 11400 y(1)p eop end %%Page: 2 5 TeXDict begin 2 4 bop 681 466 a FP(11.3)119 b(Hot)53 b(St)s(art)169 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(35)238 931 y FN(12)123 b(Dy)7 b(namic)55 b(Sim)-5 b(ple)e(x)5492 b(36)681 1230 y FP(12.1)119 b(No)-7 b(r)5 b(mal)53 b(Algo)-7 b(r)s(ithm)51 b(Fl)n(ow)143 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)156 b(36)681 1529 y(12.2)119 b(Err)q(o)-7 b(r)53 b(Rec)l(ove)l(ry)136 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(38)238 1994 y FN(13)123 b(Dual)56 b(Sim)-5 b(ple)e(x)5870 b(42)681 2293 y FP(13.1)119 b(Dual)53 b(T)r(o)-5 b(p)52 b(L)5 b(eve)l(l)125 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)156 b(43)681 2591 y(13.2)119 b(Dual)53 b(Phas)m(e)f(II)104 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(43)681 2890 y(13.3)119 b(Pivoti)s(n)n(g)137 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(45)681 3189 y(13.4)119 b(Se)l(l)n(ec)-5 b(tio)l(n)52 b(of)h(th)l(e)f(L)5 b(ea)-7 b(vi)s(n)n(g)52 b(V)-11 b(ar)s(i)s(a)l(b)l (l)n(e)86 b(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(46)681 3488 y(13.5)119 b(St)s(andar)q(d)52 b(Dual)h(Pivot)85 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(46)681 3787 y(13.6)119 b(Gen)n(e)l(ralis)m(e)l(d)52 b(Dual)h(Pivot)169 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)156 b(47)238 4252 y FN(14)123 b(Pr)r(im)n(al)56 b(Sim)-5 b(ple)e(x)5698 b(50)681 4551 y FP(14.1)119 b(Pr)s(i)s(mal)53 b(T)r(o)-5 b(p)53 b(L)5 b(eve)l(l)118 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(50)681 4850 y(14.2)119 b(Pr)s(i)s(mal)53 b(Phas)m(e)g(I)153 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)156 b(51)681 5148 y(14.3)119 b(Pr)s(i)s(mal)53 b(Phas)m(e)g(II)97 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(54)681 5447 y(14.4)119 b(Pivoti)s(n)n(g)137 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(55)681 5746 y(14.5)119 b(Se)l(l)n(ec)-5 b(tio)l(n)52 b(of)h(th)l(e)f(Ente)l(r) s(i)s(n)n(g)f(V)-11 b(ar)s(i)s(a)l(b)l(l)n(e)138 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(56)681 6045 y(14.6)119 b(St)s(andar)q(d)52 b(Pr)s(i)s(mal)h(Pivot)79 b(.)k(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(56)681 6344 y(14.7)119 b(Extend)-5 b(e)l(d)52 b(Pr)s(i)s(mal)h(Pivot)82 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(57)238 6809 y FN(15)123 b(V)-12 b(ar)r(iab)l(le)55 b(Manage)n(ment)5157 b(58)681 7108 y FP(15.1)119 b(V)-11 b(ar)s(i)s(a)l(b)l(l)n(e)54 b(Manag)n(e)n(ment)c(Pr)s(i)s(m)s(itive)o (s)75 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(58)681 7407 y(15.2)119 b(Ac)-5 b(tiv)r(a)d(tio)l(n)51 b(of)i(V)-11 b(ar)s(i)s(a)l(b)l(l)n(e)o(s)86 b(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)156 b(59)681 7706 y(15.3)119 b(Dea)n(c)-5 b(tiv)r(a)d(tio)l(n)51 b(of)i(V)-11 b(ar)s(i)s(a)l(b)l(l)n (e)o(s)158 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(60)681 8004 y(15.4)119 b(Initi)s(al)53 b(V)-11 b(ar)s(i)s(a)l(b)l(l)n (e)53 b(Se)l(l)n(ec)-5 b(tio)l(n)49 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(61)238 8469 y FN(16)123 b(Co)l(ns)-5 b(traint)56 b(Manage)n(ment)4929 b(62)681 8768 y FP(16.1)119 b(Initi)s(al)53 b(Co)l(ns)-5 b(trai)s(nt)51 b(Se)l(l)n(ec)-5 b(tio)l(n)117 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)156 b(62)681 9067 y(16.2)119 b(Ac)-5 b(tiv)r(a)d(tio)l(n)51 b(of)i(Co)l(ns)-5 b(trai)s(nts)151 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)156 b(62)681 9366 y(16.3)119 b(Dea)n(c)-5 b(tiv)r(a)d(tio)l(n)51 b(of)i(Co)l(ns)-5 b(trai)s(nts)87 b(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(63)238 9831 y FN(17)127 b FK(D)8 b(Y)g(L)g(P)61 b FN(Inte)l(r)s(fa)n (c)-6 b(e)5772 b(65)710 10130 y FP(17)-29 b(.1)119 b(Si)s(mpl)n(e)-5 b(x)53 b(So)-5 b(lve)l(r)141 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(65)710 10429 y(17)-29 b(.2)119 b(Parame)-7 b(te)l(r)54 b(Ro)-5 b(u)l(ti)s(n)n(e)o(s)148 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)156 b(65)3822 11400 y(2)p eop end %%Page: 3 6 TeXDict begin 3 5 bop 710 466 a FP(17)-29 b(.3)119 b(Bas)n(is)54 b(Pa)n(c)-8 b(kag)n(e)51 b(Initi)s(alisa)-8 b(tio)l(n)73 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(66)710 765 y(17)-29 b(.4)119 b(Info)-7 b(r)5 b(ma)-8 b(tio)l(n)52 b(and)g(Err)q(o)-7 b(r)52 b(Me)o(s)-5 b(sag)n(e)o(s)97 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(67)710 1064 y(17)-29 b(.5)119 b(Summary)52 b(of)57 b FM(D)8 b(Y)g(L)g(P)58 b FP(St)s(art)l(u)-6 b(p)52 b(and)h(Shu)l(tdown)163 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)156 b(68)710 1363 y(17)-29 b(.6)119 b(So)-5 b(l)n(u)l(tio)l(n,)51 b(Ray)-17 b(,)52 b(and)h(T)s(a)l(b)l(l)n(ea)-8 b(u)52 b(Ro)-5 b(u)l(ti)s(n)n(e)o(s)172 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(68)710 1662 y(17)-29 b(.7)119 b(Pr)s(ic)m(i)s(n)n(g)51 b(Ro)-5 b(u)l(ti)s(n)n(e)o(s)137 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(71)710 1960 y(17)-29 b(.8)119 b(Pr)s(i)s(nt)53 b(Ro)-5 b(u)l(ti)s(n)n(e)o(s) 157 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)156 b(72)710 2259 y(17)-29 b(.9)119 b(Utility)51 b(Ro)-5 b(u)l(ti)s(n)n(e)o(s)68 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(72)607 2558 y(17)-29 b(.10)119 b(T)8 b(h)l(e)53 b(L)s(P)f(Pr)q(o)-8 b(b)l(l)n(e)n(m)52 b(Spec)m(i\002ca)-8 b(tio)l(n)79 b(.)k(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(73)607 2857 y(17)-29 b(.11)123 b FM(D)8 b(Y)g(L)g(P)59 b FP(Optio)l(ns)117 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)156 b(75)607 3156 y(17)-29 b(.12)123 b FM(D)8 b(Y)g(L)g(P)59 b FP(T)r(o)-5 b(l)n(e)l(ranc)f(e)o(s)170 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)156 b(82)238 3621 y FN(18)127 b FK(D)8 b(Y)g(L)g(P)61 b FN(Sta)-8 b(tis)j(tics)5732 b(86)238 4086 y(19)127 b FK(D)8 b(Y)g(L)g(P)61 b FN(Deb)-8 b(ugg)t(in)i(g)55 b(Fea)-8 b(t)l(ur)o(es)4863 b(89)681 4385 y FP(19.1)119 b(Pr)s(i)s(nti)s(n)n(g)127 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(89)681 4684 y(19.2)119 b(Paran)m(oi)s(a)66 b(.)83 b(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)156 b(90)3822 11400 y(3)p eop end %%Page: 4 7 TeXDict begin 4 6 bop 0 475 a FL(Lis)-7 b(t)80 b(of)h(Figur)n(es)408 959 y FP(1)120 b(Call)52 b(Gra)-6 b(p)g(h)53 b(fo)-7 b(r)53 b FJ(dy_f)-6 b(actor)111 b FP(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(23)408 1257 y(2)124 b FM(D)8 b(Y)g(L)g(P)58 b FP(s)-5 b(t)s(art)l(u)f(p)53 b(s)m(eq)l(u)l(enc)-6 b(e)49 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(33)408 1556 y(3)120 b(Dy)7 b(nam)s(ic)52 b(Si)s(mpl)n(e)-5 b(x)52 b(Algo)-7 b(r)s(ithm)52 b(Fl)n(ow)108 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)156 b(37)408 1855 y(4)120 b(Err)q(o)-7 b(r)52 b(Rec)l(ove)l(ry)g(Ac)-5 b(tio)l(ns)52 b(fo)-7 b(r)53 b(Pr)s(i)s(mal)g(Si)s(mpl)n(e)-5 b(x)53 b(Err)q(o)-7 b(r)52 b(Ou)l(tc)l(o)n(me)o(s)132 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(39)408 2154 y(5)120 b(Err)q(o)-7 b(r)52 b(Rec)l(ove)l(ry)g(Ac)-5 b(tio)l(ns)52 b(fo)-7 b(r)53 b(Dual)g(Si)s(mpl)n(e)-5 b(x)52 b(Err)q(o)-7 b(r)52 b(Ou)l(tc)l(o)n(me)o(s)139 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(41)408 2453 y(6)120 b(Call)52 b(Gra)-6 b(p)g(h)53 b(fo)-7 b(r)53 b(Dual)f(Si)s(mpl)n(e)-5 b(x)122 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)156 b(42)408 2752 y(7)120 b(Dual)52 b(Phas)m(e)h(II)g(Algo)-7 b(r)s(ithm)52 b(Fl)n(ow)175 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)156 b(44)408 3051 y(8)120 b(Call)52 b(Gra)-6 b(p)g(h)53 b(fo)-7 b(r)53 b(Dual)f(Pivoti)s(n)n(g)120 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(45)408 3350 y(9)120 b(Call)52 b(Gra)-6 b(p)g(h)53 b(fo)-7 b(r)53 b(Pr)s(i)s(mal)g(Si)s(mpl)n(e)-5 b(x)115 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(50)305 3649 y(10)120 b(Pr)s(i)s(mal)53 b(Phas)m(e)f(I)i(Algo)-7 b(r)s(ithm)51 b(Fl)n(ow)89 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)156 b(52)305 3947 y(11)120 b(Pr)s(i)s(mal)53 b(Phas)m(e)f(II)i(Algo)-7 b(r)s(ithm)51 b(Fl)n(ow)169 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(54)305 4246 y(12)120 b(Call)52 b(Gra)-6 b(p)g(h)53 b(fo)-7 b(r)53 b(Pr)s(i)s(mal)g(Pivoti)s(n)n(g)113 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(55)305 4545 y(13)120 b(Call)52 b(Gra)-6 b(p)g(h)53 b(fo)-7 b(r)53 b(V)-11 b(ar)s(i)s(a)l(b)l(l)n(e)53 b(Manag)n(e)n(ment)e (Ro)-5 b(u)l(ti)s(n)n(e)o(s)57 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(58)305 4844 y(14)120 b(Call)52 b(Gra)-6 b(p)g(h)53 b(fo)-7 b(r)53 b(Co)l(ns)-5 b(trai)s(nt)51 b(Manag)n(e)n(ment)g(Ro)-5 b(u)l(ti)s(n)n(e)o(s)125 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(62)0 5523 y FL(Lis)-7 b(t)80 b(of)h(T)-5 b(ab)f(les)408 6007 y FP(1)120 b(Summary)51 b(of)i(Dual)g(Si)s(mpl)n(e)-5 b(x)52 b(Pivoti)s(n)n(g)f(Ru)l(l)n(e)o(s)160 b(.)83 b(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)156 b(47)408 6305 y(2)120 b(Summary)51 b(of)i(Pr)s(i)s(mal)g (Si)s(mpl)n(e)-5 b(x)53 b(Pivoti)s(n)n(g)e(Ru)l(l)n(e)o(s)153 b(.)83 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)156 b(56)3822 11400 y(4)p eop end %%Page: 5 8 TeXDict begin 5 7 bop 0 475 a FL(1)239 b(Intr)n(od)-11 b(u)k(c)-12 b(tio)-6 b(n)4 959 y FM(D)8 b(Y)g(L)g(P)49 b FP(is)44 b(a)g(li)s(n)n(ear)f(pr)q(ogramm)s(i)s(n)n(g)f(\(L)s(P\))h (c)l(od)-5 b(e)43 b(d)-5 b(e)o(s)n(ign)n(e)l(d)43 b(to)g(be)h(u)-7 b(s)m(e)l(d)43 b(as)h(th)l(e)f(und)-5 b(e)l(rlyi)s(n)n(g)41 b(L)s(P)i(c)l(od)-5 b(e)43 b(i)s(n)h(a)f(b)-5 b(ranc)e(h-)0 1158 y(and-cu)l(t)72 b(i)s(nte)-5 b(g)n(e)l(r)72 b(li)s(n)n(ear)h(pr)q (ogramm)s(i)s(n)n(g)e(\(IP\))h(c)l(od)-5 b(e.)126 b(It)73 b(e)n(mp)-6 b(has)n(is)m(e)o(s)73 b(c)l(o)l(nvenienc)-6 b(e)71 b(of)i(u)-7 b(s)m(e)73 b(by)f(th)l(e)h(client,)0 1357 y(particu)l(larly)68 b(with)g(r)q(e)o(s)-8 b(pec)j(t)70 b(to)f(\002x)10 b(i)s(n)n(g)68 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(and)f (a)-6 b(ddi)s(n)n(g)68 b(and)h(d)-5 b(e)l(l)n(e)e(ti)s(n)n(g)68 b(c)l(o)l(ns)-5 b(trai)s(nts)69 b(and)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)o (s.)0 1556 y(T)8 b(h)l(e)70 b(t)s(arg)n(e)-7 b(t)70 b(u)-7 b(s)m(e)l(r)70 b(po)-5 b(p)g(u)l(la)d(tio)l(n)68 b(is)j(IP)f(algo)-7 b(r)s(ithm)70 b(d)-5 b(eve)l(l)n(o)g(pe)l(rs;)79 b(as)71 b(s)-8 b(u)j(c)e(h,)78 b FM(D)8 b(Y)g(L)g(P)76 b FP(e)n(mp)-6 b(has)n(is)m(e)o(s)71 b(c)l(o)l(ntr)q(o)-5 b(lla)l(bility)0 1756 y(and)53 b(c)l(o)l(nvenienc)-6 b(e)52 b(ove)l(r)i(e)l(\002)-49 b(\002c)m(iency)52 b(and)h(is)h(ca)-6 b(pa)l(b)l(l)n(e)53 b(of)h(pr)q(od)-7 b(u)i(c)m(i)s(n)n(g)50 b(c)l(o)-5 b(pio)g(u)e(s)54 b(amo)-5 b(unts)52 b(of)i(o)-5 b(u)l(tp)g(u)l(t)52 b(fo)-7 b(r)54 b(u)-7 b(s)m(e)53 b(i)s(n)0 1955 y(d)-5 b(e)l(b)d(u)l(gg)t(i)s (n)n(g.)253 2254 y FM(D)8 b(Y)g(L)g(P)61 b FP(i)s(mpl)n(e)n(ments)54 b(a)i(dy)7 b(nam)s(ic)54 b(s)n(i)s(mpl)n(e)-5 b(x)55 b(algo)-7 b(r)s(ithm)54 b(al)n(o)l(n)n(g)g(th)l(e)h(li)s(n)n(e)o(s)g(s) m(e)-7 b(t)56 b(o)-5 b(u)l(t)54 b(by)h(Pa)-6 b(dbe)l(rg)53 b(i)s(n)i([9,)h(\2476.6].)0 2453 y(T)8 b(h)l(e)61 b(c)l(o)-7 b(r)q(e)62 b(id)-5 b(ea)61 b(is)g(tha)-8 b(t,)63 b(a)-8 b(t)61 b(any)g(g)t(iven)f(ti)s(me,)k(many)c(of)i(th)l(e)e(c)l(o)l(ns)-5 b(trai)s(nts)61 b(of)g(a)g(L)s(P)h(pr)q(o)-8 b(b)l(l)n(e)n(m)60 b(ar)q(e)h(l)n(oos)m(e,)j(and)0 2652 y(many)40 b(n)m(o)l(n)m(bas)n(ic)g (v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(ar)q(e)f(unlike)l(ly)e(to)i(eve)l(r)h (be)f(c)l(o)l(ns)n(id)-5 b(e)l(r)q(e)l(d)40 b(fo)-7 b(r)41 b(pivoti)s(n)n(g)f(beca)-8 b(u)h(s)m(e)41 b(th)l(eir)f(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)41 b(c)l(os)-5 b(ts)0 2851 y(ar)q(e)56 b(ve)l(ry)g(unfa)-7 b(vo)i(ura)l(b)l(l)n(e.)73 b(A)56 b(r)q(o)-5 b(u)l(gh)54 b(o)-5 b(u)l(tli)s(n)n(e)56 b(of)g(th)l(e)f (algo)-7 b(r)s(ithm,)56 b(n)n(e)-5 b(gl)n(ec)g(ti)s(n)n(g)54 b(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s,)55 b(i)s(nfeas)n(ibility)-17 b(,)0 3051 y(and)52 b(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n)51 b(is)-5 b(s)d(u)l(e)o(s,)53 b(is)g(as)h(fo)-5 b(ll)n(ows.)249 3350 y(Fr)q(o)n(m)75 b(th)l(e)e(pr)q(o)-8 b(b)l(l)n(e)n(m)74 b(s)-8 b(u)i(p)e(plie)l(d)73 b(by)g(th)l(e)h(client,)83 b FM(D)8 b(Y)g(L)g(P)80 b FP(c)-7 b(h)n(oos)m(e)o(s)75 b(an)f(i)s(niti)s(al)f(s)-8 b(u)h(bs)m(e)g(t)74 b(of)g(c)l(o)l(ns)-5 b(trai)s(nts)74 b(and)0 3549 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)64 b(to)f(bec)l(o)n(me)h(th)l(e)f(a)n(c)-5 b(tive)63 b(sys)-5 b(te)n(m.)97 b(T)8 b(his)63 b(sys)-5 b(te)n(m)62 b(is)i(s)n(o)-5 b(lve)l(d)63 b(to)g(o)-5 b(pti)s(mality)62 b(with)g(pr)s(i)s(mal)i(s)n (i)s(mpl)n(e)-5 b(x.)4 3748 y FM(D)8 b(Y)g(L)g(P)61 b FP(th)l(en)54 b(ente)l(rs)h(a)g(m)s(i)s(n)m(o)-7 b(r)55 b(l)n(oo)-5 b(p)55 b(wh)l(e)l(r)q(e)f(it)h(d)-5 b(ea)n(c)g(tiv)r(a)d (te)o(s)55 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(wh)n(os)m(e)f(r)q(e)l(d) -7 b(u)i(c)f(e)l(d)54 b(c)l(os)-5 b(ts)56 b(ar)q(e)f(wo)-7 b(rs)m(e)55 b(than)0 3947 y(a)63 b(thr)q(e)o(s)-8 b(h)n(o)j(ld,)63 b(a)n(c)-5 b(tiv)r(a)d(te)o(s)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(wh) n(os)m(e)e(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)62 b(c)l(os)-5 b(ts)63 b(ar)q(e)g(fa)-7 b(vo)i(ura)l(b)l(l)n(e,)64 b(and)e(r)q(eo)-5 b(pti)s(m)s(is)m(e)o(s)63 b(th)l(e)f(sys)-5 b(te)n(m)0 4147 y(with)65 b(pr)s(i)s(mal)i(s)n(i)s(mpl)n(e)-5 b(x.)108 b(T)8 b(his)67 b(m)s(i)s(n)m(o)-7 b(r)66 b(l)n(oo)-5 b(p)66 b(is)h(r)q(e)-7 b(pea)f(te)l(d)67 b(until)f(th)l(e)l(r)q(e)g(ar) q(e)h(n)m(o)f(mo)-7 b(r)q(e)67 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(s)-8 b(uit)s(a)l(b)l(l)n(e)67 b(fo)-7 b(r)0 4346 y(entry)-17 b(.)89 b(Ne)-5 b(xt,)67 b FM(D)8 b(Y)g(L)g(P)66 b FP(d)-5 b(ea)n(c)g(tiv)r(a)d(te)o(s)61 b(any)f(l)n(oos)m(e)h(c)l(o)l(ns)-5 b(trai)s(nts,)62 b(a)n(c)-5 b(tiv)r(a)d(te)o(s)61 b(any)f(c)l(o)l(ns)-5 b(trai)s(nts)60 b(whic)-7 b(h)60 b(ar)q(e)h(vio)-5 b(la)d(te)l(d)0 4545 y(a)g(t)81 b(th)l(e)g(curr)q(ent)g(bas)n(ic)h(s)n(o)-5 b(l)n(u)l(tio)l(n,)87 b(and)81 b(r)q(eo)-5 b(pti)s(m)s(is)m(e)o(s)82 b(with)e(d)-7 b(ual)81 b(s)n(i)s(mpl)n(e)-5 b(x.)152 b(On)80 b(r)q(e)-5 b(gai)s(ni)s(n)n(g)80 b(feas)n(ibility)-17 b(,)88 b(it)0 4744 y(r)q(e)-7 b(t)l(ur)5 b(ns)56 b(to)g(pr)s(i)s(mal)g (s)n(i)s(mpl)n(e)-5 b(x)57 b(and)e(th)l(e)h(d)-5 b(ea)n(c)g(tiv)r(a)d (te/a)n(c)j(tiv)r(a)d(te)54 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)j(l)n(oo)-5 b(p.)75 b(Wh)l(en)55 b(th)l(e)l(r)q(e)h(ar)q(e)g(n)m(o)f(v)r(ar)s(i)s (a)l(b)l(l)n(e)o(s)0 4944 y(with)48 b(fa)-7 b(vo)i(ura)l(b)l(l)n(e)49 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)48 b(c)l(os)-5 b(ts)50 b(amo)l(n)n(g)d(th)l(e)i(i)s(na)n(c)-5 b(tive)49 b(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s)h(and)f(n)m(o)f(vio)-5 b(la)d(te)l(d)49 b(c)l(o)l(ns)-5 b(trai)s(nts)48 b(amo)l(n)n(g)g(th)l(e)0 5143 y(i)s(na)n(c)-5 b(tive)52 b(c)l(o)l(ns)-5 b(trai)s(nts,)52 b(th)l(e)h(s)n(o)-5 b(l)n(u)l(tio)l(n)51 b(is)i(o)-5 b(pti)s(mal.)249 5442 y(T)8 b(h)l(e)56 b(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x)57 b(algo)-7 b(r)s(ithm)56 b(u)-7 b(s)m(e)l(d)56 b(by)k FM(D)8 b(Y)g(L)g(P)62 b FP(is)56 b(a)h(two-p)-6 b(has)m(e)55 b(algo)-7 b(r)s(ithm.)75 b(Phas)m(e)56 b(I)h(u)-7 b(s)m(e)o(s)57 b(a)f(dy)7 b(nam-)0 5641 y(ically)75 b(modi\002e)l(d)g (o)-8 b(bj)l(ec)j(tive)75 b(to)g(a)-8 b(tt)s(ai)s(n)75 b(a)h(pr)s(i)s(mal)g(feas)n(ib)l(l)n(e)g(s)n(o)-5 b(l)n(u)l(tio)l(n.) 132 b(Both)74 b(p)-6 b(has)m(e)76 b(I)g(and)f(p)-6 b(has)m(e)75 b(II)h(u)-7 b(s)m(e)76 b(a)0 5840 y(pr)q(oj)l(ec)-5 b(te)l(d)59 b(s)-5 b(tee)e(pe)o(s)i(t)61 b(e)l(dg)n(e)e(\(PSE\))f(pr)s(ic)m(i)s(n)n (g)g(algo)-7 b(r)s(ithm)58 b(o)-5 b(u)l(tli)s(n)n(e)l(d)59 b(by)g(Fo)-7 b(rr)q(e)o(s)i(t)60 b(&)g(Go)-5 b(ldfarb)58 b([3,)j(algo)-7 b(r)s(ithm)59 b(`dy-)0 6040 y(nam)s(ic'].)119 b(T)8 b(h)l(e)l(r)q(e)70 b(ar)q(e)h(two)g(antid)-5 b(e)g(g)n(en)n(e)l (ra)n(cy)68 b(me)-7 b(th)n(ods.)120 b(T)8 b(h)l(e)70 b(\002rs)-5 b(t,)76 b(r)q(e)l(fe)l(rr)q(e)l(d)70 b(to)h(as)g(`anti-d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)69 b(lite')-17 b(,)0 6239 y(a)-8 b(tte)n(mpts)55 b(to)h(r)q(e)o(s)n(o)-5 b(lve)57 b(tie)o(s)f(amo)l(n)n(g)f(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)55 b(pivots)h(by)f(c)-7 b(h)n(oos)n(i)s(n)n(g)56 b(th)l(e)f(pivot)h(i)s(n) g(s)-8 b(u)j(c)e(h)56 b(a)g(way)f(as)i(to)f(make)0 6438 y(tight)c(a)i(hype)l(rplan)n(e)e(whic)-7 b(h)52 b(has)h(a)h(d)-5 b(e)o(s)n(ira)l(b)l(l)n(e)54 b(alignment.)66 b(T)8 b(h)l(e)53 b(s)m(ec)l(o)l(nd,)f(a)-6 b(p)e(plie)l(d)53 b(wh)l(en)f(th)l(e)h (\002rs)-5 b(t)53 b(t)s(ake)o(s)h(too)0 6637 y(l)n(o)l(n)n(g)48 b(to)i(r)q(e)o(s)n(o)-5 b(lve)50 b(th)l(e)f(d)-5 b(e)g(g)n(en)n(e)l(ra) n(cy)-17 b(,)49 b(is)h(a)g(pe)l(rt)l(urba)-8 b(tio)l(n)47 b(algo)-7 b(r)s(ithm)49 b(whic)-7 b(h)49 b(b)-8 b(uilds)48 b(o)l(n)h(a)h(me)-7 b(th)n(od)50 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)50 b(by)0 6837 y(R)10 b(yan)51 b(&)i(Osbo)-7 b(r)5 b(n)n(e)53 b([10)o(].)249 7135 y(T)8 b(h)l(e)58 b(d)-7 b(ual)58 b(s)n(i)s(mpl)n(e)-5 b(x)59 b(algo)-7 b(r)s(ithm)57 b(pr)q(ovid)-5 b(e)o(s)59 b(o)l(nly)e(a)h(s)m(ec)l(o)l(nd)g(p)-6 b(has)m(e)58 b(with)f(d)-7 b(ual)58 b(s)-5 b(tee)e(pe)o(s)i(t)59 b(e)l(dg)n(e)f (\(DSE\))f(pr)s(ic-)0 7335 y(i)s(n)n(g)79 b([3)o(,)87 b(algo)-7 b(r)s(ithm)79 b(`s)-5 b(tee)e(pe)o(s)i(t)80 b(1'],)86 b(s)-5 b(t)s(andar)q(d)79 b(o)-7 b(r)80 b(g)n(en)n(e)l(ralis) m(e)l(d)e(pivoti)s(n)n(g,)85 b(and)79 b(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(ns)79 b(of)g(anti-)0 7534 y(d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)56 b(lite)h(and)g(pe)l(rt)l(urba)-8 b(tio)l(n-bas)m(e)l(d)55 b(antid)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)55 b(i)s(n)i(th)l(e)g(d)-7 b(ual)56 b(s)-8 b(pa)n(c)i(e.)80 b(In)57 b(th)l(e)g(c)l(o)l(nte)-5 b(xt)56 b(of)61 b FM(D)8 b(Y)g(L)g(P)t FP(,)0 7733 y(it)63 b(is)h(th)l(e)f(s)-8 b(u)h(bo)g(r)q(di)s(na)f(te)62 b(s)n(i)s(mpl)n(e) -5 b(x,)67 b(u)-7 b(s)m(e)l(d)63 b(fo)-7 b(r)64 b(r)q(eo)-5 b(pti)s(m)s(isa)d(tio)l(n)62 b(afte)l(r)i(a)-6 b(ddi)s(n)n(g)62 b(c)l(o)l(ns)-5 b(trai)s(nts)63 b(and)g(as)h(th)l(e)f(i)s(niti)s(al)0 7932 y(s)n(i)s(mpl)n(e)-5 b(x)53 b(wh)l(en)f(th)l(e)g(pr)q(o)-8 b(b)l(l)n(e)n(m)52 b(is)h(d)-7 b(ual)52 b(feas)n(ib)l(l)n(e)h(b)-8 b(u)l(t)52 b(n)m(ot)g(pr)s(i)s(mal)h(feas)n(ib)l(l)n(e.)249 8231 y(T)8 b(h)l(e)50 b(a)n(c)-5 b(tive)50 b(and)g(i)s(na)n(c)-5 b(tive)50 b(c)l(o)l(ns)-5 b(trai)s(nt)49 b(sys)-5 b(te)n(ms)50 b(ar)q(e)h(mai)s(nt)s(ai)s(n)n(e)l(d)f(with)f(th)l(e)54 b FM(C)8 b(O)g(N)g(S)g(Y)g(S)56 b FP(s)-8 b(u)h(b)i(r)q(o)g(u)l(ti)s(n) n(e)49 b(lib)-5 b(rary)0 8431 y([5].)106 b(Bas)n(is)67 b(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)65 b(and)h(pivoti)s(n)n(g)f(ar)q(e)h (handl)n(e)l(d)g(u)-7 b(s)n(i)s(n)n(g)66 b(th)l(e)g(bas)n(is)h(mai)s (ntenanc)-6 b(e)65 b(pa)n(c)-8 b(kag)n(e)65 b(fr)q(o)n(m)i(GL)s(PK)0 8630 y([6,)53 b(7)o(].)253 8929 y FM(D)8 b(Y)g(L)g(P)59 b FP(is)54 b(wr)s(itten)e(i)s(n)h(C)g(and)g(pr)q(ovid)-5 b(e)o(s)53 b(a)h(na)-8 b(tive)53 b(C)g(i)s(nte)l(r)5 b(fa)n(c)-6 b(e.)67 b(It)54 b(can)f(be)h(u)-7 b(s)m(e)l(d)53 b(as)h(a)f(s)-5 b(t)s(andal)n(o)l(n)n(e)53 b(s)n(i)s(mpl)n(e)-5 b(x)0 9128 y(L)s(P)53 b(c)l(od)-5 b(e)52 b(with)g(o)l(nly)f(a)i(m)s(i)s (ni)s(mal)g(s)-8 b(h)l(e)l(ll)52 b(r)q(eq)l(uir)q(e)l(d)g(to)h(g)n(en)n (e)l(ra)-8 b(te)52 b(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)52 b(sys)-5 b(te)n(m.)249 9427 y(In)60 b(th)l(e)g(c)l(o)l(nte)-5 b(xt)60 b(of)g(a)h(b)-5 b(ranc)e(h-and-cu)l(t)59 b(c)l(od)-5 b(e,)66 b FM(D)8 b(Y)g(L)g(P)67 b FP(e)-5 b(xpec)g(ts)60 b(tha)-8 b(t)60 b(th)l(e)g(do)n(m)s(i)s(nant)g(mod)-5 b(e)60 b(of)g(u)-7 b(s)m(e)61 b(will)e(be)0 9626 y(s)-8 b(u)j(cc)f(e)o(s)h(s)n(ive)68 b(calls)g(to)f(r)q(eo)-5 b(pti)s(m)s(is)m(e)66 b(a)i(c)l(o)l(ns)-5 b(trai)s(nt)66 b(sys)-5 b(te)n(m)66 b(tha)-8 b(t)66 b(is)h(i)s(nc)-8 b(r)q(e)n(ment)s(ally)65 b(modi\002e)l(d)h(be)-7 b(tween)67 b(calls.)0 9825 y(On)84 b(r)q(eq)l(u)l(e)o(s)-5 b(t,)92 b(it)84 b(will)f(mai)s(nt)s(ai)s(n)h(its)h(i)s(nte)l(r)5 b(nal)83 b(s)-5 b(t)s(a)d(te)85 b(\(c)l(o)l(ns)-5 b(trai)s(nt)83 b(sys)-5 b(te)n(m,)91 b(bas)n(is)85 b(i)s(nve)l(rs)m(e,)92 b(and)84 b(s)-8 b(u)i(p)e(po)h(rt)0 10025 y(da)f(t)s(a)75 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s\))75 b(be)-7 b(tween)75 b(calls)g(to)g(s)-8 b(u)i(p)e(po)h(rt)75 b(e)l(\002)-49 b(\002c)m(ient)74 b(h)n(ot)h(s)-5 b(t)s(arts)76 b(fo)-7 b(r)75 b(r)q(eo)-5 b(pti)s(m)s(isa)d(tio)l(n.)131 b(Beca)-8 b(u)h(s)m(e)79 b FM(D)8 b(Y)g(L)g(P)0 10224 y FP(mai)s(nt)s(ai)s(ns)47 b(this)f(i)s(nte)l(r)5 b(nal)46 b(s)-5 b(t)s(a)d(te,)49 b(it)e(doe)o(s)g(n)m(ot)f(pr)q(ovid)-5 b(e)47 b(a)g(na)-8 b(tive)47 b(ca)-6 b(pa)l(bility)46 b(to)h(i)s(nte)l(rl)n(ea)-7 b(ve)47 b(o)-5 b(pti)s(m)s(isa)d(tio)l(n)46 b(and)0 10423 y(r)q(eo)-5 b(pti)s(m)s(isa)d(tio)l(n)55 b(of)h(dis)-5 b(ti)s(nc)g(t)56 b(c)l(o)l(ns)-5 b(trai)s(nt)55 b(sys)-5 b(te)n(ms.)79 b FM(D)8 b(Y)g(L)g(P)62 b FP(pr)q(ovid)-5 b(e)o(s)57 b(two)e(s)-8 b(pec)m(i)s(alis)m(e)l(d)56 b(i)s(nte)l(r)5 b(fa)n(c)-6 b(e)56 b(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)56 b(to)3822 11400 y(5)p eop end %%Page: 6 9 TeXDict begin 6 8 bop 0 466 a FP(s)-8 b(u)i(p)e(po)h(rt)57 b(two)g(q)l(u)l(e)l(r)s(ie)o(s)h(c)l(o)n(mmo)l(nly)e(r)q(eq)l(uir)q(e)l (d)h(i)s(n)g(a)h(b)-5 b(ranc)e(h-and-cu)l(t)57 b(c)l(o)l(nte)-5 b(xt,)58 b(pr)s(ic)m(i)s(n)n(g)e(a)i(n)n(ew)f(v)r(ar)s(i)s(a)l(b)l(l)n (e)h(and)0 665 y(pr)s(ic)m(i)s(n)n(g)51 b(a)i(d)-7 b(ual)52 b(pivot.)253 964 y FM(D)8 b(Y)g(L)g(P)64 b FP(can)58 b(be)g(u)-7 b(s)m(e)l(d)58 b(with)j(C)8 b FM(O)g(I)g(N)g FP(-)g(O)g(R)65 b([2)o(])59 b(s)n(oftwar)q(e)e(thr)q(o)-5 b(u)l(gh)56 b(th)l(e)h(C++)h FJ(OsiDylp)g FP(OSI)g(i)s(nte)l(r)5 b(fa)n(c)-6 b(e)58 b(clas)-5 b(s.)82 b(An)0 1163 y(OSI)48 b(i)s(nte)l(r)5 b(fa)n(c)-6 b(e)49 b(o)-8 b(bj)l(ec)j(t)49 b(mai)s(nt)s(ai)s(ns)f(a)h(c)l(o)-5 b(py)48 b(of)h(th)l(e)f(c)l(o)l(ns) -5 b(trai)s(nt)48 b(sys)-5 b(te)n(m)49 b(as)g(we)l(ll)f(as)h(pr)q (ovidi)s(n)n(g)e(an)h(i)s(nte)l(r)5 b(fa)n(c)-6 b(e)49 b(to)0 1363 y(th)l(e)k(und)-5 b(e)l(rlyi)s(n)n(g)51 b(s)n(o)-5 b(lve)l(r)-10 b(.)67 b(Mu)l(ltipl)n(e)53 b FJ(OsiDylp)g FP(o)-8 b(bj)l(ec)j(ts)54 b(with)e(dis)-5 b(ti)s(nc)g(t)53 b(c)l(o)l(ns)-5 b(trai)s(nt)53 b(sys)-5 b(te)n(ms)53 b(can)h(e)-5 b(x)10 b(is)-5 b(t)53 b(s)n(i)s(m)l(u)l(lt)s(a-)0 1562 y(n)n(eo)-5 b(u)e(sly)57 b(and)g(calls)h(to)g(o)-5 b(pti)s(m)s(is)m(e)57 b(and)g(r)q(eo)-5 b(pti)s(m)s(is)m(e)58 b(th)l(e)f(sys)-5 b(te)n(ms)57 b(can)h(be)g(i)s(nte)l(rl)n(ea)-7 b(ve)l(d.)79 b(T)8 b(h)l(e)l(r)q(e)57 b(is)h(s)n(o)n(me)g(l)n(os)-5 b(s)0 1761 y(of)70 b(e)l(\002)-49 b(\002c)m(iency)69 b(as)h(th)l(e)g(s)-5 b(t)s(a)d(te)70 b(of)g(th)l(e)g(und)-5 b(e)l(rlyi)s(n)n(g)67 b(s)n(o)-5 b(lve)l(r)70 b(is)g(c)-7 b(han)n(g)n(e)l(d,)72 b(b)-8 b(u)l(t)69 b(th)l(e)h(n)n(ec)-6 b(e)o(s)h(sary)71 b(bookkee)-7 b(pi)s(n)n(g)68 b(is)0 1960 y(handl)n(e)l(d)52 b(by)g(th)l(e)g FJ(OsiDylp)h FP(o)-8 b(bj)l(ec)j(ts.)249 2259 y(T)8 b(h)l(e)49 b(n)n(e)-5 b(xt)49 b(s)m(ec)-5 b(tio)l(n)48 b(s)-8 b(pec)m(i\002e)o(s)49 b(th)l(e)g(n)m(ot)s(a)-8 b(tio)l(n)47 b(u)-7 b(s)m(e)l(d)49 b(fo)-7 b(r)49 b(th)l(e)g(pr)s(i)s(mal)g(and)f(d)-7 b(ual)49 b(pr)q(o)-8 b(b)l(l)n(e)n(ms)48 b(i)s(n)h(th)l(e)f(r)q(e)n(mai)s(nd)-5 b(e)l(r)0 2459 y(of)54 b(th)l(e)h(r)q(e)-7 b(po)g(rt.)70 b(Sec)-5 b(tio)l(ns)54 b(3)g(thr)q(o)-5 b(u)l(gh)53 b(11)h(d)-5 b(e)o(sc)d(r)s(ibe)55 b(i)s(ndivid)-7 b(ual)53 b(c)l(o)n(mpo)l(n)n (ents)g(of)i(th)l(e)f(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n.)69 b(Sec-)0 2658 y(tio)l(ns)44 b(12)g(thr)q(o)-5 b(u)l(gh)43 b(16)h(d)-5 b(e)o(sc)d(r)s(ibe)45 b(th)l(e)f(s)n(i)s(mpl)n(e)-5 b(x)45 b(algo)-7 b(r)s(ithms)44 b(and)g(th)l(e)h(v)r(ar)s(i)s(a)l(b)l (l)n(e)g(and)f(c)l(o)l(ns)-5 b(trai)s(nt)43 b(manag)n(e)n(ment)0 2857 y(algo)-7 b(r)s(ithms)53 b(u)-7 b(s)m(e)l(d)54 b(i)s(n)j FM(D)8 b(Y)g(L)g(P)t FP(.)70 b(Sec)-5 b(tio)l(ns)53 b(17)h(thr)q(o)-5 b(u)l(gh)51 b(19)j(d)-5 b(e)o(sc)d(r)s(ibe)54 b(th)l(e)f(i)s(nte)l(r)5 b(fa)n(c)-6 b(e)54 b(and)f(parame)-7 b(te)l(rs)55 b(pr)q(ovid)-5 b(e)l(d)0 3056 y(by)56 b FM(D)8 b(Y)g(L)g(P)t FP(.)3822 11400 y(6)p eop end %%Page: 7 10 TeXDict begin 7 9 bop 0 475 a FL(2)239 b(Nota)-12 b(tio)-6 b(n)4 959 y FM(D)8 b(Y)g(L)g(P)59 b FP(wo)-7 b(rks)52 b(na)-8 b(t)l(urally)51 b(with)g(th)l(e)i(m)s(i)s(ni)s(m)s(isa)-8 b(tio)l(n)51 b(pr)q(o)-8 b(b)l(l)n(e)n(m)3441 1279 y(m)s(i)s(n)108 b FG(c)14 b(x)3837 1528 y(A)c(x)57 b FF(\243)43 b FG(b)3721 1777 y(l)59 b FF(\243)46 b FG(x)57 b FF(\243)43 b FG(u)7598 1529 y FP(\(1\))0 2119 y(Add)52 b(sla)n(c)-8 b(k)53 b(v)r(ar)s(i)s(a)l (b)l(l)n(e)o(s)i FG(s)g FP(and)d(partitio)l(n)2868 1984 y FC(\002)2947 2117 y FG(A)181 b(I)3317 1984 y FC(\003)3439 2119 y FP(i)s(nto)52 b(bas)n(ic)i(and)e(n)m(o)l(n)m(bas)n(ic)f(po)-7 b(rtio)l(ns)52 b(as)2758 2427 y FC(\002)2836 2559 y FG(B)178 b(N)3272 2427 y FC(\003)3382 2561 y FP(=)3523 2327 y FC(\024)3703 2458 y FG(B)3828 2397 y Fz(t)4069 2458 y FP(0)p 4271 2517 7 200 v 197 w FG(N)4507 2397 y Fz(t)4741 2458 y FG(I)4816 2397 y Fz(t)3705 2662 y FG(B)3830 2602 y Fz(l)4062 2662 y FG(I)4137 2602 y Fz(l)p 4271 2722 7 205 v 4371 2662 a FG(N)4509 2602 y Fz(l)4750 2662 y FP(0)4955 2327 y FC(\025)0 3045 y FP(with)68 b(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g)67 b(partitio)l(ns)2473 2910 y FC(\002)2547 3043 y FG(x)2659 2983 y Fz(B)2921 3043 y FG(s)3020 2983 y Fz(B)3286 3043 y FG(x)3397 2983 y Fz(N)3669 3043 y FG(s)3767 2983 y Fz(N)3871 2910 y FC(\003)3940 2949 y Fx(>)4112 3045 y FP(fo)-7 b(r)74 b FG(x)16 b FP(,)74 b FG(s)s FP(,)f(and)5227 2910 y FC(\002)5299 3046 y FG(b)5405 2986 y Fz(t)5629 3046 y FG(b)5735 2986 y Fz(l)5787 2910 y FC(\003)5856 2946 y Fx(>)6028 3045 y FP(fo)-7 b(r)71 b FG(b)5 b FP(.)115 b(T)8 b(h)l(e)69 b(o)-8 b(bj)l(ec)j(tive)70 b FG(c)0 3244 y FP(is)i(a)-8 b(u)l(gmente)l(d)70 b(with)g(0')-5 b(s)71 b(i)s(n)h(th)l(e)f(c)l(o)-5 b(l)n(umns)71 b(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g)69 b(to)j(th)l(e)f(sla)n(c)-8 b(k)71 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)77 b(and)71 b(partitio)l(n)n(e)l(d)g(as)0 3309 y FC(\002)71 3441 y FG(c)166 3382 y Fz(B)427 3441 y FP(0)167 b FG(c)791 3382 y Fz(N)1061 3441 y FP(0)1164 3309 y FC(\003)1233 3443 y FP(.)66 b(T)8 b(h)l(e)52 b(bas)n(is)h(i)s(nve)l(rs)m(e)g(will)f (be)3079 3886 y FG(B)3216 3818 y FA(\014)-13 b(1)3395 3886 y FP(=)3537 3652 y FC(\024)3767 3782 y FP(\()9 b FG(B)3951 3722 y Fz(t)4009 3782 y FP(\))4059 3722 y FA(\014)-13 b(1)4522 3782 y FP(0)3624 3987 y(\014)9 b FG(B)3858 3927 y Fz(l)3911 3987 y FP(\()g FG(B)4095 3927 y Fz(t)4152 3987 y FP(\))4202 3927 y FA(\014)-13 b(1)4515 3987 y FG(I)4590 3927 y Fz(l)4642 3652 y FC(\025)7598 3886 y FP(\(2\))0 4307 y(W)i(e)53 b(th)l(en)f(ha)-7 b(ve)1565 4454 y FC(\024)1658 4587 y FG(x)1770 4527 y Fz(B)1663 4787 y FG(s)1762 4726 y Fz(B)1864 4454 y FC(\025)1993 4689 y FP(=)73 b FG(B)2303 4620 y FA(\014)-13 b(1)2443 4689 y FG(b)37 b FP(\014)j FG(B)2857 4620 y FA(\014)-13 b(1)3003 4689 y FG(N)3163 4454 y FC(\024)3256 4587 y FG(x)3367 4527 y Fz(N)3261 4787 y FG(s)3359 4726 y Fz(N)3471 4454 y FC(\025)1993 5156 y FP(=)2134 4922 y FC(\024)2478 5053 y FP(\()9 b FG(B)2662 4992 y Fz(t)2719 5053 y FP(\))2769 4992 y FA(\014)-13 b(1)2908 5053 y FG(b)3014 4992 y Fz(t)2224 5257 y FG(b)2330 5197 y Fz(l)2414 5257 y FP(\014)41 b FG(B)2680 5197 y Fz(l)2733 5257 y FP(\()9 b FG(B)2917 5197 y Fz(t)2975 5257 y FP(\))3025 5197 y FA(\014)-13 b(1)3164 5257 y FG(b)3270 5197 y Fz(t)3326 4922 y FC(\025)3446 5156 y FP(\014)3578 4922 y FC(\024)3941 5053 y FP(\()9 b FG(B)4125 4992 y Fz(t)4182 5053 y FP(\))4232 4992 y FA(\014)-13 b(1)4377 5053 y FG(N)4515 4992 y Fz(t)5158 5053 y FP(\()9 b FG(B)5342 4992 y Fz(t)5399 5053 y FP(\))5449 4992 y FA(\014)-13 b(1)3674 5257 y FG(N)3812 5197 y Fz(l)3897 5257 y FP(\014)41 b FG(B)4163 5197 y Fz(l)4216 5257 y FP(\()9 b FG(B)4400 5197 y Fz(t)4458 5257 y FP(\))4508 5197 y FA(\014)-13 b(1)4653 5257 y FG(N)4791 5197 y Fz(t)5014 5257 y FP(\014)9 b FG(B)5248 5197 y Fz(l)5301 5257 y FP(\()g FG(B)5485 5197 y Fz(t)5543 5257 y FP(\))5593 5197 y FA(\014)-13 b(1)5729 4922 y FC(\025)23 b(\024)5933 5055 y FG(x)6044 4995 y Fz(N)5937 5254 y FG(s)6035 5194 y Fz(N)6147 4922 y FC(\025)7598 4924 y FP(\(3\))0 5577 y(and)1758 5897 y FG(z)49 b FP(=)2034 5763 y FC(\002)2106 5895 y FG(c)2201 5835 y Fz(B)2461 5895 y FP(0)2564 5763 y FC(\003)23 b(\002)2730 5895 y FG(x)2842 5835 y Fz(B)3105 5895 y FG(s)3204 5835 y Fz(B)3298 5763 y FC(\003)3367 5801 y Fx(>)3502 5897 y FP(+)3634 5763 y FC(\002)3705 5895 y FG(c)3799 5835 y Fz(N)4069 5895 y FP(0)4172 5763 y FC(\003)g(\002)4338 5895 y FG(x)4449 5835 y Fz(N)4721 5895 y FG(s)4819 5835 y Fz(N)4923 5763 y FC(\003)4992 5801 y Fx(>)1893 6202 y FP(=)2034 6068 y FC(\002)2106 6200 y FG(c)2201 6140 y Fz(B)2461 6200 y FP(0)2564 6068 y FC(\003)2665 6202 y FG(B)2802 6134 y FA(\014)-13 b(1)2941 6202 y FG(b)37 b FP(+)3210 6068 y FC(\000\002)3357 6200 y FG(c)3451 6140 y Fz(N)3721 6200 y FP(0)3824 6068 y FC(\003)3925 6202 y FP(\014)4057 6068 y FC(\002)4128 6200 y FG(c)4223 6140 y Fz(B)4484 6200 y FP(0)4586 6068 y FC(\003)4687 6202 y FG(B)4824 6134 y FA(\014)-13 b(1)4970 6202 y FG(N)5107 6068 y FC(\001)23 b(\002)5281 6200 y FG(x)5392 6140 y Fz(N)5663 6200 y FG(s)5761 6140 y Fz(N)5866 6068 y FC(\003)5935 6106 y Fx(>)1893 6508 y FP(=)43 b FG(c)2131 6439 y Fz(B)2226 6508 y FP(\()9 b FG(B)2410 6439 y Fz(t)2467 6508 y FP(\))2517 6439 y FA(\014)-13 b(1)2656 6508 y FG(b)2762 6439 y Fz(t)2851 6508 y FP(+)2983 6373 y FC(\002)3054 6506 y FG(c)3148 6446 y Fz(N)3284 6506 y FP(\014)34 b FG(c)3513 6446 y Fz(B)3607 6506 y FP(\()9 b FG(B)3791 6446 y Fz(t)3849 6506 y FP(\))3899 6446 y FA(\014)-13 b(1)4044 6506 y FG(N)4182 6446 y Fz(t)4405 6506 y FP(\014)r FG(c)4602 6446 y Fz(B)4697 6506 y FP(\()9 b FG(B)4881 6446 y Fz(t)4938 6506 y FP(\))4988 6446 y FA(\014)-13 b(1)5125 6373 y FC(\003)23 b(\002)5291 6506 y FG(x)5402 6446 y Fz(N)5674 6506 y FG(s)5772 6446 y Fz(N)5876 6373 y FC(\003)5945 6411 y Fx(>)7598 6184 y FP(\(4\))0 6888 y(T)8 b(h)l(e)84 b(q)l(uantitie)o(s)1279 6753 y FC(\002)1353 6886 y FG(x)1465 6826 y Fz(B)1727 6886 y FG(s)1826 6826 y Fz(B)1921 6753 y FC(\003)1990 6791 y Fx(>)2148 6888 y FP(=)p 2303 6747 107 7 v 57 w FG(b)59 b FP(=)64 b FG(B)2765 6827 y FA(\014)-13 b(1)2905 6888 y FG(b)89 b FP(ar)q(e)84 b(th)l(e)g(v)r(al)n(u)l(e)o(s)h(of)f(th)l (e)g(bas)n(ic)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)93 b(th)l(e)84 b(q)l(uantitie)o(s)f FG(y)58 b FP(=)0 6952 y FC(\002)71 7085 y FG(c)166 7025 y Fz(B)427 7085 y FP(0)529 6952 y FC(\003)630 7087 y FG(B)767 7027 y FA(\014)-13 b(1)951 7087 y FP(ar)q(e)47 b(th)l(e)f(d)-7 b(ual)46 b(v)r(ar)s(i)s(a)l(b)l(l)n (e)o(s,)i(and)e(th)l(e)g(q)l(uantitie)o(s)p 4289 6986 90 7 v 47 w FG(c)f FP(=)4552 6952 y FC(\000\002)4699 7085 y FG(c)4793 7025 y Fz(N)5063 7085 y FP(0)5166 6952 y FC(\003)5267 7087 y FP(\014)5399 6952 y FC(\002)5470 7085 y FG(c)5565 7025 y Fz(B)5826 7085 y FP(0)5929 6952 y FC(\003)6030 7087 y FG(B)6167 7027 y FA(\014)-13 b(1)6312 7087 y FG(N)6449 6952 y FC(\001)6572 7087 y FP(ar)q(e)47 b(th)l(e)f(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)0 7286 y(c)l(os)h(ts.)133 b(A)75 b(r)q(ow)f(o)-7 b(r)76 b(c)l(o)-5 b(l)n(umn)74 b(of)84 b FG(B)2423 7226 y FA(\014)-13 b(1)2569 7286 y FG(N)93 b FP(\(as)75 b(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)75 b(to)g(th)l(e)g(c)l(o)l(nte)-5 b(xt\))74 b(will)g(be)h(d)-5 b(en)m(ote)l(d)p 6673 7185 117 7 v 76 w FG(a)6791 7311 y Fz(k)6952 7286 y FP(\(th)l(e)75 b(s)n(i)s(n)n(gl)n(e)0 7485 y(s)-8 b(u)h(bsc)f(r)s(ipt)52 b(dis)-5 b(ti)s(n)n(g)n(uis)d(h)l(e) o(s)50 b(it)j(fr)q(o)n(m)g(an)f(i)s(ndivid)-7 b(ual)52 b(e)l(l)n(e)n(ment)p 4300 7385 V 54 w FG(a)4416 7510 y Fz(i)23 b(j)4517 7485 y FP(\).)66 b(A)52 b(r)q(ow)g(o)-7 b(r)53 b(c)l(o)-5 b(l)n(umn)52 b(of)62 b FG(B)6406 7425 y FA(\014)-13 b(1)6596 7485 y FP(\(as)53 b(a)-6 b(p)e(pr)q(o)j(pr)s(i)s (a)d(te)0 7685 y(to)71 b(th)l(e)f(c)l(o)l(nte)-5 b(xt\))69 b(will)h(be)h(d)-5 b(en)m(ote)l(d)71 b FH(1)2665 7710 y Fz(k)2750 7685 y FP(.)119 b(Wh)l(en)70 b(discu)-7 b(s)i(s)n(i)s(n)n (g)70 b(pivot)h(s)m(e)l(l)n(ec)-5 b(tio)l(n)70 b(calcu)l(la)-8 b(tio)l(ns,)74 b FI(D)6820 7710 y Fz(j)6936 7685 y FP(will)c(be)h(th)l (e)0 7884 y(c)-7 b(han)n(g)n(e)51 b(i)s(n)i(n)m(o)l(n)m(bas)n(ic)e(v)r (ar)s(i)s(a)l(b)l(l)n(e)58 b FG(x)2408 7909 y Fz(j)2505 7884 y FP(o)-7 b(r)55 b FG(s)2824 7909 y Fz(j)2868 7884 y FP(.)249 8183 y(T)8 b(h)l(e)53 b(d)-7 b(ual)52 b(pr)q(o)-8 b(b)l(l)n(e)n(m)51 b(is)i(fo)-7 b(r)5 b(me)l(d)53 b(by)f(\002rs)-5 b(t)53 b(c)l(o)l(nve)l(rti)s(n)n(g)e(\(1\))h(to)h(max)i(\014)r FG(c)14 b(x)i FP(,)50 b(g)t(ivi)s(n)n(g)3399 8503 y(m)s(i)s(n)82 b FG(y)7 b(b)3803 8752 y(y)15 b(A)45 b FF(\263)d FP(\014)r FG(c)3803 9001 y(y)j FF(\263)d FP(0)0 9381 y(Add)52 b(s)-8 b(urpl)n(u)h(s)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)j FH(s)j FP(and)52 b(partitio)l(n)3076 9246 y FC(\002)3155 9379 y FG(A)171 b FP(\014)10 b FG(I)3625 9246 y FC(\003)3694 9285 y Fx(>)3849 9381 y FP(i)s(nto)52 b(bas)n(ic)i(and)e(n)m(o)l(n)m (bas)n(ic)f(po)-7 b(rtio)l(ns)52 b(as)3086 9839 y FC(")3182 10022 y FD(B)3183 10271 y(N)3317 9839 y FC(#)3455 10123 y FP(=)3596 9590 y FC(2)3596 9882 y(6)3596 9982 y(6)3596 10082 y(6)3596 10181 y(6)3596 10287 y(4)3881 9769 y FP(0)256 b(\014)10 b FG(I)4421 9709 y Fw(B)3845 10018 y FG(B)3970 9958 y Fz(t)4287 10018 y FG(N)4425 9958 y Fz(t)p 3707 10085 898 7 v 3790 10274 a FP(\014)g FG(I)3974 10214 y Fw(N)4329 10274 y FP(0)3847 10523 y FG(B)3972 10463 y Fz(l)4289 10523 y FG(N)4427 10463 y Fz(l)4604 9590 y FC(3)4604 9882 y(7)4604 9982 y(7)4604 10082 y(7)4604 10181 y(7)4604 10287 y(5)3822 11400 y FP(7)p eop end %%Page: 8 11 TeXDict begin 8 10 bop 0 466 a FP(with)52 b(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g)50 b(partitio)l(ns)2424 331 y FC(\002)2495 466 y FH(s)2597 406 y Fw(B)2862 466 y FG(y)2964 406 y Fw(B)3231 466 y FH(s)3336 406 y Fw(N)3602 466 y FG(y)3707 406 y Fw(N)3807 331 y FC(\003)3930 466 y FP(fo)-7 b(r)52 b FG(y)5 b FP(,)54 b FH(s)8 b FP(,)52 b(and)4978 331 y FC(\002)5049 464 y FG(c)5144 404 y Fz(B)5406 464 y FG(c)5500 404 y Fz(N)5604 331 y FC(\003)5726 466 y FP(fo)-7 b(r)55 b FG(c)9 b FP(.)66 b(T)8 b(h)l(e)52 b(r)s(ight-hand)g(s)n(id)-5 b(e)2 665 y FG(b)75 b FP(is)c(a)-8 b(u)l(gmente)l(d)69 b(with)g(0')-5 b(s)70 b(i)s(n)g(th)l(e)g(r)q(ows)g (c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g)68 b(to)j(th)l(e)f(s)-8 b(urpl)n(u)h(s)70 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(and)f(partitio)l (n)n(e)l(d)g(as)0 769 y FC(\002)69 905 y FP(0)168 b FG(b)446 844 y Fz(t)669 905 y FP(0)f FG(b)1045 844 y Fz(l)1098 769 y FC(\003)1167 804 y Fx(>)1269 904 y FP(.)65 b(T)8 b(h)l(e)53 b(bas)n(is)g(i)s(nve)l(rs)m(e)g(will)f(be)2938 1390 y FD(B)3057 1321 y FA(\014)-13 b(1)3236 1390 y FP(=)3377 1156 y FC(\024)3464 1287 y FP(\()9 b FG(B)3648 1227 y Fz(t)3706 1287 y FP(\))3756 1227 y FA(\014)-13 b(1)3901 1287 y FG(N)4039 1227 y Fz(t)4262 1287 y FP(\()9 b FG(B)4446 1227 y Fz(t)4504 1287 y FP(\))4554 1227 y FA(\014)-13 b(1)3640 1490 y FP(\014)10 b FG(I)3821 1429 y Fw(B)4425 1490 y FP(0)4691 1156 y FC(\025)4803 1390 y FP(.)0 1851 y(W)-11 b(e)53 b(th)l(en)f(ha)-7 b(ve)828 2047 y FC(\002)899 2182 y FH(s)1001 2122 y Fw(B)1265 2182 y FG(y)1367 2122 y Fw(B)1466 2047 y FC(\003)1577 2182 y FP(=)41 b(\(\014)r FG(c)9 b FP(\))l FD(B)2124 2113 y FA(\014)-13 b(1)2291 2182 y FP(\014)2423 2047 y FC(\002)2494 2182 y FH(s)2599 2122 y Fw(N)2865 2182 y FG(y)2970 2122 y Fw(N)3071 2047 y FC(\003)3163 2182 y FD(N)q(B)3412 2113 y FA(\014)g(1)1577 2552 y FP(=)1718 2417 y FC(\002)1789 2550 y FG(c)1883 2490 y Fz(N)2019 2550 y FP(\014)34 b FG(c)2248 2490 y Fz(B)2343 2550 y FP(\()9 b FG(B)2527 2490 y Fz(t)2584 2550 y FP(\))2634 2490 y FA(\014)-13 b(1)2779 2550 y FG(N)2917 2490 y Fz(t)3141 2550 y FP(\014)r FG(c)3338 2490 y Fz(B)3432 2550 y FP(\()9 b FG(B)3616 2490 y Fz(t)3673 2550 y FP(\))3723 2490 y FA(\014)-13 b(1)3860 2417 y FC(\003)3961 2552 y FP(\014)4093 2417 y FC(\002)4164 2552 y FH(s)4269 2492 y Fw(N)4535 2552 y FG(y)4640 2492 y Fw(N)4741 2417 y FC(\003)4833 2318 y(\024)5146 2448 y FP(\014\()9 b FG(B)5430 2388 y Fz(t)5487 2448 y FP(\))5537 2388 y FA(\014)-13 b(1)5682 2448 y FG(N)5820 2388 y Fz(t)6313 2448 y FP(\014\()9 b FG(B)6597 2388 y Fz(t)6654 2448 y FP(\))6704 2388 y FA(\014)-13 b(1)4929 2653 y FG(B)5054 2592 y Fz(l)5108 2653 y FP(\()9 b FG(B)5292 2592 y Fz(t)5349 2653 y FP(\))5399 2592 y FA(\014)-13 b(1)5544 2653 y FG(N)5682 2592 y Fz(t)5772 2653 y FP(\014)40 b FG(N)6050 2592 y Fz(l)6278 2653 y FG(B)6403 2592 y Fz(l)6456 2653 y FP(\()9 b FG(B)6640 2592 y Fz(t)6698 2653 y FP(\))6748 2592 y FA(\014)-13 b(1)6885 2318 y FC(\025)7598 2414 y FP(\(5\))0 3014 y(and)2230 3378 y FG(z)50 b FP(=)2507 3244 y FC(\002)2578 3378 y FH(s)2680 3318 y Fw(B)2945 3378 y FG(y)3047 3318 y Fw(B)3146 3244 y FC(\003)23 b(\002)3307 3376 y FP(0)168 b FG(b)3684 3316 y Fz(t)3741 3244 y FC(\003)3810 3282 y Fx(>)3944 3378 y FP(+)4076 3244 y FC(\002)4147 3378 y FH(s)4252 3318 y Fw(N)4518 3378 y FG(y)4623 3318 y Fw(N)4724 3244 y FC(\003)23 b(\002)4885 3379 y FP(0)168 b FG(b)5262 3319 y Fz(l)5314 3244 y FC(\003)5383 3279 y Fx(>)2366 3657 y FP(=)41 b(\(\014)r FG(c)9 b FP(\))l FD(B)2913 3589 y FA(\014)-13 b(1)3050 3657 y FG(b)3152 3589 y Fw(B)3284 3657 y FP(+)3416 3523 y FC(\002)3487 3657 y FH(s)3592 3597 y Fw(N)3858 3657 y FG(y)3963 3597 y Fw(N)4064 3523 y FC(\003)4156 3657 y FP(\()r FG(b)4313 3589 y Fw(N)4447 3657 y FP(\014)32 b FD(N)q(B)4828 3589 y FA(\014)-13 b(1)4966 3657 y FG(b)5068 3589 y Fw(B)5168 3657 y FP(\))2366 4027 y(=)41 b(\014)r FG(c)2704 3959 y Fz(B)2798 4027 y FP(\()9 b FG(B)2982 3959 y Fz(t)3040 4027 y FP(\))3090 3959 y FA(\014)-13 b(1)3229 4027 y FG(b)3335 3959 y Fz(t)3424 4027 y FP(+)3555 3893 y FC(\002)3627 4027 y FH(s)3732 3967 y Fw(N)3997 4027 y FG(y)4102 3967 y Fw(N)4203 3893 y FC(\003)4295 3793 y(\024)4638 3923 y FP(\()9 b FG(B)4822 3863 y Fz(t)4880 3923 y FP(\))4930 3863 y FA(\014)-13 b(1)5069 3923 y FG(b)5175 3863 y Fz(t)4385 4128 y FG(b)4491 4068 y Fz(l)4575 4128 y FP(\014)41 b FG(B)4841 4068 y Fz(l)4894 4128 y FP(\()9 b FG(B)5078 4068 y Fz(t)5136 4128 y FP(\))5186 4068 y FA(\014)-13 b(1)5325 4128 y FG(b)5431 4068 y Fz(t)5487 3793 y FC(\025)7598 3734 y FP(\(6\))0 4499 y(Wh)l(en)49 b(discu)-7 b(s)i(s)n(i)s(n)n(g)50 b(pivot)g(s)m(e)l(l)n(ec)-5 b(tio)l(n)50 b(calcu)l(la)-8 b(tio)l(ns,)51 b FH(d)3773 4524 y Fz(j)3868 4499 y FP(will)e(be)h(th)l (e)g(c)-7 b(han)n(g)n(e)48 b(i)s(n)i(n)m(o)l(n)m(bas)n(ic)f(d)-7 b(ual)49 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h FG(y)7547 4524 y Fz(j)7641 4499 y FP(o)-7 b(r)2 4698 y FH(s)114 4723 y Fz(j)158 4698 y FP(.)249 4997 y(T)8 b(h)l(e)l(r)q(e)48 b(ar)q(e)h(s)m(eve)l(ral)f(poi)s(nts)g(to)h(n)m(ote)e(a)l(bo)-5 b(u)l(t)48 b(th)l(e)g(r)q(e)l(la)-8 b(tio)l(ns)g(hip)46 b(be)-7 b(tween)47 b(pr)s(i)s(mal)i(and)f(d)-7 b(ual)47 b(s)n(i)s(mpl)n(e)-5 b(x)50 b(i)s(n)e(th)l(e)4 5196 y FM(D)8 b(Y)g(L)g(P)59 b FP(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n.)249 5495 y(Firs)j(t,)84 b FM(D)8 b(Y)g(L)g(P)81 b FP(doe)o(s)75 b(n)m(ot)e(s)n(o)-5 b(lve)75 b(max)f(\014)r FG(c)14 b(x)88 b FP(as)75 b(a)g(s)-8 b(urr)q(oga)g(te)74 b(fo)-7 b(r)75 b(m)s(i)s(n)48 b FG(c)14 b(x)i FP(.)128 b(It)75 b(m)s(i)s(ni)s(m)s(is)m(e)o(s)i FG(c)14 b(x)89 b FP(dir)q(ec)-5 b(tly)74 b(by)0 5695 y(algo)-7 b(r)s(ithm)s(ic)53 b(d)-5 b(e)o(s)n(ign.)66 b(Henc)-6 b(e)53 b(th)l(e)g(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h FG(y)45 b FP(=)f FG(c)4028 5634 y Fz(B)4131 5695 y FG(B)4268 5634 y FA(\014)-13 b(1)4459 5695 y FP(ha)-7 b(ve)53 b(th)l(e)f(wr)q(o)l(n)n (g)f(s)n(ign)i(fo)-7 b(r)53 b(th)l(e)g(d)-7 b(ual)52 b(pr)q(o)-8 b(b)l(l)n(e)n(m,)0 5894 y(and)62 b(ar)q(e)g(calcu)l(la)-8 b(te)l(d)62 b(s)n(o)-5 b(l)n(e)l(ly)62 b(as)g(a)h(c)l(o)l(nvenienc)-6 b(e.)93 b(T)8 b(h)l(e)62 b(d)-7 b(ual)61 b(algo)-7 b(r)s(ithm)61 b(a)n(c)-5 b(t)l(ually)61 b(wo)-7 b(rks)62 b(with)f(th)l(e)h(r)q(e)l(d) -7 b(u)i(c)f(e)l(d)0 6093 y(c)l(os)h(ts)p 458 5992 90 7 v 55 w FG(c)553 6024 y Fz(N)699 6093 y FP(=)44 b FG(c)937 6033 y Fz(N)1073 6093 y FP(\014)34 b FG(c)1302 6033 y Fz(B)1405 6093 y FG(B)1542 6033 y FA(\014)-13 b(1)1687 6093 y FG(N)17 b FP(,)54 b(whic)-7 b(h)51 b(ar)q(e)i(th)l(e)g(c)l(o)-7 b(rr)q(ec)i(t)53 b(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(v)r(al) n(u)l(e)o(s)g(\(c)l(o)n(mpar)q(e)g(\(4\))g(with)e(\(5\)\).)249 6392 y(Sec)l(o)l(nd,)79 b(beca)-8 b(u)h(s)m(e)76 b(pr)s(i)s(mal)f(s)n (i)s(mpl)n(e)-5 b(x)76 b(pr)q(ovid)-5 b(e)o(s)84 b FG(B)3874 6332 y FA(\014)-13 b(1)4020 6392 y FG(N)68 b FP(=)51 b(\014)p FD(N)q(B)4708 6332 y FA(\014)-13 b(1)4920 6392 y FP(\(c)l(o)n(mpar)q(e)75 b(\(3\))g(with)f(\(5\)\),)80 b(th)l(e)74 b(r)q(e)l(l)n(ev)r(ant)0 6591 y(calcu)l(la)-8 b(tio)l(n)51 b(wh)l(en)h(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(ni)s(n)n(g)51 b(th)l(e)h(l)n(ea)-7 b(vi)s(n)n(g)52 b(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(is)p 4642 6490 V 55 w FG(c)4733 6616 y Fz(k)4851 6591 y FP(+)p 4983 6490 117 7 v 34 w FG(a)5099 6616 y Fz(i)11 b(k)5231 6591 y FH(d)5330 6616 y Fz(i)5380 6591 y FP(,)53 b(ra)-8 b(th)l(e)l(r)52 b(than)p 6454 6490 90 7 v 54 w FG(c)6545 6616 y Fz(k)6663 6591 y FP(\014)p 6795 6490 117 7 v 34 w FG(a)6911 6616 y Fz(i)11 b(k)7043 6591 y FH(d)7142 6616 y Fz(i)7192 6591 y FP(.)249 6890 y(T)d(hr)q(o)-5 b(u)l(gh)n(o)g(u)l(t)61 b(th)l(e)h(r)q(e)n(mai)s(nd)-5 b(e)l(r)62 b(of)g(th)l(e)h(r)q(e)-7 b(po)g(rt,)65 b(l)n(e)-7 b(t)66 b FG(e)3936 6915 y Fz(k)4066 6890 y FF(\316)22 b FG(R)4331 6830 y Fz(d)4483 6890 y FP(be)63 b(a)g(r)q(ow)f(o)-7 b(r)63 b(c)l(o)-5 b(l)n(umn)62 b(vec)-5 b(to)e(r)64 b(of)e(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)0 7089 y(di)s(mens)n(io)l(n)52 b(\(as)h(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)l(d)53 b(by)f(th)l(e)h(c)l(o)l(nte)-5 b(xt\),)51 b(with)h(a)h(1)g(i)s(n)f(pos)n(itio)l(n)i FG(k)63 b FP(and)52 b(0')-5 b(s)53 b(i)s(n)f(all)h(oth)l(e)l(r)f(pos)n (itio)l(ns.)3822 11400 y(8)p eop end %%Page: 9 12 TeXDict begin 9 11 bop 0 475 a FL(3)239 b(Upda)-12 b(tin)k(g)77 b(Fo)-10 b(r)5 b(m)-8 b(ul\346)0 959 y FP(Fo)h(r)79 b(p)-5 b(urpos)m(e)o(s)79 b(of)g(th)l(e)g(u)-6 b(pda)e(ti)s(n)n(g)77 b(fo)-7 b(r)5 b(m)l(u)l(l\346,)85 b(th)l(e)78 b(dis)-5 b(ti)s(nc)g(tio)l(n)78 b(be)-7 b(tween)79 b(o)-7 b(r)s(ig)t(i)s(nal)78 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)85 b FG(x)94 b FP(and)79 b(sla)n(c)-8 b(k)0 1158 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)68 b FG(s)g FP(is)d(n)m(ot)g(i)s(mpo)-7 b(rt)s(ant.)103 b(Fo)-7 b(r)65 b(s)n(i)s(mplic)m(ity)-17 b(,)73 b FG(x)3754 1183 y Fz(k)3905 1158 y FP(is)65 b(u)-7 b(s)m(e)l(d)65 b(to)h(r)q(e)-7 b(pr)q(e)o(s)m(ent)65 b(both)g(o)-7 b(r)s(ig)t(i)s(nal) 64 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)j(and)0 1357 y(sla)n(c)-8 b(k)75 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(i)s(n)f(this)g(s)m(ec)-5 b(tio)l(n.)132 b(In)76 b(th)l(e)e(same)i(vei)s(n,)83 b FG(c)4291 1297 y Fz(B)4461 1357 y FP(and)77 b FG(c)4941 1297 y Fz(N)5121 1357 y FP(will)d(d)-5 b(en)m(ote)6082 1223 y FC(\002)6154 1355 y FG(c)6249 1295 y Fz(B)6509 1355 y FP(0)6612 1223 y FC(\003)6756 1357 y FP(and)7140 1223 y FC(\002)7211 1355 y FG(c)7305 1295 y Fz(N)7575 1355 y FP(0)7678 1223 y FC(\003)7747 1357 y FP(,)0 1556 y(r)q(e)o(s)d(pec)j(tive)l(ly)-17 b(.)0 2149 y Fu(3.1)197 b(Bas)n(is)66 b(Upda)-10 b(tes)0 2568 y FP(Whil)n(e)43 b(th)l(e)o(s)m(e)h(fo)-7 b(r)5 b(m)l(u)l(l\346)42 b(ar)q(e)i(n)m(ot)f (a)-6 b(p)e(plie)l(d)42 b(dir)q(ec)-5 b(tly)43 b(to)h(u)-6 b(pda)e(te)43 b(th)l(e)g(bas)n(is,)j(th)l(ey)c(ar)q(e)i(u)-7 b(s)m(e)l(fu)l(l)43 b(i)s(n)g(d)-5 b(e)l(r)s(ivi)s(n)n(g)43 b(u)-6 b(pda)e(te)0 2768 y(fo)h(r)5 b(m)l(u)l(l\346)52 b(fo)-7 b(r)53 b(oth)l(e)l(r)f(v)r(al)n(u)l(e)o(s.)249 3066 y(Su)-6 b(p)e(pos)m(e)68 b(tha)-8 b(t)73 b FG(x)1483 3091 y Fz(i)1603 3066 y FP(will)68 b(l)n(ea)-7 b(ve)70 b(bas)n(is)f(pos)n(itio)l(n)h FG(k)80 b FP(and)69 b(be)g(r)q(e)-7 b(pla)n(c)h(e)l(d)69 b(by)74 b FG(x)5538 3091 y Fz(j)5582 3066 y FP(.)115 b(T)8 b(h)l(e)69 b(n)n(ew)f(bas)n(is)79 b FG(B)7138 3006 y Fx(0)7250 3066 y FP(can)69 b(be)0 3266 y(e)-5 b(xpr)q(e)o(s)g(s)m(e)l(d)53 b(as)62 b FG(B)1208 3205 y Fx(0)1292 3266 y FP(=)50 b FG(B)37 b FP(\014)d FG(a)1838 3291 y Fz(i)1890 3266 y FG(e)1983 3291 y Fz(k)2100 3266 y FP(+)g FG(a)2352 3291 y Fz(j)2397 3266 y FG(e)2490 3291 y Fz(k)2575 3266 y FP(.)66 b(Pr)q(e)n(m)l(u)l(ltiplyi)s(n)n(g)49 b(by)61 b FG(B)4316 3205 y FA(\0141)4519 3266 y FP(and)53 b(pos)-5 b(tm)l(u)l(ltiplyi)s(n)n(g)49 b(by)j(\()9 b FG(B)6618 3205 y Fx(0)6660 3266 y FP(\))6726 3205 y FA(\0141)6876 3266 y FP(,)53 b(we)g(ha)-7 b(ve)1673 3648 y FG(B)1813 3580 y FA(\0141)1972 3648 y FG(B)2098 3580 y Fx(0)2141 3648 y FP(\()9 b FG(B)2326 3580 y Fx(0)2368 3648 y FP(\))2434 3580 y FA(\0141)2625 3648 y FP(=)50 b FG(B)2915 3580 y FA(\0141)3075 3648 y FG(B)t FP(\()9 b FG(B)3384 3580 y Fx(0)3427 3648 y FP(\))3493 3580 y FA(\0141)3675 3648 y FP(\014)41 b FG(B)3956 3580 y FA(\0141)4108 3648 y FG(a)4213 3673 y Fz(i)4265 3648 y FG(e)4358 3673 y Fz(k)4443 3648 y FP(\()9 b FG(B)4628 3580 y Fx(0)4670 3648 y FP(\))4736 3580 y FA(\0141)4918 3648 y FP(+)41 b FG(B)5199 3580 y FA(\0141)5352 3648 y FG(a)5470 3673 y Fz(j)5516 3648 y FG(e)5609 3673 y Fz(k)5693 3648 y FP(\()9 b FG(B)5878 3580 y Fx(0)5921 3648 y FP(\))5987 3580 y FA(\0141)2293 3923 y FG(B)2433 3854 y FA(\0141)2625 3923 y FP(=)41 b(\()9 b FG(B)2951 3854 y Fx(0)2993 3923 y FP(\))3059 3854 y FA(\0141)3242 3923 y FP(\014)p 3374 3822 117 7 v 34 w FG(a)3490 3948 y Fz(i)3543 3923 y FH(1)3644 3854 y Fx(0)3643 3965 y Fz(k)3760 3923 y FP(+)p 3892 3822 V 34 w FG(a)4022 3948 y Fz(j)4069 3923 y FH(1)4170 3854 y Fx(0)4169 3965 y Fz(k)2141 4197 y FP(\()g FG(B)2326 4128 y Fx(0)2368 4197 y FP(\))2434 4128 y FA(\0141)2625 4197 y FP(=)50 b FG(B)2915 4128 y FA(\0141)3098 4197 y FP(+)p 3230 4096 V 34 w FG(a)3347 4222 y Fz(i)3400 4197 y FH(1)3501 4128 y Fx(0)3500 4240 y Fz(k)3617 4197 y FP(\014)p 3749 4096 V 34 w FG(a)3878 4222 y Fz(j)3925 4197 y FH(1)4026 4128 y Fx(0)4025 4240 y Fz(k)7598 3920 y FP(\(7\))0 4558 y(Si)s(nc)-6 b(e)57 b FG(x)588 4583 y Fz(i)691 4558 y FP(was)c(bas)n(ic,)p 1581 4458 V 55 w FG(a)1698 4583 y Fz(i)1790 4558 y FP(=)43 b FG(e)2026 4583 y Fz(k)2111 4558 y FP(.)66 b(T)8 b(his)52 b(g)t(ive)o(s)2881 4924 y(\()9 b FG(B)3066 4855 y Fx(0)3108 4924 y FP(\))3174 4855 y FA(\0141)3366 4924 y FP(=)50 b FG(B)3656 4855 y FA(\0141)3839 4924 y FP(+)34 b FG(e)4066 4949 y Fz(k)4152 4924 y FH(1)4253 4855 y Fx(0)4252 4966 y Fz(k)4369 4924 y FP(\014)p 4501 4823 V 34 w FG(a)4631 4949 y Fz(j)4678 4924 y FH(1)4779 4855 y Fx(0)4778 4966 y Fz(k)4865 4924 y FP(.)0 5289 y(Pr)q(e)n(m)l(u)l(ltiplyi)s(n)n(g)49 b(by)54 b FG(e)1568 5314 y Fz(l)1673 5289 y FP(to)e(o)-8 b(b)i(t)s(ai)s(n)53 b(an)f(u)-6 b(pda)e(te)53 b(fo)-7 b(r)5 b(m)l(u)l(la)52 b(fo)-7 b(r)53 b(r)q(ow)h FG(l)17 b FP(,)53 b(we)g(ha)-7 b(ve)3021 5742 y FH(1)3122 5673 y Fx(0)3121 5785 y Fz(l)3215 5742 y FP(=)43 b FH(1)3458 5767 y Fz(l)3542 5742 y FP(\014)p 3710 5525 V 3712 5625 a FG(a)3827 5650 y Fz(l)25 b(j)p 3693 5704 254 7 v 3693 5755 117 7 v 3695 5856 a FG(a)3811 5881 y Fz(k)c(j)3969 5742 y FH(1)4069 5767 y Fz(k)4488 5742 y FG(l)58 b FF(\271)44 b FG(k)2988 6200 y FH(1)3089 6132 y Fx(0)3088 6243 y Fz(k)3215 6200 y FP(=)3451 6088 y(1)p 3376 6162 254 7 v 3376 6213 117 7 v 3378 6314 a FG(a)3493 6339 y Fz(k)21 b(j)3651 6200 y FH(1)3751 6225 y Fz(k)7598 5980 y FP(\(8\))0 6889 y Fu(3.2)197 b(Pr)r(im)n(al)65 b(V)-15 b(ar)r(iab)-5 b(le)65 b(Upda)-10 b(tes)0 7308 y FP(Upda)i(ti)s(n)n(g)50 b(th)l(e)j(pr)s(i)s(mal)g(v)r(ar)s(i)s(a)l(b) l(l)n(e)o(s)g(is)g(s)-5 b(traightfo)e(rwar)q(d)51 b(and)h(fo)-5 b(ll)n(ows)52 b(dir)q(ec)-5 b(tly)52 b(fr)q(o)n(m)i(\(3\))o(.)249 7607 y(Both)74 b(pr)s(i)s(mal)h(and)f(d)-7 b(ual)74 b(pivots)h(calcu)l (la)-8 b(te)74 b(th)l(e)h(c)-7 b(han)n(g)n(e)73 b(i)s(n)h(th)l(e)g (ente)l(r)s(i)s(n)n(g)g(pr)s(i)s(mal)h(v)r(ar)s(i)s(a)l(b)l(l)n(e,)80 b FI(D)7267 7632 y Fz(j)7313 7607 y FP(.)131 b(T)8 b(h)l(e)0 7806 y(ente)l(r)s(i)s(n)n(g)81 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)87 b FG(x)1579 7831 y Fz(j)1705 7806 y FP(is)82 b(s)m(e)-7 b(t)83 b(to)h FG(u)2589 7831 y Fz(j)2674 7806 y FP(+)40 b FI(D)2946 7831 y Fz(j)3074 7806 y FP(o)-7 b(r)85 b FG(l)3379 7831 y Fz(j)3464 7806 y FP(+)41 b FI(D)3737 7831 y Fz(j)3782 7806 y FP(,)90 b(fo)-7 b(r)87 b FG(x)4329 7831 y Fz(j)4455 7806 y FP(ente)l(r)s(i)s(n)n(g)81 b(fr)q(o)n(m)h(its)g (u)-6 b(p)e(pe)l(r)82 b(o)-7 b(r)82 b(l)n(owe)l(r)f(bo)-5 b(und,)0 8006 y(r)q(e)o(s)d(pec)j(tive)l(ly)-17 b(.)108 b(T)8 b(h)l(e)67 b(l)n(ea)-7 b(vi)s(n)n(g)66 b(v)r(ar)s(i)s(a)l(b)l(l)n (e)73 b FG(x)2871 8031 y Fz(i)2988 8006 y FP(is)67 b(s)m(e)-7 b(t)68 b(to)h FG(u)3814 8031 y Fz(i)3931 8006 y FP(o)-7 b(r)70 b FG(l)4208 8031 y Fz(i)4259 8006 y FP(,)g(fo)-7 b(r)73 b FG(x)4759 8031 y Fz(i)4876 8006 y FP(l)n(ea)-7 b(vi)s(n)n(g)66 b(a)-8 b(t)67 b(its)g(u)-6 b(p)e(pe)l(r)67 b(o)-7 b(r)67 b(l)n(owe)l(r)f(bo)-5 b(und,)0 8205 y(r)q(e)o(s)d(pec)j (tive)l(ly)-17 b(.)65 b(T)8 b(h)l(e)53 b(r)q(e)n(mai)s(ni)s(n)n(g)e (bas)n(ic)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)59 b FG(x)3607 8230 y Fz(k)3691 8205 y FP(,)c FG(k)d FF(\271)42 b FG(i)15 b FP(,)53 b(ar)q(e)g(u)-6 b(pda)e(te)l(d)52 b(a)n(cc)l(o)-7 b(r)q(di)s(n)n(g)51 b(to)i(th)l(e)f(fo)-7 b(r)5 b(m)l(u)l(la)3300 8570 y FG(x)3393 8595 y Fz(k)3519 8570 y FP(=)p 3660 8429 107 7 v 43 w FG(b)3768 8595 y Fz(k)3886 8570 y FP(\014)p 4018 8469 117 7 v 34 w FG(a)4135 8595 y Fz(k)21 b(j)4271 8570 y FI(D)4403 8595 y Fz(j)4451 8570 y FP(.)0 9163 y Fu(3.3)197 b(Dual)66 b(V)-15 b(ar)r(iab)-5 b(le)65 b(Upda)-10 b(tes)0 9582 y FP(Upda)i(ti)s(n)n(g)60 b(th)l(e)i(d)-7 b(ual)61 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(is)g(s)n(i)s(mpl)n(e)g(i)s (n)f(th)l(e)g(\002)s(nal)g(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n,)63 b(b)-8 b(u)l(t)61 b(a)i(littl)n(e)f(wo)-7 b(rk)62 b(is)g(n)n(ec)-6 b(e)o(s)h(sary)0 9781 y(to)50 b(d)-5 b(e)l(r)s(ive)50 b(th)l(e)g(u)-6 b(pda)e(ti)s(n)n(g)48 b(fo)-7 b(r)5 b(m)l(u)l(la.)64 b(T)8 b(h)l(e)49 b(di\002)-49 b(\002cu)l(lty)49 b(lie)o(s)h(i)s(n)g(th)l(e)f(fa)n(c)-5 b(t)50 b(tha)-8 b(t)49 b(th)l(e)h(d)-7 b(ual)49 b(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s)i(of)f(i)s(nte)l(r)q(e)o(s)-5 b(t)50 b(ar)q(e)-1 9981 y FG(y)d FP(=)289 9846 y FC(\002)357 9981 y FG(y)459 9920 y Fw(B)723 9981 y FG(y)828 9920 y Fw(N)929 9846 y FC(\003)998 9981 y FP(,)59 b FG(i)12 b FP(.)p FG(e)p FP(.,)57 b(a)h(m)s(ixt)l(ur)q(e)f(of)g(bas)n(ic)h(and)e(n)m(o)l(n)m (bas)n(ic)g(d)-7 b(ual)56 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)79 b(Dir)q(ec)-5 b(t)58 b(a)-6 b(p)e(plica)g(tio)l(n)55 b(of)i(\(5\))g(is)g(n)m(ot)0 10180 y(pos)-5 b(s)n(ib)l(l)n(e.)3822 11400 y(9)p eop end %%Page: 10 13 TeXDict begin 10 12 bop 249 466 a FP(A)8 b(s)-5 b(s)d(ume)68 b(tha)-8 b(t)67 b(th)l(e)h(l)n(ea)-7 b(vi)s(n)n(g)67 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)73 b FG(x)3096 491 y Fz(i)3214 466 y FP(occu)-6 b(pie)o(s)68 b(r)q(ow)i FG(k)78 b FP(i)s(n)68 b(th)l(e)f(bas)n(is)78 b FG(B)t FP(.)111 b(T)8 b(h)l(e)68 b(n)n(ew)f(vec)-5 b(to)e(r)69 b(of)f(bas)n(ic)0 665 y(c)l(os)-5 b(ts,)68 b(\()r FG(c)669 605 y Fx(0)709 665 y FP(\))765 605 y Fz(B)861 665 y FP(,)g(can)c(be)h(e)-5 b(xpr)q(e)o(s)g(s)m(e)l(d) 65 b(as)g(\()r FG(c)2832 605 y Fx(0)2873 665 y FP(\))2929 605 y Fz(B)3071 665 y FP(=)48 b FG(c)3314 605 y Fz(B)3444 665 y FP(\014)36 b([0)25 b(.)i(.)g(.)e FG(c)4078 690 y Fz(i)4153 665 y FP(.)i(.)g(.)c(0])35 b(+)g([0)25 b(.)i(.)g(.)e FG(c)5223 690 y Fz(j)5292 665 y FP(.)i(.)g(.)c(0],)68 b(wh)l(e)l(r)q(e)d FG(c)6427 690 y Fz(i)6542 665 y FP(and)i FG(c)7013 690 y Fz(j)7122 665 y FP(occur)d(i)s(n)0 865 y(th)l(e)54 b FG(k)420 804 y FA(th)602 865 y FP(pos)n(itio)l(n.)64 b(Fr)q(o)n(m)53 b(\(7\),)f(it)h(is)g(easy)g(to)g(s)-8 b(h)n(ow)60 b FG(B)t FP(\()9 b FG(B)3902 804 y Fx(0)3945 865 y FP(\))3995 804 y FA(\0141)4186 865 y FP(=)52 b FG(I)g FP(+)34 b FG(a)4682 890 y Fz(i)4732 865 y FP(\()r FH(1)4885 804 y Fx(0)4925 865 y FP(\))4976 890 y Fz(k)5094 865 y FP(\014)g FG(a)5346 890 y Fz(j)5390 865 y FP(\()r FH(1)5543 804 y Fx(0)5584 865 y FP(\))5635 890 y Fz(k)5720 865 y FP(.)249 1163 y(W)-11 b(e)53 b(can)g(pr)q(oc)-6 b(ee)l(d)53 b(to)g(d)-5 b(e)l(r)s(ive)53 b(th)l(e)f(u)-6 b(pda)e(te)52 b(fo)-7 b(r)5 b(m)l(u)l(l\346)52 b(fo)-7 b(r)52 b FG(y)57 b FP(as)c(fo)-5 b(ll)n(ows:)2305 1529 y FG(y)2412 1460 y Fx(0)2494 1529 y FP(=)41 b(\()r FG(c)2778 1460 y Fx(0)2818 1529 y FP(\))2874 1460 y Fz(B)2970 1529 y FP(\()9 b FG(B)3155 1460 y Fx(0)3197 1529 y FP(\))3247 1460 y FA(\0141)2494 1803 y FP(=)43 b FG(c)2732 1734 y Fz(B)2835 1803 y FG(B)2975 1734 y FA(\0141)3135 1803 y FG(B)t FP(\()9 b FG(B)3444 1734 y Fx(0)3487 1803 y FP(\))3537 1734 y FA(\0141)3719 1803 y FP(\014)34 b FG(c)3935 1828 y Fz(i)3985 1803 y FP(\()r FH(1)4138 1734 y Fx(0)4178 1803 y FP(\))4229 1828 y Fz(k)4347 1803 y FP(+)g FG(c)4576 1828 y Fz(j)4620 1803 y FP(\()r FH(1)4773 1734 y Fx(0)4814 1803 y FP(\))4865 1828 y Fz(k)2494 2052 y FP(=)40 b FG(y)5 b FP(\()10 b FG(I)51 b FP(+)34 b FG(a)3142 2077 y Fz(i)3191 2052 y FP(\()r FH(1)3344 1983 y Fx(0)3385 2052 y FP(\))3436 2077 y Fz(k)3554 2052 y FP(\014)g FG(a)3806 2077 y Fz(j)3850 2052 y FP(\()r FH(1)4003 1983 y Fx(0)4043 2052 y FP(\))4094 2077 y Fz(k)4180 2052 y FP(\))e(\014)i FG(c)4478 2077 y Fz(i)4528 2052 y FP(\()r FH(1)4681 1983 y Fx(0)4722 2052 y FP(\))4773 2077 y Fz(k)4891 2052 y FP(+)g FG(c)5120 2077 y Fz(j)5164 2052 y FP(\()r FH(1)5317 1983 y Fx(0)5357 2052 y FP(\))5408 2077 y Fz(k)2494 2301 y FP(=)40 b FG(y)c FP(+)c(\()r FG(c)3049 2326 y Fz(j)3125 2301 y FP(\014)f FG(y)7 b(a)3481 2326 y Fz(j)3523 2301 y FP(\)\()r FH(1)3726 2233 y Fx(0)3767 2301 y FP(\))3818 2326 y Fz(k)3936 2301 y FP(\014)32 b(\()r FG(c)4202 2326 y Fz(i)4284 2301 y FP(\014)f FG(y)7 b(a)4627 2326 y Fz(i)4675 2301 y FP(\)\()r FH(1)4878 2233 y Fx(0)4919 2301 y FP(\))4970 2326 y Fz(k)5057 2301 y FP(.)0 2712 y(Rec)l(ognis)n(i)s(n)n(g)66 b(tha)-8 b(t)p 1424 2612 90 7 v 70 w FG(c)1527 2737 y Fz(j)1620 2712 y FP(=)50 b FG(c)1865 2737 y Fz(j)1946 2712 y FP(\014)36 b FG(y)7 b(a)2307 2737 y Fz(j)2418 2712 y FP(is)69 b(th)l(e)f(r)q(e)l (d)-7 b(u)i(c)f(e)l(d)68 b(c)l(os)-5 b(t)69 b(of)74 b FG(x)4352 2737 y Fz(j)4464 2712 y FP(be)l(fo)-7 b(r)q(e)69 b(th)l(e)f(bas)n(is)i(c)-7 b(han)n(g)n(e,)71 b(and)d(n)m(oti)s(n)n(g)e (tha)-8 b(t)p 0 2811 V 2 2912 a FG(c)90 2937 y Fz(i)182 2912 y FP(=)43 b FG(c)407 2937 y Fz(i)490 2912 y FP(\014)31 b FG(y)7 b(a)833 2937 y Fz(i)923 2912 y FP(=)41 b(0)53 b(s)n(i)s(nc)-6 b(e)58 b FG(x)1783 2937 y Fz(i)1886 2912 y FP(was)53 b(bas)n(ic,)g(we)f(ha)-7 b(ve)2305 3327 y FG(y)2412 3258 y Fx(0)2494 3327 y FP(=)40 b FG(y)c FP(+)p 2902 3226 V 34 w FG(c)3004 3352 y Fz(j)3050 3327 y FP(\()r FH(1)3203 3258 y Fx(0)3243 3327 y FP(\))3294 3352 y Fz(k)3382 3327 y FP(.)0 3759 y(A)8 b(s)53 b(a)g(furth)l(e)l(r)f(o)-8 b(bs)m(e)l(rv)r(a)g(tio)l(n,)50 b(n)m(ote)i(tha)-8 b(t)53 b(\()r FH(1)2972 3698 y Fx(0)3012 3759 y FP(\))3063 3784 y Fz(k)3190 3759 y FP(=)44 b FH(1)3434 3784 y Fz(k)3520 3759 y FP(/)p 3622 3658 117 7 v 4 w FG(a)3739 3784 y Fz(k)21 b(j)3875 3759 y FP(,)52 b(s)n(o)h(we)f(can)h(u)-6 b(pda)e(te)52 b FG(y)k FP(u)-7 b(s)n(i)s(n)n(g)52 b(a)h(r)q(ow)g(of)61 b FG(B)6920 3698 y FA(\0141)7124 3759 y FP(as)2305 4174 y FG(y)2412 4105 y Fx(0)2494 4174 y FP(=)40 b FG(y)c FP(+)p 2902 4073 90 7 v 34 w FG(c)3004 4199 y Fz(j)3052 4174 y FH(1)3152 4199 y Fz(k)3239 4174 y FP(/)p 3341 4073 117 7 v 4 w FG(a)3457 4199 y Fz(k)21 b(j)3595 4174 y FP(.)3771 11400 y(10)p eop end %%Page: 11 14 TeXDict begin 11 13 bop 0 475 a FL(4)239 b(Pr)r(icin)-8 b(g)78 b(Algo)-10 b(r)r(ithms)0 992 y Fu(4.1)197 b(Pr)n(ojec)-10 b(te)-5 b(d)63 b(Stee)-8 b(pes)i(t)63 b(Edge)i(Pr)r(icin)-7 b(g)0 1411 y FP(T)8 b(h)l(e)65 b(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x)66 b(algo)-7 b(r)s(ithm)64 b(i)s(n)k FM(D)8 b(Y)g(L)g(P)71 b FP(u)-7 b(s)m(e)o(s)66 b(pr)q(oj)l(ec)-5 b(te)l(d)64 b(s)-5 b(tee)e(pe)o(s)i(t)67 b(e)l(dg)n(e)d(\(PSE\))f(pr)s(ic)m(i)s(n)n (g;)70 b(th)l(e)64 b(algo)-7 b(r)s(ithm)0 1610 y(u)g(s)m(e)l(d)53 b(is)g(d)-5 b(e)o(sc)d(r)s(ibe)l(d)52 b(as)i(dy)7 b(nam)s(ic)51 b(pr)q(oj)l(ec)-5 b(te)l(d)53 b(s)-5 b(tee)e(pe)o(s)i(t)54 b(e)l(dg)n(e)e(\(`dy)7 b(nam)s(ic'\))50 b(i)s(n)i(Fo)-7 b(rr)q(e)o(s)i(t)54 b(and)e(Go)-5 b(ldfarb)52 b([3].)249 1909 y(T)r(o)k(und)-5 b(e)l(rs)g(t)s(and)54 b(th)l(e)h(o)-5 b(pe)l(ra)d(tio)l(n)54 b(of)h(pr)q(oj)l(ec)-5 b(te)l(d)55 b(s)-5 b(tee)e(pe)o(s)i(t)57 b(e)l(dg)n(e)e(\(PSE\))e(pr)s(ic)m(i)s(n)n (g,)i(it)g(will)g(be)g(h)l(e)l(lpfu)l(l)f(to)i(s)-5 b(t)s(art)0 2108 y(with)49 b(th)l(e)g(d)-5 b(e)l(\002)s(nitio)l(n)48 b(of)i(a)g(dir)q(ec)-5 b(tio)l(n)49 b(of)h(motio)l(n.)63 b(T)8 b(h)l(e)50 b(v)r(al)n(u)l(e)o(s)g(of)g(th)l(e)f(bas)n(ic)i(and)e (n)m(o)l(n)m(bas)n(ic)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(can)g(be)0 2308 y(e)-5 b(xpr)q(e)o(s)g(s)m(e)l(d)53 b(as)2878 2371 y FC(\024)2975 2504 y FG(x)3087 2443 y Fz(B)2971 2703 y FG(x)3082 2643 y Fz(N)3186 2371 y FC(\025)3315 2605 y FP(=)3456 2371 y FC(\024)3634 2504 y FG(b)3545 2703 y(l)19 b FP(/)t FG(u)3828 2371 y FC(\025)3948 2605 y FP(\014)4080 2371 y FC(\024)4176 2504 y FG(B)4313 2443 y FA(\014)-13 b(1)4461 2504 y FG(A)4587 2443 y Fz(N)4338 2703 y FP(\014)10 b FG(I)4692 2371 y FC(\025)4802 2605 y FI(D)2677 b FP(\(9\))0 2970 y(wh)l(e)l(r)q(e)48 b FG(l)19 b FP(/)t FG(u)58 b FP(is)48 b(i)s(ntend)-5 b(e)l(d)46 b(to)h(i)s(ndica)-8 b(te)46 b(u)-7 b(s)m(e)48 b(of)f(th)l(e)g(l)n(owe)l (r)f(o)-7 b(r)48 b(u)-6 b(p)e(pe)l(r)46 b(bo)-5 b(und)46 b(as)i(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)47 b(fo)-7 b(r)47 b(th)l(e)g(particu)l(lar)0 3170 y(n)m(o)l(n)m(bas)n(ic)54 b(v)r(ar)s(i)s(a)l(b)l(l)n(e.)73 b(Wh)l(en)55 b(a)h(g)t(iven)f(n)m(o)l (n)m(bas)n(ic)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)60 b FG(x)4268 3195 y Fz(j)4368 3170 y FP(is)55 b(move)l(d)h(by)f(an)g(amo)-5 b(unt)54 b FI(D)6456 3195 y Fz(j)6502 3170 y FP(,)i(th)l(e)f(v)r(al)n (u)l(e)o(s)h(of)k FG(x)0 3369 y FP(will)52 b(c)-7 b(han)n(g)n(e)51 b(as)2702 3666 y(\014)2825 3432 y FC(\024)2921 3565 y FG(B)3058 3505 y FA(\014)-13 b(1)3198 3565 y FG(a)3316 3590 y Fz(j)3010 3764 y FP(\014)r FG(e)3217 3789 y Fz(j)3359 3432 y FC(\025)3470 3666 y FI(D)3602 3691 y Fz(j)3689 3666 y FP(=)41 b(\014)3953 3432 y FC(\024)p 4079 3464 117 7 v 4081 3565 a FG(a)4208 3590 y Fz(j)4041 3764 y FP(\014)r FG(e)4248 3789 y Fz(j)4291 3432 y FC(\025)4402 3666 y FI(D)4534 3691 y Fz(j)4621 3666 y FP(=)i FH(h)4876 3691 y Fz(j)4920 3666 y FI(D)5052 3691 y Fz(j)7495 3666 y FP(\(10\))0 4030 y(T)8 b(h)l(e)52 b(vec)-5 b(to)e(r)56 b FH(h)998 4055 y Fz(j)1095 4030 y FP(is)c(th)l(e)g(dir)q(ec)-5 b(tio)l(n)52 b(of)g(motio)l(n)g(as)58 b FG(x)3504 4055 y Fz(j)3601 4030 y FP(is)52 b(c)-7 b(han)n(g)n(e)l(d;)51 b(alte)l(r)5 b(na)-8 b(tive)l(ly)-17 b(,)51 b(it)i(is)g(th)l(e)f(e)l (dg)n(e)g(of)g(th)l(e)g(po)-5 b(lyh)l(e-)0 4229 y(dr)q(o)l(n)52 b(whic)-7 b(h)51 b(is)i(tra)-7 b(ve)l(rs)m(e)l(d)53 b(as)58 b FG(x)2279 4254 y Fz(j)2376 4229 y FP(is)53 b(c)-7 b(han)n(g)n(e)l(d.) 63 b(L)5 b(e)-7 b(t)56 b FH(g)3752 4254 y Fz(j)3838 4229 y FP(=)41 b FE(k)r FH(h)4180 4254 y Fz(j)4224 4229 y FE(k)61 b FP(be)52 b(th)l(e)h(n)m(o)-7 b(r)5 b(m)52 b(of)j FH(h)5713 4254 y Fz(j)5757 4229 y FP(.)249 4528 y(Fo)-7 b(r)50 b(pr)s(ic)m(i)s(n)n(g,)f(it)g(can)h(be)g(i)s(mme)l(di)s(a)-8 b(te)l(ly)49 b(s)m(een)g(tha)-8 b(t)51 b FG(c)11 b FH(h)3989 4553 y Fz(j)4071 4528 y FP(=)41 b FG(c)4307 4553 y Fz(j)4381 4528 y FP(\014)32 b FG(c)4608 4467 y Fz(B)p 4726 4427 V 4728 4528 a FG(a)4855 4553 y Fz(j)4950 4528 y FP(is)50 b(th)l(e)f(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)49 b(c)l(os)-5 b(t)p 6483 4427 90 7 v 52 w FG(c)6586 4553 y Fz(j)6631 4528 y FP(.)65 b(Dantzig)48 b(pr)s(ic-)0 4727 y(i)s(n)n(g)60 b(c)-7 b(h)n(oos)m(e)o(s)61 b(an)g(ente)l(r)s(i)s(n)n(g)e(v)r(ar)s(i)s (a)l(b)l(l)n(e)66 b FG(x)2802 4752 y Fz(j)2907 4727 y FP(s)-8 b(u)j(c)e(h)61 b(tha)-8 b(t)p 3727 4626 V 62 w FG(c)3830 4752 y Fz(j)3936 4727 y FP(has)61 b(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)61 b(s)n(ign)f(and)g(th)l(e)h(larg)n(e)o (s)-5 b(t)60 b(magnit)l(ud)-5 b(e)0 4926 y(ove)l(r)53 b(all)g(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)52 b(c)l(os)-5 b(ts,)54 b(b)-8 b(u)l(t)52 b(it)h(can)g(be)g(m)s(isl)n(e)l(d)g(by)f(dif)n(fe)l (r)q(enc)-6 b(e)o(s)54 b(i)s(n)f(scali)s(n)n(g)f(fr)q(o)n(m)h(o)l(n)n (e)g(c)l(o)-5 b(l)n(umn)52 b(to)h(th)l(e)f(n)n(e)-5 b(xt.)0 5125 y(Stee)e(pe)o(s)i(t)58 b(e)l(dg)n(e)e(\(SE\))g(pr)s(ic)m(i)s(n)n (g)f(scal)n(e)o(s)p 2692 5025 V 60 w FG(c)2795 5150 y Fz(j)2898 5125 y FP(by)j FH(g)3251 5150 y Fz(j)3296 5125 y FP(,)g(c)-7 b(h)n(oos)n(i)s(n)n(g)56 b(an)h(ente)l(r)s(i)s(n)n(g)f(v) r(ar)s(i)s(a)l(b)l(l)n(e)62 b FG(x)5963 5150 y Fz(j)6064 5125 y FP(with)p 6473 5025 V 58 w FG(c)6576 5150 y Fz(j)6678 5125 y FP(of)57 b(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)0 5435 y(s)n(ign)56 b(and)f(th)l(e)h(larg)n(e)o(s)-5 b(t)1656 5194 y FC(\014)1656 5294 y(\014)1656 5393 y(\014)1656 5493 y(\014)1779 5318 y FG(c)11 b FH(h)1982 5343 y Fz(j)p 1732 5397 340 7 v 1732 5549 a FE(k)r FH(h)1933 5574 y Fz(j)1976 5549 y FE(k)2091 5194 y FC(\014)2091 5294 y(\014)2091 5393 y(\014)2091 5493 y(\014)2140 5435 y FP(,)57 b(e)l(f)n(fec)-5 b(tive)l(ly)56 b(calcu)l(la)-8 b(ti)s(n)n(g)55 b(th)l(e)h(c)-7 b(han)n(g)n(e)54 b(i)s(n)i(o)-8 b(bj)l(ec)j(tive)56 b(v)r(al)n(u)l(e)g (ove)l(r)h(a)f(unit)f(vec)-5 b(to)e(r)0 5779 y(i)s(n)53 b(th)l(e)f(dir)q(ec)-5 b(tio)l(n)52 b(of)g(motio)l(n.)64 b(T)8 b(his)53 b(g)t(ive)o(s)g(a)g(unifo)-7 b(r)5 b(m)52 b(pr)s(ic)m(i)s(n)n(g)f(c)l(o)n(mpar)s(is)n(o)l(n,)h(u)-7 b(s)n(i)s(n)n(g)52 b(th)l(e)g(sl)n(o)-5 b(pe)53 b(of)g(th)l(e)g(e)l(dg) n(e.)249 6078 y(Pr)q(oj)l(ec)-5 b(te)l(d)47 b(s)-5 b(tee)e(pe)o(s)i(t) 49 b(e)l(dg)n(e)d(\(PSE\))g(pr)s(ic)m(i)s(n)n(g)f(u)-7 b(s)m(e)o(s)48 b(`pr)q(oj)l(ec)-5 b(te)l(d')46 b(c)l(o)-5 b(l)n(umn)47 b(n)m(o)-7 b(r)5 b(ms)46 b(whic)-7 b(h)46 b(ar)q(e)i(calcu)l(la)-8 b(te)l(d)47 b(u)-7 b(s)n(i)s(n)n(g)0 6277 y(a)54 b(vec)-5 b(to)e(r)693 6273 y(\230)681 6277 y FH(h)793 6302 y Fz(j)891 6277 y FP(whic)g(h)53 b(c)l(o)l(nt)s(ai)s (ns)g(o)l(nly)f(th)l(e)h(c)l(o)n(mpo)l(n)n(ents)g(of)j FH(h)4208 6302 y Fz(j)4306 6277 y FP(i)s(ncl)n(ud)-5 b(e)l(d)53 b(i)s(n)g(a)h(r)q(e)l(fe)l(r)q(enc)-6 b(e)54 b(frame.)68 b(Initi)s(ally)-17 b(,)54 b(this)0 6476 y(r)q(e)l(fe)l(r)q (enc)-6 b(e)46 b(frame)g(c)l(o)l(nt)s(ai)s(ns)g(o)l(nly)f(th)l(e)g(n)m (o)l(n)m(bas)n(ic)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)j(s)n(o)e(tha)-8 b(t)4897 6472 y(\230)4890 6476 y FH(g)4992 6501 y Fz(j)5073 6476 y FP(=)36 b(1)46 b(fo)-7 b(r)46 b(all)51 b FG(x)5968 6501 y Fz(j)6049 6476 y FF(\316)9 b FG(x)6287 6416 y Fz(N)6391 6476 y FP(.)63 b(In)46 b(o)-7 b(r)q(d)i(e)l(r)46 b(to)g(a)-7 b(void)0 6676 y(calcu)l(la)f(ti)s(n)n(g)937 6672 y(\230)930 6676 y FH(g)1032 6701 y Fz(j)1128 6676 y FP(fr)q(o)n(m)51 b(sc)-8 b(ra)g(tc)h(h)51 b(ea)n(c)-7 b(h)51 b(ti)s(me)g(a)g(c)l(o)-5 b(l)n(umn)50 b(m)l(u)-7 b(s)i(t)51 b(be)h(pr)s(ic)-6 b(e)l(d,)51 b(th)l(e)f(n)m(o)-7 b(r)5 b(ms)51 b(ar)q(e)g(ite)l(ra)-8 b(tive)l(ly)50 b(u)-6 b(pda)e(te)l(d.)249 6975 y(T)r(o)84 b(d)-5 b(e)l(r)s(ive)84 b(th)l(e)f(u)-6 b(pda)e(te)83 b(fo)-7 b(r)5 b(m)l(u)l(l\346)82 b(fo)-7 b(r)3122 6971 y(\230)3115 6975 y FH(g)3217 7000 y Fz(j)3261 6975 y FP(,)92 b(it)83 b(is)h(u)-7 b(s)m(e)l(fu)l(l)83 b(to)g(s)-5 b(t)s(art)84 b(with)e(th)l(e)h(u)-6 b(pda)e(te)83 b(fo)-7 b(r)5 b(m)l(u)l(l\346)83 b(fo)-7 b(r)84 b(th)l(e)0 7174 y(fu)l(ll)74 b(vec)-5 b(to)e(r)78 b FH(h)1001 7199 y Fz(j)1045 7174 y FP(.)132 b(A)8 b(s)75 b(mentio)l(n)n(e)l(d)f(i)s(n)h (\2473.3,)80 b(fo)-7 b(r)80 b FG(x)3533 7199 y Fz(i)3658 7174 y FP(l)n(ea)-7 b(vi)s(n)n(g)74 b(bas)n(is)h(pos)n(itio)l(n)h FG(k)85 b FP(and)80 b FG(x)6183 7199 y Fz(j)6302 7174 y FP(ente)l(r)s(i)s(n)n(g,)88 b FG(B)t FP(\()9 b FG(B)7420 7114 y Fx(0)7462 7174 y FP(\))7512 7114 y FA(\014)-13 b(1)7700 7174 y FP(=)10 7373 y FG(I)48 b FP(+)30 b FG(a)346 7398 y Fz(i)396 7373 y FP(\()r FH(1)549 7313 y Fx(0)590 7373 y FP(\))641 7398 y Fz(k)755 7373 y FP(\014)f FG(a)1002 7398 y Fz(j)1046 7373 y FP(\()r FH(1)1199 7313 y Fx(0)1240 7373 y FP(\))1291 7398 y Fz(k)1377 7373 y FP(.)63 b(T)s(aki)s(n)n(g)46 b(this)g(o)l(n)n(e)i(s)-5 b(te)e(p)47 b(furth)l(e)l(r)-9 b(,)47 b(\()9 b FG(B)3993 7313 y Fx(0)4035 7373 y FP(\))4085 7313 y FA(\014)-13 b(1)4260 7373 y FP(=)46 b FG(B)4543 7313 y FA(\014)-13 b(1)4709 7373 y FP(+)p 4836 7272 117 7 v 29 w FG(a)4953 7398 y Fz(i)5004 7373 y FP(\()r FH(1)5157 7313 y Fx(0)5198 7373 y FP(\))5249 7398 y Fz(k)5363 7373 y FP(\014)p 5490 7272 V 29 w FG(a)5620 7398 y Fz(j)5665 7373 y FP(\()r FH(1)5818 7313 y Fx(0)5859 7373 y FP(\))5910 7398 y Fz(k)5995 7373 y FP(.)64 b(T)8 b(h)l(en)47 b(fo)-7 b(r)47 b(an)g(arbitrary)0 7572 y(c)l(o)-5 b(l)n(umn)54 b FG(a)760 7597 y Fz(p)841 7572 y FP(,)2410 7888 y(\()9 b FG(B)2595 7820 y Fx(0)2637 7888 y FP(\))2687 7820 y FA(\014)-13 b(1)2826 7888 y FG(a)2935 7913 y Fz(p)3058 7888 y FP(=)50 b FG(B)3345 7820 y FA(\014)-13 b(1)3484 7888 y FG(a)3593 7913 y Fz(p)3707 7888 y FP(+)p 3839 7788 V 34 w FG(a)3955 7913 y Fz(i)4006 7888 y FP(\()r FH(1)4159 7820 y Fx(0)4200 7888 y FP(\))4251 7913 y Fz(k)4339 7888 y FG(a)4448 7913 y Fz(p)4561 7888 y FP(\014)p 4693 7788 V 34 w FG(a)4822 7913 y Fz(j)4868 7888 y FP(\()r FH(1)5021 7820 y Fx(0)5061 7888 y FP(\))5112 7913 y Fz(k)5200 7888 y FG(a)5309 7913 y Fz(p)p 2813 8140 V 2815 8241 a FG(a)2931 8172 y Fx(0)2933 8282 y Fz(p)3058 8241 y FP(=)p 3199 8140 V 43 w FG(a)3319 8266 y Fz(p)3434 8241 y FP(+)34 b FG(e)3661 8266 y Fz(k)3746 8241 y FP(\()p 3816 8028 V 3818 8128 a FG(a)3933 8153 y Fz(k)12 b(p)p 3815 8203 282 7 v 3829 8254 117 7 v 3831 8355 a FG(a)3947 8380 y Fz(k)21 b(j)4117 8241 y FP(\))32 b(\014)p 4331 8140 V 34 w FG(a)4460 8266 y Fz(j)4506 8241 y FP(\()p 4576 8028 V 4578 8128 a FG(a)4693 8153 y Fz(k)12 b(p)p 4575 8203 282 7 v 4589 8254 117 7 v 4591 8355 a FG(a)4707 8380 y Fz(k)21 b(j)4877 8241 y FP(\))2568 b(\(11\))0 8669 y(\(r)q(ecalli)s(n)n(g)51 b(tha)-8 b(t)52 b(\()r FH(1)1323 8608 y Fx(0)1364 8669 y FP(\))1415 8694 y Fz(k)1542 8669 y FP(=)43 b FH(1)1785 8694 y Fz(k)1872 8669 y FP(/)p 1974 8568 V 4 w FG(a)2091 8694 y Fz(k)21 b(j)2226 8669 y FP(\).)249 9063 y(T)r(o)53 b(s)m(ee)g(tha)-8 b(t)52 b(\()-8 b(11\))52 b(amo)-5 b(unts)52 b(to)j FH(h)2610 9003 y Fx(0)2612 9104 y Fz(p)2735 9063 y FP(=)43 b FH(h)2981 9088 y Fz(p)3095 9063 y FP(\014)34 b FH(h)3341 9088 y Fz(j)3385 9063 y FP(\()p 3455 8850 V 3457 8951 a FG(a)3572 8976 y Fz(k)12 b(p)p 3455 9025 282 7 v 3469 9076 117 7 v 3471 9177 a FG(a)3586 9202 y Fz(k)21 b(j)3756 9063 y FP(\),)53 b(it')-5 b(s)52 b(h)l(e)l(lpfu)l(l)g(to)g(e)-5 b(xpand)53 b(th)l(e)f(vec)-5 b(to)e(rs:)p 2486 9913 V 2488 10014 a FG(a)2604 9945 y Fx(0)2606 10055 y Fz(p)2730 10014 y FP(=)2871 9382 y FC(2)2871 9674 y(6)2871 9773 y(6)2871 9873 y(6)2871 9973 y(6)2871 10072 y(6)2871 10172 y(6)2871 10278 y(4)p 3002 9401 V 3004 9502 a FG(a)3119 9527 y FA(1)t Fz(p)3113 9680 y FP(.)3113 9747 y(.)3113 9813 y(.)p 2999 9912 V 3001 10012 a FG(a)3116 10037 y Fz(k)12 b(p)3113 10191 y FP(.)3113 10258 y(.)3113 10324 y(.)p 2982 10423 V 2984 10523 a FG(a)3099 10548 y Fz(m)h(p)3298 9382 y FC(3)3298 9674 y(7)3298 9773 y(7)3298 9873 y(7)3298 9973 y(7)3298 10072 y(7)3298 10172 y(7)3298 10278 y(5)3440 10014 y FP(+)3572 9382 y FC(2)3572 9674 y(6)3572 9773 y(6)3572 9873 y(6)3572 9973 y(6)3572 10072 y(6)3572 10172 y(6)3572 10278 y(4)3683 9502 y FP(0)3708 9680 y(.)3708 9747 y(.)3708 9813 y(.)3683 10012 y(1)3708 10191 y(.)3708 10258 y(.)3708 10324 y(.)3683 10523 y(0)3786 9382 y FC(3)3786 9674 y(7)3786 9773 y(7)3786 9873 y(7)3786 9973 y(7)3786 10072 y(7)3786 10172 y(7)3786 10278 y(5)p 3939 9801 V 3941 9902 a FG(a)4057 9927 y Fz(k)f(p)p 3939 9976 282 7 v 3953 10027 117 7 v 3955 10128 a FG(a)4071 10153 y Fz(k)21 b(j)4273 10014 y FP(\014)4405 9382 y FC(2)4405 9674 y(6)4405 9773 y(6)4405 9873 y(6)4405 9973 y(6)4405 10072 y(6)4405 10172 y(6)4405 10278 y(4)p 4536 9401 V 4538 9502 a FG(a)4652 9527 y FA(1)13 b Fz(j)4633 9680 y FP(.)4633 9747 y(.)4633 9813 y(.)p 4533 9912 V 4535 10012 a FG(a)4650 10037 y Fz(k)21 b(j)4633 10191 y FP(.)4633 10258 y(.)4633 10324 y(.)p 4516 10423 V 4518 10523 a FG(a)4633 10548 y Fz(m)h(j)4803 9382 y FC(3)4803 9674 y(7)4803 9773 y(7)4803 9873 y(7)4803 9973 y(7)4803 10072 y(7)4803 10172 y(7)4803 10278 y(5)p 4957 9801 V 4959 9902 a FG(a)5074 9927 y Fz(k)12 b(p)p 4957 9976 282 7 v 4971 10027 117 7 v 4973 10128 a FG(a)5088 10153 y Fz(k)21 b(j)5260 10014 y FP(.)3771 11400 y(11)p eop end %%Page: 12 15 TeXDict begin 12 14 bop 0 466 a FP(W)m(ith)72 b(a)g(littl)n(e)g(th)n(o) -5 b(u)l(ght,)75 b(it)d(can)h(be)f(s)m(een)g(tha)-8 b(t)71 b(th)l(e)h(m)s(iddl)n(e)g(te)l(r)5 b(m)72 b(r)q(e)-7 b(pr)q(e)o(s)m(ents)73 b(o)l(n)n(e)f(half)f(of)h(th)l(e)g(pe)l(r)5 b(m)l(u)l(t)s(a-)0 665 y(tio)l(n)71 b(whic)-7 b(h)71 b(move)o(s)78 b FG(x)1622 690 y Fz(j)1739 665 y FP(i)s(nto)71 b(th)l(e)h(bas)n(ic)h(partitio)l(n)e(of)j FH(h)4037 601 y Fx(0)4048 706 y Fz(j)4093 665 y FP(.)124 b(\(T)8 b(h)l(e)72 b(oth)l(e)l(r)f(half)h(move)o(s)78 b FG(x)6240 690 y Fz(i)6362 665 y FP(i)s(nto)72 b(th)l(e)g(n)m(o)l(n)m(bas)n(ic)0 865 y(partitio)l(n\).)87 b(Wh)l(en)59 b(u)-6 b(pda)e(ti)s(n)n(g)61 b FH(h)2282 890 y Fz(i)2332 865 y FP(,)h(th)l(e)e(u)-6 b(pda)e(te)60 b(fo)-7 b(r)5 b(m)l(u)l(la)60 b(can)g(be)h(c)l(o)-5 b(lla)f(ps)m(e)l(d)59 b(to)k FH(h)5768 800 y Fx(0)5766 905 y Fz(i)5861 865 y FP(=)44 b(\014)r FH(h)6219 890 y Fz(j)6265 865 y FP(/)p 6367 764 117 7 v 4 w FG(a)6483 890 y Fz(k)21 b(j)6619 865 y FP(,)63 b(s)n(i)s(nc)-6 b(e)p 7209 764 V 63 w FG(a)7326 890 y Fz(k)8 b(i)7500 865 y FP(=)44 b(1.)0 1064 y(Summar)s(is)n(i)s(n)n(g,)51 b(th)l(e)i(u)-6 b(pda)e(te)52 b(fo)-7 b(r)5 b(m)l(u)l(l\346)52 b(fo)-7 b(r)53 b(th)l(e)f(e)l(dg)n(e)g(dir)q(ec)-5 b(tio)l(ns)54 b FH(h)4770 1089 y Fz(j)4867 1064 y FP(ar)q(e)2873 1525 y FH(h)2974 1456 y Fx(0)2976 1566 y Fz(p)3099 1525 y FP(=)43 b FH(h)3345 1550 y Fz(p)3459 1525 y FP(\014)34 b FH(h)3705 1550 y Fz(j)3749 1525 y FP(\()p 3819 1312 V 3821 1412 a FG(a)3936 1437 y Fz(k)12 b(p)p 3819 1487 282 7 v 3833 1538 117 7 v 3835 1639 a FG(a)3951 1664 y Fz(k)21 b(j)4120 1525 y FP(\))r(,)363 b FG(p)47 b FF(\271)c FG(i)2908 1897 y FH(h)3009 1828 y Fx(0)3007 1938 y Fz(i)3099 1897 y FP(=)e(\014)r FH(h)3454 1922 y Fz(j)3500 1897 y FP(/)p 3602 1796 V 4 w FG(a)3718 1922 y Fz(k)21 b(j)3856 1897 y FP(.)7495 1669 y(\(12\))249 2382 y(In)65 b(fa)n(c)-5 b(t,)68 b(th)l(e)d(c)l(od)-5 b(e)65 b(a)n(c)-5 b(t)l(ually)63 b(s)-5 b(to)e(r)q(e)o(s)66 b(and)f(u)-6 b(pda)e(te)o(s)67 b FH(g)4055 2318 y FA(2)4051 2423 y Fz(j)4135 2382 y FP(.)102 b(W)m(ith)64 b(\()-8 b(12\))65 b(i)s(n)f(hand,)j(d)-5 b(e)l(r)s(iv)r(a)d(tio)l(n)64 b(of)h(th)l(e)g(u)-6 b(pda)e(te)0 2582 y(fo)h(r)5 b(m)l(u)l(l\346)52 b(ar)q(e)h(s)-5 b(traightfo)e(rwar)q (d:)2198 2952 y(\()r FH(g)2358 2883 y Fx(0)2343 2993 y Fz(p)2424 2952 y FP(\))2474 2883 y FA(2)2596 2952 y FP(=)43 b FH(h)2840 2883 y Fx(0)2842 2993 y Fz(p)2956 2952 y FF(\327)34 b FH(h)3133 2883 y Fx(0)3135 2993 y Fz(p)2596 3309 y FP(=)41 b(\()r FH(h)2892 3334 y Fz(p)3006 3309 y FP(\014)34 b FH(h)3252 3334 y Fz(j)3296 3309 y FP(\()p 3366 3095 V 3368 3196 a FG(a)3483 3221 y Fz(k)12 b(p)p 3366 3270 282 7 v 3380 3322 117 7 v 3382 3422 a FG(a)3497 3447 y Fz(k)21 b(j)3667 3309 y FP(\)\))32 b FF(\327)g FP(\()r FH(h)4028 3334 y Fz(p)4142 3309 y FP(\014)h FH(h)4387 3334 y Fz(j)4432 3309 y FP(\()p 4502 3095 V 4504 3196 a FG(a)4619 3221 y Fz(k)12 b(p)p 4501 3270 282 7 v 4515 3322 117 7 v 4517 3422 a FG(a)4633 3447 y Fz(k)21 b(j)4803 3309 y FP(\)\))2596 3767 y(=)43 b FH(h)2842 3792 y Fz(p)2956 3767 y FF(\327)34 b FH(h)3135 3792 y Fz(p)3249 3767 y FP(\014)e(2\()p 3554 3554 V 3556 3655 a FG(a)3670 3680 y Fz(k)12 b(p)p 3553 3729 282 7 v 3567 3780 117 7 v 3569 3881 a FG(a)3685 3906 y Fz(k)21 b(j)3855 3767 y FP(\))r FH(h)4019 3792 y Fz(j)4095 3767 y FF(\327)34 b FH(h)4274 3792 y Fz(p)4388 3767 y FP(+)e(\()p 4590 3554 V 4592 3655 a FG(a)4707 3680 y Fz(k)12 b(p)p 4589 3729 282 7 v 4603 3780 117 7 v 4605 3881 a FG(a)4721 3906 y Fz(k)21 b(j)4891 3767 y FP(\))4941 3699 y FA(2)5023 3767 y FH(h)5135 3792 y Fz(j)5211 3767 y FF(\327)34 b FH(h)5399 3792 y Fz(j)2596 4240 y FP(=)43 b FH(g)2845 4172 y FA(2)2832 4281 y Fz(p)2957 4240 y FP(\014)32 b(2\()p 3262 4027 V 3264 4128 a FG(a)3379 4153 y Fz(k)12 b(p)p 3261 4202 282 7 v 3275 4254 117 7 v 3277 4354 a FG(a)3393 4379 y Fz(k)21 b(j)3563 4240 y FP(\))3636 4106 y FC(\002)p 3705 4138 V 3707 4238 a FG(a)3824 4169 y Fz(T)3834 4279 y(j)4086 4238 y FG(e)4187 4174 y Fz(T)4191 4279 y(j)4279 4106 y FC(\003)4371 4006 y(\024)p 4458 4038 V 4460 4139 a FG(a)4579 4164 y Fz(p)4472 4338 y FG(e)4568 4363 y Fz(p)4662 4006 y FC(\025)4781 4240 y FP(+)32 b(\()p 4983 4027 V 4985 4128 a FG(a)5100 4153 y Fz(k)12 b(p)p 4983 4202 282 7 v 4997 4254 117 7 v 4999 4354 a FG(a)5115 4379 y Fz(k)21 b(j)5284 4240 y FP(\))5334 4172 y FA(2)5417 4240 y FH(g)5523 4172 y FA(2)5519 4281 y Fz(j)2596 4699 y FP(=)43 b FH(g)2845 4630 y FA(2)2832 4740 y Fz(p)2957 4699 y FP(\014)32 b(2\()p 3262 4486 V 3264 4587 a FG(a)3379 4612 y Fz(k)12 b(p)p 3261 4661 282 7 v 3275 4712 117 7 v 3277 4813 a FG(a)3393 4838 y Fz(k)21 b(j)3563 4699 y FP(\)\()p 3663 4598 V 2 w FG(a)3782 4630 y Fz(T)3792 4740 y(j)3884 4699 y FG(B)4021 4630 y FA(\014)-13 b(1)4159 4699 y FP(\))r FG(a)4320 4724 y Fz(p)4433 4699 y FP(+)32 b(\()p 4635 4486 V 4637 4587 a FG(a)4752 4612 y Fz(k)12 b(p)p 4635 4661 282 7 v 4649 4712 117 7 v 4651 4813 a FG(a)4766 4838 y Fz(k)21 b(j)4936 4699 y FP(\))4986 4630 y FA(2)5069 4699 y FH(g)5175 4630 y FA(2)5171 4740 y Fz(j)7495 3876 y FP(\(13\))2223 5120 y(\()r FH(g)2383 5051 y Fx(0)2364 5161 y Fz(i)2424 5120 y FP(\))2474 5051 y FA(2)2596 5120 y FP(=)43 b FH(h)2840 5051 y Fx(0)2838 5161 y Fz(i)2920 5120 y FF(\327)34 b FH(h)3097 5051 y Fx(0)3095 5161 y Fz(i)2596 5369 y FP(=)43 b FH(h)2851 5394 y Fz(j)2897 5369 y FP(/)p 2999 5268 V 4 w FG(a)3116 5394 y Fz(k)21 b(j)3284 5369 y FF(\327)34 b FH(h)3472 5394 y Fz(j)3518 5369 y FP(/)p 3620 5268 V 4 w FG(a)3736 5394 y Fz(k)21 b(j)2596 5643 y FP(=)43 b FH(g)2845 5575 y FA(2)2841 5684 y Fz(j)2927 5643 y FP(/)p 3029 5543 V 4 w FG(a)3144 5574 y FA(2)3145 5686 y Fz(k)21 b(j)7495 5384 y FP(\(14\))249 6114 y(Eq)l(ua)-8 b(tio)l(ns)57 b(\()-8 b(12\))58 b(can)h(be)g(u)-7 b(s)m(e)l(d)59 b(dir)q(ec)-5 b(tly)58 b(to)h(u)-6 b(pda)e(te)59 b(th)l(e)4311 6110 y(\230)4300 6114 y FH(h)4412 6139 y Fz(j)4456 6114 y FP(.)84 b(T)r(o)59 b(a)-6 b(da)g(pt)59 b(\()-8 b(13\))58 b(and)h(\()-8 b(14\))58 b(fo)-7 b(r)59 b(th)l(e)7032 6110 y(\230)7025 6114 y FH(g)7127 6139 y Fz(j)7171 6114 y FP(,)i(a)e(littl)n(e)0 6313 y(alg)n(e)l(b)-5 b(ra)52 b(s)-8 b(h)n(o)j(u)l(ld)51 b(s)m(e)l(rve)i(to)g(s)m(ee)g(tha)-8 b(t)52 b(it')-5 b(s)53 b(s)-8 b(u\002)-49 b(\002c)m(ient)51 b(to)i(s)-8 b(u)h(bs)i(tit)l(u)l(te)4745 6312 y(\230)4713 6313 y FG(a)4831 6338 y Fz(j)4928 6313 y FP(i)s(n)52 b(\()-8 b(13\),)52 b(as)i(we)l(ll)e(as)h(u)-7 b(s)n(i)s(n)n(g)6883 6309 y(\230)6876 6313 y FH(g)6969 6338 y Fz(p)7104 6313 y FP(and)7474 6309 y(\230)7467 6313 y FH(g)7569 6338 y Fz(j)7613 6313 y FP(.)249 6612 y(It)66 b(is)g(s)-5 b(traightfo)e(rwar)q(d)64 b(to)i(o)-8 b(bs)m(e)l(rve)65 b(tha)-8 b(t)65 b(wh)l(en)f(eq)l(ua)-8 b(tio)l(ns)65 b(\()-8 b(12\))64 b(ar)q(e)i(pr)q(e)n(m)l(u)l(ltiplie)l(d)e(by)j FG(c)9 b FP(,)68 b(th)l(ey)c(can)i(be)0 6811 y(u)-7 b(s)m(e)l(d)53 b(to)f(u)-6 b(pda)e(te)53 b(th)l(e)f(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)52 b(c)l(os)-5 b(ts)53 b(as)p 2926 7159 90 7 v 2928 7260 a FG(c)3018 7191 y Fx(0)3020 7301 y Fz(p)3144 7260 y FP(=)p 3285 7159 V 43 w FG(c)3379 7285 y Fz(p)3494 7260 y FP(\014)p 3625 7159 V 33 w FG(c)3728 7285 y Fz(j)3773 7260 y FP(\()p 3843 7047 117 7 v 3845 7148 a FG(a)3961 7173 y Fz(k)12 b(p)p 3843 7222 282 7 v 3857 7273 117 7 v 3859 7374 a FG(a)3975 7399 y Fz(k)21 b(j)4145 7260 y FP(\))338 b FG(p)47 b FF(\271)c FG(i)p 2961 7531 90 7 v 2963 7632 a(c)3053 7563 y Fx(0)3051 7673 y Fz(i)3144 7632 y FP(=)e(\014)p 3385 7531 V 2 w FG(c)3487 7657 y Fz(j)3535 7632 y FP(/)p 3637 7531 117 7 v 4 w FG(a)3753 7657 y Fz(k)21 b(j)3891 7632 y FP(.)0 8214 y Fu(4.2)197 b(Dual)66 b(Stee)-8 b(pes)i(t)63 b(Edge)j(Pr)r(icin)-7 b(g)0 8634 y FP(T)8 b(h)l(e)58 b(d)-7 b(ual)58 b(s)n(i)s(mpl)n(e)-5 b(x)59 b(i)s(n)k FM(D)8 b(Y)g(L)g(P)64 b FP(u)-7 b(s)m(e)o(s)59 b(d)-7 b(ual)58 b(s)-5 b(tee)e(pe)o(s)i(t)60 b(e)l(dg)n(e)e(\(DSE\))f (pr)s(ic)m(i)s(n)n(g;)j(th)l(e)e(algo)-7 b(r)s(ithm)58 b(u)-7 b(s)m(e)l(d)58 b(is)h(d)-5 b(e)o(sc)d(r)s(ibe)l(d)0 8833 y(as)53 b(d)-7 b(ual)52 b(algo)-7 b(r)s(ithm)52 b(1)h(\(`s)-5 b(tee)e(pe)o(s)i(t)53 b(1'\))f(i)s(n)h(Fo)-7 b(rr)q(e)o(s)i(t)53 b(and)f(Go)-5 b(ldfarb)52 b([3].)249 9132 y(T)8 b(h)l(e)46 b(v)r(al)n(u)l(e)o(s)p 1157 8991 107 7 v 49 w FG(b)c FP(=)j FG(B)1583 9072 y FA(\014)-13 b(1)1723 9132 y FG(b)51 b FP(ar)q(e)c(th)l(e)f(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)46 b(c)l(os)-5 b(ts)46 b(of)h(th)l(e)f(n)m(o)l(n)m(bas) n(ic)f(d)-7 b(ual)46 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)64 b(Anal)n(ogo)-5 b(u)e(s)45 b(to)i(Dantzig)0 9331 y(pr)s(ic)m(i)s(n)n(g) e(i)s(n)h(th)l(e)g(pr)s(i)s(mal)h(cas)m(e,)h(o)l(n)n(e)f(can)f(c)-7 b(h)n(oos)m(e)47 b(a)g(ente)l(r)s(i)s(n)n(g)e(d)-7 b(ual)46 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g FG(y)5451 9356 y Fz(i)5547 9331 y FP(s)-8 b(u)j(c)e(h)47 b(tha)-8 b(t)p 6339 9190 V 48 w FG(b)6445 9356 y Fz(i)6543 9331 y FP(has)46 b(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)0 9530 y(s)n(ign)49 b(and)f(th)l(e)h (larg)n(e)o(s)-5 b(t)48 b(magnit)l(ud)-5 b(e)48 b(ove)l(r)h(all)g(r)q (e)l(d)-7 b(u)i(c)f(e)l(d)48 b(c)l(os)-5 b(ts,)51 b(b)-8 b(u)l(t)48 b(th)l(e)l(r)q(e)h(is)g(th)l(e)g(same)g(pr)q(o)-8 b(b)l(l)n(e)n(m)48 b(with)g(scali)s(n)n(g.)0 9730 y(T)8 b(h)l(e)57 b(ve)l(rs)n(io)l(n)g(of)g(d)-7 b(ual)57 b(s)-5 b(tee)e(pe)o(s)i(t)58 b(e)l(dg)n(e)f(\(DSE\))e(pr)s(ic)m(i)s(n)n(g)h(i) s(mpl)n(e)n(mente)l(d)g(i)s(n)61 b FM(D)8 b(Y)g(L)g(P)63 b FP(scal)n(e)o(s)p 6168 9589 V 61 w FG(b)6274 9755 y Fz(i)6369 9730 y FP(=)45 b FH(1)6613 9755 y Fz(i)6665 9730 y FG(b)62 b FP(by)d FH(4)7178 9755 y Fz(i)7271 9730 y FP(=)44 b FE(k)r FH(1)7603 9755 y Fz(i)7652 9730 y FE(k)8 b FP(,)0 10044 y(c)-7 b(h)n(oos)n(i)s(n)n(g)55 b(a)i(l)n(ea)-7 b(vi)s(n)n(g)55 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)62 b FG(x)2323 10069 y Fz(i)2429 10044 y FP(with)p 2837 9903 V 57 w FG(b)2944 10069 y Fz(i)3052 10044 y FP(of)56 b(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)56 b(s)n(ign)g(and)f(th)l(e)h (larg)n(e)o(s)-5 b(t)5886 9803 y FC(\014)5886 9903 y(\014)5886 10003 y(\014)5886 10102 y(\014)6000 9932 y FH(1)6099 9957 y Fz(i)6151 9932 y FG(b)p 5961 10006 333 7 v 5961 10158 a FE(k)r FH(1)6149 10183 y Fz(i)6198 10158 y FE(k)6313 9803 y FC(\014)6313 9903 y(\014)6313 10003 y(\014)6313 10102 y(\014)6362 10044 y FP(,)57 b(e)l(f)n(fec)-5 b(tive)l(ly)57 b(calcu-)0 10388 y(la)-8 b(ti)s(n)n(g)57 b(th)l(e)i(c)-7 b(han)n(g)n(e)57 b(i)s(n)i(th)l(e)f(d)-7 b(ual)58 b(o)-8 b(bj)l(ec)j(tive)58 b(v)r(al)n(u)l(e)h(ove)l(r)g(a)h(unit)e(vec)-5 b(to)e(r)59 b(i)s(n)g(th)l(e)f(d)-7 b(ual)58 b(dir)q(ec)-5 b(tio)l(n)58 b(of)h(motio)l(n)e(i)s(n)3771 11400 y(12)p eop end %%Page: 13 16 TeXDict begin 13 15 bop 0 466 a FP(th)l(e)61 b(s)-8 b(pa)n(c)i(e)62 b(of)f(th)l(e)g(d)-7 b(ual)61 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)92 b(T)8 b(his)61 b(g)t(ive)o(s)h(a)g(unifo)-7 b(r)5 b(m)61 b(pr)s(ic)m(i)s(n)n(g)f(c)l(o)n(mpar)s(is)n(o)l(n,)i(u)-7 b(s)n(i)s(n)n(g)61 b(th)l(e)g(sl)n(o)-5 b(pe)62 b(of)g(th)l(e)0 665 y(d)-7 b(ual)52 b(e)l(dg)n(e.)249 964 y(In)81 b(th)l(e)h(n)n(e)-5 b(xt)81 b(few)g(paragra)-6 b(p)g(hs,)88 b(an)81 b(alte)l(r)5 b(na)-8 b(tive)81 b(motiv)r(a)-8 b(tio)l(n)80 b(of)h(th)l(e)g(algo)-7 b(r)s(ithm)81 b(is)h(pr)q(e)o(s)m(ente)l(d)e(whic)-7 b(h)0 1163 y(\(pe)l(r)m(ha)h(ps\))51 b(clar)s(i\002e)o(s)h(th)l(e)f(r)q (e)l(la)-8 b(tio)l(ns)g(hip)49 b(be)-7 b(tween)52 b(d)-7 b(ual)50 b(algo)-7 b(r)s(ithm)51 b(1)h(and)f(d)-7 b(ual)51 b(algo)-7 b(r)s(ithm)51 b(2)h(i)s(n)f(tha)-8 b(t)51 b(pa)-6 b(pe)l(r)7667 1103 y FA(1)7747 1163 y FP(.)249 1462 y(T)r(o)47 b(s)m(ee)h(h)n(ow)e(DSE)g(o)-5 b(pe)l(ra)d(te)o(s)47 b(withi)s(n)e(th)l(e)i(c)l(o)l(nte)-5 b(xt)46 b(of)h(th)l(e)g(r)q(evis) m(e)l(d)g(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x)48 b(t)s(a)l(b)l(l)n (ea)-8 b(u,)48 b(we)f(can)g(r)q(e)l(fe)l(r)0 1662 y(ba)n(c)-8 b(k)52 b(to)h(eq)l(ua)-8 b(tio)l(ns)51 b(\(5\))i(and)f(\(6\))h(fr)q(o)n (m)g(\2472,)f(r)q(e)-7 b(pea)f(te)l(d)53 b(h)l(e)l(r)q(e:)828 1891 y FC(\002)899 2026 y FH(s)1001 1965 y Fw(B)1265 2026 y FG(y)1367 1965 y Fw(B)1466 1891 y FC(\003)1577 2026 y FP(=)41 b(\(\014)r FG(c)9 b FP(\))l FD(B)2124 1957 y FA(\014)-13 b(1)2291 2026 y FP(\014)2423 1891 y FC(\002)2494 2026 y FH(s)2599 1965 y Fw(N)2865 2026 y FG(y)2970 1965 y Fw(N)3071 1891 y FC(\003)3163 2026 y FD(N)q(B)3412 1957 y FA(\014)g(1)1577 2396 y FP(=)1718 2261 y FC(\002)1789 2394 y FG(c)1883 2334 y Fz(N)2019 2394 y FP(\014)34 b FG(c)2248 2334 y Fz(B)2343 2394 y FP(\()9 b FG(B)2527 2334 y Fz(t)2584 2394 y FP(\))2634 2334 y FA(\014)-13 b(1)2779 2394 y FG(N)2917 2334 y Fz(t)3141 2394 y FP(\014)r FG(c)3338 2334 y Fz(B)3432 2394 y FP(\()9 b FG(B)3616 2334 y Fz(t)3673 2394 y FP(\))3723 2334 y FA(\014)-13 b(1)3860 2261 y FC(\003)3961 2396 y FP(\014)4093 2261 y FC(\002)4164 2396 y FH(s)4269 2335 y Fw(N)4535 2396 y FG(y)4640 2335 y Fw(N)4741 2261 y FC(\003)4833 2161 y(\024)5146 2292 y FP(\014\()9 b FG(B)5430 2231 y Fz(t)5487 2292 y FP(\))5537 2231 y FA(\014)-13 b(1)5682 2292 y FG(N)5820 2231 y Fz(t)6313 2292 y FP(\014\()9 b FG(B)6597 2231 y Fz(t)6654 2292 y FP(\))6704 2231 y FA(\014)-13 b(1)4929 2496 y FG(B)5054 2436 y Fz(l)5108 2496 y FP(\()9 b FG(B)5292 2436 y Fz(t)5349 2496 y FP(\))5399 2436 y FA(\014)-13 b(1)5544 2496 y FG(N)5682 2436 y Fz(t)5772 2496 y FP(\014)40 b FG(N)6050 2436 y Fz(l)6278 2496 y FG(B)6403 2436 y Fz(l)6456 2496 y FP(\()9 b FG(B)6640 2436 y Fz(t)6698 2496 y FP(\))6748 2436 y FA(\014)-13 b(1)6885 2161 y FC(\025)7598 2258 y FP(\(5\))0 2851 y(and)2230 3204 y FG(z)50 b FP(=)2507 3070 y FC(\002)2578 3204 y FH(s)2680 3144 y Fw(B)2945 3204 y FG(y)3047 3144 y Fw(B)3146 3070 y FC(\003)23 b(\002)3307 3202 y FP(0)168 b FG(b)3684 3142 y Fz(t)3741 3070 y FC(\003)3813 3108 y Fz(T)3938 3204 y FP(+)4070 3070 y FC(\002)4141 3204 y FH(s)4246 3144 y Fw(N)4512 3204 y FG(y)4617 3144 y Fw(N)4718 3070 y FC(\003)23 b(\002)4879 3205 y FP(0)168 b FG(b)5256 3145 y Fz(l)5308 3070 y FC(\003)5380 3105 y Fz(T)2366 3483 y FP(=)41 b(\(\014)r FG(c)9 b FP(\))l FD(B)2913 3414 y FA(\014)-13 b(1)3050 3483 y FG(b)3152 3414 y Fw(B)3284 3483 y FP(+)3416 3348 y FC(\002)3487 3483 y FH(s)3592 3423 y Fw(N)3858 3483 y FG(y)3963 3423 y Fw(N)4064 3348 y FC(\003)4156 3483 y FP(\()r FG(b)4313 3414 y Fw(N)4447 3483 y FP(\014)32 b FD(N)q(B)4828 3414 y FA(\014)-13 b(1)4966 3483 y FG(b)5068 3414 y Fw(B)5168 3483 y FP(\))2366 3853 y(=)41 b(\014)r FG(c)2704 3784 y Fz(B)2798 3853 y FP(\()9 b FG(B)2982 3784 y Fz(t)3040 3853 y FP(\))3090 3784 y FA(\014)-13 b(1)3229 3853 y FG(b)3335 3784 y Fz(t)3424 3853 y FP(+)3555 3718 y FC(\002)3627 3853 y FH(s)3732 3793 y Fw(N)3997 3853 y FG(y)4102 3793 y Fw(N)4203 3718 y FC(\003)4295 3619 y(\024)4638 3749 y FP(\()9 b FG(B)4822 3689 y Fz(t)4880 3749 y FP(\))4930 3689 y FA(\014)-13 b(1)5069 3749 y FG(b)5175 3689 y Fz(t)4385 3954 y FG(b)4491 3894 y Fz(l)4575 3954 y FP(\014)41 b FG(B)4841 3894 y Fz(l)4894 3954 y FP(\()9 b FG(B)5078 3894 y Fz(t)5136 3954 y FP(\))5186 3894 y FA(\014)-13 b(1)5325 3954 y FG(b)5431 3894 y Fz(t)5487 3619 y FC(\025)7598 3562 y FP(\(6\))0 4309 y(Recall)49 b(tha)-8 b(t)49 b(th)l(e)g(v)r(al)n(u)l(e)o (s)g(of)h(th)l(e)f(d)-7 b(ual)48 b(bas)n(ic)i(v)r(ar)s(i)s(a)l(b)l(l)n (e)o(s)g(ar)q(e)g(th)l(e)f(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)48 b(c)l(os)-5 b(ts)50 b(of)f(th)l(e)g(pr)s(i)s(mal)h(pr)q(o)-8 b(b)l(l)n(e)n(m,)49 b(and)0 4508 y(th)l(e)57 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)57 b(c)l(os)-5 b(ts)58 b(of)g(th)l(e)f(d)-7 b(ual)56 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)j(ar)q(e)f(th)l(e)f(v)r(al)n (u)l(e)o(s)h(of)f(th)l(e)h(pr)s(i)s(mal)f(bas)n(ic)i(v)r(ar)s(i)s(a)l (b)l(l)n(e)o(s)f(\()p FG(cf)p FP(.)f(eq)l(ua)-8 b(tio)l(ns)0 4707 y(\(3\))52 b(and)h(\(4\)\).)249 5006 y(By)62 b(anal)n(og)8 b(y)61 b(to)h(th)l(e)g(pr)s(i)s(mal)g(pivoti)s(n)n(g)f(ru)l(l)n(e)o(s,) k(fo)-7 b(r)62 b(d)-7 b(ual)61 b(s)n(i)s(mpl)n(e)-5 b(x)63 b(we)f(want)f(to)h(c)-7 b(h)n(oos)m(e)63 b(a)f(n)m(o)l(n)m(bas)n(ic)f (d)-7 b(ual)0 5205 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)54 b(whic)-7 b(h)53 b(will)f(move)i(u)-7 b(s)55 b(i)s(n)e(a)h(dir)q(ec)-5 b(tio)l(n)53 b(of)g(s)-5 b(tee)e(pe)o(s)i(t)55 b(d)-5 b(e)o(sc)f(ent.)69 b(If)54 b(th)l(e)g(n)m(o)l(n)m(bas)n(ic)e(d)-7 b(ual)53 b(is)h(to)f(i)s(nc)-8 b(r)q(eas)m(e,)0 5405 y(its)84 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)83 b(c)l(os)-5 b(t)84 b(m)l(u)-7 b(s)i(t)84 b(be)g(l)n(e)o(s)-5 b(s)85 b(than)e(0)g(i)s(n)h(o)-7 b(r)q(d)i(e)l(r)84 b(to)f(s)m(ee)i(a)f(r)q(e) l(d)-7 b(u)i(c)g(tio)l(n)82 b(i)s(n)h(th)l(e)h(d)-7 b(ual)83 b(o)-8 b(bj)l(ec)j(tive.)158 b(T)8 b(his)0 5604 y(c)l(o)-7 b(rr)q(e)o(s)f(po)l(nds)49 b(to)h(th)l(e)f(cas)m(e)h(of)g(a)g(pr)s(i)s (mal)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(whic)-7 b(h)48 b(will)h(be)h(i)s (nc)-8 b(r)q(eas)m(e)l(d)49 b(and)g(dr)s(iven)h(o)-5 b(u)l(t)49 b(of)h(th)l(e)f(bas)n(is)h(a)-8 b(t)0 5803 y(its)44 b(l)n(owe)l(r)g(bo)-5 b(und)43 b(with)g(a)h(pos)n(itive)h(pr)s (i)s(mal)f(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)44 b(c)l(os)-5 b(t.)62 b(If)45 b(th)l(e)f(n)m(o)l(n)m(bas)n(ic)e(d)-7 b(ual)44 b(is)g(to)g(d)-5 b(ec)d(r)q(eas)m(e,)47 b(its)d(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)0 6002 y(c)l(os)h(t)67 b(m)l(u)-7 b(s)i(t)68 b(be)f(gr)q(ea)-8 b(te)l(r)67 b(than)f(0)h(i)s(n)g(o)-7 b(r)q(d)i(e)l(r)67 b(to)g(s)m(ee)h(a)f(r)q(e)l(d)-7 b(u)i(c)g(tio)l(n) 66 b(i)s(n)h(th)l(e)g(d)-7 b(ual)66 b(o)-8 b(bj)l(ec)j(tive.)108 b(T)8 b(his)67 b(c)l(o)-7 b(rr)q(e)o(s)f(po)l(nds)0 6202 y(to)62 b(th)l(e)g(cas)m(e)h(of)f(a)h(pr)s(i)s(mal)f(v)r(ar)s(i)s(a)l (b)l(l)n(e)h(whic)-7 b(h)61 b(will)g(be)i(d)-5 b(ec)d(r)q(eas)m(e)l(d) 62 b(and)f(dr)s(iven)i(o)-5 b(u)l(t)61 b(of)i(th)l(e)e(bas)n(is)i(a)-8 b(t)63 b(its)f(u)-6 b(p)e(pe)l(r)0 6401 y(bo)j(und)52 b(with)f(a)i(n)n(e)-5 b(ga)d(tive)52 b(pr)s(i)s(mal)h(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)53 b(c)l(os)-5 b(t.)249 6700 y(T)8 b(h)l(e)53 b(a)n(c)-5 b(t)l(ual)52 b(dir)q(ec)-5 b(tio)l(n)51 b(of)i(motio)l(n)f (i)s(n)g(th)l(e)h(fu)l(ll)f(d)-7 b(ual)52 b(s)-8 b(pa)n(c)i(e)53 b(\()o FG(y)j FP(and)e FH(s)8 b FP(\))52 b(is)h(s)-8 b(pec)m(i\002e)l(d)52 b(by)g(a)h(r)q(ow)f(of)2506 7159 y FD(N)q(B)2755 7091 y FA(\014)-13 b(1)2934 7159 y FP(=)3075 6925 y FC(\024)3388 7055 y FP(\014\()9 b FG(B)3672 6995 y Fz(t)3729 7055 y FP(\))3779 6995 y FA(\014)-13 b(1)3924 7055 y FG(N)4062 6995 y Fz(t)4555 7055 y FP(\014\()9 b FG(B)4839 6995 y Fz(t)4896 7055 y FP(\))4946 6995 y FA(\014)-13 b(1)3171 7260 y FG(B)3296 7200 y Fz(l)3350 7260 y FP(\()9 b FG(B)3534 7200 y Fz(t)3591 7260 y FP(\))3641 7200 y FA(\014)-13 b(1)3786 7260 y FG(N)3924 7200 y Fz(t)4014 7260 y FP(\014)40 b FG(N)4292 7200 y Fz(l)4520 7260 y FG(B)4645 7200 y Fz(l)4698 7260 y FP(\()9 b FG(B)4882 7200 y Fz(t)4940 7260 y FP(\))4990 7200 y FA(\014)-13 b(1)5127 6925 y FC(\025)5239 7159 y FP(,)0 7634 y(a)55 b(vec)-5 b(to)e(r)56 b(whic)-7 b(h)54 b(is)h(n)m(ot)f(r)q(ea)-6 b(dily)54 b(a)-7 b(v)r(aila)l(b)l(l)n(e)55 b(i)s(n)g(th)l(e)f(r)q(evis) m(e)l(d)h(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x)5426 7574 y FA(2)5507 7634 y FP(.)72 b(Howeve)l(r)-9 b(,)55 b(o)l(n)n(e)f(can)h(make)g(an)0 7833 y(arg)n(ument)40 b(tha)-8 b(t)41 b(th)l(e)l(r)q(e')-5 b(s)41 b(n)m(o)g(n)n(ee)l(d)g(to)h (c)l(o)l(ns)n(id)-5 b(e)l(r)41 b(th)l(e)g(c)l(o)n(mpo)l(n)n(ent)g(of)h (th)l(e)f(dir)q(ec)-5 b(tio)l(n)40 b(of)i(motio)l(n)f(i)s(n)g(th)l(e)g (s)-8 b(u)h(bs)f(pa)n(c)i(e)0 8032 y(of)60 b(th)l(e)f(d)-7 b(ual)59 b(s)-8 b(urpl)n(u)h(s)60 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h (wh)l(en)d(c)-7 b(h)n(oos)n(i)s(n)n(g)59 b(th)l(e)h(ente)l(r)s(i)s(n)n (g)e(d)-7 b(ual)59 b(v)r(ar)s(i)s(a)l(b)l(l)n(e.)88 b(\(Mo)-7 b(r)q(e)59 b(pos)n(itive)l(ly)-17 b(,)62 b(we)d(can)0 8232 y(t)s(ake)46 b(th)l(e)f(view)g(tha)-8 b(t)45 b(we'r)q(e)f(o)l(nly) g(i)s(nte)l(r)q(e)o(s)-5 b(te)l(d)46 b(i)s(n)f(motio)l(n)f(i)s(n)h(th)l (e)g(po)-5 b(lyh)l(e)l(dr)q(o)l(n)43 b({)12 b FG(y)40 b FF(\316)12 b FG(R)5857 8171 y Fz(m)6013 8225 y FF(|)6081 8232 y FG(y)j(A)40 b FF(\263)c FP(\014)r FG(c)11 b FP(,)24 b FG(y)37 b FF(\263)g FP(0)13 b(})46 b(d)-5 b(e)l(\002)s(n)n(e)l(d)0 8431 y(by)41 b(th)l(e)g(d)-7 b(ual)41 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o (s.\))62 b(Chan)n(g)n(e)o(s)40 b(i)s(n)h(th)l(e)g(s)-8 b(urpl)n(u)h(s)42 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(cann)m(ot)f(af)n (fec)-5 b(t)42 b(th)l(e)f(o)-8 b(bj)l(ec)j(tive)42 b(dir)q(ec)-5 b(tly)-17 b(,)43 b(as)f(th)l(ey)0 8630 y(a)n(cc)l(o)-5 b(unt)58 b(fo)-7 b(r)59 b(th)l(e)f(0')-5 b(s)58 b(i)s(n)h(th)l(e)f(a)-8 b(u)l(gmente)l(d)57 b(and)h(partitio)l(n)n(e)l(d)i FG(b)j FP(vec)-5 b(to)e(r)d(.)84 b(Alg)n(e)l(b)-5 b(raically)-17 b(,)58 b(we)h(can)f(s)m(ee)i(tha)-8 b(t)58 b(th)l(e)0 8861 y(d)-7 b(ual)51 b(bas)n(ic)i(po)-7 b(rtio)l(n)51 b(of)k FG(b)5 b FP(,)1914 8726 y FC(\002)1983 8859 y FP(0)168 b FG(b)2360 8799 y Fz(t)2416 8726 y FC(\003)2488 8764 y Fz(T)2582 8861 y FP(,)52 b(g)n(uarantee)o(s)g(tha)-8 b(t)52 b(th)l(e)l(r)q(e)g(will)f(n)n(eve)l(r)h(be)h(any)e(dir)q(ec)-5 b(t)52 b(c)l(o)l(ntr)s(ib)-8 b(u)l(tio)l(n)50 b(fr)q(o)n(m)p 0 9022 3120 7 v 345 9213 a Ft(1)415 9261 y FM(T)7 b(h)o(os)m(e)48 b(wh)o(o)g(ha)-6 b(ve)48 b(r)q(ea)-5 b(d)50 b([3])e(ar)q(e)h(war)t(n)o (e)m(d)f(tha)-7 b(t)49 b(th)m(e)f(a)-7 b(u)m(th)o(o)i(r)10 b(')l(s)49 b(n)m(ot)s(a)-7 b(tio)m(n)49 b(is)g(i)s(n)e(n)m(o)i(way)f(c) m(o)o(mpa)-7 b(tib)m(l)o(e)48 b(with)g(tha)-7 b(t)50 b(of)e(Fo)-5 b(rr)q(e)o(s)l(t)415 9418 y(and)42 b(Go)l(ldfarb.)345 9693 y Ft(2)415 9741 y FM(It')l(s)50 b(n)o(ec)-5 b(e)o(s)l(sary)49 b(to)i(calcu)m(la)-7 b(te)49 b(o)m(n)o(e)g(s)-7 b(u)l(c)i(h)49 b(r)q(ow)p 3039 9661 94 6 v 51 w Fr(a)3132 9761 y Fp(i)3227 9741 y FM(o)m(nc)-5 b(e)49 b(th)m(e)h(ente)m(r)s(i)s(n)n(g)d(d)-6 b(ual)50 b(v)q(ar)s(i)s(a)m(b)m(l)o(e)e(has)i(been)f(s)m(e)m(l)o(ec)l (te)m(d,)h(b)-7 b(u)m(t)51 b(o)m(nly)d(o)m(n)o(e.)415 9899 y(Fo)-5 b(r)61 b(th)m(e)e(typical)h(pr)q(o)-7 b(b)m(l)o(e)n(m)61 b(i)s(n)e(whic)-5 b(h)59 b(th)m(e)g(n)o(umbe)m(r)h(of)g(v)q(ar)s(i)s(a) m(b)m(l)o(e)o(s)f(gr)q(ea)-7 b(tly)60 b(e)l(xc)-5 b(ee)m(ds)61 b(th)m(e)f(n)o(umbe)m(r)f(of)h(c)m(o)m(ns)l(trai)s(nts,)j(th)m(e)415 10057 y(n)m(o)-5 b(r)t(ms)39 b(of)f(th)m(e)o(s)m(e)h(vec)l(to)-5 b(rs)40 b(ar)q(e)e(e)l(xpens)o(ive)g(to)i(calcu)m(la)-7 b(te)39 b(wh)m(en)e(i)s(niti)s(alis)o(i)s(n)n(g)e(th)m(e)k(pr)s(ic)m(i) s(n)n(g)f(algo)-5 b(r)s(ithm,)37 b(and)i(th)m(e)f(u)-5 b(pda)e(te)o(s)41 b(ar)q(e)415 10215 y(e)l(xpens)o(ive.)76 b(T)7 b(h)m(e)50 b(algo)-5 b(r)s(ithm)50 b(whic)-5 b(h)49 b(u)-5 b(s)m(e)o(s)51 b(th)m(e)f(fu)m(ll)g(d)-6 b(ual)51 b(dir)q(ec)l(tio)m(n)f(of)h(motio)m(n)f(is)h(th)m(e)f(o)m(n)o(e)g(tha) -7 b(t)51 b(Fo)-5 b(rr)q(e)o(s)l(t)52 b(and)e(Go)l(ldfarb)415 10372 y(d)l(e)o(sc)-7 b(r)s(ibe)43 b(as)f(d)-6 b(ual)43 b(algo)-5 b(r)s(ithm)41 b(2.)3771 11400 y FP(13)p eop end %%Page: 14 17 TeXDict begin 14 16 bop 0 466 a FP(th)l(e)51 b(c)l(o)-5 b(l)n(umns)51 b(of)g FD(N)q(B)1486 406 y FA(\014)-13 b(1)1675 466 y FP(i)s(nvo)-5 b(lvi)s(n)n(g)57 b FG(N)17 b FP(.)66 b(T)8 b(h)l(e)51 b(c)l(o)n(mpo)l(n)n(ent)g(of)g(motio)l(n)f (i)s(n)h(th)l(e)g(s)-8 b(pa)n(c)i(e)52 b(of)f(th)l(e)g(d)-7 b(ual)51 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g FG(y)k FP(is)0 665 y(th)l(en)46 b(s)n(i)s(mply)h(th)l(e)f(r)q(ows)j FH(1)1826 690 y Fz(i)1923 665 y FP(of)56 b FG(B)2262 605 y FA(\014)-13 b(1)2399 665 y FP(,)49 b(whic)-7 b(h)45 b(ar)q(e)j(eas)n(ily)f(a)-7 b(v)r(aila)l(b)l(l)n(e)46 b(fr)q(o)n(m)h(th)l(e)g(pr)s(i)s(mal)g(t)s(a)l(b)l(l)n(ea)-8 b(u.)63 b(\(T)8 b(h)l(e)47 b(anal)n(ogo)-5 b(u)e(s)0 865 y(a)n(c)i(tio)l(n)65 b(i)s(n)h(th)l(e)f(pr)s(i)s(mal)h(pr)q(o)-8 b(b)l(l)n(e)n(m)65 b(\227)h(ign)m(o)-7 b(r)q(e)65 b(th)l(e)h(c)l(o)n (mpo)l(n)n(ent)f(of)j FH(h)4805 890 y Fz(j)4915 865 y FP(i)s(n)e(th)l(e)f(s)-8 b(u)h(bs)f(pa)n(c)i(e)65 b(of)h(th)l(e)g(pr)s (i)s(mal)g(sla)n(c)-8 b(k)0 1064 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)54 b(\227)f(of)n(fe)l(rs)g(n)m(o)f(c)l(o)n(mp)-5 b(u)l(t)s(a)d(tio)l(nal) 51 b(a)-6 b(dv)r(ant)s(ag)n(e.\))249 1363 y(Given)57 b(a)g(ra)-8 b(tio)l(nal)n(e)56 b(fo)-7 b(r)57 b(t)s(aki)s(n)n(g)f(th)l (e)g(r)q(ows)j FH(1)3376 1388 y Fz(i)3483 1363 y FP(of)66 b FG(B)3832 1302 y FA(\014)-13 b(1)4027 1363 y FP(as)57 b(th)l(e)g(c)l(o)n(mpo)l(n)n(ent)f(of)g(i)s(nte)l(r)q(e)o(s)-5 b(t)57 b(i)s(n)g(th)l(e)g(d)-7 b(ual)56 b(dir)q(ec-)0 1562 y(tio)l(n)66 b(of)h(motio)l(n,)j(wha)-8 b(t)66 b(r)q(e)n(mai)s(ns) h(is)g(to)g(wo)-7 b(rk)67 b(o)-5 b(u)l(t)67 b(th)l(e)f(d)-5 b(e)e(t)s(ails.)110 b(Si)s(nc)-6 b(e)67 b(we'r)q(e)f(ai)s(m)s(i)s(n)n (g)h(fo)-7 b(r)67 b(a)h(s)-5 b(tee)e(pe)o(s)i(t)68 b(e)l(dg)n(e)0 1761 y(algo)-7 b(r)s(ithm,)50 b(we'll)g(be)h(i)s(nte)l(r)q(e)o(s)-5 b(te)l(d)51 b(i)s(n)f(ite)l(ra)-8 b(tive)l(ly)50 b(u)-6 b(pda)e(ti)s(n)n(g)49 b FE(k)r FH(1)4362 1786 y Fz(i)4412 1761 y FE(k)4507 1701 y FA(2)4627 1761 y FP(=)42 b FH(1)4868 1786 y Fz(i)4949 1761 y FF(\327)32 b FH(1)5122 1786 y Fz(i)5172 1761 y FP(,)52 b(th)l(e)e(sq)l(uar)q(e)h(of)g(th)l(e)g(n)m(o) -7 b(r)5 b(m)50 b(of)h(a)g(r)q(ow)2 1960 y FH(1)101 1985 y Fz(i)151 1960 y FP(.)100 b(Given)63 b(th)l(e)h(u)-6 b(pda)e(te)64 b(fo)-7 b(r)5 b(m)l(u)l(l\346)63 b(fo)-7 b(r)66 b FH(1)2876 1985 y Fz(i)2990 1960 y FP(d)-5 b(e)l(r)s(ive)l(d)65 b(i)s(n)e(\2473.1,)k(th)l(e)d(d)-5 b(eve)l(l)n(o)g(pment)63 b(of)i(th)l(e)e(u)-6 b(pda)e(te)64 b(fo)-7 b(r)5 b(m)l(u)l(l\346)63 b(fo)-7 b(r)2 2160 y FH(4)101 2185 y Fz(i)190 2160 y FP(=)38 b FE(k)r FH(1)516 2185 y Fz(i)566 2160 y FE(k)661 2099 y FA(2)790 2160 y FP(is)49 b(s)-5 b(traightfo)e(rwar)q(d)47 b(alg)n(e)l(b)-5 b(ra.)63 b(L)5 b(e)-7 b(t)55 b FG(x)3356 2185 y Fz(i)3455 2160 y FP(be)49 b(th)l(e)f(l)n(ea)-7 b(vi)s(n)n(g)48 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(and)j FG(x)5759 2185 y Fz(j)5852 2160 y FP(be)c(th)l(e)f(ente)l(r)s(i)s(n)n (g)g(v)r(ar)s(i)s(a)l(b)l(l)n(e,)0 2359 y(and)k(as)-5 b(s)d(ume)58 b FG(x)1121 2384 y Fz(i)1224 2359 y FP(occu)-6 b(pie)o(s)53 b(r)q(ow)h FG(k)64 b FP(of)52 b(th)l(e)h(bas)n(is)62 b FG(B)c FP(be)l(fo)-7 b(r)q(e)53 b(th)l(e)f(u)-6 b(pda)e(te.)65 b(W)-11 b(e)53 b(ha)-7 b(ve)2269 2812 y FH(4)2370 2744 y Fx(0)2368 2853 y Fz(i)2460 2812 y FP(=)43 b FH(4)2702 2837 y Fz(i)2784 2812 y FP(\014)32 b(2)p 3055 2595 117 7 v 3057 2695 a FG(a)3173 2720 y Fz(l)25 b(j)p 3039 2774 254 7 v 3039 2825 117 7 v 3041 2926 a FG(a)3156 2951 y Fz(k)c(j)3314 2812 y FH(1)3413 2837 y Fz(i)3495 2812 y FF(\327)34 b FH(1)3671 2837 y Fz(k)3788 2812 y FP(+)e(\()p 4006 2595 V 4008 2695 a FG(a)4124 2720 y Fz(l)25 b(j)p 3990 2774 254 7 v 3990 2825 117 7 v 3992 2926 a FG(a)4107 2951 y Fz(k)c(j)4263 2812 y FP(\))4313 2744 y FA(2)4395 2812 y FH(4)4495 2837 y Fz(k)5245 2812 y FG(i)56 b FF(\271)44 b FG(k)2233 3270 y FH(4)2334 3202 y Fx(0)2333 3313 y Fz(k)2460 3270 y FP(=)d(\()2746 3158 y(1)p 2671 3232 254 7 v 2671 3284 117 7 v 2673 3384 a FG(a)2788 3409 y Fz(k)21 b(j)2944 3270 y FP(\))2994 3202 y FA(2)3076 3270 y FH(4)3176 3295 y Fz(k)7495 3050 y FP(\(15\))0 3738 y(Si)s(nc)-6 b(e)80 b(th)l(e)f(u)-6 b(pda)e(te)80 b(will)f(be)i(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)80 b(fo)-7 b(r)80 b(all)g(r)q(ows)g(i)s(n)g(th)l(e)f(bas)n(is,)88 b(it')-5 b(s)79 b(wo)-7 b(rth)79 b(calcu)l(la)-8 b(ti)s(n)n(g)79 b(th)l(e)g(vec)-5 b(to)e(r)2 3937 y FH(t)46 b FP(=)k FG(B)412 3877 y FA(\014)-13 b(1)551 3937 y FH(1)653 3873 y Fz(T)651 3984 y(k)798 3937 y FP(to)53 b(o)-8 b(b)i(t)s(ai)s(n)53 b(all)f(th)l(e)h(i)s(nn)n(e)l(r)f(pr)q(od)-7 b(u)i(c)g(ts)54 b FH(1)3458 3962 y Fz(i)3540 3937 y FF(\327)34 b FH(1)3716 3962 y Fz(k)3854 3937 y FP(i)s(n)52 b(o)l(n)n(e)h(calcu)l(la)-8 b(tio)l(n.)3771 11400 y(14)p eop end %%Page: 15 18 TeXDict begin 15 17 bop 0 475 a FL(5)239 b(Anti-De)-12 b(gen)-7 b(e)h(ra)l(cy)76 b(Us)n(in)-8 b(g)78 b(a)j(Pe)-6 b(rt)g(urbe)g(d)79 b(Su)-8 b(bpr)n(o)c(b)-6 b(le)n(m)0 959 y FP(In)72 b(both)f(pr)s(i)s(mal)i(and)e(d)-7 b(ual)72 b(s)n(i)s(mpl)n(e)-5 b(x,)81 b FM(D)8 b(Y)g(L)g(P)78 b FP(i)s(mpl)n(e)n(ments)72 b(an)g(anti-d)-5 b(e)g(g)n(en)n(e)l(ra)n (cy)70 b(algo)-7 b(r)s(ithm)71 b(u)-7 b(s)n(i)s(n)n(g)72 b(a)g(pe)l(r)11 b(-)0 1158 y(t)l(urbe)l(d)43 b(s)-8 b(u)h(bpr)q(o)f(b)l (l)n(e)n(m.)60 b(It)43 b(b)-8 b(uilds)43 b(o)l(n)f(a)i(me)-7 b(th)n(od)43 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)44 b(by)f(R)10 b(yan)41 b(&)j(Osbo)-7 b(r)5 b(n)n(e)43 b([10)o(])h(i)s(n)f(whic)-7 b(h)42 b(all)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)0 1357 y(ar)q(e)53 b(as)-5 b(s)d(ume)l(d)53 b(to)g(ha)-7 b(ve)52 b(l)n(owe)l(r)g(bo)-5 b(unds)52 b(of)h(ze)l(r)q(o)f(and)g(u)-6 b(p)e(pe)l(r)52 b(bo)-5 b(unds)52 b(of)h(i)s(n\002)s(nity)-17 b(.)249 1656 y(T)8 b(h)l(e)66 b(o)-7 b(r)s(ig)t(i)s(nal)65 b(algo)-7 b(r)s(ithm)65 b(is)h(eas)n(ily)h(d)-5 b(e)o(sc)d(r)s(ibe)l(d) 65 b(i)s(n)h(te)l(r)5 b(ms)66 b(of)g(th)l(e)g(pr)s(i)s(mal)g(pr)q(o)-8 b(b)l(l)n(e)n(m.)104 b(Wh)l(en)65 b(d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)0 1855 y(is)68 b(d)-5 b(e)e(tec)i(te)l(d,)71 b(a)d(r)q(e)o(s)-5 b(tr)s(ic)g(te)l(d)67 b(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(m)66 b(is)h(fo)-7 b(r)5 b(me)l(d)67 b(c)l(o)l(ns)n(is)-5 b(ti)s(n)n(g)66 b(o)l(nly)g(of)h(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nts)67 b(i)s(nvo)-5 b(lve)l(d)67 b(i)s(n)g(th)l(e)0 2054 y(d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)49 b(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)51 b(c)l(o)l(ns)-5 b(trai)s(nts)50 b FG(i)65 b FP(s)-8 b(u)j(c)e(h)51 b(tha)-8 b(t)p 3210 1914 107 7 v 52 w FG(b)3316 2079 y Fz(i)3408 2054 y FP(=)39 b(0\).)65 b(T)8 b(h)l(e)50 b(v)r(al)n(u)l(e)o(s)p 4734 1914 V 53 w FG(b)4841 2079 y Fz(i)4943 2054 y FP(ar)q(e)h(g)t(iven)f(\(r)q(e)l (la)-8 b(tive)l(ly\))49 b(larg)n(e)h(pe)l(rt)l(urba-)0 2254 y(tio)l(ns)g(and)g(pivots)h(ar)q(e)g(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)51 b(withi)s(n)e(th)l(e)h(c)l(o)l(nte)-5 b(xt)50 b(of)h(th)l(e)g(r)q(e)o(s)-5 b(tr)s(ic)g(te)l(d)51 b(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(m)49 b(until)g(a)j(dir)q(ec)-5 b(tio)l(n)49 b(of)0 2453 y(r)q(ec)-6 b(e)o(s)h(s)n(io)l(n)57 b(fr)q(o)n(m)g(th)l(e)g(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)55 b(ve)l(rte)-5 b(x)57 b(is)g(fo)-5 b(und)56 b(\(i)s(ndica)-8 b(te)l(d)55 b(by)i(a)-6 b(p)e(par)q(ent)56 b(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s\).)74 b(T)8 b(h)l(e)57 b(o)-7 b(r)s(ig)t(i-)0 2652 y(nal)53 b(unpe)l(rt)l(urbe)l(d)f(v)r(al)n(u)l(e)o (s)h(of)p 2140 2511 V 56 w FG(b)2246 2677 y Fz(i)2351 2652 y FP(ar)q(e)h(th)l(en)e(r)q(e)o(s)-5 b(to)e(r)q(e)l(d)54 b(\(s)n(i)s(nc)-6 b(e)54 b(all)g(pivots)f(we)l(r)q(e,)g(i)s(n)g(a)n(c) -5 b(t)l(uality)-17 b(,)53 b(s)n(i)s(mply)g(c)-7 b(han)n(g)n(e)o(s)0 2851 y(of)53 b(bas)n(is)g(whil)n(e)f(r)q(e)n(mai)s(ni)s(n)n(g)f(a)-8 b(t)52 b(th)l(e)h(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)52 b(ve)l(rte)-5 b(x\))52 b(and)h(th)l(e)f(fu)l(ll)g(pr)q(o)-8 b(b)l(l)n(e)n(m)52 b(is)h(r)q(e)o(s)-8 b(ume)l(d.)249 3150 y(An)64 b(alte)l(r)5 b(na)-8 b(tive)64 b(view)g(goe)o(s)g(dir)q (ec)-5 b(tly)64 b(ba)n(c)-8 b(k)64 b(to)g(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nts)64 b(i)s(nvo)-5 b(lve)l(d)64 b(i)s(n)g(th)l(e)g(d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)-17 b(.)100 b(By)63 b(pe)l(r)11 b(-)0 3350 y(t)l(urbi)s(n)n(g)65 b(th)l(eir)h(r)s(ight-hand-s)n(id)-5 b(e)65 b(v)r(al)n(u)l(e)o(s)k FG(b)3114 3375 y Fz(i)3165 3350 y FP(,)h(th)l(e)c(s)n(i)s(n)n(gl)n(e)g(ve)l(rte)-5 b(x)67 b(fo)-7 b(r)5 b(me)l(d)67 b(by)f(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nts)66 b(is)h(fra)n(c)-5 b(t)l(ur)q(e)l(d)0 3549 y(i)s(nto)67 b(many)g(ve)l(rtic)-6 b(e)o(s.)111 b(Fo)-7 b(r)68 b(th)l(e)f(s)n(i)s(mpl)n(e)i(cas)m(e)f(of)f(0)48 b FF(\243)53 b FG(x)63 b FF(\243)48 b(\245)p FP(,)72 b(we)c(ha)-7 b(ve)p 5112 3408 V 69 w FG(b)52 b FP(=)57 b FG(B)5563 3489 y FA(\0141)5716 3549 y FG(b)5 b FP(,)71 b(s)n(o)c(pe)l(rt)l(urbi)s(n)n(g)p 7111 3408 V 67 w FG(b)73 b FP(by)67 b(th)l(e)0 3748 y(vec)-5 b(to)e(r)56 b FH(x)e FP(is)f(eq)l(uiv)r(al)n(ent)f(to)h(pe)l(rt)l(urbi)s(n)n(g)f FG(b)57 b FP(by)c(th)l(e)f(vec)-5 b(to)e(r)54 b(\014)9 b FG(B)d FH(x)r FP(.)249 4047 y(In)77 b(d)-7 b(ual)76 b(s)n(i)s(mpl)n(e)-5 b(x,)83 b(this)76 b(algo)-7 b(r)s(ithm)76 b(can)g(be)h(i)s(mpl)n(e)n(mente)l(d)f(dir)q(ec)-5 b(tly)-17 b(.)137 b(T)8 b(h)l(e)76 b(r)q(e)o(s)-5 b(tr)s(ic)g(te)l(d)77 b(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(m)75 b(is)0 4246 y(fo)-7 b(r)5 b(me)l(d)56 b(fr)q(o)n(m)g(th)l(e)f(d)-7 b(ual)55 b(c)l(o)l(ns)-5 b(trai)s(nts)55 b(\(pr)s(i)s(mal)g(c)l(o)-5 b(l)n(umns\))55 b(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g)54 b(to)h(bas)n(ic)i(d)-7 b(ual)55 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h (\(pr)s(i)s(mal)0 4446 y(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)47 b(c)l(os)-5 b(ts\))49 b(wh)n(os)m(e)e(v)r(al)n(u)l(e)h(is)g(ze)l(r)q (o.)64 b(T)8 b(h)l(e)48 b(pe)l(rt)l(urba)-8 b(tio)l(n)45 b(is)k(i)s(ntr)q(od)-7 b(u)i(c)f(e)l(d)47 b(dir)q(ec)-5 b(tly)47 b(to)h(th)l(e)g(v)r(al)n(u)l(e)o(s)p 7035 4345 90 7 v 50 w FG(c)7138 4471 y Fz(j)7183 4446 y FP(,)h(t)s(aki)s(n)n(g)0 4645 y(car)q(e)69 b(to)e(mai)s(nt)s(ai)s(n)h(d)-7 b(ual)67 b(feas)n(ibility)-17 b(.)111 b(T)8 b(h)l(e)68 b(pe)l(rt)l(urba)-8 b(tio)l(n)66 b(is)i(mai)s(nt)s(ai)s(n)n(e)l(d)g(by)f(th)l(e)h(i)s(nc)-8 b(r)q(e)n(ment)s(al)67 b(u)-6 b(pda)e(te)67 b(of)0 4844 y(th)l(e)58 b(d)-7 b(ual)57 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(and)f(r) q(e)l(d)-7 b(u)i(c)f(e)l(d)58 b(c)l(os)-5 b(ts)59 b(afte)l(r)f(ea)n(c) -7 b(h)58 b(pivot.)82 b(Wh)l(en)58 b(a)n(ccura)n(cy)f(c)-7 b(h)l(ec)f(ks)58 b(ar)q(e)h(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d,)60 b(th)l(e)0 5043 y(c)l(o)-7 b(rr)q(ec)i(t)53 b(v)r(al)n(u)l(e)g(of)g(ze) l(r)q(o)f(can)h(be)g(s)-8 b(u)h(bs)i(tit)l(u)l(te)l(d)51 b(o)l(n)h(th)l(e)g(\003y)g(fo)-7 b(r)53 b(th)l(e)g(pe)l(rt)l(urbe)l(d)e (v)r(al)n(u)l(e)o(s.)249 5342 y(T)8 b(h)l(e)59 b(tr)s(ic)-8 b(k)59 b(to)g(i)s(mpl)n(e)n(menti)s(n)n(g)e(this)h(algo)-7 b(r)s(ithm)59 b(i)s(n)f(th)l(e)h(c)l(o)l(nte)-5 b(xt)58 b(of)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(with)e(arbitrary)g(u)-6 b(p)e(pe)l(r)59 b(and)0 5541 y(l)n(owe)l(r)53 b(bo)-5 b(unds)52 b(is)i(to)f(dis)-5 b(ti)s(n)n(g)n(uis)d(h)51 b(be)-7 b(tween)53 b(a)-6 b(p)e(par)q(ent)52 b(motio)l(n)g(d)-7 b(u)l(e)53 b(to)g(th)l(e)g(i)s(ntr)q(od)-7 b(u)i(c)f(e)l(d)52 b(pe)l(rt)l(urba)-8 b(tio)l(ns)52 b(and)0 5741 y(r)q(eal)f(motio)l(n)g (\(al)n(o)l(n)n(g)e(a)j(dir)q(ec)-5 b(tio)l(n)50 b(of)h(r)q(ec)-6 b(e)o(s)h(s)n(io)l(n\))52 b(whic)-7 b(h)50 b(is)h(n)m(o)l(n)n(e)-7 b(th)l(e)l(l)n(e)o(s)i(s)51 b(li)s(m)s(ite)l(d)g(by)g(a)h(bo)-5 b(und)50 b(o)l(n)g(a)i(v)r(ar)s(i)s(a)l(b)l(l)n(e.)4 5940 y FM(D)8 b(Y)g(L)g(P)73 b FP(u)-7 b(s)m(e)o(s)69 b(an)e(array)-17 b(,)72 b FJ(dy_br)s(kout)p FP(,)f(to)d(r)q(ec)l(o)-7 b(r)q(d)68 b(th)l(e)f(dir)q(ec)-5 b(tio)l(n)67 b(of)g(c)-7 b(han)n(g)n(e)67 b(\(a)-7 b(way)66 b(fr)q(o)n(m)i(th)l(e)f(curr)q(ent)h (bo)-5 b(und\))0 6139 y(r)q(eq)l(uir)q(e)l(d)52 b(fo)-7 b(r)53 b(n)m(o)l(nd)-5 b(e)g(g)n(en)n(e)l(ra)d(te)50 b(b)-8 b(u)l(t)52 b(bo)-5 b(und)g(e)l(d)52 b(motio)l(n.)249 6438 y(A)46 b(s)m(ec)l(o)l(nd,)g(mo)-7 b(r)q(e)47 b(s)-8 b(u)h(b)h(tl)n(e)45 b(pr)q(o)-8 b(b)l(l)n(e)n(m,)47 b(is)f(tha)-8 b(t)45 b(th)l(e)h(pe)l(rt)l(urba)-8 b(tio)l(n)43 b(fo)-7 b(r)47 b(a)f(g)t(iven)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(m)l(u)-7 b(s)i(t)46 b(be)g(s)-8 b(u\002)-49 b(\002c)m(iently)0 6637 y(small)63 b(to)g(a)-7 b(void)63 b(a)h(fals)m(e)f(i)s(ndica)-8 b(tio)l(n)62 b(of)h(a)g(n)m(o)l(nd)-5 b(e)g(g)n(en)n(e)l(ra)d(te)61 b(pivot.)100 b FM(D)8 b(Y)g(L)g(P)69 b FP(scal)n(e)o(s)c(th)l(e)e(pe)l (rt)l(urba)-8 b(tio)l(n)61 b(to)i(be)g(a)-8 b(t)0 6837 y(mos)j(t)64 b(.)r(001\()r FG(u)978 6862 y Fz(i)1062 6837 y FP(\014)37 b FG(l)1247 6862 y Fz(i)1297 6837 y FP(\),)65 b(b)-8 b(u)l(t)61 b(th)l(e)l(r)q(e)h(is)g(n)m(o)f(easy)h(way) g(to)g(g)n(uarantee)f(tha)-8 b(t)62 b(this)f(is)i(s)-8 b(u\002)-49 b(\002c)m(iently)60 b(small.)93 b(Co)l(ns)n(id)-5 b(e)l(r)0 7036 y(two)58 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)64 b FG(x)1223 7061 y Fz(i)1331 7036 y FP(and)f FG(x)1796 7061 y Fz(k)1880 7036 y FP(,)d(and)e(as)-5 b(s)d(ume)59 b(tha)-8 b(t)57 b(th)l(ey)h(occu)-6 b(py)58 b(r)q(ows)h FG(i)72 b FP(and)60 b FG(k)69 b FP(i)s(n)58 b(th)l(e)g(bas)n(is,)i (with)d(pe)l(rt)l(urbe)l(d)0 7235 y(v)r(al)n(u)l(e)o(s)579 7194 y(\230)564 7235 y FG(b)666 7260 y Fz(i)766 7235 y FP(and)1140 7194 y(\230)1126 7235 y FG(b)1229 7260 y Fz(k)1313 7235 y FP(,)51 b(r)q(e)o(s)-8 b(pec)j(tive)l(ly)-17 b(.)64 b(Fo)-7 b(r)50 b(c)l(o)l(nc)-8 b(r)q(e)h(ten)n(e)o(s)i(s,)50 b(as)-5 b(s)d(ume)50 b(tha)-8 b(t)48 b(ea)n(c)-7 b(h)50 b(was)f(o)-7 b(r)s(ig)t(i)s(nally)48 b(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te) 49 b(a)-8 b(t)49 b(its)0 7434 y(l)n(owe)l(r)62 b(bo)-5 b(und,)63 b(s)n(o)e(tha)-8 b(t)62 b(a)g(pivot)g(whic)-7 b(h)61 b(r)q(e)o(s)-8 b(u)l(lte)l(d)62 b(i)s(n)f(o)l(n)n(e)h(v)r(ar)s (i)s(a)l(b)l(l)n(e)h(l)n(ea)-7 b(vi)s(n)n(g)61 b(a)-8 b(t)62 b(its)g(u)-6 b(p)e(pe)l(r)62 b(bo)-5 b(und)60 b(wo)-5 b(u)l(ld)61 b(be)0 7634 y(n)m(o)l(nd)-5 b(e)g(g)n(en)n(e)l(ra)d (te.)62 b(Fo)-7 b(r)p 1591 7533 117 7 v 54 w FG(a)1708 7659 y Fz(i)23 b(j)1861 7634 y FP(and)p 2222 7533 V 54 w FG(a)2339 7659 y Fz(k)e(j)2527 7634 y FP(of)52 b(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)51 b(s)n(ign)h(to)f(move)58 b FG(x)4859 7659 y Fz(i)4961 7634 y FP(towar)q(d)52 b FG(l)5620 7659 y Fz(i)5723 7634 y FP(and)57 b FG(x)6182 7659 y Fz(k)6318 7634 y FP(towar)q(d)c FG(u)7036 7659 y Fz(k)7121 7634 y FP(,)g(g)t(iven)e(a)0 7833 y(s)n(it)l(ua)-8 b(tio)l(n)51 b(wh)l(e)l(r)q(e)1287 7826 y FF(|)p 1320 7732 V 1322 7833 a FG(a)1437 7858 y Fz(i)23 b(j)1538 7826 y FF(|)1613 7833 y(<)-42 b(<)1795 7826 y(|)p 1828 7732 V 1830 7833 a FG(a)1946 7858 y Fz(k)21 b(j)2081 7826 y FF(|)2114 7833 y FP(,)54 b(it)e(is)h(n)m(ot)f(pos)-5 b(s)n(ib)l(l)n(e)53 b(to)g(as)-5 b(s)d(ur)q(e)53 b(tha)-8 b(t)3321 8175 y(\230)3306 8216 y FG(b)3408 8241 y Fz(i)3490 8216 y FP(\014)34 b FG(l)3672 8241 y Fz(i)p 3304 8290 420 7 v 3405 8342 117 7 v 3407 8443 a FG(a)3521 8468 y Fz(i)23 b(j)3787 8329 y FP(<)3951 8216 y FG(u)4057 8241 y Fz(k)4174 8216 y FP(\014)4323 8175 y(\230)4308 8216 y FG(b)4411 8241 y Fz(k)p 3949 8290 547 7 v 4096 8342 117 7 v 4098 8443 a FG(a)4213 8468 y Fz(k)e(j)0 8796 y FP(with)n(o)-5 b(u)l(t)68 b(a)n(c)-5 b(t)l(ually)69 b(te)o(s)-5 b(ti)s(n)n(g)69 b(ea)n(c)-7 b(h)69 b(pair)-10 b(.)116 b(In)69 b(this)h(cas)m(e,)k(th)l(e)69 b(pe)l(rt)l(urba)-8 b(tio)l(n)68 b(i)s(ntr)q(od)-7 b(u)i(c)f(e)l(d)68 b(fo)-7 b(r)75 b FG(x)6711 8821 y Fz(i)6831 8796 y FP(is)70 b(too)g(larg)n(e,)0 8995 y(and)52 b(th)l(e)g(r)q(e)o(s)-8 b(u)l(lti)s(n)n(g)50 b FI(D)1547 9020 y Fz(i)23 b(j)1701 8995 y FG(appe)m(a)s(rs)52 b FP(to)g(all)n(ow)57 b FG(x)3180 9020 y Fz(k)3317 8995 y FP(to)52 b(bec)l(o)n(me)h(th)l(e)f(li)s(m)s(iti)s(n)n(g)f(v)r(ar)s(i) s(a)l(b)l(l)n(e,)i(l)n(ea)-7 b(vi)s(n)n(g)51 b(th)l(e)h(bas)n(is)h (with)e(a)0 9195 y(bo)-5 b(und)g(e)l(d)52 b(b)-8 b(u)l(t)53 b(n)m(o)l(nd)-5 b(e)g(g)n(en)n(e)l(ra)d(te)51 b(c)-7 b(han)n(g)n(e.)66 b(Wh)l(en)57 b FM(D)8 b(Y)g(L)g(P)59 b FP(d)-5 b(e)e(tec)i(ts)54 b(this)f(pr)q(o)-8 b(b)l(l)n(e)n(m,)53 b(it)h(will)e(r)q(e)l(d)-7 b(u)i(c)f(e)53 b(th)l(e)h(pe)l(rt)l(urba-)0 9394 y(tio)l(n)j(by)g(a)i(fa)n(c)-5 b(to)e(r)58 b(of)g(10)f(and)h(fo)-7 b(r)5 b(m)58 b(th)l(e)g(r)q(e)o(s)-5 b(tr)s(ic)g(te)l(d)58 b(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(m)56 b(agai)s(n.)81 b(If)58 b(a)g(\(small\))g(li)s(m)s(it)g(o)l(n)f(th)l(e)h(n)n(umbe)l(r)0 9593 y(of)53 b(a)-8 b(tte)n(mpts)52 b(is)h(e)-5 b(xc)f(ee)l(d)h(e)l(d,) 57 b FM(D)8 b(Y)g(L)g(P)58 b FP(s)n(i)s(mply)53 b(g)t(ive)o(s)g(u)-6 b(p)53 b(and)f(t)s(ake)o(s)i(a)f(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)52 b(pivot.)249 9892 y(A)67 b(s)m(ec)l(o)l(nd)g(pr)q(o)-8 b(b)l(l)n(e)n(m)66 b(occurs)h(wh)l(en)f(a)i(pe)l(rt)l(urba)-8 b(tio)l(n)65 b(is)i(s)n(o)g(small)g(as)h(to)f(be)h(i)s(ndis)-5 b(ti)s(n)n(g)n(uis)d(ha)l(b)l(l)n(e)64 b(n)n(e)-5 b(xt)67 b(to)0 10091 y(th)l(e)52 b(bo)-5 b(und.)64 b(Spec)m(i\002cally)-17 b(,)51 b(th)l(e)h(te)o(s)-5 b(t)53 b(to)f(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)53 b(if)f(a)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)58 b FG(x)4746 10116 y Fz(i)4848 10091 y FP(is)52 b(a)-8 b(t)53 b(bo)-5 b(und)51 b(is)h FJ(dy)p FP(_)q FJ(tols)r FP(.)r FJ(zer)m(o)n FP(\(1)31 b(+)7171 10084 y FF(|)7204 10091 y FG(bnd)7522 10116 y Fz(i)7573 10084 y FF(|)7606 10091 y FP(\))43 b(<)0 10283 y FF(|)38 10290 y FG(x)130 10315 y Fz(i)215 10290 y FP(\014)35 b FG(bnd)668 10315 y Fz(i)719 10283 y FF(|)752 10290 y FP(.)96 b(If)63 b FG(bnd)1391 10315 y Fz(i)1505 10290 y FP(is)g(larg)n(e,)h(th)l(e)f(pe)l (rt)l(urba)-8 b(tio)l(n)60 b(can)j(be)g(swampe)l(d.)95 b(T)8 b(his)63 b(s)n(it)l(ua)-8 b(tio)l(n)61 b(can)i(ar)s(is)m(e)g(if)i FG(u)7378 10315 y Fz(i)7492 10290 y FP(and)3771 11400 y(15)p eop end %%Page: 16 19 TeXDict begin 16 18 bop 2 466 a FG(l)50 491 y Fz(i)166 466 y FP(as)66 b(g)t(iven)f(to)k FM(D)8 b(Y)g(L)g(P)71 b FP(ar)q(e)66 b(n)n(early)e(eq)l(ual,)69 b(o)-7 b(r)65 b(d)-7 b(u)l(e)65 b(to)g(r)q(e)l(d)-7 b(u)i(c)g(tio)l(n)63 b(of)j(th)l(e)f(pe)l(rt)l(urba)-8 b(tio)l(n)63 b(as)i(d)-5 b(e)o(sc)d(r)s(ibe)l(d)66 b(i)s(n)f(th)l(e)0 665 y(pr)q(evio)-5 b(u)e(s)53 b(paragra)-6 b(p)g(h.)3771 11400 y(16)p eop end %%Page: 17 20 TeXDict begin 17 19 bop 0 475 a FL(6)239 b(Lightweight)64 b(Anti-De)-12 b(gen)-7 b(e)h(ra)l(cy)63 b(Meas)-12 b(ur)n(es)65 b(Bas)-6 b(e)g(d)67 b(o)-6 b(n)67 b(Hype)-6 b(rplan)f(e)397 774 y(Alignment)0 1257 y FP(In)75 b(a)-6 b(dditio)l(n)74 b(to)h(th)l(e)g(pe)l(rt)l(urbe)l(d)g(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n (m)73 b(anti-d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)73 b(algo)-7 b(r)s(ithm)74 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)76 b(i)s(n)f(\2475,)85 b FM(D)8 b(Y)g(L)g(P)81 b FP(pr)q(o-)0 1457 y(vid)-5 b(e)o(s)52 b(a)g(light-weight)c(anti-d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)50 b(mec)-7 b(hanism)51 b(bas)m(e)l(d)g(o)l(n)g(hype)l(rplan)n(e)f (alignment.)63 b(In)51 b(th)l(e)g(c)l(od)-5 b(e)52 b(and)0 1656 y(document)s(a)-8 b(tio)l(n,)51 b(this)h(is)h(r)q(e)l(fe)l(rr)q(e) l(d)g(to)f(as)i(`anti-d)-5 b(e)g(g)n(en)50 b(lite')-17 b(.)249 1955 y(Ea)n(c)-7 b(h)45 b(c)l(o)l(ns)-5 b(trai)s(nt)47 b FG(a)1670 1980 y Fz(k)1760 1955 y FG(x)k FF(\243)39 b FG(b)2134 1980 y Fz(k)2265 1955 y FP(d)-5 b(e)l(\002)s(n)n(e)o(s)46 b(an)g(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)46 b(hype)l(rplan)n(e)e(a)-8 b(t)47 b(eq)l(uality)-17 b(.)62 b(In)46 b(th)l(e)g(a)l(bs)m(enc)-6 b(e)46 b(of)g(d)-5 b(e)g(g)n(en-)0 2154 y(e)l(ra)n(cy)-17 b(,)61 b(a)f(s)n(i)s(mpl)n(e)-5 b(x)61 b(pivot)e(c)l(o)l(ns)n(is)-5 b(ts)60 b(of)f(movi)s(n)n(g)g(a)-7 b(way)58 b(fr)q(o)n(m)i(o)l(n)n(e)g (hype)l(rplan)n(e)e(al)n(o)l(n)n(g)g(an)h(e)l(dg)n(e)g(until)g(an)m (oth)l(e)l(r)0 2353 y(hype)l(rplan)n(e)64 b(b)l(l)n(oc)-8 b(ks)65 b(furth)l(e)l(r)g(pr)q(ogr)q(e)o(s)-5 b(s.)103 b(T)8 b(h)l(e)65 b(hype)l(rplan)n(e)f(bei)s(n)n(g)g(l)n(e)l(ft)i(bec)l (o)n(me)o(s)g(l)n(oos)m(e,)j(and)c(th)l(e)g(b)l(l)n(oc)-8 b(ki)s(n)n(g)0 2553 y(hype)l(rplan)n(e)59 b(bec)l(o)n(me)o(s)i(tight.) 86 b(T)8 b(h)l(e)60 b(c)-7 b(h)n(oic)h(e)61 b(of)f(ente)l(r)s(i)s(n)n (g)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)66 b FG(x)4887 2578 y Fz(j)4991 2553 y FP(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)o(s)62 b(th)l(e)d(c)l(o)l(ns)-5 b(trai)s(nt)60 b(tha)-8 b(t)59 b(will)0 2752 y(bec)l(o)n(me)73 b(l)n(oos)m(e,)k(and)72 b(th)l(e)g(c)-7 b(h)n(oic)h(e)73 b(of)f(l)n(ea)-7 b(vi)s(n)n(g)71 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)78 b FG(x)4144 2777 y Fz(i)4266 2752 y FP(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)o(s)74 b(th)l(e)e(c)l(o)l(ns)-5 b(trai)s(nt)71 b(tha)-8 b(t)71 b(will)h(bec)l(o)n(me)0 2951 y(tight.)249 3250 y(Id)-5 b(eally)-17 b(,)82 b(th)l(e)75 b(c)-7 b(h)n(oic)h(e)76 b(of)g(c)l(o)l(ns)-5 b(trai)s(nts)75 b(is)g(uniq)l(u)l(e,)81 b(b)-8 b(u)l(t)75 b(life)g(is)h(s)m(e)l(ldo)n(m)f(id)-5 b(eal.)134 b(Mos)-5 b(t)76 b(often)f(th)l(e)g(la)n(c)-8 b(k)75 b(of)0 3449 y(uniq)l(u)l(en)n(e)o(s)-5 b(s)83 b(is)h(d)-7 b(u)l(e)83 b(to)g(d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)-17 b(,)91 b(i)s(n)83 b(whic)-7 b(h)82 b(o)l(n)n(e)i(o)-7 b(r)84 b(mo)-7 b(r)q(e)84 b(bas)n(ic)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g (ar)q(e)g(a)-8 b(t)84 b(th)l(eir)f(u)-6 b(p)e(pe)l(r)83 b(o)-7 b(r)0 3649 y(l)n(owe)l(r)51 b(bo)-5 b(unds.)64 b(Geo)n(me)-7 b(tr)s(ically)-17 b(,)52 b(th)l(e)l(r)q(e)f(ar)q(e)g(mo) -7 b(r)q(e)52 b(tight)e(c)l(o)l(ns)-5 b(trai)s(nts)51 b(than)f(r)q(eq)l(uir)q(e)l(d)h(to)g(d)-5 b(e)l(\002)s(n)n(e)52 b(th)l(e)f(curr)q(ent)0 3848 y(e)-5 b(xtr)q(e)n(me)48 b(poi)s(nt.)63 b(In)49 b(this)f(cas)m(e)h(th)l(e)f(c)-7 b(han)n(g)n(e)47 b(of)h(bas)n(is)h(tha)-8 b(t)48 b(occurs)h(with)e(th)l (e)h(pivot)g(will)f(n)m(ot)h(r)q(e)o(s)-8 b(u)l(lt)48 b(i)s(n)g(a)h(move)0 4047 y(to)k(a)g(n)n(ew)f(e)-5 b(xtr)q(e)n(me)53 b(poi)s(nt.)249 4346 y(T)8 b(his)66 b(s)m(ec)-5 b(tio)l(n)66 b(d)-5 b(e)o(sc)d(r)s(ibe)o(s)68 b(a)f(s)-8 b(uite)66 b(of)h(meas)-8 b(ur)q(e)o(s)67 b(bas)m(e)l(d)g(o)l(n)f(hype)l(rplan)n (e)f(alignment)g(whic)-7 b(h)65 b(try)i(to)f(be)-7 b(t-)0 4545 y(te)l(r)67 b(th)l(e)f(odds)g(of)h(s)m(e)l(l)n(ec)-5 b(ti)s(n)n(g)65 b(hype)l(rplan)n(e)o(s)h(whic)-7 b(h)65 b(will)g(fo)-7 b(r)5 b(m)67 b(an)g(e)l(dg)n(e)e(tha)-8 b(t)66 b(e)o(sca)-6 b(pe)o(s)68 b(fr)q(o)n(m)f(th)l(e)f(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)0 4744 y(e)j(xtr)q(e)n(me)53 b(poi)s(nt.)249 5043 y(Beca)-8 b(u)h(s)m(e)53 b(all)h(c)l(o)l(ns)-5 b(trai)s(nts)52 b(a)-8 b(t)53 b(a)h(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)52 b(ve)l(rte)-5 b(x)53 b(ar)q(e)h(tight,)e(s)n(o)n(me)h(te)l(r)5 b(m)s(i)s(n)m(o)-5 b(l)n(og)8 b(y)52 b(will)g(be)i(u)-7 b(s)m(e)l(fu)l(l)52 b(to)i(d)-5 b(e-)0 5243 y(sc)d(r)s(ibe)49 b(th)l(e)f(c)-7 b(han)n(g)n(e)o(s)48 b(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d) 48 b(with)g(a)h(pivot.)64 b(Fo)-7 b(r)49 b(this)f(s)m(ec)-5 b(tio)l(n)48 b(o)l(nly)-17 b(,)49 b(th)l(e)f(te)l(r)5 b(ms)49 b(a)n(c)-5 b(tiv)r(a)d(te)48 b(and)h(d)-5 b(ea)n(c)g(tiv)r(a)d (te)0 5442 y(will)52 b(be)h(u)-7 b(s)m(e)l(d)52 b(as)i(fo)-5 b(ll)n(ows:)217 5873 y Fo(e)82 b FP(Wh)l(en)51 b(th)l(e)f(sla)n(c)-8 b(k)51 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(fo)-7 b(r)51 b(a)h(c)l(o)l(ns)-5 b(trai)s(nt)50 b(move)o(s)i(to)f(th)l(e)g(bas)n(ic)g(partitio)l(n,)f (th)l(e)h(c)l(o)l(ns)-5 b(trai)s(nt)50 b(is)i(d)-5 b(ea)n(c-)415 6073 y(tiv)r(a)d(te)l(d.)64 b(Wh)l(en)50 b(th)l(e)g(sla)n(c)-8 b(k)50 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(move)o(s)g(to)g(th)l(e)f(n)m(o)l (n)m(bas)n(ic)f(partitio)l(n,)h(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)49 b(is)i(a)n(c)-5 b(tiv)r(a)d(te)l(d.)217 6405 y Fo(e)82 b FP(Wh)l(en)60 b(an)g(ar)q(c)-7 b(hitec)i(t)l(ural)61 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(move)o(s)g(to)g(th)l(e)f(bas)n(ic)h (partitio)l(n,)g(th)l(e)f(r)q(e)l(l)n(ev)r(ant)h(bo)-5 b(und)59 b(c)l(o)l(ns)-5 b(trai)s(nt)415 6604 y(is)55 b(d)-5 b(ea)n(c)g(tiv)r(a)d(te)l(d.)72 b(Wh)l(en)54 b(an)h(ar)q(c)-7 b(hitec)i(t)l(ural)55 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(move)o(s)h(to)f (th)l(e)g(n)m(o)l(n)m(bas)n(ic)f(partitio)l(n,)g(th)l(e)g(r)q(e)l(l)n (ev)r(ant)415 6803 y(bo)-5 b(und)52 b(c)l(o)l(ns)-5 b(trai)s(nt)51 b(is)i(a)n(c)-5 b(tiv)r(a)d(te)l(d.)0 7396 y Fu(6.1)197 b(Ac)-10 b(tiva)g(tio)-5 b(n)64 b(of)j(Co)-5 b(ns)f(traints)0 7815 y FP(In)59 b(both)f(th)l(e)h(pr)s(i)s(mal)g(and)g(d)-7 b(ual)58 b(s)n(i)s(mpl)n(e)-5 b(x)60 b(algo)-7 b(r)s(ithms,)60 b(th)l(e)f(c)l(o)l(ns)-5 b(trai)s(nt)58 b(whic)-7 b(h)58 b(is)h(a)n(c)-5 b(tiv)r(a)d(te)l(d)59 b(by)f(a)i(pivot)f(d)-5 b(e-)0 8015 y(pends)45 b(o)l(n)g(th)l(e)h(l)n(ea)-7 b(vi)s(n)n(g)44 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)j(and)e(its)h(dir)q(ec)-5 b(tio)l(n)44 b(of)i(motio)l(n.)62 b(Be)l(fo)-7 b(r)q(e)46 b(discu)-7 b(s)i(s)n(i)s(n)n(g)45 b(th)l(e)g(type)o(s)h(of)g(alignment) 0 8214 y(calcu)l(la)-8 b(tio)l(ns,)69 b(it)e(will)f(be)h(u)-7 b(s)m(e)l(fu)l(l)66 b(to)h(discu)-7 b(s)i(s)68 b(th)l(e)e(a)n(c)-5 b(tiv)r(a)d(tio)l(n)65 b(of)i(c)l(o)l(ns)-5 b(trai)s(nts.)107 b(Kn)m(owi)s(n)n(g)64 b(th)l(e)i(type)h(of)f(c)l(o)l(n-)0 8413 y(s)-5 b(trai)s(nt)50 b(\(`)p FF(\243)p FP(')e(o)-7 b(r)50 b(`)p FF(\263)p FP('\))f(is)g(n)n(ec)-6 b(e)o(s)h(sary)51 b(beca)-8 b(u)h(s)m(e)50 b(it)f(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)o (s)51 b(th)l(e)e(dir)q(ec)-5 b(tio)l(n)49 b(of)g(th)l(e)h(n)m(o)-7 b(r)5 b(mal)49 b(with)f(r)q(e)o(s)-8 b(pec)j(t)50 b(to)g(th)l(e)0 8612 y(feas)n(ib)l(l)n(e)k(r)q(e)-5 b(g)t(io)l(n.)253 8911 y FM(D)8 b(Y)g(L)g(P)72 b FP(as)-5 b(s)d(ume)o(s)66 b(tha)-8 b(t)65 b(th)l(e)h(majo)-7 b(r)s(ity)65 b(of)h(e)-5 b(xplic)m(it)65 b(c)l(o)l(ns)-5 b(trai)s(nts)65 b(of)h(th)l(e)g(pr)s(i) s(mal)g(pr)q(o)-8 b(b)l(l)n(e)n(m)64 b(ar)q(e)j(of)f(th)l(e)f(fo)-7 b(r)5 b(m)2 9110 y FG(a)108 9135 y Fz(k)197 9110 y FG(x)56 b FF(\243)43 b FG(b)580 9135 y Fz(k)664 9110 y FP(.)66 b(It)51 b(als)n(o)h(und)-5 b(e)l(rs)g(t)s(ands)50 b(ran)n(g)n(e)g(c)l (o)l(ns)-5 b(trai)s(nts)51 b(of)g(th)l(e)g(fo)-7 b(r)5 b(m)4800 9070 y(\020)4784 9110 y FG(b)4887 9135 y Fz(k)5012 9110 y FF(\243)43 b FG(a)5252 9135 y Fz(k)5342 9110 y FG(x)55 b FF(\243)43 b FG(b)5724 9135 y Fz(k)5809 9110 y FP(.)65 b(T)8 b(h)l(e)o(s)m(e)51 b(ar)q(e)h(i)s(mpl)n(e)n(mente)l(d)0 9310 y(by)63 b(pla)n(c)m(i)s(n)n(g)f(an)h(u)-6 b(p)e(pe)l(r)63 b(bo)-5 b(und)63 b(o)l(n)g(th)l(e)g(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)63 b(sla)n(c)-8 b(k)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)j FG(s)5011 9335 y Fz(k)5096 9310 y FP(,)h(b)-8 b(u)l(t)63 b(fo)-7 b(r)64 b(p)-5 b(urpos)m(e)o(s)63 b(of)g(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(ni)s(n)n(g)0 9509 y(th)l(e)54 b(c)l(o)l(ns)-5 b(trai)s(nt)54 b(to)g(be)h(a)n(c)-5 b(tiv)r(a)d(te)l(d)54 b(we)g(n)n(ee)l(d)h(to)f(r)q(ec)l(ognis)m(e)g(tha)-8 b(t)54 b(th)l(e)l(r)q(e)g(ar)q(e)h(r)q(eally)f(two)g(c)l(o)l(ns)-5 b(trai)s(nts,)56 b FG(a)7240 9534 y Fz(k)7330 9509 y FG(x)h FF(\263)7629 9468 y FP(\020)7612 9509 y FG(b)7715 9534 y Fz(k)0 9708 y FP(and)d FG(a)469 9733 y Fz(k)559 9708 y FG(x)i FF(\243)44 b FG(b)943 9733 y Fz(k)1028 9708 y FP(.)249 10007 y(Bo)-5 b(und)g(e)l(d)61 b(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s)i(ar)q(e)f(handl)n(e)l(d)f(i)s(mplic)m(itly)g(by)g(th)l(e)h (pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x)63 b(algo)-7 b(r)s(ithm.)93 b(Wh)l(en)61 b(a)i(bo)-5 b(und)g(e)l(d)0 10206 y(v)r(ar)s(i)s(a)l(b)l (l)n(e)51 b(bec)l(o)n(me)o(s)g(n)m(o)l(n)m(bas)n(ic)f(a)-8 b(t)50 b(its)h(l)n(owe)l(r)f(bo)-5 b(und,)50 b(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)55 b FG(x)5021 10231 y Fz(k)5145 10206 y FF(\263)42 b FG(l)5327 10231 y Fz(k)5463 10206 y FP(is)51 b(a)n(c)-5 b(tiv)r(a)d(te)l(d;)51 b(wh)l(en)e(it)h(bec)l(o)n(me)o(s)0 10406 y(n)m(o)l(n)m(bas)n(ic)h(a)-8 b(t)53 b(its)g(u)-6 b(p)e(pe)l(r)52 b(bo)-5 b(und,)51 b(th)l(e)i(c)l(o)l(ns)-5 b(trai)s(nt)57 b FG(x)3640 10431 y Fz(k)3766 10406 y FF(\243)43 b FG(u)4006 10431 y Fz(k)4144 10406 y FP(is)53 b(a)n(c)-5 b(tiv)r(a)d(te)l(d.)3771 11400 y(17)p eop end %%Page: 18 21 TeXDict begin 18 20 bop 249 466 a FP(A)83 b(\002)s(nal)g(c)l(o)n (mplica)-8 b(tio)l(n)82 b(is)i(i)s(ntr)q(od)-7 b(u)i(c)f(e)l(d)82 b(i)s(n)h(p)-6 b(has)m(e)83 b(I)h(of)f(th)l(e)g(pr)s(i)s(mal)h(s)n(i)s (mpl)n(e)-5 b(x,)91 b(wh)l(e)l(r)q(e)83 b(it')-5 b(s)83 b(pos)-5 b(s)n(ib)l(l)n(e)83 b(to)0 665 y(a)-6 b(p)e(pr)q(oa)n(c)h(h)82 b(a)h(c)l(o)l(ns)-5 b(trai)s(nt)81 b(fr)q(o)n(m)i(th)l(e)f(`)t(wr)q(o)l (n)n(g)8 b(')80 b(s)n(id)-5 b(e)83 b(i)s(n)f(th)l(e)h(pr)q(oc)-6 b(e)o(s)h(s)83 b(of)g(\002)s(ndi)s(n)n(g)d(a)j(pr)s(i)s(mal)g(feas)n (ib)l(l)n(e)h(bas)n(ic)0 865 y(s)n(o)-5 b(l)n(u)l(tio)l(n.)60 b(Fo)-7 b(r)41 b(e)-5 b(xampl)n(e,)44 b(if)d(a)g(sla)n(c)-8 b(k)41 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i FG(s)3327 890 y Fz(k)3447 865 y FP(<)34 b(0)41 b(will)f(i)s(nc)-8 b(r)q(eas)m(e)41 b(and)f(l)n(ea)-7 b(ve)42 b(th)l(e)f(bas)n(is)g(a)-8 b(t)41 b(0,)j(th)l(e)c(c)l(o)l(ns)-5 b(trai)s(nt)0 1064 y(whic)e(h)53 b(is)h(bec)l(o)n(m)s(i)s(n)n(g)f(tight)g(is)h(a)n(c)-5 b(t)l(ually)55 b FG(a)2960 1089 y Fz(k)3049 1064 y FG(x)i FF(\263)44 b FG(b)3434 1089 y Fz(k)3519 1064 y FP(.)69 b(\253)54 b Fn(Is)44 b(this)g(really)f(a)i(valid)e(insight?)55 b(In)45 b(terms)e(of)h(b)l(loc)n(king)f(motion,)0 1283 y(it')-5 b(s)43 b(true.)53 b(In)43 b(terms)g(of)g(alignment)e(with)j (the)f(objective,)e(for)i(example,)f(I)h(have)g(doubts)l(.)63 b FP(\273)249 1582 y(Tur)5 b(ni)s(n)n(g)46 b(to)j(th)l(e)f(d)-7 b(ual)48 b(pr)q(o)-8 b(b)l(l)n(e)n(m,)49 b(th)l(e)f(q)l(u)l(e)o(s)-5 b(tio)l(n)48 b(of)g(wha)-8 b(t)48 b(c)l(o)l(ns)-5 b(trai)s(nt)48 b(is)h(bei)s(n)n(g)e(a)n(c)-5 b(tiv)r(a)d(te)l(d)48 b(is)h(s)-8 b(u)h(bs)i(t)s(anti)s(ally)0 1781 y(o)d(bscur)q(e)l(d)40 b(by)g(th)l(e)g(mec)-7 b(hanics)40 b(of)h(runni)s(n)n(g)c(th)l(e)j(d)-7 b(ual)40 b(s)n(i)s(mpl)n(e)-5 b(x)41 b(algo)-7 b(r)s(ithm)40 b(fr)q(o)n(m)h(th)l(e)f(pr)s(i)s(mal)g(da)-8 b(t)s(a)41 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s.)0 1981 y(A)53 b(m)l(u)-5 b(c)e(h)53 b(cl)n(ear)q(e)l(r)h(pic)-5 b(t)l(ur)q(e)53 b(can)g(be)h(o)-8 b(b)i(t)s(ai)s(n)n(e)l(d)53 b(by)g(e)-5 b(xpandi)s(n)n(g)51 b(th)l(e)i(pr)s(i)s(mal)g(sys)-5 b(te)n(m)53 b(to)g(i)s(ncl)n(ud)-5 b(e)53 b(e)-5 b(xplic)m(it)53 b(u)-6 b(p)e(pe)l(r)0 2180 y(and)49 b(l)n(owe)l(r)f(bo)-5 b(und)48 b(c)l(o)l(ns)-5 b(trai)s(nts)49 b(and)g(e)-5 b(xam)s(i)s(ni)s(n)n(g)48 b(th)l(e)g(r)q(e)o(s)-8 b(u)l(lti)s(n)n(g)48 b(d)-7 b(ual)48 b(c)l(o)l(ns)-5 b(trai)s(nts)49 b(\([3)o(,)h(\2473.4],) g(o)-7 b(r)49 b(s)m(ee)h([4])f(fo)-7 b(r)0 2379 y(an)54 b(e)-5 b(xtend)g(e)l(d)54 b(d)-5 b(eve)l(l)n(o)g(pment\).)69 b(Br)s(ie)l(\003y)-17 b(,)55 b(l)n(e)-7 b(t)54 b FG(y)k FP(be)c(th)l(e)g(d)-7 b(ual)54 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)54 b(with)f(th)l(e)h(o)-7 b(r)s(ig)t(i)s(nal) 54 b(e)-5 b(xplic)m(it)0 2578 y(c)l(o)l(ns)g(trai)s(nts)69 b FG(a)1081 2603 y Fz(k)1170 2578 y FG(x)63 b FF(\243)50 b FG(b)1567 2603 y Fz(k)1720 2578 y FP(\(th)l(e)67 b(ar)q(c)-7 b(hitec)i(t)l(ural)68 b(c)l(o)l(ns)-5 b(trai)s(nts\),)4298 2577 y(\020)4268 2578 y FG(y)72 b FP(be)c(th)l(e)f(d)-7 b(ual)67 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(as)-5 b(s)n(oc)m(i)s(a)d (te)l(d)67 b(with)g(th)l(e)0 2778 y(l)n(owe)l(r)42 b(bo)-5 b(und)42 b(c)l(o)l(ns)-5 b(trai)s(nts,)44 b(and)2410 2777 y(\210)2380 2778 y FG(y)j FP(be)c(th)l(e)g(d)-7 b(ual)42 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(as)-5 b(s)n(oc)m(i)s(a)d (te)l(d)42 b(with)g(th)l(e)g(u)-6 b(p)e(pe)l(r)42 b(bo)-5 b(und)42 b(c)l(o)l(ns)-5 b(trai)s(nts.)0 2977 y(A)50 b(s)-8 b(u)i(pe)l(rsc)e(r)s(ipt)57 b FG(N)p 1111 3004 146 7 v 67 w FP(will)49 b(r)q(e)-7 b(pr)q(e)o(s)m(ent)49 b(th)l(e)h(s)m(e)-7 b(t)50 b(of)g(pr)s(i)s(mal)f(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s)i(a)-8 b(t)50 b(th)l(eir)e(l)n(owe)l(r)i(bo)-5 b(und,)p 6296 2846 V 57 w FG(N)67 b FP(th)l(e)49 b(s)m(e)-7 b(t)50 b(of)g(pr)s(i)s(mal)0 3176 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)c(a) -8 b(t)45 b(th)l(eir)g(u)-6 b(p)e(pe)l(r)44 b(bo)-5 b(und,)46 b(and)53 b FG(B)d FP(th)l(e)45 b(s)m(e)-7 b(t)46 b(of)f(bas)n(ic)h(pr)s (i)s(mal)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)64 b(T)8 b(h)l(e)45 b(s)m(e)-7 b(t)45 b(of)h(d)-7 b(ual)44 b(c)l(o)l(ns)-5 b(trai)s(nts)0 3375 y(can)53 b(th)l(en)e(be)i(wr)s(itten)f(as)3162 3539 y FG(y)14 b(B)35 b FP(\014)3592 3538 y(\020)3562 3539 y FG(y)3673 3470 y Fz(B)3777 3539 y FG(I)53 b FP(+)4044 3538 y(\210)4014 3539 y FG(y)4125 3470 y Fz(B)4229 3539 y FG(I)62 b FP(=)43 b FG(c)4582 3470 y Fz(B)3168 3811 y FG(y)13 b(N)p 3273 3838 V 48 w FP(\014)3610 3810 y(\020)3580 3811 y FG(y)3697 3743 y Fz(N)p 3701 3762 69 5 v 3787 3811 a FG(I)52 b FP(+)4053 3810 y(\210)4023 3811 y FG(y)4140 3743 y Fz(N)p 4144 3762 V 4229 3811 a FG(I)62 b FP(=)43 b FG(c)4588 3743 y Fz(N)p 4590 3762 V 3142 4107 a FG(y)p 3247 3976 146 7 v 13 w(N)49 b FP(\014)3584 4106 y(\020)3555 4107 y FG(y)p 3687 3947 69 5 v 3667 4039 a Fz(N)3774 4107 y FG(I)j FP(+)4040 4106 y(\210)4010 4107 y FG(y)p 4143 3947 V 4123 4039 a Fz(N)4229 4107 y FG(I)62 b FP(=)43 b FG(c)p 4603 3947 V 4583 4039 a Fz(N)0 4402 y FP(wh)l(e)l(r)q(e)77 b(th)l(e)g(\002rs)-5 b(t)78 b(te)l(r)5 b(m)78 b(i)s(n)g(ea)n(c)-7 b(h)78 b(d)-7 b(ual)77 b(c)l(o)l(ns)-5 b(trai)s(nt)77 b(c)l(o)n(me)o(s)i(fr)q(o)n(m)f(th)l(e)f(pr)s(i)s(mal)i(ar)q(c)-7 b(hitec)i(t)l(ural)77 b(c)l(o)l(ns)-5 b(trai)s(nts,)0 4601 y(th)l(e)75 b(s)m(ec)l(o)l(nd)g(te)l(r)5 b(m)76 b(fr)q(o)n(m)g(th)l(e)f(l)n(owe)l(r)g(bo)-5 b(und)75 b(c)l(o)l(ns)-5 b(trai)s(nts,)80 b(and)75 b(th)l(e)h(thir)q(d)e(te)l(r) 5 b(m)76 b(fr)q(o)n(m)g(th)l(e)f(u)-6 b(p)e(pe)l(r)75 b(bo)-5 b(und)0 4819 y(c)l(o)l(ns)g(trai)s(nts.)121 b(T)8 b(h)l(e)71 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)2279 4818 y(\020)2249 4819 y FG(y)2360 4759 y Fz(B)2454 4819 y FP(,)2612 4818 y(\210)2582 4819 y FG(y)2693 4759 y Fz(B)2788 4819 y FP(,)2946 4818 y(\210)2916 4819 y FG(y)3033 4759 y Fz(N)p 3037 4778 V 3112 4819 a FP(,)77 b(and)3651 4818 y(\020)3621 4819 y FG(y)p 3754 4667 V 3734 4759 a Fz(N)3902 4819 y FP(ar)q(e)72 b(d)-7 b(ual)70 b(n)m(o)l(n)m(bas)n(ic)h(and)g(th)l (e)l(r)q(e)l(fo)-7 b(r)q(e)71 b(ha)-7 b(ve)71 b(th)l(e)g(v)r(al)n(u)l (e)0 5018 y(ze)l(r)q(o.)64 b(\(T)8 b(h)l(ey)48 b(ar)q(e)i(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)49 b(with)e(pr)s(i)s(mal)j(bo)-5 b(und)48 b(c)l(o)l(ns)-5 b(trai)s(nts)48 b(whic)-7 b(h)48 b(ar)q(e)i(n)m(ot)e(tight.\))63 b(W)-11 b(e)49 b(can)h(r)q(ewr)s(ite)f (th)l(e)0 5218 y(d)-7 b(ual)52 b(c)l(o)l(ns)-5 b(trai)s(nts)52 b(as)3841 5381 y FG(y)14 b(B)45 b FP(=)e FG(c)4358 5312 y Fz(B)3396 5654 y FG(y)13 b(N)p 3501 5681 146 7 v 48 w FP(\014)3838 5653 y(\020)3808 5654 y FG(y)3925 5585 y Fz(N)p 3929 5604 69 5 v 4014 5654 a FG(I)62 b FP(=)43 b FG(c)4373 5585 y Fz(N)p 4376 5604 V 3370 5949 a FG(y)p 3475 5818 146 7 v 13 w(N)48 b FP(+)3812 5948 y(\210)3782 5949 y FG(y)p 3915 5789 69 5 v 3895 5881 a Fz(N)4001 5949 y FG(I)62 b FP(=)43 b FG(c)p 4376 5789 V 4356 5881 a Fz(N)0 6264 y FP(W)-11 b(e)73 b(can)g(th)l(en)g(i)s(nte)l(rpr)q(e)-7 b(t)72 b(th)l(e)h(c)l(o)l(ns)-5 b(trai)s(nts)71 b FG(y)13 b(N)p 3292 6291 146 7 v 55 w FP(\014)3641 6263 y(\020)3612 6264 y FG(y)3729 6203 y Fz(N)p 3733 6222 69 5 v 3818 6264 a FG(I)70 b FP(=)52 b FG(c)4194 6203 y Fz(N)p 4197 6222 V 4347 6264 a FP(as)72 b FG(y)13 b(N)p 4706 6291 146 7 v 67 w FF(\263)52 b FG(c)5145 6203 y Fz(N)p 5148 6222 69 5 v 5225 6264 a FP(,)78 b(with)5810 6263 y(\020)5780 6264 y FG(y)5897 6203 y Fz(N)p 5901 6222 V 6049 6264 a FP(a)n(c)-5 b(ti)s(n)n(g)72 b(as)i(th)l(e)e(s)-8 b(urpl)n(u)h(s)0 6481 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)85 b(Si)s(m)s(ilarly)-17 b(,)59 b(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nts)57 b FG(y)p 3069 6350 146 7 v 13 w(N)50 b FP(+)3410 6480 y(\210)3380 6481 y FG(y)p 3513 6329 69 5 v 3493 6421 a Fz(N)3599 6481 y FG(I)64 b FP(=)46 b FG(c)p 3979 6329 V 3959 6421 a Fz(N)4114 6481 y FP(can)59 b(be)g(i)s(nte)l(rpr)q(e)-7 b(te)l(d)59 b(as)f FG(y)p 6002 6350 146 7 v 13 w(N)j FF(\243)46 b FG(c)p 6445 6329 69 5 v 6425 6421 a Fz(N)6521 6481 y FP(,)61 b(with)7074 6480 y(\210)7044 6481 y FG(y)p 7177 6329 V 7157 6421 a Fz(N)7313 6481 y FP(a)n(c)-5 b(ti)s(n)n(g)0 6681 y(as)53 b(th)l(e)g(sla)n(c)-8 b(k)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)249 6980 y(W)m(ith)69 b(this)h(i)s(nte)l(rpr)q(e)-7 b(t)s(a)f(tio)l(n)68 b(i)s(n)i(hand,)j (it')-5 b(s)69 b(easy)i(to)e(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)71 b(th)l(e)e(hype)l(rplan)n(e)g(tha)-8 b(t')j(s)68 b(a)n(c)-5 b(tiv)r(a)d(te)l(d)70 b(by)f(a)0 7201 y(pivot.)125 b(Wh)l(en)72 b(a)h(d)-7 b(ual)72 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)2443 7200 y(\020)2413 7201 y FG(y)2530 7114 y Fz(N)p 2534 7133 V 2516 7248 a(k)2682 7201 y FP(is)h(dr)s(iven)f(o)-5 b(u)l(t)73 b(of)f(th)l(e)h(bas)n(is)g(a)-8 b(t)73 b(0)g(\()5 b FG(x)5393 7226 y Fz(k)5550 7201 y FP(ente)l(rs)73 b(r)s(is)n(i)s(n)n (g)f(fr)q(o)n(m)h(its)g(l)n(owe)l(r)0 7433 y(bo)-5 b(und\),)52 b(th)l(e)h(c)l(o)l(ns)-5 b(trai)s(nt)51 b FG(y)7 b(a)2064 7458 y Fz(k)2189 7433 y FF(\263)44 b FG(c)2407 7458 y Fz(k)2545 7433 y FP(bec)l(o)n(me)o(s)54 b(tight.)66 b(Wh)l(en)52 b(a)i(d)-7 b(ual)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)5574 7432 y(\210)5544 7433 y FG(y)p 5677 7277 V 5657 7368 a Fz(N)5647 7480 y(k)5807 7433 y FP(is)g(dr)s(iven)h(o)-5 b(u)l(t)52 b(of)i(th)l(e)f(bas)n(is)0 7632 y(a)-8 b(t)74 b(0)h(\()5 b FG(x)551 7657 y Fz(k)710 7632 y FP(ente)l(rs)74 b(d)-5 b(ec)d(r)q(eas)n(i)s(n)n(g)74 b(fr)q(o)n(m)h(its)f(u)-6 b(p)e(pe)l(r)74 b(bo)-5 b(und\),)79 b(th)l(e)74 b(c)l(o)l(ns)-5 b(trai)s(nt)72 b FG(y)7 b(a)5600 7657 y Fz(k)5734 7632 y FF(\243)53 b FG(c)5961 7657 y Fz(k)6121 7632 y FP(bec)l(o)n(me)o(s)75 b(tight.)130 b(T)8 b(his)0 7831 y(i)s(nte)l(rpr)q(e)-7 b(t)s(a)f(tio)l(n)51 b(is)i(unifo)-7 b(r)5 b(m)52 b(fo)-7 b(r)53 b(th)l(e)g(o)-7 b(r)s(ig)t(i)s(nal)52 b(pr)s(i)s(mal)h(v)r(ar)s (i)s(a)l(b)l(l)n(e)o(s)h(as)f(we)l(ll)f(as)h(th)l(e)f(pr)s(i)s(mal)h (sla)n(c)-8 b(k)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)249 8130 y(Fo)-7 b(r)57 b(th)l(e)g(mos)-5 b(t)57 b(c)l(o)n(mmo)l(n)f(cas)m (e)h(of)g(a)g(pr)s(i)s(mal)g(c)l(o)l(ns)-5 b(trai)s(nt)58 b FG(a)4411 8155 y Fz(i)4466 8130 y FG(x)g FF(\243)45 b FG(b)4852 8155 y Fz(i)4902 8130 y FP(,)58 b(with)e(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)56 b(sla)n(c)-8 b(k)58 b FG(s)6865 8155 y Fz(i)6915 8130 y FP(,)g(0)43 b FF(\243)j FG(s)7401 8155 y Fz(i)7494 8130 y FF(\243)e(\245)p FP(,)0 8329 y(th)l(e)i(d)-7 b(ual)46 b(c)l(o)l(ns)-5 b(trai)s(nt)46 b(r)q(e)l(d)-7 b(u)i(c)f(e)o(s)47 b(to)f FG(y)2530 8354 y Fz(i)2617 8329 y FF(\263)37 b FP(0,)48 b(and)f(this)f(is)h(handl)n(e) l(d)f(as)h(an)g(i)s(mplic)m(it)f(bo)-5 b(und)46 b(by)g(th)l(e)g(d)-7 b(ual)46 b(s)n(i)s(mpl)n(e)-5 b(x)0 8528 y(algo)e(r)s(ithm)74 b(i)s(mpl)n(e)n(mente)l(d)f(i)s(n)78 b FM(D)8 b(Y)g(L)g(P)t FP(.)133 b(\(Ran)n(g)n(e)72 b(c)l(o)l(ns)-5 b(trai)s(nts)73 b(c)l(o)n(mplica)-8 b(te)75 b(th)l(e)f(i)s(nte)l(rpr)q(e)-7 b(t)s(a)f(tio)l(n,)78 b(b)-8 b(u)l(t)74 b(n)m(ot)g(th)l(e)0 8728 y(mec)-7 b(hanics,)53 b(of)f(th)l(e)h(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n.)63 b(Agai)s(n,)52 b(s)m(ee)h([4])g(fo)-7 b(r)53 b(a)g(d)-5 b(e)e(t)s(ail)n(e)l(d)53 b(e)-5 b(xplana)d(tio)l(n.\))249 9027 y(In)72 b(th)l(e)f(s)m(ec)-5 b(tio)l(ns)72 b(whic)-7 b(h)70 b(fo)-5 b(ll)n(ow,)76 b(th)l(e)c(alignment)e(calcu)l(la)-8 b(tio)l(ns)71 b(ar)q(e)h(d)-5 b(eve)l(l)n(o)g(pe)l(d)72 b(i)s(n)g(te)l(r)5 b(ms)72 b(of)g(th)l(e)f(mos)-5 b(t)0 9226 y(c)l(o)n(mmo)l(n)71 b(c)l(o)l(ns)-5 b(trai)s(nt)71 b(fo)-7 b(r)5 b(m)72 b(\()r FG(a)2249 9251 y Fz(k)2338 9226 y FG(x)65 b FF(\243)52 b FG(b)2739 9251 y Fz(k)2896 9226 y FP(i)s(n)72 b(th)l(e)f(cas)m(e)h(of)g(th)l(e)g(pr)s(i)s(mal)g(s) n(i)s(mpl)n(e)-5 b(x,)77 b(and)71 b FG(y)7 b(a)6372 9251 y Fz(k)6505 9226 y FF(\263)52 b FG(c)6731 9251 y Fz(k)6888 9226 y FP(i)s(n)71 b(th)l(e)h(cas)m(e)0 9425 y(of)d(th)l(e)g(d)-7 b(ual)68 b(s)n(i)s(mpl)n(e)-5 b(x\).)114 b(Acc)l(o)n(mmoda)-8 b(ti)s(n)n(g)67 b(th)l(e)i(dif)n(fe)l(r)q(ent)g(c)l(o)l(ns)-5 b(trai)s(nt)67 b(type)o(s)i(d)-5 b(e)o(sc)d(r)s(ibe)l(d)69 b(i)s(n)g(this)g(s)m(ec)-5 b(tio)l(n)68 b(is)0 9624 y(s)n(i)s(mply)58 b(a)g(ma)-8 b(tte)l(r)58 b(of)g(c)l(o)-7 b(rr)q(ec)i(ti)s(n)n(g)58 b(th)l(e)f(s)n(ign)h(of)g(th)l(e)g(calcu)l(la)-8 b(tio)l(n)56 b(as)j(n)n(ee)l(d)-5 b(e)l(d)58 b(to)g(a)n(cc)l(o)-5 b(unt)57 b(fo)-7 b(r)58 b(th)l(e)g(dir)q(ec)-5 b(tio)l(n)57 b(of)0 9824 y(th)l(e)52 b(c)l(o)l(ns)-5 b(trai)s(nt)52 b(n)m(o)-7 b(r)5 b(mal.)3771 11400 y(18)p eop end %%Page: 19 22 TeXDict begin 19 21 bop 0 466 a Fu(6.2)197 b(Alignment)66 b(W)s(ith)h(Res)-10 b(pec)g(t)64 b(to)i(th)-9 b(e)67 b(Objec)-10 b(tive)64 b(Fun)-6 b(c)c(tio)-5 b(n)0 885 y FP(T)8 b(h)l(e)58 b(pr)s(i)s(mal)h(o)-8 b(bj)l(ec)j(tive)58 b(u)-7 b(s)m(e)l(d)58 b(i)s(n)k FM(D)8 b(Y)g(L)g(P)64 b FP(is)59 b(m)s(i)s(n)25 b FG(c)14 b(x)i FP(.)80 b(W)-11 b(e)58 b(n)n(ee)l(d)h(to)f(move)h(i)s(n)f(th)l(e)g(dir)q(ec)-5 b(tio)l(n)57 b(\014)r FG(c)66 b FP(until)57 b(we)h(r)q(ea)n(c)-7 b(h)0 1084 y(an)59 b(e)-5 b(xtr)q(e)n(me)58 b(poi)s(nt)g(of)h(th)l(e)f (po)-5 b(lyto)g(pe)58 b(wh)l(e)l(r)q(e)g(th)l(e)g(c)l(o)l(n)n(e)h(fo)-7 b(r)5 b(me)l(d)58 b(by)h(th)l(e)f(n)m(o)-7 b(r)5 b(mals)58 b(of)h(th)l(e)f(a)n(c)-5 b(tive)59 b(c)l(o)l(ns)-5 b(trai)s(nts)0 1284 y(i)s(ncl)n(ud)g(e)o(s)53 b(\014)r FG(c)9 b FP(.)249 1583 y(If)48 b(th)l(e)e(goal)h(is)g(to)g(tra)-7 b(ve)l(l)47 b(i)s(n)g(th)l(e)f(dir)q(ec)-5 b(tio)l(n)46 b(\014)r FG(c)9 b FP(,)47 b(o)l(n)n(e)g(a)-6 b(p)e(pr)q(oa)n(c)h(h)46 b(wo)-5 b(u)l(ld)46 b(be)h(to)g(l)n(ea)-7 b(ve)48 b(ea)n(c)-7 b(h)47 b(ve)l(rte)-5 b(x)47 b(by)g(movi)s(n)n(g)0 1782 y(al)n(o)l(n)n(g)57 b(th)l(e)i(e)l(dg)n(e)f(whic)-7 b(h)58 b(mos)-5 b(t)59 b(n)n(early)f(poi)s(nts)g(i)s(n)h(th)l(e)f(dir)q(ec)-5 b(tio)l(n)58 b(\014)r FG(c)9 b FP(.)82 b(T)8 b(h)l(e)59 b(e)l(dg)n(e)o(s)f(tra)-7 b(ve)l(rs)m(e)l(d)59 b(by)f(th)l(e)g(s)n(i)s (mpl)n(e)-5 b(x)0 1981 y(algo)e(r)s(ithm)57 b(ar)q(e)i(s)n(i)s(mply)f (th)l(e)g(i)s(nte)l(rs)m(ec)-5 b(tio)l(ns)57 b(of)h(a)n(c)-5 b(tive)59 b(hype)l(rplan)n(e)o(s.)81 b(If)58 b(we'r)q(e)g(tryi)s(n)n(g) e(to)i(c)l(o)l(ns)-5 b(tru)g(c)g(t)58 b(an)g(e)l(dg)n(e)0 2180 y(with)k(whic)-7 b(h)62 b(we)h(can)g(l)n(ea)-7 b(ve)64 b(a)f(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)62 b(ve)l(rte)-5 b(x,)66 b(we)d(c)l(o)-5 b(u)l(ld)63 b(c)-7 b(h)n(oos)m(e)63 b(to)g(a)n(c)-5 b(tiv)r(a)d(te)63 b(a)h(hype)l(rplan)n(e)f FG(a)7224 2205 y Fz(k)7314 2180 y FG(x)d FP(=)48 b FG(b)7715 2205 y Fz(k)0 2380 y FP(s)-8 b(u)j(c)e(h)42 b(tha)-8 b(t)43 b(\014)r FG(c)50 b FP(mos)-5 b(t)42 b(n)n(early)h(lie)o(s)g(i)s (n)f(th)l(e)g(hype)l(rplan)n(e,)i(o)l(n)e(th)l(e)g(th)l(eo)-7 b(ry)42 b(tha)-8 b(t)42 b(its)g(i)s(nte)l(rs)m(ec)-5 b(tio)l(n)42 b(with)f(oth)l(e)l(r)h(a)n(c)-5 b(tive)0 2579 y(hype)l(rplan)n(e)o(s)60 b(a)-8 b(t)61 b(th)l(e)g(ve)l(rte)-5 b(x)61 b(is)h(mo)-7 b(r)q(e)61 b(like)l(ly)f(to)h(pr)q(od)-7 b(u)i(c)f(e)61 b(an)g(e)l(dg)n(e)f(with)g(th)l(e)h(d)-5 b(e)o(s)n(ir)q(e)l(d)62 b(o)-7 b(r)s(ient)s(a)f(tio)l(n.)89 b(T)8 b(his)61 b(is)0 2778 y(th)l(e)i(`)-8 b(Align)n(e)l(d')61 b(s)-5 b(tra)d(te)j(g)8 b(y)-17 b(,)66 b(beca)-8 b(u)h(s)m(e)64 b(we)g(want)f(th)l(e)g(hype)l(rplan)n(e)o(s)g(mos)-5 b(t)63 b(cl)n(os)m(e)l(ly)h(align)n(e)l(d)e(with)h(th)l(e)g(n)m(o)-7 b(r)5 b(mal)63 b(of)0 2977 y(th)l(e)52 b(o)-8 b(bj)l(ec)j(tive.)249 3276 y(Goi)s(n)n(g)61 b(to)i(th)l(e)g(oth)l(e)l(r)f(e)-5 b(xtr)q(e)n(me,)65 b(a)-8 b(t)63 b(th)l(e)f(o)-5 b(pti)s(mal)63 b(ve)l(rte)-5 b(x)63 b(it)g(m)l(u)-7 b(s)i(t)63 b(be)g(tru)l(e)g(tha)-8 b(t)62 b(th)l(e)g(a)n(c)-5 b(tive)63 b(hype)l(rplan)n(e)o(s)0 3476 y(b)l(l)n(oc)-8 b(k)55 b(furth)l(e)l(r)g(motio)l(n)g(i)s(n)h(th)l (e)f(dir)q(ec)-5 b(tio)l(n)55 b(\014)r FG(c)9 b FP(,)55 b(and)h(\014)r FG(c)63 b FP(m)l(u)-7 b(s)i(t)57 b(lie)f(withi)s(n)e(th) l(e)h(c)l(o)l(n)n(e)h(of)g(n)m(o)-7 b(r)5 b(mals)56 b(of)g(th)l(e)f(a)n (c)-5 b(tive)0 3675 y(hype)l(rplan)n(e)o(s.)96 b(On)n(e)63 b(can)h(make)f(th)l(e)g(arg)n(ument)f(tha)-8 b(t)63 b(a)h(good)e(c)-7 b(h)n(oic)h(e)64 b(of)g(hype)l(rplan)n(e)e(wo)-5 b(u)l(ld)62 b(th)l(e)h(o)l(n)n(e)g(tha)-8 b(t)0 3874 y(mos)j(t)51 b(n)n(early)f(b)l(l)n(oc)-8 b(ks)51 b(motio)l(n)e(i)s(n)i(th)l(e)f(dir) q(ec)-5 b(tio)l(n)50 b(\014)r FG(c)9 b FP(,)50 b(as)h(it')-5 b(s)50 b(like)l(ly)g(to)h(be)g(a)n(c)-5 b(tive)51 b(a)-8 b(t)51 b(th)l(e)f(o)-5 b(pti)s(mal)51 b(ve)l(rte)-5 b(x.)65 b(T)8 b(his)0 4073 y(is)72 b(call)n(e)l(d)h(th)l(e)e(`Pe)l(rpendicu)l (lar)12 b(')70 b(s)-5 b(tra)d(te)j(g)8 b(y)-17 b(,)77 b(beca)-8 b(u)h(s)m(e)72 b(we)g(want)f(th)l(e)h(hype)l(rplan)n(e)o(s)f (whic)-7 b(h)71 b(ar)q(e)i(mos)-5 b(t)72 b(n)n(early)0 4273 y(pe)l(rpendicu)l(lar)51 b(to)i(th)l(e)f(n)m(o)-7 b(r)5 b(mal)52 b(of)h(th)l(e)f(o)-8 b(bj)l(ec)j(tive.)249 4571 y(Fo)e(r)56 b(c)l(o)l(ns)-5 b(trai)s(nts)57 b FG(a)1639 4596 y Fz(k)1728 4571 y FG(x)h FF(\243)45 b FG(b)2115 4596 y Fz(k)2255 4571 y FP(th)l(e)55 b(n)m(o)-7 b(r)5 b(mal)55 b(poi)s(nts)g(o)-5 b(u)l(t)55 b(of)h(th)l(e)f(feas)n(ib)l(l)n (e)i(r)q(e)-5 b(g)t(io)l(n.)72 b(L)5 b(e)-7 b(t)57 b(th)l(e)e (alignment)f(of)i(th)l(e)0 4821 y(n)m(o)-7 b(r)5 b(mal)45 b FG(a)724 4846 y Fz(k)852 4821 y FP(with)e(\014)r FG(c)51 b FP(be)44 b(calcu)l(la)-8 b(te)l(d)43 b(as)2947 4709 y FG(a)3052 4734 y Fz(i)3134 4709 y FF(\327)34 b FG(c)p 2816 4783 610 7 v 2816 4935 a FE(k)r FG(a)3010 4960 y Fz(i)3060 4935 y FE(k)8 b(k)r FG(c)f FE(k)3445 4821 y FP(.)63 b(T)8 b(h)l(en)43 b(fo)-7 b(r)44 b(th)l(e)f(Pe)l(rpendicu)l (lar)f(s)-5 b(tra)d(te)j(g)8 b(y)-17 b(,)46 b(we)d(want)g(to)h(s)m(e)l (l)n(ec)-5 b(t)0 5202 y(th)l(e)54 b(hype)l(rplan)n(e)g FG(a)1369 5227 y Fz(i)1424 5202 y FG(x)j FP(=)44 b FG(b)1817 5227 y Fz(i)1921 5202 y FP(s)-8 b(u)j(c)e(h)54 b(tha)-8 b(t)54 b FG(i)j FP(=)41 b(arg)22 b(max)3388 5314 y Fz(k)3643 5089 y FG(a)3749 5114 y Fz(k)3866 5089 y FF(\327)34 b FG(c)p 3641 5163 389 7 v 3648 5316 a FE(k)r FG(a)3843 5341 y Fz(k)3927 5316 y FE(k)4104 5202 y FP(ove)l(r)54 b(all)g(c)l(o)l(ns)-5 b(trai)s(nts)55 b FG(a)5809 5227 y Fz(k)5899 5202 y FG(x)h FF(\243)45 b FG(b)6284 5227 y Fz(k)6423 5202 y FP(i)s(n)54 b(th)l(e)f(d)-5 b(e)g(g)n(en)n(e)l(ra)d (te)0 5500 y(s)m(e)h(t.)249 5799 y(Fo)g(r)50 b(th)l(e)e(Align)n(e)l(d)g (s)-5 b(tra)d(te)j(g)8 b(y)-17 b(,)49 b(th)l(e)g(c)-8 b(r)s(ite)l(r)s(i)s(a)50 b(is)f(a)g(bit)g(mo)-7 b(r)q(e)50 b(s)-8 b(u)h(b)h(tl)n(e.)63 b(If)52 b FG(a)5069 5824 y Fz(k)5183 5799 y FF(\327)29 b FP(\014)r FG(c)46 b FP(=)39 b(0,)49 b(\014)r FG(c)57 b FP(lie)o(s)49 b(i)s(n)g(th)l(e)g(hype)l (rplan)n(e)2 6096 y FG(a)108 6121 y Fz(k)197 6096 y FG(x)64 b FP(=)50 b FG(b)604 6121 y Fz(k)688 6096 y FP(.)113 b(Se)l(l)n(ec)-5 b(ti)s(n)n(g)67 b(th)l(e)h(hype)l(rplan)n(e)g FG(i)83 b FP(s)-8 b(u)j(c)e(h)68 b(tha)-8 b(t)69 b FG(i)62 b FP(=)48 b(arg)23 b(m)s(i)s(n)4559 6208 y Fz(k)4781 5855 y FC(\014)4781 5955 y(\014)4781 6054 y(\014)4781 6154 y(\014)4859 5983 y FG(a)4965 6008 y Fz(k)5081 5983 y FF(\327)34 b FG(c)p 4857 6058 V 4864 6210 a FE(k)r FG(a)5059 6235 y Fz(k)5143 6210 y FE(k)5265 5855 y FC(\014)5265 5955 y(\014)5265 6054 y(\014)5265 6154 y(\014)5382 6096 y FP(is)69 b(n)m(ot)e(q)l(uite)h(s)-8 b(u\002)-49 b(\002c)m(ient.)111 b(Wh)l(e)l(r)q(e)0 6440 y(pos)-5 b(s)n(ib)l(l)n(e,)54 b FM(D)8 b(Y)g(L)g(P)56 b FP(a)-8 b(tte)n(mpts)49 b(to)g(c)-7 b(h)n(oos)m(e)50 b(hype)l(rplan)n(e)o(s)f(whic)-7 b(h)48 b(ar)q(e)i(tilte)l(d)f(i)s(n)g(th)l(e)g(dir)q(ec)-5 b(tio)l(n)49 b(of)h(th)l(e)f(o)-8 b(bj)l(ec)j(tive,)49 b(s)n(o)0 6690 y(as)57 b(to)g(bo)-5 b(und)55 b(th)l(e)h(pr)q(o)-8 b(b)l(l)n(e)n(m.)76 b(T)8 b(h)l(e)57 b(pr)q(e)l(fe)l(rr)q(e)l(d)f(hype)l(rplan)n(e)f(is)k FG(a)4511 6715 y Fz(i)4565 6690 y FG(x)f FP(=)45 b FG(b)4960 6715 y Fz(i)5067 6690 y FP(s)-8 b(u)j(c)e(h)57 b(tha)-8 b(t)57 b FG(i)g FP(=)43 b(arg)137 b(m)s(i)s(n)6407 6803 y FA({)10 b Fz(k)6528 6798 y Fy(|)6552 6803 y Fz(a)6626 6820 y Fk(k)6689 6803 y Fy(\327)q Fz(c)c Fy(\263)p FA(0)j(})7003 6577 y FG(a)7109 6602 y Fz(k)7226 6577 y FF(\327)34 b FG(c)p 7001 6652 V 7008 6804 a FE(k)r FG(a)7203 6829 y Fz(k)7287 6804 y FE(k)7466 6690 y FP(ove)l(r)0 6998 y(th)l(e)58 b(c)l(o)l(ns)-5 b(trai)s(nts)58 b(i)s(n)h(th)l(e)f(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)58 b(s)m(e)-7 b(t.)84 b(If)61 b FG(a)3361 7023 y Fz(k)3480 6998 y FF(\327)35 b FG(c)54 b FP(<)45 b(0)59 b(fo)-7 b(r)59 b(all)i FG(k)11 b FP(,)59 b(th)l(e)g(pr)q(e)l(fe)l(rr)q(e)l(d)f(hype)l(rplan)n(e)f(is)i(c)-7 b(h)n(os)m(en)59 b(as)1 7248 y FG(i)d FP(=)41 b(arg)22 b(max)659 7360 y Fz(k)915 7135 y FG(a)1021 7160 y Fz(k)1138 7135 y FF(\327)33 b FG(c)p 913 7210 V 920 7362 a FE(k)r FG(a)1115 7387 y Fz(k)1199 7362 y FE(k)1321 7248 y FP(.)249 7656 y(T)8 b(h)l(e)44 b(d)-7 b(ual)44 b(o)-8 b(bj)l(ec)j(tive)44 b(u)-7 b(s)m(e)l(d)45 b(i)s(n)j FM(D)8 b(Y)g(L)g(P)50 b FP(is)45 b(m)s(i)s(n)22 b FG(y)7 b(b)e FP(,)44 b(b)-8 b(u)l(t)44 b(we)g(m)l(u)-7 b(s)i(t)45 b(be)g(car)q(e)l(fu)l(l)f(h)l(e)l (r)q(e)g(to)h(to)f(i)s(ncl)n(ud)-5 b(e)45 b(th)l(e)f(e)l(f)n(fec)-5 b(t)45 b(of)0 7891 y(th)l(e)g(bo)-5 b(unds)45 b(o)l(n)h(th)l(e)f(pr)s (i)s(mal)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)64 b(T)8 b(h)l(e)46 b(o)-8 b(bj)l(ec)j(tive)45 b(is)h(pr)q(o)-5 b(pe)l(rly)45 b(s)-5 b(t)s(a)d(te)l(d)46 b(as)h(m)s(i)s(n)5985 7757 y FC(\002)6054 7889 y FG(y)6352 7888 y FP(\020)6322 7889 y FG(y)6621 7888 y FP(\210)6591 7889 y FG(y)6694 7757 y FC(\003)24 b(\002)6858 7889 y FG(b)170 b FP(\014)r FG(l)185 b(u)7576 7757 y FC(\003)7645 7795 y Fx(>)7747 7891 y FP(,)0 8091 y(and)60 b(we)g(will)f(n)n(ee)l(d)h(to)g(i)s(ncl)n (ud)-5 b(e)60 b(th)l(e)g(c)l(oe)l(\002)-49 b(\002c)m(ients)59 b(of)3794 8090 y(\020)3764 8091 y FG(y)64 b FP(and)4326 8090 y(\210)4296 8091 y FG(y)g FP(i)s(n)c(th)l(e)f(c)l(o)l(ns)-5 b(trai)s(nt)59 b(n)m(o)-7 b(r)5 b(mals.)87 b(\(In)60 b(th)l(e)g(pr)s(i)s(mal)0 8290 y(we)65 b(c)l(o)-5 b(u)l(ld)64 b(ign)m(o)-7 b(r)q(e)64 b(this)g(e)l(f)n(fec)-5 b(t,)69 b(beca)-8 b(u)h(s)m(e)65 b(th)l(e)g(o)-8 b(bj)l(ec)j(tive)64 b(c)l(oe)l(\002)-49 b(\002c)m(ients)64 b(as)-5 b(s)n(oc)m(i)s(a)d(te)l (d)65 b(with)e(th)l(e)i(sla)n(c)-8 b(k)64 b(v)r(ar)s(i)s(a)l(b)l(l)n(e) o(s)0 8489 y(ar)q(e)53 b(unifo)-7 b(r)5 b(mly)51 b(ze)l(r)q(o.\))249 8788 y(Fo)-7 b(r)60 b(d)-7 b(ual)59 b(c)l(o)l(ns)-5 b(trai)s(nts)57 b FG(y)7 b(a)2164 8813 y Fz(k)2292 8788 y FF(\263)46 b FG(c)2512 8813 y Fz(k)2597 8788 y FP(,)61 b(th)l(e)f(n)m(o)-7 b(r)5 b(mal)3657 8654 y FC(\002)3728 8786 y FG(a)3834 8811 y Fz(k)4085 8786 y FP(\014)r FG(e)4280 8811 y Fz(k)4530 8786 y FP(0)4633 8654 y FC(\003)4762 8788 y FP(will)58 b(poi)s(nt)h(i)s(nto)g(th)l(e)g(feas)n(ib)l(l)n(e)h(r)q(e)-5 b(g)t(io)l(n)59 b(and)4 9096 y FM(D)8 b(Y)g(L)g(P)71 b FP(calcu)l(la)-8 b(te)o(s)65 b(th)l(e)f(alignment)f(of)2720 8962 y FC(\002)2789 9094 y FP(\014)r FG(b)172 b(l)183 b FP(\014)r FG(u)3609 8962 y FC(\003)3743 9096 y FP(with)64 b(th)l(e)g(hype)l(rplan)n(e)g(as)6246 8984 y FG(b)37 b FF(\327)c FG(a)6564 9009 y Fz(k)6681 8984 y FP(+)h FG(l)6864 9009 y Fz(k)p 5711 9058 1772 7 v 5711 9219 a FP(\()p FE(k)r FG(a)5956 9244 y Fz(k)6040 9219 y FE(k)40 b FP(+)32 b(1)-8 b(\))p FE(k)6531 9085 y FC(\002)6601 9217 y FG(b)170 b FP(\014)r FG(l)185 b(u)7319 9085 y FC(\003)7388 9219 y FE(k)7502 9096 y FP(,)68 b(s)n(o)0 9413 y(tha)-8 b(t)56 b(a)i(pos)n(itive)f(r)q(e)o(s)-8 b(u)l(lt)57 b(id)-5 b(enti\002e)o(s)56 b(a)h(c)l(o)l(ns)-5 b(trai)s(nt)56 b(whic)-7 b(h)56 b(b)l(l)n(oc)-8 b(ks)57 b(motio)l(n)f(i)s(n)g(th)l(e)h(dir)q(ec)-5 b(tio)l(n)56 b(of)h(th)l(e)g(o)-8 b(bj)l(ec)j(tive.)0 9703 y(Fo)e(r)56 b(a)g(c)l(o)l(ns)-5 b(trai)s(nt)53 b FG(y)7 b(a)1559 9728 y Fz(k)1685 9703 y FF(\243)45 b FG(c)1904 9728 y Fz(k)1989 9703 y FP(,)56 b(th)l(e)g(calcu)l(la)-8 b(tio)l(n)54 b(is)3956 9591 y(\(\014)r FG(b)5 b FP(\))31 b FF(\327)j FG(a)4476 9616 y Fz(k)4593 9591 y FP(\014)g FG(u)4833 9616 y Fz(k)p 3551 9665 V 3551 9826 a FP(\()p FE(k)r FG(a)3796 9851 y Fz(k)3880 9826 y FE(k)40 b FP(+)32 b(1)-8 b(\))p FE(k)4371 9691 y FC(\002)4441 9824 y FG(b)171 b FP(\014)r FG(l)184 b(u)5159 9691 y FC(\003)5228 9826 y FE(k)5343 9703 y FP(.)74 b(Se)l(l)n(ec)-5 b(tio)l(n)55 b(of)g(a)h(s)-8 b(pec)m(i\002c)55 b(l)n(ea)-7 b(vi)s(n)n(g)0 10066 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)717 10065 y(\020)687 10066 y FG(y)804 9979 y Fz(N)p 808 9998 69 5 v 790 10113 a(k)934 10066 y FP(o)g(r)1172 10065 y(\210)1142 10066 y FG(y)p 1275 9910 V 1255 10002 a Fz(N)1245 10113 y(k)1401 10066 y FP(is)50 b(do)l(n)n(e)g(u)-7 b(s)n(i)s(n)n(g)49 b(th)l(e)g(same)i(c)-8 b(r)s(ite)l(r)s(i)s(a)50 b(o)-5 b(u)l(tli)s(n)n(e)l(d)49 b(fo)-7 b(r)50 b(th)l(e)g(Pe)l(rpendicu)l(lar) e(and)i(Align)n(e)l(d)e(cas)m(e)o(s)0 10265 y(i)s(n)53 b(th)l(e)f(pr)s(i)s(mal)h(pr)q(o)-8 b(b)l(l)n(e)n(m.)3771 11400 y(19)p eop end %%Page: 20 23 TeXDict begin 20 22 bop 0 466 a Fu(6.3)197 b(Alignment)66 b(W)s(ith)h(Res)-10 b(pec)g(t)64 b(to)i(th)-9 b(e)67 b(Dir)n(ec)-10 b(tio)-5 b(n)65 b(of)h(Motio)-5 b(n)0 885 y FP(T)8 b(h)l(e)63 b(s)m(e)l(l)n(ec)-5 b(tio)l(n)63 b(of)g(an)g(ente)l(r)s(i)s(n)n(g)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(s)-8 b(pec)m(i\002e)o(s)63 b(th)l(e)g(d)-5 b(e)o(s)n(ir)q(e)l(d)64 b(dir)q(ec)-5 b(tio)l(n)62 b(of)h(motio)l(n)f(fo)-7 b(r)64 b(th)l(e)f(pivot.)97 b(At)63 b(a)0 1084 y(d)-5 b(e)g(g)n(en)n(e)l(ra)d (te)57 b(ve)l(rte)-5 b(x,)60 b(we)e(cann)m(ot)f(move)i(i)s(n)f(th)l(e)g (d)-5 b(e)o(s)n(ir)q(e)l(d)59 b(dir)q(ec)-5 b(tio)l(n)57 b(beca)-8 b(u)h(s)m(e)59 b(th)l(e)f(s)m(e)-7 b(t)59 b(of)f(a)n(c)-5 b(tive)58 b(hype)l(rplan)n(e)o(s)0 1284 y(doe)o(s)k(n)m(ot)f(c)l(o)l (nt)s(ai)s(n)g(this)h(e)l(dg)n(e.)92 b(Int)l(uitive)l(ly)-17 b(,)63 b(a)n(c)-5 b(tiv)r(a)d(ti)s(n)n(g)60 b(a)i(hype)l(rplan)n(e)f (whic)-7 b(h)60 b(is)j(cl)n(os)m(e)l(ly)e(align)n(e)l(d)g(with)g(th)l (e)0 1483 y(d)-5 b(e)o(s)n(ir)q(e)l(d)53 b(dir)q(ec)-5 b(tio)l(n)52 b(of)h(motio)l(n)e(m)s(ight)h(i)s(nc)-8 b(r)q(eas)m(e)53 b(th)l(e)f(c)-7 b(hanc)h(e)53 b(of)g(bei)s(n)n(g)e(a)l (b)l(l)n(e)i(to)g(move)g(i)s(n)f(tha)-8 b(t)52 b(dir)q(ec)-5 b(tio)l(n.)249 1818 y(Fo)e(r)73 b(th)l(e)g(pr)s(i)s(mal)g(s)n(i)s(mpl)n (e)-5 b(x,)78 b(th)l(e)73 b(dir)q(ec)-5 b(tio)l(n)71 b(of)i(motio)l(n)f(d)-5 b(e)l(r)s(ive)l(d)73 b(i)s(n)f(\2474.1)h(is)i FH(h)5854 1843 y Fz(j)5948 1818 y FP(=)6098 1684 y FC(\002)6167 1816 y FP(\014)9 b FG(B)6416 1756 y FA(\0141)6569 1816 y FG(a)6687 1841 y Fz(j)6897 1816 y FP(\014)r FG(e)7104 1841 y Fz(j)7147 1684 y FC(\003)7216 1722 y Fx(>)7319 1818 y FP(.)125 b(T)8 b(h)l(e)0 2017 y(n)m(o)-7 b(r)5 b(mal)70 b(of)h(a)g(c)l(o)l(ns)-5 b(trai)s(nt)72 b FG(a)2025 2042 y Fz(k)2115 2017 y FG(x)64 b FF(\243)52 b FG(b)2515 2042 y Fz(k)2671 2017 y FP(poi)s(nts)70 b(o)-5 b(u)l(t)71 b(of)g(th)l(e)f(feas)n(ib)l(l)n(e)i(r)q(e)-5 b(g)t(io)l(n.)119 b(T)8 b(h)l(e)70 b(alignment)g(of)j FH(h)7051 2042 y Fz(j)7166 2017 y FP(and)e(th)l(e)0 2287 y(n)m(o)-7 b(r)5 b(mal)51 b FG(a)730 2312 y Fz(k)865 2287 y FP(is)f(calcu)l(la)-8 b(te)l(d)49 b(as)2296 2170 y FG(a)2402 2195 y Fz(k)2518 2170 y FF(\327)34 b FH(h)2706 2195 y Fz(j)p 2165 2249 714 7 v 2165 2401 a FE(k)r FG(a)2360 2426 y Fz(k)2444 2401 y FE(k)8 b(k)r FH(h)2740 2426 y Fz(j)2784 2401 y FE(k)2899 2287 y FP(,)50 b(s)n(o)g(tha)-8 b(t)49 b(a)h(pos)n(itive)g(v) r(al)n(u)l(e)g(id)-5 b(enti\002e)o(s)49 b(a)i(hype)l(rplan)n(e)d(whic) -7 b(h)49 b(b)l(l)n(oc)-8 b(ks)0 2593 y(motio)l(n)52 b(i)s(n)g(th)l(e)g(dir)q(ec)-5 b(tio)l(n)54 b FH(h)2007 2618 y Fz(j)2051 2593 y FP(.)249 2892 y(It')-5 b(s)40 b(i)s(mpo)-7 b(rt)s(ant)40 b(to)g(n)m(ote)g(tha)-8 b(t)39 b(n)m(o)-7 b(r)5 b(mal)42 b FG(a)3041 2917 y Fz(k)3166 2892 y FP(i)s(n)d(this)h(calcu)l(la)-8 b(tio)l(n)39 b(is)h(tha)-8 b(t)40 b(of)g(th)l(e)g(i)s(n)n(eq)l(uality)f(\227)i(th)l(e)e(c)l(oe)l (\002)-49 b(\002c)m(ient)0 3091 y(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)41 b(with)g(th)l(e)g(sla)n(c)-8 b(k)44 b FG(s)2105 3116 y Fz(k)2231 3091 y FP(is)f FG(not)53 b FP(i)s(ncl)n(ud)-5 b(e)l(d.)61 b(T)8 b(his)41 b(means)h(tha)-8 b(t)43 b FG(a)4966 3116 y Fz(k)5075 3091 y FF(\327)26 b FH(h)5255 3116 y Fz(j)5333 3091 y FF(\272)33 b FP(\014)p 5557 2991 117 7 v 2 w FG(a)5675 3116 y Fz(k)21 b(j)5810 3091 y FP(.)62 b(Fo)-7 b(r)42 b(a)h(bo)-5 b(und)40 b(c)l(o)l(ns)-5 b(trai)s(nt,)0 3291 y(th)l(e)42 b(r)q(e)l(la)-8 b(tio)l(n)40 b(is)i(o)-8 b(bvio)j(u)e(s)42 b(by)f(i)s(ns)-8 b(pec)j(tio)l(n.)61 b(If,)44 b(fo)-7 b(r)42 b(e)-5 b(xampl)n(e,)45 b(th)l(e)c(c)l(o)l(ns)-5 b(trai)s(nt)41 b(is)48 b FG(x)5593 3316 y Fz(k)5711 3291 y FF(\243)35 b FG(u)5943 3316 y Fz(k)6028 3291 y FP(,)45 b(th)l(e)c(n)m(o)-7 b(r)5 b(mal)42 b(is)i FG(e)7310 3316 y Fz(k)7394 3291 y FP(,)h(and)2 3490 y FG(e)95 3515 y Fz(k)215 3490 y FF(\327)34 b FP(\014)p 391 3389 V 2 w FG(a)520 3515 y Fz(j)611 3490 y FP(=)45 b(\014)p 856 3389 V 2 w FG(a)973 3515 y Fz(k)21 b(j)1109 3490 y FP(.)93 b(Fo)-7 b(r)62 b(an)g(ar)q(c)-7 b(hitec)i(t)l(ural)62 b(c)l(o)l(ns)-5 b(trai)s(nt,)63 b(it')-5 b(s)62 b(n)n(ec)-6 b(e)o(s)h(sary)62 b(to)g(l)n(ook)g(a)-8 b(t)62 b(th)l(e)f(calcu)l(la)-8 b(tio)l(n)61 b(i)s(n)h(a)g(way)0 3689 y(tha)-8 b(t)54 b(s)m(e)-7 b(para)f(te)o(s)56 b(th)l(e)e(c)l(o)l(ntr)s(ib)-8 b(u)l(tio)l(ns)52 b(of)j(th)l(e)f(ar)q(c)-7 b(hitec)i(t)l(ural)55 b(and)f(sla)n(c)-8 b(k)54 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)j(and)d (bas)n(ic)h(and)g(n)m(o)l(n)m(bas)n(ic)0 3987 y(v)r(ar)s(i)s(a)l(b)l(l) n(e)o(s.)70 b(W)-11 b(e)54 b(ar)q(e)h(i)s(nte)l(r)q(e)o(s)-5 b(te)l(d)54 b(i)s(n)f(th)l(e)h(s)-5 b(tru)g(c)g(t)l(ur)q(e)54 b(of)g(th)l(e)g(pr)q(od)-7 b(u)i(c)g(t)4792 3852 y FC(\002)4870 3985 y FG(B)178 b(N)5306 3852 y FC(\003)5398 3752 y(\024)5485 3885 y FP(\014)9 b FG(B)5734 3825 y FA(\0141)5893 3885 y FG(N)5726 4085 y(I)6030 3752 y FC(\025)6172 3987 y FP(fo)-7 b(r)54 b(l)n(oos)m(e)g(c)l(o)l(ns)-5 b(trai)s(nts)0 4280 y(whic)e(h)51 b(will)g(be)i(a)n(c)-5 b(tiv)r(a)d(te)l(d)51 b(by)h(pivoti)s(n)n(g)e(th)l(e)i(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)52 b(sla)n(c)-8 b(k)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(o)-5 b(u)l(t)52 b(of)g(th)l(e)g(bas)n(is.)66 b(Br)q(eaki)s(n)n(g)50 b(u)-6 b(p)53 b(th)l(e)0 4479 y(ma)-8 b(tr)s(ic)i(e)o(s)54 b(as)f(d)-5 b(e)e(t)s(ail)n(e)l(d)53 b(i)s(n)g(\2472,)g(we)f(ha)-7 b(ve)593 4931 y FC(\002)671 5067 y FG(B)796 5007 y Fz(l)1025 5067 y FG(I)194 b(N)1410 5007 y Fz(l)1630 5067 y FP(0)1733 4931 y FC(\003)1825 4832 y(\024)1912 4965 y FP(\014)9 b FG(B)2161 4904 y FA(\0141)2319 4965 y FG(N)2153 5164 y(I)2457 4832 y FC(\025)2586 5066 y FP(=)2727 4931 y FC(\002)2805 5067 y FG(B)2930 5007 y Fz(l)3159 5067 y FG(I)194 b(N)3544 5007 y Fz(l)3764 5067 y FP(0)3866 4931 y FC(\003)3959 4632 y(2)3959 4925 y(6)3959 5024 y(6)3959 5130 y(4)4069 4867 y FP(\014)4192 4632 y FC(\024)4423 4763 y FP(\()9 b FG(B)4607 4702 y Fz(t)4664 4763 y FP(\))4714 4702 y FA(\0141)5174 4763 y FP(0)4279 4967 y(\014)g FG(B)4513 4907 y Fz(l)4566 4967 y FP(\()g FG(B)4750 4907 y Fz(t)4808 4967 y FP(\))4858 4907 y FA(\0141)5193 4967 y FG(I)5276 4632 y FC(\025)23 b(\024)5482 4763 y FG(N)5620 4702 y Fz(t)5485 4967 y FG(N)5623 4907 y Fz(l)5678 4632 y FC(\025)4644 5034 y(\024)4751 5167 y FG(I)196 b FP(0)4732 5366 y(0)185 b FG(I)5103 5034 y FC(\025)5766 4632 y(3)5766 4925 y(7)5766 5024 y(7)5766 5130 y(5)2586 5935 y FP(=)2727 5800 y FC(\002)2805 5936 y FG(B)2930 5876 y Fz(l)3159 5936 y FG(I)194 b(N)3544 5876 y Fz(l)3764 5936 y FP(0)3866 5800 y FC(\003)3959 5502 y(2)3959 5794 y(6)3959 5894 y(6)3959 6000 y(4)4295 5632 y FP(\014\()9 b FG(B)4579 5572 y Fz(t)4636 5632 y FP(\))4686 5572 y FA(\0141)4844 5632 y FG(N)4982 5572 y Fz(t)5475 5632 y FP(\014\()g FG(B)5759 5572 y Fz(t)5816 5632 y FP(\))5866 5572 y FA(\0141)4078 5837 y FG(B)4203 5776 y Fz(l)4256 5837 y FP(\()g FG(B)4440 5776 y Fz(t)4498 5837 y FP(\))4548 5776 y FA(\0141)4706 5837 y FG(N)4844 5776 y Fz(t)4934 5837 y FP(\014)39 b FG(N)5211 5776 y Fz(l)5440 5837 y FG(B)5565 5776 y Fz(l)5618 5837 y FP(\()9 b FG(B)5802 5776 y Fz(t)5859 5837 y FP(\))5909 5776 y FA(\0141)4635 6036 y FG(I)1006 b FP(0)4616 6235 y(0)994 b FG(I)6059 5502 y FC(3)6059 5794 y(7)6059 5894 y(7)6059 6000 y(5)2586 6505 y FP(=)2727 6371 y FC(\002)2796 6506 y FP(\014)9 b FG(B)3030 6446 y Fz(l)3083 6506 y FP(\()g FG(B)3267 6446 y Fz(t)3324 6506 y FP(\))3374 6446 y FA(\0141)3532 6506 y FG(N)3670 6446 y Fz(t)3760 6506 y FP(+)41 b FG(B)4026 6446 y Fz(l)4079 6506 y FP(\()9 b FG(B)4263 6446 y Fz(t)4321 6506 y FP(\))4371 6446 y FA(\0141)4529 6506 y FG(N)4667 6446 y Fz(t)4756 6506 y FP(\014)40 b FG(N)5034 6446 y Fz(l)5120 6506 y FP(+)g FG(N)5398 6446 y Fz(l)5617 6506 y FP(\014)9 b FG(B)5851 6446 y Fz(l)5904 6506 y FP(\()g FG(B)6088 6446 y Fz(t)6145 6506 y FP(\))6195 6446 y FA(\0141)6377 6506 y FP(+)41 b FG(B)6643 6446 y Fz(l)6697 6506 y FP(\()9 b FG(B)6881 6446 y Fz(t)6938 6506 y FP(\))6988 6446 y FA(\0141)7138 6371 y FC(\003)0 6827 y FP(Re)n(movi)s(n)n(g)43 b(th)l(e)i(c)l(o)l(ntr)s(ib)-8 b(u)l(tio)l(n)42 b(d)-7 b(u)l(e)45 b(to)g(th)l(e)g(bas)n(ic)h(sla)n(c)-8 b(k)45 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)j(we)d(ha)-7 b(ve)5420 6693 y FC(\002)5489 6828 y FP(\014)9 b FG(B)5723 6768 y Fz(l)5775 6828 y FP(\()g FG(B)5959 6768 y Fz(t)6017 6828 y FP(\))6067 6768 y FA(\0141)6225 6828 y FG(N)6363 6768 y Fz(t)6453 6828 y FP(+)40 b FG(N)6731 6768 y Fz(l)6950 6828 y FP(\014)9 b FG(B)7184 6768 y Fz(l)7237 6828 y FP(\()g FG(B)7421 6768 y Fz(t)7478 6828 y FP(\))7528 6768 y FA(\0141)7678 6693 y FC(\003)7747 6827 y FP(.)0 7026 y(Beca)-8 b(u)h(s)m(e)56 b(th)l(e)f(l)n(ea)-7 b(vi)s(n)n(g)54 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(fo)-7 b(r)56 b(th)l(e)f(pivot)h(is)f(a)h (sla)n(c)-8 b(k,)56 b(th)l(e)f(pivot)h(e)l(l)n(e)n(ment)p 5669 6926 V 57 w FG(a)5786 7051 y Fz(k)21 b(j)5978 7026 y FP(will)54 b(be)i(dra)-7 b(wn)54 b(fr)q(o)n(m)i(th)l(e)0 7226 y(c)l(o)n(mpo)l(n)n(ent)940 7091 y FC(\002)1018 7227 y FG(B)1143 7166 y Fz(l)1196 7227 y FP(\()9 b FG(B)1380 7166 y Fz(t)1438 7227 y FP(\))1488 7166 y FA(\0141)1645 7227 y FG(N)1783 7166 y Fz(t)1873 7227 y FP(\014)40 b FG(N)2151 7166 y Fz(l)2379 7227 y FG(B)2504 7166 y Fz(l)2558 7227 y FP(\()9 b FG(B)2742 7166 y Fz(t)2799 7227 y FP(\))2849 7166 y FA(\0141)2999 7091 y FC(\003)3121 7226 y FP(i)s(n)53 b(\014)9 b FG(B)3570 7165 y FA(\0141)3728 7226 y FG(N)17 b FP(,)53 b(and)f(th)l(e)h(eq)l(uiv)r(al)n(enc)-6 b(e)53 b(is)g(ve)l(r)s(i\002e)l(d.)249 7524 y(T)r(o)61 b(\002)s(nis)-8 b(h)60 b(th)l(e)h(alignment)e(calcu)l(la)-8 b(tio)l(n)60 b(fo)-7 b(r)62 b(th)l(e)e(p)-5 b(urpos)m(e)o(s)61 b(of)g(s)m(e)l(l)n (ec)-5 b(ti)s(n)n(g)60 b(a)i(l)n(ea)-7 b(vi)s(n)n(g)60 b(v)r(ar)s(i)s(a)l(b)l(l)n(e,)j(all)f(tha)-8 b(t)60 b(is)0 7724 y(n)n(ee)l(d)-5 b(e)l(d)41 b(is)g(to)g(pe)l(r)5 b(fo)-7 b(r)5 b(m)41 b(th)l(e)g(n)m(o)-7 b(r)5 b(malisa)-8 b(tio)l(n)39 b(by)h FE(k)r FG(a)3523 7749 y Fz(k)3607 7724 y FE(k)8 b(k)r FH(h)3903 7749 y Fz(j)3947 7724 y FE(k)g FP(,)43 b(and)e(s)n(i)s(nc)-6 b(e)42 b FE(k)r FH(h)5144 7749 y Fz(j)5187 7724 y FE(k)50 b FP(is)41 b(c)l(o)l(ns)-5 b(t)s(ant)40 b(d)-7 b(ur)s(i)s(n)n(g)39 b(th)l(e)i(s)m(e)l(l)n(ec)-5 b(tio)l(n)0 7923 y(of)61 b(th)l(e)f(l)n(ea)-7 b(vi)s(n)n(g)60 b(v)r(ar)s(i)s(a)l(b)l(l)n(e,)k (we)d(n)n(ee)l(d)f(o)l(nly)g(divid)-5 b(e)61 b(by)f FE(k)r FG(a)3994 7948 y Fz(k)4078 7923 y FE(k)69 b FP(fo)-7 b(r)61 b(c)l(o)n(mpar)s(is)n(o)l(n)f(p)-5 b(urpos)m(e)o(s.)90 b(T)8 b(h)l(e)61 b(s)m(e)l(l)n(ec)-5 b(tio)l(n)60 b(of)h(a)0 8122 y(l)n(ea)-7 b(vi)s(n)n(g)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(u)-7 b(s)n(i)s(n)n(g)52 b(th)l(e)g(Align)n(e)l(d)g(s)-5 b(tra)d(te)j(g)8 b(y)52 b(is)h(as)g(o)-5 b(u)l(tli)s(n)n(e)l(d)52 b(i)s(n)h(th)l(e)f(pr) q(evio)-5 b(u)e(s)53 b(s)m(ec)-5 b(tio)l(n.)249 8421 y(Given)48 b(tha)-8 b(t)49 b FG(a)1241 8446 y Fz(k)1354 8421 y FF(\327)31 b FH(h)1539 8446 y Fz(j)1621 8421 y FF(\272)38 b FP(\014)p 1850 8320 V 2 w FG(a)1967 8446 y Fz(k)21 b(j)2103 8421 y FP(,)49 b(it')-5 b(s)47 b(wo)-7 b(rth)47 b(t)s(aki)s(n)n(g)g(a)i(mo)n(ment)e(to)h(c)l(o)l(ns)n(id)-5 b(e)l(r)48 b(a)g(c)l(o)n(mmo)l(n)f(tie-b)-5 b(r)q(eaki)s(n)n(g)47 b(ru)l(l)n(e)h(fo)-7 b(r)0 8620 y(s)m(e)l(l)n(ec)i(ti)s(n)n(g)47 b(th)l(e)g(l)n(ea)-7 b(vi)s(n)n(g)47 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h (\227)g(pic)-8 b(k)47 b(th)l(e)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(with)e (th)l(e)i(larg)n(e)o(s)-5 b(t)5204 8613 y FF(|)p 5237 8520 V 5239 8620 a FG(a)5355 8645 y Fz(k)21 b(j)5491 8613 y FF(|)5532 8620 y FP(,)49 b(to)f(mai)s(nt)s(ai)s(n)f(n)n(ume)l(r) s(ical)h(s)-5 b(t)s(a-)0 8820 y(bility)-17 b(.)64 b(In)53 b(fa)n(c)-5 b(t,)52 b(this)g(amo)-5 b(unts)52 b(to)g(s)m(e)l(l)n(ec)-5 b(ti)s(n)n(g)51 b(a)i(hype)l(rplan)n(e)e(to)h(a)n(c)-5 b(tiv)r(a)d(te)52 b(u)-7 b(s)n(i)s(n)n(g)52 b(an)g(unn)m(o)-7 b(r)5 b(malis)m(e)l(d)50 b(v)r(ar)s(i)s(a)-8 b(tio)l(n)0 9019 y(of)58 b(th)l(e)g(Pe)l(rpendicu)l(lar)f(s)-5 b(tra)d(te)j(g)8 b(y)-17 b(.)81 b(T)8 b(h)l(e)58 b(o)-8 b(bvio)j(u)e(s)58 b(c)l(o)-7 b(r)q(o)i(llary)57 b(is)i(tha)-8 b(t)57 b(u)-7 b(s)n(i)s(n)n(g)58 b(th)l(e)f(Align)n(e)l(d)g(s)-5 b(tra)d(te)j(g)8 b(y)58 b(pr)q(e)o(s)m(ents)g(a)0 9218 y(potenti)s(al)52 b(dan)n(g)n(e)l(r)f(to)i(n)n(ume)l(r)s(ical)f(s)-5 b(t)s(a)l(bility)52 b(by)g(d)-5 b(e)l(libe)l(ra)d(te)l(ly)52 b(c)-7 b(h)n(oos)n(i)s(n)n(g) 52 b(small)g(pivots.)249 9517 y(Fo)-7 b(r)51 b(th)l(e)e(d)-7 b(ual)49 b(s)n(i)s(mpl)n(e)-5 b(x,)52 b(th)l(e)d(dir)q(ec)-5 b(tio)l(n)49 b(of)h(motio)l(n)h FH(z)3952 9542 y Fz(i)4053 9517 y FP(is)f(mo)-7 b(r)q(e)51 b(c)l(o)n(mplica)-8 b(te)l(d.)63 b(Fo)-7 b(rt)l(una)f(te)l(ly)-17 b(,)50 b(we)g(n)n(ee)l(d)g(o)l(nly)0 9716 y(c)l(o)l(ns)n(id)-5 b(e)l(r)61 b(th)l(e)g(po)-7 b(rtio)l(n)60 b(of)k FH(z)1978 9741 y Fz(i)2090 9716 y FP(i)s(n)d(th)l(e)g(s)-8 b(pa)n(c)i(e)61 b(of)h(th)l(e)f(d)-7 b(ual)60 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i FG(y)5 b FP(.)90 b(A)8 b(s)62 b(d)-5 b(e)l(r)s(ive)l(d)61 b(i)s(n)g(\2474.2,)j (this)d(is)g(s)n(i)s(mply)0 9915 y(r)q(ow)66 b FH(1)462 9940 y Fz(i)577 9915 y FP(of)74 b FG(B)937 9855 y FA(\0141)1088 9915 y FP(.)102 b(Fo)-7 b(r)65 b(th)l(e)f(d)-7 b(ual)64 b(c)l(o)l(ns)-5 b(trai)s(nts)63 b FG(y)7 b(a)3493 9940 y Fz(k)3623 9915 y FF(\263)49 b FG(c)3846 9940 y Fz(k)3931 9915 y FP(,)68 b(th)l(e)c(n)m(o)-7 b(r)5 b(mal)64 b(poi)s(nts)g(i)s (nto)h(th)l(e)f(feas)n(ib)l(l)n(e)i(r)q(e)-5 b(g)t(io)l(n.)100 b(T)r(o)0 10115 y(mai)s(nt)s(ai)s(n)44 b(th)l(e)g(c)l(o)l(nventio)l(n)e (tha)-8 b(t)44 b(th)l(e)g(alignment)f(calcu)l(la)-8 b(tio)l(n)43 b(s)-8 b(h)n(o)j(u)l(ld)43 b(pr)q(od)-7 b(u)i(c)f(e)44 b(a)h(pos)n(itive)f(r)q(e)o(s)-8 b(u)l(lt)44 b(if)h(th)l(e)e(c)l(o)l (n-)0 10412 y(s)-5 b(trai)s(nt)48 b(b)l(l)n(oc)-8 b(ks)47 b(motio)l(n,)h(th)l(e)f(alignment)f(calcu)l(la)-8 b(tio)l(n)47 b(u)-7 b(s)m(e)l(d)47 b(by)52 b FM(D)8 b(Y)g(L)g(P)53 b FP(is)48 b(\014)5416 10300 y FH(z)5505 10325 y Fz(i)5588 10300 y FF(\327)33 b FG(a)5769 10325 y Fz(k)p 5286 10374 697 7 v 5286 10526 a FE(k)r FH(z)5464 10551 y Fz(i)5514 10526 y FE(k)8 b(k)r FG(a)5804 10551 y Fz(k)5887 10526 y FE(k)6002 10412 y FP(.)64 b(Given)48 b(tha)-8 b(t)47 b(we'r)q(e)g(o)l(nly)3771 11400 y(20)p eop end %%Page: 21 24 TeXDict begin 21 23 bop 0 466 a FP(i)s(nte)l(r)q(e)o(s)-5 b(te)l(d)64 b(i)s(n)g(th)l(e)f(po)-7 b(rtio)l(n)63 b(of)j FH(z)2343 491 y Fz(i)2429 466 y FF(\327)37 b FG(a)2614 491 y Fz(k)2763 466 y FP(c)l(o)l(ntr)s(ib)-8 b(u)l(te)l(d)62 b(by)h(th)l(e)h(d)-7 b(ual)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h FG(y)5 b FP(,)65 b(it')-5 b(s)64 b(i)s(mme)l(di)s(a)-8 b(te)l(ly)63 b(a)-6 b(p)e(par)q(ent)0 749 y(tha)g(t)53 b(th)l(e)h(alignment)e(calcu)l(la)-8 b(tio)l(n)53 b(can)h(be)g(r)q(e)l (d)-7 b(u)i(c)f(e)l(d)53 b(to)h(\014)p 4140 536 117 7 v 4142 636 a FG(a)4256 661 y Fz(i)11 b(k)p 4076 711 374 7 v 4076 863 a FE(k)r FG(a)4271 888 y Fz(k)4355 863 y FE(k)4524 749 y FP(fo)-7 b(r)54 b(p)-5 b(urpos)m(e)o(s)53 b(of)h(s)m(e)l(l)n(ec)-5 b(ti)s(n)n(g)54 b(th)l(e)f(l)n(ea)-7 b(vi)s(n)n(g)53 b(d)-7 b(ual)0 1055 y(v)r(ar)s(i)s(a)l(b)l(l)n(e.)66 b(T)8 b(h)l(e)52 b(\002)s(nal)h(s)m(e)l(l)n(ec)-5 b(tio)l(n)52 b(of)h(a)g(l)n(ea)-7 b(vi)s(n)n(g)51 b(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(u)-7 b(s)n(i)s(n)n(g)52 b(th)l(e)g(Align)n(e)l(d)f(o)-7 b(r)53 b(Pe)l(rpendicu)l(lar)f(s)-5 b(tra)d(te)j(g)8 b(y)0 1254 y(pr)q(oc)-6 b(ee)l(ds)53 b(as)g(o)-5 b(u)l(tli)s(n)n(e)l(d)52 b(i)s(n)h(th)l(e)f(pr)q(evio)-5 b(u)e(s)53 b(s)m(ec)-5 b(tio)l(n.)3771 11400 y(21)p eop end %%Page: 22 25 TeXDict begin 22 24 bop 0 475 a FL(7)239 b(T)5 b(h)-11 b(e)80 b(LP)g(Bas)n(is)4 959 y FM(D)8 b(Y)g(L)g(P)59 b FP(r)q(eq)l(uir)q(e)o(s)52 b(thr)q(ee)h(ca)-6 b(pa)l(bilitie)o(s)53 b(fr)q(o)n(m)g(a)g(bas)n(is)g(mai)s(ntenanc)-6 b(e)53 b(mod)-7 b(u)l(l)n(e:)217 1385 y Fo(e)82 b FP(Fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)52 b(of)h(th)l(e)f(bas)n(is)h(to)g(c)-8 b(r)q(ea)g(te)53 b(th)l(e)f(bas)n(is)i(i)s(nve)l(rs)m(e.)217 1714 y Fo(e)82 b FP(Upda)-8 b(te)52 b(of)h(th)l(e)f(bas)n(is)h(i)s(nve) l(rs)m(e)g(fo)-7 b(r)53 b(a)g(pivot.)217 2043 y Fo(e)82 b FP(Pr)q(e)n(m)l(u)l(ltiplica)-8 b(tio)l(n)76 b(\(`ftran'\))i(of)h(a)h (c)l(o)-5 b(l)n(umn)79 b(vec)-5 b(to)e(r)81 b(by)e(th)l(e)g(bas)n(is)h (i)s(nve)l(rs)m(e,)86 b(and)79 b(pos)-5 b(tm)l(u)l(ltiplica)d(tio)l(n) 415 2242 y(\(`)r(b)i(tran'\))50 b(of)j(a)g(r)q(ow)f(vec)-5 b(to)e(r)54 b(by)e(th)l(e)h(bas)n(is)g(i)s(nve)l(rs)m(e.)4 2668 y FM(D)8 b(Y)g(L)g(P)62 b FP(u)-7 b(s)m(e)o(s)57 b(th)l(e)g(bas)n(is)g(mai)s(ntenanc)-6 b(e)56 b(mod)-7 b(u)l(l)n(e)55 b(fr)q(o)n(m)i(GL)s(PK)f(to)g(pr)q(ovid)-5 b(e)57 b(th)l(e)o(s)m(e)f(s)m(e)l(rvic)-6 b(e)o(s.)78 b(Kn)m(owl)n(e)l(dg)n(e)53 b(of)k(th)l(e)0 2868 y(s)-5 b(tru)g(c)g(t)l(ur)q(e)44 b(and)f(o)-5 b(pe)l(ra)d(tio)l(n)42 b(of)i(th)l(e)f(GL)s(PK)g(s)-8 b(u)h(b)i(r)q(o)g(u)l(ti)s(n)n(e)o(s)43 b(is)h(c)l(o)l(n\002)s(n)n(e)l(d)f(to)h(a)g(s)m(e)-7 b(t)44 b(of)g(i)s(nte)l(r)5 b(fa)n(c)-6 b(e)44 b(s)-8 b(u)h(b)i(r)q(o)g(u)l(ti)s(n)n(e)o(s)43 b(i)s(n)h(th)l(e)0 3067 y(\002l)n(e)52 b FJ(dy_basis)s(.c)p FP(.)65 b(T)8 b(h)l(e)52 b(majo)-7 b(r)s(ity)51 b(of)h(th)l(e)o(s)m(e)f(ar)q(e)h(s)-5 b(traightfo)e(rwar)q(d)50 b(i)s(nte)l(r)5 b(fa)n(c)-6 b(e)52 b(func)-5 b(tio)l(ns)50 b(wh)n(os)m(e)h(s)n(o)-5 b(l)n(e)52 b(p)-5 b(urpos)m(e)51 b(is)0 3266 y(to)i(hid)-5 b(e)52 b(th)l(e)g(GL)s(PK)g(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)53 b(and)f(to)h(me)l(di)s(a)-8 b(te)53 b(be)-7 b(tween)52 b(GL)s(PK)g(and)g(th)l(e)h(r)q(e)n(mai)s(nd)-5 b(e)l(r)52 b(of)g(th)l(e)h(c)l(od)-5 b(e.)0 3857 y Fu(7)-35 b(.1)198 b(T)t(h)-9 b(e)67 b(GLPK)g(Bas)n(is)f(Mod)-9 b(ule)64 b(Inte)-5 b(r)t(fa)m(c)e(e)0 4277 y FP(V)-12 b(e)l(ry)84 b(r)q(o)-5 b(u)l(ghly)-17 b(,)90 b(th)l(e)83 b(GL)s(PK)g(bas)n(is)i (mai)s(ntenanc)-6 b(e)83 b(mod)-7 b(u)l(l)n(e)83 b(has)h(a)g(two-laye)l (r)f(s)-5 b(tru)g(c)g(t)l(ur)q(e.)158 b(T)8 b(h)l(e)84 b(to)-5 b(p)84 b(laye)l(r)0 4476 y(\()p FJ(glpin)m(v)-19 b(.c)p FP(\))62 b(pr)q(ovid)-5 b(e)o(s)63 b(th)l(e)f(bas)n(ic)i(s)m(e)l (rvic)-6 b(e)o(s)63 b(fo)-7 b(r)63 b(a)h(g)n(en)n(e)l(r)s(ic)e(bas)n (is)h(i)s(nve)l(rs)m(e.)96 b(In)63 b(t)l(ur)5 b(n,)64 b(th)l(e)e(to)-5 b(p)63 b(laye)l(r)g(calls)g(o)l(n)f(a)0 4675 y(s)m(ec)l(o)l(nd)46 b(laye)l(r)h(\()p FJ(glpluf)-7 b(.c)p FP(\))45 b(to)i(pr)q(ovid)-5 b(e)47 b(a)g(s)-8 b(pec)m(i\002c)47 b(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n)45 b(of)i(th)l(e)g(bas)n(is)g(i)s(nve)l(rs)m(e)g(da)-8 b(t)s(a)48 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)47 b(and)0 4874 y(algo)-7 b(r)s(ithms.)71 b(Dy)7 b(nam)s(ic)54 b(Markowitz)e(pivoti)s(n)n(g)i (with)f(parti)s(al)i(thr)q(e)o(s)-8 b(h)n(o)j(ld)54 b(pivot)g(s)m(e)l (l)n(ec)-5 b(tio)l(n)54 b(is)h(u)-7 b(s)m(e)l(d)55 b(to)g(fa)n(c)-5 b(to)e(r)55 b(a)0 5074 y(bas)n(is.)249 5373 y(T)8 b(h)l(e)61 b(r)q(o)-5 b(u)l(ti)s(n)n(e)62 b FJ(dy_initbasis)f FP(is)h(u)-7 b(s)m(e)l(d)61 b(to)h(i)s(niti)s(alis)m(e)f(th)l(e)g(bas)n(is)h(mod)-7 b(u)l(l)n(e.)91 b(T)8 b(h)l(e)61 b(ca)-6 b(pa)n(c)m(ity)61 b(of)h(th)l(e)f(bas)n(is,)j(algo-)0 5572 y(r)s(ithm)j(o)-5 b(ptio)l(ns,)70 b(and)d(n)n(ume)l(r)s(ic)h(to)-5 b(l)n(e)l(ranc)f(e)o (s)68 b(ar)q(e)g(s)m(e)-7 b(t)68 b(a)-8 b(t)67 b(i)s(niti)s(alisa)-8 b(tio)l(n)66 b(\()p FG(vid)p FP(.)h(\24717)-29 b(.3\).)110 b(T)8 b(h)l(e)67 b(bas)n(is)h(is)g(d)-5 b(e)l(l)n(e)e(te)l(d)0 5771 y(by)69 b(th)l(e)h(r)q(o)-5 b(u)l(ti)s(n)n(e)70 b FJ(dy_fr)o(eebasis)p FP(.)117 b(Chan)n(g)t(i)s(n)n(g)67 b(th)l(e)i(bas)n(is)i(ca)-6 b(pa)n(c)m(ity)69 b(is)h(i)s(mpl)n(e)n (mente)l(d)f(i)s(n)74 b FM(D)8 b(Y)g(L)g(P)76 b FP(by)69 b(sa)-7 b(vi)s(n)n(g)69 b(o)-5 b(p-)0 5970 y(tio)l(ns)62 b(and)h(to)-5 b(l)n(e)l(ranc)f(e)o(s)64 b(fo)-7 b(r)64 b(th)l(e)e(e)-5 b(x)10 b(is)-5 b(ti)s(n)n(g)62 b(bas)n(is,)67 b(d)-5 b(e)l(l)n(e)e(ti)s(n)n(g)62 b(th)l(e)h(e)-5 b(x)10 b(is)-5 b(ti)s(n)n(g)62 b(bas)n(is,)67 b(and)62 b(c)-8 b(r)q(ea)g(ti)s(n)n(g)62 b(a)i(n)n(ew)f(bas)n(is)0 6170 y(of)f(th)l(e)g(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)62 b(s)n(ize.)94 b(T)8 b(h)l(e)62 b(ca)-6 b(pa)n(c)m(ity)61 b(is)h(c)-7 b(h)l(ec)f(ke)l(d)62 b(ea)n(c)-7 b(h)62 b(ti)s(me)h(th)l(e) f(bas)n(is)g(is)h(fa)n(c)-5 b(to)e(r)q(e)l(d;)67 b(c)-7 b(han)n(g)n(e)o(s)60 b(ar)q(e)j(i)s(n-)0 6369 y(vis)n(ib)l(l)n(e)55 b(to)f(clients.)71 b(T)8 b(h)l(e)54 b(GL)s(PK)g(bas)n(is)h(mod)-7 b(u)l(l)n(e)53 b(will)h(r)q(e)o(s)n(ize)h(its)g(own)e(i)s(nte)l(r)5 b(nal)53 b(da)-8 b(t)s(a)55 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)55 b(wh)l(en)n(eve)l(r)e(it)0 6568 y(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)o(s)54 b(tha)-8 b(t)52 b(this)g(is)h(r)q(eq)l(uir)q(e)l (d.)249 6867 y(In)59 b(th)l(e)g(mai)s(n,)64 b FM(D)8 b(Y)g(L)g(P)65 b FP(u)-7 b(s)m(e)o(s)60 b(th)l(e)e(bas)n(is)i(mod)-7 b(u)l(l)n(e)58 b(i)s(n)h(a)g(s)-5 b(t)s(andar)q(d)59 b(way)f(fo)-7 b(r)60 b(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)58 b(and)g(pivoti)s(n)n(g.)83 b(T)8 b(h)l(e)l(r)q(e)0 7066 y(ar)q(e)53 b(s)n(o)n(me)g(d)-5 b(e)e(part)l(ur)q(e)o(s)53 b(fr)q(o)n(m)g(GL)s(PK)f(d)-5 b(e)l(fa)d(u)l(lts:)217 7492 y Fo(e)82 b FP(T)8 b(h)l(e)53 b(i)s(niti)s(al)f(s)n(ize)h(of)g(th) l(e)f(s)-8 b(pars)m(e)53 b(vec)-5 b(to)e(r)53 b(wo)-7 b(rki)s(n)n(g)51 b(ar)q(ea)i(is)g(tr)s(ipl)n(e)l(d.)217 7821 y Fo(e)82 b FP(T)8 b(h)l(e)53 b(li)s(m)s(it)f(o)l(n)h(e)l(l)n(e)n (ment)f(gr)q(owth)f(\()p FJ(luf)-7 b(.m)m(ax_gr)m(o)p FP(\))51 b(is)i(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)52 b(fr)q(o)n(m)h(10)5221 7761 y FA(12)5426 7821 y FP(to)g(10)5841 7761 y FA(6)5921 7821 y FP(.)217 8151 y Fo(e)82 b FP(T)8 b(h)l(e)62 b(m)s(i)s(ni)s(m)l (um)g(v)r(al)n(u)l(e)g(fo)-7 b(r)62 b(e)l(l)n(e)n(ments)g(o)l(n)g(th)l (e)f(di)s(ago)l(nal)g(of)h(th)l(e)g(fa)n(c)-5 b(to)e(r)s(isa)f(tio)l(n) 61 b(\()p FJ(luf_basis)s(.upd_tol)g FP(is)i(r)q(e-)415 8350 y(d)-7 b(u)i(c)f(e)l(d)52 b(fr)q(o)n(m)h(10)1569 8290 y FA(\0146)1772 8350 y FP(to)g(10)2187 8290 y FA(\01410)2408 8350 y FP(.)217 8679 y Fo(e)82 b FP(Ins)-5 b(tea)f(d)47 b(of)g(a)g(\002xe)l(d)g(d)-5 b(e)l(fa)d(u)l(lt)46 b(of)j(.)r(1,)e(th)l (e)g(pivot)f(s)-5 b(t)s(a)l(bility)46 b(to)-5 b(l)n(e)l(ranc)f(e)47 b(is)h(dy)7 b(nam)s(ically)45 b(a)-6 b(dj)f(u)g(s)i(te)l(d)47 b(i)s(n)g(a)g(ran)n(g)n(e)415 8878 y(be)-7 b(tween)68 b(.)r(01)e(and)i(.)r(95)e(bas)m(e)l(d)g(o)l(n)k FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)68 b(as)-5 b(s)m(e)o(s)g(sment)67 b(of)g(th)l(e)f(n)n(ume)l(r)s(ical)g(s)-5 b(t)s(a)l(bility)66 b(of)h(th)l(e)f(curr)q(ent)415 9078 y(bas)n(is.)97 b(T)8 b(h)l(e)62 b(n)n(umbe)l(r)h(of)g(pivot)f(candida)-8 b(te)o(s)63 b(e)-5 b(xam)s(i)s(n)n(e)l(d)63 b(wh)l(en)f(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)62 b(th)l(e)g(bas)n(is)i(is)f(als)n(o)g(a)-6 b(dj)f(u)g(s)i(te)l(d)415 9277 y(i)s(n)60 b(th)l(e)g(ran)n(g)n(e)f(4)h (to)g(10.)88 b(Mo)-7 b(r)q(e)60 b(candida)-8 b(te)o(s)60 b(ar)q(e)g(c)l(o)l(ns)n(id)-5 b(e)l(r)q(e)l(d)60 b(as)h(th)l(e)e(s)-5 b(t)s(a)l(bility)60 b(r)q(eq)l(uir)q(e)n(ment)f(is)h(rais)m(e)l(d)415 9476 y(i)s(n)53 b(th)l(e)f(h)n(o)-5 b(pe)52 b(of)h(\002)s(ndi)s(n)n(g)e (a)i(n)n(ume)l(r)s(ically)f(s)-5 b(t)s(a)l(b)l(l)n(e)53 b(candida)-8 b(te)52 b(with)n(o)-5 b(u)l(t)52 b(c)l(o)n(mpr)q(o)n(m)s (is)n(i)s(n)n(g)g(s)-8 b(pars)n(ity)-17 b(.)249 9902 y(T)8 b(h)l(e)64 b(r)q(o)-5 b(u)l(ti)s(n)n(e)64 b FJ(dy_setpivpar)t(ms) h FP(is)f(pr)q(ovid)-5 b(e)l(d)64 b(to)h(a)-6 b(dj)f(u)g(s)i(t)65 b(th)l(e)f(pivot)g(s)-5 b(t)s(a)l(bility)64 b(to)-5 b(l)n(e)l(ranc)f(e) 64 b(and)g(pivot)g(candi-)0 10101 y(da)-8 b(te)61 b(li)s(m)s(it.)91 b(Adj)-7 b(u)g(s)i(tment)61 b(of)g(th)l(e)g(pivot)g(s)m(e)l(l)n(ec)-5 b(tio)l(n)60 b(parame)-7 b(te)l(rs)62 b(is)g(do)l(n)n(e)e(a)n(cc)l(o)-7 b(r)q(di)s(n)n(g)60 b(to)h(a)h(\002xe)l(d)f(sc)-7 b(h)l(e)l(d)g(u)l(l)n (e)60 b(of)0 10301 y(to)-5 b(l)n(e)l(ranc)f(e)64 b(and)g(li)s(m)s(it)h (v)r(al)n(u)l(e)o(s)g(ke)-7 b(pt)64 b(i)s(n)g(th)l(e)g(s)-5 b(t)s(a)d(tic)65 b(da)-8 b(t)s(a)64 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)65 b FJ(dy_basis)s(.c:pivtols)p FP(.)99 b(T)8 b(h)l(e)64 b(client)g(s)-8 b(pec)m(i\002e)o(s)0 10500 y(an)53 b(i)s(nte)-5 b(g)n(e)l(r)51 b(d)-5 b(e)l(lt)s(a)53 b(whic)-7 b(h)52 b(is)h(u)-7 b(s)m(e)l(d)52 b(to)h(s)m(e)l(l)n(ec)-5 b(t)53 b(a)g(pair)g(of)g(v)r(al)n(u)l(e)o(s)g(fr)q(o)n(m)g(th)l(e)f(sc)-7 b(h)l(e)l(d)g(u)l(l)n(e.)3771 11400 y(22)p eop end %%Page: 23 26 TeXDict begin 23 25 bop 249 466 a FP(Pr)q(e-)43 b(and)g(pos)-5 b(t-m)l(u)l(ltiplica)d(tio)l(n)40 b(of)j(vec)-5 b(to)e(rs)44 b(by)f(th)l(e)f(bas)n(is)i(i)s(nve)l(rs)m(e)e(ar)q(e)i(pr)q(ovid)-5 b(e)l(d)42 b(by)h(th)l(e)f(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)43 b FJ(dy_ftr)m(an)0 665 y FP(and)52 b FJ(dy_btr)m(an)p FP(,)h(r)q(e)o(s)-8 b(pec)j(tive)l(ly)-17 b(.)0 1258 y Fu(7)-35 b(.2)198 b(Fa)m(c)-10 b(to)i(r)r(in)h(g)0 1677 y FP(Fo)g(r)62 b(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)61 b(th)l(e)g(bas)n(is,)j(th)l(e)d(r)q(o)-5 b(u)l(ti)s(n)n(e)62 b FJ(dy_f)-6 b(actor)61 b FP(pr)q(ovid)-5 b(e)o(s)62 b(s)n(igni\002cant)e(e)l(rr)q(o)-7 b(r)62 b(r)q(ec)l(ove)l(ry)f(func)-5 b(tio)l(ns)61 b(o)l(n)f(to)-5 b(p)0 1876 y(of)53 b(th)l(e)f(bas)n(ic)h (a)l(bilitie)o(s)g(of)g(GL)s(PK.)f(T)8 b(h)l(e)52 b(call)h(s)-5 b(tru)g(c)g(t)l(ur)q(e)52 b(is)h(s)-8 b(h)n(own)52 b(i)s(n)g(Fig)n(ur)q (e)h(1.)1325 4782 y @beginspecial 144 @llx 368 @lly 453 @urx 528 @ury 3090 @rwi @setspecial %%BeginDocument: /devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/factorcalls.eps %!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/factorcalls.epsu %%Creator: IslandDraw for lou %%CreationDate: Thu Sep 1 12:19:36 2005 %%Pages: 1 %%BoundingBox: 144 368 453 528 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 388 202 1 404 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000005 % 000000000000000000000000000000000000000000000000006000200203000008000000000060 % 00100000018060000005 % 000000000000000000000000000000000000000000000000002000200221000008000000000020 % 00100000008020040005 % 0000000000000000000000000000000000000000000000000020000000210000000000000001a0 % 00000000008020040005 % 00000000000000000000000000000000000000000000000003eee066e67971e1b8680000000e2d % c03373b80f8e238f7005 % 0000000000000000000000000000000000000000000000000624402312219a124890000000112e % 60118910189f27c4f805 % 000000000000000000000000000000000000000000000000e426402212210873a8e81ffffc1124 % 201109a0109024048005 % 000000000000000000000000000000000000000000000003e42280221221099068180000000e24 % 201108a0109024048005 % 00000000000000000000000000000000000000000000000f8462802212211a3228880000001024 % 601108c011992644c80d % 00000000000000000000000000000000000000000000003e03b100773f39f1dbdcf00000001f77 % c03b9c400ece7387700d % 00000000000000000000006001c0001900000004000000f8000100000000000000000000001184 % 00000000000000000000 % 0000000000000000000000200200000900002004000003e000071f800000000000000000003184 % 0fc00007e0000000000c % 000000000000000000000020020000080000200000000f80000c00000000000000000000001e0e % 00000000000000000000 % 0000000000000000000000221700f0fb1086f8dc7dc03e00000000000000000000000000000000 % 00000000000000000000 % 00000000000000000000002632010989318921248be0f800000000000000000000000000000000 % 0000000000000000000f % 00000000000000000000062212003909108ea1d41200e000000000000000000000000000000000 % 0000000000000000000c % 000000000000000000000c221200c9091081a0342200f800000000000000000000000000000000 % 00000000000000000000 % 000000000000000000000c22320119191188a11447203e00000000000000000000000000000000 % 00000000000000000002 % 000000000000000000000c71df00eced0ecf39eef9c00f80000000000000000000000000000000 % 0000000000000000000d % 0000000000000000000018000000000100000000000003e000c0001c0001800002000000000060 % 0010000000000000000d % 000000000000000000001800007e000500000000000000f8004000200000800002000000000020 % 00100000000000020000 % 0000000000000000000018000000000e000000000000003e0040002000008000000000000001a0 % 0000000000000002000d % 00000000000000000000300000000000000000000000000f87cee077dc38b8f0d6340000000e2d % c03373b80f3ee1e79c0f % 000000000000000000003000000000000000000000000003ec4440223e7ccd092248000000112e % 601189101891f2123e03 % 000000000000000000003000000000000000000000000000e846402220408439d2741ffffc1124 % 201109a0101100722003 % 00000000000000000000600000000000000000000000000008428022204084c8320c0000000e24 % 201108a0101101922003 % 00000000000000000000600000000000000000000000000008c2802232648d1912440000001024 % 601108c0189192323203 % 000000000000000000006000000000000000000000000000076100771c38f8ede7780000001f77 % c03b9c400f38e1db9c03 % 00000000000000000000c006000000000080000000000000000100000000000000000000001184 % 00000000000000000003 % 00000000000000000000c00200000010008000000000000000073f000000000000000000003184 % 0fc00007e0000000000b % 00000000000000000000c002000000100000000000000000000c00000000000000000000001e0e % 00000000000000000003 % 00000000000000000001803eee01a73db99dee3cfb761a00000000000000000000000000000000 % 00000000000000000004 % 00000000000000000001806244024f91cc88f34241992400000000000000000000000000000000 % 00000000000000000002 % 000000000000000000018e426403a810848d210e41113a00000000000000000000000000000000 % 00000000000000000001 % 000000000000000000030c42280068108485213241110600000000000000000000000000000000 % 00000000000000000000 % 000000000000000000031c4628022c908c86234641112200000000000000000000000000000000 % 00000000000000000003 % 00000000000000000003183b1003c71cf9c23e3be3bbbc00000000000000000000000000000000 % 0000000000000000000d % 000000000000000000063800100000008000200000000000000000000000000000000000000000 % 0000000000000000000d % 00000000000000000006300071f800008000200000000000000000000000000000000000000000 % 00000000000000000008 % 000000000000000000067000c0000001c000700000000000000000000000000000000000000000 % 00000000000000000000 % 0000000000000000000c6000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 0000000000000000000ce000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 0000000000000000000cc000000000000000000000000000000000000000000000000000000000 % 0000000000000000000f % 00000000000000000019c000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 000000000000000000198000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 0000000000000000001b8001800020000003000000000000000000000000000000000000000000 % 00000000000000000000 % 000000000000000000330000800020000001000000000000000000000000000000000000000000 % 00000000000000000000 % 000000000000000000370003800000000001000000000000000000000000000000000000000000 % 00000000000000000000 % 00000000000000000036001c9b8066e7701f1c78f3766e00000000000000000000000000000000 % 00000000000000000000 % 0000000000000000006e00229cc0231220313ec599997300000000000000000000000000000000 % 00000000000000000000 % 0000000000000000006c0422884022134021208109112100000000000000000000000000000000 % 00000000000000000000 % 0000000000000000007c0c1c884022114021208109112100000000000000000000000000000000 % 00000000000000000000 % 000000000000000000d81c2088c02211802332c519112300000000000000000000000000000000 % 00000000000000000000 % 000000000000000000f8383fcf807738801d9c78f3bbbe00000000000000000000000000000000 % 00000000000000000000 % 000000000000000000f07023080000000000000000002000000000000000000000000000000000 % 00000000000000000000 % 000000000000000001f0e063081f80000fc0000000002000000000000000000000000000000000 % 00000000000000000000 % 000000000000000001e1c03c1c0000000000000000007000000000000000000000000000000000 % 00000000000000000000 % 000000000000000001e38000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 000000000000000003c70000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 000000000000000003ce0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 0000000000000000039c0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 000000000000000007b80000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 000000000000000007700000000000000000000000000000000000000000000000000000000000 % 00000000000000000000 % 018000380000000007e000000c4000000600000800000000000000000000000000000000000000 % 00000000000000000008 % 00800040002000000fc00000044000100200000800000000000000000000000000000000000000 % 00000000000000000008 % 00800040002000000f800000040000100200000000000000000000000000000000000000000000 % 00000000000000000004 % 0f9dc0e78f79e7c00f00003c7cc8437c02e3c35868000000000000000000000000000000000000 % 00000000000000000000 % 1888804858a332001e000042c458c4900334248890000000000000000000000000000000000000 % 0000000000000000000c % 108c8041d02212001ffffc0e844847500210e748e8000000000000000000000000000000000000 % 00000000000000000002 % 108500465022120018000032844840d0021320c818000000000000000000000000000000000000 % 0000000000000000000a % 11850048d8a232001c0000468c48c4500234644888000000000000000000000000000000000000 % 00000000000000000008 % 0ec200e76f39e7000c00003b7647679c03e3b79cf0000000000000000000000000000000000000 % 00000000000000000000 % 00020000000000000e000000004000000000000000000000000000c00000030001800000000000 % 00000000000000000000 % 000e7e00000000000e00000001400001f800000000000000000000400000010000800000000000 % 00000000000000000008 % 00180000000000000e000000038000000000000000000000000000400000010000800000000000 % 00000000000000000008 % 00000000000000000f000000000000000000000000000000000007ddc078f11e78b8f3e0000000 % 00000000000000000004 % 00000000000000000f00000000000000000000000000000000000c4880c50931c4cd0900000000 % 00000000000000000000 % 00000000000000000f8000000000000000000000000000000006084c8080392080843900000000 % 0000000000000000000c % 00000000000000000f800000000000000000000000000000000e08450080c9208084c900000000 % 00000000000000000002 % 000000000000000007800000000000000000000000000000000c08c500c51931c48d1900000000 % 0000000000000000000a % 000000000000000007c00000000000000000000000000000001807620078ef9e78f8ef80000000 % 0000000000000000000a % 000000000000000007c00000000000000000000000000000003800020000000000000000000000 % 00000000000000000004 % 0000000000000000076000000000000000000000000000000070000e3f00000000000000000000 % 00000000000000000006 % 000000000000000007600000000000000000000000000000006000180000000000000000000000 % 0000000000000000000d % 000000000000000007e0000000000000000000000000000000c000000000000000000000000000 % 0000000000000000000f % 000000000000000007b0000000000000000000000000000001c000000000000000000000000000 % 00000000000000000003 % 000000000000000007b00000000000000000000000000000038000000000000000000000000000 % 0000000000000000000e % 000000000000000002980000000000000000000000000000030000000000000000000000000000 % 0000000000000000000b % 000000000000000002d80000000000000000000000000000060000000000000000000000000000 % 00000000000000000007 % 000000000000000003d800000000000000000000000000000e0000000000000000000000000000 % 00000000000000000000 % 000000000000000003cc00000000000000000000000000001c0000c0000c000000000000000000 % 00000000000000000000 % 000000000000000003cc0000000000000000000000000000180000400004000000000004000000 % 0000000000000000000f % 000000000000000003660000000000000000000000000000300000400004000c00000004000000 % 0000000000000000000f % 000000000000000003660000000000000000000000000000700007ddc07c70738dc7884f000000 % 0000000000000000000f % 000000000000000001660000000000000000000000000000e0020c4880c4f88fc62cd8c4000000 % 00000000000000000008 % 000000000000000001630000000000000000000000000000c00e084c8084808c04284844000000 % 00000000000000000009 % 000000000000000001b30000000000000000000000000001801c08450084807404284844000000 % 00000000000000000009 % 000000000000000001b18000000000000000000000000003807808c5008cc8864428c8c4000000 % 00000000000000000009 % 000000000000000001b1800000000000000000000000000700e00762007670fb8e778767000000 % 00000000000000000009 % 000000000000000001b1800000000000000000000000000603c000020000008c00000000000000 % 00000000000000000009 % 00000000000000000190c00000000000000000000000000c0700000e3f00018c00000000000000 % 0000000000000000000d % 00000000000000000198c00000000000000000000000001c1e000018000000f000000000000000 % 0000000000000000000f % 000000000000000000986000000000000000000000000038380000000000000000000000000000 % 0000000000000000000f % 000000000000000000986000000000000000000000000030f00000000000000000000000000000 % 00000000000000000000 % 000000000000000000c86000000000000000000000000061c00000000000000000000000000000 % 0000000000000000000f % 000000000000000000cc30000000000000000000000000e7800000000000000000000000000000 % 00000000000000000000 % 000000000000000000cc30000000000000000000000001ce000000000000000000000000000000 % 00000000000000000008 % 000000000000000000cc18000c40000000080000000001bc000000000000000000000000000000 % 00000000000000000000 % 000000000000000000cc1800044000080118000000040370000001800001800040000100000000 % 00000000000000000000 % 000000000000000000c618000400000801080000000407e0000000800000800040000100000000 % 00000000000000000000 % 000000000000000000460c3c7cc4235e03cb8e7ce1af0f80000000800000800000000000000000 % 00000000000000000006 % 000000000000000000460c42c44c6488010c5f21f2440f0000000f9dc078bedcddfee300000000 % 0000000000000000000d % 00000000000000000066060e844427480108502103a41fffffff188880c490e64891f100000000 % 00000000000000000007 % 000000000000000000630432844420c80108502100641fffffff108c808090424d110100000000 % 00000000000000000006 % 0000000000000000006300468c4464480108592192240f00000010850080904245110100000000 % 00000000000000000003 % 00000000000000000063003b7643b78e01dcee70e3c70fc00000118500c4904646119100000000 % 00000000000000000000 % 0000000000000000006300000040000000000000000007e000000ec20079f87ce238e100000000 % 00000000000000000000 % 00000000000000000021000001400000fc000000000007f8000000020000004000000100000000 % 00000000000000000000 % 0000000000000000002180000380000000000000000003fc0000000e3f00004000000500000000 % 00000000000000000000 % 00000000000000000031800000000000000000000000036f00000018000000e000000e00000000 % 00000000000000000000 % 0000000000000000003180000000000000000000000003f7800000000000000000000000000000 % 00000000000000000004 % 0000000000000000003080000000000000000000000001b9e00000000000000000000000000000 % 00000000000000000000 % 00000000000000000030c0000000000000000000000001d8f00000000000000000000000000000 % 00000000000000000000 % 00000000000000000030c0000000000000000000000001cc3c0000000000000000000000000000 % 0000000000000000000f % 00000000000000000030c0000000000000000000000000ee1e0000000000000000000000000000 % 00000000000000000000 % 00000000000000000010c0000000000000000000000000e7078001800000000200200000000000 % 00000000000000000000 % 0000000000000000001060000000000000000000000000f303c000800000000200220000000000 % 0000000000000000000c % 00000000000000000018600000000000000000000000007180f000800000000000020000000000 % 00000000000000000000 % 000000000000000000186000000000000000000000000079c0780f9dc0dc35c66e678000000000 % 00000000000000000002 % 000000000000000000186000000000000000000000000078e01e188880e64be231220000000000 % 0000000000000000000d % 00000000000000000018300000000000000000000000003c600e108c8042760221220000000000 % 00000000000000000000 % 00000000000000000018300000000000000000000000003c3000108500420e0221220000000000 % 00000000000000000004 % 000000000000000000183000000000000000000000000036380011850046472221220000000000 % 0000000000000000000f % 00000000000000000008300000000000000000000000001e1c000ec2007c79c773f38000000000 % 00000000000000000001 % 00000000000000000008100000000000000000000000001b0c0000020040000000000000000000 % 00000000000000000008 % 0000000000000000000c180000000000000000000000001b0600000e3f40000000000000000000 % 00000000000000000000 % 0000000000000000000c180000000000000000000000000d8700001800e0000000000000000000 % 00000000000000000000 % 0000000000000000000c180000000000000000000000000d838000000000000000000000000000 % 00000000000000000000 % 0000000000000000000c080000000000000000000000000cc18000000000000000000000000000 % 00000000000000000000 % 0000000000000000000c0c00000000000000000000000006c0c000000000000000000000000000 % 00000000000000000003 % 000000000000000000040c0000000000000000000000000660e000000000000000000000000000 % 00000000000000000007 % 000000000000000000040c00000000000000000000000006607000000000000000000000000000 % 00000000000000000000 % 000000000000000000060c00000000000000000000000003303000000000000000000000000000 % 00000000000000000000 % 00000000000000000006078000000000000000000000000330180180000c000200200000000000 % 00000000000000000000 % 0000000000000000000607fc000000000000000000000003181c00800004000200220000000000 % 0000000000000000000b % 00000000000000000006007fe00000000000000000000001980e00800004000000020000000000 % 00000000000000000000 % 000000000000000000060001ff80000000000000000000018c060f9dc07c35c66e678000000000 % 00000000000000000000 % 0000000000000000000600000ffc000000000000000000018c03188880c44be231220000000000 % 00000000000000000000 % 000000000000000000020000003ff0000000000000000000c603108c8084760221220000000000 % 00000000000000000000 % 0000000000000000000200000001ff800000000000000000c600108500840e0221220000000000 % 00000000000000000000 % 000000000000000000030000000007fe0000000000000000c3001185008c472221220000000000 % 00000000000000000000 % 0000000000000000000300000000003ff00000000000000063000ec2007679c773f38000000000 % 00000000000000000006 % 00000000000000000003000000000000ffc0000000000000618000020000000000000000000000 % 00000000000000000000 % 0000000000000000000300000000000007fe0000000000006180000e3f00000000000000000000 % 00000000000000000000 % 00000000000000000003000000000000001ff8000000000030c000180000000000000000000000 % 00000000000000000000 % 000000000000000000030000000000000000ffc00000000030c000000000000000000000000000 % 00000000000000000001 % 00000000000000000001000000000000000003ff00000000306000000000000000000000000000 % 00000000000000000008 % 000000000000000000010000000000000000001ff8000000186000000000000000000000000000 % 00000000000000000008 % 00000000000000000001800000000000000000007fe00000183000000000000000000000000000 % 00000000000000000000 % 000000000000000000018000000000000000000003ff0000183000000000000000000000000000 % 00000000000000000000 % 0000000000000000000180000000000000000000001ff8000c1800000000000000000000000000 % 00000000000000000000 % 000000000000000000018000000000000000000000007fe00c1800c0000003000c0000c0000000 % 00000000000000000003 % 0000000000000000000180000000000000000000000003ff0c0c00400000010004000040000000 % 00000000000000000000 % 00000000000000000000800000000000000000000000000ffe0c00400000010004000040000000 % 00000000000000000000 % 0000000000000000000080000000000000000000000000007fe607ddc078f11e7c423c43400000 % 00000000000000000008 % 00000000000000000000c00000000000000000000000000007fe0c4880c50931c4c64244800000 % 00000000000000000000 % 00000000000000000000c000000000000000000000000000030e084c8080392084420e47400000 % 00000000000000000000 % 00000000000000000000c000000000000000000000000000030008450080c92084423240c00000 % 00000000000000000000 % 00000000000000000000c000000000000000000000000000030008c500c519318c464644400000 % 00000000000000000000 % 00000000000000000000c000000000000000000000000000018007620078ef9e763b3be7800000 % 00000000000000000000 % 00000000000000000000fe00000000000000000000000000018000020000000000000000000000 % 00000000000000000009 % 000000000000000000003ff00000000000000000000000000180000e3f00000000000000000000 % 0000000000000000000f % 0000000000000000000000ffc0000000000000000000000000c000180000000000000000000000 % 00000000000000000000 % 000000000000000000000007ff000000000000000000000000c000000000000000000000000000 % 00000000000000000000 % 0000000000000000000000001ff80000000000000000000000c000000000000000000000000000 % 00000000000000000007 % 000000000000000000000000007fe0000000000000000000006000000000000000000000000000 % 00000000000000000009 % 0000000000000000000000000003ff800000000000000000006000000000000000000000000000 % 00000000000000000007 % 00000000000000000000000000000ffc0000000000000000006000000000000000000000000000 % 00000000000000000004 % 0000000000000000000000000000003ff000000000000000003000000000000000000000000000 % 00000000000000000000 % 00000000000000000000000000000000ffc0000000000000003000000000000000000000000000 % 00000000000000000004 % 0000000000000000000000000000000007ff000000000000003000000000000000000000000000 % 00000000000000000000 % 00000000000000000000000000000000001ff80000000000001800000000000000000000000000 % 00000000000000000000 % 0000000000000000000000000000000000007fe000000000001800000000000000000000000000 % 00000000000000000000 % 00000000000000000000000000000000000003ff80000000001800000000000000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000ffc000000000c00000000000000000000000000 % 00000000000000000000 % 00000000000000000000000000000000000000003ff00000000c00000000000000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000001ffc000000c00000000000000000000000000 % 00000000000000000000 % 00000000000000000000000000000000000000000007fe00000600c000000300000100000c0000 % 00000000000000000000 % 000000000000000000000000000000000000000000001ff8000600400000010000010000040000 % 00000000000000000001 % 0000000000000000000000000000000000000000000000ffe00600400000010000000000040000 % 00000000000000000004 % 000000000000000000000000000000000000000000000003ff0307ddc078f11edcfb6ec3c43400 % 00000000000000000000 % 0000000000000000000000000000000000000000000000000fff0c4880c50931e6413324244800 % 00000000000000000000 % 000000000000000000000000000000000000000000000000003f084c8080392042412220e47400 % 00000000000000000008 % 000000000000000000000000000000000000000000000000000008450080c92042412223240c00 % 00000000000000000000 % 000000000000000000000000000000000000000000000000000008c500c5193146412224644400 % 0000000000000000000a % 000000000000000000000000000000000000000000000000000007620078ef9e7ce3f773be7800 % 00000000000000000008 % 000000000000000000000000000000000000000000000000000000020000000040000000000000 % 00000000000000000008 % 0000000000000000000000000000000000000000000000000000000e3f00000040000000000000 % 0000000000000000000f % 0000000000000000000000000000000000000000000000000000001800000000e0000000000000 % 00000000000000000008 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000008 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 67.5 113.676] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -892 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_factor) s savemat setmatrix n 75 97.5 m 70 112.5 l gsave 0 0 0 0.176 0 B grestore n 75 107.5 m 70 112.5 l gsave 0 0 0 0.176 0 B grestore n 75 112.5 m 70 112.5 l gsave 0 0 0 0.176 0 B grestore n 75 125 m 70 112.5 l gsave 0 0 0 0.176 0 B grestore n 70 112.5 m 75 133.75 l 108.95 139.96 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 75.948 103.747] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_setpivparms) s savemat setmatrix n 70 112.5 m 75 102.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 110.634 148.493] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_calcprimals) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 110.634 141.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_calcduals) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 110.634 116.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_calccbar) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 110.634 121.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_degenout) s savemat setmatrix n 109.06 120 m 101.56 125 l gsave 0 0 0 0.176 0 B grestore n 109.06 115 m 101.56 125 l gsave 0 0 0 0.176 0 B grestore n 109.06 130 m 101.56 125 l gsave 0 0 0 0.176 0 B grestore n 109.06 140 m 101.56 125 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 110.606 136.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dseinit) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 110.606 131.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_pseinit) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 110.606 126.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_clrpivrej) s savemat setmatrix n 101.86 125 m 109.36 125 l gsave 0 0 0 0.176 0 B grestore n 101.86 125 m 109.36 135 l gsave 0 0 0 0.176 0 B grestore n 101.86 125 m 109.36 147.5 l gsave 0 0 0 0.176 0 B grestore n 70 112.5 m 73.75 141.25 l 109.33 147.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 75.938 108.619] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (glp_inv_decomp) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 75.988 113.594] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (adjust_basis) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 76.111 126.137] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (adjust_therest) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 76.017 98.535] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (luf_adjustsize) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.19 101.272] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_freebasis) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.402 96.131] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_initbasis) s savemat setmatrix n 100.6 97.5 m 105.6 95 l gsave 0 0 0 0.176 0 B grestore n 100.6 97.5 m 105.6 100 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 135 96.131] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (glp_inv_delete) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 135 101.272] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (glp_inv_create) s savemat setmatrix n 128.63 95 m 133.63 95 l gsave 0 0 0 0.176 0 B grestore n 128.63 100 m 133.63 100 l gsave 0 0 0 0.176 0 B grestore grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore %%EndDocument @endspecial 2563 5147 a(Fig)n(ur)q(e)g(1:)65 b(Call)53 b(Gra)-6 b(p)g(h)52 b(fo)-7 b(r)53 b FJ(dy_f)-6 b(actor)249 5646 y FP(A)60 b(s)n(i)s(n)n(g)n(u)l(lar)f(bas)n(is)h(can)g(occur)g (beca)-8 b(u)h(s)m(e)60 b(of)g(a)g(s)n(i)s(mpl)n(e)-5 b(x)60 b(pivot)g(a)-8 b(tte)n(mpt)59 b(o)-7 b(r)60 b(as)g(th)l(e)g(r)q (e)o(s)-8 b(u)l(lt)59 b(of)h(a)g(c)-7 b(han)n(g)n(e)58 b(i)s(n)0 5845 y(th)l(e)g(c)l(oe)l(\002)-49 b(\002c)m(ients)58 b(of)g(th)l(e)h(bas)n(is)g(beca)-8 b(u)h(s)m(e)59 b(th)l(e)f(client)g (has)h(\002xe)l(d)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(and)g(th)l(en)e(r) q(eq)l(u)l(e)o(s)-5 b(te)l(d)59 b(a)g(war)5 b(m)58 b(o)-7 b(r)0 6044 y(h)n(ot)67 b(s)-5 b(t)s(art.)108 b(T)8 b(h)l(e)67 b(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)65 b(r)q(o)-5 b(u)l(ti)s(n)n(e)67 b FJ(glp_in)m(v_decomp)f FP(d)-5 b(e)e(tec)i(ts)68 b(a)f(s)n(i)s(n)n(g) n(u)l(lar)f(bas)n(is)h(and)g(r)q(e)-7 b(po)g(rts)67 b(th)l(e)g(unpiv-)0 6243 y(ote)l(d)f(r)q(ows)f(and)h(c)l(o)-5 b(l)n(umns,)68 b(b)-8 b(u)l(t)65 b(doe)o(s)h(n)m(ot)f(a)-8 b(tte)n(mpt)66 b(to)f(\002x)h(th)l(e)g(bas)n(is.)105 b FJ(adjust_basis)66 b FP(u)-7 b(s)m(e)o(s)66 b(th)l(e)g(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)0 6443 y(r)q(e)h(po)g(rte)l(d)67 b(by)f FJ(glp_in)m(v_decomp)g FP(to)h(a)-8 b(tte)n(mpt)66 b(to)g(pa)-8 b(tc)h(h)67 b(th)l(e)f(bas)n(is,)71 b(s)-8 b(u)h(bs)i(tit)l(u)l(ti)s(n) n(g)64 b(c)l(o)-5 b(l)n(umns)66 b(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)66 b(with)0 6642 y(sla)n(c)-8 b(k)62 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i (fo)-7 b(r)63 b(th)l(e)f(s)m(e)-7 b(t)63 b(of)g(c)l(o)-5 b(l)n(umns)62 b(id)-5 b(enti\002e)l(d)62 b(as)h(s)n(i)s(n)n(g)n(u)l (lar)-10 b(.)94 b(T)8 b(his)62 b(s)m(eq)l(u)l(enc)-6 b(e)63 b(is)g(r)q(e)-7 b(pea)f(te)l(d)63 b(until)f(th)l(e)0 6841 y(bas)n(is)53 b(is)g(s)-8 b(u)j(cc)f(e)o(s)h(sfu)l(lly)53 b(fa)n(c)-5 b(to)e(r)q(e)l(d.)249 7140 y(In)72 b(th)l(e)f(larg)n(e)l(r) f(c)l(o)l(nte)-5 b(xt)71 b(of)76 b FM(D)8 b(Y)g(L)g(P)t FP(,)78 b(pa)-8 b(tc)h(hi)s(n)n(g)70 b(th)l(e)i(bas)n(is)g(is)g(th)l(e) f(l)n(eas)-5 b(t)73 b(of)f(th)l(e)f(wo)-7 b(rk.)122 b FJ(dy_f)-6 b(actor)71 b FP(will)g(call)0 7339 y FJ(adjust_ther)o(est)62 b FP(to)g(a)-6 b(dj)f(u)g(s)i(t)63 b(th)l(e)i FM(D)8 b(Y)g(L)g(P)68 b FP(da)-8 b(t)s(a)62 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s) 62 b(as)g(n)n(ec)-6 b(e)o(s)h(sary)63 b(to)e(r)q(e)l(\003)n(ec)-5 b(t)63 b(th)l(e)e(e)-5 b(xc)e(han)n(g)n(e)61 b(of)g(v)r(ar)s(i)s(a)l(b) l(l)n(e)o(s)0 7538 y(be)-7 b(tween)75 b(th)l(e)g(bas)n(ic)g(and)g(n)m (o)l(n)m(bas)n(ic)f(partitio)l(ns.)131 b(De)-7 b(pendi)s(n)n(g)74 b(o)l(n)g(th)l(e)h(p)-6 b(has)m(e,)80 b(this)75 b(can)g(i)s(ncl)n(ud)-5 b(e)75 b(u)-6 b(pda)e(t-)0 7738 y(i)s(n)n(g)69 b(th)l(e)h(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)71 b(whic)-7 b(h)69 b(mai)s(nt)s(ai)s(n)h (th)l(e)g(bas)n(is,)76 b(r)q(ecalcu)l(la)-8 b(ti)s(n)n(g)69 b(th)l(e)h(pr)s(i)s(mal)g(\()p FJ(dy_calcpr)s(im)m(als)p FP(\))g(and)g(d)-7 b(ual)0 7937 y(\()p FJ(dy_calcduals)p FP(\))67 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)72 b(r)q(ecalcu)l(la)-8 b(ti)s(n)n(g)66 b(th)l(e)h(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)67 b(c)l(os)-5 b(ts)68 b(\()p FJ(dy_calccbar)p FP(\),)i(r)q(e)o(s)m(e)-7 b(tti)s(n)n(g)67 b(th)l(e)g(DSE)g(o)-7 b(r)67 b(PSE)0 8136 y(n)m(o)-7 b(r)5 b(ms)70 b(\()p FJ(dy_dseinit)h FP(and)g FJ(dy_pseinit)p FP(,)k(r)q(e)o(s)-8 b(pec)j(tive)l(ly\),)75 b(cl)n(ear)s(i)s(n)n(g)70 b(th)l(e)g(lis)-5 b(t)71 b(of)g(v)r(ar)s(i)s (a)l(b)l(l)n(e)o(s)h(marke)l(d)e(i)s(n)n(e)l(lig)t(ib)l(l)n(e)g(fo)-7 b(r)0 8335 y(pivoti)s(n)n(g)51 b(\()p FJ(dy_clr)s(pivr)o(ej)p FP(\),)i(and)f(ba)n(c)-8 b(ki)s(n)n(g)51 b(o)-5 b(u)l(t)52 b(a)h(pe)l(rt)l(urbe)l(d)f(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(m)50 b(\()p FJ(dy_degenout)p FP(\).)249 8634 y FJ(glp_in)m(v_decomp)40 b FP(will)g(a)l(bo)-7 b(rt)41 b(an)g(a)-8 b(tte)n(mpt)40 b(to)h(fa)n(c)-5 b(to)e(r)42 b(th)l(e)e(bas)n(is)i(if)f(th)l(e)g(curr)q (ent)f(pivot)h(s)m(e)l(l)n(ec)-5 b(tio)l(n)41 b(parame)-7 b(te)l(rs)0 8834 y(g)t(ive)48 b(r)s(is)m(e)g(to)g(n)n(ume)l(r)s(ical)f (i)s(ns)-5 b(t)s(a)l(bility)47 b(\(d)-5 b(e)e(tec)i(te)l(d)48 b(as)h(e)-5 b(xc)f(e)o(s)h(s)n(ive)49 b(gr)q(owth)e(i)s(n)g(th)l(e)h (magnit)l(ud)-5 b(e)46 b(of)i(th)l(e)f(c)l(oe)l(\002)-49 b(\002c)m(ients)0 9033 y(of)63 b(th)l(e)h(fa)n(c)-5 b(to)e(r)q(e)l(d)63 b(bas)n(is\).)98 b FJ(dy_f)-6 b(actor)63 b FP(will)g(make)g(r)q(e)-7 b(pea)f(te)l(d)64 b(tr)s(ie)o(s)g(to)g(fa)n(c)-5 b(to)e(r)63 b(th)l(e)g(bas)n(is,)k(tighteni)s(n)n(g)60 b(th)l(e)j(pivot)0 9232 y(s)m(e)l(l)n(ec)-5 b(tio)l(n)71 b(parame)-7 b(te)l(rs)71 b(be)l(fo)-7 b(r)q(e)71 b(ea)n(c)-7 b(h)72 b(a)-8 b(tte)n(mpt.)119 b(It)72 b(will)e(a)-6 b(dm)s(it)71 b(fail)n(ur)q(e)g(o)l(nly)f(if)h(th) l(e)f(n)n(ume)l(r)s(ical)h(i)s(ns)-5 b(t)s(a)l(bility)0 9431 y(r)q(e)n(mai)s(ns)48 b(afte)l(r)h(th)l(e)g(pivot)f(s)m(e)l(l)n (ec)-5 b(tio)l(n)49 b(to)-5 b(l)n(e)l(ranc)f(e)o(s)49 b(ha)-7 b(ve)48 b(been)h(tighten)n(e)l(d)e(as)j(m)l(u)-5 b(c)e(h)48 b(as)i(pos)-5 b(s)n(ib)l(l)n(e,)50 b(s)n(o)e(tha)-8 b(t)48 b(ea)n(c)-7 b(h)0 9631 y(pivot)52 b(c)-7 b(h)n(os)m(en)53 b(is)g(th)l(e)f(max)10 b(i)s(m)l(um)53 b(c)l(oe)l(\002)-49 b(\002c)m(ient)51 b(r)q(e)n(mai)s(ni)s(n)n(g)g(i)s(n)i(th)l(e)f (unpivote)l(d)f(po)-7 b(rtio)l(n)52 b(of)h(th)l(e)f(bas)n(is.)3771 11400 y(23)p eop end %%Page: 24 27 TeXDict begin 24 26 bop 0 466 a Fu(7)-35 b(.3)198 b(Pivotin)-7 b(g)0 885 y FP(Pivoti)s(n)n(g)49 b(is)i(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)50 b(by)g FJ(dy_piv)l(ot)p FP(,)g(whic)-7 b(h)50 b(c)l(o)l(n\002r)5 b(ms)49 b(th)l(e)h(n)n(ume)l(r)s(ical)h(s)-5 b(t)s(a)l(bility)50 b(of)g(th)l(e)g(pivot)h(e)l(l)n(e)n(ment)f(and)0 1084 y(calls)j FJ(glp_in)m(v_update)f FP(to)g(pivot)h(th)l(e)f(bas)n (is.)249 1383 y(T)r(o)57 b(be)f(j)-7 b(udg)n(e)l(d)55 b(n)n(ume)l(r)s(ically)g(s)-5 b(t)s(a)l(b)l(l)n(e,)58 b(a)f(pr)q(os)-8 b(pec)j(tive)56 b(pivot)g(c)l(oe)l(\002)-49 b(\002c)m(ient)p 5355 1283 117 7 v 57 w FG(a)5472 1408 y Fz(i)23 b(j)5630 1383 y FP(m)l(u)-7 b(s)i(t)56 b(e)-5 b(xc)f(ee)l(d)57 b(th)l(e)f(pr)q(od)-7 b(u)i(c)g(t)55 b(of)0 1583 y(th)l(e)k(GL)s(PK)g(s)-5 b(t)s(a)l(bility)59 b(m)l(u)l(ltiplie)l(r)f(\()p FJ(luf)-7 b(.piv_tol)p FP(\),)60 b(th)l(e)j FM(D)8 b(Y)g(L)g(P)66 b FP(pivot)59 b(s)m(e)l(l)n(ec)-5 b(tio)l(n)59 b(m)l(u)l(ltiplie)l(r)f(\()p FJ(dy_tols)s(.piv)l(ot)p FP(\),)i(and)g(th)l(e)0 1782 y(max)10 b(i)s(m)l(um)62 b(e)l(l)n(e)n(ment)g(i)s(n)g(th)l(e)f(transfo)-7 b(r)5 b(me)l(d)62 b(c)l(o)-5 b(l)n(umn)p 3830 1681 V 64 w FG(a)3959 1807 y Fz(j)4050 1782 y FP(=)54 b FG(B)4344 1722 y FA(\0141)4497 1782 y FG(a)4615 1807 y Fz(j)4721 1782 y FP(\(pr)s(i)s(mal)63 b(s)n(i)s(mpl)n(e)-5 b(x\))62 b(o)-7 b(r)63 b(r)q(ow)p 6679 1681 V 64 w FG(a)6795 1807 y Fz(i)6892 1782 y FP(=)47 b FH(1)7138 1807 y Fz(i)7196 1782 y FG(N)80 b FP(\(d)-7 b(ual)0 1981 y(s)n(i)s(mpl)n(e)i(x\).)122 b(St)s(andar)q(d)70 b(d)-5 b(e)l(fa)d(u)l(lts)71 b(i)s(n)k FM(D)8 b(Y)g(L)g(P)78 b FP(ar)q(e)72 b(5)37 b FF(\264)h FP(10)3867 1921 y FA(\0142)4088 1981 y FP(fo)-7 b(r)72 b(th)l(e)f(GL)s(PK)f(s)-5 b(t)s(a)l(bility)71 b(m)l(u)l(ltiplie)l(r)f(and)h(1)38 b FF(\264)f FP(10)7650 1921 y FA(\0145)0 2180 y FP(fo)-7 b(r)77 b(th)l(e)j FM(D)8 b(Y)g(L)g(P)82 b FP(pivot)76 b(s)m(e)l(l)n(ec)-5 b(tio)l(n)76 b(m)l(u)l(ltiplie)l(r)-9 b(,)81 b(s)n(o)76 b(tha)-8 b(t)76 b(th)l(e)g(pivot)g(c)l(oe)l(\002)-49 b(\002c)m(ient)76 b(is)g(r)q(eq)l(uir)q(e)l(d)g(to)h(sa)-8 b(tisfy)7353 2173 y FF(|)p 7386 2080 V 7388 2180 a FG(a)7502 2205 y Fz(i)23 b(j)7604 2173 y FF(|)7699 2180 y FP(>)0 2380 y(\(5)39 b FF(\264)g FP(10)528 2319 y FA(\0147)677 2380 y FP(\)\(max)1123 2405 y Fz(k)1232 2373 y FF(|)p 1265 2279 V 1267 2380 a FG(a)1382 2405 y Fz(k)21 b(j)1518 2373 y FF(|)1559 2380 y FP(\))77 b(\(pr)s(i)s(mal)f(s)n(i)s(mpl)n(e)-5 b(x\))77 b(o)-7 b(r)3326 2373 y FF(|)p 3359 2279 V 3361 2380 a FG(a)3476 2405 y Fz(i)23 b(j)3577 2373 y FF(|)3672 2380 y FP(>)53 b(\(5)38 b FF(\264)i FP(10)4353 2319 y FA(\0147)4502 2380 y FP(\)\(max)4948 2405 y Fz(k)5057 2373 y FF(|)p 5090 2279 V 5092 2380 a FG(a)5206 2405 y Fz(i)11 b(k)5336 2373 y FF(|)5377 2380 y FP(\))77 b(\(d)-7 b(ual)75 b(s)n(i)s(mpl)n(e)-5 b(x\).)136 b(T)8 b(h)l(e)76 b(r)q(o)-5 b(u)l(ti)s(n)n(e)0 2579 y FJ(dy_chkpiv)50 b FP(is)g(s)-8 b(u)i(p)e(plie)l(d)48 b(to)i(pe)l(r)5 b(fo)-7 b(r)5 b(m)50 b(this)f(te)o(s)-5 b(t,)51 b(and)e(is)h(u)-7 b(s)m(e)l(d)50 b(as)g(a)h(q)l(uali\002ca)-8 b(tio)l(n)48 b(te)o(s)-5 b(t)50 b(by)f(th)l(e)h(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)49 b(whic)-7 b(h)0 2778 y(s)m(e)l(l)n(ec)i(t)82 b(th)l(e)e(l)n(ea)-7 b(vi)s(n)n(g)80 b(pr)s(i)s(mal)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)f(i)s(n)g (pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x)82 b(and)f(th)l(e)g(ente)l(r)s (i)s(n)n(g)e(pr)s(i)s(mal)j(v)r(ar)s(i)s(a)l(b)l(l)n(e)f(i)s(n)g(d)-7 b(ual)0 2977 y(s)n(i)s(mpl)n(e)i(x.)66 b(T)8 b(h)l(e)53 b(c)-7 b(h)l(ec)f(k)52 b(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)53 b(i)s(n)f FJ(dy_piv)l(ot)g FP(s)-8 b(h)n(o)j(u)l(ld)52 b(n)m(ot)g(fail,)g(b)-8 b(u)l(t)52 b(is)h(r)q(e)-7 b(t)s(ai)s(n)n(e)l (d)54 b(as)f(a)g(pr)q(eca)-8 b(u)l(tio)l(n.)249 3276 y(If)p 416 3176 V 60 w FG(a)533 3301 y Fz(i)23 b(j)692 3276 y FP(is)58 b(r)q(ej)l(ec)-5 b(te)l(d)58 b(as)h(n)n(ume)l(r)s (ically)e(uns)-5 b(t)s(a)l(b)l(l)n(e,)59 b(th)l(e)e(pivot)h(a)-8 b(tte)n(mpt)57 b(is)h(a)l(bo)-7 b(rte)l(d.)81 b(In)58 b(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x,)60 b(th)l(e)0 3476 y(ente)l(r)s(i)s(n)n(g)51 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)58 b FG(x)1520 3501 y Fz(j)1617 3476 y FP(will)51 b(be)i(pla)n(c)-6 b(e)l(d)52 b(o)l(n)g(th)l(e)g(r)q(ej)l(ec)-5 b(te)l(d)52 b(pivot)g(lis)-5 b(t.)66 b(Fo)-7 b(r)52 b(d)-7 b(ual)52 b(s)n(i)s(mpl)n(e)-5 b(x,)53 b(th)l(e)f(l)n(ea)-7 b(vi)s(n)n(g)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)5 3675 y FG(x)97 3700 y Fz(i)213 3675 y FP(is)66 b(pla)n(c)-6 b(e)l(d)66 b(o)l(n)f(th)l(e)h(r)q (ej)l(ec)-5 b(te)l(d)66 b(pivot)f(lis)-5 b(t.)105 b(Rec)l(ove)l(ry)66 b(fr)q(o)n(m)g(pivoti)s(n)n(g)e(pr)q(o)-8 b(b)l(l)n(e)n(ms)65 b(and)h(th)l(e)f(handli)s(n)n(g)f(of)i(th)l(e)0 3874 y(r)q(ej)l(ec)-5 b(te)l(d)53 b(pivot)f(lis)-5 b(t)53 b(ar)q(e)g(discu)-7 b(s)i(s)m(e)l(d)53 b(i)s(n)g(\24712.2.)249 4173 y(A)63 b(pivot)g(can)g(als)n(o)g(fail)g(if)g(it)g(r)q(e)o(s)-8 b(u)l(lts)62 b(i)s(n)h(a)h(s)n(i)s(n)n(g)n(u)l(lar)e(bas)n(is)h(o)-7 b(r)64 b(if)f(th)l(e)f(bas)n(is)i(r)q(e)-7 b(pr)q(e)o(s)m(ent)s(a)f (tio)l(n)62 b(runs)h(o)-5 b(u)l(t)62 b(of)0 4372 y(s)-8 b(pa)n(c)i(e.)102 b(T)8 b(h)l(e)64 b(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n)64 b(of)h(GL)s(PK)f(r)q(eq)l(uir)q(e)o(s)h(tha)-8 b(t)64 b(th)l(e)g(bas)n(is)i(be)f(r)q(e)l(l)n(oa)-6 b(d)h(e)l(d)65 b(and)f(fa)n(c)-5 b(to)e(r)q(e)l(d)65 b(to)g(r)q(ec)l(ove)l(r)0 4571 y(fr)q(o)n(m)53 b(th)l(e)o(s)m(e)g(e)l(rr)q(o)-7 b(rs;)53 b(this)f(is)h(o)-7 b(r)q(c)g(h)l(e)o(s)i(tra)d(te)l(d)53 b(by)f FJ(dy_duenna)i FP(and)e(discu)-7 b(s)i(s)m(e)l(d)53 b(i)s(n)g(\24712.2.)249 4870 y(Note)59 b(tha)-8 b(t)59 b FJ(glp_in)m(v_update)f FP(e)-5 b(xpec)g(ts)59 b(to)h(be)f(s)-8 b(u)i(p)e(plie)l(d)58 b(with)65 b FG(L)4613 4810 y FA(\0141)4765 4870 y FG(a)4883 4895 y Fz(j)4986 4870 y FP(as)60 b(a)f(hidd)-5 b(en)58 b(parame)-7 b(te)l(r)d(.)85 b(GL)s(PK)58 b(pr)q(o-)0 5070 y(vid)-5 b(e)o(s)79 b(th)l(e)g(ca)-6 b(pa)l(bility)78 b(to)h(c)l(o)l(ntr)q(o)-5 b(l)77 b(wh)l(e)-7 b(th)l(e)l(r)78 b(a)h(call)g(to)g FJ(glp_in)m(v_ftr)m(an)e FP(s)m(e)-7 b(ts)80 b(this)e(hidd)-5 b(en)78 b(parame)-7 b(te)l(r)d(.)144 b(T)8 b(his)0 5269 y(ca)-6 b(pa)l(bility)52 b(is)h(e)-5 b(xpos)m(e)l(d)52 b(to)h(clients)f(as)i(th)l(e)e(s)m(ec)l(o)l(nd)g (parame)-7 b(te)l(r)53 b(to)g FJ(dy_ftr)m(an)p FP(.)3771 11400 y(24)p eop end %%Page: 25 28 TeXDict begin 25 27 bop 0 475 a FL(8)239 b(Accura)l(cy)78 b(Ch)-11 b(ec)f(ks)79 b(an)-7 b(d)80 b(Maintenan)-7 b(c)f(e)0 959 y FP(Pr)s(i)s(mal)64 b(and)f(d)-7 b(ual)63 b(a)n(ccura)n(cy)g(c)-7 b(h)l(ec)f(ks,)66 b(pr)s(i)s(mal)e(and)f(d)-7 b(ual)63 b(feas)n(ibility)g(c)-7 b(h)l(ec)f(ks,)67 b(and)c(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)63 b(of)g(th)l(e)h(bas)n(is)0 1158 y(can)53 b(be)g(r)q(eq)l(u)l(e)o(s)-5 b(te)l(d)53 b(thr)q(o)-5 b(u)l(gh)50 b(th)l(e)j(r)q(o)-5 b(u)l(ti)s(n)n(e)52 b FJ(dy_accchk)p FP(;)g(ea)n(c)-7 b(h)53 b(a)n(c)-5 b(tio)l(n)52 b(can)h(be)f(r)q(eq)l(u)l(e)o(s)-5 b(te)l(d)53 b(s)m(e)-7 b(para)f(te)l(ly)-17 b(.)253 1457 y FM(D)8 b(Y)g(L)g(P)64 b FP(r)q(e)l(fa)n(c)-5 b(to)e(rs)58 b(th)l(e)g(bas)n(is)h(and)f(pe)l(r) 5 b(fo)-7 b(r)5 b(ms)58 b(a)n(ccura)n(cy)g(c)-7 b(h)l(ec)f(ks)58 b(a)-8 b(t)58 b(r)q(e)-5 b(g)n(u)l(lar)58 b(i)s(nte)l(rv)r(als,)h(bas)m (e)l(d)f(o)l(n)f(a)i(c)l(o)-5 b(unt)0 1656 y(of)84 b(pivots)f(whic)-7 b(h)82 b(a)n(c)-5 b(t)l(ually)83 b(c)-7 b(han)n(g)n(e)81 b(th)l(e)j(bas)n(is.)158 b(By)83 b(d)-5 b(e)l(fa)d(u)l(lt,)90 b(pr)s(i)s(mal)84 b(and)f(d)-7 b(ual)83 b(a)n(ccura)n(cy)f(c)-7 b(h)l(ec)f(ks)84 b(ar)q(e)0 1855 y(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)49 b(a)-8 b(t)48 b(twic)-6 b(e)49 b(this)f(fr)q(eq)l(u)l(ency) -17 b(.)64 b(Dur)s(i)s(n)n(g)47 b(p)-6 b(has)m(e)49 b(II)g(of)g(th)l(e) f(pr)s(i)s(mal)h(and)f(d)-7 b(ual)48 b(s)n(i)s(mpl)n(e)-5 b(x)50 b(algo)-7 b(r)s(ithms,)49 b(th)l(e)0 2054 y(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)69 b(feas)n(ibility)g(c)-7 b(h)l(ec)f(k)69 b(is)h(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)69 b(fo)-5 b(ll)n(owi)s(n)n(g)67 b(ea)n(c)-7 b(h)70 b(a)n(ccura)n(cy)e(c) -7 b(h)l(ec)f(k.)115 b FJ(dy_duenna)71 b FP(tra)n(c)-8 b(ks)69 b(th)l(e)0 2254 y(pivot)52 b(c)l(o)-5 b(unt)52 b(and)h(r)q(eq)l(u)l(e)o(s)-5 b(ts)53 b(c)-7 b(h)l(ec)f(ks)53 b(and)f(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)52 b(a)-8 b(t)52 b(th)l(e)h(sc)-7 b(h)l(e)l(d)g(u)l(l)n(e)l(d)52 b(i)s(nte)l(rv)r(als.) 249 2553 y FJ(dy_accchk)76 b FP(u)-7 b(s)m(e)o(s)77 b FJ(dy_f)-6 b(actor)76 b FP(to)h(fa)n(c)-5 b(to)e(r)76 b(th)l(e)g(bas)n(is)h(and)f(r)q(ecalcu)l(la)-8 b(te)76 b(th)l(e)g(pr)s(i)s(mal)h(and)f(d)-7 b(ual)75 b(v)r(ar)s(i)s(a)l(b)l(l) n(e)o(s.)0 2752 y(Wh)l(en)g(th)l(e)h(bas)n(is)h(has)f(been)f(fa)n(c)-5 b(to)e(r)q(e)l(d)76 b(and)g(has)g(pas)-5 b(s)m(e)l(d)76 b(th)l(e)g(a)n(ccura)n(cy)f(c)-7 b(h)l(ec)f(ks,)82 b(th)l(e)75 b(r)q(o)-5 b(u)l(ti)s(n)n(e)76 b FJ(gr)m(oomba-)0 2951 y(sis)69 b FP(c)-7 b(h)l(ec)f(ks)70 b(tha)-8 b(t)68 b(th)l(e)h(s)-5 b(t)s(a)d(t)l(u)h(s)70 b(of)f(th)l(e)g(bas)n(ic)h(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s)g(ma)-8 b(tc)h(h)l(e)o(s)69 b(th)l(eir)g(v)r(al)n(u)l(e)o(s) g(and)g(make)o(s)h(any)e(n)n(ec)-6 b(e)o(s)h(sary)0 3150 y(a)f(dj)f(u)g(s)i(tments.)249 3449 y(Fail)n(ur)q(e)47 b(of)g(an)f(a)n(ccura)n(cy)g(c)-7 b(h)l(ec)f(k)46 b(will)g(ca)-8 b(u)h(s)m(e)47 b(th)l(e)f(bas)n(is)h(to)g(be)g(r)q(e)l(fa)n(c)-5 b(to)e(r)q(e)l(d.)63 b(Fail)n(ur)q(e)47 b(of)f(an)h(a)n(ccura)n(cy)e(c) -7 b(h)l(ec)f(k)0 3649 y(i)s(mme)l(di)s(a)g(te)l(ly)63 b(afte)l(r)g(r)q(e)l(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)62 b(will)g(ca)-8 b(u)h(s)m(e)64 b(th)l(e)f(curr)q(ent)g(pivot)g(s)m(e)l (l)n(ec)-5 b(tio)l(n)62 b(to)-5 b(l)n(e)l(ranc)f(e)o(s)64 b(to)f(be)h(tighten)n(e)l(d)e(by)0 3848 y(o)l(n)n(e)49 b(i)s(nc)-8 b(r)q(e)n(ment)49 b(be)l(fo)-7 b(r)q(e)50 b(an)m(oth)l(e)l(r)e(a)-8 b(tte)n(mpt)48 b(is)i(ma)-6 b(d)h(e.)65 b FJ(dy_accchk)49 b FP(will)g(r)q(e)-7 b(pea)f(t)50 b(this)f(cycl)n(e)h(until)f(th)l(e)g(a)n(ccura)n(cy)0 4047 y(c)-7 b(h)l(ec)f(ks)71 b(ar)q(e)h(sa)-8 b(tis\002e)l(d)71 b(o)-7 b(r)71 b(th)l(e)l(r)q(e')-5 b(s)70 b(n)m(o)h(mo)-7 b(r)q(e)71 b(r)q(oo)n(m)h(to)f(tighten)e(th)l(e)i(pivot)g(s)m(e)l(l)n (ec)-5 b(tio)l(n)71 b(parame)-7 b(te)l(rs.)121 b(On)71 b(th)l(e)0 4246 y(oth)l(e)l(r)49 b(hand,)g(ea)n(c)-7 b(h)49 b(ti)s(me)h(tha)-8 b(t)49 b(an)h(a)n(ccura)n(cy)e(c)-7 b(h)l(ec)f(k)50 b(is)g(pas)-5 b(s)m(e)l(d)49 b(with)n(o)-5 b(u)l(t)48 b(r)q(e)l(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)49 b(th)l(e)g(bas)n(is,)i(th)l(e)e(curr)q(ent)0 4446 y(pivot)62 b(s)m(e)l(l)n(ec)-5 b(tio)l(n)62 b(to)-5 b(l)n(e)l(ranc)f(e)o(s)63 b(ar)q(e)g(l)n(oos)m(en)n(e)l(d)g(by)f(o)l(n)n(e)g(i)s(nc)-8 b(r)q(e)n(ment,)64 b(to)e(a)h(\003)n(oo)-7 b(r)63 b(g)t(iven)f(by)g(th) l(e)g(m)s(i)s(ni)s(m)l(um)g(pivot)0 4645 y(s)m(e)l(l)n(ec)-5 b(tio)l(n)52 b(to)-5 b(l)n(e)l(ranc)f(e.)249 4944 y(T)8 b(h)l(e)70 b(m)s(i)s(ni)s(m)l(um)f(pivot)h(s)m(e)l(l)n(ec)-5 b(tio)l(n)69 b(to)-5 b(l)n(e)l(ranc)f(e)70 b(is)h(r)q(e)o(s)m(e)-7 b(t)70 b(to)g(th)l(e)g(l)n(oos)m(e)o(s)-5 b(t)70 b(pos)-5 b(s)n(ib)l(l)n(e)70 b(s)m(e)-7 b(tti)s(n)n(g)69 b(a)-8 b(t)70 b(th)l(e)g(s)-5 b(t)s(art)70 b(of)0 5143 y(ea)n(c)-7 b(h)76 b(s)n(i)s(mpl)n(e)-5 b(x)77 b(p)-6 b(has)m(e.)135 b(If)77 b FJ(gr)m(oombasis)f FP(d)-5 b(e)e(tec)i(ts)77 b(and)f(c)l(o)-7 b(rr)q(ec)i(ts)76 b(majo)-7 b(r)77 b(s)-5 b(t)s(a)d(t)l(u)h(s)76 b(e)l(rr)q(o)-7 b(rs)77 b(\(i)s(ndica)-8 b(ti)s(n)n(g)74 b(tha)-8 b(t)75 b(an)0 5342 y(una)n(cc)-6 b(e)f(pt)s(a)l(b)l(l)n(e)66 b(amo)-5 b(unt)64 b(of)i(i)s(na)n(ccura)n (cy)e(a)n(ccum)l(u)l(la)-8 b(te)l(d)65 b(s)n(i)s(nc)-6 b(e)66 b(th)l(e)f(bas)n(is)h(was)g(las)-5 b(t)66 b(fa)n(c)-5 b(to)e(r)q(e)l(d\),)68 b(it)e(will)e(rais)m(e)0 5541 y(th)l(e)k(m)s(i)s(ni)s(m)l(um)f(pivot)h(s)m(e)l(l)n(ec)-5 b(tio)l(n)67 b(to)-5 b(l)n(e)l(ranc)f(e.)111 b(Si)s(m)s(ilarly)-17 b(,)71 b(if)d(th)l(e)f(pr)s(i)s(mal)i(p)-6 b(has)m(e)67 b(I)i(o)-8 b(bj)l(ec)j(tive)67 b(is)h(fo)-5 b(und)67 b(to)h(be)0 5741 y(i)s(nc)l(o)-7 b(rr)q(ec)i(t,)68 b(o)-7 b(r)66 b(pr)s(i)s(mal)f(o)-7 b(r)65 b(d)-7 b(ual)65 b(feas)n(ibility)f (is)h(l)n(os)-5 b(t)66 b(wh)l(en)d(a)-8 b(tte)n(mpti)s(n)n(g)63 b(to)i(ve)l(r)s(ify)g(an)g(o)-5 b(pti)s(mal)65 b(s)n(o)-5 b(l)n(u)l(tio)l(n,)67 b(th)l(e)0 5940 y(curr)q(ent)52 b(and)g(m)s(i)s(ni)s(m)l(um)g(pivot)h(s)m(e)l(l)n(ec)-5 b(tio)l(n)52 b(to)-5 b(l)n(e)l(ranc)f(e)o(s)53 b(will)f(be)h(rais)m(e)l (d)f(be)l(fo)-7 b(r)q(e)53 b(r)q(e)-7 b(t)l(ur)5 b(ni)s(n)n(g)50 b(to)j(s)n(i)s(mpl)n(e)-5 b(x)53 b(pivots.)0 6139 y(Rais)n(i)s(n)n(g)67 b(th)l(e)h(m)s(i)s(ni)s(m)l(um)g(pivot)h(s)m(e)l(l)n(ec)-5 b(tio)l(n)67 b(to)-5 b(l)n(e)l(ranc)f(e)69 b(pr)q(ovid)-5 b(e)o(s)69 b(l)n(o)l(n)n(g-te)l(r)5 b(m)67 b(c)l(o)l(ntr)q(o)-5 b(l)67 b(\(fo)-7 b(r)69 b(th)l(e)f(d)-7 b(ura)f(tio)l(n)66 b(of)j(a)0 6338 y(s)n(i)s(mpl)n(e)-5 b(x)53 b(p)-6 b(has)m(e\))53 b(ove)l(r)g(r)q(e)l(d)-7 b(u)i(c)g(tio)l(n)51 b(i)s(n)h(th)l(e)h(curr)q (ent)f(pivot)g(s)m(e)l(l)n(ec)-5 b(tio)l(n)52 b(to)-5 b(l)n(e)l(ranc)f(e.)249 6637 y(T)8 b(h)l(e)54 b(pr)s(i)s(mal)g(a)n (ccura)n(cy)f(c)-7 b(h)l(ec)f(k)53 b(is)63 b FG(B)9 b(x)2914 6577 y Fz(B)3051 6637 y FP(=)44 b FG(b)37 b FP(\014)j FG(N)22 b(x)3725 6577 y Fz(N)3829 6637 y FP(.)69 b(Co)n(mpar)s(is)n(o)l (ns)53 b(ar)q(e)h(ma)-6 b(d)h(e)54 b(agai)s(ns)-5 b(t)53 b(th)l(e)h(scal)n(e)l(d)g(to)-5 b(l)n(e)l(r)11 b(-)0 6837 y(anc)-6 b(e)53 b FE(k)r FG(b)t FE(k)705 6894 y Fl(1)764 6837 y FP(\()p FJ(dy)p FP(_)q FJ(tols)r FP(.)r FJ(pchk)n FP(\).)65 b(T)r(o)53 b(pas)-5 b(s)53 b(th)l(e)g(pr)s(i)s(mal) g(a)n(ccura)n(cy)f(c)-7 b(h)l(ec)f(k,)52 b(it)h(m)l(u)-7 b(s)i(t)53 b(be)g(tha)-8 b(t)2393 7208 y FE(k)p FP(\()r FG(b)36 b FP(\014)k FG(N)22 b(x)3061 7139 y Fz(N)3166 7208 y FP(\))32 b(\014)41 b FG(B)9 b(x)3630 7139 y Fz(B)3725 7208 y FE(k)3812 7265 y Fl(1)3912 7208 y FF(\243)42 b FE(k)r FG(b)t FE(k)4325 7265 y Fl(1)4384 7208 y FP(\()p FJ(dy)p FP(_)p FJ(tols)r FP(.)r FJ(pchk)o FP(\))249 7658 y(T)8 b(h)l(e)83 b(d)-7 b(ual)83 b(a)n(ccura)n(cy)f(c)-7 b(h)l(ec)f(k)83 b(is)g FG(y)14 b(B)58 b FP(=)e FG(c)3174 7597 y Fz(B)3269 7658 y FP(.)157 b(Co)n(mpar)s(is)n(o)l(ns)83 b(ar)q(e)g(ma)-6 b(d)h(e)84 b(agai)s(ns)-5 b(t)83 b(th)l(e)g(scal)n(e)l (d)h(to)-5 b(l)n(e)l(ranc)f(e)0 7857 y FE(k)r FG(c)7 b FE(k)263 7914 y Fl(1)322 7857 y FP(\()p FJ(dy)p FP(_)q FJ(tols)r FP(.)r FJ(dchk)o FP(\).)65 b(T)r(o)53 b(pas)-5 b(s)53 b(th)l(e)f(d)-7 b(ual)52 b(a)n(ccura)n(cy)g(c)-7 b(h)l(ec)f(k,)53 b(it)g(m)l(u)-7 b(s)i(t)53 b(be)f(tha)-8 b(t)2728 8228 y FE(k)r FG(c)2912 8159 y Fz(B)3038 8228 y FP(\014)31 b FG(y)14 b(B)s FE(k)3493 8285 y Fl(1)3594 8228 y FF(\243)42 b FE(k)r FG(c)7 b FE(k)3990 8285 y Fl(1)4049 8228 y FP(\()p FJ(dy)p FP(_)p FJ(tols)r FP(.)r FJ(dchk)o FP(\))249 8678 y(T)h(h)l(e)87 b(pr)s(i)s(mal)g(feas)n (ibility)f(c)-7 b(h)l(ec)f(k)87 b(is)i FG(l)74 b FF(\243)61 b FG(x)71 b FF(\243)59 b FG(u)13 b FP(.)167 b(Fo)-7 b(r)87 b(ea)n(c)-7 b(h)87 b(v)r(ar)s(i)s(a)l(b)l(l)n(e,)96 b(it)87 b(m)l(u)-7 b(s)i(t)87 b(be)g(tru)l(e)g(tha)-8 b(t)91 b FG(x)7302 8703 y Fz(j)7403 8678 y FF(\263)58 b FG(l)7613 8703 y Fz(j)7700 8678 y FP(\014)0 8877 y(\()p FJ(dy)p FP(_)p FJ(tols)r FP(.)r FJ(pf)m(eas)o FP(\)\(1)39 b(+)1392 8870 y FF(|)1427 8877 y FG(l)1488 8902 y Fz(j)1533 8870 y FF(|)1574 8877 y FP(\))79 b(and)k FG(x)2200 8902 y Fz(j)2296 8877 y FF(\243)55 b FG(u)2560 8902 y Fz(j)2644 8877 y FP(+)39 b(\()p FJ(dy)p FP(_)p FJ(tols)r FP(.)r FJ(pf)m(eas)o FP(\)\(1)g(+)4175 8870 y FF(|)4210 8877 y FG(u)4328 8902 y Fz(j)4373 8870 y FF(|)4414 8877 y FP(\).)141 b(In)78 b(th)l(e)g(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n,)82 b(o)l(nly)77 b(th)l(e)h(bas)n(ic)0 9076 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)54 b(ar)q(e)f(a)n(c)-5 b(t)l(ually)52 b(te)o(s)-5 b(te)l(d;)53 b(n)m(o)l(n)m(bas)n(ic)e(v)r (ar)s(i)s(a)l(b)l(l)n(e)o(s)j(ar)q(e)f(as)-5 b(s)d(ume)l(d)53 b(to)g(be)g(withi)s(n)e(bo)-5 b(und)52 b(as)h(an)g(i)s(nv)r(ar)s(i)s (ant)0 9275 y(pr)q(o)-5 b(pe)l(rty)52 b(of)h(th)l(e)f(s)n(i)s(mpl)n(e) -5 b(x)53 b(algo)-7 b(r)s(ithm.)65 b FJ(dy)p FP(_)p FJ(tols)r FP(.)r FJ(pf)m(eas)52 b FP(is)h(scal)n(e)l(d)g(fr)q(o)n(m)g FJ(dy_tols)s(.zer)m(o)g FP(as)1271 9734 y FJ(dy)p FP(_)q FJ(tols)r FP(.)r FJ(pf)m(eas)40 b FP(=)h(m)s(i)s(n\(1)r(,)25 b(l)n(og)3222 9500 y FC(\022)3364 9613 y FE(k)5 b FG(x)3554 9638 y Fz(B)3648 9613 y FE(k)3735 9670 y Fl(1)p 3364 9696 431 7 v 3427 9729 a FE(p)p 3571 9729 162 7 v 3573 9855 a FG(m)3815 9500 y FC(\023)3937 9734 y FP(\)\()p FJ(dy)p FP(_)p FJ(tols)r FP(.)r FJ(zer)m(o)n FP(\)\()p FJ(dy)p FP(_)p FJ(tols)r FP(.)r FJ(pf)m(eas)p FP(_)o FJ(scale)p FP(\))r(.)249 10301 y(T)j(h)l(e)54 b(d)-7 b(ual)54 b(feas)n(ibility)g(c)-7 b(h)l(ec)f(k)54 b(is)p 2541 10200 90 7 v 57 w FG(c)c FP(=)43 b FG(c)2910 10240 y Fz(N)3047 10301 y FP(\014)31 b FG(y)13 b(N)71 b FP(of)54 b(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)55 b(s)n(ign.)69 b(Fo)-7 b(r)55 b(ea)n(c)-7 b(h)55 b(v)r(ar)s(i)s(a)l(b)l(l)n(e,)g(it)f (m)l(u)-7 b(s)i(t)55 b(be)f(tru)l(e)0 10500 y(tha)-8 b(t)p 375 10399 V 53 w FG(c)478 10525 y Fz(j)564 10500 y FF(\243)41 b FJ(dy)p FP(_)q FJ(tols)r FP(.)r FJ(df)m(eas)51 b FP(fo)-7 b(r)57 b FG(x)2084 10525 y Fz(j)2180 10500 y FP(n)m(o)l(n)m(bas)n(ic)51 b(a)-8 b(t)53 b FG(u)3275 10525 y Fz(j)3372 10500 y FP(and)p 3732 10399 V 53 w FG(c)3835 10525 y Fz(j)3921 10500 y FF(\263)41 b FP(\014)p FJ(dy)p FP(_)p FJ(tols)r FP(.)r FJ(df)m(eas)52 b FP(fo)-7 b(r)57 b FG(x)5541 10525 y Fz(j)5637 10500 y FP(n)m(o)l(n)m(bas)n(ic)50 b(a)-8 b(t)54 b FG(l)6675 10525 y Fz(j)6720 10500 y FP(.)65 b FJ(dy)p FP(_)q FJ(tols)r FP(.)r FJ(df)m(eas)3771 11400 y FP(25)p eop end %%Page: 26 29 TeXDict begin 26 28 bop 0 466 a FP(is)53 b(scal)n(e)l(d)g(fr)q(o)n(m)g FJ(dy_tols)s(.cost)g FP(as)1275 928 y FJ(dy)p FP(_)p FJ(tols)r FP(.)r FJ(df)m(eas)41 b FP(=)g(m)s(i)s(n\(1)r(,)25 b(l)n(og)3226 694 y FC(\022)3369 806 y FE(k)o FG(y)3558 831 y Fz(k)3642 806 y FE(k)3729 863 y Fl(1)p 3369 890 420 7 v 3426 923 a FE(p)p 3570 923 162 7 v 3572 1049 a FG(m)3808 694 y FC(\023)3930 928 y FP(\)\()p FJ(dy)p FP(_)p FJ(tols)r FP(.)r FJ(cost)n FP(\)\()p FJ(dy)p FP(_)p FJ(tols)r FP(.)r FJ(df)m(eas)p FP(_)o FJ(scale)p FP(\))r(.)3771 11400 y(26)p eop end %%Page: 27 30 TeXDict begin 27 29 bop 0 475 a FL(9)239 b(Scalin)-8 b(g)4 959 y FM(D)8 b(Y)g(L)g(P)63 b FP(pr)q(ovid)-5 b(e)o(s)58 b(th)l(e)f(ca)-6 b(pa)l(bility)57 b(fo)-7 b(r)58 b(r)q(ow)f(and)g(c)l (o)-5 b(l)n(umn)57 b(scali)s(n)n(g)f(of)i(th)l(e)f(o)-7 b(r)s(ig)t(i)s(nal)57 b(L)s(P)h(pr)q(o)-8 b(b)l(l)n(e)n(m.)79 b(T)8 b(his)57 b(s)m(ec)-5 b(tio)l(n)0 1158 y(d)g(eve)l(l)n(o)g(ps)48 b(th)l(e)f(alg)n(e)l(b)-5 b(ra)46 b(u)-7 b(s)m(e)l(d)48 b(fo)-7 b(r)47 b(scali)s(n)n(g)g(and)g(d)-5 b(e)o(sc)d(r)s(ibe)o(s)48 b(s)n(o)n(me)f(a)-6 b(dditio)l(nal)46 b(d)-5 b(e)e(t)s(ails)49 b(of)e(th)l(e)g(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n.)0 1357 y(T)8 b(h)l(e)77 b(fo)-5 b(ll)n(owi)s(n)n(g)75 b(s)m(ec)-5 b(tio)l(n)77 b(\(\24710\))g(d)-5 b(e)o(sc)d(r)s(ibe)o(s)79 b(unscali)s(n)n(g)c(i)s(n)j(th)l(e)f(c)l(o)l(nte)-5 b(xt)76 b(of)i(g)n(en)n(e)l(ra)-8 b(ti)s(n)n(g)75 b(s)n(o)-5 b(l)n(u)l(tio)l(n,)82 b(ray)-17 b(,)84 b(and)0 1556 y(t)s(a)l(b)l(l)n (ea)-8 b(u)53 b(vec)-5 b(to)e(rs)53 b(fo)-7 b(r)53 b(th)l(e)g(client.) 249 1855 y(L)5 b(e)-7 b(t)56 b FG(R)e FP(be)46 b(a)h(di)s(ago)l(nal)e (ma)-8 b(tr)s(ix)46 b(u)-7 b(s)m(e)l(d)46 b(to)g(scal)n(e)h(th)l(e)f(r) q(ows)g(of)g(th)l(e)g(L)s(P)g(pr)q(o)-8 b(b)l(l)n(e)n(m)45 b(and)53 b FG(S)g FP(be)46 b(a)g(di)s(ago)l(nal)f(ma)-8 b(tr)s(ix)0 2054 y(u)h(s)m(e)l(d)53 b(to)f(scal)n(e)i(th)l(e)f(c)l(o)-5 b(l)n(umns)52 b(of)h(th)l(e)f(L)s(P)h(pr)q(o)-8 b(b)l(l)n(e)n(m.)64 b(T)8 b(h)l(e)52 b(o)-7 b(r)s(ig)t(i)s(nal)53 b(pr)q(o)-8 b(b)l(l)n(e)n(m)51 b(\()-8 b(1\))52 b(is)h(scal)n(e)l(d)h(as)2000 2420 y(m)s(i)s(n)32 b(\()r FG(c)16 b(S)6 b FP(\)\()h FG(S)2846 2351 y FA(\014)-13 b(1)2986 2420 y FG(x)16 b FP(\))2181 2694 y(\()9 b FG(R)18 b(A)12 b(S)6 b FP(\)\()h FG(S)2846 2625 y FA(\014)-13 b(1)2986 2694 y FG(x)16 b FP(\))40 b FF(\243)i FP(\()9 b FG(R)h(b)5 b FP(\))2054 2968 y(\()i FG(S)2236 2900 y FA(\014)-13 b(1)2375 2968 y FG(l)17 b FP(\))42 b FF(\243)f FP(\()7 b FG(S)2844 2900 y FA(\014)-13 b(1)2986 2968 y FG(x)16 b FP(\))40 b FF(\243)i FP(\()7 b FG(S)3497 2900 y FA(\014)-13 b(1)3636 2968 y FG(u)13 b FP(\))0 3383 y(to)53 b(pr)q(od)-7 b(u)i(c)f(e)52 b(th)l(e)g(scal)n(e)l(d)i(pr)q(o)-8 b(b)l(l)n(e)n(m)2596 3799 y(m)s(i)s(n)2960 3798 y(\013)2943 3799 y FG(c)3060 3798 y FP(\013)3036 3799 y FG(x)2940 4048 y FP(\013)2910 4079 y FG(A)3060 4078 y FP(\013)3036 4079 y FG(x)56 b FF(\243)3330 4038 y FP(\013)3317 4079 y FG(b)2803 4319 y FP(\013)2794 4360 y FG(l)i FF(\243)3060 4359 y FP(\013)3036 4360 y FG(x)e FF(\243)3348 4359 y FP(\013)3317 4360 y FG(u)0 5006 y FP(wh)l(e)l(r)q(e)591 4975 y(\013)561 5006 y FG(A)g FP(=)k FG(R)18 b(A)12 b(S)6 b FP(,)1414 4965 y(\013)1400 5006 y FG(b)56 b FP(=)j FG(R)10 b(b)5 b FP(,)2097 5005 y(\013)2080 5006 y FG(c)58 b FP(=)53 b FG(c)16 b(S)6 b FP(,)2721 4965 y(\013)2712 5006 y FG(l)68 b FP(=)57 b FG(S)3108 4945 y FA(\014)-13 b(1)3247 5006 y FG(l)17 b FP(,)3476 5005 y(\013)3445 5006 y FG(u)63 b FP(=)58 b FG(S)3894 4945 y FA(\014)-13 b(1)4033 5006 y FG(u)13 b FP(,)78 b(and)4692 5005 y(\013)4668 5006 y FG(x)66 b FP(=)57 b FG(S)5106 4945 y FA(\014)-13 b(1)5248 5006 y FG(x)16 b FP(.)133 b FM(D)8 b(Y)g(L)g(P)80 b FP(th)l(en)73 b(tr)q(ea)-8 b(ts)75 b(th)l(e)f(scal)n(e)l(d)0 5205 y(pr)q(o)-8 b(b)l(l)n(e)n(m)52 b(as)h(th)l(e)f(o)-7 b(r)s(ig)t(i)s(nal)53 b(pr)q(o)-8 b(b)l(l)n(e)n(m.)249 5504 y(By)45 b(d)-5 b(e)l(fa)d(u)l(lt,)50 b FM(D)8 b(Y)g(L)g(P)51 b FP(will)45 b(calcu)l(la)-8 b(te)45 b(scali)s(n)n(g)f(ma)-8 b(tr)s(ic)i(e)o(s)56 b FG(R)c FP(and)g FG(S)g FP(and)45 b(scal)n(e)h(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)44 b(sys)-5 b(te)n(m)45 b(unl)n(e)o(s)-5 b(s)0 5703 y(th)l(e)43 b(c)l(oe)l(\002)-49 b(\002c)m(ients)41 b(sa)-8 b(tisfy)43 b(th)l(e)g(c)l(o)l(nditio)l(ns)f(.)r(5)36 b(<)f(m)s(i)s(n)3613 5728 y Fz(i)23 b(j)3737 5696 y FF(|)3772 5703 y FG(a)3877 5728 y Fz(i)g(j)3977 5696 y FF(|)4062 5703 y FP(and)42 b(max)4758 5728 y Fz(i)23 b(j)4882 5696 y FF(|)4917 5703 y FG(a)5022 5728 y Fz(i)g(j)5122 5696 y FF(|)5200 5703 y FP(<)35 b(2.)63 b(T)8 b(h)l(e)42 b(client)h(can)g (fo)-7 b(rbid)42 b(scali)s(n)n(g)0 5902 y(entir)q(e)l(ly)-17 b(,)52 b(o)-7 b(r)53 b(s)-8 b(u)i(p)e(ply)51 b(a)i(pair)g(of)g(vec)-5 b(to)e(rs)53 b(tha)-8 b(t)52 b(will)g(be)h(u)-7 b(s)m(e)l(d)53 b(as)g(th)l(e)g(di)s(ago)l(nal)e(c)l(oe)l(\002)-49 b(\002c)m(ients)52 b(of)62 b FG(R)e FP(and)f FG(S)6 b FP(.)249 6201 y(A)63 b(few)f(a)-6 b(dditio)l(nal)61 b(d)-5 b(e)e(t)s(ails)64 b(ar)q(e)f(h)l(e)l(lpfu)l(l)e(to)i(und)-5 b(e)l(rs)g(t)s(and)61 b(th)l(e)h(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n.)94 b(T)8 b(h)l(e)62 b(\002rs)-5 b(t)63 b(is)f(tha)-8 b(t)66 b FM(D)8 b(Y)g(L)g(P)0 6400 y FP(u)-7 b(s)m(e)o(s)67 b(r)q(ow)e(scali)s (n)n(g)h(to)g(c)l(o)l(nve)l(rt)f(`)p FF(\263)p FP(')h(c)l(o)l(ns)-5 b(trai)s(nts)65 b(to)h(`)p FF(\243)p FP(')f(c)l(o)l(ns)-5 b(trai)s(nts.)105 b(Given)66 b(a)g(c)l(o)l(ns)-5 b(trai)s(nt)65 b(sys)-5 b(te)n(m)66 b(with)f(`)p FF(\263)p FP(')0 6600 y(c)l(o)l(ns)-5 b(trai)s(nts,)53 b FM(D)8 b(Y)g(L)g(P)55 b FP(will)49 b(g)n(en)n(e)l(ra)-8 b(te)48 b(scali)s(n)n(g)g(vec)-5 b(to)e(rs)51 b(with)d(c)l(oe)l(\002)-49 b(\002c)m(ients)48 b(of)h FF(\261)p FP(1)r(.)r(0)g(even)h(if)f(scali)s(n)n(g)f(is)i(oth)l (e)l(rwis)m(e)0 6799 y(fo)-7 b(rbidd)i(en.)88 b(If)62 b(scali)s(n)n(g)d(is)i(a)n(c)-5 b(tive)61 b(fo)-7 b(r)61 b(n)n(ume)l(r)s(ical)g(r)q(eas)n(o)l(ns,)h(th)l(e)e(r)q(e)l(l)n(ev)r (ant)h(r)q(ow)f(scali)s(n)n(g)g(c)l(oe)l(\002)-49 b(\002c)m(ients)59 b(will)h(be)0 6998 y(n)n(e)-5 b(ga)d(te)l(d.)253 7297 y FM(D)8 b(Y)g(L)g(P)67 b FP(scal)n(e)o(s)62 b(th)l(e)e(o)-7 b(r)s(ig)t(i)s(nal)60 b(c)l(o)l(ns)-5 b(trai)s(nt)60 b(sys)-5 b(te)n(m)60 b(be)l(fo)-7 b(r)q(e)61 b(g)n(en)n(e)l(ra)-8 b(ti)s(n)n(g)58 b(l)n(og)t(ical)j(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)90 b(No)l(n)n(e)-7 b(th)l(e)l(l)n(e)o(s)i(s,)62 b(it)0 7496 y(is)75 b(d)-5 b(e)o(s)n(ira)l(b)l(l)n(e)75 b(to)f(mai)s(nt)s(ai)s(n)h (a)g(c)l(oe)l(\002)-49 b(\002c)m(ient)73 b(of)i(1.0)f(fo)-7 b(r)75 b(ea)n(c)-7 b(h)74 b(l)n(og)t(ical.)131 b(T)8 b(h)l(e)74 b(r)q(ow)g(scali)s(n)n(g)g(c)l(oe)l(\002)-49 b(\002c)m(ient)73 b FG(r)7419 7521 y Fz(i)10 b(i)7588 7496 y FP(fo)-7 b(r)0 7696 y(c)l(o)l(ns)i(trai)s(nt)54 b FG(i)68 b FP(is)53 b(alr)q(ea)-6 b(dy)54 b(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)l(d.)68 b(T)r(o)53 b(kee)-7 b(p)54 b(th)l(e)g(c)l(oe)l (\002)-49 b(\002c)m(ients)52 b(of)i(l)n(og)t(ical)f(v)r(ar)s(i)s(a)l(b) l(l)n(e)o(s)h(a)-8 b(t)54 b(1)r(.)r(0,)f(th)l(e)g(c)l(o)-5 b(l)n(umn)0 7895 y(scali)s(n)n(g)61 b(fa)n(c)-5 b(to)e(r)62 b(is)h(c)-7 b(h)n(os)m(en)62 b(to)g(be)g(1)r(/)r FG(r)2706 7920 y Fz(i)10 b(i)2861 7895 y FP(and)62 b(th)l(e)g(c)l(o)-5 b(l)n(umn)61 b(scali)s(n)n(g)g(ma)-8 b(tr)s(ix)69 b FG(S)g FP(is)62 b(c)l(o)l(nc)-6 b(e)f(pt)l(ually)61 b(e)-5 b(xtend)g(e)l(d)61 b(to)0 8094 y(i)s(ncl)n(ud)-5 b(e)53 b(l)n(og)t(ical)f(v)r(ar)s(i)s(a)l (b)l(l)n(e)o(s.)3771 11400 y(27)p eop end %%Page: 28 31 TeXDict begin 28 30 bop 0 475 a FL(10)238 b(Gen)-7 b(e)h(ra)-12 b(tin)k(g)77 b(So)-12 b(lu)-6 b(tio)g(ns,)79 b(Rays,)i(an)-7 b(d)80 b(T)-5 b(ab)f(leau)79 b(V)-19 b(ec)-12 b(to)i(rs)0 959 y FP(T)8 b(h)l(e)63 b(dy)7 b(nam)s(ic)61 b(s)n(i)s(mpl)n(e)-5 b(x)64 b(algo)-7 b(r)s(ithm)62 b(i)s(mpl)n(e)n(mente)l(d)g(by)k FM(D)8 b(Y)g(L)g(P)69 b FP(i)s(ntr)q(od)-7 b(u)i(c)f(e)o(s)62 b(s)n(o)n(me)h(uniq)l(u)l(e)f(c)-7 b(hall)n(en)n(g)n(e)o(s)62 b(wh)l(en)0 1158 y(g)n(en)n(e)l(ra)-8 b(ti)s(n)n(g)65 b(s)n(o)-5 b(l)n(u)l(tio)l(n)66 b(v)r(al)n(u)l(e)o(s,)72 b(rays,)g(and)67 b(t)s(a)l(b)l(l)n(ea)-8 b(u)68 b(vec)-5 b(to)e(rs.)111 b(T)8 b(h)l(e)68 b(client)f(e)-5 b(xpec)g(ts)69 b(an)e(answe)l(r)g(tha)-8 b(t)67 b(c)l(o)-7 b(rr)q(e-)0 1357 y(s)f(po)l(nds)44 b(to)h(th)l(e)f(fu)l(ll,)i(unscal)n(e)l(d)f(c)l (o)l(ns)-5 b(trai)s(nt)43 b(sys)-5 b(te)n(m.)63 b(In)44 b(a)-6 b(dditio)l(n)44 b(to)h(th)l(e)f(s)-5 b(t)s(andar)q(d)45 b(calcu)l(la)-8 b(tio)l(ns)44 b(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)0 1556 y(with)51 b(unscali)s(n)n(g,)j FM(D)8 b(Y)g(L)g(P)57 b FP(m)l(u)-7 b(s)i(t)52 b(often)g(sy)7 b(nth)l(e)o(s)n(ize)50 b(po)-7 b(rtio)l(ns)51 b(of)g(th)l(e)h(answe)l(r)f(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g)49 b(to)j(i)s(na)n(c)-5 b(tive)51 b(c)l(o)l(n-)0 1756 y(s)-5 b(trai)s(nts)53 b(o)-7 b(r)54 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)g(and)f(pos)n(itio)l(n) f(th)l(e)h(c)l(o)n(mpo)l(n)n(ents)f(of)h(th)l(e)g(answe)l(r)f(to)i(ma) -8 b(tc)h(h)53 b(th)l(e)f(o)-7 b(r)s(ig)t(i)s(nal)53 b(c)l(o)l(ns)-5 b(trai)s(nt)0 1955 y(sys)g(te)n(m.)72 b(T)8 b(his)55 b(bec)l(o)n(me)o(s)g(even)h(mo)-7 b(r)q(e)55 b(i)s(nte)l(r)q(e)o(s)-5 b(ti)s(n)n(g)54 b(wh)l(en)f(th)l(e)i(client)f (is)i(as)-6 b(ki)s(n)n(g)54 b(fo)-7 b(r)55 b(answe)l(rs)g(i)s(n)f(th)l (e)h(c)l(o)l(nte)-5 b(xt)0 2154 y(of)53 b(th)l(e)f(d)-7 b(ual)52 b(pr)q(o)-8 b(b)l(l)n(e)n(m.)0 2745 y Fu(10.1)197 b(So)-10 b(lu)-5 b(tio)g(n)63 b(V)-16 b(ec)-10 b(to)i(rs)0 3165 y FP(Calcu)l(la)g(ti)s(n)n(g)39 b(th)l(e)j(v)r(al)n(u)l(e)o(s)g (of)f(th)l(e)h(unscal)n(e)l(d)f(pr)s(i)s(mal)h(v)r(ar)s(i)s(a)l(b)l(l)n (e)o(s)g(is)g(th)l(e)f(s)n(i)s(mpl)n(e)o(s)-5 b(t)43 b(r)q(eq)l(u)l(e)o(s)-5 b(t.)62 b(W)-11 b(e)42 b(ha)-7 b(ve)7008 3164 y(\013)6984 3165 y FG(x)7096 3104 y Fz(B)7224 3165 y FP(=)7402 3133 y(\013)7366 3165 y FG(B)7503 3104 y FA(\014)-13 b(1)7656 3124 y FP(\013)7643 3165 y FG(b)t FP(.)0 3364 y(T)8 b(h)l(en)500 3363 y(\013)475 3364 y FG(x)587 3304 y Fz(B)726 3364 y FP(=)44 b(\()7 b FG(S)1045 3304 y Fz(B)1140 3364 y FP(\))1190 3304 y FA(\014)-13 b(1)1336 3364 y FG(B)1473 3304 y FA(\014)g(1)1620 3364 y FG(R)1757 3304 y FA(\014)g(1)1901 3364 y FG(R)10 b(b)48 b FP(=)43 b(\()7 b FG(S)2493 3304 y Fz(B)2589 3364 y FP(\))2639 3304 y FA(\014)-13 b(1)2785 3364 y FG(B)2922 3304 y FA(\014)g(1)3061 3364 y FG(b)63 b FP(and)g FG(x)3708 3304 y Fz(B)3847 3364 y FP(=)50 b FG(S)4115 3304 y Fz(B)4240 3363 y FP(\013)4216 3364 y FG(x)4328 3304 y Fz(B)4423 3364 y FP(.)82 b(Recall)58 b(tha)-8 b(t)58 b(th)l(e)g(c)l(o)-5 b(l)n(umn)57 b(scali)s(n)n(g)h(fa)n(c)-5 b(to)e(r)58 b(fo)-7 b(r)0 3563 y(a)64 b(l)n(og)t(ical)f(v)r(ar)s(i)s(a)l(b)l(l)n(e) g(will)g(be)g(th)l(e)g(i)s(nve)l(rs)m(e)g(of)g(th)l(e)g(r)q(ow)g(scali) s(n)n(g)f(fa)n(c)-5 b(to)e(r)e(,)66 b(as)d(e)-5 b(xplai)s(n)n(e)l(d)63 b(i)s(n)g(\2479.)97 b(T)8 b(h)l(e)63 b(unscal)n(e)l(d)0 3762 y(v)r(al)n(u)l(e)o(s)75 b(of)g(th)l(e)f(n)m(o)l(n)m(bas)n(ic)f(pr) s(i)s(mal)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(\(ar)q(c)-7 b(hitec)i(t)l(ural)74 b(o)-7 b(r)75 b(l)n(og)t(ical\))f(can)g(be)h(r)q (ea)-6 b(d)75 b(dir)q(ec)-5 b(tly)74 b(fr)q(o)n(m)h(th)l(e)0 3962 y(o)-7 b(r)s(ig)t(i)s(nal)52 b(unscal)n(e)l(d)j FG(l)70 b FP(and)54 b FG(u)65 b FP(vec)-5 b(to)e(rs.)249 4261 y(T)8 b(h)l(e)l(r)q(e)52 b(is)h(o)l(n)n(e)f(s)-8 b(u)h(b)h(tl)n(e)52 b(poi)s(nt)f(a)l(bo)-5 b(u)l(t)52 b(th)l(e)g(c)l(o)-5 b(l)n(umn)51 b(scali)s(n)n(g)h(fa)n(c)-5 b(to)e(r)52 b(fo)-7 b(r)53 b(l)n(og)t(icals)f(whic)-7 b(h)51 b(is)i(n)m(ot)e(i)s(mme)l(di)s(a)-8 b(te)l(ly)0 4460 y(a)i(p)e(par)q(ent)65 b(fr)q(o)n(m)h(th)l(e)f(s)n(i)s(mpli\002e)l (d)g(pr)q(e)o(s)m(ent)s(a)-8 b(tio)l(n)64 b(i)s(n)h(th)l(e)g(pr)q(evio) -5 b(u)e(s)66 b(paragra)-6 b(p)g(hs.)103 b(L)5 b(og)t(ical)65 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(can)e(be)0 4659 y(bas)n(ic)60 b(fo)-7 b(r)59 b(th)l(e)g(r)q(ow)f(occu)-6 b(pie)l(d)59 b(by)f(th)l(eir)h(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)58 b(c)l(o)l(ns)-5 b(trai)s(nt)58 b(\227)i(th)l(e)e(`na)-8 b(t)l(ural')57 b(pos)n(itio)l(n.)83 b(T)8 b(h)l(ey)59 b(can)g(als)n(o)0 4858 y(be)d(bas)n(ic)g(fo)-7 b(r)56 b(s)n(o)n(me)g(oth)l(e)l(r)f(r)q(ow)g(\227)h(an)g(`unna)-8 b(t)l(ural')52 b(pos)n(itio)l(n;)k(this)f(is)h(a)n(c)-7 b(hieve)l(d)56 b(by)f(a)h(c)l(o)-5 b(l)n(umn)55 b(pe)l(r)5 b(m)l(u)l(t)s(a)-8 b(tio)l(n)0 5058 y(i)s(n)72 b(th)l(e)f(bas)n(is.)124 b(T)8 b(h)l(e)72 b(c)l(o)-7 b(rr)q(ec)i(t)73 b(c)l(o)-5 b(l)n(umn)71 b(scali)s(n)n(g)g(fa)n(c)-5 b(to)e(r)e(,)77 b(wh)l(en)70 b(r)q(eq)l(uir)q(e)l(d,)76 b(is)d(th)l(e)e(o)l(n)n(e)h(as) -5 b(s)n(oc)m(i)s(a)d(te)l(d)72 b(with)f(th)l(e)0 5257 y(na)-8 b(t)l(ural)52 b(r)q(ow.)64 b(T)8 b(his)53 b(is)g(mo)-7 b(r)q(e)53 b(a)-6 b(p)e(par)q(ent)52 b(wh)l(en)f(th)l(e)i(c)l(o)-5 b(l)n(umn)52 b(pe)l(r)5 b(m)l(u)l(t)s(a)-8 b(tio)l(n)51 b(ma)-8 b(tr)s(ix)61 b FG(P)67 b FP(is)53 b(ma)-6 b(d)h(e)53 b(e)-5 b(xplic)m(it:)3214 5584 y(\013)3178 5615 y FG(B)46 b FP(=)41 b(\()9 b FG(R)17 b(B)11 b(S)3926 5546 y Fz(B)4021 5615 y FP(\))e FG(P)3064 5858 y FP(\013)3028 5889 y FG(B)3165 5821 y FA(\014)-13 b(1)3344 5889 y FP(=)50 b FG(P)3621 5821 y FA(\014)-13 b(1)3758 5889 y FP(\()7 b FG(S)3933 5821 y Fz(B)4029 5889 y FP(\))4079 5821 y FA(\014)-13 b(1)4225 5889 y FG(B)4362 5821 y FA(\014)g(1)4508 5889 y FG(R)4645 5821 y FA(\014)g(1)249 6347 y FP(By)66 b(d)-5 b(e)l(\002)s(nitio)l(n,)69 b(i)s(na)n(c)-5 b(tive)66 b(ar)q(c)-7 b(hitec)i(t)l(ural)66 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i (ar)q(e)f(n)m(o)l(n)m(bas)n(ic,)i(s)n(o)d(th)l(eir)g(v)r(al)n(u)l(e)h (is)g(als)n(o)f(eas)n(ily)h(r)q(ea)-6 b(d)0 6546 y(fr)q(o)n(m)62 b(th)l(e)f(o)-7 b(r)s(ig)t(i)s(nal)61 b(unscal)n(e)l(d)i FG(l)79 b FP(and)63 b FG(u)74 b FP(vec)-5 b(to)e(rs.)92 b(By)61 b(d)-5 b(e)l(\002)s(nitio)l(n,)62 b(i)s(na)n(c)-5 b(tive)61 b(c)l(o)l(ns)-5 b(trai)s(nts)61 b(ar)q(e)h(l)n(oos)m(e)g(and) f(th)l(e)0 6745 y(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g)74 b(l)n(og)t(ical)i(wo)-5 b(u)l(ld)75 b(be)i(bas)n(ic.)137 b(Ra)-8 b(th)l(e)l(r)74 b(than)i(e)-5 b(xpand)76 b(th)l(e)g(bas)n(is)h (i)s(nve)l(rs)m(e,)82 b(th)l(e)76 b(v)r(al)n(u)l(e)g(of)h(th)l(e)0 6945 y(l)n(og)t(ical)53 b(fo)-7 b(r)53 b(an)f(i)s(na)n(c)-5 b(tive)53 b(c)l(o)l(ns)-5 b(trai)s(nt)52 b FG(i)67 b FP(is)53 b(calcu)l(la)-8 b(te)l(d)53 b(dir)q(ec)-5 b(tly)52 b(as)j FG(a)4800 6970 y Fz(i)4855 6945 y FG(x)16 b FP(.)249 7243 y(Tur)5 b(ni)s(n)n(g)61 b(to)j(th)l(e)g(d)-7 b(ual)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)k(r)q(ecall)d(\002rs)-5 b(t)64 b(th)l(e)f(o)-8 b(bs)m(e)l(rv)r(a)g(tio)l(n)62 b(fr)q(o)n(m)i(\2472)g(tha)-8 b(t)63 b(th)l(e)h(d)-7 b(ual)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g FG(y)50 b FP(=)2 7443 y FG(c)97 7382 y Fz(B)200 7443 y FG(B)337 7382 y FA(\014)-13 b(1)539 7443 y FP(calcu)l(la)-8 b(te)l(d)63 b(by)68 b FM(D)8 b(Y)g(L)g(P)69 b FP(d)-7 b(ur)s(i)s(n)n(g)62 b(pr)s(i)s(mal)i(and)f(d)-7 b(ual)63 b(s)n(i)s(mpl)n(e)-5 b(x)65 b(ar)q(e)f(i)s(n)g(fa)n(c)-5 b(t)64 b(th)l(e)f(n)n(e)-5 b(ga)d(tive)63 b(of)h(th)l(e)g(c)l(o)-7 b(rr)q(ec)i(t)0 7642 y(d)e(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)i(a)f(c)l(o)l(ns)m (eq)l(u)l(enc)-6 b(e)51 b(of)i(i)s(mpl)n(e)n(menti)s(n)n(g)e(th)l(e)h (r)q(e)l(la)-8 b(tio)l(ns)g(hip)1223 8000 y(m)s(i)s(n)25 b FG(c)14 b(x)1517 b FP(max)41 b(\(\014)r FG(c)9 b FP(\))c FG(x)1517 b FP(m)s(i)s(n)22 b FG(y)7 b(b)1537 8249 y(A)j(x)56 b FF(\243)44 b FG(b)1781 b(A)10 b(x)57 b FF(\243)43 b FG(b)1547 b(y)15 b(A)45 b FF(\263)d FP(\(\014)r FG(c)9 b FP(\))0 8607 y(by)66 b(algo)-7 b(r)s(ithm)s(ic)66 b(d)-5 b(e)o(s)n(ign)66 b(ra)-8 b(th)l(e)l(r)65 b(than)g(a)n(c)-5 b(t)l(ually)66 b(n)n(e)-5 b(ga)d(ti)s(n)n(g)66 b FG(c)9 b FP(.)105 b(Wh)l(en)65 b(g)n(en)n(e)l(ra)-8 b(ti)s(n)n(g)64 b(d)-7 b(ual)66 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(v)r(al)n(u)l(e)o(s)h(to) 0 8806 y(r)q(e)-7 b(t)l(ur)5 b(n)59 b(to)g(th)l(e)f(client,)i(th)l(e)l (r)q(e)f(is)g(a)h(c)-7 b(h)n(oic)h(e:)78 b(s)-8 b(h)n(o)j(u)l(ld)58 b(th)l(e)h(d)-7 b(ual)58 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(be)f(r)q(e) -7 b(t)l(ur)5 b(n)n(e)l(d)59 b(with)f(a)h(s)n(ign)g(c)l(o)l(nven-)0 9006 y(tio)l(n)72 b(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)73 b(fo)-7 b(r)78 b FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)74 b(m)s(i)s(n)25 b FG(c)14 b(x)87 b FP(pr)q(o)-8 b(b)l(l)n(e)n(m,)78 b(o)-7 b(r)73 b(s)-8 b(h)n(o)j(u)l(ld)72 b(th)l(ey)h(be)g(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)73 b(with)f(a)i(s)n(ign)e(c)l(o)l(nventio)l(n)0 9205 y(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)56 b(fo)-7 b(r)56 b(th)l(e)g(tru)l(e)g(d)-7 b(ual)55 b(pr)q(o)-8 b(b)l(l)n(e)n(m?)74 b(Fo)-7 b(r)56 b(all)g(r)q(o)-5 b(u)l(ti)s(n)n(e)o (s)56 b(r)q(e)-7 b(t)l(ur)5 b(ni)s(n)n(g)54 b(v)r(al)n(u)l(e)o(s)j(as) -5 b(s)n(oc)m(i)s(a)d(te)l(d)56 b(with)e(th)l(e)i(d)-7 b(ual)0 9404 y(pr)q(o)f(b)l(l)n(e)n(m,)56 b FM(D)8 b(Y)g(L)g(P)58 b FP(all)n(ows)53 b(th)l(e)f(client)g(to)h(c)-7 b(h)n(oos)m(e)53 b(th)l(e)f(s)n(ign)g(c)l(o)l(nventio)l(n.)249 9703 y(T)8 b(h)l(e)l(r)q(e)62 b(ar)q(e)h(two)f(furth)l(e)l(r)g(d)-5 b(e)e(t)s(ails)63 b(to)g(c)l(o)l(ns)n(id)-5 b(e)l(r:)84 b(T)8 b(h)l(e)63 b(can)m(o)l(nical)e(r)q(e)l(la)-8 b(tio)l(ns)g(hip)60 b(as)-5 b(s)d(ume)o(s)63 b(all)g(c)l(o)l(ns)-5 b(trai)s(nts)0 9902 y(ar)q(e)50 b(`)p FF(\243)p FP(')f(c)l(o)l(ns)-5 b(trai)s(nts)49 b(and)h(all)f(pr)s(i)s(mal)i(c)l(o)l(ns)-5 b(trai)s(nts)49 b(ar)q(e)h(e)-5 b(xplic)m(it.)63 b(In)50 b(r)q(eality)-17 b(,)50 b(th)l(e)g(pr)s(i)s(mal)g(pr)q(o)-8 b(b)l(l)n(e)n(m)49 b(pr)q(e)o(s)m(ente)l(d)0 10101 y(to)56 b FM(D)8 b(Y)g(L)g(P)58 b FP(typically)51 b(c)l(o)l(nt)s(ai)s(ns)h(`)p FF(\263)p FP(')g(c)l(o)l(ns)-5 b(trai)s(nts,)51 b(and)h(bo)-5 b(unds)51 b(o)l(n)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(ar)q(e)g(u)-7 b(s)f(ually)52 b(handl)n(e)l(d)f(by)h(th)l(e)g(al-)0 10301 y(go)-7 b(r)s(ithm)45 b(ra)-8 b(th)l(e)l(r)45 b(than)g(s)-5 b(t)s(a)d(te)l(d)47 b(as)f(e)-5 b(xplic)m(it)45 b(c)l(o)l(ns)-5 b(trai)s(nts.)63 b(T)8 b(h)l(e)l(r)q(e)45 b(ar)q(e)i(a)f(n)n(umbe)l(r)g (of)g(pos)-5 b(s)n(ib)l(l)n(e)46 b(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n)0 10500 y(c)h(h)n(oic)h(e)o(s;)58 b FM(D)8 b(Y)g(L)g(P)58 b FP(c)-7 b(h)n(oos)m(e)o(s)54 b(th)l(e)e(fo)-5 b(ll)n(owi)s(n)n(g:)3771 11400 y(28)p eop end %%Page: 29 32 TeXDict begin 29 31 bop 217 466 a Fo(e)82 b FP(Fo)-7 b(r)65 b(th)l(e)g(d)-7 b(uals)64 b(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)65 b(with)e(`)p FF(\263)p FP(')h(c)l(o)l(ns)-5 b(trai)s(nts,)67 b(th)l(e)e(s)n(ign)f(of)h(th)l(e)f(d)-7 b(ual)64 b(v)r(al)n(u)l(e)h(r)q (e)-7 b(t)l(ur)5 b(n)n(e)l(d)65 b(is)g(always)415 665 y(n)n(e)-5 b(ga)d(te)l(d)81 b(to)h(ma)-8 b(tc)h(h)82 b(th)l(e)g(`)p FF(\263)p FP(')f(tha)-8 b(t')j(s)81 b(a)n(c)-5 b(t)l(ually)81 b(pr)q(e)o(s)m(ent)g(i)s(n)h(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)81 b(ma)-8 b(tr)s(ix.)153 b(T)8 b(his)81 b(c)-7 b(h)n(oic)h(e)83 b(is)415 865 y(i)s(ntend)-5 b(e)l(d)68 b(to)g(make)h(it)g(easy)g(fo)-7 b(r)69 b(th)l(e)f(client)g(to)h(u)-7 b(s)m(e)69 b(th)l(e)f(d)-7 b(ual)68 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(v)r (al)n(u)l(e)o(s)h(with)d(th)l(e)h(c)l(oe)l(\002)-49 b(\002c)m(ient)415 1064 y(ma)-8 b(tr)s(ix)53 b(as)g(wr)s(itten.)217 1387 y Fo(e)82 b FP(Fo)-7 b(r)55 b(th)l(e)f(d)-7 b(uals)54 b(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)54 b(with)f(v)r(ar)s(i)s(a)l(b)l(l)n (e)o(s)i(tha)-8 b(t)54 b(ar)q(e)g(n)m(o)l(n)m(bas)n(ic)f(a)-8 b(t)55 b(th)l(eir)e(u)-6 b(p)e(pe)l(r)54 b(bo)-5 b(und)53 b(\(h)l(enc)-6 b(e)54 b(n)n(e)-5 b(ga-)415 1586 y(tive)57 b(i)s(n)j FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)57 b(m)s(i)s(n)f(pr)s(i)s (mal)h(c)l(o)l(nventio)l(n\),)d(th)l(e)i(v)r(al)n(u)l(e)g(is)h(n)n(e)-5 b(ga)d(te)l(d)55 b(if)h(th)l(e)g(u)-7 b(s)m(e)l(r)57 b(c)-7 b(h)n(oos)m(e)o(s)56 b(th)l(e)g(tru)l(e)g(d)-7 b(ual)415 1785 y(s)n(ign)63 b(c)l(o)l(nventio)l(n.)94 b(T)8 b(his)63 b(ma)-8 b(tc)h(h)l(e)o(s)63 b(th)l(e)g(c)l(o)l(nve)l(rs) n(io)l(n)f(of)h(th)l(e)f(i)s(mplic)m(it)h(u)-6 b(p)e(pe)l(r)62 b(bo)-5 b(und)62 b(to)h(an)g(e)-5 b(xplic)m(it)62 b(`)p FF(\243)p FP(')415 1984 y(c)l(o)l(ns)-5 b(trai)s(nt)52 b(i)s(n)g(th)l(e)h(d)-7 b(ual)52 b(pr)q(o)-8 b(b)l(l)n(e)n(m.)415 2246 y(T)r(o)74 b(e)-5 b(xtend)73 b(this)g(poi)s(nt)f(to)i(u)-6 b(p)e(pe)l(r)73 b(and)g(l)n(owe)l(r)f(bo)-5 b(unds,)78 b(wh)l(en)72 b(th)l(e)h(client)g(r)q(eq)l(u)l(e)o(s)-5 b(ts)74 b(d)-7 b(ual)72 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)415 2445 y(u)-7 b(s)n(i)s(n)n(g)75 b(th)l(e)g(tru)l(e)g(d)-7 b(ual)74 b(s)n(ign)h(c)l(o)l(nventio)l(n,)83 b FM(D)8 b(Y)g(L)g(P)81 b FP(as)-5 b(s)d(ume)o(s)76 b(tha)-8 b(t)75 b(i)s(mplic)m(it)f(u)-6 b(p)e(pe)l(r)75 b(bo)-5 b(unds)74 b(ar)q(e)i(ma)-6 b(d)h(e)415 2644 y(e)g(xplic)m(it)52 b(as)58 b FG(x)1385 2669 y Fz(j)1471 2644 y FF(\243)43 b FG(u)1723 2669 y Fz(j)1821 2644 y FP(and)52 b(i)s(mplic)m(it)g(l)n (owe)l(r)g(bo)-5 b(unds)52 b(ar)q(e)h(ma)-6 b(d)h(e)53 b(e)-5 b(xplic)m(it)52 b(as)i(\014)5 b FG(x)5838 2669 y Fz(j)5923 2644 y FF(\243)41 b FP(\014)r FG(l)6218 2669 y Fz(j)6263 2644 y FP(.)249 3057 y(T)r(o)83 b(calcu)l(la)-8 b(te)82 b(th)l(e)g(v)r(al)n(u)l(e)o(s)h(of)g(th)l(e)f(unscal)n(e)l(d)g (r)q(ow)g(d)-7 b(ual)82 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g FG(y)5 b FP(,)89 b(s)-5 b(t)s(art)83 b(with)6420 3056 y(\013)6393 3057 y FG(y)58 b FP(=)6725 3056 y(\013)6707 3057 y FG(c)6802 2997 y Fz(B)6942 3026 y FP(\013)6906 3057 y FG(B)7043 2997 y FA(\014)-13 b(1)7180 3057 y FP(.)155 b(T)8 b(h)l(en)26 3256 y(\013)-1 3257 y FG(y)47 b FP(=)e FG(c)386 3196 y Fz(B)488 3257 y FG(S)606 3196 y Fz(B)701 3257 y FP(\()7 b FG(S)876 3196 y Fz(B)972 3257 y FP(\))1022 3196 y FA(\014)-13 b(1)1168 3257 y FG(B)1305 3196 y FA(\014)g(1)1451 3257 y FG(R)1588 3196 y FA(\014)g(1)1768 3257 y FP(=)45 b FG(c)2008 3196 y Fz(B)2112 3257 y FG(B)2249 3196 y FA(\014)-13 b(1)2395 3257 y FG(R)2532 3196 y FA(\014)g(1)2712 3257 y FP(=)42 b FG(y)14 b(R)3105 3196 y FA(\014)-13 b(1)3297 3257 y FP(and)56 b FG(y)47 b FP(=)3978 3256 y(\013)3951 3257 y FG(y)13 b(R)8 b FP(.)78 b(T)8 b(h)l(e)o(s)m(e)57 b(v)r(al)n(u)l(e)o(s)h(m)l(u)-7 b(s)i(t)58 b(be)f(n)n(e)-5 b(ga)d(te)l(d)57 b(to)g(be)h(c)l(o)-7 b(rr)q(ec)i(t)0 3456 y(fo)e(r)78 b(th)l(e)e(d)-7 b(ual)77 b(pr)q(o)-8 b(b)l(l)n(e)n(m.)138 b(By)76 b(d)-5 b(e)l(\002)s(nitio)l(n,)82 b(i)s(na)n(c)-5 b(tive)77 b(c)l(o)l(ns)-5 b(trai)s(nts)76 b(ar)q(e)i(n)m(ot)e(tight,)82 b(h)l(enc)-6 b(e)77 b(th)l(e)g(v)r(al)n (u)l(e)g(of)h(th)l(e)0 3655 y(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)52 b(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(is)f(ze)l(r)q(o.)249 3954 y(T)8 b(h)l(e)57 b(v)r(al)n(u)l(e)o(s)h(of)f(th)l(e)f(c)l(o)-5 b(l)n(umn)57 b(d)-7 b(ual)56 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(ar)q(e) g(th)l(e)e(pr)s(i)s(mal)i(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)56 b(c)l(os)-5 b(ts)p 5900 3853 90 7 v 60 w FG(c)6002 3979 y Fz(j)6048 3954 y FP(.)78 b(St)s(arti)s(n)n(g)56 b(fr)q(o)n(m)7332 3920 y(\013)p 7325 3853 V 7327 3954 a FG(c)7428 3979 y Fz(j)7473 3954 y FP(,)i(we)0 4153 y(ha)-7 b(ve)2550 4462 y(\013)p 2544 4395 V 2546 4495 a FG(c)2646 4520 y Fz(j)2733 4495 y FP(=)2893 4494 y(\013)2876 4495 y FG(c)2971 4520 y Fz(j)3048 4495 y FP(\014)3199 4494 y(\013)3182 4495 y FG(c)3277 4427 y Fz(B)3416 4464 y FP(\013)3380 4495 y FG(B)3517 4427 y FA(\014)-13 b(1)3687 4494 y FP(\013)3656 4495 y FG(a)3774 4520 y Fz(j)2733 4770 y FP(=)43 b FG(c)2971 4795 y Fz(j)3022 4770 y FG(S)3143 4795 y Fz(j)3221 4770 y FP(\014)33 b FG(c)3449 4701 y Fz(B)3551 4770 y FG(S)3669 4701 y Fz(B)3765 4770 y FP(\()7 b FG(S)3940 4701 y Fz(B)4035 4770 y FP(\))4085 4701 y FA(\014)-13 b(1)4231 4770 y FG(B)4368 4701 y FA(\014)g(1)4515 4770 y FG(R)4652 4701 y FA(\014)g(1)4797 4770 y FG(R)10 b(a)5041 4795 y Fz(j)5090 4770 y FG(S)5211 4795 y Fz(j)2733 5044 y FP(=)41 b(\()r FG(c)3021 5069 y Fz(j)3097 5044 y FP(\014)34 b FG(c)3326 4975 y Fz(B)3430 5044 y FG(B)3567 4975 y FA(\014)-13 b(1)3706 5044 y FG(a)3824 5069 y Fz(j)3868 5044 y FP(\))7 b FG(S)4046 5069 y Fz(j)2733 5293 y FP(=)p 2874 5192 V 43 w FG(c)2977 5318 y Fz(j)3029 5293 y FG(S)3150 5318 y Fz(j)0 5660 y FP(h)l(enc)-6 b(e)79 b FG(c)642 5685 y Fz(j)738 5660 y FP(=)897 5626 y(\013)p 890 5559 V 892 5660 a FG(c)993 5685 y Fz(j)1038 5660 y FP(\()7 b FG(S)1216 5685 y Fz(j)1261 5660 y FP(\))1324 5600 y FA(\014)-13 b(1)1461 5660 y FP(.)139 b(Fo)-7 b(r)78 b(a)n(c)-5 b(tive)77 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)85 b(th)l(e)77 b(v)r(al)n(u)l(e)g(of) 4460 5626 y(\013)p 4453 5559 V 4455 5660 a FG(c)4556 5685 y Fz(j)4679 5660 y FP(is)h(i)s(mme)l(di)s(a)-8 b(te)l(ly)76 b(a)-7 b(v)r(aila)l(b)l(l)n(e.)139 b(Fo)-7 b(r)78 b(i)s(na)n(c)-5 b(tive)0 5876 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)58 b FM(D)8 b(Y)g(L)g(P)58 b FP(\002rs)-5 b(t)53 b(calcu)l(la)-8 b(te)o(s)2501 5842 y(\013)p 2494 5775 V 2496 5876 a FG(c)2596 5901 y Fz(j)2683 5876 y FP(=)2850 5875 y(\013)2823 5876 y FG(y)2960 5875 y FP(\013)2929 5876 y FG(a)3047 5901 y Fz(j)3091 5876 y FP(.)0 6464 y Fu(10.2)197 b(T)-5 b(ab)g(leau)65 b(V)-16 b(ec)-10 b(to)i(rs)4 6883 y FP(D)8 b FM(Y)g(L)g(P)75 b FP(i)s(mpl)n(e)n(ments)69 b(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)69 b(to)h(r)q(e)-7 b(t)l(ur)5 b(n)68 b(fo)-5 b(ur)70 b(t)s(a)l(b)l(l)n(ea) -8 b(u)69 b(vec)-5 b(to)e(rs:)100 b(r)q(ows)71 b FH(1)5364 6908 y Fz(i)5483 6883 y FP(and)e(c)l(o)-5 b(l)n(umns)71 b FH(1)6727 6908 y Fz(j)6841 6883 y FP(of)f(th)l(e)f(bas)n(is)0 7083 y(i)s(nve)l(rs)m(e)62 b FG(B)772 7022 y FA(\014)-13 b(1)909 7083 y FP(,)53 b(and)f(r)q(ows)p 1812 6982 117 7 v 55 w FG(a)1928 7108 y Fz(i)2032 7083 y FP(and)h(c)l(o)-5 b(l)n(umns)p 3129 6982 V 54 w FG(a)3258 7108 y Fz(j)3356 7083 y FP(of)53 b(th)l(e)g(transfo)-7 b(r)5 b(me)l(d)52 b(c)l(o)l(ns)-5 b(trai)s(nt)52 b(ma)-8 b(tr)s(ix)61 b FG(B)6497 7022 y FA(\014)-13 b(1)6645 7083 y FG(A)5 b FP(.)249 7381 y(Given)67 b(th)l(e)g(scal)n(e)l(d)i(bas)n(is)f(i)s(nve)l (rs)m(e)2846 7350 y(\013)2809 7381 y FG(B)2946 7321 y FA(\014)-13 b(1)3132 7381 y FP(=)47 b(\()7 b FG(S)3454 7321 y Fz(B)3550 7381 y FP(\))3600 7321 y FA(\014)-13 b(1)3746 7381 y FG(B)3883 7321 y FA(\014)g(1)4029 7381 y FG(R)4166 7321 y FA(\014)g(1)4302 7381 y FP(,)72 b(th)l(e)67 b(unscal)n(e)l(d)g(c)l(o)-5 b(l)n(umn)67 b(of)h(th)l(e)f(bas)n(is)h(i)s (nve)l(rs)m(e)0 7581 y(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g)50 b(to)j(bas)n(ic)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)59 b FG(x)2667 7606 y Fz(j)2711 7581 y FP(,)53 b(bas)n(ic)g(fo)-7 b(r)53 b(r)q(ow)h FG(k)11 b FP(,)52 b(will)g(be)2926 7954 y FH(1)3038 7979 y Fz(j)3124 7954 y FP(=)c FG(S)3390 7886 y Fz(B)3531 7923 y FP(\013)3495 7954 y FG(B)3632 7886 y FA(\014)-13 b(1)3778 7954 y FG(R)10 b(e)3997 7979 y Fz(k)4122 7954 y FP(=)48 b FG(S)4388 7886 y Fz(B)4496 7906 y FP(\013)4486 7954 y FH(1)4598 7979 y Fz(j)4643 7954 y FG(r)4712 7979 y Fz(k)9 b(k)7495 7954 y FP(\(16\))249 8396 y(Beca)-8 b(u)h(s)m(e)50 b FM(D)8 b(Y)g(L)g(P)52 b FP(pe)l(r)s(iodically)45 b(d)-5 b(ea)n(c)g(tiv)r(a)d(te)o(s)46 b(l)n(oos)m(e)g(c)l(o)l(ns)-5 b(trai)s(nts,)47 b(it)f(is)g(i)s(n)g(g)n (en)n(e)l(ral)f(n)n(ec)-6 b(e)o(s)h(sary)47 b(to)f(sy)7 b(nth)l(e)o(s)n(ize)0 8595 y(th)l(e)53 b(r)q(ows)g(of)g(th)l(e)g(bas)n (is)g(i)s(nve)l(rs)m(e)g(fo)-7 b(r)54 b(th)l(e)o(s)m(e)f(i)s(na)n(c)-5 b(tive)53 b(c)l(o)l(ns)-5 b(trai)s(nts.)66 b(T)8 b(h)l(e)52 b(n)n(ec)-6 b(e)o(s)h(sary)54 b(alg)n(e)l(b)-5 b(ra)53 b(is)g(s)-8 b(h)n(own)52 b(i)s(n)h(\(2\))0 8795 y(and)f(r)q(e)-7 b(pea)f(te)l(d)53 b(h)l(e)l(r)q(e)g(fo)-7 b(r)53 b(c)l(o)l(nvenienc)-6 b(e:)3079 9238 y FG(B)3216 9169 y FA(\014)-13 b(1)3395 9238 y FP(=)3537 9003 y FC(\024)3767 9134 y FP(\()9 b FG(B)3951 9074 y Fz(t)4009 9134 y FP(\))4059 9074 y FA(\014)-13 b(1)4522 9134 y FP(0)3624 9339 y(\014)9 b FG(B)3858 9278 y Fz(l)3911 9339 y FP(\()g FG(B)4095 9278 y Fz(t)4152 9339 y FP(\))4202 9278 y FA(\014)-13 b(1)4515 9339 y FG(I)4590 9278 y Fz(l)4642 9003 y FC(\025)7598 9238 y FP(\(2\))0 9703 y(L)5 b(e)-7 b(t)49 b(th)l(e)f(partitio)l(n)55 b FG(B)1476 9643 y Fz(t)1582 9703 y FP(c)l(o)-7 b(rr)q(e)o(s)f(po)l(nd) 47 b(to)57 b FG(B)c FP(i)s(n)48 b(\()-8 b(16\),)50 b FH(1)3622 9728 y Fz(j)3714 9703 y FP(to)e(a)h(c)l(o)-5 b(l)n(umn)47 b(of)h(\()9 b FG(B)5085 9643 y Fz(t)5142 9703 y FP(\))5192 9643 y FA(\014)-13 b(1)5329 9703 y FP(,)49 b(and)f(l)n(e)-7 b(t)49 b(th)l(e)e(partitio)l(n)56 b FG(B)7207 9643 y Fz(l)7308 9703 y FP(be)49 b(th)l(e)0 9902 y(c)l(oe)l(\002)-49 b(\002c)m(ients)59 b(of)h(bas)n(ic)h(v)r(ar)s (i)s(a)l(b)l(l)n(e)o(s)g(i)s(n)e(th)l(e)h(i)s(na)n(c)-5 b(tive)60 b(c)l(o)l(ns)-5 b(trai)s(nts.)86 b(By)59 b(d)-5 b(e)l(\002)s(nitio)l(n,)60 b(th)l(e)g(bas)n(ic)h(v)r(ar)s(i)s(a)l(b)l (l)n(e)f(fo)-7 b(r)60 b(an)0 10101 y(i)s(na)n(c)-5 b(tive)51 b(c)l(o)l(ns)-5 b(trai)s(nt)51 b(is)h(th)l(e)f(l)n(og)t(ical)h(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)51 b(with)f(th)l(e)i(c)l(o)l(ns)-5 b(trai)s(nt.)64 b(Given)51 b(th)l(e)g(unscal)n(e)l(d)h(c)l(o)-5 b(l)n(umn)53 b FH(1)7492 10126 y Fz(j)7588 10101 y FP(fo)-7 b(r)0 10301 y(th)l(e)43 b(a)n(c)-5 b(tive)43 b(sys)-5 b(te)n(m)43 b(fr)q(o)n(m)h(\()-8 b(16\),)48 b FM(D)8 b(Y)g(L)g(P)49 b FP(g)n(en)n(e)l(ra)-8 b(te)o(s)43 b(th)l(e)g(n)n(ec)-6 b(e)o(s)h(sary)44 b(c)l(oe)l(\002)-49 b(\002c)m(ients)43 b(fr)q(o)n(m)g(\014)9 b FG(B)6162 10240 y Fz(l)6215 10301 y FP(\()g FG(B)6399 10240 y Fz(t)6457 10301 y FP(\))6507 10240 y FA(\014)-13 b(1)6687 10301 y FP(by)43 b(calcu)l(la)-8 b(ti)s(n)n(g)0 10500 y(\014)9 b FG(B)234 10440 y Fz(l)289 10500 y FH(1)401 10525 y Fz(j)445 10500 y FP(.)3771 11400 y(29)p eop end %%Page: 30 33 TeXDict begin 30 32 bop 249 466 a FP(Fo)-7 b(r)84 b(all)g(i)s(na)n(c)-5 b(tive)83 b(l)n(og)t(ical)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)91 b(l)n(og)t(ical)83 b(v)r(ar)s(i)s(a)l (b)l(l)n(e)o(s)i(fo)-7 b(r)84 b(i)s(na)n(c)-5 b(tive)83 b(c)l(o)l(ns)-5 b(trai)s(nts\),)90 b(and)83 b(a)n(c)-5 b(tive)0 665 y(l)n(og)t(ical)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(bas) n(ic)g(i)s(n)g(th)l(e)f(na)-8 b(t)l(ural)52 b(pos)n(itio)l(n,)i FH(1)3843 690 y Fz(j)3928 665 y FP(=)44 b FG(e)4177 690 y Fz(j)4221 665 y FP(;)53 b(this)f(is)h(d)-5 b(e)e(tec)i(te)l(d)53 b(as)g(a)h(s)-8 b(pec)m(i)s(al)52 b(cas)m(e.)249 964 y(Gen)n(e)l(ra)-8 b(ti)s(n)n(g)56 b(th)l(e)i(transfo)-7 b(r)5 b(me)l(d)57 b(c)l(o)-5 b(l)n(umn)p 3200 863 117 7 v 60 w FG(a)3329 989 y Fz(j)3418 964 y FP(=)52 b FG(B)3707 904 y FA(\014)-13 b(1)3847 964 y FG(a)3965 989 y Fz(j)4067 964 y FP(fo)-5 b(ll)n(ows)57 b(a)h(s)n(i)s(m)s(ilar)h(pa)-8 b(tte)l(r)5 b(n,)58 b(with)f(th)l(e)h(a)-6 b(dd)h(e)l(d)57 b(c)l(o)n(m-)0 1163 y(plica)-8 b(tio)l(n)51 b(tha)-8 b(t)52 b(th)l(e)h(r)q(eq)l(u)l(e)o(s)-5 b(te)l(d)53 b(c)l(o)-5 b(l)n(umn)52 b(may)g(n)m(ot)g(be)h(a)n(c)-5 b(tive.)65 b(Given)53 b(th)l(e)f(scal)n(e)l(d)h(transfo)-7 b(r)5 b(me)l(d)53 b(c)l(o)-5 b(l)n(umn)1956 1495 y(\013)p 1936 1428 V 1938 1529 a FG(a)2065 1554 y Fz(j)2152 1529 y FP(=)2338 1498 y(\013)2302 1529 y FG(B)2439 1460 y FA(\014)-13 b(1)2615 1498 y FP(\013)2585 1529 y FG(N)19 b(e)2829 1554 y Fz(j)2915 1529 y FP(=)41 b(\()7 b FG(S)3231 1460 y Fz(B)3326 1529 y FP(\))3376 1460 y FA(\014)-13 b(1)3522 1529 y FG(B)3659 1460 y FA(\014)g(1)3806 1529 y FG(R)3943 1460 y FA(\014)g(1)4088 1529 y FG(R)10 b(a)4332 1554 y Fz(j)4377 1529 y FG(s)4482 1554 y Fz(j)17 b(j)4617 1529 y FP(=)41 b(\()7 b FG(S)4933 1460 y Fz(B)5029 1529 y FP(\))5079 1460 y FA(\014)-13 b(1)5225 1529 y FG(B)5362 1460 y FA(\014)g(1)5501 1529 y FG(a)5619 1554 y Fz(j)5665 1529 y FG(s)5770 1554 y Fz(j)17 b(j)0 1894 y FP(th)l(e)52 b(unscal)n(e)l(d)h(c)l(o)-5 b(l)n(umn)p 1733 1793 V 54 w FG(a)1862 1919 y Fz(j)1961 1894 y FP(will)51 b(be)3435 2110 y FG(S)3553 2041 y Fz(B)3711 2076 y FP(\013)p 3691 2009 V 3693 2110 a FG(a)3820 2135 y Fz(j)3865 2110 y FP(\(1)r(/)t FG(s)4229 2135 y Fz(j)17 b(j)4322 2110 y FP(\))3123 b(\(17\))249 2508 y(If)48 b(th)l(e)l(r)q(e)g(ar)q(e)g(i)s (na)n(c)-5 b(tive)48 b(c)l(o)l(ns)-5 b(trai)s(nts,)48 b(th)l(e)f(r)q(e)n(mai)s(ni)s(n)n(g)f(c)l(oe)l(\002)-49 b(\002c)m(ients)47 b(i)s(n)h(th)l(e)g(c)l(o)-5 b(l)n(umn)47 b(m)l(u)-7 b(s)i(t)48 b(be)g(sy)7 b(nth)l(e)o(s)n(ize)l(d.)0 2708 y(Us)n(i)s(n)n(g)51 b(th)l(e)i(same)g(n)m(ot)s(a)-8 b(tio)l(n)51 b(as)i(a)l(bove)g(fo)-7 b(r)53 b(bas)n(is)g(i)s(nve)l(rs)m (e)g(c)l(o)-5 b(l)n(umns,)52 b(we)h(ha)-7 b(ve)2051 3221 y FG(B)2188 3152 y FA(\014)-13 b(1)2328 3221 y FG(a)2446 3246 y Fz(j)2531 3221 y FP(=)2672 2986 y FC(\024)2903 3101 y FP(\()9 b FG(B)3087 3040 y Fz(t)3145 3101 y FP(\))3195 3040 y FA(\014)-13 b(1)3658 3101 y FP(0)2760 3338 y(\014)9 b FG(B)2994 3277 y Fz(l)3047 3338 y FP(\()g FG(B)3231 3277 y Fz(t)3288 3338 y FP(\))3338 3277 y FA(\014)-13 b(1)3651 3338 y FG(I)3726 3277 y Fz(l)3778 2986 y FC(\025)3889 2937 y(")3987 3096 y FG(a)4104 3030 y Fz(t)4105 3136 y(j)3990 3339 y FG(a)4107 3273 y Fz(l)4108 3379 y(j)4160 2937 y FC(#)4298 3221 y FP(=)4439 2937 y FC(")4797 3096 y FP(\()9 b FG(B)4981 3036 y Fz(t)5038 3096 y FP(\))5088 3036 y FA(\014)-13 b(1)5227 3096 y FG(a)5344 3030 y Fz(t)5345 3136 y(j)4538 3339 y FG(a)4655 3273 y Fz(l)4656 3379 y(j)4739 3339 y FP(\014)41 b FG(B)5005 3279 y Fz(l)5058 3339 y FP(\()9 b FG(B)5242 3279 y Fz(t)5299 3339 y FP(\))5349 3279 y FA(\014)-13 b(1)5488 3339 y FG(a)5605 3273 y Fz(t)5606 3379 y(j)5661 2937 y FC(#)0 3730 y FP(Given)84 b(th)l(e)g(unscal)n(e)l (d)g(c)l(o)-5 b(l)n(umn)p 2377 3629 V 86 w FG(a)2506 3755 y Fz(j)2636 3730 y FP(fo)e(r)85 b(th)l(e)f(a)n(c)-5 b(tive)84 b(sys)-5 b(te)n(m)84 b(fr)q(o)n(m)h(\()-8 b(17\),)96 b FM(D)8 b(Y)g(L)g(P)90 b FP(g)n(en)n(e)l(ra)-8 b(te)o(s)83 b(th)l(e)h(n)n(ec)-6 b(e)o(s)h(sary)0 3949 y(c)l(oe)l(\002)-49 b(\002c)m(ients)52 b(fr)q(o)n(m)j FG(a)1490 3883 y Fz(l)1491 3990 y(j)1573 3949 y FP(\014)41 b FG(B)1839 3889 y Fz(l)1892 3949 y FP(\()9 b FG(B)2076 3889 y Fz(t)2134 3949 y FP(\))2184 3889 y FA(\014)-13 b(1)2323 3949 y FG(a)2440 3883 y Fz(t)2441 3990 y(j)2548 3949 y FP(by)53 b(calcu)l(la)-8 b(ti)s(n)n(g)53 b FG(a)3843 3883 y Fz(l)3844 3990 y(j)3926 3949 y FP(\014)41 b FG(B)4192 3889 y Fz(l)p 4245 3849 V 4247 3949 a FG(a)4375 3974 y Fz(j)4420 3949 y FP(.)249 4248 y(If)63 b(th)l(e)e(r)q(eq)l(u)l (e)o(s)-5 b(te)l(d)62 b(c)l(o)-5 b(l)n(umn)62 b(is)g(n)m(ot)f(a)n(c)-5 b(tive,)69 b FM(D)8 b(Y)g(L)g(P)68 b FP(\002rs)-5 b(t)62 b(g)n(en)n(e)l(ra)-8 b(te)o(s)61 b(th)l(e)h(po)-7 b(rtio)l(n)61 b(of)h(th)l(e)f(c)l(o)-5 b(l)n(umn)71 b FG(R)10 b(a)7372 4273 y Fz(j)7477 4248 y FP(tha)-8 b(t)0 4447 y(ma)g(tc)h(h)l(e)o(s)50 b(th)l(e)g(a)n(c)-5 b(tive)50 b(c)l(o)l(ns)-5 b(trai)s(nts,)50 b(and)f(th)l(en)g(pr)q(oc)-6 b(ee)l(ds)51 b(as)f(d)-5 b(e)o(sc)d(r)s(ibe)l(d)51 b(i)s(n)e(th)l(e)h(pr)q(evio)-5 b(u)e(s)50 b(paragra)-6 b(p)g(hs.)64 b(Ina)n(c-)0 4647 y(tive)d(l)n(og)t(ical)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(will)f(be)h (bas)n(ic)g(i)s(n)g(na)-8 b(t)l(ural)59 b(pos)n(itio)l(n,)j(h)l(enc)-6 b(e)p 4935 4546 V 62 w FG(a)5065 4672 y Fz(j)5155 4647 y FP(=)46 b FG(e)5406 4672 y Fz(j)5450 4647 y FP(;)65 b(this)c(is)g(d)-5 b(e)e(tec)i(te)l(d)61 b(as)g(a)g(s)-8 b(pec)m(i)s(al)0 4846 y(cas)m(e.)66 b(T)8 b(h)l(e)52 b(u)-7 b(s)m(e)l(r)53 b(is)g(ca)-8 b(u)l(tio)l(n)n(e)l(d)52 b(tha)-8 b(t)52 b(a)n(c)-5 b(tive)53 b(bas)n(ic)g(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s)h(ar)q(e)f FG(not)64 b FP(handl)n(e)l(d)52 b(as)h(a)g(s)-8 b(pec)m(i)s(al)53 b(cas)m(e.)249 5145 y(T)8 b(h)l(e)79 b(wo)-7 b(rk)79 b(r)q(eq)l(uir)q(e)l(d)g(to)g(g)n(en)n (e)l(ra)-8 b(te)79 b(a)h(r)q(ow)g FH(1)3495 5170 y Fz(i)3625 5145 y FP(of)g(th)l(e)f(bas)n(is)h(i)s(nve)l(rs)m(e)f(is)h(s)n(i)s(m)s (ilar)g(to)f(tha)-8 b(t)79 b(r)q(eq)l(uir)q(e)l(d)g(fo)-7 b(r)0 5344 y(a)70 b(c)l(o)-5 b(l)n(umn)72 b FH(1)947 5369 y Fz(j)991 5344 y FP(.)117 b(Given)69 b(th)l(e)h(scal)n(e)l(d)h (bas)n(is)f(i)s(nve)l(rs)m(e)3769 5313 y(\013)3733 5344 y FG(B)3870 5284 y FA(\014)-13 b(1)4056 5344 y FP(=)49 b(\()7 b FG(S)4380 5284 y Fz(B)4476 5344 y FP(\))4526 5284 y FA(\014)-13 b(1)4672 5344 y FG(B)4809 5284 y FA(\014)g(1)4955 5344 y FG(R)5092 5284 y FA(\014)g(1)5228 5344 y FP(,)74 b(th)l(e)c(unscal)n(e)l(d)g(r)q(ow)f(of)h(th)l(e)g(bas)n(is)0 5543 y(i)s(nve)l(rs)m(e)53 b(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g) 50 b(to)j(bas)n(ic)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)58 b FG(x)3292 5568 y Fz(j)3336 5543 y FP(,)53 b(bas)n(ic)h(fo)-7 b(r)53 b(r)q(ow)g FG(i)15 b FP(,)52 b(will)g(be)3012 5940 y FH(1)3111 5965 y Fz(i)3202 5940 y FP(=)43 b FG(e)3437 5965 y Fz(i)3494 5940 y FG(S)3612 5871 y Fz(B)3753 5909 y FP(\013)3717 5940 y FG(B)3854 5871 y FA(\014)-13 b(1)4001 5940 y FG(R)48 b FP(=)43 b FG(s)4413 5965 y Fz(j)17 b(j)4519 5892 y FP(\013)4509 5940 y FH(1)4608 5965 y Fz(i)4667 5940 y FG(R)0 6305 y FP(If)52 b(th)l(e)f(r)q(eq)l(u)l(e)o(s)-5 b(te)l(d)52 b(r)q(ow)f(is)h(n)m(ot)f(a)n(c)-5 b(tive,)52 b(th)l(e)f(bas)n(is)h(m)l(u)-7 b(s)i(t)52 b(be)g(e)-5 b(xtend)g(e)l(d)51 b(as)h(o)-5 b(u)l(tli)s(n)n(e)l(d)51 b(i)s(n)g(pr)q(evio)-5 b(u)e(s)52 b(paragra)-6 b(p)g(hs.)4 6505 y(D)8 b FM(Y)g(L)g(P)50 b FP(c)-8 b(r)q(ea)g(te)o(s)46 b(th)l(e)e(parti)s(ally)h(scal)n(e)l(d)g(r)q(ow)g(vec)-5 b(to)e(r)48 b FG(e)3585 6530 y Fz(i)3644 6505 y FG(B)3769 6444 y Fz(l)3829 6505 y FG(S)3947 6444 y Fz(B)4043 6505 y FP(,)e(calcu)l(la)-8 b(te)o(s)46 b(an)e(i)s(nte)l(r)5 b(me)l(di)s(a)-8 b(te)45 b(vec)-5 b(to)e(r)48 b FG(e)6914 6530 y Fz(i)6973 6505 y FG(B)7098 6444 y Fz(l)7158 6505 y FG(S)7276 6444 y Fz(B)7372 6505 y FP(\()7467 6473 y(\013)7431 6505 y FG(B)7556 6444 y Fz(t)7613 6505 y FP(\))7663 6444 y FA(\014)-13 b(1)0 6704 y FP(and)45 b(th)l(en)f(c)l(o)n(mpl)n(e)-7 b(te)o(s)47 b(th)l(e)e(calcu)l(la)-8 b(tio)l(n)44 b(by)h(pos)-5 b(tm)l(u)l(ltiplyi)s(n)n(g)41 b(by)54 b FG(R)f FP(to)45 b(r)q(e)n(move)g(th)l(e)g(r)q(ow)g(scali)s(n)n(g)f(s)-5 b(till)46 b(pr)q(e)o(s)m(ent)0 6903 y(i)s(n)53 b(\()311 6872 y(\013)275 6903 y FG(B)400 6843 y Fz(t)457 6903 y FP(\))507 6843 y FA(\014)-13 b(1)644 6903 y FP(.)249 7202 y(Re)-5 b(gr)q(e)e(tt)s(a)l(b)l(ly)-17 b(,)61 b(th)l(e)l(r)q(e')-5 b(s)60 b(n)m(o)f(easy)i(way)e(to)h(calcu)l(la)-8 b(te)p 3882 7101 V 62 w FG(a)3999 7227 y Fz(i)4050 7202 y FP(,)62 b(a)f(r)q(ow)e(of)i(th)l(e)f(transfo)-7 b(r)5 b(me)l(d)59 b(ma)-8 b(tr)s(ix)69 b FG(B)6977 7142 y FA(\014)-13 b(1)7125 7202 y FG(A)5 b FP(.)92 b(D)8 b FM(Y)g(L)g(P)0 7401 y FP(i)s(mpl)n(e)n(ments)63 b(this)h(o)-5 b(pe)l(ra)d(tio)l(n)62 b(as)p 2435 7300 V 66 w FG(a)2552 7426 y Fz(i)2649 7401 y FP(=)48 b FH(1)2896 7426 y Fz(i)2956 7401 y FG(A)5 b FP(.)99 b(T)8 b(h)l(e)64 b(calcu)l(la)-8 b(tio)l(n)62 b(is)i(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)64 b(entir)q(e)l(ly)f(i)s(n)h (th)l(e)f(o)-7 b(r)s(ig)t(i)s(nal)63 b(un-)0 7600 y(scal)n(e)l(d)53 b(sys)-5 b(te)n(m.)0 8193 y Fu(10.3)197 b(Rays)0 8612 y FP(In)43 b(s)m(eve)l(ral)f(as)-8 b(pec)j(ts,)46 b(rays)c(pr)q(ove)h (to)g(be)f(th)l(e)h(mos)-5 b(t)42 b(c)-7 b(hall)n(en)n(g)t(i)s(n)n(g)40 b(of)j(th)l(e)f(thr)q(ee)h(s)n(o)-5 b(l)n(u)l(tio)l(n)41 b(c)l(o)n(mpo)l(n)n(ents.)61 b(Car)q(e)l(fu)l(l)0 8812 y(a)-8 b(ttentio)l(n)49 b(to)i(s)n(ign)g(r)q(eve)l(rsals)g(is)g(r)q(eq) l(uir)q(e)l(d)g(fo)-7 b(r)51 b(both)f(pr)s(i)s(mal)h(and)g(d)-7 b(ual)50 b(rays,)h(and)g(th)l(e)f(virt)l(ual)h(na)-8 b(t)l(ur)q(e)50 b(of)h(th)l(e)0 9011 y(d)-7 b(ual)45 b(pr)q(o)-8 b(b)l(l)n(e)n(m)46 b(a)-6 b(dds)46 b(ye)-7 b(t)46 b(an)m(oth)l(e)l(r)f(laye)l(r)h(to)g(th)l(e)g(c)-7 b(hall)n(en)n(g)n(e)45 b(of)h(g)n(en)n(e)l(ra)-8 b(ti)s(n)n(g)43 b(c)l(oe)l(\002)-49 b(\002c)m(ients)46 b(fo)-7 b(r)46 b(i)s(na)n(c)-5 b(tive)46 b(po)-7 b(rtio)l(ns)0 9210 y(of)59 b(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)58 b(sys)-5 b(te)n(m.)84 b(T)8 b(h)l(e)59 b(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)60 b(i)s(mpl)n(e)n(mente)l(d)e(i)s(n)63 b FM(D)8 b(Y)g(L)g(P)65 b FP(will)58 b(r)q(e)-7 b(t)l(ur)5 b(n)59 b(all)g(rays)g(e)n(mana)-8 b(ti)s(n)n(g)57 b(fr)q(o)n(m)0 9409 y(th)l(e)52 b(curr)q(ent)h(e)-5 b(xtr)q(e)n(me)52 b(poi)s(nt)g(u)-6 b(p)53 b(to)g(a)g(li)s(m)s(it)g(s) -8 b(pec)m(i\002e)l(d)52 b(by)g(th)l(e)g(client.)249 9708 y(Fo)-7 b(r)63 b(a)g(pr)s(i)s(mal)f(ray)h FG(r)15 b FP(,)65 b(it)d(m)l(u)-7 b(s)i(t)63 b(be)g(th)l(e)f(cas)m(e)h(tha)-8 b(t)63 b FG(c)9 b(r)62 b FP(<)47 b(0,)65 b(and)f FG(a)4926 9733 y Fz(i)4975 9708 y FG(r)e FF(\243)45 b FP(0)63 b(fo)-7 b(r)63 b(a)f(`)p FF(\243)p FP(')g(c)l(o)l(ns)-5 b(trai)s(nt,)66 b FG(a)7109 9733 y Fz(i)7159 9708 y FG(r)61 b FF(\263)46 b FP(0)62 b(fo)-7 b(r)0 9907 y(a)72 b(`)p FF(\263)p FP(')e(c)l(o)l(ns) -5 b(trai)s(nt,)75 b(and)d FG(a)1837 9932 y Fz(i)1887 9907 y FG(r)65 b FP(=)49 b(0)71 b(fo)-7 b(r)72 b(ran)n(g)n(e)d(c)l(o)l (ns)-5 b(trai)s(nts)71 b(and)g(eq)l(ualitie)o(s.)120 b(T)8 b(h)l(e)71 b(t)s(as)-6 b(k)72 b(of)g(id)-5 b(entifyi)s(n)n(g)68 b(a)j(ray)0 10107 y(is)66 b(easy;)72 b(i)s(nd)-5 b(ee)l(d,)68 b(it')-5 b(s)65 b(a)h(s)n(i)s(mpli\002e)l(d)f(ve)l(rs)n(io)l(n)g(of)h (th)l(e)f(algo)-7 b(r)s(ithm)64 b(u)-7 b(s)m(e)l(d)66 b(to)f(s)m(e)l(l)n(ec)-5 b(t)66 b(th)l(e)f(l)n(ea)-7 b(vi)s(n)n(g)65 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(i)s(n)f(a)0 10306 y(pr)s(i)s(mal)50 b(pivot,)f(wh)l(e)l(r)q(e)g(th)l(e)g(o)l(nly)e (c)l(o)l(nc)-6 b(e)l(r)5 b(n)49 b(is)g(tha)-8 b(t)49 b(n)m(o)g(bas)n(ic)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)f(is)h(dr)s(iven)f(to)g (bo)-5 b(und.)63 b(Ge)-7 b(tti)s(n)n(g)49 b(th)l(e)g(s)n(ign)3771 11400 y(30)p eop end %%Page: 31 34 TeXDict begin 31 33 bop 0 466 a FP(r)s(ight)54 b(r)q(eq)l(uir)q(e)o(s)g (a)h(bit)f(of)h(th)n(o)-5 b(u)l(ght,)53 b(h)n(oweve)l(r)-10 b(.)69 b(T)8 b(h)l(e)55 b(r)q(e)l(l)n(ev)r(ant)f(ma)-8 b(th)l(e)n(ma)g(tics)53 b(is)i(s)-8 b(h)n(own)53 b(i)s(n)h(eq)l(ua)-8 b(tio)l(ns)54 b(\(9\))g(and)0 665 y(\()-8 b(10\);)52 b(\()-8 b(10\))52 b(is)h(r)q(e)-7 b(pea)f(te)l(d)53 b(h)l(e)l(r)q(e)f (fo)-7 b(r)53 b(c)l(o)l(nvenienc)-6 b(e:)2694 1084 y(\014)2817 850 y FC(\024)2913 983 y FG(B)3053 922 y FA(\0141)3206 983 y FG(a)3324 1008 y Fz(j)3010 1182 y FP(\014)r FG(e)3217 1207 y Fz(j)3368 850 y FC(\025)3478 1084 y FI(D)3610 1109 y Fz(j)3697 1084 y FP(=)41 b(\014)3961 850 y FC(\024)p 4087 882 117 7 v 4089 982 a FG(a)4216 1007 y Fz(j)4049 1182 y FP(\014)r FG(e)4256 1207 y Fz(j)4299 850 y FC(\025)4410 1084 y FI(D)4542 1109 y Fz(j)4629 1084 y FP(=)i FH(h)4884 1109 y Fz(j)4928 1084 y FI(D)5060 1109 y Fz(j)7495 1084 y FP(\(10\))0 1558 y(A)8 b(s)54 b(can)f(be)g(i)s(mme)l(di)s(a)-8 b(te)l(ly)52 b(s)m(een,)h FG(r)69 b FP(is)53 b(pr)q(ec)m(is)m(e)l(ly)h FH(h)3538 1583 y Fz(j)3624 1558 y FP(=)41 b(\014)3888 1424 y FC(\002)p 3957 1456 V 3959 1557 a FG(a)4087 1581 y Fz(j)4298 1556 y FP(\014)r FG(e)4505 1581 y Fz(j)4549 1424 y FC(\003)4618 1462 y Fx(>)4720 1558 y FP(;)54 b(th)l(e)e(o)-5 b(pe)l(ra)d(tio)l(ns)52 b(r)q(eq)l(uir)q(e)l(d)h(fo)-7 b(r)53 b(unscali)s(n)n(g)0 1758 y(ha)-7 b(ve)52 b(been)h(discu)-7 b(s)i(s)m(e)l(d)53 b(i)s(n)f(\24710.2.)249 2057 y(In)60 b(a)-6 b(dditio)l(n)59 b(to)h(th)l(e)g(o)-8 b(bvio)j(u)e(s)59 b(n)n(e)-5 b(ga)d(tio)l(n)59 b(r)q(eq)l(uir)q(e)l(d)g(to)h(pr)q(od)-7 b(u)i(c)f(e)62 b FH(h)4887 2082 y Fz(j)4931 2057 y FP(,)g(th)l(e)l(r)q (e)e(ar)q(e)g(two)f(oth)l(e)l(r)h(pos)-5 b(s)n(ib)l(l)n(e)60 b(n)n(e)-5 b(ga-)0 2256 y(tio)l(ns)52 b(to)h(c)l(o)l(ns)n(id)-5 b(e)l(r)-10 b(.)217 2652 y Fo(e)82 b FP(If)64 b(th)l(e)f(n)m(o)l(n)m (bas)n(ic)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)69 b FG(x)2502 2677 y Fz(j)2609 2652 y FP(is)64 b(a)n(c)-5 b(t)l(ually)62 b(d)-5 b(ec)d(r)q(eas)n(i)s(n)n(g)63 b(fr)q(o)n(m)g(its)h(u)-6 b(p)e(pe)l(r)63 b(bo)-5 b(und)64 b FG(u)6342 2677 y Fz(j)6386 2652 y FP(,)i(th)l(e)d(ray)g(m)l(u)-7 b(s)i(t)64 b(be)415 2851 y(n)n(e)-5 b(ga)d(te)l(d)52 b(to)h(c)l(o)n(mpensa)-8 b(te.)217 3165 y Fo(e)82 b FP(If)55 b(th)l(e)f(n)m(o)l(n)m(bas)n(ic)e (v)r(ar)s(i)s(a)l(b)l(l)n(e)j(is)f(a)h(l)n(og)t(ical)h FG(s)3361 3190 y Fz(i)3465 3165 y FP(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)54 b(with)f(a)i(`)p FF(\263)p FP(')e(c)l(o)l(ns)-5 b(trai)s(nt)53 b(i)s(n)h(th)l(e)g(o)-7 b(r)s(ig)t(i)s(nal)54 b(sys)-5 b(te)n(m,)419 3364 y FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)64 b(i)s(np)-5 b(u)l(t)61 b(transfo)-7 b(r)5 b(ma)-8 b(tio)l(ns)60 b(ha)-7 b(ve)62 b(c)l(o)l(nve)l(rte)l(d)h FG(a)4194 3389 y Fz(i)4249 3364 y FG(x)e FF(\263)47 b FG(b)4640 3389 y Fz(i)4736 3364 y FF(\336)e FP(\(\014)r FG(a)5202 3389 y Fz(i)5252 3364 y FP(\))5 b FG(x)60 b FF(\243)46 b FP(\(\014)r FG(b)5848 3389 y Fz(i)5897 3364 y FP(\))g FF(\336)f FP(\(\014)r FG(a)6459 3389 y Fz(i)6508 3364 y FP(\))5 b FG(x)50 b FP(+)36 b FG(s)6931 3389 y Fz(i)7027 3364 y FP(=)45 b(\(\014)r FG(b)7426 3389 y Fz(i)7476 3364 y FP(\))62 b(fo)-7 b(r)415 3564 y(0)37 b FF(\243)i FG(s)777 3589 y Fz(i)864 3564 y FF(\243)f(\245)p FP(.)64 b(T)8 b(h)l(e)46 b(i)s(nve)l(rs)m(e)h(c)l(o) l(nve)l(rts)f(\(\014)r FG(a)3171 3589 y Fz(i)3220 3564 y FP(\))5 b FG(x)43 b FP(+)29 b FG(s)3629 3589 y Fz(i)3716 3564 y FP(=)37 b(\(\014)r FG(b)4107 3589 y Fz(i)4157 3564 y FP(\))f FF(\336)j FG(a)4551 3589 y Fz(i)4606 3564 y FG(x)k FP(+)29 b FG(s)4963 3499 y Fx(0)4960 3604 y Fz(i)5048 3564 y FP(=)38 b FG(b)5288 3589 y Fz(i)5376 3564 y FF(\336)g FG(a)5683 3589 y Fz(i)5738 3564 y FG(x)52 b FF(\263)39 b FG(b)6112 3589 y Fz(i)6209 3564 y FP(fo)-7 b(r)47 b(\014)p FF(\245)38 b(\243)h FG(s)6949 3499 y Fx(0)6946 3604 y Fz(i)7033 3564 y FF(\243)e FP(0.)64 b(Wha)-8 b(t)415 3763 y(a)i(p)e(pears)54 b(to)g(be)g(a)h(sla)n(c)-8 b(k)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(i)s(nc)-8 b(r)q(eas)n(i)s(n)n(g) 53 b(fr)q(o)n(m)h(its)g(l)n(owe)l(r)g(bo)-5 b(und)52 b(is)j(a)n(c)-5 b(t)l(ually)52 b(a)j(s)-8 b(urpl)n(u)h(s)54 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)415 3962 y(d)-5 b(ec)d(r)q(eas)n(i)s(n)n (g)52 b(fr)q(o)n(m)h(its)g(u)-6 b(p)e(pe)l(r)52 b(bo)-5 b(und;)52 b(a)n(cc)l(o)-7 b(r)q(di)s(n)n(gly)-17 b(,)51 b(th)l(e)h(ray)g(m)l(u)-7 b(s)i(t)53 b(be)g(n)n(e)-5 b(ga)d(te)l(d.)249 4358 y(T)8 b(h)l(e)l(r)q(e')-5 b(s)76 b(n)m(o)g(n)n(ee)l(d)g(to)h(sy)7 b(nth)l(e)o(s)n(ize)75 b(th)l(e)h(c)l(o)n(mpo)l(n)n(ents)g(of)i FH(h)4505 4383 y Fz(j)4626 4358 y FP(tha)-8 b(t)76 b(wo)-5 b(u)l(ld)75 b(be)i(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)76 b(with)g(i)s(na)n(c)-5 b(tive)0 4557 y(c)l(o)l(ns)g(trai)s(nts.)97 b(By)63 b(d)-5 b(e)l(\002)s(nitio)l(n,)64 b(th)l(e)f(bas)n(ic)h(v)r(ar)s(i)s(a)l(b)l (l)n(e)g(fo)-7 b(r)64 b(an)f(i)s(na)n(c)-5 b(tive)63 b(c)l(o)l(ns)-5 b(trai)s(nt)63 b(is)g(th)l(e)g(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)63 b(l)n(og)t(ical.)0 4756 y(T)8 b(h)l(e)52 b(ray)h FG(r)68 b FP(c)l(o)l(nt)s(ai)s(ns)53 b(o)l(nly)e(th)l(e)h(c)l(o)n(mpo)l(n)n(ents)g(as)-5 b(s)n(oc)m(i)s(a)d (te)l(d)53 b(with)e(ar)q(c)-7 b(hitec)i(t)l(ural)52 b(v)r(ar)s(i)s(a)l (b)l(l)n(e)o(s.)249 5055 y(Fo)-7 b(r)59 b(a)g(d)-7 b(ual)58 b(ray)h FG(r)15 b FP(,)60 b(it)f(m)l(u)-7 b(s)i(t)59 b(be)g(th)l(e)f(cas)m(e)h(tha)-8 b(t)58 b FG(r)17 b(b)51 b FP(<)45 b(0)59 b(and)f FG(r)25 b(A)50 b FF(\263)44 b FP(0)59 b(fo)-7 b(r)59 b(th)l(e)f(tru)l(e)g(d)-7 b(ual)58 b(pr)q(o)-8 b(b)l(l)n(e)n(m.)82 b(Unfo)-7 b(r)11 b(-)0 5255 y(t)l(una)-8 b(te)l(ly)-17 b(,)57 b(as)h(o)-5 b(u)l(tli)s(n)n(e)l (d)57 b(i)s(n)g(\24710.1,)h(th)l(e)g(pr)s(i)s(mal)f(\226)h(d)-7 b(ual)57 b(transfo)-7 b(r)5 b(m)57 b(i)s(mpl)n(e)n(mente)l(d)f(i)s(n)62 b FM(D)8 b(Y)g(L)g(P)63 b FP(doe)o(s)58 b(n)m(ot)e(ma)-8 b(tc)h(h)0 5454 y(th)l(e)73 b(id)-5 b(eal,)79 b(and)73 b(this)g(i)s(ntr)q(od)-7 b(u)i(c)f(e)o(s)72 b(c)l(o)n(mplica)-8 b(tio)l(ns.)127 b(Neith)l(e)l(r)72 b(ma)-8 b(th)l(e)n(ma)g(tical)72 b(te)o(s)-5 b(t)74 b(is)g(g)n(uarantee)l(d)e(to)i(wo)-7 b(rk)0 5653 y(unl)n(e)o(s)i(s)63 b(th)l(e)f(d)-7 b(ual)62 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)62 b(with)f(tight)h(i)s(mplic)m(it)g(bo)-5 b(und)61 b(c)l(o)l(ns)-5 b(trai)s(nts)62 b(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)64 b(n)m(o)l(n)m(bas)n(ic)d(pr)s(i)s(mal)0 5852 y(v)r(ar)s(i)s(a)l(b)l(l)n (e)o(s\))53 b(ar)q(e)h(handl)n(e)l(d)d(e)-5 b(xplic)m(itly)-17 b(.)249 6151 y(A)8 b(s)80 b(with)f(pr)s(i)s(mal)h(rays,)86 b(th)l(e)80 b(t)s(as)-6 b(k)80 b(of)g(id)-5 b(entifyi)s(n)n(g)77 b(a)k(d)-7 b(ual)79 b(ray)g(is)h(easy)-17 b(,)87 b(a)81 b(s)n(i)s(mpli\002e)l(d)e(ve)l(rs)n(io)l(n)h(of)g(th)l(e)0 6350 y(algo)-7 b(r)s(ithm)48 b(u)-7 b(s)m(e)l(d)49 b(to)h(s)m(e)l(l)n (ec)-5 b(t)49 b(th)l(e)g(l)n(ea)-7 b(vi)s(n)n(g)48 b(d)-7 b(ual)49 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(i)s(n)g(a)h(d)-7 b(ual)48 b(pivot.)64 b(T)8 b(h)l(e)49 b(o)l(nly)f(c)l(o)l(nc)-6 b(e)l(r)5 b(n)48 b(is)h(tha)-8 b(t)49 b(n)m(o)f(d)-7 b(ual)0 6550 y(bas)n(ic)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(be)f(dr)s (iven)f(to)h(bo)-5 b(und.)64 b(Agai)s(n,)52 b(it')-5 b(s)52 b(g)n(e)-7 b(tti)s(n)n(g)51 b(th)l(e)h(s)n(ign)h(r)s(ight)e(tha) -8 b(t)52 b(r)q(eq)l(uir)q(e)o(s)h(s)n(o)n(me)g(th)n(o)-5 b(u)l(ght.)249 6849 y(A)8 b(s)53 b(discu)-7 b(s)i(s)m(e)l(d)53 b(i)s(n)g(\2472,)g(th)l(e)f(vec)-5 b(to)e(r)p 2689 6748 V 56 w FG(a)2806 6874 y Fz(k)2945 6849 y FP(is)53 b(th)l(e)g(pr)q(o)-5 b(pe)l(r)52 b(s)-5 b(t)s(arti)s(n)n(g)52 b(poi)s(nt;)g(th)l(e)g(i)s (niti)s(al)h(n)n(e)-5 b(ga)d(tio)l(n)51 b(whic)-7 b(h)52 b(wo)-5 b(u)l(ld)0 7048 y(n)m(o)e(r)5 b(mally)44 b(be)i(r)q(eq)l(uir)q (e)l(d)g(is)g(b)-8 b(uilt)45 b(i)s(n)g(by)h FD(N)q(B)3006 6988 y FA(\014)-13 b(1)3179 7048 y FP(=)36 b(\014)9 b FG(B)3561 6988 y FA(\014)-13 b(1)3706 7048 y FG(N)17 b FP(.)64 b(T)8 b(h)l(e)46 b(o)-5 b(pe)l(ra)d(tio)l(ns)44 b(r)q(eq)l(uir)q(e)l(d)i(fo)-7 b(r)46 b(unscali)s(n)n(g)e(ha)-7 b(ve)45 b(been)0 7247 y(discu)-7 b(s)i(s)m(e)l(d)62 b(i)s(n)h (\24710.2.)93 b(It')-5 b(s)63 b(n)n(ec)-6 b(e)o(s)h(sary)63 b(to)f(a)-6 b(dd)62 b(a)h(c)l(oe)l(\002)-49 b(\002c)m(ient)61 b(of)h(1.0)g(fo)-7 b(r)63 b(th)l(e)f(n)m(o)l(n)m(bas)n(ic)f(d)-7 b(ual)61 b(tha)-8 b(t')j(s)61 b(dr)s(ivi)s(n)n(g)0 7446 y(th)l(e)52 b(ray)-17 b(.)249 7745 y(T)8 b(h)l(e)l(r)q(e)52 b(ar)q(e)i(thr)q(ee)e(oth)l(e)l(r)g(s)n(o)-5 b(ur)q(c)f(e)o(s)53 b(of)g(n)n(e)-5 b(ga)d(tio)l(n)51 b(to)i(c)l(o)l(ns)n(id)-5 b(e)l(r:)217 8141 y Fo(e)82 b FP(If)71 b(th)l(e)g(ente)l(r)s(i)s(n)n(g) e(d)-7 b(ual)70 b(is)h(a)-6 b(p)e(par)q(ently)70 b(d)-5 b(ec)d(r)q(eas)n(i)s(n)n(g)70 b(beca)-8 b(u)h(s)m(e)71 b(it')-5 b(s)70 b(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)71 b(with)e(a)i(l)n(ea)-7 b(vi)s(n)n(g)70 b(pr)s(i)s(mal)415 8340 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)60 b(tha)-8 b(t')j(s)58 b(d)-5 b(ec)d(r)q(eas)n(i)s(n)n(g)59 b(to)h(its)f(u)-6 b(p)e(pe)l(r)59 b(bo)-5 b(und)58 b(\(and)h(h)l(enc)-6 b(e)59 b(m)l(u)-7 b(s)i(t)60 b(ha)-7 b(ve)59 b(a)h(n)n(e)-5 b(ga)d(tive)59 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)59 b(c)l(os)-5 b(t)415 8540 y(wh)l(en)51 b(it)i(bec)l(o)n(me)o(s)h(n)m(o)l(n)m(bas)n (ic\),)d(th)l(e)h(ray)g(m)l(u)-7 b(s)i(t)53 b(be)g(n)n(e)-5 b(ga)d(te)l(d)52 b(to)h(c)l(o)n(mpensa)-8 b(te.)217 8854 y Fo(e)82 b FP(If)63 b(th)l(e)e(ray)h(is)g(d)-5 b(e)l(r)s(ive)l(d)63 b(fr)q(o)n(m)f(a)g(`)p FF(\263)p FP(')g(c)l(o)l(ns)-5 b(trai)s(nt)61 b(i)s(n)h(th)l(e)f(o)-7 b(r)s(ig)t(i)s(nal)62 b(sys)-5 b(te)n(m,)64 b(th)l(e)e(c)l(oe)l(\002)-49 b(\002c)m(ients)61 b(of)h(th)l(e)f(c)l(o)l(n-)415 9053 y(s)-5 b(trai)s(nt)58 b(ha)-7 b(ve)57 b(been)g(n)n(e)-5 b(ga)d(te)l(d;)59 b(this)e(is)h(enc)l (od)-5 b(e)l(d)57 b(i)s(n)g(th)l(e)g(r)q(ow)g(scali)s(n)n(g.)79 b(Howeve)l(r)-9 b(,)58 b(as)g(n)m(ote)l(d)e(fo)-7 b(r)58 b(pr)s(i)s(mal)415 9252 y(rays,)77 b(th)l(e)72 b(l)n(og)t(ical)h(m)l(u) -7 b(s)i(t)72 b(r)q(eally)g(be)h(i)s(nte)l(rpr)q(e)-7 b(te)l(d)72 b(as)h(a)g(s)-8 b(urpl)n(u)h(s)72 b(v)r(ar)s(i)s(a)l(b)l(l) n(e)h(with)e(an)h(u)-6 b(p)e(pe)l(r)72 b(bo)-5 b(und)71 b(of)415 9451 y(ze)l(r)q(o,)61 b(and)f(if)g(it')-5 b(s)59 b(bas)n(ic)i(fo)-7 b(r)60 b(this)g(r)q(ow)f(we)h(ha)-7 b(ve)59 b(th)l(e)h(cas)m(e)g(d)-5 b(e)o(sc)d(r)s(ibe)l(d)60 b(i)s(n)g(th)l(e)f(pr)q(evio)-5 b(u)e(s)60 b(ite)n(m.)87 b(T)8 b(h)l(e)59 b(ray)415 9651 y(m)l(u)-7 b(s)i(t)53 b(be)g(n)n(e)-5 b(ga)d(te)l(d.)217 9965 y Fo(e)82 b FP(A)8 b(s)59 b(e)-5 b(xplai)s(n)n(e)l(d)58 b(i)s(n)g(\24710.1,)i(if)e(an)h(i) s(ndivid)-7 b(ual)56 b(ray)j(c)l(oe)l(\002)-49 b(\002c)m(ient)57 b(c)l(o)-7 b(rr)q(e)o(s)f(po)l(nds)58 b(to)g(a)h(v)r(ar)s(i)s(a)l(b)l (l)n(e)g(tha)-8 b(t)58 b(is)g(n)m(o)l(n-)415 10164 y(bas)n(ic)h(a)-8 b(t)59 b(its)g(u)-6 b(p)e(pe)l(r)58 b(bo)-5 b(und,)59 b(th)l(e)f(ray)g(c)l(oe)l(\002)-49 b(\002c)m(ient)58 b(m)l(u)-7 b(s)i(t)59 b(be)f(n)n(e)-5 b(ga)d(te)l(d)58 b(if)h(th)l(e)f(client)g(has)h(r)q(eq)l(u)l(e)o(s)-5 b(te)l(d)59 b(th)l(e)415 10363 y(tru)l(e)53 b(d)-7 b(ual)52 b(s)n(ign)g(c)l(o)l(nventio)l(n.)3771 11400 y(31)p eop end %%Page: 32 35 TeXDict begin 32 34 bop 0 466 a FL(11)238 b(Start)-6 b(u)e(p)4 949 y FM(D)8 b(Y)g(L)g(P)88 b FP(pr)q(ovid)-5 b(e)o(s)82 b(a)g(c)l(o)-5 b(ld,)89 b(war)5 b(m,)89 b(and)82 b(h)n(ot)g(s)-5 b(t)s(art)82 b(ca)-6 b(pa)l(bility)-17 b(.)153 b(Fo)-7 b(r)83 b(a)f(c)l(o)-5 b(ld)82 b(s)-5 b(t)s(art,)94 b FM(D)8 b(Y)g(L)g(P)87 b FP(s)m(e)l(l)n(ec)-5 b(ts)83 b(a)g(s)m(e)-7 b(t)82 b(of)0 1149 y(c)l(o)l(ns)-5 b(trai)s(nts)78 b(and)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(to)f(be)g(th)l (e)f(i)s(niti)s(al)h(a)n(c)-5 b(tive)79 b(c)l(o)l(ns)-5 b(trai)s(nt)78 b(sys)-5 b(te)n(m)79 b(and)f(th)l(en)g(c)-8 b(ras)g(h)l(e)o(s)79 b(a)h(bas)n(is.)0 1348 y(Fo)-7 b(r)73 b(a)g(war)5 b(m)72 b(s)-5 b(t)s(art,)81 b FM(D)8 b(Y)g(L)g(P)79 b FP(e)-5 b(xpec)g(ts)73 b(tha)-8 b(t)71 b(th)l(e)h(call)n(e)l(r)h (will)f(s)-8 b(u)i(p)e(ply)71 b(a)i(bas)n(is)g(b)-8 b(u)l(t)71 b(as)-5 b(s)d(ume)o(s)73 b(tha)-8 b(t)72 b(th)l(e)g(a)n(c)-5 b(tive)0 1547 y(c)l(o)l(ns)g(trai)s(nt)81 b(sys)-5 b(te)n(m)81 b(and)g(oth)l(e)l(r)g(da)-8 b(t)s(a)82 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o (s)82 b(n)n(ee)l(d)g(to)f(be)h(b)-8 b(uilt)81 b(to)h(this)f(s)-8 b(pec)m(i\002ca)g(tio)l(n.)150 b(Fo)-7 b(r)82 b(a)g(h)n(ot)0 1746 y(s)-5 b(t)s(art,)75 b FM(D)8 b(Y)g(L)g(P)72 b FP(as)-5 b(s)d(ume)o(s)68 b(tha)-8 b(t)66 b(its)g(i)s(nte)l(r)5 b(nal)66 b(da)-8 b(t)s(a)67 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)67 b(ar)q(e)g(v)r(alid)f(e)-5 b(xc)f(e)f(pt)68 b(fo)-7 b(r)67 b(pos)-5 b(s)n(ib)l(l)n(e)67 b(modi\002ca)-8 b(tio)l(ns)0 1946 y(to)56 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(bo)-5 b(unds,)56 b(o)-8 b(bj)l(ec)j(tive)56 b(c)l(oe)l(\002)-49 b(\002c)m(ients,)56 b(o)-7 b(r)56 b(r)s(ight-hand-s)n(id)-5 b(e)55 b(c)l(oe)l(\002)-49 b(\002c)m(ients.)74 b(It)57 b(will)e(i)s(nc)l(o)-7 b(rpo)g(ra)f(te)55 b(th)l(e)o(s)m(e)0 2145 y(modi\002ca)-8 b(tio)l(ns)51 b(and)h(c)l(o)l(nti)s(n)n(u)l(e)g(with)g(s)n(i)s(mpl)n(e)-5 b(x)53 b(ite)l(ra)-8 b(tio)l(ns.)253 2444 y FM(D)8 b(Y)g(L)g(P)81 b FP(will)75 b(d)-5 b(e)l(fa)d(u)l(lt)75 b(to)g(a)-8 b(tte)n(mpti)s(n)n(g)74 b(a)i(h)n(ot)f(s)-5 b(t)s(art)76 b(unl)n(e)o(s)-5 b(s)76 b(s)-8 b(pec)m(i\002cally)75 b(r)q(eq)l(u)l(e)o(s)-5 b(te)l(d)75 b(to)h(pe)l(r)5 b(fo)-7 b(r)5 b(m)76 b(a)g(war)5 b(m)0 2643 y(o)-7 b(r)68 b(c)l(o)-5 b(ld)67 b(s)-5 b(t)s(art.)110 b(Fo)-7 b(r)67 b(all)h(thr)q(ee)f(s)-5 b(t)s(art)68 b(type)o(s,)75 b FM(D)8 b(Y)g(L)g(P)73 b FP(will)66 b(ev)r(al)n(ua)-8 b(te)68 b(th)l(e)f(c)l(o)l(ns)-5 b(trai)s(nt)66 b(sys)-5 b(te)n(m)67 b(fo)-7 b(r)68 b(pr)s(i)s(mal)g (and)0 2842 y(d)-7 b(ual)52 b(feas)n(ibility)-17 b(,)52 b(c)-7 b(h)n(oos)n(i)s(n)n(g)52 b(pr)s(i)s(mal)h(s)n(i)s(mpl)n(e)-5 b(x)53 b(unl)n(e)o(s)-5 b(s)53 b(th)l(e)f(c)l(o)l(ns)-5 b(trai)s(nt)51 b(sys)-5 b(te)n(m)52 b(is)h(d)-7 b(ual)52 b(feas)n(ib)l(l)n(e)h(and)f(pr)s(i)s(mal)0 3042 y(i)s(nfeas)n(ib)l(l)n (e.)249 3340 y(It)c(is)f(n)m(ot)f(pos)-5 b(s)n(ib)l(l)n(e)48 b(to)f(pe)l(r)5 b(fo)-7 b(r)5 b(m)47 b(e)l(\002)-49 b(\002c)m(ient)47 b(and)f(foo)-5 b(lpr)q(oof)47 b(c)-7 b(h)l(ec)f(ks)47 b(to)g(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)48 b(if)f(th)l(e)g(client)g (has)g(vio)-5 b(la)d(te)l(d)0 3540 y(th)l(e)67 b(r)q(e)o(s)-5 b(tr)s(ic)g(tio)l(ns)67 b(i)s(mpos)m(e)l(d)g(fo)-7 b(r)68 b(a)g(h)n(ot)f(s)-5 b(t)s(art.)110 b(At)68 b(m)s(i)s(ni)s(m)l(um,)j(s) -8 b(u)j(c)e(h)67 b(a)h(c)-7 b(h)l(ec)f(k)67 b(wo)-5 b(u)l(ld)66 b(r)q(eq)l(uir)q(e)i(a)f(c)l(oe)l(\002)-49 b(\002c)m(ient)0 3739 y(by)72 b(c)l(oe)l(\002)-49 b(\002c)m(ient)71 b(c)l(o)n(mpar)s(is)n(o)l(n)g(of)h(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)72 b(sys)-5 b(te)n(m)71 b(s)-8 b(u)i(p)e(plie)l(d)71 b(as)i(a)g(parame)-7 b(te)l(r)73 b(with)e(th)l(e)g(c)l(o)-5 b(py)72 b(h)l(e)l(ld)0 3938 y(by)82 b FM(D)8 b(Y)g(L)g(P)85 b FP(fr)q(o)n(m)79 b(th)l(e)g(pr)q(evio)-5 b(u)e(s)79 b(call.)144 b(It)79 b(is)g(th)l(e)g(r)q(e)o(s)-8 b(po)l(ns)n(ibility)77 b(of)i(th)l(e)g(client)f(to)h(n)m(otify)i FM(D)8 b(Y)g(L)g(P)85 b FP(if)79 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)0 4137 y(bo)-5 b(unds,)61 b(o)-8 b(bj)l(ec)j(tive)60 b(c)l(oe)l(\002)-49 b(\002c)m(ients,)61 b(o)-7 b(r)60 b(r)s(ight-hand-s)n(id)-5 b(e)59 b(c)l(oe)l(\002)-49 b(\002c)m(ients)59 b(ha)-7 b(ve)60 b(been)g(c)-7 b(han)n(g)n(e)l(d.)89 b FM(D)8 b(Y)g(L)g(P)66 b FP(will)59 b(scan)0 4337 y(fo)-7 b(r)53 b(c)-7 b(han)n(g)n(e)o(s)52 b(and)g(u)-6 b(pda)e(te)52 b(its)h(c)l(o)-5 b(py)52 b(of)h(th)l(e)f(c)l(o)l(ns)-5 b(trai)s(nt)52 b(sys)-5 b(te)n(m)52 b(o)l(nly)g(if)h(th)l(e)f(client)g (i)s(ndica)-8 b(te)o(s)53 b(a)g(c)-7 b(han)n(g)n(e.)249 4636 y(Sec)i(tio)l(n)52 b(17)g(pr)q(ovid)-5 b(e)o(s)53 b(d)-5 b(e)e(t)s(ail)n(e)l(d)53 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)51 b(o)l(n)h(th)l(e)h(o)-5 b(ptio)l(ns)51 b(u)-7 b(s)m(e)l(d)53 b(to)g(c)l(o)l(ntr)q(o)-5 b(l)55 b FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)54 b(s)-5 b(t)s(art)l(u)f(p)53 b(a)n(c)-5 b(tio)l(ns.)249 4934 y(T)8 b(h)l(e)63 b(s)-5 b(t)s(art)l(u)f(p)63 b(s)m(eq)l(u)l(enc)-6 b(e)63 b(fo)-7 b(r)67 b FM(D)8 b(Y)g(L)g(P)69 b FP(is)63 b(s)-8 b(h)n(own)61 b(i)s(n)i(Fig)n(ur)q(e)f(2.)96 b(T)8 b(h)l(e)63 b(\002rs)-5 b(t)63 b(a)n(c)-5 b(tio)l(ns)62 b(ar)q(e)h(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)l(d)63 b(by)g(th)l(e)0 5134 y(p)-5 b(urpos)m(e)71 b(of)g(th)l(e)g(call.)122 b(T)8 b(h)l(e)71 b(call)g(may)h(be)f(s)n(o)-5 b(l)n(e)l(ly)71 b(to)g(fr)q(ee)h(r)q(e)-7 b(t)s(ai)s(n)n(e)l(d)72 b(da)-8 b(t)s(a)72 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s;)81 b(if)71 b(s)n(o,)76 b(this)71 b(is)h(do)l(n)n(e)0 5333 y(and)66 b(th)l(e)g(call)g(r)q(e)-7 b(t)l(ur)5 b(ns.)106 b(T)8 b(h)l(e)66 b(n)n(e)-5 b(xt)66 b(a)n(c)-5 b(tio)l(n)65 b(is)h(to)h(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)67 b(th)l(e)e(type)h (of)h(s)-5 b(t)s(art)67 b(\227)f(h)n(ot,)j(war)5 b(m,)69 b(o)-7 b(r)67 b(c)l(o)-5 b(ld)66 b(\227)0 5532 y(r)q(eq)l(u)l(e)o(s)-5 b(te)l(d)54 b(by)g(th)l(e)g(client.)70 b(If)55 b(a)f(war)5 b(m)54 b(o)-7 b(r)55 b(c)l(o)-5 b(ld)54 b(s)-5 b(t)s(art)55 b(is)f(r)q(eq)l(u)l(e)o(s)-5 b(te)l(d,)55 b(any)f(s)-5 b(t)s(a)d(te)54 b(r)q(e)-7 b(t)s(ai)s(n)n(e)l(d)56 b(fr)q(o)n(m)e(th)l (e)g(pr)q(evio)-5 b(u)e(s)0 5731 y(call)56 b(is)h(u)-7 b(s)m(e)l(l)n(e)o(s)i(s)57 b(and)f(all)g(r)q(e)-7 b(t)s(ai)s(n)n(e)l(d) 57 b(da)-8 b(t)s(a)57 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)56 b(ar)q(e)h(fr)q(ee)l(d.)76 b(Fo)-7 b(r)57 b(all)f(thr)q(ee)g(type)o(s)g (of)h(s)-5 b(t)s(art,)58 b(o)-5 b(ptio)l(ns)55 b(and)0 5931 y(to)-5 b(l)n(e)l(ranc)f(e)o(s)53 b(ar)q(e)g(u)-6 b(pda)e(te)l(d)52 b(to)h(r)q(e)l(\003)n(ec)-5 b(t)53 b(th)l(e)g(parame)-7 b(te)l(rs)53 b(s)-8 b(u)i(p)e(plie)l(d)52 b(by)g(th)l(e)g(client.)249 6230 y(Fo)-7 b(r)59 b(a)g(war)5 b(m)58 b(o)-7 b(r)59 b(c)l(o)-5 b(ld)58 b(s)-5 b(t)s(art,)60 b(th)l(e)e(c)l(o)l(ns)-5 b(trai)s(nt)58 b(sys)-5 b(te)n(m)58 b(is)h(e)-5 b(xam)s(i)s(n)n(e)l(d)59 b(to)f(s)m(ee)h(if)g(it)f(s)-8 b(h)n(o)j(u)l(ld)57 b(be)i(scal)n(e)l(d,)i(and)0 6429 y(th)l(e)c(o)-5 b(ptio)l(ns)57 b(s)-8 b(pec)m(i\002e)l(d)57 b(by)g(th)l(e)h(client)f(ar)q(e)h(e)-5 b(xam)s(i)s(n)n(e)l(d)58 b(to)g(s)m(ee)g(if)g(scali)s(n)n(g)f(is)h(pe)l(r)5 b(m)s(itte)l(d.)80 b(If)58 b(this)g(as)-5 b(s)m(e)o(s)g(sment)0 6628 y(d)g(e)e(te)l(r)5 b(m)s(i)s(n)n(e)o(s)61 b(tha)-8 b(t)59 b(scali)s(n)n(g)g(is)i(a)-6 b(dvisa)l(b)l(l)n(e)60 b(and)f(pe)l(r)5 b(m)s(itte)l(d,)62 b(th)l(e)d(c)l(o)l(ns)-5 b(trai)s(nt)59 b(sys)-5 b(te)n(m)60 b(is)g(scal)n(e)l(d)h(as)f(d)-5 b(e)o(sc)d(r)s(ibe)l(d)0 6827 y(i)s(n)65 b(\2479.)101 b(T)8 b(h)l(e)65 b(o)-7 b(r)s(ig)t(i)s(nal)64 b(c)l(o)l(ns)-5 b(trai)s(nt)64 b(sys)-5 b(te)n(m)64 b(is)h(ca)n(c)-7 b(h)l(e)l(d)64 b(and)h(r)q(e)-7 b(pla)n(c)h(e)l(d)65 b(by)f(th)l(e)g(scal)n(e)l(d)i(c) l(o)-5 b(py)-17 b(.)101 b(In)65 b(th)l(e)f(cas)m(e)h(of)0 7027 y(a)k(h)n(ot)e(s)-5 b(t)s(art,)73 b(th)l(e)68 b(e)-5 b(x)10 b(is)-5 b(ti)s(n)n(g)67 b(scal)n(e)l(d)h(c)l(o)-5 b(py)-17 b(,)72 b(if)c(pr)q(e)o(s)m(ent,)k(is)c(r)q(e)-7 b(tr)s(ieve)l(d)69 b(fo)-7 b(r)69 b(u)-7 b(s)m(e.)111 b(T)8 b(h)l(e)68 b(o)-7 b(r)s(ig)t(i)s(nal)68 b(sys)-5 b(te)n(m)68 b(is)g(n)m(ot)0 7226 y(c)l(o)l(ns)-8 b(u)l(lte)l(d)51 b(agai)s(n)h(until)g(th)l(e)g(s)n(o)-5 b(l)n(u)l(tio)l(n)51 b(is)i(pa)n(c)-8 b(kag)n(e)l(d)51 b(fo)-7 b(r)53 b(r)q(e)-7 b(t)l(ur)5 b(n)53 b(to)f(th)l(e)h(client.)249 7525 y(Fo)-5 b(ll)n(owi)s(n)n(g)80 b(scali)s(n)n(g,)88 b(th)l(e)81 b(a)n(c)-5 b(tive)82 b(c)l(o)l(ns)-5 b(trai)s(nt)81 b(sys)-5 b(te)n(m)82 b(is)g(c)l(o)l(ns)-5 b(tru)g(c)g(te)l(d)81 b(fo)-7 b(r)82 b(a)g(war)5 b(m)81 b(o)-7 b(r)83 b(c)l(o)-5 b(ld)81 b(s)-5 b(t)s(art,)90 b(o)-7 b(r)0 7724 y(modi\002e)l(d)68 b(fo)-7 b(r)70 b(a)f(h)n(ot)g(s)-5 b(t)s(art;)78 b(\247\24711.1)68 b(\226)i(11.3)e(d)-5 b(e)o(sc)d(r)s(ibe)70 b(th)l(e)e(a)n(c)-5 b(tio)l(ns)69 b(i)s(n)f(d)-5 b(e)e(t)s(ail.)115 b(At)69 b(th)l(e)g(c)l(o)n(mpl)n(e)-7 b(tio)l(n)69 b(of)g(this)0 7923 y(a)n(c)-5 b(tivity)-17 b(,)47 b(th)l(e)f(a)n(c)-5 b(tive)46 b(c)l(o)l(ns)-5 b(trai)s(nt)45 b(sys)-5 b(te)n(m)46 b(is)g(as)-5 b(s)m(e)o(s)g(s)m(e)l(d)47 b(fo)-7 b(r)46 b(pr)s(i)s(mal)g(and)g(d)-7 b(ual)45 b(feas)n(ibility)h(and)g(an)f(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)0 8122 y(s)n(i)s(mpl)n(e)j(x)53 b(p)-6 b(has)m(e)53 b(is)g(c)-7 b(h)n(os)m(en.)249 8421 y(Onc)h(e)54 b(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)52 b(sys)-5 b(te)n(m)54 b(is)g(c)l(o)l(ns)-5 b(tru)g(c)g(te)l(d,)53 b(c)l(o)n(mmo)l(n)h(i)s(niti)s(alisa)-8 b(tio)l(n)52 b(a)n(c)-5 b(tio)l(ns)53 b(ar)q(e)h(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d:)68 b(Da)-8 b(t)s(a)0 8621 y(s)j(tru)g(c)g(t)l(ur)q(e)o (s)81 b(ar)q(e)g(i)s(niti)s(alis)m(e)l(d)e(fo)-7 b(r)81 b(PSE)f(and)g(DSE)f(pr)s(ic)m(i)s(n)n(g,)86 b(fo)-7 b(r)81 b(th)l(e)f(pe)l(rt)l(urba)-8 b(tio)l(n-bas)m(e)l(d)79 b(antid)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)0 8820 y(algo)e(r)s(ithm,)52 b(and)g(fo)-7 b(r)53 b(th)l(e)g(pivot)f(r)q(ej)l(ec)-5 b(tio)l(n)52 b(algo)-7 b(r)s(ithm.)249 9119 y(T)r(o)58 b(c)l(o)n(mpl)n(e)-7 b(te)58 b(th)l(e)f(s)-5 b(t)s(art)l(u)f(p)58 b(s)m(eq)l(u)l(enc)-6 b(e,)63 b FM(D)8 b(Y)g(L)g(P)63 b FP(ev)r(al)n(ua)-8 b(te)o(s)58 b(th)l(e)f(c)l(o)l(ns)-5 b(trai)s(nt)57 b(sys)-5 b(te)n(m)57 b(and)g(client)g(o)-5 b(ptio)l(ns)56 b(to)0 9318 y(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)71 b(if)f(it)f(s)-8 b(h)n(o)j(u)l(ld)69 b(pe)l(r)5 b(fo)-7 b(r)5 b(m)70 b(c)l(o)l(ns)-5 b(trai)s(nt)69 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)69 b(o)-7 b(r)70 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(a)n (c)-5 b(tiv)r(a)d(tio)l(n)69 b(o)-7 b(r)70 b(d)-5 b(ea)n(c)g(tiv)r(a)d (tio)l(n)68 b(be)l(fo)-7 b(r)q(e)0 9517 y(s)i(t)s(arti)s(n)n(g)55 b(s)n(i)s(mpl)n(e)-5 b(x)57 b(ite)l(ra)-8 b(tio)l(ns.)74 b(V)-11 b(ar)s(i)s(a)l(b)l(l)n(e)57 b(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l (n)54 b(is)i(m)l(u)l(t)l(ually)f(e)-5 b(xcl)n(u)e(s)n(ive)57 b(to)f(c)l(o)l(ns)-5 b(trai)s(nt)55 b(and)h(v)r(ar)s(i)s(a)l(b)l(l)n(e) 0 9717 y(a)n(c)-5 b(tiv)r(a)d(tio)l(n;)56 b(th)l(e)f(fo)-7 b(r)5 b(me)l(r)56 b(is)h(c)l(o)l(ns)n(id)-5 b(e)l(r)q(e)l(d)55 b(o)l(nly)f(d)-7 b(ur)s(i)s(n)n(g)54 b(a)j(c)l(o)-5 b(ld)55 b(s)-5 b(t)s(art,)58 b(th)l(e)d(la)-8 b(tte)l(r)56 b(o)l(nly)e(d)-7 b(ur)s(i)s(n)n(g)54 b(a)j(war)5 b(m)55 b(o)-7 b(r)56 b(h)n(ot)0 9916 y(s)-5 b(t)s(art.)249 10215 y(An)79 b(i)s(niti)s(al)h (r)q(o)-5 b(und)78 b(of)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)78 b(is)i(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)80 b(d)-7 b(ur)s(i)s(n)n(g)78 b(a)i(c)l(o)-5 b(ld)80 b(s)-5 b(t)s(art)80 b(if)g(th)l(e)f(n)n(umbe)l(r)g(of)0 10414 y(a)n(c)-5 b(tive)61 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(e)-5 b(xc)f(ee)l(ds)62 b(th)l(e)f(n)n(umbe)l(r)f(s)-8 b(pec)m(i\002e)l(d)60 b(by)h(th)l(e)g FJ(coldv)l(ar)s(s)f FP(o)-5 b(ptio)l(n.)89 b(T)8 b(his)61 b(a)n(c)-5 b(tivity)60 b(is)h(i)s(ntend)-5 b(e)l(d)60 b(to)3771 11400 y(32)p eop end %%Page: 33 36 TeXDict begin 33 35 bop 0 9547 a @beginspecial 70 @llx 265 @lly 435 @urx 787 @ury 3650 @rwi @setspecial %%BeginDocument: /devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/startupflow.eps %!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/startup.epsu %%Creator: IslandDraw for lou %%CreationDate: Sat Sep 10 09:05:11 2005 %%Pages: 1 %%BoundingBox: 70 265 435 787 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 457 653 1 1306 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000076 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000003f % 000000000000000000000000000000000000000000000000000000008000400000000000000000 % 00000000000000000000000000000000000068 % 000000000000000000000000000000000000000000000000000000008000400000000000000000 % 00000000000000000000000000000000000066 % 00000000000000000000000000000000000000000000000000000035ef1ff00000000000000000 % 00000000000000000000000000000000000068 % 000000000000000000000000000000000000000000000000000000489088400000000000000000 % 00000000000000000000000000000000000006 % 000000000000000000000000000000000000000000000000000000748388400000000000000000 % 00000000000000000000000000000000000079 % 0000000000000000000000000000000000000000000000000000000c8c88400000000000000000 % 00000000000000000000000000000000000078 % 000000000000000000000000000000000000000000000000000000449188400000000000000000 % 00000000000000000000000000000000000079 % 00000000000000000000000000000000000000000000000000000078eedc700000000000000000 % 00000000000000000000000000000000000078 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000079 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000078 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000079 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000075 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000075 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000075 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000075 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000006d % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000062 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000001fc0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 00000000000000000000000000000000000067 % 000000000000000000000000000000000000000000000000000000000f80000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000000000000005d % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000700000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000fffffffffff80000000000007ff % ffffffffffffffffffffffff8000000000005c % 000000000000000000000000000000000000000000000000001fffffffffffc0000000000007ff % ffffffffffffffffffffffff8000000000005c % 000000000000000000000000000000000000000000000000003000000000006000000000000600 % 00000000000000000000000180000000000014 % 000000000000000000000000000000000000000000000000006000000000003000000000000600 % 0000000000000000000000018000000000005c % 00000000000000000000000000000000000000000000000000c000000000001800000000000600 % 00000000000000000000000180000000000006 % 000000000000000000000000000000000000000000000000018000000000000c00000000000600 % 0000000000000000000000018000000000001f % 000000000000000000000000000000000000000000000000030000600000000600000000000600 % 0380000000000080000600018000000000005c % 000000000000000000000000000000000000000000000000060000200000000300000000000600 % 0400000000080080000200018000000000005c % 0000000000000000000000000000000000000000000000000c0000200000000180000000000600 % 0400000000080000000200018000000000005c % 0000000000000000000000000000000000000000000000001807dc270f0d3800c0000000000600 % 0ef9c701f71ef1b70e3e00018000000000005c % 00000000000000000000000000000000000000000000000030023e2f90927c0060000000000600 % 0443ef808f8908989f6200018000000000001e % 00000000000000000000000000000000000000000000000060022028039d400030000000000600 % 0442080088083890904200018000000000005f % 000000000000000000000000000000000000000000000000c00220280c83400018000000000600 % 044208008808c8909042000180000000000000 % 0000000000000000000000000000000000000000000000018002322c919164000c000000000600 % 04432c808c8918909946000180000000000001 % 00000000000000000000000000000000000000000000000300071c770ede380006000000000600 % 0ee1c701c70eedf9ce3b00018000000000005c % 0000000000000000000000000000000000000000000000060000000000000000030000001c0600 % 0000000000000000000000018000000000005c % 00000000000000000000000000000000000000000000000c0000000000000000018000001f8600 % 0000000000000000000000018000000000005c % 000000000000000000000000000000000000000000000018000000000000000000c000001ff600 % 0000000000000000000000018000000000005c % 0000000000000000000000000000000000000000000000300000000000000000007ffffffffe00 % 000000000000000000000001ffffffe0000000 % 000000000000000000000000000000000000000000000038000000000000000000fffffffffe00 % 000000000000000000000001ffffffe0000064 % 00000000000000000000000000000000000000000000001c000000000000000001c000001fe600 % 00000000000000000000000180000020000000 % 00000000000000000000000000000000000000000000000e0000003000003800038000001f0601 % 8000000000000000000000018000002000005c % 000000000000000000000000000000000000000000000007000000100000c40007000000180600 % 8010000020000010000000018000002000003f % 00000000000000000000000000000000000000000000000380000010000084000e000000000600 % 8010000020000010000000018000002000005c % 000000000000000000000000000000000000000000000001c001af13bf1f04001c0d800000060f % 8f3cf00d7fc84f3c85f386818000002000005c % 000000000000000000000000000000000000000000000000e00259911f88080038048000000618 % 909108122218d8918c87c9018000002000005c % 0000000000000000000000000000000000000000000000007003b091a808100070050000000610 % 8390381d2208501084840e818000002000005c % 00000000000000000000000000000000000000000000000038007090a8081000e0030000000610 % 8c90c80322085010848401818000002000005c % 0000000000000000000000000000000000000000000000001c023190cc883001c0020000000611 % 919118112208d8908c86488180000020000058 % 0000000000000000000000000000000000000000000000000e03cf38471c30038002000000060e % cedcec1e3f076f1c77c38f018000002000007f % 0000000000000000000000000000000000000000000000000700000000000007000c0000000600 % 0000000000000000000000018000002000000f % 000000000000000000000000000000000000000000000000038000000000000e00000000000600 % 0000000000000000000000018000002000000f % 00000000000000000000000000000000000000000000000001c000000000001c00000000000600 % 0000000000000000000000018000002000000f % 00000000000000000000000000000000000000000000000000e000000000003800000000000600 % 0000000000000000000000018000002000000e % 000000000000000000000000000000000000000000000000007000000000007000000000000600 % 000000000000000000000001800001fe00000f % 00000000000000000000000000000000000000000000000000380000000000e000000000000600 % 000000000000000000000001800001fe00000f % 000000000000000000000000000000000000000000000000001fffffffffffc0000000000007ff % ffffffffffffffffffffffff800001fc000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 000000000000000000000000000001fc00000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 000000000000000000000000000000fc00000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 000000000000000000000000000000f800000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 000000000000000000000000000000f800000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000007800007f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000007000000e % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000007000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000003000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000002000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000001fc0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000080000003a % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000080000003a % 000000000000000000000000000000000000000000000000000000000f80000000000000000000 % 00000000000000000000000001f71e84fee03a % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 000000000000000000000000008f898c431000 % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000088088442103a % 000000000000000000000000000000000000000000000000000000000700000000000000000000 % 00000000000000000000000000880884421000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 000000000000000000000000008c888c42103a % fffffffffffffffffffffffffff000000000000000007ffffffffffffffffffffffffff8000000 % 00000000000000000000000001c70e76e73818 % fffffffffffffffffffffffffff000000000000000007ffffffffffffffffffffffffff8000000 % 0000000000000000000000000000000000001e % 800000000000000000000000003000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000001e % 800000000000000000000000003000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000001e % 800000000000000000000000003000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000001e % 800000000000000000000000003000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000001e % 8000700000000000200000c0003000003000000000006000000c00000000080000000018000000 % 0000000000000000000000000000000000001e % 8000800000000200200000400030000010c0000000006000000401000000080000000018000000 % 0000000000000000000000000000000000001e % 800080000000020000000040003000001040000000006000000401000000000000000018000000 % 0000000000000000000000000000000000001e % 8001df70e07ce79e66e387c0003000e393c036ddefb06000007c73ce7dbb1b70e0000018000000 % 0000000000000000000000000000000000001e % 800088f9f021f2212317cc40003001145440126284c8600000c4f91f20cc8989f0000018000000 % 0000000000000000000000000000000000001e % 800088810021020722140840003001045440169e84886000008481102088890900000018000000 % 0000000000000000000000000000000000001e % 8000888100210219221408400030011c54401fa284886000008481102088890900000018000000 % 0000000000000000000000000000000000001e % 800088c990219223221648c0003000e3bbe8091fcfdc6000008cc9192088890990000018000000 % 0000000000000000000000000000000000001e % 8001dc70e070e39df73b8760003000000008000000006000007671ce71dddf9ce0000018000000 % 0000000000000000000000000000000000001e % 80000000000000000000000000301c000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000001e % 8000000000000000000000000030fc000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000001e % 8000000000000000000000000037fc000000000000006000000000000000000000000018000000 % 00000000000000000000000000000000000008 % 800000000000000000000000003fffffffffffffffffe000000000000000000000000018000000 % 00000000000000000000000000000000000000 % 800000000000000000000000003fffffffffffffffffe000000000000000000000000018000000 % 0000000000000000000000000000000000005a % 8000000000000000000000000033fc000000000000006000000000000000000000000018000000 % 00000000000000000000000000000000000000 % 80300000000000000000000000307c0000000000000060000000000000e0000000000018000000 % 00000000000000000000000000000000000000 % 80100200000800000200000000300c000000000000006000100000000100020001000018000000 % 00000000000000000000000000000000000000 % 801002000008000002000000003000000000000000006000100000000100020001000018000000 % 00000000000000000000000000000000000000 % 81f1e79e01bef909e7a13ee0d030000000000000000060003fbee380f380d79e7fc00018000000 % 00000000000000000000000000000000000000 % 831212210248431b126311f1203000000000000000006000111737c19901222121000018000000 % 00000000000000000000000000000000000000 % 8210720703a8410a02211101d03000000000000000006000119214010901d20721000018000000 % 00000000000000000000000000000000000069 % 821192190068410a0221110030300000000000000000600010a214010900321921000018000000 % 00000000000000000000000000000000000064 % 823232230228411b1223119110300000000000000000600010a236411901122321000018000000 % 00000000000000000000000000000000000073 % 81d9db9d83cee0ede39db8e1e030000000000000000060001c43e380f381e39df1c00018000000 % 00000000000000000000000000000000000076 % 800000000000000000000000003000000000000000006000004200000000000000000018000000 % 0000000000000000000000000000000000003f % 80000000000000000000000000300000000000000000600001c200000000000000000018000000 % 00000000000000000000000000000000000068 % 800000000000000000000000003000000000000000006000030700000000000000000018000000 % 00000000000000000000000000000000000066 % 800000000000000000000000003000000000000000006000000000000000000000000018000000 % 00000000000000000000000000000000000068 % 800000000000000000000000003000000000000000006000000000000000000000000018000000 % 00000000000000000000000000000000000006 % 800000000000000000000000003000000000000000006000000000000000000000000018000000 % 00000000000000000000000000000000000079 % fffffffffffffffffffffffffff000000000000000007ffffffffffffffffffffffffff8000000 % 00000000000000000000000000000000000078 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000079 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000078 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000079 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000078 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000079 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000073 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000075 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000073 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000075 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000073 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000075 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000073 % 000000000000060000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000075 % 0000000000000600000000000000000000000000000000000000000c0300000000000000000000 % 00000000000000000000000000000000000073 % 0000000000000600000000000000000000000000000000000000000f8300000000000000000000 % 0000000000000000000000000000000000006d % 0000000000000600000000000000000000000000000000000000000ff300000000000000000000 % 0000000000000000000000000000000000005c % 00000000000007ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 % 0000000000000000000000000000000000005c % 00000000000007ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000 % 0000000000000000000000000000000000005c % 0000000000000000000000000000000000000000000000000000000ffb00000000000000000000 % 0000000000000000000000000000000000005c % 0000000000000000000000000000000000000000000000000000000fc300000000000000000000 % 0000000000000000000000000000000000005c % 0000000000000000000000000000000000000000000000000000000e0300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000062 % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000001fc0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000f80000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 00000000000000000000000000000000000067 % 000000000000000000000000000000000000000000000000000000000700000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005d % 000000000000000000000000000000000000000000007ffffffffffffffffffffffffff8000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000007ffffffffffffffffffffffffff8000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 00000000000000000000000000000000000014 % 000000000000000000000000000000000000000000006000000600000000000800000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000200400000010800000018000000 % 00000000000000000000000000000000000006 % 000000000000000000000000000000000000000000006000000200400000010000000018000000 % 0000000000000000000000000000000000001f % 0000000000000000000000000000000000000000000060216e3e3cf380f373d9e6e0d018000000 % 0000000000000000000000000000000000005c % 00000000000000000000000000000000000000000000606373624247c19b990b33112018000000 % 0000000000000000000000000000000000005c % 00000000000000000000000000000000000000000000602121420e440109090a1211d018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006021214232440109090a12103018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006023234646464119190a32111018000000 % 0000000000000000000000000000000000001e % 00000000000000000000000000000000000000000000601dbe3b3b7380f1f1dde739e018000000 % 0000000000000000000000000000000000005f % 000000000000000000000000000000000000000000006000200000000001000000000018000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000006000200000000001000000000018000000 % 00000000000000000000000000000000000001 % 000000000000000000000000000000000000000000006000700000000003800000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000600006000000000000018000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000006000000202002000000000000018000000 % 00000000000000000000000000000000000064 % 000000000000000000000000000000000000000000006000000202002000000000000018000000 % 00000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000601e6e3e079e271f78dc79c1a018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006021316202332f888462c7e24018000000 % 0000000000000000000000000000000000003f % 0000000000000000000000000000000000000000000060072142022128081c428203a018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006019214202212808644282006018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006023214602232c888c42c7222018000000 % 0000000000000000000000000000000000005c % 00000000000000000000000000000000000000000000601df3bb039e771c76e779c3c018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 00000000000000000000000000000000000058 % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000007f % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000006000000000000000000000000018000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000007ffffffffffffffffffffffffff8000000 % 0000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000007f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000001fc0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000f80000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000700000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 00000000000000000000000000000000000000000007ffffffffffffffffffffffffffff800000 % 0000000000000000000000000000000000003a % 00000000000000000000000000000000000000000007ffffffffffffffffffffffffffff800000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000018 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000001e % 0000000000000000000000000000000000000000000400040040200c40000c0000060000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040004004420044000040000020000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000400040000040000020000800000 % 0000000000000000000000000000000000001e % 00000000000000000000000000000000000000000004000cdccf63c4c69c0478f1e20000800000 % 0000000000000000000000000000000000001e % 00000000000000000000000000000000000000000004000462442424493e04cd8a120000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040004424420e44ea0048500720000800000 % 0000000000000000000000000000000000001e % 0000000000000000000000000000000000000000000400044244232441a0048501920000800000 % 0000000000000000000000000000000000001e % 0000000000000000000000000000000000000000000400044244246448b2048d8a320000800000 % 0000000000000000000000000000000000001e % 00000000000000000000000000000000000000000004000ee7e773beef1c0e78f1df0000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000008 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000040000000000010000000000000000800000 % 0000000000000000000000000000000000005a % 000000000000000000000000000000000000000000040000000400010010000001000000800000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000040000000400000010000001000000800000 % 00000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000479e6e0df7de36e3c0d7737ce6ec0800000 % 00000000000000000000000000000000000000 % 00000000000000000000000000000000000000000004c7331124221131101222491f3320800000 % 00000000000000000000000000000000000000 % 00000000000000000000000000000000000000000004821211d4207121101d3275102220800000 % 00000000000000000000000000000000000000 % 00000000000000000000000000000000000000000004821210342191211003140d102220800000 % 00000000000000000000000000000000000000 % 00000000000000000000000000000000000000000004c632111422312110111445192220800000 % 00000000000000000000000000000000000069 % 0000000000000000000000000000000000000000000479e739e771dbf39c1e0879ce7770800000 % 00000000000000000000000000000000000064 % 000000000000000000000000000000000000000000040000000000000000000800000000800000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000040000000000000000003800000000800000 % 00000000000000000000000000000000000076 % 000000000000000000000000000000000000000000040000000000000000006000000000800000 % 0000000000000000000000000000000000003f % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000068 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000066 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000068 % 000000000000000000000000000000000000000000040000000080000620000400000000800000 % 00000000000000000000000000000000000006 % 000000000000000000000000000000000000000000040000000100000220000400000000800000 % 00000000000000000000000000000000000079 % 000000000000000000000000000000000000000000040000000200000200003200000000800000 % 00000000000000000000000000000000000078 % 00000000000000000000000000000000000000000004000000021a79e266e1c200000000800000 % 00000000000000000000000000000000000079 % 000000000000000000000000000000000000000000040000000224c61223122200000000800000 % 00000000000000000000000000000000000078 % 00000000000000000000000000000000000000000004000000023a807222122200000000800000 % 00000000000000000000000000000000000079 % 00000000000000000000000000000000000000000004000000020681922211c200000000800000 % 00000000000000000000000000000000000078 % 000000000000000000000000000000000000000000040000000222c63222120200000000800000 % 00000000000000000000000000000000000079 % 00000000000000000000000000000000000000000004000000023c79df773be200000000800000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000040000000200000000023200000000800000 % 00000000000000000000000000000000000075 % 000000000000000000000000000000000000000000040000000100000000063400000000800000 % 00000000000000000000000000000000000073 % 00000000000000000000000000000000000000000004000000000000000003c000000000800000 % 00000000000000000000000000000000000075 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000075 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000040000000000000000000000000000800000 % 00000000000000000000000000000000000075 % 00000000000000000000000000000000000000000007ffffffffffffffffffffffffffff800000 % 00000000000000000000000000000000000073 % 00000000000000000000000000000000000000000007ffffffffffffffffffffffffffff800000 % 0000000000000000000000000000000000006d % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000062 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff % fffffffffffffff80000000000000000000067 % 0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff % fffffffffffffff8000000000000000000005c % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000005d % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000005c % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000c00000000000000005c % 0000000000000000000000c3000800000000000000000000000000000300000000000000000000 % 0000000000000008000430000000000000005c % 0000000000000000000000c1001000000000000000000000000000000300000000000000000000 % 0000000000000008000410000000000000005c % 0000000000000000000000c167380000000000000000000000000000030db73fec000000000000 % 00000000000000081ce4f0000000000000005c % 0000000000000000000000c1989000000000000000000000000000000304989132000000000000 % 00000000000000082315100000000000000014 % 0000000000000000000000c1189000000000000000000000000000000305a79122000000000000 % 0000000000000008211510000000000000005c % 0000000000000000000000c1189000000000000000000000000000000307e89122000000000000 % 00000000000000082315100000000000000006 % 0000000000000000000000c3bf1c0000000000000000000000000000030247fbf7000000000000 % 00000000000000081ceef8000000000000001f % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000005c % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000005c % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000005c % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000005c % 0000000000000000000007f8000000000000000000000000000000001fe0000000000000000000 % 000000000000007f800000000000000000001e % 0000000000000000000007f8000000000000000000000000000000001fe0000000000000000000 % 000000000000007f800000000000000000005f % 0000000000000000000007f8000000000000000000000000000000001fe0000000000000000000 % 000000000000007f0000000000000000000000 % 0000000000000000000003f0000000000000000000000000000000000fc0000000000000000000 % 000000000000007f0000000000000000000001 % 0000000000000000000003f0000000000000000000000000000000000fc0000000000000000000 % 000000000000003f000000000000000000005c % 0000000000000000000003f0000000000000000000000000000000000fc0000000000000000000 % 000000000000003e000000000000000000005c % 0000000000000000000001e0000000000000000000000000000000000780000000000000000000 % 000000000000003e000000000000000000005c % 0000000000000000000001e0000000000000000000000000000000000780000000000000000000 % 000000000000001e000000000000000000005c % 0000000000000000000001e0000000000000000000000000000000000780000000000000000000 % 000000000000001c0000000000000000000000 % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 000000000000001c0000000000000000000064 % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 000000000000000c0000000000000000000000 % 000000001ffffffffffffffffffffffffffe000000007ffffffffffffffffffffffffff8000000 % 01ffffffffffffffffffffffffffe00000005c % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000003f % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000005c % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000005c % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000005c % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000005c % 000000001800000000000380000000000002000000006000000000000e00000000000018000000 % 0100000000000038000000000000600000005c % 000000001800000000000400000000000002000000006000000000001000000000000018000000 % 01000000000000400000000000006000000058 % 000000001800000000000400000000000002000000006000000000001000000000000018000000 % 0100000000000040000000000000600000007f % 00000000180000006e71fe79f6ec00000002000000006000000371c7f9e7dbb000000018000000 % 010000000dc73ee79fdd80000000600000000f % 000000001800000073f884cc83320000000200000000600000039be213320cc800000018000000 % 010000000e6f904cc86640000000600000000f % 00000000180000002180848482220000000200000000600000010a021212088800000018000000 % 0100000004281048484440000000600000000f % 00000000180000002180848482220000000200000000600000010a021212088800000018000000 % 0100000004281048484440000000600000000e % 000000001800000023c8848c82220000000200000000600000011b221232088800000018000000 % 01000000046c9048c84440000000600000000f % 00000000180000003e71ce79c777000000020000000060000001f1c739e71ddc00000018000000 % 0100000007c738e79ceee0000000600000000f % 000000001800000020000000000000000002000000006000000100000000000000000018000000 % 01000000040000000000000000006000000000 % 000000001800000020000000000000000002000000006000000100000000000000000018000000 % 0100000004000000000000000000600000000f % 000000001800000070000000000000000002000000006000000380000000000000000018000000 % 010000000e000000000000000000600000000f % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000000f % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000000f % 000000001800000100000000000000000002000000006000000000000000000000000018000000 % 0100000000060600000000000000600000007f % 000000001800000300010002000100000002000000006000000000000000100008000018000000 % 0100000000020200080004000000600000000e % 000000001800000100010002000100000002000000006000000000000000100008000018000000 % 0100000000020200080004000000600000000f % 000000001800000170f3c0d79e7fc000000200000000600007eef3fbb006bde3fe000018000000 % 01000000f1e23e035e79ff000000600000003a % 0000000018000001899901222121000000020000000060000245090cc809121108000018000000 % 010000018b326204888484000000600000003a % 0000000018000001090901d207210000000200000000600003643908880e907108000018000000 % 0100000102124207481c84000000600000003a % 00000000180000010909003219210000000200000000600001a8c9088801919108000018000000 % 0100000102124200c86484000000600000003a % 00000000180000010919011223210000000200000000600001b119088808923108000018000000 % 010000018a324604488c84000000600000003a % 00000000180000039cf1c1e39df1c00000020000000060000090ef9ddc0f1ddb8e000018000000 % 01000000f1e73b078e77c7000000600000003a % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000003a % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000003a % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000003a % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000003a % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000003a % 000000001800000000000000000000000002000000006000000000000000000000000018000000 % 0100000000000000000000000000600000003a % 000000001ffffffffffffffffffffffffffe000000007ffffffffffffffffffffffffff8000000 % 01ffffffffffffffffffffffffffe00000003a % 000000001ffffffffffffffffffffffffffe000000007ffffffffffffffffffffffffff8000000 % 01ffffffffffffffffffffffffffe00000003a % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 00000000000000080000000000000000000000 % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000003a % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 00000000000000080000000000000000000000 % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000003a % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 00000000000000080000000000000000000018 % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c0000000000000000000000000000000000300000000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c00000000000000000000000000000000f0303c00000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c00000000000000000000000000000000fe31fc00000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000c00000000000000000000000000000000fffffc00000000000000000 % 0000000000000008000000000000000000001e % 0000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff % fffffffffffffff8000000000000000000001e % 0000000000000000000000000000000000000000000000000000000fffffc00000000000000000 % 0000000000000000000000000000000000001e % 0000000000000000000000000000000000000000000000000000000fe31fc00000000000000000 % 0000000000000000000000000000000000001e % 0000000000000000000000000000000000000000000000000000000f0303c00000000000000000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000000000000000080300400000000000000000 % 0000000000000000000000000000000000001e % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000008 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000069 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000064 % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 00000000000000000000000000000000000073 % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 00000000000000000000000000000000000076 % 000000000000000000000000000000000000000000000000000000001fc0000000000000000000 % 0000000000000000000000000000000000003f % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 00000000000000000000000000000000000068 % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 00000000000000000000000000000000000066 % 000000000000000000000000000000000000000000000000000000000f80000000000000000000 % 00000000000000000000000000000000000068 % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 00000000000000000000000000000000000006 % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 00000000000000000000000000000000000079 % 000000000000000000000000000000000000000000000000000000000700000000000000000000 % 00000000000000000000000000000000000078 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000079 % 00000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffe00000000000000000000000000078 % 00000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffe00000000000000000000000000079 % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000078 % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000079 % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000073 % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000075 % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000073 % 000000000000000000000000000018000000000000000000000000000000000000400808000000 % 00000000600000000000000000000000000075 % 000000000000000000000000000018000000000000000000000000040002000004400908000000 % 00000000600000000000000000000000000073 % 000000000000000000000000000018000000000000000000000000040002000004000100000000 % 00000000600000000000000000000000000075 % 0000000000000000000000000000180000000003cf3763761e6e01af78ff81e3cfcefbd8e1a400 % 00000000600000000000000000000000000073 % 000000000000000000000000000018000000000639999199333102448442021624444909f24400 % 00000000600000000000000000000000000075 % 000000000000000000000000000018000000000410911111212103a41c4200740446890903a000 % 00000000600000000000000000000000000073 % 000000000000000000000000000018000000000410911111212100646442019404428909006000 % 0000000060000000000000000000000000006d % 000000000000000000000000000018000000000631911111232102248c42023624430909922400 % 0000000060000000000000000000000000005c % 0000000000000000000000000000180000000003cf3bbbbb9e7383c776e381dbc7e11ddce3c400 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 00000000000000000000000000001800000c000000000800006000018030300000000000000100 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000004010000000800002000008010100000000004000100 % 10000000600000000000000000000000000062 % 000000000000000000000000000018000004010000000000002000008010100000000004000000 % 1000000060000000000000000000000000005c % 00000000000000000000000000001800007c73ce7dbb1b70e023c78f8f1711c078f370df7cf337 % 3c68000060000000000000000000000000005c % 0000000000000000000000000000180000c4f91f20cc8989f0266858909993e0c5998924210918 % 9090000060000000000000000000000000005c % 000000000000000000000000000018000084811020888909002421d083909200810909d4203910 % 90e8000060000000000000000000000000005c % 000000000000000000000000000018000084811020888909002426508c9092008109083420c910 % 9018000060000000000000000000000000005c % 00000000000000000000000000001800008cc91920888909902468d191919320c5190914211910 % 9088000060000000000000000000000000005c % 00000000000000000000000000001800007671ce71dddf9ce073c76ecedf39c078f39de770efb9 % dcf0000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000067 % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005d % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 0000000000000000000000000000180000000180000010060600000200201006200003e1f3f800 % 0003000060000000000000000000000000005c % 000000000000000000000000000018000000008000001002020000020022100220000112111800 % 0001000060000000000000000000000000005c % 000000000000000000000000000018000000008000000002020000000002000200000112090400 % 00010000600000000000000000000000000014 % 000000000000000000000000000018000f1b8f81dfcfb1e2e2706a066e67b1e2634e011381201e % 371f000060000000000000000000000000005c % 00000000000000000000000000001800108c58808c24121332f8920231221212249f01e0f1e021 % 18b10000600000000000000000000000000006 % 0000000000000000000000000000180003885080d0e410721280e8022122107227500100092007 % 10a1000060000000000000000000000000001f % 000000000000000000000000000018000c88508053241192128018022122119220d00102090419 % 10a1000060000000000000000000000000005c % 00000000000000000000000000001800118851806464123232c88a022122123224590183110823 % 10a3000060000000000000000000000000005c % 000000000000000000000000000018000edceec023be39dbe770f20773f3b9df778e0383e3f81d % b9dd800060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000002000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000001e % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005f % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000000 % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000001 % 000000000000000000000000000018000fc1f3f800008010000000040000000010000040000000 % 0003000060000000000000000000000000005c % 000000000000000000000000000018000462111800008010000000040002000010000840000000 % 0001000060000000000000000000000000005c % 000000000000000000000000000018000432090400000000001800000002000000000800000000 % 0001000060000000000000000000000000005c % 0000000000000000000000000000180004138120373f8f36e0e00dccefe783e731c79ecf37000f % 371f000060000000000000000000000000005c % 000000000000000000000000000018000410f1e03990989311100e644732010f93ec4859988010 % 98b10000600000000000000000000000000000 % 000000000000000000000000000018000410092010909012111004246a12010812080850908003 % 90a10000600000000000000000000000000064 % 00000000000000000000000000001800043209041090901210e004242a1201081208085090800c % 90a10000600000000000000000000000000000 % 000000000000000000000000000018000423110811909892110404643232010c932c4851908811 % 90a3000060000000000000000000000000005c % 000000000000000000000000000018000fc3e3f81f39cf3f39f407ce11e3838711c78eef39c80e % f9dd800060000000000000000000000000003f % 000000000000000000000000000018000000000010000000011c04000000000010000000000800 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000010000000031804000000000050000000000000 % 0000000060000000000000000000000000005c % 00000000000000000000000000001800000000003800000001e00e0000000000e0000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000005c % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 00000000600000000000000000000000000058 % 000000000000000000000000000018000000000030000100000300000003000000106000000000 % 0000000060000000000000000000000000007f % 000000000000000000000000000018000000800010002100000100000001000002102000000000 % 0000000060000000000000000000000000000f % 000000000000000000000000000018000000800010002000000100000001000002002000600000 % 0000000060000000000000000000000000000f % 0000000000000000000000000000181b8e3fe42f971e7b3cdc0173c1ae1f03c6e7b3e3839c6e38 % fbc79dc060000000000000000000000000000f % 0000000000000000000000000000181cdf108c6419a1216662019c225f310423121627c47e317c % 442c488060000000000000000000000000000e % 000000000000000000000000000018085010842410872142423d08e3b02100e212142404602140 % 40e80c8060000000000000000000000000000f % 00000000000000000000000000001808501084241099214242010b207021032212142403a02140 % 4328050060000000000000000000000000000f % 00000000000000000000000000001808d910846411a3214642011c623923046212146644322164 % 446c4500600000000000000000000000000000 % 0000000000000000000000000000180f8e38e3be1f1dbbbce701f3b3ce1d83b73bbbb387dc73b8 % e3b7820060000000000000000000000000000f % 000000000000000000000000000018080000000000000000000000000000000000000004600000 % 0000020060000000000000000000000000000f % 00000000000000000000000000001808000000000000000000000000000000000000000c600000 % 00000e0060000000000000000000000000000f % 0000000000000000000000000000181c0000000000000000000000000000000000000007800000 % 0000180060000000000000000000000000000f % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000007f % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000000e % 000000000000000000000000000018000000000000000000000000000000000000000000000000 % 0000000060000000000000000000000000000f % 00000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffe0000000000000000000000000003a % 00000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffe0000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffff % ff000000000000000000000000000000000018 % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 000000000000000000000000000000000002000300000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 00000000000000000000000000000000000200010c000000000000000000000000000000000000 % 0100000000030004000000000000000000001e % 000000000000000000000000000000000002000104000000000000000000000000000000000000 % 0100000000010008000000000000000000001e % 0000000000000000000000000000000000020e713c000000000000000000000000000000000000 % 0106df3df601639c000000000000000000001e % 000000000000000000000000000000000002118944000000000000000000000000000000000000 % 0102489099019448000000000000000000001e % 000000000000000000000000000000000002108944000000000000000000000000000000000000 % 0102d79091011448000000000000000000001e % 000000000000000000000000000000000002118944000000000000000000000000000000000000 % 0103f89091011448000000000000000000001e % 0000000000000000000000000000000000020e73be000000000000000000000000000000000000 % 010127f9fbc3bb8e000000000000000000001e % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000400000000000000000000000001e % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 00000000000000000000000000000000003fc00000000000000000000000000000000000000000 % 1ff0000000000000000000000000000000001e % 00000000000000000000000000000000003fc00000000000000000000000000000000000000000 % 0fe00000000000000000000000000000000008 % 00000000000000000000000000000000001fc00000000000000000000000000000000000000000 % 0fe00000000000000000000000000000000000 % 00000000000000000000000000000000001fc00000000000000000000000000000000000000000 % 0fe0000000000000000000000000000000005a % 00000000000000000000000000000000001f800000000000000000000000000000000000000000 % 07c00000000000000000000000000000000000 % 00000000000000000000000000000000000f800000000000000000000000000000000000000000 % 07c00000000000000000000000000000000000 % 00000000000000000000000000000000000f800000000000000000000000000000000000000000 % 07c00000000000000000000000000000000000 % 00000000000000000000000000000000000f000000000000000000000000000000000000000000 % 03800000000000000000000000000000000000 % 000000000000000000000000000000000007000000000000000000000000000000000000000000 % 03800000000000000000000000000000000000 % 000000000000000000000000000000000007000000000000000000000000000000000000000000 % 03800000000000000000000000000000000000 % 000000000000000001fffffffffffffffffffffffffffffffffffc00000000ffffffffffffffff % fffffffffffffffffffe000000000000000069 % 000000000000000001fffffffffffffffffffffffffffffffffffc00000000ffffffffffffffff % fffffffffffffffffffe000000000000000064 % 00000000000000000100000000000000000000000000000000000c000000008000000000000000 % 00000000000000000002000000000000000073 % 00000000000000000100000000000000000000000000000000000c000000008000000000000000 % 00000000000000000002000000000000000076 % 00000000000000000100000000000000000000000000000000000c000000008000000000000000 % 0000000000000000000200000000000000003f % 00000000000000000100000000000000000000000000000000000c000000008000000000100606 % 00000001800000000002000000000000000068 % 00000000000000000100000000000000000000000000000000000c000000008000000000100202 % 0000000080c000000002000000000000000066 % 00000000000000000100000000000000000000000000000000000c000000008000000000000202 % 00000000808000000002000000000000000068 % 00000000000000000100000000000000000000000000000000000c00000000800001dde7f1e2e2 % 380f1b8f809e7c000002000000000000000006 % 00000000000000000100000000000000000000000000000000000c000000008000008a12121332 % 7c108c58813320000002000000000000000079 % 00000000000000000100000000000000000000000000000000000c00000000800000d072107212 % 40038850812120000002000000000000000078 % 00000000000000000100000010060600018000000400001000000c000000008000005192119212 % 400c8850822120000002000000000000000079 % 00000000000000000100000010020200008000008400021000000c000000008000006232123232 % 64118851822320000002000000000000000078 % 00000000000000000100000000020200008000008000020000000c0000000080000021df39dbe7 % 380edceec41e70000002000000000000000079 % 00000000000000000101dfcfb1e2e2700f8e3c79eddde7b1e6e00c000000008000000000000000 % 00000000040000000002000000000000000078 % 000000000000000001008c24121332f8189f42c4848a121333100c000000008000000000000000 % 000000000c0000000002000000000000000079 % 00000000000000000100d0e41072128010900e8084d0721212100c000000008000000000000000 % 00000000000000000002000000000000000073 % 00000000000000000100532411921280109032808451921212100c000000008000000000000000 % 00000000000000000002000000000000000075 % 000000000000000001006464123232c8119946c48462321232100c000000008000000000000100 % 00000002000008000002000000000000000073 % 0000000000000000010023be39dbe7700ece3b78ee21dbb9e7380c000000008000000004000100 % 10000042000108000002000000000000000075 % 00000000000000000100000000000000000000000000000000000c000000008000000004000000 % 10000040000100000002000000000000000073 % 00000000000000000100000000000000000000000000000000000c000000008079e6e0df7de36e % 3c1e1ef677f3d8f37002000000000000000075 % 00000000000000000100000000000000000000000000000000000c0000000080c7331124221131 % 10213142230909998802000000000000000073 % 00000000000000000100000000000000000000000000000000000c0000000080821211d4207121 % 10072042343909090802000000000000000075 % 00000000000000000100000000000000000000000000000000000c000000008082121034219121 % 1019204214c909090802000000000000000073 % 00000000000000000100000008188000000000000000008000000c0000000080c6321114223121 % 1023314219190919080200000000000000006d % 00000000000000000100000010088000200000000000088000000c000000008079e739e771dbf3 % 9c1d9e7708eddcf39c0200000000000000005c % 00000000000000000100000020080000200000000000084000000c000000008000000000000000 % 0000000000000000000200000000000000005c % 00000000000000000100000027899c6e783ee1f211c35e4000000c000000008000000000000000 % 0000000000000000000200000000000000005c % 0000000000000000010000002c48be312011f31633e4884000000c000000008000000000000000 % 0000000000000000000200000000000000005c % 0000000000000000010000002808a021201102121207484000000c000000008000000000000000 % 0000000000000000000200000000000000005c % 0000000000000000010000002808a021201102121200c84000000c000000008000000000000000 % 0000000000000000000200000000000000005c % 0000000000000000010000002c48b221201192323324484000000c00000000800000040c400000 % 0000000000004000000200000000000000005c % 000000000000000001000000279ddc73b838e1d1d9c78e4000000c000000008000000804400010 % 0000000000044000000200000000000000005c % 00000000000000000100000020000000000000100000004000000c000000008000001004000010 % 00000000000420000002000000000000000062 % 00000000000000000100000010000000000000100000008000000c0000000080000013c4ce373c % 1f70f908e1af2000000200000000000000005c % 00000000000000000100000000000000000000380000000000000c0000000080000016245f1890 % 08f98b19f2442000000200000000000000005c % 00000000000000000100000000000000000000000000000000000c000000008000001404501090 % 0881090903a42000000200000000000000005c % 00000000000000000100000000000000000000000000000000000c000000008000001404501090 % 0881090900642000000200000000000000005c % 00000000000000000100000000000000000000000000000000000c000000008000001624591090 % 08c9191992242000000200000000000000005c % 00000000000000000100000000000000000000000000000000000c0000000080000013ceee39dc % 1c70e8ece3c72000000200000000000000005c % 00000000000000000100000000000000000000000000000000000c000000008000001000000000 % 0000080000002000000200000000000000005c % 00000000000000000100000000000000000000000000000000000c000000008000000800000000 % 00000800000040000002000000000000000067 % 00000000000000000100000000000000000000000000000000000c000000008000000000000000 % 00001c0000000000000200000000000000005c % 00000000000000000100000000000000000000000000000000000c000000008000000000000000 % 0000000000000000000200000000000000005d % 000000000000000001fffffffffffffffffffffffffffffffffffc00000000ffffffffffffffff % fffffffffffffffffffe00000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 01000000000000000000000000000000000014 % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 01000000000000000000000000000000000006 % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001f % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005c % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000001e % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 0100000000000000000000000000000000005f % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 01000000000000000000000000000000000000 % 000000000000000000000000000000000002000000000000000000000000000000000000000000 % 01000000000000000000000000000000000001 % 000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffff % ff00000000000000000000000000000000005c % 000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffffff % ff00000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000064 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000003f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000000000000000000000058 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000007f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000001fe0000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000001fc0000000000000000000 % 0000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000f80000000000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000700000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000000000000000000000007f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000180000000020000200000600000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000080000000020000200000200000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000080000000000000000000200000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000f9dee1e6ec67806e6ec6e271dc0000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000001888b1213322c4092332732f8580000000 % 0000000000000000000000000000000000003a % 00000000000000000000000000000000000000000000108ca1072222800ea22221280200000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000001085211922228001a22221280700000000 % 0000000000000000000000000000000000003a % 00000000000000000000000000000000000000000000118521232222c408a222232c8980000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000ec2739df777780f77773e771dc0000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000002000000000000000020000000000000 % 0000000000000000000000000000000000003a % 00000000000000000000000000000000000000000000000e000000000000000020000000000000 % 00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000018000000000000000070000000000000 % 0000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000018 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 73.876 36.313] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -860 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (cold, warm) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 116.608 150.819] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (warm, hot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 88.75 19.156] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -340 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (release) s -340 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (solver?) s savemat setmatrix n 82.5 15 m 95 15 l 100 20 l 95 25 l 82.5 25 l 77.5 20 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 51.403 93.248] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (hot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 91.564 93.248] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (warm) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 131.528 93.248] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (cold) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 40 36.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -614 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (free retained) s -756 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (data structures) s savemat setmatrix n 25 32.5 m 55 32.5 l 55 42.5 l 25 42.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 90 36.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -490 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (determine) s -588 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (type of start) s savemat setmatrix n 75 32.5 m 105 32.5 l 105 42.5 l 75 42.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 90 74.61] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -674 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (initialise local) s -874 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraint system) s -402 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(scaling\)) s savemat setmatrix n 73.75 70 m 106.25 70 l 106.25 85 l 73.75 85 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 90 56.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -732 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (update options) s -718 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (and tolerances) s savemat setmatrix n 75 52.5 m 105 52.5 l 105 62.5 l 75 62.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 65 160.406] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1010 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable deactivation) s -724 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(client request\)) s savemat setmatrix n 45 155 m 85 155 l 85 167.5 l 45 167.5 l cl gsave 0 0 0 0.176 0 B grestore n 90 32.5 m 88.991 29.472 l 91.009 29.472 l cl 0 0 0 F n 90 25 m 90 29.472 l gsave 0 0 0 0.176 0 B grestore n 90 52.5 m 88.991 49.472 l 91.009 49.472 l cl 0 0 0 F n 90 42.5 m 90 49.472 l gsave 0 0 0 0.176 0 B grestore n 90 47.5 m 86.972 48.509 l 86.972 46.491 l cl 0 0 0 F n 40 42.5 m 40 47.5 l 86.972 47.5 l gsave 0 0 0 0.176 0 B grestore n 90 70 m 88.991 66.972 l 91.009 66.972 l cl 0 0 0 F n 90 62.5 m 90 66.972 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 50 101.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -384 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (perform) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (hot start) s savemat setmatrix n 35 97.5 m 65 97.5 l 65 107.5 l 35 107.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 90 101.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -384 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (perform) s -536 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (warm start) s savemat setmatrix n 75 97.5 m 105 97.5 l 105 107.5 l 75 107.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 130 101.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -384 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (perform) s -462 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (cold start) s savemat setmatrix n 115 97.5 m 145 97.5 l 145 107.5 l 115 107.5 l cl gsave 0 0 0 0.176 0 B grestore n 90 97.5 m 88.991 94.472 l 91.009 94.472 l cl 0 0 0 F n 90 85 m 90 94.472 l gsave 0 0 0 0.176 0 B grestore n 50 97.5 m 48.991 94.472 l 51.009 94.472 l cl 0 0 0 F n 90 90 m 50 90 l 50 94.472 l gsave 0 0 0 0.176 0 B grestore n 130 97.5 m 128.99 94.472 l 131.01 94.472 l cl 0 0 0 F n 90 90 m 130 90 l 130 94.472 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 66.493 150.766] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (cold) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 90 124.269] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1176 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (common start activities:) s -1514 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (determine loadable constraints) s -1586 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (and variables; initialise PSE and) s -1592 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (DSE pricing, pivot rejection, and) s -1714 695 m 927 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (perturbation-based antidegeneracy) s savemat setmatrix n 57.5 120 m 122.5 120 l 122.5 142.5 l 57.5 142.5 l cl gsave 0 0 0 0.176 0 B grestore n 90 120 m 88.991 116.97 l 91.009 116.97 l cl 0 0 0 F n 90 107.5 m 90 116.97 l gsave 0 0 0 0.176 0 B grestore n 90 112.5 m 86.972 113.51 l 86.972 111.49 l cl 0 0 0 F n 50 107.5 m 50 112.5 l 86.972 112.5 l gsave 0 0 0 0.176 0 B grestore n 90 112.5 m 93.028 111.49 l 93.028 113.51 l cl 0 0 0 F n 130 107.5 m 130 112.5 l 93.028 112.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 125 19.156] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -614 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (free retained) s -756 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (data structures) s savemat setmatrix n 110 15 m 140 15 l 140 25 l 110 25 l cl gsave 0 0 0 0.176 0 B grestore n 110 20 m 106.97 21.009 l 106.97 18.991 l cl 0 0 0 F n 100 20 m 106.97 20 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 101.474 22.879] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -43 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n 147.5 27.5 m 146.49 24.472 l 148.51 24.472 l cl 0 0 0 F n 140 20 m 147.5 20 l 147.5 24.472 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 147.5 32.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 115 158.642] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -764 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable and/or) s -1010 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraint activation) s -724 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(client request\)) s savemat setmatrix n 95 155 m 135 155 l 135 167.5 l 95 167.5 l cl gsave 0 0 0 0.176 0 B grestore n 65 155 m 63.991 151.97 l 66.009 151.97 l cl 0 0 0 F n 90 142.5 m 90 147.5 l 65 147.5 l 65 151.97 l gsave 0 0 0 0.176 0 B grestore n 115 155 m 113.99 151.97 l 116.01 151.97 l cl 0 0 0 F n 90 147.5 m 115 147.5 l 115 151.97 l gsave 0 0 0 0.176 0 B grestore n 90 15 m 88.991 11.972 l 91.009 11.972 l cl 0 0 0 F n 90 7.5 m 90 11.972 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 90 5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -230 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (start) s savemat setmatrix n 90 180 m 88.991 176.97 l 91.009 176.97 l cl 0 0 0 F n 65 167.5 m 65 172.5 l 90 172.5 l 90 176.97 l gsave 0 0 0 0.176 0 B grestore n 115 167.5 m 115 172.5 l 90 172.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 90 185] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -824 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dynamic simplex) s savemat setmatrix n 55 37.5 m 58.028 36.491 l 58.028 38.509 l cl 0 0 0 F n 75 37.5 m 58.028 37.5 l gsave 0 0 0 0.176 0 B grestore grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore %%EndDocument @endspecial 2600 9913 a FP(Fig)n(ur)q(e)52 b(2:)70 b FM(D)8 b(Y)g(L)g(P)58 b FP(s)-5 b(t)s(art)l(u)f(p)53 b(s)m(eq)l(u)l(enc)-6 b(e)3771 11400 y(33)p eop end %%Page: 34 37 TeXDict begin 34 36 bop 0 466 a FP(r)q(e)l(d)-7 b(u)i(c)f(e)45 b(th)l(e)g(i)s(niti)s(al)g(s)n(ize)h(of)g(c)l(o)l(ns)-5 b(trai)s(nt)44 b(sys)-5 b(te)n(ms)45 b(with)g(ve)l(ry)g(larg)n(e)f(n)n (umbe)l(rs)h(of)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(\()p FG(e)p FP(.)p FG(g)p FP(.,)g(s)m(e)-7 b(t)46 b(c)l(ove)l(r)s(i)s(n)n(g) 0 665 y(fo)-7 b(r)5 b(m)l(u)l(la)-8 b(tio)l(ns\).)249 964 y(Co)l(ns)j(trai)s(nt)41 b(o)-7 b(r)43 b(v)r(ar)s(i)s(a)l(b)l(l)n (e)f(a)n(c)-5 b(tiv)r(a)d(tio)l(n,)43 b(o)-7 b(r)42 b(both,)i(ar)q(e)f (pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)42 b(d)-7 b(ur)s(i)s(n)n(g)40 b(a)j(war)5 b(m)41 b(o)-7 b(r)43 b(h)n(ot)f(s)-5 b(t)s(art)43 b(if)f(r)q(eq)l(u)l(e)o(s)-5 b(te)l(d)0 1163 y(by)68 b(th)l(e)g(client.)113 b(Co)l(ns)-5 b(trai)s(nt)67 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)67 b(is)h(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)69 b(be)l(fo)-7 b(r)q(e)69 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(a)n (c)-5 b(tiv)r(a)d(tio)l(n.)111 b(If)69 b(i)s(niti)s(al)f(c)l(o)l(ns)-5 b(trai)s(nt)0 1363 y(a)n(c)g(tiv)r(a)d(tio)l(n)60 b(is)h(r)q(eq)l(u)l (e)o(s)-5 b(te)l(d,)68 b FM(D)8 b(Y)g(L)g(P)67 b FP(will)60 b(a)-6 b(dd)62 b(all)f(vio)-5 b(la)d(te)l(d)61 b(c)l(o)l(ns)-5 b(trai)s(nts)61 b(to)g(th)l(e)g(a)n(c)-5 b(tive)61 b(sys)-5 b(te)n(m.)91 b(If)62 b(c)l(o)l(ns)-5 b(trai)s(nts)0 1562 y(ar)q(e)46 b(a)-6 b(dd)h(e)l(d,)47 b(pr)s(i)s(mal)g(feas)n(ibility)e (will)g(be)h(l)n(os)-5 b(t,)47 b(and)j FM(D)8 b(Y)g(L)g(P)51 b FP(will)45 b(r)q(eas)-5 b(s)m(e)o(s)g(s)47 b(th)l(e)f(c)-7 b(h)n(oic)h(e)46 b(of)g(i)s(niti)s(al)g(s)n(i)s(mpl)n(e)-5 b(x)46 b(p)-6 b(has)m(e.)249 1861 y(If)47 b(i)s(niti)s(al)f(v)r(ar)s(i) s(a)l(b)l(l)n(e)h(a)n(c)-5 b(tiv)r(a)d(tio)l(n)45 b(is)i(r)q(eq)l(u)l (e)o(s)-5 b(te)l(d,)48 b(th)l(e)e(a)n(c)-5 b(tio)l(n)45 b(t)s(aken)i(d)-5 b(e)e(pends)46 b(o)l(n)g(th)l(e)g(i)s(niti)s(al)g(s)n (i)s(mpl)n(e)-5 b(x)47 b(p)-6 b(has)m(e.)0 2060 y(If)75 b FM(D)8 b(Y)g(L)g(P)76 b FP(will)69 b(ente)l(r)h(pr)s(i)s(mal)h(s)n(i) s(mpl)n(e)-5 b(x,)75 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)c(with)f(fa)-7 b(vo)i(ura)l(b)l(l)n(e)69 b(pr)s(i)s(mal)i(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)70 b(c)l(os)-5 b(ts)70 b(ar)q(e)h(a)n(c)-5 b(tiv)r(a)d(te)l(d,)0 2259 y(ev)r(al)n(ua)g(te)l(d)79 b(und)-5 b(e)l(r)78 b(th)l(e)g(p)-6 b(has)m(e)79 b(I)g(o)-7 b(r)80 b(p)-6 b(has)m(e)78 b(II)i(o)-8 b(bj)l(ec)j(tive)79 b(as)g(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te.)144 b(Fo)-7 b(r)79 b(d)-7 b(ual)78 b(s)n(i)s(mpl)n(e)-5 b(x,)86 b(v)r(ar)s(i)s(a)l (b)l(l)n(e)o(s)0 2459 y(whic)-7 b(h)57 b(will)h(tend)g(to)g(bo)-5 b(und)57 b(th)l(e)h(d)-7 b(ual)58 b(pr)q(o)-8 b(b)l(l)n(e)n(m)57 b(ar)q(e)i(s)m(e)l(l)n(ec)-5 b(te)l(d)59 b(fo)-7 b(r)59 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n:)75 b(Fo)-7 b(r)59 b(ea)n(c)-7 b(h)58 b(i)s(nfeas)n(ib)l(l)n(e)h(pr)s(i)s(mal)0 2658 y(bas)n(ic)45 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(\(n)m(o)l(n)m(bas)n(ic)e (d)-7 b(ual)44 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(with)e(fa)-7 b(vo)i(ura)l(b)l(l)n(e)44 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)44 b(c)l(os)-5 b(t\),)46 b(pr)s(i)s(mal)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g (with)e(o)-5 b(pti)s(mal)0 2857 y(r)q(e)l(d)e(u)i(c)f(e)l(d)50 b(c)l(os)-5 b(ts)51 b(\(feas)n(ib)l(l)n(e)g(d)-7 b(ual)50 b(c)l(o)l(ns)-5 b(trai)s(nts\))50 b(whic)-7 b(h)49 b(will)h(bo)-5 b(und)49 b(motio)l(n)g(i)s(n)i(th)l(e)f(dir)q(ec)-5 b(tio)l(n)50 b(of)g(th)l(e)g(i)s(nc)l(o)n(m)s(i)s(n)n(g)0 3056 y(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(ar)q(e)g(s)m(e)l(l)n(ec)-5 b(te)l(d)53 b(fo)-7 b(r)53 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n.)0 3649 y Fu(11.1)197 b(Co)-10 b(ld)66 b(Start)4 4068 y FM(D)8 b(Y)g(L)g(P)54 b FP(pe)l(r)5 b(fo)-7 b(r)5 b(ms)50 b(a)f(c)l(o)-5 b(ld)48 b(s)-5 b(t)s(art)49 b(i)s(n)g(two)f(p)-6 b(has)m(e)o(s.)64 b(T)8 b(h)l(e)48 b(\002rs)-5 b(t)49 b(p)-6 b(has)m(e,)49 b(i)s(mpl)n(e)n(mente)l(d)f(i)s(n)h FJ(dy_coldstar)s(t)p FP(,)g(c)l(o)l(ns)-5 b(tru)g(c)g(ts)0 4267 y(th)l(e)63 b(i)s(niti)s(al)g(a)n(c)-5 b(tive)64 b(c)l(o)l(ns)-5 b(trai)s(nt)63 b(sys)-5 b(te)n(m.)98 b(T)8 b(h)l(e)63 b(s)m(ec)l(o)l(nd)g(p)-6 b(has)m(e,)66 b(i)s(mpl)n(e)n(mente)l(d)d(i)s(n)g FJ(dy_cr)m(ash)p FP(,)k(c)l(o)l(ns)-5 b(tru)g(c)g(ts)63 b(th)l(e)0 4467 y(i)s(niti)s(al)52 b(bas)n(is.)249 4766 y(T)r(o)d(c)l(o)l(ns)-5 b(tru)g(c)g(t)47 b(th)l(e)h(i)s(niti)s(al)g(a)n(c)-5 b(tive)48 b(c)l(o)l(ns)-5 b(trai)s(nt)48 b(sys)-5 b(te)n(m,)49 b FJ(dy_coldstar)s(t)e FP(\002rs)-5 b(t)49 b(c)-7 b(h)l(ec)f(ks)48 b(to)g(s)m(ee)h(if)f(th)l(e)g(client)g(has)0 4965 y(s)-8 b(pec)m(i\002e)l(d)49 b(tha)-8 b(t)50 b(th)l(e)g(fu)l(ll)f(c)l(o)l(ns) -5 b(trai)s(nt)49 b(sys)-5 b(te)n(m)50 b(s)-8 b(h)n(o)j(u)l(ld)49 b(be)i(u)-7 b(s)m(e)l(d.)64 b(In)50 b(this)g(cas)m(e,)h(th)l(e)f(a)n(c) -5 b(tive)50 b(sys)-5 b(te)n(m)50 b(will)f(be)i(th)l(e)0 5164 y(entir)q(e)61 b(c)l(o)l(ns)-5 b(trai)s(nt)60 b(sys)-5 b(te)n(m)61 b(and)g(th)l(e)g(dy)7 b(nam)s(ic)60 b(s)n(i)s(mpl)n(e)-5 b(x)62 b(algo)-7 b(r)s(ithm)60 b(will)g(r)q(e)l(d)-7 b(u)i(c)f(e)61 b(to)h(a)f(s)n(i)s(n)n(gl)n(e)g(e)-5 b(xecu)l(tio)l(n)60 b(of)0 5363 y(eith)l(e)l(r)52 b(pr)s(i)s(mal)h(o)-7 b(r)53 b(d)-7 b(ual)52 b(s)n(i)s(mpl)n(e)-5 b(x.)249 5662 y(If)62 b(th)l(e)f(client)f(s)-8 b(pec)m(i\002e)o(s)61 b(tha)-8 b(t)65 b FM(D)8 b(Y)g(L)g(P)67 b FP(s)-8 b(h)n(o)j(u)l(ld)60 b(wo)-7 b(rk)61 b(with)e(a)j(parti)s(al)f(c)l(o)l(ns)-5 b(trai)s(nt)60 b(sys)-5 b(te)n(m,)63 b(th)l(e)e(c)l(o)l(ns)-5 b(trai)s(nts)0 5862 y(ar)q(e)55 b(\002rs)-5 b(t)55 b(s)m(e)-7 b(para)f(te)l(d)55 b(i)s(nto)g(eq)l(ualitie)o(s)g(and)f(i)s(n)n(eq)l (ualitie)o(s.)72 b(All)55 b(eq)l(ualitie)o(s)g(ar)q(e)g(i)s(ncl)n(ud)-5 b(e)l(d)54 b(i)s(n)h(th)l(e)g(i)s(niti)s(al)f(a)n(c)-5 b(tive)0 6061 y(sys)g(te)n(m.)249 6360 y(T)8 b(h)l(e)49 b(r)q(e)n(mai)s(ni)s(n)n(g)e(i)s(n)n(eq)l(ualitie)o(s)j(ar)q(e)g(s)n(o) -7 b(rte)l(d,)49 b(u)-7 b(s)n(i)s(n)n(g)49 b(th)l(e)g(an)n(gl)n(e)f(of) i(th)l(e)f(c)l(o)l(ns)-5 b(trai)s(nt)48 b(n)m(o)-7 b(r)5 b(mal)51 b FG(a)6720 6385 y Fz(i)6819 6360 y FP(to)e(th)l(e)g(o)-8 b(bj)l(ec-)0 6559 y(tive)53 b(func)-5 b(tio)l(n)51 b(n)m(o)-7 b(r)5 b(mal)54 b FG(c)61 b FP(as)53 b(th)l(e)f(\002g)n(ur)q(e)h(of)g (me)l(r)s(it,)2900 7007 y FG(a)3005 7032 y Fz(i)3055 7007 y Fi(\\)r FG(c)c FP(=)3467 6895 y(180)p 3467 6969 309 7 v 3568 7121 a FH(p)3819 7007 y FP(c)l(os)4080 6939 y FA(\0141)4403 6895 y FG(a)4508 6920 y Fz(i)4590 6895 y FF(\327)34 b FG(c)p 4273 6969 610 7 v 4273 7121 a FE(k)r FG(a)4467 7146 y Fz(i)4516 7121 y FE(k)8 b(k)r FG(c)f FE(k)0 7480 y FP(Co)l(ns)n(id)-5 b(e)l(r)59 b(a)i(m)s(i)s(ni)s(m)s(isa) -8 b(tio)l(n)59 b(o)-8 b(bj)l(ec)j(tive)60 b(and)f(`)p FF(\243)p FP(')g(i)s(n)n(eq)l(ualitie)o(s.)88 b(T)8 b(h)l(e)60 b(n)m(o)-7 b(r)5 b(mals)59 b(of)h(th)l(e)g(i)s(n)n(eq)l(ualitie)o(s)g (poi)s(nt)g(o)-5 b(u)l(t)0 7679 y(of)61 b(th)l(e)g(feas)n(ib)l(l)n(e)i (r)q(e)-5 b(g)t(io)l(n,)62 b(and)f(th)l(e)g(n)m(o)-7 b(r)5 b(mal)61 b(of)g(th)l(e)g(o)-8 b(bj)l(ec)j(tive)61 b(func)-5 b(tio)l(n)60 b(will)g(poi)s(nt)h(i)s(nto)g(th)l(e)g(feas)n (ib)l(l)n(e)h(r)q(e)-5 b(g)t(io)l(n)0 7878 y(a)d(t)56 b(o)-5 b(pti)s(mality)-17 b(.)73 b(Henc)-6 b(e)56 b(a)g(c)l(o)l(ns)-5 b(trai)s(nt)54 b(wh)n(os)m(e)h(n)m(o)-7 b(r)5 b(mal)55 b(fo)-7 b(r)5 b(ms)56 b(an)f(an)n(gl)n(e)g(n)n(ear)h(180)5875 7814 y Fh(o)5999 7878 y FP(with)e(th)l(e)h(n)m(o)-7 b(r)5 b(mal)55 b(of)h(th)l(e)0 8077 y(o)-8 b(bj)l(ec)j(tive)44 b(s)-8 b(h)n(o)j(u)l(ld)44 b(be)h(mo)-7 b(r)q(e)45 b(like)l(ly)e(to)i (be)g(a)n(c)-5 b(tive)44 b(a)-8 b(t)45 b(o)-5 b(pti)s(m)l(um.)62 b(A)44 b(c)l(o)l(ns)-5 b(trai)s(nt)44 b(wh)n(os)m(e)g(n)m(o)-7 b(r)5 b(mal)44 b(fo)-7 b(r)5 b(ms)45 b(an)f(an)n(gl)n(e)0 8277 y(n)n(ear)57 b(0)523 8213 y Fh(o)648 8277 y FP(is)f(mo)-7 b(r)q(e)57 b(like)l(ly)e(to)i(d)-5 b(e)l(\002)s(n)n(e)56 b(a)h(fa)n(c)-6 b(e)f(t)57 b(o)l(n)f(th)l(e)g(far)g(s)n(id)-5 b(e)57 b(of)g(th)l(e)f(po)-5 b(lyto)g(pe.)75 b(Unfo)-7 b(rt)l(una)f(te)l(ly)-17 b(,)54 b(`mo)-7 b(r)q(e)57 b(like)l(ly)8 b(')0 8476 y(is)56 b(n)m(ot)f(c)-6 b(e)l(rt)s(ai)s(nty)-17 b(,)57 b(and)e(it')-5 b(s)56 b(easy)g(to)g(c)l(o)l(ns)-5 b(tru)g(c)g(t)55 b(s)n(i)s(mpl)n(e)i(two-di)s(mens)n(io)l(nal)d(e)-5 b(xampl)n(e)o(s)57 b(wh)l(e)l(r)q(e)e(th)l(e)g(n)m(o)-7 b(r)5 b(mal)55 b(of)0 8675 y(o)l(n)n(e)62 b(of)g(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nts)61 b(a)n(c)-5 b(tive)63 b(a)-8 b(t)62 b(o)-5 b(pti)s(mality)61 b(fo)-7 b(r)5 b(ms)62 b(an)g(a)n(cu)l(te)g(an)n(gl)n (e)g(with)e(th)l(e)i(n)m(o)-7 b(r)5 b(mal)62 b(of)g(th)l(e)g(o)-8 b(bj)l(ec)j(tive)0 8874 y(func)g(tio)l(n.)253 9173 y FM(D)8 b(Y)g(L)g(P)51 b FP(all)n(ows)45 b(th)l(e)g(client)g(to)h(s)-8 b(pec)m(ify)44 b(o)l(n)n(e)h(o)-7 b(r)46 b(two)f(an)n(g)n(u)l(lar)f(i)s (nte)l(rv)r(als)h(and)g(a)g(sampli)s(n)n(g)f(fra)n(c)-5 b(tio)l(n)45 b(whic)-7 b(h)44 b(ar)q(e)0 9373 y(u)-7 b(s)m(e)l(d)53 b(to)h(s)m(e)l(l)n(ec)-5 b(t)53 b(i)s(n)n(eq)l(ualitie)o (s)h(to)f(a)-6 b(dd)53 b(to)h(th)l(e)f(i)s(niti)s(al)g(a)n(c)-5 b(tive)53 b(sys)-5 b(te)n(m.)67 b(By)52 b(d)-5 b(e)l(fa)d(u)l(lt,)53 b(th)l(e)g(i)s(niti)s(al)g(sys)-5 b(te)n(m)53 b(will)f(be)0 9572 y(po)-5 b(p)g(u)l(la)d(te)l(d)47 b(with)h(50\045)g(of)h(th)l(e)f (i)s(n)n(eq)l(ualitie)o(s)h(whic)-7 b(h)47 b(fo)-7 b(r)5 b(m)49 b(an)n(gl)n(e)o(s)f(i)s(n)g(th)l(e)h(i)s(nte)l(rv)r(als)f([0) 6040 9508 y Fh(o)6110 9572 y FP(,)25 b(90)6394 9508 y Fh(o)6461 9572 y FP(\))49 b(and)f(\(90)7173 9508 y Fh(o)7243 9572 y FP(,)25 b(180)7630 9508 y Fh(o)7697 9572 y FP(].)0 9771 y(\()p FG(I.e)-8 b(.)p FP(,)61 b(i)s(n)n(eq)l(ualitie)o(s)f(wh)n (os)m(e)g(n)m(o)-7 b(r)5 b(mals)60 b(ar)q(e)g(pe)l(rpendicu)l(lar)f(to) i(th)l(e)f(o)-8 b(bj)l(ec)j(tive)59 b(n)m(o)-7 b(r)5 b(mal)60 b(ar)q(e)h(e)-5 b(xcl)n(ud)g(e)l(d)60 b(entir)q(e)l(ly)-17 b(,)0 9970 y(and)41 b(half)f(of)h(all)g(oth)l(e)l(r)g(i)s(n)n(eq)l (ualitie)o(s)g(will)f(be)h(a)-6 b(dd)h(e)l(d)41 b(to)g(th)l(e)g(i)s (niti)s(al)g(a)n(c)-5 b(tive)41 b(sys)-5 b(te)n(m.\))61 b(T)8 b(h)l(e)41 b(i)s(n)n(eq)l(ualitie)o(s)g(s)m(e)l(l)n(ec)-5 b(te)l(d)0 10170 y(will)63 b(be)i(s)-8 b(pr)q(ea)i(d)65 b(evenly)e(a)n(c)-8 b(r)q(os)j(s)65 b(th)l(e)f(s)-8 b(pec)m(i\002e)l(d) 64 b(ran)n(g)n(e\(s\).)102 b FM(D)8 b(Y)g(L)g(P)70 b FP(will)64 b(a)n(c)-5 b(tiv)r(a)d(te)64 b(all)g(v)r(ar)s(i)s(a)l(b)l(l) n(e)o(s)i(r)q(e)l(fe)l(r)q(enc)-6 b(e)l(d)64 b(by)0 10369 y(ea)n(c)-7 b(h)53 b(c)l(o)l(ns)-5 b(trai)s(nt.)3771 11400 y(34)p eop end %%Page: 35 38 TeXDict begin 35 37 bop 249 466 a FP(Onc)-6 b(e)75 b(th)l(e)g(i)s(niti) s(al)g(c)l(o)l(ns)-5 b(trai)s(nt)75 b(sys)-5 b(te)n(m)75 b(is)g(po)-5 b(p)g(u)l(la)d(te)l(d,)80 b FJ(dy_cr)m(ash)c FP(is)f(call)n(e)l(d)h(to)f(s)m(e)l(l)n(ec)-5 b(t)76 b(an)g(i)s(niti)s(al)f(bas)n(is.)4 665 y FM(D)8 b(Y)g(L)g(P)65 b FP(of)n(fe)l(rs)60 b(thr)q(ee)g(o)-5 b(ptio)l(ns)58 b(fo)-7 b(r)60 b(th)l(e)g(i)s(niti)s(al)f(bas)n(is,)j(call)n(e)l(d)e (`l)n(og)t(ical')-17 b(,)60 b(`sla)n(c)-8 b(k')-17 b(,)60 b(and)f(`ar)q(c)-7 b(hitec)i(t)l(ural')-17 b(.)85 b(A)59 b(l)n(og)t(ical)0 865 y(bas)n(is)j(is)f(th)l(e)f(s)-5 b(t)s(andar)q(d)61 b(unit)f(bas)n(is)i(c)l(o)n(mpos)m(e)l(d)e(of)h(sla) n(c)-8 b(k)61 b(and)f(arti\002c)m(i)s(al)h(\(l)n(og)t(ical\))f(v)r(ar)s (i)s(a)l(b)l(l)n(e)o(s)i(fo)-7 b(r)61 b(th)l(e)g(a)n(c)-5 b(tive)0 1064 y(c)l(o)l(ns)g(trai)s(nts.)64 b(A)50 b(sla)n(c)-8 b(k)49 b(bas)n(is)i(agai)s(n)e(u)-7 b(s)m(e)o(s)51 b(sla)n(c)-8 b(k)50 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(fo)-7 b(r)50 b(i)s(n)n(eq)l(ualitie)o(s,)g(b)-8 b(u)l(t)50 b(a)-8 b(tte)n(mpts)49 b(to)h(s)m(e)l(l)n(ec)-5 b(t)51 b(ar)q(c)-7 b(hi-)0 1263 y(tec)i(t)l(ural)65 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(fo) -7 b(r)65 b(eq)l(ualitie)o(s,)j(i)s(ncl)n(udi)s(n)n(g)63 b(arti\002c)m(i)s(al)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(o)l(nly)d(if)i (n)n(ec)-6 b(e)o(s)h(sary)-17 b(.)102 b(An)65 b(ar)q(c)-7 b(hitec)i(t)l(ural)0 1462 y(bas)n(is)65 b(a)-8 b(tte)n(mpts)64 b(to)h(c)-7 b(h)n(oos)m(e)65 b(ar)q(c)-7 b(hitec)i(t)l(ural)64 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(fo)-7 b(r)65 b(all)g(c)l(o)l(ns)-5 b(trai)s(nts,)66 b(s)m(e)l(l)n(ec)-5 b(ti)s(n)n(g)64 b(sla)n(c)-8 b(k)64 b(and)h(arti\002c)m(i)s(al)0 1662 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)54 b(o)l(nly)d(wh)l(en)g(n)n(ec)-6 b(e)o(s)h(sary)-17 b(.)249 1960 y(T)8 b(h)l(e)l(r)q(e)51 b(ar)q(e)i(many)e(q)l(ualitie)o(s)g(whic)-7 b(h)51 b(ar)q(e)h(d)-5 b(e)o(s)n(ira)l(b)l(l)n(e)52 b(i)s(n)g(an)f(i)s(niti)s(al)h(bas)n(is,)g (and)f(th)l(ey)g(ar)q(e)h(often)g(i)s(n)f(c)l(o)l(n\003ic)-5 b(t.)0 2160 y(A)81 b(l)n(og)t(ical)g(bas)n(is)g(is)g(tr)s(ivi)s(ally)g (eas)n(ily)g(to)g(c)l(o)l(ns)-5 b(tru)g(c)g(t,)87 b(fa)n(c)-5 b(to)e(r)e(,)88 b(and)80 b(i)s(nve)l(rt,)88 b(and)80 b(has)h(e)-5 b(xc)f(e)l(ll)n(ent)81 b(n)n(ume)l(r)s(ical)0 2359 y(s)-5 b(t)s(a)l(bility)-17 b(.)65 b(On)52 b(th)l(e)f(oth)l(e)l(r) h(hand,)f(s)-8 b(u)j(c)e(h)52 b(a)h(bas)n(is)g(is)f(har)q(dly)f(like)l (ly)g(to)h(be)h(th)l(e)f(o)-5 b(pti)s(mal)52 b(bas)n(is.)65 b(Wh)l(en)52 b(c)-7 b(h)n(oos)n(i)s(n)n(g)0 2558 y(ar)q(c)g(hitec)i(t)l (ural)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)g(fr)q(ee)h(v)r(ar)s(i)s(a)l (b)l(l)n(e)o(s)g(ar)q(e)f(highly)d(d)-5 b(e)o(s)n(ira)l(b)l(l)n(e)53 b(s)n(i)s(nc)-6 b(e)53 b(th)l(ey)e(will)f(n)n(eve)l(r)j(l)n(ea)-7 b(ve)52 b(th)l(e)g(bas)n(is.)65 b(In)0 2757 y(a)-6 b(dditio)l(n,)50 b FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)47 b(bas)n(is)f(c)l(o)l(ns)-5 b(tru)g(c)g(tio)l(n)44 b(algo)-7 b(r)s(ithm)45 b(tr)s(ie)o(s)h(to)g(s)m (e)l(l)n(ec)-5 b(t)46 b(ar)q(c)-7 b(hitec)i(t)l(ural)45 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(whic)-7 b(h)44 b(will)h(fo)-7 b(r)5 b(m)0 2957 y(an)70 b(a)-6 b(p)e(pr)q(ox)10 b(i)s(ma)-8 b(te)l(ly)68 b(l)n(owe)l(r)11 b(-di)s(ago)l(nal)69 b(ma)-8 b(tr)s(ix)69 b(and)g(pr)q(ovid)-5 b(e)70 b(n)n(ume)l(r)s(ically)f(s)-5 b(t)s(a)l(b)l(l)n(e)70 b(pivots.)117 b(Co)l(ns)-5 b(tru)g(c)g(ti)s(n)n (g)67 b(a)0 3156 y(ma)-8 b(tr)s(ix)44 b(whic)-7 b(h)43 b(is)i(a)-6 b(p)e(pr)q(ox)10 b(i)s(ma)-8 b(te)l(ly)43 b(l)n(owe)l(r)11 b(-di)s(ago)l(nal)43 b(m)s(i)s(ni)s(m)s(is)m(e)o(s)i (\002ll-i)s(n)f(wh)l(en)f(th)l(e)g(bas)n(is)i(is)g(fa)n(c)-5 b(to)e(r)q(e)l(d.)62 b(Seve)l(ral)0 3355 y(of)k(th)l(e)f(id)-5 b(eas)65 b(i)s(mpl)n(e)n(mente)l(d)g(i)s(n)k FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)67 b(i)s(niti)s(al)e(bas)n(is)h(c)l(o)l(ns)-5 b(tru)g(c)g(tio)l(n)64 b(algo)-7 b(r)s(ithms)65 b(ar)q(e)h(d)-5 b(e)o(sc)d(r)s(ibe)l(d)65 b(by)g(Bixby)0 3554 y(i)s(n)53 b([1)o(].)249 3853 y(Si)s(nc)-6 b(e)61 b FM(D)8 b(Y)g(L)g(P)64 b FP(make)o(s)58 b(an)g(e)l(f)n(fo)-7 b(rt)58 b(to)f(po)-5 b(p)g(u)l(la)d(te)57 b(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)57 b(sys)-5 b(te)n(m)57 b(with)g(c)l(o)l(ns)-5 b(trai)s(nts)56 b(tha)-8 b(t)57 b(s)-8 b(h)n(o)j(u)l(ld)57 b(be)0 4053 y(tight)52 b(a)-8 b(t)52 b(o)-5 b(pti)s(mality)-17 b(,)52 b(an)h(ar)q(c)-7 b(hitec)i(t)l(ural)52 b(bas)n(is)i(is)f(th)l(e)f(d)-5 b(e)l(fa)d(u)l(lt.)0 4645 y Fu(11.2)197 b(W)-14 b(ar)t(m)66 b(Start)0 5065 y FP(T)8 b(h)l(e)73 b(r)q(o)-5 b(u)l(ti)s(n)n(e)72 b FJ(dy_w)l(ar)t(mstar)s(t)h FP(i)s(mpl)n(e)n(ments)f(a)h(war)5 b(m)73 b(s)-5 b(t)s(art.)126 b(T)8 b(h)l(e)72 b(client)h(is)g(e)-5 b(xpec)g(te)l(d)73 b(to)g(s)-8 b(u)i(p)e(ply)71 b(an)i(i)s(niti)s(al)0 5264 y(bas)n(is,)50 b(e)-5 b(xpr)q(e)o(s)g(s)m(e)l(d)49 b(as)g(a)f(s)m(e)-7 b(t)49 b(of)g(a)n(c)-5 b(tive)48 b(c)l(o)l(ns)-5 b(trai)s(nts)48 b(and)g(c)l(o)-7 b(rr)q(e)o(s)f(po)l (ndi)s(n)n(g)46 b(bas)n(ic)j(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)65 b(By)48 b(d)-5 b(e)l(fa)d(u)l(lt,)52 b FM(D)8 b(Y)g(L)g(P)0 5463 y FP(will)64 b(a)n(c)-5 b(tiv)r(a)d(te)65 b(all)h(v)r(ar)s(i)s(a)l (b)l(l)n(e)o(s)g(r)q(e)l(fe)l(r)q(enc)-6 b(e)l(d)65 b(by)g(ea)n(c)-7 b(h)66 b(c)l(o)l(ns)-5 b(trai)s(nt.)102 b(A)8 b(s)66 b(an)f(o)-5 b(ptio)l(n,)67 b(th)l(e)e(client)g(can)h(s)-8 b(pec)m(ify)64 b(an)0 5662 y(i)s(niti)s(al)52 b(s)m(e)-7 b(t)54 b(of)e(a)n(c)-5 b(tive)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)0 6255 y Fu(11.3)197 b(Hot)66 b(Start)0 6674 y FP(Fo)-7 b(r)44 b(a)g(h)n(ot)f(s)-5 b(t)s(art,)50 b FM(D)8 b(Y)g(L)g(P)49 b FP(as)-5 b(s)d(ume)o(s)44 b(tha)-8 b(t)43 b(all)g(i)s(nte)l(r)5 b(nal)42 b(da)-8 b(t)s(a)44 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)44 b(ar)q(e)f(e)-5 b(xa)n(c)g(tly)43 b(as)h(th)l(ey)f(we)l(r)q(e)g(wh)l (en)f(it)h(las)-5 b(t)0 6873 y(r)q(e)e(t)l(ur)5 b(n)n(e)l(d)50 b(to)h(th)l(e)f(client.)64 b(Chan)n(g)n(e)o(s)49 b(to)h(th)l(e)g(c)l(o) l(ns)-5 b(trai)s(nt)50 b(sys)-5 b(te)n(m)50 b(m)l(u)-7 b(s)i(t)51 b(be)g(c)l(o)l(n\002)s(n)n(e)l(d)e(to)i(th)l(e)f(r)s (ight-hand-s)n(id)-5 b(e,)0 7073 y(o)d(bj)l(ec)j(tive,)53 b(and)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(u)-6 b(p)e(pe)l(r)52 b(and)h(l)n(owe)l(r)g(bo)-5 b(und)52 b(vec)-5 b(to)e(rs,)55 b(s)n(o)e(tha)-8 b(t)52 b(th)l(e)h(bas)n(is)h(fa)n(c)-5 b(to)e(r)s(isa)f(tio)l(n)52 b(and)h(i)s(nve)l(rs)m(e)0 7272 y(ar)q(e)j(n)m(ot)e(af)n(fec)-5 b(te)l(d.)74 b(T)8 b(h)l(e)55 b(client)g(is)h(r)q(e)o(s)-8 b(po)l(ns)n(ib)l(l)n(e)54 b(fo)-7 b(r)56 b(i)s(ndica)-8 b(ti)s(n)n(g)53 b(to)59 b FM(D)8 b(Y)g(L)g(P)62 b FP(whic)-7 b(h)54 b(of)h(th)l(e)o(s)m(e)g (vec)-5 b(to)e(rs)56 b(ha)-7 b(ve)55 b(been)0 7471 y(c)-7 b(han)n(g)n(e)l(d.)90 b(T)8 b(h)l(e)61 b(r)q(o)-5 b(u)l(ti)s(n)n(e)61 b FJ(dy_hotstar)s(t)g FP(scans)h(th)l(e)f(c)-7 b(han)n(g)n(e)l(d)59 b(vec)-5 b(to)e(rs)63 b(and)e(o)-7 b(r)q(c)g(h)l(e)o(s)i(tra)d(te)o(s) 62 b(any)f(u)-6 b(pda)e(te)o(s)61 b(to)h(th)l(e)0 7670 y(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g)61 b(da)-8 b(t)s(a)64 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)64 b(i)s(n)g(th)l(e)f(a)n (c)-5 b(tive)64 b(c)l(o)l(ns)-5 b(trai)s(nt)63 b(sys)-5 b(te)n(m.)98 b(Unlike)62 b(a)j(c)l(o)-5 b(ld)63 b(o)-7 b(r)64 b(war)5 b(m)63 b(s)-5 b(t)s(art,)68 b(th)l(e)0 7870 y(bas)n(is)50 b(is)g FG(not)61 b FP(fa)n(c)-5 b(to)e(r)q(e)l(d)50 b(pr)s(io)-7 b(r)50 b(to)g(r)q(e)o(s)-8 b(um)s(i)s(n)n(g)48 b(pivots.)68 b FM(D)8 b(Y)g(L)g(P)56 b FP(as)-5 b(s)d(ume)o(s)50 b(tha)-8 b(t)49 b(th)l(e)h(bas)n(is)g(was)g(r)q(e)l(fa)n(c)-5 b(to)e(r)q(e)l(d)49 b(as)h(part)0 8069 y(of)h(th)l(e)g(n)m(o)-7 b(r)5 b(mal)51 b(pr)q(eo)-5 b(pti)s(mality)50 b(s)m(eq)l(u)l(enc)-6 b(e)52 b(pr)s(io)-7 b(r)51 b(to)g(th)l(e)g(las)-5 b(t)52 b(r)q(e)-7 b(t)l(ur)5 b(n)51 b(to)g(th)l(e)g(client)g(and)g(tha)-8 b(t)51 b(n)m(o)f(i)s(nte)l(rveni)s(n)n(g)0 8268 y(pivots)73 b(ha)-7 b(ve)72 b(occurr)q(e)l(d.)126 b(Any)72 b(n)n(ume)l(r)s(ical)h (pr)q(o)-8 b(b)l(l)n(e)n(ms)72 b(ar)s(is)n(i)s(n)n(g)g(fr)q(o)n(m)h(th) l(e)g(modi\002ca)-8 b(tio)l(ns)71 b(s)-8 b(pec)m(i\002e)l(d)72 b(by)h(th)l(e)0 8467 y(client)52 b(will)g(be)h(pic)-8 b(ke)l(d)52 b(u)-6 b(p)53 b(i)s(n)f(th)l(e)h(n)m(o)-7 b(r)5 b(mal)52 b(c)l(o)-5 b(urs)m(e)52 b(of)h(dy)7 b(nam)s(ic)51 b(s)n(i)s(mpl)n(e)-5 b(x)54 b(e)-5 b(xecu)l(tio)l(n.)3771 11400 y(35)p eop end %%Page: 36 39 TeXDict begin 36 38 bop 0 475 a FL(12)238 b(Dy)10 b(namic)79 b(Sim)-7 b(ple)d(x)0 992 y Fu(12.1)197 b(No)-8 b(r)t(m)n(al)65 b(Algo)-8 b(r)r(ithm)65 b(Flow)0 1411 y FP(Fig)n(ur)q(e)80 b(3)g(g)t(ive)o(s)g(th)l(e)f(n)m(o)-7 b(r)5 b(mal)79 b(\003)n(ow)h(of)g(th)l(e)f(dy)7 b(nam)s(ic)79 b(s)n(i)s(mpl)n(e)-5 b(x)80 b(algo)-7 b(r)s(ithm)79 b(i)s(mpl)n(e)n(mente)l(d)g(i)s(n)84 b FM(D)8 b(Y)g(L)g(P)t FP(.)148 b(T)8 b(h)l(e)0 1610 y(o)-5 b(u)l(tc)l(o)n(me)o(s)72 b(i)s(ncl)n(ud)-5 b(e)l(d)70 b(i)s(n)i(th)l(e)f(n)m(o)-7 b(r)5 b(mal)70 b(\003)n(ow)h(of)h(th)l(e)f (algo)-7 b(r)s(ithm)70 b(ar)q(e)i(pr)s(i)s(mal)g(o)-5 b(pti)s(mality)-17 b(,)75 b(i)s(nfeas)n(ibility)-17 b(,)76 b(and)0 1809 y(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s,)83 b(and)c(d)-7 b(ual)78 b(o)-5 b(pti)s(mality)78 b(and)g(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s.)142 b(Oth)l(e)l(r)78 b(o)-5 b(u)l(tc)l(o)n(me)o(s)79 b(\()p FG(e)p FP(.)p FG(g)p FP(.,)85 b(l)n(os)-5 b(s)79 b(of)g(d)-7 b(ual)0 2009 y(feas)n(ibility)52 b(d)-7 b(ur)s(i)s(n)n(g)51 b(d)-7 b(ual)52 b(s)n(i)s(mpl)n(e)-5 b(x,)53 b(o)-7 b(r)53 b(n)n(ume)l(r)s (ical)g(i)s(ns)-5 b(t)s(a)l(bility\))51 b(ar)q(e)j(discu)-7 b(s)i(s)m(e)l(d)52 b(i)s(n)h(\24712.2.)249 2308 y(T)8 b(h)l(e)54 b(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n)52 b(of)i(th)l(e)g(dy) 7 b(nam)s(ic)53 b(s)n(i)s(mpl)n(e)-5 b(x)55 b(algo)-7 b(r)s(ithm)53 b(is)h(s)-5 b(tru)g(c)g(t)l(ur)q(e)l(d)54 b(as)h(a)f(\002)s(nite)g(s)-5 b(t)s(a)d(te)54 b(ma)n(c)-7 b(hi)s(n)n(e,)0 2507 y(with)81 b(s)n(ix)h(n)m(o)-7 b(r)5 b(mal)81 b(s)-5 b(t)s(a)d(te)o(s,)91 b(pr)s(i)s(mal)82 b(s)n(i)s(mpl)n(e)-5 b(x,)90 b(d)-7 b(ual)81 b(s)n(i)s(mpl)n(e)-5 b(x,)90 b(d)-5 b(ea)n(c)g(tiv)r(a)d(te)82 b(v)r(ar)s(i)s(a)l(b)l(l)n(e) o(s,)90 b(a)n(c)-5 b(tiv)r(a)d(te)81 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,) 0 2706 y(d)-5 b(ea)n(c)g(tiv)r(a)d(te)56 b(c)l(o)l(ns)-5 b(trai)s(nts,)56 b(and)f(a)n(c)-5 b(tiv)r(a)d(te)56 b(c)l(o)l(ns)-5 b(trai)s(nts;)57 b(two)e(u)-7 b(s)m(e)l(r)11 b(-s)-8 b(u)i(p)e(plie)l(d)56 b(s)-5 b(t)s(a)d(te)o(s,)58 b(g)n(en)n(e)l(ra)-8 b(te)55 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(and)0 2905 y(g)n(en)n(e)l(ra)-8 b(te)48 b(c)l(o)l(ns)-5 b(trai)s(nts;)50 b(and)f(thr)q(ee)g(e)l(rr)q(o)-7 b(r)50 b(r)q(ec)l(ove)l(ry)f(s)-5 b(t)s(a)d(te)o(s,)51 b(fo)-7 b(r)q(c)h(e)50 b(pr)s(i)s(mal)g(feas)n (ibility)-17 b(,)50 b(fo)-7 b(r)q(c)h(e)50 b(d)-7 b(ual)48 b(feas)n(ibility)-17 b(,)0 3105 y(and)56 b(fo)-7 b(r)q(c)h(e)57 b(fu)l(ll)f(c)l(o)l(ns)-5 b(trai)s(nt)56 b(sys)-5 b(te)n(m.)76 b(St)s(a)-8 b(te)56 b(trans)n(itio)l(ns)f(ar)q(e)i(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)l(d)57 b(by)f(th)l(e)g(pr)q(evio)-5 b(u)e(s)57 b(s)-5 b(t)s(a)d(te,)58 b(th)l(e)e(type)0 3304 y(of)d(s)n(i)s(mpl)n(e)-5 b(x)53 b(i)s(n)g(u)-7 b(s)m(e,)53 b(and)f(th)l(e)g(o)-5 b(u)l(tc)l(o)n(me)53 b(of)g(a)n(c)-5 b(tio)l(ns)52 b(i)s(n)g(a)h(s)-5 b(t)s(a)d(te.)249 3603 y(A)8 b(s)59 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)59 b(i)s(n)g(\24711,)64 b FM(D)8 b(Y)g(L)g(P)65 b FP(e)o(s)-5 b(t)s(a)l(b)l(lis)d(h)l(e)o(s)58 b(an)h(i)s(niti)s(al)f(a)n(c)-5 b(tive)59 b(c)l(o)l(ns)-5 b(trai)s(nt)58 b(sys)-5 b(te)n(m,)60 b(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)o(s)60 b(wh)l(e)-7 b(th)l(e)l(r)0 3802 y(th)l(e)52 b(sys)-5 b(te)n(m)53 b(is)g(pr)s(i)s(mal)g(o)-7 b(r)53 b(d)-7 b(ual)52 b(feas)n(ib)l(l)n(e,)h(and)f(c)-7 b(h)n(oos)m(e)o(s)54 b(th)l(e)e(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)53 b(s)n(i)s(mpl)n(e)-5 b(x)53 b(as)g(th)l(e)g(s)-5 b(t)s(arti)s(n)n(g)52 b(p)-6 b(has)m(e.)249 4101 y(T)8 b(h)l(e)77 b(mos)-5 b(t)77 b(c)l(o)n(mmo)l(n)g(e)-5 b(xecu)l(tio)l(n)76 b(pa)-8 b(tte)l(r)5 b(n)77 b(is)g(as)h(d)-5 b(e)o(sc)d(r)s(ibe)l(d)77 b(i)s(n)g(th)l(e)g(Intr)q(od)-7 b(u)i(c)g(tio)l(n:)112 b(T)8 b(h)l(e)77 b(i)s(niti)s(al)g(a)n(c)-5 b(tive)0 4300 y(c)l(o)l(ns)g(trai)s(nt)59 b(sys)-5 b(te)n(m)60 b(is)h(n)n(eith)l(e)l(r)e(pr)s(i)s(mal)i(o)-7 b(r)61 b(d)-7 b(ual)59 b(feas)n(ib)l(l)n(e.)89 b(Pr)s(i)s(mal)61 b(s)n(i)s(mpl)n(e)-5 b(x)61 b(is)g(u)-7 b(s)m(e)l(d)60 b(to)g(s)n(o)-5 b(lve)61 b(this)f(sys)-5 b(te)n(m)0 4499 y(to)55 b(o)-5 b(pti)s(mality)-17 b(.)70 b(A)55 b(m)s(i)s(n)m(o)-7 b(r)54 b(l)n(oo)-5 b(p)55 b(th)l(en)f(a)n(c)-5 b(tiv)r(a)d(te)o(s)54 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(with)d(fa)-7 b(vo)i(ura)l(b)l(l)n(e) 55 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)54 b(c)l(os)-5 b(t)55 b(and)f(r)q(eo)-5 b(pti)s(m)s(is)m(e)o(s)0 4699 y(u)e(s)n(i)s(n)n(g)72 b(pr)s(i)s(mal)i(p)-6 b(has)m(e)72 b(II.)127 b(T)8 b(his)73 b(l)n(oo)-5 b(p)73 b(r)q(e)-7 b(pea)f(ts)73 b(until)f(n)m(o)g(v)r(ar)s (i)s(a)l(b)l(l)n(e)o(s)i(can)f(be)g(a)n(c)-5 b(tiv)r(a)d(te)l(d;)83 b(a)-8 b(t)73 b(this)f(poi)s(nt)h(th)l(e)0 4898 y(s)n(o)-5 b(l)n(u)l(tio)l(n)61 b(is)j(o)-5 b(pti)s(mal)63 b(fo)-7 b(r)63 b(th)l(e)g(a)n(c)-5 b(tive)63 b(c)l(o)l(ns)-5 b(trai)s(nts,)65 b(ove)l(r)e(all)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)97 b(T)8 b(h)l(e)63 b(algo)-7 b(r)s(ithm)63 b(th)l(en)f(a)-8 b(tte)n(mpts)62 b(to)0 5097 y(a)n(c)-5 b(tiv)r(a)d(te)65 b(vio)-5 b(la)d(te)l(d)66 b(c)l(o)l(ns)-5 b(trai)s(nts;)71 b(if)66 b(n)m(o)l(n)n(e)f(ar)q(e)h(fo)-5 b(und,)68 b(th)l(e)e(s)n(o)-5 b(l)n(u)l(tio)l(n)64 b(is)i(o)-5 b(pti)s(mal)65 b(fo)-7 b(r)66 b(th)l(e)g(o)-7 b(r)s(ig)t(i)s(nal)65 b(pr)q(o)-8 b(b)l(l)n(e)n(m.)0 5296 y(Afte)l(r)48 b(vio)-5 b(la)d(te)l(d)48 b(c)l(o)l(ns)-5 b(trai)s(nts)47 b(ar)q(e)i(a)n(c)-5 b(tiv)r(a)d(te)l (d,)49 b(l)n(oos)m(e)f(c)l(o)l(ns)-5 b(trai)s(nts)48 b(ar)q(e)g(d)-5 b(ea)n(c)g(tiv)r(a)d(te)l(d)48 b(and)g(d)-7 b(ual)48 b(s)n(i)s(mpl)n(e)-5 b(x)49 b(is)f(u)-7 b(s)m(e)l(d)0 5496 y(to)59 b(r)q(eo)-5 b(pti)s(m)s(is)m(e.)83 b(Wh)l(en)58 b(an)h(o)-5 b(pti)s(mal)59 b(s)n(o)-5 b(l)n(u)l(tio)l(n)57 b(is)i(r)q(ea)n(c)-7 b(h)l(e)l(d,)60 b(th)l(e)e(algo)-7 b(r)s(ithm)58 b(a)-8 b(tte)n(mpts)58 b(to)h(a)n(c)-5 b(tiv)r(a)d(te)58 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)0 5695 y(with)52 b(fa)-7 b(vo)i(ura)l(b)l(l)n(e)52 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)53 b(c)l(os)-5 b(t)53 b(and)g(r)q(e)-7 b(t)l(ur)5 b(n)53 b(to)g(th)l(e)f(`pr)s(i)s(mal)h(p)-6 b(has)m(e)53 b(II)h(\226)f(a)n(c)-5 b(tiv)r(a)d(te)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s')h(m)s(i)s(n)m(o)-7 b(r)52 b(l)n(oo)-5 b(p.)67 b(If)0 5894 y(n)m(o)55 b(v)r(ar)s(i)s(a)l(b) l(l)n(e)o(s)i(can)f(be)g(a)n(c)-5 b(tiv)r(a)d(te)l(d,)56 b(th)l(e)g(algo)-7 b(r)s(ithm)55 b(a)-8 b(tte)n(mpts)56 b(to)g(a)n(c)-5 b(tiv)r(a)d(te)55 b(vio)-5 b(la)d(te)l(d)56 b(c)l(o)l(ns)-5 b(trai)s(nts.)74 b(If)57 b(n)m(o)l(n)n(e)e(ar)q(e)0 6093 y(fo)-5 b(und,)59 b(th)l(e)g(s)n(o)-5 b(l)n(u)l(tio)l(n)57 b(is)i(o)-5 b(pti)s(mal)58 b(fo)-7 b(r)60 b(th)l(e)e(o)-7 b(r)s(ig)t(i)s(nal)58 b(pr)q(o)-8 b(b)l(l)n(e)n(m.)83 b(If)59 b(vio)-5 b(la)d(te)l(d)58 b(c)l(o)l(ns)-5 b(trai)s(nts)58 b(ar)q(e)i(a)n(c)-5 b(tiv)r(a)d(te)l(d,)59 b(th)l(en)0 6293 y(an)53 b(a)-8 b(tte)n(mpt)51 b(is)i(ma)-6 b(d)h(e)54 b(to)e(a)n(c)-5 b(tiv)r(a)d(te)53 b(d)-7 b(ual)52 b(feas)n(ib)l(l)n(e)h (v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(and)e(d)-7 b(ual)52 b(s)n(i)s(mpl)n(e)-5 b(x)54 b(is)e(u)-7 b(s)m(e)l(d)53 b(to)g(r)q(eo)-5 b(pti)s(m)s(is)m(e.)249 6592 y(T)8 b(h)l(e)l(r)q(e)60 b(is)g(an)g(o)-8 b(bvio)j(u)e(s)60 b(asy)7 b(mme)-7 b(try)60 b(i)s(n)g(th)l(e)g(u)-7 b(s)m(e)60 b(of)g(pr)s(i)s(mal)h(and)f(d)-7 b(ual)59 b(s)n(i)s(mpl)n(e)-5 b(x.)89 b(Wh)l(en)59 b(pr)s(i)s(mal)h(s)n (i)s(mpl)n(e)-5 b(x)0 6791 y(r)q(ea)n(c)e(h)l(e)o(s)56 b(an)f(o)-5 b(pti)s(mal)55 b(s)n(o)-5 b(l)n(u)l(tio)l(n,)55 b(th)l(e)g(`pr)s(i)s(mal)g(p)-6 b(has)m(e)55 b(II)i(\226)e(a)n(c)-5 b(tiv)r(a)d(te)56 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s')f(m)s(i)s(n)m(o)-7 b(r)56 b(l)n(oo)-5 b(p)55 b(ite)l(ra)-8 b(te)o(s)56 b(until)e(n)m(o)0 6990 y(u)-7 b(s)m(e)l(fu)l(l)48 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(r)q (e)n(mai)s(n)e(to)h(be)g(a)n(c)-5 b(tiv)r(a)d(te)l(d.)63 b(Only)47 b(th)l(en)g(doe)o(s)i(th)l(e)f(algo)-7 b(r)s(ithm)47 b(a)n(c)-5 b(tiv)r(a)d(te)48 b(vio)-5 b(la)d(te)l(d)47 b(c)l(o)l(ns)-5 b(trai)s(nts)0 7189 y(and)63 b(move)h(to)f(d)-7 b(ual)63 b(s)n(i)s(mpl)n(e)-5 b(x.)98 b(T)8 b(h)l(e)63 b(anal)n(ogo)-5 b(u)e(s)63 b(m)s(i)s(n)m(o)-7 b(r)63 b(l)n(oo)-5 b(p)64 b(fo)-7 b(r)63 b(d)-7 b(ual)63 b(s)n(i)s(mpl)n(e)-5 b(x)64 b(wo)-5 b(u)l(ld)62 b(be)i(to)f(a)-6 b(dd)64 b(vio)-5 b(la)d(te)l(d)0 7389 y(c)l(o)l(ns)j(trai)s(nts)53 b(\(d)-7 b(ual)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(with)d(fa)-7 b(vo)i(ura)l(b)l(l)n(e)53 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)54 b(c)l(os)-5 b(ts\))54 b(and)f(r)q(eo)-5 b(pti)s(m)s(is)m(e)54 b(with)f(d)-7 b(ual)53 b(s)n(i)s(mpl)n(e)-5 b(x)54 b(until)0 7588 y(n)m(o)83 b(vio)-5 b(la)d(te)l(d)83 b(c)l(o)l(ns)-5 b(trai)s(nts)83 b(r)q(e)n(mai)s(n.)157 b(Ins)-5 b(tea)f(d,)92 b(th)l(e)83 b(algo)-7 b(r)s(ithm)83 b(a)-8 b(tte)n(mpts)83 b(to)g(a)-6 b(dd)84 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(and)e(r)q(e)-7 b(t)l(ur)5 b(n)0 7787 y(to)71 b(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x;)80 b(faili)s(n)n(g)69 b(tha)-8 b(t,)75 b(it)70 b(will)g(a)-6 b(dd)71 b(both)f(vio)-5 b(la)d(te)l(d)70 b(c)l(o)l(ns)-5 b(trai)s(nts)70 b(and)g(d)-7 b(ual)70 b(feas)n(ib)l(l)n(e)h(v)r(ar)s(i) s(a)l(b)l(l)n(e)o(s)0 7986 y(\(sa)-8 b(tis\002e)l(d)79 b(d)-7 b(ual)78 b(c)l(o)l(ns)-5 b(trai)s(nts\).)144 b(T)8 b(h)l(e)79 b(p)-5 b(urpos)m(e)78 b(of)i(this)e(asy)7 b(mme)-7 b(try)79 b(is)g(two-fo)-5 b(ld:)118 b(It)79 b(a)n(c)-8 b(kn)m(owl)n(e)l(dg)n(e)o(s)77 b(tha)-8 b(t)0 8186 y(pr)s(i)s(mal)80 b(i)s(nfeas)n(ibility)e(is)i(m)l(u)-5 b(c)e(h)79 b(mo)-7 b(r)q(e)80 b(like)l(ly)e(than)h(pr)s(i)s(mal)h(un)m (bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s)77 b(wh)l(en)h(s)n(o)-5 b(lvi)s(n)n(g)78 b(L)s(Ps)h(i)s(n)h(th)l(e)0 8385 y(c)l(o)l(nte)-5 b(xt)69 b(of)h(a)g(b)-5 b(ranc)e(h-and-cu)l(t)70 b(algo)-7 b(r)s(ithm,)73 b(and)c(it)h(a)-8 b(tte)n(mpts)70 b(to)g(a)-7 b(void)69 b(th)l(e)g(larg)n(e)g(swi)s(n)n(gs)g(i)s(n)g(th)l(e)h(v)r(al) n(u)l(e)o(s)0 8584 y(of)65 b(pr)s(i)s(mal)g(v)r(ar)s(i)s(a)l(b)l(l)n(e) o(s)h(whic)-7 b(h)63 b(often)i(a)n(cc)l(o)n(mpany)f(d)-7 b(ual)64 b(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s.)100 b(Dual)64 b(s)n(i)s(mpl)n(e)-5 b(x)66 b(move)o(s)g(be)-7 b(tween)0 8783 y(pr)s(i)s(mal)55 b(i)s(nfeas)n(ib)l(l)n(e)g(bas)n(ic)h (s)n(o)-5 b(l)n(u)l(tio)l(ns)53 b(whic)-7 b(h)54 b(can)g(be)h(a)-8 b(t)55 b(a)g(larg)n(e)f(dis)-5 b(t)s(anc)f(e)55 b(fr)q(o)n(m)g(th)l(e)g (pr)s(i)s(mal)g(feas)n(ib)l(l)n(e)g(r)q(e)-5 b(g)t(io)l(n)0 8983 y(and)80 b(a)-8 b(t)80 b(a)h(larg)n(e)e(dis)-5 b(t)s(anc)f(e)81 b(fr)q(o)n(m)g(o)l(n)n(e)f(an)m(oth)l(e)l(r)f(i)s(n)h(th)l(e)g(pr)s(i)s (mal)h(s)-8 b(pa)n(c)i(e.)148 b(T)8 b(his)80 b(pr)q(e)o(s)m(ents)g(a)h (c)-7 b(hall)n(en)n(g)n(e)79 b(fo)-7 b(r)0 9182 y(n)n(ume)l(r)s(ical)47 b(s)-5 b(t)s(a)l(bility)-17 b(.)64 b(Beca)-8 b(u)h(s)m(e)48 b(th)l(e)f(pr)s(i)s(mal)h(s)n(i)s(mpl)n(e)-5 b(x)48 b(r)q(e)n(mai)s(ns) f(withi)s(n)f(th)l(e)h(pr)s(i)s(mal)h(feas)n(ib)l(l)n(e)h(r)q(e)-5 b(g)t(io)l(n,)47 b(pr)s(i)s(mal)0 9381 y(un)m(bo)-5 b(und)g(e)l(dn)n(e) o(s)g(s)51 b(doe)o(s)i(n)m(ot)f(pr)q(e)o(s)m(ent)g(th)l(e)g(same)i (di\002)-49 b(\002cu)l(lty)-17 b(.)249 9680 y(T)r(o)81 b(a)-7 b(void)81 b(cycli)s(n)n(g)e(by)i(r)q(e)-7 b(pea)f(te)l(dly)81 b(d)-5 b(ea)n(c)g(tiv)r(a)d(ti)s(n)n(g)79 b(and)h(r)q(ea)n(c)-5 b(tiv)r(a)d(ti)s(n)n(g)80 b(th)l(e)g(same)i(c)l(o)l(ns)-5 b(trai)s(nt)80 b(wh)l(en)g(th)l(e)0 9879 y(di)s(mens)n(io)l(n)54 b(of)h(th)l(e)f(o)-5 b(pti)s(mal)55 b(fa)n(c)-6 b(e)55 b(is)h(gr)q(ea)-8 b(te)l(r)54 b(than)g(o)l(n)n(e,)h(c)l(o)l(ns)-5 b(trai)s(nt)54 b(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)53 b(is)i(s)-6 b(kip)e(pe)l(d)55 b(unl)n(e)o(s)-5 b(s)55 b(th)l(e)l(r)q(e)0 10078 y(has)80 b(been)g(an)f(i)s(mpr)q(ove)n(ment)g (i)s(n)h(th)l(e)g(o)-8 b(bj)l(ec)j(tive)79 b(func)-5 b(tio)l(n)79 b(s)n(i)s(nc)-6 b(e)80 b(th)l(e)g(pr)q(evio)-5 b(u)e(s)80 b(c)l(o)l(ns)-5 b(trai)s(nt)79 b(d)-5 b(ea)n(c)g(tiv)r(a)d (tio)l(n)0 10278 y(p)i(has)m(e.)65 b(T)8 b(his)53 b(g)n(uarantee)o(s)f (tha)-8 b(t)52 b(th)l(e)h(s)n(i)s(mpl)n(e)-5 b(x)53 b(will)f(n)m(ot)g (r)q(e)-7 b(t)l(ur)5 b(n)52 b(to)h(a)g(pr)q(evio)-5 b(u)e(s)53 b(e)-5 b(xtr)q(e)n(me)52 b(poi)s(nt.)3771 11400 y(36)p eop end %%Page: 37 40 TeXDict begin 37 39 bop 0 9972 a @beginspecial 62 @llx 128 @lly 547 @urx 701 @ury 4850 @rwi @setspecial %%BeginDocument: /devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/dylpnormalflow.eps %!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/dylpnormalflow.epsu %%Creator: IslandDraw for lou %%CreationDate: Fri Aug 19 15:19:48 2005 %%Pages: 1 %%BoundingBox: 62 128 547 701 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 607 717 1 1434 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff801 % 001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000010c0006000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000001000002000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000002000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000006efb3763c2000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000007341199422000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000021411110e2000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000002141111322000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000002341111462000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000003ee3bbbbb7000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000002000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000002000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000007000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000400001800000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000400000800000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000800000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000000004001adbb1b88e77000c0000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000005000e00001000000003c00244cc9cc9f16000f8000000000 % 00000080006000062000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000900100000100000000f8003a48888490080003f000000000 % 00000100002000022000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000001000100000080000003e00006488884901c00007e00000000 % 00000200002000021000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000136e39c78688000001f00002248888c992600000fe0000000 % 000002426e2e6e3e1000000000000000000000000000000000000000000000000000001800 % 00100000000000000000000000000113113e84908000007c00003cfddcf9ce77000001fc000000 % 000002c6313331621000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000011211201ce8800001f000000000008000000000001f800000 % 00000242212121421000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000001121120641880000f80000000000080000000000003f00000 % 00000242212121421000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000011211328c8880003e000000000001c00000000000007f0000 % 00000246212321461000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000013f3b9c76f08000f8000000000000000000000000000fe000 % 0000023b73be73bb1000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000100000000008007c00000000000000000000000000000fc00 % 00000200000000001000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000008000000001001f0000000000000000000000000000001f80 % 00000100000000002000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000007c00000000000000000000000000000003f8 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000003e0000000000000000000000000000000007f % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000f800000000000000000000000000000000007 % e0000000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000003e000000000000000000000000000000000000 % fc000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000001f0000000000000000000000000000000000000 % 1fc00000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000007c0000000000000000000000000000000000000 % 03f80000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000001f000000000000000000c0000000000000000000 % 003f0000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000f8000000000000000000c0000000000000000000 % 0007e000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000183e0000000000000000000c0000000000000000000 % 0000fe00000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000038f80000000000000000000c0000000000000000000 % 00001fc0000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000ffc00000000000000000000c0000000000000000000 % 000001f8000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000001ff000000000000000000000c0000000000000000000 % 0000003f000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000003fe000000000000000000000c0000000000000000000 % 00000007f00000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000007fe000000000000000000000c0000000000000000000 % 00000000fe0000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000ffe000000000000000000000c0000000000000000000 % 000000000fc000000000000000000000000000000000000000000000000000000000001801 % 0010000002f81100000000000000000001ff8000000000000000000000c0800004000000000000 % 0000000001f800000000000000000000000000000000000000000000000000000000001801 % 0010000004447100000000000000000000000000000000000000000000c1000084000000000000 % 00000000003f80000000000000000000000000000000000000000000000000000000001801 % 0010000008441080000000000000000000000000000000000000000000c2000082000000000000 % 000000000007f0000000000000000000000000000000000000000000000000000000001801 % 0010000008441080000000000000000000000000000000000000000000c23cdde2000000000000 % 0000000000007e030000000000000000000000000000000000000000000000000000001801 % 0010000008781080000000000000000000000000000000000000000000c266e682000000000000 % 0000000000000fc7c000000000000000000000000000000000000000000000000000001801 % 0010000008401080000000000000000000000000000000000000000000c2424282000000000000 % 00000000000001ffe000000000000000000000000000000000000000000000000000001801 % 0010000008401080000000000000000000000000000000000000000000c2424282000000000000 % 000000000000003ff000000000000000000000000000000000000000000000000000001801 % 0010000008603080000000000000000000000000000000000000000000c2464682000000000000 % 000000000000000ffc00000000000000000000000000000000000000000000000000001800 % 0010000008e07880000000000000000000000000000000000000000000c23c7ce2000000000000 % 000000000000000ffe00000000000000000000000000000000000000000000000000001800 % 0010000008000080000000000080000000000000000000000000000000c2004002000000000000 % 000000000000000fff00000000010000000000000000000000000000000000000000001800 % 0010000004000100000000000880002000000000000000000000000000c1004004000000000000 % 00000000000000000000000000110000400000000000000000000000000000000000001800 % 0010000000000000000000000800002000000000000000000000000000c000e000000000000000 % 00000000000000000000000000100000400000000000000000000000000000000000001800 % 0010000000000000000003c79f9dde79c0000000000000000000000000c0000000000000000000 % 0000000000000000000000078f3f3bbcf38000000000000000000000000000000000001801 % 00100000000000000000042c4888a123e0000000000000000000000000c0000000000000000000 % 0000000000000000000000085891114247c000000000000000000000000000000000001800 % 0010060000000000000000e8088d072200000000000000000000000000c0000000000000000000 % 000000000000000000000001d0111a0e440000000000000000000000000000000000001800 % 00103e0000000000000003280885192200000000000000000000000000c0000000000000000000 % 00000000000000000000000650110a32440000000000000000000000000000000000001800 % 0011fe00000000000000046c4886232320000000000000000000000000c0000000000000000000 % 000000000000000000000008d8910c46464000000000000000000000000000000000001800 % 001ffe0000000000000003b78fc21db9c0000000000000000000000000c0000000000000000000 % 0000000000000000000000076f1f843b738000000000000000000000000000000000001800 % 001fffffffffffff800000000000000000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000000000000000005f1c2000000000000000000000001800 % 0017fe0000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000088a22000000000000000000000001801 % 0010fe0000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000108a21000000000000000000000001801 % 00101e0000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000108a21000000000000000000000001800 % 0010020000000000000000000000000000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000000000000000010f061000000000000000000000001800 % 0010000000000000000000000401818000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000800000000108041000000000000000000000001801 % 0010000000000000000000000400808000000000000000000000000000c0000000000000000000 % 00000000000000000000000000020000800800000108081000000000000000000000001801 % 0010000000000000000000000000808000000000000000000000000000c0000000000000000000 % 0000000000000000000000000002000000080000010c111000000000000000000000001800 % 001000000000000000007779fc78b88e1a000000000000000000000000c0000000000000000000 % 000000000000000000003cf3706fbef1b71e6800011c3e1000000000000000000000001800 % 0010000020000008000022848484cc9f24000000000000000000000000c0000000000000000000 % 00000000000000000000639988921108988890000100001000000000000000000000001801 % 00100000400000080000341c841c84903a000000000000000000000000c0000000000000000000 % 00000000000000000000410908ea10389088e8000080002000000000000000000000001801 % 0010000080000004000014648464849006000000000000000000000000c0000000000000000000 % 000000000000000000004109081a10c8908818000000000000000000000000000000001800 % 00100000b70e7ee40000188c848c8c9922000000000000000000000000c0000000000000000000 % 000000000000000000006319088a1118908888000000000000000000000000000000001800 % 00100000989f244400000877ce76f9ce3c000000000000000000000000c0000000000000000000 % 000000000000000000003cf39cf3b8edf9cef0000000000000000000000000000000001801 % 0010000090903644000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000601801 % 0010000090901a84000000000000000000000000000000000000000000c0000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000007c1800 % 0010000090991b04000000000000000000000000000000000000000000c0000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000007f9800 % 00100000b9ce0904000000000000000000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000000000000000fffffffffffffffffffffffffffffff801 % 0010000080000004000000000000000000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000000000000000fffffffffffffffffffffffffffffff801 % 0010000040000008000000000000000000000000000000000000000000c0000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000007fd800 % 0010000000000000000000000be0440000000000000000000000000000c0000000000000000000 % 000000000000000000000300000000310000400000000000000000000000000000007e1800 % 0010000000000000000000001111c40000000000000000000000000000c0000000000000000000 % 00000000000000000000050000000011000040000000000000000000000000000000701801 % 0010000000000000000000002110420000000000000000000000000000c0000000000000000000 % 000000000000000000000900000000100001a0000000000000000000000000000000001801 % 0010000000000000000000002110420000000000000000000000000000c0000000000000000000 % 000000000000000000000971e21371f36e0e20000000000000000000000000000000001800 % 00100000000000000000000021e0420000000000000000000000000000c0000000000000000000 % 00000000000000000000099b36318b11311120000000000000000000000000000000001800 % 0010000000000000000000002100420000000000000000000000000000c0000000000000000000 % 00000000000000000000090a12110a11211120000000000000000000000000000000001801 % 0010000000000000000000002100420000000000000000000000000000c0000000000000000000 % 00000000000000000000090a12110a11210e20000800000100000000000000000000001801 % 0010000000000000000000002180c20000000000000000000000000000c0000000000000000000 % 00000000000000000000091a32310a31211020001000000100000000000000000000001800 % 0010000000000000000000002381e20000000000000000000000000000c0000000000000000000 % 0000000000000000000009f1e1db9ddbf39f20002000000080000000000000000000001800 % 0010000000000000000000002000020000000000000000000000000000c0000000000000000000 % 000000000000000000000800000000000011a00026e38fdc80000000000000000000001801 % 0010000000000000000000001000040000000000000000000000000000c0000000000000000000 % 000000000000000000000400000000000031c0002317c48880000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000001e0000221406c880000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000002214035080000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000002216436080000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000000000000000273b812080000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000002000000080000000000000000000001800 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000001000000100000000000000000000001800 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000c010000000100000000000000000000c0000000000000000000 % 00000000000000000040000000401800000000000000000000000000000000000000001800 % 001000000000000000000000000c020000000100000000000000000000c0000000000000000000 % 00000000000000000080000000401800000000000000000000000000000000000000001801 % 001000000000000000000000000c040000000080000000000000000000c0000000000000000000 % 00000000000000000100000000201800000000000000000000000000000000000000001801 % 001000000000000000000000000c04dc79b87080000000000000000000c0000000000000000000 % 000000000000000001371e6e38201800000000000000000000000000000000000000001800 % 001000000000000000000000000c0462ccc4f880000000000000000000c0000000000000000000 % 00000000000000000118b3317c201800000000000000000000000000000000000000001800 % 001000000000000000000000000c044284848080000000000000000000c0000000000000000000 % 00000000000000000110a12140201800000000000000000000000000000000000000001801 % 001000000000000000000000000c044284848080000000000000000000c0000000000000000000 % 00000000000000000110a12140201800000000000000000000000000000000000000001801 % 001000000000000000000000000c04428c84c880000000000000000000c0000000000000000000 % 00000000000000000110a32164201800000000000000000000000000000000000000001800 % 001000000000000000000000000c04e779ce7080000000000000000000c0000000000000000000 % 00000000000000000139de73b8201800000000000000000000000000000000000000001800 % 001000000000000000000000000c040000000080000000000000000000c0000000000000000000 % 00000000000000000100000000201800000000000000000000000000000000000000001800 % 001000000000000000000000000c020000000100000000000000000000c0000000000000000000 % 00000000000000000080000000401800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000007f800000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000ff00000000000000000000000000000000000000001800 % 001000000000000000000000007f800000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000ff00000000000000000000000000000000000000001801 % 001000000000000000000000007f800000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000fe00000000000000000000000000000000000000001801 % 001000000000000000000000003f000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000007e00000000000000000000000000000000000000001800 % 001000000000000000000000003f000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000007e00000000000000000000000000000000000000001800 % 001000000000000000000000003f000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000007c00000000000000000000000000000000000000001801 % 001000000000000000000000001e000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000003c00000000000000000000000000000000000000001800 % 001000000000000000000000001e000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000003c00000000000000000000000000000000000000001800 % 001000000000000000000000001e000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000003c00000000000000000000000000000000000000001800 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000c000000000000000000000000000000c0000000000000000000 % 0000002fc1c20000000000000001180000000000005f042000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 000000446222000000000000001100004000000000889c2000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000084322100000000000000100000400000000108841000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0000008412210000000000078f3f3bbcf38000000108841000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0000008410610000000000085891114247c00000010f041000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 000000841041000000000001d0111a0e440000000108041000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000084308100000000000650110a32440000000108041000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 000000842111000000000008d8910c4646400000010c0c1000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0000008fc3e10000000000076f1f843b73800000011c1e1000000000000000000000001801 % 00100000000000000000003f03c71cfe00000000000000000000000000c0000000000000000000 % 00000080000100000000000000000000000000000100001000000000000000000000001801 % 0010000000000000000000118423884600000000000000000000000000c0000000000000000000 % 00000040000200000000000000000000000000000080002000000000000000000000001801 % 001000000000000000000010c822884100000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000104812c84800000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000104812687800000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000104812684800000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000800000000000000000000000000000000000701801 % 001000000000000000000010c832384100000000000000000000000000c0000000000000000000 % 000000000000000000000000000200008008000000000000000000000000000000007e1801 % 0010000000000000000000108422184200000000000000000000000000c0000000000000000000 % 000000000000000000000000000200000008000000000000000000000000000000007fd801 % 00100000000000000000003f03c718fe00000000000000000000000000c0000000000000000000 % 007ffffffffffffe00003cf3706fbef1b71e6800fffffffffffffffffffffffffffffff801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 007ffffffffffffe000063998892110898889000fffffffffffffffffffffffffffffff801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000410908ea10389088e80000000000000000000000000000007fd801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 004000000000000000004109081a10c89088180000000000000000000000000000007e1801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 004000000000000000006319088a1118908888000000000000000000000000000000701801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 004000000000000000003cf39cf3b8edf9cef0000000000000000000000000000000001801 % 001000000000000000014003800004c180100000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000240040000044080100000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000400040000004080080000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 00100000000000000004db8e71e1ac5c8e080000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000800000100000000000000000000001800 % 001000000000000000044c44fa1244669f080000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000001000000100000000000000000000001800 % 0010000000000000000448448073a44290080000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000002000000080000000000000000000001800 % 0010000000000000000448448190644290080000000000000000000000c0000000000000000000 % 004000000000000000000010100600000188000026e38fdc80000000000000000000001800 % 001000000000000000044844ca32244699080000000000000000000000c0000000000000000000 % 00400000000000000000002010020040008800002317c48880000000000000000000001801 % 00100000000000000004fcee71dbce7dce080000000000000000000000c0000000000000000000 % 0040000000000000000000400002004000840000221406c880000000000000000000001800 % 0010000000000000000400000000000000080000000000000000000000c0000000000000000000 % 00400000000000000000004ef1e23cf38f8400002214035080000000000000000000001800 % 0010000000000000000200000000000000100000000000000000000007f8000000000000000000 % 00400000000000000000004453324247d88400002216436080000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000004692120e4410840000273b812080000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000004292123244108400002000000080000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000004312324646518400001000000100000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000004139e73b738ec400000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000004000000000000400000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000002000000000000800000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000002f871000000000000800000000000000000000 % 00400000000000000040000000401800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000044489000000000008800020000000000000000 % 00400000000000000080000000401800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000084488800000000008000020000000000000000 % 00400000000000000100000000201800000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000008448880000003c79f9dde79c00000000000000 % 004000000000000001371e6e38201800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000087818800000042c4888a123e00000000000000 % 00400000000000000118b3317c201800000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000008401080000000e8088d0722000000000000000 % 00400000000000000110a12140201800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000084020800000032808851922000000000000000 % 00400000000000000110a12140201800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000086044800000046c48862323200000000000000 % 00400000000000000110a32164201800000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000008e0f880000003b78fc21db9c00000000000000 % 00400000000000000139de73b8201800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000080000800000000000000000000000000000000 % 00400000000000000100000000201800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000040001000000000000000000000000000000000 % 00400000000000000080000000401800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001006000000000000000000000000000000000000000000000000004018180000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 00103e000000000000000000000000000000000000000000000000004008080000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0011fe000000000000000000000000000000000000000000000000000008080000000000000000 % 0040000000000000000000000000ff00000000000000000000000000000000000000001801 % 001ffffffffffffffffffffffffffffffffffffffffffff80007779fc78b88e1a0000000000000 % 0040000000000000000000000000ff00000000000000000000000000000000000000001801 % 001ffffffffffffffffffffffffffffffffffffffffffff800022848484cc9f240000000000000 % 0040000000000000000000000000fe00000000000000000000000000000000000000001800 % 0013fe000000000000000000000000000000000000000000000341c841c84903a0000000000000 % 00400000000000000000000000007e00000000000000000000000000000000000000001800 % 00107e000000000000000000000000000000000000000000000146484648490060000000000000 % 00400000000000000000000000007e00000000000000000000000000000000000000001801 % 00100e000000000000000000000000000000000000000000000188c848c8c99220000000000000 % 00400000000000000000000000007c00000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000877ce76f9ce3c0000000000000 % 00400000000000000000000000003c00000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000003c00000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000003800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000200000080000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000400000080000000000000000000000000000000 % 00400000000000000000000000001000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000800000040000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000b70e7ee4000000000be1c400000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000989f24440000000011122400000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000909036440000000021122200000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000090901a840000000021122200000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000090991b040000000021e06200000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000b9ce09040000000021004200000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000800000040000000021008200000000000000000 % 004000000000000000000000001c03300000000000000000000fc0f1c77f00000000001800 % 001000000000000000000000000000000000000400000080000000021811200000000000000000 % 00400000000000000000000000200110000000000000000000046108e22300000000001800 % 00100000000000000000000000000000000000000000000000000002383e200000000000000000 % 00400000000000000000000000200110000000000000000000043208a22080000000001801 % 001000000000000000000000000000000000000000000000000000020000200000000000000000 % 00400000000000000000000000721110000000000000000000041204b22400000000001800 % 001000000000000000000000000000000000000000000000000000010000400000000000000000 % 004000000000000000000000002631100000000000000000000412049a3c00000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 004000000000000000000000002211100000000000000000000412049a2400000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000221110000000000000e0000004320c8e2080000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000223110000000000000fc0000042108862100000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 0040000000000000000000000071dbb8000000000000ff80000fc0f1c67f00000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000001ffffffffe000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000001ffffffffe000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000ff0000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000f00000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000800000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0040000000000000000000000000000001c000000000002000180000000180062000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000010000062000000000004000080000000080022000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000010000042000000000008000080000000080021000001801 % 0010000000000000000000000000000000000000000000000000000000c0100000001000000000 % 004000000000000000000006f737ce3760200000000000885b8b8f109b8f8e3e1000001801 % 0010000000000000000000000000000000000000000000000000000000c0200000001000000000 % 00400000000000000000000922491f199040000000000098cc4cd9b18c589f621000001801 % 0010000000000000000000000000000000000000000000000000000000c0400000000800000000 % 00400000000000000000000eb2751011108000000000008848485090885090421000001801 % 0010000000000000000000000000000000000000000000000000000000c04dc79b870800000000 % 004000000000000000000001940d1011108000000000008848485090885090421000001801 % 0010000000000000000000000000000000000000000000000000000000c0462ccc4f8800000000 % 004000000000000000000008944519111180000000000088c848d191885199461000001801 % 0010000000000000000000000000000000000000000000000000000000c0442848480800000000 % 00400000000000000000000f0879ce3bb9800000000000877cef8f0edceece3b1000001801 % 0010000000000000000000000000000000000000000000000000000000c0442848480800000000 % 00400000000000000000000008000000000000000000008000000000000000001000001801 % 0010000000000000000000000000000000000000000000000000000000c04428c84c8800000000 % 00400000000000000000000038000000000000000000004000000000000000002000001800 % 0010000000000000000000000000000000000000000000000000000000c04e779ce70800000000 % 00400000000000000000000060000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0400000000800000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0200000001000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 0040000000000000000000000000ff00000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000800000000000000000000 % 0040000000000000000000000000ff00000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000008800020000000000000000 % 0040000000000000000000000000fe00000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000008000020000000000000000 % 00400000000000000000000000007e00000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000000000000000003c79f9dde79c00000000000000 % 00400000000000000000000000007e00000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000042c4888a123e00000000000000 % 00400000000000000000000000007c00000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000000000000e8088d0722000000000000000 % 00400000000000000000000000003c00000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000032808851922000000000000000 % 00400000000000000000000000003c00000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000046c48862323200000000000000 % 00400000000000000000000000003800000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000000000003b78fc21db9c00000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000fc0f1c77f00000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000046108e22300000000000000000000000000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000043208a22080000000000000000000000000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000041204b22400000000000000000000000000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000412049a3c00000000000000000000000000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000412049a2400000000000000000000000000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 00100000000000004320c8e2080000038000000000000000000000000000040000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000421088621000001f8000000000000000000000001000040040000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000fc0f1c67f00000ff8000000000000000000000001000000040000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000007fffffffffffffffff801e3cdc37df3ccdcf1a00000000000 % 004000000000000000000000100000000700d8000000000000000000000000000000001800 % 001000000000000000000000000003fffffffffffffffff8031666249084246242400000000000 % 00400000000000000000000110000400080048000000000000000000000000000000001801 % 0010000000000000000000000000007f8000000000000000020424275080e44243a00000000000 % 00400000000000000000000100000400080048000000000000000000000000000000001801 % 0010000000000000000000000000000f800000000000000002042420d083244240600000000000 % 0040000000000000000078f3f3bbcf381c8448000000000000000000000000000000001800 % 001000000000000000000000000000018000000000000000031464245084644242200000000000 % 0040000000000000000085891114247c098c48000000000000000000000000000000001800 % 00100000000000000000000000000000000000000000000001e3ce779dc3bee773c00000000000 % 004000000000000000001d0111a0e440088448000000000000000000000000000000001801 % 001000000000002000010000062000000000000000000000000000000000000000000000000000 % 00400000000000000000650110a32440088448000000000000000000000000000000001801 % 001000000000004000110000022000000000000000000000000000000000000000000000000000 % 004000000000000000008d8910c46464088c48000000000000000000000000000000001800 % 001000000000008000100000021000000000000000000000000000000000000000000000000000 % 0040000000000000000076f1f843b7381c76fc000000000000000000000000000000001800 % 001000000000008f373f3761e21000000000200000002000000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000099b9911992121000000000400000002000000000000000000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000009090911110721000000000800000001000000080803000000c40000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000090909111119210000000009b8f371c1000000100801002000440000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000091919111123210000000008c5998be1000000200001002000420000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000008f1f1fbbb9df1000000000885090a010000002778f11e79c7c20000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000008010000000001000000000885090a010000002229992123ec420000000000000 % 00400000000000000000000000080000000000000000000000000000000000000000001800 % 001000000000004010000000002000000000885190b21000000234909072208420000000000000 % 00400000000000000000002000080080000008000000000000000000000000000000001800 % 0010000000000000380000000000000000009cef39dc1000000214909192208420000000000000 % 00400000000000000000002000000080000008000000000000000000000000000000001801 % 001000000000000000000000000000000000800000001000000218919232328c20000000000000 % 0040000000000003cf3706fbef1b71e06bb9be737600000000000000000000000000001801 % 001000000000000000000000000000000000400000002000000209cf39db9c7620000000000000 % 00400000000000063998892110898880911248f99900000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000200000000000020000000000000 % 004000000000000410908ea103890880e993a8811100000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000100000000000040000000000000 % 0040000000000004109081a10c89088018a068811100000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 0040000000000006319088a11189088088a228c91100000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 0040000000000003cf39cf3b8edf9ce0f043ce73bb80000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000000000004000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 0040000000000000000000000000000001c000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000000000030000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0020000008000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0040000008000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0080000004000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c009b8e3f74000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c008c5f1224000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0088501b24000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0088500d44000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0088590d84000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c009cee0484000000000 % 004000000000000000000000000018000000000002f81001f0e10000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0080000004000000000 % 00400000000000000000000000001800000000000444700c89110000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0040000008000000000 % 00400000000000000000000000001800000000000844100889108000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000844100889108000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 004000000000000000000000000018000000000008781010f0308000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000840101080208000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000840102080408000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 004000000000000000000000000018000000000008603020c0888000000000000000001800 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 004000000000000000000000000018000000000008e07841c1f08000000000000000001800 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000000000001800000000000800004000008000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 0040000000000000000000000000180000000000040000c000010000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000701801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 004000000000000000000000000018000000000000000000000000000000000000007e1801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 004000000000000000000000000018000000000000000000000000000000000000007fd800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001ffffffffffffffffffffffffffffffffffffffffff801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001ffffffffffffffffffffffffffffffffffffffffff801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 004000000000000000000000000018000000000000000000000000000000000000007f9801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 004000000000000000000000000018000000000000000000000000000000000000007c1801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000601801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000300000008000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000100000108000400000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000100000100000400000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000001f1c78f3dbbbcf38000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000000000313e85890914247c000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000021201d0109a0e440000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000002120650108a32440000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000023328d8908c46464000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000001d9c76f1dc43b738000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000040000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000001000040040000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000001000000040000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000000000000001e3cdc37df3ccdcf1a00000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000031666249084246242400000000000 % 0040000000000000000000bf07081800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000020424275080e44243a00000000000 % 00400000000000000000011188881800000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000000000000002042420d083244240600000000000 % 004000000000000000000210c8841800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000031464245084644242200000000000 % 00400000000000000000021048841800000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000000001e3ce779dc3bee773c00000000000 % 00400000000000000000021041841800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000021041041800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 004000000000000000000210c2041800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000021084441800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 00400000000000000000023f0f841800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000020000041800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000010000081800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000007f8000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000003f0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000001e0000000000000000000 % 00400000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 03fc0000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 03fc0000000000000000000000001800000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 03f80000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 03f80000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 01f80000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 01f00000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 01f00000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000000020000000000 % 00f00000000000000000000000001800000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000000000000001e0000000000 % 00e00000000000000000000000001800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000000000000000fe0000000000 % 00e00000000000000000000000001800000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000000000000000000000000007fe0000000000 % 00600000000000000000000000001800000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000000000000001800030001fffffffffffff % fffffffffffffffffffffffffffff800000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000008000100007fe0000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000008000100000fe0000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000000000000000000000000f884f1000001e0000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000001898d0900000020000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000000000000000000000000108843900000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 00100000000000000000000000000000000000000000000000000010884c900000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000001188d1900000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000ec76ef80000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000004000300003100000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000008000100001100000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000010000100001080000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000001213717371f080000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000163189998b1080000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000121109090a1080000000400001800000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000121109090a1080000000400000800000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000123109190a3080000000000000800000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 001000000000000000000000000000000011db9df39dd88004001adbb1b88e7700080000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001800 % 0010000000000000000000000000000000100000000000807c00244cc9cc9f16000f0000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000008000000000103f0003a48888490080007c000000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000003f800006488884901c0000f800000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000001f800002248888c992600003e00000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000000001fc000003cfddcf9ce77000007c0000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 00100000000000000000000000000000000000000000fc000000000000800000000001f0000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000000fe00000000000008000000000003e000000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 0010000000000000000000000000000000000000007e00000000000001c000000000000f800000 % 00000000000000000000000000000000000000000000000000000000000000000000001801 % 001000000000000000000000000000000000000007f00000000000000000000000000001f00000 % 00000000000000000008000002000000000000000000000000000000017c70800000001800 % 00100000000000000000000000000000000000003f0000000000000000c00000000000007c0000 % 00000000000000000010000002000000000000000000000000000000022288800000001801 % 0010000000000000000000000000000000000003f80000000000000000c00000000000000f8180 % 00000000000000000020000001000000000000000000000000000000042288400000001801 % 001000000000000000000000000000000000c01f800000000000000000e000000000000003e1c0 % 00000000000000000026e39fb9000000000000000000000000000000042288400000001801 % 001000000000000000000000000000000003c1fc000000000000000001e0000000000000007de0 % 0000000000000000002317c911000000000000000000000000000000043c18400000001801 % 001000000000000000000000000000000007cfc0000000000000000001e0000000000000001ff8 % 00000000000000000022140d91000000000000000000000000000000042010400000001801 % 00100000000000000000000000000000001ffe00000000000000000001f00000000000000003fc % 000000000000000000221406a1000000000000000000000000000000042020400000001801 % 00100000000000000000000000000000003fe000000000000000000003f00000000000000007fe % 000000000000000000221646c1000000000000000000000000000000043044400000001801 % 0010000000000000000000000000000000ffe000000000000000000003f00000000000000007ff % 000000000000000000273b82410000000000000000000000000000000470f8400000001801 % 0010000000000000000000000000000001ffe000000000000000000003f80000002000008007ff % 80000100000000000020000001000000000300000008000000000000040000400000001801 % 00100000000000000000000000000000007fe000000000000000000007f8000000400010800000 % 00002100008000000010000002000000000100000108000400000000020000800000001801 % 0010000000000000000000000000000000000000000000000000000007f8000000800010400000 % 00002000008000000000000000000000000100000100000400000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c00000008f373c400000 % 0f1e7b7779e700000000000000000000001f1c78f3dbbbcf38000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c000000099b990400000 % 10b12122848f8000000000000000000000313e85890914247c000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000909090400000 % 03a021341c88000000000000000000000021201d0109a0e440000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000909090400000 % 0ca02114648800000000000000003800002120650108a32440000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c0000000919190400000 % 11b121188c8c80000000000000003f000023328d8908c46464000000000000000000001801 % 0010000000000000000000000000000000000000000000000000000000c00000008f1f1c400000 % 0ede3b8876e700000000000000003fe0001d9c76f1dc43b738000000000000000000001801 % 0010000000000000000000020000000000000000000000000000000000c0000000801000400000 % 0000000000000003fffffffffffffff80000000000000000000ffffffffffffffffffff801 % 0010000000000000000000420001000000000000000000000000000000c0000000401000800000 % 0000000000000003fffffffffffffff80000000000000000000ffffffffffffffffffff800 % 0010000000000000000000400001000000000000000000000000000000c0000000003800000000 % 00000000000000000000000000003fc0000000000000000000000000000000000000000000 % 0010000000000000001e3cf6eef3ce0000000000000000000000000000c0000000000000000000 % 00000000000000000000000000003e00000000000000000000000000000000000000000000 % 00100000000000000021624245091f0000000000000000000000000000c0000000000000000000 % 00000000000000000000000000003000000000000000000000000000000000000000000000 % 0010000000000000000740426839100000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 00100000000000000019404228c9100000000000000000000000000000c0000000000000000000 % 00000803060000000000000000000000000000004018180000000000000000000000000001 % 0010000000000000002362423119190000000000000000000000000000c0000000000000000000 % 00000801020000000000000000000000000000004008080000000000000000000000000000 % 0010000000000000001dbc7710edce0000000000000000000000000000c0000000000000000000 % 00000001020000000000000000000000000000000008080000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000001 % dde7d9e17238340000000000000000000007779fc78b88e1a0000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 8a120a119a7c4800000000000000000000022848484cc9f240000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % d07208710a4074000000000000000000000341c841c84903a0000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 519209910a400c000000000000000000000146484648490060000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 62320a311a6444000000000000000000000188c848c8c99220000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000200c0000000000000000000 % 21df1dd9f738780000000000000000000000877ce76f9ce3c0000000000000000000000001 % 001000000000000000000010060c0000000000000000000000000003c0c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 00100000000000000000001002040000000000000000000000000003f8c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 00100000000000000000000002040000000000000000000000000003ffc0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 001000000000000003bbcfb3c2e470680000ffffffffffffffffffffffc0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000011424142334f890000000000000000000000003ffc0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 001000000000000001a0e410e21480e8000000000000000000000003f8c0000000000000000000 % 00002f87080000000000000000000000000000000000000000000000000000000000000000 % 001000000000000000a3241322148018000000000000000000000003c0c0000000000000000000 % 00004448880000000000000000000000000000000000000000000000000000000000000001 % 001000000000000000c464146234c88800000000000000000000000200c0000000000000000000 % 00008448840000000000000000000000000000000000000000000000000000000000000001 % 00100000000000000043be3bb3ee70f000000000000000000000000000c0000000000000000000 % 00008448840000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00008781840000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00008401040000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00008402040000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000020000004000000000c0000000000000000000 % 00008604440000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000040000004000000000c0000000000000000000 % 00008e0f840000000000000000000000000000000000000000000000000000000000000000 % 001000000000086000060c00000000c400010000080000002000000000c0000000000000000000 % 00008000040000000000000000000000000000000000000000000000000000000000000001 % 001000000000102000020400000000440001000009b8e3f72000000000c0000000000000000000 % 00004000080000000000000000000000000000000000000000000000000000000000000001 % 001000000000202000020400000000400006800008c5f1222000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 00100000000023e213c205c7884dc7cdb8388000088501b22000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 00100000000026263422066cd8c62c44c4448000088500d42000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 001000000000242210e204284844284484448000088590d82000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 001000000000242213220428484428448438800009cee0482000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 001000000000246234620468c8c428c484408000080000002000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 00100000000023b1dbb707c7876e776fce7c8000040000004000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000002000000000000000000000468000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000001000000000000000000000c70000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000780000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000004000 % 00008010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000008000 % 00008010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000001800000000000000000000000000000000c0000000000000010000 % 00004010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000001800000000000000000000000000000000c0000000000000016e1e % 6e384010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000013133 % 317c4010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000012121 % 21404010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000001800000000000000000000000000000000c0000000000000012121 % 21404010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000001800000000000000000000000000000000c0000000000000012123 % 21644010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c000000000000001739e % 73b84010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000040000000401800000000000000000000000000000000c0000000000000010000 % 00004010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000080000000401800000000000000000000000000000000c0000000000000008000 % 00008010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000100000000201800000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 00100000000001371e6e1c201800000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000118b3313e201800000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000110a12120201800000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000110a12120201800000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000110a32132201800000000000000000000000000000000c0000000000000000000 % 000001fe000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000139de739c201800000000000000000000000000000000c0000000000000000000 % 000001fe000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000100000000201800000000000000000000000000000000c0000000000000000000 % 000000fe000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000080000000401800000000000000000000000000000000c0000000000000000000 % 000000fe000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 000000fc000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 0000007c000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 0000007c000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 00000078000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 00000038000000000000000000000000000000000000000000000000000000000000000000 % 001000000000000000000000ff00000000000000000000000000000000c0000000000000000000 % 00000038000000000000000000000000000000000000000000000000000000000000000001 % 001000000000000000000000ff00000000000000000000000000000000c0000000000000000000 % 00000030000000000000000000000000000000000000000000000000000000000000000001 % 001000000000000000000000ff00000000000000000000000000000000c0000000000000000000 % 00000110000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000007e00000000000000000000000000000000c0000000000000000000 % 00002100008000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000007e00000000000000000000000000000000c0000000000000000000 % 00002000008000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000007e00000000000000000000000000000000c0000000000000000000 % 0f1e7b7779e700000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000003c00000000000000000000000000000000c0000000000000000000 % 10b12122848f80000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000003c00000000000000000000000000000000c0000000000000000000 % 03a021341c8800000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000003c00000000000000000000000000000000c0000000000000000000 % 0ca02114648800000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 11b121188c8c80000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 0ede3b8876e700000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000001800000000000000000000000000000000c0000000000000000000 % 00000000000000000000200000002000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000400000002000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000800000001000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 000000000000000000009b8f371c1000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 000000000000000000008c5998be1000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000885090a01000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000010000000000885090a01000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000200010010000000885190b21000000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 000002000000100000009cef39dc1000000000000000000000000000000000000000000001 % 00100005f0220000000000008000000000000000000000000000000000c0000000000000000078 % f370d7fcf3373c680000800000001000000003f03c71cfe000000000000000000000000000 % 0010000888e20000000000108000400000000000000000000000000000c00000000000000000c5 % 99892221091890900000400000002000000001184238846000000000000000000000000001 % 0010001088210000000000100000400000000000000000000000000000c0000000000000000081 % 0909d220391090e800000000000000000000010c8228841000000000000000000000000001 % 001000108821000000078f3dbbbcf38000000000000000000000000000c0000000000000000081 % 09083220c9109018000000000000000000000104812c848000000000000000000000000001 % 00100010f021000000085890914247c000000000000000000000000000c00000000000000000c5 % 19091221191090880000000000000000000001048126878000000000000000000000000001 % 00100010802100000001d0109a0e440000000000000000000000000000c0000000000000000078 % f39de3f0efb9dcf00000000000000030000001048126848000000000000000000000000001 % 0010001080210000000650108a32440000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000003e0000010c8323841000000000000000000000000001 % 00100010c06100000008d8908c46464000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000003fc00001084221842000000000000000000000000001 % 00100011c0f1000000076f1dc43b738000000000000000000000000000c0000000000000000000 % 000000000000000001fffffffffffffff80003f03c718fe000000000000000000000000001 % 0010001000010000000000000000000000000000000000000000000000c0000000000000000000 % 000000000000000001fffffffffffffffc0000000000000000000000000000000000000001 % 0010000800020000000000000000000000000000000000000000000000c0000000000000000000 % 0000000000000000000000000000003ff00000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 20100c0000019000000000000000003f800000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 4010040080009000000000000000003c000000000000000000000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 80000400800088000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000040183000000000000000000000000000000c0000000000000000000 % 9df3c479e70f88000000000000000000000040000200000c40000000000000000000000001 % 0010000000000000000000040081000000000000000000000000000000c0000000000000000000 % 889664848f9888000000000000000000000080004200000440000000000000000000000001 % 0010000000000000000000000081000000000000000000000000000000c0000000000000000000 % 8d14241c881088000000000000000000000100004000000420000000000000000000000001 % 001000000000000000eef3ecf0b91c1a00000000000000000000000000c0000000000000000000 % 8514246488108800000000000000000000011e6ef66ec3c420000000000000000000000001 % 00100000000000000045090508cd3e2400000000000000000000000000c0000000000000000000 % 8614648c8c9188000000000000000000000133734233242420000000000000000000000001 % 0010000000000000006839043885203a00000000000000000000000000c0000000000000000000 % 823bce76e70ec800000000000000000000012121422220e420000000000000000000000000 % 00100000000000000028c904c885200600000000000000000000000000c0000000000000000000 % 80000000000008000000000000000000000121214222232420000000000000000000000000 % 001000000000000000311905188d322200000000000000000000000000c0000000000000000000 % 40000000000010000000000000000000000123234222246420000000000000000000000000 % 00100000000000000010ef8eecfb9c3c00000000000000000000000000c0000000000000000000 % 0000000000000000000000000000000000011e3e777773be20000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000100200000000020000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000080200000000040000000000000000000000001 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000700000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 001000000000000000000017c088000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000222388000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000422084000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0010000000000000000000422084000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 001000000000000000000043c084000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0010000000000000000000420084000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 001fffffffffffff800000420084000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 001fffffffffffff800000430184000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000004703c4000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000400004000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000200008000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000010000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000001000 % 00020010000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000002000 % 00020010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000004000 % 00010010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000004dc7 % 1fb90010000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c000000000000000462f % 89110010000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000004428 % 0d910010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000004428 % 06a10010000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c000000000000000442c % 86c101fe000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000004e77 % 024101fe000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000004000 % 000100fe000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000002000 % 000200fe000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 000000fc000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0000007c000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0000007c000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000078000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000038000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000038000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000030000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000110000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00002100008000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00002000008000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0f1e7b7779e700000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 10b12122848f80000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 03a021341c8800000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0ca02114648800000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 11b121188c8c80000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 0ede3b8876e700000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000803060000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000801020000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000001020000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000001 % dde7d9e1723834000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 8a120a119a7c48000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % d07208710a4074000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 519209910a400c000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 62320a311a6444000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 21df1dd9f73878000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000ffffffffffffffff0000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000ffffffffffffffff0000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00005f83840000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000088c4440000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00010864420000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00010824420000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00010820c20000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00010820820000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00010861020000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00010842220000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00011f87c20000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00010000020000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00008000040000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000000000001 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 87.5 47.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 52.5 62.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -184 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 52.5 87.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -306 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (DONE) s -524 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(infeasible\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 172.5 110] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -306 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (DONE) s -622 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(unbounded\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 142.5 62.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s -524 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(bounding\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 142.5 85] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s -438 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(violated\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 142.5 110] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -160 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (full) s -396 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (system?) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 142.5 130] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -570 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate full) s -874 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraint system) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 87.5 170] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -218 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 117.5 180] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -184 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 117.5 225] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -202 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(D2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 117.5 202.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s -438 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(violated\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 157.5 180] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -492 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (deactivate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 157.5 207.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -306 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (DONE) s -428 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(optimal\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 49.482 182.484] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -774 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dual bounding\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 87.5 100] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -184 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 87.5 125] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s -438 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(violated\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 45 127.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -306 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (DONE) s -428 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(optimal\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 87.5 150] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -492 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (deactivate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 50 207.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -184 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1\)) s savemat setmatrix n 60 57.5 m 62.386 55.379 l 63.181 57.235 l cl 0 0 0 F n 77.5 50 m 62.783 56.307 l gsave 0 0 0 0.176 0 B grestore n 130 60 m 126.81 60.074 l 127.4 58.145 l cl 0 0 0 F n 97.5 50 m 127.11 59.11 l gsave 0 0 0 0.176 0 B grestore n 87.5 95 m 86.491 91.972 l 88.509 91.972 l cl 0 0 0 F n 87.5 55 m 87.5 91.972 l gsave 0 0 0 0.176 0 B grestore n 52.5 82.5 m 51.491 79.472 l 53.509 79.472 l cl 0 0 0 F n 52.5 72.5 m 52.5 79.472 l gsave 0 0 0 0.176 0 B grestore n 142.5 82.5 m 141.49 79.472 l 143.51 79.472 l cl 0 0 0 F n 142.5 72.5 m 142.5 79.472 l gsave 0 0 0 0.176 0 B grestore n 142.5 105 m 141.49 101.97 l 143.51 101.97 l cl 0 0 0 F n 142.5 95 m 142.5 101.97 l gsave 0 0 0 0.176 0 B grestore n 142.5 125 m 141.49 121.97 l 143.51 121.97 l cl 0 0 0 F n 142.5 115 m 142.5 121.97 l gsave 0 0 0 0.176 0 B grestore n 162.5 110 m 159.47 111.01 l 159.47 108.99 l cl 0 0 0 F n 152.5 110 m 159.47 110 l gsave 0 0 0 0.176 0 B grestore n 190 67.5 m 186.97 68.509 l 186.97 66.491 l cl 0 0 0 F n 155 67.5 m 186.97 67.5 l gsave 0 0 0 0.176 0 B grestore n 190 87.5 m 186.97 88.509 l 186.97 86.491 l cl 0 0 0 F n 155 87.5 m 186.97 87.5 l gsave 0 0 0 0.176 0 B grestore n 87.5 120 m 86.491 116.97 l 88.509 116.97 l cl 0 0 0 F n 87.5 110 m 87.5 116.97 l gsave 0 0 0 0.176 0 B grestore n 87.5 145 m 86.491 141.97 l 88.509 141.97 l cl 0 0 0 F n 87.5 135 m 87.5 141.97 l gsave 0 0 0 0.176 0 B grestore n 87.5 165 m 86.491 161.97 l 88.509 161.97 l cl 0 0 0 F n 87.5 155 m 87.5 161.97 l gsave 0 0 0 0.176 0 B grestore n 60 177.5 m 62.634 175.7 l 63.189 177.64 l cl 0 0 0 F n 77.5 172.5 m 62.911 176.67 l gsave 0 0 0 0.176 0 B grestore n 110 177.5 m 106.81 177.31 l 107.56 175.44 l cl 0 0 0 F n 97.5 172.5 m 107.19 176.38 l gsave 0 0 0 0.176 0 B grestore n 50 202.5 m 48.991 199.47 l 51.009 199.47 l cl 0 0 0 F n 50 192.5 m 50 199.47 l gsave 0 0 0 0.176 0 B grestore n 117.5 200 m 116.49 196.97 l 118.51 196.97 l cl 0 0 0 F n 117.5 190 m 117.5 196.97 l gsave 0 0 0 0.176 0 B grestore n 117.5 222.5 m 116.49 219.47 l 118.51 219.47 l cl 0 0 0 F n 117.5 212.5 m 117.5 219.47 l gsave 0 0 0 0.176 0 B grestore n 145 180 m 141.97 181.01 l 141.97 178.99 l cl 0 0 0 F n 127.5 180 m 141.97 180 l gsave 0 0 0 0.176 0 B grestore n 147.5 207.5 m 144.47 208.51 l 144.47 206.49 l cl 0 0 0 F n 130 207.5 m 144.47 207.5 l gsave 0 0 0 0.176 0 B grestore n 87.5 175 m 88.509 178.03 l 86.491 178.03 l cl 0 0 0 F n 105 230 m 87.5 230 l 87.5 178.03 l gsave 0 0 0 0.176 0 B grestore n 87.5 45 m 86.491 41.972 l 88.509 41.972 l cl 0 0 0 F n 40 215 m 25 215 l 25 35 l 87.5 35 l 87.5 41.972 l gsave 0 0 0 0.176 0 B grestore n 25 62.5 m 28.028 61.491 l 28.028 63.509 l cl 0 0 0 F n 40 62.5 m 28.028 62.5 l gsave 0 0 0 0.176 0 B grestore n 87.5 185 m 84.472 186.01 l 84.472 183.99 l cl 0 0 0 F n 62.5 185 m 84.472 185 l gsave 0 0 0 0.176 0 B grestore n 167.5 180 m 190 180 l 190 35 l 87.5 35 l gsave 0 0 0 0.176 0 B grestore n 190 145 m 186.97 146.01 l 186.97 143.99 l cl 0 0 0 F n 142.5 137.5 m 142.5 145 l 186.97 145 l gsave 0 0 0 0.176 0 B grestore n 55 127.5 m 58.028 126.49 l 58.028 128.51 l cl 0 0 0 F n 75 127.5 m 58.028 127.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 160 85] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -184 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 160 65] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -184 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 162.5 142.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -368 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1/P2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 137.5 155] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -202 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(D2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 35 60] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -184 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1\)) s savemat setmatrix n 25 102.5 m 28.028 101.49 l 28.028 103.51 l cl 0 0 0 F n 75 102.5 m 28.028 102.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 70 100] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -184 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 32.5 207.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -184 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 177.5 177.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -184 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 120 85] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -202 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(D2\)) s savemat setmatrix n 95 167.5 m 98.028 166.49 l 98.028 168.51 l cl 0 0 0 F n 142.5 145 m 142.5 167.5 l 98.028 167.5 l gsave 0 0 0 0.176 0 B grestore n 112.5 167.5 m 111.49 164.47 l 113.51 164.47 l cl 0 0 0 F n 127.5 87.5 m 112.5 87.5 l 112.5 164.47 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 100 180] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -216 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(opt\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 67.5 172.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -384 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(unbnd\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 92.5 60] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -216 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(opt\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 67.5 52.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -700 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(infeas\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 122.5 52.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -384 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(unbnd\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 42.5 197.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 72.5 190] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 160 72.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 135 77.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 135 100] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 160 92.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 135 177.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 110 195] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 137.5 205] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 110 220] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 35 67.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 60 77.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 70 107.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 95 115] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 67.5 132.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -300 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(none\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 95 140] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(new\)) s savemat setmatrix grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore %%EndDocument @endspecial 2154 10338 a FP(Fig)n(ur)q(e)53 b(3:)65 b(Dy)7 b(nam)s(ic)52 b(Si)s(mpl)n(e)-5 b(x)52 b(Algo)-7 b(r)s(ithm)52 b(Fl)n(ow)3771 11400 y(37)p eop end %%Page: 38 41 TeXDict begin 38 40 bop 249 466 a FP(If)43 b(pr)s(i)s(mal)f(s)n(i)s (mpl)n(e)-5 b(x)43 b(\002)s(nds)f(tha)-8 b(t)41 b(th)l(e)h(a)n(c)-5 b(tive)42 b(sys)-5 b(te)n(m)42 b(is)g(i)s(nfeas)n(ib)l(l)n(e,)j(th)l(e) d(algo)-7 b(r)s(ithm)41 b(will)g(a)-8 b(tte)n(mpt)42 b(to)g(a)n(c)-5 b(tiv)r(a)d(te)0 665 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s) 55 b(with)e(fa)-7 b(vo)i(ura)l(b)l(l)n(e)53 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)53 b(c)l(os)-5 b(t)55 b(und)-5 b(e)l(r)53 b(th)l(e)g(p)-6 b(has)m(e)54 b(I)h(o)-8 b(bj)l(ec)j(tive)53 b(func)-5 b(tio)l(n)53 b(\()p FG(vid)p FP(.)h(\24714\))f(and)h(r)q(e)o (s)-8 b(ume)0 865 y(pr)s(i)s(mal)53 b(p)-6 b(has)m(e)52 b(I.)66 b(If)54 b(n)m(o)d(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)j(can)f(be)g (fo)-5 b(und,)51 b(th)l(e)i(o)-7 b(r)s(ig)t(i)s(nal)52 b(pr)q(o)-8 b(b)l(l)n(e)n(m)52 b(is)h(i)s(nfeas)n(ib)l(l)n(e.)249 1163 y(If)70 b(pr)s(i)s(mal)f(s)n(i)s(mpl)n(e)-5 b(x)70 b(\002)s(nds)e(tha)-8 b(t)69 b(th)l(e)f(a)n(c)-5 b(tive)70 b(sys)-5 b(te)n(m)68 b(is)h(un)m(bo)-5 b(und)g(e)l(d,)71 b(th)l(e)e(algo)-7 b(r)s(ithm)68 b(\002rs)-5 b(t)69 b(a)-8 b(tte)n(mpts)68 b(to)0 1363 y(a)n(c)-5 b(tiv)r(a)d(te)41 b(bo)-5 b(undi)s(n)n(g)40 b(c)l(o)l(ns)-5 b(trai)s(nts)41 b(whic)-7 b(h)40 b(will)h(n)m(ot)g(ca)-8 b(u)h(s)m(e)42 b(th)l(e)f(l)n(os)-5 b(s)43 b(of)f(pr)s(i)s(mal)g(feas)n(ibility)-17 b(.)61 b(If)42 b(s)-8 b(u)j(c)e(h)42 b(c)l(o)l(ns)-5 b(trai)s(nts)0 1562 y(can)47 b(be)h(fo)-5 b(und,)48 b(e)-5 b(xecu)l(tio)l(n)46 b(r)q(e)-7 b(t)l(ur)5 b(ns)47 b(to)h(pr)s(i)s(mal)f (p)-6 b(has)m(e)48 b(II.)64 b(If)48 b(n)m(o)f(s)-8 b(u)j(c)e(h)47 b(c)l(o)l(ns)-5 b(trai)s(nts)47 b(can)g(be)h(fo)-5 b(und,)47 b(o)-7 b(r)48 b(pr)s(i)s(mal)0 1761 y(feas)n(ibility)i(is)h(n)m(ot)e (an)i(is)-5 b(s)d(u)l(e,)51 b(all)f(vio)-5 b(la)d(te)l(d)50 b(c)l(o)l(ns)-5 b(trai)s(nts)50 b(ar)q(e)h(a)-6 b(dd)h(e)l(d)50 b(and)g(e)-5 b(xecu)l(tio)l(n)50 b(move)o(s)h(to)g(d)-7 b(ual)50 b(s)n(i)s(mpl)n(e)-5 b(x.)0 1960 y(If)60 b(n)m(o)f(vio)-5 b(la)d(te)l(d)58 b(c)l(o)l(ns)-5 b(trai)s(nts)59 b(can)g(be)h(fo)-5 b(und,)60 b(th)l(e)f(fu)l(ll)g(c)l(o)l(ns)-5 b(trai)s(nt)58 b(sys)-5 b(te)n(m)60 b(is)f(a)n(c)-5 b(tiv)r(a)d(te)l(d.)85 b(If)60 b(pr)s(i)s(mal)f(s)n(i)s(mpl)n(e)-5 b(x)0 2160 y(agai)s(n)48 b(r)q(e)-7 b(t)l(ur)5 b(ns)49 b(an)g(i)s(ndica)-8 b(tio)l(n)47 b(of)i(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s,)47 b(th)l(e)i(o)-7 b(r)s(ig)t(i)s(nal)48 b(pr)q(o)-8 b(b)l(l)n(e)n(m)48 b(is)h(d)-5 b(eclar)q(e)l(d)49 b(to)g(be)g(un)m(bo)-5 b(und)g(e)l(d.)0 2359 y(T)8 b(h)l(e)51 b(e)l(f)n(fo)-7 b(rt)51 b(e)-5 b(xpend)g(e)l(d)50 b(be)l(fo)-7 b(r)q(e)51 b(i)s(ndica)-8 b(ti)s(n)n(g)49 b(a)i(pr)q(o)-8 b(b)l(l)n(e)n(m)50 b(is)h(un)m(bo)-5 b(und)g(e)l(d)49 b(a)n(c)-8 b(kn)m(owl)n(e)l(dg)n(e)o (s)48 b(tha)-8 b(t)50 b(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s)0 2558 y(is)53 b(e)-5 b(xpec)g(te)l(d)53 b(to)g(be)f(e)-5 b(xtr)q(e)n(me)l(ly)52 b(rar)q(e)h(i)s(n)k FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)54 b(i)s(ntend)-5 b(e)l(d)51 b(a)-6 b(p)e(plica)g(tio)l(n.) 249 2857 y(If)42 b(d)-7 b(ual)40 b(s)n(i)s(mpl)n(e)-5 b(x)42 b(\002)s(nds)f(tha)-8 b(t)40 b(th)l(e)h(a)n(c)-5 b(tive)41 b(sys)-5 b(te)n(m)41 b(is)h(d)-7 b(ual)40 b(un)m(bo)-5 b(und)g(e)l(d)39 b(\(pr)s(i)s(mal)i(i)s(nfeas)n(ib)l(l)n(e\),)i(th)l(e) e(algo)-7 b(r)s(ithm)0 3056 y(\002rs)i(t)69 b(a)-8 b(tte)n(mpts)69 b(to)g(a)n(c)-5 b(tiv)r(a)d(te)69 b(d)-7 b(ual)69 b(bo)-5 b(undi)s(n)n(g)66 b(c)l(o)l(ns)-5 b(trai)s(nts)69 b(\(pr)s(i)s(mal)g(v) r(ar)s(i)s(a)l(b)l(l)n(e)o(s\))h(whic)-7 b(h)68 b(will)h(n)m(ot)f(ca)-8 b(u)h(s)m(e)70 b(th)l(e)0 3256 y(l)n(os)-5 b(s)58 b(of)g(d)-7 b(ual)57 b(feas)n(ibility)-17 b(.)80 b(If)59 b(s)-8 b(u)j(c)e(h)57 b(d)-7 b(ual)57 b(c)l(o)l(ns)-5 b(trai)s(nts)57 b(can)h(be)g(fo)-5 b(und,)58 b(e)-5 b(xecu)l(tio)l(n)56 b(r)q(e)-7 b(t)l(ur)5 b(ns)58 b(to)g(d)-7 b(ual)57 b(s)n(i)s(mpl)n(e)-5 b(x.)0 3455 y(If)72 b(n)m(o)g(s)-8 b(u)j(c)e(h)71 b(d)-7 b(ual)72 b(c)l(o)l(ns)-5 b(trai)s(nts)71 b(can)h(be)g(fo)-5 b(und,)75 b(th)l(e)d(algo)-7 b(r)s(ithm)71 b(will)g(a)-8 b(tte)n(mpt)71 b(to)h(a)n(c)-5 b(tiv)r(a)d(te)72 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g (with)0 3654 y(fa)-7 b(vo)i(ura)l(b)l(l)n(e)76 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)75 b(c)l(os)-5 b(t)77 b(und)-5 b(e)l(r)75 b(th)l(e)h(pr)s(i)s(mal)h(p)-6 b(has)m(e)76 b(I)g(o)-8 b(bj)l(ec)j(tive)76 b(func)-5 b(tio)l(n)75 b(and)h(c)l(o)l(nti)s(n)n(u) l(e)f(with)g(pr)s(i)s(mal)0 3853 y(p)-6 b(has)m(e)53 b(I.)0 4446 y Fu(12.2)197 b(Err)n(o)-8 b(r)66 b(Rec)-5 b(ove)g(ry)0 4865 y FP(A)44 b(s)-8 b(u)h(bs)i(t)s(anti)s(al)43 b(amo)-5 b(unt)44 b(of)k FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)45 b(e)l(rr)q(o)-7 b(r)45 b(r)q(ec)l(ove)l(ry)f(ca)-6 b(pa)l(bility)43 b(is)h(hidd)-5 b(en)43 b(withi)s(n)g(th)l(e)h(pr)s(i)s (mal)g(and)g(d)-7 b(ual)43 b(s)n(i)s(m-)0 5065 y(pl)n(e)-5 b(x)52 b(algo)-7 b(r)s(ithms.)64 b(It)52 b(is)f(als)n(o)h(pos)-5 b(s)n(ib)l(l)n(e)51 b(to)h(u)-7 b(s)m(e)52 b(th)l(e)f(ca)-6 b(pa)l(bilitie)o(s)51 b(pr)q(e)o(s)m(ent)g(i)s(n)h(a)f(dy)7 b(nam)s(ic)51 b(s)n(i)s(mpl)n(e)-5 b(x)52 b(algo)-7 b(r)s(ithm)0 5264 y(to)70 b(a)-8 b(tte)n(mpt)69 b(e)l(rr)q(o)-7 b(r)71 b(r)q(ec)l(ove)l(ry)f(a)-8 b(t)70 b(this)f(l)n(eve)l(l.)119 b(T)8 b(h)l(e)69 b(dy)7 b(nam)s(ic)69 b(s)n(i)s(mpl)n(e)-5 b(x)71 b(algo)-7 b(r)s(ithm)70 b(modi\002e)o(s)g(th)l(e)f(c)l(o)l(ns)-5 b(trai)s(nt)0 5463 y(sys)g(te)n(m)62 b(as)h(part)g(of)f(its)h(n)m(o)-7 b(r)5 b(mal)62 b(e)-5 b(xecu)l(tio)l(n.)94 b(T)8 b(his)62 b(a)l(bility)f(can)i(be)g(har)5 b(n)n(e)o(s)-5 b(s)m(e)l(d)62 b(to)g(fo)-7 b(r)q(c)h(e)64 b(a)f(trans)n(itio)l(n)e(fr)q(o)n(m)0 5662 y(o)l(n)n(e)53 b(s)n(i)s(mpl)n(e)-5 b(x)53 b(to)g(an)m(oth)l(e)l (r)f(wh)l(en)f(o)l(n)n(e)i(s)n(i)s(mpl)n(e)-5 b(x)54 b(runs)e(i)s(nto)h(tr)q(o)-5 b(u)e(b)l(l)n(e.)65 b(T)8 b(h)l(e)53 b(a)n(c)-5 b(tio)l(ns)52 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)53 b(i)s(n)f(this)h(s)m(ec)-5 b(tio)l(n)0 5862 y(ar)q(e)68 b(fu)l(lly)f(i)s(nte)-5 b(gra)d(te)l(d)67 b(with)f(th)l(e)i(a)n(c)-5 b(tio)l(ns)67 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)67 b(i)s(n)h(\24712.1.)110 b(T)8 b(h)l(ey)67 b(ar)q(e)i(d)-5 b(e)o(sc)d(r)s(ibe)l(d)68 b(s)m(e)-7 b(para)f(te)l(ly)67 b(to)h(a)-7 b(void)0 6061 y(r)q(e)l(d)g(u)i(c)m(i)s(n)n(g)50 b(Fig)n(ur)q(e)j(3)g(to)f(an)h(i)s (nc)l(o)n(mpr)q(eh)l(ens)n(ib)l(l)n(e)e(snarl)i(of)g(s)-5 b(t)s(a)d(te)53 b(trans)n(itio)l(ns.)0 6360 y FN(Pr)r(im)n(al)j(Sim)-5 b(ple)e(x)249 6659 y FP(T)8 b(h)l(e)46 b(e)l(rr)q(o)-7 b(r)47 b(r)q(ec)l(ove)l(ry)f(a)n(c)-5 b(tio)l(ns)46 b(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)46 b(with)g(th)l(e)g(pr)s(i)s(mal)h(s)n(i)s (mpl)n(e)-5 b(x)47 b(algo)-7 b(r)s(ithm)46 b(ar)q(e)h(s)-8 b(h)n(own)45 b(i)s(n)h(Fig)n(ur)q(e)g(4.)0 6858 y(T)8 b(h)l(e)l(r)q(e)60 b(ar)q(e)h(\002ve)g(c)l(o)l(nditio)l(ns)e(of)h(i)s (nte)l(r)q(e)o(s)-5 b(t,)63 b(e)-5 b(xc)f(e)o(s)h(s)n(ive)62 b(c)-7 b(han)n(g)n(e)59 b(i)s(n)i(th)l(e)f(v)r(al)n(u)l(e)h(of)f(pr)s (i)s(mal)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(\(e)-5 b(xc)f(e)o(s)h(s)n (ive)0 7057 y(swi)s(n)n(g)12 b(\),)58 b(s)-5 b(t)s(alli)s(n)n(g)57 b(\(s)-5 b(t)s(all\),)60 b(i)s(na)l(bility)d(to)h(pe)l(r)5 b(fo)-7 b(r)5 b(m)58 b(a)h(pivot)f(\(p)-5 b(unt\),)58 b(n)n(ume)l(r)s(ical)g(i)s(ns)-5 b(t)s(a)l(bility)57 b(\(a)n(ccura)n(cy)h(c)-7 b(h)l(ec)f(k\),)0 7256 y(and)52 b(oth)l(e)l(r)g(e)l(rr)q(o)-7 b(rs)53 b(\(oth)l(e)l(r)f(e)l(rr)q(o)-7 b(r\).)249 7555 y(Exc)h(e)o(s)h(s)n(ive)75 b(c)-7 b(han)n(g)n(e)72 b(\(`swi)s(n)n(g)8 b('\))70 b(i)s(n)k(th)l(e)f(v)r(al)n(u)l(e)g(of)h(a) g(pr)s(i)s(mal)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(d)-7 b(ur)s(i)s(n)n(g)71 b(pr)s(i)s(mal)j(s)n(i)s(mpl)n(e)-5 b(x)74 b(is)g(t)s(aken)0 7754 y(as)83 b(an)e(i)s(ndica)-8 b(tio)l(n)81 b(tha)-8 b(t)81 b(th)l(e)g(pr)s(i)s(mal)i(pr)q(o)-8 b(b)l(l)n(e)n(m)81 b(is)h(ve)l(rg)t(i)s(n)n(g)e(o)l(n)h(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s) g(s.)151 b(Swi)s(n)n(g)80 b(is)i(d)-5 b(e)l(\002)s(n)n(e)l(d)82 b(as)0 7954 y(\(n)n(ew)52 b(v)r(al)n(u)l(e\))r(/)r(\(o)-5 b(ld)51 b(v)r(al)n(u)l(e\).)133 b FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)76 b(d)-5 b(e)l(fa)d(u)l(lt)73 b(to)-5 b(l)n(e)l(ranc)f(e) 74 b(fo)-7 b(r)75 b(this)e(ra)-8 b(tio)74 b(is)g(10)5529 7893 y FA(15)5681 7954 y FP(.)129 b(T)8 b(h)l(e)74 b(a)n(c)-5 b(tio)l(n)73 b(t)s(aken)h(is)h(th)l(e)0 8153 y(same)58 b(as)h(tha)-8 b(t)57 b(u)-7 b(s)m(e)l(d)58 b(fo)-7 b(r)58 b(n)m(o)-7 b(r)5 b(mal)57 b(d)-5 b(e)e(tec)i(tio)l(n)57 b(of)h(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s,)57 b(with)g(th)l(e)g(e)-5 b(xc)f(e)f(ptio)l(n)58 b(tha)-8 b(t)57 b(th)l(e)g(algo)-7 b(r)s(ithm)0 8352 y(will)52 b(always)g(r)q(e)-7 b(t)l(ur)5 b(n)52 b(to)h(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x.)249 8651 y(Wh)l(en)60 b(pr)s(i)s(mal)i(s)n(i)s(mpl)n(e)-5 b(x)61 b(s)-5 b(t)s(alls)62 b(o)-7 b(r)61 b(is)g(fo)-7 b(r)q(c)h(e)l(d)62 b(to)f(p)-5 b(unt,)62 b(th)l(e)e(s)-5 b(tra)d(te)j(g)8 b(y)61 b(is)g(to)g(a)-8 b(tte)n(mpt)60 b(to)h(modify)f(th)l(e)g(c)l(o)l(n-)0 8850 y(s)-5 b(trai)s(nt)62 b(sys)-5 b(te)n(m)61 b(s)n(o)h(tha)-8 b(t)61 b(th)l(e)g(s)n(i)s(mpl)n (e)-5 b(x)63 b(algo)-7 b(r)s(ithm)61 b(will)g(be)h(a)l(b)l(l)n(e)g(to)g (c)-7 b(h)n(oos)m(e)62 b(a)g(n)n(ew)g(pivot)f(and)h(agai)s(n)f(make)0 9050 y(pr)q(ogr)q(e)o(s)-5 b(s)51 b(towar)q(d)f(o)l(n)n(e)h(of)g(th)l (e)g(s)-5 b(t)s(andar)q(d)51 b(o)-5 b(u)l(tc)l(o)n(me)o(s)51 b(of)g(o)-5 b(pti)s(mality)-17 b(,)51 b(i)s(nfeas)n(ibility)-17 b(,)50 b(o)-7 b(r)52 b(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s.)62 b(T)8 b(h)l(e)0 9249 y(s)-8 b(pec)m(i\002c)52 b(a)n(c)-5 b(tio)l(ns)52 b(v)r(ary)h(slightly)d(d)-5 b(e)e(pendi)s(n)n(g)52 b(o)l(n)g(wh)l(e)-7 b(th)l(e)l(r)51 b(pr)s(i)s(mal)i(feas)n(ibility)f (has)h(been)f(a)n(c)-7 b(hieve)l(d.)249 9548 y(If)58 b(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x)59 b(is)f(s)-5 b(till)58 b(i)s(n)f(p)-6 b(has)m(e)58 b(I,)g(th)l(e)g(\002rs)-5 b(t)58 b(a)n(c)-5 b(tio)l(n)56 b(is)j(to)e(try)h(to)g(a)n(c)-5 b(tiv)r(a)d(te)57 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(whic)-7 b(h)56 b(ha)-7 b(ve)58 b(a)0 9747 y(fa)-7 b(vo)i(ura)l(b)l(l)n(e)55 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)55 b(c)l(os)-5 b(t)56 b(und)-5 b(e)l(r)55 b(th)l(e)g(p)-6 b(has)m(e)55 b(I)i(o)-8 b(bj)l(ec)j(tive.)73 b(If)56 b(this)g(s)-8 b(u)j(cc)f(ee)l(ds,)56 b(e)-5 b(xecu)l(tio)l(n)55 b(r)q(e)-7 b(t)l(ur)5 b(ns)55 b(to)h(pr)s(i)s(mal)0 9946 y(s)n(i)s(mpl)n(e)-5 b(x.)64 b(If)48 b(n)m(o)e(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(can)g(be)f(fo)-5 b(und,)47 b(th)l(e)g(algo)-7 b(r)s(ithm)47 b(will)f(a)-8 b(tte)n(mpt)46 b(to)i(a)n(c)-5 b(tiv)r(a)d(te)46 b(vio)-5 b(la)d(te)l(d)47 b(c)l(o)l(ns)-5 b(trai)s(nts;)48 b(if)0 10145 y(s)-8 b(u)j(cc)f(e)o(s)h(sfu)l(l,)46 b(e)-5 b(xecu)l(tio)l(n)43 b(r)q(e)-7 b(t)l(ur)5 b(ns)43 b(to)g(pr)s(i)s(mal)h(s)n(i)s(mpl)n(e)-5 b(x.)63 b(If)44 b(n)m(o)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(o)-7 b(r)44 b(c)l(o)l(ns)-5 b(trai)s(nts)42 b(ha)-7 b(ve)44 b(been)f(a)n(c)-5 b(tiv)r(a)d(te)l(d,)0 10345 y(th)l(e)l(r)q(e)57 b(is)h(n)m(o)f(poi)s(nt)f(i)s(n)i(r)q(e)-7 b(t)l(ur)5 b(ni)s(n)n(g)55 b(to)j(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x)58 b(as)g(th)l(e)f(o)-5 b(u)l(tc)l(o)n(me)58 b(will)e(be)i(unc)-7 b(han)n(g)n(e)l(d.)77 b(In)58 b(this)f(cas)m(e,)3771 11400 y(38)p eop end %%Page: 39 42 TeXDict begin 39 41 bop 0 9881 a @beginspecial 71 @llx 90 @lly 577 @urx 652 @ury 5060 @rwi @setspecial %%BeginDocument: /devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/primalerrorflow.eps %!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/primalerrorflow.epsu %%Creator: IslandDraw for lou %%CreationDate: Fri Aug 19 17:19:40 2005 %%Pages: 1 %%BoundingBox: 71 90 577 652 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 633 703 1 2109 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0014 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000040000000000000000000400001800 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0035 % 000000000000000000000000000000000000000000000000040000000000000000000400000800 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 003f % 000000000000000000000000000000000000000000000000000000000000000000000000000800 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0052 % 00000000000000000000000000000000000000039dde3868dceee0000000000001bbecdd8f0800 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 005c % 0000000000000000000000000000000000000007c5b17c912445f0000000000001cd0466508800 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0066 % 0000000000000000000000000000000000000004022040e9d46900000000000000850444438800 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0070 % 0000000000000000000000000000000000000004072040183429000000000000008504444c8800 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 007a % 000000000000000000000000000000000000000649b164891431900000000000008d0444518800 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0004 % 00000000000000000000000000000000000000039dde38f1ee10e0000000000000fb8eeeeedc00 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000e % 000000000000000000000000000000000000000000000000000000000000000000800000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0018 % 000000000000000000000000000000000000000000000000000000000000000000800000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0022 % 000000000000000000000000000000000000000000000000000000000000000001c00000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000040000000000000000000100000600000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000040000000000000000000100000200000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000006000000000000000000000200000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000000000000037f7cdc38000000000000006b6ec6e239dc0 % 038000000000000000000000000000000080000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000000000000049224624400000000000000913327327c580 % 03f800000000000000000000000000001180000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000000000000075b24424400000000000000e922221240200 % 007f00000000000000000000000000001080000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000000cd444238000000000000001922221240700 % 0007f00000000000000000000000000f3cb8e7c000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000000000000044d844240000000000000008922223264980 % 00007f0000000000000000000000001990c5f20000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000007848ee77c00000000000000f3f773e739dc0 % 000007f00000000000000000000000109085020000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000046000000000000000000020000000 % 000000ff0000000000000000000000109085020000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000000000000c6000000000000000000020000000 % 0000000ff000000000000000000000119085920000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000078000000000000000000070000000 % 00000000fe000000000000000000000f1dcee70000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000002000000000000000000000000000000000f0000c00000000c06 % 000000000fe0000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000004200008000000000000000000000000001ff0000c00000000c07 % c000000000fe000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000400000800000000000000000000000003fe00001c00000000e01 % f0000000000fe00000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000f1ef677f1ee000000000000000000000007fc000001800000000600 % 7c0000000001fe0000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000010b14223089f0000000000000000000000ff80000003800000000600 % 1f00000000001fe000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000003a042343890000000000000000000001ff000000003000000000300 % 07c00000000001fc00000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000ca04214c89000000000000000000003fe0000000007000000000300 % 01f000000000001fc0000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000011b1421918990000000000000000007fc00000000006000000000180 % 003c000000000001fc000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000ede7708ecee00000000000000000ff800000000000e000000000180 % 000f0000000000001fc00000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000000000000000000001ff0000000000000c0000000000c0 % 0003c0000000000003fc0000000000073efbcf8000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000000000003fe00000000000001c0000000000c0 % 0000f00000000000003fc0000000000f9046640000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000007fc00000000000000180000000000e0 % 00003c00000000000003f800000000081044240000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000008000ff800000000000000038000000000060 % 00000f800000000000003f80000000081044240000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000003c01ff0000000000000000030000000000060 % 000003e000000000000003f80000000c9044640000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000007c3fe00000000000000000070000000000030 % 000000f8000000000000003f8000000738e3ce0000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000002000000001fffc000000000000000000060000000000030 % 0000003e0000000000000007f80000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000040002002000007ff800000000000000000000e0000000000018 % 0000000f80000000000000007f8000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000004000000200001ffc000000000000000000000c0000000000018 % 00000003e00000000000000007f000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000079e6e1af7de66e78d001ffe000000000000000000001c000000000001c % 000000007800000000000000007f00000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000c73312442212312120001fe0000000000000000000018000000000000c % 000000001e000000000000000007f0000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000821213a420722121d0000000000000000000000000038000000000000c % 00000000078000000000000000007f000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000008212106421922120300000000000000000000000000300000000000006 % 0000000001e000000000000000000ff00000000000000000000000000000000000000000000000 % 0011 % 00000000000000000000c632122422322121100000000000000000000000000700000000000006 % 000000000078000000000000000000ff0000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000079e73bc771df73b9e00000000000000000000000000600000000000003 % 00000000001f0000000000000000000fe000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000e00000000000003 % 000000000007c0000000000000000000fe00000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000c00000000000001 % 800000000001f00000000000000000000fe0000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000001c00000000000001 % 8000000000007c00000000000000000000fe000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000001800000000000001 % c000000000001f000000000000000000001fe00000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000003800000000203000 % c0000000000007c000000000000000000001fe0000000000000000000000000000000000000000 % 002c % 000000000000000000000e00000000640000800000000000000000000000003000000000202000 % c0000000000000f0000000000000000000001fc000000000000000000000000000000000000000 % 002b % 000000000000000000001200000000240000800000000000000000000000007000dc42dc782000 % 600000000000003c0000000000000000000001fc00000000000000000000000000000000000000 % 002b % 000000000000000000002200000000200006400000000000000000000000006000e6c662204000 % 600000000000000f00000000000000000000001fc0000000000000000000000000000000000000 % 002c % 0000000000000000000022e3c42dc3ecdc3840000000000000000000000000e000424242204000 % 3000000000000003c00000000000000000000001fc000000000000000000000000000000000000 % 002b % 0000000000000000000023366c662624624440000000000000000000000000c000424242208000 % 3000000000000000f000000000000000000000003fc00000000000000000000000000000000000 % 002b % 00000000000000000000221424242424424440000000000000000000000001c000464642208000 % 38000000000000003e000000000000000000000003fc0000000000000000000000000000000000 % 002c % 0000000000000000000022142424242442384000000000000000000000000180007c3be7390000 % 18000000000000000f8000000000000000000000003f8000000000000000000000000000000000 % 002b % 000000000000000000002234646424644240400000000000000000000000038000400000010000 % 180000000000000003e0000000000000000000000003f800000000000000000000000000000000 % 002b % 0000000000000000000023e3c3be73bee77c400000000000000000000000030000400000030000 % 0c0000000000000000f80000000000000000000000003f80000000000000000000000000000000 % 002c % 000000000000000000002000000000000046400000000000000000000000070000e00000000000 % 0c00000000000000003e00000000000000000000000003f8008000000000000000000000000000 % 002b % 00000001b8e3f700000010000000000000c6800000000000000000000000060000000000000000 % 0600000000000000000f800000000000000000000000007f80e000000000000000000000000000 % 002b % 00000000c5f12200000000000000000000780000000000000000000000000e0000000000000000 % 06000000000000000001e000000000000000000000000007f8f800000000000000000000000000 % 002c % 000000008501b200000000000000000000000000000000000000000000000c0000000000cc0000 % 0300000000000000000078000000000000000000000000007ffc00000000000000000000000000 % 002b % 000000008500d400000000000000000000000000000000000000000000001c0000000400440000 % 030000000000000000001e0000000000000000000000000007ff00000000000000000000000000 % 002b % 000000008590d80000000000000000000000000000000000000000000000180000000400440000 % 03800000000000000000078000000000000000000000000001ff80000000000000000000000000 % 002c % 00000001cee048000600000000000000000000000000000000000000000038000000df3c440000 % 0180000000000000000001e000000000000000000000000001ffe03f03c71dfc00000000000000 % 002b % 00000000000000000e000000000030000000000000000000000000000000300000012442440000 % 01800000000000000000007c00000000000000000000000003ffe0118423888c00000000000000 % 002b % 00000000000000003c00000000003000000000000000000000000000000070000001d40e440000 % 00c00000000000000000001f00000000000000000000000000000010c822888200000000000000 % 0000 % 000000000000000078000000000030000000000000000000000000000000600000003432440000 % 00c000000000000000000007c00000000000000000000000000000104812c89000000000000000 % 002b % 0000000000000001e0000000000030000000000000000000000000000000e00000011446440000 % 006000000000000000000001f0000000000000000000000000000010481268f000000000000000 % 002b % 0000000000000003c0000000000030000000000000000000000000000000c0000001e73bee0000 % 0060000000000000000000007c0000000000000000000000000000104812689000000000000000 % 002c % 000000000000000f00000000000030000000000000000000000000000001c00000000000000000 % 0070000000000000000000001f000000000000000000000000000010c832388200000000000000 % 002b % 000000000000001e00000000000030000000000000000000000000000001800000000000000000 % 00300000000000000000000003c000000000000000000000000000108422188400000000000000 % 002b % 000000000000007800000000000030000000000000000000000000000003800000000000000000 % 00300000000000000000000000f0000000000000000000000000003f03c719fc00000000000000 % 002c % 00000000000020f000000000000030000000000000000000000000000003000000000000000000 % 001800000000000000000000003c00000000000000000000000000000000000000000000000000 % 002b % 00000000000073c000000000000030000000000000000000000000000007000000000000000000 % 001800000000000000000000000f00000000000000000000000000000000000000000000000000 % 002b % 0000000000007f8000000000000030000000000000000000000000000006000000000000000000 % 000c000000000000000000000003c0000000000000000000000000000000000000000000000000 % 002b % 000000000000fe00000000000000300371e6e3800000000000000000000e000000000000000000 % 000c000000000000000000000000f8000000000000000000000000000000000000000000000000 % 0008 % 000000000001fc0000000000000030018b3317c00000000000000000000c000000000000000000 % 00060000000000000000000000003e000000000000000000000000000000000000000000000000 % 0038 % 000000000003fe0000000000000030010a1214000000000000000000001c000000000000000000 % 00060000000000000000000000000f800000000000000000000000000000000000000000000000 % 0058 % 000000000007fe0000000000000030010a12140000000000000000000018000000000000000000 % 000700000000000000000000000003e00000000000000000001000800000000000020000000000 % 0058 % 000000000007fc0000000000000030010a32164000000000000000000038000000000000000000 % 000300000000000000000000000000f80000000000000000002011800000000000020000000000 % 002b % 00000000000fe00000000000000030039de73b8000000000000000000030000000000000000000 % 0003000000000000000000000000003e0000000000000000004010800000000000010000000000 % 0001 % 00000000001e000000000000000030000000000000000000000000000070000000000000000000 % 000180000000000000000000000000078000000000000000004f3cb8e3e0e3ff3cf90000000000 % 0000 % 000000000000000000000000000030000000000000000000000000000060000000000000000000 % 00018000000000000000000000000001e000000000000000005990c5f101f10866410000000000 % 0044 % 0000000000000000000000000000300000000000000000000000000000e0000000000000000000 % 0000c0000000000000000000000000007800000000000000005090850101010842410000000000 % 0000 % 0000000000000000000000000000300000000000000000000000000000c0000000000000000000 % 0000c0000000000000000000000000001e00000000000000005090850101010842410000000000 % 0028 % 0000000000000000000000000000300000000000000000000000000001c0000000000000000000 % 0000e0000000000000000000000000000780000000000000005190859101910846410000000000 % 0070 % 000000000000000000000000000030000000000000000000000000000180000000000000000000 % 0000600000000000000000000000000001f0000000000000004f1dcee380e39c3ce10000000000 % 0000 % 000000000000000000000000000030000000000000000000000000000380000000000000000000 % 00006000000000000000000000000000007c000000000000004000000000000000010000000000 % 0000 % 0000000000000000000000000001fe000000000000000000000000000300000000000000000000 % 00003000000000000000000000000000001f000000000000002000000000000000020000000000 % 0027 % 0000000000000000000000000001fe000000000000000000000000000700000000000000000000 % 000030000000000000000000000000000007c00000000000000000000000000000000000000000 % 0002 % 0000080000300000000000000001fc000000000000000000000000000600000000000000000000 % 000018000000000000000000000000000001f00000000000000000000000000000000000000000 % 0064 % 0000080000100000000000000001fc000000000000000000000000000e00000000000000000000 % 0000180000000000000000000000000000007c0000000000000000000000000000000000000000 % 0038 % 0000000000100000000000000000fc000000000000000000000000000c00000000000000000000 % 00000c0000000000000000000000000000000f0000000000000000000000000000000000000000 % 000a % 0373f9bb0f100000000000000000f8000000000000000000000000001c00000000000000000000 % 00000c00000000000f1e3c84fbc3ddc0000003c000000000000000000000000000000000000000 % 0014 % 039908cc90900000000000000000f8000000000000000000000000001800000000000000000000 % 00000e000000000010b1638c44262880000000f000000000000000000000000000000000000000 % 002b % 010908888390000000000000000078000000000000000000000000003800000000000000000000 % 000006000000000003a0408440e40c800000003c00000000000000000000000000000000000000 % 0035 % 010908888c90000000000000000070000000000000000000000000003000000000000000000000 % 00000600000000000ca04084432405000000000f00000000000000000000000000000000000000 % 003f % 011908889190000000000000000070000000000000000000000000007000000000000000000000 % 000003000000000011b1628c4466250000000003e0000000000000000000000000000000000000 % 0052 % 01f39dddcef8000000000000000030000000000000000000000000006000000000000000000000 % 00000300000000000ede3c76e3b3c20000000000f8000000000000000000000000000000000000 % 005c % 01000000000000000000000000002000000000000000000000000000e000000000000000000000 % 00000180000000000000000000000200000000003e000000000000000000000000000000000000 % 0066 % 01000000000000000000000000000000000000000000000000000000c000000000000000000000 % 00000180000000000000000000000e00000000000f800000000000000000000000000000000000 % 0070 % 03800000000000000000000000000000000000000000000000000001c000000000000000000000 % 000001c00000000000000000000018000000000003e00000000000000000000000000000000000 % 007a % 000000000000000000000000000000000000000000000000000000018000000000000000000000 % 000000c00000000000000000000000000000000000f80000000000000000000000000000000000 % 0004 % 000000000000000000000000000000000000000000000000000000038000000000000000000000 % 000000c000000000000000000000000000000000001e0000000000000000000000000000000000 % 000e % 00200000c000000000000000000000000000000000000000000000030000000000000000000000 % 000000600000000000000800006000000000000000078000000000000000000000000000000000 % 0018 % 002000004000000000000000000000000000000000000000000000070000000000000000000000 % 00000060000000000000180000200000000000000001e000000000000000000000000000000000 % 0022 % 000000004000000000000000000000000000000000000000000000060000000000000000000000 % 000000300000000000000800002b00000000000000007800000000000000000000000000000000 % 0055 % 0d6dd8dc473b8000000000000000000000000000000000000000000e0000000000000000000000 % 00000030000000000003cb871e2400000000000000001e00000000000000000000000000000000 % 0055 % 122664e64f8b0000000000000002000000000000000000000000000c0000000000000000000000 % 000000180000000000062c4fb128000000000000000007c0000000000000000000000000000000 % 0055 % 1d24444248040000000000000042000080000000000000000000001c0000000000000000000000 % 000000180000000000040848203c000000000000000001f0c00000000000000000000000000000 % 0055 % 03244442480e000000000000004000008000000000000000000000180000000000000000000000 % 0000001c000000000004084820240000000000000000007ce00000000000000000000000000000 % 0055 % 112444464c9300000000000f1ef677f1ee00000000000000000000380000000000000000000000 % 0000000c000000000006284cb1260000000000000000001ff80000000000000000000000000000 % 0055 % 1e7eee7ce73b800000000010b14223089f00000000000000000000300000000000000000000000 % 0000000c000000000003dce71e7700000000000000000007fc0000000000000000000000000000 % 0055 % 000000400000000000000003a04234389000000000000000000000700000000000000000000000 % 000000060000000000000000000000000000000000000003fe0000000000000000000000000000 % 0055 % 00000040000000000000000ca04214c89000000000000000000000600000000000000000000000 % 000000060000000000000000000000000000000000000003ff0000000000000000000000000000 % 0055 % 000000e00000000000000011b14219189900000000000000000000e00000000000000000000000 % 000000030000000000000000000000000000000000000003ff8000000000000000000000000000 % 0055 % 00000000000000000000000ede7708ecee00000000000000000000c00000000000000000000000 % 000000030000000000000000000000000000000000000000ffc000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000001c00000000000000000000000 % 00000003800000000000000000000000000000000000000000c01c066000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 000000018000000000000000000000000000000000000000000020022000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000003800000000000000000000000 % 000000018000000000000000000000000000000000000000000020022000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000003000000000000000000000000 % 00000000c000000000000000000000000000000000000000000072122000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000007000000000000000000000000 % 00000000c000000000000000000000000000000000000000000026322000000000000000000000 % 0055 % 000000000000000000000000000000020000000000000000000006000000000000000000000000 % 000000006000000000000000000000000000000000000000000022122000000000000000000000 % 0055 % 00000000000000000000000000040002002000000000000000000e000000000000000000000000 % 000000006000000000000000000000000000000000000000000022122000000000000000000000 % 0055 % 00000000000000000000000000040000002000000000000000000c000000000000000000000000 % 000000003000000000000000000000000000000000000000000022322000000000000000000000 % 0055 % 0000000000000000060079e6e1af7de66e78d0000000000000001c000000000000000000000000 % 000000003000000000000000000000000000000000000000000071df7000000000000000000000 % 0055 % 00000000000000000e00c733124422123121200000000000000018000000000000000000000000 % 000000003800000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000003c00821213a420722121d00000000000000038000000000000000000000000 % 000000001800000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000078008212106421922120300000000000000030000000000000000000000000 % 000000001800000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000001e000c632122422322121100000000000000070000000000000000000000000 % 000000000c00000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000003c00079e73bc771df73b9e00000000000000060000000000000000000000000 % 000000000c00000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000f000000000000000000000000000000000000e0000000000000000000000000 % 000000000600000000000000000000000000000000000000000000000001c00000000000000000 % 0055 % 000000000000001e000000000000000000000000000000000000c0000000000000000000000000 % 000000000600000000000000000000000000000000000000000001000006200000000000000000 % 0055 % 0000000000000078000000000000000000000000000000000001c0000000000000000000000000 % 000000000700000000000000000000000000000000000000000001000004200000000000000000 % 0055 % 00000000000020f000000000000000000000000000000000000180000000000000000000000000 % 0000000003000000000000000000000000000000000000000dee6bdc6ec0200000000000000000 % 0055 % 00000000000073c000000000000000000000000000000000000380000000000000000000000000 % 0000000003000000000000000000000000000000000000001244913e3320400000000000000000 % 0055 % 0000000000007f8000000000000000000000000000000000000300000000000000000000000000 % 0000000001800000000000000000000000000000000000001d64e9202220800000000000000000 % 0055 % 000000000000fe0000000020200c00000310000000000000000700000000000000000000000000 % 000000000180000000000000000000000000000000000000032819202220800000000000000000 % 0055 % 000000000001fc0000000040200400800110000000000000000600000000000000000000000000 % 0000000000c0000000000000000000000000000000000000112889322221800000000000000000 % 0055 % 000000000003fe0000000080000400800108000000000000000e00000000000000000000000000 % 0000000000c00000000000000000000000000000000000001e10f1dc7771800000000000000000 % 0055 % 000000000007fe000000009de3c479e71f08000000000000000c00000000000000000000000000 % 000000000060000000000000000000000000000000000000001000000000000000000000000000 % 0055 % 000000000007fc0000000088a664848fb108000000000000001c00000000000000000000000000 % 000000000060000000000000000000000000000000000000007000000000000000000000000000 % 0055 % 00000000000fe0000000008d24241c882108000000000000001800000000000000000000000000 % 00000000007000000000000000000000000000000000000000c000000000000000000000000000 % 0011 % 00000000001e000000000085242464882108000000000000003800000000000000000000000000 % 000000000030000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000008624648c8ca308000000000000003000000000000000000000000000 % 000000000030000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 00000000000000000000008273ce76e71d88000000000000007000000000000000000000000000 % 000000000018000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000080000000000008000000000000006000000000000000000000000000 % 000000000018000000000000000000000000000000077706800000000000000000000000000000 % 0055 % 00000000000000000000004000000000001000000000000000e000000000000000000000000000 % 00000000000c000000000000000000000000000000022f89000000000000000000000000000000 % 0055 % 00000000000000000000000000000000000000000000000000c000000000000000000000000000 % 00000000000c00000000000000000000000000000003280e800000000000000000000000000000 % 0055 % 00000000000000000000000000000000000000000000000001c000000000000000000000000000 % 00000000000e000000000000000000000000000000014801800000000000000000000000000000 % 002c % 0000000000000000000000000000000000000000000000001d8000000000000000000000000000 % 000000000007c00000000000000000000000000000014c88800000000000000000000000000000 % 002b % 0000000000000000000000000000000000000000000000001f8000000000000000000000000000 % 000000000007c0000000000000000000000000000000870f000000000000000000000000000000 % 002b % 0000000400001800000000000000000000000000000000001fc000000000000000000000000000 % 00000000001fc0000000000000000000000000000000800000c00000000c000000000000000000 % 002c % 0000000400000800000000000000000000000000000000001fe000000000000000000000000000 % 00000000001fe0000000000000000000000000000003800001c00000000e000000000000000000 % 002b % 0000000000000800000000000000000000000000000000001fc000000000000000000000000000 % 00000000000fe00000000000000000000000000000060000038000000006000000000000000000 % 002b % 0001bbecdd8f0800000000000000000000000000000000001f8000000000000000000000000000 % 00000000000fe00000000000000000000000000000000000070000000003000000000000000000 % 002c % 0001cd0466508800000000000000000000000000000000001f0000000000000000000000000000 % 000000000007e000000000000000000000000000000000000e0000000003800000000000000000 % 002b % 0000850444438800000000000000000000000000000000003e0000000000000000000000000000 % 000000000003e000000000000000000000000000000000001c0000000001800000000000000000 % 002b % 00008504444c8800000000000000000000000000000000003c0000000000000000000000000000 % 000000000001e00000000000000000000000000000000000380000000000c00000000000000000 % 002c % 00008d044451880000000000000000000000000000000000380000000000000000000000000000 % 000000000000e00000000000000000000000000000000000700000000000e00000000000000000 % 002b % 0000fb8eeeeedc0000000000000000000000000000000000300000000000000000000000000000 % 000000000000600000000000000000000000000000000000e00000000000600000000000000000 % 002b % 000080000000000000000000000000000000000000000000200000000000000000000000000000 % 000000000000200000000000000000000000000000000001c00000000000300000000000000000 % 002c % 000080000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000003800000000000380000000000000000 % 002b % 0001c0000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000007000000000000180000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000e0000000000000c0000dc7800000000 % 002c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000001c0000000000000e000062cc00000000 % 002b % 000010000060000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000038000000000000060000428400000000 % 002b % 000010000020000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000070000000000000030000428400000000 % 0000 % 000000000020000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000e000000000000003b000428c00000000 % 002b % 0006b6ec6e239dc000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000019c000000000000001f800e77800000000 % 002b % 000913327327c58000000000000000000000000000000002000000000000000000000000000000 % 000000000002000000000000000000000000000000003f8000000000000001f800000000000000 % 002c % 000e92222124020000000000000000000000000000000042000100000000000000000000000000 % 000000000042000080000000000000000000000000003f0000000000000007f800000000000000 % 002b % 000192222124070000000000000000000000000000000040000100000000000000000000000000 % 000000000040000080000000000000000000000000007f0000000000000007f800000000000000 % 002b % 0008922223264980000000000000000000000000001e1ef677f3ce000000000000000000000000 % 0000000f1ef677f1ee000000000000000000000000007f8000000000000003fc00000000000000 % 002c % 000f3f773e739dc00000000000000000000000000021314223091f000000000000000000000000 % 00000010b14223089f00000000000000000000000000ff8000000000000001fc00000000000000 % 002b % 000000002000000000000000000000000000000000072042343910000000000000000000000000 % 00000003a04234389000000000000000000000000000ff00000000000000007c00000000000000 % 002b % 00000000200000000000000000000000000000000019204214c910000000000000000000000000 % 0000000ca04214c89000000000000000000000000001fc00000000000000003c00000000000000 % 002b % 000000007000000000000000000000000000000000233142191919000000000000000000000000 % 00000011b14219189900000000000000000000000001f000000000000000001e00000000000000 % 0008 % 0000000000000000000000000000000000000000001d9e7708edce000000000000000000000000 % 0000000ede7708ecee00000000000000000000000003c000000000000000000e00000000000000 % 0038 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000030000000000000000000200000000000000 % 0058 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0058 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000010060600000000000000000000000000 % 000000000010060600000000000000000000000000000000000000000000000000000000000000 % 0044 % 000000000000000000000000000000000000000000000010020200000000000000000000000000 % 000000000010020200000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000020200000000000000000000000000 % 000000000000020200000000000000000000000000000000000000000000000000000000000000 % 0028 % 000000000000000000000000000000000000000001dfcfb1e2e270680000000000000000000000 % 000001dfc7f1e2e23868000000000000003f03c71cfe00000000000000000100000000e0198000 % 0070 % 0000000000000000000000000000000000000000008c24121332f8900000000000000000000000 % 0000008c221213327c900000000000000011842388460000000000000000210000800100088000 % 0000 % 000000000000000000000000000000000000000000d0e410721280e80000000000000000000000 % 000000d0e210721240e80000000000000010c82288410000000000000000200000800100088000 % 0000 % 000000000000000000000000000000000000000000532411921280180000000000000000000000 % 0000005322119212401800000000000000104812c8480000000000000f1e7b7779e70390888000 % 0027 % 0000000000000000000000000000000000000000006464123232c8880000000000000000000000 % 0000006462123232648800000000000000104812687800000000000010b12122848f8131888000 % 0002 % 00000000000000000000000000000000000000000023be39dbe770f00000000000000000000000 % 00000023b739dbe738f000000000000000104812684800000000000003a021341c880110888000 % 0064 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000010c83238410000000000000ca0211464880110888000 % 0038 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000108422184200000000000011b121188c8c8111888000 % 000a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000003f03c718fe0000000000000ede3b8876e7038eddc000 % 0014 % 000000000000000000000000000000000000000300000000000000000000000000000000000000 % 000300000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000700000000000000000000000000000000000000 % 000700000000000000000000000000000000000000000000000000000000000000000000000000 % 0035 % 000000000000000000000000000000000000000e00000000000000000000000000000000000000 % 000e00000000000000000000000000000000000000000000000000000000000000000000000000 % 003f % 000000000000000000000000000000dc73f7001c0000005f021000000000000000000000dc71fb % 801c0000002f8e1000000000000000000000000000000000000000000000000000000000000000 % 0052 % 00000000000000000000000000000062f9220038000000888e100000000000000000000062f891 % 003800000044511000000000000000000000000000000000000000000000000000000000000000 % 005c % 0000000000000000000000000000004281b20070000001088208000000000000000000004280d9 % 007000000084510800000000000000000000000000000000000000000000000000000000000000 % 0066 % 0000000000000000000000000000004280d400e00000010882080000000000000000000042806a % 00e000000084510800000000000000002000000000000000000000000000000100000000000000 % 0070 % 00000000000000000000000000000042c8d801c00000010f02080000000000000000000042c86c % 01c000000087830800000000000000004000000000000000000000000004000100100000010000 % 007a % 000000000000000000000000000000e77048038000000108020800000000000000000000e77024 % 038000000084020800000000000000008000000000000000000000000004000000100000010000 % 0004 % 000000000000000000000000000000000000070000000108020800000000000000000000000000 % 070000000084040800000000000000008f1e3c84fbc3ddc0000078f370df7cf3373c06f737ce37 % 600e % 0000000000000000000000000000000000000e000000010c060800000000000000000000000000 % 0e00000000860888000000000000000090b1638c442628800000c5998924210918900922491f19 % 9018 % 0000000000000000000000000000000000001c000000011c0f0800000000000000000000000000 % 1c000000008e1f08000000000000000083a0408440e40c800000810909d4203910900eb2751011 % 1022 % 000000000000000000000000000000000000380000000100000800000000000000000000000000 % 380000000080000800000000000000008ca040844324050000008109083420c9109001940d1011 % 1055 % 000000000000000000000000000000000000700000000080001000000000000000000000000000 % 7000000000400010000000000000000091b1628c446625000000c5190914211910900894451911 % 1055 % 000000000000000000000000000000000000e00000000000000000000000000000000000000000 % e00000000000000000000000000000008ede3c76e3b3c200000078f39de770efb9dc0f0879ce3b % b855 % 000000000000000000000000000000000001c00000000000000000000000000000000000000001 % c00000000000000000000000000000008000000000000200000000000000000000000008000000 % 0055 % 000000000000000000000000000000000003800000000000000000000000000000000000000003 % 800000000000000000000000000000004000000000000e00000000000000000000000038000000 % 0055 % 000000000000000000000000000000000067000000000000000000000000000000000000000067 % 000000000000000000000000000000000000000000001800000000000000000000000060000000 % 0055 % 0000000000000000000000000000000000fe0000000000000000000000000000000000000000fe % 000000000000300000000000000000000000000000000000000000000000000001000000000000 % 0055 % 0000000000000000000000000000000000fc0000000000000000000000000000000000000000fc % 000000000000300000000000000000000000000000000000000000000000000001000000000000 % 0055 % 0000000000000000000000000000000001fc0000000000000000000000000000000000000001fc % 000000000000300000000000000000000000800006040000000000000000000001000000000000 % 0055 % 0000000000000000000000000000000001fe0000000000000000000000000000000000000001fe % 000000000000300000000000000000000001800002040000000000000000000001000000000000 % 0055 % 0000000000000000000000000000000003fe0000000000000000000000000000000000000003fe % 000000000000300000000000000000000000800002b20000000000000000000001000000000000 % 0055 % 0000000000000000000000000000000003fc0000000000000000000000000000000000000003fc % 00000000000030000000000000000000003cb871e2420000000000000000000001000000000000 % 0055 % 0000000000000000000000000000000007f00000000000000000000000000000000000000007f0 % 000000000000300000000000000000000062c4fb12820000000000000000000001000000000000 % 0055 % 0000000000000000000000000000000007c00000000000000000000000000000000000000007c0 % 000000000000300000000000000000000040848203c20000000000000000000001000000000000 % 0055 % 000000000000000000000000000000000f00000000000000000000000000000000000000000f00 % 000000000000300000000000000000000040848202420000000000000000000001000000000000 % 0055 % 000000000000000000000000000000000c00000000000000200000000000000000000000000c00 % 00000000000030000000000000000000006284cb12620000000000000000000001000000000000 % 0055 % 000000000000000000000000000000000000000000000000200000000000000000000000000000 % 00000000000030000000000000000000003dce71e7720000000000000000000001000000000000 % 0055 % 000000000000000000000000000000000000000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000020000000000000000000001000000000000 % 0055 % 000000000000000000000000000000000000000000000000200371e6e380000000000000000000 % 000000000000300371e6e380000000000000000000040000000000000000000001000000000000 % 0055 % 00000000000000000000000000000000000000000000000020018b3317c0000000000000000000 % 00000000000030018b3317c0000000000000000000000000000000000000000001000000000000 % 0055 % 00000000000000000000000000000000000000000000000020010a121400000000000000000000 % 00000000000030010a121400000000000000000000000000000000000000000001000000000000 % 0055 % 00000000000000000000000000000000000000000000000020010a121400000000000000000000 % 00000000000030010a121400000000000000000000000000000000000000000001000000000000 % 0055 % 00000000000000000000000000000000000000000000000020010a321640000000000000000000 % 00000000000030010a321640000000000000000000000000000000000000000001000000000000 % 0055 % 00000000000000000000000000000000000000000000000020039de73b80000000000000000000 % 00000000000030039de73b80000000000000000000000000000000000000000001000000000000 % 0055 % 000000000000000000000000000400003000000000000000200000000000000000000400001800 % 000000000000300000000000000000000000000000000000000000000000000001000000000000 % 0055 % 000000000000000000000000000400001000000000000000200000000000000000000400000800 % 000000000000300000000000000000000000000000000000000000000000000001000000000000 % 0055 % 000000000000000000000000000000001000000000000000200000000000000000000000000800 % 000000000000300000000000000000000000000000000000000000000000000001000000000000 % 0055 % 00000000000000000000000373edbb0f1000000000000000200000000000000001bbecdd8f0800 % 000000000000300000000000000000000000000000000000000000000000000001000000000000 % 0055 % 0000000000000000000000039904cc909000000000000000200000000000000001cd0466508800 % 000000000000300000000000000000000000000000000000000000000000000001000000000000 % 0055 % 000000000000000000000001090488839000000000000000200000000000000000850444438800 % 000000000000300000000000000000000000000000000000000000000000000001000000000000 % 0055 % 0000000000000000000000010904888c90000000000000002000000000000000008504444c8800 % 000000000000300000000000000000000000000000000000000000000000000001000000000000 % 0055 % 0000000000000000000000011904889190000000000000002000000000000000008d0444518800 % 00000000000030000000000000000000000000000000000000000000000000001fe00000000000 % 0055 % 000000000000000000000001f38fddcef800000000000000200000000000000000fb8eeeeedc00 % 00000000000030000000000000000000000000000000000000000000000000000fe00000000000 % 0055 % 000000000000000000000001000000000000000000000000200000000000000000800000000000 % 00000000000030000000000000000000000000000000000000000000000000000fe00000000000 % 0055 % 000000000000000000000001000000000000000000000000200000000000000000800000000000 % 00000000000030000000000000000000000000000000000000000000000000000fe00000000000 % 0055 % 000000000000000000000003800000000000000000000000200000000000000001c00000000000 % 000000000000300000000000000000000000000000000000000000000000000007c00000000000 % 0055 % 000000000000000000000000000000000000000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000007c00000000000 % 0011 % 000000000000000000000000000000000000000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000007c00000000000 % 0055 % 000000000000000000000000200000c00000000000000000200000000000000000100000600000 % 000000000000300000000000000000000000000000000000000000000000000003800000000000 % 0000 % 000000000000000000000000200000400000000000000000200000000000000000100000200000 % 000000000000300000000000000000000000000000000000000000000000000003800000000000 % 0055 % 000000000000000000000000000000400000000000000003fe0000000000000000000000200000 % 000000000000300000000000000000000000000000000000000000000000000003800000000000 % 0055 % 000000000000000000000006e6ec6e471dc0000000000001fc0000000000000006b6ec6e239dc0 % 000000000000300000000000000000000000000000000000000000000000000001000000000000 % 0055 % 0000000000000000000000092332734f8580000000000001fc000000000000000913327327c580 % 000000000000300000000000000000000000000000000000000000000000000001000000000000 % 0055 % 00000000000000000000000ea22221480200000000000001fc000000000000000e922221240200 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000001a22221480700000000000000f80000000000000001922221240700 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000008a222234c8980000000000000f80000000000000008922223264980 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000f77773ee71dc0000000000000f8000000000000000f3f773e739dc0 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000020000000000000000000700000000000000000000020000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000020000000000000000000700000000000000000000020000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000070000000000000000000700000000000000000000070000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000000000000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000040000180000018000180 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000040000080000008000080 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000080000008000080 % 002c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000003000000000000000000000000000000000000000001b9fcdd87880f3e0f8847880 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000003000000000000000000000000000000000000000001cc8466484819901898c8480 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000084844441c81090108841c80 % 002c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000084844446481090108846480 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000030000000000000000000000000000000000000000008c844448c811901188c8c80 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000003000000000000000000000000000000000000000000f9ceeee77c0f380ec7677c0 % 002c % 000000000000000000000000000000000000000000000002000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000080000000000000000000000 % 002b % 000000000000000000000000000000000000000000000042000100000000000000000000000000 % 000000000000300000000000000000000000000000000000000000080000000000000000000000 % 002b % 000000000000000000000000000000000000000000000040000100000000000000000000000000 % 0000000000003000000000000000000000000000000000000000001c0000000000000000000000 % 0000 % 0000000000000000000000000000000000000000001e1ef677f3ce000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000000000000000021314223091f000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000072042343910000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002c % 00000000000000000000000000000000000000000019204214c910000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000010000060000000000 % 002b % 000000000000000000000000000000000000000000233142191919000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000010000020000000000 % 002b % 0000000000000000000000000000000000000000001d9e7708edce000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000020000000000 % 002c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000003000000000000000000000000000000000000000000000006b3766e239dc000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000911997327c58000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000e91112124020000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000191112124070000000 % 0008 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000891112326498000000 % 0038 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000f3bbbbe739dc000000 % 0058 % 000000000000000000000000000000000000000000000000000200000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000002000000000000 % 0058 % 000000000000000000000000000000000000000000000004000200200000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000002000000000000 % 002b % 000000000000000000000000000000000000000000000004000000200000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000007000000000000 % 0001 % 0000000000000000000000000000000000000000f1e6e1aff9e66e78d000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0000 % 00000000000000000000000000000000000000018b331244421231212000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0044 % 0000000000000000000000000000000000000001021213a440722121d000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000102121064419221203000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0028 % 00000000000000000000000000000000000000018a321224423221211000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0070 % 0000000000000000000000000000000000000000f1e73bc7e1df73b9e000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0027 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0064 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0038 % 00000000000000000000000000000000000000000020200c000003100000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 000a % 000000000000000000000000000000000000000000402004008001100000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0014 % 000000000000000000000000000000000000000000800004008001080000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000bbe3c4f1ee1f080000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0035 % 000000000000000000000000000000000000000000912665089f31080000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 003f % 0000000000000000000000000000000000000000009a2424389021080000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0052 % 0000000000000000000000000000000000000400008a2424c89021080000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 005c % 0000000000000000000000000000000000000e00008c2465189923080000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0066 % 0000000000000000000000000000000000001c00008473ceecee1d880000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0070 % 000000000000000000000000000000000000380000800000000000080000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 007a % 0000000000000000000000000001b8e3f700700000400000000000100000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0004 % 0000000000000000000000000000c5f12200e00000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 000e % 00000000000000000000000000008501b201c00000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0018 % 00000000000000000000000000008500d403800000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0022 % 00000000000000000000000000008590d807000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000001cee0480e000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000001c000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000038000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000070000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000e0000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000001c0000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000380000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000700000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000008e00000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000001dc00000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000001f800000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000003f000000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000003f800000000000000200371e6e380000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000007fc0000000000000020018b3317c0000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000007fc0000000000000020010a121400000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000ff00000000000000020010a121400000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000fc00000000000000020010a321640000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000001f000000000000000020039de73b80000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000001c0000000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000200000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000003fe0000000000000000000000000000 % 000000000001fe0000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000003fc0000000000000000000000000000 % 000000000001fe0000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000080000300000000000000001fc0000000000000000000000000000 % 000000000001fc0000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000080000100000000000000001fc0000000000000000000000000000 % 000000000001fc0000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000100000000000000001f80000000000000000000000000000 % 000000000000fc0000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000377d9bb1e100000000000000000f80000000000000000000000000000 % 000000000000f80000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000039a08cca1100000000000000000f80000000000000000000000000000 % 000000000000f80000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000010a088887100000000000000000f00000000000000000000000000000 % 000000000000780000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000010a088899100000000000000000700000000000000000000000000000 % 000000000000700000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000011a0888a3100000000000000000700000000000000000000000000000 % 000000000000700000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000001f71dddddb80000000000000000600000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0011 % 000000000000000000000100000000000000000000000000200000000000000000000000000000 % 000000000000200000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000100000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000380000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000400000c0000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000040000040000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000040000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000dcdd8dc4e3b8000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000124664e65f0b0000000003800000006000060000000000000000000000 % 000003800000006000060000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000001d44444250040000000004000000002000020000000000000000000000 % 000004000000002000020000000000000000000000000000000000000000000000000000000000 % 002b % 0000000000000000000003444442500e0000000004000000002000020000000000000000000000 % 000004000000002000020000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000114444465913000000000e79f78e03e213c20000000000000000000000 % 00000e79f78e03e211e20000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000001eeeee7cee3b8000000004cc8c5f062634220000000000000000000000 % 000004cc8c5f062632120000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000004000000000000004848810042210e20000000000000000000000 % 000004848810042210720000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000004000000000000004848810042213220000000000000000000000 % 000004848810042211920000000000000000000000000000000000000000000000000000000000 % 002c % 00000000000000000000000000e0000000000000048c8c59046234620000000000000000000000 % 0000048c8c59046232320000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000000000000000e79c78e03b1dbb70000000000000000000000 % 00000e79c78e03b1d9df0000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000001c00002604c40000000000000000000000000 % 000001c00002602640000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000002000002204444000000000000000000000000 % 000002000002202244000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000002000000200404000000000000000000000000 % 000002000000200204000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000000000000000738f0d62ec4cfee0000000000000000000000 % 00000738786e2e62cf770000000000000000000000000000000000000000000000000000000000 % 002b % 0000000000000000000000000000000000000000027d0922334444440000000000000000000000 % 0000027c8492332244220000000000000000000000000000000000000000000000000000000000 % 002c % 0000000000000000000000000000000000000000024039d2214444640000000000000000000000 % 000002401cea212244320000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000000000000000240c832214444280000000000000000000000 % 00000240641a212244140000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000002651912234444280000000000000000000000 % 000002648c8a232244140000000000000000000000000000000000000000000000000000000000 % 002c % 00000000000000000000000000000000000000000738ede73eeee7100000000000000000000000 % 0000073876f73e77e7080000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000100000000000000000000000 % 000000000000000000080000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000700000000000000000000000 % 000000000000000000380000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000c00000000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000000000000000000 % 0008 % 000000000000000000000000000000000000060000000000200000000000000000000000000000 % 000300000000000000000000000000000000000000000000000000000000000000000000000000 % 0038 % 0000000000000000000000000000000000000e0000000000200000000000000000000000000000 % 000700000000000000000000000000000000000000000000000000000000000000000000000000 % 0058 % 0000000000000000000000000000000000001c0000000000200000000000000000000000000000 % 000600000000000000000000000000000000000000000000000000000000000000000000000000 % 0058 % 00000000000000000000000000007770d0003800000000002000000000000000000000000006e1 % e00c00000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000022f92000700000000000300000000000000000000000000313 % 301c00000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 00000000000000000000000000003281d000e00000000000300000000000000000000000000212 % 103800000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000014803001c00000000000300000000000000000000000000212 % 107000000000000000000000000000000000000000000000000000000000000000000000000000 % 0044 % 000000000000000000000000000014c91003800000000000300000000000000000000000000212 % 30e000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 00000000000000000000000000000871e007000000000000300000000000000000000000000739 % e1c000000000000000000000000000000000000000000000000000000000000000000000000000 % 0028 % 00000000000000000000000000000800000e000000000000300000000000000000000000000000 % 018000000000300000000000000000000000000000000000000000000000000000000000000000 % 0070 % 00000000000000000000000000003800001c000000000000300000000000000000000000000000 % 030000000000300000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000060000038000000000000300000000000000000000000000000 % 070000000000300000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000070000000000000300dc7800000000000000000000000 % 0e0000000000303bb8680000000000000000000000000000000000000000000000000000000000 % 0027 % 0000000000000000000000000000000000e000000000000030062cc00000000000000000000000 % 1c000000000030117c900000000000000000000000000000000000000000000000000000000000 % 0002 % 0000000000000000000000000000000001c0000000000000300428400000000000000000000000 % 380000000000301940e80000000000000000000000000000000000000000000000000000000000 % 0064 % 000000000000000000000000000000000380000000000000100428400000000000000000000000 % 700000000000300a40180000000000000000000000000000000000000000000000000000000000 % 0038 % 000000000000000000000000000000000700000000000000100428c00000000000000000000000 % e00000000000300a64880000000000000000000000000000000000000000000000000000000000 % 000a % 00000000000000000000000000000000ce00000000000000100e77800000000000000000000000 % c00000000000300438f00000000000000000000000000000000000000000000000000000000000 % 0014 % 00000000000000000000000000000001fc00000000000000100000000000000000000000000001 % 800000000000300400000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000001f800000000000000180000000000000000000000000003 % 800000000000301c00000000000000000000000000000000000000000000000000000000000000 % 0035 % 00000000000000000000000000000003f800000000000000180000000000000000000000000007 % 000000000000303000000000000000000000000000000000000000000000000000000000000000 % 003f % 00000000000000000000000000000003fc0000000000000018000000000000000000000000000e % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0052 % 00000000000000000000000000000007fc0000000000000018000000000000000000000000001c % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 005c % 00000000000000000000000000000007f800000000000000180000000000000000000000000038 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0066 % 0000000000000000000000000000000fe000000000000000180000000000000000000000000030 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0070 % 0000000000000000000000000000000f8000000000000000180000000000000000000000000060 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 007a % 0000000000000000000000000000001e00000000000000001800000000000000000000000000e0 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0004 % 0000000000000000000000000000001800000000000000001800000000000000000000000001c0 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 000e % 000000000000000000000000000000000000000000000000180000000000000000000000000380 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0018 % 000000000000000000000000000000000000000000000000180000000000000000000000000700 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0022 % 000000000000000000000000000000000000000000000000080000000000000000000000000e00 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000080000000000000000000000001c00 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000080000000000000000000000001800 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000080000000000000000000000003000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000000000000c0000000000000000000000007000 % 000000000001fe0000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000000000000c000000000000000000000000e000 % 000000000001fe0000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000c000000200000000000000000c000000000000000000000001c000 % 000000000001fc0000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000004000004200008000000000000c0000000000000000000000038000 % 000000000000fc0000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000004000004000008000000000000c0000000000000000000000070000 % 000000000000fc0000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000007c70f1ef677f1ee00000000000c0000000000000000000000060000 % 000000000000f80000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000c4f90b14223089f00000000000c00000000000000000000000c0000 % 000000000000780000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000084803a04234389000000000000c00000000000000000000001c0000 % 000000000000780000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000008480ca04214c89000000000000c0000000000000000000000380000 % 000000000000700000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000008cc91b14219189900000000000c0000000000000000000000700000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000007670ede7708ecee0000000000040000000000000000000000e00000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000040000000000000000000001c00000 % 000000000000200000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000040000000000000000000003800000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000040000000000000000000003000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000040000000000000000000006000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000000000000000000006000000000000000000000e000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000010000000000000006000000000000000000001c000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000002000100100000000000060000000000000000000038000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000002000000100000000000060000000000000000000070000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000003cf370d7bef3373c68000000000600000000000000000000e0000000 % 000000000002000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000639989221109189090000000000600000000000000000000c0000000 % 000000000042000080000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000410909d210391090e800000000060000000000000000000180000000 % 000000000040000080000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000004109083210c910901800000000060000000000000000000380000000 % 0000000f1ef677f1ee000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000063190912111910908800000000060000000000000000000700000000 % 00000010b14223089f000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000003cf39de3b8efb9dcf000000000060000000000000000000e00000000 % 00000003a042343890000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000020000000000000000001c00000000 % 0000000ca04214c890000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000020000000000000000003800000000 % 00000011b142191899000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000020000000000000000007000000000 % 0000000ede7708ecee000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000100000000000000000020000000000000000006000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000010000000000000000002000000000000000000c000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000010000000000000000003000000000000000001c000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000100000000000000000030000000000000000038000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000100000000000000000030000000000000000070000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0011 % 0000000000000000000000000000001000000000000000000300000000000000000e0000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000001000000000000000000300000000000000001c0000000000 % 000000000000000100000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000100000000000000000030000000000000000180000000000 % 000000000004000100100000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000100000000000000000030000000000000000300000000000 % 000000000004000000100000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000100000000000000000030000000000000000600000000000 % 000079e6e0df7de36e3cd000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000100000000000000000030000000000000000e00000000000 % 0000c7331124221131112000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000100000000000000000030000000000000001c00000000000 % 0000821211d420712111d000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000100000000000000000010000000000000003800000000000 % 000082121034219121103000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000100000000000000000010000000000000007000000000000 % 0000c6321114223121111000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000010000000000000000001000000000000000e000000000000 % 000079e739e771dbf39de000000000000000000000000000000000000000000000000000000000 % 002c % 00000000000000000000000000000010000000000000000001000000000000000c000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000100000000000000000010000000000000018000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000100000000000000000018000000000000038000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000100000000000000000018000000000000070000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 0000000000000000000000000000001000000000000000000180000000000000e0000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 0000000000000000000000000000001000000000000000000180000000000001c0000000000000 % 00000020200c000003100000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000100000000000000000018000000000000380000000000000 % 000000402004008001100000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000100000000000000000018000000000000300000000000000 % 000000800004008001080000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000100000000000000000018000000000000600000000000000 % 0000009de3c479e71f080000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000100000000000000000018000000000000c00000000000000 % 00000088a664848fb1080000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000ff0000000000000000018000000000001c00000000000000 % 0000008d24241c8821080000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000ff0000000000000000018000000000003800000000000000 % 000000852424648821080000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000fe0000000000000000008000000000007000000000000000 % 0e00008624648c8ca3080000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000fe000000000000000000800000000000e000000000000000 % 3e00008273ce76e71d880000000000000000000000000000000000000000000000000000000000 % 002b % 0000000000000000000000000000007e000000000000000000800000000001c000000000000000 % f80000800000000000080000000000000000000000000000000000000000000000000000000000 % 0000 % 0000000000000000000000000000007c0000000000000000008000000000018000000000000003 % e00000400000000000100000000000000000000000000000000000000000000000000000000000 % 002b % 0000000000000000000000000000007c000000000000000000800000000003000000000000000f % 800000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 0000000000000000000000000000003c000000000000000000c00000000007000000000000003e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002c % 00000000000000000000000000000038000000000000000000c0000000000e00000000000000f8 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000038000000000000000000c0000000001c00000000000003e0 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000018000000000000000000c000000000380000000000000f80 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002c % 00000000000000000000000000000010000000000000000000c000000000700000000000003e00 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000000000000000000000000c00000000060000000000000f800 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000000000000000000000000c000000000c0000000000003e000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000000000000000000000000c0000000018000000000000f8000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0008 % 00000000000000000000000000000000000000000000000000c0000000038000000000003e0000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0038 % 00000000000000000000000000000000000000000000000000c000000007000000000000f80000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0058 % 00000000000000000000000000000000000000000000000000400000000e000000000003e00000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0058 % 00000000000000000000000000000000000000000000000000400000001c00000000000f800000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000000000000000000000000400000003800000000003e000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0001 % 0000000000000000000000000000600006000000000000000040000000300000000000f8000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0000 % 0000000000000000000000000000200002000000000000000040000000600000000003e0000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0044 % 0000000000000000000000000000200002000000000000000060000000e0000000000f80000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0000 % 0000000000000000000000000003e211e2000000000000000060000001c0000000003e000001b8 % f371c000000030dc73f70000000000000000000000000000000000000000000000000000000000 % 0028 % 00000000000000000000000000062632120000000000000000600000038000000000f8000000c5 % 998be00000003062f9220000000000000000000000000000000000000000000000000000000000 % 0070 % 00000000000000000000000000042210720000000000000000600000070000000003e000000085 % 090a00000000304281b20000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000422119200000000000000006000000e000000000f8000000085 % 090a00000000304280d40000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000462323200000000000000006000000c000000003e0000000085 % 190b200000003042c8d80000000000000000000000000000000000000000000000000000000000 % 0027 % 0000000000000000000000000003b1d9df00000000000000006000001800000000f800000001ce % f39dc000000030e770480000000000000000000000000000000000000000000000000000000000 % 0002 % 000000000000000000000000000000000000000000000000006000003000000003e00000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0064 % 00000000000000000000000000000000000000000000000000600000700000000f800000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0038 % 00000000000000000000000000000000000000000000000000600000e00000003e000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 000a % 00000000000000000000000000000000000000000000000000200001c0000000f8000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0014 % 0000000000000000000000000000000000000000000000000020000380000003e0000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000001000006000000000000000002000070000000f80000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0035 % 000000000000000000000000001000002000000000000000003e00060000003e00000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 003f % 00000000000000000000000000000000200000000000000001fe00cc000000f800000000000000 % 000000000001fe0000000000000000000000000000000000000000000000000000000000000000 % 0052 % 00000000000000000000000003737637238ee0000000000001fc01fc000003e000000000000000 % 000000000001fe0000000000000000000000000000000000000000000000000000000000000000 % 005c % 00000000000000000000000004919939a7c2c0000000000001fc01f800040f8000000000000000 % 000000000001fc0000000000000000000000000000000000000000000000000000000000000000 % 0066 % 00000000000000000000000007511110a40100000000000000fc03f8000e3e0000000000000000 % 000000000000fc0000000000000000000000000000000000000000000000000000000000000000 % 0070 % 00000000000000000000000000d11110a40380000000000000fc03fc001ef80000000000000000 % 000000000000fc0000000000000000000000000000000000000000000000000000000000000000 % 007a % 00000000000000000000000004511111a644c0000000000000f803fc003fe00000000000000000 % 000000000000f80000000000000000000000000000000000000000000000000000000000000000 % 0004 % 00000000000000000000000007bbbb9f738ee00000000000007807f8007f800000000000000000 % 000000000000780000000000000000000000000000000000000000000000000000000000000000 % 000e % 000000000000000000000000000000100000000000000000007807e000ff800000000000000000 % 000000000000780000000000000000000000000000000000000000000000000000000000000000 % 0018 % 00000000000000000000000000000010000000000000000000380f8001ff800000000000000000 % 000000000000700000000000000000000000000000000000000000000000000000000000000000 % 0022 % 00000000000000000000000000000038000000000000000000300f0003ffc00000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000000000000000000000300c0007f0000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000e03300000000000000000000000 % 000000c00000040000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000001001100000000000000000000000 % 000000400000440001000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000001001100000000000000000000000 % 000000400000400001000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000003909100000000000000000000000 % 000007ce1e3cfceef3ce0000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000001319100000000000000000000000 % 00000c5f21624445091f0000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000001109100000000000000000000000 % 000008500740446839100000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000001109100000000000000000000000 % 0000085019404428c9100000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000001119100000000000000000000000 % 000008d92362443119190000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000000000000038efb80000000000000000000000 % 0000076e1dbc7e10edce0000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000000000000000000000e0000000000000000000 % 000000000000000100000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000080000310000000000000000000 % 000000000004000100100000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000080000210000000000000000000 % 000000000004000000100000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000006f735ee376010000000000000000000 % 000079e6e0df7de36e3cd000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000000000000000000922489f199020000000000000000000 % 0000c7331124221131112000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000000000000000000eb27490111040000000000000000000 % 0000821211d420712111d000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000001940c90111040000000000000000000 % 000082121034219121103000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000000000089444991110c0000000000000000000 % 0000c6321114223121111000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000000000000000000f0878ee3bb8c0000000000000000000 % 000079e739e771dbf39de000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000080000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000380000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000600000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000003bb8340000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000000000000117c480000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000001940740000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000a400c0000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000000000000000a64440000000000000000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000438780200000000200000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000400000600000000600000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000000000000001c00000c00000000300000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000003000001800000000380000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000003000000000180000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002c % 0000000000000000000000000000000000000000000000060000000000c0000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000000000000000000000c0000000000e0000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000018000000000060000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000000000000000000030000000000030000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000060000000000038000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 0000000000000000000000000000000000000000000000c0000000000018000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002c % 00000000000000000000000000000000000000000000018000000000000c000000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000000000000000000030000000000000e00006e3c0000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000600000000000006000031660000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000000000000000000c00000000000003000021420000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000001800000000000003800021420000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000003000000000000001880021460000000000 % 000000000001fe0000000000000000000000000000000000000000000000000000000000000000 % 0000 % 0000000000000000000000000000000000000000000c6000000000000000f80073bc0000000000 % 000000000001fe0000000000000000000000000000000000000000000000000000000000000000 % 002b % 0000000000000000000000000000000000000000000ec000000000000000fc0000000000000000 % 000000000001fc0000000000000000000000000000000000000000000000000000000000000000 % 002b % 0000000000000000000000000000000000000000001f8000000000000001fc0000000000000000 % 000000000001fc0000000000000000000000000000000000000000000000000000000000000000 % 002c % 0000000000000000000000000000000000000000001f8000000000000003fc0000000000000000 % 000000000000fc0000000000000000000000000000000000000000000000000000000000000000 % 002b % 0000000000000000000000000000000000000000003fc000000000000001fe0000000000000000 % 000000000000f80000000000000000000000000000000000000000000000000000000000000000 % 002b % 0000000000000000000000000000000000000000003fe000000000000000fe0000000000000000 % 000000000000f80000000000000000000000000000000000000000000000000000000000000000 % 002c % 0000000000000000000000000000000000000000007fc0000000000000007e0000000000000000 % 000000000000780000000000000000000000000000000000000000000000000000000000000000 % 002b % 0000000000000000000000000000000000000000007f00000000000000003e0000000000000000 % 000000000000700000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000fc00000000000000000f0000000000000000 % 000000000000700000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000f00000000000000000070000000000000000 % 000000000000300000000000000000000000000000000000000000000000000000000000000000 % 0008 % 000000000000000000000000000000000000000001c00000000000000000030000000000000000 % 000000000000200000000000000000000000000000000000000000000000000000000000000000 % 0038 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0058 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0058 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0044 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0028 % 000000000000000000000000000000000fc0f1c77f00000000000000000080000000380cc00000 % 000000000060000c00000000000000000000000000000000000000000000000000000000000000 % 0070 % 00000000000000000000000000000000046108e223000000000000000010800040004004400000 % 000000000020000400000000000000000000000000000000000000000000000000000000000000 % 0000 % 00000000000000000000000000000000043208a220800000000000000010000040004004400000 % 000000000020000400000000000000000000000000000000000000000000000000000000000000 % 0000 % 00000000000000000000000000000000041204b2240000000000000787bd9dfcf380e424400000 % 0000000003e423c400000000000000000000000000000000000000000000000000000000000000 % 0027 % 000000000000000000000000000000000412049a3c000000000000084c5088c247c04c64400000 % 00000000062c642400000000000000000000000000000000000000000000000000000000000000 % 0002 % 000000000000000000000000000000000412049a2400000000000001c8108d0e44004424400000 % 00000000042420e400000000000000000000000000000000000000000000000000000000000000 % 0064 % 0000000000000000000000000000000004320c8e20800000000000064810853244004424400000 % 000000000424232400000000000000000000000000000000000000000000000000000000000000 % 0038 % 00000000000000000000000000000000042108862100000000000008cc50864646404464400000 % 000000000464646400000000000000000000000000000000000000000000000000000000000000 % 000a % 000000000000000000000000000000000fc0f1c67f00000000000007679dc23b7380e3bee00000 % 0000000003b3b3be00000000000000000000000000000000000000000000000000000000000000 % 0014 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0035 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 003f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0052 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 005c % 000000000000000000000000000000000800000000000000000000000000008000000000000000 % 000000002000006000000000000000000000000000000000000000000000000000000000000000 % 0066 % 000000000000000000000000000000001000000101800000000000000100008008000000400000 % 000000002000002000000000000000000000000000000000000000000000000000000000000000 % 0070 % 000000000000000000000000000000002000000101000000000000000100000008000000400000 % 000000000000002000000000000000000000000000000000000000000000000000000000000000 % 007a % 0000000000000000000000000000000026e216e3c1000000003c79b86bfe799b9e037b9af71bb0 % 00000006e6ec6e271dc00000000000000000000000000000000000000000000000000000000000 % 0004 % 0000000000000000000000000000000027363311020000000062ccc49110848c480491244f8cc8 % 000000092332732f85800000000000000000000000000000000000000000000000000000000000 % 000e % 00000000000000000000000000000000221212110200000000408484e9101c884807593a480888 % 0000000ea222212802000000000000000000000000000000000000000000000000000000000000 % 0018 % 00000000000000000000000000000000221212110400000000408484191064884800ca06480888 % 00000001a222212807000000000000000000000000000000000000000000000000000000000000 % 0022 % 00000000000000000000000000000000223232110400000000628c8489108c8848044a224c8888 % 00000008a222232c89800000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000023e1df39c8000000003c79cef1f877dcee07843c771ddc % 0000000f77773e771dc00000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000002200000008000000000000000000000000000400000000 % 000000000000200000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000001200000018000000000000000000000000001c00000000 % 000000000000200000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000700000000000000000000000000000000003000000000 % 000000000000700000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000006620000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000002002220000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000002002210000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000006f9e2210000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000092212210000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000ea072210000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000001a192210000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 00000000000000000000000000000000008a232210000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000f39df710000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000010000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000020000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000ff8000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000ff0000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000000000000000000000000007f0000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000000000000000000000000007f0000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000000000000000000000000007e0000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000000000000000000000000003e0000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000000000000000000000000003e0000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0011 % 0000000000000000000000000000000000000000000000000000000000000003c0000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 0000000000000000000000000000000000000000000000000000000000000001c0000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000000001c0000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000080000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002c % 00000000000000000000000000000000000000000000000000000000200000c000000c0000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000002000004000000400004000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000004000000400004000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002c % 00000000000000000000000000000000000000000000000000000dcfe6ec3c4079f07c423c4000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000000000000000000000000000e6423324240cc80c4c6424000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 0000000000000000000000000000000000000000000000000000042422220e40848084420e4000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000000000000000000000000004242222324084808442324000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000000000000000000000000000464222246408c808c46464000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000007ce77773be079c0763b3be000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000000000000000000000000004000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000004000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000000000000000000000000000e000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000800003000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002c % 000000000000000000000000000000000000000000000000000000000000800001000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000001000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 0000000000000000000000000000000000000000000000000000000000359bb3711cee00000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002c % 0000000000000000000000000000000000000000000000000000000000488ccb993e2c00000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000074888909201000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 00000000000000000000000000000000000000000000000000000000000c888909203800000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000044888919324c00000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0008 % 000000000000000000000000000000000000000000000000000000000079ddddf39cee00000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0038 % 000000000000000000000000000000000000000000000000000000000000000100000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0058 % 000000000000000000000000000000000000000000000000000000000000000100000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0058 % 000000000000000000000000000000000000000000000000000000000000000380000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 002b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 105 52.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 187.5 127.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -700 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal or dual) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 187.5 107.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -570 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate full) s -874 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraint system) s savemat setmatrix n 187.5 122.5 m 186.49 119.47 l 188.51 119.47 l cl 0 0 0 F n 187.5 112.5 m 187.5 119.47 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 175 87.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -160 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (full) s -396 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (system?) s savemat setmatrix n 185 102.5 m 182.48 100.54 l 184.16 99.421 l cl 0 0 0 F n 180 95 m 183.32 99.981 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 165 95] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -158 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (yes) s savemat setmatrix n 162.5 102.5 m 163.93 99.645 l 165.35 101.07 l cl 0 0 0 F n 170 95 m 164.64 100.36 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 190 100] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -122 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (no) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 157.5 107.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -306 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (DONE) s -468 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(accuracy) s -314 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (check\)) s savemat setmatrix n 80 125 m 78.991 121.97 l 81.009 121.97 l cl 0 0 0 F n 80 115 m 80 121.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 80 102.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -184 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 127.5 102.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -184 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 57.5 120] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n 62.5 115 m 63.927 112.15 l 65.355 113.57 l cl 0 0 0 F n 70 107.5 m 64.641 112.86 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 62.5 110] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -196 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (new) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 135 117.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -240 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (none) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 105 120] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n 110 115 m 111.43 112.15 l 112.85 113.57 l cl 0 0 0 F n 117.5 107.5 m 112.14 112.86 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 110 110] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -196 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (new) s savemat setmatrix n 127.5 150 m 126.49 146.97 l 128.51 146.97 l cl 0 0 0 F n 127.5 112.5 m 127.5 146.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 80 130] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s -438 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(violated\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 55 150] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n 60 145 m 61.427 142.15 l 62.855 143.57 l cl 0 0 0 F n 67.5 137.5 m 62.141 142.86 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 60 140] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -196 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (new) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 80 155] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -486 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (force dual) s -468 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasibility) s savemat setmatrix n 80 150 m 78.991 146.97 l 81.009 146.97 l cl 0 0 0 F n 80 140 m 80 146.97 l gsave 0 0 0 0.176 0 B grestore n 60 167.5 m 61.427 164.65 l 62.855 166.07 l cl 0 0 0 F n 67.5 160 m 62.141 165.36 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 60 172.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -492 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (deactivate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s savemat setmatrix n 60 187.5 m 58.991 184.47 l 61.009 184.47 l cl 0 0 0 F n 60 177.5 m 60 184.47 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 60 192.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -218 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 127.5 155] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -486 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (force dual) s -468 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasibility) s savemat setmatrix n 127.5 172.5 m 126.49 169.47 l 128.51 169.47 l cl 0 0 0 F n 127.5 162.5 m 127.5 169.47 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 132.5 165] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -158 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (yes) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 127.5 177.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s -438 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(violated\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 127.5 202.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -492 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (deactivate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s savemat setmatrix n 127.5 217.5 m 126.49 214.47 l 128.51 214.47 l cl 0 0 0 F n 127.5 207.5 m 127.5 214.47 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 127.5 222.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -218 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n 127.5 197.5 m 126.49 194.47 l 128.51 194.47 l cl 0 0 0 F n 127.5 187.5 m 127.5 194.47 l gsave 0 0 0 0.176 0 B grestore n 82.5 197.5 m 81.291 194.55 l 83.306 194.41 l cl 0 0 0 F n 80 160 m 82.299 194.48 l gsave 0 0 0 0.176 0 B grestore n 85 197.5 m 86.22 194.55 l 87.746 195.87 l cl 0 0 0 F n 117.5 160 m 86.983 195.21 l gsave 0 0 0 0.176 0 B grestore n 90 197.5 m 92.257 195.24 l 93.16 197.05 l cl 0 0 0 F n 115 185 m 92.708 196.15 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 85 165] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -122 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (no) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 112.5 162.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -122 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (no) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 60 162.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -158 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (yes) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 87.5 145] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -240 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (none) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 87.5 117.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -240 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (none) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 115 192.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -240 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (none) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 132.5 192.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -196 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (new) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 97.5 242.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -700 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal or dual) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 97.5 222.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -570 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate full) s -874 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraint system) s savemat setmatrix n 97.5 237.5 m 96.491 234.47 l 98.509 234.47 l cl 0 0 0 F n 97.5 227.5 m 97.5 234.47 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 85 202.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -160 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (full) s -396 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (system?) s savemat setmatrix n 95 217.5 m 92.481 215.54 l 94.16 214.42 l cl 0 0 0 F n 90 210 m 93.32 214.98 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 75 210] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -158 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (yes) s savemat setmatrix n 72.5 217.5 m 73.927 214.65 l 75.355 216.07 l cl 0 0 0 F n 80 210 m 74.641 215.36 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 100 215] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -122 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (no) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 67.5 222.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -306 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (DONE) s -324 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(punt/) s -238 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (stall\)) s savemat setmatrix n 70 62.5 m 72.771 60.916 l 73.167 62.896 l cl 0 0 0 F n 95 57.5 m 72.969 61.906 l gsave 0 0 0 0.176 0 B grestore n 80 97.5 m 80.451 94.34 l 82.257 95.243 l cl 0 0 0 F n 100 57.5 m 81.354 94.792 l gsave 0 0 0 0.176 0 B grestore n 127.5 97.5 m 125.36 95.13 l 127.21 94.321 l cl 0 0 0 F n 110 57.5 m 126.29 94.726 l gsave 0 0 0 0.176 0 B grestore n 170 85 m 166.83 84.604 l 167.7 82.783 l cl 0 0 0 F n 112.5 57.5 m 167.27 83.694 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 180 72.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -306 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (DONE) s -588 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(other error\)) s savemat setmatrix n 172.5 70 m 169.32 70.212 l 169.82 68.259 l cl 0 0 0 F n 115 55 m 169.57 69.236 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 57.5 60] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s -524 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(bounding\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 32.5 80] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 57.5 85] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s -438 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(violated\)) s savemat setmatrix n 57.5 80 m 56.491 76.972 l 58.509 76.972 l cl 0 0 0 F n 57.5 70 m 57.5 76.972 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 37.5 70] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -196 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (new) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 65 75] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -240 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (none) s savemat setmatrix n 37.5 75 m 39.46 72.481 l 40.579 74.16 l cl 0 0 0 F n 45 70 m 40.019 73.32 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 35 97.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n 37.5 92.5 m 39.46 89.981 l 40.579 91.66 l cl 0 0 0 F n 45 87.5 m 40.019 90.82 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 77.5 52.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -450 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (excessive) s -280 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (swing) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 105 67.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -294 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (punt/) s -208 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (stall) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 140 80] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -438 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (accuracy) s -284 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (check) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 152.5 57.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (other) s -240 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error) s savemat setmatrix grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore %%EndDocument @endspecial 1146 10246 a FP(Fig)n(ur)q(e)52 b(4:)65 b(Err)q(o)-7 b(r)53 b(Rec)l(ove)l(ry)f(Ac)-5 b(tio)l(ns)52 b(fo)-7 b(r)53 b(Pr)s(i)s(mal)g(Si)s(mpl)n(e)-5 b(x)52 b(Err)q(o)-7 b(r)52 b(Ou)l(tc)l(o)n(me)o(s)3771 11400 y(39)p eop end %%Page: 40 43 TeXDict begin 40 42 bop 0 466 a FP(th)l(e)61 b(algo)-7 b(r)s(ithm)61 b(will)g(a)-8 b(tte)n(mpt)61 b(to)g(fo)-7 b(r)q(c)h(e)63 b(d)-7 b(ual)61 b(feas)n(ibility)g(by)g(d)-5 b(ea)n(c)g(tiv)r(a)d(ti)s(n)n(g)59 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)k (wh)n(os)m(e)e(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)61 b(c)l(os)-5 b(ts)0 665 y(ar)q(e)54 b(n)m(ot)f(d)-7 b(ual)53 b(feas)n(ib)l(l)n(e)i (\()p FG(i)12 b FP(.)p FG(e)p FP(.,)53 b(d)-5 b(ea)n(c)g(tiv)r(a)d(te) 54 b(unsa)-8 b(tis\002e)l(d)53 b(d)-7 b(ual)53 b(c)l(o)l(ns)-5 b(trai)s(nts\).)67 b(If)55 b(this)e(s)-8 b(u)j(cc)f(ee)l(ds,)55 b(th)l(e)e(algo)-7 b(r)s(ithm)0 865 y(will)50 b(d)-5 b(ea)n(c)g(tiv)r(a)d(te)50 b(l)n(oos)m(e)g(c)l(o)l(ns)-5 b(trai)s(nts)50 b(\(d)-7 b(ual)50 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s\))h (to)f(r)q(e)l(d)-7 b(u)i(c)f(e)51 b(th)l(e)f(c)-7 b(hanc)h(e)51 b(of)f(d)-7 b(ual)50 b(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s)49 b(and)0 1064 y(c)l(o)l(nti)s(n)n(u)l(e)42 b(with)g(d)-7 b(ual)43 b(s)n(i)s(mpl)n(e)-5 b(x.)63 b(Faili)s(n)n(g)41 b(all)j(th)l(e)f(a)l(bove,)i(th)l(e)e(u)l(lti)s(ma)-8 b(te)42 b(a)n(c)-5 b(tio)l(n)43 b(is)g(to)g(a)n(c)-5 b(tive)44 b(th)l(e)f(fu)l(ll)f(c)l(o)l(ns)-5 b(trai)s(nt)0 1263 y(sys)g(te)n(m)55 b(and)h(a)-8 b(tte)n(mpt)55 b(to)g(s)n(o)-5 b(lve)56 b(it)g(with)e(pr)s(i)s(mal)i(o)-7 b(r)57 b(d)-7 b(ual)55 b(s)n(i)s(mpl)n(e)-5 b(x.)75 b(T)8 b(his)55 b(can)h(be)g(do)l(n)n(e)f(o)l(nly)g(o)l(nc)-6 b(e,)56 b(to)g(a)-7 b(void)0 1462 y(a)61 b(cycl)n(e)g(i)s(n)f(whic)-7 b(h)60 b(th)l(e)g(fu)l(ll)g(sys)-5 b(te)n(m)60 b(is)h(a)n(c)-5 b(tiv)r(a)d(te)l(d,)61 b(par)q(e)l(d)g(down)e(whil)n(e)h(fo)-7 b(r)q(c)m(i)s(n)n(g)59 b(pr)s(i)s(mal)i(o)-7 b(r)61 b(d)-7 b(ual)59 b(feas)n(ibility)-17 b(,)0 1662 y(and)52 b(th)l(en)g(r)q(ea)n (c)-5 b(tiv)r(a)d(te)l(d)52 b(wh)l(en)f(l)n(e)o(s)-5 b(s)m(e)l(r)54 b(meas)-8 b(ur)q(e)o(s)53 b(agai)s(n)f(fail.)249 1960 y(Wh)l(en)58 b(a)h(s)-5 b(t)s(all)58 b(o)-7 b(r)59 b(p)-5 b(unt)58 b(occurs)g(i)s(n)h(pr)s(i)s(mal)f(p)-6 b(has)m(e)58 b(II,)i(th)l(e)e(\002rs)-5 b(t)58 b(a)n(c)-5 b(tio)l(n)58 b(is)g(agai)s(n)g(to)h(a)-8 b(tte)n(mpt)57 b(to)i(a)n(c)-5 b(tiv)r(a)d(te)0 2160 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s) 46 b(with)e(a)i(fa)-7 b(vo)i(ura)l(b)l(l)n(e)44 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)45 b(c)l(os)-5 b(t.)63 b(Howeve)l(r)-9 b(,)46 b(if)f(n)m(o)f(n)n(ew)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(can)f (be)h(fo)-5 b(und,)45 b(th)l(e)g(algo)-7 b(r)s(ithm)0 2359 y(i)s(mme)l(di)s(a)f(te)l(ly)40 b(a)-8 b(tte)n(mpts)40 b(to)h(fo)-7 b(r)q(c)h(e)41 b(d)-7 b(ual)40 b(feas)n(ibility)-17 b(.)62 b(Only)39 b(if)i(this)f(can)h(be)g(a)n(c)-7 b(hieve)l(d)40 b(will)g(it)h(pr)q(oc)-6 b(ee)l(d)41 b(to)g(a)n(c)-5 b(tiv)r(a)d(te)0 2558 y(vio)j(la)d(te)l(d)67 b(c)l(o)l(ns)-5 b(trai)s(nts,)69 b(d)-5 b(ea)n(c)g(tiv)r(a)d(te)67 b(l)n(oos)m(e)g(c)l (o)l(ns)-5 b(trai)s(nts,)70 b(and)d(pr)q(oc)-6 b(ee)l(d)67 b(to)g(d)-7 b(ual)67 b(s)n(i)s(mpl)n(e)-5 b(x.)109 b(Fail)n(ur)q(e)67 b(to)g(fo)-7 b(r)q(c)h(e)0 2757 y(d)f(ual)50 b(feas)n(ibility)h(o)-7 b(r)51 b(to)g(a)n(c)-5 b(tiv)r(a)d(te)51 b(any)f(c)l(o)l(ns)-5 b(trai)s(nts)51 b(ca)-8 b(u)h(s)m(e)o(s)51 b(fo)-7 b(r)q(c)h(e)l(d)52 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)49 b(of)i(th)l(e)g(fu)l(ll)g(c)l(o)l(ns) -5 b(trai)s(nt)50 b(sys)-5 b(te)n(m)0 2957 y(as)53 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)53 b(a)l(bove.)249 3256 y(Both)64 b(th)l(e)g(pr)s(i)s(mal)g(and)h(d)-7 b(ual)63 b(s)n(i)s(mpl)n(e)-5 b(x)65 b(algo)-7 b(r)s(ithm)64 b(i)s(nc)l(o)-7 b(rpo)g(ra)f(te)64 b(e)-5 b(xtens)n(ive)65 b(c)-7 b(h)l(ec)f(ks)65 b(and)f(e)l(rr)q(o)-7 b(r)65 b(r)q(ec)l(ove)l(ry)0 3455 y(a)n(c)-5 b(tio)l(ns)76 b(to)i(d)-5 b(e)e(tec)i(t)78 b(and)f(r)q(ec)l(ove)l(r)g(fr)q(o)n(m)h(n) n(ume)l(r)s(ical)f(i)s(ns)-5 b(t)s(a)l(bility)-17 b(.)138 b(By)77 b(th)l(e)g(ti)s(me)h(a)g(s)n(i)s(mpl)n(e)-5 b(x)78 b(g)t(ive)o(s)f(u)-6 b(p)78 b(and)0 3654 y(r)q(e)-7 b(po)g(rts)56 b(tha)-8 b(t)55 b(it)g(cann)m(ot)g(ove)l(r)q(c)l(o)n(me)h(n)n(ume)l(r)s (ical)f(pr)q(o)-8 b(b)l(l)n(e)n(ms,)55 b(th)l(e)l(r)q(e)g(is)h(littl)n (e)g(to)f(be)h(do)l(n)n(e)f(b)-8 b(u)l(t)55 b(fo)-7 b(r)q(c)h(e)56 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)0 3853 y(of)53 b(th)l(e)f(fu)l(ll)g(c)l (o)l(ns)-5 b(trai)s(nt)52 b(sys)-5 b(te)n(m)52 b(fo)-7 b(r)53 b(o)l(n)n(e)g(las)-5 b(t)53 b(a)-8 b(tte)n(mpt.)249 4152 y(Oth)l(e)l(r)45 b(e)l(rr)q(o)-7 b(rs)46 b(i)s(ndica)-8 b(te)45 b(algo)-7 b(r)s(ithm)s(ic)45 b(fail)n(ur)q(e)o(s)h(withi)s(n)e (th)l(e)i(s)n(i)s(mpl)n(e)-5 b(x)46 b(algo)-7 b(r)s(ithms)45 b(\()p FG(e)p FP(.)p FG(g)p FP(.,)h(fail)n(ur)q(e)g(to)g(a)n(cq)l(uir)q (e)0 4351 y(r)q(e)o(s)n(o)-5 b(ur)q(c)f(e)o(s,)77 b(o)-7 b(r)72 b(c)l(o)l(nditio)l(ns)d(n)m(ot)i(antic)m(ipa)-8 b(te)l(d)70 b(by)h(th)l(e)g(c)l(od)-5 b(e\))71 b(and)h(n)m(o)e(a)-8 b(tte)n(mpt)71 b(is)h(ma)-6 b(d)h(e)72 b(to)f(r)q(ec)l(ove)l(r)h(a)-8 b(t)72 b(th)l(e)0 4551 y(dy)7 b(nam)s(ic)52 b(s)n(i)s(mpl)n(e)-5 b(x)53 b(l)n(eve)l(l.)0 4850 y FN(Dual)i(Sim)-5 b(ple)e(x)249 5148 y FP(T)8 b(h)l(e)43 b(e)l(rr)q(o)-7 b(r)43 b(r)q(ec)l(ove)l(ry)g (a)n(c)-5 b(tio)l(ns)42 b(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)43 b(with)f(th)l(e)h(d)-7 b(ual)42 b(s)n(i)s(mpl)n(e)-5 b(x)44 b(algo)-7 b(r)s(ithm)42 b(ar)q(e)i(s)-8 b(h)n(own)41 b(i)s(n)i(Fig)n(ur)q(e)g(5.)62 b(In)0 5348 y(a)-6 b(dditio)l(n)52 b(to)i(th)l(e)f(\002ve)g(o)-5 b(u)l(tc)l(o)n(me)o(s)54 b(c)m(ite)l(d)f(fo)-7 b(r)54 b(pr)s(i)s(mal)f(s)n(i)s(mpl)n(e)-5 b(x,)55 b(l)n(os)-5 b(s)54 b(of)f(d)-7 b(ual)53 b(feas)n(ibility)g(\(l) n(os)-5 b(t)53 b(d)-7 b(ual)53 b(feas)n(ibility\))0 5547 y(can)e(be)g(r)q(e)-7 b(po)g(rte)l(d)51 b(by)f(th)l(e)h(d)-7 b(ual)50 b(s)n(i)s(mpl)n(e)-5 b(x)51 b(algo)-7 b(r)s(ithm.)64 b(\(L)5 b(os)-5 b(s)52 b(of)e(pr)s(i)s(mal)h(feas)n(ibility)g(is)g (handl)n(e)l(d)f(i)s(nte)l(r)5 b(nally)49 b(by)0 5746 y(th)l(e)j(pr)s(i)s(mal)h(s)n(i)s(mpl)n(e)-5 b(x,)54 b(whic)-7 b(h)51 b(s)n(i)s(mply)i(r)q(e)-7 b(t)l(ur)5 b(ns)52 b(to)h(p)-6 b(has)m(e)52 b(I)i(s)n(i)s(mpl)n(e)-5 b(x)53 b(ite)l(ra)-8 b(tio)l(ns.\))249 6045 y(Wh)l(en)81 b(th)l(e)f(d)-7 b(ual)81 b(s)n(i)s(mpl)n(e)-5 b(x)81 b(algo)-7 b(r)s(ithm)81 b(l)n(os)m(e)o(s)g(feas)n(ibility)-17 b(,)88 b(th)l(e)81 b(algo)-7 b(r)s(ithm)80 b(will)h(a)-8 b(tte)n(mpt)80 b(to)h(fo)-7 b(r)q(c)h(e)82 b(d)-7 b(ual)0 6244 y(feas)n(ibility)70 b(by)g(d)-5 b(e)l(l)n(e)e(ti)s(n)n(g)70 b(th)l(e)g(of)n(fendi)s(n)n(g)f(d)-7 b(ual)70 b(c)l(o)l(ns)-5 b(trai)s(nts)70 b(\(pr)s(i)s(mal)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s\).) 120 b(If)71 b(this)f(s)-8 b(u)j(cc)f(ee)l(ds,)76 b(it)70 b(will)0 6444 y(a)-8 b(tte)n(mpt)52 b(to)h(a)n(c)-5 b(tiv)r(a)d(te)53 b(feas)n(ib)l(l)n(e)h(d)-7 b(ual)52 b(c)l(o)l(ns)-5 b(trai)s(nts)52 b(and)h(r)q(e)-7 b(t)l(ur)5 b(n)52 b(to)h(d)-7 b(ual)52 b(s)n(i)s(mpl)n(e)-5 b(x.)67 b(If)54 b(d)-7 b(ual)52 b(feas)n(ibility)g(cann)m(ot)0 6643 y(be)57 b(r)q(e)o(s)-5 b(to)e(r)q(e)l(d,)59 b(th)l(e)e(algo)-7 b(r)s(ithm)56 b(a)-8 b(tte)n(mpts)56 b(to)h(a)n(c)-5 b(tiv)r(a)d(te)57 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(with)e(fa)-7 b(vo)i(ura)l(b)l(l)n(e) 56 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)57 b(c)l(os)-5 b(ts)57 b(und)-5 b(e)l(r)57 b(th)l(e)0 6842 y(pr)s(i)s(mal)c(p)-6 b(has)m(e)52 b(I)i(o)-8 b(bj)l(ec)j(tive)52 b(and)g(e)-5 b(xecu)l(te)o(s)54 b(pr)s(i)s(mal)f(p)-6 b(has)m(e)52 b(1.)249 7141 y(Exc)-6 b(e)o(s)h(s)n(ive)62 b(c)-7 b(han)n(g)n(e)59 b(i)s(n)i(th)l(e)g(v)r(al)n(u)l(e)g(of)g(pr)s(i)s(mal)g(v)r(ar)s(i)s(a) l(b)l(l)n(e)o(s)h(d)-7 b(ur)s(i)s(n)n(g)59 b(d)-7 b(ual)60 b(s)n(i)s(mpl)n(e)-5 b(x)62 b(is)f(t)s(aken)g(as)g(an)g(i)s(ndica-)0 7340 y(tio)l(n)g(tha)-8 b(t)62 b(th)l(e)g(d)-7 b(ual)62 b(algo)-7 b(r)s(ithm)61 b(is)i(movi)s(n)n(g)e(be)-7 b(tween)62 b(bas)n(ic)h(s)n(o)-5 b(l)n(u)l(tio)l(ns)60 b(whic)-7 b(h)62 b(ar)q(e)g(far)h(o)-5 b(u)l(ts)n(id)g(e)62 b(th)l(e)g(pr)s(i)s (mal)0 7540 y(feas)n(ib)l(l)n(e)f(r)q(e)-5 b(g)t(io)l(n)60 b(and)g(far)h(fr)q(o)n(m)g(ea)n(c)-7 b(h)60 b(oth)l(e)l(r)-10 b(.)88 b(Wh)l(en)60 b(e)-5 b(xc)f(e)o(s)h(s)n(ive)62 b(c)-7 b(han)n(g)n(e)60 b(i)s(n)g(a)h(pr)s(i)s(mal)g(v)r(ar)s(i)s(a)l (b)l(l)n(e)g(is)g(d)-5 b(e)e(tec)i(te)l(d,)0 7739 y(th)l(e)75 b(algo)-7 b(r)s(ithm)74 b(a)-8 b(tte)n(mpts)74 b(to)h(a)n(c)-5 b(tiv)r(a)d(te)75 b(pr)s(i)s(mal)g(c)l(o)l(ns)-5 b(trai)s(nts)74 b(whic)-7 b(h)74 b(will)g(bo)-5 b(und)74 b(this)h(motio)l(n.)131 b(If)75 b(this)g(is)0 7938 y(s)-8 b(u)j(cc)f(e)o(s)h(sfu)l(l,)65 b(e)-5 b(xecu)l(tio)l(n)61 b(of)h(d)-7 b(ual)62 b(s)n(i)s(mpl)n(e)-5 b(x)63 b(r)q(e)o(s)-8 b(ume)o(s.)94 b(Gen)n(e)l(ral)62 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)61 b(of)h(vio)-5 b(la)d(te)l(d)62 b(pr)s(i)s(mal)g(c)l(o)l(ns)-5 b(trai)s(nts)0 8137 y(is)68 b(n)m(ot)e(a)-8 b(tte)n(mpte)l(d)67 b(as)h(it)g(is)g(l)n(e)o(s)-5 b(s)68 b(like)l(ly)f(to)g(bo)-5 b(und)67 b(th)l(e)g(pr)s(i)s(mal)h(swi) s(n)n(g.)108 b(If)68 b(n)m(o)f(bo)-5 b(undi)s(n)n(g)65 b(c)l(o)l(ns)-5 b(trai)s(nts)66 b(can)0 8337 y(be)52 b(fo)-5 b(und,)51 b(th)l(e)g(algo)-7 b(r)s(ithm)50 b(a)-8 b(tte)n(mpts)51 b(to)h(a)n(c)-5 b(tiv)r(a)d(te)51 b(feas)n(ib)l(l)n(e)h (d)-7 b(ual)51 b(c)l(o)l(ns)-5 b(trai)s(nts)51 b(and)g(r)q(e)-7 b(t)l(ur)5 b(n)51 b(to)h(d)-7 b(ual)51 b(s)n(i)s(mpl)n(e)-5 b(x.)0 8536 y(If)58 b(n)m(o)e(s)-8 b(u)j(c)e(h)58 b(c)l(o)l(ns)-5 b(trai)s(nts)56 b(can)i(be)f(fo)-5 b(und,)58 b(th)l(e)f(algo)-7 b(r)s(ithm)56 b(a)-8 b(tte)n(mpts)57 b(to)g(a)n(c)-5 b(tiv)r(a)d(te)57 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(with)d(fa)-7 b(vo)i(ura)l(b)l(l)n(e)0 8735 y(r)q(e)l(d)e(u)i(c)f(e)l(d)52 b(c)l(os)-5 b(ts)53 b(und)-5 b(e)l(r)52 b(th)l(e)g(pr)s(i)s(mal)h(p)-6 b(has)m(e)53 b(I)g(o)-8 b(bj)l(ec)j(tive)53 b(and)f(e)-5 b(xecu)l(te)o(s)53 b(pr)s(i)s(mal)g(p)-6 b(has)m(e)53 b(1.)249 9034 y(Wh)l(en)71 b(d)-7 b(ual)71 b(s)n(i)s(mpl)n(e)-5 b(x)73 b(r)q(e)-7 b(po)g(rts)73 b(tha)-8 b(t)71 b(it)h(has)g(s)-5 b(t)s(all)n(e)l(d)72 b(o)-7 b(r)72 b(cann)m(ot)f(e)-5 b(xecu)l(te)72 b(n)n(ec)-6 b(e)o(s)h(sary)73 b(pivots,)k(th)l(e)71 b(algo-)0 9233 y(r)s(ithm)60 b(\002rs)-5 b(t)61 b(a)-8 b(tte)n(mpts)60 b(to)g(a)n(c)-5 b(tiv)r(a)d(te)60 b(vio)-5 b(la)d(te)l(d)60 b(pr)s(i)s(mal)h(c)l(o)l(ns)-5 b(trai)s(nts.)88 b(If)61 b(s)-8 b(u)j(c)e(h)60 b(c)l(o)l(ns)-5 b(trai)s(nts)60 b(can)g(be)h(a)n(c)-5 b(tiv)r(a)d(te)l(d,)0 9432 y(e)j(xecu)l(tio)l(n) 49 b(r)q(e)-7 b(t)l(ur)5 b(ns)50 b(to)g(d)-7 b(ual)50 b(s)n(i)s(mpl)n(e)-5 b(x.)65 b(If)51 b(n)m(o)e(c)l(o)l(ns)-5 b(trai)s(nts)49 b(can)h(be)h(fo)-5 b(und,)49 b(th)l(e)h(algo)-7 b(r)s(ithm)50 b(a)-8 b(tte)n(mpts)49 b(to)h(fo)-7 b(r)q(c)h(e)0 9632 y(pr)s(i)s(mal)57 b(feas)n(ibility)g(by)f(d)-5 b(ea)n(c)g(tiv)r(a) d(ti)s(n)n(g)55 b(vio)-5 b(la)d(te)l(d)56 b(pr)s(i)s(mal)h(c)l(o)l(ns) -5 b(trai)s(nts.)78 b(De)-7 b(pendi)s(n)n(g)55 b(o)l(n)h(th)l(e)h(r)q (e)o(s)-8 b(u)l(lt)56 b(of)h(this)g(a)n(c-)0 9831 y(tio)l(n,)f(th)l(e)h (algo)-7 b(r)s(ithm)55 b(a)-8 b(tte)n(mpts)56 b(to)h(a)n(c)-5 b(tiv)r(a)d(te)56 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(with)e(fa)-7 b(vo)i(ura)l(b)l(l)n(e)56 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)56 b(c)l(os)-5 b(ts)57 b(und)-5 b(e)l(r)56 b(th)l(e)g(pr)s(i)s(mal)0 10030 y(p)-6 b(has)m(e)53 b(I)g(o)-7 b(r)53 b(p)-6 b(has)m(e)52 b(II)i(o)-8 b(bj)l(ec)j(tive)52 b(and)h(e)-5 b(xecu)l(te)o(s)53 b(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x.)249 10329 y(L)5 b(os)-5 b(s)54 b(of)e(n)n(ume)l(r)s(ical)h(s)-5 b(t)s(a)l(bility)52 b(and)g(oth)l(e)l(r)g(e)l(rr)q(o)-7 b(rs)53 b(ar)q(e)h(handl)n(e)l(d)d (as)j(fo)-7 b(r)53 b(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x.)3771 11400 y(40)p eop end %%Page: 41 44 TeXDict begin 41 43 bop 133 9764 a @beginspecial 61 @llx 175 @lly 513 @urx 723 @ury 4520 @rwi @setspecial %%BeginDocument: /devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/dualerrorflow.eps %!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/dualerrorflow.epsu %%Creator: IslandDraw for lou %%CreationDate: Fri Aug 19 15:57:49 2005 %%Pages: 1 %%BoundingBox: 61 175 513 723 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 566 686 1 1372 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000040000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000008c0000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000840000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000079e5c71f000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000cc862f88000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000084842808000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000084842808000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000008c842c88000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000078ee771c000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000038ffcf3e000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000000c0000c00000 % 000000000000007c4219900000000000000001f81e38e7f00000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000040000400000 % 000000000000004042109000000000000000008c211c42300000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000040000400000 % 0000000000000040421090000000000000000086411442080000000000000001 % 0000000000000000000000000000000000000000000000000000000000000000007c4278400000 % 0000000000000064421190000000000000000082409642400000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000c4c684400000 % 0000000000000038e70f38000000000000000082409343c00000000000000001 % 00000000000000000000000000000000000000000000000000000000000000000084421c400000 % 0000000000000000000000000000180000000082409342400000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000844264400000 % 00000000000000000000000000001f00000000864191c2080000000000000001 % 0000000000000000000000000000000000000000000000000000000000000000008c468c400000 % 00000000000000000000000000001fe0000000842110c2100000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000763b76e00000 % 7ffffffffffffffffffffffffffffffc000001f81e38c7f00000000000000002 % 0000000000000000000000000000000000c0000003000030000000000000000000000000000000 % 7ffffffffffffffffffffffffffffffc00000000000000000000000000000002 % 000000000000000000000000000000000040002001000010000000000000000000000000000000 % 00000000000000000000000000001ff000000000000000000000000000000002 % 000000000000000000000000000000000040002001000010000000000000000000000000000000 % 00000000000000000000000000001f8000000000000000000000000000000002 % 00000000000000000000000000000000004786f81f109e10000000000000000000000000000000 % 00000000000000000000000000001c0000000000000000000000000000000002 % 00000000000000000000000000000000004cc9203131a110000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 0000000000000000000000000000000000484ea02110871000000000000000000200000c000000 % 0000000000000000000000000000000000800400000000000008000000000002 % 00000000000000000000000000000000004841a021109910000000000000000002000004000000 % 0000000000000000000000000000000001004c00000000000008000000000002 % 000000000000000000000000000000000048c8a02311a310000000000000000000000004000000 % 0000000000000000000000000000000002004400000000000004000000000002 % 0000000000000000000000000000000000e78f381d8eddb80000000000002000d66ecdc473b800 % 00000000000000000000000000000000023cf5c39f039f7de7c4000000000002 % 000000000000000000000000000000000000000000000000000000000001f00122332e64f8b000 % 0000000000000000000000000000000002664627c807c8233204000000000002 % 000000000000000000000000000000000000000000000000000000000007c001d2222424804000 % 0000000000000000000000000000000002424424080408221204000000000002 % 00000000000000000000000000000000000000000000000000000000003e00003222242480e000 % 0000000000000000000000000000000002424424080408221204000000000002 % 0000000000000000000000000000000000000000000000000000000000f8000112222464c93000 % 0000000000000000000000000000000002464426480648223204000000000002 % 0000000000000000000000000000000000000000000000000000000007c00001e77777ce73b800 % 00000000000000000000000000000000023c7e739c039c71e704000000000002 % 0000000000000000000000000000000001c0000160262000000000001f00000000000400000000 % 0000000000000000000000000000000002000000000000000004000000000002 % 00000000000000000000000000000000020000012022240000000000f800000000000400000000 % 0000000000000000000000000000000001000000000000000008000000000002 % 00000000000000000000000000000000020000002002040000000003e000000000000e00000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000738786b2e626f770000001f0000000008000003000000 % 7000000000000000000000000000000000000000000000000000000000000002 % 00000000000000000000000000000000027c8491332224220000007c0000000018000003000000 % 7e00000000000000000000000000000000000000000000000000000000000002 % 0000000000000000000000000000000002401ce921222432000003e00000000018000001800000 % 0fc0000000000000000000000000000000000000000000000000000000000002 % 00000000000000000000000000000000024064192122241400000f800000000018000001800000 % 01f8000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000002648c892322241400007c000000000010000000c00000 % 003f800000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000073876f3be7777080001f0000000000030000000c00000 % 0007f00000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000008000f80000000000030000000c00000 % 00007e0000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000038003e00000000000030000000600000 % 00000fc000000000000000000000000000000000000000000000000000000002 % 00000000000000000000000000000000000000000000006001f000000000000060000000600000 % 000001f800000000000000000000000000000000000000000000000000000002 % 00000000000000000000000000000000000000000000000007c000000000000060000000600000 % 0000003f80000000000000000000000000000000000000000000000000000002 % 0000000000000000000000000000000000000000000000003e0000000000000060000000300000 % 00000007f0000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000f800000000000000c0000000300000 % 000000007e000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000007c000000000000000c0000000180000 % 000000000fc00000000000000000000000000000000000000000000000000002 % 00000000000000000000000000000000000000000000001f0000000000000000c0000000180000 % 0000000001f80000000000000000000000000000000000000000000000000003 % 0000000000000000000000000000000000000000000000f8000000000000000080000000180000 % 00000000003f8000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000003e00000000000000001800000000c0000 % 000000000007f000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000001f000000000000000001800000000c0000 % 0000000000007e00000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000007c000000000000000001800000000e0000 % 0000000000000fc0000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000000000000003e000000000000000000300000000060000 % 00000000000001f8000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000f8000000000000000000300000000060000 % 000000000000003f800000000000000000000000000000000000000000000003 % 0000000000000000000000000000000000000000707c0000000000000000000300000000030000 % 0000000000000007f00000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000f1f00000000000000000000600000000030000 % 00000000000000007e0000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000001ff800000000000000000000600000000030000 % 00000000000000000fc000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000003fe000000000000000000000600000000018000 % 000000000000000001f800000000000000000000000000000000000000000002 % 0000000000000000000000000000000000000007f8000000000000000000000400000000018000 % 0000000000000000003f80000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000ffc000000000000000000000c0000000001c000 % 00000000000000000007f0000000000000000000000000000000000000000000 % 000000000000000000000000000000000000003ffc000000000000000000000c0000000000c000 % 000000000000000000007e000000000000000000000000000000000000000002 % 000000000000000000000000000000000000003fc0000000000000000000000c0000000000c000 % 000000000000000000000fc00000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000001800000000006000 % 0000000000000000000001f80000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000001800000000006000 % 00000000000000000000003f8000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000001800000000006000 % 00001e3c7909f787bb800007f000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000003000000000003000 % 00002162c718884c510000007e00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000003000000000003000 % 00000740810881c8190000000fc0000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000003000000000001800 % 00001940810886480a00000001f8000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000002000000000001800 % 00002362c51888cc4a000000003f800000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000006000000000001800 % 00001dbc78edc767840000000007f00000000000000000000000000000000000 % 0000000000000000000000001c0000000300003000000000000000000000006000000000000c00 % 00000000000000000400000000007e0000000000000000000000000000000003 % 000000000000000000000000200000000100001000000000000000000000006000000000000c00 % 00000000000000001c00000000000fc000000000000000000000000000000001 % 00000000000000000000000020000000010000100000000000000000000000c000000000000c00 % 000000000000000030000000000001f802000000000000000000000000000000 % 00000000000000000000000073cfbc701f108f100000000000000000000000c000000000000600 % 0000000000000000000000000000003f87800000000000000000000000000002 % 000000000000000000000000266462f8313190900000000000000000000000c000000000000600 % 00000000000000000000000000000007f7c00000000000000000000000000001 % 000000000000000000000000242440802110839000000000000000000000018000000000000300 % 00000000100000c000000000000000007ff00000000000000000000000000000 % 0000000000000000000000002424408021108c9000000000000000000000018000000000000300 % 000000003000004000000000000000000ff80000000000000000000000000003 % 000000000000000000000000246462c82311919000000000000000000000018000000000000300 % 000000001000005600000000000000000ffc0000000000000000000000000001 % 00000000000000000000000073ce3c701d8ecef800000000000000000000010000000000000180 % 00000007970e3c4800000000000000000fff0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000030000000000000180 % 0000000c589f625000000000000000000fff0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000300000000000001c0 % 0000000810904078000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000000300000000000000c0 % 0000000810904048000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000600000000000000c0 % 0000000c5099624c000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000060000000000000060 % 00000007b9ce3cee000000000000000000000000000000000000000000000000 % 0000000000000000000000000e0000130162000000000000000000000000060000000000000060 % 0000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000001000001101222000000000000000000000000c0000000000000060 % 0000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000001000000100202000000000000000000000000c0000000000000030 % 0000000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000039c7837173267bb8000000000000000000000c0000000000000030 % 000000000000000000000000000000000000e033000000000000000000000000 % 00000000000000000000000013e844919922211000000000000000000000080000000000000038 % 0000000000000000000000000000000000010011000000000000000000000003 % 0000000000000000000000001201c7510922219000000000000000000000180000000000000018 % 0000000000000000000000000000000000010011000000000000000000000000 % 000000000000000000000000120640d1092220a000000000000000000000180000000000000018 % 0000000000000000000000000000000000039091000000000000000000000000 % 0000000000000000000000001328c451192220a00000000000000000000018000000000000000c % 0000000000000000000000000000000000013191000000000000000000000002 % 00000000000000000000000039c767b9f3f738400000000000000000000030000000000000000c % 0000000000000000000000000000000000011091000000000000000000000003 % 00000000000000000000000000000000000000400000000000000000000030000000000000000c % 0000000000000000000000000000000000011091000000000000000000000000 % 00000000000000000000000000000000000001c000000000000000000000300000000000000006 % 0000000000000000000000000000000000011191000000000000000000000000 % 000000000000000000000000000000000000030000000000000000000000600000000000000006 % 0000000000000000000000000000000000038efb800000000000000000000000 % 000000000000000000000018000000018000000000000000000000000000600000000000000003 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000038000000018000000000000000000000000000600000000000000003 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000070000000018000000000000000000000000000400000000000000003 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000003bb83400001e0000000018000000000000000000000000000c00000000000000001 % 8000000000000000000000000000000000000000000000000000000000000000 % 00000000000117c480000380000000018000000000000000000000000000c00000000000000001 % 8000000000000000000000000000000000000000000000000000000000000000 % 000000000001940740000700000000018000000000000000000000000000c00000000000000001 % 8000000000000000000000000000000000000000000000000000000000000000 % 000000000000a400c0000e00000000018000000000000000000000000001800000000000000000 % c000000000000000000000000000000000000000000e00000000000000000000 % 000000000000a64440003c00000000018000000000000000000000000001800000000000000000 % c000000000000000000000000000000000000800003100000000000000000000 % 000000000000438780007000000000018000000000000000000000000001800000000000000000 % 6000000000000000000000000000000000000800002100000000000000000000 % 00000000000040000000e000000000018000000000000000000000000003000000000000000000 % 600000000000000000000000000000006bbb5e73760100000000000000000000 % 000000000001c0000001c000000000018000000000000000000000000003000000000000000000 % 60000000000000000000000000000000911488f9990200000000000000000000 % 000000000003000000078000000000018000000000000000000000000003000000000000000000 % 30000000000000000000000000000000e9974881110400000000000000000000 % 0000000000000000000e00000371e0018000000000000000000000000002000000000000000000 % 3000000000000000000000000000000018a0c881110400000000000000000000 % 0000000000000000001c0000018b30018000000000000000000000000006000000000000000000 % 3800000000000000000000000000000088a448c9110c00000000000000000000 % 000000000000000000380000010a10018000000000000000000000000006000000000000000000 % 18000000000000000000000000000000f0478e73bb8c00000000000000000000 % 000000000000000000f00000010a10018000000000000000000000000006000000000000000000 % 1800000000000000000000000000000000400000000000000000000000000000 % 000000000000000001c00000010a3001800000000000000000000000000c000000000000000000 % 0c00000000000000000000000000000001c00000000000000000000000000000 % 000000000000000003800000039de001800000000000000000000000000c000000000000000000 % 0c00000000000000000000000000000003000000000000000000000000000000 % 00000000000000000700000000000001800000000000000000000000000c000000000000000000 % 0c00000000000000000000000000000000000000000000000000000000000000 % 00000000000000001e000000000000018000000000000000000000000018000000000000000000 % 0600000000000000000000000000000000000000000000000000000000000000 % 000000000000000038000000000000018000000000000000000000000018000000000000000000 % 0600000000000000000000000000000000000000000000000000000000000000 % 000000000000000070000000000000018000000000000000000000000018000000000000000000 % 0700000000000000000000000000000000000000000000000000000000000000 % 0000000000000000e0000000000000018000000000000000000000000010000000000000000000 % 0300000000000000000000000000000000000000000000000000000000000000 % 0000000000000003c0000000000000018000000000000000000000000030000000000000000000 % 0300000000000000000000000000000000000000000000000000000000000000 % 000000000000000700000000000000018000000000000000000000000030000000000000000000 % 0180000000000000000000000000000000000000000000000000000000000000 % 000000000000000e000000000000000ff000000000000000000000000030000000000000000000 % 0180000000000000000000000000000000000000000000000000000000000000 % 000000000000021c000000000000000ff000000000000000000000000060000000000000000000 % 0180000000000000000000000000000000000000000000000000000000000000 % 0000000000000778000000000000000fe000000000000000000000000060000000000000000000 % 00c0000000000000000000000000000006000000600000000000000000000001 % 0000000000000fe0000000000000000fe000000000000000000000000060000000000000000000 % 00c000000000000000000000000000000e000000700000000000000000000001 % 0000000000000fc00000000000000007e0000000000000000000000000c0000000000000000000 % 006000000000000000000000000000003c0000003c0000000000000000000001 % 0000000000001fc00000000000000007c0000000000000000000000000c0000000000000000000 % 0060000000000000000000003bf06800700000000e000dc78000000000000001 % 0000000000003fe00000000000000007c0000000000000000000000000c0000000000000000000 % 00600000000000000000000011f89000e00000000700062cc000000000000001 % 0000000000003fe00000000000000003c000000000000000000000000080000000000000000000 % 0030000000000000000000001980e803c000000003c004284000000000000001 % 0000000000007f8000000000000000038000000000000000000000000180000000000000000000 % 0030000000000000000000000a8018070000000000e004284000000000000002 % 000000000000fe0000000000000000038000000000000000000000000180000000000000000000 % 0030000000000000000000000ac8880e0000000000700428c000000000000002 % 000000000000f00000000000000000018000000000000000000000000180000000000000000000 % 0018000000000000000000000470f03c00000000003c0e778000000000000002 % 000000000000800000000000000000010000000000000000000000000300000000000000000000 % 0018000000000000000000000400007000000000000e00000000000000000002 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 000c000000000000000000001c0000e000000000000700000000000000000002 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 000c00000000000000000000300003c0000000000003c0000000000000000002 % 000000000000000000000000000000000000000000000000000000000600000000000000000000 % 000c0000000000000000000000000700000000000000e0000000000000000002 % 000000000000000000000000000000000000000000000000000000000600000000000000000000 % 00060000000000000000000000000e0000000000000070000000000000000002 % 000000000000000000000000000000000000000000000000000000000600000000000000000000 % 00060000000000000000000000003c000000000000003c000000000000000002 % 000000000000000000000000000000000000000000000000000000000400000000000000000000 % 000700000000000000000000000070000000000000000e000000000000000002 % 000000000000000000000000000000000000000000000000000000000c00000000000000000000 % 0003000000000000000000000000e00000000000000007000000000000000002 % 000000000000000000000000000000000000000000000000000000000c00000000000000000000 % 0003000000000000000000000043c00000000000000003c60000000000000002 % 000000200000000000000000000000100000000000000000000000000c00000000000000000000 % 00018000000000000000000000e7000000000000000000e70000000000000002 % 000004200010000000000000000002100004000000000000000000001800000000000000000000 % 00018000000000000000000000fe0000000000000000007f0000000000000002 % 000004000010000000000000000002000004000000000000000000001800000000000000000000 % 00018000000000000000000001fc0000000000000000003f8000000000000002 % 01e3cf6eef3ce000000000000078f7b3bf8f700000000000000000001800000000000000000000 % 0000c000000000000000000003f80000000000000000003fc000000000000002 % 021624245091f0000000000000858a111844f80000000000000000003000000000000000000000 % 0000c000000000000000000007fc0000000000000000003fc000000000000002 % 007404268391000000000000001d0211a1c4800000000000000000003000000000000000000000 % 00006000000000000000000007fc0000000000000000007fe000000000000002 % 019404228c9100000000000000650210a644800000000000000000003000000000000000000000 % 0000600000000000000000000ff80000000000000000001ff000000000000002 % 023624231191900000000000008d8a10c8c4c80000000000000000002000000000000000000000 % 0000600000000000000000001fc000000000000000000003f000000000000002 % 01dbc7710edce000000000000076f3b84767700000000000000000006000000000000000000000 % 0000300000000000000000001e00000000000000000000007800000000000002 % 000000000000000000000000000000000000000000000000000000006000000000000000000000 % 0000300000000000000000001000000000000000000000000800000000000000 % 000000000000000000000000000000000000000000000000000000006000000000000000000000 % 0000300000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000c000000000000000000000 % 0000180000000000000000000000000000000000000000000000000000000002 % 00000000000000000000000000000000000000000000000000000000c000000000000000000000 % 0000180000000000000000000000000000000000000000000000000000000002 % 00000000000000000000000000000000000000000000000000000000c000000000000000000000 % 00000c0000000000000000000000000000000000000000000000000000000002 % 0000010060c0000000000000000000803030000000000000000000018000000000000000000000 % 00000c0000000000000000000000000000000000000000000000000000000002 % 000001002040000000000000000000801010000000000000000000018000000000000000000000 % 00000c0000000000000000000000000000000000000000000000000000000002 % 000000002040000000000000000000001010000000000000000000018000000000000000000000 % 0000060000000000000000000000000000000000000000000000000000000002 % 3bbcfb3c2e470680000000000efe3f8f1711c34000000000000000010000000000000000000000 % 000006000000000000007e078e3bf800000000000000200000000e0330000002 % 11424142334f890000000000046110909993e48000000000000000030000000000000000000000 % 0000060000000000000023084711180000000000000420000800100110000002 % 1a0e410e21480e8000000000068710839092074000000000000000030000000000000000000000 % 0000030000000000000021904511040000000000000400000800100110000003 % 0a32413221480180000000000299108c909200c000000000000000030000000000000000000000 % 0000030000000000000020902591200000000000f1ef677f1ee0390910000000 % 0c464146234c888000000000032310919193244000000000000000060000000000000000000000 % 00000180000000000000209024d1e000000000010b14223089f0131910000002 % 043be3bb3ee70f0000000000011db9cedf39c78000000000000000060000000000000000000000 % 00000180000000000000209024d12000000000003a0423438900110910000002 % 000000000000000000000000000000000000000000000000000000060000000000000000000000 % 0000018000000000000021906471040000000000ca04214c8900110910000001 % 0000000000000000000000000000000000000000000000000000000c0000000000000000000000 % 000000c0000000000000210844310800000000011b1421918990111910000000 % 0000000000000000000000000000000000000000000000000000000c0000000000000000000000 % 000000c00000000000007e078e33f80000000000ede7708ecee038efb8000003 % 0000000000000000000000000000000000000000000000000000000c0000000000000000000000 % 000000e000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000080000000000000000000000 % 0000006000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000180000000000000000000000 % 0000006000000000000000000000000000000000000000000000000000000000 % 00000bf07080000000000000000001f81080000000000000000000180000000000000000000000 % 0000003000000000000000000000000000000000000000000000000000000002 % 000011188880000000000000000002447080000000000000000000180000000000000000000000 % 0000003000000000000000000000000000000000000000000000000000000001 % 0000210c8840000000000000000004441040000000000000000000300000000000000000000000 % 0000003000000000000000000000000000000000000000000000000000000000 % 000021048840000000000000000004441040000000000000000000300000000000000000000000 % 0000001800000000008000000000000000000000000000080000000000000002 % 000021041840000000000000000004781040000000000000000000300000000000000000000000 % 0000001800000000010000000000000000000000001000080080000004000001 % 000021041040000000000000000004401040000000000000000000600000000000000000000000 % 0000000c00000000020000000000000000000000001000000080000004000000 % 0000210c2040000000000000000004401040000000000000000000600000000000000000000000 % 0000000c00000000023c78f213ef0f770001e79b86bdf799b9e035ddaf39bb02 % 000021084440000000000000000004603040000000000000000000600000000000000000000000 % 0000000c000000000242c58e311098a200031ccc49108848c480488a447ccc81 % 000023f0f840000000000000000004e07840000000000000000000400000000000000000000000 % 0000000600000000020e810211039032000208484e9081c8848074cba4408880 % 000020000040000000000000000004000040000000000000000000c00000000000000000000000 % 000000060000000002328102110c9014000208484190864884800c5064408880 % 000010000080000000000000000002000080000000000000000000c00000000000000000000000 % 00000006000000000246c58a31119894000318c8489088c88480445224648881 % 000000000000000000000000000000000000000000000000000000c00000000000000000000000 % 0000000300000000023b78f1db8ecf080001e79cef1dc77dcee07823c739ddc1 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 0000000300000000020000000000000800000000000000000000002000000000 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 000000018000000001000000000000380000000000000000000000e000000003 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 0000000180000000000000000000006000000000000000000000018000000001 % 000000060000000000000000000000018000000000000000000003000000000000000000000000 % 0000000180000000000000000000000000000000000000000800000000000000 % 000000060000000000000000000000018000000000000000000003000000000000000000000000 % 00000000c0000000000000000000000000000000000000000800000000000002 % 000000060000000000000000000000018000000000000000000003000000000000000000000000 % 00000000c0000000000001000018080000000000000000000800000000000001 % 000000060000000000000000000000018000000000000000000002000000000000000000000000 % 00000000c0000000000003000008080000000000000000000800000000000000 % 000000060000000000000000000000018000000000000000000006000000000000000000000000 % 000000006000000000000100000ac40000000000000000000800000000000003 % 000000060000000000000000000000018000000000000000000006000000000000000000000000 % 00000000600000000000f171c789040000000000000000000800000000000001 % 000000060000000000000000000000018000000000000000000006000000000000000000000000 % 00000000300000000001898bec4a040000000000000000000800000000000000 % 00000006000000000000000000000001800000000000000000000c000000000000000000000000 % 00000000300000000001010a080f040000000000000000000800000000000000 % 00000006000000000000000000000001800000000000000000000c000000000000000000000000 % 00000000300000000001010a0809040000000000000000000800000000000001 % 00000006000000000000000000000001800000000000000000000c000000000000000000000000 % 00000000180000000001890b2c49840000000000000000000800000000000000 % 000000060000000000000000000000018000000000000000000018000000000000000000000000 % 00000000180000000000f39dc79dc40000000000000000000800000000000003 % 000000060000000000000000000000018000000000000000000018000000000000000000000000 % 000000001c000000000000000000040000000000000000000800000000000000 % 000000060000000000000000000000018000000000000000000018000000000000000000000000 % 000000000c000000000000000000080000000000000000000800000000000000 % 000000060000000000000000000000018000000000000000000010000000000000000000000000 % 000000000c000000000000000000000000000000000000000800000000000000 % 000000060000000000000000000000018000000000000000000030000000000000000000000000 % 0000000006000000000000000000000000000000000000000800000000000001 % 000000060000000000000000000000018000000000000000000030000000000000000000000000 % 0000000006000000000000000000000000000000000000000800000000000000 % 000000060000000000000000000000018000000000000000000030000000000000000000000000 % 0000000006000000000000000000000000000000000000000800000000000003 % 000000060000000000000000000000018000000000000000000060000000000000000000000000 % 0000000003000000000000000000000000000000000000000800000000000000 % 000000060000000000000000000000018000000000000000000060000000000100000000000000 % 0000000003000000000000000000000000000000000000000800000000000000 % 000000060000000000000000000000018000000000000000000060000000000100000000000000 % 0000000001800000000000000000000000000000000000000800000000000002 % 0000000600000000000000000000000180000000000000000000c0000000000000000000000000 % 0000000001800000000000000000000000000000000000000800000000000003 % 0000000600000000000000000000000180000000000000000000c1c7779c1a6b3bf00000000000 % 0000000001800000000000000000000000000000000000000800000000000000 % 0000000600000000000000000000000180000000000000000000c3e16c7e249111f80000000000 % 0000000000c00000000000000000000000000000000000000800000000000000 % 0000000600000000000000000000000180000000000000000000820088203ae91a800000000000 % 0000000000c00000000000000000000000000000000000000800000000000000 % 00000006000000000000000000000001800000000000000000018201c82006190a800000000000 % 0000000000c00000000000000000000000000000000000000800000000000000 % 0000003fc0000000000000000000000ff000000000000000000183226c7222890cc80000000000 % 0000000000600000000000000000000000000000000000007f80000000000000 % 0000003fc0000000000000000000000ff000000000000000000181c7779c3cf384700000000000 % 0000000000600000000000000000000000000000000000007f00000000000000 % 0000001fc0000000000000000000000fe000000000000000000300000000000000000000000000 % 0000000000300000000000000000000000000000000000007f00000000000000 % 0000001f800000000000000000000007e000000000000000000300000000000000000000000000 % 0000000000300000000000000000000000000000000000003f00000000000000 % 0000001f800000000000000000000007e000000000000000000300000000000000000000000000 % 0000000000300000000000000000000000000000000000003e00000000000000 % 0000000f800000000000000000000007c000000000000000000600000000000000000000000000 % 0000000000180000000000000000000000000000000000003e00000000000000 % 0000000f000000000000000000000003c000000000000000000600000000000000000000000000 % 0000000000180000000000000000000000000000000000001e00000000000000 % 0000000f000000000000000000000003c000000000000000000600000000200000000000000000 % 0000000000180000000000000000000000000000000000001c00000000000000 % 000000070000000000000000000000038000000000000000000400000000200000000000000000 % 00000000000c0000000000000000000000000000000000001c00000000000000 % 000000060000000000000000000000018000000000000000000c00000000000030000000000000 % 00000000000c0000000000000000000000000000000000000c00000000000000 % 000000060000000000000000000000018000000000000000000c00001bfbe6e1c0000000000000 % 0000000000060000000000000000000000000000000000000800000000000000 % 000000000000000000000000000000000000000000000000000c00002491231220000000000000 % 0000000000060000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000001800003ad9221220000000000000 % 0000000000060000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000180000066a2211c0000000000000 % 0000000000030000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000180000226c221200000000000000 % 0000000000030000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000003000003c24773be0000000000000 % 0000000000038000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000003000000000000230000000000000 % 0000000000018000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000003000000000000630000000000000 % 0000000000018000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000020000000000003c0000000000000 % 000000000000c000000000000000000000000000000000000000000000000000 % 00000c0000c0000000000000000000200001800000000000006000000000000000000000000000 % 000000000000c0000000000000000000000000000100000c00000060000c0000 % 000004000040000000000000000000200000800000000000006000000000000000000000000000 % 000002000000c000000000000000000000000000010000040000002000040000 % 000004000040000000000000000000000000800000000000006000000000000000000000000000 % 0000020000006000000000000000000000000000000000040000002000040000 % 00007c427840000000000000001b9f6dd87880000000000000c00000000000000000000000000d % c42dc783cf8060000000000000000000000000dcfb6ec3c4079f03e423c40000 % 0000c4c68440000000000000001cc826648480000000000000c00000000000000000000000000e % 6c662206640030000000000000000000000000e6413324240cc8062c64240000 % 000084421c4000000000000000084824441c80000000000000c000000000000000000000000004 % 2424220424003000000000000000000000000042412220e40848042420e40000 % 000084426440000000000000000848244464800000000000018000000000000000000000000004 % 2424220424003000000000000000000000000042412223240848042423240000 % 00008c468c400000000000000008c824448c800000000000018000000000000000000000000004 % 64642204640018000000000000000000000000464122246408c8046464640001 % 0000763b76e0000000000000000f9c7eee77c00000000000018000000000000000000000000007 % c3be7383ce00180000000000000000000000007ce3f773be079c03b3b3be0001 % 000000000000000000000000000800000000000000000000010000000000000000000000000004 % 0000000000001800000000000000000000000040000000000000000000000001 % 000000000000000000000000000800000000000000000000030000000000000000000000000004 % 0000000000000c00000000000000000000000040000000000000000000000001 % 000000000000000000000000001c0000000000000000000003000000000000000000000000000e % 0000000000000c000000000000000000000000e0000000000000000000000001 % 000000000000000000000000000000000000000000000000030000000000000000000000000000 % 0000000000000600000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000060000000000000000000000000000 % 0000000000000600000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000060000000000000000000000000000 % 0000000000000600000000000000000000000000000000000000000000000002 % 000200000c00000000000000000100000600000000000000060000000000000000000000000000 % 000000cc00000300000000000000000000000000000008000030000000000002 % 0002000004000000000000000001000002000000000000000c0000000000000000000000000000 % 0004004400000300000000000000000000000000000008000010000000000002 % 0000000004000000000000000000000002000000000000000c0000000000000000000000000000 % 0004004400000300000000000000000000000000000000000010000000000002 % 00d66ecdc473b80000000000003737637238ee00000000000c0000000000000000000000000000 % 00df3c44000001800000000000000000000000000001b9bb1b91c77000000002 % 0122332e64f8b00000000000004919939a7c2c0000000000080000000000000000000000000000 % 0124424400000180000000000000000000000000000248cc9cd3e16000000002 % 01d222242480400000000000007511110a40100000000000180000000000000000000000000000 % 01d40e44000000c00000000000000000000000000003a8888852008000000002 % 003222242480e00000000000000d11110a40380000000000180000000000000000000000000000 % 00343244000000c000000000000000000000000000006888885201c000000002 % 0112222464c9300000000000004511111a644c0000000000180000000000000000000000000000 % 01144644000000c00000000000000000000000000002288888d3226000000002 % 01e77777ce73b80000000000007bbbb9f738ee0000000000300000000000000000000000000000 % 01e73bee000000600000000000000000000000000003ddddcfb9c77000000002 % 000000040000000000000000000000010000000000000000300000000000000000000000000000 % 0000000000000060000000000000000000000000000000000800000000000002 % 000000040000000000000000000000010000000000000000300000000000000000000000000000 % 0000000000000070000000000000000000000000000000000800000000000002 % 0000000e0000000000000000000000038000000000000000600000000000000000000000000000 % 0000000000000030000000000000000000000000000000001c00000000000002 % 000000000000000000000000000000000000000000000000600000000000000000000000000000 % 0000000000000030000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000600000000000000000000000000000 % 0000000000000018000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000400000000000000000000000000000 % 0000000000000018000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000c00000000000000000000000000000 % 0000000000000018000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000c00000000000000000000000000000 % 000000000000000c000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000c00000000000000000000000000000 % 000000000000000c000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000001800000000000000000000000000000 % 0000000000000006000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000001800000000000000000000000000000 % 0000000000000006000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000001800000000000000000000000000000 % 0000000000000006000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000003000000000000000000000000000000 % 0000000000000003000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000003000000000000000000000000000000 % 0000000000000003000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000003000000000000000000000000000000 % 0000000000000003000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000002000000000000000000000000000000 % 0000000000000001800000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000006000000000000000000000000000000 % 0000000000000001800000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000006000000000000000000000000000000 % 0000000000000000c00000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000006000000000000000000000000000000 % 0000000000000000c00000000000000000000000000000000000000000000002 % 00000000000000000000000000000000000000000000000c000000000000000000000000000000 % 0000000000000000c00000000000000000000000000000000000000000000002 % 00000000000000000000000000000000000000000000000c000000000000000000000000000000 % 0000000000000000600000000000000000000000000000000000000000000003 % 00000000000000000000000000000000000000000000000c000000000000000000000000000000 % 0000000000000000600000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000018000000000000000000000000000000 % 0000000000000000600000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000018000000000000000000000000000000 % 0000000000000000300000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000018000000000000000000000000000000 % 0000000000000000300000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000010000000000000000000000000000000 % 0000000000000000180000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000030000000000000000000000000000000 % 0000000000000000180000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000030000000000000000000000000000000 % 00000000000000001b8000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000030000000000000000000000000000000 % 00000000000000000f8000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000060000000000000000000000000000000 % 00000000000000007f8000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000060000000000000000000000000000000 % 00000000000000007f8000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000060000000000000000000000000000000 % 00000000000000003f8000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000c0000000000000000000000000000000 % 00000000000000001f8000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000c0000000000000000000000000000000 % 00000000000000001f8000000000000000000000000000000000000000000002 % 0000000000000000000000000000000000000000000000c0000000000000000000000000000000 % 00000000000000000f8000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000080000000000000000000000000000000 % 0000000000000000078000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000f80000000000000000000000000000000 % 0000000000000000038000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000fe0000000000000000000000000000000 % 0000000000000000018000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000ff0000000000000000000000000000000 % 0000000000000000008000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000fe0000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000fe0000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000fc0000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000f80000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000f80000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000f00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000e00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000010000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000210000800000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000200000800000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000f1e7b7779e70000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000010b12122848f8000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000003a021341c880000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000ca0211464880000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000011b121188c8c8000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000ede3b8876e70000000000000000000000000000000003 % 000000000000000000000000000000000000000000008000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000088000200000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000080000200000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000003c79f9dde79c000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000000000042c4888a123e000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000e8088d07220000000000000000000000000000 % 0000000000000000000000000001000000000000000000000000000000000003 % 000000000000000000000000000000000000000328088519220000000000000000000000000000 % 0000000000000000000000040001001000000000000000000000000000000000 % 00000000000000000000000000000000000000046c488623232000000000000000000000000000 % 0000000000000000000000040000001000000000000000000000000000000000 % 0000000000000000000000000000000000000003b78fc21db9c000000000000000000000000000 % 000000000000000078f370df7cf3373c68000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000c59989242109189090000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000810909d420391090e8000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000008109083420c9109018000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000c51909142119109088000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000078f39de770efb9dcf0000000000000000000000000000000 % 000000000000000000000000000000000000000000000000400000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000010000400400000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000010000000400000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000001e79b837df78db8f34000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000031ccc44908844c4448000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000020848475081c484474000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000002084840d086448440c000000000000000000000000 % 00000000000000000020100c0000019000000000000000000000000000000000 % 000000000000000000000000000000000000318c8445088c484444000000000000000000000000 % 0000000000000000004010040080009000000000000000000000000000000000 % 0000000000000000000000000000000000001e79ce79dc76fce778000000000000000000000000 % 0000000000000000008000040080008800000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000009df3c479e70f8800000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000889664848f988800000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000008d14241c88108800000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000008514246488108800000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000008614648c8c918800000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000823bce76e70ec800000000000000000000000000000000 % 000000000000000000000000000000000000018000000018800020000000000000000000000000 % 0000000000000000008000000000000800000000000000000000000000000000 % 000000000000000000000000000000000000028000000008800020000000000000000000000000 % 0000000000000000004000000000001000000000000000000000000000000000 % 0000000000000000000000000000000000000480000000080000d0000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000004b8f109b8f9b70710000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000004cd9b18c588988890000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000048509088508908890000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000048509088508908710000000000000000000000000 % 0000000000000003000000003000000000000000000000000000000000000000 % 000000000000000000000000000000000000048d19188518908810000000000000000000000000 % 0000000000000007000000003000000000000000000000000000000000000000 % 00000000000000000000000000000000000004f8f0edceedf9cf90000000000000000000000000 % 000000000000001e000000003000000000000000000000000000000000000000 % 0000000000000000000000000000000000000400000000000008d0000000000000000000000000 % 0000dc73f7000078000000003000000000000000000000000000000000000000 % 0000000000000000000000000000000000000200000000000018e0000000000000000000000000 % 000062f9220000f0000000003000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000f00000000000000000000000000 % 00004281b20003c0000000003000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00004280d4000f00000000003000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000042c8d8001e00000000003000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000e77048007800000000003000000000000000000000000000000000000001 % 000000000000000000000000000000000000c00000000c00000000000000000000000000000000 % 000000000001e000000000003000000000000000000000000000000000000001 % 000000000000000000000000000000000003c00000000c00000000000000000000000000000000 % 000000000003c000000000003000000000000000000000000000000000000001 % 000000000000000000000000000000000007000000000c00000000000000000000000000000000 % 00000000000f0000000000003000000000000000000000000000000000000002 % 0000000000000000000000006e1cfdc0001e000000000c00000000000000000000000000000000 % 00000000003c000000000000300370f371c00000000000000000000000000002 % 000000000000000000000000313e48800078000000000c00000000000000000000000000000000 % 000000000078000000000000300189998be00000000000000000000000000002 % 00000000000000000000000021206c8000e0000000000c00000000000000000000000000000000 % 0000000001e0000000000000300109090a000000000000000000000000000002 % 0000000000000000000000002120350003c0000000000c00000000000000000000000000000000 % 000000000780000000000000300109090a000000000000000000000000000002 % 000000000000000000000000213236000f00000000000c00000000000000000000000000000000 % 000000000f00000000000000300109190b200000000000000000000000000002 % 000000000000000000000000739c12001c00000000000c00000000000000000000000000000000 % 000000003c0000000000000030039cf39dc00000000000000000000000000002 % 000000000000000000000000000000007800000000000c00000000000000000000000000000000 % 00000020f0000000000000003000000000000000000000000000000000000002 % 00000000000000000000000000000001e000000000000c00000000000000000000000000000000 % 00000071e0000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000038000000000000c00000000000000000000000000000000 % 000000ff80000000000000003000000000000000000000000000000000000002 % 0000000000000000000000000000000f0000000000000c00dc79b8e00000000000000000000000 % 000000fe00000000000000003000000000000000000000000000000000000002 % 0000000000000000000000000000003c0000000000000c0062ccc5f00000000000000000000000 % 000001fc00000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000700000000000000c00428485000000000000000000000000 % 000003fc00000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000001e00000000000000c00428485000000000000000000000000 % 000007fe00000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000007800000000000000c00428c85900000000000000000000000 % 00000ffe0000000000000001fe00000000000000000000000000000000000002 % 00000000000000000000000000000e000000000000000c00e779cee00000000000000000000000 % 00001fe00000000000000001fe00000000000000000000000000000000000002 % 00000000000000000000000000083c000000000000000c00000000000000000000000000000000 % 00001c000000000000000000fe00000000000000000000000000000000000002 % 000000000000000000000000001cf0000000000000000c00000000000000000000000000000000 % 000000000000000000000000fc00000000000000000000000000000000000002 % 000000000000000000000000003dc0000000000000000c00000000000000000000000000000000 % 000000000000000000000000fc00000000000000000000000000000000000002 % 000000000000000000000000007f80000000000000000c00000000000000000000000000000000 % 0000000000000000000000007c00000000000000000000000000000000000002 % 00000000000000000000000000ff00000000000000000c00000000000000000000000000000000 % 0000000000000000000000007800000000000000000000000000000000000002 % 00000000000000000000000000ff00000000000000000c00000000000000000000000000000000 % 0000000000000000000000007800000000000000000000000000000000000000 % 00000000000000000000000001ff80000000000000000c00000000000000000000000000000000 % 0000000000000000000000003800000000000000000000000000000000000000 % 00000000000000000000000003ff00000000000000007f80000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 00000000000000000000000007f000000000000000007f80000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000060000000000000000007f00000000000000000000000000000000 % c0000c0000000000000000001000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000003f00000000000000000000000000000000 % 4000040000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000003f00000000000000000000000000000000 % 4000040000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000003e00000000000000000000000000000007 % c423c40000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000001e0000000000000000000000000000000c % 4c64240000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000001e00000000000000000000000000000008 % 4420e40000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000001c00000000000000000000000000000008 % 4423240000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000c00000000000000000000000000000008 % c464640000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000c00000000000000000000000000000007 % 63b3be0000000000000000000000000000000000000000000000000000000002 % 000000000000000000003000030000000000000000000800000000000000000000000000000000 % 0000000000000000e0000000000200000c000000000000000000000000000002 % 000000000000000000001000010000000000000000000000000000000000000000000000000000 % 0000000000000001000000000002000004000000000000000000000000000001 % 000000000000000000001000010000000000000000000000000000000000000000000000000000 % 0000000000000001000000000000000004000000000000000000000000000000 % 00000000000000000001f109e10000000000000000000000000000000000000000000000000000 % 00000000000000039e7cf380ddf66ec784000000000000000000000000000003 % 00000000000000000003131a110000000000000000000000000000000000000000000000000000 % 000000000000000133218fc0e682332844000000000000000000000000000001 % 000000000000000000021108710000000000000000000000000000000000000000000000000020 % 0000c000000000012121040042822221c4000000000000000000000000000001 % 000000000000000000021109910000000000000000000000000000000000000000000000000020 % 0000400000000001212104004282222644000000000000000000000000000000 % 00000000000000000002311a310000000000000000000000000000000000000000000000000000 % 000040000000000123218e4046822228c4000000000000000000000000000002 % 00000000000000000001d8eddb800000000000180000600c0c00000000000000000000000006e6 % ec6e471dc00000039e70f3807dc777776e000000000000000000000000000001 % 000000000000000000000000000000000000000800002004040000000000000000000000000923 % 32734f8580000000000000004000000000000000000000000000000000000000 % 000000000000000000000000000000000000000800002004040000000000000000000000000ea2 % 2221480200000000000000004000000000000000000000000000000000000002 % 0000000000000000000000000000000000000008f1e3e3c5c4e0000000000000000000000001a2 % 222148070000000000000000e000000000000000000000000000000000000001 % 00000000000000000000000000000000000000099a16242665f0000000000000000000000008a2 % 22234c8980000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000009087420e4250000000000000000000000000f77 % 773ee71dc0000000000000000000000000000000000000000000000000000002 % 000000000000000000080000300000000000000909942324250000000000000000000000000000 % 002000000000000001c000016026200000000000000000000000000000000001 % 00000000000000000008000010000000000000091a346464659000000000000000000000000000 % 0020000000000000020000012022240000000000000000000000000000000000 % 000000000000000000000000100000000000001cf1dbb3b7cee000000000000000000000000000 % 0070000000000000020000002002040000000000000000000000000000000000 % 00000000000000000359bb3711cee0000000000000000000000000000000000000000000000000 % 00000000000000000738786b2e626f7700000000000000000000000000000001 % 00000000000000000488ccb993e2c0000000000000000000000000000000000000000000000000 % 0000000000000000027c84913322242200000000000000000000000000000001 % 000000000000000007488890920100000000000000000000000000000000000000000000000000 % 000000000000000002401ce92122243200000000000000000000000000000000 % 000000000000000000c88890920380000000000000000000000000000000000000000000000000 % 0000000000000000024064192122241400000000000000000000000000000003 % 0000000000000000044888919324c0000000000000000000000000000000000000000000000000 % 000000000000000002648c892322241400000000000000000000000000000001 % 0000000000000000079ddddf39cee0000000000000000000000000000000000000000000000000 % 0000000000000000073876f3be77770800000000000000000000000000000000 % 000000000000000000000010000000000000000000200c0c000380000000000000000000000000 % 0000000000000000000000000000000800000000000000000000000000000002 % 000000000000000000000010000000000000000000200404000c40000000000000000000000000 % 0000000000000000000000000000003800000000000000000000000000000001 % 000000000000000000000038000000000000000000000404000840000000000000000000000000 % 0000000000000000000000000000006000000000000000000000000000000000 % 00000000000000000000000000000000000003bf9f63c5c4e0d040000000000000000000000000 % 0000000000000003000000003000000000000000000000000000000000000003 % 000000000000000000000000000000000000011848242665f12080000000000000000000000000 % 0000000000000007000000003000000000000000000000000000000000000001 % 00000000000000000000000000000000000001a1c820e42501d100000000000000000000000000 % 000000000000000e000000003000000000000000000000000000000000000000 % 00000000000000000000000000000000000000a648232425003100000000000000000000000000 % 0000001ddc34001c000000003000000000000000000000000000000000000000 % 00000000000000000000000000000000000000c8c8246465911300000000000000000000000000 % 00000008be480078000000003000000000000000000000000000000000000001 % 00000000000000000000000000000000000000477c73b7cee1e300000000000000000000000000 % 0000000ca07400e0000000003000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000005200c01c0000000003000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000532440380000000003000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000021c780f00000000003000000000000000000000000000000000000000 % 000000000000000000000000000000000000c00000000c00000000000000000000000000000000 % 0000000200001c00000000003000000000000000000000000000000000000000 % 000000000000000000000000000000000003c00000000c00000000000000000000000000000000 % 0000000e00003800000000003000000000000000000000000000000000000001 % 00000000000000000000000000000000000f000000000c00000000000000000000000000000000 % 0000001800007000000000003000000000000000000000000000000000000000 % 0000000000000000000000000001b8f0001e000000000c00000000000000000000000000000000 % 000000000001e000000000003006e3c000000000000000000000000000000003 % 0000000000000000000000000000c5980078000000000c00000000000000000000000000000000 % 0000000000038000000000003003166000000000000000000000000000000000 % 0000000000000000000000000000850801e0000000000c00000000000000000000000000000000 % 0000000000070000000000003002142000000000000000000000000000000000 % 0000000000000000000000000000850803c0000000000c00000000000000000000000000000000 % 00000000000e0000000000003002142000000000000000000000000000000002 % 000000000000000000000000000085180f00000000000c00000000000000000000000000000000 % 00000000003c0000000000003002146000000000000000000000000000000003 % 0000000000000000000000000001cef03c00000000000c00000000000000000000000000000000 % 00000000007000000000000030073bc000000000000000000000000000000000 % 000000000000000000000000000000007800000000000c00000000000000000000000000000000 % 0000000000e00000000000003000000000000000000000000000000000000000 % 00000000000000000000000000000001e000000000000c00000000000000000000000000000000 % 0000000001c00000000000003000000000000000000000000000000000000000 % 000000000000000000000000000000078000000000000c00000000000000000000000000000000 % 0000000007800000000000003000000000000000000000000000000000000000 % 0000000000000000000000000000000f0000000000000c0eee1a00000000000000000000000000 % 000000000e000000000000003000000000000000000000000000000000000000 % 0000000000000000000000000000003c0000000000000c045f2400000000000000000000000000 % 000000001c000000000000003000000000000000000000000000000000000000 % 000000000000000000000000000000f00000000000000c06503a00000000000000000000000000 % 0000000038000000000000003000000000000000000000000000000000000000 % 000000000000000000000000000001e00000000000000c02900600000000000000000000000000 % 00000000f0000000000000003000000000000000000000000000000000000000 % 000000000000000000000000000007800000000000000c02992200000000000000000000000000 % 00000001c000000000000001fe00000000000000000000000000000000000000 % 00000000000000000000000000001e000000000000000c010e3c00000000000000000000000000 % 000000438000000000000001fe00000000000000000000000000000000000000 % 00000000000000000000000000083c000000000000000c01000000000000000000000000000000 % 000000e70000000000000000fe00000000000000000000000000000000000000 % 000000000000000000000000001cf0000000000000000c07000000000000000000000000000000 % 000000fe0000000000000000fc00000000000000000000000000000000000000 % 000000000000000000000000003fc0000000000000000c0c000000000000000000000000000000 % 000001f80000000000000000fc00000000000000000000000000000000000000 % 000000000000000000000000007f80000000000000000c00000000000000000000000000000000 % 000003fc00000000000000007c00000000000000000000000000000000000000 % 00000000000000000000000000ff00000000000000000c00000000000000000000000000000000 % 000003fc00000000000000007800000000000000000000000000000000000000 % 00000000000000000000000001ff00000000000000000c00000000000000000000000000000000 % 000007fe00000000000000007800000000000000000000000000000000000000 % 00000000000000000000000001ff80000000000000000c00000000000000000000000000000000 % 00000ff800000000000000003800000000000000000000000000000000000000 % 00000000000000000000000003ff00000000000000007f80000000000000000000000000000000 % 00000fc000000000000000003000000000000000000000000000000000000000 % 00000000000000000000000007e000000000000000007f80000000000000000000000000000000 % 00001e0000000000000000003000000000000000000000000000000000000000 % 000000000000000000000000060000000000000000007f00000000000000000000000000000000 % 0000100000000000000000001000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000003f00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000003f00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000003e00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000001e00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000001e00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000001c00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000200000c00000000000000000c00000000000000000000000000000000 % 0200000000000000000000010000000000000000000000000000000000000000 % 000000000000000000000200000400000000000000000800000000000000000000000000000000 % 4200010000000000000000210000800000000000000000000000000000000000 % 000000000000000000000000000400000000000000000000000000000000000000000000000000 % 4000010000000000000000200000800000000000000000000000000000000000 % 000000000000000000dcfe6ec3c400000000000000000000000000000000000000000000001e1e % f677f3ce00000000000f1e7b7779e70000000000000000000000000000000001 % 000000000000000000e64233242400000000000000000000000000000000000000000000002131 % 4223091f000000000010b12122848f8000000000000000000000000000000001 % 00000000000000000042422220e400000000000000000000000000000000000000000000000720 % 42343910000000000003a021341c880000000000000000000000000000000001 % 000000000000000000424222232400000000000000000000000000000000000000000000001920 % 4214c91000000000000ca0211464880000000000000000000000000000000001 % 000000000000000000464222246400000000000000000000000000000000000000000000002331 % 42191919000000000011b121188c8c8000000000000000000000000000000001 % 0000000000000000007ce77773be00000000000000000000000000000000000000000000001d9e % 7708edce00000000000ede3b8876e70000000000000000000000000000000001 % 000000000000000000400000000000000000000000008000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 000000000000000000400000000000000000000000088000200000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 000000000000000000e00000000000000000000000080000200000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 0000000000000000000000000000000000000003c79f9dde79c000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 00000000000000000000000000000000000000042c4888a123e000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 0000000000000000000000000000000000000000e8088d07220000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 000000000000000000080000300000000000000328088519220000000000000000000000000000 % 1006060000000000000000080306000000000000000000000000000000000002 % 00000000000000000008000010000000000000046c488623232000000000000000000000000000 % 1002020000000000000000080102000000000000000000000000000000000002 % 0000000000000000000000001000000000000003b78fc21db9c000000000000000000000000000 % 0002020000000000000000000102000000000000000000000000000000000002 % 00000000000000000359bb3711cee000000000000000000000000000000000000000000001dfcf % b1e2e2706800000001dde7d9e172383400000000000000000000000000000002 % 00000000000000000488ccb993e2c0000000000000000000000000000000000000000000008c24 % 121332f890000000008a120a119a7c4800000000000000000000000000000002 % 00000000000000000748889092010000000000000000000000000000000000000000000000d0e4 % 10721280e800000000d07208710a407400000000000000000000000000000002 % 000000000000000000c88890920380000000000000000000000000000000000000000000005324 % 119212801800000000519209910a400c00000000000000000000000000000002 % 0000000000000000044888919324c0000000000000000000000000000000000000000000006464 % 123232c8880000000062320a311a644400000000000000000000000000000002 % 0000000000000000079ddddf39cee00000000000000000000000000000000000000000000023be % 39dbe770f00000000021df1dd9f7387800000000000000000000000000000002 % 000000000000000000000010000000000000000000040181800000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 000000000000000000000010000000000000000000040080800000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 000000000000000000000038000000000000000000000080800000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000007779fc78b88e1a00000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 0000000000000000000000000000000000000022848484cc9f2400000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 00000000000000000000000000000000000000341c841c84903a00000000000000000000000000 % 3f0e1000000000000000002f8110000000000000000000000000000000000002 % 000000000000000000000000000000000000001464846484900600000000000000000000000000 % 4891100000000000000000444710000000000000000000000000000000000000 % 00000000000000000000000000000000000000188c848c8c992200000000000000000000000000 % 8891080000000000000000844108000000000000000000000000000000000000 % 000000000000000000000000000000000000000877ce76f9ce3c00000000000000000000000000 % 8891080000000000000000844108000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 8f03080000000000000000878108000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 8802080000000000000000840108000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 8804080000000000000000840108000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 8c08880000000000000000860308000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 9c1f0800000000000000008e0788000000000000000000000000000000000002 % 00000000000000000000000000000000000000000017e0e2000000000000000000000000000000 % 8000080000000000000000800008000000000000000000000000000000000002 % 000000000000000000000000000000000000000000223112000000000000000000000000000000 % 4000100000000000000000400010000000000000000000000000000000000002 % 000000000000000000000000000000000000000000421911000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000420911000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000420831000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000420821000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000421841000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000000000e000421089000000000000000000000000000000 % 0000180000000000000000003000000000000000000000000000000000000000 % 00000000000000000000000000000000000003c00047e1f1000000000000000000000000000000 % 00001e0000000000000000003000000000000000000000000000000000000003 % 000000000000000000000000000000000000078000400001000000000000000000000000000000 % 0000070000000000000000003000000000000000000000000000000000000001 % 00000000000000000000000000371c7ee0001e0000200002000000000000000000000000000000 % 0000038000000000000000003000000000000000000000000000000000000001 % 0000000000000000000000000018be244000780000000000000000000000000000000000000000 % 000001c000000000000000003000000000000000000000000000000000000000 % 0000000000000000000000000010a0364000f00000000000000000000000000000000000000000 % 000000f000000000000000003000000000000000000000000000000000000002 % 0000000000000000000000000010a01a8003c00000000000000000000000000000000000000000 % 0000003800000000000000003000000000000000000000000000000000000001 % 0000000000000000000000000010b21b000f000000000000000000000000000000000000000000 % 0000001c00000000000000003000000000000000000000000000000000000000 % 0000000000000000000000000039dc09001e000000000000000000000000000000000000000000 % 0000000e00000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000078000000000c00000000000000000000000000000000 % 0000000780000000000000003000000000000000000000000000000000000001 % 0000000000000000000000000000000001e0000000000c00000000000000000000000000000000 % 00000001c0000000000000003000000000000000000000000000000000000000 % 0000000000000000000000000000000003c0000000000c00000000000000000000000000000000 % 00000000e0000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000f00000000000c00000000000000000000000000000000 % 0000000070000000000000003000000000000000000000000000000000000001 % 000000000000000000000000000000003c00000000000c00000000000000000000000000000000 % 000000003c000000000000003000000000000000000000000000000000000000 % 000000000000000000000000000000007800000000000c00000000000000000000000000000000 % 000000000e000000000000003000000000000000000000000000000000000000 % 00000000000000000000000000000001e000000000000c00000000000000000000000000000000 % 0000000007000000000000003000000000000000000000000000000000000001 % 000000000000000000000000000000078000000000000c00000000000000000000000000000000 % 0000000003800000000000003000000000000000000000000000000000000001 % 0000000000000000000000000000000f0000000000000c00000000000000000000000000000000 % 0000000001e00000000000003000000000000000000000000000000000000000 % 00000000000000000000000000000c3c0000000000000c00000000000000000000000000000000 % 0000000000700000000000003000000000000000000000000000000000000003 % 00000000000000000000000000001ef00000000000000c00000000000000000000000000000000 % 0000000000380000000000003000000000000000000000000000000000000001 % 00000000000000000000000000001fe00000000000000c00dc79b8e00000000000000000000000 % 00000000001c0000000000003000000000000000000000000000000000000000 % 00000000000000000000000000003f800000000000000c0062ccc5f00000000000000000000000 % 00000000000f0000000000003000000000000000000000000000000000000002 % 00000000000000000000000000007f800000000000000c00428485000000000000000000000000 % 0000000000038000000000003000000000000000000000000000000000000001 % 0000000000000000000000000000ff800000000000000c00428485000000000000000000000000 % 000000000001c000000000003000000000000000000000000000000000000000 % 0000000000000000000000000001ffc00000000000000c00428c85900000000000000000000000 % 000000000000e000000000003000000000000000000000000000000000000003 % 0000000000000000000000000003fe000000000000000c00e779cee00000000000000000000000 % 000000000000780000000001fe00000000000000000000000000000000000001 % 0000000000000000000000000003e0000000000000000c00000000000000000000000000000000 % 0000000000001c6000000001fe00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000ee000000000fe00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 00000000000007f000000000fc00000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 00000000000003f800000000fc00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 00000000000007f8000000007c00000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 00000000000007fc000000007800000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 00000000000007fc000000007800000000000000000000000000000000000000 % 000000000000000000000000000000000000000000007f80000000000000000000000000000000 % 00000000000000fe000000003800000000000000000000000000000000000000 % 000000000000000000000000000000000000000000007f80000000000000000000000000000000 % 000000000000003f000000003000000000000000000000000000000000000001 % 000000000000000000003000030000000000000000007f80000000000000000000000000000000 % 0000000000000007000000003000000000000000000000000000000000000000 % 000000000000000000001000010000000000000000003f00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000001000010000000000000000003f00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000001f109e10000000000000000003f00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000003131a110000000000000000001e00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 000000000000000000021108710000000000000000001e00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000021109910000000000000000001e00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000002311a310000000000000000000c00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000001d8eddb8000000000000000000c00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 000000000000000000c000000200000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000004000004200010000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000004000004000010000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000007c71e3cf6eef3ce00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000c4fa1624245091f00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000084807404268391000000000000000000000000000000000 % 000000000000000000080000300000000000000000000000000000000000000000000000000000 % 0000000000000000084819404228c91000000000000000000000000000000000 % 000000000000000000080000100000000000000000000000000000000000000000000000000000 % 000000000000000008cca3624231191900000000000000000000000000000000 % 000000000000000000000000100000000000000000000000000000000000000000000000000000 % 000000000000000007671dbc7710edce00000000000000000000000000000000 % 00000000000000000359bb3711cee0000000000000008000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000488ccb993e2c0000000000000088000200000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000007488890920100000000000000080000200000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000c888909203800000000003c79f9dde79c000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000044888919324c000000000042c4888a123e000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000079ddddf39cee00000000000e8088d07220000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000010000000000000000328088519220000000000000000000000000000 % 0000000000000000000000080306000000000000000000000000000000000000 % 00000000000000000000001000000000000000046c488623232000000000000000000000000000 % 0000000000000000000000080102000000000000000000000000000000000000 % 0000000000000000000000380000000000000003b78fc21db9c000000000000000000000000000 % 0000000000000000000000000102000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000001dde7d9e172383400000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000008a120a119a7c4800000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000d07208710a407400000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000519209910a400c00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000062320a311a644400000000000000000000000000000000 % 000000000000000000000000000000000000000000040181800000000000000000000000000000 % 00000000000000000021df1dd9f7387800000000000000000000000000000000 % 000000000000000000000000000000000000000000040080800000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000080800000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000007779fc78b88e1a00000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000022848484cc9f2400000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000001 % 00000000000000000000000000000000000000341c841c84903a00000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000001 % 000000000000000000000000000000000000001464846484900600000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000001 % 00000000000000000000000000000000000000188c848c8c992200000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000001 % 000000000000000000000000000000000000000877ce76f9ce3c00000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 0000000000000000000000000000000000000000000be084000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000111384000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000211082000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000211082000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 00000000000000000000000000000000000000000021e082000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000210082000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000210082000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000218182000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 0000000000000000000000000000000000000000002383c2000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000200002000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000100004000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000001fe00000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000001fe00000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 000000000000000000000001fe00000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 000000000000000000000000fe00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 000000000000000000000000fc00000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 000000000000000000000000fc00000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000007c00000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000007800000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000007800000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000003800000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000003000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000040000180000000000000000000000000000000001 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000040000080000000000000000000000000000000001 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000000000080000000000000000000000000000000000 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 00000000000000000001b9fcdd87880000000000000000000000000000000002 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 00000000000000000001cc846648480000000000000000000000000000000001 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000084844441c80000000000000000000000000000000000 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000084844446480000000000000000000000000000000002 % 000000000000000000000000000000000000000000007f80000000000000000000000000000000 % 000000000000000000008c844448c80000000000000000000000000000000001 % 000000000000000000000000000000000000000000007f80000000000000000000000000000000 % 00000000000000000000f9ceeee77c0000000000000000000000000000000000 % 000000000000000000000000000000000000000000007f00000000000000000000000000000000 % 0000000000000000000080000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000003f00000000000000000000000000000000 % 0000000000000000000080000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000003f00000000000000000000000000000000 % 00000000000000000001c0000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000003e00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000001e00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000001e00000000000000000000000000000000 % 0000000000000000000010000060000000000000000000000000000000000001 % 000000000000000000000000000000000000000000001c00000000000000000000000000000000 % 0000000000000000000010000020000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 0000000000000000000000000020000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000c00000000000000000000000000000000 % 00000000000000000006b6ec6e239dc000000000000000000000000000000001 % 000000000000000000000000000000000000000000000800000000000000000000000000000000 % 0000000000000000000913327327c58000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000e92222124020000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000192222124070000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000892222326498000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000f3f773e739dc000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000002000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000002000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000007000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000010000060000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000010000020000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000020000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000003 % 00000000000000000000000000000000000000006efb3763c20000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000073411994220000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000021411110e20000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000021411113220000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000023411114620000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000003ee3bbbbb70000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000020000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000020000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000070000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000008000018000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000008000008000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000008000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000001b9bb1b89c77000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000248cc9ccbe16000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000003a888884a008000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000006888884a01c000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000002288888cb226000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000003ddddcf9dc77000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000800000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000800000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000001c00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 57.5 50] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -486 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (force dual) s -468 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasibility) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 30 70] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -202 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(D2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 37.5 57.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -158 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (yes) s savemat setmatrix n 35 65 m 36.734 62.32 l 37.995 63.897 l cl 0 0 0 F n 47.5 55 m 37.364 63.108 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 30 95] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -218 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n 30 90 m 28.991 86.972 l 31.009 86.972 l cl 0 0 0 F n 30 80 m 30 86.972 l gsave 0 0 0 0.176 0 B grestore n 57.5 65 m 56.491 61.972 l 58.509 61.972 l cl 0 0 0 F n 57.5 55 m 57.5 61.972 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 52.5 60] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -122 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (no) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 57.5 70] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -184 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 57.5 95] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n 57.5 90 m 56.491 86.972 l 58.509 86.972 l cl 0 0 0 F n 57.5 80 m 57.5 86.972 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.5 117.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s -524 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(bounding\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 47.5 140] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -218 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n 72.5 137.5 m 71.491 134.47 l 73.509 134.47 l cl 0 0 0 F n 72.5 127.5 m 72.5 134.47 l gsave 0 0 0 0.176 0 B grestore n 50 135 m 52.077 132.58 l 53.116 134.31 l cl 0 0 0 F n 62.5 127.5 m 52.596 133.44 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 52.5 130] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -196 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (new) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 80 132.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -240 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (none) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 72.5 142.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -408 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (loadable) s -492 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables?) s savemat setmatrix n 50 155 m 52.077 152.58 l 53.116 154.31 l cl 0 0 0 F n 62.5 147.5 m 52.596 153.44 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 47.5 160] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 55 150] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -122 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (no) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 72.5 162.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -202 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(D2\)) s savemat setmatrix n 72.5 157.5 m 71.491 154.47 l 73.509 154.47 l cl 0 0 0 F n 72.5 147.5 m 72.5 154.47 l gsave 0 0 0 0.176 0 B grestore n 52.5 177.5 m 54.577 175.08 l 55.616 176.81 l cl 0 0 0 F n 65 170 m 55.096 175.94 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 55 172.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -196 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (new) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 47.5 182.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -218 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 72.5 187.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -184 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1\)) s savemat setmatrix n 72.5 182.5 m 71.491 179.47 l 73.509 179.47 l cl 0 0 0 F n 72.5 172.5 m 72.5 179.47 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 77.5 152.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -158 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (yes) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 80 177.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -240 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (none) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 72.5 212.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n 72.5 207.5 m 71.491 204.47 l 73.509 204.47 l cl 0 0 0 F n 72.5 197.5 m 72.5 204.47 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 100 32.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -218 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 137.5 140] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -586 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (force primal) s -468 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasibility) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 137.5 160] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -184 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P1\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 112.5 160] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s -184 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(P2\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 137.5 115] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -378 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate) s -552 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraints) s -438 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(violated\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 112.5 137.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -218 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n 137.5 135 m 136.49 131.97 l 138.51 131.97 l cl 0 0 0 F n 137.5 125 m 137.5 131.97 l gsave 0 0 0 0.176 0 B grestore n 115 132.5 m 117.08 130.08 l 118.12 131.81 l cl 0 0 0 F n 127.5 125 m 117.6 130.94 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 117.5 127.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -196 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (new) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 145 130] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -240 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (none) s savemat setmatrix n 115 155 m 116.73 152.32 l 117.99 153.9 l cl 0 0 0 F n 127.5 145 m 117.36 153.11 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 137.5 205] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 142.5 150] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -122 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (no) s savemat setmatrix n 137.5 180 m 136.49 176.97 l 138.51 176.97 l cl 0 0 0 F n 137.5 170 m 137.5 176.97 l gsave 0 0 0 0.176 0 B grestore n 137.5 155 m 136.49 151.97 l 138.51 151.97 l cl 0 0 0 F n 137.5 145 m 137.5 151.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 120 147.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -158 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (yes) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 137.5 185] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -492 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (deactivate) s -438 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables) s savemat setmatrix n 127.5 180 m 124.51 178.9 l 125.77 177.32 l cl 0 0 0 F n 115 170 m 125.14 178.11 l gsave 0 0 0 0.176 0 B grestore n 137.5 200 m 136.49 196.97 l 138.51 196.97 l cl 0 0 0 F n 137.5 190 m 137.5 196.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 157.5 32.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -306 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (DONE) s -588 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(other error\)) s savemat setmatrix n 65 45 m 67.437 42.938 l 68.186 44.813 l cl 0 0 0 F n 90 35 m 67.811 43.875 l gsave 0 0 0 0.176 0 B grestore n 72.5 112.5 m 72.403 109.31 l 74.337 109.89 l cl 0 0 0 F n 95 37.5 m 73.37 109.6 l gsave 0 0 0 0.176 0 B grestore n 130 110 m 127.98 107.53 l 129.87 106.81 l cl 0 0 0 F n 102.5 37.5 m 128.93 107.17 l gsave 0 0 0 0.176 0 B grestore n 150 50 m 146.81 50.06 l 147.41 48.133 l cl 0 0 0 F n 110 37.5 m 147.11 49.097 l gsave 0 0 0 0.176 0 B grestore n 145 32.5 m 141.97 33.509 l 141.97 31.491 l cl 0 0 0 F n 110 32.5 m 141.97 32.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 67.5 35] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -426 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (lost dual) s -468 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasibility) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 90 87.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -450 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (excessive) s -280 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (swing) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 115 95] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -366 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (punt or) s -208 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (stall) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 122.5 47.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -438 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (accuracy) s -284 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (check) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 130 27.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -256 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (other) s -240 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 152.5 55] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -160 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (full) s -396 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (system?) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 165 75] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -602 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (activate full ) s -874 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (constraint system) s savemat setmatrix n 165 70 m 161.97 68.991 l 163.18 67.376 l cl 0 0 0 F n 155 62.5 m 162.58 68.183 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 137.5 75] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -306 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (DONE) s -468 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(accuracy) s -314 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (check\)) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 165 95] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -700 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal or dual) s -376 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (simplex) s savemat setmatrix n 165 90 m 163.99 86.972 l 166.01 86.972 l cl 0 0 0 F n 165 80 m 165 86.972 l gsave 0 0 0 0.176 0 B grestore n 137.5 70 m 139.32 67.376 l 140.53 68.991 l cl 0 0 0 F n 147.5 62.5 m 139.92 68.183 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 140 65] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -158 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (yes) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 162.5 65] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -122 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (no) s savemat setmatrix grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore %%EndDocument @endspecial 1217 10129 a FP(Fig)n(ur)q(e)52 b(5:)66 b(Err)q(o)-7 b(r)52 b(Rec)l(ove)l(ry)g(Ac)-5 b(tio)l(ns)52 b(fo)-7 b(r)53 b(Dual)f(Si)s(mpl)n(e)-5 b(x)53 b(Err)q(o)-7 b(r)52 b(Ou)l(tc)l(o)n(me)o(s)3771 11400 y(41)p eop end %%Page: 42 45 TeXDict begin 42 44 bop 0 475 a FL(13)238 b(Dual)81 b(Sim)-7 b(ple)d(x)4 959 y FM(D)8 b(Y)g(L)g(P)58 b FP(will)52 b(c)-7 b(h)n(oos)m(e)53 b(d)-7 b(ual)52 b(s)n(i)s(mpl)n(e)-5 b(x)53 b(wh)l(en)n(eve)l(r)f(th)l(e)g(curr)q(ent)g(bas)n(ic)h(s)n(o)-5 b(l)n(u)l(tio)l(n)51 b(is)i(d)-7 b(ual)52 b(feas)n(ib)l(l)n(e)h(b)-8 b(u)l(t)52 b(n)m(ot)g(pr)s(i)s(mal)0 1158 y(feas)n(ib)l(l)n(e.)144 b(T)8 b(h)l(e)78 b(pr)s(i)s(mary)g(r)q(o)-5 b(l)n(e)80 b(of)e(d)-7 b(ual)78 b(s)n(i)s(mpl)n(e)-5 b(x)79 b(i)s(n)k FM(D)8 b(Y)g(L)g(P)84 b FP(is)79 b(r)q(eo)-5 b(pti)s(m)s(isa)d(tio)l(n) 77 b(fo)-5 b(ll)n(owi)s(n)n(g)77 b(th)l(e)h(a)-6 b(dditio)l(n)77 b(of)0 1357 y(vio)-5 b(la)d(te)l(d)50 b(c)l(o)l(ns)-5 b(trai)s(nts.)64 b(T)8 b(h)l(e)50 b(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n)49 b(r)q(e)l(\003)n(ec)-5 b(ts)51 b(this)f(r)q(o)-5 b(l)n(e)51 b(and)f(doe)o(s)h(n)m(ot)f(pr)q(ovid)-5 b(e)50 b(a)h(d)-7 b(ual)50 b(p)-6 b(has)m(e)50 b(I)h(fo)-7 b(r)0 1556 y(a)n(c)g(hievi)s(n)n(g)46 b(d)-7 b(ual)47 b(feas)n(ibility)-17 b(.)64 b(T)8 b(h)l(e)47 b(d)-7 b(ual)47 b(s)n(i)s(mpl)n(e)-5 b(x)48 b(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n)46 b(i)s(nc)l(o)-7 b(rpo)g(ra)f(te)o(s)48 b(d)-7 b(ual)47 b(s)-5 b(tee)e(pe)o(s)i(t)49 b(e)l(dg)n(e)e(\(DSE\))0 1756 y(pr)s(ic)m(i)s(n)n(g)j(\(\2474.2\),)i(s) -5 b(t)s(andar)q(d)51 b(\(\24713.5\))g(and)h(g)n(en)n(e)l(ralis)m(e)l (d)e(\(\24713.6\))h(pivoti)s(n)n(g,)f(and)i(pe)l(rt)l(urba)-8 b(tio)l(n-bas)m(e)l(d)49 b(\(\2475\))j(and)0 1955 y(alignment-bas)m(e)l (d)f(\(\2476\))i(antid)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)50 b(algo)-7 b(r)s(ithms.)249 2254 y(Beca)f(u)h(s)m(e)53 b(th)l(e)f(d)-7 b(ual)52 b(s)n(i)s(mpl)n(e)-5 b(x)54 b(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n)51 b(doe)o(s)i(n)m(ot)e(pr)q (ovid)-5 b(e)53 b(a)g(p)-6 b(has)m(e)53 b(I,)g(a)g(n)n(umbe)l(r)f(of)h (e)-5 b(xc)f(e)f(ptio)l(nal)0 2453 y(c)l(o)l(nditio)l(ns)51 b(will)g(ca)-8 b(u)h(s)m(e)58 b FM(D)8 b(Y)g(L)g(P)58 b FP(fall)53 b(ba)n(c)-8 b(k)52 b(fr)q(o)n(m)h(d)-7 b(ual)52 b(s)n(i)s(mpl)n(e)-5 b(x)53 b(to)g(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x.)249 2752 y(In)83 b(dy)7 b(nam)s(ic)83 b(s)n(i)s(mpl)n(e)-5 b(x,)91 b(a)-6 b(p)e(par)q(ent)83 b(pr)s(i)s(mal)h(i)s(nfeas)n(ibility) e(can)h(r)q(e)o(s)-8 b(u)l(lt)83 b(beca)-8 b(u)h(s)m(e)84 b(o)l(nly)e(a)h(s)-8 b(u)h(bs)m(e)g(t)83 b(of)h(th)l(e)0 2951 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)42 b(ar)q(e)f(pr)q(e)o(s)m(ent)g (i)s(n)g(th)l(e)f(a)n(c)-5 b(tive)41 b(c)l(o)l(ns)-5 b(trai)s(nt)40 b(sys)-5 b(te)n(m.)61 b(In)41 b(s)n(o)n(me)g(cas)m(e)o (s,)k(th)l(e)40 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(n)n(ee)l(d)-5 b(e)l(d)41 b(to)g(r)q(e)-5 b(gai)s(n)0 3150 y(feas)n(ibility)66 b(cann)m(ot)f(be)i(a)n(c)-5 b(tiv)r(a)d(te)l(d)66 b(i)s(nto)g(th)l(e)g (n)m(o)l(n)m(bas)n(ic)f(partitio)l(n)g(whil)n(e)h(mai)s(nt)s(ai)s(ni)s (n)n(g)f(d)-7 b(ual)66 b(feas)n(ibility)-17 b(.)106 b(In)0 3350 y(th)l(e)54 b(c)l(o)l(nte)-5 b(xt)54 b(of)h(th)l(e)g(d)-7 b(ual)54 b(pr)q(o)-8 b(b)l(l)n(e)n(m,)54 b(th)l(e)h(pr)q(o)-8 b(b)l(l)n(e)n(m)53 b(is)i(un)m(bo)-5 b(und)g(e)l(d)53 b(and)h(any)g(d)-7 b(ual)54 b(c)l(o)l(ns)-5 b(trai)s(nt)54 b(whic)-7 b(h)54 b(wo)-5 b(u)l(ld)0 3549 y(bo)g(und)53 b(it)h(wo)-5 b(u)l(ld)53 b(als)n(o)g(make)i(th)l(e)e(curr)q(ent)h(bas)n (ic)h(s)n(o)-5 b(l)n(u)l(tio)l(n)52 b(d)-7 b(ual)53 b(i)s(nfeas)n(ib)l (l)n(e.)74 b FM(D)8 b(Y)g(L)g(P)60 b FP(i)s(mpl)n(e)n(ments)53 b(a)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)0 3748 y(a)n(c)-5 b(tiv)r(a)d(tio)l(n) 70 b(pr)q(oc)-6 b(e)l(d)f(ur)q(e)71 b(whic)-7 b(h)70 b(can)i(pivot)f(a)h(s)n(i)s(n)n(gl)n(e)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)g (i)s(nto)f(th)l(e)g(bas)n(is)h(as)h(it)e(is)h(a)n(c)-5 b(tiv)r(a)d(te)l(d)71 b(i)s(n)g(o)-7 b(r)q(d)i(e)l(r)0 3947 y(to)61 b(mai)s(nt)s(ai)s(n)g(d)-7 b(ual)60 b(feas)n(ibilty)-17 b(.)91 b(It)61 b(is)h(s)-5 b(till)61 b(pos)-5 b(s)n(ib)l(l)n(e,)63 b(h)n(oweve)l(r)-9 b(,)62 b(to)f(r)q(ea)n(c)-7 b(h)61 b(a)h(bas)n(ic)g(s)n(o)-5 b(l)n(u)l(tio)l(n)59 b(wh)l(e)l(r)q(e)h(m)l (u)l(ltipl)n(e)0 4147 y(pivots)g(ar)q(e)h(r)q(eq)l(uir)q(e)l(d)e(to)i (r)q(e)-5 b(gai)s(n)59 b(d)-7 b(ual)60 b(feas)n(ibility)f(fo)-7 b(r)61 b(any)e(candida)-8 b(te)60 b(v)r(ar)s(i)s(a)l(b)l(l)n(e.)88 b(Wh)l(en)59 b(this)h(occurs,)66 b FM(D)8 b(Y)g(L)g(P)0 4346 y FP(r)q(eve)l(rts)53 b(to)g(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x.)249 4645 y(If)48 b(pr)s(i)s(mal)f(i)s(nfeas)n(ib)l(l)n(e)g(v)r(ar) s(i)s(a)l(b)l(l)n(e)o(s)h(r)q(e)n(mai)s(n)f(b)-8 b(u)l(t)46 b(th)l(ey)g(cann)m(ot)g(be)h(pivote)l(d)g(beca)-8 b(u)h(s)m(e)47 b(th)l(eir)f(pivot)h(c)l(oe)l(\002)-49 b(\002c)m(ients)0 4844 y(do)75 b(n)m(ot)f(sa)-8 b(tisfy)74 b(th)l(e)h(curr)q(ent)f(pivot) h(s)m(e)l(l)n(ec)-5 b(tio)l(n)74 b(to)-5 b(l)n(e)l(ranc)f(e)o(s,)81 b FJ(dy_dual)76 b FP(will)e(p)-5 b(unt)74 b(and)k FM(D)8 b(Y)g(L)g(P)81 b FP(will)74 b(r)q(e)-7 b(t)l(ur)5 b(n)74 b(to)0 5043 y(p)-6 b(has)m(e)64 b(I)h(of)f(th)l(e)f(pr)s(i)s(mal)i(s)n (i)s(mpl)n(e)-5 b(x)65 b(algo)-7 b(r)s(ithm)63 b(i)s(n)h(th)l(e)g(h)n (o)-5 b(pe)63 b(tha)-8 b(t)64 b(a)-6 b(dditio)l(n)63 b(of)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(and/)-12 b(o)-7 b(r)64 b(th)l(e)f(a)-6 b(p)e(pli-)0 5243 y(ca)g(tio)l(n)71 b(of)h(pr)s(i)s(mal)g(pivoti)s(n)n(g)e(ru)l(l)n(e)o(s)j(will)e(all)n (ow)g(pivoti)s(n)n(g)g(to)g(c)l(o)l(nti)s(n)n(u)l(e.)122 b(In)72 b(a)-6 b(dditio)l(n,)76 b(if)c(th)l(e)f(d)-7 b(ual)71 b(s)n(i)s(mpl)n(e)-5 b(x)0 5442 y(te)l(r)5 b(m)s(i)s(na)-8 b(te)o(s)61 b(d)-7 b(u)l(e)59 b(to)i(s)-5 b(t)s(alli)s(n)n(g)60 b(o)-7 b(r)60 b(l)n(os)-5 b(s)61 b(of)g(feas)n(ibility)-17 b(,)66 b FM(D)8 b(Y)g(L)g(P)67 b FP(will)59 b(try)h(th)l(e)g(pr)s(i)s (mal)h(s)n(i)s(mpl)n(e)-5 b(x)61 b(algo)-7 b(r)s(ithm)60 b(be)l(fo)-7 b(r)q(e)0 5641 y(g)t(ivi)s(n)n(g)51 b(u)-6 b(p.)249 5940 y(Fig)n(ur)q(e)53 b(6)f(s)-8 b(h)n(ows)52 b(th)l(e)h(call)g(s)-5 b(tru)g(c)g(t)l(ur)q(e)52 b(of)h(th)l(e)f(d)-7 b(ual)52 b(s)n(i)s(mpl)n(e)-5 b(x)54 b(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n.)1108 8862 y @beginspecial 85 @llx 417 @lly 420 @urx 578 @ury 3350 @rwi @setspecial %%BeginDocument: /devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/dualcalls.eps %!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/dualcalls.epsu %%Creator: IslandDraw for lou %%CreationDate: Wed Sep 14 12:17:35 2005 %%Pages: 1 %%BoundingBox: 85 417 420 578 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 420 202 1 404 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000c00000c0002000008000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000040000040002000008000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000040000040000000000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000007cee03c5f6e6eff718000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000c44406248732448f88000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000060846404048212688808000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000c0842804048212288808000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000c08c2806248232308c88000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000180761003cfc3e711c708000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000180001000000200000008000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000003000071f8000200000028000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000030000c000000700000070000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000c00000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000c00000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000003000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000003000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000006000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000006000000000000000000000000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000c000000000000000000000000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000c000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000018000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000018000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000030000000000000000000000000 % 0000060000600010000030000000 % 0000000000000000000000000000000000000000000000000000300000c0000600006000000000 % 0000020000200010000010000000 % 000000000000000000000000000000000000000000000000000060000040000200002000040000 % 0000020000200000000015800000 % 000000000000000000000000000000000000000000000000000060000040000200002000040000 % 00003e211e26efb1e71dd2000000 % 0000000000000000000000000000000000000000000000000000c00007cee03e213c27884f0000 % 00006263212734131f8594000000 % 0000000000000000000000000000000000000000000000000000c0040c44406263422cd8c4007f % fff042210722141208021e000000 % 0000000000000000000000000000000000000000000000000001800e08464042210e284844007f % fff0422119221412080712000000 % 0000000000000000000000000000000000000000000000000001800c0842804221322848440000 % 00004623232234131c8993000000 % 0000000000000000000000000000000000000000000000000003001808c28046234628c8c40000 % 00003b1d9df3ee39e71dfb800000 % 000000000000000000000000000000000000000000000000000300380761003b1dbb7787670000 % 0000000000020000000000000000 % 000000000000000000000000000000000000000000000000000600700001000000000000000000 % 0000000000020000000000000000 % 0000000000000000000000000000000000000000000000000006006000071f8000000000000000 % 0000000000070000000000000000 % 000000000000000000000000000000000000000000000000000c00c0000c000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000c01c00000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000001801800000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000001803000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000003007000000000000000000000000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000300e000000000000000000000000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000600c000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000006018000000000000000000000000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000c038000000000000000000000000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000c030000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000018060000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000180e0000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000301c0000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000030180000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000060300000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000607000000c0000600006004000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000c0600000040000200002004000200 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000c0c00000040000200002000000200 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000181c000007cee03e213c2dccefe780 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000183800000c44406263422e64473200 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000003030000c08464042210e24246a1200 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000003060001c08428042213224242a1200 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000060e0003808c2804623462464323200 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000060c000700761003b1dbb77ce11e380 % 0000000000000000000000000000 % 000000000000000000018000000000200000000000000000c18001e00001000000000400000000 % 0000000000000000000000000000 % 000000000000000000008000000200200000000000000000c380038000071f8000000400000000 % 0000000000000000000000000000 % 00000000000000000000800000020000000000000000000187000700000c000000000e00000000 % 0000000000000000000000000000 % 0000000000000000000f9dc035c7b7677dcf1fdd8340000186000e000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000001888804be239a22e708866448000030c003c000000000000000000000000 % 0000000000000000000000000000 % 000000000000000003108c80760210a344238844474000031c0070000000000000000000000000 % 000000000000000000000000000f % 0000000000000000071085000e0210a1442c884440c000061800e0000000000000000000000000 % 0000000000000000000000000000 % 000000000000000006118500472211a184718844444000063001c0000000000000000000000000 % 0000000000000000000000000000 % 00000000000000000c0ec20079c39f7087cedceee780000c700780000000000000000000000000 % 0000000000000000000000000000 % 00000000000000001c00020000001000040000000000000ce00e00000000000000000000000000 % 0000180000000000818000000000 % 000000000000000018000e3f000010000400000000000018c01c00000000000000000000000000 % 0000080000000001808000000000 % 000000000000000030001800000038000e00000000000019803800000000000000000000000000 % 000008000000000080ac00000000 % 00000000000000007000000000000000000000000000003380f000000000000000000000000000 % 0000f9dc078f1e78b89000000000 % 00000000000000006000000000000000000000000000003301c000000000000000000000000000 % 030188880858b1c4c4a000000000 % 0000000000000000c0000000000000000000000000000066038000000000000000000000000000 % 070108c801d0208084f000000000 % 0000000000000001c000000000000000000000000000006e070000000000000000000000000000 % 0e01085006502080849000000000 % 0000000000000001800000000000000000000000000000dc1e0000000000000000000000000000 % 1c01185008d8b1c4849800000000 % 0000000000000003000000000000000000000000000000d8380000000000000000000000000000 % 3800ec20076f1e79cfdc00000000 % 0000000000000007000000000000000000000000000001b0700000000000000000000000000000 % 7000002000000000000000000000 % 0000000000000006000000000000000000000000000001f0e00000000000000000000000000000 % e00000e3f0000000000000000000 % 000000000000000c00000000000000000000000000000363c00000000000000000000000000001 % c000018000000000000000000000 % 000000000000001c000000000000000000000000000003c7000000000000000000000000000003 % 8000000000000000000000000000 % 0000000000000018000000000000000000000000000007ce000000000000000000000000000007 % 0000000000000000000000000000 % 00000000000000300000000000000000000000000000079c00000000000000000000000000000e % 0000000000000000000000000000 % 000000000000007000000000000000000000000000000f7800000000000000000000000000001c % 0000000000000000000000000000 % 000000000000006000000000000000000000000000000ee0000000000000000000000000000038 % 0000000000000000000000000000 % 00000000000000c000000000000000000000000000001fc00000000000c0000600000000000070 % 0000180000018180000100000200 % 03000018000181c000000000000000000003000031c01f800000000000400002000000000000e0 % 0000080000008088000100000200 % 010000080000818000000000000000000001000012203f000000000000400002000000000001c0 % 0000080000008088000000000000 % 010000080000830000000000000000000001000012203c000000000007cee03e2138dcdc780380 % 0000f9dc078f8f9e79bb3bfdc600 % 1f3b80f884f087000000000000000000001f109e12207800000000000c444062637c6262840700 % 0001888808589888cdcd1123e200 % 311101898d0887fffffffffffffffffffc3131a110607ffffffffffc08464042214042421c07ff % ff0108c801d0908884851a220200 % 21190108843887fffffffffffffffffffc21108710407ffffffffffc08428042214042426407ff % ff0108500650908884850a220200 % 210a010884c88700000000000000000000211099108070000000000008c28046236442428c0380 % 0001185008d191888c8d0c232200 % 230a01188d1883000000000000000000002311a311107000000000000761003b1db8e7e77601c0 % 0000ec20076ecece78fb8471c200 % 1d8400ec76edc3800000000000000000001d8eddbbe038000000000000010000000000000000e0 % 0000002000000000008000000200 % 00040000000001c000000000000000000000000000003c000000000000071f8000000000000070 % 000000e3f0000000008000000a00 % 001c7e00000000c000000000000000000000000000001c0000000000000c000000000000000038 % 000001800000000001c000001c00 % 00300000000000e000000000000000000000000000001e0000000000000000000000000000001c % 0000000000000000000000000000 % 000000000000007000000000000000000000000000000f0000000000000000000000000000000e % 0000000000000000000000000000 % 000000000000003000000000000000000000000000000f80000000000000000000000000000007 % 0000000000000000000000000000 % 000000000000003800000000000000000000000000000780000000000000000000000000000003 % 8000000000000000000000000000 % 000000000000001c000000000000000000000000000006c0000000000000000000000000000001 % c000000000000000000000000000 % 000000000000000c000000000000000000000000000003e0000000000000000000000000000000 % e00000000000000000000000000f % 000000000000000e00000000000000000000000000000360000000000000000000000000000000 % 7000180000180004000010000000 % 0000000000000007000000000000000000000000000003b0000000000000000000000000000000 % 3800080000080004000010000000 % 0000000000000003000000000000000000000000000001b8000000000000000000000000000000 % 1c00080000080000000000000000 % 00000000000000038000000000000000000000000000019c000000000000000000000000000000 % 0e00f9dc078bedcddfee3000000f % 0000000000000001c00000000000000000000000000000cc000000000000000000000000000000 % 070188880c490e64891f10000000 % 0000000000000000c00000000000000000000000000000c6000000000000000000000000000000 % 030108c808090424d11010000000 % 0000000000000000e0000000000000000000000000000067000000000000000000000000000000 % 0001085008090424511010000000 % 000000000000000070000000000000000000000000000063000000000000000000000000000000 % 000118500c490464611910000000 % 000000000000000030000000000000000000000000000031800000000000000000000000000000 % 0000ec20079f87ce238e10000000 % 000000000000000038000000000000000000000000000031c00000000000000000000000000000 % 0000002000000400000010000000 % 00000000000000001c030000000600030100000000000018e00000000000000000000000000000 % 000000e3f0000400000050000000 % 00000000000000000c010000000200010100000000000018600000000000000000000000000000 % 0000018000000e000000e000000e % 00000000000000000e01000000020001000000000000001c300000000000000000000000000000 % 0000000000000000000000000003 % 0000000000000000071f3b80f1e23cf1730000000000000c380000000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000033111018a126399990000000000000c180000000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000002119010072410909000000000000060c0000000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000210a010192410909000000000000060e0000000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000230a018a3263191900000000000003070000000000000000000000000000 % 0000000000000000000000000000 % 0000000000000000001d8400f1df3cf1f100000000000003030000000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000400000000000100000000000001818000000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000001c7e00000000050000000000000181c000000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000003000000000000e00000000000000c0c000000000000000000000000000 % 000000000000000000000000000f % 000000000000000000000000000000000000000000000000c06000000000000000000000000000 % 0000000000000000000000000003 % 000000000000000000000000000000000000000000000000e07000000000000000000000000000 % 000000000000000000000000000f % 000000000000000000000000000000000000000000000000603800000000000000000000000000 % 000000000000000000000000000f % 000000000000000000000000000000000000000000000000601800000000000000000000000000 % 000000000000000000000000000f % 000000000000000000000000000000000000000000000000300c00000000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000300e00000000000000000000000000 % 0000000060000000000206000000 % 000000000000000000000000000000000000000000000000180600000000000000000000000000 % 0000000020000000000602000000 % 000000000000000000000000000000000000000000000000180300000000000000000000000000 % 0000000020000000000202b00000 % 0000000000000000000000000000000000000000000000000c0380000000000000000000000000 % 00000003e7701e3c79e2e2400000 % 0000000000000000000000000000000000000000000000000c01c0000000000000000000000000 % 0000080622202162c71312800000 % 0000000000000000000000000000000000000000000000000600c0000000000000000000000000 % 00001c0423200740820213c0000f % 000000000000000000000000000000000000000000000000060060000000000000000000000000 % 000038042140194082021240000f % 000000000000000000000000000000000000000000000000070070000000000000000000000000 % 0000700461402362c71212600001 % 000000000000000000000000000000000000000000000000030030000000000000000000000000 % 0000e003b0801dbc79e73f700000 % 000000000000000000000000000000000000000000000000030018000000000000000000000000 % 0001c00000800000000000000000 % 00000000000000000000000000000000000000000000000001801c000000000000000000000000 % 00038000038fc000000000000000 % 00000000000000000000000000000000000000000000000001800e000000000000000000000000 % 0007000006000000000000000000 % 00000000000000000000000000000000000000000000000000c006000000000000000000000000 % 000e000000000000000000000000 % 00000000000000000000000000000000000000000000000000c003000000000000000000000000 % 001c000000000000000000000000 % 000000000000000000000000000000000000000000000000006003800000000000000000000000 % 0038000000000000000000000000 % 000000000000000000000000000000000000000000000000006001800000000000000000000000 % 0070000000000000000000000000 % 000000000000000000000000000000000000000000000000003000c00000000000000000000000 % 00e0000000000000000000000000 % 000000000000000000000000000000000000000000000000003000e00000000000040000310000 % 01c00000c0000c00000000000000 % 000000000000000000000000000000000000000000000000003800700000000000840000111000 % 0380000040000400000000000400 % 000000000000000000000000000000000000000000000000001800300000000000800000101000 % 07000000400004000c0000000400 % 000000000000000000000000000000000000000000000000001800180dcf9c79b9edbb0f133ddc % 0e000007ddc07c70738dc7884f00 % 000000000000000000000000000000000000000000000000000c001c0e643ecdcc84cc90911088 % 1c00000c4880c4f88fc62cd8c400 % 000000000000000000000000000000000000000000000000000c000c04242084848488839110c8 % 3ffff8084c8084808c0428484400 % 00000000000000000000000000000000000000000000000000060006042420848484888c911050 % 1ffff80845008480740428484400 % 000000000000000000000000000000000000000000000000000600000464328c8c848891911050 % 0c000008c5008cc8864428c8c400 % 0000000000000000000000000000000000000000000000000003000007ce1c78f8efddcefb9c20 % 0600000762007670fb8e77876700 % 000000000000000000000000000000000000000000000000000300000400000080000000000020 % 03000000020000008c0000000000 % 0000000000000000000000000000000000000000000000000001800004000000800000000000e0 % 018000000e3f00018c0000000000 % 000000000000000000000000000000000000000000000000000180000e000001c0000000000180 % 00c0000018000000f00000000000 % 0000000000000000000000000000000000000000000000000001c0000000000000000000000000 % 0060000000000000000000000000 % 0000000000000000000000000000000000000000000000000000c0000000000000000000000000 % 0030000000000000000000000000 % 0000000000000000000000000000000000000000000000000000c0000000000000000000000000 % 0018000000000000000000000000 % 000000000000000000000000000000000000000000000000000060000000000000000000000000 % 000c000000000000000000000000 % 000000000000000000000000000000000000000000000000000060000000000000000000000000 % 0006000000000000000000000000 % 000000000000000000000000000000000000000000000000000030000000000000000000000000 % 0003000000000000000000000000 % 000000000000000000000000000000000000000000000000000030000000000000000000000000 % 00018000600000c0002000004000 % 000000000000000000000000000000000000000000000000000018000000000000000000000000 % 0000c00020000040002000004000 % 000000000000000000000000000000000000000000000000000018000000000000000000000000 % 0000600020000040000000000000 % 00000000000000000000000000000000000000000000000000000c000000000000000000000000 % 00003003e7701e4fb7677fb8c000 % 00000000000000000000000000000000000000000000000000000c000000000000000000000000 % 000018062220314439a2247c4000 % 00000000000000000000000000000000000000000000000000000e000000000000000000000000 % 00000c042320204410a344404000 % 000000000000000000000000000000000000000000000000000006000000000000000000000000 % 000000042140204410a144404000 % 000000000000000000000000000000000000000000000000000006000000000000000000000000 % 000000046140314411a184644000 % 000000000000000000000000000000000000000000000000000003000000000000000000000000 % 00000003b0801eee1f708e384000 % 000000000000000000000000000000000000000000000000000003000000000000000000000000 % 0000000000800000100000004000 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 00000000038fc000100000014000 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 0000000006000000380000038000 % 000000000000000000000000000000000000000000000000000000c00000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000c00000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000700000000000000000000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000300000000000000000000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000003000c0000000000800000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000180040000001000800000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000180040000001000000000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000c07cee01a73db9bbee3cfee % c1a0000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000c0c444024f91cc917342433 % 2240000000000000000000000000 % 000000000000000000000000000000000000000000000000000000060846403a810849a210e422 % 23a0000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000008428006810848a2132422 % 2060000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000008c28022c908c8c2346422 % 2220000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000761003c71cf9c43e3be77 % 73c0000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000001000000080002000000 % 0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000071f8000080002000000 % 0000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000c0000001c0007000000 % 0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 37.5 103.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -384 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dual) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 60 111.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -506 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_calcobj) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 64.7178 96.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -762 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_setpivparms) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 74.0122 103.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -280 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual2) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.489 93.56] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dualpivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.489 131.06] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_setpivparms) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.489 78.56] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_clrpivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 113.468 103.56] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1076 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_duenna) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 122.48 98.56] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 122.48 103.56] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_addtopivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 122.48 108.56] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_clrpivrej) s savemat setmatrix n 119.98 97.359 m 114.98 102.36 l gsave 0 0 0 0.176 0 B grestore n 114.98 102.36 m 119.98 107.36 l gsave 0 0 0 0.176 0 B grestore n 114.98 102.36 m 119.98 102.36 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 113.75 86.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1092 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dualout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 123.045 86.06] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualpricexk) s savemat setmatrix n 116.11 85 m 121.11 85 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 117.349 121.06] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1296 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (preoptimality) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 125.873 121.06] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_degenout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 126.361 116.06] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 126.361 126.06] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_clrpivrej) s savemat setmatrix n 123.86 114.86 m 118.86 119.86 l gsave 0 0 0 0.176 0 B grestore n 118.86 119.86 m 123.86 124.86 l gsave 0 0 0 0.176 0 B grestore n 118.86 119.86 m 123.86 119.86 l gsave 0 0 0 0.176 0 B grestore n 80 102.5 m 92.5 77.5 l gsave 0 0 0 0.176 0 B grestore n 92.5 85 m 80 102.5 l gsave 0 0 0 0.176 0 B grestore n 80 102.5 m 92.5 92.5 l gsave 0 0 0 0.176 0 B grestore n 80 102.5 m 92.5 102.5 l gsave 0 0 0 0.176 0 B grestore n 80 102.5 m 92.5 120 l gsave 0 0 0 0.176 0 B grestore n 80 102.5 m 92.5 130 l gsave 0 0 0 0.176 0 B grestore n 50 95 m 45 102.5 l gsave 0 0 0 0.176 0 B grestore n 45 102.5 m 67.5 102.5 l gsave 0 0 0 0.176 0 B grestore n 45 102.5 m 50 110 l gsave 0 0 0 0.176 0 B grestore grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore %%EndDocument @endspecial 2365 9228 a(Fig)n(ur)q(e)52 b(6:)66 b(Call)52 b(Gra)-6 b(p)g(h)52 b(fo)-7 b(r)53 b(Dual)g(Si)s(mpl)n(e)-5 b(x)3771 11400 y(42)p eop end %%Page: 43 46 TeXDict begin 43 45 bop 0 466 a Fu(13.1)197 b(Dual)66 b(T)-5 b(o)g(p)66 b(Leve)-5 b(l)0 885 y FP(Dual)74 b(s)n(i)s(mpl)n(e)-5 b(x)75 b(is)f(e)-5 b(xecu)l(te)l(d)74 b(wh)l(en)f(th)l(e)g(dy)7 b(nam)s(ic)73 b(s)n(i)s(mpl)n(e)-5 b(x)75 b(s)-5 b(t)s(a)d(te)75 b(ma)n(c)-7 b(hi)s(n)n(e)74 b(ente)l(rs)g(s)-5 b(t)s(a)d(te)74 b FJ(dyDU)-6 b(AL)p FP(.)75 b(If)g(r)q(e-)0 1084 y(q)l(uir)q(e)l(d,)59 b(DSE)e(pr)s(ic)m(i)s(n)n(g)g(is)i(i)s(niti)s(alis)m(e)l(d)e(by)h (calcu)l(la)-8 b(ti)s(n)n(g)57 b(th)l(e)h(sq)l(uar)q(e)h(of)f(th)l(e)g (n)m(o)-7 b(r)5 b(ms)58 b(of)g(th)l(e)g(r)q(ows)g(of)h(th)l(e)f(bas)n (is)0 1284 y(i)s(nve)l(rs)m(e)j(\()p FG(vid)p FP(.)f(\2474.2\))h(and)f (th)l(e)h(d)-7 b(ual)60 b(s)n(i)s(mpl)n(e)-5 b(x)61 b(r)q(o)-5 b(u)l(ti)s(n)n(e)61 b FJ(dy_dual)g FP(is)g(call)n(e)l(d.)90 b FJ(dy_dual)61 b FP(is)g(a)g(tr)s(ivi)s(al)h(s)-8 b(h)l(e)l(ll)59 b(whic)-7 b(h)0 1483 y(calcu)l(la)f(te)o(s)42 b(th)l(e)g(o)-8 b(bj)l(ec)j(tive)41 b(\()p FJ(dy_calcobj)p FP(\))h(and)f(calls)h(th)l (e)g(d)-7 b(ual)41 b(p)-6 b(has)m(e)42 b(II)h(r)q(o)-5 b(u)l(ti)s(n)n(e)41 b FJ(dual2)h FP(to)g(do)g(th)l(e)f(o)-5 b(pti)s(m)s(isa)d(tio)l(n.)0 2076 y Fu(13.2)197 b(Dual)66 b(Phas)-5 b(e)65 b(II)0 2495 y FP(T)8 b(h)l(e)62 b(ove)l(rall)h(\003)n (ow)f(of)g(p)-6 b(has)m(e)63 b(II)g(of)g(th)l(e)f(d)-7 b(ual)62 b(algo)-7 b(r)s(ithm)61 b(is)i(s)-8 b(h)n(own)61 b(i)s(n)i(Fig)n(ur)q(e)f(7.)95 b(T)8 b(h)l(e)62 b(body)g(of)g(th)l(e)h (r)q(o)-5 b(u)l(ti)s(n)n(e)0 2694 y(is)53 b(s)-5 b(tru)g(c)g(t)l(ur)q (e)l(d)52 b(as)h(two)f(n)n(e)o(s)-5 b(te)l(d)52 b(l)n(oo)-5 b(ps.)66 b(T)8 b(h)l(e)52 b(o)-5 b(u)l(te)l(r)52 b(l)n(oo)-5 b(p)52 b(handl)n(e)o(s)h(s)-5 b(t)s(art)l(u)f(p)52 b(and)g(te)l(r)5 b(m)s(i)s(na)-8 b(tio)l(n,)52 b(and)g(th)l(e)g(i)s(nn)n(e)l(r)0 2893 y(l)n(oo)-5 b(p)53 b(handl)n(e)o(s)f(th)l(e)g(majo)-7 b(r)s(ity)53 b(of)g(r)q(o)-5 b(u)l(ti)s(n)n(e)52 b(pivots.)249 3192 y(On)h(entry)g(to)h FJ(dual2)p FP(,)g(th)l(e)f(o)-5 b(u)l(te)l(r)54 b(l)n(oo)-5 b(p)53 b(is)h(ente)l(r)q(e)l(d)f(and)h FJ(dy_dualout)f FP(is)h(call)n(e)l(d)h(to)e(s)m(e)l(l)n(ec)-5 b(t)55 b(th)l(e)e(i)s(niti)s(al)g(l)n(ea)-7 b(vi)s(n)n(g)0 3392 y(v)r(ar)s(i)s(a)l(b)l(l)n(e.)62 b(T)8 b(h)l(en)41 b(th)l(e)g(i)s(nn)n(e)l(r)g(l)n(oo)-5 b(p)41 b(is)h(ente)l(r)q(e)l(d)e (and)h FJ(dy_dualpiv)l(ot)g FP(is)h(call)n(e)l(d)g(to)f(pe)l(r)5 b(fo)-7 b(r)5 b(m)42 b(th)l(e)f(pivot.)61 b FJ(dy_dualpiv)l(ot)0 3591 y FP(\()p FG(vid)p FP(.)d(\24713.3\))g(will)g(calcu)l(la)-8 b(te)58 b(th)l(e)g(c)l(oe)l(\002)-49 b(\002c)m(ients)58 b(of)g(th)l(e)g(pivot)g(r)q(ow)g(\()p FJ(dualpivr)m(o)m(w)p FP(\),)i(s)m(e)l(l)n(ec)-5 b(t)59 b(an)f(ente)l(r)s(i)s(n)n(g)f(v)r(ar) s(i)s(a)l(b)l(l)n(e)0 3790 y(\()p FJ(dualin)p FP(\),)i(pivot)f(th)l(e)g (bas)n(is)g(\()p FJ(dy_piv)l(ot)p FP(\),)g(u)-6 b(pda)e(te)58 b(th)l(e)f(pr)s(i)s(mal)h(and)g(d)-7 b(ual)57 b(v)r(ar)s(i)s(a)l(b)l(l) n(e)o(s)i(\()p FJ(dualupdate)p FP(\),)g(and)f(u)-6 b(pda)e(te)0 3989 y(th)l(e)41 b(DSE)f(pr)s(ic)m(i)s(n)n(g)g(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)39 b(and)i(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)41 b(c)l(os)-5 b(ts)41 b(\()p FJ(dseupdate)p FP(\).)62 b(Fo)-7 b(r)42 b(a)f(r)q(o)-5 b(u)l(ti)s(n)n(e)41 b(pivot,)i FJ(dseupdate)f FP(will)f(als)n(o)0 4189 y(s)m(e)l(l)n(ec)-5 b(t)53 b(a)g(l)n(ea)-7 b(vi)s(n)n(g)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h (fo)-7 b(r)53 b(th)l(e)f(n)n(e)-5 b(xt)53 b(pivot.)65 b FJ(dy_duenna)53 b FP(ev)r(al)n(ua)-8 b(te)o(s)54 b(th)l(e)e(o)-5 b(u)l(tc)l(o)n(me)52 b(of)h(th)l(e)f(pivot,)h(handl)n(e)o(s)0 4388 y(e)l(rr)q(o)-7 b(r)65 b(d)-5 b(e)e(tec)i(tio)l(n)64 b(and)h(r)q(ec)l(ove)l(ry)f(wh)l(e)l(r)q(e)g(pos)-5 b(s)n(ib)l(l)n(e,) 67 b(and)e(pe)l(r)5 b(fo)-7 b(r)5 b(ms)65 b(th)l(e)f(r)q(o)-5 b(u)l(ti)s(n)n(e)64 b(mai)s(ntenanc)-6 b(e)64 b(a)n(c)-5 b(tivitie)o(s)65 b(of)0 4587 y(a)n(ccura)n(cy)55 b(c)-7 b(h)l(ec)f(ks)57 b(and)e(r)q(e)l(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)56 b(of)g(th)l(e)g(bas)n(is.)76 b(If)57 b(th)l(e)l(r)q(e)e(ar)q(e)i(n)m(o) e(pr)q(o)-8 b(b)l(l)n(e)n(ms,)57 b(th)l(e)f(pivoti)s(n)n(g)e(l)n(oo)-5 b(p)56 b(ite)l(ra)-8 b(te)o(s,)0 4786 y(u)h(s)n(i)s(n)n(g)61 b(th)l(e)h(l)n(ea)-7 b(vi)s(n)n(g)60 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(s)m (e)l(l)n(ec)-5 b(te)l(d)63 b(i)s(n)e FJ(dseupdate)p FP(.)93 b(T)8 b(h)l(e)62 b(l)n(oo)-5 b(p)61 b(c)l(o)l(nti)s(n)n(u)l(e)o(s)g (until)g(o)-5 b(pti)s(mality)61 b(is)h(r)q(ea)n(c)-7 b(h)l(e)l(d,)0 4986 y(th)l(e)51 b(pr)q(o)-8 b(b)l(l)n(e)n(m)51 b(is)h(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)l(d)52 b(to)g(be)g(pr)s(i)s (mal)g(i)s(nfeas)n(ib)l(l)n(e)g(\(d)-7 b(ual)51 b(un)m(bo)-5 b(und)g(e)l(d\),)49 b(o)-7 b(r)52 b(an)f(e)-5 b(xc)f(e)f(ptio)l(n)52 b(o)-7 b(r)52 b(fa)-8 b(t)s(al)52 b(e)l(rr)q(o)-7 b(r)0 5185 y(occurs.)249 5484 y(On)n(e)80 b(c)l(o)n(mmo)l(n)f(r)q(eas)n(o)l (n)h(fo)-7 b(r)80 b(a)g(fail)n(ur)q(e)g(to)g(s)m(e)l(l)n(ec)-5 b(t)81 b(a)f(l)n(ea)-7 b(vi)s(n)n(g)79 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i (fo)-7 b(r)80 b(th)l(e)f(n)n(e)-5 b(xt)80 b(pivot)g(is)g(tha)-8 b(t)80 b(th)l(e)0 5683 y(curr)q(ent)68 b(pivot)g(was)g(a)l(bo)-7 b(rte)l(d)68 b(d)-7 b(u)l(e)68 b(to)g(n)n(ume)l(r)s(ical)g(pr)q(o)-8 b(b)l(l)n(e)n(ms)67 b(\(an)h(uns)-8 b(uit)s(a)l(b)l(l)n(e)67 b(pivot)h(c)l(oe)l(\002)-49 b(\002c)m(ient)68 b(bei)s(n)n(g)f(th)l(e)0 5882 y(mos)-5 b(t)63 b(c)l(o)n(mmo)l(n)f(of)g(th)l(e)o(s)m(e\).)95 b(In)62 b(this)h(cas)m(e,)i FJ(dseupdate)f FP(n)n(eve)l(r)e(e)-5 b(xecu)l(te)o(s.)96 b(Onc)-6 b(e)63 b FJ(dy_duenna)g FP(has)g(t)s(aken)g(th)l(e)0 6081 y(n)n(ec)-6 b(e)o(s)h(sary)67 b(c)l(o)-7 b(rr)q(ec)i(tive)67 b(a)n(c)-5 b(tio)l(n,)68 b(th)l(e)e(\003)n(ow)f(of)h(c)l(o)l(ntr)q(o)-5 b(l)65 b(e)o(sca)-6 b(pe)o(s)68 b(to)e(th)l(e)g(o)-5 b(u)l(te)l(r)65 b(l)n(oo)-5 b(p)66 b(and)g(calls)g FJ(dy_dualout)g FP(to)0 6281 y(s)m(e)l(l)n(ec)-5 b(t)53 b(a)g(n)n(ew)g(l)n(ea)-7 b(vi)s(n)n(g)51 b(v)r(ar)s(i)s(a)l(b)l(l)n(e.)249 6580 y(An)m(oth)l(e)l(r)45 b(c)l(o)n(mmo)l(n)i(r)q(eas)n(o)l(n)f(fo)-7 b(r)47 b(fail)n(ur)q(e)h(to)f(s)m(e)l(l)n(ec)-5 b(t)47 b(a)h(l)n(ea)-7 b(vi)s(n)n(g)46 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(is)h (tha)-8 b(t)46 b(all)h(candida)-8 b(te)o(s)47 b(we)l(r)q(e)g(pr)q(evi-) 0 6779 y(o)-5 b(u)e(sly)40 b(\003agg)n(e)l(d)e(as)j(uns)-8 b(uit)s(a)l(b)l(l)n(e)39 b(pivots.)61 b(In)40 b(this)g(cas)m(e,)j FJ(dy_dualout)d FP(will)f(i)s(ndica)-8 b(te)40 b(a)g(`p)-5 b(unt')38 b(and)i FJ(dy_dealW)q(ithPunt)0 6978 y FP(will)63 b(be)i(call)n(e)l(d)g(to)f(r)q(eev)r(al)n(ua)-8 b(te)65 b(th)l(e)f(\003agg)n(e)l(d)e(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)102 b(If)64 b(it)h(is)f(a)l(b)l(l)n(e)h(to)f(make)h(n)n(ew)f(candida)-8 b(te)o(s)64 b(a)-7 b(v)r(aila)l(b)l(l)n(e,)0 7177 y(c)l(o)l(ntr)q(o)i (l)52 b(r)q(e)-7 b(t)l(ur)5 b(ns)53 b(to)g FJ(dy_dualout)f FP(fo)-7 b(r)54 b(an)m(oth)l(e)l(r)d(a)-8 b(tte)n(mpt)52 b(to)h(\002)s(nd)g(a)g(l)n(ea)-7 b(vi)s(n)n(g)52 b(v)r(ar)s(i)s(a)l(b)l (l)n(e.)67 b(If)53 b(all)g(\003agg)n(e)l(d)e(v)r(ar)s(i)s(a)l(b)l(l)n (e)o(s)0 7377 y(r)q(e)n(mai)s(n)64 b(uns)-8 b(uit)s(a)l(b)l(l)n(e,)67 b(c)l(o)l(ntr)q(o)-5 b(l)63 b(\003)n(ow)i(move)o(s)g(to)g(th)l(e)f(pr)q (eo)-5 b(pti)s(mality)63 b(a)n(c)-5 b(tio)l(ns)64 b(with)g(an)g(i)s (ndica)-8 b(tio)l(n)63 b(tha)-8 b(t)64 b(d)-7 b(ual)0 7576 y(s)n(i)s(mpl)n(e)i(x)53 b(has)g(p)-5 b(unte)l(d.)249 7875 y(Wh)l(en)72 b FJ(dy_dualout)h FP(i)s(ndica)-8 b(te)o(s)72 b(o)-5 b(pti)s(mality)72 b(\(pr)s(i)s(mal)h(feas)n(ibility\))f(o)-7 b(r)72 b FJ(dy_dualpiv)l(ot)g FP(i)s(ndica)-8 b(te)o(s)73 b(o)-5 b(pti)s(mality)-17 b(,)0 8074 y(d)-7 b(ual)80 b(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s)79 b(\(pr)s(i)s(mal)h(i)s (nfeas)n(ibility\),)87 b(o)-7 b(r)81 b(l)n(os)-5 b(s)81 b(of)g(d)-7 b(ual)80 b(feas)n(ibility)-17 b(,)87 b(th)l(e)81 b(i)s(nn)n(e)l(r)f(l)n(oo)-5 b(p)80 b(ends)h(and)0 8273 y FJ(pr)o(eoptim)m(ality)76 b FP(is)g(call)n(e)l(d)g(fo)-7 b(r)76 b(c)l(o)l(n\002r)5 b(ma)-8 b(tio)l(n.)133 b FJ(pr)o(eoptim)m (ality)76 b FP(will)f(r)q(e)l(fa)n(c)-5 b(to)e(r)76 b(th)l(e)f(bas)n (is,)83 b(c)-7 b(h)l(ec)f(k)75 b(fo)-7 b(r)77 b(a)n(ccura)n(cy)-17 b(,)0 8472 y(r)q(ec)l(o)n(mp)-5 b(u)l(te)54 b(th)l(e)f(pr)s(i)s(mal)i (and)e(d)-7 b(ual)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)i(and)f(c)l(o)l (n\002r)5 b(m)53 b(d)-7 b(ual)53 b(and)g(pr)s(i)s(mal)h(feas)n(ibility) g(s)-5 b(t)s(a)d(t)l(u)h(s.)69 b(If)55 b(th)l(e)l(r)q(e)0 8672 y(ar)q(e)g(n)m(o)e(s)-8 b(urpr)s(is)m(e)o(s,)54 b(d)-7 b(ual)54 b(p)-6 b(has)m(e)54 b(II)h(te)l(r)5 b(m)s(i)s(na)-8 b(te)o(s)54 b(with)f(an)h(i)s(ndica)-8 b(tio)l(n)53 b(of)h(o)-5 b(pti)s(mality)-17 b(,)54 b(d)-7 b(ual)53 b(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s,)0 8871 y(o)e(r)53 b(l)n(os)-5 b(s)53 b(of)g(d)-7 b(ual)52 b(feas)n(ibility)-17 b(.)249 9170 y(L)5 b(os)-5 b(s)55 b(of)g(d)-7 b(ual)53 b(feas)n(ibility)h(s)-5 b(te)n(ms)55 b(fr)q(o)n(m)f(l)n(os)-5 b(s)55 b(of)g(n)n(ume)l(r)s(ic)f (a)n(ccura)n(cy)-17 b(,)54 b(b)-8 b(u)l(t)54 b(it)g(cann)m(ot)g(be)g(c) l(o)-7 b(rr)q(ec)i(te)l(d)55 b(withi)s(n)0 9369 y(d)-7 b(ual)61 b(p)-6 b(has)m(e)61 b(II.)h(T)8 b(h)l(e)61 b(e)l(rr)q(o)-7 b(r)62 b(r)q(ec)l(ove)l(ry)f(a)n(c)-5 b(tio)l(ns)60 b(t)s(aken)i(by)e (th)l(e)h(dy)7 b(nam)s(ic)61 b(s)n(i)s(mpl)n(e)-5 b(x)62 b(algo)-7 b(r)s(ithm)60 b(ar)q(e)i(d)-5 b(e)o(sc)d(r)s(ibe)l(d)0 9568 y(i)s(n)53 b(\24712.2.)249 9867 y(L)5 b(os)-5 b(s)59 b(of)e(pr)s(i)s(mal)h(feas)n(ibility)f(can)h(occur)f(fo)-7 b(r)58 b(two)f(dis)-5 b(ti)s(nc)g(t)57 b(r)q(eas)n(o)l(ns.)79 b(In)58 b(th)l(e)f(l)n(e)o(s)-5 b(s)59 b(c)l(o)n(mmo)l(n)e(cas)m(e,)i (l)n(os)-5 b(s)58 b(of)0 10066 y(pr)s(i)s(mal)46 b(feas)n(ibility)f(s) -5 b(te)n(ms)45 b(fr)q(o)n(m)h(l)n(os)-5 b(s)46 b(of)g(n)n(ume)l(r)s (ic)f(a)n(ccura)n(cy)-17 b(.)63 b(T)8 b(h)l(e)45 b(pivot)h(s)m(e)l(l)n (ec)-5 b(tio)l(n)45 b(ru)l(l)n(e)o(s)h(ar)q(e)g(tighten)n(e)l(d)e(and)0 10266 y(d)-7 b(ual)56 b(s)n(i)s(mpl)n(e)-5 b(x)57 b(ite)l(ra)-8 b(tio)l(ns)55 b(ar)q(e)i(r)q(e)o(s)-8 b(ume)l(d.)77 b(Wh)l(en)56 b(th)l(e)g(n)n(umbe)l(r)g(of)h(fals)m(e)f(i)s(ndica)-8 b(tio)l(ns)55 b(of)i(o)-5 b(pti)s(mality)55 b(e)-5 b(xc)f(ee)l(ds)0 10465 y(a)53 b(har)q(d-c)l(od)-5 b(e)l(d)52 b(li)s(m)s(it)h(\(curr)q (ently)e(15\),)i(d)-7 b(ual)52 b(s)n(i)s(mpl)n(e)-5 b(x)53 b(te)l(r)5 b(m)s(i)s(na)-8 b(te)o(s)53 b(with)e(a)j(fa)-8 b(t)s(al)53 b(e)l(rr)q(o)-7 b(r)d(.)3771 11400 y(43)p eop end %%Page: 44 47 TeXDict begin 44 46 bop 383 9547 a currentpoint currentpoint translate .9 .9 scale neg exch neg exch translate 383 9547 a @beginspecial 42 @llx 124 @lly 511 @urx 715 @ury 4690 @rwi @setspecial %%BeginDocument: /devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/dual2flow.eps %!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/dual2flow.epsu %%Creator: IslandDraw for lou %%CreationDate: Wed Sep 14 10:39:51 2005 %%Pages: 1 %%BoundingBox: 42 124 511 715 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 588 740 1 1480 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000e03 % 00c000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000fc3 % 07c000000000000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000ffb % 3fc000000000000000000000000000000000000000000000000000000000000000000e % 000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00d % 000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00e % 000000000004000000000000000000000000000000000000000000000000000000000000000ffb % 3fc000000000000000000000000000000000000000000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000000000000000000000fc3 % 07c000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000e03 % 00c000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000000000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000000000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % e00000000000000000000000000000000000000000000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % c00000000000000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 800000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000860000600 % 006000002000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000001020000200 % 002000042000000000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000002020000200 % 002000041000000000200000000000000000000000000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000180000000023eee03e21 % 1e23c42f1000000000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000002624406263 % 21266c641000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000002426404221 % 072424241000000000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000002422804221 % 192424241000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000002462804623 % 232464641000000000200000000000000000000000000000000000000000000000c002 % 0000000000040000000000000000000000000000000000000000000000180000000023b1003b1d % 9df3c3b71000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000002001000000 % 000000001000000000200000000000000000000000000000000000000000000000c002 % 0000000000040000000000000000000000000000000000000000000000180000000010071f8000 % 000000002000000000200000000000000000000000000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000001800000000000c000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000060000030000010 % 000000000401818000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000020001010000010 % 000000000400808000200000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000020001010000000 % 001800000000808000200000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018035c238f3c11c3cef3 % 70e07779fc78b88e00200000000000000000000000000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000001804be27d89013e42451 % 891022848484cc9f00200000000000000000000000000000000000000000000000c000 % 00000000000436000000000000000000000000000000000000000000001807602410101200e691 % 0910341c841c849000200000000000000000000000000000000000000000000000c002 % 00000000000412000000007ffffffffffffffffffffffffffffc0000001800e024101012032291 % 08e014648464849000200000000000000000000000000000000000000000000000c000 % 00000000000414000000007ffffffffffffffffffffffffffffc00000018047226589013246311 % 0900188c848c8c9900200000000000000000000000000000000000000000000000c002 % 0000000000040c0000000060000000000000000000000000000c00000018079c738f1c39c3b13b % 9df00877ce76f9ce00200000000000000000000000000000000000000000000000c000 % 000000000004080000000060000000000000000000000000000c00000018000000000000000000 % 011800000000000000200000000000000000000000000000000000000000000000c002 % 000000000004080000000060000000000000000000000000000c00000018000000000000000000 % 031800000000000000200000000000000000000000000000000000000000000000c000 % 000000000004300000000060000000000000000000000000000c00000018000000000000000000 % 01e000000000000000200000000000000000000000000000000000000000000000c00a % 000000000004000000000060000000000000000000000000000c00000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000004000000000062180000c00067b9e0201f0000008c00000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c00a % 00000000000400000000006408000040002331a260088000108c00000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c00a % 00003fffffffffffff800068080000400023108220088000104c0000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000000c00a % 00007fffffffffffffc00068f9dc07ce1e211967ae08a1373c4c0000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000000c000 % 0000e0000000000000c0006988880c5f2121a922310f6318904c00000000000000000038000000 % 000000300000000000000000000000000000000000000000000000000000000000c00a % 0000c000000000000060006908c808500721ad2221082110904c00000000000000000070000000 % 000000380000000000000000000000000000000000000000000000000000000000c00a % 000180000000000000700069085008501920ae2221082110904c00000000000000000060600000 % 2000001c0000000000000000000000000000000000000000000000000000000000c00f % 00038000371cfdc000380069185008d92320c622210c2310904c000000000000000000c0200000 % 2000000e0000000000000000000000000000000000000000000000000000000000c00e % 0007000018be4880001c0068ec20076e1df04473f39c1db9dc4c000000000000000001c0200000 % 000030060000000000000000000000000000000000000000000000000000000000c00e % 000e000010a06c80000c0068002000000000000000000000004c0000000000000000038023879d % e6e1c0030000000000000000000000000000000000000000000000000000000000c00e % 000c000010a035000006006400e7e0000000000000000000008c0000000000000000070027c848 % a31220038000000000000000000000000000000000000000000000000000000000c00e % 0018000010b2360000070060018000000000000000000000000c000000000000000006002401cd % 22122001c000000000000000000000000000000000000000000000000000000000c00e % 0038000039dc120000038060000000000000000000000000000c00000000000000000c00240645 % 2211c000e000000000000000000000000000000000000000000000000000000000c00e % 00700000000000000001c060000000000000000000006000000c00000000000000001c002648c6 % 221200006000000000000000000000000000000000000000000000000000000000c00e % 00e00000000000000000c060002100000002010000002000000c00000000000000003800738762 % 773be0003000000000000000000000000000000000000000000000000000000000c00e % 00c000000000000000006060002100000002010000002000000c0000000000006c007000000000 % 000230003800000000000000000000000000000000000000000000000000000000c00e % 0180000000000000000070601e7bce6ec6e783de07ce23cee00c00000000000032006000000000 % 000630001c00000000000000000000000000000000000000000000000000000000c00e % 03800000019030000000386021211f3327320133021f2422c00c0000000000002200c000000000 % 0003c0000e00000000000000000000000000000000000000000000000000000000c000 % 070000000090100200001c600721102222120121021020e1000c0000000000002201c000000000 % 000000000600000000000000000000000000000000000000000000000000000000c000 % 0e0000000080100200000c60192110222212012102102323800c00000000000077038000000010 % 060600000300000000000000000000000000000000000000000000000000000000c000 % 0c03cf370fb1f1e79c340660232119222232012302192464c00c00000000000000070000000010 % 020200000380000000000000000000000000000000000000000000000000000000c008 % 18063098989312123e4807601db9ce7773e381de070e73bee00c03000000000000060000000000 % 0202000001c0000000000000000000000000000000000000000000000000000000c000 % 3804039090921072207403e0000000000200000000000000000c1f0000000000000c0001dfcfb1 % e2e2700000e0000000000000000000000000000000000000000000000000000000c000 % 70040c9090921192200c01e0000000000200000000000000000cff0000000000001c00008c2412 % 1332f8000060000000000000000000000000000000000000000000000000000000c000 % e006319091923232324400e0000000000700000000000000000ffffffffffffffff80000d0e410 % 721280000030000000000000000000000000000000000000000000000000000000c001 % e003cef9cef9d9db9c7800e0000000000000000000000000000ffffffffffffffff00000532411 % 921280000030000000000000000000000000000000000000000000000000000000c00c % 6000000000000000000001e0000000000000000000000000000dff000000000000180000646412 % 3232c8000070000000000000000000000000000000000000000000000000000000c000 % 3000000000000000000001e0000080000000030000080000000c3f0000000000001c000023be39 % dbe7700000e0000000000000000000000000000000000000000000000000000000c000 % 380000000000000000000360000080004000010000880000000c0f0000000000000e0000000000 % 0000000000c0000000000000000000000000000000000000000000000000000000c00d % 1c0000000000000000000760000000004000010000800000000c00000000000000070000000000 % 000000000180000000000000000000000000000000000000000000000000000000c00e % 0e0000000000000000000e6001b99dfcf01ae11c79f8f370000c00000000000000030000000000 % 000000000380000000000000000000000000000000000000000000000000000000c00d % 0600000002c0181801c01c6001cc88e64025f13ec4899988000c00000000000000018000000000 % 000000000700000000000000000000000000000000000000000000000000000000c00e % 03000000024008080620186000848d42403b012080890908000c0000000000000001c000000000 % 000000000e00000000000000000000000000000000000000000000000000000000c00d % 038000000040080804203060008485424007012080890908000c0000000000000000e00000c000 % 0000c3800c00000000000000000000000000000000000000000000000000000000c00e % 01c079dfc6478b88e0207060008c864640239132c4891908000c00000000000000007000004000 % 20004c401800000000000000000000000000000000000000000000000000000000c00d % 00e0848c22484cc9f040e06000f9c23c703ce39c78fcf39c000c00000000000000003000004000 % 200048403800000000000000000000000000000000000000000000000000000000c00e % 00601cd0e241c8490081c060008000000000000000000000000c00000000000000001806b8471e % 7b87c0407000000000000000000000000000000000000000000000000000000000c00d % 003064532246484900818060008000000000000000000000000c00000000000000001c097c4fb1 % 27cc4080e000000000000000000000000000000000000000000000000000000000c00e % 00388c646248c8c99183006001c000000000000000000000000c00000000000000000e0ec04820 % 24084100c000000000000000000000000000000000000000000000000000000000c00d % 001c7623b7e76f9ce1870060000000000000000000000000000c00000000000000000701c04820 % 240841018000000000000000000000000000000000000000000000000000000000c00e % 000e000000000000000e0060000000000000000000000000000c00000000000000000308e44cb1 % 2648c3038000000000000000000000000000000000000000000000000000000000c00d % 0006000000000000001c0060000000000000000100000000000c0000000000000000018f38e71e % 3b8763070000000000000000000000000000000000000000000000000000000000c00e % 000300000000000000180060000000000000000100000000000c000000000000000001c0000000 % 0000000e0000000000000000000000000000000000000000000000000000000000c00d % 0003800000000000003000600000dc79f3cdd873ce7c6800000c000000000000000000e0000000 % 0000000c0000000000000000000000000000000000000000000000000000000000c00e % 0001c00000000000007000600000e684842664f91f209000000c00000000000000000070000000 % 000000180000000000000000000000000000000000000000000000000000000000c00d % 0000e0000000000000e000600000421c80e444811020e800000c00000000000000000030000000 % 000000380000000000000000000000000000000000000000000000000000000000c00e % 000060000000000001c00060000042648324448110201800000c00000000000000000018000000 % 000000700000000000000000000000000000000000000000000000000000000000c00d % 00003fffffffffffff8000600000468c846444c919208800000c0000000000000000001fffffff % ffffffe00000000000000000000000000000000000000000000000000000000000c00e % 00000000000400000000006000007c77c3beee71ce70f000000c00000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000004000000000060000040000000000000000000000c00000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000060000040000000000000000000000c00000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 0000000000040000000000600000e0000000000000000000000c00000000000000000000000003 % 0d8000000000000000000000000000000000000000000000000000000000000000c00e % 0000000000046c0000000060000000000000000000000000000c00000000000000000000000003 % 048000000000000000000000000000000000000000000000000000000000000000c00d % 000000000004320000000060000000000000000000000000000c00000000000000000000000003 % 050000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004220000000060000000000000000000000000000c00000000000000000000000003 % 030000000000000000000000000000000000000000000000000000000000000000c00d % 000000000004220000000060000000000000000000000000000c00000000000000000000000003 % 020000000000000000000000000000000000000000000000000000000000000000c00e % 00000000000477000000007ffffffffffffffffffffffffffffc00000000000000000000000003 % 020000000000000000000000000000000000000000000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 0c0000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 00c000000000000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 07c000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 3fc000000000000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % fffffffffffffffffffffffffffffffffffffffe00000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % fffffffffffffffffffffffffffffffffffffffe00000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 7fc000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 0fc000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 01c000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % e00000000000000000000000000000000000000200000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % c00000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 800000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000010c00006000 % 0c0040000100000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000020400002000 % 040040002100000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000040400002000 % 040000002080000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000047cee03e423 % c4dcddde7880000000200000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000001800000004c444062c64 % 24e648b32080000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000048464042420 % e4424d212080000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000048428042423 % 244245212080000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000048c28046464 % 644646232080000000200000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000001800000004761003b3b3 % be7ce21e3880000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000040010000000 % 004000000080000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000020073f00000 % 004000000100000000200000000000000000000200000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000180000000000c0000000 % 00e000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018001800000000000004 % 000000000100606000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000800040000080004 % 000000000100202000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000800040000080000 % 000600000000202000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018d388e3cf039b9e71fc % dc381dfc7f1e2e2388200000000000000000000200000000000000000000000000c00a % 00000000000400000000000000000000000000000000000000000000001927c9f62407cc48f884 % 624408c221213327c8200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000019d40904040408488084 % 42440d0e2107212400200000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000018340904040408488084 % 423805322119212400200000000000000000000200000000000000000000000000c00a % 00000000000400000000000000000000000000000000000000000000001916499624064848c884 % 424006462123232648200000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000019e39ce3c7039cee71ce % e77c023b739dbe7388200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 004600000000000008200000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 00c600000000000000200000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 007800000000000000200000000000000000000200000000000000000000000000c00f % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000004000003 % 000008000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000004000201 % 000008000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000201 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000dcddde781 % 73c1b86a0000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000e648b3201 % 9c2248920000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000424d21201 % 08e3a8e80000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000424521201 % 0b2068180000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000464623201 % 1c62288a0000000000200000000000000000000200000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000180000000007ce21e381 % f3b3dcf20000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000400000000 % 000000020000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000400000000 % 000000000000000000200000000000000000000200000000000000000000000000c008 % 000000000004000000000000000000000000000000000000000000000018000000000e00000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000001800000000004 % 01818000007e0f9fc0200000000000000000000200000000000000000000000000c001 % 000000000004000000000000000000000000000000000000000000000018000000801000000004 % 0080800000231088c0200000000000000000000200000000000000000000000000c00c % 000000000004000000000000000000000000000000000000000000000018000000801000000000 % 008080000021904820200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018109b8f9e3dc077f1fc % 78b88e1a00209c0900200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018319cd8a113e0230884 % 84cc9f240020878f00200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018108850871200343884 % 1c84903a0020804900200000000000000000000200000000000000000000000000c00e % 00000000000400000000000000000000000000000000000000000000001810885099120014c884 % 648490060021904820200000000000000000000200000000000000000000000000c00d % 0000000000040000000000000000000000000000000000000000000000181188d1a31320191884 % 8c8c99224021188840200000000000000000000200000000000000000000000000c00e % 0000000000040000000000000000000000000000000000000000000000180ecf8edd9dc008edce % 76f9ce3c407e1f1fc0200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000800000000000000 % 000000004000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000800000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018001c00000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000000000000000030 % 000001800000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000010 % 000000800000080000200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000000000000000010 % 000000800000080000200000000000000000000200000000000000000000000000c00e % 0000000000040000000000000000000000000000000000000000000000181b8f3edd83403e71f1 % 09e38f80f1e1be3500200000000000000000000200000000000000000000000000c00d % 0000000000040000000000000000000000000000000000000000000000180c599066448010fb13 % 1b17d8818b32484900200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018085090444740108211 % 0a0410810213a87400200000000000000000000200000000000000000000000000c00d % 0000000000040000000000000000000000000000000000000000000000180850904440c0108211 % 0a0410810210680c00200000000000000000000200000000000000000000000000c00e % 00000000000400000000000000000000000000000000000000000000001808519044445010ca31 % 1b1651818a32284500200000000000000000000200000000000000000000000000c00d % 0000000000040000000000000000000000000000000000000000000000181cef38eee7903871d8 % ede38ec0f1e3ce7900200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000010000000 % 000000000000000100200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c00d % 0000000000040000000000000000000000000000000000000000000000180000000c0000000000 % 000c00000400000000200000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000018000000040002000000 % 080400000400000000200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000000040002000000 % 080400000000060000200000000000000000000200000000000000000000000000c00e % 00000000000400000000000000000000000000000000000000000000001800006b8471e786e1ce % fe0471e77cdc380000200000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000018000097c4fb120313e2 % c804fa122462440000200000000000000000000200000000000000000000000000c00e % 0000000000040000000000000000000000000000000000000000000000180000ec048202021201 % 080480734442440000200000000000000000000200000000000000000000000000c00d % 00000000000400000000000000000000000000000000000000000000001800001c048202021203 % 880481914442380000200000000000000000000200000000000000000000000000c00e % 00000000000400000000000000000000000000000000000000000000001800008e44cb12021324 % c804ca318442400000200000000000000000000200000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000180000f38e71e38739ce % ee0e71d88ee77c0000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000460000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000c60000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000780000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000010 % 060600000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000010 % 020200000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 020200000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000001dfcfb1 % e2e270000000000000200000000000000000000200000000000000000000000000c002 % 0000000000040000000000000000000000000000000000000000000000180000000000008c2412 % 1332f8000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000d0e410 % 721280000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000532411 % 921280000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000646412 % 3232c8000000000000200000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000001800000000000023be39 % dbe770000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000200000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % e00000000000000000000000000000000000000200000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % c00000000000000000000000000000000000000200000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 800000000000000000000000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000001000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000001000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000003000000000000860000300 % 000000004000000000001000000000000000000200000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000003000000000001020000100 % 000000004000000000001000000000000000000200000000000000000000000000c00f % 000000000004000000000000000000000000000000000000000000003000000000002020000100 % 000000002000000000001000000000000000000200000000000000000000000000c00e % 0000000000040000000000000000000000000000000000000000000030000000000023e7701f10 % 9c6e6e3c2000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000002622203131 % be3131422000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000002423202110 % a021210e2000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000002421402110 % a02121322000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000002461402311 % b22121462000000000001000000000000000000200000000000000000000000000c00e % 0000000000040000000000000000000000000000000000000000000030000000000023b0801d8e % dc73f3bb2000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000002000800000 % 000000002000000000001000000000000000000200000000000000000000000000c00e % 0000000000040000000000000000000000000000000000000000000030000000000010038fc000 % 000000004000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000000006000000 % 000000000000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000001000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000001000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000003000000000000000400000 % 000080000000000000001000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000003000000000008008400000 % 000080080000000000001000000000000000000200000000000000000000000000c008 % 000000000004000000000000000000000000000000000000000000003000000000008008000000 % 000000080000000000001000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000003373ee3bf1b9e79edddc0d % d8799b9e71b8f371e3801000000000000000000200000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000033991f11f8c4884848be06 % 64848c48f8c5098b17c01000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000003109101a808481c84d2004 % 441c88488084390a04001000000000000000000200000000000000000000000000c001 % 000000000004000000000000000000000000000000000000000000003109100a80848648452004 % 446488488084c90a04001000000000000000000200000000000000000000000000c00c % 000000000004000000000000000000000000000000000000000000003119190cc88488c8463204 % 448c8848c885190b16481000000000000000000200000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000031f38e0471cee76ee21c0e % ee77dcee71ceef9de3881000000000000000000200000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000003100000000000000000000 % 000000000000000000081000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003100000000000000000000 % 000000000000000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003380000000000000000000 % 000000000000000000001000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000001000000000000000000236000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000001000000000000000000212000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000001000000000000000000214000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 00000000000000000000100000000000000000020c000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003000000000071ff9e7c3e7 % 1e3cefc7fb80000000001000000000000000000208000000000000000000000000c00e % 0000000000040000000000000000000000000000000000000000000030000000000f884332010f % b16647e21100000000001000000000000000000208000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003000000000080842120108 % 20426a021900000000001000000000000000000230000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000080842120108 % 20422a020a00000000001000000000000000000200000000000000000000000000c00d % 0000000000040000000000000000000000000000000000000000000030000000000c884232010c % b14633220a00000000001000000000000000000200000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000071ce1e70387 % 1e3c11c70400000000001000000000000000000200000000000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000000400000000001000000000001fffffffffffffc0000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000001c00000000001000000000003800000000000060000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 000000003000000000001000000000007000000000000070000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003000000000000000000000 % 00000000000000000000100000000000e060000020000038000000000000000000c00d % 000000000004000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff00000000000c02000002000001c000000000000000000c00e % 000000000004000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff00000000001802000000000300c000000000000000000c00d % 000000000004000000000000000000000000000000000000000000000000000000007000000000 % 0000000018000000000000000000000380238f3be6e1c006000000000000000000c00e % 00000000000400000000000000000000000000000000000000000000000000000000e000000000 % 000000000c00000000000000000000070027d09123122007000000000000000000c00d % 00000000000400000000000000000000000000000000000000000000000000000001c000000000 % 0000000006000000000000000000000e0024039a22122003800000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000038000000000 % 0000000003000000000000000000000c00240c8a2211c001c00000000000000000c00d % 000000000004000000000000000000000000000000000000000000000000000000070000000001 % 000000000180000000000000000000180026518c22120000c00000000000000000c00e % 0000000000040000000000000000000000000000000000000000000000000000000e0000000011 % 0000000000c00000000000000000003800738ec4773be000600000000000000000c00d % 0000000000040000000000000000000000000000000000000000000000000000001c0000000010 % 000000000060000000000000000000700000000000023000700000000000000000c00e % 0000000000040000000000000000000000000000000000000000000000000000003800079e6e3f % 37108e000030000000000000000000e00000000000063000380000000000000000c00d % 00000000000400000000000000000000000000000000000000000000000000000070000c733111 % 18b19f000018000000000000000000c0000000000003c0001c0000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000e00008212111 % 10909000000c0000000000000000018000000000000000000c0000000000000000c00d % 000000000004000000000000000000000000000000000000000000000000000001c00008212111 % 109090000006000000000000000003800000000000000000060000000000000000c00e % 00000000000400000000000000000000000000000000000000000000000000000380000c632111 % 10919900000300000000000000000700000000200c0c0000070000000000000000c00d % 0000000000040000000000000000000000000000000000000000000000000000070000079e739f % b9cece00000180000000000000000e000000002004040000038000000000000000c00e % 00000000000400000000000000000000000000000000000000000000000000000e000000000000 % 000000000000c0000000000001e00c00000000000404000001c000000000000380c000 % 00000000000400000000000000000000000000000000000000000000000000001c000000000000 % 00000000000060000000000001fc180003bbcfe3c5c4700000c0000000000003f0c002 % 000000000004000000000000000000000000000000000000000000000000000038000000000000 % 00000000000030000000000001ffb800011424242664f8000060000000000003fec000 % 000000000004000000000000000000000000000000000000000000000000000070000000000000 % 0000000000001ffffffffffffffff00001a0e420e4248000007fffffffffffffffc002 % 000000000004000000000000000000000000000000000000000000000000000070000000000000 % 0000000000003ffffffffffffffff00000a3242324248000007fffffffffffffffc000 % 000000000004000000000000000000000000000000000000000000000000000038000000000000 % 00000000000070000000000001fe380000c464246464c80000e0000000000003fcc002 % 00000000000400000000000000000000000000000000000000000000000000001c000000080000 % 200003800000e0000000000001f01c000043be73b7ce700001c0000000000003e0c000 % 00000000000400000000000000000000000000000000000000000000000000000e000000080004 % 20000c400001c0000000000001800e000000000000000000018000000000000300c002 % 000000000004000000000000000000000000000000000000000000000000000007000000000004 % 0000384000038360000000000000060000000000000000000306c0000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000380001b99dfcf % 66e1c0400007012000000000000003000000000000000000070320000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000001c0001cc88e64 % 23122080000e0140000000000000038000000000000000000e0220000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000e0000848d424 % 22122100001c00c000000000000001c000018000000187001c0220000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000700008485424 % 2211c1000038008000000000000000e00000800040009880180770000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000380008c86464 % 221203000070008000000000000000600000800040009080300000000000000000c002 % 0000000000040000000000000000000000000000000000000000000000000000001c000f9c23c7 % 773be30000e0030000000000000000300d388e1ef38f8080700000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000000000000e0008000000 % 0002300001c000000000000000000038127c9f3147d88100e00000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000070008000000 % 0006300003800000000000000000001c1d40902044108201c00000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000003801c000000 % 0003c00007000000000000000000000e0340902044108201800000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000001c000000000 % 000000000e00000000000000000000061164993146518603000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000e000000000 % 000000001c00000000000000000000031e39ce1e738ec607000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000007000000000 % 00000000380000000000000000000003800000000000000e000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000003fffffffff % fffffffff00000000000000000000001c00000000000001c000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000007000000000 % 00000000380000000000000000000000e000000000000018000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000000e000000000 % 000000001c00000000000000000000006000000000000030000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000001c000000000 % 000000000e00000000000000000000003000000000000070000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000038000000000 % 000000000700000000000000000000003fffffffffffffe0000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000070000000000 % 000000000380000000000000000000001fffffffffffffc0000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000000000000e0000000000 % 0000000001c0000000000000000000000000000000000000000000000000000000c002 % 0000000000040000000000000000000000000000000000000000000000000000001c0000000000 % 0000000000e0000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000380000000000 % 000000c18070000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000000700000000000 % 000000408038000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000e00000000000 % 00000040801c000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000001c42dcf9c78f3 % bf1f785c8e0e000000000000000000000000000000000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000000000038c66243ec599 % 1f8884669f07000000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000007042424208109 % a8081c429003800000000000000000000000000000000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000000e042424208108 % a80864429001c00000000000000000000000000000000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000001c04642432c518 % cc888c469900e00000000000000000000000000000000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000003803be7e1c78f0 % 471c767dce00700000000000000000000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000070000000000000 % 0000000000003fffffffffffffffe0000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000070000000000000 % 0000000000001fffffffffffffffe0000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000038000000000000 % 000000000000300000000000000020000000000000000000000000000000000000c000 % 00000000000400000000000000000000000000000000000000000000000000001c000000000000 % 000000000000600000000000000020000000000000000000000000000000000000c002 % 00000000000400000000000000000000000000000000000000000000000000000e000000000000 % 000000000000c00000000000000020000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000007000000000000 % 000e0000000186c000000000000020000000000000000000000000000000000000c002 % 000000000004000000000000000000000000000000000000000000000000000003800000000000 % 003100000003024000000000000020000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000001c00000000000 % 002100000006028000000000000020000000000000000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000000000000e00000071ff9 % e7c10000000c0180000000000003fc000000000000000000000000000000000000c000 % 0000000000040000000000000000000000000000000000000000000000000000007000000f8843 % 3202000000180100000000000001fc000000000000000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000000000000380000080842 % 1204000000300100000000000001fc000000000000000000000000000000000000c00a % 0000000000040000000000000000000000000000000000000000000000000000001c0000080842 % 1204000000600600000000000001f8000000000000000000000000000000000000c00a % 0000000000040000000000000000000000000000000000000000000000000000000e00000c8842 % 320c000000c00000000000000000f8000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000070000071ce1 % e70c000001800000000000000000f8000000000000000000000000000000000000c00a % 000000000004000000000000000000000000000000000000000000000000000000038000000000 % 0000000003000000000000000000f0000000000000000000000000000000000000c00a % 00000000000400000000000000000000000000000000000000000000000000000001c000000000 % 000000000600000000000000000070000000000000000000000000000000000000c00f % 00000000000400000000000000000000000000000000000000000000000000000000e000000000 % 000000000c00000000000000000070000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000007000000000 % 000000001800000000000000000060000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000003fffffffff % fffffffff000000000000000000020000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000001fffffffff % ffffffffe000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 1b0000000000000000000000001000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 0c8000000000000000000000001000000000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 088000000000000000000003ee3c85f6e000000000000000000000000000000000c00e % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 0880000000000000000000011f118c831000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 1dc000000000000000000001101084821000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000001101084821000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 00000000000000000000000119108c821000000000000000000000000000000000c008 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 0000000000000000000000038e1c77c73800000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c000 % 000000000004000000000000000000000000000000000000000000000000000000000000000f03 % 000000000000000000000000000000000000000000000000000000000000000000c001 % 000000000004000000000000000000000000000000000000000000000000000000000000000fe3 % 000000000000000000000000000000000000000000000000000000000000000000c00c % 000000000004000000000000000000000000000000000000000000000000000000000000000fff % 000000000000000000000000000000000000000000000000000000000000000000c000 % 000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % 000000000000000000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000fff % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000ff3 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000f83 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000c03 % 0000000000000000000000001c7fe79f0000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 0000000000000000000000003e210cc80000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000202108480000000000000000000000000000000000c00e % 00000000000000000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000202108480000000000000000000000000000000000c00d % 00000000000000000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000322108c80000000000000000000000000000000000c00e % 00000000000000000000000000000000000000000000000000000000000000000000000000000f % e000000000000000000000001c73879c0000000000000000000000000000000000c00d % 00000000000000000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000000c00e % 00000000000000000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000007 % c00000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 800000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 00000000000000000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000018000000040000000002 % 00000c400080000000200000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000018000000080000000022 % 000004440080000000200000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000018000000100000000020 % 000004040040000000200000000000000000000000000000000000000000000000c00e % 0000000000000000000000000000000000000000000000000000000000180000001373ee1e6e7e % 6ec3c4cfee40000000200000000000000000000000000000000000000000000000c00d % 00000000000000000000000000000000000000000000000000000000001800000013991f337322 % 332424444440000000200000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000018000000110910212122 % 2220e4446440000000200000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000018000000110910212122 % 222324442840000000200000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000018000000111919232322 % 222464442840000000200000000000000000000000000000000000000000000000c00d % 00000000000000000000000000000000000000000000000000000000001800000011f38e1e3e3f % 7773bee71040000000200000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000018000000110000002000 % 000000001040000000200000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000018000000090000002000 % 000000007080000000200000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000018000000038000007000 % 00000000c000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000000000000000000000000000000000180000e0000000060000 % 100000080000c00000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000100008000020000 % 100000180000400000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000100008000020000 % 000000080000560000200000000000000000000000000000000000000000000000c000 % 00000000000000000000000000000000000000000000000000000000001800039e3de79f02e783 % 70d0078b8e1e480000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000121628cc8033844 % 91200c4c5f31500000200000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000000000000000000000000000000000180001074088480211c7 % 51d008085020780000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000119408848021640 % d03008085020480000200000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000000000000000000000000000000000180001236288c80238c4 % 51140c4859314c0000200000000000000000000000000000000000000000000000c002 % 00000000000000000000000000000000000000000000000000000000001800039dbce79c03e767 % b9e4079cee1eee0000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000400000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 600000001e00000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 900000002200000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 900000002000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000f1e3c84fbc79dc0 % 67079e6e767dbb0000200000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000000000000000000000000000000000180010b1638c442c4880 % a20c73312220cc8000200000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000000000000000000000000000000000180003a0408440e80c81 % 120821212220888000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000ca0408443280501 % 0c0821212220888000200000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000000000000000000000000000000000180011b1628c446c4501 % 8e0c63212220888000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000ede3c76e3b78200 % f3079e73f771ddc000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000200 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000e00 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000001800 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000003800002c04c40 % 000000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000004000002404448 % 000020020000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000004000000400408 % 000020020000000000200000000000000000000000000000000000000000000000c002 % 00000000000000000000000000000000000000000000000000000000001800000e70f0d65cc4de % ee06f9e79086800000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000004f90922664448 % 440922123189000000200000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000000000000000000000000000000000180000048039d2424448 % 640ea072108e800000200000000000000000000000000000000000000000000000c000 % 00000000000000000000000000000000000000000000000000000000001800000480c832424448 % 2801a1921081800000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000004c91912464448 % 2808a2321188800000200000000000000000000000000000000000000000000000c000 % 00000000000000000000000000000000000000000000000000000000001800000e70ede77ceeee % 100f39db8ecf000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 100000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 700000000000000000200000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % c00000000000000000200000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000018000000000000000000 % 000000000000000000200000000000040000000000000000000000000000000000c000 % 00000000000000000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000040000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000038000000 % 0000007000000000000000000000f9cf217db80000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000070000000 % 000000380000000000000000000043e46320c40000000000000000000000000000c00a % 0000000000000000000000000000000000000000000000000000000000000000000000e0000000 % 0000001c0000000000000000000042042120840000000000000000000000000000c000 % 0000000000000000000000000000000000000000000000000000000000000000000001c0000000 % 0000000e0000000000000000000042042120840000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000380000000 % 000000070000000000000000000043242320840000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000700000600 % 0060000380000000000000000000e1c71df1ce0000000000000000000000000000c00f % 000000000000000000000000000000000000000000000000000000000000000000000e00000200 % 00200001c000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000001c00000200 % 00200000e000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000003800003e21 % 3c2000007000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000007000006263 % 422000003800000000000000000000000000000000000000000000000000000000c00e % 00000000000000000000000000000000000000000000000000000000000000000000e000004221 % 0e2000001c00000000000000000000000000000000000000000000000000000000c00e % 00000000000000000000000000000000000000000000000000000000000000000001c000004221 % 322000000e00000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000038000004623 % 462000000700000000000000006000000180003000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000070000003b1d % bb7000000380000000000700002000100080001000000000000000000000000000c00e % 0000000000000000000000000000000000000000000000000000000000000000000e0000000000 % 0000000001c00000000007e0002000100080001000000000000000000000000000c00e % 0000000000000000000000000000000000000000000000000000000000000000001c0000000000 % 0000000000e00000000007fc0023c37c0f884f1000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000ffffffffffffffff80000000000 % 00000000007fffffffffffff802664901898d09000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000ffffffffffffffff80000000000 % 00000000003fffffffffffff802427501088439000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000c000000000000001c0000000000 % 0000000000600000000007fc002420d010884c9000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000c000000000000000e0003800002 % c0c00e0000c00000000007e0002464501188d19000000000000000000000000000c008 % 000000000000000000000000000000000000000000000000000c00000000000000070004000002 % 4040310001800000000007000073c79c0ec76ef800000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000c0000000000001b038004000000 % 404021000303600000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000c0000000000000901c00e70f0d6 % 5c4701000601900000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000c0000000000000a00e004f90922 % 664f82000c01100000000000000000000000000000000000000000000000000000c001 % 000000000000000000000000000000000000000000000000007f800000000000060070048039d2 % 424804001801100000000000000000000000000000000000000000000000000000c00c % 000000000000000000000000000000000000000000000000007f8000000000000400380480c832 % 424804003003b80000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000007f00000000000004001c04c91912 % 464c8c00600000000000000000e00000b013100000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000003f00000000000018000e0e70ede7 % 7ce70c00c000000000000000010000009011120000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000003f00000000000000000700000000 % 000000018000000000000000010000001001020000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000003e00000000000000000380000000 % 000000030000000000000000039c3c35973137bb80000000000000000000000000c00d % 000000000000000000000000000000000000000000000000001e000000000000000001c0000000 % 000000060000000000000000013e42489991121100000000000000000000000000c00e % 000000000000000000000000000000000000000000000000001e000000000000000000e0000000 % 0000000c000000000000000001200e749091121900000000000000000000000000c00d % 000000000000000000000000000000000000000000000000001c00000000000000000070000000 % 0000001800000000000000000120320c9091120a00000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000c00000000000000000038000000 % 000000300000000000000000013246449191120a00000000000000000000000000c00d % 000000000000000000000000000000000000000000007fffffffffffff8000000000001fffffff % ffffffe00000000000000000039c3b79df3bbb8400000000000000000000000000c00e % 00000000000000000000000000000000000000000000ffffffffffffffc000000000000fffffff % ffffffc00000000000000000000000000000000400000000000000000000000000c00d % 00000000000000000000000000000000000000000001c0000000000000e0000000000000000000 % 000000000000000000000000000000000000001c00000000000000000000000000c00e % 000000000000000000000000000000000000000000038000000000000070000000000000000000 % 000000000000000000000000000000000000003000000000000000000000000000c00d % 000000000000000000000000000000000000000000070000000000000038000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 0000000000000000000000000000000000000000000e000000000000001c000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 0000000000000000000000000000000000000000001c000001000006000e000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000380000010000020007000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000700000000000020003800000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000e0006efb3763c20001c00000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000001c00073411994220000e00000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000003800021411110e20000700000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000007000021411113220000380000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 00000000000000000000000000000000000000000e0000234111146200001c0000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 00000000000000000000000000000000000000001c00003ee3bbbbb700000e0000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000038000020000000000000070000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000070000020000000000000038000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 0000000000000000000000000000000000000000e000007000000000000001c000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 0000000000000000000000000000000fffffffffc000000000000000000000ffffffffffffffff % 000000000000000000000000000000000000000000000000000000000000000000c00e % 0000000000000000000000000000000c00000000e000000000000000000001c000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 0000000000000000000000000000000c0000000070000e00001303003800038000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 0000000000000000000000000000000c000000003800100000110100c400070000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 0000000000000000000000000000000c0000006c1c0010000001010084000e0000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 0000000000000000000000000000000c000000240e0039c3c371711c04001c1b00000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00d % 0000000000000000000000000000000c00000028070013e42491993e0800380c80000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c00e % 0000000000000000000000000000007f8000001803801200e7510920100070088000000000001f % e00000000000000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000007f8000001001c0120320d109201000e0088000000000001f % e00000000000000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000003f8000001000e01324645119323001c01dc000000000000f % e00000000000000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000003f00000060007039c3b7b9f39c300380000000000000000f % c00000000000000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000003f000000000038000000000000000700000000000000000f % c00000000000000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000001f00000000001c000000000000000e000000000000000007 % c00000000000000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000001e00000000000e000000000000001c000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000001e0000000000070000000000000038000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000000e0000000000038000000000000070000000000000000003 % 800000000000000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000000c000000000001c0000000000000e0000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000000c000000000000ffffffffffffffc00000000001ffffffff % fffffffe0000000000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000040000000000007fffffffffffff800000000003ffffffff % ffffffff0000000000000000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000700000000 % 000000038000000000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000e00000000 % 00000001c000000000000000000000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000001c00000000 % 00000000e000000000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000003800000000 % 000000007000000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000000000000000000000000000000000000000000070000c0000 % 0000c0033800000000000000000000000000000000000000000000000000000000c000 % 00000000000000000000000000000000000000000000000000000000000000000000e000040000 % 000040011c00000000000000000000000000000000000000000000000000000000c002 % 00000000000000000000000000000000000000000000000000000000000000000001c000040000 % 000040010e00000000000000000000000000000000000000000000000000000000c000 % 00000000000000000000000000000000000000000000000000000000000000000003842dc5c788 % 4dc7c71f0700000000000000000000000000000000000000000000000000000000c002 % 000000000000000000000000000002000000000000000000000000000000000000070c66266cd8 % c62c4fb10380000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000000020000000000000000000000000000000000000e0424242848 % 4428482101c0000000000000000000000000000000000000000000000000000000c002 % 000000000000000000000000007ce790bedc0000000000000000000000000000001c0424242848 % 4428482100e0000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000021f23190620000000000000000000000000000003804642468c8 % c428cca30070000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000021021090420000000000000000000000000000007003be77c787 % 6e77671d8038000000000000000000000000000000000000000000000000000000c000 % 000000000000000000000000002102109042000000000000000000000000000000e00000000000 % 00000000001c000000000000000000000000000000000000000000000000000000c002 % 000000000000000000000000002192119042000000000000000000000000000001c00000000000 % 00000000000e000000000000000000000000000000000000000000000000000000c000 % 0000000000000000000000000070e38ef8e7000000000000000000000000000003800000000000 % 000000000007000000000000000000000000000000000000000000000000000000c002 % 0000000000000000000000000000000000000000000000000000000001ffffffff000000000000 % 000000000003ffffffffffffffc000000000000000000000000000000000000000c000 % 0000000000000000000000000000000000000000000000000000000001ffffffff000000000000 % 000000000003ffffffffffffffc000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000100000001800000000000 % 000000000007000000000000004000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000100000000c00000000000 % 000030e0000e000000000000004000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000100000000600000000000 % 08001310001c000000000000004000000000000000000000000000000000000000c000 % 0000000000000000000000000000000000000000000000000000000001000001b0300000000000 % 080012100038360000000000004000000000000000000000000000000000000000c002 % 000000000000000000000000000000200000c00000000000000000000100000090180039df71c7 % 9e71f0100070190000000000004000000000000000000000000000000000000000c000 % 0000000000000000000000000000042000004000000000000000000001000000a00c007c5b9bec % 48fb102000e011000000000007fc00000000000000000000000000000000000000c002 % 000000000000000000000000000004000000400000000000000000000100000060060040210a08 % 0882104001c011000000000007fc00000000000000000000000000000000000000c000 % 00000000000000000000000001e6ef66ec3c400000000000000000000100000040030040710a08 % 0882104003803b800000000003f800000000000000000000000000000000000000c002 % 000000000000000000000000033734233242400000000000000000000100000040018064991b2c % 48ca30c0070000000000000003f800000000000000000000000000000000000000c000 % 00000000000000000000000002121422220e40000000000000000000010000018000c039ddf1c7 % 8e71d8c00e0000000000000003f800000000000000000000000000000000000000c002 % 000000000000000000000000021214222232400000000000000000000100000000006000010000 % 000000001c0000000000000001f000000000000000000000000000000000000000c000 % 000000000000000000000000023234222246400000000000000000000100000000003000010000 % 00000000380000000000000001f000000000000000000000000000000000000000c002 % 00000000000000000000000001e3e777773be00000000000000000000100000000001800038000 % 00000000700000000000000001f000000000000000000000000000000000000000c000 % 000000000000000000000000000200000000000000000000000000000100000000000c00000000 % 00000000e00000000000000000e000000000000000000000000000000000000000c002 % 000000000000000000000000000200000000000000000000000000001ff0000000000600000000 % 00000001c00000000000000000e000000000000000000000000000000000000000c000 % 000000000000000000000000000700000000000000000000000000001fe0000000000300000000 % 00000003800000000000000000e000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000fe00000000001ffffffff % ffffffff000000000003fffffffffffff800000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000fe0000000000000000000 % 000000000000000000070000000000001c00000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000000e0000000000000e00000000000000000000000000000000c00a % 0000000000000000000000000000000000000000000000000000000007c0000000000000000000 % 0000000000000000001c0000000000000700000000000000000000000000000000c00a % 0000000000000000000000000000000000000000000000000000000007c0000000000000000000 % 000000000000000000380000000000000380000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 0000000000000000007000000000000001c0000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000380000000000000000000 % 000000000000000000e000000000000000e0000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000380000000000000000000 % 000000000000000001c00000000000000070000000000000000000008000000000c00f % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 000000000000000003800000000000000038000000000000000000008000000000c00e % 000000000000000000000000000000000000000000000000000000000100000000000000000000 % 00000000000000000700000000000000001c00000000000000001f39e427f70000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000e00000000000000000e0000000000000000087c8c62188000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000001c000000000000000007000000000000000008408422108000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000038000000000000000003800000000000000008408422108000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000070000000000003800001c00000000000000008648462108000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000e000000000008c400000e0000000000080001c38e3b739c000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001c0000000000088400000700000000000f00000000000000000c00e % 000000000000000000000000000000000000000000000000000000008000000000000000000000 % 0000000000000003800001b885b9e0400000380000000000fe0000000000000000c00e % 000000000000000000000000000000000000000000000000000000008000000000000000000000 % 0000000000000007000001cd8cc4808000001c0000000000ffc000000000000000c00e % 00000000000000000000000000000000000000000000000000001f39e427f70000000000000000 % 000000000000000e000000848484810000000fffffffffffffe000000000000000c000 % 0000000000000000000000000000000000000000000000000000087c8c62188000000000000000 % 0000000000000007000000848484810000001c0000000000ffc000000000000000c000 % 000000000000000000000000000000000000000000000000000008408422108000000000000000 % 00000000000000038000008c8c8483000000380000000000fe0000000000000000c000 % 000000000000000000000000000000000000000000000000000008408422108000000000000000 % 0000000000000001c00000f877cee3000000700000000000f00000000004000000c008 % 000000000000000000000000000000000000000000000000000008648462108000000000000000 % 0000000000000000e0000080000000000000e0d800000000000000000004000000c000 % 00000000000000000000000000000000000000000000000000001c38e3b739c000000000000000 % 000000000000000070000080000000000001c0480000000000001b884dcf000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000380001c000000000000380500000000000001cd8c624000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000001c000000000000000007003000000000000008484424000000c001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000e00000000000000000e002000000000000008484424000000c00c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000700000000000000001c002000000000000008c8c424000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000380000000000000003800c00000000000000f876e77000000c000 % 000000000000000000000000000000000000000000000000000000460000620000000000000000 % 000000000000000001c00000000000000070000000000000000008000000000000c00d % 000000000000000000000000000000000000000000000000000000820000220000000000000000 % 000000000000000000e000000000000000e0000000000000000008000000000000c00e % 000000000000000000000000000000000000000000000000000001020000210000000000000000 % 0000000000000000007000000000000001c000000000000000001c000000000000c00d % 0000000000000000000000000000000000000000000000000000013e211e210000000000000000 % 000000000000000000380000000000000380000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000001626321210000000000000000 % 0000000000000000001c0000000000000700000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000001422107210000000000000000 % 0000000000000000000e0000000000000e00000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000001422119210000000000000000 % 00000000000000000007fffffffffffffc00000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000001462323210000000000000000 % 00000000000000000003fffffffffffff800000000000000000000000000000000c00e % 0000000000000000000000000000000000000000000000000000013b1d9df10000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000001000000010000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000800000020000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000046c0000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004320000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004220000000000000000000000000000000000000c00d % 00000000000000000000000000000000000000000000000000000600000000c003000000000000 % 000000000000000000000000004220000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000002000000004001000000000000 % 000000000000000000000000004770000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000002000000004001000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000042dc2e7884dc7c71f000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00d % 0000000000000000000000000000000000000000000000000c66233cd8c62c4fb1000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000042422184844284821000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000042422184844284821000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00e % 00000000000000000000000000000000000000000000000004642238c8c428cca3000000000000 % 00000000000000000000000007fc00000000000000000000000000000000000000c00d % 00000000000000000000000000000000000000000000000003be73e7876e77671d800000000000 % 00000000000000000000000007fc00000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000003f800000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000003f800000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000003f800000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000001f000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000001f000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000001f000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000e000000000000000000000000000000000000000c00d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000e000000000000000000000000000000000000000c00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000e000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000003fffffffffffffffffffffffffffffffffff8000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000801000000000200000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000008803010000000200008000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000200000000800d010000000000008000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000200000001f87173ce6e03767779e000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000008889891f31039a22cc8000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000008889091021010a34848000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000008871091021010a14848000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000008881091921011a188c8000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000200000000fcfb9dce7381f70878e000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000200000000008c000000010000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000200000000018c000000010000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000020000000000f0000000038000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000018000040000000000000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000008000840000000000000000200000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000008000800000000000000000200000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000200d709c3dec79b81b8f3e79bb0e79cf8d008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002012f8be6284ccc41cd09084cc9f23e412008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000201d80a0408484840843901c889022041d008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000200380a040848484084c90648890220403008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002011c8b262848c8408d1908c8899232411008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000201e71dc3cee79ce0f8ef877ddce39ce1e008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000080000000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000080000000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000020000000000000001c0000000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000002000000000000000000000000000000000008000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000003fffffffffffffffffffffffffffffffffff8000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000003fffffffffffffffffffffffffffffffffff8000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000004000000000000000000000000000000000000000c00f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000007fffffffffffffffffffffffffffffffffffffffc00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000007fffffffffffffffffffffffffffffffffffffffc00e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000000000 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 102.5 113.642] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -598 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_duenna\)) s -1292 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (preventative maintenance,) s -678 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error recovery) s savemat setmatrix n 78.75 110 m 126.25 110 l 126.25 122.5 l 78.75 122.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 102.5 76.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -682 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_dualpivot\)) s -1160 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select entering variable;) s -556 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivot basis;) s -1092 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (update variables, DSE) s -1082 695 m 927 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (norms, reduced costs;) s -894 927 m 1159 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select next leaving) s -386 1159 m 1391 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s savemat setmatrix n 81.25 72.5 m 123.75 72.5 l 123.75 102.5 l 81.25 102.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 102.5 44.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -606 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_dualout\)) s -1068 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select leaving variable) s savemat setmatrix n 81.25 40 m 123.75 40 l 123.75 50 l 81.25 50 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 102.5 156.338] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -708 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(preoptimality\)) s -914 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (factor basis, check) s -956 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (accuracy & confirm) s -806 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasibility status) s savemat setmatrix n 81.25 152.5 m 123.75 152.5 l 123.75 170 l 81.25 170 l 81.25 152.5 l cl gsave 0 0 0 0.176 0 B grestore n 102.5 40 m 101.49 36.972 l 103.51 36.972 l cl 0 0 0 F n 102.5 30 m 102.5 36.972 l gsave 0 0 0 0.176 0 B grestore n 102.5 72.5 m 101.49 69.472 l 103.51 69.472 l cl 0 0 0 F n 102.5 62.5 m 102.5 69.472 l gsave 0 0 0 0.176 0 B grestore n 102.5 110 m 101.49 106.97 l 103.51 106.97 l cl 0 0 0 F n 102.5 102.5 m 102.5 106.97 l gsave 0 0 0 0.176 0 B grestore n 102.5 132.5 m 92.5 132.5 l 87.5 137.5 l 92.5 142.5 l 112.5 142.5 l 117.5 137.5 l 112.5 132.5 l 102.5 132.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 102.5 137.432] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -688 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unrecoverable) s -294 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error?) s savemat setmatrix n 102.5 122.5 m 92.5 122.5 l 87.5 127.5 l 92.5 132.5 l 112.5 132.5 l 117.5 127.5 l 112.5 122.5 l 102.5 122.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 102.5 126.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -428 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (continue) s -442 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivoting?) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 147.5 124.617] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -342 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (leaving) s -386 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s -444 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selected?) s savemat setmatrix n 147.5 121.25 m 140 121.25 l 135 127.5 l 140 133.75 l 155 133.75 l 160 127.5 l 155 121.25 l 147.5 121.25 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 102.5 174.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -218 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible?) s savemat setmatrix n 102.5 170 m 95 170 l 90 175 l 95 180 l 110 180 l 115 175 l 110 170 l 102.5 170 l cl gsave 0 0 0 0.176 0 B grestore n 132.5 200 m 125 200 l 120 205 l 125 210 l 140 210 l 145 205 l 140 200 l 132.5 200 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 132.5 206.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -288 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (punt?) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 102.5 194.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -562 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unbounded) s -480 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (expected?) s savemat setmatrix n 102.5 190 m 93.75 190 l 88.75 195 l 93.75 200 l 111.25 200 l 116.25 195 l 111.25 190 l 102.5 190 l cl gsave 0 0 0 0.176 0 B grestore n 102.5 152.5 m 101.49 149.47 l 103.51 149.47 l cl 0 0 0 F n 102.5 142.5 m 102.5 149.47 l gsave 0 0 0 0.176 0 B grestore n 135 127.5 m 131.97 128.51 l 131.97 126.49 l cl 0 0 0 F n 117.5 127.5 m 131.97 127.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 134.859 146.089] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -240 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error) s savemat setmatrix n 132.5 200 m 131.49 196.97 l 133.51 196.97 l cl 0 0 0 F n 116.25 195 m 132.5 195 l 132.5 196.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 80 206.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -278 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dual\)) s -562 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unbounded) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 132.5 221.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -614 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (tighten pivot) s -1014 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selection parameters) s savemat setmatrix n 112.5 217.5 m 152.5 217.5 l 152.5 227.5 l 112.5 227.5 l cl gsave 0 0 0 0.176 0 B grestore n 80 202.5 m 78.991 199.47 l 81.009 199.47 l cl 0 0 0 F n 88.75 195 m 80 195 l 80 199.47 l gsave 0 0 0 0.176 0 B grestore n 132.5 217.5 m 131.49 214.47 l 133.51 214.47 l cl 0 0 0 F n 132.5 210 m 132.5 214.47 l gsave 0 0 0 0.176 0 B grestore n 102.5 67.5 m 105.53 66.491 l 105.53 68.509 l cl 0 0 0 F n 147.5 121.25 m 147.5 67.5 l 105.53 67.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 103.996 65.0089] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 89.2333 55.0278] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -105 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 119.419 140.17] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 88.169 197.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 133.73 212.81] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 117.001 197.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 145.751 207.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 160.751 130.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 148.73 119.746] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 118.251 130.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 103.73 145.31] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n 72.5 180 m 71.491 176.97 l 73.509 176.97 l cl 0 0 0 F n 90 175 m 72.5 175 l 72.5 176.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 89.419 177.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 115.751 177.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 72.5 184.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible?) s savemat setmatrix n 72.5 180 m 65 180 l 60 185 l 65 190 l 80 190 l 85 185 l 80 180 l 72.5 180 l cl gsave 0 0 0 0.176 0 B grestore n 50 190 m 48.991 186.97 l 51.009 186.97 l cl 0 0 0 F n 60 185 m 50 185 l 50 186.97 l gsave 0 0 0 0.176 0 B grestore n 102.5 190 m 101.49 186.97 l 103.51 186.97 l cl 0 0 0 F n 85 185 m 102.5 185 l 102.5 186.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 59.419 187.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 85.751 187.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 140 172.117] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -426 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (lost dual) s -468 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasibility) s savemat setmatrix n 130 175 m 126.97 176.01 l 126.97 173.99 l cl 0 0 0 F n 115 175 m 126.97 175 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 50 195] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -368 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (optimal) s savemat setmatrix n 102.5 35 m 105.53 33.991 l 105.53 36.009 l cl 0 0 0 F n 132.5 227.5 m 132.5 232.5 l 177.5 232.5 l 177.5 35 l 105.53 35 l gsave 0 0 0 0.176 0 B grestore n 177.5 127.5 m 174.47 128.51 l 174.47 126.49 l cl 0 0 0 F n 160 127.5 m 174.47 127.5 l gsave 0 0 0 0.176 0 B grestore n 135 142.5 m 133.99 139.47 l 136.01 139.47 l cl 0 0 0 F n 117.5 137.5 m 135 137.5 l 135 139.47 l gsave 0 0 0 0.176 0 B grestore n 160 205 m 156.97 206.01 l 156.97 203.99 l cl 0 0 0 F n 145 205 m 156.97 205 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 162.5 204.156] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s 0 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (punt) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 102.5 53.367] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -342 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (leaving) s -386 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s -444 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selected?) s savemat setmatrix n 102.5 50 m 95 50 l 90 56.25 l 95 62.5 l 110 62.5 l 115 56.25 l 110 50 l 102.5 50 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 56.25 51.7375] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -892 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_dealWithPunt\)) s -778 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (attempt to relax) s -698 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivot selection) s -554 431 m 647 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (parameters) s savemat setmatrix n 40 47.5 m 72.5 47.5 l 72.5 65 l 40 65 l cl gsave 0 0 0 0.176 0 B grestore n 27.5 50 m 20 50 l 15 56.25 l 20 62.5 l 35 62.5 l 40 56.25 l 35 50 l 27.5 50 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 27.7422 52.7954] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -196 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (new) s -530 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (candidates) s -484 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (available?) s savemat setmatrix n 72.5 56.25 m 75.528 55.241 l 75.528 57.259 l cl 0 0 0 F n 90 56.25 m 75.528 56.25 l gsave 0 0 0 0.176 0 B grestore n 102.5 35 m 99.472 36.009 l 99.472 33.991 l cl 0 0 0 F n 27.5 50 m 27.5 35 l 99.472 35 l gsave 0 0 0 0.176 0 B grestore n 102.5 147.5 m 99.472 148.51 l 99.472 146.49 l cl 0 0 0 F n 27.5 62.5 m 27.5 147.5 l 99.472 147.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 28.57 65.4722] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 28.8757 48.5411] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore %%EndDocument @endspecial 383 9547 a currentpoint currentpoint translate 1 .9 div 1 .9 div scale neg exch neg exch translate 383 9547 a 2323 10078 a FP(Fig)n(ur)q(e)53 b(7:)65 b(Dual)53 b(Phas)m(e)f(II)i(Algo)-7 b(r)s(ithm)51 b(Fl)n(ow)3771 11400 y(44)p eop end %%Page: 45 48 TeXDict begin 45 47 bop 249 466 a FP(T)8 b(h)l(e)77 b(mo)-7 b(r)q(e)78 b(c)l(o)n(mmo)l(n)f(r)q(eas)n(o)l(n)f(fo)-7 b(r)78 b(a)-6 b(p)e(par)q(ent)77 b(l)n(os)-5 b(s)78 b(of)f(pr)s(i)s (mal)h(feas)n(ibility)e(a)-8 b(t)78 b(th)l(e)f(te)l(r)5 b(m)s(i)s(na)-8 b(tio)l(n)76 b(of)h(d)-7 b(ual)0 665 y(s)n(i)s(mpl)n(e)i(x)59 b(is)g(tha)-8 b(t)58 b(it)g(is)h(endi)s(n)n(g) d(with)h(a)i(p)-5 b(unt,)59 b(as)g(d)-5 b(e)o(sc)d(r)s(ibe)l(d)58 b(a)l(bove.)83 b(T)8 b(h)l(e)58 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h (\003agg)n(e)l(d)e(as)i(uns)-8 b(uit)s(a)l(b)l(l)n(e)0 865 y(fo)h(r)54 b(pivoti)s(n)n(g)f(ar)q(e)h(n)m(ot)g(pr)s(i)s(mal)g (feas)n(ib)l(l)n(e,)h(and)f(wh)l(en)e(th)l(e)i(\003ags)g(ar)q(e)h(r)q (e)n(move)l(d)e(to)h(pe)l(r)5 b(fo)-7 b(r)5 b(m)55 b(th)l(e)e(pr)q(eo) -5 b(pti)s(mality)0 1064 y(c)e(h)l(ec)f(ks,)84 b(pr)s(i)s(mal)79 b(feas)n(ibility)e(is)h(r)q(eveal)n(e)l(d)h(as)g(an)f(ill)n(u)-7 b(s)n(io)l(n.)140 b(No)78 b(furth)l(e)l(r)f(a)n(c)-5 b(tio)l(n)77 b(is)h(pos)-5 b(s)n(ib)l(l)n(e)79 b(withi)s(n)d(d)-7 b(ual)0 1263 y(s)n(i)s(mpl)n(e)i(x;)53 b(th)l(e)g(r)q(ea)-6 b(d)h(e)l(r)53 b(is)g(agai)s(n)f(r)q(e)l(fe)l(rr)q(e)l(d)h(to)f (\24712.2.)249 1562 y(Oth)l(e)l(r)k(e)l(rr)q(o)-7 b(rs)57 b(\()p FG(e)p FP(.)p FG(g)p FP(.,)f(s)-5 b(t)s(alli)s(n)n(g,)57 b(a)n(ccura)n(cy)e(c)-7 b(h)l(ec)f(ks,)58 b FG(etc)p FP(.\))76 b(n)m(ot)55 b(s)-8 b(h)n(own)55 b(i)s(n)i(Fig)n(ur)q(e)f(7)g (can)h(occur)f(and)h(r)q(e)o(s)-8 b(u)l(lt)0 1761 y(i)s(n)53 b(te)l(r)5 b(m)s(i)s(na)-8 b(tio)l(n)51 b(of)i(th)l(e)f(d)-7 b(ual)52 b(s)n(i)s(mpl)n(e)-5 b(x)53 b(algo)-7 b(r)s(ithm)52 b(with)g(th)l(e)g(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)53 b(e)l(rr)q(o)-7 b(r)53 b(i)s(ndica)-8 b(tio)l(n.)0 2354 y Fu(13.3)197 b(Pivotin)-7 b(g)4 2773 y FM(D)8 b(Y)g(L)g(P)52 b FP(of)n(fe)l(rs)46 b(two)f(\003a)-7 b(vo)i(urs)45 b(of)h(d)-7 b(ual)45 b(pivoti)s(n)n(g:)60 b(A)46 b(s)-5 b(t)s(andar)q(d)45 b(d)-7 b(ual)45 b(pivot)h(algo)-7 b(r)s(ithm)44 b(i)s(n)i(whic)-7 b(h)45 b(a)h(s)n(i)s(n)n(gl)n(e)f(pr)s(i)s(mal)0 2972 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)j(is)g(s)m(e)l(l)n(ec)-5 b(te)l(d)49 b(and)e(pivote)l(d)g(i)s(nto)h(th)l(e)f(bas)n(is,)j(and)d (a)h(g)n(en)n(e)l(ralis)m(e)l(d)f(d)-7 b(ual)47 b(pivot)g(algo)-7 b(r)s(ithm)47 b([8,)i(\24710.2])e(i)s(n)0 3172 y(whic)-7 b(h)57 b(m)l(u)l(ltipl)n(e)g(pr)s(i)s(mal)h(v)r(ar)s(i)s(a)l(b)l(l)n(e) o(s)g(may)g(und)-5 b(e)l(rgo)56 b(bo)-5 b(und-to-bo)g(und)56 b(\003ips)h(pr)s(io)-7 b(r)58 b(to)g(th)l(e)g(bas)n(is)g(pivot.)80 b(T)8 b(h)l(e)0 3371 y(c)-7 b(h)n(oic)h(e)70 b(of)f(s)-5 b(t)s(andar)q(d)70 b(o)-7 b(r)69 b(g)n(en)n(e)l(ralis)m(e)l(d)f(d)-7 b(ual)69 b(pivoti)s(n)n(g)f(can)h(be)g(c)l(o)l(ntr)q(o)-5 b(ll)n(e)l(d)69 b(with)f(an)h(o)-5 b(ptio)l(n;)80 b FM(D)8 b(Y)g(L)g(P)75 b FP(will)69 b(u)-7 b(s)m(e)0 3570 y(g)n(en)n(e)l(ralis) m(e)l(d)51 b(pivoti)s(n)n(g)g(by)i(d)-5 b(e)l(fa)d(u)l(lt.)249 3869 y(Fig)n(ur)q(e)62 b(8)h(s)-8 b(h)n(ows)62 b(th)l(e)g(call)h(s)-5 b(tru)g(c)g(t)l(ur)q(e)62 b(of)h(th)l(e)f(d)-7 b(ual)62 b(pivot)h(algo)-7 b(r)s(ithm.)94 b(T)8 b(h)l(e)62 b(r)q(o)-5 b(u)l(ti)s(n)n(e)63 b FJ(dualin)g FP(i)s(mpl)n(e)n(ments)0 4068 y(s)-5 b(t)s(andar)q(d)53 b(d)-7 b(ual)52 b(pivoti)s(n)n(g;)f FJ(dualm)m(ultin)h FP(i)s(mpl)n(e)n(ments)h(g)n(en)n(e)l(ralis)m(e)l(d) e(d)-7 b(ual)52 b(pivoti)s(n)n(g.)325 9941 y @beginspecial 63 @llx 282 @lly 492 @urx 620 @ury 4290 @rwi @setspecial %%BeginDocument: /devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/dualpivcalls.eps %!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/dualpivcalls.epsu %%Creator: IslandDraw for lou %%CreationDate: Thu Sep 15 14:17:38 2005 %%Pages: 1 %%BoundingBox: 63 282 492 620 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 537 423 1 846 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000054 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005d % 00000000000000000000000000000000000000000000000000000000000000018000c000000000 % 0000000000000000000000000000000000000000000000000000000065 % 000000000000000000000000000000000000000000000000000000000000000080004040000000 % 000000000000000000000000000000000000000000000000000000006e % 000000000000000000000000000000000000000000000000000000000000000080004040000000 % 0000000000000000000000000000000000000000000000000000000076 % 000000000000000000000000000000000000000000000000000000000000000f9dc05cff9e6e00 % 000000000000000000000000000000000000000000000000000000007f % 000000000000000000000000000000000000000000000000000000000000001888806644213100 % 0000000000000000000000000000000000000000000000000000000007 % 000000000000000000000000000000000000000000000000000000000000e0108c804244072100 % 0000000000000000000000000000000000000000000000000000000010 % 000000000000000000000000000000000000000000000000000000000003e01085004244192100 % 0000000000000000000000000000000000000000000000000000000018 % 00000000000000000000000000000000000000000000000000000000000f801185004644232100 % 0000000000000000000000000000000000000000000000000000000021 % 00000000000000000000000000000000000000000000000000000000003e000ec2007c7e1df380 % 0000000000000000000000000000000000000000000000000000000029 % 0000000000000000000000000000000000000018000300100000000000f8000002000000000000 % 0000000000000000000000000000000000000000000000000000000032 % 0000000000000000000000000000000000000008000100100000000003e000000e3f0000000000 % 000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000000800010000000000000f80000018000000000000 % 0000000000000000000000000000000000000000000000000000000043 % 00000000000000000000000000000000000000f884f13733bf9e7ee03e00000000000000000000 % 000000000000000000000000000000000000000000000000000000004b % 00000000000000000000000000000000000001898d09399114332440f800000000000000000000 % 0000000000000000000000000000000000000000000000000000000054 % 000000000000000000000000000000000006010884391091a4213640f000000000000000000000 % 000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000006010884c91090a4211a807c00000000000000000000 % 0000000000000000000000000000000000000000000000000000000065 % 00000000000000000000000000000000000601188d191190c4231b001f00000000000000000000 % 000000000000000000000000000000000000000000000000000000006d % 00000000000000000000000000000000000600ec76ef9f384e1e090007c0000000000000000000 % 0000000000000000000000000000000000000000000000000000000076 % 00000000000000000000000000000000000c0000000010000000000001f0000000000000000180 % 00000c000000000000000000000000000000000000000000000000007e % 00000000000000000000000000000000000c00000000100000000000007c000000000000000080 % 1000040000000000000000000000000000000000000000000000000007 % 00000000000000000000000000000000000c00000000380000000000001f000000000000000080 % 100004000000000000000000000000000000000000000000000000004c % 000000000000000000000000000000000008000000000000000000000007c00f1e6e1bdcd00f8f % 3de3c40000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000018000000000000000000000001e018b3312489201899 % 9316640000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000018000000000000000000000000601021213ac9d01090 % 9204240000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000018000000000000000000000000001021210650301090 % 920424000000000000000000000000000000000000000000000000006a % 0000000000000000000000000000000000300000000000000000000000000018a3212251101191 % 9314640000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000030000000000000000000000000000f1e73bc21e00ecf % 1de3ce0000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000030000000000000000000000000000000000020000000 % 0000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000300000000000000000000000000000000000e007e000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000000060000000000000000000000000000000000180000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000060000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000060000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000000040000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005c % 0000000000000000000000000000000000c0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000000000000c0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000c0000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000000000180000000000000000000000000000000000000000000 % 000000000000000000000000000c0000c0000006000000000000000055 % 000000000000000000000000000000000180000000000000000000000000000000000000000000 % 0000000000000000000000000004000040000002000000000000000055 % 000000000000000000000000000000000180000000000000000000000000000000000000000000 % 0000000000000000000000000004000040000002000000000000000055 % 000000000000000000000000000000000180000000000000000000000000000000000000000000 % 000000000000000000000000007c42784f1e6e3e00f376370000000063 % 000000000000000000000000000000000300000000000000000000000000000000000000000000 % 00000000000000000000000180c4c68458a13162018999398000000055 % 000000000000000000000000000000000300000000000000000000000000000000000000000000 % 0000000000000000000000078084421c50072142010111108000000011 % 000000000000000000000000000000000300000000000000000000000000000000000000000000 % 00000000000000000000001e0084426450192142010111108000000000 % 000000000000000000000000000000000200000000000000000000000000000000000000000000 % 000000000000000000000078008c468c58a32146018911118000000055 % 000000000000000000000000000000000600000000000000000000000000000000000000000000 % 0000000000000000000001e000763b76ef1df3bb00f3bb9f0000000055 % 00000000000000000000000000000000060000000000000000000000000000000000000fc000fc % 000067000e800003000007800000000000000000000000100000000055 % 000000000000000000000000000000000600000000000000000000000000000000000004600046 % 000022001180000100001e0000000000000000007e0000100000000055 % 000000000000000000000000000000000c00000000000000000000000000000000000004100043 % 0000220020800001000078000000000000000000000000380000000032 % 000000000000000000000000000000000c000000000000000000000000000000d3cf1b848f3e41 % 211e226e204f371f0d01e0000000000000000000000000000000000037 % 000000000000000000000000000000000c00000000000000000000000000060126308c47999041 % 63212231201098b1120380000000000000000000000000000000000037 % 000000000000000000000000000000000c000000000000000000000000000601d4038844909041 % 21072221200390a11d03c0000000000000000000000000000000000055 % 0000000000000000000000000000000018000000000000000000000000000c00340c8844109043 % 21192221204c90a10300f0000000000000000000000000000000000033 % 0000000000000000000000000000000018000000000000000000000000000c011631884e119042 % 23232721109190a311003c000000000000000000000000000000000055 % 0000000000000000000000000000000018000000000000000000000000000c01e3cedcee0f38fc % 1d9df7738f0ef9dd9e000f00000000000000003e000001f10000000055 % 000000000000000000000000000000001000000000000000000000000000180000000000000000 % 0000000000000000000003c0000000000002004200000089000080005b % 000000000000000000000000000000003000000000000000000000000000180000000000000000 % 0000000000000000000000f00000000000020041000000880000800000 % 000000000000000000000000000000003000000000000000000000000000300000000000000000 % 00000000000000000000003c0373ef3761e79c7078dc708b3bf9e00055 % 000000000000000000000000000000003000000000000000000000000000300000000000000000 % 00000000000000000000000f0399199993323e1e8462f8f111cc800046 % 000000000000000000000000000000006000000000000000000000000000300000000000000000 % 00000000000000000000000381091091121220011c4280811a84800055 % 000000000000000000000000000000006000000000000000000000000000600000000000000000 % 0000000000000000000000000109109112122041644280810a84800055 % 000000000000000000000000000000006000000000000000000000000000600000000000000000 % 00000000000000000000000001191191123232628c42c8c10c8c800055 % 000000000000000000000000000000006000000000000000000000000000c00000000000000000 % 00000000000000000000000001f38f3bb9e39c7c76e771c38478e0000f % 00000000000000000000000000000000c000000000000000000000000000c000001800007b9e02 % 0000003800e0000000000000010000000000000000000000000000002c % 00000000000000000000000000000000c000000000000000000000000000c00000080004331a26 % 000002100100000000000000010000000000000000000000000000002b % 00000000000000000000000000000000c000000000000000000000000001800000080004310822 % 000002100100000000000000038000000000000000000000000000002b % 0000000000000000000000000000000080000000000000000000000000018000d388e1ef11967a % e1e217937380000000000000000000000000000000000000000000002a % 000000000000000000000000000000018000000000000000000000000003000127c9f3141a9223 % 133632118900000000000000000000000000000000000000000000002c % 0000000000000000000000000000000180000000000000000000000000030601d40902041ad222 % 121212110900000000000000000000000000000000000000000000002b % 0000000000000000000000000000000180000000000000000000000000030e00340902040ae222 % 121212110900000000000000000000000000000000000000000000002b % 0000000000000000000000000000000300000000000000000000000000060c01164993140c6222 % 123232390900000000000000000000000000000000000000000000002a % 0000000000000000000000000000000300000000000000000000000000061801e39ce1e704473f % 39e1dbbb9f800000000000000000000000000000000000000000000028 % 00000000000000000000000000000003000000000000000000000000000c380000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000000000003000000000000000000000000000c300000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000000000006000000000000000000000000000c600000000000000000 % 000000000000000000000000000000000000000000000000000000002a % 000000000000000000000000000000060000000000000000000000000018e00000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 000000000000000000000000000000060000000000000000000000000018c00000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000000000000040000000000000000000000000031800000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 0000000000000000000000000000000c0000000000000000000000000033800000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 0000000000000000000000000000000c0000000000000000000000000033000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 0000000000000000000000000000000c0000000000000000000000000066000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000000000000018000000000000000000000000006e0000001800007b9e02 % 03800e00000000000c01c0073a40000000000000000180003800000056 % 0000000000000000000000000000001800000000000000000000000000cc000000080004331a26 % 01001000000000000400800846c0000000000000000080004400000056 % 0000000000000000000000000000001800000000000000000000000000d8000000080004310822 % 0100100000000000040080088240000006000000000080004400000056 % 0000000000000000000000000000001800000000000000000000000000f80000d388e1ef11967a % e1373800000000f3c4789b9c815c3cdc38e00000000f9dc0eff9e6e056 % 0000000000000000000000000000003000000000000000000000000001b0060127c9f3141a9223 % 11189003ffff818c24c48c488062426245f03ffff81888804442131056 % 0000000000000000000000000000003000000000000000000000000001e01e01d40902041ad222 % 11109003ffff8100e480884880420e4245003ffff8108c804440721056 % 0000000000000000000000000000003000000000000000000000000003e07c00340902040ae222 % 1110900000000103248088488142324239000000001085004441921056 % 0000000000000000000000000000002000000000000000000000000003c1f001164993140c6222 % 139090000000018c64c5c8484242464241900000001185004442321056 % 000000000000000000000000000000600000001800030000030088000387c001e39ce1e704473f % 3bb9f800000000f3be79dcfc3ce73be77ce00000000ec200e7e1df3856 % 00000000000000000000000000000060000000080001000001108800079f000000000000000000 % 0000000000000000000000000000000046000000000002000000000056 % 00000000000000000000000000000060000000080001000001100000077c000000000000000000 % 00000000000000000000000000000000c600000000000e7e0000000010 % 000000000000000000000000000000c0000000f884f13761093d9b700ff0000000000000000000 % 0000000000000000000000000000000078000000000018000000000056 % 000000000000000000000000000000c0000001898d091993191089880fc0000000000000000000 % 0000000000000000000000000000000000000000000000000000000040 % 000000000000000000000000000000c00002010884391111091089080f00000000000000000000 % 000000000000000000000000000000000000000000000000000000007f % 000000000000000000000000000000c00006010884c91111091089080f00000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000180000601188d191111191089080fc0000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000180000c00ec76efbbb8ef9ddf9c0ff0000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000180000c00000000000000000000077c000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000100001800000000000000000000079f000030000700000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000003000018000000000000000000000387c00010000880000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000030000380000000000000000000003c1f00010000880000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000030000300000000000000000000003e07c01f3b81defbc6e00 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000060000700000000000000000000001e01e0311100884423100 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000060000600000000000000000000001b00602119008840e2100 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000060000600000000000000000000000f8000210a00884322100 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000060000c00000000000000000000000d8000230a00884462100 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000c0000c00000000000000000000000cc0001d8401cee3b7380 % 0000000000000000000000000000000000000000000000000000000003 % 00000000000000000000000000000c00018000000000000000000000006e000000400000000000 % 0000000000000000000000000000000000000000000000000000000040 % 00000000000000000000000000000c000180000000000000000000000066000001c7e000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000008000300000000000000000000000033000003000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000018000300000000000000000000000033800000000000000000 % 0000000000000000000000000000000000000000000000000000000024 % 000000000000000000000000000018000600000000000000000000000031800000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000018000600000000000000000000000018c00000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000030000e00000000000000000000000018e00000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000030000c0000000000000000000000000c600000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 000000000000000000000000000030001c0000000000000000000000000c300030000000018000 % 0000080000300000000000000000000000000000000000000000000064 % 00000000000000000000000000003000180000000000000000000000000c380010000000008010 % 0000080000100000000000000000000000000000000000000000000070 % 000000000000000000000000000060001800000000000000000000000006180010000000008010 % 0000000000100000000000000000000000000000000000000000000030 % 0000000000000000000000000000600030000000000000000000000000060c01f3b8084dcf8f3c % e377d9bb1e11a000000000000000000000000000000000000000000054 % 0000000000000000000000000000600030000000000000000000000000030e03111018ce789091 % f39a08cca112400000000000000000000000000000000000000000005d % 000000000000000000000000000040006000000000000000000000000003060211900844308391 % 010a08888713a000000000000000000000000000000000000000000065 % 0000000000000000000000000000c0006000000000000000000000000003000210a00844308c91 % 010a08889910600000000000000000000000000000000000000000006e % 0000000000000000000000000000c000c000000000000000000000000001800230a008c4719191 % 911a0888a3122000000000000000000000000000000000000000000076 % 0000000000000000000000000000c000c0000000000000000000000000018001d8400767cecedc % e1f71dddddbbc00000000000000000000000000000000000000000007f % 000000000000000000000000000180018000000000000000000000000000c00000400004000000 % 0100000000000000000000000000000000000000000000000000000007 % 000000000000000000000000000180018000000000000000000000000000c00001c7e004000000 % 0100000000000000000000000000000000000000000000000000000010 % 000000000000000000000000000180038000000000000000000000000000c0000300000e000000 % 0380000000000000000000000000000000000000000000000000000018 % 000000000000000000000000000180030000000000000000000000000000600000000000000000 % 0000000000000000000000000000000000000000000000000000000021 % 000000000000000000000000000300070000000000000000000000000000600000000000000000 % 0000000000000000000000000000000000000000000000000000000029 % 000000000000000000000000000300060000000000000000000000000000300000000000000000 % 0000000000000000000000000000000000000000000000000000000032 % 000000000000000000000000000300060000000000000000000000000000300000000000000000 % 000000000000000000000000000000000000000000000000000000003a % 0000000000000000000000000002000c0000000000000000000000000000300000000000000000 % 0000000000000000000000000000000000000000000000000000000043 % 0000000000000000000000000006000c0000000000000000000000000000180000000000000000 % 000000000000000000000000000000000000000000000000000000004b % 000000000000000000000000000600180000000000000000000000000000180030000000001e00 % 001f80000cf88000000000000000000000000000000000000000000054 % 0000000000000000000000000006001800000000000000000000000000000c0010000000002200 % 0008c0000444800040000000000000000000000000000000000000005c % 000000000000000000000000000c003000000000000000000000000000000c0010000000002000 % 0008600004440000400000000000000000000000000000000000000065 % 000000000000000000000000000c003000000000000000000000000000000c01f3b80f1e6e767f % 7608242784459dfcf0000000000000000000000000000000000000006d % 000000000000000000000000000c006000000000000000000000000000000603111018b3312221 % 99082c68447888e6400000000000000000000000000000000000000076 % 000000000000000000000000000c00600000000000000000000000000000060211901021212221 % 11082421c4408d4240000000000000000000000000000000000000007e % 000000000000000000000000001800e00000000000000000000000000000000210a01021212221 % 1108642644408542400000000000000000000000000000000000000007 % 000000000000000000000000001800c00000000000000000000000000000000230a018a3212221 % 11084468c460864640000000000000000000000000000000000000004c % 000000000000000000000000001801c000000000000000000000000000000001d8400f1e73f773 % bb9f83b76ee1c23c700000000000000000000000000000000000000055 % 000000000000000000000000001001800000000000000000000000000000000000400000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000003001800000000000000000000000000000000001c7e000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000003003000000000000000000000000000000000003000000000000 % 000000000000000000000000000000000000000000000000000000006a % 000000000000000000000000003003000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000006006000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000006006000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000600c000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000600c000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000c018000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000c018000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000c038000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000008030000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000018070000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000018060000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000018060000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000300c0000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000300c0000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000030180000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000063 % 00000000000000000000000003018000000000000000000000000000c0000040c0008000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000006030000000000000000000000000000400000c040008000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000060300000000000000000000000000004000004056000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000006060000000000000000000000000007cee03c5c48dd9dc0000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000406000000000000000000000000180c4440626250e68880000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000c0e00000000000000000000000018084640404278428d00000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000c0c00000000000000000000000030084280404248428500000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000c1c0000000000000000000000007008c28062424c468600000000 % 0000000000000000000000000000000000000000000000000000000032 % 0000000000000000000000001818000000000000000000000000600761003ce7ee7dc200000000 % 0000000000000000000000000000000000000000000000000000000037 % 0000000000000000000000001818000000000000000000000000c0000100000000400000000000 % 0000000000000000000000000000000000000000000000000000000037 % 0000000000000000000000001830000000000000000000000001c000071f800000400000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000183000000000000000000000000180000c00000000e00000000000 % 0000000000000000000000000000000000000000000000000000000033 % 000000000000000000000000306000000000000000000000000300000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000306000000000000000000000000700000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000030c000000000000000000000000600000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005b % 00000000000000000000000020c000000000000000000000000c00000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000618000000000000000000000001c00000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000061800000000000000000000000180000c0c4006000200000000000 % 0000000000000000000000000000000000000000000000000000000046 % 000000000000000000000000638000000000000000000000003000004044002004600000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000c30000000000000000000000007000004040002004200000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000c7000000000000000000000000600007c7ccfbe3cf2e77dce3e000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000c6000000000000000000000000c0000c4c444626643122e7f10000 % 000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000c6000000000000000000000001c038084844442424213243010000 % 000000000000000000000000000000000000000000000000000000002c % 0000000000000000000000018c00000000000000000000000180f8084844442424211443010000 % 000000000000000000000000000000000000000000000000000000002b % 0000000000000000000000018c00000000000000000000000303e008c8c4446464211447910000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000001980000000000001800031000070f8007676ee3b3c773887ce38000 % 000000000000000000000000000000000000000000000000000000002a % 000000000000000000000001180000000000000800011000063e00000000000000000840000000 % 000000000000000000000000000000000000000000000000000000002c % 0000000000000000000000033000000000000008000100000cf800000000000000003840000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000330000000000000f884f133701fe0000000000000000060e0000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000360000000000001898d0911881f8000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002a % 0000000000000000000000066000000000000108843911083e0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000028 % 000000000000000000000006e0000000001e010884c91108380000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000006c000000000fc01188d1911083e0000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000007c000000007e000ec76efbb9c1f8000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002a % 00000000000000000000000d800000003f000000000000001de000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 00000000000000000000000d80000001f8000000000000000e78000600c0004000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000f0000000fc000000000000000061e0002004008c000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000b0000007e0000000000000000070780020040084000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000001e000003f000000000000000000381e002e7c79e5cefb8e7c0000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000001e00001f800000000000000000018078033c4cc86245cdf200000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000001c0000fc00000000000000000001c018021848484264850200000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000003c0007e000000000000000000000e000021848484228850200000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000038003f000000000000000000000060000238c8c842288d9200000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000003801f80000000000000000000000700003e7678ee710f8e700000000 % 0000000000000000000000000000000000000000000000000000000056 % 0300001800030010000000380fc000000000000000000000003800000000000010800000000000 % 0000000000000000000000000000000000000000000000000000000056 % 0100000800010010000800707e0000000000000000000000001800000000000070800000000000 % 0000000000000000000000000000000000000000000000000000000056 % 010000080001000000080073f00000000000000000000000001c000000000000c1c00000000000 % 0000000000000000000000000000000000000000000000000000000056 % 1f3b80f884f13733bf9e007f800000000000000000000000000e00000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 311101898d0939911cc8007c000000000000000000000000000600000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 2119010884391091a8480070000000000000000000000000000700000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 210a010884c91090a8480078000000000000000000000000000380000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000010 % 230a01188d191190c8c8007e000000000000000000000000000180000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 1d8400ec76ef9f38478e007f0000000000000000000000000001c0000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000040 % 00040000000010000000003fc000000000000000000000000000e00060000000007800007e0000 % 31f200000000000000000000000000000000000000000000000000007f % 001c7e00000010000000003fe00000000000000000000000000060002000000000880000230000 % 108a000080000000000000000000000000000000000000000000000011 % 00300000000038000000003ff80000000000000000000000000070002000000000800000218000 % 1088000080000000000000000000000000000000000000000000000011 % 00000000000000000000003ffc000000000000000000000000003803eee03c79b9d9fdd820908f % 108e7779e0000000000000000000000000000000000000000000000011 % 00000000000000000000001fef000000000000000000000000001806244062ccc488866420b190 % 90f222cc80000000000000000000000000000000000000000000000011 % 00000000000000000000001ff78000000000000000000000000018042640408484888444209083 % 9082348480000000000000000000000000000000000000000000000011 % 00000000000000000000001ff9e00000000000000000000000000004228040848488844421908c % 9082148480000000000000000000000000000000000000000000000011 % 00000000000000000000000ffcf000000000000000000000000000046280628c84888444211191 % 90c2188c80000000000000000000000000000000000000000000000011 % 00000000000000000000000ffe3c0000000000000000000000000003b1003c79cfddceee7e0ece % f9c70878e0000000000000000000000000000000000000000000000011 % 00000000000000000000000fff1e00000000000000000000000000000100000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000ffb878000000000000000000000000000071f800000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000007fdc3c0000000000000000000000000000c00000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000007fee0f0000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000007ff7078000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000003 % 000000000000000000000003fb381e000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000040 % 000000000000000000000003ff9c0f000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000003ffce03c00000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000003fee701e00000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000024 % 000000000000000000000001ff6380780000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000001ff71c03c0000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000001ffb8e00f0000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000bfdc70078000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 000000000000000000000000ffcc3801e000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000064 % 000000000000000000000000df6e1c00f000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000070 % 000000000000000000000000dfe70e003c00000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000030 % 0000000000000000000000007fb387001e00000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000054 % 0000000000000000000000006ff983800780001800038000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005d % 0000000000000000000000006fd9c1c003c0000800044000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000065 % 0000000000000000000000002fece0e000f0000800044000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000006e % 00000000000000000000000037ec7070007800f9dc0eff9e6e0000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000076 % 00000000000000000000000037f63038001e018888044421310000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000007f % 00000000000000000000000033b7381c000e0108c8044407210000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000007 % 0000000000000000000000001bfb1c0e0000010850044419210000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000010 % 0000000000000000000000001bd98e070000011850044423210000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000018 % 00000000000000000000000019fd8603800000ec200e7e1df38000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000021 % 00000000000000000000000009ecc701c000000020000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000029 % 0000000000000000000000000dbee380e0000000e7e00000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000032 % 0000000000000000000000000cf661c07000000180000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000003a % 0000000000000000000000000cf730c03800000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000043 % 000000000000000000000000067b30e01c00000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000004b % 000000000000000000000000067b98700e00000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000054 % 000000000000000000000000066d9c380700000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000023dcc180380000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000065 % 0000000000000000000000000336c61c01c0000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000006d % 0000000000000000000000000336e60e00e0001800030300000001000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000076 % 000000000000000000000000031e63070070000800010100000001000000000000000000000000 % 000000000000000000000000000000000000000000000000000000007e % 000000000000000000000000019b73830038000800010100060000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000007 % 000000000000000000000000018f3183801c00f884f11f1c38e373370000000000000000000000 % 000000000000000000000000000000000000000000000000000000004c % 000000000000000000000000018db8c1c00e01898d09313e45f189188000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000008d98c0e006010884392120450109108000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000c6dc606000010884c92120390109108000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000c6cc70700001188d192332419109108000000000000000000000 % 000000000000000000000000000000000000000000000000000000006a % 00000000000000000000000000c6ce30380000ec76ef9d9c7ce39fb9c000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000006366181c00000000000000460000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000006367180c00000000000000c60000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000061b30c0e00000000000000780000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000021b38e0700000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000003199860380000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000030d9c30180000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000030d8c301c0000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005c % 0000000000000000000000000018cce180e0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000186c61c070000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000186670c03000180000c000181800000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000d % 000000000000000000000000000836306038000800004000080800000000001000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000c3338601c000800004000080800300000001000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000c3318300e00f9dc07c84788f8e1c7370f10bc00000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000c1b1c38060188880c58c84989f22f9899b19000000000000000 % 0000000000000000000000000000000000000000000000000000000063 % 0000000000000000000000000006198c18060108c8084841c90902281090909000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000006198e0c00010850084846490901c81090909000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000060cc60c0001185008c8c8c919920c9091919000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000020cc7060000ec200767677cece3e739cf0edc00000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000306630700000020000000000002300000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000003066383000000e7e00000000006300000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000306618180000180000000000003c00000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000018331c180000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000032 % 00000000000000000000000000018330c0c0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000037 % 00000000000000000000000000018318e0e0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000037 % 000000000000000000000000000081986060000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000000c18c7030000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000033 % 0000000000000000000000000000c0cc3030000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000000c0cc3818001800000181800001000004000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000060c6181c000800000080900001000004000000000000000000 % 000000000000000000000000000000000000000000000000000000005b % 000000000000000000000000000060661c0c000800000080900000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000060630c0600f9dc078f8fbcf3733bf9cc000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000020630e06018888085898919b991143e4000000000000000000 % 0000000000000000000000000000000000000000000000000000000046 % 0000000000000000000000000000303186000108c801d0909109091a4204000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000000303187000108500650909109090a4204000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000003019830001185008d1919119190c4324000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000001818c38000ec20076ecedcf1f384e1c4000000000000000000 % 000000000000000000000000000000000000000000000000000000000f % 00000000000000000000000000001818c180000020000000000100000004000000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 0000000000000000000000000000180c61c00000e7e00000000100000014000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 0000000000000000000000000000080c60c0000180000000000380000038000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000000000c0c30e0000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002a % 00000000000000000000000000000c063060000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 00000000000000000000000000000c063070000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000000000006031830000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000000000006031838000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002a % 000000000000000000000000000006030c18001800038000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000028 % 000000000000000000000000000002018c1c000800040002000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000000000301860c000800040002000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 00000000000000000000000000000301860e00f9dc0e78f79e7c00000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002a % 00000000000000000000000000000300c60601888804858a332000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 00000000000000000000000000000180c3060108c8041d02212000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000000000001806300010850046502212000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000002b % 000000000000000000000000000001806180011850048d8a232000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000000000000080618000ec200e76f39e7000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000c030c0000020000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000c030c00000e7e00000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000c030c0000180000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000601860000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000601860000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000600c30000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000200c30000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000300c18000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000300618000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000300618001800000800000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000000000000018060c000800000800020000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 00000000000000000000000000000018030c000800000000020000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000010 % 00000000000000000000000000000018030600f9dc0dd9dde78000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000056 % 0000000000000000000000000000000801860188880e688b320000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000040 % 0000000000000000000000000000000c01820108c80428d2120000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000007f % 0000000000000000000000000000000c0180010850042852120000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000000c00c0011850046862320000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000000600c000ec2007dc21e38000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000000600c0000020040000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000000600600000e7e40000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 0000000000000000000000000000000200600001800e0000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000030030000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000030030000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000030030000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000018018000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000018018000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000018018000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000000800c001800030000030000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000003 % 00000000000000000000000000000000c00c000800010000010020000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000040 % 00000000000000000000000000000000c006000800010000010020000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000000c00600f884f1109b9f1e79c00000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000600601898d09319cf12123e00000000000000000000000 % 0000000000000000000000000000000000000000000000000000000024 % 000000000000000000000000000000006002010884391088610722000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000006000010884c91088611922000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000200001188d191188e32323200000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000300000ec76ef8ecf9d9db9c00000000000000000000000 % 000000000000000000000000000000000000000000000000000000002c % 000000000000000000000000000000003000000000000008000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000064 % 000000000000000000000000000000003000000000000008000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000070 % 00000000000000000000000000000000180000000000001c000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000030 % 000000000000000000000000000000001800000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000054 % 000000000000000000000000000000001800000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000005d % 000000000000000000000000000000000800000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000065 % 000000000000000000000000000000000c00000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000006e % 000000000000000000000000000000000c00000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000076 % 000000000000000000000000000000000c00000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000007f % 000000000000000000000000000000000600000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000007 % 000000000000000000000000000000000600000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000010 % 000000000000000000000000000000000600000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000018 % 000000000000000000000000000000000200000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000021 % 000000000000000000000000000000000300000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000029 % 000000000000000000000000000000000300000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000032 % 000000000000000000000000000000000300000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000180000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000043 % 000000000000000000000000000000000180000000000000000000000000003000030000800001 % 800000000000000000000000000000000000000000000000000000004b % 000000000000000000000000000000000180000000000000000000000000001000010000800000 % 8000000000000000000000000000000000000000000000000000000054 % 000000000000000000000000000000000080000000000000000000000000001000010000000000 % ac0000000000000000000000000000000000000000000000000000005c % 0000000000000000000000000000000000c000000000000000000000000001f108f1377d8f38ee % 9000000000000000000000000000000000000000000000000000000065 % 0000000000000000000000000000000000c00000000000000000000000000313190939a098fc2c % a00000000000000000000000000000000000000000000000000000006d % 0000000000000000000000000000000000c000000000000000000000000e0211083910a0904010 % f000000000000000000000000000000000000000000000000000000076 % 00000000000000000000000000000000006000000000000000000000001c021108c910a0904038 % 900000000000000000000000000000000000000000000000000000007e % 0000000000000000000000000000000000600000000000000000000000380231191911a098e44c % 9800000000000000000000000000000000000000000000000000000007 % 00000000000000000000000000000000006000000000000000000000007001d8ecef9f71cf38ef % dc0000000000000000000000000000000000000000000000000000004c % 0000000000000000000000000000000000200000000000000000000000e0000000001000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000000000000300000000000000000000001c0000000001000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000030000000000000000000000380000000003800000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000030000000000000000000000700000000000000000000 % 000000000000000000000000000000000000000000000000000000006a % 000000000000000000000000000000000018000000000000000000000e00000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000018000000000000000000001c00000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000018000000000000000000003800000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000008000000000000000000007000000000000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 00000000000000000000000000000000000c00000000000000000000e000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000000000000c001800000000c0000001c000003000180000000000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000000000000c000800000000400800038000001000080800000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000000006000800000000400800070000001000080800000000 % 000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000000600f86b842dc7c79e700e000001f3b80b9efbcdc000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000006018897cc6e6c4848f80fffff8311100cc844262000 % 0000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000020108ec04242841c8800fffff021190084840e42000 % 000000000000000000000000000000000000000000000000000000000d % 00000000000000000000000000000000000001081c0424284648800e00000210a0084843242000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000000000000001188e446468c8c8c80700000230a008c844642000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000000000000000ecf383b7c7676e7003800001d8400f8ee3be7000 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000000000000000000000040000000001c000000040000000000000 % 0000000000000000000000000000000000000000000000000000000063 % 00000000000000000000000000000000000000000000040000000000e0000001c7e00000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000e00000000007000000300000000000000 % 0000000000000000000000000000000000000000000000000000000011 % 000000000000000000000000000000000000000000000000000000003800000000000000000000 % 0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000001c00000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000000000000000e00000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000000000000000700000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000000000000000380000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000000000000000000000000000000000001c0000000000000000000 % 0000000000000000000000000000000000000000000000000000000032 % 0000000000000000000000000000000000000000000000000000000000e0003000018000400400 % 0000000000000000000000000000000000000000000000000000000037 % 000000000000000000000000000000000000000000000000000000000070001000008000400440 % 0000000000000000000000000000000000000000000000000000000037 % 000000000000000000000000000000000000000000000000000000000038001000008000000040 % 0000000000000000000000000000000000000000000000000000000055 % 00000000000000000000000000000000000000000000000000000000001c01f3b80f86b8cdccf0 % 0000000000000000000000000000000000000000000000000000000033 % 00000000000000000000000000000000000000000000000000000000000e03111018897c462440 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000000000000000004021190108ec0442440 % 0000000000000000000000000000000000000000000000000000000055 % 0000000000000000000000000000000000000000000000000000000000000210a01081c0442440 % 000000000000000000000000000000000000000000000000000000005b % 0000000000000000000000000000000000000000000000000000000000000230a01188e4442440 % 0000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001d8400ecf38ee7e70 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000000000000000000000040000000000000 % 0000000000000000000000000000000000000000000000000000000046 % 0000000000000000000000000000000000000000000000000000000000000001c7e00000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000000000000000000000300000000000000 % 0000000000000000000000000000000000000000000000000000000055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000055 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 45 121.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1244 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dualpivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 76.077 115.919] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -628 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualin) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 84.624 113.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (ddirdothyper) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 84.737 118.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (bdothyper) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 84.624 108.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_chkpiv) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 84.737 123.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_confirmDualPivot) s savemat setmatrix n 82.237 107.5 m 77.237 115 l gsave 0 0 0 0.176 0 B grestore n 82.237 112.5 m 77.237 115 l gsave 0 0 0 0.176 0 B grestore n 82.237 117.5 m 77.237 115 l gsave 0 0 0 0.176 0 B grestore n 82.237 122.5 m 77.237 115 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 85.249 88.419] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1148 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualmultiin) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.262 76.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (scanForDualInCands) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.262 81.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selectWithoutInf) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.262 86.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selectWithInf) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.262 96.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_updateprimals) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.262 101.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_confirmDualPivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 139.262 78.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (promoteSanePivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 125.915 86.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (calcInfChange) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.262 91.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_ftran) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 158.697 86.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_ftran) s savemat setmatrix n 118.91 85 m 123.91 85 l gsave 0 0 0 0.176 0 B grestore n 151.76 85 m 156.76 85 l gsave 0 0 0 0.176 0 B grestore n 91.762 75 m 86.762 87.5 l gsave 0 0 0 0.176 0 B grestore n 91.762 80 m 86.762 87.5 l gsave 0 0 0 0.176 0 B grestore n 91.762 85 m 86.762 87.5 l gsave 0 0 0 0.176 0 B grestore n 91.762 90 m 86.762 87.5 l gsave 0 0 0 0.176 0 B grestore n 91.762 95 m 86.762 87.5 l gsave 0 0 0 0.176 0 B grestore n 91.762 100 m 86.762 87.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 152.5 73.7722] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -714 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualcand_cmp) s savemat setmatrix n 132.5 75 m 137.5 72.5 l gsave 0 0 0 0.176 0 B grestore n 132.5 75 m 137.5 77.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 84.05 66.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1080 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualpivrow) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.297 68.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (consys_dotcol) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.297 63.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_btran) s savemat setmatrix n 90.797 62.5 m 85.797 65 l gsave 0 0 0 0.176 0 B grestore n 85.797 65 m 90.797 67.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 82.851 173.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1012 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dseupdate) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 91.947 173.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_btran) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 91.947 178.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dseinit) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 91.947 168.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualpricexk) s savemat setmatrix n 89.447 167.5 m 84.447 172.5 l gsave 0 0 0 0.176 0 B grestore n 84.447 172.5 m 90.291 172.35 l gsave 0 0 0 0.176 0 B grestore n 84.447 172.5 m 89.447 177.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 65 146.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_addtopivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 65 136.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualdegenin) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 65 161.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dualupdate) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 65 151.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_factor) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 65 141.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dualdegenout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 65 131.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_ftran) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 65 156.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_pivot) s savemat setmatrix n 62.5 65 m 47.5 120 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 172.5 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 87.5 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 115 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 130 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 135 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 140 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 145 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 150 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 155 l gsave 0 0 0 0.176 0 B grestore n 47.5 120 m 62.5 160 l gsave 0 0 0 0.176 0 B grestore grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore %%EndDocument @endspecial 2364 10306 a(Fig)n(ur)q(e)h(8:)65 b(Call)53 b(Gra)-6 b(p)g(h)52 b(fo)-7 b(r)53 b(Dual)g(Pivoti)s(n)n(g)3771 11400 y(45)p eop end %%Page: 46 49 TeXDict begin 46 48 bop 249 466 a FP(T)8 b(h)l(e)56 b(\002rs)-5 b(t)56 b(a)n(c)-5 b(tivity)55 b(i)s(n)h FJ(dy_dualpiv)l(ot)g FP(is)g(th)l(e)g(calcu)l(la)-8 b(tio)l(n)54 b(of)i(th)l(e)g(c)l(oe)l (\002)-49 b(\002c)m(ients)55 b(of)h(th)l(e)g(pivot)g(r)q(ow,)p 7097 365 117 7 v 58 w FG(a)7214 491 y Fz(i)7308 466 y FP(=)44 b FH(1)7551 491 y Fz(i)7610 466 y FG(N)17 b FP(,)0 665 y(by)48 b(th)l(e)f(r)q(o)-5 b(u)l(ti)s(n)n(e)48 b FJ(dualpivr)m(o)m(w)p FP(.)64 b(W)m(ith)47 b(th)l(e)h(l)n(ea)-7 b(vi)s(n)n(g)47 b(pr)s(i)s(mal)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(and)g(th) l(e)g(bas)n(is)g(i)s(nve)l(rs)m(e)g(r)q(ow)g(i)s(n)f(hand,)h(o)l(n)n(e) 0 865 y(of)57 b FJ(dy_dualin)h FP(o)-7 b(r)57 b FJ(dualm)m(ultiin)h FP(ar)q(e)f(call)n(e)l(d)h(to)f(s)m(e)l(l)n(ec)-5 b(t)57 b(th)l(e)g(ente)l(r)s(i)s(n)n(g)f(v)r(ar)s(i)s(a)l(b)l(l)n(e.)79 b(\(If)57 b(g)n(en)n(e)l(ralis)m(e)l(d)f(d)-7 b(ual)57 b(pivoti)s(n)n(g)e(is)0 1064 y(i)s(n)e(u)-7 b(s)m(e,)53 b FJ(dualm)m(ultiin)f FP(will)g(pe)l(r)5 b(fo)-7 b(r)5 b(m)53 b(any)f(bo)-5 b(und-to-bo)g(und)51 b(\003ips)h(be)l(fo)-7 b(r)q(e)53 b(r)q(e)-7 b(t)l(ur)5 b(ni)s(n)n(g.\))249 1363 y(Onc)-6 b(e)71 b(th)l(e)g(ente)l(r)s(i)s(n)n(g)f(and)g(l)n(ea)-7 b(vi)s(n)n(g)70 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(ha)-7 b(ve)71 b(been)g(c)-7 b(h)n(os)m(en,)76 b(th)l(e)70 b(a)n(c)-5 b(t)l(ual)71 b(pivot)g(is)g(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)71 b(i)s(n)0 1562 y(s)m(eve)l(ral)c(s)-5 b(te)e(ps.)107 b(Pr)s(io)-7 b(r)67 b(to)f(th)l(e)g(pivot,)k(th)l(e)c(vec)-5 b(to)e(r)69 b FH(t)52 b FP(=)k FG(B)4001 1502 y FA(\0141)4153 1562 y FH(1)4255 1498 y Fz(T)4253 1609 y(k)4414 1562 y FP(is)67 b(calcu)l(la)-8 b(te)l(d)66 b(fo)-7 b(r)67 b(u)-7 b(s)m(e)67 b(d)-7 b(ur)s(i)s(n)n(g)64 b(th)l(e)i(u)-6 b(pda)e(te)66 b(of)0 1761 y(th)l(e)49 b(DSE)f(pr)s(ic)m(i)s(n)n(g)f(i)s (nfo)-7 b(r)5 b(ma)-8 b(tio)l(n.)63 b(T)8 b(h)l(e)49 b(bas)n(is)h(is)f(pivote)l(d)g(n)n(e)-5 b(xt;)50 b(this)f(i)s(nvo)-5 b(lve)o(s)49 b(calls)h(to)f FJ(dy_ftr)m(an)g FP(and)g FJ(dy_piv)l(ot)p FP(,)0 1960 y(as)79 b(o)-5 b(u)l(tli)s(n)n(e)l(d)77 b(i)s(n)g(\2477)-29 b(.3.)141 b(If)79 b(th)l(e)e(bas)n(is)i(c)-7 b(han)n(g)n(e)76 b(s)-8 b(u)j(cc)f(ee)l(ds,)85 b(th)l(e)78 b(pr)s(i)s(mal)g(and)g(d)-7 b(ual)77 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i (ar)q(e)f(u)-6 b(pda)e(te)l(d)0 2160 y(by)71 b FJ(dualupdate)h FP(u)-7 b(s)n(i)s(n)n(g)71 b(th)l(e)h(ite)l(ra)-8 b(tive)71 b(u)-6 b(pda)e(te)72 b(fo)-7 b(r)5 b(m)l(u)l(l\346)70 b(of)i(\2473,)77 b(and)71 b(th)l(en)g(th)l(e)g(DSE)g(pr)s(ic)m(i)s(n)n (g)f(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)0 2359 y(and)58 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)58 b(c)l(os)-5 b(ts)58 b(ar)q(e)h(u)-6 b(pda)e(te)l(d)58 b(by)f FJ(dseupdate)p FP(,)k(u)-7 b(s)n(i)s(n)n(g)58 b(th)l(e)f(u)-6 b(pda)e(te)58 b(fo)-7 b(r)5 b(m)l(u)l(l\346)58 b(of)g(\2474.2.)82 b(A)8 b(s)59 b(a)g(s)n(id)-5 b(e)58 b(e)l(f)n(fec)-5 b(t,)0 2558 y FJ(dseupdate)53 b FP(will)f(s)m(e)l(l)n(ec)-5 b(t)54 b(a)f(l)n(ea)-7 b(vi)s(n)n(g)51 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)j (fo)-7 b(r)53 b(th)l(e)f(n)n(e)-5 b(xt)53 b(pivot.)0 3143 y Fu(13.4)197 b(Se)-5 b(lec)-10 b(tio)-5 b(n)63 b(of)j(th)-9 b(e)67 b(Leavin)-7 b(g)64 b(V)-15 b(ar)r(iab)-5 b(le)0 3563 y FP(T)8 b(h)l(e)62 b(s)m(e)l(l)n(ec)-5 b(tio)l(n)62 b(of)h(th)l(e)f(l)n(ea)-7 b(vi)s(n)n(g)62 b(pr)s(i)s(mal)g(v)r(ar)s(i)s (a)l(b)l(l)n(e)68 b FG(x)3661 3588 y Fz(i)3774 3563 y FP(\(ente)l(r)s(i)s(n)n(g)61 b(d)-7 b(ual)62 b(v)r(ar)s(i)s(a)l(b)l(l)n (e)g FG(y)5772 3588 y Fz(i)5822 3563 y FP(\))g(is)h(ma)-6 b(d)h(e)63 b(u)-7 b(s)n(i)s(n)n(g)62 b(th)l(e)g(d)-7 b(ual)0 3762 y(s)i(tee)e(pe)o(s)i(t)64 b(e)l(dg)n(e)e(c)-8 b(r)s(ite)l(r)s(io)l(n)62 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)63 b(i)s(n)g(\2474.2.)95 b(A)8 b(s)63 b(o)-5 b(u)l(tli)s(n)n(e)l(d)62 b(a)l(bove,)k(th)l(e)c(n)m(o)-7 b(r)5 b(mal)62 b(cas)m(e)i(is)f(tha)-8 b(t)62 b(th)l(e)g(l)n(ea)-7 b(vi)s(n)n(g)0 3961 y(v)r(ar)s(i)s(a)l(b)l (l)n(e)55 b(fo)-7 b(r)54 b(th)l(e)g(fo)-5 b(ll)n(owi)s(n)n(g)52 b(pivot)i(will)g(be)g(s)m(e)l(l)n(ec)-5 b(te)l(d)55 b(as)g FJ(dseupdate)g FP(u)-6 b(pda)e(te)o(s)54 b(th)l(e)g(DSE)f(pr)s(ic)m(i)s (n)n(g)g(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)0 4160 y(fo)h(r)51 b(th)l(e)f(curr)q(ent)f(pivot.)65 b(In)50 b(v)r(ar)s(io)-5 b(u)e(s)51 b(e)-5 b(xc)f(e)f(ptio)l(nal)50 b(c)m(ir)q(cums)-5 b(t)s(anc)f(e)o(s)51 b(wh)l(e)l(r)q(e)e(this)h(doe)o(s)h(n)m(ot)e (occur)-9 b(,)51 b(th)l(e)f(r)q(o)-5 b(u)l(ti)s(n)n(e)0 4360 y FJ(dy_dualout)53 b FP(is)g(call)n(e)l(d)g(to)f(make)h(th)l(e)g (s)m(e)l(l)n(ec)-5 b(tio)l(n.)0 4945 y Fu(13.5)197 b(Stan)-6 b(dar)n(d)63 b(Dual)j(Pivot)0 5364 y FP(Fo)-7 b(r)59 b(th)l(e)g(s)-5 b(t)s(andar)q(d)58 b(d)-7 b(ual)58 b(pivot)h(algo)-7 b(r)s(ithm,)59 b(th)l(e)f(s)m(e)l(l)n(ec)-5 b(tio)l(n)59 b(of)f(th)l(e)h(ente)l(r)s(i)s(n)n(g)e(pr)s(i)s(mal)i(v)r(ar)s(i)s(a)l (b)l(l)n(e)g(\(l)n(ea)-7 b(vi)s(n)n(g)58 b(d)-7 b(ual)0 5563 y(v)r(ar)s(i)s(a)l(b)l(l)n(e\))53 b(is)g(ma)-6 b(d)h(e)53 b(u)-7 b(s)n(i)s(n)n(g)52 b(th)l(e)h(u)-7 b(s)f(ual)52 b(d)-7 b(ual)52 b(pivoti)s(n)n(g)f(ru)l(l)n(e)o(s)i(and)g(a)g(s)m(e)-7 b(t)53 b(of)g(tie-b)-5 b(r)q(eaki)s(n)n(g)52 b(s)-5 b(tra)d(te)j(g)t (ie)o(s.)249 5862 y(L)5 b(e)-7 b(t)48 b FG(x)636 5887 y Fz(i)729 5862 y FP(be)42 b(th)l(e)g(l)n(ea)-7 b(vi)s(n)n(g)41 b(pr)s(i)s(mal)h(v)r(ar)s(i)s(a)l(b)l(l)n(e,)j(fo)-7 b(r)42 b(s)n(i)s(mplic)m(ity)g(of)g(e)-5 b(xpos)n(itio)l(n)41 b(occu)-6 b(pyi)s(n)n(g)40 b(bas)n(is)j(pos)n(itio)l(n)f FG(i)15 b FP(.)63 b FH(1)7571 5887 y Fz(i)7664 5862 y FP(is)0 6061 y(o)-8 b(b)i(t)s(ai)s(n)n(e)l(d)49 b(by)f(calli)s(n)n(g)g FJ(dy_btr)m(an)h FP(to)g(calcu)l(la)-8 b(te)51 b FG(e)3317 6086 y Fz(i)3376 6061 y FG(B)3516 6001 y FA(\0141)3666 6061 y FP(,)f(wh)l(e)l(r)q(e)g FG(e)4389 6086 y Fz(i)4488 6061 y FP(is)g(th)l(e)e(unit)g(r)q(ow)h(vec)-5 b(to)e(r)49 b(with)f(1)h(i)s(n)g(pos)n(itio)l(n)g FG(i)15 b FP(.)0 6261 y(T)8 b(h)l(e)70 b(pivot)h(c)l(oe)l(\002)-49 b(\002c)m(ient)69 b(fo)-7 b(r)71 b(a)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)76 b FG(x)2971 6286 y Fz(k)3126 6261 y FP(is)p 3333 6160 V 73 w FG(a)3449 6286 y Fz(i)11 b(k)3629 6261 y FP(=)50 b FH(1)3878 6286 y Fz(i)3931 6261 y FG(a)4037 6286 y Fz(k)4121 6261 y FP(.)119 b(L)5 b(e)-7 b(t)71 b FG(y)4713 6286 y Fz(i)4833 6261 y FP(be)g(th)l(e)f(d)-7 b(ual)70 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)70 b(with)0 6460 y(th)l(e)58 b(c)l(o)l(ns)-5 b(trai)s(nt)58 b(i)s(n)g(bas)n(is)h(pos)n(itio)l(n)g FG(i)73 b FP(and)58 b(l)n(e)-7 b(t)59 b FG(y)3429 6485 y Fz(k)3572 6460 y FP(be)g(th)l(e)f(d)-7 b(ual)58 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)58 b(with)g(th)l(e)g(tight)f(bo)-5 b(und)0 6659 y(c)l(o)l(ns)g(trai)s(nt)52 b(fo)-7 b(r)53 b(th)l(e)f(n)m(o)l(n)m(bas)n(ic)f(pr)s(i)s(mal)i(v)r(ar)s(i)s(a)l(b)l (l)n(e)59 b FG(x)3594 6684 y Fz(k)3678 6659 y FP(.)249 6958 y(Abs)-5 b(tra)n(c)g(tly)-17 b(,)89 b(we)82 b(n)n(ee)l(d)g(to)g(c) -7 b(h)l(ec)f(k)81 b FG(y)2818 6983 y Fz(k)2957 6958 y FP(=)p 3111 6857 90 7 v 56 w FG(c)3201 6983 y Fz(k)3328 6958 y FP(+)p 3468 6857 117 7 v 42 w FG(a)3585 6983 y Fz(i)11 b(k)3717 6958 y FH(d)3816 6983 y Fz(i)g(k)4027 6958 y FP(to)82 b(\002)s(nd)f(th)l(e)h(max)10 b(i)s(m)l(um)82 b(all)n(owa)l(b)l(l)n(e)h FH(d)6837 6983 y Fz(i)23 b(j)7020 6958 y FP(s)-8 b(u)j(c)e(h)82 b(tha)-8 b(t)-1 7157 y FG(y)102 7182 y Fz(k)228 7157 y FF(\263)42 b FP(0)32 b FF(")r FG(k)52 b FF(\316)5 b FD(B)58 b FP(and)52 b FG(y)1551 7182 y Fz(j)1636 7157 y FP(=)41 b(0)53 b(fo)-7 b(r)53 b(s)n(o)n(me)72 b FG(j)6 b FP(.)66 b(T)8 b(h)l(e)52 b(i)s(nd)-5 b(e)g(x)72 b FG(j)59 b FP(of)53 b(th)l(e)f(ente)l(r)s(i)s (n)n(g)f(pr)s(i)s(mal)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)58 b FG(x)6438 7182 y Fz(j)6535 7157 y FP(will)52 b(be)3284 7594 y FG(j)c FP(=)41 b(arg)22 b(m)s(i)s(n)3923 7706 y Fz(k)4145 7353 y FC(\014)4145 7453 y(\014)4145 7552 y(\014)4145 7652 y(\014)p 4255 7381 90 7 v 4257 7481 a FG(c)4346 7506 y Fz(k)p 4220 7556 247 7 v 4220 7607 117 7 v 4222 7708 a FG(a)4337 7733 y Fz(i)11 b(k)4486 7353 y FC(\014)4486 7453 y(\014)4486 7552 y(\014)4486 7652 y(\014)7495 7594 y FP(\(18\))0 8052 y(fo)-7 b(r)53 b(s)-8 b(uit)s(a)l(b)l(l)n(e)58 b FG(x)1048 8077 y Fz(k)1174 8052 y FF(\316)16 b FG(N)h FP(.)249 8351 y(In)59 b(pra)n(c)-5 b(tic)f(e,)59 b(it')-5 b(s)59 b(i)s(mpos)-5 b(s)n(ib)l(l)n(e)58 b(to)h(e)-5 b(xplai)s(n)58 b(`s)-8 b(uit)s(a)l(b)l(l)n(e)63 b FG(x)4101 8376 y Fz(k)4185 8351 y FP(')58 b(pr)q(o)-5 b(pe)l(rly)58 b(with)n(o)-5 b(u)l(t)57 b(goi)s(n)n(g)f(d)-5 b(ee)e(p)59 b(i)s(nto)f(th)l(e)g(d)-5 b(e)e(t)s(ails)0 8550 y(of)56 b(th)l(e)g(wo)-7 b(rki)s(n)n(gs)54 b(of)i(th)l(e)g(r)q (evis)m(e)l(d)g(d)-7 b(ual)56 b(s)n(i)s(mpl)n(e)-5 b(x)57 b(algo)-7 b(r)s(ithm)55 b(\()p FG(vid)p FP(.)h([4]\).)75 b(T)s(a)l(b)l(l)n(e)56 b(1)g(g)t(ive)o(s)h(th)l(e)e(ru)l(l)n(e)o(s)i(i) s(n)f(t)s(a)l(b)-8 b(u)l(lar)0 8749 y(fo)h(r)5 b(m,)65 b(fr)q(o)n(m)d(th)l(e)g(pe)l(rs)-8 b(pec)j(tive)62 b(tha)-8 b(t)61 b(wh)l(en)g(all)h(is)g(said)h(and)e(do)l(n)n(e,)j(th)l(e)e(l)n (ea)-7 b(vi)s(n)n(g)61 b(pr)s(i)s(mal)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)f(m) l(u)-7 b(s)i(t)63 b(end)0 8949 y(u)-6 b(p)84 b(n)m(o)l(n)m(bas)n(ic)f (a)-8 b(t)84 b(bo)-5 b(und)83 b(and)h(th)l(e)g(s)n(ign)f(of)i(th)l(e)f (r)q(e)l(d)-7 b(u)i(c)f(e)l(d)83 b(c)l(os)-5 b(t)85 b(m)l(u)-7 b(s)i(t)84 b(be)g(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)84 b(fo)-7 b(r)85 b(tha)-8 b(t)83 b(bo)-5 b(und.)0 9148 y(Inte)l(rpr)q(e)e(ti)s(n)n(g)47 b(th)l(e)h(t)s(a)l(b)l(l)n(e,)h(th)l (e)f(s)m(ec)l(o)l(nd)f(li)s(n)n(e)i(says)f(tha)-8 b(t)48 b(if)g(th)l(e)g(l)n(ea)-7 b(vi)s(n)n(g)47 b(v)r(ar)s(i)s(a)l(b)l(l)n(e) i(will)e(be)h(ma)-6 b(d)h(e)49 b(pr)s(i)s(mal)f(feas)n(ib)l(l)n(e)0 9347 y(by)41 b(r)s(is)n(i)s(n)n(g)g(to)h(its)g(l)n(owe)l(r)f(bo)-5 b(und,)42 b(th)l(e)g(r)q(e)o(s)-8 b(u)l(lti)s(n)n(g)40 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)41 b(c)l(os)-5 b(t)41 b(m)l(u)-7 b(s)i(t)42 b(be)g(pos)n(itive)g(to)g(r)q(e)-7 b(t)s(ai)s(n)42 b(pr)s(i)s(mal)g(o)-5 b(pti)s(mality)-17 b(,)0 9546 y(h)l(enc)-6 b(e)78 b(th)l(e)g(c)l(o)-7 b(rr)q(e)o(s)f(po)l (ndi)s(n)n(g)77 b(d)-7 b(ual)77 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(m)l(u)-7 b(s)i(t)79 b(ente)l(r)f(by)g(r)s(is)n(i)s(n)n(g)g(fr)q(o)n(m)h(ze)l(r)q (o.)143 b(If)79 b(th)l(e)f(ente)l(r)s(i)s(n)n(g)f(pr)s(i)s(mal)0 9746 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)k(will)f(be)i(d)-5 b(ec)d(r)q(eas)n(i)s(n)n(g)80 b(fr)q(o)n(m)h(its)g(u)-6 b(p)e(pe)l(r)81 b(bo)-5 b(und,)87 b(th)l(e)80 b(curr)q(ent)h(r)q(e)l(d) -7 b(u)i(c)f(e)l(d)80 b(c)l(os)-5 b(t)81 b(m)l(u)-7 b(s)i(t)81 b(be)h(n)n(e)-5 b(ga)d(tive,)0 9945 y(h)l(enc)i(e)68 b(th)l(e)g(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g)66 b(d)-7 b(ual)68 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(m)l(u)-7 b(s)i(t)69 b(l)n(ea)-7 b(ve)69 b(by)e(r)s(is)n(i)s(n)n(g)h(to)h(ze)l(r) q(o)5467 9885 y FA(3)5546 9945 y FP(.)113 b(T)8 b(h)l(e)68 b(\002)s(nal)g(c)l(o)-5 b(l)n(umns)68 b(s)n(i)s(mply)0 10144 y(ill)n(u)-7 b(s)i(tra)d(te)53 b(tha)-8 b(t)52 b(th)l(e)g(s)n(ign)g(of)h(th)l(e)g(pivot)f(is)h(we)l(ll-d)-5 b(e)l(\002)s(n)n(e)l(d)52 b(fr)q(o)n(m)h(th)l(e)f(u)-6 b(pda)e(te)53 b(fo)-7 b(r)5 b(m)l(u)l(la.)p 0 10275 3120 7 v 345 10452 a Ft(3)415 10500 y FM(Pr)q(o)l(pe)m(rly)44 b(a)n(cc)m(o)l(unti)s(n)n(g)e(fo)-5 b(r)43 b(th)m(e)o(s)m(e)h Fr(appa)s(r)n(ently)g FM(n)o(e)l(ga)-7 b(tive)42 b(d)-6 b(ual)44 b(v)q(ar)s(i)s(a)m(b)m(l)o(e)o(s)e(is)h(th)m(e)g(di\002)-39 b(\002cu)m(lty)44 b(i)s(n)e(tryi)s(n)n(g)h(to)h(e)l(xplai)s(n)f(pivoti) s(n)n(g)3771 11400 y FP(46)p eop end %%Page: 47 50 TeXDict begin 47 49 bop 75 649 a FP(l)n(ea)-7 b(vi)s(n)n(g)56 b FG(x)783 674 y Fz(i)983 649 y FP(ente)l(r)s(i)s(n)n(g)50 b FG(y)1803 674 y Fz(i)2002 649 y FP(r)q(e)o(s)-8 b(u)l(lti)s(n)n(g)p 2763 548 90 7 v 53 w FG(c)2853 674 y Fz(i)3053 649 y FP(ente)l(r)s(i)s(n)n(g)57 b FG(x)3883 674 y Fz(j)4076 649 y FP(l)n(ea)-7 b(vi)s(n)n(g)51 b FG(y)4802 674 y Fz(j)4995 649 y FP(i)s(niti)s(al)p 5523 548 V 55 w FG(c)5625 674 y Fz(j)5820 649 y FP(pivot)p 6267 548 117 7 v 54 w FG(a)6384 674 y Fz(i)23 b(j)6654 649 y FP(\014)p 6809 431 90 7 v 6811 532 a FG(c)6911 557 y Fz(j)p 6774 611 218 7 v 6774 662 117 7 v 6776 763 a FG(a)6890 788 y Fz(i)g(j)7053 649 y FP(=)p 7194 548 90 7 v 43 w FG(c)7284 674 y Fz(i)272 1163 y FE(\045)42 b FG(lb)626 b FP(0)41 b FE(\045)759 b FF(\263)42 b FP(0)737 b FG(lb)45 b FE(\045)630 b(&)42 b FP(0)595 b FF(\263)42 b FP(0)580 b(<)42 b(0)358 b(\014)6754 1051 y(\(+\))p 6754 1125 200 7 v 6754 1277 a(\(\014\))7015 1163 y(=)41 b(\(+\))3280 1661 y FG(ub)j FE(&)602 b(\045)42 b FP(0)595 b FF(\243)42 b FP(0)580 b(>)42 b(0)358 b(\014)6754 1549 y(\(\014\))p 6754 1623 V 6754 1775 a(\(+\))7015 1661 y(=)41 b(\(+\))244 2160 y FE(&)g FG(ub)598 b FP(0)41 b FE(&)759 b FF(\243)42 b FP(0)737 b FG(lb)45 b FE(\045)630 b(&)42 b FP(0)595 b FF(\263)42 b FP(0)580 b(>)42 b(0)358 b(\014)6754 2047 y(\(+\))p 6754 2121 V 6754 2273 a(\(+\))7015 2160 y(=)41 b(\(\014\))3280 2658 y FG(ub)j FE(&)602 b(\045)42 b FP(0)595 b FF(\243)42 b FP(0)580 b(<)42 b(0)358 b(\014)6754 2545 y(\(\014\))p 6754 2619 V 6754 2772 a(\(\014\))7015 2658 y(=)41 b(\(\014\))1883 3109 y(T)s(a)l(b)l(l)n(e)52 b(1:)65 b(Summary)52 b(of)h(Dual)f(Si)s(mpl)n(e)-5 b(x)53 b(Pivoti)s(n)n(g)e(Ru)l(l)n(e)o(s)253 3647 y FM(D)8 b(Y)g(L)g(P)76 b FP(pr)q(ovid)-5 b(e)o(s)70 b(a)g(s)m(e)l(l)n(ec)-5 b(tio)l(n)70 b(of)g(tie-b)-5 b(r)q(eaki)s(n)n(g)69 b(s)-5 b(tra)d(te)j(g)t(ie)o(s)70 b(wh)l(en)f(th)l(e)l(r)q(e)g(ar)q(e)i(m)l(u) l(ltipl)n(e)e(candida)-8 b(te)o(s)69 b(with)0 3846 y(eq)l(ual)519 3839 y FF(|)554 3846 y FH(d)653 3871 y Fz(i)11 b(k)782 3839 y FF(|)877 3846 y FP(=)56 b FH(d)1132 3871 y FA(m)r(i)r(n)1364 3846 y FP(.)152 b(T)8 b(h)l(e)82 b(s)n(i)s(mpl)n(e)o(s)-5 b(t)82 b(is)g(to)g(s)m(e)l(l)n(ec)-5 b(t)82 b(th)l(e)f(\002rs)-5 b(t)82 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)87 b FG(x)5246 3871 y Fz(k)5412 3846 y FP(s)-8 b(u)j(c)e(h)81 b(tha)-8 b(t)83 b FH(d)6374 3871 y Fz(i)11 b(k)6557 3846 y FP(=)54 b(0.)152 b(A)81 b(slightly)0 4045 y(mo)-7 b(r)q(e)83 b(s)n(o)-5 b(p)f(his)h(tica)d(te)l(d)81 b(s)-5 b(tra)d(te)j(g)8 b(y)82 b(is)h(to)g(scan)g(all)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)89 b FG(x)4432 4070 y Fz(k)4599 4045 y FP(e)l(lig)t(ib)l(l)n(e)82 b(to)h(ente)l(r)f(and)g(pic)-8 b(k)88 b FG(x)6893 4070 y Fz(j)7019 4045 y FP(s)-8 b(u)j(c)e(h)83 b(tha)-8 b(t)19 4244 y FG(j)50 b FP(=)43 b(arg)22 b(max)885 4269 y Fz(k)8 b Fy(\316)-21 b Fz(K)1153 4237 y FF(|)p 1186 4144 117 7 v 1188 4244 a FG(a)1302 4269 y Fz(i)11 b(k)1432 4237 y FF(|)1473 4244 y FP(,)63 b FG(K)e FP(=)44 b({)15 b FG(k)2129 4237 y FF(|)44 b(|)2241 4244 y FH(d)2340 4269 y Fz(i)11 b(k)2469 4237 y FF(|)2554 4244 y FP(=)45 b FH(d)2798 4269 y FA(m)r(i)r(n)3043 4244 y FP(};)65 b FM(D)8 b(Y)g(L)g(P)63 b FP(will)57 b(u)-7 b(s)m(e)57 b(this)g(s)-5 b(tra)d(te)j(g)8 b(y)57 b(by)g(d)-5 b(e)l(fa)d(u)l(lt.)83 b FM(D)8 b(Y)g(L)g(P)63 b FP(als)n(o)57 b(pr)q(ovid)-5 b(e)o(s)0 4444 y(fo)g(ur)49 b(a)-6 b(dditio)l(nal)48 b(s)-5 b(tra)d(te)j(g)t(ie)o(s)49 b(bas)m(e)l(d)g(o)l(n)f(hype)l(rplan) n(e)g(alignment)f(as)j(d)-5 b(e)o(sc)d(r)s(ibe)l(d)49 b(i)s(n)g(\2476.)64 b(An)49 b(o)-5 b(ptio)l(n)48 b(all)n(ows)h(th)l(e)0 4643 y(tie-b)-5 b(r)q(eaki)s(n)n(g)52 b(s)-5 b(tra)d(te)j(g)8 b(y)52 b(to)h(be)g(s)m(e)l(l)n(ec)-5 b(te)l(d)53 b(by)f(th)l(e)g (client.)249 4942 y(In)75 b(cas)m(e)h(of)e(d)-5 b(e)g(g)n(en)n(e)l(ra)n (cy)-17 b(,)80 b(th)l(e)74 b(pe)l(rt)l(urbe)l(d)g(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(m)73 b(anti-d)-5 b(e)g(g)n(en)n(e)l(ra)n (cy)73 b(algo)-7 b(r)s(ithm)74 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)75 b(i)s(n)g(\2475)0 5141 y(is)68 b(als)n(o)g(a)-7 b(v)r(aila)l(b)l(l)n (e.)111 b(T)8 b(h)l(e)67 b(client)h(can)g(c)l(o)l(ntr)q(o)-5 b(l)67 b(th)l(e)h(u)-7 b(s)m(e)68 b(of)g(pe)l(rt)l(urbe)l(d)f(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(ms)66 b(thr)q(o)-5 b(u)l(gh)66 b(two)h(o)-5 b(ptio)l(ns)0 5340 y(whic)e(h)40 b(s)-8 b(pec)m(ify)41 b(wh)l(e)-7 b(th)l(e)l(r)40 b(a)i(pe)l(rt)l(urbe)l(d)f (s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(m)39 b(can)j(be)g(u)-7 b(s)m(e)l(d,)44 b(and)d(h)n(ow)g(many)f(c)l(o)l(ns)m(ecu)l(tive)h(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)0 5539 y(pivots)66 b(m)l(u)-7 b(s)i(t)65 b(occur)h(be)l(fo)-7 b(r)q(e)66 b(th)l(e)f(pe)l(rt)l(urbe)l (d)g(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(m)64 b(is)h(c)-8 b(r)q(ea)g(te)l(d.)104 b(By)65 b(d)-5 b(e)l(fa)d(u)l(lt,)72 b FM(D)8 b(Y)g(L)g(P)72 b FP(u)-7 b(s)m(e)o(s)66 b(pe)l(rt)l(urbe)l(d)0 5739 y(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(ms)45 b(aggr)q(e)o(s)-5 b(s)n(ive)l(ly)47 b(and)g(will)f(i)s(ntr)q(od)-7 b(u)i(c)f(e)46 b(o)l(n)n(e)h(wh)l(en)f(fa)n(c)-6 b(e)l(d)47 b(with)f(a)h(s)m(ec)l(o)l (nd)g(c)l(o)l(ns)m(ecu)l(tive)f(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)0 5938 y(pivot.)0 6531 y Fu(13.6)197 b(Gen)-6 b(e)h(ralis)g(e)g(d)63 b(Dual)j(Pivot)0 6950 y FP(Su)-6 b(p)e(pos)m(e)70 b(tha)-8 b(t)70 b(an)h(ente)l(r)s(i)s(n)n(g)f(d)-7 b(ual)70 b(v)r(ar)s(i)s(a)l (b)l(l)n(e)g FG(y)3391 6975 y Fz(i)3512 6950 y FP(has)h(been)g(c)-7 b(h)n(os)m(en,)76 b(and)70 b(th)l(e)h(ra)-8 b(tio)71 b(te)o(s)-5 b(t)71 b(of)g(eq)l(ua)-8 b(tio)l(n)70 b(\()-8 b(18\))0 7149 y(has)56 b(been)h(u)-7 b(s)m(e)l(d)56 b(to)h(s)m(e)l(l)n (ec)-5 b(t)57 b(a)g(l)n(ea)-7 b(vi)s(n)n(g)55 b(v)r(ar)s(i)s(a)l(b)l(l) n(e)h FG(y)3510 7174 y Fz(j)3611 7149 y FP(and)g(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)57 b(th)l(e)f(c)-7 b(han)n(g)n(e)57 b FH(d)5873 7174 y Fz(i)23 b(j)6030 7149 y FP(i)s(n)55 b FG(y)6350 7174 y Fz(i)6456 7149 y FP(r)q(eq)l(uir)q(e)l(d)h(to)h(dr)s (ive)-1 7348 y FG(y)114 7373 y Fz(j)205 7348 y FP(=)p 353 7248 90 7 v 50 w FG(c)455 7373 y Fz(j)567 7348 y FP(to)67 b(ze)l(r)q(o.)107 b(Gen)n(e)l(ralis)m(e)l(d)66 b(d)-7 b(ual)66 b(pivoti)s(n)n(g)f(as)-6 b(ks)67 b(th)l(e)f(q)l(u)l(e)o (s)-5 b(tio)l(n)66 b(\223Wha)-8 b(t)67 b(ha)-6 b(p)e(pens)65 b(wh)l(en)g(we)i(p)-5 b(u)e(s)f(h)66 b(pas)-5 b(t)0 7548 y(this)52 b(li)s(m)s(it)12 b(?\224)249 7847 y(Imme)l(di)s(a)-8 b(te)l(ly)-17 b(,)66 b(d)-7 b(ual)62 b(feas)n(ibility)h(is)g(l)n(os)-5 b(t)64 b(as)g(th)l(e)f(v)r(al)n(u)l(e)g(of)f FG(y)4510 7872 y Fz(j)4618 7847 y FP(c)-7 b(han)n(g)n(e)o(s)62 b(s)n(ign.)96 b(Bu)l(t)65 b(.)27 b(.)g(.)64 b(s)-8 b(u)i(p)e(pos)m(e)62 b(tha)-8 b(t)63 b(th)l(e)0 8046 y(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n) n(g)43 b(n)m(o)l(n)m(bas)n(ic)h(pr)s(i)s(mal)i(v)r(ar)s(i)s(a)l(b)l(l)n (e)51 b FG(x)3317 8071 y Fz(j)3407 8046 y FP(has)46 b(both)f(an)g(u)-6 b(p)e(pe)l(r)45 b(and)g(l)n(owe)l(r)g(bo)-5 b(und.)62 b(If)46 b(th)l(e)f(v)r(al)n(u)l(e)h(of)g(this)0 8245 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)67 b(is)g(c)-7 b(han)n(g)n(e)l(d)65 b(to)i(th)l(e)f(o)-5 b(p)d(pos)n(ite)67 b(bo)-5 b(und)65 b(\(`\003ip)-8 b(pe)l(d'\),)68 b(th)l(e)e(s)n(ign)h(of)f FG(y)5374 8270 y Fz(j)5485 8245 y FP(is)h(agai)s(n)f(c)l(o)-7 b(rr)q(ec)i(t)67 b(with)f(r)q(e)o(s)-8 b(pec)j(t)0 8444 y(to)64 b(th)l(e)g(v)r(al)n(u)l(e)h(of)k FG(x)1351 8469 y Fz(j)1459 8444 y FP(and)64 b(d)-7 b(ual)64 b(feas)n(ibility)g(is)g(r) q(e)o(s)-5 b(to)e(r)q(e)l(d.)101 b(Flip)-8 b(pi)s(n)n(g)67 b FG(x)4919 8469 y Fz(j)5027 8444 y FP(will)d(c)-7 b(han)n(g)n(e)62 b(th)l(e)i(v)r(al)n(u)l(e)h(of)f(any)g(bas)n(ic)0 8644 y(pr)s(i)s(mal)56 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)61 b FG(x)1382 8669 y Fz(k)1522 8644 y FP(wh)l(e)l(r)q(e)p 2054 8543 117 7 v 56 w FG(a)2171 8669 y Fz(k)21 b(j)2350 8644 y FP(=)44 b FH(1)2594 8669 y Fz(k)2681 8644 y FG(a)2799 8669 y Fz(j)2886 8644 y FF(\271)f FP(0.)73 b(In)55 b(particu)l(lar)-9 b(,)55 b(th)l(e)g(v)r(al)n(u)l(e)h(of)k FG(x)5459 8669 y Fz(i)5565 8644 y FP(will)54 b(move)i(towar)q(d)e(feas)n(ibility)-17 b(.)0 8866 y(In)58 b(te)l(r)5 b(ms)58 b(of)g(d)-7 b(ual)58 b(s)n(i)s(mpl)n(e)-5 b(x,)60 b(th)l(e)d(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)58 b(c)l(os)-5 b(t)p 3467 8725 107 7 v 60 w FG(b)3574 8891 y Fz(i)3669 8866 y FP(=)48 b FG(x)3909 8891 y Fz(i)4017 8866 y FP(of)57 b FG(y)4322 8891 y Fz(i)4430 8866 y FP(will)h(be)g(r)q(e)l(d)-7 b(u)i(c)f(e)l(d.)81 b(If)p 5941 8725 V 60 w FG(b)6048 8891 y Fz(i)6157 8866 y FP(is)58 b(n)m(ot)g(ye)-7 b(t)58 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)57 b(to)0 9066 y(ze)l(r)q(o,)f FG(y)540 9091 y Fz(i)646 9066 y FP(can)g(s)-5 b(till)56 b(be)g(u)-7 b(s)m(e)l(d)56 b(as)h(th)l(e)f(ente)l(r)s(i)s(n)n(g)f(d)-7 b(ual)55 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(\(albeit)e(with)g(a)i(l)n(e)o(s)-5 b(s)57 b(fa)-7 b(vo)i(ura)l(b)l(l)n(e)56 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)55 b(c)l(os)-5 b(t\))0 9265 y(and)68 b(th)l(e)g(ra)-8 b(tio)69 b(te)o(s)-5 b(t)69 b(can)f(be)h(r)q(e)-7 b(pea)f(te)l(d)69 b(to)g(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)69 b(a)g(n)n(ew)f(l)n(ea)-7 b(vi)s(n)n(g)68 b(d)-7 b(ual)68 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g FG(y)6391 9290 y Fz(j)6430 9256 y Fg(0)6468 9265 y FP(.)114 b(Re)-7 b(pea)f(ti)s(n)n(g)67 b(this)0 9464 y(pr)q(oc)-6 b(e)l(d)f(ur)q(e)58 b(will)f(id)-5 b(entify)56 b(a)j(max)10 b(i)s(m)l(um)58 b(s)m(eq)l(u)l(enc)-6 b(e)58 b(of)g(pr)s(i)s(mal)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(\003ips.)81 b(T)8 b(h)l(e)58 b(s)m(eq)l(u)l(enc)-6 b(e)58 b(ends)g(fo)-7 b(r)58 b(o)l(n)n(e)0 9663 y(of)53 b(two)f(r)q(eas)n(o)l(ns:)p 0 9770 3120 7 v 415 9923 a FM(fr)q(o)o(m)f(th)m(e)f(d)-6 b(ual)52 b(s)o(i)s(mpl)o(e)l(x)e(pe)m(rs)-7 b(pec)l(tive.)79 b(In)51 b(fa)n(c)l(t,)h(n)o(e)l(ga)-7 b(tive)51 b(d)-6 b(ual)51 b(v)q(ar)s(i)s(a)m(b)m(l)o(e)o(s)f(ar)q(e)h(an)g(artifa)n(c)l (t)g(of)g(runni)s(n)n(g)f(th)m(e)g(d)-6 b(ual)52 b(s)o(i)s(m-)415 10081 y(pl)o(e)l(x)c(algo)-5 b(r)s(ithm)46 b(u)-5 b(s)o(i)s(n)n(g)45 b(r)q(e)-5 b(pr)q(e)o(s)m(ent)s(a)e(tio)m(n)48 b(and)f(da)-7 b(t)s(a)48 b(s)l(tru)l(c)l(t)m(ur)q(e)o(s)g(a)-5 b(p)e(pr)q(o)l(pr)s(i) s(a)g(te)50 b(fo)-5 b(r)47 b(pr)s(i)s(mal)f(s)o(i)s(mpl)o(e)l(x)h(with) f(i)s(mplic)m(it)h(bo)l(und)415 10239 y(c)m(o)m(ns)l(trai)s(nts.)3771 11400 y FP(47)p eop end %%Page: 48 51 TeXDict begin 48 50 bop 217 466 a Fo(e)82 b FP(T)8 b(h)l(e)74 b(pr)s(i)s(mal)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)80 b FG(x)2227 491 y Fz(f)2374 466 y FP(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)74 b(with)f(a)i(d)-7 b(ual)74 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)f FG(y)5129 491 y Fz(f)5277 466 y FP(has)h(o)l(nly)f(o)l(n)n(e)h(\002)s (nite)g(bo)-5 b(und)74 b(and)415 665 y(cann)m(ot)52 b(be)h(\003ip)-8 b(pe)l(d.)217 997 y Fo(e)82 b FP(Flip)-8 b(pi)s(n)n(g)79 b(th)l(e)j(pr)s(i)s(mal)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)88 b FG(x)2935 1022 y Fz(f)3089 997 y FP(will)81 b(p)-5 b(u)e(s)f(h)86 b FG(x)4020 1022 y Fz(i)4152 997 y FP(ove)l(r)81 b(its)h(bo)-5 b(und)80 b(and)i(i)s(nto)f(feas)n(ibility)-17 b(.)151 b(In)82 b(d)-7 b(ual)415 1197 y(s)n(i)s(mpl)n(e)i(x)57 b(te)l(r)5 b(ms,)55 b FG(y)1765 1222 y Fz(i)1871 1197 y FP(will)f(a)n(cq)l(uir)q(e)i(an)f(unfa)-7 b(vo)i(ura)l(b)l(l)n(e)54 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)55 b(c)l(os)-5 b(t)56 b(and)f(will)g(n)m(o)g(l)n(o)l(n)n(g)n(e)l(r)f(be)h(a)h(s)-8 b(uit)s(a)l(b)l(l)n(e)415 1396 y(c)h(h)n(oic)h(e)54 b(fo)-7 b(r)53 b(th)l(e)f(ente)l(r)s(i)s(n)n(g)f(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e.)0 1828 y(T)8 b(h)l(e)82 b(d)-7 b(ual)80 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i FG(y)1658 1853 y Fz(f)1813 1828 y FP(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g)79 b(to)87 b FG(x)3377 1853 y Fz(f)3532 1828 y FP(bec)l(o)n(me)o(s)82 b(th)l(e)g(l)n(ea)-7 b(vi)s(n)n(g)80 b(d)-7 b(ual)81 b(v)r(ar)s(i)s(a)l(b)l(l)n(e.)153 b(T)8 b(h)l(e)82 b(d)-7 b(ual)81 b(bas)n(is)0 2027 y(pivot)63 b(will)g(ha)-7 b(ve)62 b FG(y)1352 2052 y Fz(f)1488 2027 y FP(l)n(ea)-7 b(vi)s(n)n(g)62 b(and)g FG(y)2583 2052 y Fz(i)2697 2027 y FP(ente)l(r)s(i)s(n)n(g;)67 b(th)l(e)c(c)l(o)-7 b(rr)q(e)o(s)f(po)l (ndi)s(n)n(g)61 b(pr)s(i)s(mal)j(pivot)f(has)68 b FG(x)6506 2052 y Fz(i)6620 2027 y FP(l)n(ea)-7 b(vi)s(n)n(g)62 b(and)68 b FG(x)7727 2052 y Fz(f)0 2226 y FP(ente)l(r)s(i)s(n)n(g.)103 b(T)8 b(his)65 b(s)m(eq)l(u)l(enc)-6 b(e)66 b(of)g(pr)s(i)s(mal)g(v)r (ar)s(i)s(a)l(b)l(l)n(e)g(\003ips)g(cu)l(lm)s(i)s(na)-8 b(ti)s(n)n(g)63 b(i)s(n)j(a)g(\002)s(nal)f(pivot)h(is)g(g)n(en)n(e)l (ralis)m(e)l(d)e(d)-7 b(ual)0 2425 y(pivoti)s(n)n(g.)63 b(Note)51 b(tha)-8 b(t)51 b(it')-5 b(s)51 b(pos)-5 b(s)n(ib)l(l)n(e)51 b(to)g(c)-7 b(h)n(oos)m(e)52 b(any)e(v)r(ar)s(i)s(a)l(b)l(l)n(e)i (withi)s(n)e(th)l(e)g(max)10 b(i)s(m)l(um)51 b(s)m(eq)l(u)l(enc)-6 b(e)51 b(of)h(\003ips)f(and)0 2625 y(u)-7 b(s)m(e)53 b(it)g(as)g(th)l(e)f(pivot)h(v)r(ar)s(i)s(a)l(b)l(l)n(e.)253 2923 y FM(D)8 b(Y)g(L)g(P)68 b FP(i)s(mpl)n(e)n(ments)61 b(g)n(en)n(e)l(ralis)m(e)l(d)g(d)-7 b(ual)61 b(pivoti)s(n)n(g)f(by)i (\002rs)-5 b(t)62 b(c)l(o)-5 b(ll)n(ec)g(ti)s(n)n(g)61 b(th)l(e)g(s)m(e)-7 b(t)63 b(of)f(potenti)s(al)f(l)n(ea)-7 b(vi)s(n)n(g)61 b(d)-7 b(ual)0 3123 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)75 b FG(y)901 3148 y Fz(k)1061 3123 y FP(\(and)g(as)-5 b(s)n(oc)m(i)s(a)d (te)l(d)75 b(ente)l(r)s(i)s(n)n(g)e(pr)s(i)s(mal)j(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s)81 b FG(x)4644 3148 y Fz(k)4728 3123 y FP(\).)133 b(T)8 b(his)75 b(s)m(e)-7 b(t)76 b(is)g(th)l(en)e(s)n(o)-7 b(rte)l(d)75 b(u)-7 b(s)n(i)s(n)n(g)74 b(n)m(o)l(n-)0 3322 y(d)-5 b(ec)d(r)q(eas)n(i)s(n)n(g)66 b(v)r(al)n(u)l(e)g(of)1625 3315 y FF(|)1660 3322 y FH(d)1759 3347 y Fz(i)11 b(k)1888 3315 y FF(|)1996 3322 y FP(and)66 b(n)n(ume)l(r)s(ical)g(s)-5 b(t)s(a)l(bility)66 b(of)g(th)l(e)g(pivot)g(as)h(th)l(e)f(pr)s(i)s (mary)g(and)g(s)m(ec)l(o)l(ndary)f(s)n(o)-7 b(rt)0 3521 y(c)f(r)s(ite)l(r)s(i)s(a.)73 b(\(Nume)l(r)s(ical)55 b(s)-5 b(t)s(a)l(bility)54 b(is)h(a)h(bi)s(nary)e(c)l(o)l(nditio)l(n)f (fo)-7 b(r)55 b(this)g(p)-5 b(urpos)m(e;)55 b(a)g(pivot)g(is)h(eith)l (e)l(r)e(a)n(cc)-6 b(e)f(pt)s(a)l(b)l(l)n(e)56 b(o)-7 b(r)0 3721 y(n)m(ot.\))64 b(T)8 b(h)l(e)53 b(te)l(rti)s(ary)f(s)n(o)-7 b(rt)53 b(c)-8 b(r)s(ite)l(r)s(io)l(n)52 b(v)r(ar)s(ie)o(s)h(a)n(cc)l (o)-7 b(r)q(di)s(n)n(g)51 b(to)i(wh)l(e)-7 b(th)l(e)l(r)53 b FH(d)4877 3746 y Fz(i)11 b(k)5048 3721 y FP(=)41 b(0)52 b(o)-7 b(r)56 b FH(d)5658 3746 y Fz(i)11 b(k)5828 3721 y FF(\271)41 b FP(0.)217 4152 y Fo(e)82 b FP(Fo)-7 b(r)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(with)f FH(d)2045 4177 y Fz(i)11 b(k)2220 4152 y FP(=)45 b(0,)65 b(g)t(ive)e(pr)q(e)l(fe)l(r)q (enc)-6 b(e)63 b(to)f(pr)s(i)s(mal)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h (whic)-7 b(h)61 b(can)i(be)g(\003ip)-8 b(pe)l(d)61 b(to)i(th)l(eir)415 4351 y(o)-5 b(p)d(pos)n(ite)52 b(bo)-5 b(und.)217 4684 y Fo(e)82 b FP(Fo)-7 b(r)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(with)f FH(d)2015 4709 y Fz(i)11 b(k)2186 4684 y FF(\271)41 b FP(0,)53 b(g)t(ive)g(pr)q(e)l(fe)l(r)q(enc)-6 b(e)52 b(to)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(whic)-7 b(h)51 b(cann)m(ot)h(be)h(\003ip)-8 b(pe)l(d.)0 5115 y(Any)59 b(r)q(e)n(mai)s(ni)s(n)n(g)f(tie)o(s)j(ar)q(e)g(b)-5 b(r)q(oken)59 b(with)g(a)i(pr)q(e)l(fe)l(r)q(enc)-6 b(e)60 b(fo)-7 b(r)61 b(pivot)f(c)l(oe)l(\002)-49 b(\002c)m(ients)59 b(with)g(be)-7 b(tte)l(r)61 b(n)n(ume)l(r)s(ical)f(s)-5 b(t)s(a-)0 5315 y(bility)75 b(\(c)l(o)n(mpar)q(e)l(d)h(as)h(an)f(anal)n (og)f(v)r(al)n(u)l(e\).)136 b(T)8 b(his)76 b(\002)s(nal)g(tie-b)-5 b(r)q(eaki)s(n)n(g)75 b(c)-8 b(r)s(ite)l(r)s(io)l(n)75 b(is)i(i)s(mpo)-7 b(rt)s(ant)76 b(wh)l(en)e(\003ip-)0 5514 y(pi)s(n)n(g)53 b(a)h(s)m(eq)l(u)l(enc)-6 b(e)54 b(of)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(beca)-8 b(u)h(s)m(e)55 b(n)n(ume)l(r)s(ical)f(s)-5 b(t)s(a)l(bility)53 b(is)h(r)q(e)l(la)-8 b(tive)54 b(to)g(th)l(e)g(larg)n(e)o(s)-5 b(t)53 b(c)l(oe)l(\002)-49 b(\002c)m(ient)53 b(v)r(al)n(u)l(e)0 5706 y FF(|)p 33 5612 117 7 v 35 5713 a FG(a)150 5738 y Fz(i)11 b(q)271 5706 y FF(|)360 5713 y FP(=)47 b(max)853 5738 y Fz(k)962 5706 y FF(|)p 995 5612 V 997 5713 a FG(a)1111 5738 y Fz(i)11 b(k)1241 5706 y FF(|)1349 5713 y FP(i)s(n)66 b(a)h(c)l(o)-5 b(l)n(umn.)106 b(An)66 b(uns)-5 b(t)s(a)l(b)l(l)n(e)66 b(pivot)g(has)g(a)h(small)g(ra)-8 b(tio)5467 5706 y FF(|)p 5500 5612 V 5502 5713 a FG(a)5616 5738 y Fz(i)11 b(k)5748 5713 y FP(/)p 5850 5612 V 4 w FG(a)5965 5738 y Fz(i)g(q)6086 5706 y FF(|)6127 5713 y FP(;)74 b(this)66 b(i)s(mplie)o(s)h(a)g(high)0 5912 y(pr)q(o)-8 b(ba)l(bility)59 b(tha)-8 b(t)59 b(wh)l(en)64 b FG(x)1894 5937 y Fz(k)2040 5912 y FP(is)c(\003ip)-8 b(pe)l(d,)62 b(oth)l(e)l(r)d(bas)n(ic)j(pr)s(i)s(mal)e(v)r(ar)s(i)s(a)l (b)l(l)n(e)o(s)i(\(a)-8 b(t)60 b(th)l(e)g(l)n(eas)-5 b(t,)68 b FG(x)6387 5937 y Fz(q)6463 5912 y FP(\))61 b(will)e(i)s(ncur)h(larg)n(e)0 6112 y(c)-7 b(han)n(g)n(e)o(s.)62 b(St)s(a)l(bility)46 b(of)h(pr)s(i)s(mal)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)g (v)r(al)n(u)l(e)o(s)g(is)g(thu)-7 b(s)47 b(i)s(mpr)q(ove)l(d)g(by)f(pr) q(e)l(fe)l(rr)s(i)s(n)n(g)g(larg)n(e)g(pivot)g(c)l(oe)l(\002)-49 b(\002c)m(ients.)249 6410 y(A)63 b(n)m(o)l(nd)-5 b(e)g(g)n(en)n(e)l(ra) d(te)60 b(d)-7 b(ual)62 b(pivot)g(is)h(cl)n(early)g(pr)q(e)l(fe)l(ra)l (b)l(l)n(e)f(to)h(a)g(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)62 b(pivot,)j(and)d(this)g(motiv)r(a)-8 b(te)o(s)63 b(th)l(e)0 6610 y(pr)q(e)l(fe)l(r)q(enc)-6 b(e)55 b(fo)-7 b(r)55 b(\003ip)-8 b(pa)l(b)l(l)n(e)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)j (withi)s(n)d(th)l(e)h(s)m(e)-7 b(t)55 b(of)g(candida)-8 b(te)o(s)54 b(with)i FH(d)5451 6635 y Fz(i)11 b(k)5622 6610 y FP(=)42 b(0.)71 b(Id)-5 b(eally)-17 b(,)55 b(all)g(v)r(ar)s(i)s (a)l(b)l(l)n(e)o(s)g(i)s(n)0 6809 y(this)66 b(gr)q(o)-5 b(u)f(p)65 b(can)i(be)f(\003ip)-8 b(pe)l(d;)72 b(faili)s(n)n(g)65 b(this,)k(it')-5 b(s)66 b(pr)q(e)l(fe)l(ra)l(b)l(l)n(e)g(to)g(\003ip)g (as)g(many)g(as)h(pos)-5 b(s)n(ib)l(l)n(e.)106 b(Wh)l(en)65 b(c)l(o)l(ns)n(id-)0 7008 y(e)l(ra)-8 b(tio)l(n)67 b(move)o(s)h(i)s (nto)g(th)l(e)f(gr)q(o)-5 b(u)f(p)67 b(of)h(candida)-8 b(te)o(s)68 b(with)g FH(d)4106 7033 y Fz(i)11 b(k)4283 7008 y FF(\271)48 b FP(0,)72 b(th)l(e)67 b(goal)h(c)-7 b(han)n(g)n(e)o(s.)109 b(Quic)-8 b(k)68 b(s)m(e)l(l)n(ec)-5 b(tio)l(n)67 b(of)h(a)0 7207 y(good)54 b(pivot)h(will)f(m)s(i)s(ni)s(m) s(is)m(e)i(furth)l(e)l(r)e(unpr)q(e)l(dic)-5 b(t)s(a)l(b)l(l)n(e)54 b(c)-7 b(han)n(g)n(e)o(s)54 b(to)h(oth)l(e)l(r)f(d)-7 b(ual)54 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)55 b(c)l(os)-5 b(ts)55 b(\(pr)s(i)s(mal)h(bas)n(ic)0 7407 y(v)r(ar)s(i)s(a)l(b)l(l)n (e)o(s\).)75 b(Si)s(nc)-6 b(e)55 b(pivoti)s(n)n(g)f(is)i(th)l(e)f (goal,)h(it)g(is)f(r)q(eas)n(o)l(na)l(b)l(l)n(e)g(to)h(g)t(ive)g(pr)q (e)l(fe)l(r)q(enc)-6 b(e)55 b(to)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g (tha)-8 b(t)55 b(m)l(u)-7 b(s)i(t)56 b(be)0 7606 y(pivote)l(d.)249 7905 y(T)8 b(h)l(e)73 b(pr)q(oc)-6 b(e)o(s)h(s)75 b(of)f(scanni)s(n)n (g)e(fo)-7 b(r)73 b(candida)-8 b(te)o(s)74 b(and)f(s)n(o)-7 b(rti)s(n)n(g)72 b(th)l(e)h(r)q(e)o(s)-8 b(u)l(lti)s(n)n(g)72 b(s)m(e)-7 b(t)75 b(is)e(i)s(mpl)n(e)n(mente)l(d)g(i)s(n)h(th)l(e)0 8104 y(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)53 b FJ(scanForDualInCands)h FP(and)e FJ(dualcand_cmp)p FP(.)249 8403 y(T)8 b(h)l(e)40 b(s)n(o)-7 b(rti)s(n)n(g)39 b(pr)q(oc)-6 b(e)l(d)f(ur)q(e)40 b(j)-7 b(u)g(s)i(t)41 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)41 b(may)f(r)q(e)o(s)-8 b(u)l(lt)40 b(i)s(n)h(an)f(o)-7 b(r)q(d)i(e)l(r)q(e)l(d)40 b(lis)-5 b(t)41 b(wh)l(e)l(r)q(e)e(o)l(n)n (e)h(o)-7 b(r)41 b(mo)-7 b(r)q(e)41 b(un\003ip)-8 b(pa)l(b)l(l)n(e)0 8602 y(candida)g(te)o(s)66 b FG(y)1039 8627 y Fz(u)1195 8602 y FP(with)g(n)n(ume)l(r)s(ically)g(uns)-5 b(t)s(a)l(b)l(l)n(e)68 b(pivots)p 3948 8502 V 69 w FG(a)4064 8627 y Fz(i)11 b(u)4265 8602 y FP(pr)q(ec)-6 b(e)l(d)h(e)68 b(th)l(e)f(\002rs)-5 b(t)67 b(candida)-8 b(te)66 b FG(y)6605 8627 y Fz(s)6745 8602 y FP(with)g(a)i(s)-5 b(t)s(a)l(b)l(l)n(e)0 8801 y(pivot)p 442 8701 V 49 w FG(a)559 8826 y Fz(i)11 b(s)676 8801 y FP(.)63 b(In)48 b(this)f(cas)m(e,)i(a)f(\002)s(nal)f(a)-8 b(tte)n(mpt)47 b(is)g(ma)-6 b(d)h(e)48 b(to)g(pr)q(o)n(mote)f(th)l(e)g (candida)-8 b(te)47 b(with)f(a)i(s)-5 b(t)s(a)l(b)l(l)n(e)48 b(pivot)g(s)n(o)f(tha)-8 b(t)0 9001 y(it)66 b(pr)q(ec)-6 b(e)l(d)h(e)o(s)67 b(th)l(e)f(th)l(e)g(uns)-8 b(uit)s(a)l(b)l(l)n(e)65 b(candida)-8 b(te)o(s)65 b FG(y)3540 9026 y Fz(u)3627 9001 y FP(.)106 b(Fr)q(o)n(m)67 b(th)l(e)e(s)n(o)-7 b(rt)66 b(c)-8 b(r)s(ite)l(r)s(i)s(a,)70 b(it)d(m)l(u)-7 b(s)i(t)66 b(be)g(tha)-8 b(t)6962 8994 y FF(|)6997 9001 y FH(d)7096 9026 y Fz(i)11 b(s)7212 8994 y FF(|)7301 9001 y(\263)7439 8994 y(|)7474 9001 y FH(d)7573 9026 y Fz(i)g(u)7706 8994 y FF(|)7747 9001 y FP(.)0 9200 y(Fo)-7 b(r)56 b(a)g(g)t(iven)f(v)r(ar)s (i)s(a)l(b)l(l)n(e)f FG(y)1749 9225 y Fz(u)1837 9200 y FP(,)i(if)2105 9193 y FF(|)2137 9200 y FG(y)2240 9225 y Fz(u)2360 9200 y FP(\014)p 2492 9099 V 34 w FG(a)2608 9225 y Fz(i)11 b(u)2743 9200 y FH(d)2842 9225 y Fz(i)g(s)2958 9193 y FF(|)3056 9200 y FP(is)55 b(l)n(e)o(s)-5 b(s)57 b(than)d(th)l(e)h(d)-7 b(ual)55 b(feas)n(ibilty)g(to)-5 b(l)n(e)l(ranc)f(e,)56 b(th)l(e)f(r)q(e)o(s)-8 b(u)l(lti)s(n)n(g)54 b(d)-7 b(ual)0 9399 y(i)s(nfeas)n(ibility)66 b(will)g(be)i(to)-5 b(l)n(e)l(ra)l(b)l(l)n(e)67 b(and)f FG(y)2831 9424 y Fz(s)2970 9399 y FP(can)h(be)g(pr)q(o)n(mote)l(d)g(ove)l(r)f FG(y)4920 9424 y Fz(u)5008 9399 y FP(.)109 b(T)8 b(his)67 b(pr)q(o)n(motio)l(n)f(of)h(a)h(s)-5 b(t)s(a)l(b)l(l)n(e)67 b(pivot)0 9598 y(ove)l(r)53 b(an)f(uns)-5 b(t)s(a)l(b)l(l)n(e)53 b(pivot)f(is)h(i)s(mpl)n(e)n(mente)l(d)f(i)s(n)h FJ(pr)m(omoteSanePiv)l (ot)p FP(.)249 9897 y(At)60 b(th)l(e)g(end)g(of)g(th)l(e)g(a)l(bove)g (s)n(o)-7 b(rt)60 b(algo)-7 b(r)s(ithm,)62 b(th)l(e)d(lis)-5 b(t)61 b(of)f(candida)-8 b(te)o(s)60 b(is)g(o)-7 b(r)q(d)i(e)l(r)q(e)l (d)60 b(s)n(o)g(tha)-8 b(t)60 b(it)g(be)-5 b(g)t(i)s(ns)59 b(with)0 10097 y(a)66 b(max)10 b(i)s(m)l(um)66 b(s)m(eq)l(u)l(enc)-6 b(e)66 b(of)g(\003ip)-8 b(pa)l(b)l(l)n(e)65 b(v)r(ar)s(i)s(a)l(b)l(l)n (e)o(s,)71 b(fo)-5 b(ll)n(owe)l(d)65 b(by)g(a)i(v)r(ar)s(i)s(a)l(b)l(l) n(e)f(whic)-7 b(h)65 b(m)l(u)-7 b(s)i(t)66 b(be)h(pivote)l(d.)104 b(T)8 b(h)l(e)0 10296 y(r)q(o)-5 b(u)l(ti)s(n)n(e)57 b FJ(selectW)q(ithoutInf)g FP(scans)h(th)l(e)f(s)n(o)-7 b(rte)l(d)57 b(lis)-5 b(t)57 b(and)g(s)m(e)l(l)n(ec)-5 b(ts)59 b(th)l(e)e(a)n(c)-5 b(t)l(ual)57 b(pivot)g(v)r(ar)s(i)s(a)l(b)l (l)n(e)h(a)n(cc)l(o)-7 b(r)q(di)s(n)n(g)56 b(to)i(th)l(e)0 10495 y(c)-8 b(r)s(ite)l(r)s(i)s(a)53 b(s)-8 b(pec)m(i\002e)l(d)52 b(a)l(bove)h(fo)-7 b(r)53 b(a)g(max)10 b(i)s(m)l(um)53 b(s)m(eq)l(u)l(enc)-6 b(e)52 b(of)h(\003ips)g(and)f(\002)s(nal)g (pivot.)3771 11400 y(48)p eop end %%Page: 49 52 TeXDict begin 49 51 bop 253 466 a FM(D)8 b(Y)g(L)g(P)66 b FP(i)s(mpl)n(e)n(ments)60 b(o)l(n)n(e)h(a)-6 b(dditio)l(nal)59 b(e)-5 b(xpe)l(r)s(i)s(ment)s(al)61 b(ca)-6 b(pa)l(bility)59 b(withi)s(n)g(g)n(en)n(e)l(ralis)m(e)l(d)g(d)-7 b(ual)60 b(pivoti)s(n)n(g.)87 b(A)8 b(s)0 665 y(mentio)l(n)n(e)l(d)78 b(a)l(bove,)86 b(\003ip)-8 b(pi)s(n)n(g)77 b(n)m(o)l(n)m(bas)n(ic)g(pr) s(i)s(mal)j(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(will,)k(i)s(n)79 b(g)n(en)n(e)l(ral,)85 b(c)-7 b(han)n(g)n(e)78 b(th)l(e)h(v)r(al)n(u)l (e)o(s)g(of)g(an)0 865 y(arbitrary)56 b(s)m(e)-7 b(t)57 b(of)f(th)l(e)g(bas)n(ic)i(pr)s(i)s(mal)e(v)r(ar)s(i)s(a)l(b)l(l)n(e)o (s.)78 b(It)57 b(is)f(pos)-5 b(s)n(ib)l(l)n(e,)58 b(b)-8 b(u)l(t)56 b(e)-5 b(xpens)n(ive,)57 b(to)g(tra)n(c)-8 b(k)56 b(this)g(c)-7 b(han)n(g)n(e;)57 b(th)l(e)0 1064 y(majo)-7 b(r)64 b(c)l(os)-5 b(t)63 b(is)h(th)l(e)f(calcu)l(la)-8 b(tio)l(n)62 b(of)p 2573 963 117 7 v 65 w FG(a)2690 1089 y Fz(k)2822 1064 y FP(=)55 b FG(B)3117 1004 y FA(\0141)3270 1064 y FG(a)3376 1089 y Fz(k)3524 1064 y FP(fo)-7 b(r)63 b(ea)n(c)-7 b(h)64 b(candida)-8 b(te)62 b(c)l(o)-5 b(l)n(umn.)97 b(W)m(ith)63 b(this)g(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)61 b(i)s(n)0 1263 y(hand,)52 b(it)i(is)f(pos)-5 b(s)n(ib)l(l)n(e)54 b(to)f(l)n(oca)-8 b(te,)54 b(withi)s(n)e(th)l(e)h(s)m(eq)l(u)l(enc)-6 b(e)53 b(of)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(e)l(lig)t(ib)l(l)n(e)f (to)g(be)h(\003ip)-8 b(pe)l(d)52 b(o)-7 b(r)54 b(pivote)l(d,)f(th)l(e)0 1462 y(poi)s(nt)61 b(a)-8 b(t)61 b(whic)-7 b(h)60 b(th)l(e)h(max)10 b(i)s(m)l(um)60 b(pr)s(i)s(mal)i(i)s(nfeas)n(ibility)e(is)i(a)-8 b(t)61 b(a)g(m)s(i)s(ni)s(m)l(um)g(ove)l(r)h(th)l(e)e(bas)n(ic)i(v)r (ar)s(i)s(a)l(b)l(l)n(e)o(s;)67 b(this)0 1662 y(v)r(ar)s(i)s(a)l(b)l(l) n(e)50 b(bec)l(o)n(me)o(s)g(th)l(e)e(pivot)h(v)r(ar)s(i)s(a)l(b)l(l)n (e.)65 b(T)8 b(his)49 b(me)-7 b(th)n(od)49 b(of)g(s)m(e)l(l)n(ec)-5 b(ti)s(n)n(g)48 b(th)l(e)h(pivot)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(is)f(i) s(mpl)n(e)n(mente)l(d)f(i)s(n)0 1861 y(th)l(e)k(r)q(o)-5 b(u)l(ti)s(n)n(e)53 b FJ(selectW)q(ithInf)p FP(.)249 2160 y(Co)n(mp)-5 b(u)l(t)s(a)d(tio)l(nal)74 b(e)-5 b(xpe)l(r)s(ienc)f (e)75 b(s)-8 b(h)n(ows)75 b(tha)-8 b(t)74 b(u)-7 b(s)n(i)s(n)n(g)75 b(th)l(e)g(m)s(i)s(ni)s(m)l(um)g(max)10 b(i)s(m)l(um)74 b(pr)s(i)s(mal)i(i)s(nfeas)n(ibility)e(to)0 2359 y(c)-7 b(h)n(oos)m(e)52 b(th)l(e)g(pivot)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)58 b FG(x)2151 2384 y Fz(f)2276 2359 y FP(is)52 b(n)m(ot)f(a)h(good)f(s)-5 b(tra)d(te)j(g)8 b(y)52 b(wh)l(en)e(d)-7 b(ual)51 b(s)n(i)s(mpl)n(e)-5 b(x)53 b(is)f(beha)-7 b(vi)s(n)n(g)50 b(we)l(ll.)64 b(Dual)52 b(s)n(i)s(m-)0 2558 y(pl)n(e)-5 b(x)58 b(move)o(s)h(thr)q(o)-5 b(u)l(gh)55 b(a)k(s)m(eq)l(u)l(enc)-6 b(e)58 b(of)f(pr)s(i)s(mal)i(i)s (nfeas)n(ib)l(l)n(e)f(bas)n(ic)g(s)n(o)-5 b(l)n(u)l(tio)l(ns.)80 b(Obs)m(e)l(rv)r(a)-8 b(tio)l(n)55 b(of)j(d)-7 b(ual)57 b(s)n(i)s(mpl)n(e)-5 b(x)0 2757 y(i)s(n)50 b(o)-5 b(pe)l(ra)d(tio)l(n) 49 b(often)i(s)-8 b(h)n(ows)49 b(a)i(pa)-8 b(tte)l(r)5 b(n)50 b(wh)l(e)l(r)q(e)g(th)l(e)g(v)r(al)n(u)l(e)o(s)h(of)g(pr)s(i)s (mal)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(gr)q(ow)f(i)s(nc)-8 b(r)q(eas)n(i)s(n)n(gly)48 b(i)s(nfeas)n(i-)0 2957 y(b)l(l)n(e)f(and)f (th)l(en,)h(withi)s(n)d(a)j(r)q(e)l(la)-8 b(tive)l(ly)46 b(few)g(pivots,)i(c)l(o)-5 b(lla)f(ps)m(e)46 b(to)h(feas)n(ibility)f (\(h)l(enc)-6 b(e)46 b(o)-5 b(pti)s(mality\).)62 b(Atte)n(mpti)s(n)n(g) 44 b(to)0 3156 y(s)-8 b(u)i(p)e(pr)q(e)o(s)j(s)56 b(th)l(e)g(i)s(niti)s (al)f(gr)q(owth)g(of)h(pr)s(i)s(mal)g(i)s(nfeas)n(ibility)f(is)h(c)l(o) -5 b(unte)l(rpr)q(od)e(u)i(c)g(tive,)55 b(l)n(en)n(gth)l(eni)s(n)n(g)e (th)l(e)i(s)m(eq)l(u)l(enc)-6 b(e)0 3355 y(of)56 b(pivots)h(r)q(eq)l (uir)q(e)l(d)f(to)g(a)-8 b(tt)s(ai)s(n)57 b(o)-5 b(pti)s(mality)-17 b(.)75 b(Howeve)l(r)-9 b(,)57 b(ve)l(ry)f(larg)n(e)f(i)s(nfeas)n(ib)l (l)n(e)i(pr)s(i)s(mal)g(v)r(al)n(u)l(e)o(s)g(pr)q(e)o(s)m(ent)f(c)-7 b(hal-)0 3554 y(l)n(en)n(g)n(e)o(s)49 b(to)h(n)n(ume)l(r)s(ical)f(a)n (ccura)n(cy)-17 b(,)50 b(s)n(o)g(tha)-8 b(t)49 b(it)g(may)h(be)g(d)-5 b(e)o(s)n(ira)l(b)l(l)n(e)50 b(i)s(n)g(e)-5 b(xtr)q(e)n(me)49 b(cas)m(e)o(s)i(to)f(c)-7 b(h)n(oos)m(e)50 b(pivots)f(with)g(a)0 3754 y(goal)j(of)h(r)q(e)l(d)-7 b(u)i(c)m(i)s(n)n(g)50 b(pr)s(i)s(mal)j(i)s(nfeas)n(ibility)-17 b(.)253 4053 y FM(D)8 b(Y)g(L)g(P)52 b FP(by)45 b(d)-5 b(e)l(fa)d(u)l(lt)46 b(i)s(mpl)n(e)n(ments)f(a)h(\003)n(e)-5 b(x)10 b(ib)l(l)n(e)47 b(s)-5 b(tra)d(te)j(g)8 b(y)45 b(whic)-7 b(h)45 b(n)m(o)-7 b(r)5 b(mally)44 b(c)-7 b(h)n(oos)m(e)o(s)47 b(th)l(e)f(max)10 b(i)s(m)l(um)45 b(s)m(eq)l(u)l(enc)-6 b(e)0 4252 y(of)49 b(\003ips)g(fo)-5 b(ll)n(owe)l(d)49 b(by)g(a)g(\002)s(nal)g(pivot)g(\() p FG(i)12 b FP(.)p FG(e)p FP(.,)50 b(th)l(e)f(pivot)g(is)g(c)-7 b(h)n(os)m(en)50 b(to)f(max)10 b(i)s(m)s(is)m(e)49 b(th)l(e)g(i)s(mpr)q (ove)n(ment)g(i)s(n)g(th)l(e)g(d)-7 b(ual)0 4451 y(o)f(bj)l(ec)j (tive\).)122 b(If)73 b(it)f(d)-5 b(e)e(tec)i(ts)72 b(tha)-8 b(t)72 b(th)l(e)f(magnit)l(ud)-5 b(e)71 b(of)g(th)l(e)h(pr)s(i)s(mal)g (v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(has)f(gr)q(own)e(to)i(a)g(poi)s(nt)f (wh)l(e)l(r)q(e)0 4650 y(n)n(ume)l(r)s(ical)45 b(a)n(ccura)n(cy)f(may)h (be)h(c)l(o)n(mpr)q(o)n(m)s(is)m(e)l(d,)h(it)e(will)f(switc)-7 b(h)45 b(to)g(c)-7 b(h)n(oos)n(i)s(n)n(g)44 b(th)l(e)h(pivot)g(v)r(ar)s (i)s(a)l(b)l(l)n(e)h(to)f(m)s(i)s(ni)s(m)s(is)m(e)0 4850 y(th)l(e)52 b(max)10 b(i)s(m)l(um)53 b(i)s(nfeas)n(ibility)e(ove)l(r)i (th)l(e)g(pr)s(i)s(mal)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)249 5148 y(T)8 b(h)l(e)50 b(s)-5 b(tra)d(te)j(g)8 b(y)50 b(u)-7 b(s)m(e)l(d)51 b(fo)-7 b(r)51 b(g)n(en)n(e)l(ralis)m(e)l(d)e(d) -7 b(ual)49 b(pivoti)s(n)n(g)g(is)i(c)l(o)l(ntr)q(o)-5 b(ll)n(e)l(d)50 b(by)g(th)l(e)g(same)h(o)-5 b(ptio)l(n)49 b(u)-7 b(s)m(e)l(d)51 b(to)f(c)-7 b(h)n(oos)m(e)0 5348 y(be)g(tween)70 b(s)-5 b(t)s(andar)q(d)70 b(and)h(g)n(en)n(e)l(ralis)m (e)l(d)e(d)-7 b(ual)69 b(pivoti)s(n)n(g.)117 b(T)8 b(h)l(e)71 b(c)l(o)n(mpl)n(e)-7 b(te)71 b(s)m(e)-7 b(t)71 b(of)g(o)-5 b(ptio)l(ns)69 b(is)i(s)-5 b(t)s(andar)q(d)70 b(d)-7 b(ual)0 5547 y(pivoti)s(n)n(g;)95 b(g)n(en)n(e)l(ralis)m(e)l(d)81 b(d)-7 b(ual)82 b(pivoti)s(n)n(g)e(to)j(max)10 b(i)s(m)s(is)m(e)82 b(d)-7 b(ual)82 b(o)-8 b(bj)l(ec)j(tive)82 b(i)s(mpr)q(ove)n(ment;)96 b(g)n(en)n(e)l(ralis)m(e)l(d)81 b(d)-7 b(ual)0 5746 y(pivoti)s(n)n(g)54 b(to)i(m)s(i)s(ni)s(m)s(is)m(e)g(max)10 b(i)s(m)l(um)55 b(pr)s(i)s(mal)h(i)s(nfeas)n(ibility;)g(and)f(th)l(e)h(\003)n(e)-5 b(x)10 b(ib)l(l)n(e)56 b(g)n(en)n(e)l(ralis)m(e)l(d)e(s)-5 b(tra)d(te)j(g)8 b(y)55 b(u)-7 b(s)m(e)l(d)56 b(as)0 5945 y(th)l(e)c(d)-5 b(e)l(fa)d(u)l(lt.)249 6244 y(Antid)j(e)g(g)n(en)n (e)l(ra)n(cy)86 b(u)-7 b(s)n(i)s(n)n(g)87 b(pe)l(rt)l(urbe)l(d)g(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(ms)87 b(is)h(u)-7 b(s)m(e)l(d)88 b(with)f(g)n(en)n(e)l(ralis)m(e)l(d)g(d)-7 b(ual)87 b(pivoti)s(n)n(g.) 170 b(T)8 b(h)l(e)0 6444 y(alignment-bas)m(e)l(d)51 b(anti-d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)51 b(s)-5 b(tra)d(te)j(g)t(ie)o(s)53 b(ar)q(e)g(n)m(ot)f(i)s(mpl)n(e)n(mente)l(d.)3771 11400 y(49)p eop end %%Page: 50 53 TeXDict begin 50 52 bop 0 475 a FL(14)238 b(Pr)r(im)n(al)80 b(Sim)-7 b(ple)d(x)0 959 y FP(T)8 b(h)l(e)66 b(pr)s(i)s(mal)h(s)n(i)s (mpl)n(e)-5 b(x)68 b(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n)65 b(i)s(n)70 b FM(D)8 b(Y)g(L)g(P)73 b FP(is)67 b(a)g(two-p)-6 b(has)m(e)66 b(algo)-7 b(r)s(ithm.)110 b FM(D)8 b(Y)g(L)g(P)72 b FP(will)66 b(c)-7 b(h)n(oos)m(e)67 b(pr)s(i)s(mal)0 1158 y(s)n(i)s(mpl)n(e)-5 b(x)44 b(p)-6 b(has)m(e)43 b(II)h(wh)l(en)n(eve)l(r)f(th)l(e)g(curr)q(ent)g(bas)n(ic)h(s)n(o)-5 b(l)n(u)l(tio)l(n)41 b(is)j(pr)s(i)s(mal)g(feas)n(ib)l(l)n(e)g(b)-8 b(u)l(t)42 b(n)m(ot)h(d)-7 b(ual)42 b(feas)n(ib)l(l)n(e.)63 b(It)44 b(will)0 1357 y(c)-7 b(h)n(oos)m(e)55 b(pr)s(i)s(mal)g(s)n(i)s (mpl)n(e)-5 b(x)55 b(p)-6 b(has)m(e)55 b(I)g(wh)l(en)e(th)l(e)i(curr)q (ent)f(bas)n(ic)h(s)n(o)-5 b(l)n(u)l(tio)l(n)54 b(is)h(n)n(eith)l(e)l (r)e(pr)s(i)s(mal)i(o)-7 b(r)55 b(d)-7 b(ual)54 b(feas)n(ib)l(l)n(e.)0 1556 y(T)8 b(h)l(e)68 b(pr)s(i)s(mary)g(r)q(o)-5 b(l)n(e)69 b(of)f(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x)69 b(i)s(n)j FM(D)8 b(Y)g(L)g(P)74 b FP(is)69 b(to)f(r)q(eo)-5 b(pti)s(m)s(is)m(e)68 b(fo)-5 b(ll)n(owi)s(n)n(g)66 b(th)l(e)i(a)-6 b(dditio)l(n)67 b(of)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)0 1756 y(Si)s(nc)-6 b(e)52 b(pr)s(i)s(mal)h(p)-6 b(has)m(e)53 b(I)g(r)q(eq)l(uir)q(e)o(s)g (n)n(eith)l(e)l(r)f(pr)s(i)s(mal)h(o)-7 b(r)53 b(d)-7 b(ual)52 b(feas)n(ibility)-17 b(,)53 b(it)f(is)h(th)l(e)g(fallba)n(c)-8 b(k)51 b(s)n(i)s(mpl)n(e)-5 b(x.)249 2054 y(T)8 b(h)l(e)62 b(pr)s(i)s(mal)h(s)n(i)s(mpl)n(e)-5 b(x)63 b(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n)61 b(i)s(nc)l(o)-7 b(rpo)g(ra)f(te)o(s)63 b(pr)q(oj)l(ec)-5 b(te)l(d)62 b(s)-5 b(tee)e(pe)o(s)i(t)64 b(e)l(dg)n(e)e(\(PSE\))f(pr)s (ic)m(i)s(n)n(g)g(\(\2474.1\),)0 2254 y(s)-5 b(t)s(andar)q(d)75 b(\(\24714.6\))f(and)g(g)n(en)n(e)l(ralis)m(e)l(d)f(\(\24714.7\))h (pivoti)s(n)n(g,)79 b(and)74 b(pe)l(rt)l(urba)-8 b(tio)l(n-bas)m(e)l(d) 73 b(\(\2475\))h(and)g(alignment-)0 2453 y(bas)m(e)l(d)53 b(\(\2476\))f(antid)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)51 b(algo)-7 b(r)s(ithms.)249 2752 y(Fig)n(ur)q(e)53 b(9)f(s)-8 b(h)n(ows)52 b(th)l(e)h(call)g(s)-5 b(tru)g(c)g(t)l(ur)q(e)52 b(of)h(th)l(e)f(pr)s(i)s(mal)h(s)n(i)s(mpl)n(e)-5 b(x)54 b(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n.)725 7341 y @beginspecial 33 @llx 423 @lly 414 @urx 684 @ury 3810 @rwi @setspecial %%BeginDocument: /devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/primalcalls.eps %!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/primalcalls.epsu %%Creator: IslandDraw for lou %%CreationDate: Sat Sep 10 14:59:05 2005 %%Pages: 1 %%BoundingBox: 33 423 414 684 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 477 327 1 654 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000060001 % 001000020060200000003000000000000060200001 % 000000000000000000000000000000000000000000000000000000000000000000000000020001 % 0011000e0020200000001000000000000020200001 % 000000000000000000000000000000000000000000000000000000000000000000000000020000 % 000100020020000000001000000000000020000000 % 0000000000000000000000000000000000000000000000000000000000000000000000003e7703 % 3733db821e2e60000001f3b806feef371e2e61a000 % 000000000000000000000000000000000000000000000000000000000000000000000000622201 % 18911cc23333200000031110092450b9b333224007 % 00000000000000000000000000000000000000000000000000000000000000000000001c423201 % 10910842212120ffffe211900eb64390a12123a007 % 0000000000000000000000000000000000000000000000000000000000000000000003fc421401 % 1091084221212000000210a0019a8c90a121206006 % 000000000000000000000000000000000000000000000000000000000000000000003fc0461401 % 109108c623232000000230a0089b1191a323222006 % 00000000000000000000000000000000000000000000000000000000000000000003fc003b0803 % b9f9cf8f1e3e20000001d8400f090edf1e3e23c005 % 0000000000000000000000000000000000000000000000000000000000000000007f8000000800 % 000008000000200000000040000000100000200005 % 000000000000000000000000000000000000000000000000000000000000000007f800000038fc % 000008000000a000000001c7e00000100000a00004 % 00000000000000000000000000000000000000000000000000000000000000007f800000006000 % 00001c000001c00000000300000000380001c00004 % 000000000000000000000000000000000000000000000000000000000000000ff0000000000000 % 000000000000000000000000000000000000000003 % 00000000000000000000000000000000000000000000000000000000000000ff00000000000000 % 000000000000000000000000000000000000000003 % 0000000000000000000000000000000000000000000000000000000000000ff000000000000000 % 000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000001fe0000000000000000 % 000000000000000000000000000000000000000002 % 00000000000000000000000000000000000000000000000000000000001fe00000000000000000 % 000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000001fe000000000000000000 % 000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000003fc0000000000000000000 % 030000400c04000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000003fc00000000000000200000 % 010001c00404000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000003fc000000000000000200000 % 015800400400000000000000000000000000000007 % 000000000000000000000000000000000000000000000000000007f800000000000000007bf771 % e126e043c5cc000000000000000000000000000007 % 00000000000000000000000000000000000000000000000000007f8000000000000000002122fa % 114730466664000000000000000000000000000006 % 0000000000000000000000000000000000000000000000000007f8000000000000003ffc21b280 % 71e210442424000000000000000000000000000006 % 00000000000000000000000000000000000000000000000000ff00000000000007ffffe020d481 % 912210442424000000000000000000000000000005 % 0000000000000000000000000000000000000000000000000ff00000000000fffffc000020d8ca % 313230c46464000000000000000000000000000005 % 000000000000000000000000000000000400003020000000ff000000001fffff80000000384871 % dbbbe1e3c7c4000000000000000000000000000004 % 0000000000000000000000000000000004000010e000001fe0000003fffff00000000000000000 % 000200000004000003000000000010300000000004 % 0000000000000000000000000000000000000010200001fe00007ffffe00000000000000000000 % 000200000014000001000000000030100000000003 % 00000000000000000000000000000373edbb0f1020001fe00fffffc00000000000000000000000 % 000700000038000001000000000010158000000003 % 0000000000000000000000000000039904cc90902003fdfffff800000000000000000000000000 % 00000000000000001f3b80f1e3cf17120000000002 % 0000000000000000000000000000010904888390203fffff000000000000000000000000000000 % 00000000000000003111010b163898940000000002 % 0000000000000000000000000001810904888c90203fff00000000000000000000000000000000 % 000000000000000e2119003a0410109e0000000001 % 0000000000000000000000000001811904889190603ffffff80000000000000000000000000000 % 000000000000001c210a00ca041010920000000005 % 000000000000000000000000000101f38fddcef8f01fff0fffffc0000000000000000000000000 % 0000000000000078230a011b163890930000000005 % 0000000000000000000000000003010000000000001ffff0007ffffe0000000000000000000000 % 00000000000000e01d8400ede3cf39fb8000000005 % 0000000000000000000000000003010000000000001fdf7f800003fffff0000000000000000004 % 38000200602003c000040000000000000000000005 % 0000000000000000000000000003038000000000000ff7e7f80000001fffff8000000000000004 % 40000e0020200700001c7e00000000000000000003 % 0000000000000000000000000006000000000000000ff8f87fc000000000fffffc000000000000 % 4000020020001e0000300000000000000000000005 % 00000000000000000000000000060000000000000007fe1f03fc000000000007ffffe0007773ec % eef7021e2e60380000000000000000000000000005 % 00000000000000000000000000060000000000000007ff07e03fc00000000000003ffffc22f904 % 447982333320f00000000000000000000000000001 % 00000000000000000000000000060000000000000003ffc0f803fe0000000000000001fc348104 % 465082212120e00000000000000000000000000005 % 000000000000000000000000000c0000000000000003ffe03f001fe00000000000000000148104 % 429082212120780000000000000000000000000005 % 000000000000000000000000000c0000000000000001dff807c001fe000000000000000018c904 % 4291862323201c0000000000000000000000000005 % 000000000000000000000000000c0000000000000001edfc00f8001ff00000000000000008738e % e11f0f1e3e200f0000000000000000000000000005 % 000000000000000000000000000c0000000000000001f67e003f0000ff00000000000000000000 % 011000000020038003000000000020000000000007 % 00000000000000000000000000180000000000000000f33f8007c0000ff0000000000000000000 % 0710000000a001e001000000040020000000000005 % 00000000000000000000000000180000000000000000fb9dc001f80000ff800000000000000000 % 0c38000001c0007001000000040000000000000005 % 0000000000000000000000000018000000000000000079cef0003e000007f80000000000000000 % 000000000000003c1f3b8069cf6e6efb8f3fbb0685 % 000000000000000000000000001000000000000000007ce7380007c000007f8000000000000000 % 000000000000000e31110093e473245cd090cc8905 % 000000000000000000000000003000000000000000003c71de0001f8000007fc00000000000000 % 0000000000000006211900ea042126884390888e85 % 000000000000000000000000003000000000000000003e38e700003e0000003fc0000000000000 % 0000000000000000210a001a042122884c90888185 % 000000000000000000000000003000000000000000001f1873c0000fc0000003fc000000000000 % 0000000000000000230a008b24232308d190888885 % 000000000000000000000000002000000000000000001f0c39e00001f00000003fe00000000000 % 00000000000000001d8400f1c73e710f8ef9ddcf01 % 000000000000000000000000006000000000000000001f8e1c7000003e00000001fe0000060000 % 000000000c04000000040000002000080000000002 % 000000000000000000000000006000000000000000000f870f3c00000fc00000001fe000020000 % 0000000004040000001c7e00002000080000000000 % 000000000000000000000000006000000000000000000fc3838e000001f000000001ff00020000 % 0000000004000000003000000070001c0000000007 % 00000000000000000000000000c0000000000000000007e1c1c78000007e000000000ff03e7700 % d7efe373c5cc340000000000000000000000000005 % 00000000000000000000000000c0000000000000000007e0e0e1c000000f8000000000fc622201 % 2246139e6664480000000000000000000000000005 % 00000000000000000000000000c0000000000000000003f06070f0000001f0000000000c423201 % d364710c2424740000000000000000000000000005 % 00000000000000000000000000c0000000000000000003f03038380000007e0000000000421400 % 31a9910c24240c0000000000000000000000000005 % 0000000000000000000000000180000000000000000001f8180e1e0000000f8000000000461401 % 11b2311c6464440000000000000000000000000005 % 0000000000000000000000000180000000000000000001fc1c070f00000003f0000000003b0801 % e091d9f3c7c4780000000000000000000000000004 % 0000000000000000000000000180000000000000000000fc0e0383800000007c00000000000800 % 000001000004000000000000000000000000000005 % 0000000000000000000000000180000000000000000000fe0701c1e00000000f800000000038fc % 000001000014000000000000000000000000000000 % 0000000000000000000000000300000000000000000000fe0380e07000000003f0000000006000 % 000003800038000000000000000000000000000002 % 00000000000000000000000003000000000000000000007b01c0783c000000007c000000000000 % 000000000000000000000000000000000000000000 % 00000000000000000000000003000000000000000000007f80c01c0e000000001f800000000000 % 000000000000000000000000000000000000000005 % 00000000000000000000000002000000000000000000003f80600e078000000003e00000000000 % 000000000000000000000000000000000000000005 % 00000000000000000000000006000000000000000000003fc0700701c0000000007c0000000000 % 000000000000000000000000000000000000000005 % 00000000000000000000000006000000000000000000001fc0380380f0000000001f8000000000 % 000000000000000000000000000000000000000005 % 00000000000000000000000006000000000000000000001f601c01c0780000000003e000060000 % 000008008000000000000000000000000000000003 % 00000000000000000000000004000000000000000000000fe00e00701c0000000000fc00020000 % 000008008800000000000000000000000000000005 % 0000000000000000000000000c000000000000000000000fb00700380f00000000001f00020000 % 000000000800000000000000000000000000000007 % 0000000000000000000000000c000000000000000000000ff803001c03800000000003e03e7703 % 70d719b99e00000000000000000000000000000004 % 0000000000000000000000000c0000000000000000000007d801800e01e00000000000fc622203 % 992f88c48800000000000000000000000000000003 % 000000000000000000000000180000000000000000000007ec00c007007000000000001c423201 % 09d808848800000000000000000000000000000003 % 000000000000000000000000180000000000000000000003ec00e003c03c000000000000421401 % 083808848800000000000000000000000000000003 % 000000000000000000000000180000000000000000000003f6007000e00e000000000000461401 % 191c88848800000000000000000000000000000004 % 000000000000000000000000180000000000000000000001f700380070078000000000003b0801 % f1e71dcfce00000000000000000000000000000003 % 000000000000000000000000300000000000000000000001fb001c003803c00000000000000801 % 000000000000000000000000000000000000000002 % 000000000000000000000000300000000000000000000000f9800e001c00e000000000000038fd % 000000000000000000000000000000000000000003 % 000000000000000000000000300000000000000000000000fd8006000e00780000000000006003 % 800000000000000000000000000000000000000004 % 000000000000000000000000300000000000000000000000fcc0030003801c0000000000000000 % 000000000000000000000000000000000000000004 % 0000000000000000000000006000000000000000000000007ee0038001c00f0000000000000000 % 000000000000000000000000000000000000000003 % 0000000000000000000000006000000000000000000000007e6001c000e0038000000000000000 % 000000000000000000000000000000000000000007 % 0000000000000000000000006000000000000000000000003f7000e0007001e000000000000000 % 000000000000000000000000000000000000000002 % 0000000000000000000000004000000000000000000000003f3000700038007000000000000000 % 000000000000000000000000000000000000000004 % 000000000000000000000000c000000000000000000000001f980038001e003c00000000000000 % 000000000000000000000000000000000000000006 % 000000000000000000000000c000000000000000000000001f9c00180007001e00000000000000 % 000000000000000000000000000000000000000006 % 000000000000000000000000c000000000000000000000000fcc000c0003800700000000000000 % 000000000000000000000000000000000000000006 % 0000000000000000000000008000000000000000000000000fce00060001c003c0000000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000180000000000000000000000007e600070000e000e0000000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000180000000000000000000000007f300038000700078000000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000180000000000000000000000007f30001c0001c001c000000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000300000000000000000000000003f98000e0000e000f000000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000300000000000000000000000003f9c0007000070003800000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000300000000000000000000000001fcc0003000038001e00000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000300000000000000000000000001fc6000180001c000f00000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000600000000000000000000000000fe60001c0000f000380000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000600000000000000000000000000fe30000e000038001e0000000000 % 000000000000000000000000000000000000000006 % 000000000000000000000006000000000000000000000000007f38000700001c00070000000000 % 000000000000000000000000000000000000000006 % 000000000000000000000006000000000000000000000000007b18000380000e0003c000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000c000000000000000000000000007d8c0001c000070000e000000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000c000000000000000000000000003d8c0000c0000380007800000000 % 000000000000000000000000000000000000000000 % 00000000000000000000000c0000000000000000000000000036c60000600000e0001c00000000 % 000000000000000000000000000000000000000006 % 000000000000000000000008000000000000000000000000001ec7000030000070000f00000000 % 000000000000000000000000000000000000000000 % 000000000000000000000018000000000000000000000000001b63000038000038000780060000 % 0008000031000000000000400000c0000000000001 % 000000000000000000000018000000000000000000000000000f6380001c00001c0001c0020000 % 000800001100000000000040000040000000000001 % 000000000000000000000018000000000000000000000000000db180000e00000e0000f0020000 % 000000001000000000000000000056000000000001 % 0000000000000000000000100000000000000000000000000007b0c000070000078000383e7703 % 73f9bb0f13370000001bbec79c7748000000000001 % 0000000000000000000000300000000000000000000000000006d8e00003800001c0001c622203 % 9908cc90911887ffff1cd04c7e1650000000000001 % 0000000000000000000000300000000000000000000000000007d8600001800000e0001c423201 % 09088883911087ffff085048200878000000000001 % 00000000000000000000003000000000000000000000000000036c700000c00000700038421401 % 0908888c9110800000085048201c48000000000001 % 0000000000000000000000600000000000000000000000000003ec300000e00000380070461401 % 19088891911080000008d04c72264c000000000001 % 0000000000000000000000600000000000000000000000000001b61800007000001c00e03b0801 % f39dddcefbb9c000000fb8e79c77ee000000000001 % 0000000000000000000000600000000000000000000000000001b61800003800000703c0000801 % 000000000000000000080000000000000000000001 % 0000000000000000000000600000000000000000000000000000db0c00001c00000387000038fd % 000000000000000000080000000000000000000001 % 0000000000000000000000c00000000000000000000000000000db8e00000e000001ce00006003 % 8000000000000000001c0000000000000000000001 % 0000000000000000000000c000000000000000000000000000007d86000006000000fc00000000 % 000000000000000000000000000000000000000001 % 0000000000000000000000c000000000000000000000000000006dc30000030000007000000000 % 000000000000000000000000000000000000000001 % 0000000000000000000000c000000000000000000000000000003ec3000001800000fc00000000 % 000000000000000000000000000000000000000001 % 000000000000000000000180000000000000000000000000000036e1800001c00003ce00000000 % 000000000000000000000000000000000000000001 % 00000000000000000000018000000000000000000000000000003f61c00000e000070700000000 % 000000000000000000000000000000000000000000 % 00000000000000000000018000000000000000000000000000001b70c0000070000e0380060000 % 000800003001000000000000000000000000000002 % 00000000000000000000010000000000000000000000000000001bb060000038001c01c0020000 % 000800001001000080000000000000000000000000 % 00000000000000000000030000000000000000000000000000000db86000001c007800e0020000 % 000000001000000080000000000000000000000000 % 00000000000000000000030000000000000000000000000000000dd83000000c00e000383e7703 % 73f9bb0f13737779e0000000000000000000000000 % 000000000000000000000300000000000000000000000000000006cc3800000601c0001c622203 % 9908cc90939922cc80000000000000000000000007 % 000000000000000000000200000000000000000000000000000006cc180000070780000c423201 % 090888839109348480000000000000000000000000 % 000000000000000000000600000000000000000000000000000003661c0000038e00001c421401 % 0908888c9109148480000000000000000000000007 % 000000000000000000000600000000000000000000000000000003660c000001dc000078461401 % 190888919119188c80000000000000000000000000 % 000000000000000000000600000000000000000000000000000003b306000000f80001e03b0801 % f39dddcef9f38878e0000000000000000000000000 % 000000000000000000000c00000000000000000000000000000001b307000000f00003c0000801 % 000000000100000000000000000000000000000000 % 000000000000000000000c000000000000000000000000000000019983000001f0000f000038fd % 000000000100000000000000000000000000000002 % 000000000000000000000c00000000000000000000000000000000d98380000398003c00006003 % 800000000380000000000000000000000000000002 % 000000000000000000000c00000000000000000000000000000000ccc180000f0c007800000000 % 000000000000000000000000000000000000000001 % 0000000000000000000018000000000000000000000000000000006cc0c0001c0e01e000000000 % 000000000000000000000000000000000000000001 % 0000000000000000000018000000000000000000000000000000006660c0003807038000000000 % 000000000000000000000000000000000000000000 % 00000000000000000000180000000000000000000000000000000036606000f0038f0000000000 % 000000000000000000000000000000000000000000 % 00000000000000000000180000000000000000000000000000000033307001c001fc0000000000 % 000000000000000000000000000000000000000007 % 0000000000000000000030000000000000000000000000000000003b3030038000f80000000000 % 000000000000000000000000000000000000000007 % 0000000000000000000030000000000000000000000000000000001998180f0001e00000000000 % 000000000000000000300000000002030000000006 % 0000000000000000000030000000000000000000000000000000001d9c181c0007b00000000000 % 000000000000000000100000000006010000000006 % 0000000000000000000020000000000000000000000000000000000ccc0c38000f380000000000 % 000000000000000000100000000002015800000005 % 0000000000000000000060000000000000000000000000000000000cce0e70003c1c0000000000 % 000000000000000001f3b80f1e78f2e12000000005 % 00000000000000000000600000000000000000000000000000000006e607e000700e0000000000 % 000000000000000003111010b1c58b114000000004 % 0000000000000000000060000000000000000000000000000000000667078001e0070000000000 % 0000000000000000e2119003a0810211e000000004 % 000000000000000000004000000000000000000000000000000000037307000780038000000000 % 0000000000000001c210a00ca08102112000000003 % 00000000000000000000c00000000000000000000000000000000003339f800f00018000000000 % 00000000000000038230a011b1c58a113000000003 % 00000000000000000000c00000000000000000000000000000000001b9b9c03c0000c000000000 % 000000000000000701d8400ede78f73bb800000002 % 00000000000000000000c0000000000000000000000000000000000199f0c0f000006000000000 % 000000000000000e00004000000000000000000002 % 00000000000000000001800000000000000000000000000000000001dde0e1e000007000000000 % 000000000000001c0001cfc0000000000000000001 % 00000000000000000001800000000000000000000000000000000000cfe0678000003800000000 % 000000000000003800030000000000000000000001 % 00000000000000000001800000000000000000000000000000000000cf603e0000001c00000000 % 000000000000007000000000000000000000000000 % 000000000000000000018000000000000000000000000000000000006e303c0000000e00000000 % 00000000000000e000000000000000000000000000 % 000000000000000000030000000000000000000000000000000000007e30f80000000700000000 % 00000000000001c000000000000000000000000007 % 000000000000000000030000000000000000000000000000000000007319fc0000000300000000 % 000000000000038000000000000000000000000007 % 00000000000000000003000000000000000000000000000000000000f31f8c0000000180000000 % 000000000000070000000000000000000000000006 % 00000000000000000003000000000000000000000000000000000003d99e0600000001c0000000 % 0000000000000e0000000000000000000000000006 % 0000000000000000000600000000000000000000000000000000000719bc0600000000e0060000 % 3000000000001c0000600000060600000400000805 % 0000000000000000000600000000000000000000000000000000000e1cf6030000000070020000 % 100000000000380000200000020220000400000805 % 0000000000000000000600000000000000000000000000000000003c0dc6038000000038020000 % 100000000000700000200000020220000000000004 % 000000000000000000040000000000000000000000000000000000700fe301800000001c3e7701 % f109c6e6e3c0e00003e7701e3e3e79e6eceff71804 % 0000000000000000000c0000000000000000000000000000000000e01e6300c00000000c622203 % 131be3131421ffffc62220216262233734448f8803 % 0000000000000000000c0000000000000000000000000000000001c03e3180c00000003c423202 % 110a021210e1ffffc4232007424222121468880803 % 0000000000000000000c000000000000000000000000000000000780f3318060000003f8421402 % 110a02121320e00004214019424222121428880802 % 00000000000000000008000000000000000000000000000000000e03c318c07000001f80461402 % 311b221214607000046140234646223234308c8802 % 00000000000000000018000000000000000000000000000000001c078198e0300000fc003b0801 % d8edc73f3bb0380003b0801dbb3b39e3ee11c70801 % 0000000000000000001800000000000000000000000000000000781e018c60380007e000000800 % 0000000000001c0000008000000000020000000805 % 0000000000000000001800000000000000000000000000000000e03801cc7018007f00000038fc % 0000000000000e0000038fc0000000020000002805 % 0000000000000000003000000000000000000000000000000001c0f000c6300c03f00000006000 % 000000000000070000060000000000070000007005 % 000000000000000000300000000000000000000000000000000783c000e6380e1f800000000000 % 000000000000038000000000000000000000000005 % 000000000000000000300000000000000000000000000000000e078000671806fc000000000000 % 00000000000001c000000000000000000000000003 % 000000000000000000300000000000000000000000000000001c1e0000631c0fe0000000000000 % 00000000000000e000000000000000000000000005 % 0000000000000000006000000000000000000000000000000038780000338c7f00000000000000 % 000000000000007000000000000000000000000005 % 00000000000000000060000000000000000000000000000000f0f00000318ff180000000000000 % 000000000000003800000000000000000000000001 % 00000000000000000060000000000000000000000000000001c3c0000019df81c0000000000000 % 000000000000001c00000000000000000000000005 % 000000000000000000600000000000000000000000000000038700000019ff00c0000000000000 % 000000000000000e00600000600010000040000005 % 000000000000000000c000000000000000000000000000000f1e0000000fe300e0000000000000 % 000000000000000700200000200010000040000005 % 000000000000000000c000000000000000000000000000001c780000007e618060000000000000 % 000000000000000380200000200000000000000005 % 000000000000000000c0000000000000000000000000000038f0000003fe718030000000000000 % 0000000000000001c3e7701e2fb7377fb8c0000007 % 000000000000000000800000000000000000000000000000f3c000003f8630c030000000000000 % 0000000000000000e6222031243992247c40000005 % 000000000000000001800000000000000000000000000001cf000001f80630c018000000000000 % 000000000000000044232020241093444040000005 % 0000000000000000018000000000000000000000000000039e00000fc00318601c000000000000 % 000000000000000004214020241091444040000005 % 0000000000000000018000000000000000000000000000077800007e000318600c000000000000 % 000000000000000004614031241191846440000005 % 00000000000000000100000000000000000000000000001ee00007f000018c3006000000000000 % 000000000000000003b0801e7e1f388e3840000005 % 00000000000000000300000000000000000000000000003bc0003f0000018c3006000000000000 % 000000000000000000008000001000000040000005 % 00000000000000000300000000000000000000000000007f0001f8000000c61803000000000000 % 000000000000000000038fc0001000000140000005 % 0000000000000000030000000000000000000000000001fe000fc0000000c61803800000000000 % 000000000000000000060000003800000380000001 % 0000000000000000060000000000000000000000000003f800fe00000000e30c01800000000000 % 000000000000000000000000000000000000000002 % 0000000000000000060000000000000000000000000007e007e000000000630e01c00000000000 % 000000000000000000000000000000000000000000 % 000000000000000006000000000000000000000000001fc03f0000000000618600c00000000000 % 000000000000000000000000000000000000000007 % 000000000000000006000000000000000000000000003f01f80000000000318700600000000000 % 000000000000000000000000000000000000000005 % 00000000000000000c000000000000000000000000007c1fc0000000000030c300700000000000 % 000000000000000000000000000000000000000005 % 03000000040000180c0000000000000004000030e000f8fc00000000000018c380300000000000 % 000000000000000000000000000000000000000005 % 01000000040000080c00000000000000040000111003e7e0000000000000186180380000000000 % 000000000000000000000000000000000000000005 % 01000000000000080c00000000000000000000111007ff000000000000000c61c0180000000000 % 000000000000000000000000000000000000000005 % 1f3b81b9fcdd87881800000000000373edbb0f11100ff8000000000000000c30c00c0000000000 % 000000000000000000000000000000000000000004 % 311101cc84664848180000000000039904cc9090303f80000000000000000e30e00e0000000000 % 000000000000000000000000000000000000000005 % 21190084844441c81fffffffffff810904888390203c0000000000000000063860060000000000 % 000000000000000000000000000000000000000000 % 210a008484444648180000000000010904888c90403fe000000000000000071870070000000000 % 000000000000000000000000000000000000000002 % 230a008c844448c81c0000000000011904889190881ffe00000000000000031c30030000000000 % 000000000000000000000000000000000000000000 % 1d8400f9ceeee77c0c000000000001f38fddcef9f007ffe0000000000000030c38018000000000 % 000000000000000000000000000000000000000005 % 00040080000000000e00000000000100000000000003f9ff000000000000018e18018000000000 % 0000000000000000000000c000000000080c000005 % 001c7e80000000000600000000000100000000000001ff0ff0000000000001860c00c000000000 % 000000000000000000000040000000001804000005 % 003001c00000000007000000000003800000000000007fc0ff000000000000c70c00e000000000 % 000000000000000000000040000000000805600005 % 000000000000000007000000000000000000000000003ff00ff80000000000c306006000000000 % 0000000000000000000007cee03c79e3cb84800003 % 000000000000000003800000000000000000000000001ffc007f80000000006386003000000000 % 000000000000000000000c444042c7162c45000005 % 0000000000000000038000000000000000000000000007ef0007f8000000006183003000000000 % 000000000000000000018846400e82040847800007 % 000000000000000001c000000000000000000000000003fbc0007fc00000007183001800000000 % 000000000000000000030842803282040844800004 % 000000000000000001c000000000000000000000000001fcf80003fc00000030c1801c00000000 % 0000000000000000000608c28046c7162844c00003 % 000000000000000001e000000000000000000000000000ff3e00003fc0000030c1800c00000000 % 0000000000000000000c0761003b79e3dceee00003 % 000000000000000000e0000000000000000000000000003b8f800003fe00001860c00e00000000 % 000000000000000000180001000000000000000003 % 000000000000000000f0000000000000000000000000001de3e000001fe0001860c00600000000 % 0000000000000000003000073f0000000000000004 % 000000000000000000f0000000000000000000000000000f7878000001fe000c30600300000000 % 00000000000000000060000c000000000000000003 % 000000000000000000780000000000000000000000000003bc1e0000001ff00c30700380000000 % 000000000000000000c00000000000000000000002 % 000000000000000000780000000000000000000000000001cf07c0000000ff0618300180000000 % 000000000000000001800000000000000000000003 % 0000000000000000003c0000000000000000000000000000f3c1f00000000ff6183801c0000000 % 000000000000000003000000000000000000000004 % 0000000000000000003c000000000000000000000000000039e07c00000000ff8c1800c0000000 % 000000000000000006000000000000000000000004 % 0000000000000000003600000000000000000000000000001c781f0000000007fc1c0060000000 % 00000000000000000c000000000000000000000003 % 0000000000000000001e00000000000000000000000000000e1c03c0000000037f8c0070000000 % 000000000000000018000000000000000000000007 % 0000000000000000001b0000000000000000000000000000078f00f00000000187fe0030000000 % 0000200001880000300000c0000180004000010002 % 0000000000000000000f000000000000000000000000000001c3c03e00000001833fc038000000 % 000420000088800060000040000080004000010004 % 0000000000000000000d800000000000000000000000000000e1e00f80000000c307fc18000000 % 0004000000808000c0000040000080000000000006 % 0000000000000000000d800000000000000000000000000000787803e0000000c1833fec6e7ce3 % cdcf6dd87899eee1800007ddc0789fdccefe730006 % 00000000000000000006c000000000000000000000000000001c1e00f8000000618381fc7321f6 % 6e64266484888443ffff8c4880c488e64450f90006 % 00000000000000000006c000000000000000000000000000000e0f001e00000061c1801e212104 % 242424441c888643ffff884c808088424690810006 % 000000000000000000076000000000000000000000000000000783c00780000070c1c000212104 % 242424446488828380000845008088424290810006 % 0000000000000000000360000000000000000000000000000001c0e001f0000030e0c000232194 % 646424448c888281c00008c500c488464310c90006 % 0000000000000000000330000000000000000000000000000000e078007c0000386060003e70e3 % c7c77eee77dce100e00007620079dc7ce138710006 % 00000000000000000001b0000000000000000000000000000000701e001f000018706000200000 % 040000000000010070000002000000400000010006 % 00000000000000000001980000000000000000000000000000003c0f0007c00018303000200000 % 04000000000007003800000e3f0000400000050006 % 00000000000000000001980000000000000000000000000000000e03c000f0000c383000700000 % 0e00000000000c001c000018000000e000000e0006 % 00000000000000000000cc0000000000000000000000000000000700f0003c000c181800000000 % 00000000000000000e000000000000000000000006 % 00000000000000000000cc00000000000000000000000000000003c078000f80061c1800000000 % 000000000000000007000000000000000000000006 % 000000000000000000006600000000000000000000000000000000e01e0003e0060c0c00000000 % 000000000000000003800000000000000000000006 % 00000000000000000000660000000000000000000000000000000070070000f8030c0c00000000 % 000000000000000001c00000000000000000000006 % 0000000000000000000063000000000000000000000000000000003c03c0003e03060600000000 % 000000000000000000e00000000000000000000006 % 0000000000000000000033000000000000000000000000000000000e00f0000783860600000000 % 000000000000000000700000000000000000000006 % 0000000000000000000031800000000000000000000000000000000700380001e1830300000000 % 0000000000000000003800c0000c00000000000000 % 00000000000000000000398000000000000000000000000000000003801e00007d830380000000 % 0000000000000000001c0040000400000000000406 % 0000000000000000000018c000000000000000000000000000000001e00780001fc18180000000 % 0000000000000000000e00400004000c0000000400 % 0000000000000000000018c0000000000000000000000000000000007003c00007c181c0000000 % 0000000000000000000707ddc07c70738dc7884f01 % 000000000000000000000c60000000000000000000000000000000003800f00001f0c0c0000000 % 000000000000000000038c4880c4f88fc62cd8c401 % 000000000000000000000c60000000000000000000000000000000001e003800007cc0e0000000 % 00000000000000000001084c8084808c0428484401 % 000000000000000000000c300000000000000000000000000000000007001e00003f6060000000 % 000000000000000000000845008480740428484401 % 00000000000000000000063000000000000000000000000000000000038007800033e070000000 % 0000000000000000000008c5008cc8864428c8c401 % 0000000000000000000006180000000000000000000000000000000001e001c00038f830060000 % 060001000004000000000762007670fb8e77876701 % 00000000000000000000031800000000000000000000000000000000007000f000183e38020000 % 0200010000040000000000020000008c0000000001 % 00000000000000000000030c000000000000000000000000000000000038003c00181f98020000 % 02000000000000000000000e3f00018c0000000001 % 00000000000000000000030c00000000000000000000000000000000001c001e000c19fc3e7701 % e2fb7377fb8c000000000018000000f00000000001 % 00000000000000000000018600000000000000000000000000000000000f0007800c0c7c622203 % 1243992247c4000000000000000000000000000001 % 0000000000000000000001860000000000000000000000000000000000038001c0060c1e423202 % 024109344404000000000000000000000000000001 % 0000000000000000000001c3000000000000000000000000000000000001c000f0060e04421402 % 024109144404000000000000000000000000000001 % 0000000000000000000000c3000000000000000000000000000000000000f0003c030600461403 % 124119184644000000000000000000000000000001 % 0000000000000000000000c180000000000000000000000000000000000038000e0307003b0801 % e7e1f388e384000000000000000000000000000001 % 0000000000000000000000618000000000000000000000000000000000001c0007838300000800 % 000100000004000000000000000000000000000001 % 000000000000000000000060c000000000000000000000000000000000000f0001e183800038fc % 000100000014000000000000000000000000000001 % 000000000000000000000060c00000000000000000000000000000000000078000f1c180006000 % 000380000038000000000000000000000000000000 % 00000000000000000000003060000000000000000000000000000000000001c0003cc1c0000000 % 000000000000000000000000000000000000000002 % 00000000000000000000003060000000000000000000000000000000000000e0000ec0c0000000 % 000000000000000000000000000000000000000000 % 00000000000000000000001830000000000000000000000000000000000000780007e0e0000000 % 000000000000000000000000000000000000000000 % 000000000000000000000018300000000000000000000000000000000000001c0001e060000000 % 000000000000000000000000000000000000000000 % 000000000000000000000018180000000000000000000000000000000000000e00007060000000 % 000000000000000000000000000000000000000007 % 00000000000000000000000c180000000000000000000000000000000000000780003c30000000 % 000000000000000000000000000000000000000000 % 00000000000000000000000c0c00000000000000000000000000000000000001c0001f30060000 % 300000000000000000000000000000000000000007 % 00000000000000000000000e0c00000000000000000000000000000000000000e0001f98020000 % 100000000000200000000000000000000000000000 % 000000000000000000000006060000000000000000000000000000000000000078001df8020000 % 100060000000200000000000000000000000000000 % 00000000000000000000000606000000000000000000000000000000000000003c000c7c3e7701 % f1c38e371e21780000000000000000000000000000 % 00000000000000000000000303000000000000000000000000000000000000000e000c3c622203 % 13e45f18b363200000000000000000000000000002 % 00000000000000000000000303000000000000000000000000000000000000000700060e423202 % 12045010a121200000000000000000000000000002 % 000000000000000000000003018000000000000000000000000000000000000003c00600421402 % 12039010a121200000000000000000000000000001 % 000000000000000000000001818000000000000000000000000000000000000000e00300461402 % 33241910a323200000000000000000000000000001 % 00000000000000000000000180c0000000000000000000000000000000000000007003003b0801 % d9c7ce39de1db80000000000000000000000000000 % 000000000000000000000000c0c0000000000000000000000000000000000000003c0180000800 % 000460000000000000000000000000000000000000 % 000000000000000000000000c060000000000000000000000000000000000000000e01800038fc % 000c60000000000000000000000000000000000007 % 000000000000000000000000c060000000000000000000000000000000000000000701c0006000 % 000780000000000000000000000000000000000007 % 00000000000000000000000060300000000000000000000000000000000000000003c0c0000000 % 000000000000000000000000000000000000000006 % 00000000000000000000000060300000000000000000000000000000000000000001e0c0000000 % 000000000000000000000000000000000000000006 % 000000000000000000000000701800000000000000000000000000000000000000007060000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000301800000000000000000000000000000000000000003860000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000300c00000000000000000000000000000000000000001e30000000 % 000000000000000000000000000000000000000004 % 000000000000000000000000180c00000000000000000000000000000000000000000730000000 % 000000000000000000000000000000000000000004 % 000000000000000000000000180600300000000002000000000000000000000000000398060000 % 000000400000000000000000000000000000000003 % 0000000000000000000000001806001000000040020000000000000000000000000001f8020000 % 000800400000000000000000000000000000000003 % 0000000000000000000000000c030010000000400000000000000000000000000000007c020000 % 000800000000000000000000000000000000000002 % 0000000000000000000000000c0301f3b8069cf6e6efb8f3fbb06800000000000000003c3e7700 % d39edcddf71e7f760d000000000000000000000002 % 0000000000000000000000000601831110093e473245cd090cc89000000000000000001e622201 % 27c8e648b9a1219912000000000000000000000001 % 00000000000000000000000006018211900ea042126884390888e800000000000000000e423201 % d408424d108721111d000000000000000000000001 % 00000000000000000000000006000210a001a042122884c9088818000000000000000000421400 % 340842451099211103000000000000000000000000 % 00000000000000000000000003000230a008b24232308d19088888000000000000000000461401 % 1648464611a3211111000000000000000000000000 % 000000000000000000000000030001d8400f1c73e710f8ef9ddcf00000000000000000003b0801 % e38e7ce21f1df3bb9e000000000000000000000007 % 000000000000000000000000038000004000000200008000000000000000000000000000000800 % 000040001000000000000000000000000000000007 % 00000000000000000000000001800001c7e00002000080000000000000000000000000000038fc % 000040001000000000000000000000000000000006 % 00000000000000000000000001800003000000070001c000000000000000000000000000006000 % 0000e0003800000000000000000000000000000006 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000004 % 000000000000000000000000006000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000004 % 000000000000000000000000006000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000003 % 000000000000000000000000003000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000003 % 000000000000000000000000003000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000002 % 000000000000000000000000003000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000002 % 000000000000000000000000001800000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000001 % 000000000000000000000000001800000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000001c00000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000c00000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000c00000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000600000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000003 % 000000000000000000000000000600000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000600e0000000000000018000040000000c000000000081800000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000301000000000000000080000400000004000000000180800000 % 000000000000000000000000000000000000000001 % 000000000000000000000000000301000000000000000080000000000004000000000080ac0000 % 000000000000000000000000000000000000000005 % 0000000000000000000000000001839e7cf383509b8e7cb9e0dc7800007ddc07879e3cb8900000 % 000000000000000000000000000000000000000005 % 00000000000000000000000000018133218fc4b19cdf20ce1124c40000c488084c7162c4a00000 % 000000000000000000000000000000000000000005 % 00000000000000000000000000000121210407508850208471d4801ff884c801c8204084f00000 % 000000000000000000000000000000000000000005 % 00000000000000000000000000000121210400d088502085903480000084500648204084900000 % 000000000000000000000000000000000000000007 % 00000000000000000000000000000123218e445188d9208e3114c400008c5008cc716284980000 % 000000000000000000000000000000000000000005 % 0000000000000000000000000000039e70f3878ecf8e70f9d9ee780000762007679e3dcfdc0000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000000000000000008000000000000000000200000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000000000000000008000000000000000000e3f000000000000000 % 000000000000000000000000000000000000000005 % 00000000000000000000000000000000000000001c000000000000000001800000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000005 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 93.628 76.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_primalpivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.628 103.676] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (preoptimality) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 123.628 103.676] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_clrpivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 123.628 108.676] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_degenout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 123.75 98.676] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n 117.5 102.5 m 122.5 97.5 l gsave 0 0 0 0.176 0 B grestore n 117.5 102.5 m 122.5 102.5 l gsave 0 0 0 0.176 0 B grestore n 117.5 102.5 m 122.5 107.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 93.628 86.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_duenna) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 119.612 86.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_addtopivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 119.612 91.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_clrpivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 119.734 81.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n 113.48 85 m 118.48 80 l gsave 0 0 0 0.176 0 B grestore n 113.48 85 m 118.48 85 l gsave 0 0 0 0.176 0 B grestore n 113.48 85 m 118.48 90 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 93.628 71.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_primalin) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 121.128 71.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pricexk) s savemat setmatrix n 115 70 m 120 70 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 93.628 111.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_clrpivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.628 116.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_degenout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.628 121.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_setpivparms) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.628 56.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_swapobjs) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.628 46.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (tweakp1obj) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.628 61.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_pseinit) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.628 41.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_initp1obj) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 122.112 41.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_swapobjs) s savemat setmatrix n 115.98 39.975 m 120.98 39.975 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 93.628 51.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (verifyp1obj) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 118.75 48.676] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 118.75 53.676] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_setpivparms) s savemat setmatrix n 113.75 50 m 117.5 47.5 l gsave 0 0 0 0.176 0 B grestore n 113.75 50 m 117.5 52.5 l gsave 0 0 0 0.176 0 B grestore n 60 95 m 92.5 70 l gsave 0 0 0 0.176 0 B grestore n 60 95 m 92.5 75 l gsave 0 0 0 0.176 0 B grestore n 60 95 m 92.5 85 l gsave 0 0 0 0.176 0 B grestore n 60 95 m 92.5 102.5 l gsave 0 0 0 0.176 0 B grestore n 60 95 m 92.5 110 l gsave 0 0 0 0.176 0 B grestore n 60 95 m 92.5 115 l gsave 0 0 0 0.176 0 B grestore n 60 95 m 92.5 120 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 60 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 40 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 45 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 50 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 55 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 70 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 75 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 85 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 102.5 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 110 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 115 l gsave 0 0 0 0.176 0 B grestore n 60 47.5 m 92.5 120 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 45.4366 96.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal2) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 45.4366 48.5354] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal1) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 77.3726 128.957] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 45.4366 128.957] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (forcesuperbasic) s savemat setmatrix n 73.745 127.76 m 76.245 127.76 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 45.4366 121.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_setpivparms) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 12.5769 96.176] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_primal) s savemat setmatrix n 30.984 95 m 43.484 47.5 l gsave 0 0 0 0.176 0 B grestore n 30.984 95 m 43.484 95 l gsave 0 0 0 0.176 0 B grestore n 30.984 95 m 43.484 120 l gsave 0 0 0 0.176 0 B grestore n 30.984 95 m 43.484 127.5 l gsave 0 0 0 0.176 0 B grestore grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore %%EndDocument @endspecial 2293 7706 a(Fig)n(ur)q(e)53 b(9:)65 b(Call)53 b(Gra)-6 b(p)g(h)52 b(fo)-7 b(r)53 b(Pr)s(i)s(mal)g(Si)s(mpl)n(e)-5 b(x)0 8498 y Fu(14.1)197 b(Pr)r(im)n(al)65 b(T)-5 b(o)g(p)66 b(Leve)-5 b(l)0 8917 y FP(Pr)s(i)s(mal)77 b(s)n(i)s(mpl)n(e)-5 b(x)78 b(is)g(e)-5 b(xecu)l(te)l(d)77 b(wh)l(en)f(th)l(e)g(dy)7 b(nam)s(ic)76 b(s)n(i)s(mpl)n(e)-5 b(x)78 b(s)-5 b(t)s(a)d(te)78 b(ma)n(c)-7 b(hi)s(n)n(e)77 b(ente)l(rs)g(o)l(n)n(e)g(of)g(th)l(e)g(s) -5 b(t)s(a)d(te)o(s)0 9117 y FJ(dyPRIMAL1)42 b FP(o)-7 b(r)41 b FJ(dyPRIMAL2)p FP(.)62 b(If)42 b(r)q(eq)l(uir)q(e)l(d,)h(th)l (e)e(PSE)f(r)q(e)l(fe)l(r)q(enc)-6 b(e)41 b(frame)h(is)f(i)s(niti)s (alis)m(e)l(d)g(to)g(th)l(e)g(n)m(o)l(n)m(bas)n(ic)e(v)r(ar)s(i)s(a)l (b)l(l)n(e)o(s)0 9316 y(and)54 b(th)l(e)h(pr)q(oj)l(ec)-5 b(te)l(d)54 b(c)l(o)-5 b(l)n(umn)54 b(n)m(o)-7 b(r)5 b(ms)54 b(ar)q(e)h(i)s(niti)s(alis)m(e)l(d)f(to)h(o)l(n)n(e)f(\()p FG(vid)p FP(.)h(\2474.1\),)g(and)f(th)l(e)g(pr)s(i)s(mal)h(s)n(i)s(mpl) n(e)-5 b(x)56 b(r)q(o)-5 b(u)l(ti)s(n)n(e)0 9515 y FJ(dy_pr)s(im)m(al) 53 b FP(is)g(call)n(e)l(d.)249 9814 y FJ(dy_pr)s(im)m(al)68 b FP(c)l(o)l(ntr)q(o)-5 b(ls)66 b(th)l(e)h(u)-7 b(s)m(e)68 b(of)f(p)-6 b(has)m(e)67 b(I)h(\()p FJ(pr)s(im)m(al1)p FP(\))f(and)g(p)-6 b(has)m(e)67 b(II)h(\()p FJ(pr)s(im)m(al2)p FP(\))f(of)g(th)l(e)g(pr)s(i)s(mal)h(s)n(i)s(mpl)n(e)-5 b(x)68 b(al-)0 10013 y(go)-7 b(r)s(ithm.)114 b(T)8 b(h)l(e)69 b(pr)s(i)s(mary)g(p)-5 b(urpos)m(e)69 b(of)g FJ(dy_pr)s(im)m(al)h FP(is)g(to)f(pr)q(ovid)-5 b(e)69 b(a)h(l)n(oo)-5 b(p)69 b(whic)-7 b(h)68 b(all)n(ows)h(a)h(li)s(m)s(ite)l(d)f(n)n(umbe)l(r)0 10212 y(\(curr)q(ently)g(har)q(dwir)q(e)l(d)f(to)i(10\))f(of)h(r)q(eve) l(rs)n(io)l(ns)g(to)g(p)-6 b(has)m(e)70 b(I)h(if)f(pr)s(i)s(mal)g(feas) n(ibility)f(is)h(l)n(os)-5 b(t)71 b(d)-7 b(ur)s(i)s(n)n(g)68 b(p)-6 b(has)m(e)69 b(II.)3771 11400 y(50)p eop end %%Page: 51 54 TeXDict begin 51 53 bop 0 466 a FP(L)5 b(os)-5 b(s)56 b(of)f(pr)s(i)s(mal)h(feas)n(ibility)e(is)i(tr)q(ea)-8 b(te)l(d)55 b(as)g(a)h(n)n(ume)l(r)s(ic)f(a)n(ccura)n(cy)f(pr)q(o)-8 b(b)l(l)n(e)n(m;)56 b(with)d(ea)n(c)-7 b(h)56 b(s)-8 b(u)j(c)e(h)55 b(r)q(eve)l(rs)n(io)l(n)g(th)l(e)0 665 y(m)s(i)s(ni)s(m)l(um)d(pivot)h(s)m(e)l(l)n(ec)-5 b(tio)l(n)52 b(to)-5 b(l)n(e)l(ranc)f(e)o(s)53 b(ar)q(e)g(tighten)n(e)l(d)f(by)g(o)l (n)n(e)h(s)-5 b(te)e(p.)249 964 y(T)r(o)50 b(mai)s(nt)s(ai)s(n)g(pr)s (i)s(mal)g(feas)n(ibility)f(wh)l(en)g(r)q(e)-7 b(pair)s(i)s(n)n(g)49 b(a)h(s)n(i)s(n)n(g)n(u)l(lar)f(bas)n(is)i(\(\2477)-29 b(.2\))49 b(i)s(n)h(pr)s(i)s(mal)g(p)-6 b(has)m(e)50 b(II,)h(s)-8 b(u)i(pe)l(r)11 b(-)0 1163 y(bas)n(ic)57 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(may)e(be)i(c)-8 b(r)q(ea)g(te)l(d.) 74 b(Su)-6 b(pe)l(rbas)n(ic)56 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(will) e(n)m(ot)g(n)m(o)-7 b(r)5 b(mally)55 b(be)h(c)-8 b(r)q(ea)g(te)l(d)56 b(d)-7 b(ur)s(i)s(n)n(g)54 b(p)-6 b(has)m(e)56 b(I)0 1363 y(and)83 b(th)l(e)f(c)l(od)-5 b(e)84 b(as)-5 b(s)d(ume)o(s)83 b(tha)-8 b(t)83 b(it)g(will)f(n)m(ot)g(enc)l(o)-5 b(unte)l(r)82 b(th)l(e)n(m)4558 1302 y FA(4)4637 1363 y FP(.)157 b(Rar)q(e)l(ly)-17 b(,)90 b(a)83 b(s)m(eq)l(u)l(enc)-6 b(e)83 b(of)h(e)l(rr)q(o)-7 b(rs)83 b(d)-7 b(ur)s(i)s(n)n(g)0 1562 y(p)h(has)m(e)58 b(II)h(will)e(ca)-8 b(u)h(s)m(e)63 b FM(D)8 b(Y)g(L)g(P)64 b FP(to)58 b(l)n(os)m(e)g(pr)s(i)s(mal)h(feas)n(ibility)e(and)h(r)q (eve)l(rt)g(to)h(p)-6 b(has)m(e)57 b(I)i(with)e(s)-8 b(u)i(pe)l(rbas)n(ic)58 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)0 1761 y(s)-5 b(till)71 b(pr)q(e)o(s)m(ent)h(i)s(n)f(th)l(e)h(n)m(o)l(n)m (bas)n(ic)e(partitio)l(n.)120 b(T)8 b(h)l(e)72 b(r)q(o)-5 b(u)l(ti)s(n)n(e)71 b FJ(f)-6 b(or)m(cesuperbasic)71 b FP(is)h(call)n(e)l(d)g(to)g(ens)-8 b(ur)q(e)71 b(tha)-8 b(t)71 b(any)0 1960 y(s)-8 b(u)i(pe)l(rbas)n(ic)53 b(v)r(ar)s(i)s(a)l (b)l(l)n(e)o(s)g(ar)q(e)h(fo)-7 b(r)q(c)h(e)l(d)53 b(to)g(bo)-5 b(und)51 b(i)s(n)i(s)-8 b(u)j(c)e(h)52 b(a)h(p)-6 b(has)m(e)53 b(II)g(to)g(p)-6 b(has)m(e)53 b(I)g(trans)n(itio)l(n.)0 2553 y Fu(14.2)197 b(Pr)r(im)n(al)65 b(Phas)-5 b(e)65 b(I)0 2972 y FP(T)8 b(h)l(e)59 b(ove)l(rall)g(\003)n(ow)g(of)g(p)-6 b(has)m(e)59 b(I)h(of)f(th)l(e)g(pr)s(i)s(mal)h(s)n(i)s(mpl)n(e)-5 b(x)60 b(is)f(s)-8 b(h)n(own)58 b(i)s(n)h(Fig)n(ur)q(e)g(10.)85 b(T)8 b(h)l(e)59 b(body)f(of)i(th)l(e)f(r)q(o)-5 b(u)l(ti)s(n)n(e)0 3172 y(is)53 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)l(d)52 b(as)h(two)f(n)n(e)o (s)-5 b(te)l(d)52 b(l)n(oo)-5 b(ps.)66 b(T)8 b(h)l(e)52 b(o)-5 b(u)l(te)l(r)52 b(l)n(oo)-5 b(p)52 b(handl)n(e)o(s)h(s)-5 b(t)s(art)l(u)f(p)52 b(and)g(te)l(r)5 b(m)s(i)s(na)-8 b(tio)l(n,)52 b(and)g(th)l(e)g(i)s(nn)n(e)l(r)0 3371 y(l)n(oo)-5 b(p)53 b(handl)n(e)o(s)g(th)l(e)f(majo)-7 b(r)s(ity)53 b(of)g(r)q(o)-5 b(u)l(ti)s(n)n(e)53 b(pivots.)66 b(A)53 b(pivot)g(ite)l(ra)-8 b(tio)l(n)51 b(i)s(n)i(p)-6 b(has)m(e)53 b(I)h(n)m(o)-7 b(r)5 b(mally)51 b(c)l(o)l(ns)n(is)-5 b(ts)53 b(of)g(thr)q(ee)0 3570 y(s)-5 b(te)e(ps:)108 b(th)l(e)73 b(a)n(c)-5 b(t)l(ual)74 b(pivot)f(and)g(v)r(ar)s(i)s(a)l(b) l(l)n(e)i(u)-6 b(pda)e(te)o(s,)79 b(r)q(o)-5 b(u)l(ti)s(n)n(e)73 b(mai)s(ntenanc)-6 b(e)73 b(c)-7 b(h)l(ec)f(ks,)79 b(and)73 b(r)q(evis)n(io)l(n)h(of)g(th)l(e)0 3769 y(o)-8 b(bj)l(ec)j(tive.)249 4068 y(A)44 b(dy)7 b(nam)s(ically)43 b(modi\002e)l(d)g(arti\002c)m(i)s (al)h(o)-8 b(bj)l(ec)j(tive)44 b(is)h(u)-7 b(s)m(e)l(d)44 b(to)h(g)n(uid)-5 b(e)43 b(pivoti)s(n)n(g)g(to)h(feas)n(ibility)g(d)-7 b(ur)s(i)s(n)n(g)43 b(p)-6 b(has)m(e)44 b(I.)0 4267 y(T)8 b(h)l(e)56 b(\(m)s(i)s(ni)s(m)s(isa)-8 b(tio)l(n\))54 b(c)l(oe)l(\002)-49 b(\002c)m(ients)56 b(as)-5 b(s)n(ign)n(e)l(d)56 b(to)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(ar)q(e)h(-1)f(fo)-7 b(r)57 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(be)l(l)n(ow)e(th)l(eir)g(bo) -5 b(und,)56 b(0)g(fo)-7 b(r)0 4467 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)52 b(withi)s(n)d(bo)-5 b(unds,)50 b(and)h(+1)g(fo)-7 b(r)51 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(a)l(bove)f(th)l(eir)f(bo)-5 b(und.)64 b(On)50 b(entry)g(to)h(p)-6 b(has)m(e)51 b(I,)g FJ(dy_initp1obj)0 4666 y FP(fo)-7 b(r)5 b(ms)75 b(a)g(wo)-7 b(rki)s(n)n(g)72 b(s)m(e)-7 b(t)75 b(c)l(o)l(nt)s(ai)s(ni)s(n)n(g)d (all)j(i)s(nfeas)n(ib)l(l)n(e)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)81 b(c)l(o)l(ns)-5 b(tru)g(c)g(ts)73 b(th)l(e)h(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g)73 b(o)-8 b(bj)l(ec)j(tive,)0 4865 y(swa)f(ps)53 b(o)-5 b(u)l(t)52 b(th)l(e)g(o)-7 b(r)s(ig)t(i)s(nal)53 b(o)-8 b(bj)l(ec)j(tive,)52 b(and)g(i)s(ns)-5 b(t)s(alls)53 b(th)l(e)g(p)-6 b(has)m(e)52 b(I)h(o)-8 b(bj)l(ec)j(tive.)249 5164 y(Onc)f(e)67 b(th)l(e)f(p)-6 b(has)m(e)66 b(I)h(o)-8 b(bj)l(ec)j(tive)66 b(has)h(been)f(c)l(o)l(ns) -5 b(tru)g(c)g(te)l(d,)69 b(th)l(e)d(o)-5 b(u)l(te)l(r)66 b(l)n(oo)-5 b(p)66 b(is)h(ente)l(r)q(e)l(d)f(and)g FJ(dy_pr)s(im)m (alin)h FP(is)0 5363 y(call)n(e)l(d)76 b(to)f(s)m(e)l(l)n(ec)-5 b(t)76 b(th)l(e)f(i)s(niti)s(al)g(ente)l(r)s(i)s(n)n(g)g(v)r(ar)s(i)s (a)l(b)l(l)n(e.)134 b(T)8 b(h)l(en)74 b(th)l(e)h(i)s(nn)n(e)l(r)g(l)n (oo)-5 b(p)76 b(is)f(ente)l(r)q(e)l(d)g(and)g FJ(dy_pr)s(im)m(alpiv)l (ot)0 5563 y FP(is)59 b(call)n(e)l(d)f(to)h(pe)l(r)5 b(fo)-7 b(r)5 b(m)58 b(th)l(e)g(pivot.)82 b FJ(dy_pr)s(im)m(alpiv)l(ot) 57 b FP(\()p FG(vid)p FP(.)h(\24714.4\))g(will)g(c)-7 b(h)n(oos)m(e)58 b(a)h(l)n(ea)-7 b(vi)s(n)n(g)57 b(v)r(ar)s(i)s(a)l(b)l (l)n(e)i(\()p FJ(pr)s(im)m(alout)p FP(\),)0 5762 y(pivot)46 b(th)l(e)f(bas)n(is)i(\()p FJ(dy_piv)l(ot)p FP(\),)f(u)-6 b(pda)e(te)45 b(th)l(e)h(pr)s(i)s(mal)g(and)g(d)-7 b(ual)45 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(\()p FJ(pr)s(im)m(alupdate)p FP(\),)g(and)e(u)-6 b(pda)e(te)46 b(th)l(e)f(PSE)0 5961 y(pr)s(ic)m(i)s(n)n(g)56 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)56 b(and)h(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)57 b(c)l(os)-5 b(ts)59 b(\()p FJ(pseupdate)p FP(\).)80 b(Fo)-7 b(r)58 b(a)g(r)q(o)-5 b(u)l(ti)s(n)n(e)57 b(pivot,)i FJ(pseupdate)f FP(will)e(als)n(o)i(s)m (e)l(l)n(ec)-5 b(t)0 6160 y(an)70 b(ente)l(r)s(i)s(n)n(g)e(v)r(ar)s(i)s (a)l(b)l(l)n(e)i(fo)-7 b(r)70 b(th)l(e)g(n)n(e)-5 b(xt)70 b(pivot.)116 b FJ(dy_duenna)71 b FP(ev)r(al)n(ua)-8 b(te)o(s)70 b(th)l(e)g(o)-5 b(u)l(tc)l(o)n(me)69 b(of)h(th)l(e)g(pivot,)k(handl)n (e)o(s)0 6360 y(e)l(rr)q(o)-7 b(r)65 b(d)-5 b(e)e(tec)i(tio)l(n)64 b(and)h(r)q(ec)l(ove)l(ry)f(wh)l(e)l(r)q(e)g(pos)-5 b(s)n(ib)l(l)n(e,) 67 b(and)e(pe)l(r)5 b(fo)-7 b(r)5 b(ms)65 b(th)l(e)f(r)q(o)-5 b(u)l(ti)s(n)n(e)64 b(mai)s(ntenanc)-6 b(e)64 b(a)n(c)-5 b(tivitie)o(s)65 b(of)0 6559 y(a)n(ccura)n(cy)52 b(c)-7 b(h)l(ec)f(ks)53 b(and)f(r)q(e)l(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)52 b(of)g(th)l(e)h(bas)n(is.)249 6858 y(A)8 b(s)59 b(th)l(e)f(\002)s(nal)g (s)-5 b(te)e(p)59 b(i)s(n)f(a)h(r)q(o)-5 b(u)l(ti)s(n)n(e)58 b(pivot,)i FJ(tw)m(eakp1obj)e FP(scans)h(th)l(e)f(wo)-7 b(rki)s(n)n(g)56 b(s)m(e)-7 b(t)59 b(and)f(r)q(e)n(move)o(s)h(any)e(n)n (ewly)0 7057 y(feas)n(ib)l(l)n(e)51 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.) 66 b(T)8 b(h)l(e)50 b(o)-8 b(bj)l(ec)j(tive)50 b(func)-5 b(tio)l(n)49 b(is)i(a)-6 b(dj)f(u)g(s)i(te)l(d)51 b(to)f(r)q(e)l(\003)n (ec)-5 b(t)51 b(any)f(c)-7 b(han)n(g)n(e)o(s)49 b(and)h(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)50 b(c)l(os)-5 b(ts)51 b(and)0 7256 y(d)-7 b(ual)73 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(ar)q(e)h(a)-6 b(dj)f(u)g(s)i(te)l(d)74 b(o)-7 b(r)74 b(r)q(ecalcu)l(la)-8 b(te)l(d)73 b(as)h(r)q(eq)l(uir)q(e)l(d.)128 b(If)74 b(th)l(e)l(r)q(e)g(ar)q(e)g(n)m(o)f(pr)q(o)-8 b(b)l(l)n(e)n(ms,)78 b(th)l(e)73 b(pivoti)s(n)n(g)0 7456 y(l)n(oo)-5 b(p)69 b(ite)l(ra)-8 b(te)o(s,)73 b(u)-7 b(s)n(i)s(n)n(g)69 b(th)l(e)g(l)n(ea)-7 b(vi)s(n)n(g)68 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(s)m (e)l(l)n(ec)-5 b(te)l(d)70 b(i)s(n)f FJ(pseupdate)p FP(.)115 b(T)8 b(h)l(e)69 b(l)n(oo)-5 b(p)68 b(c)l(o)l(nti)s(n)n(u)l(e)o(s)h (until)f(pr)s(i)s(mal)0 7655 y(feas)n(ibility)k(is)g(r)q(ea)n(c)-7 b(h)l(e)l(d,)76 b(th)l(e)c(pr)q(o)-8 b(b)l(l)n(e)n(m)71 b(is)i(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)l(d)72 b(to)g(be)h(i)s (nfeas)n(ib)l(l)n(e,)k(o)-7 b(r)72 b(an)g(e)-5 b(xc)f(e)f(ptio)l(n)72 b(o)-7 b(r)73 b(fa)-8 b(t)s(al)72 b(e)l(rr)q(o)-7 b(r)0 7854 y(occurs.)249 8153 y(Wh)l(en)59 b(th)l(e)g(wo)-7 b(rki)s(n)n(g)57 b(s)m(e)-7 b(t)60 b(bec)l(o)n(me)o(s)g(e)n(mpty)-17 b(,)61 b FJ(tw)m(eakp1obj)e FP(will)f(g)t(ive)i(a)g(pr)q(e)l(li)s(m)s (i)s(nary)e(i)s(ndica)-8 b(tio)l(n)58 b(of)h(pr)s(i)s(mal)0 8352 y(feas)n(ibility)-17 b(.)63 b(If)46 b FJ(v)m(er)s(ifyp1obj)f FP(c)l(o)l(n\002r)5 b(ms)45 b(tha)-8 b(t)45 b(all)g(v)r(ar)s(i)s(a)l(b) l(l)n(e)o(s)i(ar)q(e)f(pr)s(i)s(mal)f(feas)n(ib)l(l)n(e,)j(th)l(e)d (pivoti)s(n)n(g)f(l)n(oo)-5 b(p)46 b(will)e(end.)63 b(If)0 8551 y(a)n(ccum)l(u)l(la)-8 b(te)l(d)50 b(n)n(ume)l(r)s(ical)h(i)s(na)n (ccura)n(cy)f(has)h(ca)-8 b(u)h(s)m(e)l(d)51 b(pr)q(evio)-5 b(u)e(sly)50 b(feas)n(ib)l(l)n(e)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(to) f(bec)l(o)n(me)h(i)s(nfeas)n(ib)l(l)n(e,)0 8751 y(th)l(e)k(pivot)g(s)m (e)l(l)n(ec)-5 b(tio)l(n)55 b(parame)-7 b(te)l(rs)57 b(will)e(be)i(tighten)n(e)l(d,)e FJ(dy_initp1obj)h FP(will)f(be)i(call) n(e)l(d)f(to)g(b)-8 b(uild)55 b(a)i(n)n(ew)e(wo)-7 b(rki)s(n)n(g)0 8950 y(s)m(e)g(t)53 b(and)g(o)-8 b(bj)l(ec)j(tive,)52 b(and)g(pivoti)s(n)n(g)f(will)h(r)q(e)o(s)-8 b(ume.)249 9249 y(Chan)n(g)n(e)o(s)56 b(to)i(th)l(e)f(o)-8 b(bj)l(ec)j(tive)58 b(c)l(oe)l(\002)-49 b(\002c)m(ients)57 b(may)h(make)g(it)g(n)n(ec)-6 b(e)o(s)h(sary)58 b(to)g(s)m(e)l(l)n(ec)-5 b(t)59 b(a)f(n)n(ew)f(ente)l (r)s(i)s(n)n(g)g(v)r(ar)s(i)s(a)l(b)l(l)n(e.)0 9448 y(T)8 b(his)67 b(s)n(it)l(ua)-8 b(tio)l(n)66 b(ar)s(is)m(e)o(s)i(wh)l(en)e(a) h(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(gai)s(ns)f(feas)n(ibility)g(b)-8 b(u)l(t)66 b(r)q(e)n(mai)s(ns)h(bas)n(ic,)72 b(as)67 b(c)-7 b(han)n(g)t(i)s(n)n(g)65 b(an)i(entry)0 9647 y(of)d FG(c)305 9587 y Fz(B)462 9647 y FP(can)e(potenti)s(ally)f(af)n(fec)-5 b(t)63 b(all)f(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)62 b(c)l(os)-5 b(ts)3577 9587 y FA(5)3657 9647 y FP(.)94 b(T)8 b(h)l(e)62 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(s)m(e)l(l)n(ec)-5 b(te)l(d)63 b(i)s(n)f FJ(pseupdate)g FP(may)g(n)m(o)f(l)n(o)l(n)n(g)n(e)l(r)p 0 9793 3120 7 v 345 9986 a Ft(4)415 10034 y FM(Mo)-5 b(r)q(e)38 b(s)l(tr)q(o)m(n)n(gly)-13 b(,)37 b(s)-7 b(u)i(pe)m(rbas)o (ic)39 b(v)q(ar)s(i)s(a)m(b)m(l)o(e)o(s)e(ar)q(e)h(i)s(ntr)q(od)-6 b(u)l(c)h(e)m(d)39 b(o)m(nly)e(i)s(n)g(pr)s(i)s(mal)g(p)-5 b(has)m(e)38 b(II)h(fo)-5 b(r)37 b(th)m(e)h(p)l(urpos)m(e)h(of)f(mai)s (nt)s(ai)s(ni)s(n)n(g)d(fea-)415 10192 y(s)o(ibility)40 b(d)-6 b(ur)s(i)s(n)n(g)40 b(r)q(e)-5 b(pair)40 b(of)h(a)f(s)o(i)s(n)n (g)o(u)m(lar)f(bas)o(is.)51 b(T)7 b(h)m(ey)39 b(will)h(a)-5 b(p)e(pear)41 b(o)l(u)m(ts)o(id)l(e)g(of)g Ff(pr)r(im)n(al2)f FM(o)m(nly)f(if)h(th)m(e)g(pr)q(o)-7 b(b)m(l)o(e)n(m)41 b(is)g(un)m(bo)l(und)l(e)m(d)415 10350 y(o)-5 b(r)43 b(if)e Ff(pr)r(im)n(al2)h FM(te)m(r)t(m)s(i)s(na)-7 b(te)o(s)42 b(with)g(an)f(e)m(rr)q(o)-5 b(r)43 b(c)m(o)m(nditio)m(n.)3771 11400 y FP(51)p eop end %%Page: 52 55 TeXDict begin 52 54 bop 0 10013 a currentpoint currentpoint translate 0.83875 0.83875 scale neg exch neg exch translate 0 10013 a @beginspecial 31 @llx 61 @lly 589 @urx 750 @ury 5580 @rwi @setspecial %%BeginDocument: /devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/primal1flow.eps %!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/primal1flow.epsu %%Creator: IslandDraw for lou %%CreationDate: Wed Sep 14 11:02:30 2005 %%Pages: 1 %%BoundingBox: 31 61 589 750 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 699 862 1 2586 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000001c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000017 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000001d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000000c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000017 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000010 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000001b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000001c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000007 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000012 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000001d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000008 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000001e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000009 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000ff0000000000000000000000000000000000 % 00000000000000000014 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000ff0000000000000000000000000000000000 % 0000000000000000001f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000fe0000000000000000000000000000000000 % 0000000000000000000a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000fe0000000000000000000000000000000000 % 00000000000000000015 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000007e0000000000000000000000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000007c0000000000000000000000000000000000 % 0000000000000000000b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000007c0000000000000000000000000000000000 % 00000000000000000016 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000003c0000000000000000000000000000000000 % 00000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000380000000000000000000000000000000000 % 0000000000000000000c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000380000000000000000000000000000000000 % 0000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000180000000000000000000000000000000000 % 00000000000000000018 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000ffffffffffffffffffffffffffffffffffffff0000000000000000 % 00000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000019 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000004 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000000000f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000000001a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000430001001000010060220000000030000000000000000 % 00000000000000000010 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000810001001100070020220000000030000000000000000 % 0000000000000000001b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000001010000000100010020010000000030000000000000000 % 00000000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008000000011f77033733db811e2e610000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080000000131220118911cc13333210000000030000000000000000 % 0000000000000000001c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000001213201109108412121210000000030000000000000000 % 00000000000000000007 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000001211401109108412121210000000030000000000000000 % 00000000000000000012 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000001231401109108c32323210000000030000000000000000 % 0000000000000000001d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008000000011d8803b9f9cf879e3e210000000030000000000000000 % 00000000000000000008 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000001000800000008000000210000000030000000000000000 % 00000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008000000008038fc000008000000a20000000030000000000000000 % 0000000000000000001e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080000000000600000001c000001c00000000030000000000000000 % 00000000000000000009 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000014 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000000001f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000000000a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008000800000066000000c0400404018800000030000000000000000 % 00000000000000000015 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800080002002200000040400444008800000030000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000002002200000040000040008000000030000000000000000 % 0000000000000000000b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008001b706f9e2203cdc7c0cdccfc78986b800030000000000000000 % 00000000000000000016 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800098892212204262c40462444848897c00030000000000000000 % 00000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008000908ea072200e428404424441c88ec000030000000000000000 % 0000000000000000000c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080009081a19220324284044244464881c000030000000000000000 % 00000000000000000017 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080009088a2322046428c04424448c888e400030000000000000000 % 00000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008001f9cf39df703be7760ee7e7e77dcf3800030000000000000000 % 0000000000000000000c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000016 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000000001f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000016 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000000001f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000008 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080000000400000007000c040000200000000030000000000000000 % 00000000000000000016 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080000000c000000020004040004200000000030000000000000000 % 00000000000000000016 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000004000000020004000004000000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000dc5c7835c0203c5cce1ef677e00000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000e662844be02066665f314223f00000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080000042421c760020424250204235000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008000004242640e0020424250204215000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000080000046428c472070464659314219900000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000008000007ce77679c0703c7c4e1e7708e00000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000400000000000000040000000000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000400000000000000140000000000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000e00000000000000380000000000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000ffffffffffffffffffffffffffffffffffffff0000000000000000 % 00000000000000000007 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000ffffffffffffffffffffffffffffffffffffff0000000000000000 % 0000000000000000001a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000001c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000000e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000000d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000017 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000000001d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000c0100600000000000000000000000000000000 % 0000000000000000000c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000f8103e00000000000000000000000000000000 % 00000000000000000017 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000ff11fe00000000000000000000000000000000 % 00000000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000fffffe00000000000000000000000000000000 % 00000000000000000010 % 0000000000000000000000000000000000000000000000000000007fffffffffffffffffffffff % ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffffffffff001b % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000000000000000ffd7fe00000000000000000000000000000000 % 00000000000000010006 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000000000000000fe10fe00000000000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000000000000000f0101e00000000000000000000000000000000 % 0000000000000001001c % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000080100200000000000000000000000000000000 % 00000000000000010007 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010012 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001001d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000ff0000000000000000000000000000000000 % 00000000000000010008 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000fe0000000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000fe0000000000000000000000000000000000 % 0000000000000001001e % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000fe0000000000000000000000000000000000 % 00000000000000010009 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000000000000000007c0000000000000000000000000000000000 % 00000000000000010014 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000000000000000007c0000000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000000000000000007c0000000000000000000000000000000000 % 0000000000000001000a % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000000000000000000000003c0000000000000000000000000000000000 % 00000000000000010015 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000380000000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000380000000000000000000000000000000000 % 0000000000000001000b % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000ffffffffffffffffffffffffffffffffffffff0000000000000000 % 00000000000000010016 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000ffffffffffffffffffffffffffffffffffffff0000000000000000 % 00000000000000010001 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000001000c % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000001000d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000010018 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000010003 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000218000000200000c80080000000030000000000000000 % 0000000000000001000e % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000408000000200000480080000000030000000000000000 % 00000000000000010019 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000808000000000000400040000000030000000000000000 % 00000000000000010004 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000008000000008f9dc0ddf66ec7859b840000000030000000000000000 % 0000000000000001000f % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000988880e6823328448c440000000030000000000000000 % 0000000000000001001a % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000908c8042822221c488440000000030000000000000000 % 00000000000000010005 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000908500428222264488440000000030000000000000000 % 00000000000000010010 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000080000000091850046822228c488440000000030000000000000000 % 0000000000000001001b % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000000000000000000000008000000008ec2007dc777776fdce40000000030000000000000000 % 00000000000000010006 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000800200400000000000040000000030000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000400e7e400000000000080000000030000000000000000 % 0000000000000001001c % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000001800e00000000000000000000030000000000000000 % 00000000000000010007 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000010012 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 0000000000000001001d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800000000000000000000000000000000000030000000000000000 % 00000000000000010008 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000080003000000000000008000000000200c180030000000000000000 % 00000000000000010013 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000800010001000001000080000000002004080030000000000000000 % 0000000000000001001e % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000080001000100000100000000c000000004080030000000000000000 % 00000000000000010009 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000081ae1387bc0e373ce7db70707779f6785c8e030000000000000000 % 00000000000000010014 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000000825f17cc501f1891f209888822848284669f030000000000000000 % 0000000000000001001f % 000000000000000000000000000000000000000000000000000000636000000000000000000000 % 00000000000000000000000083b014081010109102090888341c821c4290030000000000000000 % 0000000000000001000a % 000000000000000000000000000000000000000000000000000000612000000007ffffffffffff % ffffffffffffffffc0000000807014081010109102090870146482644290030000000000000000 % 00000000000000010015 % 000000000000000000000000000000000000000000000000000000614000000007ffffffffffff % ffffffffffffffffc00000008239164c5019109192090880188c828c4699030000000000000000 % 00000000000000010000 % 00000000000000000000000000000000000000000000000000000060c000000006000000000000 % 00000000000000004000000083ce3b879c0e39dce71f9cf80877c7767dce030000000000000000 % 0000000000000001000b % 000000000000000000000000000000000000000000000000000000608000000006000000000000 % 00000000000000004000000080000000000000000000008c000000000000030000000000000000 % 00000000000000010016 % 000000000000000000000000000000000000000000000000000000608000000006000000000000 % 00000000000000004000000080000000000000000000018c000000000000030000000000000000 % 00000000000000010001 % 000000000000000000000000000000000000000000000000000000630000000006000000000000 % 0000000000000000400000008000000000000000000000f0000000000000030000000000000000 % 0000000000000001000c % 0000000000000000000000000000000000000000000000000000006000000000061180000c0003 % 7b9e0101f000000840000000800000000000000000000000000000000000030000000000000000 % 00000000000000010017 % 000000000000000000000000000000000000000000000000000000600000000006208000040001 % 331a23008800008840000000800000000000000000000000000000000000030000000000000000 % 00000000000000010002 % 000000000000000000000000000000000000000000000000000000600000000006408000040001 % 310821008800008440000000800000000000000000000000000000000000030000000000000000 % 0000000000000001000c % 0000000000000000000000000000000000000000000000000000006000000000064f9dc07c71e1 % 11967970890b71e440000000ffffffffffffffffffffffffffffffffffffff0000000000000000 % 00000000000000010016 % 000000000000000000000000000000000000000000000003fffffffffffffc0006588880c4fa11 % 1a922188f319888440000000000000000001c00000000000030000000000000000000000000000 % 0000000000000001001f % 0000000000000000000000000000000000000000000000070000000000000e0006508c80848071 % 1ad221088109088440000000000000000003800000000000038000000000000000000000000000 % 00000000000000010016 % 00000000000000000000000000000000000000000000000e000000000000060006508500848191 % 0ae22108810908844000000000000000000700000000100001c000000000000000000000000000 % 0000000000000001001f % 00000000000000000000000000000000000000000000001c0000000000000300065185008cca31 % 0c622108c11908844000000000000000000600002000100000e000000000000000000000000000 % 00000000000000010008 % 000000000000000000000000000000000000000000000018000371c7ee000180064ec2007671db % 84473b9dc0ef9ce44000000000000000000c000020000000186000000000000000000000000000 % 00000000000000010016 % 00000000000000000000000000000000000000000000003000018be2440001c006400200000000 % 00000000000000044000000000000000001c1c6e79cfb6e0e03000000000000000000000000000 % 00000000000000010016 % 00000000000000000000000000000000000000000000007000010a03640000e006200e3f000000 % 0000000000000008400000000000000000383e3123e41311103800000000000000000000000000 % 00000000000000010011 % 0000000000000000000000000000000000000000000000e000010a01a800006006001800000000 % 000000000000000040000000000000000070202122041211101c00000000000000000000000000 % 00000000000000010011 % 0000000000000000000000000000000000000000000001c000010b21b000003006000000000000 % 000000000000000040000000000000000060202122041210e00e00000000000000000000000000 % 00000000000000010011 % 00000000000000000000000000000000000000000000018000039dc09000001806000000000000 % 0000000000000000400000000000000000c0322123241211000600000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000300000000000000001c06000000000000 % 0000000003000000400000000000000001c01c73b9ce3f39f00300000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000700000000000000000e06000108000000 % 201000000100000040000000000000000380000000000001180380000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000e00000000000000000606000108000000 % 2010000001000000400000000000000007000000000000031801c0000000000000000000000000 % 00000000000000010011 % 00000000000000000000000000000000000000006c001c0000000000000000030600f3dee37637 % 783cf03ee11e770040000000000000000600000000000001e000e0000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000032001800000018818000000186010909f19939 % a0119811f121160040000000000000000c00000000000000000060000000000000000000000000 % 00000000000000010011 % 0000000000000000000000000000000000000000220030000000088080100001c6003909011110 % a01108110107080040000000000000001c00000000000000000030000000000000000000000000 % 00000000000000010011 % 0000000000000000000000000000000000000000220070000000080080100000e600c909011110 % a011081101191c0040000000000000003800000000000000000038000000000000000000000000 % 00000000000000010011 % 00000000000000000000000000000000000000007700e03c79b8f98f9e3dc1a076011909911111 % a0111811912326004000000000000000700000000100606000001c000000000000000000000000 % 00000000000000010000 % 00000000000000000000000000000000000000000001c06284c58898a113e2403600edcee3bb9f % 381cf038e39df7004078000000000000600000000100202000000e000000000000000000000000 % 00000000000000010000 % 0000000000000000000000000000000000000000000180401c850890871203a01e000000000010 % 000000000000000043f8000000000000c000000000002020000006000000000000000000000000 % 00000000000000010000 % 00000000000000000000000000000000000000000003004064850890991200601e000000000010 % 00000000000000005ff8000000000001c0001dde7f1e2e23800003000000000000000000000000 % 00000000000000010013 % 000000000000000000000007ffffffffffffffffffff00628c851891a31322200e000000000038 % 00000000000000007fffffffffffffff800008a121213327c00003800000000000000000000000 % 00000000000000010007 % 000000000000000000000007fffffffffffffffffffe003c77ceedcedd9dc3c006000000000000 % 00000000000000007fffffffffffffff80000d0721072124000003800000000000000000000000 % 0000000000000001001a % 00000000000000000000000600000000000000000007000000000000000000000e000008000000 % 003000004000000047f8000000000001c000051921192124000007000000000000000000000000 % 00000000000000010000 % 00000000000000000000000600000000000000000003800000000000000000001e000008000200 % 001000084000000040f8000000000000e00006232123232640000e000000000000000000000000 % 00000000000000010013 % 00000000000000000000000600000000000000000001800000000000000000003e000000000200 % 001000080000000040180000000000007000021df39dbe7380000c000000000000000000000000 % 0000000000000001001c % 00000000000000000000000600000000000000000000c000000000000000000036000dd9dde781 % a711c3dec79b800040000000000000003000000000000000000018000000000000000000000000 % 00000000000000010013 % 00000000000000000000000600000000000000000000e000000000000000000066000e688b3202 % 4f93e6284ccc400040000000000001b01800000000000000000038000000000000000000000000 % 0000000000000001000e % 00000000000000000000000600000000000000000000700000002600c1800e00e6000428d21203 % a81204084848400040000000000000c81c00000000000000000070000000000000000000000000 % 00000000000000010006 % 0000000000000000000000060000000000000000000038000000220040803101c6000428521200 % 681204084848400040000000000000880e000000000000000000e0000000000000000000000000 % 0000000000000001000d % 000000000000000000000006000000000000000000001800000002004080210386000468623202 % 2c93262848c84000400000000000008807000000000000000000c0000000000000000000000000 % 00000000000000010017 % 000000000000000000000006000000000000000000000c079dde62785c8e0103060007dc21e383 % c739c3cee79ce00040000000000001dc0300000c0000000c380180000000000000000000000000 % 0000000000000001001d % 000000000000000000000006000000000000000000000e0848a12284669f020606000400000000 % 000000000000000040000000000000000180000400020004c40380000000000000000000000000 % 00000000000000010006 % 000000000000000000000006000000000000000000000701cd07221c4290040e06000400000000 % 0000000000000000400000000000000001c0000400020004840700000000000000000000000000 % 00000000000000010003 % 000000000000000000000006000000000000000000000386451922644290041c06000e00000000 % 0000000000000000400000000000000000e069c470f79c7c040e00000000000000000000000000 % 00000000000000010001 % 000000000000000000000006000000000000000000000188c623228c46990c3806000000000000 % 00000000000000004000000000000000007093e4f98a3ec4080c00000000000000000000000000 % 0000000000000001000c % 0000000000000000000000060000000000000000000000c7621df7767dce0c3006000000000000 % 000000000000000040000000000000000030ea0481022084101800000000000000000000000000 % 00000000000000010017 % 0000000000000000000000060000000000000000000000e0000000000000006006000000000000 % 0000000000000000400000000000000000181a0481022084103800000000000000000000000000 % 00000000000000010005 % 00000000000000000000000600000000000000000000007000000000000000e006000000000000 % 00000800000000004000000000000000001c8b24c98a328c307000000000000000000000000000 % 00000000000000010010 % 00000000000000000000000600000000000000000000003800000000000001c006000000000000 % 00000800000000004000000000000000000ef1ce70f39c7630e000000000000000000000000000 % 0000000000000001001b % 000000000000000000000006000000000000000000000018000000000000038006000006e78fbc % dd871ee3e68000004000000000000000000700000000000000c000000000000000000000000000 % 00000000000000010006 % 00000000000000000000000600000000000000000000000c000000000000030006000007384442 % 664f89f10900000040000000000000000003000000000000018000000000000000000000000000 % 00000000000000010011 % 00000000000000000000000600000000000000000000000e00000000000006000600000211c40e % 444809010e80000040000000000000000001800000000000038000000000000000000000000000 % 0000000000000001001c % 0000000000000000000000060000000000000000000000070000000000000e0006000002164432 % 444809010180000040000000000000000001ffffffffffffff0000000000000000000000000000 % 00000000000000010007 % 000000000000000000000006000000000000000000000003fffffffffffffc000600000238c446 % 444c89910880000040000000000000000000fffffffffffffe0000000000000000000000000000 % 00000000000000010012 % 000000000000000000000006000000000000000000000000000000000000000006000003e76e3b % eee70ee38f00000040000000000000000000000000100000000000000000000000000000000000 % 0000000000000001001d % 000000000000000000000006000000000000000000000000000000000000000006000002000000 % 000000000000000040000000000000000000000000100000000000000000000000000000000000 % 00000000000000010008 % 000000000000000000000006000000000000000000000000000000000000000006000002000000 % 000000000000000040000000000000000000000000100000000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000006000000000000000000000000000000000000000006000007000000 % 000000000000000040000000000000000000000000100000000000000000000000000000000000 % 0000000000000001001e % 000000000000000000000006000000000000000000000000000000000000000006000000000000 % 00000000000000004000000000000000000000006c100000000000000000000000000000000000 % 00000000000000010009 % 000000000000000000000006000000000000000000000000000000000000000006000000000000 % 000000000000000040000000000000000000000024100000000000000000000000000000000000 % 00000000000000010014 % 000000000000000000000006000000000000000000000000000000000000000006000000000000 % 000000000000000040000000000000000000000028100000000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000006000000000000000000000000000000000000000007ffffffffffff % ffffffffffffffffc0000000000000000000000018100000000000000000000000000000000000 % 0000000000000001000a % 000000000000000000000006000000000000000000000000000000000000000007ffffffffffff % ffffffffffffffffc0000000000000000000000010100000000000000000000000000000000000 % 00000000000000010015 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000010100000000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000060100000000000000000000000000000000000 % 0000000000000001000b % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010001 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001000c % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001000d % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010018 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010003 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001000e % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010019 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010004 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001000f % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001001a % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010005 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010010 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001001b % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010006 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001001c % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010007 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010012 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 0000000000000001001d % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000100000000000000000000000000000000000 % 00000000000000010008 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000ff0000000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000006000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000ff0000000000000000000000000000000000 % 0000000000000001001e % 00000000000000000000000600000000007fffffffffffffffffffffffffffffffffffffffc000 % 000000000000000000000000000000000000000000fe0000000000000000000000000000000000 % 00000000000000010009 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000fe0000000000000000000000000000000000 % 00000000000000010014 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 0000000000000000000000000000000000000000007e0000000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 0000000000000000000000000000000000000000007c0000000000000000000000000000000000 % 0000000000000001000a % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 0000000000000000000000000000000000000000007c0000000000000000000000000000000000 % 00000000000000010015 % 00000000000000000000000600000000006000000008c000000100000600200000800000004018 % 0000000000000000000000000000000000000000003c0000000000000000000000000000000000 % 00000000000000010000 % 0000000000000000000000060000000000600000001040000001000002002000108000000040f8 % 000000000000000000000000000000000000000000380000000000000000000000000000000000 % 0000000000000001000b % 0000000000000000000000060000000000600000002040000000000002000000104000000047f8 % 000000000000000000000000000000000000000000380000000000000000000000000000000000 % 00000000000000010016 % 00000000000000000000000600000000006000000027cee06e7f3761e26e6eef3c400000007fff % fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000 % 00000000000000010001 % 0000000000000000000000060000000000600000002c4440732119921273245990400000007fff % fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000 % 0000000000000001000c % 000000000000000000000006000000000060000000284640212111107221269090400000004ff8 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010017 % 0000000000000000000000060000000000600000002842802121111192212290904000000041f8 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010002 % 00000000000000000000000600000000006000000028c280232111123223231190400000004038 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 0000000000000000000000060000000000600000002761003e73bbb9df3e710f1c400000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000060000000200100200000000020000000400000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 00000000000000000000000600000000006000000010071fa00000000020000000800000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000060000000000c00700000000070000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010008 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000060000030000018000008000000000200c0c000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000060000010001008000008000000000200404000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000060000010001008000000000c00000000404000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000006001ae1387bc08e3c779b8703bf8fe3c5c4710004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000060025f17cc5009f42228c48811844242664f90004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000006003b01408100900e34884881a1c420e424800004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000006000701408100903214884700a644232424800004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 0000000000000000000000060000000000600239164c500994618884800c8c4246464c90004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000006003ce3b879c1ce3b09dcef80476e73b7ce710004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000060000000000000000000008c00000000000010004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000060000000000000000000018c00000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000006000000000000000000000f000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000060000000000001000000c00001000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 000000000000000000000006000000000060000000000001000040400001000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010007 % 000000000000000000000006000000000060000000000000000040400000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001a % 0000000000000000000000060000000000600000000001bb3bbcf05c786b0d4000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 0000000000000000000000060000000000600000000001cd116640668491124000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 0000000000000000000000060000000000600000000000851a4240421ce91d0000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001c % 0000000000000000000000060000000000600000000000850a4240426419030000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 00000000000000000000000600000000006000000000008d0c4640468c89114000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000e % 0000000000000000000000060000000000600000000000fb843c707c76f39e4000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 000000000000000000000006000000000060000000000080000000000000004000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000d % 000000000000000000000006000000000060000000000080000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010017 % 0000000000000000000000060000000000600000000001c0000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010003 % 000000000000000000000006000000000060000000180000000000401818000007c7c7f0004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010001 % 000000000000000000000006000000000060000000080100000000400808000002284230004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 000000000000000000000006000000000060000000080100000000000808000002282208004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010017 % 0000000000000000000000060000000000600109b8f9e3dc077f1fc78b88e1a0022e0240004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010005 % 0000000000000000000000060000000000600319cd8a113e023088484cc9f24003c3c3c0004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010010 % 00000000000000000000000600000000006001088508712003438841c84903a002002240004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001b % 000000000000000000000006000000000060010885099120014c88464849006002082208004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 00000000000000000000000600000000006001188d1a313201918848c8c99224030c4210004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000006000ecf8edd9dc008edce76f9ce3c4070f87f0004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001c % 000000000000000000000006000000000060000080000000000000000000000400000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010007 % 000000000000000000000006000000000060000080000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010012 % 0000000000000000000000060000000000600001c0000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010008 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001e % 000000000000000000000006000000000060000000000000000006000000300000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010009 % 000000000000000000000006000000000060000000000000000002000000100000010000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010014 % 000000000000000000000006000000000060000000000000000002000000100000010000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 0000000000000000000000060000000000600371e7dbb0d007dc3e213c71f01e786bc6a0004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000a % 000000000000000000000006000000000060018b320cc920023e626362fb1031cc910920004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010015 % 000000000000000000000006000000000060010a120889d0022042214082102084e90e80004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000060010a12088830022042214082102084190180004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000b % 000000000000000000000006000000000060010a320889120232462362ca30318c8908a0004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000060039de71ddde2071c3b1dbc71d81e78f1cf20004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010001 % 000000000000000000000006000000000060000000000002000000000000000000000020004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000d % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010018 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010003 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000e % 000000000000000000000006000000000060000000180000000000000000000010000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010019 % 000000000000000000000006000000000060000000080004000000100000100010000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010004 % 000000000000000000000006000000000060000000080004000000100000100000001800004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000f % 0000000000000000000000060000000000600000d708e3cf0dc39dfc0e6e3dc7f370e000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001a % 00000000000000000000000600000000006000012f89f6240627c5901f3113e211891000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010005 % 0000000000000000000000060000000000600001d8090404042402101021120211091000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010010 % 00000000000000000000000600000000006000003809040404240710102112021108e000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001b % 00000000000000000000000600000000006000011c899624042649901921132211090000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 0000000000000000000000060000000000600001e71ce3c70e739ddc0e739dc73b9df000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000060000000000000000000000000000000011800004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001c % 000000000000000000000006000000000060000000000000000000000000000000031800004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010007 % 00000000000000000000000600000000006000000000000000000000000000000001e000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010012 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010008 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 00000000000000000000000600000000006000000000000000000200c180000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001e % 000000000000000000000006000000000060000000000000000002004080000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010009 % 000000000000000000000006000000000060000000000000000000004080000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010014 % 0000000000000000000000060000000000600000000000007779f6785c8e000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 00000000000000000000000600000000006000000000000022848284669f000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000a % 000000000000000000000006000000000060000000000000341c821c4290000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010015 % 000000000000000000000006000000000060000000000000146482644290000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000060000000000000188c828c4699000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000b % 0000000000000000000000060000000000600000000000000877c7767dce000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010001 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010017 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010002 % 000000000000000000000006000000000060000000000000000000000000000000000000004000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 00000000000000000000000600000000007fffffffffffffffffffffffffffffffffffffffc000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010008 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000003fc0000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000003fc0000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000003f80000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000001f80000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000001f80000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000001f00000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 000000000000000000000006000000000000000000000000000000f00000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010007 % 000000000000000000000006000000000000000000000000000000f00000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001a % 000000000000000000000006000000000000000000000000000000e00000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 0000000000000000000000060000000007fffffffffffffffffffffffffffffffffffffffffe00 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001c % 0000000000000000000000060000000007fffffffffffffffffffffffffffffffffffffffffe00 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000e % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000d % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010017 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 00000000000000000000000600000000060000000000010c000060000000000800000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010003 % 000000000000000000000006000000000600000000000204000020000000000800000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010001 % 000000000000000000000006000000000600000000000404000020000000000400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 00000000000000000000000600000000060000000000047cee03e4239b8dc78400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010017 % 0000000000000000000000060000000006000000000004c444062c67cc46284400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010005 % 00000000000000000000000600000000060000000000048464042424084421c400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010010 % 000000000000000000000006000000000600000000000484280424240844264400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001b % 00000000000000000000000600000000060000000000048c28046466484428c400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 0000000000000000000000060000000006000000000004761003b3b39cee776400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000600000000000400100000000000000400000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001c % 00000000000000000000000600000000060000000000020073f000000000000800000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010007 % 000000000000000000000006000000000600000000000000c00000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010012 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010008 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 000000000000000000000006000000000600000000000000100000000010000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001e % 000000000000000000000006000000000600000000001001100000000010010000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010009 % 000000000000000000000006000000000600000000001001000000000000010000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010014 % 00000000000000000000000600000000066ef9ceee6e3de3f3bb81bb0f3373ce6e1e6e3c700600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 00000000000000000000000600000000067343e45f3112111117c0cc9091891f31213162f80600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000a % 00000000000000000000000600000000062142069021107111a400888391091021072140800600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010015 % 00000000000000000000000600000000062142029021119110a400888c91091021192140800600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 00000000000000000000000600000000062343231921123110c640889191091921232162c90600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000b % 00000000000000000000000600000000063ee1c10e739dd9f84381ddcefb9dce739df3bc710600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000620000000000000000000000000000000000000010600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010001 % 000000000000000000000006000000000620000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 000000000000000000000006000000000670000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000d % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010018 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010003 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000e % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010019 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010004 % 00000000000000000000000600000000060000000000e3ff3cf87ce3c79df8ff70000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000f % 00000000000000000000000600000000060000000001f108664021f62cc8fc4220000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001a % 00000000000000000000000600000000060000000001010842402104084d404320000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010005 % 000000000000000000000006000000000600000000010108424021040845404140000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010010 % 0000000000000000000000060000000006000000000191084640219628c6644140000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001b % 00000000000000000000000600000000060000000000e39c3ce070e3c78238e080000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010006 % 000000000000000000000006000000000600000000000000000000000000000080000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010011 % 000000000000000000000006000000000600000000000000000000000000000380000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001c % 000000000000000000000006000000000600000000000000000000000000000600000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010007 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010012 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010008 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010013 % 000000000000000000000006000000000600000000000000000000000000000000000000000600 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001e % 0000000000000000000000060000000007fffffffffffffffffffffffffffffffffffffffffe00 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010009 % 000000000000000000000006000000000000000000000e00000000000000000700000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010014 % 000000000000000000000006000000000000000000001c00000000000000000380000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 0000000000000000000000060000000000000000000038000000000000000001c0000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000a % 0000000000000000000000060000000000000000000070000000000000000000e0000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010015 % 00000000000000000000000600000000000000000000e000000000000000000070000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010000 % 00000000000000000000000600000000000000000001c000000000000000000038000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000b % 00000000000000000000000600000000000000000003800000000000000000001c000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 00000000000000000000000600000000000000000007000000000000000030300e000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010001 % 0000000000000000000000060000000000000000000e0000000000000000101007000000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 0000000000000000000000060000000000000000001c0000000000000000101003800000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010017 % 0000000000000000000000060000000000000000003909b9f38f1e77e3ef1711c1c00000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010002 % 0000000000000000000000060000000000000000007318c487d8b323f1109993e0e00000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001000c % 000000000000000000000006000000000000000000e10884841021350103909200700000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 000000000000000000000006000000000000000001c1088484102115010c909200380000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 0000000000000000000000060000000000000000038118848658a31991119193201c0000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 00000000000000010016 % 00000000000000000000000600000000000000000700edcfc38f1e08e38edf39c00e0000000000 % 000000000000000000000000000000000000000000000000000000000000000018000000000000 % 0000000000000001001f % 00000000000000000000000600000000fffffffffe000000000000000000000000070000000000 % 00000ffffffffffffffffffffffffffffffffffffffffffc000000000000000018000000000000 % 00000000000000010008 % 00000000000000000000000600000000fffffffffe000000000000000000000000070000000000 % 00000ffffffffffffffffffffffffffffffffffffffffffc000000000000000018000000000000 % 00000000000000010016 % 00000000000000000000000600000000c0000000070000000000000000000000000e0000000000 % 00000c000000000000000000000000000000000000000004000000000000000018000000000000 % 00000000000000010016 % 00000000000000000000000600000000c0000000038000000000000000000000001c0000000000 % 00000c000000000000000000000000000000000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c000000001c00000000000000000000000380000000000 % 00000c000000000000000000000000000000000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c0000006c0e00000000000000000000000700000000000 % 00000c000000000000000000000000000000000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c0000002407000000000000001c0000000e00000000000 % 00000c000000000000000000000000000000000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c000000280380000000000000620000001c00000000000 % 00000c00000000000400000030000400c044000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c0000001801c0000000000000420000003800000000000 % 00000c00000000000900000010001c004044000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c0000001000e000000e3ff3cf820000007000000000000 % 00000c000000000011000000158004004002000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c00000010007000001f10866404000000e000000000000 % 00000c000000000013ff770f1237043c5cc2000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c00000060003800001010842408000001c000000000000 % 00000c000000000011122f90943984666642000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c00000000001c000010108424080000038000000000000 % 00000c0000000000111b28039e1084424242000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c00000000000e000019108464180000070000000000000 % 00000c0000000000110d480c921084424242000000000004000000000000000018000000000000 % 00000000000000010011 % 00000000000000000000000600000000c00000000000700000e39c3ce1800000e0000000000000 % 00000c0000000000110d8c9193118c464642000000000004000000000000000018000000000000 % 00000000000000010000 % 00000000000000000000000600000000c0000000000038000000000000000001c0000000000000 % 00000c000000000011c4870efb9f1e3c7c42000000000004000000000000000018000000000000 % 00000000000000010000 % 00000000000000000000000600000007f800000000001c00000000000000000380000000000000 % 00000c000000000010000000001000000042000000000004000000000000000018000000000000 % 00000000000000010000 % 00000000000000000000000600000007f800000000000e00000000000000000700000000000000 % 00000c000000000008000000001000000144000000000004000000000000000018000000000000 % 00000000000000010013 % 00000000000000000000000600000003f8000000000007fffffffffffffffffe00000000000000 % 00000c000000000000000000003800000380000000000004000000000000000018000000000000 % 00000000000000010007 % 00000000000000000000000600000003f800000000000ffffffffffffffffffe00000000000000 % 00000c000000000000000000000000000000000000000004000000000000000018000000000000 % 0000000000000001001a % 00000000000000000000000600000003f000000000001c00000000000000000300000000000000 % 00000c000003100000000604000010000000200003000004000000000000000018000000000000 % 00000000000000010000 % 00000000000000000000000600000001f000000000003800000000000000000180000000000000 % 00000c000001100002000204000210000000600001000004000000000000000018000000000000 % 00000000000000010013 % 00000000000000000000000600000001f0000000000070000000000000000000c0000000000000 % 00000c000001000002000200000200000000200001580004000000000000000018000000000000 % 0000000000000001001c % 00000000000000000000000600000001e00000000000e000000000000000000060000000000000 % 00000c000f1f3108d781e2ec70f7b3bf000f2e3879200004000000000000000018000000000000 % 00000000000000010013 % 00000000000000000000000600000000e00000000001c000000000000000000030000000000000 % 00000c0010b1131922033334f98a111f8018b17cc5400004000000000000000018000000000000 % 0000000000000001000e % 00000000000000000000000600000000e000000000038000000000000000000018000000000000 % 00000c0003a11109d2021214810211a80010214081e00004000000000000000018000000000000 % 00000000000000010006 % 00000000000000000000000600000000c00000000007000000000000000000000c000000000000 % 00000c000ca1110832021214810210a80010214081200004000000000000000018000000000000 % 0000000000000001000d % 0000000000000000000000060000000040000000000e0000000000000000000006000000000000 % 00000c0011a3111912023234c98a10cc8818a164c5300004000000000000000018000000000000 % 00000000000000010017 % 0000000000000000000000060000000000000000001c0000000000000000000003000000000000 % 00000c000edd90ede381e3e470f3b847080f73b87bb80004000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000000000000000000380000000000000000000001800000000000 % 00000c000000100000000004000000000800000000000004000000000000000018000000000000 % 00000000000000010006 % 000000000000000000000006000000000000000000700000000000000000000000c00000000000 % 00000c000000500000000014000000000000000000000004000000000000000018000000000000 % 00000000000000010003 % 000000000000000000000006000000000000000000e000000c0000000180061c00600000000000 % 00000c000000e00000000038000000000000000000000004000000000000000018000000000000 % 00000000000000010001 % 000000000000000000000006000000000000000001c00000040000000080026200300000000000 % 00200c000000000000000000000000000000000000000004000000000000000018000000000000 % 0000000000000001000c % 000000000000000000000006000000000000000003800000040000000080024200180000000000 % 003c0c000000000000000000000000000000000000000004000000000000000018000000000000 % 00000000000000010017 % 00000000000000000000000600000000000000000700085b85cf109b8f8e3e02000c0000000000 % 003f8c00000000080000300e000013016200000070000004000000000000000018000000000000 % 00000000000000010005 % 00000000000000000000000600000000000000000e0018cc4679b18c589f620400060000000000 % 003ffc000000000800001010000011012220000080000004000000000000000018000000000000 % 00000000000000010010 % 00000000000000000000000600000000000000000c00084844309088509042080003ffffffffff % fffffc000000000000001010000001002020000080000004000000000000000018000000000000 % 0000000000000001001b % 00000000000000000000000600000020000000000e000848443090885090420800060000000000 % 003ffc00000373f9bb0f1039c7837173267bb879c0000004000000000000000018000000000000 % 00000000000000010006 % 0000000000000000000000060000002000000000070008c84471918851994618000c0000000000 % 003f8c0000039908cc909013e8449199222110cc80000004000000000000000018000000000000 % 00000000000000010011 % 0000000000000000000000060007ce7909fdc0000380077ce7cf0edceece3b1800180000000000 % 003c0c00000109088883901201c751092221908480000004000000000000000018000000000000 % 0000000000000001001c % 00000000000000000000000600021f231886200001c00000000000000000000000300000000000 % 00200c0000010908888c90120640d1092220a08480000004000000000000000018000000000000 % 00000000000000010007 % 000000000000000000000006000210210884200000e00000000000000000000000606c00000000 % 00000c00000119088891901328c451192220a08c80000004000000000000000018000000000000 % 00000000000000010012 % 000000000000000000000006000210210884200000700000000000000000000000c03200000000 % 00000c000001f39dddcef839c767b9f3f7384079c0000004000000000000000018000000000000 % 0000000000000001001d % 000000000000000000000006000219211884200000380000000000000000000001802200000000 % 00000c000001000000000000000000000000400000000004000000000000000018000000000000 % 00000000000000010008 % 00000000000000000000000600070e38edce7000001c0000000000000000000003002200000000 % 00000c000001000000000000000000000001c00000000004000000000000000018000000000000 % 00000000000000010013 % 0000000000000000000000060000000000000000000e0000000000000000000006007700000000 % 00000c000003800000000000000000000003000000000004000000000000000018000000000000 % 0000000000000001001e % 00000000000000000000000600000000000000000007000000000000000000000c000000000000 % 00000c000000000000000000000000000000000000000004000000000000000018000000000000 % 00000000000000010009 % 000000000000000000000006000000000000000000038000000000000000000018000000000000 % 00000c0000000004018180000400001810000040000000040000000000000000186c0000000000 % 00000000000000010014 % 00000000000000000000000600000000000000000001c000000000000000000030000000000000 % 00000c000000000400808000040000081000084000000004000000000000000018240000000000 % 0000000000000001001f % 00000000000000000000000600000000000000000000e000000000000000000060000000000000 % 00000c000000000000808000000000080000080000000004000000000000000018280000000000 % 0000000000000001000a % 0000000000000000000000060000000000000000000070000000000000000000c0000000000000 % 00000c000077f1fc78b88e1a0db8078bb1c3decefc000004000000000000000018180000000000 % 00000000000000010015 % 000000000000000000000006000000000000000000003800000000000000000180000000000000 % 00000c000023088484cc9f2404c40cccd3e628447e000004000000000000000018100000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000001c00000000000000000300000000000000 % 00000c00003438841c84903a0484084852040846a0000004000000000000000018100000000000 % 0000000000000001000b % 00000000000000000000000600001cfbef3e000000000ffffffffffffffffffe00000000000000 % 00000c000014c884648490060484084852040842a0000004000000000000000018600000000000 % 00000000000000010016 % 00000000000000000000000600003e4119900000000007fffffffffffffffffc00000000000000 % 00000c00001918848c8c9922048408c8d326284332000004000000000000000018000000000000 % 00000000000000010001 % 000000000000000000000006000020411090000000000000000000600000000000000000000000 % 00000c000008edce76f9ce3c0fce078f91c3cee11c000004000000000000000018000000000000 % 0000000000000001000c % 000000000000000000000006000020411090000000000000000000600000000000000000000000 % 00000c000000000000000000000000001000000000000004000000000000000018000000000000 % 0000000000000001000d % 000000000000000000000006000032411190000000000000000000600000000000000000000000 % 00000c000000000000000000000000005000000000000004000000000000000018000000000000 % 00000000000000010018 % 00000000000000000000000600001ce38f38000000000000000000600000000000000000000000 % 00000c00000000000000000000000000e0000000000000040000000000ffffffffffffff000000 % 00000000000000010003 % 000000000000000000000006000000000000000000000000000000636000000000000000000000 % 00000c0000000000000000000000000000000000000000040000000000c0000000000003800000 % 0000000000000001000e % 000000000000000000000006000000000000000000000000000000612000000000000000000000 % 00000c000000000000000000000000000000000000000004000000000180000000000001c00000 % 00000000000000010019 % 000000000000000000000006000000000000000000000000000000614000000000000000000000 % 00000c000000000000000000000000000000000000000004000000000380000000080000c00000 % 00000000000000010004 % 00000000000000000000000600000000000000000000000000000060c000000000000000000000 % 00000ffffffffffffffffffffffffffffffffffffffffffc000000000700001000080000600000 % 0000000000000001000f % 000000000000000000000006000000000000000000000000000000608000000000000000000000 % 00000ffffffffffffffffffffffffffffffffffffffffffc000000000e0000100000000c700000 % 0000000000000001001a % 000000000000000000000006000000000000000000000000000000608000000000000000000000 % 000000000000000380000000000000000000700000000000000000000c0e373ce7db7070380000 % 00000000000000010005 % 000000000000000000000006000000000000000000000000000000630000000000000000000000 % 00000000000000070000000000000000000038000000000000000000181f1891f20988881c0000 % 00000000000000010010 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000e000000000000000000001c00000000000000000038101091020908880c0000 % 0000000000000001001b % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000001c000000000000000000000e0000000000000000007010109102090870060000 % 00000000000000010006 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000380000000000000000000007000000000000000000e019109192090880070000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000007000200000c000000c0000c3800000000000000000c00e39dce71f9cf8038000 % 0000000000000001001c % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000e00020000040000004000041c00000000000000001800000000000008c01c000 % 00000000000000010007 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000001c00000000040000004000040e00000000000000003800000000000018c00c000 % 00000000000000010012 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000038dcfe6ec3c4079f07c42784070000000000000000700000000000000f0006000 % 0000000000000001001d % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000070e6423324240cc80c4c6844038000000000000000e0000000000000000007000 % 00000000000000010008 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000000e042422220e40848084421c401c000000000000000c0000000080303000003800 % 00000000000000010013 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000001c0424222232408480844264400e00000000000000180000000080101000001c00 % 0000000000000001001e % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000380464222246408c808c468c400700000000000000380000000000101000000c00 % 00000000000000010009 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000007007ce77773be079c0763b76e0038000000000070070000eef3f8f1711c0000600 % 0000000000000f010014 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000e004000000000000000000000001c00000000007e0e000045090909993e0000700 % 0000000000000fe1001f % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000001c004000000000000000000000000e00000000007fcc00006839083909200000380 % 0000000000000ffd000a % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000001800e0000000000000000000000007fffffffffffff8000028c908c9092000001ff % ffffffffffffffff0015 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000001c0000000000000000000000000007fffffffffffffc000031190919193200001ff % ffffffffffffffff0000 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000e000000000000000000000000000e00000000007f8e000010ef9cedf39c0000300 % 0000000000000ff1000b % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000007000000000000000000000000001c00000000007c0600000000000000000000700 % 0000000000000f810016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000038000001c000026060070000000380000000000600300000000000000000000e00 % 0000000000000c010001 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000001c0000020000022020188000000706c00000000000380000000000000000001c1b % 0000000000000001000c % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000000e0000020000002020108000000e032000000000001c000000000000000000180c % 80000000000000010017 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000000700000738786e2e23808000001c022000000000000e0000000000000000003008 % 80000000000000010002 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000038000027c84923327c1000000380220000000000006000006000000061c007008 % 8000000000000001000c % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000001c00002401cea212402000000700770000000000003000002000100026200e01d % c0000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000e0000240641a212402000000e00000000000000003800002000100024201c000 % 0000000000000001001f % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000700002648c8a232646000001c00000000000000001c034e2387bce3e02018000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000003800073876f73e7386000003800000000000000000e049f27cc51f6204030000 % 0000000000000001001f % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000001c00000000000000000000070000000000000000006075024081104208070000 % 00000000000000010008 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000e000000000000000000000e000000000000000000300d0240811042080e0000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000000007000000000000000000001c00000000000000000038459264c51946181c0000 % 00000000000000010016 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000380000000000000000000380000000000000000001c78e73879ce3b18180000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000000001c0000000000000000000700000000000000000000e00000000000000300000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 0000000000000000ffffffffffffffffffffe00000000000000000000600000000000000700000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000300000000000000e00000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000380000000000001c00000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c0000000000000000000000000000001c0000000000001800000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c0000000000000000000000000000000ffffffffffffff000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c06c00000000000000000000000000007fffffffffffff000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c024000000000000000000000000000000000000000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c028000000000000000000000000000000000000000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c018000000000000000000000000000000000000000000000000 % 00000000000000010011 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c010000000000000000000000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c010000000000000000000000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c060000000000000000000000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010007 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 00000000000000000000000300c000000000000000000000000000000000000000000000000000 % 0000000000000001001a % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000003e0c000000000000000000000000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000006000000000000000000000000000000600000000000000000000000 % 000000000000000000000003fcc000000000000000000000000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffffffffffffffffffffc000000000000000000000000000000000000000000000000000 % 0000000000000001001c % 000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffffffffffffffffffffc000000000000000000000000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000003fec000000000000000000000000000000000000000000000000000 % 0000000000000001000e % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000000000000000000000003f0c000000000000000000000000000000000000000000000000000 % 00000000000000010006 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000380c000000000000000000000000000000000000000000000000000 % 0000000000000001000d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010017 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 0000000000000001001d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010006 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010003 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010001 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 0000000000000001000c % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010017 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010005 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010010 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 0000000000000001001b % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010006 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000007f800000000000000000000000000000000000000000000000000 % 0000000000000001001c % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000007f800000000000000000000000000000000000000000000000000 % 00000000000000010007 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000003f800000000000000000000000000000000000000000000000000 % 00000000000000010012 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000003f000000000000000000000000000000000000000000000000000 % 0000000000000001001d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000003f000000000000000000000000000000000000000000000000000 % 00000000000000010008 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000001f000000000000000000000000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000001e000000000000000000000000000000000000000000000000000 % 0000000000000001001e % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000001e000000000000000000000000000000000000000000000000000 % 00000000000000010009 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000e000000000000000000000000000000000000000000000000000 % 00000000000000010014 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00000000000000000000000000c000000000000000000000000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000ffffffffffffffffffffffffffffffffffffffffffc0000000000000000000000000000000 % 0000000000000001000a % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000ffffffffffffffffffffffffffffffffffffffffffc0000000000000000000000000000000 % 00000000000000010015 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 0000000000000001000b % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 00000000000000010016 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 00000000000000010001 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 0000000000000001000c % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 0000000000000001000d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00008000000000002000021c0000803011000000000000c0000000000000000000000000000000 % 00000000000000010018 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000400002200003801011000000000000c0000000000000000000000000000000 % 00000000000000010003 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000800000200000801000800000000000c0000000000000000000000000000000 % 0000000000000001000e % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00008000000000009df8fe777dc08f1730800000000000c0000000000000000000000000000000 % 00000000000000010019 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000080000000000088fc42222e60999990800000000000c0000000000000000000000000000000 % 00000000000000010004 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00008000000000008d4042232420909090800000000000c0000000000000000000000000000000 % 0000000000000001000f % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000854042214420909090800000000000c0000000000000000000000000000000 % 0000000000000001001a % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000866442214461919190800000000000c0000000000000000000000000000000 % 00000000000000010005 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 00008000000000008238e77087c3cf1f10800000000000c0000000000000000000000000000000 % 00000000000000010010 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000800000008400000010800000000000c0000000000000000000000000000000 % 0000000000000001001b % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000400000038400000051000000000000c0000000000000000000000000000000 % 00000000000000010006 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000060e000000e0000000000000c0000000000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 0000000000000001001c % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000000000000000000000000000000 % 00000000000000010007 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800001000018000004000018070000180b10000000c0000000000000000000000000000000 % 00000000000000010012 % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800003000008000004000008080000080911000000c0000000000000000000000000000000 % 0000000000000001001d % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 000080000100000ac00000000008080000080101000000c0000000000000000000000000000000 % 00000000000000010008 % 000000000000000000000000000000000000000000000000000003fc0000000000000000000000 % 00008000f171c3c901b9fcdd87881ce3c34b9933ddc000c0000000000000000000000000000000 % 00000000000000010013 % 000000000000000000000000000000000000000000000000000003fc0000000000000000000000 % 00008001898be62a01cc8466484809f4248cc911088000c0000000000000000000000000000000 % 0000000000000001001e % 000000000000000000000000000000000000000000000000000003f80000000000000000000000 % 00008001010a040f0084844441c80900e74849110c8000c0000000000000000000000000000000 % 00000000000000010009 % 000000000000000000000000000000000000000000000000000001f80000000000000000000000 % 00008001010a0409008484444648090320c84911050000c0000000000000000000000000000000 % 00000000000000010014 % 000000000000000000000000000000000000000000000000000001f80000000000000000000000 % 00008001890b2629808c844448c809946448c911050000c0000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000000000000000000000000000000000001f00000000000000000000000 % 00008000f39dc3ddc0f9ceeee77c1ce3b78f9fb9c20000c0000000000000000000000000000000 % 0000000000000001000a % 000000000000000000000000000000000000000000000000000000f00000000000000000000000 % 0000800000000000008000000000000000000000020000c0000001ffffffffffffffffffffffff % fffffffffc0000010015 % 000000000000000000000000000000000000000000000000000000f00000000000000000000000 % 00008000000000000080000000000000000000000e0000c0000001ffffffffffffffffffffffff % fffffffffc0000010000 % 000000000000000000000000000000000000000000000000000000e00000000000000000000000 % 000080000000000001c000000000000000000000180000c0000001800000000000000000000000 % 000000000c000001000b % 000000000000000000000000000000000000000000000000000000600000000000000000000000 % 0000800000000000000000000000000000000000000000c0000001800000000000000000000000 % 000000000c0000010016 % 000000000000000000000000000000000003fffffffffffffffffffffffffffffffffffffc0000 % 0000800000000000000000000000000000000000000000c0000001800000000000000000000000 % 000000000c0000010001 % 000000000000000000000000000000000003fffffffffffffffffffffffffffffffffffffc0000 % 0000800000000000000000000000000000000000000000c000000180000010c00020020000400c % 048000000c000001000c % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 000080000000000070033000000200c0c0000000000000c000000180000020400020022001c004 % 048000000c0000010017 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 0000800000000000800110000002004040000000000000c0000001800000404000000020004004 % 004000000c0000010002 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 0000800000000000800110000000004040000000000000c000000180000047cee066e67ee043c5 % cc4000000c000001000c % 0000000000000000000000000000000000020000000080000000004000018800100000000c0000 % 0000800000000079c0f1103bf8fe3c5c470d0000000000c00000018000004c4440231227304666 % 644000000c0000010016 % 0000000000000000000000000000000000020000000100000000084000008900100000000c0000 % 00008000000000cc81091011844242664f920000000000c0000001800000484640221222104424 % 244000000c000001001f % 0000000000000000000000000000000000020000000200000000080000008100080000000c0000 % 00008000000000848039101a1c420e42481d0000000000c0000001800000484280221222104424 % 244000000c0000010016 % 000000000000000000000000000000000002000000026e7dc3cddecdd8789bddc80000000c0000 % 000080000000008480c9100a6442324248030000000000c000000180000048c28022122230c464 % 644000000c000001001f % 000000000000000000000000000000000002000000027323e66e684664848908880000000c0000 % 000080000000008c8119100c8c4246464c910000000000c0000001800000476100773f3be1e3c7 % c44000000c0000010008 % 00000000000000000000000000000000000200000002212204242844441c890c880000000c0000 % 0000800000000079c0efb80476e73b7ce71e0000000000c0000001800000400100000002000000 % 044000000c0000010016 % 0000000000000000000000000000000000020000000221220424284444648905080000000c0000 % 0000800000000000000000000000000000000000000000c000000180000020071f800002000000 % 148000000c0000010016 % 00000000000000000000000000000000000200000002232324646844448c8905080000000c0000 % 0000800000000000000000000000000000000000000000c0000001800000000c00000007000000 % 380000000c0000010011 % 000000000000000000000000000000000002000000023e71c3c7ceeeee77ddc2080000000c0000 % 0000800000000000000000000000000000000000000000c0000001800000000000000000000000 % 000000000c0000010011 % 0000000000000000000000000000000000020000000220000004000000000002080000000c0000 % 0000800000000000000000000000000000000000000000c0000001800000000000000000000000 % 000000000c0000010011 % 000000000000000000000000000000000002000000012000000400000000000e100000000c0000 % 0000800000000000000000000000000000000000000000c0000001800080080401880000030100 % 000400000c0000010011 % 000000000000000000000000000000000002000000007000000e000000000018000000000c0000 % 0000800000000000000000000000000000000000000000c0000001800080088400880000010100 % 008400000c0000010011 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 0000800000000000000000000000000000000000000000c0000001800000008000800000010000 % 008000000c0000010011 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 0000ffffffffffffffffffffffffffffffffffffffffffc00000019f399b99ec7898d380f1731c % 79edddc00c0000010011 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 0000ffffffffffffffffffffffffffffffffffffffffffc0000001887c8c4884848927c199993e % c4848be00c0000010011 % 0000000000000000000000000000000000020000380000000180000200000100001800000c0000 % 000000000000000001c0000000000001c00000000000000000000188408848841c89d401090920 % 8084d2000c0000010011 % 0000000000000000000000000000000000020000400010000080000200000300000800000c0000 % 00000000000000000380000000000000e000000000000000000001884088488464883401090920 % 808452000c0000010011 % 0000000000000000000000000000000000020000400010000080000000000100000ac0000c0000 % 00000000000000000700000000000000700000000000000000000188648848848c891641191932 % c48463240c0000010011 % 0000000000000000000000000000000000020000e787bcf3e0b8f0d61a00f171c78900000c0000 % 00000000000000000e0000000000000038000000000000000000019c39dcfcee77dde380f1f11c % 78ee21c40c0000010000 % 0000000000000000000000000000000000020000484c519900cd09222401898bec4a00000c0000 % 00000000000000001c006020000100001c00000000000000000001800000000000000000000100 % 000000040c0000010000 % 000000000000000000000000000000000002000041c81109008439d23a01010a080f00000c0000 % 000000000000000038002020002100000e00000000000000000001800000000000000000000500 % 000000000c0000010000 % 0000000000000000000000000000000000020000464811090084c8320601010a080900000c0000 % 000000000000000070002000002000000700000000000000000001800000000000000000000e00 % 000000000c0000010013 % 000000000000000000000000000000000002000048cc5119008d19122281890b2c4980000c0000 % 0000000000000000e01e2e670f7b3bf00380000000000000000001800000000000000000000000 % 000000000c0000010007 % 0000000000000000000000000000000000020000e7679cf380f8ede73c80f39dc79dc0000c0000 % 0000000000000001c033332f98a111f801c0000000000000000001800000000000000000000000 % 000000000c000001001a % 0000000000000000000000000000000000020000000000000000000000800000000000000c0000 % 00000000000000038021212810211a8000e0000000000000000001800000000000000000000000 % 000000000c0000010000 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 00000000000000070021212810210a800070000000000000000001800000004008000000001000 % 000000000c0000010013 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 000000000000000e0023232c98a10cc80038000000000000000001800000084018080000001000 % 080000000c000001001c % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 000000000000001c001e3e270f3b8470001c000000000000000001800000080068080000000000 % 080000000c0000010013 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0700 % 00000000000000380000002000000000000e0000000000000007018000001ec38b9e73703733bf % 9e0000000c000f01000e % 0000000000000000000000000000000000020000000000000000001800000003c00000000c3f00 % 0000000000000070000000a00000000000070000000000000007e180000008444c48f98839911c % c80000000c000fe10006 % 0000000000000000000000000000000000020000000000000000002400000004400000000dff00 % 00000000000000e0000001c00000000000038000000000000007fd8000000844484881081091a8 % 480000000c000ffd000d % 0000000000000000000000000000000000020000000000000000002400000004000000000fffff % ffffffffffffffc000000000000000000001ffffffffffffffffff8000000843884881081090a8 % 480000000fffffff0017 % 0000000000000000000000000000000000020001e3cf10be78f3b819c1e3cdcecfeec0000fff00 % 00000000000000e000000000000000000001c000000000000007ff80000008440848c9081190c8 % c80000000c000fff001d % 00000000000000000000000000000000000200021638b1908589102883166624443320000c7f00 % 0000000000000070000000000000000000038000000000000007f18000000ee7dcee739c1f3847 % 8e0000000c000ff10006 % 0000000000000000000000000000000000020000741010901d01904482042424442220000c0f00 % 000000000000003800000000000000e00007000000000000000781800000000460000000100000 % 000000000c000f810003 % 0000000000000000000000000000000000020001941010906500a04302042424442220000c0100 % 000000000000001c0000000000002310000e000000000000000401800000000c60000000100000 % 000000000c000c010001 % 0000000000000000000000000000000000020002363891908d88a06383146424442220000c0000 % 0000000000006c0e0000000000002210001c1b0000000000000001800000000780000000380000 % 000000000c000001000c % 0000000000000000000000000000000000020001dbcf0ef876f0403cc1e3ce7eee7770000c0000 % 000000000000240700079e7df70f781000380c8000000000000001800000000000000000000000 % 000000000c0000010017 % 0000000000000000000000000000000000020000000000000000400000000000000000000c0000 % 0000000000002803800c73208f98a0200070088000000000000001800000000000000000000000 % 000000000c0000010005 % 0000000000000000000000000000000000020000000000000001c00000000000000000000c0000 % 0000000000001801c00821208810204000e0088000000000000001800180000200000000000000 % 000000000c0000010010 % 0000000000000000000000000000000000020000000000000003000000000000000000000c0000 % 0000000000001000e00821208810204001c01dc000000000000001800080004200000000000000 % 001000000c000001001b % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 0000000000001000700c63208c98a0c00380000000000000000001800080004000000000000000 % 001000000c0000010006 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 000000000000600038079e71c70f38c007000000000000000000018d388e1ef63cdc0dc79f78dd % 8e3ce7c68c0000010011 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 00000000000000001c000000000000000e00000000000000000001927c9f314266620e68488466 % 5f11f2090c000001001c % 0000000000000000000000000000000000020000007000009809900000000000000000000c0000 % 00000000000000000e000000000000001c000000000000000000019d4090204242420421c81c44 % 5011020e8c0000010007 % 0000000000000000000000000000000000020000008000008808910000040040000000000c0000 % 000000000000000007000000000000003800000000000000000001834090204242420426486444 % 501102018c0000010012 % 0000000000000000000000000000000000020000008000000800810000040040000000000c0000 % 000000000000000003800000000000007000000000000000000001916499314246420468c88c44 % 591192088c000001001d % 000000000000000000000000000000000002000001ce1e1b8b98b3ddc0df3cf211a000000c0000 % 000000000000000001c0000000000000e0000000000000000000019e39ce1e773ce707c77c76ee % ee1ce70f0c0000010008 % 0000000000000000000000000000000000020000009f21248cc8910881244246324000000c0000 % 000000000000000000e0000000000001c000000000000000000001800000000000000400000000 % 000000000c0000010013 % 00000000000000000000000000000000000200000090073a8848910c81d40e4213a000000c0000 % 0000000000000000007fffffffffffff8000000000000000000001800000000000000400000000 % 000000000c000001001e % 0000000000000000000000000000000000020000009019068848910500343242106000000c0000 % 000000000000000000000000000000000000000000000000000001800000000000000e00000000 % 000000000c0000010009 % 00000000000000000000000000000000000200000099232288c8910501144642322000000c0000 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 000000000c0000010014 % 000000000000000000000000000000000002000001ce1dbdcf9df9c201e73b71dbc000000c0000 % 000000000000000000000000000000000000000000000000000001800000000000000000000000 % 000000000c000001001f % 0000000000000000000000000000000000020000000000000000000200000000000000000c0000 % 000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffff % fffffffffc000001000a % 0000000000000000000000000000000000020000000000000000000e00000000000000000c0000 % 000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffff % fffffffffc0000010015 % 0000000000000000000000000000000000020000000000000000001800000000000000000c0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010000 % 0000000000000000000000000000000000020000000000000000000000000000000000000c0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001000b % 000000000000000000000000000000000003fffffffffffffffffffffffffffffffffffffc0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010016 % 000000000000000000000000000000000003fffffffffffffffffffffffffffffffffffffc0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010001 % 0000000000000000000000000000000000000000000000060000000000000e0000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001000c % 00000000000000000000000000000000000000000000000c000000000000070000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001000d % 000000000000000000000000000000000000000000000018000000000000038000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010018 % 00000000000000000000000000000000000000000000003000000000000001c000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010003 % 00000000000000000000000000000000000000000000006000000800003000e000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001000e % 0000000000000000000000000000000000000000000000c0000008000010007000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010019 % 000000000000000000000000000000000000000000000180000000000010003800000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010004 % 0000000000000000000000000000000000000000000003000377d9bb1e10001c00000000000000 % 000000000000000000003ffffffffffffffffffffffffffffe0000000000000000000000000000 % 0000000000000001000f % 000000000000000000000000000000000000000000000600039a08cca110000e00000000000000 % 000000000000000000003ffffffffffffffffffffffffffffe0000000000000000000000000000 % 0000000000000001001a % 000000000000000000000000000000000000000000000c00010a08888710000700000000000000 % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 00000000000000010005 % 000000000000000000000000000000000000000000001800010a08889910000380000000000000 % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 00000000000000010010 % 000000000000000000000000000000000000000000003000011a0888a3100001c0000000000000 % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 0000000000000001001b % 00000000000000000000000000000000000000000000600001f71dddddb80000e0000000000000 % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 00000000000000010006 % 00000000000000000000000000000000000000000000c000010000000000000070000000000000 % 000000000000000000e03000000000000000000000000000060000000000000000000000000000 % 00000000000000010011 % 000000000000000000000000000000000000000000018000010000000000000038000000000000 % 000000000000000000fc3000000000000000000000000000060000000000000000000000000000 % 0000000000000001001c % 00000000000000000000000000000000000000000003000003800000000000001c000000000000 % 000000000000000000ffb000000000000000010000000380060000000000000000000000000000 % 00000000000000010007 % 00000000000000000000000000000000000000000006000000000000000000000fffffffffffff % fffffffffffffffffffff000000000000000030000000100060000000000000000000000000000 % 00000000000000010012 % 00000000000000000000000000000000000000000007000000000000000000000fffffffffffff % fffffffffffffffffffff000000000000000010000000100060000000000000000000000000000 % 0000000000000001001d % 00000000000000000000000000000000000000000003800000000000000000001c000000000000 % 000000000000000000ff3003e73761e77e037171e1a70100060000000000000000000000000000 % 00000000000000010008 % 00000000000000000000000000000000000000000001c000700000981801c00038000000000000 % 000000000000000000f830010f9993323f03998a124f8100060000000000000000000000000000 % 00000000000000010013 % 00000000000000000000000000000000000000000000e000800000880806200070000000000000 % 000000000000000000c03001081112135001090873a80100060000000000000000000000000000 % 0000000000000001001e % 0000000000000000000000000000000000000000000070008000000808042000e0d80000000000 % 000000000000000000003001081112115001090990680100060000000000000000000000000000 % 00000000000000010009 % 000000000000000000000000000000000000000000003801ce1e1b8b88e02001c0480000000000 % 0000000000000000000030010c9112319901190a322c8380060000000000000000000000000000 % 00000000000000010014 % 000000000000000000000000000000000000000000001c009f21248cc9f0400380500000000000 % 000000000000000000003003873bb9e08e01f39ddbc70380060000000000000100000000000000 % 0000000000000001001f % 000000000000000000000000000000000000000000000e0090073a884900800700300000000000 % 000000000000000000003000000000000001000000000000060000000000000100000000000000 % 0000000000000001000a % 000000000000000000000000000000000000000000000700901906884900800e00200000000000 % 0000000000000000000030000000000000010000000000000600000000003e73c85f6e00000000 % 00000000000000010015 % 00000000000000000000000000000000000000000000038099232288c991801c00200000000000 % 00000000000000000000300000000000000380000000000006000000000010f918c83100000000 % 00000000000000010000 % 0000000000000000000000000000000000000000000001c1ce1dbdcf9ce1803800c00000000000 % 000000000000000000003000000000000000000000000000060000000000108108482100000000 % 0000000000000001000b % 0000000000000000000000000000000000000000000000e0000000000000007000000000000000 % 000000000000000000003000000000000000000000000000060000000000108108482100000000 % 00000000000000010016 % 00000000000000000000000000000000000000000000007000000000000000e000000000000000 % 00000000000000000000300602000008000000000000000006000000000010c908c82100000000 % 00000000000000010001 % 00000000000000000000000000000000000000000000003800000000000001c000000000000000 % 0000000000000000000030020200010800000000000000000600000000003871c77c7380000000 % 0000000000000001000c % 00000000000000000000000000000000000000000000001c000000000000038000000000000000 % 00000000000000000000300200000100000000000000000006000003c000000000000000000000 % 00000000000000010017 % 00000000000000000000000000000000000000000000000e000000000000070000000000000000 % 0000000000000000000031e2e638f3dbbb881b9f39b8f3e706000003f800000000000000000000 % 00000000000000010002 % 0000000000000000000000000000000000000000000000070000000000000e0000000000000000 % 000000000000000000003333327d890917c81cc87dcd090f86000003ff00000000000000000000 % 0000000000000001000c % 000000000000000000000000000000000000000000000003fffffffffffffc0000000000000000 % 00000000000000000000321212410109a40008484084390807ffffffffc0000000000000000000 % 00000000000000010016 % 0000000000000000000000000000000000000000000000070000000000000e0000000000000000 % 00000000000000000000321212410108a40008484084c90806000003ff80000000000000000000 % 0000000000000001001f % 00000000000000000000000000000000000000000000000e000000000000070000000000000000 % 00000000000000000000323232658908c64808c8648d190c86000003fc00000000000000000000 % 00000000000000010016 % 00000000000000000000000000000000000000000000001c000000000000038000000000000000 % 0000000000000000000031e3e238f1dc43880f9c38f8ef8706000003e0000e0000130300000000 % 0000000000000001001f % 00000000000000000000000000000000000000000000003800000000000001c000000000000000 % 000000000000000000003000020000000008080000800000060000030000100000110100000000 % 00000000000000010008 % 00000000000000000000000000000000000000000000007000000000000000e000000000000000 % 0000000000000000000030000a0000000000080000800000060000000000100000010100000000 % 00000000000000010016 % 0000000000000000000000000000000000000000000000e00000c0001800007000000000000000 % 0000000000000000000030001c00000000001c0001c0000006000000000039c3c371711c000000 % 00000000000000010016 % 0000000000000000000000000000000000000000000001c0000040000800003800000000000000 % 00000000000000000000300000000000000000000000000006000000000013e42491993e000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000380000040000800001c00000000000000 % 0000000000000000000030000000000000000000000000000600000000001200e7510920000000 % 00000000000000010011 % 0000000000000000000000000000000000000000000007000007c4278800000e00000000000000 % 000000000000000000003000000000000000000000000000060000000000120320d10920000000 % 00000000000000010011 % 000000000000000000000000000000000000000000000e00000c4c684800000700000000000000 % 000000000000000000003000000e000001000000039c0000060000000000132464511932000000 % 00000000000000010011 % 000000000000000000000000000000000000000000001c0000084421c800000380000000000000 % 00000000000000000000300000100000030000000108000006000000000039c3b7b9f39c000000 % 00000000000000010011 % 0000000000000000000000000000000000000000000038000008442648000001c0000000000000 % 000000000000000000003000001000000100000001080000060000000000000000000000000000 % 00000000000000010011 % 0000000000000000000000000000000000000000000070000008c468c8000000e0000000000000 % 0000000000000000000030000039e7c37171e1a701080000060000000000000000000000000000 % 00000000000000010011 % 00000000000000000000000000000000000000000000e000000763b77c00000070000000000000 % 00000000000000000000300000133203998a124f81080000060000000000000000000000000000 % 00000000000000010011 % 00000000000000000000000000000000000000000001c000000000000000000038000000000000 % 00000000000000000000300000121201090873a801080000060000000000000000000000000000 % 00000000000000010011 % 00000000000000000000000000000000000000000003800000000000000000001c000000000000 % 000000000000000000003000001212010909906801080000060000000000000000000000000000 % 00000000000000010011 % 00000000000000000000000000000000000000000007000000000000000000000e000000000000 % 00000000000000000000300000123201190a322c839c0000060000000000000000000000000000 % 00000000000000010011 % 0000000000000000000000000001fffffffffffffffe0000000000000000000007ffffffffffe0 % 0000000000000000000030000039e701f39ddbc7039c0000060000000000000000000000000000 % 00000000000000010000 % 00000000000000000000000000010000000000000007000000000000000000000c000000000020 % 000000000000000000003000000000010000000000000000060000000000000000000000000000 % 00000000000000010000 % 000000000000000000000000000100000000000000038000700000981801c00018000000000020 % 000000000000000000003000000000010000000000000000060000000000000000000000000000 % 00000000000000010000 % 00000000000000000000000000010000000000000001c000800000880806200030000000000020 % 000000000000000000003000000000038000000000000000060000000000000000000000000000 % 00000000000000010013 % 00000000000000000000000000010000000000000360e000800000080804200060d80000000020 % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 00000000000000010007 % 000000000000000000000000000100000000000001207001ce1e1b8b88e02000c0640000000020 % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 0000000000000001001a % 0000000000000000000000000001000000000000014038009f21248cc9f0400180440000000020 % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 00000000000000010000 % 000000000000000000000000000ff0000000000000c01c0090073a8849008003004400000003fe % 000000000000000000003000000000000000000000000000060000000000000000000000000000 % 00000000000000010013 % 000000000000000000000000000fe0000000000000800e00901906884900800600ee00000001fc % 000000000000000000003ffffffffffffffffffffffffffffe0000000000000000000000000000 % 0000000000000001001c % 000000000000000000000000000fe000000000000080070099232288c991800c000000000001fc % 000000000000000000003ffffffffffffffffffffffffffffe0000000000000000000000000000 % 00000000000000010013 % 000000000000000000000000000fe0000000000003000381ce1dbdcf9ce18018000000000001fc % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001000e % 0000000000000000000000000007c00000000000000001c00000000000000030000000000000f8 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010006 % 0000000000000000000000000007c00000000000000000e00000000000000060000000000000f8 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001000d % 0000000000000000000000000007c000000000000000007000000000000000c0000000000000f8 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010017 % 000000000000000000000000000380000000000000000038000000000000018000000000000070 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001001d % 00000000000000000000000000038000000000000000001c000000000000030000000000000070 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010006 % 00000000000000000000000000038000000000000000000e000000000000060000000000000070 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000010003 % 000000000000000000000fffffffffffffe0000000000007fffffffffffffc0000001fffffffff % ffffffc00000000000000001fffffffffffffffe00000000000000000000000000000000000000 % 00000000000000010001 % 000000000000000000001ffffffffffffff0000000000003fffffffffffff80000003fffffffff % ffffffe00000000000000003ffffffffffffffff00000000000000000000000000000000000000 % 0000000000000001000c % 000000000000000000003800000000000038000000000000000000000000000000007000000000 % 000000700000000000000007000000000000000380000000000000000000000000000000000000 % 00000000000000010017 % 00000000000000000000700000000000001c00000000000000000000000000000000e000000000 % 00000038000000000000000e0000000000000001c0000000000000000000000000000000000000 % 00000000000000010005 % 00000000000000000000e00000000000000e00000000000000000000000000000001c000000000 % 0000001c000000000000001c0000000000000000e0000000000000000000000000000000000000 % 00000000000000010010 % 00000000000000000001c000000000000007000000000000000000000000000000038000000000 % 0000000e0000000000000038000000000000000070000000000000000000000000000000000000 % 0000000000000001001b % 000000000000000000039000e00001303003800000000000000000000000000000070000c00000 % 001800670000000000000070000000000000000038000000000000000000000000000000000000 % 00000000000000010006 % 000000000000000000071001000001101001c000000000000000000000000000000e0000400000 % 0008002380000000000000e000000000000000001c000000000000000000000100000000000000 % 00000000000000010011 % 0000000000000000000e0001000000101000e000000000000000000000000000001c0000400000 % 00080021c0000000000001c000000000000000000e000000000000000000000100000000000000 % 0000000000000001001c % 0000000000000000001c33739c3c371711c07000000000000000000000000000003885b85cf109 % b8f8e3e0e0000000000003800000000000000000070000000000000000003e73c85f6e00000000 % 00000000000000010007 % 0000000000000000003811893e42491993e0380000000000000000000000000000718cc4679b18 % c589f620700000000000070000000000000000000380000000000000000010f918c83100000000 % 00000000000000010012 % 000000000000000000701109200e751092001c0000000000000000000000000000e08484430908 % 850904203800000000000e00000000000000000001c00000000000000000108108482100000000 % 0000000000000001001d % 000000000000000000e0110920320d1092000e0000000000000000000000000001c08484430908 % 850904201c00000000001c00000000000000000000e00000000000000000108108482100000000 % 00000000000000010008 % 000000000000000001c01109324645119320070000000000000000000000000003808c84471918 % 851994600e0000000000380000000000000000000070000000000000000010c908c82100000000 % 00000000000000010013 % 000000000000000003803b9f9c3b7b9f39c00380000000000000000000000000070077ce7cf0ed % ceece3b0070000000000700000000000000e0000003800000000000000003871c77c7380000000 % 0000000000000001001e % 00000000000000000700000000000000000001c00000000000000000000000000e000000000000 % 00000000038000001e00e0000000000002310000001c000000000003c000000000000000000000 % 00000000000000010009 % 00000000000000000e00000000000000000000e00000000000000000000000001c000000000000 % 0000000001c000001fc1c0000000000002210000000e000000000003f800000000000000000000 % 00000000000000010014 % 00000000000000001c000000000000000000007000000000000000000000000038000000000000 % 0000000000e000001ffb80000006e216e78100000007000000000003ff00000000000000000000 % 0000000000000001001f % 00000001fffffffff8000000000000000000003800000000000000003ffffffff0000000000000 % 00000000007fffffffff000000073633120200000003ffffffffffffffc0000000000000000000 % 0000000000000001000a % 00000001fffffffff8000000000000000000003800000000000000003ffffffff0000000000000 % 00000000007fffffffff800000021212120400000003ffffffffffffffc0000000000000000000 % 00000000000000010015 % 00000001800000000c000000000000000000007000000000000000003000000038000000000000 % 0000000000e000001ff1c00000021212120400000007000000000003fe00000000000000000000 % 00000000000000010000 % 0000000180000000060000000000000018e000e00000000000000000300000001c000000000000 % 00061c0001c000001f80e00000023232120c0000000e000000000003f000000000000000000000 % 0000000000000001000b % 000000018000000003000000000008000b1001c00000000000000000300000000e000000000001 % 00026200038000001c0070000003e1df3b8c0000001c0000000000038000000000080000000000 % 00000000000000010016 % 000000018000001b01800000000008000a10038000000000000000003000003607000000000001 % 000242000706c00000003800000200000000000000386c00000000000000000000080000000000 % 00000000000000010001 % 000000018000000900c038efb9c3de70f81007000000000000000000300000120380073bee387b % ce3e02000e03200000001c000002000000000000007024000000000000003710b71e0000000000 % 0000000000000001000c % 000000018000000a00607c2dcfe628f988200e0000000000000000003000001401c00f8b737cc5 % 1f6204001c02200000000e00000700000000000000e0280000000000000039b198880000000000 % 0000000000000001000d % 0000000180000006003040108604088108401c0000000000000000003000000c00e00804214081 % 104208003802200000000700000000000000000001c01800000000000000109090880000000000 % 00000000000000010018 % 00000001800000040018403886040881084038000000000000000000300000080070080e214081 % 104208007007700000000380000000000000000003801000000000000000109090880000000000 % 00000000000000010003 % 0000000180000004000c644c8f2628c918c0700000000000000000003000000800380c932364c5 % 19461800e0000000000001c0000000000000000007001000000000000000119190880000000000 % 0000000000000001000e % 0000000180000018000638eef9c3ce70ecc0e000000000000000000030000030001c073bbe3879 % ce3b1801c0000000000000e000000000000000000e0060000000000000001f0ef9ce0000000000 % 00000000000000010019 % 000000018000000000030000800000000001c000000000000000000030000000000e0000200000 % 00000003800000000000007000000000000000001c000000000000000000100000000000000000 % 00000000000000010004 % 000000018000000000018000800000000003800000000000000000003000000000070000200000 % 000000070000000000000038000000000000000038000000000000000000100000000000000000 % 0000000000000001000f % 00000001800000000000c001c00000000007000000000000000000003000000000038000700000 % 0000000e000000000000001c000000000000000070000000000000000000380000000000000000 % 0000000000000001001a % 00000001800000000000600000000000000e00000000000000000000300000000001c000000000 % 0000001c000000000000000e0000000000000000e0000000000000000000000000000000000000 % 00000000000000010005 % 0000000ff00000000000300000000000001c00000000000000000001fe0000000000e000000000 % 0000003800000000000000070000000000000001c0000000000000000000000000000000000000 % 00000000000000010010 % 0000000ff00000000000180000000000003800000000000000000001fe00000000007000000000 % 000000700000000000000003800000000000000380000000000000000000000000000000000000 % 0000000000000001001b % 0000000fe000000000000ffffffffffffff000000000000000000001fc00000000003fffffffff % ffffffe00000000000000001ffffffffffffffff00000000000000000000000000000000000000 % 00000000000000010006 % 00000007e00000000000000000010000000000000000000000000001fc00000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010011 % 00000007e00000000000000000010000000000000000000000000000fc00000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001001c % 00000007c00000000000000000010000000000000000000000000000f800000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010007 % 00000003c00000000000000000010000000000000000000000000000f800000000000000000000 % 000000000000000000000000000000011b00000000000000000000000000000000000000000000 % 00000000000000010012 % 00000003c00000000000000000011b000000000000000000000000007800000000000000000000 % 000000000000000000000000000000010c80000000000000000000000000000000000000000000 % 0000000000000001001d % 00000003800000000000000000010c800000000000000000000000007000000000000000000000 % 000000000000000000000000000000010880000000000000000000000000000000000000000000 % 00000000000000010008 % 000000018000000000000000000108800000000000000000000000007000000000000000000000 % 000000000000000000000000000000010880000000000000000000000000000000000000000000 % 00000000000000010013 % 000000018000000000000000000108800000000000000000000000003000000000000000000000 % 000000000000000000000000000000011dc0000000000000000000000000000000000000000000 % 0000000000000001001e % 00000001000000000000000000011dc00000000000000000000000002000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010009 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010014 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001000a % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010015 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010000 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001000b % 000000400000000000000000000100000000000000000000000000080000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010016 % 000000400000000000000000000100000000000000000000000000080000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010001 % 000fb8f217db8000000000000001000000000000000000000001f71e84fee00000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001000c % 00047c46320c40000000000000010000000000000000000000008f898c43100000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010017 % 000440421208400000000000000100000000000000000000000088088442100000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010002 % 000440421208400000000000000100000000000000000000000088088442100000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001000c % 00046442320840000000000000010000000000000000000000008c888c42100000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010016 % 000e3871df1ce000000000000001000000000000000000000001c70e76e7380000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010016 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 0000000000000001001f % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010008 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010016 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010016 % 1000e00000b03000000000000001000000000000000000000000c0000000180030000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010011 % 100100000090100000000000000100000000000000000000000040000000080010000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010011 % 000100000010100000000000000100000000000000000000000040000000080010000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010011 % 33739c3c359711c00000000000010000000000000000000084dc5c7885b8f8e1f0000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010011 % 11893e42489993e0000000000001000000000000000000018c6266cd8cc589f310000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010011 % 1109200e7490920000000000000100000000000000000000844242848485090210000000000000 % 000000000000000000000000000000010000000000000000000000000000000000000000000000 % 00000000000000010011 % 110920320c90920000000000000100000000000000000000844242848485090210000000000000 % 000000000000000000000000000000010000000000000007ffffffffffffffffffffffffffffff % fffff000000000010011 % 1109324644919320000000000001000000000000000000008c42468c8c85199230000000000000 % 000000000000000000000000000000010000000000000007ffffffffffffffffffffffffffffff % fffff000000000010011 % 3b9f9c3b79df39c00000000000010000000000000000000076e77c7877ceece1d8000000000000 % 000000000000000000000000000000010000000000000004000000000000000000000000000000 % 00003000000000010011 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000004000000000000000000000000000000 % 00003000000000010011 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000004000000000000000000000000000000 % 00003000000000010011 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000004000000000000000000000000000000 % 00003000000000010000 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000010000000000000004000000001002000000000400000000 % 00003000000000010000 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 0000000000000000000000000000001fe000000000000004000000021006020000000400020000 % 00003000000000010000 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 0000000000000000000000000000001fe00000000000000400000002001a020000000000020000 % 00003000000000010013 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000fe00000000000000400000007b0e2e79cdc0dccefe78000 % 00003000000000010007 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000fe000000000000004000000021113123e620e6447320000 % 0000300000000001001a % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000fc00000000000000400000002111212204204246a120000 % 00003000000000010000 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 00000000000000000000000000000007c0000000000000040000000210e212204204242a120000 % 00003000000000010013 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 00000000000000000000000000000007c000000000000004000000021102123242046432320000 % 0000300000000001001c % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 00000000000000000000000000000007800000000000000400000003b9f73b9ce707ce11e38000 % 00003000000000010013 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000038000000000003c04000000000118000000040000000000 % 0000300000000001000e % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000038000000000003f84000000000318000000040000000000 % 00003000000000010006 % 000000000000000000000000000100000000000000000000000000000000000000000000000000 % 000000000000000000000000000000030000000000003ff40000000001e00000000e0000000000 % 0000300000000001000d % 0000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffff % fffffffffffffffffffffffffffffffffffffffffffffffc000000000000000000000000000000 % 00003fffffffffff0017 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000003ffc000000000000000000000000000000 % 0000300000000000001d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000003fc4000000000000000000000000000000 % 00003000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000003e04000060000080000000000000000000 % 00003000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000003004000020001080000000000000000400 % 00003000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004000020001000000000000000000400 % 0000300000000000000c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004034e2387bd8f370371e7de37638f39 % f1a03000000000000017 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004049f27cc509998839a12211997c47c % 82403000000000000005 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004075024081090908108720711140440 % 83a03000000000000010 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000400d024081090908109921911140440 % 8060300000000000001b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000040459264c509190811a322311164464 % 82203000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004078e73879dcf39c1f1df1dbbbb8739 % c3c03000000000000011 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004000000000000000100000000000000 % 0000300000000000001c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004000000000000000100000000000000 % 00003000000000000007 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004000000000000000380000000000000 % 00003000000000000012 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004000000000000000000000000000000 % 0000300000000000001d % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004000000000000000000000000000000 % 00003000000000000008 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000004000000000000000000000000000000 % 00003000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffff % fffff00000000000001e %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n 147.5 232.5 m 165 232.5 l n 165 232.5 m 161.97 233.51 l 161.97 231.49 l cl 0 0 0 F n 147.5 232.5 m 161.97 232.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.5 124.61] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -598 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_duenna\)) s -1292 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (preventative maintenance,) s -678 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error recovery) s savemat setmatrix n 48.75 120 m 96.25 120 l 96.25 135 l 48.75 135 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.5 86.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -782 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_primalpivot\)) s -1100 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select leaving variable;) s -556 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivot basis;) s -1074 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (update variables, PSE) s -1082 695 m 927 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (norms, reduced costs;) s -954 927 m 1159 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select next entering) s -386 1159 m 1391 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s savemat setmatrix n 50 82.5 m 95 82.5 l 95 112.5 l 50 112.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 147.5 54.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -640 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_primalin\)) s -1128 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select entering variable) s savemat setmatrix n 126.25 50 m 168.75 50 l 168.75 60 l 126.25 60 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 147.5 29.617] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -662 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_initp1obj\)) s -970 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (install and initialise) s -812 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (phase I objective) s savemat setmatrix n 126.25 25 m 168.75 25 l 168.75 40 l 126.25 40 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 128.75 144.237] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -620 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(tweakp1obj\)) s -1112 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (adjust objective, check) s -938 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal feasibility of) s -1022 431 m 647 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variables in objective) s savemat setmatrix n 105 140 m 152.5 140 l 152.5 157.5 l 105 157.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 127.5 184.617] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -596 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(verifyp1obj\)) s -1104 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (check primal feasbility) s -708 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (of all variables) s savemat setmatrix n 103.75 180 m 151.25 180 l 151.25 195 l 103.75 195 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.5 193.838] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -708 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(preoptimality\)) s -914 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (factor basis, check) s -956 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (accuracy & confirm) s -806 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasibility status) s savemat setmatrix n 51.25 190 m 93.75 190 l 93.75 207.5 l 51.25 207.5 l 51.25 190 l cl gsave 0 0 0 0.176 0 B grestore n 147.5 25 m 146.49 21.972 l 148.51 21.972 l cl 0 0 0 F n 147.5 17.5 m 147.5 21.972 l gsave 0 0 0 0.176 0 B grestore n 147.5 50 m 146.49 46.972 l 148.51 46.972 l cl 0 0 0 F n 147.5 40 m 147.5 46.972 l gsave 0 0 0 0.176 0 B grestore n 147.5 85 m 146.49 81.972 l 148.51 81.972 l cl 0 0 0 F n 147.5 72.5 m 147.5 81.972 l gsave 0 0 0 0.176 0 B grestore n 72.5 120 m 71.491 116.97 l 73.509 116.97 l cl 0 0 0 F n 72.5 112.5 m 72.5 116.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.5 139.946] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -688 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unrecoverable) s -294 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error?) s savemat setmatrix n 72.5 135 m 62.5 135 l 57.5 140 l 62.5 145 l 82.5 145 l 87.5 140 l 82.5 135 l 72.5 135 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 172.645 159.458] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -402 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (entering) s -386 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s -444 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selected?) s savemat setmatrix n 172.5 156.25 m 165 156.25 l 160 162.5 l 165 168.75 l 180 168.75 l 185 162.5 l 180 156.25 l 172.5 156.25 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 128.421 161.976] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -700 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal or dual) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible?) s savemat setmatrix n 127.5 157.5 m 117.5 157.5 l 112.5 162.5 l 117.5 167.5 l 140 167.5 l 145 162.5 l 140 157.5 l 127.5 157.5 l cl gsave 0 0 0 0.176 0 B grestore n 127.5 195 m 120 195 l 115 200 l 120 205 l 135 205 l 140 200 l 135 195 l 127.5 195 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 127.5 199.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -424 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (objective) s -392 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (correct?) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 178.75 192.588] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -662 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_initp1obj\)) s -1000 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (reinitialise objective,) s -614 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (tighten pivot) s -1014 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selection parameters) s savemat setmatrix n 160 188.75 m 197.5 188.75 l 197.5 206.25 l 160 206.25 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.5 211.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible?) s savemat setmatrix n 72.5 207.5 m 65 207.5 l 60 212.5 l 65 217.5 l 80 217.5 l 85 212.5 l 80 207.5 l 72.5 207.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.5 221.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -218 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible?) s savemat setmatrix n 72.5 217.5 m 65 217.5 l 60 222.5 l 65 227.5 l 80 227.5 l 85 222.5 l 80 217.5 l 72.5 217.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 167.5 216.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s 0 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 42.5 231.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -464 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (infeasible) s -480 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (expected?) s savemat setmatrix n 42.5 227.5 m 35 227.5 l 30 232.5 l 35 237.5 l 50 237.5 l 55 232.5 l 50 227.5 l 42.5 227.5 l cl gsave 0 0 0 0.176 0 B grestore n 72.5 190 m 71.491 186.97 l 73.509 186.97 l cl 0 0 0 F n 72.5 155 m 72.5 186.97 l gsave 0 0 0 0.176 0 B grestore n 105 150 m 101.97 151.01 l 101.97 148.99 l cl 0 0 0 F n 87.5 150 m 101.97 150 l gsave 0 0 0 0.176 0 B grestore n 128.75 180 m 127.74 176.97 l 129.76 176.97 l cl 0 0 0 F n 128.75 167.5 m 128.75 176.97 l gsave 0 0 0 0.176 0 B grestore n 93.75 200 m 96.778 198.99 l 96.778 201.01 l cl 0 0 0 F n 115 200 m 96.778 200 l gsave 0 0 0 0.176 0 B grestore n 160 200 m 156.97 201.01 l 156.97 198.99 l cl 0 0 0 F n 140 200 m 156.97 200 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 47.5 152.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -240 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error) s savemat setmatrix n 42.5 227.5 m 41.491 224.47 l 43.509 224.47 l cl 0 0 0 F n 60 222.5 m 42.5 222.5 l 42.5 224.47 l gsave 0 0 0 0.176 0 B grestore n 97.5 227.5 m 96.491 224.47 l 98.509 224.47 l cl 0 0 0 F n 85 222.5 m 97.5 222.5 l 97.5 224.47 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 20 244.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -464 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (infeasible) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 75 244.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -562 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unbounded) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 172.5 251.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -614 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (tighten pivot) s -1014 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selection parameters) s savemat setmatrix n 152.5 247.5 m 192.5 247.5 l 192.5 257.5 l 152.5 257.5 l cl gsave 0 0 0 0.176 0 B grestore n 75 240 m 73.991 236.97 l 76.009 236.97 l cl 0 0 0 F n 83.75 232.5 m 75 232.5 l 75 236.97 l gsave 0 0 0 0.176 0 B grestore n 20 240 m 18.991 236.97 l 21.009 236.97 l cl 0 0 0 F n 30 232.5 m 20 232.5 l 20 236.97 l gsave 0 0 0 0.176 0 B grestore n 152.5 252.5 m 149.47 253.51 l 149.47 251.49 l cl 0 0 0 F n 42.5 237.5 m 42.5 252.5 l 149.47 252.5 l gsave 0 0 0 0.176 0 B grestore n 147.5 45 m 150.53 43.991 l 150.53 46.009 l cl 0 0 0 F n 192.5 252.5 m 205 252.5 l 205 45 l 150.53 45 l gsave 0 0 0 0.176 0 B grestore n 205 200 m 201.97 201.01 l 201.97 198.99 l cl 0 0 0 F n 197.5 200 m 201.97 200 l gsave 0 0 0 0.176 0 B grestore n 205 162.5 m 201.97 163.51 l 201.97 161.49 l cl 0 0 0 F n 185 162.5 m 201.97 162.5 l gsave 0 0 0 0.176 0 B grestore n 95 85 m 98.028 83.991 l 98.028 86.009 l cl 0 0 0 F n 172.5 156.25 m 172.5 85 l 98.028 85 l gsave 0 0 0 0.176 0 B grestore n 47.5 147.5 m 46.491 144.47 l 48.509 144.47 l cl 0 0 0 F n 57.5 140 m 47.5 140 l 47.5 144.47 l gsave 0 0 0 0.176 0 B grestore n 128.75 172.5 m 125.72 173.51 l 125.72 171.49 l cl 0 0 0 F n 60 66.25 m 37.5 66.25 l 37.5 172.5 l 125.72 172.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 146.074 75.472] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 134.617 69.181] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -105 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 56.919 142.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.73 157.81] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 88.251 152.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 29.419 235.17] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 83.169 235.17] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 59.419 225.17] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 43.73 240.31] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 85.751 225.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 112.001 235.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 145.751 165.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 140.751 202.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 114.419 202.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 131.23 170.31] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 185.751 165.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 173.872 154.463] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 138.75 214.617] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -738 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (remove phase I) s -862 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (objective; prepare) s -554 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (for phase II) s savemat setmatrix n 122.5 210 m 155 210 l 155 225 l 122.5 225 l cl gsave 0 0 0 0.176 0 B grestore n 122.5 212.5 m 119.47 213.51 l 119.47 211.49 l cl 0 0 0 F n 85 212.5 m 119.47 212.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 85.751 215.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n 160 162.5 m 156.97 163.51 l 156.97 161.49 l cl 0 0 0 F n 145 162.5 m 156.97 162.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 147.5 63.367] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -402 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (entering) s -386 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s -444 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selected?) s savemat setmatrix n 147.5 60 m 140 60 l 135 66.25 l 140 72.5 l 155 72.5 l 160 66.25 l 155 60 l 147.5 60 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.5 151.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -616 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unbounded?) s savemat setmatrix n 72.5 145 m 62.5 145 l 57.5 150 l 62.5 155 l 82.5 155 l 87.5 150 l 82.5 145 l 72.5 145 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 101.25 61.737] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -892 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_dealWithPunt\)) s -778 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (attempt to relax) s -698 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivot selection) s -554 431 m 647 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (parameters) s savemat setmatrix n 85 57.5 m 117.5 57.5 l 117.5 75 l 85 75 l cl gsave 0 0 0 0.176 0 B grestore n 72.5 60.204 m 65 60.204 l 60 66.454 l 65 72.704 l 80 72.704 l 85 66.454 l 80 60.204 l 72.5 60.204 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 72.742 62.9992] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -196 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (new) s -530 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (candidates) s -484 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (available?) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 58.57 65.472] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -105 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.876 58.541] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n 117.5 66.25 m 120.53 65.241 l 120.53 67.259 l cl 0 0 0 F n 135 66.25 m 120.53 66.25 l gsave 0 0 0 0.176 0 B grestore n 147.5 45 m 144.47 46.009 l 144.47 43.991 l cl 0 0 0 F n 72.5 60 m 72.5 45 l 144.47 45 l gsave 0 0 0 0.176 0 B grestore n 135 227.5 m 126.25 227.5 l 121.25 232.5 l 126.25 237.5 l 143.75 237.5 l 148.75 232.5 l 143.75 227.5 l 135 227.5 l cl 1 1 1 F gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 135 233.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -288 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (punt?) s savemat setmatrix n 165 217.5 m 161.97 218.51 l 161.97 216.49 l cl 0 0 0 F n 155 217.5 m 161.97 217.5 l gsave 0 0 0 0.176 0 B grestore n 121.25 232.5 m 118.22 233.51 l 118.22 231.49 l cl 0 0 0 F n 111.25 232.5 m 118.22 232.5 l gsave 0 0 0 0.176 0 B grestore n 135 252.5 m 133.99 249.47 l 136.01 249.47 l cl 0 0 0 F n 135 237.5 m 135 249.47 l gsave 0 0 0 0.176 0 B grestore n 97.5 227.5 m 88.75 227.5 l 83.75 232.5 l 88.75 237.5 l 106.25 237.5 l 111.25 232.5 l 106.25 227.5 l 97.5 227.5 l cl 1 1 1 F gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 97.5 231.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -562 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unbounded) s -480 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (expected?) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 136.154 240.045] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 149.016 235.17] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 167.5 231.656] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s 0 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (punt) s savemat setmatrix grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore %%EndDocument @endspecial 0 10013 a currentpoint currentpoint translate 1 0.83875 div 1 0.83875 div scale neg exch neg exch translate 0 10013 a 2229 10379 a FP(Fig)n(ur)q(e)52 b(10:)66 b(Pr)s(i)s(mal)53 b(Phas)m(e)f(I)h(Algo)-7 b(r)s(ithm)52 b(Fl)n(ow)3771 11400 y(52)p eop end %%Page: 53 56 TeXDict begin 53 55 bop 0 466 a FP(be)76 b(th)l(e)f(be)o(s)-5 b(t)76 b(\(o)-7 b(r)76 b(even)g(a)f(good\))g(c)-7 b(h)n(oic)h(e.)135 b(T)8 b(h)l(e)75 b(\003)n(ow)g(of)h(c)l(o)l(ntr)q(o)-5 b(l)74 b(is)i(r)q(e)l(dir)q(ec)-5 b(te)l(d)75 b(to)h(th)l(e)f(o)-5 b(u)l(te)l(r)75 b(l)n(oo)-5 b(p,)81 b(wh)l(e)l(r)q(e)0 665 y FJ(dy_pr)s(im)m(alin)53 b FP(will)f(be)h(call)n(e)l(d)g(to)g(s)m (e)l(l)n(ec)-5 b(t)53 b(an)f(ente)l(r)s(i)s(n)n(g)g(v)r(ar)s(i)s(a)l(b) l(l)n(e.)249 964 y(It)62 b(can)g(ha)-6 b(p)e(pen)61 b(tha)-8 b(t)61 b(n)m(o)g(ente)l(r)s(i)s(n)n(g)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)h (is)g(s)m(e)l(l)n(ec)-5 b(te)l(d)63 b(by)e FJ(pseupdate)h FP(fo)-7 b(r)62 b(u)-7 b(s)m(e)63 b(i)s(n)e(th)l(e)h(n)n(e)-5 b(xt)62 b(ite)l(ra)-8 b(tio)l(n.)0 1163 y(He)l(r)q(e,)82 b(too,)g(c)l(o)l(ntr)q(o)-5 b(l)75 b(\003)n(ow)h(is)g(r)q(e)l(dir)q(ec) -5 b(te)l(d)76 b(to)h FJ(dy_pr)s(im)m(alin)p FP(.)136 b(T)8 b(h)l(e)76 b(s)n(i)s(n)n(gl)n(e)g(mos)-5 b(t)76 b(c)l(o)n(mmo)l(n)g(r)q(eas)n(o)l(n)f(i)s(n)h(pr)s(i)s(mal)0 1363 y(s)n(i)s(mpl)n(e)-5 b(x)80 b(is)g(a)h(bo)-5 b(und-to-bo)g(und)77 b(`pivot')h(of)i(a)g(n)m(o)l(n)m(bas)n(ic)f(v)r(ar)s(i)s(a)l(b)l(l)n(e) h(\227)g(s)n(i)s(nc)-6 b(e)80 b(th)l(e)l(r)q(e)g(is)g(n)m(o)e(bas)n(is) j(c)-7 b(han)n(g)n(e,)0 1562 y FJ(pseupdate)53 b FP(is)g(n)m(ot)f(call) n(e)l(d.)249 1861 y(An)m(oth)l(e)l(r)40 b(c)l(o)n(mmo)l(n)h(r)q(eas)n (o)l(n)g(fo)-7 b(r)42 b(fail)n(ur)q(e)f(to)h(s)m(e)l(l)n(ec)-5 b(t)42 b(an)g(ente)l(r)s(i)s(n)n(g)e(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(is)g (tha)-8 b(t)41 b(all)h(candida)-8 b(te)o(s)41 b(we)l(r)q(e)h(pr)q(e-)0 2060 y(vio)-5 b(u)e(sly)40 b(\003agg)n(e)l(d)e(as)j(uns)-8 b(uit)s(a)l(b)l(l)n(e)39 b(pivots.)61 b(In)40 b(this)g(cas)m(e,)j FJ(dy_pr)s(im)m(alin)e FP(will)e(i)s(ndica)-8 b(te)39 b(a)i(`p)-5 b(unt')38 b(and)h FJ(dy_dealW)q(ithPunt)0 2259 y FP(will)63 b(be)i(call)n(e)l(d)g(to)f(r)q(eev)r(al)n(ua)-8 b(te)65 b(th)l(e)f(\003agg)n(e)l(d)e(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.) 102 b(If)64 b(it)h(is)f(a)l(b)l(l)n(e)h(to)f(make)h(n)n(ew)f(candida)-8 b(te)o(s)64 b(a)-7 b(v)r(aila)l(b)l(l)n(e,)0 2459 y(c)l(o)l(ntr)q(o)i (l)59 b(r)q(e)-7 b(t)l(ur)5 b(ns)60 b(to)h FJ(dy_pr)s(im)m(alin)f FP(fo)-7 b(r)61 b(an)m(oth)l(e)l(r)e(a)-8 b(tte)n(mpt)59 b(to)h(\002)s(nd)g(an)g(ente)l(r)s(i)s(n)n(g)f(v)r(ar)s(i)s(a)l(b)l(l)n (e.)89 b(If)61 b(all)f(\003agg)n(e)l(d)f(v)r(ar)s(i-)0 2658 y(a)l(b)l(l)n(e)o(s)i(r)q(e)n(mai)s(n)f(uns)-8 b(uit)s(a)l(b)l(l)n (e,)61 b(c)l(o)l(ntr)q(o)-5 b(l)60 b(\003)n(ow)f(move)o(s)j(to)e(th)l (e)g(pr)q(eo)-5 b(pti)s(mality)59 b(a)n(c)-5 b(tio)l(ns)60 b(with)f(an)h(i)s(ndica)-8 b(tio)l(n)59 b(tha)-8 b(t)0 2857 y(pr)s(i)s(mal)53 b(p)-6 b(has)m(e)52 b(I)i(has)e(p)-5 b(unte)l(d.)249 3156 y(If)51 b(th)l(e)f(curr)q(ent)g(pivot)g(is)g(a)l (bo)-7 b(rte)l(d)50 b(d)-7 b(u)l(e)50 b(to)g(n)n(ume)l(r)s(ical)g(pr)q (o)-8 b(b)l(l)n(e)n(ms)50 b(\(an)g(uns)-8 b(uit)s(a)l(b)l(l)n(e)49 b(pivot)h(c)l(oe)l(\002)-49 b(\002c)m(ient)49 b(bei)s(n)n(g)0 3355 y(th)l(e)56 b(mos)-5 b(t)56 b(c)l(o)n(mmo)l(n)g(of)g(th)l(e)o(s)m (e\),)g FJ(pseupdate)h FP(is)f(n)m(ot)f(e)-5 b(xecu)l(te)l(d.)76 b(Onc)-6 b(e)56 b FJ(dy_duenna)h FP(has)g(t)s(aken)f(th)l(e)f(n)n(ec)-6 b(e)o(s)h(sary)0 3554 y(c)l(o)e(rr)q(ec)i(tive)53 b(a)n(c)-5 b(tio)l(n,)52 b(th)l(e)g(\003)n(ow)h(of)f(c)l(o)l(ntr)q(o)-5 b(l)52 b(move)o(s)h(to)g(th)l(e)g(o)-5 b(u)l(te)l(r)52 b(l)n(oo)-5 b(p)52 b(and)h FJ(dy_pr)s(im)m(alin)p FP(.)249 3853 y(Wh)l(en)c FJ(dy_pr)s(im)m(alin)h FP(i)s(ndica)-8 b(te)o(s)49 b(o)-5 b(pti)s(mality)-17 b(,)49 b FJ(dy_pr)s(im)m(alpiv)l (ot)g FP(i)s(ndica)-8 b(te)o(s)49 b(o)-5 b(pti)s(mality)48 b(o)-7 b(r)50 b(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s,)48 b(o)-7 b(r)0 4053 y FJ(tw)m(eakp1obj)74 b FP(i)s(ndica)-8 b(te)o(s)74 b(pr)s(i)s(mal)g(feas)n(ibility)-17 b(,)79 b(th)l(e)74 b(i)s(nn)n(e)l(r)f(pivoti)s(n)n(g)f(l)n(oo)-5 b(p)74 b(ends)g(and)f FJ(v)m(er)s(ifyp1obj)h FP(is)g(call)n(e)l(d)g(to) 0 4252 y(ve)l(r)s(ify)e(feas)n(ibility)-17 b(.)123 b(If)72 b(feas)n(ibility)g(is)g(c)l(o)l(n\002r)5 b(me)l(d,)76 b FJ(pr)o(eoptim)m(ality)71 b FP(is)i(call)n(e)l(d)f(to)g(r)q(e)l(fa)n (c)-5 b(to)e(r)72 b(th)l(e)g(bas)n(is,)77 b(pe)l(r)5 b(fo)-7 b(r)5 b(m)0 4451 y(a)n(ccura)n(cy)53 b(c)-7 b(h)l(ec)f(ks,)55 b(and)e(c)l(o)l(n\002r)5 b(m)53 b(pr)s(i)s(mal)i(and)e(d)-7 b(ual)54 b(feas)n(ibility)-17 b(.)69 b(If)54 b(th)l(e)l(r)q(e)g(ar)q(e) h(n)m(o)e(s)-8 b(urpr)s(is)m(e)o(s,)54 b(pr)s(i)s(mal)g(p)-6 b(has)m(e)0 4650 y(I)71 b(te)l(r)5 b(m)s(i)s(na)-8 b(te)o(s)70 b(with)f(an)h(i)s(ndica)-8 b(tio)l(n)68 b(of)i(o)-5 b(pti)s(mality)69 b(\(pr)s(i)s(mal)h(feas)n(ibility\),)k(un)m(bo)-5 b(und)g(e)l(dn)n(e)o (s)g(s,)72 b(o)-7 b(r)71 b(pr)s(i)s(mal)f(i)s(n-)0 4850 y(feas)n(ibility)-17 b(.)111 b(In)68 b(any)g(event,)k(if)c FJ(pr)o(eoptim)m(ality)f FP(r)q(e)-7 b(po)g(rts)69 b(tha)-8 b(t)68 b(th)l(e)f(s)n(o)-5 b(l)n(u)l(tio)l(n)67 b(is)h(pr)s(i)s(mal)g (feas)n(ib)l(l)n(e,)73 b(p)-6 b(has)m(e)68 b(I)g(will)0 5049 y(end)c(with)g(an)h(i)s(ndica)-8 b(tio)l(n)63 b(of)i(o)-5 b(pti)s(mality)63 b(even)j(if)e(it)h(was)g(n)m(ot)f(e)-5 b(xpec)g(te)l(d)65 b(fr)q(o)n(m)g(th)l(e)f(pivot)h(l)n(oo)-5 b(p)65 b(te)l(r)5 b(m)s(i)s(na)-8 b(tio)l(n)0 5248 y(c)l(o)l(nditio)l (n.)249 5547 y(If)66 b(a)h(pr)s(i)s(mal)f(feas)n(ib)l(l)n(e)g(s)n(o)-5 b(l)n(u)l(tio)l(n)64 b(has)i(been)g(fo)-5 b(und,)68 b(th)l(e)d(o)-7 b(r)s(ig)t(i)s(nal)66 b(o)-8 b(bj)l(ec)j(tive)65 b(will)g(be)h(r)q(e)o (s)-5 b(to)e(r)q(e)l(d)66 b(be)l(fo)-7 b(r)q(e)67 b(r)q(e-)0 5746 y(t)l(ur)5 b(ni)s(n)n(g)61 b(fr)q(o)n(m)i FJ(pr)s(im)m(al1)p FP(.)97 b(T)8 b(h)l(e)63 b(trans)n(itio)l(n)e(to)j(p)-6 b(has)m(e)62 b(II)i(ent)s(ails)g(calcu)l(la)-8 b(ti)s(n)n(g)61 b(th)l(e)i(o)-8 b(bj)l(ec)j(tive,)65 b(d)-7 b(ual)62 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)0 5945 y(and)50 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)49 b(c)l(os)-5 b(ts)51 b(fo)-7 b(r)51 b(th)l(e)e(o)-7 b(r)s(ig)t(i)s(nal)50 b(o)-8 b(bj)l(ec)j(tive.)64 b(If)51 b(th)l(e)f(pr)q(o)-8 b(b)l(l)n(e)n(m)49 b(is)i(i)s(nfeas)n(ib)l (l)n(e)f(o)-7 b(r)51 b(un)m(bo)-5 b(und)g(e)l(d,)48 b(th)l(e)i(p)-6 b(has)m(e)50 b(I)0 6145 y(o)-8 b(bj)l(ec)j(tive)60 b(is)g(l)n(e)l(ft)g (i)s(n)g(pla)n(c)-6 b(e)60 b(and)j FM(D)8 b(Y)g(L)g(P)66 b FP(will)59 b(u)-7 b(s)m(e)61 b(it)f(as)g(it)g(a)-8 b(tte)n(mpts)59 b(to)h(a)n(c)-5 b(tiv)r(a)d(te)60 b(v)r(ar)s(i)s(a)l(b) l(l)n(e)o(s)h(o)-7 b(r)60 b(c)l(o)l(ns)-5 b(trai)s(nts)59 b(to)0 6344 y(d)-5 b(eal)53 b(with)e(th)l(e)i(pr)q(o)-8 b(b)l(l)n(e)n(m)51 b(\(\24712.2\).)249 6643 y(L)5 b(os)-5 b(s)48 b(of)f(pr)s(i)s(mal)g(feas)n(ibility)f(can)h(occur)g(wh)l(en)f (th)l(e)g(bas)n(is)i(is)f(fa)n(c)-5 b(to)e(r)q(e)l(d)47 b(d)-7 b(ur)s(i)s(n)n(g)45 b(th)l(e)h(pr)q(eo)-5 b(pti)s(mality)46 b(c)-7 b(h)l(ec)f(ks.)0 6842 y(T)8 b(h)l(e)52 b(pivot)h(s)m(e)l(l)n(ec) -5 b(tio)l(n)52 b(parame)-7 b(te)l(rs)54 b(ar)q(e)f(tighten)n(e)l(d)e (and)h(pivoti)s(n)n(g)f(r)q(e)o(s)-8 b(ume)o(s.)249 7141 y(L)5 b(os)-5 b(s)60 b(of)e(d)-7 b(ual)58 b(feas)n(ibility)g(is)h(c)l (o)l(ns)n(id)-5 b(e)l(r)q(e)l(d)58 b(o)l(nly)f(wh)l(en)h(it)g(is)h(a)n (cc)l(o)n(mpanie)l(d)f(by)g(la)n(c)-8 b(k)58 b(of)h(pr)s(i)s(mal)g (feas)n(ibility)0 7340 y(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)54 b(a)h(fals)m(e)f(i)s(ndica)-8 b(tio)l(n)53 b(of)h(i)s(nfeas)n (ibility\).)69 b(L)5 b(os)-5 b(s)55 b(of)g(d)-7 b(ual)53 b(feas)n(ibility)h(can)g(occur)h(fo)-7 b(r)54 b(two)g(dis)-5 b(ti)s(nc)g(t)54 b(r)q(eas)n(o)l(ns.)0 7540 y(In)60 b(th)l(e)f(l)n(e)o (s)-5 b(s)61 b(c)l(o)n(mmo)l(n)e(cas)m(e,)i(l)n(os)-5 b(s)61 b(of)e(d)-7 b(ual)59 b(feas)n(ibility)g(s)-5 b(te)n(ms)60 b(fr)q(o)n(m)g(l)n(os)-5 b(s)60 b(of)g(n)n(ume)l(r)s(ic)f(a)n(ccura)n (cy)-17 b(.)86 b(T)8 b(h)l(e)59 b(pivot)0 7739 y(s)m(e)l(l)n(ec)-5 b(tio)l(n)52 b(ru)l(l)n(e)o(s)h(ar)q(e)g(tighten)n(e)l(d)f(and)g (pivoti)s(n)n(g)f(r)q(e)o(s)-8 b(ume)o(s.)249 8038 y(T)8 b(h)l(e)72 b(mo)-7 b(r)q(e)73 b(c)l(o)n(mmo)l(n)f(r)q(eas)n(o)l(n)g(fo) -7 b(r)73 b(a)-6 b(p)e(par)q(ent)72 b(l)n(os)-5 b(s)73 b(of)g(d)-7 b(ual)72 b(feas)n(ibility)g(a)-8 b(t)72 b(th)l(e)h(te)l(r)5 b(m)s(i)s(na)-8 b(tio)l(n)71 b(of)h(p)-6 b(has)m(e)73 b(I)0 8237 y(pr)s(i)s(mal)j(s)n(i)s(mpl)n(e)-5 b(x)77 b(is)f(tha)-8 b(t)75 b(it)h(is)g(endi)s(n)n(g)e(with)h(a)h(p)-5 b(unt,)81 b(as)c(d)-5 b(e)o(sc)d(r)s(ibe)l(d)76 b(a)l(bove.)135 b(T)8 b(h)l(e)76 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(\003agg)n(e)l(d)f (as)0 8436 y(uns)-8 b(uit)s(a)l(b)l(l)n(e)79 b(fo)-7 b(r)81 b(pivoti)s(n)n(g)e(ar)q(e)h(n)m(ot)g(d)-7 b(ual)79 b(feas)n(ib)l(l)n(e,)88 b(and)80 b(wh)l(en)f(th)l(e)h(\003ags)g(ar)q(e) h(r)q(e)n(move)l(d)f(to)g(pe)l(r)5 b(fo)-7 b(r)5 b(m)81 b(th)l(e)0 8635 y(pr)q(eo)-5 b(pti)s(mality)80 b(c)-7 b(h)l(ec)f(ks,)89 b(d)-7 b(ual)81 b(feas)n(ibility)g(is)g(r)q(eveal)n (e)l(d)i(as)f(an)f(ill)n(u)-7 b(s)n(io)l(n.)151 b(No)81 b(furth)l(e)l(r)g(a)n(c)-5 b(tio)l(n)80 b(is)i(pos)-5 b(s)n(ib)l(l)n(e)0 8835 y(withi)s(n)51 b(pr)s(i)s(mal)i(s)n(i)s(mpl)n (e)-5 b(x;)53 b(th)l(e)g(r)q(ea)-6 b(d)h(e)l(r)53 b(is)g(agai)s(n)f(r)q (e)l(fe)l(rr)q(e)l(d)h(to)f(\24712.2.)249 9134 y(Wh)l(en)57 b(th)l(e)h(n)n(umbe)l(r)f(of)h(fals)m(e)g(i)s(ndica)-8 b(tio)l(ns)56 b(of)i(o)-5 b(pti)s(mality)57 b(e)-5 b(xc)f(ee)l(ds)59 b(a)f(har)q(d-c)l(od)-5 b(e)l(d)57 b(li)s(m)s(it)h(\(curr)q(ently)f (15\),)0 9333 y(pr)s(i)s(mal)52 b(s)n(i)s(mpl)n(e)-5 b(x)53 b(te)l(r)5 b(m)s(i)s(na)-8 b(te)o(s)52 b(with)f(a)i(fa)-8 b(t)s(al)52 b(e)l(rr)q(o)-7 b(r)d(.)65 b(Oth)l(e)l(r)51 b(e)l(rr)q(o)-7 b(rs)53 b(als)n(o)f(r)q(e)o(s)-8 b(u)l(lt)52 b(i)s(n)g(te)l(r)5 b(m)s(i)s(na)-8 b(tio)l(n)50 b(of)i(th)l(e)g(pr)s(i) s(mal)0 9532 y(s)n(i)s(mpl)n(e)-5 b(x)53 b(algo)-7 b(r)s(ithm,)52 b(and)h(u)l(lti)s(ma)-8 b(te)l(ly)51 b(i)s(n)i(an)f(e)l(rr)q(o)-7 b(r)53 b(r)q(e)-7 b(t)l(ur)5 b(n)52 b(fr)q(o)n(m)57 b FM(D)8 b(Y)g(L)g(P)t FP(.)p 0 9678 3120 7 v 345 9793 a Ft(5)415 9841 y FM(L)d(e)o(s)l(s)37 b(c)m(o)o(mmo)m(nly)-13 b(,)36 b(th)m(e)h(pr)q(o)-7 b(b)m(l)o(e)n(m)38 b(ar)s(is)m(e)o(s)g (beca)-7 b(u)i(s)m(e)38 b(th)m(e)g(n)o(ewly)d(feas)o(ib)m(l)o(e)h(l)o (ea)-6 b(vi)s(n)n(g)36 b(v)q(ar)s(i)s(a)m(b)m(l)o(e)g(of)i(th)m(e)f(j) -5 b(u)g(s)l(t-c)m(o)o(mpl)o(e)g(te)m(d)36 b(pivot)j(has)415 9999 y(been)j(s)m(e)m(l)o(ec)l(te)m(d)g(to)h(r)q(eente)m(r)-8 b(.)51 b(T)7 b(h)m(e)42 b(o)-7 b(bj)m(ec)l(tive)42 b(c)m(oe)m(\002)-39 b(\002c)m(ient)42 b(fo)-5 b(r)42 b(this)h(v)q(ar)s(i)s(a)m(b)m(l)o(e)d (is)j(i)s(nc)m(o)-5 b(rr)q(ec)l(t)41 b(wh)m(en)g(it)h(is)h(u)-5 b(s)m(e)m(d)42 b(by)g Ff(pseupdate)p FM(.)3771 11400 y FP(53)p eop end %%Page: 54 57 TeXDict begin 54 56 bop 0 466 a Fu(14.3)197 b(Pr)r(im)n(al)65 b(Phas)-5 b(e)65 b(II)0 885 y FP(T)8 b(h)l(e)65 b(ove)l(rall)g(\003)n (ow)f(of)h(p)-6 b(has)m(e)65 b(II)h(of)f(th)l(e)g(pr)s(i)s(mal)g(s)n(i) s(mpl)n(e)-5 b(x)66 b(is)f(s)-8 b(h)n(own)64 b(i)s(n)h(Fig)n(ur)q(e)g (11.)102 b(T)8 b(h)l(e)65 b(majo)-7 b(r)65 b(dif)n(fe)l(r)q(enc)-6 b(e)o(s)0 9474 y currentpoint currentpoint translate 0.91586 0.91586 scale neg exch neg exch translate 0 9474 a @beginspecial 56 @llx 168 @lly 567 @urx 715 @ury 5110 @rwi @setspecial %%BeginDocument: /devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/primal2flow.eps %!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/primal2flow.epsu %%Creator: IslandDraw for lou %%CreationDate: Wed Sep 14 11:16:10 2005 %%Pages: 1 %%BoundingBox: 56 168 567 715 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 639 685 1 2055 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000c03 % 01c000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000f83 % 0fc000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000ff3 % 7fc000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 00000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000 % 0000 % 00000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000ff3 % 7fc000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000f83 % 0fc000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000c03 % 01c000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % 800000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000004300000004 % 000018800800000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000008100000004 % 000008800800000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000010100000000 % 000008000400000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000011f3b81b9fc % dd8789b70400000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001000000001311101cc84 % 664848988400000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000012119008484 % 4441c8908400000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001000000001210a008484 % 444648908400000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001000000001230a008c84 % 4448c8908400000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000011d8400f9ce % eee77df9c400000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000010004008000 % 000000000400000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000001000000000801c7e8000 % 000000000800000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001000000000003001c000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000600000000000001 % 000000000040181800600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000200010000020001 % 000000000040080800600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000200010000020000 % 000180000000080800600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001035c238f3c1c6e79cfb % 370e077f3ec78b89c0600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000104be27d8903e3123e41 % 1891023090484ccbe0600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010760241010202122041 % 109103439041c84a00600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c3600000000000000000000000000000000000000000000100e0241010202122041 % 108e014c9046484a00600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c12000000007ffffffffffffffffffffffffffff800000010472265890322123241 % 109001919048c8cb20600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c14000000007ffffffffffffffffffffffffffff80000001079c738f1c1c73b9ce3 % b9df008ef8e76f9dc0600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c0c0000000040000000000000000000000000000800000010000000000000000000 % 001180000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c080000000040000000000000000000000000000800000010000000000000000000 % 003180000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c080000000040000000000000000000000000000800000010000000000000000000 % 001e00000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c300000000040000000000000000000000000000800000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000040000000000000000000000000000800000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000042180001800067b9e0203e0000008800000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000004408000080002331a46011000010880000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000180000000000000 % 0001 % 00003fffffffffffff80004808000080002310842011000010480000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000000000000000000000000000180000000000000 % 0001 % 00007fffffffffffffc00048fbb80f8e1e21196f2e1121373c4800000000000000000038000000 % 000000700000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0000e0000000000000c000498910189f2121a924311e6318904800000000000000000070000000 % 000000380000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0001c0000000000000600049099010900721ad24211021109048000000000000000000e0000000 % 010000180000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 000380006e1cfdc00070004908a010901920ae24211021109048000000000000000000c0000200 % 0100000c0000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00030000313e48800038004918a011992320c62421182310904800000000000000000180000200 % 0000018e0000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0006000021206c80001c0048ec400ece1df0447773b81db9dc4800000000000000000381c6e79c % fb370e070000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 000e000021203500000c0048004000000000000000000000004800000000000000000703e3123e % 411891038000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 001c0000213236000006004401c7e0000000000000000000008800000000000000000e02021220 % 411091018000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00380000739c120000070040030000000000000000000000000800000000000000000c02021220 % 41108e00c000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 003000000000000000038040000000000000000000000000000800000000000000001803221232 % 41109000e000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00600000000000000001c040000000000000000000006000000800000000000000003801c73b9c % e3b9df007000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00e00000000000000000c040002100000002020000002000000800000000000000007000000000 % 000011803800000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 01c00000000000000000604000210000000202000000200000080000000000000000e000000000 % 000031801800000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0380000000000000000070401e7bce6ec6e7879e07ce23cee0080000000000003600c000000000 % 00001e000c00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 03000000031030000000384021211f3327320233021f2422c00800000000000019018000000000 % 000000000e00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 060000000110100200001c400721102222120221021020e1000800000000000011038000000008 % 030600000700000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0e0000000100100200000c40192110222212022102102323800800000000000011070000000008 % 010200000380000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 1c078f371f31f1e79c340640232119222232022302192464c0080300000000003b8e0000000000 % 010200000180000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 380c5098b11312123e4807401db9ce7773e3839e070e73bee0081f0000000000000c0001dde7d9 % e172380000c0000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 30080390a1121072207403c00000000002000000000000000008ff0000000000001800008a120a % 119a7c0000e0000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 60080c90a1121192200c01c0000000000200000000000000000ffffffffffffffff80000d07208 % 710a40000070000000000000000000000000000000000000000000000000000180000000000000 % 0001 % e00c5190a3123232324400c0000000000700000000000000000ffffffffffffffff00000519209 % 910a40000030000000000000000000000000000000000000000000000000000180000000000000 % 0001 % e0078ef9ddb9d9db9c7800c0000000000000000000000000000bff00000000000038000062320a % 311a64000070000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 6000000000000000000001c000000000000000000000000000087f0000000000001c000021df1d % d9f7380000e0000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 3000000000000000000003c000008000000003000008000000080f0000000000000c0000000000 % 0000000001c0000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 380000000000000000000740000080004000010001080000000800000000000000060000000000 % 000000000180000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 1c0000000000000000000640000000004000010001000000000800000000000000070000000000 % 000000000300000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0e00000004c0181801c00c4001b9bbbcf01ae1387bd8f370000800000000000000038000000000 % 000000000700000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 060000000440080806201c4001cc91664025f17cc509998800080000000000000001c000000000 % 000000000e00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 03000000004008080420384000849a42403b01408109090800080000000000000000c000006000 % 000063801c00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0380f1dfcc478b88e020704000848a424007014081090908000800000000000000006000002000 % 20002c401800000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 01c1088c24484cc9f0406040008c8c4640239164c5091908000800000000000000007000002000 % 200028403000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00e038d0e441c8490080c04000f9c43c703ce3b879dcf39c0008000000000000000038035c270f % 79c3e0407000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0060c853244648490081c040008000000000000000000000000800000000000000001c04be2f98 % a3e62080e000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 003118646448c8c991838040008000000000000000000000000800000000000000000c07602810 % 22042101c000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0038ec23bee76f9ce187004001c000000000000000000000000800000000000000000600e02810 % 220421018000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 001c00000000000000060040000000000000000000000000000800000000000000000704722c98 % a32463030000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000e000000000000000c00400000000000000000000000000008000000000000000003879c770f % 39c3b3070000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0006000000000000001c00400000000000000001000000000008000000000000000001c0000000 % 0000000e0000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0003000000000000003800400000000000000001000000000008000000000000000000c0000000 % 0000001c0000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0003800000000000007000400000dc79f78dd8e3ce7c6800000800000000000000000060000000 % 000000180000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0001c00000000000006000400000e684884665f11f209000000800000000000000000070000000 % 000000300000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000e0000000000000c000400000421c81c445011020e800000800000000000000000038000000 % 000000700000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00007fffffffffffffc0004000004264864445011020180000080000000000000000001fffffff % ffffffe00000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00003fffffffffffff8000400000468c88c4459119208800000800000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000004000007c77c76eeee1ce70f000000800000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000040000040000000000000000000000800000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c0000000000400000400000000000000000000008000000000000000000000006c3 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c0000000000400000e0000000000000000000000800000000000000000000000243 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000cd80000000040000000000000000000000000000800000000000000000000000283 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c640000000040000000000000000000000000000800000000000000000000000183 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c440000000040000000000000000000000000000800000000000000000000000103 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c44000000007ffffffffffffffffffffffffffff800000000000000000000000103 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000cee000000007ffffffffffffffffffffffffffff800000000000000000000000603 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 00c000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 07c000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 3fc000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % fffffffffffffffffffffffffffffffffffffffe00000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % fffffffffffffffffffffffffffffffffffffffe00000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 7fc000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 0fc000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 01c000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % c00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % 800000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000460000000800 % 003001000004000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000820000000800 % 001001000084000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000001020000000000 % 001000000082000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100000013e770373f9bb % 0f13737779e2000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100000016222039908cc % 90939922cc82000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000001423201090888 % 839109348482000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000001421401090888 % 8c9109148482000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000001461401190888 % 919119188c82000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100000013b0801f39ddd % cef9f38878e2000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000001000801000000 % 000100000002000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100000008038fd000000 % 000100000004000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000006003800000 % 000380000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100001800000c0000040 % 000000001006060000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000080008040000040 % 000000001002020000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000080008040000000 % 006000000002020000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000100d709c3de0471e3bcd % c381dfc7f1e2e23880600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000001012f8be62804fa11146 % 24408c221213327c80600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000101d80a0408048071a44 % 2440d0e21072124000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000100380a0408048190a44 % 238053221192124000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000001011c8b262804ca30c44 % 240064621232326480600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000101e71dc3ce0e71d84ee % 77c023b739dbe73880600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 046000000000000080600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 0c6000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 078000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000008000006 % 000008000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000008000202 % 000008000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000202 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000dd9dde782 % e3c3586a0000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000e688b3203 % 342488920000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000428d21202 % 10e748e80000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000428521202 % 1320c8180000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000468623202 % 3464488a0000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100000000007dc21e383 % e3b79cf20000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000400000000 % 000000020000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000400000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000e00000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000c00000000002 % 00c0c000003e3e3f80600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000400800000002 % 004040000011421180600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000400800000000 % 004040000011411040600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010084dc7cf1ee03bf8fe % 3c5c470d0011701200600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001018ce6c5089f0118442 % 42664f92001e1e1e00600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100844284389001a1c42 % 0e42481d0010011200600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000100844284c89000a6442 % 324248030010411040600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000001008c468d189900c8c42 % 46464c912018621080600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000100767c76ecee00476e7 % 3b7ce71e20387c3f80600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000400000000000000 % 000000002000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000400000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000e00000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000030 % 000001800000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000010 % 000000800000080000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000010 % 000000800000080000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000101b8f3edd86803ee1f1 % 09e38f80f3c35e3500600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100c599066490011f313 % 1b17d8818e64884900600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010085090444e80110211 % 0a0410810427487400600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010085090444180110211 % 0a0410810420c80c00600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010085190444890119231 % 1b1651818c64484500600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000101cef38eeef1038e1d8 % ede38ec0f3c78e7900600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000010000000 % 000000000000000100600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000c00000000000 % 000000000080000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000400020000000 % 800000800080000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000400020000000 % 80000080000000c000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100006b8471e786e1cef % e07371ee3f9b870000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001000097c4fb120313e2c % 80f9889f108c488000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000ec0482020212010 % 808108901088488000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100001c0482020212038 % 808108901088470000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000100008e44cb12021324c % 80c908991088480000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000f38e71e38739cee % e0739cee39dcef8000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 00000000000008c000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 00000000000018c000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 0000000000000f0000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000010 % 060c00000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000010 % 020400000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 020400000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000003bbcfb3 % c2e470000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000001142414 % 2334f8000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000001a0e410 % e21480000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000a32413 % 221480000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000c46414 % 6234c8000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001000000000000043be3b % b3ee70000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000000000000001f % c00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000000000000000f % 800000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000007 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003000000000000860000300 % 000000004000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000001020000100 % 000000004000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000002020000100 % 000000002000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000030000000000023e7701f21 % 1cdc6e3c2000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000002622203163 % 3e6231422000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000002423202121 % 2042210e2000000000003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003000000000002421402121 % 204221322000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000002461402323 % 324221462000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000030000000000023b0801d9d % 9ce773bb2000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000002000800000 % 000000002000000000003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000030000000000010039f8000 % 000000004000000000003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003000000000000006000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000800000 % 000080000000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000008008800000 % 000080080000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000008008000000 % 000000080000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003377ce777371ef1f9ddc0d % d8799b9e7370f371e3803000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000339a1f22f988908888be06 % 64848c48f989098b17c03000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000310a1034810883888d2004 % 441c88488108390a04003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000310a101481088c88852004 % 446488488108c90a04003000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000311a1918c9089188863204 % 448c8848c909190b16483000000000000000000200000000000000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000031f70e08739ceecfc21c0e % ee77dcee739cef9de3883000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003100000000000000000000 % 000000000000000000083000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003100000000000000000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003380000000000000000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000236000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000212000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000000000000000003000000000000000000214000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 00000000000000000000300000000000000000020c000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000071ff9e7c3e7 % 1e3cefc7fb80000000003000000000000000000208000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000030000000000f884332010f % b16647e21100000000003000000000000000000208000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000080842120108 % 20426a021900000000003000000000000000000230000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000080842120108 % 20422a020a00000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000030000000000c884232010c % b14633220a00000000003000000000000000000200000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000071ce1e70387 % 1e3c11c70400000000003000000000001fffffffffffffc0000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 0000000004000000000030000000000030000000000000e0000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 000000001c00000000003000000000007000000000000070000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003000000000000000000000 % 00000000300000000000300000000000e000000002000038000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff00000000001c000040002000018000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000003fffffffffffffffffffff % fffffffffffffffffffff00000000001800004000000030c000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000006000000000 % 0000000038000000000000000000000301cdcf38fe6e1c0e000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000c000000000 % 000000001c000000000000000000000703e6247c42312207000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000018000000000 % 000000000e000000000000000000000e0204244042212203800000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000030000000000 % 0000000007000000000000000000001c0204244042211c01800000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000060000000001 % 000000000380000000000000000000180324246442212000c00000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000000c0000000021 % 0000000001c00000000000000000003001ce7738e773be00e00000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000180000000020 % 0000000000e0000000000000000000700000000000002300700000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000003000079e6e7b % 37108e000070000000000000000000e00000000000006300380000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000060000c733121 % 18b19f000038000000000000000001c00000000000003c00180000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000c00008212121 % 10909000001c0000000000000000018000000000000000000c0000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000001800008212121 % 10909000000e0000000000000000030000000000000000000e0000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000300000c632121 % 109199000007000000000000000007000000001006060000070000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000060000079e73bb % b9cece00000380000000000000000e000000001002020000038000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000c000000000000 % 000000000001c0000000000001c01c000000000002020000018000000000070180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000018000000000000 % 000000000000e0000000000001f8180001dfcfb1e2e2700000c00000000007e180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000030000000000000 % 00000000000070000000000001ff3000008c24121332f80000e00000000007fd80000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000060000000000000 % 0000000000003ffffffffffffffff00000d0e41072128000007fffffffffffff80000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000070000000000000 % 0000000000003ffffffffffffffff0000053241192128000007fffffffffffff80000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000038000000080000 % 20000700000070000000000001fe3800006464123232c80000e00000000007f980000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000001c000000080004 % 200018800000e0000000000001f01c000023be39dbe7700001c00000000007c180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000e000000000004 % 000030800001c0000000000001800c000000000000000000038000000000060180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000700001b9bbbcf % 6dc1c08000038360000000000000060000000000000000000306c0000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000380001cc91664 % 262221000007012000000000000007000000000000000000060320000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000001c0000849a424 % 24222200000e0140000000000000038000000000000000000e0220000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000e0000848a424 % 2421c200001c00c000000000000001c00000c0000000c3801c0220000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000700008c8c464 % 242206000038008000000000000000c00000400020004c40380770000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000038000f9c43c7 % 7e73e6000070008000000000000000600000400020004840300000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000000000001c0008000000 % 0002300000e003000000000000000070069c471e79c7c040600000000000000180000000000000 % 0001 % 00000000000c0000000000000000000000000000000000000000000000000000000e0008000000 % 0006300001c000000000000000000038093e4fb123ec4080e00000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000007001c000000 % 0003c00003800000000000000000001c0ea0482022084101c00000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000038000000000 % 0000000007000000000000000000000c01a0482022084103800000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000001c000000000 % 000000000e000000000000000000000608b24cb12328c303000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000000e000000000 % 000000001c00000000000000000000070f1ce71e39c76306000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000007000000000 % 00000000380000000000000000000003800000000000000e000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000003fffffffff % fffffffff00000000000000000000001c00000000000001c000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000007000000000 % 00000000380000000000000000000000c000000000000038000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000e000000000 % 000000001c00000000000000000000006000000000000030000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000001c000000000 % 000000000e00000000000000000000007000000000000060000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000038000000000 % 000000000700000000000000000000003fffffffffffffe0000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000070000000000 % 000000000380000000000000000000001fffffffffffffc0000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000000e0000000000 % 0000000001c0000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000001c0000000000 % 0000000000e0000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000380000000000 % 000000000070000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000700000000000 % 000001818038000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000e00000000000 % 00000080801c000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000001c00000000000 % 00000080800e000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000003884dcf9c78f3 % bf1f78b88e07000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000718c6243ec599 % 1f8884cc9f03800000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000e084424208109 % a8081c849001c00000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000001c084424208108 % a80864849000e00000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000003808c42432c518 % cc888c8c9900700000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000070076e7e1c78f0 % 471c76f9ce003ffffffffffffffffff00000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000060000000000000 % 0000000000003ffffffffffffffffff00000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000030000000000000 % 000000000000700000000000000000300000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000018000000000000 % 000000000000e00000000000000000300000000000000000000000000000000180000000000000 % 0001 % 00000000000c00000000000000000000000000000000000000000000000000000c000000000000 % 000000000001c00000000000000000300000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000006000000000000 % 00000000000386c000000000000000300000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000003000000000000 % 000e00000007024000000000000000300000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000001800000000000 % 00310000000e028000000000000000300000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000c00000000000 % 00210000001c018000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000600000071ff9 % e7c100000038010000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000003000000f8843 % 320200000070010000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000180000080842 % 1204000000e0060000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000000c0000080842 % 1204000001c0000000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c0000000000000000000000000000000000000000000000000000000600000c8842 % 320c00000380000000000000000000300000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000030000071ce1 % e70c00000700000000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000018000000000 % 000000000e00000000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c00000000000000000000000000000000000000000000000000000000c000000000 % 000000001c00000000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000006000000000 % 000000003800000000000000000001fe0000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000003fffffffff % fffffffff000000000000000000001fe0000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000001fffffffff % ffffffffe000000000000000000001fc0000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000fc0000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000fc0000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000f80000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 1b0000000000000000000000000000780000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 0c8000000000000000000000000000780000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 088000000000000000000000000000700000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 088000000000000000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 1dc000000000000000000000000000300000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000f03 % 000000000000000000000000000008000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000fe3 % 000000000000000000000000000008000000000000000000000000000000000180000000000000 % 0000 % 00000000000c000000000000000000000000000000000000000000000000000000000000000fff % 00000000000000000000000001f71e42fb70000000000000000000000000000180000000000000 % 0000 % 00000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff % 000000000000000000000000008f88c64188000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000fff % 000000000000000000000000008808424108000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000fe3 % 000000000000000000000000008808424108000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000f03 % 000000000000000000000000008c88464108000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000803 % 00000000000000000000000001c70e3be39c000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000000000001f % e00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000000000000f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000007 % 800000000000000000000000000e3ff3cf80000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000007 % 000000000000000000000000001f10866400000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000001010842400000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000003 % 000000000000000000000000001010842400000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000001910846400000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000e39c3ce00000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000040000000002 % 00000c400080000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000080000000042 % 000004480080000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000100000000040 % 000004080040000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000100000001373ee1e6ef6 % 6ec3c4deee40000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000001000000013991f337342 % 332424484440000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000110910212142 % 2220e4486440000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000110910212142 % 222324482840000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000111919232342 % 222464482840000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000001000000011f38e1e3e77 % 7773beee1040000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000110000002000 % 000000001040000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000090000002000 % 000000007080000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000038000007000 % 00000000c000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000100001c00000000c0000 % 100000080000c00000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000200008000040000 % 100000180000400000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000200008000040000 % 000000080000560000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000001000073c3de79f05c786 % b0d0078b8e3c480000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000242628cc8066849 % 11200c4c5f62500000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000000000000000000000000000000000000000000000000001000020e4088480421ce % 91d008085040780000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000232408848042641 % 903008085040480000600000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000100002466288c80468c8 % 91140c4859624c0000600000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000001000073b3ce79c07c76f % 39e4079cee3cee0000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000400000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % c00000001e00000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000001 % 200000002200000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000001 % 200000002000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000f1e7885f3c79dc0 % ce0f1e6e767f760000600000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000100010b1c58c842c4881 % 4418b3312221990000600000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000100003a0808480e80c82 % 241021212221110000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000ca0808483280502 % 181021212221110000600000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000100011b1c48c846c4503 % 1c18a3212221110000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000ede7877c3b78201 % e60f1e73f773bb8000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000200 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000e00 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000001800 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000003800004c04c80 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000004000004404488 % 000020020000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000004000000400408 % 000020020000000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000000000000000000000000000000000000000000000000001000000e70f0dc5cc59e % ee06f9e7908d000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000004f90924664488 % 440922123192000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000000000000000000000000000000000100000048039d4424488 % 640ea072109d000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000000000000000000000000000000000000000000000000001000000480c834424488 % 2801a1921083000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000010000004c91914464488 % 2808a2321191000000600000000000000000000000000000000000000000000180000000000000 % 0001 % 00000000000000000000000000000000000000000000000000000000001000000e70edee7cefce % 100f39db8ede000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 100000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 700000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % c00000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000010000000000000000000 % 000000000000000000600000000000000200000000000000000000000000000180000000000000 % 0001 % 00000000000000000000000000000000000000000000000000000000001fffffffffffffffffff % ffffffffffffffffffe00000000000000200000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000038000000 % 0000007000000000000000000000007dc7a13fb800000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000070000000 % 00000038000000000000000000000023e26310c400000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000000000000000e0000000 % 0000001c0000000000000000000000220221108400000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000000000000000000000000000000000000000000001c0000000 % 0000000e0000000000000000000000220221108400000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000380000000 % 000000070000000000000000000000232223108400000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000700000040 % 00018003800000000000000000000071c39db9ce00000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000e00000040 % 00008001c000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000001c00000000 % 00008000e000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000000000000038001bbecd % d8f080007000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000000000000070001cd046 % 650880003800000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000e000085044 % 443880001c00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000001c000085044 % 44c880000e00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000003800008d044 % 451880000700000000000000001800000000080000600000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000000000000700000fb8ee % eeedc0000380000000000700000800020000080000200000000000000000000180000000000000 % 0001 % 0000000000000000000000000000000000000000000000000000000000000000000e0000080000 % 0000000001c00000000007e0000800020000000000200000000000000000000180000000000000 % 0001 % 0000000000000000000000000000000000000000000000000000000000000000001c0000080000 % 0000000000e00000000007fc0008f0d786e7db761e200000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000ffffffffffffffff800001c0000 % 00000000007fffffffffffff800999220732099921200000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000ffffffffffffffff00000000000 % 00000000007fffffffffffff800909d20212091107200000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000800000000000000180000000000 % 0000000000e00000000007fc000908320212091119200000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000008000000000000000c0003800004 % c0c00e0001c00000000007e0000919120232091123200000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000800000000000000060004000004 % 404031000380000000000700001cf1e383e71fbb9df00000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000080000000000001b030004000000 % 404021000706c00000000000000000000200000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000080000000000000901800e70f0dc % 5c4701000e03200000000000000000000200000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000080000000000000a00c004f90924 % 664f82001c02200000000000000000000700000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000007f800000000000060060048039d4 % 424804003802200000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000007f0000000000000400300480c834 % 424804007007700000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000007f00000000000004001804c91914 % 464c8c00e0000000000000000000700000980b1000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000007f00000000000018000c0e70edee % 7ce70c01c000000000000000000080000088091100000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000003e00000000000000000600000000 % 000000038000000000000000000080000008010100000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000003e00000000000000000300000000 % 0000000700000000000000000001ce3c1b8b9933ddc00000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000003e00000000000000000180000000 % 0000000e000000000000000000009f42248cc91108800000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000001c000000000000000000c0000000 % 0000001c00000000000000000000900e3a8849110c800000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000001c00000000000000000060000000 % 000000380000000000000000000090320688491105000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000001c00000000000000000030000000 % 000000700000000000000000000099462288c91105000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000007fffffffffffff0000000000001fffffff % ffffffe000000000000000000001ce3b3dcf9fb9c2000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000ffffffffffffff8000000000000fffffff % ffffffc00000000000000000000000000000000002000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000001c0000000000001c0000000000000000000 % 00000000000000000000000000000000000000000e000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000380000000000000e0000000000000000000 % 000000000000000000000000000000000000000018000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000070000000000000070000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000e0000000000000038000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000001c000030000300001c000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000038000010000100000e000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000700000100001000007000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000e00001f108f1000003800000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000001c00003131909000001c00000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000003800002110839000000e00000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000070000021108c9000000700000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000e000002311919000000380000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000001c000001d8ecef8000001c0000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000380000000000000000000e0000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000070000000000000000000070000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000e0000000000000000000038000000000000000 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000fffffffffc000000000000000000001ffffffffffffffff % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000c00000000e0000000000000000000038000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000c0000000070000e00001306003800070000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000c000000003800100000110200c4000e0000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000c000000d81c0010000001020084001c0000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000c000000480e0039c786b172380400381b00000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000c00000050070013e849119a7c0800700c80000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000007f8000003003801201ce910a401000e0088000000000001f % e00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000007f8000002001c0120641910a401001c0088000000000001f % e00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000007f0000002000e01328c8911a643003801dc000000000001f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000003f000000c0007039c76f39f738300700000000000000000f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000003f000000000038000000000000000e00000000000000000f % c00000000000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000003e00000000001c000000000000001c00000000000000000f % 800000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000001e00000000000e0000000000000038000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000001e0000000000070000000000000070000000000000000007 % 800000000000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000001c00000000000380000000000000e0000000000000000007 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000000c000000000001c0000000000001c0000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000c000000000000ffffffffffffff800000000001ffffffff % fffffffe0000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000080000000000007fffffffffffff000000000003ffffffff % ffffffff0000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000700000000 % 000000038000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000e00000000 % 00000001c000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000001c00000000 % 00000000e000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000003800000000 % 000000007000000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000000000000000000000000000000000000000000070000c0000 % 0000c0033800000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000000e000040000 % 000040011c00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000001c000040000 % 000040010e00000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000000000000000000000000000000000000000000003884dc5c788 % 5b87ce1f0700000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000020000000000000000000000000000000000000718c6266cd8 % cc4c5f310380000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000000020000000000000000000000000000000000000e0844242848 % 4848502101c0000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000007dc790bedc0000000000000000000000000000001c0844242848 % 4848502100e0000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 0000000000000000000000000023e23190620000000000000000000000000000003808c42468c8 % c848d9230070000000000000000000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000000220210904200000000000000000000000000000070076e77c787 % 7ce76e1d8038000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000002202109042000000000000000000000000000000e00000000000 % 00000000001c000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000002322119042000000000000000000000000000001c00000000000 % 00000000000e000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000071c38ef8e7000000000000000000000000000003800000000000 % 000000000007000000000000000000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000000000000000000000000000000003ffffffff000000000000 % 000000000003ffffffffffffffc000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000000000000000000000000000000003ffffffff000000000000 % 000000000003ffffffffffffffc000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000300000003800000000000 % 00000000000700000000000000c000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000300000001c00000000000 % 000030e0000e00000000000000c000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000300000000e00000000000 % 08001310001c00000000000000c000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000300000360700000000000 % 08001210003836000000000000c000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000200000c00000000000000000000300000120380071df71c7 % 9ee1f010007019000000000000c000000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000042000004000000000000000000003000001401c00f85b9bec % 49f3102000e011000000000007f800000000000000000000000000000000000180000000000000 % 0001 % 0000000000000000000000000000040000004000000000000000000003000000c00e0080210a08 % 0902104001c011000000000007f800000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000003cdcf66ec78400000000000000000000300000080070080710a08 % 0902104003803b800000000007f800000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000066e642332844000000000000000000003000000800380c8991b2c % 499230c0070000000000000003f800000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000004242422221c40000000000000000000030000030001c071ddf1c7 % 8ee1d8c00e0000000000000003f000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000004242422226440000000000000000000030000000000e000010000 % 000000001c0000000000000003f000000000000000000000000000000000000180000000000000 % 0000 % 00000000000000000000000004646422228c400000000000000000000300000000007000010000 % 00000000380000000000000001f000000000000000000000000000000000000180000000000000 % 0001 % 00000000000000000000000003c7c7777776e00000000000000000000300000000003800038000 % 00000000700000000000000001e000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000400000000000000000000000000000300000000001c00000000 % 00000000e00000000000000001e000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000400000000000000000000000000001fe0000000000e00000000 % 00000001c00000000000000000e000000000000000000000000000000000000180000000000000 % 0000 % 000000000000000000000000000e00000000000000000000000000001fe0000000000700000000 % 00000003800000000000000000c000000000000000000000000000000000000180000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000001fe00000000003ffffffff % ffffffff000000000007fffffffffffff8000000000000ffffffffffffffffffffffffffffffff % ffff % 000000000000000000000000000000000000000000000000000000000fe0000000000000000000 % 0000000000000000000e0000000000001c000000000000c0000000000000000000000000000000 % 0003 % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000001c0000000000000e000000000000c0000000000000000000000000000000 % 0003 % 000000000000000000000000000000000000000000000000000000000fc0000000000000000000 % 0000000000000000003800000000000007000000000000c0000000000000000000000000000000 % 0002 % 0000000000000000000000000000000000000000000000000000000007c0000000000000000000 % 0000000000000000007000000000000003800000000000c0000000000000000000000000000000 % 0002 % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 000000000000000000e000000000000001c00000000000c0000000000000000000000000000000 % 0002 % 000000000000000000000000000000000000000000000000000000000780000000000000000000 % 000000000000000001c000000000000000e00000000000c0000000010040000000004000000000 % 0002 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000038000000000000000700000000000c00000002100c0400000004000200000 % 0002 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 0000000000000000070000000000000000380000000000c0000000200340400000000000200000 % 0002 % 000000000000000000000000000000000000000000000000000000000300000000000000000000 % 00000000000000000e00000000000000001c0000000000c00000007b1c5cf38dc0dcddde780000 % 0002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000001c00000000000000000e0000000000c000000021226247c620e648b3200000 % 0003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000380000000000000000070000000000c0000000212242440420424d21200000 % 0003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000700000000000000000038000000000c0000000211c42440420424521200000 % 0003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000e0000000000003800001c000000000c0000000212042464420464623200000 % 0002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000001c000000000008c400000e000000200c00000003bbee7738e707ce21e380000 % 0002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000038000000000008840000070000003c0c0000000002300000000400000000000 % 0002 % 000000000000000000000000000000000000000000000000000000008000000000000000000000 % 0000000000000007000001b909b9e040000038000003f8c0000000006300000000400000000000 % 0002 % 000000000000000000000000000000000000000000000000000000008000000000000000000000 % 000000000000000e000001cf18c4808000001c000003ffc0000000003c00000000e00000000000 % 0002 % 00000000000000000000000000000000000000000000000000001f39e42fb70000000000000000 % 0000007ffffffffc000000850884810000000fffffffffc0000000000000000000000000000000 % 0002 % 0000000000000000000000000000000000000000000000000000087c8c64188000000000000000 % 0000004000000006000000850884810000001c000003ffc0000000000000000000000000000000 % 0002 % 000000000000000000000000000000000000000000000000000008408424108000000000000000 % 00000040000000030000008d18848300000038000003f8c0000600001000000000000000000000 % 0002 % 000000000000000000000000000000000000000000000000000008408424108000000000000000 % 0000004000000001800000f8edcee300000070000003c0c0000200011000000000000000008000 % 0002 % 000000000000000000000000000000000000000000000000000008648464108000000000000000 % 00000040000006c0c0000080000000000000e0d8000000c0000200010000000000000000008000 % 0002 % 00000000000000000000000000000000000000000000000000001c38e3be39c000000000000000 % 000000400000024060000080000000000001c064000000c035c238f3f1e6e06e3cf9e6ec39e71f % 3402 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000004000000280300001c00000000000038044000000c04be27d8913331073424213327c8f88 % 4802 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000007fc00000180180000000000000000070044000000c076024101121210210e407222408808 % 7402 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000003f8000001000c00000000000000000e00ee000000c00e0241011212102132419222408808 % 0c02 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000003f8000001000600000000000000001c0000000000c0472265891232102346423222648c88 % 4402 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000003f800000600030000000000000000380000000000c079c738f1f9e7383e3be1df7738e71c % 7802 % 00000000000000000000000000000000000000000000000000000c00000000c003000000000000 % 000001f000000000018000000000000000700000000000c0000000000000002000000000000000 % 0002 % 000000000000000000000000000000000000000000000000000004000000004001000000000000 % 000001f00000000000c000000000000000e00000000000c0000000000000002000000000000000 % 0002 % 000000000000000000000000000000000000000000000000000004000000004001000000000000 % 000001f000000000006000000000000001c00000000000c0000000000000007000000000000000 % 0002 % 000000000000000000000000000000000000000000000000042dc5c7884dc7c71f000000000000 % 000000e000000000003000000000000003800000000000c0000000000000000000000000000000 % 0002 % 0000000000000000000000000000000000000000000000000c66266cd8c62c4fb1000000000000 % 000000e000000000001800000000000007000000000000c0000000000000000000000000000000 % 0002 % 000000000000000000000000000000000000000000000000042424284844284821000000000000 % 000000e000000000000c0000000000000e000000000000c0000000000000000000000000000000 % 0002 % 000000000000000000000000000000000000000000000000042424284844284821000000000000 % 00000040000000000007fffffffffffffc000000000000ffffffffffffffffffffffffffffffff % fffe % 00000000000000000000000000000000000000000000000004642468c8c428cca3000000000000 % 00000040000000000003fffffffffffff8000000000000ffffffffffffffffffffffffffffffff % fffe % 00000000000000000000000000000000000000000000000003be77c7876e77671d800000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000020000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000020000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 07ce7909fdc0000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 021f23188620000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 021021088420000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 021021088420000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 021921188420000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 070e38edce70000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000800000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000800000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0037109b9e00000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0039b18c4800000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 001090884800000000000000000000000000000000000000000000000000000000000000000000 % 0001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 001090884800000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 001191884800000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 001f0edcee00000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 001000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 003800000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n 137.5 200 m 136.49 196.97 l 138.51 196.97 l cl 0 0 0 F n 120 195 m 137.5 195 l 137.5 196.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 113.367] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -598 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_duenna\)) s -1292 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (preventative maintenance,) s -678 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error recovery) s savemat setmatrix n 83.75 110 m 131.25 110 l 131.25 122.5 l 83.75 122.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 76.5] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -782 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_primalpivot\)) s -1100 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select leaving variable;) s -556 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivot basis;) s -1074 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (update variables, PSE) s -1082 695 m 927 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (norms, reduced costs;) s -954 927 m 1159 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select next entering) s -386 1159 m 1391 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s savemat setmatrix n 86.25 72.5 m 128.75 72.5 l 128.75 102.5 l 86.25 102.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 44.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -640 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_primalin\)) s -1128 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (select entering variable) s savemat setmatrix n 86.25 40 m 128.75 40 l 128.75 50 l 86.25 50 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 156.338] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -708 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(preoptimality\)) s -914 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (factor basis, check) s -956 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (accuracy & confirm) s -806 463 m 695 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasibility status) s savemat setmatrix n 86.25 152.5 m 128.75 152.5 l 128.75 170 l 86.25 170 l 86.25 152.5 l cl gsave 0 0 0 0.176 0 B grestore n 107.5 40 m 106.49 36.972 l 108.51 36.972 l cl 0 0 0 F n 107.5 30 m 107.5 36.972 l gsave 0 0 0 0.176 0 B grestore n 107.5 72.5 m 106.49 69.472 l 108.51 69.472 l cl 0 0 0 F n 107.5 62.5 m 107.5 69.472 l gsave 0 0 0 0.176 0 B grestore n 107.5 110 m 106.49 106.97 l 108.51 106.97 l cl 0 0 0 F n 107.5 102.5 m 107.5 106.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 137.6] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -688 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unrecoverable) s -294 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error?) s savemat setmatrix n 107.5 132.5 m 97.5 132.5 l 92.5 137.5 l 97.5 142.5 l 117.5 142.5 l 122.5 137.5 l 117.5 132.5 l 107.5 132.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.782 53.367] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -402 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (entering) s -386 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s -444 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selected?) s savemat setmatrix n 107.5 50 m 100 50 l 95 56.25 l 100 62.5 l 115 62.5 l 120 56.25 l 115 50 l 107.5 50 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 174.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -318 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primal) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible?) s savemat setmatrix n 107.5 170 m 100 170 l 95 175 l 100 180 l 115 180 l 120 175 l 115 170 l 107.5 170 l cl gsave 0 0 0 0.176 0 B grestore n 107.5 190 m 98.75 190 l 93.75 195 l 98.75 200 l 116.25 200 l 121.25 195 l 116.25 190 l 107.5 190 l cl 1 1 1 F gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 194.156] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -562 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unbounded) s -480 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (expected?) s savemat setmatrix n 107.5 152.5 m 106.49 149.47 l 108.51 149.47 l cl 0 0 0 F n 107.5 142.5 m 107.5 149.47 l gsave 0 0 0 0.176 0 B grestore n 140 127.5 m 136.97 128.51 l 136.97 126.49 l cl 0 0 0 F n 122.5 127.5 m 136.97 127.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 142.5 148.882] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -240 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (error) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 85 206.646] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -562 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (unbounded) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 180 204.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -614 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (tighten pivot) s -1014 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selection parameters) s savemat setmatrix n 160 200 m 200 200 l 200 210 l 160 210 l cl gsave 0 0 0 0.176 0 B grestore n 85 202.5 m 83.991 199.47 l 86.009 199.47 l cl 0 0 0 F n 93.75 195 m 85 195 l 85 199.47 l gsave 0 0 0 0.176 0 B grestore n 107.5 67.5 m 110.53 66.491 l 110.53 68.509 l cl 0 0 0 F n 152.5 121.25 m 152.5 67.5 l 110.53 67.5 l gsave 0 0 0 0.176 0 B grestore n 142.5 145 m 141.49 141.97 l 143.51 141.97 l cl 0 0 0 F n 122.5 137.5 m 142.5 137.5 l 142.5 141.97 l gsave 0 0 0 0.176 0 B grestore n 107.5 147.5 m 104.47 148.51 l 104.47 146.49 l cl 0 0 0 F n 32.5 62.5 m 32.5 147.5 l 104.47 147.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 106.496 65.17] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 94.5556 55.4322] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -105 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 122.881 140.207] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 93.169 197.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 122.001 197.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 165.751 130.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 153.73 120.172] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 123.251 130.186] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 108.73 145.31] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n 77.5 180 m 76.491 176.97 l 78.509 176.97 l cl 0 0 0 F n 95 175 m 77.5 175 l 77.5 176.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 94.419 177.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 120.751 177.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 77.5 184.146] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -218 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dual) s -422 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasible?) s savemat setmatrix n 77.5 180 m 70 180 l 65 185 l 70 190 l 85 190 l 90 185 l 85 180 l 77.5 180 l cl gsave 0 0 0 0.176 0 B grestore n 55 190 m 53.991 186.97 l 56.009 186.97 l cl 0 0 0 F n 65 185 m 55 185 l 55 186.97 l gsave 0 0 0 0.176 0 B grestore n 107.5 190 m 106.49 186.97 l 108.51 186.97 l cl 0 0 0 F n 90 185 m 107.5 185 l 107.5 186.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 64.419 187.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 90.751 187.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 147.5 172.117] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -526 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (lost primal) s -468 231 m 463 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (feasibility) s savemat setmatrix n 135 175 m 131.97 176.01 l 131.97 173.99 l cl 0 0 0 F n 120 175 m 131.97 175 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 55 195] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -368 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (optimal) s savemat setmatrix n 107.5 35 m 110.53 33.991 l 110.53 36.009 l cl 0 0 0 F n 180 200 m 180 35 l 110.53 35 l gsave 0 0 0 0.176 0 B grestore n 180 127.5 m 176.97 128.51 l 176.97 126.49 l cl 0 0 0 F n 165 127.5 m 176.97 127.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 152.782 124.617] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -402 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (entering) s -386 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (variable) s -444 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (selected?) s savemat setmatrix n 152.5 121.25 m 145 121.25 l 140 127.5 l 145 133.75 l 160 133.75 l 165 127.5 l 160 121.25 l 152.5 121.25 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 107.5 126.466] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -428 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (continue) s -442 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivoting?) s savemat setmatrix n 107.5 122.5 m 97.5 122.5 l 92.5 127.5 l 97.5 132.5 l 117.5 132.5 l 122.5 127.5 l 117.5 122.5 l 107.5 122.5 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 61.25 51.9415] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -892 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (\(dy_dealWithPunt\)) s -778 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (attempt to relax) s -698 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pivot selection) s -554 431 m 647 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (parameters) s savemat setmatrix n 45 47.704 m 77.5 47.704 l 77.5 65.204 l 45 65.204 l cl gsave 0 0 0 0.176 0 B grestore n 32.5 50.204 m 25 50.204 l 20 56.454 l 25 62.704 l 40 62.704 l 45 56.454 l 40 50.204 l 32.5 50.204 l cl gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 32.742 52.9995] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -196 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (new) s -530 0 m 215 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (candidates) s -484 215 m 431 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (available?) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 33.57 65.6765] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 33.876 48.7455] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n 77.5 56.25 m 80.528 55.241 l 80.528 57.259 l cl 0 0 0 F n 95 56.25 m 80.528 56.25 l gsave 0 0 0 0.176 0 B grestore n 107.5 35 m 104.47 36.009 l 104.47 33.991 l cl 0 0 0 F n 32.5 50 m 32.5 35 l 104.47 35 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 137.5 206.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -288 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (punt?) s savemat setmatrix n 137.5 200 m 130 200 l 125 205 l 130 210 l 145 210 l 150 205 l 145 200 l 137.5 200 l cl gsave 0 0 0 0.176 0 B grestore n 160 205 m 156.97 206.01 l 156.97 203.99 l cl 0 0 0 F n 150 205 m 156.97 205 l gsave 0 0 0 0.176 0 B grestore n 115 210 m 113.99 206.97 l 116.01 206.97 l cl 0 0 0 F n 125 205 m 115 205 l 115 206.97 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 115 215] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -312 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (return) s -234 0 m 231 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (punt) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 124.419 207.67] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -86 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (y) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 150.751 207.686] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light01600160) gf 0.00 0.00 0.00 rgb (n) s savemat setmatrix grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore %%EndDocument @endspecial 0 9474 a currentpoint currentpoint translate 1 0.91586 div 1 0.91586 div scale neg exch neg exch translate 0 9474 a 2201 9839 a FP(Fig)n(ur)q(e)52 b(11:)65 b(Pr)s(i)s(mal)53 b(Phas)m(e)g(II)g(Algo)-7 b(r)s(ithm)52 b(Fl)n(ow)0 10238 y(fr)q(o)n(m)c(p)-6 b(has)m(e)48 b(I)g(ar)q(e)g(tha)-8 b(t)47 b(th)l(e)g(pr)q(o)-8 b(b)l(l)n(e)n(m)47 b(is)h(kn)m(ow)e(to)i(be)f(feas)n(ib)l(l)n(e)i(and)e(th)l(e)h(o)-7 b(r)s(ig)t(i)s(nal)47 b(o)-8 b(bj)l(ec)j(tive)47 b(func)-5 b(tio)l(n)46 b(is)i(u)-7 b(s)m(e)l(d)0 10437 y(i)s(ns)i(tea)f(d)53 b(of)g(an)f(arti\002c)m(i)s(al)h(o)-8 b(bj)l(ec)j(tive)52 b(func)-5 b(tio)l(n.)64 b(T)8 b(his)52 b(c)l(o)l(ns)n(id)-5 b(e)l(ra)l(b)l(ly)51 b(s)n(i)s(mpli\002e)o(s)j(th)l(e)e(\003)n(ow)g(of) h FJ(pr)s(im)m(al2)p FP(.)3771 11400 y(54)p eop end %%Page: 55 58 TeXDict begin 55 57 bop 249 466 a FP(T)8 b(h)l(e)46 b(i)s(nn)n(e)l(r)g (pivoti)s(n)n(g)e(l)n(oo)-5 b(p)46 b(has)g(o)l(nly)f(two)h(s)-5 b(te)e(ps:)63 b(th)l(e)46 b(pivot)g(its)m(e)l(lf)f(\()p FJ(dy_pr)s(im)m(alpiv)l(ot)p FP(\))g(and)h(th)l(e)g(mai)s(ntenanc)-6 b(e)0 665 y(and)62 b(e)l(rr)q(o)-7 b(r)62 b(r)q(ec)l(ove)l(ry)g(func)-5 b(tio)l(ns)61 b(\()p FJ(dy_duenna)p FP(\).)94 b(Wh)l(en)61 b FJ(dy_pr)s(im)m(alin)i FP(i)s(ndica)-8 b(te)o(s)62 b(o)-5 b(pti)s(mality)61 b(o)-7 b(r)62 b FJ(dy_pr)s(im)m(alpiv)l(ot)0 865 y FP(i)s(ndica)-8 b(te)o(s)63 b(o)-5 b(pti)s(mality)63 b(o)-7 b(r)63 b(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s)62 b(th)l(e)h(i)s(nn)n(e)l(r)g(l)n(oo)-5 b(p)63 b(ends)g(and)g FJ(pr)o(eoptim)m(ality)g FP(is)h(call)n(e)l(d)g(fo)-7 b(r)63 b(c)l(o)l(n\002r)11 b(-)0 1064 y(ma)-8 b(tio)l(n.)83 b FJ(pr)o(eoptim)m(ality)59 b FP(will)f(r)q(e)l(fa)n(c)-5 b(to)e(r)58 b(th)l(e)h(bas)n(is,)i(pe)l(r)5 b(fo)-7 b(r)5 b(m)59 b(a)n(ccura)n(cy)g(c)-7 b(h)l(ec)f(ks,)60 b(r)q(ec)l(o)n(mp)-5 b(u)l(te)59 b(th)l(e)f(pr)s(i)s(mal)i(and)0 1263 y(d)-7 b(ual)54 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)i(and)f(c)l(o)l(n\002r)5 b(m)54 b(pr)s(i)s(mal)h(and)f(d)-7 b(ual)54 b(feas)n(ibility)-17 b(.)72 b(If)55 b(th)l(e)l(r)q(e)g(ar)q(e)g(n)m(o)f(s)-8 b(urpr)s(is)m(e)o(s,)56 b(pr)s(i)s(mal)f(p)-6 b(has)m(e)54 b(II)0 1462 y(will)e(end)g(with)g(an)g(i)s(ndica)-8 b(tio)l(n)51 b(of)i(o)-5 b(pti)s(mality)52 b(o)-7 b(r)53 b(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s.)249 1761 y(L)5 b(os)-5 b(s)68 b(of)f(d)-7 b(ual)67 b(feas)n(ibility)g(\(i)s(ncl)n(udi)s(n)n(g)e(p)-5 b(unts\))66 b(is)i(handl)n(e)l(d)e(as)i(d)-5 b(e)o(sc)d(r)s(ibe)l(d)67 b(fo)-7 b(r)68 b(pr)s(i)s(mal)f(p)-6 b(has)m(e)67 b(I.)h(L)5 b(os)-5 b(s)68 b(of)0 1960 y(pr)s(i)s(mal)49 b(feas)n(ibility)f(ca)-8 b(u)h(s)m(e)o(s)50 b FJ(pr)s(im)m(al2)e FP(to)h(r)q(e)-7 b(t)l(ur)5 b(n)48 b(with)f(an)i(i)s(ndica)-8 b(tio)l(n)47 b(tha)-8 b(t)48 b(it)h(has)f(l)n(os)-5 b(t)49 b(pr)s(i)s(mal)g(feas)n (ibility)-17 b(,)50 b(and)0 2160 y FJ(dy_pr)s(im)m(al)j FP(will)f(arran)n(g)n(e)f(a)i(r)q(e)-7 b(t)l(ur)5 b(n)52 b(to)h(pr)s(i)s(mal)g(p)-6 b(has)m(e)52 b(I.)0 2752 y Fu(14.4)197 b(Pivotin)-7 b(g)4 3172 y FM(D)8 b(Y)g(L)g(P)66 b FP(of)n(fe)l(rs)60 b(two)g(\003a)-7 b(vo)i(urs)60 b(of)g(pr)s(i)s (mal)g(pivoti)s(n)n(g:)79 b(A)60 b(s)-5 b(t)s(andar)q(d)60 b(pr)s(i)s(mal)g(pivot)g(algo)-7 b(r)s(ithm)59 b(i)s(n)h(whic)-7 b(h)59 b(a)i(s)n(i)s(n)n(gl)n(e)0 3371 y(pr)s(i)s(mal)71 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(is)g(s)m(e)l(l)n(ec)-5 b(te)l(d)71 b(and)f(pivote)l(d)h(i)s(nto)f(th)l(e)g(bas)n(is,)76 b(and)70 b(an)h(e)-5 b(xtend)g(e)l(d)70 b(pr)s(i)s(mal)h(pivot)f(algo) -7 b(r)s(ithm)0 3570 y(whic)g(h)63 b(all)n(ows)g(s)n(o)n(mewha)-8 b(t)63 b(gr)q(ea)-8 b(te)l(r)64 b(\003)n(e)-5 b(x)10 b(ibility)62 b(i)s(n)i(th)l(e)g(c)-7 b(h)n(oic)h(e)64 b(of)g(l)n(ea)-7 b(vi)s(n)n(g)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e.)100 b(By)63 b(d)-5 b(e)l(fa)d(u)l(lt,)70 b FM(D)8 b(Y)g(L)g(P)70 b FP(will)0 3769 y(u)-7 b(s)m(e)53 b(th)l(e)f(e)-5 b(xtend)g(e)l(d)53 b(algo)-7 b(r)s(ithm.)249 4068 y(Fig)n(ur)q(e)57 b(12)f(s)-8 b(h)n(ows)56 b(th)l(e)h(call)g(s)-5 b(tru)g(c)g(t)l(ur)q(e)56 b(of)h(th)l(e)g(pr)s(i)s(mal)g(pivot)f(algo)-7 b(r)s(ithm.)77 b(T)8 b(h)l(e)57 b(r)q(o)-5 b(u)l(ti)s(n)n(e)56 b FJ(pr)s(im)m(alout)g FP(i)s(mpl)n(e-)0 4267 y(ments)d(s)-5 b(t)s(andar)q(d)52 b(pr)s(i)s(mal)h(pivoti)s(n)n(g;)e FJ(pr)s(imm)m(ultiout)h FP(i)s(mpl)n(e)n(ments)g(e)-5 b(xtend)g(e)l(d)52 b(pr)s(i)s(mal)h (pivoti)s(n)n(g.)175 7423 y @beginspecial 81 @llx 552 @lly 528 @urx 727 @ury 4470 @rwi @setspecial %%BeginDocument: /devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/primalpivcalls.eps %!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/primpivcalls.epsu %%Creator: IslandDraw for lou %%CreationDate: Sat Sep 10 14:28:31 2005 %%Pages: 1 %%BoundingBox: 81 552 528 727 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 559 219 1 438 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000060001c00000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000020002200000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000020002200000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000000003eee077be79b800000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000000000062440221084c400000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000006004264022101c8400000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000600422802210648400000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000c004628022108c8400000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000c003b10073b877ce00000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000001800001000000000000000000000300000206000200 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000018000071f8000000000000000000100000602000200 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000300000c000000000000000000000100000202b00000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000003000000000000000000000000001f7701e2e246e6ee % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000006000000000000000000000000003122031312873244 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000006000000000000000000000000c02132020213c21268 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000e000000000000000000000001c02114020212421228 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000c000000000000000000000003802314031212623230 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000000c000000000000000000000007001d8801e73f73e710 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000001800000000000000000000000e000008000000020000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000001800000000000000000000001c000038fc0000020000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000030000000000000000000000038000060000000070000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000030000000000000000000000070000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000600000000000000000000000e0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000600000000000000000000001c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000c0000000000000000000000380000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000c0000000000000000000000700000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000001c0000000100000600000000e00000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000180000000100000200004001c00000006200300010000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000180000000000000200004003800000002200100230000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000003000006efb3763c27884f007000000002000100210000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000003000007341199422cd8c400e00000373e67df1e7973be % e39f0000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000060040021411110e28484401ffffc039e2223133218917 % 37c80000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000060060021411113228484401ffffc010c2222121210992 % 14080000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000c00c0023411114628c8c401c0000010c22221212108a2 % 14080000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000c01c003ee3bbbbb77876700e0000011c62223232108a2 % 36480000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000001801800200000000000000007000001f3b771d9e3b9c43 % e39c0000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000001803000200000000000000003800001000000000000042 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000003807000700000000000000001c000010000000000001c2 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000003006000000000000000000000e00003800000000000307 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000300e000000000000000000000700000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000600c000000000000000000000380000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000060180000000000000000000001c0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000c0380000000000000000000000e0000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000c030000000000000000000000070000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000018060000000000000000000000038000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000180e000000000000000000000001c00000c000400000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000300c000000000000000000000000e000004008c00000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000301c0000000000000000000000007000004008400000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000070180000000000000000000000003801e7c79e5cefb9c7c % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000060300000000000000000000000001c031c4cc86245cfe20 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000060700000000000000000000000000c02084848426486020 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000c0600000000000000000000000000002084848422886020 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000c0c0000000000000000000000000000318c8c842288f220 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000181c00000000000000000000000000001e7678ee710f9c70 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000181800000000000000000000000000000000000001080000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000303800000000000000000000000000000000000007080000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000030300000000000000000000000000000000000000c1c0000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000606000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000060e000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000e0c000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000c18000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000c38000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000001830000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000001870000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000003060000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000030c0000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000061c0000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000006180000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000c300000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000c700000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000001c600000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000018e000000000001000000003010000000000000000000007e0 % 003e010000f00000e800006000000000000000000000007c000003e2000001 % 000000000000000000000000000018c00000000000100000000121000020000000000000000230 % 00110100010800411800002000000000000000000004008400000112000101 % 000000000000000000000000000031800000000000000000000120000020000000000000000208 % 00110000020800420800002000000000000000000004008200000110000101 % 0000000000000000000000000000338000000006efb3766ec2117b1e21780000000035e3cdc247 % 9f11fb37620484f205e6e3e1a000000006e7de6ec3cf38e0f1b8e11677f3c0 % 000000000000000000000000000063000000000734119933263121336320000000004b142623cc % c81e411992058c4202131622400000000732333326647c3d08c5f1e2239901 % 000000000000000000000000000066000000e0021411112222112121212007ffff007600e42248 % 481041111204844200721423a03ffff8021221222424400238850102350901 % 0000000000000000000000000000ce000003c0021411112222112121212007ffff000e03242208 % 48104111120c844205921420600000000212212224244082c8850102150901 % 0000000000000000000000000000cc000007800234111122223121232320000000004714642708 % c818411111088c410a3214622000000002322322246464c518859182191900 % 00000000000000000000000000019c00001e0003ee3bbbf771dbbb9e1db80000000079e3be7707 % 9c38e3bbb8f07670f1df3bb3c000000003e71e7773c738f8edcee38708f1c1 % 000000000000000000000000000198000078000200000000000000000000000000000000000000 % 00000000000000000000000000000000020000000000000000000000000001 % 0000000000000000000000000003b00000f0000200000000000000000000000000000000000000 % 00000000000000000000000000000000020000000000000000000000000001 % 0000000000000000000000000003700003c0000700000000000000000000000000000000000000 % 00000000000000000000000000000000070000000000000000000000000001 % 000000000000000000000000000360000f00000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000006c0001e00000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000007c0007800000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000d8001e000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000f8003c000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000001b000f0000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000001e003c0000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000003e00780000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000003c01e00000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000007807800000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000780f000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000703c000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000f0f0000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000e1e0000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000001c780000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 03000000040000180100000001de00000000000060000600000002000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 01000000040000080100004003bc00000000000020000200000002000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 01000000000000080000004003f000000000000020000200060000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 1f3b81b9fcdd8789bb3bbcf007c0000000000003eee03e3839c6e66e0000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 311101cc84664849cd11664007ffffffffffe0062440627c47e312310000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 21190084844441c8851a424007ffffffffffe00426404240460212210000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 210a008484444648850a424007f0000000000004228042403a0212210000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 230a008c844448c88d0c464003fe00000000000462804664432212210000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 1d8400f9ceeee77cfb843c7003ff800000000003b1003b387dc73f738000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00040080000000008000000001fbf0000000000001000000460000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 001c7e80000000008000000001fc7c0000000000071f8000c60000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 003001c000000001c000000001fe1f80000000000c000000780000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000ff83e00000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000fdc0fc0000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000007ee01f0000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000007f7007e000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000007fbc00f800000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000003f8e003f00000060000600000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000003ec70007c0000020000200000000000200000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000001fe38001f8000020000200060000000200000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000001ff1e0003e0003eee03e3839c6e3c42780000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000fb870000fc0062440627c47e3166c6200000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000fdc380001e00426404240460214242200000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000fcc1c00004004228042403a0214242200000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000007e60f0000000462804664432214646200000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000007f70380000003b1003b387dc73bc3b380000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000003f381c000000001000000460000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000003d9c0e0000000071f8000c60000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000003fce0780000000c000000780000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000001ec601c00000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000001fe300e00000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000f6380700000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000fb1c03c0000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000007b8e00e0000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000007d870070000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000006cc300380000600000060c0000040000100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000003ee1801e000020000002044000040000100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000003661c007000020000002044000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000001f70e0038003eee03c3e7cf3cdcddfee300000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000001b307001c00624404262c4466e64891f100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000001f983800e00426400e4284442424d110100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000d9c1800000422803242844424245110100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000dcc0c000004628046468c4464646119100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000006c60e000003b1003b3b7673c7ce238e100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000006e70700000001000000000004000000100000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000036303800000071f8000000004000000500000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000037381c000000c00000000000e000000e00000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000033180c0000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000001b8c060000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000198e070000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000dc6038000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000cc301c000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000ee380e000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000661806000060006000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000671c03000020002020000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000330c03800020002020000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000338601c003eee02e7bef1b80000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000198700e00624403321108c40000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000019c300600426402121038840000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000018c1800004228021210c8840000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000ce1c0000462802321118840000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000c60c00003b1003e3b8edce0000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000670e0000001000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000630600000071f8000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000007383000000c000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000031838000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000031c18000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000018c0c000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000018e0e000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000c606000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000c707000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000c303000060000020000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000006381800020000020001000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000006181c00020000000001000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000031c0c003eee06e677f3c00000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000030c0600624407322399000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000038e0400426402123509000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000001860000422802121509000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000001870000462802321919000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000c300003b1003e708f1c00000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000c38000001002000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000006180000071fa000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000061c00000c007000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000060c000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000030e000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000306000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000187000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000183000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000001c3800000100000600000600000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000c1800000100000200000200400000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000c1c00000000000200000200400000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000060c006efb3763c2426e3e78f70000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000060e007341199422c67362844f8000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000003060021411110e24221421c480000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000030000214111132242214264480000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000003000023411114624623468c4c8000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 0000000000000000000000000000000000180003ee3bbbbb73b3e3b76770000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000018000200000000000200000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000000c000200000000000200000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000000c000700000000000700000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 00000000000000000000000000000000000e000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000006000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000006000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000003000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000003000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000001800000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000001800000000000030000000000000000080000180000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000001800000000000010020000000000000080000080000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000c000000000000100200000000000000000000ac000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000c006e34e21371f3c7b800000000373f8f1cee90000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000006007349f6339b14227c00000000399098be2ca0000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000600217502110a10e24001ffffc01090902010f0000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000210d02110a13224000000000109090203890000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000234592311a34626400000000119098b24c98000 % 00000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000003e78e1d9f1dbb3b8000000001f39cf1cefdc000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000200000010000000000000000100000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000200000010000000000000000100000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000700000038000000000000000380000000000000 % 00000000000000000000000000000000000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 55 53.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1444 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_primalpivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 78.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primalupdate) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 26.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_ftran) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 68.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_btran) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 58.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_degenout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 53.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_degenin) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 73.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_pivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 63.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_addtopivrej) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 46.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primmultiout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 105.617 46.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (scanForPrimOutCands) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 154.489 46.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (promoteSanePivot) s savemat setmatrix n 98.117 45.141 m 103.12 45.141 l gsave 0 0 0 0.176 0 B grestore n 146.99 45 m 151.99 45 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 100.617 83.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pricexk) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.1174 83.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pseupdate) s savemat setmatrix n 93.117 82.5 m 98.117 82.5 l gsave 0 0 0 0.176 0 B grestore n savemat currentmatrix pop [1 0 0 1 73.1174 33.5601] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (primalout) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 99.3474 38.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (cdothyper) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 99.3474 33.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (pdirdothyper) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 99.3474 28.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_chkpiv) s savemat setmatrix n 96.847 27.5 m 91.847 32.5 l gsave 0 0 0 0.176 0 B grestore n 91.847 32.5 m 96.847 32.5 l gsave 0 0 0 0.176 0 B grestore n 91.847 32.5 m 96.847 37.5 l gsave 0 0 0 0.176 0 B grestore n 70 25 m 57.5 52.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 82.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 77.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 72.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 67.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 62.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 57.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 52.5 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 45 l gsave 0 0 0 0.176 0 B grestore n 57.5 52.5 m 70 32.5 l gsave 0 0 0 0.176 0 B grestore grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore %%EndDocument @endspecial 2242 7788 a(Fig)n(ur)q(e)f(12:)65 b(Call)53 b(Gra)-6 b(p)g(h)52 b(fo)-7 b(r)53 b(Pr)s(i)s(mal)g(Pivoti)s(n)n(g)249 8187 y(T)8 b(h)l(e)80 b(\002rs)-5 b(t)80 b(a)n(c)-5 b(tivity)79 b(i)s(n)h FJ(dy_pr)s(im)m(alpiv)l(ot)f FP(is)i(th)l(e)e(calcu)l(la)-8 b(tio)l(n)79 b(of)h(th)l(e)g(c)l(oe)l(\002)-49 b(\002c)m(ients)79 b(of)h(th)l(e)g(pivot)g(c)l(o)-5 b(l)n(umn,)p 0 8286 117 7 v 2 8386 a FG(a)129 8411 y Fz(j)221 8386 y FP(=)54 b FG(B)515 8326 y FA(\0141)668 8386 y FG(a)786 8411 y Fz(j)830 8386 y FP(,)66 b(by)c(th)l(e)h(r)q(o)-5 b(u)l(ti)s(n)n(e)62 b FJ(dy_ftr)m(an)p FP(.)97 b(W)m(ith)62 b(th)l(e)h(ente)l(r)s(i)s(n)n (g)e(pr)s(i)s(mal)j(v)r(ar)s(i)s(a)l(b)l(l)n(e)f(and)g(th)l(e)f (ftran'd)g(c)l(o)-5 b(l)n(umn)62 b(i)s(n)0 8585 y(hand,)52 b(o)l(n)n(e)g(of)h FJ(pr)s(im)m(alout)f FP(o)-7 b(r)53 b FJ(pr)s(imm)m(ultiout)f FP(ar)q(e)h(call)n(e)l(d)g(to)g(s)m(e)l(l)n (ec)-5 b(t)53 b(th)l(e)g(l)n(ea)-7 b(vi)s(n)n(g)51 b(v)r(ar)s(i)s(a)l (b)l(l)n(e.)249 8884 y(If)g(th)l(e)f(ente)l(r)s(i)s(n)n(g)e(and)i(l)n (ea)-7 b(vi)s(n)n(g)49 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(ar)q(e)g(th)l (e)f(same)h(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)50 b(a)g(n)m(o)l(n)m (bas)n(ic)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(is)f(movi)s(n)n(g)f(fr)q(o)n (m)h(o)l(n)n(e)0 9084 y(bo)-5 b(und)57 b(to)h(th)l(e)g(oth)l(e)l(r\),)h (all)f(tha)-8 b(t)58 b(is)g(r)q(eq)l(uir)q(e)l(d)g(is)g(to)g(call)h FJ(pr)s(im)m(alupdate)f FP(to)g(u)-6 b(pda)e(te)58 b(th)l(e)g(v)r(al)n (u)l(e)o(s)h(of)f(th)l(e)g(pr)s(i)s(mal)0 9283 y(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s.)66 b(T)8 b(h)l(e)53 b(bas)n(is,)g(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)i(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)52 b(c)l(os)-5 b(ts,)53 b(and)f(PSE)g(pr)s(ic)m(i)s(n)n(g)f(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)51 b(ar)q(e)i(unc)-7 b(han)n(g)n(e)l(d.)249 9582 y(If)55 b(th)l(e)f(ente)l(r)s(i)s(n)n(g)g(and)g(l)n(ea)-7 b(vi)s(n)n(g)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)j(ar)q(e)f(dis)-5 b(ti)s(nc)g(t,)55 b(th)l(e)f(pivot)g(is)h(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)55 b(i)s(n)f(s)m(eve)l(ral)h(s)-5 b(te)e(ps.)72 b(Pr)s(io)-7 b(r)0 9781 y(to)47 b(th)l(e)g(pivot,)h(th)l(e)g FG(i)1365 9721 y FA(th)1541 9781 y FP(r)q(ow)f(of)g(th)l(e)g(bas)n(is)h (i)s(nve)l(rs)m(e,)i FH(1)3622 9806 y Fz(i)3672 9781 y FP(,)f(and)e(th)l(e)g(vec)-5 b(to)e(r)4989 9780 y(\230)4957 9781 y FG(a)5073 9717 y Fx(>)5075 9821 y Fz(j)5182 9781 y FG(B)5322 9721 y FA(\0141)5520 9781 y FP(ar)q(e)48 b(calcu)l(la)-8 b(te)l(d)47 b(fo)-7 b(r)48 b(u)-7 b(s)m(e)47 b(d)-7 b(ur)s(i)s(n)n(g)0 9980 y(th)l(e)49 b(u)-6 b(pda)e(te)50 b(of)f(th)l(e)h(PSE)e(pr)s(ic)m(i)s(n)n(g)h(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n.)62 b(T)8 b(h)l(e)50 b(bas)n(is)g(is)g(pivote)l (d)f(n)n(e)-5 b(xt;)51 b(this)e(i)s(nvo)-5 b(lve)o(s)50 b(calls)g(to)g FJ(dy_ftr)m(an)0 10180 y FP(and)73 b FJ(dy_piv)l(ot)p FP(,)78 b(as)c(o)-5 b(u)l(tli)s(n)n(e)l(d)72 b(i)s(n)h(\2477)-29 b(.3.)128 b(If)74 b(th)l(e)f(bas)n(is)h(c)-7 b(han)n(g)n(e)72 b(s)-8 b(u)j(cc)f(ee)l(ds,)79 b(th)l(e)73 b(pr)s(i)s(mal)h(and)f(d)-7 b(ual)72 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)0 10379 y(ar)q(e)63 b(u)-6 b(pda)e(te)l(d)62 b(by)h FJ(pr)s(im)m(alupdate)g FP(u)-7 b(s)n(i)s(n)n(g)62 b(th)l(e)g(ite)l(ra)-8 b(tive)63 b(u)-6 b(pda)e(te)62 b(fo)-7 b(r)5 b(m)l(u)l(l\346)62 b(of)h(\2473,)j(and)c(th)l(en)g(th)l(e)g(PSE)g(pr)s(ic)m(i)s(n)n(g)3771 11400 y(55)p eop end %%Page: 56 59 TeXDict begin 56 58 bop 0 466 a FP(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)52 b(and)g(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)53 b(c)l(os)-5 b(ts)54 b(ar)q(e)f(u)-6 b(pda)e(te)l(d)53 b(by)g FJ(pseupdate)p FP(,)g(u)-7 b(s)n(i)s(n)n(g)53 b(th)l(e)g(u)-6 b(pda)e(te)53 b(fo)-7 b(r)5 b(m)l(u)l(l\346)52 b(of)h(\2474.1.)67 b(A)8 b(s)54 b(a)0 665 y(s)n(id)-5 b(e)53 b(e)l(f)n(fec)-5 b(t,)54 b FJ(pseupdate)f FP(will)f(s)m(e)l(l)n (ec)-5 b(t)53 b(an)f(ente)l(r)s(i)s(n)n(g)g(v)r(ar)s(i)s(a)l(b)l(l)n(e) h(fo)-7 b(r)53 b(th)l(e)f(n)n(e)-5 b(xt)53 b(pivot.)0 1258 y Fu(14.5)197 b(Se)-5 b(lec)-10 b(tio)-5 b(n)63 b(of)j(th)-9 b(e)67 b(Ente)-5 b(r)r(in)e(g)66 b(V)-15 b(ar)r(iab)-5 b(le)0 1677 y FP(Se)l(l)n(ec)g(tio)l(n)73 b(of)i(th)l(e)e(ente)l(r)s(i)s(n)n(g)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)80 b FG(x)2905 1702 y Fz(j)3023 1677 y FP(fo)-7 b(r)75 b(a)g(pr)s(i)s(mal) f(pivot)g(is)h(ma)-6 b(d)h(e)74 b(u)-7 b(s)n(i)s(n)n(g)74 b(th)l(e)g(pr)s(i)s(mal)g(s)-5 b(tee)e(pe)o(s)i(t)76 b(e)l(dg)n(e)0 1876 y(c)-8 b(r)s(ite)l(r)s(io)l(n)46 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)47 b(i)s(n)f(\2474.1.)63 b(A)8 b(s)48 b(o)-5 b(u)l(tli)s(n)n(e)l(d)45 b(a)l(bove,)j(th)l(e)f(n)m (o)-7 b(r)5 b(mal)46 b(cas)m(e)h(is)g(tha)-8 b(t)46 b(th)l(e)g(ente)l (r)s(i)s(n)n(g)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)j(fo)-7 b(r)47 b(th)l(e)0 2076 y(fo)-5 b(ll)n(owi)s(n)n(g)57 b(pivot)h(will)g(be)h(s)m (e)l(l)n(ec)-5 b(te)l(d)60 b(as)f FJ(pseupdate)g FP(u)-6 b(pda)e(te)o(s)59 b(th)l(e)g(PSE)e(pr)s(ic)m(i)s(n)n(g)h(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)57 b(fo)-7 b(r)59 b(th)l(e)g(curr)q(ent)0 2275 y(pivot.)91 b(In)61 b(v)r(ar)s(io)-5 b(u)e(s)61 b(e)-5 b(xc)f(e)f(ptio)l(nal)61 b(c)m(ir)q(cums)-5 b(t)s(anc)f(e)o(s)62 b(wh)l(e)l(r)q(e)e(this)h(doe)o(s)g(n)m(ot)g(occur)-9 b(,)63 b(th)l(e)d(r)q(o)-5 b(u)l(ti)s(n)n(e)61 b FJ(dy_pr)s(im)m(alin)h FP(is)0 2474 y(call)n(e)l(d)53 b(to)g(make)g(th)l(e)f(s)m(e)l(l)n(ec)-5 b(tio)l(n.)0 3067 y Fu(14.6)197 b(Stan)-6 b(dar)n(d)63 b(Pr)r(im)n(al)i(Pivot)0 3486 y FP(Se)l(l)n(ec)-5 b(tio)l(n)77 b(of)h(th)l(e)f(l)n(ea)-7 b(vi)s(n)n(g)77 b(v)r(ar)s(i)s(a)l(b)l(l)n(e) 83 b FG(x)2802 3511 y Fz(i)2930 3486 y FP(is)78 b(ma)-6 b(d)h(e)78 b(u)-7 b(s)n(i)s(n)n(g)77 b(s)-5 b(t)s(andar)q(d)78 b(pr)s(i)s(mal)g(pivoti)s(n)n(g)e(ru)l(l)n(e)o(s)i(and)g(a)g(s)m(e)-7 b(t)78 b(of)0 3685 y(tie-b)-5 b(r)q(eaki)s(n)n(g)52 b(s)-5 b(tra)d(te)j(g)t(ie)o(s.)249 3984 y(Abs)g(tra)n(c)g(tly)-17 b(,)80 b(we)75 b(n)n(ee)l(d)g(to)g(c)-7 b(h)l(ec)f(k)81 b FG(x)2778 4009 y Fz(k)2913 3984 y FP(=)p 3064 3843 107 7 v 53 w FG(b)3172 4009 y Fz(k)3296 3984 y FP(\014)p 3435 3884 117 7 v 41 w FG(a)3552 4009 y Fz(k)21 b(j)3688 3984 y FI(D)3808 4009 y Fz(k)g(j)4020 3984 y FP(to)75 b(\002)s(nd)g(th)l(e)g(max)10 b(i)s(m)l(um)74 b(all)n(owa)l(b)l(l)n(e)h FI(D)6815 4009 y Fz(k)21 b(j)7027 3984 y FP(s)-8 b(u)j(c)e(h)75 b(tha)-8 b(t)2 4184 y FG(l)51 4209 y Fz(k)178 4184 y FF(\243)47 b FG(x)409 4209 y Fz(k)535 4184 y FF(\243)c FG(u)775 4209 y Fz(k)893 4184 y FF(")r FG(k)52 b FF(\316)17 b FG(B)58 b FP(and)f FG(x)1936 4209 y Fz(i)2028 4184 y FP(=)43 b FG(l)2219 4209 y Fz(i)2323 4184 y FP(o)-7 b(r)58 b FG(x)2632 4209 y Fz(i)2723 4184 y FP(=)43 b FG(u)2971 4209 y Fz(i)3074 4184 y FP(fo)-7 b(r)53 b(s)n(o)n(me)h FG(i)15 b FP(.)65 b(T)8 b(h)l(e)53 b(i)s(nd)-5 b(e)g(x)53 b FG(i)67 b FP(of)53 b(th)l(e)f(l)n(ea)-7 b(vi)s(n)n(g)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(will)f(be)3273 4697 y FG(i)k FP(=)41 b(arg)22 b(m)s(i)s(n)3920 4809 y Fz(k)4142 4406 y FC(\014)4142 4506 y(\014)4142 4605 y(\014)4142 4705 y(\014)4142 4804 y(\014)p 4242 4443 107 7 v 4244 4584 a FG(b)4349 4609 y Fz(k)p 4217 4658 243 7 v 4219 4810 a FG(a)4325 4835 y Fz(k)f(j)4479 4406 y FC(\014)4479 4506 y(\014)4479 4605 y(\014)4479 4705 y(\014)4479 4804 y(\014)0 5243 y FP(fo)-7 b(r)53 b(s)-8 b(uit)s(a)l(b)l(l)n(e)58 b FG(x)1048 5268 y Fz(k)1174 5243 y FF(\316)17 b FG(B)t FP(.)249 5542 y(T)8 b(h)l(e)48 b(pr)s(i)s(mal)g(pivoti)s(n)n(g)f(ru)l (l)n(e)o(s)h(ar)q(e)h(th)l(e)f(s)-5 b(t)s(andar)q(d)48 b(s)m(e)-7 b(t)49 b(fo)-7 b(r)48 b(r)q(evis)m(e)l(d)g(s)n(i)s(mpl)n(e) -5 b(x)49 b(with)e(bo)-5 b(und)g(e)l(d)47 b(v)r(ar)s(i)s(a)l(b)l(l)n(e) o(s,)j(and)0 5742 y(ar)q(e)60 b(s)-8 b(ummar)s(is)m(e)l(d)60 b(i)s(n)g(T)s(a)l(b)l(l)n(e)f(2.)87 b(Dur)s(i)s(n)n(g)59 b(p)-6 b(has)m(e)59 b(I,)i(wh)l(en)d(a)j(v)r(ar)s(i)s(a)l(b)l(l)n(e)f (is)g(i)s(nfeas)n(ib)l(l)n(e)h(be)l(l)n(ow)e(its)h(l)n(owe)l(r)f(bo)-5 b(und)2602 6329 y(l)n(ea)e(vi)s(n)n(g)57 b FG(x)3311 6354 y Fz(i)3510 6329 y FP(ente)l(r)s(i)s(n)n(g)f FG(x)4339 6354 y Fz(j)4533 6329 y FP(pivot)p 4980 6229 117 7 v 54 w FG(a)5097 6354 y Fz(i)23 b(j)2771 6827 y FE(\045)42 b FG(ub)576 b(lb)45 b FE(\045)615 b FP(<)42 b(0)3737 7326 y FG(ub)i FE(&)587 b FP(>)42 b(0)2799 7824 y FE(&)g FG(lb)605 b(lb)45 b FE(\045)615 b FP(>)42 b(0)3737 8322 y FG(ub)i FE(&)587 b FP(<)42 b(0)1812 8939 y(T)s(a)l(b)l(l)n(e)52 b(2:)65 b(Summary)52 b(of)g(Pr)s(i)s(mal)h(Si)s(mpl)n(e)-5 b(x)53 b(Pivoti)s(n)n(g)e(Ru)l(l)n(e)o(s)0 9337 y(and)h(m)l(u)-7 b(s)i(t)54 b(i)s(nc)-8 b(r)q(eas)m(e)52 b(to)h(bec)l(o)n(me)g(feas)n (ib)l(l)n(e,)58 b FM(D)8 b(Y)g(L)g(P)59 b FP(s)m(e)-7 b(ts)53 b(th)l(e)g(li)s(m)s(iti)s(n)n(g)e FI(D)5031 9362 y Fz(j)5130 9337 y FP(bas)m(e)l(d)i(o)l(n)f(th)l(e)g(u)-6 b(p)e(pe)l(r)53 b(bo)-5 b(und,)51 b(if)i(it)g(is)0 9537 y(\002)s(nite,)48 b(and)e(u)-7 b(s)m(e)o(s)48 b(th)l(e)f(l)n(owe)l(r)f (bo)-5 b(und)46 b(o)l(nly)g(wh)l(en)f(th)l(e)i(u)-6 b(p)e(pe)l(r)46 b(bo)-5 b(und)46 b(is)i(i)s(n\002)s(nite.)62 b(Si)s(m)s(ilarly)-17 b(,)48 b(wh)l(en)d(a)j(v)r(ar)s(i)s(a)l(b)l(l)n(e)0 9736 y(m)l(u)-7 b(s)i(t)46 b(d)-5 b(ec)d(r)q(eas)m(e)46 b(to)g(its)g(u)-6 b(p)e(pe)l(r)46 b(bo)-5 b(und,)46 b(th)l(e)f(l)n(owe)l(r)h(bo)-5 b(und)45 b(is)h(u)-7 b(s)m(e)l(d)46 b(to)g(calcu)l(la)-8 b(te)45 b(th)l(e)h(li)s(m)s(iti)s(n)n(g)f FI(D)6751 9761 y Fz(j)6843 9736 y FP(if)g(it)h(is)h(\002)s(nite.)253 10035 y FM(D)8 b(Y)g(L)g(P)76 b FP(pr)q(ovid)-5 b(e)o(s)70 b(a)g(s)m(e)l(l)n(ec)-5 b(tio)l(n)70 b(of)g(tie-b)-5 b(r)q(eaki)s(n)n(g)69 b(s)-5 b(tra)d(te)j(g)t(ie)o(s)70 b(wh)l(en)f(th)l(e)l(r)q(e)g(ar)q(e)i(m)l(u)l(ltipl)n(e)e(candida)-8 b(te)o(s)69 b(with)0 10234 y(eq)l(ual)515 10227 y FF(|)548 10234 y FI(D)668 10259 y Fz(k)21 b(j)805 10227 y FF(|)899 10234 y FP(=)52 b FI(D)1170 10259 y FA(m)r(i)r(n)1404 10234 y FP(.)141 b(T)8 b(h)l(e)78 b(s)n(i)s(mpl)n(e)o(s)-5 b(t)79 b(is)g(to)f(s)m(e)l(l)n(ec)-5 b(t)78 b(th)l(e)g(\002rs)-5 b(t)78 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)84 b FG(x)5247 10259 y Fz(k)5409 10234 y FP(s)-8 b(u)j(c)e(h)78 b(tha)-8 b(t)78 b FI(D)6384 10259 y Fz(k)21 b(j)6573 10234 y FP(=)52 b(0.)141 b(A)78 b(slightly)0 10433 y(mo)-7 b(r)q(e)83 b(s)n(o)-5 b(p)f(his)h(tica)d(te)l(d)80 b(s)-5 b(tra)d(te)j(g)8 b(y)82 b(is)g(to)h(scan)f(all)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(e)l (lig)t(ib)l(l)n(e)f(to)g(l)n(ea)-7 b(ve)83 b(and)e(pic)-8 b(k)87 b FG(x)6590 10458 y Fz(i)6722 10433 y FP(s)-8 b(u)j(c)e(h)82 b(tha)-8 b(t)83 b FG(i)68 b FP(=)3771 11400 y(56)p eop end %%Page: 57 60 TeXDict begin 57 59 bop 0 466 a FP(arg)22 b(max)627 491 y Fz(k)8 b Fy(\316)-21 b Fz(K)895 459 y FF(|)p 928 365 117 7 v 930 466 a FG(a)1045 491 y Fz(k)21 b(j)1181 459 y FF(|)1222 466 y FP(,)79 b FG(K)66 b FP(=)49 b({)15 b FG(k)1910 459 y FF(|)49 b(|)2025 466 y FI(D)2145 491 y Fz(k)21 b(j)2282 459 y FF(|)2372 466 y FP(=)49 b FI(D)2640 491 y FA(m)r(i)r(n)2887 466 y FP(};)83 b FM(D)8 b(Y)g(L)g(P)76 b FP(will)69 b(u)-7 b(s)m(e)70 b(this)g(s)-5 b(tra)d(te)j(g)8 b(y)69 b(by)h(d)-5 b(e)l(fa)d(u)l(lt.)120 b FM(D)8 b(Y)g(L)g(P)75 b FP(als)n(o)70 b(pr)q(ovid)-5 b(e)o(s)0 665 y(fo)g(ur)66 b(a)-6 b(dditio)l(nal)65 b(s)-5 b(tra)d(te)j(g)t(ie)o(s)66 b(bas)m(e)l(d)g(o)l(n)g(hype)l(rplan)n(e)f(alignment,)j(as)f(d)-5 b(e)o(sc)d(r)s(ibe)l(d)66 b(i)s(n)g(\2476.)106 b(An)66 b(o)-5 b(ptio)l(n)65 b(all)n(ows)0 865 y(th)l(e)52 b(tie-b)-5 b(r)q(eaki)s(n)n(g)52 b(s)-5 b(tra)d(te)j(g)8 b(y)52 b(to)h(be)g(s)m(e)l(l)n(ec)-5 b(te)l(d)53 b(by)f(th)l(e)h(client.)249 1163 y(In)75 b(cas)m(e)h(of)e(d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)-17 b(,)80 b(th)l(e)74 b(pe)l(rt)l(urbe)l(d)g(s)-8 b(u)h(bpr)q(o)f(b)l(l)n (e)n(m)73 b(anti-d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)73 b(algo)-7 b(r)s(ithm)74 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)75 b(i)s(n)g(\2475)0 1363 y(is)68 b(als)n(o)g(a)-7 b(v)r(aila)l(b)l(l)n(e.)111 b(T)8 b(h)l(e)67 b(client)h(can)g(c)l(o)l(ntr)q(o)-5 b(l)67 b(th)l(e)h(u)-7 b(s)m(e)68 b(of)g(pe)l(rt)l(urbe)l(d)f(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(ms)66 b(thr)q(o)-5 b(u)l(gh)66 b(two)h(o)-5 b(ptio)l(ns)0 1562 y(whic)e(h)40 b(s)-8 b(pec)m(ify)41 b(wh)l(e)-7 b(th)l(e)l(r)40 b(a)i(pe)l(rt)l(urbe)l(d)f (s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(m)39 b(can)j(be)g(u)-7 b(s)m(e)l(d,)44 b(and)d(h)n(ow)g(many)f(c)l(o)l(ns)m(ecu)l(tive)h(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)0 1761 y(pivots)66 b(m)l(u)-7 b(s)i(t)65 b(occur)h(be)l(fo)-7 b(r)q(e)66 b(th)l(e)f(pe)l(rt)l(urbe)l (d)g(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(m)64 b(is)h(c)-8 b(r)q(ea)g(te)l(d.)104 b(By)65 b(d)-5 b(e)l(fa)d(u)l(lt,)72 b FM(D)8 b(Y)g(L)g(P)72 b FP(u)-7 b(s)m(e)o(s)66 b(pe)l(rt)l(urbe)l(d)0 1960 y(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(ms)45 b(aggr)q(e)o(s)-5 b(s)n(ive)l(ly)47 b(and)g(will)f(i)s(ntr)q(od)-7 b(u)i(c)f(e)46 b(o)l(n)n(e)h(wh)l(en)f(fa)n(c)-6 b(e)l(d)47 b(with)f(a)h(s)m(ec)l(o)l (nd)g(c)l(o)l(ns)m(ecu)l(tive)f(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)0 2160 y(pivot.)0 2752 y Fu(14.7)197 b(Exten)-6 b(d)g(e)h(d)64 b(Pr)r(im)n(al)h(Pivot)0 3172 y FP(All)d(d)-7 b(ual)61 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(ha)-7 b(ve)62 b(a)h(s)n(i)s(n)n(gl)n (e)e(\002)s(nite)h(bo)-5 b(und)61 b(of)h(ze)l(r)q(o,)i(s)n(o)e(it')-5 b(s)62 b(n)m(ot)f(pos)-5 b(s)n(ib)l(l)n(e)63 b(to)f(d)-5 b(eve)l(l)n(o)g(p)62 b(a)h(g)n(en)n(e)l(ralis)m(e)l(d)0 3371 y(pr)s(i)s(mal)c(pivoti)s(n)n(g)d(algo)-7 b(r)s(ithm)58 b(anal)n(ogo)-5 b(u)e(s)57 b(to)i(th)l(e)f(d)-7 b(ual)57 b(pivoti)s(n)n(g)g(algo)-7 b(r)s(ithm)57 b(of)i(\24713.6.)81 b(It)59 b(is,)h(h)n(oweve)l(r)-9 b(,)59 b(pos-)0 3570 y(s)n(ib)l(l)n(e)65 b(to)f(i)s(ntr)q(od)-7 b(u)i(c)f(e)64 b(s)n(o)n(me)h(\003)n(e)-5 b(x)10 b(ibility)63 b(i)s(n)h(th)l(e)g(s)m (e)l(l)n(ec)-5 b(tio)l(n)64 b(of)g(th)l(e)g(l)n(ea)-7 b(vi)s(n)n(g)64 b(v)r(ar)s(i)s(a)l(b)l(l)n(e.)101 b(W)-11 b(e)65 b(can)f(als)n(o)g(a)-6 b(p)e(ply)64 b(th)l(e)0 3769 y(same)c(s)-5 b(tra)d(te)j(g)8 b(y)60 b(u)-7 b(s)m(e)l(d)60 b(i)s(n)f(g)n(en)n(e)l(ralis)m(e)l(d)g(d)-7 b(ual)59 b(pivoti)s(n)n(g)f(to)i(pr)q(o)n(mote)g(a)g(n)n(ume)l(r)s(ically)f(s)-5 b(t)s(a)l(b)l(l)n(e)60 b(pivot)g(candida)-8 b(te)0 3969 y(ove)l(r)53 b(an)f(uns)-5 b(t)s(a)l(b)l(l)n(e)53 b(candida)-8 b(te.)249 4267 y(In)62 b(p)-6 b(has)m(e)62 b(I,)g(fo)-7 b(r)63 b(an)f(i)s(nfeas)n(ib)l(l)n(e)g(bas)n(ic)h(v)r(ar)s(i)s(a)l(b)l (l)n(e)f(with)f(\002)s(nite)h(u)-6 b(p)e(pe)l(r)61 b(and)h(l)n(owe)l(r) f(bo)-5 b(unds,)64 b(th)l(e)l(r)q(e)d(ar)q(e)i(two)0 4467 y(poi)s(nts)55 b(wh)l(e)l(r)q(e)f(th)l(e)g(v)r(ar)s(i)s(a)l(b)l(l) n(e)i(can)f(be)g(pivote)l(d)g(o)-5 b(u)l(t)54 b(of)h(th)l(e)g(bas)n (is:)71 b(Wh)l(en)54 b(th)l(e)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(move)o(s)h (fr)q(o)n(m)f(i)s(nfeas)n(i-)0 4666 y(bility)62 b(to)h(o)l(n)n(e)f(of)h (its)h(bo)-5 b(unds)61 b(\(th)l(e)i(`n)n(ear)12 b(')62 b(bo)-5 b(und\),)64 b(and)f(wh)l(en)e(it)i(has)g(c)-8 b(r)q(os)j(s)m(e)l(d)63 b(th)l(e)f(feas)n(ib)l(l)n(e)i(r)q(e)-5 b(g)t(io)l(n)62 b(to)h(th)l(e)0 4865 y(o)-5 b(p)d(pos)n(ite)68 b(\(`far)12 b('\))68 b(bo)-5 b(und.)113 b(Pivoti)s(n)n(g)67 b(wh)l(en)g(th)l(e)i(n)n(ear)g(bo)-5 b(und)67 b(is)j(r)q(ea)n(c)-7 b(h)l(e)l(d)68 b(is)h(o)-5 b(ptio)l(nal;)76 b(pivoti)s(n)n(g)67 b(a)-8 b(t)69 b(th)l(e)f(far)0 5065 y(bo)-5 b(und)57 b(is)i(manda)-8 b(to)h(ry)58 b(if)g(pr)s(i)s(mal)h(feas)n(ibility)f(is) h(to)f(be)h(mai)s(nt)s(ai)s(n)n(e)l(d.)83 b(T)8 b(h)l(e)58 b(same)i(n)m(otio)l(n)c(can)j(be)g(a)-6 b(p)e(plie)l(d)57 b(i)s(n)0 5264 y(p)-6 b(has)m(e)53 b(II,)h(b)-8 b(u)l(t)52 b(its)i(u)l(tility)e(is)h(m)l(u)-5 b(c)e(h)53 b(mo)-7 b(r)q(e)53 b(li)s(m)s(ite)l(d:)67 b(In)53 b(cas)m(e)o(s)h(wh)l(e)l(r)q (e)e(a)i(bas)n(ic)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(is)g(a)-8 b(t)53 b(its)g(n)n(ear)g(bo)-5 b(und)0 5463 y(and)72 b(c)l(o)-5 b(u)l(ld)71 b(be)i(p)-5 b(u)e(s)f(h)l(e)l(d)71 b(to)i(th)l(e)f(far)g(bo)-5 b(und,)76 b(we)c(may)g(pr)q(e)l(fe)l(r)g (to)h(c)-7 b(h)n(oos)m(e)72 b(a)h(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)71 b(and)h(n)n(ume)l(r)s(ically)0 5662 y(s)-5 b(t)s(a)l(b)l(l)n(e)53 b(pivot)g(ove)l(r)g(a)g(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)52 b(and)g(n)n(ume)l(r)s(ically)g(uns)-5 b(t)s(a)l(b)l(l)n(e)52 b(pivot.)253 5961 y FM(D)8 b(Y)g(L)g(P)68 b FP(i)s(mpl)n(e)n(ments)62 b(e)-5 b(xtend)g(e)l(d)61 b(pr)s(i)s(mal)i(pivoti)s(n)n(g)d(by)i (\002rs)-5 b(t)62 b(c)l(o)-5 b(ll)n(ec)g(ti)s(n)n(g)61 b(th)l(e)h(s)m(e)-7 b(t)63 b(of)f(candida)-8 b(te)o(s)67 b FG(x)7074 5986 y Fz(i)7186 5961 y FP(to)c(l)n(ea)-7 b(ve)0 6160 y(th)l(e)63 b(bas)n(is.)97 b(V)-11 b(ar)s(i)s(a)l(b)l(l)n (e)o(s)64 b(with)e(two)g(\002)s(nite)h(bo)-5 b(unds)62 b(g)n(e)-7 b(t)63 b(two)f(entr)s(ie)o(s,)k(o)l(n)n(e)d(with)f(th)l(e)g (v)r(al)n(u)l(e)i(of)f FI(D)6810 6185 y Fz(i)23 b(j)6975 6160 y FP(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)0 6360 y(with)65 b(th)l(e)h(n)n(ear)g(bo)-5 b(und,)68 b(th)l(e)e(oth)l(e)l(r)f(th)l(e)h (v)r(al)n(u)l(e)g(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)66 b(with)f(th)l(e)h(far)g(bo)-5 b(und.)104 b(T)8 b(h)l(e)66 b(s)m(e)-7 b(t)67 b(is)f(th)l(en)g(s)n(o)-7 b(rte)l(d)0 6559 y(u)g(s)n(i)s(n)n(g)52 b(n)m(o)l(nd)-5 b(ec)d(r)q(eas)n(i)s(n)n(g) 50 b(v)r(al)n(u)l(e)j(of)2381 6552 y FF(|)2414 6559 y FI(D)2534 6584 y Fz(k)21 b(j)2670 6552 y FF(|)2711 6559 y FP(,)54 b(with)d(n)n(ume)l(r)s(ical)i(s)-5 b(t)s(a)l(bility)52 b(as)h(th)l(e)g(tie-b)-5 b(r)q(eake)l(r)-10 b(.)249 6858 y(T)8 b(h)l(e)73 b(pr)q(oc)-6 b(e)o(s)h(s)75 b(of)f(scanni)s(n)n(g)e (fo)-7 b(r)73 b(candida)-8 b(te)o(s)74 b(and)f(s)n(o)-7 b(rti)s(n)n(g)72 b(th)l(e)h(r)q(e)o(s)-8 b(u)l(lti)s(n)n(g)72 b(s)m(e)-7 b(t)75 b(is)e(i)s(mpl)n(e)n(mente)l(d)g(i)s(n)h(th)l(e)0 7057 y(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)68 b FJ(scanForPr)s(im)m (alOutCands)i FP(and)e FJ(pr)s(im)m(alcand_cmp)p FP(.)111 b(Fo)-7 b(r)69 b(e)l(\002)-49 b(\002c)m(iency)-17 b(,)71 b FJ(scanForPr)s(im)m(alOutCands)f FP(kee)-7 b(ps)0 7256 y(a)60 b(`)r(be)o(s)-5 b(t)59 b(candida)-8 b(te')58 b(u)-7 b(s)n(i)s(n)n(g)58 b(th)l(e)h(s)-5 b(t)s(andar)q(d)60 b(pr)s(i)s(mal)f(pivoti)s(n)n(g)f(ru)l(l)n(e)o(s.)85 b(If)60 b(this)f(candida)-8 b(te)59 b(is)g(good)g(\(n)m(o)l(nd)-5 b(e)g(g)n(en-)0 7456 y(e)l(ra)d(te)62 b(and)g(n)n(ume)l(r)s(ically)g(s) -5 b(t)s(a)l(b)l(l)n(e\),)65 b(it)d(is)h(a)n(cc)-6 b(e)f(pte)l(d)62 b(as)h(th)l(e)f(l)n(ea)-7 b(vi)s(n)n(g)61 b(v)r(ar)s(i)s(a)l(b)l(l)n(e) i(and)f(n)m(o)g(furth)l(e)l(r)f(pr)q(oc)-6 b(e)o(s)h(s)n(i)s(n)n(g)62 b(is)0 7655 y(r)q(eq)l(uir)q(e)l(d.)249 7954 y(If)54 b(a)g(good)f(candida)-8 b(te)52 b(is)i(n)m(ot)f(id)-5 b(enti\002e)l(d)52 b(by)h(th)l(e)g(scan,)h(an)f(a)-8 b(tte)n(mpt)53 b(is)h(ma)-6 b(d)h(e)54 b(to)f(pr)q(o)n(mote)h(a)g(good) e(candi-)0 8153 y(da)-8 b(te)58 b(to)h(th)l(e)f(fr)q(o)l(nt)g(of)g(th)l (e)g(s)n(o)-7 b(rte)l(d)58 b(lis)-5 b(t.)83 b(T)8 b(h)l(e)58 b(c)-8 b(r)s(ite)l(r)s(i)s(a)59 b(is)g(as)g(o)-5 b(u)l(tli)s(n)n(e)l(d) 57 b(fo)-7 b(r)59 b(g)n(en)n(e)l(ralis)m(e)l(d)e(d)-7 b(ual)58 b(pivoti)s(n)n(g:)75 b(If)59 b(th)l(e)0 8352 y(amo)-5 b(unt)43 b(of)h(pr)s(i)s(mal)h(i)s(nfeas)n(ibility)e(tha)-8 b(t)43 b(wo)-5 b(u)l(ld)43 b(r)q(e)o(s)-8 b(u)l(lt)44 b(fr)q(o)n(m)g(pr)q(o)n(moti)s(n)n(g)f(a)h(s)-5 b(t)s(a)l(b)l(l)n(e,)47 b(n)m(o)l(nd)-5 b(e)g(g)n(en)n(e)l(ra)d(te)41 b(candida)-8 b(te)0 8551 y(is)51 b(to)-5 b(l)n(e)l(ra)l(b)l(l)n(e,)52 b(tha)-8 b(t)50 b(candida)-8 b(te)50 b(is)i(pr)q(o)n(mote)l(d)e(and)h (ma)-6 b(d)h(e)52 b(th)l(e)e(l)n(ea)-7 b(vi)s(n)n(g)50 b(v)r(ar)s(i)s(a)l(b)l(l)n(e.)65 b(T)8 b(his)51 b(pr)q(o)n(motio)l(n)f (of)h(a)h(s)-5 b(t)s(a)l(b)l(l)n(e)0 8751 y(pivot)52 b(ove)l(r)h(an)g(uns)-5 b(t)s(a)l(b)l(l)n(e)52 b(pivot)h(is)g(i)s(mpl)n (e)n(mente)l(d)f(i)s(n)g(th)l(e)h(pr)s(i)s(mal)g(ve)l(rs)n(io)l(n)f(of) h FJ(pr)m(omoteSanePiv)l(ot)p FP(.)249 9050 y(Antid)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)86 b(u)-7 b(s)n(i)s(n)n(g)88 b(pe)l(rt)l(urbe)l(d)f(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(ms)87 b(is)i(u)-7 b(s)m(e)l(d)88 b(with)g(e)-5 b(xtend)g(e)l(d)88 b(pr)s(i)s(mal)g(pivoti)s(n)n(g.)171 b(T)8 b(h)l(e)0 9249 y(alignment-bas)m(e)l(d)51 b(anti-d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy) 51 b(s)-5 b(tra)d(te)j(g)t(ie)o(s)53 b(ar)q(e)g(n)m(ot)f(i)s(mpl)n(e)n (mente)l(d.)3771 11400 y(57)p eop end %%Page: 58 61 TeXDict begin 58 60 bop 0 475 a FL(15)238 b(V)-17 b(ar)r(iab)-6 b(le)80 b(Manage)n(ment)0 959 y FP(Ac)-5 b(tiv)r(a)d(tio)l(n)42 b(and)i(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)42 b(of)i(v)r(ar)s(i)s(a)l(b) l(l)n(e)o(s)g(and)g(c)l(o)l(ns)-5 b(trai)s(nts)43 b(is)h(a)g(c)l(o)-7 b(r)q(e)44 b(a)n(c)-5 b(tivity)43 b(fo)-7 b(r)45 b(dy)7 b(nam)s(ic)42 b(s)n(i)s(mpl)n(e)-5 b(x.)63 b(T)8 b(h)l(e)0 1158 y(a)n(c)-5 b(tiv)r(a)d(tio)l(n)48 b(o)-7 b(r)49 b(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)48 b(of)h(v)r(ar)s(i)s(a)l(b)l(l)n (e)o(s)h(can)g(occur)f(as)h(an)f(i)s(nd)-5 b(e)e(pend)i(ent)48 b(a)n(c)-5 b(tivity)49 b(o)-7 b(r)49 b(as)h(a)g(c)l(o)l(ns)m(eq)l(u)l (enc)-6 b(e)48 b(of)0 1357 y(c)l(o)l(ns)-5 b(trai)s(nt)61 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)60 b(and)h(d)-5 b(ea)n(c)g(tiv)r(a)d (tio)l(n)60 b(\()p FG(vid)p FP(.)h(\24716\).)92 b(Dur)s(i)s(n)n(g)60 b(n)m(o)-7 b(r)5 b(mal)61 b(e)-5 b(xecu)l(tio)l(n)61 b(\()p FG(vid)p FP(.)h(Fig.)f(3\))g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)0 1556 y(ar)q(e)f(a)n(c)-5 b(tiv)r(a)d(te)l(d)58 b(\()p FJ(dy_activ)l(ateV)-16 b(ar)s(s)p FP(\))58 b(wh)l(en)g(pr)s(i)s(mal)h (s)n(i)s(mpl)n(e)-5 b(x)60 b(r)q(e)-7 b(t)l(ur)5 b(ns)59 b(an)g(i)s(ndica)-8 b(tio)l(n)57 b(of)i(i)s(nfeas)n(ibility)f(o)-7 b(r)60 b(wh)l(en)0 1756 y(pr)s(i)s(mal)49 b(o)-7 b(r)50 b(d)-7 b(ual)48 b(s)n(i)s(mpl)n(e)-5 b(x)50 b(a)n(c)-7 b(hieve)50 b(o)-5 b(pti)s(mality)-17 b(.)63 b(V)-11 b(ar)s(i)s(a)l(b)l (l)n(e)o(s)51 b(ar)q(e)e(d)-5 b(ea)n(c)g(tiv)r(a)d(te)l(d)49 b(\()p FJ(dy_deactiv)l(ateV)-16 b(ar)s(s)p FP(\))48 b(wh)l(en)g(d)-7 b(ual)0 1955 y(s)n(i)s(mpl)n(e)i(x)53 b(a)n(c)-7 b(hieve)o(s)54 b(o)-5 b(pti)s(mality)51 b(and)i(r)q(e)-7 b(t)l(ur)5 b(ns)52 b(to)h(pr)s(i)s(mal)g(p)-6 b(has)m(e)52 b(II)i(afte)l(r)f(a)-6 b(ddi)s(n)n(g)51 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)249 2254 y(In)63 b(a)h(s)n(o)n(mewha)-8 b(t)62 b(dif)n(fe)l(r)q(ent)g(c)l (o)l(nte)-5 b(xt,)65 b(d)-7 b(ual)63 b(feas)n(ib)l(l)n(e)h(v)r(ar)s(i)s (a)l(b)l(l)n(e)o(s)g(ar)q(e)g(ev)r(al)n(ua)-8 b(te)l(d)63 b(as)g(d)-7 b(ual)63 b(bo)-5 b(undi)s(n)n(g)60 b(c)l(o)l(n-)0 2453 y(s)-5 b(trai)s(nts)42 b(and)g(a)n(c)-5 b(tiv)r(a)d(te)l(d)41 b(\()p FJ(dy_dualaddv)l(ar)s(s)p FP(\))i(wh)l(en)d(d)-7 b(ual)41 b(s)n(i)s(mpl)n(e)-5 b(x)43 b(i)s(ndica)-8 b(te)o(s)42 b(an)g(un)m(bo)-5 b(und)g(e)l(d)40 b(d)-7 b(ual)41 b(\(i)s(nfeas)n(ib)l (l)n(e)0 2652 y(pr)s(i)s(mal\).)63 b(Dual)44 b(feas)n(ib)l(l)n(e)i(v)r (ar)s(i)s(a)l(b)l(l)n(e)o(s)f(ar)q(e)g(als)n(o)g(a)n(c)-5 b(tiv)r(a)d(te)l(d)43 b(\()p FJ(dy_activ)l(ateV)-16 b(ar)s(s)p FP(\))44 b(wh)l(en)f(d)-7 b(ual)44 b(s)n(i)s(mpl)n(e)-5 b(x)45 b(will)f(be)h(r)q(een-)0 2851 y(te)l(r)q(e)l(d)55 b(afte)l(r)g(a)-6 b(ddi)s(n)n(g)53 b(c)l(o)l(ns)-5 b(trai)s(nts)54 b(with)n(o)-5 b(u)l(t)54 b(an)g(i)s(nte)l(rveni)s(n)n(g)f(pr)s(i)s(mal) i(s)n(i)s(mpl)n(e)-5 b(x)56 b(p)-6 b(has)m(e.)71 b(T)8 b(h)l(e)55 b(motiv)r(a)-8 b(tio)l(n)53 b(is)i(to)0 3051 y(i)s(nc)-8 b(r)q(eas)m(e)53 b(th)l(e)f(pr)q(o)-8 b(ba)l(bility)51 b(tha)-8 b(t)52 b(th)l(e)g(d)-7 b(ual)52 b(pr)q(o)-8 b(b)l(l)n(e)n(m)52 b(will)g(r)q(e)n(mai)s(n)g(bo)-5 b(und)g(e)l(d.)249 3350 y(Fig)n(ur)q(e)40 b(13)g(s)-8 b(h)n(ows)39 b(th)l(e)h(call)g(s)-5 b(tru)g(c)g(t)l(ur)q(e)40 b(fo)-7 b(r)41 b(th)l(e)e(to)-5 b(p-l)n(eve)l(l)41 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(a)n(c)-5 b(tiv)r(a)d(tio)l(n)38 b(and)i(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)38 b(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s.)983 8540 y @beginspecial 84 @llx 438 @lly 434 @urx 727 @ury 3500 @rwi @setspecial %%BeginDocument: /devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/varmgmtcalls.eps %!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/varmgmt.epsu %%Creator: IslandDraw for lou %%CreationDate: Sat Sep 17 11:35:24 2005 %%Pages: 1 %%BoundingBox: 84 438 434 727 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 438 361 1 722 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000000c0000000000001810000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000040000000000000810000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000040000000000000800000000000000000000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000000000007ddc035fbbcdc78bb0d00000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000c4880489142e6cccd1200000000000000000000 % 00000000000000000000000000000000 % 00000000000000000000000000000000000001884c8074d90e4284851d00000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000030845000c6a324284850300000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000308c500446c46468c8d1100000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000607620078243b7c78f91e00000000000000000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000000000e0002000000004000010000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000000c000e3f0000004000050000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000018001800000000e0000e0000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000180000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000300000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000700000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000600000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000180000000007c0200079c000f801810000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000003800000000022020003080010880838010000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000003000000000022000003080010480828010000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000600035e3cdc22fe6ec111e7dc1ef8287bc000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000060004b142623c42332192120789884cc50000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000c0387600e4220422220a0720049087c810000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000001c0700e0324220422220e19210490846810000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000180e0471464230422220c23218891882c50000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000301c079e3be770e7777041df1f0eedc779c000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000030380000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000060700000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000e0e00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000c1c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000183800000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000187000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000030e000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000071c000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000638000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000c700000c00000001c77e3e0080002000081c100000000 % 001800000001c77e3e01000020001002 % 000000000000000000000000000000000ce00000400000010e2231100800070001808100200000 % 000800000010e2231101000070003002 % 0000000000000000000000000000000019c00000400000010a2211100000050000808000200000 % 000800000010a2211100000050001002 % 000000000000000000000000000000003b800007ddc0787bcb223117db76051f78b8830d780000 % 00f9dc078f3cb223117f376053e79702 % 000000000000000000000000000000003700030c488084c509a3e1e209990988c4c48112207fff % f188880858909a3e1e211990990c5882 % 000000000000000000000000000000006e001f084c801c8109a2110209110f888084811d207fff % f108c801d0109a2110211110f9081082 % 000000000000000000000000000000007c00fc084500648108e21102091108c880848503200000 % 0108500650108e21102111108d081080 % 00000000000000000000000000000000f807e008c5008cc50862118209111048c4848d11200000 % 01185008d890862118211111050c5082 % 00000000000000000000000000000001f03f000762007679dc67e3871fbbb8fc79cffb9e380000 % 00ec20076f1dc67e3873bbbb8f87b9c2 % 0000000600000000200000079c000001e1f8000002000000000000000000000000000000000000 % 00002000000000000000000000000002 % 00000002000000042000100308000003cfc000000e3f0000000000000000000000000000000000 % 0000e3f0000000000000000000000002 % 00000002000000040000100308000003fe00000018000000000000000000000000000000000000 % 00018000000000000000000000000002 % 0000003e7701e3cf6eef3ce111e7c687f000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000006222021624245091f1921209078000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000423200740426839100a0720e87c000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000004214019404228c9100e1920187f800000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000461402362423119190c2320883bf00000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000003b0801dbc7710edce041df0f03c7e00000c00000000008180000000030000e0000000000 % 00000000000000000000000000000002 % 00000000080000000000000000000001e0fc000040000000001808000000001000100004000000 % 00000000000000000000000000000002 % 0000000038fc00000000000000000000f01f80004000000000080ac00000001000100004000000 % 00000000000000000000000000000002 % 00000000600000000000000000000000f803f007ddc07879e3cb8900000001f77039e1ef3cf800 % 00000000000000000000000000000002 % 000000000000000000000000000000007c007e0c488084c7162c4a000000031220121314664000 % 00000000000000000000000000000002 % 000000000000000000000000000000007e000f084c801c8204084f01ffffc21320107204424000 % 00000000000000000000000000000002 % 00000000000000000000000000000000370001084500648204084901ffffc21140119204424000 % 00000000000000000000000000000002 % 000000000000000000000000000000001b800008c5008cc7162849800000023140123314464000 % 00000000000000000000000000000002 % 0000000000000000000000000000000019c0000762007679e3dcfdc0000001d88039d9e73ce000 % 00000000000000000000000000000002 % 000000000000000000000000000000000ce0000002000000000000000000000080000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000e7000000e3f000000000000000000038fc00000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000638000018000000000000000000000600000000000000 % 00000000000000000000000000000000 % 00000000000000000000000000000000031c000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000030e000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000187000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000001c3800000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000c1c00000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000060e00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000607000c0003800000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000030380040004400000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000381c0040004400000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000180e07ddc0ef7cf37000000000000000000000000000 % 00000000000000000000000000000003 % 00000000000000000000000000000000000c070c48804421098800000000000000000000000000 % 00000000000000000000000000000003 % 00000000000000000000000000000000000c03884c804420390800000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000006000845004420c90800000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000070008c5004421190800000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000300076200e770ef9c00000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000001800002000000000000000000000000000000000000 % 00000000000000000000000000000001 % 00000000000000000000000000000000000180000e3f0000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000c00018000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000e00000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000600000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000300000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000300000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000180000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000000001c0000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 0000000000000000000000000000000000000c00c0004004000040180800000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000000600400040044001c0080800000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000060040000000400040080000000000000000000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000000000307ddc0cdccf6e0478b9800000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000038c4880462447304cccc800000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000001884c804424421048484800000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000845004424421048484800000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000008c50044244230c8c8c800000000000000000000 % 00000000000000000000000000000000 % 00000000000000000000000000000000000000076200ee7e73e1e78f8800000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000002000000020000000800000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000000000e3f0000020000002800000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000018000000070000007000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000000c000c000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000040004040000000000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000040004040000000000000000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000007ddc05cf7de3700000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000c48806642211880000000000000000000000000 % 00000000000000000000000000000000 % 00000000000000000000000000000000000001884c804242071080000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000030845004242191080000000000000000000000000 % 00000000000000000000000000000003 % 0000000000000000000000000000000000000308c5004642231080000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000030762007c771db9c0000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000060002000000000000000000000000000000000000 % 00000000000000000000000000000003 % 00000000000000000000000000000000000006000e3f0000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000060018000000000000000000000000000000000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000000000c0000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000c0000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000180000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000180000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000180000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000300000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000300000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000300000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000600000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000600000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000001800000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000001800000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000001800000000040000000000000018000000038efc3e0 % 10000400010000000000000000000000 % 0000000000000000000000000000000000030004000001c000000000000000800000021c446110 % 10000e00030000000000000000000002 % 000000000000000000000000000000000003000400000040000000000000008000000214442110 % 00000a00010000000000000000000002 % 000000000000000000000000000000000006000fefb8e047779f000000000f9dc078f79644611f % b3760a3ef17000000000000000000002 % 000000000000000000000000000000000006010445cdf04228480ffffffe188880858a1347c1e4 % 11991311898800000000000000000000 % 00000000000000000000000000000000000603846485004341c80ffffffe108c801d0213442104 % 11111f11010800000000000000000002 % 00000000000000000000000000000000000c030428850041464800000000108500650211c42104 % 11111191010800000000000000000002 % 00000000000000000000000000000000000c0704288d90c188c8000000001185008d8a10c42184 % 11112091890800000000000000000002 % 00000000000000000000000000000000000c060710f8e1e0877c000000000ec20076f3b8cfc38e % 3bbbf1f8f39c00000000000000000002 % 0000000000000000000000000000000000180c0010800000000000000000000200000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000181c0070800000000000000000000e7e000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000301800c1c00000000000000000001800000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000030380000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000030300000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000060600000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000060e00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000060c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000c1c00000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 0000000000000000000000000000000000c1800000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000183000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000187000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000186000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000030e000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000030c000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000318000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000638000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000006300000000001c0000060000000000000001800000003 % 8efc3e01000040001000000000000002 % 000000000000000000000000000000000c70000400000220000020000000000000000800000021 % c44611010000e0003000000000000002 % 000000000000000000000000000000000c60000400000220000020000000000000000800000021 % 444211000000a0001000000000000000 % 000000000000000000000000000000000cc0000fefb8e2238efe2000000000000000f9dc078f79 % 644611fb3760a3ef1700000000000002 % 0000000000000000000000000000000019c0000445cdf067c461200000000000000188880858a1 % 347c1e41199131189880000000000002 % 0000000000000000000000000000000019800384648500440687200000000000007108c801d021 % 344210411111f1101080000000000002 % 000000000000000000000000000000001b80070428850084029920000000000000e10850065021 % 1c421041111119101080000000000002 % 0000000000000000000000000000000033001e04288d9116432320000000000003c1185008d8a1 % 0c421841111209189080000000000002 % 000000000000000000000000000000003600380710f8e3e3811df000000000000700ec20076f3b % 8cfc38e3bbbf1f8f39c0000000000002 % 000000000000000000000000000000006e00f0001080000000000000000000001e000020000000 % 00000000000000000000000000000002 % 000000000000000000000000000000006c01c000708000000000000000000000380000e7e00000 % 00000000000000000000000000000002 % 000000000000000000000000000000007c078000c1c000000000000000000000f0000180000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000d80e0000000000000000000000000001c0000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000f03c000000000000000000000000000780000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000f070000000000000000000000000000e00000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000001e1e0000000000000000000000000003c00000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000001e380000000000000000000000000007000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000003cf0000000000000000000000000001e000000000000000 % 00000000000000000000000000000002 % 000000060000300006000c0c000000039c000000000001c000004000000003800000180000c000 % 18008000000000000000000000000002 % 00000002000010000200040400000003f8000004000002200008400020000f0000000800004000 % 08008000400000000000000000000002 % 00000002000010000200040400000007e0000004000002200008000020001c0000000800004000 % 08000000400000000000000000000002 % 0000003e7701f211e23c7c7cefe7c687c000000fefb8e223c79eddde79c078000000f9dc07c847 % 89b9bbbcf00000000000000000000002 % 00000062220316321242c4c4461209070000000445cdf0642c4848a123e0e000000188880c58c8 % 49cc9166400000000000000000000002 % 0000004232021210720e848468720e87ffffff0464850040e8084d072200ffffffe108c8084841 % c8849a42400000000000000000000002 % 000000421402121192328484299201860000000428850083280845192200f00000010850084846 % 48848a42400000000000000000000000 % 000000461402323232468c8c3232088700000004288d91146c484623232038000001185008c8c8 % c88c8c46400000000000000000000002 % 0000003b0801d9d9df3b767611df0f038000000710f8e3e3b78ee21db9c01e000000ec20076767 % 7cf9c43c700000000000000000000002 % 00000000080000000000000000000003c000000010800000000000000000070000000020000000 % 00800000000000000000000000000000 % 0000000039f800000000000000000003c00000007080000000000000000003c0000000e7e00000 % 00800000000000000000000000000002 % 00000000600000000000000000000001e0000000c1c0000000000000000000e000000180000000 % 01c00000000000000000000000000000 % 00000000000000000000000000000001f000000000000000000000000000007800000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000f800000000000000000000000000001c00000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000d800000000000000000000000000000f00000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000006c00000000000000000000000000000380000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000006e000000000000000000000000000001e0000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000007700000000000000000000000000000070000000000000 % 00000000000000000000000000000003 % 00000000000000000000000000000000330000000000000000000000000000003c00180000c000 % 00000000000000000000000000000002 % 00000000000000000000000000000000318000000000000000000000000000000e000800004000 % 00000000000000000000000000000002 % 0000000000000000000000000000000019c0000000000000000000000000000007800800004000 % 00000000000000000000000000000002 % 0000000000000000000000000000000018e0000000000000000000000000000001c0f9dc07c847 % 371b8f00000000000000000000000002 % 000000000000000000000000000000000c60000000000000000000000000000000f188880c58cf % 988c5080000000000000000000000001 % 000000000000000000000000000000000c300000000000000000000000000000002108c8084848 % 10884380000000000000000000000001 % 000000000000000000000000000000000e38000000000000000000000000000000010850084848 % 10884c80000000000000000000000000 % 00000000000000000000000000000000061c00000000000000000000000000000001185008c8cc % 90885180000000000000000000000000 % 00000000000000000000000000000000060c00000000000000000000000000000000ec20076767 % 39dceec0000000000000000000000002 % 000000000000000000000000000000000306000000000000000000000000000000000020000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000003070000000000000000000000000000000000e7e00000 % 00000000000000000000000000000001 % 000000000000000000000000000000000183800000000000000000000000000000000180000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000181800000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 0000000000000000000000000000000001c0c00000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000c0e00000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000c0700000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000060300000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000060180000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000301c0000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000300e0000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000038060000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000018030000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 00000000000000000000000000000000001803ff00000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000c01fffff80000000000000000000000000000000000 % 00000000000000000000000000000001 % 00000000000000000000000000000000000c00000fffffc0000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000006000000007ffffe0000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000006000000000003fffff0000000000000000000001c00 % 00060000000000000000000000000002 % 000000000000000000000000000000000007000000000000001fffff8000000000008000002200 % 00020000000000000000000000000001 % 000000000000000000000000000000000003000000000000000000fffffc000000008000002200 % 00020000000000000000000000000001 % 0000000000000000000000000000000000030000000000000000000007ffffe00001eef71c0671 % dfc20000000000000000000000000000 % 0000000000000000000000000000000000018000000000000000000000003fffff008479be0cf8 % 8c220000000000000000000000000003 % 0000000000000000000000000000000000018000000000000000000000000001fff08650a00280 % d0e20000000000000000000000000002 % 000000000000000000000000000000000000c00000000000000000000000000000e08290a02280 % 53220000000000000000000000000000 % 000000000000000000000000000000000000c00000000000000000000000000003c08291b222c8 % 64620000000000000000000000000000 % 000000000000000000000000000000000000e0000000000000000000000000000700e11f1c1c70 % 23b70000000000000000000000000003 % 00000000000000000000000000000000000060000000000000000000000000001e000110000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000600000000000000000000000000038000710000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000003000000000000000000000000000f0000c38000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000003000000000000000000000000001c0000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000180000000000000000000000000780000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000180000000000000000000000000e00000000000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000001c0000000000000000000000003c00000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000c0000000000000000000000007000000000000000 % 00000000000000000000000000000003 % 0000000000000000000000000000000000000c000000000000000000000001e000000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000600000001c000004000000003800000180000c000 % 18000000000000000000000000000001 % 0000000000000000000000000000000000000604000002200008400020000f0000000800004000 % 08000100000000000000000000000002 % 0000000000000000000000000000000000000304000002200008000020001c0000000800004000 % 08000100000000000000000000000002 % 000000000000000000000000000000000000030fefb8e063c79eddde79c078000000f9dc07c847 % 88f10bc0000000000000000000000000 % 000000000000000000000000000000000000038445cdf0c42c4848a123e0e000000188880c58c8 % 499b1900000000000000000000000002 % 000000000000000000000000000000000000018464850020e8084d072200ffffffe108c8084841 % c9090900000000000000000000000001 % 000000000000000000000000000000000000000428850223280845192200f00000010850084846 % 49090900000000000000000000000001 % 0000000000000000000000000000000000000004288d92246c484623232038000001185008c8c8 % c9191900000000000000000000000001 % 000000000000000000000000000000000000000710f8e1c3b78ee21db9c01e000000ec20076767 % 7cf0edc0000000000000000000000001 % 000000000000000000000000000000000000000010800000000000000000070000000020000000 % 00000000000000000000000000000000 % 00000000000000000000000000000000000000007080000000000000000003c0000000e7e00000 % 00000000000000000000000000000000 % 0000000000000000000000000000000000000000c1c0000000000000000000e000000180000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000007800000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000001c00000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000f00000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000380000000000000 % 00000000000000000000000000000001 % 0000000000000000000000000000000000000000000000000000000000000001e0000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000070000000000000 % 00000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000003c001800000003 % 8efc3e01000040001000000000000000 % 00000000000000000000000000000000000000000000000000000000000000000e000800000021 % c44611010000e0003000000000000003 % 000000000000000000000000000000000000000000000000000000000000000007800800000021 % 444211000000a0001000000000000003 % 000000000000000000000000000000000000000000000000000000000000000001c0f9dc078f79 % 644611fb3760a3ef1700000000000003 % 000000000000000000000000000000000000000000000000000000000000000000f188880858a1 % 347c1e41199131189880000000000003 % 0000000000000000000000000000000000000000000000000000000000000000002108c801d021 % 344210411111f1101080000000000002 % 000000000000000000000000000000000000000000000000000000000000000000010850065021 % 1c421041111119101080000000000000 % 00000000000000000000000000000000000000000000000000000000000000000001185008d8a1 % 0c421841111209189080000000000001 % 00000000000000000000000000000000000000000000000000000000000000000000ec20076f3b % 8cfc38e3bbbf1f8f39c0000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000020000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000000000000e7e00000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000180000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000001 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000003 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000000000000f802000f38000f8019f800000000000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000004402000610001090088c00000200000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000000000004400000610001050088600000200000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000000006bc79b845f6dd8223cf9c3cf88270f1e780000000 % 00000000000000000000000000000002 % 000000000000000000000000000000000000096284c478826643242407918882f90b1200000000 % 00000000000000000000000000000002 % 00000000000000000000000000000000001f0ec01c844082444140e400510882803a0200000000 % 00000000000000000000000000000002 % 0000000000000000000000000000000000fc01c0648440824441c3241051088680ca0200000000 % 00000000000000000000000000000000 % 0000000000000000000000000000000007e008e28c8460824441846418911884c91b1200000000 % 00000000000000000000000000000002 % 000000000000000000000000000000003f000f3c77cee1c7eee083be1f1cedf870ede380000000 % 00000000000000000000000000000002 % 03000018000000400000079c00000001f800000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0100000800000840002003080000000fc000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 0100000800000800002003080000007e0000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 1f3b80f8e3c3decefe79c113c7cd03f00000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 31110189f42628446123e19422120f800000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 2119010900e40846872200a0e21d0f000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 210a010903240842992200e3220307e00000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 230a011994662843232320c4621100fc0000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 1d8400ece3b3cee11db9c043b71e001f8000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 % 00040000000000000000000000000003f000018000000e3bf1f0080001000080e0800000000018 % 0000c00000071df8f804000080004002 % 001c7e000000000000000000000000007e00008000008711188808000380018040802000000008 % 000040000043888c44040001c000c002 % 003000000000000000000000000000000fc0008000008511088800000280008040002000000008 % 00004000004288844400000140004002 % 0000000000000000000000000000000001f80f8e3c79e591188bf9bb029f3cb84186f8000000f9 % dc07c71e3cf2c88c45fcdd814f9e5c02 % 00000000000000000000000000000000003f189f42c484d1f0f108cc84c862c44089207ffff188 % 880c4fa1624268f87884664264316202 % 00000000000000000000000000000000000710900e8084d10881088887c84084408ea07ffff108 % c80848074042688440844443e4204202 % 00000000000000000000000000000000000010903280847108810888846840844281a000000108 % 50084819404238844084444234204202 % 000000000000000000000000000000000000119946c4843108c10888882862844688a000000118 % 5008cca3624218846084444414314202 % 0000000000000000000000000000000000000ece3b78ee33f1c39ddddc7c3dcefdcf38000000ec % 2007671dbc7719f8e1ceeeee3e1ee702 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 20000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % e3f00000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000001 % 80000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000002 %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 64.0522 38.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1536 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_activateVars) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.73 46.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_ftran) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.73 31.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (scanPrimVarStdAct) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.73 26.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_swapobjs) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.73 51.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_initp1obj) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 112.606 36.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -2204 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_actNBPrimArchList) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 119.925 36.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_actNBPrimArch) s savemat setmatrix n 113.55 35 m 118.55 35 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 91.6511 41.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1016 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 99.1111 41.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_factor) s savemat setmatrix n 92.74 40 m 97.74 40 l gsave 0 0 0 0.1764 0 B grestore n 65 37.5 m 72.5 25 l gsave 0 0 0 0.1764 0 B grestore n 65 37.5 m 72.5 30 l gsave 0 0 0 0.1764 0 B grestore n 65 37.5 m 72.5 35 l gsave 0 0 0 0.1764 0 B grestore n 65 37.5 m 72.5 40 l gsave 0 0 0 0.1764 0 B grestore n 65 37.5 m 72.5 45 l gsave 0 0 0 0.1764 0 B grestore n 65 37.5 m 72.5 50 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 73.73 63.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_btran) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 73.73 78.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (type2eval) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.197 106.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_actNBPrimArch) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.197 96.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (type3eval) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 96.5194 101.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1292 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (type3activate) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.197 101.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dualout) s savemat setmatrix n 97.467 100 m 104.97 95 l gsave 0 0 0 0.1764 0 B grestore n 97.467 100 m 104.97 100 l gsave 0 0 0 0.1764 0 B grestore n 97.467 100 m 104.97 105 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 96.5194 83.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1292 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (type2activate) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.197 83.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dualpivot) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.197 88.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_duenna) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 106.197 78.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_actNBPrimArch) s savemat setmatrix n 97.467 82.5 m 104.97 77.5 l gsave 0 0 0 0.1764 0 B grestore n 97.467 82.5 m 104.97 82.5 l gsave 0 0 0 0.1764 0 B grestore n 97.467 82.5 m 104.97 87.5 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 88.6172 71.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -844 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (type1var) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 98.295 71.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_actNBPrimArch) s savemat setmatrix n 89.565 70 m 97.065 70 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 64.0522 83.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1544 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_dualaddvars) s savemat setmatrix n 65 82.5 m 72.5 62.5 l gsave 0 0 0 0.1764 0 B grestore n 65 82.5 m 72.5 70 l gsave 0 0 0 0.1764 0 B grestore n 65 82.5 m 72.5 77.5 l gsave 0 0 0 0.1764 0 B grestore n 65 82.5 m 72.5 82.5 l gsave 0 0 0 0.1764 0 B grestore n 65 82.5 m 72.5 100 l gsave 0 0 0 0.1764 0 B grestore n 65 82.5 m 72.5 92.5 l 105 95 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 61.5522 121.201] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1764 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_deactivateVars) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 71.23 118.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (scanPrimVarStdDeact) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 108.272 123.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -2100 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (deactNBPrimArchList) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 115.311 123.701] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_deactNBPrimArch) s savemat setmatrix n 109.08 122.5 m 114.08 122.5 l gsave 0 0 0 0.1764 0 B grestore n 62.5 120 m 70 117.5 l gsave 0 0 0 0.1764 0 B grestore n 62.5 120 m 70 122.5 l gsave 0 0 0 0.1764 0 B grestore grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore %%EndDocument @endspecial 1601 8905 a(Fig)n(ur)q(e)53 b(13:)65 b(Call)52 b(Gra)-6 b(p)g(h)53 b(fo)-7 b(r)53 b(V)-11 b(ar)s(i)s(a)l(b)l(l)n(e)53 b(Manag)n(e)n(ment)e(Ro)-5 b(u)l(ti)s(n)n(e)o(s)0 9699 y Fu(15.1)197 b(V)-15 b(ar)r(iab)-5 b(le)64 b(Manage)n(ment)h(Pr)r (imitives)0 10119 y FP(T)8 b(h)l(e)l(r)q(e)52 b(ar)q(e)i(two)e(pr)s(i)s (m)s(itive)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(manag)n(e)n(ment)e(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s:)217 10500 y Fo(e)82 b FJ(dy_actNBPr)s(imAr)m(ch) 52 b FP(a)n(c)-5 b(tiv)r(a)d(te)o(s)53 b(a)g(pr)s(i)s(mal)g(ar)q(c)-7 b(hitec)i(t)l(ural)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(i)s(nto)g(th)l(e)f (n)m(o)l(n)m(bas)n(ic)f(partitio)l(n.)3771 11400 y(58)p eop end %%Page: 59 62 TeXDict begin 59 61 bop 217 466 a Fo(e)82 b FJ(dy_deactNBPr)s(imAr)m (ch)52 b FP(d)-5 b(ea)n(c)g(tiv)r(a)d(te)o(s)53 b(a)g(n)m(o)l(n)m(bas)n (ic)e(pr)s(i)s(mal)i(ar)q(c)-7 b(hitec)i(t)l(ural)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e.)253 898 y FM(D)8 b(Y)g(L)g(P)66 b FP(as)-5 b(s)d(ume)o(s)61 b(tha)-8 b(t)60 b(i)s(na)n(c)-5 b(tive)61 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(ar)q(e)g(feas)n(ib)l(l)n (e)g(and)f(a)-8 b(t)61 b(bo)-5 b(und)59 b(and)h(pr)q(ovid)-5 b(e)o(s)61 b(n)m(o)e(i)s(nd)-5 b(e)e(pend)i(ent)0 1097 y(way)56 b(to)h(s)-8 b(pec)m(ify)56 b(th)l(e)g(v)r(al)n(u)l(e)h(of)g (th)l(e)g(v)r(ar)s(i)s(a)l(b)l(l)n(e.)78 b(A)8 b(s)57 b(a)g(s)-8 b(pec)m(i)s(al)57 b(cas)m(e,)i(i)s(na)n(c)-5 b(tive)56 b(fr)q(ee)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)f(ar)q(e)h(as)-5 b(s)d(ume)l(d)56 b(to)0 1296 y(ha)-7 b(ve)55 b(th)l(e)g(v)r(al)n(u)l(e) g(ze)l(r)q(o.)72 b(A)56 b(c)l(o)l(ns)m(eq)l(u)l(enc)-6 b(e)54 b(of)h(this)g(is)g(tha)-8 b(t)55 b(it)g(is)h(n)m(ot)e(pos)-5 b(s)n(ib)l(l)n(e)55 b(to)h(d)-5 b(ea)n(c)g(tiv)r(a)d(te)54 b(a)i(bas)n(ic)g(v)r(ar)s(i)s(a)l(b)l(l)n(e;)0 1496 y(th)l(e)46 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(m)l(u)-7 b(s)i(t)47 b(\002rs)-5 b(t)47 b(be)g(fo)-7 b(r)q(c)h(e)l(d)47 b(i)s(nto)g(th)l(e)f(n)m(o)l(n)m (bas)n(ic)f(partitio)l(n.)62 b(Unl)n(e)o(s)-5 b(s)47 b(th)l(e)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(is)g(bas)n(ic)h(a)-8 b(t)46 b(bo)-5 b(und,)0 1695 y(this)78 b(will)f(c)-7 b(han)n(g)n(e)77 b(th)l(e)h(v)r(ar)s(i)s(a)l(b)l(l)n(e')-5 b(s)79 b(v)r(al)n(u)l(e.)142 b(T)8 b(h)l(e)78 b(s)-8 b(pec)m(i)s(al-p)j(urpos)m(e)78 b(r)q(o)-5 b(u)l(ti)s(n)n(e)78 b FJ(dy_deactBPr)s(imAr)m(ch)h FP(pe)l(r)5 b(fo)-7 b(r)5 b(ms)0 1894 y(this)72 b(s)m(e)l(rvic)-6 b(e)74 b(wh)l(en)h FM(D)8 b(Y)g(L)g(P)79 b FP(is)73 b(a)-8 b(tte)n(mpti)s(n)n(g)70 b(to)j(fo)-7 b(r)q(c)h(e)74 b(pr)s(i)s(mal)f(feas)n(ibility)f(by)h(d)-5 b(ea)n(c)g(tiv)r(a)d(ti)s(n)n(g)70 b(i)s(nfeas)n(ib)l(l)n(e)k(bas)n(ic) 0 2093 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)253 2392 y FM(D)8 b(Y)g(L)g(P)53 b FP(pr)q(ovid)-5 b(e)o(s)47 b(n)m(o)e(me)-7 b(th)n(od)47 b(fo)-7 b(r)47 b(a)n(c)-5 b(tiv)r(a)d(ti)s(n)n(g)45 b(an)h(ar)q(c)-7 b(hitec)i(t)l(ural)47 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g (i)s(nto)f(th)l(e)h(bas)n(ic)g(partitio)l(n.)62 b(Wh)l(en)0 2591 y(a)n(c)-5 b(tiv)r(a)d(ti)s(n)n(g)62 b(a)j(c)l(o)l(ns)-5 b(trai)s(nt,)65 b(th)l(e)f(l)n(og)t(ical)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)h (as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)63 b(with)g(th)l(e)h(c)l(o)l(ns)-5 b(trai)s(nt)63 b(is)h(always)g(u)-7 b(s)m(e)l(d)64 b(as)h(th)l(e)0 2791 y(n)n(ew)52 b(bas)n(ic)i(v)r(ar)s(i)s(a)l(b)l(l)n(e.)0 3383 y Fu(15.2)197 b(Ac)-10 b(tiva)g(tio)-5 b(n)64 b(of)i(V)-15 b(ar)r(iab)-5 b(les)4 3803 y FM(D)8 b(Y)g(L)g(P)81 b FP(l)n(ooks)76 b(fo)-7 b(r)76 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(to)g (a)n(c)-5 b(tiv)r(a)d(te)75 b(wh)l(en)n(eve)l(r)g(o)-5 b(pti)s(mality)74 b(is)i(a)-8 b(tt)s(ai)s(n)n(e)l(d)76 b(fo)-7 b(r)76 b(th)l(e)f(curr)q(ent)g(s)m(e)-7 b(t)76 b(of)f(c)l(o)l(n-)0 4002 y(s)-5 b(trai)s(nts)70 b(and)f(v)r(ar)s(i)s(a) l(b)l(l)n(e)o(s,)74 b(o)-7 b(r)70 b(wh)l(en)e(th)l(e)h(a)n(c)-5 b(tive)70 b(sys)-5 b(te)n(m)69 b(is)h(fo)-5 b(und)68 b(to)i(be)g(i)s(nfeas)n(ib)l(l)n(e.)116 b(T)8 b(h)l(e)69 b(s)m(e)-7 b(t)70 b(of)g(i)s(na)n(c)-5 b(tive)0 4201 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)57 b(is)f(scann)n(e)l(d)g(and)f(any)g (v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(with)e(fa)-7 b(vo)i(ura)l(b)l(l)n(e) 55 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)56 b(c)l(os)-5 b(ts)56 b(ar)q(e)g(a)n(c)-5 b(tiv)r(a)d(te)l(d)55 b(and)h(pla)n(c)-6 b(e)l(d)55 b(i)s(n)0 4400 y(th)l(e)d(pr)s(i)s(mal)h(n)m(o)l(n)m(bas)n (ic)f(partitio)l(n.)249 4699 y(If)80 b(an)g(o)-5 b(pti)s(mal)79 b(s)n(o)-5 b(l)n(u)l(tio)l(n)78 b(has)h(been)h(fo)-5 b(und)78 b(fo)-7 b(r)80 b(th)l(e)f(a)n(c)-5 b(tive)80 b(c)l(o)l(ns)-5 b(trai)s(nt)79 b(sys)-5 b(te)n(m)79 b(by)g(eith)l(e)l (r)g(pr)s(i)s(mal)h(o)-7 b(r)0 4898 y(d)g(ual)80 b(s)n(i)s(mpl)n(e)-5 b(x,)89 b FJ(scanPr)s(imV)-16 b(arStdAct)81 b FP(is)g(call)n(e)l(d)g (to)g(s)m(e)l(l)n(ec)-5 b(t)81 b(a)g(s)m(e)-7 b(t)81 b(of)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(to)f(be)g(a)n(c)-5 b(tiv)r(a)d(te)l(d)80 b(und)-5 b(e)l(r)80 b(th)l(e)0 5098 y(as)-5 b(s)d(umptio)l(n)50 b(tha)-8 b(t)52 b(pr)s(i)s(mal)g(p)-6 b(has)m(e)51 b(II)i(ite)l(ra)-8 b(tio)l(ns)50 b(will)h(r)q(e)o(s)-8 b(ume)52 b(afte)l(r)g(th)l(e)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(ar)q(e) f(a)-6 b(dd)h(e)l(d.)65 b(T)8 b(h)l(e)52 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)0 5297 y(c)l(os)h(ts)46 b(ar)q(e)g(calcu)l(la)-8 b(te)l(d)45 b(u)-7 b(s)n(i)s(n)n(g)46 b(th)l(e)f(o)-7 b(r)s(ig)t(i)s(nal)45 b(o)-8 b(bj)l(ec)j(tive)46 b(func)-5 b(tio)l(n)44 b(fo)-7 b(r)46 b(th)l(e)f(pr)q(o)-8 b(b)l(l)n(e)n(m.)62 b(V)-11 b(ar)s(i)s(a)l(b)l(l)n(e)o(s)47 b(ar)q(e)f(s)m(e)l(l)n(ec)-5 b(te)l(d)46 b(fo)-7 b(r)0 5496 y(a)n(c)i(tiv)r(a)d(tio)l(n)51 b(if)h(th)l(eir)f(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)52 b(c)l(os)-5 b(t)52 b(i)s(ndica)-8 b(te)o(s)53 b(th)l(ey)e(ar)q(e)i(n)m(ot)e(a)-8 b(t)52 b(th)l(eir)g(o)-5 b(pti)s(mal)52 b(bo)-5 b(und)51 b(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)52 b(d)-7 b(ual)51 b(i)s(nfeas)n(ib)l(l)n(e\).)249 5795 y(If)69 b(p)-6 b(has)m(e)67 b(I)i(of)f(th)l(e)f(pr)s(i)s(mal)h(s)n(i)s(mpl)n(e)-5 b(x)69 b(has)f(fo)-5 b(und)67 b(th)l(e)h(pr)q(o)-8 b(b)l(l)n(e)n(m)66 b(to)i(be)h(i)s(nfeas)n(ib)l(l)n(e,)j FJ(scanPr)s(imV)-16 b(arStdAct)68 b FP(is)0 5994 y(agai)s(n)50 b(u)-7 b(s)m(e)l(d)51 b(to)g(s)m(e)l(l)n(ec)-5 b(t)51 b(th)l(e)f(s)m(e)-7 b(t)52 b(of)e(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(to)f(be)g(a)n(c)-5 b(tiv)r(a)d(te)l(d,)50 b(b)-8 b(u)l(t)50 b(th)l(e)g(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)50 b(c)l(os)-5 b(ts)51 b(ar)q(e)h(calcu)l(la)-8 b(te)l(d)50 b(u)-7 b(s)n(i)s(n)n(g)0 6194 y(th)l(e)56 b(p)-6 b(has)m(e)57 b(I)g(o)-8 b(bj)l(ec)j(tive)56 b(\(as)h(d)-5 b(e)o(sc)d(r)s(ibe)l(d)57 b(i)s(n)f(\24714.2\).)77 b(Pr)s(i)s(mal)57 b(p)-6 b(has)m(e)56 b(I)h(ite)l(ra)-8 b(tio)l(ns)56 b(r)q(e)o(s)-8 b(ume)56 b(afte)l(r)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(ar)q(e)0 6393 y(a)-6 b(dd)h(e)l(d.)249 6692 y(No)e(r)5 b(mally)-17 b(,)83 b(wh)l(en)76 b(d)-7 b(ual)77 b(s)n(i)s(mpl)n(e)-5 b(x)78 b(i)s(ndica)-8 b(te)o(s)77 b(o)-5 b(pti)s(mality)-17 b(,)83 b(pr)s(i)s(mal)78 b(p)-6 b(has)m(e)77 b(II)h(is)g(e)-5 b(xecu)l(te)l(d)77 b(afte)l(r)h(a)-6 b(ddi)s(n)n(g)0 6891 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)63 b(with)e(fa)-7 b(vo)i(ura)l(b)l(l)n(e)62 b(\(d)-7 b(ual)62 b(i)s(nfeas)n(ib)l(l)n(e\)) g(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)62 b(c)l(os)-5 b(ts.)95 b(It)62 b(can)h(ha)-6 b(p)e(pen,)63 b(h)n(oweve)l(r)-9 b(,)64 b(tha)-8 b(t)62 b(th)l(e)l(r)q(e)g(ar)q(e)0 7090 y(n)m(o)44 b(s)-8 b(u)j(c)e(h)45 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)63 b(In)45 b(this)f(cas)m(e,)51 b FM(D)8 b(Y)g(L)g(P)51 b FP(will)44 b(a)-8 b(tte)n(mpt)44 b(to)h(a)-6 b(dd)45 b(vio)-5 b(la)d(te)l(d)44 b(c)l(o)l(ns)-5 b(trai)s(nts)44 b(and,)i(if)f(any)f(ar)q(e)h(fo)-5 b(und,)0 7289 y(r)q(e)o(s)d(ume)65 b(e)-5 b(xecu)l(tio)l(n)63 b(of)i(d)-7 b(ual)63 b(s)n(i)s(mpl)n(e)-5 b(x.)102 b(T)r(o)65 b(i)s(nc)-8 b(r)q(eas)m(e)64 b(th)l(e)g(like)l(lih) n(ood)f(tha)-8 b(t)64 b(th)l(e)g(d)-7 b(ual)64 b(pr)q(o)-8 b(b)l(l)n(e)n(m)63 b(will)h(r)q(e)n(mai)s(n)0 7489 y(bo)-5 b(und)g(e)l(d,)71 b FM(D)8 b(Y)g(L)g(P)72 b FP(will)64 b(agai)s(n)h(a)-8 b(tte)n(mpt)65 b(to)g(a)-6 b(dd)66 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(be)l(fo)-7 b(r)q(e)66 b(r)q(e)o(s)-8 b(um)s(i)s(n)n(g)65 b(d)-7 b(ual)64 b(s)n(i)s(mpl)n(e)-5 b(x)67 b(ite)l(ra)-8 b(tio)l(ns,)67 b(b)-8 b(u)l(t)0 7688 y(th)l(e)53 b(c)-8 b(r)s(ite)l(r)s(i)s(a)55 b(i)s(n)f(this)f(cas)m (e)i(will)d(be)j(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)f(wh)n(os)m(e)f(r)q(e)l (d)-7 b(u)i(c)f(e)l(d)54 b(c)l(os)-5 b(ts)54 b(ar)q(e)g(d)-7 b(ual)53 b(feas)n(ib)l(l)n(e)i(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)54 b(unfa)-7 b(vo)i(ura)l(b)l(l)n(e)0 7887 y(fr)q(o)n(m)53 b(a)g(pr)s(i)s(mal)g(pe)l(rs)-8 b(pec)j(tive\).)249 8186 y(Ac)g(tiv)r(a)d(ti)s(n)n(g)64 b(a)j(v)r(ar)s(i)s(a)l(b)l(l)n(e)f (i)s(nto)g(th)l(e)g(n)m(o)l(n)m(bas)n(ic)e(partitio)l(n)h(will)g(n)m (ot)g(c)-7 b(han)n(g)n(e)65 b(to)h(th)l(e)f(bas)n(is,)70 b(pr)s(i)s(mal)d(o)-7 b(r)66 b(d)-7 b(ual)0 8385 y(v)r(ar)s(i)s(a)l(b)l (l)n(e)71 b(v)r(al)n(u)l(e)o(s,)k(o)-7 b(r)70 b(DSE)f(pr)s(ic)m(i)s(n)n (g)g(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n.)115 b(T)8 b(h)l(e)70 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)70 b(c)l(os)-5 b(t)70 b(and)g(th)l(e)g(pr)q(oj)l(ec)-5 b(te)l(d)69 b(c)l(o)-5 b(l)n(umn)70 b(n)m(o)-7 b(r)5 b(m)0 8585 y(u)-7 b(s)m(e)l(d)84 b(fo)-7 b(r)84 b(PSE)e(pr)s(ic)m(i)s(n)n(g)h(m)l(u)-7 b(s)i(t)84 b(be)g(pr)q(o)-5 b(pe)l(rly)82 b(i)s(niti)s(alis)m(e)l(d)h (fo)-7 b(r)84 b(th)l(e)g(n)n(ew)f(v)r(ar)s(i)s(a)l(b)l(l)n(e.)159 b(T)8 b(h)l(e)83 b(a)n(c)-5 b(tio)l(n)83 b(t)s(aken)h(fo)-7 b(r)0 8784 y(th)l(e)62 b(pr)q(oj)l(ec)-5 b(te)l(d)62 b(c)l(o)-5 b(l)n(umn)62 b(n)m(o)-7 b(r)5 b(m)62 b(d)-5 b(e)e(pends)63 b(o)l(n)e(th)l(e)i(c)l(o)l(nte)-5 b(xt)61 b(of)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(a)n(c)-5 b(tiv)r(a)d(tio)l(n.)93 b(If)63 b(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x)63 b(was)0 8983 y(e)-5 b(xecu)l(ti)s(n)n(g)59 b(pr)s(io)-7 b(r)61 b(to)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(a)n(c)-5 b(tiv)r(a)d(tio)l(n)59 b(and)h(will)f(be)i(r)q(e)o(s)-8 b(ume)l(d)61 b(afte)l(r)f(v)r(ar)s(i)s (a)l(b)l(l)n(e)i(a)n(c)-5 b(tiv)r(a)d(tio)l(n,)60 b(th)l(e)h(pr)q(oj)l (ec)-5 b(te)l(d)0 9182 y(c)l(o)g(l)n(umn)43 b(n)m(o)-7 b(r)5 b(ms)44 b(ar)q(e)g(u)-6 b(p-to-da)e(te)44 b(and)g(c)l(o)-7 b(rr)q(ec)i(t)44 b(v)r(al)n(u)l(e)o(s)g(m)l(u)-7 b(s)i(t)44 b(be)h(calcu)l(la)-8 b(te)l(d)43 b(fo)-7 b(r)44 b(th)l(e)g(n)n(ew)f(v)r (ar)s(i)s(a)l(b)l(l)n(e)o(s.)63 b(In)44 b(oth)l(e)l(r)0 9382 y(cas)m(e)o(s,)63 b(PSE)c(pr)s(ic)m(i)s(n)n(g)g(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)59 b(will)g(be)i(i)s(niti)s(alis)m(e)l(d)e(wh)l (en)g(pr)s(i)s(mal)h(s)n(i)s(mpl)n(e)-5 b(x)62 b(ite)l(ra)-8 b(tio)l(ns)59 b(r)q(e)o(s)-8 b(ume)60 b(and)g(n)m(o)0 9581 y(a)n(c)-5 b(tio)l(n)52 b(is)h(r)q(eq)l(uir)q(e)l(d.)249 9880 y(If)h(th)l(e)f(d)-7 b(ual)53 b(s)n(i)s(mpl)n(e)-5 b(x)54 b(has)f(fo)-5 b(und)53 b(th)l(e)g(pr)q(o)-8 b(b)l(l)n(e)n(m)52 b(to)i(be)f(pr)s(i)s(mal)h(i)s(nfeas)n(ib)l(l)n(e)g(\(d)-7 b(ual)52 b(un)m(bo)-5 b(und)g(e)l(d\),)51 b(th)l(e)i(pr)q(o)-8 b(b-)0 10079 y(l)n(e)n(m)67 b(of)g(s)m(e)l(l)n(ec)-5 b(ti)s(n)n(g)66 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(to)f(a)-6 b(dd)67 b(s)-8 b(h)n(o)j(u)l(ld)65 b(be)j(viewe)l(d)e(fr)q(o)n(m)h(th)l (e)g(pe)l(rs)-8 b(pec)j(tive)67 b(of)g(l)n(ooki)s(n)n(g)e(fo)-7 b(r)67 b(d)-7 b(ual)66 b(c)l(o)l(n-)0 10278 y(s)-5 b(trai)s(nts)61 b(whic)-7 b(h)59 b(will)h(bo)-5 b(und)59 b(th)l(e)h(pr)q(o)-8 b(b)l(l)n(e)n(m.)88 b(T)8 b(h)l(e)61 b(goal)f(is)h(to)f(a)n(c)-5 b(tiv)r(a)d(te)61 b(o)l(n)n(e)f(o)-7 b(r)61 b(mo)-7 b(r)q(e)61 b(d)-7 b(ual)60 b(c)l(o)l(ns)-5 b(trai)s(nts)60 b(and)0 10478 y(r)q(e)-7 b(t)l(ur)5 b(n)52 b(to)h(d)-7 b(ual)52 b(s)n(i)s(mpl)n(e)-5 b(x)53 b(ite)l(ra)-8 b(tio)l(ns.)3771 11400 y(59)p eop end %%Page: 60 63 TeXDict begin 60 62 bop 249 466 a FP(T)8 b(h)l(e)65 b(s)m(e)l(l)n(ec)-5 b(tio)l(n)64 b(of)h(th)l(e)g(candida)-8 b(te)64 b(ente)l(r)s(i)s(n)n(g) g(d)-7 b(ual)64 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h FG(y)4709 491 y Fz(i)4824 466 y FP(\(l)n(ea)-7 b(vi)s(n)n(g)64 b(pr)s(i)s(mal)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)71 b FG(x)6898 491 y Fz(i)6947 466 y FP(\))66 b(has)f(\002xe)l(d)0 665 y(th)l(e)73 b(dir)q(ec)-5 b(tio)l(n)72 b(of)h(tra)-7 b(ve)l(l,)80 b FH(z)1990 690 y Fz(i)2041 665 y FP(.)127 b(T)8 b(h)l(e)73 b(be)o(s)-5 b(t)73 b(o)-5 b(u)l(tc)l(o)n(me)73 b(will)g(be)g(to)g(a)-6 b(dd)73 b(d)-7 b(ual)73 b(c)l(o)l(ns)-5 b(trai)s(nts)72 b(\(pr)s(i)s(mal)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s\))0 865 y(whic)-7 b(h)54 b(b)l(l)n(oc)-8 b(k)54 b(tra)-7 b(ve)l(l)54 b(i)s(n)h(th)l(e)f(dir)q(ec)-5 b(tio)l(n)56 b FH(z)2883 890 y Fz(i)2933 865 y FP(.)72 b(If)56 b(tha)-8 b(t)54 b(isn't)f(pos)-5 b(s)n(ib)l(l)n(e)56 b(\()r(beca)-8 b(u)h(s)m(e)55 b(a)n(c)-5 b(tiv)r(a)d(ti)s(n)n(g)53 b(any)h(bo)-5 b(undi)s(n)n(g)52 b(d)-7 b(ual)0 1064 y(c)l(o)l(ns)i(trai)s(nt)59 b(wo)-5 b(u)l(ld)59 b(r)q(e)o(s)-8 b(u)l(lt)59 b(i)s(n)h(th)l(e)g(l)n (os)-5 b(s)60 b(of)g(d)-7 b(ual)60 b(feas)n(ibility\))f(a)h(s)m(ec)l(o) l(nd)g(pos)-5 b(s)n(ibility)59 b(is)h(to)g(a)n(c)-5 b(tiv)r(a)d(te)59 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)0 1263 y(whic)-7 b(h)80 b(will)g(c)-7 b(han)n(g)n(e)80 b(th)l(e)g(d)-7 b(ual)81 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)80 b(c)l(os)-5 b(ts)82 b(\(th)l(e)e(v)r(al)n(u)l(e)o(s)i(of)f(th)l(e)g(pr)s(i)s(mal)g(bas)n (ic)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s\))g(s)n(o)e(tha)-8 b(t)81 b(a)0 1462 y(dif)n(fe)l(r)q(ent)60 b(d)-7 b(ual)59 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h FG(y)1947 1487 y Fz(k)2092 1462 y FP(is)h(s)m(e)l(l)n(ec)-5 b(te)l(d)60 b(to)h(ente)l(r)-10 b(.)87 b(T)8 b(h)l(e)60 b(h)n(o)-5 b(pe)60 b(is)g(tha)-8 b(t)60 b(motio)l(n)f(i)s(n)h(a)h(dif)n(fe)l(r)q(ent)f(dir)q(ec)-5 b(tio)l(n)61 b FH(z)7715 1487 y Fz(k)0 1662 y FP(may)53 b(make)f(it)h(pos)-5 b(s)n(ib)l(l)n(e)53 b(to)g(a)n(c)-5 b(tiv)r(a)d(te)52 b(c)l(o)l(ns)-5 b(trai)s(nts)52 b(whic)-7 b(h)52 b(will)f(bo)-5 b(und)52 b(th)l(e)g(d)-7 b(ual)52 b(with)n(o)-5 b(u)l(t)51 b(l)n(os)-5 b(s)54 b(of)f(feas)n(ibility)-17 b(.)249 1960 y(T)8 b(h)l(e)65 b(s)-8 b(u)h(b)i(r)q(o)g(u)l(ti)s(n)n(e) 64 b FJ(dy_dualaddv)l(ar)s(s)i FP(c)l(o)l(ntr)q(o)-5 b(ls)64 b(th)l(e)h(s)m(ear)q(c)-7 b(h)65 b(pr)q(oc)-6 b(e)o(s)h(s,)69 b(and)c(can)g(a)n(c)-5 b(tiv)r(a)d(te)65 b(thr)q(ee)g(clas)-5 b(s)m(e)o(s)66 b(of)0 2160 y(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s,)54 b(fo)-7 b(r)53 b(c)l(o)l(nvenienc)-6 b(e)51 b(call)n(e)l(d)i(type)g(1,)f(type)h(2,)g(and)f(type)g(3.)249 2459 y(Type)67 b(1)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(ar)q(e)f(th)n(os) m(e)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(whic)-7 b(h)66 b(c)l(o)l(ns)-5 b(tit)l(u)l(te)66 b(feas)n(ib)l(l)n(e)i(d)-7 b(ual)66 b(c)l(o)l(ns)-5 b(trai)s(nts)67 b(whic)-7 b(h)65 b(bo)-5 b(und)0 2658 y(th)l(e)70 b(d)-7 b(ual)69 b(pr)q(o)-8 b(b)l(l)n(e)n(m.)117 b(T)8 b(h)l(e)o(s)m(e)70 b(can)g(be)g(a)n(c)-5 b(tiv)r(a)d(te)l(d)70 b(and)f(pla)n(c)-6 b(e)l(d)70 b(i)s(n)g(th)l(e)g (pr)s(i)s(mal)g(n)m(o)l(n)m(bas)n(ic)f(partitio)l(n)g(with)n(o)-5 b(u)l(t)0 2857 y(l)n(os)n(i)s(n)n(g)54 b(d)-7 b(ual)53 b(feas)n(ibility)-17 b(.)71 b(Type)54 b(1)g(v)r(ar)s(i)s(a)l(b)l(l)n(e) o(s)h(ar)q(e)g(pr)q(e)l(fe)l(rr)q(e)l(d,)g(as)g FJ(dy_dualaddv)l(ar)s (s)g FP(can)f(a)n(c)-5 b(tiv)r(a)d(te)54 b(any)g(n)n(umbe)l(r)0 3056 y(of)f(th)l(e)n(m)f(i)s(n)g(a)h(g)t(iven)f(call.)249 3355 y(If)d(th)l(e)l(r)q(e)e(ar)q(e)i(n)m(o)e(type)h(1)g(v)r(ar)s(i)s (a)l(b)l(l)n(e)o(s,)i FJ(dy_dualaddv)l(ar)s(s)f FP(c)l(o)l(ns)n(id)-5 b(e)l(rs)48 b(type)f(2)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)65 b(Type)48 b(2)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(ar)q(e)0 3554 y(th)n(os)m(e)58 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(whic)-7 b(h)57 b(c)l(o)l(ns)-5 b(tit)l(u)l(te)57 b(d)-7 b(ual)57 b(c)l(o)l(ns)-5 b(trai)s(nts)57 b(tha)-8 b(t)58 b(bo)-5 b(und)57 b(th)l(e)h(d)-7 b(ual)57 b(pr)q(o)-8 b(b)l(l)n(e)n(m)57 b(and)h(whic)-7 b(h,)58 b(whil)n(e)0 3754 y(n)m(ot)h(d)-7 b(ual)59 b(feas)n(ib)l(l)n(e)i(if)f(a)n(c)-5 b(tiv)r(a)d(te)l(d)60 b(i)s(nto)f(th)l(e)h(pr)s(i)s(mal)g(n)m(o)l(n)m(bas)n(ic)f(partitio)l (n,)h(will)f(g)t(ive)h(a)h(d)-7 b(ual)59 b(feas)n(ib)l(l)n(e)i(s)n(o)-5 b(l)n(u)l(tio)l(n)0 3953 y(if)61 b(a)n(c)-5 b(tiv)r(a)d(te)l(d)60 b(and)g(i)s(mme)l(di)s(a)-8 b(te)l(ly)60 b(pivote)l(d)h(i)s(nto)f(th)l (e)g(bas)n(is.)91 b(T)8 b(his)60 b(is)h(eq)l(uiv)r(al)n(ent)g(to)f(a)-6 b(ddi)s(n)n(g)60 b(a)h(cu)l(tti)s(n)n(g)e(plan)n(e)0 4152 y(whic)-7 b(h)70 b(r)q(end)-5 b(e)l(rs)71 b(th)l(e)g(curr)q(ent)g (s)n(o)-5 b(l)n(u)l(tio)l(n)69 b(i)s(nfeas)n(ib)l(l)n(e)j(and)f(e)-5 b(xecu)l(ti)s(n)n(g)70 b(a)i(s)n(i)s(n)n(gl)n(e)f(pivot)g(to)g(r)q(e)-5 b(gai)s(n)71 b(feas)n(ibility;)0 4351 y(n)n(ec)-6 b(e)o(s)h(sar)s(ily) -17 b(,)85 b(th)l(e)77 b(o)-8 b(bj)l(ec)j(tive)77 b(will)g(d)-5 b(e)e(te)l(r)s(io)g(ra)f(te.)140 b(In)78 b(th)l(e)f(c)l(o)l(nte)-5 b(xt)77 b(of)g(T)s(a)l(b)l(l)n(e)h(1)f(i)s(n)h(\24713.5,)83 b(this)77 b(amo)-5 b(unts)77 b(to)0 4551 y(s)m(e)l(l)n(ec)-5 b(ti)s(n)n(g)51 b(a)h(pivot)g(with)e(th)l(e)i(s)n(igns)f(of)p 2719 4450 90 7 v 54 w FG(c)2821 4576 y Fz(j)2919 4551 y FP(and)p 3279 4450 117 7 v 53 w FG(a)3395 4576 y Fz(i)23 b(j)3549 4551 y FP(r)q(eve)l(rs)m(e)l(d.)65 b(T)8 b(h)l(e)51 b(pivot)h(is)g(s)-8 b(u\002)-49 b(\002c)m(iently)50 b(s)n(i)s(m)s(ilar) i(to)g(a)g(n)m(o)-7 b(r)5 b(mal)0 4750 y(d)-7 b(ual)62 b(pivot)h(tha)-8 b(t)63 b(it)g(can)g(be)h(handl)n(e)l(d)e(by)h FJ(dy_dualpiv)l(ot)p FP(.)96 b(It)63 b(is)h(n)m(ot)e(s)-5 b(t)s(andar)q(d)63 b(i)s(n)g(tha)-8 b(t)62 b(th)l(e)h(ente)l(r)s(i)s(n) n(g)f(pr)s(i)s(mal)0 4949 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)76 b(will)e(move)i(a)-7 b(way)74 b(fr)q(o)n(m)i(its)f(bo)-5 b(und)74 b(towar)q(d)h(th)l(e)g(i)s(nfeas)n(ib)l(l)n(e)g(s)n(id)-5 b(e)76 b(\()p FG(e)p FP(.)p FG(g)p FP(.,)85 b FG(x)6139 4974 y Fz(j)6259 4949 y FP(wo)-5 b(u)l(ld)74 b(ente)l(r)h(falli)s(n)n (g)0 5148 y(fr)q(o)n(m)59 b(its)h(l)n(owe)l(r)e(bo)-5 b(und)58 b(with)p 2162 5048 90 7 v 60 w FG(c)2265 5173 y Fz(j)2356 5148 y FP(<)45 b(0)59 b(and)p 3031 5048 117 7 v 61 w FG(a)3147 5173 y Fz(i)23 b(j)3295 5148 y FP(>)45 b(0\).)84 b(On)n(e)59 b(s)-8 b(u)j(c)e(h)59 b(v)r(ar)s(i)s(a)l(b)l(l)n (e)h(can)f(be)g(a)n(c)-5 b(tiv)r(a)d(te)l(d)59 b(o)l(n)f(ea)n(c)-7 b(h)59 b(call)g(to)0 5348 y FJ(dy_dualaddv)l(ar)s(s)p FP(.)249 5647 y(In)42 b(th)l(e)g(a)l(bs)m(enc)-6 b(e)42 b(of)g(type)g(1)g(o)-7 b(r)42 b(type)g(2)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o (s,)j(type)c(3)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)f(ar)q(e)h(c)l(o)l(ns)n (id)-5 b(e)l(r)q(e)l(d.)61 b(T)8 b(h)l(e)o(s)m(e)42 b(ar)q(e)g(v)r(ar)s (i)s(a)l(b)l(l)n(e)o(s)0 5846 y(whic)-7 b(h)65 b(ar)q(e)h(n)m(ot)g(d)-7 b(ual)65 b(feas)n(ib)l(l)n(e)i(a)-8 b(t)66 b(th)l(eir)f(curr)q(ent)h (bo)-5 b(und)65 b(b)-8 b(u)l(t)65 b(whic)-7 b(h)65 b(will)g(r)q(e)l(d) -7 b(u)i(c)f(e)66 b(th)l(e)f(i)s(nfeas)n(ibility)h(of)g(th)l(e)0 6045 y(l)n(ea)-7 b(vi)s(n)n(g)82 b(pr)s(i)s(mal)i(v)r(ar)s(i)s(a)l(b)l (l)n(e)f(if)g(a)n(c)-5 b(tiv)r(a)d(te)l(d)83 b(and)g(c)-7 b(han)n(g)n(e)l(d)81 b(to)i(th)l(eir)f(o)-5 b(p)d(pos)n(ite)83 b(bo)-5 b(und.)156 b(T)8 b(h)l(e)83 b(motiv)r(a)-8 b(tio)l(n)81 b(fo)-7 b(r)0 6244 y(a)n(c)i(tiv)r(a)d(ti)s(n)n(g)68 b(a)i(type)g(3)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(is)g(tha)-8 b(t)70 b(it)g(make)o(s)g(th)l(e)g(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)69 b(c)l(os)-5 b(t)70 b(of)f FG(y)5409 6269 y Fz(i)5529 6244 y FP(l)n(e)o(s)-5 b(s)71 b(d)-5 b(e)o(s)n(ira)l(b)l(l)n(e,)75 b(s)n(o)70 b(tha)-8 b(t)69 b(s)n(o)n(me)0 6444 y(oth)l(e)l(r)64 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h FG(y)1287 6469 y Fz(k)1437 6444 y FP(can)g(be)h(s)m(e)l(l)n(ec)-5 b(te)l(d)65 b(to)g(ente)l(r)g (\(thu)-7 b(s)65 b(movi)s(n)n(g)f(i)s(n)h(a)h(dif)n(fe)l(r)q(ent)f(dir) q(ec)-5 b(tio)l(n)66 b FH(z)6561 6469 y Fz(k)6646 6444 y FP(\).)103 b(T)8 b(h)l(e)65 b(r)q(o)-5 b(u)l(ti)s(n)n(e)0 6643 y FJ(type3activ)l(ate)55 b FP(will)g(a)-8 b(tte)n(mpt)56 b(to)g(a)n(c)-5 b(tiv)r(a)d(te)56 b(as)h(many)f(type)g(3)g(v)r(ar)s(i)s (a)l(b)l(l)n(e)o(s)i(as)f(r)q(eq)l(uir)q(e)l(d)f(i)s(n)g(o)-7 b(r)q(d)i(e)l(r)56 b(to)h(c)-7 b(han)n(g)n(e)55 b(th)l(e)0 6842 y(ente)l(r)s(i)s(n)n(g)c(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n (e)g FG(y)1918 6867 y Fz(i)1968 6842 y FP(.)249 7141 y(Ac)-5 b(tiv)r(a)d(tio)l(n)62 b(of)h(type)g(2)g(o)-7 b(r)64 b(type)f(3)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(is)e(g)n(en)n(e)l (rally)f(n)m(ot)g(c)l(os)-5 b(t-e)l(f)n(fec)g(tive.)99 b(By)63 b(d)-5 b(e)l(fa)d(u)l(lt,)69 b FM(D)8 b(Y)g(L)g(P)69 b FP(li)s(m)s(its)0 7340 y FJ(dy_dualaddv)l(ar)s(s)53 b FP(to)g(type)g(1)f(a)n(c)-5 b(tiv)r(a)d(tio)l(ns.)64 b(T)8 b(h)l(e)53 b(dy)7 b(nam)s(ic)51 b(s)n(i)s(mpl)n(e)-5 b(x)54 b(algo)-7 b(r)s(ithm)52 b(will)f(r)q(eve)l(rt)i(to)g(pr)s(i)s (mal)g(p)-6 b(has)m(e)53 b(I)0 7540 y(if)e(n)m(o)g(type)f(1)h(v)r(ar)s (i)s(a)l(b)l(l)n(e)o(s)i(e)-5 b(x)10 b(is)-5 b(t.)64 b(An)51 b(o)-5 b(ptio)l(n)50 b(all)n(ows)h(th)l(e)g(client)f(to)h(s)-8 b(pec)m(ify)51 b(wh)l(e)-7 b(th)l(e)l(r)49 b(type)i(1,)h(type)e(2,)i(o) -7 b(r)51 b(type)g(3)0 7739 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)j(will)d (be)i(c)l(o)l(ns)n(id)-5 b(e)l(r)q(e)l(d.)249 8038 y(Ac)g(tiv)r(a)d (tio)l(n)50 b(of)h(a)h(type)f(1)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(is)f(n)m (o)g(dif)n(fe)l(r)q(ent)f(fr)q(o)n(m)i(any)f(oth)l(e)l(r)f(a)n(c)-5 b(tiv)r(a)d(tio)l(n)50 b(i)s(nto)g(th)l(e)h(n)m(o)l(n)m(bas)n(ic)f (parti-)0 8237 y(tio)l(n,)j(as)i(d)-5 b(e)o(sc)d(r)s(ibe)l(d)54 b(a)l(bove.)69 b(Fo)-7 b(r)54 b(type)g(2)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)o (s,)i(th)l(e)f(pivot)g(will)f(ca)-8 b(u)h(s)m(e)54 b(a)g(c)-7 b(han)n(g)n(e)53 b(of)g(bas)n(is.)70 b FJ(dy_dualpiv)l(ot)0 8436 y FP(will)55 b(t)s(ake)h(car)q(e)h(of)f(th)l(e)f(r)q(eq)l(uir)q(e) l(d)g(calcu)l(la)-8 b(tio)l(ns)55 b(and)g(u)-6 b(pda)e(te)o(s)56 b(i)s(n)g(th)l(e)f(c)l(o)l(nte)-5 b(xt)55 b(of)h(d)-7 b(ual)55 b(s)n(i)s(mpl)n(e)-5 b(x.)76 b(Fo)-7 b(r)56 b(type)f(3)0 8635 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)83 b(th)l(e)77 b(bas)n(is)g(doe)o(sn't)f(c)-7 b(han)n(g)n(e,)81 b(and)76 b(th)l(e)g(v)r(al)n(u)l(e)o(s)h(of)g(th)l(e)f(d)-7 b(ual)76 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(and)f(DSE)g(n)m(o)-7 b(r)5 b(ms)76 b(ar)q(e)0 8835 y(unc)-7 b(han)n(g)n(e)l(d.)106 b(T)8 b(h)l(e)66 b(v)r(al)n(u)l(e)o(s)i(of)f(th)l(e)g(pr)s(i)s(mal)g(v) r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(do)f(c)-7 b(han)n(g)n(e,)69 b(h)n(oweve)l(r)-9 b(,)70 b(and)c(this)h(c)-7 b(han)n(g)n(e)o(s)66 b(th)l(e)g(DSE)0 9034 y(pr)s(ic)m(i)s(n)n(g)51 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n.)0 9627 y Fu(15.3)197 b(Dea)m(c)-10 b(tiva)g(tio)-5 b(n)62 b(of)67 b(V)-15 b(ar)r(iab)-5 b(les)0 10046 y FP(Dea)n(c)g(tiv)r(a)d(tio)l(n)60 b(of)i(v)r(ar)s(i)s (a)l(b)l(l)n(e)o(s)g(occurs)g(wh)l(en)e(d)-7 b(ual)61 b(s)n(i)s(mpl)n(e)-5 b(x)63 b(\002)s(nds)e(an)h(o)-5 b(pti)s(mal)61 b(s)n(o)-5 b(l)n(u)l(tio)l(n)60 b(fo)-7 b(r)62 b(th)l(e)g(a)n(c)-5 b(tive)61 b(c)l(o)l(n-)0 10245 y(s)-5 b(trai)s(nt)70 b(sys)-5 b(te)n(m)70 b(and)g(v)r(ar)s(i)s(a)l(b)l (l)n(e)h(a)n(c)-5 b(tiv)r(a)d(tio)l(n)69 b(id)-5 b(enti\002e)o(s)70 b(d)-7 b(ual)69 b(i)s(nfeas)n(ib)l(l)n(e)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)o (s)g(fo)-7 b(r)71 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n.)116 b(In)71 b(this)0 10444 y(cas)m(e,)82 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)77 b(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)74 b(is)i(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)76 b(be)l(fo)-7 b(r)q(e)76 b(ente)l(r)s(i)s(n)n (g)e(pr)s(i)s(mal)i(p)-6 b(has)m(e)76 b(II)h(s)n(i)s(mpl)n(e)-5 b(x.)135 b(T)8 b(h)l(e)76 b(s)-8 b(u)h(b)i(r)q(o)g(u-)3771 11400 y(60)p eop end %%Page: 61 64 TeXDict begin 61 63 bop 0 466 a FP(ti)s(n)n(e)74 b FJ(dy_deactiv)l (ateV)-16 b(ar)s(s)74 b FP(is)g(call)n(e)l(d)h(to)f(d)-5 b(ea)n(c)g(tiv)r(a)d(te)73 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(a)n(cc)l (o)-7 b(r)q(di)s(n)n(g)73 b(to)h(a)g(client-s)-8 b(pec)m(i\002e)l(d)73 b(thr)q(e)o(s)-8 b(h)n(o)j(ld,)0 665 y(e)g(xpr)q(e)o(s)g(s)m(e)l(d)53 b(as)g(a)g(pe)l(r)q(c)-6 b(ent)s(ag)n(e)52 b(of)h(th)l(e)g(max)10 b(i)s(m)l(um)52 b(unfa)-7 b(vo)i(ura)l(b)l(l)n(e)51 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)52 b(c)l(os)-5 b(t)53 b(ove)l(r)g(all)g(a)n(c)-5 b(tive)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)249 964 y(Spec)m (i\002cally)-17 b(,)51 b FJ(dy_deactiv)l(ateV)-16 b(ar)s(s)51 b FP(scans)h(th)l(e)f(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)50 b(c)l(os)-5 b(ts)52 b(of)g(th)l(e)f(a)n(c)-5 b(tive)51 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(and)f(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)o(s)53 b(a)0 1163 y(pair)40 b(of)g(v)r(al)n(u)l(e)o(s) 1123 1162 y(\020)1103 1163 y FG(c)g FP(=)92 b(max)1355 1277 y FA({)10 b Fz(k)e FA(:)q Fz(c)1572 1294 y Fk(k)1635 1277 y FA(<)q(0)h(})1843 1156 y FF(|)1878 1163 y FG(c)1961 1188 y Fz(k)2046 1156 y FF(|)2128 1163 y FP(and)2499 1162 y(\210)2479 1163 y FG(c)40 b FP(=)92 b(max)2730 1277 y FA({)10 b Fz(k)e FA(:)q Fz(c)2947 1294 y Fk(k)3011 1277 y FA(>)q(0)h(})3219 1156 y FF(|)3254 1163 y FG(c)3337 1188 y Fz(k)3422 1156 y FF(|)3463 1163 y FP(.)62 b(It)40 b(th)l(en)g(d)-5 b(ea)n(c)g(tiv)r(a)d(te)o(s)40 b(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s)h(with)f FG(c)6304 1188 y Fz(k)6423 1163 y FP(>)6579 1162 y(\210)6559 1163 y FG(c)7 b FP(\()p FJ(dy)p FP(_)q FJ(tols)r FP(.)r FJ(pur)n(ge)m(v)l(ar)m FP(\))0 1451 y(o)-7 b(r)55 b FG(c)297 1476 y Fz(k)425 1451 y FP(<)43 b(\014)690 1450 y(\020)670 1451 y FG(c)7 b FP(\()p FJ(dy)p FP(_)p FJ(tols)r FP(.)r FJ(pur)n(ge)m(v)l(ar)n FP(\).)0 2044 y Fu(15.4)197 b(Initial)65 b(V)-15 b(ar)r(iab)-5 b(le)64 b(Se)-5 b(lec)-10 b(tio)-5 b(n)0 2463 y FP(Fo)e(r)72 b(a)g(c)l(o)-5 b(ld)71 b(s)-5 b(t)s(art,)77 b(th)l(e)71 b(i)s(niti)s(al)g(s)m(e)-7 b(t)72 b(of)f(a)n(c)-5 b(tive)72 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(is)g(c)l(o)n(mpl)n(e)-7 b(te)l(ly)71 b(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)l(d)72 b(by)f(th)l(e)g(i)s(niti)s(al)g(s)m(e)-7 b(t)72 b(of)0 2662 y(c)l(o)l(ns)-5 b(trai)s(nts.)83 b(All)58 b(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s)i(r)q(e)l(fe)l(r)q(enc)-6 b(e)l(d)59 b(i)s(n)f(th)l(e)h(c)l (o)l(ns)-5 b(trai)s(nts)58 b(ar)q(e)h(a)n(c)-5 b(tiv)r(a)d(te)l(d.)83 b(A)8 b(s)59 b(n)m(ote)l(d)f(i)s(n)h(\24711,)h(th)l(e)f(client)0 2861 y(can)52 b(s)m(e)-7 b(t)53 b(parame)-7 b(te)l(rs)53 b(whic)-7 b(h)51 b(will)g(ca)-8 b(u)h(s)m(e)53 b(v)r(ar)s(i)s(a)l(b)l (l)n(e)g(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)50 b(to)j(be)f(e)-5 b(xecu)l(te)l(d)52 b(pr)s(io)-7 b(r)53 b(to)f(s)-5 b(t)s(arti)s(n)n(g) 51 b(s)n(i)s(mpl)n(e)-5 b(x)0 3061 y(ite)l(ra)d(tio)l(ns.)249 3360 y(Fo)h(r)64 b(a)f(h)n(ot)g(s)-5 b(t)s(art,)67 b(th)l(e)c(i)s(niti) s(al)f(s)m(e)-7 b(t)64 b(of)f(a)n(c)-5 b(tive)64 b(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s)g(is)f(th)l(e)g(s)m(e)-7 b(t)64 b(tha)-8 b(t)63 b(was)g(a)n(c)-5 b(tive)63 b(a)-8 b(t)63 b(r)q(e)-7 b(t)l(ur)5 b(n)63 b(fr)q(o)n(m)h(th)l(e)0 3559 y(pr)q(evio)-5 b(u)e(s)53 b(call)g(to)g FJ(dylp)p FP(.)249 3858 y(Fo)-7 b(r)53 b(a)f(war)5 b(m)52 b(s)-5 b(t)s(art,)53 b(th)l(e)f(s)m(e)-7 b(t)53 b(of)f(a)n(c)-5 b(tive)52 b(c)l(o)l(ns)-5 b(trai)s(nts)52 b(is)g(s)-8 b(pec)m(i\002e)l(d)52 b(by)f(th)l(e)h(bas)n(is.)66 b(T)8 b(h)l(e)52 b(i)s(niti)s(al)g(s)m(e)-7 b(t)53 b(of)f(a)n(c)-5 b(tive)0 4057 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)51 b(can)e(be)h(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)l(d)50 b(fr)q(o)n(m)g(th)l(e)f(c)l(o)l (ns)-5 b(trai)s(nts)49 b(as)h(fo)-7 b(r)50 b(a)g(c)l(o)-5 b(ld)50 b(s)-5 b(t)s(art,)51 b(o)-7 b(r)50 b(th)l(e)f(client)g(can)h(s) -8 b(pec)m(ify)49 b(a)h(s)m(e)-7 b(t)0 4256 y(of)53 b(v)r(ar)s(i)s(a)l (b)l(l)n(e)o(s)g(whic)-7 b(h)52 b(s)-8 b(h)n(o)j(u)l(ld)51 b(be)i(a)n(c)-5 b(tiv)r(a)d(te)l(d)52 b(as)i(th)l(e)e(a)n(c)-5 b(tive)53 b(c)l(o)l(ns)-5 b(trai)s(nt)52 b(sys)-5 b(te)n(m)52 b(is)h(c)-8 b(r)q(ea)g(te)l(d.)249 4555 y(A)8 b(s)48 b(n)m(ote)l(d)e(i)s(n)h(\24711,)h(fo)-7 b(r)47 b(a)h(h)n(ot)e(o)-7 b(r)48 b(war)5 b(m)47 b(s)-5 b(t)s(art)47 b(th)l(e)g(client)g(can)g(s)m (e)-7 b(t)47 b(parame)-7 b(te)l(rs)48 b(whic)-7 b(h)46 b(will)g(ca)-8 b(u)h(s)m(e)48 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)0 4754 y(a)n(c)-5 b(tiv)r(a)d(tio)l(n)51 b(to)i(be)g(e)-5 b(xecu)l(te)l(d)52 b(pr)s(io)-7 b(r)53 b(to)g(s)-5 b(t)s(arti)s(n)n(g) 52 b(s)n(i)s(mpl)n(e)-5 b(x)53 b(ite)l(ra)-8 b(tio)l(ns.)3771 11400 y(61)p eop end %%Page: 62 65 TeXDict begin 62 64 bop 0 475 a FL(16)238 b(Co)-6 b(ns)f(traint)78 b(Manage)n(ment)0 959 y FP(Co)l(ns)-5 b(trai)s(nt)78 b(manag)n(e)n(ment)g(a)n(c)-5 b(tivitie)o(s)80 b(can)f(be)h(s)m(e)-7 b(para)f(te)l(d)80 b(i)s(nto)f(s)m(e)l(l)n(ec)-5 b(tio)l(n)79 b(of)h(th)l(e)f(i)s(niti)s(al)g(c)l(o)l(ns)-5 b(trai)s(nt)79 b(s)m(e)-7 b(t,)0 1158 y(a)n(c)i(tiv)r(a)d(tio)l(n)63 b(of)h(vio)-5 b(la)d(te)l(d)64 b(o)-7 b(r)65 b(bo)-5 b(undi)s(n)n(g)62 b(c)l(o)l(ns)-5 b(trai)s(nts,)66 b(and)e(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)63 b(of)i(l)n(oos)m(e)f(c)l(o)l(ns)-5 b(trai)s(nts.)100 b(In)64 b(g)n(en)n(e)l(ral,)0 1357 y(th)l(e)j(goal)h(is)g(to)f(mai)s(nt)s(ai)s(n)h(an)g(a)n(c)-5 b(tive)68 b(c)l(o)l(ns)-5 b(trai)s(nt)66 b(sys)-5 b(te)n(m)68 b(whic)-7 b(h)66 b(is)i(a)g(s)-8 b(u)h(bs)m(e)g(t)68 b(of)f(th)l(e)h(o)-7 b(r)s(ig)t(i)s(nal)67 b(c)l(o)l(ns)-5 b(trai)s(nt)0 1556 y(sys)g(te)n(m,)46 b(c)l(o)l(ns)n(is)-5 b(ti)s(n)n(g)42 b(o)l(nly)h(of)i(eq)l(ualitie)o(s)f(and)g(th)n(os)m(e)g (i)s(n)n(eq)l(ualitie)o(s)g(n)n(ec)-6 b(e)o(s)h(sary)45 b(to)g(d)-5 b(e)l(\002)s(n)n(e)44 b(an)g(o)-5 b(pti)s(mal)44 b(e)-5 b(xtr)q(e)n(me)0 1756 y(poi)s(nt.)94 b FM(D)8 b(Y)g(L)g(P)66 b FP(e)-5 b(xpec)g(ts)62 b(tha)-8 b(t)60 b(all)i(c)l(o)l(ns)-5 b(trai)s(nts)60 b(will)g(be)h(eq)l(ualitie)o(s)g (o)-7 b(r)62 b FF(\243)f FP(i)s(n)n(eq)l(ualitie)o(s.)91 b(Fig)n(ur)q(e)60 b(14)h(s)-8 b(h)n(ows)61 b(th)l(e)0 1955 y(call)53 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)52 b(fo)-7 b(r)53 b(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)51 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)52 b(and)g(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)51 b(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s.)217 4487 y @beginspecial 58 @llx 615 @lly 500 @urx 755 @ury 4420 @rwi @setspecial %%BeginDocument: /devel/Coin/Trunk/Coin-DyLP-FedGCC64/DyLP/doc/Figures/conmgmtcalls.eps %!PS-Adobe-3.0 EPSF-3.0 %%Title: /cs/mitacs1/lou/Bonsai/Doc/Dylp.New/Figures/conmgmt.epsu %%Creator: IslandDraw for lou %%CreationDate: Sat Sep 17 10:49:58 2005 %%Pages: 1 %%BoundingBox: 58 615 500 755 %%DocumentNeededResources: (atend) %%DocumentSuppliedResources: (atend) %%EndComments %%BeginPreview: 553 176 1 352 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000018 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000013 % 000000000000000000000000000000000000000000000003e0080007400007c00c100000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 00000000000000000000000000000000000000000000000110080008c000084804380100000000 % 0000000000000000000000000000000000000000000000000000000000000a % 000000000000000000000000000000000000000000000001100000104000082804280100000000 % 00000000000000000000000000000000000000000000000000000000000006 % 00000000000000000000000000000000000000001af1e6e117db76102f370e1e7c287bc0000000 % 0000000000000000000000000000000000000000000000000000000000005c % 0000000000000000000000000000000000000004258a1311e2099910199883c8c44cc500000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000c3b0072110209111010908028847c8100000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000001807019211020911103090882884468100000000 % 0000000000000000000000000000000000000000000000000000000000005c % 0000000000000000000000000000000000000030238a32118209110851908c488c82c500000000 % 0000000000000000000000000000000000000000000000000000000000003a % 00000000000000000000000000000000000000603cf1df3b871fbb878f39cf8e77c779c0000000 % 0000000000000000000000000000000000000000000000000000000000003a % 00000000000000000000000000000000000000c000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000018000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000030000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000060000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 0000000000000000000000000000000000000c0000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000180000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000300000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000600000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000c00000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000000180000600000000400000079c000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000003000002000000084000100308000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000006000002000000080000100308000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 00000000000000000000000000000000000c00003e7701e3decefe3dc111e7cd00000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000018001c6222021628446113e192121200000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000003000fc423200740846871200a0721d00000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000006007e0421401940842991200e1920300000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 0000000000000000000000000000000000c03f00461402362843231320c2321100000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 00000000c0000000080000001d0000000181f8003b0801dbcee11d9dc041df1e00000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000400000010800040023000000030fc00000080000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000400000010000040041000000067e00000039f800000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000007ddc0787bd9dfcf3840bcdc340ff0000000600000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 0000000c488084c5088c247c406662481f80000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000084c801c8108d0e440404242743c00000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000008450064810853244040c2420c3f00000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000008c5008cc508646464214642441fe0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 0000000762007679dc23b7381e3ce7780efc000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000008 % 00000000020000000000000000000000071f800006000000000040600000000300007000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000e3f000000000000000000000383f000020000000000c0200000000100008000200000 % 00000000000000000000000000000000000000000000000000000000000044 % 0000000018000000000000000000000001c07e00020000000000402b0000000100008000200000 % 0000000000000000000000000000000000000000000000000000000000006c % 0000000000000000000000000000000000e00fc03e7701e3cf1e5c240000001f3b81cf1e79e7c0 % 0000000000000000000000000000000000000000000000000000000000001e % 00000000000000000000000000000000007001f86222021638b1622800000031110090b1233200 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000038003c423200741020423c0ffffe21190083a0221200 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000001c000c4214019410204224000000210a008ca0221200 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000000e00184614023638b14226000000230a0091b1223200 % 0000000000000000000000000000000000000000000000000000000000001e % 00000000000000000000000000000000000700183b0801dbcf1ee7770000001d8401cede39e700 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000003803000080000000000000000000004000000000000 % 0000000000000000000000000000000000000000000000000000000000005b % 000000000000000000000000000000000001c0300039f80000000000000000001c7e0000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000e06000600000000000000000000030000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000706000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000022 % 00000000000000000000000000000000000038c000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 0000000000000000000000000000000000001cc000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 0000000000000000000000000000000000000f8000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003f % 000000000000000000000000000000000000078000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000038000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 00000000000000000000000000000000000003c006000000007e700000f8040003a0000e080000 % 000000c000000007e700001f0080003a000000000006000300000c00000056 % 00000000000000000000000000000000000006e002000000082320000044040004600004080100 % 0000004000000082320000088080004600000000000200010000040000003a % 000000000000000000000000000000000000067002000000082120000644000008200004000100 % 0000004000000082120000c88000008200000000000200010000040000001e % 0000000000000000000000000000000000000c383e7701e3de23203c3847ecdd8813cdc4186bc0 % 000007cee03c79e232078708bf9bb08179b80000003e77011e3c7c79e6e008 % 0000000000000000000000000000000000000c1c62220216283e20664479046648066624089107 % ffff0c444042c483e20cc88f108cc880ccc41ffff86222013342c4c733105c % 000000000000000000000000000000000000180c4232007408212042444104444804242408e907 % ffff0846400e8082120848881088888084841ffff8423201210e848212105c % 000000000000000000000000000000000000181c42140194082121423841044448142424281900 % 0000084280328082121847081088888184840000004214012132848212107f % 000000000000000000000000000000000000303846140236282123464061044444246424688900 % 000008c28046c4821238c80c108888428c8400000046140123468cc632100f % 00000000000000000000000000000000000030303b0801dbce7e7e3c7ce38eeee3c3ce7fdcf1c0 % 00000761003b78e7e7e78f9c39dddc3c79ce0000003b08039e3b7679e7380f % 000000000000000000000000000000000000606000080000000000004600000000000000000000 % 0000000100000000000008c00000000000000000000008000000000000000f % 00000000000000000000000000000000000060e00039f80000000000c600000000000000000000 % 000000071f800000000018c00000000000000000000038fc0000000000000f % 000000000000000000000000000000000000c1c000600000000000007800000000000000000000 % 0000000c0000000000000f000000000000000000000060000000000000000f % 000000000000000000000000000000000000c18000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000001830000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000001870000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 0000000000000000000000000000000000030e0000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 0000000000000000000000000000000000030c0000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000006180000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000006380000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 00000000000000000000000000000000000c700000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 00000000000000000000000000000000000c600000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000018c00000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000019c00000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000033800000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000033000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000e % 000000000000000000000000000000000066000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 00000000000000000000000000000000006e000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 0000000000000000000000000000000000dc000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000007f % 0000000000000000000000000000000000d8000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 0000000000000000000000000000000001b0000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000013 % 0000000000000000000000000000000001f0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 0000000000000000000000000000000003e0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000e % 0000000000000000000000000000000003c0000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000780000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000780000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 030000000010000001f8000c1d0000000f00000000000003e008000740000fc000c08000000000 % 060000e000000000000000000000000000000000000000000000000000000f % 0100000002100008008c0004230000000e0000000000000110080008c00004600041c008000000 % 0200011000000000000000000000000000000000000000000000000000000f % 010000000200000800840004410000001c00000000000001100000104000042000414008000000 % 0200011000000000000000000000000000000000000000000000000000000f % 1f3b80f1e7b7779e708cdc7c40bcdc341c0000001af1e6e117db76102f37046dc7c1479e000000 % 3e7703bdf78dc000000000000000000000000000000000000000000000005e % 3111010b12122848f8f862c44066624838000000258a1311e2099910199887c62c426c48000000 % 6222011088462000000000000000000000000000000000000000000000005e % 2119003a021341c880844284404242743ffffffc3b00721102091110109084242843e8081ffffc % 4232011081c42000000000000000000000000000000000000000000000005e % 210a00ca021146488084428440c2420c3ffffffc070192110209111030908424284238081ffffc % 4214011086442000000000000000000000000000000000000000000000005e % 230a011b121188c8c884428c2146424400000000238a3211820911085190842428c41c48000000 % 4614011088c42000000000000000000000000000000000000000000000005e % 1d8400ede3b8876e71f8e7761e3ce778000000003cf1df3b871fbb878f39cfce776e3f8e000000 % 3b08039dc76e7000000000000000000000000000000000000000000000003f % 000400000000000000000000000000000000000000000000000000000000000000000000000000 % 00080000000000000000000000000000000000000000000000000000000000 % 001c7e000000000000000000000000000000000000000000000000000000000000000000000000 % 0038fc00000000000000000000000000000000000000000000000000000056 % 003000000000000000000000000000000000000000000000000000000000000000000000000000 % 00600000000000000000000000000000000000000000000000000000000021 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000043 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003b % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000002 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000000 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000056 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000018 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000013 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000f % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000000a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000006 % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000000000000003e0080007400007c00cfc0000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 00000000000000000000000000000000000000000000000110080008c000084804460000010000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000000000000001100000104000082804430000010000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000000000001af1e6e117db76102f370e1e7c413878f3c000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000c258a1311e2099910199883c8c4417c85890000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000001c3b00721102091110109080288441401d010000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000007807019211020911103090882884434065010000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000000000f0238a32118209110851908c488c42648d890000 % 0000000000000000000000000000000000000000000000000000000000001e % 00000000000000000000000000000000000003c03cf1df3b871fbb878f39cf8e76fc3876f1c000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000078000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 0000000000000000000000000000000000001e0000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 0000000000000000000000000000000000003c0000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000f00000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000001e00000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000007800000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 00000000000000000000000000000000000f000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000003c000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000078000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 0000600003000000080000001d00000001e00000060000001f9c00007c020000e8000700000000 % 00030000180000007e700001f0080003a0000000000000000000000000005c % 0000200001000001080004002300000003c000000200000208c800002202000118000200080000 % 0001000008000008232000008808000460000000000000000000000000005c % 000020000100000100000400410000000f00000002000002084800032200000208000200080000 % 00010000080000082120000c8800000820000000000000000000000000005c % 0003e7701f1c787bd9dfcf3840bcdc341e0000003e38f1e788c81e1c22fe6ec205e6e201be0000 % 001f3b80f8e3c79e232078708bf9bb08179b8000000000000000000000005c % 00062220313e84c5088c247c406662483ffffffc627d0b120f8833223c42332203331202480fff % fc31110189f42c483e20cc88f108cc880ccc4000000000000000000000001e % 0004232021201c8108d0e440404242743ffffffc42403a02084821222042222202121203a80fff % fc2119010900e8082120848881088888084840000000000000000000000008 % 00042140212064810853244040c2420c1e0000004240ca020848611c2042222206121210680000 % 00210a0109032808212184708108888818484000000000000000000000001e % 0004614023328cc508646464214642440780000046651b120848e320304222210a321232280000 % 00230a0119946c4821238c80c108888428c840000000000000000000000044 % 0003b0801d9c7679dc23b7381e3ce77803c000003b38ede39f9f9e3e70e77770f1e73fe3ce0000 % 001d8400ece3b78e7e7e78f9c39dddc3c79ce000000000000000000000006c % 0000008000000000000000000000000000f0000000000000000000230000000000000000000000 % 00000400000000000000008c0000000000000000000000000000000000001e % 0000038fc000000000000000000000000078000000000000000000630000000000000000000000 % 00001c7e000000000000018c0000000000000000000000000000000000005c % 00000600000000000000000000000000001e0000000000000000003c0000000000000000000000 % 0000300000000000000000f00000000000000000000000000000000000005c % 00000000000000000000000000000000000f000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000003c00000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000001e00000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000780000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005b % 0000000000000000000000000000000000003c0000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 0000000000000000000000000000000000000f00060000e0000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000078002000100008000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000022 % 00000000000000000000000000000000000001e002000100008000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 00000000000000000000000000000000000000f03e77039e3de79f000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000003c62220121628cc8000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003f % 000000000000000000000000000000000000001c42320107408848000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 000000000000000000000000000000000000000042140119408848000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 0000000000000000000000000000000000000000461401236288c8000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000056 % 00000000000000000000000000000000000000003b08039dbce79c000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000003a % 000000000000000000000000000000000000000000080000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000001e % 00000000000000000000000000000000000000000039f800000000000000000000000000000000 % 00000000000000000000000000000000000000000000000000000000000008 % 000000000000000000000000000000000000000000600000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000005c % 000000000000000000000000000000000000000000000000000000000000000000000000000000 % 0000000000000000000000000000000000000000000000000000000000007f %%EndPreview save /d_sv_obj exch def userdict /IslandDrawDict 300 dict dup begin put /bdef {bind def} bind def /E {exch} bdef /FF {findfont} bdef /MF {makefont} bdef /RO {rotate} bdef /SC {scale} bdef /SF {setfont} bdef /SG {setgray} bdef /TR {translate} bdef /bp {lj lw rgb} bdef /bpbw {lj lw setgray} bdef /c {curveto} bdef /cl {closepath} bdef /fi {eofill} bdef /g {setgray} bdef /gr {grestore} bdef /gs {gsave} bdef /l {lineto} bdef /lj {setlinejoin} bdef /lw {setlinewidth} bdef /m {moveto} bdef /n {newpath} bdef /nx {/x E def} bdef /r {rmoveto} bdef /rl {rlineto} bdef /rgb {setrgbcolor} bdef /s {show} bdef /sd {setdash} bdef /sp {x 0 rmoveto} bdef /ss {currentpoint pop E m} bdef /st {stroke} bdef %% pattern stuff /BPSIDE 32 def %% pixels per pattern side /PATFREQ 3.0 def %% pattern pixels per mm /dp_mat [PATFREQ 0 0 PATFREQ 0 0] def /dp_pw BPSIDE def %% pattern pixel width /dp_ph BPSIDE def %% pattern pixel height /dp_w dp_pw PATFREQ div def %% pattern mm width /dp_h dp_ph PATFREQ div def %% pattern mm height /savemat matrix def /topmat matrix def /patmat matrix def %% catch nocurrentpoint error for: pathbbox /ncpoint errordict /nocurrentpoint get def errordict begin /nocurrentpoint { dup /pathbbox load eq {pop 0 0 1 1} {ncpoint} ifelse } bdef end /ar { %% sa ea sx sy rot tx ty matrix currentmatrix 8 1 roll TR RO SC n 0 0 1 5 3 roll arc setmatrix } bdef /arn { %% sa ea sx sy rot tx ty TR RO SC matrix currentmatrix 8 1 roll n 0 0 1 5 3 roll arcn setmatrix } bdef /el { %% sx sy rot tx ty matrix currentmatrix 6 1 roll TR RO SC n 0 0 1 0 360 arc setmatrix cl } bdef /image_raster { %% sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def /imagebuf sw sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} image } bdef /imagemask_raster { TR SC /sh E def /sw E def /imagebuf sw 7 add 8 idiv string def sw sh false [sw 0 0 sh 0 0] {currentfile imagebuf readhexstring pop} imagemask } bdef /dither_color_raster { % bool sw sh sd dw dh xs ys TR SC /sd E def /sh E def /sw E def sd 8 eq and { /imagebuf 3 string def /grayval 1 string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop pop imagebuf 0 get 0.299 mul imagebuf 1 get 0.587 mul add imagebuf 2 get 0.114 mul add cvi grayval exch 0 exch put grayval } image } { /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sh { currentfile imagebuf readhexstring pop pop } repeat } ifelse } bdef /image_color_raster { % bool sw sh sd dw dh xs ys /colorimage where not { dither_color_raster } { pop TR SC /sd E def /sh E def /sw E def pop /imagebuf sw 3 mul sd mul 7 add 8 idiv string def sw sh sd [sw 0 0 sh 0 0] { currentfile imagebuf readhexstring pop} false 3 colorimage } ifelse } bdef /patpath { /inv E def topmat setmatrix pathbbox %% get lo - hi indecies /hy E dp_h div floor cvi def /hx E dp_w div floor cvi def /ly E dp_h div floor cvi def /lx E dp_w div floor cvi def lx 1 hx { dp_w mul ly 1 hy { dp_h mul E dup 3 1 roll E patmat currentmatrix pop TR dp_pw dp_ph inv dp_mat dp_proc imagemask patmat setmatrix } for pop } for } bdef % setpattern brush of patterns instead of gray /setpattern { /blue E def /green E def /red E def /freq E def /bwidth E def /bpside E def /bstring E def /onbits 0 def /offbits 0 def freq 0 {/y E def /x E def /xindex x 1 add 2 div bpside mul cvi def /yindex y 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get not 1 7 xindex 8 mod sub bitshift and 0 ne {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen {} settransfer systemdict /setcmykcolor known { /fact 1 onbits offbits onbits add div sub def 1 red sub fact mul 1 green sub fact mul 1 blue sub fact mul 0 setcmykcolor } { offbits offbits onbits add div setgray} ifelse } bdef /dmatrix matrix def /dpi 72 0 dmatrix defaultmatrix dtransform dup mul E dup mul add sqrt def /B {gs bp st gr} bdef %% brush: gr lw lj /Bbw {gs bpbw st gr} bdef %% brush: gr lw lj /F {gs rgb eofill gr} bdef %% fill: gr /Fbw {gs setgray eofill gr} bdef %% fill: gr /PB {gs lj lw setpattern st gr} bdef /PF {gs eoclip patpath gr} bdef /BB {gs rgb lj lw strokepath clip patpath gr} bdef /xdef {exch def} bdef /clip_region { /ht xdef /wd xdef /bm xdef /lm xdef newpath lm bm moveto 0 ht rlineto wd 0 rlineto 0 ht neg rlineto closepath clip } bdef %! Island text prolog Version 3.1 %% %%BeginProlog /reencode_small_dict 12 dict def /ReencodeSmall { reencode_small_dict begin /new_codes_and_names exch def /new_font_name exch def /base_font_name exch def /base_font_dict base_font_name findfont def /newfont base_font_dict maxlength dict def base_font_dict { 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 new_font_name put new_codes_and_names aload pop new_codes_and_names length 2 idiv { newfont /Encoding get 3 1 roll put } repeat new_font_name newfont definefont pop end %reencode_small_dict } def /extended_Zapf [ 8#223 /a89 8#224 /a90 8#225 /a93 8#226 /a94 8#227 /a91 8#230 /a92 8#231 /a205 8#232 /a85 8#233 /a206 8#234 /a86 8#235 /a87 8#236 /a88 8#237 /a95 8#240 /a96 ] def /extended_Standard [ 29 /thorn 30 /yacute 31 /divide 128 /Acircumflex 129 /Adieresis 130 /Agrave 131 /Aring 132 /Atilde 133 /Ccedilla 134 /Eacute 135 /Ecircumflex 136 /Edieresis 137 /Egrave 138 /Iacute 139 /Icircumflex 140 /Idieresis 141 /Igrave 142 /Ntilde 143 /Oacute 144 /Ocircumflex 145 /Odieresis 146 /Ograve 147 /Otilde 148 /Scaron 149 /Uacute 150 /Ucircumflex 151 /Udieresis 152 /Ugrave 153 /Ydieresis 154 /Zcaron 155 /aacute 156 /acircumflex 157 /adieresis 158 /agrave 159 /aring 160 /atilde 161 /exclamdown 162 /cent 163 /sterling 164 /fraction 165 /yen 166 /florin 167 /section 168 /currency 169 /quotesingle 170 /quotedblleft 171 /guillemotleft 172 /guilsinglleft 173 /guilsinglright 174 /fi 175 /fl 176 /plusminus 177 /endash 178 /dagger 179 /daggerdbl 180 /periodcentered 181 /twosuperior 182 /paragraph 183 /bullet 184 /quotesinglbase 185 /quotedblbase 186 /quotedblright 187 /guillemotright 188 /ellipsis 189 /perthousand 190 /threesuperior 191 /questiondown 192 /mu 193 /grave 194 /acute 195 /circumflex 196 /tilde 197 /macron 198 /breve 199 /dotaccent 200 /dieresis 201 /onesuperior 202 /ring 203 /cedilla 204 /onequarter 205 /hungarumlaut 206 /ogonek 207 /caron 208 /emdash 209 /ccedilla 210 /copyright 211 /eacute 212 /ecircumflex 213 /edieresis 214 /egrave 215 /iacute 216 /icircumflex 217 /idieresis 218 /igrave 219 /logicalnot 220 /minus 221 /ntilde 222 /oacute 223 /ocircumflex 224 /odieresis 225 /AE 226 /onehalf 227 /ordfeminine 228 /ograve 229 /otilde 230 /registered 231 /scaron 232 /Lslash 233 /Oslash 234 /OE 235 /ordmasculine 236 /trademark 237 /uacute 238 /ucircumflex 239 /udieresis 240 /ugrave 241 /ae 242 /ydieresis 243 /zcaron 244 /Aacute 245 /dotlessi 246 /threequarters 247 /Eth 248 /lslash 249 /oslash 250 /oe 251 /germandbls 252 /multiply 253 /Yacute 254 /Thorn 255 /eth ] def /extended_Symbol [ ] def /extend_font { % stack: fontname newfontname exch dup (ZapfDingbats) eq { cvn exch cvn extended_Zapf ReencodeSmall } { dup (Symbol) eq { cvn exch cvn extended_Symbol ReencodeSmall } { cvn exch cvn extended_Standard ReencodeSmall } ifelse } ifelse } bind def /extend_font_name { % stack: font_name_string dup length 1 add string /extended_font_name exch def extended_font_name 0 (_) putinterval extended_font_name 1 3 -1 roll putinterval extended_font_name } bind def /gf { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval dup /localfont exch extend_font_name def localfont extend_font localfont findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /gfns { /f exch def f cvn where { f exch begin cvn load exec setfont end } { f 0 f length 8 sub getinterval cvn findfont /xsz f f length 4 sub 4 getinterval cvi def /ysz f f length 8 sub 4 getinterval cvi def [ xsz 0 0 ysz neg 0 0 ] makefont dup f cvn exch def setfont } ifelse } bind def /ul { % space drop thickness gs currentpoint currentlinewidth currentpoint n m 6 -3 roll lw 0 exch r 0 rl st lw m gr } bind def /nxtab { currentpoint pop 1000.0 mul cvi tab mod tab exch sub 1000.0 div 0 rmoveto } bind def /nx { /x exch def } bind def 0. nx %%EndProlog gsave 2.83465 -2.83465 scale 0 -279.4 translate topmat currentmatrix pop n savemat currentmatrix pop [1 0 0 1 42.5 23.7012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -792 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_activateCons) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 79.7178 21.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -768 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_activateVars) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 66.1711 16.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (scanPrimConStdAct) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 107.234 31.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -2328 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_actBLogPrimConList) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 131.912 31.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -984 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_actBLogPrimCon) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 156.59 31.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_loadcon) s savemat setmatrix n 150.22 30 m 155.22 30 l gsave 0 0 0 0.1764 0 B grestore n 108.04 30 m 113.04 30 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 84.0922 26.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1016 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_accchk) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 91.4111 26.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_factor) s savemat setmatrix n 85.181 25 m 90.181 25 l gsave 0 0 0 0.1764 0 B grestore n 65 15 m 57.5 22.5 l gsave 0 0 0 0.1764 0 B grestore n 57.5 22.5 m 65 30 l gsave 0 0 0 0.1764 0 B grestore n 57.5 22.5 m 65 25 l gsave 0 0 0 0.1764 0 B grestore n 57.5 22.5 m 65 20 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 56.47 41.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1988 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_activateBndCons) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 84.0569 41.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1014 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (scanPrimConBndAct) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 109.158 41.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_ftran) s savemat setmatrix n 102.93 40 m 107.93 40 l gsave 0 0 0 0.1764 0 B grestore n 57.5 40 m 65 40 l gsave 0 0 0 0.1764 0 B grestore n 57.5 40 m 65 30 l gsave 0 0 0 0.1764 0 B grestore n 57.5 40 m 65 25 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 56.47 56.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -1812 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_deactivateCons) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 66.1711 51.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (scanPrimConStdDeact) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 104.342 56.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -2164 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (deactBLogPrimConLst) s savemat setmatrix n savemat currentmatrix pop [1 0 0 1 111.661 56.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def 0 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_deactBLogPrimCon) s savemat setmatrix n 105.29 55 m 110.29 55 l gsave 0 0 0 0.1764 0 B grestore n savemat currentmatrix pop [1 0 0 1 74.0381 61.2012] concat 25.4 1440 div 1.000000 mul dup scale 0 0 m /tab 283.00 1000.0 mul cvi def -446 0 m 0 ss (Bookman-Light02000200) gf 0.00 0.00 0.00 rgb (dy_factor) s savemat setmatrix n 65 50 m 57.5 55 l gsave 0 0 0 0.1764 0 B grestore n 57.5 55 m 65 55 l gsave 0 0 0 0.1764 0 B grestore n 57.5 55 m 65 60 l gsave 0 0 0 0.1764 0 B grestore grestore %%Trailer %%DocumentNeededResources: font Bookman-Light %%DocumentSuppliedResources: end d_sv_obj restore %%EndDocument @endspecial 1499 4853 a(Fig)n(ur)q(e)53 b(14:)65 b(Call)52 b(Gra)-6 b(p)g(h)53 b(fo)-7 b(r)53 b(Co)l(ns)-5 b(trai)s(nt)51 b(Manag)n(e)n(ment)g(Ro)-5 b(u)l(ti)s(n)n(e)o(s)249 5391 y(Dur)s(i)s(n)n(g)61 b(c)l(o)l(ns)-5 b(tru)g(c)g(tio)l(n)61 b(of)h(th)l(e)g(i)s(niti)s(al)h(c)l(o)l(ns)-5 b(trai)s(nt)61 b(sys)-5 b(te)n(m,)65 b(any)c(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)j(r)q(e)l (fe)l(r)q(enc)-6 b(e)l(d)62 b(i)s(n)g(a)h(c)l(o)l(ns)-5 b(trai)s(nt)0 5590 y(ar)q(e)53 b(a)n(c)-5 b(tiv)r(a)d(te)l(d)53 b(al)n(o)l(n)n(g)e(with)h(th)l(e)h(c)l(o)l(ns)-5 b(trai)s(nt.)65 b(Dur)s(i)s(n)n(g)52 b(s)-8 b(u)h(bs)m(eq)l(u)l(ent)51 b(c)l(o)l(ns)-5 b(trai)s(nt)52 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)52 b(p)-6 b(has)m(e)o(s,)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)0 5789 y(a)n(c)-5 b(tiv)r(a)d(tio)l(n)52 b(is)i(mo)-7 b(r)q(e)54 b(s)m(e)l(l)n(ec)-5 b(tive.)68 b(T)8 b(h)l(e)54 b(l)n(og)t(ical)f(v)r (ar)s(i)s(a)l(b)l(l)n(e)h(fo)-7 b(r)54 b(th)l(e)f(c)l(o)l(ns)-5 b(trai)s(nt)53 b(is)g(c)-8 b(r)q(ea)g(te)l(d)54 b(and)f(u)-7 b(s)m(e)l(d)53 b(as)i(th)l(e)e(n)n(ew)0 5988 y(bas)n(ic)59 b(v)r(ar)s(i)s(a)l(b)l(l)n(e.)81 b(If)58 b(th)l(e)g(n)n(e)-5 b(xt)57 b(s)n(i)s(mpl)n(e)-5 b(x)59 b(will)e(be)h(pr)s(i)s(mal)g(s)n(i) s(mpl)n(e)-5 b(x,)60 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)56 b(is)i(r)q(e)o(s)-5 b(tr)s(ic)g(te)l(d)59 b(to)e(th)l(e)h(s)-8 b(u)h(bs)m(e)g(t)57 b(of)0 6188 y(r)q(e)l(fe)l(r)q(enc)-6 b(e)l(d)49 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(with)f(d)-7 b(ual)48 b(i)s(nfeas)n(ib)l(l)n(e)i(\(fa)-7 b(vo)i(ura)l(b)l(l)n(e\))48 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)49 b(c)l(os)-5 b(t.)65 b(If)50 b(th)l(e)f(n)n(e)-5 b(xt)49 b(s)n(i)s(mpl)n(e)-5 b(x)50 b(will)e(be)i(d)-7 b(ual)0 6387 y(s)n(i)s(mpl)n(e)i(x,)53 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)52 b(is)g(r)q(e)o(s)-5 b(tr)s(ic)g(te)l(d)54 b(to)e(th)l(e)h(s)-8 b(u)h(bs)m(e)g(t)52 b(of)h(r)q(e)l(fe)l(r)q(enc)-6 b(e)l(d)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e) o(s)i(tha)-8 b(t)52 b(ar)q(e)h(d)-7 b(ual)52 b(feas)n(ib)l(l)n(e.)249 6686 y(Wh)l(en)e(a)h(c)l(o)l(ns)-5 b(trai)s(nt)50 b(is)g(d)-5 b(ea)n(c)g(tiv)r(a)d(te)l(d,)51 b(o)l(nly)e(th)l(e)h(sla)n(c)-8 b(k)50 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(fo)-7 b(r)51 b(th)l(e)f(c)l(o)l (ns)-5 b(trai)s(nt)50 b(is)h(d)-5 b(ea)n(c)g(tiv)r(a)d(te)l(d.)64 b(T)8 b(his)0 6885 y(m)s(i)s(ni)s(m)s(is)m(e)o(s)53 b(th)l(e)g(wo)-7 b(rk)52 b(tha)-8 b(t)52 b(m)l(u)-7 b(s)i(t)53 b(be)g(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)52 b(to)h(r)q(e)-7 b(pair)53 b(th)l(e)g(bas)n (is.)0 7478 y Fu(16.1)197 b(Initial)65 b(Co)-5 b(ns)f(traint)64 b(Se)-5 b(lec)-10 b(tio)-5 b(n)0 7897 y FP(Fo)e(r)70 b(a)f(war)5 b(m)69 b(o)-7 b(r)69 b(h)n(ot)g(s)-5 b(t)s(art,)74 b(th)l(e)68 b(i)s(niti)s(al)h(a)n(c)-5 b(tive)69 b(c)l(o)l(ns)-5 b(trai)s(nt)69 b(sys)-5 b(te)n(m)68 b(is)i(c)l(o)n(mpl)n(e)-7 b(te)l(ly)69 b(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)l(d)69 b(fr)q(o)n(m)h(th)l(e)0 8096 y(bas)n(is)76 b(s)-8 b(u)i(p)e(plie)l(d)75 b(by)g(th)l(e)h(client.)134 b(A)8 b(s)76 b(n)m(ote)l(d)e(i)s(n)i (\24711,)81 b(th)l(e)76 b(client)f(can)h(s)m(e)-7 b(t)76 b(parame)-7 b(te)l(rs)77 b(whic)-7 b(h)74 b(will)h(ca)-8 b(u)h(s)m(e)0 8295 y(c)l(o)l(ns)i(trai)s(nt)78 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)77 b(to)j(be)f(e)-5 b(xecu)l(te)l(d)79 b(pr)s(io)-7 b(r)79 b(to)g(s)-5 b(t)s(arti)s(n)n(g)78 b(s)n(i)s(mpl)n(e)-5 b(x)80 b(ite)l(ra)-8 b(tio)l(ns.)143 b(In)79 b(this)g(s)-8 b(pec)m(i\002c)79 b(cas)m(e,)0 8495 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)53 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)51 b(is)i(n)m(ot)f(a)-8 b(u)l(to)n(ma)g(tic)52 b(and)h(m)l(u)-7 b(s)i(t)52 b(be)h(r)q(eq)l(u)l(e)o(s)-5 b(te)l(d)53 b(i)s(nd)-5 b(e)e(pend)i(ently)51 b(if)i(d)-5 b(e)o(s)n(ir)q(e)l(d.)249 8794 y(Fo)e(r)77 b(a)g(c)l(o)-5 b(ld)76 b(s)-5 b(t)s(art,)83 b(wh)l(e)l(r)q(e)76 b(n)m(o)g(i)s(niti)s(al)g(bas)n(is)h(is)g(s)-8 b(u)i(p)e(plie)l(d,)81 b(th)l(e)76 b(i)s(niti)s(al)h(a)n(c)-5 b(tive)76 b(c)l(o)l(ns)-5 b(trai)s(nt)76 b(sys)-5 b(te)n(m)76 b(will)0 8993 y(i)s(ncl)n(ud)-5 b(e)53 b(all)f(eq)l(ualitie)o(s)h(and)f (a)h(client-s)-8 b(pec)m(i\002e)l(d)52 b(s)m(e)l(l)n(ec)-5 b(tio)l(n)52 b(of)h(i)s(n)n(eq)l(ualitie)o(s.)65 b(See)53 b(\24711.1)f(fo)-7 b(r)53 b(a)g(mo)-7 b(r)q(e)54 b(d)-5 b(e)e(t)s(ail)n(e)l(d)0 9192 y(d)i(e)o(sc)d(r)s(iptio)l(n.)0 9785 y Fu(16.2)197 b(Ac)-10 b(tiva)g(tio)-5 b(n)64 b(of)i(Co)-5 b(ns)f(traints)4 10204 y FM(D)8 b(Y)g(L)g(P)51 b FP(ente)l(rs)44 b(th)l(e)h(c)l(o)l(ns)-5 b(trai)s(nt)44 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n) 43 b(p)-6 b(has)m(e)44 b(wh)l(en)n(eve)l(r)g(th)l(e)h(sys)-5 b(te)n(m)44 b(is)h(fo)-5 b(und)44 b(to)h(be)g(pr)s(i)s(mal)g(un)m(bo)-5 b(und)g(e)l(d)0 10403 y(o)e(r)48 b(o)-5 b(pti)s(mal)48 b(fo)-7 b(r)48 b(th)l(e)f(s)m(e)-7 b(t)49 b(of)f(a)n(c)-5 b(tive)48 b(c)l(o)l(ns)-5 b(trai)s(nts)47 b(and)g(all)h(v)r(ar)s(i)s(a) l(b)l(l)n(e)o(s)h(\(a)n(c)-5 b(tive)47 b(and)h(i)s(na)n(c)-5 b(tive\).)63 b(Wh)l(en)47 b(th)l(e)h(sys)-5 b(te)n(m)3771 11400 y(62)p eop end %%Page: 63 66 TeXDict begin 63 65 bop 0 466 a FP(is)65 b(fo)-5 b(und)64 b(to)h(be)h(o)-5 b(pti)s(mal,)72 b FM(D)8 b(Y)g(L)g(P)70 b FP(calls)c FJ(dy_activ)l(ateCons)e FP(to)h(s)m(ear)q(c)-7 b(h)66 b(th)l(e)e(i)s(na)n(c)-5 b(tive)65 b(c)l(o)l(ns)-5 b(trai)s(nts)64 b(fo)-7 b(r)66 b(vio)-5 b(la)d(te)l(d)0 665 y(c)l(o)l(ns)j(trai)s(nts.)106 b(Wh)l(en)66 b(th)l(e)g(sys)-5 b(te)n(m)66 b(is)h(fo)-5 b(und)65 b(to)i(be)g(un)m(bo)-5 b(und)g(e)l(d,)71 b FM(D)8 b(Y)g(L)g(P)73 b FP(\002rs)-5 b(t)66 b(calls)h FJ(dy_activ)l(ateBndCons)f FP(to)0 865 y(s)m(ear)q(c)-7 b(h)81 b(th)l(e)g(i)s(na)n(c)-5 b(tive)81 b(c)l(o)l(ns)-5 b(trai)s(nts)80 b(fo)-7 b(r)81 b(feas)n(ib)l(l)n(e)h(c) l(o)l(ns)-5 b(trai)s(nts)80 b(whic)-7 b(h)80 b(b)l(l)n(oc)-8 b(k)81 b(th)l(e)g(dir)q(ec)-5 b(tio)l(n)80 b(of)h(r)q(ec)-6 b(e)o(s)h(s)n(io)l(n.)0 1064 y(If)70 b(s)-8 b(u)j(c)e(h)69 b(bo)-5 b(undi)s(n)n(g)67 b(c)l(o)l(ns)-5 b(trai)s(nts)69 b(e)-5 b(x)10 b(is)-5 b(t,)73 b(th)l(ey)c(ar)q(e)h(a)n(c)-5 b(tiv)r(a)d(te)l(d)68 b(and)h(pr)s(i)s(mal)h(p)-6 b(has)m(e)69 b(II)i(s)n(i)s(mpl)n(e)-5 b(x)70 b(is)f(r)q(e)o(s)-8 b(ume)l(d.)0 1263 y(Oth)l(e)l(rwis)m(e,)44 b FJ(dy_activ)l(ateCons)g FP(is)g(call)n(e)l(d)h(to)f(a)-6 b(dd)44 b(any)f(vio)-5 b(la)d(te)l(d)44 b(c)l(o)l(ns)-5 b(trai)s(nts)43 b(and)h(e)-5 b(xecu)l(tio)l(n)43 b(will)g(go)h(to)g(pr)s(i)s(mal)0 1462 y(p)-6 b(has)m(e)53 b(I)g(o)-7 b(r)53 b(d)-7 b(ual)52 b(s)n(i)s(mpl)n(e)-5 b(x)53 b(as)h(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d (te.)249 1761 y(V)m(io)j(la)d(te)l(d)46 b(c)l(o)l(ns)-5 b(trai)s(nts)45 b(ar)q(e)i(id)-5 b(enti\002e)l(d)44 b(u)-7 b(s)n(i)s(n)n(g)46 b(a)h(s)-5 b(traightfo)e(rwar)q(d)44 b(scan)i(of)g(th)l(e)g(i)s(na)n(c)-5 b(tive)46 b(c)l(o)l(ns)-5 b(trai)s(nts.)62 b(T)8 b(h)l(e)0 1960 y(r)q(o)-5 b(u)l(ti)s(n)n(e)49 b FJ(scanPr)s(imConStdAct)h FP(ev)r(al)n(ua)-8 b(te)o(s)50 b(ea)n(c)-7 b(h)49 b(c)l(o)l(ns)-5 b(trai)s(nt)49 b(a)-8 b(t)49 b(th)l(e)g(curr)q(ent)g(v)r(al)n(u)l(e)g(of)55 b FG(x)64 b FP(and)49 b(r)q(e)-7 b(t)l(ur)5 b(ns)49 b(a)h(lis)-5 b(t)49 b(of)0 2160 y(vio)-5 b(la)d(te)l(d)59 b(c)l(o)l(ns)-5 b(trai)s(nts.)84 b(T)8 b(h)l(e)59 b(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)60 b FJ(dy_activ)l(ateBLogPr)s(imConList)e FP(and)h FJ(dy_activ)l (ateBLogPr)s(imCon)f FP(pe)l(r)5 b(fo)-7 b(r)5 b(m)0 2359 y(th)l(e)83 b(a)n(c)-5 b(tiv)r(a)d(tio)l(ns.)154 b(Fo)-5 b(ll)n(owi)s(n)n(g)81 b(a)n(c)-5 b(tiv)r(a)d(tio)l(ns,)89 b(th)l(e)83 b(l)n(og)t(ical)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(fo)-7 b(r)83 b(th)l(e)g(n)n(ew)f(c)l(o)l(ns)-5 b(trai)s(nts)82 b(ar)q(e)i(ma)-6 b(d)h(e)0 2558 y(bas)n(ic,)53 b(th)l(e)f(bas)n(is)g (is)h(r)q(e)l(fa)n(c)-5 b(to)e(r)q(e)l(d,)52 b(and)g(a)g(n)n(ew)g(bas)n (ic)h(s)n(o)-5 b(l)n(u)l(tio)l(n)50 b(is)i(calcu)l(la)-8 b(te)l(d.)65 b(If)53 b(th)l(e)e(call)i(to)f FJ(dy_activ)l(ateCons)0 2757 y FP(r)q(eq)l(u)l(e)o(s)-5 b(te)l(d)52 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)51 b(of)h(r)q(e)l(fe)l(r)q(enc)-6 b(e)l(d)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)g FJ(dy_activ)l(ateBLogPr) s(imConList)e FP(will)g(c)l(o)-5 b(ll)n(ec)g(t)53 b(a)g(s)m(e)-7 b(t)52 b(of)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)0 2957 y(i)s(ndic)-6 b(e)o(s)76 b(fo)-7 b(r)77 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n.)134 b(Afte)l(r)76 b(th)l(e)f(bas)n(is)i(has)f(been)g(r)q(e)l(fa)n(c)-5 b(to)e(r)q(e)l(d,)82 b(th)l(e)76 b(s)m(e)-7 b(t)76 b(is)h(pas)-5 b(s)m(e)l(d)76 b(to)g FJ(dy_activ)l(ateV)-16 b(ar)s(s)0 3156 y FP(fo)-7 b(r)62 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n.)90 b(If)62 b(d)-7 b(ual)61 b(s)n(i)s(mpl)n(e)-5 b(x)62 b(will)f(be)h(th)l (e)f(n)n(e)-5 b(xt)61 b(s)n(i)s(mpl)n(e)-5 b(x)63 b(e)-5 b(xecu)l(te)l(d,)63 b(o)l(nly)e(d)-7 b(ual-feas)n(ib)l(l)n(e)61 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(ar)q(e)0 3355 y(a)n(c)-5 b(tiv)r(a)d(te)l(d.)249 3654 y(In)74 b FM(D)8 b(Y)g(L)g(P)t FP(,)77 b(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s)68 b(is)i(d)-5 b(e)e(tec)i(te)l(d)71 b(by)f(th)l(e)g(pr)s(i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x)71 b(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n;)78 b(d)-7 b(ual)69 b(s)n(i)s(mpl)n(e)-5 b(x)71 b(is)0 3853 y(n)m(ot)c(call)n(e)l (d)h(until)f(pr)s(i)s(mal)h(s)n(i)s(mpl)n(e)-5 b(x)68 b(has)g(fo)-5 b(und)67 b(an)g(i)s(niti)s(al)h(o)-5 b(pti)s(mal)67 b(s)n(o)-5 b(l)n(u)l(tio)l(n.)109 b(Wh)l(en)67 b(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s)66 b(is)0 4053 y(disc)l(ove)l(r)q(e)l(d,)74 b FM(D)8 b(Y)g(L)g(P)72 b FP(calls)67 b FJ(dy_activ)l(ateBndCons)f FP(to)g(s)m(ear)q(c)-7 b(h)67 b(fo)-7 b(r)67 b(bo)-5 b(undi)s(n)n(g)64 b(c)l(o)l(ns)-5 b(trai)s(nts)65 b(whic)-7 b(h)66 b(ar)q(e)g(feas)n(ib)l(l)n(e)0 4252 y(a)-8 b(t)58 b(th)l(e)h(curr)q(ent)f(bas)n(ic)h(s)n(o)-5 b(l)n(u)l(tio)l(n.)81 b(A)58 b(c)l(o)l(ns)-5 b(trai)s(nt)57 b(will)h(b)l(l)n(oc)-8 b(k)58 b(motio)l(n)f(i)s(n)h(th)l(e)h(dir)q(ec)-5 b(tio)l(n)59 b FH(h)6334 4277 y Fz(j)6437 4252 y FP(if)h FG(a)6705 4277 y Fz(i)6789 4252 y FF(\327)36 b FH(h)6979 4277 y Fz(j)7069 4252 y FP(>)45 b(0)58 b(fo)-7 b(r)64 b FG(x)7756 4277 y Fz(j)0 4451 y FP(i)s(nc)-8 b(r)q(eas)n(i)s(n)n(g,)71 b(o)-7 b(r)70 b FG(a)1290 4476 y Fz(i)1376 4451 y FF(\327)38 b FH(h)1568 4476 y Fz(j)1663 4451 y FP(<)49 b(0)68 b(fo)-7 b(r)73 b FG(x)2373 4476 y Fz(j)2485 4451 y FP(d)-5 b(ec)d(r)q(eas)n(i)s (n)n(g.)110 b(T)8 b(his)68 b(scan)g(is)g(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)68 b(by)f FJ(scanPr)s(imConBndAct)p FP(.)111 b(Onc)-6 b(e)0 4650 y(th)l(e)53 b(lis)-5 b(t)53 b(of)g(c)l(o)l(ns)-5 b(trai)s(nts)52 b(is)i(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d,)52 b(c)l(o)l(ns)-5 b(trai)s(nt)53 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)51 b(and)i(bas)n(is)g(r)q(e)-7 b(pair)54 b(pr)q(oc)-6 b(ee)l(d)53 b(as)h(i)s(n)f(th)l(e)g(cas)m(e)g(of)0 4850 y(vio)-5 b(la)d(te)l(d)52 b(c)l(o)l(ns)-5 b(trai)s(nts,)52 b(b)-8 b(u)l(t)52 b(r)q(e)l(fe)l(r)q(enc)-6 b(e)l(d)53 b(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s)g(ar)q(e)g(n)m(ot)f(a)n(c)-5 b(tiv)r(a)d(te)l(d.)249 5148 y(Wh)l(en)55 b(a)g(c)l(o)l(ns)-5 b(trai)s(nt)54 b(is)i(a)n(c)-5 b(tiv)r(a)d(te)l(d,)55 b(th)l(e)g(s)m(e)-7 b(t)55 b(of)g(bas)n(ic)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(is)g(a)-8 b(u)l(gmente)l(d)53 b(with)h(th)l(e)h(sla)n(c)-8 b(k)55 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)0 5348 y(fo)-7 b(r)82 b(th)l(e)e(c)l(o)l (ns)-5 b(trai)s(nt.)150 b(Beca)-8 b(u)h(s)m(e)82 b(th)l(e)f(sla)n(c)-8 b(k)80 b(is)i(bas)n(ic,)89 b(th)l(e)81 b(v)r(al)n(u)l(e)g(of)g(th)l(e)g (as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)81 b(d)-7 b(ual)80 b(is)i(ze)l(r)q(o.) 150 b(T)8 b(h)l(e)0 5547 y(bas)n(is)73 b(will)f(c)-7 b(han)n(g)n(e,)76 b(b)-8 b(u)l(t)72 b(th)l(e)g(v)r(al)n(u)l(e)o(s)h(of) g(oth)l(e)l(r)f(a)n(c)-5 b(tive)72 b(pr)s(i)s(mal)h(v)r(ar)s(i)s(a)l(b) l(l)n(e)o(s)h(will)e(r)q(e)n(mai)s(n)g(th)l(e)g(same.)125 b(Si)s(nc)-6 b(e)0 5746 y(th)l(e)77 b(n)n(ew)f(sla)n(c)-8 b(k)77 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(ar)q(e)g(n)m(ot)e(part)h(of)g (th)l(e)g(PSE)f(r)q(e)l(fe)l(r)q(enc)-6 b(e)77 b(frame,)84 b(th)l(e)76 b(pr)q(oj)l(ec)-5 b(te)l(d)77 b(c)l(o)-5 b(l)n(umn)77 b(n)m(o)-7 b(r)5 b(ms)0 5945 y(as)-5 b(s)n(oc)m(i)s(a)d (te)l(d)49 b(with)g(PSE)g(pr)s(ic)m(i)s(n)n(g)f(ar)q(e)i(unc)-7 b(han)n(g)n(e)l(d.)62 b(Beca)-8 b(u)h(s)m(e)50 b(th)l(e)f(o)-8 b(bj)l(ec)j(tive)50 b(c)l(oe)l(\002)-49 b(\002c)m(ients)49 b(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)49 b(with)g(th)l(e)0 6145 y(sla)n(c)-8 b(k)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(ar)q(e)g (0,)i(th)l(e)c(v)r(al)n(u)l(e)o(s)i(of)f(th)l(e)g(pr)q(ee)-5 b(x)10 b(is)-5 b(ti)s(n)n(g)62 b(d)-7 b(ual)63 b(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s)h(and)f(th)l(e)g(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)62 b(c)l(os)-5 b(ts)64 b(r)q(e)n(mai)s(n)0 6344 y(unc)-7 b(han)n(g)n(e)l(d.)0 6937 y Fu(16.3)197 b(Dea)m(c)-10 b(tiva)g(tio)-5 b(n)62 b(of)67 b(Co)-5 b(ns)f(traints)0 7356 y FP(Co)l(ns)h(trai)s(nt)53 b(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)54 b(is)h(handl)n(e)l(d)e(by)i FJ(dy_deactiv)l(ateCons)p FP(.)75 b FM(D)8 b(Y)g(L)g(P)61 b FP(i)s(mpl)n(e)n(ments)54 b(thr)q(ee)h(o)-5 b(ptio)l(ns)53 b(fo)-7 b(r)55 b(c)l(o)l(n-)0 7555 y(s)-5 b(trai)s(nt)72 b(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n,)76 b(`n)m(o)-7 b(r)5 b(mal')-17 b(,)75 b(`aggr)q(e)o(s)-5 b(s)n(ive')-17 b(,)77 b(and)72 b(`fana)-8 b(tical')-17 b(.)123 b(Wh)l(en)72 b(n)m(o)-7 b(r)5 b(mal)72 b(c)l(o)l(ns)-5 b(trai)s(nt)71 b(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)0 7754 y(is)72 b(s)-8 b(pec)m(i\002e)l(d,)80 b FM(D)8 b(Y)g(L)g(P)78 b FP(will)71 b(o)l(nly)g(d)-5 b(ea)n(c)g(tiv)r(a)d(te)71 b(i)s(n)n(eq)l(ualitie)o(s)h(whic)-7 b(h)71 b(ar)q(e)i(s)-5 b(tr)s(ic)g(tly)71 b(l)n(oos)m(e.)124 b(Elig)t(ib)l(l)n(e)70 b(i)s(n)n(eq)l(ualitie)o(s)0 7954 y(ar)q(e)64 b(id)-5 b(enti\002e)l(d)63 b(by)h(scanni)s(n)n(g)e(th)l(e)i(bas)n(is)g(fo)-7 b(r)65 b(sla)n(c)-8 b(k)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(whic)-7 b(h)63 b(ar)q(e)h(s)-5 b(tr)s(ic)g(tly)64 b(withi)s(n)f(bo)-5 b(unds.)98 b(Wh)l(en)0 8153 y(aggr)q(e)o(s)-5 b(s)n(ive)67 b(c)l(o)l(ns)-5 b(trai)s(nt)65 b(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)65 b(is)h(s)-8 b(pec)m(i\002e)l(d,)73 b FM(D)8 b(Y)g(L)g(P)72 b FP(will)66 b(als)n(o)g(d)-5 b(ea)n(c)g(tiv)r(a)d(te)66 b(tight)f(i)s(n)n(eq)l(ualitie)o(s)h(wh)n(os)m(e)0 8352 y(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)41 b(d)-7 b(ual)41 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(is)g(ze)l(r)q(o.)61 b(Wh)l(en)41 b(fana)-8 b(tical)41 b(c)l(o)l(ns)-5 b(trai)s(nt)40 b(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)40 b(is)i(s)-8 b(pec)m(i\002e)l(d,)47 b FM(D)8 b(Y)g(L)g(P)47 b FP(will)41 b(d)-5 b(ea)n(c-)0 8551 y(tiv)r(a)d(te)54 b(any)f(c)l(o)l(ns)-5 b(trai)s(nt)53 b(\(eq)l(uality)h(o)-7 b(r)54 b(i)s(n)n(eq)l(uality\))f(wh)n(os)m(e)h (as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)53 b(d)-7 b(ual)54 b(is)g(ze)l(r)q(o.) 69 b(T)8 b(h)l(e)54 b(s)m(e)-7 b(t)55 b(of)f(c)l(o)l(ns)-5 b(trai)s(nts)0 8751 y(to)53 b(be)g(d)-5 b(ea)n(c)g(tiv)r(a)d(te)l(d)52 b(is)h(id)-5 b(enti\002e)l(d)51 b(by)h(th)l(e)h(r)q(o)-5 b(u)l(ti)s(n)n(e)52 b FJ(scanPr)s(imConStdDeact)p FP(.)249 9050 y(Onc)-6 b(e)48 b(a)h(s)m(e)-7 b(t)48 b(of)g(c)l(o)l(ns)-5 b(trai)s(nts)47 b(has)h(been)g(id)-5 b(enti\002e)l(d)47 b(fo)-7 b(r)48 b(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n,)48 b(th)l(e)f(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)48 b FJ(deactBLogPr)s (imConList)0 9249 y FP(and)65 b FJ(dy_deactBLogPr)s(imCon)i FP(ar)q(e)f(call)n(e)l(d)g(to)f(pe)l(r)5 b(fo)-7 b(r)5 b(m)66 b(th)l(e)g(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(ns.)102 b(T)8 b(h)l(e)66 b(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g)63 b(c)l(o)l(ns)-5 b(trai)s(nt)0 9448 y(is)77 b(d)-5 b(ea)n(c)g(tiv)r(a)d (te)l(d)75 b(and)h(r)q(e)n(move)l(d)g(fr)q(o)n(m)g(th)l(e)g(a)n(c)-5 b(tive)77 b(c)l(o)l(ns)-5 b(trai)s(nt)75 b(sys)-5 b(te)n(m)76 b(al)n(o)l(n)n(g)f(with)g(its)h(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)76 b(l)n(og)t(ical)0 9647 y(v)r(ar)s(i)s(a)l(b)l(l)n(e.)62 b(T)8 b(h)l(e)42 b(bas)n(is)h(is)f(pa)-8 b(tc)h(h)l(e)l(d,)44 b(if)e(n)n(ec)-6 b(e)o(s)h(sary)-17 b(,)45 b(by)d(movi)s(n)n(g)f(th)l (e)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(whic)-7 b(h)41 b(is)i(bas)n(ic)f(i)s (n)g(th)l(e)g(pos)n(itio)l(n)f(of)0 9847 y(th)l(e)50 b(d)-5 b(ea)n(c)g(tiv)r(a)d(te)l(d)49 b(c)l(o)l(ns)-5 b(trai)s(nt)49 b(to)h(th)l(e)g(bas)n(is)h(pos)n(itio)l(n)e(whic)-7 b(h)49 b(was)h(occu)-6 b(pie)l(d)50 b(by)f(th)l(e)h(c)l(o)l(ns)-5 b(trai)s(nt')g(s)49 b(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)0 10046 y(l)n(og)t(ical.)249 10345 y(A)8 b(s)62 b(with)f(a)n(c)-5 b(tiv)r(a)d(tio)l(n)60 b(of)h(c)l(o)l(ns)-5 b(trai)s(nts,)64 b(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)60 b(of)h(c)l(o)l(ns)-5 b(trai)s(nts)61 b(c)-7 b(han)n(g)n(e)o(s)61 b(th)l(e)g(bas)n(is)h(and)k FM(D)8 b(Y)g(L)g(P)67 b FP(will)3771 11400 y(63)p eop end %%Page: 64 67 TeXDict begin 64 66 bop 0 466 a FP(r)q(e)l(fa)n(c)-5 b(to)e(r)56 b(and)g(r)q(ecalcu)l(la)-8 b(te)56 b(th)l(e)g(pr)s(i)s(mal) h(and)f(d)-7 b(ual)55 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)77 b(T)8 b(h)l(e)56 b(d)-7 b(ual)56 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(do) f(n)m(ot)f(c)-7 b(han)n(g)n(e,)56 b(n)m(o)-7 b(r)55 b(do)0 665 y(th)l(e)50 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)50 b(c)l(os)-5 b(ts)51 b(of)f(th)l(e)g(r)q(e)n(mai)s(ni)s(n)n(g)f(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s,)j(s)n(i)s(nc)-6 b(e)51 b(th)l(e)f(c)l(os)-5 b(t)51 b(c)l(oe)l(\002)-49 b(\002c)m(ient)49 b(of)i(a)g(l)n(og)t(ical)f (v)r(ar)s(i)s(a)l(b)l(l)n(e)h(is)g(ze)l(r)q(o.)0 865 y(In)63 b(g)n(en)n(e)l(ral,)i(th)l(e)e(PSE)f(c)l(o)-5 b(l)n(umn)63 b(n)m(o)-7 b(r)5 b(ms)62 b(will)h(be)g(c)-7 b(han)n(g)n(e)l(d)62 b(beca)-8 b(u)h(s)m(e)63 b(th)l(e)g(d)-5 b(e)l(l)n(e)e(te)l(d)64 b(l)n(og)t(ical)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)o (s)h(may)f(be)0 1064 y(part)d(of)g(th)l(e)f(r)q(e)l(fe)l(r)q(enc)-6 b(e)60 b(frame.)91 b FM(D)8 b(Y)g(L)g(P)65 b FP(o)-5 b(pts)60 b(to)g(r)q(e)o(s)m(e)-7 b(t)60 b(th)l(e)g(r)q(e)l(fe)l(r)q (enc)-6 b(e)60 b(frame)g(to)g(d)-5 b(eal)60 b(with)e(this,)j(ra)-8 b(th)l(e)l(r)59 b(than)0 1263 y(u)-6 b(pda)e(ti)s(n)n(g)51 b(o)-7 b(r)53 b(r)q(ecalcu)l(la)-8 b(ti)s(n)n(g)51 b(th)l(e)h(c)l(o)-5 b(l)n(umn)52 b(n)m(o)-7 b(r)5 b(ms.)3771 11400 y(64)p eop end %%Page: 65 68 TeXDict begin 65 67 bop 0 475 a FL(17)244 b Fe(D)12 b(Y)g(L)g(P)88 b FL(Inte)-6 b(r)5 b(fa)l(c)-8 b(e)0 959 y FP(T)8 b(his)47 b(s)m(ec)-5 b(tio)l(n)47 b(d)-5 b(e)o(sc)d(r)s(ibe)o(s)48 b(th)l(e)f(na)-8 b(tive)48 b(i)s(nte)l(r)5 b(fa)n(c)-6 b(e)47 b(fo)-7 b(r)52 b FM(D)8 b(Y)g(L)g(P)t FP(.)65 b(In)48 b(a)-6 b(dditio)l(n)46 b(to)h(th)l(e)h(mai)s(n)f(r)q(o)-5 b(u)l(ti)s(n)n(e,)48 b FJ(dylp)p FP(,)h(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)0 1158 y(ar)q(e)44 b(pr)q(ovid)-5 b(e)l(d)43 b(fo)-7 b(r)43 b(a)n(cc)-6 b(e)o(s)h(s)45 b(to)e(th)l(e)g(s)n(o)-5 b(l)n(u)l(tio)l(n,) 43 b(i)s(ncl)n(udi)s(n)n(g)f(rays)h(and)g(t)s(a)l(b)l(l)n(ea)-8 b(u)44 b(vec)-5 b(to)e(rs;)47 b(fo)-7 b(r)43 b(pr)s(ic)m(i)s(n)n(g;)i (fo)-7 b(r)44 b(pr)s(i)s(nti)s(n)n(g;)0 1357 y(and)84 b(fo)-7 b(r)85 b(a)f(few)g(m)s(isc)-6 b(e)l(llan)n(eo)h(u)e(s)85 b(s)m(e)l(rvic)-6 b(e)o(s.)161 b(Sec)-5 b(tio)l(ns)84 b(17)-29 b(.1)84 b(\226)g(17)-29 b(.5)84 b(document)f(th)l(e)h(bas)n (ic)h(u)-7 b(s)m(e)85 b(of)j FM(D)8 b(Y)g(L)g(P)t FP(.)0 1556 y(Sec)-5 b(tio)l(ns)58 b(17)-29 b(.6)59 b(\226)g(17)-29 b(.9)58 b(d)-5 b(e)o(sc)d(r)s(ibe)60 b(th)l(e)f(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)59 b(u)-7 b(s)m(e)l(d)59 b(to)g(a)n(cc)-6 b(e)o(s)h(s)60 b(th)l(e)e(s)n(o)-5 b(l)n(u)l(tio)l(n,)59 b(and)g(th)l(e)g(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)59 b(pr)q(ovid)-5 b(e)l(d)0 1756 y(fo)e(r)49 b(pr)s(ic)m(i)s(n)n(g,)e(pr)s(i)s(nti)s(n)n (g,)h(and)g(m)s(isc)-6 b(e)l(llan)n(eo)h(u)e(s)49 b(s)m(e)l(rvic)-6 b(e)o(s.)64 b(Sec)-5 b(tio)l(ns)96 b(17)-29 b(.10)48 b(\226)g(17)-29 b(.12)48 b(d)-5 b(e)o(sc)d(r)s(ibe)49 b(th)l(e)f(parame)-7 b(te)l(rs,)0 1955 y(o)i(ptio)l(ns,)58 b(and)f(to)-5 b(l)n(e)l(ranc)f(e)o(s)58 b(pr)q(ovid)-5 b(e)l(d)58 b(by)j FM(D)8 b(Y)g(L)g(P)t FP(.)82 b(Fo)-7 b(r)58 b(a)-6 b(dditio)l(nal)56 b(d)-5 b(e)e(t)s(ails)59 b(o)l(n)e(h)n(ow)g(to)h(u)-7 b(s)m(e)62 b FM(D)8 b(Y)g(L)g(P)t FP(,)60 b(c)l(o)l(ns)-8 b(u)l(lt)57 b(th)l(e)0 2154 y(c)l(o)n(mments)63 b(i)s(n)f(th)l(e)h(s)n(o)-5 b(ur)q(c)f(e,)65 b(particu)l(larly)d(i)s(n) g FJ(dylp.h)i FP(and)f FJ(dy_setup.c)p FP(,)i(and)e(th)l(e)f(e)-5 b(xampl)n(e)63 b(dr)s(ive)l(rs)h(s)-8 b(u)i(p)e(plie)l(d)0 2353 y(i)s(n)53 b(th)l(e)f(dis)-5 b(tr)s(ib)d(u)l(tio)l(n.)253 2652 y FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)59 b(na)-8 b(tive)57 b(i)s(nte)l(r)5 b(fa)n(c)-6 b(e)58 b(is)g(pecu)l(li)s(ar)g(to)j FM(D)8 b(Y)g(L)g(P)64 b FP(and)57 b(a)h(bit)f(l)n(ow-l)n(eve)l(l)h(i)s (n)g(pla)n(c)-6 b(e)o(s.)80 b(Many)57 b(i)s(ndivid)-7 b(uals)56 b(will)0 2851 y(\002)s(nd)44 b(it)g(mo)-7 b(r)q(e)45 b(c)l(o)l(nvenient)e(to)i(u)-7 b(s)m(e)49 b FM(D)8 b(Y)g(L)g(P)50 b FP(as)45 b(an)f(e)n(mbe)l(dd)-5 b(e)l(d)44 b(c)l(o)n(mpo)l(n)n(ent)f (withi)s(n)g(th)l(e)h(s)n(oftwar)q(e)g(i)s(nfras)-5 b(tru)g(c)g(t)l(ur) q(e)0 3051 y(pr)q(ovid)g(e)l(d)71 b(by)h(th)l(e)j(C)8 b FM(O)g(I)g(N)g FP(-)g(O)g(R)79 b(pr)q(oj)l(ec)-5 b(t)72 b([2].)123 b(Fo)-7 b(r)72 b(d)-5 b(e)e(t)s(ails)73 b(of)f(th)l(e)j(C)8 b FM(O)g(I)g(N)g FP(-)g(O)g(R)79 b(OSI)72 b(laye)l(r)f(fo)-7 b(r)76 b FM(D)8 b(Y)g(L)g(P)t FP(,)79 b(Os)n(iDylp,)0 3250 y(pl)n(eas)m(e)53 b(c)l(o)l(ns)-8 b(u)l(lt)50 b(th)l(e)56 b(C)8 b FM(O)g(I)g(N)58 b FP(document)s(a)-8 b(tio)l(n.)64 b(An)51 b(a)-6 b(dd)h(e)l(d)53 b(a)-6 b(dv)r(ant)s(ag)n(e)51 b(of)h(this)g(a)-6 b(p)e(pr)q(oa)n(c)h(h)51 b(is)i(tha)-8 b(t)51 b(th)l(e)h(OSI)g(API)0 3449 y(pr)q(ovid)-5 b(e)o(s)50 b(a)h(s)n(o)-5 b(lve)l(r)11 b(-i)s(nd)-5 b(e)e(pend)i(ent)50 b(i)s(nte)l(r)5 b(fa)n(c)-6 b(e.)64 b(T)8 b(h)l(e)50 b(und)-5 b(e)l(rlyi)s(n)n(g)47 b(s)n(o)-5 b(lve)l(r)50 b(can)h(be)f(eas)n(ily)h(c)-7 b(han)n(g)n(e)l(d)48 b(beca)-8 b(u)h(s)m(e)51 b(th)l(e)0 3649 y(OSI)i(laye)l(r)f(i)s(ns)-8 b(u)l(la)g(te)o(s)52 b(th)l(e)g(client)h(fr)q(o)n(m)g(th)l(e)f(d)-5 b(e)e(t)s(ails)53 b(of)g(th)l(e)g(s)n(o)-5 b(lve)l(r)12 b(')-5 b(s)52 b(na)-8 b(tive)52 b(i)s(nte)l(r)5 b(fa)n(c)-6 b(e.)249 3947 y(T)8 b(h)l(e)61 b FM(D)8 b(Y)g(L)g(P)63 b FP(dis)-5 b(tr)s(ib)d(u)l(tio)l(n)55 b(pr)q(ovid)-5 b(e)o(s)58 b(a)f(s)n(i)s(mpl)n(e)h(C)f(dr)s(ive)l(r)h(pr)q(ogram)e(u)-7 b(s)n(i)s(n)n(g)61 b FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)58 b(na)-8 b(tive)57 b(i)s(nte)l(r)5 b(fa)n(c)-6 b(e)58 b(i)s(n)f(th)l(e)0 4147 y(\002l)n(e)66 b FJ(osi_dylp.c)p FP(.)105 b(T)8 b(h)l(e)66 b(c)l(o)n(mmand)g(`)p FJ(osi_dylp)50 b(-h)p FP(')66 b(will)f(pr)s(i)s(nt)g(a)i(me)o(s)-5 b(sag)n(e)66 b(d)-5 b(e)o(sc)d(r)s(ibi)s(n)n(g)65 b(th)l(e)g(a)-7 b(v)r(aila)l(b)l(l)n(e)66 b(c)l(o)n(mmand)0 4346 y(li)s(n)n(e)53 b(o)-5 b(ptio)l(ns.)253 4645 y FM(D)8 b(Y)g(L)g(P)62 b FP(as)-5 b(s)d(ume)o(s)57 b(tha)-8 b(t)55 b(th)l(e)h(c)l(o)l(ns)-5 b(trai)s(nt)55 b(sys)-5 b(te)n(m)55 b(pas)-5 b(s)m(e)l(d)56 b(to)g(it)h(as)f(a)h(parame)-7 b(te)l(r)56 b FG(does)c(not)67 b FP(c)l(o)l(nt)s(ai)s(n)55 b(l)n(og)t(ical)0 4844 y(v)r(ar)s(i)s(a)l (b)l(l)n(e)o(s)60 b(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)60 b(sla)n(c)-8 b(ks)59 b(and)g(arti\002c)m(i)s(als\).)84 b(On)59 b(occas)n(io)l(n,)i(it)e(m)l(u)-7 b(s)i(t)59 b(r)q(e)-7 b(t)l(ur)5 b(n)59 b(v)r(al)n(u)l(e)o(s)h(fo)-7 b(r)59 b(l)n(og)t(ical)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s;)k(i)s(n)0 5043 y(s)-8 b(u)j(c)e(h)53 b(cas)m(e)o(s,)g(it)g(will)f(u)-7 b(s)m(e)53 b(th)l(e)f(n)n(e)-5 b(ga)d(tive)52 b(of)h(th)l(e)g(i)s(nd)-5 b(e)g(x)52 b(of)h(th)l(e)f(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)52 b(c)l(o)l(ns)-5 b(trai)s(nt.)0 5636 y Fu(17)-35 b(.1)197 b(Sim)-6 b(ple)e(x)64 b(So)-10 b(lve)-5 b(r)4 6055 y FM(D)8 b(Y)g(L)g(P)59 b FP(is)52 b(call)n(e)l(d)i(as)0 6520 y Fd(lpr)o(et_enum)40 b(dylp)h(\()g(lppr)n(ob_str)s(uct)e(*or)s (ig_lp,)g(lpopts_str)s(uct)g(*or)s(ig_opts)s(,)f(lptols_str)s(uct)h (*or)s(ig_tols)s(,)1314 6719 y(lpsta)q(ts_str)s(uct)g(*or)s(ig_sta)q (ts)f(\))415 7038 y FP(T)8 b(h)l(e)44 b FJ(or)s(ig_lp)f FP(s)-5 b(tru)g(c)g(t)l(ur)q(e)44 b(\(\24717)-29 b(.10\))43 b(s)-8 b(pec)m(i\002e)o(s)45 b(th)l(e)e(c)l(o)l(ns)-5 b(trai)s(nt)44 b(sys)-5 b(te)n(m,)45 b(c)l(o)l(ntr)q(o)-5 b(l)43 b(o)-5 b(ptio)l(ns,)45 b(and)f(\(o)-5 b(ptio)l(nally\))415 7237 y(an)62 b(i)s(niti)s(al)h(bas)n(is)g(and)f(s)-5 b(t)s(a)d(t)l(u)h(s)63 b(vec)-5 b(to)e(r)63 b(and)f(an)h(i)s(niti)s(al) f(a)n(c)-5 b(tive)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(s)m(e)-7 b(t.)95 b(It)63 b(is)g(u)-7 b(s)m(e)l(d)62 b(to)h(r)q(e)-7 b(t)l(ur)5 b(n)62 b(th)l(e)415 7436 y(\002)s(nal)i(s)-5 b(t)s(a)d(t)l(u)h(s,)68 b(pr)s(i)s(mal)c(and)g(d)-7 b(ual)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(v)r(al)n(u)l(e)o(s,)i(bas)n(is,)h(and)c (s)-5 b(t)s(a)d(t)l(u)h(s)65 b(vec)-5 b(to)e(r)e(,)67 b(and)d(\(o)-5 b(ptio)l(nally\))62 b(th)l(e)415 7636 y(a)n(c)-5 b(tive)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)415 7901 y(T)8 b(h)l(e)43 b FJ(or)s(ig_opts)e FP(s)-5 b(tru)g(c)g(t)l(ur)q (e)43 b(\(\24717)-29 b(.11\))42 b(s)-8 b(pec)m(i\002e)o(s)43 b(o)-5 b(ptio)l(n)41 b(s)m(e)-7 b(tti)s(n)n(gs)42 b(to)h(c)l(o)l(ntr)q (o)-5 b(l)46 b FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)44 b(a)n(c)-5 b(tio)l(ns.)61 b(T)8 b(h)l(e)43 b FJ(or)s(ig_tols)415 8101 y FP(s)-5 b(tru)g(c)g(t)l(ur)q(e)53 b(\(\24717)-29 b(.12\))51 b(s)-8 b(pec)m(i\002e)o(s)53 b(n)n(ume)l(r)s(ic)g(to)-5 b(l)n(e)l(ranc)f(e)o(s)53 b(and)f(r)q(e)l(la)-8 b(te)l(d)53 b(c)l(o)l(ntr)q(o)-5 b(l)51 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n.)415 8366 y(T)8 b(h)l(e)44 b(o)-5 b(ptio)l(nal)43 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)45 b FJ(or)s(ig_stats)e FP(\(\24718\))h(can)g(be)h(u)-7 b(s)m(e)l(d)44 b(\(i)s(n)g(c)l(o)l(nj) -7 b(unc)i(tio)l(n)43 b(with)g(c)l(o)l(nditio)l(nally)e(c)l(o)n(mpil)n (e)l(d)415 8566 y(c)l(od)-5 b(e\))53 b(to)f(r)q(e)-7 b(t)l(ur)5 b(n)53 b(d)-5 b(e)e(t)s(ail)n(e)l(d)53 b(s)-5 b(t)s(a)d(tis)j(tics)53 b(a)l(bo)-5 b(u)l(t)56 b FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)55 b(a)n(c)-5 b(tio)l(ns.)0 9158 y Fu(17)-35 b(.2)197 b(Parame)-10 b(te)-5 b(r)63 b(Ro)-5 b(u)g(tin)f(es)0 9577 y FP(T)8 b(h)l(e)52 b(n)m(o)-7 b(r)5 b(mal)52 b(s)m(eq)l(u)l(enc)-6 b(e)53 b(to)g(e)o(s)-5 b(t)s(a)l(b)l(lis)d(h)52 b(parame)-7 b(te)l(r)53 b(v)r(al)n(u)l(e)o(s)h (fo)-7 b(r)57 b FM(D)8 b(Y)g(L)g(P)58 b FP(is)53 b(as)g(fo)-5 b(ll)n(ows:)176 10009 y(1.)83 b(T)8 b(h)l(e)76 b(client)g(calls)g FJ(dy_def)-6 b(aults)77 b FP(to)f(all)n(oca)-8 b(te)76 b(o)-5 b(ptio)l(n)75 b(and)h(to)-5 b(l)n(e)l(ranc)f(e)76 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)76 b(and)g(po)-5 b(p)g(u)l(la)d(te)75 b(th)l(e)n(m)415 10208 y(with)52 b(d)-5 b(e)l(fa)d(u)l(lt)52 b(v)r(al)n(u)l(e)o(s.)65 b(T)8 b(h)l(e)53 b(client)f(can)h(th)l(en)f(a) -6 b(dj)f(u)g(s)i(t)53 b(th)l(e)f(parame)-7 b(te)l(rs)54 b(as)f(d)-5 b(e)o(s)n(ir)q(e)l(d.)3771 11400 y(65)p eop end %%Page: 66 69 TeXDict begin 66 68 bop 176 466 a FP(2.)83 b(T)8 b(h)l(e)70 b(client)f(s)n(o)n(meh)n(ow)g(e)o(s)-5 b(t)s(a)l(b)l(lis)d(h)l(e)o(s)69 b(th)l(e)h(o)-7 b(r)s(ig)t(i)s(nal)69 b(c)l(o)-5 b(py)69 b(of)h(th)l(e)f(c)l(o)l(ns)-5 b(trai)s(nt)69 b(sys)-5 b(te)n(m.)116 b(Typically)-17 b(,)73 b(this)415 665 y(will)51 b(be)g(a)h(call)f(to)h(a)f(c)l(o)l(ns)-5 b(trai)s(nt)51 b(sys)-5 b(te)n(m)51 b(g)n(en)n(e)l(ra)-8 b(to)h(r)4051 605 y FA(6)4130 665 y FP(,)52 b(o)-7 b(r)51 b(a)h(call)g(to)f(a)h(r)q (o)-5 b(u)l(ti)s(n)n(e)51 b(whic)-7 b(h)50 b(will)g(r)q(ea)-6 b(d)52 b(an)f(MPS)415 865 y(\002l)n(e.)176 1197 y(3.)83 b(T)8 b(h)l(e)69 b(client)g(calls)h FJ(dy_chec)n(kdef)-6 b(aults)69 b FP(to)h(to)f(s)m(e)-7 b(t)70 b(parame)-7 b(te)l(r)70 b(v)r(al)n(u)l(e)o(s)g(whic)-7 b(h)68 b(ar)q(e)i(calcu)l (la)-8 b(te)l(d)69 b(bas)m(e)l(d)g(o)l(n)415 1396 y(pr)q(o)-5 b(pe)l(rtie)o(s)54 b(of)g(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)53 b(sys)-5 b(te)n(m,)54 b(and)g(to)g(ens)-8 b(ur)q(e)53 b(tha)-8 b(t)54 b(all)g(parame)-7 b(te)l(rs)54 b(ar)q(e)h(withi)s(n)d (a)n(cc)-6 b(e)f(pt)s(a)l(b)l(l)n(e)415 1595 y(bo)i(unds.)0 2060 y Fd(v)m(oid)41 b(dy_def)n(aults)d(\()k(lpopts_str)s(uct)c(**opts) s(,)i(lptols_str)s(uct)f(**tols)h(\))415 2374 y FP(T)8 b(his)44 b(r)q(o)-5 b(u)l(ti)s(n)n(e)44 b(will)f(all)n(oca)-8 b(te)45 b(an)f(o)-5 b(ptio)l(ns)43 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)44 b FJ(opts)g FP(and)g(a)h(to)-5 b(l)n(e)l(ranc)f(e)44 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)44 b FJ(tols)g FP(and)g(po)-5 b(p)g(u)l(la)d(te)415 2573 y(th)l(e)n(m)45 b(with)f(th)l(e)h(s)-5 b(t)s(andar)q(d)46 b(d)-5 b(e)l(fa)d(u)l(lt)44 b(v)r(al)n(u)l(e)o(s)i (fo)-7 b(r)50 b FM(D)8 b(Y)g(L)g(P)t FP(.)65 b(Note)45 b(tha)-8 b(t)45 b(d)-5 b(e)l(fa)d(u)l(lt)45 b(v)r(al)n(u)l(e)o(s)h(fo) -7 b(r)46 b(s)n(o)n(me)g(parame)-7 b(te)l(rs)415 2772 y(ar)q(e)53 b(calcu)l(la)-8 b(te)l(d)53 b(i)s(n)f FJ(dy_chec)n(kdef)-6 b(aults)53 b FP(bas)m(e)l(d)f(o)l(n)g(th)l(e)g(s)n(ize)h(of)g(th)l(e)g (c)l(o)l(ns)-5 b(trai)s(nt)51 b(sys)-5 b(te)n(m.)0 3237 y Fd(v)m(oid)41 b(dy_chec)n(kdef)n(aults)36 b(\()42 b(consys_str)s(uct) c(*sys)s(,)j(lpopts_str)s(uct)d(*opts)s(,)i(lptols_str)s(uct)f(*tols)i (\))415 3551 y FP(T)8 b(his)60 b(r)q(o)-5 b(u)l(ti)s(n)n(e)61 b(c)-7 b(h)l(ec)f(ks)60 b(li)s(m)s(its)h(o)l(n)f(parame)-7 b(te)l(r)61 b(v)r(al)n(u)l(e)o(s)g(and)f(calcu)l(la)-8 b(te)o(s)60 b(v)r(al)n(u)l(e)o(s)h(whic)-7 b(h)60 b(d)-5 b(e)e(pend)60 b(o)l(n)g(th)l(e)415 3750 y(s)n(ize)41 b(of)g(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)40 b(sys)-5 b(te)n(m.)61 b(Us)m(e)l(r)11 b(-s)-8 b(u)i(p)e(plie)l(d)40 b(v)r(al)n(u)l(e)o(s)h(ar)q(e)h FG(not)52 b FP(ove)l(rr)s(idd)-5 b(en)41 b(unl)n(e)o(s)-5 b(s)41 b(th)l(ey)f(ar)q(e)h(o)-5 b(u)l(ts)n(id)g(e)415 3949 y(of)57 b FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)54 b(bo)-5 b(unds)52 b(fo)-7 b(r)53 b(th)l(e)f(parame)-7 b(te)l(r)d(.)0 4414 y Fd(v)m(oid)41 b(dy_setpr)s(intopts)c(\()42 b(int)f(lvl,)g(lpopts_str)s(uct)e(*opts)h(\))415 4728 y FP(T)8 b(his)56 b(r)q(o)-5 b(u)l(ti)s(n)n(e)56 b(is)h(pr)q(ovid)-5 b(e)l(d)56 b(p)-5 b(ur)q(e)l(ly)56 b(fo)-7 b(r)56 b(c)l(o)l(nvenienc)-6 b(e;)58 b(it)e(will)g(s)m(e)-7 b(t)57 b(all)f(of)k FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)58 b(pr)s(i)s(nt)e(l)n(eve)l(ls)i(bas)m(e)l (d)e(o)l(n)415 4927 y(th)l(e)k(s)n(i)s(n)n(gl)n(e)g(v)r(al)n(u)l(e)g(s) -8 b(u)i(p)e(plie)l(d)59 b(fo)-7 b(r)60 b FJ(lvl)p FP(.)87 b(Ro)-5 b(u)l(ghly)-17 b(,)60 b FJ(lvl)44 b FP(=)h(0)60 b(s)-8 b(u)i(p)e(pr)q(e)o(s)j(s)m(e)o(s)60 b(all)g(o)-5 b(u)l(tp)g(u)l(t,)61 b FJ(lvl)44 b FP(=)g(1)61 b(e)o(s)-5 b(t)s(a)l(b)l(lis)d(h)l(e)o(s)60 b(th)l(e)415 5126 y(d)-5 b(e)l(fa)d(u)l(lt)67 b(pr)s(i)s(nt)h(l)n(eve)l(ls,)73 b(whic)-7 b(h)67 b(all)n(ow)g(me)o(s)-5 b(sag)n(e)o(s)69 b(a)l(bo)-5 b(u)l(t)68 b(e)-5 b(xtrao)e(r)q(di)s(nary)67 b(events,)72 b(and)c FJ(lvl)48 b FF(\263)g FP(2)68 b(pr)q(ovid)-5 b(e)o(s)415 5326 y(i)s(nc)d(r)q(eas)n(i)s(n)n(g)52 b(amo)-5 b(unts)52 b(of)h(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n.)63 b(Co)l(ns)-8 b(u)l(lt)51 b(th)l(e)i(c)l(od)-5 b(e)52 b(fo)-7 b(r)53 b(d)-5 b(e)e(t)s(ails.)0 5918 y Fu(17)-35 b(.3)197 b(Bas)n(is)65 b(Pa)m(c)-10 b(kage)63 b(Initialisa)-10 b(tio)-5 b(n)0 6337 y FP(T)8 b(h)l(e)64 b(GL)s(PK)g(bas)n(is)i(pa)n(c) -8 b(kag)n(e)63 b(u)-7 b(s)m(e)l(d)65 b(i)s(n)j FM(D)8 b(Y)g(L)g(P)71 b FP(mai)s(nt)s(ai)s(ns)64 b(s)-5 b(t)s(a)d(tic)65 b(da)-8 b(t)s(a)65 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)65 b(tha)-8 b(t)64 b(m)l(u)-7 b(s)i(t)65 b(be)g(i)s(niti)s(alis)m(e)l(d)0 6537 y(be)l(fo)-7 b(r)q(e)52 b(u)-7 b(s)m(e)51 b(and)g(fr)q(ee)l(d)g (afte)l(r)h(u)-7 b(s)m(e.)65 b(Fo)-7 b(r)52 b(e)l(\002)-49 b(\002c)m(iency)-17 b(,)50 b(it)i(is)f(u)-7 b(s)m(e)l(fu)l(l)51 b(to)g(pos)-5 b(tpo)l(n)n(e)51 b(i)s(niti)s(alisa)-8 b(tio)l(n)50 b(until)g(th)l(e)h(s)n(ize)g(of)0 6736 y(th)l(e)59 b(c)l(o)l(ns)-5 b(trai)s(nt)57 b(sys)-5 b(te)n(m)59 b(is)g(kn)m(own)e (and)h(can)h(be)g(u)-7 b(s)m(e)l(d)59 b(to)g(e)o(s)-5 b(ti)s(ma)d(te)60 b(th)l(e)f(s)n(ize)g(of)g(th)l(e)f(bas)n(is)i(pa)n(c) -8 b(kag)n(e')j(s)57 b(da)-8 b(t)s(a)0 6935 y(s)j(tru)g(c)g(t)l(ur)q(e) o(s,)61 b(b)-8 b(u)l(t)62 b FM(D)8 b(Y)g(L)g(P)65 b FP(will)58 b(e)-5 b(xpand)59 b(th)l(e)f(bas)n(is)i(s)-5 b(tru)g(c)g(t)l(ur)q(e)o (s)59 b(if)g(it)g(d)-5 b(e)e(tec)i(ts)60 b(tha)-8 b(t)59 b(th)l(e)f(c)l(o)l(ns)-5 b(trai)s(nt)59 b(sys)-5 b(te)n(m)58 b(has)0 7134 y(gr)q(own)66 b(too)i(larg)n(e)f(fo)-7 b(r)68 b(th)l(e)g(all)n(oca)-8 b(te)l(d)68 b(ca)-6 b(pa)n(c)m(ity)-17 b(.)111 b(Initi)s(alisa)-8 b(tio)l(n)66 b(m)l(u)-7 b(s)i(t)68 b(occur)h(be)l(fo)-7 b(r)q(e)68 b(th)l(e)f(\002rs)-5 b(t)69 b(call)f(to)g FJ(dylp)p FP(.)0 7334 y(T)8 b(h)l(e)52 b(bas)n(is)i(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)53 b(s)-8 b(h)n(o)j(u)l(ld)51 b(be)i(fr)q(ee)l(d)g(wh)l(en)e(th)l(ey)h(ar)q(e)h (n)m(o)f(l)n(o)l(n)n(g)n(e)l(r)f(n)n(ee)l(d)-5 b(e)l(d.)0 7799 y Fd(v)m(oid)41 b(dy_initbasis)d(\()k(int)f(concnt,)f(int)h(f)n (actor_fr)o(eq,)e(double)h(zer)n(o_tol)f(\))415 8112 y FJ(dy_initbasis)84 b FP(i)s(niti)s(alis)m(e)o(s)f(th)l(e)h(da)-8 b(t)s(a)84 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)84 b(u)-7 b(s)m(e)l(d)84 b(by)f(th)l(e)h(GL)s(PK)f(bas)n(is)h(mai)s(ntenanc)-6 b(e)84 b(pa)n(c)-8 b(kag)n(e.)415 8311 y FJ(concnt)80 b FP(s)-8 b(pec)m(i\002e)o(s)80 b(th)l(e)g(max)10 b(i)s(m)l(um)80 b(all)n(owa)l(b)l(l)n(e)g(n)n(umbe)l(r)g(of)g(r)q(ows)g(\(c)l(o)l(ns)-5 b(trai)s(nts\).)147 b FJ(f)-6 b(actor_fr)o(eq)80 b FP(is)h(th)l(e)415 8511 y(max)10 b(i)s(m)l(um)69 b(n)n(umbe)l(r)f(of)h(bas)n(is)g(u)-6 b(pda)e(te)o(s)69 b(whic)-7 b(h)68 b(can)h(occur)g(be)-7 b(tween)68 b(ea)n(c)-7 b(h)69 b(\(r)q(e\)fa)n(c)-5 b(to)e(r)s(isa)f (tio)l(n)68 b(of)h(th)l(e)415 8710 y(bas)n(is.)154 b(A)82 b(c)l(o)l(ns)m(e)l(rv)r(a)-8 b(tive)81 b(v)r(al)n(u)l(e)h(will)f(be)i (a)f(bit)g(larg)n(e)l(r)e(than)i(th)l(e)f(r)q(e)-5 b(g)n(u)l(lar)82 b(r)q(e)l(fa)n(c)-5 b(to)e(r)s(isa)f(tio)l(n)81 b(i)s(nte)l(rv)r(al;) 415 8909 y(fo)-7 b(r)88 b FM(D)8 b(Y)g(L)g(P)t FP(,)93 b FJ(lpopts)r FP(.)r FJ(f)-6 b(actor)39 b FP(+)h(5.)158 b(T)8 b(h)l(e)83 b(\002)s(nal)g(parame)-7 b(te)l(r)e(,)91 b FJ(zer)m(o_tol)p FP(,)f(can)84 b(be)f(u)-7 b(s)m(e)l(d)84 b(to)f(ove)l(rr)s(id)-5 b(e)83 b(GL)s(PK')-5 b(s)415 9108 y(d)g(e)l(fa)d(u)l(lt)63 b(ze)l(r)q(o)h(to)-5 b(l)n(e)l(ranc)f(e) 64 b(if)g(it)f(is)h(s)m(e)-7 b(t)65 b(to)f(any)f(v)r(al)n(u)l(e)h(oth)l (e)l(r)f(than)g(ze)l(r)q(o.)98 b(Be)64 b(s)-8 b(ur)q(e)64 b(yo)-5 b(u)63 b(und)-5 b(e)l(rs)g(t)s(and)63 b(th)l(e)415 9308 y(ram)s(i\002ca)-8 b(tio)l(ns)52 b(of)h(ove)l(rr)s(idi)s(n)n(g)e (th)l(e)h(d)-5 b(e)l(fa)d(u)l(lt.)415 9573 y(T)8 b(h)l(e)63 b(r)q(o)-5 b(u)l(ti)s(n)n(e)63 b(s)m(e)-7 b(ts)64 b(s)m(eve)l(ral)f (oth)l(e)l(r)f(parame)-7 b(te)l(rs)64 b(i)s(mpo)-7 b(rt)s(ant)63 b(to)g(pivoti)s(n)n(g.)95 b(Inte)l(r)q(e)o(s)-5 b(te)l(d)63 b(r)q(ea)-6 b(d)h(e)l(rs)63 b(s)-8 b(h)n(o)j(u)l(ld)415 9773 y(c)l(o)l(ns)d(u)l(lt)51 b(th)l(e)i(c)l(o)n(mments)f(i)s(n)h(th)l (e)f(c)l(od)-5 b(e)53 b(\()p FJ(dy_basis)s(.c:dy_initbasis)p FP(\).)p 0 9907 3120 7 v 295 10116 a Ft(6)365 10164 y FM(Co)m(ns)-7 b(u)m(lt)46 b(th)m(e)g Ff(consys)i FM(document)s(a)-7 b(tio)m(n)45 b(fo)-5 b(r)46 b(i)s(nfo)-5 b(r)t(ma)e(tio)m(n)45 b(o)m(n)g(h)o(ow)g(to)i(u)-5 b(s)m(e)46 b(th)m(e)g(r)q(o)l(u)m(ti)s(n)o (e)o(s)g(i)s(n)f(th)m(e)g Ff(consys)j FM(pa)n(c)-7 b(kag)n(e)46 b(to)h(b)-7 b(uild)47 b(a)365 10322 y(c)m(o)m(ns)l(trai)s(nt)42 b(sys)l(te)n(m)g(fr)q(o)o(m)f(sc)-7 b(ra)g(tc)i(h.)3771 11400 y FP(66)p eop end %%Page: 67 70 TeXDict begin 67 69 bop 0 466 a Fd(v)m(oid)41 b(dy_fr)o(eebasis)e(\()i (v)m(oid)g(\))415 780 y FP(T)8 b(his)53 b(r)q(o)-5 b(u)l(ti)s(n)n(e)52 b(will)g(fr)q(ee)h(th)l(e)f(da)-8 b(t)s(a)53 b(s)-5 b(tru)g(c)g(t)l(ur) q(e)o(s)53 b(all)n(oca)-8 b(te)l(d)53 b(by)f(th)l(e)g(call)h(to)g FJ(dy_initbasis)p FP(.)0 1372 y Fu(17)-35 b(.4)197 b(Info)-8 b(r)t(m)n(a)e(tio)-5 b(n)64 b(an)-6 b(d)66 b(Err)n(o)-8 b(r)66 b(Mes)-6 b(sages)4 1792 y FM(D)8 b(Y)g(L)g(P)66 b FP(u)-7 b(s)m(e)o(s)60 b(pr)s(iv)r(a)-8 b(te)60 b(lib)-5 b(rary)59 b(pa)n(c)-8 b(kag)n(e)o(s)59 b(fo)-7 b(r)60 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)58 b(and)h(e)l(rr)q(o)-7 b(r)60 b(me)o(s)-5 b(sag)n(e)o(s)5707 1731 y FA(7)5788 1792 y FP(.)87 b(T)8 b(h)l(e)59 b(mos)-5 b(t)60 b(vis)n(ib)l(l)n(e)h(v) r(al)n(u)l(e-)0 1991 y(a)-6 b(dd)h(e)l(d)57 b(s)m(e)l(rvic)-6 b(e)58 b(pr)q(ovid)-5 b(e)l(d)57 b(by)g(th)l(e)g(lib)-5 b(rar)s(ie)o(s)58 b(is)g(i)s(nte)-5 b(gra)d(tio)l(n)55 b(of)i(\002l)n(e)h(and)f(te)l(r)5 b(m)s(i)s(nal)57 b(o)-5 b(u)l(tp)g(u)l(t.)79 b(Ro)-5 b(u)l(ti)s(n)n(e)o(s)56 b(whic)-7 b(h)0 2190 y(g)n(en)n(e)l(ra)f(te)70 b(o)-5 b(u)l(tp)g(u)l(t)71 b(a)n(cc)-6 b(e)f(pt)72 b(parame)-7 b(te)l(rs)72 b(to)f(s)-8 b(pec)m(ify)71 b(wh)l(e)-7 b(th)l(e)l(r)69 b(th)l(e)i(o)-5 b(u)l(tp)g(u)l(t)71 b(g)n(en)n(e)l(ra)-8 b(te)l(d)70 b(by)h(a)g(call)h(s)-8 b(h)n(o)j(u)l(ld)70 b(be)0 2389 y(s)m(ent)65 b(to)g(a)h(\002l)n(e,)i(to)d(th)l(e)g(te)l(r)5 b(m)s(i)s(nal,)68 b(both,)g(o)-7 b(r)65 b(n)n(eith)l(e)l(r)-10 b(.)102 b(T)8 b(h)l(e)65 b(lib)-5 b(rary)64 b(pa)n(c)-8 b(kag)n(e)o(s)64 b(m)l(u)-7 b(s)i(t)65 b(be)h(i)s(niti)s(alis)m(e)l(d)e (d)-7 b(ur)s(i)s(n)n(g)0 2589 y(s)i(t)s(art)l(u)f(p.)66 b(A)52 b(b)-5 b(r)s(ie)l(f)53 b(e)-5 b(xplana)d(tio)l(n)51 b(is)i(pr)q(ovid)-5 b(e)l(d)52 b(h)l(e)l(r)q(e.)0 3087 y FN(Info)-7 b(r)s(m)n(a)f(tio)l(n)56 b(Mes)-5 b(sages)249 3435 y FP(T)8 b(h)l(e)64 b(I/O)f(lib)-5 b(rary)63 b(pr)q(ovid)-5 b(e)o(s)64 b(a)h(c)l(o)l(nvenient)d(means)i(to)g(g)n(en)n(e)l(ra)-8 b(te)62 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)63 b(me)o(s)-5 b(sag)n(e)o(s.)99 b(Info)-7 b(r)5 b(ma)-8 b(tio)l(n)0 3635 y(me)o(s)j(sag)n(e)o(s)45 b(may)f(u)-7 b(s)m(e)44 b(any)g(of)g(th)l(e)g(s)-5 b(t)s(andar)q(d)44 b(C)g(c)l(o)l(nve)l(rs)n (io)l(n)f(s)-8 b(pec)m(i\002ca)g(tio)l(ns;)46 b(th)l(e)e(und)-5 b(e)l(rlyi)s(n)n(g)41 b(pr)s(i)s(nt)j(en)n(g)t(i)s(n)n(e)f(fo)-7 b(r)0 3834 y(th)l(e)62 b(curr)q(ent)g(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n)60 b(is)j FJ(vfpr)s(intf)p FP(.)93 b(In)62 b(a)-6 b(dditio)l(n)61 b(to)h(i)s(nte)-5 b(gra)d(te)l(d)61 b(\002l)n(e)i(and)f(te)l(r)5 b(m)s(i)s(nal)62 b(i/)-12 b(o,)64 b(th)l(e)e(lib)-5 b(rary)0 4033 y(manag)n(e)o(s)72 b(o)-5 b(pen)72 b(\002l)n(e)g(d)-5 b(e)o(sc)d(r)s(ipto)h(rs)73 b(and)f(c)l(oo)-7 b(r)q(di)s(na)f(te)o(s)72 b(a)n(c)-5 b(tivity)72 b(with)f(th)l(e)h(e)l(rr)q(o)-7 b(r)73 b(me)o(s)-5 b(sag)n(e)72 b(lib)-5 b(rary)-17 b(.)124 b(See)73 b(th)l(e)0 4232 y(c)l(od)-5 b(e)57 b(fo)-7 b(r)57 b(e)-5 b(xampl)n(e)o(s)58 b(of)f(u)-7 b(sag)n(e)57 b(of)g(th)l(e)g(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s) 57 b(u)-7 b(s)m(e)l(d)57 b(to)g(g)n(en)n(e)l(ra)-8 b(te)56 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)55 b(me)o(s)-5 b(sag)n(e)o(s)58 b(\()p FJ(outchr)p FP(,)f FJ(outfmt)p FP(,)0 4432 y(and)j FJ(outfxd)p FP(\).)87 b(T)8 b(h)l(e)60 b(s)n(i)s(mpl)n(e)h(dr)s(ive)l (r)f(i)s(n)g FJ(osi_dylp.c)g FP(c)l(o)l(nt)s(ai)s(ns)g(a)g(fragment)f (of)h(c)l(od)-5 b(e)61 b(whic)-7 b(h)59 b(u)-7 b(s)m(e)o(s)60 b(th)l(e)g FJ(chgerr)s(log)0 4631 y FP(r)q(o)-5 b(u)l(ti)s(n)n(e)52 b(to)h(me)l(rg)n(e)f(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)51 b(and)h(e)l(rr)q(o)-7 b(r)53 b(me)o(s)-5 b(sag)n(e)o(s)53 b(i)s(n)g(a)g(s)n(i)s(n)n(gl)n(e)f(l)n(og)h(\002l)n(e.)249 4930 y(Initi)s(alisa)-8 b(tio)l(n)68 b(and)h(s)-8 b(hu)l(tdown)67 b(of)j(th)l(e)f(e)l(rr)q(o)-7 b(r)70 b(me)o(s)-5 b(sag)n(e)70 b(pa)n(c)-8 b(kag)n(e)68 b(is)i(a)n(cc)l(o)n(mplis)-8 b(h)l(e)l(d)68 b(with)g(th)l(e)h(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)0 5129 y FJ(ioinit)52 b FP(and)h FJ(ioter)t(m)p FP(.)0 5561 y Fd(bool)41 b(ioinit)f(\()i(v)m(oid)e(\))415 5869 y FP(Initi)s(alis)m(e)o(s)53 b(i)s(nte)l(r)5 b(nal)52 b(da)-8 b(t)s(a)52 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s.)0 6334 y Fd(v)m(oid)41 b(ioter)r(m)g(\()h(v)m(oid)e(\))415 6644 y FP(Cl)n(eans)64 b(u)-6 b(p)63 b(and)h(s)-8 b(hu)l(ts)63 b(down)f(th)l(e)h(i/)-12 b(o)64 b(pa)n(c)-8 b(kag)n(e.)96 b(Note)64 b(tha)-8 b(t)63 b FJ(ioter)t(m)h FG(does)58 b(not)75 b FP(cl)n(os)m(e)65 b(o)-5 b(pen)63 b(s)-5 b(tr)q(eams.)415 6843 y(It)78 b(is)f(as)-5 b(s)d(ume)l(d)77 b(tha)-8 b(t)76 b(th)l(e)h(client)g(will)f(cl)n(os)m(e)h(o)-5 b(pen)77 b(s)-5 b(tr)q(eams)78 b(as)f(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te,)83 b(and)77 b(tha)-8 b(t)76 b(r)q(e)n(mai)s(ni)s(n)n(g)415 7043 y(s)-5 b(tr)q(eams)53 b(can)g(be)g(l)n(e)l(ft)g(o)-5 b(pen)52 b(until)g(cl)n(os)m(e)l(d)h(by)f(th)l(e)g(o)-5 b(pe)l(ra)d(ti)s(n)n(g)51 b(sys)-5 b(te)n(m)53 b(a)-8 b(t)52 b(pr)q(ogram)g(te)l(r)5 b(m)s(i)s(na)-8 b(tio)l(n.)0 7541 y FN(Err)o(o)h(r)56 b(Mes)-5 b(sages)249 7889 y FP(T)8 b(h)l(e)69 b(e)l(rr)q(o)-7 b(r)69 b(me)o(s)-5 b(sag)n(e)69 b(lib)-5 b(rary)68 b(pr)q(ovid)-5 b(e)o(s)69 b(a)g(c)l(o)l(nvenient)e(means)i(to)g(g)n(en)n(e)l(ra)-8 b(te)67 b(war)5 b(ni)s(n)n(g)67 b(and)h(e)l(rr)q(o)-7 b(r)69 b(me)o(s-)0 8089 y(sag)n(e)o(s.)95 b(Err)q(o)-7 b(r)63 b(me)o(s)-5 b(sag)n(e)o(s)63 b(may)g(u)-7 b(s)m(e)63 b(any)f(of)g(th)l(e)h(s)-5 b(t)s(andar)q(d)62 b(C)h(c)l(o)l(nve)l(rs)n (io)l(n)f(s)-8 b(pec)m(i\002ca)g(tio)l(ns;)66 b(th)l(e)c(und)-5 b(e)l(rlyi)s(n)n(g)0 8288 y(pr)s(i)s(nt)59 b(en)n(g)t(i)s(n)n(e)f(fo)-7 b(r)59 b(th)l(e)f(curr)q(ent)h(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(n)57 b(is)i FJ(vfpr)s(intf)p FP(.)83 b(T)8 b(h)l(e)59 b(te)-5 b(xt)59 b(of)g(e)l(rr)q(o)-7 b(r)59 b(me)o(s)-5 b(sag)n(e)o(s)59 b(r)q(e)o(s)n(id)-5 b(e)60 b(i)s(n)f(a)g(\002l)n(e)0 8487 y(\()p FJ(bonsaierr)s(s)s(.txt)65 b FP(i)s(n)h(th)l(e)j FM(D)8 b(Y)g(L)g(P)72 b FP(dis)-5 b(tr)s(ib)d(u)l(tio)l(n\).)102 b(Err)q(o)-7 b(r)65 b(me)o(s)-5 b(sag)n(e)o(s)67 b(ar)q(e)f(pr)s(i)s (nte)l(d)f(u)-7 b(s)n(i)s(n)n(g)65 b(th)l(e)h(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)66 b FJ(w)l(ar)s(n)g FP(and)0 8686 y FJ(err)t(msg)p FP(.)h(In)53 b(calls)h(to)f(th)l(e)o(s)m(e)g(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s,)54 b(th)l(e)f(e)l(rr)q(o)-7 b(r)53 b(me)o(s)-5 b(sag)n(e)53 b(is)h(s)-8 b(pec)m(i\002e)l(d)53 b(by)f(a)i(n)n(umbe)l(r)-10 b(.)66 b(If)53 b(an)h(e)l(rr)q(o)-7 b(r)53 b(me)o(s)-5 b(sag)n(e)0 8886 y(\002l)n(e)74 b(cann)m(ot)f(be)h (l)n(oca)-8 b(te)l(d,)79 b(a)74 b(g)n(en)n(e)l(r)s(ic)f(e)l(rr)q(o)-7 b(r)74 b(me)o(s)-5 b(sag)n(e)75 b(g)t(ivi)s(n)n(g)d(th)l(e)h(e)l(rr)q (o)-7 b(r)74 b(n)n(umbe)l(r)g(will)e(be)i(pr)q(od)-7 b(u)i(c)f(e)l(d.)128 b(See)0 9085 y(th)l(e)58 b(c)l(od)-5 b(e)59 b(fo)-7 b(r)59 b(e)-5 b(xampl)n(e)o(s)59 b(of)g(u)-7 b(sag)n(e)58 b(of)h(th)l(e)f(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)59 b(u)-7 b(s)m(e)l(d)58 b(to)h(g)n(en)n(e)l(ra)-8 b(te)58 b(war)5 b(ni)s(n)n(g)56 b(\()p FJ(w)l(ar)s(n)p FP(\))i(and)g(e)l(rr)q (o)-7 b(r)59 b(\()p FJ(err)t(msg)p FP(\))0 9284 y(me)o(s)-5 b(sag)n(e)o(s.)249 9583 y(Initi)s(alisa)d(tio)l(n)68 b(and)h(s)-8 b(hu)l(tdown)67 b(of)j(th)l(e)f(e)l(rr)q(o)-7 b(r)70 b(me)o(s)-5 b(sag)n(e)70 b(pa)n(c)-8 b(kag)n(e)68 b(is)i(a)n(cc)l(o)n(mplis)-8 b(h)l(e)l(d)68 b(with)g(th)l(e)h(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)0 9782 y FJ(err)s(init)53 b FP(and)f FJ(err)s(ter)t(m)p FP(.)p 0 9890 3120 7 v 345 10083 a Ft(7)415 10131 y FM(T)7 b(his)48 b(u)-5 b(sag)n(e)48 b(is)h(his)l(to)-5 b(r)s(ical,)49 b(r)q(oote)m(d)h(i)s(n)d(an)i(anc)m (ient)f(e)m(ra)h(wh)m(en)e(i/)-9 b(o)48 b(was)g(s)l(till)h(a)g(r)q(o)l (ll-yo)l(ur)9 b(-own)49 b(ente)m(rpr)s(is)m(e)g(tha)-7 b(t)49 b(dif)o(f)n(e)m(r)q(e)m(d)415 10289 y(drama)-7 b(tically)42 b(fr)q(o)o(m)g(o)m(n)o(e)f(o)l(pe)m(ra)-7 b(ti)s(n)n(g)42 b(sys)l(te)n(m)g(and)g(pr)q(ogramm)s(i)s(n)n(g)f(envir) q(o)m(nment)g(to)i(th)m(e)f(n)o(e)l(xt.)3771 11400 y FP(67)p eop end %%Page: 68 71 TeXDict begin 68 70 bop 0 466 a Fd(v)m(oid)41 b(err)s(init)f(\()i (const)e(char)h(*emsgpa)q(th,)e(const)h(char)h(*elogpa)q(th,)e(bool)h (err)o(echo\))g(\))415 785 y FP(T)8 b(h)l(e)77 b(parame)-7 b(te)l(r)78 b FJ(emsgpath)g FP(s)-8 b(pec)m(i\002e)o(s)77 b(th)l(e)g(\002l)n(e)h(c)l(o)l(nt)s(ai)s(ni)s(n)n(g)e(th)l(e)h(e)l(rr)q (o)-7 b(r)77 b(me)o(s)-5 b(sag)n(e)o(s.)141 b(T)8 b(h)l(e)77 b(parame)-7 b(te)l(r)415 984 y FJ(elogpath)66 b FP(s)-8 b(pec)m(i\002e)o(s)66 b(a)g(\002l)n(e)h(name)f(to)g(be)g(u)-7 b(s)m(e)l(d)66 b(to)g(l)n(og)g(e)l(rr)q(o)-7 b(r)66 b(me)o(s)-5 b(sag)n(e)o(s;)73 b(if)66 b(n)n(u)l(ll,)j(e)l(rr)q(o)-7 b(r)66 b(me)o(s)-5 b(sag)n(e)o(s)67 b(ar)q(e)415 1183 y(n)m(ot)58 b(l)n(ogg)n(e)l(d.)82 b(T)8 b(h)l(e)59 b(parame)-7 b(te)l(r)59 b FJ(err)o(echo)g FP(s)-8 b(h)n(o)j(u)l(ld)58 b(be)h(s)m(e)-7 b(t)59 b(to)g(tru)l(e)g(if)g(e)l(rr)q(o)-7 b(r)59 b(me)o(s)-5 b(sag)n(e)o(s)59 b(s)-8 b(h)n(o)j(u)l(ld)58 b(be)h(ec)-7 b(h)n(oe)l(d)415 1382 y(to)53 b FJ(stderr)p FP(,)g(fals)m(e)g(oth)l(e)l(rwis)m(e.)0 1847 y Fd(v)m(oid)41 b(err)s(ter)r(m)g(\()g(v)m(oid)g(\))415 2156 y FP(Cl)n(eans)73 b(u)-6 b(p)74 b(and)f(s)-8 b(hu)l(ts)72 b(down)g(th)l(e)h(e)l(rr)q(o)-7 b(r)74 b(me)o(s)-5 b(sag)n(e)73 b(pa)n(c)-8 b(kag)n(e.)126 b(In)74 b(kee)-7 b(pi)s(n)n(g)72 b(with)g(th)l(e)h(beha)-7 b(vio)i(ur)72 b(of)415 2355 y FJ(ioter)t(m)p FP(,)53 b(it)g(is)g(l)n(e)l(ft)g(to)f(th)l(e)h(client)f(o)-7 b(r)53 b(o)-5 b(pe)l(ra)d(ti)s(n)n(g)51 b(sys)-5 b(te)n(m)52 b(to)h(cl)n(os)m(e)g(any)f(e)l(rr)q(o)-7 b(r)53 b(l)n(og)g(\002l)n(e.) 249 2787 y(On)j(s)-5 b(t)s(art)l(u)f(p,)57 b(th)l(e)f(e)l(rr)q(o)-7 b(r)57 b(me)o(s)-5 b(sag)n(e)56 b(pa)n(c)-8 b(kag)n(e)55 b(s)-8 b(h)n(o)j(u)l(ld)55 b(be)i(i)s(niti)s(alis)m(e)l(d)e(\002rs)-5 b(t,)57 b(fo)-5 b(ll)n(owe)l(d)56 b(by)g(th)l(e)f(i/)-12 b(o)57 b(pa)n(c)-8 b(kag)n(e.)0 2986 y(At)53 b(te)l(r)5 b(m)s(i)s(na)-8 b(tio)l(n,)51 b(th)l(e)h(i/)-12 b(o)53 b(pa)n(c)-8 b(kag)n(e)51 b(s)-8 b(h)n(o)j(u)l(ld)52 b(be)h(s)-8 b(hu)l(t)52 b(down)f(\002rs)-5 b(t.)0 3579 y Fu(17)-35 b(.5)197 b(Summ)n(ary)65 b(of)71 b Fc(D)10 b(Y)g(L)g(P)73 b Fu(Start)-5 b(u)e(p)63 b(an)-6 b(d)66 b(Shu)-5 b(tdown)0 3998 y FP(Pu)l(lli)s(n)n(g)64 b(tog)n(e)-7 b(th)l(e)l(r)65 b(th)l(e)g(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)65 b(fr)q(o)n(m)h(th)l(e) g(pr)q(evio)-5 b(u)e(s)66 b(s)m(ec)-5 b(tio)l(ns,)69 b(th)l(e)c(s)m(eq)l(u)l(enc)-6 b(e)66 b(of)h(a)n(c)-5 b(tio)l(ns)65 b(r)q(eq)l(uir)q(e)l(d)g(to)0 4197 y(u)-7 b(s)m(e)57 b FM(D)8 b(Y)g(L)g(P)59 b FP(is)53 b(lis)-5 b(te)l(d)52 b(be)l(l)n(ow.)176 4629 y(1.)83 b(Initi)s(alis)m(e)57 b(th)l(e)g(e)l(rr)q(o)-7 b(r)57 b(me)o(s)-5 b(sag)n(e)57 b(and)g(i/)-12 b(o)57 b(pa)n(c)-8 b(kag)n(e)o(s.)77 b(Open)57 b(l)n(og)f(\002l)n(e)o(s)i(fo)-7 b(r)58 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)55 b(and)i(e)l(rr)q(o)-7 b(r)57 b(me)o(s-)415 4828 y(sag)n(e)o(s)c(\(o)-5 b(ptio)l(nal\).)176 5160 y(2.)83 b(Es)-5 b(t)s(a)l(b)l(lis)d(h)61 b(d)-5 b(e)l(fa)d(u)l(lt)61 b(parame)-7 b(te)l(r)63 b(s)-5 b(tru)g(c)g(t)l(ur) q(e)o(s.)94 b(Open)61 b(and)h(pars)m(e)h(a)f(\002l)n(e)h(of)j FM(D)8 b(Y)g(L)g(P)68 b FP(o)-5 b(ptio)l(n)61 b(s)-8 b(pec)m(i\002ca)g(tio)l(ns)415 5359 y(\(o)j(ptio)l(nal\).)176 5692 y(3.)83 b(Cr)q(ea)-8 b(te)62 b(a)g(c)l(o)l(ns)-5 b(trai)s(nt)61 b(sys)-5 b(te)n(m)61 b(u)-7 b(s)n(i)s(n)n(g)62 b(a)g(c)l(o)l(ns)-5 b(trai)s(nt)61 b(g)n(en)n(e)l(ra)-8 b(to)h(r)60 b(o)-7 b(r)62 b(by)g(r)q(ea)-6 b(di)s(n)n(g)61 b(an)g(i)s(np)-5 b(u)l(t)61 b(\002l)n(e.)93 b(Adj)-7 b(u)g(s)i(t)415 5891 y(o)g(ptio)l(ns)57 b(and)g(to)-5 b(l)n(e)l(ranc)f(e)o(s)59 b(to)e(ma)-8 b(tc)h(h)58 b(th)l(e)g(c)l(o)l (ns)-5 b(trai)s(nt)57 b(sys)-5 b(te)n(m.)80 b(At)58 b(s)n(o)n(me)g(poi) s(nt)f(be)-7 b(tween)57 b(c)-8 b(r)q(ea)g(ti)s(n)n(g)57 b(th)l(e)415 6090 y(c)l(o)l(ns)-5 b(trai)s(nt)52 b(sys)-5 b(te)n(m)52 b(and)h(calli)s(n)n(g)e FJ(dylp)p FP(,)i(c)l(o)l(nve)l(rt)f (any)g(`)p FF(\263)p FP(')g(c)l(o)l(ns)-5 b(trai)s(nts)52 b(to)h(oth)l(e)l(r)f(fo)-7 b(r)5 b(ms.)176 6422 y(4.)83 b(Initi)s(alis)m(e)52 b(th)l(e)h(bas)n(is)g(pa)n(c)-8 b(kag)n(e.)176 6754 y(5.)83 b(Co)l(ns)-5 b(tru)g(c)g(t)52 b(parame)-7 b(te)l(r)53 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)53 b(and)f(call)h FJ(dylp)p FP(.)176 7086 y(6.)83 b(Pr)q(oc)-6 b(e)o(s)h(s)67 b(th)l(e)f(answe)l(r)-9 b(,)68 b(r)q(e)o(s)-5 b(to)e(r)s(i)s(n)n(g)66 b(`)p FF(\263)p FP(')f(c)l(o)l(ns)-5 b(trai)s(nts)65 b(and)h(a)-6 b(dj)f(u)g(s)i(ti)s(n)n(g)65 b(th)l(e)h(answe)l(r)f(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)l(ly)-17 b(,)69 b(if)d(th)l(e)415 7286 y(a)-6 b(p)e(plica)g(tio)l(n)51 b(d)-5 b(e)n(mands)52 b(it.)205 7618 y(7)-29 b(.)83 b(Fr)q(ee)57 b(da)-8 b(t)s(a)56 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s.)76 b(T)8 b(his)56 b(may)g(r)q(eq)l(uir)q(e)g(an)g(a)-6 b(dditio)l(nal)54 b(call)j(to)f FJ(dylp)p FP(,)h(if)f(th)l(e)g(parame)-7 b(te)l(rs)57 b(g)t(iven)e(i)s(n)415 7817 y(th)l(e)62 b(pr)q(evio)-5 b(u)e(s)62 b(call)h(i)s(ns)-5 b(tru)g(c)g(te)l(d)66 b FM(D)8 b(Y)g(L)g(P)68 b FP(to)62 b(r)q(e)-7 b(t)s(ai)s(n)63 b(i)s(nte)l(r)5 b(nal)61 b(da)-8 b(t)s(a)62 b(s)-5 b(tru)g(c)g(t)l(ur)q (e)o(s)63 b(fo)-7 b(r)62 b(e)l(\002)-49 b(\002c)m(ient)61 b(r)q(eo)-5 b(pti)s(m)s(isa-)415 8016 y(tio)l(n.)64 b(It)54 b(will)d(c)-6 b(e)l(rt)s(ai)s(nly)53 b(r)q(eq)l(uir)q(e)g(calls)g(to)f FJ(dy_fr)o(eebasis)p FP(,)i FJ(dy_fr)o(eesoln)p FP(,)f(and)g FJ(consys_fr)o(ee)p FP(.)176 8348 y(8.)83 b(Cl)n(os)m(e)53 b(\002l)n(e)o(s)g(and)g(s)-8 b(hu)l(t)51 b(down)h(th)l(e)g(i/)-12 b(o)53 b(and)f(e)l(rr)q(o)-7 b(r)53 b(me)o(s)-5 b(sag)n(e)53 b(pa)n(c)-8 b(kag)n(e)o(s.)0 8780 y(Co)l(ns)g(u)l(lt)51 b(th)l(e)h(sampl)n(e)i(dr)s(ive)l(rs)f(pr)q(ovid)-5 b(e)l(d)52 b(with)j FM(D)8 b(Y)g(L)g(P)59 b FP(fo)-7 b(r)53 b(e)-5 b(xampl)n(e)53 b(i)s(mpl)n(e)n(ment)s(a)-8 b(tio)l(ns.)0 9373 y Fu(17)-35 b(.6)197 b(So)-10 b(lu)-5 b(tio)g(n,)63 b(Ray)-20 b(,)66 b(an)-6 b(d)67 b(T)-5 b(ab)g(leau)65 b(Ro)-5 b(u)g(tin)f(es)4 9792 y FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)72 b(na)-8 b(t)l(ural)69 b(i)s(ncli)s(na)-8 b(tio)l(n)68 b(is)i(to)g(r)q(e)-7 b(t)l(ur)5 b(n)70 b(a)g(c)l(o)n(mpa)n (c)-5 b(t)71 b(ve)l(rs)n(io)l(n)e(of)i(th)l(e)e(bas)n(is)i(and)f(th)l (e)g(pr)s(i)s(mal)g(and)g(d)-7 b(ual)0 9991 y(s)n(o)i(l)n(u)l(tio)l(ns) 57 b(withi)s(n)f(th)l(e)i FJ(lppr)m(ob_str)s(uct)f FP(pas)-5 b(s)m(e)l(d)58 b(as)h(th)l(e)f FJ(or)s(ig_lp)f FP(parame)-7 b(te)l(r)59 b(to)f FJ(dylp)p FP(.)83 b(T)8 b(his)58 b(is)g(n)m(ot)g (always)f(c)l(o)l(n-)0 10190 y(venient)c(o)-7 b(r)54 b(s)-8 b(u\002)-49 b(\002c)m(ient)53 b(fo)-7 b(r)54 b(th)l(e)f(client,) h(s)n(o)k FM(D)8 b(Y)g(L)g(P)59 b FP(als)n(o)54 b(pr)q(ovid)-5 b(e)o(s)54 b(a)g(v)r(ar)s(ie)-7 b(ty)54 b(of)g(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)54 b(to)g(r)q(e)-7 b(t)l(ur)5 b(n)53 b(i)s(ndivid)-7 b(ual)0 10390 y(c)l(o)n(mpo)l(n)n(ents)52 b(of)h(th)l(e)f(s)n(o)-5 b(l)n(u)l(tio)l(n,)51 b(rays)i(\(wh)l(en)e(pr) q(e)o(s)m(ent\),)h(and)g(t)s(a)l(b)l(l)n(ea)-8 b(u)53 b(vec)-5 b(to)e(rs.)3771 11400 y(68)p eop end %%Page: 69 72 TeXDict begin 69 71 bop 0 466 a FN(So)-8 b(lu)l(tio)l(n)54 b(Ro)l(u)l(tin)-5 b(es)249 815 y FP(T)8 b(h)l(e)53 b(fo)-5 b(ll)n(owi)s(n)n(g)51 b(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)53 b(r)q(e)-7 b(t)l(ur)5 b(n)52 b(th)l(e)h(v)r(al)n(u)l(e)o(s)g(of)g(pr)s (i)s(mal)h(and)e(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(and)f (th)l(e)f(s)-5 b(t)s(a)d(t)l(u)h(s)54 b(of)f(pr)s(i)s(mal)0 1014 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)154 b(In)81 b(all)h(cas)m(e)o (s,)90 b(if)82 b(th)l(e)g(client)f(doe)o(s)h(n)m(ot)f(pr)q(ovid)-5 b(e)82 b(a)g(vec)-5 b(to)e(r)83 b(fo)-7 b(r)82 b(th)l(e)f(r)q(e)o(s)-8 b(u)l(lt,)89 b(a)83 b(vec)-5 b(to)e(r)82 b(will)f(be)0 1213 y(all)n(oca)-8 b(te)l(d.)0 1615 y Fd(v)m(oid)41 b(dy_colDuals)d(\()k(lppr)n(ob_str)s(uct)c(*or)s(ig_lp,)h(double)h (**p_cbar)-11 b(,)39 b(bool)i(tr)s(ueDuals)e(\))415 1949 y FP(Re)-7 b(t)l(ur)5 b(ns)48 b(th)l(e)g(v)r(al)n(u)l(e)o(s)g(of)h(th)l (e)f(d)-7 b(ual)47 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)j(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)48 b(with)f(n)m(o)l(n)m(bas)n(ic)g(pr)s(i)s (mal)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)p 7095 1848 90 7 v 52 w FG(c)7190 1880 y Fz(N)7334 1949 y FP(=)39 b FG(c)7567 1889 y Fz(N)7700 1949 y FP(\014)417 2148 y FG(c)512 2088 y Fz(B)616 2148 y FG(B)756 2088 y FA(\0141)914 2148 y FG(N)17 b FP(,)51 b(i)s(n)e(c)l(o)-5 b(l)n(umn)49 b(o)-7 b(r)q(d)i(e)l(r)-10 b(.)64 b(Pu)l(t)49 b(an)m(oth)l(e)l(r)f(way) -17 b(,)50 b(th)l(e)f(d)-7 b(ual)49 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h (as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)49 b(with)f(ar)q(c)-7 b(hitec)i(t)l(urals)415 2347 y(a)d(t)53 b(bo)-5 b(und)51 b(\(tight)h(i)s(mplic)m(it)g(bo)-5 b(und)51 b(c)l(o)l(ns)-5 b(trai)s(nts\))52 b(and)g(l)n(og)t(icals)h(a)-8 b(t)52 b(bo)-5 b(und)52 b(\(tight)f(e)-5 b(xplic)m(it)52 b(c)l(o)l(ns)-5 b(trai)s(nts\).)415 2547 y(If)80 b FJ(tr)s(ueDuals)f FP(is)g(fals)m(e,)86 b(th)l(e)79 b(s)n(ign)g(c)l(o)l(nventio)l(n)e(is)i (tha)-8 b(t)79 b(of)g(th)l(e)g(m)s(i)s(ni)s(m)s(isa)-8 b(tio)l(n)78 b(pr)s(i)s(mal)h(pr)q(o)-8 b(b)l(l)n(e)n(m)78 b(with)415 2746 y(i)s(mplic)m(it)60 b(bo)-5 b(unds)59 b(s)n(o)-5 b(lve)l(d)60 b(by)k FM(D)8 b(Y)g(L)g(P)t FP(,)64 b(h)l(enc)-6 b(e)60 b(th)l(e)g(vec)-5 b(to)e(r)61 b(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)60 b(is)g(pr)q(ec)m(is)m(e)l(ly)g(th)l(e)g(r)q (e)l(d)-7 b(u)i(c)f(e)l(d)59 b(c)l(os)-5 b(ts.)89 b(If)415 2945 y FJ(tr)s(ueDuals)54 b FP(is)g(tru)l(e,)g(th)l(e)f(s)n(ign)g(c)l (o)l(nventio)l(n)f(is)i(tha)-8 b(t)53 b(of)h(th)l(e)g(tru)l(e)f(d)-7 b(ual)53 b(pr)q(o)-8 b(b)l(l)n(e)n(m)53 b(with)g(all)g(i)s(mplic)m(it)g (bo)-5 b(und)415 3144 y(c)l(o)l(ns)g(trai)s(nts)65 b(ma)-6 b(d)h(e)66 b(e)-5 b(xplic)m(it,)68 b(h)l(enc)-6 b(e)66 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)65 b(c)l(os)-5 b(ts)66 b(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g)63 b(to)j(pr)s(i)s(mal)g(v)r (ar)s(i)s(a)l(b)l(l)n(e)o(s)h(n)m(o)l(n)m(bas)n(ic)415 3344 y(a)-8 b(t)53 b(u)-6 b(p)e(pe)l(r)52 b(bo)-5 b(und)51 b(ar)q(e)j(n)n(e)-5 b(ga)d(te)l(d)52 b(to)g(g)n(e)-7 b(t)53 b(th)l(e)f(c)l(o)-7 b(rr)q(ec)i(t)53 b(v)r(al)n(u)l(e)g(fo)-7 b(r)53 b(th)l(e)g(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e.)0 3796 y Fd(v)m(oid)41 b(dy_r)n(o)m(wDuals)d(\()j(lppr)n(ob_str)s(uct)e (*or)s(ig_lp,)g(double)h(**p_y)-15 b(,)40 b(bool)h(tr)s(ueDuals)e(\)) 415 4123 y FP(Re)-7 b(t)l(ur)5 b(ns)61 b(th)l(e)h(v)r(al)n(u)l(e)o(s)g (of)g(th)l(e)f(d)-7 b(ual)61 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)61 b(with)g(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nts,)63 b FG(y)49 b FP(=)e FG(c)6768 4062 y Fz(B)6871 4123 y FG(B)7011 4062 y FA(\0141)7162 4123 y FP(,)64 b(i)s(n)e(r)q(ow)415 4322 y(o)-7 b(r)q(d)i(e)l(r)-10 b(.)113 b(If)69 b FJ(tr)s(ueDuals)g FP(is)g(fals)m(e,)k(th)l(e)68 b(s)n(ign)g(c)l(o)l(nventio)l(n)f(is)i(tha)-8 b(t)68 b(of)h(th)l(e)f(m)s(i)s(ni)s(m)s(isa)-8 b(tio)l(n)68 b(pr)s(i)s(mal)h(pr)q(o)-8 b(b)l(l)n(e)n(m)415 4521 y(s)n(o)j(lve)l(d) 60 b(by)j FM(D)8 b(Y)g(L)g(P)t FP(.)90 b(If)60 b FJ(tr)s(ueDuals)g FP(is)h(tru)l(e,)g(th)l(e)f(s)n(ign)g(c)l(o)l(nventio)l(n)e(is)i(tha)-8 b(t)60 b(of)g(th)l(e)g(tru)l(e)f(d)-7 b(ual)60 b(pr)q(o)-8 b(b)l(l)n(e)n(m.)86 b(In)415 4721 y(eith)l(e)l(r)67 b(cas)m(e,)72 b(d)-7 b(ual)67 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)67 b(with)g(`)p FF(\263)p FP(')f(c)l(o)l(ns) -5 b(trai)s(nts)67 b(ar)q(e)h(n)n(e)-5 b(ga)d(te)l(d.)109 b(\(T)8 b(his)67 b(c)l(o)l(nventio)l(n)f(is)415 4920 y(a)-6 b(do)h(pte)l(d)53 b(s)n(o)f(tha)-8 b(t)51 b FG(y)15 b(A)57 b FP(`j)-7 b(u)g(s)i(t)52 b(wo)-7 b(rks')52 b(o)l(n)g(a)h(c)l(o) l(ns)-5 b(trai)s(nt)52 b(sys)-5 b(te)n(m)52 b(with)g(a)h(m)s(ix)g(of)g (`)p FF(\243)p FP(')e(and)i(`)p FF(\263)p FP(')f(c)l(o)l(ns)-5 b(trai)s(nts.\))0 5372 y Fd(v)m(oid)41 b(dy_colPr)s(imals)e(\()i(lppr)n (ob_str)s(uct)d(*or)s(ig_lp,)i(double)g(**p_x)g(\))415 5678 y FP(Re)-7 b(t)l(ur)5 b(ns)52 b(th)l(e)g(v)r(al)n(u)l(e)o(s)i(of)e (all)h(pr)s(i)s(mal)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)h(i)s(n)e(c)l(o) -5 b(l)n(umn)52 b(o)-7 b(r)q(d)i(e)l(r)-10 b(.)65 b(\(See)53 b(als)n(o)f FJ(dy_expandxopt)p FP(.\))0 6130 y Fd(v)m(oid)41 b(dy_r)n(o)m(wPr)s(imals)d(\()k(lppr)n(ob_str)s(uct)c(*or)s(ig_lp,)i (double)g(**p_xB,)f(int)j(**p_indB)d(\))415 6436 y FP(Re)-7 b(t)l(ur)5 b(ns)71 b(th)l(e)h(v)r(al)n(u)l(e)o(s)g(of)g(th)l(e)g(bas)n (ic)g(pr)s(i)s(mal)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)k(i)s(n)72 b(r)q(ow)f(\()r(bas)n(is\))i(o)-7 b(r)q(d)i(e)l(r)-10 b(.)123 b(T)8 b(h)l(e)71 b(i)s(ndic)-6 b(e)o(s)73 b(of)f(th)l(e)415 6635 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)f(ar)q(e)g(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)70 b(i)s(n)g FJ(p_indB)p FP(.)g(T)8 b(h)l(e)70 b(i)s(ndic)-6 b(e)o(s)71 b(of)f(bas)n(ic)h(l)n(og)t(ical)f (v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(ar)q(e)g(enc)l(od)-5 b(e)l(d)70 b(as)h(th)l(e)415 6835 y(n)n(e)-5 b(ga)d(tive)52 b(of)h(th)l(e)g(i)s(nd)-5 b(e)g(x)52 b(of)h(th)l(e)f(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)52 b(c)l(o)l(ns)-5 b(trai)s(nt.)0 7287 y Fd(v)m(oid)41 b(dy_logPr)s(imals)e(\()i(lppr)n(ob_str)s(uct)d (*or)s(ig_lp,)i(double)g(**p_logx)f(\))415 7593 y FP(Re)-7 b(t)l(ur)5 b(ns)52 b(th)l(e)g(v)r(al)n(u)l(e)o(s)i(of)e(th)l(e)h(pr)s (i)s(mal)g(l)n(og)t(ical)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)i(i)s(n)e(r) q(ow)g(o)-7 b(r)q(d)i(e)l(r)-10 b(.)0 8045 y Fd(v)m(oid)41 b(dy_colSta)q(tus)d(\()j(lppr)n(ob_str)s(uct)e(*or)s(ig_lp,)g(\003ags)i (**p_colsta)q(t)d(\))415 8351 y FP(Re)-7 b(t)l(ur)5 b(ns)65 b(th)l(e)g(s)-5 b(t)s(a)d(t)l(u)h(s)65 b(of)h(all)f(pr)s(i)s(mal)h(v)r (ar)s(i)s(a)l(b)l(l)n(e)o(s,)j(i)s(n)c(c)l(o)-5 b(l)n(umn)65 b(o)-7 b(r)q(d)i(e)l(r)-10 b(.)103 b(Note)65 b(tha)-8 b(t)65 b(this)g(r)q(o)-5 b(u)l(ti)s(n)n(e)65 b(r)q(e)-7 b(t)l(ur)5 b(ns)415 8550 y(th)l(e)52 b(fu)l(ll)h(ran)n(g)n(e)e(of)h(s) -5 b(t)s(a)d(t)l(u)h(s)54 b(c)l(od)-5 b(e)o(s)53 b(u)-7 b(s)m(e)l(d)53 b(by)j FM(D)8 b(Y)g(L)g(P)t FP(.)0 9003 y Fd(v)m(oid)41 b(dy_logSta)q(tus)d(\()j(lppr)n(ob_str)s(uct)e(*or)s (ig_lp,)g(\003ags)i(**p_logsta)q(t)d(\))415 9309 y FP(Re)-7 b(t)l(ur)5 b(ns)64 b(th)l(e)h(s)-5 b(t)s(a)d(t)l(u)h(s)66 b(of)f(all)g(l)n(og)t(ical)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)70 b(i)s(n)65 b(r)q(ow)f(o)-7 b(r)q(d)i(e)l(r)-10 b(.)102 b(Note)66 b(tha)-8 b(t)64 b(this)h(r)q(o)-5 b(u)l(ti)s(n)n(e)65 b(r)q(e)-7 b(t)l(ur)5 b(ns)65 b(th)l(e)415 9508 y(fu)l(ll)52 b(ran)n(g)n(e)f(of)i(s)-5 b(t)s(a)d(t)l(u)h(s)53 b(c)l(od)-5 b(e)o(s)54 b(u)-7 b(s)m(e)l(d)52 b(by)57 b FM(D)8 b(Y)g(L)g(P)t FP(.)0 9960 y Fd(bool)41 b(dy_e)m(xpandxopt)c(\()42 b(lppr)n(ob_str)s (uct)c(*lp,)j(double)f(**p_xopt)f(\))415 10261 y FP(T)8 b(his)54 b(r)q(o)-5 b(u)l(ti)s(n)n(e)54 b(e)-5 b(xam)s(i)s(n)n(e)o(s)55 b(th)l(e)f FJ(lp)h FP(da)-8 b(t)s(a)54 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)54 b(and)g(as)-5 b(s)m(e)n(mb)l(l)n(e)o(s)55 b(th)l(e)f(v)r(al)n(u)l(e)o (s)g(of)h(th)l(e)f(bas)n(ic)h(and)e(n)m(o)l(n-)415 10460 y(bas)n(ic)h(pr)s(i)s(mal)e(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(i)s(nto)e (a)h(s)n(i)s(n)n(gl)n(e)g(vec)-5 b(to)e(r)d(.)65 b(\(See)53 b(als)n(o)f FJ(dy_colPr)s(im)m(als)p FP(.\))3771 11400 y(69)p eop end %%Page: 70 73 TeXDict begin 70 72 bop 0 466 a FN(Ray)56 b(Ro)l(u)l(tin)-5 b(es)249 815 y FP(T)8 b(his)47 b(pair)g(of)h(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)47 b(r)q(e)-7 b(t)l(ur)5 b(n)47 b(th)l(e)g(rays)g(e)n(mana)-8 b(ti)s(n)n(g)45 b(fr)q(o)n(m)j(th)l(e)f (curr)q(ent)g(pr)s(i)s(mal)g(o)-7 b(r)48 b(d)-7 b(ual)47 b(e)-5 b(xtr)q(e)n(me)47 b(poi)s(nt,)0 1014 y(wh)l(en)67 b(a)-7 b(v)r(aila)l(b)l(l)n(e,)71 b(u)-6 b(p)69 b(to)f(th)l(e)g(n)n (umbe)l(r)g(s)-8 b(pec)m(i\002e)l(d)67 b(by)h(th)l(e)g(client.)111 b(T)8 b(h)l(e)69 b(n)n(umbe)l(r)e(of)i(rays)f(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)68 b(will)f(be)0 1213 y(l)n(e)o(s)-5 b(s)60 b(than)f(o)-7 b(r)59 b(eq)l(ual)h(to)f(th)l(e)g(n)n(umbe)l(r)f (r)q(eq)l(u)l(e)o(s)-5 b(te)l(d.)89 b FM(D)8 b(Y)g(L)g(P)66 b FP(always)58 b(r)q(e)-7 b(t)l(ur)5 b(ns)59 b(a)h(s)-5 b(t)s(a)d(t)l(u)h(s)59 b(c)l(od)-5 b(e)60 b(i)s(n)f(th)l(e)g(c)l(o)l (nte)-5 b(xt)58 b(of)0 1412 y(th)l(e)c(pr)s(i)s(mal)h(pr)q(o)-8 b(b)l(l)n(e)n(m.)69 b(An)54 b(i)s(ndica)-8 b(tio)l(n)53 b(of)h(pr)s(i)s(mal)h(un)m(bo)-5 b(und)g(e)l(d)52 b(g)n(uarantee)o(s)i (th)l(e)g(e)-5 b(x)10 b(is)-5 b(tenc)f(e)55 b(of)g(pr)s(i)s(mal)f (rays.)0 1612 y(An)49 b(i)s(ndica)-8 b(tio)l(n)48 b(of)i(pr)s(i)s(mal)f (i)s(nfeas)n(ibility)g(will)g FG(almos)n(t)d(always)k FP(i)s(ndica)-8 b(te)49 b(d)-7 b(ual)49 b(un)m(bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s,)48 b(b)-8 b(u)l(t)49 b(kee)-7 b(p)50 b(i)s(n)0 1811 y(m)s(i)s(nd)j(tha)-8 b(t)52 b(it)g(is)h(pos)-5 b(s)n(ib)l(l)n(e)53 b(fo)-7 b(r)53 b(a)g(pr)q(o)-8 b(b)l(l)n(e)n(m)52 b(to)h(be)g(both)f(pr)s(i)s(mal)h(and)f(d)-7 b(ual)52 b(i)s(nfeas)n(ib)l(l)n(e.)0 2259 y Fd(bool)41 b(dy_pr)s(imalRays)d(\()k (lppr)n(ob_str)s(uct)c(*or)s(ig_lp,)i(int)h(*p_numRays)s(,)e(double)h (***p_rays)f(\))415 2574 y FP(Re)-7 b(t)l(ur)5 b(ns)56 b(all)g(pr)s(i)s(mal)h(rays)g(e)n(mana)-8 b(ti)s(n)n(g)54 b(fr)q(o)n(m)j(th)l(e)f(curr)q(ent)g(e)-5 b(xtr)q(e)n(me)56 b(poi)s(nt,)h(u)-6 b(p)57 b(to)f(th)l(e)g(li)s(m)s(it)h(s)-8 b(pec)m(i\002e)l(d)415 2773 y(by)49 b FJ(p_numRays)p FP(.)64 b(On)48 b(r)q(e)-7 b(t)l(ur)5 b(n,)50 b FJ(p_numRays)f FP(will)f(be)h(s)m(e)-7 b(t)50 b(to)f(th)l(e)g(n)n(umbe)l(r)f(of)h (rays)g(a)n(c)-5 b(t)l(ually)48 b(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d,)50 b(and)415 2973 y(ea)n(c)-7 b(h)71 b(entry)f(i)s(n)h FJ(p_r)m(ays)g FP(will)f(poi)s(nt)g(to)h(a)g(vec)-5 b(to)e(r)72 b(c)l(o)l(nt)s(ai)s(ni)s(n)n(g)d(o)l(n)n(e)i(ray)f(with)g(c)l(o)n(mpo)l (n)n(ents)g(i)s(n)h(c)l(o)-5 b(l)n(umn)415 3172 y(o)e(r)q(d)i(e)l(r)-10 b(.)132 b(If)76 b(n)m(o)e(vec)-5 b(to)e(r)76 b(is)f(s)-8 b(u)i(p)e(plie)l(d)74 b(fo)-7 b(r)75 b FJ(p_r)m(ays)p FP(,)81 b(o)l(n)n(e)75 b(will)f(be)h(all)n(oca)-8 b(te)l(d.)132 b(Do)75 b(n)m(ot)f(s)-8 b(u)i(p)e(ply)74 b(vec)-5 b(to)e(rs)76 b(fo)-7 b(r)415 3371 y(i)s(ndivid)g(ual)51 b(rays,)i(th)l(e)o(s)m(e)f (ar)q(e)i(all)n(oca)-8 b(te)l(d)52 b(as)h(n)n(ee)l(d)-5 b(e)l(d.)415 3633 y(T)8 b(his)85 b(r)q(o)-5 b(u)l(ti)s(n)n(e)85 b(s)-8 b(h)n(o)j(u)l(ld)83 b(o)l(nly)h(be)h(call)n(e)l(d)g(wh)l(en)j FM(D)8 b(Y)g(L)g(P)91 b FP(has)85 b(fo)-5 b(und)84 b(th)l(e)g(pr)q(o)-8 b(b)l(l)n(e)n(m)84 b(to)h(be)g(pr)s(i)s(mal)g(un-)415 3833 y(bo)-5 b(und)g(e)l(d.)63 b(If)51 b(th)l(e)f(pr)q(o)-8 b(b)l(l)n(e)n(m)50 b(was)g(s)n(o)-5 b(lve)l(d)50 b(to)g(o)-5 b(pti)s(mality)50 b(o)-7 b(r)51 b(fo)-5 b(und)49 b(to)h(be)h(pr)s(i)s (mal)g(i)s(nfeas)n(ib)l(l)n(e,)g(a)g(war)5 b(ni)s(n)n(g)415 4032 y(will)46 b(be)h(is)-5 b(s)d(u)l(e)l(d)47 b(b)-8 b(u)l(t)46 b(th)l(e)h(r)q(o)-5 b(u)l(ti)s(n)n(e)46 b(will)g(s)-5 b(till)47 b(r)q(e)-7 b(t)l(ur)5 b(n)46 b(tru)l(e.)64 b(If)47 b(th)l(e)g(r)q(o)-5 b(u)l(ti)s(n)n(e)46 b(is)i(call)n(e)l(d)f (fo)-7 b(r)47 b(any)f(oth)l(e)l(r)h(r)q(e)o(s)-8 b(u)l(lt,)415 4231 y(it)53 b(will)f(pr)s(i)s(nt)g(an)h(e)l(rr)q(o)-7 b(r)53 b(me)o(s)-5 b(sag)n(e)52 b(and)h(r)q(e)-7 b(t)l(ur)5 b(n)52 b(fals)m(e.)0 4693 y Fd(bool)41 b(dy_dualRays)d(\()k(lppr)n (ob_str)s(uct)c(*or)s(ig_lp,)h(bool)i(fullRay)-15 b(,)40 b(int)h(*p_numRays)s(,)e(double)h(***p_rays)s(,)1429 4892 y(bool)g(tr)s(ueDuals)g(\))415 5197 y FP(Re)-7 b(t)l(ur)5 b(ns)51 b(all)h(d)-7 b(ual)51 b(rays)h(e)n(mana)-8 b(ti)s(n)n(g)50 b(fr)q(o)n(m)i(th)l(e)g(curr)q(ent)f(e)-5 b(xtr)q(e)n(me)52 b(poi)s(nt,)g(u)-6 b(p)52 b(to)g(th)l(e)f(li)s(m)s(it)h(s)-8 b(pec)m(i\002e)l(d)52 b(by)415 5396 y FJ(p_numRays)p FP(.)65 b(On)53 b(r)q(e)-7 b(t)l(ur)5 b(n,)52 b FJ(p_numRays)g FP(will)g(be)h(s)m(e)-7 b(t)53 b(to)g(th)l(e)f(n)n(umbe)l(r)g(of)h (rays)g(a)n(c)-5 b(t)l(ually)51 b(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d.)415 5658 y(If)69 b FJ(fullRay)f FP(is)g(fals)m(e,)k(ea)n (c)-7 b(h)69 b(ray)f(is)g(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)68 b(as)h(an)h FG(m)14 b FP(-vec)-5 b(to)e(r)68 b(c)l(o)l(nt)s(ai)s(ni)s (n)n(g)e(o)l(nly)h(th)l(e)h(c)l(o)n(mpo)l(n)n(ents)f(as-)415 5858 y(s)n(oc)m(i)s(a)-8 b(te)l(d)81 b(with)g(th)l(e)g(r)q(ow)h(d)-7 b(uals,)88 b(i)s(n)82 b(r)q(ow)f(o)-7 b(r)q(d)i(e)l(r)-10 b(.)153 b(If)82 b FJ(fullRay)g FP(is)g(tru)l(e,)89 b(ea)n(c)-7 b(h)82 b(ray)f(is)h(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)82 b(as)g(an)415 6057 y(\()r FG(m)50 b FP(+)38 b FG(n)11 b FP(\)-vec)-5 b(to)e(r)d(.)110 b(T)8 b(h)l(e)67 b(\002rs)-5 b(t)70 b FG(m)81 b FP(entr)s(ie)o(s)69 b(c)l(o)l(nt)s(ai)s(n)e(th)l(e)g (c)l(o)n(mpo)l(n)n(ents)g(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)68 b(with)e(th)l(e)i(r)q(ow)f(d)-7 b(uals.)415 6256 y(T)8 b(h)l(e)54 b(r)q(e)n(mai)s(ni)s(n)n(g)h FG(n)64 b FP(entr)s(ie)o(s)55 b(c)l(o)l(nt)s(ai)s(n)f(th)l(e)g(c)l(o)n(mpo)l(n)n(ents)g(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)54 b(with)g(n)m(o)l(n)m(bas)n(ic)f(pr)s(i)s (mal)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)415 6455 y(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)62 b(th)l(e)e(ray)h(c)l(o)n(mpo)l(n)n (ents)e(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)61 b(with)e(tight)g(i)s(mplic)m (it)h(bo)-5 b(unds\).)88 b(If)61 b(n)m(o)f(vec)-5 b(to)e(r)61 b(is)g(s)-8 b(u)i(p)e(plie)l(d)59 b(fo)-7 b(r)415 6655 y FJ(p_r)m(ays)p FP(,)53 b(o)l(n)n(e)f(will)g(be)h(all)n(oca)-8 b(te)l(d.)65 b(Do)52 b(n)m(ot)g(s)-8 b(u)i(p)e(ply)51 b(vec)-5 b(to)e(rs)54 b(fo)-7 b(r)53 b(i)s(ndivid)-7 b(ual)51 b(rays,)i(th)l(e)o(s)m(e)f(ar)q(e)h(all)n(oca)-8 b(te)l(d)53 b(as)415 6854 y(n)n(ee)l(d)-5 b(e)l(d.)415 7116 y(If)64 b FJ(tr)s(ueDuals)f FP(is)g(fals)m(e,)j(th)l(e)c(s)n(ign)h (c)l(o)l(nventio)l(n)e(u)-7 b(s)m(e)l(d)63 b(is)g(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)63 b(fo)-7 b(r)64 b(a)f(m)s(i)s(ni)s(m)s (isa)-8 b(tio)l(n)62 b(pr)s(i)s(mal)h(with)415 7315 y(i)s(mplic)m(it)h (bo)-5 b(unds)63 b(\(ma)-8 b(tc)h(hi)s(n)n(g)62 b(th)l(e)i(v)r(al)n(u)l (e)o(s)h(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)63 b(by)h FJ(dy_r)m(o)m (wDuals)h FP(and)e FJ(dy_colDuals)p FP(\).)100 b(If)64 b FJ(tr)s(ueDuals)415 7515 y FP(is)k(tru)l(e,)j(th)l(e)d(s)n(ign)f(c)l (o)l(nventio)l(n)f(u)-7 b(s)m(e)l(d)67 b(is)h(a)-6 b(p)e(pr)q(o)j(pr)s (i)s(a)d(te)68 b(fo)-7 b(r)68 b(th)l(e)f(tru)l(e)h(d)-7 b(ual)67 b(pr)q(o)-8 b(b)l(l)n(e)n(m)67 b(with)f(all)i(i)s(mplic)m(it) 415 7714 y(bo)-5 b(und)49 b(c)l(o)l(ns)-5 b(trai)s(nts)50 b(ma)-6 b(d)h(e)51 b(e)-5 b(xplic)m(it.)63 b(In)51 b(eith)l(e)l(r)f (cas)m(e,)h(d)-7 b(uals)50 b(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)50 b(with)f(e)-5 b(xplic)m(it)50 b(`)p FF(\263)p FP(')f(c)l(o)l(ns)-5 b(trai)s(nts)415 7913 y(ar)q(e)53 b(n)n(e)-5 b(ga)d(te)l(d.)415 8175 y(T)8 b(his)50 b(r)q(o)-5 b(u)l(ti)s(n)n(e)49 b(s)-8 b(h)n(o)j(u)l(ld)49 b(o)l(nly)f(be)i(call)n(e)l(d)h(wh)l(en)h FM(D)8 b(Y)g(L)g(P)56 b FP(has)49 b(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)50 b(an)f(i)s(ndica)-8 b(tio)l(n)49 b(tha)-8 b(t)49 b(th)l(e)g(pr)q(o)-8 b(b)l(l)n(e)n(m)49 b(is)415 8375 y(pr)s(i)s(mal)g(i)s(nfeas)n(ib)l(l)n(e.)64 b(A)8 b(s)49 b(mentio)l(n)n(e)l(d)e(a)l(bove,)j(this)e(will)g(almos)-5 b(t)48 b(always)g(c)l(o)-7 b(rr)q(e)o(s)f(po)l(nd)48 b(to)g(d)-7 b(ual)48 b(un)m(bo)-5 b(und-)415 8574 y(e)l(dn)n(e)o(s)g (s.)64 b(If)47 b(th)l(e)f(pr)q(o)-8 b(b)l(l)n(e)n(m)45 b(was)h(s)n(o)-5 b(lve)l(d)46 b(to)g(o)-5 b(pti)s(mality)46 b(o)-7 b(r)47 b(fo)-5 b(und)45 b(to)h(be)h(pr)s(i)s(mal)f(un)m(bo)-5 b(und)g(e)l(d)44 b(\(h)l(enc)-6 b(e)46 b(d)-7 b(ual)415 8773 y(i)s(nfeas)n(ib)l(l)n(e\),)72 b(a)d(war)5 b(ni)s(n)n(g)65 b(will)i(be)h(is)-5 b(s)d(u)l(e)l(d)68 b(b)-8 b(u)l(t)67 b(th)l(e)h(r)q(o)-5 b(u)l(ti)s(n)n(e)68 b(will)f(s)-5 b(till)68 b(r)q(e)-7 b(t)l(ur)5 b(n)67 b(tru)l(e.)111 b(If)69 b(th)l(e)e(r)q(o)-5 b(u)l(ti)s(n)n(e)68 b(is)415 8972 y(call)n(e)l(d)53 b(fo)-7 b(r)53 b(any)f(oth)l(e)l(r)g(r)q(e)o(s) -8 b(u)l(lt,)52 b(it)h(will)f(pr)s(i)s(nt)g(an)h(e)l(rr)q(o)-7 b(r)53 b(me)o(s)-5 b(sag)n(e)53 b(and)f(r)q(e)-7 b(t)l(ur)5 b(n)52 b(fals)m(e.)0 9471 y FN(T)l(ab)l(leau)k(Ro)l(u)l(tin)-5 b(es)249 9819 y FP(T)8 b(h)l(e)o(s)m(e)65 b(fo)-5 b(ur)65 b(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)66 b(r)q(e)-7 b(t)l(ur)5 b(n)65 b(r)q(ows)f(and)h(c)l(o)-5 b(l)n(umns)65 b(of)h(th)l(e)e(bas)n (is)i(i)s(nve)l(rs)m(e)g(and)f(r)q(ows)f(and)h(c)l(o)-5 b(l)n(umns)65 b(of)0 10018 y(th)l(e)52 b(c)l(o)l(ns)-5 b(trai)s(nt)52 b(ma)-8 b(tr)s(ix)53 b(m)l(u)l(ltiplie)l(d)e(by)h(th)l (e)g(bas)n(is)i(i)s(nve)l(rs)m(e.)0 10466 y Fd(bool)41 b(dy_a)q(barj)e(\()i(lppr)n(ob_str)s(uct)d(*or)s(ig_lp,)i(int)h(tgt_j,) g(double)f(**p_a)q(barj)f(\))3771 11400 y FP(70)p eop end %%Page: 71 74 TeXDict begin 71 73 bop 415 466 a FP(Re)-7 b(t)l(ur)5 b(ns)p 1112 365 117 7 v 54 w FG(a)1241 491 y Fz(j)1328 466 y FP(=)50 b FG(B)1618 406 y FA(\0141)1771 466 y FG(a)1889 491 y Fz(j)1986 466 y FP(fo)-7 b(r)53 b(a)g(c)l(o)-5 b(l)n(umn)54 b FG(a)3169 491 y Fz(j)3266 466 y FP(of)f(th)l(e)f(c)l(o)l (ns)-5 b(trai)s(nt)52 b(ma)-8 b(tr)s(ix.)0 925 y Fd(bool)41 b(dy_betaj)e(\()j(lppr)n(ob_str)s(uct)c(*or)s(ig_lp,)h(int)j(tgt_j,)e (double)g(**p_betaj)f(\))415 1281 y FP(Re)-7 b(t)l(ur)5 b(ns)52 b(c)l(o)-5 b(l)n(umn)71 b FG(j)59 b FP(of)53 b(th)l(e)g(bas)n(is)g(i)s(nve)l(rs)m(e,)p 3543 1133 100 7 v 55 w FH(1)3655 1327 y Fz(j)3742 1281 y FP(=)d FG(B)4032 1221 y FA(\0141)4185 1281 y FG(e)4290 1306 y Fz(j)4334 1281 y FP(.)0 1741 y Fd(bool)41 b(dy_a)q(bar)s(i)e(\()i(lppr)n(ob_str)s (uct)d(*or)s(ig_lp,)i(int)h(tgt_i,)g(double)f(**p_a)q(bar)s(i,)f (double)g(**p_betai)h(\))415 2075 y FP(Re)-7 b(t)l(ur)5 b(ns)p 1112 1974 117 7 v 54 w FG(a)1228 2100 y Fz(i)1321 2075 y FP(=)43 b FG(a)1569 2100 y Fz(i)1628 2075 y FG(B)1768 2014 y FA(\0141)1972 2075 y FP(fo)-7 b(r)53 b(a)g(r)q(ow)h FG(a)2842 2100 y Fz(i)2945 2075 y FP(of)e(th)l(e)h(c)l(o)l(ns)-5 b(trai)s(nt)51 b(ma)-8 b(tr)s(ix.)415 2335 y(Si)s(nc)i(e)58 b(th)l(e)f(r)q(o)-5 b(u)l(ti)s(n)n(e)58 b(a)n(c)-5 b(t)l(ually)56 b(calcu)l(la)-8 b(te)o(s)60 b FH(1)3510 2360 y Fz(i)3570 2335 y FG(A)5 b FP(,)60 b(it)e(can)f(r)q(e)-7 b(t)l(ur)5 b(n)60 b FH(1)4996 2360 y Fz(i)5104 2335 y FP(a)-8 b(t)58 b(n)m(o)f(e)-5 b(xtra)58 b(c)l(o)n(mp)-5 b(u)l(t)s(a)d(tio)l(nal)56 b(c)l(os)-5 b(t.)81 b(If)415 2534 y FJ(p_betai)52 b FP(is)h(pr)q(ovid) -5 b(e)l(d,)53 b(it)f(will)g(be)h(l)n(oa)-6 b(d)h(e)l(d)53 b(with)g FH(1)3821 2559 y Fz(i)3924 2534 y FP(o)l(n)f(r)q(e)-7 b(t)l(ur)5 b(n.)0 2993 y Fd(bool)41 b(dy_betai)e(\()j(lppr)n(ob_str)s (uct)c(*or)s(ig_lp,)h(int)j(tgt_i,)e(double)g(**p_betai)f(\))415 3349 y FP(Re)-7 b(t)l(ur)5 b(ns)52 b(r)q(ow)h FG(i)67 b FP(of)53 b(th)l(e)g(bas)n(is)g(i)s(nve)l(rs)m(e,)p 3233 3201 100 7 v 55 w FH(1)3332 3395 y Fz(i)3425 3349 y FP(=)43 b FG(e)3660 3374 y Fz(i)3719 3349 y FG(B)3859 3289 y FA(\0141)4010 3349 y FP(.)0 3936 y Fu(17)-35 b(.7)197 b(Pr)r(icin)-7 b(g)64 b(Ro)-5 b(u)g(tin)f(es)4 4356 y FM(D)8 b(Y)g(L)g(P)76 b FP(pr)q(ovid)-5 b(e)o(s)71 b(two)f(a)-6 b(dditio)l(nal)69 b(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)71 b(whic)-7 b(h)69 b(ar)q(e)i(u)-7 b(s)m(e)l(fu)l(l)71 b(i)s(n)f(a)h(m)s(ixe)l(d-i)s(nte)-5 b(g)n(e)l(r)69 b(li)s(n)n(ear)i (pr)q(ogramm)s(i)s(n)n(g)0 4555 y(envir)q(o)l(nment.)62 b FJ(dy_pr)s(icenb)m(v)l(ar)s(s)45 b FP(will)h(calcu)l(la)-8 b(te)46 b(th)l(e)g(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)45 b(c)l(os)-5 b(t)47 b(fo)-7 b(r)46 b(a)h(s)-8 b(pec)m(i\002e)l(d)45 b(s)m(e)-7 b(t)47 b(of)g(n)m(o)l(n)m(bas)n(ic)d(v)r(ar)s(i)s(a)l(b)l(l) n(e)o(s)0 4754 y(and)51 b FJ(dy_pr)s(icedualpiv)g FP(will)f(calcu)l(la) -8 b(te)51 b(th)l(e)g(c)l(os)-5 b(t)51 b(of)g(th)l(e)g(\002rs)-5 b(t)51 b(d)-7 b(ual)51 b(pivot)g(\(a)g(g)n(en)n(e)l(ralis)m(e)l(d)f (penalty)g(calcu)l(la)-8 b(tio)l(n\))0 4953 y(g)t(iven)52 b(a)h(s)-8 b(pec)m(i\002e)l(d)52 b(s)m(e)-7 b(t)54 b(of)e(candida)-8 b(te)52 b(n)m(o)l(n)m(bas)n(ic)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)0 5390 y Fd(bool)41 b(dy_pr)s(icenb)m(v)l(ar)s(s)c(\()k(lppr)n(ob_str)s (uct)d(*or)s(ig_lp,)i(\003ags)h(pr)s(iceme,)1624 5589 y(double)f(**p_ocbar)-11 b(,)39 b(int)i(*p_nbcnt,)e(int)j(**p_nb)m(v)l (ar)s(s)c(\))415 5897 y FP(T)8 b(his)56 b(r)q(o)-5 b(u)l(ti)s(n)n(e)56 b(calcu)l(la)-8 b(te)o(s)56 b(th)l(e)g(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)56 b(c)l(os)-5 b(t)56 b(of)g(n)m(o)l(n)m(bas)n(ic)f(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s,)j(t)s(a)-6 b(p)e(pi)s(n)n(g)54 b(th)l(e)60 b FM(D)8 b(Y)g(L)g(P)62 b FP(da)-8 b(t)s(a)57 b(s)-5 b(tru)g(c-)415 6097 y(t)l(ur)q(e)o(s)64 b(fo)-7 b(r)65 b(a)n(c)-5 b(tive)64 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(and)f(calcu)l (la)-8 b(ti)s(n)n(g)63 b(th)l(e)g(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)64 b(c)l(os)-5 b(t)64 b(as)h(n)n(ee)l(d)-5 b(e)l(d)64 b(fo)-7 b(r)65 b(i)s(na)n(c)-5 b(tive)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)415 6296 y FJ(pr)s(iceme)80 b FP(pr)q(ovid)-5 b(e)o(s)80 b(li)s(m)s(ite)l(d)g(a)-6 b(dditio)l(nal)79 b(c)l(o)l(ntr)q(o)-5 b(l)78 b(by)i(all)n(owi)s(n)n(g)e(th)l(e)h(client)g(to)h(s)-8 b(pec)m(ify)79 b(th)l(e)h(s)-5 b(t)s(a)d(t)l(u)h(s)80 b(of)415 6495 y(th)l(e)71 b(n)m(o)l(n)m(bas)n(ic)g(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s)h(tha)-8 b(t)71 b(s)-8 b(h)n(o)j(u)l(ld)71 b(be)h(pr)s(ic)-6 b(e)l(d.)122 b(Fo)-7 b(r)72 b(e)-5 b(xampl)n(e,)77 b(to)71 b(pr)s(ic)-6 b(e)73 b(all)e(v)r(ar)s(i)s(a)l(b) l(l)n(e)o(s)i(tha)-8 b(t)71 b(ar)q(e)415 6694 y(n)m(o)l(n)m(bas)n(ic)58 b(a)-8 b(t)60 b(th)l(eir)f(u)-6 b(p)e(pe)l(r)59 b(o)-7 b(r)60 b(l)n(owe)l(r)f(bo)-5 b(und,)60 b FJ(pr)s(iceme)g FP(s)-8 b(h)n(o)j(u)l(ld)59 b(be)g(s)m(e)-7 b(t)61 b(to)e FJ(vstatNBUB|vstatNBLB)p FP(.)e(Oth)l(e)l(r)415 6894 y(n)m(o)l(n)m(bas)n(ic)62 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(\(\002xe)l (d,)h(fr)q(ee,)h(o)-7 b(r)64 b(s)-8 b(u)i(pe)l(rbas)n(ic\))63 b(will)f(n)m(ot)h(be)g(pr)s(ic)-6 b(e)l(d.)97 b(\(See)63 b(th)l(e)g(s)m(ec)-5 b(tio)l(n)62 b(o)l(n)h(s)-5 b(t)s(a)d(t)l(u)h(s) 415 7093 y(c)l(od)i(e)o(s)58 b(i)s(n)f FJ(dylp.h:f)p FP(o)-7 b(r)59 b(a)-6 b(dditio)l(nal)56 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n.\))77 b(T)8 b(h)l(e)57 b(r)q(o)-5 b(u)l(ti)s(n)n(e)58 b(r)q(e)-7 b(t)l(ur)5 b(ns)57 b(a)g(c)l(o)n(mpa)n (c)-5 b(t)57 b(lis)-5 b(t)58 b(of)f FJ(p_nbcnt)g FP(i)s(n-)415 7292 y(dic)-6 b(e)o(s)63 b(of)f(pr)s(ic)-6 b(e)l(d)62 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(i)s(n)f FJ(p_nb)m(v)l(ar)s(s)p FP(,)i(with)d(th)l(e)g(c)l(o)-7 b(rr)q(e)o(s)f(po)l(ndi)s(n)n(g)60 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)61 b(c)l(os)-5 b(ts)63 b(i)s(n)f FJ(p_ocbar)p FP(.)92 b(T)8 b(h)l(e)415 7492 y(i)s(ndic)-6 b(e)o(s)70 b(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)70 b(i)s(n)f FJ(p_nb)m(v)l(ar)s(s)h FP(ar)q(e)g(th)l(e)f(i)s(ndic)-6 b(e)o(s)70 b(u)-7 b(s)m(e)l(d)70 b(i)s(n)g(th)l(e)f(o)-7 b(r)s(ig)t(i)s(nal)70 b(c)l(o)l(ns)-5 b(trai)s(nt)69 b(sys)-5 b(te)n(m,)73 b(whic)-7 b(h)415 7691 y(doe)o(s)49 b(n)m(ot)f(c)l(o)l(nt)s(ai)s(n)h(l)n(og)t(ical)f(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s.)65 b(Wh)l(e)l(r)q(e)49 b(n)m(o)l(n)m(bas)n(ic)e(l)n(og)t (ical)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(ar)q(e)f(pr)q(e)o(s)m(ent)g(i) s(n)g(th)l(e)f(a)n(c)-5 b(tive)415 7890 y(sys)g(te)n(m,)78 b(th)l(ey)73 b(ar)q(e)g(id)-5 b(enti\002e)l(d)73 b(i)s(n)g FJ(p_nb)m(v)l(ar)s(s)f FP(by)h(th)l(e)g(n)n(e)-5 b(ga)d(tive)73 b(of)g(th)l(e)g(i)s(nd)-5 b(e)g(x)73 b(of)h(th)l(e)f(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)72 b(c)l(o)l(n-)415 8089 y(s)-5 b(trai)s(nt.)92 b(In)62 b(particu)l(lar)-9 b(,)62 b(th)l(e)g(v)r(al)n (u)l(e)o(s)g(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)61 b(ar)q(e)h(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)61 b(fo)-7 b(r)62 b(u)-7 b(s)m(e)62 b(as)g(th)l(e)g FJ(nbcnt)p FP(,)h FJ(nb)m(v)l(ar)s(s)p FP(,)h(and)415 8289 y FJ(cbar)53 b FP(parame)-7 b(te)l(rs)53 b(to)g FJ(dy_pr)s(icedualpiv)p FP(.)0 8748 y Fd(bool)41 b(dy_pr)s(icedualpiv)c(\()42 b(lppr)n(ob_str)s(uct)c(*or)s(ig_lp,)h (int)i(o)l(xindx,)f(double)g(nubi,)g(double)g(xi,)h(double)f(nlbi,)1686 8947 y(int)h(nbcnt,)f(int)h(*nb)m(v)l(ar)s(s)s(,)e(double)h(*cbar)-11 b(,)40 b(double)g(*p_upeni,)f(double)h(*p_dpeni)g(\))415 9255 y FP(T)8 b(his)50 b(r)q(o)-5 b(u)l(ti)s(n)n(e)49 b(calcu)l(la)-8 b(te)o(s)51 b(th)l(e)e(c)l(os)-5 b(t)50 b(of)g(th)l(e)g(\002rs)-5 b(t)50 b(d)-7 b(ual)49 b(pivot)h(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)50 b(with)e(fo)-7 b(r)q(c)m(i)s(n)n(g)49 b(th)l(e)h(v)r(al)n(u)l(e)g(of)g(th)l(e)415 9454 y(bas)n(ic)f(v)r(ar)s (i)s(a)l(b)l(l)n(e)54 b FG(x)1667 9479 y Fz(i)1766 9454 y FP(down)47 b(to)i(a)g(n)n(ew)f(u)-6 b(p)e(pe)l(r)48 b(bo)-5 b(und)49 b FG(u)4150 9479 y Fz(i)4249 9454 y FP(\(a)g(down)e(penalty\))g(o)-7 b(r)49 b(u)-6 b(p)49 b(to)f(a)h(n)n(ew)f(l)n(owe)l(r)g(bo)-5 b(und)417 9654 y FG(l)465 9679 y Fz(i)569 9654 y FP(\(an)52 b(u)-6 b(p)53 b(penalty\).)415 9997 y(T)8 b(h)l(e)53 b(u)-6 b(p)52 b(penalty)g(is)h FG(upen)2275 10035 y Fz(i)2368 9997 y FP(=)41 b(m)s(i)s(n)2632 10110 y Fz(k)2854 9781 y FC(8)2854 9931 y(>)2854 9981 y(:)3001 9997 y FP(\014\()r FG(l)3201 10022 y Fz(i)3284 9997 y FP(\014)c FG(x)3513 10022 y Fz(i)3563 9997 y FP(\))p 3667 9784 90 7 v 3669 9885 a FG(c)3758 9910 y Fz(k)p 3632 9959 247 7 v 3632 10010 117 7 v 3634 10111 a FG(a)3749 10136 y Fz(i)11 b(k)3899 9781 y FC(9)3899 9931 y(>)3899 9981 y(;)4099 9997 y FP(fo)-7 b(r)53 b({)15 b FG(k)52 b FF(\316)17 b FG(N)4891 9990 y FF(|)p 4966 9896 V 4968 9997 a FG(a)5082 10022 y Fz(i)11 b(k)5255 9997 y FP(<)43 b(0)32 b FF(\331)37 b FG(x)5763 10022 y Fz(k)5891 9997 y FP(<)45 b FG(u)6142 10022 y Fz(k)6259 9997 y FF(\332)p 6391 9896 V 34 w FG(a)6508 10022 y Fz(i)11 b(k)6681 9997 y FP(>)43 b(0)32 b FF(\331)37 b FG(x)7189 10022 y Fz(k)7317 9997 y FP(>)44 b FG(l)7510 10022 y Fz(k)7609 9997 y FP(}.)415 10442 y(T)8 b(h)l(e)43 b(down)f(penalty)h(is)g FG(dpen)2466 10480 y Fz(i)2552 10442 y FP(=)34 b(m)s(i)s(n)2809 10554 y Fz(k)3031 10226 y FC(8)3031 10376 y(>)3031 10425 y(:)3178 10442 y FP(\014\()r FG(u)3435 10467 y Fz(i)3517 10442 y FP(\014)j FG(x)3746 10467 y Fz(i)3796 10442 y FP(\))p 3901 10229 90 7 v 3903 10330 a FG(c)3991 10355 y Fz(k)p 3866 10404 247 7 v 3866 10455 117 7 v 3868 10556 a FG(a)3982 10581 y Fz(i)11 b(k)4132 10226 y FC(9)4132 10376 y(>)4132 10425 y(;)4323 10442 y FP(fo)-7 b(r)44 b({)15 b FG(k)45 b FF(\316)10 b FG(N)5085 10435 y FF(|)p 5153 10341 V 5155 10442 a FG(a)5269 10467 y Fz(i)h(k)5436 10442 y FP(>)35 b(0)25 b FF(\331)30 b FG(x)5922 10467 y Fz(k)6044 10442 y FP(<)38 b FG(u)6288 10467 y Fz(k)6398 10442 y FF(\332)p 6523 10341 V 27 w FG(a)6640 10467 y Fz(i)11 b(k)6807 10442 y FP(<)35 b(0)25 b FF(\331)30 b FG(x)7293 10467 y Fz(k)7415 10442 y FP(>)38 b FG(l)7602 10467 y Fz(k)7700 10442 y FP(}.)3771 11400 y(71)p eop end %%Page: 72 75 TeXDict begin 72 74 bop 415 466 a FP(T)r(o)52 b(pe)l(r)5 b(fo)-7 b(r)5 b(m)52 b(th)l(e)f(s)-5 b(t)s(andar)q(d)52 b(penalty)f(calcu)l(la)-8 b(tio)l(n)50 b(fo)-7 b(r)52 b(fo)-7 b(r)q(c)m(i)s(n)n(g)51 b(a)h(bas)n(ic)g(v)r(ar)s(i)s(a)l(b)l(l) n(e)h(to)e(an)h(i)s(nte)-5 b(gral)51 b(v)r(al)n(u)l(e,)415 665 y(th)l(e)76 b(n)n(ew)f(l)n(owe)l(r)h(bo)-5 b(und)75 b(wo)-5 b(u)l(ld)74 b(be)i FE(d)5 b FG(x)3232 690 y Fz(i)3282 665 y FE(e)84 b FP(and)76 b(th)l(e)f(n)n(ew)h(u)-6 b(p)e(pe)l(r)75 b(bo)-5 b(und)75 b(wo)-5 b(u)l(ld)75 b(be)h FE(b)5 b FG(x)6679 690 y Fz(i)6728 665 y FE(c)j FP(.)136 b(T)8 b(h)l(e)76 b(bas)n(ic)415 865 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)66 b FG(x)1211 890 y Fz(i)1321 865 y FP(can)60 b(be)h(an)f(ar)q(c)-7 b(hitec)i(t)l(ural)60 b(o)-7 b(r)60 b(a)h(l)n(og)t(ical)f(v)r(ar)s(i)s (a)l(b)l(l)n(e.)88 b(T)8 b(h)l(e)60 b(r)q(o)-5 b(u)l(ti)s(n)n(e)60 b(is)g(ca)-6 b(pa)l(b)l(l)n(e)61 b(of)f(pr)s(ic)m(i)s(n)n(g)f(a)415 1064 y(pivot)53 b(i)s(nvo)-5 b(lvi)s(n)n(g)51 b(th)l(e)h(l)n(og)t(ical) h(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(fo)-7 b(r)53 b(a)g(c)l(o)l(ns)-5 b(trai)s(nt)52 b(tha)-8 b(t)52 b(is)h(n)m(ot)e(curr)q(ently)h(a)n(c)-5 b(tive.)415 1329 y FJ(o)n(xindx)70 b FP(s)-8 b(pec)m(i\002e)o(s)70 b(th)l(e)g(bas)n(ic)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(to)f(be)g(pr)s(ic)-6 b(e)l(d)70 b(\(a)g(l)n(og)t(ical)g(is)g(s)-8 b(pec)m(i\002e)l(d)70 b(as)g(th)l(e)g(n)n(e)-5 b(ga)d(tive)70 b(of)g(th)l(e)415 1529 y(i)s(nd)-5 b(e)g(x)52 b(of)h(th)l(e)g(as)-5 b(s)n(oc)m(i)s(a)d (te)l(d)52 b(c)l(o)l(ns)-5 b(trai)s(nt\).)64 b FJ(xi)53 b FP(is)g(th)l(e)f(curr)q(ent)g(v)r(al)n(u)l(e)h(of)58 b FG(x)5358 1554 y Fz(i)5460 1529 y FP(i)s(n)53 b(th)l(e)f(o)-5 b(pti)s(mal)53 b(s)n(o)-5 b(l)n(u)l(tio)l(n)51 b(to)i(th)l(e)415 1728 y(L)s(P)-10 b(.)60 b(\(In)f(th)l(e)g(cas)m(e)h(of)f(th)l(e)g(l)n (og)t(ical)g(fo)-7 b(r)60 b(an)f(i)s(na)n(c)-5 b(tive)59 b(c)l(o)l(ns)-5 b(trai)s(nt,)60 b(th)l(e)f(v)r(al)n(u)l(e)h(is)g(o)-8 b(b)i(t)s(ai)s(n)n(e)l(d)59 b(by)g(ev)r(al)n(ua)-8 b(ti)s(n)n(g)415 1927 y(th)l(e)61 b(c)l(o)l(ns)-5 b(trai)s(nt)60 b(a)-8 b(t)61 b(th)l(e)g(curr)q(ent)f(s)n(o)-5 b(l)n(u)l(tio)l(n.\))88 b FJ(nubi)62 b FP(is)f(th)l(e)g(n)n(ew)f(u)-6 b(p)e(pe)l(r)61 b(bo)-5 b(und)61 b FG(u)6113 1952 y Fz(i)6164 1927 y FP(,)i(and)e FJ(nlbi)g FP(is)g(th)l(e)g(n)n(ew)415 2126 y(l)n(owe)l(r)54 b(bo)-5 b(und)55 b FG(l)1515 2151 y Fz(i)1566 2126 y FP(.)71 b(It)55 b(s)-8 b(h)n(o)j(u)l(ld)53 b(be)i(tru)l(e)f(tha)-8 b(t)54 b FJ(nubi)42 b FF(\243)h FJ(xi)f FF(\243)g FJ(nlbi)p FP(.)71 b FJ(nbcnt)p FP(,)54 b FJ(nb)m(v)l(ar)s(s)p FP(,)h(and)f FJ(cbar)g FP(ar)q(e)h(as)g(d)-5 b(e)o(sc)d(r)s(ibe)l(d)415 2326 y(fo)h(r)83 b FJ(dy_pr)s(icenb)m(v)l (ar)s(s)p FP(.)156 b(T)8 b(h)l(e)83 b(u)-6 b(p)83 b(and)f(down)g (penaltie)o(s)h(will)f(be)h(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)83 b(i)s(n)f FJ(p_upeni)h FP(and)g FJ(p_dpeni)p FP(,)415 2525 y(r)q(e)o(s)-8 b(pec)j(tive)l(ly)-17 b(.)0 3118 y Fu(17)-35 b(.8)197 b(Pr)r(int)65 b(Ro)-5 b(u)g(tin)f(es)0 3537 y FP(T)8 b(h)l(e)l(r)q(e)59 b(ar)q(e)g(thr)q(ee)g(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)60 b(to)f(s)-8 b(u)i(p)e(ply)58 b(s)-5 b(tr)s(i)s(n)n(gs)58 b(fo)-7 b(r)64 b FM(D)8 b(Y)g(L)g(P)64 b FP(s)-5 b(t)s(a)d(t)l(u)h(s,)62 b(p)-6 b(has)m(e,)60 b(and)f(r)q(e)-7 b(t)l(ur)5 b(n)59 b(c)l(od)-5 b(e)o(s,)61 b(a)e(r)q(o)-5 b(u)l(ti)s(n)n(e)59 b(to)0 3736 y(pr)s(i)s(nt)h(th)l(e)h (c)l(o)n(mpa)n(c)-5 b(t)60 b(s)n(o)-5 b(l)n(u)l(tio)l(n)59 b(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)60 b(by)g FJ(dylp)p FP(,)j(and)e(a)g(r)q(o)-5 b(u)l(ti)s(n)n(e)60 b(to)h(pr)s(i)s(nt)f(th)l (e)g(c)l(o)l(ntents)g(of)g(th)l(e)h(s)-5 b(t)s(a)d(tis)j(tics)0 3935 y(s)g(tru)g(c)g(t)l(ur)q(e.)0 4400 y Fd(dy_dumpcompact)39 b(\()i(ioid)g(chn,)g(bool)f(echo,)h(lppr)n(ob_str)s(uct)d(*soln,)i (bool)h(nbzer)n(os)e(\))415 4714 y FP(T)8 b(his)75 b(r)q(o)-5 b(u)l(ti)s(n)n(e)75 b(pr)s(i)s(nts)g(th)l(e)g(s)n(o)-5 b(l)n(u)l(tio)l(n)74 b(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)74 b(by)h FJ(dylp)h FP(i)s(n)f FJ(soln)g FP(u)-7 b(s)n(i)s(n)n(g)75 b(a)h(human-r)q(ea)-6 b(da)l(b)l(l)n(e)74 b(fo)-7 b(r)5 b(ma)-8 b(t.)415 4913 y(Ou)l(tp)j(u)l(t)47 b(is)g(dir)q(ec)-5 b(te)l(d)48 b(to)f(th)l(e)g(c)-7 b(hann)n(e)l(l)47 b(s)-8 b(pec)m(i\002e)l(d)47 b(by)g FJ(chn)p FP(,)i(and)e(ec)-7 b(h)n(oe)l(d)48 b(to)f(th)l(e)g(te)l(r)5 b(m)s(i)s(nal)48 b(if)f FJ(echo)h FP(is)f(tru)l(e.)415 5112 y(No)-7 b(r)5 b(mally)-17 b(,)50 b(n)m(othi)s(n)n(g)c(is)k(pr)s(i)s(nte)l(d)f(fo)-7 b(r)50 b(n)m(o)l(n)m(bas)n(ic)e(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(with)f (a)h(v)r(al)n(u)l(e)f(of)h(ze)l(r)q(o;)g(s)m(e)-7 b(t)50 b FJ(nbzer)m(os)f FP(to)h(tru)l(e)f(to)415 5312 y(fo)-7 b(r)q(c)h(e)54 b(th)l(e)n(m)d(to)i(be)g(pr)s(i)s(nte)l(d.)0 5777 y Fd(dy_dumpsta)q(ts)39 b(\()i(ioid)g(chn,)g(bool)g(echo,)f(lpsta) q(ts_str)s(uct)e(*lpsta)q(ts)s(,)h(consys_str)s(uct)g(*or)s(ig_sys)g (\))415 6095 y FP(T)8 b(his)47 b(r)q(o)-5 b(u)l(ti)s(n)n(e)46 b(pr)s(i)s(nts)h(th)l(e)f(c)l(o)l(ntents)g(of)h(th)l(e)f FJ(lpstats)h FP(s)-5 b(tru)g(c)g(t)l(ur)q(e)46 b(i)s(n)h(a)g(human-r)q (ea)-6 b(da)l(b)l(l)n(e)46 b(fo)-7 b(r)5 b(ma)-8 b(t.)64 b FJ(chn)47 b FP(and)415 6294 y FJ(echo)61 b FP(ar)q(e)h(as)g(fo)-7 b(r)61 b FJ(dy_dumpcompact)p FP(.)91 b FJ(or)s(ig_sys)60 b FP(s)-8 b(h)n(o)j(u)l(ld)60 b(be)i(th)l(e)f(same)g(c)l(o)l(ns)-5 b(trai)s(nt)61 b(sys)-5 b(te)n(m)60 b(r)q(e)l(fe)l(r)q(enc)-6 b(e)l(d)415 6494 y(i)s(n)53 b(th)l(e)f FJ(or)s(ig_lp)g FP(parame)-7 b(te)l(r)53 b(to)g FJ(dylp)0 6959 y Fd(dy_pr)s(tlpr)o(et) 39 b(\()j(lpr)o(et_enum)e(lpr)o(et)h(\))415 7272 y FP(Re)-7 b(t)l(ur)5 b(ns)52 b(a)h(poi)s(nte)l(r)f(to)h(a)g(s)-5 b(tr)s(i)s(n)n(g)52 b(fo)-7 b(r)53 b(th)l(e)f(r)q(e)-7 b(t)l(ur)5 b(n)52 b(c)l(od)-5 b(e)53 b(s)-8 b(pec)m(i\002e)l(d)52 b(i)s(n)h FJ(lpr)o(et)p FP(.)0 7737 y Fd(dy_pr)s(tlpphase)38 b(\()k(dyphase_enum)c(phase,)i(bool)h(a)q(bbr)6 b(v)40 b(\))415 8051 y FP(Re)-7 b(t)l(ur)5 b(ns)54 b(a)g(poi)s(nte)l(r)g(to)g (a)h(s)-5 b(tr)s(i)s(n)n(g)53 b(fo)-7 b(r)55 b(th)l(e)f(r)q(e)-7 b(t)l(ur)5 b(n)54 b(c)l(od)-5 b(e)54 b(s)-8 b(pec)m(i\002e)l(d)54 b(i)s(n)g FJ(phase)p FP(.)70 b(If)55 b FJ(a)s(bbr)6 b(v)54 b FP(is)h(tru)l(e,)f(this)g(will)415 8250 y(be)f(a)g(two-c)-7 b(hara)n(c)i(te)l(r)52 b(a)l(b)-8 b(b)j(r)q(evi)s(a)d(tio)l(n.)0 8715 y Fd(dy_pr)s(tvsta)q(t)39 b(\()i(\003ags)g(sta)q(tus)f(\))415 9034 y FP(Re)-7 b(t)l(ur)5 b(ns)76 b(a)h(poi)s(nte)l(r)f(to)g(a)h(s)-5 b(t)s(a)d(tic)77 b(b)-8 b(uf)n(fe)l(r)77 b(c)l(o)l(nt)s(ai)s(ni)s(n)n (g)d(a)j(s)-5 b(tr)s(i)s(n)n(g)76 b(r)q(e)-7 b(pr)q(e)o(s)m(ent)s(a)f (tio)l(n)75 b(of)i(th)l(e)f(s)-5 b(t)s(a)d(t)l(u)h(s)77 b(\003ags)415 9233 y(s)-8 b(pec)m(i\002e)l(d)52 b(i)s(n)h FJ(status)p FP(.)64 b(T)8 b(h)l(e)53 b(b)-8 b(uf)n(fe)l(r)52 b(is)h(ove)l(rwr)s(itten)f(a)-8 b(t)53 b(ea)n(c)-7 b(h)52 b(call.)0 9826 y Fu(17)-35 b(.9)197 b(Utility)64 b(Ro)-5 b(u)g(tin)f(es)0 10245 y FP(And)52 b(a)h(\002)s(nal)f(pair)h(of)g(u)l (tility)e(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s.)3771 11400 y(72)p eop end %%Page: 73 76 TeXDict begin 73 75 bop 0 466 a Fd(bool)41 b(dy_dupbasis)d(\()k(int)f (dst_basissze,)d(basis_str)s(uct)h(**p_dst_basis)s(,)f(basis_str)s(uct) h(*sr)o(c_basis)s(,)1420 665 y(int)i(dst_sta)q(tussze,)d(\003ags)i (**p_dst_sta)q(tus)s(,)e(int)j(sr)o(c_sta)q(tuslen,)d(\003ags)j(*sr)o (c_sta)q(tus)d(\))415 984 y FP(T)8 b(his)58 b(r)q(o)-5 b(u)l(ti)s(n)n(e)58 b(will)f(d)-7 b(u)h(plica)e(te)57 b(th)l(e)h(bas)n(is)h(and)f(s)-5 b(t)s(a)d(t)l(u)h(s)59 b(arrays.)81 b(Da)-8 b(t)s(a)59 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)58 b(will)f(be)i(all)n(oca)-8 b(te)l(d)58 b(as)415 1183 y(r)q(eq)l(uir)q(e)l(d)52 b(if)h(th)l(ey)f(ar)q(e)h(n)m(ot)f(s)-8 b(u)i(p)e(plie)l(d)51 b(as)j(parame)-7 b(te)l(rs.)0 1648 y Fd(dy_fr)o(eesoln)39 b(\()j(lppr)n(ob_str)s(uct)c(*lppr)n(ob)h(\))415 1962 y FP(T)8 b(his)54 b(r)q(o)-5 b(u)l(ti)s(n)n(e)54 b(will)f(fr)q(ee)i(th)l(e)f(da)-8 b(t)s(a)54 b(s)-5 b(tru)g(c)g(t)l(ur) q(e)o(s)55 b(u)-7 b(s)m(e)l(d)54 b(to)g(h)n(o)-5 b(ld)54 b(th)l(e)g(L)s(P)g(s)n(o)-5 b(l)n(u)l(tio)l(n,)53 b(i)s(ncl)n(udi)s(n)n (g)f(da)-8 b(t)s(a)55 b(s)-5 b(tru)g(c-)415 2161 y(t)l(ur)q(e)o(s)62 b(fo)-7 b(r)62 b(th)l(e)g(bas)n(is,)j(s)-5 b(t)s(a)d(t)l(u)h(s)62 b(vec)-5 b(to)e(r)e(,)65 b(pr)s(i)s(mal)d(and)g(d)-7 b(ual)61 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(v)r(al)n(u)l(e)o(s,)j(and)d(th) l(e)f(a)n(c)-5 b(tive)62 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)415 2360 y(vec)-5 b(to)e(r)d(.)0 2953 y Fu(17)-35 b(.10)196 b(T)t(h)-9 b(e)68 b(LP)e(Pr)n(o)-10 b(b)-5 b(le)n(m)65 b(Speci\002ca)-10 b(tio)-5 b(n)0 3372 y FP(T)8 b(h)l(e)78 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)79 b FJ(lppr)m(ob_str)s(uct)59 b(*or)s(ig_lp)77 b FP(is)i(u)-7 b(s)m(e)l(d)78 b(to)h(d)-5 b(e)l(\002)s(n)n(e)78 b(th)l(e)h(L)s(P)f(pr)q(o)-8 b(b)l(l)n(e)n(m)77 b(to)83 b FM(D)8 b(Y)g(L)g(P)84 b FP(and)78 b(to)h(r)q(e)-7 b(t)l(ur)5 b(n)78 b(th)l(e)0 3571 y(answe)l(r)k(to)i(th)l(e)e(client.) 157 b(It)83 b(h)n(o)-5 b(lds)83 b(poi)s(nte)l(rs)g(to)g(th)l(e)g(c)l(o) l(ns)-5 b(trai)s(nt)82 b(sys)-5 b(te)n(m,)91 b(an)83 b(a)n(c)-5 b(tive)83 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(vec)-5 b(to)e(r)e(,)91 b(a)0 3771 y(bas)n(is)67 b(vec)-5 b(to)e(r)e(,)70 b(a)c(s)-5 b(t)s(a)d(t)l(u)h(s)67 b(vec)-5 b(to)e(r)e(,)70 b(and)c(vec)-5 b(to)e(rs)67 b(fo)-7 b(r)66 b(th)l(e)g(pr)s(i)s(mal)g (and)g(d)-7 b(ual)66 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)k(as)d(we)l(ll)e (as)i(\002e)l(lds)f(fo)-7 b(r)0 3970 y(i)s(nfo)g(r)5 b(ma)-8 b(tio)l(n)79 b(and)h(c)l(o)l(ntr)q(o)-5 b(l.)148 b(Ea)n(c)-7 b(h)80 b(\002e)l(ld)g(is)g(discu)-7 b(s)i(s)m(e)l(d)81 b(be)l(l)n(ow;)94 b(fo)-7 b(r)81 b(pr)q(ec)m(is)m(e)f(d)-5 b(e)e(t)s(ails,)88 b(th)l(e)80 b(r)q(ea)-6 b(d)h(e)l(r)81 b(s)-8 b(h)n(o)j(u)l(ld)0 4169 y(c)l(o)l(ns)d(u)l(lt)51 b(th)l(e)i(\002l)n(e)g FJ(dylp.h)p FP(.)297 4634 y Fd(actv)l(ar)s(s)163 b FP(A)54 b(vec)-5 b(to)e(r)54 b(u)-7 b(s)m(e)l(d)54 b(to)g(s)-8 b(pec)m(ify)53 b(and/)-12 b(o)-7 b(r)53 b(r)q(e)-7 b(t)l(ur)5 b(n)53 b(th)l(e)h(s)m(e)-7 b(t)54 b(of)g(a)n(c)-5 b(tive)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)70 b(T)8 b(h)l(e)53 b(vec)-5 b(to)e(r)55 b(s)-8 b(u)i(p)e(plie)l(d)996 4833 y(as)54 b(an)e(i)s(np)-5 b(u)l(t)52 b(parame)-7 b(te)l(r)53 b(will)f(be)h(ove)l(rwr)s(itten)f(o)l(n)g(o)-5 b(u)l(tp)g(u)l(t.)996 5165 y FN(\(i\))262 b FP(Fo)-7 b(r)73 b(a)h(war)5 b(m)72 b(s)-5 b(t)s(art,)79 b(an)72 b(i)s(niti)s(al)h(s)m(e)-7 b(t)73 b(of)g(a)n(c)-5 b(tive)73 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(can)f(be)g(s)-8 b(pec)m(i\002e)l(d.) 125 b(T)8 b(his)73 b(i)s(n-)1424 5365 y(fo)-7 b(r)5 b(ma)-8 b(tio)l(n)71 b(will)h(be)g(u)-7 b(s)m(e)l(d)73 b(o)l(nly)e(if)h(th)l(e) g FJ(lpctlA)-6 b(CTV)-15 b(ARSIN)70 b FP(\003ag)i(is)h(s)m(e)-7 b(t)73 b(i)s(n)f(th)l(e)g FJ(ctlopts)g FP(\002e)l(ld.)1424 5564 y(Fo)-7 b(r)58 b(a)g(c)l(o)-5 b(ld)57 b(o)-7 b(r)58 b(h)n(ot)f(s)-5 b(t)s(art,)59 b(a)f(vec)-5 b(to)e(r)58 b(can)f(be)h(pr)q(ovid)-5 b(e)l(d)57 b(to)g(r)q(e)-7 b(t)l(ur)5 b(n)57 b(th)l(e)g(\002)s(nal)h(s)m(e)-7 b(t)58 b(of)f(a)n(c)-5 b(tive)1424 5763 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)996 6029 y FN(\(o\))219 b FP(T)8 b(h)l(e)45 b(\002)s(nal)h(s)m(e)-7 b(t)46 b(of)f(a)n(c)-5 b(tive)46 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)64 b(If)46 b(n)m(o)e(vec)-5 b(to)e(r)47 b(was)e(s)-8 b(u)i(p)e(plie)l(d)44 b(as)i(an)g(i)s(np)-5 b(u)l(t)44 b(parame)-7 b(te)l(r)e(,)1428 6228 y FM(D)8 b(Y)g(L)g(P)63 b FP(will)57 b(all)n(oca)-8 b(te)58 b(o)l(n)n(e)f(o)l(n)g(o)-5 b(u)l(tp)g(u)l(t.)78 b(Ac)-5 b(tive)58 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)56 b(is)i(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)57 b(o)l(nly)f(if)1424 6427 y(th)l(e)46 b FJ(lpctlA)-6 b(CTV)-15 b(ARSOUT)44 b FP(\003ag)i(is)h(s)m(e)-7 b(t)47 b(wh)l(en)i FM(D)8 b(Y)g(L)g(P)52 b FP(is)47 b(call)n(e)l(d.)63 b(V)-11 b(alid)46 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)45 b(is)i(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)1424 6627 y(o)l(nly)71 b(if)h(an)g(o)-5 b(pti)s(mal)72 b(s)n(o)-5 b(l)n(u)l(tio)l(n)70 b(is)j(fo)-5 b(und.)122 b(If)73 b(v)r(alid)f(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)70 b(is)j(n)m(ot)e(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d,)77 b(th)l(e)1424 6826 y FJ(lpctlA)-6 b(CTV)-15 b(ARSOUT)51 b FP(\003ag)h(will)g(be)h(r)q(e)o(s)m(e)-7 b(t.)466 7158 y Fd(basis)164 b FP(A)64 b(da)-8 b(t)s(a)64 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)63 b(fo)-7 b(r)64 b(th)l(e)g(L)s(P)f(bas) n(is.)99 b(Beca)-8 b(u)h(s)m(e)64 b(th)l(e)f(s)m(e)-7 b(t)65 b(of)e(a)n(c)-5 b(tive)64 b(c)l(o)l(ns)-5 b(trai)s(nts)63 b(a)-8 b(t)64 b(o)-5 b(pti)s(m)l(um)996 7357 y(will)63 b(n)m(ot,)h(i)s(n)f(g)n(en)n(e)l(ral,)i(i)s(ncl)n(ud)-5 b(e)63 b(all)h(c)l(o)l(ns)-5 b(trai)s(nts,)64 b(th)l(e)f(bas)n(is)h (vec)-5 b(to)e(r)64 b(s)-8 b(pec)m(i\002e)o(s)63 b(th)l(e)g(c)l(o)l(ns) -5 b(trai)s(nt)996 7556 y(and)53 b(th)l(e)f(pr)s(i)s(mal)h(v)r(ar)s(i)s (a)l(b)l(l)n(e)g(i)s(n)g(ea)n(c)-7 b(h)52 b(bas)n(is)i(pos)n(itio)l(n.) 996 7889 y FN(\(i\))262 b FP(Fo)-7 b(r)64 b(a)f(war)5 b(m)63 b(s)-5 b(t)s(art,)67 b(an)c(i)s(niti)s(al)g(bas)n(is)h(m)l(u)-7 b(s)i(t)64 b(be)f(pr)q(ovid)-5 b(e)l(d.)97 b(Fo)-7 b(r)64 b(a)f(c)l(o)-5 b(ld)63 b(o)-7 b(r)64 b(h)n(ot)f(s)-5 b(t)s(art,)67 b(a)1424 8088 y(s)-5 b(tru)g(c)g(t)l(ur)q(e)53 b(can)f(be)h(pr)q(ovid)-5 b(e)l(d)52 b(to)h(r)q(e)-7 b(t)l(ur)5 b(n)52 b(th)l(e)h(\002)s(nal)f(bas)n(is.)996 8353 y FN(\(o\))219 b FP(T)8 b(h)l(e)80 b(\002)s(nal)h(bas)n(is.)150 b(If)81 b(n)m(o)f(vec)-5 b(to)e(r)81 b(was)g(s)-8 b(u)i(p)e(plie)l(d)79 b(as)j(an)e(i)s(np)-5 b(u)l(t)80 b(parame)-7 b(te)l(r)e(,)92 b FM(D)8 b(Y)g(L)g(P)86 b FP(will)1424 8553 y(all)n(oca)-8 b(te)53 b(o)l(n)n(e)g(o)l(n)f(o)-5 b(u)l(tp)g(u)l(t.)373 8885 y Fd(colsze)164 b FP(T)8 b(h)l(e)84 b(all)n(oca)-8 b(te)l(d)84 b(c)l(o)-5 b(l)n(umn)83 b(ca)-6 b(pa)n(c)m(ity)83 b(of)h(th)l(e)g(da)-8 b(t)s(a)84 b(s)-5 b(tru)g(c)g(t)l(ur)q(e.)159 b(T)8 b(h)l(e)83 b FJ(status)h FP(and)f FJ(actv)l(ar)s(s)g FP(da)-8 b(t)s(a)996 9084 y(s)j(tru)g(c)g(t)l(ur)q(e)o(s,)55 b(if)f(pr)q(ovid)-5 b(e)l(d)53 b(by)h(th)l(e)g(client,)g(m)l(u)-7 b(s)i(t)54 b(be)g(ca)-6 b(pa)l(b)l(l)n(e)55 b(of)f(h)n(o)-5 b(ldi)s(n)n(g)52 b(this)i(many)f(entr)s(ie)o(s.)70 b(If)996 9283 y FJ(colsze)52 b FP(is)h(i)s(ns)-8 b(u\002)-49 b(\002c)m(ient)51 b(to)i(r)q(e)-7 b(t)l(ur)5 b(n)52 b(th)l(e)g(answe)l(r)-9 b(,)56 b FM(D)8 b(Y)g(L)g(P)58 b FP(will)52 b(r)q(eall)n(oca)-8 b(te)53 b(th)l(e)g(da)-8 b(t)s(a)53 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s.) 331 9615 y Fd(consys)164 b FP(T)8 b(h)l(e)82 b(c)l(o)l(ns)-5 b(trai)s(nt)81 b(sys)-5 b(te)n(m,)89 b(i)s(n)81 b(th)l(e)h(fo)-7 b(r)5 b(ma)-8 b(t)82 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)82 b(fo)-7 b(r)82 b(th)l(e)k FM(C)8 b(O)g(N)g(S)g(Y)g(S)88 b FP(c)l(o)l(ns)-5 b(trai)s(nt)81 b(sys)-5 b(te)n(m)996 9815 y(s)d(u)h(b)i(r)q(o)g(u)l(ti)s(n)n(e)52 b(lib)-5 b(rary)51 b([5].)349 10147 y Fd(ctlopts)164 b FP(A)59 b(vec)-5 b(to)e(r)59 b(of)f(\003ags)h(u)-7 b(s)m(e)l(d)58 b(to)h(s)-8 b(pec)m(ify)57 b(o)-5 b(ptio)l(nal)57 b(a)n(c)-5 b(tio)l(ns)58 b(and)g(s)-5 b(t)s(a)d(t)l(u)h(s.)83 b(T)8 b(h)l(e)58 b(curr)q(ent)g(s)m(e)-7 b(t)59 b(of)f(\003ags)996 10346 y(can)71 b(be)g(u)-7 b(s)m(e)l(d)71 b(to)g(c)l(o)l(ntr)q(o)-5 b(l)70 b(all)n(oca)-8 b(tio)l(n)70 b(and)g(d)-5 b(eall)n(oca)d(tio)l(n) 70 b(of)h(i)s(nte)l(r)5 b(nal)74 b FM(D)8 b(Y)g(L)g(P)77 b FP(da)-8 b(t)s(a)71 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)3771 11400 y(73)p eop end %%Page: 74 77 TeXDict begin 74 76 bop 996 466 a FP(\()p FJ(lpctlD)l(YV)-15 b(ALID)p FP(,)58 b FJ(lpctlNOFREE)p FP(,)h FJ(lpctlONL)-14 b(YFREE)p FP(\),)59 b(s)-8 b(pec)m(ify)59 b(th)l(e)g(pr)q(e)o(s)m(enc) -6 b(e)59 b(of)h(c)-7 b(han)n(g)n(e)o(s)58 b(to)h(th)l(e)g(pr)q(o)-8 b(b-)996 665 y(l)n(e)n(m)82 b(bo)-5 b(unds)81 b(\()p FJ(lpctlUBNDCHG)p FP(,)g FJ(lpctlLBNDCHG)p FP(,)g FJ(lpctlRHSCHG)p FP(\))h(and)f(o)-8 b(bj)l(ec)j(tive)82 b(\()p FJ(lpctlOBJCHG)p FP(\),)996 865 y(s)-8 b(pec)m(ify)67 b(i)s(niti)s(al)g(v)r(ar)s(i)s(a)l (b)l(l)n(e)h(and/)-12 b(o)-7 b(r)68 b(c)l(o)l(ns)-5 b(trai)s(nt)66 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)66 b(\()p FJ(lpctlINIT)-7 b(A)h(CTV)-15 b(AR)p FP(,)64 b FJ(lpctlINIT)-7 b(A)h(CTCON)p FP(\),)996 1064 y(and)70 b(s)-8 b(pec)m(ify)69 b(th)l(e)g(e)-5 b(xc)e(han)n(g)n(e)69 b(of)h(a)n(c)-5 b(tive)70 b(v)r(ar)s(i)s(a)l(b)l (l)n(e)g(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)68 b(\()p FJ(lpctlA)-6 b(CTV)-15 b(ARSIN)p FP(,)68 b FJ(lpctlA)-6 b(CTV)-15 b(AR-)996 1263 y(SOUT)p FP(\).)537 1595 y Fd(iter)s(s)165 b FP(T)8 b(h)l(e)53 b(tot)s(al)g(n)n(umbe)l(r)f(of)h(s)n(i)s(mpl)n(e)-5 b(x)53 b(ite)l(ra)-8 b(tio)l(ns.)508 1927 y Fd(lpr)o(et)165 b FP(T)8 b(h)l(e)53 b(r)q(e)-7 b(t)l(ur)5 b(n)52 b(c)l(od)-5 b(e)53 b(fr)q(o)n(m)g(th)l(e)f(s)n(i)s(mpl)n(e)-5 b(x)54 b(r)q(o)-5 b(u)l(ti)s(n)n(e.)996 2193 y(If)79 b(n)m(o)f(e)l(rr)q(o)-7 b(rs)79 b(occur)-9 b(,)85 b(th)l(e)78 b(c)l(od)-5 b(e)79 b(s)-8 b(h)n(o)j(u)l(ld)78 b(be)g(o)l(n)n(e)h(of)g FJ(lpOPTIMAL)f FP(\(o)-5 b(pti)s(mal\),)85 b FJ(lpINFEAS)78 b FP(\(pr)s(i)s(mal)996 2392 y(i)s(nfeas)n(ib)l(l)n(e\),)53 b(o)-7 b(r)53 b FJ(lpUNBOUNDED)f FP(\(pr)s(i)s(mal)h(un)m(bo)-5 b(und)g(e)l(d\).)996 2658 y(Err)q(o)e(r)56 b(r)q(e)-7 b(t)l(ur)5 b(ns)56 b(i)s(ncl)n(ud)-5 b(e)55 b FJ(lpPUNT)h FP(\(n)m(o)l(n)m(bas)n(ic)e(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s)j(e)-5 b(x)10 b(is)-5 b(t)56 b(with)f(fa)-7 b(vo)i(ura)l(b)l(l)n(e)56 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)55 b(c)l(os)-5 b(ts,)996 2857 y(b)d(u)l(t)71 b(th)l(ey)g(cann)m(ot)f(be)i (pivote)l(d)f(d)-7 b(u)l(e)71 b(to)g(uns)-8 b(uit)s(a)l(b)l(l)n(e)71 b(pivot)g(c)l(oe)l(\002)-49 b(\002c)m(ients\),)75 b FJ(lpLOSTFEAS)d FP(\(pr)s(i)s(mal)996 3056 y(feas)n(ibility)57 b(has)g(been)g(l)n(os)-5 b(t)58 b(and)i FM(D)8 b(Y)g(L)g(P)63 b FP(has)58 b(e)-5 b(xc)f(ee)l(d)h(e)l(d)57 b(its)h(li)s(m)s(it)f(o)l(n)f(a)-8 b(tte)n(mpts)57 b(to)g(r)q(e)-5 b(gai)s(n)57 b(feas)n(i-)996 3256 y(bility\),)67 b FJ(lpST)-7 b(ALLED)65 b FP(\(th)l(e)f(li)s(m)s (it)h(o)l(n)g(pivots)f(with)n(o)-5 b(u)l(t)64 b(i)s(mpr)q(ove)n(ment)g (i)s(n)h(th)l(e)f(o)-8 b(bj)l(ec)j(tive)65 b(has)f(been)996 3455 y(e)-5 b(xc)f(ee)l(d)h(e)l(d,)82 b(d)-7 b(u)l(e)75 b(to)h(cycli)s(n)n(g)e(o)-7 b(r)76 b(s)-5 b(t)s(alli)s(n)n(g)12 b(\),)81 b FJ(lpITERLIM)75 b FP(\(a)h(li)s(m)s(it)g(o)l(n)f(pivots)h (pe)l(r)f(p)-6 b(has)m(e)76 b(o)-7 b(r)76 b(tot)s(al)996 3654 y(pivots)k(has)g(been)g(e)-5 b(xc)f(ee)l(d)h(e)l(d\),)87 b FJ(lpA)-6 b(CCCHK)81 b FP(\(a)f(n)n(ume)l(r)s(ical)g(a)n(ccura)n(cy)f (c)-7 b(h)l(ec)f(k)80 b(has)g(occurr)q(e)l(d\),)996 3853 y FJ(lpNOSP)-17 b(A)-6 b(CE)71 b FP(\(th)l(e)e(GL)s(PK)g(bas)n(is)h(r)q (o)-5 b(u)l(ti)s(n)n(e)o(s)70 b(c)l(o)-5 b(u)l(ld)69 b(n)m(ot)g(a)n(cq)l(uir)q(e)g(s)-8 b(u\002)-49 b(\002c)m(ient)69 b(s)-8 b(pa)n(c)i(e)70 b(to)f(mai)s(nt)s(ai)s(n)996 4053 y(th)l(e)c(bas)n(is)g(i)s(nve)l(rs)m(e\),)i FJ(lpF)-11 b(A)k(T)g(AL)65 b FP(\(an)f(uns)-8 b(pec)m(i\002e)l(d)63 b(fa)-8 b(t)s(al)65 b(e)l(rr)q(o)-7 b(r)65 b(has)g(occurr)q(e)l(d\),)i (and)e FJ(lpINV)f FP(\()t FM(D)8 b(Y)g(L)g(P)996 4252 y FP(a)l(bo)-7 b(rte)l(d)53 b(d)-7 b(u)l(e)52 b(to)h(i)s(nte)l(r)5 b(nal)51 b(c)l(o)l(nfu)-7 b(s)n(io)l(n\).)597 4584 y Fd(obj)165 b FP(Fo)-7 b(r)72 b(an)e(o)-5 b(pti)s(mal)71 b(r)q(e)o(s)-8 b(u)l(lt,)75 b(th)l(e)c(v)r(al)n(u)l(e)g(of)g(th)l(e)f (o)-8 b(bj)l(ec)j(tive)71 b(func)-5 b(tio)l(n.)118 b(Fo)-7 b(r)72 b(an)e(i)s(nfeas)n(ib)l(l)n(e)i(r)q(e)o(s)-8 b(u)l(lt,)996 4783 y(th)l(e)61 b(tot)s(al)h(pr)s(i)s(mal)g(i)s(nfeas)n(ibility)-17 b(.)92 b(Fo)-7 b(r)62 b(an)f(un)m(bo)-5 b(und)g(e)l(d)59 b(r)q(e)o(s)-8 b(u)l(lt,)63 b(th)l(e)f(i)s(nd)-5 b(e)g(x)61 b(of)h(th)l(e)f(un)m(bo)-5 b(und)g(e)l(d)996 4982 y(v)r(ar)s(i)s(a)l(b) l(l)n(e,)45 b(n)n(e)-5 b(ga)d(te)l(d)42 b(if)g(th)l(e)g(v)r(ar)s(i)s(a) l(b)l(l)n(e)h(can)g(d)-5 b(ec)d(r)q(eas)m(e)42 b(with)n(o)-5 b(u)l(t)41 b(bo)-5 b(und,)43 b(pos)n(itive)g(if)g(it)f(can)g(i)s(nc)-8 b(r)q(eas)m(e)996 5182 y(with)n(o)j(u)l(t)51 b(bo)-5 b(und.)65 b(Fo)-7 b(r)53 b(any)f(oth)l(e)l(r)g(r)q(e)-7 b(t)l(ur)5 b(n)52 b(s)-5 b(t)s(a)d(t)l(u)h(s,)53 b(this)f(\002e)l(ld)h (is)g(und)-5 b(e)l(\002)s(n)n(e)l(d.)382 5514 y Fd(phase)996 5846 y FN(\(i\))262 b FP(If)53 b(th)l(e)e(p)-6 b(has)m(e)52 b(is)g(s)m(e)-7 b(t)53 b(to)f FJ(dyDONE)p FP(,)k FM(D)8 b(Y)g(L)g(P)58 b FP(will)51 b(as)-5 b(s)d(ume)52 b(tha)-8 b(t)52 b(th)l(e)f(o)l(nly)g(p)-5 b(urpos)m(e)51 b(of)h(th)l(e)g(call) 1424 6045 y(is)h(to)g(fr)q(ee)g(i)s(nte)l(r)5 b(nal)52 b(da)-8 b(t)s(a)53 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s.)65 b(Oth)l(e)l(r)52 b(v)r(al)n(u)l(e)o(s)h(ar)q(e)g(ign)m(o)-7 b(r)q(e)l(d.)996 6311 y FN(\(o\))219 b FP(T)8 b(h)l(e)76 b(te)l(r)5 b(m)s(i)s(na)-8 b(tio)l(n)74 b(p)-6 b(has)m(e)76 b(of)g(th)l(e)g(dy)7 b(nam)s(ic)74 b(s)n(i)s(mpl)n(e)-5 b(x)77 b(algo)-7 b(r)s(ithm;)87 b(s)-8 b(h)n(o)j(u)l(ld)75 b(be)h FJ(dyDONE)1424 6510 y FP(unl)n(e)o(s)-5 b(s)53 b(an)g(e)l(rr)q(o)-7 b(r)53 b(has)f(occurr)q(e)l(d,)h(i)s(n)f(whic)-7 b(h)52 b(cas)m(e)h(it'll)f(be)h FJ(dyINV)p FP(.)342 6842 y Fd(r)n(o)m(wsze)164 b FP(T)8 b(h)l(e)58 b(all)n(oca)-8 b(te)l(d)59 b(r)q(ow)f(ca)-6 b(pa)n(c)m(ity)57 b(of)i(th)l(e)f(da)-8 b(t)s(a)58 b(s)-5 b(tru)g(c)g(t)l(ur)q(e.)82 b(T)8 b(h)l(e)58 b FJ(basis)p FP(,)i FJ(x)p FP(,)g(and)e FJ(y)h FP(da)-8 b(t)s(a)58 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s,)996 7041 y(if)66 b(pr)q(ovid)-5 b(e)l(d)66 b(by)f(th)l(e)h(client,)j(m)l(u)-7 b(s)i(t)66 b(be)g(ca)-6 b(pa)l(b)l(l)n(e)67 b(of)f(h)n(o)-5 b(ldi)s(n)n(g)64 b(this)i(many)f(entr)s(ie)o(s.)106 b(If)66 b FJ(r)m(o)m(wsze)g FP(is)996 7241 y(i)s(ns)-8 b(u\002)-49 b(\002c)m(ient)51 b(to)i(r)q(e)-7 b(t)l(ur)5 b(n)52 b(th)l(e)g(answe)l (r)-9 b(,)56 b FM(D)8 b(Y)g(L)g(P)58 b FP(will)52 b(r)q(eall)n(oca)-8 b(te)53 b(th)l(e)g(da)-8 b(t)s(a)53 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s.) 420 7573 y Fd(sta)q(tus)164 b FP(A)53 b(da)-8 b(t)s(a)54 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)52 b(to)h(h)n(o)-5 b(ld)53 b(th)l(e)g(s)-5 b(t)s(a)d(t)l(u)h(s)53 b(of)g(v)r(ar)s(i)s(a)l(b)l(l)n (e)o(s.)68 b(Fo)-7 b(r)53 b(n)m(o)l(n)m(bas)n(ic)f(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s,)i(an)e(entry)h(is)g(a)1000 7772 y FM(D)8 b(Y)g(L)g(P)61 b FP(s)-5 b(t)s(a)d(t)l(u)h(s)56 b(c)l(od)-5 b(e)55 b(\()p FJ(vstatNBFX)p FP(,)e FJ(vstatNBUB)p FP(,)h FJ(vstatNBLB)p FP(,)f(o)-7 b(r)56 b FJ(vstatNBFR)p FP(\).)d(Fo)-7 b(r)56 b(bas)n(ic)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)h(an)996 7971 y(entry)c(is)h(th)l(e)f(n)n(e)-5 b(ga)d(tive)53 b(of)g(th)l(e)f(bas)n(is)h(pos)n(itio)l(n.)996 8303 y FN(\(i\))262 b FP(Fo)-7 b(r)60 b(a)g(war)5 b(m)59 b(s)-5 b(t)s(art,)63 b(an)c(i)s(niti)s(al)g(s)-5 b(t)s(a)d(t)l(u)h(s)61 b(m)l(u)-7 b(s)i(t)60 b(be)g(pr)q(ovid)-5 b(e)l(d.)86 b(Fo)-7 b(r)60 b(a)g(c)l(o)-5 b(ld)59 b(o)-7 b(r)60 b(h)n(ot)g(s)-5 b(t)s(art,)62 b(a)1424 8503 y(s)-5 b(tru)g(c)g(t)l(ur)q(e)53 b(can)f(be)h(pr)q(ovid)-5 b(e)l(d)52 b(to)h(r)q(e)-7 b(t)l(ur)5 b(n)52 b(th)l(e)h(\002)s(nal)f(s)-5 b(t)s(a)d(t)l(u)h(s.)996 8768 y FN(\(o\))219 b FP(T)8 b(h)l(e)85 b(\002)s(nal)h(s)-5 b(t)s(a)d(t)l(u)h(s)86 b(vec)-5 b(to)e(r)d(.)164 b(T)8 b(h)l(e)86 b(v)r(al)n(u)l(e)g(of)f(n)m(o)l(n)m(bas)n(ic)f(pr)s(i)s(mal) i(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(is)f(r)q(e)-7 b(t)l(ur)5 b(n)n(e)l(d)1424 8967 y(thr)q(o)-5 b(u)l(gh)81 b(this)h(vec)-5 b(to)e(r)d(.)155 b(If)84 b(n)m(o)d(vec)-5 b(to)e(r)84 b(was)e(s)-8 b(u)i(p)e(plie)l(d)82 b(as)h(an)g(i)s(np)-5 b(u)l(t)81 b(parame)-7 b(te)l(r)e(,)94 b FM(D)8 b(Y)g(L)g(P)1424 9167 y FP(will)52 b(all)n(oca)-8 b(te)53 b(o)l(n)n(e)f(o)l(n)g(o)-5 b(u)l(tp)g(u)l(t.)747 9499 y Fd(x)165 b FP(A)53 b(da)-8 b(t)s(a)53 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)52 b(to)h(h)n(o)-5 b(ld)52 b(th)l(e)h(v)r(al)n(u)l(e)o(s)g(of)g(th)l(e)f(bas)n(ic)h(pr)s (i)s(mal)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)996 9831 y FN(\(i\))262 b FP(A)53 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)52 b(can)h(be)g(pr)q(ovid)-5 b(e)l(d)52 b(to)h(r)q(e)-7 b(t)l(ur)5 b(n)52 b(th)l(e)g(\002)s(nal)h(v)r(al)n(u)l(e)o(s.)996 10097 y FN(\(o\))219 b FP(T)8 b(h)l(e)54 b(v)r(al)n(u)l(e)o(s)h(of)f (th)l(e)f(bas)n(ic)i(pr)s(i)s(mal)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)g (i)s(nd)-5 b(e)g(xe)l(d)53 b(by)h(bas)n(is)h(pos)n(itio)l(n.)69 b(If)54 b(n)m(o)f(vec)-5 b(to)e(r)1424 10296 y(was)53 b(s)-8 b(u)i(p)e(plie)l(d)51 b(as)i(an)g(i)s(np)-5 b(u)l(t)52 b(parame)-7 b(te)l(r)e(,)56 b FM(D)8 b(Y)g(L)g(P)59 b FP(will)52 b(all)n(oca)-8 b(te)53 b(o)l(n)n(e)f(o)l(n)g(o)-5 b(u)l(tp)g(u)l(t.)3771 11400 y(74)p eop end %%Page: 75 78 TeXDict begin 75 77 bop 744 466 a Fd(y)165 b FP(A)53 b(da)-8 b(t)s(a)53 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)52 b(to)h(h)n(o)-5 b(ld)52 b(th)l(e)h(v)r(al)n(u)l(e)o(s)g(of)g(th)l(e)f(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)996 783 y FN(\(i\))262 b FP(A)53 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)52 b(can)h(be)g(pr)q(ovid)-5 b(e)l(d)52 b(to)h(r)q(e)-7 b(t)l(ur)5 b(n)52 b(th)l(e)g(\002)s(nal)h(v)r(al)n(u)l(e)o(s.)996 1034 y FN(\(o\))219 b FP(T)8 b(h)l(e)73 b(v)r(al)n(u)l(e)o(s)g(of)g(th) l(e)g(d)-7 b(ual)72 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)79 b(i)s(nd)-5 b(e)g(xe)l(d)73 b(by)f(bas)n(is)i(pos)n(itio)l(n.)125 b(If)73 b(n)m(o)g(vec)-5 b(to)e(r)73 b(was)1424 1234 y(s)-8 b(u)i(p)e(plie)l(d)51 b(as)j(an)e(i)s(np)-5 b(u)l(t)52 b(parame)-7 b(te)l(r)e(,)57 b FM(D)8 b(Y)g(L)g(P)58 b FP(will)52 b(all)n(oca)-8 b(te)53 b(o)l(n)n(e)g(o)l(n)f(o)-5 b(u)l(tp)g(u)l(t.)0 1819 y Fu(17)-35 b(.11)201 b Fc(D)10 b(Y)g(L)g(P)73 b Fu(Optio)-5 b(ns)4 2238 y FM(D)8 b(Y)g(L)g(P)71 b FP(is)65 b(i)s(ntend)-5 b(e)l(d)64 b(to)h(be)h(a)f(\003)n(e)-5 b(x)10 b(ib)l(l)n(e)66 b(te)o(s)-5 b(tbe)l(d,)68 b(and)d(as)g(s)-8 b(u)j(c)e(h)65 b(has)g(a)h(larg)n(e)e(n)n(umbe)l(r)g(of)i(o)-5 b(ptio)l(ns.)101 b(Many)-17 b(,)67 b(i)s(n)0 2438 y(fa)n(c)-5 b(t,)56 b(ha)-7 b(ve)55 b(arg)n(u)l(e)l(d)f(tha)-8 b(t)55 b(it)g(has)g(entir)q(e)l(ly)g(too)g(many)f(o)-5 b(ptio)l(ns.)72 b(T)8 b(h)l(e)55 b(a)-8 b(u)l(th)n(o)h(r)55 b(of)n(fe)l(rs)h(two)e(o)-8 b(bs)m(e)l(rv)r(a)g(tio)l(ns)53 b(i)s(n)j(his)0 2637 y(own)c(d)-5 b(e)l(fens)m(e:)217 3039 y Fo(e)82 b FP(All)52 b(of)h(th)l(e)n(m,)f(a)-8 b(t)53 b(s)n(o)n(me)g(poi)s(nt,)f(we)l(r)q(e) g(u)-7 b(s)m(e)l(fu)l(l)52 b(to)h(hi)s(m,)f(and)217 3356 y Fo(e)82 b FP(if)67 b(yo)-5 b(u'r)q(e)67 b(n)m(ot)f(i)s(nte)l(r)q(e)o (s)-5 b(te)l(d,)71 b(ign)m(o)-7 b(r)q(e)66 b(th)l(e)n(m)g(all)i(and)f (l)n(e)-7 b(t)72 b FM(D)8 b(Y)g(L)g(P)73 b FP(c)-7 b(h)n(oos)m(e)67 b(wha)-8 b(t)67 b(it)g(thi)s(nks)f(ar)q(e)i(r)q(eas)n(o)l(na)l(b)l(l)n (e)415 3556 y(v)r(al)n(u)l(e)o(s.)0 3958 y(If)77 b(yo)-5 b(u)76 b(l)n(ook)h(thr)q(o)-5 b(u)l(gh)75 b(th)l(e)h(c)l(od)-5 b(e,)83 b(yo)-5 b(u)76 b(may)h(n)m(otic)-6 b(e)76 b(a)h(few)g(o)-5 b(ptio)l(ns)76 b(tha)-8 b(t)76 b(ar)q(en't)g(documente)l(d)g(h)l(e)l(r) q(e.)137 b(By)0 4157 y(and)56 b(larg)n(e,)f(this)g(is)i(beca)-8 b(u)h(s)m(e)56 b(th)l(e)f(be)o(s)-5 b(t)57 b(c)-7 b(h)n(oic)h(e)57 b(is)f(cl)n(ear)g(and)g(c)-7 b(h)n(oic)h(e)o(s)57 b(oth)l(e)l(r)e(than) g(th)l(e)h(curr)q(ent)f(d)-5 b(e)l(fa)d(u)l(lt)55 b(g)t(ive)0 4356 y(unifo)-7 b(r)5 b(mly)51 b(poo)-7 b(r)53 b(pe)l(r)5 b(fo)-7 b(r)5 b(manc)-6 b(e.)249 4655 y(Optio)l(ns)68 b(ar)q(e)h(h)l(e)l(ld)f(i)s(nte)l(r)5 b(nally)67 b(i)s(n)h(a)h FJ(lpopts_str)s(uct)e FP(s)-5 b(tru)g(c)g(t)l(ur)q(e.)113 b(Ea)n(c)-7 b(h)68 b(\002e)l(ld)g(is)h(d)-5 b(e)o(sc)d(r)s(ibe)l(d)69 b(b)-5 b(r)s(ie)l(\003y)68 b(be)l(l)n(ow,)0 4854 y(i)s(ncl)n(udi)s(n)n (g)56 b(d)-5 b(e)l(fa)d(u)l(lt)57 b(v)r(al)n(u)l(e)o(s.)82 b(T)8 b(h)l(e)58 b(r)q(ea)-6 b(d)h(e)l(r)58 b(is)g(enc)l(o)-5 b(urag)n(e)l(d)57 b(to)h(c)l(o)l(ns)-8 b(u)l(lt)56 b FJ(dylp.h)j FP(fo)-7 b(r)59 b(d)-5 b(e)e(t)s(ails,)60 b(and)d FJ(dy_setup.c)h FP(to)0 5054 y(c)l(o)l(n\002r)5 b(m)52 b(tha)-8 b(t)52 b(d)-5 b(e)l(fa)d(u)l(lt)52 b(v)r(al)n(u)l(e)o (s)h(ha)-7 b(ve)52 b(n)m(ot)g(c)-7 b(han)n(g)n(e)l(d)51 b(s)n(i)s(nc)-6 b(e)53 b(this)g(document)s(a)-8 b(tio)l(n)51 b(was)h(wr)s(itten.)249 5353 y(Mos)-5 b(t)67 b(o)-5 b(ptio)l(ns)65 b(can)i(be)g(s)m(e)-7 b(t)67 b(u)-7 b(s)n(i)s(n)n(g)67 b(c)l(o)n(mmands)f(r)q(ea)-6 b(d)67 b(fr)q(o)n(m)g(an)g(o)-5 b(ptio)l(ns)66 b(\002l)n(e.)107 b(T)8 b(his)67 b(\002l)n(e)g(is)g(pars) m(e)l(d)g(by)f(a)0 5552 y(s)n(i)s(mpl)n(e)52 b(c)l(o)n(mmand)e(i)s(nte) l(rpr)q(e)-7 b(te)l(r)50 b(\(c)l(o)l(nt)s(ai)s(n)n(e)l(d)g(i)s(n)h FJ(cmdint.c)p FP(\))g(and)f(s)-8 b(u)i(p)e(po)h(rt)50 b(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)51 b(i)s(n)f FJ(dy_setup.c)h FP(and)f(i)s(n)h(th)l(e)0 5751 y(i/)-12 b(o)62 b(lib)-5 b(rary)62 b(\()p FG(vid)p FP(.)h(\24717)-29 b(.4\).)94 b(If)63 b(yo)-5 b(ur)62 b(a)-6 b(p)e(plica)g(tio)l(n)61 b(has)h(s)n(o)n(me)h(oth)l(e)l(r)f(way)f(to)i(a)n(cq)l(uir)q(e)f(o)-5 b(ptio)l(ns)62 b(fr)q(o)n(m)g(th)l(e)h(u)-7 b(s)m(e)l(r)e(,)0 5950 y(all)50 b(tha)-8 b(t')j(s)50 b(r)q(eally)g(n)n(ec)-6 b(e)o(s)h(sary)51 b(is)f(a)h(way)f(to)g(c)-8 b(r)q(ea)g(te)51 b(and)f(l)n(oa)-6 b(d)50 b(a)h FJ(lpopts_str)s(uct)e FP(to)h(pas)-5 b(s)51 b(as)g(a)g(parame)-7 b(te)l(r)50 b(to)h FJ(dylp)p FP(.)0 6150 y(A)8 b(s)64 b(d)-5 b(e)o(sc)d(r)s(ibe)l (d)63 b(i)s(n)h(\24717)-29 b(.2,)65 b(th)l(e)e(r)q(o)-5 b(u)l(ti)s(n)n(e)o(s)64 b FJ(dy_def)-6 b(aults)64 b FP(and)f FJ(dy_chec)n(kdef)-6 b(aults)63 b FP(will,)i(r)q(e)o(s)-8 b(pec)j(tive)l(ly)-17 b(,)66 b(i)s(niti)s(alis)m(e)d(a)0 6349 y FJ(lpopts_str)s(uct)51 b FP(with)g(d)-5 b(e)l(fa)d(u)l(lt)52 b(v)r(al)n(u)l(e)o(s)h(and)g(a)-6 b(dj)f(u)g(s)i(t)53 b(th)n(os)m(e)g(v)r(al)n(u)l(e)o(s)g(to)g(ma)-8 b(tc)h(h)52 b(th)l(e)h(c)l(o)l(ns)-5 b(trai)s(nt)51 b(sys)-5 b(te)n(m.)249 6648 y(In)45 b(th)l(e)f(i)s(ndivid)-7 b(ual)43 b(o)-5 b(ptio)l(n)43 b(d)-5 b(e)o(sc)d(r)s(iptio)l(ns)44 b(whic)-7 b(h)43 b(fo)-5 b(ll)n(ow,)45 b(th)l(e)f(\002rs)-5 b(t)45 b(li)s(n)n(e)g(pr)q(ovid)-5 b(e)o(s)44 b(th)l(e)g(sy)7 b(nt)s(ax)44 b(e)-5 b(xpec)g(te)l(d)45 b(by)0 6847 y(th)l(e)64 b(s)n(i)s(mpl)n(e)h(c)l(o)n(mmand)f(i)s(nte)l(rpr)q(e)-7 b(te)l(r)63 b(mentio)l(n)n(e)l(d)g(a)l(bove.)100 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)63 b(a)l(bo)-5 b(u)l(t)63 b(a)n(cc)-6 b(e)f(pt)s(a)l(b)l(l)n(e)65 b(v)r(al)n(u)l(e)o(s.)100 b(Wh)l(e)l(r)q(e)0 7046 y(a)-6 b(p)e(plica)l(b)l(l)n(e,)50 b(fo)-7 b(r)50 b(s)n(i)s(mpl)n(e)g(n)n(ume)l(r)s(ic)f(parame)-7 b(te)l(rs,)51 b(th)l(e)e(n)n(e)-5 b(xt)50 b(li)s(n)n(e)g(g)t(ive)o(s)f (th)l(e)h(l)n(owe)l(r)f(bo)-5 b(und,)49 b(d)-5 b(e)l(fa)d(u)l(lt)48 b(v)r(al)n(u)l(e,)j(and)0 7246 y(u)-6 b(p)e(pe)l(r)71 b(bo)-5 b(und)70 b(fo)-7 b(r)72 b(th)l(e)g(o)-5 b(ptio)l(n)70 b(i)s(n)i(th)l(e)f(n)m(ot)s(a)-8 b(tio)l(n)70 b(\(l)n(owe)l(r)52 b(bo)-5 b(und)n(\))50 b FF(\243)g FP(\(d)-5 b(e)l(fa)d(u)l(lt)51 b(v)r(al)n(u)l(e\))f FF(\243)g FP(\(u)-6 b(p)e(pe)l(r)52 b(bo)-5 b(und)n(\).)122 b(T)8 b(h)l(e)0 7445 y(r)q(e)n(mai)s(nd)-5 b(e)l(r)52 b(of)h(th)l(e)f(entry)g(d)-5 b(e)o(sc)d(r)s(ibe)o(s)53 b(th)l(e)g(a)n(c)-5 b(tio)l(n)51 b(of)i(th)l(e)f(o)-5 b(ptio)l(n.)337 7873 y Fd(activ)m(e:)164 b(cons)s(,)41 b(v)l(ar)s(s)996 8131 y FO(lpcontrol)97 b(active)50 b Fb(size-spec)p FJ(-LIST)3587 8038 y Fa(,)3717 8131 y FO(;)996 8330 y Fb(size-spec)i FP(::)1807 8348 y(=)1960 8330 y FO(variables)d FJ(\003oat)k FP(|)g FO(constraints)c FJ(\003oat)996 8589 y FP(0)r(.)r(0)41 b FF(\243)i FP(.)r(25)e FF(\243)g FP(1)r(.)r(0)52 b(fo)-7 b(r)53 b(both)996 8847 y(T)8 b(h)l(e)46 b(v)r(al)n(u)l(e)o(s)h FJ(activ)m(e.v)l(ar)s(s)f FP(and)f FJ(activ)m(e.cons)h FP(s)-8 b(pec)m(ify)46 b(th)l(e)g(fra)n(c) -5 b(tio)l(n)45 b(of)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(and)f(c)l(o)l (ns)-5 b(trai)s(nts,)996 9046 y(r)q(e)o(s)d(pec)j(tive)l(ly)-17 b(,)76 b(whic)-7 b(h)70 b(ar)q(e)i(e)-5 b(xpec)g(te)l(d)72 b(to)f(be)g(a)n(c)-5 b(tive)72 b(a)-8 b(t)71 b(any)g(o)l(n)n(e)g(ti)s (me.)121 b(T)8 b(h)l(e)71 b(i)s(niti)s(al)g(all)n(oca)-8 b(te)l(d)996 9245 y(ca)i(pa)n(c)m(ity)49 b(of)h(th)l(e)g(a)n(c)-5 b(tive)50 b(c)l(o)l(ns)-5 b(trai)s(nt)48 b(sys)-5 b(te)n(m)50 b(da)-8 b(t)s(a)50 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)49 b(will)g(be)h(th)l (e)g(s)-8 b(pec)m(i\002e)l(d)49 b(fra)n(c)-5 b(tio)l(n)48 b(of)996 9445 y(th)l(e)42 b(n)n(umbe)l(r)g(of)h(v)r(ar)s(i)s(a)l(b)l(l) n(e)o(s)g(and)f(c)l(o)l(ns)-5 b(trai)s(nts)42 b(i)s(n)g(th)l(e)g(c)l(o) l(ns)-5 b(trai)s(nt)42 b(sys)-5 b(te)n(m)42 b(pas)-5 b(s)m(e)l(d)42 b(to)h FJ(dylp)p FP(.)62 b(T)8 b(h)l(ey)996 9644 y(do)59 b(n)m(ot)f(r)q(e)-7 b(pr)q(e)o(s)m(ent)59 b(li)s(m)s(its)h(\227)f(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)58 b(sys)-5 b(te)n(m)59 b(will)f(be)h(e)-5 b(xpand)g(e)l(d)58 b(as)i(r)q(eq)l(uir)q(e)l(d.)84 b(T)8 b(h)l(ey)996 9843 y(ar)q(e)51 b(e)-5 b(xpos)m(e)l(d)50 b(fo)-7 b(r)50 b(e)l(\002)-49 b(\002c)m(iency)49 b(i)s(n)i(th)l(e)e(event)i(tha)-8 b(t)49 b(th)l(e)h(client)g(can)h(pr)q(ovid)-5 b(e)50 b(a)g(be)-7 b(tte)l(r)51 b(e)o(s)-5 b(ti)s(ma)d(te)51 b(fo)-7 b(r)996 10042 y(th)l(e)53 b(e)-5 b(xpec)g(te)l(d)52 b(s)n(ize)h(of)g(th)l(e)g(a)n(c)-5 b(tive)52 b(c)l(o)l(ns)-5 b(trai)s(nt)52 b(sys)-5 b(te)n(m.)996 10301 y(Note)41 b(tha)-8 b(t)41 b(s)-8 b(pec)m(ifyi)s(n)n(g)39 b FJ(activ)m(e)r FP(.)r FJ(v)l(ar)s(s)31 b FP(=)i(1)r(.)r(0)40 b(and)h FJ(activ)m(e)r FP(.)r FJ(cons)31 b FP(=)i(1)r(.)r(0)41 b(is)g FG(not)53 b FP(th)l(e)41 b(same)h(as)f(s)-8 b(pec)m(ifyi)s(n)n (g)996 10500 y(tha)g(t)64 b FM(D)8 b(Y)g(L)g(P)65 b FP(u)-7 b(s)m(e)61 b(th)l(e)e(fu)l(ll)h(c)l(o)l(ns)-5 b(trai)s(nt)59 b(sys)-5 b(te)n(m)60 b(\()p FG(cf)p FP(.)f FJ(fullsys)p FP(\).)87 b(T)8 b(h)l(e)60 b(da)-8 b(t)s(a)60 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)60 b(fo)-7 b(r)60 b(th)l(e)g(a)n(c)-5 b(tive)3771 11400 y(75)p eop end %%Page: 76 79 TeXDict begin 76 78 bop 996 466 a FP(c)l(o)l(ns)-5 b(trai)s(nt)51 b(sys)-5 b(te)n(m)50 b(will)h(be)g(c)-8 b(r)q(ea)g(te)l(d)51 b(with)f(th)l(e)h(ca)-6 b(pa)n(c)m(ity)51 b(to)g(h)n(o)-5 b(ld)51 b(th)l(e)g(fu)l(ll)f(c)l(o)l(ns)-5 b(trai)s(nt)51 b(sys)-5 b(te)n(m,)996 665 y(b)d(u)l(t)52 b(c)l(o)l(ns)-5 b(trai)s(nt)52 b(and)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(a)n(c)-5 b(tiv)r(a)d(tio)l(n)52 b(and)g(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)51 b(will)h(pr)q(oc)-6 b(ee)l(d)53 b(as)g(u)-7 b(s)f(ual.)309 987 y Fd(addv)l(ar)163 b FO(lpcontrol)97 b(actvarlim)49 b FJ(integer)k FO(;)996 1247 y FP(L)s(i)s(m)s(its)41 b(th)l(e)f(max)10 b(i)s(m)l(um)40 b(n)n(umbe)l(r)g(of)g(v)r(ar)s(i)s(a) l(b)l(l)n(e)o(s)h(whic)-7 b(h)40 b(can)g(be)h(a)n(c)-5 b(tiv)r(a)d(te)l(d)39 b(i)s(n)h(any)g(o)l(n)n(e)g(e)-5 b(xecu)l(tio)l(n)996 1446 y(of)77 b(th)l(e)f(v)r(ar)s(i)s(a)l(b)l(l)n (e)i(a)n(c)-5 b(tiv)r(a)d(tio)l(n)75 b(p)-6 b(has)m(e.)137 b(A)77 b(v)r(al)n(u)l(e)g(of)f(0)h(\(th)l(e)f(d)-5 b(e)l(fa)d(u)l(lt\)) 76 b(means)h(tha)-8 b(t)76 b(n)m(o)g(li)s(m)s(it)h(is)996 1645 y(enfo)-7 b(r)q(c)h(e)l(d.)369 1967 y Fd(chec)n(k)164 b FO(lpcontrol)97 b(check)51 b FJ(integer)h FO(;)996 2227 y FP(1)42 b FF(\243)f FJ(f)-6 b(actor)q FP(/)r(2)41 b FF(\243)g(\245)996 2487 y FP(T)8 b(h)l(e)55 b(n)m(o)n(m)s(i)s(nal)f (i)s(nte)l(rv)r(al)g(be)-7 b(tween)55 b(a)n(ccura)n(cy)f(c)-7 b(h)l(ec)f(ks,)55 b(e)-5 b(xpr)q(e)o(s)g(s)m(e)l(d)55 b(i)s(n)g(te)l(r)5 b(ms)55 b(of)g(th)l(e)f(n)n(umbe)l(r)g(of)996 2686 y(pivots)f(whic)-7 b(h)51 b(a)n(c)-5 b(t)l(ually)52 b(c)-7 b(han)n(g)n(e)51 b(th)l(e)i(bas)n(is.)996 2947 y(Accura)n(cy)74 b(c)-7 b(h)l(ec)f(ks)74 b(a)-8 b(tte)n(mpt)73 b(to)h(d)-5 b(e)e(tec)i(t)75 b(th)l(e)e(a)n(ccum)l(u)l(la)-8 b(tio)l(n)72 b(of)i(n)n(ume)l(r)s(ical)g(i)s(na)n(ccura)n(cy)-17 b(,)79 b(and)1000 3146 y FM(D)8 b(Y)g(L)g(P)63 b FP(will)56 b(pe)l(r)5 b(fo)-7 b(r)5 b(m)57 b(a)h(c)-7 b(h)l(ec)f(k)57 b(earlie)l(r)f(if)i(it)e(s)-8 b(u)h(s)f(pec)j(ts)58 b(n)n(ume)l(r)s (ical)f(pr)q(o)-8 b(b)l(l)n(e)n(ms.)77 b(Whil)n(e)57 b(th)l(e)l(r)q(e')-5 b(s)56 b(n)m(o)996 3345 y(enfo)-7 b(r)q(c)h(e)l(d)47 b(u)-6 b(p)e(pe)l(r)47 b(li)s(m)s(it)g(o)l(n)g(th)l (e)f(n)n(umbe)l(r)h(of)g(pivots)g(be)-7 b(tween)47 b(a)n(ccura)n(cy)f (c)-7 b(h)l(ec)f(ks,)48 b(i)s(n)f(pra)n(c)-5 b(tic)f(e)47 b(an)996 3544 y(a)n(ccura)n(cy)52 b(c)-7 b(h)l(ec)f(k)53 b(is)g(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d)52 b(ea)n(c)-7 b(h)53 b(ti)s(me)g(th)l(e)g(bas)n(is)g(is)g(fa)n(c)-5 b(to)e(r)q(e)l(d)53 b(d)-7 b(ur)s(i)s(n)n(g)50 b(s)n(i)s(mpl)n(e)-5 b(x)54 b(p)-6 b(has)m(e)o(s.)210 3866 y Fd(coldv)l(ar)s(s)163 b FO(lpcontrol)97 b(coldvars)50 b FJ(integer)i FO(;)996 4126 y FP(0)42 b FF(\243)f FP(5000)g FF(\243)h FP(100000.)996 4386 y(Wh)l(en)51 b(th)l(e)g(n)n(umbe)l(r)g(of)g(a)n(c)-5 b(tive)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(i)s(n)f(th)l(e)g(c)l(o)l (ns)-5 b(trai)s(nt)51 b(sys)-5 b(te)n(m)51 b(o)l(n)g(a)g(c)l(o)-5 b(ld)51 b(s)-5 b(t)s(art)52 b(e)-5 b(xc)f(ee)l(ds)996 4586 y FJ(coldv)l(ar)s(s)p FP(,)83 b(and)77 b(th)l(e)g(client)g(has)g (n)m(ot)g(r)q(eq)l(u)l(e)o(s)-5 b(te)l(d)78 b(tha)-8 b(t)80 b FM(D)8 b(Y)g(L)g(P)83 b FP(wo)-7 b(rk)77 b(with)f(th)l(e)h(fu) l(ll)g(c)l(o)l(ns)-5 b(trai)s(nt)996 4785 y(sys)g(te)n(m,)56 b FM(D)8 b(Y)g(L)g(P)58 b FP(will)51 b(a)-8 b(tte)n(mpt)52 b(to)g(d)-5 b(ea)n(c)g(tiv)r(a)d(te)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o (s)h(be)l(fo)-7 b(r)q(e)52 b(be)-5 b(g)t(i)s(nni)s(n)n(g)50 b(s)n(i)s(mpl)n(e)-5 b(x)53 b(ite)l(ra)-8 b(tio)l(ns.)996 5045 y(T)8 b(h)l(e)61 b(u)-6 b(p)e(pe)l(r)61 b(li)s(m)s(it)h(is)g(s)n (oft;)69 b FM(D)8 b(Y)g(L)g(P)67 b FP(will)61 b(is)-5 b(s)d(u)l(e)61 b(a)h(war)5 b(ni)s(n)n(g)59 b(if)i(a)h(high)l(e)l(r)e(v) r(al)n(u)l(e)i(is)f(r)q(eq)l(u)l(e)o(s)-5 b(te)l(d,)64 b(b)-8 b(u)l(t)996 5244 y(will)52 b(n)m(ot)g(enfo)-7 b(r)q(c)h(e)53 b(th)l(e)f(li)s(m)s(it.)549 5566 y Fd(con)165 b FP(a)n(c)-5 b(tlvl,)53 b(a)n(c)-5 b(tli)s(m,)52 b(d)-5 b(ea)n(c)g(tlvl)476 5887 y FJ(con.actlvl)166 b FO(lpcontrol)96 b(actconlvl)49 b FJ(integer)k FO(;)1362 6114 y FP(Spec)m(i\002e)o(s)f (th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)52 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n) 51 b(s)-5 b(tra)d(te)j(g)8 b(y)-17 b(.)65 b(T)8 b(h)l(e)l(r)q(e)53 b(ar)q(e)g(two)f(l)n(eve)l(ls:)1362 6369 y(0)g(\(s)-5 b(tr)s(ic)g(t\))219 b(Ac)-5 b(tiv)r(a)d(te)53 b(o)l(nly)e(c)l(o)l(ns)-5 b(trai)s(nts)52 b(whic)-7 b(h)51 b(ar)q(e)j(s)-5 b(tr)s(ic)g(tly)52 b(vio)-5 b(la)d(te)l(d.)1362 6596 y(1)52 b(\(tight\))218 b(Ac)-5 b(tiv)r(a)d(te)52 b(c)l(o)l(ns)-5 b(trai)s(nts)52 b(whic)-7 b(h)51 b(ar)q(e)j(tight)d(o)-7 b(r)53 b(s)-5 b(tr)s(ic)g(tly)53 b(vio)-5 b(la)d(te)l(d.)419 6851 y FJ(con.actlim)166 b FO(lpcontrol)96 b(actconlim)49 b FJ(integer)k FO(;)1362 7078 y FP(L)s(i)s(m)s(its)62 b(th)l(e)g(max)10 b(i)s(m)l(um)61 b(n)n(umbe)l(r)h(of)g(c)l(o)l(ns)-5 b(trai)s(nts)61 b(whic)-7 b(h)61 b(can)h(be)g(a)n(c)-5 b(tiv)r(a)d(te)l(d)61 b(i)s(n)h(any)f(o)l(n)n(e)1362 7277 y(e)-5 b(xecu)l(tio)l(n)44 b(of)i(th)l(e)f(c)l(o)l(ns)-5 b(trai)s(nt)45 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)44 b(p)-6 b(has)m(e.)63 b(A)45 b(v)r(al)n(u)l(e)h (of)g(0)f(\(th)l(e)g(d)-5 b(e)l(fa)d(u)l(lt\))45 b(means)h(tha)-8 b(t)1362 7476 y(n)m(o)51 b(li)s(m)s(it)i(is)g(enfo)-7 b(r)q(c)h(e)l(d.)277 7731 y FJ(con.deactlvl)166 b FO(lpcontrol)96 b(deactconlvl)49 b FP([)p FO(normal)p FP(|)p FO(aggressive)p FP(|)p FO(fanatic)o FP(])44 b FO(;)1362 7958 y FP(Spec)m(i\002e)o(s)52 b(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)52 b(d)-5 b(ea)n(c)g(tiv)r(a)d (tio)l(n)51 b(s)-5 b(tra)d(te)j(g)8 b(y)-17 b(.)65 b(T)8 b(h)l(e)l(r)q(e)53 b(ar)q(e)g(thr)q(ee)f(l)n(eve)l(ls:)1362 8213 y(0)g(\()p FO(normal)p FP(\))217 b(Dea)n(c)-5 b(tiv)r(a)d(te)59 b(o)l(nly)g(i)s(n)n(eq)l(ualitie)o(s)h(whic)-7 b(h)59 b(ar)q(e)i(s)-5 b(tr)s(ic)g(tly)60 b(l)n(oos)m(e)g(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)61 b(th)l(e)f(as)-5 b(s)n(o-)1747 8412 y(c)m(i)s(a)d(te)l(d)52 b(sla)n(c)-8 b(k)52 b(is)h(bas)n(ic)h(and) e(n)m(ot)g(a)-8 b(t)53 b(bo)-5 b(und\).)1362 8639 y(1)52 b(\()p FO(aggressive)p FP(\))215 b(\(d)-5 b(e)l(fa)d(u)l(lt\))90 b(Dea)n(c)-5 b(tiv)r(a)d(te)90 b(l)n(oos)m(e)h(i)s(n)n(eq)l(ualitie)o (s)f(and)h(tight)e(i)s(n)n(eq)l(ualitie)o(s)1747 8839 y(wh)n(os)m(e)52 b(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)52 b(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(is)g(ze)l(r)q(o.)1362 9066 y(2)f(\()p FO(fanatic)p FP(\))216 b(Dea)n(c)-5 b(tiv)r(a)d(te)65 b(l)n(oos)m(e)f(i)s(n)n(eq)l(ualitie)o(s)h(and)f(any)g(tight)g(c)l(o)l (ns)-5 b(trai)s(nt)63 b(\(i)s(n)n(eq)l(uality)1747 9265 y(o)-7 b(r)53 b(eq)l(uality\))f(wh)n(os)m(e)f(as)-5 b(s)n(oc)m(i)s(a)d (te)l(d)53 b(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(is)g(ze)l(r)q (o.)0 9581 y Fd(cop)m(y)l(or)s(igsys)162 b FO(lpcontrol)97 b(forcecopy)49 b FJ(boolean)k FO(;)996 9841 y FP(If)h(s)m(e)-7 b(t)53 b(to)g(tru)l(e,)j FM(D)8 b(Y)g(L)g(P)59 b FP(will)52 b(always)g(make)h(a)g(l)n(ocal)g(c)l(o)-5 b(py)53 b(of)g(th)l(e)f(o)-7 b(r)s(ig)t(i)s(nal)52 b(sys)-5 b(te)n(m.)66 b(By)52 b(d)-5 b(e)l(fa)d(u)l(lt,)52 b(a)996 10040 y(l)n(ocal)h(c)l(o)-5 b(py)52 b(is)h(ma)-6 b(d)h(e)54 b(o)l(nly)d(wh)l(en)g(n)n(ec)-6 b(e)o(s)h(sary)-17 b(.)1000 10301 y FM(D)8 b(Y)g(L)g(P)68 b FP(n)n(ee)l(ds)63 b(a)n(cc)-6 b(e)o(s)h(s)63 b(to)f(a)h(c)l(o)-5 b(py)61 b(of)h(th)l(e)g(o)-7 b(r)s(ig)t(i)s(nal)62 b(c)l(o)l(ns)-5 b(trai)s(nt)61 b(sys)-5 b(te)n(m)62 b(i)s(n)g(o)-7 b(r)q(d)i(e)l(r)62 b(to)g(scan)h(it)f(fo)-7 b(r)996 10500 y(c)l(o)l(ns)i(trai)s(nts)53 b(o)-7 b(r)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(tha)-8 b(t)52 b(s)-8 b(h)n(o)j(u)l(ld)52 b(be)i(a)-6 b(dd)h(e)l(d.)66 b(No)-7 b(r)5 b(mally)53 b(this)f(a)n(cc)-6 b(e)o(s)h(s)54 b(is)g(r)q(ea)-6 b(d-o)l(nly)-17 b(,)53 b(and)3771 11400 y(76)p eop end %%Page: 77 80 TeXDict begin 77 79 bop 1000 466 a FM(D)8 b(Y)g(L)g(P)72 b FP(u)-7 b(s)m(e)o(s)68 b(th)l(e)e(c)l(o)l(ns)-5 b(trai)s(nt)65 b(sys)-5 b(te)n(m)66 b(s)-8 b(u)i(p)e(plie)l(d)65 b(as)i(a)g(parame)-7 b(te)l(r)d(.)107 b(Wh)l(en)65 b(scali)s(n)n(g)h(is)g(n)n(ee)l(d)-5 b(e)l(d,)1000 665 y FM(D)8 b(Y)g(L)g(P)64 b FP(make)o(s)59 b(a)g(l)n(ocal)g(c)l(o)-5 b(py)58 b(of)g(th)l(e)g(o)-7 b(r)s(ig)t(i)s(nal)58 b(c)l(o)l(ns)-5 b(trai)s(nt)58 b(sys)-5 b(te)n(m,)59 b(a)-6 b(p)e(plie)o(s)59 b(scali)s(n)n(g,)g(and)f (u)-7 b(s)m(e)o(s)996 865 y(th)l(e)53 b(scal)n(e)l(d)g(l)n(ocal)g(c)l (o)-5 b(py)52 b(as)h(th)l(e)g(o)-7 b(r)s(ig)t(i)s(nal)52 b(c)l(o)l(ns)-5 b(trai)s(nt)52 b(sys)-5 b(te)n(m.)352 1197 y Fd(degen)164 b FO(lpcontrol)97 b(antidegen)49 b FJ(boolean)k FO(;)996 1462 y FP(If)78 b(s)m(e)-7 b(t)77 b(to)g(fals)m(e,)87 b FM(D)8 b(Y)g(L)g(P)83 b FP(will)76 b(n)m(ot)g(u)-7 b(s)m(e)77 b(th)l(e)f(pe)l(rt)l(urba)-8 b(tio)l(n-bas)m(e)l(d)75 b(anti-d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)75 b(algo)-7 b(r)s(ithm)996 1662 y(d)i(e)o(sc)d(r)s(ibe)l(d)53 b(i)s(n)g(\2475.)65 b(T)8 b(h)l(e)53 b(d)-5 b(e)l(fa)d(u)l(lt)51 b(is)i(to)g(u)-7 b(s)m(e)53 b(pe)l(rt)l(urba)-8 b(tio)l(n-bas)m(e)l(d) 51 b(anti-d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)-17 b(.)140 1994 y Fd(degenlite)163 b FO(lpcontrol)97 b(degenlite)1655 2193 y FP([)p FO(pivotabort)p FP(|)p FO(pivot)p FP(|)p FO(alignobj)p FP(|)43 b FO(alignedge)p FP(|)p FO(perpobj)p FP(|)p FO(perpedge)p FP(])g FO(;)996 2459 y FP(T)8 b(his)59 b(o)-5 b(ptio)l(n)57 b(s)-8 b(pec)m(i\002e)o(s)59 b(th)l(e)g(tie-b)-5 b(r)q(eaki)s(n)n(g)58 b(s)-5 b(tra)d(te)j(g)8 b(y)58 b(u)-7 b(s)m(e)l(d)59 b(fo)-7 b(r)59 b(c)-7 b(h)n(oos)n(i)s(n)n(g)58 b(be)-7 b(tween)59 b(candida)-8 b(te)o(s)996 2658 y(with)75 b(eq)l(ual)h(d)-5 b(e)l(lt)s(as)76 b(wh)l(en)f(s)m(e)l(l)n(ec)-5 b(ti)s(n)n(g)75 b(th)l(e)g(l)n(ea)-7 b(vi)s(n)n(g)75 b(pr)s(i)s(mal)h(o)-7 b(r)76 b(d)-7 b(ual)76 b(v)r(ar)s(i)s(a)l(b)l(l)n (e,)82 b(as)76 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)996 2857 y(i)s(n)53 b(\2476.)65 b(T)8 b(h)l(e)53 b(o)-5 b(ptio)l(ns)51 b(ar)q(e:)996 3189 y(0)i(\()p FO(pivotabort)p FP(\))215 b(Br)q(eak)63 b(tie)o(s)h(u)-7 b(s)n(i)s(n)n(g)63 b(th)l(e)g(magnit)l (ud)-5 b(e)62 b(of)h(th)l(e)g(pivot)g(c)l(oe)l(\002)-49 b(\002c)m(ient,)65 b(and)e(a)l(bo)-7 b(rt)2467 3388 y(th)l(e)52 b(s)m(ear)q(c)-7 b(h)53 b(a)-8 b(t)53 b(th)l(e)f(\002rs)-5 b(t)53 b(bas)n(ic)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(whic)-7 b(h)51 b(g)t(ive)o(s)i(a)g(d)-5 b(e)l(lt)s(a)53 b(of)g(ze)l(r)q(o.)996 3654 y(1)g(\()p FO(pivot)p FP(\))715 b(\(d)-5 b(e)l(fa)d(u)l(lt\))79 b(Br)q(eak)h(tie)o(s)g(u)-7 b(s)n(i)s(n)n(g)80 b(th)l(e)f(magnit)l(ud) -5 b(e)79 b(of)h(th)l(e)g(pivot)f(c)l(oe)l(\002)-49 b(\002c)m(ient,) 2467 3853 y(scanni)s(n)n(g)51 b(all)i(bas)n(ic)g(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s.)996 4119 y(2)g(\()p FO(alignobj)p FP(\))415 b(Br)q(eak)64 b(tie)o(s)h(by)f(c)-7 b(h)n(oos)n(i)s(n)n(g)63 b(th)l(e)h(l)n(ea)-7 b(vi)s(n)n(g)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i (whic)-7 b(h)63 b(will)g(make)h(tight)2467 4318 y(th)l(e)41 b(hype)l(rplan)n(e)e(mos)-5 b(t)42 b(cl)n(os)m(e)l(ly)e(align)n(e)l(d)h (with)e(th)l(e)i(n)m(o)-7 b(r)5 b(mal)41 b(of)g(th)l(e)g(o)-8 b(bj)l(ec)j(tive)2467 4518 y(func)g(tio)l(n)51 b(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)52 b(th)l(e)h(n)m(o)-7 b(r)5 b(mal)51 b(mos)-5 b(t)53 b(n)n(early)g(lie)o(s)g(i)s(n)f(th)l(e)h (hype)l(rplan)n(e\).)996 4783 y(3)g(\()p FO(alignedge)p FP(\))315 b(Br)q(eak)64 b(tie)o(s)h(by)f(c)-7 b(h)n(oos)n(i)s(n)n(g)63 b(th)l(e)h(l)n(ea)-7 b(vi)s(n)n(g)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i (whic)-7 b(h)63 b(will)g(make)h(tight)2467 4982 y(th)l(e)73 b(hype)l(rplan)n(e)f(mos)-5 b(t)73 b(cl)n(os)m(e)l(ly)g(align)n(e)l(d)f (with)g(th)l(e)h(dir)q(ec)-5 b(tio)l(n)72 b(of)h(motio)l(n)2467 5182 y(s)-8 b(pec)m(i\002e)l(d)53 b(by)h(th)l(e)f(ente)l(r)s(i)s(n)n(g) g(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)53 b(th)l(e)h(e)l(dg)n(e)f(mos)-5 b(t)54 b(n)n(early)g(lie)o(s)g(i)s(n)2467 5381 y(th)l(e)e(hype)l(rplan)n(e\).) 996 5647 y(4)h(\()p FO(perpobj)p FP(\))515 b(Br)q(eak)64 b(tie)o(s)h(by)f(c)-7 b(h)n(oos)n(i)s(n)n(g)63 b(th)l(e)h(l)n(ea)-7 b(vi)s(n)n(g)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(whic)-7 b(h)63 b(will)g(make)h(tight)2467 5846 y(th)l(e)52 b(hype)l(rplan)n(e)f (mos)-5 b(t)52 b(n)n(early)g(pe)l(rpendicu)l(lar)f(to)h(th)l(e)g(n)m(o) -7 b(r)5 b(mal)52 b(of)g(th)l(e)g(o)-8 b(b-)2467 6045 y(j)l(ec)j(tive)59 b(func)-5 b(tio)l(n)58 b(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)59 b(th)l(e)g(hype)l(rplan)n(e)f(mos)-5 b(t)59 b(n)n(early)f(b)l(l)n(oc)-8 b(ks)59 b(motio)l(n)e(i)s(n)2467 6244 y(th)l(e)52 b(dir)q(ec)-5 b(tio)l(n)52 b(of)h(th)l(e)f(n)m(o)-7 b(r)5 b(mal)52 b(of)h(th)l(e)f(o)-8 b(bj)l(ec)j(tive\))996 6510 y(5)53 b(\()p FO(perpedge)p FP(\))415 b(Br)q(eak)64 b(tie)o(s)h(by)f(c)-7 b(h)n(oos)n(i)s(n)n(g)63 b(th)l(e)h(l)n(ea)-7 b(vi)s(n)n(g)63 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(whic)-7 b(h)63 b(will)g(make)h(tight)2467 6709 y(th)l(e)g(hype)l(rplan)n(e)g (mos)-5 b(t)65 b(n)n(early)f(pe)l(rpendicu)l(lar)g(to)h(th)l(e)f(dir)q (ec)-5 b(tio)l(n)64 b(of)h(mo-)2467 6909 y(tio)l(n)74 b(s)-8 b(pec)m(i\002e)l(d)74 b(by)g(th)l(e)h(ente)l(r)s(i)s(n)n(g)e(v)r (ar)s(i)s(a)l(b)l(l)n(e)j(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)79 b(th)l(e)c(hype)l(rplan)n(e)e(mos)-5 b(t)2467 7108 y(n)n(early)52 b(b)l(l)n(oc)-8 b(ks)53 b(motio)l(n)e(i)s(n)i(th)l (e)f(dir)q(ec)-5 b(tio)l(n)52 b(of)g(th)l(e)h(e)l(dg)n(e\).)0 7440 y Fd(degenpivlim)164 b FO(lpcontrol)96 b(degenpivs)49 b FJ(boolean)k FO(;)996 7706 y FP(1)42 b FF(\243)f FP(1)h FF(\243)f(\245)996 7971 y FP(L)s(i)s(m)s(its)55 b(th)l(e)f(n)n(umbe)l (r)g(of)h(c)l(o)l(ns)m(ecu)l(tive)e(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)54 b(pivots)g(whic)-7 b(h)53 b(ar)q(e)i(r)q(eq)l(uir)q(e)l(d)f(to)h(tr)s (igg)n(e)l(r)e(th)l(e)996 8170 y(pe)l(rt)l(urba)-8 b(tio)l(n-bas)m(e)l (d)79 b(anti-d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)80 b(algo)-7 b(r)s(ithm.)149 b(A)82 b(pe)l(rt)l(urbe)l(d)e(s)-8 b(u)h(bpr)q(o)f(b)l (l)n(e)n(m)79 b(is)i(fo)-7 b(r)5 b(me)l(d)996 8370 y(wh)l(en)57 b(th)l(e)g(n)n(umbe)l(r)g(of)h(c)l(o)l(ns)m(ecu)l(tive)f(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)57 b(pivots)h(e)-5 b(xc)f(ee)l(ds)58 b FJ(degenpivlim)p FP(.)81 b(T)8 b(h)l(e)58 b(curr)q(ent)996 8569 y(d)-5 b(e)l(fa)d(u)l(lt)52 b(of)h(1)g(is)g(ve)l(ry)f(aggr)q(e)o (s)-5 b(s)n(ive.)394 8901 y Fd(dpsel:)164 b(stra)q(t,)41 b(\003e)m(x,)f(allo)m(wnopiv)996 9167 y FO(lpcontrol)97 b(dualmultipiv)48 b FJ(integer)53 b FO(;)996 9432 y FP(T)8 b(h)l(e)l(r)q(e)53 b(ar)q(e)h(fo)-5 b(ur)53 b(d)-7 b(ual)53 b(pivoti)s(n)n(g)f(s)-5 b(tra)d(te)j(g)t(ie)o(s)53 b(a)n(cc)-6 b(e)o(s)h(s)n(ib)l(l)n(e)55 b(fr)q(o)n(m)f(th)l(e)f FO(dualmultipiv)c FP(c)l(o)n(mmand,)996 9632 y(s)-8 b(pec)m(i\002e)l(d)52 b(by)h(th)l(e)f(fo)-5 b(ll)n(owi)s(n)n(g)50 b(i)s(nte)-5 b(g)n(e)l(r)52 b(c)l(od)-5 b(e)o(s:)996 9964 y(0)282 b(s)-5 b(t)s(andar)q(d)53 b(d)-7 b(ual)52 b(pivoti)s(n)n(g)f(\()p FG(vid)p FP(.)i(\24713.5\))996 10229 y(1)282 b(g)n(en)n(e)l(ralis)m(e)l (d)58 b(d)-7 b(ual)58 b(pivoti)s(n)n(g)f(\()p FG(vid)p FP(.)i(\24713.6\);)i(pivot)d(c)-7 b(h)n(os)m(en)59 b(fo)-7 b(r)59 b(max)10 b(i)s(m)l(um)59 b(d)-7 b(ual)58 b(o)-8 b(bj)l(ec)j(tive)1381 10429 y(i)s(mpr)q(ove)n(ment)3771 11400 y(77)p eop end %%Page: 78 81 TeXDict begin 78 80 bop 996 466 a FP(2)282 b(g)n(en)n(e)l(ralis)m(e)l (d)58 b(d)-7 b(ual)58 b(pivoti)s(n)n(g;)j(pivot)e(c)-7 b(h)n(os)m(en)59 b(to)g(m)s(i)s(m)s(i)s(m)s(is)m(e)h(th)l(e)e(max)10 b(i)s(m)l(um)59 b(i)s(nfeas)n(ibility)1381 665 y(ove)l(r)53 b(pr)s(i)s(mal)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)996 926 y(3)282 b(g)n(en)n(e)l(ralis)m(e)l(d)63 b(d)-7 b(ual)64 b(pivoti)s(n)n(g;)k(pivot)c(c)-7 b(h)n(os)m(en)64 b(to)h(m)s(i)s(ni)s (m)s(is)m(e)f(th)l(e)g(max)10 b(i)s(m)l(um)64 b(i)s(nfeas)n(ibility) 1381 1125 y(ove)l(r)52 b(pr)s(i)s(mal)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s) h(o)l(nly)d(if)i(th)l(e)g(i)s(nfeas)n(ibility)f(can)g(be)h(r)q(e)l(d)-7 b(u)i(c)f(e)l(d;)52 b(oth)l(e)l(rwis)m(e)e(th)l(e)h(pivot)1381 1324 y(is)i(c)-7 b(h)n(os)m(en)53 b(fo)-7 b(r)53 b(max)10 b(i)s(m)l(um)52 b(d)-7 b(ual)52 b(o)-8 b(bj)l(ec)j(tive)53 b(i)s(mpr)q(ove)n(ment)996 1651 y(T)8 b(h)l(e)53 b(pivoti)s(n)n(g)e(s) -5 b(tra)d(te)j(g)8 b(y)52 b(curr)q(ently)g(i)s(n)g(u)-7 b(s)m(e)53 b(is)g(h)l(e)l(ld)f(i)s(n)h FJ(dpsel.str)m(at)p FP(.)996 1914 y(Two)48 b(a)-6 b(dditio)l(nal)47 b(v)r(al)n(u)l(e)o(s)i (ar)q(e)f(u)-7 b(s)m(e)l(d)49 b(to)f(c)l(o)l(ntr)q(o)-5 b(l)47 b(g)n(en)n(e)l(ralis)m(e)l(d)g(d)-7 b(ual)48 b(pivoti)s(n)n(g;)g (th)l(e)o(s)m(e)g(can)g(o)l(nly)f(be)996 2114 y(c)-7 b(han)n(g)n(e)l(d)74 b(und)-5 b(e)l(r)76 b(pr)q(ogram)f(c)l(o)l(ntr)q (o)-5 b(l.)134 b FJ(dpsel.\003ex)78 b FP(d)-5 b(e)l(fa)d(u)l(lts)75 b(to)h(tru)l(e,)82 b(all)n(owi)s(n)n(g)c FM(D)8 b(Y)g(L)g(P)82 b FP(to)76 b(move)996 2313 y(be)-7 b(tween)90 b(s)-5 b(tra)d(te)j(g)t(ie)o(s)91 b(1)f(and)g(3.)177 b(If)91 b(th)l(e)f(client)g(s)-8 b(pec)m(i\002e)o(s)90 b(a)h(pivoti)s(n)n(g)d (s)-5 b(tra)d(te)j(g)8 b(y)90 b(u)-7 b(s)n(i)s(n)n(g)90 b(th)l(e)996 2512 y FO(dualmultipiv)64 b FP(c)l(o)n(mmand,)71 b FJ(dpsel.\003ex)e FP(is)f(s)m(e)-7 b(t)68 b(to)g(fals)m(e.)111 b FJ(dpsel.allo)m(wnopiv)68 b FP(c)l(o)l(ntr)q(o)-5 b(ls)67 b(wh)l(e)-7 b(th)l(e)l(r)1000 2711 y FM(D)8 b(Y)g(L)g(P)65 b FP(will)59 b(c)l(o)l(ns)n(id)-5 b(e)l(r)59 b(a)g(g)n(en)n(e)l(ralis)m (e)l(d)f(d)-7 b(ual)59 b(`pivot')f(whic)-7 b(h)58 b(c)l(o)l(ns)n(is)-5 b(ts)59 b(of)g(a)h(s)m(eq)l(u)l(enc)-6 b(e)59 b(of)h(v)r(ar)s(i)s(a)l (b)l(l)n(e)996 2911 y(\003ips)i(with)n(o)-5 b(u)l(t)61 b(a)h(\002)s(nal)g(pivot.)94 b(Co)n(mp)-5 b(u)l(t)s(a)d(tio)l(nal)60 b(e)-5 b(xpe)l(r)s(ienc)f(e)62 b(says)h(tha)-8 b(t)61 b(this)h(is)g(ve)l(ry)g(pr)q(o)l(n)n(e)g(to)996 3110 y(cycli)s(n)n(g)51 b(and)i FJ(dpsel.allo)m(wnopiv)g FP(is)g(s)m(e)-7 b(t)53 b(to)g(fals)m(e)g(by)f(d)-5 b(e)l(fa)d(u)l(lt.)996 3373 y(T)8 b(h)l(e)44 b(d)-5 b(e)l(fa)d(u)l(lt)43 b(i)s(niti)s(al)h(s)m (e)-7 b(tti)s(n)n(g)43 b(fo)-7 b(r)44 b(th)l(e)g(d)-7 b(ual)43 b(pivoti)s(n)n(g)f(o)-5 b(ptio)l(ns)43 b(is)h FJ(dpsel)r FP(.)r FJ(str)m(at)34 b FP(=)h(1,)46 b FJ(dpsel)r FP(.)r FJ(\003ex)35 b FP(=)f FJ(tr)s(ue)p FP(,)996 3572 y(and)53 b FJ(dpsel)r FP(.)r FJ(allo)m(wnopiv)40 b FP(=)h FJ(f)-6 b(alse)p FP(.)212 3899 y Fd(dualadd)163 b FO(lpcontrol)97 b(dualacttype)48 b FJ(integer)53 b FO(;)996 4162 y FP(T)8 b(his)76 b(o)-5 b(ptio)l(n)74 b(c)l(o)l(ntr)q(o)-5 b(ls)75 b(th)l(e)g(amo)-5 b(unt)75 b(of)h(e)l(f)n(fo)-7 b(rt)76 b(tha)-8 b(t)79 b FM(D)8 b(Y)g(L)g(P)82 b FP(will)75 b(e)-5 b(xpend)75 b(a)-8 b(tte)n(mpti)s(n)n(g)73 b(to)j(a)-6 b(dd)996 4362 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)64 b(\(d)-7 b(ual)62 b(c)l(o)l(ns)-5 b(trai)s(nts\))62 b(to)h(bo)-5 b(und)61 b(a)j(c)l(o)l(ns)-5 b(trai)s(nt)61 b(sys)-5 b(te)n(m)63 b(whic)-7 b(h)62 b(is)h(d)-7 b(ual)62 b(un)m(bo)-5 b(und)g(e)l(d)996 4561 y(\()p FG(vid)p FP(.)53 b(\24715.2\).)1093 4888 y(0)166 b(V)-11 b(ar)s(i)s(a)l(b)l(l)n(e)53 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)51 b(is)i(n)m(ot)f(a)-8 b(tte)n(mpte)l(d.)1093 5148 y(1)166 b(Type)41 b(1)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(ar)q(e)f (a)n(c)-5 b(tiv)r(a)d(te)l(d.)61 b(T)8 b(h)l(e)o(s)m(e)41 b(ar)q(e)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(whic)-7 b(h)40 b(c)l(o)-5 b(u)l(ld)41 b(potenti)s(ally)f(bo)-5 b(und)1362 5348 y(th)l(e)65 b(d)-7 b(ual)65 b(pr)q(o)-8 b(b)l(l)n(e)n(m)64 b(and)h(whic)-7 b(h)65 b(will)f(be)i(d)-7 b(ual)65 b(feas)n(ib)l(l)n(e) h(if)g(a)n(c)-5 b(tiv)r(a)d(te)l(d)65 b(and)g(pla)n(c)-6 b(e)l(d)65 b(i)s(n)h(th)l(e)1362 5547 y(n)m(o)l(n)m(bas)n(ic)g (partitio)l(n.)111 b(Mu)l(ltipl)n(e)67 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o (s)i(of)f(this)g(type)g(can)g(be)g(a)n(c)-5 b(tiv)r(a)d(te)l(d)67 b(s)n(i)s(m)l(u)l(lt)s(an)n(e-)1362 5746 y(o)-5 b(u)e(sly)-17 b(.)1093 6007 y(2)166 b(Type)41 b(2)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h (will)f(be)g(a)n(c)-5 b(tiv)r(a)d(te)l(d)41 b(if)h(th)l(e)l(r)q(e)g(ar) q(e)h(n)m(o)e(type)h(1)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)63 b(Type)41 b(2)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)1362 6206 y(ar)q(e)58 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(whic)-7 b(h)57 b(wo)-5 b(u)l(ld)56 b(be)i(d)-7 b(ual)57 b(i)s(nfeas)n(ib)l(l)n (e)h(if)f(pla)n(c)-6 b(e)l(d)58 b(i)s(n)f(th)l(e)g(n)m(o)l(n)m(bas)n (ic)g(partitio)l(n,)1362 6405 y(b)-8 b(u)l(t)47 b(whic)-7 b(h)48 b(can)g(be)h(a)n(c)-5 b(tiv)r(a)d(te)l(d)48 b(and)g(i)s(mme)l (di)s(a)-8 b(te)l(ly)48 b(pivote)l(d)g(i)s(nto)h(th)l(e)f(bas)n(is)h (to)g(r)q(e)-5 b(gai)s(n)48 b(d)-7 b(ual)1362 6604 y(feas)n(ibility)-17 b(.)71 b(Only)54 b(o)l(n)n(e)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(of)e(this)h (type)f(can)h(be)g(a)n(c)-5 b(tiv)r(a)d(te)l(d)54 b(a)-8 b(t)55 b(a)g(ti)s(me,)h(s)n(o)e(this)h(l)n(eve)l(l)1362 6804 y(is)e(c)l(o)n(mp)-5 b(u)l(t)s(a)d(tio)l(nally)50 b(e)-5 b(xpens)n(ive.)1093 7064 y(3)166 b(\(d)-5 b(e)l(fa)d(u)l(lt\))62 b(Type)h(3)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(will)f(be)g(a)n(c)-5 b(tiv)r(a)d(te)l(d)63 b(if)h(th)l(e)l(r)q(e)e(ar)q(e)i(n)m(o)f(type)g (1)g(o)-7 b(r)64 b(type)f(2)h(v)r(ar)s(i-)1362 7263 y(a)l(b)l(l)n(e)o (s.)102 b(Type)64 b(3)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(ar)q(e)g(v)r (ar)s(i)s(a)l(b)l(l)n(e)o(s)h(whic)-7 b(h)64 b(can)g(be)h(a)n(c)-5 b(tiv)r(a)d(te)l(d)64 b(and)h(pla)n(c)-6 b(e)l(d)64 b(i)s(n)h(th)l(e) 1362 7463 y(n)m(o)l(n)m(bas)n(ic)51 b(partitio)l(n)g(with)h(a)h(bo)-5 b(und-to-bo)g(und)50 b(pivot.)996 7790 y(If)66 b(th)l(e)f(li)s(m)s(its) g(pla)n(c)-6 b(e)l(d)65 b(o)l(n)f(d)-7 b(ual)65 b(v)r(ar)s(i)s(a)l(b)l (l)n(e)h(a)n(c)-5 b(tiv)r(a)d(tio)l(n)63 b(do)i(n)m(ot)f(all)n(ow)h(th) l(e)g(d)-7 b(ual)64 b(to)h(be)h(bo)-5 b(und)g(e)l(d)1000 7989 y FM(D)8 b(Y)g(L)g(P)80 b FP(will)73 b(r)q(eve)l(rt)h(to)f(pr)s(i) s(mal)h(s)n(i)s(mpl)n(e)-5 b(x.)130 b(All)n(owi)s(n)n(g)71 b(u)-6 b(p)74 b(to)f(type)h(3)g(a)n(c)-5 b(tiv)r(a)d(tio)l(ns)72 b(by)h(d)-5 b(e)l(fa)d(u)l(lt)73 b(is)996 8188 y(s)n(o)n(mewha)-8 b(t)52 b(r)s(is)-6 b(ky;)52 b(li)s(m)s(iti)s(n)n(g)g(a)n(c)-5 b(tiv)r(a)d(tio)l(ns)51 b(to)i(type)f(1)h(wo)-5 b(u)l(ld)51 b(be)i(a)g(mo)-7 b(r)q(e)53 b(c)l(o)l(ns)m(e)l(rv)r(a)-8 b(tive)52 b(c)-7 b(h)n(oic)h(e.)408 8515 y Fd(f)n(actor)164 b FO(lpcontrol)97 b(factor)50 b FJ(integer)j FO(;)996 8778 y FP(1)42 b FF(\243)f FP(50)g FF(\243)h FP(100)996 9041 y(T)8 b(h)l(e)47 b(n)m(o)n(m)s(i)s(nal)f(i)s(nte)l(rv)r(al)g(fo)-7 b(r)47 b(r)q(e)l(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)45 b(th)l(e)i(bas)n (is,)h(i)s(n)f(te)l(r)5 b(ms)47 b(of)g(th)l(e)f(n)n(umbe)l(r)g(of)h (pivots)f(whic)-7 b(h)996 9241 y(a)n(c)i(t)l(ually)52 b(c)-7 b(han)n(g)n(e)51 b(th)l(e)h(bas)n(is.)996 9504 y(Pu)l(t)64 b(an)m(oth)l(e)l(r)e(way)-17 b(,)66 b FJ(f)-6 b(actor)63 b FP(li)s(m)s(its)h(th)l(e)g(tot)s(al)g(n)n(umbe)l(r)f(of)h (e)-7 b(t)s(a)65 b(ma)-8 b(tr)s(ic)i(e)o(s)65 b(i)s(n)e(th)l(e)h(m)l(u) l(ltiplica)-8 b(tive)996 9703 y(r)q(e)h(pr)q(e)o(s)m(ent)s(a)f(tio)l(n) 66 b(of)h(th)l(e)g(bas)n(is.)108 b(A)8 b(s)67 b(e)-7 b(t)s(a)68 b(ma)-8 b(tr)s(ic)i(e)o(s)68 b(a)n(ccum)l(u)l(la)-8 b(te,)69 b(th)l(e)e(wo)-7 b(rk)66 b(r)q(eq)l(uir)q(e)l(d)h(to)f(pe)l(r) 11 b(-)996 9902 y(fo)-7 b(r)5 b(m)64 b(m)l(u)l(ltiplica)-8 b(tio)l(n)60 b(by)j(th)l(e)g(bas)n(is)h(i)s(nve)l(rs)m(e)f(i)s(nc)-8 b(r)q(eas)m(e)o(s,)66 b(n)n(ume)l(r)s(ical)d(i)s(na)n(ccura)n(cy)f(i)s (nc)-8 b(r)q(eas)m(e)o(s,)996 10101 y(and)58 b(th)l(e)h(da)-8 b(t)s(a)59 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)58 b(gr)q(ows)g(\()p FG(vid)p FP(.)g(\24717)-29 b(.3\).)83 b(T)8 b(his)58 b(parame)-7 b(te)l(r)59 b(a)-8 b(tte)n(mpts)58 b(to)h(balanc)-6 b(e)58 b(th)l(e)o(s)m(e)996 10301 y(c)l(o)l(ns)n(id)-5 b(e)l(ra)d(tio)l(ns)52 b(agai)s(ns)-5 b(t)52 b(th)l(e)h(wo)-7 b(rk)52 b(r)q(eq)l(uir)q(e)l(d)h(to)g(r)q(e)l(fa)n(c)-5 b(to)e(r)53 b(th)l(e)f(bas)n(is.)71 b FM(D)8 b(Y)g(L)g(P)59 b FP(will)52 b(r)q(e)l(fa)n(c)-5 b(to)e(r)53 b(ear)11 b(-)996 10500 y(lie)l(r)53 b(if)g(it)f(s)-8 b(u)h(s)f(pec)j(ts)53 b(n)n(ume)l(r)s(ical)g(pr)q(o)-8 b(b)l(l)n(e)n(ms.)3771 11400 y(78)p eop end %%Page: 79 82 TeXDict begin 79 81 bop 996 466 a FP(T)8 b(h)l(e)61 b(u)-6 b(p)e(pe)l(r)61 b(li)s(m)s(it)h(is)g(s)n(oft;)69 b FM(D)8 b(Y)g(L)g(P)67 b FP(will)61 b(is)-5 b(s)d(u)l(e)61 b(a)h(war)5 b(ni)s(n)n(g)59 b(if)i(a)h(high)l(e)l(r)e(v)r(al)n(u)l(e)i(is)f(r)q(eq) l(u)l(e)o(s)-5 b(te)l(d,)64 b(b)-8 b(u)l(t)996 665 y(will)52 b(n)m(ot)g(enfo)-7 b(r)q(c)h(e)53 b(th)l(e)f(li)s(m)s(it.)232 997 y Fd(\002npurge)164 b FP(v)r(ars,)53 b(c)l(o)l(ns)996 1263 y FO(lpcontrol)97 b(final)g(purge)51 b Fb(pur)n(ge-spec)p FJ(-LIST)4270 1170 y Fa(,)4399 1263 y FO(;)996 1462 y Fb(pur)n(ge-spec)h FP(::)1992 1480 y(=)2144 1462 y([)h FO(variables)p FP(|)p FO(constraints)p FP(])45 b FJ(boolean)996 1728 y FP(Spec)m(i\002e)o(s)72 b(wh)l(e)-7 b(th)l(e)l(r)76 b FM(D)8 b(Y)g(L)g(P)78 b FP(s)-8 b(h)n(o)j(u)l(ld)71 b(pe)l(r)5 b(fo)-7 b(r)5 b(m)73 b(a)g(\002)s(nal)g(r)q(o)-5 b(und)71 b(of)i(c)l(o)l(ns)-5 b(trai)s(nt)71 b(and/)-12 b(o)-7 b(r)73 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)996 1927 y(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)67 b(wh)l(en)g(th)l(e)g(pr)q(o)-8 b(b)l(l)n(e)n(m)68 b(has)g(been)g(s)n(o)-5 b(lve)l(d)68 b(to)g(o)-5 b(pti)s(mality)-17 b(.)111 b(By)68 b(d)-5 b(e)l(fa)d(u)l(lt,)75 b FM(D)8 b(Y)g(L)g(P)74 b FP(will)996 2126 y(pe)l(r)5 b(fo)-7 b(r)5 b(m)56 b(a)g(\002)s(nal)f(r)q(o)-5 b(und)55 b(of)h(c)l(o)l(ns)-5 b(trai)s(nt)54 b(d)-5 b(ea)n(c)g(tiv)r(a) d(tio)l(n)54 b(and)h(a)h(\002)s(nal)g(r)q(o)-5 b(und)54 b(of)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(d)-5 b(ea)n(c)g(ti-)996 2326 y(v)r(a)d(tio)l(n)52 b(be)l(fo)-7 b(r)q(e)53 b(it)f(r)q(e)-7 b(t)l(ur)5 b(ns.)996 2591 y(T)j(his)66 b(a)-6 b(p)e(plica)g(tio)l(n)64 b(of)i(c)l(o)l(ns)-5 b(trai)s(nt)64 b(and/)-12 b(o)-7 b(r)66 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l (n)64 b(is)i FG(not)77 b FP(s)-8 b(u)i(p)e(pr)q(e)o(s)j(s)m(e)l(d)65 b(by)h(th)l(e)996 2791 y FJ(fullsys)53 b FP(o)-5 b(ptio)l(n.)132 3123 y Fd(f)m(or)o(cecold)163 b FO(lpcontrol)97 b(cold)51 b FJ(boolean)i FO(;)996 3388 y FP(Wh)l(en)58 b(s)m(e)-7 b(t)60 b(to)e(tru)l(e,)i(this)f(o)-5 b(ptio)l(n)57 b(will)h(fo)-7 b(r)q(c)h(e)63 b FM(D)8 b(Y)g(L)g(P)65 b FP(to)59 b(pe)l(r)5 b(fo)-7 b(r)5 b(m)59 b(a)g(c)l(o)-5 b(ld)58 b(s)-5 b(t)s(art.)84 b FJ(f)-6 b(or)m(cecold)59 b FP(do)n(m)s(i-)996 3588 y(na)-8 b(te)o(s)53 b FJ(f)-6 b(or)m(ce)m(w)l(ar)t(m)p FP(.)65 b(T)8 b(h)l(e)53 b(a)l(bs)m(enc)-6 b(e)52 b(of)h FJ(f)-6 b(or)m(cecold)53 b FP(and)f FJ(f)-6 b(or)m(ce)m(w)l(ar)t(m)53 b FP(all)n(ows)f(a)h(h)n(ot)g(s)-5 b(t)s(art.)56 3920 y Fd(f)m(or)o(ce)m(w)l(ar)r(m)164 b FO(lpcontrol)97 b(warm)51 b FJ(boolean)i FO(;)996 4185 y FP(Wh)l(en)i(s)m(e)-7 b(t)55 b(to)g FJ(tr)s(ue)p FP(,)g(this)g(o)-5 b(ptio)l(n)54 b(will)g(fo)-7 b(r)q(c)h(e)59 b FM(D)8 b(Y)g(L)g(P)61 b FP(to)55 b(pe)l(r)5 b(fo)-7 b(r)5 b(m)55 b(a)g(war)5 b(m)55 b(s)-5 b(t)s(art.)73 b(T)8 b(h)l(e)54 b(a)l(bs)m(enc)-6 b(e)55 b(of)996 4385 y FJ(f)-6 b(or)m(cecold)53 b FP(and)f FJ(f)-6 b(or)m(ce)m(w)l(ar)t(m)53 b FP(all)n(ows)f(a)h(h)n(ot)g(s)-5 b(t)s(art.)409 4717 y Fd(fullsys)164 b FO(lpcontrol)97 b(fullsys)50 b FJ(boolean)j FO(;)996 4982 y FP(Wh)l(en)j(s)m(e)-7 b(t)56 b(to)h(tru)l(e,)f FJ(fullsys)g FP(fo)-7 b(r)q(c)h(e)o(s)58 b(th)l(e)d(u)-7 b(s)m(e)57 b(of)f(th)l(e)g(fu)l(ll)f(c)l(o)l(ns)-5 b(trai)s(nt)55 b(sys)-5 b(te)n(m)56 b(a)-8 b(t)56 b(all)g(ti)s(me)o(s.) 80 b FM(D)8 b(Y)g(L)g(P)996 5182 y FP(will)52 b(l)n(oa)-6 b(d)54 b(th)l(e)e(entir)q(e)h(c)l(o)l(ns)-5 b(trai)s(nt)52 b(sys)-5 b(te)n(m)53 b(a)-8 b(t)53 b(s)-5 b(t)s(art)l(u)f(p)53 b(and)g(n)m(o)f(c)l(o)l(ns)-5 b(trai)s(nt)52 b(o)-7 b(r)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(a)n(c)-5 b(tiv)r(a-)996 5381 y(tio)l(n)52 b(o)-7 b(r)53 b(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)51 b(will)h(be)h(pe)l(r)5 b(fo)-7 b(r)5 b(me)l(d.)996 5647 y(In)58 b(th)l(e)e(c)l(o)l(nte)-5 b(xt)57 b(of)g(a)h(b)-5 b(ranc)e(h-and-bo)i(und)55 b(MIP)j(c)l(od)-5 b(e,)58 b(wh)l(e)l(r)q(e)e(th)l(e)h(b)-8 b(u)l(lk)56 b(of)i(th)l(e)f(L)s(Ps)g (ar)q(e)h(r)q(eo)-5 b(p-)996 5846 y(ti)s(m)s(isa)d(tio)l(ns)66 b(fr)q(o)n(m)g(a)h(kn)m(own)d(bas)n(is,)70 b(th)l(e)c(u)-7 b(s)m(e)66 b(of)g(dy)7 b(nam)s(ic)65 b(s)n(i)s(mpl)n(e)-5 b(x)67 b(can)f(sa)-7 b(ve)67 b(c)l(o)l(ns)n(id)-5 b(e)l(ra)l(b)l(l)n(e) 996 6045 y(wo)e(rk.)136 b(T)r(o)77 b(s)n(o)-5 b(lve)76 b(an)h(L)s(P)f(o)l(nc)-6 b(e)76 b(fr)q(o)n(m)h(sc)-8 b(ra)g(tc)h(h,)82 b(o)-7 b(r)77 b(to)g(s)n(o)-5 b(lve)76 b(th)l(e)g(i)s(niti)s(al)g(L)s(P)h(r)q(e)l(laxa)-8 b(tio)l(n)75 b(i)s(n)h(a)996 6244 y(b)-5 b(ranc)e(h-and-bo)i(und)69 b(c)l(o)l(nte)-5 b(xt,)75 b(u)-7 b(s)m(e)71 b(of)f(th)l(e)h(fu)l(ll)f (sys)-5 b(te)n(m)70 b(is)h(u)-7 b(s)f(ually)70 b(\()r(b)-8 b(u)l(t)70 b(n)m(ot)g(always\))g(mo)-7 b(r)q(e)996 6444 y(e)l(\002)-49 b(\002c)m(ient.)354 6776 y Fd(gr)n(oom)165 b FO(lpcontrol)97 b(groom)51 b FP([)p FO(silent)p FP(|)p FO(warn)p FP(|)p FO(abort)p FP(])46 b FO(;)996 7041 y FP(Spec)m(i\002e)o(s)67 b(th)l(e)f(a)n(c)-5 b(tio)l(n)66 b(t)s(aken)h(wh)l(en)i FM(D)8 b(Y)g(L)g(P)73 b FP(d)-5 b(e)e(tec)i(ts)67 b(a)h(n)m(o)l(ntr)s(ivi)s(al)d(c)-7 b(han)n(g)n(e)65 b(i)s(n)i(th)l(e)g(s)-5 b(t)s(a)d(t)l(u)h(s)67 b(of)g(a)996 7241 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)53 b(wh)l(en)f(it)g(pe)l (r)5 b(fo)-7 b(r)5 b(ms)53 b(a)h(c)-7 b(h)l(ec)f(k)52 b(fo)-5 b(ll)n(owi)s(n)n(g)51 b(r)q(e)l(fa)n(c)-5 b(to)e(r)s(i)s(n)n (g.)64 b(T)8 b(h)l(e)52 b(pos)-5 b(s)n(ib)l(l)n(e)53 b(v)r(al)n(u)l(e)o(s)h(ar)q(e)996 7573 y(0)f(\()p FO(silent)p FP(\))216 b(Do)53 b(n)m(othi)s(n)n(g.)996 7838 y(1)g(\()p FO(warn)p FP(\))217 b(\(d)-5 b(e)l(fa)d(u)l(lt\))52 b(Is)-5 b(s)d(u)l(e)53 b(a)g(war)5 b(ni)s(n)n(g)50 b(me)o(s)-5 b(sag)n(e.)996 8104 y(2)53 b(\()p FO(abort)p FP(\))217 b(Is)-5 b(s)d(u)l(e)53 b(an)f(e)l(rr)q(o)-7 b(r)53 b(me)o(s)-5 b(sag)n(e)53 b(and)g(fo)-7 b(r)q(c)h(e)53 b(an)g(a)l(bo)-7 b(rt.)996 8436 y(T)8 b(h)l(e)41 b(wo)-7 b(rki)s(n)n(g)39 b(as)-5 b(s)d(umptio)l(n)40 b(is)h(tha)-8 b(t)41 b(r)q(e)l(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)40 b(th)l(e)g(bas)n(is)i(r)q(e)n(move)l(d)f(a)n (ccum)l(u)l(la)-8 b(te)l(d)39 b(n)n(ume)l(r)s(ical)996 8635 y(i)s(na)n(ccura)n(cy)-17 b(,)52 b(ca)-8 b(u)h(s)n(i)s(n)n(g)52 b(th)l(e)h(c)-7 b(han)n(g)n(e)51 b(i)s(n)h(th)l(e)h(s)-5 b(t)s(a)d(t)l(u)h(s)53 b(of)g(th)l(e)f(v)r(ar)s(i)s(a)l(b)l(l)n(e.)265 8967 y Fd(her)n(oics:)163 b(d2p,)41 b(p2d)996 9233 y FP(T)8 b(h)l(e)o(s)m(e)57 b(parame)-7 b(te)l(rs)57 b(c)l(o)l(ntr)q(o)-5 b(l)55 b(wh)l(e)-7 b(th)l(e)l(r)59 b FM(D)8 b(Y)g(L)g(P)62 b FP(will)56 b(a)-8 b(tte)n(mpt)55 b(di\002)-49 b(\002cu)l(lt)56 b(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(ns)54 b(wh)l(en)h(try-)996 9432 y(i)s(n)n(g)d(to)h(fo)-7 b(r)q(c)h(e)53 b(a)g(trans)n(itio)l(n)f (to)g(d)-7 b(ual)52 b(o)-7 b(r)53 b(pr)s(i)s(mal)g(feas)n(ibility)-17 b(.)996 9765 y FJ(d2p)219 b FP(If)82 b(tru)l(e,)92 b FM(D)8 b(Y)g(L)g(P)87 b FP(will)80 b(a)-8 b(tte)n(mpt)80 b(to)h(d)-5 b(ea)n(c)g(tiv)r(a)d(te)81 b(pr)s(i)s(mal)g(i)s(nfeas)n(ib) l(l)n(e)h(bas)n(ic)g(ar)q(c)-7 b(hitec)i(t)l(ural)1381 9964 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)54 b(wh)l(en)d(tryi)s(n)n(g)g(to) i(fo)-7 b(r)q(c)h(e)53 b(pr)s(i)s(mal)g(feas)n(ibility)-17 b(.)996 10229 y FJ(p2d)219 b FP(If)51 b(tru)l(e,)k FM(D)8 b(Y)g(L)g(P)57 b FP(will)49 b(a)-8 b(tte)n(mpt)50 b(to)h(d)-5 b(ea)n(c)g(tiv)r(a)d(te)50 b(tight)f(c)l(o)l(ns)-5 b(trai)s(nts)50 b(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)50 b(n)m(o)l(n)m(bas)n(ic)f(l)n (og)t(icals\))1381 10429 y(wh)l(en)j(tryi)s(n)n(g)e(to)j(fo)-7 b(r)q(c)h(e)54 b(d)-7 b(ual)52 b(feas)n(ibility)-17 b(.)3771 11400 y(79)p eop end %%Page: 80 83 TeXDict begin 80 82 bop 996 466 a FP(Both)71 b(of)h(th)l(e)o(s)m(e)f(d) -5 b(e)l(fa)d(u)l(lt)71 b(to)g(fals)m(e.)123 b(Co)n(mp)-5 b(u)l(t)s(a)d(tio)l(nal)69 b(e)-5 b(xpe)l(r)s(ienc)f(e)72 b(says)g(tha)-8 b(t)71 b(s)m(e)-7 b(tti)s(n)n(g)71 b(th)l(e)n(m)f(to) 996 665 y(tru)l(e)53 b(is)g(n)m(ot)f(u)-7 b(s)m(e)l(fu)l(l.)64 b(T)8 b(h)l(ey)52 b(can)h(be)g(a)-6 b(dj)f(u)g(s)i(te)l(d)53 b(o)l(nly)f(und)-5 b(e)l(r)52 b(pr)q(ogram)g(c)l(o)l(ntr)q(o)-5 b(l.)352 989 y Fd(idlelim)165 b FO(lpcontrol)97 b(idle)51 b FJ(integer)h FO(;)996 1250 y FP(0)42 b FF(\243)f FP(1000)g FF(\243)h FP(2)32 b FF(*)g FP(\()p FJ(concnt)f FP(+)h FJ(ar)m(chvcnt)o FP(\))42 b FF(\243)f FP(50000)g FF(\243)g FP(2)4515 1190 y Fh(sizeof)p FA(\()p Fh(int)p FA(\))o(\0143)996 1512 y FP(T)8 b(h)l(e)67 b(li)s(m)s(it)h(o)l(n)e(th)l(e)h(n)n(umbe)l(r) g(of)g(pivots)g(all)n(owe)l(d)g(with)n(o)-5 b(u)l(t)65 b(an)i(i)s(mpr)q(ove)n(ment)g(i)s(n)g(th)l(e)g(v)r(al)n(u)l(e)g(of)996 1711 y(th)l(e)53 b(o)-8 b(bj)l(ec)j(tive)52 b(func)-5 b(tio)l(n.)996 1972 y(A)66 b(pivot)f(i)s(n)h(whic)-7 b(h)64 b(th)l(e)h(c)-7 b(han)n(g)n(e)65 b(i)s(n)g(th)l(e)g(o)-8 b(bj)l(ec)j(tive)66 b(func)-5 b(tio)l(n)64 b(v)r(al)n(u)l(e)h(is)h(l)n (e)o(s)-5 b(s)67 b(than)e FJ(dy_tols)s(.dchk)996 2172 y FP(is)80 b(d)-5 b(e)l(\002)s(n)n(e)l(d)79 b(to)h(be)f(an)g(idl)n(e)h (pivot.)145 b(T)r(oo)80 b(many)e(c)l(o)l(ns)m(ecu)l(tive)h(idl)n(e)h (pivots)f(ar)q(e)h(t)s(aken)f(as)h(an)996 2371 y(i)s(ndica)-8 b(tio)l(n)45 b(tha)-8 b(t)46 b(th)l(e)g(L)s(P)g(has)g(s)-5 b(t)s(all)n(e)l(d)47 b(and)f(may)g(be)h(cycli)s(n)n(g.)62 b(If)46 b(th)l(e)g(n)n(umbe)l(r)g(of)g(pivots)h(with)n(o)-5 b(u)l(t)996 2570 y(c)e(han)n(g)n(e)60 b(i)s(n)h(th)l(e)g(o)-8 b(bj)l(ec)j(tive)61 b(e)-5 b(xc)f(ee)l(ds)62 b FJ(idlelim)p FP(,)68 b FM(D)8 b(Y)g(L)g(P)67 b FP(a)l(bo)-7 b(rts)61 b(and)g(r)q(e)-7 b(t)l(ur)5 b(ns)61 b FJ(lpST)-7 b(ALLED)p FP(.)62 b(L)5 b(e)l(ft)62 b(to)f(its)996 2769 y(own)45 b(d)-5 b(evic)f(e)o(s,)53 b FM(D)8 b(Y)g(L)g(P)52 b FP(will)46 b(enfo)-7 b(r)q(c)h(e)47 b(th)l(e)f(i)s(nn)n(e)l(r)f(li)s(m)s(its)i(of) g(1000)36 b FF(\243)h FJ(idlelim)g FF(\243)g FP(50000;)47 b(th)l(e)f(client)g(can)996 2969 y(e)-5 b(xplic)m(itly)52 b(s)-8 b(pec)m(ify)51 b(any)i(v)r(al)n(u)l(e)f(withi)s(n)f(th)l(e)i(o) -5 b(u)l(te)l(r)52 b(li)s(m)s(its.)259 3292 y Fd(initbasis)164 b FO(lpcontrol)97 b(coldbasis)49 b FP([)p FO(slack)p FP(|)p FO(logical)p FP(|)p FO(architectura)o(l)p FP(])44 b FO(;)996 3554 y FP(T)8 b(his)63 b(parame)-7 b(te)l(r)63 b(s)-8 b(pec)m(i\002e)o(s)63 b(th)l(e)g(type)g(of)g(i)s(niti)s(al)f (bas)n(is)i(c)l(o)l(ns)-5 b(tru)g(c)g(te)l(d)62 b(fo)-7 b(r)63 b(a)g(c)l(o)-5 b(ld)63 b(s)-5 b(t)s(art,)66 b(as)e(d)-5 b(e-)996 3753 y(sc)d(r)s(ibe)l(d)53 b(i)s(n)f(\24711.1.)996 4076 y(1)h(\()p FO(logical)p FP(\))814 b(\(d)-5 b(e)l(fa)d(u)l(lt\))78 b(Pr)q(e)l(fe)l(r)h(sla)n(c)-8 b(k,)85 b(th)l(en)78 b(arti\002c)m(i)s (al,)85 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)80 b(fo)-7 b(r)80 b(bas)n(ic)g(v)r(ar)s(i-)2766 4276 y(a)l(b)l(l)n(e)o(s.)66 b(Ar)q(c)-7 b(hitec)i(t)l(ural)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h (will)f(n)m(ot)g(be)h(u)-7 b(s)m(e)l(d.)996 4533 y(1)53 b(\()p FO(slack)p FP(\))1014 b(Pr)q(e)l(fe)l(r)73 b(sla)n(c)-8 b(k,)78 b(th)l(en)73 b(ar)q(c)-7 b(hitec)i(t)l(ural,)78 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)d(fo)-7 b(r)73 b(bas)n(ic)h(v)r(ar)s (i)s(a)l(b)l(l)n(e)o(s.)2766 4732 y(Arti\002c)m(i)s(al)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(will)f(be)h(u)-7 b(s)m(e)l(d)53 b(if)g(a)l(bs)n(o)-5 b(l)n(u)l(te)l(ly)51 b(n)n(ec)-6 b(e)o(s)h(sary)-17 b(.)996 4989 y(2)53 b(\()p FO(architectural)p FP(\))214 b(Pr)q(e)l(fe)l(r)73 b(ar)q(c)-7 b(hitec)i(t)l(ural,)78 b(th)l(en)73 b(sla)n(c)-8 b(k,)78 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)d (fo)-7 b(r)73 b(bas)n(ic)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)2766 5188 y(Arti\002c)m(i)s(al)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(will)f (be)h(u)-7 b(s)m(e)l(d)53 b(if)g(a)l(bs)n(o)-5 b(l)n(u)l(te)l(ly)51 b(n)n(ec)-6 b(e)o(s)h(sary)-17 b(.)235 5512 y Fd(initcons:)164 b(frac,)41 b(i1lopen,)f(i1l,)h(i1uopen,)e(i1u,)i(i2lopen,)f(i2l,)h (i2uopen,)e(i2u)996 5773 y FO(lpcontrol)97 b(load)51 b FP([)p Fb(load-fr)m(action)p FP(])h Fb(inter)6 b(v)l(al)p FJ(-LIST)4358 5680 y Fa(,)4487 5773 y FO(;)996 5973 y Fb(load-fr)m(action)52 b FP(::)2094 5991 y(=)2247 5973 y FJ(\003oat)996 6172 y Fb(inter)6 b(v)l(al)52 b FP(::)1685 6190 y(=)1838 6172 y Fb(open-delim)h(ub)g(lb)f(close-delim)996 6371 y(ub)h FP(::)1348 6389 y(=)1501 6371 y FJ(\003oat)996 6570 y Fb(lb)g FP(::)1287 6588 y(=)1440 6570 y FJ(\003oat)996 6770 y Fb(open-delim)g FP(::)1992 6788 y(=)2145 6770 y FO(\()g FP(|)f FO([)996 6969 y Fb(close-delim)h FP(::)1984 6987 y(=)2136 6969 y FO(\))g FP(|)g FO(])996 7230 y FP(T)8 b(h)l(e)o(s)m(e)77 b(parame)-7 b(te)l(rs)78 b(c)l(o)l(ntr)q(o)-5 b(l)76 b(th)l(e)g(l)n(oa)-6 b(di)s(n)n(g)76 b(of)h(a)h(parti)s(al)f(c)l (o)l(ns)-5 b(trai)s(nt)76 b(sys)-5 b(te)n(m)76 b(d)-7 b(ur)s(i)s(n)n(g)75 b(a)j(c)l(o)-5 b(ld)996 7430 y(s)g(t)s(art.)152 b(A)8 b(s)81 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)81 b(i)s(n)g(\24711.1,)88 b(c)l(o)l(ns)-5 b(trai)s(nts)81 b(ar)q(e)g(ranke)l(d)g(by)g(th)l(e)f (an)n(gl)n(e)h(fo)-7 b(r)5 b(me)l(d)81 b(by)g(th)l(e)996 7629 y(c)l(o)l(ns)-5 b(trai)s(nt)73 b(n)m(o)-7 b(r)5 b(mal)73 b(and)g(th)l(e)g(o)-8 b(bj)l(ec)j(tive)73 b(n)m(o)-7 b(r)5 b(mal,)78 b(and)73 b(a)h(s)-8 b(pec)m(i\002e)l(d)73 b(fra)n(c)-5 b(tio)l(n)72 b(of)i(o)l(n)n(e)f(o)-7 b(r)74 b(two)996 7828 y(an)n(g)n(u)l(lar)52 b(i)s(nte)l(rv)r(als)g(is)h(l)n (oa)-6 b(d)h(e)l(d.)996 8089 y(T)8 b(h)l(e)48 b(parame)-7 b(te)l(r)49 b FJ(fr)m(ac)f FP(s)-8 b(pec)m(i\002e)o(s)48 b(wha)-8 b(t)47 b(fra)n(c)-5 b(tio)l(n)47 b(of)h(th)l(e)g(i)s(n)n(eq)l (ualitie)o(s)g(i)s(n)g(th)l(e)g(s)-8 b(pec)m(i\002e)l(d)48 b(i)s(nte)l(rv)r(als)996 8289 y(will)57 b(be)g(l)n(oa)-6 b(d)h(e)l(d.)79 b(T)8 b(h)l(e)58 b(parame)-7 b(te)l(rs)58 b FJ(i1l)f FP(and)g FJ(i1u)g FP(s)-8 b(pec)m(ify)56 b(th)l(e)h(u)-6 b(p)e(pe)l(r)57 b(and)g(l)n(owe)l(r)g(bo)-5 b(unds)56 b(of)h(o)l(n)n(e)996 8488 y(i)s(nte)l(rv)r(al.)101 b(If)65 b FJ(i1lopen)f FP(is)h(tru)l(e,)i(th)l(e)e(l)n(owe)l(r)f(bo)-5 b(undary)63 b(is)h(o)-5 b(pen;)70 b(if)65 b FJ(i1uopen)f FP(is)h(tru)l(e,)j(th)l(e)c(u)-6 b(p)e(pe)l(r)996 8687 y(bo)j(undary)51 b(is)j(o)-5 b(pen.)65 b(T)8 b(h)l(e)52 b(parame)-7 b(te)l(rs)54 b FJ(i2l)p FP(,)f FJ(i2u)p FP(,)f FJ(i2lopen)p FP(,)h(and)g FJ(i2uopen)f FP(can)h(be)g(u)-7 b(s)m(e)l(d)53 b(to)g(s)-8 b(pec)m(ify)996 8886 y(an)53 b(o)-5 b(ptio)l(nal)51 b(s)m(ec)l(o)l(nd)h(i)s(nte)l(rv)r(al.)996 9148 y(A)f(few)g(e)-5 b(xampl)n(e)o(s)52 b(will)d(make)j(th)l(e)e(u)-7 b(sag)n(e)51 b(cl)n(ear)-10 b(.)65 b(By)50 b(d)-5 b(e)l(fa)d(u)l(lt,)55 b FM(D)8 b(Y)g(L)g(P)57 b FP(l)n(oa)-6 b(ds)51 b(50\045)g(of)g(all)g(i) s(n)n(eq)l(uali-)996 9347 y(tie)o(s,)58 b(with)c(th)l(e)i(e)-5 b(xc)f(e)f(ptio)l(n)56 b(of)g(i)s(n)n(eq)l(ualitie)o(s)g(whic)-7 b(h)55 b(fo)-7 b(r)5 b(m)56 b(an)g(an)n(gl)n(e)f(of)h(90)6219 9283 y Fh(o)6343 9347 y FP(with)f(th)l(e)h(o)-8 b(bj)l(ec)j(tive.)996 9546 y(T)8 b(his)53 b(is)g(s)-8 b(pec)m(i\002e)l(d)52 b(as)996 9924 y FO(lpcontrol)97 b(load)h(.5)h([180)f(90\))g(\(90)h(0])g (;)996 10301 y FP(T)r(o)79 b(l)n(oa)-6 b(d)79 b(75\045)f(of)h(th)l(e)f (i)s(n)n(eq)l(ualitie)o(s)g(with)f(an)n(gl)n(e)o(s)h(be)-7 b(tween)78 b(100)5752 10237 y Fh(o)5899 10301 y FP(and)g(80)6492 10237 y Fh(o)6560 10301 y FP(,)85 b(i)s(ncl)n(u)-7 b(s)n(ive,)86 b(th)l(e)996 10500 y(s)-8 b(pec)m(i\002ca)g(tio)l(n)51 b(wo)-5 b(u)l(ld)52 b(be)3771 11400 y(80)p eop end %%Page: 81 84 TeXDict begin 81 83 bop 996 466 a FO(lpcontrol)97 b(load)h(.75)g([100)g (80])h(;)996 865 y FP(L)5 b(oa)-6 b(di)s(n)n(g)52 b(th)l(e)g(c)l(o)n (mpl)n(e)-7 b(te)54 b(c)l(o)l(ns)-5 b(trai)s(nt)52 b(sys)-5 b(te)n(m)52 b(with)g(th)l(e)g(s)-8 b(pec)m(i\002ca)g(tio)l(n)996 1263 y FO(lpcontrol)97 b(load)h(1.0)g([180)g(0])h(;)996 1662 y FP(is)51 b FG(not)62 b FP(eq)l(uiv)r(al)n(ent)51 b(to)g(as)-6 b(ki)s(n)n(g)53 b FM(D)8 b(Y)g(L)g(P)57 b FP(to)51 b(always)f(u)-7 b(s)m(e)51 b(th)l(e)f(fu)l(ll)h(c)l(o)l(ns) -5 b(trai)s(nt)49 b(sys)-5 b(te)n(m)51 b(\()p FG(cf)p FP(.)f FJ(fullsys)p FP(\).)65 b(It)996 1861 y(will)55 b(l)n(ook)g(pr)q(e)-7 b(tty)56 b(m)l(u)-5 b(c)e(h)55 b(th)l(e)g(same)h(fr)q(o)n(m)g(th)l(e)f(o)-5 b(u)l(ts)n(id)g(e,)56 b(b)-8 b(u)l(t)59 b FM(D)8 b(Y)g(L)g(P)62 b FP(will)54 b(s)-8 b(pend)55 b(ti)s(me)h(i)s(nte)l(r)5 b(nally)996 2060 y(pe)l(r)g(fo)-7 b(r)5 b(m)s(i)s(n)n(g)52 b(scans)h(r)q(e)l(la)-8 b(te)l(d)52 b(to)h(c)l(o)l(ns)-5 b(trai)s(nt)52 b(and)g(v)r(ar)s(i)s(a) l(b)l(l)n(e)h(a)n(c)-5 b(tiv)r(a)d(tio)l(n)51 b(and)i(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n.)391 2392 y Fd(iter)s(lim)165 b FO(lpcontrol)97 b(iters)51 b FJ(integer)h FO(;)996 2658 y FP(0)42 b FF(\243)f FP(10000)g FF(\243)g FP(5)32 b FF(*)h FP(\()p FJ(concnt)e FP(+)h FJ(ar)m(chvcnt)o FP(\))41 b FF(\243)h FP(100000)e FF(\243)i FP(2)4721 2598 y Fh(sizeof)p FA(\()p Fh(int)p FA(\))o(\0143)996 2923 y FP(T)8 b(h)l(e)67 b(pivot)f(li)s(m)s(it)h(fo)-7 b(r)68 b(ea)n(c)-7 b(h)66 b(occurr)q(enc)-6 b(e)67 b(of)g(a)g(s)n(i)s (mpl)n(e)-5 b(x)68 b(p)-6 b(has)m(e)66 b(\(pr)s(i)s(mal)h(p)-6 b(has)m(e)o(s)67 b(I)h(and)e(II)i(and)996 3123 y(d)-7 b(ual)59 b(p)-6 b(has)m(e)58 b(II\).)i(T)8 b(h)l(e)59 b(ove)l(rall)g(pivot)g(li)s(m)s(it,)i(cum)l(u)l(la)-8 b(tive)58 b(ove)l(r)h(all)g(occurr)q(enc)-6 b(e)o(s)60 b(of)f(all)g(p)-6 b(has)m(e)o(s,)996 3322 y(is)73 b(3)37 b FF(*)h FJ(iter)s(lim)p FP(.)124 b(If)73 b(eith)l(e)l(r)f(th)l(e)f(pe) l(r)i(p)-6 b(has)m(e)72 b(o)-7 b(r)72 b(tot)s(al)h(li)s(m)s(it)f(is)h (e)-5 b(xc)f(ee)l(d)h(e)l(d,)81 b FM(D)8 b(Y)g(L)g(P)78 b FP(te)l(r)5 b(m)s(i)s(na)-8 b(te)o(s)73 b(th)l(e)996 3521 y(pr)q(o)-8 b(b)l(l)n(e)n(m)77 b(and)h(r)q(e)-7 b(t)l(ur)5 b(ns)77 b FJ(lpITERLIM)p FP(.)g(L)5 b(e)l(ft)79 b(to)f(its)g(own)e(d)-5 b(evic)f(e)o(s,)89 b FM(D)8 b(Y)g(L)g(P)84 b FP(will)77 b(enfo)-7 b(r)q(c)h(e)78 b(th)l(e)g(i)s(nn)n(e)l(r)996 3721 y(li)s(m)s(its)48 b(of)f(10000)36 b FF(\243)h FJ(iter)s(lim)g FF(\243)h FP(100000;)48 b(th)l(e)e(client)h(can)g(e)-5 b(xplic)m(itly)46 b(s)-8 b(pec)m(ify)46 b(any)g(v)r(al)n(u)l(e)h(withi) s(n)f(th)l(e)996 3920 y(o)-5 b(u)l(te)l(r)53 b(li)s(m)s(its.)402 4252 y Fd(pa)q(tch)164 b FO(lpcontrol)97 b(patch)51 b FJ(boolean)i FO(;)996 4518 y FP(If)i(s)m(e)-7 b(t)56 b(to)e(fals)m(e,)60 b FM(D)8 b(Y)g(L)g(P)60 b FP(is)55 b(fo)-7 b(rbidd)i(en)54 b(fr)q(o)n(m)h(pa)-8 b(tc)h(hi)s(n)n(g)53 b(a)i(s)n(i)s(n)n(g)n(u)l(lar)f(bas)n(is.)72 b(By)54 b(d)-5 b(e)l(fa)d(u)l(lt,)59 b FM(D)8 b(Y)g(L)g(P)60 b FP(will)996 4717 y(pa)-8 b(tc)h(h)53 b(a)g(s)n(i)s(n)n(g)n(u)l(lar)f (bas)n(is)h(and)f(kee)-7 b(p)54 b(goi)s(n)n(g.)63 b(Y)-9 b(o)k(u)52 b(r)q(eally)h(do)l(n't)e(want)h(to)g(s)m(e)-7 b(t)54 b(this)e(to)h(fals)m(e.)436 5049 y Fd(ppsel)164 b FO(lpcontrol)97 b(primmultipiv)48 b FJ(integer)53 b FO(;)996 5315 y FP(T)8 b(h)l(e)l(r)q(e)85 b(ar)q(e)g(two)f(pr)s(i)s (mal)g(pivoti)s(n)n(g)f(s)-5 b(tra)d(te)j(g)t(ie)o(s)85 b(a)n(cc)-6 b(e)o(s)h(s)n(ib)l(l)n(e)86 b(fr)q(o)n(m)f(th)l(e)f FO(primmultipiv)c FP(c)l(o)n(m-)996 5514 y(mand,)52 b(s)-8 b(pec)m(i\002e)l(d)53 b(by)f(th)l(e)g(fo)-5 b(ll)n(owi)s(n)n(g)51 b(i)s(nte)-5 b(g)n(e)l(r)51 b(c)l(od)-5 b(e)o(s:)996 5846 y(0)282 b(s)-5 b(t)s(andar)q(d)53 b(pr)s(i)s(mal)g(pivoti)s(n)n(g) e(\()p FG(vid)p FP(.)i(\24714.6\))996 6112 y(1)282 b(\(d)-5 b(e)l(fa)d(u)l(lt\))52 b(e)-5 b(xtend)g(e)l(d)52 b(pr)s(i)s(mal)h (pivoti)s(n)n(g)e(\()p FG(vid)p FP(.)i(\24714.7\))996 6444 y(T)8 b(h)l(e)53 b(pivoti)s(n)n(g)e(s)-5 b(tra)d(te)j(g)8 b(y)52 b(curr)q(ently)g(i)s(n)g(u)-7 b(s)m(e)53 b(is)g(h)l(e)l(ld)f(i)s (n)h FJ(ppsel.str)m(at)p FP(.)510 6776 y Fd(pr)s(int)165 b FO(lpprint)51 b Fb(w)r(hat)i FJ(integer)f FO(;)996 6975 y Fb(w)r(hat)i FP(::)1526 6993 y(=)1678 6975 y FO(basis)p FP(|)p FO(conmgmt)p FP(|)p FO(crash)p FP(|)p FO(degen)p FP(|)o FO(dua)o(l)p FP(|)43 b FO(major)p FP(|)p FO(phase1)p FP(|)p FO(phase2)p FP(|)p FO(pivotin)o(g)p FP(|)1691 7174 y FO(pivreject)p FP(|)p FO(pricing)p FP(|)p FO(scaling)o FP(|)p FO(se)o(tup)o FP(|)p FO(v)o(arm)o(gmt)996 7440 y FP(T)8 b(h)l(e)51 b(pr)s(i)s(nt)f(o)-5 b(ptio)l(ns)49 b(c)l(o)l(ntr)q(o)-5 b(l)50 b(th)l(e)g(amo)-5 b(unt)50 b(of)h(o)-5 b(u)l(tp)g(u)l(t)49 b(whic)-7 b(h)54 b FM(D)8 b(Y)g(L)g(P)56 b FP(pr)q(od)-7 b(u)i(c)f(e)o(s)51 b(as)g(it)f(runs.)65 b(T)8 b(his)996 7639 y(can)64 b(be)f(v)r(ar)s(ie)l(d)g(fr)q(o)n(m)h(a)l (bs)n(o)-5 b(l)n(u)l(te)l(ly)62 b(n)m(othi)s(n)n(g)e(to)k(c)l(o)-5 b(pio)g(u)e(s)63 b(o)-5 b(u)l(tp)g(u)l(t)62 b(u)-7 b(s)m(e)l(fu)l(l)63 b(o)l(nly)f(d)-7 b(ur)s(i)s(n)n(g)62 b(d)-5 b(e)e(t)s(ail)n(e)l(d)996 7838 y(d)i(e)l(b)d(u)l(gg)t(i)s(n)n(g.)83 b(Pr)s(i)s(nti)s(n)n(g)58 b(o)-5 b(ptio)l(ns)58 b(ar)q(e)i(c)l(ove)l(r)q(e)l(d)g(i)s(n)f(d)-5 b(e)e(t)s(ail)60 b(i)s(n)g(\24719,)h(whic)-7 b(h)58 b(d)-5 b(e)o(sc)d(r)s(ibe)o(s)60 b(d)-5 b(e)l(b)d(u)l(gg)t(i)s(n)n(g)996 8038 y(o)j(ptio)l(ns)55 b(and)h(ca)-6 b(pa)l(bilitie)o(s.)77 b(If)60 b FM(D)8 b(Y)g(L)g(P)63 b FP(is)56 b(c)l(o)n(mpil)n(e)l(d)g (with)f(th)l(e)h(c)l(o)n(mpil)n(e-ti)s(me)i(c)l(o)l(ns)-5 b(t)s(ant)55 b FJ(NDEBUG)996 8237 y FP(d)-5 b(e)l(\002)s(n)n(e)l(d,)53 b(virt)l(ually)e(all)i(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(nal)51 b(pr)s(i)s(nti)s(n)n(g)g(is)i(r)q(e)n(move)l(d.)310 8569 y Fd(scaling)164 b FO(lpcontrol)97 b(scaling)50 b FJ(integer)i FO(;)996 8835 y FP(Spec)m(i\002e)o(s)h(h)n(ow)i FM(D)8 b(Y)g(L)g(P)59 b FP(s)-8 b(h)n(o)j(u)l(ld)52 b(scal)n(e)h(th)l(e)g(c)l (o)l(ns)-5 b(trai)s(nt)51 b(sys)-5 b(te)n(m)53 b(\(\2479\).)1093 9167 y(0)170 b FM(D)8 b(Y)g(L)g(P)58 b FP(is)53 b(n)m(ot)f(all)n(owe)l (d)g(to)h(a)-6 b(p)e(ply)51 b(scali)s(n)n(g.)1093 9432 y(1)170 b FM(D)8 b(Y)g(L)g(P)58 b FP(s)-8 b(h)n(o)j(u)l(ld)52 b(u)-7 b(s)m(e)53 b(scali)s(n)n(g)f(vec)-5 b(to)e(rs)53 b(a)-8 b(tt)s(a)n(c)h(h)l(e)l(d)53 b(to)f(th)l(e)h(c)l(o)l(ns)-5 b(trai)s(nt)51 b(sys)-5 b(te)n(m.)1093 9698 y(2)166 b(\(d)-5 b(e)l(fa)d(u)l(lt\))62 b FM(D)8 b(Y)g(L)g(P)65 b FP(s)-8 b(h)n(o)j(u)l(ld)59 b(ev)r(al)n(ua)-8 b(te)59 b(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)59 b(sys)-5 b(te)n(m)59 b(and)g(a)-6 b(p)e(ply)59 b(scali)s(n)n(g)f(if)i(n)n(ec)-6 b(e)o(s-)1362 9897 y(sary)-17 b(.)3771 11400 y(81)p eop end %%Page: 82 85 TeXDict begin 82 84 bop 481 466 a Fd(scan)164 b FO(lpcontrol)97 b(scan)51 b FJ(integer)h FO(;)996 732 y FP(200)41 b FF(\243)h FJ(ar)m(chvcnt)q FP(/)r(2)e FF(\243)i FP(1000.)996 997 y(Spec)m(i\002e)o(s)76 b(th)l(e)f(m)s(i)s(ni)s(m)l(um)h(n)n(umbe)l(r)f (of)h(c)l(o)-5 b(l)n(umns)76 b(whic)-7 b(h)74 b(will)h(be)h(scann)n(e)l (d)g(i)s(n)g(pr)s(i)s(mal)g(s)n(i)s(m-)996 1197 y(pl)n(e)-5 b(x)65 b(to)g(s)m(e)l(l)n(ec)-5 b(t)65 b(a)g(n)n(ew)f(candida)-8 b(te)64 b(ente)l(r)s(i)s(n)n(g)f(v)r(ar)s(i)s(a)l(b)l(l)n(e.)102 b(T)8 b(his)64 b(parame)-7 b(te)l(r)65 b(a)-6 b(p)e(plie)o(s)65 b(o)l(nly)e(wh)l(en)996 1396 y FJ(dy_pr)s(im)m(alin)53 b FP(is)g(call)n(e)l(d)g(to)g(s)m(e)l(l)n(ec)-5 b(t)53 b(th)l(e)g(ente)l(r)s(i)s(n)n(g)e(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(\()p FG(vid)p FP(.)g(\24714.5\).)256 1728 y Fd(usedual)164 b FO(lpcontrol)97 b(usedual)50 b FJ(boolean)j FO(;)996 1994 y FP(Wh)l(en)72 b(s)m(e)-7 b(t)73 b(to)g(fals)m(e,)78 b(this)72 b(o)-5 b(ptio)l(n)71 b(pr)q(events)77 b FM(D)8 b(Y)g(L)g(P)78 b FP(fr)q(o)n(m)73 b(u)-7 b(s)n(i)s(n)n(g)72 b(d)-7 b(ual)72 b(s)n(i)s(mpl)n(e)-5 b(x.)126 b(By)72 b(d)-5 b(e)l(fa)d(u)l(lt,)1000 2193 y FM(D)8 b(Y)g(L)g(P)59 b FP(will)52 b(u)-7 b(s)m(e)53 b(d)-7 b(ual)52 b(s)n(i)s(mpl)n(e)-5 b(x)53 b(wh)l(en)e(pos)-5 b(s)n(ib)l(l)n(e.)0 2786 y Fu(17)-35 b(.12)201 b Fc(D)10 b(Y)g(L)g(P)73 b Fu(T)-5 b(o)-10 b(le)-5 b(ran)f(c)f(es)4 3205 y FM(D)8 b(Y)g(L)g(P)49 b FP(has)43 b(a)h(n)n(umbe)l(r)e(of)i(n)n(ume)l(r)s(ic)f(to)-5 b(l)n(e)l(ranc)f(e)o(s)43 b(and)g(r)q(e)l(la)-8 b(te)l(d)43 b(c)l(o)l(ntr)q(o)-5 b(l)42 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)42 b(whic)-7 b(h)42 b(ar)q(e)h(u)-7 b(s)m(e)l(d)44 b(i)s(n)f(eq)l(ual-)0 3404 y(ity)56 b(and)g(a)n(ccura)n(cy)g(c)-7 b(h)l(ec)f(ks)57 b(and)f(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)57 b(algo)-7 b(r)s(ithms)56 b(whic)-7 b(h)55 b(a)-8 b(tte)n(mpt)56 b(to)h(c)l(o)l(ntr)q(o)-5 b(l)55 b(th)l(e)i(a)n(ccum)l(u)l(la)-8 b(tio)l(n)54 b(of)0 3603 y(n)n(ume)l(r)s(ical)64 b(a)n(ccura)n(cy)-17 b(.)98 b(Ea)n(c)-7 b(h)63 b(is)h(d)-5 b(e)o(sc)d(r)s(ibe)l(d)64 b(b)-5 b(r)s(ie)l(\003y)63 b(be)l(l)n(ow;)69 b(agai)s(n,)d(th)l(e)d(r)q (ea)-6 b(d)h(e)l(r)65 b(is)f(enc)l(o)-5 b(urag)n(e)l(d)62 b(to)i(c)l(o)l(ns)-8 b(u)l(lt)0 3803 y FJ(dylp.h)54 b FP(fo)-7 b(r)53 b(d)-5 b(e)e(t)s(ails.)249 4101 y(Seve)l(ral)59 b(of)f(th)l(e)h(to)-5 b(l)n(e)l(ranc)f(e)o(s)59 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)59 b(be)l(l)n(ow)f(ar)q(e)h(dy)7 b(nam)s(ically)57 b(a)-6 b(dj)f(u)g(s)i(te)l(d)59 b(by)j FM(D)8 b(Y)g(L)g(P)65 b FP(i)s(n)58 b(r)q(e)o(s)-8 b(po)l(ns)m(e)58 b(to)h(its)0 4301 y(as)-5 b(s)m(e)o(s)g(sment)49 b(of)f(th)l(e)g(n)n (ume)l(r)s(ical)h(s)-5 b(t)s(a)l(bility)47 b(of)i(th)l(e)f(curr)q(ent)g (bas)n(is.)64 b(A)8 b(s)49 b(a)g(g)n(en)n(e)l(ral)e(ru)l(l)n(e,)j(tr)q (ea)-6 b(d)48 b(car)q(e)l(fu)l(lly)g(wh)l(en)0 4500 y(ove)l(rr)s(idi)s (n)n(g)59 b FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)57 b(d)-5 b(e)l(fa)d(u)l(lts,)56 b(and)g(pl)n(eas)m(e)h(t)s(ake)f(th)l(e)g(ti)s (me)h(to)f(r)q(ea)-6 b(d)56 b(th)l(e)g(c)l(od)-5 b(e)56 b(c)l(o)n(mments)g(and)g(c)l(o)l(ns)n(id)-5 b(e)l(r)56 b(th)l(e)0 4699 y(i)s(nte)l(rr)q(e)l(la)-8 b(tio)l(ns)g(hips)50 b(be)-7 b(tween)52 b(th)l(e)h(to)-5 b(l)n(e)l(ranc)f(e)o(s.)382 5164 y Fd(bogus)164 b FO(lpcontrol)97 b(bogus)51 b FJ(double)i FO(;)996 5430 y FP(De)l(fa)-8 b(u)l(lt:)65 b(1.0)996 5695 y(T)8 b(h)l(e)49 b(`)r(bog)n(u)-7 b(s)49 b(n)n(umbe)l(r)12 b(')48 b(to)-5 b(l)n(e)l(ranc)f(e.)65 b(V)-11 b(al)n(u)l(e)o(s)50 b(s)-8 b(u)j(c)e(h)49 b(tha)-8 b(t)49 b FJ(zer)m(o)40 b FP(<)5345 5688 y FF(|)5383 5695 y FG(x)5488 5688 y FF(|)5569 5695 y(\243)f FJ(zer)m(o)29 b FF(*)h FJ(bogus)49 b FP(ar)q(e)h(c)l(o)l(ns)n(id)-5 b(e)l(r)q(e)l(d)996 5895 y(like)l(ly)69 b(to)g(be)h(th)l(e)f(r)q(e)o(s)-8 b(u)l(lt)70 b(of)f(a)n(ccum)l(u)l(la)-8 b(te)l(d)69 b(n)n(ume)l(r)s (ical)g(i)s(na)n(ccura)n(cy)-17 b(,)73 b(ra)-8 b(th)l(e)l(r)69 b(than)f(l)n(e)-5 b(g)t(iti)s(ma)d(te)996 6094 y(v)r(al)n(u)l(e)o(s.) 134 b(Pivot)75 b(c)l(oe)l(\002)-49 b(\002c)m(ients)75 b(and)g(pr)s(i)s(mal)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(v)r(al)n(u)l(e)o(s) g(withi)s(n)e(this)g(ran)n(g)n(e)g(will)h(tr)s(igg)n(e)l(r)996 6293 y(r)q(e)l(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)60 b(of)i(th)l(e)f(bas)n (is.)92 b(Fo)-7 b(r)61 b(d)-7 b(ual)61 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o (s,)j(th)l(e)d(same)h(te)o(s)-5 b(t)62 b(is)g(a)-6 b(p)e(plie)l(d,)62 b(u)-7 b(s)n(i)s(n)n(g)61 b(th)l(e)g(d)-7 b(ual)996 6492 y(ze)l(r)q(o)53 b(to)-5 b(l)n(e)l(ranc)f(e)53 b(\()p FJ(cost)p FP(\).)64 b(T)8 b(h)l(e)52 b(d)-5 b(e)l(fa)d(u)l(lt)52 b(v)r(al)n(u)l(e)h(is)g(1)r(.)r(0.)996 6758 y(Expe)l(r)s(ienc)-6 b(e)79 b(s)m(ee)n(ms)h(to)g(s)-8 b(h)n(ow)78 b(tha)-8 b(t)79 b(fo)-7 b(r)80 b(th)l(e)f(majo)-7 b(r)s(ity)80 b(of)g(pr)q(o)-8 b(b)l(l)n(e)n(ms)78 b(i)s(nc)-8 b(r)q(eas)n(i)s(n)n(g) 79 b(this)g(v)r(al)n(u)l(e)996 6957 y(will)56 b(ca)-8 b(u)h(s)m(e)56 b(th)l(e)g(bas)n(is)h(to)g(be)f(r)q(e)l(fa)n(c)-5 b(to)e(r)q(e)l(d)56 b(mo)-7 b(r)q(e)57 b(often)f(and)g(will)f(n)m(ot)h (i)s(mpr)q(ove)g(pe)l(r)5 b(fo)-7 b(r)5 b(manc)-6 b(e)57 b(o)-7 b(r)996 7157 y(a)n(ccura)n(cy)-17 b(.)63 b(It')-5 b(s)46 b(be)-7 b(tte)l(r)46 b(to)f(r)q(e)l(ly)h(o)l(n)j FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)47 b(a)n(ccura)n(cy)e(c)-7 b(h)l(ec)f(ks)46 b(to)f(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)47 b(if)f(th)l(e)f(bas)n(is)h(s)-8 b(h)n(o)j(u)l(ld)996 7356 y(be)48 b(r)q(e)l(fa)n(c)-5 b(to)e(r)q(e)l(d)47 b(be)l(fo)-7 b(r)q(e)47 b(th)l(e)g(n)m(o)-7 b(r)5 b(mal)47 b(r)q(e)l(fa)n(c)-5 b(to)e(r)47 b(i)s(nte)l(rv)r(al)g(has)g(pas)-5 b(s)m(e)l(d.)64 b(Inc)-8 b(r)q(eas)n(i)s(n)n(g)46 b FJ(bogus)h FP(may)g(be)996 7555 y(u)-7 b(s)m(e)l(fu)l(l)53 b(if)f(scali)s(n)n(g)g (is)h(disa)l(b)l(l)n(e)l(d,)f(o)-7 b(r)53 b(if)g FJ(f)-6 b(actor)52 b FP(has)h(been)g(s)m(e)-7 b(t)53 b(to)g(a)g(ve)l(ry)f(larg) n(e)g(v)r(al)n(u)l(e.)528 7887 y Fd(cost)165 b FO(lpcontrol)97 b(costz)51 b FJ(double)i FO(;)996 8153 y FP(De)l(fa)-8 b(u)l(lt:)65 b(1)r(.)r(0)31 b FF(\264)h FP(10)2315 8093 y FA(\01411)996 8419 y FP(T)8 b(h)l(e)54 b(ze)l(r)q(o)f(to)-5 b(l)n(e)l(ranc)f(e)54 b(a)-6 b(p)e(plie)l(d)53 b(to)g(v)r(al)n(u)l(e)o (s)h(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)54 b(with)e(th)l(e)h(d)-7 b(ual)53 b(pr)q(o)-8 b(b)l(l)n(e)n(m)53 b(\(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)996 8618 y(and)h(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)52 b(c)l(os)-5 b(ts\).)996 8884 y(T)8 b(his)66 b(to)-5 b(l)n(e)l(ranc)f(e)67 b(may)f(be)g(tighten)n(e)l(d)f (if)71 b FM(D)8 b(Y)g(L)g(P)72 b FP(scal)n(e)o(s)c(th)l(e)e(c)l(o)l(ns) -5 b(trai)s(nt)65 b(sys)-5 b(te)n(m)66 b(fo)-7 b(r)66 b(n)n(ume)l(r)s(ical)996 9083 y(s)-5 b(t)s(a)l(bility)-17 b(.)113 b(L)5 b(e)-7 b(t)72 b FH(y)50 b FP(=)e(\(\(max)2876 9108 y Fz(i)23 b(j)3001 9076 y FF(|)3036 9083 y FG(a)3141 9108 y Fz(i)g(j)3241 9076 y FF(|)3282 9083 y FP(\))r(/)r(\(m)s(i)s(n) 3807 9108 y Fz(i)g(j)3931 9076 y FF(|)3966 9083 y FG(a)4071 9108 y Fz(i)g(j)4171 9076 y FF(|)4212 9083 y FP(\)\))4312 9022 y FA(1)q(/)q(2)4536 9083 y FP(.)113 b(L)5 b(e)-7 b(t)72 b FH(y)5149 9108 y Fz(u)5307 9083 y FP(be)d(th)l(e)f(v)r(al)n(u) l(e)h(calcu)l(la)-8 b(te)l(d)68 b(fo)-7 b(r)69 b(th)l(e)996 9301 y(unscal)n(e)l(d)f(ma)-8 b(tr)s(ix)77 b FG(A)c FP(and)d FH(y)3087 9326 y Fz(s)3228 9301 y FP(be)e(th)l(e)f(v)r(al)n(u)l(e)h (calcu)l(la)-8 b(te)l(d)67 b(fo)-7 b(r)68 b(th)l(e)g(scal)n(e)l(d)g(ma) -8 b(tr)s(ix)6988 9270 y(\013)6958 9301 y FG(A)5 b FP(.)110 b(L)5 b(e)-7 b(t)71 b FG(s)50 b FP(=)996 9500 y(max\(0)r(,)25 b FE(b)p FP(l)n(og)e FH(y)2033 9525 y Fz(u)2124 9500 y FP(/)t FH(y)2356 9525 y Fz(s)2460 9500 y FP(+)34 b(.)r(5)o FE(c)47 b FP(\014)38 b(2.)130 b(T)8 b(h)l(e)74 b(d)-7 b(ual)74 b(ze)l(r)q(o)g(to)-5 b(l)n(e)l(ranc)f(e)74 b(will)g(be)g (tighten)n(e)l(d)f(by)h(10)7226 9440 y FA(\014)q Fz(s)7444 9500 y FP(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)996 9700 y FJ(cost)37 b FP(=)h FJ(cost)28 b FF(\264)g FP(10)2132 9639 y FA(\014)q Fz(s)2276 9700 y FP(\).)63 b(In)48 b(en)n(glis)-8 b(h,)47 b(if)g(scali)s(n)n(g)g(r)q(eally)g(did)h(make)g(a)g(dif)n(fe)l (r)q(enc)-6 b(e,)49 b(s)n(o)e(tha)-8 b(t)47 b(th)l(e)h(scal)n(e)l(d)996 9899 y(ma)-8 b(tr)s(ix)69 b(is)h(s)n(igni\002cantly)d(mo)-7 b(r)q(e)69 b(s)-5 b(t)s(a)l(b)l(l)n(e)70 b(than)f(th)l(e)f(unscal)n(e)l (d)i(ma)-8 b(tr)s(ix,)77 b FM(D)8 b(Y)g(L)g(P)75 b FP(s)-8 b(h)n(o)j(u)l(ld)68 b(be)h(e)-5 b(xtra)996 10098 y(car)q(e)l(fu)l(l)53 b(a)l(bo)-5 b(u)l(t)52 b(a)n(ccura)n(cy)g(s)n(o)g(tha)-8 b(t)52 b(th)l(e)h(scal)n(e)l(d)g(s)n(o)-5 b(l)n(u)l(tio)l(n)51 b(is)i(s)-5 b(till)53 b(a)g(s)n(o)-5 b(l)n(u)l(tio)l(n)51 b(afte)l(r)i(unscali)s(n)n(g.)3771 11400 y(82)p eop end %%Page: 83 86 TeXDict begin 83 85 bop 460 466 a Fd(dchk)164 b FO(lpcontrol)97 b(dchk)51 b FJ(double)i FO(;)996 732 y FP(De)l(fa)-8 b(u)l(lt:)65 b(1)r(.)r(0)31 b FF(\264)h FP(10)2316 671 y Fz(s)r FA(\0144)2531 732 y FP(,)53 b(wh)l(e)l(r)q(e)g FG(s)44 b FP(=)d(max\(0)r(,)25 b FE(b)p FP(l)n(og)c FJ(ar)m(chccnt)31 b FP(+)j(.)r(5)o FE(c)41 b FP(\014)32 b(2)996 997 y(T)8 b(h)l(e)52 b(d)-7 b(ual)50 b(a)n(ccura)n(cy)h(c)-7 b(h)l(ec)f(k)52 b(to)-5 b(l)n(e)l(ranc)f(e,)52 b(as)g(d)-5 b(e)o(sc)d(r)s(ibe)l(d)51 b(i)s(n)h(\2478.)65 b(T)8 b(h)l(e)51 b(a)-6 b(dj)f(u)g(s)i(tment)52 b(by)h FG(s)h FP(pr)q(ogr)q(e)o(s-)996 1197 y(s)n(ive)l(ly)66 b(l)n(oos)m(ens)g(th)l(e)g(a)n(ccura)n(cy)f(c)-7 b(h)l(ec)f(k)66 b(to)-5 b(l)n(e)l(ranc)f(e)67 b(fo)-7 b(r)66 b(sys)-5 b(te)n(ms)66 b(with)f(mo)-7 b(r)q(e)66 b(than)g(10)7115 1136 y FA(2)q(.)q(5)7353 1197 y FF(\273)48 b FP(300)996 1396 y(d)-7 b(ual)70 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)118 b(In)70 b(en)n(glis)-8 b(h,)72 b(wh)l(en)d(th)l(e)l(r)q(e)h(ar)q(e)g (many)g(d)-7 b(ual)69 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)75 b(a)n(ccum)l(u)l(la)-8 b(ti)s(n)n(g)68 b(n)n(u-)996 1595 y(me)l(r)s(ical)d(i)s(na)n(ccura)n(cy)e(warrants)g(s)n(o)n(me)h(r)q(e)l (laxa)-8 b(tio)l(n)63 b(of)h(th)l(e)g(a)n(ccura)n(cy)g(c)-7 b(h)l(ec)f(k)64 b(to)-5 b(l)n(e)l(ranc)f(e.)100 b(T)8 b(his)996 1794 y(a)-6 b(dj)f(u)g(s)i(tment)53 b(is)g(ma)-6 b(d)h(e)53 b(i)s(n)g FJ(dy_chec)n(kdef)-6 b(aults)p FP(.)430 2126 y Fd(dfeas)996 2392 y FP(T)8 b(h)l(e)72 b(d)-7 b(ual)71 b(feas)n(ibility)g(c)-7 b(h)l(ec)f(k)72 b(to)-5 b(l)n(e)l(ranc)f(e,)77 b(dy)7 b(nam)s(ically)70 b(calcu)l(la)-8 b(te)l(d)71 b(u)-7 b(s)n(i)s(n)n(g)71 b FJ(cost)g FP(as)i(th)l(e)e(bas)m(e)996 2591 y(v)r(al)n(u)l(e,)53 b(as)g(d)-5 b(e)o(sc)d(r)s(ibe)l(d)53 b(i)s(n)g(\2478.)0 2923 y Fd(dfeas_scale)163 b FO(lpcontrol)96 b(dfeas)51 b FJ(double)i FO(;)996 3189 y FP(De)l(fa)-8 b(u)l(lt:)65 b(1)r(.)r(0)31 b FF(\264)h FP(10)2316 3129 y Fz(s)r FA(+2)2531 3189 y FP(,)53 b(wh)l(e)l(r)q(e)g FG(s)44 b FP(=)d(max\(0)r(,)25 b FE(b)p FP(l)n(og)c FJ(ar)m(chccnt)31 b FP(+)j(.)r(5)o FE(c)41 b FP(\014)32 b(2)996 3455 y(Dec)l(o)-5 b(u)f(pli)s(n)n(g)59 b(m)l(u)l(ltiplie)l(r)f(fo)-7 b(r)61 b(scali)s(n)n(g)e FJ(df)m(eas)p FP(.)89 b(T)8 b(his)60 b(m)l(u)l(ltiplie)l(r)f(may)h(be)g(i)s(nc)-8 b(r)q(eas)m(e)l(d)60 b(if)h(th)l(e)e(c)l(o)l(n-)996 3654 y(s)-5 b(trai)s(nt)53 b(sys)-5 b(te)n(m)52 b(c)l(o)l(nt)s(ai)s(ns)g(many)g(d)-7 b(ual)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(o)-7 b(r)53 b(if)g(th)l(e)f(c)l(o)l(ns)-5 b(trai)s(nt)52 b(sys)-5 b(te)n(m)52 b(is)h(scal)n(e)l(d.)996 3920 y(T)8 b(h)l(e)58 b(a)-6 b(dj)f(u)g(s)i(tment)58 b(fo)-7 b(r)58 b(a)g(larg)n(e)f(n)n (umbe)l(r)g(of)h(d)-7 b(ual)57 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(is)f (th)l(e)f(same)i(a)-6 b(dj)f(u)g(s)i(tment)58 b(a)-6 b(p)e(plie)l(d)996 4119 y(fo)h(r)53 b FJ(dchk)p FP(.)996 4385 y(T)8 b(h)l(e)44 b(a)-6 b(dj)f(u)g(s)i(tment)44 b(fo)-7 b(r)44 b(ma)-8 b(tr)s(ix)43 b(scali)s(n)n(g)g(fo)-5 b(ll)n(ows)43 b(th)l(e)g(a)-6 b(dj)f(u)g(s)i(tment)44 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)44 b(fo)-7 b(r)44 b FJ(cost)p FP(.)61 b(Us)n(i)s(n)n(g)43 b(th)l(e)996 4584 y(d)-5 b(e)l(\002)s(nitio)l(ns)47 b(fo)-7 b(r)50 b FH(y)2277 4609 y Fz(u)2415 4584 y FP(and)f FH(y)2901 4609 y Fz(s)3023 4584 y FP(g)t(iven)e(fo)-7 b(r)49 b FJ(cost)p FP(,)h FG(s)41 b FP(=)d(max)o(\(0)r(,)25 b FE(b)p FP(l)n(og)f FH(y)5470 4609 y Fz(u)5560 4584 y FP(/)t FH(y)5792 4609 y Fz(s)5896 4584 y FP(+)34 b(.)r(5)o FE(c)j FP(\014)29 b(1)48 b(and)g FJ(df)m(eas_scale)996 4783 y FP(will)62 b(be)h(i)s(nc)-8 b(r)q(eas)m(e)l(d)62 b(by)g(10)2879 4723 y Fz(s)2952 4783 y FP(.)95 b(In)63 b(en)n(glis)-8 b(h,)62 b(th)l(e)h(s)m(e)-7 b(para)f(tio)l(n)61 b(be)-7 b(tween)63 b(th)l(e)f(d)-7 b(ual)62 b(ze)l(r)q(o)g(to)-5 b(l)n(e)l(ranc)f(e)996 4982 y(and)61 b(th)l(e)g(d)-7 b(ual)61 b(feas)n(ibility)g(to)-5 b(l)n(e)l(ranc)f(e)62 b(is)f(i)s(nc)-8 b(r)q(eas)m(e)l(d)61 b(to)h(c)l(o)n(mpensa)-8 b(te)61 b(fo)-7 b(r)62 b(tighteni)s(n)n(g)c(th)l(e)j(d)-7 b(ual)996 5182 y(ze)l(r)q(o)53 b(to)-5 b(l)n(e)l(ranc)f(e.)663 5514 y Fd(inf)165 b FO(lpcontrol)97 b(infinity)50 b FP([)p FO(IEEE)p FP(|)p FO(DBL_MAX)p FP(|)p FJ(double)p FP(])d FO(;)996 5779 y FP(In\002)s(nity)-17 b(.)69 b FM(D)8 b(Y)g(L)g(P)58 b FP(can)53 b(wo)-7 b(rk)52 b(with)g(an)g(i)s(n\002)s (nite)g(o)-7 b(r)53 b(\002)s(nite)f(i)s(n\002)s(nity)-17 b(.)996 6045 y(De)l(fa)-8 b(u)l(lt:)65 b FJ(HUGE_V)-15 b(AL)996 6311 y(HUGE_V)g(AL)53 b FP(will)e(be)i(IEEE)f(754)g(i)s(n\002) s(nity)f(o)l(n)h(mos)-5 b(t)53 b(mod)-5 b(e)l(r)5 b(n)52 b(sys)-5 b(te)n(ms.)996 6576 y(Many)80 b(n)n(ume)l(r)s(ical)g(pr)q (ograms)h(s)-5 b(till)80 b(u)-7 b(s)m(e)81 b(tha)-8 b(t)81 b(ma)-8 b(th)l(e)n(ma)g(tical)79 b(oxy)7 b(mo)-7 b(r)q(o)l(n,)86 b(a)81 b(\002)s(nite)f(i)s(n\002)s(nity)-17 b(.)996 6776 y(Mos)-5 b(t)55 b(c)l(o)n(mmo)l(nly)-17 b(,)55 b(this)g(will)f(be)h(th) l(e)g(v)r(al)n(u)l(e)g(d)-5 b(e)l(\002)s(n)n(e)l(d)55 b(fo)-7 b(r)56 b(th)l(e)f(ANSI)f(C)h(sy)7 b(mbo)-5 b(l)54 b FJ(\003oat.h:DBL_MAX)p FP(,)996 6975 y(th)l(e)i(max)10 b(i)s(m)l(um)55 b(r)q(e)-7 b(pr)q(e)o(s)m(ent)s(a)l(b)l(l)n(e)56 b(v)r(al)n(u)l(e)g(fo)-7 b(r)56 b(type)g FJ(double)p FP(.)75 b(Fi)s(nite)56 b(and)f(i)s(n\002)s(nite)g(i)s(n\002)s(nity)f (do)i(n)m(ot)996 7174 y(play)79 b(we)l(ll)f(tog)n(e)-7 b(th)l(e)l(r)d(.)143 b(If)84 b FM(D)8 b(Y)g(L)g(P)85 b FP(is)79 b(bei)s(n)n(g)f(u)-7 b(s)m(e)l(d)80 b(by)e(a)i(client)f(pr)q (ogram)f(whic)-7 b(h)78 b(u)-7 b(s)m(e)o(s)80 b(a)g(\002)s(nite)996 7373 y(i)s(n\002)s(nity)-17 b(,)52 b(s)m(e)-7 b(t)53 b FJ(inf)g FP(to)g(th)l(e)f(client')-5 b(s)52 b(v)r(al)n(u)l(e)h(of)g (i)s(n\002)s(nity)-17 b(.)460 7706 y Fd(pchk)164 b FO(lpcontrol)97 b(pchk)51 b FJ(double)i FO(;)996 7971 y FP(De)l(fa)-8 b(u)l(lt:)65 b(1)r(.)r(0)31 b FF(\264)h FP(10)2316 7911 y Fz(s)r FA(\0145)2531 7971 y FP(,)53 b(wh)l(e)l(r)q(e)g FG(s)44 b FP(=)d(max\(0)r(,)25 b FE(b)p FP(l)n(og)c FJ(ar)m(chvcnt)31 b FP(+)j(.)r(5)o FE(c)41 b FP(\014)32 b(2)996 8237 y(T)8 b(h)l(e)62 b(pr)s(i)s(mal)g(a)n(ccura)n(cy)f(c)-7 b(h)l(ec)f(k)62 b(to)-5 b(l)n(e)l(ranc)f(e,)65 b(as)d(d)-5 b(e)o(sc)d(r)s(ibe)l(d)62 b(i)s(n)g(\2478.)93 b(T)8 b(h)l(e)62 b(a)-6 b(dj)f(u)g(s)i(tment)62 b(by)i FG(s)g FP(pr)q(o-)996 8436 y(gr)q(e)o(s)-5 b(s)n(ive)l(ly)69 b(l)n(oos)m(ens)f(th)l(e)g(a)n(ccura)n(cy)f(c)-7 b(h)l(ec)f(k)69 b(to)-5 b(l)n(e)l(ranc)f(e)68 b(fo)-7 b(r)69 b(sys)-5 b(te)n(ms)68 b(with)f(mo)-7 b(r)q(e)69 b(than)e(10)7469 8376 y FA(2)q(.)q(5)7709 8436 y FF(\273)996 8635 y FP(300)e(v)r(ar)s(i) s(a)l(b)l(l)n(e)o(s.)104 b(In)66 b(en)n(glis)-8 b(h,)66 b(wh)l(en)e(th)l(e)l(r)q(e)h(ar)q(e)h(many)e(v)r(ar)s(i)s(a)l(b)l(l)n (e)o(s,)70 b(a)n(ccum)l(u)l(la)-8 b(ti)s(n)n(g)62 b(n)n(ume)l(r)s(ical) 996 8835 y(i)s(na)n(ccura)n(cy)67 b(warrants)g(s)n(o)n(me)h(r)q(e)l (laxa)-8 b(tio)l(n)66 b(of)i(th)l(e)f(a)n(ccura)n(cy)g(c)-7 b(h)l(ec)f(k)68 b(to)-5 b(l)n(e)l(ranc)f(e.)111 b(T)8 b(his)67 b(a)-6 b(dj)f(u)g(s)i(t-)996 9034 y(ment)53 b(is)g(ma)-6 b(d)h(e)53 b(i)s(n)f FJ(dy_chec)n(kdef)-6 b(aults)p FP(.)430 9366 y Fd(pfeas)996 9632 y FP(T)8 b(h)l(e)56 b(pr)s(i)s(mal)g(feas)n(ibility)g(c)-7 b(h)l(ec)f(k)56 b(to)-5 b(l)n(e)l(ranc)f(e,)57 b(dy)7 b(nam)s(ically)54 b(calcu)l(la)-8 b(te)l(d)56 b(u)-7 b(s)n(i)s(n)n(g)55 b FJ(zer)m(o)h FP(as)g(th)l(e)g(bas)m(e)996 9831 y(v)r(al)n(u)l(e,)d (as)g(d)-5 b(e)o(sc)d(r)s(ibe)l(d)53 b(i)s(n)g(\2478.)0 10163 y Fd(pfeas_scale)163 b FO(lpcontrol)96 b(pfeas)51 b FJ(double)i FO(;)996 10429 y FP(De)l(fa)-8 b(u)l(lt:)65 b(1)r(.)r(0)31 b FF(\264)h FP(10)2316 10368 y Fz(s)r FA(+2)2531 10429 y FP(,)53 b(wh)l(e)l(r)q(e)g FG(s)44 b FP(=)d(max\(0)r(,)25 b FE(b)p FP(l)n(og)c FJ(ar)m(chvcnt)31 b FP(+)j(.)r(5)o FE(c)41 b FP(\014)32 b(2)3771 11400 y(83)p eop end %%Page: 84 87 TeXDict begin 84 86 bop 996 466 a FP(A)49 b(d)-5 b(ec)l(o)g(u)f(pli)s (n)n(g)46 b(m)l(u)l(ltiplie)l(r)h(u)-7 b(s)m(e)l(d)49 b(to)f(a)-6 b(dj)f(u)g(s)i(t)49 b(th)l(e)f(s)m(e)-7 b(para)f(tio)l(n)48 b(of)g FJ(pf)m(eas)h FP(and)f FJ(zer)m(o)g FP(as)h(d)-5 b(e)o(sc)d(r)s(ibe)l(d)48 b(i)s(n)996 665 y(\2478.)62 b(T)8 b(his)42 b(m)l(u)l(ltiplie)l(r)f(may)h(be)g(i)s(nc)-8 b(r)q(eas)m(e)l(d)42 b(if)g(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)41 b(sys)-5 b(te)n(m)42 b(c)l(o)l(nt)s(ai)s(ns)g(many)f(v)r(ar)s(i)s(a)l (b)l(l)n(e)o(s)996 865 y(o)-7 b(r)53 b(if)g(th)l(e)f(c)l(o)l(ns)-5 b(trai)s(nt)52 b(sys)-5 b(te)n(m)52 b(is)h(scal)n(e)l(d.)996 1117 y(T)8 b(h)l(e)45 b(a)-6 b(dj)f(u)g(s)i(tment)46 b(fo)-7 b(r)45 b(a)h(larg)n(e)e(n)n(umbe)l(r)g(of)h(v)r(ar)s(i)s(a)l(b) l(l)n(e)o(s,)j(s)-8 b(pec)m(i\002e)l(d)44 b(with)g(th)l(e)h(d)-5 b(e)l(fa)d(u)l(lt)44 b(v)r(al)n(u)l(e,)j(is)f(th)l(e)996 1316 y(same)59 b(a)-6 b(dj)f(u)g(s)i(tment)57 b(a)-6 b(p)e(plie)l(d)57 b(fo)-7 b(r)58 b FJ(pchk)p FP(.)80 b(In)58 b(en)n(glis)-8 b(h,)56 b(wh)l(en)g(th)l(e)l(r)q(e)h(ar)q(e)h (many)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)j(a)n(ccu-)996 1516 y(m)l(u)l(la)-8 b(ti)s(n)n(g)51 b(n)n(ume)l(r)s(ical)h(i)s(na)n (ccura)n(cy)g(warrants)g(s)n(o)n(me)h(r)q(e)l(laxa)-8 b(tio)l(n)51 b(of)i(th)l(e)f(feas)n(ibility)g(to)-5 b(l)n(e)l(ranc)f (e.)996 1768 y(T)8 b(h)l(e)44 b(a)-6 b(dj)f(u)g(s)i(tment)44 b(fo)-7 b(r)44 b(ma)-8 b(tr)s(ix)44 b(scali)s(n)n(g)f(fo)-5 b(ll)n(ows)43 b(th)l(e)h(a)-6 b(dj)f(u)g(s)i(tment)44 b(d)-5 b(e)o(sc)d(r)s(ibe)l(d)44 b(fo)-7 b(r)44 b FJ(zer)m(o)p FP(.)62 b(Us)n(i)s(n)n(g)43 b(th)l(e)996 1968 y(d)-5 b(e)l(\002)s(nitio)l(ns)47 b(fo)-7 b(r)51 b FH(y)2278 1993 y Fz(u)2415 1968 y FP(and)f FH(y)2902 1993 y Fz(s)3024 1968 y FP(g)t(iven)e(fo)-7 b(r)49 b FJ(zer)m(o)p FP(,)i FG(s)40 b FP(=)e(max\(0)r(,)25 b FE(b)p FP(l)n(og)e FH(y)5469 1993 y Fz(u)5560 1968 y FP(/)t FH(y)5792 1993 y Fz(s)5896 1968 y FP(+)34 b(.)r(5)o FE(c)j FP(\014)29 b(1)48 b(and)g FJ(pf)m(eas_scale)996 2167 y FP(will)65 b(be)h(i)s(nc)-8 b(r)q(eas)m(e)l(d)65 b(by)g(10)2891 2107 y Fz(s)2964 2167 y FP(.)104 b(In)66 b(en)n(glis)-8 b(h,)66 b(th)l(e)f(s)m(e)-7 b(para)f(tio)l(n)65 b(be)-7 b(tween)65 b(th)l(e)h(ze)l(r)q(o)f(to)-5 b(l)n(e)l(ranc)f(e)66 b(and)996 2366 y(th)l(e)53 b(feas)n(ibility)f(to) -5 b(l)n(e)l(ranc)f(e)53 b(is)g(i)s(nc)-8 b(r)q(eas)m(e)l(d)52 b(to)h(c)l(o)n(mpensa)-8 b(te)52 b(fo)-7 b(r)53 b(tighteni)s(n)n(g)d (th)l(e)i(ze)l(r)q(o)h(to)-5 b(l)n(e)l(ranc)f(e.)475 2672 y Fd(piv)m(ot)164 b FO(lpcontrol)97 b(pivot)51 b FJ(double)i FO(;)996 2925 y FP(De)l(fa)-8 b(u)l(lt:)65 b(1)r(.)r(0)31 b FF(\264)h FP(10)2315 2864 y FA(\014)2393 2925 y FP(5)996 3177 y(T)8 b(h)l(e)61 b(pivot)g(s)m(e)l(l)n(ec)-5 b(tio)l(n)61 b(m)l(u)l(ltiplie)l(r)-10 b(.)89 b(A)61 b(pivot)g(c)l(oe)l(\002)-49 b(\002c)m(ient)p 4979 3077 117 7 v 62 w FG(a)5095 3202 y Fz(i)23 b(j)5258 3177 y FP(will)60 b(be)i(a)n(cc)-6 b(e)f(pte)l(d)61 b(as)h(n)n(ume)l(r)s (ically)996 3377 y(s)-5 b(t)s(a)l(b)l(l)n(e)66 b(i)s(n)f(th)l(e)g(pr)s (i)s(mal)g(algo)-7 b(r)s(ithm)65 b(if)3691 3370 y FF(|)p 3724 3276 V 3726 3377 a FG(a)3840 3402 y Fz(i)23 b(j)3942 3370 y FF(|)4030 3377 y(\263)47 b FP(\()p FJ(piv)l(ot)o FP(\)\()p FJ(piv)p FP(_)o FJ(tol)o FP(\))p FE(k)p 5289 3276 V 2 w FG(a)5418 3402 y Fz(j)5463 3377 y FE(k)5550 3434 y Fl(1)5610 3377 y FP(,)68 b(wh)l(e)l(r)q(e)c FJ(piv_tol)g FP(is)i(th)l(e)f(s)-5 b(t)s(a)l(b)l(l)n(e)996 3576 y(pivot)63 b(to)-5 b(l)n(e)l(ranc)f(e)64 b(u)-7 b(s)m(e)l(d)63 b(d)-7 b(ur)s(i)s(n)n(g)61 b(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)62 b(i)s(n)h(GL)s(PK.)g(In)g(th)l(e)g(d)-7 b(ual)62 b(algo)-7 b(r)s(ithm,)65 b(th)l(e)e(1)-17 b(-n)m(o)-7 b(r)5 b(m)63 b(is)996 3775 y(calcu)l(la)-8 b(te)l(d)53 b(ove)l(r)f(th)l(e)h(pivot)f (r)q(ow)p 3352 3674 V 54 w FG(a)3469 3800 y Fz(i)3520 3775 y FP(.)996 4028 y(T)8 b(h)l(e)56 b(pivot)h(s)m(e)l(l)n(ec)-5 b(tio)l(n)55 b(m)l(u)l(ltiplie)l(r)g(may)h(be)h(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)56 b(if)k FM(D)8 b(Y)g(L)g(P)62 b FP(\002)s(nds)56 b(its)m(e)l(lf)g(a)-8 b(t)57 b(an)f(e)-5 b(xtr)q(e)n(me)56 b(poi)s(nt)996 4227 y(wh)l(e)l(r)q(e)61 b(all)h(potenti)s(al)f(pivots) 67 b FG(x)3211 4252 y Fz(i)3261 4227 y FP(,)i FG(x)3488 4252 y Fz(j)3594 4227 y FP(ha)-7 b(ve)62 b(been)f(r)q(ej)l(ec)-5 b(te)l(d)62 b(beca)-8 b(u)h(s)m(e)62 b(th)l(e)g(pivot)g(c)l(oe)l(\002) -49 b(\002c)m(ients)p 7582 4126 V 62 w FG(a)7699 4252 y Fz(i)23 b(j)996 4426 y FP(we)l(r)q(e)53 b(j)-7 b(udg)n(e)l(d)51 b(n)n(ume)l(r)s(ically)h(uns)-5 b(t)s(a)l(b)l(l)n(e)53 b(\()p FG(vid)p FP(.)f(\24712.2\).)996 4679 y(In)h(en)n(glis)-8 b(h,)51 b(if)j FJ(piv)l(ot)e FP(we)l(r)q(e)g(s)m(e)-7 b(t)54 b(to)f(1,)h(th)l(e)e(pivot)h(c)l(oe)l(\002)-49 b(\002c)m(ient)p 5195 4578 V 54 w FG(a)5312 4704 y Fz(i)23 b(j)5466 4679 y FP(fo)-7 b(r)54 b(eve)l(ry)f(s)n(i)s(mpl)n(e)-5 b(x)54 b(pivot)f(wo)-5 b(u)l(ld)996 4878 y(ha)e(ve)52 b(to)f(sa)-8 b(tisfy)52 b(th)l(e)f(same)i(s)-5 b(t)s(a)l(bility)51 b(c)-8 b(r)s(ite)l(r)s(io)l(n)51 b(tha)-8 b(t)51 b(th)l(e)g(GL)s(PK)g (bas)n(is)i(pa)n(c)-8 b(kag)n(e)50 b(a)-6 b(p)e(plie)o(s)52 b(wh)l(en)996 5077 y(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g)83 b(th)l(e)h(bas)n(is.)159 b(T)8 b(his)83 b(wo)-5 b(u)l(ld)83 b(be)h(ove)l(rly)f(r)q(e)o(s)-5 b(tr)s(ic)g(tive,)93 b(h)n(oweve)l(r)83 b(\227)h(wh)l(en)f(e)-5 b(xecu)l(ti)s(n)n(g)996 5277 y(s)n(i)s(mpl)n(e)g(x)49 b(pivots,)j FM(D)8 b(Y)g(L)g(P)54 b FP(n)n(ee)l(ds)48 b(to)g(c)-7 b(h)n(oos)m(e)48 b(th)l(e)f(pivot)h(r)q (ow)f(and)g(c)l(o)-5 b(l)n(umn)47 b(to)h(max)10 b(i)s(m)s(is)m(e)48 b(pr)q(ogr)q(e)o(s)-5 b(s)996 5476 y(towar)q(d)59 b(an)g(o)-5 b(pti)s(mal)59 b(e)-5 b(xtr)q(e)n(me)59 b(poi)s(nt.)84 b(So)n(me)59 b(c)l(o)n(mpr)q(o)n(m)s(is)m(e)h(is)f(n)n(ec)-6 b(e)o(s)h(sary;)64 b(th)l(e)59 b(v)r(al)n(u)l(e)g(of)g FJ(piv)l(ot)996 5675 y FP(c)l(o)l(ntr)q(o)-5 b(ls)80 b(th)l(e)f(balanc)-6 b(e)81 b(be)-7 b(tween)80 b(n)n(ume)l(r)s(ical)g (s)-5 b(t)s(a)l(bility)79 b(and)h(pr)q(ogr)q(e)o(s)-5 b(s)80 b(towar)q(d)f(an)h(o)-5 b(pti)s(mal)996 5874 y(s)n(o)g(l)n(u)l (tio)l(n.)86 b(Wh)l(en)63 b FM(D)8 b(Y)g(L)g(P)66 b FP(\002)s(nds)59 b(its)m(e)l(lf)h(i)s(n)g(a)g(di\002)-49 b(\002cu)l(lt)59 b(s)-8 b(pot,)61 b(it)f(will)f(tilt)h(th)l(e)f(balanc)-6 b(e)61 b(i)s(n)e(o)-7 b(r)q(d)i(e)l(r)60 b(to)996 6074 y(make)53 b(pr)q(ogr)q(e)o(s)-5 b(s)53 b(towar)q(d)f(o)-5 b(pti)s(mality)-17 b(.)400 6380 y Fd(purge)164 b FO(lpcontrol)97 b(purgecon)50 b FJ(double)j FO(;)996 6632 y FP(De)l(fa)-8 b(u)l(lt:)65 b(1)r(.)r(0)31 b FF(\264)h FP(10)2315 6572 y FA(\0144)996 6885 y FP(T)8 b(h)l(e)41 b(r)q(eq)l(uir)q(e)l(d)f(pe)l (r)q(c)-6 b(ent)s(ag)n(e)41 b(c)-7 b(han)n(g)n(e)39 b(i)s(n)i(th)l(e)f (v)r(al)n(u)l(e)h(of)g(th)l(e)f(o)-8 b(bj)l(ec)j(tive)41 b(func)-5 b(tio)l(n)39 b(be)l(fo)-7 b(r)q(e)41 b(c)l(o)l(ns)-5 b(trai)s(nt)996 7084 y(o)e(r)59 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)57 b(is)i(all)n(owe)l(d.)82 b(T)8 b(his)58 b(s)-8 b(h)n(o)j(u)l(ld)57 b(be)i(s)-5 b(tr)s(ic)g(tly)58 b(gr)q(ea)-8 b(te)l(r)58 b(than)g(ze)l(r)q(o)g(i)s (n)g(o)-7 b(r)q(d)i(e)l(r)996 7283 y(to)58 b(m)s(i)s(ni)s(m)s(is)m(e)g (th)l(e)g(pos)-5 b(s)n(ibility)57 b(of)h(a)g(cycl)n(e)h(i)s(nvo)-5 b(lvi)s(n)n(g)56 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n/d)j(ea)n(c)g(tiv)r(a)d (tio)l(n)54 b(of)k(c)l(o)l(ns)-5 b(trai)s(nts)996 7483 y(o)e(r)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)177 7789 y Fd(purge)m(v)l(ar)163 b FO(lpcontrol)97 b(purgevar)50 b FJ(double)j FO(;)996 8041 y FP(De)l(fa)-8 b(u)l(lt:)65 b(.5)996 8294 y(Us)m(e)l(d)45 b(to)h(calcu)l(la)-8 b(te)46 b(th)l(e)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l (n)44 b(thr)q(e)o(s)-8 b(h)n(o)j(ld)45 b(as)h(a)g(pe)l(r)q(c)-6 b(ent)s(ag)n(e)45 b(of)h(th)l(e)g(max)10 b(i)s(m)l(um)996 8493 y(unfa)-7 b(vo)i(ura)l(b)l(l)n(e)52 b(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)52 b(c)l(os)-5 b(ts,)53 b(as)g(d)-5 b(e)o(sc)d(r)s(ibe) l(d)53 b(i)s(n)f(\24715.3.)263 8799 y Fd(r)o(eframe)165 b FO(lpcontrol)97 b(reframe)50 b FJ(double)j FO(;)996 9052 y FP(De)l(fa)-8 b(u)l(lt:)65 b(.1)996 9304 y(T)8 b(h)l(e)46 b(pe)l(r)q(c)-6 b(ent)s(ag)n(e)46 b(e)l(rr)q(o)-7 b(r)47 b(i)s(n)f(th)l(e)g(u)-6 b(pda)e(te)l(d)45 b(c)l(o)-5 b(l)n(umn)46 b(o)-7 b(r)46 b(r)q(ow)g(n)m(o)-7 b(r)5 b(ms)46 b(whic)-7 b(h)45 b(is)i(r)q(eq)l(uir)q(e)l(d)e(to)i(tr)s(igg)n (e)l(r)996 9504 y(a)67 b(r)q(e)o(s)m(e)-7 b(t)67 b(of)f(th)l(e)g(PSE)f (r)q(e)l(fe)l(r)q(enc)-6 b(e)66 b(frame)h(o)-7 b(r)66 b(th)l(e)g(DSE)f(r)q(ow)h(n)m(o)-7 b(r)5 b(ms,)69 b(r)q(e)o(s)-8 b(pec)j(tive)l(ly)-17 b(.)106 b(A)66 b(r)q(e)l(la)-8 b(tive)l(ly)996 9703 y(larg)n(e)83 b(e)l(rr)q(o)-7 b(r)84 b(can)g(be)g(to)-5 b(l)n(e)l(ra)d(te)l(d)83 b(h)l(e)l(r)q(e.)158 b(T)8 b(h)l(e)84 b(c)l(o)l(ns)m(eq)l(u)l(enc)-6 b(e)82 b(of)i(i)s(na)n(ccura)n(cy)-17 b(,)91 b(a)84 b(c)-7 b(hanc)h(e)84 b(of)g(a)996 9902 y(s)-8 b(u)h(bo)i(pti)s(mal)63 b(c)-7 b(h)n(oic)h(e)64 b(of)g(pr)s(i)s(mal)f(ente)l(r)s(i)s(n)n(g)g(o)-7 b(r)64 b(d)-7 b(ual)63 b(l)n(ea)-7 b(vi)s(n)n(g)62 b(v)r(ar)s(i)s(a)l (b)l(l)n(e,)67 b(is)d(n)m(ot)f(too)g(s)m(e)l(r)s(io)-5 b(u)e(s.)98 b(In)996 10101 y(c)l(o)l(ntras)-5 b(t,)72 b(fo)-7 b(r)69 b(th)l(e)f(d)-7 b(ual)68 b(th)l(e)g(c)l(o)n(mp)-5 b(u)l(t)s(a)d(tio)l(nal)67 b(c)l(os)-5 b(t)69 b(of)f(r)q(ecalcu)l(la)-8 b(ti)s(n)n(g)67 b(th)l(e)h(bas)n(is)h(i)s(nve)l(rs)m(e)g(r)q(ow)996 10301 y(n)m(o)-7 b(r)5 b(ms)82 b FE(k)r FH(1)1780 10326 y Fz(k)1864 10301 y FE(k)90 b FP(is)83 b(high.)152 b(Fo)-7 b(r)82 b(th)l(e)g(pr)s(i)s(mal,)90 b(all)82 b(c)l(o)-5 b(l)n(umn)81 b(n)m(o)-7 b(r)5 b(ms)82 b(ar)q(e)h(r)q(e)o(s)m(e)-7 b(t)82 b(to)h(1,)89 b(e)l(f)n(fec)-5 b(tive)l(ly)996 10500 y(r)q(eve)l(rti)s(n)n(g)52 b(to)h(unscal)n(e)l(d)f(\(`Dantzig)8 b('\))50 b(pr)s(ic)m(i)s(n)n(g.)3771 11400 y(84)p eop end %%Page: 85 88 TeXDict begin 85 87 bop 421 466 a Fd(swing)164 b FO(lpcontrol)97 b(swing)51 b FJ(double)i FO(;)996 732 y FP(De)l(fa)-8 b(u)l(lt:)65 b(1)r(.)r(0)31 b FF(\264)h FP(10)2315 671 y FA(15)996 997 y FP(T)8 b(his)46 b(to)-5 b(l)n(e)l(ranc)f(e)47 b(is)g(u)-7 b(s)m(e)l(d)46 b(to)g(d)-5 b(e)e(tec)i(t)47 b(e)-5 b(xc)f(e)o(s)h(s)n(ive)49 b(c)-7 b(han)n(g)n(e)44 b(i)s(n)j(th)l(e)f(v)r(al)n(u)l(e)o(s)g(of)h(th)l(e)f(pr)s(i)s(mal)g(v) r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)996 1197 y(T)8 b(h)l(e)65 b(magnit)l(ud)-5 b(e)63 b(of)h(th)l(e)h(v)r(al)n(u)l(e)g(pr)s(io)-7 b(r)64 b(to)h(a)g(pivot)f(is)h(c)l(o)n(mpar)q(e)l(d)g(to)f(th)l(e)h (magnit)l(ud)-5 b(e)63 b(afte)l(r)i(th)l(e)996 1396 y(pivot.)98 b(If)64 b(th)l(e)g(ra)-8 b(tio)63 b(e)-5 b(xc)f(ee)l(ds)64 b(th)l(e)g(v)r(al)n(u)l(e)f(of)h FJ(swing)p FP(,)j(th)l(e)c(s)n(i)s (mpl)n(e)-5 b(x)64 b(p)-6 b(has)m(e)64 b(will)f(a)l(bo)-7 b(rt)63 b(and)k FM(D)8 b(Y)g(L)g(P)996 1595 y FP(will)52 b(a)-8 b(tte)n(mpt)52 b(to)h(bo)-5 b(und)51 b(th)l(e)i(pr)s(i)s(mal)g (swi)s(n)n(g)e(\()p FG(vid)p FP(.)h(\24712.2\).)361 1927 y Fd(toobig)996 2193 y FP(De)l(fa)-8 b(u)l(lt:)65 b(1)r(.)r(0)31 b FF(\264)h FP(10)2315 2133 y FA(30)2467 2193 y FP(.)996 2459 y(T)8 b(his)46 b(v)r(al)n(u)l(e)h(is)f(u)-7 b(s)m(e)l(d)47 b(to)f(c)l(o)l(ntr)q(o)-5 b(l)45 b(c)-7 b(han)n(g)n(e)o(s)45 b(i)s(n)h(th)l(e)g(d)-7 b(ual)46 b(m)l(u)l(ltipivot)f(s)-5 b(tra)d(te)j(g)8 b(y)-17 b(.)63 b(T)8 b(h)l(e)46 b(b)-5 b(r)q(eakpoi)s(nts)996 2658 y(ar)q(e)53 b(curr)q(ently)f(har)q(dc)l(od) -5 b(e)l(d)52 b(i)s(n)g FJ(dy_dualm)m(ultipiv)l(ot:dualm)m(ultiin)g FP(\(whic)-7 b(h)51 b(s)m(ee\).)525 2990 y Fd(zer)n(o)164 b FO(lpcontrol)97 b(zero)51 b FJ(double)i FO(;)996 3256 y FP(De)l(fa)-8 b(u)l(lt:)65 b(1)r(.)r(0)31 b FF(\264)h FP(10)2315 3195 y FA(\01411)2537 3256 y FP(.)996 3521 y(T)8 b(h)l(e)53 b(ze)l(r)q(o)f(to)-5 b(l)n(e)l(ranc)f(e.)66 b(V)-11 b(al)n(u)l(e)o(s)53 b(small)n(e)l(r)g(than)4235 3514 y FF(|)4268 3521 y FJ(zer)m(o)4569 3514 y FF(|)4663 3521 y FP(ar)q(e)g(s)m(e)-7 b(t)54 b(to)e(a)h(cl)n(ean)g(\003)n(oa)-8 b(ti)s(n)n(g-poi)s(nt)51 b(ze)l(r)q(o.)996 3787 y(T)8 b(his)69 b(to)-5 b(l)n(e)l(ranc)f(e)69 b(may)g(be)h(tighten)n(e)l(d)d (if)74 b FM(D)8 b(Y)g(L)g(P)75 b FP(scal)n(e)o(s)70 b(th)l(e)f(c)l(o)l (ns)-5 b(trai)s(nt)68 b(ma)-8 b(tr)s(ix)69 b(fo)-7 b(r)69 b(n)n(ume)l(r)s(ical)996 3986 y(s)-5 b(t)s(a)l(bility)-17 b(.)113 b(L)5 b(e)-7 b(t)72 b FH(y)50 b FP(=)e(\(\(max)2876 4011 y Fz(i)23 b(j)3001 3979 y FF(|)3036 3986 y FG(a)3141 4011 y Fz(i)g(j)3241 3979 y FF(|)3282 3986 y FP(\))r(/)r(\(m)s(i)s(n) 3807 4011 y Fz(i)g(j)3931 3979 y FF(|)3966 3986 y FG(a)4071 4011 y Fz(i)g(j)4171 3979 y FF(|)4212 3986 y FP(\)\))4312 3926 y FA(1)q(/)q(2)4536 3986 y FP(.)113 b(L)5 b(e)-7 b(t)72 b FH(y)5149 4011 y Fz(u)5307 3986 y FP(be)d(th)l(e)f(v)r(al)n(u) l(e)h(calcu)l(la)-8 b(te)l(d)68 b(fo)-7 b(r)69 b(th)l(e)996 4204 y(unscal)n(e)l(d)f(ma)-8 b(tr)s(ix)77 b FG(A)c FP(and)d FH(y)3087 4229 y Fz(s)3228 4204 y FP(be)e(th)l(e)f(v)r(al)n(u)l(e)h (calcu)l(la)-8 b(te)l(d)67 b(fo)-7 b(r)68 b(th)l(e)g(scal)n(e)l(d)g(ma) -8 b(tr)s(ix)6988 4173 y(\013)6958 4204 y FG(A)5 b FP(.)110 b(L)5 b(e)-7 b(t)71 b FG(s)50 b FP(=)996 4404 y(max\(0)r(,)25 b FE(b)p FP(l)n(og)e FH(y)2033 4429 y Fz(u)2124 4404 y FP(/)t FH(y)2356 4429 y Fz(s)2460 4404 y FP(+)34 b(.)r(5)o FE(c)44 b FP(\014)36 b(2.)107 b(T)8 b(h)l(e)67 b(ze)l(r)q(o)f(to)-5 b(l)n(e)l(ranc)f(e)67 b(will)e(be)i(tighten)n(e)l(d)e(by)i(10)6716 4343 y FA(\014)q Fz(s)6926 4404 y FP(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)69 b FJ(zer)m(o)47 b FP(=)996 4603 y FJ(zer)m(o)40 b FF(\264)f FP(10)1673 4543 y FA(\014)q Fz(s)1817 4603 y FP(\).)142 b(In)79 b(en)n(glis)-8 b(h,)83 b(if)78 b(scali)s(n)n(g)g (r)q(eally)g(did)g(make)h(a)f(dif)n(fe)l(r)q(enc)-6 b(e,)85 b(s)n(o)79 b(tha)-8 b(t)77 b(th)l(e)i(scal)n(e)l(d)996 4802 y(ma)-8 b(tr)s(ix)69 b(is)h(s)n(igni\002cantly)d(mo)-7 b(r)q(e)69 b(s)-5 b(t)s(a)l(b)l(l)n(e)70 b(than)f(th)l(e)f(unscal)n(e)l (d)i(ma)-8 b(tr)s(ix,)77 b FM(D)8 b(Y)g(L)g(P)75 b FP(s)-8 b(h)n(o)j(u)l(ld)68 b(be)h(e)-5 b(xtra)996 5001 y(car)q(e)l(fu)l(l)53 b(a)l(bo)-5 b(u)l(t)52 b(a)n(ccura)n(cy)g(s)n(o)g(tha)-8 b(t)52 b(th)l(e)h(scal)n(e)l(d)g(s)n(o)-5 b(l)n(u)l(tio)l(n)51 b(is)i(s)-5 b(till)53 b(a)g(s)n(o)-5 b(l)n(u)l(tio)l(n)51 b(afte)l(r)i(unscali)s(n)n(g.)3771 11400 y(85)p eop end %%Page: 86 89 TeXDict begin 86 88 bop 0 475 a FL(18)244 b Fe(D)12 b(Y)g(L)g(P)88 b FL(Sta)-12 b(tis)-7 b(tics)4 959 y FM(D)8 b(Y)g(L)g(P)60 b FP(will)53 b(c)l(o)-5 b(ll)n(ec)g(t)54 b(d)-5 b(e)e(t)s(ail)n(e)l(d) 54 b(s)-5 b(t)s(a)d(tis)j(tics)55 b(if)f(th)l(e)f(c)l(o)l(nditio)l(nal) f(c)l(o)n(mpila)-8 b(tio)l(n)52 b(sy)7 b(mbo)-5 b(l)53 b FJ(D)l(YLP_ST)-7 b(A)g(TISTICS)54 b FP(is)h(d)-5 b(e)l(\002)s(n)n(e)l (d.)0 1158 y(T)8 b(h)l(e)68 b(a)-7 b(v)r(aila)l(b)l(l)n(e)67 b(s)-5 b(t)s(a)d(tis)j(tics)68 b(ar)q(e)h(d)-5 b(e)o(sc)d(r)s(ibe)l(d) 68 b(b)-5 b(r)s(ie)l(\003y)67 b(i)s(n)h(th)l(e)f(paragra)-6 b(p)g(hs)67 b(whic)-7 b(h)67 b(fo)-5 b(ll)n(ow;)75 b(fo)-7 b(r)68 b(d)-5 b(e)e(t)s(ails)68 b(o)l(n)g(s)-8 b(u)h(b-)0 1357 y(\002e)l(lds,)87 b(c)l(o)l(ns)-8 b(u)l(lt)79 b FJ(dylp.h)p FP(.)150 b(Ro)-5 b(u)l(ti)s(n)n(e)o(s)80 b(i)s(n)g(th)l(e)g(\002l)n(e)h FJ(statistics)s(.c)e FP(pr)q(ovid)-5 b(e)81 b(i)s(niti)s(alisa)-8 b(tio)l(n)79 b(\()p FJ(dy_initstats)p FP(\),)86 b(pr)s(i)s(nti)s(n)n(g)0 1556 y(\()p FJ(dy_dumpstats)p FP(\),)52 b(and)h(r)q(e)l(l)n(eas)m(e)g(of)g(th)l(e)f(da)-8 b(t)s(a)53 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)53 b(\()p FJ(dy_fr)o(eestats)p FP(\).)370 2021 y Fd(angle:)164 b(max,)42 b(min,)f(hist)996 2287 y FP(St)s(a)-8 b(tis)j(tics)65 b(o)l(n)f(th)l(e)h(an)n(gl)n(e)o(s) f(of)h(i)s(n)n(eq)l(uality)f(c)l(o)l(ns)-5 b(trai)s(nts)64 b(to)h(th)l(e)f(o)-8 b(bj)l(ec)j(tive)65 b(func)-5 b(tio)l(n.)100 b(Fo)-7 b(r)65 b(c)l(o)l(n-)996 2569 y(s)-5 b(trai)s(nt)49 b FG(i)15 b FP(,)48 b(this)f(is)h(calcu)l(la)-8 b(te)l(d)47 b(as)3396 2457 y(180)p 3396 2531 309 7 v 3497 2683 a FH(p)3747 2569 y FP(c)l(os)4008 2501 y FA(\0141)4385 2457 y FG(a)4490 2482 y Fz(i)4541 2457 y FG(c)p 4201 2531 610 7 v 4201 2683 a FE(k)r FG(a)4395 2708 y Fz(i)4445 2683 y FE(k)8 b(k)r FG(c)f FE(k)4830 2569 y FP(.)64 b(T)8 b(h)l(e)48 b(max)10 b(i)s(m)l(um)47 b(and)g(m)s(i)s(ni)s(m)l(um)g(an)n (gl)n(e)996 2879 y(is)53 b(r)q(ec)l(o)-7 b(r)q(d)i(e)l(d,)53 b(and)f(a)h(his)-5 b(togram)52 b(i)s(n)g(5)3668 2815 y Fh(o)3790 2879 y FP(i)s(nc)-8 b(r)q(e)n(ments)51 b(with)h(a)h(d)-5 b(e)l(dica)d(te)l(d)52 b(90)6308 2815 y Fh(o)6429 2879 y FP(bi)s(n.)442 3211 y Fd(cons:)164 b(sze,)41 b(angle,)f(actcnt,)g (deactcnt,)f(init,)i(\002n)996 3477 y FP(Info)-7 b(r)5 b(ma)-8 b(tio)l(n)76 b(a)l(bo)-5 b(u)l(t)77 b(i)s(ndivid)-7 b(ual)75 b(c)l(o)l(ns)-5 b(trai)s(nts:)114 b(th)l(e)77 b(an)n(gl)n(e)f(of)h(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)76 b(with)g(th)l(e)h(o)-8 b(b-)996 3676 y(j)l(ec)j(tive)61 b(func)-5 b(tio)l(n,)62 b(th)l(e)e(n)n(umbe)l(r)g(of)h(ti)s(me)o(s)h (it')-5 b(s)60 b(a)n(c)-5 b(tiv)r(a)d(te)l(d)60 b(and)g(d)-5 b(ea)n(c)g(tiv)r(a)d(te)l(d,)62 b(and)f(boo)-5 b(l)n(eans)60 b(to)996 3875 y(i)s(ndica)-8 b(te)52 b(if)h(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)51 b(is)i(a)n(c)-5 b(tive)53 b(i)s(n)g(th)l(e)f(i)s(niti)s (al)g(and)h(\002)s(nal)f(a)n(c)-5 b(tive)53 b(sys)-5 b(te)n(ms.)606 4207 y Fd(d2:)165 b(pivs)s(,)41 b(iter)s(s)996 4473 y FP(T)r(ot)s(al)49 b(pivot)f(and)f(ite)l(ra)-8 b(tio)l(n)47 b(c)l(o)-5 b(unts)48 b(fo)-7 b(r)52 b FM(D)8 b(Y)g(L)g(P)t FP(.)66 b(T)8 b(h)l(e)48 b(pivot)g(c)l(o)-5 b(unt)47 b(is)h(th)l(e)g(n)n(umbe)l(r)g(of)g(s)-8 b(u)j(cc)f(e)o(s)h (sfu)l(l)996 4672 y(s)n(i)s(mpl)n(e)g(x)41 b(pivots.)62 b(T)8 b(h)l(e)40 b(ite)l(ra)-8 b(tio)l(n)39 b(c)l(o)-5 b(unt)39 b(als)n(o)h(i)s(ncl)n(ud)-5 b(e)o(s)41 b(pivot)f(a)-8 b(tte)n(mpts)40 b(whic)-7 b(h)39 b(did)h(n)m(ot)g(s)-8 b(u)j(cc)f(ee)l(d)996 4871 y(fo)f(r)68 b(s)n(o)n(me)g(r)q(eas)n(o)l(n)f (\()p FG(e)p FP(.)p FG(g)p FP(.,)j(a)e(pr)s(i)s(mal)g(pivot)f(i)s(n)h (whic)-7 b(h)66 b(th)l(e)h(ente)l(r)s(i)s(n)n(g)g(v)r(ar)s(i)s(a)l(b)l (l)n(e)h(was)f(event)l(ually)996 5071 y(r)q(ej)l(ec)-5 b(te)l(d)53 b(beca)-8 b(u)h(s)m(e)53 b(th)l(e)f(pivot)h(e)l(l)n(e)n (ment)f(was)h(n)n(ume)l(r)s(ically)f(uns)-5 b(t)s(a)l(b)l(l)n(e\).)212 5403 y Fd(ddegen:)163 b(cnt,)41 b(avgsiz,)f(maxsiz,)h(totpivs)s(,)f (avgpivs)s(,)f(maxpivs)996 5668 y FP(St)s(a)-8 b(tis)j(tics)44 b(o)l(n)g(th)l(e)g(amo)-5 b(unt)43 b(of)h(ti)s(me)h(s)-8 b(pent)44 b(i)s(n)g(r)q(e)o(s)-5 b(tr)s(ic)g(te)l(d)45 b(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(ms)42 b(tryi)s(n)n(g)g(to)j(e)o(sca) -6 b(pe)45 b(d)-7 b(ual)996 5868 y(d)i(e)g(g)n(en)n(e)l(ra)n(cy)-17 b(.)996 6133 y(Fo)-7 b(r)47 b(ea)n(c)-7 b(h)46 b(l)n(eve)l(l)g(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)47 b(ea)n(c)-7 b(h)46 b(n)n(e)o(s)-5 b(te)l(d)46 b(l)n(eve)l(l)g(of)g(r)q(e)o(s)-5 b(tr)s(ic)g(te)l(d)47 b(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(m\),)49 b FM(D)8 b(Y)g(L)g(P)51 b FP(r)q(ec)l(o)-7 b(r)q(ds)47 b(th)l(e)e(n)n(um-)996 6333 y(be)l(r)62 b(of)h(ti)s(me)o(s)g(this)e(l)n(eve)l(l)i(was)f(r)q (ea)n(c)-7 b(h)l(e)l(d,)65 b(th)l(e)c(a)-7 b(ve)l(rag)n(e)62 b(and)g(max)10 b(i)s(m)l(um)62 b(n)n(umbe)l(r)f(of)h(v)r(ar)s(i)s(a)l (b)l(l)n(e)o(s)996 6532 y(i)s(nvo)-5 b(lve)l(d)77 b(i)s(n)g(a)h(d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)-17 b(,)82 b(th)l(e)77 b(tot)s(al)h(and)f(a) -7 b(ve)l(rag)n(e)77 b(n)n(umbe)l(r)f(of)i(pivots)f(e)-5 b(xecu)l(te)l(d)77 b(a)-8 b(t)78 b(this)996 6731 y(l)n(eve)l(l,)d(and) 69 b(th)l(e)g(max)10 b(i)s(m)l(um)69 b(n)n(umbe)l(r)g(of)g(pivots)h(e) -5 b(xecu)l(te)l(d)69 b(i)s(n)h(any)e(o)l(n)n(e)i(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(m)67 b(a)-8 b(t)70 b(this)996 6930 y(l)n(eve)l(l.)134 b(T)8 b(h)l(e)75 b(array)g(is)g(g)n(en)n(e)l(r) q(o)-5 b(u)e(sly)74 b(s)n(ize)l(d)h(\()r(by)g(c)l(o)n(mpil)n(e)h(ti)s (me)f(c)l(o)l(ns)-5 b(t)s(ant\))75 b(to)g(a)n(cc)l(o)n(mmoda)-8 b(te)75 b(a)996 7130 y(max)10 b(i)s(m)l(um)53 b(of)f(25)h(l)n(eve)l (ls.)346 7462 y Fd(dm)m(ulti:)165 b(\003ippa)q(ble,)39 b(cnt,)i(cands)s(,)f(pr)n(omote,)g(nontr)s(ivial,)f(e)m(v)l(als)s(,)h (\003ips)s(,)h(pivr)s(nks)s(,)f(maxr)s(nk)996 7727 y FP(St)s(a)-8 b(tis)j(tics)67 b(o)l(n)f(th)l(e)h(beha)-7 b(vio)i(ur)65 b(of)i(th)l(e)g(g)n(en)n(e)l(ralis)m(e)l(d)e(d)-7 b(ual)66 b(pivoti)s(n)n(g)f(algo)-7 b(r)s(ithm.)107 b(Ea)n(c)-7 b(h)66 b(call)h(to)996 7927 y FJ(dualm)m(ultiin)h FP(c)l(o)-5 b(ll)n(ec)g(ts)68 b(a)f(lis)-5 b(t)68 b(of)f(candida)-8 b(te)67 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(to)g(ente)l(r)f(th)l(e)g (bas)n(is)h(and)f(s)n(o)-7 b(rts)67 b(th)l(e)g(lis)-5 b(t.)996 8126 y(T)8 b(his)83 b(pr)q(oc)-6 b(e)o(s)h(s)85 b(may)e(pr)q(od)-7 b(u)i(c)f(e)83 b(a)g(uniq)l(u)l(e)g(candida)-8 b(te)82 b(fo)-7 b(r)84 b(entry)-17 b(,)90 b(o)-7 b(r)84 b(it)f(may)g(l)n(ea)-7 b(ve)84 b(a)g(lis)-5 b(t)83 b(of)996 8325 y(r)q(eq)l(uir)s(i)s(n)n(g)52 b(furth)l(e)l(r)f(ev)r(al)n(ua)-8 b(tio)l(n)52 b(to)h(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)53 b(th)l(e)f(be)o(s)-5 b(t)54 b(s)m(eq)l(u)l(enc)-6 b(e)52 b(of)h(\003ips)g(and)f(\002)s(nal)g(pivot.)996 8591 y(T)8 b(h)l(e)54 b FJ(\003ippa)s(ble)g FP(\002e)l(ld)f(r)q(ec)l(o)-7 b(r)q(ds)55 b(th)l(e)e(n)n(umbe)l(r)g(of)h(\003ip)-8 b(pa)l(b)l(l)n(e)53 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(i)s(n)g(th)l(e)f (pr)q(o)-8 b(b)l(l)n(e)n(m)53 b(\()p FG(i)12 b FP(.)p FG(e)p FP(.,)54 b(v)r(ar)s(i-)996 8790 y(a)l(b)l(l)n(e)o(s)60 b(with)e(\002)s(nite)h(l)n(owe)l(r)g(and)g(u)-6 b(p)e(pe)l(r)58 b(bo)-5 b(unds\).)84 b(T)8 b(h)l(e)59 b FJ(cnt)g FP(\002e)l(ld)g(r)q (ec)l(o)-7 b(r)q(ds)59 b(th)l(e)g(tot)s(al)h(n)n(umbe)l(r)e(of)996 8989 y(calls)50 b(to)f FJ(dualm)m(ultiin)p FP(,)g(and)g FJ(nontr)s(ivial)g FP(r)q(ec)l(o)-7 b(r)q(ds)49 b(th)l(e)g(n)n(umbe)l (r)f(of)h(ti)s(me)o(s)h(th)l(e)f(i)s(niti)s(al)f(scan)i(and)e(s)n(o)-7 b(rt)996 9189 y(did)53 b(n)m(ot)e(id)-5 b(entify)52 b(a)h(uniq)l(u)l(e) f(ente)l(r)s(i)s(n)n(g)f(v)r(ar)s(i)s(a)l(b)l(l)n(e.)996 9454 y(T)8 b(h)l(e)54 b(r)q(e)n(mai)s(ni)s(n)n(g)d(\002e)l(lds,)j(with) e(o)l(n)n(e)i(e)-5 b(xc)f(e)f(ptio)l(n,)54 b(ar)q(e)g(tot)s(als.)68 b(T)8 b(h)l(ey)53 b(r)q(ec)l(o)-7 b(r)q(d)54 b(th)l(e)f(n)n(umbe)l(r)g (of)h(can-)996 9654 y(dida)-8 b(te)o(s)62 b(q)l(u)l(eu)l(e)l(d)f(fo)-7 b(r)62 b(ev)r(al)n(ua)-8 b(tio)l(n,)63 b(th)l(e)e(n)n(umbe)l(r)g(of)h (ti)s(me)o(s)g(tha)-8 b(t)61 b(a)h(san)n(e)h(pivot)e(was)h(pr)q(o)n (mote)l(d)996 9853 y(ove)l(r)68 b(an)f(uns)-5 b(t)s(a)l(b)l(l)n(e)68 b(pivot,)j(th)l(e)c(n)n(umbe)l(r)g(of)h(c)l(o)-5 b(l)n(umns)67 b(transfo)-7 b(r)5 b(me)l(d)67 b(\()9 b FG(B)6177 9792 y FA(\0141)6329 9853 y FG(a)6435 9878 y Fz(k)6520 9853 y FP(\))67 b(fo)-7 b(r)68 b(ev)r(al)n(ua)-8 b(tio)l(n,)996 10052 y(th)l(e)42 b(n)n(umbe)l(r)g(of)h(bo)-5 b(und-to-bo)g(und)41 b(\003ips,)j(th)l(e)e(rank)g(i)s(n)h(th)l(e)f(s)n(o)-7 b(rte)l(d)42 b(lis)-5 b(t)43 b(of)g(th)l(e)f(v)r(ar)s(i)s(a)l(b)l(l)n (e)h(s)m(e)l(l)n(ec)-5 b(te)l(d)996 10251 y(to)53 b(ente)l(r)-9 b(,)52 b(and)g(th)l(e)h(max)10 b(i)s(m)l(um)52 b(rank)g(fo)-7 b(r)53 b(a)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(s)m(e)l(l)n(ec)-5 b(te)l(d)54 b(to)e(ente)l(r)-10 b(.)3771 11400 y(86)p eop end %%Page: 87 90 TeXDict begin 87 89 bop 366 466 a Fd(f)n(actor:)164 b(cnt,)41 b(pr)o(e)m(vpiv)-13 b(,)40 b(avgpivs)s(,)f(maxpivs)996 720 y FP(St)s(a)-8 b(tis)j(tics)64 b(a)l(bo)-5 b(u)l(t)62 b(bas)n(is)i(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g.)97 b(T)8 b(h)l(e)63 b FJ(cnt)g FP(\002e)l(ld)h(r)q(ec)l(o)-7 b(r)q(ds)63 b(th)l(e)g(tot)s(al)h(n)n(umbe)l(r)f(of)g(ti)s(me)o(s)i(th)l(e)996 920 y(bas)n(is)46 b(was)e(r)q(e)l(fa)n(c)-5 b(to)e(r)q(e)l(d.)63 b(T)8 b(h)l(e)44 b FJ(avgpivs)g FP(and)g FJ(m)m(axpivs)h FP(\002e)l(lds)f(r)q(ec)l(o)-7 b(r)q(d)45 b(th)l(e)f(a)-7 b(ve)l(rag)n(e)44 b(and)h(max)10 b(i)s(m)l(um)996 1119 y(n)n(umbe)l(r)52 b(of)h(pivots)g(be)-7 b(tween)52 b(bas)n(is)h(r)q(e)l (fa)n(c)-5 b(to)e(r)s(i)s(n)n(g.)361 1428 y Fd(infeas:)164 b(pr)o(e)m(vpiv)-13 b(,)40 b(maxcnt,)g(totpivs)s(,)g(maxpivs)s(,)h (chgcnt1,)e(chgcnt2)996 1683 y FP(St)s(a)-8 b(tis)j(tics)53 b(o)l(n)f(th)l(e)g(r)q(e)o(s)n(o)-5 b(l)n(u)l(tio)l(n)51 b(of)i(i)s(nfeas)n(ibility)f(d)-7 b(ur)s(i)s(n)n(g)51 b(pr)s(i)s(mal)i(p)-6 b(has)m(e)52 b(I.)996 1937 y(T)8 b(h)l(e)58 b(max)10 b(i)s(m)l(um)57 b(n)n(umbe)l(r)g(of)g(i)s(nfeas)n (ib)l(l)n(e)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(is)g(r)q(ec)l(o)-7 b(r)q(d)i(e)l(d,)59 b(as)f(we)l(ll)e(as)j(th)l(e)e(tot)s(al)g(pivots) 996 2136 y(i)s(n)76 b(p)-6 b(has)m(e)77 b(I)f(and)g(th)l(e)g(max)10 b(i)s(m)l(um)76 b(n)n(umbe)l(r)g(of)h(pivots)f(with)f(n)m(o)h(c)-7 b(han)n(g)n(e)74 b(i)s(n)i(th)l(e)g(n)n(umbe)l(r)g(of)996 2335 y(i)s(nfeas)n(ib)l(l)n(e)54 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)73 b FM(D)8 b(Y)g(L)g(P)59 b FP(als)n(o)53 b(c)l(o)-5 b(unts)53 b(th)l(e)g(n)n(umbe)l(r)g(of)g(ti)s(me)o(s)h(tha)-8 b(t)53 b(th)l(e)g(n)n(umbe)l(r)g(of)h(i)s(nfea-)996 2535 y(s)n(ib)l(l)n(e)48 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(c)-7 b(han)n(g)n(e)l(d)45 b(with)n(o)-5 b(u)l(t)45 b(r)q(eq)l(uir)s(i)s(n)n(g)h(r)q(ecalcu)l(la) -8 b(tio)l(n)45 b(of)i(th)l(e)g(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)46 b(c)l(os)-5 b(ts)48 b(\()p FJ(chgcnt1)p FP(\),)996 2734 y(and)68 b(th)l(e)g(n)n(umbe)l(r)g(of)h(ti)s(me)o(s)g(wh)l(en)e(it)h (did)g(\()p FJ(chgcnt2)p FP(\).)111 b(Spec)m(i\002cally)-17 b(,)71 b(if)e(e)-5 b(xa)n(c)g(tly)67 b(o)l(n)n(e)i(v)r(ar)s(i)s(a)l(b)l (l)n(e)996 2933 y(gai)s(ns)61 b(feas)n(ibility)-17 b(,)62 b(and)f(it)f(l)n(ea)-7 b(ve)o(s)62 b(th)l(e)e(bas)n(is)i(as)f(it)g(doe) o(s)g(s)n(o,)h(th)l(e)f(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)60 b(c)l(os)-5 b(ts)61 b(do)g(n)m(ot)f(ha)-7 b(ve)996 3132 y(to)53 b(be)g(r)q(ecalcu)l(la)-8 b(te)l(d.)606 3442 y Fd(p1:)165 b(pivs)s(,)41 b(iter)s(s)996 3696 y FP(T)r(ot)s(al)53 b(pivot)g(and)f(ite)l(ra)-8 b(tio)l(n)51 b(c)l(o)-5 b(unts)53 b(fo)-7 b(r)53 b(pr)s(i)s(mal)f(p)-6 b(has)m(e)53 b(1)g(s)n(i)s(mpl)n (e)-5 b(x.)606 4006 y Fd(p2:)165 b(pivs)s(,)41 b(iter)s(s)996 4260 y FP(T)r(ot)s(al)53 b(pivot)g(and)f(ite)l(ra)-8 b(tio)l(n)51 b(c)l(o)-5 b(unts)53 b(fo)-7 b(r)53 b(pr)s(i)s(mal)f(p)-6 b(has)m(e)53 b(2)g(s)n(i)s(mpl)n(e)-5 b(x.)212 4569 y Fd(pdegen:)163 b(cnt,)41 b(avgsiz,)f(maxsiz,)h(totpivs)s(,)f(avgpivs)s (,)f(maxpivs)996 4824 y FP(St)s(a)-8 b(tis)j(tics)77 b(o)l(n)g(th)l(e)g(amo)-5 b(unt)77 b(of)h(ti)s(me)f(s)-8 b(pent)77 b(i)s(n)g(r)q(e)o(s)-5 b(tr)s(ic)g(te)l(d)78 b(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(ms)76 b(tryi)s(n)n(g)g(to)h(e)o(sca) -6 b(pe)996 5023 y(pr)s(i)s(mal)53 b(d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy) -17 b(.)64 b(T)8 b(h)l(e)53 b(c)l(o)l(ntent)e(of)i(i)s(ndivid)-7 b(ual)51 b(\002e)l(lds)i(is)g(as)g(fo)-7 b(r)53 b FJ(ddgen)p FP(.)388 5332 y Fd(pivr)o(ej:)165 b(max,)42 b(mad,)f(sing,)g(pivtol_r)o (ed,)e(min_pivtol,)h(puntcall,)g(puntr)o(et)996 5587 y FP(St)s(a)-8 b(tis)j(tics)63 b(o)l(n)f(th)l(e)g(manag)n(e)n(ment)f (of)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)g(j)-7 b(udg)n(e)l(d)62 b(uns)-8 b(uit)s(a)l(b)l(l)n(e)62 b(fo)-7 b(r)63 b(pivoti)s(n)n(g.)93 b(V)-11 b(ar)s(i)s(a)l(b)l(l)n(e)o(s)996 5786 y(ar)q(e)79 b(q)l(u)l(eu)l(e)l(d)e(o)l(n)g(th)l(e)h(r)q(ej)l(ec)-5 b(te)l(d)78 b(pivot)f(lis)-5 b(t)78 b(wh)l(en)f(a)h(pivot)g(a)-8 b(tte)n(mpt)77 b(fails)h(beca)-8 b(u)h(s)m(e)78 b(th)l(e)f(pivot)996 5985 y(e)l(l)n(e)n(ment)47 b(is)g(n)n(ume)l(r)s(ically)e(uns)-5 b(t)s(a)l(b)l(l)n(e)47 b(o)-7 b(r)47 b(beca)-8 b(u)h(s)m(e)47 b(th)l(e)f(pivot)h(pr)q(od)-7 b(u)i(c)f(e)l(d)46 b(a)h(s)n(i)s(n)n(g)n (u)l(lar)f(bas)n(is.)64 b(Dur)11 b(-)996 6184 y(i)s(n)n(g)70 b(pr)s(i)s(mal)h(s)n(i)s(mpl)n(e)-5 b(x,)77 b(candida)-8 b(te)70 b(ente)l(r)s(i)s(n)n(g)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)j(ar)q (e)g(q)l(u)l(eu)l(e)l(d;)79 b(d)-7 b(ur)s(i)s(n)n(g)69 b(d)-7 b(ual)71 b(s)n(i)s(mpl)n(e)-5 b(x,)996 6384 y(candida)d(te)52 b(l)n(ea)-7 b(vi)s(n)n(g)52 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s.)996 6638 y(T)8 b(h)l(e)62 b FJ(m)m(ax)f FP(\002e)l(ld)h(r)q(ec)l(o)-7 b(r)q(ds)62 b(th)l(e)f(max)10 b(i)s(m)l(um)61 b(l)n(en)n(gth)f(of)i(th) l(e)f(r)q(ej)l(ec)-5 b(te)l(d)61 b(pivot)h(lis)-5 b(t.)92 b(T)8 b(h)l(e)61 b(\002e)l(lds)g FJ(m)m(ad)996 6837 y FP(and)h FJ(singular)g FP(r)q(ec)l(o)-7 b(r)q(d)62 b(th)l(e)g(n)n(umbe) l(r)g(of)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(q)l(u)l(eu)l(e)l(d)f(fo)-7 b(r)62 b(uns)-5 b(t)s(a)l(b)l(l)n(e)62 b(pivots)g(and)g(s)n(i)s(n)n(g)n (u)l(lar)996 7037 y(bas)n(is,)54 b(r)q(e)o(s)-8 b(pec)j(tive)l(ly)-17 b(.)996 7291 y(T)8 b(h)l(e)55 b FJ(puntcall)g FP(\002e)l(ld)f(r)q(ec)l (o)-7 b(r)q(ds)56 b(th)l(e)f(n)n(umbe)l(r)f(of)h(ti)s(me)o(s)h(th)l(e)f (r)q(o)-5 b(u)l(ti)s(n)n(e)55 b FJ(dy_dealW)q(ithPunt)h FP(was)f(call)n(e)l(d)996 7490 y(i)s(n)77 b(an)g(a)-8 b(tte)n(mpt)76 b(to)h(r)q(e)n(move)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h (fr)q(o)n(m)g(th)l(e)e(r)q(ej)l(ec)-5 b(te)l(d)78 b(pivot)e(lis)-5 b(t.)139 b(T)8 b(h)l(e)77 b FJ(pivtol_r)o(ed)g FP(\002e)l(ld)996 7689 y(r)q(ec)l(o)-7 b(r)q(ds)60 b(th)l(e)g(n)n(umbe)l(r)f(of)h(ti)s (me)o(s)g(tha)-8 b(t)59 b(th)l(e)h(pivot)f(s)m(e)l(l)n(ec)-5 b(tio)l(n)60 b(m)l(u)l(ltiplie)l(r)e(was)h(r)q(e)l(d)-7 b(u)i(c)f(e)l(d)60 b(i)s(n)f(o)-7 b(r)q(d)i(e)l(r)996 7889 y(to)62 b(c)l(o)l(ns)n(id)-5 b(e)l(r)61 b(candida)-8 b(te)61 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(pr)q(evio)-5 b(u)e(sly)61 b(r)q(ej)l(ec)-5 b(te)l(d)62 b(fo)-7 b(r)62 b(n)n(ume)l(r)s(ic)g(i)s(ns)-5 b(t)s(a)l(bility;)65 b FJ(min_pivtol)996 8088 y FP(is)56 b(th)l(e)g(m)s(i)s(ni)s(m)l(um)f(m)l (u)l(ltiplie)l(r)g(v)r(al)n(u)l(e)h(u)-7 b(s)m(e)l(d.)75 b(T)8 b(h)l(e)55 b FJ(puntr)o(et)h FP(\002e)l(ld)g(r)q(ec)l(o)-7 b(r)q(ds)56 b(th)l(e)f(n)n(umbe)l(r)h(of)g(ti)s(me)o(s)996 8287 y FJ(dy_dealW)q(ithPunt)d FP(was)f(una)l(b)l(l)n(e)f(to)h(r)q(e)n (move)f(any)h(candida)-8 b(te)o(s)51 b(fr)q(o)n(m)h(th)l(e)f(r)q(ej)l (ec)-5 b(te)l(d)52 b(pivot)g(lis)-5 b(t)52 b(and)996 8486 y(th)l(e)l(r)q(e)l(fo)-7 b(r)q(e)53 b(r)q(ec)l(o)n(mmend)-5 b(e)l(d)52 b(te)l(r)5 b(m)s(i)s(na)-8 b(tio)l(n)51 b(of)i(th)l(e)f (curr)q(ent)g(s)n(i)s(mpl)n(e)-5 b(x)54 b(p)-6 b(has)m(e.)346 8796 y Fd(pm)m(ulti:)165 b(cnt,)41 b(cands)s(,)f(nontr)s(ivial,)f(pr)n (omote)996 9050 y FP(St)s(a)-8 b(tis)j(tics)67 b(o)l(n)g(th)l(e)f(beha) -7 b(vio)i(ur)66 b(of)i(th)l(e)e(e)-5 b(xtend)g(e)l(d)67 b(pr)s(i)s(mal)g(pivoti)s(n)n(g)f(algo)-7 b(r)s(ithm.)108 b(Ea)n(c)-7 b(h)66 b(call)h(to)996 9249 y FJ(pr)s(im)m(alm)m(ultiout)45 b FP(c)l(o)-5 b(ll)n(ec)g(ts)47 b(a)g(lis)-5 b(t)46 b(of)g(candida)-8 b(te)46 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)h(to)f(l)n(ea)-7 b(ve)47 b(th)l(e)f(bas)n(is.)63 b(T)8 b(his)46 b(pr)q(oc)-6 b(e)o(s)h(s)47 b(may)996 9449 y(pr)q(od)-7 b(u)i(c)f(e)72 b(a)g(uniq)l(u)l(e)f(candida)-8 b(te)72 b(to)g(l)n(ea)-7 b(ve,)77 b(o)-7 b(r)73 b(it)f(may)g(l)n(ea)-7 b(ve)72 b(a)h(lis)-5 b(t)72 b(of)g(candida)-8 b(te)o(s)72 b(r)q(eq)l(uir)s(i)s (n)n(g)996 9648 y(furth)l(e)l(r)52 b(ev)r(al)n(ua)-8 b(tio)l(n)52 b(to)g(d)-5 b(e)e(te)l(r)5 b(m)s(i)s(n)n(e)54 b(th)l(e)e(\002)s(nal)h(pivot.)996 9902 y(T)8 b(h)l(e)59 b FJ(cnt)g FP(\002e)l(ld)g(r)q(ec)l(o)-7 b(r)q(ds)60 b(th)l(e)f(tot)s(al)g(n)n(umbe)l(r)g(of)g(calls)h(to)f FJ(pr)s(im)m(alm)m(ultiout)p FP(,)h(and)f FJ(nontr)s(ivial)g FP(r)q(ec)l(o)-7 b(r)q(ds)996 10101 y(th)l(e)61 b(n)n(umbe)l(r)g(of)h (ti)s(me)o(s)g(th)l(e)g(i)s(niti)s(al)f(scan)h(did)f(n)m(ot)g(id)-5 b(entify)60 b(a)i(uniq)l(u)l(e)e(l)n(ea)-7 b(vi)s(n)n(g)61 b(v)r(ar)s(i)s(a)l(b)l(l)n(e.)92 b(T)8 b(h)l(e)996 10301 y FJ(pr)m(omote)69 b FP(\002e)l(ld)f(r)q(ec)l(o)-7 b(r)q(ds)69 b(th)l(e)f(n)n(umbe)l(r)g(of)h(ti)s(me)o(s)g(tha)-8 b(t)68 b(a)h(san)n(e)g(pivot)g(was)f(pr)q(o)n(mote)l(d)h(ove)l(r)f(an)996 10500 y(uns)-5 b(t)s(a)l(b)l(l)n(e)53 b(pivot,)3771 11400 y(87)p eop end %%Page: 88 91 TeXDict begin 88 90 bop 603 466 a Fd(tot:)165 b(pivs)s(,)41 b(iter)s(s)996 732 y FP(T)r(ot)s(al)53 b(pivot)g(and)f(ite)l(ra)-8 b(tio)l(n)51 b(c)l(o)-5 b(unts)53 b(fo)-7 b(r)53 b(th)l(e)f(call)h(to)g FJ(dylp)p FP(.)494 1064 y Fd(v)l(ar)s(s:)164 b(sze,)41 b(actcnt,)f(deactcnt)996 1329 y FP(Info)-7 b(r)5 b(ma)-8 b(tio)l(n)66 b(a)l(bo)-5 b(u)l(t)67 b(i)s(ndivid)-7 b(ual)66 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s:)95 b(th)l(e)67 b(n)n(umbe)l(r)g(of)h (ti)s(me)o(s)g(a)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(is)g(a)n(c)-5 b(tiv)r(a)d(te)l(d)996 1529 y(and)53 b(d)-5 b(ea)n(c)g(tiv)r(a)d(te)l (d.)3771 11400 y(88)p eop end %%Page: 89 92 TeXDict begin 89 91 bop 0 475 a FL(19)244 b Fe(D)12 b(Y)g(L)g(P)88 b FL(Deb)-12 b(ugg)6 b(in)-8 b(g)78 b(Fea)-12 b(t)-6 b(ur)n(es)4 959 y FM(D)8 b(Y)g(L)g(P)71 b FP(i)s(nc)l(o)-7 b(rpo)g(ra)f(te)o(s)66 b(two)f(type)o(s)h(of)g(d)-5 b(e)l(b)d(u)l(gg)t (i)s(n)n(g)62 b(fea)-8 b(t)l(ur)q(e)o(s:)92 b(a)66 b(c)l(o)l(ntr)q(o)-5 b(lla)l(b)l(l)n(e)64 b(pr)s(i)s(nti)s(n)n(g)g(fa)n(c)m(ility)g(and)i (paran)m(oid)0 1158 y(c)-7 b(h)l(ec)f(ks.)88 b(T)8 b(h)l(e)59 b(pr)s(i)s(nti)s(n)n(g)g(fa)n(c)m(ility)g(is)h(ena)l(b)l(l)n(e)l(d)f (wh)l(en)g(th)l(e)h(sy)7 b(mbo)-5 b(l)59 b FJ(NDEBUG)h FP(is)g(n)m(ot)g(d)-5 b(e)l(\002)s(n)n(e)l(d)59 b(a)-8 b(t)61 b(c)l(o)n(mpil)n(e)f(ti)s(me,)0 1357 y(and)c(is)i(i)s(ntend)-5 b(e)l(d)55 b(to)i(all)n(ow)g(th)l(e)f(g)n(en)n(e)l(ra)-8 b(tio)l(n)55 b(of)i(l)n(og)f(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)56 b(a)-8 b(t)57 b(wha)-8 b(teve)l(r)55 b(l)n(eve)l(l)j(of)f (d)-5 b(e)e(t)s(ail)57 b(is)g(d)-5 b(e)o(s)n(ir)q(e)l(d)58 b(by)0 1556 y(th)l(e)d(u)-7 b(s)m(e)l(r)d(.)73 b(T)8 b(h)l(e)55 b(paran)m(oid)g(c)-7 b(h)l(ec)f(ks)55 b(ar)q(e)h(ena)l(b)l (l)n(e)l(d)f(wh)l(en)f(th)l(e)h(sy)7 b(mbo)-5 b(l)54 b FJ(P)-17 b(ARANOIA)54 b FP(is)i(d)-5 b(e)l(\002)s(n)n(e)l(d)55 b(a)-8 b(t)55 b(c)l(o)n(mpil)n(e)h(ti)s(me)0 1756 y(and)c(ar)q(e)h(i)s (ntend)-5 b(e)l(d)52 b(to)h(pr)q(ovid)-5 b(e)52 b(s)n(igni\002cant)g (\(and)g(e)-5 b(xpens)n(ive\))53 b(c)-8 b(r)q(os)j(s-c)e(h)l(ec)f(ks)53 b(d)-7 b(ur)s(i)s(n)n(g)51 b(c)l(od)-5 b(e)53 b(d)-5 b(eve)l(l)n(o)g(pment.)0 2348 y Fu(19.1)197 b(Pr)r(intin)-7 b(g)0 2768 y FP(T)8 b(h)l(e)66 b(amo)-5 b(unt)64 b(of)i(o)-5 b(u)l(tp)g(u)l(t)65 b(g)n(en)n(e)l(ra)-8 b(te)l(d)64 b(by)70 b FM(D)8 b(Y)g(L)g(P)71 b FP(can)66 b(be)g(v)r(ar)s(ie)l(d)f (fr)q(o)n(m)i(n)n(e)-5 b(xt)65 b(to)h(n)m(othi)s(n)n(g)d(to)i(a)i(l)n (eve)l(l)f(of)g(d)-5 b(e)e(t)s(ail)0 2967 y(i)s(ntend)i(e)l(d)50 b(o)l(nly)g(fo)-7 b(r)52 b(d)-5 b(e)e(t)s(ail)n(e)l(d)52 b(d)-5 b(e)l(b)d(u)l(gg)t(i)s(n)n(g.)61 b(T)8 b(h)l(e)52 b(paragra)-6 b(p)g(hs)50 b(whic)-7 b(h)50 b(fo)-5 b(ll)n(ow)51 b(b)-5 b(r)s(ie)l(\003y)51 b(o)-5 b(u)l(tli)s(n)n(e)50 b(th)l(e)h(ca)-6 b(pa)l(bilitie)o(s;)0 3166 y(fo)f(r)53 b(s)-8 b(pec)m(i\002c)52 b(o)-5 b(u)l(tp)g(u)l(t)52 b(a)-8 b(t)53 b(a)g(g)t(iven)f(pr)s(i)s(nt)h(l)n(eve)l(l,)g(pl)n(eas)m(e)g(r)q (e)l(fe)l(r)g(to)g(th)l(e)f(\002l)n(e)h FJ(dylp.h)p FP(.)466 3631 y Fd(basis)164 b FP(Pr)s(i)s(nts)46 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)44 b(r)q(e)l(la)-8 b(te)l(d)45 b(to)h(manag)n(e)n(ment)e(of)i(th)l(e)f(bas)n(is,)j(i)s(ncl)n(udi)s(n)n (g)c(a)-6 b(dj)f(u)g(s)i(tments)46 b(to)g(s)-8 b(u)i(p-)996 3830 y(pr)q(e)o(s)h(s)54 b(n)n(ume)l(r)s(ical)e(i)s(ns)-5 b(t)s(a)l(bility)52 b(and)g(r)q(ec)l(ove)l(r)h(fr)q(o)n(m)g(s)n(i)s(n)n (g)n(u)l(lar)s(ity)-17 b(.)125 4162 y Fd(conmgmt)165 b FP(Pr)s(i)s(nts)68 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)66 b(o)l(n)i(th)l(e)f(manag)n(e)n(ment)f(of)i(c)l(o)l(ns)-5 b(trai)s(nts,)71 b(i)s(ncl)n(udi)s(n)n(g)66 b(a)n(c)-5 b(tiv)r(a)d(tio)l(n)66 b(and)i(d)-5 b(e-)996 4362 y(a)n(c)g(tiv)r(a)d (tio)l(n,)79 b(c)-7 b(han)n(g)n(e)o(s)74 b(to)h(pr)s(i)s(mal)h(and)e(d) -7 b(ual)75 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)81 b(and)75 b(\(a)-8 b(t)75 b(th)l(e)g(high)l(e)o(s)-5 b(t)74 b(l)n(eve)l(l\))h(a)h (run-)996 4561 y(ni)s(n)n(g)e(c)l(o)n(mment)s(ary)i(o)l(n)f(all)h(c)l (o)l(ns)-5 b(trai)s(nt)75 b(and)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)i(a)-6 b(dditio)l(ns,)80 b(d)-5 b(e)l(l)n(e)e(tio)l(ns,)82 b(and)75 b(motio)l(ns)996 4760 y(a)-8 b(ttr)s(ib)g(u)l(t)s(a)l(b)l(l)n(e)52 b(to)h(a)n(c)-5 b(tiv)r(a)d(tio)l(n)51 b(and)h(d)-5 b(ea)n(c)g(tiv)r(a) d(tio)l(n)51 b(of)i(c)l(o)l(ns)-5 b(trai)s(nts.)433 5092 y Fd(crash)164 b FP(Pr)s(i)s(nts)65 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)64 b(r)q(e)-5 b(gar)q(di)s(n)n(g)64 b(th)l(e)h(g)n(en)n(e)l(ra)-8 b(tio)l(n)63 b(of)i(th)l(e)g(i)s(niti)s (al)g(bas)n(is,)k(i)s(ncl)n(udi)s(n)n(g)63 b(fa)n(c)-5 b(to)e(r)s(i)s(n)n(g,)996 5291 y(th)l(e)49 b(i)s(niti)s(al)f(s)m(e)-7 b(t)50 b(of)f(bas)n(ic)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,)i(and)e(th)l (eir)f(v)r(al)n(u)l(e)o(s.)64 b(Fo)-7 b(r)50 b(a)f(c)l(o)-5 b(ld)49 b(s)-5 b(t)s(art,)50 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)47 b(o)l(n)i(th)l(e)996 5491 y(s)m(e)l(l)n(ec)-5 b(tio)l(n)52 b(of)h(th)l(e)g(bas)n(ic)g(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s) h(can)e(be)h(pr)s(i)s(nte)l(d.)352 5823 y Fd(degen)164 b FP(Pr)s(i)s(nts)74 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)72 b(a)l(bo)-5 b(u)l(t)73 b(d)-5 b(e)g(g)n(en)n(e)l(ra)d(te)72 b(pivots)i(and)f(r)q(e)o(s)-5 b(tr)s(ic)g(te)l(d)74 b(s)-8 b(u)h(bpr)q(o)f(b)l(l)n(e)n(m)72 b(fo)-7 b(r)5 b(ma)-8 b(tio)l(n)72 b(to)996 6022 y(d)-5 b(eal)53 b(with)f(d)-5 b(e)g(g)n(en)n(e)l(ra)n(cy)-17 b(.)507 6354 y Fd(dual)165 b FP(Pr)s(i)s(nts)59 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)58 b(a)l(bo)-5 b(u)l(t)58 b(th)l(e)h(e)-5 b(xecu)l(tio)l(n)58 b(of)h(th)l(e)g(d)-7 b(ual)58 b(s)n(i)s(mpl)n(e)-5 b(x,)62 b(with)57 b(ca)-6 b(pa)l(bilitie)o(s)59 b(s)n(i)s(m)s(ilar)996 6553 y(to)53 b FJ(phase1)p FP(.)409 6885 y Fd(major)165 b FP(T)6 b(ra)n(c)-8 b(ks)62 b(th)l(e)f(majo)-7 b(r)63 b(s)-5 b(t)s(a)d(te)62 b(trans)n(itio)l(ns)f(of)h(th)l(e)g(dy)7 b(nam)s(ic)61 b(s)n(i)s(mpl)n(e)-5 b(x)62 b(algo)-7 b(r)s(ithm)62 b(as)k FM(D)8 b(Y)g(L)g(P)68 b FP(s)n(o)-5 b(lve)o(s)996 7085 y(an)53 b(L)s(P)-10 b(.)298 7417 y Fd(phase1)164 b FP(Pr)s(i)s(nts)64 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)61 b(a)l(bo)-5 b(u)l(t)63 b(th)l(e)g(e)-5 b(xecu)l(tio)l(n)63 b(of)g(p)-6 b(has)m(e)63 b(I)h(of)g(th)l(e)f(pr)s(i)s(mal)g(s)n(i)s (mpl)n(e)-5 b(x.)98 b(At)64 b(th)l(e)f(l)n(ow)996 7616 y(end,)50 b(me)o(s)-5 b(sag)n(e)o(s)50 b(ar)q(e)g(pr)s(i)s(nte)l(d)f (fo)-7 b(r)50 b(e)-5 b(xtrao)e(r)q(di)s(nary)49 b(events)g(\227)h(un)m (bo)-5 b(und)g(e)l(dn)n(e)o(s)g(s,)48 b(s)m(e)l(r)s(io)-5 b(u)e(s)50 b(pivot-)996 7815 y(i)s(n)n(g)43 b(pr)q(o)-8 b(b)l(l)n(e)n(ms,)46 b FG(etc)p FP(.)62 b(At)44 b(a)h(me)l(dium)f(l)n (eve)l(l,)i(a)f(o)l(n)n(e)f(li)s(n)n(e)h(me)o(s)-5 b(sag)n(e)44 b(is)h(pr)s(i)s(nte)l(d)f(s)-8 b(ummar)s(is)n(i)s(n)n(g)43 b(ea)n(c)-7 b(h)996 8015 y(pivot,)63 b(as)f(we)l(ll)f(as)g(me)o(s)-5 b(sag)n(e)o(s)62 b(a)l(bo)-5 b(u)l(t)61 b(r)q(o)-5 b(u)l(ti)s(n)n(e)61 b(b)-8 b(u)l(t)60 b(i)s(nfr)q(eq)l(u)l(ent)h(events)g(\227)h(r)q(e)l (fa)n(c)-5 b(to)e(r)s(i)s(n)n(g,)62 b(a)n(ccu-)996 8214 y(ra)n(cy)j(c)-7 b(h)l(ec)f(ks,)69 b(and)c(v)r(ar)s(io)-5 b(u)e(s)65 b(m)s(i)s(n)m(o)-7 b(r)65 b(pr)q(o)-8 b(b)l(l)n(e)n(ms.)103 b(At)65 b(th)l(e)g(high)l(e)o(s)-5 b(t)64 b(l)n(eve)l(l,)69 b(all)c(pr)s(i)s(mal)h(and)f(d)-7 b(ual)996 8413 y(v)r(ar)s(i)s(a)l(b)l (l)n(e)o(s)47 b(ar)q(e)f(pr)s(i)s(nte)l(d)f(as)h(th)l(ey)e(ar)q(e)i(r)q (ecalcu)l(la)-8 b(te)l(d)45 b(fo)-7 b(r)46 b(ea)n(c)-7 b(h)45 b(pivot,)i(al)n(o)l(n)n(g)d(with)g(d)-5 b(e)e(t)s(ail)n(e)l(d)47 b(i)s(nfo)-7 b(r)11 b(-)996 8612 y(ma)-8 b(tio)l(n)54 b(a)l(bo)-5 b(u)l(t)54 b(r)q(e)l(d)-7 b(u)i(c)g(tio)l(n)53 b(of)h(i)s(nfeas)n(ibility)g(and)g(c)-7 b(han)n(g)n(e)o(s)54 b(to)h(th)l(e)f(p)-6 b(has)m(e)54 b(I)i(o)-8 b(bj)l(ec)j(tive)54 b(func)-5 b(tio)l(n.)996 8812 y(T)8 b(his)53 b(is)g FG(an)c(enor)6 b(mous)48 b(amount)64 b FP(of)52 b(o)-5 b(u)l(tp)g(u)l(t)52 b(fo)-7 b(r)53 b(larg)n(e)e(pr)q(o)-8 b(b)l(l)n(e)n(ms.)298 9144 y Fd(phase2)164 b FP(Pr)s(i)s(nts)59 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)58 b(a)l(bo)-5 b(u)l(t)59 b(th)l(e)g(e)-5 b(xecu)l(tio)l(n)58 b(of)h(p)-6 b(has)m(e)60 b(II)g(of)f(th)l(e)g(pr)s (i)s(mal)g(s)n(i)s(mpl)n(e)-5 b(x,)62 b(with)c(ca)-6 b(pa-)996 9343 y(bilitie)o(s)53 b(s)n(i)s(m)s(ilar)g(to)g FJ(phase1)p FP(.)250 9675 y Fd(piv)m(oting)164 b FP(Pr)s(i)s(nts)58 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)56 b(o)l(n)h(th)l(e)h(ev)r(al)n (ua)-8 b(tio)l(n)57 b(of)h(candida)-8 b(te)o(s)57 b(fo)-7 b(r)58 b(th)l(e)g(l)n(ea)-7 b(vi)s(n)n(g)56 b(pr)s(i)s(mal)j(o)-7 b(r)58 b(ente)l(r)s(i)s(n)n(g)996 9874 y(d)-7 b(ual)48 b(v)r(ar)s(i)s(a)l(b)l(l)n(e)g(and)g(d)-5 b(e)e(t)s(ails)49 b(of)f(th)l(e)f(pivot)h(c)l(o)-5 b(l)n(umn)48 b(o)-7 b(r)48 b(r)q(ow.)63 b(At)48 b(l)n(eas)-5 b(t)49 b(o)l(n)n(e)f(li)s(n)n (e)g(pe)l(r)g(pivot;)i(a)-8 b(t)48 b(th)l(e)996 10073 y(high)l(e)o(s)-5 b(t)52 b(l)n(eve)l(l,)h(pr)q(od)-7 b(u)i(c)f(e)o(s)53 b FG(a)c(lot)65 b FP(of)53 b(o)-5 b(u)l(tp)g(u)l(t.)194 10406 y Fd(pivr)o(eject)164 b FP(Pr)s(i)s(nts)53 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)51 b(o)l(n)h(th)l(e)g(o)-5 b(pe)l(ra)d(tio)l(n)52 b(of)k FM(D)8 b(Y)g(L)g(P)t FP(')-5 b(s)54 b(pivot)f(r)q(ej)l(ec)-5 b(tio)l(n)52 b(mec)-7 b(hanism.)3771 11400 y(89)p eop end %%Page: 90 93 TeXDict begin 90 92 bop 325 466 a Fd(pr)s(icing)164 b FP(Pr)s(i)s(nts)48 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)47 b(r)q(e)-5 b(gar)q(di)s(n)n(g)46 b(th)l(e)i(pr)s(ic)m(i)s(n)n(g)e(of)i (candida)-8 b(te)o(s)48 b(fo)-7 b(r)48 b(th)l(e)g(ente)l(r)s(i)s(n)n(g) f(pr)s(i)s(mal)h(o)-7 b(r)48 b(l)n(ea)-7 b(v-)996 665 y(i)s(n)n(g)49 b(d)-7 b(ual)48 b(v)r(ar)s(i)s(a)l(b)l(l)n(e.)65 b(At)50 b(any)f(l)n(eve)l(l)h(a)l(bove)f(1)h(yo)-5 b(u'll)48 b(g)n(e)-7 b(t)49 b FG(many)h FP(li)s(n)n(e)o(s)g(of)g(o)-5 b(u)l(tp)g(u)l(t)48 b(pe)l(r)i(pivot;)g(tha)-8 b(t')j(s)996 865 y FG(an)50 b(enor)6 b(mous)48 b(amount)63 b FP(of)53 b(o)-5 b(u)l(tp)g(u)l(t)52 b(fo)-7 b(r)53 b(larg)n(e)e(pr)q(o)-8 b(b)l(l)n(e)n(ms.)310 1197 y Fd(scaling)164 b FP(Pr)s(i)s(nts)53 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)51 b(r)q(e)-5 b(gar)q(di)s(n)n(g) 51 b(n)n(ume)l(r)s(ical)h(scali)s(n)n(g)g(of)h(th)l(e)f(c)l(o)l(ns)-5 b(trai)s(nt)52 b(sys)-5 b(te)n(m.)436 1529 y Fd(setup)164 b FP(Pr)s(i)s(nts)56 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)55 b(r)q(e)-5 b(gar)q(di)s(n)n(g)54 b(th)l(e)i(l)n(oa)-6 b(di)s(n)n(g)54 b(and)i(i)s(niti)s(alisa)-8 b(tio)l(n)54 b(of)j(an)e(L)s(P)h(pr)q(o)-8 b(b)l(l)n(e)n(m,)56 b(i)s(ncl)n(ud-)996 1728 y(i)s(n)n(g)c(th)l(e)h(c)l(o)l(ns)-5 b(trai)s(nts)53 b(and)f(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s)i(whic)-7 b(h)52 b(ar)q(e)i(a)n(c)-5 b(tiv)r(a)d(te)l(d)53 b(and)f(th)l(e)h(an)n(gl)n(e) g(of)g(i)s(n)n(eq)l(ualitie)o(s)g(to)996 1927 y(th)l(e)g(o)-8 b(bj)l(ec)j(tive)52 b(func)-5 b(tio)l(n.)178 2259 y Fd(v)l(ar)r(mgmt) 165 b FP(Pr)s(i)s(nts)51 b(i)s(nfo)-7 b(r)5 b(ma)-8 b(tio)l(n)49 b(o)l(n)h(th)l(e)h(a)n(c)-5 b(tiv)r(a)d(tio)l(n)49 b(and)i(d)-5 b(ea)n(c)g(tiv)r(a)d(tio)l(n)49 b(of)i(v)r(ar)s(i)s(a)l(b)l(l)n(e)o(s,) h(m)l(u)-5 b(c)e(h)50 b(as)i FJ(conmgmt)p FP(.)0 2852 y Fu(19.2)197 b(Paranoia)0 3271 y FP(Beca)-8 b(u)h(s)m(e)51 b(it)g(is)g(i)s(ntend)-5 b(e)l(d)50 b(as)h(a)h(d)-5 b(eve)l(l)n(o)g (pment)50 b(c)l(od)-5 b(e,)55 b FM(D)8 b(Y)g(L)g(P)57 b FP(i)s(nc)l(o)-7 b(rpo)g(ra)f(te)o(s)51 b(a)g(larg)n(e)f(n)n(umbe)l (r)g(of)h(sanity)f(c)-7 b(h)l(ec)f(ks,)0 3470 y(ena)l(b)l(l)n(e)l(d)57 b(by)h(d)-5 b(e)l(\002)s(ni)s(n)n(g)56 b(th)l(e)h(c)l(o)l(nditio)l(nal) f(c)l(o)n(mpila)-8 b(tio)l(n)56 b(sy)7 b(mbo)-5 b(l)57 b FJ(P)-17 b(ARANOIA)p FP(.)56 b(Many)g(of)i(th)l(e)o(s)m(e)g(te)o(s)-5 b(ts)59 b(ar)q(e)f(c)-7 b(h)l(ea)h(p)0 3670 y(and)59 b(s)n(i)s(mpl)n(e)i(\227)e(c)-7 b(h)l(ec)f(ks)60 b(fo)-7 b(r)60 b(n)n(u)l(ll)e(parame)-7 b(te)l(rs,)62 b(s)m(ens)n(ib)l(l)n(e)e (c)l(o)l(ns)-5 b(trai)s(nt)58 b(and)h(v)r(ar)s(i)s(a)l(b)l(l)n(e)h(c)l (o)-5 b(unts,)61 b(pr)q(o)-5 b(pe)l(r)59 b(majo)-7 b(r)0 3869 y(p)h(has)m(e,)52 b(and)h(ran)n(g)n(e)e(c)-7 b(h)l(ec)f(ks)53 b(o)l(n)f(i)s(ndic)-6 b(e)o(s.)65 b(Oth)l(e)l(rs)52 b(ar)q(e)i(mo)-7 b(r)q(e)53 b(e)l(la)l(bo)-7 b(ra)f(te)52 b(and)h(e)-5 b(xpens)n(ive.)249 4168 y(T)8 b(h)l(e)l(r)q(e)56 b(ar)q(e)h(two)e(d)-5 b(e)l(dica)d(te)l(d)56 b(s)-8 b(u)h(b)i(r)q(o)g(u)l(ti)s(n)n(e)o(s)55 b(whic)-7 b(h)55 b(ar)q(e)i(u)-7 b(s)m(e)l(d)56 b(a)-8 b(t)56 b(s)m(eve)l(ral)g(poi)s(nts)g(to)g(c)-7 b(h)l(ec)f(k)56 b(th)l(e)g(i)s(nte)-5 b(gr)s(ity)55 b(of)0 4367 y(th)l(e)d(curr)q(ent)h (s)n(i)s(mpl)n(e)-5 b(x)53 b(poi)s(nt)f(\()r(bas)n(is,)i(s)-5 b(t)s(a)d(t)l(u)h(s,)53 b(and)f(pr)s(i)s(mal)h(v)r(ar)s(i)s(a)l(b)l(l)n (e)g(v)r(al)n(u)l(e)o(s\))h(and)e(th)l(e)g(c)l(o)l(ns)-5 b(trai)s(nt)52 b(sys)-5 b(te)n(m:)217 4799 y Fo(e)82 b FJ(dy_chkstatus)50 b FP(i)s(mpl)n(e)n(ments)g(e)-5 b(xtens)n(ive)51 b(c)-7 b(h)l(ec)f(ks)51 b(to)f(make)h(s)-8 b(ur)q(e)51 b(tha)-8 b(t)49 b(th)l(e)i(s)-5 b(t)s(a)d(t)l(u)h(s)51 b(and)f(v)r(al)n(u)l(e)h(of)f(a)h(pr)s(i)s(mal)415 4998 y(v)r(ar)s(i)s(a)l(b)l(l)n(e)80 b(agr)q(ee)g(a)n(c)-8 b(r)q(os)j(s)80 b(m)l(u)l(ltipl)n(e)e(da)-8 b(t)s(a)80 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)80 b(and)f(ar)q(e)h(a)-6 b(p)e(pr)q(o)j(pr)s(i)s(a)d(te)80 b(fo)-7 b(r)80 b(th)l(e)f(curr)q(ent) g(majo)-7 b(r)415 5197 y(p)h(has)m(e.)217 5529 y Fo(e)82 b FJ(dy_chkdysys)77 b FP(i)s(mpl)n(e)n(ments)f(e)-5 b(xtens)n(ive)76 b(c)-7 b(h)l(ec)f(ks)76 b(to)g(ens)-8 b(ur)q(e)76 b(tha)-8 b(t)75 b(th)l(e)h(a)n(c)-5 b(tive)76 b(c)l(o)l(ns)-5 b(trai)s(nt)75 b(sys)-5 b(te)n(m)76 b(and)415 5729 y(as)-5 b(s)n(oc)m(i)s(a)d(te)l(d)52 b(da)-8 b(t)s(a)53 b(s)-5 b(tru)g(c)g(t)l(ur)q(e)o(s)53 b(ar)q(e)g(c)l(o)-7 b(rr)q(ec)i(t)54 b(and)e(c)l(o)l(ns)n(is)-5 b(tent.)249 6160 y(T)8 b(h)l(e)l(r)q(e)53 b(is)g(an)m(oth)l(e)l(r)f(s)m(e)-7 b(t)54 b(of)f(c)-7 b(h)l(ec)f(ks)53 b(whic)-7 b(h)52 b(tra)n(c)-8 b(k)53 b(th)l(e)f(n)n(ume)l(r)s(ical)h(a)n(ccura)n(cy)g(of)g(calcu)l(la)-8 b(tio)l(ns)52 b(by)h(pe)l(r)5 b(fo)-7 b(r)5 b(m-)0 6360 y(i)s(n)n(g)59 b(an)g(i)s(nd)-5 b(e)e(pend)i(ent)59 b(calcu)l(la)-8 b(tio)l(n)59 b(of)h(a)g(q)l(uantity)-17 b(.)86 b(T)8 b(h)l(e)o(s)m(e)60 b(ar)q(e)g(of)g(littl)n(e)g(u)-7 b(s)m(e)60 b(unl)n(e)o(s)-5 b(s)60 b(th)l(e)l(r)q(e)g(is)g(s)n(o)n(me)g(r)q(eas)n (o)l(n)0 6559 y(to)53 b(do)-5 b(u)e(b)h(t)51 b(th)l(e)i(c)l(o)-7 b(rr)q(ec)i(tn)n(e)o(s)g(s)54 b(of)e(th)l(e)h(calcu)l(la)-8 b(tio)l(n,)51 b(h)l(enc)-6 b(e)52 b(th)l(e)h(s)m(e)-7 b(para)f(te)53 b(c)l(o)l(nditio)l(nal)d(c)l(o)n(mpila)-8 b(tio)l(n)51 b(sy)7 b(mbo)-5 b(ls.)217 6991 y Fo(e)82 b FP(Ch)l(ec)-8 b(ks)47 b(o)l(n)g(th)l(e)g(a)n(ccura)n(cy)g(of)h(th)l (e)f(calcu)l(la)-8 b(tio)l(ns)47 b(to)h(pr)q(od)-7 b(u)i(c)f(e)47 b(unscal)n(e)l(d)g(r)q(ows)h(of)f(th)l(e)h(bas)n(is)g(i)s(nve)l(rs)m(e) g(ar)q(e)415 7190 y(c)l(o)l(ntr)q(o)-5 b(ll)n(e)l(d)52 b(by)g(th)l(e)g(sy)7 b(mbo)-5 b(l)52 b FJ(CHECK_UNSC)-6 b(ALED_BET)f(AI)p FP(.)217 7522 y Fo(e)82 b FP(Ch)l(ec)-8 b(ks)49 b(o)l(n)f(th)l(e)h(a)n(ccura)n(cy)g(of)h(ite)l(ra)-8 b(tive)49 b(u)-6 b(pda)e(ti)s(n)n(g)47 b(fo)-7 b(r)50 b(PSE)e(c)l(o)-5 b(l)n(umn)49 b(n)m(o)-7 b(r)5 b(ms)49 b(and)g(DSE)f(r)q(ow)h(n)m(o)-7 b(r)5 b(ms)49 b(ar)q(e)415 7721 y(c)l(o)l(ntr)q(o)-5 b(ll)n(e)l(d)39 b(by)h(th)l(e)g(c)l(o)l (nditio)l(nal)d(c)l(o)n(mpila)-8 b(tio)l(n)39 b(sy)7 b(mbo)-5 b(ls)39 b FJ(CHECK_PSE_UPD)-7 b(A)g(TES)42 b FP(and)e FJ(CHECK_DSE_UPD)-7 b(A)g(TES)p FP(.)415 7920 y(T)8 b(h)l(e)o(s)m(e)59 b(c)-7 b(h)l(ec)f(ks)59 b(calcu)l(la)-8 b(te)59 b(th)l(e)f(n)m(o)-7 b(r)5 b(ms)59 b(dir)q(ec)-5 b(tly)58 b(fo)-7 b(r)59 b(c)l(o)n(mpar)s(is)n(o)l(n)f(with)g(th)l(e)g (u)-6 b(pda)e(te)l(d)58 b(v)r(al)n(u)l(e)o(s,)j(and)e(th)l(e)415 8120 y(c)l(o)n(mp)-5 b(u)l(t)s(a)d(tio)l(nal)51 b(e)-5 b(xpens)m(e)53 b(is)g(una)n(cc)-6 b(e)f(pt)s(a)l(b)l(l)n(e)53 b(unl)n(e)o(s)-5 b(s)53 b(th)l(e)l(r)q(e)f(is)h(s)-8 b(pec)m(i\002c)52 b(r)q(eas)n(o)l(n)g(to)h(s)-8 b(u)h(s)f(pec)j(t)53 b(an)f(e)l(rr)q(o)-7 b(r)d(.)3771 11400 y(90)p eop end %%Page: 91 94 TeXDict begin 91 93 bop 0 475 a FL(Re)l(fe)-6 b(r)n(en)f(c)f(es)115 925 y FP([)-14 b(1)i(])82 b(R.)51 b(Bixby)-17 b(.)67 b(Impl)n(e)n(menti)s(n)n(g)49 b(th)l(e)h(Si)s(mpl)n(e)-5 b(x)51 b(Me)-7 b(th)n(od:)64 b(T)8 b(h)l(e)51 b(Initi)s(al)f(Bas)n(is.) 69 b FG(ORSA)48 b(Jour)6 b(nal)48 b(on)g(Computing)p FP(,)374 1125 y(4\(3\):267\226284,)j(Summe)l(r)h(1992.)89 1457 y([2])82 b(COIN-OR)52 b(\(Co)n(mmo)l(n)g(Infras)-5 b(tru)g(c)g(t)l(ur)q(e)52 b(fo)-7 b(r)53 b(Ope)l(ra)-8 b(tio)l(ns)51 b(Re)o(s)m(ear)q(c)-7 b(h\).)374 1656 y(A)q(v)r(aila)l(b) l(l)n(e)52 b(a)-8 b(t)53 b FO(http://www.coin-or.org)p FP(.)89 1988 y([3])82 b(J)-12 b(.)53 b(Fo)-7 b(rr)q(e)o(s)i(t)54 b(and)f(D)-13 b(.)53 b(Go)-5 b(ldfarb.)72 b(Stee)-7 b(pe)o(s)i(t-e)l (dg)n(e)54 b(s)n(i)s(mpl)n(e)-5 b(x)54 b(algo)-7 b(r)s(ithms)52 b(fo)-7 b(r)54 b(li)s(n)n(ear)g(pr)q(ogramm)s(i)s(n)n(g.)71 b FG(Math-)374 2187 y(ematic)n(al)50 b(Pr)o(ogr)m(amming)p FP(,)h(57:341)-17 b(\226374,)52 b(1992.)89 2519 y([4])82 b(L)s(.)71 b(Hafe)l(r)-10 b(.)119 b(A)70 b(Note)h(o)l(n)f(th)l(e)g(Re)l (la)-8 b(tio)l(ns)g(hip)67 b(of)k(Pr)s(i)s(mal)g(and)f(Dual)g(Si)s(mpl) n(e)-5 b(x.)119 b(T)r(ec)-7 b(hnical)70 b(Re)-7 b(po)g(rt)71 b(SFU-)374 2719 y(C)m(MP)5 b(T)65 b(TR)g(1998-21,)k(Sc)-7 b(h)n(oo)i(l)66 b(of)g(Co)n(mp)-5 b(u)l(ti)s(n)n(g)64 b(Sc)m(ienc)-6 b(e,)69 b(Si)s(mo)l(n)c(Fras)m(e)l(r)h(Unive)l(rs)n(ity) -17 b(,)68 b(Bur)5 b(na)l(by)-17 b(,)68 b(B.C)-7 b(.,)374 2918 y(V5A)53 b(1S6,)f(Dec)-6 b(e)n(mbe)l(r)52 b(1998.)89 3250 y([5])82 b(L)s(.)61 b(Hafe)l(r)-10 b(.)95 b FM(C)8 b(O)g(N)g(S)g(Y)g(S)t FP(:)83 b(a)61 b(dy)7 b(nam)s(ic)59 b(c)l(o)l(ns)-5 b(trai)s(nt)60 b(sys)-5 b(te)n(m.)91 b(T)r(ec)-7 b(hnical)60 b(Re)-7 b(po)g(rt)61 b(SFU-C)m(MP)5 b(T)58 b(TR)i(1998-22,)374 3449 y(Sc)-7 b(h)n(oo)i(l)61 b(of)g(Co)n(mp)-5 b(u)l(ti)s(n)n(g)59 b(Sc)m(ienc)-6 b(e,)63 b(Si)s(mo)l(n)d(Fras)m(e)l(r)i(Unive)l(rs)n(ity)-17 b(,)62 b(Bur)5 b(na)l(by)-17 b(,)62 b(B.C)-7 b(.,)63 b(V5A)f(1S6,)g(Dec)-6 b(e)n(mbe)l(r)374 3649 y(1998.)89 3981 y([6])82 b(A.)53 b(Makh)n(o)-7 b(r)s(i)s(n.)70 b(GL)s(PK)52 b(\(GNU)g(L)s(i)s(n)n(ear)h(Pr)q(ogramm)s(i)s(n)n(g)e(Kit\).)374 4180 y(A)q(v)r(aila)l(b)l(l)n(e)h(a)-8 b(t)53 b FO (http://www.gnu.org/softwar)o(e/g)o(lp)o(k/g)o(lpk)o(.ht)o(ml)o FP(.)89 4512 y([7])82 b(A.)43 b(Makh)n(o)-7 b(r)s(i)s(n.)51 b(GL)s(PK)42 b(L)s(i)s(n)n(ear)h(Pr)q(ogramm)s(i)s(n)n(g)e(Kit:)60 b(Impl)n(e)n(ment)s(a)-8 b(tio)l(n)41 b(of)i(th)l(e)g(Revis)m(e)l(d)f (Si)s(mpl)n(e)-5 b(x)43 b(Me)-7 b(th)n(od.)374 4711 y(Glpk)52 b(document)s(a)-8 b(tio)l(n,)51 b(Mosc)l(ow)h(A)q(vi)s(a)-8 b(tio)l(n)52 b(Ins)-5 b(tit)l(u)l(te,)52 b(Mosc)l(ow,)f(Ru)-7 b(s)i(s)n(i)s(a,)54 b(Fe)l(b)-5 b(ruary)52 b(2001.)89 5043 y([8])82 b(I.)76 b(Mar)q(os.)132 b FG(Comput)m(ational)69 b(T)q(echniques)f(of)j(the)f(Simple)-8 b(x)70 b(Method)p FP(.)131 b(Kl)n(uwe)l(r)74 b(Aca)-6 b(d)h(e)n(m)s(ic)75 b(Pu)-7 b(b)l(lis)f(h)l(e)l(rs,)374 5243 y(No)h(rwe)l(ll,)52 b(Mas)-5 b(sa)n(c)e(hu)g(s)m(e)g(tts,)53 b(2003.)89 5575 y([9])82 b(M.)44 b(Pa)-6 b(dbe)l(rg.)54 b FG(L)10 b(ine)m(a)s(r)41 b(Optimization)h(and)g(Extensions)p FP(,)h(vo)-5 b(l)n(ume)45 b(12)f(of)g FG(Algor)s(ithms)e(and)g(Combinator)s(ics)p FP(.)374 5774 y(Spr)s(i)s(n)n(g)n(e)l(r)11 b(-V)-12 b(e)l(rlag,)51 b(New)h(Y)-9 b(o)i(rk,)53 b(1995.)0 6106 y([)-14 b(10])82 b(D)-13 b(.)53 b(R)10 b(yan)52 b(and)h(M.)g(Osbo)-7 b(r)5 b(n)n(e.)73 b(On)53 b(th)l(e)g(So)-5 b(l)n(u)l(tio)l(n)52 b(of)h(Highly)f(De)-5 b(g)n(en)n(e)l(ra)d(te)53 b(L)s(i)s(n)n(ear)g(Pr) q(ogramme)o(s.)73 b FG(Mathe-)374 6305 y(matic)n(al)50 b(Pr)o(ogr)m(amming)p FP(,)i(41:385\226392,)f(1988.)3771 11400 y(91)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF DyLP-1.10.4/DyLP/doc/accuracy.tex0000644000175200017520000001001411263240452014737 0ustar coincoin \section{Accuracy Checks and Maintenance} \label{sec:AccuracyChecks} Primal and dual accuracy checks, primal and dual feasibility checks, and factoring of the basis can be requested through the routine \pgmid{dy_accchk}; each action can be requested separately. \dylp refactors the basis and performs accuracy checks at regular intervals, based on a count of pivots which actually change the basis. By default, primal and dual accuracy checks are performed at twice this frequency. During phase II of the primal and dual simplex algorithms, the appropriate feasibility check is performed following each accuracy check. \pgmid{dy_duenna} tracks the pivot count and requests checks and factoring at the scheduled intervals. \pgmid{dy_accchk} uses \pgmid{dy_factor} to factor the basis and recalculate the primal and dual variables. When the basis has been factored and has passed the accuracy checks, the routine \pgmid{groombasis} checks that the status of the basic variables matches their values and makes any necessary adjustments. Failure of an accuracy check will cause the basis to be refactored. Failure of an accuracy check immediately after refactoring will cause the current pivot selection tolerances to be tightened by one increment before another attempt is made. \pgmid{dy_accchk} will repeat this cycle until the accuracy checks are satisfied or there's no more room to tighten the pivot selection parameters. On the other hand, each time that an accuracy check is passed without refactoring the basis, the current pivot selection tolerances are loosened by one increment, to a floor given by the minimum pivot selection tolerance. The minimum pivot selection tolerance is reset to the loosest possible setting at the start of each simplex phase. If \pgmid{groombasis} detects and corrects major status errors (indicating that an unacceptable amount of inaccuracy accumulated since the basis was last factored), it will raise the minimum pivot selection tolerance. Similarly, if the primal phase~I objective is found to be incorrect, or primal or dual feasibility is lost when attempting to verify an optimal solution, the current and minimum pivot selection tolerances will be raised before returning to simplex pivots. Raising the minimum pivot selection tolerance provides long-term control (for the duration of a simplex phase) over reduction in the current pivot selection tolerance. The primal accuracy check is $B x^B = b - N x^N$. Comparisons are made against the scaled tolerance $\norm[1]{b}(\pgmid{dy_tols.pchk})$. To pass the primal accuracy check, it must be that \begin{equation*} \norm[1]{(b - N x^N) - B x^B} \leq \norm[1]{b}(\pgmid{dy\_tols.pchk}) \end{equation*} The dual accuracy check is $y B = c^B$. Comparisons are made against the scaled tolerance $\norm[1]{c}(\pgmid{dy_tols.dchk})$. To pass the dual accuracy check, it must be that \begin{equation*} \norm[1]{c^B - y B} \leq \norm[1]{c}(\pgmid{dy\_tols.dchk}) \end{equation*} The primal feasibility check is $l \leq x \leq u$. For each variable, it must be true that $x_j \geq l_j - (\pgmid{dy_tols.pfeas}) (1 + \abs{l_j})$ and $x_j \leq u_j + (\pgmid{dy_tols.pfeas}) (1 + \abs{u_j})$. In the implementation, only the basic variables are actually tested; nonbasic variables are assumed to be within bound as an invariant property of the simplex algorithm. $\pgmid{dy_tols.pfeas}$ is scaled from \pgmid{dy_tols.zero} as \begin{equation*} \pgmid{dy\_tols.pfeas} = \min ( 1, \log \left( \frac{\norm[1]{x_B}}{\sqrt{m}} \right)) (\pgmid{dy\_tols.zero})(\pgmid{dy_tols.pfeas_scale}). \end{equation*} The dual feasibility check is $\overline{c} = c^N - y N$ of appropriate sign. For each variable, it must be true that $\overline{c}_j \leq \pgmid{dy_tols.dfeas}$ for $x_j$ nonbasic at $u_j$ and $\overline{c}_j \geq -\pgmid{dy_tols.dfeas}$ for $x_j$ nonbasic at $l_j$. $\pgmid{dy_tols.dfeas}$ is scaled from \pgmid{dy_tols.cost} as \begin{equation*} \pgmid{dy\_tols.dfeas} = \min ( 1, \log \left( \frac{\norm[1]{y_k}}{\sqrt{m}} \right)) (\pgmid{dy\_tols.cost})(\pgmid{dy_tols.dfeas_scale}). \end{equation*} DyLP-1.10.4/DyLP/doc/statistics.tex0000644000175200017520000001576611263240452015362 0ustar coincoin \section{\dylp Statistics} \label{sec:DylpStatistics} \dylp will collect detailed statistics if the conditional compilation symbol \pgmid{DYLP_STATISTICS} is defined. The available statistics are described briefly in the paragraphs which follow; for details on subfields, consult \coderef{dylp.h}{}. Routines in the file \coderef{statistics.c}{} provide initialisation (\pgmid{dy_initstats}), printing (\pgmid{dy_dumpstats}), and release of the data structure (\pgmid{dy_freestats}). \begin{codedoc} \item \Varhdr{angle}{max, min, hist} Statistics on the angles of inequality constraints to the objective function. For constraint $i$, this is calculated as $\displaystyle \frac{180}{\pi} \cos^{-1} \frac{a_i c}{\norm{a_i}\norm{c}}$. The maximum and minimum angle is recorded, and a histogram in $\degs{5}$ increments with a dedicated $\degs{90}$ bin. \item \Varhdr{cons}{sze, angle, actcnt, deactcnt, init, fin} Information about individual constraints: the angle of the constraint with the objective function, the number of times it's activated and deactivated, and booleans to indicate if the constraint is active in the initial and final active systems. \item\Varhdr{d2}{pivs, iters} Total pivot and iteration counts for \dylp. The pivot count is the number of successful simplex pivots. The iteration count also includes pivot attempts which did not succeed for some reason (\eg, a primal pivot in which the entering variable was eventually rejected because the pivot element was numerically unstable). \item\Varhdr{ddegen}{cnt, avgsiz, maxsiz, totpivs, avgpivs, maxpivs} Statistics on the amount of time spent in restricted subproblems trying to escape dual degeneracy. For each level (\ie, each nested level of restricted subproblem), \dylp records the number of times this level was reached, the average and maximum number of variables involved in a degeneracy, the total and average number of pivots executed at this level, and the maximum number of pivots executed in any one subproblem at this level. The array is generously sized (by compile time constant) to accommodate a maximum of 25 levels. \item\Varhdr{dmulti}% {flippable, cnt, cands, promote, nontrivial, evals, flips, pivrnks, maxrnk} Statistics on the behaviour of the generalised dual pivoting algorithm. Each call to \pgmid{dualmultiin} collects a list of candidate variables to enter the basis and sorts the list. This process may produce a unique candidate for entry, or it may leave a list of requiring further evaluation to determine the best sequence of flips and final pivot. The \pgmid{flippable} field records the number of flippable variables in the problem (\ie, variables with finite lower and upper bounds). The \pgmid{cnt} field records the total number of calls to \pgmid{dualmultiin}, and \pgmid{nontrivial} records the number of times the initial scan and sort did not identify a unique entering variable. The remaining fields, with one exception, are totals. They record the number of candidates queued for evaluation, the number of times that a sane pivot was promoted over an unstable pivot, the number of columns transformed ($B^{-1}a_k$) for evaluation, the number of bound-to-bound flips, the rank in the sorted list of the variable selected to enter, and the maximum rank for a variable selected to enter. \item\Varhdr{factor}{cnt, prevpiv, avgpivs, maxpivs} Statistics about basis factoring. The \pgmid{cnt} field records the total number of times the basis was refactored. The \pgmid{avgpivs} and \pgmid{maxpivs} fields record the average and maximum number of pivots between basis refactoring. \item\Varhdr{infeas}{prevpiv, maxcnt, totpivs, maxpivs, chgcnt1, chgcnt2} Statistics on the resolution of infeasibility during primal phase I. The maximum number of infeasible variables is recorded, as well as the total pivots in phase I and the maximum number of pivots with no change in the number of infeasible variables. \dylp also counts the number of times that the number of infeasible variables changed without requiring recalculation of the reduced costs (\pgmid{chgcnt1}), and the number of times when it did (\pgmid{chgcnt2}). Specifically, if exactly one variable gains feasibility, and it leaves the basis as it does so, the reduced costs do not have to be recalculated. \item\Varhdr{p1}{pivs, iters} Total pivot and iteration counts for primal phase~1 simplex. \item\Varhdr{p2}{pivs, iters} Total pivot and iteration counts for primal phase~2 simplex. \item\Varhdr{pdegen}{cnt, avgsiz, maxsiz, totpivs, avgpivs, maxpivs} Statistics on the amount of time spent in restricted subproblems trying to escape primal degeneracy. The content of individual fields is as for \pgmid{ddgen}. \item\Varhdr{pivrej}% {max, mad, sing, pivtol_red, min_pivtol, puntcall, puntret} Statistics on the management of variables judged unsuitable for pivoting. Variables are queued on the rejected pivot list when a pivot attempt fails because the pivot element is numerically unstable or because the pivot produced a singular basis. During primal simplex, candidate entering variables are queued; during dual simplex, candidate leaving variables. The \pgmid{max} field records the maximum length of the rejected pivot list. The fields \pgmid{mad} and \pgmid{singular} record the number of variables queued for unstable pivots and singular basis, respectively. The \pgmid{puntcall} field records the number of times the routine \pgmid{dy_dealWithPunt} was called in an attempt to remove variables from the rejected pivot list. The \pgmid{pivtol_red} field records the number of times that the pivot selection multiplier was reduced in order to consider candidate variables previously rejected for numeric instability; \pgmid{min_pivtol} is the minimum multiplier value used. The \pgmid{puntret} field records the number of times \pgmid{dy_dealWithPunt} was unable to remove any candidates from the rejected pivot list and therefore recommended termination of the current simplex phase. \item\Varhdr{pmulti}{cnt, cands, nontrivial, promote} Statistics on the behaviour of the extended primal pivoting algorithm. Each call to \pgmid{primalmultiout} collects a list of candidate variables to leave the basis. This process may produce a unique candidate to leave, or it may leave a list of candidates requiring further evaluation to determine the final pivot. The \pgmid{cnt} field records the total number of calls to \pgmid{primalmultiout}, and \pgmid{nontrivial} records the number of times the initial scan did not identify a unique leaving variable. The \pgmid{promote} field records the number of times that a sane pivot was promoted over an unstable pivot, \item\Varhdr{tot}{pivs, iters} Total pivot and iteration counts for the call to \pgmid{dylp}. \item\Varhdr{vars}{sze, actcnt, deactcnt} Information about individual variables: the number of times a variable is activated and deactivated. \end{codedoc} DyLP-1.10.4/DyLP/doc/intro.tex0000644000175200017520000001232711263240452014311 0ustar coincoin\section{Introduction} \label{sec:Intro} \dylp is a linear programming (LP) code designed to be used as the underlying LP code in a branch-and-cut integer linear programming (IP) code. It emphasises convenience of use by the client, particularly with respect to fixing variables and adding and deleting constraints and variables. The target user population is IP algorithm developers; as such, \dylp emphasises controllability and convenience over efficiency and is capable of producing copious amounts of output for use in debugging. \dylp implements a dynamic simplex algorithm along the lines set out by Padberg in \cite[\S6.6]{Pad95}. The core idea is that, at any given time, many of the constraints of a LP problem are loose, and many nonbasic variables are unlikely to ever be considered for pivoting because their reduced costs are very unfavourable. A rough outline of the algorithm, neglecting unboundedness, infeasibility, and implementation issues, is as follows. From the problem supplied by the client, \dylp chooses an initial subset of constraints and variables to become the active system. This system is solved to optimality with primal simplex. \dylp then enters a minor loop where it deactivates variables whose reduced costs are worse than a threshold, activates variables whose reduced costs are favourable, and reoptimises the system with primal simplex. This minor loop is repeated until there are no more variables suitable for entry. Next, \dylp deactivates any loose constraints, activates any constraints which are violated at the current basic solution, and reoptimises with dual simplex. On regaining feasibility, it returns to primal simplex and the deactivate/activate variable loop. When there are no variables with favourable reduced costs among the inactive variables and no violated constraints among the inactive constraints, the solution is optimal. The primal simplex algorithm used by \dylp is a two-phase algorithm. Phase I uses a dynamically modified objective to attain a primal feasible solution. Both phase I and phase II use a projected steepest edge (PSE) pricing algorithm outlined by Forrest \& Goldfarb \cite[algorithm `dynamic']{For92}. There are two antidegeneracy methods. The first, referred to as `anti-degeneracy lite', attempts to resolve ties among degenerate pivots by choosing the pivot in such a way as to make tight a hyperplane which has a desirable alignment. The second, applied when the first takes too long to resolve the degeneracy, is a perturbation algorithm which builds on a method described by Ryan \& Osborne \cite{Rya88}. The dual simplex algorithm provides only a second phase with dual steepest edge (DSE) pricing \cite[algorithm `steepest 1']{For92}, standard or generalised pivoting, and implementations of anti-degeneracy lite and perturbation-based antidegeneracy in the dual space. In the context of \dylp, it is the subordinate simplex, used for reoptimisation after adding constraints and as the initial simplex when the problem is dual feasible but not primal feasible. The active and inactive constraint systems are maintained with the \consys subroutine library \cite{Haf98b}. Basis factoring and pivoting are handled using the basis maintenance package from \glpk \cite{GLPK,Mak01}. \dylp is written in C and provides a native C interface. It can be used as a standalone simplex LP code with only a minimal shell required to generate the constraint system. In the context of a branch-and-cut code, \dylp expects that the dominant mode of use will be successive calls to reoptimise a constraint system that is incrementally modified between calls. On request, it will maintain its internal state (constraint system, basis inverse, and support data structures) between calls to support efficient hot starts for reoptimisation. Because \dylp maintains this internal state, it does not provide a native capability to interleave optimisation and reoptimisation of distinct constraint systems. \dylp provides two specialised interface routines to support two queries commonly required in a branch-and-cut context, pricing a new variable and pricing a dual pivot. \dylp can be used with \coin \cite{COIN} software through the C++ \coderef{}{OsiDylp} OSI interface class. An OSI interface object maintains a copy of the constraint system as well as providing an interface to the underlying solver. Multiple \pgmid{OsiDylp} objects with distinct constraint systems can exist simultaneously and calls to optimise and reoptimise the systems can be interleaved. There is some loss of efficiency as the state of the underlying solver is changed, but the necessary bookkeeping is handled by the \pgmid{OsiDylp} objects. The next section specifies the notation used for the primal and dual problems in the remainder of the report. Sections \ref{sec:UpdatingFormulas} through \ref{sec:Startup} describe individual components of the implementation. Sections \ref{sec:DynamicSimplex} through \ref{sec:ConstraintManagement} describe the simplex algorithms and the variable and constraint management algorithms used in \dylp. %Section \ref{sec:Performance} gives performance data for \dylp on the %\netlib and \miplib problem suites. Sections \ref{sec:DylpInterface} through \ref{sec:DylpDebugging} describe the interface and parameters provided by \dylp. DyLP-1.10.4/DyLP/doc/notation.tex0000644000175200017520000001537511263240452015017 0ustar coincoin \section{Notation} \label{sec:Notation} \dylp works naturally with the minimisation problem \begin{equation} \begin{split} \min \enspace cx & \\ Ax & \leq b \\ l \leq x & \leq u \end{split} \label{Eqn:BoundedPrimal} \end{equation} Add slack variables $s$ and partition $\begin{bmatrix} A & I \end{bmatrix}$ into basic and nonbasic portions as \begin{equation*} \begin{split} \begin{bmatrix} B & N \end{bmatrix} = \left[ \begin{array}{cc|cc} B^t & 0 & N^t & I^t \\ B^l & I^l & N^l & 0 \end{array} \right] \end{split} \end{equation*} with corresponding partitions \begin{math} \trans{\begin{bmatrix} x^B & s^B & x^N & s^N \end{bmatrix}} \end{math} for $x$, $s$, and \begin{math} \trans{\begin{bmatrix} b^t & b^l\end{bmatrix}} \end{math} for $b$. The objective $c$ is augmented with 0's in the columns corresponding to the slack variables, and partitioned as \begin{math} \begin{bmatrix} c^B & 0 & c^N & 0 \end{bmatrix} \end{math}. The basis inverse will be \begin{equation} \inv{B} = \begin{bmatrix} \inv[0]{(B^t)} & 0 \\ -B^l\inv[0]{(B^t)} & I^l \end{bmatrix} \label{Eqn:PrimalBasisInverse} \end{equation} We then have \begin{equation} \begin{split} \begin{bmatrix} x^B \\ s^B \end{bmatrix} & = \, \inv{B}b - \inv{B} N \begin{bmatrix} x^N \\ s^N \end{bmatrix} \\ % & = \begin{bmatrix} \inv[0]{(B^t)} b^t \\ b^l - B^l\inv[0]{(B^t)} b^t \end{bmatrix} - \begin{bmatrix} \inv[0]{(B^t)} N^t & \inv[0]{(B^t)} \\ N^l - B^l\inv[0]{(B^t)}N^t & -B^l\inv[0]{(B^t)} \end{bmatrix} \begin{bmatrix} x^N \\ s^N \end{bmatrix} \end{split} \label{Eqn:PrimalBasicVars} \end{equation} and \begin{equation} \begin{split} z & = \begin{bmatrix} c^B & 0 \end{bmatrix} \trans{\begin{bmatrix} x^B & s^B \end{bmatrix}} + \begin{bmatrix} c^N & 0 \end{bmatrix} \trans{\begin{bmatrix} x^N & s^N \end{bmatrix}} \\ & = \begin{bmatrix} c^B & 0 \end{bmatrix}\inv{B}b + \left( \begin{bmatrix} c^N & 0 \end{bmatrix} - \begin{bmatrix} c^B & 0 \end{bmatrix} \inv{B} N \right) \trans{\begin{bmatrix} x^N & s^N \end{bmatrix}} \\ & = c^B \inv[0]{(B^t)} b^t + \begin{bmatrix} c^N - c^B \inv[0]{(B^t)} N^t & -c^B\inv[0]{(B^t)} \end{bmatrix} \trans{\begin{bmatrix} x^N & s^N \end{bmatrix}} \end{split} \label{Eqn:PrimalObj} \end{equation} The quantities $\trans{\begin{bmatrix} x^B & s^B \end{bmatrix}} = \overline{b} = \inv{B}b$ are the values of the basic variables, the quantities $y = \begin{bmatrix} c^B & 0 \end{bmatrix}\inv{B}$ are the dual variables, and the quantities $\overline{c} = \left( \begin{bmatrix} c^N & 0 \end{bmatrix} - \begin{bmatrix} c^B & 0 \end{bmatrix} \inv{B} N \right)$ are the reduced costs. A row or column of $\inv{B}N$ (as appropriate to the context) will be denoted $\overline{a}_k$ (the single subscript distinguishes it from an individual element $\overline{a}_{ij}$). A row or column of $\inv{B}$ (as appropriate to the context) will be denoted $\beta_k$. When discussing pivot selection calculations, $\Delta_j$ will be the change in nonbasic variable $x_j$ or $s_j$. The dual problem is formed by first converting \eqref{Eqn:BoundedPrimal} to $\max\: -cx$, giving \begin{equation*} \begin{split} \min \enspace & yb \\ & y A \geq -c \\ & y \geq 0 \end{split} \end{equation*} Add surplus variables $\sigma$ and partition $\trans{\begin{bmatrix}A & -I \end{bmatrix}}$ into basic and nonbasic portions as \begin{equation*} \addtolength{\extrarowheight}{3pt} \begin{bmatrix} \mathcal{B} \\ \mathcal{N} \end{bmatrix} = \left[ \begin{array}{cc} 0 & -I^\mathcal{B} \\ B^t & N^t \\ \hline -I^\mathcal{N} & 0 \\ B^l & N^l \end{array} \right] \end{equation*} with corresponding partitions \begin{math} \begin{bmatrix} \sigma^\mathcal{B} & y^\mathcal{B} & \sigma^\mathcal{N} & y^\mathcal{N} \end{bmatrix} \end{math} for $y$, $\sigma$, and \begin{math} \begin{bmatrix} c^B & c^N \end{bmatrix} \end{math} for $c$. The right-hand side $b$ is augmented with 0's in the rows corresponding to the surplus variables and partitioned as \begin{math} \trans{\begin{bmatrix} 0 & b^t & 0 & b^l \end{bmatrix}} \end{math}. The basis inverse will be \begin{equation*} \inv[-2]{\mathcal{B}} = \begin{bmatrix} \inv[0]{(B^t)} N^t & \inv[0]{(B^t)} \\ -I^\mathcal{B} & 0 \end{bmatrix}. \end{equation*} We then have \begin{equation} \begin{split} \begin{bmatrix} \sigma^\mathcal{B} & y^\mathcal{B} \end{bmatrix} & = (-c)\inv[-2]{\mathcal{B}} - \begin{bmatrix} \sigma^\mathcal{N} & y^\mathcal{N} \end{bmatrix} \mathcal{N}\inv[-2]{\mathcal{B}} \\ & = \begin{bmatrix} c^N - c^B \inv[0]{(B^t)} N^t & -c^B \inv[0]{(B^t)} \end{bmatrix} - \begin{bmatrix} \sigma^\mathcal{N} & y^\mathcal{N} \end{bmatrix} \begin{bmatrix} -\inv[0]{(B^t)} N^t & -\inv[0]{(B^t)} \\ B^l\inv[0]{(B^t)} N^t - N^l & B^l\inv[0]{(B^t)} \end{bmatrix} \label{Eqn:DualBasicVars} \end{split} \end{equation} and \begin{equation} \begin{split} z & = \begin{bmatrix} \sigma^\mathcal{B} & y^\mathcal{B} \end{bmatrix} \trans{\begin{bmatrix} 0 & b^t \end{bmatrix}} + \begin{bmatrix} \sigma^\mathcal{N} & y^\mathcal{N} \end{bmatrix} \trans{\begin{bmatrix} 0 & b^l \end{bmatrix}} \\ & = (-c)\inv[-2]{\mathcal{B}} b^\mathcal{B} + \begin{bmatrix} \sigma^\mathcal{N} & y^\mathcal{N} \end{bmatrix} (b^\mathcal{N} - \mathcal{N}\inv[-2]{\mathcal{B}} b^\mathcal{B}) \\ & = -c^B \inv[0]{(B^t)} b^t + \begin{bmatrix} \sigma^\mathcal{N} & y^\mathcal{N} \end{bmatrix} \begin{bmatrix} \inv[0]{(B^t)} b^t \\ b^l - B^l\inv[0]{(B^t)} b^t \end{bmatrix} \end{split} \label{Eqn:DualObj} \end{equation} When discussing pivot selection calculations, $\delta_j$ will be the change in nonbasic dual variable $y_j$ or $\sigma_j$. There are several points to note about the relationship between primal and dual simplex in the \dylp implementation. First, \dylp does not solve $\max \; -cx$ as a surrogate for $\min \, cx$. It minimises $cx$ directly by algorithmic design. Hence the dual variables $y = c^B \inv{B}$ have the wrong sign for the dual problem, and are calculated solely as a convenience. The dual algorithm actually works with the reduced costs $\overline{c}^N = c^N - c^B \inv{B} N$, which are the correct dual variable values (compare \eqnref{Eqn:PrimalObj} with \eqnref{Eqn:DualBasicVars}). Second, because primal simplex provides $\inv{B} N = - \mathcal{N} \inv[-2]{\mathcal{B}}$ (compare \eqnref{Eqn:PrimalBasicVars} with \eqnref{Eqn:DualBasicVars}), the relevant calculation when determining the leaving dual variable is $\overline{c}_k + \overline{a}_{ik} \delta_i$, rather than $ \overline{c}_k - \overline{a}_{ik} \delta_i$. Throughout the remainder of the report, let $e_k \in R^d$ be a row or column vector of appropriate dimension (as determined by the context), with a 1 in position $k$ and 0's in all other positions. DyLP-1.10.4/DyLP/doc/pricing.tex0000644000175200017520000003260511263240452014612 0ustar coincoin\section{Pricing Algorithms} \label{sec:PricingAlgorithms} \subsection{Projected Steepest Edge Pricing} \label{sec:PSEPricing} The primal simplex algorithm in \dylp uses projected steepest edge (PSE) pricing; the algorithm used is described as dynamic projected steepest edge (`dynamic') in Forrest and Goldfarb \cite{For92}. To understand the operation of projected steepest edge (PSE) pricing, it will be helpful to start with the definition of a direction of motion. The values of the basic and nonbasic variables can be expressed as \begin{equation} \label{eqn:allPrimalDirs} \begin{bmatrix} x^B \\ x^N \end{bmatrix} = \begin{bmatrix} b \\ l/u \end{bmatrix} - \begin{bmatrix} \inv{B} A^N \\ -I \end{bmatrix} \Delta \end{equation} where $l/u$ is intended to indicate use of the lower or upper bound as appropriate for the particular nonbasic variable. When a given nonbasic variable $x_j$ is moved by an amount $\Delta_j$, the values of $x$ will change as \begin{equation} \label{eqn:onePrimalDir} -\begin{bmatrix} \inv{B} a_j \\ -e_j \end{bmatrix} \Delta_j = -\begin{bmatrix} \overline{a}_j \\ -e_j \end{bmatrix} \Delta_j = \eta_j\Delta_j \end{equation} The vector $\eta_j$ is the direction of motion as $x_j$ is changed; alternatively, it is the edge of the polyhedron which is traversed as $x_j$ is changed. Let $\gamma_j = \norm{\eta_j}$ be the norm of $\eta_j$. For pricing, it can be immediately seen that $c\eta_j = c_j - c^B \, \overline{a}_j$ is the reduced cost $\overline{c}_j$. Dantzig pricing chooses an entering variable $x_j$ such that $\overline{c}_j$ has appropriate sign and the largest magnitude over all reduced costs, but it can be misled by differences in scaling from one column to the next. Steepest edge (SE) pricing scales $\overline{c}_j$ by $\gamma_j$, choosing an entering variable $x_j$ with $\overline{c}_j$ of appropriate sign and the largest $\displaystyle \abs{\frac{c \eta_j}{\norm{\eta_j}}}$, effectively calculating the change in objective value over a unit vector in the direction of motion. This gives a uniform pricing comparison, using the slope of the edge. Projected steepest edge (PSE) pricing uses `projected' column norms which are calculated using a vector $\tilde{\eta}_j$ which contains only the components of $\eta_j$ included in a reference frame. Initially, this reference frame contains only the nonbasic variables, so that $\tilde{\gamma}_j = 1$ for all $x_j \in x^N$. In order to avoid calculating $\tilde{\gamma}_j$ from scratch each time a column must be priced, the norms are iteratively updated. To derive the update formul\ae{} for $\tilde{\gamma}_j$, it is useful to start with the update formul\ae{} for the full vector $\eta_j$. As mentioned in \secref{sec:DualUpdates}, for $x_i$ leaving basis position $k$ and $x_j$ entering, $B\inv[0]{(B')} = I + a_i(\beta')_k - a_j(\beta')_k$. Taking this one step further, $\inv[0]{(B')} = \inv{B} + \overline{a}_i(\beta')_k - \overline{a}_j(\beta')_k$. Then for an arbitrary column $a_p$, \begin{align} \inv[0]{(B')} a_p & = \inv{B} a_p + \overline{a}_i(\beta')_k a_p - \overline{a}_j(\beta')_k a_p \notag \\ \overline{a}'_p & = \overline{a}_p + e_k ( \frac{\overline{a}_{kp}}{\overline{a}_{kj}} ) - \overline{a}_j ( \frac{\overline{a}_{kp}}{\overline{a}_{kj}} ) \label{Eqn:abarupdate} \end{align} (recalling that $(\beta')_k = \beta_k/\overline{a}_{kj}$). To see that (\ref{Eqn:abarupdate}) amounts to $\eta'_p = \eta_p - \eta_j( \dfrac{\overline{a}_{kp}}{\overline{a}_{kj}} )$, it's helpful to expand the vectors: \begin{equation*} \overline{a}'_p = \begin{bmatrix} \overline{a}_{1p} \\ \vdots \\ \overline{a}_{kp} \\ \vdots \\ \overline{a}_{mp} \end{bmatrix} + \begin{bmatrix} 0 \\ \vdots \\ 1 \\ \vdots \\ 0 \end{bmatrix}\frac{\overline{a}_{kp}}{\overline{a}_{kj}} - \begin{bmatrix} \overline{a}_{1j} \\ \vdots \\ \overline{a}_{kj} \\ \vdots \\ \overline{a}_{mj} \end{bmatrix} \frac{\overline{a}_{kp}}{\overline{a}_{kj}} . \end{equation*} With a little thought, it can be seen that the middle term represents one half of the permutation which moves $x_j$ into the basic partition of $\eta'_j$. (The other half moves $x_i$ into the nonbasic partition). When updating $\eta_i$, the update formula can be collapsed to $\eta'_i = - \eta_j/\overline{a}_{kj}$, since $\overline{a}_{ki} = 1$. Summarising, the update formul\ae{} for the edge directions $\eta_j$ are \begin{equation} \begin{split} \eta'_p & = \eta_p - \eta_j( \frac{\overline{a}_{kp}}{\overline{a}_{kj}} ), \qquad p \neq i \\ \eta'_i & = - \eta_j/\overline{a}_{kj}. \label{Eqn:etaupdate} \end{split} \end{equation} In fact, the code actually stores and updates $\gamma_j^{\,2}$. With (\ref{Eqn:etaupdate}) in hand, derivation of the update formul\ae{} are straightforward: \begin{align} \begin{split} (\gamma^{\,\prime}_p)^2 & = \eta'_p \cdot \eta'_p \\ & = (\eta_p - \eta_j( \frac{\overline{a}_{kp}}{\overline{a}_{kj}} )) \cdot (\eta_p - \eta_j( \frac{\overline{a}_{kp}}{\overline{a}_{kj}} )) \\ & = \eta_p \cdot \eta_p - 2( \frac{\overline{a}_{kp}}{\overline{a}_{kj}} )\eta_j \cdot \eta_p + ( \frac{\overline{a}_{kp}}{\overline{a}_{kj}} )^2 \eta_j \cdot \eta_j \\ & = \gamma_p^{\,2} - 2( \frac{\overline{a}_{kp}}{\overline{a}_{kj}} ) \begin{bmatrix} \overline{a}^T_j & e^T_j \end{bmatrix} \begin{bmatrix} \overline{a}_p \\ e_p \end{bmatrix} + ( \frac{\overline{a}_{kp}}{\overline{a}_{kj}} )^2 \gamma_j^{\,2} \\ & = \gamma_p^{\,2} - 2( \frac{\overline{a}_{kp}}{\overline{a}_{kj}} ) (\overline{a}^T_j \inv{B}) a_p + ( \frac{\overline{a}_{kp}}{\overline{a}_{kj}} )^2 \gamma_j^{\,2} \label{Eqn:gammapupdate} \end{split} \\[.5ex] \begin{split} (\gamma^{\,\prime}_i)^2 & = \eta'_i \cdot \eta'_i \\ & = \eta_j/\overline{a}_{kj} \cdot \eta_j/\overline{a}_{kj} \\ & = \gamma_j^{\,2}/\overline{a}^2_{kj} \label{Eqn:gammaiupdate} \end{split} \end{align} Equations (\ref{Eqn:etaupdate}) can be used directly to update the $\tilde{\eta}_j$. To adapt (\ref{Eqn:gammapupdate}) and (\ref{Eqn:gammaiupdate}) for the $\tilde{\gamma}_j$, a little algebra should serve to see that it's sufficient to substitute $\tilde{a}_j$ in (\ref{Eqn:gammapupdate}), as well as using $\tilde{\gamma}_p$ and $\tilde{\gamma}_j$. It is straightforward to observe that when equations (\ref{Eqn:etaupdate}) are premultiplied by $c$, they can be used to update the reduced costs as \begin{align*} \begin{split} \overline{c}'_p & = \overline{c}_p - \overline{c}_j( \frac{\overline{a}_{kp}}{\overline{a}_{kj}} ) \qquad p \neq i \\ \overline{c}'_i & = - \overline{c}_j/\overline{a}_{kj}. \end{split} \end{align*} \subsection{Dual Steepest Edge Pricing} \label{sec:DSEPricing} The dual simplex in \dylp uses dual steepest edge (DSE) pricing; the algorithm used is described as dual algorithm 1 (`steepest 1') in Forrest and Goldfarb \cite{For92}. The values $\overline{b} = \inv{B}b$ are the reduced costs of the nonbasic dual variables. Analogous to Dantzig pricing in the primal case, one can choose a entering dual variable $y_i$ such that $\overline{b}_i$ has appropriate sign and the largest magnitude over all reduced costs, but there is the same problem with scaling. The version of dual steepest edge (DSE) pricing implemented in \dylp scales $\overline{b}_i = \beta_i b$ by $\rho_i = \norm{\beta_i}$, choosing a leaving variable $x_i$ with $\overline{b}_i$ of appropriate sign and the largest $\displaystyle \abs{\frac{\beta_i b}{\norm{\beta_i}}}$, effectively calculating the change in the dual objective value over a unit vector in the dual direction of motion in the space of the dual variables. This gives a uniform pricing comparison, using the slope of the dual edge. In the next few paragraphs, an alternative motivation of the algorithm is presented which (perhaps) clarifies the relationship between dual algorithm 1 and dual algorithm 2 in that paper% \footnote{Those who have read \cite{For92} are warned that the author's notation is in no way compatible with that of Forrest and Goldfarb.}. To see how DSE operates within the context of the revised primal simplex tableau, we can refer back to equations \eqnref{Eqn:DualBasicVars} and \eqnref{Eqn:DualObj} from \secref{sec:Notation}, repeated here: \begin{equation} \begin{split} \begin{bmatrix} \sigma^\mathcal{B} & y^\mathcal{B} \end{bmatrix} & = (-c)\inv[-2]{\mathcal{B}} - \begin{bmatrix} \sigma^\mathcal{N} & y^\mathcal{N} \end{bmatrix} \mathcal{N}\inv[-2]{\mathcal{B}} \\ & = \begin{bmatrix} c^N - c^B \inv[0]{(B^t)} N^t & -c^B \inv[0]{(B^t)} \end{bmatrix} - \begin{bmatrix} \sigma^\mathcal{N} & y^\mathcal{N} \end{bmatrix} \begin{bmatrix} -\inv[0]{(B^t)} N^t & -\inv[0]{(B^t)} \\ B^l\inv[0]{(B^t)} N^t - N^l & B^l\inv[0]{(B^t)} \end{bmatrix} \end{split} \tag{\ref{Eqn:DualBasicVars}} \end{equation} and \begin{equation} \begin{split} z & = \begin{bmatrix} \sigma^\mathcal{B} & y^\mathcal{B} \end{bmatrix} \begin{bmatrix} 0 & b^t \end{bmatrix}^T + \begin{bmatrix} \sigma^\mathcal{N} & y^\mathcal{N} \end{bmatrix} \begin{bmatrix} 0 & b^l \end{bmatrix}^T \\ & = (-c)\inv[-2]{\mathcal{B}} b^\mathcal{B} + \begin{bmatrix} \sigma^\mathcal{N} & y^\mathcal{N} \end{bmatrix} (b^\mathcal{N} - \mathcal{N}\inv[-2]{\mathcal{B}} b^\mathcal{B}) \\ & = -c^B \inv[0]{(B^t)} b^t + \begin{bmatrix} \sigma^\mathcal{N} & y^\mathcal{N} \end{bmatrix} \begin{bmatrix} \inv[0]{(B^t)} b^t \\ b^l - B^l\inv[0]{(B^t)} b^t \end{bmatrix} \end{split} \tag{\ref{Eqn:DualObj}} \end{equation} Recall that the values of the dual basic variables are the reduced costs of the primal problem, and the reduced costs of the dual variables are the values of the primal basic variables (\cf equations \eqnref{Eqn:PrimalBasicVars} and \eqnref{Eqn:PrimalObj}). By analogy to the primal pivoting rules, for dual simplex we want to choose a nonbasic dual variable which will move us in a direction of steepest descent. If the nonbasic dual is to increase, its reduced cost must be less than 0 in order to see a reduction in the dual objective. This corresponds to the case of a primal variable which will be increased and driven out of the basis at its lower bound with a positive primal reduced cost. If the nonbasic dual is to decrease, its reduced cost must be greater than 0 in order to see a reduction in the dual objective. This corresponds to the case of a primal variable which will be decreased and driven out of the basis at its upper bound with a negative primal reduced cost. The actual direction of motion in the full dual space ($y$ and $\sigma$) is specified by a row of \begin{equation*} \mathcal{N}\inv[-2]{\mathcal{B}} = \begin{bmatrix} -\inv[0]{(B^t)} N^t & -\inv[0]{(B^t)} \\ B^l\inv[0]{(B^t)} N^t - N^l & B^l\inv[0]{(B^t)} \end{bmatrix}, \end{equation*} a vector which is not readily available in the revised primal simplex\footnote{% It's necessary to calculate one such row $\overline{a}_i$ once the entering dual variable has been selected, but only one. For the typical problem in which the number of variables greatly exceeds the number of constraints, the norms of these vectors are expensive to calculate when initialising the pricing algorithm, and the updates are expensive. The algorithm which uses the full dual direction of motion is the one that Forrest and Goldfarb describe as dual algorithm 2.}. However, one can make an argument that there's no need to consider the component of the direction of motion in the subspace of the dual surplus variables when choosing the entering dual variable. (More positively, we can take the view that we're only interested in motion in the polyhedron $\{y \in R^m \mid yA \geq -c, y \geq 0\}$ defined by the dual variables.) Changes in the surplus variables cannot affect the objective directly, as they account for the 0's in the augmented and partitioned $b$ vector. Algebraically, we can see that the dual basic portion of $b$, $\begin{bmatrix}0 & b^t \end{bmatrix}^T$, guarantees that there will never be any direct contribution from the columns of $\mathcal{N}\inv[-2]{\mathcal{B}}$ involving $N$. The component of motion in the space of the dual variables $y$ is then simply the rows $\beta_i$ of $\inv{B}$, which are easily available from the primal tableau. (The analogous action in the primal problem --- ignore the component of $\eta_j$ in the subspace of the primal slack variables --- offers no computational advantage.) Given a rationale for taking the rows $\beta_i$ of $\inv{B}$ as the component of interest in the dual direction of motion, what remains is to work out the details. Since we're aiming for a steepest edge algorithm, we'll be interested in iteratively updating $\norm{\beta_i}^2 = \beta_i \cdot \beta_i$, the square of the norm of a row $\beta_i$. Given the update formul\ae{} for $\beta_i$ derived in \secref{sec:BasisUpdates}, the development of the update formul\ae{} for $\rho_i = \norm{\beta_i}^2$ is straightforward algebra. Let $x_i$ be the leaving variable and $x_j$ be the entering variable, and assume $x_i$ occupies row $k$ of the basis $B$ before the update. We have \begin{align} \begin{alignedat}{2} \rho'_i & = \rho_i - 2\frac{\overline{a}_{lj}}{\overline{a}_{kj}}\beta_i\cdot\beta_k + (\frac{\overline{a}_{lj}}{\overline{a}_{kj}})^2\rho_k & \qquad\qquad i \neq k \\ \rho'_k & = (\frac{1}{\overline{a}_{kj}})^2\rho_k \end{alignedat} \end{align} Since the update will be performed for all rows in the basis, it's worth calculating the vector $\tau = \inv{B}\beta^T_k$ to obtain all the inner products $\beta_i \cdot \beta_k$ in one calculation. DyLP-1.10.4/DyLP/doc/perturbed.tex0000644000175200017520000001052511171477034015156 0ustar coincoin\section{Anti-Degeneracy Using a Perturbed Subproblem} \label{sec:PerturbedAntiDegeneracy} In both primal and dual simplex, \dylp implements an anti-degeneracy algorithm using a perturbed subproblem. It builds on a method described by Ryan \& Osborne \cite{Rya88} in which all variables are assumed to have lower bounds of zero and upper bounds of infinity. The original algorithm is easily described in terms of the primal problem. When degeneracy is detected, a restricted subproblem is formed consisting only of the constraints involved in the degeneracy (\ie, constraints $i$ such that $\overline{b}_i = 0$). The values $\overline{b}_i$ are given (relatively) large perturbations and pivots are performed within the context of the restricted subproblem until a direction of recession from the degenerate vertex is found (indicated by apparent unboundedness). The original unperturbed values of $\overline{b}_i$ are then restored (since all pivots were, in actuality, simply changes of basis while remaining at the degenerate vertex) and the full problem is resumed. An alternative view goes directly back to the constraints involved in the degeneracy. By perturbing their right-hand-side values $b_i$, the single vertex formed by the constraints is fractured into many vertices. For the simple case of $0 \leq x \leq \infty$, we have $\overline{b} = B^{\,-1} b$, so perturbing $\overline{b}$ by the vector $\xi$ is equivalent to perturbing $b$ by the vector $-B\xi$. In dual simplex, this algorithm can be implemented directly. The restricted subproblem is formed from the dual constraints (primal columns) corresponding to basic dual variables (primal reduced costs) whose value is zero. The perturbation is introduced directly to the values $\overline{c}_j$, taking care to maintain dual feasibility. The perturbation is maintained by the incremental update of the dual variables and reduced costs after each pivot. When accuracy checks are performed, the correct value of zero can be substituted on the fly for the perturbed values. The trick to implementing this algorithm in the context of variables with arbitrary upper and lower bounds is to distinguish between apparent motion due to the introduced perturbations and real motion (along a direction of recession) which is nonetheless limited by a bound on a variable. \dylp uses an array, \pgmid{dy_brkout}, to record the direction of change (away from the current bound) required for nondegenerate but bounded motion. A second, more subtle problem, is that the perturbation for a given variable must be sufficiently small to avoid a false indication of a nondegenerate pivot. \dylp scales the perturbation to be at most $.001(u_i - l_i)$, but there is no easy way to guarantee that this is sufficiently small. Consider two variables $x_i$ and $x_k$, and assume that they occupy rows $i$ and $k$ in the basis, with perturbed values $\tilde{b}_i$ and $\tilde{b}_k$, respectively. For concreteness, assume that each was originally degenerate at its lower bound, so that a pivot which resulted in one variable leaving at its upper bound would be nondegenerate. For $\overline{a}_{ij}$ and $\overline{a}_{kj}$ of appropriate sign to move $x_i$ toward $l_i$ and $x_k$ toward $u_k$, given a situation where $|\overline{a}_{ij}| \ll |\overline{a}_{kj}|$, it is not possible to assure that \begin{displaymath} \frac{\tilde{b}_i - l_i}{\overline{a}_{ij}} < \frac{u_k - \tilde{b}_k}{\overline{a}_{kj}} \end{displaymath} without actually testing each pair. In this case, the perturbation introduced for $x_i$ is too large, and the resulting $\Delta_{ij}$ \textit{appears} to allow $x_k$ to become the limiting variable, leaving the basis with a bounded but nondegenerate change. When \dylp detects this problem, it will reduce the perturbation by a factor of 10 and form the restricted subproblem again. If a (small) limit on the number of attempts is exceeded, \dylp simply gives up and takes a degenerate pivot. A second problem occurs when a perturbation is so small as to be indistinguishable next to the bound. Specifically, the test to determine if a variable $x_i$ is at bound is $\pgmid{dy_tols.zero}(1+|\mathit{bnd}_i|) < |x_i - \mathit{bnd}_i|$. If $\mathit{bnd}_i$ is large, the perturbation can be swamped. This situation can arise if $u_i$ and $l_i$ as given to \dylp are nearly equal, or due to reduction of the perturbation as described in the previous paragraph. DyLP-1.10.4/DyLP/doc/lpbasis.tex0000644000175200017520000001770211171477034014623 0ustar coincoin\section{The LP Basis} \label{sec:LPBasis} \dylp requires three capabilities from a basis maintenance module: \begin{itemize} \item Factoring of the basis to create the basis inverse. \item Update of the basis inverse for a pivot. \item Premultiplication (`ftran') of a column vector by the basis inverse, and postmultiplication (`btran') of a row vector by the basis inverse. \end{itemize} \dylp uses the basis maintenance module from \glpk to provide these services. Knowledge of the structure and operation of the \glpk subroutines is confined to a set of interface subroutines in the file \coderef{dy_basis.c}{}. The majority of these are straightforward interface functions whose sole purpose is to hide the \glpk structures and to mediate between \glpk and the remainder of the code. \subsection{The \glpk Basis Module Interface} \label{sec:GLPKBasisModule} Very roughly, the \glpk basis maintenance module has a two-layer structure. The top layer (\coderef{glpinv.c}{}) provides the basic services for a generic basis inverse. In turn, the top layer calls on a second layer (\coderef{glpluf.c}{}) to provide a specific implementation of the basis inverse data structures and algorithms. Dynamic Markowitz pivoting with partial threshold pivot selection is used to factor a basis. The routine \pgmid{dy_initbasis} is used to initialise the basis module. The capacity of the basis, algorithm options, and numeric tolerances are set at initialisation (\vid \secref{sec:GLPKBasisInit}). The basis is deleted by the routine \pgmid{dy_freebasis}. Changing the basis capacity is implemented in \dylp by saving options and tolerances for the existing basis, deleting the existing basis, and creating a new basis of the appropriate size. The capacity is checked each time the basis is factored; changes are invisible to clients. The \glpk basis module will resize its own internal data structures whenever it determines that this is required. In the main, \dylp uses the basis module in a standard way for factoring and pivoting. There are some departures from \glpk defaults: \begin{itemize} \item The initial size of the sparse vector working area is tripled. \item The limit on element growth (\pgmid{luf.max_gro}) is reduced from $10^{12}$ to $10^6$. \item The minimum value for elements on the diagonal of the factorisation (\pgmid{luf_basis.upd_tol} is reduced from $10^{-6}$ to $10^{-10}$. \item Instead of a fixed default of $.1$, the pivot stability tolerance is dynamically adjusted in a range between $.01$ and $.95$ based on \dylp's assessment of the numerical stability of the current basis. The number of pivot candidates examined when factoring the basis is also adjusted in the range $4$ to $10$. More candidates are considered as the stability requirement is raised in the hope of finding a numerically stable candidate without compromising sparsity. \end{itemize} The routine \pgmid{dy_setpivparms} is provided to adjust the pivot stability tolerance and pivot candidate limit. Adjustment of the pivot selection parameters is done according to a fixed schedule of tolerance and limit values kept in the static data structure \coderef{dy_basis.c}{pivtols}. The client specifies an integer delta which is used to select a pair of values from the schedule. Pre- and post-multiplication of vectors by the basis inverse are provided by the routines \pgmid{dy_ftran} and \pgmid{dy_btran}, respectively. \subsection{Factoring} \label{sec:BasisFactoring} For factoring the basis, the routine \pgmid{dy_factor} provides significant error recovery functions on top of the basic abilities of \glpk. The call structure is shown in Figure \ref{fig:FactorCallGraph}. \begin{figure}[htb] \centering \includegraphics{\figures/factorcalls} \caption{Call Graph for \protect\pgmid{dy\_factor}} \label{fig:FactorCallGraph} \end{figure} A singular basis can occur because of a simplex pivot attempt or as the result of a change in the coefficients of the basis because the client has fixed variables and then requested a warm or hot start. The factoring routine \pgmid{glp_inv_decomp} detects a singular basis and reports the unpivoted rows and columns, but does not attempt to fix the basis. \pgmid{adjust_basis} uses the information reported by \pgmid{glp_inv_decomp} to attempt to patch the basis, substituting columns associated with slack variables for the set of columns identified as singular. This sequence is repeated until the basis is successfully factored. In the larger context of \dylp, patching the basis is the least of the work. \pgmid{dy_factor} will call \pgmid{adjust_therest} to adjust the \dylp data structures as necessary to reflect the exchange of variables between the basic and nonbasic partitions. Depending on the phase, this can include updating the structures which maintain the basis, recalculating the primal (\pgmid{dy_calcprimals}) and dual (\pgmid{dy_calcduals}) variables, recalculating the reduced costs (\pgmid{dy_calccbar}), resetting the DSE or PSE norms (\pgmid{dy_dseinit} and \pgmid{dy_pseinit}, respectively), clearing the list of variables marked ineligible for pivoting (\pgmid{dy_clrpivrej}), and backing out a perturbed subproblem (\pgmid{dy_degenout}). \pgmid{glp_inv_decomp} will abort an attempt to factor the basis if the current pivot selection parameters give rise to numerical instability (detected as excessive growth in the magnitude of the coefficients of the factored basis). \pgmid{dy_factor} will make repeated tries to factor the basis, tightening the pivot selection parameters before each attempt. It will admit failure only if the numerical instability remains after the pivot selection tolerances have been tightened as much as possible, so that each pivot chosen is the maximum coefficient remaining in the unpivoted portion of the basis. \subsection{Pivoting} \label{sec:BasisPivoting} Pivoting is performed by \pgmid{dy_pivot}, which confirms the numerical stability of the pivot element and calls \pgmid{glp_inv_update} to pivot the basis. To be judged numerically stable, a prospective pivot coefficient $\overline{a}_{ij}$ must exceed the product of the \glpk stability multiplier (\pgmid{luf.piv_tol}), the \dylp pivot selection multiplier (\pgmid{dy_tols.pivot}), and the maximum element in the transformed column $\overline{a}_j = B^{\,-1}a_j$ (primal simplex) or row $\overline{a}_i = \beta_i N$ (dual simplex). Standard defaults in \dylp are $5 \times 10^{-2}$ for the \glpk stability multiplier and $1 \times 10^{-5}$ for the \dylp pivot selection multiplier, so that the pivot coefficient is required to satisfy $\abs{\overline{a}_{ij}} > (5 \times 10^{-7})(\max_k \abs{\overline{a}_{kj}})$ (primal simplex) or $\abs{\overline{a}_{ij}} > (5 \times 10^{-7})(\max_k \abs{\overline{a}_{ik}})$ (dual simplex). The routine \pgmid{dy_chkpiv} is supplied to perform this test, and is used as a qualification test by the routines which select the leaving primal variable in primal simplex and the entering primal variable in dual simplex. The check performed in \pgmid{dy_pivot} should not fail, but is retained as a precaution. If $\overline{a}_{ij}$ is rejected as numerically unstable, the pivot attempt is aborted. In primal simplex, the entering variable $x_j$ will be placed on the rejected pivot list. For dual simplex, the leaving variable $x_i$ is placed on the rejected pivot list. Recovery from pivoting problems and the handling of the rejected pivot list are discussed in \secref{sec:ErrorRecovery}. A pivot can also fail if it results in a singular basis or if the basis representation runs out of space. The implementation of \glpk requires that the basis be reloaded and factored to recover from these errors; this is orchestrated by \pgmid{dy_duenna} and discussed in \secref{sec:ErrorRecovery}. Note that \pgmid{glp_inv_update} expects to be supplied with $L^{-1}a_j$ as a hidden parameter. \glpk provides the capability to control whether a call to \pgmid{glp_inv_ftran} sets this hidden parameter. This capability is exposed to clients as the second parameter to \pgmid{dy_ftran}. DyLP-1.10.4/DyLP/doc/README0000644000175200017520000000716611267165330013326 0ustar coincoin This file contains instructions for building the DyLP documentation from source. Before you go further, ask yourself ``Do I really want to do this?'' If all you want to do is read the documentation, look at dylp.ps or dylp.pdf. There's a copy of each in this directory, in the build directory, and (if you've run `make install') installed in the COIN documentation directory. If you really want to build from source read on. You should be able to build the dylp documentation from source, in the build directory, by going to /DyLP and typing `make doc'. There will follow a massive amount of output with all sorts of warnings (latex is run three times, bibtex once, and pdflatex once). Ultimately, it'll settle down and you should be left with dylp.dvi, dylp.ps, and dylp.pdf. The latter two come with the distribution, so dylp.dvi is the real sign of success. If that failed, well, read on further ... The dylp documentation makes heavy use of my highly customised local TeX environment. In particular, I don't like Computer Modern and have gone to great lengths to remove it. I've tried to include all the necessary custom TeX style and font files in the TexMF subdirectory, but expect problems. See the README there. COIN distributions are set up so that they can be built in a build directory, distinct from the distribution directory. This is very useful for maintaining binaries for different environments, but not so critical for documentation. In any event, you should be working in the DyLP/doc directory in the build directory tree (the directory tree where you ran configure). LaTeX is not supported by Gnu autotools. In partial compensation, there is a script, build_dylpdoc, created in the build directory from build_dylpdoc.in when you ran configure. Build_dylpdoc will arrange for latex and bibtex to find inputs in this directory and subdirectories. It does this using hooks provided in the TeX Live distribution. (See, for example, http://tug.org/texlive/). I don't have access to other TeX distributions and cannot guarantee that these same hooks will work. Makefile_dylpdoc assumes that you have latex, pdflatex, dvips, and epstopdf (the latter to convert .eps files to .pdf files for figures). Replace with your local equivalent if necessary. Xdvi may have trouble locating the .vf (virtual font) files down in TexMF/fonts/vf. If your version of xdvi uses kpathsea as the underlying file search engine, try setting TEXMFHOME according to the value in build_dylpdoc. Otherwise, you're on your own. Build_dylpdoc will invoke make, using makefile.dylpdoc (created from makefile.dylpdoc.in during configure). Makefile.dylpdoc assumes that you're using Gnu make. If you're not, it will almost surely fail. The general sequence is to build the figures in Figures, then run latex, then run bibtex, then run latex two more times. By the end of all this, all references should be correctly resolved. This gets DVI output; to generate PDF output, a final run of pdflatex is executed. PostScript is generated using dvips. The figures in the dylp documentation were originally created with a proprietary program, IslandDraw from Island Graphics. For purposes of building the documentation, the source files are Figures/*.epsu. This is EPS pumped out by IslandDraw. It needs some cleanup; this is accomplished by the epsupatch.sed script. The result is a clean .eps file suitable for use by latex. The .eps files (and the .pdf versions required for PDF output) are placed in the Figures subdirectory in the build directory tree. Lou Hafer, 090415 DyLP-1.10.4/DyLP/doc/solutions.tex0000644000175200017520000003504011266200761015214 0ustar coincoin\section{Generating Solutions, Rays, and Tableau Vectors} \label{sec:Solutions} The dynamic simplex algorithm implemented by \dylp introduces some unique challenges when generating solution values, rays, and tableau vectors. The client expects an answer that corresponds to the full, unscaled constraint system. In addition to the standard calculations associated with unscaling, \dylp must often synthesize portions of the answer corresponding to inactive constraints or variables, and position the components of the answer to match the original constraint system. This becomes even more interesting when the client is asking for answers in the context of the dual problem. \subsection{Solution Vectors} \label{sec:SolutionVectors} Calculating the values of the unscaled primal variables is the simplest request. We have $\breve{x}^B = \inv{\breve{B}}\breve{b}$. Then $\breve{x}^B = \inv[0]{(S^B)}\inv{B}\inv{R} R b = \inv[0]{(S^B)}\inv{B}b$ and $x^B = S^B \breve{x}^B$. Recall that the column scaling factor for a logical variable will be the inverse of the row scaling factor, as explained in \secref{sec:Scaling}. The unscaled values of the nonbasic primal variables (architectural or logical) can be read directly from the original unscaled $l$ and $u$ vectors. There is one subtle point about the column scaling factor for logicals which is not immediately apparent from the simplified presentation in the previous paragraphs. Logical variables can be basic for the row occupied by their associated constraint~---~the `natural' position. They can also be basic for some other row~---~an `unnatural' position; this is achieved by a column permutation in the basis. The correct column scaling factor, when required, is the one associated with the natural row. This is more apparent when the column permutation matrix $P$ is made explicit: \begin{align*} \breve{B} & = (R B S^B) P \\ \inv{\breve{B}} & = \inv{P}\inv[0]{(S^B)}\inv{B}\inv{R} \end{align*} By definition, inactive architectural variables are nonbasic, so their value is also easily read from the original unscaled $l$ and $u$ vectors. By definition, inactive constraints are loose and the corresponding logical would be basic. Rather than expand the basis inverse, the value of the logical for an inactive constraint $i$ is calculated directly as $a_i x$. Turning to the dual variables, recall first the observation from \secref{sec:Notation} that the dual variables $y = c^B \inv{B}$ calculated by \dylp during primal and dual simplex are in fact the negative of the correct dual variables, a consequence of implementing the relationship \begin{align*} \min cx & & \max \; (-c)x & & \min yb & \\ Ax & \leq b & Ax & \leq b & yA & \geq (-c) \end{align*} by algorithmic design rather than actually negating $c$. When generating dual variable values to return to the client, there is a choice: should the dual variables be returned with a sign convention appropriate for \dylp's $\min cx$ problem, or should they be returned with a sign convention appropriate for the true dual problem? For all routines returning values associated with the dual problem, \dylp allows the client to choose the sign convention. There are two further details to consider: The canonical relationship assumes all constraints are `$\leq$' constraints and all primal constraints are explicit. In reality, the primal problem presented to \dylp typically contains `$\geq$' constraints, and bounds on variables are usually handled by the algorithm rather than stated as explicit constraints. There are a number of possible implementation choices; \dylp chooses the following: \begin{itemize} \item For the duals associated with `$\geq$' constraints, the sign of the dual value returned is always negated to match the `$\geq$' that's actually present in the constraint matrix. This choice is intended to make it easy for the client to use the dual variable values with the coefficient matrix as written. \item For the duals associated with variables that are nonbasic at their upper bound (hence negative in \dylp's $\min$ primal convention), the value is negated if the user chooses the true dual sign convention. This matches the conversion of the implicit upper bound to an explicit `$\leq$' constraint in the dual problem. To extend this point to upper and lower bounds, when the client requests dual variables using the true dual sign convention, \dylp assumes that implicit upper bounds are made explicit as $x_j \leq u_j$ and implicit lower bounds are made explicit as $-x_j \leq -l_j$. \end{itemize} To calculate the values of the unscaled row dual variables $y$, start with $\breve{y} = \breve{c}^B \inv{\breve{B}}$. Then $\breve{y} = c^B S^B \inv[0]{(S^B)} \inv{B} \inv{R} = c^B \inv{B} \inv{R} = y \inv{R}$ and $y = \breve{y} R$. These values must be negated to be correct for the dual problem. By definition, inactive constraints are not tight, hence the value of the associated dual variable is zero. The values of the column dual variables are the primal reduced costs $\overline{c}_j$. Starting from $\breve{\overline{c}}_j$, we have \begin{align*} \breve{\overline{c}}_j & = \breve{c}_j - \breve{c}^B \inv{\breve{B}}\breve{a}_j \\ & = c_j S_j - c^B S^B \inv[0]{(S^B)}\inv{B}\inv{R} R a_j S_j \\ & = (c_j - c^B \inv{B} a_j) S_j \\ & = \overline{c}_j S_j \end{align*} hence $c_j = \breve{\overline{c}}_j\inv{(S_j)}$. For active variables, the value of $\breve{\overline{c}}_j$ is immediately available. For inactive variables, \dylp first calculates $\breve{\overline{c}}_j = \breve{y}\breve{a}_j$. \subsection{Tableau Vectors} \label{sec:TableauVectors} \Dylp implements routines to return four tableau vectors: rows $\beta_i$ and columns $\beta_j$ of the basis inverse \inv{B}, and rows $\overline{a}_i$ and columns $\overline{a}_j$ of the transformed constraint matrix $\inv{B}A$. Given the scaled basis inverse $\inv{\breve{B}} = \inv[0]{(S^B)}\inv{B}\inv{R}$, the unscaled column of the basis inverse corresponding to basic variable $x_j$, basic for row $k$, will be \begin{equation} \label{eqn:unscaledBetaj} \beta_j = S^B \inv{\breve{B}} R e_k = S^B \breve{\beta}_j r_{kk} \end{equation} Because \dylp periodically deactivates loose constraints, it is in general necessary to synthesize the rows of the basis inverse for these inactive constraints. The necessary algebra is shown in \eqnref{Eqn:PrimalBasisInverse} and repeated here for convenience: \begin{equation} \tag{\ref{Eqn:PrimalBasisInverse}} \inv{B} = \begin{bmatrix} \inv[0]{(B^t)} & 0 \\ -B^l\inv[0]{(B^t)} & I^l \end{bmatrix} \end{equation} Let the partition $B^t$ correspond to $B$ in \eqnref{eqn:unscaledBetaj}, $\beta_j$ to a column of $\inv[0]{(B^t)}$, and let the partition $B^l$ be the coefficients of basic variables in the inactive constraints. By definition, the basic variable for an inactive constraint is the logical associated with the constraint. Given the unscaled column $\beta_j$ for the active system from \eqnref{eqn:unscaledBetaj}, \dylp generates the necessary coefficients from $-B^l\inv[0]{(B^t)}$ by calculating $-B^l\beta_j$. For all inactive logical variables (\ie, logical variables for inactive constraints), and active logical variables basic in the natural position, $\beta_j = e_j$; this is detected as a special case. Generating the transformed column $\overline{a}_j = \inv{B}a_j$ follows a similar pattern, with the added complication that the requested column may not be active. Given the scaled transformed column \begin{equation*} \breve{\overline{a}}_j = \inv{\breve{B}}\breve{N}e_j = \inv[0]{(S^B)}\inv{B}\inv{R} R a_j s_{jj} = \inv[0]{(S^B)}\inv{B} a_j s_{jj} \end{equation*} the unscaled column $\overline{a}_j$ will be \begin{equation} \label{eqn:unscaledAbarj} S^B \; \breve{\overline{a}}_j (1/s_{jj}) \end{equation} If there are inactive constraints, the remaining coefficients in the column must be synthesized. Using the same notation as above for basis inverse columns, we have \begin{equation*} \inv{B} a_j = \begin{bmatrix} \inv[0]{(B^t)} & 0 \\[.4ex] -B^l\inv[0]{(B^t)} & I^l \end{bmatrix} \begin{bmatrix} a^t_j \\[.4ex] a^l_j \end{bmatrix} = \begin{bmatrix} \inv[0]{(B^t)} a^t_j \\[.4ex] a^l_j - B^l\inv[0]{(B^t)} a^t_j \end{bmatrix} \end{equation*} Given the unscaled column $\overline{a}_j$ for the active system from \eqnref{eqn:unscaledAbarj}, \dylp generates the necessary coefficients from $a^l_j - B^l\inv[0]{(B^t)} a^t_j$ by calculating $a^l_j - B^l\overline{a}_j$. If the requested column is not active, \dylp first generates the portion of the column $R a_j$ that matches the active constraints, and then proceeds as described in the previous paragraphs. Inactive logical variables will be basic in natural position, hence $\overline{a}_j = e_j$; this is detected as a special case. The user is cautioned that active basic variables are \textit{not} handled as a special case. The work required to generate a row $\beta_i$ of the basis inverse is similar to that required for a column $\beta_j$. Given the scaled basis inverse $\inv{\breve{B}} = \inv[0]{(S^B)}\inv{B}\inv{R}$, the unscaled row of the basis inverse corresponding to basic variable $x_j$, basic for row $i$, will be \begin{equation*} \beta_i = e_i S^B \inv{\breve{B}} R = s_{jj} \breve{\beta}_i R \end{equation*} If the requested row is not active, the basis must be extended as outlined in previous paragraphs. \Dylp creates the partially scaled row vector $e_i B^l S^B$, calculates an intermediate vector $e_i B^l S^B \inv[0]{(\breve{B}^t)}$ and then completes the calculation by postmultiplying by $R$ to remove the row scaling still present in \inv[0]{(\breve{B}^t)}. Regrettably, there's no easy way to calculate $\overline{a}_i$, a row of the transformed matrix $\inv{B}A$. \Dylp implements this operation as $\overline{a}_i = \beta_i A$. The calculation is performed entirely in the original unscaled system. \subsection{Rays} \label{sec:Rays} In several aspects, rays prove to be the most challenging of the three solution components. Careful attention to sign reversals is required for both primal and dual rays, and the virtual nature of the dual problem adds yet another layer to the challenge of generating coefficients for inactive portions of the constraint system. The routines implemented in \dylp will return all rays emanating from the current extreme point up to a limit specified by the client. For a primal ray $r$, it must be the case that $c r < 0$, and $a_i r \leq 0$ for a `$\leq$' constraint, $a_i r \geq 0$ for a `$\geq$' constraint, and $a_i r = 0$ for range constraints and equalities. The task of identifying a ray is easy; indeed, it's a simplified version of the algorithm used to select the leaving variable in a primal pivot, where the only concern is that no basic variable is driven to bound. Getting the sign right requires a bit of thought, however. The relevant mathematics is shown in equations \eqnref{eqn:allPrimalDirs} and \eqnref{eqn:onePrimalDir}; \eqnref{eqn:onePrimalDir} is repeated here for convenience: \begin{equation} \tag{\ref{eqn:onePrimalDir}} -\begin{bmatrix} B^{\,-1}a_j \\ -e_j \end{bmatrix} \Delta_j = -\begin{bmatrix} \overline{a}_j \\ -e_j \end{bmatrix} \Delta_j = \eta_j\Delta_j \end{equation} As can be immediately seen, $r$ is precisely $\eta_j = -\trans{\begin{bmatrix} \overline{a}_j & -e_j \end{bmatrix}}$; the operations required for unscaling have been discussed in \secref{sec:TableauVectors}. In addition to the obvious negation required to produce $\eta_j$, there are two other possible negations to consider. \begin{itemize} \item If the nonbasic variable $x_j$ is actually decreasing from its upper bound $u_j$, the ray must be negated to compensate. \item If the nonbasic variable is a logical $s_i$ associated with a `$\geq$' constraint in the original system, \dylp's input transformations have converted $a_i x \geq b_i \Rightarrow (-a_i)x \leq (-b_i) \Rightarrow (-a_i)x + s_i = (-b_i)$ for $0 \leq s_i \leq \infty$. The inverse converts $(-a_i)x + s_i = (-b_i) \Rightarrow a_i x + s'_i = b_i \Rightarrow a_i x \geq b_i$ for $-\infty \leq s_i' \leq 0$. What appears to be a slack variable increasing from its lower bound is actually a surplus variable decreasing from its upper bound; accordingly, the ray must be negated. \end{itemize} There's no need to synthesize the components of $\eta_j$ that would be associated with inactive constraints. By definition, the basic variable for an inactive constraint is the associated logical. The ray $r$ contains only the components associated with architectural variables. For a dual ray $r$, it must be the case that $rb < 0$ and $rA \geq 0$ for the true dual problem. Unfortunately, as outlined in \secref{sec:SolutionVectors}, the primal~--~dual transform implemented in \dylp does not match the ideal, and this introduces complications. Neither mathematical test is guaranteed to work unless the dual variables associated with tight implicit bound constraints (\ie, nonbasic primal variables) are handled explicitly. As with primal rays, the task of identifying a dual ray is easy, a simplified version of the algorithm used to select the leaving dual variable in a dual pivot. The only concern is that no dual basic variable be driven to bound. Again, it's getting the sign right that requires some thought. As discussed in \secref{sec:Notation}, the vector $\overline{a}_k$ is the proper starting point; the initial negation which would normally be required is built in by $\mathcal{N}\inv[-2]{\mathcal{B}} = -\inv{B}N$. The operations required for unscaling have been discussed in \secref{sec:TableauVectors}. It's necessary to add a coefficient of 1.0 for the nonbasic dual that's driving the ray. There are three other sources of negation to consider: \begin{itemize} \item If the entering dual is apparently decreasing because it's associated with a leaving primal variable that's decreasing to its upper bound (and hence must have a negative reduced cost when it becomes nonbasic), the ray must be negated to compensate. \item If the ray is derived from a `$\geq$' constraint in the original system, the coefficients of the constraint have been negated; this is encoded in the row scaling. However, as noted for primal rays, the logical must really be interpreted as a surplus variable with an upper bound of zero, and if it's basic for this row we have the case described in the previous item. The ray must be negated. \item As explained in \secref{sec:SolutionVectors}, if an individual ray coefficient corresponds to a variable that is nonbasic at its upper bound, the ray coefficient must be negated if the client has requested the true dual sign convention. \end{itemize} DyLP-1.10.4/DyLP/doc/interface.tex0000644000175200017520000020650411263240452015120 0ustar coincoin\section{\dylp Interface} \label{sec:DylpInterface} This section describes the native interface for \dylp. In addition to the main routine, \pgmid{dylp}, routines are provided for access to the solution, including rays and tableau vectors; for pricing; for printing; and for a few miscellaneous services. Sections~\ref{sec:SimplexSolver}~--~\ref{sec:StartUpShutdownSummary} document the basic use of \dylp. Sections~\ref{sec:SolutionRoutines}~--~\ref{sec:UtilityRoutines} describe the routines used to access the solution, and the routines provided for pricing, printing, and miscellaneous services. Sections ~\ref{sec:LPProbSpec}~--~\ref{sec:DylpTolerances} describe the parameters, options, and tolerances provided by \dylp. For additional details on how to use \dylp, consult the comments in the source, particularly in \coderef{dylp.h}{} and \coderef{dy_setup.c}{}, and the example drivers supplied in the distribution. \dylp's native interface is peculiar to \dylp and a bit low-level in places. Many individuals will find it more convenient to use \dylp as an embedded component within the software infrastructure provided by the \coin project \cite{COIN}. For details of the \coin OSI layer for \dylp, OsiDylp, please consult the \textsc{Coin} documentation. An added advantage of this approach is that the OSI API provides a solver-independent interface. The underlying solver can be easily changed because the OSI layer insulates the client from the details of the solver's native interface. The \dylp distribution provides a simple C driver program using \dylp's native interface in the file \coderef{osi_dylp.c}{}. The command `\pgmid{osi_dylp -h}' will print a message describing the available command line options. \dylp assumes that the constraint system passed to it as a parameter \textit{does not} contain logical variables (\ie, slacks and artificials). On occasion, it must return values for logical variables; in such cases, it will use the negative of the index of the associated constraint. \subsection{Simplex Solver} \label{sec:SimplexSolver} \dylp is called as \begin{subrdoc} \item \subrhdr{lpret_enum dylp} {lpprob_struct *orig_lp, lpopts_struct *orig_opts, lptols_struct *orig_tols, \\ lpstats_struct *orig_stats} The \pgmid{orig_lp} structure (\secref{sec:LPProbSpec}) specifies the constraint system, control options, and (optionally) an initial basis and status vector and an initial active variable set. It is used to return the final status, primal and dual variable values, basis, and status vector, and (optionally) the active variables. The \pgmid{orig_opts} structure (\secref{sec:DylpOptions}) specifies option settings to control \dylp's actions. The \pgmid{orig_tols} structure (\secref{sec:DylpTolerances}) specifies numeric tolerances and related control information. The optional structure \pgmid{orig_stats} (\secref{sec:DylpStatistics}) can be used (in conjunction with conditionally compiled code) to return detailed statistics about \dylp's actions. \end{subrdoc} \subsection{Parameter Routines} \label{sec:ParameterRoutines} The normal sequence to establish parameter values for \dylp is as follows: \begin{enumerate} \item The client calls \pgmid{dy_defaults} to allocate option and tolerance structures and populate them with default values. The client can then adjust the parameters as desired. \item The client somehow establishes the original copy of the constraint system. Typically, this will be a call to a constraint system generator\footnote{% Consult the \pgmid{consys} documentation for information on how to use the routines in the \pgmid{consys} package to build a constraint system from scratch.}, or a call to a routine which will read an MPS file. \item The client calls \pgmid{dy_checkdefaults} to to set parameter values which are calculated based on properties of the constraint system, and to ensure that all parameters are within acceptable bounds. \end{enumerate} \begin{subrdoc} \item \subrhdr{void dy_defaults}% {lpopts_struct **opts, lptols_struct **tols} This routine will allocate an options structure \pgmid{opts} and a tolerance structure \pgmid{tols} and populate them with the standard default values for \dylp. Note that default values for some parameters are calculated in \pgmid{dy_checkdefaults} based on the size of the constraint system. \item \subrhdr{void dy_checkdefaults}% {consys_struct *sys, lpopts_struct *opts, lptols_struct *tols} This routine checks limits on parameter values and calculates values which depend on the size of the constraint system. User-supplied values are \textit{not} overridden unless they are outside of \dylp's bounds for the parameter. \item \subrhdr{void dy_setprintopts}% {int lvl, lpopts_struct *opts} This routine is provided purely for convenience; it will set all of \dylp's print levels based on the single value supplied for \pgmid{lvl}. Roughly, $\pgmid{lvl} = 0$ suppresses all output, $\pgmid{lvl} = 1$ establishes the default print levels, which allow messages about extraordinary events, and $\pgmid{lvl} \geq 2$ provides increasing amounts of information. Consult the code for details. \end{subrdoc} \subsection{Basis Package Initialisation} \label{sec:GLPKBasisInit} The \glpk basis package used in \dylp maintains static data structures that must be initialised before use and freed after use. For efficiency, it is useful to postpone initialisation until the size of the constraint system is known and can be used to estimate the size of the basis package's data structures, but \dylp will expand the basis structures if it detects that the constraint system has grown too large for the allocated capacity. Initialisation must occur before the first call to \pgmid{dylp}. The basis structures should be freed when they are no longer needed. \begin{subrdoc} \item \subrhdr{void dy_initbasis}% {int concnt, int factor_freq, double zero_tol} \pgmid{dy_initbasis} initialises the data structures used by the \glpk basis maintenance package. \pgmid{concnt} specifies the maximum allowable number of rows (constraints). \pgmid{factor_freq} is the maximum number of basis updates which can occur between each (re)factorisation of the basis. A conservative value will be a bit larger than the regular refactorisation interval; for \dylp, $\pgmid{lpopts.factor}+5$. The final parameter, \pgmid{zero_tol}, can be used to override \glpk's default zero tolerance if it is set to any value other than zero. Be sure you understand the ramifications of overriding the default. The routine sets several other parameters important to pivoting. Interested readers should consult the comments in the code (\coderef{dy_basis.c}{dy_initbasis}). \item \subrhdr{void dy_freebasis}{void} This routine will free the data structures allocated by the call to \pgmid{dy_initbasis}. \end{subrdoc} \subsection{Information and Error Messages} \label{sec:IOandErrorMsgs} \dylp uses private library packages for information and error messages\footnote{% This usage is historical, rooted in an ancient era when i/o was still a roll-your-own enterprise that differed dramatically from one operating system and programming environment to the next.}. The most visible value-added service provided by the libraries is integration of file and terminal output. Routines which generate output accept parameters to specify whether the output generated by a call should be sent to a file, to the terminal, both, or neither. The library packages must be initialised during startup. A brief explanation is provided here. \subheading[l]{Information Messages} The I/O library provides a convenient means to generate information messages. Information messages may use any of the standard C conversion specifications; the underlying print engine for the current implementation is \pgmid{vfprintf}. In addition to integrated file and terminal i/o, the library manages open file descriptors and coordinates activity with the error message library. See the code for examples of usage of the routines used to generate information messages (\pgmid{outchr}, \pgmid{outfmt}, and \pgmid{outfxd}). The simple driver in \coderef{osi_dylp.c}{} contains a fragment of code which uses the \pgmid{chgerrlog} routine to merge information and error messages in a single log file. Initialisation and shutdown of the error message package is accomplished with the routines \pgmid{ioinit} and \pgmid{ioterm}. \begin{subrdoc} \item \subrhdr{bool ioinit}{void} Initialises internal data structures. \item \subrhdr{void ioterm}{void} Cleans up and shuts down the i/o package. Note that \pgmid{ioterm} \textit{does not} close open streams. It is assumed that the client will close open streams as appropriate, and that remaining streams can be left open until closed by the operating system at program termination. \end{subrdoc} \subheading[l]{Error Messages} The error message library provides a convenient means to generate warning and error messages. Error messages may use any of the standard C conversion specifications; the underlying print engine for the current implementation is \pgmid{vfprintf}. The text of error messages reside in a file (\coderef{bonsaierrs.txt}{} in the \dylp distribution). Error messages are printed using the routines \pgmid{warn} and \pgmid{errmsg}. In calls to these routines, the error message is specified by a number. If an error message file cannot be located, a generic error message giving the error number will be produced. See the code for examples of usage of the routines used to generate warning (\pgmid{warn}) and error (\pgmid{errmsg}) messages. Initialisation and shutdown of the error message package is accomplished with the routines \pgmid{errinit} and \pgmid{errterm}. \begin{subrdoc} \item \subrhdr{void errinit}% {const char *emsgpath, const char *elogpath, bool errecho)} The parameter \pgmid{emsgpath} specifies the file containing the error messages. The parameter \pgmid{elogpath} specifies a file name to be used to log error messages; if null, error messages are not logged. The parameter \pgmid{errecho} should be set to true if error messages should be echoed to \pgmid{stderr}, false otherwise. \item \subrhdr{void errterm}{void} Cleans up and shuts down the error message package. In keeping with the behaviour of \pgmid{ioterm}, it is left to the client or operating system to close any error log file. \end{subrdoc} On startup, the error message package should be initialised first, followed by the i/o package. At termination, the i/o package should be shut down first. \subsection{Summary of \dylp Startup and Shutdown} \label{sec:StartUpShutdownSummary} Pulling together the information from the previous sections, the sequence of actions required to use \dylp is listed below. \begin{enumerate} \item Initialise the error message and i/o packages. Open log files for information and error messages (optional). \item Establish default parameter structures. Open and parse a file of \dylp option specifications (optional). \item Create a constraint system using a constraint generator or by reading an input file. Adjust options and tolerances to match the constraint system. At some point between creating the constraint system and calling \pgmid{dylp}, convert any `$\geq$' constraints to other forms. \item Initialise the basis package. \item Construct parameter structures and call \pgmid{dylp}. \item Process the answer, restoring `$\geq$' constraints and adjusting the answer appropriately, if the application demands it. \item Free data structures. This may require an additional call to \pgmid{dylp}, if the parameters given in the previous call instructed \dylp to retain internal data structures for efficient reoptimisation. It will certainly require calls to \pgmid{dy_freebasis}, \pgmid{dy_freesoln}, and \pgmid{consys_free}. \item Close files and shut down the i/o and error message packages. \end{enumerate} Consult the sample drivers provided with \dylp for example implementations. \subsection{Solution, Ray, and Tableau Routines} \label{sec:SolutionRoutines} \dylp's natural inclination is to return a compact version of the basis and the primal and dual solutions within the \pgmid{lpprob_struct} passed as the \pgmid{orig_lp} parameter to \pgmid{dylp}. This is not always convenient or sufficient for the client, so \dylp also provides a variety of routines to return individual components of the solution, rays (when present), and tableau vectors. \subheading[l]{Solution Routines} The following routines return the values of primal and dual variables and the status of primal variables. In all cases, if the client does not provide a vector for the result, a vector will be allocated. \begin{subrdoc} \item \subrhdr{void dy_colDuals}% {lpprob_struct *orig_lp, double **p_cbar, bool trueDuals} Returns the values of the dual variables associated with nonbasic primal variables, $\overline{c}^N = c^N - c^B B^{\,-1}N$, in column order. Put another way, the dual variables associated with architecturals at bound (tight implicit bound constraints) and logicals at bound (tight explicit constraints). If \pgmid{trueDuals} is false, the sign convention is that of the minimisation primal problem with implicit bounds solved by \dylp, hence the vector returned is precisely the reduced costs. If \pgmid{trueDuals} is true, the sign convention is that of the true dual problem with all implicit bound constraints made explicit, hence reduced costs corresponding to primal variables nonbasic at upper bound are negated to get the correct value for the dual variable. \item \subrhdr{void dy_rowDuals}% {lpprob_struct *orig_lp, double **p_y, bool trueDuals} Returns the values of the dual variables associated with the constraints, $y = c^B B^{\,-1}$, in row order. If \pgmid{trueDuals} is false, the sign convention is that of the minimisation primal problem solved by \dylp. If \pgmid{trueDuals} is true, the sign convention is that of the true dual problem. In either case, dual variables associated with `$\geq$' constraints are negated. (This convention is adopted so that $yA$ `just works' on a constraint system with a mix of `$\leq$' and `$\geq$' constraints.) \item \subrhdr{void dy_colPrimals}% {lpprob_struct *orig_lp, double **p_x} Returns the values of all primal variables, in column order. (See also \pgmid{dy_expandxopt}.) \item \subrhdr{void dy_rowPrimals}% {lpprob_struct *orig_lp, double **p_xB, int **p_indB} Returns the values of the basic primal variables, in row (basis) order. The indices of the variables are returned in \pgmid{p_indB}. The indices of basic logical variables are encoded as the negative of the index of the associated constraint. \item \subrhdr{void dy_logPrimals}% {lpprob_struct *orig_lp, double **p_logx} Returns the values of the primal logical variables, in row order. \item \subrhdr{void dy_colStatus}% {lpprob_struct *orig_lp, flags **p_colstat} Returns the status of all primal variables, in column order. Note that this routine returns the full range of status codes used by \dylp. \item \subrhdr{void dy_logStatus}% {lpprob_struct *orig_lp, flags **p_logstat} Returns the status of all logical variables, in row order. Note that this routine returns the full range of status codes used by \dylp. \item \subrhdr{bool dy_expandxopt}% {lpprob_struct *lp, double **p_xopt} This routine examines the \pgmid{lp} data structure and assembles the values of the basic and nonbasic primal variables into a single vector. (See also \pgmid{dy_colPrimals}.) \end{subrdoc} \subheading[l]{Ray Routines} This pair of routines return the rays emanating from the current primal or dual extreme point, when available, up to the number specified by the client. The number of rays returned will be less than or equal to the number requested. \dylp always returns a status code in the context of the primal problem. An indication of primal unbounded guarantees the existence of primal rays. An indication of primal infeasibility will \textit{almost always} indicate dual unboundedness, but keep in mind that it is possible for a problem to be both primal and dual infeasible. \begin{subrdoc} \item \subrhdr{bool dy_primalRays}% {lpprob_struct *orig_lp, int *p_numRays, double ***p_rays} Returns all primal rays emanating from the current extreme point, up to the limit specified by \pgmid{p_numRays}. On return, \pgmid{p_numRays} will be set to the number of rays actually returned, and each entry in \pgmid{p_rays} will point to a vector containing one ray with components in column order. If no vector is supplied for \pgmid{p_rays}, one will be allocated. Do not supply vectors for individual rays, these are allocated as needed. This routine should only be called when \dylp has found the problem to be primal unbounded. If the problem was solved to optimality or found to be primal infeasible, a warning will be issued but the routine will still return true. If the routine is called for any other result, it will print an error message and return false. \item \subrhdr{bool dy_dualRays}% {lpprob_struct *orig_lp, bool fullRay, int *p_numRays, double ***p_rays, \\ bool trueDuals} Returns all dual rays emanating from the current extreme point, up to the limit specified by \pgmid{p_numRays}. On return, \pgmid{p_numRays} will be set to the number of rays actually returned. If \pgmid{fullRay} is false, each ray is returned as an $m$-vector containing only the components associated with the row duals, in row order. If \pgmid{fullRay} is true, each ray is returned as an $(m+n$)-vector. The first $m$ entries contain the components associated with the row duals. The remaining $n$ entries contain the components associated with nonbasic primal variables (\ie, the ray components associated with tight implicit bounds). If no vector is supplied for \pgmid{p_rays}, one will be allocated. Do not supply vectors for individual rays, these are allocated as needed. If \pgmid{trueDuals} is false, the sign convention used is appropriate for a minimisation primal with implicit bounds (matching the values returned by \pgmid{dy_rowDuals} and \pgmid{dy_colDuals}). If \pgmid{trueDuals} is true, the sign convention used is appropriate for the true dual problem with all implicit bound constraints made explicit. In either case, duals associated with explicit `$\geq$' constraints are negated. This routine should only be called when \dylp has returned an indication that the problem is primal infeasible. As mentioned above, this will almost always correspond to dual unboundedness. If the problem was solved to optimality or found to be primal unbounded (hence dual infeasible), a warning will be issued but the routine will still return true. If the routine is called for any other result, it will print an error message and return false. \end{subrdoc} \subheading[l]{Tableau Routines} These four routines return rows and columns of the basis inverse and rows and columns of the constraint matrix multiplied by the basis inverse. \begin{subrdoc} \item \subrhdr{bool dy_abarj}% {lpprob_struct *orig_lp, int tgt_j, double **p_abarj} Returns $\overline{a}_j = B^{\,-1}a_j$ for a column $a_j$ of the constraint matrix. \item \subrhdr{bool dy_betaj}% {lpprob_struct *orig_lp, int tgt_j, double **p_betaj} Returns column $j$ of the basis inverse, $\overline{\beta}_j = B^{\,-1}e_j$. \item \subrhdr{bool dy_abari}% {lpprob_struct *orig_lp, int tgt_i, double **p_abari, double **p_betai} Returns $\overline{a}_i = a_i B^{\,-1}$ for a row $a_i$ of the constraint matrix. Since the routine actually calculates $\beta_i A$, it can return $\beta_i$ at no extra computational cost. If \pgmid{p_betai} is provided, it will be loaded with $\beta_i$ on return. \item \subrhdr{bool dy_betai}% {lpprob_struct *orig_lp, int tgt_i, double **p_betai} Returns row $i$ of the basis inverse, $\overline{\beta}_i = e_i B^{\,-1}$. \end{subrdoc} \subsection{Pricing Routines} \label{sec:PricingRoutines} \dylp provides two additional routines which are useful in a mixed-integer linear programming environment. \pgmid{dy_pricenbvars} will calculate the reduced cost for a specified set of nonbasic variables and \pgmid{dy_pricedualpiv} will calculate the cost of the first dual pivot (a generalised penalty calculation) given a specified set of candidate nonbasic variables. \begin{subrdoc} \item \subrhdr{bool dy_pricenbvars}% {lpprob_struct *orig_lp, flags priceme, \\ double **p_ocbar, int *p_nbcnt, int **p_nbvars} This routine calculates the reduced cost of nonbasic variables, tapping the \dylp data structures for active variables and calculating the reduced cost as needed for inactive variables. \pgmid{priceme} provides limited additional control by allowing the client to specify the status of the nonbasic variables that should be priced. For example, to price all variables that are nonbasic at their upper or lower bound, \pgmid{priceme} should be set to \pgmid{vstatNBUB|vstatNBLB}. Other nonbasic variables (fixed, free, or superbasic) will not be priced. (See the section on status codes in \coderef{dylp.h} for additional information.) The routine returns a compact list of \pgmid{p_nbcnt} indices of priced variables in \pgmid{p_nbvars}, with the corresponding reduced costs in \pgmid{p_ocbar}. The indices returned in \pgmid{p_nbvars} are the indices used in the original constraint system, which does not contain logical variables. Where nonbasic logical variables are present in the active system, they are identified in \pgmid{p_nbvars} by the negative of the index of the associated constraint. In particular, the values returned are appropriate for use as the \pgmid{nbcnt}, \pgmid{nbvars}, and \pgmid{cbar} parameters to \pgmid{dy_pricedualpiv}. \item \subrhdr{bool dy_pricedualpiv}% {lpprob_struct *orig_lp, int oxindx, double nubi, double xi, double nlbi, \\ int nbcnt, int *nbvars, double *cbar, double *p_upeni, double *p_dpeni} This routine calculates the cost of the first dual pivot associated with forcing the value of the basic variable $x_i$ down to a new upper bound $u_i$ (a down penalty) or up to a new lower bound $l_i$ (an up penalty). The up penalty is $\displaystyle \mathit{upen}_i = \min_k \left\lgroup -(l_i - x_i) \frac{\overline{c}_k}{\overline{a}_{ik}} \right\rgroup$ for $\{k \in N \mid \overline{a}_{ik} < 0 \wedge x_k < u_k \vee \overline{a}_{ik} > 0 \wedge x_k > l_k\}$. The down penalty is $\displaystyle \mathit{dpen}_i = \min_k \left\lgroup -(u_i - x_i) \frac{\overline{c}_k}{\overline{a}_{ik}}\right\rgroup$ for $\{k \in N \mid \overline{a}_{ik} > 0 \wedge x_k < u_k \vee \overline{a}_{ik} < 0 \wedge x_k > l_k\}$. To perform the standard penalty calculation for forcing a basic variable to an integral value, the new lower bound would be $\ceil{x_i}$ and the new upper bound would be $\floor{x_i}$. The basic variable $x_i$ can be an architectural or a logical variable. The routine is capable of pricing a pivot involving the logical variable for a constraint that is not currently active. \pgmid{oxindx} specifies the basic variable to be priced (a logical is specified as the negative of the index of the associated constraint). \pgmid{xi} is the current value of $x_i$ in the optimal solution to the LP. (In the case of the logical for an inactive constraint, the value is obtained by evaluating the constraint at the current solution.) \pgmid{nubi} is the new upper bound $u_i$, and \pgmid{nlbi} is the new lower bound $l_i$. It should be true that $\pgmid{nubi} \leq \pgmid{xi} \leq \pgmid{nlbi}$. \pgmid{nbcnt}, \pgmid{nbvars}, and \pgmid{cbar} are as described for \pgmid{dy_pricenbvars}. The up and down penalties will be returned in \pgmid{p_upeni} and \pgmid{p_dpeni}, respectively. \end{subrdoc} \subsection{Print Routines} \label{sec:PrintRoutines} There are three routines to supply strings for \dylp status, phase, and return codes, a routine to print the compact solution returned by \pgmid{dylp}, and a routine to print the contents of the statistics structure. \begin{subrdoc} \item \subrhdr{dy_dumpcompact}% {ioid chn, bool echo, lpprob_struct *soln, bool nbzeros} This routine prints the solution returned by \pgmid{dylp} in \pgmid{soln} using a human-readable format. Output is directed to the channel specified by \pgmid{chn}, and echoed to the terminal if \pgmid{echo} is true. Normally, nothing is printed for nonbasic variables with a value of zero; set \pgmid{nbzeros} to true to force them to be printed. \item \subrhdr{dy_dumpstats}% {ioid chn, bool echo, lpstats_struct *lpstats, consys_struct *orig_sys} This routine prints the contents of the \pgmid{lpstats} structure in a human-readable format. \pgmid{chn} and \pgmid{echo} are as for \pgmid{dy_dumpcompact}. \pgmid{orig_sys} should be the same constraint system referenced in the \pgmid{orig_lp} parameter to \pgmid{dylp} \item \subrhdr{dy_prtlpret}{lpret_enum lpret} Returns a pointer to a string for the return code specified in \pgmid{lpret}. \item \subrhdr{dy_prtlpphase}{dyphase_enum phase, bool abbrv} Returns a pointer to a string for the return code specified in \pgmid{phase}. If \pgmid{abbrv} is true, this will be a two-character abbreviation. \item \subrhdr{dy_prtvstat}{flags status} Returns a pointer to a static buffer containing a string representation of the status flags specified in \pgmid{status}. The buffer is overwritten at each call. \end{subrdoc} \subsection{Utility Routines} \label{sec:UtilityRoutines} And a final pair of utility routines. \begin{subrdoc} \item \subrhdr{bool dy_dupbasis}% {int dst_basissze, basis_struct **p_dst_basis, basis_struct *src_basis, \\ int dst_statussze, flags **p_dst_status, int src_statuslen, flags *src_status} This routine will duplicate the basis and status arrays. Data structures will be allocated as required if they are not supplied as parameters. \item \subrhdr{dy_freesoln}% {lpprob_struct *lpprob} This routine will free the data structures used to hold the LP solution, including data structures for the basis, status vector, primal and dual variable values, and the active variables vector. \end{subrdoc} \subsection{The LP Problem Specification} \label{sec:LPProbSpec} The structure \pgmid{lpprob_struct *orig_lp} is used to define the LP problem to \dylp and to return the answer to the client. It holds pointers to the constraint system, an active variable vector, a basis vector, a status vector, and vectors for the primal and dual variables, as well as fields for information and control. Each field is discussed below; for precise details, the reader should consult the file \coderef{dylp.h}{}. \begin{codedoc} \item\varhdr{actvars} A vector used to specify and/or return the set of active variables. The vector supplied as an input parameter will be overwritten on output. \begin{description}[\textbf{(o)}] \item[\textbf{(i)}] For a warm start, an initial set of active variables can be specified. This information will be used only if the \pgmid{lpctlACTVARSIN} flag is set in the \pgmid{ctlopts} field. For a cold or hot start, a vector can be provided to return the final set of active variables. \item[\textbf{(o)}] The final set of active variables. If no vector was supplied as an input parameter, \dylp will allocate one on output. Active variable information is returned only if the \pgmid{lpctlACTVARSOUT} flag is set when \dylp is called. Valid information is returned only if an optimal solution is found. If valid information is not returned, the \pgmid{lpctlACTVARSOUT} flag will be reset. \end{description} \item\varhdr{basis} A data structure for the LP basis. Because the set of active constraints at optimum will not, in general, include all constraints, the basis vector specifies the constraint and the primal variable in each basis position. \begin{description}[\textbf{(o)}] \item[\textbf{(i)}] For a warm start, an initial basis must be provided. For a cold or hot start, a structure can be provided to return the final basis. \item[\textbf{(o)}] The final basis. If no vector was supplied as an input parameter, \dylp will allocate one on output. \end{description} \item\varhdr{colsze} The allocated column capacity of the data structure. The \pgmid{status} and \pgmid{actvars} data structures, if provided by the client, must be capable of holding this many entries. If \pgmid{colsze} is insufficient to return the answer, \dylp will reallocate the data structures. \item\varhdr{consys} The constraint system, in the format described for the \consys constraint system subroutine library \cite{Haf98b}. \item\varhdr{ctlopts} A vector of flags used to specify optional actions and status. The current set of flags can be used to control allocation and deallocation of internal \dylp data structures (\pgmid{lpctlDYVALID}, \pgmid{lpctlNOFREE}, \pgmid{lpctlONLYFREE}), specify the presence of changes to the problem bounds (\pgmid{lpctlUBNDCHG}, \pgmid{lpctlLBNDCHG}, \pgmid{lpctlRHSCHG}) and objective (\pgmid{lpctlOBJCHG}), specify initial variable and/or constraint activation (\pgmid{lpctlINITACTVAR}, \pgmid{lpctlINITACTCON}), and specify the exchange of active variable information (\pgmid{lpctlACTVARSIN}, \pgmid{lpctlACTVARSOUT}). \item\varhdr{iters} The total number of simplex iterations. \item\varhdr{lpret} The return code from the simplex routine. If no errors occur, the code should be one of \pgmid{lpOPTIMAL} (optimal), \pgmid{lpINFEAS} (primal infeasible), or \pgmid{lpUNBOUNDED} (primal unbounded). Error returns include \pgmid{lpPUNT} (nonbasic variables exist with favourable reduced costs, but they cannot be pivoted due to unsuitable pivot coefficients), \pgmid{lpLOSTFEAS} (primal feasibility has been lost and \dylp has exceeded its limit on attempts to regain feasibility), \pgmid{lpSTALLED} (the limit on pivots without improvement in the objective has been exceeded, due to cycling or stalling), \pgmid{lpITERLIM} (a limit on pivots per phase or total pivots has been exceeded), \pgmid{lpACCCHK} (a numerical accuracy check has occurred), \pgmid{lpNOSPACE} (the \glpk basis routines could not acquire sufficient space to maintain the basis inverse), \pgmid{lpFATAL} (an unspecified fatal error has occurred), and \pgmid{lpINV} (\dylp aborted due to internal confusion). \item\varhdr{obj} For an optimal result, the value of the objective function. For an infeasible result, the total primal infeasibility. For an unbounded result, the index of the unbounded variable, negated if the variable can decrease without bound, positive if it can increase without bound. For any other return status, this field is undefined. \item\varhdr{phase} \begin{description}[\textbf{(o)}] \item[\textbf{(i)}] If the phase is set to \pgmid{dyDONE}, \dylp will assume that the only purpose of the call is to free internal data structures. Other values are ignored. \item[\textbf{(o)}] The termination phase of the dynamic simplex algorithm; should be \pgmid{dyDONE} unless an error has occurred, in which case it'll be \pgmid{dyINV}. \end{description} \item\varhdr{rowsze} The allocated row capacity of the data structure. The \pgmid{basis}, \pgmid{x}, and \pgmid{y} data structures, if provided by the client, must be capable of holding this many entries. If \pgmid{rowsze} is insufficient to return the answer, \dylp will reallocate the data structures. \item\varhdr{status} A data structure to hold the status of variables. For nonbasic variables, an entry is a \dylp status code (\pgmid{vstatNBFX}, \pgmid{vstatNBUB}, \pgmid{vstatNBLB}, or \pgmid{vstatNBFR}). For basic variables, an entry is the negative of the basis position. \begin{description}[\textbf{(o)}] \item[\textbf{(i)}] For a warm start, an initial status must be provided. For a cold or hot start, a structure can be provided to return the final status. \item[\textbf{(o)}] The final status vector. The value of nonbasic primal variables is returned through this vector. If no vector was supplied as an input parameter, \dylp will allocate one on output. \end{description} \item\varhdr{x} A data structure to hold the values of the basic primal variables. \begin{description}[\textbf{(o)}] \item[\textbf{(i)}] A structure can be provided to return the final values. \item[\textbf{(o)}] The values of the basic primal variables, indexed by basis position. If no vector was supplied as an input parameter, \dylp will allocate one on output. \end{description} \item\varhdr{y} A data structure to hold the values of the dual variables. \begin{description}[\textbf{(o)}] \item[\textbf{(i)}] A structure can be provided to return the final values. \item[\textbf{(o)}] The values of the dual variables, indexed by basis position. If no vector was supplied as an input parameter, \dylp will allocate one on output. \end{description} \end{codedoc} \subsection{\dylp Options} \label{sec:DylpOptions} \dylp is intended to be a flexible testbed, and as such has a large number of options. Many, in fact, have argued that it has entirely too many options. The author offers two observations in his own defense: \begin{itemize} \item All of them, at some point, were useful to him, and \item if you're not interested, ignore them all and let \dylp choose what it thinks are reasonable values. \end{itemize} If you look through the code, you may notice a few options that aren't documented here. By and large, this is because the best choice is clear and choices other than the current default give uniformly poor performance. Options are held internally in a \pgmid{lpopts_struct} structure. Each field is described briefly below, including default values. The reader is encouraged to consult \coderef{dylp.h}{} for details, and \coderef{dy_setup.c}{} to confirm that default values have not changed since this documentation was written. Most options can be set using commands read from an options file. This file is parsed by a simple command interpreter (contained in \coderef{cmdint.c}{}) and support routines in \coderef{dy_setup.c}{} and in the i/o library (\vid \secref{sec:IOandErrorMsgs}). If your application has some other way to acquire options from the user, all that's really necessary is a way to create and load a \pgmid{lpopts_struct} to pass as a parameter to \pgmid{dylp}. As described in \secref{sec:ParameterRoutines}, the routines \pgmid{dy_defaults} and \pgmid{dy_checkdefaults} will, respectively, initialise a \pgmid{lpopts_struct} with default values and adjust those values to match the constraint system. In the individual option descriptions which follow, the first line provides the syntax expected by the simple command interpreter mentioned above. information about acceptable values. Where applicable, for simple numeric parameters, the next line gives the lower bound, default value, and upper bound for the option in the notation $(\text{lower bound}) \leq (\text{default value}) \leq (\text{upper bound})$. The remainder of the entry describes the action of the option. \begin{codedoc} \item\Varhdr{active}{cons, vars} \bgroup \raggedright \kw{lpcontrol active} \bnflist[\raise2pt\hbox{\kw{,}}]{\nt{size-spec}} \kw{;} \\ \nt{size-spec} \bnfeq \kw{variables} \te{float} | \kw{constraints} \te{float} \egroup $0.0 \leq .25 \leq 1.0$ for both The values \pgmid{active.vars} and \pgmid{active.cons} specify the fraction of variables and constraints, respectively, which are expected to be active at any one time. The initial allocated capacity of the active constraint system data structure will be the specified fraction of the number of variables and constraints in the constraint system passed to \pgmid{dylp}. They do not represent limits --- the constraint system will be expanded as required. They are exposed for efficiency in the event that the client can provide a better estimate for the expected size of the active constraint system. Note that specifying $\pgmid{active.vars} = 1.0$ and $\pgmid{active.cons} = 1.0$ is \textit{not} the same as specifying that \dylp use the full constraint system (\cf \pgmid{fullsys}). The data structure for the active constraint system will be created with the capacity to hold the full constraint system, but constraint and variable activation and deactivation will proceed as usual. \item\varhdr{addvar} \kw{lpcontrol actvarlim} \te{integer} \kw{;} Limits the maximum number of variables which can be activated in any one execution of the variable activation phase. A value of 0 (the default) means that no limit is enforced. \item\varhdr{check} \kw{lpcontrol check} \te{integer} \kw{;} $1 \leq \pgmid{factor}/2 \leq \infty$ The nominal interval between accuracy checks, expressed in terms of the number of pivots which actually change the basis. Accuracy checks attempt to detect the accumulation of numerical inaccuracy, and \dylp will perform a check earlier if it suspects numerical problems. While there's no enforced upper limit on the number of pivots between accuracy checks, in practice an accuracy check is performed each time the basis is factored during simplex phases. \item\varhdr{coldvars} \kw{lpcontrol coldvars} \te{integer} \kw{;} $0 \leq 5000 \leq 100000$. When the number of active variables in the constraint system on a cold start exceeds \pgmid{coldvars}, and the client has not requested that \dylp work with the full constraint system, \dylp will attempt to deactivate variables before beginning simplex iterations. The upper limit is soft; \dylp will issue a warning if a higher value is requested, but will not enforce the limit. \item\varhdr{con}{actlvl, actlim, deactlvl} \begin{itemize} \item[\pgmid{con.actlvl}] \kw{lpcontrol actconlvl} \te{integer} \kw{;} Specifies the constraint activation strategy. There are two levels: \begin{description} \item[0 (strict)] Activate only constraints which are strictly violated. \item[1 (tight)] Activate constraints which are tight or strictly violated. \end{description} \item[\pgmid{con.actlim}] \kw{lpcontrol actconlim} \te{integer} \kw{;} Limits the maximum number of constraints which can be activated in any one execution of the constraint activation phase. A value of 0 (the default) means that no limit is enforced. \item[\pgmid{con.deactlvl}] \kw{lpcontrol deactconlvl} [\kw{normal}|\kw{aggressive}|\kw{fanatic}] \kw{;} Specifies the constraint deactivation strategy. There are three levels: \begin{description} \item[0 (\kw{normal})] Deactivate only inequalities which are strictly loose (\ie, the associated slack is basic and not at bound). \item[1 (\kw{aggressive})] (default) Deactivate loose inequalities and tight inequalities whose associated dual variable is zero. \item[2 (\kw{fanatic})] Deactivate loose inequalities and any tight constraint (inequality or equality) whose associated dual variable is zero. \end{description} \end{itemize} \item\varhdr{copyorigsys} \kw{lpcontrol forcecopy} \te{boolean} \kw{;} If set to true, \dylp will always make a local copy of the original system. By default, a local copy is made only when necessary. \dylp needs access to a copy of the original constraint system in order to scan it for constraints or variables that should be added. Normally this access is read-only, and \dylp uses the constraint system supplied as a parameter. When scaling is needed, \dylp makes a local copy of the original constraint system, applies scaling, and uses the scaled local copy as the original constraint system. \item\varhdr{degen} \kw{lpcontrol antidegen} \te{boolean} \kw{;} If set to false, \dylp will not use the perturbation-based anti-degeneracy algorithm described in \secref{sec:PerturbedAntiDegeneracy}. The default is to use perturbation-based anti-degeneracy. \item\varhdr{degenlite} \bgroup\raggedright \kw{lpcontrol degenlite} \\ \hfil [\kw{pivotabort}|\kw{pivot}|\kw{alignobj}| \kw{alignedge}|\kw{perpobj}|\kw{perpedge}] \kw{;} \egroup This option specifies the tie-breaking strategy used for choosing between candidates with equal deltas when selecting the leaving primal or dual variable, as described in~\secref{sec:AntiDegenLite}. The options are: \begin{description}[0 (\kw{pivotabort})] \item[0 (\kw{pivotabort})] Break ties using the magnitude of the pivot coefficient, and abort the search at the first basic variable which gives a delta of zero. \item[1 (\kw{pivot})] (default) Break ties using the magnitude of the pivot coefficient, scanning all basic variables. \item[2 (\kw{alignobj})] Break ties by choosing the leaving variable which will make tight the hyperplane most closely aligned with the normal of the objective function (\ie, the normal most nearly lies in the hyperplane). \item[3 (\kw{alignedge})] Break ties by choosing the leaving variable which will make tight the hyperplane most closely aligned with the direction of motion specified by the entering variable (\ie, the edge most nearly lies in the hyperplane). \item[4 (\kw{perpobj})] Break ties by choosing the leaving variable which will make tight the hyperplane most nearly perpendicular to the normal of the objective function (\ie, the hyperplane most nearly blocks motion in the direction of the normal of the objective) \item[5 (\kw{perpedge})] Break ties by choosing the leaving variable which will make tight the hyperplane most nearly perpendicular to the direction of motion specified by the entering variable (\ie, the hyperplane most nearly blocks motion in the direction of the edge). \end{description} \item\varhdr{degenpivlim} \kw{lpcontrol degenpivs} \te{boolean} \kw{;} $1 \leq 1 \leq \infty$ Limits the number of consecutive degenerate pivots which are required to trigger the perturbation-based anti-degeneracy algorithm. A perturbed subproblem is formed when the number of consecutive degenerate pivots exceeds \pgmid{degenpivlim}. The current default of 1 is very aggressive. \item\Varhdr{dpsel}{strat, flex, allownopiv} \kw{lpcontrol dualmultipiv} \te{integer} \kw{;} There are four dual pivoting strategies accessible from the \kw{dualmultipiv} command, specified by the following integer codes: \begin{description} \item[0] standard dual pivoting (\vid \secref{sec:DualStdSelectInVar}) \item[1] generalised dual pivoting (\vid \secref{sec:DualGenSelectInVar}); pivot chosen for maximum dual objective improvement \item[2] generalised dual pivoting; pivot chosen to mimimise the maximum infeasibility over primal variables \item[3] generalised dual pivoting; pivot chosen to minimise the maximum infeasibility over primal variables only if the infeasibility can be reduced; otherwise the pivot is chosen for maximum dual objective improvement \end{description} The pivoting strategy currently in use is held in \pgmid{dpsel.strat}. Two additional values are used to control generalised dual pivoting; these can only be changed under program control. \pgmid{dpsel.flex} defaults to true, allowing \dylp to move between strategies~1 and~3. If the client specifies a pivoting strategy using the \kw{dualmultipiv} command, \pgmid{dpsel.flex} is set to false. \pgmid{dpsel.allownopiv} controls whether \dylp will consider a generalised dual `pivot' which consists of a sequence of variable flips without a final pivot. Computational experience says that this is very prone to cycling and \pgmid{dpsel.allownopiv} is set to false by default. The default initial setting for the dual pivoting options is $\pgmid{dpsel.strat} = 1$, $\pgmid{dpsel.flex} = \pgmid{true}$, and $\pgmid{dpsel.allownopiv} = \pgmid{false}$. \item\varhdr{dualadd} \kw{lpcontrol dualacttype} \te{integer} \kw{;} This option controls the amount of effort that \dylp will expend attempting to add variables (dual constraints) to bound a constraint system which is dual unbounded (\vid \secref{sec:VariableActivation}). \begin{itemize} \item[0] Variable activation is not attempted. \item[1] Type~1 variables are activated. These are variables which could potentially bound the dual problem and which will be dual feasible if activated and placed in the nonbasic partition. Multiple variables of this type can be activated simultaneously. \item[2] Type~2 variables will be activated if there are no type~1 variables. Type~2 variables are variables which would be dual infeasible if placed in the nonbasic partition, but which can be activated and immediately pivoted into the basis to regain dual feasibility. Only one variable of this type can be activated at a time, so this level is computationally expensive. \item[3] (default) Type~3 variables will be activated if there are no type~1 or type~2 variables. Type~3 variables are variables which can be activated and placed in the nonbasic partition with a bound-to-bound pivot. \end{itemize} If the limits placed on dual variable activation do not allow the dual to be bounded \dylp will revert to primal simplex. Allowing up to type~3 activations by default is somewhat risky; limiting activations to type~1 would be a more conservative choice. \item\varhdr{factor} \kw{lpcontrol factor} \te{integer} \kw{;} $1 \leq 50 \leq 100$ The nominal interval for refactoring the basis, in terms of the number of pivots which actually change the basis. Put another way, \pgmid{factor} limits the total number of eta matrices in the multiplicative representation of the basis. As eta matrices accumulate, the work required to perform multiplication by the basis inverse increases, numerical inaccuracy increases, and the data structure grows (\vid \secref{sec:GLPKBasisInit}). This parameter attempts to balance these considerations against the work required to refactor the basis. \dylp will refactor earlier if it suspects numerical problems. The upper limit is soft; \dylp will issue a warning if a higher value is requested, but will not enforce the limit. \item\varhdr{finpurge}{vars, cons} \bgroup \raggedright \kw{lpcontrol final purge} \bnflist[\raise2pt\hbox{\kw{,}}]{\nt{purge-spec}} \kw{;} \\ \nt{purge-spec} \bnfeq [ \kw{variables}|\kw{constraints}] \te{boolean} \egroup Specifies whether \dylp should perform a final round of constraint and/or variable deactivation when the problem has been solved to optimality. By default, \dylp will perform a final round of constraint deactivation and a final round of variable deactivation before it returns. This application of constraint and/or variable deactivation is \textit{not} suppressed by the \pgmid{fullsys} option. \item\varhdr{forcecold} \kw{lpcontrol cold} \te{boolean} \kw{;} When set to true, this option will force \dylp to perform a cold start. \pgmid{forcecold} dominates \pgmid{forcewarm}. The absence of \pgmid{forcecold} and \pgmid{forcewarm} allows a hot start. \item\varhdr{forcewarm} \kw{lpcontrol warm} \te{boolean} \kw{;} When set to \pgmid{true}, this option will force \dylp to perform a warm start. The absence of \pgmid{forcecold} and \pgmid{forcewarm} allows a hot start. \item\varhdr{fullsys} \kw{lpcontrol fullsys} \te{boolean} \kw{;} When set to true, \pgmid{fullsys} forces the use of the full constraint system at all times. \dylp will load the entire constraint system at startup and no constraint or variable activation or deactivation will be performed. In the context of a branch-and-bound MIP code, where the bulk of the LPs are reoptimisations from a known basis, the use of dynamic simplex can save considerable work. To solve an LP once from scratch, or to solve the initial LP relaxation in a branch-and-bound context, use of the full system is usually (but not always) more efficient. \item\varhdr{groom} \kw{lpcontrol groom} [\kw{silent}|\kw{warn}|\kw{abort}] \kw{;} Specifies the action taken when \dylp detects a nontrivial change in the status of a variable when it performs a check following refactoring. The possible values are \begin{description} \item[0 (\kw{silent})] Do nothing. \item[1 (\kw{warn})] (default) Issue a warning message. \item[2 (\kw{abort})] Issue an error message and force an abort. \end{description} The working assumption is that refactoring the basis removed accumulated numerical inaccuracy, causing the change in the status of the variable. \item\Varhdr{heroics}{d2p, p2d} These parameters control whether \dylp will attempt difficult deactivations when trying to force a transition to dual or primal feasibility. \begin{description} \item[\pgmid{d2p}] If true, \dylp will attempt to deactivate primal infeasible basic architectural variables when trying to force primal feasibility. \item[\pgmid{p2d}] If true, \dylp will attempt to deactivate tight constraints (\ie, nonbasic logicals) when trying to force dual feasibility. \end{description} Both of these default to false. Computational experience says that setting them to true is not useful. They can be adjusted only under program control. \item\varhdr{idlelim} \kw{lpcontrol idle} \te{integer} \kw{;} $0 \leq 1000 \leq 2*(\pgmid{concnt}+\pgmid{archvcnt}) \le 50000 \leq 2^{\pgmid{sizeof(int)}-3}$ The limit on the number of pivots allowed without an improvement in the value of the objective function. A pivot in which the change in the objective function value is less than \pgmid{dy_tols.dchk} is defined to be an idle pivot. Too many consecutive idle pivots are taken as an indication that the LP has stalled and may be cycling. If the number of pivots without change in the objective exceeds \pgmid{idlelim}, \dylp aborts and returns \pgmid{lpSTALLED}. Left to its own devices, \dylp will enforce the inner limits of $1000 \leq \pgmid{idlelim} \leq 50000$; the client can explicitly specify any value within the outer limits. \item\varhdr{initbasis} \kw{lpcontrol coldbasis} [\kw{slack}|\kw{logical}|\kw{architectural}] \kw{;} This parameter specifies the type of initial basis constructed for a cold start, as described in \secref{sec:ColdStart}. \begin{description}[2 (\kw{architectural})] \item[1 (\kw{logical})] (default) Prefer slack, then artificial, variables for basic variables. Architectural variables will not be used. \item[1 (\kw{slack})] Prefer slack, then architectural, variables for basic variables. Artificial variables will be used if absolutely necessary. \item[2 (\kw{architectural})] Prefer architectural, then slack, variables for basic variables. Artificial variables will be used if absolutely necessary. \end{description} \item\Varhdr{initcons}{frac, i1lopen, i1l, i1uopen, i1u, i2lopen, i2l, i2uopen, i2u} \bgroup \raggedright \kw{lpcontrol load} [\nt{load-fraction}] \bnflist[\raise2pt\hbox{\kw{,}}]{\nt{interval}} \kw{;} \\ \nt{load-fraction} \bnfeq \te{float} \\ \nt{interval} \bnfeq \nt{open-delim} \nt{ub} \nt{lb} \nt{close-delim} \\ \nt{ub} \bnfeq \te{float} \\ \nt{lb} \bnfeq \te{float} \\ \nt{open-delim} \bnfeq \kw{(} | \kw{[} \\ \nt{close-delim} \bnfeq \kw{)} | \kw{]} \egroup These parameters control the loading of a partial constraint system during a cold start. As described in \secref{sec:ColdStart}, constraints are ranked by the angle formed by the constraint normal and the objective normal, and a specified fraction of one or two angular intervals is loaded. The parameter \pgmid{frac} specifies what fraction of the inequalities in the specified intervals will be loaded. The parameters \pgmid{i1l} and \pgmid{i1u} specify the upper and lower bounds of one interval. If \pgmid{i1lopen} is true, the lower boundary is open; if \pgmid{i1uopen} is true, the upper boundary is open. The parameters \pgmid{i2l}, \pgmid{i2u}, \pgmid{i2lopen}, and \pgmid{i2uopen} can be used to specify an optional second interval. A few examples will make the usage clear. By default, \dylp loads 50\% of all inequalities, with the exception of inequalities which form an angle of $\degs{90}$ with the objective. This is specified as \begin{flushleft} \kw{lpcontrol load .5 [180 90) (90 0] ;} \end{flushleft} To load 75\% of the inequalities with angles between $\degs{100}$ and $\degs{80}$, inclusive, the specification would be \begin{flushleft} \kw{lpcontrol load .75 [100 80] ;} \end{flushleft} Loading the complete constraint system with the specification \begin{flushleft} \kw{lpcontrol load 1.0 [180 0] ;} \end{flushleft} is \textit{not} equivalent to asking \dylp to always use the full constraint system (\cf \pgmid{fullsys}). It will look pretty much the same from the outside, but \dylp will spend time internally performing scans related to constraint and variable activation and deactivation. \item\varhdr{iterlim} \kw{lpcontrol iters} \te{integer} \kw{;} $0 \leq 10000 \leq 5*(\pgmid{concnt}+\pgmid{archvcnt}) \le 100000 \leq 2^{\pgmid{sizeof(int)}-3}$ The pivot limit for each occurrence of a simplex phase (primal phases~I and II and dual phase~II). The overall pivot limit, cumulative over all occurrences of all phases, is $3*\pgmid{iterlim}$. If either the per phase or total limit is exceeded, \dylp terminates the problem and returns \pgmid{lpITERLIM}. Left to its own devices, \dylp will enforce the inner limits of $10000 \leq \pgmid{iterlim} \leq 100000$; the client can explicitly specify any value within the outer limits. \item\varhdr{patch} \kw{lpcontrol patch} \te{boolean} \kw{;} If set to false, \dylp is forbidden from patching a singular basis. By default, \dylp will patch a singular basis and keep going. You really don't want to set this to false. \item\varhdr{ppsel} \kw{lpcontrol primmultipiv} \te{integer} \kw{;} There are two primal pivoting strategies accessible from the \kw{primmultipiv} command, specified by the following integer codes: \begin{description} \item[0] standard primal pivoting (\vid \secref{sec:PrimalStdSelectOutVar}) \item[1] (default) extended primal pivoting (\vid \secref{sec:PrimalGenSelectOutVar}) \end{description} The pivoting strategy currently in use is held in \pgmid{ppsel.strat}. \item\varhdr{print} \bgroup \raggedright \kw{lpprint} \nt{what} \te{integer} \kw{;} \\ \nt{what} \bnfeq \kw{basis}|\kw{conmgmt}|\kw{crash}|\kw{degen}|\kw{dual}| \kw{major}|\kw{phase1}|\kw{phase2}|\kw{pivoting}| \\ \hspace{8ex} \kw{pivreject}|\kw{pricing}|\kw{scaling}|\kw{setup}|\kw{varmgmt} \egroup The print options control the amount of output which \dylp produces as it runs. This can be varied from absolutely nothing to copious output useful only during detailed debugging. Printing options are covered in detail in \secref{sec:DylpDebugging}, which describes debugging options and capabilities. If \dylp is compiled with the compile-time constant \pgmid{NDEBUG} defined, virtually all informational printing is removed. \item\varhdr{scaling} \kw{lpcontrol scaling} \te{integer} \kw{;} Specifies how \dylp should scale the constraint system (\secref{sec:Scaling}). \begin{itemize} \item[0] \dylp is not allowed to apply scaling. \item[1] \dylp should use scaling vectors attached to the constraint system. \item[2] (default) \dylp should evaluate the constraint system and apply scaling if necessary. \end{itemize} \item\varhdr{scan} \kw{lpcontrol scan} \te{integer} \kw{;} $200 \le \pgmid{archvcnt}/2 \le 1000$. Specifies the minimum number of columns which will be scanned in primal simplex to select a new candidate entering variable. This parameter applies only when \pgmid{dy_primalin} is called to select the entering variable (\vid \secref{sec:PrimalStdSelectInVar}). \item\varhdr{usedual} \kw{lpcontrol usedual} \te{boolean} \kw{;} When set to false, this option prevents \dylp from using dual simplex. By default, \dylp will use dual simplex when possible. \end{codedoc} \subsection{\dylp Tolerances} \label{sec:DylpTolerances} \dylp has a number of numeric tolerances and related control information which are used in equality and accuracy checks and associated algorithms which attempt to control the accumulation of numerical accuracy. Each is described briefly below; again, the reader is encouraged to consult \coderef{dylp.h}{} for details. Several of the tolerances described below are dynamically adjusted by \dylp in response to its assessment of the numerical stability of the current basis. As a general rule, tread carefully when overriding \dylp's defaults, and please take the time to read the code comments and consider the interrelationships between the tolerances. \begin{codedoc} \item\varhdr{bogus} \kw{lpcontrol bogus} \te{double} \kw{;} Default: 1.0 The `bogus number' tolerance. Values such that $\pgmid{zero} < \abs{x} \le \pgmid{zero}*\pgmid{bogus}$ are considered likely to be the result of accumulated numerical inaccuracy, rather than legitimate values. Pivot coefficients and primal variable values within this range will trigger refactoring of the basis. For dual variables, the same test is applied, using the dual zero tolerance (\pgmid{cost}). The default value is $1.0$. Experience seems to show that for the majority of problems increasing this value will cause the basis to be refactored more often and will not improve performance or accuracy. It's better to rely on \dylp's accuracy checks to determine if the basis should be refactored before the normal refactor interval has passed. Increasing \pgmid{bogus} may be useful if scaling is disabled, or if \pgmid{factor} has been set to a very large value. \item\varhdr{cost} \kw{lpcontrol costz} \te{double} \kw{;} Default: $1.0\times10^{-11}$ The zero tolerance applied to values associated with the dual problem (dual variables and reduced costs). This tolerance may be tightened if \dylp scales the constraint system for numerical stability. Let $\psi = ((\max_{ij} \abs{a_{ij}})/(\min_{ij} \abs{a_{ij}}))^{1/2}$. Let $\psi_u$ be the value calculated for the unscaled matrix $A$ and $\psi_s$ be the value calculated for the scaled matrix $\breve{A}$. Let $s = \max (0, \floor{\log \psi_u/\psi_s + .5}-2$. The dual zero tolerance will be tightened by $10^{-s}$ (\ie, $\pgmid{cost} = \pgmid{cost} \times 10^{-s}$). In english, if scaling really did make a difference, so that the scaled matrix is significantly more stable than the unscaled matrix, \dylp should be extra careful about accuracy so that the scaled solution is still a solution after unscaling. \item\varhdr{dchk} \kw{lpcontrol dchk} \te{double} \kw{;} Default: $1.0 \times 10^{s-4}$, where $s = \max (0, \floor{\log \pgmid{archccnt} + .5}-2$ The dual accuracy check tolerance, as described in \secref{sec:AccuracyChecks}. The adjustment by $s$ progressively loosens the accuracy check tolerance for systems with more than $10^{2.5} \approx 300$ dual variables. In english, when there are many dual variables, accumulating numerical inaccuracy warrants some relaxation of the accuracy check tolerance. This adjustment is made in \coderef{}{dy_checkdefaults}. \item\varhdr{dfeas} The dual feasibility check tolerance, dynamically calculated using \pgmid{cost} as the base value, as described in \secref{sec:AccuracyChecks}. \item\varhdr{dfeas_scale} \kw{lpcontrol dfeas} \te{double} \kw{;} Default: $1.0 \times 10^{s+2}$, where $s = \max (0, \floor{\log \pgmid{archccnt} + .5}-2$ Decoupling multiplier for scaling \pgmid{dfeas}. This multiplier may be increased if the constraint system contains many dual variables or if the constraint system is scaled. The adjustment for a large number of dual variables is the same adjustment applied for \pgmid{dchk}. The adjustment for matrix scaling follows the adjustment described for \pgmid{cost}. Using the definitions for $\psi_u$ and $\psi_s$ given for \pgmid{cost}, $s = \max (0, \floor{\log \psi_u/\psi_s + .5}-1$ and \pgmid{dfeas_scale} will be increased by $10^s$. In english, the separation between the dual zero tolerance and the dual feasibility tolerance is increased to compensate for tightening the dual zero tolerance. \item\varhdr{inf} \kw{lpcontrol infinity} [\kw{IEEE}|\kw{DBL\_MAX}|\te{double}] \kw{;} Infinity. \dylp can work with an infinite or finite infinity. Default: \pgmid{HUGE_VAL} \pgmid{HUGE_VAL} will be IEEE 754 infinity on most modern systems. Many numerical programs still use that mathematical oxymoron, a finite infinity. Most commonly, this will be the value defined for the ANSI C symbol \coderef{float.h}{DBL_MAX}, the maximum representable value for type \pgmid{double}. Finite and infinite infinity do not play well together. If \dylp is being used by a client program which uses a finite infinity, set \pgmid{inf} to the client's value of infinity. \item\varhdr{pchk} \kw{lpcontrol pchk} \te{double} \kw{;} Default: $1.0 \times 10^{s-5}$, where $s = \max (0, \floor{\log \pgmid{archvcnt} + .5}-2$ The primal accuracy check tolerance, as described in \secref{sec:AccuracyChecks}. The adjustment by $s$ progressively loosens the accuracy check tolerance for systems with more than $10^{2.5} \approx 300$ variables. In english, when there are many variables, accumulating numerical inaccuracy warrants some relaxation of the accuracy check tolerance. This adjustment is made in \coderef{}{dy_checkdefaults}. \item\varhdr{pfeas} The primal feasibility check tolerance, dynamically calculated using \pgmid{zero} as the base value, as described in \secref{sec:AccuracyChecks}. \item\varhdr{pfeas_scale} \kw{lpcontrol pfeas} \te{double} \kw{;} Default: $1.0 \times 10^{s+2}$, where $s = \max (0, \floor{\log \pgmid{archvcnt} + .5}-2$ A decoupling multiplier used to adjust the separation of \pgmid{pfeas} and \pgmid{zero} as described in \secref{sec:AccuracyChecks}. This multiplier may be increased if the constraint system contains many variables or if the constraint system is scaled. The adjustment for a large number of variables, specified with the default value, is the same adjustment applied for \pgmid{pchk}. In english, when there are many variables, accumulating numerical inaccuracy warrants some relaxation of the feasibility tolerance. The adjustment for matrix scaling follows the adjustment described for \pgmid{zero}. Using the definitions for $\psi_u$ and $\psi_s$ given for \pgmid{zero}, $s = \max (0, \floor{\log \psi_u/\psi_s + .5}-1$ and \pgmid{pfeas_scale} will be increased by $10^s$. In english, the separation between the zero tolerance and the feasibility tolerance is increased to compensate for tightening the zero tolerance. \item\varhdr{pivot} \kw{lpcontrol pivot} \te{double} \kw{;} Default: $1.0 \times 10^-5$ The pivot selection multiplier. A pivot coefficient $\overline{a}_{ij}$ will be accepted as numerically stable in the primal algorithm if $\abs{\overline{a}_{ij}} \ge (\pgmid{pivot})(\pgmid{piv_tol})\norm[1]{\overline{a}_j}$, where \pgmid{piv_tol} is the stable pivot tolerance used during factoring in \glpk. In the dual algorithm, the 1-norm is calculated over the pivot row $\overline{a}_i$. The pivot selection multiplier may be reduced if \dylp finds itself at an extreme point where all potential pivots $x_i$, $x_j$ have been rejected because the pivot coefficients $\overline{a}_{ij}$ were judged numerically unstable (\vid \secref{sec:ErrorRecovery}). In english, if \pgmid{pivot} were set to 1, the pivot coefficient $\overline{a}_{ij}$ for every simplex pivot would have to satisfy the same stability criterion that the \glpk basis package applies when factoring the basis. This would be overly restrictive, however --- when executing simplex pivots, \dylp needs to choose the pivot row and column to maximise progress toward an optimal extreme point. Some compromise is necessary; the value of \pgmid{pivot} controls the balance between numerical stability and progress toward an optimal solution. When \dylp finds itself in a difficult spot, it will tilt the balance in order to make progress toward optimality. \item\varhdr{purge} \kw{lpcontrol purgecon} \te{double} \kw{;} Default: $1.0 \times 10^{-4}$ The required percentage change in the value of the objective function before constraint or variable deactivation is allowed. This should be strictly greater than zero in order to minimise the possibility of a cycle involving activation/deactivation of constraints or variables. \item\varhdr{purgevar} \kw{lpcontrol purgevar} \te{double} \kw{;} Default: .5 Used to calculate the variable deactivation threshold as a percentage of the maximum unfavourable reduced costs, as described in \secref{sec:VariableDeactivation}. \item\varhdr{reframe} \kw{lpcontrol reframe} \te{double} \kw{;} Default: .1 The percentage error in the updated column or row norms which is required to trigger a reset of the PSE reference frame or the DSE row norms, respectively. A relatively large error can be tolerated here. The consequence of inaccuracy, a chance of a suboptimal choice of primal entering or dual leaving variable, is not too serious. In contrast, for the dual the computational cost of recalculating the basis inverse row norms $\norm{\beta_k}$ is high. For the primal, all column norms are reset to 1, effectively reverting to unscaled (`Dantzig') pricing. \item\varhdr{swing} \kw{lpcontrol swing} \te{double} \kw{;} Default: $1.0 \times 10^{15}$ This tolerance is used to detect excessive change in the values of the primal variables. The magnitude of the value prior to a pivot is compared to the magnitude after the pivot. If the ratio exceeds the value of \pgmid{swing}, the simplex phase will abort and \dylp will attempt to bound the primal swing (\vid \secref{sec:ErrorRecovery}). \item\varhdr{toobig} Default: $1.0\times 10^{30}$. This value is used to control changes in the dual multipivot strategy. The breakpoints are currently hardcoded in \coderef{dy_dualmultipivot}{dualmultiin} (which see). \item\varhdr{zero} \kw{lpcontrol zero} \te{double} \kw{;} Default: $1.0\times 10^{-11}$. The zero tolerance. Values smaller than $\abs{\pgmid{zero}}$ are set to a clean floating-point zero. This tolerance may be tightened if \dylp scales the constraint matrix for numerical stability. Let $\psi = ((\max_{ij} \abs{a_{ij}})/(\min_{ij} \abs{a_{ij}}))^{1/2}$. Let $\psi_u$ be the value calculated for the unscaled matrix $A$ and $\psi_s$ be the value calculated for the scaled matrix $\breve{A}$. Let $s = \max (0, \floor{\log \psi_u/\psi_s + .5}-2$. The zero tolerance will be tightened by $10^{-s}$ (\ie, $\pgmid{zero} = \pgmid{zero} \times 10^{-s}$). In english, if scaling really did make a difference, so that the scaled matrix is significantly more stable than the unscaled matrix, \dylp should be extra careful about accuracy so that the scaled solution is still a solution after unscaling. \end{codedoc} DyLP-1.10.4/DyLP/doc/dylpabsdir.tex.in0000644000175200017520000000044711171477034015726 0ustar coincoin % The sole purpose of this file is to provide a hook for configure to set the % absolute name of the documentation source directory. This is used when % pulling in PostScript source for figures. Otherwise, various dvi viewers may % not be able to find it. \newcommand{\mypath}{@abs_builddir@} DyLP-1.10.4/DyLP/doc/startup.tex0000644000175200017520000002507511171477034014672 0ustar coincoin\section{Startup} \label{sec:Startup} \dylp provides a cold, warm, and hot start capability. For a cold start, \dylp selects a set of constraints and variables to be the initial active constraint system and then crashes a basis. For a warm start, \dylp expects that the caller will supply a basis but assumes that the active constraint system and other data structures need to be built to this specification. For a hot start, \dylp assumes that its internal data structures are valid except for possible modifications to variable bounds, objective coefficients, or right-hand-side coefficients. It will incorporate these modifications and continue with simplex iterations. \dylp will default to attempting a hot start unless specifically requested to perform a warm or cold start. For all three start types, \dylp will evaluate the constraint system for primal and dual feasibility, choosing primal simplex unless the constraint system is dual feasible and primal infeasible. It is not possible to perform efficient and foolproof checks to determine if the client has violated the restrictions imposed for a hot start. At minimum, such a check would require a coefficient by coefficient comparison of the constraint system supplied as a parameter with the copy held by \dylp from the previous call. It is the responsibility of the client to notify \dylp if variable bounds, objective coefficients, or right-hand-side coefficients have been changed. \dylp will scan for changes and update its copy of the constraint system only if the client indicates a change. Section~\ref{sec:DylpInterface} provides detailed information on the options used to control \dylp's startup actions. The startup sequence for \dylp is shown in Figure~\ref{fig:DylpStartupFlow}. \begin{figure} \includegraphics{\figures/startupflow} \caption{\dylp startup sequence} \label{fig:DylpStartupFlow} \end{figure} The first actions are determined by the purpose of the call. The call may be solely to free retained data structures; if so, this is done and the call returns. The next action is to determine the type of start --- hot, warm, or cold --- requested by the client. If a warm or cold start is requested, any state retained from the previous call is useless and all retained data structures are freed. For all three types of start, options and tolerances are updated to reflect the parameters supplied by the client. For a warm or cold start, the constraint system is examined to see if it should be scaled, and the options specified by the client are examined to see if scaling is permitted. If this assessment determines that scaling is advisable and permitted, the constraint system is scaled as described in \secref{sec:Scaling}. The original constraint system is cached and replaced by the scaled copy. In the case of a hot start, the existing scaled copy, if present, is retrieved for use. The original system is not consulted again until the solution is packaged for return to the client. Following scaling, the active constraint system is constructed for a warm or cold start, or modified for a hot start; \S\S\ref{sec:ColdStart}~--~\ref{sec:HotStart} describe the actions in detail. At the completion of this activity, the active constraint system is assessed for primal and dual feasibility and an appropriate simplex phase is chosen. Once the constraint system is constructed, common initialisation actions are performed: Data structures are initialised for PSE and DSE pricing, for the perturbation-based antidegeneracy algorithm, and for the pivot rejection algorithm. To complete the startup sequence, \dylp evaluates the constraint system and client options to determine if it should perform constraint activation or variable activation or deactivation before starting simplex iterations. Variable deactivation is mutually exclusive to constraint and variable activation; the former is considered only during a cold start, the latter only during a warm or hot start. An initial round of variable deactivation is performed during a cold start if the number of active variables exceeds the number specified by the \pgmid{coldvars} option. This activity is intended to reduce the initial size of constraint systems with very large numbers of variables (\eg, set covering formulations). Constraint or variable activation, or both, are performed during a warm or hot start if requested by the client. Constraint activation is performed before variable activation. If initial constraint activation is requested, \dylp will add all violated constraints to the active system. If constraints are added, primal feasibility will be lost, and \dylp will reassess the choice of initial simplex phase. If initial variable activation is requested, the action taken depends on the initial simplex phase. If \dylp will enter primal simplex, variables with favourable primal reduced costs are activated, evaluated under the phase~I or phase~II objective as appropriate. For dual simplex, variables which will tend to bound the dual problem are selected for activation: For each infeasible primal basic variable (nonbasic dual variable with favourable reduced cost), primal variables with optimal reduced costs (feasible dual constraints) which will bound motion in the direction of the incoming dual variable are selected for activation. \subsection{Cold Start} \label{sec:ColdStart} \dylp performs a cold start in two phases. The first phase, implemented in \pgmid{dy_coldstart}, constructs the initial active constraint system. The second phase, implemented in \pgmid{dy_crash}, constructs the initial basis. To construct the initial active constraint system, \pgmid{dy_coldstart} first checks to see if the client has specified that the full constraint system should be used. In this case, the active system will be the entire constraint system and the dynamic simplex algorithm will reduce to a single execution of either primal or dual simplex. If the client specifies that \dylp should work with a partial constraint system, the constraints are first separated into equalities and inequalities. All equalities are included in the initial active system. The remaining inequalities are sorted, using the angle of the constraint normal $a_i$ to the objective function normal $c$ as the figure of merit, \begin{equation*} a_i \angle c = \frac{180}{\pi} \cos^{-1} \frac{a_i \cdot c}{\norm{a_i}\norm{c}} \end{equation*} Consider a minimisation objective and `$\leq$' inequalities. The normals of the inequalities point out of the feasible region, and the normal of the objective function will point into the feasible region at optimality. Hence a constraint whose normal forms an angle near \degs{180} with the normal of the objective should be more likely to be active at optimum. A constraint whose normal forms an angle near \degs{0} is more likely to define a facet on the far side of the polytope. Unfortunately, `more likely' is not certainty, and it's easy to construct simple two-dimensional examples where the normal of one of the constraints active at optimality forms an acute angle with the normal of the objective function. \dylp allows the client to specify one or two angular intervals and a sampling fraction which are used to select inequalities to add to the initial active system. By default, the initial system will be populated with 50\% of the inequalities which form angles in the intervals $[\degs{0},\degs{90})$ and $(\degs{90},\degs{180}]$. (\textit{I.e.}, inequalities whose normals are perpendicular to the objective normal are excluded entirely, and half of all other inequalities will be added to the initial active system.) The inequalities selected will be spread evenly across the specified range(s). \dylp will activate all variables referenced by each constraint. Once the initial constraint system is populated, \pgmid{dy_crash} is called to select an initial basis. \dylp offers three options for the initial basis, called `logical', `slack', and `architectural'. A logical basis is the standard unit basis composed of slack and artificial (logical) variables for the active constraints. A slack basis again uses slack variables for inequalities, but attempts to select architectural variables for equalities, including artificial variables only if necessary. An architectural basis attempts to choose architectural variables for all constraints, selecting slack and artificial variables only when necessary. There are many qualities which are desirable in an initial basis, and they are often in conflict. A logical basis is trivially easily to construct, factor, and invert, and has excellent numerical stability. On the other hand, such a basis is hardly likely to be the optimal basis. When choosing architectural variables, free variables are highly desirable since they will never leave the basis. In addition, \dylp's basis construction algorithm tries to select architectural variables which will form an approximately lower-diagonal matrix and provide numerically stable pivots. Constructing a matrix which is approximately lower-diagonal minimises fill-in when the basis is factored. Several of the ideas implemented in \dylp's initial basis construction algorithms are described by Bixby in~\cite{Bix92a}. Since \dylp makes an effort to populate the constraint system with constraints that should be tight at optimality, an architectural basis is the default. \subsection{Warm Start} \label{sec:WarmStart} The routine \pgmid{dy_warmstart} implements a warm start. The client is expected to supply an initial basis, expressed as a set of active constraints and corresponding basic variables. By default, \dylp will activate all variables referenced by each constraint. As an option, the client can specify an initial set of active variables. \subsection{Hot Start} \label{sec:HotStart} For a hot start, \dylp assumes that all internal data structures are exactly as they were when it last returned to the client. Changes to the constraint system must be confined to the right-hand-side, objective, and variable upper and lower bound vectors, so that the basis factorisation and inverse are not affected. The client is responsible for indicating to \dylp which of these vectors have been changed. The routine \pgmid{dy_hotstart} scans the changed vectors and orchestrates any updates to the corresponding data structures in the active constraint system. Unlike a cold or warm start, the basis is \textit{not} factored prior to resuming pivots. \dylp assumes that the basis was refactored as part of the normal preoptimality sequence prior to the last return to the client and that no intervening pivots have occurred. Any numerical problems arising from the modifications specified by the client will be picked up in the normal course of dynamic simplex execution. DyLP-1.10.4/DyLP/doc/conmgmt.tex0000644000175200017520000001567711171477034014643 0ustar coincoin\section{Constraint Management} \label{sec:ConstraintManagement} Constraint management activities can be separated into selection of the initial constraint set, activation of violated or bounding constraints, and deactivation of loose constraints. In general, the goal is to maintain an active constraint system which is a subset of the original constraint system, consisting only of equalities and those inequalities necessary to define an optimal extreme point. \dylp expects that all constraints will be equalities or $\leq$ inequalities. Figure \ref{fig:ConmgmtCalls} shows the call structure for the constraint activation and deactivation routines. \begin{figure}[htbp] \centering \includegraphics{\figures/conmgmtcalls} \caption{Call Graph for Constraint Management Routines}\label{fig:ConmgmtCalls} \end{figure} During construction of the initial constraint system, any variables referenced in a constraint are activated along with the constraint. During subsequent constraint activation phases, variable activation is more selective. The logical variable for the constraint is created and used as the new basic variable. If the next simplex will be primal simplex, activation is restricted to the subset of referenced variables with dual infeasible (favourable) reduced cost. If the next simplex will be dual simplex, activation is restricted to the subset of referenced variables that are dual feasible. When a constraint is deactivated, only the slack variable for the constraint is deactivated. This minimises the work that must be performed to repair the basis. \subsection{Initial Constraint Selection} \label{InitialConSelect} For a warm or hot start, the initial active constraint system is completely determined from the basis supplied by the client. As noted in \secref{sec:Startup}, the client can set parameters which will cause constraint activation to be executed prior to starting simplex iterations. In this specific case, variable activation is not automatic and must be requested independently if desired. For a cold start, where no initial basis is supplied, the initial active constraint system will include all equalities and a client-specified selection of inequalities. See \secref{sec:ColdStart} for a more detailed description. \subsection{Activation of Constraints} \label{ConstraintActivation} \dylp enters the constraint activation phase whenever the system is found to be primal unbounded or optimal for the set of active constraints and all variables (active and inactive). When the system is found to be optimal, \dylp calls \pgmid{dy_activateCons} to search the inactive constraints for violated constraints. When the system is found to be unbounded, \dylp first calls \pgmid{dy_activateBndCons} to search the inactive constraints for feasible constraints which block the direction of recession. If such bounding constraints exist, they are activated and primal phase~II simplex is resumed. Otherwise, \pgmid{dy_activateCons} is called to add any violated constraints and execution will go to primal phase~I or dual simplex as appropriate. Violated constraints are identified using a straightforward scan of the inactive constraints. The routine \pgmid{scanPrimConStdAct} evaluates each constraint at the current value of $x$ and returns a list of violated constraints. The routines \pgmid{dy_activateBLogPrimConList} and \pgmid{dy_activateBLogPrimCon} perform the activations. Following activations, the logical variables for the new constraints are made basic, the basis is refactored, and a new basic solution is calculated. If the call to \pgmid{dy_activateCons} requested activation of referenced variables, \pgmid{dy_activateBLogPrimConList} will collect a set of variable indices for activation. After the basis has been refactored, the set is passed to \pgmid{dy_activateVars} for activation. If dual simplex will be the next simplex executed, only dual-feasible variables are activated. In \dylp, unboundedness is detected by the primal simplex implementation; dual simplex is not called until primal simplex has found an initial optimal solution. When unboundedness is discovered, \dylp calls \pgmid{dy_activateBndCons} to search for bounding constraints which are feasible at the current basic solution. A constraint will block motion in the direction $\eta_j$ if $a_i \cdot \eta_j > 0$ for $x_j$ increasing, or $a_i \cdot \eta_j < 0$ for $x_j$ decreasing. This scan is performed by \pgmid{scanPrimConBndAct}. Once the list of constraints is returned, constraint activation and basis repair proceed as in the case of violated constraints, but referenced variables are not activated. When a constraint is activated, the set of basic variables is augmented with the slack variable for the constraint. Because the slack is basic, the value of the associated dual is zero. The basis will change, but the values of other active primal variables will remain the same. Since the new slack variables are not part of the PSE reference frame, the projected column norms associated with PSE pricing are unchanged. Because the objective coefficients associated with the slack variables are 0, the values of the preexisting dual variables and the reduced costs remain unchanged. \subsection{Deactivation of Constraints} Constraint deactivation is handled by \pgmid{dy_deactivateCons}. \dylp implements three options for constraint deactivation, `normal', `aggressive', and `fanatical'. When normal constraint deactivation is specified, \dylp will only deactivate inequalities which are strictly loose. Eligible inequalities are identified by scanning the basis for slack variables which are strictly within bounds. When aggressive constraint deactivation is specified, \dylp will also deactivate tight inequalities whose associated dual variable is zero. When fanatical constraint deactivation is specified, \dylp will deactivate any constraint (equality or inequality) whose associated dual is zero. The set of constraints to be deactivated is identified by the routine \pgmid{scanPrimConStdDeact}. Once a set of constraints has been identified for deactivation, the routines \pgmid{deactBLogPrimConList} and \pgmid{dy_deactBLogPrimCon} are called to perform the deactivations. The corresponding constraint is deactivated and removed from the active constraint system along with its associated logical variable. The basis is patched, if necessary, by moving the variable which is basic in the position of the deactivated constraint to the basis position which was occupied by the constraint's associated logical. As with activation of constraints, deactivation of constraints changes the basis and \dylp will refactor and recalculate the primal and dual variables. The dual variables do not change, nor do the reduced costs of the remaining variables, since the cost coefficient of a logical variable is zero. In general, the PSE column norms will be changed because the deleted logical variables may be part of the reference frame. \dylp opts to reset the reference frame to deal with this, rather than updating or recalculating the column norms. DyLP-1.10.4/DyLP/missing0000755000175200017520000002540611503442760013273 0ustar coincoin#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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 run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] 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 # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: DyLP-1.10.4/DyLP/Makefile.am0000644000175200017520000001141112462103771013720 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 34 2006-05-15 19:22:07Z andreasw $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # Subdirectories # ######################################################################## SUBDIRS = src/DylpStdLib src/Dylp if COIN_HAS_OSI SUBDIRS += src/OsiDylp endif # We don't want to compile the test subdirectory, unless the test target is # specified. But we need to list it as subdirectory to make sure that it is # included in the tarball. Similarly, we don't want to attempt to build the # documentation unless specifically requested. if ALWAYS_FALSE SUBDIRS += examples SUBDIRS += test SUBDIRS += doc doc/Figures doc/TexMF endif ######################################################################## # Additional files to be included in tarball # ######################################################################## # Here we need include all files that are not mentioned in other Makefiles EXTRA_DIST = \ AUTHORS LICENSE README NEWS \ examples/generic.spc \ examples/greenbeb.spc \ examples/mpsio.c \ examples/odsi+dylp.cpp \ examples/osi_dylp.c \ examples/osi+dylp.cpp \ examples/plain \ examples/README ######################################################################## # Extra Targets # ######################################################################## test: all @echo "Building and running dylp unit test." @cd test ; $(MAKE) test # Doxygen documentation doxydoc: doxygen doxydoc/doxygen.conf clean-doxydoc: ( cd doxydoc ; rm -rf html *.log *.tag ) # Autotools does a good job on code, but it doesn't deal well with LaTeX # documentation. A few rules to help it along. Note that we don't delete # dylp.ps and dylp.pdf until maintainer-clean; these come prebuilt with the # distribution. doc: @echo "Attempting to build dylp typeset documentation." @cd doc ; ./build_dylpdoc --ps --pdf dylp # Clean will get invoked in environments where it's not possible to build # the documentation, and, quite possibly, where build_dylpdoc will not run. # Execute ':' when build_dylpdoc fails to do nothing (successfully) so that # the clean can keep going. mostlyclean-local: @cd doc ; \ if test -x build_dylpdoc ; then \ ./build_dylpdoc --clean || : ; \ fi clean-local: mostlyclean-local clean-doxydoc # Normally, automake would remove build_dylpdoc, dylpabsdir.tex, and # makefile.dylpdoc as part of distclean, because they're generated during # configuration. But we can't allow that --- distclean-local runs *after* # distclean, and it needs build_dylpdoc and makefile.dylpdoc. Down in # doc/Makefile.am, the variable CONFIG_CLEAN_FILES is cleared to prevent # distclean from removing these files. That means that if ever I generate new # files from configure.ac, they need to be listed here. distclean-local: clean-local @cd doc ; rm -f build_dylpdoc dylpabsdir.tex makefile.dylpdoc @cd doc ; rm -f Makefile Figures/Makefile TexMF/Makefile maintainer-clean-local: distclean-local @cd doc ; rm -f dylp.pdf dylp.ps .PHONY: doc doxydoc mostlyclean-local clean-local distclean-local \ maintainer-clean-local ######################################################################## # Installation of the addlibs file # ######################################################################## pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = dylp.pc if COIN_HAS_OSI pkgconfiglib_DATA += osi-dylp.pc endif addlibsdir = $(DESTDIR)$(datadir)/coin/doc/DyLP install-data-hook: @$(mkdir_p) "$(addlibsdir)" if COIN_HAS_PKGCONFIG PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@:$(DESTDIR)$(pkgconfiglibdir) \ $(PKG_CONFIG) --libs dylp > $(addlibsdir)/dylp_addlibs.txt else if COIN_CXX_IS_CL echo "-libpath:`$(CYGPATH_W) @abs_lib_dir@` libDyLP.lib @DYLPLIB_LIBS_INSTALLED@" > $(addlibsdir)/dylp_addlibs.txt else echo -L@abs_lib_dir@ -lDyLP @DYLPLIB_LIBS_INSTALLED@ > $(addlibsdir)/dylp_addlibs.txt endif endif uninstall-hook: rm -f $(addlibsdir)/dylp_addlibs.txt install-exec-local: install-doc uninstall-local: uninstall-doc ######################################################################## # Maintainer Stuff # ######################################################################## # So aclocal will find the local macros in the m4 directory ACLOCAL_AMFLAGS = -I m4 # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = include BuildTools/Makemain.inc DyLP-1.10.4/DyLP/doxydoc/0000755000175200017520000000000013434203622013333 5ustar coincoinDyLP-1.10.4/DyLP/doxydoc/doxygen.conf.in0000644000175200017520000017403412231275135016277 0ustar coincoin# Doxyfile 1.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = @PACKAGE_NAME@ # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @PACKAGE_VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doxydoc # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = "@abs_top_srcdir@/" # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = @coin_doxy_logname@ #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @abs_top_srcdir@/src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.hpp \ *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.svn* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 3 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = YES # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = YES #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = YES # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = letter # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = COIN_HAS_DYLP # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = ODSI ODWSB CWSB # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = @coin_doxy_tagfiles@ # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = @coin_doxy_tagname@ # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = YES # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @coin_doxy_usedot@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES DyLP-1.10.4/DyLP/NEWS0000644000175200017520000000134211507440660012365 0ustar coincoin 091016 DyLP/stable/1.6 Dylp now has a set of output routines which will generate tableau vectors, primal and dual solutions, and primal and dual rays, in the context of the original system, without requiring that dylp activate the full system internally. Along with this comes a full independent unit test, and updated documentation. 101103 DyLP/stable/1.7 OsiDylp now implements the OsiSimplex Group I API (tableau access). MS Visual Studio solutions for dylp and OsiDylp in the classic (v9) and split (v9alt) configurations. DLL build capability for dylp. 101230 DyLP/stable/1.8 No algorithm changes, but relicensed to Eclipse Public License and changes to library install locations. DyLP-1.10.4/DyLP/install-sh0000755000175200017520000002202111503442760013666 0ustar coincoin#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # 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. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= 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: -c (ignored) -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. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; 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 for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi 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 "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # 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: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # 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 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $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 "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: DyLP-1.10.4/DyLP/examples/0000755000175200017520000000000013434203622013500 5ustar coincoinDyLP-1.10.4/DyLP/examples/mpsio.c0000644000175200017520000015656512253224475015024 0ustar coincoin/* This file is a portion of the Dylp LP distribution. Copyright (C) 2004 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* There are two conditional compilation symbols in this file, BONSAIG and COIN_HAS_DYLP. BONSAIG should be defined only if you're building BonsaiG. COIN_HAS_DYLP should be defined only if you're trying to use this MPS reader instead of the COIN MPS i/o routines. Almost certainly, you don't want to define BONSAIG, and COIN_HAS_DYLP will be defined as appropriate in DylpConfig.h. */ /* This file contains C subroutines to parse MPS format problem files. The capabilities are compatible with the 'Free Format' MPS format. But ... this parser won't handle some of the strange things that are legal in MPS `fixed' format (column names with spaces in them, for instance). The general format of an MPS file is NAME name_of_model ROWS row data COLUMNS column data RHS right-hand-side data RANGES range data BOUNDS bounds data ENDATA where the RHS, RANGES, and BOUNDS sections are optional. Data lines consist of 6 fields. The number of fields actually used varies. The general format is: sense, nam0, nam1, val1, nam2, val2 (2-3) (5-12) (15-22) (25-36) (40-47) (50-61) where sense is a character code, or blank; nam0, nam1, and nam2 are names, and val1 and val2 are numbers. The column numbers for fixed-format input are shown in ()'s below the field name. See the MPS documentation for more details. Fine points that're ignored here: * In the NAME section, nam1 should be FREE for free format input; mpsin doesn't require it. Just the opposite --- we always work in free format. * The standard interprets a '$' at the beginning of nam1 or nam2 to mean the rest of the line is a comment. mpsin will see the '$' anywhere in the line. Taking our lead from OSL, this code does not support Dx codes in the rows section or 'SCALE' markers. Just cause it's a pain and we don't need it, mpsin doesn't support multiple RHS, RANGE, or BOUNDS vectors. Nor does it support 'no constraint' rows, except for a single row which is taken as the objective function. Markers of the form: 'MARKER' 'INTORG' 'MARKER' 'INTEND' in the COLUMNS section are used to bracket blocks of integer variables. The code will recognise binary variables as integer variables with bounds of 0 and 1, or the BV code can be used in the BOUNDS section. SOS Type 3 variables (clique constraints) are also supported by mpsin. The MPS 'MARKER' statement is used, with the keywords 'SOSORG' and 'SOSEND'. An equality constraint must be defined in the ROWS section of the MPS file; coefficients of 1 and a rhs of 1 will be generated by default. For example, if there are two SOS Type 3 sets, as follows: Variables Constraints --------- ----------- SOS set 1 sos1var1 sosname1,someeq1,someeq2, sos1var2 sosname1,someeq4 SOS set 2 sos2var1 sosname2,someeq2,someeq3,someeq4 sos2var2 sosname2,someeq1,someeq3 Then the input would look like: ROWS .... E sosname1 L someeq1 G someeq2 .... E sosname2 .... E someeq3 L someeq4 .... COLUMNS sosname1 'MARKER' 'SOSORG' sos1var1 someeq1 6.25 someeq2 245 sos1var2 someeq4 15 'MARKER' 'SOSEND' sosname2 'MARKER' 'SOSORG' sos2var1 someeq2 102.5 someeq4 5.388 sos2var1 someeq3 24.8 sos2var2 someeq1 76.5 someeq3 82.55 'MARKER' 'SOSEND' */ #include "dy_cmdint.h" #include "dylp.h" #include "dylib_hash.h" #include "dylib_strrtns.h" #include #include #ifndef BONSAIG /* We need to provide a definition for mipopts_struct in the OsiDylp configuration. Usually this comes in with bonsaiG's milp.h. */ typedef struct { int minmax ; int objcon ; double zinit ; const char *objnme ; } mipopts_struct ; #else # include "milp.h" #endif static char sccsid[] UNUSED = "@(#)mpsio.c 4.4 11/06/04" ; static char svnid[] UNUSED = "$Id: mpsio.c 524 2013-12-15 03:59:57Z tkr $" ; /* A bunch of definitions and declarations for mpsin and its slave routines. Separator characters -- these are used by mpsin and slave routines as the separator set for strtok. The exotics (\n, \r, \f, \v) aren't mentioned. They just shouldn't show up in a valid mps file. */ static const char *sepchars = " \t" ; /* State codes -- these define where we're at in processing the mps input file. */ typedef enum { mpsinINV = 0, mpsinNAME, mpsinROWS, mpsinCOLUMNS, mpsinRHS, mpsinRANGES, mpsinBOUNDS, mpsinENDDATA } mpsinstate_enum ; /* Hash tables -- used to translate row and column names to indices. */ static hel **conhash,**varhash ; static int conhashsze,varhashsze ; #define CONHASHSZE_DFLT 211 #define VARHASHSZE_DFLT 211 /* Linked list head for Type 3 Special Ordered Sets (the only kind that bonsai supports just now. */ static lnk_struct *sos3lst ; static lex_struct *getmpsline (ioid mpschn) /* This routine scans lines from the the file specified by mpschn. Blank lines and comments (lines starting with "*") are discarded. In-line comments (from the occurrence of "$" to the end of the line) are also stripped. Parameters: mpschn: stream for the MPS input Returns: a pointer to a lex_struct; on normal return, the type will be DY_LCQS; other possibilities are DY_LCEOF (end-of-file) and DY_LCERR (i/o error) NOTE: The lex_struct returned by getmpsline is owned by dyio_scanstr. The string buffer it contains is allocated by scanstr and will be freed by scanstr on the next call unless lex.string is set to NULL. The mps input routines make copies of the pieces they need and allow scanstr to handle allocating and freeing the buffer. */ { lex_struct *lex ; char *cptr ; bool empty ; /* Fire up a loop to read lines. A line that's all white space will come back from dyio_scanstr as DY_LCNIL. If there's something in the line, check for comments. If there's still a line left after peeling off the comment, we've got something. */ empty = TRUE ; while (empty == TRUE) { lex = dyio_scanstr(mpschn,DY_LCQS,0,'\0','\n') ; if (lex->class == DY_LCEOF || lex->class == DY_LCERR) break ; if (lex->class == DY_LCNIL) continue ; /* If the last character is ^M (carriage return), strip it. Likely we're looking at a file produced on a system where ends a line. */ cptr = &lex->string[strlen(lex->string)-1] ; if (*cptr == '\r') *cptr = '\0' ; /* Check for full line or partial line comments. */ if (*lex->string == '*') continue ; cptr = strchr(lex->string,'$') ; if (cptr != NULL) *cptr = '\0' ; if ((int) strlen(lex->string) > 0) empty = FALSE ; } return (lex) ; } static mpsinstate_enum mpsin_name (ioid mpschn, consys_struct **consys, double infinity) /* This routine handles the NAME section of the MPS file. It should have the form name FREE and it should be the first line of the file (blank lines & comments excepted, of course). Parameters: mpschn: input stream consys: (o) the newly created constraint system infinity: the value to be used for infinity Returns: mpsinROWS unless there's a problem, in which case it returns mpsinINV */ { lex_struct *lex ; char *tok ; const char *rtnnme = "mpsin_name", *mysection = "name" ; # ifndef NDEBUG /* Paranoia */ if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (mpsinINV) ; } # endif /* Find the "name" keyword. */ lex = getmpsline(mpschn) ; if (lex->class == DY_LCERR) { errmsg(168,rtnnme,mysection) ; return (mpsinINV) ; } if (lex->class == DY_LCEOF) { errmsg(169,rtnnme,mysection) ; return (mpsinINV) ; } tok = strtok(lex->string,sepchars) ; if (tok == NULL || cistrcmp(tok,"name") != 0) { errmsg(150,rtnnme,mysection,(tok == NULL)?"":tok) ; return (mpsinINV) ; } /* And now the name itself. If we get a name, create the constraint system. */ tok = strtok(NULL,sepchars) ; if (tok == NULL) { errmsg(151,rtnnme,mysection,"indicator") ; return (mpsinINV) ; } *consys = consys_create(tok,0,CONSYS_WRNATT,10,10,infinity) ; if (*consys == NULL) { errmsg(152,rtnnme,tok) ; return (mpsinINV) ; } # ifndef NDEBUG dyio_outfmt(dy_logchn,dy_gtxecho,"\n\treading model %s.\n",(*consys)->nme) ; # endif /* Check for the keyword "free", which should follow the name, and issue a warning if it isn't there. This is such a common error that it's not worth complaining about unless we're paranoid. [May 28, 2001] Warning about the absence of the keyword "free" becomes annoying in the testing of osi-bonsai. We disable the warning permanently. */ tok = strtok(NULL,sepchars) ; # if 0 if (tok == NULL || cistrcmp(tok,"free") != 0) dywarn(150,rtnnme,"free",(tok == NULL)?"":tok) ; # endif /* Now check for the "rows" keyword that marks the start of the rows section. It's an error to see anything else. */ lex = getmpsline(mpschn) ; if (lex->class == DY_LCERR) { errmsg(168,rtnnme,mysection) ; return (mpsinINV) ; } if (lex->class == DY_LCEOF) { errmsg(169,rtnnme,mysection) ; return (mpsinINV) ; } tok = strtok(lex->string,sepchars) ; if (tok == NULL || cistrcmp(tok,"rows") != 0) { errmsg(150,rtnnme,"rows",(tok == NULL)?"":tok) ; return (mpsinINV) ; } return (mpsinROWS) ; } static mpsinstate_enum mpsin_rows (ioid mpschn, consys_struct *consys) /* This routine is responsible for processing the "rows" section, which provides the names and types for all constraints (the constraint stub, so to speak). If a name is passed in consys->objnme, the routine will look for this row and make it the objective. If consys->objnme is null, the routine will choose the first non-binding constraint to be the objective, placing the name in consys->objnme. In either case, the index is returned in consys->objndx. Non-binding constraints are discarded, with a warning to the user (with the exception that the first one may be chosen as the objective). Parameters: mpschn: input stream consys: (i) newly minted constraint system (o) constraint system with constraint stubs and constraint type array. Returns: mpsinCOLUMNS if all goes well, mpsinINV otherwise. */ { lex_struct *lex ; char typelett,*tok ; contyp_enum typecode ; bool seen_cols,keep_row ; pkvec_struct *pkrow ; /* Useful to suppress compiler warnings re. integer <-> pointer conversion */ ptrdiff_t intermediary ; const char *rtnnme = "mpsin_rows", *mysection = "rows" ; /* Set up to process the rows. Create a hash table for the row names, associate a constraint type vector with the system, and make a trivial vector to use as a parameter to consys_addrow_pk. */ conhashsze = CONHASHSZE_DFLT ; conhash = (hel **) CALLOC(conhashsze,sizeof(hel *)) ; pkrow = pkvec_new(0) ; if (consys_attach(consys,CONSYS_CTYP, sizeof(contyp_enum),(void **) &consys->ctyp) == FALSE) { errmsg(100,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_CTYP)) ; return (mpsinINV) ; } setflg(consys->parts,CONSYS_CTYP) ; /* Now start up a loop and process the row entries. Each entry is of the form , where the legal constraint types are n,e,l, or g. The various dx codes are not recognized. The correct escape from the loop is spotting the "columns" indicator. */ seen_cols = FALSE ; consys->objndx = -1 ; for (lex = getmpsline(mpschn) ; lex->class == DY_LCQS ; lex = getmpsline(mpschn)) { tok = strtok(lex->string,sepchars) ; if (cistrcmp(tok,"columns") == 0) { seen_cols = TRUE ; break ; } /* Keep the type letter and get the name of the constraint. Check that each is valid. Skip a non-binding constraint unless it'll be used as the objective, and warn the user that we're skipping it. (But we'll need to put the name in the hash table, so we'll be able to identify and skip coefficients of the constraint when we process the COLUMNS section.) */ typelett = *tok ; tok = strtok(NULL,sepchars) ; if (tok == NULL) { errmsg(153,rtnnme,"constraint",mysection) ; return (mpsinINV) ; } keep_row = TRUE ; switch (typelett) { case 'N': case 'n': { typecode = contypNB ; if (!(consys->objndx <= 0 && (consys->objnme == NULL || strcmp(tok,consys->objnme) == 0))) { dywarn(172,rtnnme,consys->nme,tok) ; keep_row = FALSE ; } break ; } case 'E': case 'e': { typecode = contypEQ ; break ; } case 'L': case 'l': { typecode = contypLE ; break ; } case 'G': case 'g': { typecode = contypGE ; break ; } case 'D': case 'd': { errmsg(171,rtnnme,tok) ; return (mpsinINV) ; } default: { errmsg(154,rtnnme,consys->nme,(unsigned) typelett,typelett,tok) ; return (mpsinINV) ; } } /* Install the constraint (unless it's a superfluous contypNB). The objective goes in like any other constraint, and will be postprocessed into the objective vector (but remember that we've found it). */ pkrow->nme = tok ; if (keep_row == TRUE) { if (consys_addrow_pk(consys, 'a',typecode,pkrow,0.0,0.0,NULL,NULL) == FALSE) { errmsg(156,rtnnme,"constraint",consys->nme,pkrow->nme) ; return (mpsinINV) ; } if (typecode == contypNB) { consys->objndx = pkrow->ndx ; if (consys->objnme == NULL) consys->objnme = STRALLOC(pkrow->nme) ; } } else { pkrow->ndx = -1 ; } intermediary = pkrow->ndx ; if ((void *) intermediary != dyhash_enter(STRALLOC(pkrow->nme),conhash,conhashsze, (void *) intermediary)) { errmsg(155,rtnnme,"constraint", consys_nme(consys,'c',pkrow->ndx,TRUE,NULL)) ; return (mpsinINV) ; } /* Check for garbage at the end of the line, and complain if there is any. */ tok = strtok(NULL,sepchars) ; if (tok != NULL) dywarn(157,rtnnme,tok,"constraint",pkrow->nme) ; } /* This is the end of the loop which parses the rows section. Check that we got here because we saw the "columns" indicator, and fail if things are otherwise. Also make sure we've found an objective function. */ pkrow->nme = NULL ; pkvec_free(pkrow) ; # ifndef NDEBUG dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t(%s) read %d constraints from the MPS file.", rtnnme,consys->archccnt) ; # endif if (seen_cols == FALSE) { if (lex->class == DY_LCERR) errmsg(168,rtnnme,mysection) ; else if (lex->class == DY_LCEOF) errmsg(169,rtnnme,mysection) ; else errmsg(1,rtnnme,__LINE__) ; return (mpsinINV) ; } if (consys->objndx < 0) { errmsg(177,rtnnme,consys->nme, (consys->objnme == NULL)?"":consys->objnme) ; return (mpsinINV) ; } return (mpsinCOLUMNS) ; } static mpsinstate_enum mpsin_columns (ioid mpschn, consys_struct *consys) /* This routine is responsible for processing the columns section, which provides names and types for variables and the coefficients of the constraint matrix, in column-major order. It also deals with the various markers that can appear in the columns section. Parameters: mpschn: input stream consys: (i) constraint system with constraint stubs and constraint type array (o) constraint system with coefficient matrix, constraint and variable type arrays Returns: successful returns will be one of mpsinRHS, mpsinBOUNDS, mpsinRANGES, or mpsinENDDATA, depending on the presence (absence) of optional sections; in the event of an error, mpsinINV */ { bool marker, sosset, intblk ; double aij ; int rowndx,sosndx ; mpsinstate_enum nxtstate ; vartyp_enum vartype ; lex_struct *lex ; lnk_struct *sos3 ; pkvec_struct *pkcol ; char *rownam,*tok,*chkptr ; char colnam[50] ; /* grossly oversized, but safe */ /* Useful to suppress compiler warnings re. integer <-> pointer conversion */ ptrdiff_t intermediary ; const char *rtnnme = "mpsin_columns", *mysection = "columns" ; /* Set up to process the columns. Create a hash table for the variable names, a vector to hold the column coefficients, and associate a variable type vector with the constraint system. Note the use of colnam as the buffer for pkcol->nme. pkcol->nme is `const char *' so we'll always write to colnam, but we'll use pkcol->nme in other places. */ varhashsze = VARHASHSZE_DFLT ; varhash = (hel **) CALLOC(varhashsze,sizeof(hel *)) ; pkcol = pkvec_new(maxx(10,((int) .2*consys->concnt))) ; pkcol->nme = colnam ; colnam[0] = '\0' ; if (consys_attach(consys,CONSYS_VTYP, sizeof(vartyp_enum),(void **) &consys->vtyp) == FALSE) { errmsg(100,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_VTYP)) ; return (mpsinINV) ; } setflg(consys->parts,CONSYS_VTYP) ; sos3lst = NULL ; nxtstate = mpsinINV ; /* Now try to parse the coefficients of the constraint matrix. The general idea is to collect a column, then install it. Note that MPS requires all elements of a column to be given together. Each line is of the form where the second row name and coeff are optional. The name of the column being processed is held in pkcol->nme. We pretend we've just processed a marker to force the start of a new column without installing the (non- existent) previous column. */ marker = TRUE ; sosset = FALSE ; sosndx = -1 ; intblk = FALSE ; pkcol->cnt = 0 ; vartype = vartypCON ; for (lex = getmpsline(mpschn) ; lex->class == DY_LCQS ; lex = getmpsline(mpschn)) { /* Scan the first token and see if it matches the current column name. If it doesn't, there are two possibilities: * We've just finished collecting the coefficients of a column (marker == FALSE) and are about to move to something new. * We've just finished processing a marker (marker == TRUE) and we're about to move to something new. Markers require no residual action. But in the first case, we have to install the column in the constraint system and reset the vector to 0 length. */ tok = strtok(lex->string,sepchars) ; if (cistrcmp(pkcol->nme,tok) != 0) { if (marker == FALSE) { if (consys_addcol_pk(consys,vartype,pkcol,0.0,0.0,0.0) == FALSE) { errmsg(156,rtnnme,"column",consys->nme,pkcol->nme) ; return (mpsinINV) ; } intermediary = pkcol->ndx ; if ((void *) intermediary != dyhash_enter(STRALLOC(pkcol->nme),varhash,varhashsze, (void *) intermediary)) { errmsg(155,rtnnme,"variable", consys_nme(consys,'v',pkcol->ndx,TRUE,NULL)) ; return (mpsinINV) ; } pkcol->cnt = 0 ; pkcol->nme = colnam ; colnam[0] = '\0' ; } /* Just what is 'something new'? First check for any of the section keywords: rhs, ranges, bounds, or enddata. Any of them are valid escapes out of the columns section. Change the state and exit the loop. */ if (cistrcmp(tok,"rhs") == 0 || cistrcmp(tok,"rhs'") == 0) nxtstate = mpsinRHS ; else if (cistrcmp(tok,"ranges") == 0) nxtstate = mpsinRANGES ; else if (cistrcmp(tok,"bounds") == 0) nxtstate = mpsinBOUNDS ; else if (cistrcmp(tok,"enddata") == 0) nxtstate = mpsinENDDATA ; if (nxtstate != mpsinINV) break ; /* Perhaps 'something new' is a marker. Check for one of the markers that we recognise. The token we've already parsed becomes the new 'column name'. The next token should be 'marker' (quotes included), and the one after that will tell us what sort of marker. Possibilities are sosorg, sosend, intorg, intend. At the end of if (marker), we'll continue to force the next iteration of the loop. */ strcpy(colnam,tok) ; tok = strtok(NULL,sepchars) ; if (tok == NULL) { errmsg(158,rtnnme,consys->nme,pkcol->nme) ; return (mpsinINV) ; } if (cistrcmp(tok,"'marker'") == 0) { marker = TRUE ; tok = strtok(NULL,sepchars) ; if (tok == NULL) { errmsg(159,rtnnme,consys->nme,pkcol->nme) ; return (mpsinINV) ; } /* sosorg/sosend bracket groups of variables which are SOS3. There is no limit on the number of groups. For a SOS3 group, the coefficients of the constraint (and, later, the rhs) are generated automatically. The 'column name' for the line is the name of the SOS constraint. The name with the sosend marker is not important. */ if (cistrcmp(tok,"'sosorg'") == 0) { if (sosset == TRUE) { errmsg(161,rtnnme,"sosorg",pkcol->nme,"sosend") ; return (mpsinINV) ; } intermediary = (ptrdiff_t) dyhash_lookup(pkcol->nme,conhash,conhashsze) ; sosndx = (int) intermediary ; if (sosndx == 0) { errmsg(162,rtnnme,"SOS constraint",pkcol->nme,"marker","sosorg") ; return (mpsinINV) ; } sosset = TRUE ; vartype = vartypBIN ; pkcol->coeffs[0].val = 1.0 ; pkcol->coeffs[0].ndx = sosndx ; pkcol->cnt++ ; sos3 = (lnk_struct *) MALLOC(sizeof(lnk_struct)) ; sos3->llnxt = sos3lst ; sos3lst = sos3 ; intermediary = sosndx ; lnk_in(sos3,intermediary) ; } else if (cistrcmp(tok,"'sosend'") == 0) { if (sosset != TRUE) { errmsg(161,rtnnme,"sosend",pkcol->nme,"sosorg") ; return (mpsinINV) ; } sosset = FALSE ; vartype = vartypCON ; } /* intorg/intend bracket a group of integer variables. (Note that variables can also be specified as binary using the BV code in the bounds section). Nothing is done with the name assigned to intorg and intend markers. */ else if (cistrcmp(tok,"'intorg'") == 0) { if (intblk == TRUE) { errmsg(161,rtnnme,"intorg",pkcol->nme,"intend") ; return (mpsinINV) ; } intblk = TRUE ; vartype = vartypINT ; } else if (cistrcmp(tok,"'intend'") == 0) { if (intblk != TRUE) { errmsg(161,rtnnme,"intend",pkcol->nme,"intorg") ; return (mpsinINV) ; } intblk = FALSE ; vartype = vartypCON ; } else { errmsg(163,rtnnme,tok,pkcol->nme) ; return (mpsinINV) ; } continue ; } /* 'Something new' wasn't a keyword or marker; it must be the start of a new column. Reset the marker flag and drop through to the code that collects coefficients for a column. */ else { marker = FALSE ; } } else { tok = strtok(NULL,sepchars) ; } /* To get here, either the first token on this line matched, and we're in the middle of collecting a column, or 'something new' turned out to be a new column and we've fallen through from the previous code. The line contains one or two (row,coefficient) pairs. Parse them and stash them in the vector we're collecting. Note that the coefficients of the SOS equality for a SOS3 set are supplied by default, so suppress an explicit one if we see it. Also suppress explicit 0's, and any coefficients that belong to superfluous contypNB constraints. */ for ( ; tok != NULL ; tok = strtok(NULL,sepchars)) { rownam = tok ; tok = strtok(NULL,sepchars) ; if (tok == NULL) { errmsg(164,rtnnme,consys->nme,pkcol->nme,rownam) ; return (mpsinINV) ; } aij = strtod(tok,&chkptr) ; if (chkptr == tok || errno == ERANGE) { errmsg(165,rtnnme,tok,consys->nme,pkcol->nme,rownam) ; return (mpsinINV) ; } intermediary = (ptrdiff_t) dyhash_lookup(rownam,conhash,conhashsze) ; rowndx = (int) intermediary ; if (rowndx == 0) { errmsg(166,rtnnme,"constraint",rownam,"column",consys->nme,pkcol->nme) ; return (mpsinINV) ; } if (rowndx != -1) { if (aij != 0.0 && !(sosset == TRUE && rowndx == sosndx)) { if (pkcol->cnt >= pkcol->sze) if (pkvec_resize(pkcol,0) == FALSE) { errmsg(174,rtnnme,consys->nme,pkcol->nme) ; return (mpsinINV) ; } pkcol->coeffs[pkcol->cnt].val = aij ; pkcol->coeffs[pkcol->cnt].ndx = rowndx ; pkcol->cnt++ ; } } } } /* We've broken out of the loop -- if it isn't i/o error, clean up and return the next state code. */ if (nxtstate == mpsinINV) { if (lex->class == DY_LCERR) errmsg(168,rtnnme,mysection) ; else if (lex->class == DY_LCEOF) errmsg(169,rtnnme,mysection) ; else errmsg(1,rtnnme,__LINE__) ; return (mpsinINV) ; } pkcol->nme = NULL ; pkvec_free(pkcol) ; return (nxtstate) ; } static mpsinstate_enum mpsin_rhs (ioid mpschn, consys_struct *consys) /* This routine is responsible for processing the rhs section, which provides values for the right-hand-sides of the the constraints. Data lines in the rhs section are of the form: Basically, we're specifying a column vector of right-hand-side values, named rhs_vec_name, in the same way we specified column vectors for the coefficients. The pair is optional. Note that this code does not support multiple rhs vectors. Unfortunately, it seems we do need to entertain the possibility that is null. Parameters: mpschn: input stream consys: (i) constraint system with coefficient matrix, constraint and variable type arrays. (o) constraint system with coefficient matrix, rhs vector, constraint and variable type arrays Returns: successful returns will be one of mpsinRANGES, mpsinBOUNDS, or mpsinENDDATA, depending on the presence (absence) of optional sections; in the event of an error, mpsinINV */ { int rowndx ; double *rhs,aij ; bool named_vec ; mpsinstate_enum nxtstate ; lex_struct *lex ; char *tok,*rownme,*chkptr ; const char *rhsnme ; /* Useful to suppress compiler warnings re. integer <-> pointer conversion */ ptrdiff_t intermediary ; const char *rtnnme = "mpsin_rhs", *mysection = "rhs" ; /* Associate a rhs vector with the constraint system. */ if (consys_attach(consys,CONSYS_RHS, sizeof(double),(void **) &consys->rhs) == FALSE) { errmsg(100,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_RHS)) ; return (mpsinINV) ; } setflg(consys->parts,CONSYS_RHS) ; rhs = consys->rhs ; /* Check the first line to decide if this is a named vector or not. Given that the string scanner will insist on removing leading whitespace, the only way to tell is to count the number of tokens. An odd number indicates a named vector. An even number indicates the name is null. */ lex = getmpsline(mpschn) ; if (lex->class == DY_LCQS) { rowndx = 1 ; for (tok = strpbrk(lex->string,sepchars) ; tok != NULL ; tok = strpbrk(tok,sepchars)) { tok += strspn(tok,sepchars) ; if (*tok != '\0') rowndx++ ; } if (rowndx%2 != 0) { named_vec = TRUE ; rhsnme = NULL ; } else { named_vec = FALSE ; rhsnme = "" ; } } else { named_vec = FALSE ; rhsnme = "" ; } /* Now start to parse the rhs values. There are three possible escapes from this section: a ranges indicator, a bounds indicator, or an endata indicator. Ranges and bounds are optional sections, so we look for all three. */ nxtstate = mpsinINV ; for ( ; lex->class == DY_LCQS ; lex = getmpsline(mpschn)) { tok = strtok(lex->string,sepchars) ; if (cistrcmp(tok,"bounds") == 0) nxtstate = mpsinBOUNDS ; else if (cistrcmp(tok,"ranges") == 0) nxtstate = mpsinRANGES ; else if (cistrcmp(tok,"endata") == 0) nxtstate = mpsinENDDATA ; if (nxtstate != mpsinINV) break ; /* If this is the vector name, save it and parse the first row name. */ if (named_vec == TRUE) { rhsnme = tok ; tok = strtok(NULL,sepchars) ; } /* Start a loop to parse off the pairs. Hash the row name to get the row index, then try for the coefficient. If there are no errors, install the coefficient in the rhs vector. */ for ( ; tok != NULL ; tok = strtok(NULL,sepchars)) { intermediary = (ptrdiff_t) dyhash_lookup(tok,conhash,conhashsze) ; rowndx = (int) intermediary ; if (rowndx == 0) { errmsg(166,rtnnme,"constraint",tok,consys_assocnme(NULL,CONSYS_RHS), consys->nme,rhsnme) ; return (mpsinINV) ; } rownme = tok ; tok = strtok(NULL,sepchars) ; if (tok == NULL) { errmsg(164,rtnnme,consys->nme,rhsnme, consys_nme(consys,'c',rowndx,TRUE,NULL)) ; return (mpsinINV) ; } aij = strtod(tok,&chkptr) ; if (chkptr == tok || errno == ERANGE) { errmsg(165,rtnnme,tok,consys->nme,rhsnme,rownme) ; return (mpsinINV) ; } rhs[rowndx] = aij ; } } /* See if we're out of the loop due to an i/o error. */ if (nxtstate == mpsinINV) { if (lex->class == DY_LCERR) errmsg(168,rtnnme,mysection) ; else if (lex->class == DY_LCEOF) errmsg(169,rtnnme,mysection) ; else errmsg(1,rtnnme,__LINE__) ; return (mpsinINV) ; } return (nxtstate) ; } static mpsinstate_enum mpsin_ranges (ioid mpschn, consys_struct *consys) /* This routine is responsible for processing the ranges section, which provides a rhs range to establish constraints of the form blow < ax < b. The rules for incorporating range information are as follows: Constraint Type Range sign blow b --------------- ---------- ---------- ------- contypGE irrelevant b b+|range| contypLE irrelevant b-|range| b contypEQ + b b+|range| - b-|range| b In all cases, the constraint type becomes contypRNG. Data lines in the ranges section are identical in form and interpretation to rhs lines. Note that this code does not support multiple range vectors. Parameters: mpschn: input stream consys: (i) constraint system with coefficient matrix, rhs vector, constraint and variable type arrays (o) constraint system with coefficient matrix, rhs vector, constraint and variable type arrays Returns: successful returns will be one of mpsinBOUNDS or mpsinENDDATA, depending on the presence (absence) of optional sections; in the event of an error, mpsinINV */ { int rowndx ; double aij ; double *rhs,*rhslow ; bool named_vec ; contyp_enum *contyp ; mpsinstate_enum nxtstate ; lex_struct *lex ; const char *rngnme ; char *rownme,*tok,*chkptr ; /* Useful to suppress compiler warnings re. integer <-> pointer conversion */ ptrdiff_t intermediary ; const char *rtnnme = "mpsin_ranges", *mysection = "ranges" ; /* Associate a rhslow vector with the constraint system. Pick up the rhs and constraint type vectors. */ if (consys_attach(consys,CONSYS_RHSLOW, sizeof(double),(void **) &consys->rhslow) == FALSE) { errmsg(100,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_RHSLOW)) ; return (mpsinINV) ; } setflg(consys->parts,CONSYS_RHSLOW) ; rhslow = consys->rhslow ; rhs = consys->rhs ; contyp = consys->ctyp ; # ifndef NDEBUG if (rhs == NULL) { errmsg(160,rtnnme,mysection,consys_assocnme(consys,CONSYS_RHS)) ; return (mpsinINV) ; } if (contyp == NULL) { errmsg(160,rtnnme,mysection,consys_assocnme(consys,CONSYS_CTYP)) ; return (mpsinINV) ; } # endif /* Check the first line to decide if this is a named vector or not. Given that the string scanner will insist on removing leading whitespace, the only way to tell is to count the number of tokens. An odd number indicates a named vector. An even number indicates the name is null. */ lex = getmpsline(mpschn) ; if (lex->class == DY_LCQS) { rowndx = 1 ; for (tok = strpbrk(lex->string,sepchars) ; tok != NULL ; tok = strpbrk(tok,sepchars)) { tok += strspn(tok,sepchars) ; if (*tok != '\0') rowndx++ ; } if (rowndx%2 != 0) { named_vec = TRUE ; rngnme = NULL ; } else { named_vec = FALSE ; rngnme = "" ; } } else { named_vec = FALSE ; rngnme = "" ; } /* Now start to parse the range values. There are two possible escapes from this section: a bounds indicator or an endata indicator. Bounds is an optional section, so we look for both. */ nxtstate = mpsinINV ; for ( ; lex->class == DY_LCQS ; lex = getmpsline(mpschn)) { tok = strtok(lex->string,sepchars) ; if (cistrcmp(tok,"bounds") == 0) nxtstate = mpsinBOUNDS ; else if (cistrcmp(tok,"endata") == 0) nxtstate = mpsinENDDATA ; if (nxtstate != mpsinINV) break ; /* If this is the vector name, discard it and parse the first row name. */ if (named_vec == TRUE) { rngnme = tok ; tok = strtok(NULL,sepchars) ; } /* Start a loop to parse off the pairs. Hash the row name to get the row index, then try for the coefficient. */ for ( ; tok != NULL ; tok = strtok(NULL,sepchars)) { intermediary = (ptrdiff_t) dyhash_lookup(tok,conhash,conhashsze) ; rowndx = (int) intermediary ; if (rowndx == 0) { errmsg(166,rtnnme,"constraint",tok,"range vector",consys->nme,rngnme) ; return (mpsinINV) ; } rownme = tok ; tok = strtok(NULL,sepchars) ; if (tok == NULL) { errmsg(164,rtnnme,consys->nme,rngnme, consys_nme(consys,'c',rowndx,TRUE,NULL)) ; return (mpsinINV) ; } aij = strtod(tok,&chkptr) ; if (chkptr == tok || errno == ERANGE) { errmsg(165,rtnnme,tok,consys->nme,rngnme,rownme) ; return (mpsinINV) ; } /* We've got the row index and coefficient, so install the range. rhs, rhslow, and contyp may have to be modified, as described in the header comments. */ switch (contyp[rowndx]) { case contypEQ: { if (aij < 0) { rhslow[rowndx] = rhs[rowndx]+aij ; } else { rhslow[rowndx] = rhs[rowndx] ; rhs[rowndx] += aij ; } break ; } case contypGE: { rhslow[rowndx] = rhs[rowndx] ; rhs[rowndx] += fabs(aij) ; break ; } case contypLE: { rhslow[rowndx] = rhs[rowndx]-fabs(aij) ; break ; } case contypNB: { errmsg(175,rtnnme,consys_nme(consys,'c',rowndx,TRUE,NULL),rowndx) ; return (mpsinINV) ; } default: { errmsg(1,rtnnme,__LINE__) ; break ; } } contyp[rowndx] = contypRNG ; } } /* See if we're out of the loop due to an i/o error. */ if (nxtstate == mpsinINV) { if (lex->class == DY_LCERR) errmsg(168,rtnnme,mysection) ; else if (lex->class == DY_LCEOF) errmsg(169,rtnnme,mysection) ; else errmsg(1,rtnnme,__LINE__) ; return (mpsinINV) ; } return (nxtstate) ; } static mpsinstate_enum mpsin_bounds (ioid mpschn, consys_struct *consys) /* This routine is responsible for processing the bounds section, which specifies upper and lower bounds for variables. All variables start from the following default values: continous variables 0 -- +inf integer variables 0 -- 1 (i.e., assumed binary) These bounds are modified as follows by the bound type codes: LO sets the lower bound to the given value UP sets the upper bound to the given value UI sets the upper bound to the floor of the given value MI sets the lower bound to -inf PL sets the upper bound to +inf FR sets the lower bound to -inf and the upper bound to +inf (free) FX sets the lower and upper bounds to the given value (fixed) BV sets the lower bound to 0 and the upper bound to 1 Note that UI and BV have the side effect of converting the variable type to general integer and binary, respectively. Data lines in the bounds section have the format: The coeff is not needed for types MI, PL, FR, and BV. Note that this code does not support multiple bounds vectors. For this routine, the test for a null vector name is based on the MPS fixed field specification. We take the attitude that the only way we can reliably detect a blank name is if the user is obeying the strict fixed-field format rules and leaves all of nam0 blank. Parameters: mpschn: input stream consys: (i) constraint system with coefficient matrix, rhs vector, constraint and variable type arrays; rhslow optional. (o) constraint system with coefficient matrix, rhs vector, variable upper and lower bound vectors, constraint and variable type arrays; rhslow optional. Returns: mpsinENDDATA if all goes well; mpsinINV in the event of an error */ { int colndx ; double *vlb,*vub,aij,infinity ; vartyp_enum *vartyp ; bool seen_end,named_vec ; lex_struct *lex ; const char *bndnme ; char *varnme,*bndcode,*tok,*chkptr ; /* Useful to suppress compiler warnings re. integer <-> pointer conversion */ ptrdiff_t intermediary ; const char *rtnnme = "mpsin_bounds", *mysection = "bounds" ; /* Associate upper and lower bound vectors with the constraint system. These will be initialised to 0 and +inf, respectively, as they are allocated and attached. Pick up the variable type vector. */ if (consys_attach(consys,CONSYS_VUB, sizeof(double),(void **) &consys->vub) == FALSE) { errmsg(100,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_VUB)) ; return (mpsinINV) ; } setflg(consys->parts,CONSYS_VUB) ; vub = consys->vub ; infinity = consys->inf ; if (consys_attach(consys,CONSYS_VLB, sizeof(double),(void **) &consys->vlb) == FALSE) { errmsg(100,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_VLB)) ; return (mpsinINV) ; } setflg(consys->parts,CONSYS_VLB) ; vlb = consys->vlb ; /* Pick up the variable type vector. Walk the variables and reset the upper bound on any integer variables to 1. */ vartyp = consys->vtyp ; # ifndef NDEBUG if (vartyp == NULL) { errmsg(160,rtnnme,mysection,consys_assocnme(consys,CONSYS_VTYP)) ; return (mpsinINV) ; } # endif for (colndx = 1 ; colndx <= consys->archvcnt ; colndx++) { if (vartyp[colndx] == vartypINT || vartyp[colndx] == vartypBIN) vub[colndx] = 1 ; } /* Grab the first line and decide if this is a named vector or not. The only way we can have a null name is if the user is using fixed format. In this case, the bound code will occupy columns 2-3, the vector name columns 5-12, and the first variable name columns 15- 22. If the vector name is blank, we'll see 10 characters worth of space. */ lex = getmpsline(mpschn) ; if (lex->class == DY_LCQS) { tok = (lex->string)+3 ; if (strspn(tok,sepchars) == 10) { named_vec = FALSE ; bndnme = "" ; } else { named_vec = TRUE ; } } else { named_vec = FALSE ; bndnme = "" ; } /* Now start to parse the bound values. The only correct way out of the loop is to see the enddata indicator line. Guess that this is a named vector, and correct it below if we're wrong. */ seen_end = FALSE ; for ( ; lex->class == DY_LCQS ; lex = getmpsline(mpschn)) { tok = strtok(lex->string,sepchars) ; if (cistrcmp(tok,"endata") == 0) { seen_end = TRUE ; break ; } /* The first token on the line is the bound code. Then parse off the bound vector name, the variable name, and (if we need it) the bound value. */ bndcode = tok ; if (named_vec == TRUE) { bndnme = strtok(NULL,sepchars) ; if (bndnme == NULL) { errmsg(153,rtnnme,"bound vector name",mysection) ; return (mpsinINV) ; } } varnme = strtok(NULL,sepchars) ; if (varnme == NULL) { errmsg(153,rtnnme,"variable",mysection) ; return (mpsinINV) ; } intermediary = (ptrdiff_t) dyhash_lookup(varnme,varhash,varhashsze) ; colndx = (int) intermediary ; if (colndx == 0) { errmsg(162,rtnnme,"variable",varnme,consys->nme,mysection) ; return (mpsinINV) ; } aij = quiet_nan(0) ; if (cistrcmp(bndcode,"lo") == 0 || cistrcmp(bndcode,"up") == 0 || cistrcmp(bndcode,"fx") == 0 || cistrcmp(bndcode,"ui") == 0) { tok = strtok(NULL,sepchars) ; if (tok == NULL) { errmsg(164,rtnnme,consys->nme,varnme,mysection) ; return (mpsinINV) ; } aij = strtod(tok,&chkptr) ; if (chkptr == tok || errno == ERANGE) { errmsg(165,rtnnme,tok,consys->nme,varnme,mysection) ; return (mpsinINV) ; } } /* Begin a series of if statements, to see if we recognise the bound type. Adjust the bound(s) according to the bound specification. Various bound types require a few additional actions. For garden-variety upper & lower bounds, we just enter the bound in the appropriate vector. */ if (cistrcmp(bndcode,"lo") == 0) vlb[colndx] = aij ; else if (cistrcmp(bndcode,"up") == 0) { vub[colndx] = aij ; } /* For the ui code, we have to round aij down to the nearest integer. Force an integral variable type as well. */ else if (cistrcmp(bndcode,"ui") == 0) { vub[colndx] = floor(aij) ; if (vartyp[colndx] == vartypCON) { vartyp[colndx] = vartypINT ; consys->intvcnt++ ; } } /* For binary variables, we need to make sure the integer and binary counts are correct. */ else if (cistrcmp(bndcode,"bv") == 0) { if (vartyp[colndx] == vartypINT) consys->intvcnt-- ; vartyp[colndx] = vartypBIN ; consys->binvcnt++ ; vub[colndx] = 1.0 ; vlb[colndx] = 0.0 ; } /* The rest of these are straightforward. */ else if (cistrcmp(bndcode,"fx") == 0) { vub[colndx] = vlb[colndx] = aij ; } else if (cistrcmp(bndcode,"fr") == 0) { vub[colndx] = infinity ; vlb[colndx] = -infinity ; } else if (cistrcmp(bndcode,"pl") == 0) { vub[colndx] = infinity ; } else if (cistrcmp(bndcode,"mi") == 0) { vlb[colndx] = -infinity ; } /* Lastly, the error case, for a bound type we don't recognise. */ else { errmsg(167,rtnnme,bndcode,consys_nme(consys,'v',colndx,TRUE,NULL), colndx) ; return (mpsinINV) ; } } /* Check to see if we escaped the loop due to i/o error. */ if (seen_end == FALSE) { if (lex->class == DY_LCERR) errmsg(168,rtnnme,mysection) ; else if (lex->class == DY_LCEOF) errmsg(169,rtnnme,mysection) ; else errmsg(1,rtnnme,__LINE__) ; return (mpsinINV) ; } /* Otherwise, scan the bounds vectors and see if there are any integer variables that could be converted to binary, then return. */ for (colndx = 1 ; colndx <= consys->archvcnt ; colndx++) if (vartyp[colndx] == vartypINT && vub[colndx] == 1.0 && vlb[colndx] == 0.0) { vartyp[colndx] = vartypBIN ; consys->intvcnt-- ; consys->binvcnt++ ; } return (mpsinENDDATA) ; } static mpsinstate_enum mpsin_enddata (ioid mpschn, consys_struct *consys, mipopts_struct *mipopts) /* This routine does the cleanup. We copy the objective function from the constraint matrix to the objective vector, and delete the row. We go through the list of SOS3 sets and set the rhs value to 1 for each constraint. We convert all >= constraints to <= constraints (this results in considerable simplification at various places further along in the code). Finally, we free the hash tables and the string buffer used by dyio_scanstr. Parameters: consys: (i) complete constraint system (o) complete constraint system, with the objective function installed, and generally tidied up a bit. Returns: mpsinENDDATA if all goes well; mpsinINV in the event of an error (currently no errors are possible unless NDEBUG is undefined). */ { int ndx ; lnk_struct *sos3 ; pkvec_struct *pkvec ; hel *entry ; lex_struct *lex ; /* Useful to suppress compiler warnings re. integer <-> pointer conversion */ ptrdiff_t intermediary ; const char *rtnnme = "mpsin_enddata" ; #ifdef BONSAIG /* bonsaiG uses this; it's not present in the OsiDylp configuration. */ /* tourclass_utils.c */ extern bool tourclass_init(consys_struct *consys, hel **hashtab, int hashsize) ; #endif # ifdef PARANOIA if (consys->ctyp == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_CTYP)) ; return (mpsinINV) ; } if (consys->rhs == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_RHS)) ; return (mpsinINV) ; } if (consys->objndx <= 0 || consys->objndx > consys->archccnt) { errmsg(102,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_OBJ), 1,consys->archccnt) ; return (mpsinINV) ; } # endif /* Copy the objective function from the constraint matrix into the objective vector. If the user has specified a maximisation problem, we deal with it here by multiplying through by -1, so that the rest of the code always sees minimisation. If the objective function is to be used as a constraint, the form will be cx - x = 0, where x is installed as a free or upper-bounded variable. The initial value for the lower bound is -inf (later tightened to the value of the objective of the root LP relaxation). The initial value for the upper bound is mipopts.zinit, which defaults to +inf unless the user supplies a different value. The bound is tightened each time the incumbent solution is replaced. */ consys->obj = NULL ; if (consys_attach(consys,CONSYS_OBJ, sizeof(double),(void **) &consys->obj) == FALSE) { errmsg(100,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_OBJ)) ; return (mpsinINV) ; } setflg(consys->parts,CONSYS_OBJ) ; if (mipopts->minmax == -1) { if (consys_mulrow(consys,consys->objndx,-1.0) == FALSE) { errmsg(173,rtnnme,consys->nme, consys_nme(consys,'c',consys->objndx,FALSE,NULL),consys->objndx) ; return (mpsinINV) ; } } if (consys_getrow_ex(consys,consys->objndx,&consys->obj) == FALSE) { errmsg(112,rtnnme,"retrieve","row", consys_nme(consys,'c',consys->objndx,FALSE,NULL),consys->objndx) ; return (mpsinINV) ; } /* The OSI test suite doesn't take kindly to reordering the constraint system. consys_delrow_stable performs O(m) deletion, shifting all constraints down to fill a hole. */ if (mipopts->objcon == FALSE) #ifdef COIN_HAS_DYLP { if (consys_delrow_stable(consys,consys->objndx) == FALSE) #else { if (consys_delrow(consys,consys->objndx) == FALSE) #endif { errmsg(112,rtnnme,consys->nme,"delete","row", consys_nme(consys,'c',consys->objndx,FALSE,NULL),consys->objndx) ; return (mpsinINV) ; } } else { consys->ctyp[consys->objndx] = contypEQ ; pkvec = pkvec_new(1) ; pkvec->nme = STRALLOC("x") ; pkvec->dim = consys->concnt ; pkvec->dflt = 0 ; pkvec->cnt = 1 ; pkvec->coeffs[0].ndx = consys->objndx ; pkvec->coeffs[0].val = -1.0 ; if (consys_addcol_pk(consys,vartypCON, pkvec,0.0,-consys->inf,mipopts->zinit) == FALSE) { errmsg(156,rtnnme,"column",consys->nme,pkvec->nme) ; return (mpsinINV) ; } consys->xzndx = pkvec->ndx ; (void) STRFREE(pkvec->nme) ; pkvec_free(pkvec) ; pkvec = NULL ; } /* Walk the list of SOS3 sets, get the row index, and set the rhs entry to 1. Do some integrity checks while we're at it, provided debugging is enabled. */ for (sos3 = sos3lst ; sos3 != NULL ; sos3 = sos3->llnxt) { intermediary = lnk_out(sos3,ptrdiff_t) ; ndx = (int) intermediary ; # ifndef NDEBUG if (ndx < 1 || ndx > consys->archccnt) { errmsg(102,rtnnme,consys->nme,"constraint",ndx,1,consys->archccnt) ; return (mpsinINV) ; } if (consys->ctyp[ndx] != contypEQ) { errmsg(176,rtnnme,consys_nme(consys,'c',ndx,TRUE,NULL),ndx, consys_prtcontyp(consys->ctyp[ndx])) ; return (mpsinINV) ; } # endif consys->rhs[ndx] = 1.0 ; } #ifndef COIN_HAS_DYLP /* Step through the constraints and replace ax >= b constraints with (-a)x <= -b constraints. consys_mulrow will take care of the necessary modifications. While we're at it, look for and delete rows with no coefficients. (Yes, it happens.) The OSI test suite does not like re-arrangement of constraints, or the removal of constraints, so disable this for OSI. We can do (and undo) the contypGE => contypLE conversion around the call to dylp. Fortunately, dylp can tolerate empty constraints. */ for (ndx = consys->archccnt ; ndx > 0 ; ndx--) { if (consys_infnormrow(consys,ndx) == 0) { dywarn(179,rtnnme,consys->nme,consys_nme(consys,'c',ndx,FALSE,NULL),ndx) ; if (consys_delrow(consys,ndx) == FALSE) { errmsg(112,rtnnme,consys->nme,"delete","row", consys_nme(consys,'c',ndx,FALSE,NULL),ndx) ; return (mpsinINV) ; } continue ; } if (consys->ctyp[ndx] == contypGE) { if (consys_mulrow(consys,ndx,-1.0) == FALSE) { errmsg(112,rtnnme,consys->nme,"scalar multiply","row", consys_nme(consys,'c',ndx,FALSE,NULL),ndx) ; return (mpsinINV) ; } } } #endif /* !COIN_HAS_DYLP */ #ifdef BONSAIG /* Convert the temporary data structure from the parse of tour class specifications into the permanent run-time structure. */ if (tourclass_init(consys,varhash,varhashsze) == FALSE) { errmsg(761,rtnnme) ; return (mpsinINV) ; } #endif /* Free the hash tables! */ for (ndx = 0 ; ndx < conhashsze ; ndx++) for (entry = conhash[ndx] ; entry != NULL ; entry = conhash[ndx]) { conhash[ndx] = entry->next ; STRFREE(entry->key) ; (void) FREE((char *) entry) ; } (void) FREE((char *) conhash) ; for (ndx = 0 ; ndx < varhashsze ; ndx++) for (entry = varhash[ndx] ; entry != NULL ; entry = varhash[ndx]) { varhash[ndx] = entry->next ; STRFREE(entry->key) ; (void) FREE((char *) entry) ; } (void) FREE((char *) varhash) ; /* Clean up after dyio_scanstr. */ lex = dyio_scanstr(mpschn,DY_LCQS,0,'\0','\0') ; if (lex->class == DY_LCQS && lex->string != NULL) { FREE(lex->string) ; lex->string = NULL ; } # ifndef NDEBUG dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t(%s) read %d variables", rtnnme,consys->archvcnt) ; if (consys->intvcnt > 0 || consys->binvcnt > 0) dyio_outfmt(dy_logchn,dy_gtxecho, " (%d continuous, %d integer, %d binary)", consys->archvcnt-(consys->intvcnt+consys->binvcnt), consys->intvcnt,consys->binvcnt) ; dyio_outfmt(dy_logchn,dy_gtxecho, ".\n\t\tread %d non-zero coefficients from the MPS file.", consys->mtx.coeffcnt) ; if (consys->maxcolndx > 0) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t\tthe longest column is %s, with %d entries.", consys_nme(consys,'v',consys->maxcolndx,FALSE,NULL), consys->maxcollen) ; if (consys->maxrowndx > 0) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t\tthe longest row is %s, with %d entries.\n", consys_nme(consys,'c',consys->maxrowndx,FALSE,NULL), consys->maxrowlen) ; # endif return (mpsinENDDATA) ; } static mpsinstate_enum mpsin_force (consys_struct *consys, mpsinstate_enum fromstate, mpsinstate_enum tostate) /* This routine installs default vectors when optional sections of the mps file are missing. It handles the rhs, range (rhslow), and variable bounds (vlb and vub). The operation of the routine is based on the requirement that optional sections of the mps file must occur in a fixed order: rhs, ranges, bounds. For example, a call with fromstate == mpsinRHS and tostate == mpsinRANGES will fill in a default for the rhs vector only. A call with fromstate == mpsinRANGES and tostate == mpsinENDDATA will fill in defaults for rhslow (ranges), and vlb and vub (bounds). Note that the default for rhslow is nothing -- if there are no range constraints in the mps file, we'll never need this vector. Parameters: consys: constraint system fromstate: the first section missing from the mps file. tostate: the next section actually present in the mps file. Returns: tostate, or mpsinINV if something goes wrong. */ { const char *rtnnme = "mpsin_force" ; /* The strategy here is that fromstate takes us to the appropriate starting state in the switch, and then we fall through the cases until we break out based on tostate. If we fall through to the final default case, we're in deep trouble. */ switch (fromstate) { case mpsinRHS: { if (consys_attach(consys,CONSYS_RHS, sizeof(double),(void **) &consys->rhs) == FALSE) { errmsg(100,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_RHS)) ; return (mpsinINV) ; } setflg(consys->parts,CONSYS_RHS) ; if (tostate == mpsinRANGES) break ; } case mpsinRANGES: { if (tostate == mpsinBOUNDS) break ; } case mpsinBOUNDS: { if (consys_attach(consys,CONSYS_VUB, sizeof(double),(void **) &consys->vub) == FALSE) { errmsg(100,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_VUB)) ; return (mpsinINV) ; } setflg(consys->parts,CONSYS_VUB) ; if (consys_attach(consys,CONSYS_VLB, sizeof(double),(void **) &consys->vlb) == FALSE) { errmsg(100,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_VLB)) ; return (mpsinINV) ; } setflg(consys->parts,CONSYS_VLB) ; if (tostate == mpsinENDDATA) break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (mpsinINV) ; } } return (tostate) ; } bool mpsin (const char *mpspath, consys_struct **consys, mipopts_struct *mipopts, double infinity) /* This routine reads an MPS format input file and creates a constraint system structure to hold it. See the comments at the beginning of the file for info about the MPS standard. The overall organisation is a state machine, with one state for each section of the MPS file, plus a start state. If objnme is NULL, the default action defined by the MPS standard is to use the first non-binding constraint in the file as the objective function. Parameters: mpspath: file name of the MPS input file consys: (o) the constraint system objnme: the name of the objective function, or NULL infinity: the value to be used for infinity Returns: TRUE if the MPS file is successfully read into the internal data structures, FALSE otherwise. */ { ioid mpschn ; mpsinstate_enum nxtstate ; const char *rtnnme = "mpsin" ; /* Paranoia & initialisation. */ # ifndef NDEBUG if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (mpspath == NULL) { errmsg(2,rtnnme,"mpspath") ; return (FALSE) ; } if (mipopts == NULL) { errmsg(2,rtnnme,"mipopts") ; return (FALSE) ; } # endif /* Open the MPS input file. */ mpschn = dyio_openfile(mpspath,"r") ; if (mpschn == IOID_INV) return (FALSE) ; /* The main state machine for working through the file. Legal transitions are listed beside each case. */ nxtstate = mpsinNAME ; while (nxtstate != mpsinINV) switch (nxtstate) { case mpsinNAME: /* mpsinROWS */ { nxtstate = mpsin_name(mpschn,consys,infinity) ; if (nxtstate != mpsinINV) { if (mipopts->objnme == NULL) (*consys)->objnme = NULL ; else (*consys)->objnme = STRALLOC(mipopts->objnme) ; } break ; } case mpsinROWS: /* mpsinCOLUMNS */ { nxtstate = mpsin_rows(mpschn,*consys) ; break ; } case mpsinCOLUMNS: /* mpsinRHS, mpsinRANGES, mpsinBOUNDS, mpsinENDDATA */ { nxtstate = mpsin_columns(mpschn,*consys) ; if (nxtstate != mpsinRHS && nxtstate != mpsinINV) nxtstate = mpsin_force(*consys,mpsinRHS,nxtstate) ; break ; } case mpsinRHS: /* mpsinRANGES, mpsinBOUNDS, mpsinENDDATA */ { nxtstate = mpsin_rhs(mpschn,*consys) ; if (nxtstate != mpsinRANGES && nxtstate != mpsinINV) nxtstate = mpsin_force(*consys,mpsinRANGES,nxtstate) ; break ; } case mpsinRANGES: /* mpsinBOUNDS, mpsinENDDATA */ { nxtstate = mpsin_ranges(mpschn,*consys) ; if (nxtstate != mpsinBOUNDS && nxtstate != mpsinINV) nxtstate = mpsin_force(*consys,mpsinBOUNDS,nxtstate) ; break ; } case mpsinBOUNDS: /* mpsinENDDATA */ { nxtstate = mpsin_bounds(mpschn,*consys) ; break ; } case mpsinENDDATA: { nxtstate = mpsin_enddata(mpschn,*consys,mipopts) ; (void) dyio_closefile(mpschn) ; if (nxtstate == mpsinENDDATA) { if (mipopts->objnme == NULL) mipopts->objnme = STRALLOC((*consys)->objnme) ; return (TRUE) ; } break ; } default: { errmsg(1,rtnnme,__LINE__) ; nxtstate = mpsinINV ; break ; } } /* Something's screwed up if we reach here. */ errmsg(170,rtnnme,mpspath) ; return (FALSE) ; } #ifndef BONSAIG bool dy_mpsin (const char *mpspath, consys_struct **consys, double infinity) /* A wrapper routine to get from OsiDylp to mpsin. No need to bother OsiDylp with the bits of information that need to be present in mipopts. */ { bool retval ; mipopts_struct mipopts ; mipopts.minmax = 1 ; mipopts.objcon = FALSE ; mipopts.objnme = NULL ; retval = mpsin(mpspath,consys,&mipopts,infinity) ; if (mipopts.objnme != NULL) STRFREE(mipopts.objnme) ; return (retval) ; } #endif DyLP-1.10.4/DyLP/examples/README0000644000175200017520000000631211423620376014367 0ustar coincoin svn/cvs: $Id: README 342 2010-07-27 18:10:06Z lou $ `make examples' will build the dylp wrapper programs osi_dylp and odsi+dylp. You must have Dylp, OSI and OsiDylp built and installed before the makefile in this directory will work properly. Be sure to execute `make install' in the top level directory of the Dylp distribution before trying to build the examples. After building the sample wrapper programs, you should have two wrappers: * osi_dylp, a simple native interface to dylp, written in C. This wrapper has no dependence on COIN code. osi+dylp is essentially the same thing, but C++. It's not built by default, you'll need to edit Makefile.in to build it. * odsi+dylp, a simple wrapper that runs dylp through the OsiDylp OSI layer. The shell script `plain' provides a convenient way to supply the needed command line parameters for the wrappers. Typing `plain' will get you a usage message. `plain ' will search in the current directory and a set of standard locations (Note 1) for the specified problem file (Note 2). By default, plain will run the osi_dylp wrapper; you can change the default by editing the script. You can also select the wrapper you want as a command line parameter. Once it locates the problem file, plain will look around for a dylp options file, by default .spc. If it doesn't find one, it will look for a file named generic.spc. This distribution comes with generic.spc and greenbeb.spc, just to give you an idea of how options files look. E.g., `plain adlittle' will use osi_dylp to solve the Netlib example problem adlittle, with the generic.spc options file. Expected results, for the default build (info printing and statistics enabled, optimised compile), for two Netlib problems: Problem Objective Run time adlittle 225494.963 .02 sec. osi_dylp, odsi+dylp greenbeb -4302260.26 12.04 sec. odsi+dylp 27.84 sec. osi_dylp adlittle is tiny, and a fast test. greenbeb makes dylp work harder, and shows the improvement due to CoinPresolve, which is used by OsiDylp. The run times given above are for a SunBlade 1500, 1GB RAM, 1MB L2 cache. Your mileage will assuredly vary, but at least you have an idea of roughly how long to wait. --------------------------- Note 1: `A set of standard locations' is /Data/*, where is .., ../.., ../../.., and ../../../.. This will find the Data subdirectory in the standard place in an old-style Coin package (../../Data) and capture other common structures. If you need something else, edit plain and add it to mpsSearchDirs. Note 2: Compressed (.gz) files will be unzipped into this directory. Dylp's native mps reader doesn't support compressed files, nor does it support files that take full advantage of MPS fixed format and use spaces in the row and column names. Since the OsiDylp interface layer makes use of the COIN MPS i/o facilities, which support the full MPS specification and compressed files, there's no particular motivation to upgrade dylp's mps reader. Dylp's MPS reader, on the other hand, does support some extensions that may be useful in other contexts. --------------------------- DyLP-1.10.4/DyLP/examples/greenbeb.spc0000644000175200017520000000051410442173473015766 0ustar coincoin ! A trivial example of a .spc file for dylp. This tells dylp to always work ! with the full constraint system. Generally this is more efficient if an lp ! will only be solved once. ! svn/cvs: $Id: greenbeb.spc 71 2006-06-09 04:21:15Z andreasw $ lpcontrol fullsys true ; ! Information print for current phase. lpprint major 1 ; DyLP-1.10.4/DyLP/examples/osi+dylp.cpp0000644000175200017520000006217511507440660015761 0ustar coincoin/* This file is a portion of the Dylp LP distribution. Copyright (C) 2001 Lou Hafer, Stephen Tse Copyright (C) 2002 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains a main program and support routines sufficient to build a stand-alone lp solver using the version of dylp as modified for COIN/OSI. It's not necessarily pretty, but it should work adequately well. This code is just osi_dylp.c, minimally converted to compile as C++. After processing any command line options, the program establishes basic facilities, reads and processes the options file, reads and processes the problem specification, calls dylp via a wrapper to solve the problem, prints the result and shuts down. The command line is expected to be of the form osi_dylp [] [] The options presently in place are: -s Run silent: turns off echo of all generated text to stdout. The default output-file path is changed from stdout to NULL. Silent overpowers terse, in the event both are specified. -t Terse output on stdout. Behaviour is as for silent, but allows an opening title and closing message giving the result of the LP. -p Set overall print level to , [0..5]. -e Source text for error messages (defaults to dy_errmsgs.txt). -E A logging file for error messages (default is to direct error messages to stderr and the log file). -o Control ('.spc') options for dylp. Default is to not look for an options file. Disabled on Windows. -m The problem ('.mps') specification. Defaults to stdin. -L A log of dylp's execution (default is no execution logging). -O The output file. Defaults to stdout unless the -s option is present, in which case the default is no output. -h Print this help message and exit. -v Print version and exit. The -m option is just an alternate way to specify the . The error log file is a duplicate of the error messages printed on stderr; the execution log file is a duplicate of output on stdout unless -s is specified to suppress output to stdout. */ #include #include #include #include extern "C" { #include "dy_cmdint.h" #include "dylp.h" extern bool dy_mpsin(const char *filename, consys_struct **consys, double infinity) ; extern void dy_initbasis(int concnt, int factor_freq, double zero_tol) ; extern void dy_freebasis() ; /* From time.h, but not, apparently, ctime */ extern struct tm *localtime_r(const time_t *clock, struct tm *res) ; } namespace { char sccsid[] UNUSED = "@(#)osi+dylp.cpp 1.4 09/25/04" ; char svnid[] UNUSED = "$Id: osi+dylp.cpp 407 2010-12-31 20:48:48Z lou $" ; } const char *osidylp_version = "1.4" ; /* sccs! */ const char *osidylp_time ; /* Variables which control i/o operations. ttyout i/o id for output to the user's terminal ttyin i/o id for input from the user's terminal dy_cmdchn i/o id for input from the command file dy_logchn i/o id for the execution log file dy_cmdecho controls echoing of command input to stdout dy_gtxecho controls echoing of generated text to stdout */ ioid dy_cmdchn,dy_logchn ; bool dy_cmdecho,dy_gtxecho ; /* File paths used elsewhere in osi_dylp. outpath: Output file; the optimal solution is written here, as well as intermediate incumbent solutions (if requested). Intermediate incumbent solutions are solutions which improve on the previous solution (hence become the incumbent). Used in fathom:check_incumbent */ const char *outpath ; int lponly_print_level; /* stephent */ consys_struct *main_sys ; lpprob_struct *main_lp ; lpopts_struct *main_lpopts ; lptols_struct *main_lptols ; namespace { /* Routines to produce the version and help messages. The code looks better if these are off to the side. */ void print_version (ioid chn, bool echo, const char *cmd, const char *nme, const char *ver) /* Print version, copyright, and free software disclaimer. */ { const char *disc1 = "This is free software; see the source for copying" " conditions. There is NO" ; const char *disc2 = "warranty; not even for MERCHANTABILITY or FITNESS FOR A" " PARTICULAR PURPOSE." ; outfmt(dy_logchn,dy_gtxecho,"\n%s (%s) V %s",cmd,nme,ver) ; outfmt(dy_logchn,dy_gtxecho,"\nCopyright (C) 2004 Lou Hafer") ; outfmt(dy_logchn,dy_gtxecho,"\n%s\n%s\n",disc1,disc2) ; return ; } void print_help (ioid chn, bool echo, const char *name) /* Print help message. */ { outfmt(chn,echo,"\nusage: %s [] []",name) ; outfmt(chn,echo,"\n\nThe options presently in place are:\n") ; outfmt(chn,echo,"\n %s\t\t\t%s","-s", "Run silent: turns off echo of all generated text to") ; outfmt(chn,echo,"\n\t\t\t%s", "stdout. The default output-file path is changed") ; outfmt(chn,echo,"\n\t\t\t%s", "from stdout to NULL. Silent overpowers terse, in") ; outfmt(chn,echo,"\n\t\t\t%s","the event both are specified.") ; outfmt(chn,echo,"\n %s\t\t\t%s","-t", "Terse output on stdout. Behaviour is as for silent,") ; outfmt(chn,echo,"\n\t\t\t%s", "but allows an opening title and closing message") ; outfmt(chn,echo,"\n\t\t\t%s","giving the result of the LP.") ; outfmt(chn,echo,"\n %s\t\t\t%s","-p ", "Set overall print level to , [0..5].") ; outfmt(chn,echo,"\n %s\t%s","-e ", "Source text for error messages (defaults to") ; outfmt(chn,echo,"\n\t\t\t%s","dy_errmsgs.txt).") ; outfmt(chn,echo,"\n %s\t%s","-E ", "A logging file for error messages (default is to") ; outfmt(chn,echo,"\n\t\t\t%s","direct error messages to the log file).") ; outfmt(chn,echo,"\n %s\t%s","-o ", # if defined(_MSC_VER) || defined(__MSVCRT__) "Disabled on Windows.") ; # else "Control ('.spc') options file (default is no file).") ; # endif outfmt(chn,echo,"\n %s\t%s","-m ", "The problem ('.mps') specification. Defaults to stdin.") ; outfmt(chn,echo,"\n %s\t\t%s","-L ", "A log of execution (default is no execution") ; outfmt(chn,echo,"\n\t\t\t%s","logging).") ; outfmt(chn,echo,"\n %s\t%s","-O ", "The output file. Defaults to stdout unless the -s") ; outfmt(chn,echo,"\n\t\t\t%s", "option is present, in which case the default is no") ; outfmt(chn,echo,"\n\t\t\t%s","output.") ; outfmt(chn,echo,"\n %s\t\t\t%s","-h", "Print this help message and exit.") ; outfmt(chn,echo,"\n %s\t\t\t%s","-v", "Print version and exit.") ; outfmt(chn,echo,"\n\n%s%s", "The -m option is just an alternate way to specify the", ".") ; outfmt(chn,echo,"\n\n%s\n%s\n%s\n", "The error log file is a duplicate of the error messages printed on", "stderr; the execution log file is a duplicate of output on stdout unless", "-s is specified to suppress output to stdout.") ; return ; } /* A few utility routines to produce run time information. */ void get_timeval (struct timeval *tv) /* Call getrusage to retrieve the user and system time, sum them, and return the lot as a timeval. Parameters: tv: (i/o) timeval structure, will be filled with the current time Returns: undefined */ { struct rusage ruse ; /* Retrieve the current time. */ if (getrusage(RUSAGE_SELF,&ruse) < 0) { tv->tv_sec = 0 ; tv->tv_usec = 0 ; return ; } /* Sum up the user and system time and return it. I'm assuming that the number of usecs. in the tv_usec field is always less than 1e6 (i.e., less than 1 sec.) and therefore it's safe to simply add user and system values without worrying about integer overflow. */ tv->tv_usec = ruse.ru_utime.tv_usec+ruse.ru_stime.tv_usec ; tv->tv_sec = tv->tv_usec/((int) 1e6) ; tv->tv_usec = tv->tv_usec%((int) 1e6) ; tv->tv_sec += ruse.ru_utime.tv_sec ; tv->tv_sec += ruse.ru_stime.tv_sec ; return ; } void add_timevals (struct timeval *sum, struct timeval *end, struct timeval *start) /* Calculate sum = end-start in timeval's. Parameters: start,end: start and end timevals. sum: (o) timeval to be filled in with the sum Returns: undefined */ { /* Normalise the start and end timevals. */ if (start->tv_usec > 1e6) { start->tv_sec += start->tv_usec/((int) 1e6) ; start->tv_usec = start->tv_usec%((int) 1e6) ; } if (end->tv_usec > 1e6) { end->tv_sec += end->tv_usec/((int) 1e6) ; end->tv_usec = end->tv_usec%((int) 1e6) ; } /* Do the addition, then normalise the result. */ sum->tv_usec = end->tv_usec+start->tv_usec ; sum->tv_sec = end->tv_sec+start->tv_sec ; if (sum->tv_usec >= 1e6) { sum->tv_sec += sum->tv_usec/((int) 1e6) ; sum->tv_usec = sum->tv_usec%((int) 1e6) ; } return ; } void sub_timevals (struct timeval *diff, struct timeval *end, struct timeval *start) /* Calculate diff = end-start in timeval's. Parameters: start,end: start and end timevals. diff: (o) timeval to be filled in with the difference Returns: undefined */ { /* Normalise the start and end timevals. */ if (start->tv_usec > 1e6) { start->tv_sec += start->tv_usec/((int) 1e6) ; start->tv_usec = start->tv_usec%((int) 1e6) ; } if (end->tv_usec > 1e6) { end->tv_sec += end->tv_usec/((int) 1e6) ; end->tv_usec = end->tv_usec%((int) 1e6) ; } /* Do the subtraction. We may have to borrow a few usecs. */ if (end->tv_usec < start->tv_usec) { end->tv_usec += (int) 1e6 ; end->tv_sec-- ; } diff->tv_usec = end->tv_usec-start->tv_usec ; diff->tv_sec = end->tv_sec-start->tv_sec ; return ; } void prt_timeval (ioid chn, bool echo, struct timeval *tv) /* A little local utility to print a timeval as hh:mm:ss.ss. Parameters: chn: output channel id echo: controls echo to stdout tv: timeval to be printed Returns: undefined */ { int hrs, mins, secs, csecs ; hrs = tv->tv_sec/3600 ; mins = tv->tv_sec%3600 ; secs = mins%60 ; mins = mins/60 ; csecs = tv->tv_usec/1e4 ; outfmt(chn,echo,"%d:%02d:%02d.%02d",hrs,mins,secs,csecs) ; return ; } void stats_lp (const char *outpath, bool echo, lpprob_struct *lp, struct timeval *lptime, lpstats_struct *lpstats) /* A little shell routine to handle writing detailed statistics on an LP to the output file. Parameters: outpath: the output file path name. echo: TRUE to echo to stdout, FALSE otherwise lp: lp problem structure lptime: elapsed time for call to do_lp lpstats: lp statistics structure Returns : undefined */ { ioid chn ; int vndx,bpos ; const char *rtnnme = "stats_lp" ; /* Set up the output. Don't echo this to stdout twice. */ if (outpath == NULL) { warn(2,rtnnme,"file name") ; chn = IOID_NOSTRM ; } else { chn = pathtoid(outpath,NULL) ; if (chn == IOID_INV) chn = openfile(outpath,"w") ; if (chn == IOID_INV) { warn(10,rtnnme,outpath,"w") ; chn = IOID_NOSTRM ; } if (strcmp(outpath,"stdout") == 0) echo = FALSE ; } /* Print a few items from the lp structure --- name, status, pivot count, and lp return code. */ if (lp == NULL) { outfmt(chn,echo, "\n\n<< %s: LP problem structure is NULL! >>\n", rtnnme) ; } else { outfmt(chn,echo,"\n\nSystem: %s\t\t\tfinal status: %s after %d iterations.", lp->consys->nme,dy_prtlpphase(lp->phase,FALSE),lp->iters) ; if (lp->phase == dyDONE) { outfmt(chn,echo,"\n lp status: %s",dy_prtlpret(lp->lpret)) ; switch (lp->lpret) { case lpOPTIMAL: { outfmt(chn,echo,"\t\tobjective: %.9g",lp->obj) ; break ; } case lpINFEAS: { outfmt(chn,echo,"\t\tinfeasibility: %.9g",lp->obj) ; break ; } case lpUNBOUNDED: { if (lp->obj != 0) { if (lp->obj < 0) { vndx = abs((int) lp->obj) ; bpos = -1 ; } else { vndx = (int) lp->obj ; bpos = 1 ; } outfmt(chn,echo,"\t\tunbounded variable %s (%d) (%s)", consys_nme(lp->consys,'v',vndx,FALSE,NULL),vndx, (bpos < 0)?"decreasing":"increasing") ; } break ; } default: { break ; } } } if (lptime != NULL) { outfmt(chn,echo,"\n lp time: ") ; prt_timeval(chn,echo,lptime) ; outfmt(chn,echo," (%.2f)",lptime->tv_sec+lptime->tv_usec/1e6) ; } } # ifdef DYLP_STATISTICS if (lpstats != NULL) dy_dumpstats(chn,echo,lpstats,lp->consys) ; # endif outfmt(chn,echo,"\n") ; flushio(chn,echo) ; return ; } lpret_enum do_lp_all (struct timeval *elapsed) /* This routine is a wrapper which makes up the difference between the setup completed in the main program and the setup expected by dylp_dolp. Structures are created for the lp problem, options, tolerances, and statistics, and passed to dylp_dolp. Once the lp completes, the stats are printed and the statistics structure is released. Other cleanup is handled in main. Returns: lp status code; lpINV is used in the event of a fatal error that's not really dylp's fault. */ { int ndx,i,flips ; bool *flipped ; lpret_enum lpret ; lpopts_struct *initial_lpopts ; lpstats_struct *initial_lpstats ; basis_struct *basis ; struct timeval diff,before,after ; const char *rtnnme = "do_lp_all" ; lpret = lpINV ; /* Create and initialise the main_lp structure to pass the problem in to dylp. */ main_lp = (lpprob_struct *) CALLOC(1,sizeof(lpprob_struct)) ; main_lp->phase = dyINV ; main_lp->consys = main_sys ; main_lp->rowsze = main_sys->rowsze ; main_lp->colsze = main_sys->colsze ; /* Step through the constraints and replace ax >= b constraints with (-a)x <= -b constraints. consys_mulrow will take care of the necessary modifications. Normally this would be handled in mpsin, along with the deletion of empty constraints, but the OSI test suite isn't tolerant of changing the sense of constraints, let alone removing a few. Arguably a good thing. */ flipped = (bool *) CALLOC(main_sys->concnt+1,sizeof(bool)) ; flips = 0 ; for (ndx = main_sys->concnt ; ndx > 0 ; ndx--) { if (main_sys->ctyp[ndx] == contypGE) { if (consys_mulrow(main_sys,ndx,-1) == FALSE) { errmsg(112,rtnnme,main_sys->nme,"scalar multiply","row", consys_nme(main_sys,'c',ndx,FALSE,NULL),ndx) ; FREE(flipped) ; return (lpFATAL) ; } flipped[ndx] = TRUE ; flips++ ; } } /* Set up options, statistics, and solve the lp. After we're done, dump the statistics and free the dylp statistics structure. */ initial_lpopts = (lpopts_struct *) MALLOC(sizeof(lpopts_struct)) ; memcpy(initial_lpopts,main_lpopts,sizeof(lpopts_struct)) ; initial_lpopts->forcecold = TRUE ; dy_setprintopts(lponly_print_level,initial_lpopts) ; # ifdef DYLP_STATISTICS initial_lpstats = NULL ; dy_initstats(&initial_lpstats,main_sys) ; # else initial_lpstats = NULL ; # endif get_timeval(&before) ; lpret = dylp(main_lp,initial_lpopts,main_lptols,initial_lpstats) ; get_timeval(&after) ; sub_timevals(&diff,&after,&before) ; if (elapsed != NULL) (*elapsed) = diff ; stats_lp(outpath,FALSE,main_lp,&diff,initial_lpstats) ; # ifdef DYLP_STATISTICS dy_freestats(&initial_lpstats) ; # endif /* Time to undo any constraint flips. We also have to tweak the corresponding duals --- flipping the sign of a row in the basis corresponds to flipping the sign of a column in the basis inverse, which means that the sign of the corresponding dual is flipped. This requires a little care --- if we're in dynamic mode, some constraints may be inactive. */ if (flips > 0) { for (ndx = main_sys->concnt ; ndx > 0 ; ndx--) { if (flipped[ndx] == TRUE) { if (consys_mulrow(main_sys,ndx,-1) == FALSE) { errmsg(112,rtnnme,main_sys->nme,"scalar multiply","row", consys_nme(main_sys,'c',ndx,FALSE,NULL),ndx) ; FREE(flipped) ; return (lpFATAL) ; } } } if (main_lp->y != NULL) { basis = main_lp->basis ; for (ndx = 0 ; ndx < basis->len ; ndx++) { i = basis->el[ndx].cndx ; if (flipped[i] == TRUE) main_lp->y[ndx] = -main_lp->y[ndx] ; } } } FREE(flipped) ; if (initial_lpopts != NULL) FREE(initial_lpopts) ; return (lpret) ; } } /* End unnamed namespace declaration block */ int main (int argc, char *argv[]) { time_t timeval ; struct tm tm ; char runtime[50] ; ioid ttyin,ttyout,outchn ; int optlett,printlvl ; bool silent,terse,swaperrs,errecho,doversion,dohelp ; const char *errmsgpath ; const char *errlogpath ; const char *optpath ; const char *mpspath ; const char *logpath ; struct timeval lptime ; const char *rtnnme = argv[0] ; /* For getopt() */ const char *optstring = "e:stpE:o:m:L:O:hv"; /* Set up some defaults, then process the command line options. This is all very specific to Unix and SunOS. */ errmsgpath = "dy_errmsgs.txt" ; errlogpath = NULL ; optpath = NULL ; mpspath = NULL ; outpath = NULL ; logpath = NULL ; ttyout = IOID_INV ; ttyin = IOID_INV ; dy_logchn = IOID_INV ; outchn = IOID_INV ; silent = FALSE ; terse = FALSE ; dy_gtxecho = TRUE ; dy_cmdecho = FALSE ; doversion = FALSE ; dohelp = FALSE ; printlvl = -1 ; opterr = 0 ; for (optlett = getopt(argc,argv,optstring) ; optlett != -1 ; optlett = getopt(argc,argv,optstring)) switch (optlett) { case 'e': { errmsgpath = optarg ; break ; } case 'E': { errlogpath = optarg ; break ; } case 'o': { optpath = optarg ; break ; } case 'm': { mpspath = optarg ; break ; } case 'L': { logpath = optarg ; break ; } case 'O': { outpath = optarg ; break ; } case 's': { silent = TRUE ; dy_gtxecho = FALSE ; break ; } case 't': { terse = TRUE ; dy_gtxecho = FALSE ; break ; } case 'p': { printlvl = atoi(optarg) ; break ; } case 'v': { doversion = TRUE ; break ; } case 'h': { dohelp = TRUE ; break ; } case '?': { errinit(errmsgpath,errlogpath,TRUE) ; ioinit() ; errmsg(3,rtnnme,"command line option",optopt) ; exit (1) ; } } /* If there's still a parameter left, it must be the mps file, specified without using the -m option. There should not be more than one parameter remaining. */ if (optind < argc) { mpspath = argv[optind] ; optind++ ; } if (optind < argc) { dohelp = TRUE ; } /* LP-only setup. */ if (silent == TRUE) lponly_print_level = 0 ; else if (terse == TRUE) lponly_print_level = 1 ; else lponly_print_level = 2 ; if (printlvl >= 0) lponly_print_level = printlvl ; /* Output file name: if the user hasn't specified one, and we're not running silent, default to stdout. */ if (outpath == NULL && silent == FALSE) outpath = "stdout" ; /* Grab the time and format it nicely. */ if (time(&timeval) == (time_t)(-1)) { warn(19,rtnnme) ; osidylp_time = "n/a" ; } else { (void) localtime_r(&timeval,&tm) ; strftime(runtime,sizeof(runtime),"%A, %B %d, %Y, %I:%M:%S %p",&tm) ; osidylp_time = runtime ; } /* Figure out the appropriate settings for silent and terse. silent is set to (silent || terse), and is passed to process_cmds so that it can properly handle dy_cmdecho and dy_gtxecho. terse is set for ease of controlling the output specifically mentioned in conjunction with terse mode (which is controlled from this routine). The proper value is (terse || !silent). The cryptic little if statement below accomplishes this (try a decision tree to convince yourself). */ if (terse == TRUE) { if (silent == TRUE) terse = FALSE ; else silent = TRUE ; } else { if (silent == FALSE) terse = TRUE ; } /* Execute initialization routines for the i/o and error reporting packages. */ if (silent == TRUE) errecho = FALSE ; else errecho = TRUE ; errinit(errmsgpath,errlogpath,errecho) ; if (ioinit() != TRUE) { errmsg(1,rtnnme,__LINE__) ; exit (2) ; } /* Connect ttyout to the standard output. Initialize ttyin, setting the mode to line-oriented. Serious internal confusion if we can't manage these. Set the initial command input channel to stdin. */ ttyout = openfile("stdout","w") ; if (ttyout == IOID_INV) { errmsg(1,rtnnme,__LINE__) ; exit(3) ; } ttyin = openfile("stdin","r") ; if (ttyin == IOID_INV) { errmsg(1,rtnnme,__LINE__) ; exit(4) ; } (void) setmode(ttyin,'l') ; dy_cmdchn = ttyin ; /* Initialize logging. */ if (logpath != NULL) { dy_logchn = openfile(logpath,"w") ; if (dy_logchn == IOID_INV) { warn(201,rtnnme,logpath) ; dy_logchn = IOID_NOSTRM ; } } else { dy_logchn = IOID_NOSTRM ; } /* Are we supposed to merge the error messages with the log stream? (Note that errors will be echoed to stderr unless we're running silent. If the user's turned off logging too, well, it's their business.) swaperrs just tells the code that it should reset the error logging channel if it ever resets the main logging channel. */ if (errlogpath == NULL && dy_logchn != IOID_NOSTRM) { swaperrs = TRUE ; errlogpath = logpath ; if (chgerrlog(errlogpath,errecho) == FALSE) { warn(18,rtnnme,"",errlogpath) ; } } /* Ok, after all that work, check if we've been asked for the version or usage messages. If so, do it and head for the exit. Version preempts help. */ if (doversion == TRUE) { print_version(dy_logchn,dy_gtxecho,argv[0],rtnnme,osidylp_version) ; goto NOOUTFILE_CLEANUP ; } if (dohelp == TRUE) { print_help(dy_logchn,dy_gtxecho,argv[0]) ; goto NOOUTFILE_CLEANUP ; } /* We're up! Banners to the appropriate places. */ outfmt(dy_logchn,terse,"\n\t\t %s\tV %s\n",rtnnme,osidylp_version) ; outfmt(dy_logchn,terse,"\n\t\t%s",runtime) ; outfmt(dy_logchn,terse,"\n\n") ; if (outpath != NULL && strcmp(outpath,"stdout") != 0) { outchn = pathtoid(outpath,NULL) ; if (outchn == IOID_INV) outchn = openfile(outpath,"w") ; if (outchn == IOID_INV) { warn(10,rtnnme,outpath,"w") ; } else { outfmt(outchn,FALSE,"\n\t\t %s\tV %s\n",rtnnme,osidylp_version) ; outfmt(outchn,FALSE,"\n\t\t%s",runtime) ; outfmt(outchn,FALSE,"\n\n") ; } } /* Time to set up the lp options. Establish a set of defaults, then read the options file to see what the user has in mind. For reasons that escape me at the moment, the parser fails on Windows. This may get fixed eventually. For now, disabled by the simple expedient of forcing optpath to NULL. */ dy_defaults(&main_lpopts,&main_lptols) ; # if defined(_MSC_VER) || defined(__MSVCRT__) optpath = NULL ; # endif if (optpath != NULL) { dy_cmdchn = openfile(optpath,"r") ; if (dy_cmdchn == IOID_INV) exit (1) ; (void) setmode(dy_cmdchn,'l') ; switch (process_cmds(silent)) { case cmdOK: { break ; } case cmdHALTERROR: { exit (1) ; } case cmdHALTNOERROR: { exit (0) ; } default: { exit (1) ; } } if (dy_cmdchn != ttyin) { (void) closefile(dy_cmdchn) ; dy_cmdchn = IOID_INV ; } } /* Make an attempt to read the mps input file. */ if (dy_mpsin(mpspath,&main_sys,main_lptols->inf) == FALSE) { exit (10) ;} /* Check over the option settings, now that we know how big the constraint system will be. */ dy_checkdefaults(main_sys,main_lpopts,main_lptols) ; /* Initialise the basis maintenance package. The second parameter controls how many basis updates the basis can hold before it requires refactoring. Adding 5 to dylp's refactor interval should give a safety margin. */ dy_initbasis(2*main_sys->concnt,main_lpopts->factor+5,0) ; /* Run the lp. */ if (do_lp_all(&lptime) == FALSE) { errmsg(202,rtnnme,main_sys->nme) ; exit (20) ; } /* Should we produce any output? Print to a file, if requested. */ if (outchn != IOID_INV && outchn != ttyout) { dy_dumpcompact(outchn,FALSE,main_lp,FALSE) ; } /* Any final terminal output we should do? */ if (lponly_print_level >= 1) { if (lponly_print_level >= 2) { dy_dumpcompact(dy_logchn,(dy_logchn == IOID_INV)?TRUE:FALSE,main_lp,FALSE) ; } outfmt(dy_logchn,TRUE,"\nReturn code %s",dy_prtlpret(main_lp->lpret)) ; if (main_lp->phase == dyDONE) outfmt(dy_logchn,TRUE," after %d pivots",main_lp->iters) ; if (main_lp->lpret == lpOPTIMAL) { outfmt(dy_logchn,TRUE,"; objective %.8g",main_lp->obj) ; } outfmt(dy_logchn,TRUE," (%.2f sec.)",lptime.tv_sec+lptime.tv_usec/1e6) ; outfmt(dy_logchn,TRUE,".\n") ; flushio(dy_logchn,dy_gtxecho) ; } /* Final cleanup. Free space used by the remaining main_* structures. */ dy_freebasis() ; if (main_lp != NULL) { dy_freesoln(main_lp) ; if (main_lp->consys != NULL) consys_free(main_lp->consys) ; FREE(main_lp) ; } if (main_lpopts != NULL) FREE(main_lpopts) ; if (main_lptols != NULL) FREE(main_lptols) ; /* Leap to here for shutdown when we opened the output file but didn't solve an LP. */ NOLP_CLEANUP: if (outchn != IOID_INV && outchn != ttyout) { (void) closefile(outchn) ; } /* Leap to here for shutdown in cases where we never get as far as opening an output file. We still need to close the log file and shut down the i/o subsystem. */ NOOUTFILE_CLEANUP: if (dy_logchn != IOID_INV && dy_logchn != IOID_NOSTRM) { (void) closefile(dy_logchn) ; } ioterm() ; errterm() ; exit(0) ; /* Just to suppress the silly warning from the compiler, which isn't satisfied with the immediately preceding `exit'. */ return (0) ; } DyLP-1.10.4/DyLP/examples/generic.spc0000644000175200017520000000174710442173473015642 0ustar coincoin ! Generic options file specifying copious printing and a few other random ! options. (Comments in an options file start with an `!'.) See the dylp ! printed documentation (Dylp/Doc) for a thorough explanation of options. ! If you're wondering where this comes from, it's an accretion of various ! options that I find handy while debugging -- lh -- ! lpcontrol scaling 0 ; ! lpcontrol dualacttype 3 ; lpcontrol infinity DBL_MAX ; lpprint major 1 ; lpprint phase1 4 ; lpprint phase2 4 : ; lpprint dual 4 ; lpprint pricing 0 ; lpprint pivoting 1 ; lpprint pivreject 2 ; lpprint degen 1 ; lpprint scaling 2 ; lpprint basis 5 ; lpprint crash 1 ; lpprint setup 2 ; lpprint conmgmt 1 ; lpprint varmgmt 1 ; ! lpcontrol antidegen false ; ! lpcontrol iter 550 ; ! lpcontrol idle 100 ; ! lpcontrol final purge variables false, constraints false ; ! lpcontrol load 1.0 [180 90), (90 0] ; lpcontrol fullsys true ; lpcontrol coldbasis logical ; ! lpcontrol usedual false ; ! lpcontrol dualmultipiv 0 ; DyLP-1.10.4/DyLP/examples/Makefile.in0000644000175200017520000001465411576072247015573 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # $Id: Makefile.in 726 2006-04-17 04:16:00Z andreasw $ ########################################################################## # !! IMPORTANT !! # Makefile.in is the template used to produce the Makefile for the examples. # Makefile.in is processed when you run configure. Variables bracketed by `@' # characters, e.g., @EXEEXT@, will be replaced with a value that is correct for # your specific installation and the choices you make when running configure. # If you write your own main program, or need to customise the Makefile for # some other reason, modify Makefile.in, not Makefile! Makefile is regenerated # every time you run configure, and your changes will be lost. If you don't see # variables like @EXEEXT@ below, you're looking at Makefile. You want # Makefile.in. # For those familiar with GNU autotools, who are asking ``What about # Makefile.am?'', stop looking. Makefile.in is the starting point in example # directories in a COIN distribution. Knowledge of make is all that's required # to work with Makefile.in, a more reasonable assumption for most users. ########################################################################## # Blocks prefixed with CHANGEME will probably need some adjustment if you write # a custom main program. # As distributed, this makefile will build two sample main programs: # * osi_dylp is a bare C driver for dylp; it makes no use of COIN software # * odsi+dylp is a driver to exercise dylp via the OsiDylp OSI layer; it # uses dylp as you should use it in the context of COIN. # Have a look at the README for more information about each of them. # # If you're customising this file for your own code, choose one of DRIVER_CXX # or DRIVER_C based on whether the main program is C or C++. The remainder of # the source files can be any mix of C or C++. (Adding other languages to the # mix will probably require more extensive modifications.) # CHANGEME: The name of your main program. DRIVER_CXX = odsi+dylp DRIVER_C = osi_dylp # CHANGEME: This should be the name of your executable. You won't need to edit # these lines unless you want the final executable to have a name that's # different from the name you gave for DRIVER_CXX / DRIVER_C just above. EXE_CXX = $(DRIVER_CXX)@EXEEXT@ EXE_C = $(DRIVER_C)@EXEEXT@ # CHANGEME: OBJS* should specify the files required to build the executable. OBJS_CXX = $(DRIVER_CXX).@OBJEXT@ OBJS_C = $(DRIVER_C).@OBJEXT@ \ mpsio.@OBJEXT@ # CHANGEME: Additional libraries ADDLIBS = # CHANGEME: Additional flags for compilation (e.g., include flags) ADDINCFLAGS = # CHANGEME: Directory to the sources for the (example) problem definition # files SRCDIR = @srcdir@ VPATH = @srcdir@ ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile the # # COIN package. # ########################################################################## COIN_HAS_PKGCONFIG = @COIN_HAS_PKGCONFIG_TRUE@TRUE COIN_CXX_IS_CL = @COIN_CXX_IS_CL_TRUE@TRUE # C++ Compiler command CXX = @CXX@ # C++ Compiler options CXXFLAGS = @CXXFLAGS@ CPPFLAGS = @CPPFLAGS@ # additional C++ Compiler options for linking CXXLINKFLAGS = @LDFLAGS@ @RPATH_FLAGS@ # C Compiler command CC = @CC@ # C Compiler options CFLAGS = @CFLAGS@ # Include directories (we use the CYGPATH_W variables to allow compilation with Windows compilers) ifeq ($(COIN_HAS_PKGCONFIG), TRUE) INCL = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --cflags osi-dylp` else INCL = @OSIDYLPLIB_CFLAGS_INSTALLED@ endif INCL += $(ADDINCFLAGS) # Linker flags ifeq ($(COIN_HAS_PKGCONFIG), TRUE) LIBS_C = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --libs dylp` LIBS_CXX = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --libs osi-dylp` else ifeq ($(COIN_CXX_IS_CL), TRUE) LIBS_C = -link -libpath:`$(CYGPATH_W) @abs_lib_dir@` libDylp.lib @DYLPLIB_LIBS_INSTALLED@ LIBS_CXX = -link -libpath:`$(CYGPATH_W) @abs_lib_dir@` libOsiDylp.lib libDylp.lib @OSIDYLPLIB_LIBS_INSTALLED@ else LIBS_C = -L@abs_lib_dir@ -lDylp @DYLPLIB_LIBS_INSTALLED@ LIBS_CXX = -L@abs_lib_dir@ -lOsiDylp -lDylp @OSIDYLPLIB_LIBS_INSTALLED@ endif endif # Location of xxx_addlibs.txt prefix = @prefix@ DATADIR = @datadir@ DYLPDOCDIR = $(DATADIR)/coin/doc/DyLP COINUTILSDOCDIR = $(DATADIR)/coin/doc/CoinUtils OSIDOCDIR = $(DATADIR)/coin/doc/Osi # The following is necessary under cygwin, if native compilers are used CYGPATH_W = @CYGPATH_W@ # check and installcheck are standard automake targets. The sample main # programs osi_dylp and odsi+dylp are included as simple checks for the # package, so it makes some sense to build them under these rules. But the # main test for dylp is to build and run the OSI unitTest with ODSI in the # build. examples: $(EXE_C) $(EXE_CXX) .SUFFIXES: .cpp .c .o .obj $(EXE_CXX): $(OBJS_CXX) bla=;\ for file in $(OBJS_CXX); do bla="$$bla `$(CYGPATH_W) $$file`"; done; \ $(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) \ -o $@ $$bla $(LIBS_CXX) $(ADDLIBS) $(EXE_C): $(OBJS_C) bla=;\ for file in $(OBJS_C); do bla="$$bla `$(CYGPATH_W) $$file`"; done; \ $(CC) $(CXXLINKFLAGS) $(CFLAGS) \ -o $@ $$bla $(LIBS_C) $(ADDLIBS) # Standard automake clean targets, so that this directory gets properly # cleaned. mostlyclean clean: rm -rf $(EXE_CXX) $(EXE_C) $(OBJS_CXX) $(OBJS_C) rm -rf afiro.log afiro.out greenbeb.log greenbeb.out distclean maintainer-clean: clean rm -rf Makefile .cpp.o: $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$< .cpp.obj: $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi` .c.o: $(CC) $(CPPFLAGS) $(CFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$< .c.obj: $(CC) $(CPPFLAGS) $(CFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi` # These are standard automake targets that are not implemented. As per # recommendation in the automake manual for third-party makefiles. EMPTY_AUTOMAKE_TARGETS = \ all install install-data install-exec uninstall install-info installdirs \ check installcheck dvi pdf ps info html tags ctags .PHONY: $(EMPTY_AUTOMAKE_TARGETS) $(EMPTY_AUTOMAKE_TARGETS): DyLP-1.10.4/DyLP/examples/odsi+dylp.cpp0000644000175200017520000003342311507440660016117 0ustar coincoin/* This file is a portion of the Dylp LP distribution. Copyright (C) 2004 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains a main program and support routines sufficient to build a stand-alone lp solver using dylp working through OsiDylpSolverInterface. After processing any command line options, the program will deal with the .spc file, if specified, then call ODSI::readMps to read the MPS file. ODSI::initialSolve is called to solve the LP, and then the results are printed. The command line is expected to be of the form osi_dylp [] [] The options presently in place are: -s Run silent: turns off echo of all generated text to stdout. The default output-file path is changed from stdout to NULL. Silent overpowers terse, in the event both are specified. -t Terse output on stdout. Behaviour is as for silent, but allows an opening title and closing message giving the result of the LP. -p Set overall print level to , [0..5]. -o Control ('.spc') options for dylp. Disabled on Windows. -m The problem ('.mps') specification. -L A log of dylp's execution (default is no execution logging). -O The output file. Defaults to stdout unless the -s option is present, in which case the default is no output. -h Print this help message and exit. -v Print version and exit. The -m option is just an alternate way to specify the . The error log file is a duplicate of the error messages printed on stderr; the execution log file is a duplicate of output on stdout unless -s is specified to suppress output to stdout. */ /*! \file odsi+dylp.cpp \brief An alternate main program for running dylp by way of the OsiDylpSolverInterface. No frills. Good for testing when you suspect the problem lies not in dylp but in the OsiDylpSolverInterface. Requires that the COIN libraries be available. */ #include #include #include "dylib_std.h" #include "OsiDylpSolverInterface.hpp" #include "CoinTime.hpp" #include "CoinError.hpp" /* Begin unnamed local namespace */ namespace { char sccsid[] UNUSED = "@(#)odsi+dylp.cpp 1.5 11/06/04" ; char svnid[] UNUSED = "$Id: odsi+dylp.cpp 407 2010-12-31 20:48:48Z lou $" ; const char *osidylp_version = static_cast("1.10") ; using std::string ; /*! \brief Print the version message. */ void print_version (const char *cmd, const char *nme, const char *ver) /* Print version, copyright, and free software disclaimer. */ { std::cout << std::endl << cmd << " (" << nme << ") V " << ver ; std::cout << std::endl << "Copyright (C) 2004 Lou Hafer" ; std::cout << std::endl << "This is free software; see the source for copying" << " conditions. There is NO" << std::endl << "warranty; not even for MERCHANTABILITY or FITNESS FOR A" << " PARTICULAR PURPOSE." << std::endl ; return ; } /*! \brief Print the help message */ void print_help (const char *pgm) /* Print help message. */ { std::cout << "\nusage: " << pgm << " [] []" ; std::cout << "\n\nThe options presently in place are:\n" ; std::cout << "\n -s\t\t\t" << "Run silent: turns off echo of all generated text to" << "\n\t\t\t" << "stdout. The default output-file path is changed" << "\n\t\t\t" << "from stdout to NULL. Silent overpowers terse, in" << "\n\t\t\t" << "the event both are specified." ; std::cout << "\n -t\t\t\t" << "Terse output on stdout. Behaviour is as for silent," << "\n\t\t\t" << "but allows an opening title and closing message" << "\n\t\t\t" << "giving the result of the LP." ; std::cout << "\n -p \t\t" << "Set overall print level to , [0..5]." ; std::cout << "\n -o \t" #if defined(_MSC_VER) || defined(__MSVCRT__) << "Disabled on Windows." ; #else << "Control ('.spc') options file for dylp (default is" << "\n\t\t\t" << "no file)." ; #endif std::cout << "\n -m \t" << "The problem ('.mps') specification (no default)." ; std::cout << "\n -L \t\t" << "A log of dylp's execution (default is no execution" << "\n\t\t\t" << "log)." ; std::cout << "\n -O \t" << "The output file. Defaults to stdout unless the -s or" << "\n\t\t\t" << "-t options are present, in which case the default is" << "\n\t\t\t" << "no output." ; std::cout << "\n -h\t\t\t" << "Print this help message and exit." ; std::cout << "\n -v\t\t\t" << "Print version and exit." ; std::cout << "\n\n" << "The -m option is just an alternate way to specify the" << " ." << std::endl << "The execution log file is a duplicate of output to stdout" << std::endl << "unless -s or -t were specified to suppress output to stdout." << std::endl ; return ; } /*! \brief Routine to dissect a file name. Given a path name in the form [path/prefix/]base[.suffix][.gz], the routine will return the prefix, base, and suffix, along with a boolean that tells whether the file name indicates compression (.gz suffix). */ void dissectPath (const string fullPath, string &prefix, string &base, string &ext, bool &compressed) /* This routine extracts the base file name from a path of the form [path/prefix/]base[.suffix][.gz] where all parts are optional except the base name. */ { bool gzSeen = false ; string::size_type pathpos,sfxpos,gzpos ; /* std::cout << std::endl << "Starting with \"" << fullPath << "\" (" << fullPath.length() << ")\n" ; */ /* Locate end of leading path prefix, if any. pathpos will point to the start of the base name. */ pathpos = fullPath.rfind('/') ; if (pathpos == string::npos) { pathpos = 0 ; prefix = "" ; } else { prefix = fullPath.substr(0,pathpos) ; pathpos++ ; } /* Check for .gz and/or other suffix. */ sfxpos = fullPath.rfind('.') ; gzpos = fullPath.length() ; /* We have a valid suffix if sfxpos ends up strictly between pathpos (start of base name) and gzpos (end of string). If it's .gz, note we've seen it and try again for a standard suffix. */ if (sfxpos > pathpos && sfxpos < gzpos) { ext = fullPath.substr(sfxpos) ; if (ext == ".gz") { gzpos = sfxpos ; gzSeen = true ; sfxpos = fullPath.rfind('.',gzpos-1) ; } } if (sfxpos > pathpos && sfxpos < gzpos) { ext = fullPath.substr(sfxpos+1,gzpos-sfxpos-1) ; } else { ext = "" ; sfxpos = gzpos ; } /* The basename should lie between pathpos and sfxpos. Set a last few return values and we're done. */ base = fullPath.substr(pathpos,sfxpos-pathpos) ; compressed = gzSeen ; /* std::cout << "Parsed \"" << fullPath <<"\" to \"" << prefix << "\", \"" << base << "\", \"" << ext << "\"" ; if (gzSeen == true) std::cout << " (compressed)" ; std::cout << "." << std::endl ; */ return ; } /*! \brief Run an individual problem This routine will run a single problem, using an options file if one is specified. The routine will create a log file for the run. */ void test_user (const char* mpspath, const char* spcpath, const char *logpath, const char *outpath, bool silent, bool terse, int printlvl) { OsiDylpSolverInterface* osi = new OsiDylpSolverInterface ; string fullPath ; string prefix,base,ext,prefixAndBase ; bool compressed ; /* Open the log file and output file, if requested. */ if (logpath != 0) { fullPath = logpath ; dissectPath(fullPath,prefix,base,ext,compressed) ; if (prefix != "") prefixAndBase = prefix+'/' ; else prefixAndBase = "" ; prefixAndBase += base ; if (silent == false) { std::cout << std::endl << "Logging to " << prefixAndBase << ".log." ; } osi->dylp_logfile(prefixAndBase.c_str(),false) ; } if (outpath != 0) { fullPath = outpath ; dissectPath(fullPath,prefix,base,ext,compressed) ; if (prefix != "") prefixAndBase = prefix+'/' ; else prefixAndBase = "" ; prefixAndBase += base ; if (silent == false) { std::cout << std::endl << "Output file is " << prefixAndBase << ".out." ; } osi->dylp_outfile(prefixAndBase.c_str()) ; } /* Establish output levels. Bits <2:0> of info (info&0x7) are interpreted as an integer which is passed to dy_setprintopts. Bit <3> (0x8) will turn on CoinMpsIO messages. Bit <4> (0x10) will cause dylp to send output to the terminal in addition to any log file. So, for example, info = 0x11 will set print level 1 and enable terminal output. At print level 1 and higher, you can override individual settings with an options file, processed via dylp_controlfile. */ int info = printlvl ; if (silent == false && terse == false) info |= 0x10 ; osi->setHintParam(OsiDoReducePrint,false,OsiHintTry,&info) ; /* Process the aforementioned options file, if specified. */ if (spcpath != 0) { if (silent == false) { std::cout << std::endl << "Processing options file " << spcpath << "." ; } osi->dylp_controlfile(spcpath,false,true) ; } /* Process the mps file. */ if (silent == false) { std::cout << std::endl << "Reading problem file " << mpspath << "." ; } fullPath = mpspath ; dissectPath(fullPath,prefix,base,ext,compressed) ; if (prefix != "") prefixAndBase = prefix+'/' ; else prefixAndBase = "" ; prefixAndBase += base ; int errs = osi->readMps(prefixAndBase.c_str(),ext.c_str()) ; if (errs != 0) { std::cout << errs << " errors while reading " << fullPath << "\n" ; throw CoinError("MPS input error","test_user","odsi+dylp.cpp") ; } /* And try to solve the LP. */ if (silent == false) { std::cout << std::endl << "Starting LP." << std::endl ; } try { double startTime = CoinCpuTime(); osi->setHintParam(OsiDoPresolveInInitial,true,OsiHintTry) ; osi->initialSolve() ; double timeOfSolution = CoinCpuTime()-startTime; if (silent == false) { std::cout << std::endl << "Finished." ; } double val = osi->getObjValue() ; int iters = osi->getIterationCount() ; std::cout << " obj = " << val << ", iters = " << iters << ", " << timeOfSolution << "secs." << std::endl ; osi->dylp_printsoln(true,true) ; } catch (CoinError &err) { std::cout << std::endl << err.className() << "::" << err.methodName() << " (throw) " << err.message() << std::endl ; std::cout.flush() ; } delete osi ; exit(0) ; } } /* End unnamed local namespace */ /*! \brief An alternate main program for testing This is an alternate program for testing dylp and the COIN/OSI layer. Given an mps file and (optional) options file on the command line, it will run the problem and exit. */ int main (int argc, const char* argv[]) { const char *rtnnme = static_cast("dylp") ; std::ios::sync_with_stdio() ; /* Process command line options, if any. The user can specify a single, unadorned file name as the only argument. The working assumption is that if we're looking for the `-' that starts an option, and we don't see it, then we're looking at the file name. */ int argNum ; bool silent,terse,doversion,dohelp ; int printlvl ; const char *optpath,*mpspath,*logpath,*outpath ; silent = false ; terse = false ; doversion = false ; dohelp = false ; printlvl = 1 ; optpath = 0 ; mpspath = 0 ; logpath = 0 ; outpath = 0 ; for (argNum = 1 ; argNum < argc ; argNum++) { char argLett = argv[argNum][0] ; if (argLett != '-') break ; argLett = argv[argNum][1] ; /* Handle `--' option prefix for the Gnu-ish. */ if (argLett == '-') argLett = argv[argNum][2] ; switch (argLett) { case 'o': { optpath = argv[++argNum] ; #if defined(_MSC_VER) || defined(__MSVCRT__) /* Disabled on Windows --- parser fails. */ optpath = NULL ; #endif break ; } case 'm': { mpspath = argv[++argNum] ; break ; } case 'L': { logpath = argv[++argNum] ; break ; } case 'O': { outpath = argv[++argNum] ; break ; } case 's': { silent = TRUE ; break ; } case 't': { terse = TRUE ; break ; } case 'p': { printlvl = atoi(argv[++argNum]) ; break ; } case 'v': { doversion = true ; break ; } case 'h': { dohelp = true ; doversion = true ; break ; } default: { std::cout << argv[0] << ": unrecognized option \"-" << argLett << "\"." << std::endl ; print_help(argv[0]) ; exit (1) ; } } if (doversion == true || dohelp == true) break ; } /* If there's exactly one parameter left, it must be the mps file, specified without using the -m option. There should be at most one parameter left at this point. If we have parameters left, the user is confused. If we don't have an mps file, the user is confused. */ if (argNum == argc-1) { mpspath = argv[argNum++] ; } if (argNum < argc || mpspath == 0) { dohelp = TRUE ; } /* Have we been asked to print help or the version? If so, do it and exit. */ if (doversion == true || dohelp == true) { if (doversion == true) print_version(argv[0],rtnnme,osidylp_version) ; if (dohelp == true) print_help(argv[0]) ; exit (0) ; } /* What's our output level? If the user has specified a print level, go with it. Otherwise, take a cue from any -s or -t flags. Default to print level 2. */ if (printlvl < 0) { if (silent == true) printlvl = 0 ; else if (terse == true) printlvl = 1 ; else printlvl = 2 ; } /* Call test_user to do all the work. */ try { test_user(mpspath,optpath,logpath,outpath,silent,terse,printlvl) ; } catch (CoinError &err) { std::cout << std::endl << err.className() << "::" << err.methodName() << " (throw) " << err.message() << std::endl ; std::cout.flush() ; } return (0) ; } DyLP-1.10.4/DyLP/examples/osi_dylp.c0000644000175200017520000006327112253224475015506 0ustar coincoin/* This file is a portion of the Dylp LP distribution. Copyright (C) 2004 Lou Hafer, Stephen Tse Copyright (C) 2005 -- 2009 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains a main program and support routines sufficient to build a stand-alone lp solver using the version of dylp as modified for COIN/OSI. It's not necessarily pretty, but it should work adequately well. After processing any command line options, the program establishes basic facilities, reads and processes the options file, reads and processes the problem specification, calls dylp via a wrapper to solve the problem, prints the result and shuts down. The command line is expected to be of the form osi_dylp [] [] The options presently in place are: -s Run silent: turns off echo of all generated text to stdout. The default output-file path is changed from stdout to NULL. Silent overpowers terse, in the event both are specified. -t Terse output on stdout. Behaviour is as for silent, but allows an opening title and closing message giving the result of the LP. -p Set overall print level to , [0..5]. -e Source text for error messages (defaults to dy_errmsgs.txt). -E A logging file for error messages (default is to direct error messages to stderr and the log file). -o Control ('.spc') options for dylp. Default is to not look for an options file. Disabled on Windows. -m The problem ('.mps') specification. Defaults to stdin. -L A log of dylp's execution (default is no execution logging). -O The output file. Defaults to stdout unless the -s option is present, in which case the default is no output. -h Print this help message and exit. -v Print version and exit. The -m option is just an alternate way to specify the . The error log file is a duplicate of the error messages printed on stderr; the execution log file is a duplicate of output on stdout unless -s is specified to suppress output to stdout. */ #include /* We're getting close to the O/S here. Microsoft does it differently, of course. There's some disagreement in the unix community about what goes where, but I'm hoping that sys/time.h and sys/resource.h together will cover it. */ #include #if defined(_MSC_VER) || defined(__MSVCRT__) /* Nothing to do here. */ #else # include # include #endif #include "dy_cmdint.h" #include "dylp.h" static char sccsid[] UNUSED = "@(#)osi_dylp.c 1.10 09/25/04" ; static char svnid[] UNUSED = "$Id: osi_dylp.c 524 2013-12-15 03:59:57Z tkr $" ; const char *osidylp_version = "1.10" ; /* sccs! */ const char *osidylp_time ; /* Macro cleverness to specify a default error message file. Depends on ANSI C merge of consecutive string constants. DYLP_ERRMSGDIR should have the form "path/to/distribution/DyLP/src/Dylp/", including the quotes. See DyLP/src/DylpStdLib/DylpConfig.h for further information. */ #ifdef DYLP_ERRMSGDIR # define DYLP_ERRMSGPATH DYLP_ERRMSGDIR "dy_errmsgs.txt" #else # define DYLP_ERRMSGPATH "dy_errmsgs.txt" #endif /* Variables which control i/o operations. ttyout i/o id for output to the user's terminal ttyin i/o id for input from the user's terminal dy_logchn i/o id for the execution log file (set via dy_setlogchn) dy_gtxecho controls echoing of generated text to stdout (set via dy_setgtxecho) */ /* File paths used elsewhere in osi_dylp. outpath: Output file; the optimal solution is written here, as well as intermediate incumbent solutions (if requested). Intermediate incumbent solutions are solutions which improve on the previous solution (hence become the incumbent). Used in fathom:check_incumbent */ const char *outpath ; consys_struct *main_sys ; lpprob_struct *main_lp ; lpopts_struct *main_lpopts ; lptols_struct *main_lptols ; /* Routines to produce the version and help messages. The code looks better if these are off to the side. */ static void print_version (ioid chn, bool echo, const char *cmd, const char *nme, const char *ver) /* Print version, copyright, and free software disclaimer. */ { const char *disc1 = "This is free software; see the source for copying" " conditions. There is NO" ; const char *disc2 = "warranty; not even for MERCHANTABILITY or FITNESS FOR A" " PARTICULAR PURPOSE." ; dyio_outfmt(chn,echo,"\n%s (%s) V %s",cmd,nme,ver) ; dyio_outfmt(chn,echo,"\nCopyright (C) 2004 Lou Hafer") ; dyio_outfmt(chn,echo,"\n%s\n%s\n",disc1,disc2) ; return ; } static void print_help (ioid chn, bool echo, const char *name) /* Print help message. */ { dyio_outfmt(chn,echo,"\nusage: %s [] []",name) ; dyio_outfmt(chn,echo,"\n\nThe options presently in place are:\n") ; dyio_outfmt(chn,echo,"\n %s\t\t\t%s","-s", "Run silent: turns off echo of all generated text to") ; dyio_outfmt(chn,echo,"\n\t\t\t%s", "stdout. The default output-file path is changed") ; dyio_outfmt(chn,echo,"\n\t\t\t%s", "from stdout to NULL. Silent overpowers terse, in") ; dyio_outfmt(chn,echo,"\n\t\t\t%s","the event both are specified.") ; dyio_outfmt(chn,echo,"\n %s\t\t\t%s","-t", "Terse output on stdout. Behaviour is as for silent,") ; dyio_outfmt(chn,echo,"\n\t\t\t%s", "but allows an opening title and closing message") ; dyio_outfmt(chn,echo,"\n\t\t\t%s","giving the result of the LP.") ; dyio_outfmt(chn,echo,"\n %s\t\t%s","-p ", "Set overall print level to , [0..5].") ; dyio_outfmt(chn,echo,"\n %s\t%s","-e ", "Source text for error messages (defaults to") ; dyio_outfmt(chn,echo,"\n\t\t\t%s","dy_errmsgs.txt).") ; dyio_outfmt(chn,echo,"\n %s\t%s","-E ", "A logging file for error messages (default is to") ; dyio_outfmt(chn,echo, "\n\t\t\t%s","direct error messages to the log file).") ; dyio_outfmt(chn,echo,"\n %s\t%s","-o ", # if defined(_MSC_VER) || defined(__MSVCRT__) "Disabled on Windows.") ; # else "Control ('.spc') options file (default is no file).") ; # endif dyio_outfmt(chn,echo,"\n %s\t%s","-m ", "The problem ('.mps') specification (no default).") ; dyio_outfmt(chn,echo,"\n %s\t\t%s","-L ", "A log of execution (default is no execution") ; dyio_outfmt(chn,echo,"\n\t\t\t%s","logging).") ; dyio_outfmt(chn,echo,"\n %s\t%s","-O ", "The output file. Defaults to stdout unless the -s or -t") ; dyio_outfmt(chn,echo,"\n\t\t\t%s", "options are present, in which case the default is no") ; dyio_outfmt(chn,echo,"\n\t\t\t%s","output.") ; dyio_outfmt(chn,echo,"\n %s\t\t\t%s","-h", "Print this help message and exit.") ; dyio_outfmt(chn,echo,"\n %s\t\t\t%s","-v", "Print version and exit.") ; dyio_outfmt(chn,echo,"\n\n%s %s", "The -m option is just an alternate way to specify the", ".") ; dyio_outfmt(chn,echo,"\n\n%s\n%s\n%s\n", "The error log file is a duplicate of the error messages printed on", "stderr; the execution log file is a duplicate of output on stdout unless", "-s is specified to suppress output to stdout.") ; return ; } /* A few utility routines to produce run time information. We're close to the O/S here, everyone has their own idea. `struct timeval' is the unix side of life. Microsoft just uses ticks. Microsecond timing is questionable at best, so maybe Microsoft has it right here. Easiest way to finesse this (coming from the Linux side) is to define a timeval structure. Then the only routine we need is get_timeval. */ #if defined(_MSC_VER) || defined(__MSVCRT__) typedef long int __time_t ; typedef long int __suseconds_t ; struct timeval { __time_t tv_sec ; __suseconds_t tv_usec ; } ; static void get_timeval (struct timeval *tv) /* Call the clock function to get time in ticks, and convert to seconds and microseconds. Parameter: tv: (i/o) timeval structure, will be filled with the current time Returns: undefined */ { double temp ; temp = (double) clock() ; temp /= CLOCKS_PER_SEC ; tv->tv_sec = (__time_t) temp ; temp -= tv->tv_sec ; tv->tv_usec = (__suseconds_t) (temp*(1e6)) ; return ; } #else /* end Microsoft (_MSC_VER, __MSVCRT__), start Linux version */ static void get_timeval (struct timeval *tv) /* Call getrusage to retrieve the user and system time, sum them, and return the lot as a timeval. Parameter: tv: (i/o) timeval structure, will be filled with the current time Returns: undefined */ { struct rusage ruse ; # ifndef NDEBUG /* Avoid a `read from unitialised' error. */ memset(&ruse,0,sizeof(struct rusage)) ; # endif /* Retrieve the current time. */ if (getrusage(RUSAGE_SELF,&ruse) < 0) { tv->tv_sec = 0 ; tv->tv_usec = 0 ; return ; } /* Sum up the user and system time and return it. I'm assuming that the number of usecs. in the tv_usec field is always less than 1e6 (i.e., less than 1 sec.) and therefore it's safe to simply add user and system values without worrying about integer overflow. */ tv->tv_usec = ruse.ru_utime.tv_usec+ruse.ru_stime.tv_usec ; tv->tv_sec = tv->tv_usec/((int) 1e6) ; tv->tv_usec = tv->tv_usec%((int) 1e6) ; tv->tv_sec += ruse.ru_utime.tv_sec ; tv->tv_sec += ruse.ru_stime.tv_sec ; return ; } # endif /* Microsoft/Linux time function */ static void sub_timevals (struct timeval *diff, struct timeval *end, struct timeval *start) /* Calculate diff = end-start in timeval's. Parameters: start,end: start and end timevals. diff: (o) timeval to be filled in with the difference Returns: undefined */ { /* Normalise the start and end timevals. */ if (start->tv_usec > 1e6) { start->tv_sec += start->tv_usec/((int) 1e6) ; start->tv_usec = start->tv_usec%((int) 1e6) ; } if (end->tv_usec > 1e6) { end->tv_sec += end->tv_usec/((int) 1e6) ; end->tv_usec = end->tv_usec%((int) 1e6) ; } /* Do the subtraction. We may have to borrow a few usecs. */ if (end->tv_usec < start->tv_usec) { end->tv_usec += (int) 1e6 ; end->tv_sec-- ; } diff->tv_usec = end->tv_usec-start->tv_usec ; diff->tv_sec = end->tv_sec-start->tv_sec ; return ; } static void prt_timeval (ioid chn, bool echo, struct timeval *tv) /* A little local utility to print a timeval as hh:mm:ss.ss. Parameters: chn: output channel id echo: controls echo to stdout tv: timeval to be printed Returns: undefined */ { int hrs, mins, secs, csecs ; hrs = tv->tv_sec/3600 ; mins = tv->tv_sec%3600 ; secs = mins%60 ; mins = mins/60 ; csecs = tv->tv_usec/1e4 ; dyio_outfmt(chn,echo,"%d:%02d:%02d.%02d",hrs,mins,secs,csecs) ; return ; } static void stats_lp (const char *outpath, bool echo, lpprob_struct *lp, struct timeval *lptime, lpstats_struct *lpstats) /* A little shell routine to handle writing detailed statistics on an LP to the output file. Parameters: outpath: the output file path name. echo: TRUE to echo to stdout, FALSE otherwise lp: lp problem structure lptime: elapsed time for call to do_lp lpstats: lp statistics structure Returns : undefined */ { ioid chn ; int vndx,bpos ; const char *rtnnme = "stats_lp" ; /* Set up the output. Don't echo this to stdout twice. */ if (outpath == NULL) { dywarn(2,rtnnme,"file name") ; chn = IOID_NOSTRM ; } else { chn = dyio_pathtoid(outpath,NULL) ; if (chn == IOID_INV) chn = dyio_openfile(outpath,"w") ; if (chn == IOID_INV) { dywarn(10,rtnnme,outpath,"w") ; chn = IOID_NOSTRM ; } if (strcmp(outpath,"stdout") == 0) echo = FALSE ; } /* Print a few items from the lp structure --- name, status, pivot count, and lp return code. */ if (lp == NULL) { dyio_outfmt(chn,echo, "\n\n<< %s: LP problem structure is NULL! >>\n", rtnnme) ; } else { dyio_outfmt(chn,echo, "\n\nSystem: %s\t\t\tfinal status: %s after %d iterations.", lp->consys->nme,dy_prtlpphase(lp->phase,FALSE),lp->iters) ; if (lp->phase == dyDONE) { dyio_outfmt(chn,echo,"\n lp status: %s",dy_prtlpret(lp->lpret)) ; switch (lp->lpret) { case lpOPTIMAL: { dyio_outfmt(chn,echo,"\t\tobjective: %.9g",lp->obj) ; break ; } case lpINFEAS: { dyio_outfmt(chn,echo,"\t\tinfeasibility: %.9g",lp->obj) ; break ; } case lpUNBOUNDED: { if (lp->obj != 0) { if (lp->obj < 0) { vndx = abs((int) lp->obj) ; bpos = -1 ; } else { vndx = (int) lp->obj ; bpos = 1 ; } dyio_outfmt(chn,echo,"\t\tunbounded variable %s (%d) (%s)", consys_nme(lp->consys,'v',vndx,FALSE,NULL),vndx, (bpos < 0)?"decreasing":"increasing") ; } break ; } default: { break ; } } } if (lptime != NULL) { dyio_outfmt(chn,echo,"\n lp time: ") ; prt_timeval(chn,echo,lptime) ; dyio_outfmt(chn,echo," (%.2f)",lptime->tv_sec+lptime->tv_usec/1e6) ; } } # ifdef DYLP_STATISTICS if (lpstats != NULL) dy_dumpstats(chn,echo,lpstats,lp->consys) ; # endif dyio_outfmt(chn,echo,"\n") ; dyio_flushio(chn,echo) ; return ; } static lpret_enum do_lp (struct timeval *elapsed, int printlvl) /* This routine is a wrapper which makes up the difference between the setup completed in the main program and the setup expected by dylp. Structures are created for the lp problem, options, tolerances, and statistics, and passed to dylp. Once the lp completes, the stats are printed and the statistics structure is released. Other cleanup is handled in main. Returns: lp status code; lpINV is used in the event of a fatal error that's not really dylp's fault. */ { lpret_enum lpret ; lpopts_struct *initial_lpopts ; lpstats_struct *initial_lpstats ; struct timeval diff,before,after ; const char *rtnnme = "do_lp" ; lpret = lpINV ; /* Create and initialise the main_lp structure to pass the problem in to dylp. */ main_lp = (lpprob_struct *) CALLOC(1,sizeof(lpprob_struct)) ; main_lp->phase = dyINV ; main_lp->consys = main_sys ; main_lp->rowsze = main_sys->rowsze ; main_lp->colsze = main_sys->colsze ; /* Set up options, statistics, and solve the lp. After we're done, dump the statistics and free the dylp statistics structure. The options specified in the main routine (cold start using a logical basis and the full constraint system) are appropriate for the initial solution of an LP. In particular, if you're modifying this driver to do more than just solve the LP (for example, if you want access to tableau information after dylp returns with an answer) you really want to set the lpctlNOFREE flag in main_lp->ctlopts. See the comments in dylp.h for the available flags. */ initial_lpopts = (lpopts_struct *) MALLOC(sizeof(lpopts_struct)) ; memcpy(initial_lpopts,main_lpopts,sizeof(lpopts_struct)) ; dy_setprintopts(printlvl,initial_lpopts) ; # ifdef DYLP_STATISTICS initial_lpstats = NULL ; dy_initstats(&initial_lpstats,main_sys) ; # else initial_lpstats = NULL ; # endif get_timeval(&before) ; lpret = dylp(main_lp,initial_lpopts,main_lptols,initial_lpstats) ; get_timeval(&after) ; sub_timevals(&diff,&after,&before) ; if (elapsed != NULL) (*elapsed) = diff ; stats_lp(outpath,FALSE,main_lp,&diff,initial_lpstats) ; # ifdef DYLP_STATISTICS dy_freestats(&initial_lpstats) ; # endif if (initial_lpopts != NULL) FREE(initial_lpopts) ; return (lpret) ; } int main (int argc, char *argv[]) { time_t timeval ; struct tm *tm ; char runtime[50] ; ioid ttyin,ttyout,outchn,logchn,cmdchn ; int optlett,printlvl ; bool silent,terse,swaperrs,errecho,gtxecho,doversion,dohelp ; const char *errmsgpath,*errlogpath,*optpath,*mpspath,*logpath ; struct timeval lptime ; const char *rtnnme = argv[0] ; /* getopt() --- we need explicit declarations under strict ANSI compliance mode. This function seems to be quite common, however. Present in GCC. */ int getopt(int argc, char*const *argv, const char *optstring) ; extern char *optarg ; extern int opterr,optind,optopt ; const char *optstring = "e:stp:E:o:m:L:O:hv"; extern struct tm *localtime(const time_t *clock) ; /* mpsio.c */ extern bool dy_mpsin(const char *mpspath, consys_struct **consys, double infinity); /* dy_basis.c */ extern void dy_initbasis(int concnt, int factor_freq, double zero_tol), dy_freebasis(void) ; /* Set up some defaults, then process the command line options. This is all very specific to Unix and SunOS. */ errmsgpath = DYLP_ERRMSGPATH ; errlogpath = NULL ; optpath = NULL ; mpspath = NULL ; outpath = NULL ; logpath = NULL ; ttyout = IOID_INV ; ttyin = IOID_INV ; logchn = IOID_INV ; outchn = IOID_INV ; silent = FALSE ; terse = FALSE ; gtxecho = TRUE ; doversion = FALSE ; dohelp = FALSE ; printlvl = -1 ; opterr = 0 ; for (optlett = getopt(argc,argv,optstring) ; optlett != -1 ; optlett = getopt(argc,argv,optstring)) switch (optlett) { case 'e': { errmsgpath = optarg ; break ; } case 'E': { errlogpath = optarg ; break ; } case 'o': { optpath = optarg ; break ; } case 'm': { mpspath = optarg ; break ; } case 'L': { logpath = optarg ; break ; } case 'O': { outpath = optarg ; break ; } case 's': { silent = TRUE ; gtxecho = FALSE ; break ; } case 't': { terse = TRUE ; gtxecho = FALSE ; break ; } case 'p': { printlvl = atoi(optarg) ; break ; } case 'v': { doversion = TRUE ; break ; } case 'h': { dohelp = TRUE ; break ; } case '?': { errinit(errmsgpath,errlogpath,TRUE) ; dyio_ioinit() ; errmsg(3,rtnnme,"command line option",optopt) ; exit (1) ; } } /* If there's still a parameter left, it must be the mps file, specified without using the -m option. There should not be more than one parameter remaining. */ if (optind < argc) { mpspath = argv[optind] ; optind++ ; } if (optind < argc) { dohelp = TRUE ; } /* What's our output level? If the user has specified a print level, go with it. Otherwise, take a cue from any -s or -t flags. Default to print level 2. */ if (printlvl < 0) { if (silent == TRUE) printlvl = 0 ; else if (terse == TRUE) printlvl = 1 ; else printlvl = 2 ; } /* Output file name: if the user hasn't specified one, and we're not running silent, default to stdout. */ if (outpath == NULL && silent == FALSE) outpath = "stdout" ; /* Grab the time and format it nicely. */ if (time(&timeval) == (time_t)(-1)) { dywarn(19,rtnnme) ; osidylp_time = "n/a" ; } else { tm = localtime(&timeval) ; if (tm != NULL) { strftime(runtime,sizeof(runtime),"%A, %B %d, %Y, %I:%M:%S %p",tm) ; osidylp_time = runtime ; } else { osidylp_time = "n/a" ; } } /* Figure out the appropriate settings for silent and terse. silent is set to (silent || terse), and is passed to dy_processcmds so that it can properly handle command and generated text echo. terse is set for ease of controlling the output specifically mentioned in conjunction with terse mode (which is controlled from this routine). The proper value is (terse || !silent). The cryptic little if statement below accomplishes this (try a decision tree to convince yourself). */ if (terse == TRUE) { if (silent == TRUE) terse = FALSE ; else silent = TRUE ; } else { if (silent == FALSE) terse = TRUE ; } /* Execute initialization routines for the i/o and error reporting packages. */ if (silent == TRUE) errecho = FALSE ; else errecho = TRUE ; errinit(errmsgpath,errlogpath,errecho) ; if (dyio_ioinit() != TRUE) { errmsg(1,rtnnme,__LINE__) ; exit (2) ; } /* Connect ttyout to the standard output. Initialize ttyin, setting the mode to line-oriented. Serious internal confusion if we can't manage these. Set the initial command input channel to stdin. */ ttyout = dyio_openfile("stdout","w") ; if (ttyout == IOID_INV) { errmsg(1,rtnnme,__LINE__) ; exit(3) ; } ttyin = dyio_openfile("stdin","r") ; if (ttyin == IOID_INV) { errmsg(1,rtnnme,__LINE__) ; exit(4) ; } (void) dyio_setmode(ttyin,'l') ; cmdchn = ttyin ; /* Initialize logging. */ if (logpath != NULL) { logchn = dyio_openfile(logpath,"w") ; if (logchn == IOID_INV) { dywarn(201,rtnnme,logpath) ; logchn = IOID_NOSTRM ; } } else { logchn = IOID_NOSTRM ; } dy_setlogchn(logchn) ; dy_setgtxecho(gtxecho) ; /* Are we supposed to merge the error messages with the log stream? (Note that errors will be echoed to stderr unless we're running silent. If the user's turned off logging too, well, it's their business.) swaperrs just tells the code that it should reset the error logging channel if it ever resets the main logging channel. */ if (errlogpath == NULL && logchn != IOID_NOSTRM) { swaperrs = TRUE ; errlogpath = logpath ; if (dyio_chgerrlog(errlogpath,errecho) == FALSE) { dywarn(18,rtnnme,"",errlogpath) ; } } /* Ok, after all that work, check if we've been asked for the version or usage messages. If so, do it and head for the exit. Version preempts help. */ if (doversion == TRUE) { print_version(logchn,gtxecho,argv[0],rtnnme,osidylp_version) ; goto NOOUTFILE_CLEANUP ; } if (dohelp == TRUE) { print_help(logchn,gtxecho,argv[0]) ; goto NOOUTFILE_CLEANUP ; } /* We're up! Banners to the appropriate places. */ dyio_outfmt(logchn,terse,"\n\t\t %s\tV %s\n",rtnnme,osidylp_version) ; dyio_outfmt(logchn,terse,"\n\t\t%s",runtime) ; dyio_outfmt(logchn,terse,"\n\n") ; if (outpath != NULL && strcmp(outpath,"stdout") != 0) { outchn = dyio_pathtoid(outpath,NULL) ; if (outchn == IOID_INV) outchn = dyio_openfile(outpath,"w") ; if (outchn == IOID_INV) { dywarn(10,rtnnme,outpath,"w") ; } else { dyio_outfmt(outchn,FALSE,"\n\t\t %s\tV %s\n",rtnnme,osidylp_version) ; dyio_outfmt(outchn,FALSE,"\n\t\t%s",runtime) ; dyio_outfmt(outchn,FALSE,"\n\n") ; } } /* Time to set up the lp options. Establish a set of defaults, then read the options file to see what the user has in mind. Because this is a standalone shell, doing a one-time solution for an LP, set up a default of cold start using the full system and a logical basis. This can be overridden in a .spc file if desired. For reasons that escape me at the moment, the parser fails on Windows. This may get fixed eventually. For now, disabled by the simple expedient of forcing optpath to NULL. */ dy_defaults(&main_lpopts,&main_lptols) ; main_lpopts->forcecold = TRUE ; main_lpopts->fullsys = TRUE ; main_lpopts->coldbasis = ibLOGICAL ; # if defined(_MSC_VER) || defined(__MSVCRT__) optpath = NULL ; # endif if (optpath != NULL) { cmdchn = dyio_openfile(optpath,"r") ; if (cmdchn == IOID_INV) exit (1) ; (void) dyio_setmode(cmdchn,'l') ; switch (dy_processcmds(cmdchn,silent,main_lpopts,main_lptols)) { case cmdOK: { break ; } case cmdHALTERROR: { exit (1) ; } case cmdHALTNOERROR: { exit (0) ; } default: { exit (1) ; } } if (cmdchn != ttyin) { (void) dyio_closefile(cmdchn) ; cmdchn = IOID_INV ; } } /* Make an attempt to read the mps input file. */ if (dy_mpsin(mpspath,&main_sys,main_lptols->inf) == FALSE) { exit (10) ;} /* Check over the option settings, now that we know how big the constraint system will be. */ dy_checkdefaults(main_sys,main_lpopts,main_lptols) ; /* Initialise the basis maintenance package. The second parameter controls how many basis updates the basis can hold before it requires refactoring. Adding 5 to dylp's refactor interval should give a safety margin. */ dy_initbasis(2*main_sys->concnt,main_lpopts->factor+5,0.0) ; /* Run the lp. */ if (do_lp(&lptime,printlvl) == FALSE) { errmsg(443,rtnnme,main_sys->nme,dy_prtlpphase(main_lp->phase,TRUE), main_lp->iters) ; } /* Should we produce any output? Print to a file, if requested. */ if (outchn != IOID_INV && outchn != ttyout) { dy_dumpcompact(outchn,FALSE,main_lp,FALSE) ; } /* Any final terminal output we should do? */ if (printlvl >= 1) { if (printlvl >= 2) { dy_dumpcompact(logchn, (logchn == IOID_INV)?TRUE:FALSE,main_lp,FALSE) ; } dyio_outfmt(logchn,TRUE,"\nReturn code %s",dy_prtlpret(main_lp->lpret)) ; if (main_lp->phase == dyDONE) dyio_outfmt(logchn,TRUE," after %d pivots",main_lp->iters) ; if (main_lp->lpret == lpOPTIMAL) { dyio_outfmt(logchn,TRUE,"; objective %.8g",main_lp->obj) ; } dyio_outfmt(logchn,TRUE, " (%.2f sec.)",lptime.tv_sec+lptime.tv_usec/1e6) ; dyio_outfmt(logchn,TRUE,".\n") ; dyio_flushio(logchn,gtxecho) ; } /* Final cleanup. Free space used by the remaining main_* structures. */ dy_freebasis() ; if (main_lp != NULL) { dy_freesoln(main_lp) ; if (main_lp->consys != NULL) consys_free(main_lp->consys) ; FREE(main_lp) ; } if (main_lpopts != NULL) FREE(main_lpopts) ; if (main_lptols != NULL) FREE(main_lptols) ; /* Leap to here for shutdown when we opened the output file but didn't solve an LP. */ if (outchn != IOID_INV && outchn != ttyout) { (void) dyio_closefile(outchn) ; } /* Leap to here for shutdown in cases where we never get as far as opening an output file. We still need to close the log file and shut down the i/o subsystem. */ NOOUTFILE_CLEANUP: if (logchn != IOID_INV && logchn != IOID_NOSTRM) { (void) dyio_closefile(logchn) ; } dyio_ioterm() ; errterm() ; exit(0) ; /* Just to suppress the silly warning from the compiler, which isn't satisfied with the immediately preceding `exit'. */ return (0) ; } DyLP-1.10.4/DyLP/examples/plain0000755000175200017520000001066111417401754014542 0ustar coincoin#!/bin/csh -f # svn/cvs: $Id: plain 332 2010-07-14 18:37:32Z lou $ # Simple csh script to run the osi_dylp main program. Mainly to make it a bit # easier to find MPS files and get the parameters right. Also, the script # will look for a dylp options (.spc) file and add it to the osi_dylp command # line. # Edit here to choose the C interface (osi_dylp) or the OSI interface # (odsi+dylp) as the default. set wrapper = (./osi_dylp) # set wrapper = (./odsi+dylp) # Check for MPS file directories in likely places. set mpsSearchDirs foreach dataDir (Data ../Data ../../Data ../../../Data ../../../../Data) if (-d $dataDir && -x $dataDir) then echo "Checking $dataDir" foreach dir (`ls $dataDir`) set dir = "$dataDir/$dir" if (-d $dir && -x $dir) then set mpsSearchDirs = ($mpsSearchDirs $dir) endif end endif end set mpsSearchDirs = (. $mpsSearchDirs) # Usage message set usage = "plain [-odsi|-dylp] [additional parameters] " set usage1 = " Where -odsi selects the odsi+dylp (OsiDylp/C++) wrapper" set usage2 = " -dylp selects the osi_dylp (native/C) wrapper" set usage3 = " and [additional parameters] should be appropriate" set usage4 = " for the specified wrapper." set usage5 = " The default wrapper is $wrapper[1]" set usage5 = " The default wrapper is $wrapper[1]" set usage6 = " -h anywhere in the command line gets this help message." set usage7 = " MPS file search directories are $mpsSearchDirs" if ($#argv < 1) then set argv = "--help" endif # Does the user want help? if ("$argv[*]" =~ *-h*) then echo "Usage: $usage" echo $usage1:q echo $usage2:q echo $usage3:q echo $usage4:q echo $usage5:q echo $usage6:q echo $usage7:q if (-x $wrapper) then $wrapper -h else echo "Execute $wrapper -h to see the help text for $wrapper." endif exit endif # See if the user has specified a front-end on the command line. switch ($argv[1]) case -odsi: set wrapper = "./odsi+dylp" shift breaksw case -dylp: set wrapper = "./osi_dylp" shift breaksw endsw # MPS file should be the last parameter set example = $argv[$#argv] # Did the user hand us an absolute path? Dissect accordingly. if ($example =~ /*) then echo "Dissecting absolute path." set mpsSearchDirs = $example:h set example = $example:t endif # Search for an mps file. The reason for putting the loop with suffixes on the # outside is so that we'll find the shortest suffix, whereever it might reside. set mpsdir set mpsfile set mpsext foreach ext ("" ".mps" ".gz" ".mps.gz") set candidate = ${example}${ext} foreach dir ($mpsSearchDirs) if (-e $dir/$candidate) then set mpsfile = $dir/$candidate set mpsdir = $dir set mpsext = $ext break ; break endif end end if ("$mpsfile" == "") then echo "Can't"' locate mps file for "'$example'".' echo "Usage: $usage" echo $usage1:q echo $usage2:q echo $usage3:q echo $usage4:q echo $usage5:q echo $usage6:q $wrapper -h exit endif if ("$mpsext" == "") then set example = $example:r endif # Dylp's native mps reader does not read from compressed files. Unzip if # necessary. if ($wrapper =~ *osi_dylp && $mpsfile =~ *.gz) then set lclext = `echo $mpsext | sed -e 's/\.gz//'` set unzipmpsfile = ./${example}${lclext} gunzip -c $mpsfile > $unzipmpsfile echo "Created uncompressed copy of $mpsfile as $unzipmpsfile." else set unzipmpsfile = $mpsfile endif # Check for example.spc in the directory where the mps file was located, and in # the current directory. Failing that, look for generic.spc in the same # places. if (-e $mpsdir/${example}.spc) then set spcfile = "-o $mpsdir/${example}.spc" else if (-e ${example}.spc) then set spcfile = "-o ${example}.spc" else if (-e $mpsdir/generic.spc) then set spcfile = "-o generic.spc" else if (-e generic.spc) then set spcfile = "-o generic.spc" else set spcfile endif # If there are two or more arguments, the rest are assumed to be # command line parameters. if ($#argv > 1) then @ flagcnt = $#argv - 1 set flags = "$argv[1-$flagcnt]" else set flags = "" endif # Go to it. echo -n "Processing $mpsfile" if ("$spcfile" != "") then echo -n ", spc = $spcfile" endif if ("$flags" != "") then echo -n ", flags = $flags" endif echo "." echo "$wrapper $spcfile -m ${unzipmpsfile} -L ${example}.log -O ${example}.out $flags" $wrapper $spcfile \ -m ${unzipmpsfile} -L ${example}.log \ -O ${example}.out $flags DyLP-1.10.4/DyLP/dylp.pc.in0000644000175200017520000000045011507672353013574 0ustar coincoinprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: DyLP Description: dynamic simplex linear programming solver URL: https://projects.coin-or.org/DyLP Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lDylp @DYLPLIB_PCLIBS@ Cflags: -I${includedir} Requires: DyLP-1.10.4/DyLP/test/0000755000175200017520000000000013434203622012641 5ustar coincoinDyLP-1.10.4/DyLP/test/Makefile.am0000644000175200017520000000563112260622216014702 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id$ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # unitTest for DyLP # ######################################################################## noinst_PROGRAMS = unitTest unitTest_SOURCES = \ dytest_problems.c \ dytest_rays.c \ dytest_solutions.c \ dytest_tableau.c \ unitTest.c # List libraries required for the unitTest unitTest_LDADD = ../src/Dylp/libDylp.la $(DYLPLIB_LIBS) unitTest_DEPENDENCIES = ../src/Dylp/libDylp.la $(DYLPLIB_DEPENDENCIES) # 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`$(CYGPATH_W) $(srcdir)/../src/DylpStdLib` \ -I`$(CYGPATH_W) $(srcdir)/../src/Dylp` ######################################################################## # unitTest for OsiDyLP # ######################################################################## if COIN_HAS_OSITESTS noinst_PROGRAMS += osiUnitTest osiUnitTest_SOURCES = osiUnitTest.cpp OsiDylpSolverInterfaceTest.cpp osiUnitTest_LDADD = ../src/OsiDylp/libOsiDylp.la ../src/Dylp/libDylp.la \ $(OSITESTS_LIBS) $(OSIDYLPLIB_LIBS) $(DYLPLIB_LIBS) osiUnitTest_DEPENDENCIES = ../src/OsiDylp/libOsiDylp.la ../src/Dylp/libDylp.la \ $(OSITESTS_DEPENDENCIES) $(OSIDYLPLIB_DEPENDENCIES) $(DYLPLIB_DEPENDENCIES) AM_CPPFLAGS += -I`$(CYGPATH_W) $(srcdir)/../src/OsiDylp` \ $(COINUTILS_CFLAGS) $(OSITESTS_CFLAGS) osiTestDep = osiUnitTest$(EXEEXT) osiunittestflags = -mpsDir=`$(CYGPATH_W) $(SAMPLE_DATA)` if COIN_HAS_NETLIB osiunittestflags += -netlibDir=`$(CYGPATH_W) $(NETLIB_DATA)` \ -testOsiSolverInterface endif endif ######################################################################## # test target # ######################################################################## # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/DylpStdLib test: unitTest$(EXEEXT) $(osiTestDep) ./unitTest$(EXEEXT) ; \ if test -e osiUnitTest$(EXEEXT) ; then \ ./osiUnitTest$(EXEEXT) $(osiunittestflags) ; \ fi .PHONY: test ######################################################################## # Cleaning stuff # ######################################################################## # Here we list everything that is not generated by the compiler, e.g., # output files of a program. DISTCLEANFILES = if COIN_HAS_OSITESTS DISTCLEANFILES += test.* test2.* endif DISTCLEANFILES = test.* test2.* DyLP-1.10.4/DyLP/test/dytest_tableau.c0000644000175200017520000005241611573762145016042 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2008 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains routines to test dylp's tableau routines: dy_betaj, dy_betai, dy_abarj, and dy_abari. */ #include "dylp.h" #include extern ioid dy_logchn ; extern bool dy_gtxecho ; static int compare_basisel (const void *el1, const void *el2) /* Helper routine to sort the basis vector by row index. Since the basis vector cannot have equal indices, this routine will never return 0. Parameters: a pair of basisel_struct's Returns: -1 if el1 < el2 0 if el1 = el2 1 if el1 > el2 */ { const basisel_struct *basisel1,*basisel2 ; basisel1 = (const basisel_struct *) el1 ; basisel2 = (const basisel_struct *) el2 ; if (basisel1->cndx < basisel2->cndx) { return (-1) ; } else { return (1) ; } } static consys_struct *create_basis (lpprob_struct *main_lp, lptols_struct *main_lptols, lpopts_struct *main_lpopts, int **p_basis2sys) /* This routine builds a basis matrix to match the basis returned by dylp. Very handy for testing dylp's tableau routines. If this basis matrix is to be directly useable in calculations involving the basis inverse, we need to install rows and columns in the proper order. The row order must correspond to the row order of the external system and the basic variable that is associated with row i must be placed in column i. Each entry in the basis vector returned from dylp specifies indices, in the external frame of reference, for the constraint and variable associated with the basis position. However, the order of basis entries matches the constraint order in dylp's active system, which has no predictable relationship to the order of constraints in the external system. In addition, if dylp is working with a partial system, not all constraints will be included. So we have some work to do. Parameters: main_lp: the lp problem structure main_lptols: the lp tolerance structure main_lpopts: the lp options structure p_basis2sys: (i) vector to hold translation from basis column order to external system column order; allocated if NULL. (o) completed translation vector Note that basis2sys is an attached vector for basis and will be freed when the constraint system is freed. Returns: pointer to a basis matrix, or NULL if an error occurs during construction */ { int m,n,i,j,k ; double infty ; consys_struct *sys ; consys_struct *basis ; basisel_struct *basisVec ; int basisLen,lastRow ; int *basis2sys ; pkvec_struct *ai,*aj ; char *rtnnme = "create_basis" ; # ifndef DYLP_NDEBUG int printlvl ; printlvl = maxx(main_lpopts->print.tableau,main_lpopts->print.rays) ; /* printlvl = 3 ; */ # endif /* Do a little initialisation. */ sys = main_lp->consys ; m = sys->concnt ; n = sys->varcnt ; infty = main_lptols->inf ; # ifndef DYLP_NDEBUG if (printlvl >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "%s: generating basis matrix from %s (%d x %d).\n", rtnnme,sys->nme,m,n) ; } # endif /* Construct the basis based on the solution in main_lp. All we need here is the bare coefficient matrix. None of the usual attached vectors are required. */ basisLen = main_lp->basis->len ; # ifndef DYLP_NDEBUG if (printlvl >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, " basis contains %d entries.\n",basisLen) ; } # endif /* Create a constraint system to hold the basis. */ basis = consys_create("basisMtx",0,0,m,m,infty) ; if (basis == NULL) { errmsg(152,rtnnme,"basis") ; return (FALSE) ; } # ifndef DYLP_NDEBUG if (printlvl >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho," created system %s (%d x %d).\n", basis->nme,basis->rowsze,basis->colsze) ; } # endif /* Copy over the row headers for all constraints. */ ai = pkvec_new(0) ; for (i = 1 ; i <= m ; i++) { if (consys_getrow_pk(sys,i,&ai) == FALSE) { errmsg(122,rtnnme,sys->nme,"row",consys_nme(sys,'c',i,FALSE,NULL),i) ; if (ai != NULL) pkvec_free(ai) ; consys_free(basis) ; return (NULL) ; } if (consys_addrow_pk(basis,'a',0,ai,0,0,NULL,NULL) == FALSE) { errmsg(112,rtnnme,basis->nme,"add row","constraint", consys_nme(sys,'c',i,FALSE,NULL),i) ; if (ai != NULL) pkvec_free(ai) ; consys_free(basis) ; return (NULL) ; } # ifndef DYLP_NDEBUG if (printlvl >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho," added %s (%d) to basis as row %d.\n", consys_nme(sys,'c',i,FALSE,NULL),i,ai->ndx) ; } # endif } if (ai != NULL) pkvec_free(ai) ; /* Now install the basic columns. As explained at the head of the routine, we have some work to do. First, make a copy of the basis vector and sort it by row index, so that the basis entries we have match the order in sys. Then we can walk the basis and install the columns in order. Basic logicals that were part of the basis in dylp's active system are represented by the negative of the index of the associated constraint. When we encounter one, synthesize a unit column for the logical. Except ... the basis will not mention inactive constraints. Each time we encounter a gap in constraint indices, install unit columns as needed. We're doing a sort of on-the-fly activation of inactive constraints, using the logical as the basic variable. With all that, we'll need a translation vector, to take indices in the basis frame and translate them to indices in the sys frame. */ if (consys_attach(basis, CONSYS_ROW,sizeof(int),((void **) p_basis2sys)) == FALSE) { errmsg(100,rtnnme,basis->nme,"basis2sys") ; consys_free(basis) ; return (NULL) ; } basis2sys = *p_basis2sys ; basisVec = CALLOC((basisLen+1),sizeof(basisel_struct)) ; memcpy(basisVec,main_lp->basis->el,(basisLen+1)*sizeof(basisel_struct)) ; qsort(((void *) &basisVec[1]), basisLen,sizeof(basisel_struct),compare_basisel) ; aj = pkvec_new(sys->maxcollen) ; lastRow = 0 ; for (k = 1 ; k <= basisLen ; k++) { i = basisVec[k].cndx ; while ((i-lastRow) > 1) { lastRow++ ; aj->coeffs[0].ndx = lastRow ; aj->coeffs[0].val = 1.0 ; aj->nme = consys_nme(sys,'v',n+lastRow,FALSE,NULL) ; aj->cnt = 1 ; if (consys_addcol_pk(basis,vartypCON,aj,0.0,0.0,0.0) == FALSE) { errmsg(112,rtnnme, basis->nme,"add column","variable",aj->nme,lastRow) ; if (aj != NULL) pkvec_free(aj) ; if (basisVec != NULL) FREE(basisVec) ; consys_free(basis) ; return (NULL) ; } basis2sys[aj->ndx] = -lastRow ; # ifndef DYLP_NDEBUG if (printlvl >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, " fabricated unit column for inactive %s (%d) at %d.\n", aj->nme,lastRow,aj->ndx) ; } # endif } j = basisVec[k].vndx ; if (j < 0) { aj->coeffs[0].ndx = -j ; aj->coeffs[0].val = 1.0 ; aj->nme = consys_nme(sys,'v',n-j,FALSE,NULL) ; aj->cnt = 1 ; } else { if (consys_getcol_pk(sys,j,&aj) == FALSE) { errmsg(122,rtnnme,sys->nme,"column", consys_nme(sys,'v',j,FALSE,NULL),j) ; if (aj != NULL) pkvec_free(ai) ; if (basisVec != NULL) FREE(basisVec) ; consys_free(basis) ; return (NULL) ; } } if (consys_addcol_pk(basis,vartypCON,aj,0.0,0.0,0.0) == FALSE) { errmsg(112,rtnnme,basis->nme,"add column","variable",aj->nme,abs(j)) ; if (aj != NULL) pkvec_free(aj) ; if (basisVec != NULL) FREE(basisVec) ; consys_free(basis) ; return (NULL) ; } basis2sys[aj->ndx] = j ; # ifndef DYLP_NDEBUG if (printlvl >= 5) { if (j < 0) { dyio_outfmt(dy_logchn,dy_gtxecho, " fabricated unit column for %s (%d) at %d.\n", aj->nme,-j,aj->ndx) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, " inserted column for %s (%d) at %d.\n", aj->nme,j,aj->ndx) ; } } # endif lastRow++ ; } if (basisVec != NULL) FREE(basisVec) ; /* There's no guarantee that we've covered all constraints. See if there are any left. Those that remain are definitely inactive. */ for (k = lastRow+1 ; k <= m ; k++) { aj->coeffs[0].ndx = k ; aj->coeffs[0].val = 1.0 ; aj->nme = consys_nme(sys,'v',n+k,FALSE,NULL) ; aj->cnt = 1 ; if (consys_addcol_pk(basis,vartypCON,aj,0.0,0.0,0.0) == FALSE) { errmsg(112,rtnnme, basis->nme,"add column","variable",aj->nme,k) ; if (aj != NULL) pkvec_free(aj) ; consys_free(basis) ; return (NULL) ; } basis2sys[aj->ndx] = -k ; # ifndef DYLP_NDEBUG if (printlvl >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, " fabricated unit column for inactive %s (%d) at %d.\n", aj->nme,k,aj->ndx) ; } # endif } if (aj != NULL) pkvec_free(aj) ; # ifndef DYLP_NDEBUG if (printlvl >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho," Basis matrix is:\n") ; dyio_outfmt(dy_logchn,dy_gtxecho, "Pos'n\tConstraint\t Variable\t Orig.Col\n") ; for (i = 1 ; i <= m ; i++) { dyio_outfmt(dy_logchn,dy_gtxecho, "%5d\t%-16s",i,consys_nme(basis,'c',i,FALSE,NULL)) ; dyio_outfmt(dy_logchn,dy_gtxecho, " %-16s %5d\n",consys_nme(basis,'v',i,FALSE,NULL), basis2sys[i]) ; } } # endif return (basis) ; } int dytest_betaj (lpprob_struct *main_lp, lptols_struct *main_lptols, lpopts_struct *main_lpopts) /* This routine checks the accuracy of the tableau routine dy_betaj (column beta of the basis inverse) by testing that B beta = e. Parameters: main_lp: the lp problem structure main_lptols: the lp tolerance structure main_lpopts: the lp options structure Returns: 0 if Binv(B) = I, number of errors otherwise. */ { int m,i,j,k ; consys_struct *sys ; consys_struct *basis ; int *basis2sys ; double *betaj ; double aidotbetaj,expected ; int errcnt ; char *rtnnme = "dytest_betaj" ; /* Do a little initialisation. Mention that we've started. */ sys = main_lp->consys ; # ifndef DYLP_NDEBUG if (main_lpopts->print.tableau >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "%s: checking columns of basis inverse using %s (%d x %d).\n", rtnnme,sys->nme,sys->concnt,sys->varcnt) ; if (main_lpopts->print.tableau >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, " basis contains %d entries.\n",main_lp->basis->len) ; } } # endif /* Create the basis matrix. */ basis2sys = NULL ; basis = create_basis(main_lp,main_lptols,main_lpopts,&basis2sys) ; if (basis == NULL || basis2sys == NULL) { errmsg(152,rtnnme,"basisMtx") ; consys_free(basis) ; if (basis2sys != NULL) FREE(basis2sys) ; return (1) ; } /* Now that we have a basis matrix with columns in the proper order, matching the constraints, we can simply call dy_betaj to obtain columns of the basis inverse and call consys_dotrow(i,beta), i = 1, ..., m, and check that we have e. */ m = sys->concnt ; betaj = NULL ; errcnt = 0 ; for (k = 1 ; k <= m ; k++) { j = basis2sys[k] ; if (dy_betaj(main_lp,j,&betaj) == FALSE) { errmsg(952,rtnnme,sys->nme,"column",j,"variable", consys_nme(sys,'v',j,FALSE,NULL),j) ; errcnt++ ; continue ; } for (i = 1 ; i <= m ; i++) { aidotbetaj = consys_dotrow(basis,i,betaj) ; if (i == k) { expected = 1.0 ; } else { expected = 0.0 ; } if (fabs(aidotbetaj-expected) > main_lptols->zero) { errcnt++ ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: a<%d> dot beta<%d> = %g ; expected %g; ", i,j,aidotbetaj,expected) ; dyio_outfmt(dy_logchn,dy_gtxecho,"err %g, tol %g.", (aidotbetaj-expected),main_lptols->zero) ; } } } /* We're done. Do a bit of cleanup. */ if (betaj != 0) FREE(betaj) ; consys_free(basis) ; if (basis2sys != NULL) FREE(basis2sys) ; if (errcnt != 0) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%s: found %d errors testing Binv(B).\n", rtnnme,errcnt) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%s: pass Binv(B).\n",rtnnme) ; } return (errcnt) ; } int dytest_abarj (lpprob_struct *main_lp, lptols_struct *main_lptols, lpopts_struct *main_lpopts) /* This routine checks the accuracy of the tableau routine dy_abarj, where abar = inv(B)a, by testing that B abar = a. Parameters: main_lp: the lp problem structure main_lptols: the lp tolerance structure main_lpopts: the lp options structure Returns: 0 if B(inv(B)A) = A, error count otherwise. */ { int m,n,i,j,k ; consys_struct *sys ; consys_struct *basis ; int *basis2sys ; double *abarj,*aj ; double aidotabarj ; int errcnt ; char *rtnnme = "dytest_abarj" ; /* Do a little initialisation. Mention that we've started. */ sys = main_lp->consys ; m = sys->concnt ; n = sys->varcnt ; # ifndef DYLP_NDEBUG if (main_lpopts->print.tableau >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "%s: checking ftran'd columns abar using %s (%d x %d).\n", rtnnme,sys->nme,m,n) ; if (main_lpopts->print.tableau >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, " basis contains %d entries.\n",main_lp->basis->len) ; } } # endif /* Create the basis matrix. */ basis2sys = NULL ; basis = create_basis(main_lp,main_lptols,main_lpopts,&basis2sys) ; if (basis == NULL || basis2sys == NULL) { errmsg(152,rtnnme,"basisMtx") ; consys_free(basis) ; if (basis2sys != NULL) FREE(basis2sys) ; return (1) ; } /* Now that we have a basis matrix with columns in the proper order, matching the constraints, we can simply call dy_abarj to obtain ftran'd columns abar and call consys_dotrow(i,abar), i = 1, ..., m, and check that we have a. */ aj = NULL ; abarj = NULL ; errcnt = 0 ; for (j = 1 ; j <= n ; j++) { if (dy_abarj(main_lp,j,&abarj) == FALSE) { errmsg(953,rtnnme,sys->nme,"ftran'd","column", consys_nme(sys,'v',j,FALSE,NULL),j) ; errcnt++ ; continue ; } if (consys_getcol_ex(sys,j,&aj) == FALSE) { errmsg(122,rtnnme,sys->nme,"column",consys_nme(sys,'v',j,FALSE,NULL),j) ; errcnt++ ; continue ; } for (i = 1 ; i <= m ; i++) { aidotabarj = consys_dotrow(basis,i,abarj) ; if (fabs(aidotabarj-aj[i]) > main_lptols->zero) { errcnt++ ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: a<%d> dot abar<%d> = %g ; expected %g; ", i,j,aidotabarj,aj[i]) ; dyio_outfmt(dy_logchn,dy_gtxecho,"err %g, tol %g.", (aidotabarj-aj[i]),main_lptols->zero) ; } } } /* And to be really thorough, test the columns associated with logicals. */ memset(aj,0,((size_t) ((m+1)*sizeof(double)))) ; for (k = 1 ; k <= m ; k++) { if (dy_abarj(main_lp,-k,&abarj) == FALSE) { errmsg(953,rtnnme,sys->nme,"ftran'd","column", consys_nme(sys,'v',n+k,FALSE,NULL),k) ; errcnt++ ; continue ; } aj[k] = 1.0 ; for (i = 1 ; i <= m ; i++) { aidotabarj = consys_dotrow(basis,i,abarj) ; if (fabs(aidotabarj-aj[i]) > main_lptols->zero) { errcnt++ ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: a<%d> dot abar<%d> = %g ; expected %g; ", i,-k,aidotabarj,aj[i]) ; dyio_outfmt(dy_logchn,dy_gtxecho,"err %g, tol %g.", (aidotabarj-aj[i]),main_lptols->zero) ; } } aj[k] = 0.0 ; } /* We're done. Do a bit of cleanup. */ if (abarj != 0) FREE(abarj) ; if (aj != 0) FREE(aj) ; consys_free(basis) ; if (basis2sys != NULL) FREE(basis2sys) ; if (errcnt != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: found %d errors testing B(inv(B)A) = A.\n", rtnnme,errcnt) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%s: pass B(inv(B)A).\n",rtnnme) ; } return (errcnt) ; } int dytest_betai (lpprob_struct *main_lp, lptols_struct *main_lptols, lpopts_struct *main_lpopts) /* This routine checks the accuracy of the tableau routine dy_betai (row beta of the basis inverse) by testing that beta B = e. Parameters: main_lp: the lp problem structure main_lptols: the lp tolerance structure main_lpopts: the lp options structure Returns: 0 if inv(B)B = I, error count otherwise. */ { int m,i,j ; consys_struct *sys ; consys_struct *basis ; int *basis2sys ; double *betai ; double betaidotaj,expected ; int errcnt ; char *rtnnme = "dytest_betai" ; /* Do a little initialisation. Mention that we've started. */ sys = main_lp->consys ; # ifndef DYLP_NDEBUG if (main_lpopts->print.tableau >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "%s: checking rows of basis inverse using %s (%d x %d).\n", rtnnme,sys->nme,sys->concnt,sys->varcnt) ; if (main_lpopts->print.tableau >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, " basis contains %d entries.\n",main_lp->basis->len) ; } } # endif /* Create the basis matrix. */ basis2sys = NULL ; basis = create_basis(main_lp,main_lptols,main_lpopts,&basis2sys) ; if (basis == NULL || basis2sys == NULL) { errmsg(152,rtnnme,"basisMtx") ; consys_free(basis) ; if (basis2sys != NULL) FREE(basis2sys) ; return (1) ; } /* Now that we have a basis matrix with columns in the proper order, matching the constraints, we can simply call dy_betai to obtain rows of the basis inverse and call consys_dotcol(j,beta), j = 1, ..., m, and check that we have e. */ m = sys->concnt ; betai = NULL ; errcnt = 0 ; for (i = 1 ; i <= m ; i++) { if (dy_betai(main_lp,i,&betai) == FALSE) { errmsg(952,rtnnme,sys->nme,"row",i,"constraint", consys_nme(sys,'c',i,FALSE,NULL),i) ; errcnt++ ; continue ; } for (j = 1 ; j <= m ; j++) { betaidotaj = consys_dotcol(basis,j,betai) ; if (i == j) { expected = 1.0 ; } else { expected = 0.0 ; } if (fabs(betaidotaj-expected) > main_lptols->zero) { errcnt++ ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: beta<%d> dot a<%d> = %g ; expected %g; ", i,j,betaidotaj,expected) ; dyio_outfmt(dy_logchn,dy_gtxecho,"err %g, tol %g.", (betaidotaj-expected),main_lptols->zero) ; } } } /* We're done. Do a bit of cleanup. */ if (betai != 0) FREE(betai) ; consys_free(basis) ; if (basis2sys != NULL) FREE(basis2sys) ; if (errcnt != 0) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%s: found %d errors testing inv(B)B.\n", rtnnme,errcnt) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%s: pass inv(B)B.\n",rtnnme) ; } return (errcnt) ; } int dytest_abari (lpprob_struct *main_lp, lptols_struct *main_lptols, lpopts_struct *main_lpopts) /* This routine checks the accuracy of the tableau routine dy_abari, which calculates row i of inv(B)[ B N I ], where B is the basic columns, N the nonbasic columns, and I is the identity matrix produced by the coefficients of logical variables. This is an inconvenient calculation to check --- we can't premultiply the resulting row by the basis, as we do for all the other routines. So we do the next best thing: call dy_abarj and check that abar matches. It's expensive, but hey, this is a test routine. This does imply that dy_abarj should be tested first. Parameters: main_lp: the lp problem structure main_lptols: the lp tolerance structure main_lpopts: the lp options structure Returns: 0 if inv(B)B = I, error count otherwise. */ { int m,n,i,j ; consys_struct *sys ; double *abari,*abarj,*betai ; double abarij,expected ; int errcnt ; char *rtnnme = "dytest_abari" ; /* Do a little initialisation. Mention that we've started. */ sys = main_lp->consys ; m = sys->concnt ; n = sys->varcnt ; # ifndef DYLP_NDEBUG if (main_lpopts->print.tableau >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "%s: checking rows of inv(B)A using %s (%d x %d).\n", rtnnme,sys->nme,m,n) ; } # endif /* Open a pair of loops to do the testing. */ errcnt = 0 ; abari = NULL ; betai = NULL ; abarj = NULL ; for (i = 1 ; i <= m ; i++) { if (dy_abari(main_lp,i,&abari,&betai) == FALSE) { errmsg(953,rtnnme,sys->nme,"transformed","row", consys_nme(sys,'c',i,FALSE,NULL),i) ; errcnt++ ; continue ; } for (j = 1 ; j <= n ; j++) { if (dy_abarj(main_lp,j,&abarj) == FALSE) { errmsg(953,rtnnme,sys->nme,"ftran'd","column", consys_nme(sys,'v',j,FALSE,NULL),j) ; errcnt++ ; continue ; } expected = abarj[i] ; abarij = abari[j] ; if (fabs(abarij-expected) > main_lptols->zero) { errcnt++ ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: beta<%d> dot a<%d> = %g ; expected %g; ", i,j,abarij,expected) ; dyio_outfmt(dy_logchn,dy_gtxecho,"err %g, tol %g.", (abarij-expected),main_lptols->zero) ; } } /* Now test the columns for the logical variables. */ for (j = 1 ; j <= m ; j++) { if (dy_abarj(main_lp,-j,&abarj) == FALSE) { errmsg(953,rtnnme,sys->nme,"ftran'd","column", consys_nme(sys,'v',n+j,FALSE,NULL),j) ; errcnt++ ; continue ; } expected = abarj[i] ; abarij = betai[j] ; if (fabs(abarij-expected) > main_lptols->zero) { errcnt++ ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: beta<%d> dot a<%d> = %g ; expected %g; ", i,-j,abarij,expected) ; dyio_outfmt(dy_logchn,dy_gtxecho,"err %g, tol %g.", (abarij-expected),main_lptols->zero) ; } } } /* We're done. Do a bit of cleanup. */ if (abari != 0) FREE(abari) ; if (betai != 0) FREE(betai) ; if (abarj != 0) FREE(abarj) ; if (errcnt != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: found %d errors testing e(inv(B)A) against inv(B)a.\n", rtnnme,errcnt) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: pass e(inv(B)A) against inv(B)a.\n",rtnnme) ; } return (errcnt) ; } DyLP-1.10.4/DyLP/test/dytest_rays.c0000644000175200017520000003645311573762145015406 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2008 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains routines to test dylp's ray routines: dy_primalRays and dy_dualRays. */ #include "dylp.h" #include extern ioid dy_logchn ; extern bool dy_gtxecho ; int dytest_primalRays (int *p_numRays, lpprob_struct *main_lp, lptols_struct *main_lptols, lpopts_struct *main_lpopts) /* This routine checks the primal rays returned by dy_primalRays. For a ray r, the first test is that dot(c,r) < 0 (remember, dylp minimises). Then, for a constraint ax <= b, we should have dot(a,r) <= 0. For a constraint ax >= b, the test is dot(a,r) >= 0. It's up to the calling routine to determine if the number of rays is as expected. In particular, it's not an error if dy_primalRays returns fewer rays than requested. If dy_primalRays returns zero rays, this is treated as the degenerate case of `all rays pass' and the routine will return TRUE. Parameters: p_numRays: (i) the number of rays to request from dy_primalRays (o) the number of rays returned by dy_primalRays main_lp: the lp problem structure main_lptols: the lp tolerance structure main_lpopts: the lp options structure Returns: 0 if all rays returned tested as valid rays, error count otherwise. */ { int m,n,i,j,k ; consys_struct *sys ; double **rays ; int reqRays,rcvRays ; double *rayk ; double aidotrayk ; bool error ; int errcnt ; char *rtnnme = "dytest_primalRays" ; /* Do a little initialisation. Mention that we've started. */ sys = main_lp->consys ; n = sys->varcnt ; m = sys->concnt ; # ifndef DYLP_NDEBUG if (main_lpopts->print.rays >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "%s: checking primal rays using %s (%d x %d).\n", rtnnme,sys->nme,m,n) ; } # endif /* Ask for the requested number of rays. */ rays = NULL ; reqRays = *p_numRays ; rcvRays = reqRays ; *p_numRays = 0 ; if (dy_primalRays(main_lp,&rcvRays,&rays) == FALSE) { errmsg(955,rtnnme,sys->nme,"primal") ; if (rays != NULL) { for (k = 0 ; k < rcvRays ; k++) { if (rays[k] != NULL) FREE(rays[k]) ; } FREE(rays) ; } return (1) ; } *p_numRays = rcvRays ; # ifndef DYLP_NDEBUG if (main_lpopts->print.rays >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n requested %d rays, received %d.", reqRays,rcvRays) ; } # endif /* Now test each ray. Check first that we actually have a nonzero ray, then check dot(c,r) < 0, and finally that dot(a,r) <= 0 for ax <= b (dot(a,r) >= 0 for ax >= b). */ errcnt = 0 ; for (k = 0 ; k < rcvRays ; k++) { rayk = rays[k] ; if (rayk == NULL) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n ERROR: ray %d is NULL.",k) ; errcnt++ ; continue ; } aidotrayk = exvec_1norm(rayk,n) ; if (fabs(aidotrayk) <= 0.0) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n ERROR: ray %d is zero.",k) ; FREE(rayk) ; rays[k] = NULL ; continue ; } /* Check dot(c,r) < 0. */ aidotrayk = 0 ; if (main_lpopts->print.rays >= 5) { dyio_outchr(dy_logchn,dy_gtxecho,'\n') ; } for (j = 1 ; j <= n ; j++) { if (rayk[j] != 0.0) { aidotrayk += rayk[j]*sys->obj[j] ; if (main_lpopts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho," (%s (%d) %g*%g)", consys_nme(sys,'v',j,FALSE,NULL), j,rayk[j],sys->obj[j]) ; } } } if (aidotrayk >= 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: dot(c,ray[%d]) = %g; should be < 0.", k,aidotrayk) ; errcnt++ ; } else { if (main_lpopts->print.rays >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n dot(c,ray[%d]) = %g.", k,aidotrayk) ; } } /* Check dot(a,r) <= 0 or >= 0, as appropriate for the constraint. We need dot(a,r) = 0 for range constraints and equalities. */ for (i = 1 ; i <= m ; i++) { aidotrayk = consys_dotrow(sys,i,rayk) ; error = FALSE ; if (sys->ctyp[i] != contypLE) { if (aidotrayk < -main_lptols->zero) { error = TRUE ; } } if (sys->ctyp[i] != contypGE) { if (aidotrayk > main_lptols->zero) { error = TRUE ; } } if (error == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: a<%d> dot ray<%d> = %g ; should be %s 0.", i,k,aidotrayk,((sys->ctyp[i] == contypGE)?">=":"<=")) ; errcnt++ ; } } FREE(rayk) ; rays[k] = NULL ; } /* We're done. Clean up and go home. */ FREE(rays) ; if (errcnt != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: found %d errors in %d rays testing cr < 0, Ar <= 0.\n", rtnnme,errcnt,rcvRays) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: pass cr < 0, Ar <= 0.\n",rtnnme) ; } return (errcnt) ; } int dytest_dualRays (int *p_numRays, lpprob_struct *main_lp, lptols_struct *main_lptols, lpopts_struct *main_lpopts) /* This routine checks the dual rays returned by dy_dualRays. For a ray r, we do two tests: * for the dual objective b, dot(r,b) < 0 * for a dual constraint ya >= c, dot(r,a) >= 0. Note that the math doesn't necessarily hold unless the constraint system and dual ray contain *all* components. The ray must have components for the usual row duals (cinv(B)) and for the duals associated with implicit bound constraints. Which implies we need to fabricate coefficients as needed to make implicit bound constraints explicit in the constraint system. It's up to the calling routine to determine if the number of rays is as expected. In particular, it's not an error if dy_dualRays returns fewer rays than requested. If dy_dualRays returns zero rays, this is treated as the degenerate case of `all rays pass' and the routine will return TRUE. Parameters: p_numRays: (i) the number of rays to request from dy_dualRays (o) the number of rays returned by dy_dualRays main_lp: the lp problem structure main_lptols: the lp tolerance structure main_lpopts: the lp options structure Returns: 0 if all rays returned tested as valid rays, error count otherwise. */ { int m,n,i,j,k,l ; consys_struct *sys ; double **rays ; int reqRays,rcvRays ; double *rayk ; double ajdotrayk ; bool fullRay ; int bposj ; flags *status ; flags statj ; double *x ; double xj ; int errcnt ; char *rtnnme = "dytest_dualRays" ; /* Do a little initialisation. Mention that we've started. */ sys = main_lp->consys ; n = sys->varcnt ; m = sys->concnt ; # ifndef DYLP_NDEBUG if (main_lpopts->print.rays >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "%s: checking dual rays using %s (%d x %d).", rtnnme,sys->nme,m,n) ; } # endif /* Ask for the requested number of rays. Go for the true dual sign convention, lest we go completely mad. */ rays = NULL ; reqRays = *p_numRays ; rcvRays = reqRays ; *p_numRays = 0 ; fullRay = TRUE ; if (dy_dualRays(main_lp,fullRay,&rcvRays,&rays,TRUE) == FALSE) { errmsg(955,rtnnme,sys->nme,"dual") ; if (rays != NULL) { for (k = 0 ; k < rcvRays ; k++) { if (rays[k] != NULL) FREE(rays[k]) ; } FREE(rays) ; } return (1) ; } *p_numRays = rcvRays ; # ifndef DYLP_NDEBUG if (main_lpopts->print.rays >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n requested %d rays, received %d.", reqRays,rcvRays) ; } # endif /* Now test each ray. Check first that we actually have a nonzero ray, then check dot(r,b) < 0, and then dot(r,a) >= 0 for all columns j. */ errcnt = 0 ; if (rcvRays > 0) { for (k = 0 ; k < rcvRays ; k++) { rayk = rays[k] ; if (rayk == NULL) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n ERROR: ray %d is NULL.",k) ; errcnt++ ; continue ; } ajdotrayk = exvec_1norm(rayk,m) ; if (fabs(ajdotrayk) <= 0.0) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n ERROR: ray %d is zero.",k) ; FREE(rayk) ; rays[k] = NULL ; continue ; } # ifndef DYLP_NDEBUG if (main_lpopts->print.rays >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n ray<%d> non-zeros:",k) ; j = 0 ; for (i = 1 ; i <= m ; i++) { if (rayk[i] != 0) { if (j == 0) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t") ; } dyio_outfmt(dy_logchn,dy_gtxecho," (%s (%d) %g)", consys_nme(sys,'c',i,FALSE,NULL),i,rayk[i]) ; j = (j+1)%3 ; } } if (fullRay == TRUE) { i = j ; dyio_outfmt(dy_logchn,dy_gtxecho," *") ; for (j = 1 ; j <= n ; j++) { if (rayk[m+j] != 0) { if (i == 0) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t") ; } dyio_outfmt(dy_logchn,dy_gtxecho," (%s (%d) %g)", consys_nme(sys,'v',j,FALSE,NULL),j,rayk[m+j]) ; i = (i+1)%3 ; } } } } # endif /* Check dot(r,b) < 0. For the first m elements, it's just a straightforward dot product of ray elements with the rhs values. */ ajdotrayk = 0 ; if (main_lpopts->print.rays >= 5) { dyio_outchr(dy_logchn,dy_gtxecho,'\n') ; } for (i = 1 ; i <= m ; i++) { if (rayk[i] != 0.0) { ajdotrayk += rayk[i]*sys->rhs[i] ; if (main_lpopts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho," (%s (%d) %g*%g)", consys_nme(sys,'c',i,FALSE,NULL), i,rayk[i],sys->rhs[i]) ; } } } /* For the remaining components corresponding to architecturals, we're synthesizing bound constraints on the fly. If the ray component corresponds to a variable x that's NBUB or NBFX, use u as the rhs value; NBLB, -l. Check that ray components are zero for variables that are not NBLB, NBUB, or NBFX. Serious confusion if it's otherwise, eh? */ status = main_lp->status ; x = main_lp->x ; if (fullRay == TRUE) { if (main_lpopts->print.rays >= 5) dyio_outchr(dy_logchn,dy_gtxecho,'\n') ; l = 0 ; for (j = 1 ; j <= n ; j++) { statj = status[j] ; if (((int) statj) > 0) { if (main_lpopts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho," (%s (%d) %s", consys_nme(sys,'v',j,FALSE,NULL),j, dy_prtvstat(statj)) ; } if (flgon(statj,vstatNBUB|vstatNBFX)) { ajdotrayk += rayk[m+j]*sys->vub[j] ; if (main_lpopts->print.rays >= 5 && (sys->vub[j] != 0.0 || rayk[m+j] != 0)) { dyio_outfmt(dy_logchn,dy_gtxecho," %g*%g)", rayk[m+j],sys->vub[j]) ; } } else if (flgon(statj,vstatNBLB)) { ajdotrayk -= rayk[m+j]*sys->vlb[j] ; if (main_lpopts->print.rays >= 5 && (sys->vlb[j] != 0.0 || rayk[m+j] != 0)) { dyio_outfmt(dy_logchn,dy_gtxecho," %g*(-%g))", rayk[m+j],sys->vlb[j]) ; } } else if (rayk[m+j] != 0.0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: %s (%d) %s not tight at a bound!.", consys_nme(sys,'v',j,FALSE,NULL),j, dy_prtvstat(statj)) ; errcnt++ ; } } /* Let's not forget that there's a nonbasic dual that's driving this ray, which will correspond to a basic primal variable. Keep count, because there should be at most one nonzero coefficient here and it better not be within bounds. Use the closest bound to the variable's value. */ else if (rayk[m+j] != 0) { l++ ; bposj = -((int) statj) ; xj = x[bposj] ; if (main_lpopts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho," (%s (%d) %s", consys_nme(sys,'v',j,FALSE,NULL),j, dy_prtvstat(vstatB)) ; } if (xj > sys->vub[j]) { ajdotrayk += rayk[m+j]*sys->vub[j] ; if (main_lpopts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho," %g*%g)", rayk[m+j],sys->vub[j]) ; } } else if (xj < sys->vlb[j]) { ajdotrayk -= rayk[m+j]*sys->vlb[j] ; if (main_lpopts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho," %g*(-%g))", rayk[m+j],sys->vlb[j]) ; } } else { dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: %s (%d) %s = %g, lb = %g, ub = %g,", consys_nme(sys,'v',j,FALSE,NULL),j, dy_prtvstat(vstatB),xj,sys->vlb[j],sys->vub[j]) ; dyio_outfmt(dy_logchn,dy_gtxecho, " should not be in bounds to spawn dual ray!") ; errcnt++ ; } } } /* There should be at most one coefficient for nonbasic duals. `At most', because the basic variable for the constraint that spawned this ray might be a logical. */ if (l > 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: ray[%d] has %d nonzeroes matching",k,l) ; dyio_outfmt(dy_logchn,dy_gtxecho, " nonbasic duals; should be at most 1.") ; errcnt++ ; } } /* Ok, we've added the contribution of the row and column duals. What's the result? */ if (ajdotrayk >= 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: dot(ray[%d],b) = %g; should be < 0.", k,ajdotrayk) ; errcnt++ ; } else { if (main_lpopts->print.rays >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n dot(ray[%d],b) = %g.", k,ajdotrayk) ; } } /* Now test dot(r,a) > 0. Again, it's straightforward for the explicit component. Then, look at the entry in the full ray which matches the column we're processing; if it's nonzero, we need to synthesize bound constraints. An upper bound constraint should look like x <= u, a lower bound constraint -x <= -l. As with the objective, we need to do a little work to figure out which bound constraint to use. There's no need to redo the ray coefficient consistency tests. */ for (j = 1 ; j <= n ; j++) { ajdotrayk = consys_dotcol(sys,j,rayk) ; if (main_lpopts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t dotcol = %g",ajdotrayk) ; } if (fullRay == TRUE) { statj = status[j] ; if (((int) statj) > 0) { if (main_lpopts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho," (%s (%d) %s", consys_nme(sys,'v',j,FALSE,NULL),j, dy_prtvstat(statj)) ; } if (flgon(statj,vstatNBUB|vstatNBFX)) { ajdotrayk += rayk[m+j] ; if (main_lpopts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho," %g*%g)", rayk[m+j],1.0) ; } } else if (flgon(statj,vstatNBLB)) { ajdotrayk -= rayk[m+j] ; if (main_lpopts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho," %g*(%g))", rayk[m+j],-1.0) ; } } } else { bposj = -((int) statj) ; xj = x[bposj] ; if (main_lpopts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho," (%s (%d) %s", consys_nme(sys,'v',j,FALSE,NULL),j, dy_prtvstat(vstatB)) ; } if (xj > sys->vub[j]) { ajdotrayk += rayk[m+j] ; if (main_lpopts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho," %g*%g)", rayk[m+j],1.0) ; } } else if (xj < sys->vlb[j]) { ajdotrayk -= rayk[m+j] ; if (main_lpopts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho," %g*(%g))", rayk[m+j],-1.0) ; } } } } if (ajdotrayk < -main_lptols->zero) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: dot(ray<%d>, a<%s (%d)>) = %g ; should be >= 0.", k,consys_nme(sys,'v',j,FALSE,NULL),j,ajdotrayk) ; errcnt++ ; } else { if (main_lpopts->print.rays >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n dot(ray<%d>, a<%s (%d)>) = %g.", k,consys_nme(sys,'v',j,FALSE,NULL),j,ajdotrayk) ; } } } FREE(rayk) ; rays[k] = NULL ; } } /* We're done. Clean up and go home. */ FREE(rays) ; if (errcnt != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: found %d errors in %d rays testing rA >= 0.\n", rtnnme,errcnt,rcvRays) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%s: pass rb < 0, rA >= 0.\n",rtnnme) ; } return (errcnt) ; } DyLP-1.10.4/DyLP/test/osiUnitTest.cpp0000644000175200017520000000703111665560603015651 0ustar coincoin/* Copyright (C) 2000, International Business Machines Corporation and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ #include "CoinPragma.hpp" #include #include "OsiUnitTests.hpp" #include "OsiDylpSolverInterface.hpp" using namespace OsiUnitTest ; //---------------------------------------------------------------- // to see parameter list, call unitTest -usage //---------------------------------------------------------------- int main (int argc, const char *argv[]) { /* Start off with various bits of initialisation that don't really belong anywhere else. First off, synchronise C++ stream i/o with C stdio. This makes debugging output a bit more comprehensible. It still suffers from interleave of cout (stdout) and cerr (stderr), but -nobuf deals with that. */ std::ios::sync_with_stdio() ; /* Suppress an popup window that Windows shows in response to a crash. See note at head of file. */ WindowsErrorPopupBlocker(); testingMessage("\n Testing OsiDylpSolverInterface\n") ; /* Process command line parameters. */ std::map parms ; if (processParameters(argc,argv,parms) == false) return 1; std::string mpsDir = parms["-mpsDir"] ; std::string netlibDir = parms["-netlibDir"] ; /* Test Osi{Row,Col}Cut routines. */ { OsiDylpSolverInterface dylpSi ; testingMessage("Testing OsiRowCut ...\n") ; OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&dylpSi,mpsDir), {},dylpSi,"rowcut unittest") ; } { OsiDylpSolverInterface dylpSi ; testingMessage("Testing OsiColCut ...\n") ; OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&dylpSi,mpsDir), {},dylpSi,"colcut unittest") ; } { OsiDylpSolverInterface dylpSi ; testingMessage("Testing OsiRowCutDebugger ...\n") ; OSIUNITTEST_CATCH_ERROR(OsiRowCutDebuggerUnitTest(&dylpSi,mpsDir), {},dylpSi,"rowcut debugger unittest") ; } /* Run the OSI standard tests. */ { OsiDylpSolverInterface dylpSi ; testingMessage("Running OSI common tests ...\n") ; OSIUNITTEST_CATCH_ERROR( OsiSolverInterfaceCommonUnitTest(&dylpSi,mpsDir,netlibDir), {},dylpSi,"common unittest") ; } /* Run the OsiDylp class test, which exercises a few things specific to OsiDylp. */ testingMessage("Running Dylp-specific tests ...\n") ; OSIUNITTEST_CATCH_ERROR(OsiDylpSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "dylp", "OsiDylp unittest"); /* Check to see if we're asked to run the Netlib problems. The interface here is a historical artifact from the period when all OsiXXX lived within the Osi project. */ if (parms.find("-testOsiSolverInterface") != parms.end()) { std::vector vecSi(1,new OsiDylpSolverInterface) ; testingMessage("Testing OsiDylpSolverInterface on Netlib problems.\n") ; OSIUNITTEST_CATCH_ERROR(OsiSolverInterfaceMpsUnitTest(vecSi,netlibDir), {},"dylp","netlib unittest") ; delete vecSi[0] ; } else { testingMessage("Use -testOsiSolverInterface to run netlib problems.\n") ; } /* We're done. Report on the results. */ std::cout.flush() ; outcomes.print() ; int nerrors ; int nerrors_expected ; outcomes.getCountBySeverity(TestOutcome::ERROR,nerrors,nerrors_expected) ; if (nerrors > nerrors_expected) std::cerr << "Tests completed with " << nerrors - nerrors_expected << " unexpected errors." << std::endl ; else std::cerr << "All tests completed successfully." << std::endl ; return (nerrors-nerrors_expected) ; } DyLP-1.10.4/DyLP/test/dytest_solutions.c0000644000175200017520000007104311573762145016461 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2008 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains routines to test dylp's solution routines: dy_colPrimals, dy_rowPrimals, dy_colDuals, dy_rowDuals, and dy_allDuals. */ #define DYLP_INTERNAL #include "dylp.h" extern ioid dy_logchn ; extern bool dy_gtxecho ; int dytest_rowDuals (lpprob_struct *main_lp, lptols_struct *main_lptols, lpopts_struct *main_lpopts) /* This routine checks the dual variables returned by dy_rowDuals. It checks that y = c(inv(B)). Columns of the basis inverse are obtained from the routine dy_betaj. Parameters: main_lp: the lp problem structure main_lptols: the lp tolerance structure main_lpopts: the lp options structure Returns: 0 if y = cinv(B), error count otherwise. */ { int i,j,k,m,n ; consys_struct *sys ; flags *status ; double *y ; double *cB ; int *basis2sys ; basisel_struct *basisVec ; int basisLen ; double *betai ; double cBdotbetai ; int errcnt ; char *rtnnme = "dytest_rowDuals" ; /* Do a little initialisation. Mention that we've started. */ sys = main_lp->consys ; m = sys->concnt ; n = sys->varcnt ; # ifndef DYLP_NDEBUG if (main_lpopts->print.soln >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: checking y = cinv(B) using %s (%d x %d).", rtnnme,sys->nme,m,n) ; if (main_lpopts->print.soln >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, " basis contains %d entries.\n",main_lp->basis->len) ; } } # endif /* Acquire the row duals and the status vector. For this check, we can use the min primal sign convention. */ y = NULL ; dy_rowDuals(main_lp,&y,FALSE) ; status = main_lp->status ; /* Make a vector c of objective coefficients in basis order. This is considerably easier than creating a basis matrix (as is done for tableau testing). By construction, the basic variables for inactive constraints are the logicals, which have an objective coefficient of zero, and this is how cB and basis2sys are initialised. All that need be done for c is to change the entries that are associated with architecturals. For the basis, we need to set all entries (logicals can be basic out of natural position). Recall that basic logicals are represented by negative indices. */ cB = (double *) MALLOC((m+1)*sizeof(double)) ; basis2sys = (int *) MALLOC((m+1)*sizeof(int)) ; for (i = 1 ; i <= m ; i++) { cB[i] = 0.0 ; basis2sys[i] = -i ; } basisLen = main_lp->basis->len ; basisVec = main_lp->basis->el ; for (k = 1 ; k <= basisLen ; k++) { i = basisVec[k].cndx ; j = basisVec[k].vndx ; if (j > 0) { cB[i] = sys->obj[j] ; basis2sys[i] = j ; } else { basis2sys[i] = j ; } } # ifndef DYLP_NDEBUG if (main_lpopts->print.soln >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tc =") ; k = 0 ; for (i = 1 ; i <= m ; i++) { if (cB[i] != 0) { if ((++k)%4 == 0) { k = 0 ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t ") ; } j = basis2sys[i] ; dyio_outfmt(dy_logchn,dy_gtxecho," (%d %g %s %d)", i,cB[i],consys_nme(sys,'v',j,FALSE,NULL),j) ; } } } # endif /* Now step through the rows (equivalently, walk the basis) and see if y = cbeta, where beta is the column of inv(B) such that x is basic in pos'n i. */ errcnt = 0 ; betai = NULL ; for (i = 1 ; i <= m ; i++) { j = basis2sys[i] ; if (dy_betaj(main_lp,j,&betai) == FALSE) { errcnt++ ; if (j < 0) { j = n-j ; } errmsg(952,rtnnme,sys->nme,"column",i,"variable", consys_nme(sys,'v',j,FALSE,NULL),j-n) ; continue ; } cBdotbetai = 0 ; for (k = 1 ; k <= m ; k++) { /* dyio_outfmt(dy_logchn,dy_gtxecho, "\n %s (%d) %g * %g", consys_nme(sys,'c',k,FALSE,NULL),k,cB[k],betai[k]) ; */ cBdotbetai += cB[k]*betai[k] ; } if (fabs(cBdotbetai-y[i]) > main_lptols->cost) { errcnt++ ; if (j < 0) { j = n-j ; } dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: pos'n %d %s (%d) c dot beta = %g; ", i,consys_nme(sys,'v',j,FALSE,NULL),j-n,cBdotbetai) ; dyio_outfmt(dy_logchn,dy_gtxecho,"expected %g; err %g, tol %g.", y[i],(cBdotbetai-y[i]),main_lptols->zero) ; } } /* Free up space and report the result. */ if (cB != NULL) FREE(cB) ; if (basis2sys != NULL) FREE(basis2sys) ; if (betai != NULL) FREE(betai) ; if (y != NULL) FREE(y) ; if (errcnt != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: found %d errors testing y = cinv(B).\n", rtnnme,errcnt) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%s: pass y = cinv(B).\n",rtnnme) ; } return (errcnt) ; } int dytest_colDuals (lpprob_struct *main_lp, lptols_struct *main_lptols, lpopts_struct *main_lpopts) /* This routine checks the dual variables returned by dy_colDuals (more usually called the reduced costs of the architectural variables). It checks that cbar = c - yN, where y is the vector of row duals returned by dy_rowDuals and N is the set of nonbasic architectural columns of A (or the matching index set, as appropriate). It also checks that the reduced cost is in agreement with the status. Parameters: main_lp: the lp problem structure main_lptols: the lp tolerance structure main_lpopts: the lp options structure Returns: 0 if cbar = c - yN, error count otherwise. */ { int j,m,n ; flags statj ; consys_struct *sys ; double *obj ; double *y ; flags *status ; double *cbarN ; double cbarj ; int errcnt ; bool staterr ; char *errstring ; char *rtnnme = "dytest_colDuals" ; /* Do a little initialisation. Mention that we've started. */ sys = main_lp->consys ; m = sys->concnt ; n = sys->varcnt ; # ifndef DYLP_NDEBUG if (main_lpopts->print.soln >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: checking cbar = c - yN using %s (%d x %d).", rtnnme,sys->nme,m,n) ; } # endif /* Acquire the row duals, column duals, status vector, and objective. We want both the (row) duals and reduced costs (column duals) to come through with sign unchanged, appropriate for a minimisation primal. */ y = NULL ; dy_rowDuals(main_lp,&y,FALSE) ; cbarN = NULL ; dy_colDuals(main_lp,&cbarN,FALSE) ; status = NULL ; dy_colStatus(main_lp,&status) ; obj = sys->obj ; /* Now step through the columns checking that cbar = c - dot(y,a). Also check to see that the sign is correct for the status of the variable in a minimisation problem. For status values not listed (vstatSB and any of the basic status codes), there's no `correct' sign. */ errcnt = 0 ; for (j = 1 ; j <= n ; j++) { cbarj = obj[j] - consys_dotcol(sys,j,y) ; statj = status[j] ; if (fabs(cbarj-cbarN[j]) > main_lptols->cost) { errcnt++ ; dyio_outfmt(dy_logchn,dy_gtxecho, "\nERROR: col %s (%d) %s cbar<%d> = %g; expected %g;", consys_nme(sys,'v',j,FALSE,NULL),j,dy_prtvstat(statj), j,cbarj,cbarN[j]) ; dyio_outfmt(dy_logchn,dy_gtxecho," error %g, tol %g.", fabs(cbarj),main_lptols->cost) ; } staterr = FALSE ; switch (statj) { case vstatNBLB: { if (cbarj < -main_lptols->zero) { staterr = TRUE ; errstring = "positive" ; } break ; } case vstatNBUB: { if (cbarj > main_lptols->zero) { staterr = TRUE ; errstring = "negative" ; } break ; } case vstatNBFR: { if (fabs(cbarj) > main_lptols->zero) { staterr = TRUE ; errstring = "zero" ; } break ; } default: { break ; } } if (staterr == TRUE) { errcnt++ ; dyio_outfmt(dy_logchn,dy_gtxecho, "\nERROR: col %s (%d) %s cbar<%d> = %g; should be %s.", consys_nme(sys,'v',j,FALSE,NULL),j,dy_prtvstat(statj), j,cbarj,errstring) ; } } /* Free up space and report the result. */ if (y != NULL) FREE(y) ; if (cbarN != NULL) FREE(cbarN) ; if (status != NULL) FREE(status) ; if (errcnt != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: found %d errors testing cbar = c - yN.\n", rtnnme,errcnt) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: pass cbar = c - yN.\n",rtnnme) ; } return (errcnt) ; } int dytest_allDuals (lpprob_struct *main_lp, lptols_struct *main_lptols, lpopts_struct *main_lpopts) /* This routine uses the dual variables returned by dy_rowDuals and dy_colDuals and checks that yA >= (-c) (row duals only) and y'A' = (-c), where y' is both row and column duals and A' is A, expanded as needed with coefficients to add explicit bound constraints for nonbasic architecturals. As with so many things involving faking dual simplex on the primal constraint system with implicit bounds, we have to be a bit careful when working with the duals corresponding to nonbasic primal variables. Consider a primal variable x NBUB. The reduced cost cbar will be negative at optimality in dylp's min primal world. This is not correct for the sign convention of the true dual problem, where all duals are positive, so it's negated when we ask for the true dual sign convention. But then only a little thought reveals that we're considering yA + y = (-c), and if y >= 0 it's clear that yA <= (-c). So we have to invert the sense of that test when processing a column with an NBUB primal. Since the sign of the reduced cost for an NBFX variable can go either way, no test is possible using only the row duals. Parameters: main_lp: the lp problem structure main_lptols: the lp tolerance structure main_lpopts: the lp options structure Returns: 0 if yA = c, error count otherwise. */ { int j,m,n ; consys_struct *sys ; double *obj ; double *y,*cbar ; double ydotaj,cj,cbarj ; flags *status ; flags statj ; int errcnt ; char *rtnnme = "dytest_allDuals" ; /* Do a little initialisation. Mention that we've started. */ sys = main_lp->consys ; m = sys->concnt ; n = sys->varcnt ; obj = sys->obj ; # ifndef DYLP_NDEBUG if (main_lpopts->print.soln >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: checking yA = c using %s (%d x %d).", rtnnme,sys->nme,m,n) ; } # endif /* Acquire the row and column duals and column status. Go with the sign convention that matches the true dual problem. */ y = NULL ; dy_rowDuals(main_lp,&y,TRUE) ; cbar = NULL ; dy_colDuals(main_lp,&cbar,TRUE) ; status = NULL ; dy_colStatus(main_lp,&status) ; /* Open a loop to walk the columns. First check that yA >= (-c) for a column with an NBLB primal variable, yA <= (-c) for a column with an NBUB primal variable. For an NBFX variable, the dual could go either way, so we can't check. */ errcnt = 0 ; for (j = 1 ; j <= n ; j++) { statj = status[j] ; cj = -obj[j] ; ydotaj = consys_dotcol(sys,j,y) ; if ((flgon(statj,vstatNBLB) && ydotaj-cj < -main_lptols->cost) || (flgon(statj,vstatNBUB) && ydotaj-cj > main_lptols->cost)) { errcnt++ ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: %s (%d) y dot a = %g; ", consys_nme(sys,'v',j,FALSE,NULL),j,ydotaj) ; dyio_outfmt(dy_logchn,dy_gtxecho,"expected %s %g; err %g, tol %g.", (flgon(statj,vstatNBUB)?"<=":">="), cj,ydotaj-cj,main_lptols->cost) ; } /* Now add any contribution due to an architectural at bound. After this we should have equality. For an upper bound, we have x <= u. For a lower bound, it's -x <= -l. For a fixed variable, it's an equality x = u, so lump NBFX with NBUB. */ if (flgon(statj,vstatNONBASIC)) { cbarj = cbar[j] ; switch (statj) { case vstatNBLB: { ydotaj -= cbarj ; break ; } case vstatNBUB: case vstatNBFX: { ydotaj += cbarj ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; errcnt += 10000 ; ydotaj = quiet_nan(42.0L) ; break ; } } } if (fabs(ydotaj-cj) > main_lptols->cost) { errcnt++ ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: %s (%d) y dot a = %g; ", consys_nme(sys,'v',j,FALSE,NULL),j,ydotaj) ; dyio_outfmt(dy_logchn,dy_gtxecho,"expected %g; err %g, tol %g.", cj,fabs(ydotaj-cj),main_lptols->cost) ; } } /* Free up space and report the result. */ if (y != NULL) FREE(y) ; if (cbar != NULL) FREE(cbar) ; if (status != NULL) FREE(status) ; if (errcnt != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: found %d errors testing yA = c.\n", rtnnme,errcnt) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%s: pass yA = c.\n",rtnnme) ; } return (errcnt) ; } int dytest_colPrimals (lpprob_struct *main_lp, lptols_struct *main_lptols, lpopts_struct *main_lpopts) /* This routine checks the values of the primal architectural variables returned by dy_colPrimals. For basic variables x, the routine checks x = inv(B)b - inv(B)Nx To do this, the routine accumulates the values of the basic variables during the column scan. When the current column is basic in pos'n i, the routine calculates dot(beta,b) and adds it to the total. When the current column is nonbasic, the routine calculates abarx and subtracts it from the total. Just to make things really annoying, we have to account for nonbasic bounded slacks due to range constraints tight at their lower bound (which makes the slack nonbasic at its upper bound). For a nonbasic variable, the routine checks the value of x against the bound specified by the status of x. Parameters: main_lp: the lp problem structure main_lptols: the lp tolerance structure main_lpopts: the lp options structure Returns: 0 if the values check out, error count otherwise. */ { int i,i_bpos,j,k,m,n ; flags statj,stati ; double xj,lbj,ubj,betaidotb ; consys_struct *sys ; flags *status,*logstatus ; double *rhs,*rhslow,*vlb,*vub,*betai,*xB,*abarj ; contyp_enum *ctyp ; basisel_struct *basis ; double *x ; int berrs,nberrs ; bool staterr ; char *rtnnme = "dytest_colPrimals" ; /* Do a little initialisation. Mention that we've started. */ sys = main_lp->consys ; m = sys->concnt ; n = sys->varcnt ; # ifndef DYLP_NDEBUG if (main_lpopts->print.soln >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: checking primal architectural variables using %s (%d x %d).", rtnnme,sys->nme,m,n) ; } # endif /* Acquire the variable bound and status vectors, the constraint type, rhs, and rhslow vectors, the basis vector, and the values of the primal architectural variables. Allocate a vector to accumulate x */ x = NULL ; dy_colPrimals(main_lp,&x) ; basis = main_lp->basis->el ; status = main_lp->status ; ctyp = sys->ctyp ; rhs = sys->rhs ; rhslow = sys->rhslow ; vlb = sys->vlb ; vub = sys->vub ; xB = (double *) CALLOC((m+1),sizeof(double)) ; /* Now step through the columns checking the values in x. For a variable basic in pos'n i, add dot(beta,b) to the running total for the basic variable. For a nonbasic variable, confirm that the value, bound, and status agree. Then subtract abarx from x if x is at a nonzero bound. The only nonbasic status code not explicitly listed is SB (superbasic). This really should never appear. The only legitimate reason is that dylp patched the basis in primal phase II and then discovered the problem to be unbounded before the SB variable could be pivoted back into the basis. This is sufficiently exotic to deserve a message. */ berrs = 0 ; nberrs = 0 ; betai = NULL ; abarj = NULL ; for (j = 1 ; j <= n ; j++) { statj = status[j] ; xj = x[j] ; if (((int) statj) < 0) { k = -((int) statj) ; i_bpos = basis[k].cndx ; if (dy_betai(main_lp,i_bpos,&betai) == FALSE) { berrs++ ; errmsg(952,rtnnme,sys->nme,"row",i_bpos,"variable", consys_nme(sys,'v',j,FALSE,NULL),j) ; continue ; } betaidotb = 0 ; for (i = 1 ; i <= m ; i++) { betaidotb += betai[i]*rhs[i] ; } xB[i_bpos] += betaidotb ; } else { staterr = FALSE ; lbj = vlb[j] ; ubj = vub[j] ; statj = getflg(statj,vstatSTATUS) ; switch (statj) { case vstatNBLB: { if (fabs(xj-lbj) > main_lptols->zero) { staterr = TRUE ; betaidotb = lbj ; } break ; } case vstatNBUB: { if (fabs(xj-ubj) > main_lptols->zero) { staterr = TRUE ; betaidotb = ubj ; } break ; } case vstatNBFX: { if (fabs(xj-lbj) > main_lptols->zero) { staterr = TRUE ; betaidotb = lbj ; } break ; } case vstatNBFR: { if (fabs(xj) > main_lptols->zero) { staterr = TRUE ; betaidotb = 0.0 ; } break ; } default: { staterr = TRUE ; betaidotb = quiet_nan(42.0L) ; break ; } } if (staterr == TRUE) { nberrs++ ; dyio_outfmt(dy_logchn,dy_gtxecho, "\nERROR: %s col %s (%d) = %g; expected %g;", dy_prtvstat(statj),consys_nme(sys,'v',j,FALSE,NULL),j, xj,betaidotb) ; dyio_outfmt(dy_logchn,dy_gtxecho," error %g, tol %g.", fabs(xj-betaidotb),main_lptols->zero) ; continue ; } if (xj == 0.0) continue ; if (dy_abarj(main_lp,j,&abarj) == FALSE) { nberrs++ ; errmsg(953,rtnnme,sys->nme,"ftran'd","column", consys_nme(sys,'v',j,FALSE,NULL),j) ; continue ; } for (k = 1 ; k <= m ; k++) { xB[k] -= abarj[k]*xj ; } } } /* But wait! We're not quite done. We need to account for bounded slacks associated with range constraints. If the constraint is tight at its lower bound, the slack is nonbasic at its upper bound. */ logstatus = NULL ; dy_logStatus(main_lp,&logstatus) ; for (i = 1 ; i <= m ; i++) { stati = getflg(logstatus[i],vstatSTATUS) ; if (ctyp[i] == contypRNG && stati == vstatNBUB) { xj = rhs[i]-rhslow[i] ; if (dy_abarj(main_lp,-i,&abarj) == FALSE) { nberrs++ ; errmsg(953,rtnnme,sys->nme,"ftran'd","column", consys_nme(sys,'v',n+i,FALSE,NULL),i) ; continue ; } for (k = 1 ; k <= m ; k++) { xB[k] -= abarj[k]*xj ; } } } /* Scan the variables one more time and check the values of the basic variables. */ for (j = 1 ; j <= n ; j++) { statj = status[j] ; xj = x[j] ; if (((int) statj) < 0) { k = -((int) statj) ; i_bpos = basis[k].cndx ; if (fabs(xj-xB[i_bpos]) > main_lptols->zero) { berrs++ ; dyio_outfmt(dy_logchn,dy_gtxecho, "\nERROR: basis pos'n %d %s (%d) = %g; expected %g;", i_bpos,consys_nme(sys,'v',j,FALSE,NULL),j,xj,xB[i_bpos]) ; dyio_outfmt(dy_logchn,dy_gtxecho," error %g, tol %g.", fabs(xj-xB[i_bpos]),main_lptols->zero) ; } } } /* Free up space and report the result. */ if (logstatus != NULL) FREE(logstatus) ; if (abarj != NULL) FREE(abarj) ; if (xB != NULL) FREE(xB) ; if (betai != NULL) FREE(betai) ; if (x != NULL) FREE(x) ; if ((berrs+nberrs) != 0) { if (berrs != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: found %d errors testing x = inv(B)b.\n", rtnnme,berrs) ; } if (nberrs != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: found %d errors testing x against bounds & status.\n", rtnnme,nberrs) ; } } else { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: pass test of primal architectural variable values.\n", rtnnme) ; } return (berrs+nberrs) ; } int dytest_rowPrimals (lpprob_struct *main_lp, lptols_struct *main_lptols, lpopts_struct *main_lpopts) /* This routine checks the ind and x vectors returned by dy_rowPrimals. It first cross-checks the basis, status and indB arrays, bailing out if the cross-checks fail. Next it checks the values of the basic variables, architectural and logical. For basic variables x, the routine checks x = inv(B)b - inv(B)Nx To do this, it first walks the rows of the constraint system and initialises x with dot(beta,b). Then it walks the columns and accumulates the contributions abarx from nonzero nonbasic variables. Finally, it walks the rows again and subtracts the contributions from nonbasic bounded logicals (due to range constraints tight at the lower bound). Parameters: main_lp: the lp problem structure main_lptols: the lp tolerance structure main_lpopts: the lp options structure Returns: 0 if the basic variables validate, error count otherwise. */ { int i,j,k,m,n,i_basis ; flags statj,stati ; double xj,betaidotb,tol ; consys_struct *sys ; flags *status,*logstatus ; double *rhs,*rhslow,*vlb,*vub,*betai,*xBaccum,*abarj ; contyp_enum *ctyp ; basisel_struct *basis ; int basisLen ; double *xB ; int *indB ; int berrs,nberrs,inderrs ; char *rtnnme = "dytest_rowPrimals" ; /* Do a little initialisation. Mention that we've started. */ sys = main_lp->consys ; m = sys->concnt ; n = sys->varcnt ; # ifndef DYLP_NDEBUG if (main_lpopts->print.soln >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: checking primal basic variables using %s (%d x %d).", rtnnme,sys->nme,m,n) ; } # endif /* Acquire the variable bound and status vectors, the constraint type, rhs, and rhslow vectors, and the basis vector. */ basisLen = main_lp->basis->len ; basis = main_lp->basis->el ; status = main_lp->status ; ctyp = sys->ctyp ; rhs = sys->rhs ; rhslow = sys->rhslow ; vlb = sys->vlb ; vub = sys->vub ; /* Call dy_rowPrimals to acquire x (values of basic variables) and ind (indices of basic variables). */ xB = NULL ; indB = NULL ; dy_rowPrimals(main_lp,&xB,&indB) ; /* Validate ind, status, and basis against each other, within the limits of each. IndB specifies basic variables in row order. Logicals are specified as the negative of the row. IndB contains an entry for every constraint. By construction, the basic variable for an inactive constraint should be the logical for the constraint. Basis has one entry for each active constraint. Each entry in basis specifies a constraint and a basic variable. Basic logicals are specified by the negative of the constraint index. Then for an active constraint i and a basis entry k such that basis[k].cndx == i, indB[i] == basis[k].vndx. Status only contains information on architecturals. A basic architectural is specified as the negative of its entry in the basis vector. Thus basis[-status[j]].vndx == j. */ inderrs = 0 ; for (i = 1 ; i <= m ; i++) { /* Scan the basis vector for an entry for this constraint. If it's not present, assume the constraint is inactive. */ i_basis = -1 ; for (k = 1 ; k <= basisLen ; k++) { if (basis[k].cndx == i) { i_basis = k ; break ; } } j = indB[i] ; /* Inactive constraints should specify the associated logical as the basic variable. */ if (i_basis < 0) { if (j > 0) { inderrs++ ; dyio_outfmt(dy_logchn,dy_gtxecho,"\nERROR: constraint %s (%d)", consys_nme(sys,'c',i,FALSE,NULL),i) ; dyio_outfmt(dy_logchn,dy_gtxecho, "; basis entry = %d; should specify a logical.",j) ; } else if (-j != i) { inderrs++ ; dyio_outfmt(dy_logchn,dy_gtxecho,"\nERROR: basis[%d] (%s)", i,consys_nme(sys,'c',i,FALSE,NULL)) ; dyio_outfmt(dy_logchn,dy_gtxecho," is %s (%d);", consys_nme(sys,'c',n-j,FALSE,NULL),-j) ; dyio_outfmt(dy_logchn,dy_gtxecho," expected %s (%d).", consys_nme(sys,'c',n+i,FALSE,NULL),i) ; } } /* The constraint is active. We should have indB[i] = basis[i_basis].vndx. It takes way more work than it should to construct the error message. */ else { k = basis[i_basis].vndx ; if (j != k) { inderrs++ ; dyio_outfmt(dy_logchn,dy_gtxecho,"\nERROR: constraint %s (%d)", consys_nme(sys,'c',i,FALSE,NULL),i) ; statj = (k < 0)?(n-k):(k) ; dyio_outfmt(dy_logchn,dy_gtxecho, "; basis[%d] specifies %s (%d)", i_basis,consys_nme(sys,'v',statj,FALSE,NULL),k) ; statj = (j < 0)?(n-j):(j) ; dyio_outfmt(dy_logchn,dy_gtxecho, "; indB[%d] specifies %s (%d); they should agree.", i,consys_nme(sys,'v',statj,FALSE,NULL),j) ; } /* If the basic variable k is an architectural, status[k] should agree that it's basic and point to the basis vector entry. */ if (k > 0) { statj = -((int) status[k]) ; if (i_basis != statj) { inderrs++ ; dyio_outfmt(dy_logchn,dy_gtxecho,"\nERROR: constraint %s (%d)", consys_nme(sys,'c',i,FALSE,NULL),i) ; dyio_outfmt(dy_logchn,dy_gtxecho, "; status[%d] = %d but basis[%d].vndx = %d", k,statj,i_basis,k) ; dyio_outfmt(dy_logchn,dy_gtxecho, "; they should point to each other.") ; } } } } if (inderrs > 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: found %d errors cross-checking basis index vectors.\n", rtnnme,inderrs) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\tTests of basic variable values not performed.\n") ; if (xB != NULL) FREE(xB) ; if (indB != NULL) FREE(indB) ; return (inderrs) ; } /* Now we know the index arrays are correct and we can use them with confidence. Step through the rows, placing the initial component dot(beta,b) into each position. */ xBaccum = (double *) CALLOC((m+1),sizeof(double)) ; berrs = 0 ; betai = NULL ; for (i = 1 ; i <= m ; i++) { if (dy_betai(main_lp,i,&betai) == FALSE) { berrs++ ; j = indB[i] ; if (j < 0) { statj = n-j ; } else { statj = j ; } errmsg(952,rtnnme,sys->nme,"row",i,"basic variable", consys_nme(sys,'v',statj,FALSE,NULL),j) ; continue ; } betaidotb = 0 ; for (k = 1 ; k <= m ; k++) { betaidotb += betai[k]*rhs[k] ; } xBaccum[i] += betaidotb ; } /* Now step through the columns. Subtract abarx from x if x is at a nonzero bound. Anything other than the enumerated status codes is extraordinary. vstatSB might be correct if dylp declared unboundedness immediately after refactoring in primal phase II, but that's such an unlikely coincidence it deserves attention. Anything else is outright wrong. */ nberrs = 0 ; abarj = NULL ; for (j = 1 ; j <= n ; j++) { statj = status[j] ; if (((int) statj) < 0) continue ; statj = getflg(statj,vstatSTATUS) ; switch (statj) { case vstatNBLB: case vstatNBFX: { xj = vlb[j] ; break ; } case vstatNBUB: { xj = vub[j] ; break ; } case vstatNBFR: { xj = 0.0 ; break ; } default: { nberrs++ ; dyio_outfmt(dy_logchn,dy_gtxecho,"\nERROR: constraint %s (%d)", consys_nme(sys,'c',i,FALSE,NULL),i) ; dyio_outfmt(dy_logchn,dy_gtxecho,"; status of %s (%d) is %s.", consys_nme(sys,'v',j,FALSE,NULL),j,dy_prtvstat(statj)) ; xj = 0.0 ; break ; } } if (xj == 0.0) continue ; if (dy_abarj(main_lp,j,&abarj) == FALSE) { nberrs++ ; errmsg(953,rtnnme,sys->nme,"ftran'd","column", consys_nme(sys,'v',j,FALSE,NULL),j) ; continue ; } for (k = 1 ; k <= m ; k++) { xBaccum[k] -= abarj[k]*xj ; } } /* We're not quite done. We need to account for bounded slacks associated with range constraints. If the constraint is tight at its lower bound, the slack is nonbasic at its upper bound. */ logstatus = NULL ; dy_logStatus(main_lp,&logstatus) ; for (i = 1 ; i <= m ; i++) { stati = getflg(logstatus[i],vstatSTATUS) ; if (ctyp[i] == contypRNG && stati == vstatNBUB) { xj = rhs[i]-rhslow[i] ; if (dy_abarj(main_lp,-i,&abarj) == FALSE) { nberrs++ ; errmsg(953,rtnnme,sys->nme,"ftran'd","column", consys_nme(sys,'v',n+i,FALSE,NULL),i) ; continue ; } for (k = 1 ; k <= m ; k++) { xBaccum[k] -= abarj[k]*xj ; } } } /* Scan the rows one more time and check the values of the basic variables. Scale this test just a bit so we don't get spurious indications due to roundoff. The average of the two values seems safest as a scaling factor. */ for (i = 1 ; i <= m ; i++) { tol = ((fabs(xBaccum[i])+fabs(xB[i]))/2)+1 ; if (fabs(xBaccum[i]-xB[i]) > tol*main_lptols->zero) { berrs++ ; j = indB[i] ; if (j < 0) { statj = n-j ; } else { statj = j ; } dyio_outfmt(dy_logchn,dy_gtxecho, "\nERROR: basis pos'n %d %s (%d) = %g; expected %g;", i,consys_nme(sys,'v',statj,FALSE,NULL),j,xB[i],xBaccum[i]) ; dyio_outfmt(dy_logchn,dy_gtxecho," error %g, tol %g.", fabs(xB[i]-xBaccum[i]),main_lptols->zero) ; } } /* Free up space and report the result. */ if (logstatus != NULL) FREE(logstatus) ; if (abarj != NULL) FREE(abarj) ; if (xB != NULL) FREE(xB) ; if (indB != NULL) FREE(indB) ; if (xBaccum != NULL) FREE(xBaccum) ; if (betai != NULL) FREE(betai) ; if ((berrs+nberrs) != 0) { if (berrs != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: found %d errors testing x = inv(B)b.\n", rtnnme,berrs) ; } if (nberrs != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: found %d errors attempting to use nonbasic variables.\n", rtnnme,nberrs) ; } } else { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: pass test of primal basic variable values.\n", rtnnme) ; } return (berrs+nberrs) ; } DyLP-1.10.4/DyLP/test/OsiDylpSolverInterfaceTest.cpp0000644000175200017520000003022011575424105020606 0ustar coincoin/*! \legal Copyright (C) 2002, 2003, 2004. Lou Hafer, Stephen Tse, International Business Machines Corporation and others. All Rights Reserved. This file is a portion of the COIN/OSI interface for dylp and is licensed under the terms of the Eclipse Public License (EPL). */ #include "DylpConfig.h" #include "CoinPragma.hpp" /* Rudimentary tests for the Dylp OSI layer. The assumption is that OsiSolverInterfaceCommonUnitTest checks basic functionality. The routine test_starts does a cursory check of cold/warm/hot starts. These tests need to be sharpened considerably, if they are to have any teeth. */ #include #include #include "OsiDylpSolverInterface.hpp" #include "OsiDylpWarmStartBasis.hpp" #include "OsiDylpMessages.hpp" #include "OsiUnitTests.hpp" #include "CoinFloatEqual.hpp" namespace { char sccsid[] UNUSED = "@(#)OsiDylpSolverInterfaceTest.cpp 1.11 09/25/04" ; char cvsid[] UNUSED = "$Id: OsiDylpSolverInterfaceTest.cpp 1224 2008-05-02 21:14:00Z lou $" ; } void test_starts (const std::string& mpsDir) /* This routine makes a number of checks for warm and hot start capabilities. * Create and attempt to set an empty warm start object. * Create an ODSI object and solve the exmip1 sample MPS file with initialSolve. * Get a warm start object, then destroy the ODSI object. Create a new ODSI object, clone the saved warm start, install it, and resolve. Check that the objective is the same and that we did not pivot. * Change the objective sense and resolve from hot start. */ { OsiDylpSolverInterface *osi = new OsiDylpSolverInterface ; OsiHintStrength strength ; bool sense ; void *p_info ; CoinRelFltEq eq ; double exmip1MinObj = 3.23684210526 ; double exmip1MaxObj = 4.5 ; std::streamsize old_prec = std::cout.precision() ; OSIUNITTEST_ASSERT_ERROR(osi != NULL, return, "dylp", "creating ODSI"); /* Read in exmip1 and solve it. */ std::cout << "Boosting verbosity." << std::endl ; osi->setHintParam(OsiDoReducePrint,false) ; std::string exmpsfile = mpsDir+"exmip1" ; std::string probname ; std::cout << "Reading mps file \"" << exmpsfile << "\"" << std::endl ; OSIUNITTEST_ASSERT_ERROR(osi->readMps(exmpsfile.c_str(), "mps") == 0, return, "dylp", "reading exmip1"); OSIUNITTEST_ASSERT_ERROR(osi->getStrParam(OsiProbName,probname), {}, "dylp", "get problem name"); std::cout << "Solving " << probname << " ... " << std::endl ; osi->initialSolve() ; double val = osi->getObjValue() ; OSIUNITTEST_ASSERT_ERROR(eq(val,exmip1MinObj), std::cout << "Incorrect objective " << std::setprecision(12) << val << "; expecting " << exmip1MinObj << ", diff " << val-exmip1MinObj << "." << std::endl ; std::cout.precision(old_prec), "dylp", "initial solve of exmip1"); std::cout << "And the answer is " << val << "." << std::endl; /* Grab a warm start object for later use. No point in continuing if this fails. */ std::cout << "Getting a warm start object ... " << std::endl ; CoinWarmStart *ws = osi->getWarmStart() ; OSIUNITTEST_ASSERT_ERROR(ws != NULL, return, "dylp", "acquire warm start"); /* Brief interruption for an idiot check: are the signs of the reduced costs correct in the solution, given minimisation? Easy to test with status info from the warm start object. */ { const double *cbar = osi->getReducedCost() ; std::cout << "Performing sanity test on reduced costs." << std::endl ; const CoinWarmStartBasis *wsb = dynamic_cast(ws) ; bool signsok = true; for (int j = 0 ; j < osi->getNumCols() ; j++) { switch (wsb->getStructStatus(j)) { case CoinWarmStartBasis::atUpperBound: { if (cbar[j] > 0) { std::cout << "Sign error! " << "Var " << j << " at upper bound, cbar = " << cbar[j] << "." << std::endl ; signsok = false; } break ; } case CoinWarmStartBasis::atLowerBound: { if (cbar[j] < 0) { std::cout << "Sign error! " << "Var " << j << " at lower bound, cbar = " << cbar[j] << "." << std::endl ; signsok = false; } break ; } case CoinWarmStartBasis::basic: { if (fabs(cbar[j]) > 1.0e-5) { std::cout << "Value error! " << "Var " << j << " is basic, cbar = " << cbar[j] << ", should be zero" << "." << std::endl ; signsok = false; } break ; } default: { break ; } } } OSIUNITTEST_ASSERT_ERROR(signsok == true, {}, "dylp", "reduced costs sanity check"); } /* Back to our regular programming. Create an empty warm start object and set it as the warm start. Then call resolve(). The call to setWarmStart should remove the warm start information in the solver, and the call to resolve() should throw. */ { std::cout << "Checking behaviour for empty warm start object." << std::endl ; std::cout << "Acquiring ... " ; CoinWarmStart *emptyWS = osi->getEmptyWarmStart() ; OSIUNITTEST_ASSERT_ERROR(emptyWS != NULL, return, "dylp", "acquire empty warmstart"); std::cout << "setting ... " ; OSIUNITTEST_ASSERT_ERROR(osi->setWarmStart(emptyWS) == true, return, "dylp", "install empty warmstart"); std::cout << "calling resolve (throw expected) ... " ; bool throwSeen = false ; try { osi->resolve() ; } catch (CoinError &ce) { std::cout << std::endl << ce.methodName() << ":" << ce.message() ; throwSeen = true ; } if (throwSeen) { std::cout << std::endl << " caught ... success!" << std::endl ; } else { std::cout << " no throw! ... FAILURE!" ; } OSIUNITTEST_ASSERT_ERROR(throwSeen, {}, "dylp", "resolve from empty warmstart"); delete emptyWS ; } /* Make sure that the warm start information is sufficient (and persistent) by discarding the current ODSI object and then installing the warm start information in a new ODSI object. */ std::cout << "Discarding current ODSI object ... " << std::endl ; delete osi ; osi = 0 ; /* We've discarded the first solver. Clone the original warm start object and destroy the original. */ std::cout << "Cloning warm start ... " << std::endl ; CoinWarmStart *ws_clone = ws->clone() ; OSIUNITTEST_ASSERT_ERROR(ws_clone, return, "dylp", "clone warmstart"); delete ws ; ws = ws_clone ; ws_clone = 0 ; /* Create a second solver, and read in exmip1. Install the cloned warm start in the new solver. */ int level = 5 ; level |= 0x10 ; std::cout << "Creating new ODSI object ... " << std::endl ; osi = new OsiDylpSolverInterface ; OSIUNITTEST_ASSERT_ERROR(osi != NULL, return, "dylp", "create second ODSI"); osi->setHintParam(OsiDoReducePrint,false,OsiForceDo,&level) ; osi->getHintParam(OsiDoReducePrint,sense,strength,p_info) ; std::cout << "Verbosity now maxed at " << *reinterpret_cast(p_info) << "." << std::endl ; OSIUNITTEST_ASSERT_ERROR(osi->readMps(exmpsfile.c_str(), "mps") == 0, return, "dylp", "reading exmip1"); std::cout << "Installing cloned warm start object ... " << std::endl ; OSIUNITTEST_ASSERT_ERROR(osi->setWarmStart(ws) == true, return, "dylp", "install valid warmstart after deleting original solver"); /* Resolve. Check that we did not pivot (much) and that the objective hasn't changed. Set the print level quite high (we need to do this at some point). */ std::cout << "Resolving the lp ... " << std::endl ; osi->resolve() ; val = osi->getObjValue() ; OSIUNITTEST_ASSERT_ERROR(eq(val,exmip1MinObj), std::cout << "Incorrect objective " << std::setprecision(12) << val << "; expecting " << exmip1MinObj << ", diff " << val-exmip1MinObj << "." << std::endl ; std::cout.precision(old_prec), "dylp", "resolve exmip1 from optimal basis"); if (eq(val,exmip1MinObj)) OSIUNITTEST_ASSERT_ERROR(osi->getIterationCount() <= 1, {}, "dylp", "resolve exmip1 from optimal basis"); { std::cout << std::endl << "And the answer is " << val << " after " << osi->getIterationCount() << " pivots." << std::endl ; } delete ws ; ws = 0 ; /* Flip the objective and do a hot start. */ osi->setHintParam(OsiDoReducePrint,true,OsiForceDo) ; std::cout << "Reducing verbosity." << std::endl ; std::cout << "Changing objective sense to maximisation ..." ; osi->setObjSense(-1.0) ; std::cout << " attempting hot start ..." ; osi->markHotStart() ; osi->solveFromHotStart() ; val = osi->getObjValue() ; OSIUNITTEST_ASSERT_ERROR(eq(val,exmip1MaxObj), std::cout << "Incorrect objective " << std::setprecision(12) << val << "; expecting " << exmip1MaxObj << ", diff " << exmip1MaxObj-val << "." << std::endl ; std::cout.precision(old_prec), "dylp", "solve exmip1 with flipped obj from hotstart"); if (eq(val,exmip1MaxObj)) { std::cout << std::endl << "And the answer is " << val << "." << std::endl ; } /* Another brief interruption for an idiot check: are the signs of the reduced costs correct in the solution, given maximisation? */ { const double *cbar = osi->getReducedCost() ; ws = osi->getWarmStart() ; const OsiDylpWarmStartBasis *odsi_wsb = dynamic_cast(ws) ; std::cout << "Performing sanity test on reduced costs." << std::endl ; bool signsok = true; for (int j = 0 ; j < osi->getNumCols() ; j++) { switch (odsi_wsb->getStructStatus(j)) { case CoinWarmStartBasis::atUpperBound: { if (cbar[j] < 0) { std::cout << "Sign error! " << "Var " << j << " at upper bound, cbar = " << cbar[j] << "." << std::endl ; signsok = false; } break ; } case CoinWarmStartBasis::atLowerBound: { if (cbar[j] > 0) { std::cout << "Sign error! " << "Var " << j << " at lower bound, cbar = " << cbar[j] << "." << std::endl ; signsok = false; } break ; } case CoinWarmStartBasis::basic: { if (fabs(cbar[j]) > 1.0e-5) { std::cout << "Value error! " << "Var " << j << " is basic, cbar = " << cbar[j] << ", should be zero" << "." << std::endl ; signsok = false; } break ; } default: { break ; } } } delete ws ; OSIUNITTEST_ASSERT_ERROR(signsok, {}, "dylp", "signs in reduced costs for maximization"); } /* Turn off printing, to make sure we can get dylp to shut up. */ level = 0 ; osi->setHintParam(OsiDoReducePrint,true,OsiForceDo,&level) ; osi->getHintParam(OsiDoReducePrint,sense,strength,p_info) ; std::cout << "Verbosity now at " << *reinterpret_cast(p_info) << "." << std::endl ; /* And return to minimisation. */ std::cout << "And back to minimisation ..." ; osi->setObjSense(1.0) ; std::cout << " attempting hot start ..." ; osi->solveFromHotStart() ; val = osi->getObjValue() ; OSIUNITTEST_ASSERT_ERROR(eq(val,exmip1MinObj), std::cout << "Incorrect objective " << std::setprecision(12) << val << "; expecting " << exmip1MinObj << ", diff " << val-exmip1MinObj << "." << std::endl ; std::cout.precision(old_prec), "dylp", "solve exmip1 without flipped obj from hotstart"); if (eq(val,exmip1MinObj)) { std::cout << std::endl << "And the answer is " << val << "." << std::endl ; } delete osi ; } /*! OsiDylp unit test driver This is the unit test routine for OsiDylpSolverInterface. It tests for problems that have been uncovered and fixed already. If it fails, you've probably tickled a new bug. Please file a bug report. */ void OsiDylpSolverInterfaceUnitTest (const std::string &mpsDir, const std::string &netLibDir) { std::cout << " Starting OsiDylp specific tests ... " << std::endl << std::endl ; std::cout << "Test multi-language facility in message handler ... " << std::endl ; OsiDylpSolverInterface* osi = new OsiDylpSolverInterface ; osi->handler_->setLogLevel(3) ; osi->handler_->message(ODSI_TEST_MSG,osi->messages_) ; osi->newLanguage(CoinMessages::uk_en) ; osi->handler_->message(ODSI_TEST_MSG,osi->messages_) ; osi->handler_->finish() ; /* Test the reset function. */ std::cout << "Testing reset ... " << std::endl ; OsiDylpSolverInterface* osi2 = new OsiDylpSolverInterface ; osi->reset() ; # ifndef _MSC_VER osi->assert_same(*osi,*osi2,true) ; # endif delete osi ; delete osi2 ; std::cout << "Testing cold/warm/hot start ... " << std::endl ; test_starts(mpsDir) ; std::cout << std::endl << " OsiDylp specific tests completed." << std::endl << std::endl ; } DyLP-1.10.4/DyLP/test/dytest_problems.c0000644000175200017520000017414511507440660016244 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2008 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains static data definitions for several test problems, as well as some utility routines for loading the static data into a constraint system. */ #include "dylp.h" extern ioid dy_logchn ; extern bool dy_gtxecho ; /* The exmip1 example used throughout COIN unit tests. This example is drawn from the OSL documentation, "Passing Your Model Using Mathematical Programming System (MPS) Format." It's probably not possible to find this any longer, unless you happen to know someone old enough to have worked with OSL. */ static const int exmip1_rowcnt = 6 ; static const int exmip1_colcnt = 8 ; static const int exmip1_coeffcnt = 17 ; static const int exmip1_maxColLen = 3 ; static const char *exmip1_objname = "OBJ" ; static const int exmip1_objndx = 1 ; static const char *exmip1_rowname[] = { "bogus", "OBJ", "ROW01", "ROW02", "ROW03", "ROW04", "ROW05" } ; static const char exmip1_rowsense[] = { 'B', 'N', 'G', 'L', 'E', 'R', 'R' } ; static const double exmip1_rowlb[] = { -42.42, -1e100, 2.5, -1e100, 4.0, 1.8, 3.0 } ; static const double exmip1_rowub[] = { -42.42, 1e100, 1e100, 2.1, 4.0, 5.0, 15.0 } ; static const char *exmip1_colname[] = { "bogus", "COL01", "COL02", "COL03", "COL04", "COL05", "COL06", "COL07", "COL08" } ; static const double exmip1_collb[] = { -42.42, 2.5, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0 } ; static const double exmip1_colub[] = { -42.42, 1e100, 4.1, 1.0, 1.0, 4.0, 1e100, 1e100, 4.3 } ; static const int exmip1_rowndx[] = {-42, 1, 2, 6, 2, 3, 3, 4, 2, 5, 1, 2, 6, 4, 5, 1, 2, 6 } ; static const int exmip1_colndx[] = {-42, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 8, 8, 8 } ; static const double exmip1_coeff[] = { -42.42, 1.0, 3.0, 5.6, 1.0, 2.0, 1.1, 1.0, -2.0, 2.8, 2.0, -1.0, 1.0, 1.0, -1.2, -1.0, -1.0, 1.9 } ; /* The exprimalray example is used to test the routine that returns primal rays. The coefficient matrix is: 6 x1 + 15 x2 + 8 x3 >= 210 face1 9 x1 - 6 x2 - 7 x3 <= 30 face2 - 3 x1 + 21 x2 - 4 x3 <= 180 face3 -216 x1 + 315 x2 - 136 x3 <= 1218 face4 66 x1 + 336 x2 - 83 x3 <= 4305 face5 x1, x2, x3 free The overall shape is a cone formed by face1, face2, and face3, with origin at (10,10,0), opening upward (increasing x3). Face4 forms an extreme point with faces 1 and 3 at (8,10,3/2), cutting off ray13 emanating from (10,10,0) and forming two more rays emanating from (8,10,3/2). Face5 forms an extreme point with faces 2 and 3 at (13,11,3), cutting off ray 23 emanating from (10,10,0) and forming two more rays emanating from (13,11,3). ray12 = ( 1 -2 3) ray13 = (-4 0 3) [ truncated by face4 at (8,10,3/2) ] ray23 = ( 3 1 3) [ truncated by face5 at (13,11,3) ] ray14 = (-40 -8 45) ray34 = (-28 8 63) ray25 = (10 1 12) ray35 = ( 7 9 42) An objective of min x1 + x2 + 2x3 will find (10,10,0), the base of the cone. An objective of min (1 0 1) will find (8,10,3/2) with z = 9.5. An objective of min (1 1 1) will want to go unbounded from (8,10,3/2) along ray14. An objective of min (3 1 1) will want to go unbounded from (8,10,3/2) along both of ray14 and ray34. An objective of min (-1 -1 1) (coded below) will find (13,11,3). An objective of min (-1 -4 1) will want to go unbounded along either of ray25 or ray35. This portion of the polytope works better in exdualray (we don't run afoul of the orthant constraints in the dual). */ static const int exprimalray_rowcnt = 6 ; static const int exprimalray_colcnt = 3 ; static const int exprimalray_coeffcnt = 18 ; static const int exprimalray_maxColLen = 5 ; static const char *exprimalray_objname = "obj" ; static const int exprimalray_objndx = 1 ; static const char *exprimalray_rowname[] = { "bogus", "obj", "face1", "face2", "face3", "face4", "face5" } ; static const char exprimalray_rowsense[] = { 'B', 'N', 'G', 'L', 'L', 'L', 'L' } ; static const double exprimalray_rowlb[] = { -42.42, -1e100, 210, -1e100, -1e100, -1e100, -1e100 } ; static const double exprimalray_rowub[] = { -42.42, 1e100, 1e100, 30, 180, 1218, 4305 } ; static const char *exprimalray_colname[] = { "bogus", "x1", "x2", "x3" } ; static const double exprimalray_collb[] = { -42.42, -1e100, -1e100, -1e100 } ; static const double exprimalray_colub[] = { -42.42, 1e100, 1e100, 1e100 } ; static const int exprimalray_rowndx[] = { -42, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6 } ; static const int exprimalray_colndx[] = { -42, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3 } ; static const double exprimalray_coeff[] = { -42.42, -1.0, 6.0, 9.0, -3.0, -216.0, 66.0, -1.0, 15.0, -6.0, 21.0, 315.0, 336.0, 1.0, 8.0, -7.0, -4.0, -136.0, -83.0 } ; /* The exdualray example is used to test the routine that returns dual rays. It uses the polyhedron of exprimalray to define the dual space, resulting in this primal coefficient matrix: -6 face1 + 9 face2 - 3 face3 - 216 face4 + 66.0 face5 >= 1.0 x1 -15 face1 - 6 face2 + 21 face3 + 315 face4 + 336.0 face5 >= 1.0 x2 -8 face1 - 7 face2 - 4 face3 - 136 face4 - 83.0 face5 >= -1.0 x3 0 <= face1, face2, face3, face4, face5 <= infty The objective of c = (-210 30 180 1218 4305) coded into the arrays below completes the definition of the dual polytope. With b = (1 1 -1) as shown, there should be a finite minimum at y = (13,11,3). To translate the primal objective of exprimalray to the rhs of exdualray, note first that the primal min objective is negated to get a max objective, which is then used as the rhs here according to the standard primal -> dual transform. (Specified using rowlb!) */ static const int exdualray_rowcnt = 4 ; static const int exdualray_colcnt = 5 ; static const int exdualray_coeffcnt = 20 ; static const int exdualray_maxColLen = 3 ; static const char *exdualray_objname = "obj" ; static const int exdualray_objndx = 1 ; static const char *exdualray_rowname[] = { "bogus", "obj", "x1", "x2", "x3" } ; static const char exdualray_rowsense[] = { 'B', 'N', 'G', 'G', 'G' } ; static const double exdualray_rowub[] = { -42.42, 1e100, 1e100, 1e100, 1e100 } ; static const double exdualray_rowlb[] = { -42.42, -1e100, 1.0, 1.0, -1.0 } ; /* static const char exdualray_rowsense[] = { 'B', 'N', 'L', 'G', 'G' } ; static const double exdualray_rowub[] = { -42.42, 1e100, -1.0, 1e100, 1e100 } ; static const double exdualray_rowlb[] = { -42.42, -1e100, -1e100, 1.0, -1.0 } ; */ static const char *exdualray_colname[] = { "bogus", "face1", "face2", "face3", "face4", "face5" } ; static const double exdualray_collb[] = { -42.42, 0, 0, 0, 0, 0 } ; static const double exdualray_colub[] = { -42.42, 1e100, 1e100, 1e100, 1e100, 1e100 } ; static const int exdualray_rowndx[] = { -42, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 } ; static const int exdualray_colndx[] = { -42, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5 } ; static const double exdualray_coeff[] = { -42.42, -210.0, -6.0, -15.0, -8.0, 30.0, 9.0, -6.0, -7.0, 180.0, -3.0, 21.0, -4.0, 1218.0, -216.0, 315.0, -136.0, 4305.0, 66.0, 336.0, -83.0 } ; /* Correct for constraint x1 a G constraint static const double exdualray_coeff[] = { -42.42, -210.0, 6.0, -15.0, -8.0, 30.0, -9.0, -6.0, -7.0, 180.0, 3.0, 21.0, -4.0, 1218.0, 216.0, 315.0, -136.0, 4305.0, -66.0, 336.0, -83.0 } ; */ /* galenet, from Data/Infeas. This problem is a small network flow problem: three sources, two intermediate nodes, three sinks. It's a feasibility problem (objective coefficients are all zero, hence duals and reduced costs are also zero) and it's primal infeasible and dual unbounded. It was used in the OsiClp unit test, and it turns out to be good from several viewpoints. It's small enough to do manual checks, it has a nice mix of <=, =, and >= constraints, and it has bounded variables. Three more versions of this problem follow: * galenetmixed, in which the equalities are converted to a pair of <= and >= constraints; * galenetleq, in which all constraints are converted to <= constraints; and * galenetbnds, in which all bounds are converted to explicit inequalities, then all inequalities are converted to <= constraints. Galenetbnds is the easy case for dual ray generation, with all constraints explicit. This makes it easy to recreate the canonical dual without worrying about handling implicit bound constraints. Galenetbnds and galenetleq both exercise the unscaled alternatives in the various solution generation routines. Galenetmixed turns out to exercise some interesting cases. In addition to the inversion required to convert to >= constraints in the original system, there's one case where dylp's BLLB slack attached to the internal <= constraint must be viewed as a BUUB surplus in order to successfully generate the correct ray. */ /* First galenet as originally formulated, with a mix of >=, =, and <= constraints. */ static const int galenet_rowcnt = 9 ; static const int galenet_colcnt = 8 ; static const int galenet_coeffcnt = 16 ; static const int galenet_maxColLen = 2 ; static const char *galenet_objname = "COST" ; static const int galenet_objndx = 9 ; static const char *galenet_rowname[] = { "bogus", "S1", "S2", "S3", "NODE4", "NODE5", "D6", "D7", "D8", "COST" } ; static const char galenet_rowsense[] = { 'B', 'L', 'L', 'L', 'E', 'E', 'G', 'G', 'G', 'N' } ; static const double galenet_rowlb[] = { -42.42, -1e100, -1e100, -1e100, 0.0, 0.0, 10., 20., 30., -1e100 } ; static const double galenet_rowub[] = { -42.42, 20., 20., 20., 0.0, 0.0, 1e100, 1e100, 1e100, 1e100 } ; static const char *galenet_colname[] = { "bogus", "T14", "T24", "T25", "T35", "T46", "T47", "T57", "T58" } ; static const double galenet_collb[] = { -42.42, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 } ; static const double galenet_colub[] = { -42.42, 30., 20., 10., 10., 10., 2., 20., 30. } ; static const int galenet_rowndx[] = {-42, 1, 4, 2, 4, 2, 5, 3, 5, 6, 4, 7, 4, 7, 5, 8, 5 } ; static const int galenet_colndx[] = {-42, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8 } ; static const double galenet_coeff[] = { -42.42, 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., 1., -1., 1., -1., 1., -1. } ; /* Galenetmixed, with the equalities converted to a pair of inequalities. */ static const int galenetmixed_rowcnt = 11 ; static const int galenetmixed_colcnt = 8 ; static const int galenetmixed_coeffcnt = 24 ; static const int galenetmixed_maxColLen = 3 ; static const char *galenetmixed_objname = "COST" ; static const int galenetmixed_objndx = 11 ; static const char *galenetmixed_rowname[] = { "bogus", "S1", "S2", "S3", "NODE4U", "NODE4L", "NODE5U", "NODE5L", "D6", "D7", "D8", "COST" } ; static const char galenetmixed_rowsense[] = { 'B', 'L', 'L', 'L', 'L', 'G', 'L', 'G', 'G', 'G', 'G', 'N' } ; static const double galenetmixed_rowlb[] = { -42.42, -1e100, -1e100, -1e100, -1e100, 0.0, -1e100, 0.0, 10., 20., 30., -1e100 } ; static const double galenetmixed_rowub[] = { -42.42, 20., 20., 20., 0.0, 1e100, 0.0, 1e100, 1e100, 1e100, 1e100, 1e100 } ; static const char *galenetmixed_colname[] = { "bogus", "T14", "T24", "T25", "T35", "T46", "T47", "T57", "T58" } ; static const double galenetmixed_collb[] = { -42.42, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 } ; static const double galenetmixed_colub[] = { -42.42, 30., 20., 10., 10., 10., 2., 20., 30. } ; static const int galenetmixed_rowndx[] = {-42, 1, 4, 5, 2, 4, 5, 2, 6, 7, 3, 6, 7, 8, 4, 5, 9, 4, 5, 9, 6, 7, 10, 6, 7 } ; static const int galenetmixed_colndx[] = {-42, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8 } ; static const double galenetmixed_coeff[] = { -42.42, 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1. } ; /* Galenetleq, with equalities converted to inequalities and >= constraints converted to <= constraints. */ static const int galenetleq_rowcnt = 11 ; static const int galenetleq_colcnt = 8 ; static const int galenetleq_coeffcnt = 24 ; static const int galenetleq_maxColLen = 3 ; static const char *galenetleq_objname = "COST" ; static const int galenetleq_objndx = 11 ; static const char *galenetleq_rowname[] = { "bogus", "S1", "S2", "S3", "NODE4U", "NODE4L", "NODE5U", "NODE5L", "D6", "D7", "D8", "COST" } ; static const char galenetleq_rowsense[] = { 'B', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'N' } ; static const double galenetleq_rowlb[] = { -42.42, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100 } ; static const double galenetleq_rowub[] = { -42.42, 20., 20., 20., 0.0, 0.0, 0.0, 0.0, -10., -20., -30., 1e100 } ; static const char *galenetleq_colname[] = { "bogus", "T14", "T24", "T25", "T35", "T46", "T47", "T57", "T58" } ; static const double galenetleq_collb[] = { -42.42, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 } ; static const double galenetleq_colub[] = { -42.42, 30., 20., 10., 10., 10., 2., 20., 30. } ; static const int galenetleq_rowndx[] = {-42, 1, 4, 5, 2, 4, 5, 2, 6, 7, 3, 6, 7, 8, 4, 5, 9, 4, 5, 9, 6, 7, 10, 6, 7 } ; static const int galenetleq_colndx[] = {-42, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8 } ; static const double galenetleq_coeff[] = { -42.42, 1., 1., -1.0, 1., 1., -1.0, 1., 1., -1., 1., 1., -1., -1., -1., 1.0, -1., -1., 1.0, -1., -1., 1., -1., -1., 1. } ; /* Galenetbnds, with bounds on variables made into explicit <= constraints. Useful when checking just how rA > 0 fails in the presence of implicit bounds. */ static const int galenetbnds_rowcnt = 27 ; static const int galenetbnds_colcnt = 8 ; static const int galenetbnds_coeffcnt = 40 ; static const int galenetbnds_maxColLen = 5 ; static const char *galenetbnds_objname = "COST" ; static const int galenetbnds_objndx = 27 ; static const char *galenetbnds_rowname[] = { "bogus", "S1", "S2", "S3", "NODE4U", "NODE4L", "NODE5U", "NODE5L", "D6", "D7", "D8", "T14UB", "T14LB", "T24UB", "T24LB", "T25UB", "T25LB", "T35UB", "T35LB", "T46UB", "T46LB", "T47UB", "T47LB", "T57UB", "T57LB", "T58UB", "T58LB", "COST" } ; static const char galenetbnds_rowsense[] = { 'B', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'N' } ; static const double galenetbnds_rowlb[] = { -42.42, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100 } ; static const double galenetbnds_rowub[] = { -42.42, 20., 20., 20., 0.0, 0.0, 0.0, 0.0, -10., -20., -30., 30., 0.0, 20., 0.0, 10., 0.0, 10., 0.0, 10., 0.0, 2., 0.0, 20., 0.0, 30., 0.0, 1e100 } ; static const char *galenetbnds_colname[] = { "bogus", "T14", "T24", "T25", "T35", "T46", "T47", "T57", "T58" } ; static const double galenetbnds_collb[] = { -42.42, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100 } ; static const double galenetbnds_colub[] = { -42.42, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100 } ; static const int galenetbnds_rowndx[] = {-42, 1, 4, 5, 11, 12, 2, 4, 5, 13, 14, 2, 6, 7, 15, 16, 3, 6, 7, 17, 18, 8, 4, 5, 19, 20, 9, 4, 5, 21, 22, 9, 6, 7, 23, 24, 10, 6, 7, 25, 26 } ; static const int galenetbnds_colndx[] = {-42, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8 } ; static const double galenetbnds_coeff[] = { -42.42, 1., 1., -1.0, 1., -1., 1., 1., -1.0, 1., -1., 1., 1., -1., 1., -1., 1., 1., -1., 1., -1., -1., -1., 1.0, 1., -1., -1., -1., 1.0, 1., -1., -1., -1., 1., 1., -1., -1., -1., 1., 1., -1. } ; /* The afiro example, smallest of the Netlib problems. */ static const int afiro_rowcnt = 28 ; static const int afiro_colcnt = 32 ; static const int afiro_coeffcnt = 88 ; static const int afiro_maxColLen = 4 ; static const char *afiro_objname = "COST" ; static const int afiro_objndx = 1 ; static const char *afiro_rowname[] = { "bogus", "COST", "R09", "R10", "R12", "R13", "R19", "R20", "R22", "R23", "X05", "X17", "X18", "X19", "X20", "X21", "X27", "X40", "X41", "X42", "X43", "X44", "X45", "X46", "X47", "X48", "X49", "X50", "X51" } ; static const char afiro_rowsense[] = { 'B', 'N', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'E', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L' } ; static const double afiro_rowlb[] = { -42.42, -1e100, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 44., -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100 } ; static const double afiro_rowub[] = { -42.42, 1e100, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 44., 80., 80., 0.0, 0.0, 0.0, 0.0, 500., 500., 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 310., 300. } ; static const char *afiro_colname[] = { "bogus", "X01", "X02", "X03", "X04", "X06", "X07", "X08", "X09", "X10", "X11", "X12", "X13", "X14", "X15", "X16", "X22", "X23", "X24", "X25", "X26", "X28", "X29", "X30", "X31", "X32", "X33", "X34", "X35", "X36", "X37", "X38", "X39" } ; static const double afiro_collb[] = { -42.42, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 } ; static const double afiro_colub[] = { -42.42, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100 } ; static const int afiro_rowndx[] = {-42, 25, 2, 3, 10, 15, 2, 1, 23, 2, 27, 3, 26, 4, 5, 11, 26, 4, 5, 12, 26, 4, 5, 13, 26, 4, 5, 14, 22, 11, 22, 12, 22, 13, 22, 14, 15, 4, 1, 24, 4, 28, 5, 23, 6, 7, 16, 21, 6, 1, 25, 6, 22, 6, 27, 7, 24, 8, 9, 17, 24, 8, 9, 18, 24, 8, 9, 19, 24, 8, 9, 20, 22, 17, 22, 18, 22, 19, 22, 20, 21, 9, 1, 26, 9, 28, 8, 9, 1 } ; static const int afiro_colndx[] = {-42, 1, 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 29, 30, 30, 31, 31, 32, 32 } ; static const double afiro_coeff[] = { -42.42, .301, -1., -1.06, 1., -1., 1., -.4, -1., 1., 1., 1., .301, -1., -1.06, 1., .313, -1., -1.06, 1., .313, -1., -.96, 1., .326, -1., -.86, 1., 2.364, -1., 2.386, -1., 2.408, -1., 2.429, -1., 1.4, 1., -.32, -1., 1., 1., 1., .109, -1., -.43, 1., -1., 1., -.6, -1., 1., -1., 1., 1., 1., .109, -.43, 1., 1., .108, -.43, 1., 1., .108, -.39, 1., 1., .107, -.37, 1., 1., 2.191, -1., 2.219, -1., 2.249, -1., 2.279, -1., 1.4, -1., -.48, -1., 1., 1., 1., 1., 10. } ; /* boeing2, the smallest problem that's a good mix of L, G, E, and R constraints. */ static const int boeing2_rowcnt = 167 ; static const int boeing2_colcnt = 143 ; static const int boeing2_coeffcnt = 1339 ; static const int boeing2_maxColLen = 24 ; static const char *boeing2_objname = "OBJECTIV" ; static const int boeing2_objndx = 3 ; static const char *boeing2_rowname[] = { "bogus", "REVENUES", "ACOCOSTS", "OBJECTIV", "FUELAVAL", "SYSTDEPT", "ACMILES", "ASMILES", "PASSNGRS", "RPMILES", "LFRPMASM", "ATONMILE", "RTONMILE", "LFTNMILE", "FLAV*1", "FLAV*2", "FLAV*3", "FLAV*4", "LF1003S1", "LF1003B1", "LF1003C1", "LF1005S1", "LF1005B1", "LF1005C1", "LF1011S1", "LF1011S2", "LF1011B1", "LF1011B2", "LF1011C1", "LF1011C2", "LF1013S1", "LF1013S2", "LF1013B1", "LF1013B2", "LF1013C1", "LF1013C2", "LF1015S1", "LF1015B1", "LF1015C1", "LF1017S1", "LF1017B1", "LF1017C1", "LF1019S1", "LF1019S2", "LF1019B1", "LF1019B2", "LF1019C1", "LF1019C2", "LF1021S1", "LF1021B1", "LF1021C1", "LF1002S1", "LF1002B1", "LF1002C1", "LF1004S1", "LF1004B1", "LF1004C1", "LF1006S1", "LF1006S2", "LF1006B1", "LF1006B2", "LF1006C1", "LF1006C2", "LF1008S1", "LF1008S2", "LF1008B1", "LF1008B2", "LF1008C1", "LF1008C2", "LF1010S1", "LF1010S2", "LF1010S3", "LF1010B1", "LF1010B2", "LF1010B3", "LF1010C1", "LF1010C2", "LF1010C3", "LF1012S1", "LF1012B1", "LF1012C1", "LF1014S1", "LF1014S2", "LF1014B1", "LF1014B2", "LF1014C1", "LF1014C2", "LF1100S1", "LF1100S2", "LF1100S3", "LF1100S4", "LF1100S5", "LF1100B1", "LF1100B2", "LF1100B3", "LF1100B4", "LF1100B5", "LF1100C1", "LF1100C2", "LF1100C3", "LF1100C4", "LF1100C5", "LF1102S1", "LF1102S2", "LF1102S3", "LF1102S4", "LF1102B1", "LF1102B2", "LF1102B3", "LF1102B4", "LF1102C1", "LF1102C2", "LF1102C3", "LF1102C4", "LF1200S1", "LF1200B1", "LF1200C1", "LF1201S1", "LF1201B1", "LF1201C1", "NOPTCLE0", "CONTBOS1", "CONTBOS2", "CONTBOS3", "CONTBOS4", "CONTORD1", "CONTORD2", "CONTORD3", "CONTORD4", "CONTLGA2", "CONTLGA4", "CONTCLE1", "CONTCLE2", "CONTCLE3", "CONTCLE4", "DMBOSORD", "DMBOSLGA", "DMBOSCLE", "DMORDBOS", "DMORDLGA", "DMORDCLE", "DMLGABOS", "DMLGAORD", "DMLGACLE", "DMCLEBOS", "DMCLEORD", "DMCLELGA", "MSBOSORD", "MSBOSLGA", "MSBOSCLE", "MSORDBOS", "MSORDLGA", "MSORDCLE", "MSLGABOS", "MSLGAORD", "MSLGACLE", "MSCLEBOS", "MSCLEORD", "MSCLELGA", "DCBOSORD", "DCBOSCLE", "DCORDBOS", "DCORDLGA", "DCLGAORD", "DCLGACLE", "DCCLELGA", "MCORDBOS", "MCLGAORD" } ; static const char boeing2_rowsense[] = { 'B', 'G', 'G', 'N', 'L', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'E', 'E', 'E', 'E', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'G', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'G', 'G' } ; static const double boeing2_rowlb[] = { -42.42, 0.0, 0.0, -1e100, -1e100, 50., 0.0, 0.0, 9431., 0.0, 0.0, 0.0, 0.0, 0.0, 30., 45., 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 24., 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 241.0, 1881.0, 113.0, 241.0, 412.0, 495.0, 2194.0, 569.0, 413.0, 104.0, 569.0, 327.0, 3., 7., 1., 3., 4., 5., 7., 5., 4., 1., 6., 3., 0.0, 12.8, 19.2, 10.4, 36.0, 12.8, 0.0, 1., 2. } ; static const double boeing2_rowub[] = { -42.42, 1e100, 1e100, 1e100, 100000., 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 30., 45., 0.0, 0.0, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 302., 2352., 142., 302., 515., 619., 2743., 712., 517., 131., 712., 409., 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 12., 16., 24., 13., 45., 16., 5., 1e100, 1e100 } ; static const char *boeing2_colname[] = { "bogus", "PBOSORD0", "PBOSORD1", "PBOSORD2", "PBOSORD3", "PBOSORD4", "PBOSLGA0", "PBOSLGA1", "PBOSLGA2", "PBOSLGA3", "PBOSCLE0", "PBOSCLE1", "PBOSCLE2", "PBOSCLE3", "PORDBOS0", "PORDBOS1", "PORDBOS2", "PORDBOS3", "PORDBOS4", "PORDLGA0", "PORDLGA1", "PORDLGA2", "PORDLGA3", "PORDCLE0", "PORDCLE1", "PORDCLE2", "PORDCLE3", "PLGABOS0", "PLGABOS1", "PLGABOS2", "PLGABOS3", "PLGABOS4", "PLGABOS5", "PLGAORD0", "PLGAORD1", "PLGAORD2", "PLGAORD3", "PLGACLE0", "PLGACLE1", "PLGACLE2", "PCLEBOS0", "PCLEBOS1", "PCLEBOS2", "PCLEBOS3", "PCLEBOS4", "PCLEORD0", "PCLEORD1", "PCLEORD2", "PCLEORD3", "PCLEORD4", "PCLELGA0", "PCLELGA1", "PCLELGA2", "PCLELGA3", "BBOSORD0", "BBOSORD1", "BBOSCLE0", "BBOSCLE1", "BORDBOS0", "CBOSORD0", "CBOSORD1", "CBOSORD2", "CBOSORD3", "CBOSORD4", "CBOSCLE0", "CBOSCLE1", "CBOSCLE2", "CBOSCLE3", "CORDBOS0", "CORDBOS1", "CORDBOS2", "CORDBOS3", "CORDBOS4", "CORDLGA0", "CORDLGA1", "CORDLGA2", "CORDLGA3", "CLGAORD0", "CLGAORD1", "CLGAORD2", "CLGAORD3", "CLGACLE0", "CLGACLE1", "CLGACLE2", "CCLELGA0", "CCLELGA1", "CCLELGA2", "CCLELGA3", "GRDTIMO1", "GRDTIMN1", "GRDTIMO2", "GRDTIMN2", "GRDTIMN3", "GRDTIMN4", "N1003AC1", "N1003AC2", "N1003AC3", "N1003AC4", "N1005AC1", "N1005AC2", "N1005AC3", "N1005AC4", "N1011AC1", "N1011AC2", "N1011AC3", "N1011AC4", "N1013AC2", "N1013AC4", "N1015AC2", "N1015AC4", "N1017AC2", "N1017AC4", "N1019AC2", "N1019AC4", "N1021AC1", "N1021AC2", "N1021AC3", "N1021AC4", "N1002AC1", "N1002AC2", "N1002AC3", "N1002AC4", "N1004AC2", "N1004AC4", "N1006AC1", "N1006AC2", "N1006AC3", "N1006AC4", "N1008AC2", "N1008AC4", "N1010AC2", "N1010AC4", "N1012AC2", "N1012AC4", "N1014AC2", "N1014AC4", "N1100AC2", "N1100AC4", "N1102AC2", "N1102AC4", "N1200AC2", "N1200AC4", "N1201AC2", "N1201AC4" } ; static const double boeing2_collb[] = { -42.42, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -100., 0.0, -90., -45., -45., 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 } ; static const double boeing2_colub[] = { -42.42, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 1e100, 0., 1e100, 0., 0., 0., 7., 7., 2., 2., 7., 7., 2., 2., 7., 7., 2., 2., 14., 2., 7., 2., 7., 2., 7., 2., 7., 7., 2., 2., 7., 7., 2., 2., 7., 2., 7., 7., 2., 2., 14., 2., 14., 2., 7., 2., 14., 2., 7., 7., 7., 7., 14., 7., 14., 7. } ; static const int boeing2_rowndx[] = {-42, 1, 3, 8, 9, 10, 135, 18, 1, 3, 8, 9, 10, 135, 24, 25, 1, 3, 8, 9, 10, 135, 30, 31, 1, 3, 8, 9, 10, 135, 87, 88, 89, 1, 3, 8, 9, 10, 135, 102, 103, 1, 3, 8, 9, 10, 136, 30, 1, 3, 8, 9, 10, 136, 87, 1, 3, 8, 9, 10, 136, 102, 103, 104, 1, 3, 8, 9, 10, 136, 114, 1, 3, 8, 9, 10, 137, 21, 1, 3, 8, 9, 10, 137, 24, 1, 3, 8, 9, 10, 137, 87, 88, 1, 3, 8, 9, 10, 137, 102, 1, 3, 8, 9, 10, 138, 57, 58, 1, 3, 8, 9, 10, 138, 63, 64, 1, 3, 8, 9, 10, 138, 69, 70, 71, 1, 3, 8, 9, 10, 138, 90, 91, 1, 3, 8, 9, 10, 138, 104, 105, 1, 3, 8, 9, 10, 139, 54, 1, 3, 8, 9, 10, 139, 63, 1, 3, 8, 9, 10, 139, 69, 70, 1, 3, 8, 9, 10, 139, 104, 1, 3, 8, 9, 10, 140, 51, 1, 3, 8, 9, 10, 140, 57, 1, 3, 8, 9, 10, 140, 69, 1, 3, 8, 9, 10, 140, 90, 1, 3, 8, 9, 10, 141, 64, 1, 3, 8, 9, 10, 141, 71, 1, 3, 8, 9, 10, 141, 82, 1, 3, 8, 9, 10, 141, 88, 89, 90, 91, 1, 3, 8, 9, 10, 141, 105, 1, 3, 8, 9, 10, 141, 117, 1, 3, 8, 9, 10, 142, 31, 1, 3, 8, 9, 10, 142, 39, 1, 3, 8, 9, 10, 142, 42, 43, 1, 3, 8, 9, 10, 142, 88, 89, 1, 3, 8, 9, 10, 143, 36, 1, 3, 8, 9, 10, 143, 42, 1, 3, 8, 9, 10, 143, 88, 1, 3, 8, 9, 10, 144, 58, 1, 3, 8, 9, 10, 144, 70, 71, 1, 3, 8, 9, 10, 144, 81, 82, 1, 3, 8, 9, 10, 144, 91, 1, 3, 8, 9, 10, 144, 103, 104, 105, 1, 3, 8, 9, 10, 145, 25, 1, 3, 8, 9, 10, 145, 43, 1, 3, 8, 9, 10, 145, 48, 1, 3, 8, 9, 10, 145, 89, 1, 3, 8, 9, 10, 145, 103, 1, 3, 8, 9, 10, 146, 70, 1, 3, 8, 9, 10, 146, 78, 1, 3, 8, 9, 10, 146, 81, 1, 3, 8, 9, 10, 146, 103, 104, 1, 3, 12, 13, 159, 19, 1, 3, 12, 13, 159, 26, 27, 1, 3, 12, 13, 160, 22, 1, 3, 12, 13, 160, 26, 1, 3, 12, 13, 161, 59, 60, 1, 3, 12, 13, 159, 20, 1, 3, 12, 13, 159, 28, 29, 1, 3, 12, 13, 159, 34, 35, 1, 3, 12, 13, 159, 97, 98, 99, 1, 3, 12, 13, 159, 110, 111, 1, 3, 12, 13, 160, 23, 1, 3, 12, 13, 160, 28, 1, 3, 12, 13, 160, 97, 98, 1, 3, 12, 13, 160, 110, 1, 3, 12, 13, 161, 61, 62, 1, 3, 12, 13, 161, 67, 68, 1, 3, 12, 13, 161, 75, 76, 77, 1, 3, 12, 13, 161, 100, 101, 1, 3, 12, 13, 161, 112, 113, 1, 3, 12, 13, 162, 56, 1, 3, 12, 13, 162, 67, 1, 3, 12, 13, 162, 75, 76, 1, 3, 12, 13, 162, 112, 1, 3, 12, 13, 163, 35, 1, 3, 12, 13, 163, 41, 1, 3, 12, 13, 163, 46, 47, 1, 3, 12, 13, 163, 98, 99, 1, 3, 12, 13, 164, 38, 1, 3, 12, 13, 164, 46, 1, 3, 12, 13, 164, 98, 1, 3, 12, 13, 165, 76, 1, 3, 12, 13, 165, 80, 1, 3, 12, 13, 165, 85, 1, 3, 12, 13, 165, 111, 112, 14, 2, 3, 14, 2, 3, 15, 2, 3, 15, 2, 3, 16, 2, 3, 17, 2, 3, 2, 3, 4, 5, 6, 7, 10, 14, 11, 13, 18, 19, 121, 125, 147, 2, 3, 4, 5, 6, 7, 10, 15, 18, 122, 126, 147, 2, 3, 4, 5, 6, 16, 11, 13, 20, 123, 127, 2, 3, 4, 5, 6, 17, 11, 13, 20, 124, 128, 2, 3, 4, 5, 6, 7, 10, 14, 11, 13, 21, 22, 120, 121, 131, 149, 2, 3, 4, 5, 6, 7, 10, 15, 21, 120, 122, 132, 149, 2, 3, 4, 5, 6, 16, 11, 13, 23, 120, 123, 133, 2, 3, 4, 5, 6, 17, 11, 13, 23, 120, 124, 134, 2, 3, 4, 5, 6, 7, 10, 14, 11, 13, 24, 25, 26, 27, 120, 121, 125, 149, 147, 157, 2, 3, 4, 5, 6, 7, 10, 15, 24, 25, 120, 122, 126, 149, 147, 157, 2, 3, 4, 5, 6, 16, 11, 13, 28, 29, 120, 123, 127, 2, 3, 4, 5, 6, 17, 11, 13, 28, 29, 120, 124, 128, 2, 3, 4, 5, 6, 7, 10, 15, 30, 31, 122, 126, 148, 147, 154, 2, 3, 4, 5, 6, 17, 11, 13, 34, 35, 124, 128, 167, 2, 3, 4, 5, 6, 7, 10, 15, 36, 120, 129, 132, 155, 2, 3, 4, 5, 6, 17, 11, 13, 38, 120, 130, 134, 2, 3, 4, 5, 6, 7, 10, 15, 39, 129, 126, 154, 2, 3, 4, 5, 6, 17, 11, 13, 41, 130, 128, 167, 2, 3, 4, 5, 6, 7, 10, 15, 42, 43, 120, 129, 126, 155, 154, 157, 2, 3, 4, 5, 6, 17, 11, 13, 46, 47, 120, 130, 128, 167, 2, 3, 4, 5, 6, 7, 10, 14, 11, 13, 48, 49, 120, 131, 125, 157, 2, 3, 4, 5, 6, 7, 10, 15, 48, 120, 132, 126, 157, 2, 3, 4, 5, 6, 16, 11, 13, 50, 120, 133, 127, 2, 3, 4, 5, 6, 17, 11, 13, 50, 120, 134, 128, 2, 3, 4, 5, 6, 7, 10, 14, 11, 13, 51, 52, 120, 125, 131, 152, 2, 3, 4, 5, 6, 7, 10, 15, 51, 120, 126, 132, 152, 2, 3, 4, 5, 6, 16, 11, 13, 53, 120, 127, 133, 2, 3, 4, 5, 6, 17, 11, 13, 53, 120, 128, 134, 2, 3, 4, 5, 6, 7, 10, 15, 54, 126, 129, 151, 2, 3, 4, 5, 6, 17, 11, 13, 56, 128, 130, 2, 3, 4, 5, 6, 7, 10, 14, 11, 13, 57, 58, 59, 60, 120, 125, 121, 152, 150, 156, 2, 3, 4, 5, 6, 7, 10, 15, 57, 58, 120, 126, 122, 152, 150, 156, 2, 3, 4, 5, 6, 16, 11, 13, 61, 62, 120, 127, 123, 166, 2, 3, 4, 5, 6, 17, 11, 13, 61, 62, 120, 128, 124, 166, 2, 3, 4, 5, 6, 7, 10, 15, 63, 64, 126, 122, 151, 150, 153, 2, 3, 4, 5, 6, 17, 11, 13, 67, 68, 128, 124, 166, 2, 3, 4, 5, 6, 7, 10, 15, 69, 70, 71, 120, 126, 122, 152, 151, 150, 158, 156, 153, 2, 3, 4, 5, 6, 17, 11, 13, 75, 76, 77, 120, 128, 124, 166, 2, 3, 4, 5, 6, 7, 10, 15, 78, 120, 132, 129, 158, 2, 3, 4, 5, 6, 17, 11, 13, 80, 120, 134, 130, 2, 3, 4, 5, 6, 7, 10, 15, 81, 82, 120, 132, 122, 158, 156, 153, 2, 3, 4, 5, 6, 17, 11, 13, 85, 86, 120, 134, 124, 2, 3, 4, 5, 6, 7, 10, 15, 87, 88, 89, 90, 91, 120, 148, 149, 147, 155, 154, 153, 157, 152, 150, 156, 2, 3, 4, 5, 6, 17, 11, 13, 97, 98, 99, 100, 101, 120, 167, 166, 2, 3, 4, 5, 6, 7, 10, 15, 102, 103, 104, 105, 120, 149, 147, 148, 157, 158, 156, 151, 150, 153, 2, 3, 4, 5, 6, 17, 11, 13, 110, 111, 112, 113, 120, 166, 2, 3, 4, 5, 6, 7, 10, 15, 114, 122, 129, 148, 2, 3, 4, 5, 6, 17, 11, 13, 116, 124, 130, 2, 3, 4, 5, 6, 7, 10, 15, 117, 129, 122, 153, 2, 3, 4, 5, 6, 17, 11, 13, 119, 130, 124 } ; static const int boeing2_colndx[] = {-42, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143 } ; static const double boeing2_coeff[] = { -42.42, .075, -.075, 1., .86441, -.86441, 1., -1., .075, -.075, 1., .87605, -.87605, 1., -1., -1., .075, -.075, 1., .91637, -.91637, 1., -1., -1., .075, -.075, 1., .91722, -.91722, 1., -1., -1., -1., .075, -.075, 1., .87605, -.87605, 1., -1., -1., .027, -.027, 1., .18557, -.18557, 1., -1., .027, -.027, 1., .18557, -.18557, 1., -1., .027, -.027, 1., 1.60685, -1.60685, 1., -1., -1., -1., .027, -.027, 1., .18557, -.18557, 1., -1., .053, -.053, 1., .56156, -.56156, 1., -1., .053, -.053, 1., .56156, -.56156, 1., -1., .053, -.053, 1., .60273, -.60273, 1., -1., -1., .053, -.053, 1., .56156, -.56156, 1., -1., .075, -.075, 1., .87605, -.87605, 1., -1., -1., .075, -.075, 1., .91637, -.91637, 1., -1., -1., .075, -.075, 1., .91722, -.91722, 1., -1., -1., -1., .075, -.075, 1., .87605, -.87605, 1., -1., -1., .075, -.075, 1., .91637, -.91637, 1., -1., -1., .068, -.068, 1., .7308, -.7308, 1., -1., .068, -.068, 1., .7308, -.7308, 1., -1., .068, -.068, 1., .73165, -.73165, 1., -1., -1., .068, -.068, 1., .7308, -.7308, 1., -1., .035, -.035, 1., .3145, -.3145, 1., -1., .035, -.035, 1., .3145, -.3145, 1., -1., .035, -.035, 1., .3145, -.3145, 1., -1., .035, -.035, 1., .3145, -.3145, 1., -1., .027, -.027, 1., .18557, -.18557, 1., -1., .027, -.027, 1., .18557, -.18557, 1., -1., .027, -.027, 1., .18557, -.18557, 1., -1., .027, -.027, 1., 1.6077, -1.6077, 1., -1., -1., -1., -1., .027, -.027, 1., .18557, -.18557, 1., -1., .027, -.027, 1., .18557, -.18557, 1., -1., .068, -.068, 1., .7308, -.7308, 1., -1., .068, -.068, 1., .7308, -.7308, 1., -1., .068, -.068, 1., .73165, -.73165, 1., -1., -1., .068, -.068, 1., .73165, -.73165, 1., -1., -1., .037, -.037, 1., .41715, -.41715, 1., -1., .037, -.037, 1., .41715, -.41715, 1., -1., .037, -.037, 1., .41715, -.41715, 1., -1., .053, -.053, 1., .56156, -.56156, 1., -1., .053, -.053, 1., .60273, -.60273, 1., -1., -1., .053, -.053, 1., .60273, -.60273, 1., -1., -1., .053, -.053, 1., .56156, -.56156, 1., -1., .053, -.053, 1., 1.23087, -1.23087, 1., -1., -1., -1., .035, -.035, 1., .3145, -.3145, 1., -1., .035, -.035, 1., .3145, -.3145, 1., -1., .035, -.035, 1., .3145, -.3145, 1., -1., .035, -.035, 1., .3145, -.3145, 1., -1., .035, -.035, 1., .3145, -.3145, 1., -1., .037, -.037, 1., .41715, -.41715, 1., -1., .037, -.037, 1., .41715, -.41715, 1., -1., .037, -.037, 1., .41715, -.41715, 1., -1., .037, -.037, 1., 1.0453, -1.0453, 1., -1., -1., .75, -.75, .86441, -.86441, 1., -1., .75, -.75, .87605, -.87605, 1., -1., -1., .53, -.53, .56156, -.56156, 1., -1., .53, -.53, .56156, -.56156, 1., -1., .75, -.75, .87605, -.87605, 1., -1., -1., .75, -.75, .86441, -.86441, 1., -1., .75, -.75, .87605, -.87605, 1., -1., -1., .75, -.75, .91637, -.91637, 1., -1., -1., .75, -.75, .91722, -.91722, 1., -1., -1., -1., .75, -.75, .87605, -.87605, 1., -1., -1., .53, -.53, .56156, -.56156, 1., -1., .53, -.53, .56156, -.56156, 1., -1., .53, -.53, .60273, -.60273, 1., -1., -1., .53, -.53, .56156, -.56156, 1., -1., .75, -.75, .87605, -.87605, 1., -1., -1., .75, -.75, .91637, -.91637, 1., -1., -1., .75, -.75, .91722, -.91722, 1., -1., -1., -1., .75, -.75, .87605, -.87605, 1., -1., -1., .75, -.75, .91637, -.91637, 1., -1., -1., .68, -.68, .7308, -.7308, 1., -1., .68, -.68, .7308, -.7308, 1., -1., .68, -.68, .73165, -.73165, 1., -1., -1., .68, -.68, .7308, -.7308, 1., -1., .68, -.68, .7308, -.7308, 1., -1., .68, -.68, .7308, -.7308, 1., -1., .68, -.68, .73165, -.73165, 1., -1., -1., .68, -.68, .73165, -.73165, 1., -1., -1., .37, -.37, .41715, -.41715, 1., -1., .37, -.37, .41715, -.41715, 1., -1., .37, -.37, .41715, -.41715, 1., -1., .37, -.37, .41715, -.41715, 1., -1., .37, -.37, .41715, -.41715, 1., -1., .37, -.37, .41715, -.41715, 1., -1., .37, -.37, 1.0453, -1.0453, 1., -1., -1., 1., .65, .65, 1., -.05, -.05, 1., .275, .275, 1., -.02889, -.02889, 1., -.03611, -.03611, 1., -.01333, -.01333, .01, .01, 7.98429, 1., .86441, 351.81396, 211.088376, 2.32729, 25.93224, 12.96612, 305., 12., 1., -1., 1., .02, .02, 2.51914, 1., .86441, 113.23743, 67.942458, 2.10966, 98., 1., -1., 1., .03, .03, 3.15178, 1., .86441, 2.10966, 34.57631, 17.288155, 30., 1., -1., .04, .04, 1.99337, 1., .86441, 2.10966, 12.96612, 6.48306, 11.25, 1., -1., 4.04337, 4.04337, 5.83404, 1., .56156, 228.55299, 137.131794, 1000., 16.84665, 8.423325, 305., 12., 1., 1., -1., 1., 1.60964, 1.60964, 1.82258, 1., .56156, 73.56374, 44.138244, 2000., 98., 1., 1., -1., 1., 1.93119, 1.93119, 2.27351, 1., .56156, 3000., 22.4622, 11.2311, 30., 1., 1., -1., 1.34618, 1.34618, 1.41795, 1., .56156, 1500., 8.42333, 4.211665, 11.25, 1., 1., -1., 1.1, 1.1, 9.91398, 2., .87605, 356.55371, 213.932226, 25., 26.2816, 13.1408, 305., 305., 12., 12., 2., 1., -1., 1., 1., 1., 1.2, 1.2, 3.07692, 2., .87605, 114.76299, 68.857794, 25., 98., 98., 2., 1., -1., 1., 1., 1., 1.3, 1.3, 3.83055, 2., .87605, 26., 35.04214, 17.52107, 30., 30., 2., 1., -1., 2.34647, 2.34647, 2.3665, 2., .87605, 27., 13.1408, 6.5704, 11.25, 11.25, 2., 1., -1., 2.36783, 2.36783, 3.16965, 2., .91637, 120.04449, 72.026694, 2.65943, 98., 98., 1., -1., 1., 1., 1., 1.90292, 1.90292, 2.4431, 2., .91637, 2.65943, 13.74556, 6.87278, 11.25, 11.25, 1., -1., 1., 1.36416, 1.36416, 1.49045, 1., .41715, 54.64705, 32.78823, 1.25093, 98., 1., 1., -1., 1., 1.14401, 1.14401, 1.14359, 1., .41715, 1.25093, 6.25729, 3.128645, 11.25, 1., 1., -1., 1.64736, 1.64736, 2.21183, 1., .7308, 95.73444, 57.440664, 1.85313, 98., 1., -1., 1., 1.33312, 1.33312, 1.73951, 1., .7308, 1.85313, 10.96196, 5.48098, 11.25, 1., -1., 1., 2.55381, 2.55381, 2.7448, 2., .73165, 95.8463, 57.50778, 2.30477, 98., 98., 2., 1., -1., 1., 1., 1., 2.14431, 2.14431, 2.09214, 2., .73165, 2.30477, 10.97477, 5.487385, 11.25, 11.25, 2., 1., -1., 1., 3.12679, 3.12679, 4.07994, 1., .3145, 128.00075, 76.80045, 1.34295, 9.43495, 4.717475, 305., 12., 1., 1., -1., 1., 1.18965, 1.18965, 1.25435, 1., .3145, 41.19926, 24.719556, 1.05384, 98., 1., 1., -1., 1., 1.42472, 1.42472, 1.55704, 1., .3145, 1.05384, 12.57993, 6.289965, 30., 1., 1., -1., 1.0003, 1.0003, .94855, 1., .3145, 1.05384, 4.71747, 2.358735, 11.25, 1., 1., -1., 3.12679, 3.12679, 4.07994, 1., .3145, 128.00075, 76.80045, 1.34295, 9.43495, 4.717475, 305., 12., 1., 1., -1., 1., 1.18965, 1.18965, 1.25435, 1., .3145, 41.19926, 24.719556, 1.05384, 98., 1., 1., -1., 1., 1.42472, 1.42472, 1.55704, 1., .3145, 1.05384, 12.57993, 6.289965, 30., 1., 1., -1., 1.0003, 1.0003, .94855, 1., .3145, 1.05384, 4.71747, 2.358735, 11.25, 1., 1., -1., 1.64736, 1.64736, 2.21183, 1., .7308, 95.73444, 57.440664, 1.85313, 98., 1., -1., 1., 1.33312, 1.33312, 1.73951, 1., .7308, 1.85313, 10.96196, 5.48098, 11.25, 1., -1., 7.17016, 7.17016, 9.91398, 2., .87605, 356.55371, 213.932226, 3.12813, 26.2816, 13.1408, 305., 305., 12., 12., 2., 1., -1., 1., 1., 1., 2.79929, 2.79929, 3.07692, 2., .87605, 114.76299, 68.857794, 2.58202, 98., 98., 2., 1., -1., 1., 1., 1., 3.35591, 3.35591, 3.83055, 2., .87605, 2.58202, 35.04214, 17.52107, 30., 30., 2., 1., -1., 1., 2.34647, 2.34647, 2.3665, 2., .87605, 2.58202, 13.1408, 6.5704, 11.25, 11.25, 2., 1., -1., 1., 2.36783, 2.36783, 3.16965, 2., .91637, 120.04449, 72.026694, 2.65943, 98., 98., 1., -1., 1., 1., 1., 1.90292, 1.90292, 2.4431, 2., .91637, 2.65943, 13.74556, 6.87278, 11.25, 11.25, 1., -1., 1., 3.27428, 3.27428, 3.70262, 3., .91722, 120.15637, 72.093822, 3.11107, 98., 98., 98., 2., 1., -1., 1., 1., 1., 1., 1., 1., 2.71411, 2.71411, 2.79573, 3., .91722, 3.11107, 13.75836, 6.87918, 11.25, 11.25, 11.25, 2., 1., -1., 1., 1.36416, 1.36416, 1.49045, 1., .41715, 54.64705, 32.78823, 1.25093, 98., 1., 1., -1., 1., 1.14401, 1.14401, 1.14359, 1., .41715, 1.25093, 6.25729, 3.128645, 11.25, 1., 1., -1., 2.08463, 2.08463, 2.44827, 2., .60273, 78.95706, 47.374236, 2.05723, 98., 98., 1., 1., -1., 1., 1., 1., 1.71382, 1.71382, 1.84718, 2., .60273, 2.05723, 9.04089, 4.520445, 11.25, 11.25, 1., 1., -1., 6.07357, 6.07357, 6.77953, 5., 1.79328, 234.91937, 140.951622, 5.69309, 98., 98., 98., 98., 98., 4., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 5.06059, 5.06059, 5.16223, 5., 1.79328, 5.69309, 26.89915, 13.449575, 11.25, 11.25, 11.25, 11.25, 11.25, 4., 1., 1., 5.16712, 5.16712, 6.24657, 4., 1.79242, 234.80756, 140.884536, 5.24145, 98., 98., 98., 98., 2., 1., 1., 1., 1., 1., 1., 1., 1., 1., 4.24939, 4.24939, 4.8096, 4., 1.79242, 5.24145, 26.88635, 13.443175, 11.25, 11.25, 11.25, 11.25, 2., 1., .72047, .72047, .95782, 1., .18557, 24.31007, 14.586042, .8063, 98., 1., -1., 1., .5698, .5698, .70359, 1., .18557, .8063, 2.7836, 1.3918, 11.25, 1., -1., .72047, .72047, .95782, 1., .18557, 24.31007, 14.586042, .8063, 98., 1., -1., 1., .5698, .5698, .70359, 1., .18557, .8063, 2.7836, 1.3918, 11.25, 1., -1. } ; #define INFTY_CHECK(zz_val_zz,zz_InftyIn_zz,zz_InftyOut_zz) \ (((zz_val_zz) == (zz_InftyIn_zz))?(zz_InftyOut_zz):\ (((zz_val_zz) == (-zz_InftyIn_zz))?(-zz_InftyOut_zz):(zz_val_zz))) static consys_struct *load_consys ( const int m, const int n, const int q, const int maxColLen, const double infty, const char *probname, const int objndx, const char *objname, const char **rowname, const char *rowsense, const double *rlb, const double *rub, const char **colname, const double *vlb, const double *vub, const int *colndx, const int *rowndx, const double *coeff) /* A routine to load a problem into a constraint system from initialised data arrays. This routine has far too many parameters, but it'll do for the task at hand. The idea is that a fairly simple awk script (or equivalent) has preprocessed an MPS file into a set of static arrays. This routine simply loads the arrays into a consys. Rows and columns are assumed to be numbered from 1, and position [0] of all arrays is garbage. This goes along with dylp's convention of 1-based indexing. The objective function is assumed to be included in (colndx,rowndx,coeff) just like any other row. A separate objective vector is built along with the constraint system, and the objective row is deleted from the constraint system at the end of the routine. Infinity is a never-ending pain. It's expected that the data arrays will use the value 1e100 as infinity (well outside any reasonable value, but well within the range of a float). This is (almost) hardwired --- a single local variable, mpsInfinity, is initialised to 1e100. Any occurrences of mpsInfinity in the input data will be replaced by the value infty passed in as a parameter. The rlb and rub arrays are expected to contain correct values as if for a range constraint. This routine will take care of dylp's idiosyncracies for G (>=) constraints. It's expected that the preprocessing script will change the rowsense letter to R to indicate an honest range constraint (i.e., finite lower and upper bounds). The routine will attempt to free the constraint system in the event of an error during construction. There's a nontrivial chance of failure. Parameters: m,n,q: number of rows, columns, and coefficients, respectively maxColLen: maximum number of nonzeros in a column infty: the desired value for infinity (either IEEE infinity, or the classic finite infinity, DBL_MAX) probname: the problem name objndx: index of the objective function objname: name of the objective function rowname: names for rows (constraints) rowsense: the rowsense letters N, E, L, G, from the MPS ROWS section, modified to include R for range constraints. rlb,rub: row lower and upper bounds, respectively. See notes above. colname: names for columns (variables) vlb,vub: column lower and upper bounds, respectively. colndx,rowndx,coeff: three correlated arrays specifying the nonzero coefficients of the constraint matrix, in column-major order. Returns: a pointer to a constraint system, or NULL if an error occurs. */ { int i,j,k,curCol,v ; const double mpsInfty = 1e100 ; pkvec_struct *ai,*aj ; pkcoeff_struct *coeffj ; consys_struct *sys ; char typlett ; contyp_enum ctypi ; double rlbi,rubi,cj,aij,vlbj,vubj ; bool retval ; int printlvl = 0 ; const char *rtnnme = "load_consys" ; /* Define the desired set of attached vectors and any options. */ const flags parts = CONSYS_OBJ | CONSYS_VUB | CONSYS_VLB | CONSYS_VTYP | CONSYS_RHS | CONSYS_RHSLOW | CONSYS_CTYP ; const flags opts = CONSYS_WRNATT ; /* Start off by creating an empty constraint system with the required capacity. Insert the objective name while we're at it. Note that we have one extra row, the objective, which we'll filter out as the need arises. */ sys = consys_create(probname,parts,opts,m,n,infty) ; if (sys == NULL) { errmsg(152,rtnnme,probname) ; return (NULL) ; } consys_chgnme(sys,'o',0,objname) ; /* Insert empty rows, excepting the objective function, which is kept separately. We need to convert the rowsense letter to the appropriate contyp_enum value, and we need to convert any mpsInfty values to the actual infty value. */ ai = pkvec_new(0) ; for (i = 1 ; i <= m ; i++) { ai->nme = rowname[i] ; typlett = rowsense[i] ; switch (typlett) { case 'L': { ctypi = contypLE ; break ; } case 'E': { ctypi = contypEQ ; break ; } case 'R': { ctypi = contypRNG ; break ; } case 'G': { ctypi = contypGE ; break ; } case 'N': { ctypi = contypNB ; break ; } default: { ctypi = contypINV ; errmsg(154,rtnnme,sys->nme,((unsigned) typlett),typlett,ai->nme) ; break ; } } /* One of dylp's idiosyncracies is that it uses rhs to hold the right-hand-side for both >= and <= constraints. Because the rhs and rhslow arrays are uniformly assumed to be rhslow[i] <= ax <= rhs[i], we need a special case for a >= constraint. */ if (ctypi == contypGE) { rlbi = INFTY_CHECK(rub[i],mpsInfty,infty) ; rubi = INFTY_CHECK(rlb[i],mpsInfty,infty) ; } else { rlbi = INFTY_CHECK(rlb[i],mpsInfty,infty) ; rubi = INFTY_CHECK(rub[i],mpsInfty,infty) ; } retval = consys_addrow_pk(sys,'c',ctypi,ai,rubi,rlbi,NULL,NULL) ; # ifndef DYLP_NDEBUG if (printlvl >= 2) { typlett = (ctypi == contypGE)?'>':'<' ; dyio_outfmt(dy_logchn,dy_gtxecho, "%s: installing row %g <= %s (%d) <= %g ", rtnnme,rlb[i],ai->nme,i,rub[i]) ; dyio_outfmt(dy_logchn,dy_gtxecho,"as %g %c= %s (%d, %s) %c= %g.\n", rlbi,typlett,consys_nme(sys,'c',ai->ndx,FALSE,NULL),ai->ndx, consys_prtcontyp(ctypi),typlett,rubi) ; } # endif if (retval == FALSE) { errmsg(156,rtnnme,"row",sys->nme,ai->nme) ; } if (retval == FALSE || ctypi == contypINV) { retval = FALSE ; break ; } } if (ai != NULL) pkvec_free(ai) ; if (retval == FALSE) { consys_free(sys) ; return (NULL) ; } /* Now load the coefficient matrix. We need to scan the column-major arrays that specify the coefficients and load the columns into memory. The approach is to scan along, loading a vector with coefficients, until we hit a change of column index. At that point, the current column is added to the constraint system and we start again. Do a bit of prep before we start into the scan loop: Allocate a packed vector large enough for the longest column, and make it look like colndx[1] is the current column, and reset column length and objective coefficient. */ aj = pkvec_new(maxColLen) ; coeffj = aj->coeffs ; curCol = colndx[1] ; v = 0 ; cj = 0.0 ; for (k = 1 ; k <= q ; k++) { i = rowndx[k] ; if (i == objndx) { cj = INFTY_CHECK(coeff[k],mpsInfty,infty) ; } else { coeffj[v].ndx = i ; aij = INFTY_CHECK(coeff[k],mpsInfty,infty) ; coeffj[v].val = coeff[k] ; v++ ; } /* Have we just processed the last coefficient for this column? If so, install it. */ if (k+1 > q || colndx[k+1] != curCol) { j = curCol ; aj->cnt = v ; aj->nme = colname[j] ; vlbj = INFTY_CHECK(vlb[j],mpsInfty,infty) ; vubj = INFTY_CHECK(vub[j],mpsInfty,infty) ; retval = consys_addcol_pk(sys,vartypCON,aj,cj,vlbj,vubj) ; # ifndef DYLP_NDEBUG if (printlvl >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "%s: installing column %g <= %s (%d) <= %g, %d coefficients, ", rtnnme,vlb[j],aj->nme,j,vub[j],aj->cnt) ; dyio_outfmt(dy_logchn,dy_gtxecho,"as %g <= %s (%d) <= %g, cj = %g.\n", vlbj,consys_nme(sys,'v',aj->ndx,FALSE,NULL),aj->ndx,vubj,cj) ; } # endif if (retval == FALSE) { errmsg(156,rtnnme,"column",sys->nme,aj->nme) ; break ; } if (k+1 <= q) { v = 0 ; cj = 0.0 ; curCol = colndx[k+1] ; } } } if (aj != NULL) pkvec_free(aj) ; if (retval == FALSE) { consys_free(sys) ; return (NULL) ; } /* One final act: delete the objective function from the constraint system. */ retval = consys_delrow_stable(sys,objndx) ; if (retval == FALSE) { errmsg(112,rtnnme,sys->nme,"delete","constraint", consys_nme(sys,'c',objndx,FALSE,NULL),objndx) ; consys_free(sys) ; return (NULL) ; } { return (sys) ; } } /* Convenience routines to create specific constraint systems. */ consys_struct *dytest_exmip1sys (lptols_struct *tols) /* Create a constraint system loaded with the exmip1 example. Parameters: tols: lptols_struct, used to specify infinity Returns: pointer to a loaded constraint system, or NULL if there's an error. */ { consys_struct *sys ; sys = load_consys(exmip1_rowcnt,exmip1_colcnt,exmip1_coeffcnt, exmip1_maxColLen,tols->inf,"exmip1", exmip1_objndx,exmip1_objname, exmip1_rowname,exmip1_rowsense,exmip1_rowlb,exmip1_rowub, exmip1_colname,exmip1_collb,exmip1_colub, exmip1_colndx,exmip1_rowndx,exmip1_coeff) ; return (sys) ; } consys_struct *dytest_exprimalraysys (lptols_struct *tols) /* Create a constraint system loaded with the exprimalray example. Parameters: tols: lptols_struct, used to specify infinity Returns: pointer to a loaded constraint system, or NULL if there's an error. */ { consys_struct *sys ; sys = load_consys(exprimalray_rowcnt,exprimalray_colcnt,exprimalray_coeffcnt, exprimalray_maxColLen,tols->inf,"exprimalray", exprimalray_objndx,exprimalray_objname, exprimalray_rowname,exprimalray_rowsense, exprimalray_rowlb,exprimalray_rowub, exprimalray_colname,exprimalray_collb,exprimalray_colub, exprimalray_colndx,exprimalray_rowndx,exprimalray_coeff) ; return (sys) ; } consys_struct *dytest_exdualraysys (lptols_struct *tols) /* Create a constraint system loaded with the exdualray example. Parameters: tols: lptols_struct, used to specify infinity Returns: pointer to a loaded constraint system, or NULL if there's an error. */ { consys_struct *sys ; sys = load_consys(exdualray_rowcnt,exdualray_colcnt,exdualray_coeffcnt, exdualray_maxColLen,tols->inf,"exdualray", exdualray_objndx,exdualray_objname, exdualray_rowname,exdualray_rowsense, exdualray_rowlb,exdualray_rowub, exdualray_colname,exdualray_collb,exdualray_colub, exdualray_colndx,exdualray_rowndx,exdualray_coeff) ; return (sys) ; } consys_struct *dytest_galenetsys (lptols_struct *tols) /* Create a constraint system loaded with the galenet example. Parameters: tols: lptols_struct, used to specify infinity Returns: pointer to a loaded constraint system, or NULL if there's an error. */ { consys_struct *sys ; sys = load_consys(galenet_rowcnt,galenet_colcnt,galenet_coeffcnt, galenet_maxColLen,tols->inf,"galenet", galenet_objndx,galenet_objname, galenet_rowname,galenet_rowsense, galenet_rowlb,galenet_rowub, galenet_colname,galenet_collb,galenet_colub, galenet_colndx,galenet_rowndx,galenet_coeff) ; return (sys) ; } consys_struct *dytest_galenetmixedsys (lptols_struct *tols) /* Create a constraint system loaded with the galenetmixed example. Parameters: tols: lptols_struct, used to specify infinity Returns: pointer to a loaded constraint system, or NULL if there's an error. */ { consys_struct *sys ; sys = load_consys(galenetmixed_rowcnt,galenetmixed_colcnt, galenetmixed_coeffcnt, galenetmixed_maxColLen,tols->inf,"galenetmixed", galenetmixed_objndx,galenetmixed_objname, galenetmixed_rowname,galenetmixed_rowsense, galenetmixed_rowlb,galenetmixed_rowub, galenetmixed_colname,galenetmixed_collb,galenetmixed_colub, galenetmixed_colndx,galenetmixed_rowndx, galenetmixed_coeff) ; return (sys) ; } consys_struct *dytest_galenetleqsys (lptols_struct *tols) /* Create a constraint system loaded with the galenetleq example. Parameters: tols: lptols_struct, used to specify infinity Returns: pointer to a loaded constraint system, or NULL if there's an error. */ { consys_struct *sys ; sys = load_consys(galenetleq_rowcnt,galenetleq_colcnt,galenetleq_coeffcnt, galenetleq_maxColLen,tols->inf,"galenetleq", galenetleq_objndx,galenetleq_objname, galenetleq_rowname,galenetleq_rowsense, galenetleq_rowlb,galenetleq_rowub, galenetleq_colname,galenetleq_collb,galenetleq_colub, galenetleq_colndx,galenetleq_rowndx,galenetleq_coeff) ; return (sys) ; } consys_struct *dytest_galenetbndssys (lptols_struct *tols) /* Create a constraint system loaded with the galenetbnds example. Parameters: tols: lptols_struct, used to specify infinity Returns: pointer to a loaded constraint system, or NULL if there's an error. */ { consys_struct *sys ; sys = load_consys(galenetbnds_rowcnt,galenetbnds_colcnt,galenetbnds_coeffcnt, galenetbnds_maxColLen,tols->inf,"galenetbnds", galenetbnds_objndx,galenetbnds_objname, galenetbnds_rowname,galenetbnds_rowsense, galenetbnds_rowlb,galenetbnds_rowub, galenetbnds_colname,galenetbnds_collb,galenetbnds_colub, galenetbnds_colndx,galenetbnds_rowndx,galenetbnds_coeff) ; return (sys) ; } consys_struct *dytest_afirosys (lptols_struct *tols) /* Create a constraint system loaded with the afiro example. Parameters: tols: lptols_struct, used to specify infinity Returns: pointer to a loaded constraint system, or NULL if there's an error. */ { consys_struct *sys ; sys = load_consys(afiro_rowcnt,afiro_colcnt,afiro_coeffcnt, afiro_maxColLen,tols->inf,"afiro", afiro_objndx,afiro_objname, afiro_rowname,afiro_rowsense,afiro_rowlb,afiro_rowub, afiro_colname,afiro_collb,afiro_colub, afiro_colndx,afiro_rowndx,afiro_coeff) ; return (sys) ; } consys_struct *dytest_boeing2sys (lptols_struct *tols) /* Create a constraint system loaded with the boeing2 example. Parameters: tols: lptols_struct, used to specify infinity Returns: pointer to a loaded constraint system, or NULL if there's an error. */ { consys_struct *sys ; sys = load_consys(boeing2_rowcnt,boeing2_colcnt,boeing2_coeffcnt, boeing2_maxColLen,tols->inf,"boeing2", boeing2_objndx,boeing2_objname, boeing2_rowname,boeing2_rowsense,boeing2_rowlb,boeing2_rowub, boeing2_colname,boeing2_collb,boeing2_colub, boeing2_colndx,boeing2_rowndx,boeing2_coeff) ; return (sys) ; } DyLP-1.10.4/DyLP/test/unitTest.c0000644000175200017520000011127111573762145014643 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2008 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This is the main routine for the dylp unit test. The following defines select the test problems, a convenience during code development. Normally, you'll want them all set to 1 for a thorough test. */ #define RUN_EXMIP1 1 #define RUN_AFIRO 1 #define RUN_BOEING2 1 #define RUN_EXPRIMALRAY 1 #define RUN_EXDUALRAY 1 #define RUN_GALENETBNDS 1 #define RUN_GALENETLEQ 1 #define RUN_GALENETMIXED 1 #define RUN_GALENET 1 #include "dylp.h" #include /* Macro cleverness to specify a default error message file. Depends on ANSI C merge of consecutive string constants. DYLP_ERRMSGDIR should have the form "path/to/distribution/DyLP/src/Dylp/", including the quotes. See DyLP/src/DylpStdLib/DylpConfig.h for further information. */ #ifdef DYLP_ERRMSGDIR # define DYLP_ERRMSGPATH DYLP_ERRMSGDIR "dy_errmsgs.txt" #else # define DYLP_ERRMSGPATH "../src/Dylp/dy_errmsgs.txt" #endif /* Variables which control i/o operations. ttyout i/o id for output to the user's terminal ttyin i/o id for input from the user's terminal dy_logchn i/o id for the execution log file dy_gtxecho controls echoing of generated text to stdout */ ioid dy_logchn ; bool dy_gtxecho ; static lpret_enum do_lp (lpprob_struct *lp, lptols_struct *lptols, lpopts_struct *lpopts, int printlvl) /* This routine is a convenience wrapper which handles statistics and timing. It also allows for easy adjustment of the print level by making a local copy of the options. Parameters: lp: lp problem to be solved lptols: tolerances lpopts: options printlvl: desired output level Returns: lp status code; lpINV is used in the event of a fatal error that's not really dylp's fault. */ { lpret_enum lpret ; lpopts_struct *local_lpopts ; lpstats_struct *local_lpstats ; consys_struct *sys ; # if MALLOC_DEBUG == 2 const char *rtnnme = "do_lp" ; # endif lpret = lpINV ; sys = lp->consys ; /* Set up options and statistics. */ local_lpopts = (lpopts_struct *) MALLOC(sizeof(lpopts_struct)) ; memcpy(local_lpopts,lpopts,sizeof(lpopts_struct)) ; dy_setprintopts(printlvl,local_lpopts) ; # ifdef DYLP_STATISTICS local_lpstats = NULL ; dy_initstats(&local_lpstats,sys) ; # else local_lpstats = NULL ; # endif /* Let dylp know we're not done, and make the call to solve the lp. */ lp->phase = dyINV ; lpret = dylp(lp,local_lpopts,lptols,local_lpstats) ; /* Dump the statistics and free the dylp statistics structure. */ /* stats_lp(outpath,FALSE,lp,&diff,local_lpstats) ; */ # ifdef DYLP_STATISTICS dy_freestats(&local_lpstats) ; # endif if (local_lpopts != NULL) FREE(local_lpopts) ; return (lpret) ; } int main (int argc, char **argv) { bool errecho = TRUE ; ioid ttyin,ttyout,outchn ; const char *errmsgpath = DYLP_ERRMSGPATH ; char *errlogpath = NULL ; consys_struct *main_sys ; lpprob_struct *main_lp ; lpret_enum lpretval ; double z ; int errcnt,cnt ; lpopts_struct* main_lpopts ; lptols_struct* main_lptols ; /* Set this to TRUE if you want to see the solutions for the test lp problems. */ bool dumpsoln = TRUE ; char *rtnnme = argv[0] ; /* dy_basis.c */ extern void dy_initbasis(int concnt, int factor_freq, double zero_tol), dy_freebasis(void) ; /* dytest_problems.c */ extern consys_struct *dytest_exmip1sys(lptols_struct *tols) ; extern consys_struct *dytest_exprimalraysys(lptols_struct *tols) ; extern consys_struct *dytest_exdualraysys(lptols_struct *tols) ; extern consys_struct *dytest_galenetbndssys(lptols_struct *tols) ; extern consys_struct *dytest_galenetleqsys(lptols_struct *tols) ; extern consys_struct *dytest_galenetmixedsys(lptols_struct *tols) ; extern consys_struct *dytest_galenetsys(lptols_struct *tols) ; extern consys_struct *dytest_afirosys(lptols_struct *tols) ; extern consys_struct *dytest_boeing2sys(lptols_struct *tols) ; /* dytest_tableau.c */ extern int dytest_betaj(lpprob_struct *lp, lptols_struct *lptols,lpopts_struct *lpopts) ; extern int dytest_betai(lpprob_struct *lp, lptols_struct *lptols,lpopts_struct *lpopts) ; extern int dytest_abarj(lpprob_struct *lp, lptols_struct *lptols,lpopts_struct *lpopts) ; extern int dytest_abari(lpprob_struct *lp, lptols_struct *lptols,lpopts_struct *lpopts) ; /* dytest_solutions.c */ extern int dytest_rowDuals(lpprob_struct *lp, lptols_struct *lptols,lpopts_struct *lpopts) ; extern int dytest_allDuals(lpprob_struct *lp, lptols_struct *lptols,lpopts_struct *lpopts) ; extern int dytest_colDuals(lpprob_struct *lp, lptols_struct *lptols,lpopts_struct *lpopts) ; extern int dytest_colPrimals(lpprob_struct *lp, lptols_struct *lptols,lpopts_struct *lpopts) ; extern int dytest_rowPrimals(lpprob_struct *lp, lptols_struct *lptols,lpopts_struct *lpopts) ; /* dytest_rays.c */ extern int dytest_primalRays(int *p_numRays,lpprob_struct *lp, lptols_struct *lptols,lpopts_struct *lpopts) ; extern int dytest_dualRays(int *p_numRays,lpprob_struct *lp, lptols_struct *lptols,lpopts_struct *lpopts) ; outchn = IOID_INV ; /* Execute initialization routines for the i/o and error reporting packages. */ errinit(errmsgpath,errlogpath,errecho) ; if (dyio_ioinit() != TRUE) { errmsg(1,rtnnme,__LINE__) ; exit (2) ; } /* Connect ttyout to the standard output. Initialize ttyin, setting the mode to line-oriented. Serious internal confusion if we can't manage these. Set the initial command input channel to stdin. */ ttyout = dyio_openfile("stdout","w") ; if (ttyout == IOID_INV) { errmsg(1,rtnnme,__LINE__) ; exit(3) ; } ttyin = dyio_openfile("stdin","r") ; if (ttyin == IOID_INV) { errmsg(1,rtnnme,__LINE__) ; exit(4) ; } (void) dyio_setmode(ttyin,'l') ; dy_logchn = IOID_NOSTRM ; dy_gtxecho = TRUE ; /* Announce we're running. */ dyio_outfmt(ttyout,dy_gtxecho,"Dylp v%s unit test start.\n",DYLP_VERSION) ; dyio_flushio(ttyout,dy_gtxecho) ; errcnt = 0 ; /* Acquire default option and tolerance structures. Allocate an lpprob_struct to be our top-level handle. */ main_lpopts = NULL ; main_lptols = NULL ; dy_defaults(&main_lpopts,&main_lptols) ; main_lp = (lpprob_struct *) CALLOC(1,sizeof(lpprob_struct)) ; /* Initialise the basis factorisation package with a data structure capable of 50 constraints. The second parameter controls how many basis updates the basis can hold before it requires refactoring. Adding 5 to dylp's refactor interval should give a safety margin. */ dy_initbasis(50,main_lpopts->factor+5,0.0) ; #if RUN_EXMIP1 > 0 /* Load the exmip1 example and see if we can solve it. */ dyio_outfmt(ttyout,dy_gtxecho, "\n\nLoading exmip1 example from static data.\n") ; main_sys = dytest_exmip1sys(main_lptols) ; if (main_sys == NULL) { dyio_outfmt(ttyout,dy_gtxecho, "Failed to load exmip1 constraint system.\n") ; errcnt++ ; } /* Check over the option settings, now that we know how big the constraint system will be. */ else { dy_checkdefaults(main_sys,main_lpopts,main_lptols) ; /* Initialise the main_lp structure to pass the problem in to dylp. * We need to retain the data structures (NOFREE) so that we can consult them when dylp returns. * The phase needs to be dyINV at the start. * We need to specify the constraint system, and its size. * Let dylp work with a partial system and purge at the end. This stresses the routines we're testing; they need to synthesize parts of the values they return. * The remaining options specify an all-logical basis, allow scaling, and force a cold start. */ setflg(main_lp->ctlopts,lpctlNOFREE) ; main_lp->phase = dyINV ; main_lp->consys = main_sys ; main_lp->rowsze = main_sys->rowsze ; main_lp->colsze = main_sys->colsze ; main_lpopts->forcecold = TRUE ; main_lpopts->fullsys = FALSE ; main_lpopts->finpurge.vars = TRUE ; main_lpopts->finpurge.cons = TRUE ; main_lpopts->coldbasis = ibLOGICAL ; main_lpopts->scaling = 0 ; main_lpopts->forcecold = TRUE ; /* main_lpopts->print.major = 1 ; main_lpopts->print.scaling = 1 ; main_lpopts->print.setup = 6 ; main_lpopts->print.crash = 3 ; main_lpopts->print.conmgmt = 3 ; main_lpopts->print.varmgmt = 3 ; main_lpopts->print.soln = 3 ; */ /* Solve. */ dyio_outfmt(ttyout,dy_gtxecho,"Solving exmip1 ... ") ; lpretval = do_lp(main_lp,main_lptols,main_lpopts,1) ; /* And the result is ... */ dyio_outfmt(ttyout,dy_gtxecho,"\n %s, z = %.12f.\n", dy_prtlpret(lpretval),main_lp->obj) ; z = 3.236842105263 ; if (!(fabs(main_lp->obj-z) <= main_lptols->cost)) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: z = %g, expected %g, error %g, tol %g.\n", main_lp->obj,z,fabs(main_lp->obj-z),main_lptols->cost) ; } if (dumpsoln == TRUE) { dy_dumpcompact(dy_logchn,dy_gtxecho,main_lp,FALSE) ; } /* Test the tableau, solution, and ray routines. The tests are predominantly mathematical identities, with a bit of data structure consistency thrown in for good measure. Completely problem-independent. */ errcnt += dytest_betaj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abarj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_betai(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abari(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_allDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colPrimals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowPrimals(main_lp,main_lptols,main_lpopts) ; /* Call dylp to free internal structures, then free main_sys. */ comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; dylp(main_lp,main_lpopts,main_lptols,NULL) ; consys_free(main_sys) ; main_sys = NULL ; main_lp->consys = NULL ; dy_freesoln(main_lp) ; } #endif #if RUN_AFIRO > 0 /* Let's try another. Load and solve afiro. */ dyio_outfmt(ttyout,dy_gtxecho, "\n\nLoading afiro example from static data.\n") ; main_sys = dytest_afirosys(main_lptols) ; if (main_sys == NULL) { dyio_outfmt(ttyout,dy_gtxecho, "Failed to load afiro constraint system.\n") ; errcnt++ ; } else { dy_checkdefaults(main_sys,main_lpopts,main_lptols) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; main_lp->phase = dyINV ; main_lp->consys = main_sys ; main_lp->rowsze = main_sys->rowsze ; main_lp->colsze = main_sys->colsze ; main_lpopts->forcecold = TRUE ; main_lpopts->fullsys = FALSE ; main_lpopts->finpurge.vars = TRUE ; main_lpopts->finpurge.cons = TRUE ; main_lpopts->coldbasis = ibLOGICAL ; main_lpopts->scaling = 2 ; dyio_outfmt(ttyout,dy_gtxecho,"Solving afiro ... ") ; lpretval = do_lp(main_lp,main_lptols,main_lpopts,1) ; dyio_outfmt(ttyout,dy_gtxecho,"\n %s, z = %.12f.\n", dy_prtlpret(lpretval),main_lp->obj) ; z = -464.753142857143 ; if (!(fabs(main_lp->obj-z) <= main_lptols->cost)) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: z = %g, expected %g, error %g, tol %g.\n", main_lp->obj,z,fabs(main_lp->obj-z),main_lptols->cost) ; } if (dumpsoln == TRUE) { dy_dumpcompact(dy_logchn,dy_gtxecho,main_lp,FALSE) ; } errcnt += dytest_betaj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abarj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_betai(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abari(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_allDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colPrimals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowPrimals(main_lp,main_lptols,main_lpopts) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; dylp(main_lp,main_lpopts,main_lptols,NULL) ; consys_free(main_sys) ; main_sys = NULL ; main_lp->consys = NULL ; dy_freesoln(main_lp) ; } #endif #if RUN_BOEING2 > 0 /* Let's try another. Load and solve boeing2. */ dyio_outfmt(ttyout,dy_gtxecho, "\n\nLoading boeing2 example from static data.\n") ; main_sys = dytest_boeing2sys(main_lptols) ; if (main_sys == NULL) { dyio_outfmt(ttyout,dy_gtxecho, "Failed to load boeing2 constraint system.\n") ; errcnt++ ; } else { dy_checkdefaults(main_sys,main_lpopts,main_lptols) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; main_lp->phase = dyINV ; main_lp->consys = main_sys ; main_lp->rowsze = main_sys->rowsze ; main_lp->colsze = main_sys->colsze ; main_lpopts->forcecold = TRUE ; main_lpopts->fullsys = FALSE ; main_lpopts->finpurge.vars = TRUE ; main_lpopts->finpurge.cons = TRUE ; main_lpopts->coldbasis = ibLOGICAL ; main_lpopts->scaling = 2 ; main_lpopts->print.phase2 = 0 ; /* main_lpopts->print.major = 1 ; main_lpopts->print.phase1 = 4 ; main_lpopts->print.dual = 4 ; main_lpopts->print.tableau = 4 ; main_lpopts->print.soln = 3 ; main_lpopts->print.rays = 5 ; */ dyio_outfmt(ttyout,dy_gtxecho,"Solving boeing2 ... ") ; lpretval = do_lp(main_lp,main_lptols,main_lpopts,1) ; dyio_outfmt(ttyout,dy_gtxecho,"\n %s, z = %.12f.\n", dy_prtlpret(lpretval),main_lp->obj) ; z = -315.0187280152 ; if (!(fabs(main_lp->obj-z) <= main_lptols->cost)) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: z = %g, expected %g, error %g, tol %g.\n", main_lp->obj,z,fabs(main_lp->obj-z),main_lptols->cost) ; } if (dumpsoln == TRUE) { dy_dumpcompact(dy_logchn,dy_gtxecho,main_lp,FALSE) ; } errcnt += dytest_betaj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abarj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_betai(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abari(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_allDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colPrimals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowPrimals(main_lp,main_lptols,main_lpopts) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; dylp(main_lp,main_lpopts,main_lptols,NULL) ; consys_free(main_sys) ; main_sys = NULL ; main_lp->consys = NULL ; dy_freesoln(main_lp) ; } #endif #if RUN_EXPRIMALRAY > 0 /* Let's try another. Load and solve exprimalray. The polyhedron for exprimalray is carefully crafted to provide an initial bounded optimum point with two rays that are exposed by the proper change in objective. Force dylp to use the full system for this test and do not allow final purging, lest we miss the point and rays we're aiming for. */ dyio_outfmt(ttyout,dy_gtxecho, "\n\nLoading exprimalray example from static data.\n") ; main_sys = dytest_exprimalraysys(main_lptols) ; if (main_sys == NULL) { dyio_outfmt(ttyout,dy_gtxecho, "Failed to load exprimalray constraint system.\n") ; errcnt++ ; } else { dy_checkdefaults(main_sys,main_lpopts,main_lptols) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; main_lp->phase = dyINV ; main_lp->consys = main_sys ; main_lp->rowsze = main_sys->rowsze ; main_lp->colsze = main_sys->colsze ; main_lpopts->forcecold = TRUE ; main_lpopts->fullsys = TRUE ; main_lpopts->finpurge.vars = FALSE ; main_lpopts->finpurge.cons = FALSE ; main_lpopts->coldbasis = ibLOGICAL ; main_lpopts->scaling = 2 ; dyio_outfmt(ttyout,dy_gtxecho,"Solving exprimalray ... ") ; lpretval = do_lp(main_lp,main_lptols,main_lpopts,1) ; dyio_outfmt(ttyout,dy_gtxecho,"\n %s, z = %.12f.\n", dy_prtlpret(lpretval),main_lp->obj) ; z = -21 ; if (!(fabs(main_lp->obj-z) <= main_lptols->cost)) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: z = %g, expected %g, error %g, tol %g.\n", main_lp->obj,z,fabs(main_lp->obj-z),main_lptols->cost) ; } if (dumpsoln == TRUE) { dy_dumpcompact(dy_logchn,dy_gtxecho,main_lp,FALSE) ; } /* Now tweak the objective to 3x1+x2+x3, giving us two rays. Solve, then test that we have valid primal rays. First ask for just one, then ask for five, expecting two. */ main_sys->obj[1] = -1.0 ; main_sys->obj[2] = -4.0 ; setflg(main_lp->ctlopts,lpctlOBJCHG) ; main_lpopts->forcecold = FALSE ; dyio_outfmt(dy_logchn,dy_gtxecho,"Resolving exprimalray ...") ; lpretval = do_lp(main_lp,main_lptols,main_lpopts,1) ; dyio_outfmt(ttyout,dy_gtxecho,"\n %s, z = %.12f.\n", dy_prtlpret(lpretval),main_lp->obj) ; if (dumpsoln == TRUE) { dy_dumpcompact(dy_logchn,dy_gtxecho,main_lp,FALSE) ; } cnt = 1 ; errcnt += dytest_primalRays(&cnt,main_lp,main_lptols,main_lpopts) ; if (cnt != 1) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: %d primal rays returned, expected %d.\n", cnt,1) ; } cnt = 5 ; errcnt += dytest_primalRays(&cnt,main_lp,main_lptols,main_lpopts) ; if (cnt != 2) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: %d primal rays returned, expected %d.\n", cnt,2) ; } /* Run the remainder of the tests, to make sure they run without error when dylp finishes unbounded. */ errcnt += dytest_betaj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abarj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_betai(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abari(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_allDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colPrimals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowPrimals(main_lp,main_lptols,main_lpopts) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; dylp(main_lp,main_lpopts,main_lptols,NULL) ; consys_free(main_sys) ; main_sys = NULL ; main_lp->consys = NULL ; dy_freesoln(main_lp) ; } #endif #if RUN_EXDUALRAY > 0 /* Let's try another. Load and solve exdualray. Exdualray takes advantage of duality: The dual polyhedron is exactly the primal polyhedron of the previous problem. The symmetry should be clear from the output (objective, dual, and primal values are negated, but otherwise identical) */ dyio_outfmt(ttyout,dy_gtxecho, "\n\nLoading exdualray example from static data.\n") ; main_sys = dytest_exdualraysys(main_lptols) ; if (main_sys == NULL) { dyio_outfmt(ttyout,dy_gtxecho, "Failed to load exdualray constraint system.\n") ; errcnt++ ; } else { dy_checkdefaults(main_sys,main_lpopts,main_lptols) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; main_lp->phase = dyINV ; main_lp->consys = main_sys ; main_lp->rowsze = main_sys->rowsze ; main_lp->colsze = main_sys->colsze ; main_lpopts->forcecold = TRUE ; main_lpopts->fullsys = TRUE ; main_lpopts->finpurge.vars = FALSE ; main_lpopts->finpurge.cons = FALSE ; main_lpopts->coldbasis = ibLOGICAL ; main_lpopts->scaling = 2 ; /* main_lpopts->print.major = 1 ; main_lpopts->print.phase1 = 4 ; main_lpopts->print.phase2 = 4 ; main_lpopts->print.dual = 4 ; main_lpopts->print.tableau = 4 ; main_lpopts->print.soln = 3 ; main_lpopts->print.rays = 5 ; */ dyio_outfmt(ttyout,dy_gtxecho,"Solving exdualray ... ") ; lpretval = do_lp(main_lp,main_lptols,main_lpopts,1) ; dyio_outfmt(ttyout,dy_gtxecho,"\n %s, z = %.12f.\n", dy_prtlpret(lpretval),main_lp->obj) ; z = 21 ; if (!(fabs(main_lp->obj-z) <= main_lptols->cost)) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: z = %g, expected %g, error %g, tol %g.\n", main_lp->obj,z,fabs(main_lp->obj-z),main_lptols->cost) ; } if (dumpsoln == TRUE) { dy_dumpcompact(dy_logchn,dy_gtxecho,main_lp,FALSE) ; } /* Tweak the rhs to (-1)*(-1 -4 1) to produce a pair of rays in the dual. */ main_sys->rhs[2] = 4.0 ; setflg(main_lp->ctlopts,lpctlRHSCHG) ; main_lpopts->forcecold = FALSE ; main_lpopts->print.force = 1 ; dyio_outfmt(dy_logchn,dy_gtxecho,"Resolving exdualray ...") ; lpretval = do_lp(main_lp,main_lptols,main_lpopts,1) ; dyio_outfmt(ttyout,dy_gtxecho,"\n %s, z = %.12f.\n", dy_prtlpret(lpretval),main_lp->obj) ; if (dumpsoln == TRUE) { dy_dumpcompact(dy_logchn,dy_gtxecho,main_lp,FALSE) ; } /* Test that we have valid dual rays. First ask for just one, then ask for five, expecting two. */ errcnt += dytest_rowDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_allDuals(main_lp,main_lptols,main_lpopts) ; cnt = 1 ; errcnt += dytest_dualRays(&cnt,main_lp,main_lptols,main_lpopts) ; if (cnt != 1) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: %d dual rays returned, expected %d.\n", cnt,1) ; } cnt = 5 ; errcnt += dytest_dualRays(&cnt,main_lp,main_lptols,main_lpopts) ; if (cnt != 2) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: %d dual rays returned, expected %d.\n", cnt,2) ; } /* Run the remainder of the tests, to make sure they run without error when dylp finishes infeasible. */ errcnt += dytest_betaj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abarj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_betai(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abari(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colPrimals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowPrimals(main_lp,main_lptols,main_lpopts) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; dylp(main_lp,main_lpopts,main_lptols,NULL) ; consys_free(main_sys) ; main_sys = NULL ; main_lp->consys = NULL ; dy_freesoln(main_lp) ; } #endif #if RUN_GALENETBNDS > 0 /* Now a sequence of three problems based on galenet that really exercise the dual ray code. Galenet is a straightforward primal infeasible / dual unbounded problem. The objective is identically zero, so it's a pure feasibility problem. The objective returned from dylp will be z = 48, the amount of primal infeasibility. The first version is galenetbnds. All equalities from galenet are converted to inequalities, all implicit bounds are converted to explicit bound constraints, and then all >= constraints are converted to <= constraints. This is the simplest possible case for returning dual rays. */ dyio_outfmt(ttyout,dy_gtxecho, "\n\nLoading galenetbnds example from static data.\n") ; main_sys = dytest_galenetbndssys(main_lptols) ; if (main_sys == NULL) { dyio_outfmt(ttyout,dy_gtxecho, "Failed to load galenetbnds constraint system.\n") ; errcnt++ ; } else { dy_checkdefaults(main_sys,main_lpopts,main_lptols) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; main_lp->phase = dyINV ; main_lp->consys = main_sys ; main_lp->rowsze = main_sys->rowsze ; main_lp->colsze = main_sys->colsze ; main_lpopts->forcecold = TRUE ; main_lpopts->fullsys = TRUE ; main_lpopts->finpurge.vars = FALSE ; main_lpopts->finpurge.cons = FALSE ; main_lpopts->coldbasis = ibLOGICAL ; main_lpopts->scaling = 2 ; /* main_lpopts->print.major = 1 ; main_lpopts->print.phase1 = 4 ; main_lpopts->print.phase2 = 4 ; main_lpopts->print.dual = 4 ; main_lpopts->print.tableau = 4 ; main_lpopts->print.soln = 3 ; main_lpopts->print.rays = 5 ; */ dyio_outfmt(ttyout,dy_gtxecho,"Solving galenetbnds ... ") ; lpretval = do_lp(main_lp,main_lptols,main_lpopts,1) ; dyio_outfmt(ttyout,dy_gtxecho,"\n %s, z = %.12f.\n", dy_prtlpret(lpretval),main_lp->obj) ; z = 48.0 ; if (!(fabs(main_lp->obj-z) <= main_lptols->cost)) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: z = %g, expected %g, error %g, tol %g.\n", main_lp->obj,z,fabs(main_lp->obj-z),main_lptols->cost) ; } dumpsoln = TRUE ; if (dumpsoln == TRUE) { dy_dumpcompact(dy_logchn,dy_gtxecho,main_lp,FALSE) ; } /* Test that we have valid dual rays. First ask for just one, then ask for five, expecting three. */ cnt = 1 ; errcnt += dytest_dualRays(&cnt,main_lp,main_lptols,main_lpopts) ; if (cnt != 1) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: %d dual rays returned, expected %d.\n", cnt,1) ; } cnt = 5 ; errcnt += dytest_dualRays(&cnt,main_lp,main_lptols,main_lpopts) ; if (cnt != 3) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: %d dual rays returned, expected %d.\n", cnt,2) ; } /* Run the remainder of the tests, to make sure they run without error when dylp finishes infeasible. */ errcnt += dytest_betaj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abarj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_betai(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abari(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_allDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colPrimals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowPrimals(main_lp,main_lptols,main_lpopts) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; dylp(main_lp,main_lpopts,main_lptols,NULL) ; consys_free(main_sys) ; main_sys = NULL ; main_lp->consys = NULL ; dy_freesoln(main_lp) ; } #endif #if RUN_GALENETLEQ > 0 /* Now load and solve galenetleq --- galenetbnds, but the bound constraints on variables are now handled in the usual manner, as implicit bounds. We'll need the full ray (explicit duals y = cinv(B) as well as duals associated with nonbasic bounded variables) in order to pass the mathematical tests rb < 0, rA > 0. */ dyio_outfmt(ttyout,dy_gtxecho, "\n\nLoading galenetleq example from static data.\n") ; main_sys = dytest_galenetleqsys(main_lptols) ; if (main_sys == NULL) { dyio_outfmt(ttyout,dy_gtxecho, "Failed to load galenetleq constraint system.\n") ; errcnt++ ; } else { dy_checkdefaults(main_sys,main_lpopts,main_lptols) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; main_lp->phase = dyINV ; main_lp->consys = main_sys ; main_lp->rowsze = main_sys->rowsze ; main_lp->colsze = main_sys->colsze ; main_lpopts->forcecold = TRUE ; main_lpopts->fullsys = TRUE ; main_lpopts->finpurge.vars = FALSE ; main_lpopts->finpurge.cons = FALSE ; main_lpopts->coldbasis = ibLOGICAL ; main_lpopts->scaling = 2 ; /* main_lpopts->print.major = 1 ; main_lpopts->print.phase1 = 4 ; main_lpopts->print.phase2 = 4 ; main_lpopts->print.dual = 4 ; main_lpopts->print.tableau = 4 ; main_lpopts->print.soln = 3 ; main_lpopts->print.rays = 5 ; */ dyio_outfmt(ttyout,dy_gtxecho,"Solving galenetleq ... ") ; lpretval = do_lp(main_lp,main_lptols,main_lpopts,1) ; dyio_outfmt(ttyout,dy_gtxecho,"\n %s, z = %.12f.\n", dy_prtlpret(lpretval),main_lp->obj) ; z = 48.0 ; if (!(fabs(main_lp->obj-z) <= main_lptols->cost)) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: z = %g, expected %g, error %g, tol %g.\n", main_lp->obj,z,fabs(main_lp->obj-z),main_lptols->cost) ; } dumpsoln = TRUE ; if (dumpsoln == TRUE) { dy_dumpcompact(dy_logchn,dy_gtxecho,main_lp,FALSE) ; } /* Test that we have valid dual rays. First ask for just one, then ask for five, expecting three. */ cnt = 1 ; errcnt += dytest_dualRays(&cnt,main_lp,main_lptols,main_lpopts) ; if (cnt != 1) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: %d dual rays returned, expected %d.\n", cnt,1) ; } cnt = 5 ; errcnt += dytest_dualRays(&cnt,main_lp,main_lptols,main_lpopts) ; if (cnt != 3) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: %d dual rays returned, expected %d.\n", cnt,2) ; } /* Run the remainder of the tests, to make sure they run without error when dylp finishes infeasible. */ errcnt += dytest_betaj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abarj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_betai(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abari(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_allDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colPrimals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowPrimals(main_lp,main_lptols,main_lpopts) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; dylp(main_lp,main_lpopts,main_lptols,NULL) ; consys_free(main_sys) ; main_sys = NULL ; main_lp->consys = NULL ; dy_freesoln(main_lp) ; } #endif #if RUN_GALENETMIXED > 0 /* Now load and solve galenetmixed --- bound constraints on variables are handled implicitly, and the constraint system is a mix of <= and >= constraints (the equalities are handled as a pair of inequalities). As with galenetleq, we'll need the full ray (explicit duals y = cinv(B) as well as duals associated with nonbasic bounded variables) in order to pass the mathematical tests rb < 0, rA > 0. */ dyio_outfmt(ttyout,dy_gtxecho, "\n\nLoading galenetmixed example from static data.\n") ; main_sys = dytest_galenetmixedsys(main_lptols) ; if (main_sys == NULL) { dyio_outfmt(ttyout,dy_gtxecho, "Failed to load galenetmixed constraint system.\n") ; errcnt++ ; } else { dy_checkdefaults(main_sys,main_lpopts,main_lptols) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; main_lp->phase = dyINV ; main_lp->consys = main_sys ; main_lp->rowsze = main_sys->rowsze ; main_lp->colsze = main_sys->colsze ; main_lpopts->forcecold = TRUE ; main_lpopts->fullsys = TRUE ; main_lpopts->finpurge.vars = FALSE ; main_lpopts->finpurge.cons = FALSE ; main_lpopts->coldbasis = ibLOGICAL ; main_lpopts->scaling = 2 ; /* main_lpopts->print.major = 1 ; main_lpopts->print.phase1 = 4 ; main_lpopts->print.phase2 = 4 ; main_lpopts->print.dual = 4 ; main_lpopts->print.tableau = 4 ; main_lpopts->print.soln = 3 ; main_lpopts->print.rays = 5 ; */ dyio_outfmt(ttyout,dy_gtxecho,"Solving galenetmixed ... ") ; lpretval = do_lp(main_lp,main_lptols,main_lpopts,1) ; dyio_outfmt(ttyout,dy_gtxecho,"\n %s, z = %.12f.\n", dy_prtlpret(lpretval),main_lp->obj) ; z = 48.0 ; if (!(fabs(main_lp->obj-z) <= main_lptols->cost)) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: z = %g, expected %g, error %g, tol %g.\n", main_lp->obj,z,fabs(main_lp->obj-z),main_lptols->cost) ; } dumpsoln = TRUE ; if (dumpsoln == TRUE) { dy_dumpcompact(dy_logchn,dy_gtxecho,main_lp,FALSE) ; } /* Test that we have valid dual rays. First ask for just one, then ask for five, expecting three. */ cnt = 1 ; errcnt += dytest_dualRays(&cnt,main_lp,main_lptols,main_lpopts) ; if (cnt != 1) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: %d dual rays returned, expected %d.\n", cnt,1) ; } cnt = 5 ; errcnt += dytest_dualRays(&cnt,main_lp,main_lptols,main_lpopts) ; if (cnt != 3) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: %d dual rays returned, expected %d.\n", cnt,2) ; } /* Run the remainder of the tests, to make sure they run without error when dylp finishes infeasible. */ errcnt += dytest_betaj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abarj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_betai(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abari(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_allDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colPrimals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowPrimals(main_lp,main_lptols,main_lpopts) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; dylp(main_lp,main_lpopts,main_lptols,NULL) ; consys_free(main_sys) ; main_sys = NULL ; main_lp->consys = NULL ; dy_freesoln(main_lp) ; } #endif #if RUN_GALENET > 0 /* Now load and solve the original galenet --- bound constraints on variables are handled implicitly, and the constraint system is a mix of <=, =, and >= constraints. As with galenetleq, we'll need the full ray (explicit duals y = cinv(B) as well as duals associated with nonbasic bounded variables) in order to pass the mathematical tests rb < 0, rA > 0. */ dyio_outfmt(ttyout,dy_gtxecho, "\n\nLoading galenet example from static data.\n") ; main_sys = dytest_galenetsys(main_lptols) ; if (main_sys == NULL) { dyio_outfmt(ttyout,dy_gtxecho, "Failed to load galenet constraint system.\n") ; errcnt++ ; } else { dy_checkdefaults(main_sys,main_lpopts,main_lptols) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; main_lp->phase = dyINV ; main_lp->consys = main_sys ; main_lp->rowsze = main_sys->rowsze ; main_lp->colsze = main_sys->colsze ; main_lpopts->forcecold = TRUE ; main_lpopts->fullsys = TRUE ; main_lpopts->finpurge.vars = FALSE ; main_lpopts->finpurge.cons = FALSE ; main_lpopts->coldbasis = ibLOGICAL ; main_lpopts->scaling = 2 ; /* main_lpopts->print.major = 1 ; main_lpopts->print.phase1 = 4 ; main_lpopts->print.phase2 = 4 ; main_lpopts->print.dual = 4 ; main_lpopts->print.tableau = 4 ; main_lpopts->print.soln = 3 ; main_lpopts->print.rays = 5 ; */ dyio_outfmt(ttyout,dy_gtxecho,"Solving galenet ... ") ; lpretval = do_lp(main_lp,main_lptols,main_lpopts,1) ; dyio_outfmt(ttyout,dy_gtxecho,"\n %s, z = %.12f.\n", dy_prtlpret(lpretval),main_lp->obj) ; z = 46.0 ; if (!(fabs(main_lp->obj-z) <= main_lptols->cost)) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: z = %g, expected %g, error %g, tol %g.\n", main_lp->obj,z,fabs(main_lp->obj-z),main_lptols->cost) ; } dumpsoln = TRUE ; if (dumpsoln == TRUE) { dy_dumpcompact(dy_logchn,dy_gtxecho,main_lp,FALSE) ; } /* Test that we have valid dual rays. First ask for just one, then ask for five, expecting two. Note that we end up at a different vertex than the previous expanded versions of galenet. */ cnt = 1 ; errcnt += dytest_dualRays(&cnt,main_lp,main_lptols,main_lpopts) ; if (cnt != 1) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: %d dual rays returned, expected %d.\n", cnt,1) ; } cnt = 5 ; errcnt += dytest_dualRays(&cnt,main_lp,main_lptols,main_lpopts) ; if (cnt != 2) { errcnt++ ; dyio_outfmt(ttyout,dy_gtxecho, " ERROR: %d dual rays returned, expected %d.\n", cnt,2) ; } /* Run the remainder of the tests, to make sure they run without error when dylp finishes infeasible. */ errcnt += dytest_betaj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abarj(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_betai(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_abari(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_allDuals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_colPrimals(main_lp,main_lptols,main_lpopts) ; errcnt += dytest_rowPrimals(main_lp,main_lptols,main_lpopts) ; comflg(main_lp->ctlopts,lpctlONLYFREE|lpctlNOFREE) ; dylp(main_lp,main_lpopts,main_lptols,NULL) ; consys_free(main_sys) ; main_sys = NULL ; main_lp->consys = NULL ; dy_freesoln(main_lp) ; } #endif /* Report the result before we shut down. */ if (errcnt > 0) { dyio_outfmt(ttyout,dy_gtxecho, "\n ERROR: %d total errors for all tests.\n\n", errcnt) ; } else { dyio_outfmt(ttyout,dy_gtxecho, "\n All tests completed successfully.\n\n") ; } dy_freebasis() ; /* Final cleanup. Free space used by the remaining main_* structures and close down any i/o. */ if (main_lp != NULL) { dy_freesoln(main_lp) ; if (main_lp->consys != NULL) consys_free(main_lp->consys) ; FREE(main_lp) ; } if (main_lpopts != NULL) FREE(main_lpopts) ; if (main_lptols != NULL) FREE(main_lptols) ; if (outchn != IOID_INV && outchn != ttyout) { (void) dyio_closefile(outchn) ; } if (dy_logchn != IOID_INV && dy_logchn != IOID_NOSTRM) { (void) dyio_closefile(dy_logchn) ; } dyio_ioterm() ; errterm() ; return (errcnt) ; } DyLP-1.10.4/DyLP/test/Makefile.in0000644000175200017520000005551712506276701014732 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = unitTest$(EXEEXT) $(am__EXEEXT_1) ######################################################################## # unitTest for OsiDyLP # ######################################################################## @COIN_HAS_OSITESTS_TRUE@am__append_1 = osiUnitTest @COIN_HAS_OSITESTS_TRUE@am__append_2 = -I`$(CYGPATH_W) $(srcdir)/../src/OsiDylp` \ @COIN_HAS_OSITESTS_TRUE@ $(COINUTILS_CFLAGS) $(OSITESTS_CFLAGS) @COIN_HAS_NETLIB_TRUE@@COIN_HAS_OSITESTS_TRUE@am__append_3 = -netlibDir=`$(CYGPATH_W) $(NETLIB_DATA)` \ @COIN_HAS_NETLIB_TRUE@@COIN_HAS_OSITESTS_TRUE@ -testOsiSolverInterface @COIN_HAS_OSITESTS_TRUE@am__append_4 = test.* test2.* subdir = test DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c_add_to_includes.m4 \ $(top_srcdir)/m4/ac_c_get_sunpro_libs.m4 \ $(top_srcdir)/m4/ac_dylp_equiv_for_cpp_bool.m4 \ $(top_srcdir)/m4/ac_dylp_find_fp_funcs.m4 \ $(top_srcdir)/m4/ac_dylp_fix_cppflags.m4 \ $(top_srcdir)/m4/ac_dylp_options.m4 \ $(top_srcdir)/m4/ac_osidylp_options.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/DylpStdLib/config.h \ $(top_builddir)/src/DylpStdLib/config_dylp.h CONFIG_CLEAN_FILES = @COIN_HAS_OSITESTS_TRUE@am__EXEEXT_1 = osiUnitTest$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) am__osiUnitTest_SOURCES_DIST = osiUnitTest.cpp \ OsiDylpSolverInterfaceTest.cpp @COIN_HAS_OSITESTS_TRUE@am_osiUnitTest_OBJECTS = \ @COIN_HAS_OSITESTS_TRUE@ osiUnitTest.$(OBJEXT) \ @COIN_HAS_OSITESTS_TRUE@ OsiDylpSolverInterfaceTest.$(OBJEXT) osiUnitTest_OBJECTS = $(am_osiUnitTest_OBJECTS) am__DEPENDENCIES_1 = am_unitTest_OBJECTS = dytest_problems.$(OBJEXT) dytest_rays.$(OBJEXT) \ dytest_solutions.$(OBJEXT) dytest_tableau.$(OBJEXT) \ unitTest.$(OBJEXT) unitTest_OBJECTS = $(am_unitTest_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(osiUnitTest_SOURCES) $(unitTest_SOURCES) DIST_SOURCES = $(am__osiUnitTest_SOURCES_DIST) $(unitTest_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_OSITESTS_FALSE = @COIN_HAS_OSITESTS_FALSE@ COIN_HAS_OSITESTS_TRUE = @COIN_HAS_OSITESTS_TRUE@ COIN_HAS_OSI_FALSE = @COIN_HAS_OSI_FALSE@ COIN_HAS_OSI_TRUE = @COIN_HAS_OSI_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ DYLPLIB_LIBS = @DYLPLIB_LIBS@ DYLPLIB_LIBS_INSTALLED = @DYLPLIB_LIBS_INSTALLED@ DYLPLIB_PCLIBS = @DYLPLIB_PCLIBS@ DYLP_ERRMSGDIR = @DYLP_ERRMSGDIR@ DYLP_SVN_REV = @DYLP_SVN_REV@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIDYLPLIB_CFLAGS = @OSIDYLPLIB_CFLAGS@ OSIDYLPLIB_CFLAGS_INSTALLED = @OSIDYLPLIB_CFLAGS_INSTALLED@ OSIDYLPLIB_DEPENDENCIES = @OSIDYLPLIB_DEPENDENCIES@ OSIDYLPLIB_LIBS = @OSIDYLPLIB_LIBS@ OSIDYLPLIB_LIBS_INSTALLED = @OSIDYLPLIB_LIBS_INSTALLED@ OSIDYLPLIB_PCLIBS = @OSIDYLPLIB_PCLIBS@ OSIDYLPLIB_PCREQUIRES = @OSIDYLPLIB_PCREQUIRES@ OSITESTS_CFLAGS = @OSITESTS_CFLAGS@ OSITESTS_CFLAGS_INSTALLED = @OSITESTS_CFLAGS_INSTALLED@ OSITESTS_DATA = @OSITESTS_DATA@ OSITESTS_DATA_INSTALLED = @OSITESTS_DATA_INSTALLED@ OSITESTS_DEPENDENCIES = @OSITESTS_DEPENDENCIES@ OSITESTS_LIBS = @OSITESTS_LIBS@ OSITESTS_LIBS_INSTALLED = @OSITESTS_LIBS_INSTALLED@ OSI_CFLAGS = @OSI_CFLAGS@ OSI_CFLAGS_INSTALLED = @OSI_CFLAGS_INSTALLED@ OSI_DATA = @OSI_DATA@ OSI_DATA_INSTALLED = @OSI_DATA_INSTALLED@ OSI_DEPENDENCIES = @OSI_DEPENDENCIES@ OSI_LIBS = @OSI_LIBS@ OSI_LIBS_INSTALLED = @OSI_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign unitTest_SOURCES = \ dytest_problems.c \ dytest_rays.c \ dytest_solutions.c \ dytest_tableau.c \ unitTest.c # List libraries required for the unitTest unitTest_LDADD = ../src/Dylp/libDylp.la $(DYLPLIB_LIBS) unitTest_DEPENDENCIES = ../src/Dylp/libDylp.la $(DYLPLIB_DEPENDENCIES) # 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`$(CYGPATH_W) $(srcdir)/../src/DylpStdLib` \ -I`$(CYGPATH_W) $(srcdir)/../src/Dylp` $(am__append_2) @COIN_HAS_OSITESTS_TRUE@osiUnitTest_SOURCES = osiUnitTest.cpp OsiDylpSolverInterfaceTest.cpp @COIN_HAS_OSITESTS_TRUE@osiUnitTest_LDADD = ../src/OsiDylp/libOsiDylp.la ../src/Dylp/libDylp.la \ @COIN_HAS_OSITESTS_TRUE@ $(OSITESTS_LIBS) $(OSIDYLPLIB_LIBS) $(DYLPLIB_LIBS) @COIN_HAS_OSITESTS_TRUE@osiUnitTest_DEPENDENCIES = ../src/OsiDylp/libOsiDylp.la ../src/Dylp/libDylp.la \ @COIN_HAS_OSITESTS_TRUE@ $(OSITESTS_DEPENDENCIES) $(OSIDYLPLIB_DEPENDENCIES) $(DYLPLIB_DEPENDENCIES) @COIN_HAS_OSITESTS_TRUE@osiTestDep = osiUnitTest$(EXEEXT) @COIN_HAS_OSITESTS_TRUE@osiunittestflags = -mpsDir=`$(CYGPATH_W) \ @COIN_HAS_OSITESTS_TRUE@ $(SAMPLE_DATA)` $(am__append_3) ######################################################################## # test target # ######################################################################## # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/DylpStdLib DISTCLEANFILES = test.* test2.* 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign 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 clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done osiUnitTest$(EXEEXT): $(osiUnitTest_OBJECTS) $(osiUnitTest_DEPENDENCIES) @rm -f osiUnitTest$(EXEEXT) $(CXXLINK) $(osiUnitTest_LDFLAGS) $(osiUnitTest_OBJECTS) $(osiUnitTest_LDADD) $(LIBS) unitTest$(EXEEXT): $(unitTest_OBJECTS) $(unitTest_DEPENDENCIES) @rm -f unitTest$(EXEEXT) $(LINK) $(unitTest_LDFLAGS) $(unitTest_OBJECTS) $(unitTest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiDylpSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dytest_problems.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dytest_rays.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dytest_solutions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dytest_tableau.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/osiUnitTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unitTest.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: 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: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS ctags 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-exec \ install-exec-am install-info install-info-am install-man \ 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 uninstall uninstall-am \ uninstall-info-am test: unitTest$(EXEEXT) $(osiTestDep) ./unitTest$(EXEEXT) ; \ if test -e osiUnitTest$(EXEEXT) ; then \ ./osiUnitTest$(EXEEXT) $(osiunittestflags) ; \ fi .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: DyLP-1.10.4/DyLP/m4/0000755000175200017520000000000013434203622012202 5ustar coincoinDyLP-1.10.4/DyLP/m4/ac_dylp_find_fp_funcs.m40000644000175200017520000000461210445170147016751 0ustar coincoin # AC_DYLP_FIND_ISFINITE # ------------------------------------------------------ # Determines the name of the finite() function in this environment. This is the # function that recognises whether an IEEE floating point value is finite. The # variable ac_name_of_finite will be set to the proper name on return and # DYLP_ISFINITE will be defined to the same value. # ------------------------------------------------------ AC_DEFUN([AC_DYLP_FIND_ISFINITE], [ AC_MSG_NOTICE([Checking for proper name for isfinite().]) ac_name_of_isfinite="unavailable" AC_CHECK_FUNC([finite],[ac_name_of_isfinite=finite]) if test "$ac_name_of_isfinite" = "unavailable"; then AC_CHECK_FUNC([_finite],[ac_name_of_isfinite=_finite]) fi if test "$ac_name_of_isfinite" = "unavailable"; then AC_CHECK_FUNC([isfinite],[ac_name_of_isfinite=isfinite]) fi if test "$ac_name_of_isfinite" = "unavailable"; then AC_MSG_WARN([Cannot find a C function to check if an IEEE floating point value is finite. There is no hope of building dylp on this system.]) fi AC_DEFINE_UNQUOTED([DYLP_ISFINITE], [$ac_name_of_isfinite], [Define to be the name of the C function used to check that an IEEE floating point value is finite.]) AC_MSG_NOTICE([Using $ac_name_of_isfinite as isfinite().]) ]) # AC_DYLP_FIND_ISNAN # ------------------------------------------------------ # Determines the name of the isnan() function in this environment. This is the # function that recognises whether an IEEE floating point value is NaN. The # variable ac_name_of_isnan will be set to the proper name on return and # DYLP_ISNAN will be defined to the same value. # ------------------------------------------------------ AC_DEFUN([AC_DYLP_FIND_ISNAN], [ AC_MSG_NOTICE([Checking for proper name for isnan().]) ac_name_of_isnan="unavailable" AC_CHECK_FUNC([isnan],[ac_name_of_isnan=isnan]) if test "$ac_name_of_isnan" = "unavailable"; then AC_CHECK_FUNC([_isnan],[ac_name_of_isnan=_isnan]) fi if test "$ac_name_of_isnan" = "unavailable"; then AC_MSG_WARN([Cannot find a C function to check if an IEEE floating point value is NaN. There is no hope of building dylp on this system.]) fi AC_DEFINE_UNQUOTED([DYLP_ISNAN], [$ac_name_of_isnan], [Define to be the name of the C function used to check that an IEEE floating point value is NaN.]) AC_MSG_NOTICE([Using $ac_name_of_isnan as isnan().]) ]) DyLP-1.10.4/DyLP/m4/ac_dylp_fix_cppflags.m40000644000175200017520000000451712454011430016606 0ustar coincoin # This macro makes corrections to CPPFLAGS, CFLAGS, AND CXXFLAGS. It does # additions and deletions of options that are problematic on some systems, # and it looks for flags in CXXFLAGS and/or CFLAGS that really should be # in CPPFLAGS because they affect the preprocessor's search path. # (See Section 4.7.1 in the autoconf manual.) # Current tests are: # -mno-cygwin Sort of a special case, needs to be in preprocess, compile, # and link. (Should be handled properly in BuildTools as of # 07.02.01). # Additions: # -wd4996 Suppress warning C4996 (deprecated function) for MSVC cl. # Deletions: # -pedantic-errors On some systems, standard system files will fail to # compile when this is specified. AC_DEFUN([AC_DYLP_FIX_CPPFLAGS], [ # Transfer flags from CFLAGS/CXXFLAGS to CPPFLAGS. case "$CXXFLAGS $CFLAGS" in *-mno-cygwin*) CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-mno-cygwin//g'` CFLAGS=`echo $CFLAGS | sed -e 's/-mno-cygwin//g'` CPPFLAGS="-mno-cygwin $CPPFLAGS" LDFLAGS="-mno-cygwin $LDFLAGS" ;; esac # Add flags. Strip the option first, then add once, to avoid repetition. case "$CXX" in clang* | */clang*) ;; cl* | */cl*) CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-wd4996//g'` CXXFLAGS="$CXXFLAGS -wd4996" ;; esac case "$CC" in clang* | */clang*) ;; cl* | */cl*) CFLAGS=`echo $CFLAGS | sed -e 's/-wd4996//g'` CFLAGS="$CFLAGS -wd4996" ;; esac # Darwin will refuse to compile its own standard headers if pedantic-errors is # requested. case "$build" in *-darwin*) CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-[-]*pedantic-errors//g'` CFLAGS=`echo $CFLAGS | sed -e 's/-[-]*pedantic-errors//g'` ;; esac # DyLP's command parser (bnfrdr) makes heavy use of type-punning. We cannot # allow GCC to enforce strict-aliasing. And we can't simply test to see if it's # present; specifying -O2, -O3, or -Os also enables it. As above, strip # anything already present and insert one -fno-strict-aliasing. if test x"$ac_cv_c_compiler_gnu" = xyes ; then CFLAGS=`echo $CFLAGS | sed -e 's/-[-]*fn*o*-*strict-aliasing//g'` CFLAGS="$CFLAGS -fno-strict-aliasing" fi if test x"$ac_cv_cxx_compiler_gnu" = xyes ; then CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-[-]*fn*o*-*strict-aliasing//g'` CXXFLAGS="$CXXFLAGS -fno-strict-aliasing" fi ]) DyLP-1.10.4/DyLP/m4/ac_osidylp_options.m40000644000175200017520000000515611403572110016347 0ustar coincoin # AC_ODSI_PARANOIA(dflt) # ------------------------------------------------------------------ # Processes the paranoia option. # ------------------------------------------------------------------ AC_DEFUN([AC_ODSI_PARANOIA], [ AC_ARG_ENABLE([osidylp-paranoia], AS_HELP_STRING([--enable-osidylp-paranoia], [Control osidylp's paranoid checks. 0 is off, 1 is index checks, 2 is consistency checks (expensive) (default=$1)]), [osidylp_paranoia=$enableval], [osidylp_paranoia=$1]) if test "$osidylp_paranoia" = "yes"; then osidylp_paranoia=1 elif test "$osidylp_paranoia" = "no"; then osidylp_paranoia=0 fi AC_DEFINE_UNQUOTED([ODSI_PARANOIA],[$osidylp_paranoia], [Control OsiDylp's paranoid checks. Legal values: 0 - off; 1 - normal; 2 - consistency (expensive)]) case $osidylp_paranoia in 0) AC_MSG_NOTICE([OsiDylp paranoid checks disabled.]) ;; 1) AC_MSG_NOTICE([OsiDylp paranoid checks at normal level.]) ;; *) AC_MSG_NOTICE([OsiDylp paranoid checks at level $osidylp_paranoia.]) ;; esac ]) # AC_ODSI_STATISTICS(dflt) # ------------------------------------------------------------------ # Processes the statistics option. # ------------------------------------------------------------------ AC_DEFUN([AC_ODSI_STATISTICS], [ AC_ARG_ENABLE([osidylp-stats], AS_HELP_STRING([--enable-osidylp-stats], [Enable OsiDylp's support for dylp's statistics collection features (default=$1)]), [osidylp_stats=$enableval], [osidylp_stats=$1]) if test "$osidylp_stats" = "yes"; then AC_DEFINE([ODSI_STATISTICS],[1], [Define this variable to enable support for dylp's statistics collection features.]) AC_MSG_NOTICE([OsiDylp support for dylp statistics collection enabled.]) else AC_MSG_NOTICE([OsiDylp support for dylp statistics collection disabled.]) fi ]) # AC_ODSI_INFO(dflt) # ------------------------------------------------------------------ # Processes the information printing (info) option. # ------------------------------------------------------------------ AC_DEFUN([AC_ODSI_INFO], [ AC_ARG_ENABLE([osidylp-info], AS_HELP_STRING([--enable-osidylp-info], [Enable OsiDylp's informational printing (output will depend on log level) (default=$1)]), [osidylp_info=$enableval], [osidylp_info=$1]) if test "$osidylp_info" = "yes"; then AC_DEFINE([ODSI_INFOMSGS],[1], [Define this variable to enable OsiDylp's informational printing features.]) AC_MSG_NOTICE([OsiDylp informational printing enabled.]) else AC_MSG_NOTICE([OsiDylp informational printing disabled.]) fi ]) DyLP-1.10.4/DyLP/m4/ac_c_get_sunpro_libs.m40000644000175200017520000000350610705706605016622 0ustar coincoin # AC_DYLP_GET_SUNSTUDIO_LIBDIRS # ------------------------------------------------------ # Determines the correct set of Sun Studio libraries to add to the final link # command for libDylp. Why do we need this? Glad you asked. Libtool, in its # wisdom, elects to issue a bare `ld' command for the final link, instead of # using cc as the linker. Hence ld does not get the set of library directories # that cc would normally pass to ld with a -YP option. Which means it doesn't # find libsunmath, which it needs for quiet_nan. I really should just get rid # of quiet_nan, but at this point it's an obsession. To get cc to cough up the # value of the YP spec, we can run it on an empty file with the -xdryrun flag. # We need to actually do the run because the set of directories will vary # depending on command line flags. And, just to make life interesting, libtool # does not grok -YP and happily discards it, if you try to use it directly. So # we need to convert it into a bunch of -L specs. # At the end of this macro, SUNSTUDIOLIBDIRS will be set to a sequence of -L # specs matching the -YP spec. # ------------------------------------------------------ AC_DEFUN([AC_DYLP_GET_SUNSTUDIO_LIBDIRS], [ AC_MSG_NOTICE([Determining Sun Studio library directories ... ]) cat /dev/null > dylp_ac_studiodirs.c # The autoconf convention seems to be to put output in a file. Avoids problems # stuffing too-long strings into variables, I suppose. $CC -xdryrun $CFLAGS $CPPFLAGS dylp_ac_studiodirs.c 2> dylp_ac_studiodirs.c # Now find the -YP option. Remember that autoconf does not take kindly to [] in # macros, so we need to use quadrigraphs. SUNSTUDIO_LIBDIRS=`cat dylp_ac_studiodirs.c | \ sed -n -e 's/.*-Y@<:@^,@:>@*,\(@<:@^ "@:>@*\).*/-L\1/p' | \ sed -n -e 's/:/ -L/gp'` rm -f dylp_ac_studiodirs.c AC_MSG_NOTICE(["$SUNSTUDIO_LIBDIRS"]) ]) DyLP-1.10.4/DyLP/m4/ac_c_add_to_includes.m40000644000175200017520000000050410445170147016534 0ustar coincoin # AC_C_ADD_TO_INCLUDES (header-file) # ------------------------------------------------------ # Augments the list of default include files with the specified header. # ------------------------------------------------------ AC_DEFUN([AC_C_ADD_TO_INCLUDES], [ ac_includes_default="\ $ac_includes_default @%:@include <$1>" ]) DyLP-1.10.4/DyLP/m4/ac_dylp_options.m40000644000175200017520000000406611026315405015636 0ustar coincoin # AC_DYLP_PARANOIA(dflt) # ------------------------------------------------------------------ # Processes the paranoia option. # ------------------------------------------------------------------ AC_DEFUN([AC_DYLP_PARANOIA], [ AC_ARG_ENABLE([dylp-paranoia], AS_HELP_STRING([--enable-dylp-paranoia], [Enable dylp's paranoid checks (default=$1)]), [dylp_paranoia=$enableval], [dylp_paranoia=$1]) if test "$dylp_paranoia" = "yes"; then AC_DEFINE([DYLP_PARANOIA],[1], [Define this variable to enable dylp's paranoid checks.]) AC_MSG_NOTICE([Dylp paranoid checks enabled.]) else AC_MSG_NOTICE([Dylp paranoid checks disabled.]) fi ]) # AC_DYLP_STATISTICS(dflt) # ------------------------------------------------------------------ # Processes the statistics option. # ------------------------------------------------------------------ AC_DEFUN([AC_DYLP_STATISTICS], [ AC_ARG_ENABLE([dylp-stats], AS_HELP_STRING([--enable-dylp-stats], [Enable dylp's statistics collection features (default=$1)]), [dylp_stats=$enableval], [dylp_stats=$1]) if test "$dylp_stats" = "yes"; then AC_DEFINE([DYLP_STATISTICS],[1], [Define this variable to enable dylp's statistics collection features.]) AC_MSG_NOTICE([Dylp statistics collection enabled.]) else AC_MSG_NOTICE([Dylp statistics collection disabled.]) fi ]) # AC_DYLP_INFO(dflt) # ------------------------------------------------------------------ # Processes the information printing (info) option. # ------------------------------------------------------------------ AC_DEFUN([AC_DYLP_INFO], [ AC_ARG_ENABLE([dylp-info], AS_HELP_STRING([--enable-dylp-info], [Enable dylp's informational printing features (default=$1)]), [dylp_info=$enableval], [dylp_info=$1]) if test "$dylp_info" = "no"; then AC_DEFINE([DYLP_NDEBUG],[1], [Define this variable to disable dylp's informational printing features.]) AC_MSG_NOTICE([Dylp informational printing disabled.]) else AC_MSG_NOTICE([Dylp informational printing enabled.]) fi ]) DyLP-1.10.4/DyLP/m4/ac_dylp_equiv_for_cpp_bool.m40000644000175200017520000000551310540374343020023 0ustar coincoin # AC_DYLP_EQUIV_FOR_CPP_BOOL # ------------------------------------------------------------------------ # Calls to _AC_COMPUTE_INT lifted from the definition of AC_CHECK_SIZEOF in # autoconf/types.m4. Use of _AC_COMPUTE_INT automatically deals with cross # compilation (no mean feat; check the macro in autoconf/general.m4!). The # use of (long) (sizeof (bool)) as the expression is a workaround for some # HP compiler bug. See full comment in AC_CHECK_SIZEOF. # ------------------------------------------------------------------------ AC_DEFUN([AC_DYLP_EQUIV_FOR_CPP_BOOL], [ AC_MSG_NOTICE([Determining C type equivalent for C++ bool.]) # Autoconf 2.59 has issues with the MSVC cl compiler which are fixed in 2.61. # Until we upgrade, just force sizeof(bool) to 1. case $CXX in cl* | */cl*) ac_cv_sizeof_cpp_bool="1 " ;; *) AC_LANG_PUSH(C++) _AC_COMPUTE_INT([(long) (sizeof (bool))], [ac_cv_sizeof_cpp_bool], [AC_INCLUDES_DEFAULT([$3])], [AC_MSG_FAILURE([cannot compute sizeof (bool) for C++])]) AC_LANG_POP(C++) ;; esac # Force a particular value to test the code below. # ac_cv_sizeof_cpp_bool=8 AC_MSG_NOTICE([C++ bool is $ac_cv_sizeof_cpp_bool bytes.]) AC_LANG_PUSH(C) dylp_booltype="no" _AC_COMPUTE_INT([(long) (sizeof (char))], [ac_cv_sizeof_c_bool], [AC_INCLUDES_DEFAULT([$3])], [AC_MSG_FAILURE([cannot compute sizeof (char) for C])]) if test $ac_cv_sizeof_cpp_bool = $ac_cv_sizeof_c_bool; then dylp_booltype="char" fi if test $dylp_booltype = "no"; then _AC_COMPUTE_INT([(long) (sizeof (int))], [ac_cv_sizeof_c_bool], [AC_INCLUDES_DEFAULT([$3])], [AC_MSG_FAILURE([cannot compute sizeof (int) for C])]) if test $ac_cv_sizeof_cpp_bool = $ac_cv_sizeof_c_bool; then dylp_booltype="int" fi fi if test $dylp_booltype = "no"; then _AC_COMPUTE_INT([(long) (sizeof (short int))], [ac_cv_sizeof_c_bool], [AC_INCLUDES_DEFAULT([$3])], [AC_MSG_FAILURE([cannot compute sizeof (short int) for C])]) if test $ac_cv_sizeof_cpp_bool = $ac_cv_sizeof_c_bool; then dylp_booltype="short int" fi fi if test $dylp_booltype = "no"; then _AC_COMPUTE_INT([(long) (sizeof (long int))], [ac_cv_sizeof_c_bool], [AC_INCLUDES_DEFAULT([$3])], [AC_MSG_FAILURE([cannot compute sizeof (long int) for C])]) if test $ac_cv_sizeof_cpp_bool = $ac_cv_sizeof_c_bool; then dylp_booltype="long int" fi fi if test $dylp_booltype = "no"; then dylp_booltype="char" AC_MSG_WARN([Cannot determine C type to match C++ bool. Defaulting to char. Dylp will compile, but will certainly crash when executed.]) fi AC_DEFINE_UNQUOTED([BOOL],[$dylp_booltype], [Define to the C type whose size in bytes matches the size in bytes of the the C++ bool type.]) AC_LANG_POP(C) AC_MSG_NOTICE([C $dylp_booltype will be used as bool by dylp.]) ]) DyLP-1.10.4/DyLP/configure0000755000175200017520000351164613434071654013621 0ustar coincoin#! /bin/sh # From configure.ac 0.10. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for DyLP 1.10.4. # # Report bugs to . # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # # # Copyright 2006 International Business Machines and others. # All Rights Reserved. # This file is part of the open source package Coin which is distributed # under the Eclipse Public License. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1 && unset CDPATH if test -z "$ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if (echo_test_string=`eval $cmd`) 2>/dev/null && echo_test_string=`eval $cmd` && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi tagnames=${tagnames+${tagnames},}CXX tagnames=${tagnames+${tagnames},}F77 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='DyLP' PACKAGE_TARNAME='dylp' PACKAGE_VERSION='1.10.4' PACKAGE_STRING='DyLP 1.10.4' PACKAGE_BUGREPORT='coin-dylp@list.coin-or.org' ac_unique_file="src/Dylp/dylp.h" ac_default_prefix=`pwd` # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os ALWAYS_FALSE_TRUE ALWAYS_FALSE_FALSE have_svnversion DYLP_SVN_REV CDEFS ADD_CFLAGS DBG_CFLAGS OPT_CFLAGS sol_cc_compiler CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT COIN_CC_IS_CL_TRUE COIN_CC_IS_CL_FALSE MPICC CXXDEFS ADD_CXXFLAGS DBG_CXXFLAGS OPT_CXXFLAGS CXX CXXFLAGS ac_ct_CXX COIN_CXX_IS_CL_TRUE COIN_CXX_IS_CL_FALSE MPICXX EGREP LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOLM4 have_autoconf have_automake have_svn BUILDTOOLSDIR AUX_DIR abs_source_dir abs_lib_dir abs_include_dir abs_bin_dir HAVE_EXTERNALS_TRUE HAVE_EXTERNALS_FALSE host host_cpu host_vendor host_os ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL ac_c_preproc_warn_flag ac_cxx_preproc_warn_flag RPATH_FLAGS DEPENDENCY_LINKING_TRUE DEPENDENCY_LINKING_FALSE LT_LDFLAGS PKG_CONFIG ac_ct_PKG_CONFIG COIN_HAS_PKGCONFIG_TRUE COIN_HAS_PKGCONFIG_FALSE COIN_PKG_CONFIG_PATH COIN_PKG_CONFIG_PATH_UNINSTALLED COINUTILS_LIBS COINUTILS_CFLAGS COINUTILS_DATA COINUTILS_DEPENDENCIES COINUTILS_LIBS_INSTALLED COINUTILS_CFLAGS_INSTALLED COINUTILS_DATA_INSTALLED OSIDYLPLIB_CFLAGS OSIDYLPLIB_LIBS OSIDYLPLIB_PCLIBS OSIDYLPLIB_PCREQUIRES OSIDYLPLIB_DEPENDENCIES OSIDYLPLIB_CFLAGS_INSTALLED OSIDYLPLIB_LIBS_INSTALLED COIN_HAS_COINUTILS_TRUE COIN_HAS_COINUTILS_FALSE OSI_LIBS OSI_CFLAGS OSI_DATA OSI_DEPENDENCIES OSI_LIBS_INSTALLED OSI_CFLAGS_INSTALLED OSI_DATA_INSTALLED COIN_HAS_OSI_TRUE COIN_HAS_OSI_FALSE OSITESTS_LIBS OSITESTS_CFLAGS OSITESTS_DATA OSITESTS_DEPENDENCIES OSITESTS_LIBS_INSTALLED OSITESTS_CFLAGS_INSTALLED OSITESTS_DATA_INSTALLED COIN_HAS_OSITESTS_TRUE COIN_HAS_OSITESTS_FALSE SAMPLE_LIBS SAMPLE_CFLAGS SAMPLE_DATA SAMPLE_DEPENDENCIES SAMPLE_LIBS_INSTALLED SAMPLE_CFLAGS_INSTALLED SAMPLE_DATA_INSTALLED COIN_HAS_SAMPLE_TRUE COIN_HAS_SAMPLE_FALSE NETLIB_LIBS NETLIB_CFLAGS NETLIB_DATA NETLIB_DEPENDENCIES NETLIB_LIBS_INSTALLED NETLIB_CFLAGS_INSTALLED NETLIB_DATA_INSTALLED COIN_HAS_NETLIB_TRUE COIN_HAS_NETLIB_FALSE DYLPLIB_LIBS DYLPLIB_PCLIBS DYLPLIB_LIBS_INSTALLED DYLP_ERRMSGDIR coin_have_doxygen coin_have_latex coin_doxy_usedot coin_doxy_tagname coin_doxy_logname COIN_HAS_DOXYGEN_TRUE COIN_HAS_DOXYGEN_FALSE COIN_HAS_LATEX_TRUE COIN_HAS_LATEX_FALSE coin_doxy_tagfiles coin_doxy_excludes LIBEXT VPATH_DISTCLEANFILES ABSBUILDDIR LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # 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. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= 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 ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -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 | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$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 ;; -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 ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) 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 ;; -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=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 ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && 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'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac 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 echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 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 # 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 its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | 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 if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CDEFS_set=${CDEFS+set} ac_env_CDEFS_value=$CDEFS ac_cv_env_CDEFS_set=${CDEFS+set} ac_cv_env_CDEFS_value=$CDEFS ac_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_cv_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_cv_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_cv_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_cv_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_cv_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_cv_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_MPICC_set=${MPICC+set} ac_env_MPICC_value=$MPICC ac_cv_env_MPICC_set=${MPICC+set} ac_cv_env_MPICC_value=$MPICC ac_env_CXXDEFS_set=${CXXDEFS+set} ac_env_CXXDEFS_value=$CXXDEFS ac_cv_env_CXXDEFS_set=${CXXDEFS+set} ac_cv_env_CXXDEFS_value=$CXXDEFS ac_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_cv_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_cv_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_cv_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_cv_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_cv_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_cv_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_MPICXX_set=${MPICXX+set} ac_env_MPICXX_value=$MPICXX ac_cv_env_MPICXX_set=${MPICXX+set} ac_cv_env_MPICXX_value=$MPICXX ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP ac_env_F77_set=${F77+set} ac_env_F77_value=$F77 ac_cv_env_F77_set=${F77+set} ac_cv_env_F77_value=$F77 ac_env_FFLAGS_set=${FFLAGS+set} ac_env_FFLAGS_value=$FFLAGS ac_cv_env_FFLAGS_set=${FFLAGS+set} ac_cv_env_FFLAGS_value=$FFLAGS ac_env_PKG_CONFIG_set=${PKG_CONFIG+set} ac_env_PKG_CONFIG_value=$PKG_CONFIG ac_cv_env_PKG_CONFIG_set=${PKG_CONFIG+set} ac_cv_env_PKG_CONFIG_value=$PKG_CONFIG ac_env_DYLP_ERRMSGDIR_set=${DYLP_ERRMSGDIR+set} ac_env_DYLP_ERRMSGDIR_value=$DYLP_ERRMSGDIR ac_cv_env_DYLP_ERRMSGDIR_set=${DYLP_ERRMSGDIR+set} ac_cv_env_DYLP_ERRMSGDIR_value=$DYLP_ERRMSGDIR # # 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 DyLP 1.10.4 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 \`..'] _ACEOF cat <<_ACEOF 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] --datadir=DIR read-only architecture-independent data [PREFIX/share] --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] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _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 DyLP 1.10.4:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug compile all projects with debug options tests (implies --disable-shared) --enable-debug-dylp compile project DyLP with debug compiler flags --enable-msvc Prefer (i)cl/ifort/link over GNU on MinGW/Cygwin. --enable-static[=PKGS] build static libraries [default=no] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --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-dependency-linking disable linking library dependencies into shared libraries --disable-pkg-config disable use of pkg-config (if available) --disable-interpackage-dependencies disables deduction of Makefile dependencies from package linker flags --enable-dylp-paranoia Enable dylp's paranoid checks (default=no) --enable-dylp-stats Enable dylp's statistics collection features (default=no) --enable-dylp-info Enable dylp's informational printing features (default=yes) --enable-osidylp-info Enable OsiDylp's informational printing (output will depend on log level) (default=yes) --enable-osidylp-stats Enable OsiDylp's support for dylp's statistics collection features (default=no) --enable-osidylp-paranoia Control osidylp's paranoid checks. 0 is off, 1 is index checks, 2 is consistency checks (expensive) (default=1) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-dylp-verbosity specify the debug verbosity level for project DyLP --with-dylp-checklevel specify the sanity check level for project DyLP --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] --with-coin-instdir prefix of installation directory for precompiled COIN packages --with-coinutils-lib linker flags for using package CoinUtils --with-coinutils-incdir directory with header files for using package CoinUtils --with-coinutils-datadir directory with data files for using package CoinUtils --with-osi-lib linker flags for using package Osi --with-osi-incdir directory with header files for using package Osi --with-osi-datadir directory with data files for using package Osi --with-ositests-lib linker flags for using package OsiTests --with-ositests-incdir directory with header files for using package OsiTests --with-ositests-datadir directory with data files for using package OsiTests --with-sample-lib linker flags for using package Sample --with-sample-incdir directory with header files for using package Sample --with-sample-datadir directory with data files for using package Sample --with-netlib-lib linker flags for using package Netlib --with-netlib-incdir directory with header files for using package Netlib --with-netlib-datadir directory with data files for using package Netlib --with-dot use dot (from graphviz) when creating documentation with doxygen if available; --without-dot to disable Some influential environment variables: CDEFS Additional -D flags to be used when compiling C code. ADD_CFLAGS Additional C compiler options DBG_CFLAGS Debug C compiler options OPT_CFLAGS Optimize C compiler options CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory MPICC C MPI Compiler CXXDEFS Additional -D flags to be used when compiling C++ code. ADD_CXXFLAGS Additional C++ compiler options DBG_CXXFLAGS Debug C++ compiler options OPT_CXXFLAGS Optimize C++ compiler options CXX C++ compiler command CXXFLAGS C++ compiler flags MPICXX C++ MPI Compiler CPP C preprocessor CXXCPP C++ preprocessor F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags PKG_CONFIG path to pkg-config utility DYLP_ERRMSGDIR Directory containing the DyLP error message text file (dy_errmsgs.txt). Should be set to /absolute/path/to/srcdir/DyLP/src/Dylp, using native path syntax (i.e., drive letters and backslashes on Windows). 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 fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style 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 elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF DyLP configure 1.10.4 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by DyLP $as_me 1.10.4, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { 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` hostinfo = `(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=. echo "PATH: $as_dir" done } >&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_sep= 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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$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 ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >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 # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" 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. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 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 `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 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 { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`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. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } 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 # List one file in the package so that the configure script can test # whether the package is actually there # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. ############################################################################# # Standard build tool stuff # ############################################################################# # Get the system type ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; 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 { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Do a bit of basic setup for configuration # As backup, we make sure we don't loose an FLIBS if it has been set # by the user save_FLIBS="$FLIBS" # A useful makefile conditional that is always false if false; then ALWAYS_FALSE_TRUE= ALWAYS_FALSE_FALSE='#' else ALWAYS_FALSE_TRUE='#' ALWAYS_FALSE_FALSE= fi # We set the following variable so that we know later in AC_COIN_FINALIZE # that we are in a project main directory coin_projectdir=yes # Set the project's version numbers cat >>confdefs.h <<_ACEOF #define DYLP_VERSION "$PACKAGE_VERSION" _ACEOF coin_majorver=`echo $PACKAGE_VERSION | sed -n -e 's/^\([0-9]*\).*/\1/gp'` coin_minorver=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.\([0-9]*\).*/\1/gp'` coin_releasever=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\).*/\1/gp'` if test "x$coin_majorver" = x ; then coin_majorver=9999 ; fi if test "x$coin_minorver" = x ; then coin_minorver=9999 ; fi if test "x$coin_releasever" = x ; then coin_releasever=9999 ; fi cat >>confdefs.h <<_ACEOF #define DYLP_VERSION_MAJOR $coin_majorver _ACEOF cat >>confdefs.h <<_ACEOF #define DYLP_VERSION_MINOR $coin_minorver _ACEOF cat >>confdefs.h <<_ACEOF #define DYLP_VERSION_RELEASE $coin_releasever _ACEOF # We use the following variable to have a string with the upper case # version of the project name COIN_PRJCT=DYLP # Set the project's SVN revision number. The complicated sed expression # (made worse by quadrigraphs) ensures that things like 4123:4168MS end up # as a single number. # Extract the first word of "svnversion", so it can be a program name with args. set dummy svnversion; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svnversion+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svnversion"; then ac_cv_prog_have_svnversion="$have_svnversion" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svnversion="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svnversion" && ac_cv_prog_have_svnversion="no" fi fi have_svnversion=$ac_cv_prog_have_svnversion if test -n "$have_svnversion"; then echo "$as_me:$LINENO: result: $have_svnversion" >&5 echo "${ECHO_T}$have_svnversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "x$have_svnversion" = xyes; then svn_rev_tmp=`LANG=en_EN svnversion $srcdir 2>/dev/null` if test "x$svn_rev_tmp" != xexported -a "x$svn_rev_tmp" != x -a "x$svn_rev_tmp" != "xUnversioned directory"; then DYLP_SVN_REV=`echo $svn_rev_tmp | sed -n -e 's/^[0-9]*://' -e 's/\([0-9]\)[^0-9]*$/\1/p'` cat >>confdefs.h <<_ACEOF #define DYLP_SVN_REV $DYLP_SVN_REV _ACEOF fi fi # Capture libtool library version, if given. coin_libversion=10:4:9 # Check if user wants to produce debugging code echo "$as_me:$LINENO: checking whether we want to compile in debug mode" >&5 echo $ECHO_N "checking whether we want to compile in debug mode... $ECHO_C" >&6 # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" case "${enableval}" in yes) coin_debug_compile=true if test "${enable_shared+set}" = set; then :; else enable_shared=no fi ;; no) coin_debug_compile=false ;; *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug" >&5 echo "$as_me: error: bad value ${enableval} for --enable-debug" >&2;} { (exit 1); exit 1; }; } ;; esac else coin_debug_compile=false fi; # Check whether --enable-debug-dylp or --disable-debug-dylp was given. if test "${enable_debug_dylp+set}" = set; then enableval="$enable_debug_dylp" case "${enableval}" in yes) coin_debug_compile=true ;; no) coin_debug_compile=false ;; *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug-dylp" >&5 echo "$as_me: error: bad value ${enableval} for --enable-debug-dylp" >&2;} { (exit 1); exit 1; }; } ;; esac else : fi; # m4_ifvaln([DyLP], if test $coin_debug_compile = true; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Check whether --with-dylp-verbosity or --without-dylp-verbosity was given. if test "${with_dylp_verbosity+set}" = set; then withval="$with_dylp_verbosity" if test "$withval" = yes; then withval=1 fi coin_dylp_verbosity=$withval else coin_dylp_verbosity=0 fi; cat >>confdefs.h <<_ACEOF #define COIN_DYLP_VERBOSITY $coin_dylp_verbosity _ACEOF # Check whether --with-dylp-checklevel or --without-dylp-checklevel was given. if test "${with_dylp_checklevel+set}" = set; then withval="$with_dylp_checklevel" if test "$withval" = yes; then withval=1 fi coin_dylp_checklevel=$withval else coin_dylp_checklevel=0 fi; cat >>confdefs.h <<_ACEOF #define COIN_DYLP_CHECKLEVEL $coin_dylp_checklevel _ACEOF # m4_ifvaln([DyLP], # Get the name of the C compiler and appropriate compiler options # for backward compatibility # Check whether --enable-doscompile or --disable-doscompile was given. if test "${enable_doscompile+set}" = set; then enableval="$enable_doscompile" enable_doscompile=$enableval else enable_doscompile=no fi; # Check whether --enable-msvc or --disable-msvc was given. if test "${enable_msvc+set}" = set; then enableval="$enable_msvc" enable_msvc=$enableval else enable_msvc=no if test "$enable_doscompile" = msvc ; then enable_msvc=yes elif test "$enable_doscompile" != no ; then { { echo "$as_me:$LINENO: error: --enable-doscompile=$enable_doscompile not supported anymore." >&5 echo "$as_me: error: --enable-doscompile=$enable_doscompile not supported anymore." >&2;} { (exit 1); exit 1; }; } fi fi; if test "$enable_msvc" = MD; then enable_shared=yes enable_msvc=yes fi if test "$enable_msvc" = yes; then case $build in *-cygwin* | *-mingw*) ;; *) { { echo "$as_me:$LINENO: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&5 echo "$as_me: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&2;} { (exit 1); exit 1; }; } ;; esac 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 # For consistency, we set the C compiler to the same value of the C++ # compiler, if the C++ is set, but the C compiler isn't (only for CXX=cl) if test x"$CXX" != x; then case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) if test x"$CC" = x; then CC="$CXX" { echo "$as_me:$LINENO: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&5 echo "$as_me: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&2;} fi ;; esac fi coin_has_cc=yes save_cflags="$CFLAGS" # For *-*-solaris*, promote Studio/Workshop cc compiler to front of list. # Depending on the user's PATH, when Studio/Workshop cc is not present we may # find /usr/ucb/cc, which is almost certainly not a good choice for the C # compiler. In this case, put cc after gcc. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl gcc" else comps="gcc icl cl" fi ;; *-*-solaris*) # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_sol_cc_compiler+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$sol_cc_compiler"; then ac_cv_prog_sol_cc_compiler="$sol_cc_compiler" # 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_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_sol_cc_compiler="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done 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_sol_cc_compiler 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 sol_cc_compiler to just the basename; use the full file name. shift ac_cv_prog_sol_cc_compiler="$as_dir/$ac_word${1+' '}$@" fi fi fi fi sol_cc_compiler=$ac_cv_prog_sol_cc_compiler if test -n "$sol_cc_compiler"; then echo "$as_me:$LINENO: result: $sol_cc_compiler" >&5 echo "${ECHO_T}$sol_cc_compiler" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$sol_cc_compiler" = "cc" ; then comps="cc xlc gcc pgcc icc" else comps="xlc gcc pgcc icc cc" fi ;; *-*-darwin*) comps="clang gcc cc" ;; *-linux-gnu*) comps="gcc cc pgcc icc xlc" ;; *-linux-*) comps="xlc gcc cc pgcc icc" ;; *) comps="xlc_r xlc cc gcc pgcc icc" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CC || test "${ac_cv_prog_CC+set}" != set || { ac_cv_prog_CC=; export ac_cv_prog_CC; } # AC_MSG_NOTICE([C compiler candidates: $comps]) 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 for ac_prog in $comps 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out 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. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* 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 -std1 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 -std1. */ int osf4_cc_array ['\x00' == 0 ? 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 # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f 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 -z "$CC" ; then { { echo "$as_me:$LINENO: error: Failed to find a C compiler!" >&5 echo "$as_me: error: Failed to find a C compiler!" >&2;} { (exit 1); exit 1; }; } fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cc_g" = yes ; then ac_cv_prog_cc_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CFLAGS="$save_cflags" # add automake conditional so we can recognize cl compiler in makefile coin_cc_is_cl=false case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_cc_is_cl=true ;; esac if test $coin_cc_is_cl = true; then COIN_CC_IS_CL_TRUE= COIN_CC_IS_CL_FALSE='#' else COIN_CC_IS_CL_TRUE='#' COIN_CC_IS_CL_FALSE= fi # Check if a project specific CFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CFLAGS+set} if test x$coin_tmp = xset; then eval CFLAGS=\${${COIN_PRJCT}_CFLAGS} fi fi if test x"$CFLAGS" = x; then coin_add_cflags= coin_opt_cflags= coin_dbg_cflags= coin_warn_cflags= if test "$GCC" = "yes"; then case "$CC" in icc* | */icc*) ;; *) coin_opt_cflags="-O3" coin_add_cflags="-pipe" coin_dbg_cflags="-g -O0" coin_warn_cflags="-Wimplicit -Wparentheses -Wsequence-point -Wreturn-type -Wcast-qual -Wall -Wno-unknown-pragmas -Wno-long-long" esac fi if test -z "$coin_opt_cflags"; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -O2' coin_dbg_cflags='-MDd' else coin_opt_cflags='-MT -O2' coin_dbg_cflags='-MTd' fi coin_add_cflags='-nologo -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -Ox' coin_dbg_cflags='-MDd -debug' else coin_opt_cflags='-MT -Ox' coin_dbg_cflags='-MTd -debug' fi coin_add_cflags='-nologo -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CC" in icc* | */icc*) coin_opt_cflags="-O3 -ip -mp1" coin_add_cflags="" coin_dbg_cflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cflags="-i_dynamic $coin_add_cflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgcc* | */pgcc*) coin_opt_cflags="-fast" coin_add_cflags="-Kieee -pc 64" coin_dbg_cflags="-g" ;; esac ;; *-ibm-*) case "$CC" in xlc* | */xlc* | mpxlc* | */mpxlc*) coin_opt_cflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cflags="-bmaxdata:0x80000000 -qsuppress=1500-036 -qsuppress=1500-029" coin_dbg_cflags="-g" ;; esac ;; *-hp-*) coin_opt_cflags="-O" coin_add_cflags="-Ae" coin_dbg_cflags="-g" ;; *-*-solaris*) coin_opt_cflags="-xO4" coin_dbg_cflags="-g" ;; *-sgi-*) coin_opt_cflags="-O -OPT:Olimit=0" coin_dbg_cflags="-g" ;; esac fi if test "$ac_cv_prog_cc_g" = yes && test -z "$coin_dbg_cflags" ; then coin_dbg_cflags="-g" fi if test -z "$coin_opt_cflags"; then # Try if -O option works if nothing else is set CFLAGS="-O" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cflags" = xyes; then coin_warn_cflags= fi if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$coin_dbg_cflags $coin_add_cflags $coin_warn_cflags" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$coin_opt_cflags $coin_add_cflags -DNDEBUG $coin_warn_cflags" fi DBG_CFLAGS="$DBG_CFLAGS $ADD_CFLAGS $CDEFS" OPT_CFLAGS="$OPT_CFLAGS $ADD_CFLAGS $CDEFS" if test "$coin_debug_compile" = "true"; then CFLAGS="$DBG_CFLAGS" else CFLAGS="$OPT_CFLAGS" fi else CFLAGS="$CFLAGS $ADD_CFLAGS $CDEFS" if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$CFLAGS" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$CFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CFLAGS="$CFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CFLAGS works save_CFLAGS="$CFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&2;} CFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C compiler options are: $CFLAGS" >&5 echo "$as_me: C compiler options are: $CFLAGS" >&6;} if test x"$MPICC" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C compiler $MPICC" >&5 echo "$as_me: Will use MPI C compiler $MPICC" >&6;} CC="$MPICC" fi # Correct the LD variable if we are using the MS or Intel-windows compiler case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac 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 # Get the name of the C++ compiler and appropriate compiler options #Let's try if that overcomes configuration problem with VC++ 6.0 ac_ext=cc 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 coin_has_cxx=yes save_cxxflags="$CXXFLAGS" # For *-*-solaris*, promote Studio/Workshop compiler to front of list. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl g++" else comps="g++ icl cl" fi ;; *-*-solaris*) comps="CC xlC_r aCC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; *-darwin*) comps="clang++ g++ c++ CC" ;; *-linux-gnu*) comps="g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC xlC_r aCC CC" ;; *) comps="xlC_r aCC CC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CXX || test "${ac_cv_prog_CXX+set}" != set || { ac_cv_prog_CXX=; export ac_cv_prog_CXX; } # AC_MSG_NOTICE([C++ compiler candidates: $comps]) ac_ext=cc 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 -n "$ac_tool_prefix"; then for ac_prog in $CCC $comps 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$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 for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=cc 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_PROG_CXX sets CXX to g++ if it cannot find a working C++ compiler #thus, we test here whether $CXX is actually working ac_ext=cc 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 echo "$as_me:$LINENO: checking whether C++ compiler $CXX works" >&5 echo $ECHO_N "checking whether C++ compiler $CXX works... $ECHO_C" >&6; cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&5 echo "$as_me: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cc 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 coin_cxx_is_cl=false # It seems that we need to cleanup something here for the Windows case "$CXX" in clang* | */clang*) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) sed -e 's/^void exit (int);//' confdefs.h >> confdefs.hh mv confdefs.hh confdefs.h coin_cxx_is_cl=true ;; esac # add automake conditional so we can recognize cl compiler in makefile if test $coin_cxx_is_cl = true; then COIN_CXX_IS_CL_TRUE= COIN_CXX_IS_CL_FALSE='#' else COIN_CXX_IS_CL_TRUE='#' COIN_CXX_IS_CL_FALSE= fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cxx_g" = yes ; then ac_cv_prog_cxx_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CXXFLAGS="$save_cxxflags" # Check if a project specific CXXFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CXXFLAGS+set} if test x$coin_tmp = xset; then eval CXXFLAGS=\${${COIN_PRJCT}_CXXFLAGS} fi fi if test x"$CXXFLAGS" = x; then # ToDo decide whether we want -DNDEBUG for optimization coin_add_cxxflags= coin_opt_cxxflags= coin_dbg_cxxflags= coin_warn_cxxflags= if test "$GXX" = "yes"; then case "$CXX" in icpc* | */icpc*) ;; *) # ToDo decide about unroll-loops coin_opt_cxxflags="-O3" coin_add_cxxflags="-pipe" coin_dbg_cxxflags="-g -O0" coin_warn_cxxflags="-Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas -Wno-long-long" esac fi # Note that we do not need to cover GCC in the following tests. if test -z "$coin_opt_cxxflags"; then case $build in *-cygwin* | *-mingw*) case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -O2' coin_dbg_cxxflags='-MDd' else coin_opt_cxxflags='-MT -O2' coin_dbg_cxxflags='-MTd' fi coin_add_cxxflags='-nologo -EHsc -GR -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -Ox' coin_dbg_cxxflags='-MDd -debug' else coin_opt_cxxflags='-MT -Ox' coin_dbg_cxxflags='-MTd -debug' fi coin_add_cxxflags='-nologo -EHsc -GR -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CXX" in icpc* | */icpc*) coin_opt_cxxflags="-O3 -ip -mp1" coin_add_cxxflags="" coin_dbg_cxxflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CXXFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cxxflags="-i_dynamic $coin_add_cxxflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgCC* | */pgCC*) coin_opt_cxxflags="-fast" coin_add_cxxflags="-Kieee -pc 64" coin_dbg_cxxflags="-g" ;; esac ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) coin_opt_cxxflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cxxflags="-bmaxdata:0x80000000 -qrtti=dyna -qsuppress=1500-036 -qsuppress=1500-029 -qsourcetype=c++" coin_dbg_cxxflags="-g" ;; esac ;; *-hp-*) case "$CXX" in aCC* | */aCC* ) coin_opt_cxxflags="-O" coin_add_cxxflags="-AA" coin_dbg_cxxflags="-g" ;; esac ;; *-*-solaris*) coin_opt_cxxflags="-O4" coin_dbg_cxxflags="-g" ;; esac fi # Generic flag settings. If these don't work, add a case above. if test "$ac_cv_prog_cxx_g" = yes && test -z "$coin_dbg_cxxflags" ; then coin_dbg_cxxflags="-g" fi if test -z "$coin_opt_cxxflags"; then # Try if -O option works if nothing else is set CXXFLAGS=-O cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cxxflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cxxflags" = xyes; then coin_warn_cxxflags= fi # Do final setup of flags based on values determined above. if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$coin_dbg_cxxflags $coin_add_cxxflags $coin_warn_cxxflags" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$coin_opt_cxxflags $coin_add_cxxflags -DNDEBUG $coin_warn_cxxflags" fi DBG_CXXFLAGS="$DBG_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" OPT_CXXFLAGS="$OPT_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test "$coin_debug_compile" = "true"; then CXXFLAGS="$DBG_CXXFLAGS" else CXXFLAGS="$OPT_CXXFLAGS" fi # Handle the case where CXXFLAGS was set externally. else CXXFLAGS="$CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$CXXFLAGS" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$CXXFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CXXFLAGS="$CXXFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CXXFLAGS works save_CXXFLAGS="$CXXFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&2;} CXXFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C++ compiler options are: $CXXFLAGS" >&5 echo "$as_me: C++ compiler options are: $CXXFLAGS" >&6;} if test x"$MPICXX" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C++ compiler $MPICXX" >&5 echo "$as_me: Will use MPI C++ compiler $MPICXX" >&6;} CXX="$MPICXX" fi # correct the LD variable in a build with MS or Intel-windows compiler case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac 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 # Initialize automake and libtool { # START coin_disable_shared=no # Test if force_shared has been set if test "x" = xforce_shared; then if test x$enable_shared = xno; then { { echo "$as_me:$LINENO: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&5 echo "$as_me: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&2;} { (exit 1); exit 1; }; } fi enable_shared=yes; else case $build in *-cygwin* | *-mingw*) coin_disable_shared=yes if test x"$enable_shared" = xyes; then case "$CC" in clang* ) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Building of DLLs not supported in this configuration." >&5 echo "$as_me: Building of DLLs not supported in this configuration." >&6;} ;; *gcc*) if test x"$enable_dependency_linking" = xyes; then coin_disable_shared=no else { echo "$as_me:$LINENO: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&5 echo "$as_me: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&2;} fi ;; *) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; esac fi ;; *-aix*) coin_disable_shared=yes platform=AIX if test x"$enable_shared" = xyes; then { echo "$as_me:$LINENO: WARNING: Shared objects are not supported." >&5 echo "$as_me: WARNING: Shared objects are not supported." >&2;} fi ;; esac fi if test x"$coin_disable_shared" = xyes; then if test x"$enable_shared" = xyes; then : else # we don't disable shared, because it was not selected anyway coin_disable_shared=no fi enable_shared=no fi # By default, we only want the shared objects to be compiled # Check whether --enable-static or --disable-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; # Initialize automake echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi am__api_version="1.9" # 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. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_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 ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done 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. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$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' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # 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 ( 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 rm -f conftest.file 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". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 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 $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-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='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi # AC_MSG_NOTICE([Beginning automake initialisation.]) # Stuff for automake # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } 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='dylp' VERSION='1.10.4' 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"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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'. 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 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 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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 echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$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 depcc="$CXX" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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'. 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 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 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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 echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 # Check whether --enable-maintainer-mode or --disable-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; echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$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 coin_have_externals=no if test "$enable_maintainer_mode" = yes; then # If maintainer mode is chosen, we make sure that the correct versions # of the tools are used, and that we know where libtool.m4 is (to # recreate acinclude.m4) LIBTOOLM4= # Normally, $HOME AUTOTOOLS_DFLT=$HOME echo "$as_me:$LINENO: checking whether we are using the correct autotools" >&5 echo $ECHO_N "checking whether we are using the correct autotools... $ECHO_C" >&6 if test "${ac_cv_use_correct_autotools+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_use_correct_autotools=check fi echo "$as_me:$LINENO: result: $ac_cv_use_correct_autotools" >&5 echo "${ECHO_T}$ac_cv_use_correct_autotools" >&6 if test $ac_cv_use_correct_autotools = check; then ac_cv_use_correct_autotools=yes # Check if we have autoconf # Extract the first word of "autoconf", so it can be a program name with args. set dummy autoconf; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_autoconf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_autoconf"; then ac_cv_prog_have_autoconf="$have_autoconf" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_autoconf="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_autoconf" && ac_cv_prog_have_autoconf="no" fi fi have_autoconf=$ac_cv_prog_have_autoconf if test -n "$have_autoconf"; then echo "$as_me:$LINENO: result: $have_autoconf" >&5 echo "${ECHO_T}$have_autoconf" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_autoconf = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether autoconf is the correct version correct_version='2.59' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of autoconf" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of autoconf... $ECHO_C" >&6 autoconf --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of autoconf as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of autoconf as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable autoconf is picked up from the correct location echo "$as_me:$LINENO: checking whether autoconf is coming from the correct location" >&5 echo $ECHO_N "checking whether autoconf is coming from the correct location... $ECHO_C" >&6 autoconf_dir=`which autoconf | sed -e 's=/autoconf=='` autoconf_dir=`cd $autoconf_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $autoconf_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if we have automake # Extract the first word of "automake", so it can be a program name with args. set dummy automake; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_automake+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_automake"; then ac_cv_prog_have_automake="$have_automake" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_automake="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_automake" && ac_cv_prog_have_automake="no" fi fi have_automake=$ac_cv_prog_have_automake if test -n "$have_automake"; then echo "$as_me:$LINENO: result: $have_automake" >&5 echo "${ECHO_T}$have_automake" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_automake = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether automake is the correct version correct_version='1.9.6' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of automake" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of automake... $ECHO_C" >&6 automake --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of automake as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of automake as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable automake is picked up from the correct location echo "$as_me:$LINENO: checking whether automake is coming from the correct location" >&5 echo $ECHO_N "checking whether automake is coming from the correct location... $ECHO_C" >&6 automake_dir=`which automake | sed -e 's=/automake=='` automake_dir=`cd $automake_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $automake_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if this is the correct version of libtool (with escaped dots) if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi correct_version='1.5.22' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` if test -r $want_dir/libtool/ltmain.sh; then have_ltmain=yes : else have_ltmain=no : fi echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of libtool." >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of libtool.... $ECHO_C" >&6 if test $have_ltmain = yes; then if $EGREP $grep_version $want_dir/libtool/ltmain.sh >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of libtool." >&5 echo "$as_me: error: You don't have the correct version of libtool." >&2;} { (exit 1); exit 1; }; } fi else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: I cannot find the ltmain.sh file." >&5 echo "$as_me: error: I cannot find the ltmain.sh file." >&2;} { (exit 1); exit 1; }; } fi fi # Check if we can find the libtool file if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi if test -r $want_dir/aclocal/libtool.m4; then LIBTOOLM4="$want_dir/aclocal/libtool.m4" : else { { echo "$as_me:$LINENO: error: I cannot find the libtool.m4 file." >&5 echo "$as_me: error: I cannot find the libtool.m4 file." >&2;} { (exit 1); exit 1; }; } : fi # Check if we have an Dependencies file if test -r $srcdir/Dependencies; then coin_have_externals=yes fi # Check if subversion is installed and understands https # Extract the first word of "svn", so it can be a program name with args. set dummy svn; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svn+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svn"; then ac_cv_prog_have_svn="$have_svn" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svn="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svn" && ac_cv_prog_have_svn="no" fi fi have_svn=$ac_cv_prog_have_svn if test -n "$have_svn"; then echo "$as_me:$LINENO: result: $have_svn" >&5 echo "${ECHO_T}$have_svn" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test x$have_svn = xyes; then echo "$as_me:$LINENO: checking whether svn understands https" >&5 echo $ECHO_N "checking whether svn understands https... $ECHO_C" >&6 if test "${ac_cv_svn_understands_https+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else svn --version > confauto.out 2>&1 if $EGREP https confauto.out >/dev/null 2>&1; then ac_cv_svn_understands_https=yes else ac_cv_svn_understands_https=no have_svn=no ac_cv_prog_have_svn=no fi rm -f confauto.out fi echo "$as_me:$LINENO: result: $ac_cv_svn_understands_https" >&5 echo "${ECHO_T}$ac_cv_svn_understands_https" >&6 fi # Find the location of the BuildTools directory BUILDTOOLSDIR= if test -r $srcdir/BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/BuildTools else if test -r $srcdir/../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../BuildTools else if test -r $srcdir/../../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../../BuildTools else { { echo "$as_me:$LINENO: error: Cannot find the BuildTools directory" >&5 echo "$as_me: error: Cannot find the BuildTools directory" >&2;} { (exit better disable maintainer mode.); exit better disable maintainer mode.; }; } fi fi fi # for running automake by make, we need to have Makemain.inc available at the place where it usually can be found during run_autotools if test "$BUILDTOOLSDIR" != "$srcdir/BuildTools" ; then $LN_S `cd $BUILDTOOLSDIR; pwd` "$srcdir/BuildTools" fi # The following variable is set to the name of the directory where # the autotool scripts are located AUX_DIR=$ac_aux_dir fi # helpful variable for the base directory of this package abs_source_dir=`cd $srcdir; pwd` # Stuff for example Makefiles if test x$prefix = xNONE; then full_prefix=$ac_default_prefix else full_prefix=$prefix fi full_prefix=`cd $full_prefix ; pwd` abs_lib_dir=$full_prefix/lib abs_include_dir=$full_prefix/include abs_bin_dir=$full_prefix/bin if test $coin_have_externals = yes && test x$have_svn = xyes; then HAVE_EXTERNALS_TRUE= HAVE_EXTERNALS_FALSE='#' else HAVE_EXTERNALS_TRUE='#' HAVE_EXTERNALS_FALSE= fi # AC_MSG_NOTICE([End automake initialisation.]) LIBTOOL= if test -f ../libtool; then coin_config_dir=.. LIBTOOL='$(SHELL) $(top_builddir)/../libtool' fi if test "x$LIBTOOL" = x; then if test -f ../../libtool; then coin_config_dir=../.. LIBTOOL='$(SHELL) $(top_builddir)/../../libtool' fi fi if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Creating libtool script (calling COIN_PROG_LIBTOOL).]) # Stuff for libtool # Check whether --enable-shared or --disable-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 --enable-fast-install or --disable-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; echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 if test "${lt_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # 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 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 fi SED=$lt_cv_path_SED echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 # Check whether --with-gnu-ld or --without-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. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&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 echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$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 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 echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 echo "${ECHO_T}$lt_cv_path_NM" >&6 NM="$lt_cv_path_NM" echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 aix4* | aix5*) 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'. lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | kfreebsd*-gnu | 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 ;; 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]) 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 ;; interix3*) # 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 Linux ELF. linux*) 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=unknown ;; 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 ;; solaris*) 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 ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac fi echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 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 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 whether --enable-libtool-lock or --disable-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:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 5842 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|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-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) 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" echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f 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 echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$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 ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) LD="${LD-ld} -64" ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" 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 echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f 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 echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #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)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF 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=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------- ## ## Report this to coin-dylp@list.coin-or.org ## ## ----------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done 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=cc 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 echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f 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 echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc 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 fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done F77=$ac_ct_F77 fi # Provide some information about the compiler. echo "$as_me:6976:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo 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 # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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*) # 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; ;; 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 ;; 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 ;; *) # 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. SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done 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` ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 else echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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]*\)' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \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\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; linux*) if test "$host_cpu" = ia64; then symcode='[ABCDGIRSTW]' lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" 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 # 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 # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Try without a prefix undercore, 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. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$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=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && 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 < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_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 -f 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 echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6 else echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6 objdir=$lt_cv_objdir 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 # 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 to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' 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 \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 <&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 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 echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 <&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 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 echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAGIC_CMD=: fi fi fi ;; esac enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-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 # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi; test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= 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;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' # 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 printf "$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 printf "$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 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... lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$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:8043: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8047: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$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= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 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*) # 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' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # 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' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; interix3*) # 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 ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; hpux*) # 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='-fPIC' ;; esac ;; *) lt_prog_compiler_pic='-fPIC' ;; 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 ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic='-qnocommon' lt_prog_compiler_wl='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # 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' ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # 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' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) 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 echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 echo "${ECHO_T}$lt_prog_compiler_pic" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext printf "$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:8311: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8315: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 if test x"$lt_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 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 # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works=yes fi else lt_prog_compiler_static_works=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 if test x"$lt_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:8415: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8419: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag= enable_shared_with_static_runtimes=no archive_cmds= archive_expsym_cmds= old_archive_From_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported link_all_deplibs=unknown hardcode_automatic=no module_cmds= module_expsym_cmds= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # 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_" # 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. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # 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 if test "$with_gnu_ld" = 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>/dev/null` in *\ [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 aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) 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 # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs=no ;; 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*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' 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/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' 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 ;; interix3*) 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' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= 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; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # 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; $echo \"$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' ;; esac archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; 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 -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi 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 $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' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&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. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then 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 ;; 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 ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$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 $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 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 ;; aix4* | aix5*) 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 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")) && (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].*|aix5*) 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_libdir_separator=':' link_all_deplibs=yes 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 hardcode_direct=yes 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 # 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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 echo "${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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' 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*) 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 # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32*) # 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. 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 `echo "$deplibs" | $SED -e '\''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' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs=no ;; esac fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=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* | kfreebsd*-gnu | dragonfly*) archive_cmds='$CC -shared -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 -fPIC ${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 -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${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 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 -a "$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 ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${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' ;; *) archive_cmds='$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 hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=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 $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld='-rpath $libdir' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: 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 ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no 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 ;; 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" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi 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} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${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='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -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; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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 hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${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 ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else 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' 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 linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; 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*) 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='`test -z "$SCOABSPATH" && echo ${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,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$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 fi echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6 test "$ld_shlibs" = no && can_build_shared=no # # 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 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:$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=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 echo "${ECHO_T}$archive_cmds_need_lc" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var" || \ test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existant 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_AC_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 echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6 if test "$hardcode_action" = relink; 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 striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&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" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}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" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac 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*) 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 echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; 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 ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* 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_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* 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_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" 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" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 < #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 #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=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; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && 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 echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$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\" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 < #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 #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=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; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && 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 echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$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 # Report which library types will actually be built echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&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 ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler \ CC \ LD \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_prog_compiler_no_builtin_flag \ export_dynamic_flag_spec \ thread_safe_flag_spec \ whole_archive_flag_spec \ enable_shared_with_static_runtimes \ old_archive_cmds \ old_archive_from_new_cmds \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ archive_cmds \ archive_expsym_cmds \ postinstall_cmds \ postuninstall_cmds \ old_archive_from_expsyms_cmds \ allow_undefined_flag \ no_undefined_flag \ export_symbols_cmds \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ hardcode_automatic \ module_cmds \ module_expsym_cmds \ lt_cv_prog_compiler_c_o \ exclude_expsyms \ include_expsyms; do case $var in old_archive_cmds | \ old_archive_from_new_cmds | \ archive_cmds | \ archive_expsym_cmds | \ module_cmds | \ module_expsym_cmds | \ old_archive_from_expsyms_cmds | \ export_symbols_cmds | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" { echo "$as_me:$LINENO: creating $ofile" >&5 echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 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 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # 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. # 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//" # 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 # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # 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 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler # Is the compiler the GNU C compiler? with_gcc=$GCC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # 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 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # 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 and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps # Dependencies to place after the objects being linked to create a # shared library. 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 # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # 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 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 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # 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 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_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 # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\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 EOF ;; esac # 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) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" # Check whether --with-tags or --without-tags was given. if test "${with_tags+set}" = set; then withval="$with_tags" tagnames="$withval" fi; if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi if test -z "$LTCFLAGS"; then eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 echo "$as_me: error: invalid tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} { (exit 1); exit 1; }; } fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) 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=cc 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= export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # 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= # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC 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++"} 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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # We don't want -fno-exception wen 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 or --without-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. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&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 echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$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 -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -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 "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix4* | aix5*) 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].*|aix5*) 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_libdir_separator_CXX=':' link_all_deplibs_CXX=yes 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 hardcode_direct_CXX=yes 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 # 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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 echo "${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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' 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*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' 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 ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='' link_all_deplibs_CXX=yes if test "$GXX" = yes ; then lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else 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' fi module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_CXX=no ;; esac 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 ;; freebsd[12]*) # 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* | kfreebsd*-gnu | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; 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) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${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*) hardcode_libdir_flag_spec_ld_CXX='+b $libdir' ;; *) 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_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; echo $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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${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 ;; interix3*) 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" && echo -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 -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${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=: ;; linux*) 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; echo $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*) # 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*) # Portland Group C++ compiler 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' 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; $echo \"$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=`echo $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; echo $list' ;; 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::"' ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no 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='echo' ;; osf3*) 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 # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) 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" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' 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. # # 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=`echo $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; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' 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 "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; 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. old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) 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" && echo -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' 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=`echo $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; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' 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 "\-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*) # 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 C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. We must also pass each convience library through # to the system linker between allextract/defaultextract. # The C++ compiler will combine linker options so we # cannot just pass the convience library names through # without $wl. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='echo' # 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 -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 -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 \"\-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 \"\-L\"" fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' 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. # 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. # So that behaviour is only enabled if SCOABSPATH is set to a # non-empty value in the environment. Most likely only useful for # creating official distributions of packages. # This is a hack until libtool officially supports absolute path # names for shared libraries. 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='`test -z "$SCOABSPATH" && echo ${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,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$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 echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$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... cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` for p in `eval $output_verbose_link_cmd`; do case $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 else prev= fi if test "$pre_test_object_deps_done" = no; then case $p 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 ;; *.$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 # PORTME: override above test on systems where it is broken case $host_os in interix3*) # 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= ;; solaris*) case $cc_basename in CC*) # 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. postdeps_CXX='-lCstd -lCrun' ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 # 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*) # 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' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # 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' ;; 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= ;; interix3*) # 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 IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # 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_AC_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 ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_CXX='-qnocommon' lt_prog_compiler_wl_CXX='-Wl,' ;; esac ;; 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* | kfreebsd*-gnu | 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*) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; icpc* | ecpc*) # Intel C++ lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC*) # 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' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; 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*) # 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 ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; 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 ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext printf "$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:13204: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:13208: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_CXX=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 if test x"$lt_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 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 # # 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\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_CXX=yes fi else lt_prog_compiler_static_works_CXX=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6 if test x"$lt_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_CXX=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:13308: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:13312: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # 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 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")) && (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*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no # # 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 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:$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=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else 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* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&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-existant 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_AC_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 echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 echo "${ECHO_T}$hardcode_action_CXX" >&6 if test "$hardcode_action_CXX" = relink; 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 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_CXX \ CC_CXX \ LD_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ export_dynamic_flag_spec_CXX \ thread_safe_flag_spec_CXX \ whole_archive_flag_spec_CXX \ enable_shared_with_static_runtimes_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ postinstall_cmds_CXX \ postuninstall_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ export_symbols_cmds_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ hardcode_automatic_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ lt_cv_prog_compiler_c_o_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX; do case $var in old_archive_cmds_CXX | \ old_archive_from_new_cmds_CXX | \ archive_cmds_CXX | \ archive_expsym_cmds_CXX | \ module_cmds_CXX | \ module_expsym_cmds_CXX | \ old_archive_from_expsyms_cmds_CXX | \ export_symbols_cmds_CXX | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # 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 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_CXX # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_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 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_CXX old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # 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 and install a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_CXX # Dependencies to place after the objects being linked to create a # shared library. 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 # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_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 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 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_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 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # 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 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld 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 else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # Code to be used in simple compile tests lt_simple_compile_test_code=" subroutine t\n return\n end\n" # Code to be used in simple link tests lt_simple_link_test_code=" program t\n end\n" # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${F77-"f77"} compiler=$CC compiler_F77=$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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&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 ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 GCC_F77="$G77" LD_F77="$LD" lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-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_F77='-Bstatic' fi ;; amigaos*) # 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_F77='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # 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_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; interix3*) # 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_F77=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; hpux*) # 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_F77='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_F77='-qnocommon' lt_prog_compiler_wl_F77='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # 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_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-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_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # 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:14878: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:14882: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_F77=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 if test x"$lt_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_F77=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_F77=yes fi else lt_prog_compiler_static_works_F77=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6 if test x"$lt_prog_compiler_static_works_F77" = xyes; then : else lt_prog_compiler_static_F77= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_F77=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:14982: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:14986: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_F77=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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_F77= enable_shared_with_static_runtimes_F77=no archive_cmds_F77= archive_expsym_cmds_F77= old_archive_From_new_cmds_F77= old_archive_from_expsyms_cmds_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= thread_safe_flag_spec_F77= hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_direct_F77=no hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported link_all_deplibs_F77=unknown hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= always_export_symbols_F77=no export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # 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_F77="_GLOBAL_OFFSET_TABLE_" # 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. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # 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_F77=yes if test "$with_gnu_ld" = 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_F77='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${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_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [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 aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_F77='$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_F77='-L$libdir' hardcode_minus_L_F77=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_F77=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_F77='$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_F77='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_F77=no fi ;; interix3*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${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_F77='$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_F77='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' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;; esac archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs_F77=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $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_F77=no cat <&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. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_F77=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 ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = no; then runpath_var= hardcode_libdir_flag_spec_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$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_F77=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_F77=unsupported fi ;; aix4* | aix5*) 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 if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$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].*|aix5*) 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_F77='' hardcode_direct_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes 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 hardcode_direct_F77=yes else # We have old collect2 hardcode_direct_F77=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_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= 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 # 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_F77=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_F77='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${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_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$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. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${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_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77='$convenience' archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="\$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*) archive_cmds_F77='$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_F77='-L$libdir' hardcode_minus_L_F77=yes # see comment about different semantics on the GNU ld section ld_shlibs_F77=no ;; bsdi[45]*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32*) # 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. hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=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_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_F77='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_F77=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported whole_archive_flag_spec_F77='' link_all_deplibs_F77=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_F77=no ;; esac fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; freebsd1*) ld_shlibs_F77=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_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${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_F77='$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_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$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_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared -fPIC ${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_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$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 hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_F77='+b $libdir' hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; *) hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: link_all_deplibs_F77=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; openbsd*) hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$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_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_F77='-rpath $libdir' fi hardcode_libdir_separator_F77=: ;; solaris*) no_undefined_flag_F77=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$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' fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_F77=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_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_F77='${wl}-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$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_F77='${wl}-z,text' allow_undefined_flag_F77='${wl}-z,nodefs' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 echo "${ECHO_T}$ld_shlibs_F77" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 pic_flag=$lt_prog_compiler_pic_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_F77=no else archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || \ test -n "$runpath_var_F77" || \ test "X$hardcode_automatic_F77" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_F77" != 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_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 echo "${ECHO_T}$hardcode_action_F77" >&6 if test "$hardcode_action_F77" = relink; 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 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_F77 \ CC_F77 \ LD_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_static_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ export_dynamic_flag_spec_F77 \ thread_safe_flag_spec_F77 \ whole_archive_flag_spec_F77 \ enable_shared_with_static_runtimes_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ predep_objects_F77 \ postdep_objects_F77 \ predeps_F77 \ postdeps_F77 \ compiler_lib_search_path_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ postinstall_cmds_F77 \ postuninstall_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ export_symbols_cmds_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_ld_F77 \ hardcode_libdir_separator_F77 \ hardcode_automatic_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ lt_cv_prog_compiler_c_o_F77 \ exclude_expsyms_F77 \ include_expsyms_F77; do case $var in old_archive_cmds_F77 | \ old_archive_from_new_cmds_F77 | \ archive_cmds_F77 | \ archive_expsym_cmds_F77 | \ module_cmds_F77 | \ module_expsym_cmds_F77 | \ old_archive_from_expsyms_cmds_F77 | \ export_symbols_cmds_F77 | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_F77 # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_F77 old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_F77 # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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_F77 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # 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_F77 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_F77" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o objext_GCJ=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}\n" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${GCJ-"gcj"} compiler=$CC compiler_GCJ=$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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # GCJ did not exist at the time GCC didn't implicitly link libc in. archive_cmds_need_lc_GCJ=no old_archive_cmds_GCJ=$old_archive_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... lt_prog_compiler_no_builtin_flag_GCJ= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$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:17189: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17193: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_static_GCJ='-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_GCJ='-Bstatic' fi ;; amigaos*) # 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_GCJ='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # 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_GCJ='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_GCJ='-fno-common' ;; interix3*) # 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_GCJ=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_GCJ=-Kconform_pic fi ;; hpux*) # 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_GCJ='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_GCJ='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' else lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_GCJ='-qnocommon' lt_prog_compiler_wl_GCJ='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # 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_GCJ='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_GCJ='-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_GCJ='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_GCJ='-non_shared' ;; newsos6) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-fpic' lt_prog_compiler_static_GCJ='-Bstatic' ;; ccc*) lt_prog_compiler_wl_GCJ='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_GCJ='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; solaris*) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_GCJ='-Qoption ld ';; *) lt_prog_compiler_wl_GCJ='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_GCJ='-Qoption ld ' lt_prog_compiler_pic_GCJ='-PIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_GCJ='-Kconform_pic' lt_prog_compiler_static_GCJ='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; unicos*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_can_build_shared_GCJ=no ;; uts4*) lt_prog_compiler_pic_GCJ='-pic' lt_prog_compiler_static_GCJ='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_GCJ" # 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:17457: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17461: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_GCJ=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in "" | " "*) ;; *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; esac else lt_prog_compiler_pic_GCJ= lt_prog_compiler_can_build_shared_GCJ=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_GCJ= ;; *) lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_GCJ=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_GCJ=yes fi else lt_prog_compiler_static_works_GCJ=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6 if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then : else lt_prog_compiler_static_GCJ= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:17561: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:17565: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_GCJ=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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_GCJ= enable_shared_with_static_runtimes_GCJ=no archive_cmds_GCJ= archive_expsym_cmds_GCJ= old_archive_From_new_cmds_GCJ= old_archive_from_expsyms_cmds_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= thread_safe_flag_spec_GCJ= hardcode_libdir_flag_spec_GCJ= hardcode_libdir_flag_spec_ld_GCJ= hardcode_libdir_separator_GCJ= hardcode_direct_GCJ=no hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=unsupported link_all_deplibs_GCJ=unknown hardcode_automatic_GCJ=no module_cmds_GCJ= module_expsym_cmds_GCJ= always_export_symbols_GCJ=no export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_GCJ= # 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_GCJ="_GLOBAL_OFFSET_TABLE_" # 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. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # 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_GCJ=yes if test "$with_gnu_ld" = 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_GCJ='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_GCJ='${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_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_GCJ= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [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 aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_GCJ=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_GCJ='$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_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_GCJ=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_GCJ=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_GCJ=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_GCJ='-L$libdir' allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=no enable_shared_with_static_runtimes_GCJ=yes export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_GCJ='$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_GCJ='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_GCJ=no fi ;; interix3*) hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${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_GCJ='$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_GCJ='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' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;; esac archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs_GCJ=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $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_GCJ=no cat <&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. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_GCJ=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 ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac ;; sunos4*) archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac if test "$ld_shlibs_GCJ" = no; then runpath_var= hardcode_libdir_flag_spec_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=yes archive_expsym_cmds_GCJ='$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_GCJ=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_GCJ=unsupported fi ;; aix4* | aix5*) 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 if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_GCJ='$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].*|aix5*) 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_GCJ='' hardcode_direct_GCJ=yes hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes 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 hardcode_direct_GCJ=yes else # We have old collect2 hardcode_direct_GCJ=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_GCJ=yes hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_libdir_separator_GCJ= 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 # 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_GCJ=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_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${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_GCJ='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_GCJ="-z nodefs" archive_expsym_cmds_GCJ="\$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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${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_GCJ=' ${wl}-bernotok' allow_undefined_flag_GCJ=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_GCJ='$convenience' archive_cmds_need_lc_GCJ=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_GCJ="\$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*) archive_cmds_GCJ='$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_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # see comment about different semantics on the GNU ld section ld_shlibs_GCJ=no ;; bsdi[45]*) export_dynamic_flag_spec_GCJ=-rdynamic ;; cygwin* | mingw* | pw32*) # 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. hardcode_libdir_flag_spec_GCJ=' ' allow_undefined_flag_GCJ=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_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_GCJ='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_GCJ=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_GCJ=no hardcode_direct_GCJ=no hardcode_automatic_GCJ=yes hardcode_shlibpath_var_GCJ=unsupported whole_archive_flag_spec_GCJ='' link_all_deplibs_GCJ=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_GCJ=no ;; esac fi ;; dgux*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; freebsd1*) ld_shlibs_GCJ=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_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${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_GCJ='$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_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$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_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -shared -fPIC ${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_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$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 hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no ;; *) hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: link_all_deplibs_GCJ=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; newsos6) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_shlibpath_var_GCJ=no ;; openbsd*) hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' ;; *) archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes allow_undefined_flag_GCJ=unsupported archive_cmds_GCJ='$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_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_GCJ='-rpath $libdir' fi hardcode_libdir_separator_GCJ=: ;; solaris*) no_undefined_flag_GCJ=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$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' fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_shlibpath_var_GCJ=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_GCJ=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_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; sysv4) case $host_vendor in sni) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_GCJ='$CC -r -o $output$reload_objs' hardcode_direct_GCJ=no ;; motorola) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv4.3*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_GCJ=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_GCJ='${wl}-z,text' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$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_GCJ='${wl}-z,text' allow_undefined_flag_GCJ='${wl}-z,nodefs' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; *) ld_shlibs_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 echo "${ECHO_T}$ld_shlibs_GCJ" >&6 test "$ld_shlibs_GCJ" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_GCJ" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_GCJ=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_GCJ 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_GCJ pic_flag=$lt_prog_compiler_pic_GCJ compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_GCJ=no else archive_cmds_need_lc_GCJ=yes fi allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var_GCJ" || \ test "X$hardcode_automatic_GCJ" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_GCJ" != 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_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && test "$hardcode_minus_L_GCJ" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_GCJ=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_GCJ=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_GCJ=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 echo "${ECHO_T}$hardcode_action_GCJ" >&6 if test "$hardcode_action_GCJ" = relink; 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 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_GCJ \ CC_GCJ \ LD_GCJ \ lt_prog_compiler_wl_GCJ \ lt_prog_compiler_pic_GCJ \ lt_prog_compiler_static_GCJ \ lt_prog_compiler_no_builtin_flag_GCJ \ export_dynamic_flag_spec_GCJ \ thread_safe_flag_spec_GCJ \ whole_archive_flag_spec_GCJ \ enable_shared_with_static_runtimes_GCJ \ old_archive_cmds_GCJ \ old_archive_from_new_cmds_GCJ \ predep_objects_GCJ \ postdep_objects_GCJ \ predeps_GCJ \ postdeps_GCJ \ compiler_lib_search_path_GCJ \ archive_cmds_GCJ \ archive_expsym_cmds_GCJ \ postinstall_cmds_GCJ \ postuninstall_cmds_GCJ \ old_archive_from_expsyms_cmds_GCJ \ allow_undefined_flag_GCJ \ no_undefined_flag_GCJ \ export_symbols_cmds_GCJ \ hardcode_libdir_flag_spec_GCJ \ hardcode_libdir_flag_spec_ld_GCJ \ hardcode_libdir_separator_GCJ \ hardcode_automatic_GCJ \ module_cmds_GCJ \ module_expsym_cmds_GCJ \ lt_cv_prog_compiler_c_o_GCJ \ exclude_expsyms_GCJ \ include_expsyms_GCJ; do case $var in old_archive_cmds_GCJ | \ old_archive_from_new_cmds_GCJ | \ archive_cmds_GCJ | \ archive_expsym_cmds_GCJ | \ module_cmds_GCJ | \ module_expsym_cmds_GCJ | \ old_archive_from_expsyms_cmds_GCJ | \ export_symbols_cmds_GCJ | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_GCJ # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_GCJ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_GCJ # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_GCJ # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_GCJ pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_GCJ # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_GCJ old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_GCJ archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_GCJ module_expsym_cmds=$lt_module_expsym_cmds_GCJ # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_GCJ # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_GCJ # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_GCJ # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_GCJ # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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_GCJ # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_GCJ # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_GCJ # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ # 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_GCJ # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_GCJ # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_GCJ" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_GCJ # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_GCJ # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_GCJ # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_GCJ # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" else tagname="" fi ;; RC) # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' # 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. # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${RC-"windres"} compiler=$CC compiler_RC=$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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` lt_cv_prog_compiler_c_o_RC=yes # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_RC \ CC_RC \ LD_RC \ lt_prog_compiler_wl_RC \ lt_prog_compiler_pic_RC \ lt_prog_compiler_static_RC \ lt_prog_compiler_no_builtin_flag_RC \ export_dynamic_flag_spec_RC \ thread_safe_flag_spec_RC \ whole_archive_flag_spec_RC \ enable_shared_with_static_runtimes_RC \ old_archive_cmds_RC \ old_archive_from_new_cmds_RC \ predep_objects_RC \ postdep_objects_RC \ predeps_RC \ postdeps_RC \ compiler_lib_search_path_RC \ archive_cmds_RC \ archive_expsym_cmds_RC \ postinstall_cmds_RC \ postuninstall_cmds_RC \ old_archive_from_expsyms_cmds_RC \ allow_undefined_flag_RC \ no_undefined_flag_RC \ export_symbols_cmds_RC \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_flag_spec_ld_RC \ hardcode_libdir_separator_RC \ hardcode_automatic_RC \ module_cmds_RC \ module_expsym_cmds_RC \ lt_cv_prog_compiler_c_o_RC \ exclude_expsyms_RC \ include_expsyms_RC; do case $var in old_archive_cmds_RC | \ old_archive_from_new_cmds_RC | \ archive_cmds_RC | \ archive_expsym_cmds_RC | \ module_cmds_RC | \ module_expsym_cmds_RC | \ old_archive_from_expsyms_cmds_RC | \ export_symbols_cmds_RC | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU C compiler? with_gcc=$GCC_RC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_RC # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_RC old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_RC # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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_RC # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_RC # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # 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_RC # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_RC" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" ;; *) { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 echo "$as_me: error: Unsupported tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 echo "$as_me: error: unable to update list of available tagged configurations." >&2;} { (exit 1); exit 1; }; } fi fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion # No longer needed now that CPPFLAGS is correctly set -- lh, 061214 -- # AC_REQUIRE([AC_COIN_DLFCN_H]) # NEW: If libtool exists in the directory higher up, we use that one # instead of creating a new one # It turns out that the code for AC_PROG_LIBTOOL is somehow AC_REQUIRED # out in front of this macro body. You'll notice that LIBTOOL is already # defined here. We'll have to count on this macro not being called if libtool # already exists, or at least move the libtool fixes outside the conditional. # AC_MSG_NOTICE([Entering coin_prog_libtool, LIBTOOL = "$LIBTOOL".]) # This test is therefore removed. -- lh, 061214 -- # if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Calling PROG_LIBTOOL.]) # AC_MSG_NOTICE([Finished PROG_LIBTOOL.]) { echo "$as_me:$LINENO: Build is \"$build\"." >&5 echo "$as_me: Build is \"$build\"." >&6;} mydos2unix='| dos2unix' case $build in *-mingw*) CYGPATH_W=echo ;; esac case $build in # Here we need to check if -m32 is specified. If so, we need to correct # sys_lib_search_path_spec *-cygwin* | *-mingw*) case "$CXX" in clang* ) # we assume that libtool patches for CLANG are the same as for GNU compiler - correct??? { echo "$as_me:$LINENO: Applying patches to libtool for CLANG compiler" >&5 echo "$as_me: Applying patches to libtool for CLANG 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 ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Applying patches to libtool for cl compiler" >&5 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 \\$('"$CYGPATH_W \$1"') '"$mydos2unix"' | xargs echo); echo \\$bla; for i in \\$bla; do lib -nologo -extract:\\$i \\$('"$CYGPATH_W \$1"'); done%' \ -e 's%$AR t "$f_ex_an_ar_oldlib"%lib -nologo -list \$('"$CYGPATH_W \$1"') '"$mydos2unix"'%' \ -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 ;; *) { echo "$as_me:$LINENO: Applying patches to libtool for GNU compiler" >&5 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 ;; esac mv conftest.bla libtool chmod 755 libtool ;; *x86_64-*) if test "$GCC" = yes && (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm32' >& /dev/null); then { echo "$as_me:$LINENO: Applying patches to libtool for 32bit compilation" >&5 echo "$as_me: Applying patches to libtool for 32bit compilation" >&6;} sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="/lib /usr/lib"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi ;; *-solaris*) if test "$GCC" = yes && \ (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm64' >/dev/null 2>&1) ; then hdwisa=`isainfo | sed -e 's/\([^ ]*\) .*$/\1/'` if `$EGREP 'sys_lib_search_path_spec=' libtool | $EGREP -v $hdwisa >/dev/null 2>&1` ; then { echo "$as_me:$LINENO: Applying patches to libtool for 64-bit GCC compilation" >&5 echo "$as_me: Applying patches to libtool for 64-bit GCC compilation" >&6;} fixlibtmp=`$CC -m64 -print-search-dirs | $EGREP '^libraries:'` fixlibtmp=`echo $fixlibtmp | sed -e 's/libraries: =//' -e 's/:/ /g'` if `echo "$fixlibtmp" | $EGREP -v $hdwisa >/dev/null 2>&1` ; then # AC_MSG_NOTICE(Compensating for broken gcc) for lib in $fixlibtmp ; do if test -d "${lib}${hdwisa}" ; then syslibpath64="$syslibpath64 ${lib}${hdwisa}/" fi done syslibpath64="${syslibpath64} ${fixlibtmp}" else syslibpath64="$fixlibtmp" fi sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="'"$syslibpath64"'"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi # AC_MSG_NOTICE(Result is ) # $EGREP 'sys_lib_search_path_spec=' libtool fi ;; # Cygwin. Ah, cygwin. Too big and ugly to inline; see the macro. *-darwin*) { echo "$as_me:$LINENO: Applying patches to libtool for Darwin" >&5 echo "$as_me: Applying patches to libtool for Darwin" >&6;} sed -e 's/verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"/verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"/' \ -e 's/ -dynamiclib / -dynamiclib -single_module /g' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; esac # This fi matches the commented `if test "x$LIBTOOL" = x;' up at the head of # the macro. -- lh, 061214 -- # fi # AC_MSG_NOTICE([End libtool initialisation.]) # AC_MSG_NOTICE([Finished COIN_PROG_LIBTOOL.]) # set RPATH_FLAGS to the compiler link flags required to hardcode location # of the shared objects RPATH_FLAGS= if test $enable_shared = yes; then case $build in *-linux-*) if test "$GXX" = "yes"; then RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -Wl,--rpath -Wl,$dir" done fi ;; *-darwin*) RPATH_FLAGS=nothing ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) RPATH_FLAGS=nothing ;; esac ;; *-hp-*) RPATH_FLAGS=nothing ;; *-mingw32) RPATH_FLAGS=nothing ;; *-*-solaris*) RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -R$dir" done esac if test "$RPATH_FLAGS" = ""; then { echo "$as_me:$LINENO: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&5 echo "$as_me: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&2;} fi if test "$RPATH_FLAGS" = "nothing"; then RPATH_FLAGS= fi fi else { echo "$as_me:$LINENO: Using libtool script in directory $coin_config_dir" >&5 echo "$as_me: Using libtool script in directory $coin_config_dir" >&6;} # get all missing information from the config.log file # output variables and defines as_save_IFS=$IFS IFS=' ' for oneline in `cat $coin_config_dir/config.status`; do case "$oneline" in # First some automake conditionals s,@am__fastdep* | s,@AR@* | s,@CPP@* | s,@CPPFLAGS@* | s,@CXXCPP@* | \ s,@RANLIB@* | s,@STRIP@* | s,@ac_ct_AR@* | s,@ac_ct_RANLIB@* | \ s,@ac_ct_STRIP@* | s,@host* | s,@LN_S@* | s,@RPATH_FLAGS@* | \ s,@ac_c_preproc_warn_flag@* | s,@ac_cxx_preproc_warn_flag@* ) command=`echo $oneline | sed -e 's/^s,@//' -e 's/@,/="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; s,@DEFS@* ) command=`echo $oneline | sed -e 's/^s,@DEFS@,/defsline="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; esac done IFS=$as_save_IFS # And some defines (assuming here that the packages base dir # doesn't have a config.h file for word in $defsline; do # echo word $word case $word in -DHAVE_[A-Z_]*_H=1 | -DSTDC_HEADERS=1 ) i=`echo $word | sed -e 's/-D/#define /' -e 's/=/ /'` # echo dd $i echo $i >>confdefs.h ;; esac done fi # AC_MSG_NOTICE([End of INIT_AUTO_TOOLS.]) # Check whether --enable-dependency-linking or --disable-dependency-linking was given. if test "${enable_dependency_linking+set}" = set; then enableval="$enable_dependency_linking" dependency_linking="$enableval" else dependency_linking=auto fi; if test "$dependency_linking" = auto; then # On Cygwin and AIX, building DLLs doesn't work dependency_linking=no if test x"$coin_disable_shared" = xno; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) dependency_linking=yes ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) dependency_linking=no ;; *gcc*) dependency_linking=yes ;; *) dependency_linking=yes ;; esac ;; *) dependency_linking=yes ;; esac fi fi if test "$dependency_linking" = yes ; then LT_LDFLAGS="-no-undefined" else LT_LDFLAGS= fi if test "$dependency_linking" = yes; then DEPENDENCY_LINKING_TRUE= DEPENDENCY_LINKING_FALSE='#' else DEPENDENCY_LINKING_TRUE='#' DEPENDENCY_LINKING_FALSE= fi # Check if we want to set the library version echo "$as_me:$LINENO: checking if library version is set" >&5 echo $ECHO_N "checking if library version is set... $ECHO_C" >&6 if test x"$coin_libversion" != x; then LT_LDFLAGS="$LT_LDFLAGS -version-info $coin_libversion" echo "$as_me:$LINENO: result: $coin_libversion" >&5 echo "${ECHO_T}$coin_libversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi #END } ############################################################################# # COIN components # ############################################################################# # None of these are required to build and test libDylp. All are needed to # properly test libOsiDylp and to fully link the doxygen documentation. # (So we should actually not need to search for CoinUtils separately.) # Check whether --enable-pkg-config or --disable-pkg-config was given. if test "${enable_pkg_config+set}" = set; then enableval="$enable_pkg_config" use_pkgconfig="$enableval" else if test x$coin_cc_is_cl = xtrue; then use_pkgconfig=no else use_pkgconfig=yes fi fi; if test $use_pkgconfig = yes ; then if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="${ac_tool_prefix}pkg-config" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_PKG_CONFIG"; then ac_ct_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_PKG_CONFIG"; then ac_cv_prog_ac_ct_PKG_CONFIG="$ac_ct_PKG_CONFIG" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_PKG_CONFIG="pkg-config" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_PKG_CONFIG=$ac_cv_prog_ac_ct_PKG_CONFIG if test -n "$ac_ct_PKG_CONFIG"; then echo "$as_me:$LINENO: result: $ac_ct_PKG_CONFIG" >&5 echo "${ECHO_T}$ac_ct_PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi PKG_CONFIG=$ac_ct_PKG_CONFIG else PKG_CONFIG="$ac_cv_prog_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.16.0 echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6 if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 PKG_CONFIG="" fi fi # check if pkg-config supports the short-errors flag if test -n "$PKG_CONFIG" && \ $PKG_CONFIG --atleast-pkgconfig-version 0.20; then pkg_short_errors=" --short-errors " else pkg_short_errors="" fi fi if test -n "$PKG_CONFIG"; then COIN_HAS_PKGCONFIG_TRUE= COIN_HAS_PKGCONFIG_FALSE='#' else COIN_HAS_PKGCONFIG_TRUE='#' COIN_HAS_PKGCONFIG_FALSE= fi # assemble pkg-config search path for installed projects COIN_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" # let's assume that when installing into $prefix, then the user may have installed some other coin projects there before, so it's worth to have a look into there # best would actually to use ${libdir}, since .pc files get installed into ${libdir}/pkgconfig, # unfortunately, ${libdir} expands to ${exec_prefix}/lib and ${exec_prefix} to ${prefix}... if test "x${prefix}" = xNONE ; then COIN_PKG_CONFIG_PATH="${ac_default_prefix}/lib64/pkgconfig:${ac_default_prefix}/lib/pkgconfig:${ac_default_prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" else COIN_PKG_CONFIG_PATH="${prefix}/lib64/pkgconfig:${prefix}/lib/pkgconfig:${prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" fi # Check whether --with-coin-instdir or --without-coin-instdir was given. if test "${with_coin_instdir+set}" = set; then withval="$with_coin_instdir" if test -d "$withval"; then : ; else { { echo "$as_me:$LINENO: error: argument for --with-coin-instdir not a directory" >&5 echo "$as_me: error: argument for --with-coin-instdir not a directory" >&2;} { (exit 1); exit 1; }; } fi COIN_PKG_CONFIG_PATH="$withval/lib/pkgconfig:$withval/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" fi; # assemble additional pkg-config search paths for uninstalled projects if test x$coin_projectdir = xyes ; then # if we are in a project setup, then in a classic setup, we want to find uninstalled projects # their (relative) location is written to coin_subdirs.txt by the configure in the project base directory # unfortunately, if the user set prefix, then we do not know where the project base directory is located # but it is likely to be either .. (if we are a usual coin project) or ../.. (if we are a unusual coin project like ThirdParty or Data) COIN_PKG_CONFIG_PATH_UNINSTALLED= if test -f ../coin_subdirs.txt ; then for i in `cat ../coin_subdirs.txt` ; do if test -d ../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi if test -f ../../coin_subdirs.txt ; then for i in `cat ../../coin_subdirs.txt` ; do if test -d ../../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi fi if test -n "$PKG_CONFIG" && test x$coin_cc_is_cl = xtrue; then { echo "$as_me:$LINENO: WARNING: Using pkg-config together with MS or Intel Compiler on Windows is not support by example Makefiles. Consider using --disable-pkg-config." >&5 echo "$as_me: WARNING: Using pkg-config together with MS or Intel Compiler on Windows is not support by example Makefiles. Consider using --disable-pkg-config." >&2;} fi echo "$as_me:$LINENO: checking for COIN-OR package CoinUtils" >&5 echo $ECHO_N "checking for COIN-OR package CoinUtils... $ECHO_C" >&6 coin_has_coinutils=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "CoinUtils"; then coin_has_coinutils=skipping fi done fi if test "$coin_has_coinutils" != skipping; then # Check whether --with-m4_tolower(CoinUtils) or --without-m4_tolower(CoinUtils) was given. if test "${with_coinutils+set}" = set; then withval="$with_coinutils" if test "$withval" = no ; then coin_has_coinutils=skipping fi fi; fi COINUTILS_LIBS= COINUTILS_CFLAGS= COINUTILS_DATA= COINUTILS_DEPENDENCIES= COINUTILS_PCLIBS= COINUTILS_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_coinutils != skipping; then # Check whether --with-m4_tolower(CoinUtils)-lib or --without-m4_tolower(CoinUtils)-lib was given. if test "${with_coinutils_lib+set}" = set; then withval="$with_coinutils_lib" if test "$withval" = no ; then coin_has_coinutils=skipping else coin_has_coinutils=yes COINUTILS_LIBS="$withval" COINUTILS_PCLIBS="$withval" OSIDYLPLIB_PCLIBS="$withval $OSIDYLPLIB_PCLIBS" OSIDYLPLIB_LIBS="$withval $OSIDYLPLIB_LIBS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then COINUTILS_LIBS_INSTALLED="$withval" OSIDYLPLIB_LIBS_INSTALLED="$withval $OSIDYLPLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_coinutils != skipping; then # Check whether --with-m4_tolower(CoinUtils)-incdir or --without-m4_tolower(CoinUtils)-incdir was given. if test "${with_coinutils_incdir+set}" = set; then withval="$with_coinutils_incdir" if test "$withval" = no ; then coin_has_coinutils=skipping else coin_has_coinutils=yes COINUTILS_CFLAGS="-I`${CYGPATH_W} $withval`" OSIDYLPLIB_CFLAGS="-I`${CYGPATH_W} $withval` $OSIDYLPLIB_CFLAGS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then COINUTILS_CFLAGS_INSTALLED="$COINUTILS_CFLAGS" OSIDYLPLIB_CFLAGS_INSTALLED="$COINUTILS_CFLAGS $OSIDYLPLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_coinutils != skipping; then # Check whether --with-m4_tolower(CoinUtils)-datadir or --without-m4_tolower(CoinUtils)-datadir was given. if test "${with_coinutils_datadir+set}" = set; then withval="$with_coinutils_datadir" if test "$withval" = no ; then coin_has_coinutils=skipping else coin_has_coinutils=yes COINUTILS_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then COINUTILS_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_coinutils = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coinutils"; then COINUTILS_VERSIONS=`$PKG_CONFIG --modversion "coinutils" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coinutils" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi COINUTILS_CFLAGS="$cflags" COINUTILS_LIBS=`$PKG_CONFIG --libs "coinutils" 2>/dev/null` COINUTILS_DATA=`$PKG_CONFIG --variable=datadir "coinutils" 2>/dev/null` coin_has_coinutils=yes echo "$as_me:$LINENO: result: yes: $COINUTILS_VERSIONS" >&5 echo "${ECHO_T}yes: $COINUTILS_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then COINUTILS_LIBS=`echo " $COINUTILS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi COINUTILS_PCREQUIRES="coinutils" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in OsiDyLPLib OSIDYLPLIB_PCREQUIRES="coinutils $OSIDYLPLIB_PCREQUIRES" OSIDYLPLIB_CFLAGS="$COINUTILS_CFLAGS $OSIDYLPLIB_CFLAGS" OSIDYLPLIB_LIBS="$COINUTILS_LIBS $OSIDYLPLIB_LIBS" else COINUTILS_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coinutils"` coin_has_coinutils=notGiven echo "$as_me:$LINENO: result: not given: $COINUTILS_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $COINUTILS_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module CoinUtils without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module CoinUtils without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package CoinUtils (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package CoinUtils (fallback)... $ECHO_C" >&6 coin_has_coinutils=notGiven COINUTILS_LIBS= COINUTILS_LIBS_INSTALLED= COINUTILS_CFLAGS= COINUTILS_CFLAGS_INSTALLED= COINUTILS_DATA= COINUTILS_DATA_INSTALLED= COINUTILS_PCLIBS= COINUTILS_PCREQUIRES= # initial list of dependencies is "coinutils", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coinutils" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$COINUTILS_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` COINUTILS_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$COINUTILS_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi COINUTILS_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi COINUTILS_CFLAGS="$projcflags $COINUTILS_CFLAGS" # set LIBS variable COINUTILS_LIBS="$projlibs $COINUTILS_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi COINUTILS_CFLAGS_INSTALLED="$projcflags $COINUTILS_CFLAGS_INSTALLED" # set LIBS variable COINUTILS_LIBS_INSTALLED="$projlibs $COINUTILS_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_coinutils=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_COINUTILS 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then COINUTILS_LIBS=`echo " $COINUTILS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` COINUTILS_LIBS_INSTALLED=`echo " $COINUTILS_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi COINUTILS_PCREQUIRES="coinutils" OSIDYLPLIB_PCREQUIRES="coinutils $OSIDYLPLIB_PCREQUIRES" OSIDYLPLIB_CFLAGS="$COINUTILS_CFLAGS $OSIDYLPLIB_CFLAGS" OSIDYLPLIB_LIBS="$COINUTILS_LIBS $OSIDYLPLIB_LIBS" OSIDYLPLIB_CFLAGS_INSTALLED="$COINUTILS_CFLAGS_INSTALLED $OSIDYLPLIB_CFLAGS_INSTALLED" OSIDYLPLIB_LIBS_INSTALLED="$COINUTILS_LIBS_INSTALLED $OSIDYLPLIB_LIBS_INSTALLED" fi if test $coin_has_coinutils != notGiven && test $coin_has_coinutils != skipping; then COIN_HAS_COINUTILS_TRUE= COIN_HAS_COINUTILS_FALSE='#' else COIN_HAS_COINUTILS_TRUE='#' COIN_HAS_COINUTILS_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_coinutils" >&5 echo "${ECHO_T}$coin_has_coinutils" >&6 fi if test $coin_has_coinutils != skipping && test $coin_has_coinutils != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_COINUTILS 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) COINUTILS_DEPENDENCIES=`echo " $COINUTILS_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` OSIDYLPLIB_DEPENDENCIES=`echo " $OSIDYLPLIB_LIBS " | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$COINUTILS_CFLAGS" ; then { echo "$as_me:$LINENO: CoinUtils CFLAGS are $COINUTILS_CFLAGS" >&5 echo "$as_me: CoinUtils CFLAGS are $COINUTILS_CFLAGS" >&6;} fi if test -n "$COINUTILS_LIBS" ; then { echo "$as_me:$LINENO: CoinUtils LIBS are $COINUTILS_LIBS" >&5 echo "$as_me: CoinUtils LIBS are $COINUTILS_LIBS" >&6;} fi if test -n "$COINUTILS_DEPENDENCIES" ; then { echo "$as_me:$LINENO: CoinUtils DEPENDENCIES are $COINUTILS_DEPENDENCIES" >&5 echo "$as_me: CoinUtils DEPENDENCIES are $COINUTILS_DEPENDENCIES" >&6;} fi if test -n "$COINUTILS_DATA" ; then { echo "$as_me:$LINENO: CoinUtils DATA is $COINUTILS_DATA" >&5 echo "$as_me: CoinUtils DATA is $COINUTILS_DATA" >&6;} fi if test -n "$COINUTILS_PCLIBS" ; then { echo "$as_me:$LINENO: CoinUtils PCLIBS are $COINUTILS_PCLIBS" >&5 echo "$as_me: CoinUtils PCLIBS are $COINUTILS_PCLIBS" >&6;} fi if test -n "$COINUTILS_PCREQUIRES" ; then { echo "$as_me:$LINENO: CoinUtils PCREQUIRES are $COINUTILS_PCREQUIRES" >&5 echo "$as_me: CoinUtils PCREQUIRES are $COINUTILS_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: OsiDyLPLib CFLAGS are $OSIDYLPLIB_CFLAGS" >&5 echo "$as_me: OsiDyLPLib CFLAGS are $OSIDYLPLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: OsiDyLPLib LIBS are $OSIDYLPLIB_LIBS" >&5 echo "$as_me: OsiDyLPLib LIBS are $OSIDYLPLIB_LIBS" >&6;} { echo "$as_me:$LINENO: OsiDyLPLib DEPENDENCIES are $OSIDYLPLIB_DEPENDENCIES" >&5 echo "$as_me: OsiDyLPLib DEPENDENCIES are $OSIDYLPLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_coinutils != notGiven && test $coin_has_coinutils != skipping; then COIN_HAS_COINUTILS_TRUE= COIN_HAS_COINUTILS_FALSE='#' else COIN_HAS_COINUTILS_TRUE='#' COIN_HAS_COINUTILS_FALSE= fi echo "$as_me:$LINENO: checking for COIN-OR package Osi" >&5 echo $ECHO_N "checking for COIN-OR package Osi... $ECHO_C" >&6 coin_has_osi=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Osi"; then coin_has_osi=skipping fi done fi if test "$coin_has_osi" != skipping; then # Check whether --with-m4_tolower(Osi) or --without-m4_tolower(Osi) was given. if test "${with_osi+set}" = set; then withval="$with_osi" if test "$withval" = no ; then coin_has_osi=skipping fi fi; fi OSI_LIBS= OSI_CFLAGS= OSI_DATA= OSI_DEPENDENCIES= OSI_PCLIBS= OSI_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_osi != skipping; then # Check whether --with-m4_tolower(Osi)-lib or --without-m4_tolower(Osi)-lib was given. if test "${with_osi_lib+set}" = set; then withval="$with_osi_lib" if test "$withval" = no ; then coin_has_osi=skipping else coin_has_osi=yes OSI_LIBS="$withval" OSI_PCLIBS="$withval" OSIDYLPLIB_PCLIBS="$withval $OSIDYLPLIB_PCLIBS" OSIDYLPLIB_LIBS="$withval $OSIDYLPLIB_LIBS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then OSI_LIBS_INSTALLED="$withval" OSIDYLPLIB_LIBS_INSTALLED="$withval $OSIDYLPLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_osi != skipping; then # Check whether --with-m4_tolower(Osi)-incdir or --without-m4_tolower(Osi)-incdir was given. if test "${with_osi_incdir+set}" = set; then withval="$with_osi_incdir" if test "$withval" = no ; then coin_has_osi=skipping else coin_has_osi=yes OSI_CFLAGS="-I`${CYGPATH_W} $withval`" OSIDYLPLIB_CFLAGS="-I`${CYGPATH_W} $withval` $OSIDYLPLIB_CFLAGS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then OSI_CFLAGS_INSTALLED="$OSI_CFLAGS" OSIDYLPLIB_CFLAGS_INSTALLED="$OSI_CFLAGS $OSIDYLPLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_osi != skipping; then # Check whether --with-m4_tolower(Osi)-datadir or --without-m4_tolower(Osi)-datadir was given. if test "${with_osi_datadir+set}" = set; then withval="$with_osi_datadir" if test "$withval" = no ; then coin_has_osi=skipping else coin_has_osi=yes OSI_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then OSI_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_osi = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "osi"; then OSI_VERSIONS=`$PKG_CONFIG --modversion "osi" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "osi" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi OSI_CFLAGS="$cflags" OSI_LIBS=`$PKG_CONFIG --libs "osi" 2>/dev/null` OSI_DATA=`$PKG_CONFIG --variable=datadir "osi" 2>/dev/null` coin_has_osi=yes echo "$as_me:$LINENO: result: yes: $OSI_VERSIONS" >&5 echo "${ECHO_T}yes: $OSI_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then OSI_LIBS=`echo " $OSI_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi OSI_PCREQUIRES="osi" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in OsiDyLPLib OSIDYLPLIB_PCREQUIRES="osi $OSIDYLPLIB_PCREQUIRES" OSIDYLPLIB_CFLAGS="$OSI_CFLAGS $OSIDYLPLIB_CFLAGS" OSIDYLPLIB_LIBS="$OSI_LIBS $OSIDYLPLIB_LIBS" else OSI_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "osi"` coin_has_osi=notGiven echo "$as_me:$LINENO: result: not given: $OSI_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $OSI_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Osi without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Osi without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Osi (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Osi (fallback)... $ECHO_C" >&6 coin_has_osi=notGiven OSI_LIBS= OSI_LIBS_INSTALLED= OSI_CFLAGS= OSI_CFLAGS_INSTALLED= OSI_DATA= OSI_DATA_INSTALLED= OSI_PCLIBS= OSI_PCREQUIRES= # initial list of dependencies is "osi", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="osi" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$OSI_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` OSI_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$OSI_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi OSI_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi OSI_CFLAGS="$projcflags $OSI_CFLAGS" # set LIBS variable OSI_LIBS="$projlibs $OSI_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi OSI_CFLAGS_INSTALLED="$projcflags $OSI_CFLAGS_INSTALLED" # set LIBS variable OSI_LIBS_INSTALLED="$projlibs $OSI_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_osi=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_OSI 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then OSI_LIBS=`echo " $OSI_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` OSI_LIBS_INSTALLED=`echo " $OSI_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi OSI_PCREQUIRES="osi" OSIDYLPLIB_PCREQUIRES="osi $OSIDYLPLIB_PCREQUIRES" OSIDYLPLIB_CFLAGS="$OSI_CFLAGS $OSIDYLPLIB_CFLAGS" OSIDYLPLIB_LIBS="$OSI_LIBS $OSIDYLPLIB_LIBS" OSIDYLPLIB_CFLAGS_INSTALLED="$OSI_CFLAGS_INSTALLED $OSIDYLPLIB_CFLAGS_INSTALLED" OSIDYLPLIB_LIBS_INSTALLED="$OSI_LIBS_INSTALLED $OSIDYLPLIB_LIBS_INSTALLED" fi if test $coin_has_osi != notGiven && test $coin_has_osi != skipping; then COIN_HAS_OSI_TRUE= COIN_HAS_OSI_FALSE='#' else COIN_HAS_OSI_TRUE='#' COIN_HAS_OSI_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_osi" >&5 echo "${ECHO_T}$coin_has_osi" >&6 fi if test $coin_has_osi != skipping && test $coin_has_osi != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_OSI 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) OSI_DEPENDENCIES=`echo " $OSI_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` OSIDYLPLIB_DEPENDENCIES=`echo " $OSIDYLPLIB_LIBS " | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$OSI_CFLAGS" ; then { echo "$as_me:$LINENO: Osi CFLAGS are $OSI_CFLAGS" >&5 echo "$as_me: Osi CFLAGS are $OSI_CFLAGS" >&6;} fi if test -n "$OSI_LIBS" ; then { echo "$as_me:$LINENO: Osi LIBS are $OSI_LIBS" >&5 echo "$as_me: Osi LIBS are $OSI_LIBS" >&6;} fi if test -n "$OSI_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Osi DEPENDENCIES are $OSI_DEPENDENCIES" >&5 echo "$as_me: Osi DEPENDENCIES are $OSI_DEPENDENCIES" >&6;} fi if test -n "$OSI_DATA" ; then { echo "$as_me:$LINENO: Osi DATA is $OSI_DATA" >&5 echo "$as_me: Osi DATA is $OSI_DATA" >&6;} fi if test -n "$OSI_PCLIBS" ; then { echo "$as_me:$LINENO: Osi PCLIBS are $OSI_PCLIBS" >&5 echo "$as_me: Osi PCLIBS are $OSI_PCLIBS" >&6;} fi if test -n "$OSI_PCREQUIRES" ; then { echo "$as_me:$LINENO: Osi PCREQUIRES are $OSI_PCREQUIRES" >&5 echo "$as_me: Osi PCREQUIRES are $OSI_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: OsiDyLPLib CFLAGS are $OSIDYLPLIB_CFLAGS" >&5 echo "$as_me: OsiDyLPLib CFLAGS are $OSIDYLPLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: OsiDyLPLib LIBS are $OSIDYLPLIB_LIBS" >&5 echo "$as_me: OsiDyLPLib LIBS are $OSIDYLPLIB_LIBS" >&6;} { echo "$as_me:$LINENO: OsiDyLPLib DEPENDENCIES are $OSIDYLPLIB_DEPENDENCIES" >&5 echo "$as_me: OsiDyLPLib DEPENDENCIES are $OSIDYLPLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_osi != notGiven && test $coin_has_osi != skipping; then COIN_HAS_OSI_TRUE= COIN_HAS_OSI_FALSE='#' else COIN_HAS_OSI_TRUE='#' COIN_HAS_OSI_FALSE= fi echo "$as_me:$LINENO: checking for COIN-OR package OsiTests" >&5 echo $ECHO_N "checking for COIN-OR package OsiTests... $ECHO_C" >&6 coin_has_ositests=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "OsiTests"; then coin_has_ositests=skipping fi done fi if test "$coin_has_ositests" != skipping; then # Check whether --with-m4_tolower(OsiTests) or --without-m4_tolower(OsiTests) was given. if test "${with_ositests+set}" = set; then withval="$with_ositests" if test "$withval" = no ; then coin_has_ositests=skipping fi fi; fi OSITESTS_LIBS= OSITESTS_CFLAGS= OSITESTS_DATA= OSITESTS_DEPENDENCIES= OSITESTS_PCLIBS= OSITESTS_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_ositests != skipping; then # Check whether --with-m4_tolower(OsiTests)-lib or --without-m4_tolower(OsiTests)-lib was given. if test "${with_ositests_lib+set}" = set; then withval="$with_ositests_lib" if test "$withval" = no ; then coin_has_ositests=skipping else coin_has_ositests=yes OSITESTS_LIBS="$withval" OSITESTS_PCLIBS="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then OSITESTS_LIBS_INSTALLED="$withval" fi fi fi; fi if test $coin_has_ositests != skipping; then # Check whether --with-m4_tolower(OsiTests)-incdir or --without-m4_tolower(OsiTests)-incdir was given. if test "${with_ositests_incdir+set}" = set; then withval="$with_ositests_incdir" if test "$withval" = no ; then coin_has_ositests=skipping else coin_has_ositests=yes OSITESTS_CFLAGS="-I`${CYGPATH_W} $withval`" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then OSITESTS_CFLAGS_INSTALLED="$OSITESTS_CFLAGS" fi fi fi; fi if test $coin_has_ositests != skipping; then # Check whether --with-m4_tolower(OsiTests)-datadir or --without-m4_tolower(OsiTests)-datadir was given. if test "${with_ositests_datadir+set}" = set; then withval="$with_ositests_datadir" if test "$withval" = no ; then coin_has_ositests=skipping else coin_has_ositests=yes OSITESTS_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then OSITESTS_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_ositests = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "osi-unittests"; then OSITESTS_VERSIONS=`$PKG_CONFIG --modversion "osi-unittests" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "osi-unittests" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi OSITESTS_CFLAGS="$cflags" OSITESTS_LIBS=`$PKG_CONFIG --libs "osi-unittests" 2>/dev/null` OSITESTS_DATA=`$PKG_CONFIG --variable=datadir "osi-unittests" 2>/dev/null` coin_has_ositests=yes echo "$as_me:$LINENO: result: yes: $OSITESTS_VERSIONS" >&5 echo "${ECHO_T}yes: $OSITESTS_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then OSITESTS_LIBS=`echo " $OSITESTS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi OSITESTS_PCREQUIRES="osi-unittests" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in else OSITESTS_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "osi-unittests"` coin_has_ositests=notGiven echo "$as_me:$LINENO: result: not given: $OSITESTS_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $OSITESTS_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module OsiTests without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module OsiTests without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package OsiTests (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package OsiTests (fallback)... $ECHO_C" >&6 coin_has_ositests=notGiven OSITESTS_LIBS= OSITESTS_LIBS_INSTALLED= OSITESTS_CFLAGS= OSITESTS_CFLAGS_INSTALLED= OSITESTS_DATA= OSITESTS_DATA_INSTALLED= OSITESTS_PCLIBS= OSITESTS_PCREQUIRES= # initial list of dependencies is "osi-unittests", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="osi-unittests" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$OSITESTS_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` OSITESTS_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$OSITESTS_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi OSITESTS_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi OSITESTS_CFLAGS="$projcflags $OSITESTS_CFLAGS" # set LIBS variable OSITESTS_LIBS="$projlibs $OSITESTS_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi OSITESTS_CFLAGS_INSTALLED="$projcflags $OSITESTS_CFLAGS_INSTALLED" # set LIBS variable OSITESTS_LIBS_INSTALLED="$projlibs $OSITESTS_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_ositests=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_OSITESTS 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then OSITESTS_LIBS=`echo " $OSITESTS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` OSITESTS_LIBS_INSTALLED=`echo " $OSITESTS_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi OSITESTS_PCREQUIRES="osi-unittests" fi if test $coin_has_ositests != notGiven && test $coin_has_ositests != skipping; then COIN_HAS_OSITESTS_TRUE= COIN_HAS_OSITESTS_FALSE='#' else COIN_HAS_OSITESTS_TRUE='#' COIN_HAS_OSITESTS_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_ositests" >&5 echo "${ECHO_T}$coin_has_ositests" >&6 fi if test $coin_has_ositests != skipping && test $coin_has_ositests != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_OSITESTS 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) OSITESTS_DEPENDENCIES=`echo " $OSITESTS_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$OSITESTS_CFLAGS" ; then { echo "$as_me:$LINENO: OsiTests CFLAGS are $OSITESTS_CFLAGS" >&5 echo "$as_me: OsiTests CFLAGS are $OSITESTS_CFLAGS" >&6;} fi if test -n "$OSITESTS_LIBS" ; then { echo "$as_me:$LINENO: OsiTests LIBS are $OSITESTS_LIBS" >&5 echo "$as_me: OsiTests LIBS are $OSITESTS_LIBS" >&6;} fi if test -n "$OSITESTS_DEPENDENCIES" ; then { echo "$as_me:$LINENO: OsiTests DEPENDENCIES are $OSITESTS_DEPENDENCIES" >&5 echo "$as_me: OsiTests DEPENDENCIES are $OSITESTS_DEPENDENCIES" >&6;} fi if test -n "$OSITESTS_DATA" ; then { echo "$as_me:$LINENO: OsiTests DATA is $OSITESTS_DATA" >&5 echo "$as_me: OsiTests DATA is $OSITESTS_DATA" >&6;} fi if test -n "$OSITESTS_PCLIBS" ; then { echo "$as_me:$LINENO: OsiTests PCLIBS are $OSITESTS_PCLIBS" >&5 echo "$as_me: OsiTests PCLIBS are $OSITESTS_PCLIBS" >&6;} fi if test -n "$OSITESTS_PCREQUIRES" ; then { echo "$as_me:$LINENO: OsiTests PCREQUIRES are $OSITESTS_PCREQUIRES" >&5 echo "$as_me: OsiTests PCREQUIRES are $OSITESTS_PCREQUIRES" >&6;} fi fi fi # Define the Makefile conditional if test $coin_has_ositests != notGiven && test $coin_has_ositests != skipping; then COIN_HAS_OSITESTS_TRUE= COIN_HAS_OSITESTS_FALSE='#' else COIN_HAS_OSITESTS_TRUE='#' COIN_HAS_OSITESTS_FALSE= fi # Just Sample will be enough to run basic tests. If Netlib is present, the # OsiDylp test will run the Netlib problem set. echo "$as_me:$LINENO: checking for COIN-OR package Sample" >&5 echo $ECHO_N "checking for COIN-OR package Sample... $ECHO_C" >&6 coin_has_sample=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Sample"; then coin_has_sample=skipping fi done fi if test "$coin_has_sample" != skipping; then # Check whether --with-m4_tolower(Sample) or --without-m4_tolower(Sample) was given. if test "${with_sample+set}" = set; then withval="$with_sample" if test "$withval" = no ; then coin_has_sample=skipping fi fi; fi SAMPLE_LIBS= SAMPLE_CFLAGS= SAMPLE_DATA= SAMPLE_DEPENDENCIES= SAMPLE_PCLIBS= SAMPLE_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_sample != skipping; then # Check whether --with-m4_tolower(Sample)-lib or --without-m4_tolower(Sample)-lib was given. if test "${with_sample_lib+set}" = set; then withval="$with_sample_lib" if test "$withval" = no ; then coin_has_sample=skipping else coin_has_sample=yes SAMPLE_LIBS="$withval" SAMPLE_PCLIBS="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SAMPLE_LIBS_INSTALLED="$withval" fi fi fi; fi if test $coin_has_sample != skipping; then # Check whether --with-m4_tolower(Sample)-incdir or --without-m4_tolower(Sample)-incdir was given. if test "${with_sample_incdir+set}" = set; then withval="$with_sample_incdir" if test "$withval" = no ; then coin_has_sample=skipping else coin_has_sample=yes SAMPLE_CFLAGS="-I`${CYGPATH_W} $withval`" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SAMPLE_CFLAGS_INSTALLED="$SAMPLE_CFLAGS" fi fi fi; fi if test $coin_has_sample != skipping; then # Check whether --with-m4_tolower(Sample)-datadir or --without-m4_tolower(Sample)-datadir was given. if test "${with_sample_datadir+set}" = set; then withval="$with_sample_datadir" if test "$withval" = no ; then coin_has_sample=skipping else coin_has_sample=yes SAMPLE_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SAMPLE_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_sample = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coindatasample"; then SAMPLE_VERSIONS=`$PKG_CONFIG --modversion "coindatasample" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coindatasample" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SAMPLE_CFLAGS="$cflags" SAMPLE_LIBS=`$PKG_CONFIG --libs "coindatasample" 2>/dev/null` SAMPLE_DATA=`$PKG_CONFIG --variable=datadir "coindatasample" 2>/dev/null` coin_has_sample=yes echo "$as_me:$LINENO: result: yes: $SAMPLE_VERSIONS" >&5 echo "${ECHO_T}yes: $SAMPLE_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then SAMPLE_LIBS=`echo " $SAMPLE_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi SAMPLE_PCREQUIRES="coindatasample" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in else SAMPLE_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coindatasample"` coin_has_sample=notGiven echo "$as_me:$LINENO: result: not given: $SAMPLE_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $SAMPLE_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Sample without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Sample without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Sample (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Sample (fallback)... $ECHO_C" >&6 coin_has_sample=notGiven SAMPLE_LIBS= SAMPLE_LIBS_INSTALLED= SAMPLE_CFLAGS= SAMPLE_CFLAGS_INSTALLED= SAMPLE_DATA= SAMPLE_DATA_INSTALLED= SAMPLE_PCLIBS= SAMPLE_PCREQUIRES= # initial list of dependencies is "coindatasample", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coindatasample" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$SAMPLE_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` SAMPLE_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$SAMPLE_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi SAMPLE_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SAMPLE_CFLAGS="$projcflags $SAMPLE_CFLAGS" # set LIBS variable SAMPLE_LIBS="$projlibs $SAMPLE_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SAMPLE_CFLAGS_INSTALLED="$projcflags $SAMPLE_CFLAGS_INSTALLED" # set LIBS variable SAMPLE_LIBS_INSTALLED="$projlibs $SAMPLE_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_sample=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_SAMPLE 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then SAMPLE_LIBS=`echo " $SAMPLE_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` SAMPLE_LIBS_INSTALLED=`echo " $SAMPLE_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi SAMPLE_PCREQUIRES="coindatasample" fi if test $coin_has_sample != notGiven && test $coin_has_sample != skipping; then COIN_HAS_SAMPLE_TRUE= COIN_HAS_SAMPLE_FALSE='#' else COIN_HAS_SAMPLE_TRUE='#' COIN_HAS_SAMPLE_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_sample" >&5 echo "${ECHO_T}$coin_has_sample" >&6 fi if test $coin_has_sample != skipping && test $coin_has_sample != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_SAMPLE 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) SAMPLE_DEPENDENCIES=`echo " $SAMPLE_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$SAMPLE_CFLAGS" ; then { echo "$as_me:$LINENO: Sample CFLAGS are $SAMPLE_CFLAGS" >&5 echo "$as_me: Sample CFLAGS are $SAMPLE_CFLAGS" >&6;} fi if test -n "$SAMPLE_LIBS" ; then { echo "$as_me:$LINENO: Sample LIBS are $SAMPLE_LIBS" >&5 echo "$as_me: Sample LIBS are $SAMPLE_LIBS" >&6;} fi if test -n "$SAMPLE_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Sample DEPENDENCIES are $SAMPLE_DEPENDENCIES" >&5 echo "$as_me: Sample DEPENDENCIES are $SAMPLE_DEPENDENCIES" >&6;} fi if test -n "$SAMPLE_DATA" ; then { echo "$as_me:$LINENO: Sample DATA is $SAMPLE_DATA" >&5 echo "$as_me: Sample DATA is $SAMPLE_DATA" >&6;} fi if test -n "$SAMPLE_PCLIBS" ; then { echo "$as_me:$LINENO: Sample PCLIBS are $SAMPLE_PCLIBS" >&5 echo "$as_me: Sample PCLIBS are $SAMPLE_PCLIBS" >&6;} fi if test -n "$SAMPLE_PCREQUIRES" ; then { echo "$as_me:$LINENO: Sample PCREQUIRES are $SAMPLE_PCREQUIRES" >&5 echo "$as_me: Sample PCREQUIRES are $SAMPLE_PCREQUIRES" >&6;} fi fi fi # Define the Makefile conditional if test $coin_has_sample != notGiven && test $coin_has_sample != skipping; then COIN_HAS_SAMPLE_TRUE= COIN_HAS_SAMPLE_FALSE='#' else COIN_HAS_SAMPLE_TRUE='#' COIN_HAS_SAMPLE_FALSE= fi echo "$as_me:$LINENO: checking for COIN-OR package Netlib" >&5 echo $ECHO_N "checking for COIN-OR package Netlib... $ECHO_C" >&6 coin_has_netlib=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Netlib"; then coin_has_netlib=skipping fi done fi if test "$coin_has_netlib" != skipping; then # Check whether --with-m4_tolower(Netlib) or --without-m4_tolower(Netlib) was given. if test "${with_netlib+set}" = set; then withval="$with_netlib" if test "$withval" = no ; then coin_has_netlib=skipping fi fi; fi NETLIB_LIBS= NETLIB_CFLAGS= NETLIB_DATA= NETLIB_DEPENDENCIES= NETLIB_PCLIBS= NETLIB_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_netlib != skipping; then # Check whether --with-m4_tolower(Netlib)-lib or --without-m4_tolower(Netlib)-lib was given. if test "${with_netlib_lib+set}" = set; then withval="$with_netlib_lib" if test "$withval" = no ; then coin_has_netlib=skipping else coin_has_netlib=yes NETLIB_LIBS="$withval" NETLIB_PCLIBS="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then NETLIB_LIBS_INSTALLED="$withval" fi fi fi; fi if test $coin_has_netlib != skipping; then # Check whether --with-m4_tolower(Netlib)-incdir or --without-m4_tolower(Netlib)-incdir was given. if test "${with_netlib_incdir+set}" = set; then withval="$with_netlib_incdir" if test "$withval" = no ; then coin_has_netlib=skipping else coin_has_netlib=yes NETLIB_CFLAGS="-I`${CYGPATH_W} $withval`" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then NETLIB_CFLAGS_INSTALLED="$NETLIB_CFLAGS" fi fi fi; fi if test $coin_has_netlib != skipping; then # Check whether --with-m4_tolower(Netlib)-datadir or --without-m4_tolower(Netlib)-datadir was given. if test "${with_netlib_datadir+set}" = set; then withval="$with_netlib_datadir" if test "$withval" = no ; then coin_has_netlib=skipping else coin_has_netlib=yes NETLIB_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then NETLIB_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_netlib = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coindatanetlib"; then NETLIB_VERSIONS=`$PKG_CONFIG --modversion "coindatanetlib" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coindatanetlib" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi NETLIB_CFLAGS="$cflags" NETLIB_LIBS=`$PKG_CONFIG --libs "coindatanetlib" 2>/dev/null` NETLIB_DATA=`$PKG_CONFIG --variable=datadir "coindatanetlib" 2>/dev/null` coin_has_netlib=yes echo "$as_me:$LINENO: result: yes: $NETLIB_VERSIONS" >&5 echo "${ECHO_T}yes: $NETLIB_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then NETLIB_LIBS=`echo " $NETLIB_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi NETLIB_PCREQUIRES="coindatanetlib" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in else NETLIB_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coindatanetlib"` coin_has_netlib=notGiven echo "$as_me:$LINENO: result: not given: $NETLIB_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $NETLIB_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Netlib without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Netlib without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Netlib (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Netlib (fallback)... $ECHO_C" >&6 coin_has_netlib=notGiven NETLIB_LIBS= NETLIB_LIBS_INSTALLED= NETLIB_CFLAGS= NETLIB_CFLAGS_INSTALLED= NETLIB_DATA= NETLIB_DATA_INSTALLED= NETLIB_PCLIBS= NETLIB_PCREQUIRES= # initial list of dependencies is "coindatanetlib", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coindatanetlib" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$NETLIB_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` NETLIB_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$NETLIB_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi NETLIB_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi NETLIB_CFLAGS="$projcflags $NETLIB_CFLAGS" # set LIBS variable NETLIB_LIBS="$projlibs $NETLIB_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi NETLIB_CFLAGS_INSTALLED="$projcflags $NETLIB_CFLAGS_INSTALLED" # set LIBS variable NETLIB_LIBS_INSTALLED="$projlibs $NETLIB_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_netlib=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_NETLIB 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then NETLIB_LIBS=`echo " $NETLIB_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` NETLIB_LIBS_INSTALLED=`echo " $NETLIB_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi NETLIB_PCREQUIRES="coindatanetlib" fi if test $coin_has_netlib != notGiven && test $coin_has_netlib != skipping; then COIN_HAS_NETLIB_TRUE= COIN_HAS_NETLIB_FALSE='#' else COIN_HAS_NETLIB_TRUE='#' COIN_HAS_NETLIB_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_netlib" >&5 echo "${ECHO_T}$coin_has_netlib" >&6 fi if test $coin_has_netlib != skipping && test $coin_has_netlib != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_NETLIB 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) NETLIB_DEPENDENCIES=`echo " $NETLIB_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$NETLIB_CFLAGS" ; then { echo "$as_me:$LINENO: Netlib CFLAGS are $NETLIB_CFLAGS" >&5 echo "$as_me: Netlib CFLAGS are $NETLIB_CFLAGS" >&6;} fi if test -n "$NETLIB_LIBS" ; then { echo "$as_me:$LINENO: Netlib LIBS are $NETLIB_LIBS" >&5 echo "$as_me: Netlib LIBS are $NETLIB_LIBS" >&6;} fi if test -n "$NETLIB_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Netlib DEPENDENCIES are $NETLIB_DEPENDENCIES" >&5 echo "$as_me: Netlib DEPENDENCIES are $NETLIB_DEPENDENCIES" >&6;} fi if test -n "$NETLIB_DATA" ; then { echo "$as_me:$LINENO: Netlib DATA is $NETLIB_DATA" >&5 echo "$as_me: Netlib DATA is $NETLIB_DATA" >&6;} fi if test -n "$NETLIB_PCLIBS" ; then { echo "$as_me:$LINENO: Netlib PCLIBS are $NETLIB_PCLIBS" >&5 echo "$as_me: Netlib PCLIBS are $NETLIB_PCLIBS" >&6;} fi if test -n "$NETLIB_PCREQUIRES" ; then { echo "$as_me:$LINENO: Netlib PCREQUIRES are $NETLIB_PCREQUIRES" >&5 echo "$as_me: Netlib PCREQUIRES are $NETLIB_PCREQUIRES" >&6;} fi fi fi # Define the Makefile conditional if test $coin_has_netlib != notGiven && test $coin_has_netlib != skipping; then COIN_HAS_NETLIB_TRUE= COIN_HAS_NETLIB_FALSE='#' else COIN_HAS_NETLIB_TRUE='#' COIN_HAS_NETLIB_FALSE= fi ############################################################################# # Doing project specific tests # ############################################################################# # Tweak compilation flags. # Transfer flags from CFLAGS/CXXFLAGS to CPPFLAGS. case "$CXXFLAGS $CFLAGS" in *-mno-cygwin*) CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-mno-cygwin//g'` CFLAGS=`echo $CFLAGS | sed -e 's/-mno-cygwin//g'` CPPFLAGS="-mno-cygwin $CPPFLAGS" LDFLAGS="-mno-cygwin $LDFLAGS" ;; esac # Add flags. Strip the option first, then add once, to avoid repetition. case "$CXX" in clang* | */clang*) ;; cl* | */cl*) CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-wd4996//g'` CXXFLAGS="$CXXFLAGS -wd4996" ;; esac case "$CC" in clang* | */clang*) ;; cl* | */cl*) CFLAGS=`echo $CFLAGS | sed -e 's/-wd4996//g'` CFLAGS="$CFLAGS -wd4996" ;; esac # Darwin will refuse to compile its own standard headers if pedantic-errors is # requested. case "$build" in *-darwin*) CXXFLAGS=`echo $CXXFLAGS | sed -e 's/--*pedantic-errors//g'` CFLAGS=`echo $CFLAGS | sed -e 's/--*pedantic-errors//g'` ;; esac # DyLP's command parser (bnfrdr) makes heavy use of type-punning. We cannot # allow GCC to enforce strict-aliasing. And we can't simply test to see if it's # present; specifying -O2, -O3, or -Os also enables it. As above, strip # anything already present and insert one -fno-strict-aliasing. if test x"$ac_cv_c_compiler_gnu" = xyes ; then CFLAGS=`echo $CFLAGS | sed -e 's/--*fn*o*-*strict-aliasing//g'` CFLAGS="$CFLAGS -fno-strict-aliasing" fi if test x"$ac_cv_cxx_compiler_gnu" = xyes ; then CXXFLAGS=`echo $CXXFLAGS | sed -e 's/--*fn*o*-*strict-aliasing//g'` CXXFLAGS="$CXXFLAGS -fno-strict-aliasing" fi # Determine the C type that corresponds to the C++ bool type in size { echo "$as_me:$LINENO: Determining C type equivalent for C++ bool." >&5 echo "$as_me: Determining C type equivalent for C++ bool." >&6;} # Autoconf 2.59 has issues with the MSVC cl compiler which are fixed in 2.61. # Until we upgrade, just force sizeof(bool) to 1. case $CXX in cl* | */cl*) ac_cv_sizeof_cpp_bool="1 " ;; *) ac_ext=cc 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 "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (bool))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (bool))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (bool))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (bool))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (bool))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_cpp_bool=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (bool) for C++ See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (bool) for C++ See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (bool)); } unsigned long ulongval () { return (long) (sizeof (bool)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (bool))) < 0) { long i = longval (); if (i != ((long) (sizeof (bool)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (bool)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_cpp_bool=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (bool) for C++ See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (bool) for C++ See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val 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 ;; esac # Force a particular value to test the code below. # ac_cv_sizeof_cpp_bool=8 { echo "$as_me:$LINENO: C++ bool is $ac_cv_sizeof_cpp_bool bytes." >&5 echo "$as_me: C++ bool is $ac_cv_sizeof_cpp_bool bytes." >&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 dylp_booltype="no" if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (char))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (char))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (char))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_c_bool=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char) for C See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (char) for C See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (char)); } unsigned long ulongval () { return (long) (sizeof (char)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (char))) < 0) { long i = longval (); if (i != ((long) (sizeof (char)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (char)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_c_bool=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (char) for C See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (char) for C See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val if test $ac_cv_sizeof_cpp_bool = $ac_cv_sizeof_c_bool; then dylp_booltype="char" fi if test $dylp_booltype = "no"; then if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_c_bool=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int) for C See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int) for C See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (int)); } unsigned long ulongval () { return (long) (sizeof (int)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (int))) < 0) { long i = longval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_c_bool=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (int) for C See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int) for C See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val if test $ac_cv_sizeof_cpp_bool = $ac_cv_sizeof_c_bool; then dylp_booltype="int" fi fi if test $dylp_booltype = "no"; then if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short int))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short int))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short int))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (short int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_c_bool=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short int) for C See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (short int) for C See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (short int)); } unsigned long ulongval () { return (long) (sizeof (short int)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (short int))) < 0) { long i = longval (); if (i != ((long) (sizeof (short int)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (short int)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_c_bool=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (short int) for C See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (short int) for C See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val if test $ac_cv_sizeof_cpp_bool = $ac_cv_sizeof_c_bool; then dylp_booltype="short int" fi fi if test $dylp_booltype = "no"; then if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long int))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long int))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long int))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_c_bool=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long int) for C See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long int) for C See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (long int)); } unsigned long ulongval () { return (long) (sizeof (long int)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long int))) < 0) { long i = longval (); if (i != ((long) (sizeof (long int)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long int)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_c_bool=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long int) for C See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long int) for C See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val if test $ac_cv_sizeof_cpp_bool = $ac_cv_sizeof_c_bool; then dylp_booltype="long int" fi fi if test $dylp_booltype = "no"; then dylp_booltype="char" { echo "$as_me:$LINENO: WARNING: Cannot determine C type to match C++ bool. Defaulting to char. Dylp will compile, but will certainly crash when executed." >&5 echo "$as_me: WARNING: Cannot determine C type to match C++ bool. Defaulting to char. Dylp will compile, but will certainly crash when executed." >&2;} fi cat >>confdefs.h <<_ACEOF #define BOOL $dylp_booltype _ACEOF 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 { echo "$as_me:$LINENO: C $dylp_booltype will be used as bool by dylp." >&5 echo "$as_me: C $dylp_booltype will be used as bool by dylp." >&6;} ######################################################################## # The floating point functions we'll be looking for seem to live in one of # the following headers: math.h, ieeefp.h, float.h, and sunmath.h. Check # for presence. We'll use the results to limit the work below. # check for presence/absence of -lm (for libmath) and store in DYLP_(PC)LIBS flags if test $coin_cc_is_cl != true ; then DYLPLIB_LIBS="-lm $DYLPLIB_LIBS" DYLPLIB_PCLIBS="-lm $DYLPLIB_PCLIBS" DYLPLIB_LIBS_INSTALLED="-lm $DYLPLIB_LIBS_INSTALLED" fi if test "${ac_cv_header_math_h+set}" = set; then echo "$as_me:$LINENO: checking for math.h" >&5 echo $ECHO_N "checking for math.h... $ECHO_C" >&6 if test "${ac_cv_header_math_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_math_h" >&5 echo "${ECHO_T}$ac_cv_header_math_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking math.h usability" >&5 echo $ECHO_N "checking math.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking math.h presence" >&5 echo $ECHO_N "checking math.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: math.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: math.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: math.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: math.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: math.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: math.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: math.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: math.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: math.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: math.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: math.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: math.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: math.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: math.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: math.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: math.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------- ## ## Report this to coin-dylp@list.coin-or.org ## ## ----------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for math.h" >&5 echo $ECHO_N "checking for math.h... $ECHO_C" >&6 if test "${ac_cv_header_math_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_math_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_math_h" >&5 echo "${ECHO_T}$ac_cv_header_math_h" >&6 fi if test $ac_cv_header_math_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_MATH_H 1 _ACEOF fp_header_list="math.h" ac_includes_default="\ $ac_includes_default #include " else { echo "$as_me:$LINENO: WARNING: It appears that math.h is missing." >&5 echo "$as_me: WARNING: It appears that math.h is missing." >&2;} { echo "$as_me:$LINENO: WARNING: There is no hope of building dylp on this system." >&5 echo "$as_me: WARNING: There is no hope of building dylp on this system." >&2;} fi if test "${ac_cv_header_ieeefp_h+set}" = set; then echo "$as_me:$LINENO: checking for ieeefp.h" >&5 echo $ECHO_N "checking for ieeefp.h... $ECHO_C" >&6 if test "${ac_cv_header_ieeefp_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_ieeefp_h" >&5 echo "${ECHO_T}$ac_cv_header_ieeefp_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking ieeefp.h usability" >&5 echo $ECHO_N "checking ieeefp.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking ieeefp.h presence" >&5 echo $ECHO_N "checking ieeefp.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: ieeefp.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: ieeefp.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: ieeefp.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: ieeefp.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: ieeefp.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: ieeefp.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: ieeefp.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: ieeefp.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: ieeefp.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: ieeefp.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: ieeefp.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: ieeefp.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: ieeefp.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: ieeefp.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: ieeefp.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: ieeefp.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------- ## ## Report this to coin-dylp@list.coin-or.org ## ## ----------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for ieeefp.h" >&5 echo $ECHO_N "checking for ieeefp.h... $ECHO_C" >&6 if test "${ac_cv_header_ieeefp_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_ieeefp_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_ieeefp_h" >&5 echo "${ECHO_T}$ac_cv_header_ieeefp_h" >&6 fi if test $ac_cv_header_ieeefp_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_IEEEFP_H 1 _ACEOF fp_header_list="ieeefp.h $fp_header_list" ac_includes_default="\ $ac_includes_default #include " fi if test "${ac_cv_header_float_h+set}" = set; then echo "$as_me:$LINENO: checking for float.h" >&5 echo $ECHO_N "checking for float.h... $ECHO_C" >&6 if test "${ac_cv_header_float_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_float_h" >&5 echo "${ECHO_T}$ac_cv_header_float_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking float.h usability" >&5 echo $ECHO_N "checking float.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking float.h presence" >&5 echo $ECHO_N "checking float.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: float.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: float.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: float.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: float.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: float.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: float.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: float.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: float.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: float.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: float.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: float.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: float.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: float.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: float.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: float.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: float.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------- ## ## Report this to coin-dylp@list.coin-or.org ## ## ----------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for float.h" >&5 echo $ECHO_N "checking for float.h... $ECHO_C" >&6 if test "${ac_cv_header_float_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_float_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_float_h" >&5 echo "${ECHO_T}$ac_cv_header_float_h" >&6 fi if test $ac_cv_header_float_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_FLOAT_H 1 _ACEOF fp_header_list="float.h $fp_header_list" ac_includes_default="\ $ac_includes_default #include " fi if test "${ac_cv_header_sunmath_h+set}" = set; then echo "$as_me:$LINENO: checking for sunmath.h" >&5 echo $ECHO_N "checking for sunmath.h... $ECHO_C" >&6 if test "${ac_cv_header_sunmath_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_sunmath_h" >&5 echo "${ECHO_T}$ac_cv_header_sunmath_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking sunmath.h usability" >&5 echo $ECHO_N "checking sunmath.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking sunmath.h presence" >&5 echo $ECHO_N "checking sunmath.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: sunmath.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: sunmath.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: sunmath.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: sunmath.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: sunmath.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: sunmath.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: sunmath.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: sunmath.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: sunmath.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: sunmath.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: sunmath.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: sunmath.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: sunmath.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: sunmath.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: sunmath.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: sunmath.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------------- ## ## Report this to coin-dylp@list.coin-or.org ## ## ----------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for sunmath.h" >&5 echo $ECHO_N "checking for sunmath.h... $ECHO_C" >&6 if test "${ac_cv_header_sunmath_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_sunmath_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_sunmath_h" >&5 echo "${ECHO_T}$ac_cv_header_sunmath_h" >&6 fi if test $ac_cv_header_sunmath_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_SUNMATH_H 1 _ACEOF fp_header_list="sunmath.h $fp_header_list" ac_includes_default="\ $ac_includes_default #include " { echo "$as_me:$LINENO: Determining Sun Studio library directories ... " >&5 echo "$as_me: Determining Sun Studio library directories ... " >&6;} cat /dev/null > dylp_ac_studiodirs.c # The autoconf convention seems to be to put output in a file. Avoids problems # stuffing too-long strings into variables, I suppose. $CC -xdryrun $CFLAGS $CPPFLAGS dylp_ac_studiodirs.c 2> dylp_ac_studiodirs.c # Now find the -YP option. Remember that autoconf does not take kindly to [] in # macros, so we need to use quadrigraphs. SUNSTUDIO_LIBDIRS=`cat dylp_ac_studiodirs.c | \ sed -n -e 's/.*-Y[^,]*,\([^ "]*\).*/-L\1/p' | \ sed -n -e 's/:/ -L/gp'` rm -f dylp_ac_studiodirs.c { echo "$as_me:$LINENO: \"$SUNSTUDIO_LIBDIRS\"" >&5 echo "$as_me: \"$SUNSTUDIO_LIBDIRS\"" >&6;} DYLPLIB_LIBS="-lsunmath $DYLPLIB_LIBS" DYLPLIB_LIBS_INSTALLED="-lsunmath $DYLPLIB_LIBS_INSTALLED" DYLPLIB_PCLIBS="-lsunmath $DYLPLIB_PCLIBS" fi { echo "$as_me:$LINENO: Found floating point header files $fp_header_list." >&5 echo "$as_me: Found floating point header files $fp_header_list." >&6;} # AC_MSG_NOTICE([includes are now:]) # AC_MSG_NOTICE([$ac_includes_default]) # Now determine the names in this environment for isfinite() and isnan(). The # most common variants are finite() and isnan(). We check for others. After # these macros finish, DYLP_ISFINITE has the name for isfinite(), and # DYLP_ISNAN has the name for isnan(). { echo "$as_me:$LINENO: Checking for proper name for isfinite()." >&5 echo "$as_me: Checking for proper name for isfinite()." >&6;} ac_name_of_isfinite="unavailable" echo "$as_me:$LINENO: checking for finite" >&5 echo $ECHO_N "checking for finite... $ECHO_C" >&6 if test "${ac_cv_func_finite+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define finite to an innocuous variant, in case declares finite. For example, HP-UX 11i declares gettimeofday. */ #define finite innocuous_finite /* System header to define __stub macros and hopefully few prototypes, which can conflict with char finite (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef finite /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char finite (); /* 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_finite) || defined (__stub___finite) choke me #else char (*f) () = finite; #endif #ifdef __cplusplus } #endif int main () { return f != finite; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_finite=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_finite=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_finite" >&5 echo "${ECHO_T}$ac_cv_func_finite" >&6 if test $ac_cv_func_finite = yes; then ac_name_of_isfinite=finite fi if test "$ac_name_of_isfinite" = "unavailable"; then echo "$as_me:$LINENO: checking for _finite" >&5 echo $ECHO_N "checking for _finite... $ECHO_C" >&6 if test "${ac_cv_func__finite+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define _finite to an innocuous variant, in case declares _finite. For example, HP-UX 11i declares gettimeofday. */ #define _finite innocuous__finite /* System header to define __stub macros and hopefully few prototypes, which can conflict with char _finite (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef _finite /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char _finite (); /* 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__finite) || defined (__stub____finite) choke me #else char (*f) () = _finite; #endif #ifdef __cplusplus } #endif int main () { return f != _finite; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func__finite=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func__finite=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func__finite" >&5 echo "${ECHO_T}$ac_cv_func__finite" >&6 if test $ac_cv_func__finite = yes; then ac_name_of_isfinite=_finite fi fi if test "$ac_name_of_isfinite" = "unavailable"; then echo "$as_me:$LINENO: checking for isfinite" >&5 echo $ECHO_N "checking for isfinite... $ECHO_C" >&6 if test "${ac_cv_func_isfinite+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define isfinite to an innocuous variant, in case declares isfinite. For example, HP-UX 11i declares gettimeofday. */ #define isfinite innocuous_isfinite /* System header to define __stub macros and hopefully few prototypes, which can conflict with char isfinite (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef isfinite /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char isfinite (); /* 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_isfinite) || defined (__stub___isfinite) choke me #else char (*f) () = isfinite; #endif #ifdef __cplusplus } #endif int main () { return f != isfinite; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_isfinite=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_isfinite=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_isfinite" >&5 echo "${ECHO_T}$ac_cv_func_isfinite" >&6 if test $ac_cv_func_isfinite = yes; then ac_name_of_isfinite=isfinite fi fi if test "$ac_name_of_isfinite" = "unavailable"; then { echo "$as_me:$LINENO: WARNING: Cannot find a C function to check if an IEEE floating point value is finite. There is no hope of building dylp on this system." >&5 echo "$as_me: WARNING: Cannot find a C function to check if an IEEE floating point value is finite. There is no hope of building dylp on this system." >&2;} fi cat >>confdefs.h <<_ACEOF #define DYLP_ISFINITE $ac_name_of_isfinite _ACEOF { echo "$as_me:$LINENO: Using $ac_name_of_isfinite as isfinite()." >&5 echo "$as_me: Using $ac_name_of_isfinite as isfinite()." >&6;} { echo "$as_me:$LINENO: Checking for proper name for isnan()." >&5 echo "$as_me: Checking for proper name for isnan()." >&6;} ac_name_of_isnan="unavailable" echo "$as_me:$LINENO: checking for isnan" >&5 echo $ECHO_N "checking for isnan... $ECHO_C" >&6 if test "${ac_cv_func_isnan+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define isnan to an innocuous variant, in case declares isnan. For example, HP-UX 11i declares gettimeofday. */ #define isnan innocuous_isnan /* System header to define __stub macros and hopefully few prototypes, which can conflict with char isnan (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef isnan /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char isnan (); /* 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_isnan) || defined (__stub___isnan) choke me #else char (*f) () = isnan; #endif #ifdef __cplusplus } #endif int main () { return f != isnan; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_isnan=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_isnan=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_isnan" >&5 echo "${ECHO_T}$ac_cv_func_isnan" >&6 if test $ac_cv_func_isnan = yes; then ac_name_of_isnan=isnan fi if test "$ac_name_of_isnan" = "unavailable"; then echo "$as_me:$LINENO: checking for _isnan" >&5 echo $ECHO_N "checking for _isnan... $ECHO_C" >&6 if test "${ac_cv_func__isnan+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define _isnan to an innocuous variant, in case declares _isnan. For example, HP-UX 11i declares gettimeofday. */ #define _isnan innocuous__isnan /* System header to define __stub macros and hopefully few prototypes, which can conflict with char _isnan (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef _isnan /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char _isnan (); /* 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__isnan) || defined (__stub____isnan) choke me #else char (*f) () = _isnan; #endif #ifdef __cplusplus } #endif int main () { return f != _isnan; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func__isnan=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func__isnan=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func__isnan" >&5 echo "${ECHO_T}$ac_cv_func__isnan" >&6 if test $ac_cv_func__isnan = yes; then ac_name_of_isnan=_isnan fi fi if test "$ac_name_of_isnan" = "unavailable"; then { echo "$as_me:$LINENO: WARNING: Cannot find a C function to check if an IEEE floating point value is NaN. There is no hope of building dylp on this system." >&5 echo "$as_me: WARNING: Cannot find a C function to check if an IEEE floating point value is NaN. There is no hope of building dylp on this system." >&2;} fi cat >>confdefs.h <<_ACEOF #define DYLP_ISNAN $ac_name_of_isnan _ACEOF { echo "$as_me:$LINENO: Using $ac_name_of_isnan as isnan()." >&5 echo "$as_me: Using $ac_name_of_isnan as isnan()." >&6;} # Check for the presence of a quiet_nan function. To my knowledge, this will # exist only if sunmath is present, but hey, who knows what lurks out there. echo "$as_me:$LINENO: checking for quiet_nan" >&5 echo $ECHO_N "checking for quiet_nan... $ECHO_C" >&6 if test "${ac_cv_func_quiet_nan+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define quiet_nan to an innocuous variant, in case declares quiet_nan. For example, HP-UX 11i declares gettimeofday. */ #define quiet_nan innocuous_quiet_nan /* System header to define __stub macros and hopefully few prototypes, which can conflict with char quiet_nan (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef quiet_nan /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char quiet_nan (); /* 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_quiet_nan) || defined (__stub___quiet_nan) choke me #else char (*f) () = quiet_nan; #endif #ifdef __cplusplus } #endif int main () { return f != quiet_nan; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_quiet_nan=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_quiet_nan=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_quiet_nan" >&5 echo "${ECHO_T}$ac_cv_func_quiet_nan" >&6 if test $ac_cv_func_quiet_nan = yes; then cat >>confdefs.h <<\_ACEOF #define DYLP_HAS_QUIET_NAN 1 _ACEOF fi # And determine whether we're big-endian or little-endian. This is necessary to # define the correct patterns for IEEE infinity and quiet_nan, in the event # that we can't get them any other way. This will define WORDS_BIGENDIAN if # we're on a big-endian machine, and do nothing otherwise. echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6 if test "${ac_cv_c_bigendian+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # See if sys/param.h defines the BYTE_ORDER macro. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN bogus endian macros #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then # It does; now see whether it defined to BIG_ENDIAN or not. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_bigendian=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_bigendian=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # It does not; compile a test program. if test "$cross_compiling" = yes; then # try to guess the endianness by grepping values into an object file ac_cv_c_bigendian=unknown cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } int main () { _ascii (); _ebcdic (); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long l; char c[sizeof (long)]; } u; u.l = 1; exit (u.c[sizeof (long) - 1] == 1); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_bigendian=no else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_c_bigendian=yes fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 echo "${ECHO_T}$ac_cv_c_bigendian" >&6 case $ac_cv_c_bigendian in yes) cat >>confdefs.h <<\_ACEOF #define WORDS_BIGENDIAN 1 _ACEOF ;; no) ;; *) { { echo "$as_me:$LINENO: error: unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" >&5 echo "$as_me: error: unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} { (exit 1); exit 1; }; } ;; esac # Finally, dylp needs to know where its error message text file is located. # This is made horribly complicated by Windows, which uses drive letters and # backslash in the native path format, and by the variation between faked unix # environments on Windows. Cygwin isn't too bad --- it provides cygpath to # translate a unix path into native Windows format. Mingw/Msys can't be # bothered, so we need to work harder. # Keep in mind the sed expressions are interpreted by the shell and then by # sed; the backslashes are halved each time. In the end we're left with # s,/,\\,g or s,\,\\,g as the actual substitutions. This gets us a double # backslash in DYLP_ERRMSGDIR, which the various compilers can strip down to # one. Sheesh. if test x"$DYLP_ERRMSGDIR" = x; then case $build in *-mingw*|*-msys*) DYLP_ERRMSGDIR="`(cd "$abs_source_dir";pwd -W)`/src/Dylp/" DYLP_ERRMSGDIR=`echo $DYLP_ERRMSGDIR | sed -e 's,/,\\\\\\\\,g'` ;; *-cygwin*) DYLP_ERRMSGDIR="`$CYGPATH_W $abs_source_dir/src/Dylp/`" DYLP_ERRMSGDIR=`echo $DYLP_ERRMSGDIR | sed -e 's,\\\\,\\\\\\\\,g'` ;; *) DYLP_ERRMSGDIR="$abs_source_dir/src/Dylp/" ;; esac fi cat >>confdefs.h <<_ACEOF #define DYLP_ERRMSGDIR "$DYLP_ERRMSGDIR" _ACEOF ############################################################################## # Dylp configuration options # ############################################################################## # Check whether --enable-dylp-paranoia or --disable-dylp-paranoia was given. if test "${enable_dylp_paranoia+set}" = set; then enableval="$enable_dylp_paranoia" dylp_paranoia=$enableval else dylp_paranoia=no fi; if test "$dylp_paranoia" = "yes"; then cat >>confdefs.h <<\_ACEOF #define DYLP_PARANOIA 1 _ACEOF { echo "$as_me:$LINENO: Dylp paranoid checks enabled." >&5 echo "$as_me: Dylp paranoid checks enabled." >&6;} else { echo "$as_me:$LINENO: Dylp paranoid checks disabled." >&5 echo "$as_me: Dylp paranoid checks disabled." >&6;} fi # Check whether --enable-dylp-stats or --disable-dylp-stats was given. if test "${enable_dylp_stats+set}" = set; then enableval="$enable_dylp_stats" dylp_stats=$enableval else dylp_stats=no fi; if test "$dylp_stats" = "yes"; then cat >>confdefs.h <<\_ACEOF #define DYLP_STATISTICS 1 _ACEOF { echo "$as_me:$LINENO: Dylp statistics collection enabled." >&5 echo "$as_me: Dylp statistics collection enabled." >&6;} else { echo "$as_me:$LINENO: Dylp statistics collection disabled." >&5 echo "$as_me: Dylp statistics collection disabled." >&6;} fi # Check whether --enable-dylp-info or --disable-dylp-info was given. if test "${enable_dylp_info+set}" = set; then enableval="$enable_dylp_info" dylp_info=$enableval else dylp_info=yes fi; if test "$dylp_info" = "no"; then cat >>confdefs.h <<\_ACEOF #define DYLP_NDEBUG 1 _ACEOF { echo "$as_me:$LINENO: Dylp informational printing disabled." >&5 echo "$as_me: Dylp informational printing disabled." >&6;} else { echo "$as_me:$LINENO: Dylp informational printing enabled." >&5 echo "$as_me: Dylp informational printing enabled." >&6;} fi ############################################################################## # OsiDylp configuration options # ############################################################################## # Check whether --enable-osidylp-info or --disable-osidylp-info was given. if test "${enable_osidylp_info+set}" = set; then enableval="$enable_osidylp_info" osidylp_info=$enableval else osidylp_info=yes fi; if test "$osidylp_info" = "yes"; then cat >>confdefs.h <<\_ACEOF #define ODSI_INFOMSGS 1 _ACEOF { echo "$as_me:$LINENO: OsiDylp informational printing enabled." >&5 echo "$as_me: OsiDylp informational printing enabled." >&6;} else { echo "$as_me:$LINENO: OsiDylp informational printing disabled." >&5 echo "$as_me: OsiDylp informational printing disabled." >&6;} fi # Check whether --enable-osidylp-stats or --disable-osidylp-stats was given. if test "${enable_osidylp_stats+set}" = set; then enableval="$enable_osidylp_stats" osidylp_stats=$enableval else osidylp_stats=no fi; if test "$osidylp_stats" = "yes"; then cat >>confdefs.h <<\_ACEOF #define ODSI_STATISTICS 1 _ACEOF { echo "$as_me:$LINENO: OsiDylp support for dylp statistics collection enabled." >&5 echo "$as_me: OsiDylp support for dylp statistics collection enabled." >&6;} else { echo "$as_me:$LINENO: OsiDylp support for dylp statistics collection disabled." >&5 echo "$as_me: OsiDylp support for dylp statistics collection disabled." >&6;} fi # Check whether --enable-osidylp-paranoia or --disable-osidylp-paranoia was given. if test "${enable_osidylp_paranoia+set}" = set; then enableval="$enable_osidylp_paranoia" osidylp_paranoia=$enableval else osidylp_paranoia=1 fi; if test "$osidylp_paranoia" = "yes"; then osidylp_paranoia=1 elif test "$osidylp_paranoia" = "no"; then osidylp_paranoia=0 fi cat >>confdefs.h <<_ACEOF #define ODSI_PARANOIA $osidylp_paranoia _ACEOF case $osidylp_paranoia in 0) { echo "$as_me:$LINENO: OsiDylp paranoid checks disabled." >&5 echo "$as_me: OsiDylp paranoid checks disabled." >&6;} ;; 1) { echo "$as_me:$LINENO: OsiDylp paranoid checks at normal level." >&5 echo "$as_me: OsiDylp paranoid checks at normal level." >&6;} ;; *) { echo "$as_me:$LINENO: OsiDylp paranoid checks at level $osidylp_paranoia." >&5 echo "$as_me: OsiDylp paranoid checks at level $osidylp_paranoia." >&6;} ;; esac ############################################################################## # Documentation # ############################################################################## # Doxygen documentation. Dylp is independent of Coin code, but OsiDylp can # benefit from links to doxygen doc'n for CoinUtils and Osi. { echo "$as_me:$LINENO: configuring doxygen documentation options" >&5 echo "$as_me: configuring doxygen documentation options" >&6;} # Check to see if doxygen is available. # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_doxygen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_doxygen"; then ac_cv_prog_coin_have_doxygen="$coin_have_doxygen" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_doxygen="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_doxygen" && ac_cv_prog_coin_have_doxygen="no" fi fi coin_have_doxygen=$ac_cv_prog_coin_have_doxygen if test -n "$coin_have_doxygen"; then echo "$as_me:$LINENO: result: $coin_have_doxygen" >&5 echo "${ECHO_T}$coin_have_doxygen" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_latex+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_latex"; then ac_cv_prog_coin_have_latex="$coin_have_latex" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_latex="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_latex" && ac_cv_prog_coin_have_latex="no" fi fi coin_have_latex=$ac_cv_prog_coin_have_latex if test -n "$coin_have_latex"; then echo "$as_me:$LINENO: result: $coin_have_latex" >&5 echo "${ECHO_T}$coin_have_latex" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Look for the dot tool from the graphviz package, unless the user has # disabled it. # Check whether --with-dot or --without-dot was given. if test "${with_dot+set}" = set; then withval="$with_dot" else withval=yes fi; if test x"$withval" = xno ; then coin_doxy_usedot=NO echo "$as_me:$LINENO: checking for dot " >&5 echo $ECHO_N "checking for dot ... $ECHO_C" >&6 echo "$as_me:$LINENO: result: disabled" >&5 echo "${ECHO_T}disabled" >&6 else # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_doxy_usedot+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_doxy_usedot"; then ac_cv_prog_coin_doxy_usedot="$coin_doxy_usedot" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_doxy_usedot="YES" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_doxy_usedot" && ac_cv_prog_coin_doxy_usedot="NO" fi fi coin_doxy_usedot=$ac_cv_prog_coin_doxy_usedot if test -n "$coin_doxy_usedot"; then echo "$as_me:$LINENO: result: $coin_doxy_usedot" >&5 echo "${ECHO_T}$coin_doxy_usedot" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi # Generate a tag file name and a log file name coin_doxy_tagname=doxydoc/${PACKAGE}_doxy.tag coin_doxy_logname=doxydoc/${PACKAGE}_doxy.log if test $coin_have_doxygen = yes; then COIN_HAS_DOXYGEN_TRUE= COIN_HAS_DOXYGEN_FALSE='#' else COIN_HAS_DOXYGEN_TRUE='#' COIN_HAS_DOXYGEN_FALSE= fi if test $coin_have_latex = yes; then COIN_HAS_LATEX_TRUE= COIN_HAS_LATEX_FALSE='#' else COIN_HAS_LATEX_TRUE='#' COIN_HAS_LATEX_FALSE= fi # Process the list of project names and massage them into possible doxygen # doc'n directories. Prefer 1) classic external, source processed using # a project-specific doxygen.conf, we use the tag file; 2) classic # external, source processed using package doxygen.conf; 3) installed # doxydoc. Alternatives 1) and 2) are only possible if the directory will be # configured, which we can't know unless this is the package base configure, # since coin_subdirs is only set there. Hence it's sufficient to check for # membership. If we use a tag file from a classic external, exclude the # source from doxygen processing when doxygen runs in the base directory. coin_doxy_tagfiles= coin_doxy_excludes= tmp="CoinUtils Osi" for proj in $tmp ; do lc_proj=`echo $proj | tr [A-Z] [a-z]` echo "$as_me:$LINENO: checking for doxygen doc'n for $proj " >&5 echo $ECHO_N "checking for doxygen doc'n for $proj ... $ECHO_C" >&6 doxytag=${lc_proj}_doxy.tag doxyfound=no # proj will be configured, hence doxydoc present in build tree doxysrcdir="${srcdir}/../${proj}" # AC_MSG_NOTICE([Considering $doxysrcdir (base)]) if test -d "$doxysrcdir" ; then # with a doxydoc directory? doxydir="$doxysrcdir/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (base)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) if test -d "$doxydir" ; then # use tag file; don't process source doxydir="../${proj}/doxydoc" coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=../../$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 coin_doxy_excludes="$coin_doxy_excludes */${proj}" else # will process the source -- nothing further to be done here echo "$as_me:$LINENO: result: $doxysrcdir (src)" >&5 echo "${ECHO_T}$doxysrcdir (src)" >&6 fi doxyfound=yes fi # Not built, fall back to installed tag file if test $doxyfound = no ; then eval doxydir="${datadir}/coin/doc/${proj}/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (install)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 fi done ############################################################################## # VPATH links for example input files # ############################################################################## # In case this is a VPATH configuration we need to make sure that the # input files for the examples are available in the VPATH directory. echo "$as_me:$LINENO: checking whether this is a VPATH configuration" >&5 echo $ECHO_N "checking whether this is a VPATH configuration... $ECHO_C" >&6 if test `cd $srcdir; pwd` != `pwd`; then coin_vpath_config=yes; else coin_vpath_config=no; fi echo "$as_me:$LINENO: result: $coin_vpath_config" >&5 echo "${ECHO_T}$coin_vpath_config" >&6 # Allow for newlines in the parameter if test $coin_vpath_config = yes; then cvl_tmp="examples/plain examples/generic.spc examples/greenbeb.spc" for file in $cvl_tmp ; do coin_vpath_link_files="$coin_vpath_link_files $file" done fi ############################################################################## # Finishing up by writing all the output # ############################################################################## # Here list all the files that configure should create (except for the # configuration header file). First the usual stuff: DyLP's top-level Makefile, # the code Makefiles (src/*/Makefile), and the test Makefile. ac_config_files="$ac_config_files Makefile examples/Makefile src/DylpStdLib/Makefile src/Dylp/Makefile src/OsiDylp/Makefile test/Makefile" # Files for doxygen documentation ac_config_files="$ac_config_files doxydoc/doxygen.conf" # The pkg-config data files ac_config_files="$ac_config_files dylp.pc dylp-uninstalled.pc" if test $coin_has_osi = yes ; then ac_config_files="$ac_config_files osi-dylp.pc:src/OsiDylp/osi-dylp.pc.in osi-dylp-uninstalled.pc:src/OsiDylp/osi-dylp-uninstalled.pc.in" fi # And all the stuff that goes into building the documentation. See the note in # Makefile.am with respect to CONFIG_CLEAN_FILES and the distclean and # distclean-local targets. ac_config_files="$ac_config_files doc/Makefile doc/dylpabsdir.tex doc/makefile.dylpdoc doc/Figures/Makefile doc/TexMF/Makefile" ac_config_files="$ac_config_files doc/build_dylpdoc" # Here put the location and name of the configuration header files ac_config_headers="$ac_config_headers src/DylpStdLib/config.h src/DylpStdLib/config_dylp.h" # Finally, we let configure write all the output... echo "$as_me:$LINENO: checking which command should be used to link input files" >&5 echo $ECHO_N "checking which command should be used to link input files... $ECHO_C" >&6 coin_link_input_cmd="$LN_S" case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_link_input_cmd=cp ;; esac echo "$as_me:$LINENO: result: $coin_link_input_cmd" >&5 echo "${ECHO_T}$coin_link_input_cmd" >&6 if test x$coin_skip_ac_output != xyes; then # library extension case "$CC" in clang* ) LIBEXT=a ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LIBEXT=lib ;; *) LIBEXT=a ;; esac # Define VPATH_DISTCLEANFILES to be everything that needs to be # cleaned for distclean in a vpath configuration VPATH_DISTCLEANFILES="$coin_vpath_link_files" # Take out subdirectories if their configuration concluded that they # don't need to be compiled if test x"$coin_ac_skip_subdirs" != x; then new_subdirs= for i in $subdirs; do skipme=no for j in $coin_ac_skip_subdirs; do if test $i = $j; then skipme=yes; fi done if test $skipme = no; then new_subdirs="$new_subdirs $i" fi done subdirs="$new_subdirs" fi # need to come before AC_OUTPUT if test x$coin_projectdir != xyes; then # write coin_subdirs to a file so that project configuration knows where to find uninstalled projects echo $coin_subdirs > coin_subdirs.txt else # substitute for OBJDIR, needed to setup .pc file for uninstalled project ABSBUILDDIR="`pwd`" fi 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, don't put newlines in cache variables' values. # 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. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *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 \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" 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}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ 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[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${ALWAYS_FALSE_TRUE}" && test -z "${ALWAYS_FALSE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_CC_IS_CL_TRUE}" && test -z "${COIN_CC_IS_CL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_CC_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_CC_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_CXX_IS_CL_TRUE}" && test -z "${COIN_CXX_IS_CL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_CXX_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_CXX_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${HAVE_EXTERNALS_TRUE}" && test -z "${HAVE_EXTERNALS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DEPENDENCY_LINKING_TRUE}" && test -z "${DEPENDENCY_LINKING_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"DEPENDENCY_LINKING\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"DEPENDENCY_LINKING\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_PKGCONFIG_TRUE}" && test -z "${COIN_HAS_PKGCONFIG_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_PKGCONFIG\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_PKGCONFIG\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_COINUTILS_TRUE}" && test -z "${COIN_HAS_COINUTILS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_COINUTILS_TRUE}" && test -z "${COIN_HAS_COINUTILS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_OSI_TRUE}" && test -z "${COIN_HAS_OSI_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_OSI\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_OSI\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_OSI_TRUE}" && test -z "${COIN_HAS_OSI_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_OSI\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_OSI\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_OSITESTS_TRUE}" && test -z "${COIN_HAS_OSITESTS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_OSITESTS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_OSITESTS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_OSITESTS_TRUE}" && test -z "${COIN_HAS_OSITESTS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_OSITESTS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_OSITESTS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_SAMPLE_TRUE}" && test -z "${COIN_HAS_SAMPLE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_SAMPLE_TRUE}" && test -z "${COIN_HAS_SAMPLE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_NETLIB_TRUE}" && test -z "${COIN_HAS_NETLIB_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_NETLIB_TRUE}" && test -z "${COIN_HAS_NETLIB_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_DOXYGEN_TRUE}" && test -z "${COIN_HAS_DOXYGEN_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LATEX_TRUE}" && test -z "${COIN_HAS_LATEX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $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} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by DyLP $as_me 1.10.4, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -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 --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_cs_version="\\ DyLP config.status 1.10.4 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. 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=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; 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 if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "src/DylpStdLib/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/DylpStdLib/Makefile" ;; "src/Dylp/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Dylp/Makefile" ;; "src/OsiDylp/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiDylp/Makefile" ;; "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "doxydoc/doxygen.conf" ) CONFIG_FILES="$CONFIG_FILES doxydoc/doxygen.conf" ;; "dylp.pc" ) CONFIG_FILES="$CONFIG_FILES dylp.pc" ;; "dylp-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES dylp-uninstalled.pc" ;; "osi-dylp.pc" ) CONFIG_FILES="$CONFIG_FILES osi-dylp.pc:src/OsiDylp/osi-dylp.pc.in" ;; "osi-dylp-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-dylp-uninstalled.pc:src/OsiDylp/osi-dylp-uninstalled.pc.in" ;; "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/dylpabsdir.tex" ) CONFIG_FILES="$CONFIG_FILES doc/dylpabsdir.tex" ;; "doc/makefile.dylpdoc" ) CONFIG_FILES="$CONFIG_FILES doc/makefile.dylpdoc" ;; "doc/Figures/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Figures/Makefile" ;; "doc/TexMF/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/TexMF/Makefile" ;; "doc/build_dylpdoc" ) CONFIG_FILES="$CONFIG_FILES doc/build_dylpdoc" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "src/DylpStdLib/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/DylpStdLib/config.h" ;; "src/DylpStdLib/config_dylp.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/DylpStdLib/config_dylp.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; 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 to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@ALWAYS_FALSE_TRUE@,$ALWAYS_FALSE_TRUE,;t t s,@ALWAYS_FALSE_FALSE@,$ALWAYS_FALSE_FALSE,;t t s,@have_svnversion@,$have_svnversion,;t t s,@DYLP_SVN_REV@,$DYLP_SVN_REV,;t t s,@CDEFS@,$CDEFS,;t t s,@ADD_CFLAGS@,$ADD_CFLAGS,;t t s,@DBG_CFLAGS@,$DBG_CFLAGS,;t t s,@OPT_CFLAGS@,$OPT_CFLAGS,;t t s,@sol_cc_compiler@,$sol_cc_compiler,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@COIN_CC_IS_CL_TRUE@,$COIN_CC_IS_CL_TRUE,;t t s,@COIN_CC_IS_CL_FALSE@,$COIN_CC_IS_CL_FALSE,;t t s,@MPICC@,$MPICC,;t t s,@CXXDEFS@,$CXXDEFS,;t t s,@ADD_CXXFLAGS@,$ADD_CXXFLAGS,;t t s,@DBG_CXXFLAGS@,$DBG_CXXFLAGS,;t t s,@OPT_CXXFLAGS@,$OPT_CXXFLAGS,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@COIN_CXX_IS_CL_TRUE@,$COIN_CXX_IS_CL_TRUE,;t t s,@COIN_CXX_IS_CL_FALSE@,$COIN_CXX_IS_CL_FALSE,;t t s,@MPICXX@,$MPICXX,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@mkdir_p@,$mkdir_p,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@AMTAR@,$AMTAR,;t t s,@am__tar@,$am__tar,;t t s,@am__untar@,$am__untar,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@CXXDEPMODE@,$CXXDEPMODE,;t t s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t s,@MAINT@,$MAINT,;t t s,@LIBTOOLM4@,$LIBTOOLM4,;t t s,@have_autoconf@,$have_autoconf,;t t s,@have_automake@,$have_automake,;t t s,@have_svn@,$have_svn,;t t s,@BUILDTOOLSDIR@,$BUILDTOOLSDIR,;t t s,@AUX_DIR@,$AUX_DIR,;t t s,@abs_source_dir@,$abs_source_dir,;t t s,@abs_lib_dir@,$abs_lib_dir,;t t s,@abs_include_dir@,$abs_include_dir,;t t s,@abs_bin_dir@,$abs_bin_dir,;t t s,@HAVE_EXTERNALS_TRUE@,$HAVE_EXTERNALS_TRUE,;t t s,@HAVE_EXTERNALS_FALSE@,$HAVE_EXTERNALS_FALSE,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@ECHO@,$ECHO,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@CPP@,$CPP,;t t s,@CXXCPP@,$CXXCPP,;t t s,@F77@,$F77,;t t s,@FFLAGS@,$FFLAGS,;t t s,@ac_ct_F77@,$ac_ct_F77,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@ac_c_preproc_warn_flag@,$ac_c_preproc_warn_flag,;t t s,@ac_cxx_preproc_warn_flag@,$ac_cxx_preproc_warn_flag,;t t s,@RPATH_FLAGS@,$RPATH_FLAGS,;t t s,@DEPENDENCY_LINKING_TRUE@,$DEPENDENCY_LINKING_TRUE,;t t s,@DEPENDENCY_LINKING_FALSE@,$DEPENDENCY_LINKING_FALSE,;t t s,@LT_LDFLAGS@,$LT_LDFLAGS,;t t s,@PKG_CONFIG@,$PKG_CONFIG,;t t s,@ac_ct_PKG_CONFIG@,$ac_ct_PKG_CONFIG,;t t s,@COIN_HAS_PKGCONFIG_TRUE@,$COIN_HAS_PKGCONFIG_TRUE,;t t s,@COIN_HAS_PKGCONFIG_FALSE@,$COIN_HAS_PKGCONFIG_FALSE,;t t s,@COIN_PKG_CONFIG_PATH@,$COIN_PKG_CONFIG_PATH,;t t s,@COIN_PKG_CONFIG_PATH_UNINSTALLED@,$COIN_PKG_CONFIG_PATH_UNINSTALLED,;t t s,@COINUTILS_LIBS@,$COINUTILS_LIBS,;t t s,@COINUTILS_CFLAGS@,$COINUTILS_CFLAGS,;t t s,@COINUTILS_DATA@,$COINUTILS_DATA,;t t s,@COINUTILS_DEPENDENCIES@,$COINUTILS_DEPENDENCIES,;t t s,@COINUTILS_LIBS_INSTALLED@,$COINUTILS_LIBS_INSTALLED,;t t s,@COINUTILS_CFLAGS_INSTALLED@,$COINUTILS_CFLAGS_INSTALLED,;t t s,@COINUTILS_DATA_INSTALLED@,$COINUTILS_DATA_INSTALLED,;t t s,@OSIDYLPLIB_CFLAGS@,$OSIDYLPLIB_CFLAGS,;t t s,@OSIDYLPLIB_LIBS@,$OSIDYLPLIB_LIBS,;t t s,@OSIDYLPLIB_PCLIBS@,$OSIDYLPLIB_PCLIBS,;t t s,@OSIDYLPLIB_PCREQUIRES@,$OSIDYLPLIB_PCREQUIRES,;t t s,@OSIDYLPLIB_DEPENDENCIES@,$OSIDYLPLIB_DEPENDENCIES,;t t s,@OSIDYLPLIB_CFLAGS_INSTALLED@,$OSIDYLPLIB_CFLAGS_INSTALLED,;t t s,@OSIDYLPLIB_LIBS_INSTALLED@,$OSIDYLPLIB_LIBS_INSTALLED,;t t s,@COIN_HAS_COINUTILS_TRUE@,$COIN_HAS_COINUTILS_TRUE,;t t s,@COIN_HAS_COINUTILS_FALSE@,$COIN_HAS_COINUTILS_FALSE,;t t s,@OSI_LIBS@,$OSI_LIBS,;t t s,@OSI_CFLAGS@,$OSI_CFLAGS,;t t s,@OSI_DATA@,$OSI_DATA,;t t s,@OSI_DEPENDENCIES@,$OSI_DEPENDENCIES,;t t s,@OSI_LIBS_INSTALLED@,$OSI_LIBS_INSTALLED,;t t s,@OSI_CFLAGS_INSTALLED@,$OSI_CFLAGS_INSTALLED,;t t s,@OSI_DATA_INSTALLED@,$OSI_DATA_INSTALLED,;t t s,@COIN_HAS_OSI_TRUE@,$COIN_HAS_OSI_TRUE,;t t s,@COIN_HAS_OSI_FALSE@,$COIN_HAS_OSI_FALSE,;t t s,@OSITESTS_LIBS@,$OSITESTS_LIBS,;t t s,@OSITESTS_CFLAGS@,$OSITESTS_CFLAGS,;t t s,@OSITESTS_DATA@,$OSITESTS_DATA,;t t s,@OSITESTS_DEPENDENCIES@,$OSITESTS_DEPENDENCIES,;t t s,@OSITESTS_LIBS_INSTALLED@,$OSITESTS_LIBS_INSTALLED,;t t s,@OSITESTS_CFLAGS_INSTALLED@,$OSITESTS_CFLAGS_INSTALLED,;t t s,@OSITESTS_DATA_INSTALLED@,$OSITESTS_DATA_INSTALLED,;t t s,@COIN_HAS_OSITESTS_TRUE@,$COIN_HAS_OSITESTS_TRUE,;t t s,@COIN_HAS_OSITESTS_FALSE@,$COIN_HAS_OSITESTS_FALSE,;t t s,@SAMPLE_LIBS@,$SAMPLE_LIBS,;t t s,@SAMPLE_CFLAGS@,$SAMPLE_CFLAGS,;t t s,@SAMPLE_DATA@,$SAMPLE_DATA,;t t s,@SAMPLE_DEPENDENCIES@,$SAMPLE_DEPENDENCIES,;t t s,@SAMPLE_LIBS_INSTALLED@,$SAMPLE_LIBS_INSTALLED,;t t s,@SAMPLE_CFLAGS_INSTALLED@,$SAMPLE_CFLAGS_INSTALLED,;t t s,@SAMPLE_DATA_INSTALLED@,$SAMPLE_DATA_INSTALLED,;t t s,@COIN_HAS_SAMPLE_TRUE@,$COIN_HAS_SAMPLE_TRUE,;t t s,@COIN_HAS_SAMPLE_FALSE@,$COIN_HAS_SAMPLE_FALSE,;t t s,@NETLIB_LIBS@,$NETLIB_LIBS,;t t s,@NETLIB_CFLAGS@,$NETLIB_CFLAGS,;t t s,@NETLIB_DATA@,$NETLIB_DATA,;t t s,@NETLIB_DEPENDENCIES@,$NETLIB_DEPENDENCIES,;t t s,@NETLIB_LIBS_INSTALLED@,$NETLIB_LIBS_INSTALLED,;t t s,@NETLIB_CFLAGS_INSTALLED@,$NETLIB_CFLAGS_INSTALLED,;t t s,@NETLIB_DATA_INSTALLED@,$NETLIB_DATA_INSTALLED,;t t s,@COIN_HAS_NETLIB_TRUE@,$COIN_HAS_NETLIB_TRUE,;t t s,@COIN_HAS_NETLIB_FALSE@,$COIN_HAS_NETLIB_FALSE,;t t s,@DYLPLIB_LIBS@,$DYLPLIB_LIBS,;t t s,@DYLPLIB_PCLIBS@,$DYLPLIB_PCLIBS,;t t s,@DYLPLIB_LIBS_INSTALLED@,$DYLPLIB_LIBS_INSTALLED,;t t s,@DYLP_ERRMSGDIR@,$DYLP_ERRMSGDIR,;t t s,@coin_have_doxygen@,$coin_have_doxygen,;t t s,@coin_have_latex@,$coin_have_latex,;t t s,@coin_doxy_usedot@,$coin_doxy_usedot,;t t s,@coin_doxy_tagname@,$coin_doxy_tagname,;t t s,@coin_doxy_logname@,$coin_doxy_logname,;t t s,@COIN_HAS_DOXYGEN_TRUE@,$COIN_HAS_DOXYGEN_TRUE,;t t s,@COIN_HAS_DOXYGEN_FALSE@,$COIN_HAS_DOXYGEN_FALSE,;t t s,@COIN_HAS_LATEX_TRUE@,$COIN_HAS_LATEX_TRUE,;t t s,@COIN_HAS_LATEX_FALSE@,$COIN_HAS_LATEX_FALSE,;t t s,@coin_doxy_tagfiles@,$coin_doxy_tagfiles,;t t s,@coin_doxy_excludes@,$coin_doxy_excludes,;t t s,@LIBEXT@,$LIBEXT,;t t s,@VPATH_DISTCLEANFILES@,$VPATH_DISTCLEANFILES,;t t s,@ABSBUILDDIR@,$ABSBUILDDIR,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # 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. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;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,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi # Run the commands associated with the file. case $ac_file in doc/build_dylpdoc ) chmod +x doc/build_dylpdoc ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #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. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # 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. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi # Compute $ac_file's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $ac_file | $ac_file:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X$ac_file : 'X\(//\)[^/]' \| \ X$ac_file : 'X\(//\)$' \| \ X$ac_file : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X$ac_file | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'`/stamp-h$_am_stamp_count done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; 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. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || 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"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # 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 || { (exit 1); exit 1; } fi if test x"$coin_vpath_link_files" = x; then : ; else lnkcmd="$coin_link_input_cmd" if test "$lnkcmd" = cp; then { echo "$as_me:$LINENO: Copying data files for VPATH configuration" >&5 echo "$as_me: Copying data files for VPATH configuration" >&6;} else { echo "$as_me:$LINENO: Creating VPATH links for data files" >&5 echo "$as_me: Creating VPATH links for data files" >&6;} fi for file in $coin_vpath_link_files; do dir=`(dirname "./$file") 2>/dev/null || $as_expr X"./$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"./$file" : 'X\(//\)[^/]' \| \ X"./$file" : 'X\(//\)$' \| \ X"./$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"./$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test -d $dir; then : ; else { if $as_mkdir_p; then mkdir -p $dir else as_dir=$dir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dir" >&5 echo "$as_me: error: cannot create directory $dir" >&2;} { (exit 1); exit 1; }; }; } fi rm -f $file $lnkcmd $abs_source_dir/$file $file done fi { echo "$as_me:$LINENO: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&5 echo "$as_me: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&6;} if test x$coin_projectdir = xyes; then { echo "$as_me:$LINENO: Configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Configuration of $PACKAGE_NAME successful" >&6;} else { echo "$as_me:$LINENO: Main configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Main configuration of $PACKAGE_NAME successful" >&6;} fi else { echo "$as_me:$LINENO: No configuration of $PACKAGE_NAME necessary" >&5 echo "$as_me: No configuration of $PACKAGE_NAME necessary" >&6;} fi DyLP-1.10.4/DyLP/Makefile.in0000644000175200017520000010761312506276701013746 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 # Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 ######################################################################## # Documentation installation # ######################################################################## srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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@ @COIN_HAS_OSI_TRUE@am__append_1 = src/OsiDylp # We don't want to compile the test subdirectory, unless the test target is # specified. But we need to list it as subdirectory to make sure that it is # included in the tarball. Similarly, we don't want to attempt to build the # documentation unless specifically requested. @ALWAYS_FALSE@am__append_2 = examples test doc doc/Figures doc/TexMF @COIN_HAS_OSI_TRUE@am__append_3 = osi-dylp.pc DIST_COMMON = README $(am__configure_deps) \ $(srcdir)/BuildTools/Makemain.inc $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/dylp-uninstalled.pc.in \ $(srcdir)/dylp.pc.in $(top_srcdir)/configure \ $(top_srcdir)/doxydoc/doxygen.conf.in \ $(top_srcdir)/examples/Makefile.in \ $(top_srcdir)/src/OsiDylp/osi-dylp-uninstalled.pc.in \ $(top_srcdir)/src/OsiDylp/osi-dylp.pc.in AUTHORS NEWS \ config.guess config.sub depcomp install-sh ltmain.sh missing @HAVE_EXTERNALS_TRUE@am__append_4 = Dependencies @HAVE_EXTERNALS_TRUE@am__append_5 = .Dependencies-stamp subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c_add_to_includes.m4 \ $(top_srcdir)/m4/ac_c_get_sunpro_libs.m4 \ $(top_srcdir)/m4/ac_dylp_equiv_for_cpp_bool.m4 \ $(top_srcdir)/m4/ac_dylp_find_fp_funcs.m4 \ $(top_srcdir)/m4/ac_dylp_fix_cppflags.m4 \ $(top_srcdir)/m4/ac_dylp_options.m4 \ $(top_srcdir)/m4/ac_osidylp_options.m4 \ $(top_srcdir)/acinclude.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 configure.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/DylpStdLib/config.h \ $(top_builddir)/src/DylpStdLib/config_dylp.h CONFIG_CLEAN_FILES = examples/Makefile doxydoc/doxygen.conf dylp.pc \ dylp-uninstalled.pc osi-dylp.pc osi-dylp-uninstalled.pc SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive 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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(pkgconfiglibdir)" pkgconfiglibDATA_INSTALL = $(INSTALL_DATA) DATA = $(pkgconfiglib_DATA) ETAGS = etags CTAGS = ctags DIST_SUBDIRS = src/DylpStdLib src/Dylp src/OsiDylp examples test doc \ doc/Figures doc/TexMF DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_OSITESTS_FALSE = @COIN_HAS_OSITESTS_FALSE@ COIN_HAS_OSITESTS_TRUE = @COIN_HAS_OSITESTS_TRUE@ COIN_HAS_OSI_FALSE = @COIN_HAS_OSI_FALSE@ COIN_HAS_OSI_TRUE = @COIN_HAS_OSI_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ DYLPLIB_LIBS = @DYLPLIB_LIBS@ DYLPLIB_LIBS_INSTALLED = @DYLPLIB_LIBS_INSTALLED@ DYLPLIB_PCLIBS = @DYLPLIB_PCLIBS@ DYLP_ERRMSGDIR = @DYLP_ERRMSGDIR@ DYLP_SVN_REV = @DYLP_SVN_REV@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIDYLPLIB_CFLAGS = @OSIDYLPLIB_CFLAGS@ OSIDYLPLIB_CFLAGS_INSTALLED = @OSIDYLPLIB_CFLAGS_INSTALLED@ OSIDYLPLIB_DEPENDENCIES = @OSIDYLPLIB_DEPENDENCIES@ OSIDYLPLIB_LIBS = @OSIDYLPLIB_LIBS@ OSIDYLPLIB_LIBS_INSTALLED = @OSIDYLPLIB_LIBS_INSTALLED@ OSIDYLPLIB_PCLIBS = @OSIDYLPLIB_PCLIBS@ OSIDYLPLIB_PCREQUIRES = @OSIDYLPLIB_PCREQUIRES@ OSITESTS_CFLAGS = @OSITESTS_CFLAGS@ OSITESTS_CFLAGS_INSTALLED = @OSITESTS_CFLAGS_INSTALLED@ OSITESTS_DATA = @OSITESTS_DATA@ OSITESTS_DATA_INSTALLED = @OSITESTS_DATA_INSTALLED@ OSITESTS_DEPENDENCIES = @OSITESTS_DEPENDENCIES@ OSITESTS_LIBS = @OSITESTS_LIBS@ OSITESTS_LIBS_INSTALLED = @OSITESTS_LIBS_INSTALLED@ OSI_CFLAGS = @OSI_CFLAGS@ OSI_CFLAGS_INSTALLED = @OSI_CFLAGS_INSTALLED@ OSI_DATA = @OSI_DATA@ OSI_DATA_INSTALLED = @OSI_DATA_INSTALLED@ OSI_DEPENDENCIES = @OSI_DEPENDENCIES@ OSI_LIBS = @OSI_LIBS@ OSI_LIBS_INSTALLED = @OSI_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # Subdirectories # ######################################################################## SUBDIRS = src/DylpStdLib src/Dylp $(am__append_1) $(am__append_2) ######################################################################## # Additional files to be included in tarball # ######################################################################## # Here we need include all files that are not mentioned in other Makefiles EXTRA_DIST = AUTHORS LICENSE README NEWS examples/generic.spc \ examples/greenbeb.spc examples/mpsio.c examples/odsi+dylp.cpp \ examples/osi_dylp.c examples/osi+dylp.cpp examples/plain \ examples/README $(am__append_4) ######################################################################## # Installation of the addlibs file # ######################################################################## pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = dylp.pc $(am__append_3) addlibsdir = $(DESTDIR)$(datadir)/coin/doc/DyLP ######################################################################## # Maintainer Stuff # ######################################################################## # So aclocal will find the local macros in the m4 directory ACLOCAL_AMFLAGS = -I m4 # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = $(am__append_5) $(VPATH_DISTCLEANFILES) DocFiles = README AUTHORS LICENSE DocInstallDir = $(datadir)/coin/doc/$(PACKAGE_NAME) COIN_HAS_DOXYGEN = @COIN_HAS_DOXYGEN_TRUE@TRUE COIN_HAS_LATEX = @COIN_HAS_LATEX_TRUE@TRUE all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/BuildTools/Makemain.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ cd $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ 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) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) examples/Makefile: $(top_builddir)/config.status $(top_srcdir)/examples/Makefile.in cd $(top_builddir) && $(SHELL) ./config.status $@ doxydoc/doxygen.conf: $(top_builddir)/config.status $(top_srcdir)/doxydoc/doxygen.conf.in cd $(top_builddir) && $(SHELL) ./config.status $@ dylp.pc: $(top_builddir)/config.status $(srcdir)/dylp.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ dylp-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/dylp-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-dylp.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiDylp/osi-dylp.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-dylp-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiDylp/osi-dylp-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-pkgconfiglibDATA: $(pkgconfiglib_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfiglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfiglibdir)" @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(pkgconfiglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ $(pkgconfiglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done uninstall-pkgconfiglibDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ rm -f "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done # 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. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; 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; \ (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" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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 || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/. $(distdir)/BuildTools $(distdir)/doc $(distdir)/doxydoc $(distdir)/examples $(distdir)/m4 $(distdir)/src/OsiDylp @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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 \ test -d "$(distdir)/$$subdir" \ || $(mkdir_p) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -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 $(SHELL) $(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__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__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) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(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 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { 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)$(pkgconfiglibdir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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 clean-local 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 info: info-recursive info-am: install-data-am: install-pkgconfiglibDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-exec-am: install-exec-local install-info: install-info-recursive install-man: 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 \ maintainer-clean-local mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool \ mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-info-am uninstall-local \ uninstall-pkgconfiglibDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ check-am clean clean-generic clean-libtool clean-local \ clean-recursive ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \ distclean-generic distclean-libtool distclean-local \ distclean-recursive distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-hook install-exec install-exec-am \ install-exec-local install-info install-info-am install-man \ install-pkgconfiglibDATA install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic maintainer-clean-local \ maintainer-clean-recursive mostlyclean mostlyclean-generic \ mostlyclean-libtool mostlyclean-local mostlyclean-recursive \ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-hook uninstall-info-am uninstall-local \ uninstall-pkgconfiglibDATA ######################################################################## # Extra Targets # ######################################################################## test: all @echo "Building and running dylp unit test." @cd test ; $(MAKE) test # Doxygen documentation doxydoc: doxygen doxydoc/doxygen.conf clean-doxydoc: ( cd doxydoc ; rm -rf html *.log *.tag ) # Autotools does a good job on code, but it doesn't deal well with LaTeX # documentation. A few rules to help it along. Note that we don't delete # dylp.ps and dylp.pdf until maintainer-clean; these come prebuilt with the # distribution. doc: @echo "Attempting to build dylp typeset documentation." @cd doc ; ./build_dylpdoc --ps --pdf dylp # Clean will get invoked in environments where it's not possible to build # the documentation, and, quite possibly, where build_dylpdoc will not run. # Execute ':' when build_dylpdoc fails to do nothing (successfully) so that # the clean can keep going. mostlyclean-local: @cd doc ; \ if test -x build_dylpdoc ; then \ ./build_dylpdoc --clean || : ; \ fi clean-local: mostlyclean-local clean-doxydoc # Normally, automake would remove build_dylpdoc, dylpabsdir.tex, and # makefile.dylpdoc as part of distclean, because they're generated during # configuration. But we can't allow that --- distclean-local runs *after* # distclean, and it needs build_dylpdoc and makefile.dylpdoc. Down in # doc/Makefile.am, the variable CONFIG_CLEAN_FILES is cleared to prevent # distclean from removing these files. That means that if ever I generate new # files from configure.ac, they need to be listed here. distclean-local: clean-local @cd doc ; rm -f build_dylpdoc dylpabsdir.tex makefile.dylpdoc @cd doc ; rm -f Makefile Figures/Makefile TexMF/Makefile maintainer-clean-local: distclean-local @cd doc ; rm -f dylp.pdf dylp.ps .PHONY: doc doxydoc mostlyclean-local clean-local distclean-local \ maintainer-clean-local install-data-hook: @$(mkdir_p) "$(addlibsdir)" @COIN_HAS_PKGCONFIG_TRUE@ PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@:$(DESTDIR)$(pkgconfiglibdir) \ @COIN_HAS_PKGCONFIG_TRUE@ $(PKG_CONFIG) --libs dylp > $(addlibsdir)/dylp_addlibs.txt @COIN_CXX_IS_CL_TRUE@@COIN_HAS_PKGCONFIG_FALSE@ echo "-libpath:`$(CYGPATH_W) @abs_lib_dir@` libDyLP.lib @DYLPLIB_LIBS_INSTALLED@" > $(addlibsdir)/dylp_addlibs.txt @COIN_CXX_IS_CL_FALSE@@COIN_HAS_PKGCONFIG_FALSE@ echo -L@abs_lib_dir@ -lDyLP @DYLPLIB_LIBS_INSTALLED@ > $(addlibsdir)/dylp_addlibs.txt uninstall-hook: rm -f $(addlibsdir)/dylp_addlibs.txt install-exec-local: install-doc uninstall-local: uninstall-doc doxygen-docs: if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ doxygen doxydoc/doxygen.conf;\ fi;\ fi pdf-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/latex"; then \ if test "$(COIN_HAS_LATEX)" = TRUE; then \ cd doxydoc/latex;\ $(MAKE) pdf;\ cd -;\ fi;\ fi;\ fi clean-doxygen-docs: if test -d "doxydoc/"; then \ cd doxydoc ;\ rm -rf html latex *.log *.tag;\ fi install-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc"; \ $(INSTALL_DATA) @coin_doxy_tagname@ "$(DESTDIR)$(DocInstallDir)/@coin_doxy_tagname@";\ if test -f "doxydoc/latex/refman.pdf"; then \ $(INSTALL_DATA) doxydoc/latex/refman.pdf "$(DESTDIR)$(DocInstallDir)";\ fi;\ if test -d "doxydoc/html"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/search/" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc/search/"; \ $(INSTALL_DATA) doxydoc/html/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc";\ $(INSTALL_DATA) doxydoc/html/search/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc/search";\ fi;\ fi;\ fi uninstall-doxygen-docs: if test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/"; then \ rm -rf "$(DESTDIR)$(DocInstallDir)/doxydoc/"; \ fi if test -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; then \ rm -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; \ fi all-doxygen-docs: for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) doxygen-docs) \ fi ; \ done ; clean-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) clean-doxygen-docs) \ fi ; \ done ; install-all-doxygen-docs: all-doxygen-docs for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) install-doxygen-docs) \ fi ; \ done ; uninstall-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) uninstall-doxygen-docs) \ fi ; \ done ; install-doc: $(DocFiles) test -z "$(DocInstallDir)" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)" for file in $(DocFiles); do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ if test -f "$$dir$$file"; then $(INSTALL_DATA) "$$dir$$file" "$(DESTDIR)$(DocInstallDir)/$$file"; fi; \ done uninstall-doc: for file in $(DocFiles); do \ rm -f "$(DESTDIR)$(DocInstallDir)/$$file"; \ done ######################################################################## # Maintainer Stuff # ######################################################################## # Make sure acinclude is using most recent coin.m4 @MAINTAINER_MODE_TRUE@$(srcdir)/acinclude.m4: $(BUILDTOOLSDIR)/coin.m4 @MAINTAINER_MODE_TRUE@ cat $(LIBTOOLM4) $< > $@ # Make sure the autotools scripts are up to date @MAINTAINER_MODE_TRUE@$(AUX_DIR)/install-sh: $(BUILDTOOLSDIR)/install-sh @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/missing: $(BUILDTOOLSDIR)/missing @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.guess: $(BUILDTOOLSDIR)/config.guess @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.sub: $(BUILDTOOLSDIR)/config.sub @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/depcomp: $(BUILDTOOLSDIR)/depcomp @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/ltmain.sh: $(BUILDTOOLSDIR)/ltmain.sh @MAINTAINER_MODE_TRUE@ cp $< $@ # Take care of updating externals (if Dependencies file exists) @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@$(top_builddir)/Makefile: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@.Dependencies-stamp: $(srcdir)/Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); BuildTools/set_externals Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ touch .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@update-externals: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); svn update .PHONY: install-doc uninstall-doc update-externals # 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: DyLP-1.10.4/DyLP/LICENSE0000644000175200017520000002622711507440660012704 0ustar coincoinEclipse 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. DyLP-1.10.4/DyLP/AUTHORS0000644000175200017520000000044211403572110012725 0ustar coincoin Lou Hafer (lou@cs.sfu.ca) is the author and maintainer of DyLP. The basis inverse code in the files glp*.[ch] was written by Andrew Makhorin and comes from the GLPK package. It is used by kind permission of the author. Much of the original OsiDylp code was written by Stephen Tse. DyLP-1.10.4/DyLP/depcomp0000755000175200017520000003710011503442760013243 0ustar coincoin#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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 outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac 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" # 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 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. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## 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). ## - 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 -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## 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. tr ' ' ' ' < "$tmpdepfile" | ## 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. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -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 -eq 0; then : else 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 ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; 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. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else 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" ;; 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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in 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.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #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 $1 != '--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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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 $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac 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. -*|$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" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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 $1 != '--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, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; 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-end: "$" # End: DyLP-1.10.4/DyLP/src/0000755000175200017520000000000013434203622012451 5ustar coincoinDyLP-1.10.4/DyLP/src/Dylp/0000755000175200017520000000000013434203622013361 5ustar coincoinDyLP-1.10.4/DyLP/src/Dylp/glplib3.c0000644000175200017520000000752711507440660015100 0ustar coincoin/* glplib3.c */ /*---------------------------------------------------------------------- -- Copyright (C) 2000, 2001, 2002 Andrew Makhorin , -- Department for Applied Informatics, Moscow Aviation -- Institute, Moscow, Russia. All rights reserved. -- -- This file is a part of GLPK (GNU Linear Programming Kit). -- -- Licensed under the Eclipse Public License (EPL) by permission of the -- author for inclusion in the DyLP LP distribution. ----------------------------------------------------------------------*/ #ifndef UNUSED # if defined(_GNU_SOURCE) || defined(__GNUC__) # define UNUSED __attribute__((unused)) # else # define UNUSED # endif #endif static char sccsid[] UNUSED = "@(#)glplib3.c 1.2 09/25/04" ; static char svnid[] UNUSED = "$Id: glplib3.c 407 2010-12-31 20:48:48Z lou $" ; #include #include #include #ifndef __CYGWIN__ /* With --pedantic-errors, cygwin won't compile its own signal.h, which is included from time.h */ # include #endif #include "glplib.h" /*---------------------------------------------------------------------- -- print - print informative message. -- -- *Synopsis* -- -- #include "glplib.h" -- void print(char *fmt, ...); -- -- *Description* -- -- The routine print prints an informative message specified by the -- format control string fmt and optional parameter list. */ void print(const char *fmt, ...) { va_list arg; /* print an informative message */ va_start(arg, fmt); vfprintf(stdout, fmt, arg); va_end(arg); fputc('\n', stdout); /* return to the calling program */ return; } /*---------------------------------------------------------------------- -- fault - print error message and terminate program execution. -- -- *Synopsis* -- -- #include "glplib.h" -- void fault(char *fmt, ...); -- -- *Description* -- -- The routine fault prints an error message specified by the format -- control string fmt and optional parameter list, and then abnormally -- terminates execution of the program. -- -- *Returns* -- -- The routine fault never returns. */ void fault(const char *fmt, ...) { va_list arg; /* print an error message */ va_start(arg, fmt); vfprintf(stdout, fmt, arg); va_end(arg); fputc('\n', stdout); /* deinitialize library environment */ free_lib_env(); /* terminate program execution */ #if 0 abort(); #else exit(3); #endif /* no return */ } /*---------------------------------------------------------------------- -- insist - check for logical condition. -- -- *Synopsis* -- -- #include "glplib.h" -- void insist(int expr); -- -- *Description* -- -- The routine insist (implemented as a macro) checks for a logical -- condition specified by the parameter expr. If the condition is false -- (i.e. expr is zero), the routine prints an appropriate error message -- and abnormally terminates the program. -- -- This routine is a replacement of the standard function assert. */ void _insist(const char *expr, const char *file, int line) { /* print an error message */ fputc('\n', stdout); fprintf(stdout, "Assertion failed: %s, file %s, line %d\n", expr, file, line); /* deinitialize library environment */ free_lib_env(); /* terminate program execution */ #if 0 abort(); #else exit(3); #endif /* no return */ } /*---------------------------------------------------------------------- -- watch - take reading of stop-watch. -- -- *Synopsis* -- -- #include "glplib.h" -- double watch(void); -- -- *Returns* -- -- The routine watch returns the processor time in seconds. */ #ifndef __CYGWIN__ /* As mentioned above, we get in trouble if we include time.h, so this function has to go. */ double watch(void) { return (double)clock() / (double)CLOCKS_PER_SEC; } #endif /* eof */ DyLP-1.10.4/DyLP/src/Dylp/glplib4.c0000644000175200017520000001064411507440660015073 0ustar coincoin/* glplib4.c */ /*---------------------------------------------------------------------- -- Copyright (C) 2000, 2001, 2002 Andrew Makhorin , -- Department for Applied Informatics, Moscow Aviation -- Institute, Moscow, Russia. All rights reserved. -- -- This file is a part of GLPK (GNU Linear Programming Kit). -- -- Licensed under the Eclipse Public License (EPL) by permission of the -- author for inclusion in the DyLP LP distribution. ----------------------------------------------------------------------*/ #ifndef UNUSED # if defined(_GNU_SOURCE) || defined(__GNUC__) # define UNUSED __attribute__((unused)) # else # define UNUSED # endif #endif static char sccsid[] UNUSED = "@(#)glplib4.c 1.2 09/25/04" ; static char svnid[] UNUSED = "$Id: glplib4.c 407 2010-12-31 20:48:48Z lou $" ; #include #include #include #include "glplib.h" #define MEM_FLAG 0x20101960 /* a value used as memory block descriptor flag (may be changed if necessary) */ /*---------------------------------------------------------------------- -- umalloc - allocate memory block. -- -- *Synopsis* -- -- #include "glpset.h" -- void *umalloc(int size); -- -- *Description* -- -- The routine umalloc allocates a memory block of size bytes long. -- -- Note that being allocated the memory block contains arbitrary data -- (not binary zeros). -- -- *Returns* -- -- The routine umalloc returns a pointer to the allocated memory block. -- To free this block the routine ufree (not free!) should be used. */ void *umalloc(int size) { ENV *env = get_env_ptr(); MEM *desc; int size_of_desc = align_datasize(sizeof(MEM)); if (size < 1) fault("umalloc: invalid size"); if (size > INT_MAX - size_of_desc) fault("umalloc: size too big"); size += size_of_desc; if (size > env->mem_limit - env->mem_total) fault("umalloc: no memory available"); desc = malloc(size); if (desc == NULL) fault("umalloc: malloc failed"); #if 1 memset(desc, '?', size); #endif desc->size = size; desc->flag = MEM_FLAG; desc->prev = NULL; desc->next = env->mem_ptr; if (desc->next != NULL) desc->next->prev = desc; env->mem_ptr = desc; env->mem_total += size; if (env->mem_tpeak < env->mem_total) env->mem_tpeak = env->mem_total; env->mem_count++; if (env->mem_cpeak < env->mem_count) env->mem_cpeak = env->mem_count; return (void *)((char *)desc + size_of_desc); } /*---------------------------------------------------------------------- -- ucalloc - allocate memory block. -- -- *Synopsis* -- -- #include "glpset.h" -- void *ucalloc(int nmemb, int size); -- -- *Description* -- -- The routine ucalloc allocates a memory block of (nmemb*size) bytes -- long. -- -- Note that being allocated the memory block contains arbitrary data -- (not binary zeros). -- -- *Returns* -- -- The routine ucalloc returns a pointer to the allocated memory block. -- To free this block the routine ufree (not free!) should be used. */ void *ucalloc(int nmemb, int size) { if (nmemb < 1) fault("ucalloc: invalid nmemb"); if (size < 1) fault("ucalloc: invalid size"); if (nmemb > INT_MAX / size) fault("ucalloc: array too big"); return umalloc(nmemb * size); } /*---------------------------------------------------------------------- -- ufree - free memory block. -- -- *Synopsis* -- -- #include "glpset.h" -- void ufree(void *ptr); -- -- *Description* -- -- The routine ufree frees the memory block pointed to by ptr and which -- was previuosly allocated by the routine umalloc or ucalloc. */ void ufree(void *ptr) { ENV *env = get_env_ptr(); MEM *desc; int size_of_desc = align_datasize(sizeof(MEM)); if (ptr == NULL) fault("ufree: null pointer"); desc = (void *)((char *)ptr - size_of_desc); if (desc->flag != MEM_FLAG) fault("ufree: invalid pointer"); if (env->mem_total < desc->size || env->mem_count == 0) fault("ufree: memory allocation error"); if (desc->prev == NULL) env->mem_ptr = desc->next; else desc->prev->next = desc->next; if (desc->next == NULL) ; else desc->next->prev = desc->prev; env->mem_total -= desc->size; env->mem_count--; memset(desc, '?', size_of_desc); free(desc); return; } /* eof */ DyLP-1.10.4/DyLP/src/Dylp/glpluf.h0000644000175200017520000003713011507440660015033 0ustar coincoin/* glpluf.h */ /*---------------------------------------------------------------------- -- Copyright (C) 2000, 2001, 2002 Andrew Makhorin , -- Department for Applied Informatics, Moscow Aviation -- Institute, Moscow, Russia. All rights reserved. -- -- This file is a part of GLPK (GNU Linear Programming Kit). -- -- Licensed under the Eclipse Public License (EPL) by permission of the -- author for inclusion in the DyLP LP distribution. ----------------------------------------------------------------------*/ /* @(#)glpluf.h 1.1 10/18/02 svn/cvs: $Id: glpluf.h 407 2010-12-31 20:48:48Z lou $ */ #ifndef _GLPLUF_H #define _GLPLUF_H #define luf_create dy_glp_luf_create #define luf_defrag_sva dy_glp_luf_defrag_sva #define luf_enlarge_row dy_glp_luf_enlarge_row #define luf_enlarge_col dy_glp_luf_enlarge_col #define luf_alloc_wa dy_glp_luf_alloc_wa #define luf_free_wa dy_glp_luf_free_wa #define luf_decomp dy_glp_luf_decomp #define luf_f_solve dy_glp_luf_f_solve #define luf_v_solve dy_glp_luf_v_solve #define luf_solve dy_glp_luf_solve #define luf_delete dy_glp_luf_delete /*---------------------------------------------------------------------- -- The structure LUF defines LU-factorization of a square matrix A, -- which is the following quartet: -- -- [A] = (F, V, P, Q), (1) -- -- where F and V are such matrices that -- -- A = F * V, (2) -- -- and P and Q are such permutation matrices that the matrix -- -- L = P * F * inv(P) (3) -- -- is lower triangular with unity diagonal, and the matrix -- -- U = P * V * Q (4) -- -- is upper triangular. All the matrices have the order n. -- -- The matrices F and V are stored in row/column-wise sparse format as -- row and column linked lists of non-zero elements. Unity elements on -- the main diagonal of the matrix F are not stored. Pivot elements of -- the matrix V (that correspond to diagonal elements of the matrix U) -- are also missing from the row and column lists and stored separately -- in an ordinary array. -- -- The permutation matrices P and Q are stored as ordinary arrays using -- both row- and column-like formats. -- -- The matrices L and U being completely defined by the matrices F, V, -- P, and Q are not stored explicitly. -- -- It can easily be shown that the factorization (1)-(3) is a version of -- LU-factorization. Indeed, from (3) and (4) it follows that -- -- F = inv(P) * L * P, -- -- V = inv(P) * U * inv(Q), -- -- and substitution into (2) gives -- -- A = F * V = inv(P) * L * U * inv(Q). -- -- For more details see the program documentation. */ typedef struct LUF LUF; typedef struct LUF_WA LUF_WA; struct LUF { /* LU-factorization of a square matrix */ int n; /* order of the matrices A, F, V, P, Q */ int valid; /* if this flag is not set, the factorization is invalid */ /*--------------------------------------------------------------*/ /* matrix F in row-wise format */ int *fr_ptr; /* int fr_ptr[1+n]; */ /* fr_ptr[0] is not used; fr_ptr[i], i = 1, ..., n, is a pointer to the first element of the i-th row in the sparse vector area */ int *fr_len; /* int fr_len[1+n]; */ /* fr_len[0] is not used; fr_len[i], i = 1, ..., n, is number of elements in the i-th row (except unity diagonal element) */ /*--------------------------------------------------------------*/ /* matrix F in column-wise format */ int *fc_ptr; /* int fc_ptr[1+n]; */ /* fc_ptr[0] is not used; fc_ptr[j], j = 1, ..., n, is a pointer to the first element of the j-th column in the sparse vector area */ int *fc_len; /* int fc_len[1+n]; */ /* fc_len[0] is not used; fc_len[j], j = 1, ..., n, is number of elements in the j-th column (except unity diagonal element) */ /*--------------------------------------------------------------*/ /* matrix V in row-wise format */ int *vr_ptr; /* int vr_ptr[1+n]; */ /* vr_ptr[0] is not used; vr_ptr[i], i = 1, ..., n, is a pointer to the first element of the i-th row in the sparse vector area */ int *vr_len; /* int vr_len[1+n]; */ /* vr_len[0] is not used; vr_len[i], i = 1, ..., n, is number of elements in the i-th row (except pivot element) */ int *vr_cap; /* int vr_cap[1+n]; */ /* vr_cap[0] is not used; vr_cap[i], i = 1, ..., n, is capacity of the i-th row, i.e. maximal number of elements, which can be stored there without relocating the row, vr_cap[i] >= vr_len[i] */ double *vr_piv; /* double vr_piv[1+n]; */ /* vr_piv[0] is not used; vr_piv[p], p = 1, ..., n, is the pivot element v[p,q], which corresponds to a diagonal element of the matrix U = P*V*Q */ /*--------------------------------------------------------------*/ /* matrix V in column-wise format */ int *vc_ptr; /* int vc_ptr[1+n]; */ /* vc_ptr[0] is not used; vc_ptr[j], j = 1, ..., n, is a pointer to the first element of the j-th column in the sparse vector area */ int *vc_len; /* int vc_len[1+n]; */ /* vc_len[0] is not used; vc_len[j], j = 1, ..., n, is number of elements in the j-th column (except pivot element) */ int *vc_cap; /* int vc_cap[1+n]; */ /* vc_cap[0] is not used; vc_cap[j], j = 1, ..., n, is capacity of the j-th column, i.e. maximal number of elements, which can be stored there without relocating the column, vc_cap[j] >= vc_len[j] */ /*--------------------------------------------------------------*/ /* matrix P */ int *pp_row; /* int pp_row[1+n]; */ /* pp_row[0] is not used; pp_row[i] = j means that p[i,j] = 1 */ int *pp_col; /* int pp_col[1+n]; */ /* pp_col[0] is not used; pp_col[j] = i means that p[i,j] = 1 */ /* if i-th row or column of the matrix F corresponds to i'-th row or column of the matrix L = P*F*inv(P), or if i-th row of the matrix V corresponds to i'-th row of the matrix U = P*V*Q, then pp_row[i'] = i and pp_col[i] = i' */ /*--------------------------------------------------------------*/ /* matrix Q */ int *qq_row; /* int qq_row[1+n]; */ /* qq_row[0] is not used; qq_row[i] = j means that q[i,j] = 1 */ int *qq_col; /* int qq_col[1+n]; */ /* qq_col[0] is not used; qq_col[j] = i means that q[i,j] = 1 */ /* if j-th column of the matrix V corresponds to j'-th column of the matrix U = P*V*Q, then qq_row[j] = j' and qq_col[j'] = j */ /*--------------------------------------------------------------*/ /* sparse vector area (SVA) is a set of locations intended to store sparse vectors that represent rows and columns of the matrices F and V; each location is the doublet (ndx, val), where ndx is an index and val is a numerical value of a sparse vector element; in the whole each sparse vector is a set of adjacent locations defined by a pointer to the first element and number of elements; these pointer and number are stored in the corresponding matrix data structure (see above); the left part of SVA is used to store rows and columns of the matrix V, the right part is used to store rows and columns of the matrix F; between the left and right parts there is the middle part, locations of which are free */ int sv_size; /* total size of the sparse vector area, in locations; locations are numbered by integers 1, 2, ..., sv_size, and location with the number 0 is not used; if it is necessary, the size of SVA is automatically increased */ int sv_beg, sv_end; /* SVA partitioning pointers: locations 1, ..., sv_beg-1 belong to the left part; locations sv_beg, ..., sv_end-1 belong to the middle part; locations sv_end, ..., sv_size belong to the right part; number of free locations, i.e. locations that belong to the middle part, is (sv_end - sv_beg) */ int *sv_ndx; /* int sv_ndx[1+sv_size]; */ /* sv_ndx[0] is not used; sv_ndx[k], 1 <= k <= sv_size, is the index field of the k-th location */ double *sv_val; /* double sv_val[1+sv_size]; */ /* sv_val[0] is not used; sv_val[k], 1 <= k <= sv_size, is the value field of the k-th location */ /* in order to efficiently defragment the left part of SVA there is a double linked list of rows and columns of the matrix V, where rows have numbers 1, ..., n, and columns have numbers n+1, ..., n+n, due to that each row and column can be uniquely identified by one integer; in this list rows and columns are ordered by ascending their pointers vr_ptr[i] and vc_ptr[j] */ int sv_head; /* the number of the leftmost row/column */ int sv_tail; /* the number of the rightmost row/column */ int *sv_prev; /* int sv_prev[1+n+n]; */ /* sv_prev[k], k = 1, ..., n+n, is the number of a row/column, which precedes the k-th row/column */ int *sv_next; /* int sv_next[1+n+n]; */ /* sv_next[k], k = 1, ..., n+n, is the number of a row/column, which succedes the k-th row/column */ /*--------------------------------------------------------------*/ /* working arrays */ int *flag; /* int flag[1+n]; */ /* integer working array */ double *work; /* double work[1+n]; */ /* floating-point working array */ /*--------------------------------------------------------------*/ /* control parameters */ int new_sva; /* new required size of the sparse vector area, in locations; set automatically by the factorizing routine */ double piv_tol; /* threshold pivoting tolerance, 0 < piv_tol < 1; element v[i,j] of the active submatrix fits to be pivot if it satisfies to the stability condition |v[i,j]| >= piv_tol * max|v[i,*]|, i.e. if this element is not very small (in absolute value) among other elements in the same row; decreasing this parameter involves better sparsity at the expense of numerical accuracy and vice versa */ int piv_lim; /* maximal allowable number of pivot candidates to be considered; if piv_lim pivot candidates have been considered, the pivoting routine terminates the search with the best candidate found */ int suhl; /* if this flag is set, the pivoting routine applies a heuristic rule proposed by Uwe Suhl: if a column of the active submatrix has no eligible pivot candidates (i.e. all its elements don't satisfy to the stability condition), the routine excludes such column from the futher consideration until it becomes a column singleton; in many cases this reduces a time needed for pivot searching */ double eps_tol; /* epsilon tolerance; each element of the matrix V with absolute value less than eps_tol is replaced by exact zero */ double max_gro; /* maximal allowable growth of elements of the matrix V during all the factorization process; if on some elimination step the ratio big_v / max_a (see below) becomes greater than max_gro, the matrix A is considered as ill-conditioned (it is assumed that the tolerance piv_tol has an adequate value) */ /*--------------------------------------------------------------*/ /* some statistics */ int nnz_a; /* number of non-zeros in the matrix A */ int nnz_f; /* number of non-zeros in the matrix F (except diagonal elements, which are always equal to one and therefore not stored) */ int nnz_v; /* number of non-zeros in the matrix V (except pivot elements, which correspond to diagonal elements of the matrix U = P*V*Q and which are stored separately in the array vr_piv) */ double max_a; /* largest of absolute values of elements of the matrix A */ double big_v; /* estimated largest of absolute values of elements appeared in the active submatrix during all the factorization process */ int rank; /* estimated rank of the matrix A */ }; struct LUF_WA { /* working area (used only during factorization) */ double *rs_max; /* double rs_max[1+n]; */ /* rs_max[0] is not used; rs_max[i], 1 <= i <= n, is used only if the i-th row of the matrix V belongs to the active submatrix and is the largest of absolute values of elements in this row; rs_max[i] < 0.0 means that the largest value is not known yet and should be determined by the pivoting routine */ /*--------------------------------------------------------------*/ /* in order to efficiently implement Markowitz strategy and Duff search technique there are two families {R[0], R[1], ..., R[n]} and {C[0], C[1], ..., C[n]}; member R[k] is a set of active rows of the matrix V, which have k non-zeros; similarly, member C[k] is a set of active columns of the matrix V, which have k non-zeros (in the active submatrix); each set R[k] and C[k] is implemented as a separate doubly linked list */ int *rs_head; /* int rs_head[1+n]; */ /* rs_head[k], 0 <= k <= n, is number of the first active row, which has k non-zeros */ int *rs_prev; /* int rs_prev[1+n]; */ /* rs_prev[0] is not used; rs_prev[i], 1 <= i <= n, is number of the previous active row, which has the same number of non-zeros as the i-th row */ int *rs_next; /* int rs_next[1+n]; */ /* rs_next[0] is not used; rs_next[i], 1 <= i <= n, is number of the next active row, which has the same number of non-zeros as the i-th row */ int *cs_head; /* int cs_head[1+n]; */ /* cs_head[k], 0 <= k <= n, is number of the first active column, which has k non-zeros (in the active submatrix) */ int *cs_prev; /* int cs_prev[1+n]; */ /* cs_prev[0] is not used; cs_prev[j], 1 <= j <= n, is number of the previous active column, which has the same number of non-zeros (in the active submatrix) as the j-th column */ int *cs_next; /* int cs_next[1+n]; */ /* cs_next[0] is not used; cs_next[j], 1 <= j <= n, is number of the next active column, which has the same number of non-zeros (in the active submatrix) as the j-th column */ }; LUF *luf_create(int n, int sv_size); /* create LU-factorization */ void luf_defrag_sva(LUF *luf); /* defragment the sparse vector area */ int luf_enlarge_row(LUF *luf, int i, int cap); /* enlarge row capacity */ int luf_enlarge_col(LUF *luf, int j, int cap); /* enlarge column capacity */ LUF_WA *luf_alloc_wa(LUF *luf); /* pre-allocate working area */ void luf_free_wa(LUF_WA *wa); /* free working area */ int luf_decomp(LUF *luf, void *info, int (*col)(void *info, int j, int rn[], double aj[]), LUF_WA *wa); /* compute LU-factorization */ void luf_f_solve(LUF *luf, int tr, double x[]); /* solve system F*x = b or F'*x = b */ void luf_v_solve(LUF *luf, int tr, double x[]); /* solve system V*x = b or V'*x = b */ void luf_solve(LUF *luf, int tr, double x[]); /* solve system A*x = b or A'*x = b */ void luf_delete(LUF *luf); /* delete LU-factorization */ #endif /* eof */ DyLP-1.10.4/DyLP/src/Dylp/dylp_io.c0000644000175200017520000003707711507440660015206 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2010 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains i/o routines related to the dylp subroutine library. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dylp_io.c 4.5 11/06/04" ; static char svnid[] UNUSED = "$Id: dylp_io.c 407 2010-12-31 20:48:48Z lou $" ; /* Output control variables dy_logchn: log file dy_gtxecho: true if generated text should also be echoed to stdout Mostly these are simply passed as parameters to dylib_io routines that generate output. Dylib_io ensures that output goes to the log file and/or stdout as required. */ ioid dy_logchn = IOID_NOSTRM ; bool dy_gtxecho = FALSE ; /* And a pair of routines whose sole purpose in life is to allow dy_logchn and dy_gtxecho to remain hidden inside of libdylp. */ void dy_setlogchn (ioid chn) { dy_logchn = chn ; } void dy_setgtxecho (bool echo) { dy_gtxecho = echo ; } const char *dy_prtlpret (lpret_enum lpret) /* Generates a print string corresponding to the dylp return codes. Parameters: lpret: lp return code Returns: print string */ { const char *rtnnme = "dy_prtlpret" ; switch (lpret) { case lpINV: { return ("invalid") ; } case lpOPTIMAL: { return ("optimal") ; } case lpUNBOUNDED: { return ("unbounded") ; } case lpSWING: { return ("pseudo-unbounded") ; } case lpINFEAS: { return ("infeasible") ; } case lpACCCHK: { return ("accuracy check") ; } case lpSTALLED: { return ("stalled") ; } case lpITERLIM: { return ("iteration limit exceeded") ; } case lpNOSPACE: { return ("insufficient memory") ; } case lpLOSTFEAS: { return ("lost feasibility") ; } case lpPUNT: { return ("punt!") ; } case lpFORCEDUAL: { return ("force primal -> dual") ; } case lpFORCEPRIMAL: { return ("force dual -> primal") ; } case lpFORCEFULL: { return ("force full activation") ; } case lpFATAL: { return ("unspecified fatal error") ; } default: { errmsg(5,rtnnme,"lpret",(int) lpret) ; return ("nonsense") ; } } } char *dy_prtvstat (flags status) /* This routine returns a print string corresponding to the status code passed as a parameter. Parameter: status: variable status code Returns: print string */ { flags mystatus ; static char buffer[100] ; const char *rtnnme = "dy_prtvstat" ; /* If we've been passed a completely empty status, return invalid. But we could be asked to print just a qualifier, so be prepared for mystatus to be vstatINV once the qualifiers are cleared. */ buffer[0] = '\0' ; if (status != vstatINV) { mystatus = status ; clrflg(mystatus,vstatQUALS) ; } else { strcpy(buffer,"INV") ; return (buffer) ; } if (mystatus != vstatINV) switch (mystatus) { case vstatBFX: { strcpy(buffer,"BFX") ; break ; } case vstatBUUB: { strcpy(buffer,"BUUB") ; break ; } case vstatBUB: { strcpy(buffer,"BUB") ; break ; } case vstatB: { strcpy(buffer,"B") ; break ; } case vstatBLB: { strcpy(buffer,"BLB") ; break ; } case vstatBLLB: { strcpy(buffer,"BLLB") ; break ; } case vstatBFR: { strcpy(buffer,"BFR") ; break ; } case vstatNBFX: { strcpy(buffer,"NBFX") ; break ; } case vstatNBUB: { strcpy(buffer,"NBUB") ; break ; } case vstatNBLB: { strcpy(buffer,"NBLB") ; break ; } case vstatNBFR: { strcpy(buffer,"NBFR") ; break ; } case vstatSB: { strcpy(buffer,"SB") ; break ; } case vstatINV: { strcpy(buffer,"INV") ; break ; } default: { errmsg(6,rtnnme,"status",(int) status) ; strcpy(buffer,"NONSENSE") ; return (buffer) ; } } /* Add any qualifiers. */ if (status != mystatus) { strcat(buffer,"(") ; if (flgon(status,vstatNOPIVOT)) strcat(buffer,"v") ; if (flgon(status,vstatNOPER)) strcat(buffer,"p") ; if (flgon(status,vstatNOLOAD)) strcat(buffer,"l") ; strcat(buffer,")") ; } return (buffer) ; } const char *dy_prtlpphase (dyphase_enum phase, bool abbrv) /* This routine returns a print representation of the lp phase passed as a parameter. Parameter: phase: an lp phase code. abbrv: TRUE to get a two-letter abbreviation, FALSE for the long version Returns: print string */ { const char *rtnnme = "dy_prtlpphase" ; switch (phase) { case dyINIT: { return ((abbrv == TRUE)?"IN":"initialisation") ; } case dyPURGEVAR: { return ((abbrv == TRUE)?"VD":"variable deactivation") ; } case dyGENVAR: { return ((abbrv == TRUE)?"VG":"variable generation") ; } case dyADDVAR: { return ((abbrv == TRUE)?"VA":"variable activation") ; } case dyPRIMAL1: { return ((abbrv == TRUE)?"P1":"primal phase I") ; } case dyPRIMAL2: { return ((abbrv == TRUE)?"P2":"primal phase II") ; } case dyPURGECON: { return ((abbrv == TRUE)?"CD":"constraint deactivation") ; } case dyGENCON: { return ((abbrv == TRUE)?"CG":"constraint generation") ; } case dyADDCON: { return ((abbrv == TRUE)?"CA":"constraint activation") ; } case dyDUAL: { return ((abbrv == TRUE)?"D2":"dual") ; } case dyFORCEDUAL: { return ((abbrv == TRUE)?"FD":"force dual") ; } case dyFORCEPRIMAL: { return ((abbrv == TRUE)?"FP":"force primal") ; } case dyFORCEFULL: { return ((abbrv == TRUE)?"FF":"force full") ; } case dyDONE: { return ((abbrv == TRUE)?"DN":"done") ; } case dyINV: { return ((abbrv == TRUE)?"NV":"invalid") ; } default: { errmsg(6,rtnnme,"lp phase",(int) phase) ; return ((abbrv == TRUE)?"??":"nonsense") ; } } } const char *dy_prtdyret (dyret_enum retcode) /* This routine returns a print representation of the dyret_enum code passed as a parameter. Parameter: retcode: a dyret_enum return code Returns: print string */ { const char *rtnnme = "dy_prtdyret" ; switch (retcode) { case dyrOK: { return ("ok") ; } case dyrOPTIMAL: { return ("optimal") ; } case dyrUNBOUND: { return ("unbounded") ; } case dyrSWING: { return ("pseudo-unbounded") ; } case dyrINFEAS: { return ("infeasible") ; } case dyrREQCHK: { return ("request accuracy check") ; } case dyrACCCHK: { return ("accuracy check failure") ; } case dyrLOSTPFEAS: { return ("loss of primal feasibility") ; } case dyrLOSTDFEAS: { return ("loss of dual feasibility") ; } case dyrDEGEN: { return ("degenerate pivot") ; } case dyrRESELECT: { if (dy_lp->phase == dyDUAL) return ("reselect leaving variable") ; else return ("reselect entering variable") ; } case dyrMADPIV: { return ("numerically unstable pivot") ; } case dyrPUNT: { return ("punt!") ; } case dyrPATCHED: { return ("basis patched") ; } case dyrSINGULAR: { return ("basis singular") ; } case dyrNUMERIC: { return ("ill-conditioned basis") ; } case dyrBSPACE: { return ("no space for basis") ; } case dyrSTALLED: { return ("stalled") ; } case dyrITERLIM: { return ("iteration limit") ; } case dyrFATAL: { return ("fatal error") ; } case dyINV: { return ("invalid") ; } default: { errmsg(6,rtnnme,"dyret_enum code",(int) retcode) ; return ("nonsense") ; } } } void dy_logpivot (dyret_enum result, int xjndx, int indir, double cbarj, int xindx, int outdir, double abarij, double delta) /* This routine prints a standard log line for a pivot. Parameters: result: the return code resulting from attempting the pivot xjndx: index of the entering variable x indir: direction of movement of x (1 to increase, -1 to decrease) cbarj: reduced cost cbar for the entering variable xindx: index of the leaving variable x outdir: direction of motion of x abarij: pivot element abar delta: amount of change in x Returns: undefined */ { bool validin,validout ; const char *resstr ; /* logpivot is called from within the dual simplex routine, so we have to convert dual unboundedness to primal infeasibility. Pseudo-unboundedness (swing) always refers to primal variables. */ validin = TRUE ; validout = TRUE ; switch (result) { case dyrOK: { resstr = "(ok)" ; break ; } case dyrDEGEN: { resstr = "(degen)" ; break ; } case dyrUNBOUND: { if (dy_lp->phase == dyDUAL) { resstr = "(infea)" ; validin = FALSE ; } else { resstr = "(unbnd)" ; validout = FALSE ; } break ; } case dyrSWING: { resstr = "(swing)" ; break ; } case dyrLOSTPFEAS: { resstr = "(!pfea)" ; break ; } case dyrLOSTDFEAS: { resstr = "(!dfea)" ; break ; } case dyrOPTIMAL: { if (dy_lp->phase == dyPRIMAL1) resstr = "(infea)" ; else resstr = "(opt)" ; break ; } case dyrPUNT: { resstr = "(punt!)" ; if (xjndx <= 0) validin = FALSE ; break ; } case dyrREQCHK: { if (dy_lp->pivok == FALSE) resstr = "(chkab)" ; else resstr = "(chkrq)" ; break ; } case dyrMADPIV: { resstr = "(mad)" ; if (xjndx <= 0) validin = FALSE ; break ; } case dyrSINGULAR: { resstr = "(sing)" ; break ; } case dyrBSPACE: { resstr = "(nosp)" ; break ; } case dyrFATAL: { resstr = "(fatal)" ; break ; } case dyrRESELECT: { resstr = "(resel)" ; if (dy_lp->phase == dyDUAL) validout = TRUE ; break ; } default: { resstr = "(huh?)" ; result = dyrINV ; break ; } } dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s%6d %-7s ",dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1,resstr) ; if (result == dyrINV) return ; if (validin == TRUE && xjndx > 0) { dyio_outfmt(dy_logchn,dy_gtxecho,"In: %s (%d) %s cbarj = %g ;", consys_nme(dy_sys,'v',xjndx,FALSE,NULL),xjndx, (indir == 1)?"inc":"dec",cbarj) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"In: ") ; } if (result == dyrFATAL) return ; if (result == dyrLOSTPFEAS) { dyio_outfmt(dy_logchn,dy_gtxecho, " Infeas: %s (%d) = %g, lb = %g, ub = %g", consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx, dy_xbasic[dy_var2basis[xindx]], dy_sys->vlb[xindx],dy_sys->vub[xindx]) ; return ; } if (validout == TRUE && xindx > 0) { dyio_outfmt(dy_logchn,dy_gtxecho," Out: %s (%d) %s", consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx, (outdir == 1)?"inc":"dec") ; } else { dyio_outfmt(dy_logchn,dy_gtxecho," Out: ") ; } if (validin == TRUE && validout == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho,", abarij = %g, delta = %g", abarij,(indir == 1)?delta:-delta) ; } if (dy_lp->phase == dyDUAL) { dyio_outfmt(dy_logchn,dy_gtxecho,", yb = %g.",dy_calcdualobj()) ; } else if (dy_lp->phase == dyPRIMAL1) { dyio_outfmt(dy_logchn,dy_gtxecho,", infeas = %g.",dy_calcpinfeas()) ; } else if (dy_lp->phase == dyPRIMAL2) { dyio_outfmt(dy_logchn,dy_gtxecho,", cx = %g.",dy_calcobj()) ; } else { dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } return ; } bool dy_dumpcompact (ioid chn, bool echo, lpprob_struct *soln, bool nbzeros) /* This routine prints the compact version of the solution, as returned by dylp. The layout of the solution is basic information, followed by nonbasic information. For each active constraint, we print the basis position; the constraint index and name; the basic variable name, index, status and value; and the dual variable and value. For each nonbasic variable, we print the variable name, index, status, and value, and reduced cost. The caller can optionally suppress `common' zeros --- e.g., variables with status NBLB, NBFX, or NBUB and value of 0. Note that unscaling is not required here. soln->x and soln->y were unscaled when the solution was generated, and the client's constraint system (soln->consys) is not touched when dylp scales. Parameters: chn: file channnel for output echo: TRUE to echo to stdout, FALSE otherwise soln: an lpprob structure, containing a solution as returned by dylp. nbzeros: TRUE to print all nonbasic variables with a value of 0, FALSE to print only nonbasic variables with nonzero value or with status NBFR or SB. Returns: TRUE if the solution could be printed without error, FALSE otherwise. */ { int vndx,cndx,bpos ; double val ; bool nononbasic ; consys_struct *sys ; basis_struct *basis ; const char *rtnnme = "dy_dumpcompact" ; # ifdef DYLP_PARANOIA if (soln == NULL) { errmsg(2,rtnnme,"solution") ; return (FALSE) ; } sys = soln->consys ; if (sys == NULL) { errmsg(2,rtnnme,"constraint system") ; return (FALSE) ; } # else sys = soln->consys ; # endif /* Begin by printing identifying information about the system and the solution. If the phase is anything but dyDONE, we're done too. */ dyio_outfmt(chn,echo, "\n\nSystem: %s\t\t\tfinal status: %s after %d iterations.", sys->nme,dy_prtlpphase(soln->phase,FALSE),soln->iters) ; if (soln->phase != dyDONE) { dyio_outchr(chn,echo,'\n') ; return (TRUE) ; } /* Consider the lp return code. If it's optimal, infeasible, or unbounded, we'll continue on to print the solution, otherwise we're done. */ dyio_outfmt(chn,echo,"\n lp status: %s",dy_prtlpret(soln->lpret)) ; switch (soln->lpret) { case lpOPTIMAL: { dyio_outfmt(chn,echo,"\t\tobjective: %.9g",soln->obj) ; break ; } case lpINFEAS: { dyio_outfmt(chn,echo,"\t\tinfeasibility: %.9g",soln->obj) ; break ; } case lpUNBOUNDED: { if (soln->obj != 0) { if (soln->obj < 0) { vndx = abs((int) soln->obj) ; bpos = -1 ; } else { vndx = (int) soln->obj ; bpos = 1 ; } dyio_outfmt(chn,echo,"\t\tunbounded variable %s (%d) (%s)", consys_nme(sys,'v',vndx,FALSE,NULL),vndx, (bpos < 0)?"decreasing":"increasing") ; } break ; } default: { dyio_outchr(chn,echo,'\n') ; return (TRUE) ; } } /* There's a solution to be dumped. Do the basis, duals, and basic variables first. */ dyio_outfmt(chn,echo,"\n\nPosn\tConstraint\tDual\t\tPrimal\n") ; basis = soln->basis ; for (bpos = 1 ; bpos <= basis->len ; bpos++) { cndx = basis->el[bpos].cndx ; vndx = basis->el[bpos].vndx ; if (vndx < 0) vndx = sys->varcnt-vndx ; dyio_outfmt(chn,echo,"\n%5d\t(%4d) %-8s\t%12.4g\t(%4d) %-8s %12.7g", bpos,cndx,consys_nme(sys,'c',cndx,FALSE,NULL),soln->y[bpos], vndx,consys_nme(sys,'v',vndx,FALSE,NULL),soln->x[bpos]) ; } /* Now the nonbasic variables. Nonzero values only. */ nononbasic = TRUE ; for (vndx = 1 ; vndx <= sys->varcnt ; vndx++) if ((int) soln->status[vndx] > 0) { if (nononbasic == TRUE) { dyio_outfmt(chn,echo,"\n\nNonbasic Primal\n") ; nononbasic = FALSE ; } switch (soln->status[vndx]) { case vstatNBLB: case vstatNBFX: { val = sys->vlb[vndx] ; if (nbzeros == FALSE && val == 0) continue ; break ; } case vstatNBUB: { val = sys->vub[vndx] ; if (nbzeros == FALSE && val == 0) continue ; break ; } case vstatNBFR: case vstatSB: { val = 0 ; break ; } default: { val = quiet_nan(0) ; errmsg(1,rtnnme,__LINE__) ; break ; } } dyio_outfmt(chn,echo,"\n(%4d) %-8s %3s %12.7g",vndx, consys_nme(sys,'v',vndx,FALSE,NULL), dy_prtvstat(soln->status[vndx]),val) ; } if (nononbasic == TRUE) dyio_outfmt(chn,echo,"\n\nNo nonbasic architectural variables.\n") ; else dyio_outchr(chn,echo,'\n') ; return (TRUE) ; } DyLP-1.10.4/DyLP/src/Dylp/Makefile.in0000644000175200017520000006315412506276701015446 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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@ @DEPENDENCY_LINKING_TRUE@am__append_1 = $(DYLPLIB_LIBS) subdir = src/Dylp DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c_add_to_includes.m4 \ $(top_srcdir)/m4/ac_c_get_sunpro_libs.m4 \ $(top_srcdir)/m4/ac_dylp_equiv_for_cpp_bool.m4 \ $(top_srcdir)/m4/ac_dylp_find_fp_funcs.m4 \ $(top_srcdir)/m4/ac_dylp_fix_cppflags.m4 \ $(top_srcdir)/m4/ac_dylp_options.m4 \ $(top_srcdir)/m4/ac_osidylp_options.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/DylpStdLib/config.h \ $(top_builddir)/src/DylpStdLib/config_dylp.h CONFIG_CLEAN_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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) am_libDylp_la_OBJECTS = dy_consys_io.lo dy_consys_mathutils.lo \ dy_consys_scaling.lo dy_consys_utils.lo dy_basis.lo \ dy_bound.lo dy_cmdint.lo dy_coldstart.lo dy_conmgmt.lo \ dy_dual.lo dy_dualmultipivot.lo dy_dualpivot.lo dy_duenna.lo \ dy_force.lo dy_hotstart.lo dylp.lo dylp_io.lo dylp_utils.lo \ dy_options.lo dy_penalty.lo dy_pivreject.lo dy_primal.lo \ dy_primalmultipivot.lo dy_primalpivot.lo dy_rays.lo \ dy_scaling.lo dy_setup.lo dy_solutions.lo dy_statistics.lo \ dy_tableau.lo dy_varmgmt.lo dy_warmstart.lo glpinv.lo \ glplib1.lo glplib2.lo glplib3.lo glplib4.lo glpluf.lo \ dy_vector_utils.lo libDylp_la_OBJECTS = $(am_libDylp_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libDylp_la_SOURCES) DIST_SOURCES = $(libDylp_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_OSITESTS_FALSE = @COIN_HAS_OSITESTS_FALSE@ COIN_HAS_OSITESTS_TRUE = @COIN_HAS_OSITESTS_TRUE@ COIN_HAS_OSI_FALSE = @COIN_HAS_OSI_FALSE@ COIN_HAS_OSI_TRUE = @COIN_HAS_OSI_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ DYLPLIB_LIBS = @DYLPLIB_LIBS@ DYLPLIB_LIBS_INSTALLED = @DYLPLIB_LIBS_INSTALLED@ DYLPLIB_PCLIBS = @DYLPLIB_PCLIBS@ DYLP_ERRMSGDIR = @DYLP_ERRMSGDIR@ DYLP_SVN_REV = @DYLP_SVN_REV@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIDYLPLIB_CFLAGS = @OSIDYLPLIB_CFLAGS@ OSIDYLPLIB_CFLAGS_INSTALLED = @OSIDYLPLIB_CFLAGS_INSTALLED@ OSIDYLPLIB_DEPENDENCIES = @OSIDYLPLIB_DEPENDENCIES@ OSIDYLPLIB_LIBS = @OSIDYLPLIB_LIBS@ OSIDYLPLIB_LIBS_INSTALLED = @OSIDYLPLIB_LIBS_INSTALLED@ OSIDYLPLIB_PCLIBS = @OSIDYLPLIB_PCLIBS@ OSIDYLPLIB_PCREQUIRES = @OSIDYLPLIB_PCREQUIRES@ OSITESTS_CFLAGS = @OSITESTS_CFLAGS@ OSITESTS_CFLAGS_INSTALLED = @OSITESTS_CFLAGS_INSTALLED@ OSITESTS_DATA = @OSITESTS_DATA@ OSITESTS_DATA_INSTALLED = @OSITESTS_DATA_INSTALLED@ OSITESTS_DEPENDENCIES = @OSITESTS_DEPENDENCIES@ OSITESTS_LIBS = @OSITESTS_LIBS@ OSITESTS_LIBS_INSTALLED = @OSITESTS_LIBS_INSTALLED@ OSI_CFLAGS = @OSI_CFLAGS@ OSI_CFLAGS_INSTALLED = @OSI_CFLAGS_INSTALLED@ OSI_DATA = @OSI_DATA@ OSI_DATA_INSTALLED = @OSI_DATA_INSTALLED@ OSI_DEPENDENCIES = @OSI_DEPENDENCIES@ OSI_LIBS = @OSI_LIBS@ OSI_LIBS_INSTALLED = @OSI_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign EXTRA_DIST = dy_errmsgs.txt ######################################################################## # libDylp # ######################################################################## # Name of the library compiled in this directory. We want it to be installed # in the $libdir directory lib_LTLIBRARIES = libDylp.la # List all source files for this library, including headers libDylp_la_SOURCES = \ dy_consys.h \ dy_consys_io.c \ dy_consys_mathutils.c \ dy_consys_scaling.c \ dy_consys_utils.c \ dy_basis.c \ dy_bound.c \ dy_cmdint.c dy_cmdint.h \ dy_coldstart.c \ dy_conmgmt.c \ dy_dual.c \ dy_dualmultipivot.c \ dy_dualpivot.c \ dy_duenna.c \ dy_force.c \ dy_hotstart.c \ dylp.c dylp.h \ dylp_io.c \ dylp_utils.c \ dy_options.c \ dy_penalty.c \ dy_pivreject.c \ dy_primal.c \ dy_primalmultipivot.c \ dy_primalpivot.c \ dy_rays.c \ dy_scaling.c \ dy_setup.c \ dy_solutions.c \ dy_statistics.c \ dy_tableau.c \ dy_varmgmt.c \ dy_warmstart.c \ glpinv.c glpinv.h \ glplib1.c \ glplib2.c \ glplib3.c \ glplib4.c \ glplib.h \ glpluf.c glpluf.h \ dy_vector.h \ dy_vector_utils.c # This is for libtool libDylp_la_LDFLAGS = $(LT_LDFLAGS) # We want to have also the objects from the DylpStdLib in this library libDylp_la_LIBADD = ../DylpStdLib/libDylpStdLib.la $(am__append_1) # Since automake is not doing this on its own, we need to declare the # dependencies to the subdirectory libraries here libDylp_la_DEPENDENCIES = ../DylpStdLib/libDylpStdLib.la # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../DylpStdLib` # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/DylpStdLib ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ dy_cmdint.h \ dy_consys.h \ dylp.h \ dy_vector.h 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Dylp/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Dylp/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 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libDylp.la: $(libDylp_la_OBJECTS) $(libDylp_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libDylp_la_LDFLAGS) $(libDylp_la_OBJECTS) $(libDylp_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_basis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_bound.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_cmdint.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_coldstart.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_conmgmt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_consys_io.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_consys_mathutils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_consys_scaling.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_consys_utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_dual.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_dualmultipivot.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_dualpivot.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_duenna.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_force.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_hotstart.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_options.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_penalty.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_pivreject.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_primal.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_primalmultipivot.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_primalpivot.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_rays.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_scaling.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_setup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_solutions.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_statistics.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_tableau.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_varmgmt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_vector_utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dy_warmstart.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dylp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dylp_io.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dylp_utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glpinv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glplib1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glplib2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glplib3.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glplib4.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glpluf.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: 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: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags 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-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ 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 uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # 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: DyLP-1.10.4/DyLP/src/Dylp/dy_dualpivot.c0000644000175200017520000030447512253224475016254 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains the routines which select entering and leaving variables for the dual simplex, and perform a dual pivot. See the comments at the head of dy_dual.c for an overview of the dual simplex algorithm implemented here. Some words about anti-degen lite in the dual context. Analogous to the primal case, the notion is that we want to choose leaving dual variables based on the alignment of the hyperplane coming tight with the pivot, relative to the direction we want to go. One candidate for `direction we want to go' is the dual objective. Another good candidate is the dual direction of motion. But we're running dual simplex in the primal data structure and handling upper and lower bounds on the primal variables algorithmically, and that makes the explanation of why it all works just a little tricky. Architecturals nonbasic at bound represent tight constraints of the form x <= u or -x <= -l. There should be nonzero duals associated with these constraints, and we need to account for them when formulating dual constraints and when determining alignment to the dual objective, but carefully keep our head in the sand when it comes to alignment with the direction of motion. The unfortunate fact of the matter is that there's just one column for x in the primal nonbasic partition, but it can represent any of three dual variables, depending on your point of view. Fortunately, it only needs to be one of them at any one time. We need to account for the coefficients of any finite upper and lower bounds. The system we want is really A'x ? b', which expands to Ax = b -Ix <= -l Ix <= u where x has expanded to include slacks as well as the original architectural variables, and -Ix <= -l contains explicit lower bound constraints for the slacks as well as the original architectural variables. All primal variables are `free' variables with explicit bound constraints. We're interested in y'a' = [y w v][a -e e]. The dual constraint is the equality ya - w + v = -c. The objective is augmented to become y'b', where b' = [b -l u] (the order of l and u isn't important, as long as we choose one and stick with it). The dual variables y are free variables (to match the equalities Ax = b). (But note that the columns for the slack variables introduce explicit dual constraints y - w = 0. These serve to enforce the usual y >= 0. I'll leave it to you to extend the interpretation to upper-bounded slacks for range constraints.) Now comes the part where we abridge the explanation (see the accompanying technical doc'n for the gory details). Clearly a primal variable can be in one of three states: at its lower bound, at its upper bound, or in between. Interpreting ya - w + v = -c in this light, we have: Primal w v constraint x = lb nonzero zero ya - w = -c => ya >= -c x = ub zero nonzero ya + v = -c => ya <= -c between zero zero ya = -c So, for a dual pivot where w decreases to 0 and goes nonbasic (x increases from lb to some intermediate value), the dual inequality ya >= -c is made tight. When v decreases to 0 and goes nonbasic (x decreases from ub), the dual inequality ya <= -c is made tight. While x is strictly between bounds, ya = c must hold. What's the dual direction of motion, zeta? The portion matching the basic dual variables (all of y, those w for variables at lb, those v for variables at ub) is the vector [ inv(B) inv(B)N ]; there's another chunk for the nonbasic variables. Again, you should see the accompanying technical doc'n for details. The upshot of all the math is that dot(zeta,a) = abar for x leaving to become NBLB, and -abar for x leaving to become NBUB. How do we calculate alignment with the objective? Since we're minimising, we want to head in the direction -b'. The direction we attribute to the normal of the dual constraint depends on the type of pivot. All of the above translates nicely into the real world of revised simplex with implicit primal bounds and dual variables with implicit lower bounds of 0. Again, it's in the accompanying documentation. Probably the least obvious point is that a shortage of coefficients of appropriate sign (remember, one column serves for three!) results in the v's taking on negative values. Translating from primal space to dual space and back again still makes my head hurt, though I'm getting better at it. Chant this mantra: nonbasic primal architectural variables match up with basic w or v dual variables, and nonbasic primal slack variables match up with basic y dual variables. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_dualpivot.c 4.7 10/15/05" ; static char svnid[] UNUSED = "$Id: dy_dualpivot.c 524 2013-12-15 03:59:57Z tkr $" ; /* Define this symbol to enable a thorough check of the updates to cbar and rho. Set to FALSE if you want errors to trigger a fatal error, TRUE to note the errors but soldier on. Be aware that this check will almost certainly trigger fatal errors if the LP is numerically ill-conditioned. You must also define DYLP_PARANOIA during the dylp build. #define CHECK_DSE_UPDATES TRUE */ /* Define this symbol to enable a thorough check of the dual pivot row abar. As with CHECK_DSE_UPDATES, define this as TRUE if you just want to know about errors, FALSE if an error should trigger an abort. Here, too, the check will almost certainly trigger fatal errors if the LP has numerical problems. You must also define DYLP_PARANOIA during the dylp build. #define CHECK_DUAL_PIVROW TRUE */ #if defined(DYLP_STATISTICS) || !defined(DYLP_NDEBUG) /* Pivot counting structure for the antidegeneracy mechanism. This structure is sufficient for simple debugging; more complicated stats are collected when DYLP_STATISTICS is defined. DYSTATS_MAXDEGEN is defined in dylp.h. Field Definition ----- ---------- iterin iterin[i] is the value of tot.pivs when degeneracy level i was entered. */ typedef struct { int iterin[DYSTATS_MAXDEGEN] ; } degenstats_struct ; static degenstats_struct degenstats ; #endif /* DYLP_STATISTICS || !DYLP_NDEBUG */ dyret_enum dy_confirmDualPivot (int i, int j, double *abari, double maxabari, double **p_abarj) /* The routines that select the entering variable x for a dual pivot use the row vector abar when evaluating candidates. Abar is calculated as dot(beta,a), k = 1, ..., n, by dualpivrow. See dualpivrow for an explanation of why dylp takes this approach. This routine calculates the column vector abar = inv(B)a and then compares the two values obtained for the pivot abar. The criteria for acceptance is a difference of less than 1 part in pctErr (see below). The reason we need this routine is that numerical inaccuracy happens. In particular, we're looking to avoid the situation where the value from abar appears suitable, but the value from abar is not suitable. The value from abar more accurately reflects calculation in the basis package, and if it's no good, the basis update is liable to fail. For dual multipivot, where we may flip variables prior to the final pivot, this is a sure fire way to lose dual feasibility. Hence this routine, which is called by both dualmultiin and dualin. There's no real loss in terms of efficiency, because we can instruct the basis package to remember the intermediate result from the calculation of inv(B)a that it will subsequently use for the basis update. Returning dyrMADPIV for the case where the values of abar do not agree and the basis was recently refactored doesn't address the numeric problem, but it will get x onto the rejected pivot list, and we can hope that some other x will result in a different choice of x. Parameters: i: The index of the variable x selected to leave. j: The index of the variable x selected to enter. abari: The dual pivot row, calculated as dot(beta,a), k = 1, ..., n maxabari: The maximum absolute value in abari. p_abarj: (o) used to return abar Returns: dyrOK if the values agree, or if the values differ but we've just refactored. dyrREQCHK if the values differ and there's been at least one pivot since the last refactor of the basis. At least we can try to fix the problem. dyrMADPIV if the values agree and are honestly mad, or if the values disagree and the value from abar is mad. dyrFATAL if the calculation fails */ { int xipos ; double *abarj ; double abari_j,abarj_i,tol,err,pivRating ; dyret_enum retval ; const double pctErr = 1.0e-10 ; const char *rtnnme = "confirmDualPivot" ; # ifndef DYLP_NDEBUG int cnt,xkpos,printtmp ; # endif retval = dyrINV ; *p_abarj = NULL ; xipos = dy_var2basis[i] ; abari_j = abari[j] ; /* Fetch a and calculate abar = inv(B)a. */ abarj = NULL ; if (consys_getcol_ex(dy_sys,j,&abarj) == FALSE) { errmsg(122,rtnnme,dy_sys->nme, "column",consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; if (abarj != NULL) FREE(abarj) ; return (dyrFATAL) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tentering column a<%d>:",j) ; cnt = 1 ; for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { if (abarj[xkpos] == 0) continue ; cnt = (cnt+1)%2 ; if (cnt == 0) dyio_outchr(dy_logchn,dy_gtxecho,'\n') ; dyio_outfmt(dy_logchn,dy_gtxecho, "\ta<%d,%d> = %g",xkpos,j,abarj[xkpos]) ; } } # endif dy_ftran(abarj,TRUE) ; abarj_i = abarj[xipos] ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tentering column abar<%d> = inv(B)a<%d>:",j,j) ; cnt = 1 ; for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { if (abarj[xkpos] == 0) continue ; cnt = (cnt+1)%2 ; if (cnt == 0) dyio_outchr(dy_logchn,dy_gtxecho,'\n') ; dyio_outfmt(dy_logchn,dy_gtxecho, "\ta<%d,%d> = %g",xkpos,j,abarj[xkpos]) ; } } /* Suppress print in dy_chkpiv. */ printtmp = dy_opts->print.pivoting ; dy_opts->print.pivoting = 0 ; # endif pivRating = dy_chkpiv(abarj_i,maxabari) ; # ifndef DYLP_NDEBUG dy_opts->print.pivoting = printtmp ; # endif /* Well, are we equal? If so, the recommendation depends on pivot stability. */ err = fabs(abarj_i-abari_j) ; tol = pctErr*(1+fabs(abarj_i)) ; if (err < tol) { if (pivRating < 1.0) { retval = dyrMADPIV ; } else { retval = dyrOK ; } } /* Nope, not equal. If we're paranoid, print a warning for really bad cases. */ else { # ifdef DYLP_PARANOIA if (!(err > tol*1000)) { dywarn(385,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1,i,j,abari_j,abarj_i,err, fabs(err/abarj_i),pctErr) ; } # endif /* If we've done at least one pivot since refactoring, request a refactor. But if we've just refactored, report ok unless the pivot is numerically unstable. */ if (dy_lp->basis.etas >= 2) { retval = dyrREQCHK ; } else if (pivRating < 1.0) { retval = dyrMADPIV ; } else { retval = dyrOK ; } # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n dual pivot numeric drift: ") ; dyio_outfmt(dy_logchn,dy_gtxecho, "abari = %g, abarj = %g, diff = %g", abari_j,abarj_i,fabs(abari_j-abarj_i)) ; dyio_outfmt(dy_logchn,dy_gtxecho," (%g%%); ",tol*100) ; dyio_outfmt(dy_logchn,dy_gtxecho,"returning %s.",dy_prtdyret(retval)) ; } # endif } *p_abarj = abarj ; return (retval) ; } #ifdef CHECK_DUAL_PIVROW static bool check_dualpivrow (int xipos, const double *abari, double maxabari) /* This routine does a cross-check of the dual pivot row abar, row i of inv(B)N. abar is calculated as dot(beta,a), where beta is row i of inv(B). Here we cross-check by calculating inv(B)a and comparing the two values of abar. Experience says that this routine can churn out huge numbers of errors for numerically difficult problems, even with quite loose tolerances. It'll issue a warning for an individual coefficient only when the precentage error exceeds 1% (a huge error, by any usual accuracy standards). Parameters: xipos: basis position of the leaving variable abari: row i of inv(B)N, the pivot row coefficients maxabari: maximum value in abari Returns: TRUE if the two methods of calculation agree, CHECK_DUAL_PIVROW otherwise. (In use, this controls whether a failure results in an abort.) */ { int k ; flags statk ; double *abark ; double abari_k,abark_i ; bool retval ; int printtmp ; int errcnt ; double tol,diff,pct,maxpct,maxerr,maxerrcoeff,toterr,toterrcoeffs ; const char *rtnnme = "check_dualpivrow" ; /* Suppress print in dy_chkpiv. */ printtmp = dy_opts->print.pivoting ; dy_opts->print.pivoting = 0 ; /* Somewhat arbitrarily, declare that an error of .0001% (1.0e-6) is our limit. */ tol = 1.0e-6 ; retval = TRUE ; errcnt = 0 ; toterr = 0 ; toterrcoeffs = 0 ; maxpct = 0 ; maxerr = 0 ; maxerrcoeff = 0 ; abark = (double *) MALLOC((dy_sys->concnt+1)*sizeof(double)) ; /* Open a loop to do the scan. The first order of business is a consistency check on x's status. Then decide whether we need to pursue the check. In primal terms, we're not interested in basic variables or nonbasic fixed variables. These correspond to nonbasic duals and basic free duals, respectively. We only need to check coefficients corresponding to basic duals that can be pivoted out. But if we're paranoid, check them anyway for consistency with other paranoid checks. */ for (k = 1 ; k <= dy_sys->varcnt ; k++) { statk = dy_status[k] ; if (dy_chkstatus(k) == FALSE) { retval = CHECK_DUAL_PIVROW ; continue ; } # ifdef DYLP_PARANOIA if (flgon(statk,vstatBASIC)) continue ; # else if (flgon(statk,vstatBASIC|vstatNBFX)) continue ; # endif /* Acquire column a and calculate abar = inv(B)a. */ if (consys_getcol_ex(dy_sys,k,&abark) == FALSE) { errmsg(122,rtnnme,dy_sys->nme,"column", consys_nme(dy_sys,'c',k,TRUE,NULL),k) ; retval = CHECK_DUAL_PIVROW ; continue ; } dy_ftran(abark,FALSE) ; /* Exclude values that are not numerically stable pivots. These will never be pivots, and they complicate the business of generating a meaningful metric. */ abari_k = abari[k] ; abark_i = abark[xipos] ; if (dy_chkpiv(abark_i,maxabari) < 1.0) continue ; /* Do the comparison. Because the relative magnitude of coefficients varies wildly, we'll work with percentage error. Remember the worst we've seen. Issue an individual warning for errors of 1% or more. */ diff = fabs(abark_i-abari_k) ; pct = diff/fabs(abark_i) ; if (pct > tol) { errcnt++ ; toterr += diff ; toterrcoeffs += fabs(abark_i) ; if (pct > maxpct) { maxpct = pct ; maxerr = diff ; maxerrcoeff = fabs(abark_i) ; } if (pct > .01) { dywarn(385,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1,dy_basis[xipos],k,abari_k,abark_i, fabs(abark_i-abari_k),.01*fabs(abark_i)) ; } retval = CHECK_DUAL_PIVROW ; } } FREE(abark) ; /* Print a summary message if any coefficients failed the comparison. */ if (errcnt > 0) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n(%s)%d: comparing pivot row %d. ", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters,xipos) ; dyio_outfmt(dy_logchn,dy_gtxecho, "%d coeffs differ, total error %g%%, max %g%% (%g/%g).", errcnt,(toterr/toterrcoeffs)*100, maxpct*100,maxerr,maxerrcoeff) ; } return (retval) ; } #endif /* CHECK_DUAL_PIVROW */ bool dualpivrow (int xipos, double *betai, double *abari, double *maxabari) /* This routine calculates row i of the basis inverse, beta, and also the dual pivot row abar, row i of inv(B)N. beta is easy -- we simply premultiply inv(B) by the unit vector e. Calculating abar is not so easy. We'll need to do individual dot products for each nonbasic column a in the nonbasic partition. Arguably, we'd be better off doing dot(beta,a) as needed during the selection of the entering (primal) variable by dualin. But I'm interested in this approach to see if we do better on numerical accuracy by using the max of the pivot row when checking for a suitable pivot. Parameters: xipos: basis position of the leaving variable betai: (i) must be a 0 vector (o) row i of the basis inverse abari: (i) must be a 0 vector (o) row i of inv(B)N, the pivot row coefficients maxabari: (o) max{j} |abar|, the largest value in the pivot row Returns: TRUE if the calculations complete with no difficulty, FALSE otherwise */ { int xkndx ; flags xkstatus ; double abarik ; # ifndef DYLP_NDEBUG const char *rtnnme = "dualpivrow" ; # endif # ifndef DYLP_NDEBUG pkvec_struct *ai ; # endif /* We can use dy_btran to retrieve beta. The calculation is einv(B). */ betai[xipos] = 1.0 ; dy_btran(betai) ; # ifndef DYLP_NDEBUG /* If the user is interested, retrieve and print the nonbasic coefficients of row a. */ if (dy_lp->phase != dyADDVAR && dy_opts->print.pivoting >= 4) { int ndx,cnt ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n nonbasic coefficients of leaving row a<%d>:",xipos) ; ai = NULL ; if (consys_getrow_pk(dy_sys,xipos,&ai) == FALSE) { errmsg(122,rtnnme,dy_sys->nme,"row", consys_nme(dy_sys,'c',xipos,TRUE,NULL),xipos) ; if (ai != NULL) pkvec_free(ai) ; return (FALSE) ; } cnt = 1 ; for (ndx = 0 ; ndx < ai->cnt ; ndx++) { xkndx = ai->coeffs[ndx].ndx ; if (dy_var2basis[xkndx] == 0) { cnt = (cnt+1)%2 ; if (cnt == 0) dyio_outchr(dy_logchn,dy_gtxecho,'\n') ; dyio_outfmt(dy_logchn,dy_gtxecho,"\ta<%d,%d> = %g", xipos,xkndx,ai->coeffs[ndx].val) ; } } pkvec_free(ai) ; } # endif /* We need to do individual dot products dot(beta,a) to obtain abar. We also want maxabar = MAX{j}(abar) so that we can check a potential pivot for numerical stability. Open a loop to walk the columns, doing the necessary calculations for each nonbasic column which is eligible for entry (i.e., we can skip basic variables and NBFX variables). When we're paranoid, process NBFX columns for consistency with other paranoid checks. */ *maxabari = 0 ; for (xkndx = 1 ; xkndx <= dy_sys->varcnt ; xkndx++) { xkstatus = dy_status[xkndx] ; # ifdef DYLP_PARANOIA if (flgon(xkstatus,vstatBASIC)) continue ; # else if (flgon(xkstatus,vstatBASIC|vstatNBFX)) continue ; # endif abarik = consys_dotcol(dy_sys,xkndx,betai) ; if (!withintol(abarik,0,dy_tols->zero)) { abari[xkndx] = abarik ; if (fabs(abarik) > *maxabari) *maxabari = fabs(abarik) ; } } # ifndef DYLP_NDEBUG /* If the user is interested, print the transformed row abar. */ if ((dy_lp->phase != dyADDVAR && dy_opts->print.pivoting >= 4) || (dy_lp->phase == dyADDVAR && dy_opts->print.varmgmt >= 3)) { int cnt ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n nonbasic coefficients of transformed row abar<%d>, max %g:", xipos,*maxabari) ; cnt = 1 ; for (xkndx = 1 ; xkndx <= dy_sys->varcnt ; xkndx++) { if (fabs(abari[xkndx]) < .001*dy_tols->zero) continue ; cnt = (cnt+1)%2 ; if (cnt == 0) dyio_outchr(dy_logchn,dy_gtxecho,'\n') ; dyio_outfmt(dy_logchn,dy_gtxecho, "\ta<%d,%d> = %g",xipos,xkndx,abari[xkndx]) ; } } # endif # ifdef CHECK_DUAL_PIVROW /* And if the user is really paranoid, go over the pivot row with a fine tooth comb. check_dualpivrow can return FALSE only if CHECK_DUAL_PIVROW is defined to be FALSE. */ if (check_dualpivrow(xipos,abari,*maxabari) == FALSE) return (FALSE) ; # endif /* That should do it. We're outta here. */ return (TRUE) ; } static void dualdegenin (void) /* This routine forms a new restricted subproblem, increasing the degeneracy level kept in dy_lp->degen. A base perturbation is calculated so that the maximum possible perturbation is perturb = (base)*(varcnt) <= 1.0e-6 This is then increased, if necessary, so that the perturbation exceeds the dual zero tolerance. For each variable, the actual perturbation is calculated as base*j. The routine should not be called if dual degeneracy isn't present, and will do a paranoid check to make sure that's true. Parameters: none Returns: undefined */ { int j,oldlvl ; flags statj ; double base,perturb ; const char *rtnnme = "dualdegenin" ; # if defined(DYLP_PARANOIA) || defined(DYLP_STATISTICS) || !defined(DYLP_NDEBUG) int degencnt = 0 ; # endif /* Figure out the appropriate perturbation and bump the degeneracy level. Because we're dealing directly with dual variables, we can use a smaller perturbation than the primal, and we don't need to be worrying about getting outside of the dy_tols.dfeas range around zero. Still, it seems prudent to exceed the dual zero tolerance. */ base = pow(10.0,(-6-ceil(log10(dy_sys->concnt)))) ; while (base <= dy_tols->cost) base *= 10 ; oldlvl = dy_lp->degen++ ; # ifndef DYLP_NDEBUG if (dy_opts->print.degen >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: antidegeneracy increasing to level %d", dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,dy_lp->degen) ; dyio_outfmt(dy_logchn,dy_gtxecho,", base perturbation %g",base) ; if (dy_opts->print.degen >= 5) dyio_outchr(dy_logchn,dy_gtxecho,':') ; } # endif # if defined(DYLP_STATISTICS) || !defined(DYLP_NDEBUG) if (dy_lp->degen < DYSTATS_MAXDEGEN) degenstats.iterin[dy_lp->degen] = dy_lp->tot.pivs ; # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL && dy_lp->degen < DYSTATS_MAXDEGEN) { if (dy_stats->ddegen[0].cnt < dy_lp->degen) dy_stats->ddegen[0].cnt = dy_lp->degen ; dy_stats->ddegen[dy_lp->degen].cnt++ ; } # endif /* Create the perturbed subproblem. We're only interested in variables that are participating in the current subproblem, hence the check of ddegenset. Further, we're only interested in basic duals that we can drive to bound (0) which amounts to nonbasic primals, except for NBFX and NBFR. (Put another way, driving the dual to 0 amounts to loosening the primal constraint. For architecturals, the relevant constraint is the upper/lower bound. For logicals, it's the associated architectural constraint. Equalities can't be loosened.) And, of course, we're only interested if the value is 0. You might think that a toleranced test would work here, and to some extent it does, but ... inevitably, we'll suck up a few dual variables that really aren't involved in the degeneracy, just very small at the point the restricted problem is formed. Then, as we pivot, these values can legitimately grow large, and it plays havoc with accuracy checks and iterative updates, because chunks of the code are doing on-the-fly compensation, setting y to 0 for duals involved in the restricted subproblem. */ for (j = 1 ; j <= dy_sys->varcnt ; j++) { if (dy_ddegenset[j] != oldlvl) continue ; statj = dy_status[j] ; if (flgon(statj,vstatBASIC|vstatNBFX|vstatNBFR)) continue ; if (dy_cbar[j] != 0.0) continue ; /* Make the perturbation. We need to perturb in the correct direction (positive for NBLB, negative for NBUB) in order to maintain dual feasibility. Note that we're pretending to perturb c by perturbing cbar. Given that j is nonbasic, cbar = c - dot(y,a), and we shouldn't perturb the associated dual. */ dy_ddegenset[j] = dy_lp->degen ; switch (statj) { case vstatNBLB: { perturb = base*j ; break ; } case vstatNBUB: { perturb = -base*j ; break ; } case vstatNBFR: case vstatSB: { errmsg(346,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,dy_prtvstat(statj), consys_nme(dy_sys,'v',j,FALSE,NULL),j) ; return ; } default: { errmsg(1,rtnnme,__LINE__) ; return ; } } dy_cbar[j] = perturb ; # if defined(DYLP_PARANOIA) || defined(DYLP_STATISTICS) degencnt++ ; # endif # ifndef DYLP_NDEBUG if (dy_opts->print.degen >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tcbar<%d> perturbed to %g (%s %s).", j,dy_cbar[j],dy_prtvstat(statj), consys_nme(dy_sys,'v',j,FALSE,NULL)) ; } # endif } # ifdef DYLP_PARANOIA if (degencnt <= 0) { errmsg(327,rtnnme,dy_sys->nme) ; return ; } # endif # ifndef DYLP_NDEBUG if (dy_opts->print.degen >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"%s%d variables.", (dy_opts->print.degen < 5)?", ":"\n\ttotal ",degencnt) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL && dy_lp->degen < DYSTATS_MAXDEGEN) { if (dy_stats->ddegen[dy_lp->degen].maxsiz < degencnt) dy_stats->ddegen[dy_lp->degen].maxsiz = degencnt ; j = dy_stats->ddegen[dy_lp->degen].cnt-1 ; perturb = dy_stats->ddegen[dy_lp->degen].avgsiz ; dy_stats->ddegen[dy_lp->degen].avgsiz = (float) ((perturb*j+degencnt)/(j+1)) ; } # endif return ; } dyret_enum dy_dualdegenout (int level) /* This routine backs out all restricted subproblems to the level given by the parameter. The value of the involved dual variables is reset to 0 in dy_cbar, and dy_ddegenset and dy_lp->degen are adjusted. All variables involved in a restricted subproblem were at bound (hence, zero) when they were collected into the subproblem. Numeric inaccuracy can cause drift over the course of pivoting. This is tested as part of the accuracy checks and the antidegeneracy mechanism will be backed out if a problem is detected. Here, the same tests are just paranoia. Parameter: level: The target level for removal of restricted subproblems. Returns: dyrOK if the restoration goes without problem, dyrREQCHK if there's been too much numerical drift since we began the degenerate subproblem. */ { int j ; dyret_enum retval ; # ifdef DYLP_STATISTICS int curlvl,curpivs ; # endif # ifndef DYLP_NDEBUG if (dy_opts->print.degen >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: antidegeneracy dropping to level %d after %d pivots.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters,level, dy_lp->tot.pivs-degenstats.iterin[dy_lp->degen]) ; } # endif # ifdef DYLP_STATISTICS /* Record the iteration counts. This needs to be a loop because we can peel off multiple levels. */ if (dy_stats != NULL) for (curlvl = dy_lp->degen ; curlvl > level ; curlvl--) { if (curlvl < DYSTATS_MAXDEGEN) { curpivs = dy_lp->tot.pivs-degenstats.iterin[curlvl] ; dy_stats->ddegen[curlvl].totpivs += curpivs ; dy_stats->ddegen[curlvl].avgpivs = ((float) dy_stats->ddegen[curlvl].totpivs)/ dy_stats->ddegen[curlvl].cnt ; if (curpivs > dy_stats->ddegen[curlvl].maxpivs) dy_stats->ddegen[curlvl].maxpivs = curpivs ; } } # endif retval = dyrOK ; /* Back out restricted subproblems to the level specified by level. By removing the perturbation (setting c back to 0), we restore the equality y = cbar for logicals. */ for (j = 1 ; j <= dy_sys->varcnt ; j++) { if (dy_ddegenset[j] > level) { dy_ddegenset[j] = level ; dy_cbar[j] = 0 ; if (j <= dy_sys->concnt) { dy_y[j] = 0 ; } # ifndef DYLP_NDEBUG if (dy_opts->print.degen >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tcbar<%d> restored to %g, (%s %s)", j,0.0,dy_prtvstat(dy_status[j]), consys_nme(dy_sys,'v',j,FALSE,NULL)) ; } # endif } } dy_lp->degen = level ; return (retval) ; } #ifdef CHECK_DSE_UPDATES static bool check_dse_update (int xkndx, double u_cbark, double u_rhok, bool recalc) /* This routine checks x for consistent status, then does one of the following: * for nonbasic variables, a `from scratch' calculation of cbar as c - c(inv(B)a) * for basic variables, a `from scratch' calculation of rho as ||einv(B)||. Parameters: xkndx: index for the variable u_cbark: updated cbar (valid only if x is nonbasic) u_rhok: updated rho (valid only if x is basic) recalc: TRUE if dseupdate is already recommending that this value be recalculated from scratch, FALSE otherwise. Returns: TRUE if the updates agree with the values calculated from first principles, CHECK_DSE_UPDATES otherwise. (In use, this controls whether a failure causes an abort.) */ { int xkpos,xindx,xipos ; double cbark,*abark,rhok,*betak ; flags xkstatus ; bool retval ; const char *rtnnme = "check_dse_update" ; /* Make sure we're ok as far as consistent status and values. */ retval = dy_chkstatus(xkndx) ; xkstatus = dy_status[xkndx] ; /* The first case is for a basic variable. We're interested in checking the norm of the row of the basis inverse. We load up betak as a unit vector with a 1 in the appropriate position, btran it, and then calculate the norm. */ if (flgon(xkstatus,vstatBASIC)) { betak = (double *) CALLOC(dy_sys->concnt+1,sizeof(double)) ; xkpos = dy_var2basis[xkndx] ; betak[xkpos] = 1.0 ; dy_btran(betak) ; rhok = exvec_ssq(betak,dy_sys->concnt) ; if (!withintol(rhok,u_rhok,dy_tols->reframe*(1+fabs(rhok)))) { errmsg(388,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"rho",xkpos,u_rhok,rhok,fabs(u_rhok-rhok), dy_tols->reframe*(1+fabs(rhok))) ; if (recalc == FALSE) retval = CHECK_DSE_UPDATES ; } FREE(betak) ; } /* For nonbasic variables, check that the reduced cost c - cabar matches u_cbark. If dual anti-degeneracy is active, the value we calculate here should be 0, and in general will not match u_cbark (unless we're headed for higher-level degeneracy). */ else { abark = NULL ; if (consys_getcol_ex(dy_sys,xkndx,&abark) == FALSE) { errmsg(122,rtnnme,dy_sys->nme, "column",consys_nme(dy_sys,'v',xkndx,TRUE,NULL),xkndx) ; if (abark != NULL) FREE(abark) ; return (FALSE) ; } dy_ftran(abark,FALSE) ; cbark = dy_sys->obj[xkndx] ; for (xipos = 1 ; xipos <= dy_sys->concnt ; xipos++) { xindx = dy_basis[xipos] ; cbark -= dy_sys->obj[xindx]*abark[xipos] ; } if (dy_ddegenset[xkndx] == 0) { if (!withintol(cbark,u_cbark,dy_tols->reframe*(1+fabs(cbark)))) { errmsg(388,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"cbar",xkndx,u_cbark,cbark,fabs(u_cbark-cbark), dy_tols->reframe*(1+fabs(cbark))) ; if (recalc == FALSE) retval = CHECK_DSE_UPDATES ; } } else { if (!withintol(cbark,0.0,dy_tols->dfeas)) { if (withintol(cbark,0.0,1000*dy_tols->dfeas)) { dywarn(388,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"cbar",xkndx,0.0,cbark, fabs(cbark),dy_tols->dfeas) ; } else { errmsg(388,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"cbar",xkndx,0.0,cbark, fabs(cbark),dy_tols->dfeas) ; if (recalc == FALSE) retval = CHECK_DSE_UPDATES ; } } } FREE(abark) ; } return (retval) ; } #endif static void dualpricexk (int xkndx, int *xindx, double *nbbari, bool *pivreject) /* This routine does the pricing calculation for the single variable x. For simplicity, assume that x occupies pos'n k of the basis. The pricing is dual steepest edge, adapted for bounded variables. Just as with primal steepest edge pricing, in dual space we're looking for the largest reduced cost, normalised by the norm of the direction of motion. Translated into the primal space, we're looking for the largest infeasibility, normalised by rho (the norm of row k of the basis inverse). If xbasic is the value of x and bnd is the violated bound closest to x, the `reduced cost' is |x-bnd|/||beta||. Parameters: xkndx: the index of x, the variable to be priced xindx: (i) index of the current incumbent x (the value is not used within dualpricexk) (o) updated to the index of x if x should supplant the current candidate x nbbari: (i) the normalised `reduced cost' of x (o) updated if x supplants the previous incumbent pivreject: (o) set to TRUE if x would be the winning candidate, but it's flagged with the NOPIVOT qualifier Returns: TRUE if x supplanted x, FALSE otherwise */ { int xkpos ; double deltak,nbbark ; flags xkstatus ; # ifndef DYLP_NDEBUG const char *rtnnme = "dualpricexk" ; # endif /* Get the position and status of x. */ xkpos = dy_var2basis[xkndx] ; xkstatus = dy_status[xkndx] ; # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tpricing %s (%d), status %s; ", consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(xkstatus)) ; } # endif /* Calculate the dual `reduced cost', and the normalised distance to bound. dualpricexk is only called for vstatBLLB, vstatBUUB, so by definition the `reduced cost' is larger than the relevant tolerance (the primal feasibility tolerance, as it happens). But we still need to check for values in the bogus range, and for the NOPIVOT status qualifier. */ if (flgon(xkstatus,vstatBLLB)) { deltak = dy_sys->vlb[xkndx]-dy_x[xkndx] ; } else { deltak = dy_x[xkndx]-dy_sys->vub[xkndx] ; } nbbark = deltak/sqrt(dy_rho[xkpos]) ; # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "bbar = %g, ||beta|| = %g, |bbar|/||beta|| = %g.", deltak,sqrt(dy_rho[xkpos]),nbbark) ; } # endif if (withintol(deltak,0,dy_tols->pfeas*dy_tols->bogus)) { if (withintol(deltak,0,dy_tols->pfeas)) { # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho," << zero!? >>") ; errmsg(1,rtnnme,__LINE__) ; } # endif return ; } else if (dy_lp->basis.etas > 1) { # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) dyio_outfmt(dy_logchn,dy_gtxecho," << bogus >>") ; # endif return ; } } if (flgon(xkstatus,vstatNOPIVOT)) { *pivreject = TRUE ; # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) dyio_outfmt(dy_logchn,dy_gtxecho," << reject >>") ; # endif return ; } /* x is a suitable candidate; the only question is whether it's better than the current candidate. If it is, x supplants it. */ if (nbbark > *nbbari) { *nbbari = nbbark ; *xindx = xkndx ; # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) dyio_outfmt(dy_logchn,dy_gtxecho," << supplant >>") ; # endif return ; } else { # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) dyio_outfmt(dy_logchn,dy_gtxecho," << inferior >>") ; # endif return ; } } dyret_enum dy_dualout (int *xindx) /* In the normal course of events with DSE pricing, the leaving variable for the next pivot is chosen during the update of cbar and rho. Still, on occasion we'll need to select again because the pivot is unsuitable, and we need a way to select the leaving variable for the initial pivot. That's where this routine comes in. This routine scans the basis and selects a leaving variable x by choosing the variable with the greatest normalised infeasibility. (If this were viewed in terms of the dual space, we're doing a steepest edge algorithm. See the discussion of DSE pricing in the documentation.) The routine dualpricexk does the actual work. If all infeasible variables are on the pivot reject list (and thus we can't bring them to feasibility) we'll return dyrPUNT. In a sense, the situation is analogous to true infeasibility --- there is no suitable variable to enter --- and the hope is that as dylp reverts to primal phase I it'll be sufficiently intelligent to add some variables and find a decent pivot. Parameters: xindx: (o) Index of the leaving variable x; 0 if no leaving variable is selected. Returns: dyrOK if the leaving variable is selected without incident dyrOPTIMAL if all variables are within bounds dyrPUNT if all infeasible variables are on the pivot reject list */ { int xkndx,xkpos ; flags xkstatus ; bool pivreject ; double candbbari ; dyret_enum retval ; # ifndef DYLP_NDEBUG const char *rtnnme = "dy_dualout" ; # endif retval = dyrINV ; # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: pricing %d rows from %d for %d candidate.", rtnnme,dy_sys->concnt,1,1) ; } # endif candbbari = 0 ; *xindx = 0 ; pivreject = FALSE ; /* Open a loop to walk through the basic variables, looking for the one that has the greatest normalised infeasibility and is eligible for pivoting. */ for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { xkndx = dy_basis[xkpos] ; xkstatus = dy_status[xkndx] ; if (flgoff(xkstatus,vstatBLLB|vstatBUUB)) { # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tpricing %s (%d), status %s; << status >>", consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(xkstatus)) ; } # endif continue ; } dualpricexk(xkndx,xindx,&candbbari,&pivreject) ; } /* We're done. Time to set the proper return value. If we have a new candidate for entry, set the return value to dyrOK. If we don't have a candidate, there are three possible reasons: * We have potential pivots on the reject list: pivreject == TRUE. We want to return dyrPUNT. * We're optimal. pivreject == FALSE. dyrOPTIMAL is the proper return value. * We saw some infeasible variables, but the infeasibility was within the bogus number tolerance. pivreject == FALSE. dyrOPTIMAL is still the correct return code (we'll end up doing a refactor in preoptimality, and the bogus numbers will either disappear, or we'll be back here ready to use them). */ if (*xindx == 0) { if (pivreject == TRUE) retval = dyrPUNT ; else retval = dyrOPTIMAL ; } else { retval = dyrOK ; } # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 2) { if (*xindx != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: selected %s (%d) %s to leave, DSE price %g.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',*xindx,TRUE,NULL),*xindx, dy_prtvstat(dy_status[*xindx]),candbbari) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"\n (%s)%d: no suitable candidates.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } } if (dy_opts->print.pricing >= 1) { if (retval == dyrPUNT) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: all suitable x on rejected pivot list.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } } # endif return (retval) ; } static double ddirdothyper (int xindx, double *abari, int diri, int xqndx, int dirq) /* This routine is used in the context of dual anti-degen lite, where we're trying to choose the leaving dual variable based on the alignment of the hyperplane that will become tight relative to the desired dual direction of motion zeta. See extensive comments at the top of the file. The upshot of all the math is that dot(zeta,a) = abar for x leaving to become NBLB, and -abar for x leaving to become NBUB. In short, dot(zeta,a) = dir*abar. All we do here is normalise by ||a||. For convenience, the signs of the dot products are set as if we were dealing with <= constraints (i.e., the maximum positive value indicates a hyperplane that perfectly blocks motion in the direction of the edge). This entails multiplication of the dot product by -dir. There is no paranoid check, unlike the primal routine pdirdothyper. Since we calculated each abar as dot(beta,a), it seems a little pointless to repeat it here. We might still encounter empty columns, though, so we add 1 to ||a||. Parameters: xindx: index of x, the leaving primal variable (hence entering dual) abari: einv(B)N, calculated as betaa for a in N; the portions of zeta matching the w and v variables diri: direction of motion of x (matches direction of motion of entering dual) xqndx: index of x, the primal candidate to enter (hence candidate leaving dual) dirq: direction of motion of x (opposite the direction of motion of the leaving dual) Returns: -dir*dir*abar/||a||, or NaN if something goes awry. */ { double normaq,abariq,dotprod ; abariq = abari[xqndx] ; normaq = consys_2normcol(dy_sys,xqndx) ; dotprod = -dirq*diri*abariq/(normaq+1) ; setcleanzero(dotprod,dy_tols->zero) ; return (dotprod) ; } static double bdothyper (int xqndx, int dirq) /* This routine is used in the context of dual antidegen lite, where we're trying to choose the leaving dual variable based on the alignment of the hyperplane coming tight with the pivot relative to the direction that minimises the objective. See extensive comments at the head of the file. The routine calculates the dot product of -b' = [b -l u] with a constraint normal a', normalised by ||a'||. ||-b'|| doesn't change over the various candidates, so we don't need to include it in the normalisation for comparison purposes. A little care is required to orient the normal of the dual constraint. If x is NBLB, we're dealing with ya - w = c, viewed as a >= constraint. If x is NBUB, we're dealing with ya + v = c, viewed as a <= constraint. We want to have the maximum dot product when the hyperplane exactly blocks motion in the direction of the objective. Case analysis gives the calculation as dir*dot(constraint,[b -l u]), where `constraint' is replaced by the appropriate constraint normal. If x is a slack, we're talking about a leaving dual y, and the relevant constraint boils down to y >= 0 or y <= 0. Parameters: xqndx: x, the primal candidate for entry (hence the leaving dual) dirq: the direction of motion of x Returns: dir*dot(b',a')/||a'||, as described above, or NaN if the calculation goes awry. */ { double dotprod,normq ; /* If a dual is leaving, all we need to do is find the correct value in b. */ if (xqndx <= dy_sys->concnt) { dotprod = dy_sys->rhs[xqndx] ; } /* Otherwise, we need to calculate dot(b',a'), which breaks down as dot(b,a) plus the contribution due to w or v. */ else { dotprod = consys_dotcol(dy_sys,xqndx,dy_sys->rhs) ; normq = sqrt(consys_ssqcol(dy_sys,xqndx)+1) ; if (dirq > 0) dotprod += dy_sys->vlb[xqndx] ; else dotprod += dy_sys->vub[xqndx] ; dotprod = dotprod/normq ; } dotprod = dirq*dotprod ; setcleanzero(dotprod,dy_tols->zero) ; return (dotprod) ; } static dyret_enum dualin (int xindx, int outdir, int *xjndx, int *indir, double *abari, double maxabari, double **p_abarj) /* This routine selects the incoming variable x for a dual pivot. Recall that in the primal, where x = xbar - abardelta_x, we look for the limiting xbar s.t. xbar/abar is minimum over i to determine the leaving variable x. Without getting into the technicalities of the algebra (and playing fast and loose with the indices), the analogous calculation in the dual problem is y = cbar + abardelta_y, and we're looking to find the limiting cbar s.t. cbar/abar is minimum over the nonbasic columns. This will give us the leaving dual variable y. But it's impossible (short of a few pages) to do the explanation properly in the dual context, so I'll switch now to the primal context. x has been selected to leave at its upper/lower bound, and the corresponding direction of motion and total change have been determined. We're now looking for x to enter. After this pivot, the reduced cost of x will be cbar = -cbar/abar, where |cbar/abar| is the smallest such value over the nonbasic columns. cbar also has to have the right sign -- if x will end up out at its lower bound, cbar must end up positive; if x will be out at its upper bound, cbar must end up negative (we're minimising in the dylp primal, eh). Returning to the dual context for a second, dualin implements a version of anti-degen lite. Analogous to the primal case, the notion is that we want to keep tight the hyperplanes most closely aligned with where we want to go ([abar e]). But it gets complicated, largely because we're only running the dual implicitly, and you have to make up some pieces on the spot. See the comments at the head of the file, and in ddirdothyper. Since dy_cbar is updated in dseupdate, the test for loss of dual feasibility is performed there (might as well catch it as it happens). Parameters: xindx: index of the leaving variable x outdir: direction of movement of x, 1 if rising to lower bound -1 if falling to upper bound xjndx: (o) index of the entering variable x indir: (o) direction of movement for x, 1 if rising from lower bound -1 if falling from upper bound abari: row i of inv(B)N (the pivot row) maxabari: maximum value in abar p_abarj: (o) used to return the value of abar Returns: dyret_enum code, as follows: dyrOK: the pivot is (dual) nondegenerate dyrDEGEN: the pivot is (dual) degenerate dyrUNBOUND: the problem is dual unbounded (primal infeasible) (i.e., no incoming variable can be selected) dyrREQCHK: if the pivot a is a bogus number dyrMADPIV: if a fails the numerical stability test dyrFATAL: fatal confusion */ { int reject,xkndx,degencnt,dirk ; flags xkstatus ; double deltak,abarik,ratioik,deltamax,abarij,ratioij,bdotaj,bdotak ; bool newxj ; dyret_enum retval,confirm ; const char *rtnnme = "dualin" ; retval = dyrINV ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n (%s)%d: selecting entering variable", dy_prtlpphase(dy_lp->phase, TRUE),dy_lp->tot.iters+1) ; if (dy_opts->print.pivoting >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n %s (%d) leaving %s (%d) %s", consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx, consys_nme(dy_sys,'c',dy_var2basis[xindx],FALSE,NULL), dy_var2basis[xindx],(outdir > 0)?"increasing":"decreasing") ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tVariable\tcbar\tabar\tdelta\tDisp") ; } } # endif deltamax = dy_tols->inf ; *xjndx = 0 ; *indir = 0 ; abarij = 0 ; ratioij = quiet_nan(0) ; bdotaj = quiet_nan(0) ; dirk = 0 ; /* Open a loop to step through the variables. We skip basic variables and variables that are nonbasic fixed, but anyone else is eligible. If the status is ok, the second easy test is for abar = 0, in which case we're done with this column. Note that we shouldn't see superbasics here, as we're primal infeasible while running dual simplex and superbasics should not be created. Nor should we see nonbasic free variables except when their reduced cost is zero. dy_chkstatus enforces this when we're paranoid. */ newxj = FALSE ; degencnt = 0 ; bdotak = 0 ; for (xkndx = 1 ; xkndx <= dy_sys->varcnt ; xkndx++) { if (dy_lp->degen > 0 && dy_ddegenset[xkndx] != dy_lp->degen) continue ; xkstatus = dy_status[xkndx] ; # ifdef DYLP_PARANOIA if (dy_chkstatus(xkndx) == FALSE) return (dyrFATAL) ; # endif /* Do the tests to determine if this variable is a possible candidate: it cannot be basic or NBFX, the pivot abar must be large enough to be stable, and the sign of abar must be compatible with the direction of motion for x and x. Case analysis for cbar = -cbar/abar yields: * x rising to lb and leaving, cbar to be >= 0 + x nonbasic at l, c >= 0, implies abar must be <= 0 + x nonbasic at u, c <= 0, implies abar must be >= 0 * x dropping to ub and leaving, cbar to be <= 0 + x nonbasic at l, c >= 0, implies abar must be >= 0 + x nonbasic at u, c <= 0, implies abar must be <= 0 */ reject = 0 ; abarik = abari[xkndx] ; if (flgon(xkstatus,vstatBASIC|vstatNBFX)) { reject = -1 ; } else if (withintol(abarik,0.0,dy_tols->zero)) { reject = -2 ; } else { if (outdir == -1) { if ((flgon(xkstatus,vstatNBUB) && abarik > 0) || (flgon(xkstatus,vstatNBLB) && abarik < 0)) { reject = -3 ; } } else { if ((flgon(xkstatus,vstatNBUB) && abarik < 0) || (flgon(xkstatus,vstatNBLB) && abarik > 0)) { reject = -3 ; } } } # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 3 || (dy_opts->print.pivoting >= 2 && reject >= 0)) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%-8s (%d)", consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx) ; dyio_outfmt(dy_logchn,dy_gtxecho,"\t%g\t%g",dy_cbar[xkndx],abarik) ; } if (dy_opts->print.pivoting >= 3) { switch (reject) { case -1: /* basic/NBFX */ { dyio_outfmt(dy_logchn,dy_gtxecho,"\t\trejected -- status %s", dy_prtvstat(xkstatus)) ; break ; } case -2: /* zero pivot */ { dyio_outfmt(dy_logchn,dy_gtxecho,"\t\trejected -- zero pivot") ; break ; } case -3: /* incompatible sign */ { dyio_outfmt(dy_logchn,dy_gtxecho,"\t\trejected -- wrong sign") ; break ; } } } # endif /* If we've rejected x, get on to the next candidate, otherwise set the direction of entry and continue. */ if (reject < 0) continue ; if (outdir == -1) { if (abarik > 0) { dirk = 1 ; } else { dirk = -1 ; } } else { if (abarik > 0) { dirk = -1 ; } else { dirk = 1 ; } } /* Calculate the limit on the allowable delta for the entering dual imposed by this leaving dual. */ deltak = fabs(dy_cbar[xkndx]/abarik) ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\t%g",deltak) ; } # endif /* We have delta. Now, is x a better candidate to enter than the current incumbent x? If delta is really smaller, there's no contest. We do not want a toleranced comparison here --- small differences in delta multiplied by large abar can result in loss of feasibility elsewhere. */ ratioik = quiet_nan(0) ; if (deltak < deltamax) { newxj = TRUE ; ratioik = dy_chkpiv(abarik,maxabari) ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho," (%g)",deltamax-deltak) ; } # endif degencnt = 0 ; } /* If there's a tie, decide it based on the user's choice of antidegen lite options. See comments at the head of dy_primalpivot for more details on the decision criteria for AlignObj and AlignEdge. But if abar is an unsuitable pivot, don't even bother with further checks. */ else if (deltak == deltamax) { ratioik = dy_chkpiv(abarik,maxabari) ; if (ratioik >= 1.0) { switch (dy_opts->degenlite) { case 0: /* pivotabort */ { if (ratioik > ratioij) newxj = TRUE ; break ; } case 1: /* pivot */ { if (ratioik > ratioij) newxj = TRUE ; degencnt++ ; break ; } case 2: /* alignobj */ case 3: /* alignedge */ { if (dy_opts->degenlite == 2) { if (degencnt == 0) bdotaj = bdothyper(*xjndx,*indir) ; bdotak = bdothyper(xkndx,dirk) ; } else { if (degencnt == 0) bdotaj = ddirdothyper(xindx,abari,outdir,*xjndx,*indir) ; bdotak = ddirdothyper(xindx,abari,outdir,xkndx,dirk) ; } degencnt++ ; if (bdotaj > 0 && bdotak <= 0) { /* keep x */ } else if (bdotaj <= 0 && bdotak > 0) { newxj = TRUE ; } else if (fabs(bdotaj) > fabs(bdotak)) { newxj = TRUE ; } else if (bdotaj == bdotak) { if (ratioik > ratioij) newxj = TRUE ; } break ; } case 4: /* perpobj */ case 5: /* perpedge */ { if (dy_opts->degenlite == 4) { if (degencnt == 0) bdotaj = bdothyper(*xjndx,*indir) ; bdotak = bdothyper(xkndx,dirk) ; } else { if (degencnt == 0) bdotaj = ddirdothyper(xindx,abari,outdir,*xjndx,*indir) ; bdotak = ddirdothyper(xindx,abari,outdir,xkndx,dirk) ; } degencnt++ ; if (bdotak > bdotaj) newxj = TRUE ; break ; } } } } # ifndef DYLP_NDEBUG else { if (dy_opts->print.pivoting >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho," (%g)",deltamax-deltak) ; } } # endif /* If we've selected a new entering variable, make the changes. If the user's choice of antidegen lite option was pivotabort, maybe we can skip the rest of the scan. */ if (newxj == TRUE) { deltamax = deltak ; *xjndx = xkndx ; *indir = dirk ; abarij = abarik ; ratioij = ratioik ; bdotaj = bdotak ; newxj = FALSE ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\tentering from %s", (flgon(xkstatus,vstatNBUB))?"ub":"lb") ; } # endif if (dy_opts->degenlite == 0 && deltak == 0 && ratioij >= 1.0) break ; } } /* Why are we here? With luck, we have a nondegenerate (deltamax > 0) and numerically stable pivot abar. There are two other possibilities: the dual is unbounded (deltamax = infty), or we're degenerate (deltamax = 0). */ switch (retval) { case dyrINV: { if (deltamax < dy_tols->inf) { if (ratioij >= 1.0) { if (dy_lp->basis.etas > 1 && withintol(abarij,0,dy_tols->bogus*dy_tols->zero)) { retval = dyrREQCHK ; # ifndef DYLP_NDEBUG dywarn(381,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1,"abar",xindx,*xjndx,abarij, dy_tols->bogus*dy_tols->zero, dy_tols->bogus*dy_tols->zero-fabs(abarij)) ; # endif } else if (deltamax == 0) { retval = dyrDEGEN ; } else { retval = dyrOK ; } } else { retval = dyrMADPIV ; } } else { *xjndx = -1 ; retval = dyrUNBOUND ; } break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } } /* If we think this pivot is ok (including degenerate), confirm it. */ if (retval == dyrOK || retval == dyrDEGEN) { confirm = dy_confirmDualPivot(xindx,*xjndx,abari,maxabari,p_abarj) ; if (confirm != dyrOK) retval = confirm ; } /* We're done, except perhaps for printing some information. */ # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting == 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"...") ; } if ((retval == dyrOK || retval == dyrDEGEN) && dy_opts->print.pivoting >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n selected %s (%d) to enter from ", consys_nme(dy_sys,'v',*xjndx,FALSE,NULL),*xjndx) ; if (*indir > 0) { dyio_outfmt(dy_logchn,dy_gtxecho, " %s = %g, ","lb",dy_sys->vlb[*xjndx]) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, " %s = %g, ","ub",dy_sys->vub[*xjndx]) ; } dyio_outfmt(dy_logchn,dy_gtxecho, "abar<%d,%d> = %g, cbar<%d> = %g, delta = %g.", xindx,*xjndx,abarij,*xjndx,dy_cbar[*xjndx],deltamax) ; } if (retval == dyrDEGEN && dy_opts->print.dual >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: %s %s %s (%d), cbar<%d> = %g", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters+1, dy_prtdyret(retval),dy_prtvstat(dy_status[*xjndx]), consys_nme(dy_sys,'v',*xjndx,FALSE,NULL),*xjndx, *xjndx,dy_cbar[*xjndx]) ; if (dy_opts->degenlite >= 2 && dy_opts->degenlite <= 5) { if (degencnt > 0) { dyio_outfmt(dy_logchn,dy_gtxecho, ", align = %g, deg = %d.",bdotaj,degencnt) ; } } else { dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } } # endif return (retval) ; } static dyret_enum dseupdate (int xindx, int xjndx, int *candxi, double *tau, double *betai, double *abari, double *abarj) /* This routine handles the updates of rho = ||beta||^2 required for DSE pricing. It also updates cbar for the nonbasic variables, so that we don't have to recalculate them each time we return to the primal problem. Assuming for simplicity that x occupies row i of the basis, the update formula for rho is rho' = rho - 2*(abar/abar)*tau + (abar/abar)*rho k != i rho' = rho/abar^2 While we're doing the updates, we also select the next candidate to leave the basis. Because we need tau = dot(beta,beta) for all rows of the old basis inverse, this is precalculated before the pivot as inv(B)beta using dy_ftran, and passed in as the vector tau. To update the reduced costs, the formulae are cbar' = -cbar/abar cbar' = cbar - cbar*(abar/abar) k != i The major cost here is the scan of the nonbasic columns --- we've already taken the time and trouble to calculate abar. When antidegeneracy is active, we need to take care that we update only columns that are included in the restricted subproblem. REMEMBER that we've already pivoted, so x is now basic in pos'n i, and x is now nonbasic. Parameters: xindx: index of the leaving variable x xjndx: index of the entering variable x candxi: (o) index of the leaving variable for the next pivot tau: inv(B)beta betai: row i of the basis inverse abari: row i of inv(B)N abarj: column j of inv(B)N Returns: dyrOK if the update proceeds without error and a new leaving variable is selected dyrOPTIMAL if the update proceeds without error but there are no out-of-bound primal variables dyrPUNT if the update proceeds without error but the only out-of-bound primal variables are flagged as `do not pivot' dyrLOSTDFEAS if we detect loss of dual feasibility while updating the reduced costs dyrFATAL if there's a problem (only when we're paranoid) */ { int xipos,xkndx,xkpos ; double abarij,abarkj,cbarj,abarik,cbark,rhoi,rhok,alphak,candbbari,deltak ; double *betak ; flags xjstatus,xkstatus ; bool pivreject,recalc ; dyret_enum retval ; # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 const char *rtnnme = "dseupdate" ; # endif # ifndef DYLP_NDEBUG bool accurate,badguess ; # endif /* Do a little setup and pull out some common values. If we're feeling paranoid, check that a direct calculation of dot(beta,beta) matches the value we got from tau = inv(B)beta. */ *candxi = 0 ; candbbari = 0 ; pivreject = FALSE ; retval = dyrINV ; xipos = dy_var2basis[xjndx] ; abarij = abari[xjndx] ; cbarj = dy_cbar[xjndx] ; xjstatus = dy_status[xjndx] ; rhoi = tau[xipos] ; # ifdef DYLP_PARANOIA rhok = exvec_ssq(betai,dy_sys->concnt) ; if (!withintol(rhoi,rhok,dy_tols->zero*(1+rhok))) { if (!withintol(rhoi,rhok,dy_tols->zero+dy_tols->bogus*(1+rhok))) { errmsg(394,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,xipos,xipos,rhoi,xipos,rhok,fabs(rhoi-rhok), dy_tols->zero*dy_tols->bogus*(1+rhok)) ; return (dyrFATAL) ; } else { dywarn(394,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,xipos,xipos,rhoi,xipos,rhok,fabs(rhoi-rhok), dy_tols->zero*dy_tols->bogus*(1+rhok)) ; } } # endif /* Have we drifted so far that we should reset the norms from scratch? The test is that the iteratively updated norm rho is within dy_tols->reframe percent of the value tau = ||beta||^2 that we calculated as betainv(B). The PSE reframe tolerance is used here because it's handy, and because it's appropriately loose (default of .1). Once the norms are recalculated, execute a simplified loop to price a candidate. */ if (!withintol(dy_rho[xipos],rhoi,dy_tols->reframe*(1+rhoi))) { # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1 || dy_opts->print.dual >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n %s: (%s)%d: resetting DSE norms; trigger %s (%d), pos'n %d", dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx,xipos) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\texact rho = %g, approx = %g, error = %g, tol = %g.", rhoi,dy_rho[xipos],fabs(rhoi-dy_rho[xipos]), dy_tols->reframe*rhoi) ; } # endif dy_dseinit() ; for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { xkndx = dy_basis[xkpos] ; xkstatus = dy_status[xkndx] ; if (flgoff(xkstatus,vstatBLLB|vstatBUUB)) { # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tpricing %s (%d), status %s; << status >>", consys_nme(dy_sys,'v',xkndx,TRUE,NULL),xkndx, dy_prtvstat(xkstatus)) ; } # endif continue ; } dualpricexk(xkndx,candxi,&candbbari,&pivreject) ; } } /* If we didn't recalculate from scratch, open a loop to walk the basis and update the row norms rho. About the only guarantee we have for rho is that it's greater than zero. The observed numerical behaviour for this calculation is just awful. Try to anticipate particularly bad instances: rho large, roughly equal, and opposite sign to the iterative update; and abar/abar very large. */ else { dy_rho[xipos] = rhoi ; betak = NULL ; for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { recalc = FALSE ; xkndx = dy_basis[xkpos] ; if (xkpos == xipos) { rhok = rhoi/(abarij*abarij) ; if (fabs(abarij) < 1.0e-5) recalc = TRUE ; } else { abarkj = abarj[xkpos] ; if (abarkj != 0.0) { rhok = 0 ; if (fabs(abarkj/abarij) > 1.0e5) recalc = TRUE ; alphak = -(2*tau[xkpos]*abarkj)/abarij ; rhok += alphak ; alphak = (rhoi*abarkj*abarkj)/(abarij*abarij) ; rhok += alphak ; if (dy_rho[xkpos] > 1.0e8 && rhok < -1.0e8) recalc = TRUE ; rhok += dy_rho[xkpos] ; } else { rhok = dy_rho[xkpos] ; } } # ifdef CHECK_DSE_UPDATES /* This will return a fatal error only if CHECK_DSE_UPDATES is defined as FALSE and the update code did not recommend we recalculate. */ if (check_dse_update(xkndx,0.0,rhok,recalc) == FALSE) return (dyrFATAL) ; # endif /* If the update code recommended a recalculation, or rho ends up less than zero, we need to recalculate. */ if (recalc == TRUE || rhok < 0.0) { if (betak == NULL) { betak = (double *) CALLOC(dy_sys->concnt+1,sizeof(double)) ; } else { memset(betak,0,(dy_sys->concnt+1)*sizeof(double)) ; } betak[xkpos] = 1.0 ; dy_btran(betak) ; cbark = exvec_ssq(betak,dy_sys->concnt) ; # ifndef DYLP_NDEBUG if (withintol(rhok,cbark,dy_tols->cost*(1+cbark))) { accurate = TRUE ; } else { accurate = FALSE ; } if (accurate == recalc) badguess = TRUE ; else badguess = FALSE ; if (dy_opts->print.dual >= 5 || (dy_opts->print.dual >= 3 && accurate == FALSE && badguess == TRUE)) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t(%s)%d: recalculated rho<%d>; ", dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,xkpos) ; dyio_outfmt(dy_logchn,dy_gtxecho, "original %g, updated %g, correct %g, error %g;", dy_rho[xkpos],rhok,cbark,rhok-cbark) ; if (badguess == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho," bad guess.") ; } else { dyio_outfmt(dy_logchn,dy_gtxecho," good guess.") ; } } # endif dy_rho[xkpos] = cbark ; } else { dy_rho[xkpos] = rhok ; } /* Now that we've updated the norm, call dualpricexk to price the variable, supplanting the incumbent if that's appropriate. Variables that are within bound can be rejected out-of-hand. */ xkstatus = dy_status[xkndx] ; if (flgoff(xkstatus,vstatBLLB|vstatBUUB)) { # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tpricing %s (%d), status %s; << status >>", consys_nme(dy_sys,'v',xkndx,TRUE,NULL),xkndx, dy_prtvstat(xkstatus)) ; } # endif continue ; } dualpricexk(xkndx,candxi,&candbbari,&pivreject) ; } if (betak != NULL) FREE(betak) ; } /* That's it for the row norms. On to the primal reduced costs. We have to update cbar for all nonbasic variables x. When antidegeneracy is active, we update only the columns involved in the restricted subproblem. (If we're nonparanoid, we can also skip the update for NBFX, which will never be considered for reentry. But the paranoid check routines get very upset.) The update formulae are: cbar' = -cbar/abar cbar' = cbar - cbar*alpha where alpha = abar/abar. To avoid a special case for x, now nonbasic, note that prior to the pivot abar = inv(B)a = 1.0 and cbar = 0.0 (since x was basic). Set these values prior to entering the loop, and the general update formula for cbar' collapses properly to the special case for cbar', hence we don't need to check for x in the loop. For x, now basic, just set the reduced cost to 0. */ dy_cbar[xjndx] = 0.0 ; abari[xindx] = 1.0 ; dy_cbar[xindx] = 0.0 ; for (xkndx = 1 ; xkndx <= dy_sys->varcnt ; xkndx++) { if (dy_lp->degen > 0 && dy_ddegenset[xkndx] != dy_lp->degen) continue ; xkstatus = dy_status[xkndx] ; # ifdef DYLP_PARANOIA if (flgon(xkstatus,vstatBASIC)) continue ; # else if (flgon(xkstatus,vstatBASIC|vstatNBFX)) continue ; # endif abarik = abari[xkndx] ; deltak = cbarj*abarik/abarij ; if (deltak != 0) { cbark = dy_cbar[xkndx]-deltak ; if ((flgon(xkstatus,vstatNBLB) && cbark < -dy_tols->dfeas) || (flgon(xkstatus,vstatNBUB) && cbark > dy_tols->dfeas)) { retval = dyrLOSTDFEAS ; # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n lost dual feasibility, %s (%d) %s,", consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(xkstatus)) ; dyio_outfmt(dy_logchn,dy_gtxecho, " old = %g, new = %g, abarij = %g, delta = %g, tol = %g .", dy_cbar[xkndx],cbark,abarij,deltak,dy_tols->dfeas) ; } # endif } dy_cbar[xkndx] = cbark ; } # ifdef CHECK_DSE_UPDATES else { cbark = dy_cbar[xkndx] ; } if (check_dse_update(xkndx,cbark,0.0,FALSE) == FALSE) return (dyrFATAL) ; # endif } /* We're done. Time to set the proper return value. One possibility is that we've lost dual feasibility, and retval is set to dyrLOSTDFEAS. If retval is still dyrINV, look at x. If we have a new candidate to leave, set the return value to dyrOK. If we don't have a candidate, there are three possible reasons: * We have potential pivots on the reject list: pivreject == TRUE. We want to return dyrPUNT. * We're optimal. pivreject == FALSE. dyrOPTIMAL is the proper return value. * We saw some infeasible variables, but the infeasibility was within the bogus number tolerance. pivreject == FALSE. dyrOPTIMAL is still the correct return code (we'll end up doing a refactor in preoptimality, and the bogus numbers will either disappear, or we'll be back here ready to use them). If we're running multipivoting, we can cope with loss of dual feasibility. */ if (retval == dyrLOSTDFEAS) { if (dy_opts->dpsel.strat > 0) retval = dyrINV ; } if (retval == dyrINV) { if (*candxi == 0) { if (pivreject == TRUE) retval = dyrPUNT ; else retval = dyrOPTIMAL ; } else { retval = dyrOK ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 2) { if (*candxi != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: selected %s (%d) %s to leave, DSE price %g.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',*candxi,TRUE,NULL),*candxi, dy_prtvstat(dy_status[*candxi]),candbbari) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"\n (%s)%d: no suitable candidates.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } } if (dy_opts->print.pricing >= 1) { if (retval == dyrPUNT) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: all suitable x on rejected pivot list.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } } # endif return (retval) ; } static dyret_enum dualupdate (int xjndx, int indir, int xindx, int outdir, double *abarj, double *p_delta, double *betai) /* This routine is responsible for updating the various data structures which hold the basis, primal variable values and status, and dual variable values. Note that both abarj and betai are calculated based on the basis prior to pivoting, since this is what is used in the update formulas. Unfortunately, one problem we can't get over is dirty degeneracy. It may well be that x fails the primal feasibility test, but x/abar is less than the zero tolerance. As in the primal case, we force the pivot and let the various error correction mechanisms take over. We can't bail out in the middle of this routine if we think we've seen a bogus value (the basis is left with inconsistent status and will fail the subsequent status check). Parameters: xjndx: index of the entering variable x indir: the direction of change of the entering variable +1: rising (usually from lower bound) -1: falling (usually from upper bound) xindx: index of the leaving variable x outdir: the direction of change of the outgoing variable abarj: the ftran'd column abar = inv(B)a p_delta: (o) absolute value of change in x betai: row i of inv(B) Returns: dyrOK if there are no glitches, dyrSWING for excessive growth of a primal variable value, dyrREQCHK if one of the newly calculated values looks bogus. dyrFATAL can be returned if we're paranoid and fail a check. */ { int xkpos,xkndx,xipos ; double deltai,xi,lbi,ubi ; double xj,cbarj,deltaj,abarij,ubj,lbj ; double deltak,yk ; flags stati,statj ; dyret_enum retval,upd_retval ; bool swing ; int swingndx ; double swingratio,maxswing ; const char *rtnnme = "dualupdate" ; # ifdef DYLP_PARANOIA double epsl,epsu ; # endif # ifndef DYLP_NDEBUG flags statk ; # endif retval = dyrOK ; swing = FALSE ; maxswing = 0 ; swingndx = -1 ; statj = dy_status[xjndx] ; xj = dy_x[xjndx] ; lbj = dy_sys->vlb[xjndx] ; ubj = dy_sys->vub[xjndx] ; cbarj = dy_cbar[xjndx] ; xipos = dy_var2basis[xindx] ; stati = dy_status[xindx] ; xi = dy_xbasic[xipos] ; lbi = dy_sys->vlb[xindx] ; ubi = dy_sys->vub[xindx] ; abarij = abarj[xipos] ; # ifdef DYLP_PARANOIA /* The incoming variable should have status NBLB, NBUB, or NBFR. The dual simplex isn't prepared to deal with SB (not dual feasible) or NBFX (shouldn't be entering). The outgoing variable should have status BUUB or BLLB (i.e., it's primal infeasible). */ if (!flgon(statj,vstatNBLB|vstatNBUB|vstatNBFR)) { errmsg(355,rtnnme,dy_sys->nme,consys_nme(dy_sys,'v',xjndx,FALSE,NULL), xjndx,dy_prtvstat(statj)) ; return (dyrFATAL) ; } if (!flgon(stati,vstatBLLB|vstatBUUB)) { errmsg(349,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx,xi, dy_prtvstat(stati),lbi,ubi) ; return (dyrFATAL) ; } /* If x is within bounds, we're confused -- what are we doing trying to pivot on a primal variable that's already feasible? */ if (withinbnds(lbi,xi,ubi)) { errmsg(358,rtnnme,dy_sys->nme,consys_nme(dy_sys,'v',xindx,FALSE,NULL), xindx,lbi,xi,ubi,abarij) ; return (dyrFATAL) ; } # endif /* A little setup -- extract the pivot and calculate the actual change in x required to drive x to bound. */ if (outdir > 0) { deltai = lbi-xi ; } else { deltai = ubi-xi ; } setcleanzero(deltai,dy_tols->zero) ; if (deltai != 0) { deltaj = -deltai/abarij ; setcleanzero(deltaj,dy_tols->zero) ; # ifndef DYLP_NDEBUG if (deltaj == 0 && dy_opts->print.pivoting >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n %s (%d) = %g, %s, leaving at %s, dirty degenerate pivot.", consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx,xi, dy_prtvstat(stati),(outdir < 0)?"ub":"lb") ; } # endif } else { deltaj = 0 ; } *p_delta = fabs(deltaj) ; # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n (%s)%d: dual update:", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters+1) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t%s (%d) entering pos'n %d from %s %g, delta %g, cbarj %g.", consys_nme(dy_sys,'v',xjndx,FALSE,NULL),xjndx,xipos, (indir == 1)?"lb ":"ub ",xj,deltaj,cbarj) ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%s (%d) = %g leaving at ", consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx,xi) ; if (outdir == 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"lb %g, pivot %g.",lbi,abarij) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"ub %g, pivot %g.",ubi,abarij) ; } } # endif /* Update the objective and the value and status of the basic variables to reflect the change in x. The calculation is straightforward, from the formulas: z = cinv(B) - (c - cinv(B)a)*delta x = inv(B)b - (inv(B)a)*delta dy_updateprimals does the heavy lifting. It should not return dyrFATAL here, as we're providing abarj, but the code is prepared for it. We can suppress the change to the objective if x is in a restricted subproblem, because we know it got there with cbar = 0. (Various paranoid accuracy checks are happier this way.) */ if (deltaj != 0) { if (dy_ddegenset[xjndx] == 0) { dy_lp->z += cbarj*deltaj ; } upd_retval = dy_updateprimals(xjndx,deltaj,abarj) ; switch (upd_retval) { case dyrOK: { break ; } case dyrSWING: { swing = TRUE ; swingndx = dy_lp->ubnd.ndx ; maxswing = dy_lp->ubnd.ratio ; break ; } case dyrREQCHK: { retval = dyrREQCHK ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; retval = dyrFATAL ; break ; } } stati = dy_status[xindx] ; xi = dy_x[xindx] ; # ifdef DYLP_PARANOIA /* Consider the result. x should end up at bound (BLB, BUB, or BFX). */ if (flgoff(stati,vstatBLB|vstatBFX|vstatBUB)) { deltak = abarij*deltaj ; if (fabs(ubi-xi) < fabs(lbi-xi)) { epsu = snaptol2(fabs(deltak),fabs(ubi)) ; if (fabs(ubi-xi) < 100*epsu) { dywarn(357,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx, dy_prtvstat(stati),"ub",ubi,xi,xi-ubi,epsu) ; } else { errmsg(357,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx, dy_prtvstat(stati),"ub",ubi,xi,xi-ubi,epsu) ; return (dyrFATAL) ; } } else { epsl = snaptol2(fabs(deltak),fabs(lbi)) ; if (fabs(lbi-xi) < 100*epsl) { dywarn(357,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx, dy_prtvstat(stati),"lb",lbi,xi,lbi-xi,epsl) ; } else { errmsg(357,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx, dy_prtvstat(stati),"lb",lbi,xi,lbi-xi,epsl) ; return (dyrFATAL) ; } } } # endif } /* The `dirty degeneracy' case. Force x to the appropriate (basic) status. Other basic variables are unchanged. */ else { if (lbi == ubi) { stati = vstatBFX ; } else if (outdir > 0) { stati = vstatBLB ; } else { stati = vstatBUB ; } dy_status[xindx] = stati ; } if (retval == dyrFATAL) return (dyrFATAL) ; /* Deal with the entering and leaving variables. The first thing we do is update dy_basis and dy_var2basis. The leaving variable x still appeared to be basic as far as updateprimals was concerned, so all that remains is to change from basic to nonbasic status and force the value exactly to bound. If we've come a long way to get to bound, we might miss by a bit. */ dy_var2basis[xjndx] = xipos ; dy_var2basis[xindx] = 0 ; dy_basis[xipos] = xjndx ; if (flgon(dy_status[xindx],vstatBFX)) { stati = vstatNBFX ; xi = lbi ; } else if (flgon(dy_status[xindx],vstatBLB)) { stati = vstatNBLB ; xi = lbi ; } else if (flgon(dy_status[xindx],vstatBUB)) { stati = vstatNBUB ; xi = ubi ; } else { if (lbi == ubi) { stati = vstatNBFX ; xi = lbi ; } else if (fabs(xi-lbi) < fabs(xi-ubi)) { stati = vstatNBLB ; xi = lbi ; } else { stati = vstatNBUB ; xi = ubi ; } retval = dyrREQCHK ; # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: Forced leaving variable %s (%d) = %g", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx,dy_x[xindx]) ; dyio_outfmt(dy_logchn,dy_gtxecho," to %s bound %g, error %g;", (stati == vstatNBUB)?"upper":"lower", xi,fabs(dy_x[xindx]-xi)) ; dyio_outfmt(dy_logchn,dy_gtxecho," recommending request refactor.") ; } # endif } dy_status[xindx] = stati ; dy_x[xindx] = xi ; /* For the entering variable x, it's a matter of retrieving the value, adding deltaj, and setting the appropriate status. Because dylp occasionally wants to make nonstandard dual pivots, we need to allow for the possibility that x will enter and go out of bound. */ if (deltaj != 0) { if (flgon(statj,vstatNBLB)) { xj = lbj+deltaj ; } else if (flgon(statj,vstatNBUB)) { xj = ubj+deltaj ; } else { xj = deltaj ; } setcleanzero(xj,dy_tols->zero) ; /* Choose a new status for x. The tests for abovebnd and belowbnd will use the feasibility tolerance. Check for bogus numbers and excessive swing. */ if (flgon(statj,vstatNBFR)) { statj = vstatBFR ; } else { if (belowbnd(xj,ubj)) { if (abovebnd(xj,lbj)) { statj = vstatB ; } else if (belowbnd(xj,lbj)) { statj = vstatBLLB ; } else { statj = vstatBLB ; } } else { if (abovebnd(xj,ubj)) { statj = vstatBUUB ; } else { statj = vstatBUB ; } } if (flgon(statj,vstatBLB|vstatBUB) && lbj == ubj) { statj = vstatBFX ; } } if (dy_lp->basis.etas > 1 && dy_tols->bogus > 1.0 && xj != 0.0 && flgoff(statj,vstatBLB|vstatBFX|vstatBUB)) { if (fabs(xj) < dy_tols->zero*dy_tols->bogus) { retval = dyrREQCHK ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) dywarn(374,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"x",xjndx,fabs(xj),dy_tols->zero*dy_tols->bogus, dy_tols->zero*dy_tols->bogus-xj) ; # endif } } if (flgon(statj,vstatBLLB|vstatBUUB)) { swingratio = (fabs(xj)+1)/(fabs(dy_x[xjndx])+1) ; if (swingratio > dy_tols->swing) { swing = TRUE ; if (swingratio > maxswing) { maxswing = swingratio ; swingndx = xjndx ; } } } } /* If we're dealing with a dirty degenerate pivot, the whole affair is much simpler --- just change the status of x from nonbasic to basic. */ else { if (flgon(statj,vstatNBLB)) { statj = vstatBLB ; xj = lbj ; } else { statj = vstatBUB ; xj = ubj ; } } dy_status[xjndx] = statj ; dy_x[xjndx] = xj ; dy_xbasic[xipos] = xj ; # ifdef DYLP_PARANOIA { deltak = dy_calcobj() ; if (fabs(deltak-dy_lp->z) > fabs(.001*(1+fabs(deltak)))) { dywarn(405,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1,dy_lp->z,deltak,fabs(dy_lp->z-deltak), fabs(.001*deltak)) ; } } # endif /* Update the dual variables. The derivation of these formulas is straightforward once you've seen it, but more than can be explained here. See the technical documentation or a text. If antidegeneracy is active, we want to be careful to only update duals associated with the restricted subproblem. These will be duals for constraints whose logicals are part of the subproblem. If we were in dual land, maintaining a dual basis, we'd have marked the basis pos'n and variables would slide in and out of it. But here, we have to move the marker from the leaving dual variable (xjndx) to the entering dual variable (xindx). */ if (dy_lp->degen > 0) { xkpos = dy_ddegenset[xindx] ; dy_ddegenset[xindx] = dy_ddegenset[xjndx] ; dy_ddegenset[xjndx] = xkpos ; } if (fabs(cbarj) > dy_tols->cost) { for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { xkndx = dy_basis[xkpos] ; if (dy_lp->degen > 0 && dy_ddegenset[xkndx] < dy_lp->degen) continue ; deltak = cbarj*betai[xkpos] ; deltak = deltak/abarij ; yk = dy_y[xkpos]+deltak ; dy_y[xkpos] = yk ; } } /* Decide on a return value. Swing overrides the others, as it'll cause us to pop out of simplex. But if there are no loadable constraints or variables, well, let's not, eh? */ if (swing == TRUE) { if (dy_lp->sys.cons.loadable > 0 || dy_lp->sys.vars.loadable > 0) { retval = dyrSWING ; } dy_lp->ubnd.ndx = swingndx ; dy_lp->ubnd.ratio = maxswing ; # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 2) { xkndx = dy_lp->ubnd.ndx ; statk = dy_status[xkndx] ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n Pseudo-unbounded: growth %e for %s (%d) %s = %g", dy_lp->ubnd.ratio, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(statk),dy_x[xkndx]) ; if (flgon(statk,vstatBUUB)) { dyio_outfmt(dy_logchn,dy_gtxecho," > %g.",dy_sys->vub[xkndx]) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho," < %g.",dy_sys->vlb[xkndx]) ; } } # endif } # ifndef DYLP_NDEBUG /* That's it, except for some informational printing. */ if (dy_opts->print.dual >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\trevised objective %g.",dy_lp->z) ; # ifdef DYLP_PARANOIA deltak = dy_calcobj() ; if (!atbnd(deltak,dy_lp->z)) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tWHOOPS! updated obj - true obj = %g - %g = %g > %g", dy_lp->z,deltak,dy_lp->z-deltak,dy_tols->dchk) ; # endif if (deltaj != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n revised dual variables, cbar tolerance %g", dy_tols->dfeas) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n%8s%20s%16s","pos'n","constraint","val") ; for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { if (betai[xkpos] != 0) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%8d%20s%16.8g",xkpos, consys_nme(dy_sys,'c',xkpos,FALSE,NULL), dy_y[xkpos]) ; } } } } # endif /* DYLP_NDEBUG */ return (retval) ; } dyret_enum dy_dualpivot (int xindx, int outdir, int *p_xjndx, int *p_indir, double *p_cbarj, double *p_abarij, double *p_delta, int *p_xicand) /* This routine executes a dual pivot given the leaving variable x (assume for simplicity that x occupies basis posn i). The first action is to call dualpivrow to calculate beta (row i of inv(B)) and abar (row i of inv(B)N). Then dualin is called to select the entering variable x. There follows some mathematical prep, then dy_pivot performs the actual pivot, followed by dualupdate and dseupdate to update the variables and DSE pricing information. Under normal circumstances, when dy_dualpivot is called x is not specified. However, dy_dualpivot can be called from dy_dualaddvars when it attempts to activate and immediately pivot a variable that isn't dual feasible. In this case, dy_dualaddvars will specify x at the call, and it may be the case that the entering variable is rising from its upper bound or falling from its lower bound. dualmultiin can also return a pivot of this nature --- it provides a way of dealing with the case where the reduced cost has the wrong sign, but is within the dual feasibility tolerance. Parameters: xindx: index of the leaving variable x outdir: direction of motion of x 1: rising to lower bound -1: falling to upper bound p_xjndx: (i) index of entering variable x, or <= 0 if the entering variable should be selected here (o) index of the entering variable x p_indir: (i) direction of motion of x, if x has been selected (o) direction of motion of x 1: rising (usually from lower bound) -1: falling (usually from upper bound) p_cbarj: (o) reduced cost of entering variable p_abarij: (o) pivot coefficient p_delta: (o) change in x p_xicand: (o) index of the variable selected to leave on the next pivot Returns: dyret_enum code, as follows: successful pivots: dyrOK: The pivot completed successfully and a new x was selected. dyrDEGEN: (dualin) A dual degenerate pivot completed successfully and a new x was selected. dyrOPTIMAL: (dseupdate) The pivot completed successfully, and no candidate x could be selected because all variables are primal feasible. dyrPUNT: (dseupdate) The pivot completed successfully, but no candidate x could be selected because all candidates were flagged as NOPIVOT. dyrREQCHK: (dualupdate) The pivot completed successfully, but a bogus value was calculated during primal and dual variable updating. unsuccessful (aborted) pivots: dyrREQCHK: (dualin) The pivot coefficient is a bogus number, and a refactor is requested before it's used. dyrMADPIV: The pivot coefficient was judged (numerically) unstable (dualin, possibly dy_pivot). dyrRESELECT: (dualmultiin) special circumstances have caused dualmultiin to abort the pivot and request reselection of the leaving variable. dyrUNBOUND: The problem is dual unbounded (primal infeasible) (dualin). dyrLOSTDFEAS: Dual feasibility has been lost (dseupdate). dyrSINGULAR: The pivot resulted in a singular basis (dy_pivot). dyrBSPACE: basis package ran out of room to work (dy_pivot). dyrFATAL: Fatal confusion (data structure error, internal confusion, etc.) (various sources) */ { int xipos,xjndx,indir,degen_cyclecnt ; double *betai,*abari,*tau,maxabari,*abarj ; dyret_enum retval,inretval,dseretval,confirm ; bool validxj,reselect,patch ; flags factorflgs ; const char *rtnnme = "dy_dualpivot" ; extern dyret_enum dualmultiin (int xindx, int outdir, int *p_xjndx, int *p_indir, double *abari, double maxabari, double **p_abarj) ; # ifdef DYLP_PARANOIA int chkduallvl = 2 ; dy_chkdual(chkduallvl) ; # endif /* Setup. If the leaving variable isn't specified, assume a normal dual pivot with x leaving at its near bound. If x is specified, indir should also be valid. */ retval = dyrINV ; if (*p_xjndx <= 0) { *p_xjndx = -1 ; *p_indir = 0 ; validxj = FALSE ; } else { validxj = TRUE ; } *p_cbarj = 0 ; *p_abarij = quiet_nan(0) ; *p_delta = quiet_nan(0) ; *p_xicand = -1 ; abarj = NULL ; xipos = dy_var2basis[xindx] ; # ifndef DYLP_NDEBUG /* Print some information about the pivot, should the user want it. */ if (dy_opts->print.pivoting >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: x<%d> (%s) leaving pos'n %d (%s), status %s, %s from %g, ", rtnnme,xindx,consys_nme(dy_sys,'v',xindx,FALSE,NULL), xipos,consys_nme(dy_sys,'c',xipos,FALSE,NULL), dy_prtvstat(dy_status[xindx]), (outdir < 0)?"decreasing":"increasing",dy_x[xindx]) ; dyio_outfmt(dy_logchn,dy_gtxecho,"lb = %g, ub = %g.", dy_sys->vlb[xindx],dy_sys->vub[xindx]) ; } # endif /* Do the prep work. Allocate some space for beta and abar, then call dualpivrow to do the calculations. */ betai = (double *) CALLOC(dy_sys->concnt+1,sizeof(double)) ; abari = (double *) CALLOC(dy_sys->varcnt+1,sizeof(double)) ; if (dualpivrow(xipos,betai,abari,&maxabari) == FALSE) { errmsg(392,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,xipos,xipos, consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx) ; FREE(betai) ; FREE(abari) ; return (dyrFATAL) ; } /* If we don't have x, try to select an entering variable. This can be simple selection of one variable for a standard pivot (dualin) or a more complex process which can do bound-to-bound flips of primal variables on the way to a final pivot (dualmultiin). A loop is required to handle the possible installation/removal of a restricted, perturbed subproblem as an antidegeneracy measure. There are some pathologies to deal with, hence the need for degen_cyclecnt and the check for an existing abarj. The possible results from entering variable selection are: * dyrOK, dyrDEGEN: a valid (if degenerate) pivot. xjndx and indir are valid. dyrDEGEN may cause the installation of a restricted perturbed subproblem, in which case the selection loop will iterate and we'll try again to select an entering variable. * dyrUNBOUND indicates dual unboundedness. If antidegeneracy is active, we'll remove one level and try again to select an entering variable. If antidegeneracy isn't active, we're really dual unbounded (primal infeasible) and will kick the problem back to the caller. * dyrREQCHK indicates that the selected pivot abar is a bogus number, and requests a refactor before we actually try to use it. dyrMADPIV indicates it failed the pivot stability test. dyrFATAL covers any remaining sins. All are returned to the caller. */ if (validxj == FALSE) { reselect = TRUE ; degen_cyclecnt = 0 ; while (reselect) { if (abarj != NULL) { FREE(abarj) ; abarj = NULL ; } if (dy_opts->dpsel.strat > 0) { inretval = dualmultiin(xindx,outdir,&xjndx,&indir, abari,maxabari,&abarj) ; } else { inretval = dualin(xindx,outdir,&xjndx,&indir, abari,maxabari,&abarj) ; } switch (inretval) { /* dualin returns dyrOK We have an uncomplicated, nondegenerate pivot. Yeah! */ case dyrOK: { reselect = FALSE ; break ; } /* dualin returns dyrDEGEN Do we want (and are we allowed) to activate the antidegeneracy mechanism? If so, set up and perturb the restricted subproblem and then repeat the pivot selection. In order to create a restricted subproblem, opts.degen must permit it, and we must have executed opts.degenpivlim successive degenerate and nonconstructive pivots. The idea is to activate the antidegeneracy algorithm only when we have serious degeneracy involving dual constraints where we can perturb the objective coefficients (which we accomplish by the equivalent action of perturbing the values of the reduced costs). To this end, we exclude degenerate pivots where a fixed variable is leaving. The rules for selecting an incoming variable guarantee it won't come back. It's possible, when we fall through to the last case because we're forcing a degenerate pivot, that dualmultiin has not set abarj. Make sure we deal with it. */ case dyrDEGEN: { if (flgon(dy_status[xindx],vstatBFX) || flgon(dy_status[xjndx],vstatNBFR)) { reselect = FALSE ; # ifndef DYLP_NDEBUG if (dy_opts->print.degen >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: constructive degenerate pivot.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%s %s (%d) leaving,", dy_prtvstat(dy_status[xindx]), consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx) ; dyio_outfmt(dy_logchn,dy_gtxecho," %s %s (%d) entering %d.", dy_prtvstat(dy_status[xjndx]), consys_nme(dy_sys,'v',xjndx,FALSE,NULL),xjndx) ; } # endif } else if (dy_opts->degen == TRUE && degen_cyclecnt == 0 && dy_opts->degenpivlim < dy_lp->degenpivcnt) { # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1 || dy_opts->print.degen >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: antidegeneracy increasing to level %d.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_lp->degen+1) ; } # endif dualdegenin() ; degen_cyclecnt++ ; } else { reselect = FALSE ; if (abarj == NULL) { confirm = dy_confirmDualPivot(xindx,xjndx, abari,maxabari,&abarj) ; if (confirm == dyrOK) { inretval = dyrDEGEN ; } else { inretval = confirm ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.degen >= 2 && degen_cyclecnt > 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: forced degenerate pivot after %d cycles;", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, degen_cyclecnt) ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%s %s (%d) entering.", dy_prtvstat(dy_status[xjndx]), consys_nme(dy_sys,'v',xjndx,FALSE,NULL),xjndx) ; } else if (dy_opts->print.degen >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: degenerate pivot; %s %s (%d) entering.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_prtvstat(dy_status[xjndx]), consys_nme(dy_sys,'v',xjndx,FALSE,NULL),xjndx) ; } # endif } break ; } /* dualin returns dyrUNBOUND Are we currently coping with degeneracy? If not, the problem is truly unbounded and we need to return to some higher level to deal with it. If there's a restricted subproblem installed, we've discovered a breakout direction from the degenerate vertex, and need to reselect the leaving variable after backing out the restricted subproblem. (Presumably we'll find a limiting variable in the full problem.) */ case dyrUNBOUND: { if (dy_lp->degen > 0) { # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1 || dy_opts->print.degen >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: backing out level %d after %d pivots, unbounded.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_lp->degen, dy_lp->tot.pivs-degenstats.iterin[dy_lp->degen]) ; } # endif dy_dualdegenout(dy_lp->degen-1) ; reselect = TRUE ; } else { reselect = FALSE ; } break ; } /* Remaining cases, and end of the pivot selection loop. If dualin returned anything other than dyrOK, dyrUNBOUND, or dyrDEGEN, it'll fall through to here and we'll punt back to the caller. dyrREQCHK and dyrMADPIV will have selected a pivot, but it's got problems. dualmultiin can on occasion request reselection of the leaving variable (dyrRESELECT). */ case dyrRESELECT: case dyrMADPIV: case dyrREQCHK: case dyrFATAL: { reselect = FALSE ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; reselect = FALSE ; break ; } } } /* We have a pivot (or an error). Set the return values. We set p_delta to NaN here just to give it a value. The call to dualupdate calculates the authoritative value. */ if (inretval == dyrOK || inretval == dyrDEGEN || inretval == dyrREQCHK || inretval == dyrMADPIV || inretval == dyrRESELECT) { *p_xjndx = xjndx ; *p_indir = indir ; *p_cbarj = dy_cbar[xjndx] ; *p_abarij = abari[xjndx] ; *p_delta = quiet_nan(0) ; } } /* If dy_dualpivot was called with a valid x, it's just a matter of making things look good here. Call dy_confirmDualPivot to get abarj and check the pivot's suitabillity */ else { xjndx = *p_xjndx ; indir = *p_indir ; *p_cbarj = dy_cbar[xjndx] ; *p_abarij = abari[xjndx] ; inretval = dy_confirmDualPivot(xindx,xjndx,abari,maxabari,&abarj) ; if (inretval == dyrOK && dy_cbar[xjndx] == 0) { inretval = dyrDEGEN ; } *p_delta = quiet_nan(0) ; } /* Send the errors back to the caller. */ if (!(inretval == dyrOK || inretval == dyrDEGEN)) { if (inretval == dyrMADPIV) { (void) dy_addtopivrej(xindx,dyrMADPIV,*p_abarij,maxabari) ; } FREE(betai) ; FREE(abari) ; if (abarj != NULL) FREE(abarj) ; return (inretval) ; } /* Dual degenerate pivot? If not, reset the successive degenerate pivot count. Note that this differs from the primal action, where pivoting a BFX or NBFR variable resets degenpivcnt. Here, we'll never see NBFR (not dual feasible) nor BFX (primal feasible). We could trap this later (leaving variable goes to NBFX status) but it turns out to be better to let antidegeneracy kick in based on dual simplex criteria. */ if (inretval == dyrOK) { dy_lp->degenpivcnt = 0 ; } else { dy_lp->degenpivcnt++ ; } # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n x<%d> (%s) entering, status %s, %s from %s = %g, ", xjndx,consys_nme(dy_sys,'v',xjndx,FALSE,NULL), dy_prtvstat(dy_status[xjndx]), (indir < 0)?"decreasing":"increasing", ((flgon(dy_status[xjndx],vstatNBUB))?"ub": ((flgon(dy_status[xjndx],vstatNBLB))?"lb":"x")), dy_x[xjndx]) ; } # endif /* Time to attempt the pivot. We first calculate a vector tau = inv(B)beta, which we'll use in dseupdate. */ tau = (double *) MALLOC((dy_sys->concnt+1)*sizeof(double)) ; memcpy(tau,betai,(dy_sys->concnt+1)*sizeof(double)) ; dy_ftran(tau,FALSE) ; /* Attempt the pivot to update the LU factorisation. This can fail for three reasons: the pivot element didn't meet the numerical stability criteria (we've already checked this, but the check's not foolproof), the pivot produced a singular or near-singular basis, or the basis package ran out of space. If we fail, and we've done flips as part of a multipivot, we have a problem. There's no easy way to back out the flips, and without the pivot we've almost certainly lost dual feasibility. For near-singularity (dyrNUMERIC) or lack of space (dyrBSPACE), we can try to refactor and recalculate the primals and duals, then try the pivot again. All this worked before, up to the pivot attempt, so assume it'll work again. If the pivot fails a second time, well, at least we tried. For the rest, dylp's error recovery algorithms will cope, but it'll be ugly. */ retval = dy_pivot(xipos,abarj[xipos],maxabari) ; if (retval == dyrBSPACE || retval == dyrNUMERIC) { factorflgs = ladPRIMALS|ladDUALS ; patch = dy_opts->patch ; dy_opts->patch = FALSE ; dseretval = dy_factor(&factorflgs) ; dy_opts->patch = patch ; if (dseretval == dyrOK) { FREE(abarj) ; abarj = NULL ; (void) consys_getcol_ex(dy_sys,xjndx,&abarj) ; dy_ftran(abarj,TRUE) ; retval = dy_pivot(xipos,abarj[xipos],maxabari) ; if (retval == dyrNUMERIC) retval = dyrSINGULAR ; } else { if (dseretval == dyrNUMERIC) { retval = dyrSINGULAR ; } else { retval = dseretval ; } } } /* If the basis is successfully pivoted, we need to do updates. Call dualupdate to do the primal and dual variables. If that works, call dseupdate to update dual steepest edge information and choose a leaving variable for the next iteration. In terms of return values, dualupdate can return dyrOK, dyrREQCHK, dyrSWING, or dyrFATAL. dyrFATAL will pop us out of simplex, so we can skip dseupdate. dseupdate can return dyrOK, dyrOPTIMAL, dyrLOSTDFEAS, dyrPUNT, or dyrFATAL. The only possibilities for inretval at this point are dyrOK and dyrDEGEN. Basically, we're trying to return the most interesting value, resorting to the bland dyrOK only if nothing else turns up. */ if (retval == dyrOK) { dy_lp->pivok = TRUE ; retval = dualupdate(xjndx,indir,xindx,outdir,abarj,p_delta,betai) ; if (retval == dyrOK || retval == dyrREQCHK || retval == dyrSWING) { dseretval = dseupdate(xindx,xjndx,p_xicand,tau,betai,abari,abarj) ; if (dseretval != dyrOK) retval = dseretval ; } if (retval == dyrOK) retval = inretval ; # ifdef DYLP_PARANOIA dy_chkdual(chkduallvl) ; # endif } /* Tidy up and return. */ FREE(abarj) ; FREE(abari) ; FREE(betai) ; FREE(tau) ; return (retval) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_bound.c0000644000175200017520000016214111507440660015341 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains routines which attempt to deal with an unbounded simplex problem. For both primal and dual simplex, this entails adding constraints. The goal, in each case, is to find constraints that will bound the problem without losing feasibility. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_bound.c 4.6 11/11/04" ; static char svnid[] UNUSED = "$Id: dy_bound.c 407 2010-12-31 20:48:48Z lou $" ; # if 0 /* debug routine */ int dbg_scanPrimConBndAct (consys_struct *orig_sys, int act_j, int **p_ocndxs) /* An modified version of scanPrimConBndAct that simply scans all the constraints in orig_sys. This routine scans the original constraint system looking for constraints that can bound motion in the direction -etadelta, where delta is the change in the variable x and eta is the jth column of the matrix trans(inv(B)N -I). (trans(*) is matrix transpose.) This derives from the relation trans(x x) = trans(inv(B)b l/u) - trans(inv(B)N -I)deltax where l/u is the upper or lower bound, as appropriate, for the nonbasic variables. When we choose the entering variable x, deltax becomes a vector of zeros, with delta in the proper position. This selects column j of trans(inv(B)N -I) = eta. Parameters: orig_sys: The original constraint system act_j: index (in dy_sys) of the offending column; negated if the variable is decreasing p_ocndxs: (i) empty vector to hold constraint indices; assumed sufficiently large if non-NULL; if *p_ocndxs = NULL, allocated if necessary; if p_ocndxs = NULL, nothing is returned. (o) indices of constraints to be activated; may not be allocated if no constraints are identified Returns: number of candidates for activation, -1 if error. */ { int i,j,k,bpos,m,n,act_m,actcnt,cand_limit,dir,retval,save_print ; int *ocndxs ; double *abarj ; double *orig_x,*orig_rhs,*orig_rhslow,*orig_vub,*orig_vlb,*orig_etaj ; double idotj,lhsi,rhsi,rhslowi ; contyp_enum *orig_ctyp,ctypi ; flags statj ; bool activate ; const char *rtnnme = "dbg_scanPrimConBndAct" ; # ifdef DYLP_PARANOIA if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (-1) ; } # endif save_print = dy_opts->print.conmgmt ; dy_opts->print.conmgmt = 4 ; /* Set the multiplier for eta. If x is increasing, we'd normally multiply by -1. To compensate for decreasing (negative) motion, change dir to +1. */ if (act_j < 0) { dir = 1 ; act_j = -act_j ; } else { dir = -1 ; } # ifdef DYLP_PARANOIA if (act_j < 1 || act_j > dy_sys->varcnt) { errmsg(102,rtnnme,"active variable",act_j,1,dy_sys->varcnt) ; return (-1) ; } # endif /* The first thing to do is to calculate abar = inv(B)a. */ abarj = NULL ; if (consys_getcol_ex(dy_sys,act_j,&abarj) == FALSE) { errmsg(122,rtnnme,dy_sys->nme, "column",consys_nme(dy_sys,'v',act_j,TRUE,NULL),act_j) ; if (abarj != NULL) FREE(abarj) ; return (-1) ; } dy_ftran(abarj,FALSE) ; # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n eta for %s (%d) %s:", consys_nme(dy_sys,'v',act_j,FALSE,NULL),act_j, (dir < 0)?"increasing":"decreasing") ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n%8s%20s%16s","pos'n","var (ndx)","eta") ; for (bpos = 1 ; bpos <= dy_sys->concnt ; bpos++) { if (abarj[bpos] != 0) dyio_outfmt(dy_logchn,dy_gtxecho,"\n%8d%14s (%3d)%16.8g",bpos, consys_nme(dy_sys,'v',dy_basis[bpos],FALSE,NULL), dy_basis[bpos],-abarj[bpos]) ; } dyio_outfmt(dy_logchn,dy_gtxecho,"\n%8s%14s (%3d)%16.8g","n/a", consys_nme(dy_sys,'v',act_j,FALSE,NULL),act_j,1.0) ; } # endif /* Now load abar into a vector orig_eta that we can use directly to form dot(orig_a,orig_eta) in the original system. If x is decreasing, we need to negate eta, which is handled by multiplying by dir. Remember that logicals do not exist in the original system. */ retval = 0 ; m = orig_sys->concnt ; n = orig_sys->varcnt ; act_m = dy_sys->concnt ; orig_etaj = (double *) CALLOC((n+1),sizeof(double)) ; for (bpos = 1 ; bpos <= act_m ; bpos++) { k = dy_basis[bpos] ; if (k > act_m) { j = dy_actvars[k] ; # ifdef DYLP_PARANOIA if (j < 1 || j > n) { errmsg(102,rtnnme,"original variable",j,1,n) ; retval = -1 ; break ; } # endif orig_etaj[j] = dir*abarj[bpos] ; } } if (act_j > act_m) { j = dy_actvars[act_j] ; orig_etaj[j] = -1.0*dir ; } if (abarj != NULL) FREE(abarj) ; # ifdef DYLP_PARANOIA if (j < 1 || j > n) { errmsg(102,rtnnme,"original variable",j,1,n) ; retval = -1 ; } if (retval < 0) { if (orig_etaj != NULL) FREE(orig_etaj) ; return (-1) ; } # endif /* Similarly, form the solution vector in terms of the original system. */ orig_vub = orig_sys->vub ; orig_vlb = orig_sys->vlb ; orig_x = (double *) CALLOC((n+1),sizeof(double)) ; for (j = 1 ; j <= n ; j++) { k = dy_origvars[j] ; if (ACTIVE_VAR(j)) { # ifdef DYLP_PARANOIA if (k <= act_m || k > dy_sys->varcnt) { errmsg(102,rtnnme,"original variable",j,act_m+1,dy_sys->varcnt) ; retval = -1 ; break ; } # endif orig_x[j] = dy_x[k] ; } else { statj = (flags) -k ; # ifdef DYLP_PARANOIA if (flgoff(statj,vstatNONBASIC|vstatNBFR)) { errmsg(433,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "inactive",consys_nme(orig_sys,'v',j,TRUE,NULL),j, dy_prtvstat(statj)) ; retval = -1 ; break ; } # endif if (flgon(statj,vstatNBUB)) { orig_x[j] = orig_vub[j] ; } else if (flgon(statj,vstatNBLB|vstatNBFX)) { orig_x[j] = orig_vlb[j] ; } } } # ifdef DYLP_PARANOIA if (retval < 0) { if (orig_etaj != NULL) FREE(orig_etaj) ; if (orig_x != NULL) FREE(orig_x) ; return (-1) ; } # endif /* Does the client want indices returned? Did the client supply a vector for candidate indices? If not, make one. Here's one of the modifications for the debug version: the limit is all of the original constraints. The other modification is just below in the scan loop: we look at all constraints, not just loadable constraints. */ cand_limit = orig_sys->concnt ; if (p_ocndxs == NULL || *p_ocndxs == NULL) { ocndxs = (int *) MALLOC(cand_limit*sizeof(int)) ; } else { ocndxs = *p_ocndxs ; } /* Now we can step through the constraints in the original system. For each constraint, we first check idotj = dot(orig_a,orig_eta) to see if we have a bounding candidate. For a <= constraint, we need idotj > 0; for an equality or range constraint, idotj != 0 is sufficient. */ orig_ctyp = orig_sys->ctyp ; orig_rhs = orig_sys->rhs ; orig_rhslow = orig_sys->rhslow ; actcnt = 0 ; for (i = 1 ; i <= m && actcnt <= cand_limit ; i++) { ctypi = orig_ctyp[i] ; idotj = consys_dotrow(orig_sys,i,orig_etaj) ; setcleanzero(idotj,dy_tols->zero) ; if (idotj == 0 || (ctypi == contypLE && idotj < 0)) { # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n skipping %s %s (%d), dot(a,eta) = %g, ", consys_prtcontyp(ctypi), consys_nme(orig_sys,'c',i,FALSE,NULL),i,idotj) ; } # endif continue ; } # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n considering %s %s (%d), dot(a,eta) = %g, ", consys_prtcontyp(ctypi), consys_nme(orig_sys,'c',i,FALSE,NULL),i,idotj) ; } # endif /* We have a bounding candidate. Is it violated at the current solution? */ lhsi = consys_dotrow(orig_sys,i,orig_x) ; setcleanzero(lhsi,dy_tols->zero) ; rhsi = orig_rhs[i] ; if (ctypi == contypRNG) { rhslowi = orig_rhslow[i] ; } else if (ctypi == contypEQ) { rhslowi = rhsi ; } else { rhslowi = -dy_tols->inf ; } if (abovebnd(lhsi,rhsi) || belowbnd(lhsi,rhslowi)) { activate = FALSE ; } else { activate = TRUE ; } # ifndef DYLP_NDEBUG if (activate == TRUE) { if (dy_opts->print.conmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n queued %s %s (%d), %g <= %g <= %g.", consys_prtcontyp(orig_ctyp[i]), consys_nme(orig_sys,'c',i,FALSE,NULL),i, rhslowi,lhsi,rhsi) ; } } else { if (dy_opts->print.conmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n skipping %s constraint %s (%d),", consys_prtcontyp(orig_ctyp[i]), consys_nme(orig_sys,'c',i,FALSE,NULL),i) ; if (abovebnd(lhsi,rhsi)) { dyio_outfmt(dy_logchn,dy_gtxecho, " lhs - rhs = %g - %g = %g, tol %g.", lhsi,rhsi,lhsi-rhsi,dy_tols->zero*(1+fabs(rhsi))) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, " rhslow - lhs = %g - %g = %g, tol %g.", rhslowi,lhsi,rhslowi-lhsi, dy_tols->zero*(1+fabs(rhslowi))) ; } } } # endif if (activate == TRUE) ocndxs[actcnt++] = i ; } if (orig_etaj != NULL) FREE(orig_etaj) ; if (orig_x != NULL) FREE(orig_x) ; /* If we supplied ocndxs and found no candidates to activate, free it. */ if (p_ocndxs != NULL) { if (*p_ocndxs == NULL) { if (actcnt == 0) { FREE(ocndxs) ; } else { *p_ocndxs = ocndxs ; } } } else { FREE(ocndxs) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n queued %d constraints for activation.",actcnt) ; } # endif dy_opts->print.conmgmt = save_print ; return (actcnt) ; } #endif /* debug routine */ /* Routines to bound an unbounded primal problem. */ static int scanPrimConBndAct (consys_struct *orig_sys, int act_j, int **p_ocndxs) /* This routine scans the original constraint system looking for constraints that can bound motion in the direction -etadelta, where delta is the change in the variable x and eta is the jth column of the matrix trans(inv(B)N -I). (trans(*) is matrix transpose.) This derives from the relation trans(x x) = trans(inv(B)b l/u) - trans(inv(B)N -I)deltax where l/u is the upper or lower bound, as appropriate, for the nonbasic variables. When we choose the entering variable x, deltax becomes a vector of zeros, with delta in the proper position. This selects column j of trans(inv(B)N -I) = eta. Parameters: orig_sys: The original constraint system act_j: index (in dy_sys) of the offending column; negated if the variable is decreasing p_ocndxs: (i) empty vector to hold constraint indices; assumed sufficiently large if non-NULL; if NULL, allocated if necessary (o) indices of constraints to be activated; may not be allocated if no constraints are identified Returns: number of candidates for activation, -1 if error. */ { int i,j,k,bpos,m,n,act_m,actcnt,cand_limit,dir,retval ; int *ocndxs ; double *abarj ; double *orig_x,*orig_rhs,*orig_rhslow,*orig_vub,*orig_vlb,*orig_etaj ; double idotj,lhsi,rhsi,rhslowi ; contyp_enum *orig_ctyp,ctypi ; flags statj ; bool activate ; const char *rtnnme = "scanPrimConBndAct" ; # ifdef DYLP_PARANOIA if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (-1) ; } if (p_ocndxs == NULL) { errmsg(2,rtnnme,"&ocndxs") ; return (-1) ; } # endif /* Set the multiplier for eta. If x is increasing, we'd normally multiply by -1. To compensate for decreasing (negative) motion, change dir to +1. */ if (act_j < 0) { dir = 1 ; act_j = -act_j ; } else { dir = -1 ; } # ifdef DYLP_PARANOIA if (act_j < 1 || act_j > dy_sys->varcnt) { errmsg(102,rtnnme,"active variable",act_j,1,dy_sys->varcnt) ; return (-1) ; } # endif /* The first thing to do is to calculate abar = inv(B)a. */ abarj = NULL ; if (consys_getcol_ex(dy_sys,act_j,&abarj) == FALSE) { errmsg(122,rtnnme,dy_sys->nme, "column",consys_nme(dy_sys,'v',act_j,TRUE,NULL),act_j) ; if (abarj != NULL) FREE(abarj) ; return (-1) ; } dy_ftran(abarj,FALSE) ; # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n eta for %s (%d) %s:", consys_nme(dy_sys,'v',act_j,FALSE,NULL),act_j, (dir < 0)?"increasing":"decreasing") ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n%8s%20s%16s","pos'n","var (ndx)","eta") ; for (bpos = 1 ; bpos <= dy_sys->concnt ; bpos++) { if (abarj[bpos] != 0) dyio_outfmt(dy_logchn,dy_gtxecho,"\n%8d%14s (%3d)%16.8g",bpos, consys_nme(dy_sys,'v',dy_basis[bpos],FALSE,NULL), dy_basis[bpos],-abarj[bpos]) ; } dyio_outfmt(dy_logchn,dy_gtxecho,"\n%8s%14s (%3d)%16.8g","n/a", consys_nme(dy_sys,'v',act_j,FALSE,NULL),act_j,1.0) ; } # endif /* Now load abar into a vector orig_eta that we can use directly to form dot(orig_a,orig_eta) in the original system. If x is decreasing, we need to negate eta, which is handled by multiplying by dir. Remember that logicals do not exist in the original system. */ retval = 0 ; m = orig_sys->concnt ; n = orig_sys->varcnt ; act_m = dy_sys->concnt ; orig_etaj = (double *) CALLOC((n+1),sizeof(double)) ; for (bpos = 1 ; bpos <= act_m ; bpos++) { k = dy_basis[bpos] ; if (k > act_m) { j = dy_actvars[k] ; # ifdef DYLP_PARANOIA if (j < 1 || j > n) { errmsg(102,rtnnme,"original variable",j,1,n) ; retval = -1 ; break ; } # endif orig_etaj[j] = dir*abarj[bpos] ; } } if (act_j > act_m) { j = dy_actvars[act_j] ; orig_etaj[j] = -1.0*dir ; } if (abarj != NULL) FREE(abarj) ; # ifdef DYLP_PARANOIA if (j < 1 || j > n) { errmsg(102,rtnnme,"original variable",j,1,n) ; retval = -1 ; } if (retval < 0) { if (orig_etaj != NULL) FREE(orig_etaj) ; return (-1) ; } # endif /* Similarly, form the solution vector in terms of the original system. */ orig_vub = orig_sys->vub ; orig_vlb = orig_sys->vlb ; orig_x = (double *) CALLOC((n+1),sizeof(double)) ; for (j = 1 ; j <= n ; j++) { k = dy_origvars[j] ; if (k > 0) { # ifdef DYLP_PARANOIA if (k <= act_m || k > dy_sys->varcnt) { errmsg(102,rtnnme,"original variable",j,act_m+1,dy_sys->varcnt) ; retval = -1 ; break ; } # endif orig_x[j] = dy_x[k] ; } else { statj = (flags) -k ; # ifdef DYLP_PARANOIA if (flgoff(statj,vstatNONBASIC|vstatNBFR)) { errmsg(433,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "inactive",consys_nme(orig_sys,'v',j,TRUE,NULL),j, dy_prtvstat(statj)) ; retval = -1 ; break ; } # endif if (flgon(statj,vstatNBUB)) { orig_x[j] = orig_vub[j] ; } else if (flgon(statj,vstatNBLB|vstatNBFX)) { orig_x[j] = orig_vlb[j] ; } } } # ifdef DYLP_PARANOIA if (retval < 0) { if (orig_etaj != NULL) FREE(orig_etaj) ; if (orig_x != NULL) FREE(orig_x) ; return (-1) ; } # endif /* Did the client supply a vector for candidate indices? If not, make one. */ cand_limit = m-act_m ; if (dy_opts->con.actlim > 0) { cand_limit = minn(dy_opts->con.actlim,cand_limit) ; } if (*p_ocndxs == NULL) { ocndxs = (int *) MALLOC(cand_limit*sizeof(int)) ; } else { ocndxs = *p_ocndxs ; } /* Now we can step through the constraints in the original system. For each inactive constraint, we first check idotj = dot(orig_a,orig_eta) to see if we have a bounding candidate. For a <= constraint, we need idotj > 0; for an equality or range constraint, idotj != 0 is sufficient. */ orig_ctyp = orig_sys->ctyp ; orig_rhs = orig_sys->rhs ; orig_rhslow = orig_sys->rhslow ; actcnt = 0 ; for (i = 1 ; i <= m && actcnt <= cand_limit ; i++) { if (!LOADABLE_CON(i)) continue ; ctypi = orig_ctyp[i] ; idotj = consys_dotrow(orig_sys,i,orig_etaj) ; setcleanzero(idotj,dy_tols->zero) ; if (idotj == 0 || (ctypi == contypLE && idotj < 0)) { # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n skipping %s %s (%d), dot(a,eta) = %g, ", consys_prtcontyp(ctypi), consys_nme(orig_sys,'c',i,FALSE,NULL),i,idotj) ; } # endif continue ; } # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n considering %s %s (%d), dot(a,eta) = %g, ", consys_prtcontyp(ctypi), consys_nme(orig_sys,'c',i,FALSE,NULL),i,idotj) ; } # endif /* We have a bounding candidate. Is it violated at the current solution? */ lhsi = consys_dotrow(orig_sys,i,orig_x) ; setcleanzero(lhsi,dy_tols->zero) ; rhsi = orig_rhs[i] ; if (ctypi == contypRNG) { rhslowi = orig_rhslow[i] ; } else if (ctypi == contypEQ) { rhslowi = rhsi ; } else { rhslowi = -dy_tols->inf ; } if (abovebnd(lhsi,rhsi) || belowbnd(lhsi,rhslowi)) { activate = FALSE ; } else { activate = TRUE ; } # ifndef DYLP_NDEBUG if (activate == TRUE) { if (dy_opts->print.conmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n queued %s %s (%d), %g <= %g <= %g.", consys_prtcontyp(orig_ctyp[i]), consys_nme(orig_sys,'c',i,FALSE,NULL),i, rhslowi,lhsi,rhsi) ; } } else { if (dy_opts->print.conmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n skipping %s constraint %s (%d),", consys_prtcontyp(orig_ctyp[i]), consys_nme(orig_sys,'c',i,FALSE,NULL),i) ; if (abovebnd(lhsi,rhsi)) { dyio_outfmt(dy_logchn,dy_gtxecho, " lhs - rhs = %g - %g = %g, tol %g.", lhsi,rhsi,lhsi-rhsi,dy_tols->zero*(1+fabs(rhsi))) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, " rhslow - lhs = %g - %g = %g, tol %g.", rhslowi,lhsi,rhslowi-lhsi, dy_tols->zero*(1+fabs(rhslowi))) ; } } } # endif if (activate == TRUE) ocndxs[actcnt++] = i ; } if (orig_etaj != NULL) FREE(orig_etaj) ; if (orig_x != NULL) FREE(orig_x) ; /* If we supplied ocndxs and found no candidates to activate, free it. */ if (*p_ocndxs == NULL) { if (actcnt == 0) { FREE(ocndxs) ; } else { *p_ocndxs = ocndxs ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n queued %d constraints for activation.",actcnt) ; } # endif return (actcnt) ; } int dy_activateBndCons (consys_struct *orig_sys) /* This routine coordinates bounding constraint activation in phase dyADDCON. In addition to the actual scan and activation, it sees to rebuilding the basis and solution. The heavy lifting is performed in scanPrimConBndAct and actBLogPrimCon. See the comments in dy_conmgmt.c for the effects on PSE and DSE norms. Notwithstanding, the approach taken here is to simply set the init_dse flag. The reason is that dylp does not have a phase transition sequence which adds constraints and returns to dual simplex. It's always primal -> act/deact constraints -> dual -> act/deact variables -> primal The DSE norms are not maintained through primal simplex, so there's no motivation to do an update here. Parameter: orig_sys: The original constraint system Returns: number of constraints activated; -1 if there's an error. */ { int *candidates,cand_cnt,act_j ; int retval ; bool actresult ; flags calcflgs ; dyret_enum factorresult ; const char *rtnnme = "dy_activateBndCons" ; retval = -1 ; /* Call scanPrimConBndAct to return a list of candidates for activation, then call actBLogPrimConList to install them. Installing nothing always succeeds. */ candidates = NULL ; act_j = dy_lp->ubnd.ndx ; cand_cnt = scanPrimConBndAct(orig_sys,act_j,&candidates) ; if (cand_cnt < 0) { errmsg(434,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "constraint","bounding activation") ; actresult = FALSE ; } else if (cand_cnt > 0) { actresult = dy_actBLogPrimConList(orig_sys,cand_cnt,candidates,NULL) ; } else { actresult = TRUE ; } if (candidates != NULL) FREE(candidates) ; if (actresult == FALSE) return (retval) ; /* If we added constraints, we need to refactor and recalculate the primal and dual variables. Then decide on the simplex phase. If we came in with primal feasibility, we should still have it. */ if (cand_cnt > 0) { dy_lp->simplex.init_dse = TRUE ; # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n factoring, calculating variables, ") ; dyio_outfmt(dy_logchn,dy_gtxecho,"and checking feasibility ...") ; } # endif calcflgs = ladFACTOR|ladPRIMFEAS|ladPFQUIET|ladDUALFEAS|ladDFQUIET ; factorresult = dy_accchk(&calcflgs) ; switch (factorresult) { case dyrOK: case dyrPATCHED: { retval = cand_cnt ; # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) { if (factorresult == dyrOK) dyio_outfmt(dy_logchn,dy_gtxecho,"\n done.") ; else dyio_outfmt(dy_logchn,dy_gtxecho,"\n patched.") ; } # endif # ifdef DYLP_PARANOIA if (dy_lp->simplex.active == dyPRIMAL2 && factorresult == dyrOK && (flgon(calcflgs,ladPRIMFEAS))) { errmsg(1,rtnnme,__LINE__) ; retval = -1 ; break ; } # endif if (flgoff(calcflgs,ladPRIMFEAS)) { dy_lp->simplex.next = dyPRIMAL2 ; } else if (flgoff(calcflgs,ladDUALFEAS)) { dy_lp->simplex.next = dyDUAL ; } else { dy_lp->simplex.next = dyPRIMAL1 ; } break ; } default: { retval = -1 ; # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) dyio_outfmt(dy_logchn,dy_gtxecho,"\n failed.") ; # endif break ; } } } else { retval = cand_cnt ; } # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 1) { if (dy_opts->print.conmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n ") ; } dyio_outfmt(dy_logchn,dy_gtxecho," %d activations.",cand_cnt) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n constraint system %s now %d x %d (%d + %d).", dy_sys->nme,dy_sys->concnt,dy_sys->varcnt,dy_sys->archvcnt, dy_sys->logvcnt) ; } # endif return (retval) ; } /* Routines to bound an unbounded dual problem. */ static int type1var (consys_struct *orig_sys, int xindx, int diri, int oxkndx, flags xkstatus, double abarik, double cbark) /* This routine evaluates x to see if it qualifies as a type 1 variable. A type 1 variable will bound the dual problem (its associated dual can be driven to 0 as y enters) and it can be activated into the nonbasic partition while retaining dual feasibility. Parameters: orig_sys: the original constraint system xindx: index of the entering dual y (leaving primal x) diri: direction of motion for y (x) +1 to increase from 0 (to lb) -1 to decrease from 0 (to ub) oxkndx: index of candidate for activation y (x) xkstatus: status for x abarik: pivot element abar cbark: value of y (reduced cost of x) Returns: 1 if x is activated, 0 if x is not activated -1 if something goes fatally wrong */ { int xkndx ; const char *rtnnme = "type1var" ; /* Will this variable be dual feasible? If not, it can't be a type 1. If it is dual feasible, it'll work, because we tested that cbar and abar had the proper signs before calling type1var. */ if ((flgon(xkstatus,vstatNBLB) && cbark < 0) || (flgon(xkstatus,vstatNBUB) && cbark > 0)) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tt1eval: %s %s (%d) not dual feasible; cbar = %g.", dy_prtvstat(xkstatus), consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx,cbark) ; } # endif return (0) ; } /* x satisfies the type 1 criteria. Activate it, and insert the reduced cost in dy_cbar. */ # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n type 1 activation %s %s (%d), ", dy_prtvstat(xkstatus), consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx) ; dyio_outfmt(dy_logchn,dy_gtxecho,"cbar = %g, abar = %g.", cbark,abarik) ; } # endif if (dy_actNBPrimArch(orig_sys,oxkndx) == FALSE) { errmsg(430,rtnnme, orig_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "activate","variable", consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx) ; return (-1) ; } xkndx = dy_origvars[oxkndx] ; dy_cbar[xkndx] = cbark ; return (1) ; } static void type2eval (consys_struct *orig_sys,int xindx, int diri, int oxkndx, flags xkstatus, double abarik, double cbark, int *oxjndx, double *deltaj, double *cbarj, int *dirj) /* This routine evaluates x as a possible type 2 variable, and replaces the incumbent type 2 candidate if that's appropriate. We're looking for variables which bound the dual problem but would not be dual feasible if they were activated as nonbasic. A type 2 variable has the signs of cbar and abar reversed from the usual conventions for a dual pivot. Because of this, the primal move is in the `wrong' direction. E.g., if x is rising to its lower bound and leaving, and x is NBLB with abar > 0, x has to >decrease< in order to bring x to its lower bound. Parameters: orig_sys: the original constraint system xindx: index of the entering dual y (leaving primal x) diri: direction of motion for y (x) +1 to increase from 0 (to lb) -1 to decrease from 0 (to ub) oxkndx: index of candidate for activation y (x) xkstatus: status for x abarik: pivot element abar cbark: value of y (reduced cost of x) oxjndx: (i) if nonzero, index of the type 2 incumbent x (o) replaced with new incumbent, if appropriate deltaj: (i) dual delta for y given x (o) replaced with new delta, if x is replaced cbarj: (i) reduced cost of x (o) replaced with new reduced cost, if x is replaced dirj: (i) direction of motion of x (o) replaced with new direction of motion if x is replaced Returns: undefined */ { double deltak ; /* Will this variable be dual feasible? If so, it can't be a type 2. If it isn't dual feasible, it'll work, because we tested that cbar and abar had the proper signs before calling type2var. */ if ((flgon(xkstatus,vstatNBLB) && cbark > 0) || (flgon(xkstatus,vstatNBUB) && cbark < 0) || flgon(xkstatus,vstatNBFR)) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tt2eval: %s %s (%d) dual feasible; cbar = %g.", dy_prtvstat(xkstatus), consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx,cbark) ; } # endif return ; } /* Is x a better choice than the current incumbent x? If so, replace it. It takes a little work to figure out the proper direction of motion, particularly if x is NBFR. Remember, the primal direction of change is backwards from the normal motion. */ deltak = fabs(cbark/abarik) ; if (deltak < *deltaj) { *oxjndx = oxkndx ; *deltaj = deltak ; *cbarj = cbark ; if (flgon(xkstatus,vstatNBLB)) { *dirj = -1 ; } else if (flgon(xkstatus,vstatNBUB)) { *dirj = 1 ; } else { if (diri > 0) { if (abarik > 0) { *dirj = 1 ; } else { *dirj = -1 ; } } else { if (abarik > 0) { *dirj = -1 ; } else { *dirj = 1 ; } } } # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n t2eval: choosing %s %s (%d), delta %g,", dy_prtvstat(xkstatus), consys_nme(orig_sys,'v',*oxjndx,TRUE,NULL),*oxjndx,*deltaj) ; dyio_outfmt(dy_logchn,dy_gtxecho,"cbar = %g, abar = %g.", *cbarj,abarik) ; } # endif } # ifndef DYLP_NDEBUG else { if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n t2eval: skipping %s %s (%d), delta %g,", dy_prtvstat(xkstatus), consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx,deltak) ; dyio_outfmt(dy_logchn,dy_gtxecho,"cbar = %g, abar = %g.", cbark,abarik) ; } } # endif return ; } static void type3eval (consys_struct *orig_sys, int xindx, int diri, int oxkndx, flags xkstatus, double abarik, double cbark, int *oxjndx, double *distj, double *cbarj, int *dirj, double *abarij) /* This routine evaluates x as a possible type 3 variable, and replaces the incumbent type 3 candidate if that's appropriate. We're looking for variables which can be activated with a bound-to-bound pivot and drive the reduced cost of y to 0 (drive x toward feasibility). We'll pick the variable that puts us on the correct side of the bound, with a preference to minimise |bnd - delta*abar|. Parameters: orig_sys: the original constraint system xindx: index of the entering dual y (leaving primal x) diri: direction of motion for y (x) +1 to increase from 0 (to lb) -1 to decrease from 0 (to ub) oxkndx: index of candidate for activation y (x) xkstatus: status for x abarik: pivot element abar cbark: value of y (reduced cost of x) oxjndx: (i) if nonzero, index of the type 3 incumbent x (o) replaced with new incumbent, if appropriate distj: (i) |bnd - (x+delta)|, with sign assigned to be positive if we're within bounds, and negative if we're out of bound. (o) replaced with new delta, if x is replaced cbarj: (i) reduced cost of x (o) replaced with new reduced cost, if x is replaced dirj: (i) direction of motion of x (o) replaced with new direction of motion if x is replaced abarij: (i) pivot for x (o) replaced with new pivot, if x is replaced Returns: undefined */ { int dirk ; double lbk,ubk,deltak,distk,bndi,xival ; bool newxj ; /* Get the bounds on x and calculate the possible delta. If x doesn't have both bounds, it can't be a type 3 variable. */ lbk = orig_sys->vlb[oxkndx] ; ubk = orig_sys->vub[oxkndx] ; if (lbk <= -dy_tols->inf || ubk >= dy_tols->inf) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n t3eval: skipping %s %s (%d)", dy_prtvstat(xkstatus), consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx) ; if (lbk <= -dy_tols->inf) dyio_outfmt(dy_logchn,dy_gtxecho,", lb = %g",lbk) ; if (ubk >= dy_tols->inf) dyio_outfmt(dy_logchn,dy_gtxecho,", ub = %g",ubk) ; dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } # endif return ; } /* Now look at x's status and reduced cost, and from that decide if we can flip and activate it. */ if (flgon(xkstatus,vstatNBLB)) { if (cbark > 0) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n t3eval: skipping %s %s (%d), cbar = %g, can't flip.", dy_prtvstat(xkstatus), consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx,cbark) ; } # endif return ; } dirk = 1 ; deltak = -abarik*(ubk-lbk) ; } else { if (cbark < 0) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n t3eval: skipping %s %s (%d), cbar = %g, can't flip.", dy_prtvstat(xkstatus), consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx,cbark) ; } # endif return ; } dirk = -1 ; deltak = -abarik*(lbk-ubk) ; } setcleanzero(deltak,dy_tols->zero) ; /* Does delta move x toward feasibility? */ if (deltak == 0) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n t3eval: skipping %s %s (%d), delta = 0.", dy_prtvstat(xkstatus), consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx) ; } # endif return ; } if ((diri > 0 && deltak < 0) || (diri < 0 && deltak > 0)) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n t3eval: skipping %s %s (%d), direction; delta = %g.", dy_prtvstat(xkstatus),consys_nme(orig_sys,'v',oxkndx,TRUE,NULL), oxkndx,deltak) ; } # endif return ; } /* The only remaining question is whether x brings x closer to feasibility than the incumbent. The preference is for feasibility. If both x and x are feasible or infeasible (sign(dist) = sign(dist)), we want to get as close to the bound as possible. If the distance is equal, keep the incumbent. The sign of dist is set to be negative if the new value of x is out-of-bound in either direction. */ xival = dy_x[xindx]+deltak ; setcleanzero(xival,dy_tols->zero) ; newxj = FALSE ; if (diri < 0) { bndi = dy_sys->vub[xindx] ; distk = bndi-xival ; if (belowbnd(xival,dy_sys->vlb[xindx])) distk = -distk ; } else { bndi = dy_sys->vlb[xindx] ; distk = xival-bndi ; if (abovebnd(xival,dy_sys->vub[xindx])) distk = -distk ; } setcleanzero(distk,dy_tols->zero) ; if (distk > 0 && *distj < 0) { newxj = TRUE ; } else if (fabs(distk) < fabs(*distj)) { newxj = TRUE ; } if (newxj == TRUE) { *oxjndx = oxkndx ; *distj = distk ; *cbarj = cbark ; *dirj = dirk ; *abarij = abarik ; # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n t3eval: choosing %s %s (%d), ", dy_prtvstat(xkstatus), consys_nme(orig_sys,'v',*oxjndx,TRUE,NULL),*oxjndx) ; dyio_outfmt(dy_logchn,dy_gtxecho,"cbar = %g, delta = %g, dist = %g.", *cbarj,deltak,*distj) ; } # endif } return ; } static int type2activate (consys_struct *orig_sys, int xindx, int diri, int oxjndx, int dirj, double cbarj) /* This routine performs the activate and pivot step required for a type 2 variable. It has some error recovery capability, but makes no attempt at real sophistication. If things get too rough, we can always fall back on primal simplex. Because we've flipped the signs on cbar and abar, the primal move is in the `wrong' direction. E.g., if x is rising to its lower bound and leaving, x NBLB, and abar > 0, x has to >decrease< in order to bring x to its lower bound. Parameters: orig_sys: the original constraint system xindx: index of the leaving variable x diri: direction of motion of x oxjndx: index (in orig_sys) of the entering variable x dirj: direction of motion of x cbarj: reduced cost of x Returns: 1 if a variable is activated and pivoted into the basis without error 0 if there's a nonfatal problem (this will cause a reversion to primal simplex). -1 if there's a fatal problem */ { int xjndx,xkndx ; double abarij,deltaj ; bool pivoted ; dyret_enum pivresult,duennaresult ; int retval ; const char *rtnnme = "type2activate" ; # ifndef DYLP_NDEBUG flags xjstatus ; if (dy_opts->print.varmgmt >= 1) { xjstatus = (flags) -dy_origvars[oxjndx] ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n activating and pivoting %s %s (%d), ", dy_prtvstat(xjstatus), consys_nme(orig_sys,'v',oxjndx,TRUE,NULL),oxjndx) ; dyio_outfmt(dy_logchn,dy_gtxecho," cbar = %g, %s.", cbarj,(dirj < 0)?"falling":"rising") ; } # endif /* Try to activate the variable. */ if (dy_actNBPrimArch(orig_sys,oxjndx) == FALSE) { errmsg(430,rtnnme, orig_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "activate","variable", consys_nme(orig_sys,'v',oxjndx,TRUE,NULL),oxjndx) ; return (-1) ; } xjndx = dy_origvars[oxjndx] ; dy_cbar[xjndx] = cbarj ; /* Now attempt the pivot. */ pivresult = dy_dualpivot(xindx,diri,&xjndx,&dirj,&cbarj,&abarij, &deltaj,&xkndx) ; switch (pivresult) { case dyrOK: case dyrDEGEN: case dyrOPTIMAL: case dyrPUNT: case dyrREQCHK: { pivoted = TRUE ; break ; } default: { pivoted = FALSE ; break ; } } # ifndef DYLP_NDEBUG if ((dy_opts->print.varmgmt >= 3) || (dy_opts->print.varmgmt >= 2 && pivresult != dyrOK)) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n pivot attempt %s, pivot return code = %s.", (pivoted == TRUE)?"succeeded":"failed", dy_prtdyret(pivresult)) ; } if (dy_opts->print.dual >= 4) dy_logpivot(pivresult,xjndx,dirj,cbarj,xindx,diri,abarij,deltaj) ; # endif /* Call La Duenna after the pivot as usual. It boils down to these cases: * The pivot went through, and La Duenna had no complaints. In this case, we can go back to dual simplex and try for normal pivots. * The pivot went through, but La Duenna had non-fatal problems. We'll revert to primal simplex and see if it goes better. * The pivot didn't go through, but La Duenna managed to salvage the situation. In this case we haven't managed to change the situation and returning to dual simplex would be futile. Again, try primal simplex. If `salvage the situation' meant dealing with a singular pivot, we need to remove the leaving variable from the pivot reject list (there will be no other entries, given we're in dyADDVAR). * There was a fatal error, either in the pivot attempt or from La Duenna. Return dyINV. If the pivot resulted in a fatal error, that'll be reflected in the return code from dy_duenna. We have to lie about the phase for a moment here, to avoid running afoul of all kinds of checks. */ dy_lp->phase = dyDUAL ; duennaresult = dy_duenna(pivresult,xjndx,xindx,-1,-1) ; if (pivresult == dyrSINGULAR) { if (dy_clrpivrej(NULL) != TRUE) return (-1) ; } dy_lp->phase = dyADDVAR ; switch (duennaresult) { case dyrOK: case dyrRESELECT: case dyrOPTIMAL: { if (pivoted == TRUE) { retval = 1 ; } else { retval = 0 ; } break ; } case dyrPUNT: case dyrLOSTDFEAS: { retval = 0 ; break ; } default: { retval = -1 ; } } # ifndef DYLP_NDEBUG if ((dy_opts->print.varmgmt >= 3) || (dy_opts->print.varmgmt >= 2 && duennaresult != dyrOK)) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n La Duenna return code %s.", dy_prtdyret(duennaresult)) ; } if (dy_opts->print.varmgmt >= 1) { if (dy_opts->print.varmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n ") ; } if (retval == 1) { dyio_outfmt(dy_logchn,dy_gtxecho," 1 activation and pivot.") ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n constraint system %s now %d x %d (%d + %d).", dy_sys->nme,dy_sys->concnt,dy_sys->varcnt,dy_sys->archvcnt, dy_sys->logvcnt) ; } else if (retval == 0) { dyio_outfmt(dy_logchn,dy_gtxecho, " activate & pivot failed; reverting to primal.") ; } } # endif return (retval) ; } static int type3activate (consys_struct *orig_sys, double *betai, int xindx, int diri, int oxjndx, int dirj, double cbarj, double abarij, int *p_actcnt) /* This routine is responsible for handling type 3 variables. It expects to be passed a type 3 variable x which can be activated with a bound-to-bound pivot. Once the initial variable is dealt with, we recalculate the primal variables and then run dualout to see if the same leaving variable x is selected. If not, we're done, and we can return to dual simplex. Otherwise, we scan for another type 3 variable and repeat. If we run out of type 3 variables before we select a different leaving variable, we're in trouble. In theory that's it, but for now revert to the primal to see if it can figure it out. The overall flow of each pivot is much as type2activate --- we do the pivot (easy, it's just a matter of updating the primal variables), then call dy_duenna to check things over and do some bookkeeping. If anything goes mildly wrong, we bail out back to the primal simplex. Parameters: orig_sys: the original constraint system betai: row i of the basis inverse xindx: index of the leaving variable x diri: direction of motion of x oxjndx: index (in orig_sys) of the swinging variable x dirj: direction of motion of x cbarj: reduced cost of x abarij: pivot for x p_actcnt: (o) the number of type 3 variables activated Returns: 1: if one or more bound-to-bound pivots has succeeded in changing the variable selected by dy_dualout; a normal dual pivot is possible 0: if we run out of type 3 variables and still get the same leaving variable, or if we encounter some other recoverable condition -1: when things go badly wrong */ { int candxi,oxkndx,xjndx,xqndx,pkndx ; double cbark,abarik,deltak,distj ; flags xjstatus,xkstatus ; bool fatal ; int actcnt,retval ; dyret_enum duennaresult,outresult ; pkvec_struct *ak ; pkcoeff_struct *aqk ; const char *rtnnme = "type3activate" ; # ifndef DYLP_NDEBUG double deltaj ; # endif retval = -1 ; *p_actcnt = -1 ; actcnt = 0 ; ak = NULL ; /* Dive right into the loop that handles activation, pivot, and selection of a new type 3 variable. We do this as long as we're still selecting x to leave and have a variable x to activate and pivot. */ candxi = xindx ; while (oxjndx != 0) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 1) { xjstatus = (flags) -dy_origvars[oxjndx] ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n activating and flipping %s %s (%d), ", dy_prtvstat(xjstatus), consys_nme(orig_sys,'v',oxjndx,TRUE,NULL),oxjndx) ; dyio_outfmt(dy_logchn,dy_gtxecho," cbar = %g, %s.", cbarj,(dirj < 0)?"falling":"rising") ; } # endif /* Try to activate the variable. */ if (dy_actNBPrimArch(orig_sys,oxjndx) == FALSE) { errmsg(430,rtnnme, orig_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "activate","variable", consys_nme(orig_sys,'v',oxjndx,TRUE,NULL),oxjndx) ; return (-1) ; } actcnt++ ; /* Do the bound-to-bound swing. This is inefficient, but if the algorithm works I can always come back and change this to an incremental update. */ xjndx = dy_origvars[oxjndx] ; xjstatus = dy_status[xjndx] ; if (flgon(xjstatus,vstatNBLB)) { dy_status[xjndx] = vstatNBUB ; dy_x[xjndx] = dy_sys->vub[xjndx] ; } else { dy_status[xjndx] = vstatNBLB ; dy_x[xjndx] = dy_sys->vlb[xjndx] ; } dy_cbar[xjndx] = cbarj ; if (dy_calcprimals() == FALSE) { errmsg(316,rtnnme,dy_sys->nme) ; return (-1) ; } dy_setbasicstatus() ; /* Log the pivot and run it past La Duenna. */ # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 4) { deltaj = dirj*(dy_sys->vub[xjndx]-dy_sys->vlb[xjndx]) ; dy_logpivot(dyrOK,xjndx,dirj,cbarj,xjndx,dirj,abarij,deltaj) ; } # endif dy_lp->phase = dyDUAL ; duennaresult = dy_duenna(dyrOK,xjndx,xindx,-1,-1) ; dy_lp->phase = dyADDVAR ; switch (duennaresult) { case dyrOK: case dyrRESELECT: case dyrOPTIMAL: { retval = 1 ; break ; } case dyrPUNT: case dyrLOSTDFEAS: { retval = 0 ; break ; } default: { retval = -1 ; break ; } } /* If the pivot went through without problem, keep going. The next thing to do is call dy_dualout to see what we select for the leaving variable. dy_dualout can return one of dyrOK (found a candidate), dyrOPTIMAL or dyrPUNT (no candidates, or what there were are are flagged with the NOPIVOT qualifier). If candxi isn't the same as xindx, we're done with these wierd pivots and can go back to normal dual simplex. It's obvious we want to return to dual simplex (retval = 1) when we've successfully pivoted and will select a new leaving variable. The reason for returning when we get dyrOPTIMAL or dyrPUNT from dy_dualout is that it's easier to allow dy_dual to take care of cleanly winding up the dual simplex run. */ if (retval != 1) break ; outresult = dy_dualout(&candxi) ; if (!(outresult == dyrOK || outresult == dyrOPTIMAL)) { retval = 0 ; break ; } if (xindx != candxi) { retval = 1 ; break ; } /* Sigh. We need another type 3 candidate. Open a loop to scan the inactive variables and see if we can find another one. By the time we get here, we've been through the inactive variables once already, so drop the paranoia. */ oxjndx = 0 ; distj = dy_tols->inf ; cbarj = 0.0 ; abarij = 0.0 ; fatal = FALSE ; for (oxkndx = 1 ; oxkndx <= orig_sys->varcnt ; oxkndx++) { xkstatus = (flags) -dy_origvars[oxkndx] ; if (!LOADABLE_VAR(oxkndx)) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n skipping %s %s (%d).", ((dy_origvars[oxkndx] > 0)?"loaded":dy_prtvstat(xkstatus)), consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx) ; } # endif continue ; } /* Fetch the column for x and calculate abar = betaa and cbar = c - ya. We use only the active elements of a. If abar = 0, there's no point in activating the variable. */ if (consys_getcol_pk(orig_sys,oxkndx,&ak) == FALSE) { errmsg(122,rtnnme,orig_sys->nme, "column",consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx) ; fatal = TRUE ; break ; } abarik = 0.0 ; cbark = orig_sys->obj[oxkndx] ; for (pkndx = 0,aqk = ak->coeffs ; pkndx < ak->cnt ; pkndx++,aqk++) { if (ACTIVE_CON(aqk->ndx)) { xqndx = dy_origcons[aqk->ndx] ; abarik += betai[xqndx]*aqk->val ; cbark -= dy_y[xqndx]*aqk->val ; } } setcleanzero(abarik,dy_tols->zero) ; if (abarik == 0) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n skipping %s %s (%d), abarik = 0.", dy_prtvstat(xkstatus), consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx) ; } # endif continue ; } setcleanzero(cbark,dy_tols->zero) ; deltak = cbark/abarik ; setcleanzero(deltak,dy_tols->zero) ; /* Is this suitable for a type 3 variable? If we get a distance from bound of 0.0, it won't get any better. Break out of the search loop and do the pivot. */ if (diri*(-deltak) <= 0) { type3eval(orig_sys,xindx,diri,oxkndx,xkstatus,abarik,cbark, &oxjndx,&distj,&cbarj,&dirj,&abarij) ; if (distj == 0) break ; } } } /* We've dropped out of the main loop. There are lots of reasons, but we don't need to deal with any of them here. */ if (oxjndx == 0) retval = 0 ; *p_actcnt = actcnt ; if (ak != NULL) pkvec_free(ak) ; # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n activated %d variables",actcnt) ; switch (retval) { case 1: { dyio_outfmt(dy_logchn,dy_gtxecho,", success.") ; break ; } case 0: { dyio_outfmt(dy_logchn,dy_gtxecho,", exhaustion.") ; break ; } default: { dyio_outfmt(dy_logchn,dy_gtxecho,", error.") ; break ; } } } # endif return (retval) ; } int dy_dualaddvars (consys_struct *orig_sys) /* dy_dualaddvars is called when the dual simplex reports unbounded (hence primal infeasible), and we need to add dual constraints (primal variables) to bound the dual. The problem, in dual terms, is that y can increase without bound. The offending y is actually identified by placing the index of the leaving primal associated with basis position i into dy_lp.ubnd.ndx. dualaddvars can also be called as part of dylp's initialisation sequence, adding variables prior to beginning dual simplex iterations. In this case, the routine considers only type 1 activations --- it's too early to pivot. There are three possibilities: 1) There are inactive variables which could bound the dual problem and can be activated into the nonbasic partition while retaining dual feasibility. In this case, we'll activate all such variables and return to the dual simplex. If there are no such variables, perhaps ... 2) There are inactive variables which could bound the dual problem but would be dual infeasible if activated into the nonbasic partition. In this case, we choose one such variable, according to a permuted version of the usual dual pivoting rules, activate it, pivot it into the basis, and then return to dual simplex. There's a real chance that we'll be right back here on the next pivot, but c'est la vie. If there are no such variables, then ... 3) There are inactive variables with a != 0, but they don't satisfy the conditions for 1) or 2). We're at a point that's primal infeasible and dual unbounded for the subset we've been working with, and adding any inactive variables will make us dual infeasible. What's called for here is bound-to-bound (b2b) pivots as we activate variables, chosen in such a way that we eventually want to chose some other dual variable to enter. I.e., we change y's reduced cost until some other dual looks like a better candidate to enter. In primal terms, we want to drive x toward feasibility. After some preliminaries, the inactive variables are scanned, looking for type 1, 2, and 3 variables. Once we've found the first type 1, we quit looking for the other two types. Any type 1 variables are activated as they are found. If we find no type 1 variables, but have a suitable type 2 variable, we do the pivot here and then return to dual simplex. It's a pretty costly way to do a dual pivot (in terms of the overhead of leaving and reentering dual simplex) but it shouldn't happen too often. If we find no type 1 or 2 variables, we do the b2b pivot on the type 3 variable and then run dualout to see if we get a different entering dual. If so, we return to dual simplex. If not, we enter a loop that repeats the process. (We need a pivot or a different y before we can hope to find any type 1 or type 2 variables.) To see how the type 2 pivot works, recall that in dual simplex one looks for an entering variable x s.t. j = arg min{k} |cbar/abar| and the signs of cbar and abar are appropriate. So, for x leaving at lb and x entering from lb, we need cbar >= 0 and abar < 0 so that cbar = -cbar/abar >= 0 after the pivot. But if we had cbar <= 0 and abar > 0, cbar would still be ok. But we couldn't activate x into the nonbasic partition, because for x NBLB, we need cbar >= 0 for dual feasibility. See dy_dualpivot.c:dy_dualin for a more complete explanation of the dual pivot rules. We apply them here with the bound reversed for the entering variable. Parameters: orig_sys: The original constraint system Returns: number of variables activated; -1 if there's an error */ { int acttype,newcnt,xindx,xipos,diri,evalcode, oxkndx,pkndx,xqndx,ox2ndx,dir2,ox3ndx,dir3 ; double *betai,abarik,cbark,deltak,delta2,cbar2,dist3,cbar3,abari3 ; flags xkstatus ; bool fatal ; pkvec_struct *ak ; pkcoeff_struct *aqk ; int retval ; const char *rtnnme = "dy_dualaddvars" ; retval = -1 ; dir2 = 0 ; # ifdef DYLP_PARANOIA if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (retval) ; } if (dy_lp->simplex.next != dyDUAL) { errmsg(4,rtnnme,"phase",dy_prtlpphase(dy_lp->simplex.next,FALSE)) ; return (retval) ; } if (!dy_lp->lpret == lpINFEAS) { errmsg(4,rtnnme,"lp return code",dy_prtlpret(dy_lp->lpret)) ; return (retval) ; } if (dy_lp->ubnd.ndx == 0 || abs(dy_lp->ubnd.ndx) > dy_sys->varcnt ) { errmsg(102,rtnnme,dy_sys->nme,"variable",abs(dy_lp->ubnd.ndx), 1,dy_sys->varcnt) ; return (retval) ; } # endif /* Preliminaries. First figure out how the entering variable is leaving. Then calculate beta. */ xindx = dy_lp->ubnd.ndx ; if (xindx < 0) { xindx = -xindx ; diri = -1 ; } else { diri = 1 ; } xipos = dy_var2basis[xindx] ; # ifdef DYLP_PARANOIA if (xipos <= 0 || xipos > dy_sys->concnt) { errmsg(102,rtnnme,dy_sys->nme,"constraint",xipos,1,dy_sys->concnt) ; return (retval) ; } # endif betai = (double *) CALLOC(dy_sys->concnt+1,sizeof(double)) ; betai[xipos] = 1.0 ; dy_btran(betai) ; # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n leaving variable %s (%d) ", consys_nme(dy_sys,'v',xindx,TRUE,NULL),xindx) ; if (diri > 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "rising to lb = %g.",dy_sys->vlb[xindx]) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, "falling to ub = %g.",dy_sys->vub[xindx]) ; } } # endif /* Now open up a loop to walk the variables in orig_sys and check the inactive ones for activation. If we're here as part of initialisation, we're only interested in type 1 activations. */ if (dy_lp->phase == dyINIT) { acttype = 1 ; } else { acttype = dy_opts->dualadd ; } ak = NULL ; newcnt = 0 ; ox2ndx = 0 ; delta2 = dy_tols->inf ; cbar2 = 0.0 ; ox3ndx = 0 ; dist3 = -dy_tols->inf ; cbar3 = 0.0 ; abari3 = 0 ; fatal = FALSE ; for (oxkndx = 1 ; oxkndx <= orig_sys->varcnt ; oxkndx++) { xkstatus = (flags) -dy_origvars[oxkndx] ; if (!LOADABLE_VAR(oxkndx)) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n skipping %s %s (%d).", ((dy_origvars[oxkndx] > 0)?"loaded":dy_prtvstat(xkstatus)), consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx) ; } # endif continue ; } # ifdef DYLP_PARANOIA if (flgoff(xkstatus,vstatNBUB|vstatNBLB|vstatNBFR)) { errmsg(433,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "inactive",consys_nme(orig_sys,'v',oxkndx,TRUE,NULL), oxkndx,dy_prtvstat(xkstatus)) ; fatal = TRUE ; break ; } # endif /* Fetch the column for x and calculate abar = betaa and cbar = c - ya. We use only the active elements of a. If abar = 0, there's no point in activating the variable. */ if (consys_getcol_pk(orig_sys,oxkndx,&ak) == FALSE) { errmsg(122,rtnnme,orig_sys->nme, "column",consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx) ; fatal = TRUE ; break ; } abarik = 0.0 ; cbark = orig_sys->obj[oxkndx] ; for (pkndx = 0,aqk = ak->coeffs ; pkndx < ak->cnt ; pkndx++,aqk++) { if (ACTIVE_CON(aqk->ndx)) { xqndx = dy_origcons[aqk->ndx] ; abarik += betai[xqndx]*aqk->val ; cbark -= dy_y[xqndx]*aqk->val ; } } setcleanzero(abarik,dy_tols->zero) ; if (abarik == 0) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n skipping %s %s (%d), abarik = 0.", dy_prtvstat(xkstatus), consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx) ; } # endif continue ; } setcleanzero(cbark,dy_tols->zero) ; deltak = cbark/abarik ; setcleanzero(deltak,dy_tols->zero) ; /* What do we have? If dir*(-cbar/abar) >= 0, x is a possible type 1 or type 2. Check first for a type 1 variable. type1var will make the necessary checks and activate x if it qualifies. If this isn't a type 1, and we have none to date, try for a type 2. type2var will make the necessary checks, and replace the incumbent type 2 variable if appropriate. */ if (diri*(-deltak) >= 0) { evalcode = type1var(orig_sys,xindx,diri,oxkndx,xkstatus,abarik,cbark) ; if (evalcode < 0) { errmsg(400,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,1, consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx) ; fatal = TRUE ; break ; } else if (evalcode > 0) { newcnt++ ; } else if (newcnt == 0 && acttype >= 2) { type2eval(orig_sys,xindx,diri,oxkndx,xkstatus,abarik,cbark, &ox2ndx,&delta2,&cbar2,&dir2) ; } } /* Maybe this variable is a possible type 3. If we don't have anything better going, call type3eval to do the evaluation. */ else if (newcnt == 0 && ox2ndx == 0 && acttype >= 3) { type3eval(orig_sys,xindx,diri,oxkndx,xkstatus,abarik,cbark, &ox3ndx,&dist3,&cbar3,&dir3,&abari3) ; } /* Are we over our limit? If so, abort the loop. */ if (dy_opts->addvar > 0 && newcnt >= dy_opts->addvar) break ; } /* Free the storage we've acquired. Bail out if we've had a fatal error. If we've activated variables, return to dual simplex. */ if (ak != NULL) pkvec_free(ak) ; if (fatal == TRUE) return (retval) ; if (newcnt > 0) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 1) { if (dy_opts->print.varmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n ") ; } dyio_outfmt(dy_logchn,dy_gtxecho," %d activations.",newcnt) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n constraint system %s now %d x %d (%d + %d).", dy_sys->nme,dy_sys->concnt,dy_sys->varcnt,dy_sys->archvcnt, dy_sys->logvcnt) ; } # endif retval = newcnt ; } /* We didn't activate any type 1 variables. Do we have a type 2 variable which we can pivot in? */ else if (ox2ndx > 0 && acttype >= 2) { retval = type2activate(orig_sys,xindx,diri,ox2ndx,dir2,cbar2) ; } /* Well, do we have a type 3 variable? If so, call type3activate to do the bound-to-bound pivot. type3activate will keep on with the bound-to-bound pivots until x is no longer selected as the leaving variable or until there are no type 3 variables remaining. */ else if (ox3ndx > 0 && acttype >= 3) { retval = type3activate(orig_sys,betai, xindx,diri,ox3ndx,dir3,cbar3,abari3,&newcnt) ; if (retval >= 0) { retval = newcnt ; } } /* Nothing! Guess we're done, eh? */ else { retval = 0 ; } if (betai != NULL) FREE(betai) ; /* A little paranoia and we're out of here. */ # ifdef DYLP_PARANOIA if (dy_chkdysys(orig_sys) == FALSE) retval = -1 ; # endif return (retval) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_vector.h0000644000175200017520000002403111573762145015544 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ #ifndef _DYLP_VECTOR_H #define _DYLP_VECTOR_H /* The part that requires information from the private header file config.h * is only needed for building DyLP itself, so we only do this if DYLP_INTERNAL * had been defined. */ #ifdef DYLP_INTERNAL /* @(#)dy_vector.h 4.5 11/06/04 svn/cvs: $Id: dy_vector.h 436 2011-06-08 21:06:45Z stefan $ */ #include /* Why, you might ask, are we including ctype.h? Well, it's required by the ANSI C specification, so it's pretty well guaranteed to exist. And, at least in Solaris and Linux environments that I'm familiar with, it'll pull in the compile-time symbols that specify big- or little-endian, which we really want. */ #include /* A bunch of standard definitions. */ #include "dylib_std.h" /* In a few rare instances, the declarations here will be unused, but for dylp this is a good bet. */ #include /* Some subset of these will work on any system. Check config_dylp.h to see which ones are actually in use. */ #ifdef HAVE_FLOAT_H # include #endif #ifdef HAVE_IEEEFP_H # include #endif #ifdef HAVE_SUNMATH_H # include #endif /* The Theory: quiet_nan is used to indicate failure (by returning NaN) without triggering a signal the client may not be prepared to catch. The idea is that any reasonable checks in the client will detect NaN fairly quickly. signalling_nan is used when there's no advantage in delaying a signal. The Reality: Neither seems to trigger a signal, and many computing environments can't tell the difference. But it's coded into dylp, and it'd be much ado to change. Hence the compile-time ugliness that follows. In the Sun Workshop environment, quiet_nan and signalling_nan are declared in sunmath.h and found in libsunmath. With release 5.0, sunmath.h includes some declarations of type `long long', which isn't supported under the -Xc (strict ANSI compatibility) option for cc. So, we extract only the definitions we need. Unfortunately, sunmath.h is present only in the Sun Workshop programming environment. Sun without Workshop has only the require file nan.h, which is inadequate. For a long while, GNU C didn't distinguish QNaN and SNaN. More recently, its support for IEEE 754 seems to have improved, but it's not clear that we can count on everyone having a recent GCC environment just yet. Here, too, nan.h is inadequate. The easy way out is to simply #define them as macros that return the proper bit pattern. Arguably this would make more sense in general than Sun's implementation as functions. According to IEEE 754, the proper bit patterns are: 0x7ff00000 00000000 for Inf 0x7fffffff ffffffff for QNaN 0x7ff00000 00000001 for SNaN It works this way: The IEEE definition of NaN is Bits Value 63 sign --- don't care for a NaN, but nice to be positive (0) 62:52 exponent --- must be maximum value, 0x7ff 51:0 fraction --- must not be zero (a fraction of zero is the representation of infinity). Sun documentation defines QNaN as having bit 51 of the fraction set to 1, SNaN as having bit 51 set to 0. Creating the proper constants qualifies as a serious gross hack. And if you have a little-endian machine (the 80x86 family being far and away the most common example), you need to flip the byte order. */ typedef union { unsigned char fpchr[8] ; double fpdbl ; } fpunion_t ; /* Yes, all this really is needed to get all the various compilers to quit complaining. We need the `(unsigned char)' to prevent some compilers from complaining about the initialiser being out of range. Goes to the ANSI C rule that `Character constants not preceded by the letter L have type int.' */ #ifdef WORDS_BIGENDIAN static fpunion_t QNaNbits UNUSED = { { (unsigned char) '\177', (unsigned char) '\377', (unsigned char) '\377', (unsigned char) '\377', (unsigned char) '\377', (unsigned char) '\377', (unsigned char) '\377', (unsigned char) '\376' } } ; static fpunion_t SNaNbits UNUSED = { { (unsigned char) '\177', (unsigned char) '\360', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\001' } } ; static fpunion_t Infbits UNUSED = { { (unsigned char) '\177', (unsigned char) '\360', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\0' } } ; #else static fpunion_t QNaNbits UNUSED = { { (unsigned char) '\376', (unsigned char) '\377', (unsigned char) '\377', (unsigned char) '\377', (unsigned char) '\377', (unsigned char) '\377', (unsigned char) '\377', (unsigned char) '\177' } } ; static fpunion_t SNaNbits UNUSED = { { (unsigned char) '\001', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\360', (unsigned char) '\177' } } ; static fpunion_t Infbits UNUSED = { { (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\0', (unsigned char) '\360', (unsigned char) '\177' } } ; #endif /* WORDS_BIGENDIAN */ /* If we didn't find a quiet_nan function, fake it with a macro. */ #ifndef DYLP_HAS_QUIET_NAN # define quiet_nan(zz_dummy_zz) (QNaNbits.fpdbl) #endif /* On some machines, HUGE_VAL isn't actually IEEE infinity. Make sure that it really is IEEE infinity. */ #undef HUGE_VAL #define HUGE_VAL (Infbits.fpdbl) /* In a Sun/Solaris environment, the definitions and functions that support IEEE floating point are in ieeefp.h. This seems to be true even if GNU compilers are being used instead of Sun Workshop compilers. In a GNU/Linux environment, the necessary definitions seem to live in math.h. The upshot is that we need to explicitly pull in ieeefp.h here for a Sun environment. In a Microsoft environment the correct functions look to be _finite and _isnan from float.h. Assign the proper names to finite and isnan, based on the values deduced by configure. Again, check config_dylp to see the actual names. If either name is already defined, bet that it's the correct definition. */ #ifndef finite # define finite DYLP_ISFINITE #endif #ifndef isnan # define isnan DYLP_ISNAN #endif #endif /* Packed Vectors The packed vector type consists of a header plus an array of pairs for the non-default entries of the vector. pkcoeff_struct Field Description ----- ----------- ndx the column/row index for the coefficient val the value of the coefficient pkvec_struct Field Description ----- ----------- ndx the common index for all coefficients when the vector is a row or column from a matrix nme name associated with this vector, if any dim length of the vector when unpacked dflt the default value of coefficients not in coeffs cnt number of non-default coefficients in the coeffs array sze allocated capacity (in pkcoeff_struct's) of the coeffs array coeffs the array of (column/row index, coefficient) pairs NOTE: pkvec_struct->coeffs is indexed from 0 and sized accordingly. */ typedef struct { int ndx ; double val ; } pkcoeff_struct ; typedef struct { int ndx ; const char *nme ; int dim ; double dflt ; int cnt ; int sze ; pkcoeff_struct *coeffs ; } pkvec_struct ; pkvec_struct *pkvec_new(int sze) ; bool pkvec_resize(pkvec_struct *pkvec, int sze) ; void pkvec_free(pkvec_struct *pkvec) ; bool pkvec_check(pkvec_struct *pkvec, const char *caller) ; double pkvec_2norm(pkvec_struct *vec) ; double exvec_1norm(double *vec, int len), exvec_ssq(double *vec, int len), exvec_2norm(double *vec, int len), exvec_infnorm(double *vec, int len, int *p_jmax) ; double pkvec_dotexvec(pkvec_struct *pkvec, double *exvec) ; #endif /* _DYLP_VECTOR_H */ DyLP-1.10.4/DyLP/src/Dylp/dy_consys_mathutils.c0000644000175200017520000011131112253224475017636 0ustar coincoin/* This file is a portion of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains math utility routines for the constraint system data structure. These handle things like dot products, norms, etc. */ #define DYLP_INTERNAL #include "dylib_errs.h" #include "dylib_std.h" #include "dy_consys.h" static char sccsid[] UNUSED = "@(#)dy_consys_mathutils.c 4.5 11/11/04" ; static char svnid[] UNUSED = "$Id: dy_consys_mathutils.c 524 2013-12-15 03:59:57Z tkr $" ; double consys_dotrow (consys_struct *consys, int rowndx, double *vec) /* This routine computes the dot product of the specified row with the expanded vector passed in vec. Parameters: consys: constraint system rowndx: row vec: vector Returns: dot product, or NaN if the calculation goes awry. */ { double dotprod ; rowhdr_struct *rowhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_dotrow" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (quiet_nan(0)) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (quiet_nan(0)) ; } # endif # ifndef DYLP_NDEBUG if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (quiet_nan(0)) ; } # endif rowhdr = consys->mtx.rows[rowndx] ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (quiet_nan(0)) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx,rowhdr) ; return (quiet_nan(0)) ; } if (vec == NULL) { errmsg(2,rtnnme,"vec") ; return (quiet_nan(0)) ; } # endif dotprod = 0 ; for (coeff = rowhdr->coeffs ; coeff != NULL ; coeff = coeff->rownxt) { # ifdef DYLP_PARANOIA if (coeff->colhdr == NULL) { errmsg(125,rtnnme,consys->nme,"colhdr",coeff,"row", consys_nme(consys,'c',rowndx,FALSE,NULL),rowndx) ; return (quiet_nan(0)) ; } if (coeff->colhdr->ndx <= 0 || coeff->colhdr->ndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",coeff->colhdr->ndx, 1,consys->varcnt) ; return (quiet_nan(0)) ; } if (coeff->colhdr != consys->mtx.cols[coeff->colhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"column",coeff->colhdr,coeff->colhdr->ndx, coeff->colhdr->ndx,consys->mtx.cols[coeff->colhdr->ndx]) ; return (quiet_nan(0)) ; } # endif dotprod += coeff->val*vec[coeff->colhdr->ndx] ; } return (dotprod) ; } double consys_dotcol (consys_struct *consys, int colndx, double *vec) /* This routine computes the dot product of the specified column with the expanded vector passed in vec. Parameters: consys: constraint system colndx: column vec: vector Returns: dot product, or NaN if the calculation goes awry. */ { double dotprod ; colhdr_struct *colhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_dotcol" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (quiet_nan(0)) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (quiet_nan(0)) ; } # endif # ifndef DYLP_NDEBUG if (colndx <= 0 || colndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",colndx,1,consys->varcnt) ; return (quiet_nan(0)) ; } # endif colhdr = consys->mtx.cols[colndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (quiet_nan(0)) ; } if (colndx != colhdr->ndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx,colndx,colhdr) ; return (quiet_nan(0)) ; } if (vec == NULL) { errmsg(2,rtnnme,"vec") ; return (quiet_nan(0)) ; } # endif dotprod = 0 ; for (coeff = colhdr->coeffs ; coeff != NULL ; coeff = coeff->colnxt) { # ifdef DYLP_PARANOIA if (coeff->rowhdr == NULL) { errmsg(125,rtnnme,consys->nme,"rowhdr",coeff,"column", consys_nme(consys,'v',colndx,FALSE,NULL),colndx) ; return (quiet_nan(0)) ; } if (coeff->rowhdr->ndx <= 0 || coeff->rowhdr->ndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",coeff->rowhdr->ndx, 1,consys->concnt) ; return (quiet_nan(0)) ; } if (coeff->rowhdr != consys->mtx.rows[coeff->rowhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"row",coeff->rowhdr,coeff->rowhdr->ndx, coeff->rowhdr->ndx,consys->mtx.rows[coeff->rowhdr->ndx]) ; return (quiet_nan(0)) ; } # endif dotprod += coeff->val*vec[coeff->rowhdr->ndx] ; } return (dotprod) ; } double consys_1normrow (consys_struct *consys, int rowndx) /* This routine computes the 1-norm of a row: SUM{j} |a| Parameters: consys: constraint system rowndx: row Returns: value of the norm, or NaN if the calculation goes awry */ { double norm ; rowhdr_struct *rowhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_1normrow" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (quiet_nan(0)) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (quiet_nan(0)) ; } # endif # ifndef DYLP_NDEBUG if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (quiet_nan(0)) ; } # endif rowhdr = consys->mtx.rows[rowndx] ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (quiet_nan(0)) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx,rowhdr) ; return (quiet_nan(0)) ; } # endif norm = 0 ; for (coeff = rowhdr->coeffs ; coeff != NULL ; coeff = coeff->rownxt) { #ifdef DYLP_PARANOIA if (coeff->colhdr == NULL) { errmsg(125,rtnnme,consys->nme,"colhdr",coeff,"row", consys_nme(consys,'c',rowndx,FALSE,NULL),rowndx) ; return (quiet_nan(0)) ; } if (coeff->colhdr->ndx <= 0 || coeff->colhdr->ndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",coeff->colhdr->ndx, 1,consys->varcnt) ; return (quiet_nan(0)) ; } if (coeff->colhdr != consys->mtx.cols[coeff->colhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"column",coeff->colhdr,coeff->colhdr->ndx, coeff->colhdr->ndx,consys->mtx.cols[coeff->colhdr->ndx]) ; return (quiet_nan(0)) ; } #endif norm += fabs(coeff->val) ; } return (norm) ; } double consys_ssqrow (consys_struct *consys, int rowndx) /* This routine computes the sum of squares of a row: SUM{j} a**2. It's sometimes more useful to have this than the actual 2-norm. Parameters: consys: constraint system rowndx: row Returns: value of the sum of squares, or NaN if the calculation goes awry */ { double norm ; rowhdr_struct *rowhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_ssqrow" ; # endif /* The usual paranoia, plus an honest index check. */ # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (quiet_nan(0)) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (quiet_nan(0)) ; } # endif # ifndef DYLP_NDEBUG if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (quiet_nan(0)) ; } # endif rowhdr = consys->mtx.rows[rowndx] ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (quiet_nan(0)) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx,rowhdr) ; return (quiet_nan(0)) ; } # endif norm = 0 ; for (coeff = rowhdr->coeffs ; coeff != NULL ; coeff = coeff->rownxt) { # ifdef DYLP_PARANOIA if (coeff->colhdr == NULL) { errmsg(125,rtnnme,consys->nme,"colhdr",coeff,"row", consys_nme(consys,'c',rowndx,FALSE,NULL),rowndx) ; return (quiet_nan(0)) ; } if (coeff->colhdr->ndx <= 0 || coeff->colhdr->ndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",coeff->colhdr->ndx, 1,consys->varcnt) ; return (quiet_nan(0)) ; } if (coeff->colhdr != consys->mtx.cols[coeff->colhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"column",coeff->colhdr,coeff->colhdr->ndx, coeff->colhdr->ndx,consys->mtx.cols[coeff->colhdr->ndx]) ; return (quiet_nan(0)) ; } # endif norm += coeff->val*coeff->val ; } return (norm) ; } double consys_2normrow (consys_struct *consys, int rowndx) /* This routine computes the 2-norm of a row: sqrt(SUM{j} a**2) Parameters: consys: constraint system rowndx: row Returns: value of the norm, or NaN if the calculation goes awry */ { double norm ; rowhdr_struct *rowhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_2normrow" ; # endif /* The usual paranoia, plus an honest index check. */ # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (quiet_nan(0)) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (quiet_nan(0)) ; } # endif # ifndef DYLP_NDEBUG if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (quiet_nan(0)) ; } # endif rowhdr = consys->mtx.rows[rowndx] ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (quiet_nan(0)) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx,rowhdr) ; return (quiet_nan(0)) ; } # endif norm = 0 ; for (coeff = rowhdr->coeffs ; coeff != NULL ; coeff = coeff->rownxt) { # ifdef DYLP_PARANOIA if (coeff->colhdr == NULL) { errmsg(125,rtnnme,consys->nme,"colhdr",coeff,"row", consys_nme(consys,'c',rowndx,FALSE,NULL),rowndx) ; return (quiet_nan(0)) ; } if (coeff->colhdr->ndx <= 0 || coeff->colhdr->ndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",coeff->colhdr->ndx, 1,consys->varcnt) ; return (quiet_nan(0)) ; } if (coeff->colhdr != consys->mtx.cols[coeff->colhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"column",coeff->colhdr,coeff->colhdr->ndx, coeff->colhdr->ndx,consys->mtx.cols[coeff->colhdr->ndx]) ; return (quiet_nan(0)) ; } # endif norm += coeff->val*coeff->val ; } return (sqrt(norm)) ; } double consys_infnormrow (consys_struct *consys, int rowndx) /* This routine computes the infinity-norm of a row: MAX{j} |a| Parameters: consys: constraint system rowndx: row Returns: value of the norm, or NaN if the calculation goes awry */ { double norm ; rowhdr_struct *rowhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_infnormrow" ; # endif /* The usual paranoia, plus an honest index check. */ # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (quiet_nan(0)) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (quiet_nan(0)) ; } # endif # ifndef DYLP_NDEBUG if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (quiet_nan(0)) ; } # endif rowhdr = consys->mtx.rows[rowndx] ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (quiet_nan(0)) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx,rowhdr) ; return (quiet_nan(0)) ; } # endif norm = 0 ; for (coeff = rowhdr->coeffs ; coeff != NULL ; coeff = coeff->rownxt) { # ifdef DYLP_PARANOIA if (coeff->colhdr == NULL) { errmsg(125,rtnnme,consys->nme,"colhdr",coeff,"row", consys_nme(consys,'c',rowndx,FALSE,NULL),rowndx) ; return (quiet_nan(0)) ; } if (coeff->colhdr->ndx <= 0 || coeff->colhdr->ndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",coeff->colhdr->ndx, 1,consys->varcnt) ; return (quiet_nan(0)) ; } if (coeff->colhdr != consys->mtx.cols[coeff->colhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"column",coeff->colhdr,coeff->colhdr->ndx, coeff->colhdr->ndx,consys->mtx.cols[coeff->colhdr->ndx]) ; return (quiet_nan(0)) ; } # endif norm = maxx(fabs(coeff->val),norm) ; } return (norm) ; } double consys_1normcol (consys_struct *consys, int colndx) /* This routine computes the 1-norm of a column: SUM{i} |a|. Parameters: consys: constraint system colndx: column Returns: value of the norm, or NaN if the calculation goes awry */ { double norm ; colhdr_struct *colhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_1normcol" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (quiet_nan(0)) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (quiet_nan(0)) ; } # endif # ifndef DYLP_NDEBUG if (colndx <= 0 || colndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",colndx,1,consys->varcnt) ; return (quiet_nan(0)) ; } # endif colhdr = consys->mtx.cols[colndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (quiet_nan(0)) ; } if (colndx != colhdr->ndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx,colndx,colhdr) ; return (quiet_nan(0)) ; } # endif norm = 0 ; for (coeff = colhdr->coeffs ; coeff != NULL ; coeff = coeff->colnxt) { # ifdef DYLP_PARANOIA if (coeff->rowhdr == NULL) { errmsg(125,rtnnme,consys->nme,"rowhdr",coeff,"column", consys_nme(consys,'v',colndx,FALSE,NULL),colndx) ; return (quiet_nan(0)) ; } if (coeff->rowhdr->ndx <= 0 || coeff->rowhdr->ndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"row",coeff->rowhdr->ndx, 1,consys->varcnt) ; return (quiet_nan(0)) ; } if (coeff->rowhdr != consys->mtx.rows[coeff->rowhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"row",coeff->rowhdr,coeff->rowhdr->ndx, coeff->rowhdr->ndx,consys->mtx.rows[coeff->rowhdr->ndx]) ; return (quiet_nan(0)) ; } # endif norm += fabs(coeff->val) ; } return (norm) ; } double consys_ssqcol (consys_struct *consys, int colndx) /* This routine computes the sum of squares of a column: SUM{i} a**2. It's sometimes more useful to have this than the actual 2-norm. Parameters: consys: constraint system colndx: column Returns: value of the norm, or NaN if the calculation goes awry */ { double norm ; colhdr_struct *colhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_ssqcol" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (quiet_nan(0)) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (quiet_nan(0)) ; } # endif # ifndef DYLP_NDEBUG if (colndx <= 0 || colndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",colndx,1,consys->varcnt) ; return (quiet_nan(0)) ; } # endif colhdr = consys->mtx.cols[colndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (quiet_nan(0)) ; } if (colndx != colhdr->ndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx,colndx,colhdr) ; return (quiet_nan(0)) ; } # endif norm = 0 ; for (coeff = colhdr->coeffs ; coeff != NULL ; coeff = coeff->colnxt) { # ifdef DYLP_PARANOIA if (coeff->rowhdr == NULL) { errmsg(125,rtnnme,consys->nme,"rowhdr",coeff,"column", consys_nme(consys,'v',colndx,FALSE,NULL),colndx) ; return (quiet_nan(0)) ; } if (coeff->rowhdr->ndx <= 0 || coeff->rowhdr->ndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"row",coeff->rowhdr->ndx, 1,consys->varcnt) ; return (quiet_nan(0)) ; } if (coeff->rowhdr != consys->mtx.rows[coeff->rowhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"row",coeff->rowhdr,coeff->rowhdr->ndx, coeff->rowhdr->ndx,consys->mtx.rows[coeff->rowhdr->ndx]) ; return (quiet_nan(0)) ; } # endif norm += coeff->val*coeff->val ; } return (norm) ; } double consys_2normcol (consys_struct *consys, int colndx) /* This routine computes the 2-norm of a column: sqrt(SUM{i} a**2). Parameters: consys: constraint system colndx: column Returns: value of the norm, or NaN if the calculation goes awry */ { double norm ; colhdr_struct *colhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_2normcol" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (quiet_nan(0)) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (quiet_nan(0)) ; } # endif # ifndef DYLP_NDEBUG if (colndx <= 0 || colndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",colndx,1,consys->varcnt) ; return (quiet_nan(0)) ; } # endif colhdr = consys->mtx.cols[colndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (quiet_nan(0)) ; } if (colndx != colhdr->ndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx,colndx,colhdr) ; return (quiet_nan(0)) ; } # endif norm = 0 ; for (coeff = colhdr->coeffs ; coeff != NULL ; coeff = coeff->colnxt) { # ifdef DYLP_PARANOIA if (coeff->rowhdr == NULL) { errmsg(125,rtnnme,consys->nme,"rowhdr",coeff,"column", consys_nme(consys,'v',colndx,FALSE,NULL),colndx) ; return (quiet_nan(0)) ; } if (coeff->rowhdr->ndx <= 0 || coeff->rowhdr->ndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"row",coeff->rowhdr->ndx, 1,consys->varcnt) ; return (quiet_nan(0)) ; } if (coeff->rowhdr != consys->mtx.rows[coeff->rowhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"row",coeff->rowhdr,coeff->rowhdr->ndx, coeff->rowhdr->ndx,consys->mtx.rows[coeff->rowhdr->ndx]) ; return (quiet_nan(0)) ; } # endif norm += coeff->val*coeff->val ; } return (sqrt(norm)) ; } double consys_infnormcol (consys_struct *consys, int colndx) /* This routine computes the infinity-norm of a column: MAX{i} |a|. Parameters: consys: constraint system colndx: column Returns: value of the norm, or NaN if the calculation goes awry */ { double norm ; colhdr_struct *colhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_infnormcol" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (quiet_nan(0)) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (quiet_nan(0)) ; } # endif # ifndef DYLP_NDEBUG if (colndx <= 0 || colndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",colndx,1,consys->varcnt) ; return (quiet_nan(0)) ; } # endif colhdr = consys->mtx.cols[colndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (quiet_nan(0)) ; } if (colndx != colhdr->ndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx,colndx,colhdr) ; return (quiet_nan(0)) ; } # endif norm = 0 ; for (coeff = colhdr->coeffs ; coeff != NULL ; coeff = coeff->colnxt) { # ifdef DYLP_PARANOIA if (coeff->rowhdr == NULL) { errmsg(125,rtnnme,consys->nme,"rowhdr",coeff,"column", consys_nme(consys,'v',colndx,FALSE,NULL),colndx) ; return (quiet_nan(0)) ; } if (coeff->rowhdr->ndx <= 0 || coeff->rowhdr->ndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"row",coeff->rowhdr->ndx, 1,consys->varcnt) ; return (quiet_nan(0)) ; } if (coeff->rowhdr != consys->mtx.rows[coeff->rowhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"row",coeff->rowhdr,coeff->rowhdr->ndx, coeff->rowhdr->ndx,consys->mtx.rows[coeff->rowhdr->ndx]) ; return (quiet_nan(0)) ; } # endif norm = maxx(fabs(coeff->val),norm) ; } return (norm) ; } bool consys_mulrow (consys_struct *consys, int rowndx, double scalar) /* This routine multiplies a row i by a scalar q. It deals with the coefficients a, and also with b, blow, cub, and clb, if they exist. If q < 0, the type of constraint is changed accordingly (>= swapped with <=) and clb is swapped with cub. Note that range constraints always take the form blow <= ax <= b, so if we multiply a range constraint by q < 0, the resulting constraint is qblow >= (qa)x >= qb => qb <= (qa)x <= qblow. Attempting to multiply a constraint by 0 gets you a warning if the CONSYS_WRNZERO flag is set in consys->opts. The routine will work with clb and cub only if both are present. It's difficult to define consistent changes otherwise. Parameters: consys: constraint system rowndx: row to be modified scalar: the multiplicative scalar Returns: TRUE if no problems are encountered, FALSE otherwise. */ { double tmprhs ; rowhdr_struct *rowhdr ; coeff_struct *coeff ; conbnd_struct tmpbnd ; bool do_conbnds ; const char *rtnnme = "consys_mulrow" ; /* The usual paranoia, plus an honest index check. */ # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (FALSE) ; } # endif rowhdr = consys->mtx.rows[rowndx] ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (FALSE) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx,rowhdr) ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (scalar == 0 && flgon(consys->opts,CONSYS_WRNZERO)) { dywarn(132,rtnnme,consys->nme,"row",rowhdr->nme,rowndx) ; } # endif if (consys->cub != NULL && consys->clb != NULL) do_conbnds = TRUE ; else do_conbnds = FALSE ; /* The straightforward part. Multiply the coefficients by the scalar. */ for (coeff = rowhdr->coeffs ; coeff != NULL ; coeff = coeff->rownxt) { # ifdef DYLP_PARANOIA if (coeff->colhdr == NULL) { errmsg(125,rtnnme,consys->nme,"colhdr",coeff,"row", consys_nme(consys,'c',rowndx,FALSE,NULL),rowndx) ; return (FALSE) ; } if (coeff->colhdr->ndx <= 0 || coeff->colhdr->ndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",coeff->colhdr->ndx, 1,consys->varcnt) ; return (FALSE) ; } if (coeff->colhdr != consys->mtx.cols[coeff->colhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"column",coeff->colhdr,coeff->colhdr->ndx, coeff->colhdr->ndx,consys->mtx.cols[coeff->colhdr->ndx]) ; return (FALSE) ; } # endif coeff->val *= scalar ; } /* If we did get a 0 for the scalar, we can be done in no time. */ if (scalar == 0) { if (consys->rhs != NULL) consys->rhs[rowndx] = 0 ; if (consys->rhslow != NULL) consys->rhslow[rowndx] = 0 ; if (do_conbnds == TRUE) { tmpbnd.revs = 0 ; tmpbnd.inf = 0 ; tmpbnd.bnd = 0 ; consys->cub[rowndx] = tmpbnd ; consys->clb[rowndx] = tmpbnd ; } return (TRUE) ; } /* For q != 0, it's a little more work. Correct b, blow, cub, and clb, if they exist. */ if (consys->rhs != NULL) consys->rhs[rowndx] *= scalar ; if (consys->rhslow != NULL) consys->rhslow[rowndx] *= scalar ; if (do_conbnds == TRUE) { consys->cub[rowndx].bnd *= scalar ; consys->clb[rowndx].bnd *= scalar ; } /* And now the complicated bit. If q < 0, swap the constraint bounds, then take additional action as needed, depending on the constraint type. */ if (scalar < 0) { if (do_conbnds == TRUE) { tmpbnd = consys->cub[rowndx] ; consys->cub[rowndx] = consys->clb[rowndx] ; consys->clb[rowndx] = tmpbnd ; } switch (consys->ctyp[rowndx]) { case contypLE: { consys->ctyp[rowndx] = contypGE ; break ; } case contypGE: { consys->ctyp[rowndx] = contypLE ; break ; } case contypRNG: { tmprhs = consys->rhs[rowndx] ; consys->rhs[rowndx] = consys->rhslow[rowndx] ; consys->rhslow[rowndx] = tmprhs ; break ; } case contypEQ: case contypNB: { break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } } return (TRUE) ; } bool consys_divrow (consys_struct *consys, int rowndx, double scalar) /* This routine divides a row i by a scalar q. It deals with the coefficients a, and also with b, blow, cub, and clb, if they exist. If q < 0, the type of constraint is changed accordingly (>= swapped with <=) and clb is swapped with cub. It's a separate routine (rather than using consys_mulrow to multiply by 1/scalar) to try and retain accuracy. Note that range constraints always take the form blow <= ax <= b, so if we divide a range constraint by q < 0, the resulting constraint is qblow >= (qa)x >= qb => qb <= (qa)x <= qblow. Attempting to divide a constraint by 0 is an error. The routine will work with clb and cub only if both are present. It's difficult to define consistent changes otherwise. Parameters: consys: constraint system rowndx: row to be divided scalar: the dividing scalar Returns: TRUE if no problems are encountered, FALSE otherwise. */ { double tmprhs ; rowhdr_struct *rowhdr ; coeff_struct *coeff ; conbnd_struct tmpbnd ; bool do_conbnds ; const char *rtnnme = "consys_divrow" ; /* The usual paranoia, plus an honest index check. */ # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_ROWHDR)) ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (FALSE) ; } # endif rowhdr = consys->mtx.rows[rowndx] ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (FALSE) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx,rowhdr) ; return (FALSE) ; } if (scalar == 0) { errmsg(5,rtnnme,"scalar",(int) scalar) ; return (FALSE) ; } # endif if (consys->cub != NULL && consys->clb != NULL) do_conbnds = TRUE ; else do_conbnds = FALSE ; /* The straightforward part. Divide the coefficients by the scalar. */ for (coeff = rowhdr->coeffs ; coeff != NULL ; coeff = coeff->rownxt) { # ifdef DYLP_PARANOIA if (coeff->colhdr == NULL) { errmsg(125,rtnnme,consys->nme,"colhdr",coeff,"row", consys_nme(consys,'c',rowndx,FALSE,NULL),rowndx) ; return (FALSE) ; } if (coeff->colhdr->ndx <= 0 || coeff->colhdr->ndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",coeff->colhdr->ndx, 1,consys->varcnt) ; return (FALSE) ; } if (coeff->colhdr != consys->mtx.cols[coeff->colhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"column",coeff->colhdr,coeff->colhdr->ndx, coeff->colhdr->ndx,consys->mtx.cols[coeff->colhdr->ndx]) ; return (FALSE) ; } # endif coeff->val /= scalar ; } /* Correct b, blow, cub, and clb, if they exist. */ if (consys->rhs != NULL) consys->rhs[rowndx] /= scalar ; if (consys->rhslow != NULL) consys->rhslow[rowndx] /= scalar ; if (do_conbnds == TRUE) { consys->cub[rowndx].bnd /= scalar ; consys->clb[rowndx].bnd /= scalar ; } /* And now the complicated bit. If q < 0, swap the constraint bounds, then take additional action as needed, depending on the constraint type. */ if (scalar < 0) { if (do_conbnds == TRUE) { tmpbnd = consys->cub[rowndx] ; consys->cub[rowndx] = consys->clb[rowndx] ; consys->clb[rowndx] = tmpbnd ; } switch (consys->ctyp[rowndx]) { case contypLE: { consys->ctyp[rowndx] = contypGE ; break ; } case contypGE: { consys->ctyp[rowndx] = contypLE ; break ; } case contypRNG: { tmprhs = consys->rhs[rowndx] ; consys->rhs[rowndx] = consys->rhslow[rowndx] ; consys->rhslow[rowndx] = tmprhs ; break ; } case contypEQ: case contypNB: { break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } } return (TRUE) ; } int consys_gcdrow (consys_struct *consys, int rowndx) /* This routine calculates the gcd of the coefficients of the specified row using the euclidean algorithm. Note that explicit zeros should not appear in the coefficient matrix. Obviously, the coefficients should be integer. If they're not, the routine returns 0. If the row is empty, the routine returns 0, on the theory that whatever you were trying to do with this row, it's probably not suitable. The code uses the following statement of the euclidean algorithm, courtesy of Martin, Large Scale Linear and Integer Optimization, p. 106. Assume a<1> and a<2> positive integer, a<1> > a<2>. while (a<1> > 0 && a<2> > 0) { q = floor(a<1>/a<2>) ; r = a<1> - q*a<2> ; a<1> = a<2> ; a<2> = r ; } Parameters: consys: constraint system rowndx: row to be evaluated Returns: gcd(a<1>, ..., a), 0 if the coefficients aren't integer, -1 if anything else goes wrong. */ { double gcd,a1,a2,q,r ; rowhdr_struct *rowhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_gcdrow" ; # endif /* The usual paranoia, plus an honest index check. */ # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (-1) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (-1) ; } # endif # ifndef DYLP_NDEBUG if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (-1) ; } # endif rowhdr = consys->mtx.rows[rowndx] ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (-1) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx,rowhdr) ; return (-1) ; } # endif /* Trivial cases: 0 or 1 coefficients. */ if (rowhdr->len == 0) return (1) ; coeff = rowhdr->coeffs ; # ifdef DYLP_PARANOIA if (coeff == NULL) { errmsg(116,rtnnme,consys->nme,rowhdr->nme,rowhdr->ndx,rowhdr->len,0) ; return (-1) ; } if (coeff->colhdr == NULL) { errmsg(125,rtnnme,consys->nme,"colhdr",coeff,"row", consys_nme(consys,'c',rowndx,FALSE,NULL),rowndx) ; return (-1) ; } if (coeff->colhdr->ndx <= 0 || coeff->colhdr->ndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",coeff->colhdr->ndx, 1,consys->varcnt) ; return (-1) ; } if (coeff->colhdr != consys->mtx.cols[coeff->colhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"column",coeff->colhdr,coeff->colhdr->ndx, coeff->colhdr->ndx,consys->mtx.cols[coeff->colhdr->ndx]) ; return (-1) ; } # endif a1 = coeff->val ; if (a1 < 0) a1 = -a1 ; if (floor(a1) != a1) return (0) ; if (rowhdr->len == 1) return ((int) a1) ; /* Two or more coefficients. We work through them, calculating gcd(gcd,a). We first do a quick test for a/gcd integer (in which case we can keep gcd and move on to the next coefficient). When the gcd drops to 1, we bail out. */ gcd = a1 ; for (coeff = coeff->rownxt ; gcd > 1 && coeff != NULL ; coeff = coeff->rownxt) { # ifdef DYLP_PARANOIA if (coeff->colhdr == NULL) { errmsg(125,rtnnme,consys->nme,"colhdr",coeff,"row", consys_nme(consys,'c',rowndx,FALSE,NULL),rowndx) ; return (-1) ; } if (coeff->colhdr->ndx <= 0 || coeff->colhdr->ndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",coeff->colhdr->ndx, 1,consys->varcnt) ; return (-1) ; } if (coeff->colhdr != consys->mtx.cols[coeff->colhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"column",coeff->colhdr,coeff->colhdr->ndx, coeff->colhdr->ndx,consys->mtx.cols[coeff->colhdr->ndx]) ; return (-1) ; } # endif a1 = coeff->val ; if (a1 < 0) a1 = -a1 ; if (floor(a1) != a1) return (0) ; if (a1 > gcd) { if (floor(a1/gcd) == a1/gcd) continue ; a2 = gcd ; } else { a2 = a1 ; a1 = gcd ; } /* We need to do a gcd calculation. */ while (a1 > 0 && a2 > 0) { q = floor(a1/a2) ; r = a1 - q*a2 ; a1 = a2 ; a2 = r ; } gcd = a1 ; } return ((int) gcd) ; } bool consys_accumcol (consys_struct *consys, int colndx, double *vec) /* This routine adds the column specified by colndx to the expanded vector passed in vec. Parameters: consys: constraint system colndx: column vec: vector Returns: TRUE if there are no problems, FALSE otherwise. */ { colhdr_struct *colhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_accumcol" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (colndx <= 0 || colndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",colndx,1,consys->varcnt) ; return (FALSE) ; } # endif colhdr = consys->mtx.cols[colndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (FALSE) ; } if (colndx != colhdr->ndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx,colndx,colhdr) ; return (FALSE) ; } if (vec == NULL) { errmsg(2,rtnnme,"vec") ; return (FALSE) ; } # endif for (coeff = colhdr->coeffs ; coeff != NULL ; coeff = coeff->colnxt) { # ifdef DYLP_PARANOIA if (coeff->rowhdr == NULL) { errmsg(125,rtnnme,consys->nme,"rowhdr",coeff,"column", consys_nme(consys,'v',colndx,FALSE,NULL),colndx) ; return (FALSE) ; } if (coeff->rowhdr->ndx <= 0 || coeff->rowhdr->ndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",coeff->rowhdr->ndx, 1,consys->concnt) ; return (FALSE) ; } if (coeff->rowhdr != consys->mtx.rows[coeff->rowhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"row",coeff->rowhdr,coeff->rowhdr->ndx, coeff->rowhdr->ndx,consys->mtx.rows[coeff->rowhdr->ndx]) ; return (FALSE) ; } # endif vec[coeff->rowhdr->ndx] += coeff->val ; } return (TRUE) ; } bool consys_mulaccumcol (consys_struct *consys, int colndx, double scalar, double *vec) /* This routine multiplies the column specified by colndx by scalar and then adds it to the expanded vector passed in vec. Identical to consys_accumcol, except for the multiplication. Parameters: consys: constraint system colndx: column scalar: scalar multiplier for column vec: vector Returns: TRUE if there are no problems, FALSE otherwise. */ { colhdr_struct *colhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_accumcol" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (colndx <= 0 || colndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",colndx,1,consys->varcnt) ; return (FALSE) ; } # endif colhdr = consys->mtx.cols[colndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (FALSE) ; } if (colndx != colhdr->ndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx,colndx,colhdr) ; return (FALSE) ; } if (vec == NULL) { errmsg(2,rtnnme,"vec") ; return (FALSE) ; } # endif for (coeff = colhdr->coeffs ; coeff != NULL ; coeff = coeff->colnxt) { # ifdef DYLP_PARANOIA if (coeff->rowhdr == NULL) { errmsg(125,rtnnme,consys->nme,"rowhdr",coeff,"column", consys_nme(consys,'v',colndx,FALSE,NULL),colndx) ; return (FALSE) ; } if (coeff->rowhdr->ndx <= 0 || coeff->rowhdr->ndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",coeff->rowhdr->ndx, 1,consys->concnt) ; return (FALSE) ; } if (coeff->rowhdr != consys->mtx.rows[coeff->rowhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"row",coeff->rowhdr,coeff->rowhdr->ndx, coeff->rowhdr->ndx,consys->mtx.rows[coeff->rowhdr->ndx]) ; return (FALSE) ; } # endif vec[coeff->rowhdr->ndx] += scalar*coeff->val ; } return (TRUE) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_duenna.c0000644000175200017520000015513212253224475015511 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains la Duenna, which fusses after each pivot. A spin doctor might have been better, but I tend toward anachronism. There are also routines that handle refactoring and primal and dual accuracy checks. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_duenna.c 4.6 10/15/05" ; static char svnid[] UNUSED = "$Id: dy_duenna.c 524 2013-12-15 03:59:57Z tkr $" ; static bool groombasis () /* This routine runs after direct recalculation of the primal variables to make sure no basic variables were misclassified due to accumulated numeric inaccuracy in the course of iterative updates. If it finds a misclassified variable, it resets the status to the appropriate value. The intent of the routine is to roll with minor corruption due to accumulated numeric inaccuracy. Deciding whether corruption is minor, however, is not entirely simple. We no longer have the previous variable values, so we're just guessing by comparing the old status with what the status ought to be. From experience, having the old values wouldn't improve things much. The grooming tolerance (i.e., the amount of error we'll tolerate before considering an abort) is large: 1.0e05*(bogus multiplier)*(pfeas tolerance). The rules for considering an abort are pretty simple: * If we started at a bound, we have to remain within the grooming tolerance for the bound value. * If we move over a bound, we have to remain within the grooming tolerance for the bound value. * Anything else is grounds for an error. In the end, though, it seems to require informed human judgement. When you're debugging, aborts are often useful. When you're doing production runs, well, might as well let the accuracy maintenance algorithms earn their keep. dylp provides an option, which you can set to silent, warn, or abort. Status codes BFX and BFR are assigned initially based on the lower and upper bounds. BFR should never change, but BFX can change to BLLB or BUUB if somewhere the variable goes infeasible. Groombasis may need to set BFX when a variable moves from out-of-bound (BLLB, BUUB) to at-bound (BLB, BUB), and the bounds are equal. One more complication: If the primal antidegeneracy mechanism is active, the true value (dy_x) of variables in the degenerate set (dy_degenset[bpos] > 0) must be at bound. For variables not in the degenerate set, the value in dy_x should match the value in dy_xbasic. If either of these assertions fails, inaccuracy has accumulated as we pivoted the permuted values. The only way to restore accuracy is to back out the antidegeneracy mechanism, begin the basis scan again, fix whatever's necessary, and request a refactor. The routine always checks the full basis (even if we're going to fail, might as well know the extent of the damage). Parameters: none Returns: TRUE if the basis is correct or only correctable errors were encountered; FALSE otherwise. */ { int i,ipos,staterrs ; double xi,*vlb,vlbi,*vub,vubi,tol ; flags stati,newstati,quali ; char statbuf[32] ; bool retval,statok,backout ; const char *rtnnme = "groombasis" ; # ifndef DYLP_NDEBUG int print ; # endif # ifndef DYLP_NDEBUG switch (dy_lp->phase) { case dyPRIMAL1: { print = dy_opts->print.phase1 ; break ; } case dyPRIMAL2: { print = dy_opts->print.phase2 ; break ; } case dyDUAL: { print = dy_opts->print.phase2 ; break ; } case dyADDCON: { print = dy_opts->print.conmgmt ; break ; } case dyFORCEDUAL: case dyFORCEPRIMAL: case dyFORCEFULL: { print = maxx(dy_opts->print.conmgmt,dy_opts->print.varmgmt) ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } # endif vlb = dy_sys->vlb ; vub = dy_sys->vub ; tol = dy_tols->pfeas*dy_tols->bogus*1.0e05 ; backout = FALSE ; retval = TRUE ; /* The outer loop is here to allow us to restart the grooming operation after backing out the antidegeneracy mechanism. If things go well, we won't need it. The inner loop walks the basis, checking the variables. */ while (TRUE) { staterrs = 0 ; for (ipos = 1 ; ipos <= dy_sys->concnt ; ipos++) { i = dy_basis[ipos] ; stati = getflg(dy_status[i],vstatSTATUS) ; quali = getflg(dy_status[i],vstatQUALS) ; vlbi = vlb[i] ; vubi = vub[i] ; statok = TRUE ; /* If the antidegeneracy mechanism is active in primal simplex, check that the true value is as it should be. Variables in the degenerate set should be at bound (but allow for the fact we might have pivoted a free variable into the slot); variables not in the degenerate set should be unchanged and thus should agree with the values held in xbasic. If we've lost accuracy, call dy_degenout to back out the antidegeneracy perturbations and start grooming the basis from the beginning. We can ignore the return value from dy_degenout --- it'll be REQCHK, and once we're done grooming the basis we'll be doing just that. */ if (dy_lp->degen > 0 && (dy_lp->phase == dyPRIMAL1 || dy_lp->phase == dyPRIMAL2)) { xi = dy_x[i] ; if (dy_degenset[ipos] > 0) { # ifdef DYLP_PARANOIA if (dy_lp->degen < dy_degenset[ipos]) { errmsg(390,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,ipos,dy_degenset[ipos], consys_nme(dy_sys,'v',i,FALSE,NULL),i,dy_prtvstat(stati), dy_lp->degen) ; retval = FALSE ; continue ; } # endif if (atbnd(xi,vlbi)) { /* dy_x[i] = vlbi ; */ } else if (atbnd(xi,vubi)) { /* dy_x[i] = vubi ; */ } else if (flgoff(stati,vstatBFR)) { backout = TRUE ; } } else { if (atbnd(dy_xbasic[ipos],xi)) { /* dy_xbasic[ipos] = xi ; */ } else { backout = TRUE ; } } if (backout == TRUE) { # ifndef DYLP_NDEBUG if (print >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tbacking out antidegeneracy at (%s)%d due to accumulated", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho," error;\n\ttrue %s (%d) = %g ;", consys_nme(dy_sys,'v',i,FALSE,NULL),i,xi) ; if (dy_degenset[ipos] > 0) { if (fabs(xi-vlbi) < fabs(xi-vubi)) { dyio_outfmt(dy_logchn,dy_gtxecho, " lb = %g ; |x-lb| = %g, tol %g.", vlbi,fabs(xi-vlbi), dy_tols->zero*(1+fabs(vlbi))) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, " ub = %g ; |x-ub| = %g, tol %g.", vubi,fabs(xi-vubi), dy_tols->zero*(1+fabs(vubi))) ; } } else { dyio_outfmt(dy_logchn,dy_gtxecho, "xbasic = %g ; |x-xbasic| = %g, tol %g.", dy_xbasic[ipos],fabs(xi-dy_xbasic[ipos]), dy_tols->zero*(1+fabs(xi))) ; } } # endif (void) dy_degenout(0) ; break ; } } /* Do the case checking. Nothing complicated here, just a lot of cases. */ xi = dy_xbasic[ipos] ; newstati = stati ; switch (stati) { case vstatBLLB: { if (!belowbnd(xi,vlbi)) { if (!withintol(xi,vlbi,tol*(1.0+fabs(vlbi)))) statok = FALSE ; if (atbnd(xi,vlbi)) { if (atbnd(vlbi,vubi)) newstati = vstatBFX ; else newstati = vstatBLB ; /* xi = vlbi ; */ } else if (belowbnd(xi,vubi)) { newstati = vstatB ; } else if (atbnd(xi,vubi)) { newstati = vstatBUB ; /* xi = vubi ; */ } else { newstati = vstatBUUB ; } } break ; } case vstatBLB: { if (!atbnd(xi,vlbi)) { if (!withintol(xi,vlbi,tol*(1.0+fabs(vlbi)))) statok = FALSE ; if (xi < vlbi) { newstati = vstatBLLB ; } else if (belowbnd(xi,vubi)) { newstati = vstatB ; } else if (atbnd(xi,vubi)) { newstati = vstatBUB ; /* xi = vubi ; */ } else { newstati = vstatBUUB ; } } else { /* xi = vlbi ; */ } break ; } case vstatB: { if (!(abovebnd(xi,vlbi) && belowbnd(xi,vubi))) { if (atbnd(xi,vlbi)) { newstati = vstatBLB ; /* xi = vlbi ; */ } else if (atbnd(xi,vubi)) { newstati = vstatBUB ; /* xi = vubi ; */ } else if (xi > vubi) { if (!withintol(xi,vubi,tol*(1.0+fabs(vlbi)))) statok = FALSE ; newstati = vstatBUUB ; } else { if (!withintol(xi,vlbi,tol*(1.0+fabs(vlbi)))) statok = FALSE ; newstati = vstatBLLB ; } } break ; } case vstatBUB: { if (!atbnd(xi,vubi)) { if (!withintol(xi,vubi,tol*(1.0+fabs(vubi)))) statok = FALSE ; if (xi > vubi) { newstati = vstatBUUB ; } else if (abovebnd(xi,vlbi)) { newstati = vstatB ; } else if (atbnd(xi,vlbi)) { newstati = vstatBLB ; /* xi = vlbi ; */ } else { newstati = vstatBLLB ; } } else { /* xi = vubi ; */ } break ; } case vstatBUUB: { if (!abovebnd(xi,vubi)) { if (!withintol(xi,vubi,tol*(1.0+fabs(vubi)))) statok = FALSE ; if (atbnd(xi,vubi)) { if (atbnd(vlbi,vubi)) newstati = vstatBFX ; else newstati = vstatBUB ; /* xi = vubi ; */ } else if (abovebnd(xi,vlbi)) { newstati = vstatB ; } else if (atbnd(xi,vlbi)) { newstati = vstatBLB ; /* xi = vlbi ; */ } else { newstati = vstatBLLB ; } } break ; } case vstatBFX: { if (!atbnd(xi,vubi)) { if (!withintol(xi,vubi,tol*(1.0+fabs(vubi)))) statok = FALSE ; if (xi > vubi) newstati = vstatBUUB ; else newstati = vstatBLLB ; } else { /* xi = vubi ; */ } break ; } case vstatBFR: { break ; } # ifdef DYLP_PARANOIA default: { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } # endif } /* We've checked and corrected the status. Reset the status vector and (if appropriate) dy_x and dy_xbasic. Then decide how to react, depending on the user's choice and whether this was a minor correction (according to the rules at the head of the routine). */ setflg(newstati,quali) ; dy_status[i] = newstati ; # ifndef DYLP_NDEBUG if (statok == TRUE && print >= 3 && stati != getflg(newstati,vstatSTATUS)) { setflg(stati,quali) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n status of %s (%d) corrected from %s", consys_nme(dy_sys,'v',i,TRUE,NULL),i,dy_prtvstat(stati)) ; dyio_outfmt(dy_logchn,dy_gtxecho," to %s.",dy_prtvstat(newstati)) ; } # endif if (statok == FALSE) { staterrs++ ; setflg(stati,quali) ; strcpy(statbuf,dy_prtvstat(stati)) ; switch (dy_opts->groom) { case 0: { break ; } case 1: { if (fabs(vubi-xi) < fabs(vlbi-xi)) { dywarn(372,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,consys_nme(dy_sys,'v',i,FALSE,NULL),i, statbuf,dy_prtvstat(newstati), vlbi,xi,vubi,"ub",xi-vubi,tol*(1+fabs(vubi))) ; } else { dywarn(372,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,consys_nme(dy_sys,'v',i,FALSE,NULL),i, statbuf,dy_prtvstat(newstati), vlbi,xi,vubi,"lb",xi-vlbi,tol*(1+fabs(vlbi))) ; } break ; } default: { if (fabs(vubi-xi) < fabs(vlbi-xi)) { errmsg(372,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,consys_nme(dy_sys,'v',i,FALSE,NULL),i, statbuf,dy_prtvstat(newstati), vlbi,xi,vubi,"ub",xi-vubi,tol*(1+fabs(vubi))) ; } else { errmsg(372,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,consys_nme(dy_sys,'v',i,FALSE,NULL),i, statbuf,dy_prtvstat(newstati), vlbi,xi,vubi,"lb",xi-vlbi,tol*(1+fabs(vlbi))) ; } break ; } } } } /* If we made it the whole way through the basis, we're done. Otherwise, go up and try again. */ if (ipos > dy_sys->concnt) break ; } /* What to do, what to do? If there are no errors, fine. If there are errors, force an abort, if that's what the user wants. Otherwise, boost the minimum pivot ratio, then use the return value set earlier (it'll be TRUE, unless we're in paranoid mode). The current pivot ratio is automatically raised to match the minimum. The reason for only raising the minimum here is that it's likely we've already failed an accuracy check back in dy_accchk, so that the current pivot ratio is already boosted. */ # ifndef DYLP_NDEBUG if (print >= 1 && staterrs > 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: %d major status corrections", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters,staterrs) ; } # endif if (staterrs > 0) { if (dy_opts->groom >= 2) { retval = FALSE ; } else { (void) dy_setpivparms(+1,0) ; } } return (retval) ; } dyret_enum dy_accchk (flags *checks) /* This routine performs refactoring, accuracy, and feasibility checks, as indicated by the flags in the checks parameter. The flags are set on return to reflect the results of the checks. Refactoring implies that the primal and dual variables are recalculated. If an accuracy check fails, and the basis has not been refactored, the routine will call for a refactor and try again. If the check fails again, the routine will boost the current pivot selection ratio one step and try again. It'll repeat this loop until the pivot ratio is at its maximum. Failure of an accuracy check at maximum pivot selection ratio is fatal. If we manage to pass the accuracy check(s), but take more than one refactor to do it, boost the current pivot selection ratio on the way out. If a feasibility check fails, and the checks don't anticipate this, the same refactor-and-retry sequence is followed. Anticipation is taken to be the presence of the PFQUIET flag for primal feasibility, DFQUIET for dual feasibility. On the flip side, if we pass all requested checks on the first try, we'll relax the current pivot selection tolerance before returning. Since pretty much any call except a scheduled accuracy check will force an initial refactor, this means we'll only back off the pivot selection tolerances if we make it to an accuracy check interval, and pass without refactoring. If we refactor, and subsequently pass any requested accuracy checks, groombasis is called to make sure the status vector is correct. It's purpose is to deal with any changes that need to be made now that we've (presumably) corrected numerical inaccuracy in the basis factorisation. It also checks that we aren't drifting while the primal antidegeneracy mechanism is active. If it is forced to do major status correction, it will boost both the minimum and current pivot selection ratio. The primal checks are performed on dy_x, which will be equal to dy_xbasic except when the primal antidegeneracy mechanism is active. While it's active, dy_xbasic is incrementally updated, but dy_x is not (dy_x is holding the values which will be used to back out the perturbation). To make a meaningful accuracy check under these circumstances, we make a call to dy_calcprimals to refresh dy_x before doing the accuracy checks. If we're going to refactor first, this isn't necessary because dy_factor will do the recalculation. Unfortunately, the dual situation is not so clean. We don't have separate vectors for all duals and basic duals. In large part this is a consequence of faking dual simplex on the primal basis. The portions of dy_accchk that perform dual accuracy and feasibility checks compensate on the fly by carefully ignoring perturbed values. The primal accuracy check is Bx = b - Nx. The primal feasibility check is lb <= x <= ub for all k. The dual accuracy check is yB = c. The dual feasibility check is cbar = c-dot(y,a) > 0 for variables at lower bound and cbar < 0 for variables at upper bound (primal optimality). We take the opportunity to reset dy_cbar (which has been iteratively updated) with a fresh value. Parameter: checks: (i) ladFACTOR to request refactoring prior to accuracy or feasibility checks ladEXPAND will force expansion of the basis prior to refactoring ladPRIMALCHK to request a primal accuracy check ladPRIMFEAS to request a primal feasibility check ladPFQUIET to suppress actions to recover primal feasibility ladDUALCHK to request a dual accuracy check ladDUALFEAS to request a dual feasibility check ladDFQUIET to suppress actions to recover dual feasibility (o) failure of a test will set the flag for that test. ladFACTOR will be set if the basis was refactored, ladEXPAND if it was expanded, and ladPRIMALS and ladDUALS will be set if they were calculated. Returns: dyrOK if the accuracy check calculations are complete, dyrPATCHED if the only bump was a refactor resulting in a patched basis, otherwise the return code from dy_factor or dyrFATAL for problems originating here. */ { int xkpos,xkndx,pkndx,cndx,pfeascnt,refactorcnt ; double *primalerrs,normb,normc,dualresid,primalresid,cbarj,pinfeas ; pkvec_struct *pkcol ; flags results,vstat,factorflags ; bool dorefactor,tryagain,dualDegen ; dyret_enum factorresult ; const char *rtnnme = "dy_accchk" ; # ifndef DYLP_NDEBUG int print,dfeascnt ; double *dualerrs,avgerr,*dfeaserrs,dinfeas ; dualerrs = NULL ; dfeaserrs = NULL ; dfeascnt = -1 ; dinfeas = quiet_nan(0) ; # endif # ifndef DYLP_NDEBUG switch (dy_lp->phase) { case dyPRIMAL1: { print = dy_opts->print.phase1 ; break ; } case dyPRIMAL2: { print = dy_opts->print.phase2 ; break ; } case dyDUAL: { print = dy_opts->print.dual ; break ; } case dyADDCON: { print = dy_opts->print.conmgmt ; break ; } case dyADDVAR: { print = dy_opts->print.varmgmt ; break ; } case dyINIT: { print = dy_opts->print.crash ; break ; } case dyFORCEDUAL: case dyFORCEPRIMAL: case dyFORCEFULL: { print = maxx(dy_opts->print.conmgmt,dy_opts->print.varmgmt) ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } } if (print >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n dy_accchk: ") ; if (flgon(*checks,ladFACTOR)) { dyio_outfmt(dy_logchn,dy_gtxecho,"factor") ; if (flgon(*checks,ladEXPAND)) dyio_outchr(dy_logchn,dy_gtxecho,'*') ; dyio_outchr(dy_logchn,dy_gtxecho,' ') ; } if (flgon(*checks,ladPRIMALCHK)) dyio_outfmt(dy_logchn,dy_gtxecho,"pchk ") ; if (flgon(*checks,ladDUALCHK)) dyio_outfmt(dy_logchn,dy_gtxecho,"dchk ") ; if (flgon(*checks,ladPRIMFEAS)) { dyio_outfmt(dy_logchn,dy_gtxecho,"pfeas") ; if (flgon(*checks,ladPFQUIET)) dyio_outchr(dy_logchn,dy_gtxecho,'q') ; dyio_outchr(dy_logchn,dy_gtxecho,' ') ; } if (flgon(*checks,ladDUALFEAS)) { dyio_outfmt(dy_logchn,dy_gtxecho,"dfeas") ; if (flgon(*checks,ladDFQUIET)) dyio_outchr(dy_logchn,dy_gtxecho,'q') ; dyio_outchr(dy_logchn,dy_gtxecho,' ') ; } } if (flgon(*checks,ladDUALCHK)) dualerrs = (double *) MALLOC((dy_sys->concnt+1)*sizeof(double)) ; if (flgon(*checks,ladDUALFEAS)) dfeaserrs = (double *) CALLOC((dy_sys->varcnt+1),sizeof(double)) ; pfeascnt = -1 ; pinfeas = quiet_nan(0) ; # endif if (dy_lp->degen > 0 && dy_lp->phase == dyDUAL) { dualDegen = TRUE ; } else { dualDegen = FALSE ; } /* Grab a work vector to do the primal accuracy check, and do a little prep work. We need to recalculate the primal variables if the antidegeneracy mechanism is active; refactoring will do that. */ primalerrs = (double *) MALLOC((dy_sys->concnt+1)*sizeof(double)) ; tryagain = TRUE ; dorefactor = FALSE ; results = 0 ; pkcol = NULL ; refactorcnt = 0 ; factorresult = dyrINV ; if (flgon(*checks,ladFACTOR) && dy_sys->concnt > 0) { dorefactor = TRUE ; } else { if (dy_lp->degen > 0 && (dy_lp->phase == dyPRIMAL1 || dy_lp->phase == dyPRIMAL2)) { if (dy_calcprimals() == FALSE) { errmsg(316,rtnnme,dy_sys->nme) ; return (dyrFATAL) ; } } } /* Open the check loop and do the tests. Each time we fail a test, we'll come back here, tighten the pivot selection tolerance, and try again. If we try to tighten, and we're already at the top, then we fail. */ while (tryagain == TRUE) { tryagain = FALSE ; /* Refactor? If the user is forcing the initial refactor, use whatever pivot selection regime is currently in force. Additional attempts mean that we've failed an accuracy or feasibility check further down. Boost the current pivot selection ratio one step. If we're already at the tightest setting, dy_setpivparms will return FALSE and we'll escape the loop. */ if (dorefactor == TRUE) { if (refactorcnt != 0 || flgoff(*checks,ladFACTOR)) { if (dy_setpivparms(+1,0) == FALSE) continue ; } # ifndef DYLP_NDEBUG if (print >= 2 || (print >= 1 && results != 0)) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s] refactoring at (%s)%d, %s, ", dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,dy_prtpivparms(-1)) ; dyio_outfmt(dy_logchn,dy_gtxecho,"%d pivots since last refactor.", dy_lp->basis.etas) ; } # endif factorflags = ladPRIMALS|ladDUALS ; if (refactorcnt == 0 && flgon(*checks,ladEXPAND)) setflg(factorflags,ladEXPAND) ; factorresult = dy_factor(&factorflags) ; refactorcnt++ ; if (!(factorresult == dyrOK || factorresult == dyrPATCHED)) { # ifndef DYLP_NDEBUG if ((print >= 2) || (print >= 1 && flgon(results,ladPRIMALCHK|ladDUALCHK))) dyio_outfmt(dy_logchn,dy_gtxecho, "%sfailed.",(print >= 6)?"\n\t":" ") ; # endif return (factorresult) ; } # ifndef DYLP_NDEBUG if ((print >= 2) || (print >= 1 && flgon(results,ladPRIMALCHK|ladDUALCHK))) dyio_outfmt(dy_logchn,dy_gtxecho,"%s%s.",(print >= 6)?"\n\t":" ", (factorresult == dyrOK)?"done":"patched") ; # endif setflg(results,ladFACTOR|factorflags) ; } /* Do the accuracy checks. Calculate (b - x) - Bx and/or c - yB, as requested, as well as the relevant 1-norms and residuals. By definition, when dual degeneracy is active the real value of the duals involved in the degeneracy is zero. */ normb = 0 ; primalresid = 0 ; normc = 0 ; dualresid = 0 ; clrflg(results,ladPRIMALCHK|ladPRIMFEAS|ladDUALCHK|ladDUALFEAS) ; if (dy_reducerhs(primalerrs,TRUE) != TRUE) { errmsg(340,rtnnme,dy_sys->nme) ; return (dyrFATAL) ; } if (flgon(*checks,ladPRIMALCHK|ladDUALCHK)) { for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { xkndx = dy_basis[xkpos] ; if (consys_getcol_pk(dy_sys,xkndx,&pkcol) == FALSE) { errmsg(112,rtnnme,dy_sys->nme,"retrieve","column", consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx) ; return (dyrFATAL) ; } if (flgon(*checks,ladPRIMALCHK)) { normb += fabs(dy_sys->rhs[xkpos]) ; for (pkndx = 0 ; pkndx < pkcol->cnt ; pkndx++) { cndx = pkcol->coeffs[pkndx].ndx ; primalerrs[cndx] -= pkcol->coeffs[pkndx].val*dy_x[xkndx] ; } } if (flgon(*checks,ladDUALCHK)) { cbarj = dy_sys->obj[xkndx] ; normc += fabs(cbarj) ; for (pkndx = 0 ; pkndx < pkcol->cnt ; pkndx++) { cndx = pkcol->coeffs[pkndx].ndx ; if (dualDegen == TRUE && dy_ddegenset[cndx] > 0) { /* do nothing --- dy_y[cndx] == 0 */ } else { cbarj -= pkcol->coeffs[pkndx].val*dy_y[cndx] ; } } dualresid += fabs(cbarj) ; # ifndef DYLP_NDEBUG dualerrs[xkpos] = fabs(cbarj) ; # endif } } if (flgon(*checks,ladPRIMALCHK)) for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) primalresid += fabs(primalerrs[xkpos]) ; /* And the results? */ normb = maxx(normb,dy_lp->prim.norm1) ; if (!withintol(primalresid,0.0,dy_tols->pchk*(1+normb))) { dywarn(341,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"primal",'b',normb,primalresid, dy_tols->pchk*(1+normb)) ; setflg(results,ladPRIMALCHK) ; } normc = maxx(normc,dy_lp->dual.norm1) ; normc *= 2 ; if (!withintol(dualresid,0.0,dy_tols->dchk*(1+normc))) { dywarn(341,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"dual",'c',normc,dualresid, dy_tols->dchk*(1+normc)) ; setflg(results,ladDUALCHK) ; } } # ifndef DYLP_NDEBUG /* Information prints on the results of the accuracy checks. */ if ((print >= 3 && flgon(results,ladPRIMALCHK)) || (print >= 3 && flgon(*checks, ladPRIMALCHK))) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%s primal accuracy check, ", (flgon(results,ladPRIMALCHK))?"failed":"passed") ; dyio_outfmt(dy_logchn,dy_gtxecho, "residual/(1+normb) = %g/%g = %g %c %g.", primalresid,(1+normb),primalresid/(1+normb), (flgon(results,ladPRIMALCHK))?'>':'<',dy_tols->pchk) ; dyio_outfmt(dy_logchn,dy_gtxecho," (%.2f%%)", primalresid/(dy_tols->pchk*(1+normb))*100) ; } if ((print >= 3 && flgon(results,ladDUALCHK)) || (print >= 3 && flgon(*checks, ladDUALCHK))) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%s dual accuracy check, ", (flgon(results,ladDUALCHK))?"failed":"passed") ; dyio_outfmt(dy_logchn,dy_gtxecho, "residual/(1+normc) = %g/%g = %g %c %g.", dualresid,(1+normc),dualresid/(1+normc), (flgon(results,ladDUALCHK))?'>':'<',dy_tols->dchk) ; dyio_outfmt(dy_logchn,dy_gtxecho," (%.2f%%)", dualresid/(dy_tols->dchk*(1+normc))*100) ; } if (print >= 3) { if (flgon(results,ladPRIMALCHK)) { avgerr = (dy_tols->pchk*(1+normb))/dy_sys->concnt ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n rows exceeding scaled average tolerance %g:", avgerr) ; for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) if (fabs(primalerrs[xkpos]) > avgerr) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\trow %s (%d), residual %g.", consys_nme(dy_sys,'c',xkpos,FALSE,NULL),xkpos, primalerrs[xkpos]) ; } } if (flgon(results,ladDUALCHK)) { avgerr = (dy_tols->dchk*(1+normc))/dy_sys->concnt ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n columns exceeding scaled average tolerance %g:", avgerr) ; for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) if (fabs(dualerrs[xkpos]) > avgerr) { xkndx = dy_basis[xkpos] ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tpos'n %d, column %s (%d), residual %g.", xkpos,consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dualerrs[xkpos]) ; } } } # endif /* If we didn't pass the accuracy checks, go back and try refactoring to see if it will improve the accuracy. */ if (flgon(results,ladPRIMALCHK|ladDUALCHK)) { tryagain = TRUE ; dorefactor = TRUE ; continue ; } /* We've passed the accuracy check; if we did a refactor, groom the basis. */ if (factorresult != dyrINV) { if (groombasis() == FALSE) { errmsg(373,rtnnme,dy_sys->nme) ; return (dyrFATAL) ; } } /* The primal feasibility check. There are two entirely separate iterations here. The nonparanoid one checks the basic variables by iterating over the basis. The paranoid one checks all variables. Since we don't need the column for this check, separating it out seems a good idea. If we fail the check, go up and try to refactor. */ if (flgon(*checks,ladPRIMFEAS)) { pinfeas = 0 ; pfeascnt = 0 ; # ifdef DYLP_PARANOIA for (xkndx = 1 ; xkndx <= dy_sys->varcnt ; xkndx++) { if (!withinbnds(dy_sys->vlb[xkndx],dy_x[xkndx],dy_sys->vub[xkndx])) { if (belowbnd(dy_x[xkndx],dy_sys->vlb[xkndx])) { pinfeas += dy_sys->vlb[xkndx]-dy_x[xkndx] ; if (flgoff(*checks,ladPFQUIET)) dywarn(323,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(dy_status[xkndx]), dy_sys->vlb[xkndx],dy_x[xkndx],dy_sys->vub[xkndx], dy_sys->vlb[xkndx]-dy_x[xkndx], dy_tols->pfeas*(1+fabs(dy_sys->vlb[xkndx]))) ; } else { pinfeas += dy_x[xkndx]-dy_sys->vub[xkndx] ; if (flgoff(*checks,ladPFQUIET)) dywarn(323,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(dy_status[xkndx]), dy_sys->vlb[xkndx],dy_x[xkndx],dy_sys->vub[xkndx], dy_x[xkndx]-dy_sys->vub[xkndx], dy_tols->pfeas*(1+fabs(dy_sys->vub[xkndx]))) ; } pfeascnt++ ; setflg(results,ladPRIMFEAS) ; } } # else for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { xkndx = dy_basis[xkpos] ; if (!withinbnds(dy_sys->vlb[xkndx],dy_x[xkndx],dy_sys->vub[xkndx])) { if (belowbnd(dy_x[xkndx],dy_sys->vlb[xkndx])) { pinfeas += dy_sys->vlb[xkndx]-dy_x[xkndx] ; if (flgoff(*checks,ladPFQUIET)) dywarn(323,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(dy_status[xkndx]), dy_sys->vlb[xkndx],dy_x[xkndx],dy_sys->vub[xkndx], dy_sys->vlb[xkndx]-dy_x[xkndx], dy_tols->pfeas*(1+fabs(dy_sys->vlb[xkndx]))) ; } else { pinfeas += dy_x[xkndx]-dy_sys->vub[xkndx] ; if (flgoff(*checks,ladPFQUIET)) dywarn(323,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(dy_status[xkndx]), dy_sys->vlb[xkndx],dy_x[xkndx],dy_sys->vub[xkndx], dy_x[xkndx]-dy_sys->vub[xkndx], dy_tols->pfeas*(1+fabs(dy_sys->vub[xkndx]))) ; } pfeascnt++ ; setflg(results,ladPRIMFEAS) ; } } # endif dy_lp->infeas = pinfeas ; dy_lp->infeascnt = pfeascnt ; } # ifndef DYLP_NDEBUG /* Information prints on the results of the primal feasibility check. */ if (print >= 5) { if (flgon(*checks,ladPRIMFEAS) && flgoff(results,ladPRIMFEAS)) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tpassed primal feasibility check.") ; } if (print >= 3) { if (flgon(results,ladPRIMFEAS)) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: %d variables primal infeasible, pinfeas = %g:", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, pfeascnt,pinfeas) ; for (xkndx = 1 ; xkndx <= dy_sys->varcnt ; xkndx++) if (!withinbnds(dy_sys->vlb[xkndx],dy_x[xkndx],dy_sys->vub[xkndx])) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t%s (%d) = %g, status %s, lb = %g, ub = %g, ", consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_x[xkndx],dy_prtvstat(dy_status[xkndx]), dy_sys->vlb[xkndx],dy_sys->vub[xkndx]) ; if (dy_x[xkndx] < dy_sys->vlb[xkndx]) dyio_outfmt(dy_logchn,dy_gtxecho,"lb-x = %g, tol = %g", dy_sys->vlb[xkndx]-dy_x[xkndx], dy_tols->pfeas*(1+fabs(dy_sys->vlb[xkndx]))) ; else dyio_outfmt(dy_logchn,dy_gtxecho,"x-ub = %g, tol = %g", dy_x[xkndx]-dy_sys->vub[xkndx], dy_tols->pfeas*(1+fabs(dy_sys->vub[xkndx]))) ; } } } # endif if (flgon(results,ladPRIMFEAS) && flgoff(*checks,ladPFQUIET)) { tryagain = TRUE ; dorefactor = TRUE ; continue ; } /* The dual feasibility check. Also separate, as we're interested in checking the nonbasic columns. If we're running a perturbed, restricted subproblem for dual antidegeneracy, the action deserves some explanation. Even though perturbed cbar values are propagated to duals during iterative update, the original perturbation was applied directly to cbar, so in general a perturbed cbar != c - dot(a,y). Still, dual feasibility should be preserved for the perturbed values. We just need to be careful not to erase the perturbed cbar. */ if (flgon(*checks,ladDUALFEAS)) { # ifndef DYLP_NDEBUG dfeascnt = 0 ; dinfeas = 0 ; # endif for (xkndx = 1 ; xkndx <= dy_sys->varcnt ; xkndx++) { vstat = dy_status[xkndx] ; # ifdef DYLP_PARANOIA if (flgon(vstat,vstatBASIC)) continue ; # else if (flgon(vstat,vstatBASIC|vstatNBFX)) continue ; # endif cbarj = consys_dotcol(dy_sys,xkndx,dy_y) ; # ifdef DYLP_PARANOIA if (isnan(cbarj) == TRUE) { errmsg(320,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"y",xkndx,"dual feasibility check") ; return (dyrFATAL) ; } # endif if (dualDegen == TRUE && dy_ddegenset[xkndx] > 0) { cbarj = dy_cbar[xkndx] ; } else { cbarj = dy_sys->obj[xkndx]-cbarj ; setcleanzero(cbarj,dy_tols->cost) ; dy_cbar[xkndx] = cbarj ; } if ((flgon(vstat,vstatNBLB) && cbarj < -dy_tols->dfeas) || (flgon(vstat,vstatNBUB) && cbarj > dy_tols->dfeas) || (flgon(vstat,vstatNBFR) && cbarj != 0) || flgon(vstat,vstatSB)) { if (flgoff(*checks,ladDFQUIET)) dywarn(347,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(vstat),xkndx,cbarj,dy_tols->dfeas) ; # ifndef DYLP_NDEBUG /* Note that we depend on CALLOC to set dfeaserrs = 0 on allocation, so that nonzero entries represent dual feasibility violations. */ dinfeas += fabs(cbarj) ; dfeascnt++ ; dfeaserrs[xkndx] = cbarj ; # endif setflg(results,ladDUALFEAS) ; } } if (flgon(results,ladDUALFEAS)) dy_lp->basis.dinf++ ; else dy_lp->basis.dinf = 0 ; } # ifndef DYLP_NDEBUG /* Information prints on the results of the dual feasibility check. */ if (print >= 5) { if (flgon(*checks,ladDUALFEAS) && flgoff(results,ladDUALFEAS)) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tpassed dual feasibility check.") ; } if (print >= 3) { if (flgon(results,ladDUALFEAS)) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: %d variables dual infeasible, dinfeas = %g:", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dfeascnt,dinfeas) ; for (xkndx = 1 ; xkndx <= dy_sys->varcnt ; xkndx++) { if (dfeaserrs[xkndx] != 0.0) { vstat = dy_status[xkndx] ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t%s (%d) = %g, status %s, cbarj = %g, tol %g.", consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, (vstat == vstatNBLB)?dy_sys->vlb[xkndx]:dy_sys->vub[xkndx], dy_prtvstat(vstat),dfeaserrs[xkndx], dy_tols->dfeas) ; } } } } # endif if (flgon(results,ladDUALFEAS) && flgoff(*checks,ladDFQUIET)) { tryagain = TRUE ; dorefactor = TRUE ; continue ; } } /* End of the accuracy check loop, for good or ill. If we've managed to pass all checks on the first try, with no problems, back off the pivot selection tolerances. (This implies we actually performed accuracy checks.) Free the work vectors, set the return value for checks and we're done. */ if (refactorcnt == 0 && flgon(*checks,ladPRIMALCHK|ladDUALCHK)) (void) dy_setpivparms(-1,0) ; FREE(primalerrs) ; if (pkcol != NULL) pkvec_free(pkcol) ; # ifndef DYLP_NDEBUG if (flgon(*checks,ladDUALCHK)) FREE(dualerrs) ; if (flgon(*checks,ladDUALFEAS)) FREE(dfeaserrs) ; # endif *checks = results ; return (dyrOK) ; } dyret_enum dy_duenna (dyret_enum pivresult, int xjndx, int xindx, int xjcand, int xicand) /* This routine is the Duenna for dylp's primal and dual simplex algorithms. It is called after each pivot, checks that all the right things are being done, and deals with major scandal as best it can. The `right things' are the mundane precautions of regular accuracy checks and refactorisation. These are applied if the pivot result is dyrOK or dyrDEGEN. (If the pivot result is dyrOPTIMAL, the simplex routines will do their own preoptimality checks.) Pivoting scandals understood by the Duenna, and possible actions taken here, include: * Unbounded problem -- action depends on whether we have primal I, II, or dual unboundedness. + Primal I unbounded -- flag the variable as NOPIVOT, and force a reselect. What can happen here is we get moving in a space of free variables that's orthogonal to feasibility. + Primal II unbounded -- no remedy here, but in dylp this will often occur in the early stages of solving an LP, when only a subset of the constraints are active, and is handled by activating more constraints. + Dual unbounded -- indicates primal infeasibility, and no action is taken here. * Loss of feasibility -- really shouldn't occur, and indicates loss of accuracy or algorithmic error. + primal phase I -- serious internal confusion, converted to a fatal error. + primal phase II -- refactor is forced, in anticipation that it was an accuracy problem. If infeasibility remains, return loss of feasibility so we can revert to primal phase I. + dual phase II -- refactor is forced, in anticipation that it was an accuracy problem. If infeasibility remains, return loss of feasibility in hopes dy_dual will do something (currently it punts to primal I). * Suspected loss of accuracy (dyrREQCHK) -- force a refactor. * Mad pivot -- the pivoting routines may reject a pivot if they judge it (numerically) unstable. The pivot column (row) is added to the list of rejected pivots, and la Duenna returns dyrRESELECT to request that the primal (dual) simplex algorithm reselect the entering (leaving) variable. Two pivoting problems originate with dy_pivot and the underlying basis package: * Singular basis -- this occurs when the basis package attempted the recommended pivot and discovered that it resulted in a singular basis. The basic remedy is to refactor. It could be the basis was already singular, but accumulated inaccuracy masked it until now. dy_factor and the basis package will patch it unless the user has disabled that option. Or it could be that this choice of pivot is indeed the problem. If the refactor completes without problem, blame the pivot and mark the column (row) with the NOPIVOT qualifier. In any event, successful recovery implies that la Duenna should request the primal (dual) simplex algorithm to reselect. * Out of space -- this occurs when the basis package ran out of space. The remedy is to refactor, recovering the space occupied by eta matrices. This will trigger the allocation of additional space, if that's what's required. When dy_pivot attempts a pivot and fails the basis is corrupted and refactoring is mandatory. A pivresult of dyrFATAL is fatal, period. La Duenna detects a three fatal conditions based on pivot counts: * Iteration limit exceeded -- no remedy, dylp has done as much work as its client authorised. * Stalling (possibly actual cycling) -- no remedy. This is a heuristic, based on the number of pivots that have occurred with no improvement in the objective function. * Too many rejected pivots -- no remedy, there have been too many consecutive rejected pivots. Refactoring is handled inside dy_accchk, which see for additional comments. Where refactoring is attempted (either for error recovery or simply because basis.etas says it's time) and dy_factor reports that it has discovered and patched a singular basis, la Duenna will return dyrRESELECT to force the calling simplex algorithm to reselect the entering (leaving) variable. Refactoring can fail; again, see dy_accchk and dy_factor for comments. If the basis is refactored, La Duenna will check that the preselected entering (leaving) variable is still legal according to primal (dual) pivoting rules. If it isn't, dyrRESELECT is returned to request selection of a new candidate. Pivots where a nonbasic variable swings from one bound to the other don't add an eta matrix in the basis representation and are not counted for purposes of determining if it's time to do an accuracy check or refactor. Parameters: pivresult: The return code from the pivoting routine. xjndx: The entering variable for this pivot. xindx: The leaving variable for this pivot. xjcand: The candidate entering variable for the next pivot (primal) xicand: The candidate entering variable for the next pivot (dual) Returns: any of dyrOK, dyrOPTIMAL, dyrRESELECT, dyrPUNT, dyrACCCHK, dyrUNBOUND, dyrSWING, dyrLOSTPFEAS, dyrLOSTDFEAS, dyrSINGULAR, dyrNUMERIC, dyrBSPACE, dyrSTALLED, dyrITERLIM, or dyrFATAL under normal circumstances. dyrINV is possible if a paranoid check fails. */ { dyret_enum retval,accchk ; double cbarcand ; bool pivok ; flags checkflags,outflags,statcand ; const char *rtnnme = "La Duenna" ; # ifndef DYLP_NDEBUG int print ; # endif # ifndef DYLP_NDEBUG switch (dy_lp->phase) { case dyPRIMAL1: { print = dy_opts->print.phase1 ; break ; } case dyPRIMAL2: { print = dy_opts->print.phase2 ; break ; } case dyDUAL: { print = dy_opts->print.dual ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } } # endif retval = dyrINV ; outflags = 0 ; checkflags = 0 ; /* Bump the various pivot and iteration counts, and see if we're in trouble because of the total pivot limit. It's important to get basis.etas and basis.pivs correct --- they come into the control of basis factorisation and the pivot reject list, and should not change unless we successfully pivoted the basis. The others are less critical. */ pivok = dy_lp->pivok ; dy_lp->prev_pivok = pivok ; dy_lp->pivok = FALSE ; if (pivok == TRUE && xindx != xjndx) { dy_lp->basis.etas++ ; dy_lp->basis.pivs++ ; } if (dy_lp->phase == dyPRIMAL1) { dy_lp->p1.iters++ ; if (pivok == TRUE) dy_lp->p1.pivs++ ; if (dy_opts->iterlim > 0 && dy_lp->p1.pivs > dy_opts->iterlim) retval = dyrITERLIM ; } else if (dy_lp->phase == dyPRIMAL2) { dy_lp->p2.iters++ ; if (pivok == TRUE) dy_lp->p2.pivs++ ; if (dy_opts->iterlim > 0 && dy_lp->p2.pivs > dy_opts->iterlim) retval = dyrITERLIM ; } else { dy_lp->d2.iters++ ; if (pivok == TRUE) dy_lp->d2.pivs++ ; if (dy_opts->iterlim > 0 && dy_lp->d2.pivs > dy_opts->iterlim) retval = dyrITERLIM ; } if (retval == dyrITERLIM) { if (dy_opts->context != cxBANDC) { errmsg(328,rtnnme,dy_sys->nme,dy_opts->iterlim) ; } return (retval) ; } dy_lp->tot.iters++ ; if (pivok == TRUE) dy_lp->tot.pivs++ ; if (dy_opts->iterlim > 0 && dy_lp->tot.pivs > 3*dy_opts->iterlim) { retval = dyrITERLIM ; if (dy_opts->context != cxBANDC) { errmsg(328,rtnnme,dy_sys->nme,3*dy_opts->iterlim) ; } return (retval) ; } /* Deal with the result returned by the pivoting routine. If there's a problem we can't fix, we'll return to the caller from whatever case we're in. If there's no problem, or the problem can possibly be fixed or papered over, we'll fall past the bottom of the switch and do repair and periodic checks. Put the cases that are essentially successful pivots (dyrOK, dyrDEGEN, and dyrOPTIMAL) first, so we don't waste time. If the pivot has been rejected as unstable (dyrMADPIV), it was added to the pivot reject list by dy_primalpivot or dy_dualpivot. All we need to do here is return dyrRESELECT to trigger selection of a new candidate. Similarly, if the pivot routine has directly requested a reselect. A punt indicates that the pivot selection routines dualout/dseupdate (primalin/pseupdate) couldn't select a leaving (entering) variable, but some potentially promising variables were on the pivot rejection list. dy_dealWithPunt() will examine the list to see if any variables should be released for pivoting and return one of dyrRESELECT, dyrPUNT, or dyrFATAL, depending on how it goes. There's nothing we can do here about primal unboundedness or pseudo- unboundedness, but it may not be a big problem a few levels up (could be because only a subset of constraints are active, could be an accuracy problem curable by more frequent refactoring). Return quietly. dyrSWING typically indicates a successful pivot in which some variable(s) moved a little too far. If the code has requested an accuracy check (because it saw a bogus number) we'll go ahead and do it but won't necessarily reject the current pivot. Loss of primal or dual feasibility also indicates accuracy problems. We'll refactor and do an accuracy check. If the pivot attempt resulted in a singular basis, we definitely need to refactor (the present basis representation is corrupt until a successful factorization). Assume that the indication of singularity is genuine and reject the pivot. If the basis was already singular (and accumulated numerical error was masking this) then we've shot the messenger, but the code that cleans up after a patch clears the pivot reject list, among other actions. Out of space entails the same repair actions as singular basis, but without the complication of rejecting the pivot element. The notion is that refactoring will eliminate all the eta matrices and reclaim space, but if we've just refactored, that won't happen, and we need to force expansion. In either case, abort the minor iteration, as the pivot attempt has failed. Finally, fatal is fatal, and so is anything we don't recognise. */ switch (pivresult) { case dyrOK: case dyrOPTIMAL: case dyrDEGEN: { retval = dyrOK ; break ; } case dyrMADPIV: case dyrRESELECT: { return (dyrRESELECT) ; } case dyrPUNT: { retval = dy_dealWithPunt() ; return (retval) ; } case dyrUNBOUND: { return (dyrUNBOUND) ; } case dyrSWING: { return (dyrSWING) ; } case dyrREQCHK: { setflg(checkflags,ladFACTOR) ; # ifndef DYLP_NDEBUG if (print >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s] refactor requested at (%s)%d, ", dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho,"%d pivots since last refactor.", dy_lp->basis.etas) ; } # endif retval = dyrREQCHK ; break ; } case dyrLOSTPFEAS: case dyrLOSTDFEAS: { setflg(checkflags,ladFACTOR) ; # ifdef DYLP_PARANOIA if (dy_lp->phase == dyPRIMAL1) { errmsg(338,rtnnme,dy_sys->nme, (pivresult == dyrLOSTPFEAS)?"primal":"dual") ; return (dyrFATAL) ; } # endif # ifndef DYLP_NDEBUG if (print >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s] loss of %s feasibility at iteration %d.", dy_sys->nme,(pivresult == dyrLOSTPFEAS)?"primal":"dual", dy_lp->tot.iters) ; } # endif retval = dyrREQCHK ; break ; } case dyrSINGULAR: { setflg(checkflags,ladFACTOR) ; # ifndef DYLP_NDEBUG if (print >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s](%s)%d: pivot attempt produced ", dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho, "singular basis; attempting recovery.") ; } # endif if (dy_lp->phase == dyDUAL) retval = dy_addtopivrej(xindx,dyrSINGULAR,0.0,0.0) ; else retval = dy_addtopivrej(xjndx,dyrSINGULAR,0.0,0.0) ; if (retval != dyrOK) return (retval) ; retval = dyrRESELECT ; break ; } case dyrBSPACE: { setflg(checkflags,ladFACTOR) ; if (dy_lp->basis.etas == 0) setflg(checkflags,ladEXPAND) ; # ifndef DYLP_NDEBUG if (print >= 1) { if (flgoff(checkflags,ladEXPAND)) dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s]: (%s)%d: attempting to compress basis.", dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; else dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s]: (%s)%d: forcing basis expansion.",dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } # endif retval = dyrOK ; break ; } case dyrFATAL: { errmsg(343,rtnnme,dy_sys->nme,dy_lp->tot.iters) ; return (dyrFATAL) ; } default: { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } } # ifdef DYLP_PARANOIA /* retval should be one of dyrOK, dyrREQCHK, or dyrRESELECT, dyrOK means that we may refactor, but have no particular accuracy problems nor do we need to reselect if the refactor succeeds. dyrREQCHK should be interpreted to mean that we want to refactor and that there is some question of accuracy to boot. dyrRESELECT means that we want to refactor and that we'll need to reselect the entering/leaving variable once we return to the calling simplex algorithm. */ if (!(retval == dyrOK || retval == dyrREQCHK || retval == dyrRESELECT)) { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } # endif /* To get here, either the pivot was uneventful, or there's a hope that refactoring will solve whatever problem we ran into. Check whether it's time for a regularly scheduled refactorisation or accuracy check. Refactoring always implies an accuracy check (but not vice versa), so it's actually buried in dy_accchk, we just have to request it. It'll occasionally happen that an accuracy check will repeat because it's had the misfortune to fall on a pivot which is followed by pivots which don't count toward basis.etas (nonbasic moving from bound to bound is the most common cause). Something to think about fixing up --- either a a separate count, iterc, for accuracy checks, or remember the basis.etas value of the most recent accuracy check. While we're here, check on the pivot tolerance. If we've been running with reduced tolerance for a while, we should boost it back to normal. */ if (dy_lp->basis.etas >= dy_opts->factor) { setflg(checkflags,ladFACTOR) ; dy_checkpivtol() ; # ifndef DYLP_NDEBUG if (print >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s] (%s)%d: scheduled refactor, interval %d, ", dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_opts->factor) ; dyio_outfmt(dy_logchn,dy_gtxecho,"%d pivots since last refactor,", dy_lp->basis.etas) ; if (dy_lp->phase == dyDUAL) { dyio_outfmt(dy_logchn,dy_gtxecho,"yb = %g.",dy_calcdualobj()) ; } else if (dy_lp->phase == dyPRIMAL1) { dyio_outfmt(dy_logchn,dy_gtxecho,"infeas = %g.",dy_calcpinfeas()) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"cx = %g.",dy_calcobj()) ; } } # endif } if ((dy_lp->basis.etas%dy_opts->check == 0 && dy_lp->basis.etas != 0) || flgon(checkflags,ladFACTOR)) { if (dy_lp->phase == dyPRIMAL1) { setflg(checkflags,ladPRIMALCHK) ; } else if (dy_lp->phase == dyPRIMAL2) { setflg(checkflags,ladPRIMALCHK|ladPRIMFEAS|ladPFQUIET|ladDUALCHK) ; } else if (dy_lp->phase == dyDUAL) { setflg(checkflags,ladPRIMALCHK|ladDUALCHK|ladDUALFEAS|ladDFQUIET) ; } # ifndef DYLP_NDEBUG if (dy_lp->basis.etas%dy_opts->check == 0 && dy_lp->basis.etas != 0 && print >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s] (%s)%d: scheduled check, interval %d, ", dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_opts->check) ; dyio_outfmt(dy_logchn,dy_gtxecho,"%d pivots since last refactor.", dy_lp->basis.etas) ; } # endif } /* Do an accuracy check, possibly accompanied by a refactorisation. Any code other than dyrOK or dyrPATCHED is a problem; return it to the caller. If we've failed any of the accuracy checks, return dyrACCCHK, since dy_accchk has tried everthing dylp knows for dealing with the problem. Assuming we pass the accuracy check, clear the pivot rejection list. Limiting this to the accuracy check frequency gives a little bit of persistence to the list. But ... don't clear the list if the reason we're here is because the last pivot resulted in a singular basis! */ if (flgon(checkflags,ladFACTOR|ladPRIMALCHK|ladDUALCHK)) { accchk = dy_accchk(&checkflags) ; if (!(accchk == dyrOK || accchk == dyrPATCHED)) return (accchk) ; if (flgon(checkflags,ladPRIMALCHK|ladDUALCHK)) return (dyrACCCHK) ; if (pivresult != dyrSINGULAR) if (dy_clrpivrej(NULL) != TRUE) return (dyrFATAL) ; /* If the return code is dyrPATCHED, we'll want to select a new pivot candidate before attempting another simplex iteration. If we refactored, check that the candidate entering (leaving) variable still meets primal (dual) criteria. */ if (flgon(checkflags,ladFACTOR) && retval != dyrRESELECT) { if (accchk == dyrPATCHED) { retval = dyrRESELECT ; # ifndef DYLP_NDEBUG if (print >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n [%s] (%s)%d: ", dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho, "forcing reselect after basis patch.") ; } # endif } else { if ((dy_lp->phase == dyPRIMAL1 || dy_lp->phase == dyPRIMAL2) && xjcand > 0) { statcand = dy_status[xjcand] ; cbarcand = dy_cbar[xjcand] ; if (!((cbarcand+dy_tols->dfeas < 0 && flgon(statcand,vstatNBLB|vstatNBFR|vstatSB)) || (cbarcand-dy_tols->dfeas > 0 && flgon(statcand,vstatNBUB|vstatNBFR|vstatSB)))) { retval = dyrRESELECT ; } } else if (dy_lp->phase == dyDUAL && xicand > 0) { statcand = dy_status[xicand] ; if (flgoff(statcand,vstatBLLB|vstatBUUB)) { retval = dyrRESELECT ; } } # ifndef DYLP_NDEBUG if (print >= 1 && retval == dyrRESELECT) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n [%s] (%s)%d: ", dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho, "candidate %s (%d) no longer suitable; ", consys_nme(dy_sys,'v', (dy_lp->phase == dyDUAL)?xicand:xjcand,FALSE,NULL), (dy_lp->phase == dyDUAL)?xicand:xjcand) ; dyio_outfmt(dy_logchn,dy_gtxecho, "forcing reselect after refactor.") ; } # endif } } /* What's the story on feasibility? Check the possible outcomes on the accuracy test. If we're here because an accuracy check was requested, or because we lost feasibility, and all is now ok, set the return value to dyrOK. If we've lost primal or dual feasibility, the proper one to report depends on the phase (proper, that is, in the sense of which one dominates when we've lost both). */ if (flgon(checkflags,ladPRIMFEAS|ladDUALFEAS)) { if (dy_lp->phase == dyDUAL) { if (flgon(checkflags,ladDUALFEAS)) return (dyrLOSTDFEAS) ; else if (flgon(checkflags,ladPRIMFEAS)) return (dyrLOSTPFEAS) ; } else { if (flgon(checkflags,ladPRIMFEAS)) return (dyrLOSTPFEAS) ; else if (flgon(checkflags,ladDUALFEAS)) return (dyrLOSTDFEAS) ; } } if (retval == dyrREQCHK) retval = dyrOK ; } # ifdef DYLP_PARANOIA /* At this point, return values should be one of dyrOK or dyrRESELECT. */ if (!(retval == dyrOK || retval == dyrRESELECT)) { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } # endif /* Not much left. Now that we're as accurate as we're going to get, see if the objective's been improving. If it hasn't, we're stalled (and might be cycling). Note that the cycling count is not 100% precise --- in particular, La Duenna does not reach here for the case of a successful pivot flagged dyrPUNT. */ if (pivok == TRUE) { if (withintol(dy_lp->z,dy_lp->lastz.piv,dy_tols->dchk)) { dy_lp->idlecnt++ ; if (dy_lp->idlecnt > dy_opts->idlelim) { errmsg(339,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,dy_lp->idlecnt) ; return (dyrSTALLED) ; } } else { dy_lp->lastz.piv = dy_lp->z ; dy_lp->idlecnt = 0 ; } } /* If, after all the above, we're still at dyrOK, and the original pivresult was dyrOPTIMAL, go with that. */ if (pivresult == dyrOPTIMAL && retval == dyrOK) retval = dyrOPTIMAL ; /* That's it. */ return (retval) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_penalty.c0000644000175200017520000006052711507440660015713 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains routines for pricing columns and for calculating up and down penalties associated with forcing basic variables to new bounds. They're useful in the context of using dylp in an lp-based branch-and-bound MILP code. These routines shield the client from the the problems of translating between the original system and the active system (selection of active constraints and variables, and scaling). To state the obvious, these routines are useable only when dylp's data structures have been left intact after solving the lp. */ /* In penalty calculations, the core calculation is the cost of the first dual pivot back toward feasibility after imposing new bounds on the variable. Typically we're trying to estimate the result of branching on x, and we're evaluating the mutually exclusive cases of x >= ub and x <= lb. The nonbasic variables x are scanned to find the variable x which can drive x to bound with minimum degradation of the objective. For the common case where x is an integer variable and we want to know the standard up/down penalties, ub = ceil(x and lb = floor(x). If x is an integer variable, it will most likely end up with a non-integral value. One can make the argument that x really needs to move all the way to its next integral value in order to be a feasible solution to the ILP, hence we should calculate the penalty as if we moved to the next integral value. The problem, of course, is that abar might not really be the best direction to move in order to achieve this. Moreover, the penalty calculated in this way may well be more than the actual cost of regaining optimality for the lp relaxation. More often, however, the first dual pivot is an underestimate of the real degradation and the strengthened penalty only partially corrects this. dylp can go either way. If the compile-time constant STRONG_PENALTIES is defined, you get penalties strengthened as described for x integer. Otherwise, the basic penalty is calculated. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_penalty.c 4.5 11/06/04" ; static char svnid[] UNUSED = "$Id: dy_penalty.c 407 2010-12-31 20:48:48Z lou $" ; /* This is a dummy stub routine for the benefit of optimised builds. It'll do until I rewrite the original. */ static bool dy_unscale_betai(consys_struct *orig_sys, int oxindx, double **betai, double **ai) { return (FALSE) ; } /* This routine has been rewritten to provide the the full unscaled vector of reduced costs. I've moved the original code over here and renamed it for future reference. */ static void dy_orig_cbarLocal (int nbcnt, double *cbar, int *vndx) /* This is a special purpose routine which unscales the vector of selected reduced costs produced by dy_pricenbvars. All we do here is walk the vectors and apply the unscaling. sc_cbar = sc_c - sc_csc_inv(B)sc_a = cS - cSinv(S)inv(B)inv(R)RaS = cS - cinv(B)aS = cbarS To unscale sc_cbar, we simply multiply by 1/S, keeping in mind that if x is a logical for row i, the appropriate factor is R. Parameters: nbcnt: number of entries in cbar, nbvars cbar: vector of reduced costs vndx: corresponding variable indices Note that cbar and vndx are indexed from 0, and the indices specified in vndx are in the frame of the original constraint system, which is what we need for accesses to the scaling vectors. Returns: undefined */ { int j,k ; double cbarj ; const double *rscale,*cscale ; /* Is unscaling required? If so, acquire the vectors and go to it. */ if (dy_isscaled() == FALSE) return ; dy_scaling_vectors(&rscale,&cscale) ; /* Get on with the calculation. Recall that vndx encodes the index of a logical as -i. */ for (k = 0 ; k < nbcnt ; k++) { j = vndx[k] ; cbarj = cbar[k] ; if (j > 0) { cbarj /= cscale[j] ; } else { cbarj *= rscale[-j] ; } setcleanzero(cbarj,dy_tols->dfeas) ; cbar[k] = cbarj ; } return ; } bool dy_pricenbvars (lpprob_struct *orig_lp, flags priceme, double **p_ocbar, int *p_nbcnt, int **p_nbvars) /* This routine will calculate the reduced costs of nonbasic variables in the original constraint system, using the information available in the dylp data structures. For active variables, the value from dy_cbar is used. For inactive variables, the column is priced. The set of variables priced is all variables whose status is specified with priceme. On return, nbcnt has the number of columns actually priced, nbvars holds the indices, and ocbar holds the corresponding reduced costs. E.g., if x is the ith variable priced, nbvars[i] = j and ocbar[i] = cbar. Variable indices returned in nbvars are in the orig_sys frame, which does not include logicals. Priced logicals are indicated by the negative of the index of their associated constraint. The overall flow of the routine is to calculate the scaled cbar's, then unscale them as a final step. Parameters: orig_lp: the lp problem structure priceme: variables with a status included in priceme will be priced p_ocbar: (i) a vector to hold the reduced costs; if NULL, one will be allocated (o) the reduced costs for priced nonbasic variables; only entries for the indices in nbvars are valid p_nbcnt: (o) the number of variables priced p_nbvars (i) a vector to hold the indices of the variables which are priced; if NULL, one will be allocated (o) the indices of the priced variables Returns: TRUE if there are no problems with pricing, FALSE otherwise. */ { int oxjndx,xjndx,pkndx,cndx,nbcnt,*nbvars ; double cbarj,*ocbar ; flags statj ; bool retval ; consys_struct *orig_sys ; pkvec_struct *aj ; pkcoeff_struct *aij ; const char *rtnnme = "dy_pricenbvars" ; /* dy_unscaling.c */ extern void dy_orig_cbarLocal (int nbcnt, double *cbar, int *vndx) ; # ifdef DYLP_PARANOIA if (p_ocbar == NULL) { errmsg(2,rtnnme,"&cbar") ; return (FALSE) ; } if (p_nbcnt == NULL) { errmsg(2,rtnnme,"&nbcnt") ; return (FALSE) ; } if (p_nbvars == NULL) { errmsg(2,rtnnme,"&nbvars") ; return (FALSE) ; } if (orig_lp == NULL) { errmsg(2,rtnnme,"orig_lp") ; return (FALSE) ; } if (orig_lp->consys == NULL) { errmsg(2,rtnnme,"orig_lp->consys") ; return (FALSE) ; } # endif /* Check for valid data structures, then pull out the constraint system. The call to initlclsystem will replace the client's copy of the original constraint system with the local scaled copy, if it exists. */ if (orig_lp->owner != dy_owner) { errmsg(396,rtnnme,orig_lp->consys->nme, orig_lp->owner,dy_owner,"price nonbasic columns") ; return (FALSE) ; } (void) dy_initlclsystem(orig_lp,TRUE) ; orig_sys = orig_lp->consys ; /* Did the client give us vectors, or do we need to allocate them? There can be at most varcnt nonbasic variables. */ if (*p_ocbar == NULL) *p_ocbar = (double *) CALLOC(orig_sys->varcnt,sizeof(double)) ; ocbar = *p_ocbar ; if (*p_nbvars == NULL) *p_nbvars = (int *) CALLOC(orig_sys->varcnt,sizeof(int)) ; nbvars = *p_nbvars ; /* Open a loop to walk the columns of orig_sys. Active variables have a valid dy_sys index (> 0) in dy_origvars. We simply check dy_status and grab the entry in dy_cbar. To simplify later use, set cbar to 0 if it's less than the dual feasibility tolerance. */ retval = TRUE ; aj = NULL ; nbcnt = 0 ; for (oxjndx = 1 ; oxjndx <= orig_sys->varcnt ; oxjndx++) { if (ACTIVE_VAR(oxjndx)) { xjndx = dy_origvars[oxjndx] ; statj = dy_status[xjndx] ; if (flgon(statj,priceme)) { cbarj = dy_cbar[xjndx] ; setcleanzero(cbarj,dy_tols->dfeas) ; # ifdef DYLP_PARANOIA if ((flgon(statj,vstatNBUB) && cbarj > 0) || (flgon(statj,vstatNBLB) && cbarj < 0)) { errmsg(739,rtnnme,dy_sys->nme,"active", consys_nme(orig_sys,'v',oxjndx,TRUE,NULL),oxjndx, dy_prtvstat(statj),cbarj) ; retval = FALSE ; break ; } # endif ocbar[nbcnt] = cbarj ; nbvars[nbcnt++] = oxjndx ; } } /* Inactive variables have the negative of their status (nonbasic at upper or lower bound, or fixed) in dy_origvars. We have to price the column in this case. Calculate cbar = c - ya, using only the active rows of the column. */ else { statj = (flags) -dy_origvars[oxjndx] ; # ifdef DYLP_PARANOIA if (flgoff(statj,vstatNBFX|vstatNBUB|vstatNBLB|vstatNBFR)) { errmsg(433,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "inactive",consys_nme(orig_sys,'v',oxjndx,TRUE,NULL), oxjndx,dy_prtvstat(statj)) ; retval = FALSE ; break ; } # endif if (flgon(statj,priceme)) { cbarj = orig_sys->obj[oxjndx] ; if (consys_getcol_pk(orig_sys,oxjndx,&aj) == FALSE) { errmsg(122,rtnnme,orig_sys->nme,"column", consys_nme(orig_sys,'v',oxjndx,TRUE,NULL),oxjndx) ; retval = FALSE ; break ; } for (pkndx = 0,aij = aj->coeffs ; pkndx < aj->cnt ; pkndx++,aij++) { if (ACTIVE_CON(aij->ndx)) { cndx = dy_origcons[aij->ndx] ; cbarj -= dy_y[cndx]*aij->val ; } } setcleanzero(cbarj,dy_tols->dfeas) ; # ifdef DYLP_PARANOIA if ((flgon(statj,vstatNBUB) && cbarj > 0) || (flgon(statj,vstatNBLB) && cbarj < 0)) { errmsg(739,rtnnme,dy_sys->nme,"inactive", consys_nme(orig_sys,'v',oxjndx,TRUE,NULL),oxjndx, dy_prtvstat(statj),cbarj) ; retval = FALSE ; break ; } # endif ocbar[nbcnt] = cbarj ; nbvars[nbcnt++] = oxjndx ; } } } /* Last but not least, step through the logicals (in the dy_sys frame) and add them, using the negative of their associated constraint (in the orig_sys frame) as the index. */ for (xjndx = 1 ; xjndx <= dy_sys->concnt ; xjndx++) { statj = dy_status[xjndx] ; if (flgon(statj,priceme)) { cbarj = dy_cbar[xjndx] ; setcleanzero(cbarj,dy_tols->dfeas) ; # ifdef DYLP_PARANOIA if ((flgon(statj,vstatNBUB) && cbarj > 0) || (flgon(statj,vstatNBLB) && cbarj < 0)) { errmsg(739,rtnnme,dy_sys->nme,"logical", consys_nme(dy_sys,'v',xjndx,TRUE,NULL),xjndx, dy_prtvstat(statj),cbarj) ; retval = FALSE ; break ; } # endif ocbar[nbcnt] = cbarj ; nbvars[nbcnt++] = -dy_actcons[xjndx] ; } } *p_nbcnt = nbcnt ; /* Unscale the reduced costs. */ (void) dy_orig_cbarLocal(nbcnt,ocbar,nbvars) ; /* And we're done. Clean up and return. */ dy_freelclsystem(orig_lp,FALSE) ; if (aj != NULL) pkvec_free(aj) ; return (retval) ; } static bool pricedualpiv (consys_struct *orig_sys, double *betai, double *ai, int oxindx, double nubi, double xi, double nlbi, int nbcnt, int *nbvars, double *nbcbar, double *p_upeni, double *p_dpeni) /* This routine performs the core pricing calculation for the up and down penalties associated with the dual pivot that will force x to decrease and leave the basis at nub or increase and leave the basis at nlb. The assumption is that we're pricing a prospective disjunction. If x is a logical, and the associated constraint is inactive (i.e., not part of the current basis), a must contain the coefficients of the constraint. (Note that this will also work in the case that we want to price a new constraint, not currently in orig_sys.) It is expected that any necessary setup for the calculation has been taken care of by a front-end routine (at present, only dy_pricedualpiv). The most likely source of a scaled copy of the original constraint system is the local copy maintained by dy_scaling.c The most likely source of an unscaled copy is the client's copy of the original constraint system. Neither system is likely to have explicit logicals, hence this routine handles the columns for logicals implicitly, to avoid any problems. Here's the computation. For convenience, assume that x is basic in basis position i, and this row is constraint i. dpen = MIN{j}(-(nlb(i) - x)cbar/abar) for j in nbvars s.t. abar > 0 and x < u or abar < 0 and x > l upen = MIN{j}(-(nub(i) - x)cbar/abar) for j in nbvars s.t. abar < 0 and x < u or abar > 0 and x > l See the written documentation for development of the formulas. Briefly, the penalty calculation gives the deterioration in the objective for the first dual pivot back toward feasibility. The routine calculates abar = dot(beta,a) for each j in nbvars. It will keep going until dpen = upen = 0, or all variables in nbvars have been scanned. nbvars is assumed to contain the indices of the nonbasic variables `of interest', meaning that they're not fixed. nbcbar is in correspondence, so that if nbvars[i] = j, nbcbar[i] = cbar. Logicals (which don't exist in the orig_sys frame of reference) are expected to be coded as the negative of the index of their associated constraint. (See dy_pricenbvars.) nbvars and nbcbar are indexed from 0. Parameters: orig_sys: the unscaled original constraint system betai: unscaled row i of the basis inverse ai: unscaled coefficients of constraint i, if it is not active oxindx: index of x in orig_sys; negative values are assumed to specify logicals (as the negative of the index of the associated constraint); 0 means a holds a new row. nubi: unscaled new upper bound for x xi: current value of x in optimal solution nlbi: unscaled new lower bound for x nbcnt: the number of variable indices in nbvars nbvars: indices of the nonbasic variables of interest (indices in the orig_sys frame) nbcbar: the reduced costs, in correspondence with nbvars p_upeni: (o) the up penalty when x is forced up to nlb p_dpeni: (o) the down penalty when x is forced down to nub Returns: TRUE if the calculation proceeds without error, FALSE otherwise */ { #if 0 int oxjndx,nbndx,pkndx,cndx,vndx ; double abarij,upenij,dpenij,upeni,dpeni,cbarj ; flags statj ; vartyp_enum *vtyp ; pkvec_struct *aj ; pkcoeff_struct *aij ; bool activexi,retval ; const char *rtnnme = "pricedualpiv" ; # ifdef DYLP_PARANOIA int i,ipos ; double *abarj ; /* dy_tableau.c */ bool dy_abarj(consys_struct *orig_sys, int j_orig, double **p_abarj) ; abarj = NULL ; # endif vtyp = orig_sys->vtyp ; /* Do we have an active variable or an inactive variable? If oxindx < 0 it's a logical, so we need to ask whether or not the constraint is active. We don't deal with inactive architectural variables. */ activexi = TRUE ; if (oxindx == 0) { activexi = FALSE ; } else if (oxindx < 0) { if (INACTIVE_CON(-oxindx)) activexi = FALSE ; } else { if (INACTIVE_VAR(oxindx)) { errmsg(737,rtnnme,orig_sys->nme, consys_nme(orig_sys,'v',oxindx,FALSE,NULL),oxindx) ; return (FALSE) ; } } # ifdef DYLP_PARANOIA if (activexi == FALSE && ai == NULL) { errmsg(2,rtnnme,"a (inactive)") ; return (FALSE) ; } # endif /* Now open a loop to walk nbvars. Architectural variables are specified with their index in orig_sys, and may or may not be active. For each architectural variable, pull the unscaled column, calculate abar = dot(beta,a), and acquire the status. Logicals are specified with the index of their associated constraint in orig_sys, negated, and will certainly be active, but we deal with them implicitly. (This is important, because orig_sys might well be the client's copy and logicals may not be explicitly represented.) If we're dealing with an inactive row, remember that it may also contain a coefficient for the variable in this column. If abar is 0, that's all the further we need to go with this x, because we can't use it to move x. The escape comes after the paranoid check. */ dpeni = dy_tols->inf ; upeni = dy_tols->inf ; aj = NULL ; retval = TRUE ; for (nbndx = 0 ; nbndx < nbcnt ; nbndx++) { oxjndx = nbvars[nbndx] ; if (oxjndx < 0) { cndx = dy_origcons[-oxjndx] ; if (dy_sys->ctyp[cndx] == contypGE) { abarij = -betai[cndx] ; } else { abarij = betai[cndx] ; } statj = dy_status[cndx] ; } else { if (consys_getcol_pk(orig_sys,oxjndx,&aj) == FALSE) { errmsg(122,rtnnme,orig_sys->nme,"column", consys_nme(orig_sys,'v',oxjndx,TRUE,NULL),oxjndx) ; retval = FALSE ; break ; } abarij = 0 ; for (pkndx = 0,aij = aj->coeffs ; pkndx < aj->cnt ; pkndx++,aij++) { if (ACTIVE_CON(aij->ndx)) { cndx = dy_origcons[aij->ndx] ; abarij += betai[cndx]*aij->val ; } } vndx = dy_origvars[oxjndx] ; if (vndx > 0) { statj = dy_status[vndx] ; } else { statj = (flags) -vndx ; } if (activexi == FALSE && oxjndx > 0) abarij += betai[dy_sys->concnt+1]*ai[oxjndx] ; } setcleanzero(abarij,dy_tols->zero) ; # ifdef DYLP_PARANOIA /* We can do a check if the row is active, by ftran'ing the column and checking that we get the same value for abar with both calculations. The tolerance on the check --- 1000*dy_tols.zero --- is pretty loose, but remember that the original system is unscaled and could be pretty ugly. This code is broken at the moment, because I'm changing the semantics of dy_abarj to return the full abar in the context of the original system. See dy_tableau.c. -- lh, 080515 -- */ if (activexi) { if (dy_abarj(orig_sys,oxjndx,&abarj) == FALSE) { if (oxjndx < 0) { vndx = orig_sys->varcnt-oxjndx ; } else { vndx = oxjndx ; } errmsg(740,rtnnme,orig_sys->nme,"ftran'd column", consys_nme(orig_sys,'v',vndx,TRUE,NULL),oxjndx) ; retval = FALSE ; break ; } if (oxindx < 0) { i = dy_origcons[-oxindx] ; } else { i = dy_origvars[oxindx] ; } ipos = dy_var2basis[i] ; if (!withintol(abarj[ipos],abarij,1000*dy_tols->zero)) { errmsg(741,rtnnme,orig_sys->nme,oxindx,oxjndx,abarij,ipos,abarj[ipos], abarj[ipos]-abarij,1000*dy_tols->zero) ; retval = FALSE ; break ; } } # endif if (abarij == 0) continue ; /* Calculate the penalty dpen for using x to force x to nub. We can use x only if abar has the right sign to match the status of x (dual pivoting rules, essentially). dpen becomes min(dpen,dpen). If dpen is already 0, it can't get worse, so there's no need to do the calculation. The drill is the same for upen, using nlb. */ cbarj = nbcbar[nbndx] ; # ifdef DYLP_PARANOIA if (cbarj != 0 && fabs(cbarj) < dy_tols->dfeas) { int tmpndx ; if (oxjndx < 0) tmpndx = -oxjndx ; else tmpndx = oxjndx ; errmsg(738,rtnnme,orig_sys->nme,tmpndx,cbarj,dy_prtvstat(statj), consys_nme(orig_sys,'v',tmpndx+orig_sys->varcnt,FALSE,NULL), tmpndx,dy_tols->dfeas,dy_tols->dfeas-fabs(cbarj)) ; retval = FALSE ; break ; } # endif if (dpeni > 0) { if ((abarij > 0 && flgoff(statj,vstatNBUB)) || (abarij < 0 && flgoff(statj,vstatNBLB))) { dpenij = (nubi-xi)*cbarj/(-abarij) ; setcleanzero(dpenij,dy_tols->zero) ; # ifdef STRONG_PENALTIES if (oxjndx > 0) { if (INT_VARTYPE(vtyp[oxjndx]) && dpenij < fabs(cbarj)) dpenij = fabs(cbarj) ; } # endif # ifdef DYLP_PARANOIA if (dpenij < 0) { errmsg(736,rtnnme,orig_sys->nme,"dpen",oxindx,oxjndx,dpenij) ; retval = FALSE ; break ; } # endif if (dpenij < dpeni) dpeni = dpenij ; } } if (upeni > 0) { if ((abarij < 0 && flgoff(statj,vstatNBUB)) || (abarij > 0 && flgoff(statj,vstatNBLB))) { upenij = (nlbi-xi)*cbarj/(-abarij) ; setcleanzero(upenij,dy_tols->zero) ; # ifdef STRONG_PENALTIES if (oxjndx > 0) { if (INT_VARTYPE(vtyp[oxjndx]) && upenij < fabs(cbarj)) upenij = fabs(cbarj) ; } # endif # ifdef DYLP_PARANOIA if (upenij < 0) { errmsg(736,rtnnme,orig_sys->nme,"upen",oxindx,oxjndx,upenij) ; retval = FALSE ; break ; } # endif if (upenij < upeni) upeni = upenij ; } } /* If both upeni and dpeni have been reduced to 0, we can quit. */ if (upeni == 0 && dpeni == 0) break ; } /* We've finished the penalty calculation loop. Clean up, set the return values, and return. */ if (aj != NULL) pkvec_free(aj) ; # ifdef DYLP_PARANOIA if (abarj != NULL) FREE(abarj) ; # endif *p_upeni = upeni ; *p_dpeni = dpeni ; return (retval) ; #endif return (FALSE) ; } bool dy_pricedualpiv (lpprob_struct *orig_lp, int oxindx, double nubi, double xi, double nlbi, int nbcnt, int *nbvars, double *nbcbar, double *p_upeni, double *p_dpeni) /* This routine is a generalised pricing routine that calculates the up and down penalties associated with the dual pivot that will force x (basic, infeasible) to either rise to nlb and leave the basis, or fall to nub and leave the basis. It's generalised (e.g., with respect to a standard up/down penalty calculation) in the sense that it doesn't assume floor and ceiling for nub and nlb, respectively, and it can handle the calculation when x is the slack associated with an inactive constraint. (This is handy for evaluating candidates for branch-on-hyperplane.) dpen = MIN{j}(-(nlb(i) - x)cbar/abar) for j in nbvars s.t. abar > 0 and x < u or abar < 0 and x > l upen = MIN{j}(-(nub(i) - x)cbar/abar) for j in nbvars s.t. abar < 0 and x < u or abar > 0 and x > l Each abar is calculated as dot(beta,a). See the written documentation for development of the formulas. Briefly, the penalty calculation gives the deterioration in the objective for the first dual pivot back toward feasibility. The calculation of an unscaled basis inverse row beta is handled by dy_unscale_betai. The remainder of the heavy lifting is handled by pricedualpiv. nbvars is assumed to contain the nonbasic variables `of interest', meaning that they're not fixed. nbcbar is in correspondence, so that if nbvars[i] = j, nbcbar[i] = cbar. Logicals (which don't exist in the orig_sys frame of reference) are expected to be coded as the negative of the index of their associated constraint. (See dy_pricenbvars.) Parameters: orig_lp: the lp problem structure; contains a pointer to the unscaled original constraint system oxindx: index of x in orig_sys; negative values are assumed to specify logicals (as the negative of the index of the associated constraint) nubi: new upper bound for x xi: current value for x nlbi: new lower bound for x nbcnt: the number of variable indices in nbvars nbvars: indices of the nonbasic variables of interest (indices in the orig_sys frame) nbcbar: the reduced costs, in correspondence with nbvars p_upeni: (o) the up penalty for x p_dpeni: (o) the down penalty for x Returns: TRUE if the calculation proceeds without error, FALSE otherwise */ { double *betai,*ai ; consys_struct *orig_sys ; bool retval ; const char *rtnnme = "dy_pricedualpiv" ; /* dy_scaling.c */ extern bool dy_unscale_betai(consys_struct *orig_sys, int oxindx, double **betai, double **ai) ; # ifdef DYLP_PARANOIA if (p_upeni == NULL) { errmsg(2,rtnnme,"&upen") ; return (FALSE) ; } if (p_dpeni == NULL) { errmsg(2,rtnnme,"&dpen") ; return (FALSE) ; } if (orig_lp == NULL) { errmsg(2,rtnnme,"orig_lp") ; return (FALSE) ; } if (orig_lp->consys == NULL) { errmsg(2,rtnnme,"orig_lp->consys") ; return (FALSE) ; } # endif /* Check for valid data structures, then pull out the constraint system. We want the client's (unscaled) copy, so we don't swap in the scaled local copy. */ if (orig_lp->owner != dy_owner) { errmsg(396,rtnnme,orig_lp->consys->nme, orig_lp->owner,dy_owner,"calculate penalty") ; return (FALSE) ; } orig_sys = orig_lp->consys ; /* Get the unscaled row of the basis inverse. */ betai = NULL ; ai = NULL ; if (dy_unscale_betai(orig_sys,oxindx,&betai,&ai) == FALSE) { return (FALSE) ; } /* Call pricedualpiv to do the rest of the heavy lifting. */ retval = pricedualpiv(orig_sys,betai,ai,oxindx,nubi,xi,nlbi, nbcnt,nbvars,nbcbar,p_upeni,p_dpeni) ; /* Clean up and return. */ if (ai != NULL) FREE(ai) ; if (betai != NULL) FREE(betai) ; return (retval) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_rays.c0000644000175200017520000013560612253224475015221 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2008 -- 2010 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains routines to return primal and dual rays, expressed in terms of the original system. If you think back to LP duality, (primal, dual) unbounded implies (dual, primal) infeasibility. The reverse does not hold: it's possible to be primal and dual infeasible. Still, it takes some pretty special pathology to manage simultaneous infeasibility (primal infeasibility defined by parallel constraints, so that we'd be unbounded if only we could achieve feasibility). If dylp returns primal or dual unbounded, then we know there's a ray in there somewhere. In fact, you'll never see dual unbounded, as return codes are always expressed in terms of the primal problem, and dual unbounded is converted to primal infeasible. Dylp's dual simplex doesn't have a phase I, so it's impossible to get to simultaneous dual and primal infeasibility by that route. Primal simplex does have a phase I and may well return primal infeasible without ever running dual simplex. Still, given the rarity of simultaneous dual and primal infeasibility, I'm not inclined to try and juggle return codes to explicitly distinguish {primal, dual} {unbounded, infeasible}. These routines assume that dylp has run to completion, and returned * unbounded, in which case there will be primal rays, or * infeasible, in which case there will (with high probability) be dual rays. The infeasible case can be refined a bit by checking dy_lp->active to see if the last simplex phase was dual or primal. If it was dual, we have a ray with probability 1. We're only going to return rays that emanate from the current basic solution. A search for all rays is a nontrivial and expensive task. With these assumptions, we can ignore any interactions with the inactive parts of the constraint system when testing for ray-ness. That doesn't mean that ray components associated with inactive constraints or variables are all zero, only that the inactive components will not block the ray. If they could, dylp would have activated them and we wouldn't be here. There's another bit of pathology to consider: It's possible to define a problem where we can move infinitely far in either direction. For example, min x1 s.t. x1 + x2 = 0 x1, x2 free However, only the direction that improves the objective qualifies as a ray. This follows by extension from the very common case where the constraints of an lp form a polyhedral cone with a finite optimum for, say, minimisation, but changing to maximisation results in an unbounded problem. Clearly, moving in a direction that degrades the objective does not normally qualify as a ray. */ #define DYLP_INTERNAL #include "dylp.h" static char svnid[] UNUSED = "$Id: dy_rays.c 524 2013-12-15 03:59:57Z tkr $" ; #if DYLP_PARANOIA > 0 /* dy_tableau.c */ extern bool dy_std_paranoia(const lpprob_struct *orig_lp, const char *rtnnme, int line) ; static bool check_dualRay (lpprob_struct *orig_lp, bool fullRay, int i_ray, int rayDir, double *ray, bool trueDuals) /* This is a paranoid check routine used for debugging dy_dualRays. It compares the ray passed as a parameter with the result of calculating betaA on the original system. The routine works in the original system frame of reference. It uses dy_betai to calculate beta and dy_colStatus and dy_logStatus to retrieve the status for logical and architectural variables. But we do cheat and use dy_tols. Parameters: orig_lp: the lp problem structure fullRay: TRUE if ray includes components associated with nonbasic architecturals, FALSE if it includes only components associated with explicit constraints. i_ray: index of the row in the original constraint system used to generate the ray rayDir: the direction of motion for the entering dual associated with this ray ray: the ray to be checked trueDuals: true if the ray uses the true dual sign convention, false to use dylp's min primal convention. Returns: TRUE if the ray checks out, FALSE otherwise */ { int m,n,i,j,errs ; double *goldRay,*betai_ray,*y,*cbar ; double rayk ; bool retval ; consys_struct *sys ; flags *log_status,*arch_status ; char *rtnnme = "check_dualRay" ; sys = orig_lp->consys ; if (dy_opts->print.rays >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%s: checking ray from %s (%d) ... ", rtnnme,consys_nme(sys,'c',i_ray,FALSE,NULL),i_ray) ; } /* Acquire beta. */ betai_ray = NULL ; if (dy_betai(orig_lp,i_ray,&betai_ray) == FALSE) { errmsg(952,rtnnme,sys->nme,"row",i_ray,"constraint", consys_nme(sys,'c',i_ray,FALSE,NULL),i_ray) ; if (betai_ray != NULL) FREE(betai_ray) ; return (FALSE) ; } /* Acquire the status vectors for the logicals and architecturals, and the row and column duals (a.k.a. duals and reduced costs). */ log_status = NULL ; dy_logStatus(orig_lp,&log_status) ; arch_status = NULL ; dy_colStatus(orig_lp,&arch_status) ; y = NULL ; dy_rowDuals(orig_lp,&y,TRUE) ; cbar = NULL ; dy_colDuals(orig_lp,&cbar,TRUE) ; /* Allocate space for the golden ray. Always allocate space large enough for a full ray. This is, after all, a paranoid routine and having the full ray makes the code a bit simpler. */ m = sys->concnt ; n = sys->varcnt ; goldRay = (double *) CALLOC((m+n+1),sizeof(double)) ; /* Calculate the ray elements. For the logicals, the ray element is simply the ith element of beta. For the architecturals, we need to do an honest dot product. Keep in mind that inv(B)N is -(dualN)(inv(dualB)), and that absorbs the minus sign that would otherwise appear here. Flip the ray (-1) for NBUB variables. */ for (i = 1 ; i <= m ; i++) { if (flgon(log_status[i],vstatBASIC)) continue ; goldRay[i] = rayDir*betai_ray[i] ; } for (j = 1 ; j <= n ; j++) { if (flgon(arch_status[j],vstatBASIC)) continue ; rayk = rayDir*consys_dotcol(sys,j,betai_ray) ; if (flgon(arch_status[j],vstatNBUB) && trueDuals == TRUE) rayk = -rayk ; goldRay[m+j] = rayk ; } /* And compare */ errs = 0 ; for (i = 1 ; i <= m ; i++) { if (dy_opts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n y<%d> = %g, ray<%d> = %g", i,y[i],i,ray[i]) ; } if (fabs(ray[i]-goldRay[i]) > dy_tols->cost) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: ray<%d> = %g != %g = gold<%d>; error %g, tol %g.", i,ray[i],goldRay[i],i,ray[i]-goldRay[i],dy_tols->cost) ; errs++ ; } } if (fullRay == TRUE) { for (j = 1 ; j <= n ; j++) { if (dy_opts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n cbar<%d> = %g, ray<%d+%d> = %g", j,cbar[j],m,j,ray[m+j]) ; } if (fabs(ray[m+j]-goldRay[m+j]) > dy_tols->cost) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n ERROR: ray<%d+%d> = %g != %g = gold<%d+%d>; error %g, tol %g.", m,j,ray[m+j],goldRay[m+j],m,j,ray[m+j]-goldRay[m+j],dy_tols->cost) ; errs++ ; } } } if (errs == 0) { if (dy_opts->print.rays >= 3) { if (dy_opts->print.rays >= 4) dyio_outchr(dy_logchn,dy_gtxecho,'\n') ; dyio_outfmt(dy_logchn,dy_gtxecho," ok.") ; } retval = TRUE ; } else { if (dy_opts->print.rays >= 3) { if (dy_opts->print.rays >= 4) dyio_outchr(dy_logchn,dy_gtxecho,'\n') ; dyio_outfmt(dy_logchn,dy_gtxecho," %d errors.",errs) ; } retval = FALSE ; } if (log_status != NULL) FREE(log_status) ; if (arch_status != NULL) FREE(arch_status) ; if (betai_ray != NULL) FREE(betai_ray) ; if (goldRay != NULL) FREE(goldRay) ; return (retval) ; } #endif static bool testForPrimalRay (int j, int *p_dir, double **p_abarj) /* This routine evaluates an active column abar = inv(B)a to determine if it constitutes a primal ray. It's a much-simplified version of the algorithm that selects the leaving variable for primal simplex. * Instead of searching for the smallest limit on the change in x, we just want to know if there's no limit. Hence we can abandon the evaluation as soon as any basic primal variable limits the change in x. * There's no need to worry about degeneracy, numerical stability and all the other little considerations that go into selecting a good pivot. NOTE: This routine works in the active system reference frame. The vector returned is abar. This is not quite a ray: it needs a coefficient (-1.0) for x and it must be negated to become the corresponding ray. It makes more sense to do this in the client, once we know how the ray is to be presented. See, for example, dy_primalRays, which transforms the ray for use by the outside world. Parameters: j: Index of the column to be evaluated p_dir: (o) Direction of motion, 1: ray in the direction abar (x increasing) 0: not a ray =1: ray in the direction -abar (x decreasing) p_abarj: (o) if non-NULL, used to return abar as an expanded vector in basis order iff abar is a primal ray, otherwise *p_abarj is set to NULL Returns: TRUE if the evaluation completes without error, FALSE otherwise. */ { int k = 0,m,kpos,dir ; flags statj,statk ; double *abarj ; double abarkj = 0.0,cbarj ; bool rayUp,rayDown ; const char *rtnnme = "testForPrimalRay" ; # ifndef DYLP_NDEBUG int v ; if (dy_opts->print.rays >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n Testing if column %s (%d) is a primal ray", consys_nme(dy_sys,'v',j,FALSE,NULL),j) ; } # endif if (p_abarj != NULL) *p_abarj = NULL ; *p_dir = 0 ; rayUp = TRUE ; rayDown = TRUE ; /* Start by checking the reduced cost. If cbar = 0, we can change x all we like, but we won't go unbounded. Use the reduced cost / objective tolerance here, otherwise we could be in disagreement with dylp. If the reduced cost is not zero, then any ray must improve the objective. Dylp is always minimising: min z = cinv(B)b + cbarx, where cbar = (c - cinv(B)N). */ cbarj = dy_cbar[j] ; if (withintol(cbarj,0,dy_tols->cost)) { # ifndef DYLP_NDEBUG if (dy_opts->print.rays >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, ".\n\tcbar<%d> = %g; no ray.",j,cbarj) ; } # endif return (TRUE) ; } else if (cbarj < 0) { rayDown = FALSE ; dir = 1 ; } else { rayUp = FALSE ; dir = -1 ; } # ifndef DYLP_NDEBUG if (dy_opts->print.rays >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,".\n\tcbar<%d> = %g allows %s ray", j,cbarj,((dir < 0)?"down":"up")) ; } # endif /* Reduce the possibilities based on the status of x. We shouldn't be called for basic variables, but bail out now if that's the case. */ statj = getflg(dy_status[j],vstatSTATUS) ; if (flgon(statj,vstatBASIC)) { rayUp = FALSE ; rayDown = FALSE ; } else { switch (statj) { case vstatNBFX: { rayUp = FALSE ; rayDown = FALSE ; break ; } case vstatNBLB: { rayDown = FALSE ; if (dy_sys->vub[j] < dy_tols->inf) { rayUp = FALSE ; } break ; } case vstatNBUB: { rayUp = FALSE ; if (dy_sys->vlb[j] > -dy_tols->inf) { rayDown = FALSE ; } break ; } case vstatNBFR: { break ; } case vstatSB: { if (dy_sys->vlb[j] > -dy_tols->inf) { rayDown = FALSE ; } if (dy_sys->vub[j] < dy_tols->inf) { rayUp = FALSE ; } break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } } if (rayUp == FALSE && rayDown == FALSE) { # ifndef DYLP_NDEBUG if (dy_opts->print.rays >= 4) { if (flgon(statj,vstatBASIC|vstatNBFX)) { dyio_outfmt(dy_logchn,dy_gtxecho,"; status %s; no ray.", j,cbarj,dy_prtvstat(statj)) ; } else if (dir == 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"; status %s, ub = %g; no ray.", dy_prtvstat(statj),dy_sys->vub[j]) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"; status %s, lb = %g; no ray.", dy_prtvstat(statj),dy_sys->vlb[j]) ; } } # endif return (TRUE) ; } /* We'll have to work for it. Retrieve and ftran column a. */ abarj = NULL ; if (consys_getcol_ex(dy_sys,j,&abarj) == FALSE) { errmsg(122,rtnnme,dy_sys->nme, "column",consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; if (abarj != NULL) FREE(abarj) ; return (FALSE) ; } dy_ftran(abarj,FALSE) ; m = dy_sys->concnt ; /* Separate the loops for an up ray and a down ray for efficiency and clarity. Only one case will apply. Open a loop to step through the basic variables. As soon as we find a limit on delta, we're done. Clearly, if abar = 0, or x is free, no limit is implied. Otherwise, if increasing x moves x to a finite bound, we're bounded. For x increasing, if abar > 0, we're moving x toward lb, and if abar < 0, we're moving x toward ub. */ if (rayUp == TRUE) { for (kpos = 1 ; kpos <= m ; kpos++) { setcleanzero(abarj[kpos],dy_tols->zero) ; abarkj = abarj[kpos] ; if (abarkj == 0.0) continue ; k = dy_basis[kpos] ; statk = dy_status[k] ; if (flgon(statk,vstatBFR)) continue ; if ((abarkj > 0.0 && dy_sys->vlb[k] > -dy_tols->inf) || (abarkj < 0.0 && dy_sys->vub[k] < dy_tols->inf)) { rayUp = FALSE ; break ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.rays >= 4) { if (rayUp == FALSE) { dyio_outfmt(dy_logchn,dy_gtxecho, "; basis pos'n %d: abar<%d,%d> = %g; %s (%d) ", kpos,k,j,abarkj,consys_nme(dy_sys,'v',k,FALSE,NULL),k) ; if (abarkj < 0) { dyio_outfmt(dy_logchn,dy_gtxecho,"ub = %g ; no ray up.", dy_sys->vub[k]) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"lb = %g ; no ray up.", dy_sys->vlb[k]) ; } } else { dyio_outfmt(dy_logchn,dy_gtxecho,"; confirmed.") ; } } # endif } /* The same, for a down ray. Here, abar > 0 will move x toward ub and abar < 0 will move x toward lb. */ if (rayDown == TRUE) { for (kpos = 1 ; kpos <= m ; kpos++) { setcleanzero(abarj[kpos],dy_tols->zero) ; abarkj = abarj[kpos] ; if (abarkj == 0.0) continue ; k = dy_basis[kpos] ; statk = dy_status[k] ; if (flgon(statk,vstatBFR)) continue ; if ((abarkj > 0.0 && dy_sys->vub[k] < dy_tols->inf) || (abarkj < 0.0 && dy_sys->vlb[k] > -dy_tols->inf)) { rayDown = FALSE ; break ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.rays >= 4) { if (rayDown == FALSE) { dyio_outfmt(dy_logchn,dy_gtxecho, "; basis pos'n %d: abar<%d,%d> = %g; %s (%d) ", kpos,k,j,abarkj,consys_nme(dy_sys,'v',k,FALSE,NULL),k) ; if (abarkj < 0) { dyio_outfmt(dy_logchn,dy_gtxecho,"lb = %g ; no ray down.", dy_sys->vlb[k]) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"ub = %g ; no ray down.", dy_sys->vub[k]) ; } } else { dyio_outfmt(dy_logchn,dy_gtxecho,"; confirmed.") ; } } # endif } # ifndef DYLP_NDEBUG if ((rayUp == TRUE || rayDown == TRUE) && dy_opts->print.rays >= 6) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n active ray %s (%d)\n non-zeros:", consys_nme(dy_sys,'v',j,FALSE,NULL),j) ; v = 0 ; for (kpos = 1 ; kpos <= m ; kpos++) { abarkj = abarj[kpos] ; if (withintol(abarkj,0,dy_tols->zero)) continue ; k = dy_basis[kpos] ; dyio_outfmt(dy_logchn,dy_gtxecho," (%s (%d) %g)", consys_nme(dy_sys,'v',k,FALSE,NULL),k,abarkj) ; v++ ; if (v%3 == 0) dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t\t") ; } } # endif /* That's it. If this is a ray, set the direction and return abar if the client's requested it, otherwise free it. */ if (rayUp == TRUE || rayDown == TRUE) { *p_dir = dir ; if (p_abarj != NULL) { *p_abarj = abarj ; } else { if (abarj != NULL) FREE(abarj) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.rays == 3) { dyio_outfmt(dy_logchn,dy_gtxecho,": yes.") ; } # endif } else { if (abarj != NULL) FREE(abarj) ; # ifndef DYLP_NDEBUG if (dy_opts->print.rays == 3) { dyio_outfmt(dy_logchn,dy_gtxecho,": no.") ; } # endif } return (TRUE) ; } bool dy_primalRays (lpprob_struct *orig_lp, int *p_numRays, double ***p_rays) /* This routine returns the primal rays emanating from the current basic solution. A call to this routine is productive only when the previous call to dylp returned a result of unbounded and dylp's internal data structures are still valid. A call when the previous simplex ended in anything other than optimal, infeasible, or unbounded is considered an error (in judgment, at the least). A call when the result of optimisation was anything other than unbounded will return zero rays. Note that we don't have to worry about synthesizing ray elements for inactive constraints. By definition, the basic variable for an inactive constraint is the associated logical, and we don't report any ray components for logical variables. Parameters: orig_lp: the lp problem structure p_numRays: (i) the maximum number of rays to return (o) the actual number of rays returned p_rays: (i) vector of (double *) or NULL; 0-based indexing If supplied by client, must be capable of holding at least p_numRays rays. If not supplied by client, allocated if necessary; in particular, not allocated unless at least one ray is returned (o) p_numRays entries will point to rays; each ray is an n-vector in original system column order. Returns: TRUE if no errors occurred while searching for rays; FALSE otherwise. */ { int m,n,i,j,m_orig,n_orig,j_orig ; int retval ; bool error ; double *sc_abarj ; consys_struct *orig_sys ; bool scaled ; const double *rscale,*cscale ; double invSj,dir ; int numCols, numRays,maxRays,rayDir,j_ray,j_orig_ray,i_orig_ray ; flags statj_ray ; double **rayCollection ; bool ourCollection,logical ; double *ray ; char *rtnnme = "dy_primalRays" ; # if DYLP_PARANOIA > 0 if (dy_std_paranoia(orig_lp,rtnnme,__LINE__) == FALSE) { return (FALSE) ; } if (p_numRays == NULL) { errmsg(2,rtnnme,"&numRays") ; return (FALSE) ; } if (p_rays == NULL) { errmsg(2,rtnnme,"&rays") ; return (FALSE) ; } # endif /* Do enough setup for a valid return with no rays. */ maxRays = *p_numRays ; if (maxRays == 0) { return (TRUE) ; } *p_numRays = 0 ; rayCollection = *p_rays ; if (rayCollection != NULL) { ourCollection = FALSE ; } else { ourCollection = TRUE ; } /* What was the result of the last lp? If it was unbounded, we have some rays. If it was optimal or infeasible, by definition we have no rays and can return TRUE. Any other code indicates an error; return FALSE. */ orig_sys = orig_lp->consys ; switch (orig_lp->lpret) { case lpUNBOUNDED: { break ; } case lpOPTIMAL: case lpINFEAS: { dywarn(954,rtnnme,orig_sys->nme,"primal",dy_prtlpret(orig_lp->lpret)) ; return (TRUE) ; } default: { errmsg(954,rtnnme,orig_sys->nme,"primal",dy_prtlpret(orig_lp->lpret)) ; return (FALSE) ; } } /* The lp was unbounded, so we have one sure ray specified in orig_lp. Since we've coopted sign to indicate ray direction, the logical for constraint i is coded as n+i. */ n_orig = orig_sys->varcnt ; m_orig = orig_sys->concnt ; i_orig_ray = -1 ; j_orig_ray = (int) orig_lp->obj ; if (j_orig_ray < 0) { j_orig_ray = -j_orig_ray ; rayDir = -1 ; } else { rayDir = 1 ; } if (j_orig_ray > n_orig) { i_orig_ray = j_orig_ray-n_orig ; logical = TRUE ; } else { logical = FALSE ; } /* Set up a header to hold the collection, if the client did not supply it. Also determine if we'll need to do unscaling, and if so acquire the scaling matrices. */ if (ourCollection == TRUE) { rayCollection = (double **) MALLOC(maxRays*sizeof(double *)) ; } sc_abarj = NULL ; scaled = dy_isscaled() ; if (scaled == TRUE) { dy_scaling_vectors(&rscale,&cscale) ; } /* Set up to walk the columns of the active system, starting from the known unbounded column j and wrapping around. For each column that tests out as a ray, testForPrimalRay will return abar in basis order in the active reference frame. We'll unscale it and simultaneously drop the coefficients into a vector in variable order in the original reference frame. */ error = FALSE ; numRays = 0 ; if (logical == TRUE) { j_ray = dy_origcons[i_orig_ray] ; } else { j_ray = dy_origvars[j_orig_ray] ; } n = dy_sys->varcnt ; m = dy_sys->concnt ; /* Start to walk the columns of the active system. Basic variables can't be rays. Neither can NBFX variables. */ for (numCols = 1 ; numCols <= n ; numCols++, j_ray = (j_ray%n)+1) { statj_ray = dy_status[j_ray] ; if (flgon(statj_ray,vstatBASIC|vstatNBFX)) continue ; /* The column is not obviously unqualified, so call for a thorough check. */ retval = testForPrimalRay(j_ray,&rayDir,&sc_abarj) ; if (retval == FALSE) { errmsg(447,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',j_ray,FALSE,NULL),j_ray,"primal") ; error = TRUE ; break ; } if (rayDir == 0) continue ; /* We have a ray. We need to unscale it and translate it from active system basis order to original system variable order. Begin by allocating a vector to hold the ray. In terms of scaling, we have sc_abar = inv(S)inv(B)aS and we need to remove the leading and trailing column scaling, if present. Getting the ray pointed in the right direction takes some work. We're testing x = inv(B)b - abarx, so ray = -abar. Then, if x is decreasing, that's another factor of -1 (encoded in rayDir). Finally, if the constraint in question is a >= constraint in the original system, there's another factor of -1 folded into the direction of change of the logical (which is really headed toward -inf in the original >= constraint). In terms of change of reference frame, we're moving from active system basis order to original system variable order. The translation is basis position to basic variable (active) to variable (original), i -> j -> j_orig. Drop logicals, as they're not present in the original system. Last, but not least, x is itself moving and must be part of the ray. Add a coefficient of 1.0, adjusted for direction, directly in the original reference frame. */ ray = CALLOC((n_orig+1),sizeof(double)) ; rayCollection[numRays] = ray ; numRays++ ; dir = -1.0*rayDir ; if (logical == TRUE) { i_orig_ray = dy_actcons[j_ray] ; if (orig_sys->ctyp[i_orig_ray] == contypGE) { dir = -dir ; } } else { j_orig_ray = dy_actvars[j_ray] ; } if (scaled == TRUE) { if (logical == TRUE) { invSj = rscale[i_orig_ray]*dir ; } else { invSj = 1/cscale[j_orig_ray]*dir ; } for (i = 1 ; i <= m ; i++) { if (sc_abarj[i] == 0) continue ; j = dy_basis[i] ; if (j <= dy_sys->concnt) continue ; j_orig = dy_actvars[j] ; ray[j_orig] = cscale[j_orig]*sc_abarj[i]*invSj ; setcleanzero(ray[j_orig],dy_tols->zero) ; } } else { for (i = 1 ; i <= m ; i++) { if (sc_abarj[i] == 0) continue ; j = dy_basis[i] ; if (j <= dy_sys->concnt) continue ; j_orig = dy_actvars[j] ; ray[j_orig] = sc_abarj[i]*dir ; setcleanzero(ray[j_orig],dy_tols->zero) ; } } if (sc_abarj != NULL) { FREE(sc_abarj) ; sc_abarj = NULL ; } if (logical == FALSE) { ray[j_orig_ray] = 1.0*dir ; } # ifndef DYLP_NDEBUG if (dy_opts->print.rays >= 5) { if (logical == TRUE) { j_orig = orig_sys->varcnt+i_orig_ray ; } else { j_orig = j_orig_ray ; } dyio_outfmt(dy_logchn,dy_gtxecho, "\n ray<%d>: %s (%d)\n non-zeros:", numRays,consys_nme(orig_sys,'v',j_orig,FALSE,NULL),j_orig) ; i = 0 ; for (j_orig = 1 ; j_orig <= n_orig ; j_orig++) { if (ray[j_orig] != 0) { dyio_outfmt(dy_logchn,dy_gtxecho," (%s (%d) %g)", consys_nme(orig_sys,'v',j_orig,FALSE,NULL),j_orig, ray[j_orig]) ; } i++ ; if (i%3 == 0) dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t\t") ; } } # endif if (numRays >= maxRays) break ; } /* End of scanning loop. We've either found the requested number of rays, scanned all columns, or encountered an error. Time for cleanup. Free the vector used for abar. If we have an error, free the ray collection. */ if (sc_abarj != NULL) FREE(sc_abarj) ; if (error == TRUE) { if (rayCollection != NULL) { for (i = 0 ; i < numRays ; i++) { if (rayCollection[i] != NULL) { FREE(rayCollection[i]) ; rayCollection[i] = NULL ; } } if (ourCollection == TRUE) FREE(rayCollection) ; } return (FALSE) ; } /* That's it --- finish up and return. */ *p_rays = rayCollection ; *p_numRays = numRays ; return (TRUE) ; } static void testForDualRay (int i, int *p_dir, double **p_abari) /* This routine evaluates an active row abar = e(inv(B)N) to determine if it constitutes a dual ray. As explained at the head of the file and in dy_dualRays, there's a nonzero possibility this is a pathological problem that's primal and dual infeasible. Still, we can assume that dylp has activated all variables that might help. The algorithm is a much-simplified version of the algorithm that selects the leaving dual variable (entering primal variable) for dual simplex. * Instead of searching for the smallest limit on the change in y, we just want to know if there's no limit. Hence we can abandon the evaluation as soon as any basic dual variable limits the change in y. * There's no need to worry about degeneracy, numerical stability and all the other little considerations that go into a selecting a good pivot. Remember that if we were actually using the dual matrices, we'd be checking y - abardelta, where abar is row i of (dualN)inv(dualB), to see if we could drive some y to zero by increasing y. If all abar <= 0 and some abar < 0, we have a ray. But we're using the primal matrices, y is cbar, abar is row i of inv(B)N = -(dualN)inv(dualB), and we have implicit bounds to cope with, which means that y could be increasing to zero (x entering from UB) or decreasing to zero (x entering from LB) and y could be increasing from zero (x increasing and leaving at LB) or decreasing from zero (x decreasing and leaving at UB). So the test expression is cbar - (-abar)delta = cbar + abardelta and abar is the potential ray. If we have delta*(-cbar/abar) <= 0 for all k and strictly less than zero for at least one k, then we have a ray. NOTE: This routine works in the active system reference frame. The vector returned is abar. This is not quite a ray: it needs a coefficient (1.0) for y. It makes more sense to do this in the client, once we know how the ray is to be presented. See, for example, dy_dualRays, which transforms the ray for use by the outside world. Parameters: i: Index of the row to be evaluated p_dir: (o) Direction of motion, 1: ray in the direction abar (y increasing) 0: not a ray -1: ray in the direction -abar (y decreasing) p_abari: (o) if non-NULL, used to return abar as an expanded vector in column order iff abar is a dual ray, otherwise *p_abari is set to NULL. Returns: undefined */ { int bvi,j,k,m,n,dir ; flags stati,statk = 0 ; double abarik = 0.0 ; bool rayUp,rayDown ; double *betai,*abari ; # if MALLOC_DEBUG == 2 char *rtnnme = "testForDualRay" ; # endif # ifndef DYLP_NDEBUG if (dy_opts->print.rays >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n Testing if row %s (%d) is a dual ray", consys_nme(dy_sys,'c',i,FALSE,NULL),i) ; } # endif /* Initial setup assumes no ray. */ betai = NULL ; abari = NULL ; if (p_abari != NULL) *p_abari = NULL ; *p_dir = 0 ; rayUp = FALSE ; rayDown = FALSE ; dir = 0 ; /* Start by checking the dual reduced cost, bbar = einv(B)b. (a.k.a. the value of the basic variable in pos'n i). If bbar = 0, we can change y all we like, but we won't go unbounded. If bbar is not zero, then any ray must improve the objective. If you think of the dual as minimising, then for bbar > 0, y must enter decreasing. For bbar < 0, y must enter increasing. To avoid the awkward questions that arise once you start to think hard about this while running dual simplex on the primal structures, we'll just go with the status of the basic variable: * If it's BUUB, then the dual will enter decreasing. * If it's BLLB, then the dual will enter increasing. * Otherwise, the dual reduced cost is 0 or unfavourable, and we don't have a ray. */ bvi = dy_basis[i] ; stati = getflg(dy_status[bvi],vstatSTATUS) ; switch (stati) { case vstatBUUB: { rayDown = TRUE ; dir = -1 ; break ; } case vstatBLLB: { rayUp = TRUE ; dir = 1 ; break ; } default: { break ; } } /* The action for no ray is simply to return. This is obscured by all the printing in the debug version. */ # ifdef DYLP_NDEBUG if (dir == 0) { return ; } # else if (dir == 0) { if (dy_opts->print.rays >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,".\n\tbasic var %s (%d) %s; no ray.", consys_nme(dy_sys,'v',bvi,FALSE,NULL),bvi, dy_prtvstat(stati)) ; } return ; } else if (dy_opts->print.rays >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,".\n\tbasic var %s (%d) %s allows %s ray", consys_nme(dy_sys,'v',bvi,FALSE,NULL),bvi,dy_prtvstat(stati), ((dir < 0)?"down":"up")) ; } # endif /* We'll have to work for it. We can use dy_btran to retrieve beta as einv(B). It's annoying, but allocate abari too, even though we may throw it away, 'cause otherwise we'll have no place to put coefficients while we're working. At least we don't need to initialise it. */ m = dy_sys->concnt ; n = dy_sys->varcnt ; betai = CALLOC((m+1),sizeof(double)) ; abari = MALLOC((n+1)*sizeof(double)) ; betai[i] = 1.0 ; dy_btran(betai) ; /* Separate the loops for an up ray and a down ray for efficiency and clarity. Only one case will apply. Walk the columns (skipping basic variables) looking for coefficients that will block motion. We're looking at y = cbar + abardelta and asking whether we can drive y to 0. If we make it through all the columns without turning up a blocking coefficient, we have a ray. For an up ray (y increasing), the blocking conditions are: * x NBLB (hence cbar >= 0) and abarik < 0 * x NBUB (hence cbar <= 0) and abarik > 0 * x NBFR (hence cbar == 0) and abarik != 0 If we happen to run across an NBFR variable with abarik != 0, we're immediately done. Dual feasibility is possible only with cbar == 0. NBFX variables, on the other hand, can never block --- we can regard them as NBLB or NBUB as needed. SB variables should not occur, but treat them as NBFR if seen. */ if (rayUp == TRUE) { for (k = 1 ; k <= n ; k++) { abari[k] = 0 ; statk = getflg(dy_status[k],vstatSTATUS) ; if (flgon(statk,vstatBASIC)) continue ; abarik = consys_dotcol(dy_sys,k,betai) ; abari[k] = abarik ; if (flgon(statk,vstatNBFX)) continue ; if (withintol(abarik,0,dy_tols->zero)) continue ; if (flgon(statk,vstatSB|vstatNBFR) || (flgon(statk,vstatNBLB) && abarik < 0) || (flgon(statk,vstatNBUB) && abarik > 0)) { rayUp = FALSE ; break ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.rays >= 4) { if (rayUp == FALSE) { dyio_outfmt(dy_logchn,dy_gtxecho, "; %s %s (%d): abar<%d,%d> = %g; %s (%d) ", dy_prtvstat(statk),consys_nme(dy_sys,'v',k,FALSE,NULL),k, i,k,abarik) ; if (flgon(statk,vstatNBFR)) { dyio_outfmt(dy_logchn,dy_gtxecho,"; no ray.") ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"; no ray up.") ; } } else { dyio_outfmt(dy_logchn,dy_gtxecho,"; confirmed.") ; } } # endif } /* The same, for a down ray. */ if (rayDown == TRUE) { for (k = 1 ; k <= n ; k++) { abari[k] = 0 ; statk = getflg(dy_status[k],vstatSTATUS) ; if (flgon(statk,vstatBASIC)) continue ; abarik = consys_dotcol(dy_sys,k,betai) ; abari[k] = abarik ; if (flgon(statk,vstatNBFX)) continue ; if (withintol(abarik,0,dy_tols->zero)) continue ; if (flgon(statk,vstatSB|vstatNBFR) || (flgon(statk,vstatNBLB) && abarik > 0) || (flgon(statk,vstatNBUB) && abarik < 0)) { rayDown = FALSE ; break ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.rays >= 4) { if (rayDown == FALSE) { dyio_outfmt(dy_logchn,dy_gtxecho, "; %s %s (%d): abar<%d,%d> = %g; %s (%d) ", dy_prtvstat(statk),consys_nme(dy_sys,'v',k,FALSE,NULL),k, i,k,abarik) ; if (flgon(statk,vstatNBFR)) { dyio_outfmt(dy_logchn,dy_gtxecho,"; no ray.") ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"; no ray down.") ; } } else { dyio_outfmt(dy_logchn,dy_gtxecho,"; confirmed.") ; } } # endif } if (betai != NULL) FREE(betai) ; # ifndef DYLP_NDEBUG if ((rayUp == TRUE || rayDown == TRUE) && dy_opts->print.rays >= 6) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n active ray %s (%d)\n non-zeros:", consys_nme(dy_sys,'c',i,FALSE,NULL),i) ; j = 0 ; for (k = 1 ; k <= n ; k++) { abarik = abari[k] ; if (withintol(abarik,0,dy_tols->zero)) continue ; dyio_outfmt(dy_logchn,dy_gtxecho," (%s (%d) %g)", consys_nme(dy_sys,'v',k,FALSE,NULL),k,abarik) ; j++ ; if (j%3 == 0) dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t\t") ; } } # endif /* That's it. If this is a ray, set the direction and return abar if the client's requested it, otherwise free it. */ if (rayUp == TRUE || rayDown == TRUE) { *p_dir = dir ; if (p_abari != NULL) { *p_abari = abari ; } else { if (abari != NULL) FREE(abari) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.rays == 3) { dyio_outfmt(dy_logchn,dy_gtxecho,": yes.") ; } # endif } else { if (abari != NULL) FREE(abari) ; # ifndef DYLP_NDEBUG if (dy_opts->print.rays == 3) { dyio_outfmt(dy_logchn,dy_gtxecho,": no.") ; } # endif } return ; } bool dy_dualRays (lpprob_struct *orig_lp, bool fullRay, int *p_numRays, double ***p_rays, bool trueDuals) /* This routine returns the dual rays emanating from the current basic solution. A call to this routine can be productive only when the previous call to dylp returned a result of (primal) infeasible(*) and dylp's internal data structures are still valid. A call when the previous simplex ended in anything other than optimal, infeasible, or unbounded is considered an error (in judgment, at the least). A call when the result of optimisation was anything other than infeasible will return zero rays. The ray returned depends on the value of fullRay. * If fullRay is true, the full ray is returned as an (m+n)-vector in the original system frame of reference. The first m entries hold ray components for the duals associated with explicit constraints, listed in row order. The remaining n entries hold ray components for the duals that would be associated with tight bound constraints (if those constraints were explicit), listed in column order. * If fullRay is false, duals associated with tight bound constraints are ignored. The ray components for the duals associated with the explicit constraints are returned as above. We're not interested in dual logicals. The meaning of trueDuals is explained in full in the preamble to dy_solutions.c. (*) Not to belabour the point, but it's possible for a problem to be dual and primal infeasible. In this case, you'll get no rays. Parameters: orig_lp: the lp problem structure fullRay: TRUE to return the full ray, FALSE to return only the ray components associated with explicit constraints. p_numRays: (i) the maximum number of rays to return (o) the actual number of rays returned p_rays: (i) vector of (double *) or NULL; 0-based indexing If supplied by client, must be capable of holding at least p_numRays rays. If not supplied by client, allocated if necessary; in particular, not allocated unless at least one ray is returned (o) p_numRays entries will point to rays; each ray is an m- or (m+n)-vector in original system row order. trueDuals if TRUE, return the ray with a sign convention appropriate for the true dual problem; if false, use a sign convention appropriate for the given min primal with implicit bounds. Returns: TRUE if no errors occurred while searching for rays; FALSE otherwise. */ { int m,n,i,j,m_orig,n_orig,i_orig,j_orig,rayLen ; bool error ; double *sc_abari ; consys_struct *orig_sys ; bool scaled ; const double *rscale,*cscale ; double Si,rayk ; int numRays,maxRays,rayDir,i_ray,i_orig_ray,bv_ray,bv_orig_ray ; flags statbv_ray ; double **rayCollection ; bool ourCollection,logical ; double *ray ; char *rtnnme = "dy_dualRays" ; # if DYLP_PARANOIA > 0 if (dy_std_paranoia(orig_lp,rtnnme,__LINE__) == FALSE) { return (FALSE) ; } if (p_numRays == NULL) { errmsg(2,rtnnme,"&numRays") ; return (FALSE) ; } if (p_rays == NULL) { errmsg(2,rtnnme,"&rays") ; return (FALSE) ; } # endif /* Do enough setup for a valid return with no rays. */ maxRays = *p_numRays ; if (maxRays == 0) { return (TRUE) ; } *p_numRays = 0 ; rayCollection = *p_rays ; if (rayCollection != NULL) { ourCollection = FALSE ; } else { ourCollection = TRUE ; } /* What was the result of the last lp? If it was infeasible, we probably have some rays. If it was optimal or unbounded, by definition we have no rays and can return TRUE. Any other code indicates an error; return FALSE. */ orig_sys = orig_lp->consys ; switch (orig_lp->lpret) { case lpINFEAS: { break ; } case lpOPTIMAL: case lpUNBOUNDED: { dywarn(954,rtnnme,orig_sys->nme,"dual",dy_prtlpret(orig_lp->lpret)) ; return (TRUE) ; } default: { errmsg(954,rtnnme,orig_sys->nme,"dual",dy_prtlpret(orig_lp->lpret)) ; return (FALSE) ; } } /* The lp was infeasible, so with high probability we'll have a ray. Set up a header to hold the collection, if the client did not supply it. Also determine if we'll need to do unscaling, and if so acquire the scaling matrices. */ if (ourCollection == TRUE) { rayCollection = (double **) MALLOC(maxRays*sizeof(double *)) ; } sc_abari = NULL ; scaled = dy_isscaled() ; if (scaled == TRUE) { dy_scaling_vectors(&rscale,&cscale) ; } /* Set up to walk the rows of the active system. For each row that tests out as a ray, testForDualRay will return abar in column order in the active reference frame. We'll unscale it and simultaneously drop the coefficients into the proper place in the ray, in the original reference frame. */ n_orig = orig_sys->varcnt ; m_orig = orig_sys->concnt ; if (fullRay == TRUE) { rayLen = m_orig+n_orig ; } else { rayLen = m_orig ; } n = dy_sys->varcnt ; m = dy_sys->concnt ; error = FALSE ; numRays = 0 ; rayDir = 0 ; /* Start to walk the rows of the active system. If the row is not a candidate for a dual pivot, there can be no ray. Test for BLLB or BUUB status for the associated basic variable. */ for (i_ray = 1 ; i_ray <= m ; i_ray++) { bv_ray = dy_basis[i_ray] ; statbv_ray = dy_status[bv_ray] ; if (!flgon(statbv_ray,vstatBLLB|vstatBUUB)) continue ; /* The row is not obviously unqualified, so call for a thorough check. If we have a ray, allocate a vector to hold it. */ testForDualRay(i_ray,&rayDir,&sc_abari) ; if (rayDir == 0) continue ; ray = CALLOC((rayLen+1),sizeof(double)) ; rayCollection[numRays] = ray ; numRays++ ; /* We need to unscale the ray and translate it from active system column order to original system row/column order. Getting the ray components pointed in the right direction takes a little work. If y is (apparently) decreasing because the basic primal is leaving at its upper bound, that's a factor of -1 (encoded in rayDir). Then, if the ray derives from a >= constraint in the original system, there's another factor of -1 to be applied, already encoded in the row scaling (rscale). BUT ... we have to be careful about semantics when the basic variable is a slack. If a >= constraint has been scaled to a <= constraint, dylp has added a slack after the multiplication by -1, and that slack is now BLLB on 0 <= slack <= infty. The coefficient of +1 is embedded in the basis inverse; we can't change it. When we convert back to a >= constraint, multiplying by -1, that +1 doesn't change! To get this right, we have to interpret the logical as a surplus that's BUUB on bounds of -infty <= surplus <= 0. Check for this case and reverse the ray direction (rayDir). TO THINK ABOUT: What about range constraints? And should we be checking for the scaling factor associated with this constraint (i_orig_ray) instead of the basic logical (bv_orig_ray)? This could be an unnatural logical, after all. I need to come up with an example that's dual unbounded and has an unnatural logical basic on a >= constraint. */ i_orig_ray = dy_actcons[i_ray] ; if (bv_ray <= m) { logical = TRUE ; bv_orig_ray = dy_actcons[bv_ray] ; if (scaled == TRUE && rscale[bv_orig_ray] < 0) rayDir = -rayDir ; } else { logical = FALSE ; bv_orig_ray = dy_actvars[bv_ray] ; } /* In terms of scaling, we have sc_abar = e(inv(S)inv(B)NS) and we need to remove the leading and trailing column scaling, if present. For the duals associated with implicit upper and lower bounds, it boils down to `if these constraints were explicitly added to the system, we'd write them as honest <= constraints, and they would have a positive dual.' A rigourous explanation of how we come to have apparently negative duals requires detailed examination of just how it is that you can run dual simplex at all using the primal matrices and data structures. See the typeset documentation on the relationship between primal and dual simplex. NOTE: The code assumes that the lower bound constraint will take the form -x <= -lb. The rationale is that the canonical primal problem is Ax <= b, hence it makes sense to assume this form when reconstructing an implicit constraint. But this is a choice, not a mathematical requirement. We could pretend these are >= constraints, at the cost of some mental gymnastics. NBFX is not an issue, as the dual for an equality is a free variable. In terms of change of reference frame, we're moving from active system column order to original system row/column order. For logicals, it's simply row i -> i_orig; for columns, j -> j_orig. If the user is asking for the full ray, we need to scan all of abar; otherwise, only the first m positions (the positions occupied by logicals). */ if (scaled == TRUE) { if (logical == TRUE) { Si = 1/rscale[bv_orig_ray]*rayDir ; } else { Si = cscale[bv_orig_ray]*rayDir ; } for (i = 1 ; i <= m ; i++) { if (sc_abari[i] == 0) continue ; i_orig = dy_actcons[i] ; rayk = Si*sc_abari[i]*rscale[i_orig] ; setcleanzero(rayk,dy_tols->zero) ; ray[i_orig] = rayk ; } if (fullRay == TRUE) { for (j = m+1 ; j <= n ; j++) { # if DYLP_PARANOIA > 0 if (dy_chkstatus(j) == FALSE) { error = TRUE ; } # endif if (sc_abari[j] == 0) continue ; /* Deal with a ray coefficient that's negated because the corresponding primal is NBUB. */ j_orig = dy_actvars[j] ; rayk = Si*sc_abari[j]*(1/cscale[j_orig]) ; if (trueDuals == TRUE && flgon(dy_status[j],vstatNBUB)) { # if DYLP_PARANOIA > 0 if (rayk > dy_tols->cost) { errmsg(739,rtnnme,dy_sys->nme,"active", consys_nme(dy_sys,'v',j,FALSE,NULL),j, dy_prtvstat(dy_status[j]),rayk) ; error = TRUE ; } # endif rayk = -rayk ; } setcleanzero(rayk,dy_tols->zero) ; ray[m_orig+j_orig] = rayk ; } } } /* The same, but without scaling. We still need to cope with rayDir and NBUB variables. */ else { for (i = 1 ; i <= m ; i++) { if (sc_abari[i] == 0) continue ; i_orig = dy_actcons[i] ; rayk = sc_abari[i]*rayDir ; setcleanzero(rayk,dy_tols->zero) ; ray[i_orig] = rayk ; } if (fullRay == TRUE) { for (j = m+1 ; j <= n ; j++) { # if DYLP_PARANOIA > 0 if (dy_chkstatus(j) == FALSE) { error = TRUE ; } # endif if (sc_abari[j] == 0) continue ; rayk = sc_abari[j]*rayDir ; if (trueDuals == TRUE && flgon(dy_status[j],vstatNBUB)) { # if DYLP_PARANOIA > 0 if (rayk > dy_tols->cost) { errmsg(739,rtnnme,dy_sys->nme,"active", consys_nme(dy_sys,'v',j,FALSE,NULL),j, dy_prtvstat(dy_status[j]),rayk) ; error = TRUE ; } # endif rayk = -rayk ; } j_orig = dy_actvars[j] ; setcleanzero(rayk,dy_tols->zero) ; ray[m_orig+j_orig] = rayk ; } } } if (sc_abari != NULL) { FREE(sc_abari) ; sc_abari = NULL ; } # if DYLP_PARANOIA > 0 /* Do the paranoid check before adding the coeff for the nonbasic dual. All we're testing here is einv(B)N. */ check_dualRay(orig_lp,fullRay,i_orig_ray,rayDir,ray,trueDuals) ; # endif /* Last, but not least, y is itself moving and must be part of the ray. Add a coefficient of 1.0 in the original reference frame. Except for a >= constraint, where we need -1 because any inversion encoded in the row scaling hasn't yet been applied to this coefficient. */ if (logical == TRUE) { if (orig_sys->ctyp[bv_orig_ray] == contypGE) { ray [bv_orig_ray] = -1.0 ; } else { ray[bv_orig_ray] = 1.0 ; } } else if (fullRay == TRUE) { ray[m_orig+bv_orig_ray] = 1.0 ; } # ifndef DYLP_NDEBUG if (dy_opts->print.rays >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n ray<%d>: %s (%d)\n non-zeros:",numRays, consys_nme(orig_sys,'c',i_orig_ray,FALSE,NULL),i_orig_ray) ; j_orig = 0 ; for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if (ray[i_orig] != 0) { if (j_orig != 0 && j_orig%3 == 0) dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t\t") ; dyio_outfmt(dy_logchn,dy_gtxecho," (%s (%d) %g)", consys_nme(orig_sys,'c',i_orig,FALSE,NULL),i_orig, ray[i_orig]) ; j_orig++ ; } } if (fullRay == TRUE) { i_orig = j_orig ; for (j_orig = 1 ; j_orig <= n_orig ; j_orig++) { if (ray[m_orig+j_orig] != 0) { if (i_orig%3 == 0) dyio_outfmt(dy_logchn,dy_gtxecho,"\n*\t\t") ; dyio_outfmt(dy_logchn,dy_gtxecho," (%s (%d) %g)", consys_nme(orig_sys,'v',j_orig,FALSE,NULL),j_orig, ray[m_orig+j_orig]) ; i_orig++ ; } } } } # endif if (numRays >= maxRays) break ; } /* End of scanning loop. We've either found the requested number of rays, scanned all rows, or encountered an error. Time for cleanup. Free the vector used for sc_abar. If we have an error, free the ray collection. */ if (sc_abari != NULL) FREE(sc_abari) ; if (error == TRUE) { if (rayCollection != NULL) { for (i = 0 ; i < numRays ; i++) { if (rayCollection[i] != NULL) { FREE(rayCollection[i]) ; rayCollection[i] = NULL ; } } if (ourCollection == TRUE) FREE(rayCollection) ; } return (FALSE) ; } /* That's it --- finish up and return. */ *p_rays = rayCollection ; *p_numRays = numRays ; return (TRUE) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_cmdint.c0000644000175200017520000003322512253224475015513 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains a medium strength command interpreter. It's a generic piece of code, also used in the bonsaiG MIP code. For bare dylp, or dylp embedded in a COIN OSI layer, various bits should be excised. The symbol BONSAIG should be defined only if dylp is being built as part of bonsaiG. */ #include "dylib_strrtns.h" #include "dy_cmdint.h" #include "dylib_keytab.h" static char sccsid[] UNUSED = "@(#)cmdint.c 3.12 11/11/04" ; static char svnid[] UNUSED = "$Id: dy_cmdint.c 524 2013-12-15 03:59:57Z tkr $" ; /* MAXCMDFILES is pretty much arbitrary. The i/o package enforces the system limit. All we need here is something reasonable for sizing the cmdchns array. */ #define MAXCMDFILES 16 /* cmdchns keeps track of the i/o id and echo status for each command file that's open. level is the current nesting level. */ static int level ; static bool prompt ; static struct { ioid chn ; bool cecho ; bool gecho ; bool prompt ; } cmdchns[MAXCMDFILES-1] ; /* User command table definitions. It is important that the commands be in alphabetic order in the usercmds structure, as the keytab routines use binary search. The various _NDX values can be changed at will. For the dylp OSI layer, only lpcontrol, and lpprint are available. */ #ifdef BONSAIG # define HELP_NDX 1 # define LPPRINT_NDX 2 # define OBJECTIVE_NDX 3 # define MIPPRINT_NDX 5 # define PHIC_NDX 6 # define OBJDELTA_NDX 7 # define INCUMBENT_NDX 8 # define RECOVER_NDX 9 # define PRIORITY_NDX 10 # define TOURCLASS_NDX 11 # define LPCTL_NDX 12 # define MIPCTL_NDX 13 # define MIPLIM_NDX 14 #else # define HELP_NDX 1 # define LPPRINT_NDX 2 # define OBJECTIVE_NDX 255 # define MIPPRINT_NDX 255 # define PHIC_NDX 255 # define OBJDELTA_NDX 255 # define INCUMBENT_NDX 255 # define RECOVER_NDX 255 # define PRIORITY_NDX 255 # define TOURCLASS_NDX 255 # define LPCTL_NDX 12 # define MIPCTL_NDX 255 # define MIPLIM_NDX 255 #endif #define UNIMP_NDX 255 static keytab_entry usercmds[] = { { "help", 1, HELP_NDX }, { "incumbent", 1, INCUMBENT_NDX }, { "lpcontrol", 3, LPCTL_NDX }, { "lpprint", 3, LPPRINT_NDX }, { "mipcontrol", 4, MIPCTL_NDX }, { "miplimit", 4, MIPLIM_NDX }, { "mipprint", 4, MIPPRINT_NDX }, { "objdelta", 4, OBJDELTA_NDX }, { "objective", 4, OBJECTIVE_NDX }, { "phic", 2, PHIC_NDX }, { "priority", 2, PRIORITY_NDX }, { "recovery", 1, RECOVER_NDX }, { "tourclass", 1, TOURCLASS_NDX } } ; #define NUMUSERCMDS (sizeof usercmds/sizeof (keytab_entry)) static cmd_retval docmd (ioid cmdchn, bool cmdecho, lex_struct *txt, lpopts_struct *lpopts, lptols_struct *lptols) /* This routine is just some prep and cleanup code, plus a big case statement. It figures out what command is requested, echoes it, dispatches to the appropriate routine, and on return cleans off any remaining junk on the command line. Parameter: cmdchn: i/o id for reading commands cmdecho: true if commands should be echoed to stdout, false otherwise txt: the command name lpopts: Options structure; will be adjusted lptols: Tolerances structure; will be adjusted Returns: cmd_retval code supplied by the command execution routine, or cmdHALTERROR if an error occurs here in docmd. */ { lex_struct *lex ; const char *keywd ; int cmd ; cmd_retval retval ; const char *rtnnme = "docmd" ; /* dy_setup.c */ extern cmd_retval dy_printopt(ioid cmdchn, bool cmdecho, const char *keywd, lpopts_struct *lpopts, lptols_struct *lptols), dy_ctlopt(ioid cmdchn, bool cmdecho, const char *keywd, lpopts_struct *lpopts, lptols_struct *lptols) ; #ifdef BONSAIG /* mip_setup.c */ extern cmd_retval mip_objopt(const char *keywd), mip_objdeltaopt(const char *keywd), mip_incumbentopt(const char *keywd), mip_phicopt(const char *keywd), mip_printopt(const char *keywd), mip_ctlopt(const char *keywd), mip_recoveryopt(const char *keywd) ; /* premature.c */ extern cmd_retval mip_limit (const char *keywd) ; /* priority_utils.c */ extern cmd_retval pri_priorityopt(const char *keywd) ; /* tourclass_utils.c */ extern cmd_retval tc_tourclassopt(const char *keywd) ; #endif if (txt == NULL) { errmsg(2,rtnnme,"txt") ; return (cmdHALTERROR) ; } if (txt->class != DY_LCID) { errmsg(5,rtnnme,(int) txt->class) ; return (cmdHALTERROR) ; } /* Look up the command in the command table. Return code of -1 means we can't find the string, -2 that it's ambiguous. */ dyio_outfmt(dy_logchn,cmdecho,txt->string) ; dyio_flushio(dy_logchn,cmdecho) ; cmd = ambig(txt->string,usercmds,NUMUSERCMDS) ; if (cmd < 0) { if (cmd < -1) errmsg(233,rtnnme,txt->string) ; else errmsg(234,rtnnme,txt->string) ; return (cmdHALTERROR) ; } /* Call the appropriate execution routine. Go to free input mode while parsing the command, then revert to line-oriented mode to remove any trailing junk. */ keywd = STRALLOC(txt->string) ; (void) dyio_setmode(cmdchn,'f') ; retval = cmdHALTERROR ; (void) dyio_setmode(cmdchn,'f') ; switch (cmd) { case LPPRINT_NDX: { retval = dy_printopt(cmdchn,cmdecho,keywd,lpopts,lptols) ; break ; } case LPCTL_NDX: { retval = dy_ctlopt(cmdchn,cmdecho,keywd,lpopts,lptols) ; break ; } # ifdef BONSAIG case MIPPRINT_NDX: { retval = mip_printopt(keywd) ; break ; } case MIPCTL_NDX: { retval = mip_ctlopt(keywd) ; break ; } case MIPLIM_NDX: { retval = mip_limit(keywd) ; break ; } case OBJECTIVE_NDX: { retval = mip_objopt(keywd) ; break ; } case OBJDELTA_NDX: { retval = mip_objdeltaopt(keywd) ; break ; } case PHIC_NDX: { retval = mip_phicopt(keywd) ; break ; } case INCUMBENT_NDX: { retval = mip_incumbentopt(keywd) ; break ; } case RECOVER_NDX: { retval = mip_recoveryopt(keywd) ; break ; } case PRIORITY_NDX: { retval = pri_priorityopt(keywd) ; break ; } case TOURCLASS_NDX: { retval = tc_tourclassopt(keywd) ; break ; } # endif case HELP_NDX: { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tHeh heh heh.\t\tSurely you jest?\n") ; retval = cmdOK ; break ; } case UNIMP_NDX: { dyio_outfmt(dy_logchn,dy_gtxecho, "\nThe command \"%s\" is unimplemented in this configuration.\n", keywd) ; retval = cmdOK ; break ; } } STRFREE(keywd) ; (void) dyio_setmode(cmdchn,'l') ; /* Check what happened, and clean up if necessary. Cleanup consists of scanning off whatever is left on the command line and echoing it. */ if (retval != cmdHALTERROR) { lex = dyio_scanstr(cmdchn,DY_LCQS,0,'\0','\n') ; if (!(lex->class == DY_LCNIL || lex->class == DY_LCEOF || lex->class == DY_LCERR)) dyio_outfmt(dy_logchn,cmdecho," %s",lex->string) ; if (lex->class == DY_LCERR) retval = cmdHALTERROR ; } return (retval) ; } static cmd_retval indcmd (ioid *cmdchn, bool *cmdecho, bool silent) /* This routine takes care of opening an indirect command file and doing the necessary bookkeeping to change command channels. The form of the command to open an indirect command file is '@ "filename"'. Parameters: cmdchn: (i) current i/o id for reading commands (o) new i/o id for reading commands cmdecho: (i) current echo state (o) new echo state silent: TRUE if echoing of commands & responses to ttyout should be suppressed, FALSE otherwise. Returns: TRUE if all goes well, FALSE otherwise */ { lex_struct *file ; const char *rtnnme = "indcmd" ; /* Get the file name. */ file = dyio_scanstr(*cmdchn,DY_LCQS,0,'"','"') ; if (file->class != DY_LCQS) { errmsg(236,rtnnme,"file name","parameter","@") ; return (cmdHALTERROR) ; } /* Stash the old command channel, then try to open the new file. */ cmdchns[level].chn = *cmdchn ; cmdchns[level].cecho = *cmdecho ; cmdchns[level].gecho = dy_gtxecho ; cmdchns[level].prompt = prompt ; (*cmdchn) = dyio_openfile(file->string,"r") ; if (*cmdchn < 0) { (*cmdchn) = cmdchns[level].chn ; return (cmdHALTERROR) ; } (void) dyio_setmode(*cmdchn,'l') ; /* Acknowledge that the file is successfully opened. */ dyio_outfmt(dy_logchn,*cmdecho," \"%s\"\n",file->string) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\tcommand source file now %s\n",file->string) ; /* Set level and echo control variables. dy_gtxecho stays the same, so no action for it. We have to check dy_cmdecho and prompt, in case the input has switched to ttyin. */ level++ ; if (dyio_ttyq(*cmdchn) == TRUE || silent == FALSE) prompt = TRUE ; else prompt = FALSE ; if (dyio_ttyq(*cmdchn) == FALSE && silent == FALSE) (*cmdecho) = TRUE ; else (*cmdecho) = FALSE ; return (cmdOK) ; } static cmd_retval dobuiltin (ioid *cmdchn, bool *cmdecho, lex_struct *txt, bool silent) /* This routine handles the built-in functions of the command interpreter. Not much, really -- disposal of empty lines and comments, opening indirect command files. Parameters: cmdchn: i/o id for reading commands cmdecho: current echo state for command processing txt: the first lexeme of the command line (a delimiter). silent: TRUE if echoing of commands & responses to ttyout should be suppressed, FALSE otherwise. Returns: the appropriate cmd_retval code. */ { lex_struct *lex ; cmd_retval retval ; const char *rtnnme = "dobuiltin" ; if (txt == NULL) { errmsg(2,rtnnme,"txt") ; return (cmdHALTERROR) ; } if (txt->class != DY_LCDEL) { errmsg(5,rtnnme,(int) txt->class) ; return (cmdHALTERROR) ; } /* Deal with empty lines, comments, and garbage. */ if (*txt->string == '\n') return cmdOK ; if (*txt->string == '!') { dyio_outchr(dy_logchn,*cmdecho,'!') ; lex = dyio_scanstr(*cmdchn,DY_LCQS,0,'\0','\n') ; if (lex->class != DY_LCNIL) { dyio_outfmt(dy_logchn,dy_gtxecho," %s",lex->string) ; } return (cmdOK) ; } if (*txt->string != '@') { errmsg(230,rtnnme,txt->string) ; return (cmdHALTERROR) ; } /* The various 'built-in' commands. For now, just opening an indirect command file. */ retval = indcmd(cmdchn,cmdecho,silent) ; return (retval) ; } cmd_retval dy_processcmds (ioid cmdchn, bool silent, lpopts_struct *lpopts, lptols_struct *lptols) /* This routine is a driver routine for processing a command file. dy_logchn must be valid before process_cmds is called. Parameters: cmdchn: i/o id for reading commands silent: TRUE if echoing of commands & responses to ttyout should be suppressed, FALSE otherwise. lpopts: Options structure; will be adjusted lptols: Tolerances structure; will be adjusted Returns: cmdOK if eof is reached and the nesting level is 0 cmdHALTNOERROR if the return code from a command execution specified terminate w/o error cmdHALTERROR otherwise */ { lex_struct *txt ; bool cmdecho ; cmd_retval retval ; const char *rtnnme = "process_cmds" ; /* Initialise to level 0 and begin the command interpretation loop. We need to generate a prompt if the command channel is the terminal, or if the user wants commands to be echoed. We want to echo commands if the command channel is not a terminal and the user wants commands to be echoed. We echo generated text if the user wants it. */ level = 0 ; txt = NULL ; retval = cmdOK ; if (dyio_ttyq(cmdchn) == TRUE || silent == FALSE) prompt = TRUE ; else prompt = FALSE ; if (dyio_ttyq(cmdchn) == FALSE && silent == FALSE) cmdecho = TRUE ; else cmdecho = FALSE ; dy_gtxecho = !silent ; /* Open the command interpretation loop. First action is to prompt for a command. Remember that a return value of cmdOK from a command execution is interpreted to mean carry on with command interpretation. */ while (retval == cmdOK) { dyio_outfmt(dy_logchn,prompt,"\n(%d)%% ",level) ; retval = cmdHALTERROR ; /* Read in the first lexeme of the response and act accordingly. With any luck, we'll have an id, which we pass along to docmd to process. A delimiter could be an empty line, comment, or builtin, and they're handled by dobuiltin. EOF means we've finished a command file. Attempt a close and continue at the next level up. If we're at level 0, return. All other possibilities are errors of one sort or another. */ txt = dyio_scanlex(cmdchn) ; switch (txt->class) { case DY_LCID: { retval = docmd(cmdchn,cmdecho,txt,lpopts,lptols) ; break ; } case DY_LCDEL: { retval = dobuiltin(&cmdchn,&cmdecho,txt,silent) ; break ; } case DY_LCEOF: { if (level == 0) { retval = cmdHALTNOERROR ; } else { if (dyio_closefile(cmdchn) == FALSE) dywarn(232,rtnnme,dyio_idtopath(cmdchn)) ; cmdchn = cmdchns[--level].chn ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\treturning to command source file %s\n", dyio_idtopath(cmdchn)) ; cmdecho = cmdchns[level].cecho ; dy_gtxecho = cmdchns[level].gecho ; retval = cmdOK ; } break ; } case DY_LCERR: { break ; } default: /* DY_LCNIL, DY_LCNUM, DY_LCFS, DY_LCQS */ { errmsg(230,rtnnme,(txt->string == NULL)?"<>":txt->string) ; break ; } } dyio_flushio(dy_logchn,cmdecho) ; } /* Command interpretation has been stopped. Fix up the return code and return. */ if (retval == cmdHALTERROR) errmsg(235,rtnnme) ; if (retval == cmdHALTNOERROR && txt->class == DY_LCEOF) retval = cmdOK ; return (retval) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_consys_scaling.c0000644000175200017520000004131411573762145017256 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains utility routines for scaling a constraint matrix A. There are routines to calculate scaling matrices using geometric mean and equilibration scaling. Let a = max{j} |a|, a = min{j s.t. a != 0} |a|. Geometric mean scaling scales a row (column) by dividing all coefficients by sqrt(a*a). The process iterates until the change in sqrt(a/a) for the matrix as a whole is less than the tolerance or exceeds the maximum allowable number of iterations. << Interestingly, in glpk the scaling is sqrt(a/a)! Clp uses a fixed iteration limit of 3, no tolerance on change from iteration to iteration. >> Equilibration scaling scales the row (column) by dividing all coefficients by a, so that the largest element in the row (column) is 1. The overall scaling algorithm is iterated geometric scaling followed by a final equilibration scaling. The result is a pair of scaling vectors R and S which can be treated as diagonal matrices to produce the scaled matrix scaled(A) = R*A*S. */ #define DYLP_INTERNAL #include "dylib_errs.h" #include "dylib_std.h" #include "dy_consys.h" #define CONSYS_SCALING_DEBUG 0 #if (CONSYS_SCALING_DEBUG > 0) extern ioid dy_logchn ; extern bool dy_gtxecho ; #endif static char sccsid[] UNUSED = "@(#)dy_consys_scaling.c 4.8 10/15/05" ; static char svnid[] UNUSED = "$Id: dy_consys_scaling.c 436 2011-06-08 21:06:45Z stefan $" ; bool consys_evalsys (consys_struct *consys, double *p_scm, int *p_gecnt) /* This routine evaluates the constraint system given as a parameter, determining the minimum and maximum coefficients and calculating an initial value for the geometric mean figure of merit. The maximum coefficient is defined as amax = max{i,j} |a|. The minimum coefficient is defined as amin = min{i,j, a != 0} |a|. The figure of merit is sqrt(amax/amin). Parameters: consys: constraint system to be evaluated scm: (o) sqrt(amax/amin) gecnt: (o) the number of >= inequalities in the constraint system Returns: TRUE if the evaluation concludes without error, FALSE otherwise. A FALSE return is possible only when we're paranoid. */ { int i,gecnt ; double amax,amin,aij ; double *rsc,*csc ; rowhdr_struct *rowi ; coeff_struct *coeffij ; # ifdef DYLP_PARANOIA char *rtnnme = "consys_evalsys" ; if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(2,rtnnme,"row header") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(2,rtnnme,"column header") ; return (FALSE) ; } if (consys->ctyp == NULL) { errmsg(101,rtnnme,consys->nme,"constraint type vector") ; return (FALSE) ; } if (p_scm == NULL) { errmsg(2,rtnnme,"scm") ; return (FALSE) ; } if (p_gecnt == NULL) { errmsg(2,rtnnme,"gecnt") ; return (FALSE) ; } # endif *p_scm = quiet_nan(0) ; *p_gecnt = -1 ; rsc = consys->rowscale ; csc = consys->colscale ; amax = 0.0 ; amin = consys->inf ; gecnt = 0 ; /* Open a loop and scan the rows of the constraint matrix. */ for (i = 1 ; i <= consys->concnt ; i++) { rowi = consys->mtx.rows[i] ; # ifdef DYLP_PARANOIA if (rowi == NULL) { errmsg(103,rtnnme,consys->nme,"row",i) ; return (FALSE) ; } if (rowi->ndx != i) { errmsg(126,rtnnme,consys->nme,"row",rowi,rowi->ndx,i,rowi) ; return (FALSE) ; } if ((rowi->coeffs == NULL && rowi->len != 0) || (rowi->coeffs != NULL && rowi->len == 0)) { errmsg(134,rtnnme,consys->nme,"row",rowi->nme,i,rowi->len, (rowi->coeffs == NULL)?"null":"non-null") ; return (FALSE) ; } # endif if (consys->ctyp[i] == contypGE) { gecnt++ ; } for (coeffij = rowi->coeffs ; coeffij != NULL ; coeffij = coeffij->rownxt) { # ifdef DYLP_PARANOIA if (coeffij->rowhdr != rowi) { errmsg(125,rtnnme,"rowhdr",coeffij,"row",rowi->nme,i) ; return (FALSE) ; } if (coeffij->colhdr == NULL) { errmsg(125,rtnnme,"colhdr",coeffij,"row",rowi->nme,i) ; return (FALSE) ; } if (coeffij->colhdr->ndx <= 0 || coeffij->colhdr->ndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",coeffij->colhdr->ndx,1, consys->varcnt) ; return (FALSE) ; } # endif aij = coeffij->val ; if (aij == 0.0) continue ; aij = fabs(aij) ; if (rsc != NULL) aij *= rsc[i] ; if (csc != NULL) aij *= csc[coeffij->colhdr->ndx] ; if (aij > amax) amax = aij ; if (aij < amin) amin = aij ; } } /* Record the results and return. Allow for 0x0 systems; they happen for (more or less) legitimate reasons. */ if (consys->concnt == 0) { *p_gecnt = 0 ; *p_scm = 1.0 ; consys->maxaij = 0 ; consys->minaij = 0 ; } else { *p_gecnt = gecnt ; *p_scm = sqrt(amax/amin) ; consys->maxaij = amax ; consys->minaij = amin ; } return (TRUE) ; } bool consys_geomscale (consys_struct *consys, double **p_rowscale, double **p_colscale) /* Given the constraint matrix A (consys), this routine will calculate diagonal scaling matrices R (rowscale) and S (colscale) using geometric mean scaling. The routine assumes it is scaling the matrix R*A*S, and the parameters rowscale and colscale are updated with new scaling coefficients. The constraint system is >> not << scaled. This routine is light on paranoia, on the assumption that the matrix has just been scanned with consys_evalsys, which is heavy on paranoia. Parameters: consys: constraint system p_rowscale: (i) initial row scaling coefficients; created if null (o) revised row scaling coefficients p_colscale: (i) initial column scaling coefficients; created if null (o) revised column scaling coefficients Returns: TRUE if no errors occurred while calculating the scaling coefficients, FALSE otherwise. */ { int i,j,iter ; double sqm,sqm_old,eps,aij,rcmax,rcmin,maxaij,minaij ; double *rowscale,*colscale ; coeff_struct *coeffij ; # if defined(DYLP_PARANOIA) || CONSYS_SCALING_DEBUG >= 1 || MALLOC_DEBUG == 2 char *rtnnme = "consys_geomscale" ; if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(2,rtnnme,"row header") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(2,rtnnme,"column header") ; return (FALSE) ; } if (p_rowscale == NULL) { errmsg(2,rtnnme,"&rowscale") ; return (FALSE) ; } if (p_colscale == NULL) { errmsg(2,rtnnme,"&colscale") ; return (FALSE) ; } # endif /* If the client didn't supply initial scaling matrices, create them now and initialise them to 1. */ if (*p_rowscale == NULL) { rowscale = (double *) MALLOC((consys->concnt+1)*sizeof(double)) ; rowscale[0] = 0 ; for (i = 1 ; i <= consys->concnt ; i++) rowscale[i] = 1.0 ; } else { rowscale = *p_rowscale ; } if (*p_colscale == NULL) { colscale = (double *) MALLOC((consys->varcnt+1)*sizeof(double)) ; colscale[0] = 0 ; for (j = 1 ; j <= consys->varcnt ; j++) colscale[j] = 1.0 ; } else { colscale = *p_colscale ; } sqm_old = sqrt(consys->maxaij/consys->minaij) ; eps = 1.0 ; /* Open up the outer loop to control the number of scaling iterations. For each scaling iteration, scale by row, then by column. */ for (iter = 1 ; iter <= 20 && eps > .05 ; iter++) { maxaij = 0.0 ; minaij = consys->inf ; for (i = 1 ; i <= consys->concnt ; i++) { coeffij = consys->mtx.rows[i]->coeffs ; if (coeffij == NULL) continue ; rcmax = 0.0 ; rcmin = consys->inf ; for ( ; coeffij != NULL ; coeffij = coeffij->rownxt) { aij = fabs(coeffij->val) ; if (aij == 0) continue ; j = coeffij->colhdr->ndx ; aij *= colscale[j] ; if (aij > rcmax) rcmax = aij ; if (aij < rcmin) rcmin = aij ; } rowscale[i] = 1/sqrt(rcmax*rcmin) ; if (rowscale[i]*rcmax > maxaij) maxaij = rowscale[i]*rcmax ; if (rowscale[i]*rcmin < minaij) minaij = rowscale[i]*rcmin ; } # if (CONSYS_SCALING_DEBUG >= 1) dyio_outfmt(dy_logchn,dy_gtxecho, "\n %s: iter %d: %g <= a <= %g, geom = %g", rtnnme,iter,minaij,maxaij,sqrt(maxaij/minaij)) ; # endif maxaij = 0.0 ; minaij = consys->inf ; for (j = 1 ; j <= consys->varcnt ; j++) { coeffij = consys->mtx.cols[j]->coeffs ; if (coeffij == NULL) continue ; rcmax = 0.0 ; rcmin = consys->inf ; for ( ; coeffij != NULL ; coeffij = coeffij->colnxt) { aij = fabs(coeffij->val) ; if (aij == 0) continue ; i = coeffij->rowhdr->ndx ; aij *= rowscale[i] ; if (aij > rcmax) rcmax = aij ; if (aij < rcmin) rcmin = aij ; } colscale[j] = 1/sqrt(rcmax*rcmin) ; if (colscale[j]*rcmax > maxaij) maxaij = colscale[j]*rcmax ; if (colscale[j]*rcmin < minaij) minaij = colscale[j]*rcmin ; } sqm = sqrt(maxaij/minaij) ; eps = (sqm_old-sqm)/sqm_old ; # if (CONSYS_SCALING_DEBUG >= 1) dyio_outfmt(dy_logchn,dy_gtxecho, "\n %s: iter %d: %g <= a <= %g, geom = %g, eps = %g", rtnnme,iter,minaij,maxaij,sqm,eps) ; # endif sqm_old = sqm ; } consys->maxaij = maxaij ; consys->minaij = minaij ; *p_rowscale = rowscale ; *p_colscale = colscale ; return (TRUE) ; } bool consys_equiscale (consys_struct *consys, double **p_rowscale, double **p_colscale) /* Given the constraint matrix A (consys), this routine will calculate diagonal scaling matrices R (rowscale) and S (colscale) using equilibration scaling. The routine assumes it is scaling the matrix R*A*S, and the parameters rowscale and colscale are updated with new scaling coefficients. The constraint system is >> not << scaled. This routine is light on paranoia, on the assumption that the matrix has just been scanned with consys_evalsys, which is heavy on paranoia. Parameters: consys: constraint system p_rowscale: (i) initial row scaling coefficients; created if null (o) revised row scaling coefficients p_colscale: (i) initial column scaling coefficients; created if null (o) revised column scaling coefficients Returns: TRUE if no errors occurred while calculating the scaling coefficients, FALSE otherwise. */ { int i,j ; double sqm,sqm_old,eps,aij,rcmax,rcmin,maxaij,minaij ; double *rowscale,*colscale ; coeff_struct *coeffij ; # if defined(DYLP_PARANOIA) || CONSYS_SCALING_DEBUG >= 1 || MALLOC_DEBUG == 2 char *rtnnme = "consys_equiscale" ; if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(2,rtnnme,"row header") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(2,rtnnme,"column header") ; return (FALSE) ; } if (p_rowscale == NULL) { errmsg(2,rtnnme,"&rowscale") ; return (FALSE) ; } if (p_colscale == NULL) { errmsg(2,rtnnme,"&colscale") ; return (FALSE) ; } # endif /* If the client didn't supply initial scaling matrices, create them now and initialise them to 1. */ if (*p_rowscale == NULL) { rowscale = (double *) MALLOC((consys->concnt+1)*sizeof(double)) ; rowscale[0] = 0 ; for (i = 1 ; i <= consys->concnt ; i++) rowscale[i] = 1.0 ; } else { rowscale = *p_rowscale ; } if (*p_colscale == NULL) { colscale = (double *) MALLOC((consys->varcnt+1)*sizeof(double)) ; colscale[0] = 0 ; for (j = 1 ; j <= consys->varcnt ; j++) colscale[j] = 1.0 ; } else { colscale = *p_colscale ; } sqm_old = sqrt(consys->maxaij/consys->minaij) ; eps = 1.0 ; /* Update the column scaling vector. */ maxaij = 0.0 ; minaij = consys->inf ; for (j = 1 ; j <= consys->varcnt ; j++) { coeffij = consys->mtx.cols[j]->coeffs ; if (coeffij == NULL) continue ; rcmax = 0.0 ; rcmin = consys->inf ; for ( ; coeffij != NULL ; coeffij = coeffij->colnxt) { aij = fabs(coeffij->val) ; if (aij == 0) continue ; i = coeffij->rowhdr->ndx ; aij *= rowscale[i] ; if (aij > rcmax) rcmax = aij ; if (aij < rcmin) rcmin = aij ; } colscale[j] = 1/rcmax ; if (colscale[j]*rcmax > maxaij) maxaij = colscale[j]*rcmax ; if (colscale[j]*rcmin < minaij) minaij = colscale[j]*rcmin ; } sqm = sqrt(maxaij/minaij) ; eps = (sqm_old-sqm)/sqm_old ; # if (CONSYS_SCALING_DEBUG >= 1) dyio_outfmt(dy_logchn,dy_gtxecho, "\n %s: %g <= a <= %g, geom = %g, eps = %g", rtnnme,minaij,maxaij,sqm,eps) ; # endif consys->maxaij = maxaij ; consys->minaij = minaij ; *p_rowscale = rowscale ; *p_colscale = colscale ; return (TRUE) ; } bool consys_applyscale (consys_struct *consys, bool convctyp, double *rowscale, double *colscale) /* This routine applies the scaling matrices rowscale and colscale to the constraint system in consys. In addition to the coefficient matrix, the scaling is applied to the objective, right-hand-side, and bounds, if they are attached. Note that constraint upper and lower bounds are NOT scaled. They should be recalculated. Note that dylp uses negative rowscale values to convert >= constraints to <= constraints. If this is occuring, convctyp should be TRUE for exactly one call. Arguably, this routine could be made more efficient in the case where we're scaling for the sole purpose of flipping >= constraints to <= constraints. Just scan rowscale and change constraint system values only for values that are -1.0. It's not clear that this case occurs often enough to be worth the trouble. Binary coefficient matrices, maybe. Parameters: consys: constraint system to be scaled convctyp: TRUE if the routine should scan rowscale for negative values and convert >= constraints to <= constraints; FALSE otherwise rowscale: row scaling matrix colscale: column scaling matrix (may be NULL under the special condition explained above) Returns: TRUE if the system is successfully scaled, FALSE otherwise. */ { int i,j ; double aij,maxaij,minaij ; coeff_struct *coeffij ; # ifdef DYLP_PARANOIA char *rtnnme = "consys_applyscale" ; if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(2,rtnnme,"row header") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(2,rtnnme,"column header") ; return (FALSE) ; } if (rowscale == NULL) { errmsg(2,rtnnme,"rowscale") ; return (FALSE) ; } if (colscale == NULL) { errmsg(2,rtnnme,"colscale") ; return (FALSE) ; } # endif /* Perform row scaling on the coefficient matrix and right-hand-side vectors. */ for (i = 1 ; i <= consys->concnt ; i++) { coeffij = consys->mtx.rows[i]->coeffs ; for ( ; coeffij != NULL ; coeffij = coeffij->rownxt) coeffij->val *= rowscale[i] ; } if (consys->rhs != NULL) { for (i = 1 ; i <= consys->concnt ; i++) consys->rhs[i] *= rowscale[i] ; } if (consys->rhslow != NULL) { for (i = 1 ; i <= consys->concnt ; i++) consys->rhslow[i] *= rowscale[i] ; } if (convctyp == TRUE && consys->ctyp != NULL) { for (i = 1 ; i <= consys->concnt ; i++) { if (rowscale[i] < 0) { # ifdef DYLP_PARANOIA if (consys->ctyp[i] != contypGE) { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } # endif consys->ctyp[i] = contypLE ; } } } /* Perform column scaling on the coefficient matrix, objective coefficients, and bounds. The bounds are scaled by 1/S so that the implicit coefficients remain 1.0. Finite infinity is a pain here: We have to test for it in bounds vectors and avoid scaling, because after scaling, it won't be infinity any more. */ maxaij = 0.0 ; minaij = consys->inf ; for (j = 1 ; j <= consys->varcnt ; j++) { coeffij = consys->mtx.cols[j]->coeffs ; for ( ; coeffij != NULL ; coeffij = coeffij->colnxt) { coeffij->val *= colscale[j] ; if (coeffij->val != 0.0) { aij = fabs(coeffij->val) ; if (aij < minaij) minaij = aij ; if (aij > maxaij) maxaij = aij ; } } } if (consys->obj != NULL) { for (j = 1 ; j <= consys->varcnt ; j++) consys->obj[j] *= colscale[j] ; } if (flgoff(consys->opts,CONSYS_FININF)) { if (consys->vlb != NULL) { for (j = 1 ; j <= consys->varcnt ; j++) consys->vlb[j] /= colscale[j] ; } if (consys->vub != NULL) { for (j = 1 ; j <= consys->varcnt ; j++) consys->vub[j] /= colscale[j] ; } } else { if (consys->vlb != NULL) { for (j = 1 ; j <= consys->varcnt ; j++) { if (consys->vlb[j] > -consys->inf) consys->vlb[j] /= colscale[j] ; } } if (consys->vub != NULL) { for (j = 1 ; j <= consys->varcnt ; j++) { if (consys->vub[j] < consys->inf) consys->vub[j] /= colscale[j] ; } } } consys->maxaij = maxaij ; consys->minaij = minaij ; return (TRUE) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_errmsgs.txt0000644000175200017520000010735711507440660016321 0ustar coincoin sccs: @(#)bonsaierrs.txt 4.3 11/06/04 svn/cvs: $Id: dy_errmsgs.txt 407 2010-12-31 20:48:48Z lou $ This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). I haven't yet gone through and removed messages specific to the bonsaiG MIP code. That'll happen eventually. General error messages, useful pretty much anywhere @1@internal confusion, line %d.@ @2@%s parameter is null.@ @3@%s parameter has invalid value '%c'.@ @4@%s parameter has invalid value "%s".@ @5@%s parameter has invalid value "%d".@ @6@%s parameter has invalid value "%#08x".@ @7@line %d: unrecognised %s %d.@ @8@line %d: unable to allocate %d bytes.@ @9@<>@ Error messages used primarily by the basic io routines in io(io) @10@open failed for file "%s", mode "%s".@ @11@close failed for file "%s".@ @12@i/o error while reading from "%s".@ @13@all available i/o streams are in use.@ @14@error log file is open but has no name.@ @15@stream %d is not active.@ @16@file "%s" is not opened for input.@ @17@file "%s" is not opened for output.@ @18@failed to change error log file from "%s" to "%s".@ @19:22@<>@ @23@could not obtain mark for file "%s".@ @24@could not position file "%s" to mark "%ld".@ @25@pattern "%s" is too long, truncating to %d characters.@ @26@lexeme beginning with "%s" is too long, truncating to %d characters.@ @27@fixed-length string of length %d beginning with "%s" prematurely truncated.@ @28@string quoted with "%c", "%c" beginning with "%s" prematurely truncated.@ @29@<>@ Error messages used primarily by the routines of io(bnfrdr) @30@storage offset %d is outside legal range 0 to %d for the current node.@ @31@node size %d is less than 0.@ @32@null bnf reference encountered for component %d, %d components expected.@ @33@null bnf definition in bnf reference.@ @34@a %s is inappropriate as a component in a %s.@ @35@invalid bnf reference type %d.@ @36@bnf reference does not reference a generator.@ @37@null component list encountered for alternative %d, %d alternatives expected.@ @38@bnf reference does not reference a non-primitive.@ @39@bnf reference does not reference a primitive.@ @40@saved text array index %d is outside legal range 0 to %d.@ @41@bnf reference does not reference a terminal.@ @42@terminal definition specifies invalid terminal type %d.@ @43@bnf must begin with a generator, non-primitive, or primitive.@ @44@<>@ @45@string "%s" cannot be converted to a number.@ @46@base %d is not implemented for %s.@ @47@bnf reference does not reference an immediate.@ @48@bnf reference does not reference a literal.@ @49@null text pointer in literal.@ @50@no primitive is active.@ @51@saved text array entry %d is null.@ @52@bnf reference does not reference a label definition.@ @53@null bnf specified for label %s in label definition.@ @54@name %s specified for label value in label definition is not a defined label.@ @55@code %d specified for label %s in label definition is not valid.@ @56@parse of bnf specified for label %s in label definition failed.@ @57@null string obtained for label %s in label definition.@ @58@null value obtained for label %s in label definition.@ @59@null bnf specified for %s in label reference.@ @60@parse of bnf specified for %s in label reference failed.@ @61@null string obtained for %s name in label reference.@ @62@null value obtained for socket in label reference.@ @63@the value to be stored must be defined in a forward label reference.@ @64@code %d specified for %s in label reference is not valid.@ @65@null value obtained for value in label reference.@ @66@the socket must be defined in a backward label reference.@ @67@separator is not a primitive or terminal.@ @68@reference requests storage but curnde is null.@ @69@link offset %d is outside legal range 0 to %d for the current node.@ @70@only generators, non-primitives, and primitives can be list components; type %d is invalid.@ @71@%s should normally be null at the completion of a parse.@ @72:89@<>@ Error messages related to packed vectors @90@inconsistent packed vector %s (%d): size %d, nonzero %d, coefficient array %sallocated.@ @91@vector %s (%d) requires space for %d entries; resize specifies %d.@ @92@vector %s (%d) has space for %d entries; %s %s (%d) has %d.@ @93@in vector %s, default index = %d, default value = %g.@ @94@in vector %s (%d), coeffs[%d].ndx = %d, coeffs[%d].val = %g.@ @95@vector %#08x has null name.@ @96:99@<>@ Error messages related to constraint system care and maintenance @100@[%s]: unable to attach "%s".@ @101@[%s]: %s is missing.@ @102@[%s]: %s index %d violates range %d..%d.@ @103@[%s]: missing header for %s %d.@ @104@[%s]: vec = %#08x not on attached vector list.@ @105@[%s]: unable to detach "%s".@ @106@[%s]: element size for vector %#08x is %d.@ @107@[%s]: duplicate %s attach request, vec = %#08x, pvec = %#08x.@ @108@[%s]: no reference list for attached %s %#08x.@ @109@[%s]: pvec = %#08x not on reference list for %s %#08x.@ @110@[%s]: empty reference at %#08x on reference list for %s %#08x.@ @111@[%s]: unable to update references to %s from %#08x to %#08x.@ @112@[%s]: %s failed for %s %s (%d).@ @113@[%s]: parts flags indicate %s is present, but associated pointer field is null.@ @114@[%s]: unrecognised %s vector type(s) %#08x.@ @115@[%s]: constraint system is flagged as corrupt.@ @116@[%s]: row %s (%d) claims %d coefficients but has %d.@ @117@<>@ @118@[%s]: %s %s (%d) has length 0.@ @119@[%s]: coefficient a<%d,%d> = %g appears in %s %d but not %s %d.@ @120@[%s]: unable to properly install %s for constraint %s (%d); required associated vectors are missing.@ @121@[%s]: unable to add logical variable for constraint %s (%d).@ @122@[%s]: could not retrieve %s %s (%d).@ @123@[%s] already has logical variables!@ @124@[%s]: could not expand to incorporate logical variables.@ @125@[%s]: null/incorrect %s in matrix coefficient %#08x, %s %s (%d).@ @126@[%s]: internal confusion; %s hdr = %#08x, hdr.ndx = %d, but mtx.hdr[%d] == %#08x.@ @127@[%s]: null vector pointer in header (%#08x) for attached vector type %s.@ @128@[%s]: coefficient a<%d,%d> = %g encountered while adding %s %s. Aborting due to invalid value.@ @129@[%s]: addition of %s (%d) gives %d %s; allocated capacity is only %d.@ @130@[%s]: infinitesimal a<%d,%d> = %.10g < %.10g suppressed while adding %s %s.@ @131@[%s]: logical variable count %d does not equal constraint count %d.@ @132@[%s]: multiplication of %s %s (%d) by 0.@ @133@[%s]: failed to set coefficient a<%d,%d> to %g.@ @134@[%s]: %s %s (%d) claims %d coefficients but has %s pointer.@ @135@[%s]: scaling failure.@ @136@[%s]: %s error while duplicating %s, src = %d, dst = %d.@ @137@[%s]: failed to duplicate constraint system.@ @138@[%s]: failed to evaluate constraint system for scaling.@ @139:149@<>@ Error messages used primarily by the MPS i/o package. @150@expecting the keyword "%s", instead found "%s".@ @151@mangled %s %s record.@ @152@could not create constraint system "%s".@ @153@null %s name while processing %s section.@ @154@[%s]: unrecognised constraint type code %d (%c) at constraint %s.@ @155@could not enter %s %s into hash table.@ @156@could not install %s %s.%s.@ @157@unexpected additional field "%s", %s %s.@ @158@row name or 'marker' missing in entry %s.%s.@ @159@marker keyword missing in entry %s.%s.@ @160@can't process %s section; %s vector is missing.@ @161@'%s' (%s) seen, but no '%s'!@ @162@couldn't locate %s "%s", entry %s %s.@ @163@unrecognised marker keyword "%s" at marker %s.@ @164@null coefficient, system %s, column %s, row %s.@ @165@cannot convert "%s" to number, system %s, column %s, row %s.@ @166@couldn't locate %s "%s", %s %s.%s.@ @167@unrecognised bound type code "%s" for variable %s (%d).@ @168@i/o error while attempting %s section.@ @169@unexpected eof while attempting %s section.@ @170@cannot process mps input file "%s"; aborting.@ @171@constructed constraints (Dx code) are not accepted; define constraint %s explicitly.@ @172@discarding non-binding constraint %s.%s.@ @173@[%s]: attempt to multiply objective %s (%d) by -1 for maximisation failed.@ @174@vector resize failed while collecting coefficients for column %s.%s.@ @175@non-binding constraint %s (%d) should not have a rhs range.@ @176@constraint %s (%d) is supposedly a Type 3 SOS constraint, but it has type %s instead of equality.@ @177@[%s]: did not find objective function "%s". @178@[%s]: %s %s (%d) has invalid type %s.@ @179@[%s]: deleting empty constraint %s (%d).@ @180:199@<>@ Error messages from the main program @200@cannot get system time.@ @201@could not open log file %s; logging disabled.@ @202@[%s]: could not create search tree root.@ @203@could not initialise the arc consistency package.@ @204@[%s]: constraint propagation for %s failed, T%d:#%d.@ @205@[%s]: failed to create branch-and-bound search tree root.@ @206@[%s]: failed %s at T%d from subproblem %d\@%d.@ @207@[%s]: failed to process subproblems after tour %d.@ @208@[%s]: failed to ready new active subproblem following tour %d.@ @209@[%s]: failed to regenerate incumbent T%d:#%d\@%d.@ @210@(T%d:#%d\@%d): coefficient reduction failed for %s.@ @211@could not %s %s signal handler.@ @212@(T%d:#%d\@%d): purging %s constraints failed for %s.@ @213:229@<>@ Error messages from the command interpreter @230@unexpected command text "%s".@ @231@<>@ @232@indirect command file "%s" did not close properly.@ @233@ambiguous command keyword "%s".@ @234@unknown command keyword "%s".@ @235@unrecoverable error; command interpretation aborted.@ @236@failed to scan %s %s, %s command.@ @237:239@<>@ @240@parser error while attempting bnf %s.@ @241@enforcing %d <= "%s" <= %d; %d forced to %d.@ @242@ignoring invalid value %g for "%s".@ @243@"%s" defaulted to %d.@ @244@enforcing %.2f <= "%s" <= %.2f; %.2f forced to %.2f.@ @245@"%s" defaulted to %.8g.@ @246@"%s" defaulted to "%s".@ @247:299@<>@ Error messages from the LP code @300@nonsense status %#08x for variable %s (%d).@ @301@found only %d of the %d basic variables required to form a basis for constraint system %s.@ @302@[%s]: (%s)%d: could not %s an initial basis.@ @303@[%s]: in basis pos'n %d, variable index violates %d <= %d <= %d.@ @304@[%s]: (%s)%d: error while testing primal/dual feasibility.@ @305@@[%s]: (%s)%d: could not %s %s variables for inclusion in initial basis.@ @306@[%s]: (%s)%d: error attempting to correct LP data structures after patch of singular basis.@ @307@[%s]: (%s)%d: aborting attempt to factor basis due to numerical instability. Pivot parameters at %s.@ @308@[%s]: (%s)%d: aborting attempt to factor basis, return code %s.@ @309@[%s]: could not factor basis.@ @310@error calculating orientation of constraint %s (%d) to objective.@ @311@[%s] has no logical variables.@ @312@[%s]: (%s)%d: could not sort constraints before forming active system.@ @313@[%s]: (%s)%d: unable to load active system from %s.@ @314@HUGE_VAL = %g, not IEEE infinity. If you really want to use IEEE infinity, consider FIX_HUGE_VAL in vector.h, and confirm that your environment supports the IEEE FP standard.@ @315@variable %s (%d) is non-basic with status %s but has an absolute value of infinity.@ @316@[%s]: could not calculate value of primal basic variables.@ @317@[%s]: antidegeneracy algorithm active at level %d on entry to primal phase 1.@ @318@[%s]: (%s)%d: could not %s phase I objective function.@ @319@[%s] is already feasible; phase I should not have happened.@ @320@[%s]: (%s)%d: could not calculate dot(%s,a<%d>) for %s.@ @321@[%s]: (%s)%d: %s %s[%d] = %g, should be %g; |diff| = %g, tol = %g.@ @322@[%s]: (%s)%d: %s (%d), status %s, violates lb = %g < %g < %g = ub; err = %g; tol = %g.@ @323@[%s]: (%s)%d: unexpected loss of primal feasibility --- %s (%d), status %s, violates lb = %g <= %g <= %g = ub err = %g; tol = %g.@ @324@[%s]: (%s)%d: apparent unboundedness.@ @325@[%s]: (%s)%d: variable %s (%d) = %g, lb = %g, ub = %g, status %s. Nonbasic variables should be within bounds.@ @326@[%s]: (%s)%d: variable %s (%d) = %g = %s, status %s. This variable should not have been chosen to enter at %s.@ @327@[%s]: attempted to form restricted subproblem but found no candidates.@ @328@[%s]: limit of %d total pivots exceeded.@ @329@[%s]: (%s)%d: variable %s (%d) on pivot reject list pos'n %d has status %s; should be %s with nopivot qualifier. @330@[%s]: (%s)%d: variable %s (%d) has status %s, var2basis gives pos'n %d, but basis pos'n holds index %d.@ @331@[%s]: (%s)%d: variable %s (%d) = %g has status %s, but lb = %g != %g = ub; err = %g, tol = %g.@ @332@[%s](%s)%d: %s (%d), status %s, x = %g != x = %g, |x - x| = %g, tol = %g.@ @333@[%s]: (%s)%d: variable %s (%d) has status %s but x = %g != %g = %s; err = %g; tol = %g.@ @334@[%s]: (%s)%d: variable %s (%d) has lb = %g, ub = %g, but status %s; it should not be free with a finite bound.@ @335@[%s]: (%s)%d: variable %s (%d) has status %s but is within bounds, lb = %g <= %g <= %g = ub; err = %g; tol = %g.@ @336@[%s]: (%s)%d: for %s (%d) %s, %s -y = %g != %g = cbar, diff = %g, tol = %g.@ @337@[%s]: could not expand pivot reject list capacity from %d entries to %d entries.@ @338@[%s]: loss of %s feasibility should not be reported in primal phase I.@ @339@[%s]: (%s)%d: cycling suspected; %d pivots with no change in objective.@ @340@[%s]: could not construct reduced right-hand-side (b - Nx). @341@[%s]: (%s)%d: %s accuracy check failed; 1+norm(%c) = %g; residual %g, tolerance %g.@ @342@[%s]: %s (%d) was in degenerate set, but restored value %g is not at lb = %g or ub = %g; %s %g, tolerance %g.@ @343@[%s]: fatal error at pivot %d.@ @344@[%s]: %s (%d) will overshoot feasibility from %s at pivot %d; val = %g, lb = %g, ub = %g, delta = %g.@ @345@[%s]: attempt to change value of fixed variable %s (%d) = %g at pivot %d; delta = %g.@ @346@[%s]: (%s)%d: status %s for %s (%d) is not legal in this phase.@ @347@[%s]: (%s)%d: unexpected loss of dual feasibility --- %s (%d) status %s, cbar<%d> = %g has the wrong sign, tol = %g.@ @348@@[%s]: (%s)%d: failed to price entering variable %s (%d).@ @349@[%s]: variable %s (%d) = %g, status %s, is within bounds lb = %g, ub = %g; it should not have been chosen to leave.@ @350@[%s]: (%s)%d: predicted %s infeasibility = %g from iter %d does not match starting infeasibility = %g; err = %g.@ @351@[%s]: (%s)%d: constraint system is %d x %d.@ @352@<>@ @353@[%s]: %s simplex returned %s; aborting.@ @354@<>@ @355@[%s]: entering variable %s (%d) has status %s; dual simplex is only prepared for non-basic at upper/lower bound.@ @356@[%s]: %s cross-reference failure. original[%d] = %d but active[%d] = %d.@ @357@[%s]: status of leaving variable %s (%d) is %s, %s = %g, val = %g, err = %g, tol = %g; should be nonbasic at upper/lower bound or fixed.@ @358@[%s]: delta is 0 for dual pivot on %s (%d); lb = %g; x = %g ; ub = %g ; abar = %g.@ @359@[%s]: %s (%d) has status %s in final answer.@ @360@[%s]: variable cross-reference failure. active[%d] = %d; entries for logicals should be 0.@ @361@[%s]: %s count of %d disagrees with %d entries coded as active in cross reference vector.@ @362@[%s]: could not locate coefficient for active %s (%d) in constraint %s (%d).@ @363@<>@ @364@[%s]: constraint %s (%d) should have %d coefficients for active architectural variables, but has %d.@ @365@[%s]: can't find coefficient for logical %s (%d) in constraint %s (%d).@ @366@[%s]: rhs<%d> = %g for constraint %s should be %g; error %g; tol. %g; original rhs<%d> for %s is %g, correction %g.@ @367@[%s]: %s %s (%d) = %g != %g = %s %s (%d) diff = %g, tol = %g.@ @368@<>@ @369@[%s]: %s %s (%d) should be active but isn't; orig%s[%d] = %d.@ @370@[%s]: expected original constraint %s (%d) in basis pos'n %d, but found %s (%d).@ @371@[%s]: (%s)%d: %s failed.@ @372@[%s]: (%s)%d: %s (%d) has status %s, requires major correction to %s; lb = %g, x = %g, ub = %g, x - %s = %g, tol. = %g.@ @373@[%s]: inconsistent basis status after refactorisation.@ @374@[%s]: (%s)%d: forcing refactor (bogus number); |%s<%d>| = |%g| < bogus tol %g by %g.@ @375@[%s]: (%s)%d: forcing refactor (bogus number); |%s<%d>-%s<%d>| = |%g-%g| = %g < bogus tol %g by %g.@ @376@[%s]: (%s)%d: temporarily lowering pivot tolerance from %g to %g.@ @377@<>@ @378@<>@ @379@[%s]: (%s)%d: %s (%d) has lb = %g = ub, status %s; status should be one of BFX, NBFX, BLLB, or BUUB.@ @380@[%s]: %s (%d) has status %s, should be %s.@ @381@[%s]: (%s)%d: forcing refactor on suspicion of numerical error; |%s<%d,%d>| = |%g| < bogosity tolerance %g by %g.@ @382@[%s]: (%s)%d: variable %s (%d) to leave at %s = %g; this should not be!@ @383@[%s]: (%s)%d: pivot multiplier would be below limit %g. Declaring %s.@ @384@[%s]: (%s)%d: could not calculate reduced costs.@ @385@[%s]: (%s)%d: pivot abar<%d,%d> = %g; should be %g, error %g (%g%%), tol %g.@ @386@[%s]: (%s)%d: no %s variable selected at start of pivot loop.@ @387@[%s]: (%s)%d: %d false terminations; retry limit exceeded; aborting.@ @388@[%s]: (%s)%d: %s<%d> update error; update = %g; calc = %g; |error| = %g; tol = %g.@ @389@[%s]: (%s)%d: %s (%d) feasible %s but c<%d> = %g; should be 0.@ @390@[%s]: (%s)%d: degenset[%d] = %d for %s (%d), %s, but antidegeneracy level is only %d. @391@[%s]: (%s)%d: failed to clear superbasics prior to return to phase I.@ @392@[%s]: (%s)%d: could not calculate beta<%d> or abar<%d> for dual pivot; leaving variable %s (%d).@ @393@<>@ @394@[%s]: (%s)%d: inconsistency in rho<%d> for pivot row; inv(B)beta<%d> = %g, ||beta<%d>||^2 = %g, err = %g, tol = %g.@ @395@[%s]: previous return code %s; cannot hot start.@ @396@[%s]: client %#08x does not own solver; current owner %#08x; cannot %s.@ @397@<>@ @398@[%s]: basic <-> nonbasic conversion illegal on hot start; attempt to convert %s (%d) from %s to %s.@ @399@[%s]: (%s)%d: phase %s objective already installed?@ @400@[%s]: (%s)%d: type %d evaluation routine failed for %s (%d).@ @401@[%s]: (%s)%d: %g = dot(eta<%d>,a<%d>) != abar<%d,%d> = %g; err = %g, tol = %g.@ @402@[%s]: (%s)%d: logical %s (%d) has %d coefficients; it should have exactly one.@ @403@duplicate %s requested, but source not supplied.@ @404@requested destination %s size of %d is less than source size of %d; boosting to match. @ @405@[%s]: (%s)%d: updated objective differs from calculated objective; z = %g, z = %g, diff = %g, tol = %g.@ @406@[%s]: initialization/scaling of constraint system failed.@ @407:425@<>@ @426@[%s]: logical %s (%d) for %s constraint %s (%d) has improper %s bound %g.@ @427:429@<>@ @430@[%s]: (%s)%d: unable to %s %s %s (%d).@ @431@[%s]: (%s)%d: %s %s (%d) is already active as %s (%d).@ @432@[%s]: (%s)%d: could not prep column %s (%d) for activation.@ @433@[%s]: (%s)%d: %s variable %s (%d) has status %s; expected NBLB, NBUB, NBFX, or NBFR.@ @434@[%s]: (%s)%d: %s scan for %s failed.@ @435@[%s]: (%s)%d: unexpected situation; %d %s activated, previous simplex %s returned %s, next simplex %s.@ @436@[%s]: (%s)%d: logical for constraint %s (%d) has status %s; expected BUUB, BLLB, B, BUB, BLB, BFR, or BFX.@ @437@[%s]: (%s)%d: logical for constraint %s (%d) has status %s; expected NBLB, NBUB, or NBFX.@ @438@[%s]: (%s)%d: variable %s (%d) has status %s; expected BLLB or BUUB.@ @439@[%s]: (%s)%d: unexpected %s of %s feasibility.@ @440@[%s]: (%s)%d: failed to activate variables referenced by activated constraints.@ @441@[%s]: (%s)%d: unexpected situation; previous simplex %s returned %s.@ @442@[%s]: (%s)%d: logical for newly activated constraint %s (%d) has status %s but constraint should be %s.@ @443@[%s]: (%s)%d: failed to solve lp relaxation, return code %s.@ @444@[%s]: (%s)%d: %s invariant failure; should be zero. ((orig %d)-(ineligible %d))-((eligible %d)+(active %d)) = %d.@ @445@[%s]: (%s)%d: %s %s (%d) marked as ineligible for activation.@ @446@[%s]: (%s)%d: %d %s recorded as %s but count is %d.@ @447:449@<>@ Error messages from the arc consistency package. @450@[%s]: coefficient a<%d,%d> = a<%s,%s>= 0.@ @451@[%s]: could not calculate bounds for constraint %s (%d).@ @452@[%s]: failed to push constraint %s (%d).@ @453@[%s]: constraint %s (%d) has type %s; only equality, less-than-or-equal, or range constraints should be present.@ @454@[%s]: the bound change of %g%% for %s %s (%d) is less than the propagation tolerance %g; not propagated.@ @455@unable to expand propagation stack from %d to %d entries.@ @456@internal confusion; on_propstack indicates %s (%d) is on stack, but search for index failed.@ @457@[%s]: constraint %s has %s = %s; cannot propagate from an infinite bound.@ @458@[%s]: new %s for %s (%d) = %g weaker or equal to old bound %g; diff %g.@ @459@[%s]: could not propagate %s change for %s (%d).@ @460@<>@ @461@invalid constraint type code %d, constraint %s (%d).@ @462@constraint propagation failed for constraint %s (%d).@ @463@[%s]: unexpected constraint type %s.@ @464@[%s]: infinity count error at recalculation; old %s, new %s.@ @465@[%s]: significant error in finite part of bound at recalculation; old %s, new %s, diff %g.@ @466@[%s]: both bounds are infinite for %s constraint %s (%d); cannot propagate from infinite bounds.@ @467@constraint propagation is disabled; this call should not happen.@ @468@snap tolerance %g is smaller than dylp bogus number tolerance %g.@ @469:509@<>@ Error messages from the 2-3 tree package. @510@in the %s tree, %s (%#08x) thinks its children are of type %s; they should be %s.@ @511@%s problem at %s tree %s (%#08x); count is %d, reality is %d.@ @512@purported parent (%#08x) of %s (%#08x) in %s tree has disowned it.@ @513@%s %d (%#08x, max %g) and %d (%#08x, max %g) of a %s (%#08x) in the %s tree are out of order.@ @514@%s (%#08x) in the %s tree has no parent, but the header thinks (%#08x) is the root.@ @515@error while freeing vertices of tree %s.@ @516@unrecognised two-three vertex type %d at the root of the %s tree.@ @517@failed to install leaf for content (%#08x), key %g, in %s tree.@ @518@in the %s tree, max at %s (%#08x) is %g, but the largest max among %s is %g for %s (%#08x).@ @519@leaf (%#08x) in the %s tree has no content.@ @520@%s count of %d at %s (%#08x) in %s tree is outside the valid range of %d to %d.@ @521@attempting rebalance of a %s (%#08x) in %s tree and no rebalance pattern matched.@ @522@failed to find a leaf with value %g in %s tree.@ @523@inconsistent header for tree %s; root type %s, root %#08x, %d vertices, %d leaves. @524@tree %s has no associated tree.@ @525@tree %s has associated tree %s, but no associated node was present for the deleted leaf.@ @526@attempt to delete %sleaf %#08x from tree %s failed.@ @527@attempt to delete leaf with key %g from tree %s failed. @527:531@<>@ @532@the header in the %s tree claims (%#08x) is the root, but (%#08x) says its parent is (%#08x).@ @533@%s (%#08x) in the %s tree claims %s (%#08x) as its child, but the %s claims its parent is (%#08x).@ @534@unequal number of leaves in paired trees; %s tree has %d != %d in %s tree.@ @535@<>@ @536@<>@ @537@<>@ @538@failed to rebalance the %s tree.@ @539@attempt to delete leaf with key = %g from tree %s, but the tree bounds are %g < bound < %g.@ @540@<>@ @541@<>@ @542@failed to find leaf (%#08x) in %s tree.@ @543@<>@ @544@%s tree is empty.@ @545@%s tree is empty, but %s field is %g, not %g.@ @546@<>@ @547@content field recovered from deleted node is null.@ @548@<>@ @549@in the %s tree, the leaf (%#08x) in the %s position has value %g, but the header value is %g.@ @550@in the %s tree, the header specifies leaf (%#08x) as the minimum leaf, but actually it's (%#08x).@ @551:600@<>@ Error messages from the branch-and-bound tree routines. @600@(T%d:#%d\@%d): cannot create this node in the branch-and-bound search tree.@ @601@(T%d:#%d\@%d): improper status %s; should be %s.@ @602@(T%d:#%d\@%d): killing this node will leave orphans; it's not right.@ @603@(T%d): node #%d\@%d (%#08x) is an orphan; proceeding with deletion anyway.@ @604@(T%d): could not delete node #%d\@%d (%#08x) from the branch-and-bound search tree.@ @605@(T%d): attempt to delete %s node from live set failed.@ @606@analysis of objective function failed.@ @607@<>@ @608@(T%d:#%d\@%d): integrated variable forcing loop failed.@ @609@(T%d:#%d\@%d): status is %s but there are no kids.@ @610@(T%d:#%d\@%d): invalid branch specification; branch cnt = %d, branch_vars is %snull.@ @611@<>@ @612@(T%d:#%d\@%d): unable to restore %s %s.@ @613@(T%d:#%d\@%d): failed to solve lp relaxation, return code %s.@ @614@(T%d:#%d\@%d): unexpected branch instruction %s = %s.@ @615@<>@ @616@(T%d:#%d\@%d): failed to generate %s edits.@ @617@(T%d:#%d\@%d): couldn't insert subproblem in live set.@ @618@(T%d:#%d\@%d): couldn't regenerate environment of survivor of tour.@ @619@(T%d): couldn't recover subproblem from live set.@ @620@(T%d:#%d\@%d): couldn't resurrect subproblem.@ @621@(T%d:#%d\@%d): error while installing %s edits.@ @622@(T%d:#%d\@%d): failed resurrection attempt.@ @623@(T%d): unable to prune subtree rooted at node #%d\@%d.@ @624@(T%d:#%d\@%d): node has %s copy but not %s copy; if one is present, both must be present.@ @625@(T%d): not prepared to deal with full status or bounds copies at interior node #%d\@%d.@ @626@(T%d): searched to the root without finding stored basis & bounds copies.@ @627@(T%d): search tree node #%d\@%d (%#08x) has no parent.@ @628@(T%d): search tree node #%d\@%d has no liveinfo structure.@ @629@(T%d): leaf delete (%#08x) failed for node #%d\@%d.@ @630@(T%d:#%d\@%d): inconsistency between ivf_fixed and status array; ivf_fixed says %s (%d) fixed at %g, status is %s.@ @631@(T%d:#%d\@%d): no active variable structure to manipulate!@ @632@(T%d:#%d\@%d): inconsistent new constraint structures: count is %d but array is %snull.@ @633@(T%d:#%d\@%d): failed to delete new constraint structures.@ @634:649@<>@ Error messages from the bound storage/regeneration utilities. @650@[%s]: %s<%s (%d)> = %g has IEEE FP class %s (%d).@ @651@[%s]: %s<%s (%d)> = %g is inside the zero tolerance %g.@ @652@[%s]: %s.bnd = %g has IEEE FP class %s (%d).@ @653@[%s]: %s.bnd = %g is inside the zero tolerance %g.@ @654@[%s]: %s.inf = %d is 1, < -%d, or > %d; invalid value.@ @655@[%s]: currently there are %d %s, but the stored bounds arrays have length %d.@ @656@the %s array is null in the bounds copy specified by key %d at T%d:#%d@%d.@ @657@invalid magic cookie at T%d:#%d@%d.@ @658@(T%d:#%d\@%d): bound edit (%#08x) for %s (%d) has no valid edits.@ @659@infeasible %s bound edit for %s (%d) at T%d:#%d\@%d; rewriting is not in progress; edit forced to feasibility.@ @660@ignored weak %s bound edit for %s (%d) at T%d:#%d\@%d; rewriting is not in progress; edit strengthened.@ @661@could not install bound edit %d (%#08x) for %s (%d) at T%d:#%d\@%d.@ @662@(T%d:#%d\@%d): cannot store a copy of the %s arrays.@ @663@cannot delete stored copy of %s at T%d:#%d\@%d.@ @664@(T%d:#%d\@%d): bounds rewriting is forced but not allowed.@ @665@(T%d:#%d\@%d): %s of %s edit information failed.@ @666@(T%d:#%d\@%d): %s %s (%d) should not have a %s but %s is present.@ @667@<>@ @668@(T%d:#%d\@%d): invalid edit counts (%d/%d) in bound edit structure.@ @669:674@<>@ Error messages from the basis storage/regeneration utilities. @675@no %s in stored basis copy.@ @676@[%s]: stored %s array length %d violates allowable range %d..%d.@ @677@(T%d:#%d\@%d:) %s %s edit information absent.@ @678@(T%d:#%d\@%d:) %s %s edit information already present.@ @679@[%s]: variable %s (%d) has status %s; explicit basic status should not be seen outside dylp.@ @680@inconsistent %s edit structure: edit count is %d but array is %snull.@ @681@[%s]: new %s size in edit structure violates allowable range %d <= %d <= %d.@ @682:699@<>@ Error messages related to tours, integrated variable forcing & fixing @700@[%s]: %s could not install fixed variables at T%d:#%d\@%d.@ @701@(T%d:#%d\@%d): the monotone variable count is %d, but the monotone variable list is %snull.@ @702@(T%d:#%d\@%d): request to fix variable %s (%d) = %d but it is already fixed at %g.@ @703@(T%d:#%d\@%d): request to fix variable %s (%d) but lb = %g != %g = ub.@ @704@<>@ @705@request to fix variable %s (%d) = %g at node T%d:#%d\@%d; this value is not integral (frac = %g).@ @706@(T%d:#%d\@%d): lp return code is %s; expecting %s.@ @707@(T%d:#%d\@%d): error while processing %s instructions.@ @708@(T%d:#%d\@%d): unexpected action code %s in %s entry for %s (%d).@ @709@(T%d:#%d\@%d): %s (%d) is to be fixed at %g, but this is not equal to lb = %g or ub = %g.@ @710@<>@ @711@(T%d:#%d\@%d): no new incumbent this tour but branch is %s; branch instruction %s = %s current bounds lb = %g, ub = %g.@ @712@(T%d:#%d\@%d): failed to process branch instruction %s = %s." @713@(T%d:#%d\@%d): %s constraint not suitable for %s branch.@ @714@(T%d:#%d\@%d): branch is %s; branch instruction %s = %s current bounds LB = %g, UB = %g.@ @715@(T%d:#%d\@%d): parent's estimate of lb = %g is greater than actual optimum for child's lp relaxation z = %g; error = %g, tol = %g.@ @716@(T%d:#%d\@%d): could not remove cuts.@ @717:724@<>@ Error messages related to fathoming and penalties @725@subproblem T%d:#%d fathomed on %s; it should have evaluated as infeasible because of the objective constraint.@ @726@cannot perform penalty calculations at T%d:#%d\@%d.@ @727@error evaluating new integer solution at T%d:#%d\@%d.@ @728@<>@ @729@the solution at subproblem T%d:#%d\@%d is not labelled integer.@ @730@the incumbent T%d:#%d\@%d has no stored %s array.@ @731@error while winnowing the set of live subproblems; bound %g.@ @732@[%s](T%d:#%d\@%d): error while attempting fathoming.@ @733@[%s](T%d:#%d\@%d): initial lp relaxation fathomed by bound.@ @734@[%s](T%d:#%d\@%d): cannot calculate reduced costs.@ @735@[%s](T%d:#%d\@%d): cannot calculate penalties for %s (%d).@ @736@[%s]: %s<%d,%d> = %g < 0. This should not be.@ @737@[%s]: don't know how to calculate penalty for inactive architectural variable %s (%d).@ @738@[%s]: cbar<%d> = %g for %s %s (%d); inside dual feasibility tolerance %g by %g.@ @739@[%s]: %s variable %s (%d) has status %s but cbarj = %g; incorrect sign.@ @740@[%s]: failed to calculate unscaled %s %s<%d>.@ @741@[%s]: alternate calculations of abar<%d,%d> disagree. beta*a = %g, (inv(B)a)<%d> = %g, diff = %g, tol = %g.@ @742@[%s]: alternate calculations of beta<%d,%d> disagree. beta = %g, (inv(B)e) = %g, diff = %g, tol = %g.@ @743@[%s]: dot(beta<%d>,a<%d>) should be %g, instead %g, diff = %g, tol = %g.@ @744:749@<>@ Error messages related to branching priority and tour groups (bonsai MIP code only) @750@(T%d): invalid priority %d recovered for %s (%d).@ @751@(T%d:#%d\@%d): %d variable(s) remain to be forced; tour leader selection is premature.@ @752@(T%d:#%d\@%d): code %d does not specify a valid tour leader selection strategy.@ @753@(T%d:#%d\@%d): failed to select tour leader(s).@ @754@(T%d:#%d\@%d): liveinfo structure already exists.@ @755@empty priority specification.@ @756@priority class %d has no members.@ @757@null entry in member list for class %d.@ @758@all integer variables defaulted to a single branching priority class.@ @759@(T%d): %s (%d) is type %s; only integral variables have a branching priority.@ @760@tour group #%d has only one member.@ @761@initial processing of tour specifications failed.@ @762@in tour #%d the station vector being processed has general integer form; bonsai is not yet ready for this.@ @763@empty tourclass specification.@ @764@tour specification #%d has no %s.@ @765@null entry (position %d) in %s list for tour specification #%d.@ @766@cannot hash variable name %s to index in tour specification #%d.@ @767@duplicate entry for variable %s (%d); it seems to be in tour groups #%d and #%d.@ @768@failed to generate %s station(s) for tour specification #%d.@ @769@tour specification #%d has %d members, but the station vector being processed has only %d digits.@ @770@tour group size in specification %d violates legal range %d <= %d <= %d.@ @771@duplicate %s in stations for tour specification #%d; ignored.@ @772@stations #%d and #%d in tour specification #%d are identical.@ @773@%s (%d) is type %s; only binary variables may appear with a %s station specification.@ @774@(T%d): %s (%d) is type %s; only integral variables can be members of a tour group.@ @775:799@<>@ Error messages related to expansion of the active subproblem. (bonsai MIP code only) @800@(T%d:#%d\@%d): missing liveinfo or var1/var2 structures.@ @801@(T%d:#%d\@%d): this node is already a parent.@ @802@<>@ @803@(T%d:#%d\@%d): the tour %s %s (%d) has status %s; it should be %s.@ @804@(T%d:#%d\@%d): variable %s (%d) is not the tour leader; bonsai is not prepared to cope with a relative station specification for other tour group members.@ @805@(T%d:#%d\@%d): unrecognized change instruction %#08x at pos'n %d for variable %s (%d).@ @806@(T%d:#%d\@%d): cannot finalise the tour itinerary.@ @807@(T%d:#%d\@%d): error while processing tour stations.@ @808@(T%d:#%d\@%d): could not create child at station %s.@ @809@(T%d:#%d\@%d): all branch variable changes were looser than current bounds, hence all subproblems were suppressed. Are you sure the tour specification is correct?@ @810@(T%d:#%d\@%d): rhs ub = %g < %g = lb for %s constraint %s (%d).@ @811@(T%d:#%d\@%d): unable to verify or replace tour leader.@ @812@(T%d:#%d\@%d): failed to regenerate lp relaxation for tour parent.@ @813@(T%d:#%d\@%d): failed to generate tour environment data structures.@ @814:849@<>@ Error messages related to constraint analysis, box bounds, branch-on-hyperplane, and max-min-slack. @850@[%s]: %s (%d) mismatch in variable/coefficient classification; row count %d, classified %d vars, %d coefficients.@ @851@[%s]: constraint classification failed.@ @852@(T%d:#%d\@%d): unable to calculate box bounds.@ @853@[%s]: unable to calculate off constraint bounds.@ @854@(T%d:#%d\@%d): error while scanning for BOH Type 1 candidate.@ @855@(T%d:#%d\@%d): error while attempting quick & dirty max-min-slack.@ @856@(T%d:#%d\@%d): max-min-slack lp failed, status %s.@ @857@(T%d:#%d\@%d): could not create expanded x vector.@ @858@(T%d:#%d\@%d): no valid hyperplanes after %s hyperplane pattern expansion.@ @859@(T%d:#%d\@%d): could not complete %s for max-min-slack lp.@ @860@(T%d:#%d\@%d): error while attempting scan to center.@ @861@(T%d:#%d\@%d): expected to convert %d %s, but actually converted %d.@ @862@(T%d:#%d\@%d): failed to install %s for %g <= %s (%d) <= %g.@ @863@[%s]: right-hand-side reduction failed.@ @864@<>@ @865@(T%d:#%d\@%d): can't install new incumbent (rounding).@ @866@(T%d:#%d\@%d): failed to solve lp relaxation of heuristic solution.@ @867@(T%d:#%d\@%d): failed to manufacture branching hyperplane from %s (%d).@ @868@(T%d:#%d\@%d): coefficient reduction cannot be performed on %s constraint %s (%d).@ @869@(T%d:#%d\@%d): coefficient reduction failed for %s (%d).@ @870@[%s]: integral equality %s (%d) has real rhs = %g! Check your model and try again.@ @871:899@<>@ Error messages generated by cutting plane management. @900@(T%d:#%d\@%d): error in range of cuts to delete. Deleting to %s (%d) will delete architectural constraints from %d to %d.@ @901@(T%d:#%d\@%d): suspicious constraint count %d is not equal to size of parent system (%d) or root system (%d).@ @902@(T%d:#%d\@%d): error in range for cut edit generation. Starting from %s (%d) will generate edits for architectural constraints from %d to %d.@ @903@<>@ @904@(T%d:#%d\@%d): could not install cut %s.@ @905@(T%d:#%d\@%d): error while evaluating MMS branching candidates.@ @906:949@<>@ Error messages related to dylp's simplex/tableau and ray routines @950@[%s]: inactive %s %s (%d); cannot %s.@ @951@[%s]: nonbasic variable %s (%d); cannot %s.@ @952@[%s]: error calculating basis inverse %s %d, %s %s (%d).@ @953@[%s]: error calculating %s %s, %s (%d).@ @954@[%s]: cannot calculate %s rays; incompatible lp return code %s.@ @955@[%s]: error while generating %s rays.@ DyLP-1.10.4/DyLP/src/Dylp/dy_scaling.c0000644000175200017520000004353211670764355015667 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains routines which handle scaling of the original constraint system. Intimately tied to this is the question of whether dylp will make a local copy of the original constraint system or simply refer to the system supplied by the client. When dylp is first called, it will call dy_initsystem to evaluate the situation and establish the `original system' seen by the rest of dylp. The rules are this: * If the client forces a local copy (copyorigsys == TRUE), we make a local copy of the original system. * If the client supplied scaling matrices, we make a scaled local copy of the original system. * If scaling is allowed, and an evaluation of the constraint system establishes that it's necessary, we make a scaled local copy of the original system. * Even if scaling is forbidden, if the constraint system contains >= constraints dylp will make use of scaling to convert them to <= constraints. (The rest of the code assumes no >= constraints.) Otherwise, no local copy is required, and dylp can reference the original system supplied by the client. THIS IS A HAZARD! It's also a feature. From an efficiency standpoint, it's a clear win. But dylp attaches vectors to the original system. If the client does something radical with it (deletes it, for instance), all bets are off. The net effect is that the rest of dylp is completely unaware that scaling has ever happened. In particular, all logical variables are inserted with the coefficient +1.0. This isn't an issue for the rest of dylp, but it *is* an issue if we ever have to supply unscaled results to the outside world (e.g., the routines that generate a solution, or the tableau routines). To make this work, if column i represents the logical for constraint i, colscale[i] must be 1/rowscale[i]. The colscale array is not physically lengthened to make this happen. When processing columns, it's necessary to check whether the column requested corresponds to a logical and scale accordingly. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_scaling.c 4.5 11/06/04" ; static char svnid[] UNUSED = "$Id: dy_scaling.c 480 2011-12-10 23:19:09Z lou $" ; /* Constraint system pointers maintained by this module. local_sys: Pointer to the local copy of the original constraint system. Initialized by dy_initlclsystem, destroyed by dy_freelclsystem. NULL if there is no local copy. client_sys: Pointer to the system originally provided by the client. Used to remember the client's system while we're using a local copy. */ static consys_struct *local_sys, *client_sys ; /* The scaling vectors. These may have been supplied by the client, in which case they are owned by client_sys, or we may have created them here, in which case they are owned by local_sys. */ static double *lcl_rowscale,*lcl_colscale ; /* A few utility routines for use in other files that do scaling and unscaling. */ bool dy_isscaled (void) /* Returns: TRUE if scaling is active, FALSE otherwise. */ { return (!(lcl_rowscale == NULL && lcl_colscale == NULL)) ; } void dy_scaling_vectors (const double **rscale, const double **cscale) /* Exports the scaling vectors. Parameters: rscale: (o) the row scaling vector cscale: (o) the column scaling vector Returns: undefined */ { *rscale = lcl_rowscale ; *cscale = lcl_colscale ; return ; } consys_struct *dy_scaled_origsys () /* This routine exposes the scaled original system. Parameters: none Returns: the scaled original system, or NULL if no scaled local copy exists. */ { return (local_sys) ; } bool dy_initlclsystem (lpprob_struct *orig_lp, bool hotstart) /* This routine looks at the constraint system and options provided by the client and decides whether dylp can reference the supplied constraint system directly or whether a local copy should be made. A local copy is required if the constraint system is to be scaled or if the constraint system contains >= constraints. Options specified by the client can force the creation of a local copy, and force or (mostly) forbid the use of scaling. If scaling is allowed but not forced, this routine will evaluate the constraint matrix and apply scaling if necessary. Scaling vectors are attached to the local copy of the original system. This is not really necessary, but it's cheap insurance against the day in the future when I decide to do something that actually changes the local copy of the original system. If we're doing a hot start, this call is strictly for information hiding. All the data structures should exist, and it's just a question of swapping orig_lp->consys, should we need to do it. This form of the call is also used when we're freeing data structures from previous runs and just want to expose the local system to free it. In this case, the client may not even specify a constraint system. Parameters: orig_lp: (i) the original lp problem, as supplied by the client (o) orig_lp->consys may be replaced with a local copy of the constraint system hotstart: TRUE if we're doing a hot start, FALSE otherwise Returns: TRUE if all goes well, FALSE if there is a failure. */ { int i,scalefactor,orig_gecnt ; bool localcopy,scale,pmone ; flags scaled_vecs ; double orig_scm,scaled_scm ; consys_struct *orig_sys ; const char *rtnnme = "dy_initlclsystem" ; # ifdef DYLP_PARANOIA if (orig_lp == NULL) { errmsg(2,rtnnme,"orig_lp") ; return (FALSE) ; } if (orig_lp->consys == NULL && dy_opts->context != cxUNLOAD) { errmsg(2,rtnnme,"orig_lp->consys") ; return (FALSE) ; } # endif /* If this is a hot start, all we need to do here is (possibly) set orig_lp to point to the existing local copy. More is likely needed, but that'll be handled via dy_refreshlclsystem, called from dy_hotstart. */ if (hotstart == TRUE) { if (local_sys != NULL) { client_sys = orig_lp->consys ; orig_lp->consys = local_sys ; } return (TRUE) ; } /* It's not a hot start. Calculate the geometric mean for the original system. An error return is possible only if we're paranoid. */ orig_sys = orig_lp->consys ; if (consys_evalsys(orig_sys,&orig_scm,&orig_gecnt) == FALSE) { errmsg(138,rtnnme,orig_sys->nme) ; return (FALSE) ; } if (orig_gecnt > 0) { pmone = TRUE ; } else { pmone = FALSE ; } # ifndef DYLP_NDEBUG if (dy_opts->print.scaling >= 2 && pmone == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s]: found %d '>=' inequalities; at least +/-1 scaling.", orig_sys->nme,orig_gecnt) ; } # endif /* Decide if we need a local copy, and if we need to scale the constraint matrix. To decide if we need a scaled copy, we need to scan the constraint matrix. */ local_sys = NULL ; client_sys = NULL ; lcl_rowscale = NULL ; lcl_colscale = NULL ; localcopy = dy_opts->copyorigsys ; switch (dy_opts->scaling) { case 0: /* numeric scaling prohibited */ { scale = FALSE ; break ; } case 1: /* scale with user-supplied matrices */ { localcopy = TRUE ; scale = TRUE ; # ifdef DYLP_PARANOIA if (orig_sys->rowscale == NULL) { errmsg(101,rtnnme,"row scaling vector") ; return (FALSE) ; } if (orig_sys->colscale == NULL) { errmsg(101,rtnnme,"column scaling vector") ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (dy_opts->print.scaling >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s]: scaling with client vectors", orig_sys->nme) ; } # endif break ; } case 2: /* scale if necessary */ { if (orig_sys->minaij >= .5 && orig_sys->maxaij <= 2) { scale = FALSE ; } else { localcopy = TRUE ; scale = TRUE ; } # ifndef DYLP_NDEBUG if (dy_opts->print.scaling >= 2) { if (scale == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s]: system will be scaled;", orig_sys->nme) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s]: scaling for numeric accuracy not required;", orig_sys->nme) ; } dyio_outfmt(dy_logchn,dy_gtxecho," %g <= |a| <= %g, metric = %g.", orig_sys->minaij,orig_sys->maxaij,orig_scm) ; } # endif break ; } default: { errmsg(7,rtnnme,__LINE__,"scaling option code",dy_opts->scaling) ; return (FALSE) ; } } # ifdef DYLP_PARANOIA if (scale == TRUE && localcopy == FALSE) { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } # endif if (pmone == TRUE) { localcopy = TRUE ; } /* If we need a local copy, make one. We don't need to duplicate all the attached vectors of the original system, only the ones relevant for LP. */ if (localcopy == TRUE) { scaled_vecs = CONSYS_OBJ| CONSYS_CTYP|CONSYS_RHS|CONSYS_RHSLOW|CONSYS_RSCALE| CONSYS_VTYP|CONSYS_VLB|CONSYS_VUB|CONSYS_CSCALE ; if (consys_dupsys(orig_sys,&local_sys,scaled_vecs) == FALSE) { errmsg(137,rtnnme,orig_sys->nme) ; return (FALSE) ; } client_sys = orig_lp->consys ; orig_lp->consys = local_sys ; } /* Do we need to scale for numeric accuracy? If the client provided us with scaling vectors, use them. We can use them directly if there's no local copy. Given a local copy, transfer the vectors to the local system. */ if (scale == TRUE) { if (dy_opts->scaling == 1) { if (localcopy == TRUE) { memcpy(local_sys->rowscale,client_sys->rowscale, ((size_t) (local_sys->concnt+1)*sizeof(double))) ; memcpy(local_sys->colscale,client_sys->colscale, ((size_t) (local_sys->varcnt+1)*sizeof(double))) ; lcl_rowscale = local_sys->rowscale ; lcl_colscale = local_sys->colscale ; } else { lcl_rowscale = client_sys->rowscale ; lcl_colscale = client_sys->colscale ; } } /* If no scaling vectors were supplied, call consys_geomscale and consys_equiscale to calculate the scaling vectors, and store them as the active vectors. */ else { if (consys_geomscale(local_sys,&local_sys->rowscale, &local_sys->colscale) == FALSE) { errmsg(135,rtnnme,local_sys->nme) ; return (FALSE) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.scaling >= 2) { scaled_scm = sqrt(local_sys->maxaij/local_sys->minaij) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s]: after geometric scaling", local_sys->nme) ; dyio_outfmt(dy_logchn,dy_gtxecho," %g <= |a| <= %g, geom = %g.", local_sys->minaij,local_sys->maxaij,scaled_scm) ; } # endif if (consys_equiscale(local_sys,&local_sys->rowscale, &local_sys->colscale) == FALSE) { errmsg(135,rtnnme,local_sys->nme) ; return (FALSE) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.scaling >= 2) { scaled_scm = sqrt(local_sys->maxaij/local_sys->minaij) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s]: after equilibration scaling", local_sys->nme) ; dyio_outfmt(dy_logchn,dy_gtxecho," %g <= |a| <= %g, geom = %g.", local_sys->minaij,local_sys->maxaij,scaled_scm) ; } # endif lcl_rowscale = local_sys->rowscale ; lcl_colscale = local_sys->colscale ; } /* If we have a local copy, attach it. */ if (localcopy == TRUE) { if (consys_attach(local_sys,CONSYS_RSCALE,sizeof(double), (void **) &lcl_rowscale) == FALSE) { errmsg(100,rtnnme,local_sys->nme, consys_assocnme(NULL,CONSYS_RSCALE)) ; return (FALSE) ; } if (consys_attach(local_sys,CONSYS_CSCALE,sizeof(double), (void **) &lcl_colscale) == FALSE) { errmsg(100,rtnnme,local_sys->nme, consys_assocnme(NULL,CONSYS_CSCALE)) ; return (FALSE) ; } } } /* Do we need to scale by -1 to convert >= constraints to <= constraints? If we need to do this, we're guaranteed to have a local copy of the constraint system, but we may not have scaling vectors yet. The attach will initialise them to 1.0. */ if (pmone == TRUE) { if (scale == FALSE) { if (lcl_rowscale == NULL) { if (consys_attach(local_sys,CONSYS_RSCALE,sizeof(double), (void **) &lcl_rowscale) == FALSE) { errmsg(100,rtnnme,local_sys->nme, consys_assocnme(NULL,CONSYS_RSCALE)) ; return (FALSE) ; } local_sys->rowscale = lcl_rowscale ;} if (lcl_colscale == NULL) { if (consys_attach(local_sys,CONSYS_CSCALE,sizeof(double), (void **) &lcl_colscale) == FALSE) { errmsg(100,rtnnme,local_sys->nme, consys_assocnme(NULL,CONSYS_CSCALE)) ; return (FALSE) ; } local_sys->colscale = lcl_colscale ; } } for (i = 1 ; i <= orig_sys->concnt ; i++) { if (orig_sys->ctyp[i] == contypGE) { lcl_rowscale[i] *= -1.0 ; } } } /* Apply the scaling vectors and report the result. This call will actually convert the constraint type, along with applying the scaling factors. */ if (scale == TRUE || pmone == TRUE) { if (consys_applyscale(local_sys,pmone,lcl_rowscale,lcl_colscale) == FALSE) { errmsg(135,rtnnme,local_sys->nme) ; return (FALSE) ; } scaled_scm = sqrt(local_sys->maxaij/local_sys->minaij) ; # ifndef DYLP_NDEBUG if (dy_opts->print.scaling >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n [%s]: after scaling", local_sys->nme) ; dyio_outfmt(dy_logchn,dy_gtxecho," %g <= |a| <= %g, geom = %g.", local_sys->minaij,local_sys->maxaij,scaled_scm) ; } # endif } else { scaled_scm = orig_scm ; } /* How'd we do? We may still want to adjust the zero tolerance and feasibility scaling factors. Use the ratio of the original geometric mean to the scaled geometric mean. */ scalefactor = ((int)(log10(orig_scm/scaled_scm)+.5)-1) ; if (scalefactor > 1) { dy_tols->pfeas_scale *= pow(10.0,(double) scalefactor) ; dy_tols->dfeas_scale *= pow(10.0,(double) scalefactor) ; # ifndef DYLP_NDEBUG if (dy_opts->print.scaling >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s]: adjusting pfeas scale by 1.0e+%d to %g.", local_sys->nme,scalefactor,dy_tols->pfeas_scale) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s]: adjusting dfeas scale by 1.0e+%d to %g.", local_sys->nme,scalefactor,dy_tols->dfeas_scale) ; } # endif } if (scalefactor > 2) { scalefactor -= 2 ; dy_tols->zero /= pow(10.0,(double) scalefactor) ; dy_tols->cost /= pow(10.0,(double) scalefactor) ; # ifndef DYLP_NDEBUG if (dy_opts->print.scaling >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s]: adjusting primal zero by 1.0e-%d to %g.", local_sys->nme,scalefactor,dy_tols->zero) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s]: adjusting dual zero by 1.0e-%d to %g.", local_sys->nme,scalefactor,dy_tols->cost) ; } # endif } return (TRUE) ; } void dy_refreshlclsystem (flags what) /* This routine is called by dy_hotstart to transfer the client's changes in rhs, bounds, or objective from client_sys to local_sys. It's moderately brutal. For each vector that's changed, we do a wholesale copy. Parameters: what: the vectors that are to be refreshed Returns: undefined */ { int i,j,m,n ; double infinity ; # ifdef DYLP_PARANOIA const char *rtnnme = "dy_refreshlclsystem" ; # endif /* If there's no scaling, nothing needs to be done. */ if (local_sys == NULL) return ; # ifdef DYLP_PARANOIA if (getflg(client_sys->opts,CONSYS_FININF) != getflg(local_sys->opts,CONSYS_FININF)) { errmsg(1,rtnnme,__LINE__) ; return ; } # endif /* For each of the vectors that can change, do a refresh if requested. When we're doing the bounds, watch out for finite infinity. */ m = client_sys->concnt ; n = client_sys->varcnt ; infinity = client_sys->inf ; if (flgon(what,lpctlOBJCHG)) { for (j = 1 ; j <= n ; j++) local_sys->obj[j] = client_sys->obj[j]*lcl_colscale[j] ; } if (flgon(what,lpctlRHSCHG)) { for (i = 1 ; i <= m ; i++) { local_sys->rhs[i] = client_sys->rhs[i]*lcl_rowscale[i] ; local_sys->rhslow[i] = client_sys->rhslow[i]*lcl_rowscale[i] ; } } if (flgon(what,lpctlLBNDCHG)) { if (flgon(client_sys->opts,CONSYS_FININF)) { for (j = 1 ; j <= n ; j++) { if (client_sys->vlb[j] > -infinity) { local_sys->vlb[j] = client_sys->vlb[j]/lcl_colscale[j] ; } else { local_sys->vlb[j] = -infinity ; } } } else { for (j = 1 ; j <= n ; j++) local_sys->vlb[j] = client_sys->vlb[j]/lcl_colscale[j] ; } } if (flgon(what,lpctlUBNDCHG)) { if (flgon(client_sys->opts,CONSYS_FININF)) { for (j = 1 ; j <= n ; j++) { if (client_sys->vub[j] < infinity) { local_sys->vub[j] = client_sys->vub[j]/lcl_colscale[j] ; } else { local_sys->vub[j] = infinity ; } } } else { for (j = 1 ; j <= n ; j++) local_sys->vub[j] = client_sys->vub[j]/lcl_colscale[j] ; } } return ; } void dy_freelclsystem (lpprob_struct *orig_lp, bool freesys) /* This routine cleans up the local copy of the constraint system. If there's no local copy, the routine is a noop. The minimal action for a local copy is to correct the pointer in orig_lp. If free is TRUE, then the local copy is released. Parameters: orig_lp: (i) the original lp problem, as supplied by the client (o) orig_lp->consys will be restored to the client copy of the constraint system freesys: TRUE to free the local system Returns: undefined */ { /* Do we even have a local copy? If not, we're done already. */ if (local_sys == NULL) return ; /* Replace the consys pointer in orig_lp with a pointer to the client's constraint system. */ orig_lp->consys = client_sys ; client_sys = NULL ; if (freesys == FALSE) return ; /* Free the constraint system. The scaling vectors are associated with some constraint system, so don't need to free them here, but we do need to clear the local pointers to be safe. */ lcl_rowscale = NULL ; lcl_colscale = NULL ; if (local_sys != NULL) { consys_free(local_sys) ; local_sys = NULL ; } return ; } DyLP-1.10.4/DyLP/src/Dylp/dy_primalmultipivot.c0000644000175200017520000006670711507440660017666 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains routines which select the leaving variable under somewhat more relaxed primal pivoting rules. The general notion is that we can have `soft' and `hard' limits on delta for the incoming variable x. To give an example, suppose we're in primal phase I, and we're looking at a variable x, BUUB, which will decrease and leave the basis. We can pivot x out when it reaches its upper bound (the `soft' limit on delta) or allow it to continue to move and pivot it out at the lower bound (the `hard' limit). The strategy is to scan the candidates to leave, recording each pivot opportunity and marking it as soft or hard. Then we sort by nondecreasing delta and pick the best looking pivot opportunity from the candidates up to the first hard limit. The real advantage comes in cases where the candidate with the limiting hard delta has a numerically unstable pivot. Often we can promote a candidate with a slightly larger delta and a stable pivot, because (tiny unstable pivot)*(slightly larger delta) is still too small to cause loss of primal feasibility. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_primalmultipivot.c 1.4 11/06/04" ; static char svnid[] UNUSED = "$Id: dy_primalmultipivot.c 407 2010-12-31 20:48:48Z lou $" ; /* The structure to hold pivot candidates Field Description ----- ----------- ndx The index of the candidate x deltakj Absolute value of delta for this candidate abarkj Absolute value of pivot for this candidate ratiokj Stability ratio for this candidate; 1.0 is the boundary between stable and unstable. madpiv TRUE if this pivot is unstable, FALSE otherwise dir Direction of motion of x; -1 to decrease, +1 to increase bnd The bound where x will pivot; -1 for lb, +1 for ub hard TRUE if this is a hard limit, false if it's a soft limit */ typedef struct { int ndx ; double deltakj ; double abarkj ; double ratiokj ; bool madpiv ; int dir ; int bnd ; bool hard ; } primcand_struct ; static int primcand_cmp (const void *p_primcand1, const void *p_primcand2) /* Comparison function for qsort to sort an array of primcand_structs. The primary criterion is deltakj, with ratiokj used as the tiebreaker. Parameters: p_primcand1,2: primcand_structs to be compared Returns: -1 if primcand1 < primcand2 0 for equality 1 if primcand1 > primcand2 */ { double delta1,delta2,ratio1,ratio2 ; const primcand_struct *primcand1,*primcand2 ; primcand1 = (const primcand_struct *) p_primcand1 ; primcand2 = (const primcand_struct *) p_primcand2 ; /* The primary criterion is nondecreasing delta. See promoteSanePivot for an optimization. */ delta1 = primcand1->deltakj ; delta2 = primcand2->deltakj ; if (delta1 < delta2) { return (-1) ; } else if (delta1 > delta2) { return (1) ; } /* Equal deltas. Order by nonincreasing pivot ratio. */ ratio1 = primcand1->ratiokj ; ratio2 = primcand2->ratiokj ; if (ratio1 > ratio2) return (-1) ; else if (ratio1 < ratio2) return (1) ; else return (0) ; } static void promoteSanePivot (primcand_struct *outcands) /* This routine attempts to promote a candidate with a sane pivot to the front of the candidate list. The observation is this: numerically unstable (mad) pivots are often small. If the delta of a sane pivot is small enough, we won't cause primal infeasibility. Suppose we have two candidates x (sane) and x (mad) to leave as x enters. If (delta-delta)*a < tol, then it's a good bet we can promote x past x in the pivot list. We also want to prefer hard pivots over soft pivots, which are often degenerate (i.e., x is already at bound and could be pivoted out with no motion). But in a pinch, we'll take a degenerate soft pivot over a mad pivot. So --- our goal is to walk along outcands until we find the first sane hard pivot and then try to promote it to the front of the list. For hard limits, we have to be under the tolerance. Soft limits can be ignored. Parameters: outcands: (i) the candidate list; outcands[0].ndx is the number of candidates (o) the candidate list, possibly rearranged as described Returns: undefined */ { int ndx,candcnt,firsthardsane,firstsoftsane ; double tol ; primcand_struct sane,insane ; /* If outcands[1] is sane and hard, all is copacetic and we can return with no further effort. */ if (outcands[1].madpiv == FALSE && outcands[1].hard == TRUE) return ; /* It's a mad, mad, mad, mad world. Scan for sane pivots, ending the scan when we find the first hard, sane pivot. If there are no sane pivots, we're done. */ candcnt = outcands[0].ndx ; firstsoftsane = -1 ; firsthardsane = -1 ; for (ndx = 1 ; ndx <= candcnt && firsthardsane == -1 ; ndx++) { if (outcands[ndx].madpiv == FALSE) { if (outcands[ndx].hard == TRUE) { firsthardsane = ndx ; } else if (firstsoftsane == -1) { firstsoftsane = ndx ; } } } if (firsthardsane < 0 && firstsoftsane < 0) return ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t ") ; if (firstsoftsane > 0) { ndx = outcands[firstsoftsane].ndx ; dyio_outfmt(dy_logchn,dy_gtxecho,"first soft sane %s (%d) at %d", consys_nme(dy_sys,'v',ndx,FALSE,NULL),ndx,firstsoftsane) ; } if (firsthardsane > 0) { ndx = outcands[firsthardsane].ndx ; if (firstsoftsane > 0) dyio_outfmt(dy_logchn,dy_gtxecho,", ") ; dyio_outfmt(dy_logchn,dy_gtxecho,"first hard sane %s (%d) at %d", consys_nme(dy_sys,'v',ndx,FALSE,NULL),ndx,firsthardsane) ; } dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } # endif /* First try to promote a sane pivot with a hard limit. We have a sane pivot at firsthardsane and mad pivots up to firsthardsane-1. Work back towards the front of the list. */ tol = log10(dy_tols->pfeas/dy_tols->zero)/2 ; tol = dy_tols->zero*pow(10.0,tol) ; if (firsthardsane > 1) { for (ndx = firsthardsane ; ndx > 1 ; ndx--) { sane = outcands[ndx] ; insane = outcands[ndx-1] ; if (insane.hard == FALSE || ((sane.deltakj-insane.deltakj)*insane.abarkj < tol)) { outcands[ndx-1] = sane ; outcands[ndx] = insane ; } else { break ; } } # ifndef DYLP_NDEBUG if ((dy_opts->print.pivoting >= 2 && ndx == 1) || dy_opts->print.pivoting >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t promoted hard sane %s (%d) to %d. ", consys_nme(dy_sys,'v',outcands[1].ndx,FALSE,NULL), outcands[1].ndx,ndx) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) { if (ndx == 1) dy_stats->pmulti.promote++ ; } # endif if (ndx == 1) return ; } /* Try again with the soft sane pivot. */ if (firstsoftsane > 1) { for (ndx = firstsoftsane ; ndx > 1 ; ndx--) { sane = outcands[ndx] ; insane = outcands[ndx-1] ; if (insane.hard == FALSE || ((sane.deltakj-insane.deltakj)*insane.abarkj < tol)) { outcands[ndx-1] = sane ; outcands[ndx] = insane ; } else { break ; } } # ifndef DYLP_NDEBUG if ((dy_opts->print.pivoting >= 2 && ndx == 1) || dy_opts->print.pivoting >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t promoted hard sane %s (%d) to %d. ", consys_nme(dy_sys,'v',outcands[1].ndx,FALSE,NULL), outcands[1].ndx,ndx) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) { if (ndx == 1) dy_stats->pmulti.promote++ ; } # endif } return ; } static dyret_enum scanForPrimOutCands (primcand_struct *outcands, int j, int indir, double *abarj, double maxabarj) /* This routine scans the basic variables for candidates to become the leaving variable; the criteria are outlined below in the scan loop. Candidates are stored in the outcands array. For each candidate, we record the index, information about the pivot coefficient (value, stability), and the pivot operation (direction of motion, bound, delta, hard/soft limit). During the scan, we use the usual primal delta limit to track a `best' candidate, with pivot ratio used as the tiebreaker. If this candidate looks good (a sane pivot with a hard |delta| > 0) at the end of the search, it's returned without further ado. Note that while it's possible to generate two candidate entries (a soft and a hard) for a given variable, the hard candidate will always be the second one, which is the one we'll test below. Otherwise, the entries are sorted. The primary criteria is nonincreasing primal delta, with stability ratio used as the tie-breaker. The sorted list is passed to promoteSanePivot, which will try its best to make sure that the top candidate has a sane pivot coefficient and a hard delta limit. Parameters: outcands: (i) pointer to array to hold the candidates for entry (o) filled and sorted array; in particular outcands[0].ndx is the number of candidates outcands[1..] are the candidates j: index of the entering variable x indir: direction of motion of the entering variable x abarj: The ftran'd pivot column abar, column j of inv(B)N maxabarj: The maximum value in the pivot column Returns: dyrOK if there are candidates and no errors dyrDEGEN if the pivot would be degenerate dyrUNBOUND if there are no candidates dyrFATAL on error (should only occur when we're paranoid) */ { int m,k,kpos,reject,candcnt,lastcandcnt ; double abarkj,ratiokj,xk,ubk,lbk ; double *vub,*vlb ; flags statk ; bool hard,sort ; primcand_struct *outcand,*curbest,best ; dyret_enum retval ; /* Unclear that it's useful to allow soft degenerate pivots, and it's definitely prone to cycling. Could be made into an option, but just disallow for now. */ const bool allowsoftdegen = FALSE ; # ifdef DYLP_PARANOIA const char *rtnnme = "scanForPrimOutCands" ; # endif # if !defined(DYLP_NDEBUG) || defined(DYLP_PARANOIA) int print ; print = dy_opts->print.pivoting ; /* suppress print in dy_chkpiv */ dy_opts->print.pivoting = 0 ; # endif # ifdef DYLP_PARANOIA if (outcands == NULL) { errmsg(2,rtnnme,"outcands array") ; return (dyrFATAL) ; } # endif retval = dyrFATAL ; memset(&best,0,sizeof(primcand_struct)) ; m = dy_sys->concnt ; vub = dy_sys->vub ; vlb = dy_sys->vlb ; outcands[0].ndx = -1 ; # ifndef DYLP_NDEBUG if (print >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n gathering candidates to leave ... ") ; if (print >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tVariable\t x\t\tabar\t delta\t\tDisp") ; } } # endif /* Check if the entering variable is eligible to be the leaving variable. The normal case here is a bound-to-bound flip, but the code is written to handle moving a superbasic variable to bound. ratiokj is set to inf on the theory that not pivoting at all is the ultimate in stable pivots (not to mention the work we avoid by not needing to update the basis inverse). */ candcnt = 0 ; curbest = NULL ; if ((vlb[j] > -dy_tols->inf && indir == -1) || (vub[j] < dy_tols->inf && indir == 1)) { candcnt++ ; outcand = &outcands[candcnt] ; xk = dy_x[j] ; outcand->ndx = j ; outcand->abarkj = 1.0 ; if (indir == -1) { outcand->deltakj = xk-dy_sys->vlb[j] ; } else { outcand->deltakj = dy_sys->vub[j]-xk ; } setcleanzero(outcand->deltakj,dy_tols->zero) ; outcand->ratiokj = dy_tols->inf ; outcand->madpiv = FALSE ; outcand->dir = indir ; outcand->bnd = indir ; outcand->hard = TRUE ; curbest = outcand ; # ifndef DYLP_NDEBUG if (print >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%-8s (%d)", consys_nme(dy_sys,'v',j,FALSE,NULL),j) ; dyio_outfmt(dy_logchn,dy_gtxecho,"\t%8g\t%8g",xk,-1.0) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\t%8g\t accepted",outcand->deltakj*indir) ; } # endif } /* Open a loop and scan for suitable basic variables. First we look for obvious reasons to reject x, then determine if x imposes a limit on delta. */ lastcandcnt = candcnt ; for (kpos = 1 ; kpos <= m ; kpos++) { k = dy_basis[kpos] ; # ifdef DYLP_PARANOIA if (dy_chkstatus(k) == FALSE) { outcands[0].ndx = -1 ; dy_opts->print.pivoting = print ; return (dyrFATAL) ; } # endif /* First check if we can reject x out of hand: * We're working a restricted subproblem, and x is not included * abar == 0 * stat == BFR. Then check to see if x actually imposes a limit by looking at x, lb, and ub. The order of tests depends on the direction of motion for x. For example, if x is decreasing: * (x >= ub) implies ub is finite and means we can decrease x to ub and pivot. If lb is finite, then we have a choice to go for lb and the delta required to reach ub is a soft limit. If lb is -inf, then ub is our only choice and this is a hard limit. * (ub > x >= lb and lb > -inf) means we can decrease x to lb and pivot. This is a hard limit. * (ub > x > lb and lb <= -inf) means x imposes no limit on delta and is not a candidate to leave. * (!belowbnd(xk,ubk)) We're right at bound, or borderline infeasible, still within the feasibility tolerance. In any case, neither phase I or II will tolerate loss of feasibility. * (otherwise) We're well into infeasibility. If this is phase I, trust that cbar is correct and overall this is a good bet. If this is phase II, well, this shouldn't happen. An accuracy or sanity check will catch it. */ reject = 0 ; statk = dy_status[k] ; abarkj = abarj[kpos] ; xk = quiet_nan(0) ; outcand = NULL ; if (dy_lp->degen > 0 && dy_degenset[kpos] != dy_lp->degen) { reject = -5 ; } else if (flgon(statk,vstatBFR)) { reject = -1 ; } else if (withintol(abarkj,0.0,dy_tols->zero)) { reject = -2 ; } else { ubk = vub[k] ; lbk = vlb[k] ; xk = dy_xbasic[kpos] ; if (ubk >= dy_tols->inf || lbk <= -dy_tols->inf) { hard = TRUE ; } else { hard = FALSE ; } if (abarkj*indir > 0) /* x decreasing */ { if (xk > ubk || (xk == ubk && hard == FALSE && allowsoftdegen == TRUE)) { candcnt++ ; outcand = &outcands[candcnt] ; outcand->ndx = k ; outcand->abarkj = fabs(abarkj) ; outcand->deltakj = fabs((ubk-xk)/outcand->abarkj) ; setcleanzero(outcand->deltakj,dy_tols->zero) ; ratiokj = dy_chkpiv(abarkj,maxabarj) ; outcand->ratiokj = ratiokj ; if (ratiokj < 1.0) { outcand->madpiv = TRUE ; } else { outcand->madpiv = FALSE ; } outcand->dir = -1 ; outcand->bnd = 1 ; outcand->hard = hard ; } if (lbk > -dy_tols->inf) { if (xk >= lbk) { candcnt++ ; outcand = &outcands[candcnt] ; outcand->ndx = k ; outcand->abarkj = fabs(abarkj) ; outcand->deltakj = fabs((lbk-xk)/outcand->abarkj) ; setcleanzero(outcand->deltakj,dy_tols->zero) ; ratiokj = dy_chkpiv(abarkj,maxabarj) ; outcand->ratiokj = ratiokj ; if (ratiokj < 1.0) { outcand->madpiv = TRUE ; } else { outcand->madpiv = FALSE ; } outcand->dir = -1 ; outcand->bnd = -1 ; outcand->hard = TRUE ; } else if (!belowbnd(xk,lbk)) { candcnt++ ; outcand = &outcands[candcnt] ; outcand->ndx = k ; outcand->deltakj = 0 ; outcand->abarkj = fabs(abarkj) ; ratiokj = dy_chkpiv(abarkj,maxabarj) ; outcand->ratiokj = ratiokj ; if (ratiokj < 1.0) { outcand->madpiv = TRUE ; } else { outcand->madpiv = FALSE ; } outcand->dir = -1 ; outcand->bnd = -1 ; outcand->hard = TRUE ; } else { reject = -3 ; } } else if (xk < ubk) { reject = -4 ; } } else /* x increasing */ { if (xk < lbk || (xk == lbk && hard == FALSE && allowsoftdegen == TRUE)) { candcnt++ ; outcand = &outcands[candcnt] ; outcand->ndx = k ; outcand->abarkj = fabs(abarkj) ; outcand->deltakj = fabs((lbk-xk)/outcand->abarkj) ; setcleanzero(outcand->deltakj,dy_tols->zero) ; ratiokj = dy_chkpiv(abarkj,maxabarj) ; outcand->ratiokj = ratiokj ; if (ratiokj < 1.0) { outcand->madpiv = TRUE ; } else { outcand->madpiv = FALSE ; } outcand->dir = 1 ; outcand->bnd = -1 ; outcand->hard = hard ; } if (ubk < dy_tols->inf) { if (xk <= ubk) { candcnt++ ; outcand = &outcands[candcnt] ; outcand->ndx = k ; outcand->abarkj = fabs(abarkj) ; outcand->deltakj = fabs((ubk-xk)/outcand->abarkj) ; setcleanzero(outcand->deltakj,dy_tols->zero) ; ratiokj = dy_chkpiv(abarkj,maxabarj) ; outcand->ratiokj = ratiokj ; if (ratiokj < 1.0) { outcand->madpiv = TRUE ; } else { outcand->madpiv = FALSE ; } outcand->dir = 1 ; outcand->bnd = 1 ; outcand->hard = TRUE ; } else if (!abovebnd(xk,ubk)) { candcnt++ ; outcand = &outcands[candcnt] ; outcand->ndx = k ; outcand->deltakj = 0 ; outcand->abarkj = fabs(abarkj) ; ratiokj = dy_chkpiv(abarkj,maxabarj) ; outcand->ratiokj = ratiokj ; if (ratiokj < 1.0) { outcand->madpiv = TRUE ; } else { outcand->madpiv = FALSE ; } outcand->dir = 1 ; outcand->bnd = 1 ; outcand->hard = TRUE ; } else { reject = -3 ; } } else if (xk > lbk) { reject = -4 ; } } } /* Fast test for an incumbent candidate. */ if (candcnt != lastcandcnt) { if (curbest == NULL) { curbest = outcand ; } else if (curbest->deltakj > outcand->deltakj) { curbest = outcand ; } else if (curbest->deltakj == outcand->deltakj && curbest->ratiokj < outcand->ratiokj) { curbest = outcand ; } } # ifndef DYLP_NDEBUG if (print >= 4 && candcnt != lastcandcnt) { for (lastcandcnt++ ; lastcandcnt <= candcnt ; lastcandcnt++) { outcand = &outcands[lastcandcnt] ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%-8s (%d)", consys_nme(dy_sys,'v',k,FALSE,NULL),k) ; dyio_outfmt(dy_logchn,dy_gtxecho,"\t%8g\t%8g",xk,abarkj) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\t%8g\t accepted",outcand->deltakj*indir) ; if (outcand->madpiv == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho," (mad)") ; } if (outcand->deltakj == 0) { dyio_outfmt(dy_logchn,dy_gtxecho," (degen)") ; } if (outcand->hard == FALSE) { dyio_outfmt(dy_logchn,dy_gtxecho," (soft)") ; } } lastcandcnt-- ; } else if (print >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%-8s (%d)", consys_nme(dy_sys,'v',k,FALSE,NULL),k) ; dyio_outfmt(dy_logchn,dy_gtxecho,"\t%8g\t%8g",xk,abarkj) ; switch (reject) { case -1: { dyio_outfmt(dy_logchn,dy_gtxecho,"\t\trejected -- status %s", dy_prtvstat(statk)) ; break ; } case -2: { dyio_outfmt(dy_logchn,dy_gtxecho,"\t\trejected -- zero pivot") ; break ; } case -3: { dyio_outfmt(dy_logchn,dy_gtxecho, "\t\trejected -- borderline infeasible") ; break ; } case -4: { dyio_outfmt(dy_logchn,dy_gtxecho, "\t\trejected -- no limiting bound") ; break ; } case -5: { dyio_outfmt(dy_logchn,dy_gtxecho, "\t\trejected -- not in restricted subproblem") ; break ; } } } # endif lastcandcnt = candcnt ; } /* End of scan loop */ outcands[0].ndx = candcnt ; /* If we saved a suitable candidate while scanning, we can skip sorting and promotion. Suitable is defined as a hard delta > 0 and a sane pivot. */ sort = TRUE ; if (curbest != NULL) { if (curbest->hard == TRUE && curbest->deltakj > 0 && curbest->madpiv == FALSE) { best = *curbest ; sort = FALSE ; } } /* sort = TRUE ; */ /* If we have no candidates, we're unbounded. If the candidate we've saved while scanning looks good (sort == FALSE), then we simply copy it into outcands[1]. If we didn't save a suitable candidate (sort == TRUE), and we do have a list of candidates, sort the list and then try to promote the best pivot to the front. If we have only one candidate, well, we know it's bad, but there's nothing we can do. The assignments to outcands[0].[deltakj,madpiv] are targetted at a quirk of qsort: it seems to occasionally sort outcands[0]. An optimization of some sort, presumably. Degeneracy is declared if the top two candidates both have deltakj == 0 and the second candidate is a hard bound. This may miss the odd instance, but should catch the troublesome cases. */ # ifndef DYLP_NDEBUG dy_opts->print.pivoting = print ; # endif if (candcnt > 0) { if (sort == TRUE) { if (candcnt > 1) { # ifndef DYLP_NDEBUG if (print >= 2) { if (sort == FALSE) dyio_outfmt(dy_logchn,dy_gtxecho,"!") ; dyio_outfmt(dy_logchn,dy_gtxecho,"sorting ... ") ; } # endif outcands[0].deltakj = -dy_tols->inf ; outcands[0].madpiv = FALSE ; qsort(&outcands[1],candcnt,sizeof(primcand_struct),primcand_cmp) ; promoteSanePivot(outcands) ; # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->pmulti.nontrivial++ ; # endif if (outcands[1].deltakj == 0 && outcands[2].deltakj == 0 && outcands[2].hard == TRUE) { retval = dyrDEGEN ; } else { retval = dyrOK ; } } else { retval = dyrOK ; } } if (sort == FALSE) { /* if (best.ndx != outcands[1].ndx) { dyio_outfmt(dy_logchn,dy_gtxecho, "\nMISMATCH (%d)\n",dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho, " sort %s (%d) delta = %g ratio = %g\n", consys_nme(dy_sys,'v',outcands[1].ndx,0,NULL), outcands[1].ndx,outcands[1].deltakj,outcands[1].ratiokj) ; dyio_outfmt(dy_logchn,dy_gtxecho, " best %s (%d) delta = %g ratio = %g\n", consys_nme(dy_sys,'v',best.ndx,0,NULL),best.ndx, best.deltakj,best.ratiokj) ; dyio_outfmt(dy_logchn,dy_gtxecho, " diff delta = %g ratio = %g\n", outcands[1].deltakj-best.deltakj, outcands[1].ratiokj-best.ratiokj) ; } */ outcands[1] = best ; retval = dyrOK ; } } else { retval = dyrUNBOUND ; } # ifndef DYLP_NDEBUG if (print >= 1) { if (print >= 3 && candcnt > 0) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n ") ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tVariable\tratio\tdelta") ; for (m = 1 ; m <= candcnt ; m++) { k = outcands[m].ndx ; ratiokj = outcands[m].ratiokj ; xk = outcands[m].deltakj ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%-8s (%d)", consys_nme(dy_sys,'v',k,FALSE,NULL),k) ; dyio_outfmt(dy_logchn,dy_gtxecho,"\t%8g\t%8g",ratiokj,xk) ; if (outcands[m].madpiv == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho," (mad)") ; } if (xk == 0) { dyio_outfmt(dy_logchn,dy_gtxecho," (degen)") ; } if (outcands[m].hard == FALSE) { dyio_outfmt(dy_logchn,dy_gtxecho," (soft)") ; } } dyio_outfmt(dy_logchn,dy_gtxecho,"\n ") ; } dyio_outfmt(dy_logchn,dy_gtxecho,"%d candidates.",candcnt) ; if (print >= 2 && (retval == dyrOK || retval == dyrDEGEN)) { k = outcands[1].ndx ; if (j != k) { kpos = dy_var2basis[k] ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n selected %s (%d) = %g to leave pos'n %d at", consys_nme(dy_sys,'v',k,FALSE,NULL),k, dy_xbasic[kpos],kpos) ; if (outcands[1].dir > 0) { dyio_outfmt(dy_logchn,dy_gtxecho," %s = %g, ", (dy_status[k] != vstatBLLB)?"ub":"lb", (dy_status[k] != vstatBLLB)?vub[k]:vlb[k]) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho," %s = %g, ", (dy_status[k] != vstatBUUB)?"lb":"ub", (dy_status[k] != vstatBUUB)?vlb[k]:vub[k]) ; } dyio_outfmt(dy_logchn,dy_gtxecho, "abar<%d,%d> = %g, ",j,k,abarj[kpos]) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, "\n selected %s (%d) = %g to change to %s = %g, ", consys_nme(dy_sys,'v',k,FALSE,NULL),k,dy_x[k], (outcands[1].dir > 0)?"ub":"lb", (outcands[1].dir > 0)?vub[k]:vlb[k]) ; } dyio_outfmt(dy_logchn,dy_gtxecho,"delta = %g.",outcands[1].deltakj) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, " Returning %s.",dy_prtdyret(retval)) ; } } dy_opts->print.pivoting = print ; # endif return (retval) ; } dyret_enum primmultiout (int j, int indir, double *abarj, double maxabarj, int *p_xindx, int *p_outdir, double *p_deltaj) /* Select a candidate to leave the basis. This routine coordinates the process, and really has very little work to do. scanForPrimOutCands does the heavy lifting, collecting a list of candidates and sorting them so that the candidate returned in position #1 of the candidate array is the correct choice. This routine doesn't report loss of primal feasibility. scanForPrimOutCands understands how to do pivot selection in the presence of primal infeasibility. We'll hope that any problems are transitory and leave it to dylp's regular feasibility checks to catch anything serious. Parameters: xjndx: Index of the entering variable x. indir: Direction of motion of x. -1: decreasing from upper bound 1: increasing from lower bound abarj: Ftran'd column inv(B)a associated with x. maxabarj: MAX{j}(abar) p_xindx: (o) Index of the leaving variable x. Also valid for return code dyrLOSTPFEAS (in which case it is the index of the variable where feasibility loss was discovered) and dyrREQCHK (in which case it is the index of the variable whose pivot a was declared bogus). p_outdir: (o) Direction of motion of x, coded as: -1: decreasing to lower bound 1: increasing to upper bound p_deltaj: (o) Absolute value of the allowable change in x. Returns: dyret_enum code, as follows: dyrOK: a strictly basic leaving variable was successfully selected (this includes dirty degeneracy) dyrDEGEN: a basic at bound leaving variable is selected; the pivot will be (cleanly) degenerate dyrMADPIV: the pivot coefficient abar would be numerically unstable dyrREQCHK: a possibly bogus abar was selected as the pivot, and refactoring seems wise before trying to use it (basis.etas > 1 is the criteria) dyrUNBOUND: the problem is unbounded dyrFATAL: fatal confusion */ { int m,candcnt ; dyret_enum retval ; primcand_struct *outcands,*candk ; # if MALLOC_DEBUG == 2 char *rtnnme = "dy_primmultiout" ; # endif /* Setup. Potentially, each basic variable can produce a soft and a hard pivot delta, and we need to allow for a bound-to-bound pivot. Hence we need a candidate array of length 2*m+1. */ retval = dyrINV ; *p_xindx = 0 ; *p_outdir = 0 ; *p_deltaj = -1 ; m = dy_sys->concnt ; outcands = (primcand_struct *) MALLOC((2*m+1+1)*sizeof(primcand_struct)) ; # ifdef DYLP_ZEROFAULT /* Alignment padding. */ memset(outcands,0,(2*m+1+1)*sizeof(primcand_struct)) ; # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->pmulti.cnt++ ; # endif /* Generate a sorted list of candidates to leave. No candidates means we're primal unbounded (dyrUNBOUND). Fatal error (dyrFATAL) is possible only if we're paranoid. Otherwise, the candidate in position #1 is the choice. Degeneracy is indicated when we have multiple candidates with a hard delta of 0. */ retval = scanForPrimOutCands(outcands,j,indir,abarj,maxabarj) ; if (retval == dyrOK || retval == dyrDEGEN) { candcnt = outcands[0].ndx ; candk = &outcands[1] ; *p_xindx = candk->ndx ; *p_outdir = candk->dir ; *p_deltaj = candk->deltakj ; if (candk->madpiv == TRUE) { retval = dyrMADPIV ; } # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->pmulti.cands += outcands[0].ndx ; # endif } else { *p_xindx = -1 ; } FREE(outcands) ; return (retval) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_dualmultipivot.c0000644000175200017520000017030212253224475017315 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_dualmultipivot.c 4.6 10/15/05" ; static char svnid[] UNUSED = "$Id: dy_dualmultipivot.c 524 2013-12-15 03:59:57Z tkr $" ; /* This is an experimental dual pivoting algorithm. The inspiration comes from two places: * Observing the `dual death spiral', where the dual simplex executes a succession of pivots that result in steadily increasing (and infeasible) values of the primal variables. Each pivot is driving one variable to bound, but at the cost of driving other primal variables farther from bound. It's still unclear to me how/why this occurs. It's not simply a side effect of working with the partial system --- grow22 is a pathological case, and it's all equalities, loaded in full. But it leads to the thought ``Wouldn't it be nice to choose the dual pivot to reduce primal infeasibility?'' After all, attaining primal feasibility is equivalent to reaching optimality, given we start with dual feasibility. * Looking over the dual pivot selection algorithm in clp. Instead of just choosing the variable x associated with the most restrictive delta, it examines a set of candidates. If it prefers a candidate with a larger delta, it considers the effect of flipping candidates with smaller delta to their opposite bound (thus maintaining dual feasibility). With the germ of the idea in hand, some poking around on the web turned up a paper by Istvan Maros, ``A Generalized Dual Phase-2 Simplex Algorithm'', Departmental Technical Report 2001/2, Department of Computing, Imperial College, London, January 2001, revised December 2002, ISSN 1469-4174. It describes another variation on this idea, and describes some very preliminary results, ending with a comment that this needs to be explored further. This material is repeated in Chap. 10 of Maros' book, "Computational Techniques of the Simplex Method". The general outline of generalised dual pivoting is as follows: scan for entry candidates x and sort by delta foreach sorted x calculate abar = inv(B)a ; calculate the change in infeasibility if we pivot on x = (change due to previous flips) + (change moving delta) ; calculate the change in infeasibility if we flip x = (change due to previous flips) + (change flipping x) ; if we can't flip x, quit --- it, or a predecessor, is the pivot otherwise, remember the infeasibility if we choose x, and continue to the next candidate end foreach pivot on the x with the best infeasibility, flipping variables as required. The foreach loop ends when either 1) we reach a variable that can't be flipped, hence must be pivoted, or 2) flipping a variable would drive x within bound. (Remember, the value of x is the dual reduced cost. When it comes within bound, the reduced cost changes from favourable to unfavourable.) The pivot can be the variable that ended the scan, or any of its predecessors (modulo numerical stability considerations). The development above implies we're tracking the primal infeasibilty of all basic variables. And indeed the original thought was to choose the incoming primal variable to minimise the maximum infeasibility over the primal basic variables. It turns out that always choosing a pivot this way is not a good strategy --- the DYLP tech report says more about this --- but it looks to be worth some further experimentation. The default strategy is to look solely at the infeasibility of x (the leaving variable) unless swings in other primal variables get out of hand. Put another way, improving the dual objective is the goal unless swings in primal variable values become large enough to threaten numerical stability. This is enhanced with a couple of tweaks. The most important of these is the notion of promoting a sane (numerically stable) pivot. It'll often happen that the front of the candidate list is occupied with variables x with delta = 0 (or some tiny value) and abar numerically unstable. But precisely because abar is tiny, it might be that we can pass over it to another x with a non-zero delta and a much larger abar. As long as (delta/abar)*abar is sufficiently small that we can tolerate the dual infeasibility of cbar, we can take the better pivot on x. We avoid a degenerate pivot and we have better numerical stability. */ /* Structure used to carry around candidates for entry. Field Description ----- ----------- ndx index of the variable x abarik |abar| ratioik stability ratio of abar; larger is better, 1.0 is the boundary between stable and unstable madpiv TRUE if abar failed the pivot stability check ddelta magnitude of dual delta |delta| = |cbar/abar| pivdir direction of movement if x is the entering primal variable; 1 for rising, -1 for falling flippable TRUE if x has an opposite bound (hence can be flipped). rev TRUE if x is actually a reverse pivot (i.e., cbar is slightly on the wrong side of 0, and this will bring us back to dual feasibility). piv If x is used as the entering variable delta standard primal delta = delta/abar when x is the entering variable, where delta is the movement required to drive x out of the basis. inf change in total primal infeasibility if x enters maxinf maximum infeasibility of a primal variable after x is pivoted into the basis flip If x is flipped to its opposite bound delta primal delta for movement to opposite bound inf change in total primal infeasibility if x is flipped to the opposite bound maxinf maximum infeasibility of a primal variable after x is flipped */ typedef struct { int ndx ; double abarik ; double ratioik ; bool madpiv ; double ddelta ; int pivdir ; bool flippable ; bool rev ; struct { double delta ; double inf ; double maxinf ; } piv ; struct { double delta ; double inf ; double maxinf ; } flip ; } dualcand_struct ; /* # ifdef DYLP_PARANOIA static int predictiter ; static double predicttotinf,predictmaxinf ; # endif */ static int dualcand_cmp (const void *p_dualcand1, const void *p_dualcand2) /* Comparison function for qsort to sort an array of dualcand_structs. See scanForDualInCands for the sort criteria. The primary criterion is dual delta; it only gets interesting when the deltas are equal. It turns out that sorting by nonincreasing ratio as the tiebreaker is critical. Otherwise, we're trying to bring x to bound using dinky little pivots, and in the meantime we're swinging the values of the other basic variables off into the ozone. Parameters: p_dualcand1,2: dualcand_structs to be compared Returns: -1 if dualcand1 < dualcand2 0 for equality 1 if dualcand1 > dualcand2 */ { double delta1,delta2,ratio1,ratio2 ; bool flip1,flip2,mad1,mad2 ; const dualcand_struct *dualcand1,*dualcand2 ; dualcand1 = (const dualcand_struct *) p_dualcand1 ; dualcand2 = (const dualcand_struct *) p_dualcand2 ; delta1 = dualcand1->ddelta ; delta2 = dualcand2->ddelta ; mad1 = dualcand1->madpiv ; mad2 = dualcand2->madpiv ; /* The primary criterion is the size of the delta. See promoteSanePivot for an optimization. Unfortunately, we'll have sort problems if we do it here. */ if (delta1 < delta2) { return (-1) ; } else if (delta1 > delta2) { return (1) ; } /* Prefer non-mad pivots. These need to be pushed up here lest they be trapped behind tiny pivots with equal delta. */ if (mad1 != mad2) { if (mad1 == TRUE) { return (1) ; } else { return (-1) ; } } /* Now we have equal deltas. For degenerate candidates (delta == 0) prefer flippable; for nondegenerate, prefer nonflippable. */ flip1 = dualcand1->flippable ; flip2 = dualcand2->flippable ; if (delta1 == 0) { if (flip1 != flip2) { if (flip1 == TRUE) return (-1) ; else return (1) ; } } else { if (flip1 != flip2) { if (flip1 == FALSE) return (-1) ; else return (1) ; } } /* Equal deltas, and both flippable or nonflippable. Order by nonincreasing pivot ratio. */ ratio1 = dualcand1->ratioik ; ratio2 = dualcand2->ratioik ; if (ratio1 > ratio2) return (-1) ; else if (ratio1 < ratio2) return (1) ; else return (0) ; } static void promoteSanePivot (dualcand_struct *incands) /* This routine attempts to promote a sane pivot high enough in the list to be used. The rationale is this: Mad pivots are tiny. If the delta of a sane pivot is small enough, we won't cause dual infeasibility. Suppose we have two variables x (sane) and x (mad). If (delta-delta)*a < tol then it's a good bet we can promote x past x in the pivot list. So --- our goal is to walk along incands until we find the first sane pivot. If everything up to that point has been flippable, we need do nothing. But if we've passed nonflippable mad pivots, try to promote the sane one. Parameters: incands: (i) the candidate list; incands[0].ndx is the number of candidates (o) the candidate list, possibly rearranged as described Returns: undefined */ { int ndx,candcnt,firstnoflip,firstsane ; double tol ; dualcand_struct sane,insane ; /* Do the initial scan. If we find a sane pivot and havn't run into a non-flippable, non-reverse pivot, all is copacetic and we can return with no further effort. There may be no sane pivots. */ candcnt = incands[0].ndx ; firstnoflip = -1 ; firstsane = -1 ; for (ndx = 1 ; ndx <= candcnt ; ndx++) { if (incands[ndx].madpiv == FALSE) { firstsane = ndx ; break ; } if (firstnoflip < 0 && incands[ndx].flippable == FALSE && incands[ndx].rev == FALSE) { firstnoflip = ndx ; } } if (firstsane < 0 || (firstnoflip < 0 && firstsane > 0)) return ; /* We have a sane pivot at firstsane and we have mad pivots from firstnoflip to firstsane-1. At least the pivot at firstnoflip cannot be flipped. The tolerance is calculated to split the difference in exponent between the zero tolerance and the feasibility tolerance. Reverse pivots can always be stepped over. */ tol = log10(dy_tols->dfeas/dy_tols->cost)/2 ; tol = dy_tols->cost*pow(10.0,tol) ; for (ndx = firstsane ; ndx > firstnoflip ; ndx--) { sane = incands[ndx] ; insane = incands[ndx-1] ; if (insane.rev == TRUE || (sane.ddelta-insane.ddelta)*insane.abarik < tol) { incands[ndx-1] = sane ; incands[ndx] = insane ; } else { break ; } } /* That's it. With any luck, we've promoted a sane candidate to a place where it can be used. */ # ifndef DYLP_NDEBUG if ((dy_opts->print.pivoting >= 2 && ndx == firstnoflip) || dy_opts->print.pivoting >= 3) { int j ; j = incands[firstnoflip].ndx ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t first no-flip %s (%d) at %d, ", consys_nme(dy_sys,'v',j,FALSE,NULL),j,firstnoflip) ; j = incands[firstsane].ndx ; dyio_outfmt(dy_logchn,dy_gtxecho,"first sane %s (%d) at %d", consys_nme(dy_sys,'v',j,FALSE,NULL),j,firstsane) ; dyio_outfmt(dy_logchn,dy_gtxecho,", promoted to %d. ",ndx) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) { if (firstsane > 1 && ndx == 1) dy_stats->dmulti.promote++ ; } # endif return ; } static dyret_enum scanForDualInCands (dualcand_struct *incands, int outdir, double *abari, double maxabari) /* This routine scans the nonbasic variables for candidates to become the entering variable; the criteria are outlined below at the head of the scan loop. Candidates are stored in the incands array. For each candidate, we record the index, magnitude of the pivot and dual delta, whether the pivot is unstable, and whether or not the variable is flippable. Once we've completed the scan, multiple candidates are sorted. The primary sort order is nondecreasing dual delta, delta. * Within the degenerate pivot group, delta == 0, we can flip variables at will, so the secondary sort orders are flippable < nonflippable, then nonincreasing ratio. Paraphrased, flip all we can, and pivot on the variable with the most stable pivot. But hope that all degenerate variables are flippable and we can move on to ... * The nondegenerate group, where we need to be more circumspect. To flip a variable, we need to drive the reduced cost past zero to the opposite sign. So, to flip a variable with a given delta, we actually need to pivot on a variable with a greater delta. Sort nonflippable < flippable, then nonincreasing ratio. Then we don't worry about flipping when we're going to have to pivot, and we'll get the most stable pivot. Parameters: incands: (i) pointer to array to hold the candidates for entry (o) filled and sorted array; in particular incands[0].ndx is the number of candidates incands[1..] are the candidates outdir: direction of motion of the leaving variable x abari: The transformed pivot row, row i of inv(B)N maxabari: The maximum value in the pivot row abar Returns: dyrOK if there are candidates and no errors dyrUNBOUND if there are no candidates dyrFATAL on error (only when we're paranoid) */ { int n,k,reject,candcnt,dirk ; double abarik,cbark,deltak,ratioik ; double *vub,*vlb ; flags statk ; bool rev ; dyret_enum retval ; # ifdef DYLP_PARANOIA const char *rtnnme = "scanForDualInCands" ; # endif # if !defined(DYLP_NDEBUG) || defined(DYLP_PARANOIA) int print ; print = dy_opts->print.pivoting ; /* suppress print in dy_chkpiv */ dy_opts->print.pivoting = 0 ; # endif # ifdef DYLP_PARANOIA if (incands == NULL) { errmsg(2,rtnnme,"incands array") ; return (dyrFATAL) ; } # endif n = dy_sys->varcnt ; vub = dy_sys->vub ; vlb = dy_sys->vlb ; incands[0].ndx = -1 ; # ifndef DYLP_NDEBUG if (print >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n gathering candidates to enter ... ") ; if (print >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tVariable\t cbar\tabar\t delta\tDisp") ; } } # endif /* Open a loop and scan for suitable nonbasic variables. Note that we shouldn't see superbasics here, as we're primal infeasible while running dual simplex and superbasics should not be created. Nor should we see nonbasic free variables; they can't be nonbasic in a dual feasible solution. dy_chkstatus enforces this when we're paranoid. */ candcnt = 0 ; for (k = 1 ; k <= n ; k++) { if (dy_lp->degen > 0 && dy_ddegenset[k] != dy_lp->degen) continue ; # ifdef DYLP_PARANOIA if (dy_chkstatus(k) == FALSE) { incands[0].ndx = -1 ; dy_opts->print.pivoting = print ; return (dyrFATAL) ; } # endif /* Test if x is a candidate to enter: * exclude basic and NBFX variables, * exclude if abar == 0, * exclude if the sign of abar is wrong given the direction of motion for x and x, * flag x if abar is too small to be stable. Case analysis for cbar = -cbar/abar yields: * x rising to lb and leaving, cbar to be >= 0 + x nonbasic at l, c >= 0, implies abar must be <= 0 + x nonbasic at u, c <= 0, implies abar must be >= 0 * x dropping to ub and leaving, cbar to be <= 0 + x nonbasic at l, c >= 0, implies abar must be >= 0 + x nonbasic at u, c <= 0, implies abar must be <= 0 Some fancy footwork for dealing with variables where cbar has the wrong sign, but is within the dual feasibility tolerance: Case analysis says that we can deal with this by lying about status and reversing the normal direction of motion for the entering primal. (For example, if x is NBLB but -dfeas < cbar < 0, claim x is NBUB for purposes of evaluating it, and note that when x enters it will decrease, becoming BLLB). That won't quite get us out of trouble, though. Suppose we have a variable x that's NBLB with cbar < 0 and abar < 0 (i.e., the pivot is the wrong sign for the `slightly infeasible' case). We can safely ignore the case where the pivot is the wrong sign when a candidate variable is dual feasible. But if it's slightly infeasible, we can't be so cavalier. The risk is that we'll decide to do a nondegenerate pivot with a candidate x where abar < 0 (a standard NBLB candidate, or a slightly infeasible NBUB candidate). Then we'll drive cbar further into infeasibility, and may well lose dual feasibility. The solution is to declare x a candidate for a normal degenerate pivot by forcing cbark to 0 below. */ statk = dy_status[k] ; cbark = dy_cbar[k] ; if ((flgon(statk,vstatNBUB) && cbark > 0) || (flgon(statk,vstatNBLB) && cbark < 0)) { comflg(statk,vstatNBUB|vstatNBLB) ; rev = TRUE ; } else { rev = FALSE ; } reject = 0 ; abarik = abari[k] ; if (flgon(statk,vstatBASIC|vstatNBFX)) { reject = -1 ; } else if (withintol(abarik,0.0,dy_tols->zero)) { reject = -2 ; } else { if (outdir == -1) { if ((flgon(statk,vstatNBUB) && abarik > 0) || (flgon(statk,vstatNBLB) && abarik < 0)) { reject = -3 ; } } else { if ((flgon(statk,vstatNBUB) && abarik < 0) || (flgon(statk,vstatNBLB) && abarik > 0)) { reject = -3 ; } } } if (rev == TRUE && reject == -3) { cbark = 0 ; rev = FALSE ; comflg(statk,vstatNBUB|vstatNBLB) ; reject = 0 ; } if (reject >= 0) { ratioik = dy_chkpiv(abarik,maxabari) ; if (ratioik < 1.0) { reject = 1 ; } } else { ratioik = quiet_nan(0) ; } # ifndef DYLP_NDEBUG if (print >= 5 || (print >= 4 && reject >= 0)) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%-8s (%d)", consys_nme(dy_sys,'v',k,FALSE,NULL),k) ; dyio_outfmt(dy_logchn,dy_gtxecho,"\t%8g\t%8g",cbark,abarik) ; if (print >= 5) { switch (reject) { case -1: { dyio_outfmt(dy_logchn,dy_gtxecho,"\t\trejected -- status %s", dy_prtvstat(statk)) ; break ; } case -2: { dyio_outfmt(dy_logchn,dy_gtxecho,"\t\trejected -- zero pivot") ; break ; } case -3: { dyio_outfmt(dy_logchn,dy_gtxecho, "\t\trejected -- wrong sign abar") ; break ; } } } } # endif if (reject < 0) continue ; /* x is a possible candidate for entry. Record it in incands with its associated dual delta. For reverse pivots, negate the deltak to make sure it ends up at the very front of the list. */ incands[++candcnt].ndx = k ; incands[candcnt].abarik = fabs(abarik) ; incands[candcnt].ratioik = ratioik ; if (reject == 1) { incands[candcnt].madpiv = TRUE ; } else { incands[candcnt].madpiv = FALSE ; } deltak = fabs(cbark/abarik) ; if (rev == TRUE) { incands[candcnt].rev = TRUE ; incands[candcnt].ddelta = -deltak ; comflg(statk,vstatNBLB|vstatNBUB) ; } else { incands[candcnt].rev = FALSE ; incands[candcnt].ddelta = deltak ; } if (outdir == -1) { if (abarik > 0) { dirk = 1 ; } else { dirk = -1 ; } } else { if (abarik > 0) { dirk = -1 ; } else { dirk = 1 ; } } if (rev == FALSE) { incands[candcnt].pivdir = dirk ; } else { incands[candcnt].pivdir = -dirk ; } if (flgon(statk,vstatNBUB)) { if (vlb[k] > -dy_tols->inf) { incands[candcnt].flippable = TRUE ; incands[candcnt].flip.delta = vlb[k]-vub[k] ; } else { incands[candcnt].flippable = FALSE ; } } else { if (vub[k] < dy_tols->inf) { incands[candcnt].flippable = TRUE ; incands[candcnt].flip.delta = vub[k]-vlb[k] ; } else { incands[candcnt].flippable = FALSE ; } } # ifndef DYLP_NDEBUG if (print >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\t%8g\t accepted",deltak) ; if (reject == 1) { dyio_outfmt(dy_logchn,dy_gtxecho," (mad)") ; } if (deltak == 0) { dyio_outfmt(dy_logchn,dy_gtxecho," (degen)") ; } if (incands[candcnt].flippable == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho," (flip)") ; } if (rev == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho," (rev)") ; } } # endif } /* If we have a list of candidates, sort the list. If we have no candidates, we're unbounded. The assignments to incands[0].[ddelta,madpiv] are targetted at a quirk of qsort: it seems to occasionally sort incands[0]. An optimization of some sort, presumably. */ incands[0].ndx = candcnt ; incands[0].ddelta = -dy_tols->inf ; incands[0].madpiv = FALSE ; if (candcnt > 0) { if (candcnt > 1) { qsort(&incands[1],candcnt,sizeof(dualcand_struct),dualcand_cmp) ; } retval = dyrOK ; } else { retval = dyrUNBOUND ; } /* Now try a little bit of an optimization, to push decent pivots up past mad pivots. */ # ifndef DYLP_NDEBUG dy_opts->print.pivoting = print ; # endif promoteSanePivot(incands) ; # ifndef DYLP_NDEBUG if (print >= 1) { if (print >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n ") ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tVariable\tratio\tdelta") ; for (n = 1 ; n <= candcnt ; n++) { k = incands[n].ndx ; ratioik = incands[n].ratioik ; deltak = incands[n].ddelta ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%-8s (%d)", consys_nme(dy_sys,'v',k,FALSE,NULL),k) ; dyio_outfmt(dy_logchn,dy_gtxecho,"\t%8g\t%8g",ratioik,deltak) ; if (incands[n].madpiv == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho," (mad)") ; } if (deltak == 0) { dyio_outfmt(dy_logchn,dy_gtxecho," (degen)") ; } if (incands[n].flippable == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho," (flip)") ; } statk = dy_status[k] ; if ((flgon(statk,vstatNBUB) && incands[n].pivdir == 1) || (flgon(statk,vstatNBLB) && incands[n].pivdir == -1)) { dyio_outfmt(dy_logchn,dy_gtxecho," (rev)") ; } if (n > 1) { dyio_outfmt(dy_logchn,dy_gtxecho, " (%g)",deltak-incands[n-1].ddelta) ; } } dyio_outfmt(dy_logchn,dy_gtxecho,"\n ") ; } dyio_outfmt(dy_logchn,dy_gtxecho,"%d candidates.",candcnt) ; if (retval != dyrOK) { dyio_outfmt(dy_logchn,dy_gtxecho, " Returning %s.",dy_prtdyret(retval)) ; } } dy_opts->print.pivoting = print ; # endif return (retval) ; } static int calcInfChange (dualcand_struct *candk, int i, double *xbasic) /* This routine calculates the change in primal infeasibility due to the change in the value of x under two assumptions: * x is the pivot variable * x will be flipped to its opposite bound Parameters: candk: (i) dualcand structure for x (o) information for x pivoted or flipped is set i: index of x, the leaving variable xbasic: (i/o) current values of basic variables; updated with each pricing to reflect the effect of flipping the candidate. Returns: 1 if the calculation completes without error, and x is still infeasible 0 if the calculation completes without error, and the flip makes x feasible -1 if there's an error. */ { int m,ipos ; flags stati ; double *vlb,*vub ; double xi,lbi,ubi,deltai ; int k ; double newxk,lbk,ubk,pivdeltak,flipdeltak, pivinf,maxpivinf,flipinf,maxflipinf ; double *abark,abarik ; bool flippable ; flags statk ; int l,lpos ; double xl,newxl,lbl,ubl,abarlk,curinf,infl ; const char *rtnnme = "calcInfChange" ; # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->dmulti.evals++ ; # endif m = dy_sys->concnt ; vub = dy_sys->vub ; vlb = dy_sys->vlb ; /* Get x, its status and upper and lower bounds, and calculate delta. */ ipos = dy_var2basis[i] ; xi = xbasic[ipos] ; stati = dy_status[i] ; ubi = vub[i] ; lbi = vlb[i] ; if (flgon(stati,vstatBUUB)) { deltai = ubi-xi ; } else { deltai = lbi-xi ; } /* Get k, its status, and upper and lower bounds. */ k = candk->ndx ; statk = dy_status[k] ; lbk = vlb[k] ; ubk = vub[k] ; if (candk->flippable == TRUE) { flippable = TRUE ; flipdeltak = candk->flip.delta ; } else { flippable = FALSE ; flipdeltak = quiet_nan(0) ; } /* Retrieve a, calculate abar, then calculate the delta for the case where x is chosen as the entering variable. */ abark = NULL ; if (consys_getcol_ex(dy_sys,k,&abark) == FALSE) { errmsg(122,rtnnme,dy_sys->nme, "column",consys_nme(dy_sys,'v',k,TRUE,NULL),k) ; if (abark != NULL) FREE(abark) ; return (-1) ; } dy_ftran(abark,FALSE) ; abarik = abark[ipos] ; pivdeltak = -deltai/abarik ; setcleanzero(pivdeltak,dy_tols->zero) ; candk->piv.delta = pivdeltak ; pivinf = 0 ; if (pivdeltak < 0) { /* candk->pivdir = -1 ; */ newxk = ubk+pivdeltak ; if (belowbnd(newxk,lbk)) { pivinf = lbk-newxk ; } } else { /* candk->pivdir = 1 ; */ newxk = lbk+pivdeltak ; if (abovebnd(newxk,ubk)) { pivinf = newxk-ubk ; } } maxpivinf = pivinf ; /* Now it's just a straightforward grind. For each basic variable x s.t. abar != 0, calculate the affect on primal feasibility for x pivoted and flipped. abark should be groomed, so we can test for abar == 0. Update xbasic when we calculate the effect of the flip. Note that we need to consider unaffected x when calculating the max values --- they will hold for both pivot and flip. */ curinf = 0 ; flipinf = 0 ; maxflipinf = 0 ; for (lpos = 1 ; lpos <= m ; lpos++) { l = dy_basis[lpos] ; xl = xbasic[lpos] ; lbl = vlb[l] ; ubl = vub[l] ; if (abovebnd(xl,ubl)) { infl = xl-ubl ; } else if (belowbnd(xl,lbl)) { infl = lbl-xl ; } else { infl = 0 ; } abarlk = abark[lpos] ; if (abarlk == 0) { if (infl > maxpivinf) maxpivinf = infl ; if (infl > maxflipinf) maxflipinf = infl ; continue ; } curinf += infl ; newxl = xl-abarlk*pivdeltak ; if (abovebnd(newxl,ubl)) { infl = newxl-ubl ; } else if (belowbnd(newxl,lbl)) { infl = lbl-newxl ; } else { infl = 0 ; } pivinf += infl ; if (infl > maxpivinf) maxpivinf = infl ; if (flippable == TRUE) { newxl = xl-abarlk*flipdeltak ; if (abovebnd(newxl,ubl)) { infl = newxl-ubl ; } else if (belowbnd(newxl,lbl)) { infl = lbl-newxl ; } else { infl = 0 ; } xbasic[lpos] = newxl ; flipinf += infl ; if (infl > maxflipinf) maxflipinf = infl ; } } candk->piv.inf = -curinf+pivinf ; candk->piv.maxinf = maxpivinf ; if (flippable == TRUE) { candk->flip.inf = -curinf+flipinf ; candk->flip.maxinf = maxflipinf ; } # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%s (%d) piv = %g, pivmax = %g", consys_nme(dy_sys,'v',k,FALSE,NULL),k, candk->piv.inf,candk->piv.maxinf) ; if (flippable == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho," flip = %g, flipmax = %g", candk->flip.inf,candk->flip.maxinf) ; } dyio_outfmt(dy_logchn,dy_gtxecho," pivdelta = %g",pivdeltak) ; if (flippable == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho," flipdelta = %g",flipdeltak) ; } } # endif /* That's it. The final thing we need to do is check on the status of the entering variable x. If this flip would change it, we have to disallow the flip. */ FREE(abark) ; xi = xbasic[ipos] ; if ((flgon(stati,vstatBUUB) && !abovebnd(xi,ubi)) || (flgon(stati,vstatBLLB) && !belowbnd(xi,lbi))) { return (0) ; } else { return (1) ; } } bool selectWithInf (int i, dualcand_struct *incands, int *indices, double *candinf, double *startinf) /* This routine scans the list of candidates x, calculating the primal infeasibility over all basic variables if x is flipped and if it's chosen as the pivot. This is an expensive calculation, because we'll need to calculate inv(B)a for each variable that we price. The candidates in incands are assumed to be sorted (see the comments with scanForDualInCands), and the calculation of infeasibility is based on the notion that all variables preceding the variable under evaluation will be flipped. In the end, selectWithInf will return up to three indices: (1) An index marking the end of a sequence of flips, with no final pivot, chosen so as to minimise the maximum primal infeasibility. (2) An index marking the end of a sequence of flips, with a final pivot, chose so as to minimise the maximum primal infeasibility. (3) An index marking the end of the longest possible sequence of flips, with a final pivot. Any or all of the above can be -1, indicating that there was no qualified candidate with the required qualities. Parameters: i: The index of x, the entering variable. incands: The list of candidates, indexed from 1. incands[0].ndx is the number of candidates. indices: (i) An array with three entries. (o) The index for candidate k is in indices[k-1]. candinf: (i) An array with three entries. (o) The infeasibilities corresponding to the candidates specified in indices. startinf (i) An array with two entries. (o) [0] is total infeasibility [1] is maximum infeasibility Returns: TRUE if the selection process proceeds without error, FALSE otherwise. */ { int m,j,jpos ; double xj,lbj,ubj,infj ; double *vlb,*vub ; double starttotinf,startmaxinf ; double *xbasic ; int ndx,candcnt,price_retval ; double flipinfk,pivinfk,totinfk ; int bestflipcand,bestpivcand,lastpivcand ; double bestflipinf,bestpivinf,lastpivinf ; bool pivEndsScan,flipEndsScan ; dualcand_struct *candk ; const char *rtnnme = "selectWithInf" ; # ifndef DYLP_NDEBUG int lastdegen = 0 ; # endif m = dy_sys->concnt ; vlb = dy_sys->vlb ; vub = dy_sys->vub ; /* We have multiple candidates and at least a chance to flip variables. To properly calculate the change in infeasibility, we'll need to know the infeasibility now, and we'll need a copy of xbasic that we can modify as we go. */ xbasic = (double *) MALLOC((m+1)*sizeof(double)) ; starttotinf = 0 ; startmaxinf = 0 ; for (jpos = 1 ; jpos <= m ; jpos++) { xbasic[jpos] = dy_xbasic[jpos] ; xj = xbasic[jpos] ; j = dy_basis[jpos] ; lbj = vlb[j] ; ubj = vub[j] ; infj = 0 ; if (belowbnd(xj,lbj)) { infj = lbj-xj ; } else if (abovebnd(xj,ubj)) { infj = xj-ubj ; } if (infj > startmaxinf) startmaxinf = infj ; starttotinf += infj ; } startinf[0] = starttotinf ; startinf[1] = startmaxinf ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n starting inf tot = %g, max = %g", starttotinf,startmaxinf) ; } # endif /* # ifdef DYLP_PARANOIA if (dy_lp->d2.iters > 0 && predictiter+1 == dy_lp->d2.iters) { if (!atbnd(predicttotinf,starttotinf)) { dywarn(350,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "total",predicttotinf,predictiter, starttotinf,predicttotinf-starttotinf) ; } if (!atbnd(predictmaxinf,startmaxinf)) { dywarn(350,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "maximum",predictmaxinf,predictiter, startmaxinf,predictmaxinf-startmaxinf) ; } } # endif */ /* For better or worse, we'll stick with the sort order while deciding what to do. calcInfChange will price a candidate x, determining the change in primal infeasibility when we flip the variable and when we choose it as the pivot. This is expensive, because we have to calculate inv(B)a to do the calculation. The predicted maximum primal infeasibility when we use a variable x as a pivot (piv.maxinf), includes the change due to flipping all candidates prior to x in the candidate list. The first nonflippable variable stops the scan --- we have to use it to pivot. Within the set of degenerate candidates, we can choose to do only flips. Once we get to nondegenerate candidates, we need to do a pivot with a dual delta greater than previous candidates in order to flip the previous candidates. We're perfectly happy to flip variables with mad pivots, but we won't use them as pivot candidates. */ bestpivcand = -1 ; bestflipcand = -1 ; lastpivcand = -1 ; bestpivinf = dy_tols->inf ; bestflipinf = dy_tols->inf ; lastpivinf = quiet_nan(0) ; pivEndsScan = FALSE ; flipEndsScan = FALSE ; candcnt = incands[0].ndx ; totinfk = 0 ; /* Scan the degenerate pivots. If we run across a nonflippable, nonreverse variable, we've found our entering variable. It's also possible that the cumulative effect of flips up to and including cand will make x feasible or drive it right past the opposite bound (price_retval == 0). In that case, we stop with cand, and can choose to flip it or pivot on it. Note that for reverse pivots, the primal variable will not change bound (we're recovering from slight dual infeasibility). */ for (ndx = 1,candk = &incands[1] ; candk->ddelta <= 0 && ndx <= candcnt ; ndx++,candk++) { if (candk->rev == FALSE) { price_retval = calcInfChange(candk,i,xbasic) ; } else { price_retval = 1 ; } if (price_retval < 0) { FREE(xbasic) ; errmsg(348,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters+1, consys_nme(dy_sys,'v',candk->ndx,FALSE,NULL),candk->ndx) ; return (FALSE) ; } flipinfk = candk->flip.maxinf ; pivinfk = candk->piv.maxinf ; totinfk += candk->flip.inf ; # if 0 predicttotinf = 0 ; for (jpos = 1 ; jpos <= m ; jpos++) { xj = xbasic[jpos] ; j = dy_basis[jpos] ; lbj = vlb[j] ; ubj = vub[j] ; if (belowbnd(xj,lbj)) { predicttotinf += lbj-xj ; } else if (abovebnd(xj,ubj)) { predicttotinf += xj-ubj ; } } if (dy_opts->print.pivoting >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n debug piv = %g, flip = %g, tot = %g, infeasibility = %g", pivinfk,flipinfk,totinfk,predicttotinf) ; } # endif if (candk->madpiv == FALSE) { lastpivcand = ndx ; lastpivinf = pivinfk ; if (pivinfk < bestpivinf) { bestpivcand = ndx ; bestpivinf = pivinfk ; } } if (candk->flippable == FALSE && candk->rev == FALSE) { pivEndsScan = TRUE ; break ; } if (flipinfk < bestflipinf) { bestflipcand = ndx ; bestflipinf = flipinfk ; } if (price_retval == 0) { flipEndsScan = TRUE ; if (candk->madpiv == FALSE) { lastpivcand = ndx ; lastpivinf = pivinfk ; } break ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 2 && ndx > 1) { if (pivEndsScan == TRUE || flipEndsScan == TRUE) { jpos = ndx ; } else { jpos = ndx-1 ; } lastdegen = jpos ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n after %d degen",jpos) ; if (bestflipcand > 0) { j = incands[bestflipcand].ndx ; dyio_outfmt(dy_logchn,dy_gtxecho, ", best flip #%d, %s (%d) = %g",bestflipcand, consys_nme(dy_sys,'v',j,FALSE,NULL),j,bestflipinf) ; } if (bestpivcand > 0) { j = incands[bestpivcand].ndx ; dyio_outfmt(dy_logchn,dy_gtxecho,", best piv #%d, %s (%d) = %g", bestpivcand, consys_nme(dy_sys,'v',j,FALSE,NULL),j,bestpivinf) ; } if (lastpivcand > 0) { j = incands[lastpivcand].ndx ; dyio_outfmt(dy_logchn,dy_gtxecho,", last piv #%d, %s (%d) = %g", lastpivcand, consys_nme(dy_sys,'v',j,FALSE,NULL),j,lastpivinf) ; } if (bestflipcand < 0 && bestpivcand < 0 && lastpivcand < 0) { dyio_outfmt(dy_logchn,dy_gtxecho,", nothing") ; } dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } # endif /* If we're not done, continue to scan the nondegenerate pivots. We no longer have the choice of just flipping, so we're only searching for a pivot candidate. If we get a return value of 0 from calcInfChange, it means we have to pivot at that variable. */ if (pivEndsScan == FALSE && flipEndsScan == FALSE) { for ( ; ndx <= candcnt ; ndx++,candk++) { price_retval = calcInfChange(candk,i,xbasic) ; if (price_retval < 0) { FREE(xbasic) ; errmsg(348,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters+1, consys_nme(dy_sys,'v',candk->ndx,FALSE,NULL),candk->ndx) ; return (FALSE) ; } flipinfk = candk->flip.maxinf ; pivinfk = candk->piv.maxinf ; totinfk += candk->flip.inf ; # if 0 bestinf = 0 ; for (jpos = 1 ; jpos <= m ; jpos++) { xj = xbasic[jpos] ; j = dy_basis[jpos] ; lbj = vlb[j] ; ubj = vub[j] ; if (belowbnd(xj,lbj)) { bestinf += lbj-xj ; } else if (abovebnd(xj,ubj)) { bestinf += xj-ubj ; } } if (dy_opts->print.pivoting >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n debug piv = %g, flip = %g, tot = %g, infeasibility = %g", pivinfk,flipinfk,starttotinf,bestinf) ; } # endif if (candk->madpiv == FALSE) { lastpivcand = ndx ; lastpivinf = pivinfk ; if (pivinfk < bestpivinf) { bestpivcand = ndx ; bestpivinf = pivinfk ; } } if (candk->flippable == FALSE || price_retval == 0) { pivEndsScan = TRUE ; if (candk->madpiv == FALSE) { lastpivcand = ndx ; lastpivinf = pivinfk ; } break ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 2) { if (pivEndsScan == TRUE || flipEndsScan == TRUE) { jpos = ndx ; } else { jpos = ndx-1 ; } dyio_outfmt(dy_logchn,dy_gtxecho, "\n after %d nondegen",jpos-lastdegen) ; if (bestflipcand > 0) { j = incands[bestflipcand].ndx ; dyio_outfmt(dy_logchn,dy_gtxecho, ", best flip #%d, %s (%d) = %g",bestflipcand, consys_nme(dy_sys,'v',j,FALSE,NULL),j,bestflipinf) ; } if (bestpivcand > 0) { j = incands[bestpivcand].ndx ; dyio_outfmt(dy_logchn,dy_gtxecho, ", best piv #%d, %s (%d) = %g",bestpivcand, consys_nme(dy_sys,'v',j,FALSE,NULL),j,bestpivinf) ; } if (lastpivcand > 0) { j = incands[lastpivcand].ndx ; dyio_outfmt(dy_logchn,dy_gtxecho, ", last piv #%d, %s (%d) = %g",lastpivcand, consys_nme(dy_sys,'v',j,FALSE,NULL),j,lastpivinf) ; } if (bestflipcand < 0 && bestpivcand < 0 && lastpivcand < 0) { dyio_outfmt(dy_logchn,dy_gtxecho,", nothing") ; } dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } # endif } FREE(xbasic) ; # ifdef DYLP_PARANOIA if ((bestpivcand > 0 && lastpivcand < 0) || (bestpivcand < 0 && lastpivcand > 0)) { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } # endif /* Load up the return values and we're done. */ indices[0] = bestflipcand ; indices[1] = bestpivcand ; indices[2] = lastpivcand ; if (bestflipcand > 0) { candinf[0] = bestflipinf ; } else { candinf[0] = quiet_nan(0) ; } if (bestpivcand > 0) { candinf[1] = bestpivinf ; } else { candinf[0] = quiet_nan(0) ; } if (lastpivcand > 0) { candinf[2] = lastpivinf ; } else { candinf[0] = quiet_nan(0) ; } return (TRUE) ; } bool selectWithoutInf (int i, double *abari, dualcand_struct *incands, int *indices) /* This routine scans the list of candidates x, calculating the primal infeasibility of the leaving variable x if x is flipped and if it's chosen as the pivot. This is pretty cheap, because we already have the pivot row handy. The candidates in incands are assumed to be sorted (see the comments with scanForDualInCands), and the calculation of infeasibility is based on the notion that all variables preceding the variable under evaluation will be flipped (or are reverse pivots, correcting slight dual infeasibility). In the end, selectWithoutInf will return up to two indices: (1) An index marking the end of the longest possible sequence of flips, with no final pivot. (2) (Reserved, for compatibility with selectWithInf.) (3) An index marking the end of the longest possible sequence of flips, with a final pivot. Any or all of the above can be -1, indicating that there was no qualified candidate with the required qualities. Parameters: i: The index of x, the entering variable. abari: The pivot row inv(B)N. incands: The list of candidates, indexed from 1. incands[0].ndx is the number of candidates. indices: (i) An array with three entries. (o) The index for candidate k is in indices[k-1]. indices[1] is always -1. Returns: TRUE if the selection process proceeds without error, FALSE otherwise. */ { int m ; double *vlb,*vub ; int ipos ; double xi,lbi,ubi ; flags stati ; int k ; double lbk,ubk,deltak,abarik ; flags statk ; double startinf ; int ndx,candcnt ; int lastflipcand,lastpivcand ; bool pivEndsScan,flipEndsScan,flipsOnly ; dualcand_struct *candk ; # ifndef DYLP_NDEBUG int j,jndx,lastdegen ; lastdegen = 0 ; # endif /* # ifdef DYLP_PARANOIA const char *rtnnme = "selectWithOutInf" ; # endif */ m = dy_sys->concnt ; vlb = dy_sys->vlb ; vub = dy_sys->vub ; /* We have multiple candidates and at least a chance to flip variables. To properly track the change in infeasibility for x, we'll need to know the infeasibility now. */ ipos = dy_var2basis[i] ; stati = dy_status[i] ; xi = dy_x[i] ; ubi = vub[i] ; lbi = vlb[i] ; if (flgon(stati,vstatBUUB)) { startinf = xi-ubi ; } else { startinf = lbi-xi ; } # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n starting inf<%d> = %g",i,startinf) ; } # endif /* # ifdef DYLP_PARANOIA if (dy_lp->d2.iters == 0) { predictinf = 0 ; predictiter = 0 ; } else if (dy_lp->d2.iters > 0 && predictiter+1 == dy_lp->d2.iters) { if (!atbnd(predictinf,startinf)) { dywarn(350,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "x",predictinf,predictiter,startinf,predictinf-startinf) ; } } # endif */ /* For better or worse, we'll stick with the sort order while deciding what to do. Given that we're only tracking the infeasibility of the leaving variable x, we walk the candidates until a sequence of flips makes x feasible, or until we come across a variable we have to use as a pivot. We're perfectly happy to flip variables with mad pivots, but we won't use them as pivot candidates. */ lastflipcand = -1 ; lastpivcand = -1 ; pivEndsScan = FALSE ; flipEndsScan = FALSE ; candcnt = incands[0].ndx ; /* Scan the degenerate and reverse pivots. The scan ends when we run into a nonflippable, non-reverse candidate, or when the accumulated effect of flips drives x within bounds or right out the other side of its feasible region. Any x with a stable pivot (including reverse) is a candidate for pivoting. The primal variable associated with a reverse pivot will not actually flip (remember, we're recovering from slight dual infeasibility). We'll consider a sequence of flips until the accumulated change drives x into or through feasibility. If x ends up feasible, then it's possible to consider a `pivot' sequence that has only flips, with no final pivot. Mad pivots are not a problem for flipping --- the flip simply has little effect on x. */ for (ndx = 1,candk = &incands[1] ; ndx <= candcnt && candk->ddelta <= 0 ; ndx++,candk++) { k = candk->ndx ; if (candk->madpiv == FALSE) { lastpivcand = ndx ; } if (candk->flippable == FALSE && candk->rev == FALSE) { pivEndsScan = TRUE ; break ; } if (candk->rev == TRUE) continue ; statk = dy_status[k] ; lbk = vlb[k] ; ubk = vub[k] ; if (flgon(statk,vstatNBLB)) { deltak = ubk-lbk ; } else { deltak = lbk-ubk ; } abarik = abari[k] ; xi -= abarik*deltak ; if ((flgon(stati,vstatBUUB) && !abovebnd(xi,ubi)) || (flgon(stati,vstatBLLB) && !belowbnd(xi,lbi))) { if (withinbnds(lbi,xi,ubi)) { lastflipcand = ndx ; } flipEndsScan = TRUE ; break ; } } /* If flips alone can drive us to feasibility, then we'll consider using a sequence of flips with no final pivot. Note that the condition that x be feasible for a flip-only sequence is not enough to prevent cycling. Consider two basic variables x<1> and x<2> and a nonbasic variable x<3>. I've seen instances where x<1> is selected to leave, and a flip of x<3> drives x<1> feasible and x<2> infeasible. x<2> is now selected to leave, and x<3> is selected to flip, which drives x<2> feasible and x infeasible. Etc., ad infinitum. */ if (flipEndsScan == TRUE && lastflipcand > 0) { flipsOnly = TRUE ; } else { flipsOnly = FALSE ; } # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 2 && ndx >= 1) { if (pivEndsScan == TRUE || flipEndsScan == TRUE) { jndx = ndx ; } else { jndx = ndx-1 ; } lastdegen = jndx ; if (jndx > 0) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n after %d degen",jndx) ; if (lastflipcand > 0) { j = incands[lastflipcand].ndx ; dyio_outfmt(dy_logchn,dy_gtxecho, ", last flip #%d, %s (%d)",lastflipcand, consys_nme(dy_sys,'v',j,FALSE,NULL),j) ; } if (lastpivcand > 0) { j = incands[lastpivcand].ndx ; dyio_outfmt(dy_logchn,dy_gtxecho,", last piv #%d, %s (%d)", lastpivcand,consys_nme(dy_sys,'v',j,FALSE,NULL),j) ; } if (lastflipcand < 0 && lastpivcand < 0) { dyio_outfmt(dy_logchn,dy_gtxecho,", nothing") ; } dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } } # endif /* If we're not done, continue to scan the nondegenerate pivots. We no longer have the choice of just flipping, so we're only searching for a pivot candidate. But we still need to track reductions in x due to flips. */ if (pivEndsScan == FALSE && flipEndsScan == FALSE) { for ( ; ndx <= candcnt ; ndx++,candk++) { k = candk->ndx ; if (candk->madpiv == FALSE) { lastpivcand = ndx ; } if (candk->flippable == FALSE) { pivEndsScan = TRUE ; break ; } statk = dy_status[k] ; lbk = vlb[k] ; ubk = vub[k] ; if (flgon(statk,vstatNBLB)) { deltak = ubk-lbk ; } else { deltak = lbk-ubk ; } abarik = abari[k] ; xi -= abarik*deltak ; if ((flgon(stati,vstatBUUB) && !abovebnd(xi,ubi)) || (flgon(stati,vstatBLLB) && !belowbnd(xi,lbi))) { flipEndsScan = TRUE ; break ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 2) { if (pivEndsScan == TRUE || flipEndsScan == TRUE) { jndx = ndx ; } else { jndx = ndx-1 ; } dyio_outfmt(dy_logchn,dy_gtxecho, "\n after %d nondegen",jndx-lastdegen) ; if (lastflipcand > 0) { j = incands[lastflipcand].ndx ; dyio_outfmt(dy_logchn,dy_gtxecho, ", last flip #%d, %s (%d)",lastflipcand, consys_nme(dy_sys,'v',j,FALSE,NULL),j) ; } if (lastpivcand > 0) { j = incands[lastpivcand].ndx ; dyio_outfmt(dy_logchn,dy_gtxecho,", last piv #%d, %s (%d)",lastpivcand, consys_nme(dy_sys,'v',j,FALSE,NULL),j) ; } if (lastflipcand < 0 && lastpivcand < 0) { dyio_outfmt(dy_logchn,dy_gtxecho,", nothing") ; } dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } # endif } /* Load up the return values and we're done. */ if (flipsOnly == TRUE) { indices[0] = lastflipcand ; } else { indices[0] = -1 ; } indices[1] = -1 ; indices[2] = lastpivcand ; return (TRUE) ; } dyret_enum dualmultiin (int i, int outdir, int *p_xjndx, int *p_indir, double *abari, double maxabari, double **p_abarj) /* Implements the selection algorithm described at the head of the file. If there are variables to flip, the routine will flip them before returning the final pivot variable. On return, p_xjndx and p_indir will be set just as for normal dualin. Parameters: i: index of the leaving variable x outdir: direction of movement of x, 1 if rising to lower bound -1 if falling to upper bound p_xjndx: index of the variable chosen as pivot p_indir: direction of motion for x; 1 for rising, -1 for falling abari: row i of inv(B)N (the pivot row) maxabari: maximum value in abar p_abarj: (o) used to return abar Returns: dyret_enum code, as follows: dyrOK: the pivot is (dual) nondegenerate dyrDEGEN: the pivot is (dual) degenerate dyrUNBOUND: the problem is dual unbounded (primal infeasible) (i.e., no incoming variable can be selected) dyrMADPIV: if a fails the numerical stability test dyrRESELECT: if the routine elects to do only flips dyrFATAL: fatal confusion */ { int n,m,candcnt ; double *vub,*vlb,*accumj ; dyret_enum retval,upd_retval,confirm ; bool swing,reqchk,flipOnly,sel_retval ; int j ; double xj,deltaj,starttotinf,startmaxinf ; flags statj ; int dpstrat,candndx[4] ; double candinf[4],startinf[2] ; int ndx,bestpivcand,bestflipcand,lastpivcand,bestcand ; double bestpivinf,lastpivinf,bestflipinf,bestinf ; dualcand_struct *incands,*candk ; const char *rtnnme = "dualmultiin" ; /* dy_dualpivot.c */ dyret_enum dy_confirmDualPivot(int i, int j, double *abari, double maxabari, double **p_abarj) ; # ifndef DYLP_NDEBUG double infj ; # endif /* Setup */ retval = dyrINV ; *p_xjndx = 0 ; *p_indir = 0 ; n = dy_sys->varcnt ; m = dy_sys->concnt ; vub = dy_sys->vub ; vlb = dy_sys->vlb ; incands = (dualcand_struct *) MALLOC((n-m+1)*sizeof(dualcand_struct)) ; /* Determine our strategy: 1: maximum objective improvement 2: minimum predicted infeasibility 3: infeasibility reduction if possible, otherwise maximum objective improvement. If we move to strategy 2 or 3, loosen dfeas accordingly. Chances are good that these breakpoints and toobig will change, and/or become parameters. Some experimentation is required. */ if (dy_opts->dpsel.flex == TRUE) { if (dy_lp->prim.max > dy_tols->toobig/100) { dy_opts->dpsel.strat = 2 ; } else if (dy_lp->prim.max > dy_tols->toobig/1000) { dy_opts->dpsel.strat = 3 ; } else { dy_opts->dpsel.strat = 1 ; } } dpstrat = dy_opts->dpsel.strat ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: selecting entering variable, strategy %d", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters+1,dpstrat) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->dmulti.cnt++ ; # endif /* Generate a sorted list of candidates to enter. No candidates means we're dual unbounded (dyrUNBOUND). Fatal error (dyrFATAL) is possible only if we're paranoid. */ retval = scanForDualInCands(incands,outdir,abari,maxabari) ; if (retval != dyrOK) { *p_xjndx = -1 ; FREE(incands) ; return (retval) ; } candk = &incands[0] ; candcnt = candk->ndx ; candk++ ; # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->dmulti.cands += candcnt ; # endif /* If we have only one candidate, or the first candidate isn't flippable, we have no choice. Confirm that there's no numerical drift, then we can return, saving a large amount of work. */ if (candcnt == 1 || (candk->flippable == FALSE && candk->rev == FALSE)) { *p_xjndx = candk->ndx ; *p_indir = candk->pivdir ; if (candk->madpiv == TRUE) { retval = dyrMADPIV ; } else if (candk->ddelta == 0) { retval = dyrDEGEN ; } else { retval = dyrOK ; } confirm = dy_confirmDualPivot(i,candk->ndx,abari,maxabari,p_abarj) ; if (confirm != dyrOK) retval = confirm ; FREE(incands) ; return (retval) ; } /* We have multiple candidates and at least a chance to flip variables or correct slight infeasibilities. The question is how much effort we'll need to put into pricing. If primal magnitudes are reasonable, we can attempt to select a sequence considering only the dual objective (i.e., find the longest sequence). If the primal magnitudes are over the top, we'd better pay attention to primal infeasibility. Note that the various infeasibilities are not considered in any way for strategy #1. The assignment below (quiet_nan) mollifies access checking and guarantees we'll see the effect of improper use. */ # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->dmulti.nontrivial++ ; # endif if (dpstrat == 1) { sel_retval = selectWithoutInf(i,abari,incands,candndx) ; } else { sel_retval = selectWithInf(i,incands,candndx,candinf,startinf) ; } if (sel_retval == FALSE) { FREE(incands) ; return (dyrFATAL) ; } bestflipcand = candndx[0] ; bestpivcand = candndx[1] ; lastpivcand = candndx[2] ; if (dpstrat != 1) { bestflipinf = candinf[0] ; bestpivinf = candinf[1] ; lastpivinf = candinf[2] ; starttotinf = startinf[0] ; startmaxinf = startinf[1] ; } else { bestflipinf = quiet_nan(0) ; bestpivinf = quiet_nan(0) ; lastpivinf = quiet_nan(0) ; starttotinf = quiet_nan(0) ; startmaxinf = quiet_nan(0) ; } # if (!defined(DYLP_NDEBUG) || defined(DYLP_PARANOIA)) if (dpstrat == 1) { if (flgon(dy_status[i],vstatBLLB)) { starttotinf = vlb[i]-dy_x[i] ; } else { starttotinf = dy_x[i]-vub[i] ; } } # endif /* What shall we do? * dualmultipiv == 1 forces lastpivcand (max dual objective change) * dualmultipiv == 2 forces bestpivcand (min predicted infeasibility) * dualmultipiv == 3 will choose bestpivcand only if there's an actual reduction in infeasibility; otherwise, it'll choose lastpivcand, unless lastpivcand is degenerate, in which case it'll go back to bestpivcand. Note that bestpivcand > 0 iff lastpivcand > 0. If we have no pivot candidate, we'll consider doing only flips, but only if it'll actually reduce infeasibility. In the event that we have no pivot candidate and can't or choose not to flip, return the first candidate (which will be a mad pivot). */ switch (dpstrat) { case 1: { bestcand = lastpivcand ; bestinf = lastpivinf ; break ; } case 2: { bestcand = bestpivcand ; bestinf = bestpivinf ; break ; } case 3: { if (bestpivcand > 0) { if (bestpivinf < startmaxinf) { bestcand = bestpivcand ; bestinf = bestpivinf ; } else if (incands[lastpivcand].ddelta > 0) { bestcand = lastpivcand ; bestinf = lastpivinf ; } else { bestcand = bestpivcand ; bestinf = bestpivinf ; } } else { bestcand = -1 ; bestinf = quiet_nan(0) ; } break ; } default: { errmsg(1,rtnnme,__LINE__) ; FREE(incands) ; return (dyrFATAL) ; } } flipOnly = FALSE ; if (bestcand <= 0) { if (dy_opts->dpsel.allownopiv == TRUE && bestflipcand > 0 && (dpstrat == 1 || bestflipinf < startmaxinf)) { flipOnly = TRUE ; bestcand = bestflipcand ; bestinf = bestflipinf ; } else { bestcand = 1 ; } } candk = &incands[bestcand] ; # ifdef DYLP_STATISTICS if (dy_stats != NULL && bestcand > 0) { dy_stats->dmulti.pivrnks += bestcand ; if (dy_stats->dmulti.maxrnk < bestcand) dy_stats->dmulti.maxrnk = bestcand ; } # endif # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) { j = candk->ndx ; infj = starttotinf ; if (dpstrat > 1) { for (ndx = 1 ; ndx < bestcand ; ndx++) { infj += incands[ndx].flip.inf ; } if (flipOnly == TRUE) infj += candk->flip.inf ; else infj += candk->piv.inf ; } dyio_outfmt(dy_logchn,dy_gtxecho, "\n selected %s #%d, %s (%d), est. maxinf = %g, totinf = %g", (flipOnly == TRUE)?"flip":"pivot", bestcand,consys_nme(dy_sys,'v',j,FALSE,NULL),j, bestinf,infj) ; } # endif /* # ifdef DYLP_PARANOIA if (dy_opts->dpsel.strat >= 2 && incands[bestcand].madpiv == FALSE) { predictiter = dy_lp->d2.iters ; predicttotinf = starttotinf ; for (ndx = 1 ; ndx < bestcand ; ndx++) { predicttotinf += incands[ndx].flip.inf ; } if (flipOnly == TRUE) predicttotinf += candk->flip.inf ; else predicttotinf += candk->piv.inf ; predictmaxinf = bestinf ; } # endif */ /* We've made our choice. But ... if this is a degenerate pivot, and antidegeneracy can be activated, let's hold off for a moment. */ if (candk->ddelta == 0) { if (dy_opts->degen == TRUE && dy_opts->degenpivlim < dy_lp->degenpivcnt) { *p_xjndx = candk->ndx ; *p_indir = candk->pivdir ; retval = dyrDEGEN ; FREE(incands) ; return (retval) ; } } /* One last check --- confirm that abar from abar agrees with abar from abar = inv(B)a. */ confirm = dy_confirmDualPivot(i,candk->ndx,abari,maxabari,p_abarj) ; if (confirm != dyrOK) { *p_xjndx = candk->ndx ; *p_indir = candk->pivdir ; FREE(incands) ; return (confirm) ; } /* If there are flips to perform, we need to handle them now before we can return and let dy_dualpivot handle the actual pivot. Rather than doing a separate ftran for each a, accumulate delta*a in accum for all variables and then do a single ftran. But do update the objective as we process each column. Reverse pivots will not flip. When we're doing only flips, boost bestcand by 1 so that we'll flip the candidate specified by bestcand, instead of reserving it for pivoting (and undo the increment after the loop ends). */ swing = FALSE ; reqchk = FALSE ; if (bestcand > 1 || flipOnly == TRUE) { if (flipOnly == TRUE) bestcand++ ; accumj = (double *) CALLOC((m+1),sizeof(double)) ; for (ndx = 1 ; ndx < bestcand ; ndx++) { candk = &incands[ndx] ; j = candk->ndx ; statj = dy_status[j] ; if (candk->rev == TRUE) { # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tpassing reverse %s (%d) %s = %g.", consys_nme(dy_sys,'v',j,FALSE,NULL),j, dy_prtvstat(statj),dy_x[j]) ; } # endif continue ; } # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tflipping %s (%d) %s = %g to ", consys_nme(dy_sys,'v',j,FALSE,NULL),j, dy_prtvstat(statj),dy_x[j]) ; } # endif comflg(statj,vstatNBUB|vstatNBLB) ; if (flgon(statj,vstatNBLB)) { xj = vlb[j] ; } else { xj = vub[j] ; } dy_status[j] = statj ; dy_x[j] = xj ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"%s = %g.", dy_prtvstat(dy_status[j]),dy_x[j]) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->dmulti.flips++ ; # endif deltaj = candk->flip.delta ; if (dy_ddegenset[j] == 0) { dy_lp->z += dy_cbar[j]*deltaj ; } if (consys_mulaccumcol(dy_sys,j,deltaj,accumj) == FALSE) { errmsg(122,rtnnme,dy_sys->nme, "column",consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; retval = dyrFATAL ; break ; } } if (retval == dyrFATAL) { if (accumj != NULL) FREE(accumj) ; FREE(incands) ; return (retval) ; } if (flipOnly == TRUE) bestcand-- ; /* Ftran the accumulated SUM{j in cands}delta*a and pass it to dy_updateprimals to update the basic variables. */ dy_ftran(accumj,FALSE) ; upd_retval = dy_updateprimals(candk->ndx,1.0,accumj) ; switch (upd_retval) { case dyrOK: { break ; } case dyrSWING: { swing = TRUE ; break ; } case dyrREQCHK: { reqchk = TRUE ; break ; } default: { retval = dyrFATAL ; break ; } } FREE(accumj) ; /* There's a remote chance that the flips will reduce x exactly to bound. (Yes, it's happened.) Catch this at the end of the loop, and claim flips only when it happens, abandoning the prospective pivot. */ if (flgoff(dy_status[i],vstatBUUB|vstatBLLB)) { flipOnly = TRUE ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n whoa! %s (%d) = %g %s after flips; cancelling pivot.", consys_nme(dy_sys,'v',i,FALSE,NULL),i,dy_x[i], dy_prtvstat(dy_status[i])) ; } # endif } if (retval == dyrFATAL) { FREE(incands) ; return (retval) ; } } /* If we have a pivot to recommend, set up the return values so we look like the usual dualin return. If we don't have a pivot to recommend, return dyrRESELECT, to indicate that we should try reselecting the leaving variable. Note that here we prefer dyrMADPIV over dyrDEGEN --- if antidegeneracy was active, we'd have taken the earlier return. We're going to use this pivot, degenerate or not, so it's more important to know that it's unstable. */ if (flipOnly == FALSE) { candk = &incands[bestcand] ; *p_xjndx = candk->ndx ; *p_indir = candk->pivdir ; if (candk->madpiv == TRUE) { retval = dyrMADPIV ; } else if (candk->ddelta == 0) { retval = dyrDEGEN ; } else { retval = dyrOK ; } } else { retval = dyrRESELECT ; } FREE(incands) ; return (retval) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_consys.h0000644000175200017520000005434011507440660015556 0ustar coincoin/* This file is a portion of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ #ifndef _CONSYS_H #define _CONSYS_H /* @(#)dy_consys.h 4.4 11/11/04 svn/cvs: $Id: dy_consys.h 407 2010-12-31 20:48:48Z lou $ This header file contains declarations for a constraint system data structure, tailored for LP-based branch-and-cut MILP algorithms (more generally, for any situation where dynamic change in the number of rows and/or columns is expected). The constraint system allows for arbitrary additions and deletions. Additional space is allocated as needed; there are no a priori limits. Allocated space is never reduced, however, short of destroying the constraint system. The coefficient matrix is implemented as a sparse structure, linked by row and by column. Access to the rows and columns of the coefficient matrix is via utility routines. To provide O(1) cost for row and column addition and deletion, while maintaining a dense index set, the hole left by deleting a row or column is filled by moving the last row or column to occupy the vacant index slot. The client can 'attach' row and column vectors to the constraint system; more precisely, vectors and multiple pointers to those vectors. The vectors will be dynamically resized and pointers updated whenever rows or columns are added to the constraint system. Entries in attached vectors are automatically reordered when a row or column is moved to fill the hole left by a deletion. The user is expected to work directly with any attached vectors; there are no special access routines. Because rows and columns can move, clients must be careful when they keep records of row or column indices, and update these records as necessary. A special set of attached vectors are referred to as associated vectors. These are distinguished only by having pointers allocated in the constraint system header structure. NOTE: The package assumes that variables and constraints are indexed from 1; this makes error checking a lot more reliable, particularly for errors of omission (whoops, forgot to set that index ... ). Vectors intended for expanded rows or columns must be sized accordingly. (I.e., if vector is to hold k values, the actual allocated space is k+1 entries, with vector[0] unused.) consys will do this automatically when asked to allocate space. Clients must remember this when allocating space for vectors that they will attach to a constraint system. NOTE: The constraint system is prepared to deal with both finite (most often DBL_MAX) and infinite (IEEE) infinity in the upper and lower bounds vectors for variables (vlb, vub). Explicit checks are necessary to maintain the value of a finite infinity when scaling the constraint system. The value of infinity must be supplied as a parameter to create_consys(). It's not a good idea to have infinity popping up elsewhere, but IEEE infinity should work (because no explicit checks are required for mathematical correctness). NOTE: At the infinitesimal end, any coefficient with absolute value less than 1.0e-20 will be dropped. Currently this is hardwired (see consys_create). It may change if there's a need. */ #include "dy_vector.h" /* Constraint coefficient matrix This is a sparse-matrix data structure, linked by row and column. Note that rows and columns are << not >> sorted in index order. Insertions and deletions are done adjacent to the headers, for efficiency. */ /* Coefficients Field Description ----- ----------- rowhdr The row header for this coefficient. colhdr The column header for this coefficient. val The value of this coefficient. rownxt The next coefficient in this row. colnxt The next coefficient in this column. */ typedef struct coeff_struct_tag { struct rowhdr_struct_tag *rowhdr ; struct colhdr_struct_tag *colhdr ; double val ; struct coeff_struct_tag *rownxt ; struct coeff_struct_tag *colnxt ; } coeff_struct ; /* Column headers Field Description ----- ----------- ndx The index of this column. len The number of coefficients in the column. nme The name of the variable associated with the column. coeffs The coefficients of the column. */ typedef struct colhdr_struct_tag { int ndx ; int len ; const char *nme ; coeff_struct *coeffs ; } colhdr_struct ; /* Row headers Field Description ----- ----------- ndx The index of this row. len The number of coefficients in the row. nme The name of the variable associated with the row. coeffs The coefficients of the row. */ typedef struct rowhdr_struct_tag { int ndx ; int len ; const char *nme ; coeff_struct *coeffs ; } rowhdr_struct ; /* Coefficient matrix header Field Definition ----- --------- coeffcnt The number of coefficients in the matrix. cols Array of pointers to column headers. rows Array of pointers to row headers. */ typedef struct { int coeffcnt ; colhdr_struct **cols ; rowhdr_struct **rows ; } conmtx_struct ; /* Attached Vectors: As mentioned at the top, attached vectors are automatically resized whenever the constraint system is resized, and reorderd to track the movement of rows and columns due to deletions. A particular subset of attached vectors are designated as associated vectors; a system has at most one of each type of associated vector. Their only distinguishing characteristic is that they occupy the dedicated pointers in the constraint system header: * objective function * variable type <3> * variable upper & lower bounds * right-hand-side (a.k.a. rhs or b) and rhsl (a.k.a. rhslow or blow) <1> * constraint type * upper & lower bounds for constraint left-hand-sides <2> * row and column scaling vectors (more accurately, the diagonal elements of row and column scaling matrices) <1> rhsl is created when range constraints (blow <= ax <= b) are present in the constraint system. <2> These are calculated using the upper and lower bounds on the variables in the constraint, and are used in arc consistency calculations. See further explanation below. <3> Arguably the variable type vector only needs to cover the architectural variables, but it'd be a pain to distinguish a resize involving the architectural columns from a resize involving the logical columns. Easier to waste a little space. The flags given below are used in attached vector headers to indicate how a vector should be handled, and in the consys_struct.parts field to indicate which components of the constraint system are present. Their most important function is to specify whether a vector is a row vector or a column vector. Beyond that, they serve as weak consistency and type checks. Notes: * MTX, ROWHDR, and COLHDR cannot be allocated/deallocated, but having codes for them makes the interface to some of the utility routines a bit more uniform. * COL and ROW should be used for generic column and row vectors, respectively. * VUB is initialised to +infinity. * RSCALE and CSCALE are initialised to 1.0 * VTYP and CTYP are tied to the vartyp_enum and contyp_enum types. */ #define CONSYS_MTX ((flags) 1<<0) #define CONSYS_ROW ((flags) 1<<1) #define CONSYS_COL ((flags) 1<<2) #define CONSYS_OBJ ((flags) 1<<3) #define CONSYS_VUB ((flags) 1<<4) #define CONSYS_VLB ((flags) 1<<5) #define CONSYS_RHS ((flags) 1<<6) #define CONSYS_CUB ((flags) 1<<7) #define CONSYS_CLB ((flags) 1<<8) #define CONSYS_RHSLOW ((flags) 1<<9) #define CONSYS_VTYP ((flags) 1<<10) #define CONSYS_CTYP ((flags) 1<<11) #define CONSYS_COLHDR ((flags) 1<<12) #define CONSYS_ROWHDR ((flags) 1<<13) #define CONSYS_RSCALE ((flags) 1<<14) #define CONSYS_CSCALE ((flags) 1<<15) /* Macros to identify row and column vectors. */ #define CONSYS_ROWVEC \ (CONSYS_OBJ|CONSYS_VUB|CONSYS_VLB|CONSYS_VTYP|CONSYS_CSCALE| \ CONSYS_COLHDR|CONSYS_ROW) #define CONSYS_COLVEC \ (CONSYS_RHS|CONSYS_RHSLOW|CONSYS_CUB|CONSYS_CLB|CONSYS_CTYP|CONSYS_RSCALE| \ CONSYS_ROWHDR|CONSYS_COL) /* A macro to check for a valid vector type. */ #define VALID_ATTVTYPE(zz_vectype_zz) \ (zz_vectype_zz == CONSYS_OBJ || \ zz_vectype_zz == CONSYS_VUB || zz_vectype_zz == CONSYS_VLB || \ zz_vectype_zz == CONSYS_RHS || zz_vectype_zz == CONSYS_RHSLOW || \ zz_vectype_zz == CONSYS_CUB || zz_vectype_zz == CONSYS_CUB || \ zz_vectype_zz == CONSYS_VTYP || zz_vectype_zz == CONSYS_CTYP || \ zz_vectype_zz == CONSYS_RSCALE || zz_vectype_zz == CONSYS_CSCALE || \ zz_vectype_zz == CONSYS_ROW || zz_vectype_zz == CONSYS_COL) /* Attached vector header This structure is used in the list of attached vectors that should be checked and resized with the constraint system. Field Definition ----- ---------- nxt List link. what The type of vector (coded with the flag values for attached and associated vectors) elsze The size of an element in the vector. vec The address of the vector. pveclst A list of addresses which hold pointers to vec. If vec is moved as a result of a resize, these are rewritten. */ typedef struct attvhdr_struct_tag { struct attvhdr_struct_tag *nxt ; flags what ; int elsze ; void *vec ; lnk_struct *pveclst ; } attvhdr_struct ; /* Constraint bounds Constraint bounds are upper and lower bounds on the value of the left-hand-side of a constraint, calculated using the upper and lower bounds on variables. In the case where all variables have finite bounds, the constraint bound will also be finite, and things are straightforward. But there's a complication --- we'll want to be able to efficiently handle the case where all variables have finite bounds except one, x. In this case we can calculate a finite bound for the free variable, using the bounds on the other variables. Bottom line is we need a structure that keeps count of the number of infinities, as well as the finite portion of the bound. See consistency.c for more about the mechanics of particular cases. The interpretation of an entry is as follows: -varcnt <= inf < 0 inf is the negative of the index of the single remaining variable contributing an infinity; bnd is the finite lhs bound calculated from the other variables of the constraint inf >= 0 inf is the number of variables contributing infinity to the bound; bnd is the value of the finite portion of the lhs bound. If inf == 0, the lhs bound is finite. inf < -varcnt and inf = 1 are invalid. A value which exceeds the number of variables in the constraint is also bogus. This encoding means that it's impossible to distinguish +inf and -inf just by looking at the bound. But, in the case of constraint bounds, this hasn't been a problem in practice. Lower bounds go to -inf, and upper bounds go to +inf, and context has been sufficient. The revs field is used to keep track of the number of times the bound has been revised. See milp.h:mipopts_struct for the recalculation frequency. */ typedef struct { int revs ; int inf ; double bnd ; } conbnd_struct ; /* Constraint type codes These codes have their origin in the MPS input standard. contypINV invalid contypNB non-binding constraint <1> contypGE >= inequality contypEQ equality contypLE <= inequality contypRNG 'range' constraint, lb <= ax <= ub (a sort of shorthand for a >= and a <= inequality) <1> Non-binding constraints are a bit odd. They are used in two ways. The first non-binding constraint in the MPS file is, by convention, the objective function. The other use for non-binding constraints is in rows of type Dx (x one of N, E, G, or L), which specify linear combinations of constraints. <2> Following OSL (a good lead to follow when they're going where I want to go :-), bonsai doesn't accept Dx rows, and throws away all but the first non-binding constraint, which it keeps only if it needs it for the objective function. */ typedef enum { contypINV = 0, contypNB, contypGE, contypEQ, contypLE, contypRNG } contyp_enum ; #define VALID_CONTYPE(zz_ctyp_zz) \ (zz_ctyp_zz == contypGE || zz_ctyp_zz == contypEQ || \ zz_ctyp_zz == contypLE || zz_ctyp_zz == contypRNG) /* Variable type codes vartypINV invalid vartypCON continuous variable vartypINT general integer variable vartypBIN binary variable */ typedef enum { vartypINV = 0, vartypCON, vartypINT, vartypBIN } vartyp_enum ; #define VALID_VARTYPE(zz_vtyp_zz) \ (zz_vtyp_zz == vartypCON || \ zz_vtyp_zz == vartypINT || \ zz_vtyp_zz == vartypBIN) #define INT_VARTYPE(zz_vtyp_zz) \ (zz_vtyp_zz == vartypINT || \ zz_vtyp_zz == vartypBIN) /* Behavioural options These codes are used as flags in the opts field of the constraint system header. CONSYS_LVARS Set to indicate that logical variables are present and should be automatically maintained during constraint system manipulations. CONSYS_WRNZERO Set to indicate that a warning should be issued when the constraint system utility routines encounter a zero-length column or row. Also causes a warning during row/column creation and basis initialisation if an explicit zero coefficient is encountered. CONSYS_WRNATT Set to indicate that a warning should be issued when a duplicate attach request is encountered (i.e., both the vector and the pointer to the vector are already on the attvecs list). CONSYS_FININF `Finite infinity' --- the client is indulging in the common trick of using a large finite value (most often, DBL_MAX) as infinity. CONSYS_CORRUPT The constraint system is corrupt --- an error has occurred during construction or modification that caused an operation to abort. Currently set only for errors that occur outside of debug and paranoia (you're supposed to look at the error messages for paranoia and debug). */ #define CONSYS_LVARS ((flags) 1<<0) #define CONSYS_WRNZERO ((flags) 1<<1) #define CONSYS_WRNATT ((flags) 1<<2) #define CONSYS_FININF ((flags) 1<<3) #define CONSYS_CORRUPT ((flags) 1<<4) /* Constraint system header The top-level 'handle' for the structure. Field Definition ----- --------- nme The name assigned to this constraint system. parts Flags indicating which components of the constraint system are supposed to be present. opts Flags indicating various behavioural options. inf The value of infinity. tiny The value of the infinitesimal. varcnt The total number of variables (and the column dimension). archvcnt The number of architectural variables. The number of continuous architectural variables is archvcnt-(intvcnt+binvcnt). logvcnt The number of logical variables. intvcnt The number of general integer variables. binvcnt The number of binary variables. maxcollen The number of coefficients in the largest column. maxcolndx The index of the largest column. concnt The total number of constraints (and the row dimension). archccnt The number of architectural constraints. cutccnt The number of cut constraints. maxrowlen The number of coefficients in the largest row. maxrowndx The index of the largest row. colsze The allocated column capacity for the constraint system. rowsze The allocated row capacity for the constraint system. mtx The constraint matrix header. The vectors rowscale and colscale are valid only after execution of one of the scaling routines consys_geomscale, consys_equiscale, or consys_applyscale. The fields maxaij and minaij are valid only after execution of consys_evalsys or any of the scaling routines. maxaij max{i,j} |a| (valid only after scaling) minaij min{i,j, a != 0} |a| (valid only after scaling) rowscale The row scaling vector. colscale The column scaling vector. objnme The name of the objective function. objndx Index of the objective function, if it's installed as a constraint cx - x = 0. xzndx Index of the variable x. obj The objective function. vtyp The type of variable. vub The upper bounds for variables. vlb The lower bounds for variables. rhs The right-hand-side vector. rhslow blow for range constraints of form blow <= ax <= b. ctyp The type of constraint (contyp_enum). cub The upper bounds for constraint left-hand-sides. clb The lower bounds for constraint left-hand sides. attvecs The list of attached vectors. NOTE the distinction between dimension and size -- the allocated capacity of the constraint system is [rowsze x colsze], while the actual size of the constraint system is [concnt x varcnt]. */ typedef struct { const char *nme ; flags parts ; flags opts ; double inf ; double tiny ; int varcnt ; int archvcnt ; int logvcnt ; int intvcnt ; int binvcnt ; int maxcollen ; int maxcolndx ; int concnt ; int archccnt ; int cutccnt ; int maxrowlen ; int maxrowndx ; int colsze ; int rowsze ; conmtx_struct mtx ; double maxaij ; double minaij ; double *rowscale ; double *colscale ; const char *objnme ; int objndx ; int xzndx ; double *obj ; vartyp_enum *vtyp ; double *vub ; double *vlb ; double *rhs ; double *rhslow ; contyp_enum *ctyp ; conbnd_struct *cub ; conbnd_struct *clb ; attvhdr_struct *attvecs ; } consys_struct ; /* consys_utils.c */ extern consys_struct *consys_create(const char *nme, flags parts, flags opts, int concnt, int varcnt, double infinity) ; extern bool consys_dupsys(consys_struct *src, consys_struct **dst, flags dstvecs) ; extern void consys_free (consys_struct *consys) ; extern bool consys_realloc(consys_struct *consys, char rowcol, int incr), consys_attach(consys_struct *consys, flags what, int elsze, void **pvec), consys_update(consys_struct *consys, void *oldvec, void *newvec), consys_detach(consys_struct *consys, void **pvec, bool all) ; extern bool consys_addcol_pk(consys_struct *consys, vartyp_enum vartyp, pkvec_struct *pkcol, double obj, double vlb, double vub), consys_addcol_ex(consys_struct *consys, vartyp_enum vartyp, const char **nme, double *excol, double obj, double vlb, double vub), consys_addrow_pk(consys_struct *consys, char rowclass, contyp_enum contyp, pkvec_struct *pkrow, double rhs, double rhslow, conbnd_struct *cub, conbnd_struct *clb), consys_getcol_pk(consys_struct *consys, int colndx, pkvec_struct **pkvec), consys_getcol_ex(consys_struct *consys, int colndx, double **vec), consys_getrow_pk(consys_struct *consys, int rowndx, pkvec_struct **pkvec), consys_getrow_ex(consys_struct *consys, int rowndx, double **vec), consys_delcol(consys_struct *consys, int colndx), consys_delrow(consys_struct *consys, int rowndx), consys_delrow_stable(consys_struct *consys, int rowndx) ; extern bool consys_setcoeff(consys_struct *consys, int rowndx, int colndx, double val) ; extern double consys_getcoeff(consys_struct *consys, int rowndx, int colndx) ; extern bool consys_logicals(consys_struct *consys) ; /* consys_mathutils.c */ extern int consys_gcdrow(consys_struct *consys, int rowndx) ; extern double consys_dotcol(consys_struct *consys, int colndx, double *vec), consys_dotrow(consys_struct *consys, int rowndx, double *vec) ; extern double consys_1normrow(consys_struct *consys, int rowndx), consys_ssqrow(consys_struct *consys, int rowndx), consys_2normrow(consys_struct *consys, int rowndx), consys_infnormrow(consys_struct *consys, int rowndx), consys_1normcol(consys_struct *consys, int rowndx), consys_ssqcol(consys_struct *consys, int rowndx), consys_2normcol(consys_struct *consys, int rowndx), consys_infnormcol(consys_struct *consys, int rowndx) ; extern bool consys_mulrow(consys_struct *consys, int rowndx, double scalar) ; extern bool consys_divrow(consys_struct *consys, int rowndx, double scalar) ; extern bool consys_accumcol(consys_struct *consys, int colndx, double *vec) ; extern bool consys_mulaccumcol(consys_struct *consys, int colndx, double scalar, double *vec) ; /* consys_scaling.c */ extern bool consys_evalsys(consys_struct *consys, double *scm, int *gecnt) ; extern bool consys_geomscale(consys_struct *consys, double **rowscale, double **colscale), consys_equiscale(consys_struct *consys, double **rowscale, double **colscale), consys_applyscale(consys_struct *consys, bool convctyp, double *rowscale, double *colscale) ; /* consys_io.c */ extern const char *consys_prtvartyp(vartyp_enum vartyp), *consys_prtcontyp(contyp_enum contyp) ; extern char *consys_assocnme(consys_struct *consys, flags which), *consys_conbndnme(char bndlett, int cndx, conbnd_struct *bnd), *consys_conbndval(conbnd_struct *bnd) ; #ifndef DYLP_NDEBUG #include "dylib_io.h" #include "dylib_std.h" extern void consys_prtcon(ioid chn, bool echo, consys_struct *consys, int i, const char *pfx) ; #endif /* A routine to set (change, really) the name of an existing constraint or variable. */ extern void consys_chgnme(consys_struct *consys, char cv, int ndx, const char *newnme) ; /* consys_nme returns a string containing the name of the specified constraint or variable. If the client supplies a buffer, that buffer is used to return the name. If a buffer isn't supplied, a little care is required. * If consys_nme can find a pointer to the name stored in the constraint matrix (i.e., in the row or column header) it will return the stored pointer. Successive calls will not interfere with one another. * If consys_nme has to build the name, it will use an internal buffer. Successive calls will reuse this buffer as required (overwriting the previous name). Names have to be built in two cases: * A fully prefixed name is requested (a prefix of 'consys->nme.' is added to the variable or constraint name). * The name of a logical variable is requested and logicals aren't enabled in the constraint system. A buffer of size CONSYS_MAXBUFLEN is guaranteed to be adequate. */ #define CONSYS_MAXBUFLEN 32 extern const char *consys_nme(consys_struct *consys, char cv, int ndx, bool pfx, char *clientbuf) ; #endif /* _CONSYS_H */ DyLP-1.10.4/DyLP/src/Dylp/dy_cmdint.h0000644000175200017520000000346711507440660015522 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ #ifndef _DY_CMDINT_H #define _DY_CMDINT_H /* @(#)dy_cmdint.h 3.3 06/22/04 svn/cvs: $Id: dy_cmdint.h 407 2010-12-31 20:48:48Z lou $ Declarations specific to dylp's command interpreter. */ #include "dylib_std.h" #include "dylib_io.h" #include "dylib_errs.h" /* We need dylp.h only for the typedefs of lpopts_struct and lptols_struct, and extern declarations for dy_logchn and dy_gtxecho. */ #define DYLP_INTERNAL #include "dylp.h" /* cmdint.c */ /* Return codes for command execution routines called from the command interpreter: cmdOK execution of the command was adequately successful, further command interpretation should continue. cmdHALTNOERROR execution of the command was adequately successful, but break out of the command interpretation loop. cmdHALTERROR an error occurred during execution of the command, break out of the command interpretation loop. As return codes for process_cmds, the interpretation is slightly different: cmdOK command interpretation was ended by an eof on the top level command channel (this is the normal case when command execution completes without error). cmdHALTNOERROR some command returned a cmdHALTNOERROR return code. cmdHALTERROR either a command returned a cmdHALTERROR return code, or a fatal error occurred in process_cmds. */ typedef enum { cmdOK, cmdHALTERROR, cmdHALTNOERROR } cmd_retval ; cmd_retval dy_processcmds(ioid cmdchn, bool silent, lpopts_struct *lpopts, lptols_struct *lptols) ; #endif /* _DY_CMDINT_H */ DyLP-1.10.4/DyLP/src/Dylp/dy_pivreject.c0000644000175200017520000004331512253224475016231 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains routines which handle the pivot rejection list. In addition to routines to add and remove entries, there's a routine to examine the list and decide on an appropriate action when a simplex punts. The basic mechanism used for pivot rejection is a qualifier flag, vstatNOPIVOT, which is added to a variable's status. Flagged variables are not considered for entering the basis (primal) or leaving the basis (dual). For management purposes, information about flagged variables is kept in an array, pivrejlst. There is also a control structure, pivrej_ctl. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_pivreject.c 4.4 11/06/04" ; static char svnid[] UNUSED = "$Id: dy_pivreject.c 524 2013-12-15 03:59:57Z tkr $" ; /* pivrej_struct Each pivrej_struct holds the index of the variable, the value of basis.pivs at the time of rejection, and an indication of why the variable was rejected: * dyrSINGULAR indicates that the basis became singular when this variable tried to enter the basis. * dyrMADPIV indicates that abar was rejected by dy_chkpiv; in this case the rejection ratio is stored. Keeping a list saves scanning the entire nonbasic (primal) or basic (dual) partition when we come to clear marked variables after a successful pivot. Keeping the acceptance ratio allows us to make an intelligent decision about whether to reduce the pivot tolerance or break out of simplex and attempt to modify the constraint system. Field Definition ----- ---------- ndx index of rejected variable iter value of basis.pivs when the pivot was rejected why the reason the pivot was rejected (dyrSINGULAR or dyrMADPIV) ratio the ratio returned by dy_chkpiv when the pivot was rejected, multiplied by the value of dy_tols.pivot at time of rejection (for independence from possible changes to tols.pivot) */ typedef struct { int ndx ; int iter ; dyret_enum why ; double ratio ; } pivrej_struct ; static pivrej_struct *pivrejlst = NULL ; /* pivrejctl_struct Control structure for the pivot rejection mechanism. Field Definition ----- ---------- sze allocated capacity of pivrejlst cnt number of entries in pivrejlst mad number of entries rejected due to small abar sing number of entries rejected due to singular basis iter_reduced value of basis.pivs when the pivot tolerance was reduced; -1 if we're running with the default tolerance. savedtol saved copy of the default pivot tolerance; captured by initpivrej pivmul reduction factor for pivot tolerance; currently hardcoded in initpivrej; when reduction is required, it's in steps of 1/pivmul. */ typedef struct { int sze ; int cnt ; int mad ; int sing ; int iter_reduced ; double savedtol ; double pivmul ; } pivrejctl_struct ; static pivrejctl_struct pivrej_ctl ; void dy_initpivrej (int sze) /* Allocate the pivrej control structure and an initial pivrejlst array. Parameter: sze: allocated capacity of the pivot rejection list */ { # if MALLOC_DEBUG == 2 char *rtnnme = "dy_initpivrej" ; # endif pivrej_ctl.sze = maxx(sze,5) ; pivrejlst = (pivrej_struct *) MALLOC(pivrej_ctl.sze*sizeof(pivrej_struct)) ; pivrej_ctl.cnt = 0 ; pivrej_ctl.mad = 0 ; pivrej_ctl.sing = 0 ; pivrej_ctl.iter_reduced = -1 ; pivrej_ctl.savedtol = dy_tols->pivot ; pivrej_ctl.pivmul = 1000.0 ; # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->pivrej.min_pivtol = dy_tols->pivot ; # endif return ; } void dy_freepivrej (void) /* Free the pivot rejection list. Solely for information hiding. */ { # if MALLOC_DEBUG == 2 char *rtnnme = "dy_initpivrej" ; # endif if (pivrejlst != NULL) { FREE(pivrejlst) ; pivrejlst = NULL ; } return ; } void dy_checkpivtol (void) /* A quick little routine to see if we've been running long enough on a reduced pivot multiplier. If so, get back to the default. The primary purpose of this is information hiding. */ { if (pivrej_ctl.iter_reduced > 0 && dy_lp->basis.pivs-pivrej_ctl.iter_reduced > dy_opts->factor) { dy_tols->pivot = pivrej_ctl.savedtol ; pivrej_ctl.iter_reduced = -1 ; } return ; } static int int_nonincreasing (const void *p_i, const void *p_j) /* Reverse integer comparison so we can sort arrays of indices in nonincreasing order. Returns: < 0 if i > j 0 if i = j > 0 if i < j */ { int i = *((const int *) p_i) ; int j = *((const int *) p_j) ; return ((j)-(i)) ; } bool dy_clrpivrej (int *entries) /* This routine removes variables from rejected pivot list. As far as the rest of dylp is concerned, all that needs to be done is to clear the NOPIVOT qualifier from the variable's status entry. Internally, there are really two modes: clear specified entries, and clear the entire list. If the client supplies an array of indices in the entries parameter, selective removal is performed, otherwise the entire list is cleared. Parameters: entries: an array with indices of entries to be removed entries[0] is expected to contain the number of entries Returns: TRUE if the clearing operation is successful, FALSE otherwise. */ { int n,j,ndx,last,endx,elast ; flags statj ; const char *rtnnme = "dy_clrpivrej" ; # ifdef DYLP_PARANOIA flags chkflgs ; /* For dual simplex, only out-of-bound basic variables are considered for pivoting, but subsequent dual pivots could change that to pretty much any basic status. For primal simplex, any nonbasic status is ok, including the exotic ones. */ if (dy_lp->phase == dyDUAL) { chkflgs = vstatBASIC ; } else { chkflgs = vstatNONBASIC|vstatEXOTIC ; } # endif /* Are we clearing the entire list? If so, also restore the default pivot tolerance. If we're being selective about clearing, leave the tolerance unchanged and assume the client will take care of it. If there are no entries in pivrejlst, that's all we need to do. */ if (entries == NULL) { dy_tols->pivot = pivrej_ctl.savedtol ; pivrej_ctl.iter_reduced = -1 ; } if (pivrej_ctl.cnt == 0) return (TRUE) ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivreject >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n %s pivot reject list ... ", (entries == NULL)?"clearing":"winnowing") ; } # endif n = dy_sys->varcnt ; last = pivrej_ctl.cnt-1 ; /* If the client hasn't supplied entries, we're clearing the entire list. */ if (entries == NULL) { for (ndx = 0 ; ndx <= last ; ndx++) { j = pivrejlst[ndx].ndx ; statj = dy_status[j] ; # ifdef DYLP_PARANOIA if (j < 1 || j > n) { errmsg(102,rtnnme,dy_sys->nme,"rejected variable",j,1,n) ; return (FALSE) ; } if (flgoff(statj,vstatNOPIVOT) || flgoff(statj,chkflgs)) { errmsg(329,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',j,FALSE,NULL),j,ndx,dy_prtvstat(statj), (dy_lp->phase == dyDUAL)?"basic":"nonbasic") ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (dy_opts->print.pivreject >= 2) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\trestoring %s (%d) as eligible for pivoting.", consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; # endif clrflg(dy_status[j],vstatNOPIVOT) ; } last = -1 ; pivrej_ctl.mad = 0 ; pivrej_ctl.sing = 0 ; } /* The more complicated case: Remove the set of entries specified by the client. The sort is necessary so that we can compress in place, moving the last entry to replace the deleted entry. */ else { elast = entries[0] ; if (elast > 1) { qsort(&entries[1],elast,sizeof(int),int_nonincreasing) ; } for (endx = 1 ; endx <= elast ; endx++) { ndx = entries[endx] ; # ifdef DYLP_PARANOIA if (ndx < 0 || ndx >= pivrej_ctl.cnt) { errmsg(102,rtnnme,dy_sys->nme,"pivrej list index",ndx, 0,pivrej_ctl.cnt-1) ; return (FALSE) ; } # endif j = pivrejlst[ndx].ndx ; statj = dy_status[j] ; # ifdef DYLP_PARANOIA if (j < 1 || j > n) { errmsg(102,rtnnme,dy_sys->nme,"rejected variable",j,1,n) ; return (FALSE) ; } if (flgoff(statj,vstatNOPIVOT) || flgoff(statj,chkflgs)) { errmsg(329,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',j,FALSE,NULL),j,ndx,dy_prtvstat(statj), (dy_lp->phase == dyDUAL)?"basic":"nonbasic") ; return (FALSE) ; } # endif clrflg(dy_status[j],vstatNOPIVOT) ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivreject >= 2) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\trestoring %s (%d) as eligible for pivoting.", consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; # endif if (ndx < last) { pivrejlst[ndx] = pivrejlst[last] ; switch (pivrejlst[ndx].why) { case dyrSINGULAR: { pivrej_ctl.sing-- ; break ; } case dyrMADPIV: { pivrej_ctl.mad-- ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } } last-- ; } } last++ ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivreject >= 1) { if (dy_opts->print.pivreject >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n ") ; } dyio_outfmt(dy_logchn,dy_gtxecho,"restored %d variables.", pivrej_ctl.cnt-last) ; } # endif pivrej_ctl.cnt = last ; return (TRUE) ; } dyret_enum dy_addtopivrej (int j, dyret_enum why, double abarij, double maxabarij) /* This routine adds x to the rejected pivot list by adding an entry to pivrejlst and adding the NOPIVOT qualifier to x's status. If necessary, it expands the size of the list. Parameter: j: the variable x why: the reason it's going on the pivot reject list; one of dyrSINGULAR or dyrMADPIV abarij: (why == dyrMADPIV) the pivot element maxabarij: (why == dyrMADPIV) the maximum pivot element in the pivot column (primal) or row (dual). Returns: dyrOK if the entry is added without error, dyrFATAL if we can't get more space, or if a paranoid check fails. */ { int n,ndx,newsze ; double ratio ; const char *rtnnme = "dy_addtopivrej" ; # ifndef DYLP_NDEBUG int saveprint ; saveprint = dy_opts->print.pivoting ; dy_opts->print.pivoting = 0 ; # endif /* We don't actually need the pivot ratio until further down, but it's handy to do it here where we can easily suppress the internal print, then restore the print level. */ ratio = dy_chkpiv(abarij,maxabarij) ; n = dy_sys->varcnt ; # ifndef DYLP_NDEBUG dy_opts->print.pivoting = saveprint ; # endif # ifdef DYLP_PARANOIA if (j < 1 || j > n) { errmsg(102,rtnnme,dy_sys->nme,"variable",j,1,n) ; return (dyrFATAL) ; } if (!(why == dyrSINGULAR || why == dyrMADPIV)) { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } # endif # ifndef DYLP_NDEBUG /* The default case in this switch is needed to suppress GCC warnings --- it doesn't grok the paranoid check. */ if (dy_opts->print.pivreject >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n marking %s (%d) ineligible for pivoting ", consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; switch (why) { case dyrSINGULAR: { dyio_outfmt(dy_logchn,dy_gtxecho,"(%s).",dy_prtdyret(why)) ; break ; } case dyrMADPIV: { dyio_outfmt(dy_logchn,dy_gtxecho,"(%s = %g).",dy_prtdyret(why),ratio) ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } } } # endif /* Flag the culprit --- the extent of externally visible activity. Then make the entry in the pivot reject list. Check for adequate list length and expand if necessary. */ setflg(dy_status[j],vstatNOPIVOT) ; ndx = pivrej_ctl.cnt++ ; if (ndx >= pivrej_ctl.sze) { newsze = minn(2*pivrej_ctl.sze,n+1) ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivreject >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: expanding pivot reject list from %d to %d entries.", rtnnme,pivrej_ctl.sze,newsze) ; } # endif pivrejlst = (pivrej_struct *) REALLOC(pivrejlst,newsze*sizeof(pivrej_struct)) ; if (pivrejlst == NULL) { errmsg(337,rtnnme,dy_sys->nme,pivrej_ctl.sze,newsze) ; return (dyrFATAL) ; } pivrej_ctl.sze = newsze ; } pivrejlst[ndx].ndx = j ; pivrejlst[ndx].iter = dy_lp->basis.pivs ; pivrejlst[ndx].why = why ; switch (why) { case dyrSINGULAR: { pivrej_ctl.sing++ ; break ; } case dyrMADPIV: { pivrej_ctl.mad++ ; ratio = dy_chkpiv(abarij,maxabarij) ; pivrejlst[ndx].ratio = ratio*dy_tols->pivot ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } } # ifdef DYLP_STATISTICS if (dy_stats != NULL) { switch (why) { case dyrSINGULAR: { dy_stats->pivrej.sing++ ; break ; } case dyrMADPIV: { dy_stats->pivrej.mad++ ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } } if (pivrej_ctl.cnt > dy_stats->pivrej.max) { dy_stats->pivrej.max = pivrej_ctl.cnt ; } } # endif return (dyrOK) ; } dyret_enum dy_dealWithPunt (void) /* This routine decides on the appropriate action(s) when a simplex decides to punt. The algorithm is this: 1) Sort the entries in pivrejlst into two sets: iter == basis.pivs (current) and iter != basis.pivs (old). In the current set, count the number of mad and singular entries. 2) If there are any entries in old, remove them from pivrejlst and return with an indication to resume pivoting (dyrRESELECT). 3) If all entries in current are of type singular, return with an indication to abort this simplex phase (dyrPUNT) and hope that we can alter the constraint system. 4) For each permissible reduction in pivot tolerance, check for entries of type MADPIV that might become acceptable. If there are any, remove them from pivrejlst and return dyrRESELECT. 5) If 4) failed to identify pivots, return dyrPUNT. Parameters: none Returns: dyrRESELECT if pivoting can resume dyrPUNT to abort this simplex phase dyrFATAL if something goes wrong */ { int j,ndx,last,oldcnt,curcnt,curmad,brk ; double maxratio,pivmul ; bool clr_retval ; dyret_enum retval ; int *old,*current ; pivrej_struct *pivrej ; # ifndef DYLP_NDEBUG const char *rtnnme = "dy_dealWithPunt" ; # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->pivrej.puntcall++ ; # endif retval = dyrINV ; /* If there are no rejected pivots, the punt stands. */ if (pivrej_ctl.cnt == 0) { # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->pivrej.puntret++ ; # endif return (dyrPUNT) ; } /* Setup and scan pivrejlst as indicated above. */ last = pivrej_ctl.cnt ; brk = dy_lp->basis.pivs ; old = (int *) MALLOC((last+1)*sizeof(int)) ; current = (int *) MALLOC((last+1)*sizeof(int)) ; oldcnt = 0 ; curcnt = 0 ; curmad = 0 ; maxratio = 0 ; for (ndx = 0 ; ndx < last ; ndx++) { pivrej = &pivrejlst[ndx] ; if (pivrej->iter != brk) { old[++oldcnt] = ndx ; } else { current[++curcnt] = ndx ; if (pivrej->why == dyrMADPIV) { curmad++ ; if (maxratio < pivrej->ratio) maxratio = pivrej->ratio ; } } } /* If there are old entries, we can always hope the intervening pivots have cured the problem. It happens. */ if (oldcnt > 0) { old[0] = oldcnt ; clr_retval = dy_clrpivrej(old) ; if (clr_retval == TRUE) { retval = dyrRESELECT ; } else { retval = dyrFATAL ; } # ifndef DYLP_NDEBUG if (dy_opts->print.pivreject >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n restored %d entries queued before iter = %d.", old[0],brk) ; } # endif } /* Are there any mad pivots that we can press into service by reducing the pivot tolerance? */ else if (curmad > 0 && maxratio > dy_tols->zero) { pivmul = 1/dy_tols->pivot ; while (maxratio*pivmul < 1.0) pivmul *= pivrej_ctl.pivmul ; if (1/pivmul >= dy_tols->zero*100) { # ifndef DYLP_NDEBUG if (dy_opts->print.pivreject >= 1) { dywarn(376,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_tols->pivot,1/pivmul) ; } # endif dy_tols->pivot = 1/pivmul ; # ifdef DYLP_STATISTICS if (dy_stats != NULL) { dy_stats->pivrej.pivtol_red++ ; if (dy_tols->pivot < dy_stats->pivrej.min_pivtol) { dy_stats->pivrej.min_pivtol = dy_tols->pivot ; } } # endif j = 0 ; for (ndx = 1 ; ndx <= curcnt ; ndx++) { pivrej = &pivrejlst[current[ndx]] ; if (pivrej->ratio*pivmul > 1.0) { current[++j] = current[ndx] ; } } current[0] = j ; clr_retval = dy_clrpivrej(current) ; if (clr_retval == TRUE) { retval = dyrRESELECT ; } else { retval = dyrFATAL ; } # ifndef DYLP_NDEBUG if (dy_opts->print.pivreject >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n restored %d entries queued at iter = %d at piv. tol = %g", current[0],brk,dy_tols->pivot) ; } # endif } else { # ifndef DYLP_NDEBUG if (dy_opts->print.pivreject >= 1) { dywarn(383,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_tols->zero,dy_prtdyret(dyrPUNT)) ; } # endif retval = dyrPUNT ; } } else { retval = dyrPUNT ; } /* That's it, we've done our best. Free the old and current arrays and return. */ FREE(old) ; FREE(current) ; # ifndef DYLP_NDEBUG if (retval == dyrPUNT && dy_opts->print.pivreject >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n PUNT! mad = %d, singular = %d.", pivrej_ctl.mad,pivrej_ctl.sing) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL && retval == dyrPUNT) dy_stats->pivrej.puntret++ ; # endif return (retval) ; } DyLP-1.10.4/DyLP/src/Dylp/dylp_utils.c0000644000175200017520000023566412253224475015744 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains utility routines for the dylp dynamic simplex package. */ #define DYLP_INTERNAL #include "dylib_strrtns.h" #include "dylp.h" #include static char sccsid[] UNUSED = "@(#)dylp_utils.c 4.6 10/15/05" ; static char svnid[] UNUSED = "$Id: dylp_utils.c 524 2013-12-15 03:59:57Z tkr $" ; lpret_enum dyret2lpret (dyret_enum dyret) /* Simple-minded utility routine to translate dyret_enum codes into lpret_enum codes. A consequence of trying to contain ripples from a rewrite of the simplex routines. dyret codes without direct correspondence translate into lpINV, but in context this isn't a problem. Parameter: dyret: dyret_enum code Returns: corresponding lpret_enum code, as best it can figure it out. */ { switch (dyret) { case dyrOK: { return (lpINV) ; } case dyrOPTIMAL: { return (lpOPTIMAL) ; } case dyrUNBOUND: { return (lpUNBOUNDED) ; } case dyrSWING: { return (lpSWING) ; } case dyrINFEAS: { return (lpINFEAS) ; } case dyrREQCHK: { return (lpINV) ; } case dyrACCCHK: { return (lpACCCHK) ; } case dyrLOSTPFEAS: { return (lpLOSTFEAS) ; } case dyrLOSTDFEAS: { return (lpLOSTFEAS) ; } case dyrDEGEN: { return (lpINV) ; } case dyrRESELECT: { return (lpINV) ; } case dyrMADPIV: { return (lpINV) ; } case dyrPUNT: { return (lpPUNT) ; } case dyrPATCHED: { return (lpINV) ; } case dyrNUMERIC: { return (lpFATAL) ; } case dyrBSPACE: { return (lpNOSPACE) ; } case dyrSTALLED: { return (lpSTALLED) ; } case dyrITERLIM: { return (lpITERLIM) ; } case dyrFATAL: { return (lpFATAL) ; } case dyINV: { return (lpINV) ; } default: { return (lpINV) ; } } } bool dy_reducerhs (double *rhs, bool init) /* This routine calculates the reduced right-hand-side vector b - Nx, which accounts for nonbasic variables which have nonzero values (either because they are at a nonzero bound, or are superbasic). With that in mind, the routine needs a valid basis, status, and values for the nonbasic variables when it's called. Parameters: rhs: the rhs vector to be reduced init: if TRUE, rhs will be initialised to dy_sys->rhs Returns: true, basically; a false return indicates serious confusion */ { int vndx,pkndx,cndx ; pkvec_struct *pkcol ; const char *rtnnme = "dy_reducerhs" ; #ifdef DYLP_PARANOIA if (rhs == NULL) { errmsg(2,rtnnme,"rhs") ; return (FALSE) ; } if (dy_sys == NULL) { errmsg(2,rtnnme,"dy_sys") ; return (FALSE) ; } if (init == TRUE && dy_sys->rhs == NULL) { errmsg(2,rtnnme,"dy_sys->rhs") ; return (FALSE) ; } if (dy_x == NULL) { errmsg(2,rtnnme,"dy_x") ; return (FALSE) ; } if (dy_status == NULL) { errmsg(2,rtnnme,"dy_status") ; return (FALSE) ; } #endif if (init == TRUE) memcpy(rhs,dy_sys->rhs,(dy_sys->concnt+1)*sizeof(double)) ; /* Walk the status array. For each nonbasic variable with a non-zero value, retrieve the column and reduce the rhs accordingly. Note that we have to consider the logical variables, as a range constraint produces an upper-bounded slack. NBFR variables are 0 by definition. */ pkcol = NULL ; for (vndx = 1 ; vndx <= dy_sys->varcnt ; vndx++) if (flgon(dy_status[vndx],vstatNONBASIC) && dy_x[vndx] != 0.0) { # ifdef DYLP_PARANOIA if (fabs(dy_x[vndx]) >= dy_tols->inf) { errmsg(315,rtnnme,consys_nme(dy_sys,'v',vndx,TRUE,NULL),vndx, dy_prtvstat(dy_status[vndx])) ; return (FALSE) ; } # endif if (consys_getcol_pk(dy_sys,vndx,&pkcol) == FALSE) { errmsg(122,rtnnme,dy_sys->nme,"column", consys_nme(dy_sys,'v',vndx,TRUE,NULL),vndx) ; return (FALSE) ; } for (pkndx = 0 ; pkndx < pkcol->cnt ; pkndx++) { cndx = pkcol->coeffs[pkndx].ndx ; rhs[cndx] -= pkcol->coeffs[pkndx].val*dy_x[vndx] ; } } /* And a little quick grooming. */ for (cndx = 1 ; cndx <= dy_sys->concnt ; cndx++) setcleanzero(rhs[cndx],dy_tols->zero) ; if (pkcol != NULL) pkvec_free(pkcol) ; return (TRUE) ; } bool dy_calcprimals (void) /* This routine calculates the values of the basic variables, leaving the result in dy_x. dy_xbasic is updated if the antidegeneracy machinery is idle. There's little to do here - dy_reducerhs and dy_ftran do all the heavy lifting. Returns: TRUE unless there's serious confusion. */ { int vndx,bndx ; double *xvec ; bool degenActive ; const char *rtnnme = "dy_calcprimals" ; # ifndef DYLP_NDEBUG int print ; switch (dy_lp->phase) { case dyPRIMAL1: { print = dy_opts->print.phase1 ; break ; } case dyPRIMAL2: { print = dy_opts->print.phase2 ; break ; } case dyDUAL: { print = dy_opts->print.dual ; break ; } case dyADDCON: { if (dy_opts->print.conmgmt >= 3) print = 5 ; else print = 0 ; break ; } case dyADDVAR: { if (dy_opts->print.varmgmt >= 3) print = 5 ; else print = 0 ; break ; } case dyINIT: { if (dy_opts->print.crash >= 4) print = 7 ; else print = 0 ; break ; } default: { print = 0 ; break ; } } # endif #ifdef DYLP_PARANOIA if (dy_xbasic == NULL) { errmsg(2,rtnnme,"xbasic") ; return (FALSE) ; } if (dy_sys == NULL) { errmsg(2,rtnnme,"dy_sys") ; return (FALSE) ; } if (dy_x == NULL) { errmsg(2,rtnnme,"dy_x") ; return (FALSE) ; } if (dy_basis == NULL) { errmsg(2,rtnnme,"dy_basis") ; return (FALSE) ; } #endif xvec = NULL ; if (dy_lp->degen > 0 && (dy_lp->phase == dyPRIMAL1 || dy_lp->phase == dyPRIMAL2)) { degenActive = TRUE ; } else { degenActive = FALSE ; } /* For the normal case of a non-empty basis ... */ if (dy_sys->concnt > 0) { /* Is the antidegeneracy machinery active? If so, we need to allocate a vector for the calculation so as not to erase the perturbation in dy_xbasic. */ if (degenActive == TRUE) { xvec = (double *) MALLOC((dy_sys->concnt+1)*sizeof(double)) ; } else { xvec = dy_xbasic ; } /* Calculate x = inv(B)(rhs - Ax). dy_reducerhs accounts for nonbasic variables with nonzero values. dy_ftran takes care of premultiplying by the basis inverse. Then update the primal feasibility tolerance. */ if (dy_reducerhs(xvec,TRUE) == FALSE) { errmsg(340,rtnnme,dy_sys->nme) ; if (degenActive == TRUE) FREE(xvec) ; return (FALSE) ; } dy_ftran(xvec,FALSE) ; dy_lp->prim.norm1 = exvec_1norm(xvec,dy_sys->concnt) ; dy_lp->prim.norm2 = exvec_2norm(xvec,dy_sys->concnt) ; dy_lp->prim.max = exvec_infnorm(xvec,dy_sys->concnt,&dy_lp->prim.maxndx) ; dy_tols->pfeas = dy_lp->prim.max ; if (dy_tols->pfeas < 10.0) dy_tols->pfeas = dy_tols->zero ; else dy_tols->pfeas = log10(dy_tols->pfeas)*dy_tols->zero ; dy_tols->pfeas = dy_tols->pfeas_scale*dy_tols->pfeas ; /* Update dy_x. */ if (dy_lp->phase == dyPRIMAL1 || dy_lp->phase == dyPRIMAL2) { for (bndx = 1 ; bndx <= dy_sys->concnt ; bndx++) { vndx = dy_basis[bndx] ; if (flgon(dy_status[vndx],vstatBFX)) { # ifdef DYLP_PARANOIA if (!withintol(xvec[bndx],dy_sys->vub[vndx],dy_tols->zero)) { if (!withintol(xvec[bndx],dy_sys->vub[vndx],dy_tols->pfeas*100)) { errmsg(333,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',vndx,FALSE,NULL),vndx, dy_prtvstat(dy_status[vndx]),xvec[bndx], dy_x[vndx],"fix",fabs(dy_sys->vub[vndx]-xvec[bndx]), dy_tols->pfeas*100) ; } else { dywarn(333,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',vndx,FALSE,NULL),vndx, dy_prtvstat(dy_status[vndx]),xvec[bndx], dy_x[vndx],"fix",fabs(dy_sys->vub[vndx]-xvec[bndx]), dy_tols->zero) ; } } # endif dy_x[vndx] = xvec[bndx] ; } else { dy_x[vndx] = xvec[bndx] ; } } } else { for (bndx = 1 ; bndx <= dy_sys->concnt ; bndx++) { vndx = dy_basis[bndx] ; dy_x[vndx] = xvec[bndx] ; } } } /* And for the pathological case ... Lie about the norms, given their typical usage. */ else { dy_tols->pfeas = dy_tols->pfeas_scale*dy_tols->zero ; dy_lp->prim.norm1 = 1 ; dy_lp->prim.norm2 = 1 ; dy_lp->prim.max = 1 ; dy_lp->prim.maxndx = -1 ; } # ifndef DYLP_NDEBUG if (print >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: recalculated primal variables:",rtnnme) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tprim.max = %g, scale = %g, pzero = %g, pfeas = %g.", dy_lp->prim.max,dy_tols->pfeas_scale, dy_tols->zero,dy_tols->pfeas) ; } # endif # ifdef DYLP_PARANOIA /* Check the nonbasic variables to see that their value agrees with their status. */ for (vndx = 1 ; vndx <= dy_sys->varcnt ; vndx++) { switch (dy_status[vndx]) { case vstatNBUB: case vstatNBFX: { if (!atbnd(dy_x[vndx],dy_sys->vub[vndx])) { errmsg(333,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',vndx,FALSE,NULL),vndx, dy_prtvstat(dy_status[vndx]),dy_x[vndx], dy_sys->vub[vndx],"ub",fabs(dy_sys->vub[vndx]-dy_x[vndx]), dy_tols->pfeas*(1+fabs(dy_sys->vub[vndx]))) ; if (degenActive == TRUE) FREE(xvec) ; return (FALSE) ; } break ; } case vstatNBLB: { if (!atbnd(dy_x[vndx],dy_sys->vlb[vndx])) { errmsg(333,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',vndx,FALSE,NULL),vndx, dy_prtvstat(dy_status[vndx]),dy_x[vndx], dy_sys->vlb[vndx],"lb",fabs(dy_x[vndx]-dy_sys->vlb[vndx]), dy_tols->pfeas*(1+fabs(dy_sys->vlb[vndx]))) ; if (degenActive == TRUE) FREE(xvec) ; return (FALSE) ; } break ; } } } # endif # ifndef DYLP_NDEBUG /* Do any requested printing. Level 5 gets the basic variables, level 6 adds the nonbasic variables. */ if (print >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%8s%20s%16s%16s%16s%8s","pos'n","var (ndx)", "lb","val","ub","status") ; if (degenActive) dyio_outfmt(dy_logchn,dy_gtxecho,"%16s","perturbation") ; for (bndx = 1 ; bndx <= dy_sys->concnt ; bndx++) { vndx = dy_basis[bndx] ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n%8d%14s (%3d)%16.8g%16.8g%16.8g%8s",bndx, consys_nme(dy_sys,'v',vndx,FALSE,NULL),vndx, dy_sys->vlb[vndx],dy_x[vndx],dy_sys->vub[vndx], dy_prtvstat(dy_status[vndx])) ; if (degenActive == TRUE && dy_degenset[bndx] > 0) { if (dy_brkout[bndx] > 0) dyio_outfmt(dy_logchn,dy_gtxecho,"%16.8g", dy_xbasic[bndx]-dy_sys->vlb[vndx]) ; else dyio_outfmt(dy_logchn,dy_gtxecho,"%16.8g", dy_sys->vub[vndx]-dy_xbasic[bndx]) ; } } if (print >= 6) { for (vndx = 1 ; vndx <= dy_sys->varcnt ; vndx++) { if (dy_var2basis[vndx] != 0) continue ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n%8s%14s (%3d)%16.8g%16.8g%16.8g%8s"," ", consys_nme(dy_sys,'v',vndx,FALSE,NULL),vndx, dy_sys->vlb[vndx],dy_x[vndx],dy_sys->vub[vndx], dy_prtvstat(dy_status[vndx])) ; } } } # endif /* Clean up and return. */ if (degenActive == TRUE) FREE(xvec) ; return (TRUE) ; } dyret_enum dy_updateprimals (int j, double deltaj, double *p_abarj) /* This routine updates the value and status of the primal basic variables to reflect the change in x. The calculation is straightforward: x = inv(B)b - (inv(B)a)*delta It's assumed that deltaj and abarj have the correct signs. If the client doesn't supply abarj, it will be calculated here, but not returned to the client. This routine is a bit more specialized than dy_calcprimals. It's intended to be used in the primal update portion of a pivot, and updates the status vector along with the value. The routine makes an effort to snap the updated value of x to lb, 0, or ub whenever possible. It calculates separate tolerances for each value based on the magnitude of the value and the distance travelled (deltak). If deltaj == 0, the routine will quietly return. We have to be careful to preserve the pivot reject flag w.r.t. variables on the pivot reject list. Parameters: j: index of entering variable x deltaj: amount of change in x p_abarj: inv(B)a; if NULL, will be calculated here Returns: dyrOK if the update is successful dyrREQCHK if a bogus value is created dyrSWING if we detected a massive move into infeasibility dyrFATAL is a positive indication of failure */ { int kpos,k,m ; double *abarj,abarkj,deltak,xk,ubk,lbk,newxk ; flags statk,newstatk,qualsk ; double eps0,epsu,epsl ; int swingndx ; double swingratio,maxswing ; bool swing ; dyret_enum retval ; const char *rtnnme = "dy_updateprimals" ; /* Setup */ if (withintol(deltaj,0,dy_tols->zero)) return (dyrOK) ; retval = dyrINV ; m = dy_sys->concnt ; swing = FALSE ; maxswing = 0 ; swingndx = -1 ; /* Did the user provide the ftran'd column? If not, retrieve a and calculate abar. */ if (p_abarj != NULL) { abarj = p_abarj ; } else { abarj = NULL ; if (consys_getcol_ex(dy_sys,j,&abarj) == FALSE) { errmsg(122,rtnnme,dy_sys->nme, "column",consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; if (abarj != NULL) FREE(abarj) ; return (dyrFATAL) ; } dy_ftran(abarj,FALSE) ; } /* Now walk the basis. For each abar != 0, update x. */ for (kpos = 1 ; kpos <= m ; kpos++) { abarkj = abarj[kpos] ; if (abarkj == 0) continue ; deltak = abarkj*deltaj ; if (withintol(deltak,0,dy_tols->zero)) continue ; k = dy_basis[kpos] ; xk = dy_xbasic[kpos] ; statk = getflg(dy_status[k],vstatSTATUS) ; qualsk = getflg(dy_status[k],vstatQUALS) ; eps0 = dy_tols->zero ; ubk = dy_sys->vub[k] ; if (ubk < dy_tols->inf) { epsu = dy_tols->pfeas*(1.0+fabs(ubk)) ; } else { epsu = 0 ; } lbk = dy_sys->vlb[k] ; if (-dy_tols->inf < lbk) { epsl = dy_tols->pfeas*(1.0+fabs(lbk)) ; } else { epsl = 0 ; } newxk = xk-deltak ; setcleanzero(newxk,eps0) ; /* Choose a new status for x. The tests for abovebnd and belowbnd will use the feasibility tolerance. */ if (statk == vstatBFR) { newstatk = vstatBFR ; } else if (belowbnd(newxk,ubk)) { if (abovebnd(newxk,lbk)) { newstatk = vstatB ; } else if (belowbnd(newxk,lbk)) { newstatk = vstatBLLB ; } else { newstatk = vstatBLB ; } } else { if (abovebnd(newxk,ubk)) { newstatk = vstatBUUB ; } else { newstatk = vstatBUB ; } } if (flgon(newstatk,vstatBLB|vstatBUB) && lbk == ubk) { newstatk = vstatBFX ; } /* Check for bogus values? Clean zeros and values judged to be at bound cannot be bogus, so we can skip the test. If bogus === 1.0, there's no point in doing these tests, because the bogus region is identical to the tolerance region. The corrective action for a bogus value is to refactor. If basis.etas == 1, we've just refactored, so again, no sense in checking. */ if (dy_lp->basis.etas > 1 && dy_tols->bogus > 1.0 && newxk != 0 && flgoff(newstatk,vstatBLB|vstatBUB|vstatBFX)) { if (fabs(newxk) < eps0*dy_tols->bogus) { retval = dyrREQCHK ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) dywarn(374,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"x",k,fabs(newxk),eps0*dy_tols->bogus, eps0*dy_tols->bogus-newxk) ; # endif } if (flgon(newstatk,vstatB|vstatBLLB) && fabs(lbk-newxk) < epsl*dy_tols->bogus) { retval = dyrREQCHK ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) dywarn(375,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"lb",k,"x",k, lbk,newxk,lbk-newxk,epsl*dy_tols->bogus, epsl*dy_tols->bogus-(lbk-newxk)) ; # endif } if (flgon(newstatk,vstatB|vstatBUB) && fabs(newxk-ubk) < epsu*dy_tols->bogus) { retval = dyrREQCHK ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) { dywarn(375,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"ub",k,"x",k, ubk,newxk,ubk-newxk,epsu*dy_tols->bogus, epsu*dy_tols->bogus-(ubk-newxk)) ; } # endif } } /* Are we headed off into the ozone? Make a note. */ if (flgon(newstatk,vstatBLLB|vstatBUUB)) { swingratio = (fabs(newxk)+1)/(fabs(dy_xbasic[kpos])+1) ; if (swingratio > dy_tols->swing) { swing = TRUE ; if (swingratio > maxswing) { maxswing = swingratio ; swingndx = k ; } } } /* Set the new status and value into the status and value arrays. */ dy_xbasic[kpos] = newxk ; dy_x[k] = newxk ; dy_status[k] = newstatk|qualsk ; } /* All basic variables are updated. Did we detect a swing into the unknown? */ if (swing == TRUE) { retval = dyrSWING ; dy_lp->ubnd.ndx = swingndx ; dy_lp->ubnd.ratio = maxswing ; # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 2 || dy_opts->print.phase1 >= 2 || dy_opts->print.phase2 >= 2) { k = dy_lp->ubnd.ndx ; statk = dy_status[k] ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n Pseudo-unbounded: growth %e for %s (%d) %s = %g", dy_lp->ubnd.ratio,consys_nme(dy_sys,'v',k,FALSE,NULL),k, dy_prtvstat(statk),dy_x[k]) ; if (flgon(statk,vstatBUUB)) { dyio_outfmt(dy_logchn,dy_gtxecho," > %g.",dy_sys->vub[k]) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho," < %g.",dy_sys->vlb[k]) ; } } # endif } # ifndef DYLP_NDEBUG /* Do we need to print the updates? If so, do it here. */ if (dy_opts->print.dual >= 6) { bool first = TRUE ; for (kpos = 1 ; kpos <= dy_sys->concnt ; kpos++) if (abarj[kpos] != 0) { if (first == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\trevised primal variables:") ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n%8s%20s%16s%16s%16s %s","pos'n","var (ndx)", "lb","val","ub","status") ; first = FALSE ; } k = dy_basis[kpos] ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n%8d%14s (%3d)%16.8g%16.8g%16.8g %s",kpos, consys_nme(dy_sys,'v',k,FALSE,NULL),k, dy_sys->vlb[k],dy_xbasic[kpos],dy_sys->vub[k], dy_prtvstat(dy_status[k])) ; } if (first == TRUE) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tno change to primal variables.") ; } # endif /* That's it. If retval is still dyrINV, nothing out of the ordinary happened, so set it to dyrOK. Clean up and we can return. */ if (retval == dyrINV) retval = dyrOK ; if (p_abarj == NULL) FREE(abarj) ; return (retval) ; } void dy_calcduals (void) /* This routine calculates the values of the dual variables as y = cinv(B). Note that these duals have the correct sign for the primal min cx problem. To be correct for the dual problem, multiply by -1. See the written documentation or the comments at the head of dy_dual.c If antidegeneracy is active, updates are restricted to duals that correspond to logicals included in the restricted subproblem. The routine also updates dfeas, the scaled zero tolerance for reduced costs. */ { int xkpos,xkndx ; bool degenActive ; double *yvec ; # ifndef DYLP_NDEBUG int print ; char *rtnnme = "dy_calcduals" ; switch (dy_lp->phase) { case dyPRIMAL1: { print = dy_opts->print.phase1 ; break ; } case dyPRIMAL2: { print = dy_opts->print.phase2 ; break ; } case dyDUAL: { print = dy_opts->print.dual ; break ; } case dyADDCON: { if (dy_opts->print.conmgmt >= 3) print = 7 ; else print = 0 ; break ; } case dyINIT: { if (dy_opts->print.crash >= 4) print = 7 ; else print = 0 ; break ; } default: { print = 0 ; break ; } } # endif if (dy_lp->phase == dyDUAL && dy_lp->degen > 0) { degenActive = TRUE ; } else { degenActive = FALSE ; } /* For a normal, non-empty basis: */ if (dy_sys->concnt > 0) { if (degenActive == TRUE) { yvec = (double *) CALLOC((dy_sys->concnt+1),sizeof(double)) ; } else { yvec = dy_y ; } for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { xkndx = dy_basis[xkpos] ; yvec[xkpos] = dy_sys->obj[xkndx] ; } dy_btran(yvec) ; dy_lp->dual.norm1 = exvec_1norm(yvec,dy_sys->concnt) ; dy_lp->dual.norm2 = exvec_2norm(yvec,dy_sys->concnt) ; dy_lp->dual.max = exvec_infnorm(yvec,dy_sys->concnt,&dy_lp->dual.maxndx) ; dy_tols->dfeas = dy_lp->dual.max ; if (dy_tols->dfeas < 10.0) dy_tols->dfeas = dy_tols->cost ; else dy_tols->dfeas = log10(dy_tols->dfeas)*dy_tols->cost ; dy_tols->dfeas = dy_tols->dfeas_scale*dy_tols->dfeas ; if (degenActive == TRUE) { for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { if (dy_ddegenset[xkpos] == 0) dy_y[xkpos] = yvec[xkpos] ; } FREE(yvec) ; } } /* And the pathological case of an empty basis. We lie about the norms, given their typical use. */ else { dy_tols->dfeas = dy_tols->dfeas_scale*dy_tols->cost ; dy_lp->dual.norm1 = 1 ; dy_lp->dual.norm2 = 1 ; dy_lp->dual.max = 1 ; } # ifndef DYLP_NDEBUG if (print >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: recalculated dual variables:",rtnnme) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tdual.max = %g, scale = %g, dzero = %g, dfeas = %g.", dy_lp->dual.max,dy_tols->dfeas_scale, dy_tols->cost,dy_tols->dfeas) ; if (print >= 7) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%8s%20s%16s","pos'n","constraint","val") ; if (degenActive) dyio_outfmt(dy_logchn,dy_gtxecho,"%16s","perturbation") ; for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%8d%20s%16.8g",xkpos, consys_nme(dy_sys,'c',xkpos,FALSE,NULL),dy_y[xkpos]) ; if (degenActive && dy_ddegenset[xkpos] > 0) { dyio_outfmt(dy_logchn,dy_gtxecho,"%16.8g",dy_y[xkpos]) ; } } dyio_outchr(dy_logchn,dy_gtxecho,'\n') ; } } # endif return ; } double dy_calcobj (void) /* This routine calculates the value of the objective function using the primal variables. During primal phase I, suppress inactzcorr, as c = 0 for nonbasic variables by definition. Returns: objective value, or NaN in the event of a paranoid error. */ { int vndx ; double z ; #ifdef DYLP_PARANOIA const char *rtnnme = "dy_calcobj" ; if (dy_x == NULL) { errmsg(2,rtnnme,"dy_x") ; return (quiet_nan(0)) ; } if (dy_sys == NULL) { errmsg(2,rtnnme,"dy_sys") ; return (quiet_nan(0)) ; } if (dy_sys->obj == NULL) { errmsg(2,rtnnme,"dy_sys->obj") ; return (quiet_nan(0)) ; } #endif z = 0.0 ; for (vndx = 1 ; vndx <= dy_sys->varcnt ; vndx++) if (dy_x[vndx] != 0.0) z += dy_sys->obj[vndx]*dy_x[vndx] ; if (dy_lp->p1obj.installed == FALSE) z += dy_lp->inactzcorr ; setcleanzero(z,dy_tols->zero) ; return (z) ; } double dy_calcdualobj (void) /* This routine calculates the dual objective z = yb, taking into account nonbasic variables at nonzero bounds. NOTE that the value returned will not reflect the contribution due to inactive variables. Also, unlike the primal case, we need to correct dy_y on the fly to exclude duals involved in a perturbed subproblem when antidegeneracy is active. Remember that dy_y holds duals with the correct sign for the min cx primal. We have to take care when pulling values for dual variables from cbar, as cbar (when interpreted as a dual variable value) has the correct sign for the min yb dual problem. Parameters: none Returns: dual objective value, or NaN if there's an error during the calculation. */ { int i,j,m,n ; flags statj ; double z,bndj,cbarj ; double *rhs,*vlb,*vub ; const char *rtnnme = "dy_calcdualobj" ; #ifdef DYLP_PARANOIA if (dy_x == NULL) { errmsg(2,rtnnme,"dy_x") ; return (quiet_nan(0)) ; } if (dy_y == NULL) { errmsg(2,rtnnme,"dy_y") ; return (quiet_nan(0)) ; } if (dy_var2basis == NULL) { errmsg(2,rtnnme,"dy_var2basis") ; return (quiet_nan(0)) ; } if (dy_sys == NULL) { errmsg(2,rtnnme,"dy_sys") ; return (quiet_nan(0)) ; } if (dy_sys->obj == NULL) { errmsg(2,rtnnme,"dy_sys->obj") ; return (quiet_nan(0)) ; } if (dy_sys->rhs == NULL) { errmsg(2,rtnnme,"dy_sys->rhs") ; return (quiet_nan(0)) ; } #endif z = 0.0 ; m = dy_sys->concnt ; n = dy_sys->varcnt ; rhs = dy_sys->rhs ; vlb = dy_sys->vlb ; vub = dy_sys->vub ; /* Start with the easy part: dot(y,b) for active explicit constraints. We need to exclude duals incorporated in a degenerate subproblem, which are by definition zero. */ for (i = 1 ; i <= m ; i++) { j = dy_basis[i] ; if (dy_ddegenset[j] == 0 && dy_y[i] != 0) { z += dy_y[i]*rhs[i] ; } } /* Now the harder part: the contribution due to variables nonbasic at nonzero bounds. For the min primal/min dual setup in dylp, the math tells us that the reduced cost cbar of a variable x NBUB is really the negative of the correct dual value. For x NBLB, the reduced cost is the correct dual value. But we're not done yet! The values of cbar are the correct dual values for the dual algorithm, but they have the wrong sign for the primal algorithm. A multiplication by -1; now cbar is correct for x NBUB, incorrect for x NBLB. We'll fix the value for x NBLB that by using l instead of -l (remember that a lower bound constraint looks like -x <= -l). We need to scan the logicals because range constraints can result in a slack with a finite nonzero upper bound. */ for (j = 1 ; j <= n ; j++) { if (dy_ddegenset[j] > 0) continue ; statj = getflg(dy_status[j],vstatSTATUS) ; if (flgon(statj,vstatBASIC)) continue ; cbarj = dy_cbar[j] ; if (cbarj == 0) continue ; switch (statj) { case vstatNBLB: case vstatNBFX: { bndj = vlb[j] ; break ; } case vstatNBUB: { bndj = vub[j] ; break ; } case vstatNBFR: case vstatSB: { bndj = 0 ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (quiet_nan(0)) ; } } if (bndj != 0) z += cbarj*bndj ; } if (dy_lp->p1obj.installed == FALSE) z += dy_lp->inactzcorr ; /* Final cleanup and return. */ setcleanzero(z,dy_tols->zero) ; return (z) ; } double dy_calcpinfeas (void) /* This routine calculates primal infeasibility from scratch. It scans the status vector and totals infeasibility for all variables flagged as BLLB or BUUB. Parameters: none Returns: total primal infeasibility. */ { int k,n ; double infeas,xk,ubk,lbk ; flags statk ; double *vub,*vlb ; n = dy_sys->varcnt ; vub = dy_sys->vub ; vlb = dy_sys->vlb ; infeas = 0 ; for (k = 1 ; k <= n ; k++) { statk = dy_status[k] ; if (flgon(statk,vstatBLLB)) { lbk = vlb[k] ; xk = dy_x[k] ; infeas += lbk-xk ; } else if (flgon(statk,vstatBUUB)) { ubk = vub[k] ; xk = dy_x[k] ; infeas += xk-ubk ; } } return (infeas) ; } bool dy_calccbar (void) /* This routine calculates cbar from scratch for all nonbasic variables, as cbar = c - dot(y,a). The basic restriction for calculating reduced costs is that we must have dual variables, and we need to be able to distinguish basic variables from nonbasic variables. dy_var2basis is the earliest indicator we can use for this --- it's valid early in dyINIT, so that we can use it to try and establish a dual feasible start. It remains valid in later phases. On the other hand, if we're feeling paranoid, this is a good opportunity to check the status of all variables. Hence the two separate code blocks below. Parameters: none Returns: TRUE if the values are calculated without error, FALSE otherwise. */ { int xjndx ; double cbarj ; # ifdef DYLP_PARANOIA flags xjstatus ; const char *rtnnme = "dy_calccbar" ; # endif /* Open a loop and walk the columns, looking for nonbasic variables. */ for (xjndx = 1 ; xjndx <= dy_sys->varcnt ; xjndx++) { # ifndef DYLP_PARANOIA /* The expedient decision: basic or not? */ if (dy_var2basis[xjndx] > 0) { dy_cbar[xjndx] = 0.0 ; continue ; } # else /* The cautious decision (when available). */ if (dy_lp->phase == dyINIT) { if (dy_var2basis[xjndx] > 0) { dy_cbar[xjndx] = 0.0 ; continue ; } } else { xjstatus = dy_status[xjndx] ; if (dy_chkstatus(xjndx) == FALSE) return (FALSE) ; if (flgon(xjstatus,vstatBASIC)) { dy_cbar[xjndx] = 0.0 ; continue ; } } # endif /* Calculate the reduced cost and store it in cbar. */ cbarj = consys_dotcol(dy_sys,xjndx,dy_y) ; # ifdef DYLP_PARANOIA if (isnan(cbarj) == TRUE) { errmsg(320,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"y",xjndx,"reduced cost") ; return (FALSE) ; } # endif dy_cbar[xjndx] = dy_sys->obj[xjndx]-cbarj ; setcleanzero(dy_cbar[xjndx],dy_tols->cost) ; } return (TRUE) ; } void dy_setbasicstatus (void) /* This routine runs through the basis and resets the status of basic variables. It's handy after arbitrary changes to the nonbasic variables (as when we patch the basis, or flip variables for activation during dual simplex). Parameters: none Returns: undefined */ { int xindx,bpos ; double xi,ubi,lbi ; flags xistatus ; /* Just scan the basis, checking the values against the bounds. */ for (bpos = 1 ; bpos <= dy_sys->concnt ; bpos++) { xindx = dy_basis[bpos] ; xi = dy_x[xindx] ; xistatus = dy_status[xindx] ; lbi = dy_sys->vlb[xindx] ; ubi = dy_sys->vub[xindx] ; if (flgoff(xistatus,vstatBFR)) { if (belowbnd(xi,lbi)) { dy_status[xindx] = vstatBLLB ; } else if (atbnd(xi,lbi)) { if (lbi == ubi) dy_status[xindx] = vstatBFX ; else dy_status[xindx] = vstatBLB ; dy_x[xindx] = lbi ; dy_xbasic[bpos] = lbi ; } else if (belowbnd(xi,ubi)) { dy_status[xindx] = vstatB ; } else if (atbnd(xi,ubi)) { dy_status[xindx] = vstatBUB ; dy_x[xindx] = ubi ; dy_xbasic[bpos] = ubi ; } else { dy_status[xindx] = vstatBUUB ; } } # ifndef DYLP_NDEBUG if (xistatus != dy_status[xindx]) { if ((dy_lp->phase != dyADDVAR && dy_opts->print.basis >= 3) || (dy_lp->phase == dyADDVAR && dy_opts->print.varmgmt >= 3)) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%s (%d) = %g, status %s ", consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx,xi, dy_prtvstat(xistatus)) ; dyio_outfmt(dy_logchn,dy_gtxecho,"corrected to %s.", dy_prtvstat(dy_status[xindx])) ; } } # endif } return ; } void dy_dseinit (void) /* This routine calculates from scratch the basis inverse row norms used in DSE pricing. The algorithm is straightforward --- use dy_btran to calculate einv(B) = beta, then calculate ||beta||^2. Parameters: none Returns: undefined */ { int xkpos ; double *betak ; # if MALLOC_DEBUG == 2 char *rtnnme = "dy_dseinit" ; # endif # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: initialising ||beta||^2 for DSE.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } # endif /* Grab space for a working vector. */ betak = (double *) MALLOC((dy_sys->concnt+1)*sizeof(double)) ; /* And now the loop to do the calculation. The drill is * clear the vector * insert a 1 in the proper place * btran it * calculate the norm. */ for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { memset(betak,0,(dy_sys->concnt+1)*sizeof(double)) ; betak[xkpos] = 1.0 ; dy_btran(betak) ; dy_rho[xkpos] = exvec_ssq(betak,dy_sys->concnt) ; } /* Clean up and return. */ FREE(betak) ; return ; } void dy_pseinit (void) /* This routine resets the reference frame for PSE pricing. It's a trivial routine, but it seemed like a good idea to encapsulate this bit of code. It gets used in several places. Parameters: none Returns: undefined */ { int xindx ; # ifndef DYLP_NDEBUG if (dy_opts->print.phase1 >= 2 || dy_opts->print.phase2 >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: initialising ||abar~||^2 for PSE.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } # endif memset(dy_frame,0,(dy_sys->varcnt+1)*sizeof(bool)) ; memset(dy_gamma,0,(dy_sys->varcnt+1)*sizeof(double)) ; for (xindx = 1 ; xindx <= dy_sys->varcnt ; xindx++) { if (flgon(dy_status[xindx],vstatNONBASIC|vstatNBFR)) { dy_frame[xindx] = TRUE ; dy_gamma[xindx] = 1.0 ; } } return ; } #ifdef DYLP_PARANOIA bool dy_chkstatus (int vndx) /* This routine is a paranoid check routine -- it does a number of consistency checks based on the status of the variable. Major basis errors (errors of logic and big-time numerical inaccuracy) rate a return value of FALSE. There is a relatively common case where accumulated numerical inaccuracy results in errors on the order of 1.0e-10 or so; these get a return of TRUE; the normal accuracy control machinery should catch these eventually. If vndx is 0, all variables are checked. Parameters: vndx: variable index; if 0, all variables are checked Returns: TRUE if status is acceptable, FALSE if major errors turn up. */ { int first,last,xkndx,iter ; flags xkstatus ; double xk,xbk,ubk,lbk,normxb,tolu,bogusu,toll,bogusl,cbark ; bool retval,primDegen,dualDegen ; char *statk ; const char *nmek,*phase ; const char *rtnnme = "dy_chkstatus" ; if (vndx < 0 || vndx > dy_sys->varcnt) { errmsg(102,rtnnme,dy_sys->nme,"variable",vndx,0,dy_sys->varcnt) ; return (FALSE) ; } if (vndx == 0) { first = 1 ; last = dy_sys->varcnt ; } else { first = vndx ; last = vndx ; } retval = TRUE ; if (dy_lp->degen > 0 && dy_lp->phase == dyDUAL) { dualDegen = TRUE ; } else { dualDegen = FALSE ; } if (dy_lp->degen > 0 && (dy_lp->phase == dyPRIMAL1 || dy_lp->phase == dyPRIMAL2)) { primDegen = TRUE ; } else { primDegen = FALSE ; } phase = dy_prtlpphase(dy_lp->phase,TRUE) ; iter = dy_lp->tot.iters ; normxb = exvec_2norm(dy_xbasic,dy_sys->concnt) ; for (xkndx = first ; xkndx <= last ; xkndx++) { xkstatus = dy_status[xkndx] ; nmek = consys_nme(dy_sys,'v',xkndx,TRUE,NULL) ; /* Clear any qualifiers before we go further. */ clrflg(xkstatus,vstatQUALS) ; /* Check that the status is a single status, and not some mix. If we fail this, skip to the next iteration of the loop. */ if (!(xkstatus == vstatBFX || xkstatus == vstatBUB || xkstatus == vstatB || xkstatus == vstatBLB || xkstatus == vstatBLLB || xkstatus == vstatBUUB || xkstatus == vstatBFR || xkstatus == vstatNBFX || xkstatus == vstatNBUB || xkstatus == vstatNBLB || xkstatus == vstatNBFR || xkstatus == vstatSB)) { errmsg(300,rtnnme,(int) xkstatus,nmek,xkndx) ; retval = FALSE ; continue ; } statk = dy_prtvstat(xkstatus) ; /* For basic variables, check that basis and var2basis agree. For nonbasic and superbasic variables, check that var2basis is 0. Make sure that the value in dy_var2basis is valid first. While we're here, might as well check that dy_xbasic and dy_x agree for basic variables, unless the anti-degeneracy algorithm is working. (Note that this > should be < a logical question, not a tolerance question. But somewhere, small discrepancies creep in, and I haven't been able to track down the cause just yet.) */ xk = dy_x[xkndx] ; if (dy_var2basis[xkndx] < 0 || dy_var2basis[xkndx] > dy_sys->varcnt) { errmsg(330,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, dy_var2basis[xkndx],-1) ; retval = FALSE ; } else if (flgon(xkstatus,vstatBASIC)) { if (dy_basis[dy_var2basis[xkndx]] != xkndx) { errmsg(330,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, dy_var2basis[xkndx],dy_basis[dy_var2basis[xkndx]]) ; retval = FALSE ; } xk = dy_x[xkndx] ; xbk = dy_xbasic[dy_var2basis[xkndx]] ; if (primDegen == FALSE) { if (!withintol(xbk,xk,dy_tols->zero*(1.0+fabs(xbk)))) { if (withintol(xbk,xk,10*dy_tols->zero*(1.0+fabs(xbk)))) { dywarn(332,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk,xk,xbk, fabs(xk-xbk),dy_tols->zero*(1.0+fabs(xbk))) ; } else { errmsg(332,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk,xk,xbk, fabs(xk-xbk),dy_tols->zero*(1.0+fabs(xbk))) ; retval = FALSE ; } } # ifdef UNDEFINED /* This bit of code will, on a fairly regular basis, spit out warnings about |xbk-xk| around 1.0e-15 -- 1.0e-17. Typically in primal phase II. Logically, dy_x and dy_xbasic should be equivalent, and a quick check seems to say that they're updated simultaneously. 10^-17 is roughly 2^-56, so this could just be noise in the least significant bits. */ else if (xbk != xk) { dywarn(332,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk,xk,xbk, fabs(xk-xbk),0.0) ; } # endif } } else { if (dy_var2basis[xkndx] != 0) { errmsg(330,rtnnme,dy_sys->nme,phase, iter,nmek,xkndx,statk, dy_var2basis[xkndx],dy_basis[dy_var2basis[xkndx]]) ; retval = FALSE ; } xk = dy_x[xkndx] ; } /* Check that the bounds are consistent with the status. * Fixed variables (BFX, NBFX) should have equal bounds. Failure of this condition is a logical error. Conversely, variables with equal bounds should have status BFX, NBFX, BLLB, or BUUB. The latter two aren't legal in P2, but the normal error recovery machinery should cope with loss of feasibility as long as the status and value agree. * Nonbasic variables should be exactly equal to their bounds --- they are supposed to be set to the bound as they're pivoted out. Failure of this condition is a logical error. * Variables which are basic at bound (BFX, BLB, BUB) should have a value which is equal (within tolerance) of the appropriate bound. * Strictly basic (B) and superbasic (SB) variables should be strictly within bound. For basic variables, if anti-degeneracy is active this test must be made against dy_xbasic. Since we've tested above for dy_x = dy_xbasic when anti-degeneracy isn't active, we can test here using xbasic. Superbasics (by virtue of not being basic) must be tested using xk. * Free variables should have no bounds. */ ubk = dy_sys->vub[xkndx] ; lbk = dy_sys->vlb[xkndx] ; if (ubk == lbk && !(flgon(xkstatus,vstatBFX|vstatNBFX) || (flgon(xkstatus,vstatBLLB|vstatBUUB) && dy_lp->phase != dyPRIMAL2))) { errmsg(379,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,ubk,statk) ; retval = FALSE ; } tolu = dy_tols->pfeas*(1.0+maxx(normxb,fabs(ubk))) ; bogusu = 1000*tolu ; toll = dy_tols->pfeas*(1.0+maxx(normxb,fabs(lbk))) ; bogusl = 1000*toll ; switch (xkstatus) { case vstatBFX: { if (lbk != ubk) { errmsg(331,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,xbk,statk, lbk,ubk,ubk-lbk,0.0) ; retval = FALSE ; break ; } if (!atbnd(xbk,ubk)) { if (!withintol(xbk,ubk,bogusu)) { errmsg(333,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, xbk,ubk,"lb = ub",fabs(xbk-ubk),bogusu) ; retval = FALSE ; } else { dywarn(333,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, xbk,ubk,"lb = ub",fabs(xbk-ubk),tolu) ; } } break ; } case vstatBUUB: { if (!abovebnd(xbk,ubk)) { if (xbk < ubk-bogusu) { errmsg(335,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, lbk,xbk,ubk,ubk-xbk,bogusu+tolu) ; retval = FALSE ; } else { dywarn(335,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, lbk,xbk,ubk,ubk-xbk,tolu) ; } } else if (dy_lp->phase == dyPRIMAL2) dywarn(323,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, lbk,xbk,ubk,xbk-ubk,tolu) ; break ; } case vstatBUB: { if (!atbnd(xbk,ubk)) { if (!withintol(xbk,ubk,bogusu)) { errmsg(333,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, xbk,ubk,"ub",ubk-xbk,bogusu) ; retval = FALSE ; } else { dywarn(333,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, xbk,ubk,"ub",ubk-xbk,tolu) ; } } break ; } case vstatB: { if (!(abovebnd(xbk,lbk) && belowbnd(xbk,ubk))) { if (xbk < lbk-bogusl) { errmsg(322,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, lbk,xbk,ubk,lbk-xbk,bogusl+toll) ; retval = FALSE ; } else if (xbk > ubk+bogusu) { errmsg(322,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, lbk,xbk,ubk,xbk-ubk,bogusu+tolu) ; retval = FALSE ; } else if (xbk < lbk+toll) { dywarn(322,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, lbk,xbk,ubk,lbk-xbk,toll) ; } else if (xbk > ubk-tolu) { dywarn(322,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, lbk,xbk,ubk,xbk-ubk,tolu) ; } } break ; } case vstatSB: { if (!(abovebnd(xk,lbk) && belowbnd(xk,ubk))) { if (xk < lbk-bogusl) { errmsg(322,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, lbk,xk,ubk,lbk-xk,bogusl+toll) ; retval = FALSE ; } else if (xk > ubk+bogusu) { errmsg(322,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, lbk,xk,ubk,xk-ubk,bogusu+tolu) ; retval = FALSE ; } else if (xk < lbk+toll) { dywarn(322,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, lbk,xk,ubk,lbk-xk,toll) ; } else if (xk > ubk-tolu) { dywarn(322,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, lbk,xk,ubk,xbk-ubk,tolu) ; } } break ; } case vstatBLB: { if (!atbnd(xbk,lbk)) { if (!withintol(xbk,lbk,bogusl)) { errmsg(333,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, xbk,lbk,"lb",xbk-lbk,bogusl) ; retval = FALSE ; } else { dywarn(333,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, xbk,lbk,"lb",xbk-lbk,toll) ; } } break ; } case vstatBLLB: { if (!belowbnd(xbk,lbk)) { if (xbk > lbk+bogusl) { errmsg(335,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, lbk,xbk,ubk,xbk-lbk,bogusl+toll) ; retval = FALSE ; } else { dywarn(335,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, lbk,xbk,ubk,xbk-lbk,toll) ; } } else if (dy_lp->phase == dyPRIMAL2) dywarn(323,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, lbk,xbk,ubk,lbk-xbk,toll) ; break ; } case vstatBFR: case vstatNBFR: { if (ubk < dy_tols->inf || lbk > -dy_tols->inf) { errmsg(334,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,lbk,ubk,statk) ; retval = FALSE ; } break ; } case vstatNBFX: { if (lbk != ubk) { errmsg(331,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,xbk,statk, lbk,ubk,ubk-lbk,0.0) ; retval = FALSE ; break ; } if (xk != ubk) { errmsg(333,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, xk,ubk,"lb = ub",ubk-xk,0.0) ; retval = FALSE ; } break ; } case vstatNBUB: { if (xk != ubk) { errmsg(333,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, xk,ubk,"ub",ubk-xk,0.0) ; retval = FALSE ; } break ; } case vstatNBLB: { if (xk != lbk) { errmsg(333,rtnnme,dy_sys->nme,phase,iter,nmek,xkndx,statk, xk,lbk,"lb",xk-lbk,0.0) ; retval = FALSE ; } break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } /* Final checks: * Superbasic variables should only show up in primal phase II, where we're concerned about maintaining feasibility. During primal phase I or dual simplex, we force nonbasic variables to bound and live with any loss of feasibility. * Nonbasic free variables should not occur during dual simplex unless the reduced cost is zero -- we shouldn't have been able to make a feasible start otherwise. */ switch (xkstatus) { case vstatSB: { if (dy_lp->phase != dyPRIMAL2) { errmsg(346,rtnnme,dy_sys->nme,phase,iter,statk,nmek,xkndx) ; retval = FALSE ; } break ; } case vstatNBFR: { if (dy_lp->phase == dyDUAL) { cbark = dy_cbar[xkndx] ; if (cbark != 0) { errmsg(346,rtnnme,dy_sys->nme,phase,iter,statk,nmek,xkndx) ; retval = FALSE ; } } break ; } } } return (retval) ; } void dy_chkdual (int lvl) /* This routine checks the dual variables and reduced costs for correctness, and also checks for dual feasibility (agreement of reduced costs and status). If dual antidegeneracy is inactive, the routine is checking for * numerical agreement between the iteratively updated duals and reduced costs (dy_y, dy_cbar) and the fresh values calculated here; * numerical agreement between the reduced costs of logicals and the associated duals; and * logical agreement between duals, reduced costs, and primal status. When dual antidegeneracy is active, the routine allows for differences between the iterative and calculated values when the column is part of a restricted subproblem. It checks that the freshly calculated values are zero (otherwise the column should not be involved in the restricted subproblem). Unfortunately, given the way that the perturbation is applied (directly to dy_cbar), there's no way I know of to check for correct values of perturbed reduced costs and duals. Parameters: lvl: 0: suppresses all printing (allows or convenient suppression of messages without recompiling) 1: prints a summary only if problems are detected 2: prints a warning for each problem detected */ { int i,j,m,n ; flags statj ; double cbarj,yi,diff,tol ; bool degenActive ; double *y,*cbar ; int yerrcnt,cbarerrcnt,ycbarerrcnt,cbarstatuserrcnt ; double yerrtot,cbarerrtot ; /* Scaling can tighten the base value of tols.cost, and we don't want that here. Hardwire the default value. */ const double base_tol = 1.0e-11 ; const char *rtnnme = "dy_chkdual" ; if (dy_lp->degen > 0 && dy_lp->phase == dyDUAL) { degenActive = TRUE ; } else { degenActive = FALSE ; } m = dy_sys->concnt ; n = dy_sys->varcnt ; /* Start out by calculating what we think the duals and reduced costs should be, independent of the current state of the dual degeneracy algorithm. */ y = (double *) MALLOC((m+1)*sizeof(double)) ; cbar = (double *) MALLOC((n+1)*sizeof(double)) ; for (i = 1 ; i <= m ; i++) { j = dy_basis[i] ; y[i] = dy_sys->obj[j] ; } dy_btran(y) ; for (j = 1 ; j <= n ; j++) { cbarj = consys_dotcol(dy_sys,j,y) ; cbar[j] = dy_sys->obj[j]-cbarj ; } /* Now see if we agree on the values for the duals. When dual antidegeneracy is inactive, or for columns not involved in the restricted subproblem, we're simply checking our fresh values against the iteratively updated values. When dual antidegeneracy is active, in a position that's involved in a restricted subproblem, the real dual should be 0. Since reduced subproblems are nested, it's sufficient to check dy_ddegenset == 0. */ tol = 1000*base_tol ; yerrcnt = 0 ; yerrtot = 0.0 ; for (i = 1 ; i <= m ; i++) { j = dy_basis[i] ; if (dy_ddegenset[j] == 0) { diff = fabs(dy_y[i]-y[i]) ; if (diff > tol) { if (lvl >= 2) { dywarn(321,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, (dy_lp->degen == 0)?"real":"uninvolved", "dy_y",i,dy_y[i],y[i],diff,tol) ; } yerrcnt++ ; yerrtot += diff ; } } else { if (fabs(y[i]) > tol) { if (lvl >= 2) { dywarn(321,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "real","y",i,y[i],0.0,y[i],tol) ; } yerrcnt++ ; yerrtot += fabs(y[i]) ; } } } /* Now try for the reduced costs. As with the duals, if the column is involved in the reduced subproblem, the real reduced cost should be 0. If not, they should be identical. */ tol = 1000*base_tol ; cbarerrcnt = 0 ; cbarerrtot = 0.0 ; for (j = 1 ; j <= n ; j++) { if (dy_ddegenset[j] == 0) { diff = fabs(dy_cbar[j]-cbar[j]) ; if (diff > tol) { if (lvl >= 2) { dywarn(321,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, (dy_lp->degen == 0)?"real":"uninvolved", "dy_cbar",j,dy_cbar[j],cbar[j],diff,tol) ; } cbarerrcnt++ ; cbarerrtot += diff ; } } else { if (fabs(cbar[j]) > tol) { if (lvl >= 2) { dywarn(321,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "real","cbar",j,cbar[j],0.0,cbar[j],tol) ; } cbarerrcnt++ ; cbarerrtot += fabs(cbar[j]) ; } } } /* Check that, for 1 < i < m, that the reduced cost of the logical equals the negative of the dual variable for the constraint for variables not involved in a degenerate set. Since we perturbed cbar as a surrogate for perturbing c, it's no longer true that cbar = -dot(y,a); we now have cbar = c - dot(y,a). Unfortunately, we don't know c (though we could calculate it). */ ycbarerrcnt = 0 ; for (i = 1 ; i <= m ; i++) { statj = dy_status[i] ; if (dy_ddegenset[i] == 0) { cbarj = cbar[i] ; yi = y[i] ; if (fabs(cbarj+yi) > base_tol) { if (lvl >= 2) { dywarn(336,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',i,FALSE,NULL),i,dy_prtvstat(statj), "real",-yi,cbarj,fabs(cbarj+yi),base_tol) ; } ycbarerrcnt++ ; } } } /* Check that primal status agrees with reduced costs. If antidegeneracy is active, the real values should still be in agreement (zero is neutral, hence should not cause an error). */ cbarstatuserrcnt = 0 ; for (j = 1 ; j <= n ; j++) { statj = dy_status[j] ; cbarj = dy_cbar[j] ; if ((flgon(statj,vstatNBLB) && cbarj < -dy_tols->dfeas) || (flgon(statj,vstatNBUB) && cbarj > dy_tols->dfeas) || (flgon(statj,vstatNBFR) && cbarj != 0) || flgon(statj,vstatSB)) { if (lvl >= 2) { dywarn(347,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',j,FALSE,NULL),j, dy_prtvstat(statj),j,cbarj,dy_tols->dfeas) ; } cbarstatuserrcnt++ ; } if (degenActive && dy_ddegenset[j] < dy_lp->degen) { cbarj = cbar[j] ; if ((flgon(statj,vstatNBLB) && cbarj < -dy_tols->dfeas) || (flgon(statj,vstatNBUB) && cbarj > dy_tols->dfeas) || (flgon(statj,vstatNBFR) && cbarj != 0) || flgon(statj,vstatSB)) { if (lvl >= 2) { dywarn(347,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',j,FALSE,NULL),j, dy_prtvstat(statj),j,cbarj,dy_tols->dfeas) ; } cbarstatuserrcnt++ ; } } } /* Summary. Print if there's any error. */ if (lvl >= 1 && yerrcnt+cbarerrcnt+ycbarerrcnt+cbarstatuserrcnt > 0) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n %s: [%s]: (%s)%d: ",rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; if (yerrcnt > 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "%d y value errors (%g)", yerrcnt,yerrtot) ; } if (cbarerrcnt > 0) { if (yerrcnt > 0) dyio_outfmt(dy_logchn,dy_gtxecho,", ") ; dyio_outfmt(dy_logchn,dy_gtxecho,"%d cbar value errors (%g)", cbarerrcnt,cbarerrtot) ; } if (ycbarerrcnt > 0) { if (yerrcnt+cbarerrcnt > 0) dyio_outfmt(dy_logchn,dy_gtxecho,", ") ; dyio_outfmt(dy_logchn,dy_gtxecho, "%d y/cbar agreement errors",ycbarerrcnt) ; } if (cbarstatuserrcnt > 0) { if (yerrcnt+cbarerrcnt+ycbarerrcnt > 0) { dyio_outfmt(dy_logchn,dy_gtxecho,", ") ; } dyio_outfmt(dy_logchn,dy_gtxecho, "%d cbar/status agreement errors",cbarstatuserrcnt) ; } dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } /* Clean up and we're done. */ FREE(cbar) ; FREE(y) ; return ; } bool dy_chkdysys (consys_struct *orig_sys) /* This routine is a paranoid check routine. It checks that dy_sys is really the portion of orig_sys specified in dy_origvars and dy_origcons (and that this agrees with dy_actvars and dy_actcons). Parameters: orig_sys: the original constraint system Returns: TRUE if the systems seem to correspond, FALSE otherwise. */ { int ovndx,ocndx,avndx,acndx,opkndx,apkndx,cnt,noloadcnt,inactcnt ; double oaij,aaij,rhscorr,*obj,scaledtol ; pkvec_struct *opkcon,*apkcon,*apkvar ; flags vstatus ; bool retval ; char onmebuf[128],ovecnme[128] ; const char *rtnnme = "dy_chkdysys" ; /* The first thing we'll do is run through dy_origvars, count up the number of active, inactive, and unloadable entries, and check that this agrees with the size of dy_sys and dylp's running accounting. At the same time, cross-check with dy_actvars. While we're walking the columns, check for reasonable status and check that dy_sys and orig_sys agree on upper/lower bounds and objective function coefficients. We have to be a bit careful. For bounds, the initial check for equality handles the case where the bound is +/-inf. For the objective, clearly the phase I objective isn't going to match, so make sure we're looking at the phase II objective. As far as status of inactive variables, the only qualifier should be NOLOAD. Strip it out and check for valid nonbasic status. */ cnt = 0 ; noloadcnt = 0 ; inactcnt = 0 ; if (dy_lp->p1obj.installed == TRUE) obj = dy_lp->p1obj.p2obj ; else obj = dy_sys->obj ; for (ovndx = 1 ; ovndx <= orig_sys->varcnt ; ovndx++) { if (INACTIVE_VAR(ovndx)) { vstatus = (flags) -dy_origvars[ovndx] ; if (flgon(vstatus,vstatNOLOAD)) { noloadcnt++ ; clrflg(vstatus,vstatNOLOAD) ; } else { inactcnt++ ; } if (!(vstatus == vstatNBFR || vstatus == vstatNBFX || vstatus == vstatNBUB || vstatus == vstatNBLB)) { errmsg(433,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "inactive",consys_nme(orig_sys,'v',ovndx,TRUE,NULL),ovndx, dy_prtvstat(((flags) -dy_origvars[ovndx]))) ; return (FALSE) ; } } else { cnt++ ; avndx = dy_origvars[ovndx] ; if (ovndx != dy_actvars[avndx]) { errmsg(356,rtnnme,orig_sys->nme,"variable",ovndx,avndx,avndx, dy_actvars[avndx]) ; return (FALSE) ; } if (!(dy_sys->vub[avndx] == orig_sys->vub[ovndx] || withintol(dy_sys->vub[avndx],orig_sys->vub[ovndx],dy_tols->zero))) { (void) consys_nme(orig_sys,'v',ovndx,TRUE,onmebuf) ; strcpy(ovecnme,consys_assocnme(orig_sys,CONSYS_VUB)) ; errmsg(367,rtnnme,dy_sys->nme,consys_assocnme(dy_sys,CONSYS_VUB), consys_nme(dy_sys,'v',avndx,TRUE,NULL),avndx, dy_sys->vub[avndx],orig_sys->vub[ovndx],ovecnme,onmebuf,ovndx, dy_sys->vub[avndx]-orig_sys->vub[ovndx],dy_tols->zero) ; return (FALSE) ; } if (!(dy_sys->vlb[avndx] == orig_sys->vlb[ovndx] || withintol(dy_sys->vlb[avndx],orig_sys->vlb[ovndx],dy_tols->zero))) { (void) consys_nme(orig_sys,'v',ovndx,TRUE,onmebuf) ; strcpy(ovecnme,consys_assocnme(orig_sys,CONSYS_VLB)) ; errmsg(367,rtnnme,dy_sys->nme,consys_assocnme(dy_sys,CONSYS_VLB), consys_nme(dy_sys,'v',avndx,TRUE,NULL),avndx, dy_sys->vlb[avndx],orig_sys->vlb[ovndx],ovecnme,onmebuf,ovndx, dy_sys->vlb[avndx]-orig_sys->vlb[ovndx],dy_tols->zero) ; return (FALSE) ; } if (!withintol(obj[avndx],orig_sys->obj[ovndx],dy_tols->cost)) { (void) consys_nme(orig_sys,'v',ovndx,TRUE,onmebuf) ; strcpy(ovecnme,consys_assocnme(orig_sys,CONSYS_OBJ)) ; errmsg(367,rtnnme,dy_sys->nme,consys_assocnme(dy_sys,CONSYS_OBJ), consys_nme(dy_sys,'v',avndx,TRUE,NULL),avndx, obj[avndx],orig_sys->obj[ovndx],ovecnme,onmebuf,ovndx, obj[avndx]-orig_sys->obj[ovndx],dy_tols->cost) ; return (FALSE) ; } } } if (cnt != dy_sys->archvcnt) { errmsg(361,rtnnme,dy_sys->nme,"variable",dy_sys->archvcnt,cnt) ; return (FALSE) ; } if (noloadcnt != dy_lp->sys.vars.unloadable) { errmsg(446,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_lp->sys.vars.unloadable,"variables","unloadable",noloadcnt) ; return (FALSE) ; } if (inactcnt != dy_lp->sys.vars.loadable) { errmsg(446,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_lp->sys.vars.loadable,"variables","loadable",inactcnt) ; return (FALSE) ; } cnt = (orig_sys->varcnt-noloadcnt)-(cnt+inactcnt) ; if (cnt != 0) { errmsg(444,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "variable",orig_sys->varcnt,noloadcnt,inactcnt,dy_sys->archvcnt) ; return (FALSE) ; } /* Run a similar set of checks for constraints. */ cnt = 0 ; noloadcnt = 0 ; inactcnt = 0 ; for (ocndx = 1 ; ocndx <= orig_sys->concnt ; ocndx++) { if (INACTIVE_CON(ocndx)) { if (LOADABLE_CON(ocndx)) { inactcnt++ ; } else { noloadcnt++ ; } } else { cnt++ ; acndx = dy_origcons[ocndx] ; if (ocndx != dy_actcons[acndx]) { errmsg(356,rtnnme,orig_sys->nme,"constraint",ocndx,acndx,acndx, dy_actcons[acndx]) ; return (FALSE) ; } } } if (cnt != dy_sys->concnt) { errmsg(361,rtnnme,dy_sys->nme,"constraint",dy_sys->concnt,cnt) ; return (FALSE) ; } if (noloadcnt != dy_lp->sys.cons.unloadable) { errmsg(446,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_lp->sys.cons.unloadable,"constraints","unloadable",noloadcnt) ; return (FALSE) ; } if (inactcnt != dy_lp->sys.cons.loadable) { errmsg(446,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_lp->sys.cons.loadable,"constraints","loadable",inactcnt) ; return (FALSE) ; } cnt = (orig_sys->concnt-noloadcnt)-(cnt+inactcnt) ; if (cnt != 0) { errmsg(444,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "constraint",orig_sys->concnt,noloadcnt,inactcnt,dy_sys->concnt) ; return (FALSE) ; } /* Now check each active constraint to make sure that it contains exactly the coefficients it should. In the process, check the logical for each constraint and make sure that it has exactly one coefficient and the proper bounds. */ retval = TRUE ; apkcon = NULL ; apkvar = NULL ; opkcon = NULL ; for (acndx = 1 ; acndx <= dy_sys->concnt && retval == TRUE ; acndx++) { if (consys_getrow_pk(dy_sys,acndx,&apkcon) == FALSE) { errmsg(122,rtnnme,dy_sys->nme,"constraint", consys_nme(dy_sys,'c',acndx,TRUE,NULL),acndx) ; retval = FALSE ; break ; } ocndx = dy_actcons[acndx] ; if (consys_getrow_pk(orig_sys,ocndx,&opkcon) == FALSE) { errmsg(122,rtnnme,orig_sys->nme,"constraint", consys_nme(orig_sys,'c',ocndx,TRUE,NULL),ocndx) ; retval = FALSE ; break ; } rhscorr = 0 ; cnt = 0 ; for (opkndx = 0 ; opkndx < opkcon->cnt ; opkndx++) { ovndx = opkcon->coeffs[opkndx].ndx ; oaij = opkcon->coeffs[opkndx].val ; if (INACTIVE_VAR(ovndx)) { cnt++ ; vstatus = (flags) -dy_origvars[ovndx] ; switch (getflg(vstatus,vstatSTATUS)) { case vstatNBLB: { rhscorr += oaij*orig_sys->vlb[ovndx] ; break ; } case vstatNBUB: case vstatNBFX: { rhscorr += oaij*orig_sys->vub[ovndx] ; break ; } } } else { avndx = dy_origvars[ovndx] ; for (apkndx = 0 ; apkndx < apkcon->cnt ; apkndx++) { if (apkcon->coeffs[apkndx].ndx == avndx) { aaij = apkcon->coeffs[apkndx].val ; break ; } } if (apkndx >= apkcon->cnt) { errmsg(362,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',avndx,FALSE,NULL),avndx, consys_nme(dy_sys,'c',acndx,FALSE,NULL),acndx) ; retval = FALSE ; break ; } if (aaij != oaij) { errmsg(364,rtnnme,dy_sys->nme, consys_nme(dy_sys,'c',acndx,FALSE,NULL), consys_nme(dy_sys,'v',avndx,FALSE,NULL), acndx,avndx,aaij, consys_nme(orig_sys,'c',ocndx,FALSE,NULL), consys_nme(orig_sys,'v',ovndx,FALSE,NULL), ocndx,ovndx,oaij,orig_sys->nme) ; retval = FALSE ; break ; } } } if (retval == FALSE) break ; if (opkcon->cnt-cnt != apkcon->cnt-1) { errmsg(364,rtnnme,dy_sys->nme,consys_nme(dy_sys,'c',acndx,FALSE,NULL), acndx,opkcon->cnt-cnt,apkcon->cnt-1) ; retval = FALSE ; break ; } /* We have exactly the right architectural coefficients. What about the logical? First, the corresponding entry in actvars should be 0 (logicals don't exist in orig_sys). Find its coefficient (there should be exactly one in the column), then check that the logical has the right bounds. Recall that dylp isn't expecting to see anything except <= and = constraints, with range constraints handled as a <= constraint with an upper bounded slack. */ if (dy_actvars[acndx] != -INT_MAX) { errmsg(360,rtnnme,dy_sys->nme,acndx,dy_actvars[acndx]) ; retval = FALSE ; } if (consys_getcol_pk(dy_sys,acndx,&apkvar) == FALSE) { errmsg(122,rtnnme,dy_sys->nme,"variable", consys_nme(dy_sys,'v',acndx,TRUE,NULL),acndx) ; retval = FALSE ; break ; } if (apkvar->cnt != 1) { errmsg(402,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,consys_nme(dy_sys,'v',acndx,FALSE,NULL), acndx,apkvar->cnt) ; retval = FALSE ; break ; } for (apkndx = 0 ; apkndx < apkcon->cnt ; apkndx++) { if (apkcon->coeffs[apkndx].ndx == acndx) break ; } if (apkndx >= apkcon->cnt) { errmsg(365,rtnnme,dy_sys->nme,consys_nme(dy_sys,'v',acndx,FALSE,NULL), acndx,consys_nme(dy_sys,'c',acndx,FALSE,NULL),acndx) ; retval = FALSE ; break ; } if (dy_sys->vlb[acndx] != 0) { errmsg(426,rtnnme,dy_sys->nme,consys_nme(dy_sys,'v',acndx,FALSE,NULL), acndx,consys_prtcontyp(dy_sys->ctyp[acndx]), consys_nme(dy_sys,'c',acndx,FALSE,NULL),acndx,"lower", dy_sys->vlb[acndx]) ; retval = FALSE ; } switch (dy_sys->ctyp[acndx]) { case contypLE: { break ; } case contypEQ: { if (dy_sys->vub[acndx] != 0) { errmsg(426,rtnnme,dy_sys->nme,consys_nme(dy_sys,'v',acndx,FALSE,NULL), acndx,consys_prtcontyp(dy_sys->ctyp[acndx]), consys_nme(dy_sys,'c',acndx,FALSE,NULL),acndx,"upper", dy_sys->vub[acndx]) ; retval = FALSE ; } break ; } case contypRNG: { if (!withintol(dy_sys->vub[acndx], dy_sys->rhs[acndx]-dy_sys->rhslow[acndx],dy_tols->zero)) { errmsg(426,rtnnme,dy_sys->nme,consys_nme(dy_sys,'v',acndx,FALSE,NULL), acndx,consys_prtcontyp(dy_sys->ctyp[acndx]), consys_nme(dy_sys,'c',acndx,FALSE,NULL),acndx,"upper", dy_sys->vub[acndx]) ; retval = FALSE ; } break ; } default: { errmsg(463,rtnnme,dy_sys->nme,consys_prtcontyp(dy_sys->ctyp[acndx])) ; retval = FALSE ; break ; } } scaledtol = dy_tols->zero*(1+maxx(fabs(dy_sys->rhs[acndx]),fabs(rhscorr))) ; if (!withintol(dy_sys->rhs[acndx],orig_sys->rhs[ocndx]-rhscorr,scaledtol)) { if (withintol(dy_sys->rhs[acndx], orig_sys->rhs[ocndx]-rhscorr,10*scaledtol)) { dywarn(366,rtnnme,dy_sys->nme,acndx,dy_sys->rhs[acndx], consys_nme(dy_sys,'c',acndx,FALSE,NULL), orig_sys->rhs[ocndx]-rhscorr, fabs(dy_sys->rhs[acndx]-(orig_sys->rhs[ocndx]-rhscorr)), scaledtol,ocndx, consys_nme(orig_sys,'c',ocndx,FALSE,NULL),orig_sys->rhs[ocndx], -rhscorr) ; } else { errmsg(366,rtnnme,dy_sys->nme,acndx,dy_sys->rhs[acndx], consys_nme(dy_sys,'c',acndx,FALSE,NULL), orig_sys->rhs[ocndx]-rhscorr, fabs(dy_sys->rhs[acndx]-(orig_sys->rhs[ocndx]-rhscorr)), scaledtol,ocndx, consys_nme(orig_sys,'c',ocndx,FALSE,NULL),orig_sys->rhs[ocndx], -rhscorr) ; retval = FALSE ; break ; } } } /* Clean up and return. */ if (apkcon != NULL) pkvec_free(apkcon) ; if (apkvar != NULL) pkvec_free(apkvar) ; if (opkcon != NULL) pkvec_free(opkcon) ; return (retval) ; } #endif /* DYLP_PARANOIA */ bool dy_dupbasis (int dst_basissze, basis_struct **p_dst_basis, basis_struct *src_basis, int dst_statussze, flags **p_dst_status, int src_statuslen, flags *src_status) /* This routine duplicates the basis and status passed in src_*, leaving a copy in the basis and status pointed to by dst_*. Note that we're working with the external form of the basis and status --- this routine is intended as a convenience for the client code. If either of p_dst_basis or p_dst_status is null, no copy is made of the basis or status, respectively. It's an error if both are null. We never shrink an existing vector. If a basis is supplied and it is already longer than the requested size, the length is not changed. If max(requested size, existing size) < source size, the requested size is boosted to be sufficient. Parameters: dst_basissze: the desired allocated size for the new basis structure p_dst_basis: (i) an empty basis structure (space will be allocated as required) (o) duplicate of src_basis src_basis: basis structure to be duplicated dst_statussze: the desired allocated size for the new status vector p_dst_status: (i) an empty status vector (space will be allocated as required) src_statuslen: number of entries in src_status src_status: status vector to be copied Returns: TRUE if the copy is successful, FALSE otherwise (FALSE is possible only if we're paranoid). */ { basis_struct *dst_basis ; bool want_basis,want_status ; # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 const char *rtnnme = "dy_dupbasis" ; if (p_dst_basis == NULL && p_dst_status == NULL) { errmsg(2,rtnnme,"&dst_basis and &dst_status") ; return (FALSE) ; } if (p_dst_basis != NULL && src_basis == NULL ) { errmsg(403,rtnnme,"basis") ; return (FALSE) ; } if (p_dst_status != NULL && src_status == NULL) { errmsg(403,rtnnme,"status") ; return (FALSE) ; } # endif if (p_dst_basis != NULL) { want_basis = TRUE ; } else { want_basis = FALSE ; } if (p_dst_status != NULL) { want_status = TRUE ; } else { want_status = FALSE ; } /* If the user's supplied a basis_struct, check it for size against src_basis and the requested allocated size, and force a reallocation of the basis vector if necessary. Then make the copy. */ if (want_basis == TRUE) { if (*p_dst_basis != NULL) { dst_basis = *p_dst_basis ; if (dst_basissze < dst_basis->len) dst_basissze = dst_basis->len ; if ((dst_basis->len < src_basis->len || dst_basis->len < dst_basissze) && dst_basis->el != NULL) { FREE(dst_basis->el) ; dst_basis->el = NULL ; } } else { dst_basis = (basis_struct *) CALLOC(1,sizeof(basis_struct)) ; *p_dst_basis = dst_basis ; } if (dst_basissze < src_basis->len) { # ifdef DYLP_PARANOIA dywarn(404,rtnnme,"basis",dst_basissze,src_basis->len) ; # endif dst_basissze = src_basis->len ; } if (dst_basis->el == NULL) { dst_basis->el = (basisel_struct *) MALLOC((dst_basissze+1)*sizeof(basisel_struct)) ; } memcpy(dst_basis->el,src_basis->el, (src_basis->len+1)*sizeof(basisel_struct)) ; dst_basis->len = src_basis->len ; } /* And similarly for status. If the client has supplied a status vector, we assume it's big enough. */ if (want_status == TRUE) { if (*p_dst_status == NULL) { if (dst_statussze < src_statuslen) { # ifdef DYLP_PARANOIA dywarn(404,rtnnme,"status",dst_statussze,src_statuslen) ; # endif dst_statussze = src_statuslen ; } *p_dst_status = (flags *) MALLOC((dst_statussze+1)*sizeof(flags)) ; } memcpy(*p_dst_status,src_status,(src_statuslen+1)*sizeof(flags)) ; } return (TRUE) ; } static void build_soln (lpprob_struct *orig_lp) /* This routine is responsible for constructing a solution that can be returned to the client. The solution consists of the status of all architectural variables, a basis vector comprised of (constraint, variable) index pairs, the values of the basic variables, and the values of the dual variables. Note that this routine will execute even for error returns, just in case the client wants to do a postmortem. For the status, the normal dylp flag codes are used for nonbasic variables, and the negative of the basis position is used for basic variables. Since we don't keep explicit values for nonbasic variables, they must be at bound. If dylp's pivoting works as advertised, there will be no nonbasic free or superbasic variables in an optimal solution, so this won't be a problem. (There is the possibility they will occur in an infeasible or unbounded problem. C'est la vie.) Basic logical variables, which don't exist outside of dylp, are reported in the basis vector as the negative of the index of their associated constraint. Parameters: orig_lp: The LP problem passed by the client. Returns: undefined */ { int ovndx,xjndx,xjpos,ubndndx,orig_ubndndx ; flags xjstatus ; consys_struct *orig_sys ; const char *rtnnme = "build_soln" ; /* dy_unscaling.c */ extern void dy_orig_soln(double *x, double *y) ; /* Grab the necessary space, if the user hasn't provided it or the space provided is too small. The basis, x, and y arrays have to be big enough to hold information for each constraint in the active system, but the status and active variable arrays have to be big enough to hold information for each variable in the original system. Note that we allocate to colsze or rowsze, even if the indicated size is larger than necessary. We have to do this to maintain consistency in allocated size between preallocated vectors and vectors we allocate here. Note that the basis_struct has a length field, but this is the actual length of the basis, not the allocated length. The allocated length is assumed to match rowsze. */ orig_sys = orig_lp->consys ; if (orig_lp->colsze < orig_sys->varcnt) { if (orig_lp->status != NULL) { FREE(orig_lp->status) ; orig_lp->status = NULL ; } if (orig_lp->actvars != NULL) { FREE(orig_lp->actvars) ; orig_lp->actvars = NULL ; } orig_lp->colsze = orig_sys->varcnt ; } if (orig_lp->status == NULL) orig_lp->status = (flags *) CALLOC((orig_lp->colsze+1),sizeof(flags)) ; if (flgon(orig_lp->ctlopts,lpctlACTVARSOUT)) { if (orig_lp->actvars == NULL) orig_lp->actvars = (bool *) CALLOC((orig_lp->colsze+1),sizeof(bool)) ; } if (orig_lp->rowsze < dy_sys->concnt) { if (orig_lp->x != NULL) { FREE(orig_lp->x) ; orig_lp->x = NULL ; } if (orig_lp->y != NULL) { FREE(orig_lp->y) ; orig_lp->y = NULL ; } if (orig_lp->basis != NULL) { if (orig_lp->basis->el != NULL) { FREE(orig_lp->basis->el) ; orig_lp->basis->el = NULL ; } } orig_lp->rowsze = dy_sys->concnt ; } if (orig_lp->basis == NULL) orig_lp->basis = (basis_struct *) CALLOC(sizeof(basis_struct),1) ; if (orig_lp->basis->el == NULL) orig_lp->basis->el = (basisel_struct *) CALLOC((orig_lp->rowsze+1),sizeof(basisel_struct)) ; if (orig_lp->x == NULL) orig_lp->x = (double *) CALLOC((orig_lp->rowsze+1),sizeof(double)) ; if (orig_lp->y == NULL) orig_lp->y = (double *) CALLOC((orig_lp->rowsze+1),sizeof(double)) ; /* Fill in the simple stuff --- objective, return code, and iterations. For an optimal solution, we'll recalculate the objective on the spot, as it's just been incrementally updated through primal II or dual II. If we stopped due to hitting an iteration limit, we also want a valid solution, but it's a bit more complicated (we may need to flush the P1 objective and recalculate duals and reduced costs). A small iteration limit is a common tactic for clients to limit computational effort; they still expect a valid objective. When the solution is unbounded, the objective is overloaded to hold the index of the variable that was discovered to be unbounded. Since we're using sign to indicate the direction of unboundedness, represent the logical for constraint i as n+i, in the original system frame of reference. */ switch (dy_lp->lpret) { case lpOPTIMAL: { orig_lp->obj = dy_calcobj() ; break ; } case lpITERLIM: { if (dy_lp->p1obj.installed == TRUE) { if (dy_swapobjs(dyPRIMAL2) == FALSE) { errmsg(318,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"remove") ; dy_lp->lpret = lpFATAL ; } else { dy_calcduals() ; if (dy_calccbar() == FALSE) { errmsg(384,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; dy_lp->lpret = lpFATAL ; } } } if (dy_lp->lpret == lpFATAL) { orig_lp->obj = dy_tols->inf ; } break ; } case lpUNBOUNDED: { ubndndx = abs(dy_lp->ubnd.ndx) ; if (ubndndx > dy_sys->concnt) { orig_ubndndx = dy_actvars[ubndndx] ; } else { orig_ubndndx = orig_sys->varcnt+dy_actcons[ubndndx] ; } if (dy_lp->ubnd.ndx < 0) { orig_lp->obj = -((double) orig_ubndndx) ; } else { orig_lp->obj = ((double) orig_ubndndx) ; } break ; } case lpINFEAS: { orig_lp->obj = dy_lp->infeas ; break ; } default: { orig_lp->obj = dy_tols->inf ; break ; } } orig_lp->lpret = dy_lp->lpret ; orig_lp->iters = dy_lp->tot.pivs ; /* Now fill in the answer. First we walk dy_origvars. For each nonbasic architectural variable (active and inactive), we fill in the status entry. NBFR variables (active or inactive) are uncommon but correct: by convention, the value is zero, and dylp will not force them into the basis unless the reduced cost is nonzero. SB variables are a different story. We should never see an inactive SB variable. Dylp will force SB variables to bound or into the basis, and they will only be seen here if dylp could not solve the problem to optimality. For each active basic architectural variable, we place the negative of the basis position in the status entry and fill in the basis information, then fill in the x and y values. Remember that there are no logicals in orig_sys. If the user is asking for an active variables vector, fill that in too. */ for (ovndx = 1 ; ovndx <= orig_sys->varcnt ; ovndx++) { if (INACTIVE_VAR(ovndx)) { xjstatus = (flags)(-dy_origvars[ovndx]) ; orig_lp->status[ovndx] = getflg(xjstatus,vstatSTATUS) ; if (flgon(orig_lp->ctlopts,lpctlACTVARSOUT)) orig_lp->actvars[ovndx] = FALSE ; } else { if (flgon(orig_lp->ctlopts,lpctlACTVARSOUT)) orig_lp->actvars[ovndx] = TRUE ; xjndx = dy_origvars[ovndx] ; xjstatus = dy_status[xjndx] ; if (flgon(xjstatus,vstatNONBASIC|vstatEXOTIC)) { if (flgon(xjstatus,vstatSB)) { if (dy_lp->lpret == lpOPTIMAL) errmsg(359,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xjndx,FALSE,NULL),xjndx, dy_prtvstat(xjstatus)) ; # ifndef DYLP_NDEBUG else dywarn(359,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xjndx,FALSE,NULL),xjndx, dy_prtvstat(xjstatus)) ; # endif } orig_lp->status[ovndx] = xjstatus ; } else { xjpos = dy_var2basis[xjndx] ; orig_lp->status[ovndx] = -xjpos ; orig_lp->basis->el[xjpos].cndx = dy_actcons[xjpos] ; orig_lp->basis->el[xjpos].vndx = ovndx ; orig_lp->x[xjpos] = dy_x[xjndx] ; orig_lp->y[xjpos] = dy_y[xjpos] ; } } } /* Now, we walk the basis, to pick up any entries occupied by basic logicals. */ for (xjpos = 1 ; xjpos <= dy_sys->concnt ; xjpos++) { if (dy_basis[xjpos] <= dy_sys->concnt) { orig_lp->basis->el[xjpos].cndx = dy_actcons[xjpos] ; orig_lp->basis->el[xjpos].vndx = -dy_actcons[dy_basis[xjpos]] ; orig_lp->x[xjpos] = dy_xbasic[xjpos] ; orig_lp->y[xjpos] = dy_y[xjpos] ; } } /* Unscale the solution. */ dy_orig_soln(orig_lp->x,orig_lp->y) ; /* Set the basis length and we're out of here. */ orig_lp->basis->len = dy_sys->concnt ; return ; } /* Handy macro for use by dy_finishup. */ #define FREE_AND_CLEAR(zz_var_zz) \ if (zz_var_zz != NULL) { FREE(zz_var_zz) ; zz_var_zz = NULL ; } void dy_finishup (lpprob_struct *orig_lp, dyphase_enum phase) /* This routine assembles the final answer from the active and inactive portions of the constraint system, and cleans up the working structures of dylp. Parameters: orig_lp: The LP problem passed by the client. phase: dylp's phase Returns: undefined */ { consys_struct *orig_sys ; bool freeStructs = TRUE ; # if MALLOC_DEBUG == 2 char *rtnnme = "dy_finishup" ; # endif /* Why are we here? There are a couple of calls that are possible very early in initialisation (indicated by a phase of dyINV): * It may be that the user called dylp strictly to free the data structures; this is indicated by orig_opts->context == cxUNLOAD. * The constraint system may have been flagged as corrupt, or some paranoid check failed. * It may be that dylp needs to free up previous data structures in preparation for a warm or cold start. In the above situations, the call to initlclsystem exposes any retained local system for deletion. Later in the run, we don't need this. Otherwise, if orig_lp->phase is dyDONE, we're cleanly done and we'll try to build an answer as best we can. `Cleanly done' covers error and non-error returns, but we only retain data structures if the client requests it and the result is such that their might be some use in it (e.g., hot start after modification, requests for tableau vectors, etc.). This is a bit subjective; currently limited to the four possibilities listed below. Anything else is a serious error, and we won't even attempt to build a solution, just free the data structures. */ if (phase == dyINV) { dy_initlclsystem(orig_lp,TRUE) ; } else if (orig_lp->phase == dyDONE && orig_lp->lpret != lpFATAL) { build_soln(orig_lp) ; if (flgon(orig_lp->ctlopts,lpctlNOFREE) && (orig_lp->lpret == lpOPTIMAL || orig_lp->lpret == lpUNBOUNDED || orig_lp->lpret == lpINFEAS || orig_lp->lpret == lpITERLIM)) { freeStructs = FALSE ; } } /* Free up the working structures --- the constraint system and the various local vectors, the LP control structure, and the option and tolerance structures. We also need to detach origvars and origcons from orig_sys, so that we don't keep accumulating attachment structures. The code is defensive, setting all pointers back to NULL so that there's no ambiguity. */ if (freeStructs == TRUE) { orig_sys = orig_lp->consys ; if (dy_origvars != NULL) { if (orig_sys != NULL) (void) consys_detach(orig_sys,(void **) &dy_origvars,TRUE) ; FREE(dy_origvars) ; dy_origvars = NULL ; } if (dy_origcons != NULL) { if (orig_sys != NULL) (void) consys_detach(orig_sys,(void **) &dy_origcons,TRUE) ; FREE(dy_origcons) ; dy_origcons = NULL ; } dy_freelclsystem(orig_lp,TRUE) ; if (dy_lp != NULL) (void) dy_swapobjs(dyDONE) ; if (dy_sys != NULL) { consys_free(dy_sys) ; dy_sys = NULL ; } FREE_AND_CLEAR(dy_actvars) FREE_AND_CLEAR(dy_actcons) FREE_AND_CLEAR(dy_basis) FREE_AND_CLEAR(dy_var2basis) FREE_AND_CLEAR(dy_status) FREE_AND_CLEAR(dy_x) FREE_AND_CLEAR(dy_xbasic) FREE_AND_CLEAR(dy_y) FREE_AND_CLEAR(dy_frame) FREE_AND_CLEAR(dy_gamma) FREE_AND_CLEAR(dy_cbar) FREE_AND_CLEAR(dy_rho) FREE_AND_CLEAR(dy_brkout) FREE_AND_CLEAR(dy_degenset) FREE_AND_CLEAR(dy_ddegenset) dy_freepivrej() ; FREE_AND_CLEAR(dy_lp) FREE_AND_CLEAR(dy_tols) FREE_AND_CLEAR(dy_opts) clrflg(orig_lp->ctlopts,lpctlDYVALID) ; orig_lp->fullsys = FALSE ; dy_owner = NULL ; } else { setflg(orig_lp->ctlopts,lpctlDYVALID) ; if (dy_lp->sys.cons.loadable == 0 && dy_lp->sys.vars.loadable == 0) orig_lp->fullsys = TRUE ; else orig_lp->fullsys = FALSE ; dy_freelclsystem(orig_lp,FALSE) ; dy_owner = orig_lp->owner ; } return ; } #undef FREE_AND_CLEAR void dy_freesoln (lpprob_struct *lpprob) /* Simple utility to free the solution structures hanging off an lp problem structure. Does not free the constraint system, or the lpprob_struct. Parameters: lpprob: the lp problem Returns: undefined */ { # if MALLOC_DEBUG == 2 char *rtnnme = "dy_freesoln" ; # endif if (lpprob->basis != NULL) { if (lpprob->basis->el != NULL) FREE(lpprob->basis->el) ; FREE(lpprob->basis) ; lpprob->basis = NULL ; } if (lpprob->status != NULL) { FREE(lpprob->status) ; lpprob->status = NULL ; } if (lpprob->x != NULL) { FREE(lpprob->x) ; lpprob->x = NULL ; } if (lpprob->y != NULL) { FREE(lpprob->y) ; lpprob->y = NULL ; } if (lpprob->actvars != NULL) { FREE(lpprob->actvars) ; clrflg(lpprob->ctlopts,lpctlACTVARSIN|lpctlACTVARSOUT) ; lpprob->actvars = NULL ; } lpprob->colsze = 0 ; lpprob->rowsze = 0 ; return ; } DyLP-1.10.4/DyLP/src/Dylp/dy_force.c0000644000175200017520000012175512253224475015341 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_force.c 4.6 10/15/05" ; static char svnid[] UNUSED = "$Id: dy_force.c 524 2013-12-15 03:59:57Z tkr $" ; /* This file contains a pair of routines that attempt to force a transition from primal to dual simplex or from dual to primal simplex, and a final routine which loads the full constraint system. These routines are used as part of dylp's error recovery strategy. When one simplex encounters pivoting difficulties which cannot be easily resolved within that simplex, a possible solution is to force a transition to the other simplex. If this can't be achieved in a way that guarantees some progress toward the optimal solution, the last ditch fall-back position is to load the entire constraint system. A specific example will help. Suppose that primal phase II is running, and it detects that all desireable entering variables have been rejected because the pivot results in a singular basis. In this case, it will return a punt. One way to resolve the problem would be to find some other entering variable. This is easy: it's the standard activate variable step. We can resume pivoting without changing simplex algorithms. But suppose we can't find any variables to activate? A second way to resolve the problem would be to change the basis matrix by adding constraints. There's no sense adding loose constraints, however, and adding violated constraints will cost us primal feasibility. But there's a way out of this bind: force dual feasibility. Then we can add as many violated constraints as we like and resume pivoting in dual simplex. Note that we really do need to find violated constraints. If we're primal feasible, and force dual feasibility, we're optimal and done! But because we're working with a partial system, it can happen that there are no violated constraints. We need to add both constraints and variables in order to make progress. (Trust me. It's happened.) One can think of lots of clever things to try, but the computational cost to determine an intelligent action is generally high. Not so clever, but guaranteed to work if anything will, is to load the full constraint system. (All the above works in primal phase I, with the observation that infeasible means we're `optimal' under the phase I objective but haven't attained feasibility.) How do we force dual feasibility? By removing nonbasic variables with favourable (hence dual infeasible) reduced costs. For architecturals, this is trivial. For logicals, it's a nightmare. Deleting a nonbasic logical implies deleting a (tight) constraint which has an associated nonzero (basic) dual. In general, this changes the values of all dual variables, so our current notion of dual feasibility/infeasibility goes out the window. Further, there's a dangling basic variable to be dealt with. If it's feasible, we can set it to superbasic status. But if it's infeasible, we can only set it to the nearest bound, and that'll change our primal feasibility status. Forcing primal feasibility has the same feel. Deactivating a violated explicit constraint is trivial. Deactivating a violated bound constraint is impossible, because bounds on variables are enforced as part of the primal simplex algorithm, and deactivated variables are assumed to be at bound. Experience during code development says that if the dual <-> primal transition cannot be accomplished by trivial deactivations, it's not worth the attempt. If you want to allow dylp to try, set the heroics option to TRUE. In the absence of heroics, dylp loads the full constraint system. Failure of a transition attempt can occur in two places: * During the first half of the transition, in forcePrimal2Dual (forceDual2Primal), because heroics are forbidden or because they were tried and didn't work. * During the second half of the transition, in gen/add constraints (gen/add variables), when it is determined that there are no violated constraints (variables with favourable reduced costs) to add to the active system. I.e., we're optimal in this subproblem and need to add both constraints and variables to make progress. */ /* Structure to hold candidates for deactivation or flipping when attempting to force dual feasibility. Field Description ----- ----------- ndx variable index flippable TRUE if the variable can be flipped to the opposite bound delta delta for a bound to bound flip */ typedef struct { int ndx ; bool flippable ; double delta ; } fdcand_struct ; static int fdcandcompare (const void *p_fdcand1, const void *p_fdcand2) /* Comparison function to sort an array of fdcand_struct into nonincreasing order of indices. Returns: < 0 if i > j 0 if i = j > 0 if i < j */ { int i,j ; const fdcand_struct *fdcand1,*fdcand2 ; fdcand1 = (const fdcand_struct *) p_fdcand1 ; fdcand2 = (const fdcand_struct *) p_fdcand2 ; i = fdcand1->ndx ; j = fdcand2->ndx ; return ((j)-(i)) ; } static int intcompare (const void *p_i, const void *p_j) /* Reverse integer comparison so we can sort arrays of indices in nonincreasing order. Returns: < 0 if i > j 0 if i = j > 0 if i < j */ { int i = *((const int *) p_i) ; int j = *((const int *) p_j) ; return ((j)-(i)) ; } static int scanPrimVarDualInfeas (fdcand_struct **p_fdcands) /* This routine scans the active constraint system for variables that are dual infeasible and thus must be deactivated or flipped in order to force dual feasibility. Put another way, it looks for nonbasic variables with favourable reduced costs: status NBLB and cbar < 0 and status NBUB and cbar > 0. Parameters: p_fdcands: (i) empty vector to hold candidates; assumed to be sufficiently large; will be allocated if NULL (o) information on variables to be flipped or deactivated; fdcands[0].flippable is set TRUE/FALSE to indicate if any variables can be flipped; may be NULL if no candidates are found. Returns: number of variables to be deactivated/flipped, -1 if there's an error during scanning (error is possible only when paranoid) */ { int j,n,purgecnt,flipcnt ; fdcand_struct *fdcands ; double cbarj,lbj,ubj ; double *vlb,*vub ; flags statj ; bool purge ; # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 const char *rtnnme = "scanPrimVarDualInfeas" ; if (p_fdcands == NULL) { errmsg(2,rtnnme,"fdcands") ; return (-1) ; } # endif /* Scan preparation. If the user hasn't supplied a vector to hold the indices, allocate one now. */ n = dy_sys->varcnt ; vlb = dy_sys->vlb ; vub = dy_sys->vub ; purgecnt = 0 ; if (*p_fdcands == NULL) { fdcands = (fdcand_struct *) MALLOC((dy_sys->archvcnt+1)*sizeof(fdcand_struct)) ; } else { fdcands = *p_fdcands ; } /* Scan the variables to collect the list of variables to be deactivated or flipped: NBLB status with cbarj < 0 or NBUB status with cbarj > 0. */ flipcnt = 0 ; for (j = 1 ; j <= n ; j++) { purge = FALSE ; statj = dy_status[j] ; cbarj = dy_cbar[j] ; if ((flgon(statj,vstatNBLB) && cbarj < -dy_tols->dfeas) || (flgon(statj,vstatNBUB) && cbarj > dy_tols->dfeas)) { fdcands[++purgecnt].ndx = j ; fdcands[purgecnt].flippable = FALSE ; lbj = vlb[j] ; ubj = vub[j] ; if (flgon(statj,vstatNBLB)) { if (ubj < dy_tols->inf) { fdcands[purgecnt].flippable = TRUE ; flipcnt++ ; fdcands[purgecnt].delta = ubj-lbj ; } } else { if (lbj > -dy_tols->inf) { fdcands[purgecnt].flippable = TRUE ; flipcnt++ ; fdcands[purgecnt].delta = lbj-ubj ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n queuing %s (%d) for %s, %s, cbar<%d> = %g", consys_nme(dy_sys,'v',j,TRUE,NULL),j, (fdcands[purgecnt].flippable == TRUE)?"flip":"deactivation", dy_prtvstat(statj),j,cbarj) ; } # endif } } /* Prepare for return. If we found candidates, set fdcands[0] and return the vector. If we found none, and we allocated the candidate vector, then free it. */ if (purgecnt == 0) { if (*p_fdcands == NULL) { FREE(fdcands) ; } } else { if (flipcnt > 0) fdcands[0].flippable = TRUE ; else fdcands[0].flippable = FALSE ; if (*p_fdcands == NULL) *p_fdcands = fdcands ; } # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n queued %d variables, %d deactivate, %d flip.", purgecnt,purgecnt-flipcnt,flipcnt) ; } # endif return (purgecnt) ; } dyphase_enum dy_forcePrimal2Dual (consys_struct *orig_sys) /* This routine attempts to force dual feasibility. The approach is to deactivate or repair violated dual constraints (i.e., nonbasic primal variables with favourable reduced costs). By `repair', we mean flipping the variable to its opposite bound, thus restoring dual feasibility. Variables can be flipped only if both bounds are finite. Deactivating or flipping nonbasic architectural variables with favourable reduced costs is trivial. Flipping nonbasic primal logicals associated with range constraints (hence lower and upper bounded) is no different than flipping nonbasic architecturals. Deactivating nonbasic primal logicals, which are associated with tight constraints, which are associated with basic dual architecturals, is a can of worms. In general, the associated dual will be nonzero. The primal constraint and logical must be deactivated together, which amounts to forcing the dual to zero, which has the potential to change the feasibility of every dual constraint. Plus, there's a dangling basic variable to be dealt with. If we're in primal II, we can make it superbasic (guaranteeing we won't achieve dual feasibility, but also not losing primal feasibility). If we're in primal I, well, who cares, just force the variable to the nearest bound. The best we can do is deactivate the constraint and, at the end, refactor, recalculate primals and duals, check for primal and dual feasibility, and go with the flow. So, what to do? Experience says that forcing deactivation of nonbasic logicals is at best a crap shoot, and often wasted effort. It's controllable. If the heroics.p2d option is set to TRUE, tight constraints will be deactivated. Experience also says that flipping nonbasic variables tends to result in cycling. Flipping is also controllable (heroics.flip); if disallowed, a flippable variable will be deactivated instead. What's the result? If we're converting from primal to dual and deactivated only nonbasic architecturals, then we'll have dual feasibility, hence primal optimality, at the end of the routine. In this case, we can reset the lp result to dyOPTIMAL and head for dyGENCON, the normal route to dual simplex. If we suppressed deactivation of tight constraints, then we won't have dual feasibility. Moreover, we haven't dealt with all the problem pivot candidates, so there's no sense simply returning to primal simplex --- we need to do something to change the situation. No sense wasting time on half measures. We're in trouble, so force the full system. If we deactivated tight constraints, we've certainly changed the basis, and anything is possible. We'll need to refactor and do feasibility checks, and go with the flow. This routine is also used to attempt to restore dual feasibility while running dual simplex. In this case, if we're successful we'll head back to dual simplex, detouring via dyADDVARS in an attempt to add some dual constraints to balance the ones we've just deactivated. If we've failed to restore dual feasibility, we can't return to dual simplex. We already have primal infeasibility, so we head for dyPRIMAL1, again detouring via ADDVARS, this time with the objective of adding some variables to help us gain feasibility. The result of processing is communicated in dy_lp->simplex.next, which will be set to dyDUAL or dyPRIMAL[1|2] as appropriate, and in the returned phase code. Parameters: orig_sys: The original constraint system Returns: appropriate next phase (see end of routine), or dyINV if an error occurs. */ { int j,m ; int cand_cnt,ndx,varcnt,concnt,suppressed ; fdcand_struct *candidates ; double *vlb,*vub ; dyret_enum factorresult ; flags calcflgs,statj ; bool retval ; dyret_enum upd_retval ; dyphase_enum next_phase ; const char *rtnnme = "dy_forcePrimal2Dual" ; next_phase = dyINV ; # ifdef DYLP_PARANOIA retval = FALSE ; if (dy_lp->simplex.active == dyDUAL && dy_lp->lpret == lpLOSTFEAS) retval = TRUE ; if ((dy_lp->simplex.active == dyPRIMAL1 || dy_lp->simplex.active == dyPRIMAL2) && (dy_lp->lpret == lpPUNT || dy_lp->lpret == lpSTALLED)) retval = TRUE ; if (retval == FALSE) { errmsg(441,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_prtlpphase(dy_lp->simplex.active,TRUE), dy_prtlpret(dy_lp->lpret)) ; return (dyINV) ; } # endif /* If the primal phase I objective is installed, boot it out and reinstall the phase II objective. */ if (dy_lp->p1obj.installed == TRUE) { if (dy_swapobjs(dyPRIMAL2) == FALSE) { errmsg(318,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "remove") ; return (dyINV) ; } dy_calcduals() ; if (dy_calccbar() == FALSE) { errmsg(384,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; return (dyINV) ; } } /* Call scanPrimVarDualInfeas to return a list of candidates for deactivation. */ candidates = NULL ; cand_cnt = scanPrimVarDualInfeas(&candidates) ; if (cand_cnt < 0) { errmsg(434,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "variable","forced primal -> dual transition") ; if (candidates != NULL) FREE(candidates) ; return (dyINV) ; } # ifdef DYLP_PARANOIA /* We should always find candidates, otherwise why are we here? */ if (cand_cnt == 0) { errmsg(1,rtnnme,__LINE__) ; if (candidates != NULL) FREE(candidates) ; return (dyINV) ; } # endif /* We have candidates. Sort the list and then open a loop to do the deactivations. In the case of logicals, that entails deactivating the constraint. */ qsort(&candidates[1],cand_cnt,sizeof(fdcand_struct),fdcandcompare) ; m = dy_sys->concnt ; vlb = dy_sys->vlb ; vub = dy_sys->vub ; varcnt = 0 ; concnt = 0 ; suppressed = 0 ; retval = TRUE ; for (ndx = 1 ; ndx <= cand_cnt && retval == TRUE ; ndx++) { j = candidates[ndx].ndx ; # ifdef DYLP_PARANOIA if (j < 1 || j > dy_sys->varcnt) { errmsg(102,rtnnme,dy_sys->nme,"variable",j,1,dy_sys->varcnt) ; retval = FALSE ; break ; } # endif /* The easiest case: we can just flip the variable. dy_updateprimals can return dyrOK, dyrREQCHK, dyrSWING, or dyrFATAL. Only dyrFATAL is of concern, as we'll be refactoring, etc., on our way back from forcing dual feasibility. */ if (candidates[ndx].flippable == TRUE && dy_opts->heroics.flips == TRUE) { varcnt++ ; # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n flipping variable %s (%d)", consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; } # endif upd_retval = dy_updateprimals(j,candidates[ndx].delta,NULL) ; if (upd_retval == dyrFATAL) { retval = FALSE ; break ; } statj = dy_status[j] ; if (flgon(statj,vstatNBLB)) { dy_x[j] = vub[j] ; } else { dy_x[j] = vlb[j] ; } comflg(dy_status[j],vstatNBLB|vstatNBUB) ; } /* The easy case: we have a nonbasic architectural. Just call dy_deactNBPrimArch to deal with it. */ else if (j > m) { varcnt++ ; # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n deactivating variable %s (%d)", consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; } # endif retval = dy_deactNBPrimArch(orig_sys,j) ; if (retval == FALSE) { errmsg(430,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "deactivate","variable", consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; } } /* The hard case: we have a nonbasic logical. Not that it looks any more difficult from here. If we're primal feasible, this call will create superbasic variables when it forces the dangling basic variable into the nonbasic partition. */ else if (dy_opts->heroics.p2d == TRUE) { concnt++ ; # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n deactivating constraint %s (%d)", consys_nme(dy_sys,'c',j,TRUE,NULL),j) ; } # endif retval = dy_deactNBLogPrimCon(orig_sys,j) ; if (retval == FALSE) { errmsg(430,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "deactivate","constraint", consys_nme(dy_sys,'c',j,TRUE,NULL),j) ; } } else { suppressed++ ; } } FREE(candidates) ; if (retval == FALSE) return (dyINV) ; # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 1) { if (dy_opts->print.force >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n ") ; } dyio_outfmt(dy_logchn,dy_gtxecho," %d+%d deletions.",concnt,varcnt) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n constraint system %s now %d x %d (%d + %d).", dy_sys->nme,dy_sys->concnt,dy_sys->varcnt,dy_sys->archvcnt, dy_sys->logvcnt) ; } # endif # ifdef DYLP_PARANOIA if (dy_chkdysys(orig_sys) == FALSE) return (dyINV) ; # endif /* Time to clean up a bit. Keeping in mind that we got here because we were in trouble (lpPUNT or lpLOSTFEAS), it isn't going to hurt to refactor and do accuracy and feasibility checks whether we need it or not. */ # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n factoring, checking accuracy and feasibility ...") ; } # endif calcflgs = ladFACTOR|ladPRIMALCHK|ladDUALCHK| ladPRIMFEAS|ladPFQUIET|ladDUALFEAS|ladDFQUIET ; factorresult = dy_accchk(&calcflgs) ; switch (factorresult) { case dyrOK: case dyrPATCHED: { # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) { if (factorresult == dyrOK) dyio_outfmt(dy_logchn,dy_gtxecho,"\n done.") ; else dyio_outfmt(dy_logchn,dy_gtxecho,"\n patched.") ; dyio_outfmt(dy_logchn,dy_gtxecho," Feasibility:") ; if (flgoff(calcflgs,ladPRIMFEAS)) { dyio_outfmt(dy_logchn,dy_gtxecho," primal") ; } if (flgoff(calcflgs,ladDUALFEAS)) { dyio_outfmt(dy_logchn,dy_gtxecho," dual") ; } if (flgall(calcflgs,ladPRIMFEAS|ladDUALFEAS)) { dyio_outfmt(dy_logchn,dy_gtxecho," none") ; } } # endif break ; } default: { next_phase = dyINV ; # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) dyio_outfmt(dy_logchn,dy_gtxecho,"\n failed.") ; # endif break ; } } # ifdef DYLP_PARANOIA /* The crucial question is whether we have dual feasibility. See the long explanation at the head of the routine for the detailed reasons behind the phase transitions and associated actions. Here on the front line, the truth of the matter is that we've refactored and numerical wierdness could put us anywhere. If we're feeling paranoid, check that feasibility is what we expect. */ if (suppressed == 0) { if (concnt == 0 && flgon(calcflgs,ladDUALFEAS)) { dywarn(439,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "absence","dual") ; } } else { if (flgoff(calcflgs,ladDUALFEAS)) { dywarn(439,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "presence","dual") ; } } if (dy_lp->simplex.active == dyDUAL && flgoff(calcflgs,ladPRIMFEAS)) { dywarn(439,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "presence","primal") ; } # endif /* We're here in an attempt to restore dual feasibility. If we've changed the basis, we need to reinitialise the DSE norms. I can't conceive of why we'd suddenly acquire primal feasibility, but it won't hurt to code for it. Leave the lp return code as lpLOSTFEAS. The expectation is that dyADDVAR will determine if the correct primal objective is installed and take action if needed. */ if (dy_lp->simplex.active == dyDUAL) { if (flgoff(calcflgs,ladDUALFEAS)) { dy_lp->simplex.next = dyDUAL ; if (concnt != 0) dy_lp->simplex.init_dse = TRUE ; next_phase = dyADDVAR ; } else { dy_lp->simplex.init_pse = TRUE ; if (flgoff(calcflgs,ladPRIMFEAS)) { dy_lp->simplex.next = dyPRIMAL2 ; } else { dy_lp->simplex.next = dyPRIMAL1 ; } next_phase = dyADDVAR ; } } /* We're attempting a primal -> dual transition. Dual feasibility says we were successful in forcing dual feasibility, the first step of the transition. Otherwise, we're in deep trouble; might as well force the full system. */ else { dy_lp->lpret = lpFORCEDUAL ; if (flgoff(calcflgs,ladDUALFEAS)) { dy_lp->simplex.next = dyDUAL ; dy_lp->simplex.init_dse = TRUE ; next_phase = dyGENCON ; } else { next_phase = dyFORCEFULL ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n next phase %s, next simplex %s.", dy_prtlpphase(next_phase,FALSE), dy_prtlpphase(dy_lp->simplex.next,FALSE)) ; } # endif return (next_phase) ; } static int scanPrimConForceDeact (int **p_acndxs) /* This routine scans the active constraint system for constraints (including implicit bound constraints) that are violated and thus must be deactivated in order to force primal feasibility. Put another way, it looks for basic variables that are outside of bounds. Parameters: p_acndxs: (i) empty vector to hold constraint indices; assumed to be sufficiently large; will be allocated if NULL (o) indices of constraint to be deactivated; may not be allocated if no candidates are identified Returns: number of constraint to be deactivated, -1 if there's an error during scanning (error is possible only when paranoid) */ { int bpos,j,m,purgecnt ; int *acndxs ; flags statj ; # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 const char *rtnnme = "scanPrimConForceDeact" ; if (p_acndxs == NULL) { errmsg(2,rtnnme,"&acndxs") ; return (-1) ; } # endif m = dy_sys->concnt ; if (*p_acndxs == NULL) { acndxs = (int *) MALLOC(m*sizeof(int)) ; } else { acndxs = *p_acndxs ; } /* Open a loop to search for candidates for deactivation. It's pretty straightforward, as all we need to do is examine the status of the basic variable. */ purgecnt = 0 ; for (bpos = 1 ; bpos <= m ; bpos++) { j = dy_basis[bpos] ; statj = dy_status[j] ; if (flgon(statj,vstatBLLB|vstatBUUB)) { acndxs[purgecnt++] = j ; # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 3) { if (j <= m) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n queued %s %s (%d) for deactivation, ", consys_prtcontyp(dy_sys->ctyp[j]), consys_nme(dy_sys,'c',j,TRUE,NULL),j) ; dyio_outfmt(dy_logchn,dy_gtxecho, "%s (%d) = %g, status %s, basis pos'n %d.", consys_nme(dy_sys,'v',j,TRUE,NULL),j, dy_x[j],dy_prtvstat(statj),bpos) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, "\n queued %s (%d) = %g for deactivation, ", consys_nme(dy_sys,'v',j,TRUE,NULL),j,dy_x[j]) ; dyio_outfmt(dy_logchn,dy_gtxecho,"status %s, basis pos'n %d.", dy_prtvstat(statj),bpos) ; } } # endif } } if (*p_acndxs == NULL) { if (purgecnt <= 0) { FREE(acndxs) ; } else { *p_acndxs = acndxs ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n queued %d constraints for deactivation.",purgecnt) ; } # endif return (purgecnt) ; } dyphase_enum dy_forceDual2Primal (consys_struct *orig_sys) /* This routine attempts to force primal feasibility. The approach is to deactivate violated primal constraints with basic logicals (i.e., nonbasic dual architectural variables with favourable reduced costs). There's one major fly in the ointment: basic primal architecturals which violate one of their (implicit) bound constraints. If this bound were an explicit constraint, we'd have a basic logical and life would be simple. But it isn't, and we don't, and life is complicated. We don't want to shoot the messenger (the explicit constraint in this basis pos'n). The real problem is that the implicit bound constraint is wired into the simplex algorithm and it's not possible to deactivate it. Pushing the variable into the nonbasic partition, or going further and deactivating it, simply enforces the bound constraint. Still, there's little else we can do if we want to deactivate them. So, what to do? Experience says that forcing deactivation of basic architecturals is wasted effort, but it's controllable. If the heroics.d2p option is set to TRUE, basic architecturals are forced out. What's the result? If the only violated constraints are explicit constraints, we'll have primal feasibility at the end of the routine. If there are violated implicit bound constraints, and heroics is FALSE, we won't have primal feasibility, and there's no point in returning to dual simplex because we haven't dealt with all the problem pivot candidates. If there are violated implicit bound constraints and heroics is TRUE, anything is possible and we just have to check. The result of processing is communicated in dy_lp->simplex.next, which will be set to dyDUAL or dyPRIMAL[1|2] as appropriate, and the returned phase code. Parameters: orig_sys: The original constraint system Returns: appropriate next phase, or dyINV if an error occurs */ { int j,m ; int *candidates,cand_cnt,ndx,varcnt,concnt,suppressed ; dyret_enum factorresult ; flags calcflgs ; bool retval ; dyphase_enum next_phase ; const char *rtnnme = "dy_forceDual2Primal" ; # ifdef DYLP_PARANOIA retval = FALSE ; if (dy_lp->simplex.active == dyDUAL && (dy_lp->lpret == lpPUNT || dy_lp->lpret == lpSTALLED)) retval = TRUE ; if (retval == FALSE) { errmsg(441,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_prtlpphase(dy_lp->simplex.active,TRUE), dy_prtlpret(dy_lp->lpret)) ; } # endif next_phase = dyINV ; /* Have we made any progress since the last time we were here? If not, we're quite possibly looping through constraint deactivation/activation. Just head for primal phase I. */ if (dy_lp->z-dy_lp->lastz.fp < dy_tols->purge*(1.0+fabs(dy_lp->z))) { dy_lp->simplex.next = dyPRIMAL1 ; dy_lp->simplex.init_pse = TRUE ; return (dyPRIMAL1) ; } dy_lp->lastz.fp = dy_lp->z ; /* Call scanPrimConForceDeact to return a list of candidates for deactivation. */ candidates = NULL ; cand_cnt = scanPrimConForceDeact(&candidates) ; if (cand_cnt < 0) { errmsg(434,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "constraint","forced dual -> primal transition") ; if (candidates != NULL) FREE(candidates) ; return (dyINV) ; } # ifdef DYLP_PARANOIA /* We should always find candidates, otherwise why are we here? */ if (cand_cnt == 0) { errmsg(1,rtnnme,__LINE__) ; if (candidates != NULL) FREE(candidates) ; return (dyINV) ; } # endif /* We have candidates. Sort the list and then open a loop to do the deactivations. In the case of explicit constraints with basic logicals, it's easy: we just deactivate the constraint. If the violated constraint is an implicit bound, we proceed as discussed in the comments at the head of the routine. */ qsort(&candidates[0],cand_cnt,sizeof(int),intcompare) ; m = dy_sys->concnt ; varcnt = 0 ; concnt = 0 ; suppressed = 0 ; retval = TRUE ; for (ndx = 0 ; ndx < cand_cnt && retval == TRUE ; ndx++) { j = candidates[ndx] ; # ifdef DYLP_PARANOIA if (j < 1 || j > dy_sys->varcnt) { errmsg(102,rtnnme,dy_sys->nme,"variable",j,1,dy_sys->varcnt) ; retval = FALSE ; break ; } # endif /* The easy case: we have a basic logical. dy_deactBLogPrimCon will deal with this neatly. */ if (j <= m) { concnt++ ; # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n deactivating constraint %s (%d)", consys_nme(dy_sys,'c',j,TRUE,NULL),j) ; } # endif retval = dy_deactBLogPrimCon(orig_sys,j) ; if (retval == FALSE) { errmsg(430,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "deactivate","constraint", consys_nme(dy_sys,'c',j,TRUE,NULL),j) ; } } /* The hard case: we have a basic architectural. The ugliness is hidden in dy_deactBPrimArch. */ else if (dy_opts->heroics.d2p == TRUE) { varcnt++ ; # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n deactivating variable %s (%d)", consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; } # endif retval = dy_deactBPrimArch(orig_sys,j) ; if (retval == FALSE) { errmsg(430,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "deactivate","variable", consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; } } else { suppressed++ ; } } FREE(candidates) ; if (retval == FALSE) return (dyINV) ; # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 1) { if (dy_opts->print.conmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n ") ; } dyio_outfmt(dy_logchn,dy_gtxecho," %d+%d deletions.",concnt,varcnt) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n constraint system %s now %d x %d (%d + %d).", dy_sys->nme,dy_sys->concnt,dy_sys->varcnt,dy_sys->archvcnt, dy_sys->logvcnt) ; } # endif # ifdef DYLP_PARANOIA if (dy_chkdysys(orig_sys) == FALSE) return (dyINV) ; # endif /* Time to clean up a bit. Whatever we've done, it's changed the basis, so we might as well refactor now. While we're there, might as well do accuracy and feasibility checks. */ # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n factoring, checking accuracy and feasibility.") ; } # endif calcflgs = ladFACTOR|ladPRIMALCHK|ladDUALCHK| ladPRIMFEAS|ladPFQUIET|ladDUALFEAS|ladDFQUIET ; factorresult = dy_accchk(&calcflgs) ; switch (factorresult) { case dyrOK: case dyrPATCHED: { # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) { if (factorresult == dyrOK) dyio_outfmt(dy_logchn,dy_gtxecho,"\n done.") ; else dyio_outfmt(dy_logchn,dy_gtxecho,"\n patched.") ; dyio_outfmt(dy_logchn,dy_gtxecho," Feasibility:") ; if (flgoff(calcflgs,ladPRIMFEAS)) { dyio_outfmt(dy_logchn,dy_gtxecho," primal") ; } if (flgoff(calcflgs,ladDUALFEAS)) { dyio_outfmt(dy_logchn,dy_gtxecho," dual") ; } if (flgall(calcflgs,ladPRIMFEAS|ladDUALFEAS)) { dyio_outfmt(dy_logchn,dy_gtxecho," none") ; } } # endif break ; } default: { # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) dyio_outfmt(dy_logchn,dy_gtxecho,"\n failed.") ; # endif return (dyINV) ; } } /* We've successfully refactored & calculated primal and dual feasibility. The crucial question is whether we have primal feasibility. If we're primal feasible, we've completed the first half of the dual -> primal transition. We can set simplex.next = dyPRIMAL2 and head for dyADDVAR to look for variables with favourable reduced cost. If we failed to gain primal feasibility, well, specify primal phase I instead and see how it goes. If we're paranoid, we check that the feasibility is what we expect. */ # ifdef DYLP_PARANOIA if (suppressed == 0) { if (varcnt == 0 && flgon(calcflgs,ladPRIMFEAS)) { dywarn(439,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "absence","primal") ; } } else { if (flgoff(calcflgs,ladPRIMFEAS)) { dywarn(439,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "presence","primal") ; } } # endif dy_lp->lpret = lpFORCEPRIMAL ; if (flgoff(calcflgs,ladPRIMFEAS)) { dy_lp->simplex.next = dyPRIMAL2 ; next_phase = dyADDVAR ; } else { dy_lp->simplex.next = dyPRIMAL1 ; next_phase = dyADDVAR ; } dy_lp->simplex.init_pse = TRUE ; # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n next phase %s, next simplex %s.", dy_prtlpphase(next_phase,FALSE), dy_prtlpphase(dy_lp->simplex.next,FALSE)) ; } # endif return (next_phase) ; } static int scanPrimVarForceAct (consys_struct *orig_sys, int **p_ovndxs) /* This routine scans the original constraint system looking for inactive variables to add to the active system. Parameters: orig_sys: The original constraint system p_ovndxs: (i) empty vector to hold constraint indices; assumed sufficiently large if non-NULL; if NULL, allocated if necessary (o) indices of constraints to be activated; may not be allocated if no constraints are identified Returns: number of candidates for activation, -1 if error. */ { int j,n,actcnt ; int *ovndxs ; # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 const char *rtnnme = "scanPrimVarForceAct" ; if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (-1) ; } if (p_ovndxs == NULL) { errmsg(2,rtnnme,"&ovndxs") ; return (-1) ; } # endif n = orig_sys->varcnt ; /* Did the client supply a vector for candidate indices? If not, make one. */ actcnt = n-dy_sys->archvcnt ; if (*p_ovndxs == NULL) { ovndxs = (int *) MALLOC(actcnt*sizeof(int)) ; } else { ovndxs = *p_ovndxs ; } /* Now step through the variables, remembering the inactive ones. As always, we never activate fixed variables. */ actcnt = 0 ; for (j = 1 ; j <= n ; j++) { if (!LOADABLE_VAR(j)) continue ; ovndxs[actcnt++] = j ; # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n queued %s variable %s (%d),", consys_prtvartyp(orig_sys->vtyp[j]), consys_nme(orig_sys,'v',j,FALSE,NULL),j) ; } # endif } /* If we supplied ovndxs and found no candidates to activate, free it. */ if (*p_ovndxs == NULL) { if (actcnt == 0) { FREE(ovndxs) ; } else { *p_ovndxs = ovndxs ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n queued %d variables for activation.",actcnt) ; } # endif return (actcnt) ; } static int scanPrimConForceAct (consys_struct *orig_sys, int **p_ocndxs) /* This routine scans the original constraint system looking for inactive constraints to add to the active system. Parameters: orig_sys: The original constraint system p_ocndxs: (i) empty vector to hold constraint indices; assumed sufficiently large if non-NULL; if NULL, allocated if necessary (o) indices of constraints to be activated; may not be allocated if no constraints are identified Returns: number of candidates for activation, -1 if error. */ { int i,m,actcnt ; int *ocndxs ; # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 const char *rtnnme = "scanPrimConForceAct" ; if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (-1) ; } if (p_ocndxs == NULL) { errmsg(2,rtnnme,"&ocndxs") ; return (-1) ; } # endif m = orig_sys->concnt ; /* Did the client supply a vector for candidate indices? If not, make one. */ actcnt = m-dy_sys->concnt ; if (*p_ocndxs == NULL) { ocndxs = (int *) MALLOC(actcnt*sizeof(int)) ; } else { ocndxs = *p_ocndxs ; } /* Now step through the constraints, remembering the loadable ones. */ actcnt = 0 ; for (i = 1 ; i <= m ; i++) { if (!LOADABLE_CON(i)) continue ; ocndxs[actcnt++] = i ; # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n queued %s constraint %s (%d),", consys_prtcontyp(orig_sys->ctyp[i]), consys_nme(orig_sys,'c',i,FALSE,NULL),i) ; } # endif } /* If we supplied ocndxs and found no candidates to activate, free it. */ if (*p_ocndxs == NULL) { if (actcnt == 0) { FREE(ocndxs) ; } else { *p_ocndxs = ocndxs ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n queued %d constraints for activation.",actcnt) ; } # endif return (actcnt) ; } dyphase_enum dy_forceFull (consys_struct *orig_sys) /* This routine activates all inactive variables and constraints. It's the last resort for error recovery by constraint sytem modification. It's also used as a utility to force the full constraint system following a hot start. In this case, dy_hotstart will make it look like lpFORCEPRIMAL. Parameters: orig_sys: The original constraint system Returns: appropriate next phase (see end of routine), or dyINV if an error occurs. */ { int *candidates,varcnt,concnt ; dyret_enum factorresult ; flags calcflgs ; bool retval ; dyphase_enum next_phase ; const char *rtnnme = "dy_forceFull" ; next_phase = dyINV ; # ifdef DYLP_PARANOIA if (!(dy_lp->lpret == lpFORCEDUAL || dy_lp->lpret == lpFORCEPRIMAL || dy_lp->lpret == lpPUNT || dy_lp->lpret == lpACCCHK)) { errmsg(4,rtnnme,"simplex return code",dy_prtlpret(dy_lp->lpret)) ; return (dyINV) ; } # endif /* Call scanPrimConForceAct to return a list of candidates for activation, then call dy_actBLogPrimConList to activate them. */ candidates = NULL ; concnt = scanPrimConForceAct(orig_sys,&candidates) ; if (concnt < 0) { errmsg(434,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "constraint","forced full activation") ; retval = FALSE ; } else if (concnt > 0) { retval = dy_actBLogPrimConList(orig_sys,concnt,candidates,NULL) ; } else { retval = TRUE ; } if (candidates != NULL) FREE(candidates) ; if (retval == FALSE) { return (dyINV) ; } /* And repeat for inactive variables. */ candidates = NULL ; varcnt = scanPrimVarForceAct(orig_sys,&candidates) ; if (varcnt < 0) { errmsg(434,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "variable","forced full activation") ; } else if (varcnt > 0) { retval = dy_actNBPrimArchList(orig_sys,varcnt,candidates) ; } else { retval = TRUE ; } if (candidates != NULL) FREE(candidates) ; if (concnt < 0 || retval == FALSE) { return (dyINV) ; } # ifdef DYLP_PARANOIA /* We should have activated at least one constraint or variable. Check the constraint system while we're here. */ if (concnt+varcnt == 0) { errmsg(1,rtnnme,__LINE__) ; return (dyINV) ; } if (dy_chkdysys(orig_sys) == FALSE) return (dyINV) ; # endif # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n %d+%d activations.",concnt,varcnt) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n constraint system %s now %d x %d (%d + %d).", dy_sys->nme,dy_sys->concnt,dy_sys->varcnt,dy_sys->archvcnt, dy_sys->logvcnt) ; } # endif /* Time to clean up a bit. Refactor and do accuracy and feasibility checks whether we need it or not. */ # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n factoring, checking accuracy and feasibility ...") ; } # endif calcflgs = ladFACTOR|ladPRIMALCHK|ladDUALCHK| ladPRIMFEAS|ladPFQUIET|ladDUALFEAS|ladDFQUIET ; factorresult = dy_accchk(&calcflgs) ; switch (factorresult) { case dyrOK: case dyrPATCHED: { # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) { if (factorresult == dyrOK) dyio_outfmt(dy_logchn,dy_gtxecho,"\n done.") ; else dyio_outfmt(dy_logchn,dy_gtxecho,"\n patched.") ; dyio_outfmt(dy_logchn,dy_gtxecho," Feasibility:") ; if (flgoff(calcflgs,ladPRIMFEAS)) { dyio_outfmt(dy_logchn,dy_gtxecho," primal") ; } if (flgoff(calcflgs,ladDUALFEAS)) { dyio_outfmt(dy_logchn,dy_gtxecho," dual") ; } if (flgall(calcflgs,ladPRIMFEAS|ladDUALFEAS)) { dyio_outfmt(dy_logchn,dy_gtxecho," none") ; } } # endif break ; } default: { next_phase = dyINV ; # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 2) dyio_outfmt(dy_logchn,dy_gtxecho,"\n failed.") ; # endif break ; } } /* Where we go next should depend on our feasibility status. Basically, we want to head for the appropriate simplex phase. */ dy_lp->lpret = lpFORCEFULL ; if (flgoff(calcflgs,ladPRIMFEAS)) { dy_lp->simplex.next = dyPRIMAL2 ; dy_lp->simplex.init_pse = TRUE ; next_phase = dyPRIMAL2 ; } else if (flgoff(calcflgs,ladDUALFEAS) && dy_opts->usedual == TRUE) { dy_lp->simplex.next = dyDUAL ; dy_lp->simplex.init_dse = TRUE ; next_phase = dyDUAL ; } else { dy_lp->simplex.next = dyPRIMAL1 ; dy_lp->simplex.init_pse = TRUE ; next_phase = dyPRIMAL1 ; } # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n next phase %s, next simplex %s.", dy_prtlpphase(next_phase,FALSE), dy_prtlpphase(dy_lp->simplex.next,FALSE)) ; } # endif return (next_phase) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_solutions.c0000644000175200017520000011306712253224475016277 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2008 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains routines which return primal and dual solutions, unscaled, in the original system frame of reference. PRIMAL VARIABLES For primal variables, there are three routines: * dy_rowPrimals: the primal basic variables x = inv(B)b, in basis (row) order * dy_colPrimals: the primal architectural variables, in column order * dy_logPrimals: the primal logical variables, in row order Because we're working with the primal system it's easy to do a clean separation between logical and architectural variables. It's also useful to have the basic variables x in row order; this will in general be a mix of primal architectural and logical variables. dy_rowPrimals also returns a vector of variable indices matching x. As a handy adjunct, there are two routines to return the status of primal variables: * dy_colStatus: the status of the primal architectural variables, in column order * dy_logStatus: the status of the primal logical variables, in row order DUAL VARIABLES Dual variables are complicated because we're not really running dual simplex, we're faking it on the primal constraint system. There are three routines: * dy_rowDuals: the dual variables y = cinv(B) associated with the architectural constraints, in basis (row) order * dy_rowDualsGivenC: as dy_rowDuals, for an arbitrary cost vector c. Alternately, btran an arbitrary vector. * dy_colDuals: the dual variables cbar = c - yN associated with implicit bound constraints, in column order Because we're running dual simplex on the primal constraint system, we don't have the same clean separation into architectural and logical duals, nor can we easily separate out the dual basic variables. The values returned by rowDuals are a mix of architectural and logical duals. The values returned by colDuals are commonly called the reduced costs of the nonbasic primal architectural variables and are a mixture of architectural and logical duals. There's one more thing to be considered with respect to dual variables: we have to choose a sign convention. Because we're faking dual simplex on the primal data structures, we have a consistency problem. With the usual max primal <=> min dual pair, the row duals y = cinv(B) are the correct sign, and the reduced costs (when interpreted as dual variables) are negated. Because dylp works with a min primal <=> min dual pair, the row duals are negated and the reduced costs are correct. One set of values must be negated for consistency, but which one? Just to complicate the issue a bit further, the canonical primal <=> dual pair assumes that the primal is Ax <= b. Dylp automagically converts >= constraints to <= constraints by hiding the -1 in the row scaling factor. The client likely expects that the duals returned to him/her will work with the original mix of >= and <= constraints. Dylp sidesteps this issue by adding a boolean to dy_rowDuals and dy_colDuals (and also to dy_rays.c:dy_dualRays). A value of false gives you duals with a sign convention appropriate for a min primal problem. A value of true gives you the true duals, i.e., the duals that would result from the standard max primal <=> min dual pairing. In either case, the sign of the dual is flipped for a >= constraint in the original system. MISCELLANEOUS These routines predate the comprehensive set of solution routines described above. Dy_orig_soln is a utility which is (at present) a fairly specialised routine used by dylp_utils:buildsoln. There's also a routine, dy_expandxopt, which takes the primal solution generated by dy_orig_soln (which contains basic variables only) and expands it to a full solution (all architectural variables). */ #define DYLP_INTERNAL #include "dylp.h" static char svnid[] UNUSED = "$Id: dy_solutions.c 524 2013-12-15 03:59:57Z tkr $" ; #ifdef DYLP_PARANOIA extern bool dy_std_paranoia (const lpprob_struct *orig_lp, const char *rtnnme, int line) ; #endif void dy_colDuals (lpprob_struct *orig_lp, double **p_cbar, bool trueDuals) /* Returns the unscaled vector of duals associated with architectural columns (aka reduced costs), in the original system frame of reference. These are the duals associated with implicit bound constraints. See dy_rowDuals for the duals associated with explicit (architectural) constraints. (These latter are the usual notion of dual variables, and also correspond to the reduced costs of logical variables.) In dylp's min primal <=> min dual pairing, the reduced costs have the correct sign for the true dual variables used by the min dual problem, except that the values associated with NBUB variables need to be negated. If you'd prefer that the duals have a sign convention appropriate for a min primal, specify trueDuals = false. The algorithm is to walk the columns of orig_sys, copying over the reduced cost from dy_cbar when the variable is active, otherwise calculting cbar on the spot. For active variables, we have sc_cbar = sc_c - sc_csc_inv(B)sc_a = cS - cSinv(S)inv(B)inv(R)RaS = cS - cinv(B)aS = cbarS To unscale sc_cbar, we simply multiply by 1/S, keeping in mind that if x is a logical for row i, the appropriate factor is R. For inactive variables, we calculate dot(y,a) using the scaled version of the original system, which leaves us with the same sc_abar. Why not use the client's original system and the vector of unscaled duals returned by dy_rowDuals? That would certainly be an option. One argument against it is the additional work involved to get the unscaled duals. The other argument is that maximising the independence of the two calculations means that the test routine (which confirms cbar = c - dot(y,a) in the external frame) is marginally more convincing. Parameters: orig_lp: the original lp problem p_cbar: (i) pointer to vector; if NULL, a vector of the appropriate size will be allocated (o) vector of reduced costs trueDuals: true to return values with a sign convention appropriate for the min dual problem, false to use a sign convention that matches the min primal. Returns: undefined */ { int i,j,m,n,i_orig,j_orig,m_orig,n_orig ; flags statj ; consys_struct *orig_sys ; double *orig_y ; consys_struct *scaled_orig_sys ; bool scaled ; const double *rscale,*cscale ; double cbarj ; double *cbar ; # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 char *rtnnme = "dy_colDuals" ; # endif # ifdef DYLP_PARANOIA if (dy_std_paranoia(orig_lp,rtnnme,__LINE__) == FALSE) { return ; } if (p_cbar == NULL) { errmsg(2,rtnnme,"cbar") ; return ; } # endif /* Is unscaling required? Acquire the scaling vectors and set up scaled_orig_sys accordingly. We'll also need the constraint type vector so that we don't overcompensate for >= constraints when returning true duals. */ scaled = dy_isscaled() ; if (scaled == TRUE) { dy_scaling_vectors(&rscale,&cscale) ; scaled_orig_sys = dy_scaled_origsys() ; } else { scaled_orig_sys = NULL ; } orig_sys = orig_lp->consys ; n_orig = orig_sys->varcnt ; m_orig = orig_sys->concnt ; n = dy_sys->varcnt ; m = dy_sys->concnt ; /* Do we need a vector? */ if (*p_cbar != NULL) { cbar = *p_cbar ; memset(cbar,0,(n_orig+1)*sizeof(double)) ; } else { cbar = (double *) CALLOC((n_orig+1),sizeof(double)) ; } /* Make a vector of duals that matches orig_sys, for efficient pricing of inactive columns. */ orig_y = (double *) CALLOC((m_orig+1),sizeof(double)) ; for (i = 1 ; i <= m ; i++) { i_orig = dy_actcons[i] ; orig_y[i_orig] = dy_y[i] ; } /* Get on with the calculation. For an active variable, we can pull the value from dy_cbar. For an inactive variable, we need to calculate dot(y,a). Then we unscale and drop the result into the proper place in the result vector. Since we're starting from orig_sys, we'll never reference a column for a logical variable. */ for (j_orig = 1 ; j_orig <= n_orig ; j_orig++) { if (ACTIVE_VAR(j_orig)) { j = dy_origvars[j_orig] ; statj = getflg(dy_status[j],vstatSTATUS) ; if (flgon(statj,vstatBASIC)) { cbarj = 0.0 ; } else { if (scaled == TRUE) { cbarj = dy_cbar[j]/cscale[j_orig] ; } else { cbarj = dy_cbar[j] ; } } } else { statj = (flags) -dy_origvars[j_orig] ; if (scaled == TRUE) { cbarj = scaled_orig_sys->obj[j_orig] ; cbarj -= consys_dotcol(scaled_orig_sys,j_orig,orig_y) ; cbarj /= cscale[j_orig] ; } else { cbarj = orig_sys->obj[j_orig] ; cbarj -= consys_dotcol(orig_sys,j_orig,orig_y) ; } } setcleanzero(cbarj,dy_tols->cost) ; /* What's our sign convention? If these values are to work with the imaginary true dual problem, we need to flip the sign on variables that are NBUB. If we're just going for the min primal convention, they're already correct. */ if (trueDuals == TRUE) { if (flgon(statj,vstatNBUB)) cbar[j_orig] = -cbarj ; else cbar[j_orig] = cbarj ; } else cbar[j_orig] = cbarj ; } /* Clean up a bit and we're done. */ if (orig_y != NULL) FREE(orig_y) ; *p_cbar = cbar ; return ; } void dy_rowDuals (lpprob_struct *orig_lp, double **p_y, bool trueDuals) /* This routine returns the unscaled vector of row duals, commonly referred to as the dual variables, cinv(B). The values are unscaled and returned in a vector matching the original system frame of reference. Duals associated with inactive rows are always zero. In dylp's min primal <=> min dual pairing, the duals have the wrong sign for the true dual variables used by the canonical max primal <=> min dual problem. If you'd prefer that the duals have a sign convention appropriate for the max primal problem, specify trueDuals = true. The relevant bit of unscaling is: sc_y = sc_csc_inv(B) = cSinv(S)inv(B)inv(R) = cinv(B)inv(R) So, to recover y we need to postmultiply by R. The appropriate row factor for y is the one associated with the original row. Parameters: orig_lp: the original lp problem p_y: (i) vector to hold the dual variables; if NULL, a vector of appropriate size will be allocated (o) values of the dual variables, unscaled, in the original system frame of reference trueDuals false for duals that correspond to the min primal; true for duals that correspond to a max primal. Returns: undefined */ { int i,m,i_orig,m_orig ; double yi ; double *y ; consys_struct *orig_sys ; bool scaled ; const double *rscale,*cscale ; # ifndef DYLP_NDEBUG int j,v ; # endif # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 char *rtnnme = "dy_rowDuals" ; # endif # ifdef DYLP_PARANOIA if (dy_std_paranoia(orig_lp,rtnnme,__LINE__) == FALSE) { return ; } if (p_y == NULL) { errmsg(2,rtnnme,"y") ; return ; } # endif /* Is unscaling required? Acquire the scaling vectors. We won't use cscale, but dy_scaling_vectors expects a non-null parameter. */ scaled = dy_isscaled() ; if (scaled == TRUE) { dy_scaling_vectors(&rscale,&cscale) ; } orig_sys = orig_lp->consys ; m_orig = orig_sys->concnt ; m = dy_sys->concnt ; /* Do we need a vector? Note that initialisation isn't required here; all entries are set below. */ if (*p_y != NULL) { y = *p_y ; } else { y = (double *) MALLOC((m_orig+1)*sizeof(double)) ; } /* Step through the constraints of the original system. For active constraints, acquire and unscale the dual value. */ y[0] = 0.0 ; for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if (ACTIVE_CON(i_orig)) { i = dy_origcons[i_orig] ; yi = dy_y[i] ; if (scaled == TRUE) { yi *= rscale[i_orig] ; } setcleanzero(yi,dy_tols->cost) ; } else { yi = 0.0 ; } /* The true duals are the negative of the minimisation duals here. */ if (trueDuals == TRUE) y[i_orig] = -yi ; else y[i_orig] = yi ; } # ifndef DYLP_NDEBUG if (dy_opts->print.soln >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\ty =") ; v = 0 ; for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if (y[i_orig] != 0) { if ((++v)%3 == 0) { v = 0 ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t ") ; } i = dy_origcons[i_orig] ; j = dy_basis[i] ; dyio_outfmt(dy_logchn,dy_gtxecho," (%d %g %s %d)", i_orig,y[i_orig], consys_nme(dy_sys,'v',j,FALSE,NULL),j) ; } } } # endif /* That's it. Return the vector. */ *p_y = y ; return ; } void dy_rowDualsGivenC (lpprob_struct *orig_lp, double **p_y, const double *c, bool trueDuals) /* This routine returns the unscaled vector of row duals, commonly referred to as the dual variables, cinv(B), given an arbitrary c in the original system frame of reference. The values are unscaled and returned in a vector matching the original system frame of reference. Duals associated with inactive rows are always zero. In dylp's min primal <=> min dual pairing, the duals have the wrong sign for the true dual variables used by the canonical max primal <=> min dual problem. If you'd prefer that the duals have a sign convention appropriate for the max primal problem, specify trueDuals = true. The relevant bit of unscaling is: sc_y = sc_csc_inv(B) = cSinv(S)inv(B)inv(R) = cinv(B)inv(R) So, to recover y we need to postmultiply by R. The appropriate row factor for y is the one associated with the original row. And as we copy over coefficients from c, we need to scale them with the appropriate coefficient of S. It's worth a quick mention that really we might as well be doing a btran on an arbitrary vector. If that's what you have in mind, make sure trueDuals is false, otherwise the result will be negated. Parameters: orig_lp: the original lp problem p_y: (i) vector to hold the dual variables; if NULL, a vector of appropriate size will be allocated (o) values of the dual variables, unscaled, in the original system frame of reference c the vector of objective coefficients trueDuals false for duals that correspond to the min primal; true for duals that correspond to a max primal. Returns: undefined */ { int i,m,n,i_orig,j_orig,m_orig,n_orig ; double yi ; double *y,*sc_y ; consys_struct *orig_sys ; bool scaled ; const double *rscale,*cscale ; # ifndef DYLP_NDEBUG int j,v ; # endif # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 char *rtnnme = "dy_rowDualsGivenC" ; # endif # ifdef DYLP_PARANOIA if (dy_std_paranoia(orig_lp,rtnnme,__LINE__) == FALSE) { return ; } if (p_y == NULL) { errmsg(2,rtnnme,"y") ; return ; } # endif /* Is scaling in use? Acquire the scaling vectors. */ scaled = dy_isscaled() ; if (scaled == TRUE) { dy_scaling_vectors(&rscale,&cscale) ; } orig_sys = orig_lp->consys ; n_orig = orig_sys->varcnt ; m_orig = orig_sys->concnt ; n = dy_sys->varcnt ; m = dy_sys->concnt ; /* Do we need a vector for the answer? Initialisation isn't required, as we'll write all entries below. */ if (*p_y != NULL) { y = *p_y ; } else { y = (double *) MALLOC((m_orig+1)*sizeof(double)) ; } /* We definitely need a working vector. */ sc_y = (double *) MALLOC((m+1)*sizeof(double)) ; /* Walk the basis. For variable x basic in pos'n i, find its index j_orig in c and drop c*S into y. */ sc_y[0] = 0.0 ; for (i = 1 ; i <= m ; i++) { j = dy_basis[i] ; if (j > m) { j_orig = dy_actvars[j] ; sc_y[i] = c[j_orig]*cscale[j_orig] ; } else { sc_y[i] = 0.0 ; } } /* Do the btran to get sc_y. */ dy_btran(sc_y) ; /* Unscale by rscale[i_orig] and drop the result into y[i_orig]. Walk the original system frame of reference to make sure we set all y. */ y[0] = 0.0 ; for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if (ACTIVE_CON(i_orig)) { i = dy_origcons[i_orig] ; yi = sc_y[i] ; if (scaled == TRUE) yi *= rscale[i_orig] ; setcleanzero(yi,dy_tols->cost) ; } else { yi = 0.0 ; } /* The true duals are the negative of the min primal duals. */ if (trueDuals == TRUE) y[i_orig] = -yi ; else y[i_orig] = yi ; } # ifndef DYLP_NDEBUG if (dy_opts->print.soln >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\ty =") ; v = 0 ; for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if (y[i_orig] != 0) { if ((++v)%3 == 0) { v = 0 ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t ") ; } i = dy_origcons[i_orig] ; j = dy_basis[i] ; dyio_outfmt(dy_logchn,dy_gtxecho," (%d %g %s %d)", i_orig,y[i_orig], consys_nme(dy_sys,'v',j,FALSE,NULL),j) ; } } } # endif /* That's it. Return the vector. */ *p_y = y ; return ; } void dy_colPrimals (lpprob_struct *orig_lp, double **p_x) /* This routine returns the values of the primal architectural variables (basic and nonbasic), unscaled, in the frame of reference of the original system. Unscaling is straightforward. For basic variables, we have sc_x = sc_inv(B)sc_b = inv(S)inv(B)inv(R)Rb = inv(S)(inv(B)b) so all that's needed to recover x = inv(B)b is to multiply by S. Upper and lower bounds on variables have the same scaling (inv(S)). Parameters: orig_lp: the original lp problem p_x: (i) vector to hold the primal architectural variables; if NULL, a vector of appropriate size will be allocated (o) values of the primal architectural variables, unscaled, in the original system frame of reference Returns: undefined */ { int j,j_orig,n_orig ; double xj ; flags statj ; consys_struct *orig_sys ; double *x ; bool scaled ; const double *rscale,*cscale ; char *rtnnme = "dy_colPrimals" ; # ifndef DYLP_NDEBUG int v ; # endif # ifdef DYLP_PARANOIA if (dy_std_paranoia(orig_lp,rtnnme,__LINE__) == FALSE) { return ; } if (p_x == NULL) { errmsg(2,rtnnme,"x") ; return ; } # endif /* Is unscaling required? Acquire the scaling vectors. accordingly. */ scaled = dy_isscaled() ; if (scaled == TRUE) { dy_scaling_vectors(&rscale,&cscale) ; } orig_sys = orig_lp->consys ; n_orig = orig_sys->varcnt ; /* Do we need a vector? */ if (*p_x != NULL) { x = *p_x ; memset(x,0,(n_orig+1)*sizeof(double)) ; } else { x = (double *) CALLOC((n_orig+1),sizeof(double)) ; } /* Walk the columns of the original system. For each variable that's active (basic or nonbasic), we can obtain the value from dy_x and unscale. For each variable that's inactive, we have to do a bit of work to decode the status and look up the appropriate bound value. */ for (j_orig = 1 ; j_orig <= n_orig ; j_orig++) { if (ACTIVE_VAR(j_orig)) { j = dy_origvars[j_orig] ; if (scaled == TRUE) { xj = cscale[j_orig]*dy_x[j] ; } else { xj = dy_x[j] ; } } else { statj = (flags)(-dy_origvars[j_orig]) ; switch (statj) { case vstatNBFX: case vstatNBLB: { xj = orig_sys->vlb[j_orig] ; break ; } case vstatNBUB: { xj = orig_sys->vub[j_orig] ; break ; } case vstatNBFR: { xj = 0 ; break ; } default: { dywarn(359,rtnnme,orig_sys->nme, consys_nme(orig_sys,'v',j_orig,FALSE,NULL),j_orig, dy_prtvstat(statj)) ; xj = 0.0 ; break ; } } } setcleanzero(xj,dy_tols->zero) ; x[j_orig] = xj ; } # ifndef DYLP_NDEBUG if (dy_opts->print.soln >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tx =") ; v = 0 ; for (j_orig = 1 ; j_orig <= n_orig ; j_orig++) { if (x[j_orig] != 0) { if ((++v)%3 == 0) { v = 0 ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t ") ; } dyio_outfmt(dy_logchn,dy_gtxecho," (%d %g %s)", j_orig,x[j_orig], consys_nme(orig_sys,'v',j_orig,FALSE,NULL)) ; } } } # endif /* That's it. Return the vector. */ *p_x = x ; return ; } void dy_rowPrimals (lpprob_struct *orig_lp, double **p_xB, int **p_indB) /* This routine returns the values of the primal basic variables, unscaled, in row (basis) order in the frame of reference of the original system. Unscaling is straightforward: sc_x = sc_inv(B)sc_b = inv(S)inv(B)inv(R)Rb = inv(S)(inv(B)b) so all that's needed to recover x = inv(B)b is to multiply by S. For logicals, recall that S = 1/R. By construction, the basic variable for inactive constraints is the logical for the constraint. Generating beta = [ -ainv(B) 1 ] for an inactive row, correcting b for nonbasic, nonzero variables (active and inactive), and calculating dot(beta,b) is a lot of work. Much easier to call colPrimals for the complete solution vector and calculate b - dot(a,x) in the original system. Parameters: orig_lp: the original lp problem p_xB: (i) vector to hold the values of the primal basic variables; if NULL, a vector of appropriate size will be allocated (o) values of the primal basic variables, unscaled, in the original system frame of reference p_indB: (i) vector to hold the indices of the primal basic variables; if NULL, a vector of appropriate size will be allocated (o) indices of the primal basic variables, unscaled, in the original system frame of reference; indices of logical variables are encoded as the negative of the constraint index Returns: undefined */ { int i,j,m,i_orig,j_orig,m_orig,n_orig ; double xj,lhs ; consys_struct *orig_sys ; double *x,*xB ; int *indB ; bool scaled ; const double *rscale,*cscale ; # ifndef DYLP_NDEBUG int v ; # endif # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 char *rtnnme = "dy_rowPrimals" ; # endif # ifdef DYLP_PARANOIA if (dy_std_paranoia(orig_lp,rtnnme,__LINE__) == FALSE) { return ; } if (p_xB == NULL) { errmsg(2,rtnnme,"x") ; return ; } if (p_indB == NULL) { errmsg(2,rtnnme,"x") ; return ; } # endif /* Is unscaling required? Acquire the scaling vectors. If there are inactive constraints, we'll need the primal architecturals in order to calculate the value of the associated (basic) logical. */ scaled = dy_isscaled() ; if (scaled == TRUE) { dy_scaling_vectors(&rscale,&cscale) ; } orig_sys = orig_lp->consys ; n_orig = orig_sys->varcnt ; m_orig = orig_sys->concnt ; m = dy_sys->concnt ; x = NULL ; if (m < m_orig) { dy_colPrimals(orig_lp,&x) ; } /* Do we need vectors? Do the necessary setup. */ if (*p_xB != NULL) { xB = *p_xB ; memset(xB,0,(m_orig+1)*sizeof(double)) ; } else { xB = (double *) CALLOC((m_orig+1),sizeof(double)) ; } if (*p_indB != NULL) { indB = *p_indB ; memset(indB,0,(m_orig+1)*sizeof(int)) ; } else { indB = (int *) CALLOC((m_orig+1),sizeof(int)) ; } /* Walk the constraints of the original system. For each constraint that's active, we can obtain the value from dy_xbasic. For each inactive constraint, we need to calculate the value of the logical. Indices of logicals are recorded in indB as the negative of the constraint index. */ for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if (ACTIVE_CON(i_orig)) { i = dy_origcons[i_orig] ; j = dy_basis[i] ; if (j <= m) { j_orig = dy_actcons[j] ; } else { j_orig = dy_actvars[j] ; } if (scaled == TRUE) { if (j <= m) { xj = (1/rscale[j_orig])*dy_xbasic[i] ; } else { xj = cscale[j_orig]*dy_xbasic[i] ; } } else { xj = dy_xbasic[i] ; } if (j <= m) { indB[i_orig] = -j_orig ; } else { indB[i_orig] = j_orig ; } } else { lhs = consys_dotrow(orig_sys,i_orig,x) ; xj = orig_sys->rhs[i_orig]-lhs ; indB[i_orig] = -i_orig ; } setcleanzero(xj,dy_tols->zero) ; xB[i_orig] = xj ; } if (x != NULL) FREE(x) ; # ifndef DYLP_NDEBUG if (dy_opts->print.soln >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\txB =") ; v = 0 ; for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if ((++v)%3 == 0) { v = 0 ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t ") ; } j_orig = indB[i_orig] ; if (j_orig < 0) { j = n_orig-j_orig ; } else { j = j_orig ; } dyio_outfmt(dy_logchn,dy_gtxecho," (%d %g %s %d)", i_orig,xB[i_orig], consys_nme(orig_sys,'v',j,FALSE,NULL),j_orig) ; } } # endif /* That's it. Return the vectors. */ *p_xB = xB ; *p_indB = indB ; return ; } void dy_logPrimals (lpprob_struct *orig_lp, double **p_logx) /* This routine returns the values of the primal logical variables, unscaled, in the frame of reference of the original system (i.e., the value of the logical for constraint i is in position i of the vector). Unscaling is straightforward: sc_x = sc_inv(B)sc_b = inv(S)inv(B)inv(R)Rb = inv(S)(inv(B)b) so all that's needed to recover x = inv(B)b is to multiply by S. We just have to remember that for a logical, S = 1/R. It's more work to get the value of the logical for an inactive constraint --- we have to actually calculate b - dot(a,x). Parameters: orig_lp: the original lp problem p_logx: (i) vector to hold the primal logical variables; if NULL, a vector of appropriate size will be allocated (o) values of the primal logical variables, unscaled, in the original system frame of reference Returns: undefined */ { int j,m,i_orig,m_orig ; double xj,lhs ; consys_struct *orig_sys ; double *logx,*x ; bool scaled ; const double *rscale,*cscale ; # ifndef DYLP_NDEBUG int v,n_orig ; # endif # if DYLP_PARANOIA > 0 || MALLOC_DEBUG == 2 char *rtnnme = "dy_logPrimals" ; # endif # ifdef DYLP_PARANOIA if (dy_std_paranoia(orig_lp,rtnnme,__LINE__) == FALSE) { return ; } if (p_logx == NULL) { errmsg(2,rtnnme,"logx") ; return ; } # endif /* Is unscaling required? Acquire the scaling vectors. If we have inactive constraints, we'll need the values of the architecturals in order to calculate the value of the associated logical. */ scaled = dy_isscaled() ; if (scaled == TRUE) { dy_scaling_vectors(&rscale,&cscale) ; } orig_sys = orig_lp->consys ; m_orig = orig_sys->concnt ; m = dy_sys->concnt ; x = NULL ; if (m < m_orig) { dy_colPrimals(orig_lp,&x) ; } /* Do we need a vector? */ if (*p_logx != NULL) { logx = *p_logx ; memset(logx,0,(m_orig+1)*sizeof(double)) ; } else { logx = (double *) CALLOC((m_orig+1),sizeof(double)) ; } /* Walk the rows of the original system. For each constraint that's active, we can obtain the value of the associated logical from dy_x. For each constraint that's inactive, we have to actually calculate the row activity dot(x,a) and do the arithmetic. */ for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if (ACTIVE_CON(i_orig)) { j = dy_origcons[i_orig] ; if (scaled == TRUE) { xj = (1/rscale[i_orig])*dy_x[j] ; } else { xj = dy_x[j] ; } } else { lhs = consys_dotrow(orig_sys,i_orig,x) ; xj = orig_sys->rhs[i_orig]-lhs ; } setcleanzero(xj,dy_tols->zero) ; logx[i_orig] = xj ; } if (x != NULL) FREE(x) ; # ifndef DYLP_NDEBUG if (dy_opts->print.soln >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tlogx =") ; n_orig = orig_sys->varcnt ; v = 0 ; for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if (logx[i_orig] != 0) { if ((++v)%3 == 0) { v = 0 ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t ") ; } dyio_outfmt(dy_logchn,dy_gtxecho," (%d %g %s)", i_orig,logx[i_orig], consys_nme(orig_sys,'v',n_orig+i_orig,FALSE,NULL)) ; } } } # endif /* That's it. Return the vector. */ *p_logx = logx ; return ; } void dy_colStatus (lpprob_struct *orig_lp, flags **p_colstat) /* This routine returns the status of the primal architectural variables, in column order for the original system. The routine reports out the full set of dylp status codes. Parameters: orig_lp: the original lp problem p_colstat: (i) vector to hold the status of the primal architectural variables; if NULL, a vector of appropriate size will be allocated (o) status of the primal architectural variables, in the original system frame of reference Returns: undefined */ { int j,j_orig,n_orig ; flags statj ; consys_struct *orig_sys ; flags *colstat ; # ifndef DYLP_NDEBUG int v ; # endif # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 char *rtnnme = "dy_colStatus" ; # endif # ifdef DYLP_PARANOIA if (dy_std_paranoia(orig_lp,rtnnme,__LINE__) == FALSE) { return ; } if (p_colstat == NULL) { errmsg(2,rtnnme,"colstat") ; return ; } # endif orig_sys = orig_lp->consys ; n_orig = orig_sys->varcnt ; /* Do we need a vector? */ if (*p_colstat != NULL) { colstat = *p_colstat ; memset(colstat,0,(n_orig+1)*sizeof(flags)) ; } else { colstat = (flags *) CALLOC((n_orig+1),sizeof(flags)) ; } /* Walk the columns of the original system. For active variables, copy the status from dy_status. For inactive variables, we acquire it from dy_origvars. */ for (j_orig = 1 ; j_orig <= n_orig ; j_orig++) { if (ACTIVE_VAR(j_orig)) { j = dy_origvars[j_orig] ; statj = dy_status[j] ; } else { statj = (flags)(-dy_origvars[j_orig]) ; } colstat[j_orig] = statj ; } # ifndef DYLP_NDEBUG if (dy_opts->print.soln >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tcolstat =") ; v = 0 ; for (j_orig = 1 ; j_orig <= n_orig ; j_orig++) { if ((++v)%3 == 0) { v = 0 ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t ") ; } dyio_outfmt(dy_logchn,dy_gtxecho," (%s %d %s)", consys_nme(orig_sys,'v',j_orig,FALSE,NULL),j_orig, dy_prtvstat(colstat[j_orig])) ; } } # endif /* That's it. Return the vector. */ *p_colstat = colstat ; return ; } void dy_logStatus (lpprob_struct *orig_lp, flags **p_logstat) /* This routine returns the status of the primal logical variables, in row order for the original system. The routine reports out the full set of dylp status codes. It's actually a fair bit of work to get the status right for inactive constraints. Because we're reporting the full set of dylp status codes, and the client might be calling in a situation where the outcome was infeasible or unbounded, we need to calculate the value and assign the appropriate status code. Parameters: orig_lp: the original lp problem p_logstat: (i) vector to hold the status of the primal logical variables; if NULL, a vector of appropriate size will be allocated (o) status of the primal logical variables, in the original system frame of reference Returns: undefined */ { int i,m,i_orig,m_orig ; flags stati ; double rhsi,rhslowi,lhsi,xi,lbi,ubi ; consys_struct *orig_sys ; flags *logstat ; double *x ; char *rtnnme = "dy_logStatus" ; # ifndef DYLP_NDEBUG int v,n_orig ; # endif # ifdef DYLP_PARANOIA if (dy_std_paranoia(orig_lp,rtnnme,__LINE__) == FALSE) { return ; } if (p_logstat == NULL) { errmsg(2,rtnnme,"logstat") ; return ; } # endif orig_sys = orig_lp->consys ; m_orig = orig_sys->concnt ; m = dy_sys->concnt ; /* If we're not playing with a full deck, we'll need the values of the architecturals to determine the appropriate status for the logical. */ x = NULL ; if (m < m_orig) { dy_colPrimals(orig_lp,&x) ; } /* Do we need a vector? */ if (*p_logstat != NULL) { logstat = *p_logstat ; memset(logstat,0,(m_orig+1)*sizeof(flags)) ; } else { logstat = (flags *) CALLOC((m_orig+1),sizeof(flags)) ; } /* Walk the rows of the original system. For active constraints, copy the status of the logical from dy_status. For inactive constraints, we need to actually calculate the value of the logical and assign the appropriate status. This is more work than you'd think, because we need to determine the appropriate bounds for the logical based on the constraint type, and we need to allow for the possibility that the problem was infeasible or unbounded and the logical is not within bounds. We also need to allow for the possibility that dylp deactivated a tight constraint with y = 0. The convention for logicals in the original system is that all have a coefficient of 1.0. Thus we have bounds of (0,infty) for a slack (contypLE), (0,0) for an artificial (contypEQ), (-infty,0) for a surplus (contypGE), and (0,rhs-rhslow) for a bounded slack (contypRNG). */ for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if (ACTIVE_CON(i_orig)) { i = dy_origcons[i_orig] ; stati = dy_status[i] ; } else { lhsi = consys_dotrow(orig_sys,i_orig,x) ; rhsi = orig_sys->rhs[i_orig] ; xi = rhsi-lhsi ; setcleanzero(xi,dy_tols->zero) ; lbi = -dy_tols->inf ; ubi = dy_tols->inf ; switch (orig_sys->ctyp[i_orig]) { case contypLE: { lbi = 0.0 ; break ; } case contypEQ: { lbi = 0.0 ; ubi = 0.0 ; break ; } case contypGE: { ubi = 0.0 ; break ; } case contypRNG: { rhslowi = orig_sys->rhslow[i_orig] ; lbi = 0 ; ubi = rhsi-rhslowi ; break ; } case contypNB: { continue ; } default: { errmsg(1,rtnnme,__LINE__) ; break ; } } if (belowbnd(xi,lbi)) { stati = vstatBLLB ; } else if (atbnd(xi,lbi)) { stati = vstatBLB ; } else if (atbnd(xi,ubi)) { stati = vstatBUB ; } else if (abovebnd(xi,ubi)) { stati = vstatBUUB ; } else { stati = vstatB ; } } logstat[i_orig] = stati ; } if (x != NULL) FREE(x) ; # ifndef DYLP_NDEBUG if (dy_opts->print.soln >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\trowstat =") ; n_orig = orig_sys->varcnt ; v = 0 ; for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if ((++v)%3 == 0) { v = 0 ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t ") ; } dyio_outfmt(dy_logchn,dy_gtxecho," (%s %d %s)", consys_nme(orig_sys,'v',i_orig+n_orig,FALSE,NULL),i_orig, dy_prtvstat(logstat[i_orig])) ; } } # endif /* That's it. Return the vector. */ *p_logstat = logstat ; return ; } void dy_orig_soln (double *x, double *y) /* This routine unscales the primal and dual variable values associated with the rows of the active system before returning them to the user. The necessary unscaling is as follows: primal architectural: xS primal logical: x/R dual: yR The vectors are indexed by basis position. This routine isn't really general purpose --- it's called only from dylp_utils:buildsoln and assumes that x and y are already populated with scaled values. It should get a makeover to match the interface conventions of the other routines in the package. Parameters: x: basic primal variables y: dual variables Returns: undefined. */ { int i,j,i_orig,j_orig ; double xi,yi ; const double *rscale,*cscale ; /* Did we scale? If not, return right off. Otherwise, acquire the scaling vectors. */ if (dy_isscaled() == FALSE) return ; dy_scaling_vectors(&rscale,&cscale) ; /* Since we're only dealing with duals and basic primal variables, it suffices to step through the constraints (equivalently, basis positions). */ for (i = 1 ; i <= dy_sys->concnt ; i++) { i_orig = dy_actcons[i] ; j = dy_basis[i] ; xi = x[i] ; if (j <= dy_sys->concnt) xi /= rscale[i_orig] ; else { j_orig = dy_actvars[j] ; xi *= cscale[j_orig] ; } setcleanzero(xi,dy_tols->zero) ; x[i] = xi ; yi = y[i] ; yi *= rscale[i_orig] ; setcleanzero(yi,dy_tols->cost) ; y[i] = yi ; } return ; } bool dy_expandxopt (lpprob_struct *lp, double **p_xopt) /* This is a utility routine to load an expanded vector with the optimal solution to an lp relaxation. If the client supplies the vector, it's assumed it's large enough to hold the result. Note that unscaling is not required here. lp->x should have been unscaled when it was generated, and the client's constraint system (lp->consys) is not touched when dylp scales. Parameters: lp: lpprob_struct with optimal solution attached p_xopt: (i) vector to be filled in (created if null) (o) vector filled with optimal solution from lp Returns: TRUE if there's no problem translating the solution, FALSE otherwise. */ { int j,jpos ; consys_struct *consys ; flags *status,jstat ; double *xopt ; const char *rtnnme = "dy_expandxopt" ; # ifdef DYLP_PARANOIA if (p_xopt == NULL) { errmsg(2,rtnnme,"&x") ; return (FALSE) ; } if (lp == NULL) { errmsg(2,rtnnme,"lp problem") ; return (FALSE) ; } if (lp->lpret != lpOPTIMAL) { errmsg(4,rtnnme,"lp return code",dy_prtlpret(lp->lpret)) ; return (FALSE) ; } if (lp->consys == NULL) { errmsg(2,rtnnme,"lp constraint system") ; return (FALSE) ; } if (lp->basis == NULL) { errmsg(2,rtnnme,"lp basis") ; return (FALSE) ; } if (lp->basis->el == NULL) { errmsg(2,rtnnme,"lp basis vector") ; return (FALSE) ; } if (lp->status == NULL) { errmsg(2,rtnnme,"lp status") ; return (FALSE) ; } # endif consys = lp->consys ; status = lp->status ; /* If the user didn't supply a solution vector, allocate one now. */ if (*p_xopt == NULL) { xopt = (double *) MALLOC((consys->varcnt+1)*sizeof(double)) ; } else { xopt = *p_xopt ; } for (j = 1 ; j <= consys->varcnt ; j++) { if (((int ) status[j]) < 0) { jstat = vstatB ; jpos = -((int) status[j]) ; xopt[j] = lp->x[jpos] ; } else { jstat = status[j] ; switch (jstat) { case vstatNBFX: case vstatNBLB: { xopt[j] = consys->vlb[j] ; break ; } case vstatNBUB: { xopt[j] = consys->vub[j] ; break ; } case vstatNBFR: { xopt[j] = 0 ; break ; } default: { errmsg(359,rtnnme,consys->nme, consys_nme(consys,'v',j,FALSE,NULL),j,dy_prtvstat(jstat)) ; if (*p_xopt == NULL) FREE(xopt) ; return (FALSE) ; } } } } *p_xopt = xopt ; return (TRUE) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_basis.c0000644000175200017520000012330012253224475015330 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains the interface layer between dylp and the glpk routines which maintain an LU factorization of the basis inverse. One of the nicer aspects of using glpk is that it uses the same convention for indexing as dylp: vector[0] is unused, and entries start with vector[1]. */ #define DYLP_INTERNAL #include "dylp.h" #include "glpinv.h" static char sccsid[] UNUSED = "@(#)dy_basis.c 4.6 11/06/04" ; static char svnid[] UNUSED = "$Id: dy_basis.c 524 2013-12-15 03:59:57Z tkr $" ; /* The basis data structure. glpinv/glpluf does not distinguish between allocated capacity and actual basis size. So we cheat --- we allocate the size we want, to get vectors of the proper capacity, then reset the size fields so that glpinv/glpluf use only what's needed. */ static INV *luf_basis = NULL ; static int luf_capacity = 0 ; /* Basis patch structure. This structure is used to record changes to the basis when a singular basis is repaired. It's filled in by adjust_basis and then used by adjust_therest. Field Definition ----- ---------- pos the basis position that has changed out the variable removed from the basis in the variable inserted into the basis */ typedef struct { int pos ; int out ; int in ; } patch_struct ; /* Pivot selection during factoring glpinv/glpluf uses dynamic Markowitz pivot selection with partial (PTPS) threshold pivot selection. A pivot for row i must satisfy piv_tol*max{j}|a|. There are seven levels of pivot selection, as follows: stable look ------ ------- .01 4 .05 4 .1 4 .2 4 .4 6 .8 8 .95 10 The values for stable are based on guidelines in Suhl & Suhl, Computing Sparse LU Factorizations for Large-Scale Linear Programming Bases, ORSA Journal on Computing, v2(4), Fall, 1990. glpluf uses a default threshold of .1, and tightens to .3, then .7, before giving up. We're moving further at both extremes. Note that 1.0 is illegal, according to glpluf. glpinv/glpluf also provides for a heuristic limit on the number of pivot candidates considered. After k candidates have been examined, it returns the best so far. This parameter will affect sparsity (numerical stability must be satisfied by all pivots). As we get fussier about numerical stability, make glpluf look a bit harder for sparsity. What's implemented in practice is a table with the above values, and a subroutine which takes a parameter, delta, and raises (delta > 0) or lowers (delta < 0) the pivot selection parameters delta steps. Any large value of delta serves to slam the tolerances to one extreme or the other. There's also a static value, minpivlevel, which defaults to 0 but can be raised to deal with persistent accuracy problems. The routine dy_factor can tighten the pivot selection parameters if an attempt to factor the basis is aborted due to numerical instability. It does not loosen them, however --- this decision is left to higher levels. (In dylp, dy_accchk can raise and lower the current pivot selection parameters. Unexpected loss of accuracy or feasibility during preoptimality checks results in a boost to the minimum pivot level which remains in effect until the start of a new LP phase.) pivtols_struct Field Description ----- ----------- stable The pivot selection ratio. look The number of candidates considered. */ typedef struct { double stable ; int look ; } pivtols_struct ; static pivtols_struct pivtols[] = {{.01,4}, {.05,4}, {.1,4}, {.2,4}, {.4,6}, {.8,8}, {.95,10}} ; static int pivlevel,minpivlevel ; #define MAX_PIVLEVEL (((sizeof pivtols)/(sizeof(pivtols_struct)))-1) char *dy_prtpivparms (int lvl) /* Utility routine to construct a print string for a set of pivoting parameters. It exists just to keep things local to this file. Parameters: lvl: pivot level to print; if < 0, the current pivot level (as set in luf_basis) is printed Returns: pointer to a static character string */ { static char buffer[20] ; pivtols_struct pivtol ; # ifdef DYLP_PARANOIA const char *rtnnme = "dy_prtpivparms" ; if (luf_basis == NULL) { errmsg(2,rtnnme,"luf_basis") ; return ("<>") ; } # endif if (lvl < 0 || lvl > MAX_PIVLEVEL) { pivtol.stable = luf_basis->luf->piv_tol ; pivtol.look = luf_basis->luf->piv_lim ; } else { pivtol.stable = pivtols[lvl].stable ; pivtol.look = pivtols[lvl].look ; } dyio_outfxd(buffer,-19,'l',"PTPS(%.2f,%d)",pivtol.stable,pivtol.look) ; return (buffer) ; } bool dy_setpivparms (int curdelta, int mindelta) /* This routine exists to allow other parts of the lp code to adjust the pivot regimen used when the basis is factored. curdelta is the change in the current pivot level, mindelta the change in the minimum pivot level. A positive delta increases (tightens) the tolerances by delta steps, and a negative delta lowers (loosens) them. If either delta is 0, there's no change. A large positive or negative value slams the tolerance to the appropriate extreme. Parameters: curdelta: change to the current pivot level mindelta: change to the minimum pivot level Returns: TRUE if any change actually occurred, FALSE if we were already at the relevant limit(s) (BE CAREFUL interpreting the return value if you're changing both at once) */ { bool minretval,curretval ; # ifdef DYLP_PARANOIA const char *rtnnme = "dy_setpivparms" ; if (luf_basis == NULL) { errmsg(2,rtnnme,"luf_basis") ; return (FALSE) ; } # endif minretval = FALSE ; curretval = FALSE ; /* Adjust the minimum pivot level first. This may imply an adjustment in the current pivot level. */ if (mindelta != 0) { if ((minpivlevel <= 0 && mindelta < 0) || (minpivlevel >= MAX_PIVLEVEL && mindelta > 0)) { # ifndef DYLP_NDEBUG if ((dy_opts->print.basis >= 3) || (dy_opts->print.basis >= 2 && mindelta > 0)) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t min. pivot ratio unchanged at %s (%d)", dy_prtpivparms(minpivlevel),minpivlevel) ; } # endif } else { minretval = TRUE ; minpivlevel += mindelta ; if (minpivlevel < 0) minpivlevel = 0 ; else if (minpivlevel > MAX_PIVLEVEL) minpivlevel = MAX_PIVLEVEL ; if (pivlevel < minpivlevel) curdelta = maxx(curdelta,(minpivlevel-pivlevel)) ; # ifndef DYLP_NDEBUG if (dy_opts->print.basis >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t setting min. pivot ratio to %s (%d)", dy_prtpivparms(minpivlevel),minpivlevel) ; } # endif } } /* Adjust the current pivot level. */ if (curdelta != 0) { if ((pivlevel <= minpivlevel && curdelta < 0) || (pivlevel >= MAX_PIVLEVEL && curdelta > 0)) { # ifndef DYLP_NDEBUG if ((dy_opts->print.basis >= 3) || (dy_opts->print.basis >= 2 && mindelta > 0)) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t cur. pivot ratio unchanged at %s (%d)", dy_prtpivparms(-1),pivlevel) ; } # endif } else { curretval = TRUE ; pivlevel += curdelta ; if (pivlevel < minpivlevel) pivlevel = minpivlevel ; else if (pivlevel > MAX_PIVLEVEL) pivlevel = MAX_PIVLEVEL ; luf_basis->luf->piv_tol = pivtols[pivlevel].stable ; luf_basis->luf->piv_lim = pivtols[pivlevel].look ; # ifndef DYLP_NDEBUG if (dy_opts->print.basis >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t setting cur. pivot ratio to %s (%d)", dy_prtpivparms(-1),pivlevel) ; } # endif } } if (curretval == FALSE && minretval == FALSE) return (FALSE) ; else return (TRUE) ; } double dy_chkpiv (double abarij, double maxabar) /* This routine checks that the pivot element satisfies a stability test. The stability test is |abarij/maxabar| > dy_tols->pivot*piv_tol The motivation for the check is to try and choose reasonably stable pivots --- inv_update will do what we tell it, might as well try to choose half wisely. Balance that against the desire to make progress toward the optimum. Setting dy_tols->pivot to 1 would give the same selection criteria as is used during factorization. Parameters: abarij: the pivot element (only the absolute value is used) maxabar: (primal) max{i} |abar| (dual) max{j} |abar| Returns: |abarij/(dy_tols->pivot*piv_tol*maxabar)| return value < 1.0 indicates an unstable pivot */ { double ratio,abspiv,stable ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "dy_chkpiv" ; # endif # ifdef DYLP_PARANOIA if (luf_basis == NULL) { errmsg(2,rtnnme,"luf_basis") ; return (dyrFATAL) ; } # endif /* In some instances (for example, netlib/grow22), we run into trouble because column coefficients inflate to outrageous values --- 1.0e18, for example. Take the attitude that any pivot s.t. |abar > 1.0| should be accepted, to give a bit more choice in pivot selection. To do this, lie about the stability ratio, */ abspiv = fabs(abarij) ; ratio = dy_tols->pivot*luf_basis->luf->piv_tol ; stable = ratio*maxabar ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) { if (abspiv/stable < 1.0) dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: %s pivot = %g < %g; column max = %g, ratio = %g.", rtnnme,(abspiv < 1.0)?"rejecting":"tolerating", abarij,stable,maxabar,ratio) ; } # endif if (abspiv/stable >= 1.0) return (abspiv/stable) ; else if (abspiv >= 1.0) return (1.0) ; else return (abspiv/stable) ; } void dy_initbasis (int concnt, int factor, double zero_tol) /* This routine calls the glpk routine inv_create to initialize the basis data structures, then sets values for the zero tolerance (eps_tol), pivot ratio (piv_tol) and number of candidates examined (piv_lim). NOTE: This routine can be (and typically is) called before any of the main dylp data structures exist. Be careful what you reference. Parameters: concnt: the number of constraints (rows) that the basis representation should be capable of handling factor: the planned refactorisation frequency; passed to glpk as the basis inverse update capacity (i.e., the limit on the number of pivots between refactorisations) zero_tol: zero tolerance; a value of 0.0 uses the glpk default (INV->LUF->eps_tol = 1.0e-15). Returns: void */ { int sva_size ; const char *rtnnme = "dy_initbasis" ; /* Create the basis. Allow for at least five constraints (also handles pathological examples with no explicit constraints). */ luf_capacity = maxx(concnt,5) ; luf_basis = inv_create(luf_capacity,factor) ; if (luf_basis == NULL) { if (dy_lp == NULL) { errmsg(302,rtnnme,"empty","pre-init",0,"create") ; } else { errmsg(302,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"create") ; } return ; } /* WARNING: We're going to reach inside glpluf to get it to triple the amount of space that it allocates for the sparse vector area. We're doing this by triggering the reallocation mechanism built into luf_decomp (called by inv_decomp). */ sva_size = luf_basis->luf->sv_size ; luf_basis->luf->new_sva = 3*sva_size ; # ifndef DYLP_NDEBUG if (dy_opts != NULL && dy_opts->print.basis >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\ninitbasis: %s(%d) basis capacity %d, piv lim %d.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, luf_basis->luf->n,luf_basis->hh_max) ; } /* XX_DEBUG_XX There's no good way to control this output, given the timing of the call (before dy_opts is initialised), but it's sometimes useful when debugging. else { dyio_outfmt(dy_logchn,TRUE, "\ninitbasis: EXTERN(0) basis capacity %d, piv lim %d.", luf_basis->luf->n,luf_basis->hh_max) ; } */ # endif /* Set the initial pivot level to {.01,4}, and allow it to drop to {.01,4}. */ pivlevel = 0 ; minpivlevel = 0 ; if (zero_tol != 0.0) luf_basis->luf->eps_tol = zero_tol ; luf_basis->luf->piv_tol = pivtols[pivlevel].stable ; luf_basis->luf->piv_lim = pivtols[pivlevel].look ; luf_basis->luf->max_gro = 1.0e7 ; /* This is the smallest value that can appear on the diagonal of U after a pivot update. dylp will (in extremis) drop its pivot selection tolerance tols.pivot to 1e-9 (or thereabouts), so upd_tol had better be less or we spend a lot of time refactoring. This should probably be adjusted as needed, in response to adjustments in tols.pivot, but I need to sit down and really think about the math. In the meantime, this seems to be adequate. */ luf_basis->upd_tol = 1.0e-10 ; return ; } void dy_freebasis (void) /* This routine calls inv_delete to clean up the space allocated for the basis representation, then free_lib_env to clean up the library. Parameters: none Returns: undefined */ { /* glplib2.c */ extern int dy_glp_free_lib_env(void) ; if (luf_basis != NULL) { inv_delete(luf_basis) ; luf_basis = NULL ; } (void) dy_glp_free_lib_env() ; return ; } static void luf_adjustsize (void) /* This routine sets the proper working size in the basis. It also checks that the allocated capacity of the basis is sufficient for the current size of the constraint system and increases it if necessary. Parameters: none Returns: undefined */ { double upd_tol,piv_tol,zero_tol,max_gro ; int factor,look,capacity ; # ifndef DYLP_NDEBUG int oldcapacity ; # endif /* Check that we're within the allocated limits, and resize if necessary. Preserve the tolerance settings that we may have tweaked. */ if (dy_sys->concnt > luf_capacity) { factor = luf_basis->hh_max ; upd_tol = luf_basis->upd_tol ; zero_tol = luf_basis->luf->eps_tol ; piv_tol = luf_basis->luf->piv_tol ; look = luf_basis->luf->piv_lim ; max_gro = luf_basis->luf->max_gro ; # ifndef DYLP_NDEBUG oldcapacity = luf_basis->m ; # endif dy_freebasis() ; capacity = (int) (dy_sys->concnt*1.5) ; dy_initbasis(capacity,factor,zero_tol) ; luf_basis->upd_tol = upd_tol ; luf_basis->luf->eps_tol = zero_tol ; luf_basis->luf->piv_tol = piv_tol ; luf_basis->luf->piv_lim = look ; luf_basis->luf->max_gro = max_gro ; # ifndef DYLP_NDEBUG if (dy_opts->print.basis >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n increased basis capacity from %d to %d constraints", oldcapacity,luf_basis->m) ; dyio_outfmt(dy_logchn,dy_gtxecho,", piv lim %d.",luf_basis->hh_max) ; } # endif } /* Now set the working size. */ luf_basis->m = dy_sys->concnt ; luf_basis->luf->n = dy_sys->concnt ; return ; } void dy_ftran (double *col, bool save) /* This is a shell that calls inv_ftran to perform inv(B)*col. Glpk does not set clean zeros based on its internal zero tolerance, so the returned vector will in general have values < dy_tols->zero. But it's not clear we want to clean them off here. Parameter: col: The column vector to be ftran'ed. save: This will be the entering column in the next pivot, and the basis maintenance code should remember it (as the implicit parameter to the pivot). Returns: undefined */ { int isave ; if (save == TRUE) isave = 1 ; else isave = 0 ; inv_ftran(luf_basis,col,isave) ; return ; } void dy_btran (double *col) /* This is a shell that calls inv_btran to perform col*inv(B). As with ftran, the returned vector is not necessarily clean. Parameter: col: The column vector to be btran'ed. Returns: undefined */ { inv_btran(luf_basis,col) ; return ; } static void adjust_basis (int *p_patchcnt, patch_struct **p_patches) /* This routine corrects the dylp basis arrays when glpinv/glpluf declares the current basis to be singular. glpluf doesn't actually salvage the basis --- it just reports the linearly dependent (hence unpivoted) columns and corresponding unpivoted rows. Once we've adjusted the basis accordingly, we can make another attempt to factor. The convention is as follows: luf_basis.rank gives the rank of the basis. qq_col[rank+1 .. m] contain the indices of the basic columns that must be removed from the basis. pp_row[rank+1 .. m] contain the indices of the basic rows that remain unpivoted; we'll put the logicals for these rows into the basis. Both of the above are expressed in terms of basis positions. For the rows, basis position i is equivalent to constraint i; for the columns, we need to look up the variable j in basis position i. Recognise that in general this is the easiest part of salvaging the situation. We record the changes for adjust_therest, which will do the remainder of the work after the basis is successfully factored. Parameters: p_patchcnt: (o) the number of basis corrections p_patches: (o) patch array recording the basis corrections Returns: undefined */ { int *qq_col, *pp_row ; int rank,pqndx,i,j,k,pndx ; patch_struct *patches ; #if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 const char *rtnnme = "adjust_basis" ; if (dy_sys == NULL) { errmsg(2,rtnnme,"dy_sys") ; return ; } if (dy_basis == NULL) { errmsg(2,rtnnme,"basis") ; return ; } if (dy_var2basis == NULL) { errmsg(2,rtnnme,"var2basis") ; return ; } if (luf_basis == NULL) { errmsg(2,rtnnme,"LUF basis") ; return ; } if (p_patches == NULL) { errmsg(2,rtnnme,"p_patches") ; return ; } #endif qq_col = luf_basis->luf->qq_col ; pp_row = luf_basis->luf->pp_row ; rank = luf_basis->luf->rank ; patches = (patch_struct *) MALLOC((dy_sys->concnt-rank)*sizeof(patch_struct)) ; /* Walk qq_col, retrieving the basis position that must be corrected. Remove the corresponding variable from the basis, and put in its place the slack for the basis row. */ for (pqndx = rank+1, pndx = 0 ; pqndx <= dy_sys->concnt ; pqndx++, pndx++) { k = qq_col[pqndx] ; j = dy_basis[k] ; i = pp_row[pqndx] ; dy_basis[k] = i ; dy_var2basis[j] = 0 ; dy_var2basis[i] = k ; patches[pndx].pos = k ; patches[pndx].out = j ; patches[pndx].in = i ; # ifndef DYLP_NDEBUG if (dy_opts->print.basis >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n pos'n %d (%s (%d)) replacing %s (%d) with %s (%d).", k,consys_nme(dy_sys,'c',k,FALSE,NULL),k, consys_nme(dy_sys,'v',j,FALSE,NULL),j, consys_nme(dy_sys,'v',i,FALSE,NULL),i) ; } # endif } *p_patchcnt = pndx ; *p_patches = patches ; return ; } static dyret_enum adjust_therest (int patchcnt, patch_struct *patches) /* We're here because we've successfully patched a singular basis. The patches array contains entries of the form , x>, where x has just been kicked out of the basis and replaced by x. The basis and var2basis vectors are already corrected (we needed them to complete the factorization). Now we need to adjust other dylp data structures to reflect the unexpected change. The amount of additional work to be done depends on the phase of the simplex algorithm. dyINIT: We're done. We've just factored the initial basis and none of the other data structures have been initialised. We didn't really need this call, but the code is cleaner this way. If we're farther along, we might be in the middle of simplex (dyPRIMAL1, dyPRIMAL2, or dyDUAL), or we might be manipulating the constraint system. If we're running simplex, the first actions are cleanup: clear the pivot reject list and back out any antidegeneracy activity. Next, set the status of the newly nonbasic variables, consistent with their previous status. The general rule is to perturb the solution as little as possible. If we're in a primal or dual simplex phase, try to make decisions that are compatible with primal or dual feasibility. Two specific points: * Superbasic (SB) variables are only created in dyPRIMAL2. * Nonbasic free (NBFR) variables imply loss of dual feasibility. Once we have nonbasic status set, we can calculate new primals, duals, and reduced costs and fine-tune the status of the newly basic variables. If we've arrived here from one of the constraint system manipulation phases, there will almost certainly be duplication of effort once we return. But hey, how often does a basis patch happen, anyway? If we're in a simplex phase, there's still some work to do to make the patch as transparent as possible. For dual simplex, we'll check the status of the nonbasic variables and try to maintain dual feasibility. This may not be possible. If we do maintain dual feasibility, reset the DSE norms. For primal simplex, we need to reset the PSE norms. Parameters: patchcnt: the number of basis changes patches: array of basis changes Returns: dyrOK if the repair proceeds without error, dyrLOSTDFEAS if feasibility is lost in dual phase II, and dyrFATAL if anything else goes wrong. */ { int i,j,pndx ; pkvec_struct *aj ; flags statj ; dyret_enum retval ; dyphase_enum phase ; double valj,cbarj,*vub,*vlb,*obj ; const char *rtnnme = "adjust_therest" ; # ifndef DYLP_NDEBUG flags stati ; double vali ; # endif # ifdef DYLP_PARANOIA if (dy_sys == NULL) { errmsg(2,rtnnme,"dy_sys") ; return (dyrFATAL) ; } if (dy_basis == NULL) { errmsg(2,rtnnme,"basis") ; return (dyrFATAL) ; } if (dy_var2basis == NULL) { errmsg(2,rtnnme,"var2basis") ; return (dyrFATAL) ; } if (patches == NULL) { errmsg(2,rtnnme,"patch") ; return (dyrFATAL) ; } # endif phase = dy_lp->phase ; # ifdef DYLP_PARANOIA if (!(phase == dyINIT || phase == dyADDVAR || phase == dyADDCON || phase == dyPRIMAL1 || phase == dyPRIMAL2 || phase == dyDUAL || phase == dyFORCEPRIMAL || phase == dyFORCEDUAL)) { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } if (!(phase == dyINIT)) { if (dy_status == NULL) { errmsg(2,rtnnme,"status") ; return (dyrFATAL) ; } if (dy_x == NULL) { errmsg(2,rtnnme,"x") ; return (dyrFATAL) ; } if (dy_xbasic == NULL) { errmsg(2,rtnnme,"x") ; return (dyrFATAL) ; } } #endif if (phase == dyINIT) return (dyrOK) ; vlb = dy_sys->vlb ; vub = dy_sys->vub ; obj = dy_sys->obj ; aj = NULL ; retval = dyrOK ; /* If we're in one of the simplex phases, back out any antidegeneracy activity and clear the pivot rejection list. It's easiest to clear the pivot reject list ahead of the status modifications so that we don't have to worry about the NOPIVOT qualifier when checking status values. */ if (phase == dyPRIMAL1 || phase == dyPRIMAL2 || phase == dyDUAL) { if (dy_clrpivrej(NULL) != TRUE) return (dyrFATAL) ; if (dy_lp->degen > 0) { if (phase == dyDUAL) { (void) dy_dualdegenout(0) ; } else { (void) dy_degenout(0) ; } } } /* Now correct the status for newly nonbasic variables. We need to correct dy_x if the status change forces a change in value. If we end up with a NBFR variable, we've lost dual feasibility. While we're walking the patches, set the status for x (the newly basic variable) to vstatB. No need to be more precise at this point. */ for (pndx = 0 ; pndx < patchcnt ; pndx++) { i = patches[pndx].in ; # ifndef DYLP_NDEBUG stati = dy_status[i] ; vali = dy_x[i] ; # endif dy_status[i] = vstatB ; j = patches[pndx].out ; statj = dy_status[j] ; valj = dy_x[j] ; switch (statj) { case vstatBLLB: { dy_status[j] = vstatNBLB ; dy_x[j] = vlb[j] ; break ; } case vstatBLB: { dy_status[j] = vstatNBLB ; break ; } case vstatB: { if (phase == dyPRIMAL2) dy_status[j] = vstatSB ; else if (valj-vlb[j] < vub[j]-valj) { dy_status[j] = vstatNBLB ; dy_x[j] = vlb[j] ; } else { dy_status[j] = vstatNBUB ; dy_x[j] = vub[j] ; } break ; } case vstatBUB: { dy_status[j] = vstatNBUB ; break ; } case vstatBUUB: { dy_status[j] = vstatNBUB ; dy_x[j] = vub[j] ; break ; } case vstatBFX: { dy_status[j] = vstatNBFX ; break ; } case vstatBFR: { dy_status[j] = vstatNBFR ; if (phase == dyDUAL) { # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 1) { dywarn(346,rtnnme, dy_sys->nme,dy_prtlpphase(phase,TRUE),dy_lp->tot.iters+1, dy_prtvstat(statj),consys_nme(dy_sys,'v',j,FALSE,NULL),j) ; } # endif retval = dyrLOSTDFEAS ; } break ; } default: { errmsg(380,rtnnme,dy_sys->nme,consys_nme(dy_sys,'v',j,FALSE,NULL),j, dy_prtvstat(statj),"basic") ; return (dyrFATAL) ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.basis >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t%s (%d) had status %s, value %g, ", consys_nme(dy_sys,'v',i,FALSE,NULL),i, dy_prtvstat(stati),vali) ; dyio_outfmt(dy_logchn,dy_gtxecho,"now status %s.", dy_prtvstat(dy_status[i])) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t%s (%d) had status %s, value %g, ", consys_nme(dy_sys,'v',j,FALSE,NULL),j, dy_prtvstat(statj),valj) ; dyio_outfmt(dy_logchn,dy_gtxecho,"now status %s, value %g.", dy_prtvstat(dy_status[j]),dy_x[j]) ; } # endif } # ifdef DYLP_PARANOIA /* If paranoid checks are in place, we need agreement between dy_status, dy_x, and dy_xbasic, lest dy_calccbar fail. Call dy_calcprimals and dy_setbasicstatus to get the basic status right. This is restricted to paranoid mode because the proper place to do this is after making corrections to nonbasic status for dual feasibility. */ if (dy_calcprimals() == FALSE) return (dyrFATAL) ; dy_setbasicstatus() ; # endif /* Calculate the duals and reduced costs. */ dy_calcduals() ; if (dy_calccbar() == FALSE) { errmsg(384,rtnnme, dy_sys->nme,dy_prtlpphase(phase,TRUE),dy_lp->tot.iters) ; return (dyrFATAL) ; } /* If we're in phase dyDUAL, it's worth a scan to check dual feasibility and make adjustments to maintain it, if possible. (retval = dyrLOSTDFEAS says we introduced a NBFR variable, in which case we have no hope). Open a loop to scan the nonbasic variables. NBFX variables are always dual feasible, NBFR variables are never dual feasible. We're minimising, so dual feasibility (primal optimality) is cbarj < 0 && x at upper bound, or cbarj > 0 && x at lower bound. It's important that the zero tolerance for cbar here be the same as the one used in dy_dualin when it checks for loss of dual feasibility. */ if (phase == dyDUAL && retval != dyrLOSTDFEAS) { for (j = 1 ; j <= dy_sys->varcnt ; j++) { statj = dy_status[j] ; if (flgon(statj,vstatBASIC|vstatNBFX)) continue ; if (flgon(statj,vstatNBFR)) { retval = dyrLOSTDFEAS ; # ifndef DYLP_NDEBUG cbarj = dy_cbar[j] ; if (dy_opts->print.dual >= 1) { dywarn(347,rtnnme, dy_sys->nme,dy_prtlpphase(phase,TRUE),dy_lp->tot.iters+1, consys_nme(dy_sys,'v',j,FALSE,NULL),j, dy_prtvstat(statj),j,cbarj,dy_tols->dfeas) ; } # endif break ; } cbarj = dy_cbar[j] ; if (cbarj < -dy_tols->dfeas && flgoff(statj,vstatNBUB)) { if (vub[j] >= dy_tols->inf) { # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 1) { dywarn(347,rtnnme, dy_sys->nme,dy_prtlpphase(phase,TRUE),dy_lp->tot.iters+1, consys_nme(dy_sys,'v',j,FALSE,NULL),j, dy_prtvstat(statj),j,cbarj,dy_tols->dfeas) ; } # endif retval = dyrLOSTDFEAS ; break ; } else { dy_status[j] = vstatNBUB ; dy_x[j] = vub[j] ; } } else if (cbarj > dy_tols->dfeas && flgoff(statj,vstatNBLB)) { if (vlb[j] >= dy_tols->inf) { # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 1) { dywarn(347,rtnnme, dy_sys->nme,dy_prtlpphase(phase,TRUE),dy_lp->tot.iters+1, consys_nme(dy_sys,'v',j,FALSE,NULL),j, dy_prtvstat(statj),j,cbarj,dy_tols->dfeas) ; } # endif retval = dyrLOSTDFEAS ; break ; } else { dy_status[j] = vstatNBLB ; dy_x[j] = vlb[j] ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.basis >= 3 && dy_status[j] != statj) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tchanged status of %s (%d) from %s to", consys_nme(dy_sys,'v',j,FALSE,NULL),j,dy_prtvstat(statj)) ; dyio_outfmt(dy_logchn,dy_gtxecho, " %s to maintain dual feasibility; cbar = %g.", dy_prtvstat(dy_status[j]),cbarj) ; } # endif } } /* The dual variables and reduced costs have been recalculated, and we have the final status for all nonbasic variables. Recalculate the primal variables and set the status of the basic variables. */ if (dy_calcprimals() == FALSE) return (dyrFATAL) ; dy_setbasicstatus() ; /* If we're running primal simplex, reset the PSE reference frame. If we're running dual simplex and haven't lost dual feasibility, recalculate the basis inverse row norms. */ if (phase == dyPRIMAL1 || phase == dyPRIMAL2) { dy_pseinit() ; } else if (phase == dyDUAL && retval != dyrLOSTDFEAS) { dy_dseinit() ; } return (retval) ; } static int factor_loadcol (void *p_consys, int i, int *rndx, double *coeff) /* This routine is used by luf_decomp to load columns of the basis into its internal data structure. The requirements are that it load rndx[] and coeff[] with the row indices and coefficients, respectively, of column i of the basis, returning the number of coefficients. Here, we need to look up the index j of the variable that actually occupies basis position i, retrieve the column, and load it into rndx and coeff. Parameters: p_consys: a consys_struct i: basis index rndx: (o) row indices i of coefficients a coeff: (o) coefficients a Returns: number of coefficients, or -1 in the event of an error. */ { int j,vecndx,pkndx ; double aij ; pkvec_struct *aj ; consys_struct *consys ; const char *rtnnme = "factor_loadcol" ; # ifdef DYLP_PARANOIA if (p_consys == NULL) { errmsg(2,rtnnme,"consys") ; return (-1) ; } if (rndx == NULL) { errmsg(2,rtnnme,"row index vector") ; return (-1) ; } if (coeff == NULL) { errmsg(2,rtnnme,"coefficient") ; return (-1) ; } # endif consys = (consys_struct *) p_consys ; aj = pkvec_new(consys->maxcollen) ; /* Retrieve the column ... */ j = dy_basis[i] ; if (consys_getcol_pk(consys,j,&aj) == FALSE) { errmsg(112,rtnnme,dy_sys->nme,"retrieve","column", consys_nme(dy_sys,'v',j,FALSE,NULL),j) ; if (aj != NULL) pkvec_free(aj) ; return (-1) ; } /* ... and load it into the return vectors rndx and coeff. */ vecndx = 1 ; for (pkndx = 0 ; pkndx < aj->cnt ; pkndx++) { aij = aj->coeffs[pkndx].val ; if (aij != 0.0) { rndx[vecndx] = aj->coeffs[pkndx].ndx ; coeff[vecndx] = aij ; vecndx++ ; } } /* Clean up and return. */ pkvec_free(aj) ; return (vecndx-1) ; } dyret_enum dy_factor (flags *calcflgs) /* This routine orchestrates the LU factorisation of the basis. The glpk routines do the grunt work. This routine provides the intelligence. If inv_decomp aborts the attempt to factor due to numerical instability, we tighten the pivot selection parameters one notch and try again, giving up only when no further increase is possible. The sequence of values for the pivot selection parameters are defined in a table at the top of this file. If inv_decomp aborts the attempt to factor because the basis is singular, we correct the basis with adjust_basis and take another run at factoring. In the event that the basis is successfully patched, we have serious work to do. See the comments with adjust_therest for further information. If the user has for some reason disabled basis patching, we return dyrSINGULAR. inv_decomp (actually, luf_decomp) is self-expanding --- if more space is needed to hold the factorization, the expansion is handled internally. dylp uses ladEXPAND to force basis expansion after a pivot fails due to lack of space. In glpk, inv_update will set instructions in the basis structure and luf_decomp will handle the expansion, so ladEXPAND is redundant. No action need be taken in this routine. It's also not possible to tell if the basis has been expanded, so ladEXPAND is not set on output. Parameters: calcflgs: (i) ladPRIMALS indicates the primal variables should be recalculated after factoring the basis. ladDUALS indicates the dual variables should be recalculated after factoring the basis. ladEXPAND indicates that the basis should be expanded prior to refactoring. (o) flags are set to indicate if the corresponding variables have been recalculated. Returns: dyrOK if the basis is factored without incident dyrPATCHED if the basis was singular and has been repaired dyrSINGULAR if the basis was singular and has not been repaired dyrNUMERIC if factoring failed for the strictest pivoting regimen dyrFATAL for other fatal errors NOTE: glpinv/glpluf will crash and burn if they encounter what they consider to be a fatal error, rather than returning a fatal error code. This needs to be addressed at some point. In particular, failure to expand the basis, failure to load the basis from the constraint system, and various parameter errors fall into this category. */ { int retval,patchcnt ; bool try_again,patched ; dyret_enum retcode ; patch_struct *patches ; const char *rtnnme = "dy_factor" ; #ifdef DYLP_PARANOIA if (dy_sys == NULL) { errmsg(2,rtnnme,"dy_sys") ; return (dyrFATAL) ; } if (dy_basis == NULL) { errmsg(2,rtnnme,"basis") ; return (dyrFATAL) ; } #endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) { int pivcnt ; pivcnt = dy_lp->tot.pivs-dy_stats->factor.prevpiv ; dy_stats->factor.avgpivs = dy_stats->factor.avgpivs*dy_stats->factor.cnt ; dy_stats->factor.avgpivs += pivcnt ; dy_stats->factor.cnt++ ; dy_stats->factor.avgpivs /= dy_stats->factor.cnt ; if (pivcnt > dy_stats->factor.maxpivs) dy_stats->factor.maxpivs = pivcnt ; dy_stats->factor.prevpiv = dy_lp->tot.pivs ; } # endif retcode = dyrINV ; patchcnt = 0 ; patches = NULL ; /* Call luf_adjustsize to set the actual size of the basis. If the allocated capacity is too small, it will be expanded. */ luf_adjustsize() ; /* Open a loop for factorisation attempts. We'll persist in the face of numerical stability problems as long as there's room to tighten the pivot selection. At present, glpinv/glpluf will crash and burn if they encounter fatal problems. The basis load is implicit --- the routine factor_loadcol is called from luf_decomp to load up the coefficients. */ try_again = TRUE ; patched = FALSE ; while (try_again) { retval = inv_decomp(luf_basis,dy_sys,factor_loadcol) ; # ifndef DYLP_NDEBUG if ((retval == 0 && dy_opts->print.basis >= 4) || (retval > 0 && dy_opts->print.basis >= 2)) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: factored with %s, basis stability %g.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_prtpivparms(-1),luf_basis->min_vrratio) ; } # endif /* Deal with the result. A return code of 0 means there were no difficulties; 1 says the basis was singular and had to be patched before the factorisation could be completed. Either is success, and we're done. */ switch (retval) { case 0: { try_again = FALSE ; retcode = dyrOK ; break ; } /* Alas, the failures. If the problem is a singular basis (retval = 1), fix up the basis structures as indicated in the luf_basis structure and try again to factor the basis, unless the user has forbidden it. If the problem is numerical instability (retval = 2) try to make the pivot selection more stringent, and keep trying until we can try no more, at which point we'll return numeric instability to the caller. What's left is fatal confusion; pass the buck back to the caller. */ case 1: { if (dy_opts->patch == FALSE) { errmsg(308,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,dy_prtdyret(dyrSINGULAR)) ; clrflg(*calcflgs,ladPRIMALS|ladDUALS) ; return (dyrSINGULAR) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.basis >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: attempting to patch singular basis.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } # endif adjust_basis(&patchcnt,&patches) ; patched = TRUE ; break ; } case 2: { retcode = dyrNUMERIC ; # ifndef DYLP_NDEBUG if (dy_opts->print.basis >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: factor failed at %s, numerical instability,", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_prtpivparms(-1)) ; dyio_outfmt(dy_logchn,dy_gtxecho," max = %g, gro = %g.", luf_basis->luf->big_v,luf_basis->luf->max_gro) ; } # endif if (dy_setpivparms(+1,0) == FALSE) { errmsg(307,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,dy_prtpivparms(-1)) ; return (retcode) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.basis >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\ttrying again with %s.", dy_prtpivparms(-1)) ; } # endif break ; } default: { errmsg(7,rtnnme,__LINE__,"inv_decomp return code",retval) ; return (dyrFATAL) ; } } } /* If we reach here, we managed to factor the basis. Reset the count of pivots since the last refactor. If the basis was patched, we have some serious cleanup to do, so call adjust_therest to deal with the details. Otherwise, turn to the requests to calculate values for the primal and/or dual variables. */ dy_lp->basis.etas = 0 ; if (patched == TRUE) { retcode = adjust_therest(patchcnt,patches) ; FREE(patches) ; if (retcode == dyrFATAL) { errmsg(306,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; return (dyrFATAL) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.basis >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t[%s]: compensated for basis correction.", dy_sys->nme) ; } # endif if (!(dy_lp->phase == dyINIT)) { setflg(*calcflgs,ladPRIMALS|ladDUALS) ; if (retcode == dyrLOSTDFEAS) setflg(*calcflgs,ladDUALFEAS) ; } retcode = dyrPATCHED ; } else { if (flgon(*calcflgs,ladPRIMALS)) { if (dy_calcprimals() == FALSE) { clrflg(*calcflgs,ladPRIMALS) ; return (dyrFATAL) ; } } if (flgon(*calcflgs,ladDUALS)) dy_calcduals() ; } return (retcode) ; } dyret_enum dy_pivot (int xipos, double abarij, double maxabarj) /* This routine handles a single pivot. It first checks that the pivot element satisfies a stability test, then calls inv_update to pivot the basis. We can still run into trouble, however, if the pivot results in a singular or near-singular basis. NOTE: There is an implicit argument here that's not immediately obvious. inv_update gets the entering column from a cached result set with the most recent call to inv_ftran(*,1) (dy_ftran(*,true), if you prefer). The underlying assumption is that this is readily available from when we ftran'd the entering column to find the leaving variable. Parameters: xipos: the basis position of the entering variable abarij: the pivot element (only the absolute value is used) maxabarj: for a primal pivot, max{i} |abar|, for a dual pivot, max{j} |abar| Returns: dyrOK: the pivot was accomplished without incident (inv_update) dyrMADPIV: the pivot element abar was rejected as numerically unstable (dy_chkpiv) dyrSINGULAR: the pivot attempt resulted in a structurally singular basis (i.e., some diagonal element is zero) (inv_update) dyrNUMERIC: the pivot attempt resulted in a numerically singular (unstable) basis (i.e, some diagonal element is too small compared to other elements in the associated row and column) (inv_update) dyrBSPACE: glpinv/glpluf ran out of space for the basis representation (inv_update) dyrFATAL: internal confusion */ { int retval ; double ratio ; dyret_enum retcode ; const char *rtnnme = "dy_pivot" ; /* Check that the pivot element meets the current criterion for numerical stability. Arguably this should have been checked by the caller, but that's no excuse for not doing it now. */ ratio = dy_chkpiv(abarij,maxabarj) ; if (ratio < 1.0) { # ifndef DYLP_NDEBUG if (dy_opts->print.basis >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n %s(%d) pivot aborted; est. pivot stability %g.", dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,rtnnme,ratio) ; } # endif return (dyrMADPIV) ; } /* Make the call to inv_update, then recode the result. */ retval = inv_update(luf_basis,xipos) ; # ifndef DYLP_NDEBUG if ((retval == 0 && dy_opts->print.basis >= 5) || (retval > 0 && dy_opts->print.basis >= 3)) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n %s(%d) estimated pivot stability %g; ", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters,ratio) ; dyio_outfmt(dy_logchn,dy_gtxecho,"measured pivot stability %g.", luf_basis->min_vrratio) ; } # endif switch (retval) { case 0: { retcode = dyrOK ; break ; } case 1: { retcode = dyrSINGULAR ; # ifndef DYLP_NDEBUG if (dy_opts->print.basis >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n %s(%d) singular basis (structural) after pivot.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } # endif break ; } case 2: { retcode = dyrNUMERIC ; # ifndef DYLP_NDEBUG if (dy_opts->print.basis >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n %s(%d) singular basis (numeric) after pivot.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } # endif break ; } case 3: case 4: { retcode = dyrBSPACE ; # ifndef DYLP_NDEBUG if (dy_opts->print.basis >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n %s(%d) out of space (%s)", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, (retval == 3)?"eta matrix limit":"sparse vector area") ; } # endif break ; } default: { errmsg(1,rtnnme,__LINE__) ; retcode = dyrFATAL ; break ; } } return (retcode) ; } DyLP-1.10.4/DyLP/src/Dylp/glpinv.c0000644000175200017520000006745111507440660015045 0ustar coincoin/* glpinv.c */ /*---------------------------------------------------------------------- -- Copyright (C) 2000, 2001, 2002, 2003 Andrew Makhorin, Department -- for Applied Informatics, Moscow Aviation Institute, Moscow, Russia. -- All rights reserved. E-mail: . -- -- This file is a part of GLPK (GNU Linear Programming Kit). -- -- Licensed under the Eclipse Public License (EPL) by permission of the -- author for inclusion in the DyLP LP distribution. ----------------------------------------------------------------------*/ #ifndef UNUSED # if defined(_GNU_SOURCE) || defined(__GNUC__) # define UNUSED __attribute__((unused)) # else # define UNUSED # endif #endif static char sccsid[] UNUSED = "@(#)glpinv.c 1.4 09/25/04" ; static char svnid[] UNUSED = "$Id: glpinv.c 407 2010-12-31 20:48:48Z lou $" ; #include #include #include "glpinv.h" #include "glplib.h" /*---------------------------------------------------------------------- -- inv_create - create factorization of the basis matrix. -- -- *Synopsis* -- -- #include "glpinv.h" -- INV *inv_create(int m, int max_upd); -- -- *Description* -- -- The routine inv_create creates factorization data structure for the -- the basis matrix of the order m. -- -- The parameter max_upd specifies maximal number of updates of the -- factorization. (This parameter defines maximal number of factors of -- the matrix H, since each update of the factorization for an adjacent -- basis matrix gives one factor of the matrix H.) The value 100 may be -- recommended in most cases. -- -- Being created the factorization initially corresponds to the unity -- basis matrix (F = H = V = P0 = P = Q = I, so B = I). -- -- *Returns* -- -- The routine returns a pointer to the created data structure. */ INV *inv_create(int m, int max_upd) { INV *inv; int k; if (m < 1) fault("inv_create: m = %d; invalid parameter", m); if (max_upd < 0) fault("inv_create: max_upd = %d; invalid parameter", max_upd); inv = umalloc(sizeof(INV)); inv->m = m; inv->valid = 1; inv->luf = luf_create(m, 0); inv->hh_max = max_upd; inv->hh_nfs = 0; inv->hh_ndx = ucalloc(1+max_upd, sizeof(int)); inv->hh_ptr = ucalloc(1+max_upd, sizeof(int)); inv->hh_len = ucalloc(1+max_upd, sizeof(int)); inv->p0_row = ucalloc(1+m, sizeof(int)); inv->p0_col = ucalloc(1+m, sizeof(int)); for (k = 1; k <= m; k++) inv->p0_row[k] = inv->p0_col[k] = k; inv->cc_len = -1; inv->cc_ndx = ucalloc(1+m, sizeof(int)); inv->cc_val = ucalloc(1+m, sizeof(double)); #if 0 inv->upd_tol = 1e-12; #else inv->upd_tol = 1e-6; #endif inv->nnz_h = 0; return inv; } /*---------------------------------------------------------------------- -- inv_decomp - compute factorization of the basis matrix. -- -- *Synopsis* -- -- #include "glpinv.h" -- int inv_decomp(INV *inv, -- void *info, int (*col)(void *info, int j, int rn[], double bj[])); -- -- *Description* -- -- The routine inv_decomp computes the factorization of the given basis -- matrix B (reinverts the basis matrix). -- -- The parameter inv specifies the factorization data structure built by -- the routine inv_create. -- -- The parameter info is a transit pointer passed to the formal routine -- col (see below). -- -- The formal routine col specifies the given basis matrix B. In order -- to obtain j-th column of the matrix B the routine inv_decomp calls -- the routine col with the parameter j (1 <= j <= m, where m is the -- order of B). In response the routine col should store row indices and -- numerical values of non-zero elements of the j-th column of B to the -- locations rn[1], ..., rn[len] and bj[1], ..., bj[len] respectively, -- where len is number of non-zeros in the j-th column, which should be -- returned on exit. Neiter zero nor duplicate elements are allowed. -- -- *Returns* -- -- The routine inv_decomp returns one of the following codes: -- -- 0 - no errors; -- 1 - the given basis matrix is singular (on some elimination step all -- elements of the active submatrix are zeros, due to that the pivot -- can't be chosen); -- 2 - the given basis matrix is ill-conditioned (on some elimination -- step too intensive growth of elements of the active submatrix has -- been detected). -- -- In case of non-zero return code the factorization becomes invalid. -- It should not be used in other operations until the cause of failure -- has been eliminated and the factorization has been recomputed again -- using the routine inv_decomp. For details of obtaining information -- needed for repairing the basis matrix see the routine luf_decomp (in -- the module GLPLUF). -- -- *Algorithm* -- -- The routine inv_decomp is an interface to the routine luf_decomp -- (see the module 'glpluf'), which actually computes LU-factorization -- of the basis matrix B in the form -- -- [B] = (F, V, P, Q), -- -- where F and V are such matrices that -- -- B = F * V, -- -- and P and Q are such permutation matrices that the matrix -- -- L = P * F * inv(P) -- -- is lower triangular with unity diagonal, and the matrix -- -- U = P * V * Q -- -- is upper triangular. -- -- In order to build the complete representation of the factorization -- (see the formula (1) in the file 'glpinv.h') the routine inv_decomp -- just additionally sets H = I and P0 = P. */ int inv_decomp(INV *inv, void *info, int (*col)(void *info, int j, int rn[], double bj[])) { int *pp_row = inv->luf->pp_row; int *pp_col = inv->luf->pp_col; int *p0_row = inv->p0_row; int *p0_col = inv->p0_col; int m = inv->m, ret; ret = luf_decomp(inv->luf, info, col, NULL); if (ret == 0) { /* the matrix B has been successfully factorized */ inv->valid = 1; /* set H = I */ inv->hh_nfs = 0; /* set P0 = P */ memcpy(&p0_row[1], &pp_row[1], sizeof(int) * m); memcpy(&p0_col[1], &pp_col[1], sizeof(int) * m); /* invalidate partially transformed column */ inv->cc_len = -1; /* currently the matrix H has no factors */ inv->nnz_h = 0; /* stability is inverse of growth; imperfect, but it'll do for a first cut */ inv->min_vrratio = inv->luf->max_gro*inv->luf->max_a/inv->luf->big_v ; } else { /* the factorization is not valid due to failure */ inv->valid = 0; } return ret; } /*---------------------------------------------------------------------- -- inv_h_solve - solve system H*x = b or H'*x = b. -- -- *Synopsis* -- -- #include "glpinv.h" -- void inv_h_solve(INV *inv, int tr, double x[]); -- -- *Description* -- -- The routine inv_h_solve solves either the system H*x = b (if the -- flag tr is zero) or the system H'*x = b (if the flag tr is non-zero), -- where the matrix H is a component of the factorization specified by -- the parameter inv, H' is a matrix transposed to H. -- -- On entry the array x should contain elements of the right-hand side -- vector b in locations x[1], ..., x[m], where m is the order of the -- matrix H. On exit this array will contain elements of the solution -- vector x in the same locations. */ void inv_h_solve(INV *inv, int tr, double x[]) { int nfs = inv->hh_nfs; int *hh_ndx = inv->hh_ndx; int *hh_ptr = inv->hh_ptr; int *hh_len = inv->hh_len; int *sv_ndx = inv->luf->sv_ndx; double *sv_val = inv->luf->sv_val; int i, k, beg, end, ptr; double temp; if (!inv->valid) fault("inv_h_solve: the factorization is not valid"); if (!tr) { /* solve the system H*x = b */ for (k = 1; k <= nfs; k++) { i = hh_ndx[k]; temp = x[i]; beg = hh_ptr[k]; end = beg + hh_len[k] - 1; for (ptr = beg; ptr <= end; ptr++) temp -= sv_val[ptr] * x[sv_ndx[ptr]]; x[i] = temp; } } else { /* solve the system H'*x = b */ for (k = nfs; k >= 1; k--) { i = hh_ndx[k]; temp = x[i]; if (temp == 0.0) continue; beg = hh_ptr[k]; end = beg + hh_len[k] - 1; for (ptr = beg; ptr <= end; ptr++) x[sv_ndx[ptr]] -= sv_val[ptr] * temp; } } return; } /*---------------------------------------------------------------------- -- inv_ftran - perform forward transformation (FTRAN). -- -- *Synopsis* -- -- #include "glpinv.h" -- void inv_ftran(INV *inv, double x[], int save); -- -- *Description* -- -- The routine inv_ftran performs forward transformation (FTRAN) of the -- given vector using the factorization of the basis matrix. -- -- In order to perform FTRAN the routine solves the system B*x' = x, -- where B is the basis matrix, x' is vector of unknowns (transformed -- vector that should be computed), x is vector of right-hand sides -- (input vector that should be transformed). -- -- On entry the array x should contain components of the vector x in -- locations x[1], x[2], ..., x[m], where m is the order of the basis -- matrix. On exit this array will contain components of the vector x' -- in the same locations. -- -- The parameter save is a flag. If this flag is set, it means that the -- input vector x is a column of the non-basic variable, which has been -- chosen to enter the basis. In this case the routine inv_ftran saves -- this column (after partial transformation) in order that the routine -- inv_update could update (recompute) the factorization for an adjacent -- basis using this partially transformed column. The simplex method -- routine should call the routine inv_ftran with the save flag set at -- least once before a subsequent call to the routine inv_update. */ void inv_ftran(INV *inv, double x[], int save) { int m = inv->m; int *pp_row = inv->luf->pp_row; int *pp_col = inv->luf->pp_col; double eps_tol = inv->luf->eps_tol; int *p0_row = inv->p0_row; int *p0_col = inv->p0_col; int *cc_ndx = inv->cc_ndx; double *cc_val = inv->cc_val; int i, len; double temp; if (!inv->valid) fault("inv_ftran: the factorization is not valid"); /* B = F*H*V, therefore inv(B) = inv(V)*inv(H)*inv(F) */ inv->luf->pp_row = p0_row; inv->luf->pp_col = p0_col; luf_f_solve(inv->luf, 0, x); inv->luf->pp_row = pp_row; inv->luf->pp_col = pp_col; inv_h_solve(inv, 0, x); /* save partially transformed column (if required) */ if (save) { len = 0; for (i = 1; i <= m; i++) { temp = x[i]; if (temp == 0.0 || fabs(temp) < eps_tol) continue; len++; cc_ndx[len] = i; cc_val[len] = temp; } inv->cc_len = len; } luf_v_solve(inv->luf, 0, x); return; } /*---------------------------------------------------------------------- -- inv_btran - perform backward transformation (BTRAN). -- -- *Synopsis* -- -- #include "glpinv.h" -- void inv_btran(INV *inv, double x[]); -- -- *Description* -- -- The routine inv_btran performs backward transformation (BTRAN) of the -- given vector using the factorization of the basis matrix. -- -- In order to perform BTRAN the routine solves the system B'*x' = x, -- where B' is a matrix transposed to the basis matrix B, x' is vector -- of unknowns (transformed vector that should be computed), x is vector -- of right-hand sides (input vector that should be transformed). -- -- On entry the array x should contain components of the vector x in -- locations x[1], x[2], ..., x[m], where m is the order of the basis -- matrix. On exit this array will contain components of the vector x' -- in the same locations. */ void inv_btran(INV *inv, double x[]) { int *pp_row = inv->luf->pp_row; int *pp_col = inv->luf->pp_col; int *p0_row = inv->p0_row; int *p0_col = inv->p0_col; /* B = F*H*V, therefore inv(B') = inv(F')*inv(H')*inv(V') */ if (!inv->valid) fault("inv_btran: the factorization is not valid"); luf_v_solve(inv->luf, 1, x); inv_h_solve(inv, 1, x); inv->luf->pp_row = p0_row; inv->luf->pp_col = p0_col; luf_f_solve(inv->luf, 1, x); inv->luf->pp_row = pp_row; inv->luf->pp_col = pp_col; return; } /*---------------------------------------------------------------------- -- inv_update - update factorization for adjacent basis matrix. -- -- *Synopsis* -- -- #include "glpinv.h" -- int inv_update(INV *inv, int j); -- -- *Description* -- -- The routine inv_update recomputes the factorization, which on entry -- corresponds to the current basis matrix B, in order that the updated -- factorization would correspond to the adjacent basis matrix B' that -- differs from B in the j-th column. -- -- The new j-th column of the basis matrix is passed implicitly to the -- routine inv_update. It is assumed that this column was saved before -- by the routine inv_ftran (see above). -- -- *Returns* -- -- The routine inv_update returns one of the following codes: -- -- 0 - no errors; -- 1 - the adjacent basis matrix is structurally singular, since after -- changing the j-th column of the matrix V by the new column (see -- the algorithm below) the case k1 > k2 occured; -- 2 - the factorization is inaccurate, since after transforming the -- k2-th row of the matrix U = P*V*Q, the diagonal element u[k2,k2] -- is zero or close to zero; -- 3 - maximal number of updates has been reached; -- 4 - overflow of the sparse vector area. -- -- In case of non-zero return code the factorization becomes invalid. -- It should not be used until it has been recomputed using the routine -- inv_decomp. -- -- *Algorithm* -- -- The routine inv_update is based on the transformation proposed by -- Forrest and Tomlin. -- -- Let the j-th column of the basis matrix B have been replaced by new -- column B[j]. In order to keep the equality B = F*H*V the j-th column -- of the matrix V should be replaced by the column inv(F*H)*B[j]. The -- latter is partially transformed column, which the routine inv_ftran -- saves on performing forward transformation of B[j]. -- -- From the point of view of the matrix U = P*V*Q, replacement of the -- j-th column of the matrix V involves replacement of the k1-th column -- of the matrix U, where k1 is determined by the permutation matrix Q. -- Thus, the matrix U loses its upper triangular form and becomes the -- following: -- -- 1 k1 k2 m -- 1 x x * x x x x x x x -- . x * x x x x x x x -- k1 . . * x x x x x x x -- . . * x x x x x x x -- . . * . x x x x x x -- . . * . . x x x x x -- . . * . . . x x x x -- k2 . . * . . . . x x x -- . . . . . . . . x x -- m . . . . . . . . . x -- -- where row index k2 corresponds to the lowest non-zero element of the -- k1-th column. -- -- Then the routine shifts rows and columns k1+1, k1+2, ..., k2 of the -- matrix U by one position to the left and upwards and moves k1-th row -- and k1-th column to the position k2. As the result of such symmetric -- permutations the matrix U becomes the following: -- -- 1 k1 k2 m -- 1 x x x x x x x * x x -- . x x x x x x * x x -- k1 . . x x x x x * x x -- . . . x x x x * x x -- . . . . x x x * x x -- . . . . . x x * x x -- . . . . . . x * x x -- k2 . . x x x x x * x x -- . . . . . . . . x x -- m . . . . . . . . . x -- -- Now the routine performs gaussian elimination in order to eliminate -- the elements u[k2,k1], u[k2,k1+1], ..., u[k2,k2-1] using the diagonal -- elements u[k1,k1], u[k1+1,k1+1], ..., u[k2-1,k2-1] as pivots in the -- same way as described in comments to the routine luf_decomp (see the -- module 'glpluf'). Note that actually all operations are performed on -- the matrix V, not on the matrix U. During the elimination process the -- routine permutes neither rows nor columns, therefore only the k2-th -- row of the matrix U is changed. -- -- In order to keep the equality B = F*H*V, each time when the routine -- applies elementary gaussian transformation to the transformed row of -- the matrix V (that corresponds to the k2-th row of the matrix U), it -- also adds a new element (gaussian multiplier) to the current row-like -- factor of the matrix H, which (factor) corresponds to the transformed -- row of the matrix V. */ int inv_update(INV *inv, int j) { int m = inv->m; LUF *luf = inv->luf; int *vr_ptr = luf->vr_ptr; int *vr_len = luf->vr_len; int *vr_cap = luf->vr_cap; double *vr_piv = luf->vr_piv; int *vc_ptr = luf->vc_ptr; int *vc_len = luf->vc_len; int *vc_cap = luf->vc_cap; int *pp_row = luf->pp_row; int *pp_col = luf->pp_col; int *qq_row = luf->qq_row; int *qq_col = luf->qq_col; int *sv_ndx = luf->sv_ndx; double *sv_val = luf->sv_val; double *work = luf->work; double eps_tol = luf->eps_tol; int *hh_ndx = inv->hh_ndx; int *hh_ptr = inv->hh_ptr; int *hh_len = inv->hh_len; int cc_len = inv->cc_len; int *cc_ndx = inv->cc_ndx; double *cc_val = inv->cc_val; double upd_tol = inv->upd_tol; int ret = 0; int i, i_beg, i_end, i_ptr, j_beg, j_end, j_ptr, k, k1, k2, p, q, p_beg, p_end, p_ptr, ptr; double f, temp; if (!inv->valid) fault("inv_update: the factorization is not valid"); if (inv->cc_len < 0) fault("inv_update: new column has not been prepared"); if (!(1 <= j && j <= m)) fault("inv_update: j = %d; invalid column number", j); /* check if a new factor of the matrix H can be created */ if (inv->hh_nfs == inv->hh_max) { /* maximal number of updates has been reached */ inv->valid = luf->valid = 0; ret = 3; goto done; } /* remove elements of the j-th column from the matrix V */ j_beg = vc_ptr[j]; j_end = j_beg + vc_len[j] - 1; for (j_ptr = j_beg; j_ptr <= j_end; j_ptr++) { /* get row index of v[i,j] */ i = sv_ndx[j_ptr]; /* find v[i,j] in the i-th row */ i_beg = vr_ptr[i]; i_end = i_beg + vr_len[i] - 1; for (i_ptr = i_beg; sv_ndx[i_ptr] != j; i_ptr++) /* nop */; insist(i_ptr <= i_end); /* remove v[i,j] from the i-th row */ sv_ndx[i_ptr] = sv_ndx[i_end]; sv_val[i_ptr] = sv_val[i_end]; vr_len[i]--; } /* now the j-th column of the matrix V is empty */ luf->nnz_v -= vc_len[j]; vc_len[j] = 0; /* add elements of the new j-th column to the matrix V; determine indices k1 and k2 */ k1 = qq_row[j]; k2 = 0; for (ptr = 1; ptr <= cc_len; ptr++) { /* get row index of v[i,j] */ i = cc_ndx[ptr]; /* at least one unused location is needed in the i-th row */ if (vr_len[i] + 1 > vr_cap[i]) { if (luf_enlarge_row(luf, i, vr_len[i] + 10)) { /* overflow of the sparse vector area */ inv->valid = luf->valid = 0; luf->new_sva = luf->sv_size + luf->sv_size; ret = 4; goto done; } } /* add v[i,j] to the i-th row */ i_ptr = vr_ptr[i] + vr_len[i]; sv_ndx[i_ptr] = j; sv_val[i_ptr] = cc_val[ptr]; vr_len[i]++; /* adjust the index k2 */ if (k2 < pp_col[i]) k2 = pp_col[i]; } /* capacity of the j-th column (which is currently empty) should be not less than cc_len locations */ if (vc_cap[j] < cc_len) { if (luf_enlarge_col(luf, j, cc_len)) { /* overflow of the sparse vector area */ inv->valid = luf->valid = 0; luf->new_sva = luf->sv_size + luf->sv_size; ret = 4; goto done; } } /* add elements of the new j-th column to the column list */ j_ptr = vc_ptr[j]; memmove(&sv_ndx[j_ptr], &cc_ndx[1], cc_len * sizeof(int)); memmove(&sv_val[j_ptr], &cc_val[1], cc_len * sizeof(double)); vc_len[j] = cc_len; luf->nnz_v += cc_len; /* k1 > k2 means that the diagonal element u[k2,k2] is zero and therefore the adjacent basis matrix is structurally singular */ if (k1 > k2) { inv->valid = luf->valid = 0; ret = 1; goto done; } /* perform implicit symmetric permutations of rows and columns of the matrix U */ i = pp_row[k1], j = qq_col[k1]; for (k = k1; k < k2; k++) { pp_row[k] = pp_row[k+1], pp_col[pp_row[k]] = k; qq_col[k] = qq_col[k+1], qq_row[qq_col[k]] = k; } pp_row[k2] = i, pp_col[i] = k2; qq_col[k2] = j, qq_row[j] = k2; /* note that now the i-th row of the matrix V is the k2-th row of the matrix U; since no pivoting is used, only this row will be transformed */ /* copy elements of the i-th row of the matrix V to the working array and remove these elements from the matrix V */ for (j = 1; j <= m; j++) work[j] = 0.0; i_beg = vr_ptr[i]; i_end = i_beg + vr_len[i] - 1; for (i_ptr = i_beg; i_ptr <= i_end; i_ptr++) { /* get column index of v[i,j] */ j = sv_ndx[i_ptr]; /* store v[i,j] to the working array */ work[j] = sv_val[i_ptr]; /* find v[i,j] in the j-th column */ j_beg = vc_ptr[j]; j_end = j_beg + vc_len[j] - 1; for (j_ptr = j_beg; sv_ndx[j_ptr] != i; j_ptr++) /* nop */; insist(j_ptr <= j_end); /* remove v[i,j] from the j-th column */ sv_ndx[j_ptr] = sv_ndx[j_end]; sv_val[j_ptr] = sv_val[j_end]; vc_len[j]--; } /* now the i-th row of the matrix V is empty */ luf->nnz_v -= vr_len[i]; vr_len[i] = 0; /* create the next row-like factor of the matrix H; this factor corresponds to the i-th (transformed) row */ inv->hh_nfs++; hh_ndx[inv->hh_nfs] = i; /* hh_ptr[] will be set later */ hh_len[inv->hh_nfs] = 0; /* up to (k2 - k1) free locations are needed to add new elements to the non-trivial row of the row-like factor */ if (luf->sv_end - luf->sv_beg < k2 - k1) { luf_defrag_sva(luf); if (luf->sv_end - luf->sv_beg < k2 - k1) { /* overflow of the sparse vector area */ inv->valid = luf->valid = 0; luf->new_sva = luf->sv_size + luf->sv_size; ret = 4; goto done; } } /* eliminate subdiagonal elements of the matrix U */ for (k = k1; k < k2; k++) { /* v[p,q] = u[k,k] */ p = pp_row[k], q = qq_col[k]; /* this is the cruical point, where even tiny non-zeros should not be dropped */ if (work[q] == 0.0) continue; /* compute gaussian multiplier f = v[i,q] / v[p,q] */ f = work[q] / vr_piv[p]; /* perform gaussian transformation: (i-th row) := (i-th row) - f * (p-th row) in order to eliminate v[i,q] = u[k2,k] */ p_beg = vr_ptr[p]; p_end = p_beg + vr_len[p] - 1; for (p_ptr = p_beg; p_ptr <= p_end; p_ptr++) work[sv_ndx[p_ptr]] -= f * sv_val[p_ptr]; /* store new element (gaussian multiplier that corresponds to the p-th row) in the current row-like factor */ luf->sv_end--; sv_ndx[luf->sv_end] = p; sv_val[luf->sv_end] = f; hh_len[inv->hh_nfs]++; } /* set pointer to the current row-like factor of the matrix H (if no elements were added to this factor, it is unity matrix and therefore can be discarded) */ if (hh_len[inv->hh_nfs] == 0) inv->hh_nfs--; else { hh_ptr[inv->hh_nfs] = luf->sv_end; inv->nnz_h += hh_len[inv->hh_nfs]; } /* store new pivot that corresponds to u[k2,k2] */ vr_piv[i] = work[qq_col[k2]]; #if 0 /* this naive check has been replaced by more appropriate check (see below) */ /* check if u[k2,k2] is close to zero */ if (fabs(vr_piv[i]) < upd_tol) { /* the factorization should be considered as inaccurate (this mainly happens due to excessive round-off errors) */ inv->valid = luf->valid = 0; ret = 2; goto done; } #endif /* new elements of the i-th row of the matrix V (which correspond to non-diagonal elements u[k2,k2+1], ..., u[k2,m] of the matrix U = P*V*Q) are contained in the working array; add them to the matrix V */ cc_len = 0; for (k = k2+1; k <= m; k++) { /* get column index and value of v[i,j] = u[k2,k] */ j = qq_col[k]; temp = work[j]; /* if v[i,j] is close to zero, skip it */ if (fabs(temp) < eps_tol) continue; /* at least one unused location is needed in the j-th column */ if (vc_len[j] + 1 > vc_cap[j]) { if (luf_enlarge_col(luf, j, vc_len[j] + 10)) { /* overflow of the sparse vector area */ inv->valid = luf->valid = 0; luf->new_sva = luf->sv_size + luf->sv_size; ret = 4; goto done; } } /* add v[i,j] to the j-th column */ j_ptr = vc_ptr[j] + vc_len[j]; sv_ndx[j_ptr] = i; sv_val[j_ptr] = temp; vc_len[j]++; /* also store v[i,j] to the auxiliary array */ cc_len++; cc_ndx[cc_len] = j; cc_val[cc_len] = temp; } /* capacity of the i-th row (which is currently empty) should be not less than cc_len locations */ if (vr_cap[i] < cc_len) { if (luf_enlarge_row(luf, i, cc_len)) { /* overflow of the sparse vector area */ inv->valid = luf->valid = 0; luf->new_sva = luf->sv_size + luf->sv_size; ret = 4; goto done; } } /* add new elements of the i-th row to the row list */ i_ptr = vr_ptr[i]; memmove(&sv_ndx[i_ptr], &cc_ndx[1], cc_len * sizeof(int)); memmove(&sv_val[i_ptr], &cc_val[1], cc_len * sizeof(double)); vr_len[i] = cc_len; luf->nnz_v += cc_len; #if 1 /* updating is finished; check that diagonal element u[k2,k2] is not very small in absolute value among other elements in k2-th row and k2-th column of the matrix U = P*V*Q */ /* temp = max(|u[k2,*]|, |u[*,k2]|) */ temp = 0.0; /* walk through k2-th row of U which is i-th row of V */ i = pp_row[k2]; i_beg = vr_ptr[i]; i_end = i_beg + vr_len[i] - 1; for (i_ptr = i_beg; i_ptr <= i_end; i_ptr++) if (temp < fabs(sv_val[i_ptr])) temp = fabs(sv_val[i_ptr]); /* walk through k2-th column of U which is j-th column of V */ j = qq_col[k2]; j_beg = vc_ptr[j]; j_end = j_beg + vc_len[j] - 1; for (j_ptr = j_beg; j_ptr <= j_end; j_ptr++) if (temp < fabs(sv_val[j_ptr])) temp = fabs(sv_val[j_ptr]); /* check that u[k2,k2] is not very small */ inv->min_vrratio = fabs(vr_piv[i])/(upd_tol*temp) ; if (fabs(vr_piv[i]) < upd_tol * temp) { /* the factorization seems to be inaccurate and therefore must be recomputed */ inv->valid = luf->valid = 0; ret = 2; goto done; } #endif /* the factorization has been successfully updated */ inv->cc_len = -1; done: /* return to the simplex method routine */ return ret; } /*---------------------------------------------------------------------- -- inv_delete - delete factorization of the basis matrix. -- -- *Synopsis* -- -- #include "glpinv.h" -- void inv_delete(INV *inv); -- -- *Description* -- -- The routine inv_delete deletes factorization data structure, which -- the parameter inv points to, freeing all the memory allocated to this -- object. */ void inv_delete(INV *inv) { luf_delete(inv->luf); ufree(inv->hh_ndx); ufree(inv->hh_ptr); ufree(inv->hh_len); ufree(inv->p0_row); ufree(inv->p0_col); ufree(inv->cc_ndx); ufree(inv->cc_val); ufree(inv); return; } /* eof */ DyLP-1.10.4/DyLP/src/Dylp/dy_conmgmt.c0000644000175200017520000016503712253224475015710 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ #define DYLP_INTERNAL #include "dylp.h" #include static char sccsid[] UNUSED = "@(#)dy_conmgmt.c 4.6 10/15/05" ; static char svnid[] UNUSED = "$Id: dy_conmgmt.c 524 2013-12-15 03:59:57Z tkr $" ; /* This file contains routines for primal constraint management. It provides routines to handle the the activation and deactivation of a primal constraint with a basic logical variable, and deactivation of a primal constraint with a nonbasic logical variable. There are also routines to scan for candidates for activation and deactivation. The normal top-level routines for bulk activation and deactivation are dy_activateCons and dy_deactivateCons, respectively. In terms of the dual problem, we're activating or deactivating a dual architectural variable. In the normal course of events, dylp will deactivate loose primal constraints (basic feasible logicals; nonbasic dual architecturals with unfavourable reduced costs) and activate violated constraints (basic infeasble logicals; nonbasic dual architecturals with favourable reduced costs). (Recall the the reduced cost of a dual is the value of the primal variable in that basis position.) When attempting to recover from pivoting problems in the dual simplex, dylp will deactivate dual architecturals on the pivot reject list (corresponding to violated constraints; these will have favourable dual reduced cost) in an attempt to achieve primal feasibility and allow a transition to primal phase II. Activating or deactivating a constraint with a nonbasic logical is problematic. Viewed from a primal perspective, activation requires we find a variable to occupy the basis position, and deactivation requires we deal with the variable that's basic for the constraint. When attempting to regain dual feasibility, dylp may request deactivation of a constraint with a nonbasic logical because the logical is dual infeasible. This case is handled by forcing the current occupant of the basis position into the nonbasic partition and replacing it with the logical for the constraint. From there, it's a matter of deactivating a constraint with a basic logical. Activation of a constraint using a nonbasic logical isn't an issue in dylp. Should the need ever arise, the appropriate strategy would be to convert some nonbasic variable to basic at bound and add the logical as nonbasic at bound or superbasic. The bottom routine for constraint activation is dy_loadcon, which handles the business of translating a constraint from the original system frame of reference and installing it in the active system. This is used bare during initialisation. Immediately above is dy_actBLogPrimCon, which deals with basis and status issues once dylp has finished initialisation and into simplex. For deactivation, the bottom routine is deactBLogPrimCon. */ /* A few words about the algebra of constraint addition and deletion, as it relates to the PSE and DSE variables. First, suppose that no new variables are activated with a constraint, with the exception of the associated logical. It becomes basic with a coefficient of 1 (by definition; remember the constraints have been rewritten to convert >= constraints to <= constraints). It is, however, unfortunately true that added constraints may have non-zero coefficients for any of the existing basic variables. Suppose we're adding constraint k. The new basis has the form B' = [[B 0][a 1]], and the inverse will be inv(B') = [[inv(B) 0][-ainv(B) 1]]. The cost vector c = (c 0). For reduced costs, we have no changes, given that the objective coefficient for the slack variable is 0. We do, however, recalculate the duals anyway, for accuracy (we will be refactoring to get the new basis inverse). For PSE, the gamma = ||abar~||^2 will not change --- the projected edge abar~ is unchanged because the new slack is basic, hence not part of the reference frame. When we delete a constraint with a basic logical, PSE norms must be updated if the slack was nonbasic (hence added to the reference frame) at some point in the past. Suppose the slack is basic in position k. Removing it will change values of gamma for all columns where abar~ has a nonzero. The efficient way out is to reset the reference frame. (It's an open question whether adjusting the norms would give better performance.) For DSE, the situation is interesting. You'd think that changing the basis by adding/deleting both rows (the constraints) and columns (the logicals) would change everything. But as the algebra above shows, the special form of the partitions means that the existing beta do not change. Deactivation requires no changes at all. Activation requires that we calculate the norms for the new rows. In practice, when dylp adds constraints, it collects a list of inactive variables referenced by the constraints and then considers activating them, based on the target simplex phase (for primal, we want favourable (nonoptimal) reduced cost; for dual, unfavourable (optimal)). But this is handled by variable activation routines, which deal with the side effects. */ /* Reverse integer comparison so we can sort arrays of indices in nonincreasing order. Returns: < 0 if i > j 0 if i = j > 0 if i < j */ static int intcompare (const void *p_i, const void *p_j) { int i = *((const int *) p_i) ; int j = *((const int *) p_j) ; return ((j)-(i)) ; } bool dy_loadcon (consys_struct *orig_sys, int i, bool genvars, int *inactndxs) /* This routine loads a constraint i from the original system (orig_sys) into the active system (dy_sys). It expects dy_origvars to be valid. If genvars == TRUE, new columns are generated as needed for eligible inactive variables x. A variable is eligible if a != 0 and the variable is not fixed. If genvars is FALSE, only the coefficients a corresponding to already active variables will be installed when a is loaded. If a vector is provided in inactndxs, it is used to return the indices of eligible variables x which would have been activated if genvars were TRUE. WARNING: Use genvars == TRUE only for loading the initial constraint system. The simple procedure used here assumes that an empty column is generated when a variable x is first encountered. It WILL FAIL if there are non-zero coefficients for x in constraints that are already active. When dylp is given an active variable specification, it will establish the active variable set before loading constraints, and genvars will be FALSE. If there's no active variable specification, the constraints determine the active variables, and genvars will be TRUE. Once dylp is past loading the initial constraint system, there is much more work to do to activate a variable. Use inactndxs to return the candidates and call an appropriate variable activation routine (viz. dy_varmgmt.c). The generation of the logical variable associated with the constraint will be handled automatically. The routine will correct dy_origvars and dy_actvars when an architectural variable is shifted to make room for this constraint's logical variable. Other than dy_origvars and dy_actvars, no other data structures are updated. The assumption is that this routine is used during initialization of dy_sys, before other lp data structures are established. Parameters: orig_sys: The original constraint system. i: Index of the constraint to be activated. genvars: TRUE if inactive variables used in this constraint should be activated; FALSE otherwise inactndxs: (i) Vector to hold inactive variable indices, or NULL (o) If genvars == FALSE, and inactndxs != NULL, the indices of inactive variables with nonzero coefficients in a will be loaded into inactndxs. inactndxs[0] is set to the number of valid indices stored in inactndxs[1 .. inactndxs[0]]. The vector is assumed to be of adequate size. Returns: TRUE if the constraint is successfully installed, FALSE otherwise. */ { int ndx,act_ndx,j,act_j,act_i ; int inact_ndx ; double rhsadj,rhscorr,act_rhs,act_rhslow ; flags statj ; pkvec_struct *ai,*aj ; pkcoeff_struct *aij ; bool retval ; const char *rtnnme = "dy_loadcon" ; # ifndef DYLP_NDEBUG int print ; switch (dy_lp->phase) { case dyINIT: { print = dy_opts->print.setup ; break ; } case dyFORCEFULL: case dyADDCON: { print = dy_opts->print.conmgmt+1 ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } # endif # ifdef DYLP_PARANOIA if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (FALSE) ; } if (genvars == TRUE && dy_lp->phase != dyINIT) { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } if (i <= 0 || i > orig_sys->concnt) { errmsg(102,rtnnme,orig_sys->nme,"constraint",i,1,orig_sys->concnt) ; return (FALSE) ; } ndx = (orig_sys->concnt-dy_lp->sys.cons.unloadable) - (dy_lp->sys.cons.loadable+dy_sys->concnt) ; if (ndx != 0) { errmsg(444,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "constraint",orig_sys->concnt,dy_lp->sys.cons.unloadable, dy_lp->sys.cons.loadable,dy_sys->concnt,ndx) ; return (FALSE) ; } if (ACTIVE_CON(i)) { char onmbuf[128] ; act_j = dy_origcons[i] ; (void) consys_nme(orig_sys,'c',i,TRUE,onmbuf) ; errmsg(431,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "constraint",onmbuf,i, consys_nme(dy_sys,'c',act_j,TRUE,NULL),act_j) ; return (FALSE) ; } if (!LOADABLE_CON(i)) { errmsg(445,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "constraint",consys_nme(orig_sys,'c',i,TRUE,NULL),i) ; return (FALSE) ; } # endif /* Prep work. Make a 0-length vector that we'll use to retrieve and create column headers. Make sure the row vector pointer is null so that getrow_pk will allocate one for us, and retrieve the constraint. */ if (genvars == TRUE) { aj = pkvec_new(0) ; } else { aj = NULL ; } ai = NULL ; if (consys_getrow_pk(orig_sys,i,&ai) == FALSE) { errmsg(122,rtnnme,orig_sys->nme, "row",consys_nme(orig_sys,'c',i,TRUE,NULL),i) ; if (aj != NULL) pkvec_free(aj) ; if (ai != NULL) pkvec_free(ai) ; return (FALSE) ; } retval = TRUE ; /* Walk the constraint and convert the column indices from the original system frame of reference to the dylp system frame of reference. If we're allowed to activate, create empty columns as necessary for each eligible variable. If we're not allowed to activate, inactive variables are removed from a by compressing the coefficient vector in place. rhsadj keeps track of the effect on the rhs of the constraint. */ rhsadj = 0 ; inact_ndx = 0 ; act_ndx = 0 ; for (ndx = 0 ; ndx < ai->cnt ; ndx++) { aij = &ai->coeffs[ndx] ; j = aij->ndx ; # ifdef DYLP_PARANOIA if (j <= 0 || j > orig_sys->varcnt) { errmsg(102,rtnnme,orig_sys->nme,"variable",j,1,orig_sys->varcnt) ; retval = FALSE ; break ; } if (dy_origvars[j] == 0) { errmsg(1,rtnnme,__LINE__) ; retval = FALSE ; break ; } # endif /* If x is inactive, we need to activate it or step over it. As explained in the opening comments, for activation we simply create an empty column. Fixed variables are never activated. All variables are continuous, as far as dylp is concerned. In spite of what error message 433 says, we need to allow for inactive SB variables here. The source is a warm start. During initialisation, all variables start out as inactive, hence nonbasic. The variables that the warm start thinks should be basic are assigned SB status. */ if (INACTIVE_VAR(j)) { statj = (flags) (-dy_origvars[j]) ; # ifdef DYLP_PARANOIA if (dy_lp->phase == dyINIT) { retval = flgon(statj,vstatNONBASIC|vstatEXOTIC) ; } else { retval = flgon(statj,vstatNONBASIC|vstatNBFR) ; } if (retval == FALSE) { errmsg(433,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "inactive",consys_nme(orig_sys,'v',j,TRUE,NULL), j,dy_prtvstat(statj)) ; break ; } # endif if (genvars == TRUE && LOADABLE_VAR(j)) { retval = consys_getcol_pk(orig_sys,j,&aj) ; if (retval == FALSE) { errmsg(122,rtnnme,orig_sys->nme,"variable", consys_nme(orig_sys,'v',j,TRUE,NULL),j) ; break ; } retval = consys_addcol_pk(dy_sys,vartypCON,aj,orig_sys->obj[j], orig_sys->vlb[j],orig_sys->vub[j]) ; if ( retval == FALSE) { errmsg(156,rtnnme,"variable",dy_sys->nme,aj->nme) ; break ; } act_j = aj->ndx ; # ifndef DYLP_NDEBUG if (print >= 6) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t activating %s variable %s (%d) to index %d, status %s.", consys_prtvartyp(orig_sys->vtyp[j]), consys_nme(orig_sys,'v',j,FALSE,NULL),j,act_j, (statj == 0)?"unspecified":dy_prtvstat(statj)) ; } # endif dy_origvars[j] = act_j ; dy_actvars[act_j] = j ; dy_lp->sys.vars.loadable-- ; } /* If activation is disallowed, note the contribution to the right-hand-side. If the variable is loadable, record the index in inactndxs. Then move on to the next variable. */ else { if (inactndxs != NULL && LOADABLE_VAR(j)) inactndxs[++inact_ndx] = j ; switch (getflg(statj,vstatSTATUS)) { case vstatNBLB: { rhscorr = aij->val*orig_sys->vlb[j] ; break ; } case vstatNBUB: case vstatNBFX: { rhscorr = aij->val*orig_sys->vub[j] ; break ; } default: { rhscorr = 0 ; break ; } } rhsadj -= rhscorr ; # ifndef DYLP_NDEBUG if (print >= 6) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t skipping inactive %s variable %s (%d), status %s.", consys_prtvartyp(orig_sys->vtyp[j]), consys_nme(orig_sys,'v',j,FALSE,NULL),j,dy_prtvstat(statj)) ; dyio_outfmt(dy_logchn,dy_gtxecho,", rhs += %g.",-rhscorr) ; } # endif continue ; } } /* We're going to use this variable, so convert the index from the original system frame to the active system frame. We need to copy the value, too, just in case we're compressing. */ # ifndef DYLP_NDEBUG if (print >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t copying %s variable %s (%d) to index %d.", consys_prtvartyp(orig_sys->vtyp[j]), consys_nme(orig_sys,'v',j,FALSE,NULL),j,dy_origvars[j]) ; } # endif ai->coeffs[act_ndx].ndx = dy_origvars[j] ; ai->coeffs[act_ndx].val = aij->val ; act_ndx++ ; } if (aj != NULL) pkvec_free(aj) ; if (inactndxs != NULL) inactndxs[0] = inact_ndx ; if (retval == FALSE) { if (ai != NULL) pkvec_free(ai) ; return (FALSE) ; } ai->cnt = act_ndx ; /* The constraint has been converted -- column indices are in the dy_sys frame of reference and inactive columns are removed. Add the row to dy_sys. Everything is an architectural constraint as far as dy_sys is concerned. Note that we should never look at slots in dy_actvars corresponding to logicals --- they don't exist in orig_sys. -INT_MAX should guarantee errors if we ever use the value. */ act_rhs = orig_sys->rhs[i]+rhsadj ; if (orig_sys->ctyp[i] == contypRNG) { act_rhslow = orig_sys->rhslow[i]+rhsadj ; } else { act_rhslow = 0 ; } retval = consys_addrow_pk(dy_sys,'a',orig_sys->ctyp[i], ai,act_rhs,act_rhslow,NULL,NULL) ; if (retval == FALSE) { errmsg(156,rtnnme,"constraint",dy_sys->nme,ai->nme) ; if (ai != NULL) pkvec_free(ai) ; return (FALSE) ; } act_i = ai->ndx ; pkvec_free(ai) ; dy_origcons[i] = act_i ; dy_actcons[act_i] = i ; dy_actvars[act_i] = -INT_MAX ; /* Are there architectural variables? The addition of the logical will cause the architectural variable that used to occupy position act_i to be moved to dy_sys->varcnt, and we need to adjust dy_origvars accordingly. (dy_actvars is attached to dy_sys and has been updated automatically.) */ if (dy_sys->archvcnt > 0) { act_j = dy_sys->varcnt ; j = dy_actvars[act_j] ; # ifdef DYLP_PARANOIA if (dy_origvars[j] != act_i) { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } # endif dy_origvars[j] = act_j ; # ifndef DYLP_NDEBUG if (print >= 6) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t variable %s (%d) shifted from index %d", consys_nme(dy_sys,'v',act_j,FALSE,NULL),act_j,act_i) ; } # endif } # ifndef DYLP_NDEBUG if (print >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n %s %s (%d) copied to index %d", consys_prtcontyp(dy_sys->ctyp[act_i]), consys_nme(dy_sys,'c',act_i,FALSE,NULL),i,act_i) ; } # endif /* Bookkeeping. */ dy_lp->sys.cons.loadable-- ; # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->cons.actcnt[i]++ ; # endif return (TRUE) ; } bool dy_actBLogPrimCon (consys_struct *orig_sys, int origi, int *inactvars) /* Assume dy_sys has m constraints and n variables (logical plus architectural). This routine activates a primal constraint a to index i, where i = m+1. The basis is augmented with a basic logical x. To make room for the logical x, the first architectural x is moved to index j = n+1. The constraint could be loose, tight, or violated, depending on the value of x. What's important here is that we can easily generate a new basis by augmenting the existing basis with x. Once dy_loadcon adds the constraint to dy_sys, we'll need to examine and correct the arrays dy_basis and dy_var2basis. Parameters: orig_sys: The original constraint system. origi: The constraint to be activated. inactvars: (i) An array to hold indices of inactive variables referenced by the constraint, or NULL if not desired (o) Indices of inactive referenced variables, if requested. Returns: TRUE if activation succeeds, FALSE if there's an error. */ { int i,j ; double lhsi,rhsi,rhslowi ; contyp_enum ctypi ; const char *rtnnme = "dy_actBLogPrimCon" ; # ifdef DYLP_PARANOIA /* A little paranoia. Check that origi is valid. */ if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (FALSE) ; } if (origi <= 0 || origi > orig_sys->concnt) { errmsg(102,rtnnme,"original constraint",origi,1,orig_sys->concnt) ; return (FALSE) ; } # endif ctypi = orig_sys->ctyp[origi] ; # ifndef DYLP_NDEBUG /* A little information, if the user wants it. */ if (dy_opts->print.conmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n activating ") ; if (ctypi == contypRNG) { dyio_outfmt(dy_logchn,dy_gtxecho,"%g <= ",orig_sys->rhslow[origi]) ; } dyio_outfmt(dy_logchn,dy_gtxecho,"%s (%d) %s %g", consys_nme(orig_sys,'c',origi,FALSE,NULL),origi, consys_prtcontyp(ctypi),orig_sys->rhs[origi]) ; } # endif /* Load the constraint into dy_sys. No new architectural variables. */ if (dy_loadcon(orig_sys,origi,FALSE,inactvars) == FALSE) { errmsg(430,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "activate","original constraint", consys_nme(orig_sys,'c',origi,TRUE,NULL),origi) ; return (FALSE) ; } /* Correct the basis. The new constraint has index i = m+1 and the logical x becomes the basic variable. Since it's basic, it's not part of the PSE reference frame, and its reduced cost is zero. If there are architectural variables, the old x has become x. If it's basic, we need to correct dy_basis. */ i = dy_sys->concnt ; j = dy_sys->varcnt ; dy_basis[i] = i ; dy_var2basis[i] = i ; dy_frame[i] = FALSE ; dy_cbar[i] = 0.0 ; if (j > dy_sys->concnt) { if (dy_var2basis[j] != 0) dy_basis[dy_var2basis[j]] = j ; } /* Finally, we need to set the status of the logical. Evaluate the constraint and set it accordingly. Since x is part of the constraint, set it to 0 before the evaluation. Note that we need the loaded rhs values here to capture the correction for nonzero inactive values. */ rhsi = dy_sys->rhs[i] ; dy_x[i] = 0 ; lhsi = consys_dotrow(dy_sys,i,dy_x) ; setcleanzero(lhsi,dy_tols->zero) ; if (abovebnd(lhsi,rhsi)) { dy_status[i] = vstatBLLB ; } else if (atbnd(lhsi,rhsi)) { if (ctypi == contypEQ) { dy_status[i] = vstatBFX ; } else { dy_status[i] = vstatBLB ; } } else if (ctypi != contypRNG) { dy_status[i] = vstatB ; } else { rhslowi = dy_sys->rhslow[i] ; if (belowbnd(lhsi,rhslowi)) { dy_status[i] = vstatBUUB ; } else if (atbnd(lhsi,rhslowi)) { dy_status[i] = vstatBUB ; } else { dy_status[i] = vstatB ; } } /* And finally, a little paranoia. Generally, we should only be activating violated or tight constraints, so the logical should be at or outside its bounds. There are two exceptions: If we're trying to bound an unbounded primal, or we're forcing a full system. */ # ifdef DYLP_PARANOIA if (flgon(dy_status[i],vstatB) || (dy_opts->con.actlvl = 0 && flgon(dy_status[i],vstatBLLB|vstatBUUB))) { if (dy_lp->phase == dyFORCEFULL || (dy_lp->phase == dyADDCON && (dy_lp->lpret == lpSWING || dy_lp->lpret == lpUNBOUNDED))) { /* ok */ } else { dywarn(442,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'c',i,FALSE,NULL),i,dy_prtvstat(dy_status[i]), (dy_opts->con.actlvl == 0)?"violated":"tight or violated") ; } } # endif return (TRUE) ; } bool dy_actBLogPrimConList (consys_struct *orig_sys, int cnt, int *ocndxs, int **p_inactvars) /* This routine is a shell to call actBLogPrimCon for each of the indices in the vector ocndxs. It performs minimal error checking, relying on checking in actBLogPrimCon. If p_inactvars is non-NULL, the routine accumulates a list of indices of inactive variables referenced by the activated constraints. There is no attempt to remove duplicates, hence there's no good limit on the size of this vector. It may be realloc'd over the course of activation. We can bound the number of indices collected for a given constraint, however. Parameters: orig_sys: The original constraint system cnt: The number of indices in ocndxs ocndxs: Vector of constraint indices (0-based) p_inactvars: (i) If p_inactvars == NULL, collection of indices of referenced variables is suppressed. If *p_inactvars == NULL, a vector will be allocated. If *p_inactvars != NULL, (*p_inactvars)[0] must contain the allocated size. (o) If collection of indices is taking place, the vector of indices is returned, with (*p_inactvars)[0] set to the number of indices collected. If no referenced variables were encountered, *p_inactvars will remain NULL if no vector was supplied. Returns: TRUE if all constraints are successfully activated, FALSE otherwise. */ { int j,k,ndx,act_n,inact_n ; int *onecon,onecon_cnt,*collection,coll_cnt,coll_sze ; bool *seen ; bool with_vars,retval ; const char *rtnnme = "dy_actBLogPrimConList" ; # ifdef DYLP_PARANOIA if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (FALSE) ; } if (ocndxs == NULL) { errmsg(2,rtnnme,"ocndxs") ; return (FALSE) ; } if (cnt <= 0 || cnt > orig_sys->concnt) { errmsg(5,rtnnme,"cnt",cnt) ; return (FALSE) ; } # endif retval = TRUE ; /* Are we collecting indices of referenced variables? If so, set up to do it. We can guarantee that any one constraint will reference no more than (inact_n - act_n) variables. To avoid duplicates, we need to keep track of the indices already collected. Then we can guarantee that the collection itself will be no more than (inact_n - act_n) variables. */ if (p_inactvars != NULL) { with_vars = TRUE ; act_n = dy_sys->archvcnt ; inact_n = orig_sys->archvcnt ; coll_sze = inact_n-act_n+1 ; seen = (bool *) CALLOC((inact_n+1),sizeof(bool)) ; if (*p_inactvars == NULL) { collection = (int *) MALLOC(coll_sze*sizeof(int)) ; } else { collection = *p_inactvars ; coll_sze = collection[0] ; } collection[0] = 0 ; coll_cnt = 0 ; onecon = (int *) MALLOC(coll_sze*sizeof(int)) ; } else { with_vars = FALSE ; onecon = NULL ; collection = NULL ; coll_cnt = -1 ; seen = NULL ; } /* Open a loop to request activation of each constraint in ocndxs. On return, concatenate the indices from onecon to collection. */ for (k = 0 ; k < cnt && retval == TRUE ; k++) { # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n activating constraint %s (%d)", consys_nme(orig_sys,'c',ocndxs[k],TRUE,NULL),ocndxs[k]) ; if (with_vars == FALSE || dy_opts->print.conmgmt < 4) { dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } } # endif retval = dy_actBLogPrimCon(orig_sys,ocndxs[k],onecon) ; if (retval == FALSE) { errmsg(430,rtnnme, orig_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "activate","constraint", consys_nme(orig_sys,'c',ocndxs[k],TRUE,NULL),ocndxs[k]) ; } if (with_vars == TRUE) { onecon_cnt = onecon[0] ; for (ndx = 1 ; ndx <= onecon_cnt ; ndx++) { j = onecon[ndx] ; if (seen[j] == FALSE) { collection[++coll_cnt] = j ; seen[j] = TRUE ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,", %d referenced variables queued.", coll_cnt-collection[0]) ; collection[0] = coll_cnt ; } # endif } } /* Clean up from collection of indices of referenced variables. */ if (with_vars == TRUE) { collection[0] = coll_cnt ; if (*p_inactvars == NULL) { if (coll_cnt == 0) { FREE(collection) ; } else { *p_inactvars = collection ; } } if (onecon != NULL) FREE(onecon) ; if (seen != NULL) FREE(seen) ; } # ifdef DYLP_PARANOIA if (retval == TRUE) { retval = dy_chkdysys(orig_sys) ; } # endif return (retval) ; } bool dy_deactNBLogPrimCon (consys_struct *orig_sys, int i) /* This routine deactivates a tight primal constraint a with a nonbasic logical x. The only reason we want to do this is because we're trying to force dual feasibility and we need to deactivate the logical. Realistically, though, we're deleting the (dual) column associated with a nonzero dual, so dual feasibility will be a stroke of luck. But deactivating a primal constraint can't harm primal feasibility, eh? The routine takes the attitude that if we have primal feasibility, it'll try to retain it and force the basic variable out with superbasic status. What's important here is that the job is complicated considerably by the presence of some other variable x basic in pos'n i. The easiest way to overcome this problem is to alter reality. We'll take the variable x and mark it nonbasic at bound, unless we have primal feasibility, in which case we'll opt for SB status in an attempt to retain feasibility. Then we'll take x, the nonbasic logical for a, and mark it basic in pos'n i. Then we'll call deactBLogPrimCon to do the heavy lifting. Parameters: orig_sys: The original constraint system. i: The constraint to be deactivated. orig_sys is used only for printing, statistics, and paranoid checks, but it gives a nice symmetry with actBLogPrimCon. Returns: TRUE if deactivation succeeds, FALSE if there's an error. */ { int j,m,n ; double lbj,ubj,valj ; flags stati,statj ; const char *rtnnme = "dy_deactNBLogPrimCon" ; /* A little paranoia, mixed with prep. Check that i is valid and nonbasic. */ m = dy_sys->concnt ; n = dy_sys->varcnt ; # ifdef DYLP_PARANOIA if (i <= 0 || i > m) { errmsg(102,rtnnme,"constraint",i,1,m) ; return (FALSE) ; } # endif stati = getflg(dy_status[i],vstatSTATUS) ; # ifdef DYLP_PARANOIA if (flgoff(stati,vstatNBLB|vstatNBUB|vstatNBFX)) { errmsg(437,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'c',i,TRUE,NULL),i,dy_prtvstat(stati)) ; return (FALSE) ; } # endif /* Grab hold of x, the variable that's basic in pos'n i, and push it out into the nonbasic partition. If we're unlucky, it'll go out with SB status. If we're doubly unlucky, it's part of the reference frame and we'll need to reinitialize the PSE reference frame. SB status only applies in primal phase II. If we don't have feasibility, no need to use exotic status to preserve it. Just pick a finite bound. */ j = dy_basis[i] ; statj = getflg(dy_status[j],vstatSTATUS) ; lbj = dy_sys->vlb[j] ; ubj = dy_sys->vub[j] ; switch (statj) { case vstatB: { if (dy_lp->simplex.active == dyPRIMAL2) { statj = vstatSB ; valj = dy_x[j] ; } else { if (lbj > -dy_tols->inf) { statj = vstatNBLB ; valj = lbj ; } else { statj = vstatNBUB ; valj = ubj ; } } break ; } case vstatBUB: case vstatBUUB: { statj = vstatNBUB ; valj = ubj ; break ; } case vstatBLB: case vstatBLLB: { statj = vstatNBLB ; valj = lbj ; break ; } case vstatBFX: { statj = vstatNBFX ; valj = lbj ; break ; } case vstatBFR: { statj = vstatNBFR ; valj = dy_x[j] ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } switch (stati) { case vstatNBLB: { stati = vstatBLB ; break ; } case vstatNBUB: { stati = vstatBUB ; break ; } case vstatNBFX: { stati = vstatBFX ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n swapping %s (%d) %s -> ", consys_nme(dy_sys,'v',i,FALSE,NULL),i, dy_prtvstat(dy_status[i])) ; dyio_outfmt(dy_logchn,dy_gtxecho,"%s ",dy_prtvstat(stati)) ; dyio_outfmt(dy_logchn,dy_gtxecho,"<=> %s (%d) %s -> ", consys_nme(dy_sys,'v',j,FALSE,NULL),j, dy_prtvstat(dy_status[j])) ; dyio_outfmt(dy_logchn,dy_gtxecho,"%s.",dy_prtvstat(statj)) ; } # endif /* Tweak dy_basis, dy_var2basis, and dy_status to do the swap. The entries for x are going to disappear momentarily, but deactBLogPrimCon will want to examine them. If x is part of the reference frame, moving it to the nonbasic partition changes the composition of the PSE norms. The change in basis changes the DSE norms. */ dy_var2basis[j] = 0 ; dy_status[j] = statj ; if (dy_frame[j] == TRUE) dy_lp->simplex.init_pse = TRUE ; dy_x[j] = valj ; dy_lp->simplex.init_dse = TRUE ; dy_basis[i] = i ; dy_var2basis[i] = i ; dy_status[i] = stati ; /* Reality is altered. Call deactBLogPrimCon to do the heavy lifting. */ return (dy_deactBLogPrimCon(orig_sys,i)) ; } bool dy_deactBLogPrimCon (consys_struct *orig_sys, int i) /* This routine deactivates a primal constraint a with a basic logical x. The constraint could be loose, tight, or violated, depending on the value of the logical. What's important here is that we can easily fix up the basis because we'll be deleting one basis position and one basic variable. To make cleanup easier, if x does not already occupy basis position i, do a swap to make it so. Assuming m constraints and n variables (including logicals) before deletion, the pattern of motion becomes a --> deleted a --> a x --> deleted x --> x x --> x Once the constraint is deleted, we'll need to examine and correct the arrays dy_basis and dy_var2basis, as well as dy_origcons and dy_origvars. It's entirely possible to find that there are no constraints left after removing loose constraints. It follows that there will be no variables, and in fact we can end up with a completely empty constraint system. This is not uncommon deep in a branch-and-bound search tree, when dylp can be handed a system with many fixed variables. If we delete a logical that's part of the current PSE index, we need to correct the projected column norms. But ... in the context of dylp, there's a good chance we'll proceed from constraint deletion into dual simplex. So we'll just indicate that the column norms need to be initialized when we reenter primal simplex. Parameters: orig_sys: The original constraint system. i: The constraint to be deactivated. orig_sys is used only for printing, statistics, and paranoid checks, but it gives a nice symmetry with actBLogPrimCon. Returns: TRUE if deactivation succeeds, FALSE if there's an error. */ { int j,k,m,n,bposi,origi ; flags stati ; const char *rtnnme = "dy_deactBLogPrimCon" ; /* A little paranoia, mixed with prep. Check that i is valid, that we can locate a in the original system, and that the logical is basic. Also check the constraint invariant. */ m = dy_sys->concnt ; n = dy_sys->varcnt ; # ifdef DYLP_PARANOIA if (i <= 0 || i > m) { errmsg(102,rtnnme,"constraint",i,1,m) ; return (FALSE) ; } # endif stati = dy_status[i] ; bposi = dy_var2basis[i] ; # ifdef DYLP_PARANOIA if (flgoff(stati,vstatBASIC)) { errmsg(436,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'c',i,TRUE,NULL),i,dy_prtvstat(stati)) ; return (FALSE) ; } if (bposi <= 0 || dy_basis[bposi] != i) { errmsg(330,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',i,FALSE,NULL),i,dy_prtvstat(stati), bposi,dy_basis[bposi]) ; return (FALSE) ; } # endif origi = dy_actcons[i] ; # ifdef DYLP_PARANOIA if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (FALSE) ; } if (origi <= 0 || origi > orig_sys->concnt) { errmsg(102,rtnnme,"original constraint",origi,1,orig_sys->concnt) ; return (FALSE) ; } k = (orig_sys->concnt-dy_lp->sys.cons.unloadable) - (dy_lp->sys.cons.loadable+dy_sys->concnt) ; if (k != 0) { errmsg(444,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "constraint",orig_sys->concnt,dy_lp->sys.cons.unloadable, dy_lp->sys.cons.loadable,dy_sys->concnt,k) ; return (FALSE) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->cons.deactcnt[origi]++ ; # endif /* Before this entry is deleted, check if x is part of the PSE reference frame. If it is, indicate that we'll need to initialize the projected column norms the next time we enter primal simplex. */ if (dy_frame[i] == TRUE) dy_lp->simplex.init_pse = TRUE ; /* We've verified that the constraint is suitable for deletion. To make the basis touchup easier, ensure that x occupies basis position i by swapping with the current occupant. We don't need to set the new values in dy_basis and dy_var2basis (they're about to disappear, along with the ith entry of all other vectors attached to dy_sys). */ if (bposi != i) { k = dy_basis[i] ; dy_basis[bposi] = k ; dy_var2basis[k] = bposi ; } /* In a similar vein, if x is basic, and we will shift a to fill the hole left by deleting a, do a swap to ensure x is basic in pos'n m. Then the automatic compression of basis and var2basis will move them in tandem. One less complication to deal with after the fact. */ if (i < m) { k = dy_var2basis[m] ; if (k > 0 && k != m) { j = dy_basis[m] ; dy_var2basis[j] = k ; dy_basis[k] = j ; dy_var2basis[m] = m ; dy_basis[m] = m ; } } /* At this point, we can say the following: + Logical x occupies basis pos'n i and will be deleted along with constraint a + If logical x is basic, it occupies pos'n m. If logical x is nonbasic, then some variable x occupies basis pos'n m. It's possible that q = n. + If architectural x is basic, it occupies pos'n p. It's possible p = m. Now delete the constraint a. Mark it as inactive in origcons and then perform the actual deletion from dy_sys. Deletion of the associated logical x will occur automatically, as will shifts to compact the constraint system and the various attached arrays. In particular: + dy_basis and dy_actcons will be compacted as a is deleted. The information in pos'n m will be moved to pos'n i. + dy_var2basis and dy_actvars will be compacted as x is deleted. The information in pos'n m will be moved to pos'n i, and the information in pos'n n will be moved to pos'n m. */ k = dy_actcons[i] ; MARK_INACTIVE_CON(k) ; if (consys_delrow(dy_sys,i) == FALSE) { errmsg(112,rtnnme,dy_sys->nme,"delete","constraint", consys_nme(dy_sys,'c',i,FALSE,NULL),i) ; return (FALSE) ; } # ifdef DYLP_PARANOIA /* A few checks to make sure that things are in the expected places. If there are constraints remaining and a was not the last constraint, then the old constraint a should occupy position i. Similarly, if there are architecturals remaining, the old variable x should now be x. */ if (i <= dy_sys->concnt) { k = dy_actcons[i] ; if (dy_origcons[k] != m) { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } if (m <= dy_sys->varcnt) { k = dy_actvars[m] ; if (dy_origvars[k] != n) { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } # endif /* Now to repair the collateral damage. The trick is to avoid fixing things more than once. Let's start with the direct effects of constraint motion. If a was not the last constraint, a has been shifted to position i, and the associated slack x is now x. We need to correct origcons, var2basis, and basis. Avoid corrections that involve x; we'll get to them in the next block of code. */ if (i <= dy_sys->concnt) { k = dy_actcons[i] ; dy_origcons[k] = i ; k = dy_basis[i] ; if (k == m) { dy_basis[i] = i ; dy_var2basis[i] = i ; } else if (k != n) { dy_var2basis[k] = i ; } } /* If we shifted an architectural (which will happen unless there were none to shift), then we need to correct origvars, var2basis, and basis. Index shift is n -> m, and var2basis is compressed. So we check var2basis[m] to see if our architectural is basic. If it was basic in pos'n m, we need to change that to i, where the information now lives. Then go and correct the basis entry to contain our variable's new index. */ if (m <= dy_sys->varcnt) { k = dy_actvars[m] ; dy_origvars[k] = m ; bposi = dy_var2basis[m] ; if (bposi != 0) { if (bposi == m) { dy_basis[i] = m ; dy_var2basis[m] = i ; } else { dy_basis[bposi] = m ; } } } /* And finally, a little bookkeeping. */ dy_lp->sys.cons.loadable++ ; /* We're done. Do some printing, if requested, then return. */ # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tactive now %d x %d (%d+%d).", dy_sys->concnt,dy_sys->varcnt, dy_sys->archvcnt,dy_sys->concnt) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tconstraint %s (%d) and logical deleted from pos'n %d.", consys_nme(orig_sys,'c',origi,FALSE,NULL),origi,i) ; if (i <= dy_sys->concnt) { k = dy_actcons[i] ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tconstraint %s (%d) shifted from pos'n %d, ", consys_nme(orig_sys,'c',k,FALSE,NULL),k,m) ; k = dy_basis[i] ; dyio_outfmt(dy_logchn,dy_gtxecho,"basis[%d] = %s (%d)", i,consys_nme(dy_sys,'v',k,FALSE,NULL),k) ; k = dy_var2basis[i] ; if (k != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tbasis pos'n %d updated to %s (%d).", k,consys_nme(dy_sys,'v',dy_basis[k],FALSE,NULL), dy_basis[k]) ; } } if (m <= dy_sys->varcnt) { k = dy_actvars[m] ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tarchitectural %s (%d) shifted from pos'n %d.", consys_nme(orig_sys,'v',k,FALSE,NULL),k,n) ; k = dy_var2basis[m] ; if (k != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tbasis pos'n %d updated to %s (%d).", k,consys_nme(dy_sys,'v',dy_basis[k],FALSE,NULL), dy_basis[k]) ; } } } # endif return (TRUE) ; } static bool deactBLogPrimConList (consys_struct *orig_sys, int cnt, int *acndxs) /* This routine is purely a shell to call deactBLogPrimCon for each of the indices in the vector acndxs. It performs minimal error checking, relying on checking in deactBLogPrimCon. Parameters: orig_sys: The original constraint system cnt: The number of indices in acndxs acndxs: Vector of constraint indices (0-based) orig_sys is used only for printing and paranoid checks, but it gives a nice symmetry with dy_actBLogPrimConList. Returns: TRUE if all constraints are successfully activated, FALSE otherwise */ { int k ; bool retval ; const char *rtnnme = "deactBLogPrimConList" ; # ifdef DYLP_PARANOIA if (acndxs == NULL) { errmsg(2,rtnnme,"acndxs") ; return (FALSE) ; } if (cnt <= 0 || cnt > dy_sys->concnt) { errmsg(5,rtnnme,"cnt",cnt) ; return (FALSE) ; } # endif /* To make sure consys doesn't shift constraints out from under us, we need to delete in nonincreasing order. */ qsort(&acndxs[0],cnt,sizeof(int),intcompare) ; retval = TRUE ; for (k = 0 ; k < cnt && retval == TRUE ; k++) { # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n deactivating constraint %s (%d)", consys_nme(dy_sys,'c',acndxs[k],TRUE,NULL),acndxs[k]) ; } # endif retval = dy_deactBLogPrimCon(orig_sys,acndxs[k]) ; if (retval == FALSE) { errmsg(430,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "deactivate","constraint", consys_nme(dy_sys,'c',acndxs[k],TRUE,NULL),acndxs[k]) ; } } # ifdef DYLP_PARANOIA if (retval == TRUE) { retval = dy_chkdysys(orig_sys) ; } # endif return (retval) ; } static int scanPrimConStdAct (consys_struct *orig_sys, int **p_ocndxs) /* This routine scans the original constraint system looking for inactive constraints to add to the active system. There are two settings for opts.con.actlvl: 0: activate violated constraints 1: activate tight and violated constraints Parameters: orig_sys: The original constraint system p_ocndxs: (i) empty vector to hold constraint indices; assumed sufficiently large if non-NULL; if NULL, allocated if necessary (o) indices of constraints to be activated; may not be allocated if no constraints are identified Returns: number of candidates for activation, -1 if error. */ { int i,j,k,m,n,actcnt,cand_limit ; int *ocndxs ; double *orig_x,*orig_rhs,*orig_rhslow,*orig_vub,*orig_vlb ; double lhsi,rhsi,rhslowi ; contyp_enum *orig_ctyp,ctypi ; flags statj ; bool activate ; const char *rtnnme = "scanPrimConStdAct" ; # ifdef DYLP_PARANOIA if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (-1) ; } if (p_ocndxs == NULL) { errmsg(2,rtnnme,"&ocndxs") ; return (-1) ; } # endif m = orig_sys->concnt ; n = orig_sys->varcnt ; /* Did the client supply a vector for candidate indices? If not, make one. We shouldn't be here if there's no room to activate. Check this if we're paranoid. */ cand_limit = dy_lp->sys.cons.loadable ; # ifdef DYLP_PARANOIA if (cand_limit == 0) { errmsg(1,rtnnme,__LINE__) ; return (-1) ; } # endif if (dy_opts->con.actlim > 0) { cand_limit = minn(dy_opts->con.actlim,cand_limit) ; } if (*p_ocndxs == NULL) { ocndxs = (int *) MALLOC(cand_limit*sizeof(int)) ; } else { ocndxs = *p_ocndxs ; } /* Create a solution vector that matches orig_sys, to make the scan a bit more efficient. */ orig_vub = orig_sys->vub ; orig_vlb = orig_sys->vlb ; orig_x = (double *) CALLOC((n+1),sizeof(double)) ; for (j = 1 ; j <= n ; j++) { k = dy_origvars[j] ; if (k > 0) { orig_x[j] = dy_x[k] ; } else { statj = (flags) -k ; # ifdef DYLP_PARANOIA if (flgoff(statj,vstatNONBASIC|vstatNBFR)) { errmsg(433,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "inactive",consys_nme(orig_sys,'v',j,TRUE,NULL),j, dy_prtvstat(statj)) ; if (orig_x != NULL) FREE(orig_x) ; if (*p_ocndxs == NULL) FREE(ocndxs) ; return (-1) ; } # endif if (flgon(statj,vstatNBUB)) { orig_x[j] = orig_vub[j] ; } else if (flgon(statj,vstatNBLB|vstatNBFX)) { orig_x[j] = orig_vlb[j] ; } } } /* Now we can step through the constraints. Evaluate each loadable inactive constraint and check to see if it's violated. */ orig_ctyp = orig_sys->ctyp ; orig_rhs = orig_sys->rhs ; orig_rhslow = orig_sys->rhslow ; actcnt = 0 ; for (i = 1 ; i <= m && actcnt < cand_limit ; i++) { if (!LOADABLE_CON(i)) continue ; ctypi = orig_ctyp[i] ; lhsi = consys_dotrow(orig_sys,i,orig_x) ; setcleanzero(lhsi,dy_tols->zero) ; /* Check the lhs against the rhs. There are two levels of activation, specified by opts.con.actlvl: * strict (0) activates only when lhs < rhslow or lhs > rhs * tight (1) activates when lhs <= rhslow or lhs >= rhs */ rhsi = orig_rhs[i] ; if (ctypi == contypRNG) { rhslowi = orig_rhslow[i] ; } else if (ctypi == contypEQ) { rhslowi = rhsi ; } else { rhslowi = -dy_tols->inf ; } switch (dy_opts->con.actlvl) { case 0: { if (abovebnd(lhsi,rhsi) || belowbnd(lhsi,rhslowi)) { activate = TRUE ; } else { activate = FALSE ; } break ; } case 1: { if (!(belowbnd(lhsi,rhsi) && abovebnd(lhsi,rhslowi))) { activate = TRUE ; } else { activate = FALSE ; } break ; } default: { errmsg(1,rtnnme,__LINE__) ; if (orig_x != NULL) FREE(orig_x) ; if (*p_ocndxs == NULL) FREE(ocndxs) ; return (-1) ; } } # ifndef DYLP_NDEBUG if (activate == FALSE) { if (dy_opts->print.conmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n skipping %s constraint %s (%d), %g <= %g <= %g.", consys_prtcontyp(orig_ctyp[i]), consys_nme(orig_sys,'c',i,FALSE,NULL),i, rhslowi,lhsi,rhsi) ; } } else { if (dy_opts->print.conmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n queued %s constraint %s (%d),", consys_prtcontyp(orig_ctyp[i]), consys_nme(orig_sys,'c',i,FALSE,NULL),i) ; if (abovebnd(lhsi,rhsi)) { dyio_outfmt(dy_logchn,dy_gtxecho, " lhs - rhs = %g - %g = %g, tol %g.", lhsi,rhsi,lhsi-rhsi,dy_tols->zero*(1+fabs(rhsi))) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, " rhslow - lhs = %g - %g = %g, tol %g.", rhslowi,lhsi,rhslowi-lhsi, dy_tols->zero*(1+fabs(rhslowi))) ; } } } # endif if (activate == TRUE) ocndxs[actcnt++] = i ; } if (orig_x != NULL) FREE(orig_x) ; /* If we supplied ocndxs and found no candidates to activate, free it. */ if (*p_ocndxs == NULL) { if (actcnt == 0) { FREE(ocndxs) ; } else { *p_ocndxs = ocndxs ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n queued %d %s constraints for activation.",actcnt, dy_opts->con.actlvl == 0?"violated":"tight or violated") ; } # endif return (actcnt) ; } static int scanPrimConStdDeact (int **p_acndxs) /* This routine scans the active constraint system for constraints that are candidates for deactivation. The primary criterion is that the logical for the constraint must be basic. Within this group of candidates, selection is based on the value of opts.con.deactlvl: * 0: (normal) Queues for deactivation inequalities a which are strictly loose. Logicals x must be strictly within bound (status vstatB). The notion is that we've left these constraints behind and will never return. * 1: (aggressive) Adds inequalities a which are tight but the value of the associated dual variable y = 0. (Logicals x are at bound with status vstatBUB or vstatBLB.) The notion is that these inequalities aren't contributing (in terms of satisfying the dual, yA >= c) and are more than likely just loitering about being degenerate. * 2: (fanatic) Adds equalities a with y = 0. (Logicals (artificials) x have status vstatBFX.) Aimed at purging constraints in large set covering problems but has relatively little effect because it's hard to catch x with status vstatBFX. Likely should consider x with status NBFX. Needs more thought. Logicals always have at least one finite bound and should never have status vstatBFR. Logicals for a range constraint can have two finite bounds, but they should never be equal, so they can never have status vstatBFX. The logical (artificial) for a satisfied equality can only have status vstatBFX, but we'd be lucky to see it before dylp's pivoting priorities move it to the nonbasic partition, never to return. All of this means that we don't actually have to check constraint types, just look for the appropriate status codes. Parameters: p_acndxs: (i) empty vector to hold constraint indices; assumed sufficiently large if non-NULL; if NULL, allocated as necessary (o) indices of constraints to be deactivated; may not be allocated if no constraints are identified Returns: number of candidates for deactivation; -1 if error. Errors are possible only if we're paranoid. */ { int j,m,purgecnt ; int *acndxs ; flags statj ; bool purge ; const char *rtnnme = "scanPrimConStdDeact" ; # ifdef DYLP_PARANOIA if (p_acndxs == NULL) { errmsg(2,rtnnme,"&acndxs") ; return (-1) ; } # endif m = dy_sys->concnt ; if (*p_acndxs == NULL) { acndxs = (int *) MALLOC(m*sizeof(int)) ; } else { acndxs = *p_acndxs ; } /* Open a loop to search for candidates for deactivation. It's pretty straightforward, as all we need to do is examine the status of the logical and (perhaps) the dual. */ purgecnt = 0 ; for (j = 1 ; j <= m ; j++) { statj = dy_status[j] ; purge = FALSE ; if (flgon(statj,vstatB|vstatBLB|vstatBUB|vstatBFX)) { switch (dy_opts->con.deactlvl) { case 0: /* normal */ { if (flgon(statj,vstatB)) purge = TRUE ; break ; } case 1: /* aggressive */ { if (flgon(statj,vstatB) || (flgon(statj,vstatBLB|vstatBUB) && dy_y[j] == 0)) purge = TRUE ; break ; } case 2: /* fanatic */ { if (flgon(statj,vstatB) || (flgon(statj,vstatBLB|vstatBUB|vstatBFX) && dy_y[j] == 0)) purge = TRUE ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; if (*p_acndxs == NULL && acndxs != NULL) FREE(acndxs) ; return (-1) ; } } } # ifndef DYLP_NDEBUG if (purge == FALSE) { if (dy_opts->print.conmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n skipped %s %s (%d), ", consys_prtcontyp(dy_sys->ctyp[j]), consys_nme(dy_sys,'c',j,TRUE,NULL),j) ; dyio_outfmt(dy_logchn,dy_gtxecho, "%s (%d) = %g, status %s, basis pos'n %d.", consys_nme(dy_sys,'v',j,TRUE,NULL),j, dy_x[j],dy_prtvstat(statj),dy_basis[j]) ; } } else { if (dy_opts->print.conmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n queued %s %s (%d), ", consys_prtcontyp(dy_sys->ctyp[j]), consys_nme(dy_sys,'c',j,TRUE,NULL),j) ; dyio_outfmt(dy_logchn,dy_gtxecho, "%s (%d) = %g, status %s, basis pos'n %d.", consys_nme(dy_sys,'v',j,TRUE,NULL),j, dy_x[j],dy_prtvstat(statj),dy_basis[j]) ; } } # endif if (purge == TRUE) { acndxs[purgecnt++] = j ; } } if (*p_acndxs == NULL) { if (purgecnt <= 0) { FREE(acndxs) ; } else { *p_acndxs = acndxs ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 1) { const char *strat ; switch (dy_opts->con.deactlvl) { case 0: { strat = "normal" ; break ; } case 1: { strat = "aggressive" ; break ; } case 2: { strat = "fanatic" ; break ; } default: { strat = "invalid" ; break ; } } dyio_outfmt(dy_logchn,dy_gtxecho, "\n %s scan queued %d constraints for deactivation.", strat,purgecnt) ; } # endif return (purgecnt) ; } int dy_deactivateCons (consys_struct *orig_sys) /* This routine coordinates normal constraint deactivation in phase dyPURGECON. In addition to the actual scan and deactivation, it sees to rebuilding the basis and solution. The heavy lifting is performed in scanPrimConStdDeact and deactBLogPrimCon. See the comments at the head of the file for the effects on PSE and DSE norms. Parameters: orig_sys: The original constraint system orig_sys is used only for debug printing and paranoid checks. Still, it's really convenient to have it as a parameter and it provides a nice symmetry with activateCons. Returns: number of constraints deactivated; -1 if there's an error. */ { int *candidates,cand_cnt ; dyret_enum factorresult ; flags factorflags ; int retval ; const char *rtnnme = "dy_deactivateCons" ; retval = -1 ; /* Call scanPrimConStdDeact to return a list of candidates for deactivation. If we find candidates, try to deactivate them. */ candidates = NULL ; cand_cnt = scanPrimConStdDeact(&candidates) ; if (cand_cnt < 0) { errmsg(434,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "constraint","normal deactivation") ; } else if (cand_cnt > 0) { if (deactBLogPrimConList(orig_sys,cand_cnt,candidates) == TRUE) /* If we purged constraints and there are still some left, we need to refactor and recalculate the primal and dual variables. It has happened that the only tight constraints are variables at bound, so that no explicit constraints remain. Arguably this is overkill --- in most cases, we'll move to dyADDCON, add constraints, and refactor again. */ { if (dy_sys->concnt > 0) { factorflags = ladDUALS|ladPRIMALS ; # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) dyio_outfmt(dy_logchn,dy_gtxecho,"\n refactoring ...") ; # endif factorresult = dy_factor(&factorflags) ; switch (factorresult) { case dyrOK: case dyrPATCHED: { retval = cand_cnt ; # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) { if (factorresult == dyrOK) dyio_outfmt(dy_logchn,dy_gtxecho,"\n done.") ; else dyio_outfmt(dy_logchn,dy_gtxecho,"\n patched.") ; } # endif break ; } default: { retval = -1 ; # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) dyio_outfmt(dy_logchn,dy_gtxecho,"\n failed.") ; # endif break ; } } } else { retval = cand_cnt ; } } else { retval = -1 ; } } else { retval = cand_cnt ; } if (candidates != NULL) FREE(candidates) ; # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n %d constraints deactivated.",cand_cnt) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n constraint system %s now %d x %d (%d + %d).", dy_sys->nme,dy_sys->concnt,dy_sys->varcnt,dy_sys->archvcnt, dy_sys->logvcnt) ; } # endif return (retval) ; } int dy_activateCons (consys_struct *orig_sys, bool with_vars) /* This routine coordinates normal constraint activation in phase dyADDCON. In addition to the actual scan and activation, it sees to rebuilding the basis and solution. The heavy lifting is performed in scanPrimConStdAct and actBLogPrimCon. See the comments at the head of the file for the algebra and (lack of) side effects associated with constraint activation without variable activation. Fortunately, if we're activating variables, too, the details are handled by the variable activation routines. Parameter: orig_sys: The original constraint system with_vars: If true, consider activating inactive variables associated with newly activated constraints. Returns: number of constraints activated; -1 if there's an error. */ { int *candidates,cand_cnt,*inactvars,inact_cnt ; int retval,var_retval ; bool actresult ; flags calcflgs ; dyret_enum factorresult ; const char *rtnnme = "dy_activateCons" ; retval = -1 ; /* Call scanPrimConStdAct to return a list of candidates for activation, then call actBLogPrimConList to install them. Installing nothing always succeeds. If with_vars == TRUE, pass in a pointer that will return loaded with a vector of indices of inactive variables referenced by the candidate constraints. */ candidates = NULL ; inactvars = NULL ; inact_cnt = 0 ; cand_cnt = scanPrimConStdAct(orig_sys,&candidates) ; if (cand_cnt < 0) { errmsg(434,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "constraint","normal activation") ; actresult = FALSE ; } else if (cand_cnt > 0) { if (with_vars == TRUE) { actresult = dy_actBLogPrimConList(orig_sys,cand_cnt, candidates,&inactvars) ; if (inactvars != NULL) { inact_cnt = inactvars[0] ; } } else { actresult = dy_actBLogPrimConList(orig_sys,cand_cnt, candidates,NULL) ; } } else { actresult = TRUE ; } if (candidates != NULL) FREE(candidates) ; if (actresult == FALSE) { if (inactvars != NULL) FREE(inactvars) ; return (retval) ; } /* If we added constraints, we need to refactor and recalculate the primal and dual variables. It's unlikely we'll have primal feasibility, but very likely we'll have dual feasibility. */ retval = cand_cnt ; if (cand_cnt > 0) { dy_lp->simplex.init_dse = TRUE ; # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n factoring, calculating variables, ") ; dyio_outfmt(dy_logchn,dy_gtxecho,"and checking feasibility ...") ; } # endif calcflgs = ladFACTOR|ladPRIMFEAS|ladPFQUIET|ladDUALFEAS|ladDFQUIET ; factorresult = dy_accchk(&calcflgs) ; switch (factorresult) { case dyrOK: case dyrPATCHED: { retval = cand_cnt ; # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) { if (factorresult == dyrOK) dyio_outfmt(dy_logchn,dy_gtxecho,"\n done.") ; else dyio_outfmt(dy_logchn,dy_gtxecho,"\n patched.") ; } # endif if (flgoff(calcflgs,ladDUALFEAS)) { dy_lp->simplex.next = dyDUAL ; } else if (flgoff(calcflgs,ladPRIMFEAS)) { dy_lp->simplex.next = dyPRIMAL2 ; } else { dy_lp->simplex.next = dyPRIMAL1 ; } break ; } default: { retval = -1 ; # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) dyio_outfmt(dy_logchn,dy_gtxecho,"\n failed.") ; # endif break ; } } /* Are we activating referenced variables? If so, invoke the variable management routines. */ if (with_vars == TRUE && inact_cnt > 0) { var_retval = dy_activateVars(orig_sys,inactvars) ; if (var_retval < 0) { errmsg(440,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; retval = var_retval ; } } } if (inactvars != NULL) FREE(inactvars) ; # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n activated %d constraints",cand_cnt) ; if (with_vars == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, " with %d referenced variables",inact_cnt) ; } dyio_outchr(dy_logchn,dy_gtxecho,'.') ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n constraint system %s now %d x %d (%d + %d).", dy_sys->nme,dy_sys->concnt,dy_sys->varcnt,dy_sys->archvcnt, dy_sys->logvcnt) ; } # endif return (retval) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_consys_io.c0000644000175200017520000005012711507440660016237 0ustar coincoin/* This file is a portion of the Dylp LP distribution. Copyright (C) 2004 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains i/o routines for the constraint system data structures, and related routines for generating name strings for various objects. */ #include "dylib_errs.h" #include "dylib_io.h" #include "dylib_std.h" #include "dylib_strrtns.h" #include "dy_consys.h" static char sccsid[] UNUSED = "@(#)consys_io.c 4.6 11/11/04" ; static char svnid[] UNUSED = "$Id: dy_consys_io.c 407 2010-12-31 20:48:48Z lou $" ; const char *consys_prtcontyp (contyp_enum contyp) /* Utility to print a readable string for a constraint type. Parameter: contyp: constraint type Returns: appropriate string for the type, or an error string. */ { const char *rtnnme = "consys_prtcontyp" ; switch (contyp) { case contypLE: { return ("<=") ; } case contypGE: { return (">=") ; } case contypEQ: { return ("=") ; } case contypNB: { return ("><") ; } case contypRNG: { return ("<=>") ; } case contypINV: { return ("invalid") ; } default: { errmsg(5,rtnnme,"contyp",(int) contyp) ; return ("unrecognised") ; } } } const char *consys_prtvartyp (vartyp_enum vartyp) /* Utility to print a readable string for a variable type. Parameter: vartyp: variable type Returns: appropriate string for the type, or an error string. */ { const char *rtnnme = "consys_prtvartyp" ; switch (vartyp) { case vartypCON: { return ("continuous") ; } case vartypINT: { return ("general integer") ; } case vartypBIN: { return ("binary") ; } case vartypINV: { return ("invalid") ; } default: { errmsg(5,rtnnme,"vartyp",(int) vartyp) ; return ("unrecognised") ; } } } char *consys_assocnme (consys_struct *consys, flags which) /* Utility routine to produce a name for an associated vector. If consys is non-NULL, the name is fully qualified (consys.which) using the short form of which. If consys is NULL, a longer form of which is returned. Parameters: consys: constraint system which: associated vector type (from codes in dy_consys.h) Returns: a name string for the vector, or a string indicating error. */ { static char nmbuf[128] ; int nmlen ; if (consys != NULL) { nmlen = sizeof(nmbuf)/2 ; (void) dyio_outfxd(nmbuf,-nmlen,'l',"%s",consys->nme) ; strcat(nmbuf,".") ; } else { nmbuf[0] = '\0' ; } nmlen = (int) strlen(nmbuf) ; switch (which) { case CONSYS_MTX: { strcat(nmbuf,(consys == NULL)?"constraint matrix":"mtx") ; break ; } case CONSYS_ROWHDR: { strcat(nmbuf,(consys == NULL)?"row header array":"rowhdr") ; break ; } case CONSYS_COLHDR: { strcat(nmbuf,(consys == NULL)?"column header array":"colhdr") ; break ; } case CONSYS_OBJ: { strcat(nmbuf,(consys == NULL)?"objective function":"obj") ; break ; } case CONSYS_VUB: { strcat(nmbuf,(consys == NULL)?"variable upper bounds":"vub") ; break ; } case CONSYS_VLB: { strcat(nmbuf,(consys == NULL)?"variable lower bounds":"vlb") ; break ; } case CONSYS_RHS: { strcat(nmbuf,(consys == NULL)?"right-hand-side":"rhs") ; break ; } case CONSYS_RHSLOW: { strcat(nmbuf,(consys == NULL)?"range right-hand-side":"rhslow") ; break ; } case CONSYS_CUB: { strcat(nmbuf,(consys == NULL)?"constraint upper bounds":"cub") ; break ; } case CONSYS_CLB: { strcat(nmbuf,(consys == NULL)?"constraint lower bounds":"clb") ; break ; } case CONSYS_VTYP: { strcat(nmbuf,(consys == NULL)?"variable type":"vtyp") ; break ; } case CONSYS_CTYP: { strcat(nmbuf,(consys == NULL)?"constraint type":"ctyp") ; break ; } case CONSYS_RSCALE: { strcat(nmbuf,(consys == NULL)?"row scaling":"rsc") ; break ; } case CONSYS_CSCALE: { strcat(nmbuf,(consys == NULL)?"column scaling":"csc") ; break ; } case CONSYS_COL: { strcat(nmbuf,(consys == NULL)?"generic column":"col") ; break ; } case CONSYS_ROW: { strcat(nmbuf,(consys == NULL)?"generic row":"row") ; break ; } default: { dyio_outfxd(&nmbuf[nmlen],-26,'l',"<>",(int) which) ; break ; } } return (nmbuf) ; } void consys_chgnme (consys_struct *consys, char cv, int ndx, const char *newnme) /* This routine replaces the existing name of the constraint system, objective, constraint or variable with newnme. Parameters: consys: constraint system cv: 'c' for constraint, 'v' for variable, 'o' for objective, 's' for the constraint system ndx: constraint/variable (row/column) index newnme: the new name Returns: undefined; will complain and fail to set the name if the parameters are invalid or some other problem is detected. */ { rowhdr_struct *rowhdr ; colhdr_struct *colhdr ; # ifdef DYLP_PARANOIA int varcnt ; # endif # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_chgnme" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return ; } switch (cv) { case 'c': { if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return ; } if (ndx <= 0 || ndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"constraint",ndx,1,consys->concnt) ; return ; } if (consys->mtx.rows[ndx] == NULL) { errmsg(103,rtnnme,consys->nme,"row",ndx) ; return ; } break ; } case 'v': { if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return ; } if (flgon(consys->opts,CONSYS_LVARS)) varcnt = consys->varcnt ; else varcnt = consys->varcnt+consys->concnt ; if (ndx <= 0 || ndx > varcnt) { errmsg(102,rtnnme,consys->nme,"variable",ndx,1,varcnt) ; return ; } if (consys->mtx.cols[ndx] == NULL) { errmsg(103,rtnnme,consys->nme,"column",ndx) ; return ; } break ; } case 'o': case 's': { break ; } default: { errmsg(3,rtnnme,"cv",cv) ; return ; } } if (newnme == NULL) { errmsg(2,rtnnme,"newnme") ; return ; } if (strlen(newnme) == 0) { errmsg(4,rtnnme,"newnme","") ; return ; } # endif /* We know that ndx is valid, the row/column header exists, and we have a non-null name to insert. (In the case of the objective or constraint system name, we only care about a non-null name.) Go to it. Remember that these strings are managed through the literal table. (STRALLOC/STRFREE) */ switch (cv) { case 'c': { rowhdr = consys->mtx.rows[ndx] ; if (rowhdr->nme != NULL) { STRFREE(rowhdr->nme) ; } rowhdr->nme = STRALLOC(newnme) ; break ; } case 'v': { colhdr = consys->mtx.cols[ndx] ; if (colhdr->nme != NULL) { STRFREE(colhdr->nme) ; } colhdr->nme = STRALLOC(newnme) ; break ; } case 'o': { if (consys->objnme != NULL) { STRFREE(consys->objnme) ; } consys->objnme = STRALLOC(newnme) ; break ; } case 's': { if (consys->nme != NULL) { STRFREE(consys->nme) ; } consys->nme = STRALLOC(newnme) ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return ; } } return ; } char *consys_lognme (consys_struct *consys, int rowndx, char *clientbuf) /* This is a utility routine that will construct the proper name for a logical variable, given the constraint index. Names constructed for logicals are guaranteed to be no more than 32 characters, including the final null. This routine exists only so that consys_nme and consys_utils:add_logical are guaranteed to produce the same names. They are the only two routines that should call consys_lognme, and add_logical is the only reason this routine isn't static. Parameters: consys: the constraint system rowndx: the constraint index clientbuf: a character buffer >= 32 characters, or NULL Returns: the user's buffer, if supplied, or an internal buffer, containing the name of the logical variable. */ { int len ; rowhdr_struct *rowhdr ; char *nmebuf ; static char ownbuf[32] ; # ifdef DYLP_PARANOIA const char *rtnnme = "consys_lognme" ; /* The usual, and checks that some necessary associated arrays are present. This is an internal routine, so index bounds checks are dropped unless we're being paranoid. */ if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_ROWHDR)) ; return (FALSE) ; } /* ZZ_TABLEAU_ZZ if (consys->ctyp == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_CTYP)) ; return (FALSE) ; } */ if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (FALSE) ; } if (consys->mtx.rows[rowndx] == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (FALSE) ; } # endif /* Use the client's buffer, if supplied, otherwise use the local static buffer. */ if (clientbuf == NULL) { nmebuf = ownbuf ; } else { nmebuf = clientbuf ; } /* Construct a name, based on the type of constraint. If the constraint system doesn't have a ctyp array, use the generic ".log". */ rowhdr = consys->mtx.rows[rowndx] ; len = (int) strlen(rowhdr->nme) ; if (len > sizeof(nmebuf)-5) len = sizeof(nmebuf)-5 ; strncpy(nmebuf,rowhdr->nme,len) ; if (consys->ctyp != NULL) { switch (consys->ctyp[rowndx]) { case contypLE: { strcpy(&nmebuf[len],".slk") ; break ; } case contypEQ: { strcpy(&nmebuf[len],".art") ; break ; } case contypGE: { strcpy(&nmebuf[len],".sur") ; break ; } case contypRNG: { strcpy(&nmebuf[len],".rng") ; break ; } default: { strcpy(&nmebuf[len],".inv") ; break ; } } } else { strcpy(&nmebuf[len],".log") ; } return (nmebuf) ; } const char *consys_nme (consys_struct *consys, char cv, int ndx, bool pfx, char *clientbuf) /* Utility routine to retrieve the name of a constraint or variable. If pfx is false, the base name is returned. If pfx is true, 'consys->nme.' is added as a prefix. If the constraint or variable name is stored in a row or column header, the stored pointer is returned. The name has to be constructed in two cases: * when the prefixed form is requested, and * when the name of a logical is requested and logicals aren't enabled. In these cases, the name is built in a buffer and a pointer to the buffer is returned. If the client doesn't supply a buffer, an internal static buffer is used (which will be overwritten the next time it's needed). If the user supplies a buffer, that buffer is always used (whether the name is constructed or not). The constant CONSYS_MAXBUFLEN is the maximum buffer length. Parameters: consys: constraint system cv: 'c' for constraint, 'v' for variable ndx: the constraint/variable (row/column) index; to request the name of the logical for constraint k when logicals aren't enabled, use (consys->varcnt+k) pfx: TRUE if the fully qualified name should be generated, FALSE for the constraint/variable name only. clientbuf: if non-NULL, the name is constructed and returned in this buffer. Returns: the name of the constraint/variable, or some appropriate string indicating error. */ { static char ourbuf[CONSYS_MAXBUFLEN],ourbuftoo[CONSYS_MAXBUFLEN] ; char *nmbuf ; const char *rtnbuf ; int nmlen,partlen ; #ifdef DYLP_PARANOIA const char *rtnnme = "consys_nme", *errname = "<>" ; if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (errname) ; } switch (cv) { case 'c': { if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (errname) ; } if (ndx <= 0 || ndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"constraint",ndx,1,consys->concnt) ; return (errname) ; } if (consys->mtx.rows[ndx] == NULL) { errmsg(103,rtnnme,consys->nme,"row",ndx) ; return (errname) ; } break ; } case 'v': { if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (errname) ; } if (flgon(consys->opts,CONSYS_LVARS)) nmlen = consys->varcnt ; else nmlen = consys->varcnt+consys->concnt ; if (ndx <= 0 || ndx > nmlen) { errmsg(102,rtnnme,consys->nme,"variable",ndx,1,nmlen) ; return (errname) ; } if (ndx < consys->varcnt && consys->mtx.cols[ndx] == NULL) { errmsg(103,rtnnme,consys->nme,"column",ndx) ; return (errname) ; } break ; } default: { errmsg(3,rtnnme,"cv",cv) ; return (errname) ; } } #endif /* Can we just return the pointer to the name from the row/column header? (Perhaps after copying it into the client's buffer.) */ if (pfx == FALSE && (cv == 'c' || (cv == 'v' && ndx <= consys->varcnt))) { if (cv == 'c') rtnbuf = consys->mtx.rows[ndx]->nme ; else rtnbuf = consys->mtx.cols[ndx]->nme ; if (clientbuf != NULL) { if (strlen(rtnbuf) < CONSYS_MAXBUFLEN) strcpy(clientbuf,rtnbuf) ; else { strncpy(clientbuf,rtnbuf,CONSYS_MAXBUFLEN-1) ; clientbuf[CONSYS_MAXBUFLEN-1] = '\0' ; } rtnbuf = clientbuf ; } } /* We have to build the name. Not quite so bad as it seems at first glance. Figure out what buffer to use, then dump in the prefix, then dump in the name. The call to consys_lognme down below is made with a private buffer so that we don't inadvertently screw up by having a call to consys_nme interfere with a previous call to consys_lognme. Sure, it shouldn't happen, but why take the chance. The nme field in the row/column header shouldn't be null either, but we're going for robustness here -- this routine gets called a lot to generate error messages. */ else { if (clientbuf == NULL) nmbuf = ourbuf ; else nmbuf = clientbuf ; if (pfx == TRUE) { nmlen = (int) strlen(consys->nme) ; if (nmlen > CONSYS_MAXBUFLEN/2-1) nmlen = CONSYS_MAXBUFLEN/2-1 ; strncpy(nmbuf,consys->nme,nmlen) ; nmbuf[nmlen++] = '.' ; } else { nmlen = 0 ; } switch (cv) { case 'c': { if (consys->mtx.rows[ndx]->nme == NULL) { strcpy(&nmbuf[nmlen],"<>") ; } else { partlen = (int) strlen(consys->mtx.rows[ndx]->nme) ; if (partlen > CONSYS_MAXBUFLEN-nmlen-1) partlen = CONSYS_MAXBUFLEN-nmlen-1 ; strncpy(&nmbuf[nmlen],consys->mtx.rows[ndx]->nme,partlen) ; nmlen += partlen ; nmbuf[nmlen] = '\0' ; } break ; } case 'v': { if (ndx <= consys->varcnt) { if (consys->mtx.cols[ndx]->nme == NULL) { strcpy(&nmbuf[nmlen],"<>") ; } else { partlen = (int) strlen(consys->mtx.cols[ndx]->nme) ; if (partlen > CONSYS_MAXBUFLEN-nmlen-1) partlen = CONSYS_MAXBUFLEN-nmlen-1 ; strncpy(&nmbuf[nmlen],consys->mtx.cols[ndx]->nme,partlen) ; nmlen += partlen ; nmbuf[nmlen] = '\0' ; } } else { (void) consys_lognme(consys,ndx-consys->varcnt,ourbuftoo) ; partlen = (int) strlen(ourbuftoo) ; if (partlen > CONSYS_MAXBUFLEN-nmlen-1) partlen = CONSYS_MAXBUFLEN-nmlen-1 ; strncpy(&nmbuf[nmlen],ourbuftoo,partlen) ; nmlen += partlen ; nmbuf[nmlen] = '\0' ; } break ; } } rtnbuf = nmbuf ; } return (rtnbuf) ; } /* A pair of utility routines to print constraint bound names and values. */ char *consys_conbndnme (char bndlett, int cndx, conbnd_struct *bnd) /* Prints a constraint lower bound name as LB(vndx) (for a bound which is finite or has more than one infinite contribution) or LB(vndx\infndx) for a bound which has exactly one infinite contribution (infndx is the index of the variable contributing the infinity). Analogous for upper bounds. The routine is robust in the face of incorrect values for bnd.inf, in the sense that it will still produce a printable string. It doesn't actually check for errors --- that would require a constraint system as a parameter in order to check the limits on bnd.inf. Parameters: bndlett: one of 'L' or 'U' cndx: constraint index bnd: constraint bound Returns: a name string for the bound */ { static char buf[32] ; char *bufptr ; bufptr = &buf[0] ; bufptr += dyio_outfxd(bufptr,-((int) (sizeof(buf)/2-1)), 'l',"%cB(%d",bndlett,cndx) ; if (bnd->inf < 0) dyio_outfxd(bufptr,-((int) (sizeof(buf)/2-1)),'l',"\\%d)",-bnd->inf) ; else dyio_outfxd(bufptr,-1,'l',")") ; return (&buf[0]) ; } char *consys_conbndval (conbnd_struct *bnd) /* Prints the constraint bound value, as nn*inf+val, or inf+val, or val, depending as the number of infinite contributions is >1, 1, or 0, respectively. As with consys_conbndnme, the routine is robust in the face of a bogus value for bnd.inf. Parameter: bnd: constraint bound Returns: a value string for the bound */ { static char buf[32] ; char *bufptr ; bufptr = &buf[0] ; if (bnd->inf > 0) bufptr += dyio_outfxd(bufptr,-((int) (sizeof(buf)/2-1)), 'l',"%d*inf+",bnd->inf) ; else if (bnd->inf < 0) bufptr += dyio_outfxd(bufptr,-((int) (sizeof(buf)/2-1)),'l',"inf+") ; dyio_outfxd(bufptr,-((int) (sizeof(buf)/2-1)),'l',"%g",bnd->bnd) ; return (&buf[0]) ; } void consys_prtcon (ioid chn, bool echo, consys_struct *consys, int i, const char *pfx) /* This routine prints a constraint. Since this could be a lengthy string in larger problems, the routine prints directly to the output rather than to a string. The print is of the form: rhslow <= name (ndx) <= rhs coef*var(ndx) +/- coeff*var(ndx) +/- coeff*var(ndx) ... where coefficients take as many lines as necessary. Parameters: chn: i/o channel echo: TRUE to echo to tty, FALSE otherwise. consys: reference constraint system for coefficients in newcon i: index of the constraint to be printed pfx: prefix to be printed at the start of each line (typically blank space for indentation) Returns: undefined */ { int linecnt,charcnt,ndx ; contyp_enum ctypi ; pkvec_struct *coni ; pkcoeff_struct *ai ; char buf[64] ; const char *rtnnme = "consys_prtcon", *errstring = "<< !consys_prtcon print error! >>", *dfltpfx = "" ; # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; dyio_outfmt(chn,echo,errstring) ; return ; } if (i < 0 || i > consys->concnt) { errmsg(102,rtnnme,consys->nme,"constraint",i,1,consys->concnt) ; dyio_outfmt(chn,echo,errstring) ; return ; } # endif if (pfx == NULL) pfx = dfltpfx ; /* The basics: name, index, constraint type, rhs (and rhslow, if needed). */ ctypi = consys->ctyp[i] ; dyio_outfmt(chn,echo,"\n%s",pfx) ; if (ctypi == contypRNG) { dyio_outfmt(chn,echo,"%g <= ",consys->rhslow[i]) ; } dyio_outfmt(chn,echo,"%s (%d) %s %g",consys_nme(consys,'c',i,FALSE,NULL),i, consys_prtcontyp(ctypi),consys->rhs[i]) ; /* Now the coefficients, limiting each line to 80 characters. The initial coefficient on a line is indented and printed with an optional `-' followed by the coefficient, variable name, and index. Subsequent coefficients consist of +/-, coefficient, variable name, and index. To keep things simple, if a coefficient doesn't fit on a line, we throw it back for reformatting as the initial coefficient of the next line. */ coni = NULL ; if (consys_getrow_pk(consys,i,&coni) == FALSE) { errmsg(122,rtnnme,consys->nme, "constraint",consys_nme(consys,'c',i,FALSE,NULL),i) ; dyio_outfmt(chn,echo,errstring) ; if (coni != NULL) pkvec_free(coni) ; return ; } ai = coni->coeffs ; linecnt = 0 ; for (ndx = 0 ; ndx < coni->cnt ; ndx++) { if (linecnt == 0) { charcnt = dyio_outfxd(&buf[0],-60,'l',"\n%s % g %s(%d)",pfx,ai[ndx].val, consys_nme(consys,'v',ai[ndx].ndx,FALSE,NULL), ai[ndx].ndx) ; } else { charcnt = dyio_outfxd(&buf[0],-60,'l'," %+g %s(%d)",ai[ndx].val, consys_nme(consys,'v',ai[ndx].ndx,FALSE,NULL), ai[ndx].ndx) ; } if (linecnt+charcnt < 70) { dyio_outfmt(chn,echo,"%s",&buf[0]) ; linecnt += charcnt ; } else { ndx-- ; linecnt = 0 ; } } pkvec_free(coni) ; return ; } DyLP-1.10.4/DyLP/src/Dylp/dy_primalpivot.c0000644000175200017520000032646512253224475016616 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains the routines which select entering and leaving variables for a primal pivot, and the primal pivot routine. */ /* A few words on degeneracy and the antidegeneracy mechanism. There's a pathological problem which I don't see any way to avoid. Suppose |x - bnd| > dy_tols->pfeas but delta = (x - bnd)/abar < dy_tols->zero. We have a `dirty' degeneracy, and there doesn't seem to be any way to handle this gracefully. The method chosen to deal with the problem follows the outlines of the handling of bogus values. The first time primalout scans one of these gems, it'll call for a refactor unless one has just been done. If we can't get rid of the problem that way, the solution adopted is to set x to whatever bound it's supposed to leave at, take a degenerate pivot, and call for an immediate refactor. Results will vary. Another problem to watch out for is the case where the perturbation used for a restricted subproblem is overly large. dy_degenin attempts to scale the perturbation so that it's at most about 1/1000 of the bound the variable is currently pinned at, but this isn't always possible. A pathological combination of small and large values of abar in the pivot column can still allow a too-large delta, so that we get a false indication of a breakout. To guard against this, the code detects cases where there are no intervening pivots between dy_degenin and dy_degenout and reduces the perturbation by a factor of 10 on each occurrence. It's not necessary to actually count pivots. Detection occurs because we never escape the loop in dy_primalpivot which selects the leaving variable. The sequence goes like this: 1) Selection of the leaving variable detects degeneracy. degenin is called to form a restricted subproblem, and degen_cyclecnt is incremented. The loop iterates. 2) Selection of a leaving variable detects an apparent breakout. degenout is called to remove the restricted subproblem. The loop iterates. 3) If we really had a breakout, selection of a leaving variable would now result in a nonzero delta. But if the breakout is false, we'll be back at step 1). We need to escape the selection loop in order to reset degen_cyclecnt, so we can do this at most three times (currently hardcoded) before the selection loop gives up and takes a degenerate pivot. At the extreme end of the scale, it can happen that it's not possible to perturb a variable at all because the bounds are too close together (a pathological problem, to be sure, but it occurs when a program (such as an ILP branch-and-bound code) is setting the bounds). What happens is that when dy_degenin attempts to scale the perturbation based on the difference between the bounds, the perturbation ends up smaller than the tolerance around the bound. Such variables are flagged with a vstatNOPER qualifier and are treated much like fixed variables for purposes of pivoting (i.e., preferentially pivot this variable out of the basis, and don't trigger a new level of antidegeneracy). Though it might not be immediately obvious, this same problem (perturbation too small) can show up as a result of the perturbation reduction described in the previous paragraph. */ /* As a `lite' alternative to installing a restricted subproblem, bonsaiG can look at hyperplane alignment for the hyperplane made tight by the leaving variable. For x leaving, if it's the slack for a it makes a tight. If it's some architectural, it makes a bound hyperplane tight. The procedure is pretty obvious except for the AlignEdge and AlignObj strategies. Consider AlignObj. Suppose we have incumbent leaving variable x, which makes hyperplane a tight, and candidate x, which will make hyperplane a tight, and delta = delta (most likely both are 0). Let h be dot(-c,a), h be dot(-c,a). If h > 0, then a will tend to shut down motion in the direction -c, since it'll become tight at this vertex. (In the extreme where -c and a go in precisely the same direction, it's the proverbial brick wall.) If h < 0, then a opens in the direction of -c (alternatively, -c moves away from a). Summarised, if only one of h and h are strictly greater than 0, you have to go with it, because it shuts down the other one. Otherwise, choose on relative magnitude. For AlignEdge, it's all the same except that h<*> = dot(eta,a<*>). If we have h == h, we can try again to resolve the tie using alignment with the objective. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_primalpivot.c 4.6 10/15/05" ; static char svnid[] UNUSED = "$Id: dy_primalpivot.c 524 2013-12-15 03:59:57Z tkr $" ; /* Define this symbol to enable a thorough check of the updates to cbar and gamma, but be aware that it'll almost certainly trigger fatal errors if the LP is numerically ill-conditioned. #define CHECK_PSE_UPDATES */ #if defined(DYLP_STATISTICS) || !defined(DYLP_NDEBUG) /* Pivot counting structure for the antidegeneracy mechanism. This structure is sufficient for simple debugging; more complicated stats are collected when DYLP_STATISTICS is defined. DYSTATS_MAXDEGEN is defined in dylp.h. Field Definition ----- ---------- iterin iterin[i] is the value of tot.pivs when degeneracy level i was entered. */ typedef struct { int iterin[DYSTATS_MAXDEGEN] ; } degenstats_struct ; static degenstats_struct degenstats ; #endif /* DYLP_STATISTICS || !DYLP_NDEBUG */ /* Anti-cycling variable for the anti-degeneracy mechanism. degen_cyclecnt tracks the number of cycles and controls the reduction in the perturbation. */ static int degen_cyclecnt ; dyret_enum dy_degenout (int level) /* This routine backs out all restricted subproblems to the level given by the parameter. It copies the original value of x from dy_x into dy_xbasic, properly sets the status, adjusts dy_degenset, and resets dy_lp->degen. All variables involved in a restricted subproblem were at bound when they were collected into the subproblem. Numeric inaccuracy can cause drift over the course of pivoting. Likewise, for variables not part of the degenerate set, dy_x should equal dy_xbasic unless there's drift due to inaccuracy. This is tested as part of the accuracy checks and the antidegeneracy mechanism will be backed out if a problem is detected. Here, the same tests are just paranoia. But, this is the rationale behind resetting dy_xbasic to dy_x for variables not in the restricted subproblem, when we back out to level 0, and for coping with the possibility of status other than BLB and BUB for variables in the restricted subproblem. Parameter: level: The target level for removal of restricted subproblems. Returns: dyrOK if the restoration goes without problem, dyrREQCHK if there's been too much numerical drift since we began the degenerate subproblem. */ { int xkpos,xkndx ; double val,*vub,*vlb ; flags statk,qualk ; dyret_enum retval ; # ifdef DYLP_PARANOIA const char *rtnnme = "dy_degenout" ; # endif # ifdef DYLP_STATISTICS int curlvl,curpivs ; # endif # ifndef DYLP_NDEBUG if (dy_opts->print.degen >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: antidegeneracy dropping to level %d after %d pivots.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters,level, dy_lp->tot.pivs-degenstats.iterin[dy_lp->degen]) ; } # endif # ifdef DYLP_STATISTICS /* Record the iteration counts. This needs to be a loop because we can peel off multiple levels. */ if (dy_stats != NULL) for (curlvl = dy_lp->degen ; curlvl > level ; curlvl--) { if (curlvl < DYSTATS_MAXDEGEN) { curpivs = dy_lp->tot.pivs-degenstats.iterin[curlvl] ; dy_stats->pdegen[curlvl].totpivs += curpivs ; dy_stats->pdegen[curlvl].avgpivs = ((float) dy_stats->pdegen[curlvl].totpivs)/ dy_stats->pdegen[curlvl].cnt ; if (curpivs > dy_stats->pdegen[curlvl].maxpivs) dy_stats->pdegen[curlvl].maxpivs = curpivs ; } } # endif retval = dyrOK ; vub = dy_sys->vub ; vlb = dy_sys->vlb ; /* Back out restricted subproblems to the level specified by level. Keep in mind that all variables initially sucked into a restricted subproblem were basic at bound, but the variables currently occupying those slots could be free variables. */ for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { xkndx = dy_basis[xkpos] ; val = dy_x[xkndx] ; if (dy_degenset[xkpos] > level) { dy_degenset[xkpos] = level ; if (level == 0) clrflg(dy_status[xkndx],vstatNOPER) ; statk = dy_status[xkndx] ; if (flgon(statk,vstatBFR)) { dy_xbasic[xkpos] = dy_x[xkndx] ; } else if (flgon(statk,vstatBFX)) { dy_xbasic[xkpos] = vub[xkndx] ; } else { qualk = getflg(dy_status[xkndx],vstatQUALS) ; if (atbnd(val,vub[xkndx])) { statk = vstatBUB ; val = vub[xkndx] ; dy_x[xkndx] = val ; } else if (atbnd(val,vlb[xkndx])) { statk = vstatBLB ; val = vlb[xkndx] ; dy_x[xkndx] = val ; } else { retval = dyrREQCHK ; if (val < vlb[xkndx]) statk = vstatBLLB ; else if (val > vub[xkndx]) statk = vstatBUUB ; else statk = vstatB ; # ifdef DYLP_PARANOIA if (withintol(val,vub[xkndx], 1000*dy_tols->pfeas*(1+fabs(vub[xkndx])))) { dywarn(342,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx,val, vlb[xkndx],vub[xkndx],"bogosity",fabs(val-vub[xkndx]), 1000*dy_tols->pfeas*(1+fabs(vub[xkndx]))) ; } else if (withintol(val,vlb[xkndx], 1000*dy_tols->zero*(1+fabs(vlb[xkndx])))) { dywarn(342,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx,val, vlb[xkndx],vub[xkndx],"bogosity",fabs(val-vlb[xkndx]), 1000*dy_tols->pfeas*(1+fabs(vlb[xkndx]))) ; } else { if (fabs(val-vlb[xkndx]) < fabs(val-vub[xkndx])) { errmsg(342,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx,val, vlb[xkndx],vub[xkndx],"violation",fabs(val-vlb[xkndx]), dy_tols->pfeas*(1+fabs(vlb[xkndx]))) ; } else { errmsg(342,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx,val, vlb[xkndx],vub[xkndx],"violation",fabs(val-vub[xkndx]), dy_tols->pfeas*(1+fabs(vub[xkndx]))) ; } } # endif } setflg(statk,qualk) ; dy_status[xkndx] = statk ; dy_xbasic[xkpos] = val ; } # ifndef DYLP_NDEBUG if ((dy_opts->print.degen >= 4 && flgoff(dy_status[xkndx],vstatBLB|vstatBFX|vstatBUB)) || dy_opts->print.degen >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t%s (%d) restored to %g, status %s", consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, val,dy_prtvstat(dy_status[xkndx])) ; if (flgoff(dy_status[xkndx],vstatBLB|vstatBFX|vstatBUB|vstatBFR)) { if (fabs(val-vlb[xkndx]) < fabs(val-vub[xkndx])) dyio_outfmt(dy_logchn,dy_gtxecho,", accum. error %g (tol. %g)", fabs(val-vlb[xkndx]), dy_tols->zero*(1.0+fabs(vlb[xkndx]))) ; else dyio_outfmt(dy_logchn,dy_gtxecho,", accum. error %g (tol. %g)", fabs(val-vub[xkndx]), dy_tols->zero*(1.0+fabs(vub[xkndx]))) ; } } # endif } else if (level == 0) { if (!atbnd(val,dy_xbasic[xkpos])) { retval = dyrREQCHK ; # ifndef DYLP_NDEBUG if (dy_opts->print.degen >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t%s (%d) unperturbed, accum. error %g (tol. %g)", consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, fabs(val-dy_xbasic[xkpos]), dy_tols->zero*(1.0+fabs(dy_xbasic[xkpos]))) ; } # endif } dy_xbasic[xkpos] = val ; } } dy_lp->degen = level ; return (retval) ; } static void dy_degenin (void) /* This routine forms a new restricted subproblem, increasing the degeneracy level kept in dy_lp->degen. An initial base perturbation is calculated so that the maximum possible perturbation fraction, perturb = (base)*(concnt), is less than 1.0e-3. The base is then increased, if necessary, so that the minimum perturbation exceeds the basic feasibility tolerance. For each variable, the actual perturbation is calculated as perturb = base*xkpos*min((1+bnd),.5*(vub-vlb)). If we don't scale the perturbation by the size of the bound, we're in trouble at the upper end of the scale because the perturbation won't be big enough to move out of the tolerance range around the bound. Adding 1 to the relevant bound gets us out of trouble around zero. Taking into account the range vub-vlb saves us when both bounds are small, or when for some reason the range has been seriously reduced. It can happen that the scaled perturbation is just too small --- the routine uses the bogus number tolerance --- in which case the variable is flagged with a vstatNOPER qualifier, and will be treated essentially the same as a fixed variable for pivoting purposes (i.e., preferentially move it out of the basis). The routine should not be called if degeneracy isn't present, and will do a paranoid check to make sure that's true. Parameters: none Returns: undefined */ { int xkpos,xkndx,oldlvl ; double base,perturb,xk,ubk,lbk,toobig ; flags xkstatus ; # ifdef DYLP_PARANOIA char *rtnnme = "dy_degenin" ; # endif # if defined(DYLP_PARANOIA) || defined(DYLP_STATISTICS) || !defined(DYLP_NDEBUG) int degencnt ; degencnt = 0 ; # endif /* We want the base perturbation to be such that (concnt)*(base) <= 1.0e-3. But ... if we're in here again because the previous perturbation was too large (degen_cyclecnt > 0), decrease it by a factor of 10 for each repeat. Balance that against the notion that if the perturbation is too small (less than pfeas), we simply can't see it. */ base = pow(10.0,(-3-ceil(log10(dy_sys->concnt))-degen_cyclecnt)) ; while (base <= dy_tols->pfeas) base *= 10 ; oldlvl = dy_lp->degen++ ; # ifndef DYLP_NDEBUG if (dy_opts->print.degen >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: antidegeneracy increasing to level %d", dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,dy_lp->degen) ; if (degen_cyclecnt > 0) dyio_outfmt(dy_logchn,dy_gtxecho,", cycle %d",degen_cyclecnt) ; dyio_outfmt(dy_logchn,dy_gtxecho,", base perturbation %g%s", base,(dy_opts->print.degen >= 4)?":":".") ; } # endif # if defined(DYLP_STATISTICS) || !defined(DYLP_NDEBUG) if (dy_lp->degen < DYSTATS_MAXDEGEN) degenstats.iterin[dy_lp->degen] = dy_lp->tot.pivs ; # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL && dy_lp->degen < DYSTATS_MAXDEGEN) { if (dy_stats->pdegen[0].cnt < dy_lp->degen) dy_stats->pdegen[0].cnt = dy_lp->degen ; dy_stats->pdegen[dy_lp->degen].cnt++ ; } # endif for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { if (dy_degenset[xkpos] != oldlvl) continue ; xkndx = dy_basis[xkpos] ; xkstatus = dy_status[xkndx] ; if (flgoff(xkstatus,vstatBLB|vstatBFX|vstatBUB)) continue ; ubk = dy_sys->vub[xkndx] ; lbk = dy_sys->vlb[xkndx] ; xk = dy_xbasic[xkpos] ; toobig = .001*(ubk-lbk) ; dy_degenset[xkpos] = dy_lp->degen ; switch (xkstatus) { case vstatBLB: { dy_brkout[xkpos] = 1 ; perturb = base*xkpos*(1+fabs(lbk)) ; xk += perturb ; if (perturb < toobig && !atbnd(xk,lbk)) { dy_xbasic[xkpos] = xk ; dy_status[xkndx] = vstatB ; } else setflg(dy_status[xkndx],vstatNOPER) ; break ; } case vstatBUB: { dy_brkout[xkpos] = -1 ; perturb = base*xkpos*(1+fabs(ubk)) ; xk -= perturb ; if (perturb < toobig && !atbnd(xk,ubk)) { dy_xbasic[xkpos] = xk ; dy_status[xkndx] = vstatB ; } else setflg(dy_status[xkndx],vstatNOPER) ; break ; } case vstatBFX: { dy_brkout[xkpos] = 0 ; setflg(dy_status[xkndx],vstatNOPER) ; break ; } } # if defined(DYLP_PARANOIA) || defined(DYLP_STATISTICS) degencnt++ ; # endif # ifndef DYLP_NDEBUG if (dy_opts->print.degen >= 5 || (dy_opts->print.degen >= 4 && flgon(dy_status[xkndx],vstatNOPER) && flgoff(dy_status[xkndx],vstatBFX))) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%s %s (%d) in pos'n %d ", dy_prtvstat(dy_status[xkndx]), consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx,xkpos) ; if (flgon(dy_status[xkndx],vstatNOPER)) dyio_outfmt(dy_logchn,dy_gtxecho,"unperturbed.") ; else { dyio_outfmt(dy_logchn,dy_gtxecho,"perturbed from %g (%s) to %g", dy_x[xkndx],dy_prtvstat(xkstatus),dy_xbasic[xkpos]) ; dyio_outfmt(dy_logchn,dy_gtxecho,", breakout %s.", (dy_brkout[xkpos] == 1)?"up":"down") ; } } # endif } # ifdef DYLP_PARANOIA if (degencnt <= 0) { errmsg(327,rtnnme,dy_sys->nme) ; return ; } # endif # ifndef DYLP_NDEBUG if (dy_opts->print.degen >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"%s%d variables.", (dy_opts->print.degen <= 4)?", ":"\n\ttotal ",degencnt) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL && dy_lp->degen < DYSTATS_MAXDEGEN) { if (dy_stats->pdegen[dy_lp->degen].maxsiz < degencnt) dy_stats->pdegen[dy_lp->degen].maxsiz = degencnt ; xkndx = dy_stats->pdegen[dy_lp->degen].cnt-1 ; perturb = dy_stats->pdegen[dy_lp->degen].avgsiz ; dy_stats->pdegen[dy_lp->degen].avgsiz = (float) ((perturb*xkndx+degencnt)/(xkndx+1)) ; } # endif return ; } static bool pricexk (int k, int *p_j, double *p_ncbarj, bool *p_pivreject) /* This routine encapsulates the code used to decide if the variable x prices out more favourably than the current candidate for entry x. It's pulled out as a subroutine for readability and to make sure that the same rules are used in each location where variables are priced. The first part of the routine deals with various a priori reasons for disqualification: * x is SB and x is not * the sign of cbar is wrong for minimisation, given stat * x is NBLB or NBUB and cbar == 0 * x is flagged as NOPIVOT SB variables get past the cbar == 0 test because we want them to be basic in the final answer, so that we have a valid basic solution. NBFR variables are preferentially pivoted into the basis (where they will never leave) but in order to handle pathological examples with more free variables than constraints, we can't force this. Given that x passes the above tests and is thus a feasible candidate, we're interested in whether it's the best candidate. The tests are 1) stat == SB and stat != SB 2) |ncbar| > |ncbar| 3) stat == NBFR and stat != NBFR Parameters: k: index of x, the variable to be priced p_j: (o) if x should supplant x, xjndx will be updated, otherwise it'll be unchanged p_ncbarj: (i) |cbar|/||abar||, where x is the current candidate (o) if x should supplant x, ncbarj will be updated, otherwise it'll be unchanged p_pivreject: (o) will be set to TRUE if x could have been a contender except for being flagged with the NOPIVOT status qualifier; otherwise, it'll be unchanged. Returns: TRUE if x replaced x, FALSE otherwise. */ { int j ; double ncbarj,cbark,ncbark ; flags statk,statj ; j = *p_j ; ncbarj = *p_ncbarj ; if (j != 0) statj = dy_status[j] ; else statj = 0 ; statk = dy_status[k] ; # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tpricing %s (%d), status %s; ", consys_nme(dy_sys,'v',k,FALSE,NULL),k, dy_prtvstat(statk)) ; } # endif /* A quick status check. If x is SB and x is not, x loses and we can skip the effort of actually pricing it. */ if (flgoff(statk,vstatSB) && flgon(statj,vstatSB)) { # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) dyio_outfmt(dy_logchn,dy_gtxecho," << reject (vstatSB) >>") ; # endif return (FALSE) ; } /* Price x as ncbar = dot(c,h)/||h||, where dot(c,h) is held in cbar and ||h||^2 is held in gamma. Check that cbar has the right sign and that ncbar is big enough to consider. For SB variables, we're potentially interested even if ncbar is 0. */ cbark = dy_cbar[k] ; if ((cbark < 0 && flgon(statk,vstatNBUB)) || (cbark > 0 && flgon(statk,vstatNBLB))) { # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) dyio_outfmt(dy_logchn,dy_gtxecho," << reject (incompatible status) >>") ; # endif return (FALSE) ; } if (flgoff(statk,vstatSB)) { if (withintol(cbark,0,dy_tols->dfeas)) { # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) dyio_outfmt(dy_logchn,dy_gtxecho," << reject (zero) >>") ; # endif return (FALSE) ; } } ncbark = fabs(cbark)/sqrt(dy_gamma[k]) ; setcleanzero(ncbark,dy_tols->cost) ; # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "cbar = %g, ||h|| = %g, |cbar|/||h|| = %g.", cbark,sqrt(dy_gamma[k]),ncbark) ; } # endif /* x could enter. Reject if it's flagged with the NOPIVOT qualifier and note that we've done so. */ if (flgon(statk,vstatNOPIVOT)) { *p_pivreject = TRUE ; # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) dyio_outfmt(dy_logchn,dy_gtxecho," << reject (vstatNOPIVOT) >>") ; # endif return (FALSE) ; } /* x is suitable. The only question remaining is whether it's more suitable than x. The criteria, in order, are: 1) stat == vstatSB 2) ncbar > ncbar 3) stat == vstatNBFR and stat != vstatNBFR */ if (flgon(statk,vstatSB) && flgoff(statj,vstatSB)) { j = k ; # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) dyio_outfmt(dy_logchn,dy_gtxecho," << accept (vstatSB) >>") ; # endif } else if (ncbark > ncbarj) { j = k ; # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) dyio_outfmt(dy_logchn,dy_gtxecho," << accept (ncbar) >>") ; # endif } else if (withintol(ncbark,ncbarj,dy_tols->dfeas) && flgon(statk,vstatNBFR) && flgoff(statj,vstatNBFR)) { j = k ; # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) dyio_outfmt(dy_logchn,dy_gtxecho," << accept (vstatNBFR) >>") ; # endif } else { # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) dyio_outfmt(dy_logchn,dy_gtxecho," << reject (inferior) >>") ; # endif } if (j != *p_j) { *p_j = j ; *p_ncbarj = ncbark ; return (TRUE) ; } else { return (FALSE) ; } } dyret_enum dy_primalin (int startcol, int scan, int *xjndx, int *nextcol) /* In the normal course of events with PSE pricing, selection of the next incoming variable is made during the update of cbar and gamma. But we need a backup to select a new candidate when the preselected candidate is rejected, and we need a way to select an initial pivot. Hence this routine. dy_primalin prices columns to come up with an entering candidate. It uses a sort of partial pricing, scanning a block of columns of size scan and returning the column index of the best candidate. The routine is persistent, in the sense that it will scan until a candidate is discovered or all columns have been scanned. A return value of dyrOPTIMAL means that all columns were scanned without finding a variable suitable for pivoting into the basis. The last column scanned is returned in lastcol. (Why all this fuss? Historical inertia --- a previous version of the code used full-blown partial pricing.) If |cbar| < bogus*dfeas, x is not considered for entry unless we've just refactored. The assumed sequence of events is that primalin returns dyrOPTIMAL with xjndx == 0, triggering preoptimality, which refactors, finds loss of dual feasibility, and we're back here ready to consider tiny reduced costs. If we see cbar of the correct sign, but x is flagged as NOPIVOT, we return dyrPUNT. Roughly the same sequence will occur (preoptimality & loss of dual feasibility) but with the important side-effect of relaxing the pivot selection tolerance (so that some of the x flagged as NOPIVOT may become useable). Parameters: startcol: The first column to be priced by this call. scan: The number of columns to be priced. xjndx: (o) Index of the candidate x. nextcol: (o) The next column to be priced. Returns: dyrOK if a candidate x is found without problem, dyrOPTIMAL if no candidate is selected, dyrPUNT if no candidate was selected but there are potential x on the pivot reject list, dyrFATAL otherwise */ { int xkndx,scanned,total_scanned,scan_blk,this_blk ; flags xkstatus ; bool pivreject ; double ncbarj ; dyret_enum retval ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "dy_primalin" ; # endif # ifdef DYLP_PARANOIA if (dy_cbar == NULL) { errmsg(101,rtnnme,dy_sys->nme,"dy_cbar") ; return (dyrFATAL) ; } if (startcol <= 0 || startcol > dy_sys->varcnt) { errmsg(102,rtnnme,dy_sys->nme,"column",startcol,1,dy_sys->varcnt) ; return (dyrFATAL) ; } # endif /* Set up for the scan. We'll be looking for the largest normalised reduced cost |cbar|/||abar|| over nonbasic columns k, so 0 is bad. */ *xjndx = 0 ; ncbarj = -dy_tols->inf ; xkndx = startcol ; scan_blk = minn(scan,dy_sys->varcnt) ; retval = dyrINV ; # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: pricing %d columns from %d for %d candidate.", rtnnme,scan_blk,xkndx,1) ; } # endif /* Open up a pair of loops to start pricing columns. The outer loop gives persistence -- scan until we find something or have scanned all the columns. The inner loop steps through the columns. Make sure the size of the scan_blk is not more than the number of columns remaining to be scanned, nor larger than the distance to the end of the array. */ pivreject = FALSE ; for (total_scanned = 0 ; (total_scanned < scan_blk) || (total_scanned < dy_sys->varcnt && *xjndx == 0) ; total_scanned += scanned) { this_blk = minn(scan_blk,dy_sys->varcnt-total_scanned) ; this_blk = minn(this_blk,dy_sys->varcnt-xkndx+1) ; for (scanned = 0 ; scanned < this_blk ; scanned++,xkndx++) { xkstatus = dy_status[xkndx] ; # ifdef DYLP_PARANOIA if (dy_chkstatus(xkndx) == FALSE) return (dyrFATAL) ; # endif /* We're not interested in basic variables or nonbasic fixed variables, so step right over them. (Artificials will fall into the NBFX class). We also skip variables on the rejected pivot list, flagged as not eligible for entry with the NOPIVOT qualifier. */ if (flgon(xkstatus,vstatBASIC|vstatNBFX)) { # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tpricing %s (%d), status %s; << status >>", consys_nme(dy_sys,'v',xkndx,TRUE,NULL),xkndx, dy_prtvstat(xkstatus)) ; } # endif continue ; } /* Price x and replace the current candidate x if appropriate. */ (void) pricexk(xkndx,xjndx,&ncbarj,&pivreject) ; } /* End of loop for this_blk. We need to wrap xkndx here, after falling out of the this_blk loop, to make sure nextcol returns with the proper value when the scan ends precisely on the last column. */ if (xkndx > dy_sys->varcnt) xkndx = 1 ; } /* If we're here, then the scan went ok. As a paranoid check, if we didn't find any candidates to enter we should have scanned all the columns, hence total_scanned should equal dy_sys->varcnt and xkndx should equal startcol. */ # ifdef DYLP_PARANOIA if (*xjndx == 0) { if (total_scanned != dy_sys->varcnt || xkndx != startcol) { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } } # endif /* What's the proper return value? If we have a candidate, return dyrOK. There are three possible reasons for finding no candidate (*xjndx == 0): * We have potential pivots on the reject list: pivreject == TRUE. We want to return dyrPUNT; see comments at head of routine. * We're optimal (phase II) or infeasible (phase I): pivreject == FALSE. dyrOPTIMAL is the proper return value. * We saw some cbar with the correct sign, but they were bogus numbers: pivreject == FALSE: dyrOPTIMAL is still the correct return code; see comments at head of routine. */ if (*xjndx == 0) { if (pivreject == TRUE) retval = dyrPUNT ; else retval = dyrOPTIMAL ; } else { retval = dyrOK ; } # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: (%s)%d: scanned %d columns %d to %d, selected %d", rtnnme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, total_scanned,startcol,(xkndx-1 < 1)?dy_sys->varcnt:(xkndx-1), (*xjndx == 0)?0:1) ; if (dy_opts->print.pricing >= 2 && *xjndx != 0) { dyio_outchr(dy_logchn,dy_gtxecho,':') ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%s (%d) scaled reduced cost %g.", consys_nme(dy_sys,'v',*xjndx,TRUE,NULL),*xjndx,ncbarj) ; } else if (retval == dyrPUNT) { dyio_outfmt(dy_logchn,dy_gtxecho, ",\n\tall suitable x on rejected pivot list.") ; } else { dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } } # endif /* That's it. Report the next column to be scanned and return. */ *nextcol = xkndx ; return (retval) ; } static double cdothyper (int xkndx, int dirk) /* This routine is used in the context of primal antidegen lite, where we're trying to choose the leaving variable using hyperplane alignment with the objective. The choice of leaving variable determines the hyperplane which will become tight on completion of the pivot. The routine calculates the dot product of -c with a constraint normal a, normalised by ||a||. ||c|| doesn't change over the various candidates, so we don't need to include it in the normalisation for comparison purposes. The only thing to watch is that we get the right direction for the hyperplane. See pdirdothyper for extensive comments that explain how dirk is applied. Parameters: xkndx: index of x, the candidate to leave dirk: the direction of change; -1 to decrease, +1 to increase Returns: -dirk*dot(-c,a)/||a||, as described above, or NaN if something goes awry. */ { double dotprod ; /* If x is a slack, we want the coefficients of the explicit constraint. */ if (xkndx <= dy_sys->concnt) { dotprod = consys_dotrow(dy_sys,xkndx,dy_sys->obj) ; dotprod = dirk*dotprod/consys_2normrow(dy_sys,xkndx) ; } /* If x is an architectural, we have a bound constraint, coefficient 1.0 for x only. */ else { dotprod = dirk*(-dy_sys->obj[xkndx]) ; } setcleanzero(dotprod,dy_tols->zero) ; return (dotprod) ; } static double pdirdothyper (int xjndx, double *abarj, int dirj, int xkndx, int dirk) /* This routine is used in the context of primal antidegen lite, where we're trying to choose the leaving variable x using hyperplane alignment. The choice of entering variable x determined the edge eta to be traversed. The choice of leaving variable will determine the hyperplane ax <= b which will become tight on completion of the pivot. This routine is called with a candidate leaving variable x, and we're interested in the alignment of eta with the normal a, which will be dot(eta,a)/(||eta||)(||a||). Since ||eta|| won't change in the course of selecting a leaving variable, we don't bother with it here. If x is decreasing, we need to multiply eta by -1 to get the direction of motion right. When x is a slack, the constraint coming tight is (nominally) ax <= b. If x is in fact an upper bounded slack increasing to its upper bound, we need to multiply a by -1, since the constraint is really ax >= blow. We also need to be careful in phase I that we compensate when we're approaching a constraint from the wrong side. Here's a table: Direction bound constraint correction decreasing lb ax <= b +1 decreasing ub ax >= blow, wrong side +1 increasing ub ax >= blow -1 increasing lb ax <= b, wrong side -1 The `wrong side' cases occur in phase I. The bottom line is multiplication by -dir will do it. Here too, the dot product boils down to -abar. When x is an architectural variable, the constraint coming tight is implicit --- either the upper bound constraint x <= ub or the lower bound constraint x >= l. It's easiest to do this as a separate case. The constraint normal is e, and the norm is 1.0. The dot product simply selects -abar from eta. A little care is required to make sure we always put the constraint into <= form, particularly when we approach a bound from the wrong side in phase I, but it boils down to multiplication by dir to get it right. The paranoid calculation actually does the dot product for explicit constraints as a check, retrieving the coefficients and then translating between basis pos'n and variable index, since abar is indexed by basis pos'n while a uses variable indices. It's a small but ugly truth that the dynamic nature of the constraint system allows for us to encounter `empty' constraints, with no active variables except for the slack. Hence we need to add 1 to ||a|| to protect against division by zero. Parameters: xjndx: index of x, the entering variable abarj: inv(B)a, part of the desired direction of motion for this pivot dirj: direction of motion for x, -1 if it's decreasing from its upper bound, +1 if it's increasing from its lower bound xkndx: index of x, the candidate to leave dirk: proposed direction of motion for x, -1 to decrease, +1 to increase Returns: dir*(-dir)*dot(eta,a)/||a||, or NaN if something goes awry. */ { double dotprod,normak,abarkj ; # ifdef DYLP_PARANOIA int pkndx,xqndx,xqpos ; double xqcoeff ; pkvec_struct *ak ; pkcoeff_struct *akq ; const char *rtnnme = "pdirdothyper" ; # endif abarkj = abarj[dy_var2basis[xkndx]] ; /* Start with the case where x is a slack, and we're dealing with an explicit constraint. */ if (xkndx <= dy_sys->concnt) { # ifdef DYLP_PARANOIA /* Retrieve the constraint normal a and do the dot product. The procedure is to walk the (sparse) row, translating each column coefficient to a basis pos'n to find the proper value in eta. Exclude the slack variable (we're working with the inequality, not the equality that results from adding the slack). Multiply the accumulated result by dir to account for the entering variable's direction of motion, and -dir to account for the incoming variable's motion (hence the type of constraint coming tight). Check that we're equal to abar. */ ak = NULL ; if (consys_getrow_pk(dy_sys,xkndx,&ak) == FALSE) { errmsg(122,rtnnme,dy_sys->nme, "row",consys_nme(dy_sys,'c',xkndx,TRUE,NULL),xkndx) ; if (ak != NULL) pkvec_free(ak) ; return (quiet_nan(0)) ; } dotprod = 0 ; for (pkndx = 0, akq = ak->coeffs ; pkndx < ak->cnt ; pkndx++, akq++) { xqndx = akq->ndx ; if (xqndx == xkndx) continue ; xqcoeff = akq->val ; xqpos = dy_var2basis[xqndx] ; if (xqpos > 0) { dotprod -= xqcoeff*abarj[xqpos] ; } else if (xqndx == xjndx) { dotprod += xqcoeff ; } } pkvec_free(ak) ; if (!withintol(dotprod,abarkj,dy_tols->zero)) { errmsg(401,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1,dotprod,xjndx,xkndx,xkndx,xjndx,-abarkj, fabs(dotprod-abarkj),dy_tols->zero) ; return (quiet_nan(0)) ; } # endif normak = consys_2normrow(dy_sys,xkndx) ; dotprod = dirj*(-dirk)*(-abarkj)/(normak+1) ; } /* Architecturals need a bound constraint. As per the analysis at the head of the routine, multiplication by dir is necessary to properly convert to a <= constraint under all circumstances. */ else { dotprod = dirj*dirk*(-abarkj) ; } setcleanzero(dotprod,dy_tols->zero) ; return (dotprod) ; } static dyret_enum primalout (int xjndx, int indir, double *abarj, double maxabarj, int *xindx, int *outdir, double *deltaj) /* This routine selects the leaving variable x given the entering variable x and the direction of movement (indir) as x enters the basis. The calculation is the standard limit test, starting from the expression that x = inv(B)b - inv(B)ax. We're interesting in finding out the limit on the change in x (delta) imposed by lb, ub, and by the upper and lower bounds on the basic variables x. The minimum delta over all these determines the leaving variable x. x can move from one bound to the other and be both the entering and leaving variable. This is complicated slightly if we're working a perturbed subproblem due to degeneracy. In this case, we only consider the basic variables associated with the constraints involved in the degeneracy. If two variables have equal delta (we're about to pivot into a degenerate vertex) the tie is broken based on the stability of the pivot (default), or according to one of the alignment-based antidegen lite strategies (which see). If we find an x with a delta of 0 (we're already at a degenerate vertex) the default is to take it (and abort the scan) unless the pivot looks bogus. Again, one of the antidegen lite strategies can be specified as an option. Where the tie is between a basic variable x vs. a bound-to-bound swing of x, x always wins, because we avoid pivoting the basis. Note that during phase I, if we're out-of-bound, we calculate the limit on delta based on the maximum move (across the near bound to the far bound, when it exists, otherwise just to the near bound). The wisdom of this is debatable. It offers the possibility of many variables gaining feasibilty in a single pivot, but there are real costs associated with maintaining PSE pricing information, and hypothetical costs associated with whether this is actually good in terms of the phase I objective (c for a variable should go to 0 when it hits feasibility, so moving to the far bound might not look favorable if we were to recalculate the reduced cost) and in terms of the phase II objective (difficult to quantify). Parameters: xjndx: Index of the entering variable x. indir: Direction of motion of x. -1: decreasing from upper bound 1: increasing from lower bound abarj: Ftran'd column inv(B)a associated with x. maxabarj: MAX{i}(abar) xindx: (o) Index of the leaving variable x. Also valid for return code dyrLOSTPFEAS (in which case it is the index of the variable where feasibility loss was discovered) and dyrREQCHK (in which case it is the index of the variable whose pivot a was declared bogus). outdir: (o) Direction of motion of x, coded as: -1: decreasing to lower bound 1: increasing to upper bound deltaj: (o) Absolute value of the allowable change in x. Returns: dyret_enum code, as follows: dyrOK: a strictly basic leaving variable was successfully selected (this includes dirty degeneracy) dyrDEGEN: a basic at bound leaving variable is selected; the pivot will be (cleanly) degenerate dyrMADPIV: the pivot coefficient abar would be numerically unstable dyrREQCHK: a possibly bogus abar was selected as the pivot, and refactoring seems wise before trying to use it (basis.etas > 1 is the criteria) dyrUNBOUND: the problem is unbounded dyrLOSTPFEAS: primal feasibility has been lost dyrFATAL: fatal confusion */ { int xkpos,xkndx,outk,degencnt ; flags xkstatus ; double abarij,ratioij,aligni,deltak,abarkj,ratiokj,bndk,alignk ; bool newxi ; dyret_enum retval ; const char *rtnnme = "primalout" ; retval = dyrINV ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: selecting leaving variable, iteration %d", rtnnme,dy_lp->tot.iters+1) ; if (dy_opts->print.pivoting >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tentering variable %s (%d) %s", consys_nme(dy_sys,'v',xjndx,FALSE,NULL),xjndx, (indir > 0)?"increasing":"decreasing") ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tPos'n\tVariable\tValue\tabar\tbound\tdelta\tDisp") ; } } # endif /* Start off by assuming the entering variable x will also be the leaving variable. Calculate the limits on delta imposed by moving to ub or lb. (Using dy_x allows uniform handling of normal nonbasic and superbasic variables.) If delta is infinite, the relevant bound doesn't exist, and we'll need to find our leaving variable among the basic variables. If the allowable delta is less than or equal to 0, we have serious confusion. If delta < 0, the variable is nonbasic and outside its bounds. If delta == 0, the variable is trying to reenter at the same bound it left with, and it shouldn't have been chosen by primalin as a candidate for entry. */ *xindx = xjndx ; *outdir = indir ; abarij = 1.0 ; if (indir == -1) { *deltaj = dy_x[xjndx]-dy_sys->vlb[xjndx] ; } else { *deltaj = dy_sys->vub[xjndx]-dy_x[xjndx] ; } # ifdef DYLP_PARANOIA if (*deltaj < -dy_tols->zero) { errmsg(325,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1,consys_nme(dy_sys,'v',xjndx,FALSE,NULL), xjndx,dy_x[xjndx],dy_sys->vlb[xjndx],dy_sys->vub[xjndx], dy_prtvstat(dy_status[xjndx])) ; return (dyrFATAL) ; } if (withintol(*deltaj,0,dy_tols->zero)) { errmsg(326,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1,consys_nme(dy_sys,'v',xjndx,FALSE,NULL),xjndx, dy_x[xjndx],(indir == 1)?"ub":"lb",dy_prtvstat(dy_status[xjndx]), (indir == 1)?"ub":"lb") ; return (dyrFATAL) ; } # endif # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 3 && *deltaj < dy_tols->inf) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t n/a\t%-8s (%d)\t%7g\t%9g\t%7g\t%7g\tleaving at %s", consys_nme(dy_sys,'v',xjndx,FALSE,NULL),xjndx, (indir > 0)?dy_sys->vlb[xjndx]:dy_sys->vub[xjndx],1.0, (indir > 0)?dy_sys->vub[xjndx]:dy_sys->vlb[xjndx],*deltaj, (*outdir > 0)?"ub":"lb") ; # endif /* Open a loop to step through the basic variables. We'll keep at it until we've scanned them all, barring something extraordinary. For each variable x, we * Check if it's eligible in the presence of degeneracy (i.e., the variable is associated with a constraint in the current degenerate set). * Check that abar is nonzero. * Check for basic free -- these never leave. * Flip the sign of abar if x is entering and decreasing. This gives two cases in the next step, instead of four. */ newxi = FALSE ; ratioij = quiet_nan(0) ; aligni = quiet_nan(0) ; degencnt = 0 ; alignk = 0 ; bndk = quiet_nan(0) ; for (xkpos = 1 ; xkpos <= dy_sys->concnt && retval == dyrINV ; xkpos++) { if (dy_lp->degen > 0 && dy_degenset[xkpos] != dy_lp->degen) continue ; abarkj = abarj[xkpos] ; if (withintol(abarkj,0,dy_tols->zero)) continue ; xkndx = dy_basis[xkpos] ; xkstatus = dy_status[xkndx] ; if (flgon(xkstatus,vstatBFR)) continue ; if (indir < 0) abarkj = -abarkj ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 3) dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%5d\t%-8s (%d)\t%g\t%g\t",xkpos, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_xbasic[xkpos],(indir < 0)?-abarkj:abarkj) ; # endif /* Figure out delta = |(bnd - x)/abar|. The hard part is deciding on the proper limiting bound. Remember that if abar > 0, we're moving x toward its lower bound, and if abar < 0, we're moving x toward its upper bound. If we're in phase I dealing with an infeasible variable, look for the far bound first, and fall back to the near bound if necessary. If we're degenerate (BLB and x decreasing, BUB and x increasing, or BFX), declare delta to be 0, period. */ if (abarkj > 0.0) { if (flgon(xkstatus,vstatBLLB)) continue ; outk = -1 ; if (flgon(xkstatus,vstatBFX|vstatBLB)) { deltak = 0.0 ; # ifndef DYLP_NDEBUG bndk = dy_sys->vlb[xkndx] ; # endif } else { bndk = dy_sys->vlb[xkndx] ; if (bndk <= -dy_tols->inf) { if (dy_lp->phase == dyPRIMAL1 && flgon(xkstatus,vstatBUUB)) bndk = dy_sys->vub[xkndx] ; else continue ; } deltak = dy_xbasic[xkpos]-bndk ; } } else { if (flgon(xkstatus,vstatBUUB)) continue ; outk = 1 ; if (flgon(xkstatus,vstatBFX|vstatBUB)) { deltak = 0.0 ; # ifndef DYLP_NDEBUG bndk = dy_sys->vlb[xkndx] ; # endif } else { bndk = dy_sys->vub[xkndx] ; if (bndk >= dy_tols->inf) { if (dy_lp->phase == dyPRIMAL1 && flgon(xkstatus,vstatBLLB)) bndk = dy_sys->vlb[xkndx] ; else continue ; } deltak = bndk-dy_xbasic[xkpos] ; } } /* To make it to here, delta should be finite and positive. If delta < -dy_tols->pfeas*(1+fabs(bndk)), we've lost feasibility and it isn't reflected in the status. In phase I, it just means we've lost accuracy. In phase II, it's more serious --- we'll have to revert to phase I. In any event, we're done with searching. For values between loss of feasibility and 0, force delta to 0. */ setcleanzero(deltak,dy_tols->zero) ; if (deltak < 0.0) { if (deltak < -dy_tols->pfeas*(1+fabs(bndk))) { # ifndef DYLP_NDEBUG if (dy_opts->print.phase2 >= 1 || dy_opts->print.phase1 >= 1) dywarn(323,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1,consys_nme(dy_sys,'v',xkndx,FALSE,NULL), xkndx,dy_prtvstat(xkstatus),dy_sys->vlb[xkndx], dy_xbasic[xkpos],dy_sys->vub[xkndx],-deltak, dy_tols->pfeas*(1+fabs(bndk))) ; # endif retval = dyrLOSTPFEAS ; *xindx = xkndx ; *outdir = outk ; *deltaj = deltak ; continue ; } deltak = 0.0 ; } /* See how much we can really move. Even with a reasonable delta, we can still end up with something that looks like degeneracy if abar is very large. */ deltak = fabs(deltak/abarkj) ; setcleanzero(deltak,dy_tols->zero) ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 3) dyio_outfmt(dy_logchn,dy_gtxecho,"%g\t%g\t",bndk,deltak) ; # endif /* We have delta. Now, is x a better candidate to leave than the current incumbent x? If delta is really smaller, there's no contest. */ ratiokj = quiet_nan(0) ; if (deltak < *deltaj) { newxi = TRUE ; ratiokj = dy_chkpiv(abarkj,maxabarj) ; degencnt = 0 ; } /* If it's a tie, the first preference is to stick with x (and avoid pivoting the basis altogether). Only if abar looks good do we go to further tie-breakers. The next choice is to pivot out x if it has status BFX and the pivot is tolerable. Once out, it'll never reenter and can be purged from the active problem. Still, go for the best pivot value between BFX variables. After that, we resort to whatever tiebreaking strategy is in effect. The default action is Pivot: scan all basic variables, and break ties with |abar|. See the top of the file for additional comments about AlignObj and AlignEdge. We do not want a toleranced comparison here --- small differences in delta multiplied by large abar can result in loss of feasibility. */ else if (deltak == *deltaj && *xindx != xjndx) { ratiokj = dy_chkpiv(abarkj,maxabarj) ; if (ratiokj >= 1.0) { if (flgon(xkstatus,vstatBFX)) { if (!(flgon(dy_status[*xindx],vstatBFX) && fabs(abarij) >= fabs(abarkj))) newxi = TRUE ; } else { switch (dy_opts->degenlite) { case 0: /* pivotabort */ { if (ratiokj > ratioij) newxi = TRUE ; break ; } case 1: /* pivot */ { if (ratiokj > ratioij) newxi = TRUE ; degencnt++ ; break ; } case 2: /* alignobj */ case 3: /* alignedge */ { if (dy_opts->degenlite == 2) { if (degencnt == 0) aligni = cdothyper(*xindx,*outdir) ; alignk = cdothyper(xkndx,outk) ; } else { if (degencnt == 0) aligni = pdirdothyper(xjndx,abarj,indir,*xindx,*outdir) ; alignk = pdirdothyper(xjndx,abarj,indir,xkndx,outk) ; } degencnt++ ; if (aligni > 0 && alignk <= 0) { /* keep x */ } else if (aligni <= 0 && alignk > 0) { newxi = TRUE ; } else if (fabs(aligni) > fabs(alignk)) { newxi = TRUE ; } else if (aligni == alignk) { if (ratiokj > ratioij) newxi = TRUE ; } break ; } case 4: /* perpobj */ case 5: /* perpedge */ { if (dy_opts->degenlite == 4) { if (degencnt == 0) aligni = cdothyper(*xindx,*outdir) ; alignk = cdothyper(xkndx,outk) ; } else { if (degencnt == 0) aligni = pdirdothyper(xjndx,abarj,indir,*xindx,*outdir) ; alignk = pdirdothyper(xjndx,abarj,indir,xkndx,outk) ; } degencnt++ ; if (alignk > aligni) newxi = TRUE ; break ; } } } } } /* Is x better? If so, make x the new leaving variable x. If the user's choice of antidegen lite option is pivotabort, maybe we can skip the rest of the scan. */ if (newxi == TRUE) { *deltaj = deltak ; *xindx = xkndx ; *outdir = outk ; abarij = indir*abarkj ; ratioij = ratiokj ; aligni = alignk ; newxi = FALSE ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 3) { if (*xindx == xkndx) dyio_outfmt(dy_logchn,dy_gtxecho,"\tleaving at %s", (bndk == dy_sys->vub[xkndx])?"ub":"lb") ; } # endif if (dy_opts->degenlite == 0 && deltak == 0 && ratioij >= 1.0) break ; } } /* Why are we here? We could have broken out of the loop due to detection of loss of feasibility (dyrLOSTPFEAS), we could have broken out because we've found a BFX variable to pivot out, or we could have finished the scan (in the latter two cases, retval should still be dyrINV). If delta is still infinite, we're unbounded. A finite and nonzero delta and a numerically stable abar is what we hope for (dyrOK). We distinguish between clean degeneracy (x at bound) vs. `dirty' degeneracy (x not at bound, but delta = 0). The first gets dyrDEGEN, the second dyrOK (which will not trigger the antidegeneracy mechanism). If we're about to pivot on a bogus number, ask for a refactor first (dyrREQCHK). A numerically unstable pivot returns dyrMADPIV. But note that if we're doing a bound-to-bound pivot on a nonbasic, we're automatically ok --- neither degeneracy or a numerically unstable pivot is possible. Note that both the antidegeneracy machinery and the fact that we're running with a partial constraint system can lead to apparent unboundedness, even in primal phase I. */ switch (retval) { case dyrINV: { if (*deltaj < dy_tols->inf) { if (*xindx != xjndx) { if (ratioij >= 1.0) { if (dy_lp->basis.etas > 1 && withintol(abarij,0,dy_tols->bogus*dy_tols->zero)) { retval = dyrREQCHK ; # ifndef DYLP_NDEBUG dywarn(381,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1,"abar",*xindx,xjndx,abarij, dy_tols->bogus*dy_tols->zero, dy_tols->bogus*dy_tols->zero-fabs(abarij)) ; # endif } else if (*deltaj == 0 && degencnt > 0 && flgon(dy_status[*xindx],vstatBUB|vstatBLB|vstatBFX)) { retval = dyrDEGEN ; } else { retval = dyrOK ; } } else { retval = dyrMADPIV ; } } else { retval = dyrOK ; } } else { *xindx = -1 ; # ifndef DYLP_NDEBUG if (dy_lp->degen == 0 && (dy_opts->print.phase1 >= 2 || dy_opts->print.phase2 >= 2)) dywarn(324,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1) ; # endif retval = dyrUNBOUND ; } break ; } case dyrLOSTPFEAS: { break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } } /* We're done, except perhaps for printing some information. */ # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting == 1) dyio_outfmt(dy_logchn,dy_gtxecho,"...") ; if ((retval == dyrOK || retval == dyrDEGEN) && dy_opts->print.pivoting >= 1) { if (xjndx != *xindx) { xkpos = dy_var2basis[*xindx] ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n selected %s (%d) = %g to leave pos'n %d at", consys_nme(dy_sys,'v',*xindx,FALSE,NULL),*xindx, dy_xbasic[xkpos],xkpos) ; if (*outdir > 0) { dyio_outfmt(dy_logchn,dy_gtxecho," %s = %g, ", (dy_status[*xindx] != vstatBLLB)?"ub":"lb", (dy_status[*xindx] != vstatBLLB)? dy_sys->vub[*xindx]:dy_sys->vlb[*xindx]) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho," %s = %g, ", (dy_status[*xindx] != vstatBUUB)?"lb":"ub", (dy_status[*xindx] != vstatBUUB)? dy_sys->vlb[*xindx]:dy_sys->vub[*xindx]) ; } dyio_outfmt(dy_logchn,dy_gtxecho, "abar<%d,%d> = %g, ",xjndx,*xindx,abarij) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, "\n selected %s (%d) = %g to change to %s = %g, ", consys_nme(dy_sys,'v',*xindx,FALSE,NULL),*xindx,dy_x[*xindx], (*outdir > 0)?"ub":"lb", (*outdir > 0)?dy_sys->vub[*xindx]:dy_sys->vlb[*xindx]) ; } if (retval == dyrOK) dyio_outfmt(dy_logchn,dy_gtxecho,"delta = %g.",*deltaj) ; else dyio_outfmt(dy_logchn,dy_gtxecho,"degenerate.") ; } if (retval == dyrDEGEN && (dy_opts->print.phase1 >= 3 || dy_opts->print.phase2 >= 3)) { xkpos = dy_var2basis[*xindx] ; xkstatus = dy_status[*xindx] ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d %s pos'n %d, %s %s (%d) = %g = %s = %g", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_prtdyret(retval),xkpos,dy_prtvstat(xkstatus), consys_nme(dy_sys,'v',*xindx,FALSE,NULL),*xindx, dy_xbasic[xkpos],(*outdir > 0)?"ub":"lb", (*outdir > 0)?dy_sys->vub[*xindx]:dy_sys->vlb[*xindx]) ; if (dy_opts->degenlite >= 2 && dy_opts->degenlite <= 5) { if (degencnt > 0) dyio_outfmt(dy_logchn,dy_gtxecho, ", align = %g, deg = %d.",aligni,degencnt) ; } else { dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } } # endif return (retval) ; } static dyret_enum primalupdate (int xjndx, int indir, int xindx, int outdir, double *abarj, double delta, double *betai) /* This routine is responsible for updating the various data structures which hold the basis, status, and primal and dual variable values. Nondegenerate pivots will have delta > 0, and require a full scan of the basic variables to update their values. In the process, the value of the leaving variable will be updated. `Dirty' degeneracy gives us delta == 0, but requires some special handling to force the leaving variable to bound. Other pivots with delta == 0 require no updates to the basic variables. There's a fair bit of attention given here to controlling roundoff, with a (hopefully) intelligent choice of tolerances so that we get clean values when x approaches 0 or a bound. Generally, the rule is to try and scale the snap interval by the larger of the absolute value of the target value or the distance travelled to get there. If we decide we've seen a bogus value, we can't just bail out. That leaves the status information completely inconsistent and we'll fail a subsequent status check. For the purposes of this routine, a value is bogus if either |value| < tols.bogus or |lb-value| < tols.bogus or |ub-value| < tols.bogus. (The latter two come from the notion of trying to snap variables to bound.) Parameters: xjndx: index of the entering variable x indir: the direction of change of the entering variable xindx: index of the leaving variable x outdir: the direction of change of the outgoing variable abarj: the ftran'd column abar = inv(B)a delta: the amount of change of the entering variable; always >= 0. betai: the ith row of inv(B); used for updating dual variables. NOTE that cbar, abar, and beta are all calculated prior to the pivot! Returns: dyrOK if all goes well, dyrSWING if a variable grew too much, dyrREQCHK if a bogus value is calculated or the pivot is dirty degenerate, and dyrFATAL if paranoid checks fail. */ { int xkpos,xkndx,xipos ; flags xkstatus,quals ; dyret_enum retval ; double val,deltak,ubk,lbk,eps0,epsu,epsl,cbarj,abarij ; bool dirtyz,swing ; double swingratio,maxswing ; int swingndx ; const char *rtnnme = "primalupdate" ; # ifndef DYLP_NDEBUG int print ; # endif retval = dyrOK ; dirtyz = FALSE ; swing = FALSE ; maxswing = 0 ; swingndx = -1 ; xipos = dy_var2basis[xindx] ; abarij = abarj[xipos] ; cbarj = dy_cbar[xjndx] ; # ifndef DYLP_NDEBUG if (dy_lp->phase == dyPRIMAL1) print = dy_opts->print.phase1 ; else print = dy_opts->print.phase2 ; if (print >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%s: updating at iteration %d:",rtnnme, dy_lp->tot.iters+1) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t%s (%d) entering pos'n %d from %s%g, delta %g, cbarj %g.", consys_nme(dy_sys,'v',xjndx,FALSE,NULL),xjndx,xipos, (dy_status[xjndx] == vstatSB)?"":((indir == 1)?"lb ":"ub "), dy_x[xjndx],(indir == 1)?delta:-delta,dy_cbar[xjndx]) ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%s (%d) = %g leaving at ", consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx, dy_xbasic[xipos]) ; if (outdir == 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"%s %g, pivot %g.", flgon(dy_status[xindx],vstatBLLB)?"lb":"ub", flgon(dy_status[xindx],vstatBLLB)? dy_sys->vlb[xindx]:dy_sys->vub[xindx],abarij) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,"%s %g, pivot %g.", flgon(dy_status[xindx],vstatBUUB)?"ub":"lb", flgon(dy_status[xindx],vstatBUUB)? dy_sys->vub[xindx]:dy_sys->vlb[xindx],abarij) ; } } # endif /* Update the value and status of the basic variables to reflect the change in x. The calculation is straightforward, from the formulas: z = cinv(B) + (c - cinv(B)a)*delta = z + cbar*delta x = inv(B)b - (inv(B)a)*delta = x - abar*delta Note that while the antidegeneracy mechanism is active, we're really doing degenerate pivots in the original, unperturbed problem, so we shouldn't change the objective or any variables not part of the restricted problem. Nor do we update dy_x for the variables in the restricted subproblem -- dy_x is holding their original values for when we back out the perturbation. As we're updating the basic variables, collect the 1-norm to scale the primal feasibility tolerance. Paranoid checks: * We should never attempt to change the value of a fixed variable. But, we'll occasionally fudge this in order to promote a sane pivot over mad pivots. In this case, the change should never exceed pfeas. * In phase I, infeasible variables should not overshoot their opposite bound (see comments in primalout), and feasible variables should not loose feasibility. * In phase II, variables should always remain feasible. */ if (delta > 0.0) { if (indir == -1) delta = -delta ; if (dy_lp->degen == 0) { dy_lp->z += cbarj*delta ; setcleanzero(dy_lp->z,dy_tols->zero) ; } for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { if (abarj[xkpos] != 0 && dy_degenset[xkpos] == dy_lp->degen) { deltak = abarj[xkpos]*delta ; if (withintol(deltak,0,dy_tols->zero)) continue ; xkndx = dy_basis[xkpos] ; xkstatus = getflg(dy_status[xkndx],vstatSTATUS) ; quals = getflg(dy_status[xkndx],vstatQUALS) ; eps0 = dy_tols->zero ; ubk = dy_sys->vub[xkndx] ; if (ubk < dy_tols->inf) { epsu = dy_tols->pfeas*(1.0+fabs(ubk)) ; } else epsu = 0 ; lbk = dy_sys->vlb[xkndx] ; if (-dy_tols->inf < lbk) { epsl = dy_tols->pfeas*(1.0+fabs(lbk)) ; } else epsl = 0 ; val = dy_xbasic[xkpos]-deltak ; setcleanzero(val,eps0) ; if (val != 0.0 && fabs(val) < eps0*dy_tols->bogus && dy_lp->basis.etas > 1) { retval = dyrREQCHK ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) dywarn(374,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"x",xkndx,fabs(val), eps0*dy_tols->bogus,eps0*dy_tols->bogus-val) ; # endif } # ifdef DYLP_PARANOIA if (flgon(xkstatus,vstatBFX) && fabs(deltak) > dy_tols->pfeas) { errmsg(345,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx,val, dy_lp->tot.iters+1,delta) ; return (dyrFATAL) ; } if (dy_lp->phase == dyPRIMAL1) { if ((flgon(xkstatus,vstatBLLB) && val > ubk+epsu) || (flgon(xkstatus,vstatBUUB) && val < lbk-epsl)) { errmsg(344,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(xkstatus),dy_lp->tot.iters+1,val,lbk,ubk,delta) ; return (dyrFATAL) ; } if (flgon(xkstatus,vstatBLB|vstatB|vstatBUB) && (val < lbk-dy_tols->bogus*epsl || val > ubk+dy_tols->bogus*epsu)) { if (val < lbk-dy_tols->bogus*epsl) errmsg(323,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(xkstatus),lbk,val,ubk, (lbk-dy_tols->bogus*epsl)-val,dy_tols->bogus*epsl) ; else errmsg(323,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(xkstatus),lbk,val,ubk, val-(ubk+dy_tols->bogus*epsu),dy_tols->bogus*epsu) ; return (dyrFATAL) ; } } else if (dy_lp->phase == dyPRIMAL2 && (val < lbk-dy_tols->bogus*epsl || val > ubk+dy_tols->bogus*epsu)) { if (val < lbk-epsl) errmsg(323,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(xkstatus),lbk,val,ubk, (lbk-dy_tols->bogus*epsl)-val,dy_tols->bogus*epsl) ; else errmsg(323,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(xkstatus),lbk,val,ubk, val-(ubk+dy_tols->bogus*epsu),dy_tols->bogus*epsu) ; return (dyrFATAL) ; } # endif switch (xkstatus) { case vstatB: case vstatBLB: case vstatBUB: { if (atbnd(val,ubk)) { dy_status[xkndx] = vstatBUB ; } else if (atbnd(val,lbk)) { dy_status[xkndx] = vstatBLB ; } else { dy_status[xkndx] = vstatB ; } break ; } case vstatBLLB: { if (belowbnd(val,lbk)) { /* do nothing */ } else if (atbnd(val,lbk)) { if (lbk == ubk) dy_status[xkndx] = vstatBFX ; else dy_status[xkndx] = vstatBLB ; } else if (belowbnd(val,ubk)) { dy_status[xkndx] = vstatB ; } else { dy_status[xkndx] = vstatBUB ; } break ; } case vstatBUUB: { if (abovebnd(val,ubk)) { /* do nothing */ } else if (atbnd(val,ubk)) { if (lbk == ubk) dy_status[xkndx] = vstatBFX ; else dy_status[xkndx] = vstatBUB ; } else if (abovebnd(val,lbk)) { dy_status[xkndx] = vstatB ; } else { dy_status[xkndx] = vstatBLB ; } break ; } case vstatBFR: case vstatBFX: { break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } } setflg(dy_status[xkndx],quals) ; /* Check for bogus values, within the bogosity tolerance of a bound but not close enough to snap to it. */ if (flgoff(dy_status[xkndx],vstatBFX|vstatBLB|vstatBUB)) { if (fabs(val-lbk) < epsl*dy_tols->bogus && dy_lp->basis.etas > 1) { retval = dyrREQCHK ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) dywarn(375,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"x",xkndx,"lb",xkndx, val,lbk,val-lbk,epsl*dy_tols->bogus, epsl*dy_tols->bogus-(val-lbk)) ; # endif } else if (fabs(ubk-val) < epsu*dy_tols->bogus && dy_lp->basis.etas > 1) { retval = dyrREQCHK ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) dywarn(375,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"ub",xkndx,"x",xkndx, ubk,val,ubk-val,epsu*dy_tols->bogus, epsu*dy_tols->bogus-(ubk-val)) ; # endif } } swingratio = (fabs(val)+1)/(fabs(dy_xbasic[xkpos])+1) ; if (swingratio > dy_tols->swing) { swing = TRUE ; if (swingratio > maxswing) { maxswing = swingratio ; swingndx = xkndx ; } } dy_xbasic[xkpos] = val ; if (dy_lp->degen == 0) dy_x[xkndx] = val ; # ifdef DYLP_PARANOIA /* Check that x has acquired the proper status after the update of basic variables. */ if ((xkndx == xindx) && !flgon(dy_status[xindx],vstatBLB|vstatBFX|vstatBUB)) { if (fabs(ubk-val) < fabs(lbk-val)) { if (fabs(ubk-val) < 100*epsu) { dywarn(357,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx, dy_prtvstat(dy_status[xindx]),"ub",ubk,val,val-ubk,epsu) ; } else { errmsg(357,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx, dy_prtvstat(dy_status[xindx]),"ub",ubk,val,val-ubk,epsu) ; return (dyrFATAL) ; } } else { if (fabs(lbk-val) < 100*epsl) { dywarn(357,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx, dy_prtvstat(dy_status[xindx]),"lb",lbk,val,lbk-val,epsl) ; } else { errmsg(357,rtnnme,dy_sys->nme, consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx, dy_prtvstat(dy_status[xindx]),"lb",lbk,val,lbk-val,epsl) ; return (dyrFATAL) ; } } } # endif } } } /* This next clause is for `dirty' degeneracy. See the notes at the top of the file. In effect, we clean up by forcing the variable to the appropriate bound. A little care is required to decide what the appropriate bound really is when in phase I. Set a flag if we need to recalculate the objective function (after completing the update bookkeeping for x and x). */ else if (xjndx != xindx && flgoff(dy_status[xindx],vstatBFX|vstatBLB|vstatBUB)) { if (dy_lp->degen == 0) dirtyz = TRUE ; xkstatus = getflg(dy_status[xindx],vstatSTATUS) ; lbk = dy_sys->vlb[xindx] ; ubk = dy_sys->vub[xindx] ; if (lbk == ubk) { val = lbk ; xkstatus = vstatBFX ; } else if (outdir < 0) { val = lbk ; if (val <= -dy_tols->inf) { if (dy_lp->phase == dyPRIMAL1 && flgon(xkstatus,vstatBUUB)) { val = ubk ; xkstatus = vstatBUB ; } else { errmsg(382,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,consys_nme(dy_sys,'v',xindx,FALSE,NULL), xindx,"lb",val) ; return (dyrFATAL) ; } } else { xkstatus = vstatBLB ; } } else { val = ubk ; if (val >= dy_tols->inf) { if (dy_lp->phase == dyPRIMAL1 && flgon(xkstatus,vstatBLLB)) { val = lbk ; xkstatus = vstatBLB ; } else { errmsg(382,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,consys_nme(dy_sys,'v',xindx,FALSE,NULL), xindx,"ub",val) ; return (dyrFATAL) ; } } else { xkstatus = vstatBUB ; } } dy_xbasic[xipos] = val ; dy_status[xindx] = 0 ; setflg(dy_status[xindx],xkstatus) ; if (dy_lp->degen == 0) dy_x[xindx] = val ; retval = dyrREQCHK ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n %s (%d) = %g, %s, leaving at %s, dirty degenerate pivot.", consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx,dy_xbasic[xipos], dy_prtvstat(dy_status[xindx]),(outdir < 0)?"lb":"ub") ; } # endif } /* Deal with the entering and leaving variables. In the case where the entering variable x and the leaving variable x are different variables, the value at entry is obtained from dy_x, rather than going to the upper or lower bound vectors. This lets us handle superbasics and variables at bound uniformly. If delta != 0, the final status for x should be B or BFR (if x was NBFR). But it's not that simple --- a very small or very large delta, combined with a relatively large pfeas tolerance, can leave us at either of BLB or BUB, regardless of where we started from. If the pivot is degenerate, we simply convert from nonbasic to the equivalent basic status. As above, if the antidegeneracy mechanism is active, we don't update dy_x for x. On the other hand, if it is active, we have to update the breakout entry for this basis position. The proper value is the entry direction, since in the original, nondegenerate problem, the entering variable remains at the bound it entered from. We updated all basic variables in the previous loop, including the leaving variable x, so it will have status BLB, BUB, or BFX as we move it to the nonbasic partition here. We'll set dy_x from the bounds vector as a check on accumulated inaccuracy due to incremental modification. When x == x is both the entering and leaving variable, we need only change its status and value. Note that if a superbasic is selected to enter and then driven to bound, it will also be selected as the leaving variable, so if it remains in the basis, it'll have status B. */ if (xjndx != xindx) { dy_var2basis[xjndx] = xipos ; dy_var2basis[xindx] = 0 ; dy_basis[xipos] = xjndx ; xkstatus = getflg(dy_status[xindx],vstatSTATUS) ; if (xkstatus == vstatBLB) { dy_status[xindx] = vstatNBLB ; dy_x[xindx] = dy_sys->vlb[xindx] ; } else if (xkstatus == vstatBUB) { dy_status[xindx] = vstatNBUB ; dy_x[xindx] = dy_sys->vub[xindx] ; } else { dy_status[xindx] = vstatNBFX ; dy_x[xindx] = dy_sys->vlb[xindx] ; } if (delta != 0) { val = dy_x[xjndx]+delta ; swingratio = (fabs(val)+1)/(fabs(dy_x[xjndx])+1) ; if (swingratio > dy_tols->swing) { swing = TRUE ; if (swingratio > maxswing) { maxswing = swingratio ; swingndx = xjndx ; } } setcleanzero(val,dy_tols->zero*(1.0+fabs(delta))) ; switch (dy_status[xjndx]) { case vstatNBLB: case vstatNBUB: case vstatSB: { if (atbnd(val,dy_sys->vub[xjndx])) dy_status[xjndx] = vstatBUB ; else if (atbnd(val,dy_sys->vlb[xjndx])) dy_status[xjndx] = vstatBLB ; else dy_status[xjndx] = vstatB ; break ; } case vstatNBFR: { dy_status[xjndx] = vstatBFR ; break ; } # ifdef DYLP_PARANOIA default: { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } # endif } } else { val = dy_x[xjndx] ; switch (dy_status[xjndx]) { case vstatNBLB: { dy_status[xjndx] = vstatBLB ; break ; } case vstatNBUB: { dy_status[xjndx] = vstatBUB ; break ; } case vstatSB: { dy_status[xjndx] = vstatB ; break ; } case vstatNBFR: { dy_status[xjndx] = vstatBFR ; break ; } # ifdef DYLP_PARANOIA default: { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } # endif } } if (dy_lp->degen > 0) dy_brkout[xipos] = indir ; else dy_x[xjndx] = val ; dy_xbasic[xipos] = val ; } else { if (outdir == 1) { dy_status[xindx] = vstatNBUB ; dy_x[xindx] = dy_sys->vub[xindx] ; } else { dy_status[xindx] = vstatNBLB ; dy_x[xindx] = dy_sys->vlb[xindx] ; } } /* Do we need to recalculate the objective, as a result of dirty degeneracy? */ if (dirtyz == TRUE) { dy_lp->z = dy_calcobj() ; } # ifdef DYLP_PARANOIA else { val = dy_calcobj() ; if (fabs(val-dy_lp->z) > fabs(.001*(1+fabs(val)))) { dywarn(405,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters+1,dy_lp->z,val,fabs(dy_lp->z-val), fabs(.001*val)) ; } } # endif /* Do we need to update the duals? y = cinv(B), so an update is required only if we actually pivoted (x != x) and thus changed c. We'll update even during primal I, but keep in mind that c might be revised in tweakp1obj if a variable other than x gained feasibility with this pivot. */ if (xjndx != xindx) { if (fabs(cbarj) > dy_tols->cost) { for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { deltak = cbarj*betai[xkpos] ; deltak = deltak/abarij ; val = dy_y[xkpos]+deltak ; setcleanzero(val,dy_tols->cost) ; if (val != 0.0 && dy_lp->basis.etas > 1 && fabs(val) < dy_tols->cost*dy_tols->bogus) { retval = dyrREQCHK ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) dywarn(374,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"y",xkpos,fabs(val), dy_tols->cost*dy_tols->bogus, dy_tols->cost*dy_tols->bogus-val) ; # endif } dy_y[xkpos] = val ; } } } /* Decide on a return value. Swing overrides the others, as it'll cause us to pop out of simplex. (But if there are no loadable constraints, then let's not, eh?) */ if (swing == TRUE) { if (dy_lp->sys.cons.loadable > 0) { retval = dyrSWING ; } dy_lp->ubnd.ndx = swingndx ; dy_lp->ubnd.ratio = maxswing ; # ifndef DYLP_NDEBUG if (print >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n Pseudo-unbounded: growth %e for %s (%d)", dy_lp->ubnd.ratio, consys_nme(dy_sys,'v',dy_lp->ubnd.ndx,FALSE,NULL), dy_lp->ubnd.ndx) ; } # endif } /* That's it, except for some informational printing. */ # ifndef DYLP_NDEBUG if (print >= 5) { bool first,all ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\trevised objective %g.",dy_lp->z) ; # ifdef DYLP_PARANOIA if (dy_lp->phase == dyPRIMAL2) { deltak = dy_calcobj() ; if (!atbnd(deltak,dy_lp->z)) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tWHOOPS! updated obj - true obj = %g - %g = %g > %g", dy_lp->z,deltak,dy_lp->z-deltak,dy_tols->dchk) ; } # endif if (print >= 6) all = TRUE ; else all = FALSE ; first = TRUE ; for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) if (abarj[xkpos] != 0 || all == TRUE) { if (first == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%sprimal variables:", (all == TRUE)?"":"revised ") ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n%8s%20s%16s%16s%16s %s","pos'n","var (ndx)", "lb","val","ub","status") ; first = FALSE ; } xkndx = dy_basis[xkpos] ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n%8d%14s (%3d)%16.8g%16.8g%16.8g %s",xkpos, consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_sys->vlb[xkndx],dy_xbasic[xkpos],dy_sys->vub[xkndx], dy_prtvstat(dy_status[xkndx])) ; } if (first == TRUE) dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tno change to primal variables.") ; if (print >= 7) { if (xindx != xjndx) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n dual variables, cbar tolerance %g", dy_tols->dfeas) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n%8s%20s%16s","pos'n","constraint","val") ; for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%8d%20s%16.8g",xkpos, consys_nme(dy_sys,'c',xkpos,FALSE,NULL),dy_y[xkpos]) ; } } else { dyio_outfmt(dy_logchn,dy_gtxecho, "\n no change to dual variables.") ; } } } # endif return (retval) ; } #ifdef CHECK_PSE_UPDATES static bool check_pse_update (int xkndx, double u_cbark, double u_gammak) /* This routine checks x for consistent status, then does one of the following: * For nonbasic variables it does a `from scratch' calculation of cbar and gamma to check the accuracy of the PSE update calculations. * For basic variables, it checks that inv(B)a is a unit vector with a 1 in the basis position occupied by x. The routine should not be called for a variable with status NBFX. The calculations are: cbar = c - c(inv(B)a) gamma~ = ||abar~||^2, where abar = inv(B)a and abar~ is abar with non-reference-frame entries removed. Parameters: xkndx: index for column u_cbark: updated cbar u_gammak: updated gamma Returns: TRUE if the updated values agree with values calculated from first principles, FALSE otherwise. */ { int xipos,xindx,xkpos ; double *abark,cbark,gammak ; bool retval ; const char *rtnnme = "check_pse_update" ; /* Make sure we're ok with the status of the variable. */ if (dy_chkstatus(xkndx) == FALSE) return (FALSE) ; /* The next thing we want to do is extract the column and FTRAN it. */ abark = NULL ; if (consys_getcol_ex(dy_sys,xkndx,&abark) == FALSE) { errmsg(122,rtnnme,dy_sys->nme, "column",consys_nme(dy_sys,'v',xkndx,TRUE,NULL),xkndx) ; if (abark != NULL) FREE(abark) ; return (FALSE) ; } dy_ftran(abark,FALSE) ; retval = TRUE ; /* Do the appropriate check. For x basic, check that inv(B)a is a unit vector with a 1 in the basis position occupied by x. */ if (flgon(dy_status[xkndx],vstatBASIC)) { xkpos = dy_var2basis[xkndx] ; for (xipos = 1 ; xipos <= dy_sys->concnt ; xipos++) { if (xipos == xkpos) { if (!withintol(abark[xipos],1.0,dy_tols->zero)) { errmsg(385,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,xipos,xkndx,abark[xipos],1.0, abark[xipos]-1.0,dy_tols->zero) ; retval = FALSE ; } } else { if (!withintol(abark[xipos],0.0,dy_tols->zero)) { errmsg(385,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,xipos,xkndx,abark[xipos],0.0, abark[xipos],dy_tols->zero) ; retval = FALSE ; } } } } /* For nonbasic variables, calculate the reduced cost, c - cabar. Calculate the projected column norm using only those elements in the reference frame. gamma must be at least 1, since every nonbasic variable should be in the reference frame. */ else { cbark = dy_sys->obj[xkndx] ; gammak = 1.0 ; for (xipos = 1 ; xipos <= dy_sys->concnt ; xipos++) { xindx = dy_basis[xipos] ; cbark -= dy_sys->obj[xindx]*abark[xipos] ; if (dy_frame[xindx] == TRUE) gammak += abark[xipos]*abark[xipos] ; } if (!withintol(cbark,u_cbark,dy_tols->reframe*(1+fabs(cbark)))) { errmsg(388,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"cbar",xkndx,u_cbark,cbark,fabs(u_cbark-cbark), dy_tols->reframe*(1+fabs(cbark))) ; retval = FALSE ; } if (!withintol(gammak,u_gammak,dy_tols->reframe*(1+fabs(gammak)))) { errmsg(388,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"gamma",xkndx,u_gammak,gammak, fabs(u_gammak-gammak),dy_tols->reframe*(1+fabs(gammak))) ; retval = FALSE ; } } if (abark != NULL) FREE(abark) ; return (retval) ; } #endif static dyret_enum pseupdate (int xjndx, int xindx, int *candxj, double *abarj, double *v, double *betai) /* This routine updates the reduced cost vector dy_cbar and the column norm vector dy_gamma. We're doing projected steepest edge, and vectors tagged with `~' include only entries corresponding to variables in the reference frame. The update formulas are as follows: cbar' = -cbar/abar cbar' = cbar - cbar*(abar/abar) k != i gamma' = gamma/abar^2 gamma' = gamma - 2*(abar/abar)*dot(a,v) + (abar/abar)^2*gamma k != i It'd be easy to collapse the update formula for cbar' to that of cbar', since cbar = 0 and abar = 1 for x basic. But, the algebra to collapse the formulas for gamma isn't so transparent, and we can skip a dot product, so they are kept separate. Having introduced the special case, we might as well use it for cbar' too, since there's some advantage in robustness (we don't have to worry about values of gamma or cbar for basic variables, since they get reset when the become nonbasic). We use betai to calculate the values abar for each column. If the leaving variable x is not already a member of the reference framework, it's added, and gamma is boosted by 1. pseupdate is also responsible for deciding if a reference frame reset is in order, and carrying it out if necessary. The test is that the iteratively updated column norm gamma be within a percentage (dy_tols->reframe) of the exact norm ||abar~||^2. If the LP is numerically illconditioned, the gamma updates can begin to drift, and this may not be picked up in a timely manner by the reframe test. The one thing we watch out for when calculating any gamma update is a value < 1, and reset the update to 1 when this happens. The cbar updates don't seem to give any trouble, numerically speaking. NOTE that the basis has been pivoted by the time this routine is called, and the arrays dy_basis, dy_var2basis, and dy_status reflect this. Parameters: xjndx: index of the entering variable xindx: index of the leaving variable candxj: (o) the index of the variable chosen to enter on the next pivot abarj: inv(B)a, calculated prior to pivoting the basis v: abar~inv(B), calculated prior to pivoting the basis betai: einv(B), row i of the basis inverse, calculated prior to pivoting the basis Returns: dyrOK if the update proceeds without error and a new candidate x is selected; dyrOPTIMAL if the update proceeds without error and no x is selected; dyrPUNT if the update proceeds without error but all candidate x were flagged with the NOPIVOT qualifier; dyrFATAL if there's a problem (only if we're paranoid). */ { int xkpos,xkndx,xipos ; double abarij,cbarj,gammaj,abarik,alphak,cbark,gammak,akdotv,candcbarj ; flags xkstatus ; bool reset,pivreject ; dyret_enum retval ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "pseupdate" ; # endif /* Do a little prep, pulling out common values and setting initial values. Remember that x is now occupying the basis position vacated by x. Set the reduced cost for x to 0, since it's now basic. */ xipos = dy_var2basis[xjndx] ; abarij = abarj[xipos] ; cbarj = dy_cbar[xjndx] ; dy_cbar[xjndx] = 0 ; retval = dyrINV ; candcbarj = -dy_tols->inf ; *candxj = 0 ; /* Do we need to reset the frame of reference? The test is that the iteratively updated norm gamma is within dy_tols->reframe percent of the exact value ||abar~||^2+1. We need to be careful here --- we're contemplating norms as of prior to the pivot, so we need the previous basis image. Working on the ``make the common case fast'' theory, even if a reset is needed we'll proceed with the updates as if nothing has happened, then rewrite dy_frame and dy_gamma at the end. */ dy_basis[xipos] = xindx ; gammaj = 1 ; for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) if (dy_frame[dy_basis[xkpos]] == TRUE) gammaj += abarj[xkpos]*abarj[xkpos] ; if (!withintol(dy_gamma[xjndx],gammaj,dy_tols->reframe*gammaj)) { reset = TRUE ; # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n %s: (%s)%d: resetting reference frame; trigger %s (%d)", dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',xjndx,FALSE,NULL),xjndx) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\texact gamma = %g, approx = %g, error = %g, tol = %g.", gammaj,dy_gamma[xjndx],fabs(gammaj-dy_gamma[xjndx]), dy_tols->reframe*gammaj) ; } # endif } else { reset = FALSE ; } dy_basis[xipos] = xjndx ; dy_gamma[xjndx] = gammaj ; /* Open a loop to walk the nonbasic variables, updating the reduced costs and column norms. (But note that we don't bother with nonbasic fixed variables, which will never pivot in.) The first thing we do, once we enter the loop, is calculate alpha. If it's zero, then no update will be needed. */ pivreject = FALSE ; for (xkndx = 1 ; xkndx <= dy_sys->varcnt ; xkndx++) { xkstatus = dy_status[xkndx] ; if (flgon(xkstatus,vstatBASIC|vstatNBFX)) { # ifdef CHECK_PSE_UPDATES if (flgon(xkstatus,vstatBASIC)) if (check_pse_update(xkndx,0,0) == FALSE) return (dyrFATAL) ; # endif continue ; } abarik = consys_dotcol(dy_sys,xkndx,betai) ; # ifdef DYLP_PARANOIA if (isnan(abarik) == TRUE) { errmsg(320,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"beta",xkndx,"PSE update") ; return (dyrFATAL) ; } # endif alphak = abarik/abarij ; setcleanzero(alphak,dy_tols->zero) ; # ifdef DYLP_PARANOIA /* Since x was basic when we extracted betai, abar should be 1.0. While we don't check for it explicitly, alpha should not be 0 --- it could only happen if |1/abar| < dy_tols->zero, and you have to wonder why we're here in that case. So we're guaranteed to execute the updates on cbar and gamma (which don't depend on alpha, in spite of the appearance that they could be skipped due to alpha = 0). Arguably we should return a fatal error when this check fails, but it can be dealt with as an accuracy problem. Scaling can tighten tols.zero, which we don't want here, so hardwire the default value of 1.0e-11. */ if (xindx == xkndx) { if (!withintol(abarik,1.0,dy_tols->bogus*1.0e-11)) { if (!withintol(abarik,1.0,.001)) { errmsg(385,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,xindx,xkndx,abarik,1.0,abarik-1.0,.001) ; } else { dywarn(385,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,xindx,xkndx,abarik,1.0,abarik-1.0, dy_tols->bogus*dy_tols->zero) ; } } } # endif /* If alpha is nonzero, we have actual update work ahead. For handy reference, the formulas are: cbar' = -cbar/abar cbar' = cbar - cbar*alpha gamma' = gamma/abar^2 gamma' = gamma - 2*alpha*dot(a,v) + alpha^2*gamma Also, we need to add x to the reference frame, if it's not already in it (including bumping gamma by +1). While it may look like we're risking the update of gamma, we're not --- as mentioned above, alpha should not be 0. As a pragmatic solution to numerical error, if gamma comes up less than 1, set it to 1. */ if (alphak != 0) { if (xkndx != xindx) { cbark = dy_cbar[xkndx]-cbarj*alphak ; akdotv = consys_dotcol(dy_sys,xkndx,v) ; # ifdef DYLP_PARANOIA if (isnan(akdotv) == TRUE) { errmsg(320,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"v",xkndx,"PSE update") ; return (dyrFATAL) ; } # endif gammak = dy_gamma[xkndx]-alphak*(2*akdotv-alphak*gammaj) ; } else { cbark = -cbarj/abarij ; gammak = gammaj/(abarij*abarij) ; if (dy_frame[xkndx] != TRUE) { dy_frame[xkndx] = TRUE ; gammak += 1 ; } } setcleanzero(cbark,dy_tols->cost) ; dy_cbar[xkndx] = cbark ; if (gammak < 1.0) gammak = 1.0 ; dy_gamma[xkndx] = gammak ; } # ifdef CHECK_PSE_UPDATES if (check_pse_update(xkndx,dy_cbar[xkndx],dy_gamma[xkndx]) == FALSE) return (dyrFATAL) ; # endif /* Updates are finished. Price x and replace the current candidate x if appropriate. */ (void) pricexk(xkndx,candxj,&candcbarj,&pivreject) ; } /* That's the end of the PSE update & pricing loop. Did we decide up at the top that we need a reference frame reset? If so, do it now, before we get into setting the return value. */ if (reset == TRUE) { memset(dy_frame,0,(dy_sys->varcnt+1)*sizeof(bool)) ; memset(dy_gamma,0,(dy_sys->varcnt+1)*sizeof(double)) ; for (xkndx = 1 ; xkndx <= dy_sys->varcnt ; xkndx++) { if (flgon(dy_status[xkndx],vstatNONBASIC|vstatEXOTIC)) { dy_frame[xkndx] = TRUE ; dy_gamma[xkndx] = 1.0 ; } } } /* What's the proper return value? If we've found a candidate x, return dyrOK. There are three possible reasons for finding no candidate (candxj == 0): * We have potential pivots on the reject list: pivreject == TRUE. We want to return dyrPUNT; see comments at head of dy_primalin. * We're optimal (phase II) or infeasible (phase I): pivreject == FALSE. dyrOPTIMAL is the proper return value. * We saw some cbar with the correct sign, but they were bogus numbers: pivreject == FALSE. dyrOPTIMAL is still the correct return code; see comments at the head of dy_primalin. */ if (*candxj == 0) { if (pivreject == TRUE) retval = dyrPUNT ; else retval = dyrOPTIMAL ; } else { retval = dyrOK ; } # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 2) { if (*candxj != 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: (%s)%d: selected %s (%d), PSE price %g.", rtnnme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',*candxj,TRUE,NULL), *candxj,candcbarj) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: (%s)%d: no suitable candidates.",rtnnme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } } if (dy_opts->print.pricing >= 1) { if (retval == dyrPUNT) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: (%s)%d: all suitable x on rejected pivot list.", rtnnme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; } } # endif return (retval) ; } dyret_enum dy_primalpivot (int xjndx, int indir, int *p_xindx, int *p_outdir, double *p_abarij, double *p_delta, int *p_xjcand) /* This routine executes a primal pivot. It calculates abar = inv(B)a (i.e., it ftran's the pivot column) and calls primalout to determine the leaving variable. It then calls dy_pivot (which in turn calls inv_update) to update the basis representation, and makes the necessary changes in the dylp data structures. In the course of updating primal and dual variables, we also update PSE pricing structures and choose a candidate to enter on the next pivot. There is a fairly elaborate antidegeneracy algorithm implemented here. When degeneracy is detected, a restricted problem is formed, composed of only the subset of constraints involved in the degeneracy. This problem is perturbed (radically!) and used in place of the original problem until a direction of recession is found (i.e., a pivot which results in a move away from the degenerate vertex). In the presence of finite upper and lower bounds, it's a bit tricky to distinguish a valid nondegenerate pivot from movement due to the perturbations, but we get by with some careful bookkeeping. The reference below discusses the algorithm in the standard (but overly simple) context of lower bounds of 0 and upper bounds of infinity. Note that there's an implicit assumption that the upper and lower bound on a variable will not be equal unless the variable's status is indicated as fixed (and hence it's ineligible for entering). Note also that while the antidegeneracy algorithm is active, the perturbation is applied to dy_xbasic but entries in dy_x are kept unperturbed so that we can quickly back out the perturbation. Reference: Ryan, D., Osborne, M., "On the Solution of Highly Degenerate Linear Programmes", Mathematical Programming, v.41, pp. 385-392, 1988. Parameters: xjndx: The index of the entering variable. indir: The direction of movement; +1 if x is increasing, -1 if x is decreasing. p_xindx: (o) Index of the leaving variable x. For return code dyrLOSTPFEAS, set to the index of the variable where primal feasibility loss was discovered p_outdir: (o) returns the direction of movement for x; +1 if it increased and left at its upper bound, -1 if it decreased and left at its lower bound. p_abarij: (o) the pivot element abar p_delta: (o) the amount of change to x p_xjcand: (o) Index of the candidate entering variable for the next pivot. The four output values are also valid for return codes dyrSINGULAR and dyrBSPACE, as they are all determined before inv_update is asked to pivot the basis. Returns: dyret_enum code, as follows: successful pivots: dyrOK: The pivot completed successfully and a new candidate x was selected. dyrDEGEN: (primalout) As dyrOK, but the pivot was degenerate. dyrOPTIMAL: (pseupdate) The pivot completed successfully, but no candidate x could be found. dyrPUNT: (pseupdate) The pivot completed successfully, but no candidate x could be selected because all candidates were flagged with the NOPIVOT qualifier. dyrREQCHK: (primalupdate) The pivot completed successfully, but a bogus number was calculated, or the pivot was dirty degenerate. unsuccessful (aborted) pivots: dyrMADPIV: The pivot coefficient was judged (numerically) unstable (primalout, dy_pivot). dyrREQCHK: The pivot coefficient is a bogus number (primalout), or there's been too much numerical drift while the antidegeneracy mechanism was active (degenout). dyrUNBOUND: The problem is unbounded (primalout). dyrLOSTPFEAS: Primal feasibility has been lost (primalout). dyrSINGULAR: The pivot resulted in a singular basis (dy_pivot). dyrBSPACE: basis package ran out of room to work (dy_pivot). dyrFATAL: Fatal confusion (data structure error, internal confusion, etc.) (various sources) */ { int xipos,xindx,xkpos,outdir ; double *abarj,*v,*betai,maxabarj,abarij,delta ; dyret_enum retval,outretval,pseretval ; bool reselect ; const char *rtnnme = "dy_primalpivot" ; extern dyret_enum primmultiout(int j, int indir, double *abarj, double maxabarj, int *p_xindx, int *p_outdir, double *p_deltaj) ; /* Force invalid return values in case we abort before they're set normally. (This also avoids spurious `read from unitialized' errors.) */ retval = dyrINV ; *p_xindx = -1 ; *p_outdir = 0 ; *p_xjcand = -1 ; *p_abarij = quiet_nan(0) ; *p_delta = quiet_nan(0) ; /* First we do some prep work. Retrieve and ftran column a. We need its max to use later to check for pivot stability. */ abarj = NULL ; if (consys_getcol_ex(dy_sys,xjndx,&abarj) == FALSE) { errmsg(122,rtnnme,dy_sys->nme, "column",consys_nme(dy_sys,'v',xjndx,TRUE,NULL),xjndx) ; if (abarj != NULL) FREE(abarj) ; return (dyrFATAL) ; } # ifndef DYLP_NDEBUG /* Print the column, if the user's interested. There should be no dirty zeroes, and the print will expose them if they occur. */ if (dy_opts->print.pivoting >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: x<%d> (%s) entering, status %s, %s from %g, ", rtnnme,xjndx,consys_nme(dy_sys,'v',xjndx,FALSE,NULL), dy_prtvstat(dy_status[xjndx]), (indir < 0)?"decreasing":"increasing",dy_x[xjndx]) ; dyio_outfmt(dy_logchn,dy_gtxecho,"lb = %g, ub = %g.", dy_sys->vlb[xjndx],dy_sys->vub[xjndx]) ; if (dy_opts->print.pivoting >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n entering column a<%d>:",xjndx) ; xkpos = 1 ; for (xipos = 1 ; xipos <= dy_sys->concnt ; xipos++) { if (abarj[xipos] == 0) continue ; xkpos = (xkpos+1)%2 ; if (xkpos == 0) dyio_outchr(dy_logchn,dy_gtxecho,'\n') ; xindx = dy_basis[xipos] ; dyio_outfmt(dy_logchn,dy_gtxecho,"\t%ca<%d,%d> = %g", (dy_lp->degen > 0 && dy_lp->degen == dy_degenset[xindx])?'*':'\0', xipos,xjndx,abarj[xipos]) ; } } } # endif dy_ftran(abarj,TRUE) ; maxabarj = exvec_infnorm(abarj,dy_sys->concnt,NULL) ; # ifndef DYLP_NDEBUG /* Print the ftran'd column. Again, there should be no dirty zeroes. */ if (dy_opts->print.pivoting >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n entering column abar<%d> = inv(B)a<%d>, max %g:", xjndx,xjndx,maxabarj) ; xkpos = 1 ; for (xipos = 1 ; xipos <= dy_sys->concnt ; xipos++) { if (abarj[xipos] == 0) continue ; xkpos = (xkpos+1)%2 ; if (xkpos == 0) dyio_outchr(dy_logchn,dy_gtxecho,'\n') ; xindx = dy_basis[xipos] ; dyio_outfmt(dy_logchn,dy_gtxecho,"\t%ca<%d,%d> = %g", (dy_lp->degen > 0 && dy_lp->degen == dy_degenset[xindx])?'*':'\0', xipos,xjndx,abarj[xipos]) ; } } # endif /* Open a loop to choose a leaving variable and perform a pivot. The reason we need a loop is because of the antidegeneracy algorithm. If it decides that this pivot will break us out of the degenerate vertex, we'll back out one level of restricted subproblem and repeat the selection process. If, on the other hand, primalout comes back with a degenerate pivot, we may want to form and perturb a restricted subproblem and reselect the pivot within that subproblem. Note that an indication from primalout that the problem is unbounded cannot be taken seriously while we're dealing with a restricted subproblem. The switch that follows is really spread out by comments, so watch for the comment indicating the end. */ reselect = TRUE ; degen_cyclecnt = 0 ; xipos = -1 ; while (reselect) { if (dy_opts->ppsel.strat == 0) { outretval = primalout(xjndx,indir,abarj,maxabarj, &xindx,&outdir,&delta) ; } else { outretval = primmultiout(xjndx,indir,abarj,maxabarj, &xindx,&outdir,&delta) ; } switch (outretval) { /* primalout returns dyrUNBOUND Are we currently coping with degeneracy? If not, the problem is truly unbounded and we need to return to some higher level to deal with it. If there's a restricted subproblem installed, we've discovered a breakout direction from the degenerate vertex, and need to reselect the leaving variable after backing out the restricted subproblem. (Presumably we'll find a limiting variable in the full problem.) dy_degenout returns dyrREQCHK if it notices too much numerical drift of the current values in dy_x from the values when the degenerate subproblem was formed. */ case dyrUNBOUND: { if (dy_lp->degen <= 0) { FREE(abarj) ; return (dyrUNBOUND) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1 || dy_opts->print.degen >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: backing out level %d after %d pivots, unbounded.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters,dy_lp->degen, dy_lp->tot.pivs-degenstats.iterin[dy_lp->degen]) ; } # endif if (dy_degenout(dy_lp->degen-1) != dyrOK) { outretval = dyrREQCHK ; reselect = FALSE ; } break ; } /* primalout returns dyrOK Are we currently coping with degeneracy? If not, we have an uncomplicated, nondegenerate pivot. Yeah! If we are at a degenerate vertex, does this pivot break us out? The trick is distinguishing a genuine bounded but nondegenerate pivot from a pivot that appears nondegenerate due to the perturbation in the restricted subproblem. To do this the code depends on dy_brkout, which specifies the required direction -- away from the bound where the variable entered the basis. By extension, a pivot where the entering variable swings to its opposite bound and leaves is also nondegenerate. Note that xipos is not valid when xjndx == xindx (x isn't basic), so the order of the tests for breakout is important. If we've discovered a breakout direction, we need to reselect the leaving variable after backing out the restricted subproblem. (With more variables to consider and the perturbation gone, the limiting variable will likely be different.) dy_degenout returns dyrREQCHK if it notices too much numerical drift of the current values in dy_x from the values when the degenerate subproblem was formed. */ case dyrOK: { if (xjndx != xindx) xipos = dy_var2basis[xindx] ; if (dy_lp->degen > 0 && (xjndx == xindx || outdir == dy_brkout[xipos])) { # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1 || dy_opts->print.degen >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: backing out level %d after %d pivots, ", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_lp->degen, dy_lp->tot.pivs-degenstats.iterin[dy_lp->degen]) ; dyio_outfmt(dy_logchn,dy_gtxecho,"nondegenerate pivot.") ; } # endif if (dy_degenout(dy_lp->degen-1) != dyrOK) { outretval = dyrREQCHK ; reselect = FALSE ; } } else reselect = FALSE ; break ; } /* primalout returns dyrDEGEN Do we want (and are we allowed) to activate the antidegeneracy mechanism? If so, set up and perturb the restricted subproblem and then repeat the pivot selection. In order to create a restricted subproblem, opts.degen must permit it, and we must have executed opts.degenpivlim successive degenerate and nonconstructive pivots. The idea is to activate the antidegeneracy algorithm only when we have serious degeneracy involving explicit constraints where we can perturb the right-hand side (which we accomplish by the equivalent action of perturbing the values of the basic variables). To this end, we exclude degenerate pivots where: * A fixed variable is leaving. A fixed variable is certainly part of the cause of degeneracy, and the rules for selecting an incoming variable guarantee it won't come back. * A free variable is entering. Free variables have no bound, hence can't be a cause of degeneracy, and the rules for selecting a leaving variable guarantee that a free variable will never leave the basis. And nonbasic free variables preclude dual feasibility. * A superbasic variable is entering. Since it's not at bound, it won't be an immediate cause of degeneracy. And superbasic variables preclude dual feasibility. * The leaving variable is flagged as `do not perturb'. For all intents and purposes, it might as well be fixed, and we need to get it out of the basis. We'll allow only three attempts at getting the perturbation right, then we take the degenerate pivot and be done with it. */ case dyrDEGEN: { if (flgon(dy_status[xindx],vstatBFX|vstatNOPER) || flgon(dy_status[xjndx],vstatNBFR|vstatSB)) { reselect = FALSE ; xipos = dy_var2basis[xindx] ; # ifndef DYLP_NDEBUG if (dy_opts->print.degen >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: constructive degenerate pivot.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%s %s (%d) leaving,", dy_prtvstat(dy_status[xindx]), consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx) ; dyio_outfmt(dy_logchn,dy_gtxecho," %s %s (%d) entering.", dy_prtvstat(dy_status[xjndx]), consys_nme(dy_sys,'v',xjndx,FALSE,NULL),xjndx) ; } # endif } else if (dy_opts->degen == TRUE && dy_opts->degenpivlim < dy_lp->degenpivcnt && degen_cyclecnt < 3) { # ifndef DYLP_NDEBUG if (dy_opts->print.pivoting >= 1 || dy_opts->print.degen >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: antidegeneracy increasing to level %d.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_lp->degen+1) ; } # endif dy_degenin() ; degen_cyclecnt++ ; } else { reselect = FALSE ; xipos = dy_var2basis[xindx] ; # ifndef DYLP_NDEBUG if (dy_opts->print.degen >= 2 && degen_cyclecnt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: forced degenerate pivot after %d cycles;", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, degen_cyclecnt) ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%s %s (%d) leaving.", dy_prtvstat(dy_status[xindx]), consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx) ; } else if (dy_opts->print.degen >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: degenerate pivot, %s %s (%d) leaving.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_prtvstat(dy_status[xindx]), consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx) ; } # endif } break ; } /* Remaining cases, and end of the pivot selection loop. If primalout returned anything other than dyrOK, dyrUNBOUND, or dyrDEGEN, it'll fall through to here and we'll punt back to the caller. Possibilities are dyrREQCHK, dyrMADPIV, dyrLOSTPFEAS and dyrFATAL. Make the default a trap for internal confusion. */ case dyrMADPIV: { xipos = dy_var2basis[xindx] ; abarij = abarj[xipos] ; (void) dy_addtopivrej(xjndx,dyrMADPIV,abarij,maxabarj) ; reselect = FALSE ; break ; } case dyrREQCHK: case dyrLOSTPFEAS: { xipos = dy_var2basis[xindx] ; reselect = FALSE ; break ; } case dyrFATAL: { FREE(abarj) ; return (outretval) ; } default: { errmsg(1,rtnnme,__LINE__) ; FREE(abarj) ; return (outretval) ; } } } /* Set the various output parameters, then return for everthing except dyrOK and dyrDEGEN (the second case arising because we've chosen not to activate the antidegeneracy mechanism). We'll claim 1.0 as the pivot coefficient if the pivot is a nonbasic variable swinging bound-to-bound. Note that we can wind up out here with outretval = dyrREQCHK and xjndx != xindx = -1 if primalout returned dyrUNBOUND, then dy_degenout ran into trouble and returned dyrREQCHK. */ *p_xindx = xindx ; *p_outdir = outdir ; *p_delta = delta ; abarij = quiet_nan(0) ; if (xjndx != xindx) { if (xindx > 0) { abarij = abarj[xipos] ; *p_abarij = abarij ; } } else { *p_abarij = 1.0 ; } if (!(outretval == dyrOK || outretval == dyrDEGEN)) { FREE(abarj) ; return (outretval) ; } /* The notion is that BFX will never reenter and NBFR will never leave, once the pivot is complete. So we're in no danger of cycling. */ if (outretval == dyrOK) { dy_lp->degenpivcnt = 0 ; } else { if (flgon(dy_status[xindx],vstatBFX|vstatNOPER) || flgon(dy_status[xjndx],vstatNBFR|vstatSB)) dy_lp->degenpivcnt = 0 ; else dy_lp->degenpivcnt++ ; } /* It looks like the pivot will go through, so get down to business. Updating the PSE and pricing information (dy_cbar and dy_gamma) will require beta (row i of the basis inverse), and the vector v = abar~inv(B). We need to calculate these prior to the basis change. Unfortunately, we'll then need to recalculate inv(B)abar for primal updates. After the prep work, attempt the pivot to update the LU factorisation. This can fail for three reasons: the pivot element didn't meet the numerical stability criteria (but we've checked this already), the pivot produced a singular basis, or the basis package ran out of space. On the dual side, it was a big win, computationally, to attempt to salvage the pivot at this point with a refactor if dy_pivot reported dyrNUMERIC (near singularity). It's not clear that this is a problem on the primal side, but if I find myself staring at this bit of code, it's worth a shot. All this code should be pulled out to a small subroutine if I add recovery. */ if (xjndx != xindx) { for (xkpos = 1 ; xkpos <= dy_sys->concnt ; xkpos++) if (dy_frame[dy_basis[xkpos]] == FALSE) abarj[xkpos] = 0 ; dy_btran(abarj) ; v = (double *) MALLOC((dy_sys->concnt+1)*sizeof(double)) ; memcpy(v,abarj,(dy_sys->concnt+1)*sizeof(double)) ; betai = (double *) CALLOC((dy_sys->concnt+1),sizeof(double)) ; betai[xipos] = 1.0 ; dy_btran(betai) ; if (consys_getcol_ex(dy_sys,xjndx,&abarj) == FALSE) { errmsg(122,rtnnme,dy_sys->nme,"column", consys_nme(dy_sys,'v',xjndx,FALSE,NULL),xjndx) ; retval = dyrFATAL ; } else { dy_ftran(abarj,TRUE) ; retval = dy_pivot(xipos,abarij,maxabarj) ; } } else { v = NULL ; betai = NULL ; retval = dyrOK ; } /* Then update the dylp data structures -- primalupdate does the basis, status, and primal and dual variable values, pseupdate does the column norms and reduced costs. In the process of updating the reduced costs, we'll select a candidate for the next entering variable. Note that there's no pseupdate if the pivot was a bound-to-bound move by a nonbasic variable (no basis change, no pseupdate). Finally, decide on the appropriate return value. Assuming pseupdate doesn't run into trouble, dyrREQCHK (primalupdate) wins over dyrDEGEN (primalout) which wins over dyrOK (various). */ if (retval == dyrOK) { dy_lp->pivok = TRUE ; retval = primalupdate(xjndx,indir,xindx,outdir,abarj,delta,betai) ; if (retval == dyrOK || retval == dyrREQCHK || retval == dyrSWING) { if (xjndx != xindx) { pseretval = pseupdate(xjndx,xindx,p_xjcand,abarj,v,betai) ; } else { pseretval = dyrOK ; *p_xjcand = 0 ; } } else { pseretval = dyrOK ; } if (pseretval != dyrOK) retval = pseretval ; else if (retval == dyrOK) { if (outretval == dyrDEGEN) retval = dyrDEGEN ; } } else if (retval == dyrNUMERIC) { retval = dyrSINGULAR ; } /* Tidy up and return. */ FREE(abarj) ; if (v != NULL) FREE(v) ; if (betai != NULL) FREE(betai) ; return (retval) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_hotstart.c0000644000175200017520000006102411507440660016100 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains the routines that handle a hot start. The assumption is that the dylp data structures already exist, and the previous run terminated with one of optimal, infeasible, or unbounded status. The guiding principle, when thinking about this bit of code, was ``thou shalt not change the basis.'' For convenience with this initial implementation, I've actually held to ``thou shalt not change the set of constraints or variables in the constraint system''. This seemed like a good boundary because the user doesn't have access to the active system. Making it visible would violate all kinds of modularity principles, and writing a bunch of utility routines to make changes didn't strike me as fun. It's not possible to allow the user to change inactive constraints or variables because this could change the indices of the remaining constraints or variables (as they're moved to make room or fill holes) and hence indices in dy_actcons and dy_actvars could become invalid. The limitation that this imposes is that if you want to add or delete a constraint or variable, you have to drop back to warm start. What is allowed is changes to the variable upper and lower bounds, and the right hand side and objective function coefficients. The user must set flags indicating which arrays have been modified. Changes to the rhs and bounds interact, because the rhs values in the active system (dy_sys) must be corrected to reflect the values of inactive variables. A change to either will trigger a reinstallation of the rhs array followed by recalculation of the correction required for inactive variables. (This seems like overkill until you consider that it's no more work to do the calculation from scratch than it is to accumulate corrections to the existing values.) A change to the rhs or bounds implies that we need to reset the status array and recalculate the primal variables. Changes to the objective and bounds interact, through the contribution of inactive variables to the objective. A change to the objective also implies that we need to recalculate the dual variables. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_hotstart.c 4.5 11/06/04" ; static char svnid[] UNUSED = "$Id: dy_hotstart.c 407 2010-12-31 20:48:48Z lou $" ; /* This routine is exported only to dy_coldstart and dy_warmstart, as well as being used in dy_hotstart. */ void dy_setfinalstatus (void) /* This code is common to all three start routines (coldstart, warmstart, hotstart). It scans the newly calculated basic variables and assigns them their final status. In the process, it calculates the number of infeasible variables, and the total infeasibility. Parameters: none Returns: undefined */ { int aindx, xkndx ; double xk,lbk,ubk ; # ifdef DYLP_PARANOIA const char *rtnnme = "dy_setfinalstatus" ; # endif # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 2) dyio_outfmt(dy_logchn,dy_gtxecho,"\n\testablishing final status ...") ; # endif dy_lp->infeas = 0.0 ; dy_lp->infeascnt = 0 ; /* Step through the constraints, and have a look at the basic variable in each position. The paranoid check will complain if the basis is corrupt, but since nothing can go wrong if we're not paranoid, it just complains and moves to the next entry. */ for (aindx = 1 ; aindx <= dy_sys->concnt ; aindx++) { xkndx = dy_basis[aindx] ; xk = dy_xbasic[aindx] ; lbk = dy_sys->vlb[xkndx] ; ubk = dy_sys->vub[xkndx] ; # ifdef DYLP_PARANOIA if (xkndx <= 0 || xkndx > dy_sys->varcnt) { errmsg(303,rtnnme,dy_sys->nme,aindx,1,xkndx,dy_sys->varcnt) ; continue ; } # endif switch (dy_status[xkndx]) { case vstatB: { if (atbnd(xk,lbk)) { dy_status[xkndx] = vstatBLB ; } else if (belowbnd(xk,lbk)) { dy_lp->infeascnt++ ; dy_lp->infeas += lbk-xk ; dy_status[xkndx] = vstatBLLB ; } else if (atbnd(xk,ubk)) { dy_status[xkndx] = vstatBUB ; } else if (abovebnd(xk,ubk)) { dy_lp->infeascnt++ ; dy_lp->infeas += xk-ubk ; dy_status[xkndx] = vstatBUUB ; } break ; } case vstatBFX: { if (!atbnd(xk,lbk)) { if (belowbnd(xk,lbk)) { dy_lp->infeascnt++ ; dy_lp->infeas += lbk-xk ; dy_status[xkndx] = vstatBLLB ; } else { dy_lp->infeascnt++ ; dy_lp->infeas += xk-ubk ; dy_status[xkndx] = vstatBUUB ; } } break ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t %s (%d) %s", consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(dy_status[xkndx])) ; if (lbk > -dy_tols->inf) dyio_outfmt(dy_logchn,dy_gtxecho,", lb = %g",lbk) ; dyio_outfmt(dy_logchn,dy_gtxecho,", val = %g",xk) ; if (ubk < dy_tols->inf) dyio_outfmt(dy_logchn,dy_gtxecho,", ub = %g",ubk) ; if (flgon(dy_status[xkndx],vstatBLLB|vstatBUUB)) { dyio_outfmt(dy_logchn,dy_gtxecho,", infeasibility = ") ; if (flgon(dy_status[xkndx],vstatBLLB)) dyio_outfmt(dy_logchn,dy_gtxecho,"%g",lbk-xk) ; else dyio_outfmt(dy_logchn,dy_gtxecho,"%g",xk-ubk) ; } dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } # endif } setcleanzero(dy_lp->infeas,dy_tols->zero) ; return ; } static void hot_updateMiscState (lpret_enum lpret) /* Reset various bits of miscellaneous state before we resume simplex pivoting. Pulled out of dy_hotstart so that I can call this in two places. Parameters: none Returns: undefined */ { dy_lp->lpret = lpret ; dy_lp->tot.iters = 0 ; dy_lp->tot.pivs = 0 ; dy_lp->prev_pivok = dy_lp->pivok ; dy_lp->pivok = FALSE ; dy_lp->degenpivcnt = 0 ; dy_lp->idlecnt = 0 ; return ; } static bool process_inactive (lpprob_struct *orig_lp, int oxkndx) /* This routine handles the data structure updates for an inactive variable x. We need to have a look at the bounds l and u, and perhaps update the status kept in dy_origvars. We need to add the contribution cl or cu to the objective function. Finally, if we've reloaded b & blow due to a bound or rhs change, we need to walk the column a and adjust b (and perhaps blow) for each nonzero a in the active system. Parameters: orig_lp: the original lp problem oxkndx: index of x in orig_sys Returns: TRUE if the update is made without incident, FALSE otherwise. */ { int oaindx,aindx,ndx ; double xk,lk,uk,ck ; pkvec_struct *ak ; pkcoeff_struct *aik ; consys_struct *orig_sys ; flags xkstatus ; const char *rtnnme = "process_inactive" ; orig_sys = orig_lp->consys ; xkstatus = getflg(orig_lp->status[oxkndx],vstatSTATUS) ; # ifdef DYLP_PARANOIA /* Any inactive variable should be nonbasic, and the paranoid check is looking to make sure of this. */ if (!VALID_STATUS(xkstatus)) { errmsg(300,rtnnme,(int) xkstatus, consys_nme(orig_sys,'v',oxkndx,FALSE,NULL),oxkndx) ; return (FALSE) ; } if (flgoff(xkstatus,vstatNONBASIC|vstatNBFR)) { errmsg(433,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "inactive",consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx, dy_prtvstat(xkstatus)) ; return (FALSE) ; } # endif /* The bounds can change arbitrarily, and the client may not be maintaining the status vector, but we're limited in what we can do --- bounds and status are our only clues to the value of an inactive variable. (Contrast with the equivalent section in process_active.) */ lk = orig_sys->vlb[oxkndx] ; uk = orig_sys->vub[oxkndx] ; ck = orig_sys->obj[oxkndx] ; /* Start with the case that both bounds are finite. Use a previous status of NBLB or NBUB. Otherwise, guess from the sign of the objective coefficient. `Dirty' fixed variables are marked as unloadable. */ if (lk > -dy_tols->inf && uk < dy_tols->inf) { if (atbnd(lk,uk) && lk != uk) { if (flgon(xkstatus,vstatNBLB|vstatNBUB)) { setflg(xkstatus,vstatNOLOAD) ; } else { if (ck < 0) { xkstatus = vstatNBUB|vstatNOLOAD ; } else { xkstatus = vstatNBLB|vstatNOLOAD ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tDirty fixed variable %s (%d)", consys_nme(orig_sys,'v',oxkndx,0,0),oxkndx) ; dyio_outfmt(dy_logchn,dy_gtxecho, " assigned status %s.",dy_prtvstat(xkstatus)) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t original lb = %g, ub = %g, diff = %g, tol = %g", lk,uk,uk-lk,dy_tols->pfeas) ; } # endif } else if (lk == uk) { xkstatus = vstatNBFX|vstatNOLOAD ; } else if (flgon(xkstatus,vstatNBLB|vstatNBUB)) { xkstatus = orig_lp->status[oxkndx] ; } else { if (ck < 0) { xkstatus = vstatNBUB ; } else { xkstatus = vstatNBLB ; } } } /* Variables with one bound, or no bounds. No choices here. */ else if (lk > -dy_tols->inf) { xkstatus = vstatNBLB ; } else if (uk < dy_tols->inf) { xkstatus = vstatNBUB ; } else { xkstatus = vstatNBFR ; } /* Determine the variable's value and set up the status entries. The default case in the switch below should never execute, but it serves for paranoia and lets gcc conclude xk will always have a value. Consider whether it's really a good idea to change orig_lp->status. */ switch (getflg(xkstatus,vstatSTATUS)) { case vstatNBLB: case vstatNBFX: { xk = lk ; break ; } case vstatNBUB: { xk = uk ; break ; } case vstatNBFR: { xk = 0 ; break ; } default: { xk = 0 ; errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } orig_lp->status[oxkndx] = xkstatus ; dy_origvars[oxkndx] = -((int) xkstatus) ; /* Note any contribution to the objective and constraint rhs & rhslow values. */ dy_lp->inactzcorr += xk*orig_sys->obj[oxkndx] ; if (flgon(orig_lp->ctlopts,lpctlRHSCHG|lpctlLBNDCHG|lpctlUBNDCHG)) { ak = NULL ; if (consys_getcol_pk(orig_sys,oxkndx,&ak) == FALSE) { errmsg(122,rtnnme,orig_sys->nme,"variable", consys_nme(orig_sys,'v',oxkndx,TRUE,NULL),oxkndx) ; if (ak != NULL) pkvec_free(ak) ; return (FALSE) ; } for (ndx = 0, aik = &ak->coeffs[0] ; ndx < ak->cnt ; ndx++, aik++) { oaindx = aik->ndx ; if (ACTIVE_CON(oaindx)) { aindx = dy_origcons[oaindx] ; dy_sys->rhs[aindx] -= aik->val*xk ; if (dy_sys->ctyp[aindx] == contypRNG) dy_sys->rhslow[aindx] -= aik->val*xk ; } } pkvec_free(ak) ; } /* And we're done. Print some information and return. */ # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t %s (%d) %s inactive with value ", consys_nme(orig_sys,'v',oxkndx,FALSE,NULL),oxkndx, dy_prtvstat(xkstatus)) ; switch (getflg(xkstatus,vstatSTATUS)) { case vstatNBFX: case vstatNBLB: case vstatNBUB: case vstatNBFR: { dyio_outfmt(dy_logchn,dy_gtxecho,"%g.",xk) ; break ; } default: { dyio_outfmt(dy_logchn,dy_gtxecho,"??.") ; break ; } } } # endif return (TRUE) ; } static void process_active (lpprob_struct *orig_lp, int oxkndx) /* This routine handles the data structure updates for an active variable x. We need to copy the new values for l, u, and c into the active system. For nonbasic variables, we need to choose a status based on the bounds. For basic variables, the status vector encodes the basis index, so we need to decide on an initial status --- either B, BFX, or BFR. The routine expects that bounds have been groomed (i.e., if the difference between l and u is less than the feasibility tolerance, they have been forced to exact equality). Parameters: orig_lp: the original lp problem oxkndx: index of x in orig_sys Returns: undefined (the only possible error is a paranoid check) */ { int xkndx ; double lk,uk,xk ; flags xkstatus ; consys_struct *orig_sys ; # ifdef DYLP_PARANOIA const char *rtnnme = "process_active" ; # endif orig_sys = orig_lp->consys ; /* Get the index of the variable in the active system, and the status. The paranoid check is that we're not attempting to convert between basic and nonbasic status. */ xkndx = dy_origvars[oxkndx] ; xkstatus = dy_status[xkndx] ; # ifdef DYLP_PARANOIA if ((flgon(xkstatus,vstatBASIC) && ((int) orig_lp->status[oxkndx]) > 0) || (flgon(xkstatus,vstatNONBASIC|vstatNBFR) && ((int) orig_lp->status[oxkndx]) < 0)) { char buf[30] ; if (((int) orig_lp->status[oxkndx]) > 0) strcpy(buf,dy_prtvstat(orig_lp->status[oxkndx])) ; else strcpy(buf,"unspecified basic") ; errmsg(398,rtnnme,dy_sys->nme,consys_nme(dy_sys,'v',xkndx,FALSE,NULL), xkndx,dy_prtvstat(xkstatus),buf) ; return ; } # endif /* Update the bounds and objective coefficient. */ lk = orig_sys->vlb[oxkndx] ; dy_sys->vlb[xkndx] = lk ; uk = orig_sys->vub[oxkndx] ; dy_sys->vub[xkndx] = uk ; dy_sys->obj[xkndx] = orig_sys->obj[oxkndx] ; /* For nonbasic variables, set the proper status based on the bounds and put the proper value in dy_x. Because the bounds can change arbitrarily and the client may not be maintaining the status vector, it's easiest to start from scratch, using the value from dy_x to decide the best new status. For basic variables, just decide between strictly basic (B), basic fixed (BFX), and basic free (BFR). This will be correct, in the absence of bound changes, and the values held in dy_x and dy_xbasic are unchanged. If bounds have changed, we'll recalculate the primal variables and then decide on the final status of basic variables (which could be BLLB or BUUB). */ if (flgon(dy_status[xkndx],vstatNONBASIC|vstatNBFR)) { if (lk > -dy_tols->inf && uk < dy_tols->inf) { if (lk == uk) { xkstatus = vstatNBFX ; xk = lk ; } else if ((dy_x[xkndx] - lk) < (uk-dy_x[xkndx])) { xkstatus = vstatNBLB ; xk = lk ; } else { xkstatus = vstatNBUB ; xk = uk ; } } else if (lk > -dy_tols->inf) { xkstatus = vstatNBLB ; xk = lk ; } else if (uk < dy_tols->inf) { xkstatus = vstatNBUB ; xk = uk ; } else { xkstatus = vstatNBFR ; xk = 0 ; } dy_x[xkndx] = xk ; } else { if (lk == uk) xkstatus = vstatBFX ; else if (lk <= -dy_tols->inf && uk >= dy_tols->inf) xkstatus = vstatBFR ; else xkstatus = vstatB ; } dy_status[xkndx] = xkstatus ; /* We're done. Print some information and return. */ # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t %s (%d) %s active", consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(dy_status[xkndx])) ; if (flgon(xkstatus,vstatNONBASIC|vstatNBFR)) dyio_outfmt(dy_logchn,dy_gtxecho," with value %g.",dy_x[xkndx]) ; else dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } # endif return ; } dyret_enum dy_hotstart (lpprob_struct *orig_lp) /* This routine is responsible for handling a hot start. The assumption is that all data structures are in place, and that the user is allowed to change the bounds on variables and any of the rhs and objective coefficients. See the comments at the head of the file. Changes to the rhs and bounds are handled first. We reinstall the rhs array, then scan the variables, updating bounds and status and making the rhs corrections required for inactive variables. If the bounds or rhs change, we need new primals. After we calculate new primals, we'll need to scan the basic variables and make sure their final status is correct. If the objective or bounds change, we need to recalculate the contribution to the objective from inactive variables. If the objective changes, we need new duals. (It's also true that if the objective changes, we need new reduced costs, but that's handled in commonstart.) The most likely situation is that we haven't pivoted since refactoring as part of the preoptimality sequence, so we shouldn't need to refactor here. Instead, we leave it to dy_duenna to pick this up with the next pivot, as well as any possible accuracy check. Once all the changes have been incorporated, calculate primals and duals to determine primal and dual feasibility, and select the appropriate simplex phase in dy_lp->simplex.next. Parameters: orig_lp: The original lp problem structure Returns: dyrOK if the setup completes without error, dyrINV or dyrFATAL otherwise. */ { int oxkndx,xkndx,oaindx,aindx ; double *ogvlb,*dyvlb,*ogvub,*dyvub,*ogobj,*dyobj,*dyrhs,*ogrhs ; double lbj,ubj ; consys_struct *orig_sys ; flags *ogstatus,calcflgs,statk ; dyret_enum retval ; lpret_enum lpret ; dyphase_enum phase ; const char *rtnnme = "dy_hotstart" ; /* dy_scaling.c */ extern void dy_refreshlclsystem(flags what) ; /* dy_force.c */ extern dyphase_enum dy_forceFull(consys_struct *orig_sys) ; /* It could happen that there are no changes, in which case there's no point in going through the motions. */ if (flgoff(orig_lp->ctlopts, lpctlLBNDCHG|lpctlUBNDCHG|lpctlOBJCHG|lpctlRHSCHG)) { # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 1) dyio_outfmt(dy_logchn,dy_gtxecho, "\n no data structure changes at hot start.") ; # endif hot_updateMiscState(lpINV) ; return (dyrOK) ; } /* But it's far more likely there are changes, and we need to get on with them. */ # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n updating data structures at hot start ...") ; if (dy_opts->print.crash >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n scanning changes to") ; if (flgon(orig_lp->ctlopts,lpctlRHSCHG)) dyio_outfmt(dy_logchn,dy_gtxecho," rhs") ; if (flgon(orig_lp->ctlopts,lpctlLBNDCHG)) dyio_outfmt(dy_logchn,dy_gtxecho," vlb") ; if (flgon(orig_lp->ctlopts,lpctlUBNDCHG)) dyio_outfmt(dy_logchn,dy_gtxecho," vub") ; if (flgon(orig_lp->ctlopts,lpctlOBJCHG)) dyio_outfmt(dy_logchn,dy_gtxecho," obj") ; dyio_outfmt(dy_logchn,dy_gtxecho," ...") ; } } # endif /* Transfer any changes from the client's system to the scaled local copy, if it exists. Then set up convenient handles for the various vectors. */ dy_refreshlclsystem(orig_lp->ctlopts) ; orig_sys = orig_lp->consys ; dyrhs = dy_sys->rhs ; ogrhs = orig_sys->rhs ; ogvlb = orig_sys->vlb ; dyvlb = dy_sys->vlb ; ogvub = orig_sys->vub ; dyvub = dy_sys->vub ; ogobj = orig_sys->obj ; dyobj = dy_sys->obj ; ogstatus = orig_lp->status ; /* If any of the rhs or bounds have been changed, we need to reinstall the rhs and bounds. Begin by scanning the orig_sys rhs array, updating the dy_sys entries for the active constraints. If a range constraint comes by, we also need to set the upper bound of the associated logical. */ if (flgon(orig_lp->ctlopts,lpctlLBNDCHG|lpctlUBNDCHG|lpctlRHSCHG)) { for (aindx = 1 ; aindx <= dy_sys->concnt ; aindx++) { oaindx = dy_actcons[aindx] ; if (oaindx > 0) { dyrhs[aindx] = ogrhs[oaindx] ; if (dy_sys->ctyp[aindx] == contypRNG) { dy_sys->rhslow[aindx] = orig_sys->rhslow[oaindx] ; dyvub[aindx] = dyrhs[aindx]-dy_sys->rhslow[aindx] ; } } } } /* We need to scan the columns no matter what changed. Objective coefficient changes are just copied into the active system as needed. The real action is updating bounds and dealing with the side effects of bounded variables. * Recalculate the contribution to inactzcorr for each inactive variable. * Update dy_sys->vlb, dy_sys->vub, and dy_sys->obj for each active variable. * Update dy_status for each active variable. * Update dy_x for each nonbasic active variable. * Update loadable/unloadable accounting. */ dy_lp->inactzcorr = 0 ; lpret = lpINV ; dy_lp->sys.vars.loadable = 0 ; dy_lp->sys.vars.unloadable = 0 ; for (oxkndx = 1 ; oxkndx <= orig_sys->varcnt ; oxkndx++) { xkndx = dy_origvars[oxkndx] ; lbj = ogvlb[oxkndx] ; ubj = ogvub[oxkndx] ; if (ogvlb[oxkndx] > ogvub[oxkndx]) { lpret = lpINFEAS ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tTrivial infeasibility for %s (%d), lb = %g > ub = %g.", consys_nme(orig_sys,'v',oxkndx,0,0),oxkndx, ogvlb[oxkndx],ogvub[oxkndx]) ; } # endif } /* Inactive variables: update the status in dy_origvars and calculate the contribution to inactzcorr. If we've reloaded rhs and rhslow, correct them to account for the value of the variable. Active variables: touch up bounds for fixed variables, update vlb, vub, and obj arrays for dy_sys, update dy_status, and update dy_x for nonbasic variables. */ if (xkndx < 0) { if (process_inactive(orig_lp,oxkndx) == FALSE) return (dyrFATAL) ; statk = (flags) -dy_origvars[oxkndx] ; if (flgon(statk,vstatNOLOAD)) { dy_lp->sys.vars.unloadable++ ; } else { dy_lp->sys.vars.loadable++ ; } } else { process_active(orig_lp,oxkndx) ; } } /* Now, what do we need? Calculate primal values first. If we calculate new primal variables, we need to reset the status of the basic variables, which means we need to do a quick scan of the logicals to reset their status. Arguably this is not necessary if only the objective changed, but overall it's a good investment of our time. */ if (dy_calcprimals() == FALSE) { errmsg(316,rtnnme,dy_sys->nme) ; return (dyrFATAL) ; } for (xkndx = 1 ; xkndx <= dy_sys->concnt ; xkndx++) { if (dy_var2basis[xkndx] != 0) { if (dyvub[xkndx] == dyvlb[xkndx]) dy_status[xkndx] = vstatBFX ; else dy_status[xkndx] = vstatB ; } } dy_setfinalstatus() ; /* Is the phase I objective installed? If so, remove it. This hurts a bit, particularly if we ultimately end up targetting primal phase I as the starting simplex, but it's the only way to test for a dual feasible start. And if we have dual feasibility, it's a big win. */ if (dy_lp->p1obj.installed == TRUE) { if (dy_swapobjs(dyPRIMAL2) == FALSE) { errmsg(318,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"remove") ; return (dyrFATAL) ; } } /* Calculate duals and reduced costs and see if we're primal or dual feasible. Calculate the objective just for kicks. */ dy_calcduals() ; if (dy_calccbar() == FALSE) { errmsg(384,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; return (dyrFATAL) ; } dy_lp->z = dy_calcobj() ; calcflgs = ladPRIMFEAS|ladPFQUIET|ladDUALFEAS|ladDFQUIET ; retval = dy_accchk(&calcflgs) ; if (retval != dyrOK) { errmsg(304,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; return (retval) ; } if (flgoff(calcflgs,ladPRIMFEAS)) { dy_lp->simplex.next = dyPRIMAL2 ; } else if (flgoff(calcflgs,ladDUALFEAS)) { dy_lp->simplex.next = dyDUAL ; } else { dy_lp->simplex.next = dyPRIMAL1 ; } /* Reset a few control variables and counts in dy_lp. */ hot_updateMiscState(lpret) ; /* And that should do it. Let's make a paranoid check or two, then we're off and running. */ # ifdef DYLP_PARANOIA if (dy_chkdysys(orig_sys) == FALSE) return (dyrFATAL) ; # endif /* Now, is the client forcing the full system on top of the hot start? If so, do it here. We're up and running at this point, so dy_forceFull can do its thing. Normally, dy_forceFull is called when we've failed at primal simplex with a partial system, then tried and failed to force dual feasibility. Make it look like this while we're working. Reset phase to dyINIT and dy_lp->lpret to dyrINV when we're done so that dylp() sees the codes it expects. This is an exceptional activity, so I'm not going out of my way to do this in the most efficient manner. There really isn't a legitimate reason for this --- it's most likely careless coding on the part of the client, but we can cope without too much trouble. TODO (100817) I might want to rethink this, because I'm going to take the attitude that the OsiSimplex interface will force the full system from enableFactorization and enableSimplexInterface. */ if (dy_opts->fullsys == TRUE && (dy_lp->sys.cons.loadable > 0 || dy_lp->sys.vars.loadable > 0)) { # ifndef DYLP_NDEBUG if (dy_opts->print.force >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n Forcing full system.") ; } # endif dy_lp->lpret = lpFORCEDUAL ; dy_lp->phase = dyFORCEFULL ; phase = dy_forceFull(orig_sys) ; if (phase == dyINV) { retval = dyrFATAL ; } else { dy_lp->lpret = lpINV ; dy_lp->phase = dyINIT ; retval = dyrOK ; } } else { retval = dyrOK ; } return (retval) ; } DyLP-1.10.4/DyLP/src/Dylp/glpinv.h0000644000175200017520000001566211507440660015047 0ustar coincoin/* glpinv.h */ /*---------------------------------------------------------------------- -- Copyright (C) 2000, 2001, 2002, 2003 Andrew Makhorin, Department -- for Applied Informatics, Moscow Aviation Institute, Moscow, Russia. -- All rights reserved. E-mail: . -- -- This file is a part of GLPK (GNU Linear Programming Kit). -- -- Licensed under the Eclipse Public License (EPL) by permission of the -- author for inclusion in the DyLP LP distribution. ----------------------------------------------------------------------*/ /* @(#)glpinv.h 1.3 06/22/04 svn/cvs: $Id: glpinv.h 407 2010-12-31 20:48:48Z lou $ */ #ifndef _GLPINV_H #define _GLPINV_H #include "glpluf.h" #define inv_create dy_glp_inv_create #define inv_decomp dy_glp_inv_decomp #define inv_h_solve dy_glp_inv_h_solve #define inv_ftran dy_glp_inv_ftran #define inv_btran dy_glp_inv_btran #define inv_update dy_glp_inv_update #define inv_delete dy_glp_inv_delete /*---------------------------------------------------------------------- -- The structure INV defines an invertable form of the basis matrix B, -- which is based on LU-factorization and is the following sextet: -- -- [B] = (F, H, V, P0, P, Q), (1) -- -- where F, H, and V are such matrices that -- -- B = F * H * V, (2) -- -- and P0, P, and Q are such permutation matrices that the matrix -- -- L = P0 * F * inv(P0) (3) -- -- is lower triangular with unity diagonal, and the matrix -- -- U = P * V * Q (4) -- -- is upper triangular. All the matrices have the same order m, which -- is the order of the basis matrix B. -- -- The matrices F, V, P, and Q are stored in the structure LUF (see the -- section GLPLUF), which is a member of the structure INV. -- -- The matrix H is stored in the form of eta file using row-like format -- as follows: -- -- H = H[1] * H[2] * ... * H[nfs], (5) -- -- where H[k], k = 1, 2, ..., nfs, is a row-like factor, which differs -- from the unity matrix only by one row, nfs is current number of row- -- like factors. After the factorization has been built for some given -- basis matrix B the matrix H has no factors and thus it is the unity -- matrix. Then each time when the factorization is recomputed for an -- adjacent basis matrix, the next factor H[k], k = 1, 2, ... is built -- and added to the end of the eta file H. -- -- Being sparse vectors non-trivial rows of the factors H[k] are stored -- in the right part of the sparse vector area (SVA) in the same manner -- as rows and columns of the matrix F. -- -- For more details see the program documentation. */ typedef struct INV INV; struct INV { /* invertable (factorized) form of the basis matrix */ int m; /* order of the matrices B, F, H, V, P0, P, Q */ int valid; /* if this flag is not set, the invertable form is invalid and can't be updated nor used in ftran and btran operations */ LUF *luf; /* LU-factorization (holds the matrices F, V, P, Q) */ /*--------------------------------------------------------------*/ /* matrix H in the form of eta file */ int hh_max; /* maximal number of row-like factors (that limits maximal number of updates of the factorization) */ int hh_nfs; /* current number of row-like factors (0 <= hh_nfs <= hh_max) */ int *hh_ndx; /* int hh_ndx[1+hh_max]; */ /* hh_ndx[0] is not used; hh_ndx[k], k = 1, ..., nfs, is number of a non-trivial row of the factor H[k] */ int *hh_ptr; /* int hh_ptr[1+hh_max]; */ /* hh_ptr[0] is not used; hh_ptr[k], k = 1, ..., nfs, is a pointer to the first element of the non-trivial row of the factor H[k] in the sparse vector area */ int *hh_len; /* int hh_len[1+hh_max]; */ /* hh_len[0] is not used; hh_len[k], k = 1, ..., nfs, is total number of elements in the non-trivial row of the factor H[k] */ /*--------------------------------------------------------------*/ /* matrix P0 */ int *p0_row; /* int p0_row[1+n]; */ /* p0_row[0] is not used; p0_row[i] = j means that p0[i,j] = 1 */ int *p0_col; /* int p0_col[1+n]; */ /* p0_col[0] is not used; p0_col[j] = i means that p0[i,j] = 1 */ /* if i-th row or column of the matrix F corresponds to i'-th row or column of the matrix L = P0*F*inv(P0), then p0_row[i'] = i and p0_col[i] = i' */ /*--------------------------------------------------------------*/ /* partially transformed column is inv(F*H)*B[j], where B[j] is a new column, which will replace the existing j-th column of the basis matrix */ int cc_len; /* number of (non-zero) elements in the partially transformed column; if cc_len < 0, the column has been not prepared yet */ int *cc_ndx; /* int cc_ndx[1+m]; */ /* cc_ndx[0] is not used; cc_ndx[k], k = 1, ..., cc_len, is a row index of the partially transformed column element */ double *cc_val; /* double cc_val[1+m]; */ /* cc_val[0] is not used; cc_val[k], k = 1, ..., cc_len, is a numerical (non-zero) value of the column element */ /*--------------------------------------------------------------*/ /* control parameters */ double upd_tol; #if 0 /* update tolerance; if on updating the factorization absolute value of some diagonal element of the matrix U = P*V*Q is less than upd_tol, the factorization is considered as inaccurate */ #else /* update tolerance; if after the factorization has been updated absolute value of some diagonal element u[k,k] of the matrix U = P*V*Q is less than upd_tol * max(|u[k,*]|, |u[*,k]|), the factorization is considered as inaccurate */ #endif /*--------------------------------------------------------------*/ /* some statistics */ int nnz_h; /* current number of non-zeros in all factors of the matrix H */ double min_vrratio ; /* minimum value of u[k,k]/(upd_tol)*max(|u[k,*]|, |u[*,k]|) since last pivot. */ }; INV *inv_create(int m, int max_upd); /* create factorization of the basis matrix */ int inv_decomp(INV *inv, void *info, int (*col)(void *info, int j, int rn[], double bj[])); /* compute factorization of the basis matrix */ void inv_h_solve(INV *inv, int tr, double x[]); /* solve system H*x = b or H'*x = b */ void inv_ftran(INV *inv, double x[], int save); /* perform forward transformation (FTRAN) */ void inv_btran(INV *inv, double x[]); /* perform backward transformation (BTRAN) */ int inv_update(INV *inv, int j); /* update factorization for adjacent basis matrix */ void inv_delete(INV *inv); /* delete factorization of the basis matrix */ #endif /* eof */ DyLP-1.10.4/DyLP/src/Dylp/dylp.c0000644000175200017520000015330312253224475014511 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains the top-level routines for the dylp dynamic simplex package. The basic flow of the dynamic simplex algorithm is as follows: 0) Initialisation: Initialise the constraint system with equalities and some suitable selection of inequalities. Go to 4. 1) Purge Variables: Based on some threshold for reduced cost, deactivate variables which are unlikely to improve the objective. 2) Generate Variables: Generate new variables not part of the original problem statement (column generation). These are added to the set of inactive variables. 3) Add Variables: Price out the inactive variables. If any of them have suitable reduced cost, add them to the set of active variables and go to 4, otherwise go to 5. 4) Primal: Optimise with primal simplex. Go to 1. 5) Purge Constraints: If the objective strictly improved (indicating that we've moved to a new extreme point), deactivate any slack constraints. 6) Generate Constraints: Generate new constraints, not part of the original problem statement (cut generation). Equalities go directly into the active set, inequalities go into the inactive set. 7) Add Constraints: Check the inactive constraints for violations. If any violated constraints are found, add them to the active constraints. If no violated constraints are found, we're optimal over all constraints and variables. 8) Dual: Optimise with dual simplex. Go to 1. If the user has forced use of primal phase I in place of dual phase II, a silent punt occurs immediately. If the caller specifies the fullsys option, the full constraint system is loaded and all constraint and variable deactivation/activation is skipped. The dual simplex is somewhat weaker than the primal simplex -- it has no phase I, and has only antidegen lite. Consequently, the dual will punt to the primal phase I when it finds itself in trouble due to loss of feasibility or stalling. It also punts to primal phase I when it needs to add variables but can't find any that are dual feasible. Steps 2 and 6 are implemented as stubs, as they are highly problem specific. dylp requires that any variables or constraints generated by a call must be inserted in the original constraint system. They can be left to be picked up in steps 3 or 7, or the generation routines can force them into the active sets as they are generated. Inactive constraints are assumed to be loose. They're pretty simple to activate -- the row is added to dy_sys with a logical, which is made basic. If the constraint contains other variables, beyond the currrent active set, they remain inactive (this avoids any potential trouble in terms of maintaining dual feasibility). The only point to be made is that for maximum efficiency all constraints in dy_sys are billed as architectural constraints. (This prevents consys from working harder to keep the architectural and cut constraints as two distinct sets.) Inactive variables require a bit more bookkeeping when they're inactive. Since we have to be able to construct a basic feasible (i.e., extreme point) solution, inactive variables must be at bound. Texts invariably assume the simple case of a lower bound of 0 and no upper bound; in this case no special action is needed. When a variable x has non-zero lower and/or upper bounds, we'll need to correct b in dy_sys whenever a is non-zero, since the simplex routines have no other way of seeing the effect of the bound. It's worth mentioning again that dylp and consys use a nonstandard convention for variable indices. For a constraint system with m constraints and n architectural variables, logicals occupy indices 1..m and architectural variables occupy indices m+1..m+n. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dylp.c 4.7 10/15/05" ; static char svnid[] UNUSED = "$Id: dylp.c 524 2013-12-15 03:59:57Z tkr $" ; /* To avoid passing an excessive number of parameters around inside the dylp implementation, the following globals are used to communicate between modules. These are defined in dylp.h, but their use is limited by the DYLP_INTERNAL conditional compilation variable. */ lp_struct *dy_lp = NULL ; consys_struct *dy_sys = NULL ; lpopts_struct *dy_opts = NULL ; lptols_struct *dy_tols = NULL ; #ifdef DYLP_STATISTICS lpstats_struct *dy_stats = NULL ; #endif int *dy_actvars = NULL, *dy_actcons = NULL, *dy_origvars = NULL, *dy_origcons = NULL, *dy_basis = NULL, *dy_var2basis = NULL, *dy_brkout = NULL, *dy_degenset = NULL, *dy_ddegenset = NULL ; flags *dy_status = NULL ; double *dy_x = NULL, *dy_xbasic = NULL, *dy_y = NULL, *dy_gamma = NULL, *dy_cbar = NULL, *dy_rho = NULL ; bool *dy_frame = NULL ; /* In an object-oriented environment, there may well be multiple client objects in existence. For efficiency, they should be able to use hot starts, but that requires the ability to track who `owns' the solver, in the sense that the problem loaded into the data structures (and basis factorisation) is the problem belonging to that client. Hence this variable: dy_owner ID of the client whose problem is loaded. Ownership is checked in dylp as part of the startup sequence and set in dy_finishup. Various other routines (in particular, the ones that produce solution vectors and tableau variables in the external reference frame) check as needed. Beware! The basic principle is that dylp checks only as far as it needs to in order to protect itself. It will not prevent one client from forcibly evicting another! It's up to the client to check whether it owns the solver and invoke the actions necessary to gain ownership: specifically, unload the other client's problem (or ask the other client to unload) and then load in its own. This implies that clients in a hostile environment should keep enough information to warm start (or be willing to do a cold start), as some other client could grab the solver between any two calls by a single client. A call with context cxUNLOAD will unload retained structures. A call with context cxLOAD or cxUSERPIV will do either a cold or warm start, just to the point where dylp is ready to begin (or resume) pivoting. In object-oriented environments, a handy ID is the value of `this' for the client object (for example, so that one client can ask another client to give up ownership). */ void *dy_owner = NULL ; /* For any of the above to be useful, a client must be able to check ownership. */ void *dy_getOwner () { return (dy_owner) ; } /* Startup control type. */ typedef enum {startCOLD, startWARM, startHOT} start_enum ; static void updateOptsAndTols (lpopts_struct *client_opts, lptols_struct *client_tols) /* A nearly trivial routine to update options and tolerances. Pulled out of dylp startup sequence to keep down the clutter from comments and provide a single point of change. Most of the options and tolerances are read-only, but dylp already adjusts a few on the fly and this is likely to grow. The general strategy is simple enough: If we have retained structures, create local copies of each structure on the stack and use them to hold the current settings. Copy the client's options and tolerances into the dylp structures, then bring back the fields that dylp modifies. The bulk copy is overkill but robust against changes in the structures. Options modified by dylp: dpsel.strat Tolerances modified by dylp: pfeas dfeas Parameters: client_opts: options supplied by client client_tols: tolerances supplied by client Returns: undefined */ { lptols_struct lcl_tols ; lpopts_struct lcl_opts ; # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 const char *rtnnme = "updateOptsAndTols" ; # endif /* Allocate dylp's structures, if they don't exist, or make copies if they do. It should be the case that we have structures iff dy_owner is non-null. */ # ifdef DYLP_PARANOIA if ((dy_owner != NULL && (dy_tols == NULL || dy_opts == NULL)) || (dy_owner == NULL && (dy_tols != NULL || dy_opts != NULL))) { errmsg(1,rtnnme,__LINE__) ; return ; } # endif if (dy_owner != NULL) { memcpy(&lcl_tols,dy_tols,sizeof(lptols_struct)) ; memcpy(&lcl_opts,dy_opts,sizeof(lpopts_struct)) ; } else { dy_tols = (lptols_struct *) MALLOC(sizeof(lptols_struct)) ; dy_opts = (lpopts_struct *) MALLOC(sizeof(lpopts_struct)) ; } /* Copy the client's structures into dylp's structures. */ memcpy(dy_tols,client_tols,sizeof(lptols_struct)) ; memcpy(dy_opts,client_opts,sizeof(lpopts_struct)) ; /* If we had retained structures, copy over the fields that dylp modifies. If we're starting afresh, make sure we have a sane default in place for pfeas and dfeas. */ if (dy_owner != NULL) { dy_opts->dpsel.strat = lcl_opts.dpsel.strat ; dy_tols->pfeas = lcl_tols.pfeas ; dy_tols->dfeas = lcl_tols.dfeas ; } else { if (dy_tols->pfeas <= 0) { dy_tols->pfeas = dy_tols->pfeas_scale*dy_tols->zero ; } if (dy_tols->dfeas <= 0) { dy_tols->dfeas = dy_tols->dfeas_scale*dy_tols->cost ; } } return ; } static dyphase_enum addcon_nextphase (int actcnt) /* This routine determines the appropriate next state after the addition of violated constraints in phase dyADDCON. It's just a bit too complicated to leave laying out in the open. We look at the active (just finished) simplex and its return code, the target simplex, and the number of constraints that were activated (the parameter actcnt). Parameter: actcnt: the number of constraints just activated; may be negative if there's been an error Returns: appropriate next phase, one of dyPRIMAL1, dyDUAL, dyDONE, or dyINV. */ { dyphase_enum retval = dyINV ; flags chkflgs = ladPRIMFEAS|ladPFQUIET ; const char *rtnnme = "addcon_nextphase" ; # ifndef NDEBUG if (dy_opts->print.major >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n Entering simplex %s (%s), loadable %d, activated %d.", dy_prtlpphase(dy_lp->simplex.active,TRUE),dy_prtlpret(dy_lp->lpret), dy_lp->sys.cons.loadable,actcnt) ; } # endif if (actcnt < 0) return (dyINV) ; switch (dy_lp->simplex.active) { case dyPRIMAL2: { switch (dy_lp->lpret) { case lpOPTIMAL: { if (actcnt == 0) { retval = dyDONE ; } else { retval = dyPURGECON ; } break ; } case lpUNBOUNDED: { if (actcnt == 0) { if (dy_lp->sys.cons.loadable > 0) { retval = dyFORCEFULL ; } else { retval = dyDONE ; } } else { retval = dy_lp->simplex.next ; } break ; } case lpSWING: { if (actcnt == 0) { retval = dyPRIMAL2 ; dy_lp->simplex.next = dyPRIMAL2 ; } else { retval = dy_lp->simplex.next ; } break ; } case lpFORCEDUAL: { if (actcnt == 0) { retval = dyFORCEFULL ; } else { retval = dyPURGECON ; } break ; } default: { break ; } } break ; } case dyPRIMAL1: { switch (dy_lp->lpret) { case lpUNBOUNDED: { if (actcnt == 0) { retval = dyFORCEFULL ; } else { retval = dyPRIMAL1 ; dy_lp->simplex.next = dyPRIMAL1 ; } break ; } case lpSWING: { if (actcnt == 0) { retval = dyPRIMAL1 ; dy_lp->simplex.next = dyPRIMAL1 ; } else { retval = dy_lp->simplex.next ; } break ; } case lpFORCEDUAL: { if (actcnt == 0) { retval = dyFORCEFULL ; } else { retval = dyPURGECON ; } break ; } case lpPUNT: case lpSTALLED: { if (actcnt == 0) { retval = dyFORCEDUAL ; } else { retval = dyPRIMAL1 ; dy_lp->simplex.next = dyPRIMAL1 ; } break ; } default: { break ; } } break ; } case dyDUAL: { switch (dy_lp->lpret) { case lpOPTIMAL: { if (actcnt == 0) { retval = dyDONE ; } else { retval = dyGENVAR ; } break ; } case lpSWING: { if (actcnt == 0) { if (dy_lp->sys.vars.loadable <= 0) { retval = dyPRIMAL1 ; dy_lp->simplex.next = dyPRIMAL1 ; } else { retval = dyADDVAR ; } } else { retval = dy_lp->simplex.next ; } break ; } case lpPUNT: case lpSTALLED: { if (actcnt == 0) { retval = dyFORCEPRIMAL ; } else { retval = dyDUAL ; dy_lp->simplex.next = dyDUAL ; } break ; } default: { break ; } } break ; } default: { break ; } } if (retval == dyDUAL && dy_opts->usedual == FALSE) { retval = dyPRIMAL1 ; dy_lp->simplex.next = dyPRIMAL1 ; } /* The call to dy_accchk is needed to ensure that the primal infeasibility information is consistent before primal1 calls initp1obj. */ if (dy_lp->simplex.next == dyPRIMAL1) { if (dy_accchk(&chkflgs) != dyrOK) { retval = dyINV ; } } if (retval == dyINV) { errmsg(435,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, actcnt,"constraints",dy_prtlpphase(dy_lp->simplex.active,TRUE), dy_prtlpret(dy_lp->lpret), dy_prtlpphase(dy_lp->simplex.next,TRUE)) ; } # ifndef NDEBUG if (dy_opts->print.major >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n Leaving phase %s, simplex %s.", dy_prtlpphase(retval,TRUE), dy_prtlpphase(dy_lp->simplex.next,TRUE)) ; } # endif return (retval) ; } static dyphase_enum addvar_nextphase (int actcnt) /* This routine determines the appropriate next state after the appropriate variable activation routine has been called in state dyADDVAR. It's just a bit too complicated to leave laying out in the open. We look at the active (just finished) simplex and its return code, the target simplex, and the number of variables that were activated (the parameter actcnt). Parameter: actcnt: the number of variables just activated (may be negative if there's been an error Returns: appropriate next phase; one of dyPRIMAL1, dyPRIMAL2, dyDUAL, dyPURGECON, dyFORCEDUAL, dyDONE, or dyINV. */ { dyphase_enum retval = dyINV ; flags chkflgs = ladPRIMFEAS|ladPFQUIET ; const char *rtnnme = "addvar_nextphase" ; if (actcnt < 0) return (dyINV) ; switch (dy_lp->simplex.active) { case dyPRIMAL1: { switch (dy_lp->lpret) { case lpINFEAS: { if (actcnt == 0) { retval = dyDONE ; } else { retval = dyPRIMAL1 ; dy_lp->simplex.next = dyPRIMAL1 ; } break ; } case lpPUNT: case lpSTALLED: { if (actcnt == 0) { if (dy_lp->sys.cons.loadable > 0) { retval = dyGENCON ; } else { retval = dyFORCEDUAL ; } } else { retval = dyPRIMAL1 ; dy_lp->simplex.next = dyPRIMAL1 ; } break ; } case lpFORCEDUAL: { retval = dyDUAL ; dy_lp->simplex.next = dyDUAL ; break ; } default: { break ; } } break ; } case dyPRIMAL2: { switch (dy_lp->lpret) { case lpOPTIMAL: { if (dy_lp->simplex.next == dyPRIMAL2) { if (actcnt == 0) { retval = dyGENCON ; dy_lp->simplex.next = dyDUAL ; } else { retval = dyPRIMAL2 ; } } else if (dy_lp->simplex.next == dyDUAL) { retval = dyDUAL ; } break ; } case lpPUNT: case lpSTALLED: { if (actcnt == 0) { retval = dyFORCEDUAL ; } else { retval = dyPRIMAL2 ; dy_lp->simplex.next = dyPRIMAL2 ; } break ; } case lpFORCEDUAL: { retval = dyDUAL ; dy_lp->simplex.next = dyDUAL ; break ; } default: { break ; } } break ; } case dyDUAL: { switch (dy_lp->lpret) { case lpOPTIMAL: { if (dy_lp->simplex.next == dyPRIMAL2) { if (actcnt == 0) { retval = dyGENCON ; dy_lp->simplex.next = dyDUAL ; } else { retval = dyPURGEVAR ; } } else if (dy_lp->simplex.next == dyDUAL) { retval = dyDUAL ; } break ; } case lpINFEAS: /* dual unbounded */ { retval = dyPRIMAL1 ; dy_lp->simplex.next = dyPRIMAL1 ; break ; } case lpSWING: { if (actcnt == 0 && dy_lp->simplex.next != dyPRIMAL1) { dy_lp->simplex.next = dyPRIMAL1 ; retval = dyADDVAR ; } else { retval = dy_lp->simplex.next ; } break ; } case lpLOSTFEAS: { retval = dy_lp->simplex.next ; break ; } case lpFORCEPRIMAL: { retval = dyPURGEVAR ; break ; } default: { break ; } } break ; } default: { break ; } } /* The call to dy_accchk is needed to ensure that the primal infeasibility information is consistent before primal1 calls dy_initp1obj. */ if (dy_lp->simplex.next == dyPRIMAL1) { if (dy_accchk(&chkflgs) != dyrOK) { retval = dyINV ; } } if (retval == dyINV) { errmsg(435,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, actcnt,"variables",dy_prtlpphase(dy_lp->simplex.active,TRUE), dy_prtlpret(dy_lp->lpret), dy_prtlpphase(dy_lp->simplex.next,TRUE)) ; } return (retval) ; } static dyphase_enum initial_activation (lpprob_struct *orig_lp) /* This routine handles requests for constraint and/or variable activation prior to starting simplex iterations. Either alone could be fit into the standard state cycle for dylp, but when both are specified it only makes sense to do constraint activation first, and that doesn't fit well with the standard state cycle. Parameter: orig_lp: the original lp Returns: dyDUAL, dyPRIMAL1, or dyPRIMAL2 if all goes well, dyINV if there's an error. */ { int xindx,xipos,conresult,varresult ; flags xistatus,calcflgs ; consys_struct *orig_sys ; dyret_enum retval ; const char *rtnnme = "initial_activation" ; orig_sys = orig_lp->consys ; conresult = -1 ; varresult = -1 ; /* If the client has asked for constraint activation, do that first. If we activate any constraints, we've lost primal feasibility, but there's still hope for dual feasibility. */ if (flgon(orig_lp->ctlopts,lpctlINITACTCON)) { # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s](%s)%d: pre-activating violated constraints, ", dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho,"obj = %g ...",dy_lp->z) ; } # endif conresult = dy_activateCons(orig_sys,FALSE) ; if (conresult > 0) { calcflgs = ladPRIMFEAS|ladPFQUIET|ladDUALFEAS|ladDFQUIET ; retval = dy_accchk(&calcflgs) ; if (retval != dyrOK) { errmsg(304,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; return (dyINV) ; } if (flgoff(calcflgs,ladPRIMFEAS)) { dy_lp->simplex.next = dyPRIMAL2 ; } else if (flgoff(calcflgs,ladDUALFEAS)) { dy_lp->simplex.next = dyDUAL ; } else { dy_lp->simplex.next = dyPRIMAL1 ; } } } else { conresult = 0 ; } /* Now do variable activation, if requested. If we're targetting dual simplex, there's a little work involved to identify the infeasible basic primal variables. For each one, set ubnd.ndx to tell dualaddvars which row to check. */ if (conresult >= 0 && flgon(orig_lp->ctlopts,lpctlINITACTVAR)) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: [%s](%s)%d: pre-activating variables, ", rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho,"%s rules, obj = %g ...", dy_prtlpphase(dy_lp->simplex.next,TRUE),dy_lp->z) ; } # endif if (dy_lp->simplex.next == dyPRIMAL1 || dy_lp->simplex.next == dyPRIMAL2) { varresult = dy_activateVars(orig_sys,NULL) ; } else { for (xipos = 1 ; xipos <= dy_sys->concnt ; xipos++) { xindx = dy_basis[xipos] ; xistatus = dy_status[xindx] ; if (flgon(xistatus,vstatBLLB|vstatBUUB)) { if (flgon(xistatus,vstatBUUB)) xindx = -xindx ; dy_lp->ubnd.ndx = xindx ; varresult = dy_dualaddvars(orig_sys) ; if (varresult < 0) break ; } } dy_lp->ubnd.ndx = 0 ; } } /* Figure out the appropriate return value and we're done. Unless something's gone wrong, we want to head for the initial simplex phase. */ if (conresult < 0 || varresult < 0) return (dyINV) ; else return (dy_lp->simplex.next) ; } static bool commonstart (start_enum start) /* This routine contains common initialisation actions for the antidegeneracy and pivot rejection algorithms, and DSE and PSE pricing. The allocation is unneeded for a hot start, but various other bits and pieces are necessary. Parameters: start: type of startup sequence (hot, warm, cold) Returns: TRUE if the initialisation completes without error, FALSE otherwise. */ { const char *rtnnme = "commonstart" ; /* Create and attach dy_brkout and dy_degenset (primal anti-degeneracy algorithm structures) and dy_ddegenset (dual anti-degeneracy structure). */ if (start != startHOT) { if (consys_attach(dy_sys,CONSYS_COL, sizeof(int),(void **) &dy_brkout) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"breakout vector") ; return (FALSE) ; } if (consys_attach(dy_sys,CONSYS_COL, sizeof(int),(void **) &dy_degenset) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"primal degenerate set vector") ; return (FALSE) ; } if (consys_attach(dy_sys,CONSYS_ROW, sizeof(int),(void **) &dy_ddegenset) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"dual degenerate set vector") ; return (FALSE) ; } } dy_lp->degen = 0 ; /* Allocate the initial pivot rejection list. */ if (start != startHOT) { dy_initpivrej(dy_sys->varcnt/10) ; } /* Create and attach dy_gamma, and dy_frame (PSE structures), and dy_rho (DSE structure). */ if (start != startHOT) { if (consys_attach(dy_sys,CONSYS_ROW, sizeof(double),(void **) &dy_gamma) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"column norm vector") ; return (FALSE) ; } if (consys_attach(dy_sys,CONSYS_ROW, sizeof(bool),(void **) &dy_frame) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"reference frame vector") ; return (FALSE) ; } if (consys_attach(dy_sys,CONSYS_COL, sizeof(double),(void **) &dy_rho) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"basis inverse row norm") ; return (FALSE) ; } } /* Set up for steepest edge pricing. If we're headed into primal simplex, scan the status array and initialise the reference frame to the current nonbasic variables. If we're headed into dual simplex, we need the basis inverse row norms; call dy_dseinit to deal with it. */ if (dy_lp->simplex.next == dyDUAL) { dy_dseinit() ; dy_lp->simplex.init_dse = FALSE ; dy_lp->simplex.init_pse = TRUE ; } else { dy_pseinit() ; dy_lp->simplex.init_pse = FALSE ; dy_lp->simplex.init_dse = TRUE ; } return (TRUE) ; } lpret_enum dylp (lpprob_struct *orig_lp, lpopts_struct *orig_opts, lptols_struct *orig_tols, lpstats_struct *orig_stats) /* This is the top-level routine for dylp. It orchestrates the main flow through the 8 step dynamic simplex algorithm outlined at the beginning of the file. Note that orig_sys should NOT have logical variables associated with it when passed to dylp. They will be added in dy_sys, but orig_sys doesn't need them and they just get in the way. If orig_opts->context == cxUNLOAD, dylp will free any retained data structures and return. The return code will always be lpINV. If orig_opts->context == cxLOAD or cxUSERPIV, dylp will do as much as is necessary to prepare for pivoting, then return. Parameters: orig_lp: (i) The original problem --- at least the constraint system, and possibly an initial basis. (o) The solution to the problem, including status and basis vectors and values for the primal and dual variables, as appropriate to the problem status. orig_opts: (read only) dylp option values. The global dy_opts is used to pass these around to the various modules of dylp. orig_tols: dylp tolerance values. Copied to an internal structure as some of these are written during execution. The orig_stats structure is used only if DYLP_STATISTICS is defined. orig_stats: (i) A statistics structure; may be null, in which case no statistics are collected. (o) Statistics on the dylp run. Returns: Any of lpOPTIMAL, lpUNBOUNDED, or lpINFEAS can be returned when dylp runs to completion. The remaining codes (see dylp.h for details) indicate a forced stop (lpITERLIM) or some extraordinary event. */ { int cnt ; dyphase_enum phase ; double tol ; lpret_enum lpresult ; flags checks ; consys_struct *orig_sys ; const char *rtnnme = "dylp" ; start_enum start ; /* dy_force.c */ dyphase_enum dy_forcePrimal2Dual(consys_struct *orig_sys) ; dyphase_enum dy_forceDual2Primal(consys_struct *orig_sys) ; dyphase_enum dy_forceFull(consys_struct *orig_sys) ; # ifdef DYLP_PARANOIA if (orig_lp == NULL) { errmsg(2,rtnnme,"orig_lp") ; return (lpINV) ; } if (orig_opts == NULL) { errmsg(2,rtnnme,"orig_opts") ; return (lpINV) ; } # endif /* The first possibility is that this call is solely for the purpose of freeing the problem data structures. The indication is a context of cxUNLOAD in orig_lp->context. Note that there may be multiple independent clients (objects) using dylp, and clients can make multiple calls to free data structures or attempt to free data structures even though dylp has never been called and the client doesn't own the solver. Note that dylp does not prevent one client from forcibly evicting another! */ if (orig_opts->context == cxUNLOAD) { dy_finishup(orig_lp,dyINV) ; return (lpINV) ; } # ifdef DYLP_PARANOIA /* Check the rest of the parameters now, we'll need them unless something goes wrong. Paranoid checks don't attempt to clean up. */ if (orig_lp->consys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (lpINV) ; } if (orig_tols == NULL) { errmsg(2,rtnnme,"orig_tols") ; return (lpINV) ; } # endif /* We're here to do actual work. If the constraint system is marked as corrupt, free any retained structures, signal an error, and bail out immediately. Attempting cleanup is risky here, and in some other errors below, but the alternative is to leak a lot of allocated space. Limit the exposure from now on by only attempting cleanup if a client owns the solver. (Note that dy_finishup will clear dy_owner.) */ orig_lp->phase = dyINV ; orig_sys = orig_lp->consys ; if (flgon(orig_sys->opts,CONSYS_CORRUPT)) { errmsg(115,rtnnme,orig_sys->nme) ; if (dy_owner != NULL) { # ifndef DYLP_NDEBUG if (orig_opts->print.major >= 1) dyio_outfmt(dy_logchn,dy_gtxecho, "\n Attempting cleanup of retained structures, owner %#08x.", dy_owner) ; # endif orig_lp->lpret = lpFATAL ; dy_finishup(orig_lp,dyINV) ; } return (lpFATAL) ; } /* Next we need to check the forcewarm and forcecold options, and set start accordingly. Cold dominates warm dominates hot, for convenience of use and debugging. (Forcing a cold start puts a sort of limited firewall between dylp and the client). If the caller is trying for a hot start, do some quick checks --- the client should own the solver (hence we have retained data structures), and the previous run should have ended cleanly (i.e., with a result of optimal, unbounded, infeasible, or iteration limit). Iteration limit is (sort of) a special case -- this arises frequently when a B&C code is using dylp for strong branching; the iteration limit will be deliberately inadequate. If we're paranoid, do a few additional consistency checks. */ # ifdef DYLP_PARANOIA if ((flgoff(orig_lp->ctlopts,lpctlDYVALID) && dy_owner != NULL) || (flgon(orig_lp->ctlopts,lpctlDYVALID) && dy_owner == NULL)) { errmsg(1,rtnnme,__LINE__) ; return (lpINV) ; } # endif if (orig_opts->forcecold == TRUE) { start = startCOLD ; } else if (orig_opts->forcewarm == TRUE) { start = startWARM ; } else { start = startHOT ; if (dy_owner != orig_lp->owner) { errmsg(396,rtnnme,orig_sys->nme,orig_lp->owner,dy_owner,"hot start") ; return (lpINV) ; } if (!(orig_lp->lpret == lpOPTIMAL || orig_lp->lpret == lpUNBOUNDED || orig_lp->lpret == lpINFEAS || orig_lp->lpret == lpITERLIM)) { errmsg(395,rtnnme,orig_sys->nme,dy_prtlpret(orig_lp->lpret)) ; return (lpINV) ; } } # ifndef DYLP_NDEBUG if (orig_opts->print.major >= 1) dyio_outfmt(dy_logchn,dy_gtxecho,"\n %s start for lp %s.", (start == startHOT)?"hot":((start == startWARM)?"warm":"cold"), orig_sys->nme) ; # endif # ifdef DYLP_PARANOIA /* In the context of an B&C code, it's common to run an LP to check a solution. If many or all variables are fixed, a presolve phase may give a 0x0 system. Warn about it if we're paranoid. */ if (orig_sys->concnt < 1 || orig_sys->varcnt < 1) { dywarn(351,rtnnme,orig_sys->nme,dy_prtlpphase(dyINV,TRUE),0, orig_sys->concnt,orig_sys->varcnt) ; } if (flgon(orig_sys->opts,CONSYS_LVARS)) { errmsg(123,rtnnme,orig_sys->nme) ; return (lpINV) ; } # endif /* Let's get to it. Do a cleanup and initialise the dy_lp control structure unless we're doing a hot start. In any event, mark the previous results as invalid, as we're about to start manipulating them. */ orig_lp->phase = dyINIT ; orig_lp->lpret = lpINV ; lpresult = lpINV ; if (start != startHOT) { dy_finishup(orig_lp,dyINV) ; dy_lp = (lp_struct *) CALLOC(1,sizeof(lp_struct)) ; dy_lp->p1obj.installed = FALSE ; dy_lp->p1obj.infvars = NULL ; dy_lp->p1obj.p1obj = NULL ; dy_lp->p1obj.p2obj = NULL ; } dy_lp->phase = dyINIT ; dy_lp->lpret = lpINV ; clrflg(orig_lp->ctlopts,lpctlDYVALID) ; /* If we're doing a warm or cold start, the first order of business is to establish the environment -- options and tolerances that'll be used by dylp as it works. For a hot start, these are already in place, but we allow the user to change them (give `em more than enough rope, I say ... ). Same for context. */ updateOptsAndTols(orig_opts,orig_tols) ; # ifdef DYLP_STATISTICS dy_stats = orig_stats ; # endif /* Initialise the local constraint system, if required. Scaling occurs here, if allowed. The original system is hidden away and orig_lp->consys is replaced by a scaled copy. See dy_scaling for details. */ if (dy_initlclsystem(orig_lp,(start == startHOT)?TRUE:FALSE) != TRUE) { errmsg(406,rtnnme,orig_sys->nme) ; orig_lp->lpret = lpFATAL ; dy_finishup(orig_lp,dy_lp->phase) ; return (lpFATAL) ; } orig_sys = orig_lp->consys ; /* Pick the appropriate startup routine for a hot, warm, or cold start. With a cold start, the user hasn't supplied an initial basis. Call dy_startup and dy_crash to get going. With a warm start, the user's given us a basis, but we need to call dy_warmstart to build the dylp data structures. If the previous problem was left active, we use dy_hotstart. On completion, the active constraint system and cross-reference structures will be built, a basis will be established and factored, the status vector will be valid, and values of the primal and dual variables and reduced costs will be valid. If the problem is prima facie infeasible (lower and upper bounds cross for some variable or constraint) this is reported via dy_lp->lpret, and we are immediately done. Similarly for unboundedness (an unconstrained variable with nonzero objective coefficient). */ switch (start) { case startHOT: { if (dy_hotstart(orig_lp) != dyrOK) { errmsg(371,rtnnme, orig_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),0,"hot start") ; dy_lp->lpret = lpFATAL ; } break ; } case startWARM: { if (dy_warmstart(orig_lp) != dyrOK) { errmsg(371,rtnnme, orig_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),0,"warm start") ; dy_lp->lpret = lpFATAL ; } break ; } case startCOLD: { if (dy_coldstart(orig_sys) != dyrOK) { errmsg(371,rtnnme, orig_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),0,"cold start") ; dy_lp->lpret = lpFATAL ; } else if (dy_crash() != dyrOK) { errmsg(302,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters,"crash") ; dy_lp->lpret = lpFATAL ; } break ; } } if (dy_lp->lpret != lpINV) { orig_lp->lpret = dy_lp->lpret ; if (orig_lp->lpret == lpINFEAS || orig_lp->lpret == lpUNBOUNDED) { dy_lp->phase = dyDONE ; orig_lp->phase = dyDONE ; #ifndef DYLP_NDEBUG if (dy_opts->print.major >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\n%s (%s): prima facie %s.", rtnnme,dy_sys->nme, ((orig_lp->lpret == lpINFEAS)?"infeasibility":"unboundedness")) ; } # endif } dy_finishup(orig_lp,dy_lp->phase) ; return (orig_lp->lpret) ; } /* Do a little more setup prior to invoking a simplex. commonstart handles initial setup for the antidegeneracy and pivot rejection algorithms, PSE and DSE pricing, and reduced costs. */ phase = dy_lp->simplex.next ; if (dy_opts->usedual == FALSE && phase == dyDUAL) phase = dyPRIMAL1 ; dy_lp->simplex.active = dyINV ; dy_lp->simplex.init_dse = TRUE ; dy_lp->simplex.init_pse = TRUE ; if (commonstart(start) == FALSE) { errmsg(371,rtnnme, orig_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),0,"common start") ; orig_lp->lpret = lpFATAL ; dy_finishup(orig_lp,dy_lp->phase) ; return (lpFATAL) ; } /* lastz.cd and lastz.vd control whether we do constraint and variable purging, respectively. Objective change is not, in general, monotonic, so we're just looking to get sufficient change to be sure we've moved since the last purge. ubnd.ndx is the index of the primal variable fingered for primal unboundedness. */ dy_lp->lastz.cd = -dy_tols->inf ; dy_lp->lastz.vd = -dy_tols->inf ; dy_lp->ubnd.ndx = 0 ; /* Various special startup activities. These are mutually exclusive, and need to be checked in the order given. Is this one of those pathological cases with no constraints? If so, make it look like we're optimal. No constraints doesn't mean no variables, so head for dyGENVAR. */ if (dy_sys->concnt == 0) { dy_lp->simplex.active = dyPRIMAL2 ; dy_lp->simplex.next = dyPRIMAL2 ; dy_lp->lpret = lpOPTIMAL ; phase = dyGENVAR ; } /* Do we want to do an initial variable purge, to try and cut down the number of variables? (This is particularly aimed at large set covering problems where all constraints are equalities and there are thousands of columns. dylp's normal cold start procedure will load the full system.) We need to rerun dy_initp1obj solely because deletion of variables can cause other variables to move, and this might invalidate indices in the infvars vector. */ else if (start == startCOLD && dy_opts->fullsys == FALSE && dy_sys->archvcnt > dy_opts->coldvars) { cnt = dy_deactivateVars(orig_sys) ; if (cnt < 0) { errmsg(371,rtnnme,orig_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),0, "initial variable deactivation") ; } if (phase == dyPRIMAL1 && cnt > 0) { if (dy_initp1obj() == FALSE) { errmsg(318,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"initialise") ; phase = dyINV ; } } } /* Is the user requesting initial constraint and/or variable activation? This is a warm or hot start activity (cold start has its own rules to decide how much of the system to activate). A fatal error here will return dyINV for the phase. */ else if (start == startWARM || start == startHOT) { if (dy_opts->fullsys == FALSE && flgon(orig_lp->ctlopts,lpctlINITACTCON|lpctlINITACTVAR)) { phase = initial_activation(orig_lp) ; } } # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->ini_simplex = phase ; # endif /* Open the main loop for dylp. Generally, there are two minor cycles --- purge/generate/add variables, primal simplex; and purge/generate/add constraints, dual simplex --- within an outer cycle which alternates between the primal and dual subcycles. There are, of course, complications in handling unbounded and infeasible problems. phase tracks the current algorithm phase. */ while (phase != dyDONE && phase != dyINV) { dy_lp->phase = phase ; # ifndef DYLP_NDEBUG if (dy_opts->print.major >= 1) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\n%s (%s): entering phase %s, iter %d.",rtnnme, dy_sys->nme,dy_prtlpphase(phase,FALSE),dy_lp->tot.iters) ; # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->phasecnts[phase]++ ; # endif switch (phase) { /* Under normal circumstances, we'll enter dyPRIMAL[1|2] from dyINIT to solve the initial LP. We'll also come here from dyADDVAR, to reoptimise after adding variables, and from dyADDCONS, to reoptimise after adding constraints to an unbounded primal. There are a number of more exotic error recovery paths which lead back to primal simplex: primal phase I is the fallback when we can't recover primal or dual feasibility. Depending on where we've been, it may be necessary to reset the PSE reference frame before starting simplex iterations (simplex.init_pse == TRUE). In particular, if we've been running dual simplex, or have added constraints, we need to do a reset. Since we'll change the basis, we'll need to to a DSE reset if we ever return to dual simplex. If the result of the LP is lpOPTIMAL, we'll do a gen/add/purge constraints sequence, then dual simplex. If the result is lpINFEAS, we'll do a generate/add variables sequence, returning here if new variables were added. If the result is unbounded, we'll do a generate/add constraints sequence, returning here to try again. It's unlikely that phase I will go unbounded, but we're only dealing with a subset of the constraints, and it happens on occasion. If we return a punt or stall, it's an indication that we're in trouble down in the simplex. As a first cut, head off to check the variables. Maybe we can activate some desireable candidates that will allow us to pivot past this point. Anything else is an error. */ case dyPRIMAL1: case dyPRIMAL2: { dy_lp->simplex.active = phase ; if (dy_lp->simplex.init_pse == TRUE) { dy_pseinit() ; dy_lp->simplex.init_pse = FALSE ; } dy_lp->simplex.init_dse = TRUE ; lpresult = dy_primal() ; dy_lp->simplex.next = dy_lp->phase ; if (dy_opts->context == cxLOAD) { phase = dyDONE ; } else { switch (lpresult) { case lpOPTIMAL: { phase = dyGENVAR ; dy_lp->simplex.next = dyPRIMAL2 ; break ; } case lpINFEAS: { phase = dyGENVAR ; break ; } case lpUNBOUNDED: { if (dy_sys->concnt < orig_sys->concnt) { phase = dyGENCON ; } else { phase = dyDONE ; } # ifdef DYLP_PARANOIA if (dy_lp->ubnd.ndx == 0) { errmsg(1,rtnnme,__LINE__) ; phase = dyINV ; break ; } # endif break ; } case lpSWING: { phase = dyGENCON ; # ifdef DYLP_PARANOIA if (dy_lp->ubnd.ndx == 0) { errmsg(1,rtnnme,__LINE__) ; phase = dyINV ; break ; } # endif break ; } case lpPUNT: case lpSTALLED: { phase = dyGENVAR ; break ; } case lpACCCHK: { phase = dyFORCEFULL ; break ; } default: { if (!(dy_opts->context == cxBANDC && lpresult == lpITERLIM)) { errmsg(353,rtnnme,orig_sys->nme,"primal", dy_prtlpret(lpresult)) ; } phase = dyDONE ; break ; } } } break ; } /* In the best case, dual simplex has reported optimal, we've added variables with a gen/add variables sequence, and now we're doing a purge before returning to primal simplex. Call dy_deactivateVars to remove variables with sufficiently lousy reduced costs (in the sense that it's highly unlikely they'll return to the basis in the optimal solution). In the not so good case, we've been forced out of dual simplex for some reason and may or may not be primal feasible. There's no guarantee of monotonic change in the objective from one purge opportunity to the next. We just need to know we've moved. */ case dyPURGEVAR: { tol = dy_tols->purge*(1.0+fabs(dy_lp->z)) ; if (!withintol(dy_lp->z,dy_lp->lastz.vd,tol)) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s](%s)%d: purging variables, obj = %g ...", dy_sys->nme,dy_prtlpphase(phase,TRUE),dy_lp->tot.iters, dy_lp->z) ; } # endif cnt = dy_deactivateVars(orig_sys) ; dy_lp->lastz.vd = dy_lp->z ; if (cnt < 0) { phase = dyINV ; } else { phase = dy_lp->simplex.next ; } } else { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s](%s)%d: variable purge skipped, obj = %g.", dy_sys->nme,dy_prtlpphase(phase,TRUE),dy_lp->tot.iters, dy_lp->z) ; } # endif phase = dy_lp->simplex.next ; } break ; } /* This phase should call a routine that generates new variables, not already present in orig_sys. This would be used for column generation algorithms and similar sorts of things. At the end of the routine, orig_sys should be modified such that the generated variables are part of the set of inactive variables, where they will be priced and added if advantageous during the dyADDVAR phase. See comments for dyADDVAR. */ case dyGENVAR: { phase = dyADDVAR ; break ; } /* This phase scans the inactive variables and adds the ones that look useful. The definition of useful varies, depending on the target simplex phase specified by dy_lp->simplex.next --- the simplex that will (eventually) run after dy_activateVars completes. If we're targetting primal simplex, we're looking for variables that price out as favourable (non-optimal) for their current status. The only complication is whether we're heading for primal phase I or II, and dy_activateVars will make sure it's using the correct reduced costs. If we're here because the dual is unbounded, we're really looking for columns which, when considered as dual constraints, can bound the dual. dy_dualaddvars will look for useful variables, considering progressively more exotic possibilities. Where we go from here depends on how we got here and how many variables were activated. See the comments with addvar_nextphase. If all is going well and we activated variables of the desired type, we'll head for the target simplex phase. If we didn't find variables, the possibilities are many and varied. Why would no variables be activated? A straightforward cause is there are no variables of the appropriate type (e.g., we're optimal or infeasible). Then there are things that dy_dualaddvars (more accurately, dual simplex) just can't cope with (e.g., no variables can be activated without losing dual feasibility). There are a number of other exotic things that can go wrong. See the comments with addvar_nextphase. */ case dyADDVAR: { if (dy_lp->sys.vars.loadable <= 0) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s](%s)%d: no loadable variables; skipping.", dy_sys->nme,dy_prtlpphase(phase,TRUE), dy_lp->tot.iters) ; } # endif phase = addvar_nextphase(0) ; break ; } else { if (dy_lp->simplex.next == dyDUAL && dy_lp->lpret == lpINFEAS) { if (dy_opts->dualadd > 0) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: [%s](%s)%d: activating variables, ",rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho,"%s rules, obj = %g ...", dy_prtlpphase(dy_lp->simplex.next,TRUE), dy_lp->z) ; } # endif cnt = dy_dualaddvars(orig_sys) ; } else { cnt = 0 ; } if (cnt > 0) { phase = dyDUAL ; } else if (cnt == 0) { dy_lp->simplex.next = dyPRIMAL1 ; checks = ladPRIMFEAS|ladPFQUIET ; if (dy_accchk(&checks) != dyrOK) { phase = dyINV ; } } else { phase = dyINV ; } } if (phase == dyADDVAR) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: [%s](%s)%d: activating variables, ", rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho,"%s rules, obj = %g ...", dy_prtlpphase(dy_lp->simplex.next,TRUE),dy_lp->z) ; } # endif cnt = dy_activateVars(orig_sys,NULL) ; phase = addvar_nextphase(cnt) ; } } break ; } /* To arrive here, we've solved to optimality with primal simplex, added constraints with a gen/add constraints, and are now purging loose constraints (dual variables with unfavourable dual reduced costs) before heading for dual simplex. This phase calls dy_deactivateCons to scan the active constraints and remove any that are loose. This is done only when there's been strict degradation of the objective (i.e., we've cut off the previous optimum point) to minimise the chance of cycling. This will not, however, guarantee that a constraint will never reactivate. A loose constraint can become tight again when variables are activated and change value. */ case dyPURGECON: { tol = dy_tols->purge*(1.0+fabs(dy_lp->z)) ; if (dy_lp->z-dy_lp->lastz.cd > tol) { # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s](%s)%d: purging constraints, obj = %g ...", dy_sys->nme,dy_prtlpphase(phase,TRUE),dy_lp->tot.iters, dy_lp->z) ; } # endif cnt = dy_deactivateCons(orig_sys) ; if (cnt < 0) phase = dyINV ; else phase = dyDUAL ; dy_lp->lastz.cd = dy_lp->z ; # ifdef DYLP_PARANOIA if (dy_chkdysys(orig_sys) == FALSE) phase = dyINV ; # endif } else { # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s](%s)%d: constraint purge skipped, obj = %g.", dy_sys->nme,dy_prtlpphase(phase,TRUE),dy_lp->tot.iters, dy_lp->z) ; } # endif phase = dyDUAL ; } break ; } /* This phase should call a routine that generates new constraints --- cutting planes, for example. As with dyGENVAR, these constraints should be added to the original system, so that they can be found in phase dyADDCON. See the comments with dyADDCON. */ case dyGENCON: { phase = dyADDCON ; break ; } /* In the common case, we're adding constraints before starting dual simplex. Also normal, and all too common when working with a partial constraint system, we're here to look for constraints to bound the primal. dy_activateBndCons scans the inactive constraints for constraints that could bound the problem but are not violated. dy_activateCons scans the inactive constraints for violated constraints. When trying to bound a problem, it's fairly common that there are no nonviolated bounding constraints. In this case, we'll go for violated constraints. (Hence the seemingly redundant test around dy_activateCons.) There's no sense in even bothering to scan if there are no constraints to load. Inactive variables referenced by activated constraints can themselves be activated. Care is taken to preserve dual feasibility (primal feasibility cannot be lost). */ case dyADDCON: { if (dy_lp->sys.cons.loadable <= 0) { phase = addcon_nextphase(0) ; # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s](%s)%d: no loadable constraints; skipping.", dy_sys->nme,dy_prtlpphase(phase,TRUE), dy_lp->tot.iters) ; } # endif break ; } if (dy_lp->lpret == lpSWING || (dy_lp->lpret == lpUNBOUNDED && (dy_lp->simplex.next == dyPRIMAL2 || dy_lp->simplex.next == dyPRIMAL1))) { # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s](%s)%d: activating bounding constraints, ", dy_sys->nme,dy_prtlpphase(phase,TRUE), dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho,"obj = %g ...",dy_lp->z) ; } # endif cnt = dy_activateBndCons(orig_sys) ; if (cnt > 0) { phase = dy_lp->simplex.next ; } else if (cnt == 0) { dy_lp->simplex.next = dyPRIMAL1 ; } else { phase = dyINV ; } } if (phase == dyADDCON) { # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s](%s)%d: activating violated constraints, ", dy_sys->nme,dy_prtlpphase(phase,TRUE), dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho,"obj = %g ...",dy_lp->z) ; } # endif cnt = dy_activateCons(orig_sys,TRUE) ; phase = addcon_nextphase(cnt) ; } break ; } /* Dual simplex has no phase I, and must start from a dual feasible basis. It can happen that the startup routines generate a dual feasible basis in dyINIT. Most often, dual feasibility is obtained by running primal simplex to optimality. If dylp is running normally, we arrive here after a gen/add/purge constraints sequence and will use dual simplex to reoptimise. We can also arrive here after adding variables (dual constraints) to an unbounded dual. There are a number of more exotic error recovery paths. Bottom line, though, is we don't get here without dual feasibility. That limits the results to optimal, dual unbounded (translated to primal infeasible), or some sort of problem. If we're optimal, we'll do a gen/add/purge variables sequence, then primal simplex. If we come back dual unbounded (seen here as primal infeasible) we need to add constraints that will bound the dual, i.e., we need to add primal variables in such a way that we can return to dual simplex. Off to gen/add variables. If we can't add bounding constraints without losing dual feasibility, dylp will fall back to primal phase I. If we return a punt or stall, we'll try to add some dual variables (primal constraints). In the event of loss of dual feasibility, we'll try to force dual feasibility by dropping the offending variables, again falling back to primal phase I if we're unsuccessful. */ case dyDUAL: { dy_lp->simplex.active = dyDUAL ; if (dy_lp->simplex.init_dse == TRUE) { dy_dseinit() ; dy_lp->simplex.init_dse = FALSE ; } dy_lp->simplex.init_pse = TRUE ; lpresult = dy_dual() ; dy_lp->simplex.next = dyDUAL ; if (dy_opts->context == cxLOAD) { phase = dyDONE ; } else { switch (lpresult) { case lpOPTIMAL: { phase = dyGENVAR ; dy_lp->simplex.next = dyPRIMAL2 ; break ; } case lpINFEAS: /* dual unbounded */ { phase = dyGENVAR ; break ; } case lpLOSTFEAS: { phase = dyFORCEDUAL ; break ; } case lpPUNT: case lpSTALLED: case lpSWING: { phase = dyGENCON ; break ; } case lpACCCHK: { phase = dyFORCEFULL ; break ; } default: { if (!(dy_opts->context == cxBANDC && lpresult == lpITERLIM)) { errmsg(353,rtnnme,orig_sys->nme,"dual", dy_prtlpret(lpresult)) ; } phase = dyDONE ; break ; } } } break ; } case dyFORCEDUAL: { phase = dy_forcePrimal2Dual(orig_sys) ; break ; } case dyFORCEPRIMAL: { phase = dy_forceDual2Primal(orig_sys) ; break ; } case dyFORCEFULL: { if (dy_lp->sys.forcedfull == TRUE || (dy_lp->sys.cons.loadable <= 0 && dy_lp->sys.vars.loadable <= 0)) { dy_lp->lpret = lpFORCEFULL ; phase = dyDONE ; } else { phase = dy_forceFull(orig_sys) ; dy_lp->sys.forcedfull = TRUE ; } break ; } default: { phase = dyINV ; errmsg(1,rtnnme,__LINE__) ; break ; } } } /* End of main loop on dylp phase. phase has where we're going, and should be one of dyDONE or dyINV; the latter means something on the order of internal confusion. dy_lp->phase records the phase just completed. First order of business is a final constraint and/or variable purge. Do this only if we have an optimal solution. For constraints, cut the purge level back to 0 (i.e., purge strictly loose constraints). */ if (phase == dyDONE && dy_lp->lpret == lpOPTIMAL && dy_opts->context != cxLOAD) { if (dy_opts->finpurge.vars == TRUE) { # ifndef DYLP_NDEBUG if (dy_opts->print.major >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\n%s (%s): entering phase %s (final), iter %d.", rtnnme,dy_sys->nme,dy_prtlpphase(dyPURGEVAR,FALSE), dy_lp->tot.iters) ; } # endif cnt = dy_deactivateVars(orig_sys) ; if (cnt < 0) { errmsg(371,rtnnme, orig_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.pivs, "final variable deactivation") ; } } if (dy_opts->finpurge.cons == TRUE) { # ifndef DYLP_NDEBUG if (dy_opts->print.major >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\n%s (%s): entering phase %s (final), iter %d.", rtnnme,dy_sys->nme,dy_prtlpphase(dyPURGECON,FALSE), dy_lp->tot.iters) ; } # endif dy_opts->con.deactlvl = 0 ; cnt = dy_deactivateCons(orig_sys) ; if (cnt < 0) { errmsg(371,rtnnme, orig_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.pivs, "final constraint deactivation") ; } } } /* If we're infeasible, and the phase I objective is still in place (the normal situation), swap it out for the original objective and recalculate duals and reduced costs. Otherwise our dual variable information is all wrong. We need to pretend the phase is dyPRIMAL2 for this to work. */ if (phase == dyDONE && dy_lp->lpret == lpINFEAS) { phase = dyPRIMAL2 ; if (dy_swapobjs(dyPRIMAL2) == FALSE) { phase = dyDONE ; errmsg(318,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"remove") ; dy_lp->lpret = lpFATAL ; } dy_calcduals() ; if (dy_calccbar() == FALSE) { phase = dyDONE ; errmsg(384,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; dy_lp->lpret = lpFATAL ; } phase = dyDONE ; } /* Call dy_finishup to assemble the final answer (as best it can) and clean up the working environment. */ orig_lp->phase = phase ; # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_finalstats(dy_stats) ; # endif dy_finishup(orig_lp,dy_lp->phase) ; return (orig_lp->lpret) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_tableau.c0000644000175200017520000012250011507440660015642 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2008 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains routines which implement `tableau' functions. They will calculate: * a column of the basis inverse, beta = inv(B)e * a row of the basis inverse, beta = einv(B) * a column of inv(B)A, abar = inv(B)Ae = inv(B)a * a row of inv(B)A, abar = einv(B)A The requested column or row should be given in the context of the original system, and the result will be returned in this context. Since dylp's active system is not always the full original system, we need to take some care. Let B be the basic partition of the active system, and N the inactive partition. Let G be the matrix composed of coefficients of inactive rows and basic columns, and let H be the matrix composed of coefficients of inactive rows and nonbasic columns. Now, if we activate the inactive rows G and declare the logical variable for each row to be basic, the basic component of the full system will be the matrix [[ B 0 ] [ G I ]] The full basis inverse can be calculated as [[ inv(B) 0 ] [ -Ginv(B) I ]]. See the typeset documentation for a decent presentation of all this. Dylp deletes its pointer to the original system when it returns --- this is the only safe course, because we have no control over it. Following that logic, the routines here require the client to pass an lpprob_struct as a parameter and a pointer to the unscaled original system is taken from it. Clearly, though, things will go badly wrong if there have been changes from the original system used on the last call to dylp. */ #define DYLP_INTERNAL #include "dylp.h" static char svnid[] UNUSED = "$Id: dy_tableau.c 407 2010-12-31 20:48:48Z lou $" ; #if DYLP_PARANOIA > 0 bool dy_std_paranoia (const lpprob_struct *orig_lp, const char *rtnnme, int line) /* Some standard paranoid checks for a call from outside, collected into one place. Parameters: orig_lp: lp problem structure rtnnme: the client routine Returns: FALSE if the paranoid checks fail, TRUE otherwise. */ { consys_struct *orig_sys ; /* Check for presence. */ if (orig_lp == NULL) { errmsg(2,rtnnme,"orig_lp") ; return (FALSE) ; } orig_sys = orig_lp->consys ; if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (FALSE) ; } /* Check for a corrupt constraint system. */ if (flgon(orig_sys->opts,CONSYS_CORRUPT)) { errmsg(115,rtnnme,orig_lp->consys->nme) ; return (FALSE) ; } /* Check that dylp and the lpprob_struct agree on whether dylp retains valid data structures. */ if ((flgoff(orig_lp->ctlopts,lpctlDYVALID) && dy_owner != NULL) || (flgon(orig_lp->ctlopts,lpctlDYVALID) && dy_owner == NULL)) { errmsg(1,rtnnme,line) ; return (FALSE) ; } return (TRUE) ; } #endif /* DYLP_PARANOIA */ bool dy_betaj (lpprob_struct *orig_lp, int tgt_j, double **p_betaj) /* Given a basic variable x, this routine returns the corresponding unscaled column of the basis inverse, beta. Of course, it's not quite that simple. The client only knows about the original system, so tgt_j is the index of x in the original system. We need to: 1) Find the index j in the active system, determine the basis pos'n k, and retrieve the portion of beta (really, column k of the basis) that corresponds to the scaled active system. 2) Unscale beta and translate it to the original system frame of reference. 3) Calculate the remaining coefficients of beta due to inactive rows. It is assumed that orig_sys is unscaled. It's an error if tgt_j is not a basic variable. As pointed out at the head of the file, there are two components to be calculated: The part of beta that's drawn from the active basis B, and the part that's drawn from the inactive matrix G. Clearly, things will go wrong if the constraint system passed in through orig_lp has been modified and no longer matches dylp's idea of the original system. In particular, note that dy_origvars and dy_origcons may well be attached to the scaled local copy of the original system. They WILL NOT be updated by changes to the client's unscaled copy. Suppose that x is basic in pos'n k, which corresponds to row i_orig. The approach is to calculate the partially unscaled basis column sc_beta as inv(B)Re, then finish unscaling with S as we drop the coefficients into their proper positions in a vector indexed in the orig_sys frame of reference. Then we add the coefficients due to -G inv(B) Parameters: orig_lp: lp problem structure tgt_j: column index in original system; negative values are assumed to specify logicals as the negative of the index of the associated constraint. p_betaj: (i) vector to hold beta; if NULL, one will be allocated; if non-NULL, will be cleared to zero. (o) inv(B)e, unscaled Returns: TRUE if the calculation is successful, FALSE otherwise. */ { int m_orig,n_orig,i_orig,j_orig,k_orig ; int m,n,i,j,k,j_bpos,v ; bool scaled,active,logical,natural ; double *sc_betaj,*betaj ; const double *rscale, *cscale ; double betaij ; pkvec_struct *ai ; consys_struct *orig_sys ; char *rtnnme = "dy_betaj" ; # if DYLP_PARANOIA > 0 if (dy_std_paranoia(orig_lp,rtnnme,__LINE__) == FALSE) { return (FALSE) ; } if (p_betaj == NULL) { errmsg(2,rtnnme,"betaj") ; return (FALSE) ; } # endif /* Always check for valid data structures. */ if (orig_lp->owner != dy_owner) { errmsg(396,rtnnme,orig_lp->consys->nme,orig_lp->owner,dy_owner, "calculate column of basis inverse") ; return (FALSE) ; } orig_sys = orig_lp->consys ; m_orig = orig_sys->concnt ; n_orig = orig_sys->varcnt ; m = dy_sys->concnt ; n = dy_sys->varcnt ; # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n generating column beta<%d>",tgt_j) ; } # endif /* Determine what sort of variable we're looking at, and do some validity checks appropriate for the type. */ j = 0 ; if (tgt_j < 0) { i_orig = -tgt_j ; if (i_orig > m_orig) { errmsg(102,rtnnme,orig_sys->nme,"row",i_orig,1,m_orig) ; return (FALSE) ; } logical = TRUE ; if (ACTIVE_CON(i_orig)) { active = TRUE ; j = dy_origcons[i_orig] ; } else { active = FALSE ; } } else if (tgt_j > 0) { j_orig = tgt_j ; if (j_orig > n_orig) { errmsg(102,rtnnme,orig_sys->nme,"column",j_orig,1,n_orig) ; return (FALSE) ; } logical = FALSE ; if (ACTIVE_VAR(j_orig)) { active = TRUE ; j = dy_origvars[j_orig] ; } else { active = FALSE ; } } else { errmsg(102,rtnnme,orig_sys->nme,"column",tgt_j,1,n_orig) ; return (FALSE) ; } /* If the variable is active, it better be basic. For a logical, check if it's in the natural basis position. Note that an architectural will automatically fail the `natural position' test. Inactive architecturals are by definition nonbasic, hence an error here. Inactive logicals are by definition basic in the natural positon and we can synthesize the column. */ natural = FALSE ; if (active == TRUE) { j_bpos = dy_var2basis[j] ; if (j_bpos == 0) { errmsg(951,rtnnme,dy_sys->nme,consys_nme(dy_sys,'v',j,FALSE,NULL),j, "calculate column of basis inverse") ; return (FALSE) ; } i_orig = dy_actcons[j_bpos] ; if (j == j_bpos) { natural = TRUE ; } } else { if (logical == TRUE) { j_bpos = i_orig ; natural = TRUE ; } else { errmsg(950,rtnnme,"architectural variable", consys_nme(orig_sys,'v',j_orig,FALSE,NULL),j_orig, "calculate column of basis inverse") ; return (FALSE) ; } } /* Special case: The basis inverse column for a logical is simply a unit vector with 1.0 in the appropriate position, *if* the logical is in its `natural' position as the basic variable for the associated constraint. This holds whether the logical is active or inactive. After the analysis above, i_orig holds the correct position. */ if (logical == TRUE && natural == TRUE) { if (*p_betaj == NULL) { *p_betaj = (double *) CALLOC((m_orig+1),sizeof(double)) ; } else { memset(*p_betaj,0,((size_t) (m_orig+1)*sizeof(double))) ; } (*p_betaj)[i_orig] = 1.0 ; # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,", logical for ") ; if (active == FALSE) { dyio_outfmt(dy_logchn,dy_gtxecho,"inactive ") ; } dyio_outfmt(dy_logchn,dy_gtxecho,"constraint %s (%d)", consys_nme(orig_sys,'c',i_orig,FALSE,NULL),i_orig) ; if (active == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, ", basis pos'n %d, constraint %s (%d)",j_bpos, consys_nme(orig_sys,'c',i_orig,FALSE,NULL),i_orig) ; } dyio_outfmt(dy_logchn,dy_gtxecho,".") ; if (dy_opts->print.tableau >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n non-zeros: (%d, %g)", i_orig,(*p_betaj)[i_orig]) ; } } # endif return (TRUE) ; } /* We have an architectural variable or an unnatural logical. In either case, the variable is active with index j and basic in basis position j_bpos. i_orig is the index of the corresponding row in orig_sys. */ # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 1) { if (logical == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, ", logical for active constraint %s (%d)", consys_nme(dy_sys,'c',j,FALSE,NULL),j) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,", architectural %s (%d)", consys_nme(dy_sys,'v',j,FALSE,NULL),j) ; } dyio_outfmt(dy_logchn,dy_gtxecho, ", basis pos'n %d, constraint %s (%d).",j_bpos, consys_nme(orig_sys,'c',i_orig,FALSE,NULL),i_orig) ; } # endif /* Set up and retrieve the portion of beta corresponding to the active matrix. The actual unscaling looks like inv(B) = S sc_inv(B) R, and then we're extracting the column at pos'n j_bpos (which corresponds to some row i_orig). It's convenient to fold R into the unit vector and get half of the unscaling done as we extract beta. */ sc_betaj = (double *) CALLOC((m+1),sizeof(double)) ; scaled = dy_isscaled() ; if (scaled == TRUE) { dy_scaling_vectors(&rscale,&cscale) ; sc_betaj[j_bpos] = rscale[i_orig] ; } else { sc_betaj[j_bpos] = 1.0 ; } dy_ftran(sc_betaj,FALSE) ; # ifndef DYLP_NDEBUG /* Still in dy_sys reference frame. */ if (dy_opts->print.tableau >= 6) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n dy_sys nonzeros:") ; k = 0 ; for (i = 1 ; i <= m ; i++) { if (sc_betaj[i] != 0) { j = dy_basis[i] ; dyio_outfmt(dy_logchn,dy_gtxecho," (%s %d", consys_nme(dy_sys,'c',i,FALSE,NULL),i) ; dyio_outfmt(dy_logchn,dy_gtxecho," %s %d %g)", consys_nme(dy_sys,'v',j,FALSE,NULL),j,sc_betaj[i]) ; k++ ; if (k%3 == 0) dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t\t ") ; } } } # endif /* Change reference frame, and complete the unscaling, if necessary. Recall that for the logical for row k, the column scaling factor is 1/R[k]. Be careful with unnatural logicals! The correct column scaling factor is 1/R[k] where k is the natural row for the logical, which may not be the row i where it's currently basic. So that we're not testing for scaling in the loop body, replicate the loop. */ if (*p_betaj == NULL) { betaj = (double *) CALLOC((m_orig+1),sizeof(double)) ; *p_betaj = betaj ; } else { memset(*p_betaj,0,((size_t)(m_orig+1)*sizeof(double))) ; betaj = *p_betaj ; } if (scaled == TRUE) { for (i = 1 ; i <= m ; i++) { i_orig = dy_actcons[i] ; k = dy_basis[i] ; if (k <= m) { k_orig = dy_actcons[k] ; betaj[i_orig] = sc_betaj[i]/rscale[k_orig] ; setcleanzero(betaj[i_orig],dy_tols->zero) ; } else { j_orig = dy_actvars[k] ; betaj[i_orig] = sc_betaj[i]*cscale[j_orig] ; } } } else { for (i = 1 ; i <= m ; i++) { i_orig = dy_actcons[i] ; betaj[i_orig] = sc_betaj[i] ; } } # ifndef DYLP_NDEBUG /* Now in orig_sys frame of reference. */ if (dy_opts->print.tableau >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n active nonzeros:") ; k = 0 ; for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if (betaj[i_orig] != 0) { dyio_outfmt(dy_logchn,dy_gtxecho," (%s %d %g)", consys_nme(orig_sys,'c',i_orig,FALSE,NULL),i_orig, betaj[i_orig]) ; k++ ; if (k%3 == 0) dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t\t ") ; } } } # endif if (sc_betaj != NULL) FREE(sc_betaj) ; /* Ok, that was the easy part. Now we need to fill in the portions of beta contributed by inactive constraints --- the G submatrix. In some respects this is straightforward. We have the unscaled portion of beta contributed by the active system, and we need to calculate -G beta. Note that we are now working completely in the original frame of reference, except for a quick excursion to determine if a variable is basic in the active system. Of course, if there are no loadable constraints, we can skip all this. The trek between reference frames is arduous. Given a, to find the appropriate row of beta, we do j_orig -> j -> j_bpos -> k_orig. In words, column in original system to column in active system to basis position (row) in active system to row in original system, which is the element we want in beta. At least we don't have to unscale at the same time. */ if (dy_lp->sys.cons.loadable > 0) { ai = pkvec_new(orig_sys->maxrowlen) ; for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if (ACTIVE_CON(i_orig)) continue ; # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n Processing inactive row %s (%d)", consys_nme(orig_sys,'c',i_orig,FALSE,NULL),i_orig) ; } # endif if (consys_getrow_pk(orig_sys,i_orig,&ai) == FALSE) { errmsg(122,rtnnme,orig_sys->nme,"row", consys_nme(orig_sys,'c',i_orig,TRUE,NULL),i_orig) ; if (ai != NULL) pkvec_free(ai) ; if (betaj != NULL) FREE(betaj) ; return (FALSE) ; } betaij = 0 ; for (v = 0 ; v < ai->cnt ; v++) { j_orig = ai->coeffs[v].ndx ; if (INACTIVE_VAR(j_orig)) continue ; j = dy_origvars[j_orig] ; j_bpos = dy_var2basis[j] ; if (j_bpos > 0) { k_orig = dy_actcons[j_bpos] ; # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho," (%s %d %d %g)", consys_nme(orig_sys,'v',j_orig,FALSE,NULL), j_orig,k_orig,ai->coeffs[v].val) ; } # endif betaij += ai->coeffs[v].val*betaj[k_orig] ; } } setcleanzero(betaij,dy_tols->zero) ; betaj[i_orig] = -betaij ; } if (ai != NULL) pkvec_free(ai) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n nonzeros:") ; k = 0 ; for (i = 1 ; i <= m_orig ; i++) { if (betaj[i] != 0) { dyio_outfmt(dy_logchn,dy_gtxecho," (%d, %g)",i,betaj[i]) ; k++ ; if (k%5 == 0) dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t ") ; } } } # endif /* That should do it. */ return (TRUE) ; } bool dy_betak (lpprob_struct *orig_lp, int orig_k, double **p_betak) /* Given a basic column k, this routine returns the unscaled column of the basis inverse, beta. Historically, this function was written well after dy_betaj, so we're going to do something that looks odd: Given basis column orig_k, we'll determine the index of the corresponding basic variable in the original system context and call dy_betaj. As you'd expect, this isn't entirely trivial. The column orig_k is specified in the context of the original system. Put another way, the client is asking for the column corresponding to the variable that's basic for constraint orig_k of the original system. So ... 1) Determine whether k is an active constraint. 2) If yes, consult dy_basis to determine the basic variable then translate to the appropriate external constraint or variable index. If no, then the associated logical is basic, and the appropriate index is trivially -orig_k. Parameters: orig_lp: lp problem structure orig_k: basis column index, in the original system context p_betak: (i) vector to hold beta; if NULL, one will be allocated; if non-NULL, will be cleared to zero. (o) inv(B)e, unscaled Returns: TRUE if the calculation is successful, FALSE otherwise. */ { int m,i,j,orig_j ; char *rtnnme = "dy_betak" ; # if DYLP_PARANOIA > 0 if (dy_std_paranoia(orig_lp,rtnnme,__LINE__) == FALSE) { return (FALSE) ; } if (p_betak == NULL) { errmsg(2,rtnnme,"betak") ; return (FALSE) ; } # endif /* Always check for valid data structures. */ if (orig_lp->owner != dy_owner) { errmsg(396,rtnnme,orig_lp->consys->nme,orig_lp->owner,dy_owner, "calculate column of basis inverse") ; return (FALSE) ; } /* Check to see whether constraint k is active. If so, determine the index of the basic variable. First, get the constraint index i in the active system, then get the index j of the basic variable. If j is a logical, we need the index of the corresponding constraint in the original system (negated), otherwise we need the index of the variable in the original system. */ m = dy_sys->concnt ; if (ACTIVE_CON(orig_k)) { i = dy_origcons[orig_k] ; j = dy_basis[i] ; if (j <= m) { orig_j = -dy_actcons[j] ; } else { orig_j = dy_actvars[j] ; } } /* If k is inactive, then the associated logical is basic and the index is trivially -orig_k */ else { orig_j = -orig_k ; } return (dy_betaj(orig_lp,orig_j,p_betak)) ; } bool dy_abarj (lpprob_struct *orig_lp, int tgt_j, double **p_abarj) /* This routine returns the unscaled ftran'd column inv(B)a. Of course, it's not quite that simple. The client only knows about the original system, so j_orig is the index of x in the original system. We need to: 1) Find the index j in the active system, retrieve a, and calculate the portion of abar that corresponds to the scaled active system. It's entirely possible that x is not active, in which case we need to do a fair bit more work to cobble up something that looks like a scaled active column. 2) Unscale abar and translate it to the original system frame of reference. 3) Calculate the remaining coefficients of abar due to inactive rows. It is assumed that orig_sys is unscaled. Check the written documentation to get a good handle on the math. The relevant outer unscaling is: x architectural basic in pos'n i: abar = S sc_abar (1/S) s logical basic in pos'n i: abar = (1/R) sc_abar (1/S) To cancel a factor of inv(R) attached to the scaled basis inverse, it'll be convenient to apply row scaling to an unscaled column prior to doing the ftran. Finally, we'll need to calculate the coefficients of abar that belong to inactive constraints. Recall that we could extend the basis as [[B 0] [G I]] with an inverse of [[inv(B) 0] [-Ginv(B) I]]. Then for a full column a = [a a], the value of abar will be [ inv(B)a a - G inv(B)a ] = [ abarj a - G abarj ]. Parameters: orig_lp: lp problem structure tgt_j: column index in original system; negative values are assumed to specify logicals as the negative of the index of the associated constraint. p_abarj: (i) vector to hold abar; if NULL, one will be allocated (o) inv(B)a, unscaled Returns: TRUE if the calculation is successful, FALSE otherwise. */ { int n,m,i,j,k,j_bpos,n_orig,m_orig,i_orig = 0,j_orig = 0,k_orig,v ; double *sc_abarj,*abarj ; const double *rscale,*cscale ; double Sj,abarij,agj ; pkvec_struct *aj_pk ; bool scaled,active,logical ; pkvec_struct *ai ; consys_struct *orig_sys ; const char *rtnnme = "dy_abarj" ; # if DYLP_PARANOIA > 0 if (dy_std_paranoia(orig_lp,rtnnme,__LINE__) == FALSE) { return (FALSE) ; } if (p_abarj == NULL) { errmsg(2,rtnnme,"abarj") ; return (FALSE) ; } # endif /* Always check for valid data structures. */ if (orig_lp->owner != dy_owner) { errmsg(396,rtnnme,orig_lp->consys->nme,orig_lp->owner,dy_owner, "calculate column of basis inverse") ; return (FALSE) ; } orig_sys = orig_lp->consys ; m_orig = orig_sys->concnt ; n_orig = orig_sys->varcnt ; m = dy_sys->concnt ; n = dy_sys->varcnt ; # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n generating column abar<%d>, ",tgt_j) ; } # endif /* If we're scaled, grab the scaling vectors. */ scaled = dy_isscaled() ; if (scaled == TRUE) { dy_scaling_vectors(&rscale,&cscale) ; } /* Is the column active? Remember, the client can point us at logicals with a negative index, so we have to consider the question of active rows. An active logical has the same index as its associated row. */ j = 0 ; if (tgt_j < 0) { i_orig = -tgt_j ; if (i_orig > m_orig) { errmsg(102,rtnnme,orig_sys->nme,"row",i_orig,1,m_orig) ; return (FALSE) ; } logical = TRUE ; if (ACTIVE_CON(i_orig)) { active = TRUE ; j = dy_origcons[i_orig] ; } else { active = FALSE ; } } else if (tgt_j > 0) { j_orig = tgt_j ; if (j_orig > n_orig) { errmsg(102,rtnnme,orig_sys->nme,"column",j_orig,1,n_orig) ; return (FALSE) ; } logical = FALSE ; if (ACTIVE_VAR(j_orig)) { active = TRUE ; j = dy_origvars[j_orig] ; } else { active = FALSE ; } } else { errmsg(102,rtnnme,orig_sys->nme,"column",tgt_j,1,n_orig) ; return (FALSE) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 1) { if (logical == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho,"logical %s (%d) for ", consys_nme(orig_sys,'v',n_orig+i_orig,FALSE,NULL),i_orig) ; if (active == FALSE) { dyio_outfmt(dy_logchn,dy_gtxecho,"inactive ") ; } dyio_outfmt(dy_logchn,dy_gtxecho,"constraint %s (%d)", consys_nme(orig_sys,'c',i_orig,FALSE,NULL),i_orig) ; } else { if (active == FALSE) { dyio_outfmt(dy_logchn,dy_gtxecho,"inactive ") ; } dyio_outfmt(dy_logchn,dy_gtxecho,"variable %s (%d)", consys_nme(orig_sys,'v',j_orig,FALSE,NULL),j_orig) ; } } # endif /* Special case: If the specified column represents the logical for an inactive constraint, the algebra says the answer is a unit vector. Arguably we should handle a column corresponding to any active basic variable here, but hey, the client should *think* a moment before calling this routine. */ if (active == FALSE && logical == TRUE) { if (*p_abarj == NULL) { abarj = (double *) CALLOC((m_orig+1),sizeof(double)) ; *p_abarj = abarj ; } else { abarj = *p_abarj ; memset(abarj,0,((size_t) (m_orig+1)*sizeof(double))) ; } abarj[i_orig] = 1.0 ; # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n nonzeros: (%d, %g)", i_orig,abarj[i_orig]) ; } # endif return (TRUE) ; } /* Set up a working vector for abar. */ sc_abarj = (double *) CALLOC((m+1),sizeof(double)) ; /* If the column is active, we can get sc_abarj with little effort. Do half the outer unscaling (the final 1/S) to get to the same point as the else case, where we start with an inactive and unscaled column. */ if (active == TRUE) { if (logical == TRUE) { sc_abarj[j] = 1.0 ; } else if (consys_getcol_ex(dy_sys,j,&sc_abarj) == FALSE) { errmsg(122,rtnnme,dy_sys->nme,"column", consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; if (sc_abarj != NULL) FREE(sc_abarj) ; return (FALSE) ; } dy_ftran(sc_abarj,FALSE) ; if (scaled == TRUE) { if (logical == TRUE) { Sj = rscale[i_orig] ; } else { Sj = 1/cscale[j_orig] ; } for (k = 1 ; k <= m ; k++) { sc_abarj[k] *= Sj ; } } } /* An inactive column. This is an architectural (we disposed of inactive logicals above). We need to acquire the unscaled column from orig_sys and filter for the active coefficients. Because orig_sys is unscaled, we need to premultiply with R (i.e., make the column look scaled) to cancel the 1/R attached to the basis inverse. On the other side, we don't need to multiply by 1/S to nullify column scaling because the column is unscaled to start with. Once we've prepped the column, do the ftran. */ else { aj_pk = NULL ; if (consys_getcol_pk(orig_sys,j_orig,&aj_pk) == FALSE) { errmsg(122,rtnnme,orig_sys->nme,"column", consys_nme(orig_sys,'v',j_orig,TRUE,NULL),j_orig) ; if (aj_pk != NULL) pkvec_free(aj_pk) ; return (FALSE) ; } if (scaled == TRUE) { for (k = 0 ; k < aj_pk->cnt ; k++) { i_orig = aj_pk->coeffs[k].ndx ; if (ACTIVE_CON(i_orig)) { i = dy_origcons[i_orig] ; sc_abarj[i] = rscale[i_orig]*aj_pk->coeffs[k].val ; } } } else { for (k = 0 ; k < aj_pk->cnt ; k++) { i_orig = aj_pk->coeffs[k].ndx ; if (ACTIVE_CON(i_orig)) { i = dy_origcons[i_orig] ; sc_abarj[i] = aj_pk->coeffs[k].val ; } } } pkvec_free(aj_pk) ; dy_ftran(sc_abarj,FALSE) ; } /* We've reached a common point for active and inactive columns. abar is mostly unscaled and still in the active system frame of reference. Allocate a vector to hold the final values in the original system's frame of reference. */ if (*p_abarj == NULL) { abarj = (double *) CALLOC((m_orig+1),sizeof(double)) ; *p_abarj = abarj ; } else { abarj = *p_abarj ; memset(abarj,0,((size_t) (m_orig+1)*sizeof(double))) ; } /* Copy over the values, doing the final unscaling if needed. This cancels a scaling factor (1/S) attached to the scaled basis inverse. The only trick here is that we need to account for logicals out of natural position. The correct scaling factor is 1/R[k], where k is the natural row for the logical, which may not be the row i where it's currently basic. */ if (scaled == TRUE) { for (i = 1 ; i <= m ; i++) { if (sc_abarj[i] == 0) continue ; j = dy_basis[i] ; i_orig = dy_actcons[i] ; if (j <= dy_sys->concnt) { j_orig = dy_actcons[j] ; abarj[i_orig] = sc_abarj[i]/rscale[j_orig] ; } else { j_orig = dy_actvars[j] ; abarj[i_orig] = sc_abarj[i]*cscale[j_orig] ; } setcleanzero(abarj[i_orig],dy_tols->zero) ; } } else { for (i = 1 ; i <= m ; i++) { if (sc_abarj[i] == 0) continue ; i_orig = dy_actcons[i] ; abarj[i_orig] = sc_abarj[i] ; setcleanzero(abarj[i_orig],dy_tols->zero) ; } } # ifndef DYLP_NDEBUG /* Now in orig_sys frame of reference. */ if (dy_opts->print.tableau >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n active nonzeros:") ; k = 0 ; for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if (abarj[i_orig] != 0) { dyio_outfmt(dy_logchn,dy_gtxecho," (%s %d %g)", consys_nme(orig_sys,'c',i_orig,FALSE,NULL),i_orig, abarj[i_orig]) ; k++ ; if (k%3 == 0) dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t\t ") ; } } } # endif if (sc_abarj != NULL) FREE(sc_abarj) ; /* Ok, that was the easy part. Now we need to fill in the portion of abar contributed by inactive constraints --- the G matrix. In some respects this is straightforward. We have the unscaled portion of abarj contributed by the active system, and we need to calculate a - G abarj. Note that we are now working completely in the original frame of reference, except for a quick excursion to determine if a variable is basic in the active system. Of course, if there are no loadable constraints, we can skip all this. The translation here is pretty ugly. Given a, to find the appropriate row of abar, we do j_orig -> j -> j_bpos -> k_orig. In words, column in original system to column in active system to basis position in active position (row) to row in original system, which is the element we want in abarj. Nonbasic variables are not of interest except that we need the coefficient for our target column, tgt_j. */ if (dy_lp->sys.cons.loadable > 0) { ai = pkvec_new(orig_sys->maxrowlen) ; for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if (ACTIVE_CON(i_orig)) continue ; # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n Processing inactive row %s (%d)", consys_nme(orig_sys,'c',i_orig,FALSE,NULL),i_orig) ; } # endif if (consys_getrow_pk(orig_sys,i_orig,&ai) == FALSE) { errmsg(122,rtnnme,orig_sys->nme,"row", consys_nme(orig_sys,'c',i_orig,TRUE,NULL),i_orig) ; if (ai != NULL) pkvec_free(ai) ; if (abarj != NULL) FREE(abarj) ; return (FALSE) ; } abarij = 0 ; agj = 0 ; for (v = 0 ; v < ai->cnt ; v++) { j_orig = ai->coeffs[v].ndx ; if (j_orig == tgt_j) { agj = ai->coeffs[v].val ; } if (INACTIVE_VAR(j_orig)) { continue ; } j = dy_origvars[j_orig] ; j_bpos = dy_var2basis[j] ; if (j_bpos > 0) { k_orig = dy_actcons[j_bpos] ; # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho," (%s %d %d %g)", consys_nme(orig_sys,'v',j_orig,FALSE,NULL), j_orig,k_orig,ai->coeffs[v].val) ; } # endif abarij += ai->coeffs[v].val*abarj[k_orig] ; } } abarj[i_orig] = agj-abarij ; setcleanzero(abarj[i_orig],dy_tols->zero) ; } if (ai != NULL) pkvec_free(ai) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n nonzeros:") ; k = 0 ; for (i = 1 ; i <= m_orig ; i++) { if (abarj[i] != 0) { dyio_outfmt(dy_logchn,dy_gtxecho," (%d, %g)",i,abarj[i]) ; k++ ; if (k%5 == 0) dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t ") ; } } } # endif /* That should do it. */ return (TRUE) ; } bool dy_betai (lpprob_struct *orig_lp, int tgt_i, double **p_betai) /* Given a row i, this routine returns the corresponding unscaled row of the basis inverse, beta. Of course, it's not quite that simple. The client only knows about the original system, so tgt_i is the index of i in the original system. There are two cases: 1) If tgt_i is active, we need to determine its position in the active system and extract the corresponding row of the basis inverse, e inv(B). Then we need to translate this row into the original system frame of reference, padding it out with zeros. 2) If tgt_i is inactive, we need to synthesize the row that would result if the constraint were activated, g inv(B). The logical for the constraint is used as the basic variable. This is accomplished by translating g into the active frame of reference, executing the btran, and then translating back to the original system frame of reference, adding padding and a coefficient for the slack. It is assumed that orig_sys is unscaled. Clearly, things will go wrong if the constraint system passed in through orig_lp has been modified and no longer matches dylp's idea of the original system. In particular, note that dy_origvars and dy_origcons may well be attached to the scaled local copy of the original system. They WILL NOT be updated by changes to the client's unscaled copy. Parameters: orig_lp: lp problem structure tgt_i: constraint (row) index in original system p_betai: (i) vector to hold beta; if NULL, one will be allocated; if non-NULL, will be cleared to zero. (o) e inv(B), unscaled Returns: TRUE if the calculation is successful, FALSE otherwise. */ { int m_orig,n_orig,i_orig,j_orig ; int m,n,i,j,j_bpos,v ; bool scaled,active ; double *sc_betai,*betai ; const double *rscale, *cscale ; double Sj,gij ; pkvec_struct *ai ; consys_struct *orig_sys ; char *rtnnme = "dy_betai" ; # ifndef DYLP_NDEBUG int k_orig ; # endif # if DYLP_PARANOIA > 0 if (dy_std_paranoia(orig_lp,rtnnme,__LINE__) == FALSE) { return (FALSE) ; } if (p_betai == NULL) { errmsg(2,rtnnme,"betai") ; return (FALSE) ; } # endif /* Always check for valid data structures. */ if (orig_lp->owner != dy_owner) { errmsg(396,rtnnme,orig_lp->consys->nme,orig_lp->owner,dy_owner, "calculate row of basis inverse") ; return (FALSE) ; } /* Do a bit of setup. Pull constraint system sizes for convenient use. Grab the scaling vectors if we're scaled. */ orig_sys = orig_lp->consys ; m_orig = orig_sys->concnt ; n_orig = orig_sys->varcnt ; m = dy_sys->concnt ; n = dy_sys->varcnt ; scaled = dy_isscaled() ; if (scaled == TRUE) { dy_scaling_vectors(&rscale,&cscale) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n generating row beta<%d>,",tgt_i) ; } # endif /* What sort of constraint do we have? */ if (ACTIVE_CON(tgt_i)) { active = TRUE ; i = dy_origcons[tgt_i] ; } else { active = FALSE ; i = -1 ; } # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 1) { if (active == FALSE) { dyio_outfmt(dy_logchn,dy_gtxecho," inactive") ; } dyio_outfmt(dy_logchn,dy_gtxecho," constraint %s (%d)", consys_nme(orig_sys,'c',tgt_i,FALSE,NULL),tgt_i) ; if (active == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho,", basis pos'n %d",i) ; } dyio_outfmt(dy_logchn,dy_gtxecho,".") ; } # endif /* For an active constraint, we can retrieve the row as einv(B). But, we really have the scaled basis inverse inv(S)inv(B)inv(R). Hence it's convenient to use a vector with S in place of a unit coefficient to cancel the leading scale factor. We have to be careful to get the right scale factor --- the column scale factor for the logical for constraint i is 1/R, and this is true even if the logical is basic for some other constraint k. */ sc_betai = (double *) CALLOC((m+1),sizeof(double)) ; if (active == TRUE) { if (scaled == TRUE) { j = dy_basis[i] ; if (j > m) { j_orig = dy_actvars[j] ; Sj = cscale[j_orig] ; } else { i_orig = dy_actcons[j] ; Sj = 1/rscale[i_orig] ; } sc_betai[i] = Sj ; } else { sc_betai[i] = 1.0 ; } dy_btran(sc_betai) ; } /* For an inactive constraint, we have more work to do. We need to pull the row from orig_sys, apply column scaling, and drop the coefficients into the vector in basis order so that we can use btran. But since this is an inactive constraint, we don't have to worry about logicals. */ else { ai = NULL ; if (consys_getrow_pk(orig_sys,tgt_i,&ai) == FALSE) { errmsg(122,rtnnme,orig_sys->nme,"row", consys_nme(orig_sys,'c',tgt_i,FALSE,NULL),tgt_i) ; if (ai != NULL) pkvec_free(ai) ; if (sc_betai != NULL) FREE(sc_betai) ; return (FALSE) ; } if (scaled == TRUE) { for (v = 0 ; v < ai->cnt ; v++) { j_orig = ai->coeffs[v].ndx ; if (ACTIVE_VAR(j_orig)) { j = dy_origvars[j_orig] ; j_bpos = dy_var2basis[j] ; if (j_bpos > 0) { gij = cscale[j_orig]*ai->coeffs[v].val ; sc_betai[j_bpos] = -gij ; } } } } else { for (v = 0 ; v < ai->cnt ; v++) { j_orig = ai->coeffs[v].ndx ; if (ACTIVE_VAR(j_orig)) { j = dy_origvars[j_orig] ; j_bpos = dy_var2basis[j] ; if (j_bpos > 0) { sc_betai[j_bpos] = -ai->coeffs[v].val ; } } } } if (ai != NULL) { pkvec_free(ai) ; } dy_btran(sc_betai) ; } /* At this point, we have a row beta which is partially unscaled and in basis order. First order of business is to allocate a working array for the final product. */ if (*p_betai == NULL) { betai = (double *) CALLOC((m_orig+1),sizeof(double)) ; *p_betai = betai ; } else { betai = *p_betai ; memset(betai,0,((size_t) (m_orig+1)*sizeof(double))) ; } /* To complete the unscaling, we need to postmultiply by R. The array is in basis order, which is correct, but we need to reposition so that the row order matches the original system. */ if (scaled == TRUE) { for (i = 0 ; i <= m ; i++) { i_orig = dy_actcons[i] ; betai[i_orig] = sc_betai[i]*rscale[i_orig] ; } } else { for (i = 0 ; i <= m ; i++) { i_orig = dy_actcons[i] ; betai[i_orig] = sc_betai[i] ; } } if (active == FALSE) { betai[tgt_i] = 1.0 ; } if (sc_betai != NULL) FREE(sc_betai) ; # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n nonzeros:") ; v = 0 ; for (i_orig = 1 ; i_orig <= m_orig ; i_orig++) { if (betai[i_orig] != 0) { if (ACTIVE_CON(i_orig)) { i = dy_origcons[i_orig] ; j = dy_basis[i] ; if (j <= m) { k_orig = dy_actcons[j] ; dyio_outfmt(dy_logchn,dy_gtxecho," (%s %d %g)", consys_nme(orig_sys,'v',n_orig+k_orig,FALSE,NULL), k_orig,betai[i_orig]) ; } else { j_orig = dy_actvars[j] ; dyio_outfmt(dy_logchn,dy_gtxecho," (%s %d %g)", consys_nme(orig_sys,'v',j_orig,FALSE,NULL),j_orig, betai[i_orig]) ; } } else { dyio_outfmt(dy_logchn,dy_gtxecho, " (%s %d %g)", consys_nme(orig_sys,'v',n_orig+i_orig,FALSE,NULL), i_orig,betai[i_orig]) ; } v++ ; if (v%3 == 0) dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t\t ") ; } } } # endif /* That's it, we're done. */ return (TRUE) ; } bool dy_abari (lpprob_struct *orig_lp, int tgt_i, double **p_abari, double **p_betai) /* This routine returns the value of row i of inv(B)A = inv(B) [ B N ] in p_abari. If p_betai is non-NULL, the routine returns row i of inv(B) [ A I ] where I is the identity matrix of coefficients of logicals. Row i of inv(B)A is still returned in p_abari, and e inv(B) I = beta is returned in p_betai. Given the primitives we have available (ftran, btran), the best we can do here is extract the relevant row of the basis inverse and calculate dot(beta,a) for j in N. Fortunately, we have a handy routine to calculate beta. Parameters: orig_lp: lp problem structure tgt_i: constraint (row) index in original system p_abari: (i) vector to hold abar; if NULL, one will be allocated; if non-NULL, will be cleared to zero. (o) e inv(B) A, unscaled p_betai: (i) vector to hold beta; if NULL, one will be allocated; if non-NULL, will be cleared to zero. (o) e inv(B), unscaled Returns: TRUE if the calculation is successful, FALSE otherwise. */ { int m_orig,n_orig,j_orig ; int i,j,j_bpos ; bool active,dologicals,retval ; double *betai,*abari ; consys_struct *orig_sys ; char *rtnnme = "dy_abari" ; # ifndef DYLP_NDEBUG int save_printlvl = dy_opts->print.tableau ; int v ; # endif # if DYLP_PARANOIA > 0 if (dy_std_paranoia(orig_lp,rtnnme,__LINE__) == FALSE) { return (FALSE) ; } if (p_abari == NULL) { errmsg(2,rtnnme,"abari") ; return (FALSE) ; } # endif if (p_betai != NULL) { dologicals = TRUE ; } /* Always check for valid data structures. */ if (orig_lp->owner != dy_owner) { errmsg(396,rtnnme,orig_lp->consys->nme,orig_lp->owner,dy_owner, "calculate row of basis inverse") ; return (FALSE) ; } /* Do a bit of setup. Pull constraint system sizes for convenient use. */ orig_sys = orig_lp->consys ; m_orig = orig_sys->concnt ; n_orig = orig_sys->varcnt ; # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n generating row abar<%d>,",tgt_i) ; } # endif /* What sort of constraint do we have? */ if (ACTIVE_CON(tgt_i)) { active = TRUE ; i = dy_origcons[tgt_i] ; } else { active = FALSE ; i = -1 ; } # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 1) { if (active == FALSE) { dyio_outfmt(dy_logchn,dy_gtxecho," inactive") ; } dyio_outfmt(dy_logchn,dy_gtxecho," constraint %s (%d)", consys_nme(orig_sys,'c',tgt_i,FALSE,NULL),tgt_i) ; if (active == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho,", basis pos'n %d",i) ; } dyio_outfmt(dy_logchn,dy_gtxecho,".") ; } # endif /* Call dy_betai to get row beta of the basis inverse. */ betai = *p_betai ; # ifndef DYLP_NDEBUG dy_opts->print.tableau = 0 ; retval = dy_betai(orig_lp,tgt_i,&betai) ; dy_opts->print.tableau = save_printlvl ; # else retval = dy_betai(orig_lp,tgt_i,&betai) ; # endif if (retval == FALSE) { errmsg(952,rtnnme,orig_sys->nme,"row",tgt_i,"constraint", consys_nme(orig_sys,'c',tgt_i,FALSE,NULL),tgt_i) ; if (betai != NULL) FREE(betai) ; return (FALSE) ; } /* Get a vector to return abar. */ if (*p_abari == NULL) { abari = (double *) CALLOC((n_orig+1),sizeof(double)) ; *p_abari = abari ; } else { abari = *p_abari ; memset(abari,0,((size_t) (n_orig+1)*sizeof(double))) ; } /* Now walk the columns of orig_sys calculating abar = dot(beta,a). We can help ourselves a bit here by recognising basic columns, which will resolve to 0 or 1, depending on whether the variable is basic for this row. Other than that, however, active or inactive is irrelevant. */ for (j_orig = 1 ; j_orig <= n_orig ; j_orig++) { if (ACTIVE_VAR(j_orig)) { j = dy_origvars[j_orig] ; j_bpos = dy_var2basis[j] ; if (j_bpos > 0) { if (j_bpos == i) { abari[j_orig] = 1.0 ; } else { abari[j_orig] = 0.0 ; } continue ; } } abari[j_orig] = consys_dotcol(orig_sys,j_orig,betai) ; setcleanzero(abari[j_orig],dy_tols->zero) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.tableau >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n nonzeros:") ; v = 0 ; for (j_orig = 1 ; j_orig <= n_orig ; j_orig++) { if (abari[j_orig] != 0) { dyio_outfmt(dy_logchn,dy_gtxecho," (%s %d %g)", consys_nme(orig_sys,'v',j_orig,FALSE,NULL),j_orig, abari[j_orig]) ; v++ ; if (v%3 == 0) dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t\t ") ; } } } # endif /* Did the client ask for the columns corresponding to logicals? If so, hand back beta. Otherwise, we're done with it. */ if (dologicals == TRUE) { *p_betai = betai ; } else { if (betai != NULL) FREE(betai) ; } /* That's it, we're done. */ return (TRUE) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_varmgmt.c0000644000175200017520000013344312253224475015715 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains routines for primal architectural variable management. The two primitive routines, dy_actNBPrimArch and dy_deactNBPrimArch, provide activation and deactivation of a nonbasic primal architectural variable. The top-level routines for normal bulk activation and deactivation are dy_activateVars and dy_deactivateVars, respectively. dy_activateVars pays attention to the target simplex phase and will only activate variables which will be feasible for the phase. In the normal course of events, dylp will deactivate architecturals with unfavourable cbar and activate architecturals with favourable cbar. Put another way, variables already at their optimum bound and unlikely to ever change are deactivated. Inactive variables not at their optimum bound are activated for adjustment. Put another way, loose dual constraints are deactivated, violated dual constraints are activated. When attempting to recover from pivoting problems in primal simplex, dylp will deactivate architecturals with favourable cbar in an attempt to force dual feasibility and allow a transition to dual simplex. Logical variables cannot be activated or deactivated independently; they are manipulated with their associated constraint. See dy_conmgmt.c Activating or deactivating a basic primal variable is problematic. Viewed from a primal perspective, activation requires we find a basis position, while deactivation amounts to forcing the variable to bound. Implementation is nontrivial, and both actions can have serious side effects. This package does not support activation into the basis. (Note, however, that it's standard procedure when activating a constraint to use the associated logical as the new basic variable.) Don't be taken in by the pseudo-primitive, dy_deactBPrimArch. It's used only in the context of attempting to force primal feasibility, and it's a faint hope at best. The specified variable must be primal infeasible, and all hell will break loose when this variable is forced to bound as it's moved into the nonbasic partition prior to calling dy_deactNBPrimArch. Sometimes we want to view the column for x as a dual constraint: In terms of the dual problem, we're activating or deactivating a dual constraint in order to bound the dual. The routines that control this activity (dy_dualaddvars and subordinates) are in dy_bound.c. */ /* A few words about the activation and deactivation of variables as it relates to the PSE and DSE pricing algorithms. Variable deactivation targets only nonbasic architectural variables. For DSE pricing, that's not a problem --- the basis inverse row norms ||beta|| are not affected. For PSE pricing, there is again no difficulty. The column goes away, but the norms ||abar~|| of other columns are not affected. Variable activation has no effect on DSE pricing. Again, bringing a variable into the nonbasic partition doesn't affect the beta. For PSE pricing, the variable must be added to the reference frame and ||abar~|| must be calculated. Activation and deactivation of constraints and associated logicals is a very different story. See the discussion in dy_conmgmt.c. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_varmgmt.c 4.6 10/15/05" ; static char svnid[] UNUSED = "$Id: dy_varmgmt.c 524 2013-12-15 03:59:57Z tkr $" ; /* Reverse integer comparison so we can sort arrays of indices in nonincreasing order. Returns: < 0 if i > j 0 if i = j > 0 if i < j */ static int intcompare (const void *p_i, const void *p_j) { int i = *((const int *) p_i) ; int j = *((const int *) p_j) ; return ((j)-(i)) ; } static bool prepcol_pk (consys_struct *orig_sys, int oxjndx, pkvec_struct **p_aj) /* This routine `preps' a column a from the original constraint system for use in the active constraint system. It returns a packed vector containing only the active coefficients, with row indices translated from the original system to the active system. Parameters: orig_sys: The original constraint system. oxjndx: The index of x in the original system. p_aj: (i) A pkvec structure, or NULL (in which case a vector will be allocated) (o) The prepped column a. Returns: TRUE if a is prepped without error, FALSE otherwise. */ { int pkndx,ocndx,cndx ; pkvec_struct *aj ; pkcoeff_struct *aij ; const char *rtnnme = "prepcol_pk" ; # ifdef DYLP_PARANOIA /* We shouldn't be here if x is already active. */ if (p_aj == NULL) { errmsg(2,rtnnme,"&a") ; return (FALSE) ; } if (ACTIVE_VAR(oxjndx)) { char onmbuf[128] ; (void) consys_nme(orig_sys,'v',oxjndx,TRUE,onmbuf) ; errmsg(431,rtnnme, orig_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "variable",onmbuf,oxjndx, consys_nme(dy_sys,'v',dy_origvars[oxjndx],TRUE,NULL), dy_origvars[oxjndx]) ; return (FALSE) ; } # endif /* Pull the column from orig_sys. If the user didn't supply a pkvec to hold the prepped column, one will be allocated in the process. */ if (consys_getcol_pk(orig_sys,oxjndx,p_aj) == FALSE) { errmsg(122,rtnnme,orig_sys->nme, "column",consys_nme(orig_sys,'v',oxjndx,TRUE,NULL),oxjndx) ; return (FALSE) ; } aj = *p_aj ; /* For coefficients in active constraints, convert the row index. Delete coefficients in inactive constraints. */ for (pkndx = 0,aij = aj->coeffs ; pkndx < aj->cnt ; ) { ocndx = aij->ndx ; if (INACTIVE_CON(ocndx)) { cndx = dy_origcons[ocndx] ; # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tdeleting a<%d,%d> = %g; %s constraint %s inactive.", ocndx,oxjndx,aij->val, consys_prtcontyp(orig_sys->ctyp[ocndx]), consys_nme(orig_sys,'c',ocndx,FALSE,NULL)) ; } # endif aj->cnt-- ; if (pkndx < aj->cnt) { aij->ndx = aj->coeffs[aj->cnt].ndx ; aij->val = aj->coeffs[aj->cnt].val ; } } else { cndx = dy_origcons[ocndx] ; # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\ta<%d,%d> = %g becomes a<%d,%d>; %s constraint %s active.", ocndx,oxjndx,aij->val,cndx,oxjndx, consys_prtcontyp(orig_sys->ctyp[ocndx]), consys_nme(orig_sys,'c',ocndx,FALSE,NULL)) ; } # endif aij->ndx = cndx ; pkndx++ ; aij++ ; } } return (TRUE) ; } bool dy_actNBPrimArch (consys_struct *orig_sys, int ovndx) /* This routine activates the nonbasic primal architectural variable x with index ovndx in orig_sys, installing it in the active system dy_sys with index j and the status it held while inactive. There are a number of details to attend to: * The rhs and rhslow values of affected constraints are adjusted. * The objective correction is adjusted. * The variable is added to the PSE reference frame and the projected column norm gamma[j] is initialized to 1. Note that by convention, NBFR variables have value zero. It's left to the client to decide if initializing gamma[j] to 1 is adequate. The alternative (calculating the correct projected norm for the current reference frame) is best done in bulk rather than one variable at a time. Parameters: orig_sys: The original constraint system. ovndx: The index of the variable in the original system. Returns: TRUE if the activation completes without error; FALSE otherwise. */ { int pkndx,i,j ; double valj,cj,lbj,ubj ; flags statj ; pkvec_struct *aj ; pkcoeff_struct *aij ; const char *rtnnme = "dy_actNBPrimArch" ; # ifdef DYLP_PARANOIA if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (FALSE) ; } if (ovndx <= 0 || ovndx > orig_sys->archvcnt) { errmsg(102,rtnnme,"inactive variable",ovndx,1,orig_sys->archvcnt) ; return (FALSE) ; } j = (orig_sys->varcnt-dy_lp->sys.vars.unloadable) - (dy_lp->sys.vars.loadable+dy_sys->archvcnt) ; if (j != 0) { errmsg(444,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "variable",orig_sys->varcnt,dy_lp->sys.vars.unloadable, dy_lp->sys.vars.loadable,dy_sys->archvcnt,j) ; return (FALSE) ; } if (ACTIVE_VAR(ovndx)) { char onmbuf[128] ; j = dy_origvars[ovndx] ; (void) consys_nme(orig_sys,'v',ovndx,TRUE,onmbuf) ; errmsg(431,rtnnme, orig_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "variable",onmbuf,ovndx, consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; return (FALSE) ; } # endif /* Get the status. If we're paranoid, confirm that it's normal nonbasic and loadable. */ statj = (flags) (-dy_origvars[ovndx]) ; # ifdef DYLP_PARANOIA if (!LOADABLE_VAR(ovndx)) { errmsg(445,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "variable",consys_nme(orig_sys,'v',ovndx,TRUE,NULL),ovndx) ; return (FALSE) ; } if (flgoff(statj,vstatNBLB|vstatNBUB|vstatNBFR)) { errmsg(433,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "inactive",consys_nme(orig_sys,'v',ovndx,TRUE,NULL),ovndx, dy_prtvstat(statj)) ; return (FALSE) ; } # endif /* Pull the column from orig_sys and prep it for installation in dy_sys. */ aj = NULL ; if (prepcol_pk(orig_sys,ovndx,&aj) == FALSE) { errmsg(432,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(orig_sys,'v',ovndx,TRUE,NULL),ovndx) ; if (aj != NULL) pkvec_free(aj) ; return (FALSE) ; } cj = orig_sys->obj[ovndx] ; ubj = orig_sys->vub[ovndx] ; lbj = orig_sys->vlb[ovndx] ; /* Install the column and update the associated structures. */ if (consys_addcol_pk(dy_sys,vartypCON,aj,cj, orig_sys->vlb[ovndx],orig_sys->vub[ovndx]) == FALSE) { errmsg(156,rtnnme,"variable",dy_sys->nme,aj->nme) ; pkvec_free(aj) ; return (FALSE) ; } j = aj->ndx ; dy_origvars[ovndx] = j ; dy_actvars[j] = ovndx ; dy_status[j] = statj ; dy_var2basis[j] = 0 ; if (dy_lp->p1obj.installed == TRUE) { dy_lp->p1obj.p2obj[j] = cj ; dy_sys->obj[j] = 0.0 ; } /* Get the variable's value. If it's nonzero, scan the column and make any necessary adjustments to rhs and rhslow of affected constraints. Also adjust the objective correction. */ if (flgon(statj,vstatNBLB)) { valj = lbj ; } else if (flgon(statj,vstatNBUB)) { valj = ubj ; } else { valj = 0.0 ; } dy_x[j] = valj ; if (valj != 0) { for (pkndx = 0,aij = aj->coeffs ; pkndx < aj->cnt ; pkndx++,aij++) { i = aij->ndx ; dy_sys->rhs[i] += aij->val*valj ; setcleanzero(dy_sys->rhs[i],dy_tols->zero) ; if (dy_sys->ctyp[i] == contypRNG) { dy_sys->rhslow[i] += aij->val*valj ; setcleanzero(dy_sys->rhslow[i],dy_tols->zero) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tadjusting %s constraint %s (%d), ", consys_prtcontyp(dy_sys->ctyp[i]), consys_nme(dy_sys,'c',i,FALSE,NULL),i) ; dyio_outfmt(dy_logchn,dy_gtxecho,"a<%d,%d> = %g, x<%d> = %g, ", i,j,aij->val,j,valj) ; if (dy_sys->ctyp[i] == contypRNG) dyio_outfmt(dy_logchn,dy_gtxecho,"rhslow & ") ; dyio_outfmt(dy_logchn,dy_gtxecho,"rhs += %g.", aij->val*valj) ; } # endif } dy_lp->inactzcorr -= cj*valj ; } pkvec_free(aj) ; /* Add the variable to the reference frame and initialize gamma[j]. */ dy_frame[j] = TRUE ; dy_gamma[j] = 1 ; /* And finally, a little bookkeeping. */ dy_lp->sys.vars.loadable-- ; # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tadjusting objective correction, ") ; dyio_outfmt(dy_logchn,dy_gtxecho,"c<%d> = %g, x<%d> = %g, zcorr -= %g.", ovndx,orig_sys->obj[ovndx],ovndx,valj, orig_sys->obj[ovndx]*valj) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t%s %s (%d) = %g copied to index %d, status %s.", consys_prtvartyp(dy_sys->vtyp[j]), consys_nme(orig_sys,'v',ovndx,FALSE,NULL),ovndx,valj,j, dy_prtvstat(statj)) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->vars.actcnt[ovndx]++ ; # endif return (TRUE) ; } bool dy_actNBPrimArchList (consys_struct *orig_sys, int cnt, int *ovndxs) /* This routine is purely a shell to call dy_actNBPrimArch for each of the indices in the vector ovndxs. It performs minimal error checking, relying on checking in actNBPrimArch. One thing it does do is check if the variable is already active. This can happen when the list passed in avndxs includes duplicate indices, so we don't want it trapped later as an error. Parameters: orig_sys: The original constraint system. cnt: The number of indices in ovndxs ovndxs: Vector of variable indices (0-based) Returns: TRUE if all variables are successfully activated, FALSE otherwise */ { int j,k ; bool retval ; const char *rtnnme = "dy_actNBPrimArchList" ; # ifdef DYLP_PARANOIA if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (FALSE) ; } if (ovndxs == NULL) { errmsg(2,rtnnme,"ovndxs") ; return (FALSE) ; } if (cnt <= 0 || cnt > orig_sys->archvcnt) { errmsg(5,rtnnme,"cnt",cnt) ; return (FALSE) ; } # endif retval = TRUE ; for (k = 0 ; k < cnt && retval == TRUE ; k++) { j = ovndxs[k] ; if (ACTIVE_VAR(j)) continue ; # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n activating variable %s (%d)", consys_nme(orig_sys,'v',j,TRUE,NULL),j) ; } # endif retval = dy_actNBPrimArch(orig_sys,j) ; if (retval == FALSE) { errmsg(430,rtnnme, orig_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "activate","variable", consys_nme(orig_sys,'v',j,TRUE,NULL),j) ; } } # ifdef DYLP_PARANOIA if (retval == TRUE) { retval = dy_chkdysys(orig_sys) ; } # endif return (retval) ; } bool dy_deactBPrimArch (consys_struct *orig_sys, int j) /* This routine deactivates the basic primal architectural variable x, removing it from dy_sys. The only reason we want to do this is because we're trying to force primal feasibility. The chance of achieving primal feasibility is pretty well zero, given that we can't really deactivate the implicit bound constraint --- as we force x into the nonbasic partition, we simultaneously force it to the nearest bound. But in the context of dual error recovery, it will serve the purpose of moving the basis. We can't deactivate a basic variable, so we need to force x into the nonbasic partition. Suppose x occupies basis pos'n i. The obvious candidate to fill the slot is the logical for constraint i. If it's nonbasic, we swap it in with value 0 and then call dy_deactNBPrimArch to deactivate the newly nonbasic x. But it could also be that x is basic in some other position, k. In which case we just try again, with the logical x as the new target. Why, you ask, are we hunting down logicals, instead of just swapping with any old variable? Because we'll have enough problems after this without accidentally creating a singular basis. Parameters: orig_sys: Original constraint system j: The variable to be deactivated Returns: TRUE if the deactivation succeeds, FALSE otherwise. */ { int i,k ; double valj ; flags statj,stati ; const char *rtnnme = "dy_deactBPrimArch" ; /* Prep intermixed with paranoia. We need to retrieve the status and check that it's what we expect. */ # ifdef DYLP_PARANOIA if (j <= dy_sys->logvcnt || j > dy_sys->varcnt) { errmsg(102,rtnnme,"active variable",j,dy_sys->logvcnt+1,dy_sys->varcnt) ; return (FALSE) ; } # endif statj = dy_status[j] ; # ifdef DYLP_PARANOIA if (flgoff(statj,vstatBLLB|vstatBUUB)) { errmsg(438,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',j,TRUE,NULL),j,dy_prtvstat(statj)) ; return (FALSE) ; } # endif /* Search for a nonbasic logical x which we can swap into the basis to replace x. No loop body required, except for paranoia. */ for (i = dy_var2basis[j] ; dy_var2basis[i] != 0 ; i = dy_var2basis[i]) { # ifdef DYLP_PARANOIA if (i <= 0 || i > dy_sys->concnt) { errmsg(102,rtnnme,"logical variable",i,1,dy_sys->concnt) ; return (FALSE) ; } # endif } /* We have to determine the appropriate new status for both x and x. Arguably, we shouldn't see vstatSB here (superbasic and dual feasible just don't go together), but it's trivial to handle. Capture x's new value while we're at it. */ statj = getflg(dy_status[j],vstatSTATUS) ; switch (statj) { case vstatBLLB: { statj = vstatNBLB ; valj = dy_sys->vlb[j] ; break ; } case vstatBUUB: { statj = vstatNBUB ; valj = dy_sys->vub[j] ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } stati = getflg(dy_status[i],vstatSTATUS) ; switch (stati) { case vstatNBLB: { stati = vstatBLB ; break ; } case vstatNBUB: { stati = vstatBUB ; break ; } case vstatNBFX: { stati = vstatBFX ; break ; } case vstatNBFR: { stati = vstatBFR ; break ; } case vstatSB: { stati = vstatB ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n swapping %s (%d) %s -> ", consys_nme(dy_sys,'v',j,FALSE,NULL),j, dy_prtvstat(dy_status[j])) ; dyio_outfmt(dy_logchn,dy_gtxecho,"%s ",dy_prtvstat(statj)) ; dyio_outfmt(dy_logchn,dy_gtxecho,"<=> %s (%d) %s -> ", consys_nme(dy_sys,'v',i,FALSE,NULL),i, dy_prtvstat(dy_status[i])) ; dyio_outfmt(dy_logchn,dy_gtxecho,"%s.",dy_prtvstat(stati)) ; } # endif /* Tweak dy_basis, dy_var2basis, dy_status, dy_x, and dy_xbasic to do the swap. The entries for x are going to disappear momentarily, but deactNBPrimArch will want to examine them to do the deactivation. Guaranteed we change the composition of the PSE and DSE norms with this maneuver. */ k = dy_var2basis[j] ; dy_basis[k] = i ; dy_xbasic[k] = dy_x[i] ; dy_var2basis[i] = k ; dy_status[i] = stati ; dy_var2basis[j] = 0 ; dy_status[j] = statj ; dy_x[j] = valj ; dy_lp->simplex.init_pse = TRUE ; dy_lp->simplex.init_dse = TRUE ; /* Reality is altered. Call dy_deactNBPrimArch to do the heavy lifting. */ return (dy_deactNBPrimArch(orig_sys,j)) ; } bool dy_deactNBPrimArch (consys_struct *orig_sys, int j) /* This routine deactivates the nonbasic primal architectural variable x, removing it from dy_sys. There are a number of details to attend to: * The rhs and rhslow values for affected constraints are adjusted. * The objective correction is adjusted. If consys shifts a variable to fill the hole at index j (the common case), we also need to * Update the dy_origvars entry for the new x. * Check if the new x is basic, and, if so, correct dy_basis. Note that by convention, NBFR variables have value zero. We don't have to remove x from the reference frame --- since dy_frame and dy_gamma are attached to dy_sys, removal occurs automatically as a side effect of removing the variable from dy_sys. Parameters: orig_sys: The original constraint system. j: The index of the variable in the active system. orig_sys is used only for printing and paranoid checks, but it gives a nice symmetry with dy_actNBPrimArch. Returns: TRUE if the installation completes without error; FALSE otherwise. */ { int ovndx,i,pkndx ; double valj ; flags statj ; pkvec_struct *aj ; pkcoeff_struct *aij ; const char *rtnnme = "dy_deactNBPrimArch" ; /* Prep intermixed with paranoia. We need to retrieve the status and check that it's appropriate for deactivation, and that we have a valid index in the old system. */ # ifdef DYLP_PARANOIA if (j <= dy_sys->logvcnt || j > dy_sys->varcnt) { errmsg(102,rtnnme,"active variable",j,dy_sys->logvcnt+1,dy_sys->varcnt) ; return (FALSE) ; } # endif statj = dy_status[j] ; # ifdef DYLP_PARANOIA if (flgoff(statj,vstatNONBASIC|vstatNBFR)) { errmsg(433,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "active",consys_nme(dy_sys,'v',j,TRUE,NULL),j, dy_prtvstat(statj)) ; return (FALSE) ; } # endif ovndx = dy_actvars[j] ; # ifdef DYLP_PARANOIA if (ovndx <= 0 || ovndx > orig_sys->varcnt) { errmsg(102,rtnnme,"original variable",ovndx,1,orig_sys->varcnt) ; return (FALSE) ; } i = (orig_sys->varcnt-dy_lp->sys.vars.unloadable) - (dy_lp->sys.vars.loadable+dy_sys->archvcnt) ; if (i != 0) { errmsg(444,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "variable", orig_sys->varcnt,dy_lp->sys.vars.unloadable, dy_lp->sys.vars.loadable,dy_sys->archvcnt,i) ; return (FALSE) ; } # endif /* More prep. Retrieve the column and the value of the variable. */ aj = NULL ; if (consys_getcol_pk(dy_sys,j,&aj) == FALSE) { errmsg(122,rtnnme,dy_sys->nme,"variable", consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; if (aj != NULL) pkvec_free(aj) ; return (FALSE) ; } valj = dy_x[j] ; /* Ok, things look good --- we can locate the variable in the active and original systems, and we have the column in hand. To deactivate, we clean the status and set it in dy_origvars to mark the variable inactive. If the outgoing variable is NBFX, mark it with the NOLOAD qualifier. If x is nonzero, traverse the column and correct the rhs and rhslow values, and adjust the objective correction. */ clrflg(statj,vstatQUALS) ; if (statj == vstatNBFX) setflg(statj,vstatNOLOAD) ; MARK_INACTIVE_VAR(ovndx,-((int) statj)) ; if (valj != 0) { for (pkndx = 0, aij = aj->coeffs ; pkndx < aj->cnt ; pkndx++, aij++) { i = aij->ndx ; dy_sys->rhs[i] -= aij->val*valj ; setcleanzero(dy_sys->rhs[i],dy_tols->zero) ; if (dy_sys->ctyp[i] == contypRNG) { dy_sys->rhslow[i] -= aij->val*valj ; setcleanzero(dy_sys->rhslow[i],dy_tols->zero) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tadjusting %s constraint %s (%d), ", consys_prtcontyp(dy_sys->ctyp[i]), consys_nme(dy_sys,'c',i,FALSE,NULL),i) ; dyio_outfmt(dy_logchn,dy_gtxecho,"a<%d,%d> = %g, x<%d> = %g, ", i,j,aij->val,j,valj) ; if (dy_sys->ctyp[i] == contypRNG) dyio_outfmt(dy_logchn,dy_gtxecho,"rhslow & ") ; dyio_outfmt(dy_logchn,dy_gtxecho,"rhs -= %g.", aij->val*valj) ; } # endif } dy_lp->inactzcorr += dy_sys->obj[j]*valj ; # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tadjusting objective correction, ") ; dyio_outfmt(dy_logchn,dy_gtxecho,"c<%d> = %g, x<%d> = %g, zcorr += %g.", j,dy_sys->obj[j],j,valj,dy_sys->obj[j]*valj) ; } # endif } pkvec_free(aj) ; /* Delete the column from the active system. Row vectors attached to dy_sys will be automatically rearranged by the consys package. */ if (consys_delcol(dy_sys,j) == FALSE) { errmsg(112,rtnnme,dy_sys->nme,"delete","variable", consys_nme(dy_sys,'v',j,FALSE,NULL),j) ; return (FALSE) ; } # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->vars.deactcnt[ovndx]++ ; # endif /* Unless x was the last variable in dy_sys, the last variable has been moved into slot j to close up the hole. Normally, there will be two remaining details to attend to: * Consult dy_actvars[j] to find the index ovndx of x in the original system, and correct dy_origvars[ovndx]. * Check dy_var2basis[j], and see if the variable moved into this slot is basic. If so, correct dy_basis. */ if (j <= dy_sys->varcnt) { ovndx = dy_actvars[j] ; # ifdef DYLP_PARANOIA if (dy_origvars[ovndx] != dy_sys->varcnt+1) { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%s (%d) shifted from column %d", consys_nme(dy_sys,'v',j,FALSE,NULL),ovndx, dy_origvars[ovndx]) ; } # endif dy_origvars[ovndx] = j ; i = dy_var2basis[j] ; if (i != 0) { # ifdef DYLP_PARANOIA if (dy_basis[i] != dy_sys->varcnt+1) { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,", basis entry %d corrected",i) ; } # endif dy_basis[i] = j ; } } /* And finally ... if the status was anything other than NBFX, we now have a variable we can activate. But if it was NBFX, well, the number of unloadable variables just increased. */ if (flgon(statj,vstatNBFX)) { dy_lp->sys.vars.unloadable++ ; } else { dy_lp->sys.vars.loadable++ ; } return (TRUE) ; } static bool deactNBPrimArchList (consys_struct *orig_sys, int cnt, int *avndxs) /* This routine is purely a shell to call dy_deactNBPrimArch for each of the indices in the vector avndxs. It performs minimal error checking, relying on checking in dy_deactNBPrimArch. Parameters: orig_sys: The original constraint system cnt: The number of indices in avndxs avndxs: Vector of variable indices (0-based) orig_sys is used only for printing and paranoid checks, but it gives a nice symmetry with actNBPrimArchList. Returns: TRUE if all variables are successfully deactivated, FALSE otherwise */ { int k ; bool retval ; const char *rtnnme = "deactNBPrimArchList" ; # ifdef DYLP_PARANOIA if (avndxs == NULL) { errmsg(2,rtnnme,"avndxs") ; return (FALSE) ; } if (cnt <= 0 || cnt > dy_sys->archvcnt) { errmsg(5,rtnnme,"cnt",cnt) ; return (FALSE) ; } # endif /* To make sure consys doesn't shift variables out from under us, we need to delete in nonincreasing order. */ qsort(&avndxs[0],cnt,sizeof(int),intcompare) ; retval = TRUE ; for (k = 0 ; k < cnt && retval == TRUE ; k++) { # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n deactivating variable %s (%d)", consys_nme(dy_sys,'v',avndxs[k],TRUE,NULL),avndxs[k]) ; } # endif retval = dy_deactNBPrimArch(orig_sys,avndxs[k]) ; if (retval == FALSE) { errmsg(430,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "deactivate","variable", consys_nme(dy_sys,'v',avndxs[k],TRUE,NULL),avndxs[k]) ; } } # ifdef DYLP_PARANOIA if (retval == TRUE) { retval = dy_chkdysys(orig_sys) ; } # endif return (retval) ; } static int scanPrimVarStdDeact (int **p_avndxs) /* This routine scans the active constraint system for variables that are candidates for normal variable deactivation during primal simplex, i.e., nonbasic architectural variables which are judged unlikely to be useful in improving the solution because they have a lousy reduced cost. The routine begins by scanning dy_cbar to determine a deactivation threshold, then purges all variables with reduced costs which exceed dy_tols.purgevar times the threshold. Variables with status NBFX are deactivated if we happen to scan them, but they're relatively rare and we won't do a deactivation scan just for them. Parameters: p_avndxs: (i) empty vector to hold variable indices; assumed to be sufficiently large; will be allocated if NULL (o) indices of variables to be deactivated; may not be allocated if no candidates are identified Returns: number of variables to be deactivated, -1 if there's an error during scanning (error is possible only when paranoid) */ { int j,m,n,purgecnt,*avndxs ; double maxpcbar,pthresh,maxncbar,nthresh,cbarj ; flags statj ; bool purge ; # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 const char *rtnnme = "scanPrimVarStdDeact" ; if (p_avndxs == NULL) { errmsg(2,rtnnme,"avndxs") ; return (-1) ; } # endif /* Scan the nonbasic variables to calculate the deactivation thresholds. We're interested in variables with status NBLB and cbar > 0, and variables with status NBUB and cbar < 0. */ m = dy_sys->concnt ; n = dy_sys->varcnt ; maxpcbar = 0 ; maxncbar = 0 ; for (j = m+1 ; j <= n ; j++) { if (flgon(dy_status[j],vstatNBLB)) { cbarj = dy_cbar[j] ; if (cbarj > maxpcbar) maxpcbar = cbarj ; } else if (flgon(dy_status[j],vstatNBUB)) { cbarj = dy_cbar[j] ; if (cbarj < maxncbar) maxncbar = cbarj ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n %g <= cbar <= %g over deactivation candidates.", maxncbar,maxpcbar) ; } # endif purge = FALSE ; if (maxpcbar > 0) { pthresh = dy_tols->purgevar*maxpcbar ; if (pthresh > dy_tols->bogus*dy_tols->dfeas) { purge = TRUE ; } else { pthresh = dy_tols->inf ; } } else { pthresh = dy_tols->inf ; } if (maxncbar < 0) { nthresh = dy_tols->purgevar*maxncbar ; if (-nthresh > dy_tols->bogus*dy_tols->dfeas) { purge = TRUE ; } else { nthresh = -dy_tols->inf ; } } else { nthresh = -dy_tols->inf ; } # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 2) { if (purge == FALSE) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n %g <= purge threshold <= %g; tol = %g; scan aborted.", dy_tols->purgevar*maxncbar,dy_tols->purgevar*maxpcbar, dy_tols->bogus*dy_tols->dfeas) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, "\n %g <= purge threshold <= %g; tol = %g; scanning.", nthresh,pthresh,dy_tols->bogus*dy_tols->dfeas) ; } } # endif if (purge == FALSE) return (0) ; /* Scan preparation. If the user hasn't supplied a vector to hold the indices, allocate one now. */ purgecnt = 0 ; if (*p_avndxs == NULL) { avndxs = (int *) MALLOC(dy_sys->archvcnt*sizeof(int)) ; } else { avndxs = *p_avndxs ; } /* Scan the architecturals again, this time with an eye to collecting a list of variables to be deactivated. */ for (j = m+1 ; j <= n ; j++) { purge = FALSE ; statj = dy_status[j] ; cbarj = dy_cbar[j] ; /* Do the tests for purging: NBFX status, or NBLB or NBUB status and reduced cost over the purge threshold. */ if ((flgon(statj,vstatNBLB) && cbarj > pthresh) || (flgon(statj,vstatNBUB) && cbarj < nthresh) || flgon(statj,vstatNBFX)) { purge = TRUE ; # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n queuing %s (%d) for deactivation, %s, cbar<%d> = %g", consys_nme(dy_sys,'v',j,TRUE,NULL),j, dy_prtvstat(statj),j,cbarj) ; } # endif } if (purge == TRUE) { avndxs[purgecnt++] = j ; } } /* If we supplied avndxs and found no variables to deactivate, free the vector. If we found candidates, set avndxs into p_avndxs. */ if (*p_avndxs == NULL) { if (purgecnt == 0) { FREE(avndxs) ; } else { (*p_avndxs) = avndxs ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n queued %d variables for deactivation.",purgecnt) ; } # endif return (purgecnt) ; } static int scanPrimVarStdAct (consys_struct *orig_sys, int **p_ovndxs, int *preset) /* This routine scans the reduced cost of a set of inactive variables, selecting suitable variables for activation. The set of inactive variables can be specified using the preset parameter. If preset is missing, the set of variables to consider is all inactive variables. `Suitable' depends on the simplex phase. In primal simplex, a variable must price out with a favourable (nonoptimal) reduced cost. In dual simplex, a variable must price out as dual feasible (equivalently, an unfavourable (optimal) reduced cost). Parameters: orig_sys: The original constraint system. p_ovndxs: (i) empty vector to hold variable indices; assumed to be sufficiently large; will be allocated if NULL (o) indices of variables to be activated; may not be allocated if no candidates are identified preset A preset list of candidates to consider. preset[0] should contain the number of candidates in the list. Returns: number of variables to activate, -1 if there's an error during scanning. */ { int i,j,k,actcnt,cand_limit ; int *ovndxs ; int *scanvars,scan_cnt,ndx ; double *orig_obj,cbarj,*orig_y ; bool fatal,use_all,activate ; flags statj ; # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 const char *rtnnme = "scanPrimVarStdAct" ; if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (-1) ; } if (orig_sys->obj == NULL) { errmsg(101,rtnnme,orig_sys->nme,consys_assocnme(NULL,CONSYS_OBJ)) ; return (-1) ; } # endif # ifndef DYLP_NDEBUG cbarj = -1 ; /* Suppress a compiler warning. */ # endif fatal = FALSE ; orig_obj = orig_sys->obj ; actcnt = 0 ; /* Did the client supply a vector for candidates? If not, make one. We shouldn't be here if there's no room to activate. If we're paranoid, check this. */ cand_limit = dy_lp->sys.vars.loadable ; # ifdef DYLP_PARANOIA if (cand_limit == 0) { errmsg(1,rtnnme,__LINE__) ; return (-1) ; } # endif if (dy_opts->addvar > 0) { cand_limit = minn(dy_opts->addvar,cand_limit) ; } if (*p_ovndxs == NULL) { ovndxs = (int *) MALLOC(cand_limit*sizeof(int)) ; } else { ovndxs = *p_ovndxs ; } /* Make a vector of duals that matches orig_sys, for efficient evaluation of columns. */ orig_y = (double *) CALLOC((orig_sys->concnt+1),sizeof(double)) ; for (i = 1 ; i <= dy_sys->concnt ; i++) { k = dy_actcons[i] ; orig_y[k] = dy_y[i] ; } /* Make the candidate list we'll actually evaluate. If not supplied in preset, scan origvars to make the list. If we're scanning here, avoid unloadable variables, but we can't guarantee the contents of preset and will need to screen again in the next loop. Even if we're supplied a preset list of variables, we can use only those that are dual feasible if we're in dual simplex. Note that scanvars is set up with 1-based indexing. */ if (preset != NULL) { scanvars = preset ; scan_cnt = preset[0] ; if (dy_lp->simplex.next == dyDUAL) use_all = FALSE ; else use_all = TRUE ; } else { use_all = FALSE ; scan_cnt = orig_sys->archvcnt-dy_sys->archvcnt ; scanvars = (int *) MALLOC((scan_cnt+1)*sizeof(int)) ; scanvars[0] = 0 ; scan_cnt = 0 ; for (j = 1 ; j <= orig_sys->archvcnt ; j++) { if (!LOADABLE_VAR(j)) continue ; # ifdef DYLP_PARANOIA statj = (flags) -dy_origvars[j] ; if (flgoff(statj,vstatNONBASIC|vstatNBFR)) { errmsg(433,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "active",consys_nme(orig_sys,'v',j,TRUE,NULL),j, dy_prtvstat(statj)) ; fatal = TRUE ; break ; } # endif scanvars[++scan_cnt] = j ; } if (fatal == TRUE) { if (scanvars != NULL && scanvars != preset) FREE(scanvars) ; if (orig_y != NULL) FREE(orig_y) ; return (-1) ; } } /* Open a loop to walk scanvars checking for architectural variables that price out favourably. */ for (ndx = 1 ; ndx <= scan_cnt && actcnt < cand_limit ; ndx++) { j = scanvars[ndx] ; /* Skip over variables that are ineligible for activation (status NBFX or flagged with vstatNOLOAD). */ if (!LOADABLE_VAR(j)) { activate = FALSE ; } /* If the variable x is inactive, price it as cbar = c - ya, taking only the active rows into account (by construction of orig_y). If we're in primal phase I, c is identically 0 by definition, since inactive variables must be at their upper or lower bound. If our target is dual simplex, we want variables with optimal reduced costs, the negative of the primal case. */ else { statj = (flags) -dy_origvars[j] ; if (dy_lp->simplex.next == dyPRIMAL1) cbarj = 0 ; else cbarj = orig_obj[j] ; cbarj -= consys_dotcol(orig_sys,j,orig_y) ; setcleanzero(cbarj,dy_tols->cost) ; if (dy_lp->simplex.next == dyDUAL) { cbarj = -cbarj ; } /* Now compare the sign of the reduced cost with the status of the variable, to decide if we want to bring this variable into the active set. We're minimising, eh. Arguably, if we want to detect columns with nonzero coefficients only in rows that are ineligible for activation, this is the place. But it's not clear that it's worth the effort. This particular pathology is rare and we would expend a lot of effort prepping columns, even with a filter of cbar = 0. The cost for doing nothing is that we redo consys_dotcol for the pathological columns with each scan. Given that this sort of column is typically rare and sparse, doing nothing special makes sense. */ if (use_all == TRUE) { activate = TRUE ; } else if (cbarj == 0 || (cbarj > 0 && statj == vstatNBLB) || (cbarj < 0 && statj == vstatNBUB)) { activate = FALSE ; } else { activate = TRUE ; } } # ifndef DYLP_NDEBUG if (activate == FALSE) { if (dy_opts->print.varmgmt >= 3) { statj = (flags) -dy_origvars[j] ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n skipping %s %s (%d), status %s", consys_prtvartyp(orig_sys->vtyp[j]), consys_nme(orig_sys,'v',j,FALSE,NULL),j, dy_prtvstat(statj)) ; if (flgon(statj,vstatNBFX)) dyio_outchr(dy_logchn,dy_gtxecho,'.') ; else dyio_outfmt(dy_logchn,dy_gtxecho,", cbar = %g.",cbarj) ; } } else { if (dy_opts->print.varmgmt >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n activating %s %s (%d), status %s, cbar = %g.", consys_prtvartyp(orig_sys->vtyp[j]), consys_nme(orig_sys,'v',j,FALSE,NULL),j, dy_prtvstat(statj),cbarj) ; } } # endif if (activate == TRUE) ovndxs[actcnt++] = j ; } if (orig_y != NULL) FREE(orig_y) ; if (scanvars != NULL && scanvars != preset) FREE(scanvars) ; /* If we supplied ovndxs and found no candidates to activate, free the vector. */ if (*p_ovndxs == NULL) { if (actcnt == 0) { FREE(ovndxs) ; } else { *p_ovndxs = ovndxs ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n queued %d variables for activation.",actcnt) ; } # endif return (actcnt) ; } int dy_deactivateVars (consys_struct *orig_sys) /* This routine is a simple coordination shell for normal variable deactivation from primal simplex in phase dyPURGEVAR. Parameters: orig_sys: The original constraint system orig_sys is only required for debug printing and paranoid checks. Still, it's really convenient to have it as a parameter and it provides a nice symmetry with activateVars. Returns: number of variables deactivated, or -1 if there's an error. */ { int *candidates,candcnt ; int retval ; const char *rtnnme = "dy_deactivateVars" ; retval = -1 ; /* Call scanPrimVarStdDeact to return a list of candidates for deactivation. If we find candidates, try to deactivate them. */ candidates = NULL ; candcnt = scanPrimVarStdDeact(&candidates) ; if (candcnt < 0) { errmsg(434,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "variable","normal deactivation") ; } else if (candcnt > 0) { if (deactNBPrimArchList(orig_sys,candcnt,candidates) == TRUE) { retval = candcnt ; } } else { retval = 0 ; } /* Clean up and return. */ if (candidates != NULL) FREE(candidates) ; # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 1) { if (dy_opts->print.varmgmt >= 2) dyio_outfmt(dy_logchn,dy_gtxecho,"\n ") ; dyio_outfmt(dy_logchn,dy_gtxecho," %d deactivations.",candcnt) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n constraint system %s now %d x %d (%d + %d).", dy_sys->nme,dy_sys->concnt,dy_sys->varcnt,dy_sys->archvcnt, dy_sys->logvcnt) ; } # endif return (retval) ; } int dy_activateVars (consys_struct *orig_sys, int *preset) /* This routine handles normal variable activation into primal simplex in phase dyADDVAR. Most of the heavy work is performed by scanPrimVarStdAct and actNBPrimArchList. A little bit of cleanup is then required to update PSE norms. If a list of candidates is supplied in preset, only those variables are considered. The principle used in choosing PSE initialisation or update is a level playing field. If we're entering primal simplex from dual simplex, the PSE norms have not been maintained, and it's reasonable to initialise all the norms to 1. But if we're just taking a break from primal simplex pivoting to add variables, it makes sense to calculate the correct norms for the variables we're adding to keep them on equal footing with variables already active. Parameters: orig_sys: The original constraint system. preset: A preset list of candidate variables to consider. Returns: number of variables activated, or -1 if there's an error. */ { int candcnt,candndx,j,i,bfcnt,bfndx ; int *candidates,*basic_frame ; double abarij,gammaj ; double *abarj ; flags calcflgs ; bool actresult,pseresult ; dyret_enum factorresult ; int retval ; const char *rtnnme = "dy_addvars" ; # ifdef DYLP_PARANOIA if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (dyINV) ; } # endif retval = -1 ; actresult = TRUE ; pseresult = TRUE ; /* Make sure we have the correct objective and reduced costs for the target simplex. */ if (dy_lp->simplex.next == dyPRIMAL1 && dy_lp->p1obj.installed == FALSE) { if (dy_initp1obj() == FALSE) { errmsg(318,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "initialise") ; return (-1) ; } } else if (dy_lp->simplex.next == dyPRIMAL2 && dy_lp->p1obj.installed == TRUE) { if (dy_swapobjs(dyPRIMAL2) == FALSE) { errmsg(318,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "remove") ; return (-1) ; } dy_calcduals() ; if (dy_calccbar() == FALSE) { errmsg(384,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; return (-1) ; } } /* Call scanPrimVarStdAct to get a list of candidates. If we get candidates back, install them. Installing nothing always succeeds. */ candidates = NULL ; candcnt = scanPrimVarStdAct(orig_sys,&candidates,preset) ; if (candcnt < 0) { errmsg(434,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "variable","normal activation") ; actresult = FALSE ; } else if (candcnt > 0) { actresult = dy_actNBPrimArchList(orig_sys,candcnt,candidates) ; } else { actresult = TRUE ; } if (actresult == FALSE) { if (candidates != NULL) FREE(candidates) ; return (retval) ; } /* If we're just taking a break from primal simplex pivoting to add variables, calculate correct projected column norms gamma = ||abar~||^2 + 1 for the new variables. (Note that dy_actNBPrimArch has already added x to the reference frame and 1nitialised gamma to 1.) To make the update a bit more efficient, scan out a vector of reference frame members who are currently basic --- these are the variables of interest in calculating the projected norms. The safest way to make this decision is to look at dy_lp->simplex.init_pse. If it's false, we need to to this update. */ if (candcnt > 0 && dy_lp->simplex.init_pse == FALSE) { basic_frame = (int *) MALLOC(dy_sys->concnt*sizeof(int)) ; bfcnt = 0 ; for (i = 1 ; i <= dy_sys->concnt ; i++) { j = dy_basis[i] ; if (dy_frame[j] == TRUE) { basic_frame[bfcnt++] = i ; } } abarj = NULL ; for (candndx = 0 ; candndx < candcnt ; candndx++) { j = dy_origvars[candidates[candndx]] ; if (consys_getcol_ex(dy_sys,j,&abarj) == FALSE) { errmsg(122,rtnnme,dy_sys->nme,"column", consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; pseresult = FALSE ; break ; } dy_ftran(abarj,FALSE) ; gammaj = 1 ; for (bfndx = 0 ; bfndx < bfcnt ; bfndx++) { i = basic_frame[bfndx] ; abarij = abarj[i] ; if (abarij != 0) { gammaj += abarij*abarij ; } } dy_gamma[j] = gammaj ; } if (abarj != NULL) FREE(abarj) ; if (basic_frame != NULL) FREE(basic_frame) ; } if (candidates != NULL) FREE(candidates) ; if (pseresult == FALSE) return (retval) ; /* One final point. If we've added variables, we need to get the reduced costs correct. The easy way is to call for a dual feasibility check, which we should pass if we're headed for dual simplex, and fail if we're headed for primal simplex. */ retval = candcnt ; if (candcnt > 0) { calcflgs = ladDUALFEAS|ladDFQUIET ; factorresult = dy_accchk(&calcflgs) ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) switch (factorresult) { case dyrOK: { # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) { if (factorresult == dyrOK) dyio_outfmt(dy_logchn,dy_gtxecho,"\n done.") ; } # endif # ifdef DYLP_PARANOIA /* In spite of the comment above, there's always numerical accuracy, and we can run into a situation where we're adding a variable with tol.cost < fabs(cbarj) < tol.dfeas. I'd rather let the main simplex deal with this, so all we do here is issue a warning. */ if (dy_lp->simplex.next == dyDUAL) { if (flgon(calcflgs,ladDUALFEAS)) { dywarn(439,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "loss","dual") ; } } else { if (flgoff(calcflgs,ladDUALFEAS)) { dywarn(439,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "gain","dual") ; } } # endif break ; } default: { retval = -1 ; # ifndef DYLP_NDEBUG if (dy_opts->print.conmgmt >= 3) dyio_outfmt(dy_logchn,dy_gtxecho,"\n failed.") ; # endif break ; } } # endif } # ifndef DYLP_NDEBUG if (dy_opts->print.varmgmt >= 1) { if (dy_opts->print.varmgmt >= 2) dyio_outfmt(dy_logchn,dy_gtxecho,"\n ") ; dyio_outfmt(dy_logchn,dy_gtxecho," %d activations.",candcnt) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n constraint system %s now %d x %d (%d + %d).", dy_sys->nme,dy_sys->concnt,dy_sys->varcnt,dy_sys->archvcnt, dy_sys->logvcnt) ; } # endif return (retval) ; } DyLP-1.10.4/DyLP/src/Dylp/dylp.h0000644000175200017520000022665311507440660014524 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ #ifndef _DYLP_H #define _DYLP_H /* @(#)dylp.h 4.6 10/15/05 svn/cvs: $Id: dylp.h 407 2010-12-31 20:48:48Z lou $ This file contains definitions related to dylp, a subroutine library which implements a dynamic (primal-dual) linear programming algorithm based on the algorithm described by Padberg in Linear Optimisation & Extensions, Springer-Verlag, 1995. dylp also owes a debt to previous and contemporary codes the author has worked with --- la05, bandbx, zoom/xmp, ylp, and glpk. At minimum, dylp requires only a constraint system. Since it manages a dynamically sized private copy of the constraint system while solving the LP, there's no point in having the client attach logical variables (they'd just get in the way, really). dylp will accept a basis specification. This takes the form of a status vector giving the status of all variables, and a basis vector specifying the active constraints and their associated basic variables. From this dylp will construct an initial active problem which consists of exactly the given constraints and basic variables, with the logicals for the constraints making up the nonbasic partition. dylp returns as a solution the simplex termination code, the objective value (or related value, appropriate for the termination code), status for all variables, the active constraints, and the associated primal and dual variables (put a little differently, a basis, the values of the basic variables, and the dual variables associated with the active constraints). The conditional compilation symbol DYLP_INTERNAL is used to delimit definitions that should be considered internal to dylp. Don't define this symbol in a client. */ #include "dylib_errs.h" #include "dylib_io.h" #include "dy_consys.h" /* A few words on notation. Traditional matrix and vector notation for LP suffers a bit when limited to ascii text, but it's readable if you're familiar with the original. The notation in the comments and code is loosely based on Chvatal, "Linear Programming", W.H. Freeman, 1983, which the author happens to like. A matrix is represented with a capital letter, e.g., B. A vector is represented with a small letter, e.g., x. A subscript is given in angle brackets, e.g., x for the jth coefficient of x. An individual element of a matrix has two subscripts, e.g., a for the element in row i, column j. Column and row vectors are shown with one subscript, e.g., a for the jth column (or row). Whether the vector is supposed to be a column or a row should generally be clear from context. A capital letter in the subscript position indicates a set of elements, e.g., x is the non-basic variables. The inverse of a matrix is denoted inv(*), e.g., the basis inverse, inv(B). The dot product of two vectors is denoted dot(*,*), e.g., dot(c,x), or sometimes just written directly, e.g., cx. The system of constraints is assumed to be Ax <= b, with m rows and n columns. Once the logical variables (aka slacks and artificials) have been added, it becomes Ax = b. A is the constraint matrix, x is the vector of primal variables, and b is the right-hand-side (rhs). NOTE that the convention for indices is NOT the usual one. Logical variables are assigned indices 1..m and architectural variables are assigned indices m+1..m+n. It makes for more efficient addition/deletion of variables; see dy_consys.h for a little more explanation. There is an objective function z = cx, where z is the objective value and c is the vector of coefficients. dylp minimises the objective. The matrix A is partitioned into the set of basic columns B, and the set of non-basic columns N (sometimes A). The corresponding partitions of c and x are c, x, and c, x. Premultiplication by the basis inverse (e.g., inv(B)a) is referred to as an `ftran'; postmultiplication (e.g., cinv(B)) as a `btran'. Quantities that have been transformed using the basis inverse are often (but not always) renamed as 'barred' quantities. The basic primal variables are x = inv(B)b. The dual variables are y = cinv(B). The jth column of A, premultiplied by inv(B), is abar = inv(B)a. The reduced costs are cbar = c - cinv(B)N = c-yN. The variable i is used as a row index, j as a column index. Often they will represent the entering primal variable (j) and the leaving primal variable (i). Be aware that comments are often written as if the leaving primal variable x occupies row i of the basis. This simplifies the writing. But keep in mind that variable x can occupy an arbitrary row k of the basis. */ /* Termination codes for dy_primal and dy_dual, the top level routines of the dylp simplex algorithms. Also used by various internal routines. Codes marked with (*) will never be returned to the client unless dylp has failed. lpINV The code is not valid (i.e., not set by an execution of dy_primal or dy_dual). lpOPTIMAL The problem has an optimal solution. lpUNBOUNDED The problem is unbounded. lpSWING(*) The problem is pseudo-unbounded: Some primal variable grew excessively in a single pivot. lpINFEAS The problem is infeasible. lpACCCHK An accuracy check failed and dylp's internal recovery algorithms could not recover the situation. lpSTALLED The problem has been abandoned due to stalling. (We could in fact actually be cycling, but that's too much trouble to prove.) lpITERLIM The problem has been abandoned because it has exceeded an absolute iteration limit. lpNOSPACE The problem has been abandoned because the basis package did not have sufficient space to maintain the basis. lpLOSTFEAS Feasibility was lost during simplex execution. lpPUNT The lp has punted because it ran into a pivoting problem. The next three codes indicate that we're in the middle of attempting a forced transition for error recovery purposes. lpFORCEDUAL(*) Force a primal to dual transition. lpFORCEPRIMAL(*) Force a dual to primal transition. lpFORCEFULL(*) Force all inactive constraints and variables to be loaded. lpFATAL Fatal confusion or error of some sort; covers a multitude of sins. The dual simplex routine does not have a phase I routine equivalent to dy_primal1 for the primal simplex. (In the context of dylp, it expects to run after dy_primal has been used to find an initial optimal solution.) When using the dual simplex method, internal codes reflect the state of the dual problem, but dy_dual makes the usual translation back to the primal problem, as: Dual Primal Rationale ---- ------ --------- lpUNBOUNDED lpINFEAS Standard duality theorem. Note that lpSWING always refers to primal variables. */ typedef enum { lpFATAL = -1, lpINV = 0, lpOPTIMAL, lpUNBOUNDED, lpSWING, lpINFEAS, lpACCCHK, lpSTALLED, lpITERLIM, lpNOSPACE, lpLOSTFEAS, lpPUNT, lpFORCEDUAL, lpFORCEPRIMAL, lpFORCEFULL } lpret_enum ; /* Phase codes for dylp dyINV Invalid phase dyINIT Initialisation and setup, including establishing the initial set of constraints and variables and crashing the first basis. dyPRIMAL1 Primal simplex phase I dyPRIMAL2 Primal simplex phase II dyDUAL Dual simplex dyPURGEVAR Deactivation of variables. dyGENVAR Generation of new variables (not part of original problem). dyADDVAR Activation of variables. dyPURGECON Deactivation of constraints. dyGENCON Generation of new constraints (not part of original problem). dyADDCON Activation of constraints. dyFORCEDUAL Force dual feasibility (error recovery) dyFORCEPRIMAL Force primal feasibility (error recovery) dyFORCEFULL Force activation of the full system (error recovery) dyDONE Execution is finished, for one reason or another. It's true that new variables will be added during dyGENCON -- at the least, each newly generated constraint will bring with it a logical variable. dyGENVAR differs in that it is augmenting some subset of the constraints with new variables (classic column generation, for example). The main loop states (dyPRIMAL1 -- dyFORCEFULL) must remain a contiguous block. dy_dumpstats counts on dyPRIMAL1 and dyFORCEPRIMAL being first and last, respectively, in the block. dyDONE must remain the last code --- it's used to dimension a statistics array that tracks the number of times the main loop states are entered. */ typedef enum { dyINV = 0, dyINIT, dyPRIMAL1, dyPRIMAL2, dyDUAL, dyPURGEVAR, dyGENVAR, dyADDVAR, dyPURGECON, dyGENCON, dyADDCON, dyFORCEDUAL, dyFORCEPRIMAL, dyFORCEFULL, dyDONE } dyphase_enum ; /* General return and error codes. Used by various routines in dylp. No routine uses all of these, but there's enough overlap to make one big enum convenient. dyrINV Invalid code. dyrOK Whatever it was that was being done was done without incident. dyrOPTIMAL The problem is optimal. dyrUNBOUND The problem is unbounded. dyrSWING The problem is pseudo-unbounded: Some variable grew by an excessive amount in a single pivot. dyrINFEAS The problem is infeasible. dyrREQCHK Requests a refactor and accuracy check (triggered by various checks for bogus numbers). dyrACCCHK An accuracy check has failed. dyrLOSTPFEAS Primal feasibility has been lost. dyrLOSTDFEAS Dual feasibility has been lost. dyrDEGEN Degeneracy has been discovered, or a degenerate pivot has been taken. dyrRESELECT Reselect an incoming variable (after an abortive pivot attempt). dyrMADPIV The selected pivot coefficient was (numerically) unstable. dyrPUNT In the context of the dual simplex: the dual simplex has decided to punt to the primal simplex phase I, for any of several reasons. Generally this is indicative of the relative lack of sophistication in the dual simplex. In the context of the primal simplex: this indicates that all candidates to enter the basis were flagged with a NOPIVOT qualifier. dyrPATCHED The basis package managed to factor the basis after patching it. dyrSINGULAR The basis package discovered the basis was singular. (Typically as a consequence of a pivot gone bad.) dyrNUMERIC The basis package detected unacceptable growth in the basis coefficients. dyrBSPACE The basis package ran out of space for the basis representation. dyrSTALLED The LP seems to have stalled (and could possibly be cycling, but that's too much trouble to prove); triggered by too many iterations with no change in the objective. dyrITERLIM The iteration limit has been exceeded. dyrFATAL Fatal confusion; covers a multitude of sins. The specific values assigned to some of the codes in the enum come from earlier use of yla05 as the basis package. It's gone, but there's no incentive to remove the values. */ typedef enum { dyrFATAL = -10, dyrITERLIM, dyrSTALLED, dyrBSPACE = -7, dyrSINGULAR = -6, dyrNUMERIC = -5, dyrLOSTPFEAS, dyrLOSTDFEAS, dyrDEGEN, dyrMADPIV, dyrINV = 0, dyrOK = 1, dyrPATCHED = 2, dyrRESELECT, dyrREQCHK, dyrACCCHK, dyrPUNT, dyrOPTIMAL, dyrUNBOUND, dyrSWING, dyrINFEAS } dyret_enum ; /* Requests and results for checks and recalculations Some symbolic names for requesting and reporting on factoring, accuracy checks and primal and dual variable calculations. These originated with la Duenna, hence the lad prefix. Interpretation varies subtly from routine to routine, so check the parameter notes. ladPRIMALCHK (i) set to request primal accuracy check, Bx = b - Nx, (o) set to indicate failure of check ladDUALCHK (i) set to to request dual accuracy check, yB = c (o) set to indicate failure of check ladPRIMFEAS (i) set to request primal feasibility check (primal variables within bounds) (o) set to indicate loss of primal feasibility ladDUALFEAS (i) set to request dual feasibility check (reduced costs of proper sign) (o) set to indicate loss of dual feasibility ladPFQUIET (i) set to suppress warnings about variables which are not primal feasible ladDFQUIET (i) set to suppress warnings about variables which are not dual feasible ladDUALS (i) set to request calculation of the dual variables and gradient vector (o) set to indicate calculation of the dual variables and gradient vector ladPRIMALS (i) set to request calculation of the primal variables (o) set to indicate calculation of the primal variables ladFACTOR (i) set to indicate the basis should be refactored (o) set to indicate the basis has been factored ladEXPAND (i) set to force expansion of the space allocated for the basis representation (o) set to indicate the space allocated for the basis was increased */ #define ladPRIMFEAS 1<<0 #define ladPRIMALCHK 1<<1 #define ladPFQUIET 1<<2 #define ladDUALFEAS 1<<3 #define ladDUALCHK 1<<4 #define ladDFQUIET 1<<5 #define ladDUALS 1<<6 #define ladPRIMALS 1<<7 #define ladFACTOR 1<<8 #define ladEXPAND 1<<9 /* Variable status codes dylp keeps explicit status for both basic and nonbasic variables. These are set up as flags so that it's easy to test when more than one status will do for a particular action. vstatBFX basic, fixed vstatBUUB basic, above upper bound vstatBUB basic, at upper bound vstatB basic, strictly between bounds (a well-behaved basic variable) vstatBLB basic, at lower bound vstatBLLB basic, below lower bound vstatBFR basic, free (unbounded) vstatNBFX nonbasic, fixed vstatNBUB nonbasic at upper bound vstatNBLB nonbasic at lower bound vstatNBFR nonbasic free vstatSB superbasic, within bounds dylp ensures that superbasic variables are, in fact, always strictly within bounds. Inactive NBFR variables can be created at startup if dylp is working with a partial system and there are free variables that are not selected to be in the initial basis. If the client is forcing a full system, these will be active NBFR variables. Error recovery may also create active NBFR variables. By convention, NBFR variables always have a value of zero. Inactive SB variables should not occur. SB status occurs only as the result of error recovery and is only valid in primal simplex. The value of SB variables is lost when they are reported out as part of a solution. This will only happen if dylp could not find an optimal solution. The following qualifiers can be added to the status: vstatNOPIVOT Prevents the variable from being considered as a candidate for pivoting; used by the pivot rejection machinery. vstatNOPER Prevents the variable from being perturbed during the formation of a restricted subproblem. vstatNOLOAD Prevents the variable from being considered for activation; used by startup and variable activation/deactivation routines. */ #define vstatINV 0 #define vstatBFX 1<<0 #define vstatBUB 1<<1 #define vstatB 1<<2 #define vstatBLB 1<<3 #define vstatBFR 1<<4 #define vstatNBFX 1<<5 #define vstatNBUB 1<<6 #define vstatNBLB 1<<7 #define vstatNBFR 1<<8 #define vstatSB 1<<9 #define vstatBUUB 1<<10 #define vstatBLLB 1<<11 /* TAKE NOTE: Do not use the msb as a qualifier! The status value, with or without qualifiers, must be a positive value when cast to a signed integer. */ #define vstatNOPIVOT ((flags) 1<<(sizeof(flags)*8-2)) #define vstatNOPER ((flags) 1<<(sizeof(flags)*8-3)) #define vstatNOLOAD ((flags) 1<<(sizeof(flags)*8-4)) #define vstatBASIC \ (vstatBFX|vstatBUUB|vstatBUB|vstatB|vstatBLB|vstatBLLB|vstatBFR) #define vstatNONBASIC (vstatNBFX|vstatNBUB|vstatNBLB) #define vstatEXOTIC (vstatSB|vstatNBFR) #define vstatSTATUS (vstatBASIC|vstatNONBASIC|vstatEXOTIC) #define vstatQUALS (vstatNOPIVOT|vstatNOPER|vstatNOLOAD) /* This macro checks (in a simplistic way) that its parameter encodes one and only one status. It's intended for mild error checking. See dylp_utils:dy_chkstatus if you're really feeling paranoid. */ #define VALID_STATUS(zz_status_zz) \ (zz_status_zz == vstatBFX || zz_status_zz == vstatBUB || \ zz_status_zz == vstatB || zz_status_zz == vstatBLB || \ zz_status_zz == vstatBFR || \ zz_status_zz == vstatNBFX || zz_status_zz == vstatNBUB || \ zz_status_zz == vstatNBLB || zz_status_zz == vstatNBFR || \ zz_status_zz == vstatSB) /* Interface structures: lpprob_struct, lptols_struct, lpopts_struct */ /* basis_struct This structure is used to describe a basis to dylp, and to return the final basis at termination. The size of the basis depends on the number of active constraints, which will be a subset of the constraints in the system. The constraint system as supplied to dylp should not have logical variables (dylp will create them automatically). This presents a problem if the final basis contains basic logical variables. In this case, vndx is set to the negative of the index of the constraint which spawned the logical. This same technique can be used on input to, for example, specify the traditional all-logical starting basis. Field Definition ----- ---------- len The number of rows in the basis. el.cndx Index of the constraint in this basis position. el.vndx Index of the variable in this basis position. */ typedef struct { int cndx ; int vndx ; } basisel_struct ; typedef struct { int len ; basisel_struct *el ; } basis_struct ; /* LP problem control and status flags lpctlNOFREE (i) Prevents dylp from freeing the problem structures, in anticipation of a subsequent hot start. If dylp exits with a state that is not suitable for hot start, this flag is ignored and the problem data structures are released. lpctlONLYFREE (i) In conjunction with an initial phase of dyDONE, causes dylp to do nothing except free the problem data structure and return. lpctlUBNDCHG (i) Indicates that the variable upper bounds (vub) have been changed. lpctlLBNDCHG (i) Indicates that the variable lower bounds (lub) have been changed. lpctlRHSCHG (i) Indicates that the right-hand side (rhs) has been changed. Includes the rhslow vector (if it exists). lpctlOBJCHG (i) Indicates that the objective (obj) has been changed. lpctlACTVARSIN (i) Indicates that a valid active variable vector has been supplied. lpctlINITACTVAR (i) Forces dylp to perform variable activation before beginning simplex iterations. lpctlINITACTCON (i) Forces dylp to perform constraint activation before beginning simplex iterations. (If variable activation is also requested, constraint activation occurs first.) lpctlACTVARSOUT (i) Indicates that an active variable vector is to be returned. (o) Indicates that a valid active variable vector has been returned. lpctlDYVALID (o) Indicates that dylp exited in a state which can be restarted with a hot start. */ #define lpctlNOFREE 1<<0 #define lpctlONLYFREE 1<<1 #define lpctlUBNDCHG 1<<2 #define lpctlLBNDCHG 1<<3 #define lpctlRHSCHG 1<<4 #define lpctlOBJCHG 1<<5 #define lpctlACTVARSIN 1<<6 #define lpctlINITACTVAR 1<<7 #define lpctlINITACTCON 1<<8 #define lpctlACTVARSOUT 1<<10 #define lpctlDYVALID 1<<11 /* lpprob_struct This structure is used to pass an LP problem into dylp and convey the results back to the client. The allocated size indicated in colsze and rowsze is assumed to be accurate. If basis, status, x, or y are NULL, they will be allocated as needed. If they are non-NULL, dylp will reallocate them if necessary (i.e., when the actual size of the lp exceeds the allocated size of the vectors). The status vector has the following coding: * for nonbasic variables, the normal dylp status flags are used; * for basic variables, the negative of the basis index is used. There is one unavoidable problem with this scheme -- the status vector provides the only information about the value of nonbasic variables. This is adequate for all but superbasic variables and nonbasic free variables which are not at zero. Both of these cases are transient anomalies, created only when the basis package is forced to patch a singular basis, and they should not persist in the final solution when an optimal solution is found or when the problem is infeasible. They may, however, occur in the solution reported for an unbounded problem if the unbounded condition is discovered before the nonbasic free or superbasic variable is chosen for pivoting. On input, nonbasic free variables are assumed to take the value 0, and specifying a superbasic variable is illegal. Field Definition ----- ---------- owner ID of the owner of this problem. ctlopts Control and status flags. phase (i) If set to dyDONE, dylp will free any retained data structures and return. Any other value is ignored. (o) Termination phase of the dynamic simplex algorithm; should be dyDONE unless something screws up, in which case it'll be dyINV. lpret Return code from the simplex routine. obj For lpOPTIMAL, the value of the objective function. For lpINFEAS, the total infeasibility. For lpUNBOUNDED, the index of the unbounded variable, negated if the variable can decrease without bound, positive if it can increase without bound. The logical for constraint i is represented as n+i. Otherwise, undefined. iters The number of simplex iterations. consys The constraint system. fullsys True if the active constraint system is the full system, false otherwise. basis (i) Initial basis. (o) Final basis. status (i) Initial status vector. (o) Final status vector. x (i) No values used, but a vector can be supplied. (o) The values of the basic variables (indexed by basis position). y (i) No values used, but a vector can be supplied. (o) The values of the dual variables (indexed by basis position). actvars There is one entry for each variable, coded TRUE if the variable is active, FALSE otherwise. The vector supplied on input will be overwritten on output. (i) Variables to be activated at startup. Used only for a warm start. Validity is indicated by the lpctlACTVARSIN flag. A vector can be supplied strictly for output use. (o) The current active variables. Will be returned only if requested by the lpctlACTVARSOUT flag. If the vector is valid on return, lpctlACTVARSOUT will remain set, otherwise it will be reset. colsze Allocated column capacity (length of status vector). rowsze Allocated row capacity (length of basis, x, and y vectors). Note that dylp will reallocate status, basis->el, actvars, x, and y, if the vectors supplied at startup are too small to report the solution. Don't set colsze or rowsze to nonzero values without actually allocating space. */ typedef struct { void *owner ; flags ctlopts ; dyphase_enum phase ; lpret_enum lpret ; double obj ; int iters ; consys_struct *consys ; bool fullsys ; basis_struct *basis ; flags *status ; double *x ; double *y ; bool *actvars ; int colsze ; int rowsze ; } lpprob_struct ; /* lptols_struct This structure contains phase and tolerance information for the lp algorithm. The philosophy with respect to the separate zero and feasibility tolerances for primal and dual variables is that dylp uses the zero tolerance when calculating primal or dual variables, and the feasibility tolerance when checking for feasibility. This allows us to keep small values for accuracy in computation, but not be so fussy when it comes to feasibility. Field Definition ----- ---------- inf Infinity. dylp uses IEEE FP infinity, but be careful not to pass it to the basis package. zero Zero tolerance for primal variables, and also the generic zero tolerance for constraint coefficients, right-hand-side values, etc. pchk Primal accuracy check tolerance. pfeas Primal feasibility check tolerance; dynamically scaled from zero in proportion to the 1-norm of the primal basic variables. pfeas_scale Primal feasibility check tolerance multiplier. This provides some user-controllable decoupling of zero and pfeas. cost Base zero tolerance for checks involving objective function coefficients, reduced costs, and related values. dchk Dual accuracy check tolerance. Also used by dy_duenna to test for improvement in the objective. dfeas Dual feasbility check tolerance; dynamically scaled from cost in proportion to the 1-norm of the dual variables. Acts as the zero tolerance for reduced costs. dfeas_scale Dual feasibility check tolerance multiplier. This provides some user-controllable decoupling of cost and dfeas. pivot Simplex pivot selection tolerance, expressed as a multiplier for the pivot selection tolerance used by the basis package when factoring the basis. (I.e., the actual pivot selection criteria will be to accept a simplex pivot a if |a| > lptols.pivot*basis.pivot*MAX{i}|a|.) bogus Multiplier used to identify 'bogus' values, in the range tol < |val| < bogus*tol for the appropriate tolerance. swing Ratio used to identify excessive growth in primal variables (pseudo-unboundedness). toobig Absolute value of primal variables which will cause dual multipivoting to consider primal infeasibility when selecting a flip/pivot sequence. purge Percentage change in objective function required before constraint or variable purging is attempted. purgevar Percentage of maximum reduced cost used to determine the variable purge threshold; nonbasic architectural variables at their optimum bound whose reduced cost exceeds purgevar*MAX{j}cbar are purged. reframe Multiplier used to trigger a reference framework reset in PSE pricing; reset occurs if |gamma - ||abar||^2| > reframe*||abar||^2. The check is made in pseupdate. Also used to trigger recalculation of the basis inverse row norms used in DSE pricing; reset occurs if |rho - ||beta||^2| > reframe*||beta||^2. The check is made in dseupdate. */ typedef struct { double inf ; double zero ; double pchk ; double pfeas ; double pfeas_scale ; double cost ; double dchk ; double dfeas ; double dfeas_scale ; double pivot ; double bogus ; double swing ; double toobig ; double purge ; double purgevar ; double reframe ; } lptols_struct ; #if defined(DYLP_INTERNAL) || defined(BONSAIG) /* A few handy macros for testing values against tolerances. */ #ifdef DYLP_INTERNAL # ifdef BND_TOLER # undef BND_TOLER # endif # define BND_TOLER dy_tols->pfeas # ifdef INF_TOLER # undef INF_TOLER # endif # define INF_TOLER dy_tols->inf #endif #define withintol(zz_val_zz,zz_tgt_zz,zz_tol_zz) \ (fabs((zz_val_zz)-(zz_tgt_zz)) <= zz_tol_zz) #define setcleanzero(zz_val_zz,zz_tol_zz) \ if (fabs(zz_val_zz) < zz_tol_zz) zz_val_zz = 0 #define atbnd(zz_val_zz,zz_bnd_zz) \ ((fabs(zz_bnd_zz) < INF_TOLER) && \ (fabs((zz_val_zz)-(zz_bnd_zz)) < BND_TOLER*(1.0+fabs(zz_bnd_zz)))) #define belowbnd(zz_val_zz,zz_bnd_zz) \ ((fabs(zz_bnd_zz) < INF_TOLER) ? \ (((zz_bnd_zz)-(zz_val_zz)) > BND_TOLER*(1.0+fabs(zz_bnd_zz))) : \ (zz_val_zz < zz_bnd_zz)) #define abovebnd(zz_val_zz,zz_bnd_zz) \ ((fabs(zz_bnd_zz) < INF_TOLER) ? \ (((zz_val_zz)-(zz_bnd_zz)) > BND_TOLER*(1.0+fabs(zz_bnd_zz))) : \ (zz_val_zz > zz_bnd_zz)) #define withinbnds(zz_lb_zz,zz_val_zz,zz_ub_zz) \ (!abovebnd(zz_val_zz,zz_ub_zz) && !belowbnd(zz_val_zz,zz_lb_zz)) #endif /* DYLP_INTERNAL || BONSAIG */ #ifdef DYLP_INTERNAL /* Finally, a macro to decide if we should snap to a value. The notion here is that the accuracy with which one can hit a target value depends on both the magnitude of the target and the distance travelled to get there. On a 64-bit machine, IEEE FP has about 15 decimal digits of accuracy. For example, if we're travelling 1.0e7 and trying to hit zero, we only have 8 decimal places of accuracy remaining. If we're within 1.0e-8, might as well snap to 0. In practice, there's already a bit of roundoff in any nontrivial calculation, so we start with the zero tolerance and scale from there. In some cases, we only know the target, so the best we can do is scale to it. The utility of this idea is highly questionable. */ #define snaptol1(zz_tgt_zz) (dy_tols->zero*(1.0+(zz_tgt_zz))) #define snaptol2(zz_tgt_zz,zz_dst_zz) \ (dy_tols->zero*(1.0+maxx((zz_tgt_zz),(zz_dst_zz)))) #define snaptol3(zz_tol_zz,zz_tgt_zz,zz_dst_zz) \ ((zz_tol_zz)*(1.0+maxx((zz_tgt_zz),(zz_dst_zz)))) #endif /* DYLP_INTERNAL */ /* Enum for initial basis type. This determines the criteria used to select the initial set of basic variables during a cold start. ibINV invalid ibLOGICAL Use only logical (slack and artificial) variables ibSLACK Use slack variables for inequalities. Prefer architectural over artificial variables for equalities. ibARCH Prefer architectural variables over logical variables. */ typedef enum { ibINV = 0, ibLOGICAL, ibSLACK, ibARCH } ibtype_enum ; /* Enum for calling context. As dylp evolves, it has proven useful to know the context of the call. Consider this a work in progress. The default context is INITIALLP. cxINV invalid (context is unknown) cxLOAD This call is only to (re)load data structures. Returns after one iteration of dual or primal simplex, but shows problem status rather than lpITERLIM. cxUNLOAD This call is solely for the purpose of freeing the problem data structures. (Replaces dyDONE/lpctlONLYFREE hack.) cxSINGLELP This is a one-off call to solve a single LP from scratch. cxINITIALLP This is a call to solve a single LP from scratch, but will likely be followed by calls to reoptimise. cxBANDC This call is made in the context of a branch-and-cut algorithm. cxUSERPIV This call is in the context of user control of pivoting. */ typedef enum { cxINV = 0, cxLOAD, cxUNLOAD, cxSINGLELP, cxINITIALLP, cxBANDC, cxUSERPIV } cxtype_enum ; /* lpopts_struct This structure is used to pass option settings to dylp. Default values are declared at the beginning of dy_setup.c. Field Definition ----- ---------- context The context in which dylp is being called. See comments above for cxtype_enum. forcecold TRUE to force a cold start, FALSE otherwise. If set to TRUE, dominates warm and hot start. forcewarm TRUE to force a warm start, FALSE otherwise. If set to TRUE, dominates hot start. fullsys Forces the use of the full constraint system at all times. The full constraint system is loaded on startup, and all constraint and variable deactivation/activation is skipped. (But see the finpurge option below.) (Also, this will not prevent dylp from resorting to forced phase transitions, which typically involve deactivation of constraints or variables. Arguably this is a bad thing, and may change in the future.) active Used to estimate the initial size of the dylp constraint system relative to the original system. vars Fraction of original variables expected to be active at any time. cons Fraction of original inequalities expected to be active at any time. initcons Specifies how inequalities will be selected to initialize the active system. See extensive comments in dy_coldstart.c. frac Fraction of inequalities to be used. i1l Lower bound on angle to objective, first interval i1lopen TRUE if the bound is open. i1u Upper bound on angle to objective, first interval i1uopen TRUE if the bound is open. i2valid TRUE if the second interval is specified i2l Lower bound on angle to objective, second interval i2lopen TRUE if the bound is open. i2u Upper bound on angle to objective, second interval i2uopen TRUE if the bound is open. coldbasis Code specifying the kind of basis built for a cold start. See comments for ibtype_enum and comments in dy_coldstart.c finpurge Controls whether dylp does a final deactivation of constraints and/or variables. This will occur only an optimal solution is found, and is not suppressed by fullsys. cons TRUE to purge constraints vars TRUE to purge variables heroics Controls behaviour during forced primal <-> dual transitions d2p TRUE to allow deactivation of basic architecturals, FALSE to disallow. FALSE is recommended, and the default. p2d TRUE to allow deactivation of tight constraints, FALSE to disallow. FALSE is recommended, and the default. flip TRUE to allow flips to regain dual feasibility, FALSE to disallow. Tends to cycle; default is false. coldvars If the number of active variables exceeds this value after a cold start, dylp will attempt to purge variables prior to the initial primal simplex run. con Options related to constraint activation/deactivation actlvl The constraint activation strategy 0: (strict) activate violated constraints, lhs < rhslow or lhs > rhs 1: (tight) activate tight or violated constraints, lhs <= rhslow or lhs >= rhs actlim If non-zero, limits the number of constraints that can be activated in any one call to a constraint activation routine. deactlvl The constraint deactivation strategy: 0: (normal) deactivate only inequalities i which are strictly loose (i.e., slk basic, not at bound). 1: (aggressive) normal plus inequalities which are tight with y = 0. 2: (fanatic) aggressive plus equalities with y = 0 usedual TRUE if dual phase II is to be used to regain feasibility after adding constraints, FALSE to force use of primal phase I. addvar If non-zero, at most this many variables will be added in any one pass through phase dyADDVAR. dualadd Controls the types of activation allowed when adding variables during dual simplex. 0: variable activation is disallowed 1: type 1 activation (variables that will be dual feasible when activated into the nonbasic partition) 2: type 2 activation (variables which can be activated if immediately pivoted into the basis) 3: type 3 activation (activate with bound-to-bound pivot) See dy_dualaddvars for more extensive comments. scan Partial pricing parameter. Controls the number of columns to be scanned for a new candidate entering variable when the candidate selected during PSE update is rejected. iterlim The per phase pivot limit for the code; if set to 0, no limit is enforced. idlelim The number of iterations without change in the objective function before the code declares the problem is stalled or cycling. dpsel Options to control dual pivoting. Selection of the leaving variable is always handled by DSE. strat: The strategy used to select the entering variable: 0: standard ratio test; may use anti-degen lite 1: multipivoting, selecting for maximum dual objective improvement. 2: multipivoting, select for minimum predicted infeasibility. 3: multipivoting, select infeasibility reduction if possible, otherwise maximum dual objective improvement. flex If TRUE, dylp will switch between strategies 1 and 3, using strategy 1 unless primal magnitudes become too large. allownopiv If TRUE, sequences of flips with no finishing pivot will be allowed. Defaults to false, very prone to cycling. ppsel Options to control primal pivoting. Selection of the entering variable is always handled by PSE. strat: The strategy used to select the leaving variable: 0: standard ratio test; may use anti-degen lite 1: multipivoting factor The LP basis will be refactored every factor iterations, in the absence of some compelling reason (typically error recovery) that forces it to occur sooner. check An accuracy check will be forced every check iterations, in the absence of some compelling reason to do it earlier. groom Controls the action taken by the basis grooming routine when it makes a nontrivial status correction: 0: catatonic 1: issue a warning 2: issue an error message and force an abort Numeric codes should match keywords in dy_options.c:dy_ctlopt. degen TRUE to allow creation of restricted subproblems to deal with degeneracy, FALSE to disallow it. degenpivlim The number of successive degenerate pivots required before creating a restricted subproblem. degenlite Controls secondary antidegeneracy --- `antidegen lite' 0: (pivotabort) break ties using |abar| and abort when delta = 0 1: (pivot) break ties using |abar| but always scan the full basis 2: (alignobj) break ties by examining the alignment of the hyperplane which will become tight on the pivot; choose so that movement in the direction of the objective most nearly lies in the hyperplane 3: (alignedge) break ties by examining the alignment of the hyperplane which will become tight on the pivot; choose so that the direction of motion defined by the entering variable most nearly lies in the hyperplane. 4: (perpobj) break ties by examining the alignment of the hyperplane which will become tight on the pivot; choose so that the normal of the hyperplane is most nearly aligned with the normal of the objective 5: (perpedge) break ties by examining the alignment of the hyperplane which will become tight on the pivot; choose so that the normal of the hyperplane is most nearly aligned with the direction of motion Numeric codes should match keywords in dy_options.c:dy_ctlopt. patch TRUE to allow the code to patch a singular basis, FALSE to prevent patching. copyorigsys Controls whether dylp makes a local copy of the original system. If set to TRUE, dylp will always make a local copy. If set to FALSE, a copy will be made only if necessary. Scaling will trigger a local copy. scaling Controls whether dylp attempts to scale the original constraint system for numeric stability. 0: scaling is forbidden 1: scale the original constraint system using numeric scaling vectors attached to the system 2: evaluate the original constraint system and scale it if necessary Note that even if scaling = 0, dylp may install +/-1.0 scaling vectors in order to flip >= constraints to <= constraints. See comments in dy_scaling.c print Substructure for picky printing control. For all print options, a value of 0 suppresses all information messages. major Controls printing of major phase information. 1: a message at each phase transition. scaling Controls print level during initial evaluation and scaling of the original constraint system. 1: start and finish messages 2: stability measures for original and scaled matrices; adjustments to tolerances. setup Controls print level while creating the initial constraint system for dylp. 1: start and finish messages. 2: summary information about activated constraints 3: messages about each constraint included in the initial system. 4: messages about each constraint processed for the initial system 5: messages about each variable included in the initial system. 6: lists value and status of inactive variables with nonzero values crash Controls print level while crashing the basis. 1: start & finish messages 2: summary counts for logicals, architecturals, artificials 3: a dump of the completed basis 4: detailed info on the selection of each architectural and artificial variable pricing Controls print level for pricing of columns (rows) in primal (dual) simplex. 1: summary messages 2: lists candidate list and primal variable selected for entry (exit) at each pivot 3: lists each variable as it's added to the candidate list and again when reconsidered for pivoting pivoting Controls print level for selection of the leaving (entering) primal variable in primal (dual) simplex and updating of variables. 1: prints result of leaving (entering) variable selection 2: information about the selection of the leaving (entering) variable. 3: more information about the selection of the leaving (entering) variable. 4: prints the pivot column (row) before and after multiplication by the basis inverse, and yet more pivot selection information. 5: prints a line for every candidate evaluated pivreject Controls print level for information related to the operation of the pivot rejection mechanism. 1: Prints a message for each row/column added to the pivot rejection list, plus other major events. 2: Prints a message for each row/column removed from the pivot rejection list. degen Controls print level for information related to the operation of the antidegeneracy mechanism. 1: prints a message each time the antidegeneracy level changes 2: prints a message when a true degenerate pivot is taken under duress 3: prints a message when a degenerate pivot is taken 4: prints anomalies as each degenerate set is formed and backed out 5: prints details of each degenerate set as it's formed and backed out phase1 Controls general print level for phase 1 of primal simplex. 1: messages about extraordinary events -- problem pivots, etc. 2: messages about 'routine' but infrequent events -- termination conditions, refactoring, unboundedness, etc. 3: messages with additional details of problems encountered 4: a one line log message is printed for each pivot 5: summary information about infeasible variables and phase I objective coefficients; information about primal variables updated at each pivot. 6: prints the primal variables after each pivot; prints infeasible variables during phase I objective construction 7: prints the dual variables after each pivot; prints infeasible variables during phase I objective modification phase2 Controls general print level for phase 1 of primal simplex. 1: messages about extraordinary events -- problem pivots, etc. 2: messages about 'routine' but infrequent events -- termination conditions, refactoring, unboundedness, etc. 3: messages with additional details of problems encountered 4: a one line log message is printed for each pivot 5: prints the updated basic primal variables after each pivot 6: prints all basic primal variables after each pivot 7: prints the dual variables after each pivot. dual Controls general print level for the dual simplex. As phase2. basis Controls print level in routines working with the basis. 1: summary warnings about problems: empty rows, singularity, numerical instability, etc. 2: information about factoring failures and recovery actions 3: warnings about individual empty rows, details of column replacement when patching a singular basis, pivot tolerance adjustments; information about pivoting failures and recovery actions 4: basis stability after factoring 5: basis stability after pivoting conmgmt Controls print level while dylp is in the purge/generate/ activate constraint phases. 1: prints the number of constraints purged, generated, & activated, and new size of constraint system. 2: prints a message for each constraint purged or activated. (The cut generation routine is responsible for handling this function when it generates cuts.) 3: additional details about refactoring and new values of primal and dual variables. 4: prints a message about any variables affected as a side effect of constraint changes, constraints processed but not activated, and information about direction of recession and relative angle of constraints when adding constraints to an unbounded problem. 5: prints a running commentary on constraint and variable shifts, inactive variables. varmgmt Controls print level while dylp is in the purge/generate/ activate variable phases. 1: prints the number of variables purged, generated, & activated, and new size of constraint system. 2: prints a message for each variable purged & activated. (The column generation routine is responsible for handling this function when it generates new variables). 3: prints a message about any constraints affected as a side effect of variable changes, variables processed but not activated, and information about direction of recession and relative angle of dual constraints when adding variables to an unbounded dual. 4: prints a running commentary on constraint and variable shifts. force Controls print level when dylp is attempting to force a transition (primal -> dual, dual -> primal) or force the use of the full constraint system. 1: prints a summary message giving the result of the transition attempt 2: prints messages about actions taken for individual constraints and variables. 3: additional information about variables and constraints examined. tableau Controls print level for routines that generate tableau vectors (beta, beta, abar, abar) for use by external clients. 1: prints summary messages about the circumstances 4: prints nonzeros in the final vector. 5: prints nonzeros in intermediate vectors and (dy_betaj, dy_abarj only) inactive rows 6: prints nonzeros of active portion in internal reference frame (dy_betaj only) rays Controls print level for routines that generate primal and dual rays for use by external clients. 1: prints summary messages about vectors found. 3: print information about columns / rows examined. 4: print information about why a column or row was rejected. 5: print nonzeros for each ray soln Controls print level for routines that generate primal and dual solutions for use by external clients. 1: prints summary messages about the circumstances 3: prints nonzeros in the final vector 4: prints nonzeros in intermediate vectors */ typedef struct { cxtype_enum context ; int scan ; int iterlim ; int idlelim ; struct { int strat ; bool flex ; bool allownopiv ; } dpsel ; struct { int strat ; } ppsel ; int factor ; int check ; int groom ; struct { int actlvl ; int actlim ; int deactlvl ; } con ; int addvar ; int dualadd ; int coldvars ; bool forcecold ; bool forcewarm ; bool usedual ; bool degen ; int degenpivlim ; int degenlite ; bool patch ; bool fullsys ; bool copyorigsys ; int scaling ; struct { float vars ; float cons ; } active ; struct { double frac ; bool i1lopen ; double i1l ; bool i1uopen ; double i1u ; bool i2valid ; bool i2lopen ; double i2l ; bool i2uopen ; double i2u ; } initcons ; ibtype_enum coldbasis ; struct { bool cons ; bool vars ; } finpurge ; struct { bool d2p ; bool p2d ; bool flips ; } heroics ; struct { int major ; int scaling ; int setup ; int crash ; int pricing ; int pivoting ; int pivreject ; int degen ; int phase1 ; int phase2 ; int dual ; int basis ; int conmgmt ; int varmgmt ; int force ; int tableau ; int rays ; int soln ; } print ; } lpopts_struct ; /* Statistics structure, used to collect information about aspects of dylp operation beyond simple pivot counts. The data structure definition is always present, but to fill it you have to define DYLP_STATISTICS. Field Definition ----- ---------- phasecnts[dyDONE] Array with counts for number of times each phase is executed. ini_simplex The initial simplex phase cons A set of arrays with data about individual constraints. sze Allocated capacity of the arrays. angle Angle to the objective function. actcnt Number of times constraint is activated. deactcnt Number of times constraint is deactivated. init True if constraint is active in initial system. fin True if constraint is active in final system. vars A set of arrays with data about individual variables. sze Allocated capacity of the arrays. actcnt Number of times variable is activated. deactcnt Number of times variable is deactivated. angle max Maximum angle to the objective function over all constraints. min Minimum angle to the objective function over all constraints. hist[*] Histogram of angles of constraints to the objective function. There are DYSTATS_HISTBINS bins. Currently, 37 bins: 36 bins spanning 5 degrees of angle, and a dedicated 90 degree bin. factor Tracks how well we're doing with respect to refactoring the basis. cnt Number of time the basis has been refactored. prevpiv Pivot count at last refactorisation. avgpivs Average number of pivots between basis refactorisations. maxpivs Maximum number of pivots between basis refactorisations. pivrej Statistics about the pivot rejection list and punts. max maximum number of entries on the pivot rejection list mad total number of entries attributed to mad pivots sing total number of entries attributed to singular pivots pivtol_red total number of times the pivot tolerance was reduced min_pivtol the minimum pivot tolerance used puntcall total number of calls to dealWithPunt puntret total number of dyrPUNT returns recommended dmulti Tracks the dual multipivot algorithm. All fields except cnt are totals; divide by cnt to get averages. flippable Number of flippable variables in the constraint system. cnt Total calls to dualmultiin cands Number of candidates queued for evaluation for entry promote Number of calls that resulted in promoting a sane pivot over an unstable pivot. nontrivial Number of times that the initial scan and sort left multiple candidates for further evaluation. evals Actual number of candidates evaluated (ftran'd column) flips Number of bound-to-bound flips performed pivrnk Index in the list of candidates of the candidate finally selected for pivoting. maxrnk Maximum index selected for pivoting. pmulti Tracks the primal multipivot algorithm. cnt Total calls to primalmultiin cands Number of candidates queued for evaluation to leave nontrivial Number of times that the candidate list was sorted promote Number of calls that resulted in promoting a sane pivot over an unstable pivot. infeas Statistics on resolution of infeasibility in primal phase I. Basically, what we're interested in tracking is the number of infeasible variables and the number of pivots between a change in the number of infeasible variables. We're interested in separating the case of 1 variable from 2 or more, because the latter requires vastly more calculation. A little care is required because phase I can run many times. prevpiv The pivot count (tot.iters) at the previous change. maxcnt The maximum number of infeasible variables encountered (this is not strictly monotonic, as dylp may enter phase I many times due to activating violated constraints). totpivs The total number of pivots expended in phase I. maxpivs The maximum number of pivots with no change in the number of feasible variables. chgcnt1 The number of times that the number of infeasible variables changed and reduced costs did not have to be recalculated (specifically, exactly one variable became feasible, and it left the basis as it did so). chgcnt2 The number of times that the number of infeasible variables changed in such a way as to require recalculation of the reduced costs. [dp]degen[*] Array of stats for each restricted subproblem nesting level, with separate arrays for dual (ddegen) and primal (pdegen). degen[0].cnt is used to hold the maximum nesting level. cnt Number of times this nesting level was entered. avgsiz The average number of variables in a restricted subproblem. Kept by iterative update, as avg = (avg*k+size)/(k+1). Suffers from cumulative loss of accuracy, but it'll do for our purposes. maxsiz The maximum number of variables in a restricted subproblem. totpivs Total number of pivots at or above this nesting level. avgpivs Average number of pivots at or above this nesting level. maxpivs Maximum number of pivots for any one instance at or above this nesting level. tot, p1, p2, d2 Iteration and pivot counts, total and for each individual phase. These are copied over from dy_lp (lp_struct) at the end of the run, so that they can be printed by dumpstats. DYSTATS_MAXDEGEN is the maximum number of levels of nesting accommodated by antidegeneracy statistics and debugging structures. The actual algorithm has no inherent limitation. DYSTATS_HISTBINS is the number of bins for constraint angles. It should be an odd number. Each bin will span 180/(DYSTATS_HISTBINS-1) degrees, with the final bin reserved for constraints at 90 degrees. For example, a value of 37 gives 180/(37-1) = 5 degrees per bin. */ #define DYSTATS_MAXDEGEN 25 #define DYSTATS_HISTBINS 37 typedef struct { int phasecnts[dyDONE+1] ; dyphase_enum ini_simplex ; struct { int sze ; double *angle ; int *actcnt ; int *deactcnt ; bool *init ; bool *fin ; } cons ; struct { int sze ; int *actcnt ; int *deactcnt ; } vars ; struct { float max ; float min ; int hist[DYSTATS_HISTBINS] ; } angle ; struct { int cnt ; int prevpiv ; float avgpivs ; int maxpivs ; } factor ; struct { int max ; int mad ; int sing ; int pivtol_red ; double min_pivtol ; int puntcall ; int puntret ; } pivrej ; struct { int flippable ; int cnt ; int cands ; int promote ; int nontrivial ; int evals ; int flips ; int pivrnks ; int maxrnk ; } dmulti ; struct { int cnt ; int cands ; int nontrivial ; int promote ; } pmulti ; struct { int prevpiv ; int maxcnt ; int totpivs ; int maxpivs ; int chgcnt1 ; int chgcnt2 ; } infeas ; struct { int cnt ; float avgsiz ; int maxsiz ; int totpivs ; float avgpivs ; int maxpivs ; } pdegen[DYSTATS_MAXDEGEN] ; struct { int cnt ; float avgsiz ; int maxsiz ; int totpivs ; float avgpivs ; int maxpivs ; } ddegen[DYSTATS_MAXDEGEN] ; struct { int iters ; int pivs ; } tot ; struct { int iters ; int pivs ; } p1 ; struct { int iters ; int pivs ; } p2 ; struct { int iters ; int pivs ; } d2 ; } lpstats_struct ; #ifdef DYLP_INTERNAL /* Macros to determine whether a constraint or variable is active, and whether it's eligible for activation. Coding is explained below for dy_origcons and dy_origvars. The main purpose served by these macros is to make it easy to find activiation/deactivation points in the code, should the conventions ever change. */ #define ACTIVE_CON(zz_cndx_zz) (dy_origcons[(zz_cndx_zz)] > 0) #define INACTIVE_CON(zz_cndx_zz) (dy_origcons[(zz_cndx_zz)] <= 0) #define LOADABLE_CON(zz_cndx_zz) (dy_origcons[(zz_cndx_zz)] == 0) #define MARK_UNLOADABLE_CON(zz_cndx_zz) (dy_origcons[(zz_cndx_zz)] = -1) #define MARK_INACTIVE_CON(zz_cndx_zz) (dy_origcons[(zz_cndx_zz)] = 0) #define ACTIVE_VAR(zz_vndx_zz) (dy_origvars[(zz_vndx_zz)] > 0) #define INACTIVE_VAR(zz_vndx_zz) (dy_origvars[(zz_vndx_zz)] <= 0) #define LOADABLE_VAR(zz_vndx_zz) \ ((dy_origvars[(zz_vndx_zz)] < 0) && \ flgoff(((flags) -dy_origvars[(zz_vndx_zz)]),vstatNOLOAD|vstatNBFX)) #define MARK_INACTIVE_VAR(zz_vndx_zz,zz_val_zz) \ (dy_origvars[(zz_vndx_zz)] = (zz_val_zz)) /* dy_logchn i/o id for the execution log file dy_gtxecho controls echoing of generated text to stdout */ extern ioid dy_logchn ; extern bool dy_gtxecho ; /* lp_struct This structure is the control structure for an LP problem within dylp. Field Definition ----- ---------- phase Current phase of the dynamic simplex algorithm. lpret Return code from the most recent simplex execution. z Value of the objective function (includes inactzcorr). inactzcorr Correction to the objective function due to inactive variables with non-zero values. simplex Simplex algorithm status and control active currently active or most recently completed next currently active or to be started init_pse TRUE if the PSE structures need to be reinitialised, FALSE otherwise init_dse TRUE if the DSE structures need to be reinitialised, FALSE otherwise These fields are used to determine when to update or reinitialise the PSE and DSE data structures. Active and next must be valid during the purge/gen/add variable/constraint cycles. A word on infeas and infeascnt: They are guaranteed accurate only immediately after initialisation and following a primal feasibility check. infeas Total infeasibility = SUM{j} max(0,x-ub,lb-x) infeascnt The number of infeasible variables; refreshed when dy_accchk is asked to do a primal feasibility check. ubnd Substructure for information on unbounded or pseudo-unbounded problems. ndx The index of the variable fingered for causing unboundedness or pseudo-unboundedness (swing). ratio The growth ratio. p1obj The following fields relate to handling of the phase I objective function. installed TRUE if the phase I objective is currently installed infcnt Tracks the number of variables incorporated in p1obj which remain infeasible. infvars_sze Allocated size of the infvars vector. infvars Vector of indices of infeasible variables incorporated in the phase I objective. p1obj Pointer to the phase I objective (temporary storage while the phase II objective is installed). p2obj Pointer to the phase II objective (temporary storage while the phase I objective is installed). A word on pivot and iteration counts: Iteration counts tally iterations of the pivoting loop, successful or not. Pivot counts tally successful bound-to-bound or change-of-basis pivots. Pretty much all messages will give tot.iters, so that it's possible to track the progress of an LP. Iterf has an entirely different function -- it's tracking the accumulation of eta matrices in the basis representation. sys Substructure for dynamic system modification status. forcedfull Set to TRUE if the full system has been forced in state dyFORCEFULL. This should happen at most once, so if we enter dyFORCEFULL and forcedfull == TRUE, it's fatal. cons loadable Count of constraints which could be activated unloadable Count of constraints which are ineligible for activation (empty constraints and nonbinding rows) vars loadable Count of variables which could be activated unloadable Count of variables which are ineligible for activation (nonbasic fixed) tot Total simplex iterations and pivots, all phases iters pivs p1 Primal phase I iterations and pivots. iters pivs p2 Primal phase II iterations and pivots. iters pivs d2 Dual phase II iterations and pivots. iters pivs pivok Set to TRUE in dy_{primal|dual}pivot if the current iteration is a successful pivot. Cleared to FALSE at the head of dy_duenna. prev_pivok Set to pivok at head of dy_duenna. Provides status of just completed pivot for post-Duenna decisions. basis Various fields related to basis change, refactoring, etc. etas The number of basis changes (hence eta matrices) since the the basis was last factored. Used to schedule periodic factoring of the basis. Reset to 0 each time the basis is factored. pivs The number of basis pivots since entry into a primal or dual simplex phase (excludes bound-to-bound simplex `pivots'). Used when deciding whether to remove variables from the pivot reject list, and whether to pop out of a simplex phase due to excessive swing. dinf Number of successive refactors with dual infeasibility. Cleared at the start of a simplex phase. Incremented/cleared in dy_accchk iff a dual feasibility check is performed. degen Activation level of antidegeneracy algorithm. Held at 0 when the antidegeneracy algorithm is not active. Incremented each time a restricted subproblem is formed, and decremented when the restriction is backed out. (Values > 1 indicate that degeneracy recurred while working on a restricted subproblem, resulting in further restriction.) degenpivcnt The number of successive degenerate pivots. idlecnt The number of cycles since the objective has changed. lastz Previous objective value for various activities; used to detect and suppress loops. piv Objective at last pivot (detects stalling) cd Objective at last entry into constraint deactivation (dyPURGECON) (detects constraint activate/deactivate loops) vd Objective at last entry into variable deactivation (dyPURGEVAR) (detects variable activate/deactivate loops) fp Objective at last entry into force primal (dyFORCEPRIMAL) (detects constraint activate/deactivate loops) fd Objective at last entry into force dual (dyFORCEDUAL) (detects variable activate/deactivate loops) prim Primal variable information norm1 1-norm of basic primal variables inv(B)b norm2 2-norm of basic primal variables max inf-norm (max) of basic primal variables maxndx index of max primal variable dual Dual variable information norm1 1-norm of dual variables cinv(B) norm2 2-norm of dual variables max inf-norm (max) of dual variables maxndx index of max dual variable */ typedef struct { dyphase_enum phase ; lpret_enum lpret ; double z ; double inactzcorr ; struct { dyphase_enum active ; dyphase_enum next ; bool init_pse ; bool init_dse ; } simplex ; double infeas ; int infeascnt ; struct { int ndx ; double ratio ; } ubnd ; struct { bool installed ; int infcnt ; int infvars_sze ; int *infvars ; double *p1obj ; double *p2obj ; } p1obj ; struct { struct { int loadable ; int unloadable ; } cons ; struct { int loadable ; int unloadable ; } vars ; bool forcedfull ; } sys ; struct { int iters ; int pivs ; } tot ; struct { int iters ; int pivs ; } p1 ; struct { int iters ; int pivs ; } p2 ; struct { int iters ; int pivs ; } d2 ; bool pivok ; bool prev_pivok ; struct { int etas ; int pivs ; int dinf ; } basis ; int degen ; int degenpivcnt ; int idlecnt ; struct { double piv ; double cd ; double vd ; double fp ; double fd ; } lastz ; struct { double norm1 ; double norm2 ; double max ; int maxndx ; } prim ; struct { double norm1 ; double norm2 ; double max ; int maxndx ; } dual ; } lp_struct ; /* Declarations global to the dylp implementation but not visible outside of it. With this we can avoid passing huge numbers of parameters and/or unpacking a structure on a regular basis. Unless otherwise indicated, indices are in the dy_sys (active system) frame of reference. dy_owner Null if there's no active problem. Contains the ID of the current owner if there's an active problem. Passed in as part of the lpprob_struct. Main structures --------------- dy_lp: The lp control structure for dylp. dy_sys: The active constraint system; initialised in dylp:startup dy_tols: Tolerances in effect for dylp; initialised in dylp:dylp from orig_tols. dy_opts: Options in effect for dylp; initialised in dylp:dylp to point to same structure as orig_opts. dy_stats Statistics structure for dylp; initialised in dylp:dylp to point ot the same structure as orig_stats. Constraint & Variable Management -------------------------------- dy_actvars: The active variables. Indexed in dy_sys frame, contains indices in orig_sys frame. Attached to dy_sys. Entries for logical variables (1 <= j <= concnt) are meaningless. dy_actcons: The active constraints. Indexed in dy_sys frame, contains indices in orig_sys frame. Attached to dy_sys. dy_origvars: Status of the original architectural variables. * A value of 0 indicates the entry hasn't been processed. Should never happen. * If the variable is active, the entry contains the index of the variable in the dy_sys frame. * If the variable is inactive, the coding is the negative of the vstat flags, limited to the nonbasic status values vstatNBFR, vstatNBFX, vstatNBLB, or vstatNBUB, and the qualifier vstatNOLOAD. Indexed in orig_sys frame. Attached to orig_sys. dy_origcons: Status of the original constraints. * If the constraint is active, the entry contains the index of the constraint in the dy_sys frame. * If the constraint is inactive, contains 0. * If the constraint cannot be activated, contains a negative value. Indexed in orig_sys frame. Attached to orig_sys. Note that there are macros defined to test whether a variable or constraint is inactive, and whether it's eligible for activation. Use them! Basis Management ---------------- dy_basis: The basis vector. Indexed by basis position, attached to dy_sys. dy_var2basis: Translates a variable index to a basis pos'n. Indexed by column, attached to dy_sys. Entries for nonbasic variables must be kept at 0. dy_status: The status vector. Indexed by column, attached to dy_sys. Primal and Dual Variables ------------------------- dy_x: The values of all primal variables. Indexed by column, attached to dy_sys. Values of nonbasic variables must always be correct (to allow uniform handling of normal nonbasic variables and superbasic variables). Values of basic variables will retain unperturbed values while the antidegeneracy mechanism is active -- this allows the perturbation to be quickly backed out. dy_xbasic: The values of the basic variables. Indexed by basis pos'n, attached to dy_sys. dy_y: The dual variables. Indexed by basis pos'n, attached to dy_sys. Projected Steepest Edge (PSE) Pricing ------------------------------------- dy_cbar: Iteratively updated vector of reduced costs. Indexed by column, attached to dy_sys. dy_gamma: Iteratively updated vector of column norms ||abar||^2. Indexed by column, attached to dy_sys. dy_frame: Boolean vector which indicates if a given variable is in the current frame of reference. Indexed by column, attached to dy_sys. Dual Steepest Edge (DSE) Pricing -------------------------------- dy_rho: Iteratively updated vector of row norms ||beta||^2. Indexed by basis position, attached to dy_sys. DSE pricing also makes use of dy_xbasic (the reduced costs of the dual variables), and maintains dy_cbar. Antidegeneracy -------------- dy_brkout: Specifies the direction a variable needs to move to escape from a degenerate vertex. Indexed by basis pos'n, attached to dy_sys. dy_degenset: Specifies the set of constraints (equivalently, basic variables) perturbed at each level of the antidegeneracy algorithm. Indexed by basis pos'n, attached to dy_sys. The entry for a constraint is the highest level of degenerate set which includes the constraint. If the entry is 0, the constraint is not involved in degeneracy. dy_ddegenset: Specifies the set of dual constraints (equivalently, reduced costs) perturbed at each level of the antidegeneracy algorithm. Indexed by variable index, attached to dy_sys. The entry for a dual constraint is the highest level of degenerate set which includes the constraint. If the entry is 0, the constraint is not involved in degeneracy. */ extern void *dy_owner ; extern lp_struct *dy_lp ; extern consys_struct *dy_sys ; extern lptols_struct *dy_tols ; extern lpopts_struct *dy_opts ; extern int *dy_actvars,*dy_actcons,*dy_origvars,*dy_origcons, *dy_basis,*dy_var2basis, *dy_brkout,*dy_degenset,*dy_ddegenset ; extern flags *dy_status ; extern double *dy_x,*dy_xbasic,*dy_y,*dy_cbar,*dy_gamma,*dy_rho ; extern bool *dy_frame ; extern lpstats_struct *dy_stats ; /* dy_scaling.c */ extern bool dy_initlclsystem(lpprob_struct *orig_lp, bool hotstart) ; extern void dy_freelclsystem(lpprob_struct *orig_lp, bool freesys) ; extern bool dy_isscaled(void) ; extern void dy_scaling_vectors(const double **rscale, const double **cscale) ; extern consys_struct *dy_scaled_origsys() ; /* dy_coldstart.c */ extern dyret_enum dy_coldstart(consys_struct *orig_sys), dy_crash(void) ; /* dy_warmstart.c */ extern dyret_enum dy_warmstart(lpprob_struct *orig_lp) ; /* dy_hotstart.c */ extern dyret_enum dy_hotstart(lpprob_struct *orig_lp) ; /* dy_basis.c */ extern dyret_enum dy_factor(flags *calcflgs), dy_pivot(int xipos, double abarij, double maxabarj) ; extern double dy_chkpiv(double abarij, double maxabarj) ; extern void dy_btran(double *col), dy_ftran(double *col, bool save) ; extern bool dy_setpivparms(int curdelta, int mindelta) ; extern char *dy_prtpivparms(int lvl) ; /* dy_bound.c */ extern int dy_activateBndCons(consys_struct *orig_sys) ; extern int dy_dualaddvars(consys_struct *orig_sys) ; /* dy_conmgmt.c */ extern bool dy_loadcon(consys_struct *orig_sys, int orig_ndx, bool genvars, int *inactndxs) ; extern bool dy_deactNBLogPrimCon(consys_struct *orig_sys, int i), dy_deactBLogPrimCon(consys_struct *orig_sys, int i), dy_actBLogPrimCon(consys_struct *orig_sys, int i, int *inactvars), dy_actBLogPrimConList(consys_struct *orig_sys, int cnt, int *ocndxs, int **inactvars) ; extern int dy_deactivateCons(consys_struct *orig_sys), dy_activateCons(consys_struct *orig_sys, bool with_vars) ; /* dy_varmgmt.c */ extern bool dy_actNBPrimArch(consys_struct *orig_sys, int ovndx), dy_actNBPrimArchList(consys_struct *orig_sys, int cnt, int *ovndxs), dy_deactBPrimArch(consys_struct *orig_sys, int ovndx), dy_deactNBPrimArch(consys_struct *orig_sys, int ovndx) ; extern int dy_deactivateVars(consys_struct *orig_sys), dy_activateVars(consys_struct *orig_sys, int *candidates) ; /* dy_primalpivot.c */ extern dyret_enum dy_primalin(int initcol, int scan, int *xjndx, int *nextcol), dy_primalpivot(int xjndx, int indir, int *xindx, int *outdir, double *abarij, double *delta, int *xjcand), dy_degenout(int level) ; /* dy_duenna.c */ extern dyret_enum dy_duenna(dyret_enum pivresult, int xjndx, int xindx, int xjcand, int xicand), dy_accchk(flags *checks) ; /* dy_pivreject.c */ extern dyret_enum dy_addtopivrej(int xkndx, dyret_enum why, double abarij, double maxabarij), dy_dealWithPunt(void) ; extern bool dy_clrpivrej(int *entries) ; extern void dy_checkpivtol(void) ; extern void dy_initpivrej(int sze), dy_freepivrej(void) ; /* dy_primal.c */ extern lpret_enum dy_primal(void) ; extern bool dy_initp1obj(void),dy_swapobjs(dyphase_enum phase) ; /* dy_dualpivot.c */ extern dyret_enum dy_dualout(int *xindx), dy_dualpivot(int xindx, int outdir, int *p_xjndx, int *p_indir, double *p_cbarj, double *p_abarij, double *p_delta, int *xicand), dy_dualdegenout(int level) ; /* dy_dual.c */ extern lpret_enum dy_dual(void) ; #endif /* DYLP_INTERNAL */ /* dy_setup.c */ extern void dy_defaults(lpopts_struct **opts, lptols_struct **tols), dy_checkdefaults(consys_struct *sys, lpopts_struct *opts, lptols_struct *tols), dy_setprintopts(int lvl, lpopts_struct *opts) ; /* dylp.c */ extern lpret_enum dylp(lpprob_struct *orig_lp, lpopts_struct *orig_opts, lptols_struct *orig_tols, lpstats_struct *orig_stats) ; extern void *dy_getOwner() ; /* dylp_utils.c */ #ifdef DYLP_INTERNAL extern lpret_enum dyret2lpret(dyret_enum dyret) ; extern dyret_enum dy_updateprimals(int j, double deltaj, double *p_abarj) ; extern bool dy_reducerhs(double *rhs, bool init), dy_calcprimals(void),dy_calccbar(void) ; extern void dy_calcduals(void),dy_setbasicstatus(void), dy_dseinit(void),dy_pseinit(void) ; extern double dy_calcobj(void),dy_calcdualobj(void),dy_calcpinfeas(void) ; extern void dy_finishup(lpprob_struct *orig_lp, dyphase_enum phase) ; #ifdef DYLP_PARANOIA extern bool dy_chkstatus(int vndx), dy_chkdysys(consys_struct *orig_sys) ; extern void dy_chkdual(int lvl) ; #endif #endif /* DYLP_INTERNAL */ extern bool dy_dupbasis(int dst_basissze, basis_struct **p_dst_basis, basis_struct *src_basis, int dst_statussze, flags **p_dst_status, int src_statuslen, flags *src_status) ; extern void dy_freesoln(lpprob_struct *lpprob) ; /* dy_penalty.c */ extern bool dy_pricenbvars(lpprob_struct *orig_lp, flags priceme, double **p_ocbar, int *p_nbcnt, int **p_nbvars), dy_pricedualpiv(lpprob_struct *orig_lp, int oxindx, double nubi, double xi, double nlbi, int nbcnt, int *nbvars, double *cbar, double *p_upeni, double *p_dpeni) ; /* dy_tableau.c */ extern bool dy_abarj(lpprob_struct *orig_lp, int tgt_j, double **p_abarj) ; extern bool dy_betaj(lpprob_struct *orig_lp, int tgt_j, double **p_betaj) ; extern bool dy_betak(lpprob_struct *orig_lp, int col_k, double **p_betaj) ; extern bool dy_betai(lpprob_struct *orig_lp, int tgt_i, double **p_betai) ; extern bool dy_abari(lpprob_struct *orig_lp, int tgt_i, double **p_abari, double **p_betai) ; /* dy_rays.c */ extern bool dy_primalRays(lpprob_struct *orig_lp, int *p_numRays, double ***p_rays) ; extern bool dy_dualRays(lpprob_struct *orig_lp, bool fullRay, int *p_numRays, double ***p_rays, bool trueDuals) ; /* dy_solutions.c */ extern void dy_colDuals(lpprob_struct *orig_lp, double **p_cbar, bool trueDuals) ; extern void dy_rowDuals(lpprob_struct *orig_lp, double **p_y, bool trueDuals) ; extern void dy_rowDualsGivenC(lpprob_struct *orig_lp, double **p_y, const double *c, bool trueDuals) ; extern void dy_colPrimals(lpprob_struct *orig_lp, double **p_x) ; extern void dy_rowPrimals(lpprob_struct *orig_lp, double **p_xB, int **p_indB) ; extern void dy_logPrimals(lpprob_struct *orig_lp, double **p_logx) ; extern void dy_colStatus(lpprob_struct *orig_lp, flags **p_colstat) ; extern void dy_logStatus(lpprob_struct *orig_lp, flags **p_logstat) ; extern bool dy_expandxopt(lpprob_struct *lp, double **p_xopt) ; /* dylp_io.c */ #include #ifdef DYLP_INTERNAL extern void dy_logpivot(dyret_enum result, int xjndx, int indir, double cbarj, int xindx, int outdir, double abarij, double delta) ; extern const char *dy_prtdyret(dyret_enum retcode) ; #endif /* DYLP_INTERNAL */ extern const char *dy_prtlpret(lpret_enum lpret), *dy_prtlpphase(dyphase_enum phase, bool abbrv) ; extern char *dy_prtvstat(flags status) ; extern bool dy_dumpcompact(ioid chn, bool echo, lpprob_struct *soln, bool nbzeros) ; extern void dy_setlogchn (ioid chn) ; extern void dy_setgtxecho (bool echo) ; /* dy_statistics.c These routines are compiled unconditionally, but note that the compile-time symbol DYLP_STATISTICS must be defined before dylp will actually take the time to collect detailed statistics. See dy_statistics.c for additional instructions. */ extern void dy_initstats(lpstats_struct **p_lpstats, consys_struct *orig_sys), dy_dumpstats(ioid chn, bool echo, lpstats_struct *lpstats, consys_struct *orig_sys), dy_freestats(lpstats_struct **p_lpstats) ; #ifdef DYLP_INTERNAL extern void dy_finalstats(lpstats_struct *lpstats) ; #endif /* DYLP_INTERNAL */ #endif /* _DYLP_H */ DyLP-1.10.4/DyLP/src/Dylp/glplib.h0000644000175200017520000001172211507440660015012 0ustar coincoin/* glplib.h */ /*---------------------------------------------------------------------- -- Copyright (C) 2000, 2001, 2002 Andrew Makhorin , -- Department for Applied Informatics, Moscow Aviation -- Institute, Moscow, Russia. All rights reserved. -- -- This file is a part of GLPK (GNU Linear Programming Kit). -- -- Licensed under the Eclipse Public License (EPL) by permission of the -- author for inclusion in the DyLP LP distribution. ----------------------------------------------------------------------*/ /* @(#)glplib.h 1.1 10/18/02 svn/cvs: $Id: glplib.h 407 2010-12-31 20:48:48Z lou $ */ #ifndef _GLPLIB_H #define _GLPLIB_H #define save_pointer dy_glp_save_pointer #define read_pointer dy_glp_read_pointer #define init_lib_env dy_glp_init_lib_env #define get_env_ptr dy_glp_get_env_ptr #define free_lib_env dy_glp_free_lib_env #define print dy_glp_print #define fault dy_glp_fault #define _insist dy_glp_insist #define watch dy_glp_watch #define umalloc dy_glp_umalloc #define ucalloc dy_glp_ucalloc #define ufree dy_glp_ufree #define create_pool dy_glp_create_pool #define get_atom dy_glp_get_atom #define free_atom dy_glp_free_atom #define get_atomv dy_glp_get_atomv #define clear_pool dy_glp_clear_pool #define delete_pool dy_glp_delete_pool extern void save_pointer(void *ptr); /* save a pointer */ extern void *read_pointer(void); /* obtain a pointer */ typedef struct ENV ENV; typedef struct MEM MEM; struct ENV { /* library environmental block */ MEM *mem_ptr; /* pointer to the linked list of allocated memory blocks */ int mem_limit; /* maximal amount of memory (in bytes) available for dynamic allocation */ int mem_total; /* total amount of currently allocated memory (in bytes; is the sum of the size fields over all memory block descriptors) */ int mem_tpeak; /* peak value of mem_total */ int mem_count; /* total number of currently allocated memory blocks */ int mem_cpeak; /* peak value of mem_count */ }; extern int init_lib_env(void); /* initialize library environment */ extern ENV *get_env_ptr(void); /* obtain a pointer to the environmental block */ extern int free_lib_env(void); /* deinitialize library environment */ extern void print(const char *fmt, ...); /* print informative message */ extern void fault(const char *fmt, ...); /* print error message and terminate program execution */ #define insist(expr) \ ((void)((expr) || (_insist(#expr, __FILE__, __LINE__), 1))) extern void _insist(const char *expr, const char *file, int line); /* check for logical condition */ extern double watch(void); /* take reading of stop-watch */ /* some processors need data to be properly aligned; the align_boundary macro defines the boundary which should fit for all data types; the align_datasize macro allows enlarging size of data item in order the immediately following data of any type should be properly aligned */ #define align_boundary sizeof(double) #define align_datasize(size) \ ((((size) + (align_boundary - 1)) / align_boundary) * align_boundary) struct MEM { /* memory block descriptor */ int size; /* size of block (in bytes, including descriptor) */ int flag; /* descriptor flag */ MEM *prev; /* pointer to descriptor of the previous block */ MEM *next; /* pointer to descriptor of the next block */ /* actual data start here (there may be a "hole" between the next field and actual data because of data alignment) */ }; extern void *umalloc(int size); /* allocate memory block */ extern void *ucalloc(int nmemb, int size); /* allocate memory block */ extern void ufree(void *ptr); /* free memory block */ typedef struct POOL POOL; struct POOL { /* memory pool (a set of atoms) */ int size; /* size of each atom in bytes (1 <= size <= 256); if size = 0, different atoms may have different sizes */ void *avail; /* pointer to the linked list of free atoms */ void *link; /* pointer to the linked list of allocated blocks (it points to the last recently allocated block) */ int used; /* number of bytes used in the last allocated block */ void *stock; /* pointer to the linked list of free blocks */ int count; /* total number of allocated atoms */ }; extern POOL *create_pool(int size); /* create memory pool */ extern void *get_atom(POOL *pool); /* allocate atom of fixed size */ extern void free_atom(POOL *pool, void *ptr); /* free an atom */ extern void *get_atomv(POOL *pool, int size); /* allocate atom of variable size */ extern void clear_pool(POOL *pool); /* free all atoms */ extern void delete_pool(POOL *pool); /* delete memory pool */ #endif /* eof */ DyLP-1.10.4/DyLP/src/Dylp/dy_vector_utils.c0000644000175200017520000002402011573762145016755 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains utility routines for the packed vector structure, as well as a few utilities for general expanded vectors. */ #define DYLP_INTERNAL #include "dylib_errs.h" #include "dylib_std.h" #include "dylib_strrtns.h" #include "dy_vector.h" static char sccsid[] UNUSED = "@(#)vector_utils.c 4.5 11/06/04" ; static char svnid[] UNUSED = "$Id: dy_vector_utils.c 436 2011-06-08 21:06:45Z stefan $" ; static const char *noname = "<>" ; pkvec_struct *pkvec_new (int sze) /* This routine allocates a new packed vector structure. Parameters: sze: the allocated size of the coeffs array Returns: pointer to the packed vector, or null if allocation fails */ { pkvec_struct *pkvec ; const char *rtnnme = "pkvec_new" ; if (sze < 0) sze = 0 ; pkvec = (pkvec_struct *) CALLOC(1,sizeof(pkvec_struct)) ; pkvec->sze = sze ; pkvec->nme = noname ; if (sze == 0) { pkvec->coeffs = NULL ; } else { pkvec->coeffs = (pkcoeff_struct *) MALLOC(sizeof(pkcoeff_struct)*sze) ; if (pkvec->coeffs == NULL) { errmsg(8,rtnnme,__LINE__,sizeof(pkcoeff_struct)*sze) ; return (NULL) ; } } return (pkvec) ; } bool pkvec_resize (pkvec_struct *pkvec, int sze) /* This routine resizes a packed vector as specified by sze. If sze is 0, the default is to expand by 10% of the current size, with a minimum expansion of 10. It's an error if the new size is less than the current number of coefficients in the vector. Parameters: sze: the new allocated size of the vector pkvec: the packed vector Returns: TRUE if the expansion succeeds, FALSE otherwise. */ { pkcoeff_struct *coeffs ; const char *rtnnme = "pkvec_resize" ; # ifdef DYLP_PARANOIA if (pkvec == NULL) { errmsg(2,rtnnme,"pkvec") ; return (FALSE) ; } if ((pkvec->coeffs == NULL && (pkvec->sze > 0 || pkvec->cnt > 0)) || (pkvec->cnt > pkvec->sze)) { errmsg(90,rtnnme,(pkvec->nme == NULL)?"<>":pkvec->nme, pkvec->ndx,pkvec->sze,pkvec->cnt,(pkvec->coeffs == NULL)?"un":"") ; return (FALSE) ; } #endif if (sze == 0) sze = minn((int)(pkvec->sze*1.1),pkvec->sze+10) ; if (sze < pkvec->cnt) { errmsg(91,rtnnme,(pkvec->nme == NULL)?"<>":pkvec->nme, pkvec->ndx,pkvec->cnt,sze) ; return (FALSE) ; } coeffs = pkvec->coeffs ; pkvec->coeffs = (pkcoeff_struct *) REALLOC(pkvec->coeffs,sizeof(pkcoeff_struct)*sze) ; if (pkvec->coeffs == NULL) { errmsg(8,rtnnme,__LINE__,sizeof(pkcoeff_struct)*sze) ; pkvec->coeffs = coeffs ; return (FALSE) ; } pkvec->sze = sze ; return (TRUE) ; } void pkvec_free (pkvec_struct *pkvec) /* This routine frees a packed vector. Parameters: pkvec: packed vector Returns: undefined. */ { # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 const char *rtnnme = "pkvec_free" ; if (pkvec == NULL) { errmsg(2,rtnnme,"pkvec") ; return ; } # endif if (pkvec->coeffs != NULL) FREE(pkvec->coeffs) ; FREE(pkvec) ; return ; } bool pkvec_check (pkvec_struct *pkvec, const char *caller) /* This routine goes over pkvec and decides if it's consistent, according to the following rules: * nme != NULL (this is a sort of sanity check -- failure here likely means that the vector has been corrupted somewhere along the way, or was sloppily crafted without calling pkvec_new) * sze >= 0 * sze == 0 iff coeffs == NULL * ndx >= 0 and isnan(dflt) == FALSE A vector can have sze == 0 and cnt > 0 in the case where it's used to acquire header information without reading the coefficients of the row or column. The allowance for ndx == 0 is made with reluctance, but it's necessary when loading a new matrix -- the index is filled in once the row/column is installed in the matrix. If sze > 0, the coeffs array is assumed to be valid, and the following two checks are also applied: * 0 <= cnt <= sze * coeffs[*].ndx > 0 and isnan(coeffs[*].val) == FALSE If any problems are found, the pkvec_check issues an error message on behalf of its calling routine. Parameters: pkvec: packed vector caller: name of calling routine Returns: TRUE if the vector checks out, FALSE otherwise. */ { int ndx ; const char *rtnnme = "pkvec_check" ; # ifdef DYLP_PARANOIA if (pkvec == NULL) { errmsg(2,rtnnme,"pkvec") ; return (FALSE) ; } # endif if (caller == NULL) caller = rtnnme ; if (pkvec->nme == NULL) { errmsg(95,caller,pkvec) ; return (FALSE) ; } if (pkvec->sze < 0 || (pkvec->sze == 0 && pkvec->coeffs != NULL) || (pkvec->sze != 0 && pkvec->coeffs == NULL)) { errmsg(90,caller,pkvec->nme,pkvec->ndx, pkvec->sze,pkvec->cnt,(pkvec->coeffs == NULL)?"un":"") ; return (FALSE) ; } if (pkvec->ndx < 0 || isnan(pkvec->dflt)) { errmsg(93,caller,pkvec->nme,pkvec->ndx,pkvec->dflt) ; return (FALSE) ; } if (pkvec->sze == 0) return (TRUE) ; if (pkvec->cnt < 0 || pkvec->cnt > pkvec->sze) { errmsg(90,caller,pkvec->nme,pkvec->ndx, pkvec->sze,pkvec->cnt,(pkvec->coeffs == NULL)?"un":"") ; return (FALSE) ; } for (ndx = 0 ; ndx < pkvec->cnt ; ndx++) { if (pkvec->coeffs[ndx].ndx < 0 || isnan(pkvec->coeffs[ndx].val)) { errmsg(94,caller,pkvec->nme,pkvec->ndx,ndx,pkvec->coeffs[ndx].ndx, ndx,pkvec->coeffs[ndx].val) ; return (FALSE) ; } } return (TRUE) ; } double exvec_1norm (double *vec, int len) /* Simple utility routine to calculate the 1-norm SUM{j} |vec| of an expanded vector. The vector is assumed to be indexed from 1 to len. Parameters: vec: expanded vector len: length of the vector Returns: the 1-norm of the vector, or NaN if there's a problem. */ { int ndx ; double norm ; # ifdef DYLP_PARANOIA const char *rtnnme = "exvec_1norm" ; if (vec == NULL) { errmsg(2,rtnnme,"vec") ; return (quiet_nan(0)) ; } # endif norm = 0 ; for (ndx = 1 ; ndx <= len ; ndx++) norm += fabs(vec[ndx]) ; return (norm) ; } double exvec_ssq (double *vec, int len) /* Simple utility routine to calculate the sum of squares SUM{j} vec**2 of an expanded vector. It's often more useful to have this than the actual 2-norm. The vector is assumed to be indexed from 1 to len. Parameters: vec: expanded vector len: length of the vector Returns: the sum of squares of the vector, or NaN if there's a problem. */ { int ndx ; double norm ; # ifdef DYLP_PARANOIA const char *rtnnme = "exvec_ssq" ; if (vec == NULL) { errmsg(2,rtnnme,"vec") ; return (quiet_nan(0)) ; } # endif norm = 0 ; for (ndx = 1 ; ndx <= len ; ndx++) norm += vec[ndx]*vec[ndx] ; return (norm) ; } double exvec_2norm (double *vec, int len) /* Simple utility routine to calculate the 2-norm sqrt(SUM{j} vec**2) of an expanded vector. The vector is assumed to be indexed from 1 to len. Parameters: vec: expanded vector len: length of the vector Returns: the 2-norm of the vector, or NaN if there's a problem. */ { int ndx ; double norm ; # ifdef DYLP_PARANOIA const char *rtnnme = "exvec_2norm" ; if (vec == NULL) { errmsg(2,rtnnme,"vec") ; return (quiet_nan(0)) ; } # endif norm = 0 ; for (ndx = 1 ; ndx <= len ; ndx++) norm += vec[ndx]*vec[ndx] ; return (sqrt(norm)) ; } double pkvec_2norm (pkvec_struct *vec) /* Simple utility routine to calculate the 2-norm sqrt(SUM{j} vec**2) of a packed vector. Parameters: vec: packed vector Returns: the 2-norm of the vector, or NaN if there's a problem. */ { int ndx ; pkcoeff_struct *coeffs ; double norm ; # ifdef DYLP_PARANOIA const char *rtnnme = "pkvec_2norm" ; if (vec == NULL) { errmsg(2,rtnnme,"pkvec") ; return (quiet_nan(0)) ; } if (vec->coeffs == NULL) { errmsg(2,rtnnme,"pkvec coeffs") ; return (quiet_nan(0)) ; } # endif norm = 0 ; coeffs = vec->coeffs ; for (ndx = 0 ; ndx < vec->cnt ; ndx++) norm += coeffs[ndx].val*coeffs[ndx].val ; return (sqrt(norm)) ; } double exvec_infnorm (double *vec, int len, int *p_jmax) /* Simple utility routine to calculate the infinity-norm MAX{j} |vec| of an expanded vector. The vector is assumed to be indexed from 1 to len. Parameters: vec: expanded vector len: length of the vector p_jmax: (o) if non-null, will be set to index of max value Returns: the inf-norm (max) of the vector, or NaN if there's a problem. */ { int j,jmax ; double norm ; # ifdef DYLP_PARANOIA const char *rtnnme = "exvec_infnorm" ; if (vec == NULL) { errmsg(2,rtnnme,"vec") ; if (p_jmax != NULL) *p_jmax = -1 ; return (quiet_nan(0)) ; } # endif /* Initialising (norm, jmax) to (0.0, len) will give the proper result for a vector of length 0, and also suppresses a compiler `possible rui' warning for jmax. */ norm = 0.0 ; if (p_jmax != NULL) { jmax = len ; for (j = 1 ; j <= len ; j++) { if (fabs(vec[j]) > norm) { norm = fabs(vec[j]) ; jmax = j ; } } *p_jmax = jmax ; } else { for (j = 1 ; j <= len ; j++) norm = maxx(fabs(vec[j]),norm) ; } return (norm) ; } double pkvec_dotexvec (pkvec_struct *pkvec, double *exvec) /* Utility routine to calculate the dot product SUM{j} pkvec*exvec of a packed vector and an expanded vector. Parameters: pkvec: packed vector exvec: expanded vector Returns: the dot product of the two vectors, or NaN if there's a problem */ { int pkndx ; double dot ; pkcoeff_struct *coeffs ; # ifdef DYLP_PARANOIA const char *rtnnme = "pkvec_dotexvec" ; if (pkvec == NULL) { errmsg(2,rtnnme,"pkvec") ; return (quiet_nan(0)) ; } if (pkvec->coeffs == NULL) { errmsg(2,rtnnme,"pkvec coeffs") ; return (quiet_nan(0)) ; } if (exvec == NULL) { errmsg(2,rtnnme,"exvec") ; return (quiet_nan(0)) ; } # endif dot = 0 ; coeffs = pkvec->coeffs ; for (pkndx = 0 ; pkndx < pkvec->cnt ; pkndx++) dot += coeffs[pkndx].val*exvec[coeffs[pkndx].ndx] ; return (dot) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_warmstart.c0000644000175200017520000007225011507440660016257 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains the routines that handle a warm start, given a basis & status passed in by the user. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_warmstart.c 4.5 11/06/04" ; static char svnid[] UNUSED = "$Id: dy_warmstart.c 407 2010-12-31 20:48:48Z lou $" ; static void correct_for_patch (void) /* This routine scans dy_status looking for architectural variables that are recorded as basic but have been booted out of the basis by a patch operation. It's a very special-purpose routine, separated out so it doesn't clutter up the code in dy_warmstart. Parameters: none Returns: undefined */ { int j,cnt ; flags statj ; double *vlb,*vub ; vlb = dy_sys->vlb ; vub = dy_sys->vub ; /* Open a loop to scan the status array, checking that variables recorded as basic are really basic. dy_patch clears the var2basis entry when it makes the patch, so we're looking for basic status with a 0 in var2basis. When we find a variable that needs to be corrected, decide an appropriate nonbasic status based on the sign of the objective coefficient and the presence/absence of finite bounds. */ # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tcorrecting status due to basis patch ...") ; } # endif cnt = 0 ; for (j = dy_sys->concnt+1 ; j <= dy_sys->varcnt ; j++) { statj = dy_status[j] ; if (flgon(statj,vstatBASIC) && dy_var2basis[j] == 0) { if (vlb[j] > -dy_tols->inf && vub[j] < dy_tols->inf) { if (vub[j] == vlb[j]) { dy_status[j] = vstatNBFX ; dy_x[j] = vub[j] ; } else if (dy_sys->obj[j] >= 0) { dy_status[j] = vstatNBLB ; dy_x[j] = vlb[j] ; } else { dy_status[j] = vstatNBUB ; dy_x[j] = vub[j] ; } } else if (vlb[j] > -dy_tols->inf) { dy_status[j] = vstatNBLB ; dy_x[j] = vlb[j] ; } else if (vub[j] < dy_tols->inf) { dy_status[j] = vstatNBUB ; dy_x[j] = vub[j] ; } else { dy_status[j] = vstatNBFR ; dy_x[j] = 0 ; } # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t changing status for %s (%d) to %s,", consys_nme(dy_sys,'v',j,FALSE,NULL),j, dy_prtvstat(dy_status[j])) ; dyio_outfmt(dy_logchn,dy_gtxecho," value %g.",dy_x[j]) ; } # endif cnt++ ; } } # ifndef DYLP_NDEBUG /* Given that this routine has been called, there should be corrections to be made, but it's possible that the patch involved only logicals. If so, dy_warmstart has already dealt with the problem and we simply can't tell. (The necessary data structure is not exported from dy_basis.c) The least we can do is print a message. */ if (cnt == 0 && dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t no architecturals corrected.") ; } # endif return ; } dyret_enum dy_warmstart (lpprob_struct *orig_lp) /* This routine is responsible for recreating the active constraint system, basis, and status specified by the user in orig_lp. It will handle even the pathological case of 0 active constraints and 0 active variables. If the user has supplied an active variable vector, only those variables will be activated. Clearly, the supplied basis, status, and active variable vector should be consistent, or bad things will happen. If we're operating in fullsys mode, we need to check here for additions to the constraint system. << In the very near future, this routine should also be upgraded to cope with the possibility that constraints specified in the warm start basis have disappeared. >> Parameters: orig_lp: The original lp problem structure Returns: dyrOK if the setup completes without error, any of a number of error codes otherwise (dyrFATAL, dyrINV, or a code from dy_factor) */ { int vndx,dyvndx,bpos,cndx,dycndx,dycsze,dyvsze,nbfxcnt ; double *vlb,*vub,vlbj,vubj,obj ; consys_struct *orig_sys ; flags *orig_status,vstat,calcflgs ; dyret_enum retval ; basisel_struct *orig_basis ; bool *orig_actvars,rngseen,noactvarspec ; pkvec_struct *pkcol ; char nmebuf[50] ; flags parts = CONSYS_OBJ|CONSYS_VUB|CONSYS_VLB|CONSYS_RHS|CONSYS_RHSLOW| CONSYS_VTYP|CONSYS_CTYP, opts = CONSYS_LVARS|CONSYS_WRNATT ; const char *rtnnme = "dy_warmstart" ; extern void dy_setfinalstatus(void) ; /* dy_hotstart.c */ # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) double xi ; # endif retval = dyrINV ; nbfxcnt = -1 ; /* Do a little unpacking. */ orig_sys = orig_lp->consys ; orig_status = orig_lp->status ; orig_basis = orig_lp->basis->el ; if (flgon(orig_lp->ctlopts,lpctlACTVARSIN) && dy_opts->fullsys == FALSE) { orig_actvars = orig_lp->actvars ; noactvarspec = FALSE ; } else { orig_actvars = NULL ; noactvarspec = TRUE ; } /* Initialise the statistics on loadable/unloadable variables and constraints. */ dy_lp->sys.forcedfull = FALSE ; dy_lp->sys.vars.loadable = orig_sys->varcnt ; dy_lp->sys.vars.unloadable = 0 ; dy_lp->sys.cons.loadable = orig_sys->concnt ; dy_lp->sys.cons.unloadable = 0 ; /* Create the dy_sys constraint system to match the user's basis and active variables (if specified). We'll create the system with logicals enabled. For variables, if there is an active variable vector, skim it for a count. Otherwise, skim the status array and count the number of nonbasic fixed variables (which will never become active). For constraints, we need to consider the possibility that the user has added cuts and is trusting dylp to deal with it. If we're operating in the usual dynamic mode, this will be picked up automatically, and we can size the constraint system to the active constraints of the basis. But if we're operating in fullsys mode, we need to add them here. In this case, the number of constraints is the current size of the constraint system. Take this opportunity to clean the bounds arrays, making sure that bounds within the feasibility tolerance of one another are set to be exactly equal. (This simplifies handling fixed variables.) For nonbasic variables, force the status to NBFX and cancel activation if actvars is present. Basic variables which need BFX are picked up later, after the basis is established. */ vub = orig_sys->vub ; vlb = orig_sys->vlb ; dyio_outfxd(nmebuf,-((int) (sizeof(nmebuf)-1)), 'l',"%s[actv]",orig_sys->nme) ; if (noactvarspec == FALSE) { dyvsze = 0 ; for (vndx = 1 ; vndx <= orig_sys->varcnt ; vndx++) { vlbj = vlb[vndx] ; vubj = vub[vndx] ; if (atbnd(vlbj,vubj)) { if (vlbj != vubj) { # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tForcing equal bound %g for %s (%d)", (vlbj+vubj)/2,consys_nme(orig_sys,'v',vndx,0,0),vndx) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t original lb = %g, ub = %g, diff = %g, tol = %g", vlbj,vubj,vubj-vlbj,dy_tols->pfeas) ; } # endif vlb[vndx] = (vlbj+vubj)/2 ; vub[vndx] = vlb[vndx] ; } if (((int) orig_status[vndx]) > 0) { orig_status[vndx] = vstatNBFX ; orig_actvars[vndx] = FALSE ; } } if (vlb[vndx] > vub[vndx]) { dy_lp->lpret = lpINFEAS ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tTrivial infeasibility for %s (%d), lb = %g > ub = %g.", consys_nme(orig_sys,'v',vndx,0,0),vndx,vlb[vndx],vub[vndx]) ; } # endif } if (orig_actvars[vndx] == TRUE) dyvsze++ ; } } else { nbfxcnt = 0 ; for (vndx = 1 ; vndx <= orig_sys->varcnt ; vndx++) { vlbj = vlb[vndx] ; vubj = vub[vndx] ; if (atbnd(vlbj,vubj)) { if (vlbj != vubj) { # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tForcing equal bound %g for %s (g)", (vlbj+vubj)/2,consys_nme(orig_sys,'v',vndx,0,0),vndx) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t original lb = %g, ub = %g, diff = %g, tol = %g", vlbj,vubj,vubj-vlbj,dy_tols->pfeas) ; } # endif vlb[vndx] = (vlbj+vubj)/2 ; vub[vndx] = vlb[vndx] ; } if (((int) orig_status[vndx]) > 0) { orig_status[vndx] = vstatNBFX ; } } if (vlb[vndx] > vub[vndx]) { dy_lp->lpret = lpINFEAS ; } if ((((int) orig_status[vndx]) > 0) && flgon(orig_status[vndx],vstatNBFX)) { nbfxcnt++ ; } } dyvsze = orig_sys->varcnt-nbfxcnt ; } if (dy_opts->fullsys == TRUE) dycsze = orig_sys->concnt ; else dycsze = orig_lp->basis->len ; dyvsze += dycsze ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n creating constraint system %s (%d x %d+%d)", nmebuf,dycsze,dyvsze-dycsze,dycsze) ; if (dy_opts->print.setup >= 3) { if (flgoff(orig_lp->ctlopts,lpctlACTVARSIN)) dyio_outfmt(dy_logchn,dy_gtxecho, "\n %d nonbasic fixed variables excluded.", nbfxcnt) ; } } # endif dy_sys = consys_create(nmebuf,parts,opts,dycsze,dyvsze,dy_tols->inf) ; if (dy_sys == NULL) { errmsg(152,rtnnme,nmebuf) ; return (dyrFATAL) ; } /* Hang a set of translation vectors onto each system: origcons and origvars on orig_sys, and actcons and actvars on dy_sys. */ if (consys_attach(dy_sys,CONSYS_ROW, sizeof(int),(void **) &dy_actvars) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"active -> original variable map") ; return (dyrFATAL) ; } if (consys_attach(dy_sys,CONSYS_COL, sizeof(int),(void **) &dy_actcons) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"active -> original constraint map") ; return (dyrFATAL) ; } if (consys_attach(orig_sys,CONSYS_ROW, sizeof(int),(void **) &dy_origvars) == FALSE) { errmsg(100,rtnnme,orig_sys->nme,"original -> active variable map") ; return (dyrFATAL) ; } if (consys_attach(orig_sys,CONSYS_COL, sizeof(int),(void **) &dy_origcons) == FALSE) { errmsg(100,rtnnme,orig_sys->nme,"original -> active constraint map") ; return (dyrFATAL) ; } /* dy_origvars is cleared to 0 as it's attached, indicating that the original variables have no predefined status. We need to correct this. If the caller's supplied an active variable vector, we can use it to activate variables prior to adding constraints. (But in any case don't activate nonbasic fixed variables.) It's illegal to declare a formerly basic variable to be inactive by the simple expedient of setting actvars[vndx] = FALSE, hence the paranoid check. Otherwise, we'll need to depend on dy_loadcon to activate the variables referenced in the active constraints. We'll still fill in origvars, with two purposes: * We can avoid activating nonbasic fixed variables. * We can use dy_origvars == 0 as a paranoid check from here on out. Inactive variables are required to be nonbasic, so in this case the proper status for formerly basic variables is SB. */ if (noactvarspec == FALSE) { # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n processing active variable list ...") ; } # endif pkcol = pkvec_new(0) ; for (vndx = 1 ; vndx <= orig_sys->varcnt ; vndx++) { if (((int) orig_status[vndx]) > 0) vstat = orig_status[vndx] ; else vstat = vstatB ; if (orig_actvars[vndx] == TRUE && flgoff(vstat,vstatNBFX)) { if (consys_getcol_pk(orig_sys,vndx,&pkcol) == FALSE) { errmsg(122,rtnnme,orig_sys->nme,"variable", consys_nme(orig_sys,'v',vndx,TRUE,NULL),vndx) ; retval = dyrFATAL ; break ; } if (consys_addcol_pk(dy_sys,vartypCON,pkcol, orig_sys->obj[vndx],vlb[vndx],vub[vndx]) == FALSE) { errmsg(156,rtnnme,"variable",dy_sys->nme,pkcol->nme) ; retval = dyrFATAL ; break ; } dyvndx = pkcol->ndx ; dy_origvars[vndx] = dyvndx ; dy_actvars[dyvndx] = vndx ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tactivating %s variable %s (%d) to index %d.", consys_prtvartyp(orig_sys->vtyp[vndx]), consys_nme(orig_sys,'v',vndx,FALSE,NULL),vndx,dyvndx) ; } # endif } else { # ifdef DYLP_PARANOIA if (flgon(vstat,vstatBASIC)) { errmsg(380,rtnnme,orig_sys->nme, consys_nme(orig_sys,'v',vndx,FALSE,NULL),vndx, dy_prtvstat(vstat),"non-basic") ; retval = dyrFATAL ; break ; } # endif dy_origvars[vndx] = -((int) vstat) ; } } pkvec_free(pkcol) ; if (retval != dyrINV) return (retval) ; } else { for (vndx = 1 ; vndx <= orig_sys->varcnt ; vndx++) { if (((int) orig_status[vndx]) > 0) vstat = orig_status[vndx] ; else vstat = vstatSB ; MARK_INACTIVE_VAR(vndx,-((int) vstat)) ; } } /* Walk the basis and install the constraints in order. When we're finished with this, the active system will be up and about. In the case where there's no active variable specification, some of the status information written into dy_origvars may have been overwritten; only variables with vstatNBFX are guaranteed to remain inactive. */ rngseen = FALSE ; for (bpos = 1 ; bpos <= orig_lp->basis->len ; bpos++) { cndx = orig_basis[bpos].cndx ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 2) dyio_outfmt(dy_logchn,dy_gtxecho, "\n activating %s %s (%d) in pos'n %d", consys_prtcontyp(orig_sys->ctyp[cndx]), consys_nme(orig_sys,'c',cndx,FALSE,NULL),cndx,bpos) ; # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->cons.init[cndx] = TRUE ; # endif if (dy_loadcon(orig_sys,cndx,noactvarspec,NULL) == FALSE) { errmsg(430,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "activate","constraint", consys_nme(orig_sys,'c',cndx,TRUE,NULL),cndx) ; return (dyrFATAL) ; } if (orig_sys->ctyp[cndx] == contypRNG) rngseen = TRUE ; } /* If we're in fullsys mode, repeat constraint installation actions for any cuts added after this basis was assembled. */ if (dy_opts->fullsys == TRUE) { for (cndx = orig_lp->basis->len+1 ; cndx <= orig_sys->concnt ; cndx++) { # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 2) dyio_outfmt(dy_logchn,dy_gtxecho, "\n activating %s %s (%d) in pos'n %d", consys_prtcontyp(orig_sys->ctyp[cndx]), consys_nme(orig_sys,'c',cndx,FALSE,NULL),cndx,cndx) ; # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->cons.init[cndx] = TRUE ; # endif if (dy_loadcon(orig_sys,cndx,noactvarspec,NULL) == FALSE) { errmsg(430,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "activate","constraint", consys_nme(orig_sys,'c',cndx,TRUE,NULL),cndx) ; return (dyrFATAL) ; } if (orig_sys->ctyp[cndx] == contypRNG) rngseen = TRUE ; } } # ifdef DYLP_PARANOIA /* Paranoid checks and informational print statements. */ if (dy_chkdysys(orig_sys) == FALSE) return (dyrINV) ; # endif # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n system %s has %d constraints, %d+%d variables", dy_sys->nme,dy_sys->concnt,dy_sys->archvcnt,dy_sys->logvcnt) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n %d constraints, %d variables remain inactive in system %s.", orig_sys->concnt-dy_sys->concnt,orig_sys->archvcnt-dy_sys->archvcnt, orig_sys->nme) ; if (dy_opts->print.setup >= 4) { nbfxcnt = 0 ; for (vndx = 1 ; vndx <= orig_sys->varcnt ; vndx++) { if (INACTIVE_VAR(vndx)) { vstat = (flags) (-dy_origvars[vndx]) ; switch (getflg(vstat,vstatSTATUS)) { case vstatNBUB: { xi = orig_sys->vub[vndx] ; break ; } case vstatNBLB: case vstatNBFX: { xi = orig_sys->vlb[vndx] ; break ; } case vstatNBFR: { xi = 0 ; break ; } default: { errmsg(433,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "inactive",consys_nme(orig_sys,'v',vndx,TRUE,NULL), vndx,dy_prtvstat(vstat)) ; return (dyrINV) ; } } if (xi != 0) { if (nbfxcnt == 0) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tinactive variables with nonzero values:") ; nbfxcnt++ ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%s (%d) = %g, status %s", consys_nme(orig_sys,'v',vndx,FALSE,NULL),vndx,xi, dy_prtvstat(vstat)) ; } } } if (nbfxcnt == 0) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tall inactive variables are zero.") ; } } # endif /* Time to assemble the basis. Attach the basis and inverse basis vectors to the constraint system. consys_attach will initialise them to 0. */ if (consys_attach(dy_sys,CONSYS_COL, sizeof(int),(void **) &dy_basis) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"basis vector") ; return (dyrFATAL) ; } if (consys_attach(dy_sys,CONSYS_ROW, sizeof(int),(void **) &dy_var2basis) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"inverse basis vector") ; return (dyrFATAL) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 1) { if (dy_opts->print.setup == 0) dyio_outfmt(dy_logchn,dy_gtxecho, "\n %s: regenerating the basis ...",rtnnme) ; else dyio_outfmt(dy_logchn,dy_gtxecho, "\n regenerating the basis.",rtnnme) ; } # endif /* Load the basis. For variables, we need to translate architecturals using dy_origvars, and watch out for logicals (vndx = negative of associated constraint index). After all the paranoia, we finally update dy_basis and dy_var2basis. Because we loaded the constraints in the order they were listed in the basis, we should have that dycndx = bpos, hence dy_actcons[bpos] = cndx. If we're installing a basic variable, it should be active already. For architectural variables, the check is made in dy_origvars. For a logical, the associated constraint should be active, hence a non-zero entry in dy_origcons. For architecturals, we also check if there are any non-zero coefficients remaining in the column (who knows what the user has done to the constraint system). This rates a message if the print level is high enough, but the basis pacakge is capable of patching the basis. (Indeed, it's hard to do it correctly here.) */ # ifdef DYLP_PARANOIA pkcol = pkvec_new(0) ; retval = dyrOK ; # endif for (bpos = 1 ; bpos <= orig_lp->basis->len ; bpos++) { cndx = orig_basis[bpos].cndx ; dycndx = dy_origcons[cndx] ; vndx = orig_basis[bpos].vndx ; if (vndx < 0) { dyvndx = dy_origcons[-vndx] ; } else { dyvndx = dy_origvars[vndx] ; } # ifdef DYLP_PARANOIA if (dycndx <= 0) { errmsg(369,rtnnme,orig_sys->nme,"constraint", consys_nme(orig_sys,'c',cndx,FALSE,NULL),cndx, "cons",cndx,dycndx) ; retval = dyrINV ; break ; } if (dy_actcons[bpos] != cndx) { errmsg(370,rtnnme,dy_sys->nme, consys_nme(orig_sys,'c',cndx,FALSE,NULL),cndx,bpos, consys_nme(orig_sys,'c',dy_actcons[bpos],FALSE,NULL), dy_actcons[bpos]) ; if (dycndx != bpos) { errmsg(1,rtnnme,__LINE__) ; } retval = dyrINV ; break ; } if (vndx < 0) { if (dyvndx <= 0) { errmsg(369,rtnnme,orig_sys->nme,"constraint", consys_nme(orig_sys,'c',-vndx,FALSE,NULL),-vndx, "cons",-vndx,dyvndx) ; retval = dyrINV ; break ; } } else { if (dyvndx <= 0) { errmsg(369,rtnnme,orig_sys->nme,"variable", consys_nme(orig_sys,'v',vndx,FALSE,NULL),vndx, "vars",vndx,dyvndx) ; retval = dyrINV ; break ; } if (consys_getcol_pk(dy_sys,dyvndx,&pkcol) == FALSE) { errmsg(122,rtnnme,orig_sys->nme,"variable", consys_nme(orig_sys,'v',vndx,TRUE,NULL),vndx) ; retval = dyrFATAL ; break ; } if (pkcol->cnt == 0 && dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n %s (%d) has no non-zeros in active constraints.", consys_nme(dy_sys,'v',dyvndx,TRUE,NULL),dyvndx) ; } } # endif dy_basis[dycndx] = dyvndx ; dy_var2basis[dyvndx] = dycndx ; } /* If we're in fullsys mode, make the logical basic for any remaining constraints. */ if (dy_opts->fullsys == TRUE) { for ( ; bpos <= dy_sys->concnt ; bpos++) { dy_basis[bpos] = bpos ; dy_var2basis[bpos] = bpos ; } } # ifdef DYLP_PARANOIA pkvec_free(pkcol) ; if (retval != dyrOK) return (retval) ; # endif # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t Pos'n Variable Constraint") ; for (bpos = 1 ; bpos <= orig_lp->basis->len ; bpos++) { vndx = dy_basis[bpos] ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t %3d (%3d) %-15s",bpos,vndx, consys_nme(dy_sys,'v',vndx,FALSE,NULL)) ; dyio_outfmt(dy_logchn,dy_gtxecho,"%-15s", consys_nme(dy_sys,'c',bpos,FALSE,NULL)) ; } } # endif /* Factor the basis. We don't want any of the primal or dual variables calculated just yet. If this fails we're in deep trouble. Don't do this if we're dealing with a constraint system with no constraints! */ if (dy_sys->concnt > 0) { # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 2) dyio_outfmt(dy_logchn,dy_gtxecho,"\n factoring ...") ; # endif calcflgs = 0 ; retval = dy_factor(&calcflgs) ; switch (retval) { case dyrOK: case dyrPATCHED: { break ; } default: { errmsg(309,rtnnme,dy_sys->nme) ; return (retval) ; } } } /* Attach and clear the vectors which will hold the status, values of primal and dual variables, and reduced costs. */ if (consys_attach(dy_sys,CONSYS_ROW, sizeof(flags),(void **) &dy_status) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"status vector") ; return (dyrFATAL) ; } if (consys_attach(dy_sys,CONSYS_COL, sizeof(double),(void **) &dy_xbasic) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"basic variable vector") ; return (dyrFATAL) ; } if (consys_attach(dy_sys,CONSYS_ROW, sizeof(double),(void **) &dy_x) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"primal variable vector") ; return (dyrFATAL) ; } if (consys_attach(dy_sys,CONSYS_COL, sizeof(double),(void **) &dy_y) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"dual variable vector") ; return (dyrFATAL) ; } if (consys_attach(dy_sys,CONSYS_ROW, sizeof(double),(void **) &dy_cbar) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"reduced cost vector") ; return (dyrFATAL) ; } /* Calculate dual variables and reduced costs. Might as well make a try for a dual feasible start, eh? */ # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 2) dyio_outfmt(dy_logchn,dy_gtxecho,"\n calculating dual values ...") ; # endif dy_calcduals() ; if (dy_calccbar() == FALSE) { errmsg(384,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; return (dyrFATAL) ; } /* Initialise dy_status for logicals, using dy_var2basis and dy_cbar as guides. We have to consider the type of constraint so that we can give artificials NBFX status (thus avoiding the issue of whether NBLB or NBUB gives dual feasibility), and so that we can check the sign of the associated reduced cost to determine the proper bound for the logical associated with a range constraint. */ vlb = dy_sys->vlb ; vub = dy_sys->vub ; # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n establishing initial status and reference frame ...") ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n logicals ...") ; } # endif for (dyvndx = 1 ; dyvndx <= dy_sys->concnt ; dyvndx++) { if (dy_var2basis[dyvndx] != 0) { if (vub[dyvndx] == vlb[dyvndx]) dy_status[dyvndx] = vstatBFX ; else dy_status[dyvndx] = vstatB ; } else { switch (dy_sys->ctyp[dyvndx]) { case contypLE: case contypGE: { dy_status[dyvndx] = vstatNBLB ; dy_x[dyvndx] = 0 ; break ; } case contypEQ: { dy_status[dyvndx] = vstatNBFX ; dy_x[dyvndx] = 0 ; break ; } case contypRNG: { if (vub[dyvndx] == vlb[dyvndx]) { dy_status[dyvndx] = vstatNBFX ; dy_x[dyvndx] = vub[dyvndx] ; } else if (dy_cbar[dyvndx] < 0) { dy_status[dyvndx] = vstatNBUB ; dy_x[dyvndx] = vub[dyvndx] ; } else { dy_status[dyvndx] = vstatNBLB ; dy_x[dyvndx] = vlb[dyvndx] ; } break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } } } # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t %s (%d) %s", consys_nme(dy_sys,'v',dyvndx,FALSE,NULL),dyvndx, dy_prtvstat(dy_status[dyvndx])) ; if (flgon(dy_status[dyvndx],vstatNONBASIC|vstatNBFR)) dyio_outfmt(dy_logchn,dy_gtxecho," with value %g.",dy_x[dyvndx]) ; else dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } # endif } /* Scan dy_origvars, with two purposes in mind: * For active architectural variables, initialise dy_status from orig_status, using the actual status for nonbasic variables, and vstatB, vstatBFX, or vstatBFR for basic variables. (We'll tune this once we have the values of the basic variables.) Initialise dy_x to the proper value for nonbasic variables. We shouldn't see NBFX here, as those variables should have been left inactive. * For inactive architectural variables, accumulate the objective function correction. Nonbasic free variables are assumed to have value 0. */ # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 2) dyio_outfmt(dy_logchn,dy_gtxecho,"\n architecturals ...") ; # endif dy_lp->inactzcorr = 0 ; for (vndx = 1 ; vndx <= orig_sys->varcnt ; vndx++) { dyvndx = dy_origvars[vndx] ; if (dyvndx < 0) { obj = orig_sys->obj[vndx] ; switch ((flags) (-dyvndx)) { case vstatNBFX: case vstatNBLB: { dy_lp->inactzcorr += obj*orig_sys->vlb[vndx] ; break ; } case vstatNBUB: { dy_lp->inactzcorr += obj*orig_sys->vub[vndx] ; break ; } # ifdef DYLP_PARANOIA case vstatNBFR: { break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (dyrINV) ; } # endif } } else { if (((int) orig_status[vndx]) < 0) { if (vlb[dyvndx] == vub[dyvndx]) dy_status[dyvndx] = vstatBFX ; else if (vlb[dyvndx] <= -dy_tols->inf && vub[dyvndx] >= dy_tols->inf) dy_status[dyvndx] = vstatBFR ; else dy_status[dyvndx] = vstatB ; } else { dy_status[dyvndx] = orig_status[vndx] ; switch (dy_status[dyvndx]) { case vstatNBLB: { dy_x[dyvndx] = vlb[dyvndx] ; break ; } case vstatNBUB: { dy_x[dyvndx] = vub[dyvndx] ; break ; } case vstatNBFR: { dy_x[dyvndx] = 0 ; break ; } # ifdef DYLP_PARANOIA default: { errmsg(1,rtnnme,__LINE__) ; return (dyrINV) ; } # endif } } # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t %s (%d) %s", consys_nme(dy_sys,'v',dyvndx,FALSE,NULL),dyvndx, dy_prtvstat(dy_status[dyvndx])) ; if (flgon(dy_status[dyvndx],vstatNONBASIC|vstatNBFR)) dyio_outfmt(dy_logchn,dy_gtxecho," with value %g.",dy_x[dyvndx]) ; else dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } # endif } } /* Did we patch the basis? If so, we need to scan the status array and correct the entries for the architectural variables that were booted out during the patch. */ if (retval == dyrPATCHED) correct_for_patch() ; /* Ok, status is set. Now it's time to calculate initial values for the primal variables and objective. Arguably we don't need the true objective for phase I, but it's cheap to calculate. Once we have the primal variables, adjust the status for any that are pinned against a bound or out of bounds, and see how it looks, in terms of primal infeasibility. */ # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 2) dyio_outfmt(dy_logchn,dy_gtxecho,"\n calculating primal values ...") ; # endif if (dy_calcprimals() == FALSE) { errmsg(316,rtnnme,dy_sys->nme) ; return (dyrFATAL) ; } dy_lp->z = dy_calcobj() ; dy_setfinalstatus() ; /* Make the check for primal and/or dual feasibility, and set the initial simplex phase accordingly. */ calcflgs = ladPRIMFEAS|ladPFQUIET|ladDUALFEAS|ladDFQUIET ; retval = dy_accchk(&calcflgs) ; if (retval != dyrOK) { errmsg(304,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; return (retval) ; } if (flgoff(calcflgs,ladPRIMFEAS)) { dy_lp->simplex.next = dyPRIMAL2 ; } else if (flgoff(calcflgs,ladDUALFEAS)) { dy_lp->simplex.next = dyDUAL ; } else { dy_lp->simplex.next = dyPRIMAL1 ; } # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n phase %s, initial objective %g", dy_prtlpphase(dy_lp->simplex.next,FALSE),dy_lp->z) ; if (dy_lp->infeascnt != 0) dyio_outfmt(dy_logchn,dy_gtxecho,", %d infeasible vars, infeas = %g", dy_lp->infeascnt,dy_lp->infeas) ; dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } if (dy_opts->print.crash >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\nPos'n\tConstraint\tDual\t\tPrimal\n") ; for (bpos = 1 ; bpos <= dy_sys->concnt; bpos++) { cndx = dy_actcons[bpos] ; dyvndx = dy_basis[bpos] ; if (dyvndx <= dy_sys->concnt) vndx = orig_sys->varcnt+dyvndx ; else vndx = dy_actvars[dyvndx] ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n%5d\t(%4d) %-8s\t%12.4g\t(%4d) %-8s %12.4g", bpos,cndx, consys_nme(dy_sys,'c',bpos,FALSE,NULL),dy_y[bpos],vndx, consys_nme(dy_sys,'v',dyvndx,FALSE,NULL),dy_x[dyvndx]) ; } } # endif return (dyrOK) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_primal.c0000644000175200017520000022743212253224475015526 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains the routines specific to the primal simplex algorithm. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_primal.c 4.6 10/15/05" ; static char svnid[] UNUSED = "$Id: dy_primal.c 524 2013-12-15 03:59:57Z tkr $" ; /* A word or three on the handling of infeasible variables during phase I. The underlying philosophy is that once a variable becomes feasible, it stays feasible, hence the number of infeasible variables decreases monotonically. To construct the phase I objective, dy_initp1obj makes a list of the infeasible variables, puts +/- 1.0 in the objective in the corresponding spots, and calculates the duals and reduced costs. Dylp minimises, so we use +1 for BUUB variables, -1 for BLLB variables. To install the phase I objective, the phase II objective is detached from dy_sys->obj and cached, and the phase I objective is attached in its place. With each iteration, tweakp1obj scans the list of infeasible variables to see what's happened and make adjustments. The possibilities are: * No variable became feasible, in which case nothing need be done. * Exactly one variable (the leaving variable) became feasible and became nonbasic. Its (now nonbasic) objective coefficient is set to 0. This change will not affect the duals (y = cinv(B)) or any reduced costs except cbar (cbar = c - yA, so we only need to compensate for the change to c). I suppose we could check to see if x is now an attractive candidate to pivot into the basis, but it seems more trouble than it's worth. * One or more variables became feasible, and remained basic. In this case, all hell breaks loose, as we'll need to change objective coefficients for variables that are still basic, and the change will ripple everywhere. I think that a reasonably efficient update calculation might be possible, but for now the approach is to simply recalculate the duals and reduced costs. At least the column norms don't change. All variables which gain feasibility are removed from the list of infeasible variables, and the list is compressed. Eventually, it dwindles to nothing and we're feasible (hence optimal) and done with phase I. Now, if you believe this heart-warming story, I have a fine bridge you might want to purchase. What'll really happen (not always, but often enough to hurt) is that accumulating numeric inaccuracy will creep in. At some point we'll refactor and find that previously feasible variables have lost feasibility. The variables' status will be reset correctly, so that they'll be properly evaluated and handled during pivoting, EXCEPT, the objective coefficient will be incorrect (i.e., 0). Rather than dance around trying to add to the list of infeasible variables, we'll simply let it dwindle to nothing and catch any variables that became infeasible in the meantime with the preoptimality check for primal feasibility (which, as a side effect, will make sure that the value of infeascnt in dy_lp is correct). If we fail the check (by way of some variables having lost feasibility), we run dy_initp1obj again and give it another shot. In order to implement an initial variable purge, prior to the first run of a simplex routine, we need to be able to install the phase I objective before entering the main dynamic simplex loop. Hence the dy_lp structure contains phase I objective information. We also have to make dy_initp1obj available to dylp. In the normal course of things, commonstart will initialise the phase I objective, and dy_finishup will free it. Nonetheless, dy_primal does a check prior to calling primal1, in case we've kicked back into phase I due to loss of feasibility. primal1 may also call dy_initp1obj if it finds formerly feasible variables have lost feasibility. */ /* Antidegeneracy comes in two strengths: * `Anti-degen lite' attempts to choose the leaving variable using a heuristic based on alignment of hyperplanes. There are 6 variations available. Two of them actually ignore hyperplane alignment. The other four try to choose the leaving variable by considering the relative alignment of the plane that will become tight to either the objective function or the edge direction for the pivot. See further comments in the relevant subroutines (primalout & subroutines) in dy_primalpivot.c. * If the lite approach fails, the heavy artillery is a strategy based on perturbation of the problem. When faced with numeric ill-conditioning, the idea is that we gradually boost the minimum pivot ratio. This will happen when groombasis has to make a major status correction, and when we encounter unexpected loss of dual feasibility (optimality) or primal feasibility once we think we've obtained either. */ static bool forcesuperbasic (void) /* To put it bluntly, this routine is a bandaid. For good or ill, primal I knows that it should never see superbasic variables; they're not necessary when feasibility isn't at issue. But, we have the following failure scenario: We're in phase II, and a pivot attempt results in a singular basis. dylp soldiers on, calling dy_accchk to refactor (which will patch the basis) and recalculate the primal and dual variables. But, sad to say, the primal feasibility check fails (we've removed some accumulated numerical inaccuracy by refactoring, or changed the numeric conditioning of the basis) and we revert to primal phase I. Which promptly fails because of the superbasic variable left by the patch. So, this bandaid scans the nonbasic variables and, if it finds a superbasic variable, adjusts it to the best bound, based on the objective coefficient. In the event that we adjust a variable, we'll call dy_accchk to make sure we have an accurate count of infeasible basic variables going into phase I. Parameters: none Returns: TRUE if all goes well, FALSE otherwise. */ { int k,supercnt ; flags statk,checks ; double valk,lbk,ubk ; /* Open up a loop to walk the variables, looking for superbasics. */ supercnt = 0 ; for (k = 1 ; k < dy_sys->varcnt ; k++) { /* It's a superbasic variable. Force it to the appropriate bound based on the objective coefficient and presence/absence of the bound. */ if (flgon(dy_status[k],vstatSB)) { supercnt++ ; ubk = dy_sys->vub[k] ; lbk = dy_sys->vlb[k] ; statk = vstatSB ; if (ubk < dy_tols->inf && lbk > -dy_tols->inf) { if (dy_sys->obj[k] < 0) { setflg(statk,vstatNBUB) ; valk = ubk ; } else { setflg(statk,vstatNBLB) ; valk = lbk ; } } else if (ubk < dy_tols->inf) { setflg(statk,vstatNBUB) ; valk = ubk ; } else if (lbk > -dy_tols->inf) { setflg(statk,vstatNBLB) ; valk = lbk ; } else { setflg(statk,vstatNBFR) ; valk = 0 ; } comflg(dy_status[k],statk) ; dy_x[k] = valk ; } # ifdef DYLP_PARANOIA /* If we're paranoid, run a status check while we're at it. This << must >> follow the code that forces superbasics. dy_chkstatus won't tolerate BLLB or BUUB in phase II, and we're here because of loss of feasbility, hence we need to show phase I. But dy_chkstatus won't tolerate SB in phase I, so we have to get rid of them before we check. */ if (dy_chkstatus(k) == FALSE) return (FALSE) ; # endif } /* Did we do anything? If so, use dy_accchk to do a primal feasibility check, which will ensure that the values in dy_lp are accurate. */ if (supercnt > 0) { checks = ladPRIMFEAS|ladPFQUIET ; if (dy_accchk(&checks) != dyrOK) return (FALSE) ; } return (TRUE) ; } static dyret_enum preoptimality (dyret_enum lpretval, flags *result) /* This routine does the prep work so that we can have confidence in a report of optimality, infeasibility (phase I only), or unboundedness (phase II only) by the primal simplex routines. It clears the pivot reject list, backs out any restricted subproblems, refactors, recalculates the primal and (phase II only) dual variables, and performs an accuracy and feasibility check. Parameters: lpretval: return code assigned by primal1 or primal2 result: (o) loaded with the result flags from dy_accchk Returns: dyrOK: if all goes smoothly dyrPATCHED: if the only bump is that the basis was patched by dy_factor dyrLOSTPFEAS: if the primal feasibility check by dy_accchk fails dyrLOSTDFEAS: if the dual feasibility check by dy_accchk fails (phase II only) dyrFATAL: if anything else goes wrong Also can relay error codes from dy_accchk (dyrACCCHK, and various basis factoring errors). Loss of primal feasibility dominates loss of dual feasibility. */ { flags checkflags ; dyret_enum retval ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "preoptimality" ; # endif # ifndef DYLP_NDEBUG int print ; # endif # ifdef DYLP_PARANOIA if (!(lpretval == dyrOPTIMAL || lpretval == dyrINFEAS || lpretval == dyrPUNT || lpretval == dyrUNBOUND)) { errmsg(4,rtnnme,"lp return code",dy_prtdyret(lpretval)) ; return (dyrFATAL) ; } # endif # ifndef DYLP_NDEBUG if (dy_lp->phase == dyPRIMAL1) print = dy_opts->print.phase1 ; else print = dy_opts->print.phase2 ; if (print >= 4) dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: validating %s at iteration (%s)%d.", rtnnme,dy_prtdyret(lpretval), dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; # endif /* A little prep work. First, we don't want dy_accchk to take heroic measures in the event of loss of primal or dual feasibility, so suppress that. In phase I, because we're continually playing games with the objective function, and we've defined optimality to be primal feasibility, it's possible that we won't have dual feasibility when we come here reporting optimality. Also, if we go unbounded in phase I, we may not be primal or dual feasible. If this looks to be straightforward optimality and we've just refactored, don't request an initial refactor. */ *result = 0 ; checkflags = 0 ; setflg(checkflags,ladFACTOR|ladPRIMALCHK|ladPRIMFEAS|ladPFQUIET| ladDUALCHK|ladDUALFEAS|ladDFQUIET) ; if (lpretval == dyrOPTIMAL && dy_lp->basis.etas == 0) clrflg(checkflags,ladFACTOR) ; /* Start with the easy stuff -- clear the pivot reject list and back out any restricted subproblems. If degenout notes accuracy loss, request a refactor. */ # ifndef DYLP_NDEBUG if (print >= 4) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tclearing pivot rejection and antidegeneracy machinery ... ") ; # endif if (dy_clrpivrej(NULL) != TRUE) return (dyrFATAL) ; if (dy_lp->degen > 0) { if (dy_degenout(0) == dyrREQCHK) setflg(checkflags,ladFACTOR) ; } /* And now the accuracy checks. Failure here is hard failure --- dy_accchk is very persistent, as is dy_factor, and any problems would have been fixed if possible. */ # ifndef DYLP_NDEBUG if (print >= 4) dyio_outfmt(dy_logchn,dy_gtxecho,"done.\n\t%schecking accuracy ... ", flgon(checkflags,ladFACTOR)?"refactoring and ":"") ; # endif retval = dy_accchk(&checkflags) ; *result = checkflags ; if (!(retval == dyrOK || retval == dyrPATCHED)) { # ifndef DYLP_NDEBUG if (print >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"%sfailed.",(print >= 5)?"\n\t":" ") ; } # endif return (retval) ; } else if (flgon(checkflags,ladPRIMALCHK|ladDUALCHK)) { # ifndef DYLP_NDEBUG if (print >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"%sfailed",(print >= 5)?"\n\t":" ") ; if (flgon(checkflags,ladPRIMALCHK)) dyio_outfmt(dy_logchn,dy_gtxecho," primal") ; if (flgon(checkflags,ladDUALCHK)) dyio_outfmt(dy_logchn,dy_gtxecho," dual") ; dyio_outfmt(dy_logchn,dy_gtxecho," check(s).") ; } # endif retval = dyrACCCHK ; } else if (flgon(checkflags,ladPRIMFEAS|ladDUALFEAS)) { # ifndef DYLP_NDEBUG if (print >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"%slost",(print >= 5)?"\n\t":" ") ; if (flgon(checkflags,ladPRIMALCHK)) dyio_outfmt(dy_logchn,dy_gtxecho," primal") ; if (flgon(checkflags,ladDUALCHK)) dyio_outfmt(dy_logchn,dy_gtxecho," dual") ; dyio_outfmt(dy_logchn,dy_gtxecho," feasibility.") ; } # endif if (flgon(checkflags,ladPRIMFEAS)) retval = dyrLOSTPFEAS ; else retval = dyrLOSTDFEAS ; } # ifndef DYLP_NDEBUG else { if (print >= 4) dyio_outfmt(dy_logchn,dy_gtxecho,"%s%s.",(print >= 5)?"\n\t":" ", (retval == dyrOK)?"done":"patched") ; } # endif return (retval) ; } bool dy_swapobjs (dyphase_enum phase) /* This routine handles the allocation, exchange, and deallocation of phase I and phase II objective vectors. The actions are as follows, depending on the value of the phase parameter: dyPRIMAL1: We're headed into primal phase I. If the vectors for infvars and the phase I objective are not yet allocated, do it, and attach p1obj and p2obj as additional pointers to the phase I and II objectives, respectively. The actual swap consists of detaching dy_sys->obj as a pointer to the phase II objective and reattaching it as a pointer to the phase I objective. It may be that the phase I objective is already installed; in that case we have only to check infvars for size. dyPRIMAL2: We're headed into primal phase II. Detach dy_sys->obj as a pointer to the phase I objective, and reattach it as a pointer to the phase II objective. dyDONE: Detach the lot and free infvars and p1obj. Parameters: phase: dyPRIMAL1 to swap the phase I objective into place, dyPRIMAL2 to swap the phase II objective into place, dyDONE to clean up. Returns: TRUE if the swap goes ok, FALSE otherwise */ { const char *rtnnme = "dy_swapobjs" ; # ifdef DYLP_PARANOIA /* A little paranoia. The routine will do the right thing (i.e., nothing) if called to install the P2 objective and it's already in place. But chances are we're confused if it happens. There are valid reasons to want to reinitialize the P1 objective, so no warning is issued. */ if (!(phase == dyPRIMAL1 || phase == dyPRIMAL2 || phase == dyDONE)) { errmsg(4,rtnnme,"direction",dy_prtlpphase(phase,FALSE)) ; return (FALSE) ; } if (dy_lp->p1obj.installed == FALSE && phase == dyPRIMAL2) { dywarn(399,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters,"II") ; } # endif /* We're here to install the phase I objective. If it's already installed, all we need to do is check infvars for size. If it's not installed, the first thing to check is whether we need to (re)allocate vectors for infvars and the phase I objective and attach pointers p1obj and p2obj. Then do the routine part of the swap, detaching dy_sys->obj as a pointer to the phase II objective and reattaching it as a pointer to the phase I objective. */ if (phase == dyPRIMAL1) { if (dy_lp->p1obj.installed == TRUE) { if (dy_lp->infeascnt > dy_lp->p1obj.infvars_sze) { dy_lp->p1obj.infvars_sze = dy_lp->infeascnt ; dy_lp->p1obj.infvars = (int *) REALLOC(dy_lp->p1obj.infvars,dy_lp->infeascnt*sizeof(int)) ; } } else { if (dy_lp->p1obj.p1obj == NULL) { dy_lp->p1obj.infvars = (int *) MALLOC(dy_lp->infeascnt*sizeof(int)) ; dy_lp->p1obj.infvars_sze = dy_lp->infeascnt ; dy_lp->p1obj.p1obj = NULL ; if (consys_attach(dy_sys,CONSYS_OBJ,sizeof(double), (void **) &dy_lp->p1obj.p1obj) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"&dy_lp->p1obj.p1obj") ; return (FALSE) ; } dy_lp->p1obj.p2obj = dy_sys->obj ; if (consys_attach(dy_sys,CONSYS_OBJ,sizeof(double), (void **) &dy_lp->p1obj.p2obj) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"&dy_lp->p1obj.p2obj") ; return (FALSE) ; } } else { if (dy_lp->infeascnt > dy_lp->p1obj.infvars_sze) { dy_lp->p1obj.infvars_sze = dy_lp->infeascnt ; dy_lp->p1obj.infvars = (int *) REALLOC(dy_lp->p1obj.infvars,dy_lp->infeascnt*sizeof(int)) ; } } if (consys_detach(dy_sys,(void **) &dy_sys->obj,FALSE) == FALSE) { errmsg(105,rtnnme,dy_sys->nme,"&dy_sys->obj (P2)") ; return (FALSE) ; } dy_sys->obj = dy_lp->p1obj.p1obj ; if (consys_attach(dy_sys,CONSYS_OBJ, sizeof(double),(void **) &dy_sys->obj) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"&dy_sys->obj (P1)") ; return (FALSE) ; } dy_lp->p1obj.installed = TRUE ; } } /* We're here to remove the phase I objective and reattach the phase II objective. Detach dy_sys->obj as a pointer to the phase I objective and reattach it as a pointer to the phase II objective. */ else if (phase == dyPRIMAL2) { if (dy_lp->p1obj.installed == FALSE) return (TRUE) ; if (consys_detach(dy_sys,(void **) &dy_sys->obj,FALSE) == FALSE) { errmsg(105,rtnnme,dy_sys->nme,"&dy_sys->obj (P1)") ; return (FALSE) ; } dy_sys->obj = dy_lp->p1obj.p2obj ; if (consys_attach(dy_sys,CONSYS_OBJ, sizeof(double),(void **) &dy_sys->obj) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"&dy_sys->obj (P2)") ; return (FALSE) ; } ; dy_lp->p1obj.installed = FALSE ; } /* We're finishing up and releasing the dylp data structures. We need to free infvars, and whichever objective isn't currently installed (the other will be freed when the dy_sys constraint system is freed). */ else { if (dy_lp->p1obj.infvars != NULL) FREE(dy_lp->p1obj.infvars) ; if (dy_lp->p1obj.installed == TRUE) { if (dy_lp->p1obj.p2obj != NULL) FREE(dy_lp->p1obj.p2obj) ; } else { if (dy_lp->p1obj.p1obj != NULL) FREE(dy_lp->p1obj.p1obj) ; } } return (TRUE) ; } bool dy_initp1obj (void) /* This routine is responsible for initialising the phase I objective. dy_swapobjs takes care of making sure the associated structures are ok. Initialisation consists of scanning the basis to fill in infvars with the indices of infeasible variables, and setting the appropriate values in the phase I objective. Once the objective function is established, we'll call dy_calcduals and dy_calccbar to calculate the duals and reduced costs. Parameters: none Returns: TRUE if the initialisation goes through without problem, FALSE otherwise. */ { int *infvars,infcnt,xipos,xindx ; double *p1obj ; const char *rtnnme = "dy_initp1obj" ; # ifndef DYLP_NDEBUG if (dy_opts->print.phase1 >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n initialising phase 1 objective and reduced costs.") ; } # endif /* Call dy_swapobjs to have a look at the infvars and phase I objective vectors. They'll be (re)allocated as necessary, and the phase I objective will be installed in place of the phase II objective. Note that whenever we're in here, dy_lp->infeascnt should be correct, but we can't confirm that with a paranoid check until after we scan the basis. */ if (dy_swapobjs(dyPRIMAL1) == FALSE) { errmsg(318,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"install/resize") ; return (FALSE) ; } /* Clear the phase I objective to 0. We can track the changes under most circumstances, but arbitrary changes due to recovery from loss of accuracy or basis singularity would defeat us. */ infvars = dy_lp->p1obj.infvars ; p1obj = dy_lp->p1obj.p1obj ; infcnt = 0 ; memset(p1obj,0,(dy_sys->varcnt+1)*sizeof(double)) ; /* Scan the basis and record the indices of infeasible variables. For each variable, set the objective coefficient to -1 for variables above their upper bound and +1 for variables below their lower bound. */ for (xipos = 1 ; xipos <= dy_sys->concnt ; xipos++) { xindx = dy_basis[xipos] ; if (flgoff(dy_status[xindx],vstatBLLB|vstatBUUB)) continue ; infvars[infcnt++] = xindx ; if (flgon(dy_status[xindx],vstatBLLB)) { dy_sys->obj[xindx] = -1.0 ; # ifndef DYLP_NDEBUG if (dy_opts->print.phase1 >= 7) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t%16s (%3d) = %16.8g < lb = %16.8g, infeas = %16.8g", consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx, dy_xbasic[xipos],dy_sys->vlb[xindx], dy_sys->vlb[xindx]-dy_xbasic[xipos]) ; } # endif } else { dy_sys->obj[xindx] = 1.0 ; # ifndef DYLP_NDEBUG if (dy_opts->print.phase1 >= 7) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t%16s (%3d) = %16.8g > ub = %16.8g, infeas = %16.8g", consys_nme(dy_sys,'v',xindx,FALSE,NULL),xindx, dy_xbasic[xipos],dy_sys->vub[xindx], dy_xbasic[xipos]-dy_sys->vub[xindx]) ; } # endif } } dy_lp->p1obj.infcnt = infcnt ; # ifdef DYLP_PARANOIA /* Any time that we're in here, dy_lp->infeascnt should be accurate --- either we're just starting up, or we've kicked back here after discovering a lack of feasibility. In the latter case, a primal feasibility check should have run. If we don't match, there's a problem. */ if (infcnt != dy_lp->infeascnt) { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (dy_opts->print.phase1 >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n saw %d infeasible variables, tot. infeas. %g.", infcnt,dy_lp->infeas) ; } # endif /* Calculate the duals and reduced costs for the objective, and the objective itself. */ dy_calcduals() ; if (dy_calccbar() == FALSE) { errmsg(384,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; return (FALSE) ; } dy_lp->z = dy_calcobj() ; # ifndef DYLP_NDEBUG if (dy_opts->print.phase1 >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t recalculated duals and reduced costs.") ; } # endif # ifdef DYLP_STATISTICS /* Keep track of the number of pivots between changes in feasibility status. */ if (dy_stats != NULL) { int pivcnt ; dy_stats->infeas.chgcnt2++ ; if (dy_stats->infeas.maxcnt < infcnt) dy_stats->infeas.maxcnt = infcnt ; pivcnt = dy_lp->tot.pivs-dy_stats->infeas.prevpiv ; dy_stats->infeas.totpivs += pivcnt ; if (pivcnt > dy_stats->infeas.maxpivs) dy_stats->infeas.maxpivs = pivcnt ; dy_stats->infeas.prevpiv = dy_lp->tot.pivs ; } # endif return (TRUE) ; } static dyret_enum tweakp1obj (bool *reselect, int candxj) /* This routine is responsible for updating the phase I objective function as variables gain feasibility. If no variable gains feasibility, there's nothing to do --- the objective is unchanged. If only a single variable has gained feasibility with this pivot, the best case involves two variables, such that x left the basis and gained feasibility as x entered. In this case, a little thought brings the realisation that since x is now nonbasic, we can change its objective coefficient without disturbing the duals (y = cinv(B)). Since the reduced costs are cbar = c-yA, we only have to adjust cbar by -c, before setting c to 0. This doesn't entirely get us out of trouble (it could be that x has been selected to reenter, and when we rewrite cbar we make it unsuitable). If a variable gains feasibility and remains basic, all hell breaks loose. It looks to me like a reasonably efficient update operation is possible, but it's going to be complex. For the nonce, just recalculate all the duals and reduced costs. At least the column norms don't change. Fixed variables that move from BLLB to BUUB fall in the `all hell breaks loose' category. Parameters: reselect: (o) set to TRUE if the reduced costs have been recalculated and a new entering variable should be selected, set to FALSE otherwise candxj: the candidate entering variable x Returns: dyrINFEAS if the problem is still infeasible dyrOPTIMAL if the problem is feasible (thus optimal w.r.t. the phase I objective) dyrFATAL for errors. */ { int *infvars,ndx,maxndx,newfeas,xkndx ; flags statk ; bool recalccbar ; const char *rtnnme = "tweakp1obj" ; # ifndef DYLP_NDEBUG int xkpos ; double infeas ; # endif # ifdef DYLP_PARANOIA double chkz ; # endif # ifndef DYLP_NDEBUG infeas = 0 ; if (dy_opts->print.phase1 >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t checking feasibility & tweaking phase 1 objective.") ; } # endif # ifdef DYLP_PARANOIA chkz = dy_calcobj() ; if (!withintol(chkz,dy_lp->z,fabs(1000*dy_tols->cost*(1+fabs(chkz))))) { dywarn(405,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_lp->z,chkz,dy_lp->z-chkz,fabs(1000*dy_tols->cost*(1+chkz))) ; } # endif /* Walk the list of infeasible variables, looking for changes in status and adjusting the objective and reduced cost accordingly. Each newly feasible variable is compressed out of infvars. If the only change from infeasible to feasible is the leaving variable x, we can make the adjustment here in the loop. Otherwise, we just note that a variable has gained feasibility or changed infeasibility and remained basic, and recalculate after we leave the loop. */ newfeas = 0 ; maxndx = dy_lp->p1obj.infcnt-1 ; *reselect = FALSE ; recalccbar = FALSE ; infvars = dy_lp->p1obj.infvars ; for (ndx = 0 ; ndx <= maxndx ; ) { xkndx = infvars[ndx] ; statk = getflg(dy_status[xkndx],vstatSTATUS) ; # ifndef DYLP_NDEBUG if (dy_opts->print.phase1 >= 5 && flgon(statk,vstatBLLB|vstatBUUB)) { xkpos = dy_var2basis[xkndx] ; if (dy_opts->print.phase1 >= 7) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t %4s %16s (%3d) = %16.8g", dy_prtvstat(statk),consys_nme(dy_sys,'v',xkndx,FALSE,NULL), xkndx,dy_xbasic[xkpos]) ; } if (flgon(statk,vstatBLLB)) { infeas += dy_sys->vlb[xkndx]-dy_xbasic[xkpos] ; if (dy_opts->print.phase1 >= 7) { dyio_outfmt(dy_logchn,dy_gtxecho," < lb = %16.8g, inf = %16.8g", dy_sys->vlb[xkndx], dy_sys->vlb[xkndx]-dy_xbasic[xkpos]) ; } } else { infeas += dy_xbasic[xkpos]-dy_sys->vub[xkndx] ; if (dy_opts->print.phase1 >= 7) { dyio_outfmt(dy_logchn,dy_gtxecho," > ub = %16.8g, inf = %16.8g", dy_sys->vub[xkndx], dy_xbasic[xkpos]-dy_sys->vub[xkndx]) ; } } } # endif if (flgon(statk,vstatBLLB)) { ndx++ ; if (dy_sys->obj[xkndx] != -1.0) { dy_sys->obj[xkndx] = -1.0 ; recalccbar = TRUE ; } } else if (flgon(statk,vstatBUUB)) { ndx++ ; if (dy_sys->obj[xkndx] != 1.0) { dy_sys->obj[xkndx] = 1.0 ; recalccbar = TRUE ; } } else { newfeas++ ; infvars[ndx] = infvars[maxndx--] ; if (flgon(statk,vstatNONBASIC|vstatNBFR)) { dy_cbar[xkndx] -= dy_sys->obj[xkndx] ; setcleanzero(dy_cbar[xkndx],dy_tols->zero) ; dy_lp->z -= dy_sys->obj[xkndx]*dy_x[xkndx] ; if (xkndx == candxj) *reselect = TRUE ; } else { recalccbar = TRUE ; } dy_sys->obj[xkndx] = 0.0 ; } } dy_lp->p1obj.infcnt = maxndx+1 ; # ifndef DYLP_NDEBUG if (dy_opts->print.phase1 >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t saw %d infeasible variables, down %d, tot. infeas. %g.", dy_lp->p1obj.infcnt,newfeas,infeas) ; } if (dy_opts->print.phase1 >= 2 && *reselect == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n reselect; newly feasible %s (%d) selected to enter.", consys_nme(dy_sys,'v',candxj,FALSE,NULL),candxj) ; } # endif # ifdef DYLP_PARANOIA /* Are we feeling paranoid? Do a scan to make sure that objective coefficients are 0 for all variables that are in bound. (At this point, there may be a few newly infeasible variables with coefficients of 0, when they should be +/- 1.0, hence we don't check for those.) In the simple case where the leaving variable is the only variable to gain feasibility, we can test the iteratively updated objective. */ for (xkndx = 1 ; xkndx <= dy_sys->varcnt ; xkndx++) { statk = dy_status[xkndx] ; if (flgoff(statk,vstatBLLB|vstatBUUB) && dy_sys->obj[xkndx] != 0.0) { errmsg(389,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx, dy_prtvstat(statk),xkndx,dy_sys->obj[xkndx]) ; return (dyrFATAL) ; } } if (newfeas == 1 && recalccbar == FALSE) { chkz = dy_calcobj() ; if (!withintol(chkz,dy_lp->z,fabs(1000*dy_tols->cost*(1+fabs(chkz))))) { dywarn(405,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),-dy_lp->tot.iters, dy_lp->z,chkz,dy_lp->z-chkz, fabs(1000*dy_tols->cost*(1+chkz))) ; } } # endif # ifdef DYLP_STATISTICS /* Keep track of the number of pivots between changes in feasibility status which require recalculation of the duals and reduced costs. */ if (dy_stats != NULL && newfeas != 0) { int pivcnt ; if (recalccbar == FALSE) dy_stats->infeas.chgcnt1++ ; else dy_stats->infeas.chgcnt2++ ; pivcnt = dy_lp->tot.pivs-dy_stats->infeas.prevpiv ; dy_stats->infeas.totpivs += pivcnt ; if (pivcnt > dy_stats->infeas.maxpivs) dy_stats->infeas.maxpivs = pivcnt ; dy_stats->infeas.prevpiv = dy_lp->tot.pivs ; } # endif /* If dy_lp->p1obj.infcnt == 0, then we've gained feasibility (at least with respect to the variables in infvars; see notes at the head of the file). Return with an indication of optimality. (Note that we might not really be optimal w.r.t. the phase I objective, but that's not important.) We'll clear dy_y and cbar, just to keep the math straight. */ if (dy_lp->p1obj.infcnt == 0) { memset(dy_y,0,(dy_sys->concnt+1)*sizeof(double)) ; memset(dy_cbar,0,(dy_sys->varcnt+1)*sizeof(double)) ; return (dyrOPTIMAL) ; } /* If recalccbar is TRUE we need to redo the duals, reduced costs, and objective. And we'll need to reselect the entering variable. Sigh. */ if (recalccbar == TRUE) { dy_calcduals() ; if (dy_calccbar() == FALSE) { errmsg(384,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; return (dyrFATAL) ; } dy_lp->z = dy_calcobj() ; *reselect = TRUE ; # ifndef DYLP_NDEBUG if (dy_opts->print.phase1 >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\trecalculated duals and reduced costs.", maxndx,infeas) ; } # endif } /* That's it. Return an indication that we're still infeasible. */ return (dyrINFEAS) ; } static dyret_enum verifyp1obj (void) /* This routine attempts to verify that the phase I objective is indeed correct. The main thing we're looking for is unexpected loss or gain of feasibility due to accumulated numeric inaccuracy. We need to do this when we have an indication of optimality in phase I, because of the problems outlined at the head of the file. If new variables become infeasible after infvars is loaded, tweakp1obj will not assign the proper objective coefficients. If the objective is all 0's, there's no motivation to reduce infeasibility, eh? The quick test is equality of dy_lp->p1obj.infcnt and dy_lp->infeascnt. If that fails, we have a problem. Even if we have equal counts, we still have to check the individual variables, to make sure we haven't had a pair of variables swap roles, or had a fixed variable move from BLLB to BUUB. If the objective doesn't verify, it's an indication that we're having accuracy problems. Boost the pivot selection tolerances and do a refactor on the way out. Parameters: none Returns: dyrOK if the objective verifies, dyrRESELECT if the objective didn't verify, and dyrFATAL, or error code from dy_accchk, if something goes wrong. */ { int *infvars,ndx,xkndx ; double ck ; flags statk,checks ; dyret_enum retval ; bool err ; retval = dyrINV ; /* Use dy_accchk to do a primal feasibility check, which will ensure that the values in dy_lp are accurate. Because we're only asking for a recalculation, dy_accchk can return only dyrOK or dyrFATAL. */ checks = 0 ; setflg(checks,ladPRIMFEAS|ladPFQUIET) ; retval = dy_accchk(&checks) ; if (retval != dyrOK) return (retval) ; /* First compare dy_lp->p1obj.infcnt to dy_lp->infeascnt. If they're unequal, it's a cinch the objective is incorrect. Otherwise, open up a loop to step through infvars and check each entry. If we're debugging, we'll check them all, but if we're not we break on the first inconsistency. */ if (dy_lp->p1obj.infcnt != dy_lp->infeascnt) { retval = dyrRESELECT ; } else { retval = dyrOK ; err = FALSE ; infvars = dy_lp->p1obj.infvars ; for (ndx = 0 ; ndx < dy_lp->p1obj.infcnt ; ndx++) { xkndx = infvars[ndx] ; statk = getflg(dy_status[xkndx],vstatSTATUS) ; ck = dy_sys->obj[xkndx] ; switch (statk) { case vstatBLLB: { if (ck != -1.0) err = TRUE ; break ; } case vstatBUUB: { if (ck != 1.0) err = TRUE ; break ; } default: { err = TRUE ; break ; } } if (err == TRUE) { retval = dyrRESELECT ; # ifdef DYLP_NDEBUG break ; # else err = FALSE ; if (dy_opts->print.phase1 >= 5) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tphase I c<%d> = %g inconsistent for %s %s (%d) = %g;", xkndx,dy_sys->obj[xkndx],dy_prtvstat(statk), consys_nme(dy_sys,'v',xkndx,FALSE,NULL),xkndx,dy_x[xkndx]) ; dyio_outfmt(dy_logchn,dy_gtxecho," lb = %g, ub = %g", dy_sys->vlb[xkndx],dy_sys->vub[xkndx]) ; if (!withinbnds(dy_sys->vlb[xkndx],dy_x[xkndx],dy_sys->vub[xkndx])) { if (flgon(statk,vstatBLLB)) { dyio_outfmt(dy_logchn,dy_gtxecho,", infeas = %g.", dy_sys->vlb[xkndx]-dy_x[xkndx]) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho,", infeas = %g.", dy_x[xkndx]-dy_sys->vub[xkndx]) ; } } else { dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } } # endif } } } /* If the objective doesn't check, it indicates that we've lost numerical accuracy somewhere along the way. Boost the pivot selection tolerances and refactor now, for two reasons: We'll get back accuracy, if we can, and (more subtle) we'll clean up any inconsistency between value and status before initp1obj complains about it. */ if (retval == dyrRESELECT) { (void) dy_setpivparms(+1,+1) ; checks = 0 ; setflg(checks, ladFACTOR|ladPRIMFEAS|ladPFQUIET) ; retval = dy_accchk(&checks) ; if (retval == dyrOK || retval == dyrPATCHED) retval = dyrRESELECT ; } return (retval) ; } static dyret_enum primal1 (void) /* Phase 1 of the primal simplex. There are two nested loops, an inner pivoting loop and an outer control loop. The pivoting loop is a three step sequence: pivot (dy_primalpivot), deal with any problems & routine maintenance (dy_duenna), then check for primal feasibility and update the objective (tweakp1obj). As a side effect of the pivot, dy_primalpivot returns the index of the preferred candidate, xjcand, to enter on the next pivot. (Except when the pivot is a bound-to-bound swing by x; in this case, there's no pricing update, hence no selection of a candidate x, and we have to do it here.) The biggest difference between phase I and phase II is that in phase I we tweak the objective each time a variable gains feasibility. There's a lot of action hidden in dy_initp1obj and tweakp1obj. Exits from the pivoting loop fall into two basic groups: * We need to select a new entering x, but there's no other problem. * We have something that looks like a termination condition --- optimality, infeasibility, unboundedness, a punt, or some fatal problem. When we need to select a new x, we circle back to the top of the control loop where dy_primalin is called to select a new incoming variable. As long as an incoming variable can be selected, and nothing fatal goes wrong, the inner pivoting loop resumes. When we suspect a termination condition, things get more complex. In phase I, optimality is defined to be primal feasibility and is detected by tweakp1obj. Inability to find a candidate for entry (a.k.a. dual feasbility, the normal condition for optimality, used by dy_primalin and dy_primalpivot) actually equates to infeasibility. A punt is just (infeasible) optimality with the possibility we could make further progress if we relaxed the pivot selection tolerance. Unboundedness remains unboundedness. Because life is not fair (see remarks at head of file), when we suspect feasibility the first thing we need to do is check that we're really considering all infeasible variables. If necessary, we reset the phase I objective and resume pivoting. Otherwise, it's the normal sequence for termination: call preoptimality to refactor and do accuracy and feasibility checks, then react accordingly. Parameters: none Returns: most of the dyret_enum codes. */ { dyret_enum lpretval,scanresult,pivresult,duennaresult,preopresult, p1objresult ; int startcol,scan,nextcol,candxj,xjndx,indir,xindx,outdir,optcnt ; double cbarj,abarij,delta ; bool do_pivots,reselect ; flags xjstatus,checks ; const char *rtnnme = "primal1" ; # ifndef DYLP_NDEBUG bool uxpfeas,uxnpfeas,uxdfeas,uxndfeas ; dyret_enum tmpretval ; # endif # ifdef DYLP_PARANOIA if (dy_lp->degen != 0) { errmsg(317,rtnnme,dy_sys->nme,dy_lp->degen) ; return (dyrFATAL) ; } if (dy_lp->p1.iters != 0) { errmsg(5,rtnnme,"phase 1 iteration count",dy_lp->p1.iters) ; return (dyrFATAL) ; } if (dy_lp->infeascnt <= 0) { errmsg(319,rtnnme,dy_sys->nme) ; return (dyrFATAL) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->infeas.prevpiv = dy_lp->tot.pivs ; # endif dy_lp->p1.pivs = 0 ; dy_lp->pivok = FALSE ; dy_lp->prev_pivok = FALSE ; lpretval = dyrINV ; if (dy_clrpivrej(NULL) != TRUE) return (dyrFATAL) ; /* Initialise the phase I objective, if it's not already in place. */ if (dy_lp->p1obj.installed == FALSE) { if (dy_initp1obj() == FALSE) { errmsg(318,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"initialise") ; return (dyrFATAL) ; } } /* Open the control loop. The purpose of this outer loop is to allow easy recovery from false indications of optimality, infeasibility, or unboundedness, as well as problems involving pivot selection. All the recovery actions happen at the bottom of the loop, after we fall out of the pivoting loop. Initialise a few variables and get going. */ scan = dy_opts->scan ; nextcol = 1 ; optcnt = 0 ; while (lpretval == dyrINV) { /* Scan to select an incoming variable x. If primalin cannot find a candidate, we're infeasible (or perhaps we've punted). We're not primal feasible (else tweakp1obj would have seen it). If we've punted, call dy_dealWithPunt to free up any potential candidates on the pivot rejection list and iterate to try again. If the problem context is cxLOAD, this is all we need to do. Skip to the end game. */ startcol = nextcol ; scanresult = dy_primalin(startcol,scan,&candxj,&nextcol) ; if (dy_opts->context == cxLOAD) { do_pivots = FALSE ; lpretval = scanresult ; } else { switch (scanresult) { case dyrOK: { do_pivots = TRUE ; break ; } case dyrPUNT: { scanresult = dy_dealWithPunt() ; if (scanresult == dyrRESELECT) { continue ; } else { do_pivots = FALSE ; lpretval = scanresult ; } break ; } case dyrOPTIMAL: { do_pivots = FALSE ; lpretval = dyrINFEAS ; break ; } default: { do_pivots = FALSE ; lpretval = scanresult ; break ; } } } /* Open the pivoting loop. While we have a candidate x for entry, we do a three-step: attempt the pivot with x (dy_primalpivot), then check that everything went off ok (dy_duenna), and finally check for feasibility and revise the objective. As part of updating the PSE pricing information, a new x will be selected (but note that changes in feasibility status may render this choice obsolete, forcing a reselect). There are two types of escapes from this loop: * We need to (re)select a candidate x for some reason. * We have a suspected termination condition --- optimality, infeasibility (or punt), unboundedness, or fatal error. The first action in the loop is to decide which way the incoming variable is moving, based on the variable's status and the sign of cbar. Arguably this could move into dy_primalpivot. */ for (xjndx = candxj ; do_pivots == TRUE ; xjndx = candxj) { # ifdef DYLP_PARANOIA if (xjndx <= 0) { errmsg(386,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"entering") ; return (dyrFATAL) ; } # endif indir = 0 ; xjstatus = dy_status[xjndx] ; cbarj = dy_cbar[xjndx] ; if (cbarj <= 0 && flgon(xjstatus,vstatNBLB|vstatSB|vstatNBFR)) { indir = 1 ; } else if (cbarj > 0 && flgon(xjstatus,vstatNBUB|vstatSB|vstatNBFR)) { indir = -1 ; } # ifdef DYLP_PARANOIA else { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } # endif # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: %s (%d), entering %s from %s, price = %g ... ", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',xjndx,TRUE,NULL),xjndx, (indir < 0)?"decreasing":"increasing",dy_prtvstat(xjstatus), cbarj/sqrt(dy_gamma[xjndx])) ; } # endif /* Time to get down to business and attempt the pivot. dy_primalpivot does all the heavy lifting --- the actual pivot, plus updates of data structures and variables. Under normal conditions, we're looking for one of dyrOK (vanilla pivot) or dyrDEGEN (degenerate pivot), indicating a successful pivot and selection of a new candidate x. dyrOPTIMAL or dyrPUNT are less common, and indicate a successful pivot but failure to find a new x. Other possibilities are dyrUNBOUND, dyrREQCHK (suspected accuracy problems), dyrMADPIV (pivot rejection), and various errors, including dyrLOSTPFEAS, dyrSINGULAR, dyrBSPACE, and dyrFATAL. */ pivresult = dy_primalpivot(xjndx,indir, &xindx,&outdir,&abarij,&delta,&candxj) ; # ifndef DYLP_NDEBUG if (dy_opts->print.phase1 >= 4) dy_logpivot(pivresult,xjndx,indir,cbarj,xindx,outdir,abarij,delta) ; # endif /* La Duenna makes sure the proprieties are observed and deals with any scandals. In the end, these are the cases to consider: * dyrOK: The pivot went through without a problem, or whatever went wrong has been dealt with transparently from La Duenna's point of view. Call tweakp1obj to tweak the objective. We might discover we're feasible, in which case call it optimal and try for termination. If tweakp1obj ends up resetting the reduced costs, escape to reselect, otherwise we'll go to the next pivot with the candidate selected by pseupdate. There are a few circumstances where no candidate will be selected (the pivot was a nonbasic swing, or primalout returned REQCHK), and these also require a reselect. dyrOPTIMAL, dyrPUNT are much like dyrOK (i.e., the pivot went through) but we also think we're optimal (i.e., we can't find an entering variable). If tweakp1obj says we're feasible, try for optimal termination, but if it says we're still infeasible, try for infeasible termination. dyrPUNT indicates there are potential pivots flagged with the NOPIVOT qualifier, but it's pointless to try them again. * dyrRESELECT: Whatever happened requires that we select a new entering variable. Most commonly, this indicates that primalout couldn't find a numerically stable pivot. Less commonly, new pivot candidates have been released from the pivot rejection list in response to a punt. Occasionally, something more exotic has happened (e.g., the basis has been patched due to singularity). Escape to the outer loop to reselect. * dyrUNBOUND: We'll kick this back to the caller if preoptimality confirms the condition. We need additional constraints. Remember the unbounded column. * dyrSWING: The primal variables are moving too far, too fast. dyrSWING is a recommendation that we pop out of simplex and try to add constraints. But we won't do this unless we've completed a minimum number of basis changes (currently hardwired to 10). * anything else: These are problems too severe to handle here; they, too, get kicked back to the calling routine. The main reason for enumerating return values here is to make sure we catch a code that was somehow overlooked --- it'll trigger an error message. In general, if we're going to continue the pivoting loop, neither do_pivots or lpretval should be changed. If we're just going to escape to the outer loop for reselection, we set do_pivots to FALSE and leave lpretval at dyrINV. To attempt to end phase I, lpretval must be properly set as well. */ duennaresult = dy_duenna(pivresult,xjndx,xindx,candxj,-1) ; switch (duennaresult) { case dyrOK: case dyrOPTIMAL: case dyrPUNT: { p1objresult = tweakp1obj(&reselect,candxj) ; switch (p1objresult) { case dyrINFEAS: { if (duennaresult == dyrOK) { if (candxj <= 0) reselect = TRUE ; if (reselect == TRUE || xindx == xjndx) do_pivots = FALSE ; } else { do_pivots = FALSE ; if (duennaresult == dyrPUNT) lpretval = dyrPUNT ; else lpretval = dyrINFEAS ; } break ; } case dyrOPTIMAL: { lpretval = dyrOPTIMAL ; do_pivots = FALSE ; break ; } case dyrFATAL: { errmsg(318,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"tweak") ; do_pivots = FALSE ; lpretval = p1objresult ; break ; } default: { errmsg(7,rtnnme,__LINE__,"tweakp1obj code",p1objresult) ; do_pivots = FALSE ; lpretval = p1objresult ; break ; } } break ; } case dyrRESELECT: { do_pivots = FALSE ; break ; } case dyrUNBOUND: { do_pivots = FALSE ; lpretval = duennaresult ; dy_lp->ubnd.ndx = xjndx*indir ; dy_lp->ubnd.ratio = 0 ; break ; } case dyrSWING: { if (dy_lp->basis.pivs >= 10) { lpretval = duennaresult ; do_pivots = FALSE ; } break ; } case dyrACCCHK: case dyrSINGULAR: case dyrBSPACE: case dyrSTALLED: case dyrITERLIM: case dyrNUMERIC: case dyrFATAL: { do_pivots = FALSE ; lpretval = duennaresult ; break ; } default: { errmsg(7,rtnnme,__LINE__,"La Duenna return code", (int) duennaresult) ; do_pivots = FALSE ; lpretval = dyrFATAL ; break ; } } } /* End of the pivoting loop. Why are we out here? The simplest case is that we just want to reselect --- head back to the top of the loop from here. */ if (lpretval == dyrINV) continue ; /* Do we think we're optimal (feasible), infeasible, or unbounded? (I.e., we're reporting one of dyrOPTIMAL, dyrINFEAS, dyrUNBOUND, or dyrPUNT.) If so, check that we have the objective function correct. If it's out-of-date, bring it up-to-date, and head back to the top of the loop to try and reselect an entering variable. dyrSWING isn't subject to the previous checks --- we just want to pop out and try to augment the constraint system. verifyp1obj recalculates the primal variables but does not refactor unless it concludes the objective is incorrect (thus there is the potential for loss of primal feasibility in preoptimality). If all we're doing is loading a problem, avoid any further modifications (such as reinitialising the phase 1 objective). */ if (lpretval == dyrOPTIMAL || lpretval == dyrINFEAS || lpretval == dyrUNBOUND || lpretval == dyrPUNT) { p1objresult = verifyp1obj() ; if (dy_opts->context != cxLOAD) { switch (p1objresult) { case dyrOK: { break ; } case dyrRESELECT: { # ifndef DYLP_NDEBUG if (dy_opts->print.phase1 >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tfalse termination (%s) due to inconsistent objective", dy_prtdyret(lpretval)) ; dyio_outfmt(dy_logchn,dy_gtxecho, " at (%s)%d; rebuilding P1 objective.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } # endif if (dy_initp1obj() == TRUE) { lpretval = dyrINV ; continue ; } errmsg(318,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"reinitialise") ; p1objresult = dyrFATAL ; break ; } default: { p1objresult = dyrFATAL ; break ; } } } if (p1objresult == dyrFATAL) return (dyrFATAL) ; } /* To get to here, we have a termination condition and the objective has been verified. We can take useful action for dyrOPTIMAL, dyrUNBOUND, dyrINFEAS, and dyrPUNT; everything else is bounced directly back to the caller. For all, the first thing to do is call preoptimality to factor the basis and do accuracy and feasibility checks. If we get back dyrOK, dyrPATCHED, or dyrLOSTDFEAS, then we have primal feasibility and we're out of here regardless of the lpretval code. (Dual feasibility or boundedness are nice, but not required). Force a return code of dyrOPTIMAL. If we get back dyrLOSTPFEAS, it's a little more complicated. If lpretval is dyrINFEAS or dyrUNBOUND, and the primal & dual feasibility status reported by preoptimality agrees, we can return. If lpretval is dyrPUNT, there are variables on the pivot rejection list, but dy_dealWithPunt has already concluded none of them can be used. If preoptimality shows dual feasibility, none of them would help in any event, and we can return dyrINFEAS with a clear conscience. Otherwise return dyrPUNT. Anything else means that the feasibility status has taken an unexpected turn. The working hypothesis is that we need to be more careful in selecting pivots for both factoring and pivoting, which we do by tightening the current value and lower bound for the pivot selection parameters. There are a number of cases which imply unexpected gain/loss of primal or dual feasibility, based on lpretval and the results of preoptimality. Messages may be generated for these, if DYLP_NDEBUG allows it. */ if (lpretval == dyrOPTIMAL || lpretval == dyrUNBOUND || lpretval == dyrINFEAS || lpretval == dyrPUNT) { optcnt++ ; # ifndef DYLP_NDEBUG uxpfeas = FALSE ; uxnpfeas = FALSE ; uxdfeas = FALSE ; uxndfeas = FALSE ; tmpretval = lpretval ; # endif preopresult = preoptimality(lpretval,&checks) ; switch (preopresult) { case dyrOK: case dyrPATCHED: case dyrLOSTDFEAS: { # ifndef DYLP_NDEBUG if (lpretval == dyrINFEAS || lpretval == dyrPUNT || lpretval == dyrUNBOUND) uxpfeas = TRUE ; if (preopresult == dyrLOSTDFEAS) { if (lpretval == dyrINFEAS) uxndfeas = TRUE ; } else { if (lpretval == dyrPUNT || lpretval == dyrUNBOUND) uxdfeas = TRUE ; } # endif lpretval = dyrOPTIMAL ; break ; } case dyrLOSTPFEAS: { # ifndef DYLP_NDEBUG if (lpretval == dyrOPTIMAL) uxnpfeas = TRUE ; # endif if (flgoff(checks,ladDUALFEAS)) { # ifndef DYLP_NDEBUG if (lpretval == dyrUNBOUND || lpretval == dyrPUNT) uxdfeas = TRUE ; # endif if (!(lpretval == dyrINFEAS || lpretval == dyrPUNT)) { (void) dy_setpivparms(+1,+1) ; lpretval = dyrINV ; } else { lpretval = dyrINFEAS ; } } else { if (lpretval == dyrUNBOUND || lpretval == dyrPUNT) { /* no action required */ } else { # ifndef DYLP_NDEBUG if (lpretval == dyrINFEAS) uxndfeas = TRUE ; # endif (void) dy_setpivparms(+1,+1) ; lpretval = dyrINV ; } } break ; } default: { lpretval = preopresult ; break ; } } /* Ok, we've done the necessary processing. There are two things to deal with now. If DYLP_NDEBUG permits, check for warnings about unexpected primal/dual (in)feasibility. If we're going to repeat (dyrINV), check that we haven't exceeded the repetition count. The warnings could be compacted, but this way we also get to see if the four variables have been set to a nonsense pattern. */ # ifndef DYLP_NDEBUG if (dy_opts->print.phase1 >= 2) { if (uxpfeas == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tunexpected primal feasibility at iteration (%s)%d.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } if (uxnpfeas == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tunexpected loss of primal feasibility at iteration (%s)%d.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } if (uxdfeas == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tunexpected dual feasibility at iteration (%s)%d.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } if (uxndfeas == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tunexpected loss of dual feasibility at iteration (%s)%d.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } } # endif if (lpretval == dyrINV) { if (optcnt > 15) { errmsg(387,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters,optcnt) ; lpretval = dyrFATAL ; } # ifndef DYLP_NDEBUG else { if (dy_opts->print.phase1 >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t(%s)%d: false termination (%s); resuming pivoting.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_prtdyret(tmpretval)) ; } } # endif } } /* If the context is cxLOAD, escape regardless of the result. */ if (dy_opts->context == cxLOAD) break ; } /* We've finished the outer loop. If we're optimal (and hence headed for phase II of the simplex) we'll reinstall the phase II objective, recalculate the objective value, duals, and reduced costs, and reset the reference frame. This makes primal I transparent to the rest of the code, w.r.t. playing with the objective. But ... no sense in doing any of this if we're infeasible, unbounded, or otherwise. In this case, we'll be popping out of simplex entirely, and there's no sense trying to anticipate. */ if (dy_clrpivrej(NULL) != TRUE) lpretval = dyrFATAL ; if (dy_lp->degen > 0) (void) dy_degenout(0) ; if (lpretval == dyrOPTIMAL) { if (dy_swapobjs(dyPRIMAL2) == FALSE) { errmsg(318,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"remove") ; return (dyrFATAL) ; } dy_calcduals() ; if (dy_calccbar() == FALSE) { errmsg(384,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; return (dyrFATAL) ; } dy_lp->z = dy_calcobj() ; dy_pseinit() ; } # ifndef DYLP_NDEBUG if (lpretval == dyrUNBOUND && dy_opts->print.phase1 >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n [%s] (%s)%d: system is unbounded.", dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) { dy_stats->p1.iters += dy_lp->p1.iters ; dy_stats->p1.pivs += dy_lp->p1.pivs ; } # endif return (lpretval) ; } static dyret_enum primal2 (void) /* Phase 2 of the primal simplex. The basic action is a simple loop: pivot (dy_primalpivot), then see what went wrong (dy_duenna). As a side effect of the pivot, dy_primalpivot returns the index of the preferred candidate, xjcand, to enter on the next pivot. The work in this routine goes into trying to deal with problems of pivot rejection. If the preferred candidate is rejected, dy_primalin is called to select a new incoming variable. As long as an incoming variable can be selected, and nothing fatal goes wrong, the inner pivoting loop continues. Exit from the inner loop occurs due to optimality, unboundedness, a punt, or a fatal error (of which there are many). Optimality and unboundedness are self-explanatory. We run a preoptimality check (refactor plus primal and dual feasibility checks) to confirm. Loss of dual feasibility causes a return to the pivoting loop. Loss of primal feasibility causes a reversion to phase I. A punt indicates that no incoming variable could be selected but there are variables flagged with the NOPIVOT qualifier. This can be indicated by dy_primalpivot or by dy_primalin. If preoptimality indicates loss of dual feasibility (it ignores NOPIVOT qualifiers when doing the check), we'll relax the pivot selection tolerance and try again to select a pivot. The tolerance is progressively relaxed until a successful pivot occurs, at which point it snaps back to the original tolerance. If we relax to the bogus number tolerance before managing a successful pivot, we abort. Parameters: none Returns: most of the dyret_enum codes. */ { dyret_enum lpretval,scanresult,pivresult,duennaresult,preopresult ; int startcol,scan,nextcol,candxj, xjndx,indir,xindx,outdir,optcnt ; double cbarj,abarij,delta ; bool do_pivots ; flags xjstatus,checks ; const char *rtnnme = "primal2" ; # ifndef DYLP_NDEBUG bool uxnpfeas,uxdfeas,uxndfeas ; dyret_enum tmpretval ; # endif # ifdef DYLP_PARANOIA if (dy_lp->degen != 0) { errmsg(317,rtnnme,dy_sys->nme,dy_lp->degen) ; return (dyrFATAL) ; } if (dy_lp->p2.iters != 0) { errmsg(5,rtnnme,"phase 2 iteration count",dy_lp->p2.iters) ; return (dyrFATAL) ; } # endif dy_lp->p2.pivs = 0 ; dy_lp->pivok = FALSE ; dy_lp->prev_pivok = FALSE ; lpretval = dyrINV ; /* Open the main loop. The purpose of this outer loop is to allow easy recovery from false indications of optimality or unboundedness, as well as some errors involving pivot selection. All the action happens at the bottom of the loop, after we fall out of the pivoting loop. Initialise a few variables and get going. */ if (dy_clrpivrej(NULL) != TRUE) return (dyrFATAL) ; optcnt = 0 ; scan = dy_opts->scan ; nextcol = 1 ; while (lpretval == dyrINV) { /* The first thing we need to do is a scan to select an incoming variable x. If primalin cannot find a candidate, we're optimal, or perhaps we've punted. Optimality falls into the default case. If we've punted, call dy_dealWithPunt to free up any potential candidates on the pivot rejection list and iterate to try again. If the problem context is cxLOAD, this is all we need to do. Skip to the end game. */ startcol = nextcol ; scanresult = dy_primalin(startcol,scan,&candxj,&nextcol) ; if (dy_opts->context == cxLOAD) { do_pivots = FALSE ; lpretval = scanresult ; } else { switch (scanresult) { case dyrOK: { do_pivots = TRUE ; break ; } case dyrPUNT: { scanresult = dy_dealWithPunt() ; if (scanresult == dyrRESELECT) { continue ; } else { do_pivots = FALSE ; lpretval = scanresult ; } break ; } default: { do_pivots = FALSE ; lpretval = scanresult ; break ; } } } /* Open the loop that executes pivots. While we have a candidate x for entry, we do a two-step: attempt the pivot with x (dy_primalpivot), then check that everything went off ok (dy_duenna). As part of updating the PSE pricing information, a new x will be selected, and we repeat the loop. There are two valid escapes from this loop: * We find optimality (no candidates for entry) or unboundedness (a direction of recession). * la Duenna aborts the problem (due to a problem it's not able to fix). The first action in the loop is to decide which way the incoming variable is moving, based on the variable's status and the sign of cbar. Arguably this should move into dy_primalpivot. */ for (xjndx = candxj ; do_pivots == TRUE ; xjndx = candxj) { # ifdef DYLP_PARANOIA if (xjndx <= 0) { errmsg(386,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"entering") ; return (dyrFATAL) ; } # endif indir = 0 ; xjstatus = dy_status[xjndx] ; cbarj = dy_cbar[xjndx] ; if (cbarj <= 0 && flgon(xjstatus,vstatNBLB|vstatSB|vstatNBFR)) { indir = 1 ; } else if (cbarj > 0 && flgon(xjstatus,vstatNBUB|vstatSB|vstatNBFR)) { indir = -1 ; } # ifdef DYLP_PARANOIA else { errmsg(1,rtnnme,__LINE__) ; return (dyrFATAL) ; } # endif # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: %s (%d), entering %s from %s, price = %g ... ", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',xjndx,TRUE,NULL),xjndx, (indir < 0)?"decreasing":"increasing",dy_prtvstat(xjstatus), cbarj/sqrt(dy_gamma[xjndx])) ; } # endif /* Time to get down to business and attempt the pivot. dy_primalpivot does all the heavy lifting --- the actual pivot, plus updates of data structures and variables. Under normal conditions, we're looking for one of dyrOK (vanilla pivot) or dyrDEGEN (degenerate pivot), indicating a successful pivot and selection of a new candidate x. dyrOPTIMAL or dyrPUNT are less common, and indicate a successful pivot but failure to find a new x. Other possibilities are dyrUNBOUND, dyrREQCHK (suspected accuracy problems), dyrMADPIV (pivot rejection), and various errors, including dyrLOSTPFEAS, dyrSINGULAR, dyrBSPACE, and dyrFATAL. */ pivresult = dy_primalpivot(xjndx,indir, &xindx,&outdir,&abarij,&delta,&candxj) ; # ifndef DYLP_NDEBUG if (dy_opts->print.phase2 >= 4) dy_logpivot(pivresult,xjndx,indir,cbarj,xindx,outdir,abarij,delta) ; # endif /* La Duenna makes sure the proprieties are observed and deals with any scandals. In the end, there are four cases to distinguish: * dyrOK: The pivot went through without a problem, or whatever went wrong has been dealt with transparently from La Duenna's point of view. We'll go on to the next pivot using the candidate selected by dy_primalpivot. There are a few circumstances where no candidate will be selected (the pivot was a nonbasic swing, or primalout returned REQCHK), and these require we force a reselect. * dyrOPTIMAL, dyrPUNT, dyrUNBOUND: We'll want to escape the pivoting loop and run preoptimality. Depending on what it reports, we'll return to the caller or resume pivoting. Unbounded gets a case of its own so we can remember the unbounded column. Punt means there are potential pivots marked with the NOPIVOT qualifier. * dyrRESELECT: Whatever happened requires that we select a new entering variable. Most commonly, this indicates that primalout couldn't find a numerically stable pivot. Less commonly, new pivot candidates have been released from the pivot rejection list in response to a punt. Occasionally, something more exotic has happened (e.g., the basis has been patched due to singularity). Escape to the outer loop to reselect. * dyrSWING: The primal variables are moving too far, too fast. dyrSWING is a recommendation that we pop out of simplex and try to add constraints. But we won't do this unless we've completed a minimum number of basis changes (currently hardwired to 10). * Anything else: These are errors too severe to handle here; they get kicked back to the calling routine. The main reason for enumerating return values here is to make sure we catch a code that was somehow overlooked --- it'll trigger an error message. In general, if we're going to continue the pivoting loop, neither do_pivots or lpretval should be changed. If we're going to escape to the outer loop, lpretval must be properly set and do_pivots should be set to FALSE. */ duennaresult = dy_duenna(pivresult,xjndx,xindx,candxj,-1) ; switch (duennaresult) { case dyrOK: { if (candxj <= 0 || xjndx == xindx) do_pivots = FALSE ; break ; } case dyrRESELECT: { do_pivots = FALSE ; break ; } case dyrOPTIMAL: case dyrPUNT: { do_pivots = FALSE ; lpretval = duennaresult ; break ; } case dyrUNBOUND: { do_pivots = FALSE ; lpretval = duennaresult ; dy_lp->ubnd.ndx = xjndx*indir ; dy_lp->ubnd.ratio = 0 ; break ; } case dyrSWING: { if (dy_lp->basis.pivs >= 10) { lpretval = duennaresult ; do_pivots = FALSE ; } break ; } case dyrACCCHK: case dyrSINGULAR: case dyrBSPACE: case dyrSTALLED: case dyrITERLIM: case dyrLOSTPFEAS: case dyrNUMERIC: case dyrFATAL: { do_pivots = FALSE ; lpretval = duennaresult ; break ; } default: { errmsg(7,rtnnme,__LINE__,"La Duenna return code", (int) duennaresult) ; do_pivots = FALSE ; lpretval = dyrFATAL ; break ; } } } /* Why are we here? The simplest case is that we just need to select a new entering variable --- head back to the top of the loop from here. */ if (lpretval == dyrINV) continue ; /* Do we think we're optimal or unbounded? (I.e., we're reporting dyrOPTIMAL, dyrPUNT, or dyrUNBOUND.) If so, the first thing to do is call preoptimality to refactor and do accuracy and feasibility checks. If we have primal and dual feasibility (dyrOK, dyrPATCHED), we can return dyrOPTIMAL with a clear conscience. If preoptimality reports primal and dual feasibility for dyrUNBOUND or dyrPUNT, well, unexpected primal feasibility is always a pleasure, and we'll play along. dyrLOSTDFEAS is what we'd expect for dyrUNBOUND, so this is also a clean termination. dyrLOSTDFEAS with dyrPUNT says that there are variables on the pivot rejection list, but dy_dealWithPunt has already concluded nothing can be done to make them useable. Return dyrPUNT. Anything else means that the feasibility status has taken an unexpected turn. The working hypothesis is that we need to be more careful in selecting pivots for both factoring and pivoting, which we do by tightening the current value and lower bound for the pivot selection parameters. If we've lost primal feasibility, revert to phase I (dy_primal will take care of tightening the pivot selection parameters). If we've only lost dual feasibility, head back to the top of the loop to resume pivoting. */ if (lpretval == dyrOPTIMAL || lpretval == dyrUNBOUND || lpretval == dyrPUNT) { optcnt++ ; # ifndef DYLP_NDEBUG uxnpfeas = FALSE ; uxdfeas = FALSE ; uxndfeas = FALSE ; tmpretval = lpretval ; # endif preopresult = preoptimality(lpretval,&checks) ; switch (preopresult) { case dyrOK: case dyrPATCHED: { # ifndef DYLP_NDEBUG if (lpretval == dyrUNBOUND || lpretval == dyrPUNT) uxdfeas = TRUE ; # endif lpretval = dyrOPTIMAL ; break ; } case dyrLOSTPFEAS: { # ifndef DYLP_NDEBUG if (dy_opts->print.phase2 >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: lost primal feasibility.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } uxnpfeas = TRUE ; if (flgon(checks,ladDUALFEAS)) { if (lpretval == dyrOPTIMAL) uxndfeas = TRUE ; } else { if (lpretval != dyrOPTIMAL) uxdfeas = TRUE ; } # endif lpretval = dyrLOSTPFEAS ; break ; } case dyrLOSTDFEAS: { if (lpretval == dyrUNBOUND || lpretval == dyrPUNT) { /* no action required */ } else if (lpretval == dyrOPTIMAL) { lpretval = dyrINV ; (void) dy_setpivparms(+1,+1) ; # ifndef DYLP_NDEBUG uxndfeas = TRUE ; # endif } break ; } default: { lpretval = preopresult ; break ; } } /* Ok, we've done the necessary processing. There are two things to deal with now. If DYLP_NDEBUG permits, check for warnings about unexpected primal/dual (in)feasibility. If we're going to repeat (dyrINV), check that we haven't exceeded the repetition count. The warnings could be compacted, but this way we also get to see if the four variables have been set to a nonsense pattern. */ # ifndef DYLP_NDEBUG if (dy_opts->print.phase2 >= 2) { if (uxnpfeas == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tunexpected loss of primal feasibility at iteration (%s)%d.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } if (uxdfeas == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tunexpected dual feasibility at iteration (%s)%d.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } if (uxndfeas == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tunexpected loss of dual feasibility at iteration (%s)%d.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } } # endif if (lpretval == dyrINV) { if (optcnt > 15) { errmsg(387,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters,optcnt) ; lpretval = dyrFATAL ; } # ifndef DYLP_NDEBUG else { if (dy_opts->print.phase2 >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tfalse termination (%s) at (%s)%d; resuming pivoting.", dy_prtdyret(tmpretval),dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; } } # endif } } /* If all we're doing is loading the problem, escape the loop regardless of the result of the first pass. */ if (dy_opts->context == cxLOAD) break ; } /* We've finished the outer loop. Clean up before we leave. */ if (dy_clrpivrej(NULL) != TRUE) lpretval = dyrFATAL ; if (dy_lp->degen > 0) (void) dy_degenout(0) ; # ifndef DYLP_NDEBUG if (dy_opts->print.phase2 >= 2) { if (lpretval == dyrUNBOUND) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%s: system %s is unbounded.", rtnnme,dy_sys->nme) ; } else if (lpretval == dyrSWING) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%s: system %s is pseudo-unbounded.", rtnnme,dy_sys->nme) ; } } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) { dy_stats->p2.iters += dy_lp->p2.iters ; dy_stats->p2.pivs += dy_lp->p2.pivs ; } # endif return (lpretval) ; } lpret_enum dy_primal (void) /* This is the driver routine for the primal simplex algorithm. It expects that the problem will come in with an initial basis. The algorithm is two-phase, running phase I to attain feasibility, if needed, then running phase II to obtain optimality. Loss of feasibility in phase II will cause reentry into phase I. Presently there's a hardcoded limit of 10 occurrences before the code aborts. Parameters: none Returns: any of lpret_enum codes. */ { lpret_enum retval ; dyret_enum dyret ; int lostfeascnt ; const char *rtnnme = "dy_primal" ; retval = lpINV ; dy_lp->lpret = lpINV ; (void) dy_setpivparms(-100,-100) ; (void) dy_setpivparms(+1,+1) ; dy_lp->basis.pivs = 0 ; /* We open a loop here to allow for the possibility of returning to phase I if we loose feasibility in phase II. There's a limit on how many times we'll allow this, though. Run phase I if we need it. */ for (lostfeascnt = 0 ; lostfeascnt < 10 ; lostfeascnt++) { if (dy_lp->infeas > 0.0) { dy_lp->phase = dyPRIMAL1 ; dy_lp->p1.iters = 0 ; dyret = primal1() ; # ifndef DYLP_NDEBUG if ((dy_opts->print.phase1 >= 2) || (dy_opts->print.phase1 >= 1 && dyret != dyrOPTIMAL)) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: primal phase I ended, %d pivots, status %s.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_lp->p1.pivs,dy_prtdyret(dyret)) ; } if (dy_opts->print.major >= 1 && dyret == dyrOPTIMAL) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\n%s (%s): entering phase %s, iter %d.", "dylp",dy_sys->nme,dy_prtlpphase(dyPRIMAL2,FALSE), dy_lp->tot.iters) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL && dyret == dyrOPTIMAL) { dy_stats->phasecnts[dyPRIMAL2]++ ; } # endif if (dyret != dyrOPTIMAL) break ; if (dy_opts->context == cxLOAD) break ; } /* Phase I succeeded or was unnecessary so we can go on to phase II. Call primal2 to do the work. */ # ifndef DYLP_NDEBUG if (dy_opts->print.phase2 >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: entering primal phase II, z = %g", rtnnme,dy_lp->z) ; if (dy_opts->print.phase2 >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, ", dual active yb = %g",dy_calcdualobj()) ; } dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } # endif dy_lp->phase = dyPRIMAL2 ; dy_lp->simplex.active = dyPRIMAL2 ; dy_lp->p2.iters = 0 ; dyret = primal2() ; if (dy_opts->context == cxLOAD) break ; /* What do we have? Optimality is best, but unboundedness is also possible. Loss of feasibility takes us back to phase I again. Anything else is an error. Only loss of feasibility iterates the loop. Tighten up the minimum pivot selection parameters, perhaps we can avoid this next time around. Force dyPRIMAL1 as the phase for the benefit of paranoid checks on status inside forcesuperbasic. */ if (dyret == dyrLOSTPFEAS) { # ifndef DYLP_NDEBUG if (dy_opts->print.phase2 >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: lost feasibility by %g after %d pivots; ", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_lp->infeas,dy_lp->p2.pivs) ; if (lostfeascnt+1 < 10) dyio_outfmt(dy_logchn,dy_gtxecho,"returning to phase I for try %d.", lostfeascnt+2) ; else dyio_outfmt(dy_logchn,dy_gtxecho,"aborting after %d tries.", lostfeascnt+1) ; } # endif if (lostfeascnt+1 < 10) { dy_lp->phase = dyPRIMAL1 ; if (forcesuperbasic() == FALSE) { errmsg(391,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; dyret = dyrFATAL ; break ; } (void) dy_setpivparms(0,+1) ; } continue ; } else { # ifndef DYLP_NDEBUG if ((dy_opts->print.phase2 >= 2) || (dy_opts->print.phase2 >= 1 && dyret != dyrOPTIMAL)) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: primal phase II ended, %d pivots, status %s.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_lp->p2.pivs,dy_prtdyret(dyret)) ; } # endif break ; } } /* That's it. Why are we here? * If all went well, we have phase II optimality. * We could have infeasibility (phase I) or unboundedness (phase I or II). * We could have exceeded the occurrence limit for loss of feasibility. * We may have reached an iteration limit. * Something major went wrong. Take a minute to translate the dyret_enum code into an lpret_enum code and the do a bunch of printing. */ retval = dyret2lpret(dyret) ; # ifndef DYLP_NDEBUG if (retval == lpOPTIMAL || retval == lpUNBOUNDED || retval == lpINFEAS) { if ((dy_lp->phase == dyPRIMAL1 && dy_opts->print.phase1 >= 2) || (dy_lp->phase == dyPRIMAL2 && dy_opts->print.phase2 >= 2)) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n (%s)%d: ", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho,"%s ended, %d pivots, ", dy_prtlpphase(dy_lp->phase,FALSE),dy_lp->tot.pivs) ; if (retval == lpOPTIMAL) dyio_outfmt(dy_logchn,dy_gtxecho,"z = %g.",dy_lp->z) ; else if (retval == lpINFEAS) dyio_outfmt(dy_logchn,dy_gtxecho,"infeas = %g.",dy_lp->infeas) ; else dyio_outfmt(dy_logchn,dy_gtxecho,"unbounded.") ; } } else if (retval == lpLOSTFEAS) { if (dy_opts->print.phase2 >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: primal simplex aborted; lost feasibility %d times.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, lostfeascnt-1) ; } } else if (retval == lpITERLIM) { if ((dy_lp->phase == dyPRIMAL1 && dy_opts->print.phase1 >= 1) || (dy_lp->phase == dyPRIMAL2 && dy_opts->print.phase2 >= 1)) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: primal simplex terminated; iteration limit (%d).", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_opts->iterlim) ; } } else { if ((dy_lp->phase == dyPRIMAL1 && dy_opts->print.phase1 >= 1) || (dy_lp->phase == dyPRIMAL2 && dy_opts->print.phase2 >= 1)) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n (%s)%d: ", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; dyio_outfmt(dy_logchn,dy_gtxecho,"%s failed, status %s after %d pivots.", dy_prtlpphase(dy_lp->phase,FALSE),dy_prtdyret(dyret), dy_lp->tot.pivs) ; } } /* For curiousity's sake, try the traditional certificate of optimality: dual objective == yb == cx == primal objective. */ if (dy_opts->print.phase2 >= 4 && retval == lpOPTIMAL) { double dualobj,primalobj ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: comparing dual and primal objectives.",rtnnme) ; dualobj = dy_calcdualobj() ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tdual objective yb = %g.",dualobj) ; primalobj = dy_calcobj() ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tprimal objective cx = %g.",primalobj) ; if (!withintol(dualobj,primalobj,dy_tols->dchk)) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tWHOOPS! yb - cx = %g - %g = %g > %g.", dualobj,primalobj,dualobj-primalobj,dy_tols->dchk) ; else dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tobjectives match.") ; } # endif /* A last bit of substance --- set the return code & we're out of here. */ dy_lp->lpret = retval ; return (retval) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_dual.c0000644000175200017520000007504611507440660015166 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains the routines specific to dylp's dual simplex algorithm. It began life as a pretty straightforward implementation of dual phase II, with dual steepest edge (DSE) pricing. Subsequently, it's been augmented with perturbation-based antidegeneracy and multipivoting. It's difficult to give good, clear explanations for this code from the viewpoint of running a simplex algorithm on the dual problem. The root of the difficulty lies with the handling of bounded primal variables. Suppose we have m constraints and n variables in the problem. If you follow the usual logic of dual simplex, you see that what's happening is something like this: When a bounded variable is tight against an upper or lower bound constraint, we really need the dual variable that should be associated with that constraint, because it's nonzero, basic, and contributes a term y(-l) or yu to the objective function. But the constraints (either -x <= -l or x <= u) are not explicitly present in the constraint system, so we'll never see y or y in y = cinv(B). If you look in a text, they all assume 0 <= x <= +inf when explaining the dual algorithm. Hence the contribution for y is 0, all y don't exist, and the whole problem is conveniently swept under the rug. Just try and find a detailed explanation for bounded variables, l <= x <= u, where some l != 0 or some u != +inf. So, why does revised dual simplex work at all running off the primal tableaux? Let's start with the standard dual pair max cx min yb Ax <= b <=> yA >= c l <= x <= u y >= 0 The first point to make is that straightforward calculation of the dual objective will, in fact, be wrong if primal architectural variables are nonbasic at a nonzero bound. The necessary dual variables are missing from y = cinv(B), which contains only those duals associated with the constraints present in the primal matrix, A. And the necessary lower and upper bounds are missing from the rhs vector, b. The values of the missing duals can be found in the reduced costs cbar, since the reduced costs are the negative of the values of (all) the basic dual variables. From this the dual objective can be calculated correctly. If you slog through the algebra, what you eventually find is that the dual surplus variable, call it sigma, associated with column j in the dual constraint dot(y,a) - sigma = c, gets pressed into service as a surrogate for y and y. The dual simplex algorithm decides which role it will play, as part of the rules of the algorithm. In the case of sigma acting as surrogate for y, there's the added complication that the sign is wrong in the primal tableau, so that where we would have y >= 0 if the upper bound constraint was explicit, we have sigma <= 0 when it's handled implicitly. This works out rather neatly (if coincidentally), in the sense that (for a max primal) we want a positive reduced cost at optimality for a variable at upper bound. Generally speaking, one gets a negative dual for variables out at an upper bound. The other place where this can occur is when a range constraint results in an upper-bounded slack. To really understand dual simplex with bounded variables as simplex working on the dual problem, you should work the math. When you're done, you'll appreciate why texts never get into details. And with that in mind, I'm going to (mostly) comment the code in terms of the results that are required in the primal problem. One more very important point -- dylp runs a min cx primal simplex. The proper way to handle the conversion is to ask what would happen if the primal was max -cx. max (-c)x min yb Ax <= b yA >= (-c) l <= x <= u y >= 0 The result, once you work the linear algebra, is that the primal reduced costs calculated for min cx are in fact the correct duals (no sign inversion required) for min yb. But they are *not* the correct duals for the min cx problem -- we still need y = cinv(B) there. Put another way, the correct duals for min cx are the negative of the correct duals for min yb. (Has to be that way --- we did negate the objective, after all!) You'll notice that dy_y holds cinv(B). When doing calculations here in the dual simplex, we don't use them! Instead, we consult dy_cbar for dual variable values. Keep in mind also that (dualN)inv(dualB) = - inv(B)N. We're working the dual off the primal structures, so we have inv(B)N available to work with. When we're hunting for the leaving dual variable, we're working on finding the minimum delta_y using y = ybar - delta_y(betadualN), where ybar is a reduced cost, beta is row k of inv(dualB). Taking all the above into consideration, this becomes y = cbar + delta_y(betaN) where beta is a row of inv(B). The value of the entering dual will be -cbar/abar = cbar. The comments in dy_dualin sort of gloss over why we're looking for the minimum delta_y and concentrate on explaining the operation in terms of getting the correct sign for cbar. In the context of dylp, the dual algorithm is strictly subordinate, used to reoptimise after the addition of constraints. More, the assumption is that if the primal simplex uncovers unboundedness, we'll add constraints there and return to primal phase I if necessary. The dual algorithm therefore assumes that a primal optimal but infeasible solution is available. This simplifies things, in that we don't need a stage I for the dual. Anti-degeneracy in the dual works as the primal. The heavyweight tactic is to form a perturbed subproblem incorporating those columns where the unperturbed cbar = 0. There's also an implementation of the `anti-degen lite' heuristic, using alignment of the dual constraints (columns of the constraint matrix) with the rhs vector. When numeric ill-conditioning is uncovered, we attempt to deal with it by boosting the minimum pivot tolerances. This can happen if groombasis has to correct a major status error, or if dual2 thinks it's reached optimality and then unexpectedly looses dual or primal feasibility. We keep trying with the dual if only primal feasibility is lost. If we've lost dual feasibility, we revert to the primal simplex, as there's no dual phase I. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_dual.c 4.7 10/15/05" ; static char svnid[] UNUSED = "$Id: dy_dual.c 407 2010-12-31 20:48:48Z lou $" ; static dyret_enum preoptimality (dyret_enum lpretval, flags *result) /* This routine does the prep work so that we can have confidence in a report of optimality by the dual simplex routines. It clears the pivot reject list, refactors, recalculates the primal and dual variables, and performs primal and dual accuracy and feasibility checks. No heroic measures are taken, on loss of primal or dual feasibility, as the overlying algorithms will deal with it. Parameters: lpretval: the lp return code assigned by dual2 result: (o) loaded with the result flags from dy_accchk Returns: dyrOK: if all goes smoothly dyrPATCHED: if the only bump is that the basis was patched by dy_factor dyrLOSTDFEAS: if the dual feasibility check by dy_accchk fails dyrLOSTPFEAS: if the primal feasibility check by dy_accchk fails. dyrFATAL: if anything else goes wrong Also can relay error codes from dy_accchk (dyrACCCHK, and various basis factoring errors). Loss of dual feasibility dominates loss of primal feasibility. */ { flags checkflags ; dyret_enum retval ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "preoptimality" ; # endif # ifdef DYLP_PARANOIA if (!(lpretval == dyrOPTIMAL || lpretval == dyrUNBOUND || lpretval == dyrPUNT)) { errmsg(4,rtnnme,"lp return code",dy_prtdyret(lpretval)) ; return (dyrFATAL) ; } # endif # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 4) dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: validating optimality at iteration %d.", rtnnme,dy_lp->tot.iters) ; # endif /* A little prep work. If the dual simplex has returned lpUNBOUNDED (primal infeasible) or lpPUNT, we still want the primal feasibility check to calculate total infeasibility. We don't want heroic measures taken to try and deal with the problem. Don't ask for a refactor if this looks like uncomplicated optimality. */ *result = 0 ; checkflags = 0 ; setflg(checkflags,ladFACTOR|ladPRIMALCHK|ladPRIMFEAS|ladPFQUIET| ladDUALCHK|ladDUALFEAS|ladDFQUIET) ; if (lpretval == dyrOPTIMAL && dy_lp->basis.etas == 0) clrflg(checkflags,ladFACTOR) ; /* Start with the easy stuff -- clear the pivot reject list and back out any restricted subproblem. If dualdegenout notes accuracy loss, request a refactor. */ # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tclearing pivot rejection machinery ... ") ; } # endif if (dy_clrpivrej(NULL) != TRUE) return (dyrFATAL) ; if (dy_lp->degen > 0) { if (dy_dualdegenout(0) == dyrREQCHK) setflg(checkflags,ladFACTOR) ; } /* And now the accuracy checks. */ # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"done.\n\t%schecking accuracy ... ", flgon(checkflags,ladFACTOR)?"refactoring and ":"") ; } # endif retval = dy_accchk(&checkflags) ; *result = checkflags ; if (!(retval == dyrOK || retval == dyrPATCHED)) { # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"%sfailed.", (dy_opts->print.dual >= 5)?"\n\t":" ") ; } # endif return (retval) ; } else if (flgon(checkflags,ladPRIMALCHK|ladDUALCHK)) { # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"%sfailed", (dy_opts->print.dual >= 5)?"\n\t":" ") ; if (flgon(checkflags,ladPRIMALCHK)) dyio_outfmt(dy_logchn,dy_gtxecho," primal") ; if (flgon(checkflags,ladDUALCHK)) dyio_outfmt(dy_logchn,dy_gtxecho," dual") ; dyio_outfmt(dy_logchn,dy_gtxecho," check(s).") ; } # endif retval = dyrACCCHK ; } else if (flgon(checkflags,ladPRIMFEAS|ladDUALFEAS)) { # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"lost") ; if (flgon(checkflags,ladPRIMFEAS)) dyio_outfmt(dy_logchn,dy_gtxecho," primal") ; if (flgon(checkflags,ladDUALFEAS)) dyio_outfmt(dy_logchn,dy_gtxecho," dual") ; dyio_outfmt(dy_logchn,dy_gtxecho," feasibility.") ; } # endif if (flgon(checkflags,ladDUALFEAS)) retval = dyrLOSTDFEAS ; else retval = dyrLOSTPFEAS ; } # ifndef DYLP_NDEBUG else { if (dy_opts->print.dual >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"%s%s.", (dy_opts->print.dual >= 5)?"\n\t":" ", (retval == dyrOK)?"done":"patched") ; } } # endif return (retval) ; } static dyret_enum dual2 (void) /* Phase 2 of the dual simplex. The basic action is a simple loop: pivot (dy_dualpivot), then see what went wrong (dy_duenna). As a side effect of the pivot, dy_dualpivot returns the index of the preferred candidate, xicand, to leave on the next pivot. The work in this routine goes into trying to deal with problems of pivot rejection. If the preferred candidate is rejected, dy_dualout is called to select a new leaving variable. As long as a leaving variable can be selected, and nothing fatal goes wrong, the inner pivoting loop continues. Exit from the inner loop occurs due to optimality (which occurs when we achieve primal feasibility), (dual) unboundedness (primal infeasibility), a punt, or a fatal error (of which there are many). Optimality and unboundedness are self-explanatory. We run a preoptimality check (refactor plus primal and dual feasibility checks) to confirm. Loss of primal feasibility causes a return to the pivoting loop. Loss of dual feasibility causes a reversion to the primal simplex. A punt indicates that no leaving variable could be selected but there are infeasible variables flagged with the NOPIVOT qualifier. This can be indicated by dy_dualpivot or by dy_dualout. If preoptimality indicates loss of primal feasibility (it ignores NOPIVOT qualifiers when doing the check), we'll relax the pivot selection tolerance and try again to select a pivot. The tolerance is progressively relaxed until a successful pivot occurs, at which point it snaps back to the original tolerance. If we relax to the bogus number tolerance before managing a successful pivot, we abort. Parameters: none Returns: appropriate dual lpret_enum code. */ { int candxi,xindx,outdir,xjndx,indir,optcnt ; double cbarj,abarij,delta ; flags xistatus,checks ; bool do_pivots ; dyret_enum lpretval,outresult,pivresult,duennaresult,preopresult ; const int successiveDinf = 40 ; const char *rtnnme = "dual2" ; # ifndef DYLP_NDEBUG int xipos ; bool uxpfeas,uxnpfeas,uxndfeas ; dyret_enum tmpretval ; # endif # ifdef DYLP_PARANOIA if (dy_lp->degen != 0) { errmsg(317,rtnnme,dy_sys->nme,dy_lp->degen) ; return (dyrFATAL) ; } if (dy_lp->d2.iters != 0) { errmsg(5,rtnnme,"dual iteration count",dy_lp->d2.iters) ; return (dyrFATAL) ; } # endif dy_lp->d2.pivs = 0 ; dy_lp->pivok = FALSE ; dy_lp->prev_pivok = FALSE ; lpretval = dyrINV ; dy_lp->basis.dinf = 0 ; /* Do a little initialisation, then open the outer loop. It's purpose is to recover from false terminations (optimality or unboundedness which disappeared on refactoring) and pivot selection problems. All the action occurs at the bottom of the loop, after we fall out of the inner pivoting loop. */ if (dy_clrpivrej(NULL) != TRUE) return(dyrFATAL) ; optcnt = 0 ; while (lpretval == dyrINV) { /* Call dy_dualout to locate a leaving variable x using DSE pricing. From a primal viewpoint, we're looking for a variable x with the greatest normalised infeasibility. If there are no infeasible variables, we have optimality. The other possibility is that all infeasible variables are on the pivot reject list; this is indicated by a return value of dyrPUNT. Optimality falls into the default case. Call dy_dealWithPunt to free up any potential candidates on the pivot rejection list and iterate to try again. If the problem context is cxLOAD, this is all we need to do. Skip to the end game. */ outresult = dy_dualout(&candxi) ; if (dy_opts->context == cxLOAD) { do_pivots = FALSE ; lpretval = outresult ; } else { switch (outresult) { case dyrOK: { do_pivots = TRUE ; break ; } case dyrPUNT: { outresult = dy_dealWithPunt() ; if (outresult == dyrRESELECT) { continue ; } else { do_pivots = FALSE ; lpretval = outresult ; } break ; } default: { do_pivots = FALSE ; lpretval = outresult ; break ; } } } # ifdef DYLP_PARANOIA if (candxi <= 0 && outresult == dyrOK) { dyio_outfmt(dy_logchn,TRUE, "\ndualout: %s(%d) INVALID LEAVING VAR = %d, outresult = %s", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, xindx,dy_prtdyret(outresult)) ; } # endif /* Open the loop that executes pivots. While we have a candidate x to leave, we do a two-step: attempt the pivot with x (dy_dualpivot), then check that everything went off ok (dy_duenna). As part of updating the DSE pricing information, a new x will be selected, and we repeat the loop. There are two valid escapes from this loop: * We find optimality (no candidates to leave) or unboundedness (a direction of recession). * la Duenna aborts the problem (due to a problem it's not able to fix). The first action in the loop is to decide which way the leaving variable is moving, based on its status. Arguably this should move into dy_dualpivot. */ for (xindx = candxi ; do_pivots == TRUE ; xindx = candxi) { # ifdef DYLP_PARANOIA if (xindx <= 0) { dyio_outfmt(dy_logchn,TRUE, "\nloop: %s(%d) INVALID LEAVING VAR = %d, outresult = %s", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, xindx,dy_prtdyret(outresult)) ; errmsg(386,rtnnme,dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters,"leaving") ; return (dyrFATAL) ; } # endif xistatus = dy_status[xindx] ; if (flgon(xistatus,vstatBLLB)) outdir = 1 ; else outdir = -1 ; # ifndef DYLP_NDEBUG if (dy_opts->print.pricing >= 2) { xipos = dy_var2basis[xindx] ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n (%s)%d: %s (%d) = %g, ", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, consys_nme(dy_sys,'v',xindx,TRUE,NULL),xindx, dy_xbasic[xipos]) ; if (outdir < 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "decreasing and leaving at ub = %g, price = %g.", dy_sys->vub[xindx], (dy_xbasic[xipos]-dy_sys->vub[xindx])/sqrt(dy_rho[xipos])) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, "increasing and leaving at lb = %g, price = %g.", dy_sys->vlb[xindx], (dy_sys->vlb[xindx]-dy_xbasic[xipos])/sqrt(dy_rho[xipos])) ; } } # endif /* So far so good. Call dy_dualpivot to do the heavy lifting. It will select an incoming variable x, pivot the basis representation, update the primal and dual variables, the DSE information, and related data structures. As a side effect of the DSE updates, a new leaving variable x should be selected. We're hoping for a return code of dyrOK or dyrDEGEN, indicating a successful (perhaps degenerate) pivot and selection of a new leaving variable. dyrOPTIMAL or dyrPUNT indicate a successful pivot but failure to select a new x. Other possibilities are dyrUNBOUND (primal infeasible), dyrREQCHK (suspected accuracy problems), dyrMADPIV (numerically unstable pivot), and various errors, including dyrLOSTDFEAS, dyrSINGULAR, dyrBSPACE, and dyrFATAL. */ xjndx = -1 ; pivresult = dy_dualpivot(xindx,outdir, &xjndx,&indir,&cbarj,&abarij,&delta,&candxi) ; # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 4) dy_logpivot(pivresult,xjndx,indir,cbarj,xindx,outdir,abarij,delta) ; # endif /* La Duenna makes sure the proprieties are observed and deals with any scandals. In the end, there are four cases to distinguish: * dyrOK: The pivot went through without a problem, or whatever went wrong has been fixed transparently from La Duenna's point of view. It may be that no candidate was selected because dualin returned REQCHK, and in this case we need to force a reselect. * dyrOPTIMAL, dyrUNBOUND, dyrPUNT: We'll want to end the pivoting loop and run preoptimality. Depending on what it has to say, we'll either return or resume pivoting. Unbounded gets its own case so we can remember the unbounded row. Punt means that there are potential pivots, but they're flagged with the NOPIVOT qualifier. * dyrRESELECT: Whatever happened requires that we select a new leaving variable. Most commonly, this indicates that dualin couldn't find a numerically stable pivot. Less commonly, new pivot candidates have been released from the pivot rejection list in response to a punt. Occasionally, something more exotic has happened (e.g., the basis has been patched due to singularity). Escape to the outer loop to reselect. * dyrSWING: The primal variables are moving too far, too fast. dyrSWING is a recommendation that we pop out of simplex and try to add constraints. But we won't do this unless we've completed a minimum number of basis changes (currently hardwired to 10). * dyrLOSTDFEAS: The dual simplex has a reasonable tolerance for slight loss of feasibility. But if the infeasibility persists through N successive refactors, better give it up. Currently, N is hardwired to ten. * Anything else: errors too severe to handle here. Kick back and let the caller deal with it. The reason for enumerating return values here is to make sure that we haven't overlooked some return value. This way, it triggers an error. */ duennaresult = dy_duenna(pivresult,xjndx,xindx,-1,candxi) ; switch (duennaresult) { case dyrOK: { if (candxi <= 0) do_pivots = FALSE ; break ; } case dyrRESELECT: { do_pivots = FALSE ; break ; } case dyrOPTIMAL: case dyrPUNT: { lpretval = duennaresult ; do_pivots = FALSE ; break ; } case dyrUNBOUND: { lpretval = dyrUNBOUND ; dy_lp->ubnd.ndx = xindx*outdir ; dy_lp->ubnd.ratio = 0 ; do_pivots = FALSE ; break ; } case dyrSWING: { if (dy_lp->basis.pivs >= 10) { lpretval = duennaresult ; do_pivots = FALSE ; } else if (candxi <= 0) { do_pivots = FALSE ; } break ; } case dyrLOSTDFEAS: { # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 3 && dy_lp->basis.dinf < successiveDinf) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n(%s)%d: dual infeasible for %d successive refactors.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_lp->basis.dinf) ; } if (dy_opts->print.dual >= 1 && dy_lp->basis.dinf >= successiveDinf) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: dual infeasibility for %d successive", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, successiveDinf) ; dyio_outfmt(dy_logchn,dy_gtxecho," refactors; aborting.") ; } # endif if (dy_lp->basis.dinf >= successiveDinf) { lpretval = duennaresult ; do_pivots = FALSE ; } else if (candxi <= 0) { do_pivots = FALSE ; } break ; } case dyrACCCHK: case dyrSINGULAR: case dyrBSPACE: case dyrSTALLED: case dyrITERLIM: case dyrNUMERIC: case dyrFATAL: { lpretval = duennaresult ; do_pivots = FALSE ; break ; } default: { errmsg(7,rtnnme,__LINE__,"La Duenna return code", (int) duennaresult) ; do_pivots = FALSE ; lpretval = dyrFATAL ; break ; } } } /* End of the pivoting loop. Why are we here? The simplest case is that we just need to select a new leaving variable --- head back to the top of the loop from here. */ if (lpretval == dyrINV) continue ; /* Do we think we're optimal or (dual) unbounded? (I.e., we're reporting dyrOPTIMAL, dyrPUNT, or dyrUNBOUND.) If so, the first thing to do is call preoptimality to refactor and do accuracy and feasibility checks. If the feasibility status agrees with what we're expecting, we can return. Optimal should be primal and dual feasible, while unbounded will be dual feasible only. If preoptimality reports primal and dual feasibility for dyrUNBOUND or dyrPUNT, well, unexpected primal feasibility is always a pleasure. dyrLOSTPFEAS with dyrPUNT says that there are variables on the pivot rejection list, but dy_dealWithPunt has already concluded nothing can be done to make them useable. Return dyrPUNT. Anything else means that the feasibility status has taken an unexpected turn. The working hypothesis is that we need to be more careful in selecting pivots for both factoring and pivoting, which we do by tightening the current value and lower bound for the pivot selection parameters. If we've lost dual feasibility, bail out (eventually we'll revert to primal phase I). If we've only lost primal feasibility, head back to the top of the loop to resume pivoting. */ if (lpretval == dyrOPTIMAL || lpretval == dyrUNBOUND || lpretval == dyrPUNT) { optcnt++ ; # ifndef DYLP_NDEBUG uxpfeas = FALSE ; uxnpfeas = FALSE ; uxndfeas = FALSE ; tmpretval = lpretval ; # endif preopresult = preoptimality(lpretval,&checks) ; switch (preopresult) { case dyrOK: case dyrPATCHED: { # ifndef DYLP_NDEBUG if (lpretval == dyrUNBOUND || lpretval == dyrPUNT) uxpfeas = TRUE ; # endif lpretval = dyrOPTIMAL ; break ; } case dyrLOSTDFEAS: { # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: lost dual feasibility.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } uxndfeas = TRUE ; if (flgon(checks,ladPRIMFEAS)) { if (lpretval == dyrOPTIMAL) uxnpfeas = TRUE ; } else { if (lpretval != dyrOPTIMAL) uxpfeas = TRUE ; } # endif lpretval = dyrLOSTDFEAS ; break ; } case dyrLOSTPFEAS: { if (lpretval == dyrUNBOUND || lpretval == dyrPUNT) { /* nothing to be done */ } else if (lpretval == dyrOPTIMAL) { lpretval = dyrINV ; (void) dy_setpivparms(+1,+1) ; # ifndef DYLP_NDEBUG uxnpfeas = TRUE ; # endif } break ; } default: { lpretval = preopresult ; break ; } } /* Ok, we've done the necessary processing. There are two things to deal with now. If DYLP_NDEBUG permits, check for warnings about unexpected primal/dual (in)feasibility. If we're going to repeat (dyrINV), check that we haven't exceeded the repetition count. The warnings could be compacted, but this way we also get to see if the four variables have been set to a nonsense pattern. */ # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 2) { if (uxndfeas == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tunexpected loss of dual feasibility at iteration (%s)%d.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } if (uxpfeas == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tunexpected primal feasibility at iteration (%s)%d.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } if (uxnpfeas == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tunexpected loss of primal feasibility at iteration (%s)%d.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; } } # endif if (lpretval == dyrINV) { if (optcnt > 15) { errmsg(387,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters,optcnt) ; lpretval = dyrFATAL ; } # ifndef DYLP_NDEBUG else { if (dy_opts->print.dual >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tfalse termination (%s) at (%s)%d; resuming pivoting.", dy_prtdyret(tmpretval),dy_prtlpphase(dy_lp->phase,TRUE), dy_lp->tot.iters) ; } } # endif } } /* Regardless of the result, if we're just here to load the problem, escape the loop. */ if (dy_opts->context == cxLOAD) break ; } /* We've finished the outer loop. Clean up before we leave. */ if (dy_clrpivrej(NULL) != TRUE) lpretval = dyrFATAL ; if (dy_lp->degen > 0) (void) dy_dualdegenout(0) ; # ifndef DYLP_NDEBUG if (lpretval == dyrUNBOUND && dy_opts->print.dual >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%s: system %s is (dual) unbounded.", rtnnme,dy_sys->nme) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) { dy_stats->d2.iters += dy_lp->d2.iters ; dy_stats->d2.pivs += dy_lp->d2.pivs ; } # endif return (lpretval) ; } lpret_enum dy_dual (void) /* This is the driver routine for the dual simplex algorithm. It expects that the problem will arrive with an initial dual feasible basis and solution (primal and dual variables). Since there's no provision for a phase I in this dual simplex implementation, dy_dual is simpler than its counterpart dy_primal. Parameters: none Returns: lpret_enum code */ { lpret_enum retval ; dyret_enum dyret ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "dy_dual" ; # endif retval = lpINV ; dy_lp->phase = dyDUAL ; dy_lp->lpret = lpINV ; (void) dy_setpivparms(-100,-100) ; (void) dy_setpivparms(+1,+1) ; dy_lp->basis.pivs = 0 ; /* Call dual2 to take us to optimality. We'll also make the usual conversion of dual unbounded => primal infeasible at this point. (Remember that we don't have to worry about dual infeasible => primal unbounded.) */ dy_lp->z = dy_calcobj() ; # ifndef DYLP_NDEBUG if (dy_opts->print.dual >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n%s: entering dual phase II, z = %g", rtnnme,dy_lp->z) ; if (dy_opts->print.dual >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, ", dual active yb = %g",dy_calcdualobj()) ; } dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } # endif dy_lp->d2.iters = 0 ; dyret = dual2() ; if (dyret == dyrUNBOUND) dyret = dyrINFEAS ; /* What do we have? Optimality is best, but infeasibility or a punt are also possible. Anything else is regarded as a fatal error. (But dylp will try primal I in the event of stalling or loss of dual feasibility.) */ retval = dyret2lpret(dyret) ; # ifndef DYLP_NDEBUG if (retval == lpOPTIMAL || retval == lpINFEAS || retval == lpSWING) { if (dy_opts->print.dual >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: dual phase II ended, %d pivots, ", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_lp->d2.pivs) ; if (retval == lpOPTIMAL) dyio_outfmt(dy_logchn,dy_gtxecho,"optimal z = %g.",dy_lp->z) ; else if (retval == lpINFEAS) dyio_outfmt(dy_logchn,dy_gtxecho,"infeas = %g.",dy_lp->infeas) ; else dyio_outfmt(dy_logchn,dy_gtxecho,"swing %e for %s (%d).", dy_lp->ubnd.ratio, consys_nme(dy_sys,'v',dy_lp->ubnd.ndx,FALSE,NULL), dy_lp->ubnd.ndx) ; } } else if (retval == lpITERLIM) { if (dy_opts->print.dual >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: dual simplex terminated; iteration limit (%d).", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_opts->iterlim) ; } } else { if (dy_opts->print.dual >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n (%s)%d: dual phase II failed, status %s after %d pivots.", dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, dy_prtlpret(retval),dy_lp->d2.pivs) ; } } /* For curiousity's sake, try the traditional certificate of optimality: dual objective == yb == cx == primal objective. */ if (dy_opts->print.dual >= 4 && retval == lpOPTIMAL) { double dualobj,primalobj ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n%s: comparing dual and primal objectives.",rtnnme) ; dualobj = dy_calcdualobj() ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tdual objective yb = %g.",dualobj) ; primalobj = dy_calcobj() ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tprimal objective cx = %g.",primalobj) ; if (!withintol(dualobj,primalobj,dy_tols->dchk)) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tWHOOPS! yb - cx = %g - %g = %g > %g.", dualobj,primalobj,dualobj-primalobj,dy_tols->dchk) ; } else dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tobjectives match.") ; } # endif dy_lp->lpret = retval ; return (retval) ; } DyLP-1.10.4/DyLP/src/Dylp/dy_statistics.c0000644000175200017520000004551511507440660016431 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains routines related to dylp's statistics collection facilities. To activate statistics collection, it's first necessary to define the compile-time symbol DYLP_STATISTICS. The client code should then perform this sequence of actions: * Before calling dylp, call dy_initstats to set up the statistics data structure. * The pointer returned from dy_initstats should then be passed as one of the parameters to the call to dylp. * Once dylp has returned, dy_dumpstats can be used to print the contents of the statistics structure to a file. * When the structure is no longer required, call dy_freestats to free the data structure. */ #define DYLP_INTERNAL #include "dylp.h" #include #include static char sccsid[] UNUSED = "@(#)dy_statistics.c 4.5 11/06/04" ; static char svnid[] UNUSED = "$Id: dy_statistics.c 407 2010-12-31 20:48:48Z lou $" ; /* Handy macros for initialising and freeing an lpstats_struct */ #define FREE_AND_CLEAR(zz_var_zz) \ if (zz_var_zz != NULL) { FREE(zz_var_zz) ; zz_var_zz = NULL ; } #define ALLOC_OR_CLEAR(zz_field_zz,zz_sze_zz,zz_type_zz) \ if (zz_field_zz == NULL) \ { zz_field_zz = (zz_type_zz *) CALLOC((zz_sze_zz+1),sizeof(zz_type_zz)) ; } \ else \ { memset(zz_field_zz,0,(zz_sze_zz+1)*sizeof(zz_type_zz)) ; } void dy_initstats (lpstats_struct **p_lpstats, consys_struct *orig_sys) /* This routine allocates (as necessary) and initialises the data structure that dylp uses to collect detailed statistics. Parameters: p_lpstats: (i) pointer to an lpstats structure; if null, one will be allocated (o) an initialised lpstats structure orig_sys: the constraint system that will be passed to dylp Returns: undefined */ { int k,m,n ; lpstats_struct *lpstats ; # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 const char *rtnnme = "dy_initstats" ; if (p_lpstats == NULL) { errmsg(2,rtnnme,"&lpstats") ; return ; } # endif /* Allocate the basic structure, if needed. */ if (*p_lpstats != NULL) { lpstats = *p_lpstats ; } else { lpstats = (lpstats_struct *) CALLOC(1,sizeof(lpstats_struct)) ; } /* Check the capacity of the arrays allocated for constraint and variable statistics. If allocated arrays are too small, free them. */ m = orig_sys->concnt ; n = orig_sys->varcnt ; if (lpstats->cons.sze <= m) { FREE_AND_CLEAR(lpstats->cons.angle) FREE_AND_CLEAR(lpstats->cons.actcnt) FREE_AND_CLEAR(lpstats->cons.deactcnt) FREE_AND_CLEAR(lpstats->cons.init) FREE_AND_CLEAR(lpstats->cons.fin) lpstats->cons.sze = 0 ; } if (lpstats->vars.sze <= n) { FREE_AND_CLEAR(lpstats->vars.actcnt) FREE_AND_CLEAR(lpstats->vars.deactcnt) lpstats->vars.sze = 0 ; } /* Allocate or clear the constraint and variable arrays. */ lpstats->cons.sze = m ; lpstats->vars.sze = n ; ALLOC_OR_CLEAR(lpstats->cons.angle,m,double) ALLOC_OR_CLEAR(lpstats->cons.actcnt,m,int) ALLOC_OR_CLEAR(lpstats->cons.deactcnt,m,int) ALLOC_OR_CLEAR(lpstats->cons.init,m,bool) ALLOC_OR_CLEAR(lpstats->cons.fin,m,bool) ALLOC_OR_CLEAR(lpstats->vars.actcnt,n,int) ALLOC_OR_CLEAR(lpstats->vars.deactcnt,n,int) /* Clear state counts. */ memset(lpstats->phasecnts,0,(dyDONE+1)*sizeof(int)) ; /* Clear constraint angle summary statistics */ lpstats->angle.max = -FLT_MAX ; lpstats->angle.min = FLT_MAX ; memset(lpstats->angle.hist,0,DYSTATS_HISTBINS*sizeof(int)) ; /* Clear refactoring statistics */ lpstats->factor.cnt = 0 ; lpstats->factor.prevpiv = 0 ; lpstats->factor.avgpivs = 0 ; lpstats->factor.maxpivs = 0 ; /* Clear/set pivot rejection statistics */ lpstats->pivrej.max = 0 ; lpstats->pivrej.mad = 0 ; lpstats->pivrej.sing = 0 ; lpstats->pivrej.pivtol_red = 0 ; lpstats->pivrej.min_pivtol = DBL_MAX ; lpstats->pivrej.puntcall = 0 ; lpstats->pivrej.puntret = 0 ; /* Clear dual multipivot statistics */ lpstats->dmulti.flippable = 0 ; lpstats->dmulti.cnt = 0 ; lpstats->dmulti.cands = 0 ; lpstats->dmulti.promote = 0 ; lpstats->dmulti.nontrivial = 0 ; lpstats->dmulti.evals = 0 ; lpstats->dmulti.flips = 0 ; lpstats->dmulti.pivrnks = 0 ; lpstats->dmulti.maxrnk = 0 ; /* Clear primal multipivot statistics */ lpstats->pmulti.cnt = 0 ; lpstats->pmulti.cands = 0 ; lpstats->pmulti.nontrivial = 0 ; lpstats->pmulti.promote = 0 ; /* Clear infeasibility statistics */ lpstats->infeas.prevpiv = 0 ; lpstats->infeas.maxcnt = 0 ; lpstats->infeas.totpivs = 0 ; lpstats->infeas.maxpivs = 0 ; lpstats->infeas.chgcnt1 = 0 ; lpstats->infeas.chgcnt2 = 0 ; /* Clear antidegeneracy statistics */ for (k = 0 ; k < DYSTATS_MAXDEGEN ; k++) { lpstats->pdegen[k].cnt = 0 ; lpstats->pdegen[k].avgsiz = 0 ; lpstats->pdegen[k].maxsiz = 0 ; lpstats->pdegen[k].totpivs = 0 ; lpstats->pdegen[k].avgpivs = 0 ; lpstats->pdegen[k].maxpivs = 0 ; } for (k = 0 ; k < DYSTATS_MAXDEGEN ; k++) { lpstats->ddegen[k].cnt = 0 ; lpstats->ddegen[k].avgsiz = 0 ; lpstats->ddegen[k].maxsiz = 0 ; lpstats->ddegen[k].totpivs = 0 ; lpstats->ddegen[k].avgpivs = 0 ; lpstats->ddegen[k].maxpivs = 0 ; } *p_lpstats = lpstats ; return ; } void dy_freestats (lpstats_struct **p_lpstats) /* This routine frees an lpstats structure. Parameters: p_lpstats: (i) lpstats structure to be freed (o) NULL Returns: undefined */ { lpstats_struct *lpstats ; # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 const char *rtnnme = "dy_freestats" ; if (p_lpstats == NULL) { errmsg(2,rtnnme,"&lpstats") ; return ; } # endif lpstats = *p_lpstats ; *p_lpstats = NULL ; # ifdef DYLP_PARANOIA if (lpstats == NULL) { errmsg(2,rtnnme,"lpstats") ; return ; } # endif FREE_AND_CLEAR(lpstats->cons.angle) FREE_AND_CLEAR(lpstats->cons.actcnt) FREE_AND_CLEAR(lpstats->cons.deactcnt) FREE_AND_CLEAR(lpstats->cons.init) FREE_AND_CLEAR(lpstats->cons.fin) FREE_AND_CLEAR(lpstats->vars.actcnt) FREE_AND_CLEAR(lpstats->vars.deactcnt) FREE(lpstats) ; return ; } #undef ALLOC_OR_CLEAR #undef FREE_AND_CLEAR void dy_finalstats (lpstats_struct *lpstats) /* Various finishing activities: * Scan the final active constraint system and set the cons.fin array. * Copy final pivot and iteration totals from dy_lp. Not much at this point, but it's broken out in anticipation that it may one day do more. Parameters: none Returns: undefined */ { int i,k ; # ifdef DYLP_PARANOIA const char *rtnnme = "dy_finalstats" ; if (lpstats == NULL) { errmsg(2,rtnnme,"lpstats") ; return ; } # endif /* Scan the active constraints and record the ones that are still active. */ for (k = 1 ; k <= dy_sys->concnt ; k++) { i = dy_actcons[k] ; if (i > 0) { lpstats->cons.fin[i] = TRUE ; } } /* Pick up final pivot and iteration totals. */ lpstats->tot.iters = dy_lp->tot.iters ; lpstats->tot.pivs = dy_lp->tot.pivs ; return ; } void dy_dumpstats (ioid chn, bool echo, lpstats_struct *lpstats, consys_struct *orig_sys) /* This is a utility routine which will dump an lpstats_struct in a readable manner. Parameters: chn: file channnel for output echo: TRUE to echo to stdout, FALSE otherwise lpstats: the statistics structure orig_sys: The constraint system Returns: undefined */ { int i,j,m,n,ndx,tot ; int totvact,maxvact,minvact,totvdeact,maxvdeact,minvdeact ; int totcact,maxcact,mincact,totcdeact,maxcdeact,mincdeact ; int ineqcnt,nearcnt,perpcnt,farcnt ; int initallcact,initcact,fincact,right_init,wrong_init,right_fin,wrong_fin ; int rinear,winear,rfnear,wfnear, riperp,wiperp,rfperp,wfperp, rifar,wifar,rffar,wffar ; double anglei,degperbin,brklow,brkhi,temp ; contyp_enum ctypi ; bool initi,fini ; const char *rtnnme = "dy_dumpstats" ; double outbrks[] = { 30, 60, 85, 90, 95, 120, 150, 180 } ; int outbins = sizeof(outbrks)/sizeof(double) ; int outhist[sizeof(outbrks)/sizeof(int)+1] ; char outbuf[20] ; int histfld = 9 ; if (lpstats == NULL) { dyio_outfmt(chn,echo,"\n\n<< %s: NULL lpstats structure! >>\n",rtnnme) ; return ; } dyio_outfmt(chn,echo,"\n\nLP statistics:") ; dyio_outfmt(chn,echo,"\n Angle of constraints to objective (degrees):") ; dyio_outfmt(chn,echo,"\n\tmax: %g\tmin: %g\n", lpstats->angle.max,lpstats->angle.min) ; degperbin = 180/(DYSTATS_HISTBINS-1) ; j = 0 ; brkhi = 0 ; for (i = 0 ; i < outbins ; i++) { brklow = brkhi ; brkhi = outbrks[i] ; if (i < outbins/2) { (void) dyio_outfxd(outbuf,histfld,'c', "[%d-%d)",((int) brklow),((int) brkhi)) ; } else { (void) dyio_outfxd(outbuf,histfld,'c', "(%d-%d]",((int) brklow),((int) brkhi)) ; } dyio_outfmt(chn,echo," %s",outbuf) ; if (brkhi == 90) dyio_outfmt(chn,echo," [90] ") ; outhist[i] = 0 ; for ( ; j*degperbin < brkhi ; j++) { outhist[i] += lpstats->angle.hist[j] ; } } dyio_outchr(chn,echo,'\n') ; for (i = 0 ; i < outbins/2 ; i++) { (void) dyio_outfxd(outbuf,histfld,'c',"%d",outhist[i]) ; dyio_outfmt(chn,echo," %s",outbuf) ; } dyio_outfxd(outbuf,8,'c',"%d",lpstats->angle.hist[DYSTATS_HISTBINS-1]) ; dyio_outfmt(chn,echo," %s",outbuf) ; for ( ; i < outbins ; i++) { (void) dyio_outfxd(outbuf,histfld,'c',"%d",outhist[i]) ; dyio_outfmt(chn,echo," %s",outbuf) ; } dyio_outfmt(chn,echo, "\n Factoring: %d refactorisations",lpstats->factor.cnt) ; dyio_outfmt(chn,echo,"\n\trefactor interval (pivots): avg. %.2f\tmax %d", lpstats->factor.avgpivs,lpstats->factor.maxpivs) ; dyio_outfmt(chn,echo, "\n Pivot rejection: %d unstable, %d singular, max len. %d.", lpstats->pivrej.mad,lpstats->pivrej.sing,lpstats->pivrej.max) ; if (lpstats->pivrej.max > 0) { dyio_outfmt(chn,echo,"\n\tpivot tolerance: %d reductions, min. tol = %g.", lpstats->pivrej.pivtol_red,lpstats->pivrej.min_pivtol) ; dyio_outfmt(chn,echo,"\n\tpunts: %d called, %d returned.", lpstats->pivrej.puntcall,lpstats->pivrej.puntret) ; } dyio_outfmt(chn,echo,"\n Reduction of infeasibility:") ; dyio_outfmt(chn,echo," maximum number of infeasible vars: %d", lpstats->infeas.maxcnt) ; if (lpstats->infeas.maxcnt > 0) { tot = lpstats->infeas.chgcnt1+lpstats->infeas.chgcnt2 ; temp = ((double) lpstats->infeas.totpivs)/tot ; dyio_outfmt(chn,echo,"\n\tpivots to reduce: tot. %d, avg. %.2f, max %d", lpstats->infeas.totpivs,temp,lpstats->infeas.maxpivs) ; dyio_outfmt(chn,echo,"\n\tsingle change: %d, multiple change: %d", lpstats->infeas.chgcnt1,lpstats->infeas.chgcnt2) ; } dyio_outfmt(chn,echo,"\n Primal Multipivot: %d calls, %d sort, %d promote", lpstats->pmulti.cnt,lpstats->pmulti.nontrivial, lpstats->pmulti.promote) ; if (lpstats->pmulti.cnt > 0) { temp = ((float) lpstats->pmulti.cands)/lpstats->pmulti.cnt ; dyio_outfmt(chn,echo,"\n\tcandidates: tot. %d\tavg. %.2f", lpstats->pmulti.cands,temp) ; } dyio_outfmt(chn,echo, "\n Dual Multipivot: %d calls, %d promote, %d multipivot", lpstats->dmulti.cnt,lpstats->dmulti.promote, lpstats->dmulti.nontrivial) ; if (lpstats->dmulti.cnt > 0) { if (lpstats->dmulti.nontrivial > 0) { temp = ((float) lpstats->dmulti.pivrnks)/lpstats->dmulti.nontrivial ; } else { temp = 0 ; } dyio_outfmt(chn,echo, ", avg. rank %.2f, max %d",temp,lpstats->dmulti.maxrnk) ; temp = ((float) lpstats->dmulti.cands)/lpstats->dmulti.cnt ; dyio_outfmt(chn,echo,"\n\tcandidates: tot. %d\tavg. %.2f", lpstats->dmulti.cands,temp) ; temp = ((float) lpstats->dmulti.evals)/lpstats->dmulti.cnt ; dyio_outfmt(chn,echo,"\n\tcolumn evals: tot. %d\tavg. %.2f", lpstats->dmulti.evals,temp) ; temp = ((float) lpstats->dmulti.flips)/lpstats->dmulti.cnt ; dyio_outfmt(chn,echo,"\n\tbound flips: tot. %d\tavg. %.2f", lpstats->dmulti.flips,temp) ; } temp = ((float) lpstats->dmulti.flippable)/orig_sys->varcnt ; dyio_outfmt(chn,echo,"\n\tflippable vars: %d (%.2f%%)", lpstats->dmulti.flippable,temp*100) ; dyio_outfmt(chn,echo,"\n Degeneracy:") ; if (lpstats->pdegen[0].cnt == 0) { dyio_outfmt(chn,echo,"\n Primal: inactive") ; } else { dyio_outfmt(chn,echo, "\n Primal:\tLevel\tEntries\t Vars.\t\tPivots") ; dyio_outfmt(chn,echo,"\n\t\t\t\tAvg.\tMax\tTot.\tAvg.\tMax") ; for (ndx = 1 ; ndx <= lpstats->pdegen[0].cnt ; ndx++) { dyio_outfmt(chn,echo,"\n\t\t%d\t%d\t%.2f\t%d\t%d\t%.2f\t%d", ndx,lpstats->pdegen[ndx].cnt, lpstats->pdegen[ndx].avgsiz,lpstats->pdegen[ndx].maxsiz, lpstats->pdegen[ndx].totpivs,lpstats->pdegen[ndx].avgpivs, lpstats->pdegen[ndx].maxpivs) ; } dyio_outchr(chn,echo,'\n') ; } if (lpstats->ddegen[0].cnt == 0) { dyio_outfmt(chn,echo,"\n Dual: inactive") ; } else { dyio_outfmt(chn,echo,"\n Dual:\tLevel\tEntries\t Vars.\t\tPivots") ; dyio_outfmt(chn,echo,"\n\t\t\t\tAvg.\tMax\tTot.\tAvg.\tMax") ; for (ndx = 1 ; ndx <= lpstats->ddegen[0].cnt ; ndx++) { dyio_outfmt(chn,echo,"\n\t\t%d\t%d\t%.2f\t%d\t%d\t%.2f\t%d", ndx,lpstats->ddegen[ndx].cnt, lpstats->ddegen[ndx].avgsiz,lpstats->ddegen[ndx].maxsiz, lpstats->ddegen[ndx].totpivs,lpstats->ddegen[ndx].avgpivs, lpstats->ddegen[ndx].maxpivs) ; } } dyio_outchr(chn,echo,'\n') ; /* Run through the constraint management information and calculate totals, mins, and maxes, and information about how well we did guessing the correct initial constraint system. Note that it's possible, under fanatic constraint management, to deactivate/activate equalities. But we don't want to include them in information about the initial constraint system, where they're always included. */ m = orig_sys->concnt ; n = orig_sys->varcnt ; totcact = 0 ; totcdeact = 0 ; maxcact = 0 ; mincact = INT_MAX ; maxcdeact = 0 ; mincdeact = INT_MAX ; ineqcnt = 0 ; nearcnt = 0 ; perpcnt = 0 ; farcnt = 0 ; initallcact = 0 ; initcact = 0 ; fincact = 0 ; right_init = 0 ; wrong_init = 0 ; right_fin = 0 ; wrong_fin = 0 ; rinear = 0 ; winear = 0 ; rfnear = 0 ; wfnear = 0 ; riperp = 0 ; wiperp = 0 ; rfperp = 0 ; wfperp = 0 ; rifar = 0 ; wifar = 0 ; rffar = 0 ; wffar = 0 ; for (i = 1 ; i <= m ; i++) { j = lpstats->cons.actcnt[i] ; totcact += j ; if (maxcact < j) maxcact = j ; if (mincact > j) mincact = j ; j = lpstats->cons.deactcnt[i] ; totcdeact += j ; if (maxcdeact < j) maxcdeact = j ; if (mincdeact > j) mincdeact = j ; initi = lpstats->cons.init[i] ; if (initi == TRUE) initallcact++ ; ctypi = orig_sys->ctyp[i] ; if (ctypi == contypGE || ctypi == contypLE || ctypi == contypRNG) { ineqcnt++ ; anglei = lpstats->cons.angle[i] ; if (anglei < 90) { farcnt++ ; } else if (anglei > 90) { nearcnt++ ; } else { perpcnt++ ; } if (initi == TRUE) initcact++ ; fini = lpstats->cons.fin[i] ; if (fini == TRUE) fincact++ ; if (initi == fini) { if (initi == TRUE) { right_init++ ; if (anglei < 90) { rifar++ ; } else if (anglei > 90) { rinear++ ; } else { riperp++ ; } } else { right_fin++ ; if (anglei < 90) { rffar++ ; } else if (anglei > 90) { rfnear++ ; } else { rfperp++ ; } } } else if (initi == TRUE) { wrong_init++ ; if (anglei < 90) { wifar++ ; } else if (anglei > 90) { winear++ ; } else { wiperp++ ; } } else { wrong_fin++ ; if (anglei < 90) { wffar++ ; } else if (anglei > 90) { wfnear++ ; } else { wfperp++ ; } } } } totvact = 0 ; totvdeact = 0 ; maxvact = 0 ; minvact = INT_MAX ; maxvdeact = 0 ; minvdeact = INT_MAX ; for (j = 1 ; j <= n ; j++) { i = lpstats->vars.actcnt[j] ; totvact += i ; if (maxvact < i) maxvact = i ; if (minvact > i) minvact = i ; i = lpstats->vars.deactcnt[j] ; totvdeact += i ; if (maxvdeact < i) maxvdeact = i ; if (minvdeact > i) minvdeact = i ; } /* Dump per phase information. */ dyio_outfmt(chn,echo,"\n State\tEntry\tActivity\tAverage\n") ; for (i = dyPRIMAL1 ; i <= dyFORCEFULL ; i++) { j = lpstats->phasecnts[i] ; dyio_outfmt(chn,echo,"\n %2s%2s\t%5d", dy_prtlpphase(((dyphase_enum) i),TRUE), (lpstats->ini_simplex == ((dyphase_enum) i))?"* ":" ",j) ; temp = 0 ; switch (i) { case dyPRIMAL1: { if (j > 0) { temp = ((double) lpstats->p1.pivs)/j ; dyio_outfmt(chn,echo,"\t%8d\t%7.1f",lpstats->p1.pivs,temp) ; } break ; } case dyPRIMAL2: { if (j > 0) { temp = ((double) lpstats->p2.pivs)/j ; dyio_outfmt(chn,echo,"\t%8d\t%7.1f",lpstats->p2.pivs,temp) ; } break ; } case dyDUAL: { if (j > 0) { temp = ((double) lpstats->d2.pivs)/j ; dyio_outfmt(chn,echo,"\t%8d\t%7.1f",lpstats->d2.pivs,temp) ; } break ; } case dyPURGEVAR: { if (j > 0) { dyio_outfmt(chn,echo, "\t%8d\t%7.1f",totvdeact,((float) totvdeact)/j) ; } break ; } case dyADDVAR: { if (j > 0) { dyio_outfmt(chn,echo,"\t%8d\t%7.1f",totvact,((float) totvact)/j) ; } break ; } case dyPURGECON: { if (j > 0) { dyio_outfmt(chn,echo, "\t%8d\t%7.1f",totcdeact,((float) totcdeact)/j) ; } break ; } case dyADDCON: { if (j > 0) { dyio_outfmt(chn,echo,"\t%8d\t%7.1f",totcact-initallcact, ((float) (totcact-initallcact))/j) ; } break ; } } } dyio_outchr(chn,echo,'\n') ; /* Dump initial and final constraint summary information. */ dyio_outfmt(chn,echo,"\n Initial/Final Constraint System: ") ; dyio_outfmt(chn,echo,"%d inequalities, initial %d, final %d", ineqcnt,initcact,fincact) ; dyio_outfmt(chn,echo,"\n\t%d near, %d perp, %d far",nearcnt,perpcnt,farcnt) ; dyio_outfmt(chn,echo,"\n\ttotal: %d/%d active, %d/%d inactive.", right_init,wrong_fin,right_fin,wrong_init) ; dyio_outfmt(chn,echo,"\n\tnear: %d/%d active, %d/%d inactive.", rinear,wfnear,rfnear,winear) ; dyio_outfmt(chn,echo,"\n\tperp: %d/%d active, %d/%d inactive.", riperp,wfperp,rfperp,wiperp) ; dyio_outfmt(chn,echo,"\n\tfar: %d/%d active, %d/%d inactive.\n", rifar,wffar,rffar,wifar) ; /* That takes care of the summaries. Now the detailed statistics on constraints. */ dyio_outfmt(chn,echo, "\n Constraint\tType Angle\tInit\tAct\tDeact\tFinal\n") ; for (i = 1 ; i <= m ; i++) { dyio_outfmt(chn,echo,"\n%5d %s\t%2s %9.5f\t", i,consys_nme(orig_sys,'c',i,FALSE,NULL), consys_prtcontyp(orig_sys->ctyp[i]), lpstats->cons.angle[i]) ; if (lpstats->cons.init[i] == TRUE) dyio_outfmt(chn,echo,"Y") ; dyio_outfmt(chn,echo,"\t%d\t%d\t", lpstats->cons.actcnt[i],lpstats->cons.deactcnt[i]) ; if (lpstats->cons.fin[i] == TRUE) dyio_outfmt(chn,echo,"Y") ; } dyio_outchr(chn,echo,'\n') ; return ; } DyLP-1.10.4/DyLP/src/Dylp/dy_options.c0000644000175200017520000015200512253224475015726 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains generic routines to process simple options. In the main, these are called by the option processing routines that deal with the options file. */ #include "dylib_strrtns.h" #include "dylib_keytab.h" #include "dylib_bnfrdr.h" #include "dy_cmdint.h" #include "dylp.h" #include #include static char sccsid[] UNUSED = "@(#)options.c 3.5 09/25/04" ; static char svnid[] UNUSED = "$Id: dy_options.c 524 2013-12-15 03:59:57Z tkr $" ; /* Routines to acquire dylp's defaults and limits for options and tolerances. */ extern void dy_exposeOptDefaults(lpopts_struct **opts_lb, lpopts_struct **opts_dflt, lpopts_struct **opts_ub), dy_exposeTolDefaults(lptols_struct **tols_dflt) ; static bool string_opt (ioid cmdchn, bool cmdecho, char **str) /* Generic (and fairly trivial) routine to parse a string. Parameters: cmdchn: i/o id for reading commands cmdecho: true if commands should be echoed to stdout, false otherwise str: address where the string is to be placed. Returns: TRUE, barring some sort of parsing failure. */ { parse_any result ; const char *rtnnme = "string_opt" ; /* BNF to parse a string, returning (char *). */ static tdef(zid,bnfttID,0,NULL) ; static tref(zgetstring_zid,zid,bnfstore|bnfatsgn,0) ; static comphd(zgetstring_alt) = { compcnt(1), mkcref(zgetstring_zid) } ; static gdef(zgetstring_int,sizeof(char *),0,zgetstring_alt) ; static gref(zgetstring,zgetstring_int,0,0,NULLP) ; /* Initialise the reader, parse the string, and check for errors. */ rdrinit() ; if (parse(cmdchn,&zgetstring,&result) == FALSE) { rdrclear() ; errmsg(240,rtnnme,"zgetstring") ; return (FALSE) ; } dyio_outfmt(dy_logchn,cmdecho," %s",*(char **) result.g) ; dyio_flushio(dy_logchn,cmdecho) ; *str = *(char **) result.g ; /* Clean up and return. */ FREE(result.g) ; rdrclear() ; return (TRUE) ; } static bool integer_opt (ioid cmdchn, bool cmdecho, int *iloc) /* Generic (and fairly trivial) routine to parse an integer. Parameters: cmdchn: i/o id for reading commands cmdecho: true if commands should be echoed to stdout, false otherwise iloc: address where the integer is to be placed. Returns: TRUE, barring some sort of parsing failure. */ { parse_any result ; const char *rtnnme = "integer_opt" ; /* BNF to parse an integer, returning (int *). */ static tdef(zdnum,bnfttN,10,NULL) ; static tref(zgetnum_zdnum,zdnum,bnfstore,0) ; static comphd(zgetnum_alt) = { compcnt(1), mkcref(zgetnum_zdnum) } ; static gdef(zgetnum_int,sizeof(int),0,zgetnum_alt) ; static gref(zgetnum,zgetnum_int,0,0,NULLP) ; /* Initialise the reader, parse the integer, and check for errors. */ rdrinit() ; if (parse(cmdchn,&zgetnum,&result) == FALSE) { rdrclear() ; errmsg(240,rtnnme,"zgetnum") ; return (FALSE) ; } dyio_outfmt(dy_logchn,cmdecho," %d",*(int *) result.g) ; dyio_flushio(dy_logchn,cmdecho) ; *iloc = *(int *) result.g ; /* Clean up and return. */ FREE(result.g) ; rdrclear() ; return (TRUE) ; } static bool double_opt (ioid cmdchn, bool cmdecho, double *rloc) /* Generic (and fairly trivial) routine to parse a real as a double. A double will provide about 15 -- 17 significant decimal digits. Parameters: cmdchn: i/o id for reading commands cmdecho: true if commands should be echoed to stdout, false otherwise rloc: address where the real is to be placed. Returns: TRUE, barring some sort of parsing failure. */ { parse_any result ; const char *rtnnme = "double_opt" ; /* BNF to parse a real, returning (double *). */ static tdef(zdnum,bnfttN,10,NULL) ; static tref(zgetnum_zdnum,zdnum,bnfdbl|bnfstore,0) ; static comphd(zgetnum_alt) = { compcnt(1), mkcref(zgetnum_zdnum) } ; static gdef(zgetnum_int,sizeof(double),0,zgetnum_alt) ; static gref(zgetnum,zgetnum_int,0,0,NULLP) ; /* Initialise the reader, parse the real, and check for errors. */ rdrinit() ; if (parse(cmdchn,&zgetnum,&result) == FALSE) { rdrclear() ; errmsg(240,rtnnme,"zgetnum") ; return (FALSE) ; } dyio_outfmt(dy_logchn,cmdecho," %g",*(double *) result.g) ; dyio_flushio(dy_logchn,cmdecho) ; *rloc = *(double *) result.g ; /* Clean up and return. */ FREE(result.g) ; rdrclear() ; return (TRUE) ; } static UNUSED bool real_opt (ioid cmdchn, bool cmdecho, float *rloc) /* Generic (and fairly trivial) routine to parse a real as a float. A float will provide about 6 -- 9 significant decimal digits. Parameters: cmdchn: i/o id for reading commands cmdecho: true if commands should be echoed to stdout, false otherwise rloc: address where the real is to be placed. Returns: TRUE, barring some sort of parsing failure. */ { parse_any result ; const char *rtnnme = "real_opt" ; /* BNF to parse a real, returning (float *). */ static tdef(zdnum,bnfttN,10,NULL) ; static tref(zgetnum_zdnum,zdnum,bnfflt|bnfstore,0) ; static comphd(zgetnum_alt) = { compcnt(1), mkcref(zgetnum_zdnum) } ; static gdef(zgetnum_int,sizeof(float),0,zgetnum_alt) ; static gref(zgetnum,zgetnum_int,0,0,NULLP) ; /* Initialise the reader, parse the real, and check for errors. */ rdrinit() ; if (parse(cmdchn,&zgetnum,&result) == FALSE) { rdrclear() ; errmsg(240,rtnnme,"zgetnum") ; return (FALSE) ; } dyio_outfmt(dy_logchn,cmdecho," %g",*(float *) result.g) ; dyio_flushio(dy_logchn,cmdecho) ; *rloc = *(float *) result.g ; /* Clean up and return. */ FREE(result.g) ; rdrclear() ; return (TRUE) ; } static bool bool_opt (ioid cmdchn, bool cmdecho, bool *bloc) /* Generic (and fairly trivial) routine to parse a boolean. But ... we have to take some care here because of the way bool is handled. If you look at the typedef for bool in dylib_std.h, you'll see that it can change in size --- this is necessary for C++ compatibility in the COIN OSI layer implementation. But a bnfIdef_struct (an immediate) holds its value as an int, and when doimmediate tries to load a field, it casts to an int. To make a long story short, the val field in a boolopt_struct must be an int. Parameters: cmdchn: i/o id for reading commands cmdecho: true if commands should be echoed to stdout, false otherwise bloc: address where the boolean is to be placed. Returns: TRUE, barring some sort of parsing failure. */ { struct boolopt_struct { char *str ; int val ; } *boolopt ; parse_any result ; const char *rtnnme = "bool_opt" ; /* BNF to parse a boolean, returning the string. */ static idef(ziTRUE,TRUE) ; static idef(ziFALSE,FALSE) ; static tdef(zTRUE,bnfttID,0,"TRUE") ; static tdef(zFALSE,bnfttID,0,"FALSE") ; static iref(zparsebool_ziTRUE,ziTRUE,mkoff(struct boolopt_struct,val)) ; static iref(zparsebool_ziFALSE,ziFALSE,mkoff(struct boolopt_struct,val)) ; static tref(zparsebool_zTRUE,zTRUE,bnfstore|bnfatsgn|bnfmin, mkoff(struct boolopt_struct,str)) ; static tref(zparsebool_zFALSE,zFALSE,bnfstore|bnfatsgn|bnfmin, mkoff(struct boolopt_struct,str)) ; static comphd(zparsebool_alt1) = { compcnt(2), mkcref(zparsebool_zFALSE), mkcref(zparsebool_ziFALSE) } ; static comphd(zparsebool_alt2) = { compcnt(2), mkcref(zparsebool_zTRUE), mkcref(zparsebool_ziTRUE) } ; static althd(zparsebool_alts) = { altcnt(2), mkaref(zparsebool_alt1), mkaref(zparsebool_alt2) } ; static npdef(zparsebool,zparsebool_alts) ; static npref(zparsebool_ref,zparsebool,0,NULLP) ; static comphd(zgetbool_alt) = { compcnt(1), mkcref(zparsebool_ref) } ; static gdef(zgetbool_int,sizeof(struct boolopt_struct),0,zgetbool_alt) ; static gref(zgetbool,zgetbool_int,0,0,NULLP) ; /* Initialise the reader, parse the string, and check for errors. */ rdrinit() ; if (parse(cmdchn,&zgetbool,&result) == FALSE) { rdrclear() ; errmsg(240,rtnnme,"zgetbool") ; return (FALSE) ; } boolopt = (struct boolopt_struct *) result.g ; rdrclear() ; dyio_outfmt(dy_logchn,cmdecho," %s",boolopt->str) ; dyio_flushio(dy_logchn,cmdecho) ; *bloc = boolopt->val ; /* Clean up and return. */ STRFREE(boolopt->str) ; FREE(boolopt) ; return (TRUE) ; } /* Option processing routines. These are exported only to cmdint.c:docmds where they are called. In turn, they will often make use of one of the set of generic option processing routines above. */ cmd_retval dy_printopt (ioid cmdchn, bool cmdecho, const char *keywd, lpopts_struct *lpopts, lptols_struct *lptols) /* This routine handles the manifold parameters that control just how much dylp tells you while it's working. This routine doesn't return an error, even when it can't parse the command, on the general theory that print levels aren't really critical. It will complain, however. The bnf for the print option command is: ::= lpprint ::= basis | conmgmt | crash | degen | dual | force | major | phase1 | phase2 | pivoting | pivreject | pricing | rays | scaling | setup | soln | tableau | varmgmt ::= Parameters: cmdchn: i/o id for reading commands cmdecho: true if commands should be echoed to stdout, false otherwise keywd: The command keyword lpopts: Options structure; will be adjusted lptols: Tolerances structure; will be adjusted Returns: cmdOK */ { char *what,cmdstr[50] ; int code,dflt,lb,ub,*opt ; lpopts_struct *opts_lb,*opts_dflt,*opts_ub ; const char *rtnnme = "dy_printopt" ; /* A lookup table with the various keywords recognised by the print command. */ enum prntcodes { poINV = 0, poBASIS, poCONMGMT, poCRASH, poDEGEN, poDUAL, poFORCE, poMAJOR, poPHASE1, poPHASE2, poPIVOTING, poPIVREJ, poPRICING, poRAYS, poSCALING, poSETUP, poSOLN, poTABLEAU, poVARMGMT } prntcode ; static keytab_entry prntkwds[] = { { "basis", 1, (int) poBASIS }, { "conmgmt", 2, (int) poCONMGMT }, { "crash", 2, (int) poCRASH }, { "degen", 2, (int) poDEGEN }, { "dual", 2, (int) poDUAL }, { "force", 2, (int) poFORCE }, { "major", 1, (int) poMAJOR }, { "phase1", 6, (int) poPHASE1 }, { "phase2", 6, (int) poPHASE2 }, { "pivoting", 4, (int) poPIVOTING }, { "pivreject", 4, (int) poPIVREJ }, { "pricing", 2, (int) poPRICING }, { "rays", 1, (int) poRAYS }, { "scaling", 2, (int) poSCALING }, { "setup", 2, (int) poSETUP }, { "soln", 2, (int) poSOLN }, { "tableau", 1, (int) poTABLEAU }, { "varmgmt", 1, (int) poVARMGMT } } ; static int numprntcodes = (sizeof prntkwds/sizeof (keytab_entry)) ; /* Acquire the option and tolerance limits and defaults. */ dy_exposeOptDefaults(&opts_lb,&opts_dflt,&opts_ub) ; /* Now to work. Parse off the keyword and see if we can look it up. */ prntcode = poINV ; if (string_opt(cmdchn,cmdecho,&what) == TRUE) { code = ambig(what,prntkwds,numprntcodes) ; if (code < 0) { if (code < -1) errmsg(233,rtnnme,what) ; else errmsg(234,rtnnme,what) ; } else prntcode = (enum prntcodes) code ; } /* Set the various variables for each command. */ dyio_outfxd(cmdstr,-((int) (sizeof(cmdstr)-1)),'l',"%s %s",keywd,what) ; switch (prntcode) { case poCONMGMT: { opt = &lpopts->print.conmgmt ; dflt = opts_dflt->print.conmgmt ; lb = opts_lb->print.conmgmt ; ub = opts_ub->print.conmgmt ; break ; } case poCRASH: { opt = &lpopts->print.crash ; dflt = opts_dflt->print.crash ; lb = opts_lb->print.crash ; ub = opts_ub->print.crash ; break ; } case poDEGEN: { opt = &lpopts->print.degen ; dflt = opts_dflt->print.degen ; lb = opts_lb->print.degen ; ub = opts_ub->print.degen ; break ; } case poBASIS: { opt = &lpopts->print.basis ; dflt = opts_dflt->print.basis ; lb = opts_lb->print.basis ; ub = opts_ub->print.basis ; break ; } case poMAJOR: { opt = &lpopts->print.major ; dflt = opts_dflt->print.major ; lb = opts_lb->print.major ; ub = opts_ub->print.major ; break ; } case poPHASE1: { opt = &lpopts->print.phase1 ; dflt = opts_dflt->print.phase1 ; lb = opts_lb->print.phase1 ; ub = opts_ub->print.phase1 ; break ; } case poPHASE2: { opt = &lpopts->print.phase2 ; dflt = opts_dflt->print.phase2 ; lb = opts_lb->print.phase2 ; ub = opts_ub->print.phase2 ; break ; } case poDUAL: { opt = &lpopts->print.dual ; dflt = opts_dflt->print.dual ; lb = opts_lb->print.dual ; ub = opts_ub->print.dual ; break ; } case poFORCE: { opt = &lpopts->print.force ; dflt = opts_dflt->print.force ; lb = opts_lb->print.force ; ub = opts_ub->print.force ; break ; } case poPIVOTING: { opt = &lpopts->print.pivoting ; dflt = opts_dflt->print.pivoting ; lb = opts_lb->print.pivoting ; ub = opts_ub->print.pivoting ; break ; } case poPIVREJ: { opt = &lpopts->print.pivreject ; dflt = opts_dflt->print.pivreject ; lb = opts_lb->print.pivreject ; ub = opts_ub->print.pivreject ; break ; } case poPRICING: { opt = &lpopts->print.pricing ; dflt = opts_dflt->print.pricing ; lb = opts_lb->print.pricing ; ub = opts_ub->print.pricing ; break ; } case poRAYS: { opt = &lpopts->print.rays ; dflt = opts_dflt->print.rays ; lb = opts_lb->print.rays ; ub = opts_ub->print.rays ; break ; } case poSCALING: { opt = &lpopts->print.scaling ; dflt = opts_dflt->print.scaling ; lb = opts_lb->print.scaling ; ub = opts_ub->print.scaling ; break ; } case poSETUP: { opt = &lpopts->print.setup ; dflt = opts_dflt->print.setup ; lb = opts_lb->print.setup ; ub = opts_ub->print.setup ; break ; } case poSOLN: { opt = &lpopts->print.soln ; dflt = opts_dflt->print.soln ; lb = opts_lb->print.soln ; ub = opts_ub->print.soln ; break ; } case poTABLEAU: { opt = &lpopts->print.tableau ; dflt = opts_dflt->print.tableau ; lb = opts_lb->print.tableau ; ub = opts_ub->print.tableau ; break ; } case poVARMGMT: { opt = &lpopts->print.varmgmt ; dflt = opts_dflt->print.varmgmt ; lb = opts_lb->print.varmgmt ; ub = opts_ub->print.varmgmt ; break ; } default: { errmsg(236,rtnnme,"","keyword",keywd) ; return (cmdOK) ; } } /* Last but not least, the actual work. A negative value is taken as a request from the user to be told the default value. */ if (integer_opt(cmdchn,cmdecho,opt) == TRUE) { if (*opt >= 0) { if (*opt > ub) { dywarn(241,rtnnme,lb,cmdstr,ub,*opt,ub) ; *opt = ub ; } } else { dywarn(243,rtnnme,cmdstr,dflt) ; } } else { errmsg(236,rtnnme,"","parameter",keywd) ; } STRFREE(what) ; return (cmdOK) ; } static bool lpctl_active (ioid cmdchn, bool cmdecho, lpopts_struct *lpopts, lptols_struct *lptols) /* This routine processes the 'active' subcommand, which sets values that determine the initial size of dylp's copy of the constraint system. The values are expressed in terms of fractions of the number of inequalities and number of variables in the original system. The bnf for the active subcommand is: ::= lpcontrol active ; ::= variables | constraints By the time this routine is called, `lpcontrol active' is already parsed. Parameters: cmdchn: i/o id for reading commands cmdecho: true if commands should be echoed to stdout, false otherwise lpopts: Options structure; will be adjusted lptols: Tolerances structure; will be adjusted Returns: TRUE if the remainder of the command parses without error, FALSE otherwise. */ { struct actfrac_struct { int var_seen ; float varfrac ; int con_seen ; float confrac ; } *actfrac ; lpopts_struct *opts_lb,*opts_dflt,*opts_ub ; parse_any result ; const char *rtnnme = "lpctl_active" ; /* BNF for the active command. */ static tdef(zcomma,bnfttD,0,",") ; static tref(zcomma_ref,zcomma,0,0) ; static tdef(zdnum,bnfttN,10,NULL) ; static tref(zactfrac_varfrac,zdnum,bnfstore|bnfflt, mkoff(struct actfrac_struct,varfrac)) ; static tref(zactfrac_confrac,zdnum,bnfstore|bnfflt, mkoff(struct actfrac_struct,confrac)) ; static tdef(zvar,bnfttID,0,"variables") ; static tref(zvar_ref,zvar,bnfmin,0) ; static tdef(zcon,bnfttID,0,"constraints") ; static tref(zcon_ref,zcon,bnfmin,0) ; static idef(ziTRUE,TRUE) ; static iref(zactfrac_varseen,ziTRUE,mkoff(struct actfrac_struct,var_seen)) ; static iref(zactfrac_conseen,ziTRUE,mkoff(struct actfrac_struct,con_seen)) ; static comphd(zactfrac_alt1) = { compcnt(3), mkcref(zvar_ref),mkcref(zactfrac_varseen),mkcref(zactfrac_varfrac) } ; static comphd(zactfrac_alt2) = { compcnt(3), mkcref(zcon_ref),mkcref(zactfrac_conseen),mkcref(zactfrac_confrac) } ; static althd(zactfrac_alts) = { altcnt(2), mkaref(zactfrac_alt1),mkaref(zactfrac_alt2) } ; static npdef(zactfrac,zactfrac_alts) ; static npref(zactfrac_list,zactfrac,bnflst,zcomma_ref) ; static comphd(zactfracs_alt) = { compcnt(1), mkcref(zactfrac_list) } ; static gdef(zactfracs_int,sizeof(struct actfrac_struct),0,zactfracs_alt) ; static gref(zactfracs,zactfracs_int,0,0,NULLP) ; dy_exposeOptDefaults(&opts_lb,&opts_dflt,&opts_ub) ; /* Now to work. Initialise the reader, attempt to parse the command, and check for errors. */ rdrinit() ; if (parse(cmdchn,&zactfracs,&result) == FALSE) { rdrclear() ; errmsg(240,rtnnme,"zactfracs") ; return (FALSE) ; } actfrac = (struct actfrac_struct *) result.g ; rdrclear() ; /* Process the results. */ if (actfrac->var_seen == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho," variables %.2f",actfrac->varfrac) ; if (actfrac->con_seen == TRUE) dyio_outchr(dy_logchn,dy_gtxecho,',') ; if (actfrac->varfrac >= 0) { if (actfrac->varfrac > opts_ub->active.vars) { dywarn(244,rtnnme,opts_lb->active.vars,"variables", opts_ub->active.vars,actfrac->varfrac,opts_ub->active.vars) ; lpopts->active.vars = opts_ub->active.vars ; } else lpopts->active.vars = actfrac->varfrac ; } else { dywarn(245,rtnnme,"variables",opts_dflt->active.vars) ; } } if (actfrac->con_seen == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho," constraints %.2f",actfrac->confrac) ; if (actfrac->confrac >= 0) { if (actfrac->confrac > opts_ub->active.cons) { dywarn(244,rtnnme,opts_lb->active.cons,"constraints", opts_ub->active.cons,actfrac->confrac,opts_ub->active.cons) ; lpopts->active.cons = opts_ub->active.cons ; } else lpopts->active.cons = actfrac->confrac ; } else { dywarn(245,rtnnme,"constraints",opts_dflt->active.cons) ; } } FREE(actfrac) ; return (TRUE) ; } static bool lpctl_finpurge (ioid cmdchn, bool cmdecho, lpopts_struct *lpopts, lptols_struct *lptols) /* This routine processes the "final" subcommand, which currently controls only whether dylp does a final round of variable and/or constraint deactivation after finding an optimal solution. Note that this option works even when the problem has been solved with the fullsys option. This is intended for use in branch&cut, where we usually want to solve the initial lp with fullsys, then continue with dynamic lp. The bnf for the final purge subcommand is ::= lpcontrol final purge ; ::= ::= variables | constraints ::= true | false By the time this routine is called, `lpcontrol final' is already parsed. Parameters: cmdchn: i/o id for reading commands cmdecho: true if commands should be echoed to stdout, false otherwise lpopts: Options structure; will be adjusted lptols: Tolerances structure; will be adjusted Returns: TRUE if the remainder of the command parses without error, FALSE otherwise. */ { struct finpurge_struct { int cons ; int vars ; } ; struct finpurge_struct *optvals ; lpopts_struct *opts_lb,*opts_dflt,*opts_ub ; parse_any result ; const char *rtnnme = "lpctl_finpurge" ; /* BNF for the final purge command. */ static tdef(znil,bnfttNIL,0,NULL) ; static tref(znil_ref,znil,0,0) ; static tdef(zcomma,bnfttD,0,",") ; static tref(zcomma_ref,zcomma,0,0) ; static tdef(zpurge,bnfttID,0,"purge") ; static tref(zpurge_ref,zpurge,bnfmin,0) ; static tdef(zvar,bnfttID,0,"variables") ; static tref(zvar_ref,zvar,bnfmin,0) ; static tdef(zcon,bnfttID,0,"constraints") ; static tref(zcon_ref,zcon,bnfmin,0) ; static idef(ziminus1,-1) ; static idef(ziTRUE,TRUE) ; static idef(ziFALSE,FALSE) ; static tdef(zTRUE,bnfttID,0,"TRUE") ; static tref(zTRUE_ref,zTRUE,bnfmin,0) ; static tdef(zFALSE,bnfttID,0,"FALSE") ; static tref(zFALSE_ref,zFALSE,bnfmin,0) ; static iref(zwhatvar_ziTRUE,ziTRUE,mkoff(struct finpurge_struct,vars)) ; static iref(zwhatvar_ziFALSE,ziFALSE,mkoff(struct finpurge_struct,vars)) ; static comphd(zwhat_alt1) = { compcnt(3), mkcref(zvar_ref),mkcref(zTRUE_ref),mkcref(zwhatvar_ziTRUE) } ; static comphd(zwhat_alt2) = { compcnt(3), mkcref(zvar_ref),mkcref(zFALSE_ref),mkcref(zwhatvar_ziFALSE) } ; static iref(zwhatcon_ziTRUE,ziTRUE,mkoff(struct finpurge_struct,cons)) ; static iref(zwhatcon_ziFALSE,ziFALSE,mkoff(struct finpurge_struct,cons)) ; static comphd(zwhat_alt3) = { compcnt(3), mkcref(zcon_ref),mkcref(zFALSE_ref),mkcref(zwhatcon_ziFALSE) } ; static comphd(zwhat_alt4) = { compcnt(3), mkcref(zcon_ref),mkcref(zTRUE_ref),mkcref(zwhatcon_ziTRUE) } ; static comphd(zwhat_alt5) = { compcnt(1), mkcref(znil_ref) } ; static althd(zwhat_alts) = { altcnt(5), mkaref(zwhat_alt1),mkaref(zwhat_alt2),mkaref(zwhat_alt3), mkaref(zwhat_alt4),mkaref(zwhat_alt5) } ; static npdef(zwhat,zwhat_alts) ; static npref(zfinpurge_what,zwhat,bnflst,zcomma_ref) ; static iref(zfinpurge_varminus1,ziminus1, mkoff(struct finpurge_struct,vars)) ; static iref(zfinpurge_conminus1,ziminus1, mkoff(struct finpurge_struct,cons)) ; static comphd(zfinpurge_alt) = { compcnt(4),mkcref(zfinpurge_varminus1), mkcref(zfinpurge_conminus1),mkcref(zpurge_ref),mkcref(zfinpurge_what) } ; static gdef(zfinpurge_def,sizeof(struct finpurge_struct),0,zfinpurge_alt) ; static gref(zfinpurge,zfinpurge_def,0,0,NULLP) ; dy_exposeOptDefaults(&opts_lb,&opts_dflt,&opts_ub) ; /* Now to work. Initialise the reader, attempt to parse the command, and check for errors. */ rdrinit() ; if (parse(cmdchn,&zfinpurge,&result) == FALSE) { rdrclear() ; errmsg(240,rtnnme,"zfinspec") ; return (FALSE) ; } optvals = (struct finpurge_struct *) result.g ; rdrclear() ; /* Process the results. An empty command is taken as a request for the default value. */ if (optvals->vars < 0 && optvals->cons < 0) { dywarn(246,rtnnme,"final variable deactivation", (opts_dflt->finpurge.vars == TRUE)?"true":"false") ; dywarn(246,rtnnme,"final constraint deactivation", (opts_dflt->finpurge.cons == TRUE)?"true":"false") ; return (TRUE) ; } /* Something is specified. Check variables, then constraints. */ if (optvals->vars >= 0) { lpopts->finpurge.vars = (bool) optvals->vars ; dyio_outfmt(dy_logchn,dy_gtxecho,"variables %s", (lpopts->finpurge.vars == TRUE)?"true":"false") ; } if (optvals->cons >= 0) { lpopts->finpurge.cons = (bool) optvals->cons ; if (optvals->vars >= 0) dyio_outfmt(dy_logchn,dy_gtxecho,", ") ; dyio_outfmt(dy_logchn,dy_gtxecho,"constraints %s", (lpopts->finpurge.cons == TRUE)?"true":"false") ; } FREE(optvals) ; return (TRUE) ; } static bool lpctl_load (ioid cmdchn, bool cmdecho, lpopts_struct *lpopts, lptols_struct *lptols) /* This routine processes the 'load' subcommand, which sets values that control how dylp populates the constraint system in a cold start. The bnf for the load subcommand is: ::= lpcontrol load [] [] ; ::= ::= ::= ::= ::= [ | ) ::= [ | ) By the time this routine is called, `lpcontrol load' is already parsed. If only the fraction is specified, the interval defaults are used. Similarly, if there's only an interval specification, the fraction default remains. But if only one interval is specified, the second interval is marked invalid. If you want two, you have to specify two. Parameters: cmdchn: i/o id for reading commands cmdecho: true if commands should be echoed to stdout, false otherwise lpopts: Options structure; will be adjusted lptols: Tolerances structure; will be adjusted Returns: TRUE if the remainder of the command parses without error, FALSE otherwise. */ { struct interval_struct { struct interval_struct *nxt ; char ldelim ; double ub ; double lb ; char rdelim ; } ; struct interval_struct *intv,*temp ; struct load_struct { int frac_valid ; double frac ; struct interval_struct *intervals ; } ; struct load_struct *loadspec ; lpopts_struct *opts_lb,*opts_dflt,*opts_ub ; char intvstr[50] ; int intvndx,intvlen ; parse_any result ; const char *rtnnme = "lpctl_load" ; /* BNF for the load command. */ static tdef(znil,bnfttNIL,0,NULL) ; static tref(znil_ref,znil,0,0) ; static tdef(zcomma,bnfttD,0,",") ; static tref(zcomma_ref,zcomma,0,0) ; static tdef(zlsq,bnfttD,0,"[") ; static tref(zlsq_ref,zlsq,0,0) ; static tdef(zlpar,bnfttD,0,"(") ; static tref(zlpar_ref,zlpar,0,0) ; static tdef(zrsq,bnfttD,0,"]") ; static tref(zrsq_ref,zrsq,0,0) ; static tdef(zrpar,bnfttD,0,")") ; static tref(zrpar_ref,zrpar,0,0) ; static tdef(zdnum,bnfttN,10,NULL) ; static comphd(zldelim_alt1) = { compcnt(1),mkcref(zlsq_ref) } ; static comphd(zldelim_alt2) = { compcnt(1),mkcref(zlpar_ref) } ; static althd(zldelim_alts) = { altcnt(2), mkaref(zldelim_alt1),mkaref(zldelim_alt2) } ; static pdef(zldelim,zldelim_alts) ; static comphd(zrdelim_alt1) = { compcnt(1),mkcref(zrsq_ref) } ; static comphd(zrdelim_alt2) = { compcnt(1),mkcref(zrpar_ref) } ; static althd(zrdelim_alts) = { altcnt(2), mkaref(zrdelim_alt1),mkaref(zrdelim_alt2) } ; static pdef(zrdelim,zrdelim_alts) ; static pref(zinterval_ldelim,zldelim,bnfstore|bnfexact, mkoff(struct interval_struct,ldelim),NULLP) ; static tref(zinterval_ub,zdnum,bnfstore|bnfdbl, mkoff(struct interval_struct,ub)) ; static tref(zinterval_lb,zdnum,bnfstore|bnfdbl, mkoff(struct interval_struct,lb)) ; static pref(zinterval_rdelim,zrdelim,bnfstore|bnfexact, mkoff(struct interval_struct,rdelim),NULLP) ; static comphd(zinterval_alt) = { compcnt(4), mkcref(zinterval_ldelim), mkcref(zinterval_ub),mkcref(zinterval_lb), mkcref(zinterval_rdelim) } ; static gdef(zinterval,sizeof(struct interval_struct), mkoff(struct interval_struct,nxt),zinterval_alt) ; static tref(zfraction_dnum,zdnum,bnfstore|bnfdbl, mkoff(struct load_struct,frac)) ; static idef(ziTRUE,TRUE) ; static iref(zfrac_valid,ziTRUE,mkoff(struct load_struct,frac_valid)) ; static comphd(zfraction_alt1) = { compcnt(2), mkcref(zfraction_dnum),mkcref(zfrac_valid) } ; static comphd(zfraction_alt2) = { compcnt(1),mkcref(znil_ref) } ; static althd(zfraction_alts) = { altcnt(2), mkaref(zfraction_alt1),mkaref(zfraction_alt2) } ; static pdef(zfraction,zfraction_alts) ; static pref(zloadbody_fraction,zfraction,0,0,NULLP) ; static gref(zloadbody_interval,zinterval,bnfstore|bnflst, mkoff(struct load_struct,intervals),zcomma_ref) ; static comphd(zloadbody_alt1) = { compcnt(2), mkcref(zloadbody_fraction),mkcref(zloadbody_interval) } ; static comphd(zloadbody_alt2) = { compcnt(1),mkcref(zloadbody_fraction) } ; static althd(zloadbody_alts) = { altcnt(2), mkaref(zloadbody_alt1),mkaref(zloadbody_alt2) } ; static npdef(zloadbody,zloadbody_alts) ; static npref(zloadbody_ref,zloadbody,0,NULLP) ; static comphd(zload_alt) = { compcnt(1),mkcref(zloadbody_ref) } ; static gdef(zload_def,sizeof(struct load_struct),0,zload_alt) ; static gref(zload,zload_def,0,0,NULLP) ; dy_exposeOptDefaults(&opts_lb,&opts_dflt,&opts_ub) ; /* Now to work. Initialise the reader, attempt to parse the command, and check for errors. */ rdrinit() ; if (parse(cmdchn,&zload,&result) == FALSE) { rdrclear() ; errmsg(240,rtnnme,"zload") ; return (FALSE) ; } loadspec = (struct load_struct *) result.g ; rdrclear() ; /* Process the results. An empty command is taken as a request for the default value. */ if (loadspec->frac_valid == FALSE && loadspec->intervals == NULL) { dywarn(245,rtnnme,"initial load fraction",opts_dflt->initcons.frac) ; intvndx = 0 ; intvlen = sizeof(intvstr)-1 ; if (opts_dflt->initcons.i1uopen == TRUE) intvstr[intvndx] = '(' ; else intvstr[intvndx] = '[' ; intvndx++ ; intvndx += dyio_outfxd(&intvstr[intvndx],-(intvlen-intvndx), 'l',"%.5f %.5f", opts_dflt->initcons.i1u,opts_dflt->initcons.i1l) ; if (opts_dflt->initcons.i1lopen == TRUE) intvstr[intvndx] = ')' ; else intvstr[intvndx] = ']' ; intvndx++ ; if (opts_dflt->initcons.i2valid == TRUE) { if (opts_dflt->initcons.i2uopen == TRUE) intvstr[intvndx] = '(' ; else intvstr[intvndx] = '[' ; intvndx++ ; intvndx += dyio_outfxd(&intvstr[intvndx],-(intvlen-intvndx), 'l',"%.5f %.5f", opts_dflt->initcons.i2u,opts_dflt->initcons.i2l) ; if (opts_dflt->initcons.i2lopen == TRUE) intvstr[intvndx] = ')' ; else intvstr[intvndx] = ']' ; intvndx++ ; } intvstr[intvndx] = '\0' ; dywarn(246,rtnnme,"load interval",intvstr) ; return (TRUE) ; } /* The load fraction first. */ if (loadspec->frac_valid == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho," %.2f",loadspec->frac) ; if (loadspec->frac < opts_lb->initcons.frac || loadspec->frac > opts_ub->initcons.frac) { dywarn(244,rtnnme,opts_lb->initcons.frac,"initial load fraction", opts_ub->initcons.frac,loadspec->frac,opts_ub->initcons.frac) ; lpopts->initcons.frac = opts_ub->initcons.frac ; } else { lpopts->initcons.frac = loadspec->frac ; } } /* Now process the intervals, if present. For each interval, check the values and load lpopts->initcons. */ intv = loadspec->intervals ; FREE(loadspec) ; if (intv == NULL) return (TRUE) ; dyio_outfmt(dy_logchn,dy_gtxecho," %c %.5f %.5f %c", intv->ldelim,intv->ub,intv->lb,intv->rdelim) ; if (intv->ldelim == '(') lpopts->initcons.i1uopen = TRUE ; else lpopts->initcons.i1uopen = FALSE ; if (intv->ub > opts_ub->initcons.i1u || intv->ub < opts_lb->initcons.i1u) { dywarn(244,rtnnme,opts_lb->initcons.i1u,"initial load angle bound", opts_ub->initcons.i1u,intv->ub,opts_ub->initcons.i1u) ; lpopts->initcons.i1u = opts_ub->initcons.i1u ; } else { lpopts->initcons.i1u = intv->ub ; } if (intv->lb > opts_ub->initcons.i1l || intv->lb < opts_lb->initcons.i1l) { dywarn(244,rtnnme,opts_lb->initcons.i1l,"initial load angle bound", opts_ub->initcons.i1l,intv->lb,opts_lb->initcons.i1l) ; lpopts->initcons.i1l = opts_lb->initcons.i1l ; } else { lpopts->initcons.i1l = intv->lb ; } if (intv->rdelim == ')') lpopts->initcons.i1lopen = TRUE ; else lpopts->initcons.i1lopen = FALSE ; /* If we have only one interval, we're done, otherwise repeat the whole thing for the second interval. */ temp = intv->nxt ; FREE(intv) ; if (temp == NULL) { lpopts->initcons.i2valid = FALSE ; return (TRUE) ; } intv = temp ; dyio_outfmt(dy_logchn,dy_gtxecho,", %c %.5f %.5f %c", intv->ldelim,intv->ub,intv->lb,intv->rdelim) ; if (intv->ldelim == '(') lpopts->initcons.i2uopen = TRUE ; else lpopts->initcons.i2uopen = FALSE ; if (intv->ub > opts_ub->initcons.i2u || intv->ub < opts_lb->initcons.i2u) { dywarn(244,rtnnme,opts_lb->initcons.i2u,"initial load angle bound", opts_ub->initcons.i2u,intv->ub,opts_ub->initcons.i2u) ; lpopts->initcons.i2u = opts_ub->initcons.i2u ; } else { lpopts->initcons.i2u = intv->ub ; } if (intv->lb > opts_ub->initcons.i2l || intv->lb < opts_lb->initcons.i2l) { dywarn(244,rtnnme,opts_lb->initcons.i2l,"initial load angle bound", opts_ub->initcons.i2l,intv->lb,opts_lb->initcons.i2l) ; lpopts->initcons.i2l = opts_lb->initcons.i2l ; } else { lpopts->initcons.i2l = intv->lb ; } if (intv->rdelim == ')') lpopts->initcons.i2lopen = TRUE ; else lpopts->initcons.i2lopen = FALSE ; FREE(intv) ; return (TRUE) ; } static bool lpctl_infinity (ioid cmdchn, bool cmdecho, lpopts_struct *lpopts, lptols_struct *lptols) /* This routine handles the `lpcontrol infinity' command. The reason it's broken out is so that we can use the strings IEEE and DBL_MAX to specify the most common values for infinite and finite infinity. The syntax will also accept an arbitrary (double) value. The bnf for the infinity subcommand is: ::= lpcontrol infinity [] ::= IEEE | DBL_MAX | By the time this routine is called, `lpcontrol infinity' is already parsed. A value of 0 is taken as a request for the current value. Parameters: cmdchn: i/o id for reading commands cmdecho: true if commands should be echoed to stdout, false otherwise lpopts: Options structure; will be adjusted lptols: Tolerances structure; will be adjusted Returns: TRUE if the remainder of the command parses without error, FALSE otherwise. */ { struct infinity_struct { int code ; double val ; } ; struct infinity_struct *infinityspec ; lptols_struct *tols_dflt ; double infinity ; parse_any result ; const char *rtnnme = "lpctl_infinity" ; /* BNF for the infinity command. */ static tdef(zIEEE,bnfttID,0,"IEEE") ; static tref(zIEEE_ref,zIEEE,bnfmin,0) ; static idef(ziOne,1) ; static tdef(zDBLMAX,bnfttID,0,"DBL_MAX") ; static tref(zDBLMAX_ref,zDBLMAX,bnfmin,0) ; static idef(ziTwo,2) ; static tdef(zdnum,bnfttN,10,NULL) ; static idef(ziThree,3) ; static iref(zinfbody_IEEE,ziOne,mkoff(struct infinity_struct,code)) ; static comphd(zinfbody_alt1) = { compcnt(2), mkcref(zIEEE_ref),mkcref(zinfbody_IEEE) } ; static iref(zinfbody_DBLMAX,ziTwo,mkoff(struct infinity_struct,code)) ; static comphd(zinfbody_alt2) = { compcnt(2), mkcref(zDBLMAX_ref),mkcref(zinfbody_DBLMAX) } ; static iref(zinfbody_dbl,ziThree,mkoff(struct infinity_struct,code)) ; static tref(zinfbody_dblval,zdnum,bnfstore|bnfdbl, mkoff(struct infinity_struct,val)) ; static comphd(zinfbody_alt3) = { compcnt(2), mkcref(zinfbody_dblval),mkcref(zinfbody_dbl) } ; static althd(zinfbody_alts) = { altcnt(3), mkaref(zinfbody_alt1),mkaref(zinfbody_alt2), mkaref(zinfbody_alt3) } ; static npdef(zinfbody,zinfbody_alts) ; static npref(zinfbody_ref,zinfbody,0,NULLP) ; static comphd(zinfinitydef_alt) = { compcnt(1),mkcref(zinfbody_ref) } ; static gdef(zinfinity_def,sizeof(struct infinity_struct),0,zinfinitydef_alt) ; static gref(zinfinity,zinfinity_def,0,0,NULLP) ; dy_exposeTolDefaults(&tols_dflt) ; /* Now to work. Initialise the reader, attempt to parse the command, and check for errors. */ rdrinit() ; if (parse(cmdchn,&zinfinity,&result) == FALSE) { rdrclear() ; errmsg(240,rtnnme,"zinfinity") ; return (FALSE) ; } infinityspec = (struct infinity_struct *) result.g ; rdrclear() ; /* Process the results. A value of 0 is taken as a request for the default. Note that we expect HUGE_VAL to be IEEE infinity. We get the default value from lptols, because the default isn't set until we call dy_defaults. */ switch (infinityspec->code) { case 1: { dyio_outfmt(dy_logchn,dy_gtxecho," IEEE (%g)",HUGE_VAL) ; infinity = HUGE_VAL ; if (finite(infinity)) { dywarn(314,rtnnme,infinity) ; } break ; } case 2: { dyio_outfmt(dy_logchn,dy_gtxecho," DBL_MAX (%g)",DBL_MAX) ; infinity = DBL_MAX ; break ; } case 3: { dyio_outfmt(dy_logchn,dy_gtxecho," %g",infinityspec->val) ; infinity = infinityspec->val ; if (infinity == 0) { infinity = lptols->inf ; dywarn(245,rtnnme,"infinity",infinity) ; } else if (infinity < 0) { errmsg(242,rtnnme,infinity,"infinity") ; infinity = tols_dflt->inf ; } break ; } default: { FREE(infinityspec) ; return (FALSE) ; } } lptols->inf = infinity ; FREE(infinityspec) ; return (TRUE) ; } cmd_retval dy_ctlopt (ioid cmdchn, bool cmdecho, const char *keywd, lpopts_struct *lpopts, lptols_struct *lptols) /* This routine handles various control options, each taking a single parameter (TRUE/FALSE, a number, etc.) If the routine can't understand the option, it returns an error. The bnf for the control option command is: ::= lpcontrol ::= actconlim | actconlvl | active | actvarlim | bogus | check | cold | coldbasis | coldvars | costz | dchk | deactconlvl | degen | degenlite | degenpivs | dfeas | dualacttype | dualmultipiv | factor | final | forcecopy | fullsys | groom | idle | infinity | iters | load | patch | pchk | pfeas | pivot | primmultipiv | purgecon | purgevar | reframe | scaling | scan | swing | usedual | warm | zero ::= | | | The tolerances bogus, costz, dchk, pchk, pivot, purgecon, purgevar, reframe, swing, and zero expect a double. Infinity is a bit more complicated, and further parsing is handled by its own routine. The options cold, degen, forcecopy, fullsys, patch, usedual, and warm expect a boolean. Coldbasis, deactconlvl, degenlite, and groom expect a string from the appropriate list of defined keywords (see below), and the others expect an integer. Active, final, and load are more complicated, and are handled by private parsing routines. Parameters: cmdchn: i/o id for reading commands cmdecho: true if commands should be echoed to stdout, false otherwise keywd: The command keyword lpopts: Options structure; will be adjusted lptols: Tolerances structure; will be adjusted Returns: cmdOK or cmdHALTERROR */ { char *what,cmdstr[50] ; int code,intdflt,intlb,intub,*intopt,numkwds ; double *toler,tolerdflt ; double dblopt ; bool booldflt,*boolopt ; keytab_entry *kwds ; cmd_retval retval ; lpopts_struct *opts_lb,*opts_dflt,*opts_ub ; lptols_struct *tols_dflt ; const char *rtnnme = "dy_ctlopt" ; /* A lookup table with the various keywords recognised by the control command. */ enum ctlcodes { ctlINV = 0, ctlACTIVESZE, ctlADDVARLIM, ctlBOGUS, ctlCHECK, ctlCOLD, ctlCOLDBASIS, ctlCOLDVARS, ctlCONACTLIM, ctlCONACTLVL, ctlCONDEACTLVL, ctlCONTEXT, ctlCPYORIG, ctlCOSTZ, ctlDCHK, ctlDEGEN, ctlDEGENLITE, ctlDEGENPIVS, ctlDFEAS, ctlDUALADD, ctlDUALMULTIPIV, ctlFACTOR, ctlFINAL, ctlFULLSYS, ctlGROOM, ctlINFINITY, ctlITER, ctlIDLE, ctlLOAD, ctlPATCH, ctlPCHK, ctlPFEAS, ctlPIVOT, ctlPRIMMULTIPIV, ctlPURGE, ctlPURGEVAR, ctlREFRAME, ctlSCALING, ctlSCAN, ctlSWING, ctlUSEDUAL, ctlWARM, ctlZERO } ctlcode ; static keytab_entry ctlkwds[] = { { "actconlim", 8, (int) ctlCONACTLIM }, { "actconlvl", 8, (int) ctlCONACTLVL }, { "active", 4, (int) ctlACTIVESZE }, { "actvarlim", 4, (int) ctlADDVARLIM }, { "antidegen", 2, (int) ctlDEGEN }, { "bogus", 1, (int) ctlBOGUS }, { "check", 2, (int) ctlCHECK }, { "cold", 5, (int) ctlCOLD }, { "coldbasis", 5, (int) ctlCOLDBASIS }, { "coldvars", 5, (int) ctlCOLDVARS }, { "context", 3, (int) ctlCONTEXT }, { "costz", 3, (int) ctlCOSTZ }, { "dchk", 2, (int) ctlDCHK }, { "deactconlvl", 3, (int) ctlCONDEACTLVL }, { "degenlite", 6, (int) ctlDEGENLITE }, { "degenpivs", 6, (int) ctlDEGENPIVS }, { "dfeas", 2, (int) ctlDFEAS }, { "dualacttype", 5, (int) ctlDUALADD }, { "dualmultipiv", 5, (int) ctlDUALMULTIPIV }, { "factor", 2, (int) ctlFACTOR }, { "final", 2, (int) ctlFINAL }, { "forcecopy", 2, (int) ctlCPYORIG }, { "fullsys", 2, (int) ctlFULLSYS }, { "groom", 1, (int) ctlGROOM }, { "idle", 2, (int) ctlIDLE }, { "infinity", 2, (int) ctlINFINITY }, { "iters", 2, (int) ctlITER }, { "load", 1, (int) ctlLOAD }, { "patch", 2, (int) ctlPATCH }, { "pchk", 2, (int) ctlPCHK }, { "pfeas", 2, (int) ctlPFEAS }, { "pivot", 2, (int) ctlPIVOT }, { "primmultipiv", 5, (int) ctlPRIMMULTIPIV }, { "purgecon", 6, (int) ctlPURGE }, { "purgevar", 6, (int) ctlPURGEVAR }, { "reframe", 1, (int) ctlREFRAME }, { "scaling", 4, (int) ctlSCALING }, { "scan", 4, (int) ctlSCAN }, { "swing", 2, (int) ctlSWING }, { "usedual", 1, (int) ctlUSEDUAL }, { "warm", 1, (int) ctlWARM }, { "zero", 1, (int) ctlZERO } } ; static int numctlkwds = (sizeof ctlkwds/sizeof (keytab_entry)) ; /* Keywords used by the groom option; the option value is used only by the groombasis routine, so there's no real motivation for symbolic codes. */ static keytab_entry groomkwds[] = { { "abort", 1, 2 }, { "silent", 1, 0 }, { "warn", 1, 1 } } ; static int numgroomkwds = (sizeof groomkwds/sizeof (keytab_entry)) ; /* Keywords used by the coldbasis option. */ static keytab_entry basiskwds[] = { { "architectural", 1, ibARCH }, { "logical", 1, ibLOGICAL }, { "slack", 1, ibSLACK } } ; static int numbasiskwds = (sizeof basiskwds/sizeof (keytab_entry)) ; /* Keywords used by the context option */ static keytab_entry contextkwds[] = { { "single", 1, cxSINGLELP }, { "initial", 1, cxINITIALLP }, { "bandc", 1, cxBANDC } } ; static int numcontextkwds = (sizeof contextkwds/sizeof (keytab_entry)) ; /* Keywords used by the degenlite option; the option value is used only by the primalout and dualin routines, so there's no real motivation for symbolic codes. */ static keytab_entry litekwds[] = { { "alignedge", 6, 3 }, { "alignobj", 6, 2 }, { "perpedge", 5, 5 }, { "perpobj", 5, 4 }, { "pivot", 6, 1 }, { "pivotabort", 6, 0 } } ; static int numlitekwds = (sizeof litekwds/sizeof (keytab_entry)) ; /* Keywords used by the deactconlvl option; the option value is used only by the dy_purgecon routine, so there's no real motivation for symbolic codes. */ static keytab_entry deactkwds[] = { { "aggressive", 1, 1 }, { "fanatic", 1, 2 }, { "normal", 1, 0 } } ; static int numdeactkwds = (sizeof deactkwds/sizeof (keytab_entry)) ; /* Initialisation, so gcc doesn't complain. */ kwds = NULL ; numkwds = 0 ; intdflt = -INT_MAX ; intlb = INT_MAX ; intub = -INT_MAX ; intopt = NULL ; toler = NULL ; tolerdflt = quiet_nan(0) ; boolopt = NULL ; /* Acquire the option and tolerance limits and defaults. */ dy_exposeOptDefaults(&opts_lb,&opts_dflt,&opts_ub) ; dy_exposeTolDefaults(&tols_dflt) ; /* Now to work. Parse off the keyword and see if we can look it up. */ ctlcode = ctlINV ; if (string_opt(cmdchn,cmdecho,&what) == TRUE) { code = ambig(what,ctlkwds,numctlkwds) ; if (code < 0) { if (code < -1) errmsg(233,rtnnme,what) ; else errmsg(234,rtnnme,what) ; } else ctlcode = (enum ctlcodes) code ; } /* Set the various variables for each command. There are a few exceptions to the pattern, down at the end of the switch, which call command-specific routines for more complicated processing. */ dyio_outfxd(cmdstr,-((int) (sizeof(cmdstr)-1)),'l',"%s %s",keywd,what) ; switch (ctlcode) { case ctlADDVARLIM: { intopt = &lpopts->addvar ; intdflt = opts_dflt->addvar ; intlb = opts_lb->addvar ; intub = opts_ub->addvar ; break ; } case ctlBOGUS: { toler = &lptols->bogus ; tolerdflt = tols_dflt->bogus ; break ; } case ctlCHECK: { intopt = &lpopts->check ; intdflt = opts_dflt->check ; intlb = opts_lb->check ; intub = opts_ub->check ; break ; } case ctlCOLD: { boolopt = &lpopts->forcecold ; booldflt = opts_dflt->forcecold ; break ; } case ctlCOLDBASIS: { intopt = (int *) &lpopts->coldbasis ; intdflt = opts_dflt->coldbasis ; intlb = opts_lb->coldbasis ; intub = opts_ub->coldbasis ; numkwds = numbasiskwds ; kwds = basiskwds ; break ; } case ctlCOLDVARS: { intopt = &lpopts->coldvars ; intdflt = opts_dflt->coldvars ; intlb = opts_lb->coldvars ; intub = opts_ub->coldvars ; break ; } case ctlCONACTLIM: { intopt = &lpopts->con.actlim ; intdflt = opts_dflt->con.actlim ; intlb = opts_lb->con.actlim ; intub = opts_ub->con.actlim ; break ; } case ctlCONACTLVL: { intopt = &lpopts->con.actlvl ; intdflt = opts_dflt->con.actlvl ; intlb = opts_lb->con.actlvl ; intub = opts_ub->con.actlvl ; break ; } case ctlCONTEXT: { intopt = (int *) &lpopts->context ; intdflt = opts_dflt->context ; intlb = opts_lb->context ; intub = opts_ub->context ; numkwds = numcontextkwds ; kwds = contextkwds ; break ; } case ctlCOSTZ: { toler = &lptols->cost ; tolerdflt = tols_dflt->cost ; break ; } case ctlCPYORIG: { boolopt = &lpopts->copyorigsys ; booldflt = opts_dflt->copyorigsys ; break ; } case ctlDCHK: { toler = &lptols->dchk ; tolerdflt = tols_dflt->dchk ; break ; } case ctlDEGEN: { boolopt = &lpopts->degen ; booldflt = opts_dflt->degen ; break ; } case ctlDEGENLITE: { intopt = &lpopts->degenlite ; intdflt = opts_dflt->degenlite ; intlb = opts_lb->degenlite ; intub = opts_ub->degenlite ; numkwds = numlitekwds ; kwds = litekwds ; break ; } case ctlDEGENPIVS: { intopt = &lpopts->degenpivlim ; intdflt = opts_dflt->degenpivlim ; intlb = opts_lb->degenpivlim ; intub = opts_ub->degenpivlim ; break ; } case ctlDFEAS: { toler = &lptols->dfeas_scale ; tolerdflt = tols_dflt->dfeas_scale ; break ; } case ctlDUALADD: { intopt = &lpopts->dualadd ; intdflt = opts_dflt->dualadd ; intlb = opts_lb->dualadd ; intub = opts_ub->dualadd ; break ; } case ctlFACTOR: { intopt = &lpopts->factor ; intdflt = opts_dflt->factor ; intlb = opts_lb->factor ; intub = opts_ub->factor ; break ; } case ctlFULLSYS: { boolopt = &lpopts->fullsys ; booldflt = opts_dflt->fullsys ; break ; } case ctlGROOM: { intopt = &lpopts->groom ; intdflt = opts_dflt->groom ; intlb = opts_lb->groom ; intub = opts_ub->groom ; numkwds = numgroomkwds ; kwds = groomkwds ; break ; } case ctlITER: { intopt = &lpopts->iterlim ; intdflt = opts_dflt->iterlim ; intlb = opts_lb->iterlim ; intub = opts_ub->iterlim ; break ; } case ctlIDLE: { intopt = &lpopts->idlelim ; intdflt = opts_dflt->idlelim ; intlb = opts_lb->idlelim ; intub = opts_ub->idlelim ; break ; } case ctlDUALMULTIPIV: { intopt = &lpopts->dpsel.strat ; intdflt = opts_dflt->dpsel.strat ; intlb = opts_lb->dpsel.strat ; intub = opts_ub->dpsel.strat ; break ; } case ctlPRIMMULTIPIV: { intopt = &lpopts->ppsel.strat ; intdflt = opts_dflt->ppsel.strat ; intlb = opts_lb->ppsel.strat ; intub = opts_ub->ppsel.strat ; break ; } case ctlPATCH: { boolopt = &lpopts->patch ; booldflt = opts_dflt->patch ; break ; } case ctlPCHK: { toler = &lptols->pchk ; tolerdflt = tols_dflt->pchk ; break ; } case ctlPFEAS: { toler = &lptols->pfeas_scale ; tolerdflt = tols_dflt->pfeas_scale ; break ; } case ctlPIVOT: { toler = &lptols->pivot ; tolerdflt = tols_dflt->pivot ; break ; } case ctlPURGE: { toler = &lptols->purge ; tolerdflt = tols_dflt->purge ; break ; } case ctlCONDEACTLVL: { intopt = &lpopts->con.deactlvl ; intdflt = opts_dflt->con.deactlvl ; intlb = opts_lb->con.deactlvl ; intub = opts_ub->con.deactlvl ; numkwds = numdeactkwds ; kwds = deactkwds ; break ; } case ctlPURGEVAR: { toler = &lptols->purgevar ; tolerdflt = tols_dflt->purgevar ; break ; } case ctlREFRAME: { toler = &lptols->reframe ; tolerdflt = tols_dflt->reframe ; break ; } case ctlSCALING: { intopt = &lpopts->scaling ; intdflt = opts_dflt->scaling ; intlb = opts_lb->scaling ; intub = opts_ub->scaling ; break ; } case ctlSCAN: { intopt = &lpopts->scan ; intdflt = opts_dflt->scan ; intlb = opts_lb->scan ; intub = opts_ub->scan ; break ; } case ctlSWING: { toler = &lptols->swing ; tolerdflt = tols_dflt->swing ; break ; } case ctlUSEDUAL: { boolopt = &lpopts->usedual ; booldflt = opts_dflt->usedual ; break ; } case ctlWARM: { boolopt = &lpopts->forcewarm ; booldflt = opts_dflt->forcewarm ; break ; } case ctlZERO: { toler = &lptols->zero ; tolerdflt = tols_dflt->zero ; break ; } case ctlACTIVESZE: { booldflt = lpctl_active(cmdchn,cmdecho,lpopts,lptols) ; if (booldflt == TRUE) { return (cmdOK) ; } else { return (cmdHALTERROR) ; } } case ctlINFINITY: { booldflt = lpctl_infinity(cmdchn,cmdecho,lpopts,lptols) ; if (booldflt == TRUE) { return (cmdOK) ; } else { return (cmdHALTERROR) ; } } case ctlLOAD: { booldflt = lpctl_load(cmdchn,cmdecho,lpopts,lptols) ; if (booldflt == TRUE) { return (cmdOK) ; } else { return (cmdHALTERROR) ; } } case ctlFINAL: { booldflt = lpctl_finpurge(cmdchn,cmdecho,lpopts,lptols) ; if (booldflt == TRUE) { return (cmdOK) ; } else { return (cmdHALTERROR) ; } } default: { errmsg(236,rtnnme,"","keyword",keywd) ; STRFREE(what) ; return (cmdHALTERROR) ; } } /* Last but not least, the actual work. For an integer option or a tolerance, a negative value is taken as a request from the user to be told the default value. Further, for tolerances, 0 is not acceptable. For coldvars and factor, gripe about a violation of the upper bound, but don't enforce it. An upper bound of -1 is `no upper bound' for the integer-valued options. Assume the worst, so that we have to explicitly set a successful return code. */ retval = cmdHALTERROR ; switch (ctlcode) { case ctlADDVARLIM: case ctlCHECK: case ctlCONACTLIM: case ctlCONACTLVL: case ctlCONTEXT: case ctlDEGENPIVS: case ctlDUALADD: case ctlDUALMULTIPIV: case ctlITER: case ctlIDLE: case ctlPRIMMULTIPIV: case ctlSCALING: case ctlSCAN: { if (integer_opt(cmdchn,cmdecho,intopt) == TRUE) { if (*intopt >= 0) { if (intub > 0 && *intopt > intub) { dywarn(241,rtnnme,intlb,cmdstr,intub,*intopt,intub) ; *intopt = intub ; } } else { dywarn(243,rtnnme,cmdstr,intdflt) ; } retval = cmdOK ; } else { errmsg(236,rtnnme,"","parameter",keywd) ; } break ; } case ctlCOLDVARS: case ctlFACTOR: { if (integer_opt(cmdchn,cmdecho,intopt) == TRUE) { if (*intopt >= 0) { if (intub > 0 && *intopt > intub) { dywarn(241,rtnnme,intlb,cmdstr,intub,*intopt,intub) ; } } else { dywarn(243,rtnnme,cmdstr,intdflt) ; } retval = cmdOK ; } else { errmsg(236,rtnnme,"","parameter",keywd) ; } break ; } case ctlCOLD: case ctlCPYORIG: case ctlDEGEN: case ctlFULLSYS: case ctlPATCH: case ctlUSEDUAL: case ctlWARM: { if (bool_opt(cmdchn,cmdecho,boolopt) == TRUE) { retval = cmdOK ; } else { errmsg(236,rtnnme,"","parameter",keywd) ; } break ; } case ctlBOGUS: case ctlCOSTZ: case ctlDCHK: case ctlDFEAS: case ctlPCHK: case ctlPFEAS: case ctlPIVOT: case ctlPURGE: case ctlPURGEVAR: case ctlREFRAME: case ctlSWING: case ctlZERO: { if (double_opt(cmdchn,cmdecho,&dblopt) == TRUE) { if (dblopt <= 0) { dywarn(245,rtnnme,cmdstr,tolerdflt) ; } else { *toler = dblopt ; } retval = cmdOK ; } else { errmsg(236,rtnnme,"","parameter",keywd) ; } break ; } case ctlGROOM: case ctlCOLDBASIS: case ctlDEGENLITE: case ctlCONDEACTLVL: { if (string_opt(cmdchn,cmdecho,&what) == TRUE) { code = ambig(what,kwds,numkwds) ; if (code < 0) { if (code < -1) errmsg(233,rtnnme,what) ; else errmsg(234,rtnnme,what) ; } else { *intopt = code ; retval = cmdOK ; } } else { errmsg(236,rtnnme,"","parameter",cmdstr) ; } break ; } default: { errmsg(1,rtnnme,__LINE__) ; break ; } } STRFREE(what) ; return (retval) ; } DyLP-1.10.4/DyLP/src/Dylp/Makefile.am0000644000175200017520000000523612243462606015431 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 491 2006-05-19 20:37:52Z andreasw $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign EXTRA_DIST = dy_errmsgs.txt ######################################################################## # libDylp # ######################################################################## # Name of the library compiled in this directory. We want it to be installed # in the $libdir directory lib_LTLIBRARIES = libDylp.la # List all source files for this library, including headers libDylp_la_SOURCES = \ dy_consys.h \ dy_consys_io.c \ dy_consys_mathutils.c \ dy_consys_scaling.c \ dy_consys_utils.c \ dy_basis.c \ dy_bound.c \ dy_cmdint.c dy_cmdint.h \ dy_coldstart.c \ dy_conmgmt.c \ dy_dual.c \ dy_dualmultipivot.c \ dy_dualpivot.c \ dy_duenna.c \ dy_force.c \ dy_hotstart.c \ dylp.c dylp.h \ dylp_io.c \ dylp_utils.c \ dy_options.c \ dy_penalty.c \ dy_pivreject.c \ dy_primal.c \ dy_primalmultipivot.c \ dy_primalpivot.c \ dy_rays.c \ dy_scaling.c \ dy_setup.c \ dy_solutions.c \ dy_statistics.c \ dy_tableau.c \ dy_varmgmt.c \ dy_warmstart.c \ glpinv.c glpinv.h \ glplib1.c \ glplib2.c \ glplib3.c \ glplib4.c \ glplib.h \ glpluf.c glpluf.h \ dy_vector.h \ dy_vector_utils.c # This is for libtool libDylp_la_LDFLAGS = $(LT_LDFLAGS) # We want to have also the objects from the DylpStdLib in this library libDylp_la_LIBADD = ../DylpStdLib/libDylpStdLib.la if DEPENDENCY_LINKING libDylp_la_LIBADD += $(DYLPLIB_LIBS) endif # Since automake is not doing this on its own, we need to declare the # dependencies to the subdirectory libraries here libDylp_la_DEPENDENCIES = ../DylpStdLib/libDylpStdLib.la # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../DylpStdLib` # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/DylpStdLib ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ dy_cmdint.h \ dy_consys.h \ dylp.h \ dy_vector.h DyLP-1.10.4/DyLP/src/Dylp/glpluf.c0000644000175200017520000021370111507440660015026 0ustar coincoin/* glpluf.c */ /*---------------------------------------------------------------------- -- Copyright (C) 2000, 2001, 2002 Andrew Makhorin , -- Department for Applied Informatics, Moscow Aviation -- Institute, Moscow, Russia. All rights reserved. -- -- This file is a part of GLPK (GNU Linear Programming Kit). -- -- Licensed under the Eclipse Public License (EPL) by permission of the -- author for inclusion in the DyLP LP distribution. ----------------------------------------------------------------------*/ #ifndef UNUSED # if defined(_GNU_SOURCE) || defined(__GNUC__) # define UNUSED __attribute__((unused)) # else # define UNUSED # endif #endif static char sccsid[] UNUSED = "@(#)glpluf.c 1.2 09/25/04" ; static char svnid[] UNUSED = "$Id: glpluf.c 407 2010-12-31 20:48:48Z lou $" ; #include #include #include #include "glplib.h" #include "glpluf.h" /*---------------------------------------------------------------------- -- luf_create - create LU-factorization. -- -- *Synopsis* -- -- #include "glpluf.h" -- LUF *luf_create(int n, int sv_size); -- -- *Description* -- -- The routine luf_create creates LU-factorization data structure for -- a matrix of the order n. Initially the factorization corresponds to -- the unity matrix (F = V = P = Q = I, so A = I). -- -- The parameter sv_size specifies initial size of the sparse vector -- area (SVA) in locations. If sv_size = 0, the routine uses a default -- initial size of SVA. -- -- *Returns* -- -- The routine returns a pointer to the created LU-factorization data -- structure, which represents the unity matrix of the order n. */ LUF *luf_create(int n, int sv_size) { LUF *luf; int i, j, k; if (n < 1) fault("luf_create: n = %d; invalid parameter", n); if (sv_size < 0) fault("luf_create: sv_size = %d; invalid parameter", sv_size); if (sv_size == 0) sv_size = 5 * (n + 10); luf = umalloc(sizeof(LUF)); luf->n = n; luf->valid = 1; /* matrix F in row-wise format (initially F = I) */ luf->fr_ptr = ucalloc(1+n, sizeof(int)); luf->fr_len = ucalloc(1+n, sizeof(int)); for (i = 1; i <= n; i++) { luf->fr_ptr[i] = sv_size + 1; luf->fr_len[i] = 0; } /* matrix F in column-wise format (initially F = I) */ luf->fc_ptr = ucalloc(1+n, sizeof(int)); luf->fc_len = ucalloc(1+n, sizeof(int)); for (j = 1; j <= n; j++) { luf->fc_ptr[j] = sv_size + 1; luf->fc_len[j] = 0; } /* matrix V in row-wise format (initially V = I) */ luf->vr_ptr = ucalloc(1+n, sizeof(int)); luf->vr_len = ucalloc(1+n, sizeof(int)); luf->vr_cap = ucalloc(1+n, sizeof(int)); luf->vr_piv = ucalloc(1+n, sizeof(double)); for (i = 1; i <= n; i++) { luf->vr_ptr[i] = 1; luf->vr_len[i] = 0; luf->vr_cap[i] = 0; luf->vr_piv[i] = 1.0; } /* matrix V in column-wise format (initially V = I) */ luf->vc_ptr = ucalloc(1+n, sizeof(int)); luf->vc_len = ucalloc(1+n, sizeof(int)); luf->vc_cap = ucalloc(1+n, sizeof(int)); for (j = 1; j <= n; j++) { luf->vc_ptr[j] = 1; luf->vc_len[j] = 0; luf->vc_cap[j] = 0; } /* matrix P (initially P = I) */ luf->pp_row = ucalloc(1+n, sizeof(int)); luf->pp_col = ucalloc(1+n, sizeof(int)); for (k = 1; k <= n; k++) { luf->pp_row[k] = k; luf->pp_col[k] = k; } /* matrix Q (initially Q = I) */ luf->qq_row = ucalloc(1+n, sizeof(int)); luf->qq_col = ucalloc(1+n, sizeof(int)); for (k = 1; k <= n; k++) { luf->qq_row[k] = k; luf->qq_col[k] = k; } /* sparse vector area (initially all locations are free) */ luf->sv_size = sv_size; luf->sv_beg = 1; luf->sv_end = sv_size + 1; luf->sv_ndx = ucalloc(1+sv_size, sizeof(int)); luf->sv_val = ucalloc(1+sv_size, sizeof(double)); /* initially all rows and columns of the matrix V are empty, and therefore the order 1, ..., n, n+1, ..., n+n is used */ luf->sv_head = 1; luf->sv_tail = n+n; luf->sv_prev = ucalloc(1+n+n, sizeof(int)); luf->sv_next = ucalloc(1+n+n, sizeof(int)); for (k = 1; k <= n+n; k++) { luf->sv_prev[k] = k-1; luf->sv_next[k] = k+1; } luf->sv_next[n+n] = 0; /* allocate working arrays */ luf->flag = ucalloc(1+n, sizeof(int)); luf->work = ucalloc(1+n, sizeof(double)); /* set default values of control parameters */ luf->new_sva = 0; luf->piv_tol = 0.10; luf->piv_lim = 4; luf->suhl = 1; luf->eps_tol = 1e-15; luf->max_gro = 1e+12; /* set statistics for the initial factorization */ luf->nnz_a = n; luf->nnz_f = 0; luf->nnz_v = 0; luf->max_a = 1.0; luf->big_v = 1.0; luf->rank = n; return luf; } /*---------------------------------------------------------------------- -- luf_defrag_sva - defragment the sparse vector area. -- -- *Synopsis* -- -- #include "glpluf.h" -- void luf_defrag_sva(LUF *luf); -- -- *Description* -- -- The routine luf_defrag_sva defragments the sparse vector area (SVA) -- gathering all unused locations in one continuous extent. In order to -- do that the routine moves all unused locations from the left part of -- SVA (which contains rows and columns of the matrix V) to the middle -- part (which contains free locations). This is attained by relocating -- elements of rows and columns of the matrix V toward the beginning of -- the left part. -- -- NOTE that this "garbage collection" involves changing row and column -- pointers of the matrix V. */ void luf_defrag_sva(LUF *luf) { int n = luf->n; int *vr_ptr = luf->vr_ptr; int *vr_len = luf->vr_len; int *vr_cap = luf->vr_cap; int *vc_ptr = luf->vc_ptr; int *vc_len = luf->vc_len; int *vc_cap = luf->vc_cap; int *sv_ndx = luf->sv_ndx; double *sv_val = luf->sv_val; int *sv_next = luf->sv_next; int sv_beg = 1; int i, j, k; /* skip rows and columns, which needn't to be relocated */ for (k = luf->sv_head; k != 0; k = sv_next[k]) { if (k <= n) { /* i-th row of the matrix V */ i = k; if (vr_ptr[i] != sv_beg) break; vr_cap[i] = vr_len[i]; sv_beg += vr_cap[i]; } else { /* j-th column of the matrix V */ j = k - n; if (vc_ptr[j] != sv_beg) break; vc_cap[j] = vc_len[j]; sv_beg += vc_cap[j]; } } /* relocate other rows and columns in order to gather all unused locations in one continuous extent */ for (k = k; k != 0; k = sv_next[k]) { if (k <= n) { /* i-th row of the matrix V */ i = k; memmove(&sv_ndx[sv_beg], &sv_ndx[vr_ptr[i]], vr_len[i] * sizeof(int)); memmove(&sv_val[sv_beg], &sv_val[vr_ptr[i]], vr_len[i] * sizeof(double)); vr_ptr[i] = sv_beg; vr_cap[i] = vr_len[i]; sv_beg += vr_cap[i]; } else { /* j-th column of the matrix V */ j = k - n; memmove(&sv_ndx[sv_beg], &sv_ndx[vc_ptr[j]], vc_len[j] * sizeof(int)); memmove(&sv_val[sv_beg], &sv_val[vc_ptr[j]], vc_len[j] * sizeof(double)); vc_ptr[j] = sv_beg; vc_cap[j] = vc_len[j]; sv_beg += vc_cap[j]; } } /* set new pointer to the beginning of the free part */ luf->sv_beg = sv_beg; return; } /*---------------------------------------------------------------------- -- luf_enlarge_row - enlarge row capacity. -- -- *Synopsis* -- -- #include "glpluf.h" -- int luf_enlarge_row(LUF *luf, int i, int cap); -- -- *Description* -- -- The routine luf_enlarge_row enlarges capacity of the i-th row of the -- matrix V to cap locations (assuming that its current capacity is less -- than cap). In order to do that the routine relocates elements of the -- i-th row to the end of the left part of SVA (which contains rows and -- columns of the matrix V) and then expands the left part by allocating -- cap free locations from the free part. If there are less than cap -- free locations, the routine defragments the sparse vector area. -- -- Due to "garbage collection" this operation may involve changing row -- and column pointers of the matrix V. -- -- *Returns* -- -- If no error occurred, the routine returns zero. Otherwise, in case of -- overflow of the sparse vector area, the routine returns non-zero. */ int luf_enlarge_row(LUF *luf, int i, int cap) { int n = luf->n; int *vr_ptr = luf->vr_ptr; int *vr_len = luf->vr_len; int *vr_cap = luf->vr_cap; int *vc_cap = luf->vc_cap; int *sv_ndx = luf->sv_ndx; double *sv_val = luf->sv_val; int *sv_prev = luf->sv_prev; int *sv_next = luf->sv_next; int ret = 0; int cur, k, kk; insist(1 <= i && i <= n); insist(vr_cap[i] < cap); /* if there are less than cap free locations, defragment SVA */ if (luf->sv_end - luf->sv_beg < cap) { luf_defrag_sva(luf); if (luf->sv_end - luf->sv_beg < cap) { ret = 1; goto done; } } /* save current capacity of the i-th row */ cur = vr_cap[i]; /* copy existing elements to the beginning of the free part */ memmove(&sv_ndx[luf->sv_beg], &sv_ndx[vr_ptr[i]], vr_len[i] * sizeof(int)); memmove(&sv_val[luf->sv_beg], &sv_val[vr_ptr[i]], vr_len[i] * sizeof(double)); /* set new pointer and new capacity of the i-th row */ vr_ptr[i] = luf->sv_beg; vr_cap[i] = cap; /* set new pointer to the beginning of the free part */ luf->sv_beg += cap; /* now the i-th row starts in the rightmost location among other rows and columns of the matrix V, so its node should be moved to the end of the row/column linked list */ k = i; /* remove the i-th row node from the linked list */ if (sv_prev[k] == 0) luf->sv_head = sv_next[k]; else { /* capacity of the previous row/column can be increased at the expense of old locations of the i-th row */ kk = sv_prev[k]; if (kk <= n) vr_cap[kk] += cur; else vc_cap[kk-n] += cur; sv_next[sv_prev[k]] = sv_next[k]; } if (sv_next[k] == 0) luf->sv_tail = sv_prev[k]; else sv_prev[sv_next[k]] = sv_prev[k]; /* insert the i-th row node to the end of the linked list */ sv_prev[k] = luf->sv_tail; sv_next[k] = 0; if (sv_prev[k] == 0) luf->sv_head = k; else sv_next[sv_prev[k]] = k; luf->sv_tail = k; done: return ret; } /*---------------------------------------------------------------------- -- luf_enlarge_col - enlarge column capacity. -- -- *Synopsis* -- -- #include "glpluf.h" -- int luf_enlarge_col(LUF *luf, int j, int cap); -- -- *Description* -- -- The routine luf_enlarge_col enlarges capacity of the j-th column of -- the matrix V to cap locations (assuming that its current capacity is -- less than cap). In order to do that the routine relocates elements -- of the j-th column to the end of the left part of SVA (which contains -- rows and columns of the matrix V) and then expands the left part by -- allocating cap free locations from the free part. If there are less -- than cap free locations, the routine defragments the sparse vector -- area. -- -- Due to "garbage collection" this operation may involve changing row -- and column pointers of the matrix V. -- -- *Returns* -- -- If no error occurred, the routine returns zero. Otherwise, in case of -- overflow of the sparse vector area, the routine returns non-zero. */ int luf_enlarge_col(LUF *luf, int j, int cap) { int n = luf->n; int *vr_cap = luf->vr_cap; int *vc_ptr = luf->vc_ptr; int *vc_len = luf->vc_len; int *vc_cap = luf->vc_cap; int *sv_ndx = luf->sv_ndx; double *sv_val = luf->sv_val; int *sv_prev = luf->sv_prev; int *sv_next = luf->sv_next; int ret = 0; int cur, k, kk; insist(1 <= j && j <= n); insist(vc_cap[j] < cap); /* if there are less than cap free locations, defragment SVA */ if (luf->sv_end - luf->sv_beg < cap) { luf_defrag_sva(luf); if (luf->sv_end - luf->sv_beg < cap) { ret = 1; goto done; } } /* save current capacity of the j-th column */ cur = vc_cap[j]; /* copy existing elements to the beginning of the free part */ memmove(&sv_ndx[luf->sv_beg], &sv_ndx[vc_ptr[j]], vc_len[j] * sizeof(int)); memmove(&sv_val[luf->sv_beg], &sv_val[vc_ptr[j]], vc_len[j] * sizeof(double)); /* set new pointer and new capacity of the j-th column */ vc_ptr[j] = luf->sv_beg; vc_cap[j] = cap; /* set new pointer to the beginning of the free part */ luf->sv_beg += cap; /* now the j-th column starts in the rightmost location among other rows and columns of the matrix V, so its node should be moved to the end of the row/column linked list */ k = n + j; /* remove the j-th column node from the linked list */ if (sv_prev[k] == 0) luf->sv_head = sv_next[k]; else { /* capacity of the previous row/column can be increased at the expense of old locations of the j-th column */ kk = sv_prev[k]; if (kk <= n) vr_cap[kk] += cur; else vc_cap[kk-n] += cur; sv_next[sv_prev[k]] = sv_next[k]; } if (sv_next[k] == 0) luf->sv_tail = sv_prev[k]; else sv_prev[sv_next[k]] = sv_prev[k]; /* insert the j-th column node to the end of the linked list */ sv_prev[k] = luf->sv_tail; sv_next[k] = 0; if (sv_prev[k] == 0) luf->sv_head = k; else sv_next[sv_prev[k]] = k; luf->sv_tail = k; done: return ret; } /*---------------------------------------------------------------------- -- luf_alloc_wa - pre-allocate working area. -- -- *Synopsis* -- -- #include "glpluf.h" -- LUF_WA *luf_alloc_wa(LUF *luf); -- -- *Description* -- -- The routine luf_alloc_wa pre-allocates the working area that can be -- subsequently used for computing LU-factorization. -- -- *Returns* -- -- The routine returns a pointer to the pre-allocated working area. */ LUF_WA *luf_alloc_wa(LUF *luf) { LUF_WA *wa; int n = luf->n; wa = umalloc(sizeof(LUF_WA)); wa->rs_max = ucalloc(1+n, sizeof(double)); wa->rs_head = ucalloc(1+n, sizeof(int)); wa->rs_prev = ucalloc(1+n, sizeof(int)); wa->rs_next = ucalloc(1+n, sizeof(int)); wa->cs_head = ucalloc(1+n, sizeof(int)); wa->cs_prev = ucalloc(1+n, sizeof(int)); wa->cs_next = ucalloc(1+n, sizeof(int)); return wa; } /*---------------------------------------------------------------------- -- luf_free_wa - free working area. -- -- *Synopsis* -- -- #include "glpluf.h" -- void luf_free_wa(LUF_WA *wa); -- -- *Description* -- -- The routine luf_free_wa frees the pre-allocated working area, which -- the parameter wa points to. */ void luf_free_wa(LUF_WA *wa) { ufree(wa->rs_max); ufree(wa->rs_head); ufree(wa->rs_prev); ufree(wa->rs_next); ufree(wa->cs_head); ufree(wa->cs_prev); ufree(wa->cs_next); ufree(wa); return; } /*---------------------------------------------------------------------- -- initialize - initialize LU-factorization data structures. -- -- This routine initializes data structures for subsequent computing -- the LU-factorization of a given matrix A, which is specified by the -- formal routine col. On exit V = A and F = P = Q = I, where I is the -- unity matrix. (Row-wise representation of the matrix F is not used at -- the factorization stage and therefore is not initialized.) -- -- If no error occurred, the routine returns zero. Otherwise, in case of -- overflow of the sparse vector area, the routine returns non-zero. */ static int initialize(LUF *luf, void *info, int (*col)(void *info, int j, int rn[], double aj[]), LUF_WA *wa) { int n = luf->n; int *fc_ptr = luf->fc_ptr; int *fc_len = luf->fc_len; int *vr_ptr = luf->vr_ptr; int *vr_len = luf->vr_len; int *vr_cap = luf->vr_cap; int *vc_ptr = luf->vc_ptr; int *vc_len = luf->vc_len; int *vc_cap = luf->vc_cap; int *pp_row = luf->pp_row; int *pp_col = luf->pp_col; int *qq_row = luf->qq_row; int *qq_col = luf->qq_col; int *sv_ndx = luf->sv_ndx; double *sv_val = luf->sv_val; int *sv_prev = luf->sv_prev; int *sv_next = luf->sv_next; int *flag = luf->flag; double *work = luf->work; double *rs_max = wa->rs_max; int *rs_head = wa->rs_head; int *rs_prev = wa->rs_prev; int *rs_next = wa->rs_next; int *cs_head = wa->cs_head; int *cs_prev = wa->cs_prev; int *cs_next = wa->cs_next; int ret = 0; int i, i_ptr, j, j_beg, j_end, k, len, nnz, sv_beg, sv_end, ptr; double big, val; /* free all locations of the sparse vector area */ sv_beg = 1; sv_end = luf->sv_size + 1; /* (row-wise representation of the matrix F is not initialized, because it is not used at the factorization stage) */ /* build the matrix F in column-wise format (initially F = I) */ for (j = 1; j <= n; j++) { fc_ptr[j] = sv_end; fc_len[j] = 0; } /* clear rows of the matrix V; clear the flag array */ for (i = 1; i <= n; i++) vr_len[i] = vr_cap[i] = 0, flag[i] = 0; /* build the matrix V in column-wise format (initially V = A); count non-zeros in rows of this matrix; count total number of non-zeros; compute largest of absolute values of elements */ nnz = 0; big = 0.0; for (j = 1; j <= n; j++) { int *rn = pp_row; double *aj = work; /* obtain j-th column of the matrix A */ len = col(info, j, rn, aj); if (!(0 <= len && len <= n)) fault("luf_decomp: j = %d; len = %d; invalid column length", j, len); /* check for free locations */ if (sv_end - sv_beg < len) { /* overflow of the sparse vector area */ ret = 1; goto done; } /* set pointer to the j-th column */ vc_ptr[j] = sv_beg; /* set length of the j-th column */ vc_len[j] = vc_cap[j] = len; /* count total number of non-zeros */ nnz += len; /* walk through elements of the j-th column */ for (ptr = 1; ptr <= len; ptr++) { /* get row index and numerical value of a[i,j] */ i = rn[ptr]; val = aj[ptr]; if (!(1 <= i && i <= n)) fault("luf_decomp: i = %d; j = %d; invalid row index", i, j); if (flag[i]) fault("luf_decomp: i = %d; j = %d; duplicate element not" " allowed", i, j); if (val == 0.0) fault("luf_decomp: i = %d; j = %d; zero element not allo" "wed", i, j); /* add new element v[i,j] = a[i,j] to j-th column */ sv_ndx[sv_beg] = i; sv_val[sv_beg] = val; sv_beg++; /* big := max(big, |a[i,j]|) */ if (val < 0.0) val = - val; if (big < val) big = val; /* mark non-zero in the i-th position of the j-th column */ flag[i] = 1; /* increase length of the i-th row */ vr_cap[i]++; } /* reset all non-zero marks */ for (ptr = 1; ptr <= len; ptr++) flag[rn[ptr]] = 0; } /* allocate rows of the matrix V */ for (i = 1; i <= n; i++) { /* get length of the i-th row */ len = vr_cap[i]; /* check for free locations */ if (sv_end - sv_beg < len) { /* overflow of the sparse vector area */ ret = 1; goto done; } /* set pointer to the i-th row */ vr_ptr[i] = sv_beg; /* reserve locations for the i-th row */ sv_beg += len; } /* build the matrix V in row-wise format using representation of this matrix in column-wise format */ for (j = 1; j <= n; j++) { /* walk through elements of the j-th column */ j_beg = vc_ptr[j]; j_end = j_beg + vc_len[j] - 1; for (k = j_beg; k <= j_end; k++) { /* get row index and numerical value of v[i,j] */ i = sv_ndx[k]; val = sv_val[k]; /* store element in the i-th row */ i_ptr = vr_ptr[i] + vr_len[i]; sv_ndx[i_ptr] = j; sv_val[i_ptr] = val; /* increase count of the i-th row */ vr_len[i]++; } } /* initialize the matrices P and Q (initially P = Q = I) */ for (k = 1; k <= n; k++) pp_row[k] = pp_col[k] = qq_row[k] = qq_col[k] = k; /* set sva partitioning pointers */ luf->sv_beg = sv_beg; luf->sv_end = sv_end; /* the initial physical order of rows and columns of the matrix V is n+1, ..., n+n, 1, ..., n (firstly columns, then rows) */ luf->sv_head = n+1; luf->sv_tail = n; for (i = 1; i <= n; i++) { sv_prev[i] = i-1; sv_next[i] = i+1; } sv_prev[1] = n+n; sv_next[n] = 0; for (j = 1; j <= n; j++) { sv_prev[n+j] = n+j-1; sv_next[n+j] = n+j+1; } sv_prev[n+1] = 0; sv_next[n+n] = 1; /* clear working arrays */ for (k = 1; k <= n; k++) { flag[k] = 0; work[k] = 0.0; } /* initialize some statistics */ luf->nnz_a = nnz; luf->nnz_f = 0; luf->nnz_v = nnz; luf->max_a = big; luf->big_v = big; luf->rank = -1; /* initially the active submatrix is the entire matrix V */ /* largest of absolute values of elements in each active row is unknown yet */ for (i = 1; i <= n; i++) rs_max[i] = -1.0; /* build linked lists of active rows */ for (len = 0; len <= n; len++) rs_head[len] = 0; for (i = 1; i <= n; i++) { len = vr_len[i]; rs_prev[i] = 0; rs_next[i] = rs_head[len]; if (rs_next[i] != 0) rs_prev[rs_next[i]] = i; rs_head[len] = i; } /* build linked lists of active columns */ for (len = 0; len <= n; len++) cs_head[len] = 0; for (j = 1; j <= n; j++) { len = vc_len[j]; cs_prev[j] = 0; cs_next[j] = cs_head[len]; if (cs_next[j] != 0) cs_prev[cs_next[j]] = j; cs_head[len] = j; } done: /* return to the factorizing routine */ return ret; } /*---------------------------------------------------------------------- -- find_pivot - choose a pivot element. -- -- This routine chooses a pivot element in the active submatrix of the -- matrix U = P*V*Q. -- -- It is assumed that on entry the matrix U has the following partially -- triangularized form: -- -- 1 k n -- 1 x x x x x x x x x x -- . x x x x x x x x x -- . . x x x x x x x x -- . . . x x x x x x x -- k . . . . * * * * * * -- . . . . * * * * * * -- . . . . * * * * * * -- . . . . * * * * * * -- . . . . * * * * * * -- n . . . . * * * * * * -- -- where rows and columns k, k+1, ..., n belong to the active submatrix -- (elements of the active submatrix are marked by '*'). -- -- Since the matrix U = P*V*Q is not stored, the routine works with the -- matrix V. It is assumed that the row-wise representation corresponds -- to the matrix V, but the column-wise representation corresponds to -- the active submatrix of the matrix V, i.e. elements of the matrix V, -- which doesn't belong to the active submatrix, are missing from the -- column linked lists. It is also assumed that each active row of the -- matrix V is in the set R[len], where len is number of non-zeros in -- the row, and each active column of the matrix V is in the set C[len], -- where len is number of non-zeros in the column (in the latter case -- only elements of the active submatrix are counted; such elements are -- marked by '*' on the figure above). -- -- For the reason of numerical stability the routine applies so called -- threshold pivoting proposed by J.Reid. It is assumed that an element -- v[i,j] can be selected as a pivot candidate if it is not very small -- (in absolute value) among other elements in the same row, i.e. if it -- satisfies to the stability condition |v[i,j]| >= tol * max|v[i,*]|, -- where 0 < tol < 1 is a given tolerance. -- -- In order to keep sparsity of the matrix V the routine uses Markowitz -- strategy, trying to choose such element v[p,q], which satisfies to -- the stability condition (see above) and has smallest Markowitz cost -- (nr[p]-1) * (nc[q]-1), where nr[p] and nc[q] are numbers of non-zero -- elements, respectively, in the p-th row and in the q-th column of the -- active submatrix. -- -- In order to reduce the search, i.e. not to walk through all elements -- of the active submatrix, the routine exploits a technique proposed by -- I.Duff. This technique is based on using the sets R[len] and C[len] -- of active rows and columns. -- -- If the pivot element v[p,q] has been chosen, the routine stores its -- indices to the locations *p and *q and returns zero. Otherwise, if -- the active submatrix is empty and therefore the pivot element can't -- be chosen, the routine returns non-zero. */ static int find_pivot(LUF *luf, LUF_WA *wa, int *_p, int *_q) { int n = luf->n; int *vr_ptr = luf->vr_ptr; int *vr_len = luf->vr_len; int *vc_ptr = luf->vc_ptr; int *vc_len = luf->vc_len; int *sv_ndx = luf->sv_ndx; double *sv_val = luf->sv_val; double piv_tol = luf->piv_tol; int piv_lim = luf->piv_lim; int suhl = luf->suhl; double *rs_max = wa->rs_max; int *rs_head = wa->rs_head; int *rs_next = wa->rs_next; int *cs_head = wa->cs_head; int *cs_prev = wa->cs_prev; int *cs_next = wa->cs_next; int p, q, len, i, i_beg, i_end, i_ptr, j, j_beg, j_end, j_ptr, ncand, next_j, min_p, min_q, min_len; double best, cost, big, temp; /* initially no pivot candidates have been found so far */ p = q = 0, best = DBL_MAX, ncand = 0; /* if in the active submatrix there is a column that has the only non-zero (column singleton), choose it as pivot */ j = cs_head[1]; if (j != 0) { insist(vc_len[j] == 1); p = sv_ndx[vc_ptr[j]], q = j; goto done; } /* if in the active submatrix there is a row that has the only non-zero (row singleton), choose it as pivot */ i = rs_head[1]; if (i != 0) { insist(vr_len[i] == 1); p = i, q = sv_ndx[vr_ptr[i]]; goto done; } /* there are no singletons in the active submatrix; walk through other non-empty rows and columns */ for (len = 2; len <= n; len++) { /* consider active columns that have len non-zeros */ for (j = cs_head[len]; j != 0; j = next_j) { /* the j-th column has len non-zeros */ j_beg = vc_ptr[j]; j_end = j_beg + vc_len[j] - 1; /* save pointer to the next column with the same length */ next_j = cs_next[j]; /* find an element in the j-th column, which is placed in a row with minimal number of non-zeros and satisfies to the stability condition (such element may not exist) */ min_p = min_q = 0, min_len = INT_MAX; for (j_ptr = j_beg; j_ptr <= j_end; j_ptr++) { /* get row index of v[i,j] */ i = sv_ndx[j_ptr]; i_beg = vr_ptr[i]; i_end = i_beg + vr_len[i] - 1; /* if the i-th row is not shorter than that one, where minimal element is currently placed, skip v[i,j] */ if (vr_len[i] >= min_len) continue; /* determine the largest of absolute values of elements in the i-th row */ big = rs_max[i]; if (big < 0.0) { /* the largest value is unknown yet; compute it */ for (i_ptr = i_beg; i_ptr <= i_end; i_ptr++) { temp = sv_val[i_ptr]; if (temp < 0.0) temp = - temp; if (big < temp) big = temp; } rs_max[i] = big; } /* find v[i,j] in the i-th row */ for (i_ptr = vr_ptr[i]; sv_ndx[i_ptr] != j; i_ptr++); insist(i_ptr <= i_end); /* if v[i,j] doesn't satisfy to the stability condition, skip it */ temp = sv_val[i_ptr]; if (temp < 0.0) temp = - temp; if (temp < piv_tol * big) continue; /* v[i,j] is better than the current minimal element */ min_p = i, min_q = j, min_len = vr_len[i]; /* if Markowitz cost of the current minimal element is not greater than (len-1)**2, it can be chosen right now; this heuristic reduces the search and works well in many cases */ if (min_len <= len) { p = min_p, q = min_q; goto done; } } /* the j-th column has been scanned */ if (min_p != 0) { /* the minimal element is a next pivot candidate */ ncand++; /* compute its Markowitz cost */ cost = (double)(min_len - 1) * (double)(len - 1); /* choose between the minimal element and the current candidate */ if (cost < best) p = min_p, q = min_q, best = cost; /* if piv_lim candidates have been considered, there are doubts that a much better candidate exists; therefore it's time to terminate the search */ if (ncand == piv_lim) goto done; } else { /* the j-th column has no elements, which satisfy to the stability condition; Uwe Suhl suggests to exclude such column from the further consideration until it becomes a column singleton; in hard cases this significantly reduces a time needed for pivot searching */ if (suhl) { /* remove the j-th column from the active set */ if (cs_prev[j] == 0) cs_head[len] = cs_next[j]; else cs_next[cs_prev[j]] = cs_next[j]; if (cs_next[j] == 0) /* nop */; else cs_prev[cs_next[j]] = cs_prev[j]; /* the following assignment is used to avoid an error when the routine eliminate (see below) will try to remove the j-th column from the active set */ cs_prev[j] = cs_next[j] = j; } } } /* consider active rows that have len non-zeros */ for (i = rs_head[len]; i != 0; i = rs_next[i]) { /* the i-th row has len non-zeros */ i_beg = vr_ptr[i]; i_end = i_beg + vr_len[i] - 1; /* determine the largest of absolute values of elements in the i-th row */ big = rs_max[i]; if (big < 0.0) { /* the largest value is unknown yet; compute it */ for (i_ptr = i_beg; i_ptr <= i_end; i_ptr++) { temp = sv_val[i_ptr]; if (temp < 0.0) temp = - temp; if (big < temp) big = temp; } rs_max[i] = big; } /* find an element in the i-th row, which is placed in a column with minimal number of non-zeros and satisfies to the stability condition (such element always exists) */ min_p = min_q = 0, min_len = INT_MAX; for (i_ptr = i_beg; i_ptr <= i_end; i_ptr++) { /* get column index of v[i,j] */ j = sv_ndx[i_ptr]; /* if the j-th column is not shorter than that one, where minimal element is currently placed, skip v[i,j] */ if (vc_len[j] >= min_len) continue; /* if v[i,j] doesn't satisfy to the stability condition, skip it */ temp = sv_val[i_ptr]; if (temp < 0.0) temp = - temp; if (temp < piv_tol * big) continue; /* v[i,j] is better than the current minimal element */ min_p = i, min_q = j, min_len = vc_len[j]; /* if Markowitz cost of the current minimal element is not greater than (len-1)**2, it can be chosen right now; this heuristic reduces the search and works well in many cases */ if (min_len <= len) { p = min_p, q = min_q; goto done; } } /* the i-th row has been scanned */ if (min_p != 0) { /* the minimal element is a next pivot candidate */ ncand++; /* compute its Markowitz cost */ cost = (double)(len - 1) * (double)(min_len - 1); /* choose between the minimal element and the current candidate */ if (cost < best) p = min_p, q = min_q, best = cost; /* if piv_lim candidates have been considered, there are doubts that a much better candidate exists; therefore it's time to terminate the search */ if (ncand == piv_lim) goto done; } else { /* this can't be because this can never be */ insist(min_p != min_p); } } } done: /* bring the pivot to the factorizing routine */ *_p = p, *_q = q; return (p == 0); } /*---------------------------------------------------------------------- -- eliminate - perform gaussian elimination. -- -- This routine performs elementary gaussian transformations in order -- to eliminate subdiagonal elements in the k-th column of the matrix -- U = P*V*Q using the pivot element u[k,k], where k is the number of -- the current elimination step. -- -- The parameters p and q are, respectively, row and column indices of -- the element v[p,q], which corresponds to the element u[k,k]. -- -- Each time when the routine applies the elementary transformation to -- a non-pivot row of the matrix V, it stores the corresponding element -- to the matrix F in order to keep the main equality A = F*V. -- -- The routine assumes that on entry the matrices L = P*F*inv(P) and -- U = P*V*Q are the following: -- -- 1 k 1 k n -- 1 1 . . . . . . . . . 1 x x x x x x x x x x -- x 1 . . . . . . . . . x x x x x x x x x -- x x 1 . . . . . . . . . x x x x x x x x -- x x x 1 . . . . . . . . . x x x x x x x -- k x x x x 1 . . . . . k . . . . * * * * * * -- x x x x _ 1 . . . . . . . . # * * * * * -- x x x x _ . 1 . . . . . . . # * * * * * -- x x x x _ . . 1 . . . . . . # * * * * * -- x x x x _ . . . 1 . . . . . # * * * * * -- n x x x x _ . . . . 1 n . . . . # * * * * * -- -- matrix L matrix U -- -- where rows and columns of the matrix U with numbers k, k+1, ..., n -- form the active submatrix (eliminated elements are marked by '#' and -- other elements of the active submatrix are marked by '*'). Note that -- each eliminated non-zero element u[i,k] of the matrix U gives the -- corresponding element l[i,k] of the matrix L (marked by '_'). -- -- Actually all operations are performed on the matrix V. Should note -- that the row-wise representation corresponds to the matrix V, but the -- column-wise representation corresponds to the active submatrix of the -- matrix V, i.e. elements of the matrix V, which doesn't belong to the -- active submatrix, are missing from the column linked lists. -- -- Let u[k,k] = v[p,q] be the pivot. In order to eliminate subdiagonal -- elements u[i',k] = v[i,q], i' = k+1, k+2, ..., n, the routine applies -- the following elementary gaussian transformations: -- -- (i-th row of V) := (i-th row of V) - f[i,p] * (p-th row of V), -- -- where f[i,p] = v[i,q] / v[p,q] is a gaussian multiplier. -- -- Additionally, in order to keep the main equality A = F*V, each time -- when the routine applies the transformation to i-th row of the matrix -- V, it also adds f[i,p] as a new element to the matrix F. -- -- IMPORTANT: On entry the working arrays flag and work should contain -- zeros. This status is provided by the routine on exit. -- -- If no error occurred, the routine returns zero. Otherwise, in case of -- overflow of the sparse vector area, the routine returns non-zero. */ static int eliminate(LUF *luf, LUF_WA *wa, int p, int q) { int n = luf->n; int *fc_ptr = luf->fc_ptr; int *fc_len = luf->fc_len; int *vr_ptr = luf->vr_ptr; int *vr_len = luf->vr_len; int *vr_cap = luf->vr_cap; double *vr_piv = luf->vr_piv; int *vc_ptr = luf->vc_ptr; int *vc_len = luf->vc_len; int *vc_cap = luf->vc_cap; int *sv_ndx = luf->sv_ndx; double *sv_val = luf->sv_val; int *sv_prev = luf->sv_prev; int *sv_next = luf->sv_next; int *flag = luf->flag; double *work = luf->work; double eps_tol = luf->eps_tol; double *rs_max = wa->rs_max; int *rs_head = wa->rs_head; int *rs_prev = wa->rs_prev; int *rs_next = wa->rs_next; int *cs_head = wa->cs_head; int *cs_prev = wa->cs_prev; int *cs_next = wa->cs_next; /* at this stage the row-wise representation of the matrix F is not used, so fr_len can be used as a working array */ int *ndx = luf->fr_len; int ret = 0; int len, fill, i, i_beg, i_end, i_ptr, j, j_beg, j_end, j_ptr, k, p_beg, p_end, p_ptr, q_beg, q_end, q_ptr; double fip, val, vpq, temp; insist(1 <= p && p <= n); insist(1 <= q && q <= n); /* remove the p-th (pivot) row from the active set; this row will never return there */ if (rs_prev[p] == 0) rs_head[vr_len[p]] = rs_next[p]; else rs_next[rs_prev[p]] = rs_next[p]; if (rs_next[p] == 0) ; else rs_prev[rs_next[p]] = rs_prev[p]; /* remove the q-th (pivot) column from the active set; this column will never return there */ if (cs_prev[q] == 0) cs_head[vc_len[q]] = cs_next[q]; else cs_next[cs_prev[q]] = cs_next[q]; if (cs_next[q] == 0) ; else cs_prev[cs_next[q]] = cs_prev[q]; /* find the pivot v[p,q] = u[k,k] in the p-th row */ p_beg = vr_ptr[p]; p_end = p_beg + vr_len[p] - 1; for (p_ptr = p_beg; sv_ndx[p_ptr] != q; p_ptr++) /* nop */; insist(p_ptr <= p_end); /* store value of the pivot */ vpq = (vr_piv[p] = sv_val[p_ptr]); /* remove the pivot from the p-th row */ sv_ndx[p_ptr] = sv_ndx[p_end]; sv_val[p_ptr] = sv_val[p_end]; vr_len[p]--; p_end--; /* find the pivot v[p,q] = u[k,k] in the q-th column */ q_beg = vc_ptr[q]; q_end = q_beg + vc_len[q] - 1; for (q_ptr = q_beg; sv_ndx[q_ptr] != p; q_ptr++) /* nop */; insist(q_ptr <= q_end); /* remove the pivot from the q-th column */ sv_ndx[q_ptr] = sv_ndx[q_end]; vc_len[q]--; q_end--; /* walk through the p-th (pivot) row, which doesn't contain the pivot v[p,q] already, and do the following... */ for (p_ptr = p_beg; p_ptr <= p_end; p_ptr++) { /* get column index of v[p,j] */ j = sv_ndx[p_ptr]; /* store v[p,j] to the working array */ flag[j] = 1; work[j] = sv_val[p_ptr]; /* remove the j-th column from the active set; this column will return there later with new length */ if (cs_prev[j] == 0) cs_head[vc_len[j]] = cs_next[j]; else cs_next[cs_prev[j]] = cs_next[j]; if (cs_next[j] == 0) ; else cs_prev[cs_next[j]] = cs_prev[j]; /* find v[p,j] in the j-th column */ j_beg = vc_ptr[j]; j_end = j_beg + vc_len[j] - 1; for (j_ptr = j_beg; sv_ndx[j_ptr] != p; j_ptr++) /* nop */; insist(j_ptr <= j_end); /* since v[p,j] leaves the active submatrix, remove it from the j-th column; however, v[p,j] is kept in the p-th row */ sv_ndx[j_ptr] = sv_ndx[j_end]; vc_len[j]--; } /* walk through the q-th (pivot) column, which doesn't contain the pivot v[p,q] already, and perform gaussian elimination */ while (q_beg <= q_end) { /* element v[i,q] should be eliminated */ /* get row index of v[i,q] */ i = sv_ndx[q_beg]; /* remove the i-th row from the active set; later this row will return there with new length */ if (rs_prev[i] == 0) rs_head[vr_len[i]] = rs_next[i]; else rs_next[rs_prev[i]] = rs_next[i]; if (rs_next[i] == 0) ; else rs_prev[rs_next[i]] = rs_prev[i]; /* find v[i,q] in the i-th row */ i_beg = vr_ptr[i]; i_end = i_beg + vr_len[i] - 1; for (i_ptr = i_beg; sv_ndx[i_ptr] != q; i_ptr++) /* nop */; insist(i_ptr <= i_end); /* compute gaussian multiplier f[i,p] = v[i,q] / v[p,q] */ fip = sv_val[i_ptr] / vpq; /* since v[i,q] should be eliminated, remove it from the i-th row */ sv_ndx[i_ptr] = sv_ndx[i_end]; sv_val[i_ptr] = sv_val[i_end]; vr_len[i]--; i_end--; /* and from the q-th column */ sv_ndx[q_beg] = sv_ndx[q_end]; vc_len[q]--; q_end--; /* perform gaussian transformation: (i-th row) := (i-th row) - f[i,p] * (p-th row) note that now the p-th row, which is in the working array, doesn't contain the pivot v[p,q], and the i-th row doesn't contain the eliminated element v[i,q] */ /* walk through the i-th row and transform existing non-zero elements */ fill = vr_len[p]; for (i_ptr = i_beg; i_ptr <= i_end; i_ptr++) { /* get column index of v[i,j] */ j = sv_ndx[i_ptr]; /* v[i,j] := v[i,j] - f[i,p] * v[p,j] */ if (flag[j]) { /* v[p,j] != 0 */ temp = (sv_val[i_ptr] -= fip * work[j]); if (temp < 0.0) temp = - temp; flag[j] = 0; fill--; /* since both v[i,j] and v[p,j] exist */ if (temp == 0.0 || temp < eps_tol) { /* new v[i,j] is closer to zero; replace it by exact zero, i.e. remove it from the active submatrix */ /* remove v[i,j] from the i-th row */ sv_ndx[i_ptr] = sv_ndx[i_end]; sv_val[i_ptr] = sv_val[i_end]; vr_len[i]--; i_ptr--; i_end--; /* find v[i,j] in the j-th column */ j_beg = vc_ptr[j]; j_end = j_beg + vc_len[j] - 1; for (j_ptr = j_beg; sv_ndx[j_ptr] != i; j_ptr++); insist(j_ptr <= j_end); /* remove v[i,j] from the j-th column */ sv_ndx[j_ptr] = sv_ndx[j_end]; vc_len[j]--; } else { /* v_big := max(v_big, |v[i,j]|) */ if (luf->big_v < temp) luf->big_v = temp; } } } /* now flag is the pattern of the set v[p,*] \ v[i,*], and fill is number of non-zeros in this set; therefore up to fill new non-zeros may appear in the i-th row */ if (vr_len[i] + fill > vr_cap[i]) { /* enlarge the i-th row */ if (luf_enlarge_row(luf, i, vr_len[i] + fill)) { /* overflow of the sparse vector area */ ret = 1; goto done; } /* defragmentation may change row and column pointers of the matrix V */ p_beg = vr_ptr[p]; p_end = p_beg + vr_len[p] - 1; q_beg = vc_ptr[q]; q_end = q_beg + vc_len[q] - 1; } /* walk through the p-th (pivot) row and create new elements of the i-th row that appear due to fill-in; column indices of these new elements are accumulated in the array ndx */ len = 0; for (p_ptr = p_beg; p_ptr <= p_end; p_ptr++) { /* get column index of v[p,j], which may cause fill-in */ j = sv_ndx[p_ptr]; if (flag[j]) { /* compute new non-zero v[i,j] = 0 - f[i,p] * v[p,j] */ temp = (val = - fip * work[j]); if (temp < 0.0) temp = - temp; if (temp == 0.0 || temp < eps_tol) /* if v[i,j] is closer to zero; just ignore it */; else { /* add v[i,j] to the i-th row */ i_ptr = vr_ptr[i] + vr_len[i]; sv_ndx[i_ptr] = j; sv_val[i_ptr] = val; vr_len[i]++; /* remember column index of v[i,j] */ ndx[++len] = j; /* big_v := max(big_v, |v[i,j]|) */ if (luf->big_v < temp) luf->big_v = temp; } } else { /* there is no fill-in, because v[i,j] already exists in the i-th row; restore the flag of the element v[p,j], which was reset before */ flag[j] = 1; } } /* add new non-zeros v[i,j] to the corresponding columns */ for (k = 1; k <= len; k++) { /* get column index of new non-zero v[i,j] */ j = ndx[k]; /* one free location is needed in the j-th column */ if (vc_len[j] + 1 > vc_cap[j]) { /* enlarge the j-th column */ if (luf_enlarge_col(luf, j, vc_len[j] + 10)) { /* overflow of the sparse vector area */ ret = 1; goto done; } /* defragmentation may change row and column pointers of the matrix V */ p_beg = vr_ptr[p]; p_end = p_beg + vr_len[p] - 1; q_beg = vc_ptr[q]; q_end = q_beg + vc_len[q] - 1; } /* add new non-zero v[i,j] to the j-th column */ j_ptr = vc_ptr[j] + vc_len[j]; sv_ndx[j_ptr] = i; vc_len[j]++; } /* now the i-th row has been completely transformed, therefore it can return to the active set with new length */ rs_prev[i] = 0; rs_next[i] = rs_head[vr_len[i]]; if (rs_next[i] != 0) rs_prev[rs_next[i]] = i; rs_head[vr_len[i]] = i; /* the largest of absolute values of elements in the i-th row is currently unknown */ rs_max[i] = -1.0; /* at least one free location is needed to store the gaussian multiplier */ if (luf->sv_end - luf->sv_beg < 1) { /* there are no free locations at all; defragment SVA */ luf_defrag_sva(luf); if (luf->sv_end - luf->sv_beg < 1) { /* overflow of the sparse vector area */ ret = 1; goto done; } /* defragmentation may change row and column pointers of the matrix V */ p_beg = vr_ptr[p]; p_end = p_beg + vr_len[p] - 1; q_beg = vc_ptr[q]; q_end = q_beg + vc_len[q] - 1; } /* add the element f[i,p], which is the gaussian multiplier, to the matrix F */ luf->sv_end--; sv_ndx[luf->sv_end] = i; sv_val[luf->sv_end] = fip; fc_len[p]++; /* end of elimination loop */ } /* at this point the q-th (pivot) column should be empty */ insist(vc_len[q] == 0); /* reset capacity of the q-th column */ vc_cap[q] = 0; /* remove node of the q-th column from the addressing list */ k = n + q; if (sv_prev[k] == 0) luf->sv_head = sv_next[k]; else sv_next[sv_prev[k]] = sv_next[k]; if (sv_next[k] == 0) luf->sv_tail = sv_prev[k]; else sv_prev[sv_next[k]] = sv_prev[k]; /* the p-th column of the matrix F has been completely built; set its pointer */ fc_ptr[p] = luf->sv_end; /* walk through the p-th (pivot) row and do the following... */ for (p_ptr = p_beg; p_ptr <= p_end; p_ptr++) { /* get column index of v[p,j] */ j = sv_ndx[p_ptr]; /* erase v[p,j] from the working array */ flag[j] = 0; work[j] = 0.0; /* the j-th column has been completely transformed, therefore it can return to the active set with new length; however the special case c_prev[j] = c_next[j] = j means that the routine find_pivot excluded the j-th column from the active set due to Uwe Suhl's rule, and therefore in this case the column can return to the active set only if it is a column singleton */ if (!(vc_len[j] != 1 && cs_prev[j] == j && cs_next[j] == j)) { cs_prev[j] = 0; cs_next[j] = cs_head[vc_len[j]]; if (cs_next[j] != 0) cs_prev[cs_next[j]] = j; cs_head[vc_len[j]] = j; } } done: /* return to the factorizing routine */ return ret; } /*---------------------------------------------------------------------- -- build_v_cols - build the matrix V in column-wise format. -- -- This routine builds the column-wise representation of the matrix V -- using its row-wise representation. -- -- If no error occurred, the routine returns zero. Otherwise, in case of -- overflow of the sparse vector area, the routine returns non-zero. */ static int build_v_cols(LUF *luf) { int n = luf->n; int *vr_ptr = luf->vr_ptr; int *vr_len = luf->vr_len; int *vc_ptr = luf->vc_ptr; int *vc_len = luf->vc_len; int *vc_cap = luf->vc_cap; int *sv_ndx = luf->sv_ndx; double *sv_val = luf->sv_val; int *sv_prev = luf->sv_prev; int *sv_next = luf->sv_next; int ret = 0; int i, i_beg, i_end, i_ptr, j, j_ptr, k, nnz; /* it is assumed that on entry all columns of the matrix V are empty, i.e. vc_len[j] = vc_cap[j] = 0 for all j = 1, ..., n, and have been removed from the addressing list */ /* count non-zeros in columns of the matrix V; count total number of non-zeros in this matrix */ nnz = 0; for (i = 1; i <= n; i++) { /* walk through elements of the i-th row and count non-zeros in the corresponding columns */ i_beg = vr_ptr[i]; i_end = i_beg + vr_len[i] - 1; for (i_ptr = i_beg; i_ptr <= i_end; i_ptr++) vc_cap[sv_ndx[i_ptr]]++; /* count total number of non-zeros */ nnz += vr_len[i]; } /* store total number of non-zeros */ luf->nnz_v = nnz; /* check for free locations */ if (luf->sv_end - luf->sv_beg < nnz) { /* overflow of the sparse vector area */ ret = 1; goto done; } /* allocate columns of the matrix V */ for (j = 1; j <= n; j++) { /* set pointer to the j-th column */ vc_ptr[j] = luf->sv_beg; /* reserve locations for the j-th column */ luf->sv_beg += vc_cap[j]; } /* build the matrix V in column-wise format using this matrix in row-wise format */ for (i = 1; i <= n; i++) { /* walk through elements of the i-th row */ i_beg = vr_ptr[i]; i_end = i_beg + vr_len[i] - 1; for (i_ptr = i_beg; i_ptr <= i_end; i_ptr++) { /* get column index */ j = sv_ndx[i_ptr]; /* store element in the j-th column */ j_ptr = vc_ptr[j] + vc_len[j]; sv_ndx[j_ptr] = i; sv_val[j_ptr] = sv_val[i_ptr]; /* increase length of the j-th column */ vc_len[j]++; } } /* now columns are placed in the sparse vector area behind rows in the order n+1, n+2, ..., n+n; so insert column nodes in the addressing list using this order */ for (k = n+1; k <= n+n; k++) { sv_prev[k] = k-1; sv_next[k] = k+1; } sv_prev[n+1] = luf->sv_tail; sv_next[luf->sv_tail] = n+1; sv_next[n+n] = 0; luf->sv_tail = n+n; done: /* return to the factorizing routine */ return ret; } /*---------------------------------------------------------------------- -- build_f_rows - build the matrix F in row-wise format. -- -- This routine builds the row-wise representation of the matrix F using -- its column-wise representation. -- -- If no error occurred, the routine returns zero. Otherwise, in case of -- overflow of the sparse vector area, the routine returns non-zero. */ static int build_f_rows(LUF *luf) { int n = luf->n; int *fr_ptr = luf->fr_ptr; int *fr_len = luf->fr_len; int *fc_ptr = luf->fc_ptr; int *fc_len = luf->fc_len; int *sv_ndx = luf->sv_ndx; double *sv_val = luf->sv_val; int ret = 0; int i, j, j_beg, j_end, j_ptr, ptr, nnz; /* clear rows of the matrix F */ for (i = 1; i <= n; i++) fr_len[i] = 0; /* count non-zeros in rows of the matrix F; count total number of non-zeros in this matrix */ nnz = 0; for (j = 1; j <= n; j++) { /* walk through elements of the j-th column and count non-zeros in the corresponding rows */ j_beg = fc_ptr[j]; j_end = j_beg + fc_len[j] - 1; for (j_ptr = j_beg; j_ptr <= j_end; j_ptr++) fr_len[sv_ndx[j_ptr]]++; /* increase total number of non-zeros */ nnz += fc_len[j]; } /* store total number of non-zeros */ luf->nnz_f = nnz; /* check for free locations */ if (luf->sv_end - luf->sv_beg < nnz) { /* overflow of the sparse vector area */ ret = 1; goto done; } /* allocate rows of the matrix F */ for (i = 1; i <= n; i++) { /* set pointer to the end of the i-th row; later this pointer will be set to the beginning of the i-th row */ fr_ptr[i] = luf->sv_end; /* reserve locations for the i-th row */ luf->sv_end -= fr_len[i]; } /* build the matrix F in row-wise format using this matrix in column-wise format */ for (j = 1; j <= n; j++) { /* walk through elements of the j-th column */ j_beg = fc_ptr[j]; j_end = j_beg + fc_len[j] - 1; for (j_ptr = j_beg; j_ptr <= j_end; j_ptr++) { /* get row index */ i = sv_ndx[j_ptr]; /* store element in the i-th row */ ptr = --fr_ptr[i]; sv_ndx[ptr] = j; sv_val[ptr] = sv_val[j_ptr]; } } done: /* return to the factorizing routine */ return ret; } /*---------------------------------------------------------------------- -- luf_decomp - compute LU-factorization. -- -- *Synopsis* -- -- #include "glpluf.h" -- int luf_decomp(LUF *luf, -- void *info, int (*col)(void *info, int j, int rn[], double aj[]), -- LUF_WA *wa); -- -- *Description* -- -- The routine luf_decomp computes LU-factorization of a given square -- matrix A. -- -- The parameter luf specifies LU-factorization data structure built by -- means of the routine luf_create. -- -- The parameter info is a transit pointer passed to the formal routine -- col (see below). -- -- The formal routine col specifies the given matrix A. In order to -- obtain j-th column of the matrix A the routine luf_decomp calls the -- routine col with the parameter j (1 <= j <= n, where n is the order -- of A). In response the routine col should store row indices and -- numerical values of non-zero elements of the j-th column of A to the -- locations rn[1], ..., rn[len] and aj[1], ..., aj[len] respectively, -- where len is number of non-zeros in the j-th column, which should be -- returned on exit. Neiter zero nor duplicate elements are allowed. -- -- The parameter wa is a pointer to the working area (no initialization -- is needed, only pre-allocation). If this parameter is NULL, the area -- is allocated on entry and freed on exit automatically. -- -- *Returns* -- -- The routine luf_decomp returns one of the following codes: -- -- 0 - no errors; -- 1 - the given matrix is singular (on some elimination step the active -- submatrix is zero, due to that the pivot can't be chosen); -- 2 - the given matrix is probably ill-conditioned (on some elimination -- step too intensive growth of elements of the active submatrix has -- been detected). -- -- If the matrix A is well scaled, the return code 2 may also mean that -- the threshold pivoting tolerance piv_tol should be increased. -- -- In case of non-zero return code the factorization becomes invalid. -- It should not be used in other operations until the cause of failure -- has been eliminated and the factorization has been recomputed again -- using the routine luf_decomp. -- -- *Repairing singular matrix* -- -- If the routine luf_decomp returns non-zero code, it provides all -- necessary information that can be used for "repairing" the matrix A, -- where "repairing" means replacing linearly dependent columns of the -- matrix A by appropriate columns of the unity matrix. This feature is -- needed when the routine luf_decomp is used for reinverting the basis -- matrix within the simplex method procedure. -- -- On exit linearly dependent columns of the (partially transformed) -- matrix U have numbers rank+1, rank+2, ..., n, where rank is estimated -- rank of the matrix A stored by the routine to the member luf->rank. -- The correspondence between columns of A and U is the same as between -- columns of V and U. Thus, linearly dependent columns of the matrix A -- have numbers qq_col[rank+1], qq_col[rank+2], ..., qq_col[n], where -- qq_col is the column-like representation of the permutation matrix Q. -- It is understood that each j-th linearly dependent column of the -- matrix U should be replaced by the unity vector, where all elements -- are zero except the unity diagonal element u[j,j]. On the other hand -- j-th row of the matrix U corresponds to the row of the matrix V (and -- therefore of the matrix A) with the number pp_row[j], where pp_row is -- the row-like representation of the permutation matrix P. Thus, each -- j-th linearly dependent column of the matrix U should be replaced by -- column of the unity matrix with the number pp_row[j]. -- -- The code that repairs the matrix A may look like follows: -- -- for (j = rank+1; j <= n; j++) -- { replace the column qq_col[j] of the matrix A by the column -- pp_row[j] of the unity matrix; -- } -- -- where rank, pp_row, and qq_col are members of the structure LUF. */ int luf_decomp(LUF *luf, void *info, int (*col)(void *info, int j, int rn[], double aj[]), LUF_WA *_wa) { int n = luf->n; int *pp_row = luf->pp_row; int *pp_col = luf->pp_col; int *qq_row = luf->qq_row; int *qq_col = luf->qq_col; double piv_tol = luf->piv_tol; int piv_lim = luf->piv_lim; int suhl = luf->suhl; double eps_tol = luf->eps_tol; double max_gro = luf->max_gro; LUF_WA *wa = (_wa == NULL ? luf_alloc_wa(luf) : _wa); int ret = 0; int i, j, k, p, q, t; /* check control parameters for correctness */ if (!(0.0 < piv_tol && piv_tol < 1.0)) fault("luf_decomp: piv_tol = %g; invalid parameter", piv_tol); if (!(piv_lim > 0)) fault("luf_decomp: piv_lim = %d; invalid parameter", piv_lim); if (!(suhl == 0 || suhl == 1)) fault("luf_decomp: suhl = %d; invalid parameter", suhl); if (!(0.0 <= eps_tol && eps_tol <= 1.0)) fault("luf_decomp: eps_tol = %g; invalid_parameter", eps_tol); if (!(max_gro >= 1.0)) fault("luf_decomp: max_gro = %g; invalid parameter", max_gro); /* the factorization is temporarily not valid */ luf->valid = 0; more: /* re-allocate the sparse vector area (if required) */ if (luf->new_sva > 0) { ufree(luf->sv_ndx); ufree(luf->sv_val); luf->sv_size = luf->new_sva; luf->sv_ndx = ucalloc(1+luf->sv_size, sizeof(int)); luf->sv_val = ucalloc(1+luf->sv_size, sizeof(double)); luf->new_sva = 0; } /* initialize LU-factorization data structures */ if (initialize(luf, info, col, wa)) { /* overflow of the sparse vector area */ luf->new_sva = luf->sv_size + luf->sv_size; goto more; } /* main elimination loop */ for (k = 1; k <= n; k++) { /* choose a pivot element v[p,q] */ if (find_pivot(luf, wa, &p, &q)) { /* the pivot can't be chosen, because the active submatrix is zero */ luf->rank = k - 1; ret = 1; goto done; } /* let v[p,q] correspond to u[i',j']; permute k-th and i'-th rows and k-th and j'-th columns of the matrix U = P*V*Q to move the element u[i',j'] to the position u[k,k] */ i = pp_col[p]; j = qq_row[q]; insist(k <= i && i <= n && k <= j && j <= n); /* permute k-th and i-th rows of the matrix U */ t = pp_row[k]; pp_row[i] = t; pp_col[t] = i; pp_row[k] = p; pp_col[p] = k; /* permute k-th and j-th columns of the matrix U */ t = qq_col[k]; qq_col[j] = t; qq_row[t] = j; qq_col[k] = q; qq_row[q] = k; /* eliminate subdiagonal elements of k-th column of the matrix U = P*V*Q using the pivot element u[k,k] = v[p,q] */ if (eliminate(luf, wa, p, q)) { /* overflow of the sparse vector area */ luf->new_sva = luf->sv_size + luf->sv_size; goto more; } /* check relative growth of elements of the matrix V */ if (luf->big_v > max_gro * luf->max_a) { /* the growth is too intensive, therefore most probably the matrix A is ill-conditioned */ luf->rank = k - 1; ret = 2; goto done; } } /* now the matrix U = P*V*Q is upper triangular, the matrix V has been built in row-wise format, and the matrix F has been built in column-wise format */ /* defragment the sparse vector area in order to merge all free locations in one continous extent */ luf_defrag_sva(luf); /* build the matrix V in column-wise format */ if (build_v_cols(luf)) { /* overflow of the sparse vector area */ luf->new_sva = luf->sv_size + luf->sv_size; goto more; } /* build the matrix F in row-wise format */ if (build_f_rows(luf)) { /* overflow of the sparse vector area */ luf->new_sva = luf->sv_size + luf->sv_size; goto more; } /* the LU-factorization has been successfully computed */ luf->valid = 1; luf->rank = n; /* if there are few free locations in the sparse vector area, try to increase SVA size in the future */ t = 3 * (n + luf->nnz_v) + 2 * luf->nnz_f; if (luf->sv_size < t) { luf->new_sva = luf->sv_size; while (luf->new_sva < t) luf->new_sva += luf->new_sva; } done: /* free the working area (if necessary) */ if (_wa == NULL) luf_free_wa(wa); /* return to the calling program */ return ret; } /*---------------------------------------------------------------------- -- luf_f_solve - solve system F*x = b or F'*x = b. -- -- *Synopsis* -- -- #include "glpluf.h" -- void luf_f_solve(LUF *luf, int tr, double x[]); -- -- *Description* -- -- The routine luf_f_solve solves either the system F*x = b (if the -- flag tr is zero) or the system F'*x = b (if the flag tr is non-zero), -- where the matrix F is a component of LU-factorization specified by -- the parameter luf, F' is a matrix transposed to F. -- -- On entry the array x should contain elements of the right-hand side -- vector b in locations x[1], ..., x[n], where n is the order of the -- matrix F. On exit this array will contain elements of the solution -- vector x in the same locations. */ void luf_f_solve(LUF *luf, int tr, double x[]) { int n = luf->n; int *fr_ptr = luf->fr_ptr; int *fr_len = luf->fr_len; int *fc_ptr = luf->fc_ptr; int *fc_len = luf->fc_len; int *pp_row = luf->pp_row; int *sv_ndx = luf->sv_ndx; double *sv_val = luf->sv_val; int i, j, k, beg, end, ptr; double xk; if (!luf->valid) fault("luf_f_solve: LU-factorization is not valid"); if (!tr) { /* solve the system F*x = b */ for (j = 1; j <= n; j++) { k = pp_row[j]; xk = x[k]; if (xk != 0.0) { beg = fc_ptr[k]; end = beg + fc_len[k] - 1; for (ptr = beg; ptr <= end; ptr++) x[sv_ndx[ptr]] -= sv_val[ptr] * xk; } } } else { /* solve the system F'*x = b */ for (i = n; i >= 1; i--) { k = pp_row[i]; xk = x[k]; if (xk != 0.0) { beg = fr_ptr[k]; end = beg + fr_len[k] - 1; for (ptr = beg; ptr <= end; ptr++) x[sv_ndx[ptr]] -= sv_val[ptr] * xk; } } } return; } /*---------------------------------------------------------------------- -- luf_v_solve - solve system V*x = b or V'*x = b. -- -- *Synopsis* -- -- #include "glpluf.h" -- void luf_v_solve(LUF *luf, int tr, double x[]); -- -- *Description* -- -- The routine luf_v_solve solves either the system V*x = b (if the -- flag tr is zero) or the system V'*x = b (if the flag tr is non-zero), -- where the matrix V is a component of LU-factorization specified by -- the parameter luf, V' is a matrix transposed to V. -- -- On entry the array x should contain elements of the right-hand side -- vector b in locations x[1], ..., x[n], where n is the order of the -- matrix V. On exit this array will contain elements of the solution -- vector x in the same locations. */ void luf_v_solve(LUF *luf, int tr, double x[]) { int n = luf->n; int *vr_ptr = luf->vr_ptr; int *vr_len = luf->vr_len; double *vr_piv = luf->vr_piv; int *vc_ptr = luf->vc_ptr; int *vc_len = luf->vc_len; int *pp_row = luf->pp_row; int *qq_col = luf->qq_col; int *sv_ndx = luf->sv_ndx; double *sv_val = luf->sv_val; double *b = luf->work; int i, j, k, beg, end, ptr; double temp; if (!luf->valid) fault("luf_v_solve: LU-factorization is not valid"); for (k = 1; k <= n; k++) b[k] = x[k], x[k] = 0.0; if (!tr) { /* solve the system V*x = b */ for (k = n; k >= 1; k--) { i = pp_row[k], j = qq_col[k]; temp = b[i]; if (temp != 0.0) { x[j] = (temp /= vr_piv[i]); beg = vc_ptr[j]; end = beg + vc_len[j] - 1; for (ptr = beg; ptr <= end; ptr++) b[sv_ndx[ptr]] -= sv_val[ptr] * temp; } } } else { /* solve the system V'*x = b */ for (k = 1; k <= n; k++) { i = pp_row[k], j = qq_col[k]; temp = b[j]; if (temp != 0.0) { x[i] = (temp /= vr_piv[i]); beg = vr_ptr[i]; end = beg + vr_len[i] - 1; for (ptr = beg; ptr <= end; ptr++) b[sv_ndx[ptr]] -= sv_val[ptr] * temp; } } } return; } /*---------------------------------------------------------------------- -- luf_solve - solve system A*x = b or A'*x = b. -- -- *Synopsis* -- -- #include "glpluf.h" -- void luf_solve(LUF *luf, int tr, double x[]); -- -- *Description* -- -- The routine luf_solve solves either the system A*x = b (if the flag -- tr is zero) or the system A'*x = b (if the flag tr is non-zero), -- where the parameter luf specifies LU-factorization of the matrix A, -- A' is a matrix transposed to A. -- -- On entry the array x should contain elements of the right-hand side -- vector b in locations x[1], ..., x[n], where n is the order of the -- matrix A. On exit this array will contain elements of the solution -- vector x in the same locations. */ void luf_solve(LUF *luf, int tr, double x[]) { if (!luf->valid) fault("luf_solve: LU-factorization is not valid"); if (!tr) { /* A = F*V, therefore inv(A) = inv(V)*inv(F) */ luf_f_solve(luf, 0, x); luf_v_solve(luf, 0, x); } else { /* A' = V'*F', therefore inv(A') = inv(F')*inv(V') */ luf_v_solve(luf, 1, x); luf_f_solve(luf, 1, x); } return; } /*---------------------------------------------------------------------- -- luf_delete - delete LU-factorization. -- -- *Synopsis* -- -- #include "glpluf.h" -- void luf_delete(LUF *luf); -- -- *Description* -- -- The routine luf_delete deletes LU-factorization data structure, -- which the parameter luf points to, freeing all the memory allocated -- to this object. */ void luf_delete(LUF *luf) { ufree(luf->fr_ptr); ufree(luf->fr_len); ufree(luf->fc_ptr); ufree(luf->fc_len); ufree(luf->vr_ptr); ufree(luf->vr_len); ufree(luf->vr_cap); ufree(luf->vr_piv); ufree(luf->vc_ptr); ufree(luf->vc_len); ufree(luf->vc_cap); ufree(luf->pp_row); ufree(luf->pp_col); ufree(luf->qq_row); ufree(luf->qq_col); ufree(luf->sv_ndx); ufree(luf->sv_val); ufree(luf->sv_prev); ufree(luf->sv_next); ufree(luf->flag); ufree(luf->work); ufree(luf); return; } /* eof */ DyLP-1.10.4/DyLP/src/Dylp/dy_consys_utils.c0000644000175200017520000032631112253224475016774 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains utility routines for maintaining a constraint system data structure, tailored for LP-based branch-and-cut MILP algorithms. 'Architectural constraints' are the constraints included in the original problem statement; by analogy, 'architectural variables' are the variables in those constraints. 'Logical variables' are the various slack, surplus, and artificial variables that are added to the constraint system for ease of solving the LP. 'Cuts', or 'cutting planes', are additional constraints used in the course of (M)ILP. Column generation algorithms may add new architectural variables. Cutting planes may also add new architectural variables, and will come with their own associated logical variables. Consider now a system with n architectural variables, m constraints (architectural and/or cut), and m logical variables associated with the constraints. The design goals for supporting a LP algorithm are: * Efficient access by row (constraint) or by column (variable), in either sparse or expanded vector format. * Efficient 'compact' access -- constraints should be indexed 1..m with no gaps, and architectural variables should be indexed 1..n with no gaps. * A standard convention for deriving the index of the associated logical variable from the index of a constraint. * Efficient substitution of alternate objective, rhs, and bound vectors. * A compact handle for passing around a constraint system. The above are sufficient for simple LP, which sees a constant constraint system and solves it. Dynamic LP is more challenging, requiring the ability to work with a dynamically changing subsystem of the original constraint system. The implementation must provide support for addition and deletion of constraints and variables in such a way that maintenance of a basis and tracking the relationship between the original and partial systems can be done in a reasonably efficient manner. The branch-and-cut level imposes some additional goals: * Efficient addition and deletion of cutting planes (both the constraint and its associated logical variable). * Efficient access to a specified constraint or variable. The consys package maintains two classes of variables, architectural and logical. For reasons of efficiency (which will become clear below) we reverse the usual convention, numbering logicals from 1..m and architecturals from m+1..m+n. This permits efficient addition/deletion of constraints and architectural variables by reordering. The consys package also maintains two classes of constraints, architectural and cut. The constraint indices are a single compact set, with the indices of architectural constraints preceding the indices of cut constraints. Unlike the architectural/logical variable distinction, the architectural/ cut constraint distinction can be ignored by a client, if it so chooses. The addition/deletion of an architectural variable is handled as follows: * To add a variable at index k, the current occupant is moved to a newly created slot at index n+1 and the new variable is inserted at index k. * To delete a variable at index k, the variable is removed and the variable at index n is moved into the empty slot. In short, addition/deletion is handled by swapping between the add/delete location and the last architectural location. This gives a constant cost, independent of the size of the system. Addition and deletion of constraints can be handled in the same way, by swapping between the add/delete location and the last location. The logical variables are reordered to match and the appropriate move is made in the set of architectural variables. The extension to maintaining architectural and cut constraints as separate classes is straightforward. It's important to note that this would fail if consys actually stored architectural variables at indices 1..n and logicals at indices n+1..n+m. Adding an architectural variable would require freeing index n+1, which would imply moving the logical in slot n+1 to slot n+m+1. But because logical indices are derived from constraint indices, we can't reorder logicals without reordering the constraints. Now consider the effect on the constraint indices of moving the logical at position n+1 to position n+m+1 so that an architectural variable can take index n+1. Or moving from n+m to n-1 on deletion of an architectural. The only way to get it right is to physically move the whole set of logicals to open/close a hole at the end of the set of architecturals. This is just too expensive. In practice, an external client cannot specify the column for adding a variable or constraint. Additions always take place at the last position of a set; the client can only specify if the addition is an architectural variable, architectural constraint, or cut constraint. As a final comment, specifying access to a particular constraint or variable from the branch-and-cut level is trickier than it looks. Scenario: Cut (a) is added to the constraint array; suppose this gives a total of m constraints. Then cut (b) is deleted from pos'n k < m, and cut (a) is moved from pos'n m to pos'n k to maintain compactness. When it comes time to delete cut (a), we need to be able to specify it uniquely and find it, now that it's in pos'n k.) There's no solution in place yet; guess I'll cross that bridge when I come to it. The constraint system structure can be grouped into four components: * A header structure, which is the 'handle' used to pass the data structure; * a constraint coefficient matrix; * a set of associated vectors * a list of attached vectors The set of associated vectors is comprised of: * constraint and variable type vectors; * an objective function vector; * a rhs vector, and (when required) a 'range' rhs vector, rhslow, for range constraints; * variable upper and lower bounds; * constraint upper and lower bounds (for the lhs of constraints; this is used by the arc consistency algorithms). The constraint matrix is the only integral part. The header contains pointers to the other components, which can be swapped with relative ease. The only real difference between associated and attached vectors is that there are dedicated pointers in the constraint system header for the associated vectors. The list of attached vectors is intended to address the problem of dynamic resizing. On one hand, it's desireable to have no a priori limit on, say, the number of cuts that can be added. But if the client has a number of alternate rhs vectors being used with this constraint system, they must also be resized when the constraint system is resized. The list of attached vectors addresses this -- vectors on the list are resized with the constraint system. Since the vector might be moved by realloc, each vector has a list of pointers which should be rewritten if the vector is moved. Extreme coefficients are always a problem, at both ends. The infinitesimal is easier, in some sense. By fiat, |a| < 1.0e-20 is dropped. The infinite is harder. There's far too much code out there that thinks that infinity should be a large finite number (typically, the maximum double precision floating point value, DBL_MAX) rather than the IEEE FP standard value for infinity. Finite and infinite infinity simply do not play well together. So that we can implement scaling and avoid scaling finite infinity, you need to tell consys_create what you plan to use for infinity. At some point, it may become obvious that the same should apply at the infinitesimal end. Don't get me started on NaN. Or numeric_limits in C++. */ #define DYLP_INTERNAL #include "dylib_errs.h" #include "dylib_io.h" #include "dylib_std.h" #include "dylib_strrtns.h" #include "dy_consys.h" static char sccsid[] UNUSED = "@(#)dy_consys_utils.c 4.7 10/15/05" ; static char svnid[] UNUSED = "$Id: dy_consys_utils.c 524 2013-12-15 03:59:57Z tkr $" ; /* Default constraint system constants */ #define ARCHC_DFLT 2500 #define CUT_DFLT 500 #define ARCHV_DFLT 1000 #define EXPAND_MIN_DFLT 10 #define EXPAND_PCT_DFLT .1 /* For debugging vector attach/detach. Defining this variable will cause a trace of attach / update / detach operations. #define DY_CONSYS_TRACE_ATTACH 1 */ static bool empty_col (consys_struct *consys, int colndx, bool *rescan) /* This routine removes the coefficients of a column. If one of the deleted coefficients belongs to the current maximum row, rescan will be set to TRUE. If DYLP_NDEBUG is not defined, a check for zero length columns can be activated with the CONSYS_WRNZERO flag. Since this is an internal routine, index range checks are active only when we're paranoid. Parameters: consys: The constraint system. colndx: Column to be emptied. rescan: (o) Set to TRUE if the column deletion affected the current maximum length row, FALSE otherwise. Returns: TRUE if the column is emptied without error, FALSE otherwise (paranoia only) */ { int rowndx ; colhdr_struct *colhdr ; rowhdr_struct *rowhdr ; coeff_struct *ccoeff,*rcoeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "empty_column" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_ROWHDR)) ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_COLHDR)) ; return (FALSE) ; } if (rescan == NULL) { errmsg(2,rtnnme,"rescan") ; return (FALSE) ; } if (colndx <= 0 || colndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",colndx,1,consys->varcnt) ; return (FALSE) ; } # endif /* Empty the column by repeatedly delinking and freeing the coefficient next to the header. Flag for a rescan if we're unlucky enough to delete an element from the maximum length row. */ *rescan = FALSE ; colhdr = consys->mtx.cols[colndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (FALSE) ; } if (colndx != colhdr->ndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx,colndx,colhdr) ; return (FALSE) ; } # endif for (ccoeff = colhdr->coeffs ; ccoeff != NULL ; ccoeff = colhdr->coeffs) { colhdr->coeffs = ccoeff->colnxt ; rowhdr = ccoeff->rowhdr ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(125,rtnnme,consys->nme,"rowhdr",ccoeff,"column", consys_nme(consys,'v',colndx,FALSE,NULL),colndx) ; return (FALSE) ; } # endif rowndx = rowhdr->ndx ; # ifdef DYLP_PARANOIA if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (FALSE) ; } if (consys->mtx.rows[rowndx] != rowhdr) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowndx,rowndx, consys->mtx.rows[rowndx]) ; return (FALSE) ; } # endif if (rowndx == consys->maxrowndx) *rescan = TRUE ; if (rowhdr->coeffs == ccoeff) rowhdr->coeffs = ccoeff->rownxt ; else { for (rcoeff = rowhdr->coeffs ; rcoeff != NULL ; rcoeff = rcoeff->rownxt) if (rcoeff->rownxt == ccoeff) break ; # ifdef DYLP_PARANOIA if (rcoeff == NULL) { errmsg(119,rtnnme,consys->nme,rowndx,colndx,ccoeff->val, "column",colndx,"row",rowndx) ; return (FALSE) ; } # endif rcoeff->rownxt = ccoeff->rownxt ; } rowhdr->len-- ; # ifndef DYLP_NDEBUG if (rowhdr->len == 0 && flgon(consys->opts,CONSYS_WRNZERO)) dywarn(118,rtnnme,consys->nme,"row",rowhdr->nme,rowndx) ; # endif FREE(ccoeff) ; } consys->mtx.coeffcnt -= colhdr->len ; colhdr->len = 0 ; return (TRUE) ; } static bool empty_row (consys_struct *consys, int rowndx, bool *rescan) /* This routine removes the coefficients of a row. The structure and flow parallels empty_col, but there's really no way to reduce the amount of code by merging the two routines. If DYLP_NDEBUG is not defined, a check for zero length columns can be activated with the CONSYS_WRNZERO flag. Since this is an internal routine, index range checks are active only when we're paranoid. Parameters: consys: The constraint system. rowndx: Row to be emptied. rescan: (o) Set to TRUE if the row deletion affected the current maximum length column, FALSE otherwise. Returns: TRUE if the row is emptied without error, FALSE otherwise (paranoia only). */ { int colndx ; colhdr_struct *colhdr ; rowhdr_struct *rowhdr ; coeff_struct *ccoeff,*rcoeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "empty_row" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_ROWHDR)) ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_COLHDR)) ; return (FALSE) ; } if (rescan == NULL) { errmsg(2,rtnnme,"rescan") ; return (FALSE) ; } if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,consys->concnt) ; return (FALSE) ; } # endif /* Empty the row by repeatedly delinking and freeing the coefficient next to the header. Flag for a rescan if we're unlucky enough to delete an element from the maximum length column. */ *rescan = FALSE ; rowhdr = consys->mtx.rows[rowndx] ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (FALSE) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx,rowhdr) ; return (FALSE) ; } # endif for (rcoeff = rowhdr->coeffs ; rcoeff != NULL ; rcoeff = rowhdr->coeffs) { rowhdr->coeffs = rcoeff->rownxt ; colhdr = rcoeff->colhdr ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(125,rtnnme,consys->nme,"colhdr",rcoeff,"row", consys_nme(consys,'c',rowndx,FALSE,NULL),rowndx) ; return (FALSE) ; } # endif colndx = colhdr->ndx ; # ifdef DYLP_PARANOIA if (colndx <= 0 || colndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",colndx,1,consys->varcnt) ; return (FALSE) ; } if (consys->mtx.cols[colndx] != colhdr) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colndx,colndx, consys->mtx.cols[colndx]) ; return (FALSE) ; } # endif if (colndx == consys->maxcolndx) *rescan = TRUE ; if (colhdr->coeffs == rcoeff) colhdr->coeffs = rcoeff->colnxt ; else { for (ccoeff = colhdr->coeffs ; ccoeff != NULL ; ccoeff = ccoeff->colnxt) if (ccoeff->colnxt == rcoeff) break ; # ifdef DYLP_PARANOIA if (ccoeff == NULL) { errmsg(119,rtnnme,consys->nme,rowndx,colndx,rcoeff->val, "row",rowndx,"column",colndx) ; return (FALSE) ; } # endif ccoeff->colnxt = rcoeff->colnxt ; } colhdr->len-- ; # ifndef DYLP_NDEBUG if (colhdr->len == 0 && flgon(consys->opts,CONSYS_WRNZERO)) dywarn(118,rtnnme,consys->nme,"column",colhdr->nme,colndx) ; # endif FREE(rcoeff) ; } consys->mtx.coeffcnt -= rowhdr->len ; rowhdr->len = 0 ; return (TRUE) ; } static bool move_col (consys_struct *consys, int fndx, int tndx) /* This routine relocates a column from position fndx to position tndx. It is assumed that there is space at tndx. The routine adjusts the column header and any relevant attached arrays. Since this is an internal routine, index range checks are active only if we're paranoid. Parameters: consys: The constraint matrix fndx: The 'from' index tndx: The 'to' index Returns: TRUE if the transfer completes without error, FALSE otherwise. The routine will not fail unless paranoid or debugging checks are enabled. */ { attvhdr_struct *attvhdr ; colhdr_struct *colhdr ; # ifdef DYLP_PARANOIA const char *rtnnme = "move_col" ; if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_COLHDR)) ; return (FALSE) ; } if (fndx <= 0 || fndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",fndx,1,consys->varcnt) ; return (FALSE) ; } if (tndx <= 0 || tndx > consys->varcnt+1) { errmsg(102,rtnnme,consys->nme,"column",tndx,1,consys->varcnt+1) ; return (FALSE) ; } # endif /* Get the the column header and relocate the column. */ colhdr = consys->mtx.cols[fndx] ; consys->mtx.cols[tndx] = colhdr ; colhdr->ndx = tndx ; if (consys->maxcolndx == fndx) consys->maxcolndx = tndx ; if (consys->xzndx == fndx) consys->xzndx = tndx ; /* Walk the attached vectors list and make the corresponding change in any of the row vectors. */ for (attvhdr = consys->attvecs ; attvhdr != NULL ; attvhdr = attvhdr->nxt) { # ifdef DYLP_PARANOIA if (!(VALID_ATTVTYPE(attvhdr->what))) { errmsg(114,rtnnme,consys->nme,"attached",attvhdr->what) ; return (FALSE) ; } if (attvhdr->vec == NULL) { errmsg(127,rtnnme,consys->nme,attvhdr, consys_assocnme(NULL,attvhdr->what)) ; return (FALSE) ; } # endif if (flgon(attvhdr->what,CONSYS_ROWVEC)) memcpy(((char *) attvhdr->vec)+tndx*attvhdr->elsze, ((char *) attvhdr->vec)+fndx*attvhdr->elsze,attvhdr->elsze) ; } return (TRUE) ; } static bool move_row (consys_struct *consys, int fndx, int tndx) /* This routine relocates a row from position fndx to position tndx. It is assumed that there is space at tndx. The routine adjusts the row header and any relevant attached arrays. Since this is an internal routine, index range checks are active only if we're paranoid. Parameters: consys: The constraint matrix fndx: The 'from' index tndx: The 'to' index Returns: TRUE if the transfer completes without error, FALSE otherwise. The routine will not fail unless paranoid or debugging checks are enabled. */ { attvhdr_struct *attvhdr ; rowhdr_struct *rowhdr ; # ifdef DYLP_PARANOIA const char *rtnnme = "move_row" ; if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_ROWHDR)) ; return (FALSE) ; } if (fndx <= 0 || fndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",fndx,1,consys->concnt) ; return (FALSE) ; } if (tndx <= 0 || tndx > consys->concnt+1) { errmsg(102,rtnnme,consys->nme,"row",tndx,1,consys->concnt+1) ; return (FALSE) ; } # endif /* Get the the row header and relocate the row. */ rowhdr = consys->mtx.rows[fndx] ; consys->mtx.rows[tndx] = rowhdr ; rowhdr->ndx = tndx ; if (consys->maxrowndx == fndx) consys->maxrowndx = tndx ; if (consys->objndx == fndx) consys->objndx = tndx ; /* Walk the attached vectors and make the corresponding change in any of the column vectors. */ for (attvhdr = consys->attvecs ; attvhdr != NULL ; attvhdr = attvhdr->nxt) { # ifdef DYLP_PARANOIA if (!(VALID_ATTVTYPE(attvhdr->what))) { errmsg(114,rtnnme,consys->nme,"attached",attvhdr->what) ; return (FALSE) ; } if (attvhdr->vec == NULL) { errmsg(127,rtnnme,consys->nme,attvhdr, consys_assocnme(NULL,attvhdr->what)) ; return (FALSE) ; } # endif if (flgon(attvhdr->what,CONSYS_COLVEC)) memcpy(((char *) attvhdr->vec)+tndx*attvhdr->elsze, ((char *) attvhdr->vec)+fndx*attvhdr->elsze,attvhdr->elsze) ; } return (TRUE) ; } static bool find_maxes (consys_struct *consys, bool scan_cols, bool scan_rows) /* This routine scans the constraint matrix for the maximum length column and/or row, as indicated. Parameters: consys: The constraint matrix. scan_cols: TRUE if the maximum length column needs to be located. scan_rows: TRUE if the maximum length row needs to be located. Returns: TRUE if the scan completes without error, FALSE otherwise. The routine will not fail unless paranoid checks are enabled. */ { int colndx,rowndx ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "find_maxes" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_ROWHDR)) ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_COLHDR)) ; return (FALSE) ; } # endif /* Do the scans, as requested. */ if (scan_cols == TRUE) { consys->maxcollen = 0 ; for (colndx = 1 ; colndx <= consys->varcnt ; colndx++) { # ifdef DYLP_PARANOIA if (consys->mtx.cols[colndx] == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (consys->mtx.cols[colndx]->len == 0 && flgon(consys->opts,CONSYS_WRNZERO)) dywarn(118,rtnnme, consys->nme,"column",consys->mtx.cols[colndx]->nme,colndx) ; # endif if (consys->mtx.cols[colndx]->len > consys->maxcollen) { consys->maxcollen = consys->mtx.cols[colndx]->len ; consys->maxcolndx = colndx ; } } } if (scan_rows == TRUE) { consys->maxrowlen = 0 ; for (rowndx = 1 ; rowndx <= consys->concnt ; rowndx++) { # ifdef DYLP_PARANOIA if (consys->mtx.rows[rowndx] == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (consys->mtx.rows[rowndx]->len == 0 && flgon(consys->opts,CONSYS_WRNZERO)) dywarn(118,rtnnme, consys->nme,"row",consys->mtx.rows[rowndx]->nme,rowndx) ; # endif if (consys->mtx.rows[rowndx]->len > consys->maxrowlen) { consys->maxrowlen = consys->mtx.rows[rowndx]->len ; consys->maxrowndx = rowndx ; } } } return (TRUE) ; } static bool add_logical (consys_struct *consys, int rowndx) /* This routine adds a logical variable appropriate for the constraint specified by rowndx. The routine assumes that its caller has arranged for the column at rowndx to be empty. It will create a new column header and coefficient, and fill in the various associated arrays. The conventions are as follows: Constraint Logical Coefficient Bounds LE slack 1.0 0 <= slack <= +inf EQ artificial 1.0 0 <= artificial <= 0 GE surplus -1.0 0 <= surplus <= +inf RNG slack 1.0 0 <= slack <= (rhs-rhslow) To properly set up an artificial variable, the vub array must be present. To properly set up a slack for a range constraint, the rhs, rhslow, and vub arrays must be present. Parameters: consys: constraint system rowndx: constraint receiving the logical variable. Returns: TRUE if the logical is successfully created, FALSE if there are problems. */ { int colndx ; colhdr_struct *colhdr ; rowhdr_struct *rowhdr ; coeff_struct *coeff ; contyp_enum contyp ; double val, lb, ub ; char *nme ; const char *rtnnme = "add_logical" ; /* consys_io.c */ extern char *consys_lognme(consys_struct *consys, int rowndx, char *clientbuf) ; # ifdef DYLP_PARANOIA /* The usual, and checks that some necessary associated arrays are present. This is an internal routine, so index bounds checks are dropped unless we're being paranoid. */ if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_ROWHDR)) ; return (FALSE) ; } if (consys->ctyp == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_CTYP)) ; return (FALSE) ; } if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (FALSE) ; } if (consys->mtx.rows[rowndx] == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_COLHDR)) ; return (FALSE) ; } if (consys->vtyp == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_VTYP)) ; return (FALSE) ; } # endif /* Construct a name, coefficient and upper and lower bounds, based on the type of constraint. */ nme = consys_lognme(consys,rowndx,NULL) ; rowhdr = consys->mtx.rows[rowndx] ; val = 1.0 ; lb = 0.0 ; ub = consys->inf ; contyp = consys->ctyp[rowndx] ; switch (contyp) { case contypLE: { break ; } case contypEQ: { if (consys->vub != NULL) ub = 0.0 ; else { errmsg(120,rtnnme,consys->nme,nme,rowhdr->nme,rowndx) ; return (FALSE) ; } break ; } case contypGE: { val = -1.0 ; break ; } case contypRNG: { if (consys->rhs != NULL && consys->rhslow != NULL && consys->vub != NULL) { ub = consys->rhs[rowndx]-consys->rhslow[rowndx] ; } else { errmsg(120,rtnnme,consys->nme,nme,rowhdr->nme,rowndx) ; return (FALSE) ; } break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } # ifdef DYLP_PARANOIA if (consys->varcnt+1 > consys->colsze) { errmsg(129,rtnnme,consys->nme,nme,rowndx,consys->varcnt+1, "variables",consys->colsze) ; return (FALSE) ; } # endif /* Initialise the column header, install the coefficient in the constraint, and set values in the associated arrays. The previous checks guarantee that the arrays are present if they're really needed. You wouldn't think we'd need to check maxcollen here, but creating constraint systems in the presence of lots of fixed variables can leads to seriously degenerate situations. */ colndx = rowndx ; colhdr = (colhdr_struct *) CALLOC(1,sizeof(colhdr_struct)) ; consys->mtx.cols[colndx] = colhdr ; colhdr->ndx = colndx ; colhdr->nme = STRALLOC(nme) ; coeff = (coeff_struct *) MALLOC(sizeof(coeff_struct)) ; coeff->rowhdr = rowhdr ; coeff->colhdr = colhdr ; coeff->val = val ; coeff->colnxt = colhdr->coeffs ; colhdr->coeffs = coeff ; colhdr->len = 1 ; if (consys->maxcollen == 0) { consys->maxcollen = 1 ; consys->maxcolndx = colndx ; } coeff->rownxt = rowhdr->coeffs ; rowhdr->coeffs = coeff ; rowhdr->len++ ; if (rowhdr->len > consys->maxrowlen) { consys->maxrowlen = rowhdr->len ; consys->maxrowndx = rowndx ; } consys->mtx.coeffcnt++ ; consys->logvcnt++ ; consys->varcnt++ ; consys->vtyp[colndx] = vartypCON ; if (consys->obj != NULL) consys->obj[colndx] = 0.0 ; if (consys->vlb != NULL) consys->vlb[colndx] = 0.0 ; if (consys->vub != NULL) consys->vub[colndx] = ub ; return (TRUE) ; } consys_struct *consys_create (const char *nme, flags parts, flags opts, int concnt, int varcnt, double infinity) /* This routine initialises a constraint system data structure, returning a pointer to the header. The parameters varcnt and concnt can be used to set the initial size of the structure; they are interpreted as follows: <= 0: use default sizes > 0: use parameter value Parameters: nme: the name of the constraint system parts: flags indicating which of the associated vectors should be created opts: flags indicating which options should be set varcnt: the expected number of variables concnt: the expected number of constraints infinity: the value to be used as infinity Returns: pointer to the header. */ { int colsze,rowsze ; consys_struct *consys ; const char *rtnnme = "consys_create" ; /* Set the row and column sizes. */ if (concnt > 0) rowsze = concnt ; else rowsze = ARCHC_DFLT+CUT_DFLT ; if (varcnt > 0) colsze = varcnt ; else colsze = ARCHV_DFLT ; if (flgon(opts,CONSYS_LVARS)) colsze += rowsze ; /* Create the header and initialise the non-pointer fields as needed. We're counting on calloc to clear the allocated space, so that the parts field is clear and the associated vector pointers are null. */ consys = (consys_struct *) CALLOC(1,sizeof(consys_struct)) ; if (nme == NULL) consys->nme = STRALLOC("<>") ; else consys->nme = STRALLOC(nme) ; consys->opts = opts ; consys->inf = infinity ; consys->tiny = 1.0e-20 ; if (finite(infinity)) setflg(consys->opts,CONSYS_FININF) ; consys->colsze = colsze ; consys->rowsze = rowsze ; /* Do up the constraint matrix headers next. */ consys->mtx.cols = (colhdr_struct **) CALLOC(colsze+1,sizeof(colhdr_struct *)) ; consys->mtx.rows = (rowhdr_struct **) CALLOC(rowsze+1,sizeof(rowhdr_struct *)) ; /* Now add any requested associated vectors. */ #define CONSYS_MKASSOC(zz_flg_zz,zz_type_zz,zz_ptr_zz) \ if (flgon(parts,zz_flg_zz)) \ { if (consys_attach(consys,zz_flg_zz, \ sizeof(zz_type_zz),(void **) &zz_ptr_zz) == FALSE) \ { errmsg(100,rtnnme,consys->nme,consys_assocnme(NULL,zz_flg_zz)) ; \ return (NULL) ; } \ setflg(consys->parts,zz_flg_zz) ; \ clrflg(parts,zz_flg_zz) ; } CONSYS_MKASSOC(CONSYS_OBJ,double,consys->obj) CONSYS_MKASSOC(CONSYS_VTYP,vartyp_enum,consys->vtyp) CONSYS_MKASSOC(CONSYS_VUB,double,consys->vub) CONSYS_MKASSOC(CONSYS_VLB,double,consys->vlb) CONSYS_MKASSOC(CONSYS_RHS,double,consys->rhs) CONSYS_MKASSOC(CONSYS_RHSLOW,double,consys->rhslow) CONSYS_MKASSOC(CONSYS_CTYP,contyp_enum,consys->ctyp) CONSYS_MKASSOC(CONSYS_CUB,conbnd_struct,consys->cub) CONSYS_MKASSOC(CONSYS_CLB,conbnd_struct,consys->clb) CONSYS_MKASSOC(CONSYS_RSCALE,double,consys->rowscale) CONSYS_MKASSOC(CONSYS_CSCALE,double,consys->colscale) #undef CONSYS_MKASSOC # ifndef DYLP_NDEBUG if (parts != 0) { errmsg(114,rtnnme,consys->nme,"associated",parts) ; } # endif return (consys) ; } bool consys_dupsys (consys_struct *src, consys_struct **p_dst, flags dstvecs) /* This routine duplicates a constraint system, including the coefficient matrix and those associated vectors specified by dstvecs which exist in the source system. The algorithm is to first create an empty constraint system with allocated size equal to the original. The new header is touched up with information from the source. Empty rows are created in the new system by walking the row header of the source and calling addrow_pk for each row. The columns are filled in using getcol_pk and addcol_pk to copy from the source to the destination. Finally, the specified associated vectors are block copied. Parameters: src: the constraint system to be duplicated p_dst: (o) the duplicate constraint system dstvecs: flags indicating the associated vectors that are to be duplicated. Returns: TRUE if the duplication completes without error, FALSE otherwise. */ { int i,j ; char ac ; pkvec_struct *pkvec ; consys_struct *dst ; const char *rtnnme = "consys_dupsys" ; # ifdef DYLP_PARANOIA if (src == NULL) { errmsg(2,rtnnme,"src") ; return (FALSE) ; } if (p_dst == NULL) { errmsg(2,rtnnme,"&dst") ; return (FALSE) ; } # endif *p_dst = NULL ; /* For a start, create an empty system with the proper allocated size and associated vectors. We're only interested in the vectors that actually exist in the source. */ dstvecs = dstvecs & src->parts ; dst = consys_create(src->nme,dstvecs,0,src->rowsze,src->colsze,src->inf) ; if (dst == NULL) { errmsg(152,rtnnme,src->nme) ; return (FALSE) ; } /* Copy various header fields from the source system. The reason that src->opts is not used to create dst is that it may contain CONSYS_LVARS, which would complicate the calculation of allocated size. */ dst->opts = src->opts ; dst->maxaij = src->maxaij ; dst->minaij = src->minaij ; if (src->objnme != NULL) dst->objnme = STRALLOC(src->objnme) ; dst->objndx = src->objndx ; dst->xzndx = src->xzndx ; /* Walk the row header of src and add empty rows to dst. */ pkvec = pkvec_new(0) ; for (i = 1 ; i <= src->concnt ; i++) { pkvec->nme = src->mtx.rows[i]->nme ; if (i <= src->archccnt) ac = 'a' ; else ac = 'c' ; if (consys_addrow_pk(dst,ac,src->ctyp[i],pkvec,0.0,0.0,NULL,NULL) == FALSE) { errmsg(156,rtnnme,"row",dst->nme,pkvec->nme) ; if (pkvec != NULL) pkvec_free(pkvec) ; consys_free(dst) ; return (FALSE) ; } # ifdef DYLP_PARANOIA if (i != pkvec->ndx) { errmsg(136,rtnnme,src->nme,"loss of synch","rows",i,pkvec->ndx) ; if (pkvec != NULL) pkvec_free(pkvec) ; consys_free(dst) ; return (FALSE) ; } # endif } if (pkvec != NULL) pkvec_free(pkvec) ; /* Add the coefficients, column by column. */ pkvec = pkvec_new(src->maxcollen) ; for (j = 1 ; j <= src->varcnt ; j++) { if (consys_getcol_pk(src,j,&pkvec) == FALSE) { errmsg(122,rtnnme,src->nme,"column",consys_nme(src,'v',j,TRUE,NULL),j) ; if (pkvec != NULL) pkvec_free(pkvec) ; consys_free(dst) ; return (FALSE) ; } if (consys_addcol_pk(dst,src->vtyp[j],pkvec,0.0,0.0,0.0) == FALSE) { errmsg(156,rtnnme,"column",dst->nme,pkvec->nme) ; if (pkvec != NULL) pkvec_free(pkvec) ; consys_free(dst) ; return (FALSE) ; } # ifdef DYLP_PARANOIA if (j != pkvec->ndx) { errmsg(136,rtnnme,src->nme,"loss of synch","columns",i,pkvec->ndx) ; if (pkvec != NULL) pkvec_free(pkvec) ; consys_free(dst) ; return (FALSE) ; } # endif } if (pkvec != NULL) pkvec_free(pkvec) ; # ifdef DYLP_PARANOIA if (src->mtx.coeffcnt != dst->mtx.coeffcnt) { errmsg(136,rtnnme,src->nme,"coefficient count mismatch","columns", src->mtx.coeffcnt,dst->mtx.coeffcnt) ; consys_free(dst) ; return (FALSE) ; } # endif /* Force copy to use the same maximum row and column indices as the original. (The difference arises from insertion order of columns.) */ dst->maxrowndx = src->maxrowndx ; dst->maxcolndx = src->maxcolndx ; /* Copy the associated vectors. */ if (flgon(dstvecs,CONSYS_OBJ)) memcpy(dst->obj,src->obj,(src->varcnt+1)*sizeof(double)) ; if (flgon(dstvecs,CONSYS_VUB)) memcpy(dst->vub,src->vub,(src->varcnt+1)*sizeof(double)) ; if (flgon(dstvecs,CONSYS_VLB)) memcpy(dst->vlb,src->vlb,(src->varcnt+1)*sizeof(double)) ; if (flgon(dstvecs,CONSYS_VTYP)) memcpy(dst->vtyp,src->vtyp,(src->varcnt+1)*sizeof(vartyp_enum)) ; if (flgon(dstvecs,CONSYS_CSCALE)) memcpy(dst->colscale,src->colscale,(src->varcnt+1)*sizeof(double)) ; if (flgon(dstvecs,CONSYS_RHS)) memcpy(dst->rhs,src->rhs,(src->concnt+1)*sizeof(double)) ; if (flgon(dstvecs,CONSYS_RHSLOW)) memcpy(dst->rhslow,src->rhslow,(src->concnt+1)*sizeof(double)) ; if (flgon(dstvecs,CONSYS_CUB)) memcpy(dst->cub,src->cub,(src->concnt+1)*sizeof(conbnd_struct)) ; if (flgon(dstvecs,CONSYS_CLB)) memcpy(dst->clb,src->clb,(src->concnt+1)*sizeof(conbnd_struct)) ; if (flgon(dstvecs,CONSYS_CTYP)) memcpy(dst->ctyp,src->ctyp,(src->concnt+1)*sizeof(contyp_enum)) ; if (flgon(dstvecs,CONSYS_RSCALE)) memcpy(dst->rowscale,src->rowscale,(src->concnt+1)*sizeof(double)) ; *p_dst = dst ; return (TRUE) ; } void consys_free (consys_struct *consys) /* This routine frees the space allocated for a constraint system. Sigh. The trouble with complex data structures is they're a pain to disassemble. Parameter: consys: constraint system Returns: undefined */ { int ndx ; attvhdr_struct *attvhdr ; lnk_struct *lnk ; colhdr_struct *colhdr ; rowhdr_struct *rowhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 const char *rtnnme = "consys_free" ; if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return ; } # endif /* Start by dismantling the attached vector list. */ for (attvhdr = consys->attvecs ; attvhdr != NULL ; attvhdr = consys->attvecs) { consys->attvecs = attvhdr->nxt ; for (lnk = attvhdr->pveclst ; lnk != NULL ; lnk = attvhdr->pveclst) { attvhdr->pveclst = lnk->llnxt ; FREE(lnk) ; } FREE(attvhdr) ; } /* Take care of the associated vectors. */ if (consys->obj != NULL) FREE(consys->obj) ; if (consys->vtyp != NULL) FREE(consys->vtyp) ; if (consys->vub != NULL) FREE(consys->vub) ; if (consys->vlb != NULL) FREE(consys->vlb) ; if (consys->rhs != NULL) FREE(consys->rhs) ; if (consys->rhslow != NULL) FREE(consys->rhslow) ; if (consys->ctyp != NULL) FREE(consys->ctyp) ; if (consys->cub != NULL) FREE(consys->cub) ; if (consys->clb != NULL) FREE(consys->clb) ; if (consys->rowscale != NULL) FREE(consys->rowscale) ; if (consys->colscale != NULL) FREE(consys->colscale) ; /* Now dismantle the constraint matrix. Walk the column header array, freeing the coefficients and header for each column. Then walk the row header array, freeing the header for each row. Finally, free the column and row header arrays and the matrix header. */ for (ndx = 1 ; ndx <= consys->varcnt ; ndx++) { colhdr = consys->mtx.cols[ndx] ; for (coeff = colhdr->coeffs ; coeff != NULL ; coeff = colhdr->coeffs) { colhdr->coeffs = coeff->colnxt ; FREE(coeff) ; } if (colhdr->nme != NULL) STRFREE(colhdr->nme) ; FREE(colhdr) ; } for (ndx = 1 ; ndx <= consys->concnt ; ndx++) { rowhdr = consys->mtx.rows[ndx] ; if (rowhdr->nme != NULL) STRFREE(rowhdr->nme) ; FREE(rowhdr) ; } FREE(consys->mtx.cols) ; FREE(consys->mtx.rows) ; /* Finish up with the constraint system header. */ if (consys->objnme != NULL) STRFREE(consys->objnme) ; if (consys->nme != NULL) STRFREE(consys->nme) ; FREE(consys) ; return ; } bool consys_attach (consys_struct *consys, flags what, int elsze, void **pvec) /* This routine 'attaches' a vector (more specifically, a reference to it) to the constraint system so that the vector and references will be automatically resized when the constraint system is resized. If *pvec is null, a vector of appropriate size is created. If the vector pointed to by pvec isn't already on the attvecs list, a new entry is created. Then pvec is added to the list of pointers referring to the vector. The expectation is that this list will never become very big, so there's no particular attempt to keep the entries in order. If DYLP_NDEBUG is not set and the WRNATT flag is set, a warning will be issued if the attach request specifies a (pointer,vector) pair already attached to the system. Parameters: consys: constraint system what: type of vector being attached elsze: the size of an element in the vector pvec: (i) address of pointer to the vector; if *pvec == NULL, a vector will be created (o) *pvec holds address of vector Returns: TRUE if the attachment is successful, FALSE otherwise (paranoia only). */ { int ndx ; attvhdr_struct *attvhdr ; lnk_struct *lnk ; double *dvec ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_attach" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (pvec == NULL) { errmsg(2,rtnnme,"&vec") ; return (FALSE) ; } if (!(VALID_ATTVTYPE(what))) { errmsg(6,rtnnme,"vector type",what) ; return (FALSE) ; } if (elsze <= 0) { errmsg(5,rtnnme,"element size",elsze) ; return (FALSE) ; } # endif /* Have a look at vec, and create one if we need to. Otherwise, look through the list of attached vectors to see if there's already a header for this vector (and we're just adding another pointer to it). Remember, colsze is the allocated column capacity, hence the size of a row; similarly for rowsze. */ if (*pvec == NULL) { if (flgon(what,CONSYS_ROWVEC)) { *pvec = (void *) CALLOC(consys->colsze+1,elsze) ; } else { *pvec = (void *) CALLOC(consys->rowsze+1,elsze) ; } if (flgon(what,CONSYS_VUB)) { dvec = (double *) *pvec ; dvec[0] = 0.0 ; for (ndx = 1 ; ndx <= consys->colsze ; ndx++) { dvec[ndx] = consys->inf ; } } else if (flgon(what,CONSYS_CSCALE)) { dvec = (double *) *pvec ; dvec[0] = 0.0 ; for (ndx = 1 ; ndx <= consys->colsze ; ndx++) dvec[ndx] = 1.0 ; } else if (flgon(what,CONSYS_RSCALE)) { dvec = (double *) *pvec ; dvec[0] = 0.0 ; for (ndx = 1 ; ndx <= consys->rowsze ; ndx++) dvec[ndx] = 1.0 ; } attvhdr = NULL ; } else { for (attvhdr = consys->attvecs ; attvhdr != NULL ; attvhdr = attvhdr->nxt) if (attvhdr->vec == *pvec) break ; } /* If we didn't find a header, create one now. */ if (attvhdr == NULL) { attvhdr = (attvhdr_struct *) MALLOC(sizeof(attvhdr_struct)) ; attvhdr->what = what ; attvhdr->elsze = elsze ; attvhdr->vec = *pvec ; attvhdr->pveclst = NULL ; attvhdr->nxt = consys->attvecs ; consys->attvecs = attvhdr ; } # ifdef DYLP_PARANOIA else { if (attvhdr->what != what) { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } # endif /* Make an entry for pvec. If there's already an entry, consider warning the user. */ for (lnk = attvhdr->pveclst ; lnk != NULL ; lnk = lnk->llnxt) if (pvec == (void **) lnk->llval) break ; if (lnk == NULL) { lnk = (lnk_struct *) MALLOC(sizeof(lnk_struct)) ; lnk->llval = (void *) pvec ; lnk->llnxt = attvhdr->pveclst ; attvhdr->pveclst = lnk ; } # ifndef DYLP_NDEBUG else { if (flgon(consys->opts,CONSYS_WRNATT)) dywarn(107,rtnnme,consys_assocnme(consys,what),*pvec,pvec) ; } # endif # if DY_CONSYS_TRACE_ATTACH dyio_outfmt(IOID_NOSTRM,TRUE,"\n [%s] Attached",consys->nme) ; dyio_outfmt(IOID_NOSTRM,TRUE," vec = %#0x, ref = %#0x.",*pvec,pvec) ; # endif return (TRUE) ; } bool consys_update (consys_struct *consys, void *old, void *new) /* This routine looks up the entry for the vector specified by old and updates all the references with the vector in new. In effect, the old vector is detached from the constraint system and the new one attached in its place. It's the user's responsibility to make sure that some reference to old is retained, should that be necessary. Parameters: consys: constraint system old: old vector new: new vector Returns: TRUE if the update is successful, FALSE otherwise. */ { attvhdr_struct *attvhdr ; lnk_struct *lnk ; const char *rtnnme = "consys_update" ; # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (old == NULL) { errmsg(2,rtnnme,"old") ; return (FALSE) ; } if (new == NULL) { errmsg(2,rtnnme,"new") ; return (FALSE) ; } # endif # if DY_CONSYS_TRACE_ATTACH dyio_outfmt(IOID_INV,TRUE,"\n [%s] Converting ",consys->nme) ; dyio_outfmt(IOID_INV,TRUE,", old = %#0x to new = %#0x.",old,new) ; # endif /* Look for an entry for old. It's an error if we can't find it. */ for (attvhdr = consys->attvecs ; attvhdr != NULL ; attvhdr = attvhdr->nxt) if (attvhdr->vec == old) break ; if (attvhdr == NULL) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(104,rtnnme,consys->nme,old) ; return (FALSE) ; } /* Do the update. */ # ifdef DYLP_PARANOIA if (attvhdr->pveclst == NULL) { errmsg(108,rtnnme,consys_assocnme(NULL,attvhdr->what),attvhdr->vec) ; return (FALSE) ; } # endif attvhdr->vec = new ; for (lnk = attvhdr->pveclst ; lnk != NULL ; lnk = lnk->llnxt) { # ifdef DYLP_PARANOIA if (lnk->llval == NULL) { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } # endif *((void **) lnk->llval) = new ; } return (TRUE) ; } bool consys_detach (consys_struct *consys, void **pvec, bool all) /* This routine detaches the reference specified by pvec by removing it from the attached vector list. If all == TRUE, all references to the vector *pvec are removed and the vector is removed from the attached vector list. It's an error if pvec doesn't show up on the reference list for the vector. Parameters: consys: constraint system pvec: address of pointer to vector; *pvec must also be valid all: TRUE to detach all references to this vector except the associated vector entry, FALSE if only pvec is to be detached. Returns: TRUE if the entry is found and detached, FALSE otherwise */ { attvhdr_struct *attvhdr,**pattvhdr ; lnk_struct *lnk,**plnk ; bool pvec_seen ; void *vec ; const char *rtnnme = "consys_detach" ; # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->attvecs == NULL) { errmsg(101,rtnnme,consys->nme,"attached vector list") ; return (FALSE) ; } if (pvec == NULL) { errmsg(2,rtnnme,"&vec") ; return (FALSE) ; } if (*pvec == NULL) { errmsg(2,rtnnme,"vec") ; return (FALSE) ; } # endif # if DY_CONSYS_TRACE_ATTACH dyio_outfmt(IOID_NOSTRM,TRUE,"\n [%s] Detaching ",consys->nme) ; if (all == TRUE) { dyio_outfmt(IOID_NOSTRM,TRUE,"(all) ") ; } dyio_outfmt(IOID_NOSTRM,TRUE,", vec = %#0x, ref = %#0x.",*pvec,pvec) ; # endif /* Find the entry for the vector. It's an error to try and detach a vector that isn't attached. */ vec = *pvec ; for (pattvhdr = &consys->attvecs, attvhdr = *pattvhdr ; attvhdr != NULL ; pattvhdr = &attvhdr->nxt, attvhdr = *pattvhdr) if (attvhdr->vec == vec) break ; if (attvhdr == NULL) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(104,rtnnme,consys->nme,vec) ; return (FALSE) ; } # ifdef DYLP_PARANOIA if (attvhdr->pveclst == NULL) { errmsg(108,rtnnme,consys_assocnme(NULL,attvhdr->what),attvhdr->vec) ; return (FALSE) ; } # endif /* Work over the pvec list, detaching entries as appropriate. If there are no references left, delete the vector's entry too. */ if (all == TRUE) { for (lnk = attvhdr->pveclst ; lnk != NULL ; lnk = attvhdr->pveclst) { attvhdr->pveclst = lnk->llnxt ; FREE(lnk) ; } *pattvhdr = attvhdr->nxt ; FREE(attvhdr) ; } else { pvec_seen = FALSE ; plnk = &attvhdr->pveclst ; for (lnk = *plnk ; lnk != NULL ; lnk = *plnk) { if (pvec == (void **) lnk->llval) { pvec_seen = TRUE ; *plnk = lnk->llnxt ; FREE(lnk) ; } else { plnk = &lnk->llnxt ; } } if (pvec_seen == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(109,rtnnme,consys->nme,pvec,consys_assocnme(NULL,attvhdr->what), attvhdr->vec) ; return (FALSE) ; } if (attvhdr->pveclst == NULL) { *pattvhdr = attvhdr->nxt ; FREE(attvhdr) ; } } return (TRUE) ; } bool consys_realloc (consys_struct *consys, char rowcol, int incr) /* This routine is responsible for expanding the constraint matrix and the attached arrays when additional room is needed to add rows or columns. It does nothing except create open space at the end of arrays (increasing colsze or rowsze). Expanding the column capacity entails expanding the column header of the constraint matrix, and any attached row vectors. Expanding the row capacity entails expanding the row header of the constraint matrix, and any attached column vectors. If coupling is enabled, a column expansion is forced to make room for the logical variables that will go with the new rows. In practice, it's all pretty straightforward: The row and/or column headers are expanded as needed, then we walk the attached vector list, expanding as needed and updating pointers when the expanded vector moves in memory. If incr is <= 0, a default expansion of 10% (minimum 10 rows/columns) is used. Parameters: consys: Constraint system. rowcol: 'c' for column expansion, 'r' for row expansion incr: The number of additional rows/columns. Returns: TRUE if the expansion is successful, FALSE otherwise. */ { int rowsze,oldrowsze,colsze,oldcolsze,ndx,elsze ; bool expcols,exprows ; flags what ; char *vec ; double *dvec ; attvhdr_struct *attvhdr ; lnk_struct *lnk ; const char *rtnnme = "consys_realloc" ; /* Suppress `might be used uninitialized' from gcc. */ rowsze = -1 ; oldrowsze = -1 ; colsze = -1 ; oldcolsze = -1 ; # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (FALSE) ; } # endif /* Figure out the size of the increase, if the user didn't specify. If we're asked to do a row increase and coupling is enabled, check that the capacity remaining on the column side is sufficient to accommodate the additional logicals. If not, calculate the needed increase and force a column expansion. */ expcols = FALSE ; exprows = FALSE ; switch (rowcol) { case 'c': { if (incr <= 0) incr = maxx(10,(int)(consys->colsze*EXPAND_PCT_DFLT)) ; colsze = consys->colsze+incr ; expcols = TRUE ; break ; } case 'r': { if (incr <= 0) incr = maxx(10,(int)(consys->rowsze*EXPAND_PCT_DFLT)) ; rowsze = consys->rowsze+incr ; exprows = TRUE ; if (flgon(consys->opts,CONSYS_LVARS)) if (consys->colsze < consys->varcnt+incr) { expcols = TRUE ; colsze = consys->varcnt+incr ; } break ; } default: { errmsg(3,rtnnme,"rowcol",rowcol) ; return (FALSE) ; } } /* Expand the row and column header as necessary. */ if (exprows == TRUE) { oldrowsze = consys->rowsze ; consys->mtx.rows = (rowhdr_struct **) REALLOC(consys->mtx.rows,(rowsze+1)*sizeof(rowhdr_struct **)) ; memset(&consys->mtx.rows[oldrowsze+1],0, (rowsze-oldrowsze)*sizeof(rowhdr_struct **)) ; consys->rowsze = rowsze ; } if (expcols == TRUE) { oldcolsze = consys->colsze ; consys->mtx.cols = (colhdr_struct **) REALLOC(consys->mtx.cols,(colsze+1)*sizeof(colhdr_struct **)) ; memset(&consys->mtx.cols[oldcolsze+1],0, (colsze-oldcolsze)*sizeof(colhdr_struct **)) ; consys->colsze = colsze ; } /* Now, walk the attached vector list and do any necessary expansions. Where the expansion results in the vector moving to a different block of memory, walk the reference list and update the pointers. Note that we don't care why vec didn't change -- it could be that the vector wasn't expanded at all, or that it was expanded but didn't move. */ for (attvhdr = consys->attvecs ; attvhdr != NULL ; attvhdr = attvhdr->nxt) { vec = (char *) attvhdr->vec ; what = attvhdr->what ; elsze = attvhdr->elsze ; # ifdef DYLP_PARANOIA if (elsze <= 0) { errmsg(106,rtnnme,consys->nme,vec,elsze) ; return (FALSE) ; } if (attvhdr->pveclst == NULL) { errmsg(108,rtnnme,consys_assocnme(NULL,attvhdr->what),attvhdr->vec) ; return (FALSE) ; } if (!(VALID_ATTVTYPE(what))) { errmsg(114,rtnnme,consys->nme,"attached",attvhdr->what) ; return (FALSE) ; } # endif if (flgon(what,CONSYS_ROWVEC)) { if (expcols == TRUE) { vec = (char *) REALLOC(attvhdr->vec,(colsze+1)*elsze) ; if (flgon(what,CONSYS_VUB)) { dvec = (double *) vec ; for (ndx = oldcolsze+1 ; ndx <= colsze ; ndx++) { dvec[ndx] = consys->inf ; } } else if (flgon(what,CONSYS_CSCALE)) { dvec = (double *) vec ; dvec[0] = 0.0 ; for (ndx = oldcolsze+1 ; ndx <= colsze ; ndx++) dvec[ndx] = 1.0 ; } else { memset(vec+(oldcolsze+1)*elsze,0,(colsze-oldcolsze)*elsze) ; } } } else { if (exprows == TRUE) { vec = (char *) REALLOC(attvhdr->vec,(rowsze+1)*elsze) ; if (flgon(what,CONSYS_RSCALE)) { dvec = (double *) vec ; dvec[0] = 0.0 ; for (ndx = oldrowsze+1 ; ndx <= rowsze ; ndx++) dvec[ndx] = 1.0 ; } else { memset(vec+(oldrowsze+1)*elsze,0,(rowsze-oldrowsze)*elsze) ; } } } if (vec != attvhdr->vec) { for (lnk = attvhdr->pveclst ; lnk != NULL ; lnk = lnk->llnxt) { # ifdef DYLP_PARANOIA if (lnk->llval == NULL) { errmsg(110,rtnnme,lnk,consys_assocnme(NULL,what),attvhdr->vec) ; return (FALSE) ; } # endif *((void **) lnk->llval) = (void *) vec ; } attvhdr->vec = (void *) vec ; } } # ifdef DYLP_PARANOIA /* Just checking to see if we dropped anything. */ if (flgon(consys->parts,CONSYS_RHS) && consys->rhs == NULL) { errmsg(113,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_RHS)) ; return (FALSE) ; } if (flgon(consys->parts,CONSYS_RHSLOW) && consys->rhslow == NULL) { errmsg(113,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_RHSLOW)) ; return (FALSE) ; } if (flgon(consys->parts,CONSYS_CTYP) && consys->ctyp == NULL) { errmsg(113,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_CTYP)) ; return (FALSE) ; } if (flgon(consys->parts,CONSYS_CUB) && consys->cub == NULL) { errmsg(113,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_CUB)) ; return (FALSE) ; } if (flgon(consys->parts,CONSYS_CLB) && consys->clb == NULL) { errmsg(113,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_CLB)) ; return (FALSE) ; } if (flgon(consys->parts,CONSYS_OBJ) && consys->obj == NULL) { errmsg(113,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_OBJ)) ; return (FALSE) ; } if (flgon(consys->parts,CONSYS_VTYP) && consys->vtyp == NULL) { errmsg(113,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_VTYP)) ; return (FALSE) ; } if (flgon(consys->parts,CONSYS_VUB) && consys->vub == NULL) { errmsg(113,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_VUB)) ; return (FALSE) ; } if (flgon(consys->parts,CONSYS_VLB) && consys->vlb == NULL) { errmsg(113,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_VLB)) ; return (FALSE) ; } if (flgon(consys->parts,CONSYS_RSCALE) && consys->rowscale == NULL) { errmsg(113,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_RSCALE)) ; return (FALSE) ; } if (flgon(consys->parts,CONSYS_CSCALE) && consys->rowscale == NULL) { errmsg(113,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_CSCALE)) ; return (FALSE) ; } # endif return (TRUE) ; } bool consys_addcol_pk (consys_struct *consys, vartyp_enum vartyp, pkvec_struct *pkcol, double obj, double vlb, double vub) /* This routine adds an architectural variable to the constraint matrix (expanding the allocated size if necessary). If the appropriate associated vectors exist, the objective coefficient and lower and upper bounds will be set. If DYLP_NDEBUG is not defined and the WRNZERO flag is set, the routine will warn about columns with no non-zero coefficients. NO WARNING is issued if an associated vector doesn't exist. If pkcol is a vector of capacity 0 (pkcol->sze == 0) this is taken to be a call for the sole purpose of creating the header, and no warning is issued. Parameters: consys: Constraint system. vartyp: The type of variable. pkcol: (i) name (optional) and coefficients for the column. (o) column index; name, if not supplied. obj: Coefficient for the objective function. vlb, vub Lower and upper bounds. Returns: TRUE if the insertion is successful, FALSE otherwise. */ { int colndx,vecndx,avail,nzcnt ; colhdr_struct *colhdr ; rowhdr_struct *rowhdr ; coeff_struct *coeff ; pkcoeff_struct *pkcoeff ; char nmebuf[20] ; const char *rtnnme = "consys_addcol_pk" ; # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (FALSE) ; } /* ZZ_TABLEAU_ZZ if (consys->vtyp == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_VTYP)) ; return (FALSE) ; } */ if (consys->vtyp != NULL) { if (!VALID_VARTYPE(vartyp)) { errmsg(5,rtnnme,"vartyp",(int) vartyp) ; return (FALSE) ; } } if (pkcol == NULL) { errmsg(2,rtnnme,"pkcol") ; return (FALSE) ; } pkcol->ndx = 0 ; # endif /* Calculate the column index (and a name, if necessary). Then make sure we have space; acquire some if needed. */ colndx = consys->varcnt+1 ; pkcol->ndx = colndx ; if (pkcol->nme == NULL) { dyio_outfxd(nmebuf,-((int) (sizeof(nmebuf)-1)),'l',"var<%d>",colndx) ; pkcol->nme = nmebuf ; } # ifdef DYLP_PARANOIA /* We need to postpone this check to here because pkvec_check requires that nme != NULL. */ if (pkvec_check(pkcol,rtnnme) == FALSE) return (FALSE) ; # endif if (flgon(consys->opts,CONSYS_LVARS)) avail = consys->colsze-consys->rowsze ; else avail = consys->colsze ; if (avail < consys->varcnt+1) if (consys_realloc(consys,'c',0) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme, "capacity expansion","column",pkcol->nme,pkcol->ndx) ; return (FALSE) ; } /* Initialise the column header and set the type. Adjust the variable counts. */ colhdr = (colhdr_struct *) CALLOC(1,sizeof(colhdr_struct)) ; consys->mtx.cols[colndx] = colhdr ; colhdr->ndx = colndx ; colhdr->nme = STRALLOC(pkcol->nme) ; if (consys->vtyp != NULL) { consys->vtyp[colndx] = vartyp ; } consys->archvcnt++ ; consys->varcnt++ ; if (vartyp == vartypINT) consys->intvcnt++ ; else if (vartyp == vartypBIN) consys->binvcnt++ ; /* If we're using our private buffer, hide it again. */ if (pkcol->nme == nmebuf) pkcol->nme = colhdr->nme ; /* Add the column, keeping an eye out for any changes in row or column maxima. It's an error to try and insert a coefficient into a constraint that's not already in existence. If pkcol->sze is 0, then there are no coefficients (the purpose of the call was to create the header). */ if (pkcol->sze > 0) { # ifndef DYLP_NDEBUG if (pkcol->cnt == 0 && flgon(consys->opts,CONSYS_WRNZERO)) dywarn(118,rtnnme,consys->nme,"column",colhdr->nme,colndx) ; # endif nzcnt = 0 ; pkcoeff = pkcol->coeffs ; for (vecndx = 0 ; vecndx < pkcol->cnt ; vecndx++) { if (pkcoeff->ndx <= 0 || pkcoeff->ndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",pkcoeff->ndx,1,consys->concnt) ; return (FALSE) ; } if (fabs(pkcoeff->val) >= consys->inf) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(128,rtnnme,consys->nme,pkcoeff->ndx,colndx,pkcoeff->val, "column",colhdr->nme) ; return (FALSE) ; } if (fabs(pkcoeff->val) > consys->tiny) { rowhdr = consys->mtx.rows[pkcoeff->ndx] ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",pkcoeff->ndx) ; return (FALSE) ; } if (pkcoeff->ndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx, pkcoeff->ndx,rowhdr) ; return (FALSE) ; } # endif coeff = (coeff_struct *) MALLOC(sizeof(coeff_struct)) ; coeff->rowhdr = rowhdr ; coeff->colhdr = colhdr ; coeff->val = pkcoeff->val ; coeff->rownxt = rowhdr->coeffs ; rowhdr->coeffs = coeff ; coeff->colnxt = colhdr->coeffs ; colhdr->coeffs = coeff ; rowhdr->len++ ; nzcnt++ ; if (rowhdr->len > consys->maxrowlen) { consys->maxrowlen = rowhdr->len ; consys->maxrowndx = pkcoeff->ndx ; } } # ifndef DYLP_NDEBUG else { dywarn(130,rtnnme,consys->nme,pkcoeff->ndx,colndx,pkcoeff->val, consys->tiny,"column",colhdr->nme) ; } # endif pkcoeff++ ; } colhdr->len = nzcnt ; consys->mtx.coeffcnt += nzcnt ; if (colhdr->len > consys->maxcollen) { consys->maxcollen = colhdr->len ; consys->maxcolndx = colndx ; } } /* Check for the relevant associated arrays -- obj, vlb, vub -- and set values if they're present. */ if (consys->obj != NULL) consys->obj[colndx] = obj ; if (consys->vlb != NULL) consys->vlb[colndx] = vlb ; if (consys->vub != NULL) consys->vub[colndx] = vub ; return (TRUE) ; } bool consys_addcol_ex (consys_struct *consys, vartyp_enum vartyp, const char **nme, double *excol, double obj, double vlb, double vub) /* This routine adds an architectural variable to the constraint matrix (expanding the allocated size if necessary). If the appropriate associated vectors exist, the objective coefficient and lower and upper bounds will be set. It is assumed that excol is of size consys->concnt. Only non-zero entries are installed in the constraint system; zeros are quietly suppressed. Parameters: consys: Constraint system. vartyp: The type of variable. nme: (i) The name for the variable (will be generated if null) (o) The name for the variable excol: (i) coefficients for the column. (o) excol[0] is set to the column index. obj: Coefficient for the objective function. vlb, vub Lower and upper bounds. Returns: TRUE if the insertion is successful, FALSE otherwise. */ { int colndx,rowndx,avail ; colhdr_struct *colhdr ; rowhdr_struct *rowhdr ; coeff_struct *coeff ; char nmebuf[20] ; const char *rtnnme = "consys_addcol_ex" ; # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (FALSE) ; } /* ZZ_TABLEAU_ZZ if (consys->vtyp == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_VTYP)) ; return (FALSE) ; } */ if (consys->vtyp != NULL) { if (!VALID_VARTYPE(vartyp)) { errmsg(5,rtnnme,"vartyp",(int) vartyp) ; return (FALSE) ; } } if (excol == NULL) { errmsg(2,rtnnme,"excol") ; return (FALSE) ; } if (nme == NULL) { errmsg(2,rtnnme,"nme") ; return (FALSE) ; } # endif /* Calculate the column index (and a name, if necessary). Then make sure we have space; acquire some if needed. */ colndx = consys->varcnt+1 ; excol[0] = colndx ; if (nme == NULL) { dyio_outfxd(nmebuf,-((int) (sizeof(nmebuf)-1)),'l',"var<%d>",colndx) ; *nme = nmebuf ; } if (flgon(consys->opts,CONSYS_LVARS)) avail = consys->colsze-consys->rowsze ; else avail = consys->colsze ; if (avail < consys->varcnt+1) if (consys_realloc(consys,'c',0) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme, "capacity expansion","column",*nme,excol[0]) ; return (FALSE) ; } /* Initialise the column header and set the type. Adjust the variable counts. */ colhdr = (colhdr_struct *) CALLOC(1,sizeof(colhdr_struct)) ; consys->mtx.cols[colndx] = colhdr ; colhdr->ndx = colndx ; colhdr->nme = STRALLOC(*nme) ; if (consys->vtyp != NULL) { consys->vtyp[colndx] = vartyp ; } consys->archvcnt++ ; consys->varcnt++ ; if (vartyp == vartypINT) consys->intvcnt++ ; else if (vartyp == vartypBIN) consys->binvcnt++ ; /* If we're using our private buffer, hide it again. */ if (*nme == nmebuf) *nme = colhdr->nme ; /* Add the column, keeping an eye out for any changes in row or column maxima. It's an error to try and insert a coefficient into a constraint that's not already in existence. */ for (rowndx = 1 ; rowndx <= consys->concnt ; rowndx++) { if (fabs(excol[rowndx]) >= consys->inf) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(128,rtnnme,consys->nme,rowndx,colndx,excol[rowndx], "column",colhdr->nme) ; return (FALSE) ; } if (fabs(excol[rowndx]) >= consys->tiny) { colhdr->len++ ; rowhdr = consys->mtx.rows[rowndx] ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (FALSE) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx,rowhdr) ; return (FALSE) ; } # endif coeff = (coeff_struct *) MALLOC(sizeof(coeff_struct)) ; coeff->rowhdr = rowhdr ; coeff->colhdr = colhdr ; coeff->val = excol[rowndx] ; coeff->rownxt = rowhdr->coeffs ; rowhdr->coeffs = coeff ; coeff->colnxt = colhdr->coeffs ; colhdr->coeffs = coeff ; rowhdr->len++ ; if (rowhdr->len > consys->maxrowlen) { consys->maxrowlen = rowhdr->len ; consys->maxrowndx = rowndx ; } } # ifndef DYLP_NDEBUG else if (excol[rowndx] != 0.0) { rowhdr = consys->mtx.rows[rowndx] ; dywarn(130,rtnnme,consys->nme,rowndx,colndx,excol[rowndx], consys->tiny,"row",rowhdr->nme) ; } # endif } consys->mtx.coeffcnt += colhdr->len ; if (colhdr->len > consys->maxcollen) { consys->maxcollen = colhdr->len ; consys->maxcolndx = colndx ; } /* Check for the relevant associated arrays -- obj, vlb, vub -- and set values if they're present. */ if (consys->obj != NULL) consys->obj[colndx] = obj ; if (consys->vlb != NULL) consys->vlb[colndx] = vlb ; if (consys->vub != NULL) consys->vub[colndx] = vub ; return (TRUE) ; } bool consys_addrow_pk (consys_struct *consys, char class, contyp_enum contyp, pkvec_struct *pkrow, double rhs, double rhslow, conbnd_struct *cub, conbnd_struct *clb) /* This routine adds a constraint to the constraint matrix, expanding the allocated size if necessary and reordering constraints as appropriate. If the relevant associated vectors exist, the right-hand-side, range (rhslow), and upper and lower bounds will be set. If coupling is on (i.e., logical variables are enabled), a logical variable will be created according to the usual rules and any reordering of constraints will be reflected in the logicals. IT'S IMPORTANT that the logical not be added until after pkrow is unloaded -- after all, pkrow could have a coefficient in the column occupied by the first architectural variable, and we don't want to screw up the column index stored with the coefficient. If DYLP_NDEBUG is not defined and the WRNZERO flag is set, the routine will warn about columns with no non-zero coefficients. NO WARNING is issued if an associated vector doesn't exist. Parameters: consys: Constraint system. class: Class of the constraint -- 'a' for architectural, 'c' for cut contyp: The type of constraint. pkrow: (i) name (optional) and coefficients for the row (o) row index; name, if not supplied rhs: right-hand-side coefficient rhslow: alternate right-hand-side coefficient, for range constraints cub,clb: upper and lower bounds for the value of the left-hand-side Returns: TRUE if the insertion is successful, FALSE otherwise. */ { int rowndx,vecndx,nzcnt ; colhdr_struct *colhdr ; rowhdr_struct *rowhdr ; coeff_struct *coeff ; pkcoeff_struct *pkcoeff ; char nmebuf[20] ; const char *rtnnme = "consys_addrow_pk" ; # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (FALSE) ; } if (!(class == 'a' || class == 'c')) { errmsg(3,rtnnme,"constraint class",class) ; return (FALSE) ; } /* if (consys->ctyp == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_CTYP)) ; return (FALSE) ; } */ if (consys->ctyp != NULL) { if (!(VALID_CONTYPE(contyp) || contyp == contypNB)) { errmsg(5,rtnnme,"contyp",(int) contyp) ; return (FALSE) ; } } if (pkrow == NULL) { errmsg(2,rtnnme,"pkrow") ; return (FALSE) ; } pkrow->ndx = 0 ; if (flgon(consys->opts,CONSYS_LVARS)) if (consys->logvcnt != consys->concnt) { errmsg(131,rtnnme,consys->nme,consys->logvcnt,consys->concnt) ; return (FALSE) ; } # endif /* Calculate the row index and name. A new architectural constraint will be placed at the end of the block of architectural constraints, and a new cut constraint will be placed at the end of the rows. */ if (class == 'a') rowndx = consys->archccnt+1 ; else rowndx = consys->concnt+1 ; pkrow->ndx = rowndx ; if (pkrow->nme == NULL) { dyio_outfxd(nmebuf,-((int) (sizeof(nmebuf)-1)),'l',"%s<%d>", (class == 'a')?"con":"cut",rowndx) ; pkrow->nme = nmebuf ; } # ifdef DYLP_PARANOIA /* We need to postpone this check to here because pkvec_check requires that nme != NULL. */ if (pkvec_check(pkrow,rtnnme) == FALSE) return (FALSE) ; # endif /* If necessary, boost the allocated capacity to open up space for the new row. (Space for the logical will also be allocated if coupling is enabled.) Then move the first cut out of the way if that's necessary to make a space for a new architectural constraints. */ if (consys->rowsze < consys->concnt+1) if (consys_realloc(consys,'r',0) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme, "capacity expansion","row",pkrow->nme,pkrow->ndx) ; return (FALSE) ; } if (rowndx < consys->concnt+1) if (move_row(consys,rowndx,consys->concnt+1) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"swap","row", consys_nme(consys,'c',rowndx,FALSE,NULL),rowndx) ; return (FALSE) ; } /* Initialise the row header and type. Bump the appropriate constraint counts. */ rowhdr = (rowhdr_struct *) CALLOC(1,sizeof(rowhdr_struct)) ; consys->mtx.rows[rowndx] = rowhdr ; rowhdr->ndx = rowndx ; rowhdr->nme = STRALLOC(pkrow->nme) ; if (consys->ctyp != NULL) { consys->ctyp[rowndx] = contyp ; } if (class == 'a') consys->archccnt++ ; else consys->cutccnt++ ; consys->concnt++ ; /* If we're using our private buffer, hide it again. */ if (pkrow->nme == nmebuf) pkrow->nme = rowhdr->nme ; /* Add the row, keeping an eye out for any change in the maximum length column. It's an error to try and insert a coefficient into a column that's not already in existence. If pkrow->sze == 0, we're just here to create the header. */ if (pkrow->sze > 0) { # ifndef DYLP_NDEBUG if (pkrow->cnt == 0 && flgon(consys->opts,CONSYS_WRNZERO)) dywarn(118,rtnnme,consys->nme,"row",rowhdr->nme,rowndx) ; # endif nzcnt = 0 ; pkcoeff = pkrow->coeffs ; for (vecndx = 0 ; vecndx < pkrow->cnt ; vecndx++) { if (pkcoeff->ndx <= 0 || pkcoeff->ndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",pkcoeff->ndx,1,consys->varcnt) ; return (FALSE) ; } if (fabs(pkcoeff->val) >= consys->inf) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(128,rtnnme,consys->nme,rowndx,pkcoeff->ndx,pkcoeff->val, "row",rowhdr->nme) ; return (FALSE) ; } if (fabs(pkcoeff->val) > consys->tiny) { colhdr = consys->mtx.cols[pkcoeff->ndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",pkcoeff->ndx) ; return (FALSE) ; } if (pkcoeff->ndx != colhdr->ndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx, pkcoeff->ndx,colhdr) ; return (FALSE) ; } # endif coeff = (coeff_struct *) MALLOC(sizeof(coeff_struct)) ; coeff->colhdr = colhdr ; coeff->rowhdr = rowhdr ; coeff->val = pkcoeff->val ; coeff->rownxt = rowhdr->coeffs ; rowhdr->coeffs = coeff ; coeff->colnxt = colhdr->coeffs ; colhdr->coeffs = coeff ; colhdr->len++ ; nzcnt++ ; if (colhdr->len > consys->maxcollen) { consys->maxcollen = colhdr->len ; consys->maxcolndx = pkcoeff->ndx ; } } # ifndef DYLP_NDEBUG else { dywarn(130,rtnnme,consys->nme,rowndx,pkcoeff->ndx,pkcoeff->val, consys->tiny,"row",rowhdr->nme) ; } # endif pkcoeff++ ; } rowhdr->len = nzcnt ; consys->mtx.coeffcnt += nzcnt ; /* Check if this row should become the maximum length row. */ if (rowhdr->len > consys->maxrowlen) { consys->maxrowlen = rowhdr->len ; consys->maxrowndx = rowndx ; } } /* Check for the relevant associated arrays -- rhs, rhslow, clb, cub -- and set values if they're present. */ if (consys->rhs != NULL) consys->rhs[rowndx] = rhs ; if (consys->rhslow != NULL) consys->rhslow[rowndx] = rhslow ; if (consys->clb != NULL && clb != NULL) consys->clb[rowndx] = *clb ; if (consys->cub != NULL && cub != NULL) consys->cub[rowndx] = *cub ; /* Add a logical? If so, we'll move the first architectural out of the way. We might also have to move the logical associated with the first cut, if we're adding an architectural constraint when cuts are already present. */ if (flgon(consys->opts,CONSYS_LVARS)) { if (consys->archvcnt > 0) if (move_col(consys,consys->logvcnt+1,consys->varcnt+1) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"swap","column", consys_nme(consys,'v',consys->logvcnt+1,FALSE,NULL), consys->logvcnt+1) ; return (FALSE) ; } if (rowndx < consys->concnt) if (move_col(consys,rowndx,consys->logvcnt+1) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"swap","column", consys_nme(consys,'c',rowndx,FALSE,NULL),rowndx) ; return (FALSE) ; } if (add_logical(consys,rowndx) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(121,rtnnme,consys->nme,rowhdr->nme,rowndx) ; return (FALSE) ; } } return (TRUE) ; } bool consys_getcol_pk (consys_struct *consys, int colndx, pkvec_struct **pkvec) /* This routine copies a column out of the constraint matrix into the vector pkvec (creating a vector if needed). The routine will complain if a vector is supplied and it's too small for the column. As a special case, a vector of size 0 will retrieve only the column header information. Parameters: consys: constraint system colndx: column to be fetched pkvec: (i) packed vector (if NULL, one will be created) (o) packed vector, loaded with column Returns: TRUE if the column is fetched without incident, FALSE otherwise (paranoia or debug only). */ { colhdr_struct *colhdr ; coeff_struct *coeff ; pkcoeff_struct *pkcoeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_getcol_pk" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (colndx <= 0 || colndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",colndx,1,consys->varcnt) ; return (FALSE) ; } # endif colhdr = consys->mtx.cols[colndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (FALSE) ; } if (colndx != colhdr->ndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx,colndx, colhdr) ; return (FALSE) ; } if (pkvec == NULL) { errmsg(2,rtnnme,"&pkvec") ; return (FALSE) ; } # endif /* Get a fresh vector, if need be. Step along the column and copy the coefficients and row indices to the packed vector. Finally, fill in the header information for the packed vector. */ if (*pkvec == NULL) *pkvec = pkvec_new(consys->maxcollen) ; # ifdef DYLP_PARANOIA else if (pkvec_check(*pkvec,rtnnme) == FALSE) return FALSE ; # endif if ((*pkvec)->sze != 0) { # ifdef DYLP_PARANOIA if ((*pkvec)->sze < colhdr->len) { errmsg(92,rtnnme,((*pkvec)->nme == NULL)?"<>":(*pkvec)->nme, (*pkvec)->ndx,(*pkvec)->sze,"column", consys_nme(consys,'v',colndx,TRUE,NULL),colhdr->len) ; return (FALSE) ; } # endif for (coeff = colhdr->coeffs,pkcoeff = (*pkvec)->coeffs ; coeff != NULL ; coeff = coeff->colnxt,pkcoeff++) { # ifdef DYLP_PARANOIA if (coeff->rowhdr == NULL) { errmsg(125,rtnnme,consys->nme,"rowhdr",coeff,"column", consys_nme(consys,'v',colndx,FALSE,NULL),colndx) ; return (FALSE) ; } if (coeff->rowhdr != consys->mtx.rows[coeff->rowhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"row",coeff->rowhdr,coeff->rowhdr->ndx, coeff->rowhdr->ndx,consys->mtx.rows[coeff->rowhdr->ndx]) ; return (FALSE) ; } # endif pkcoeff->ndx = coeff->rowhdr->ndx ; pkcoeff->val = coeff->val ; } } (*pkvec)->ndx = colndx ; (*pkvec)->nme = colhdr->nme ; (*pkvec)->dim = consys->concnt ; (*pkvec)->dflt = 0 ; (*pkvec)->cnt = colhdr->len ; return (TRUE) ; } bool consys_getcol_ex (consys_struct *consys, int colndx, double **vec) /* This routine copies a column out of the constraint matrix into the vector vec (creating a vector if needed). Parameters: consys: constraint system colndx: column to be fetched vec: (i) vector (if NULL, one will be created) (o) vector loaded with column Returns: TRUE if the column is fetched without incident, FALSE otherwise (paranoia or debug only). */ { colhdr_struct *colhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_getcol_ex" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (colndx <= 0 || colndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",colndx,1,consys->varcnt) ; return (FALSE) ; } # endif colhdr = consys->mtx.cols[colndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (FALSE) ; } if (colndx != colhdr->ndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx,colndx, colhdr) ; return (FALSE) ; } if (vec == NULL) { errmsg(2,rtnnme,"&vec") ; return (FALSE) ; } # endif /* Make a vector, if need be, or clear the one we're handed. Then step along the column and set the necessary coefficients. */ if (*vec == NULL) *vec = (double *) CALLOC(consys->concnt+1,sizeof(double)) ; else memset(*vec,0,(consys->concnt+1)*sizeof(double)) ; for (coeff = colhdr->coeffs ; coeff != NULL ; coeff = coeff->colnxt) { # ifdef DYLP_PARANOIA if (coeff->rowhdr == NULL) { errmsg(125,rtnnme,consys->nme,"rowhdr",coeff,"column", consys_nme(consys,'v',colndx,FALSE,NULL),colndx) ; return (FALSE) ; } if (coeff->rowhdr != consys->mtx.rows[coeff->rowhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"row",coeff->rowhdr,coeff->rowhdr->ndx, coeff->rowhdr->ndx,consys->mtx.rows[coeff->rowhdr->ndx]) ; return (FALSE) ; } # endif (*vec)[coeff->rowhdr->ndx] = coeff->val ; } return (TRUE) ; } bool consys_getrow_pk (consys_struct *consys, int rowndx, pkvec_struct **pkvec) /* This routine copies a row out of the constraint matrix into the vector pkvec (creating a vector if needed). The routine will complain if a vector is supplied and it's not big enough to hold the row. As a special case, a vector of size 0 will retrieve just the row header information. Parameters: consys: constraint system rowndx: row to be fetched pkvec: (i) packed vector (if NULL, one will be created) (o) packed vector, loaded with row Returns: TRUE if the row is fetched without incident, FALSE otherwise (paranoia or debug only). */ { rowhdr_struct *rowhdr ; coeff_struct *coeff ; pkcoeff_struct *pkcoeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_getrow_pk" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (FALSE) ; } # endif rowhdr = consys->mtx.rows[rowndx] ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (FALSE) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx, rowhdr) ; return (FALSE) ; } if (pkvec == NULL) { errmsg(2,rtnnme,"&pkvec") ; return (FALSE) ; } # endif /* Get a fresh vector, if need be. Step along the row and copy the coefficients and column indices to the packed vector. Finally, fill in the header information for the packed vector. */ if (*pkvec == NULL) *pkvec = pkvec_new(consys->maxrowlen) ; # ifdef DYLP_PARANOIA else if (pkvec_check(*pkvec,rtnnme) == FALSE) return FALSE ; # endif if ((*pkvec)->sze != 0) { # ifdef DYLP_PARANOIA if ((*pkvec)->sze < rowhdr->len) { errmsg(92,rtnnme,((*pkvec)->nme == NULL)?"<>":(*pkvec)->nme, (*pkvec)->ndx,(*pkvec)->sze,"row", consys_nme(consys,'c',rowndx,TRUE,NULL),rowhdr->len) ; return (FALSE) ; } # endif for (coeff = rowhdr->coeffs,pkcoeff = (*pkvec)->coeffs ; coeff != NULL ; coeff = coeff->rownxt,pkcoeff++) { # ifdef DYLP_PARANOIA if (coeff->colhdr == NULL) { errmsg(125,rtnnme,consys->nme,"colhdr",coeff,"row", consys_nme(consys,'c',rowndx,FALSE,NULL),rowndx) ; return (FALSE) ; } if (coeff->colhdr != consys->mtx.cols[coeff->colhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"column",coeff->colhdr,coeff->colhdr->ndx, coeff->colhdr->ndx,consys->mtx.cols[coeff->colhdr->ndx]) ; return (FALSE) ; } # endif pkcoeff->ndx = coeff->colhdr->ndx ; pkcoeff->val = coeff->val ; } } (*pkvec)->ndx = rowndx ; (*pkvec)->nme = rowhdr->nme ; (*pkvec)->dim = consys->varcnt ; (*pkvec)->dflt = 0 ; (*pkvec)->cnt = rowhdr->len ; return (TRUE) ; } bool consys_getrow_ex (consys_struct *consys, int rowndx, double **vec) /* This routine copies a row out of the constraint matrix into the vector vec (creating a vector if needed). Parameters: consys: constraint system rowndx: row to be fetched vec: (i) vector (if NULL, one will be created) (o) vector loaded with row Returns: TRUE if the row is fetched without incident, FALSE otherwise (paranoia or debug only). */ { rowhdr_struct *rowhdr ; coeff_struct *coeff ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_getrow_ex" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (FALSE) ; } # endif rowhdr = consys->mtx.rows[rowndx] ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (FALSE) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx, rowhdr) ; return (FALSE) ; } if (vec == NULL) { errmsg(2,rtnnme,"&vec") ; return (FALSE) ; } # endif /* Make a vector, if need be, or clear the one we're handed. Then step along the row and set the necessary coefficients. */ if (*vec == NULL) *vec = (double *) CALLOC(consys->varcnt+1,sizeof(double)) ; else memset(*vec,0,(consys->varcnt+1)*sizeof(double)) ; for (coeff = rowhdr->coeffs ; coeff != NULL ; coeff = coeff->rownxt) { # ifdef DYLP_PARANOIA if (coeff->colhdr == NULL) { errmsg(125,rtnnme,consys->nme,"colhdr",coeff,"row", consys_nme(consys,'c',rowndx,FALSE,NULL),rowndx) ; return (FALSE) ; } if (coeff->colhdr != consys->mtx.cols[coeff->colhdr->ndx]) { errmsg(126,rtnnme,consys->nme,"column",coeff->colhdr,coeff->colhdr->ndx, coeff->colhdr->ndx,consys->mtx.cols[coeff->colhdr->ndx]) ; return (FALSE) ; } # endif (*vec)[coeff->colhdr->ndx] = coeff->val ; } return (TRUE) ; } bool consys_delcol (consys_struct *consys, int colndx) /* This routine removes a column from the constraint matrix. If needed, the last architectural variable is swapped into the vacated slot. Parameters: consys: Constraint system colndx: Index of the column to be deleted. Returns: TRUE if the deletion proceeded without error, FALSE otherwise. */ { colhdr_struct *colhdr ; vartyp_enum vartyp ; bool rescan_rows,rescan_cols ; const char *rtnnme = "consys_delcol" ; # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (FALSE) ; } /* ZZ_TABLEAU_ZZ if (consys->vtyp == NULL) { errmsg(101,rtnnme,consys->nme,consys_assocnme(NULL,CONSYS_VTYP)) ; return (FALSE) ; } */ # endif # ifndef DYLP_NDEBUG if (colndx <= consys->logvcnt || colndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column", colndx,consys->logvcnt+1,consys->varcnt) ; return (FALSE) ; } # endif colhdr = consys->mtx.cols[colndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (FALSE) ; } if (colndx != colhdr->ndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx,colndx, colhdr) ; return (FALSE) ; } # endif /* Empty the column, forcing the column rescan flag if we're deleting the current maximum length column. */ if (empty_col(consys,colndx,&rescan_rows) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"empty","column",colhdr->nme,colndx) ; return (FALSE) ; } if (colndx == consys->maxcolndx) rescan_cols = TRUE ; else rescan_cols = FALSE ; /* Before we fill in the hole, correct the integer variable counts and check if we've removed the variable associated with the objective constraint. This is best done before columns are shifted. */ if (colndx == consys->xzndx) consys->xzndx = -1 ; if (consys->vtyp != NULL) { vartyp = consys->vtyp[colndx] ; if (vartyp == vartypINT) consys->intvcnt-- ; else if (vartyp == vartypBIN) consys->binvcnt-- ; } /* If this wasn't the last architectural variable, shift the last variable down to fill the hole, then correct the main variable counts. (Changing the main variable counts before moving the column will trigger a range error.) */ if (colndx < consys->varcnt) if (move_col(consys,consys->varcnt,colndx) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"swap","column", consys_nme(consys,'v',consys->varcnt,FALSE,NULL),consys->varcnt) ; return (FALSE) ; } consys->archvcnt-- ; consys->varcnt-- ; /* Rescan for maxima if necessary, and free the column header. That pretty well takes care of it. */ if (rescan_rows == TRUE || rescan_cols == TRUE) if (find_maxes(consys,rescan_cols,rescan_rows) == FALSE) { errmsg(112,rtnnme,consys->nme,"maxima update","column",colhdr->nme, colhdr->ndx) ; return (FALSE) ; } if (colhdr->nme != NULL) STRFREE(colhdr->nme) ; FREE(colhdr) ; return (TRUE) ; } bool consys_delrow (consys_struct *consys, int rowndx) /* This routine removes a row from the constraint matrix. If coupling is enabled, the corresponding logical variable is also removed. Any required row and column swaps are made to keep the constraint system compact. Parameters: consys: Constraint system rowndx: Index of the row to be deleted. Returns: TRUE if the deletion proceeded without error, FALSE otherwise. */ { int colndx ; colhdr_struct *colhdr ; rowhdr_struct *rowhdr ; bool rescan_rows,rescan_cols ; const char *rtnnme = "consys_delrow" ; # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (FALSE) ; } if (flgon(consys->opts,CONSYS_LVARS)) if (consys->logvcnt != consys->concnt) { errmsg(131,rtnnme,consys->nme,consys->logvcnt,consys->concnt) ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (FALSE) ; } # endif rowhdr = consys->mtx.rows[rowndx] ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (FALSE) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx, rowhdr) ; return (FALSE) ; } # endif /* If coupling is on, delete the logical variable (this avoids a pointless warning about a 0-length column in the usual case where the logical variable appears only in its associated constraint). We'll need to swap the last logical into the space vacated by the deleted logical, and swap the last architectural variable into the space vacated by the last logical. We may need to do an additional swap within the logicals, to maintain the separation between architectural and cut constraints. */ rescan_rows = FALSE ; if (flgon(consys->opts,CONSYS_LVARS)) { colndx = rowndx ; colhdr = consys->mtx.cols[colndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (FALSE) ; } if (colhdr->ndx != colndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx,colndx,colhdr) ; return (FALSE) ; } # endif if (empty_col(consys,colndx,&rescan_rows) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"empty","column",colhdr->nme,colndx) ; return (FALSE) ; } if (colhdr->nme != NULL) STRFREE(colhdr->nme) ; FREE(colhdr) ; if (colndx < consys->archccnt && consys->cutccnt > 0) { if (move_col(consys,consys->archccnt,colndx) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"swap","column", consys_nme(consys,'v',consys->archccnt,FALSE,NULL), consys->archccnt) ; return (FALSE) ; } colndx = consys->archccnt ; } if (colndx < consys->logvcnt) if (move_col(consys,consys->logvcnt,colndx) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"swap","column", consys_nme(consys,'v',consys->logvcnt,FALSE,NULL), consys->logvcnt) ; return (FALSE) ; } if (consys->archvcnt > 0) if (move_col(consys,consys->varcnt,consys->logvcnt) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"swap","column", consys_nme(consys,'v',consys->varcnt,FALSE,NULL), consys->varcnt) ; return (FALSE) ; } consys->logvcnt-- ; consys->varcnt-- ; } /* Now empty the row, forcing the row rescan flag if we're deleting the current maximum length row, and invalidating objndx if we've deleted the objective constraint. We'll need to do the same reordering of the constraints that we applied to the logicals. */ if (empty_row(consys,rowndx,&rescan_cols) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"empty","row",rowhdr->nme,rowndx) ; return (FALSE) ; } if (rowndx == consys->maxrowndx) rescan_rows = TRUE ; if (rowndx == consys->objndx) consys->objndx = -1 ; if (rowndx < consys->archccnt && consys->cutccnt > 0) { if (move_row(consys,consys->archccnt,rowndx) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"swap","row", consys_nme(consys,'c',consys->archccnt,FALSE,NULL), consys->archccnt) ; return (FALSE) ; } rowndx = consys->archccnt ; } if (rowndx < consys->concnt) if (move_row(consys,consys->concnt,rowndx) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"swap","row", consys_nme(consys,'c',consys->concnt,FALSE,NULL),consys->concnt) ; return (FALSE) ; } if (rowhdr->ndx <= consys->archccnt) consys->archccnt-- ; else consys->cutccnt-- ; consys->concnt-- ; /* Rescan for maxima if necessary, and free the row header. That pretty well takes care of it. */ if (rescan_rows == TRUE || rescan_cols == TRUE) if (find_maxes(consys,rescan_cols,rescan_rows) == FALSE) { errmsg(112,rtnnme,consys->nme,"maxima update","row",rowhdr->nme, rowhdr->ndx) ; return (FALSE) ; } if (rowhdr->nme != NULL) STRFREE(rowhdr->nme) ; FREE(rowhdr) ; return (TRUE) ; } bool consys_delrow_stable (consys_struct *consys, int rowndx) /* [Jun 01, 01] Same as consys_delrow, except it maintains the order of constraints (thus the name 'stable').... TODO This routine removes a row from the constraint matrix. If coupling is enabled, the corresponding logical variable is also removed. Any required row and column swaps are made to keep the constraint system compact. Parameters: consys: Constraint system rowndx: Index of the row to be deleted. Returns: TRUE if the deletion proceeded without error, FALSE otherwise. */ { int colndx,i ; colhdr_struct *colhdr ; rowhdr_struct *rowhdr ; bool rescan_rows,rescan_cols ; const char *rtnnme = "consys_delrow" ; # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (FALSE) ; } if (flgon(consys->opts,CONSYS_LVARS)) if (consys->logvcnt != consys->concnt) { errmsg(131,rtnnme,consys->nme,consys->logvcnt,consys->concnt) ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (FALSE) ; } # endif rowhdr = consys->mtx.rows[rowndx] ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (FALSE) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx, rowhdr) ; return (FALSE) ; } # endif /* If coupling is on, delete the logical variable (this avoids a pointless warning about a 0-length column in the usual case where the logical variable appears only in its associated constraint). We'll need to swap the last logical into the space vacated by the deleted logical, and swap the last architectural variable into the space vacated by the last logical. We may need to do an additional swap within the logicals, to maintain the separation between architectural and cut constraints. */ rescan_rows = FALSE ; if (flgon(consys->opts,CONSYS_LVARS)) { colndx = rowndx ; colhdr = consys->mtx.cols[colndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (FALSE) ; } if (colhdr->ndx != colndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx,colndx,colhdr) ; return (FALSE) ; } # endif if (empty_col(consys,colndx,&rescan_rows) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"empty","column",colhdr->nme,colndx) ; return (FALSE) ; } if (colhdr->nme != NULL) STRFREE(colhdr->nme) ; FREE(colhdr) ; if (colndx < consys->archccnt && consys->cutccnt > 0) { if (move_col(consys,consys->archccnt,colndx) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"swap","column", consys_nme(consys,'v',consys->archccnt,FALSE,NULL), consys->archccnt) ; return (FALSE) ; } colndx = consys->archccnt ; } if (colndx < consys->logvcnt) if (move_col(consys,consys->logvcnt,colndx) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"swap","column", consys_nme(consys,'v',consys->logvcnt,FALSE,NULL), consys->logvcnt) ; return (FALSE) ; } if (consys->archvcnt > 0) if (move_col(consys,consys->varcnt,consys->logvcnt) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"swap","column", consys_nme(consys,'v',consys->varcnt,FALSE,NULL), consys->varcnt) ; return (FALSE) ; } consys->logvcnt-- ; consys->varcnt-- ; } /* Now empty the row, forcing the row rescan flag if we're deleting the current maximum length row, and invalidating objndx if we've deleted the objective constraint. We'll need to do the same reordering of the constraints that we applied to the logicals. */ if (empty_row(consys,rowndx,&rescan_cols) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"empty","row",rowhdr->nme,rowndx) ; return (FALSE) ; } if (rowndx == consys->maxrowndx) rescan_rows = TRUE ; if (rowndx == consys->objndx) consys->objndx = -1 ; if (rowndx < consys->archccnt && consys->cutccnt > 0) { if (move_row(consys,consys->archccnt,rowndx) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"swap","row", consys_nme(consys,'c',consys->archccnt,FALSE,NULL), consys->archccnt) ; return (FALSE) ; } rowndx = consys->archccnt ; } if (rowndx < consys->concnt) if (move_row(consys,consys->concnt,rowndx) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"swap","row", consys_nme(consys,'c',consys->concnt,FALSE,NULL),consys->concnt) ; return (FALSE) ; } for (i=rowndx; iconcnt; i++) { if (move_row(consys,i+1,i) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(112,rtnnme,consys->nme,"swap","row", consys_nme(consys,'c',i+1,FALSE,NULL),i+1) ; return (FALSE) ; } } if (rowhdr->ndx <= consys->archccnt) consys->archccnt-- ; else consys->cutccnt-- ; consys->concnt-- ; /* Rescan for maxima if necessary, and free the row header. That pretty well takes care of it. */ if (rescan_rows == TRUE || rescan_cols == TRUE) if (find_maxes(consys,rescan_cols,rescan_rows) == FALSE) { errmsg(112,rtnnme,consys->nme,"maxima update","row",rowhdr->nme, rowhdr->ndx) ; return (FALSE) ; } if (rowhdr->nme != NULL) STRFREE(rowhdr->nme) ; FREE(rowhdr) ; return (TRUE) ; } double consys_getcoeff (consys_struct *consys, int rowndx, int colndx) /* This routine retrieves a single coefficient a from the constraint matrix. The specified row and column must exist. If the coefficient doesn't exist, the routine assumes it's zero. consys_getcoeff searches for the coefficient by scanning the column, on the observation that in lp constraint systems the number of variables is usually much greater than the number of constraints. Parameters: consys: the constraint system rowndx: row index colndx: column index Returns: a if the coefficient exists, 0 if rowndx and colndx are valid, but a is absent, NaN otherwise (paranoia only) */ { int lclndx ; coeff_struct *coeff ; colhdr_struct *colhdr ; rowhdr_struct *rowhdr ; # if defined(DYLP_PARANOIA) || !defined(DYLP_NDEBUG) const char *rtnnme = "consys_getcoeff" ; # endif # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (quiet_nan(0)) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (quiet_nan(0)) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (quiet_nan(0)) ; } if (flgon(consys->opts,CONSYS_LVARS)) if (consys->logvcnt != consys->concnt) { errmsg(131,rtnnme,consys->nme,consys->logvcnt,consys->concnt) ; return (quiet_nan(0)) ; } # endif # ifndef DYLP_NDEBUG if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (quiet_nan(0)) ; } if (colndx <= 0 || colndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",colndx,1,consys->varcnt) ; return (quiet_nan(0)) ; } # endif colhdr = consys->mtx.cols[colndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (quiet_nan(0)) ; } if (colndx != colhdr->ndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx,colndx, colhdr) ; return (quiet_nan(0)) ; } rowhdr = consys->mtx.rows[rowndx] ; if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (quiet_nan(0)) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx, rowhdr) ; return (quiet_nan(0)) ; } # endif /* Scan the column for the requested coefficient. */ for (coeff = colhdr->coeffs ; coeff != NULL ; coeff = coeff->colnxt) { rowhdr = coeff->rowhdr ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(125,rtnnme,consys->nme,"rowhdr",coeff,"column", consys_nme(consys,'v',colndx,FALSE,NULL),colndx) ; return (quiet_nan(0)) ; } # endif lclndx = rowhdr->ndx ; # ifdef DYLP_PARANOIA if (lclndx <= 0 || lclndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",lclndx,1,consys->concnt) ; return (quiet_nan(0)) ; } if (consys->mtx.rows[lclndx] != rowhdr) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,lclndx,lclndx, consys->mtx.rows[lclndx]) ; return (quiet_nan(0)) ; } # endif if (lclndx == rowndx) break ; } /* Return the value, or zero. */ if (coeff == NULL) return (0.0) ; else return (coeff->val) ; } bool consys_setcoeff (consys_struct *consys, int rowndx, int colndx, double val) /* This routine modifies a single coefficient a in the constraint matrix. If rowndx and colndx are valid but the coefficient doesn't exist, it will be created. If the coefficient exists, but val is zero, it will be removed. consys_setcoeff searches for the coefficient by scanning the column, on the observation that in lp constraint systems the number of variables is usually much greater than the number of constraints. Parameters: consys: the constraint system rowndx: row index colndx: column index val: new value of the coefficient Returns: TRUE if the indices are valid and the coefficient is properly set, FALSE otherwise. */ { int lclndx ; bool scanrows,scancols ; coeff_struct *coeff,**pcoeff ; colhdr_struct *colhdr ; rowhdr_struct *rowhdr ; const char *rtnnme = "consys_chgcoeff" ; # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (FALSE) ; } if (flgon(consys->opts,CONSYS_LVARS)) if (consys->logvcnt != consys->concnt) { errmsg(131,rtnnme,consys->nme,consys->logvcnt,consys->concnt) ; return (FALSE) ; } # endif # ifndef DYLP_NDEBUG if (rowndx <= 0 || rowndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",rowndx,1,consys->concnt) ; return (FALSE) ; } if (colndx <= 0 || colndx > consys->varcnt) { errmsg(102,rtnnme,consys->nme,"column",colndx,1,consys->varcnt) ; return (FALSE) ; } # endif colhdr = consys->mtx.cols[colndx] ; # ifdef DYLP_PARANOIA if (colhdr == NULL) { errmsg(103,rtnnme,consys->nme,"column",colndx) ; return (FALSE) ; } if (colndx != colhdr->ndx) { errmsg(126,rtnnme,consys->nme,"column",colhdr,colhdr->ndx,colndx, colhdr) ; return (FALSE) ; } rowhdr = consys->mtx.rows[rowndx] ; if (rowhdr == NULL) { errmsg(103,rtnnme,consys->nme,"row",rowndx) ; return (FALSE) ; } if (rowndx != rowhdr->ndx) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,rowhdr->ndx,rowndx, rowhdr) ; return (FALSE) ; } # endif if (fabs(val) >= consys->inf) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(128,rtnnme,consys->nme,rowndx,colndx,val, "coefficient","") ; return (FALSE) ; } /* Scan the column for the requested coefficient. If we find it, we can change the value and we're finished. */ if (val != 0) { for (coeff = colhdr->coeffs ; coeff != NULL ; coeff = coeff->colnxt) { rowhdr = coeff->rowhdr ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(125,rtnnme,consys->nme,"rowhdr",coeff,"column", consys_nme(consys,'v',colndx,FALSE,NULL),colndx) ; return (FALSE) ; } # endif lclndx = rowhdr->ndx ; # ifdef DYLP_PARANOIA if (lclndx <= 0 || lclndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",lclndx,1,consys->concnt) ; return (FALSE) ; } if (consys->mtx.rows[lclndx] != rowhdr) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,lclndx,lclndx, consys->mtx.rows[lclndx]) ; return (FALSE) ; } # endif if (lclndx == rowndx) break ; } /* Found it. Set the value and we're done. */ if (coeff != NULL) { coeff->val = val ; return (TRUE) ; } /* Sigh. No coefficient, we'll have to create one. */ rowhdr = consys->mtx.rows[rowndx] ; coeff = (coeff_struct *) MALLOC(sizeof(coeff_struct)) ; coeff->rowhdr = rowhdr ; coeff->colhdr = colhdr ; coeff->val = val ; coeff->rownxt = rowhdr->coeffs ; rowhdr->coeffs = coeff ; rowhdr->len++ ; if (rowhdr->len > consys->maxrowlen) { consys->maxrowlen = rowhdr->len ; consys->maxrowndx = rowndx ; } colhdr->len++ ; if (colhdr->len > consys->maxcollen) { consys->maxcollen = colhdr->len ; consys->maxcolndx = colndx ; } } /* If val is zero, we have to run a slightly more complicated search loop which will allow us to delete the coefficient. */ else { for (pcoeff = &colhdr->coeffs, coeff = *pcoeff ; coeff != NULL ; pcoeff = &coeff->colnxt, coeff = *pcoeff) { rowhdr = coeff->rowhdr ; # ifdef DYLP_PARANOIA if (rowhdr == NULL) { errmsg(125,rtnnme,consys->nme,"rowhdr",coeff,"column", consys_nme(consys,'v',colndx,FALSE,NULL),colndx) ; return (FALSE) ; } # endif lclndx = rowhdr->ndx ; # ifdef DYLP_PARANOIA if (lclndx <= 0 || lclndx > consys->concnt) { errmsg(102,rtnnme,consys->nme,"row",lclndx,1,consys->concnt) ; return (FALSE) ; } if (consys->mtx.rows[lclndx] != rowhdr) { errmsg(126,rtnnme,consys->nme,"row",rowhdr,lclndx,lclndx, consys->mtx.rows[lclndx]) ; return (FALSE) ; } # endif if (lclndx == rowndx) break ; } /* Best if we don't find the coefficient, actually. */ if (coeff == NULL) return (TRUE) ; /* But if we do, delink it from the column, then find it row-wise and delink it from the row, then free the space. */ *pcoeff = coeff->colnxt ; for (pcoeff = &rowhdr->coeffs ; *pcoeff != NULL ; pcoeff = &(*pcoeff)->rownxt) { if (*pcoeff == coeff) break ; } # ifdef DYLP_PARANOIA if (*pcoeff == NULL) { errmsg(119,rtnnme,consys->nme,rowndx,colndx,coeff->val, "column",colhdr->ndx,"row",rowhdr->ndx) ; return (FALSE) ; } # endif *pcoeff = coeff->rownxt ; FREE(coeff) ; /* Correct the column and row lengths, and the total coefficient count, and rescan for maximum column and row if necessary. */ consys->mtx.coeffcnt-- ; colhdr->len-- ; if (colndx == consys->maxcolndx) scancols = TRUE ; else scancols = FALSE ; rowhdr->len-- ; if (rowndx == consys->maxrowndx) scanrows = TRUE ; else scanrows = FALSE ; if (scancols == TRUE || scanrows == TRUE) { if (find_maxes(consys,scancols,scanrows) == FALSE) { errmsg(112,rtnnme,consys->nme,"maxima update","column",colhdr->nme, colhdr->ndx) ; return (FALSE) ; } } } return (TRUE) ; } bool consys_logicals (consys_struct *consys) /* This routine establishes logical variables for a constraint system. Parameters: consys: the constraint system Returns: TRUE if logicals are set up successfully, FALSE otherwise. */ { int ndx ; const char *rtnnme = "consys_logicals" ; # ifdef DYLP_PARANOIA if (consys == NULL) { errmsg(2,rtnnme,"consys") ; return (FALSE) ; } if (consys->mtx.rows == NULL) { errmsg(101,rtnnme,consys->nme,"row header") ; return (FALSE) ; } if (consys->mtx.cols == NULL) { errmsg(101,rtnnme,consys->nme,"column header") ; return (FALSE) ; } if (flgon(consys->opts,CONSYS_LVARS) || consys->logvcnt > 0) { errmsg(123,rtnnme,consys->nme) ; return (FALSE) ; } # endif /* Make sure the constraint system has enough room for the logicals. */ ndx = consys->archvcnt+consys->concnt-consys->colsze ; if (ndx > 0) if (consys_realloc(consys,'c',ndx) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(124,rtnnme,consys->nme) ; return (FALSE) ; } /* Now step through the rows and create logical variables. */ for (ndx = 1 ; ndx <= consys->concnt ; ndx++) if (add_logical(consys,ndx) == FALSE) { setflg(consys->opts,CONSYS_CORRUPT) ; errmsg(121,rtnnme,consys->nme, consys_nme(consys,'c',ndx,FALSE,NULL),ndx) ; return (FALSE) ; } /* Turn on coupling and we're done. */ setflg(consys->opts,CONSYS_LVARS) ; return (TRUE) ; } DyLP-1.10.4/DyLP/src/Dylp/glplib1.c0000644000175200017520000000411311507440660015062 0ustar coincoin/* glplib1.c */ /*---------------------------------------------------------------------- -- Copyright (C) 2000, 2001, 2002 Andrew Makhorin , -- Department for Applied Informatics, Moscow Aviation -- Institute, Moscow, Russia. All rights reserved. -- -- This file is a part of GLPK (GNU Linear Programming Kit). -- -- Licensed under the Eclipse Public License (EPL) by permission of the -- author for inclusion in the DyLP LP distribution. ----------------------------------------------------------------------*/ #ifndef UNUSED # if defined(_GNU_SOURCE) || defined(__GNUC__) # define UNUSED __attribute__((unused)) # else # define UNUSED # endif #endif static char sccsid[] UNUSED = "@(#)glplib1.c 1.2 09/25/04" ; static char svnid[] UNUSED = "$Id: glplib1.c 407 2010-12-31 20:48:48Z lou $" ; #include #include "glplib.h" static void *pointer = NULL; /* a secret place to save a pointer */ /*---------------------------------------------------------------------- -- save_pointer - save a pointer. -- -- *Synopsis* -- -- #include "glplib.h" -- void save_pointer(void *ptr); -- -- *Description* -- -- The routine save_pointer saves a pointer ptr in some secret place. -- -- This routine is intended for internal needs and should not be used -- directly by the application program. */ void save_pointer(void *ptr) { pointer = ptr; return; } /*---------------------------------------------------------------------- -- read_pointer - obtain a pointer. -- -- *Synopsis* -- -- #include "glplib.h" -- void *read_pointer(void); -- -- *Description* -- -- The routine read_pointer obtains the pointer, which was previously -- saved by the routine save_pointer in some secret place. -- -- This routine is intended for internal needs and should not be used -- directly by the application program. -- -- *Returns* -- -- The routine read_pointer returns the pointer saved by the routine -- save_pointer. If the latter routine has not been called yet, NULL is -- returned. */ void *read_pointer(void) { void *ptr = pointer; return ptr; } /* eof */ DyLP-1.10.4/DyLP/src/Dylp/dy_coldstart.c0000644000175200017520000020453711507440660016237 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains routines to populate the active constraint system and select an initial basis for an lp. Both of these activities are discussed in more detail below. For here, it suffices to say that dylp offers a great deal of flexibility in establishing the initial constraint system and selecting the initial basis. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_coldstart.c 4.6 10/15/05" ; static char svnid[] UNUSED = "$Id: dy_coldstart.c 407 2010-12-31 20:48:48Z lou $" ; /* Cold start routines. dy_coldstart and subsidiary routines select a set of constraints to populate the initial active system. There are a number of options. But first a bit of general explanation. Ideally, we'd like to be able to guess the constraints that will be tight at optimum and load exactly those constraints. If we can also guess the right basic variables, we have the answer. It's not that easy, of course. See the comments in the second half of the file for an explanation of how dylp chooses the initial set of basic variables. Back to the subject at hand. Recall that we're dealing with equalities and <= constraints. Also recall that we're minimising. Then the normals a to the inequality constraints point out of the feasible region, and at optimum the normal c to the objective will point into the feasible region. Hence ideal `alignment' with the objective occurs when the angle between a and c is 180 degrees. When the angle is 0 degrees, the constraint is forming the far side of the polytope. For convenience, call the inequalities with 180 <= angle(a,c) < 90 the `near' group, those with angle(a,c) = 90 the `perp' group, and those with 90 < angle(a,c) <= 0 the `far' group. The implementation creates a sorted list of inequalities, in nonincreasing order using angle(a,c), and marks the boundaries between the near, perp, and far groups. To populate the active system, equalities are loaded first. All equalities are loaded, always. Empty constraints are never loaded. For the inequalities, it's possible to load one or two specified angular ranges, with a specified sampling rate. This seems to allow as much flexibility as is useful. NOTE: The routines that construct the initial basis use knowledge of the load order, and knowledge of how consys augments columns, to scan the columns in the proper order when selecting architectural variables for basis positions. If you change one, you must change both. See ib_archvselect. Note that specifying a range of 180 - 0 degrees with sampling rate 1.0 (i.e., activate all the original constraints) is >not< quite the same as the fullsys option. 100% activation still allows initial variable deactivation (hence multiple variable activation/deactivation phases) and final variable and constraint deactivation; fullsys suppresses these. Recall that angle(a,c) = (180/pi)*arccos(dot(a,c)/(||a||||c||)) */ /* Utility structures angle_struct Field Definition ----- ---------- ndx constraint index angle angle between a and c ineq_struct Field Definition ----- ---------- cnt Number of inequalities perp index in angles of first inequality with angle(a,c) = 90 degrees far index in angles of first inequality with angle(a,c) < 90 degrees angles inequalities, sorted by angle (indexed from 0) */ typedef struct { int ndx ; double angle ; } angle_struct ; typedef struct { int cnt ; int perp ; int far ; angle_struct *angles ; } ineq_struct ; static int near_perp_far (const void *elem1, const void *elem2) { const angle_struct *c1,*c2 ; c1 = (const angle_struct *) elem1 ; c2 = (const angle_struct *) elem2 ; if (c1->angle > c2->angle) return (-1) ; else if (c1->angle < c2->angle) return (1) ; else return (0) ; } static bool cold_sortcons (consys_struct *orig_sys, int **p_eqs, ineq_struct **p_ineqs, int **p_noload) /* This routine separates the constraints into equalities and inequalities, dropping empty and nonbinding constraints. It also checks the bounds of ranged constraints for prima facie infeasibility. Depending on options, various additional work is performed: * If fullsys is not specified, the inequalities are sorted according to their angle from the objective function. * If full statistics are enabled, constraint angles are loaded into the statistics structure and a histogram is compiled. * If debug printing is enabled, the requested information is dumped to the log. Parameters: orig_sys: The original constraint system p_eqs: (i) empty array of int; assumed to be sufficiently large; allocated if NULL (o) eqs[0] set to number of equalities eqs[1 .. eqs[0]] set to indices of equality constraints p_ineqs: (i) empty ineq_struct; assumed to be sufficiently large; allocated if NULL (o) filled in with inequality information as described in comments at head of file p_noload (i) empty array of int; assumed to be sufficiently large; allocated if NULL (o) noload[0] set to number of constraints ineligible for activation; noload[1 .. noload[0]] set to indices of ineligible constraints Return value: TRUE if all goes as planned, FALSE on error. dy_lp->lpret is set to lpINFEAS for prima facie infeasibility */ { int i,ndx,m,n,eqcnt,ineqcnt,noloadcnt,nearcnt,perpcnt,farcnt ; double cnorm,ainorm,aidotc,pi180,anglei ; double *c ; int *eqs,*noload ; ineq_struct *ineqs ; angle_struct *angles ; contyp_enum *ctyp ; double *rhs,*rhslow ; bool retval,need_angles ; pkvec_struct *ai ; const char *rtnnme = "cold_sortcons" ; # ifdef DYLP_STATISTICS int k ; # endif # ifdef DYLP_PARANOIA if (orig_sys == NULL) { errmsg(2,rtnnme,"orig_sys") ; return (FALSE) ; } if (p_eqs == NULL) { errmsg(2,rtnnme,"&eqs") ; return (FALSE) ; } if (p_ineqs == NULL) { errmsg(2,rtnnme,"&ineqs") ; return (FALSE) ; } if (p_noload == NULL) { errmsg(2,rtnnme,"&noload") ; return (FALSE) ; } # endif /* Allocate the equality, inequality, and noload data structures, if the client didn't supply them. */ if (*p_eqs == NULL) { eqs = (int *) MALLOC((orig_sys->concnt+1)*sizeof(int)) ; } else { eqs = *p_eqs ; } if (*p_ineqs == NULL) { ineqs = CALLOC(1,sizeof(ineq_struct)) ; ineqs->angles = (angle_struct *) MALLOC(orig_sys->concnt*sizeof(angle_struct)) ; } else { ineqs = *p_ineqs ; } if (*p_noload == NULL) { noload = (int *) MALLOC((orig_sys->concnt+1)*sizeof(int)) ; } else { noload = *p_noload ; } # ifdef DYLP_PARANOIA if (ineqs->angles == NULL) { errmsg(2,rtnnme,"angle array") ; return (FALSE) ; } # endif angles = ineqs->angles ; m = orig_sys->concnt ; n = orig_sys->varcnt ; retval = TRUE ; /* Scan orig_sys, sorting the constraints into eqs and ineqs->angles and discarding empty and nonbinding constraints and checking range constraints for prima facie infeasibility. */ ai = pkvec_new(0) ; eqcnt = 0 ; ineqcnt = 0 ; noloadcnt = 0 ; ctyp = orig_sys->ctyp ; rhs = orig_sys->rhs ; rhslow = orig_sys->rhslow ; for (i = 1 ; i <= m ; i++) { if (ctyp[i] == contypNB) { dy_lp->sys.cons.unloadable++ ; dy_lp->sys.cons.loadable-- ; noload[++noloadcnt] = i ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tskipping nonbinding constraint %s (%d).", consys_nme(orig_sys,'c',i,FALSE,NULL),i) ; } # endif continue ; } if (ctyp[i] == contypRNG) { if (rhs[i] < rhslow[i]) { # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n Prima facie infeasibility for %s (%d),", consys_nme(orig_sys,'c',i,FALSE,NULL),i) ; dyio_outfmt(dy_logchn,dy_gtxecho," rhslow = %g > rhs = %g.", rhslow[i],rhs[i]) ; } # endif dy_lp->lpret = lpINFEAS ; } } if (consys_getrow_pk(orig_sys,i,&ai) == FALSE) { errmsg(122,rtnnme,orig_sys->nme,"row", consys_nme(orig_sys,'c',i,TRUE,NULL),i) ; retval = FALSE ; break ; } if (ai->cnt == 0) { dy_lp->sys.cons.unloadable++ ; dy_lp->sys.cons.loadable-- ; noload[++noloadcnt] = i ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tskipping empty constraint %s (%d).", consys_nme(orig_sys,'c',i,FALSE,NULL),i) ; } # endif } else { if (ctyp[i] == contypEQ) { eqs[++eqcnt] = i ; } else { angles[ineqcnt++].ndx = i ; } } } if (ai != NULL) pkvec_free(ai) ; eqs[0] = eqcnt ; ineqs->cnt = ineqcnt ; noload[0] = noloadcnt ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n found %d equalities, %d inequalities", eqcnt,ineqcnt) ; if (noloadcnt != 0) { dyio_outfmt(dy_logchn,dy_gtxecho,", discarded %d empty/nonbinding rows", noloadcnt) ; } dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } # endif # ifdef DYLP_PARANOIA if (dy_lp->sys.cons.loadable+dy_lp->sys.cons.unloadable != orig_sys->concnt) { errmsg(1,rtnnme,__LINE__) ; retval = FALSE ; } # endif if (retval == FALSE) { if (*p_eqs == NULL && eqs != NULL) FREE(eqs) ; if (*p_ineqs == NULL && ineqs != NULL) { if (ineqs->angles != NULL) FREE(angles) ; FREE(ineqs) ; } if (*p_noload == NULL && noload != NULL) FREE(noload) ; return (FALSE) ; } /* Now, how much more work do we need to do? Decide if we need to calculate angles. */ need_angles = TRUE ; if (dy_opts->fullsys == TRUE) need_angles = FALSE ; # ifdef DYLP_STATISTICS need_angles = TRUE ; # endif # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 2) need_angles = TRUE ; # endif /* If we need the angles, get down to it. Calculate angle(a,c) = (180/pi)*arccos(dot(a,c)/(||a||||c||)) for each inequality, then sort the list of inequalities. */ if (need_angles == TRUE) { c = orig_sys->obj ; nearcnt = 0 ; perpcnt = 0 ; farcnt = 0 ; cnorm = exvec_2norm(c,n) ; pi180 = 180/acos(-1.0) ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t||c|| = %.4f",cnorm) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tConstraint\t\t||a||\t(c/||c||).(a/||a||)\tangle") ; } # endif for (ndx = 0 ; ndx < ineqcnt ; ndx++) { i = angles[ndx].ndx ; aidotc = consys_dotrow(orig_sys,i,c) ; if (withintol(aidotc,0,dy_tols->zero)) { # ifndef DYLP_NDEBUG ainorm = consys_2normrow(orig_sys,i) ; # endif anglei = 90 ; } else { ainorm = consys_2normrow(orig_sys,i) ; anglei = pi180*acos(aidotc/(ainorm*cnorm)) ; } angles[ndx].angle = anglei ; if (anglei > 90) { nearcnt++ ; } else if (anglei < 90) { farcnt++ ; } else { perpcnt++ ; } # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t%-10s (%3d) %12.4f %18.10f%15.6f", consys_nme(orig_sys,'c',i,FALSE,NULL),i, ainorm,aidotc/(ainorm*cnorm),anglei) ; } # endif } # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n inequality partition %d near, %d perp, %d far.", nearcnt,perpcnt,farcnt) ; } # endif ineqs->perp = nearcnt ; ineqs->far = nearcnt+perpcnt ; qsort(&angles[0],ineqcnt,sizeof(angle_struct),near_perp_far) ; } # ifdef DYLP_STATISTICS /* If we're collecting full statistics, record the angle for each inequality and calculate a histogram (36 5 degree bins and a dedicated 90 degree bin). This could have been folded into the previous loop, but it's more clear as a separate loop. Bins below 90 degrees include their lower bound, bins above 90 degrees include their upper bound. */ if (dy_stats != NULL) { for (ndx = 0 ; ndx < ineqcnt ; ndx++) { i = angles[ndx].ndx ; anglei = angles[ndx].angle ; dy_stats->cons.angle[i] = anglei ; if (anglei == 90) { dy_stats->angle.hist[DYSTATS_HISTBINS-1]++ ; } else { if (anglei < 90) { k = (int) floor(anglei/5) ; } else { k = (int) ceil(anglei/5)-1 ; } k = minn(k,(DYSTATS_HISTBINS-1)) ; dy_stats->angle.hist[k]++ ; } if (anglei > dy_stats->angle.max) { dy_stats->angle.max = (float) anglei ; } if (anglei < dy_stats->angle.min) { dy_stats->angle.min = (float) anglei ; } } } # endif /* Set up the return values and we're done. */ if (*p_eqs == NULL) *p_eqs = eqs ; if (*p_ineqs == NULL) *p_ineqs = ineqs ; if (*p_noload == NULL) *p_noload = noload ; return (TRUE) ; } static bool cold_createdysys (consys_struct *orig_sys, int eqcnt, int ineqcnt) /* This routine creates the dy_sys constraint system and attaches the translation vectors that are used to move between the original (orig_sys) and active (dy_sys) constraint systems. While unrelated to creating dy_sys, it turns out that this routine is a convenient place for another pre-loading activity, grooming the bounds on variables in orig_sys and assigning an initial status to the inactive variables. Where lb > ub, indicate prima facie infeasibility. Where |ub - lb| < dy_tols->pfeas, the bounds are forced to equality and the variable is marked as fixed (NBFX). (This sort of thing can happen when a client program is tweaking the bounds on variables.) This may or may not be visible to the client --- depends on whether dylp has made a local copy of the constraint system. Variables which are not fixed are arbitrarily set to the bound that best matches their objective coefficient. What's a good estimate of maximum size? If the fullsys option is specified, just use the original constraint system size. Otherwise, take the attitude that some (user) specified fraction of the original constraints and variables (active.cons, active.vars) could be active at any one time while we're solving the LP. This is purely for efficiency -- if we're undersized, the system will automatically expand. Given that all equalities are loaded, initcons.frac is interpreted as the initial fraction of inequalities that should be loaded. Again, for efficiency active.cons should be greater than initcons.frac. dy_sys is created with logicals enabled. Parameters: orig_sys: the original constraint system eqcnt: the number of equalities in orig_sys ineqcnt: the number of inequalities in orig_sys Returns: TRUE if the system is created without error, FALSE otherwise. */ { int m_sze,n_sze ; char nmebuf[50] ; flags parts = CONSYS_OBJ|CONSYS_VUB|CONSYS_VLB|CONSYS_RHS|CONSYS_RHSLOW| CONSYS_VTYP|CONSYS_CTYP, opts = CONSYS_LVARS|CONSYS_WRNATT ; const char *rtnnme = "cold_createdysys" ; /* Settle the appropriate size for dy_sys, and create the consys structure. The variable capacity is set to accommodate logicals. */ dyio_outfxd(nmebuf,-((int) (sizeof(nmebuf)-1)), 'l',"%s[actv]",orig_sys->nme) ; if (dy_opts->fullsys == TRUE) { m_sze = orig_sys->concnt ; n_sze = orig_sys->archvcnt+m_sze ; } else { m_sze = eqcnt+((int) (orig_sys->concnt*dy_opts->active.cons)) ; n_sze = (int) (orig_sys->archvcnt*dy_opts->active.vars+m_sze) ; } # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n creating constraint system %s (%d x %d)", nmebuf,m_sze,n_sze) ; } # endif dy_sys = consys_create(nmebuf,parts,opts,m_sze,n_sze,dy_tols->inf) ; if (dy_sys == NULL) { errmsg(152,rtnnme,nmebuf) ; return (FALSE) ; } /* Hang a set of translation vectors onto each system: origcons and origvars on orig_sys, and actcons and actvars on dy_sys. dy_origvars is cleared to 0 as it's attached, and this is important to indicate that the original variables have no predefined status. Note that we won't leak memory here, even if there's an error. Any attached vectors will be deleted when dy_sys is deleted. */ dy_actvars = NULL ; if (consys_attach(dy_sys,CONSYS_ROW, sizeof(int),(void **) &dy_actvars) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"active -> original variable map") ; return (FALSE) ; } dy_actcons = NULL ; if (consys_attach(dy_sys,CONSYS_COL, sizeof(int),(void **) &dy_actcons) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"active -> original constraint map") ; return (FALSE) ; } dy_origvars = NULL ; if (consys_attach(orig_sys,CONSYS_ROW, sizeof(int),(void **) &dy_origvars) == FALSE) { errmsg(100,rtnnme,orig_sys->nme,"original -> active variable map") ; return (FALSE) ; } dy_origcons = NULL ; if (consys_attach(orig_sys,CONSYS_COL, sizeof(int),(void **) &dy_origcons) == FALSE) { errmsg(100,rtnnme,orig_sys->nme,"original -> active constraint map") ; return (FALSE) ; } return (TRUE) ; } static bool cold_scanvars (consys_struct *orig_sys) /* Assign a status to all variables in orig_sys. There are lots of reasons for doing this right off the top: * We can use origvars == 0 as a paranoid check from here on out. * It's not uncommon for people to fix variables in an MPS model. This takes them out of consideration right from the start. Assign status NBFX and mark them as ineligible for activation. * dylp's intended use is in branch-and-cut codes, which tend to update bounds on a regular basis. This can result in bounds which are not precisely equal, but are within the primal feasibility tolerance of one another. The variable is fixed, for all practical purposes, but it's a `dirty' fix. Push it to one bound or another and mark it ineligible for activation. * A careless client may hand us a model with prima facie infeasibility, lb > ub. We need to detect this and report it --- the main body of dylp does not react well to this situation. * More legitimate (but not by much), the client may hand us a model with variables that are only present in the objective. We can set these to bound based on the objective coefficient and mark them as ineligible for activation. If the appropriate bound is not finite, we can report unboundedness. * If there are no variables with upper and lower bounds (`flippable', in dual multipivot) then we might as well turn multipivot off. Parameters: orig_sys: the original constraint system Returns: TRUE if all goes well, FALSE otherwise. If prima facie infeasibility is detected, dy_lp->lpret is set to lpINFEAS. If prima facie unboundedness is detected, dy_lp->lpret is set to lpUNBOUNDED. */ { int j,flippable ; flags statj ; double *vlb,*vub,*obj ; double lj,uj,cj ; bool retval ; pkvec_struct *aj ; char *rtnnme = "cold_scanvars" ; retval = TRUE ; /* Prep, then open up a loop to do the scan. */ vlb = orig_sys->vlb ; vub = orig_sys->vub ; obj = orig_sys->obj ; flippable = 0 ; aj = pkvec_new(0) ; for (j = 1 ; j <= orig_sys->varcnt ; j++) { lj = vlb[j] ; uj = vub[j] ; cj = obj[j] ; /* Sort into cases. Variables with two finite bounds first. If we have a `dirty' fix, set the variable to one of the bounds and mark it ineligible for activation. If the bounds are crossed, note prima facie infeasibility. Otherwise, note that the variable is flippable and assign a status based on the objective coefficient. */ if (lj > -dy_tols->inf && uj < dy_tols->inf) { if (atbnd(lj,uj) && lj != uj) { if (cj < 0) { statj = vstatNBUB|vstatNOLOAD ; } else { statj = vstatNBLB|vstatNOLOAD ; } # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tDirty fixed variable %s (%d)", consys_nme(orig_sys,'v',j,0,0),j) ; dyio_outfmt(dy_logchn,dy_gtxecho, " assigned status %s.",dy_prtvstat(statj)) ; dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t original lb = %g, ub = %g, diff = %g, tol = %g", lj,uj,uj-lj,dy_tols->pfeas) ; } # endif } else if (uj < lj) { dy_lp->lpret = lpINFEAS ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tPrima facie infeasibility for %s (%d), lb = %g > ub = %g.", consys_nme(orig_sys,'v',j,0,0),j,lj,uj) ; } # endif statj = vstatNBLB|vstatNOLOAD ; } else if (lj == uj) { statj = vstatNBFX|vstatNOLOAD ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tFixed variable %s (%d) = %g", consys_nme(orig_sys,'v',j,0,0),j,lj) ; dyio_outfmt(dy_logchn,dy_gtxecho, " assigned status %s.",dy_prtvstat(statj)) ; } # endif } else { flippable++ ; if (cj < 0) { statj = vstatNBUB ; } else { statj = vstatNBLB ; } } } /* For variables with one finite bound, choose the finite bound as the initial status. If there are no finite bounds, we're left with NBFR. */ else if (lj > -dy_tols->inf) { statj = vstatNBLB ; } else if (uj < dy_tols->inf) { statj = vstatNBUB ; } else { statj = vstatNBFR ; } /* Check if the variable is not referenced by any constraint. Note that this isn't the definitive test. There's a variation of this pathology in which the client has left a nonbinding row in the system and the variable is referenced only by the nonbinding row. Doing the necessary work here fails the `make the common case fast' test. Doing the necessary work later is still questionable. See comments in dy_varmgmt::scanPrimVarStdAct. If we pass the test for boundedness, the status is already correct. Just mark it as ineligible for activation. */ if (consys_getcol_pk(orig_sys,j,&aj) == FALSE) { errmsg(122,rtnnme,dy_sys->nme,"column", consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; retval = FALSE ; break ; } if (aj->cnt == 0) { if ((cj > 0 && lj <= -dy_tols->inf) || (cj < 0 && uj >= dy_tols->inf)) { dy_lp->lpret = lpUNBOUNDED ; dy_lp->z = -j ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tPrima facie unboundedness for %s (%d), ", consys_nme(orig_sys,'v',j,0,0),j) ; dyio_outfmt(dy_logchn,dy_gtxecho,"c = %g, lb = %g, ub = %g.", cj,lj,uj) ; } # endif } else { setflg(statj,vstatNOLOAD) ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tEmpty column for variable %s (%d),", consys_nme(orig_sys,'v',j,0,0),j,lj) ; dyio_outfmt(dy_logchn,dy_gtxecho, " assigned status %s,",dy_prtvstat(statj)) ; dyio_outfmt(dy_logchn,dy_gtxecho, " c = %g, lb = %g, ub = %g.",cj,lj,uj) ; } # endif } } dy_origvars[j] = -((int) statj) ; if (flgon(statj,vstatNOLOAD) == TRUE) { dy_lp->sys.vars.unloadable++ ; dy_lp->sys.vars.loadable-- ; } } if (aj != NULL) pkvec_free(aj) ; /* That's it for the scan loop. Disable dual multipivoting? Fairly arbitrarily, give 25% flippable variables as the threshold. */ # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->dmulti.flippable = flippable ; # endif uj = ((double) flippable)/orig_sys->varcnt ; if (uj < .25 && dy_opts->dpsel.flex == TRUE) { dy_opts->dpsel.flex = FALSE ; dy_opts->dpsel.strat = 0 ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 2 || dy_opts->print.dual >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n %d (%.1f%%) flippable variables; disabling dual multipivot.", flippable,uj*100) ; } # endif } # ifdef DYLP_PARANOIA if (dy_lp->sys.vars.unloadable+dy_lp->sys.vars.loadable != orig_sys->varcnt) { errmsg(1,rtnnme,__LINE__) ; retval = FALSE ; } # endif return (retval) ; } static bool cold_loadfull (consys_struct *orig_sys, int *eqs, ineq_struct *ineqs) /* This routine loads the full original constraint system into dy_sys. It's just easier to handle this separate from the more complicated business of loading a partial system. Parameters: orig_sys: the original constraint system eqs: indices of equality constraints; eq[0] contains the number of valid entries ineqs: information on inequalities; only the number of inequalities and their indices are used here. Returns: TRUE if all constraints are loaded successfully, FALSE otherwise. */ { int i,ndx,eqcnt,ineqcnt ; bool retval ; angle_struct *angles ; const char *rtnnme = "cold_loadfull" ; eqcnt = eqs[0] ; ineqcnt = ineqs->cnt ; retval = TRUE ; /* Load any equalities first. */ if (eqcnt > 0) { for (ndx = 1 ; ndx <= eqcnt ; ndx++) { i = eqs[ndx] ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n activating %s %s (%d) ...", consys_prtcontyp(orig_sys->ctyp[i]), consys_nme(orig_sys,'c',i,FALSE,NULL),i) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->cons.init[i] = TRUE ; # endif if (dy_loadcon(orig_sys,i,TRUE,NULL) == FALSE) { errmsg(430,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "activate","constraint", consys_nme(orig_sys,'c',i,TRUE,NULL),i) ; retval = FALSE ; break ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n transferred %d equalities ...",eqcnt) ; } # endif if (retval == FALSE) { return (FALSE) ; } } /* And the inequalities. */ if (ineqcnt > 0) { angles = ineqs->angles ; for (ndx = 0 ; ndx < ineqcnt ; ndx++) { i = angles[ndx].ndx ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n activating %s %s (%d) ...", consys_prtcontyp(orig_sys->ctyp[i]), consys_nme(orig_sys,'c',i,FALSE,NULL),i) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->cons.init[i] = TRUE ; # endif if (dy_loadcon(orig_sys,i,TRUE,NULL) == FALSE) { errmsg(430,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "activate","constraint", consys_nme(orig_sys,'c',i,TRUE,NULL),i) ; retval = FALSE ; break ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n transferred %d inequalities ...",ineqcnt) ; } # endif } return (retval) ; } static bool cold_loadpartial (consys_struct *orig_sys, int *eqs, ineq_struct *ineqs) /* This routine loads some fraction of the original constraint system into dy_sys. As explained in the comments at the head of the file, the inequalities are sorted by angle(a,c). The client can specify one or two angular intervals, and the upper and lower bounds of each interval can be closed or open. Both intervals are sampled at the specified fractional rate. Parameters: orig_sys: the original constraint system eqs: indices of equality constraints; eq[0] contains the number of valid entries ineqs: information on inequalities; only the number of inequalities and their indices are used here. Returns: TRUE if all constraints are loaded successfully, FALSE otherwise. */ { int i,ndx,eqcnt,ineqcnt,ineq_actvcnt ; bool retval ; angle_struct *angles ; int intcnt,intndx ; double albs[2],aubs[2],alb,aub,dblndx,incr ; const char *rtnnme = "cold_loadpartial" ; eqcnt = eqs[0] ; ineqcnt = ineqs->cnt ; retval = TRUE ; /* Load any equalities first. */ if (eqcnt > 0) { for (ndx = 1 ; ndx <= eqcnt ; ndx++) { i = eqs[ndx] ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n activating %s %s (%d) ...", consys_prtcontyp(orig_sys->ctyp[i]), consys_nme(orig_sys,'c',i,FALSE,NULL),i) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->cons.init[i] = TRUE ; # endif if (dy_loadcon(orig_sys,i,TRUE,NULL) == FALSE) { errmsg(430,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "activate","constraint", consys_nme(orig_sys,'c',i,TRUE,NULL),i) ; retval = FALSE ; break ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n transferred %d equalities ...",eqcnt) ; } # endif if (retval == FALSE) { return (FALSE) ; } } /* If there are no inequalities, we're done. */ if (ineqcnt == 0) return (TRUE) ; /* Establish the number of intervals, angular boundaries, and fractional increment. Recall that constraints are sorted nonincreasing from 180 degrees to 0 degrees. To approximate an open interval, we pull in the specified bound by the zero tolerance; for a closed interval, we push it out. */ # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n inequalities: sampling %.2f, %c %.4f %.4f %c", dy_opts->initcons.frac, (dy_opts->initcons.i1uopen == TRUE)?'(':'[', dy_opts->initcons.i1u,dy_opts->initcons.i1l, (dy_opts->initcons.i1lopen == TRUE)?')':']') ; if (dy_opts->initcons.i2valid == TRUE) { dyio_outfmt(dy_logchn,dy_gtxecho,", %c %.4f %.4f %c", (dy_opts->initcons.i2uopen == TRUE)?'(':'[', dy_opts->initcons.i2u,dy_opts->initcons.i2l, (dy_opts->initcons.i2lopen == TRUE)?')':']') ; } } # endif incr = 1/dy_opts->initcons.frac ; if (dy_opts->initcons.i1lopen == TRUE) { albs[0] = dy_opts->initcons.i1l+dy_tols->zero ; } else { albs[0] = dy_opts->initcons.i1l-dy_tols->zero ; } if (dy_opts->initcons.i1uopen == TRUE) { aubs[0] = dy_opts->initcons.i1u-dy_tols->zero ; } else { aubs[0] = dy_opts->initcons.i1u+dy_tols->zero ; } if (dy_opts->initcons.i2valid == TRUE) { if (dy_opts->initcons.i2lopen == TRUE) { albs[1] = dy_opts->initcons.i2l+dy_tols->zero ; } else { albs[1] = dy_opts->initcons.i2l-dy_tols->zero ; } if (dy_opts->initcons.i2uopen == TRUE) { aubs[1] = dy_opts->initcons.i2u-dy_tols->zero ; } else { aubs[1] = dy_opts->initcons.i2u+dy_tols->zero ; } intcnt = 2 ; } else { intcnt = 1 ; } angles = ineqs->angles ; ineq_actvcnt = 0 ; /* The outer loop is just to avoid replicating code for each interval. */ ndx = 0 ; for (intndx = 0 ; intndx < intcnt ; intndx++) { alb = albs[intndx] ; aub = aubs[intndx] ; /* Scan to the upper boundary of the interval. Consider the possibility that we might run off the end of angles. An easy and all too common example: the intervals exclude 90 degrees, and all inequalities are at 90 degrees to the objective. This is an artifact of a modelling style in which the objective function is a single variable z, constrained to be equal to the real objective cx. Then z appears only in the single equality z - cx = 0. */ while (ndx < ineqcnt && angles[ndx].angle > aub) ndx++ ; dblndx = ndx ; /* Now the actual loading loop. We load the constraint, then move ndx to the next value according to the sampling fraction. */ while (ndx < ineqcnt && angles[ndx].angle > alb) { i = angles[ndx].ndx ; # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n activating %s %s (%d) %g off 90 ...", consys_prtcontyp(orig_sys->ctyp[i]), consys_nme(orig_sys,'c',i,FALSE,NULL),i, (angles[ndx].angle-90)) ; } # endif # ifdef DYLP_STATISTICS if (dy_stats != NULL) dy_stats->cons.init[i] = TRUE ; # endif if (dy_loadcon(orig_sys,i,TRUE,NULL) == FALSE) { errmsg(430,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "activate","constraint", consys_nme(orig_sys,'c',i,TRUE,NULL),i) ; retval = FALSE ; break ; } ineq_actvcnt++ ; dblndx += incr ; ndx = (int) dblndx ; } } /* That's it. A little information and we're out of here. */ # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n transferred %d inequalities ...",ineq_actvcnt) ; } # endif return (retval) ; } dyret_enum dy_coldstart (consys_struct *orig_sys) /* This routine is responsible for setting up the lp problem that'll be solved by dylp. It creates the lp and constraint system structures (dy_lp and dy_sys, respectively) and oversees the load of the initial constraint system. Parameters: orig_sys: The original constraint system Returns: dyrOK if the setup completes without error, dyrFATAL otherwise. */ { int i,j,ndx,n,eqcnt,ineqcnt,noloadcnt ; double *vlb,*vub,*obj ; double vlbj,vubj,objj ; flags statj ; int *eqs,*noload ; ineq_struct *ineqs ; # ifndef DYLP_NDEBUG int nbfxcnt = 0 ; # endif bool retval ; const char *rtnnme = "dy_coldstart" ; /* Initialise the statistics on loadable/unloadable variables and constraints. */ dy_lp->sys.forcedfull = FALSE ; dy_lp->sys.vars.loadable = orig_sys->varcnt ; dy_lp->sys.vars.unloadable = 0 ; dy_lp->sys.cons.loadable = orig_sys->concnt ; dy_lp->sys.cons.unloadable = 0 ; /* To get started, sort the constraints into equalities and inequalities. If we're loading a partial active system, the inequalities will also be sorted by angle from the objective function. */ eqs = NULL ; ineqs = NULL ; noload = NULL ; retval = cold_sortcons(orig_sys,&eqs,&ineqs,&noload) ; if (retval == FALSE) { errmsg(312,rtnnme, orig_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; if (eqs != NULL) FREE(eqs) ; if (ineqs != NULL) { if (ineqs->angles != NULL) FREE(ineqs->angles) ; FREE(ineqs) ; } if (noload != NULL) FREE(noload) ; return (dyrFATAL) ; } eqcnt = eqs[0] ; ineqcnt = ineqs->cnt ; /* Next, create dy_sys and attach the translation vectors that will allow us to move between the original and active systems. */ retval = cold_createdysys(orig_sys,eqcnt,ineqcnt) ; if (retval == FALSE) { if (eqs != NULL) FREE(eqs) ; if (ineqs != NULL) { if (ineqs->angles != NULL) FREE(ineqs->angles) ; FREE(ineqs) ; } if (noload != NULL) FREE(noload) ; return (dyrFATAL) ; } /* Do an initial scan of the variables. Assign initial status, deal with a few pathological cases, and detect prima facie infeasibility and unboundedness. */ retval = cold_scanvars(orig_sys) ; if (retval == FALSE) { if (eqs != NULL) FREE(eqs) ; if (ineqs != NULL) { if (ineqs->angles != NULL) FREE(ineqs->angles) ; FREE(ineqs) ; } if (noload != NULL) FREE(noload) ; return (dyrFATAL) ; } /* Mark the constraints that are ineligible for loading and dispose of noload. */ noloadcnt = noload[0] ; if (noloadcnt > 0) { for (ndx = 1 ; ndx <= noloadcnt ; ndx++) { i = noload[ndx] ; MARK_UNLOADABLE_CON(i) ; } } if (noload != NULL) FREE(noload) ; /* Transfer the required constraints. Once this is done, we're finished with the lists of equalities and inequalities. There's a pathology we may need to deal with here. It can happen that the client is negligent and passes in a constraint system which contains nonbinding rows and variables which are referenced only in the nonbinding rows. If we're running in dynamic mode, these variables will be found during normal variable activation. But if we're running in fullsys mode, there will be no second chance. Check for the situation and deal with it. */ if (dy_opts->fullsys == TRUE) { retval = cold_loadfull(orig_sys,eqs,ineqs) ; dy_lp->sys.forcedfull = TRUE ; if (retval == TRUE && dy_sys->archvcnt+dy_lp->sys.vars.unloadable < orig_sys->varcnt) { # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n system %s has %d variables referenced only by nonbinding rows.", orig_sys->nme, (orig_sys->varcnt-(dy_sys->archvcnt+dy_lp->sys.vars.unloadable))) ; } # endif } } else { retval = cold_loadpartial(orig_sys,eqs,ineqs) ; dy_lp->sys.forcedfull = FALSE ; } if (eqs != NULL) FREE(eqs) ; if (ineqs != NULL) { if (ineqs->angles != NULL) FREE(ineqs->angles) ; FREE(ineqs) ; } if (retval == FALSE) { errmsg(313,rtnnme, dy_sys->nme,dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, orig_sys->nme) ; return (dyrFATAL) ; } /* Scan the variables in orig_sys once again and calculate the correction to the objective function. (loadcon handled any rhs adjustments for the constraints it loaded.) Inactive free variables are assumed to be 0. */ n = orig_sys->varcnt ; vlb = orig_sys->vlb ; vub = orig_sys->vub ; obj = orig_sys->obj ; dy_lp->inactzcorr = 0 ; for (j = 1 ; j <= n ; j++) { if (INACTIVE_VAR(j)) { statj = (flags) (-dy_origvars[j]) ; clrflg(statj,vstatNOLOAD) ; vlbj = vlb[j] ; vubj = vub[j] ; objj = obj[j] ; switch (statj) { case vstatNBLB: case vstatNBFX: { dy_lp->inactzcorr += objj*vlbj ; # ifndef DYLP_NDEBUG if (statj == vstatNBFX) nbfxcnt++ ; # endif break ; } case vstatNBUB: { dy_lp->inactzcorr += objj*vubj ; break ; } } } } /* Paranoid checks and informational print statements. Apologies for abusing previously declared variables for the print loop. */ # ifdef DYLP_PARANOIA if (dy_chkdysys(orig_sys) == FALSE) return (dyrFATAL) ; # endif # ifndef DYLP_NDEBUG if (dy_opts->print.setup >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n system %s has %d constraints, (%d+%d) variables", dy_sys->nme,dy_sys->concnt,dy_sys->archvcnt,dy_sys->logvcnt) ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n %d constraints, %d variables ", orig_sys->concnt-dy_sys->concnt, orig_sys->archvcnt-dy_sys->archvcnt) ; if (nbfxcnt > 0) dyio_outfmt(dy_logchn,dy_gtxecho," (%d fixed)",nbfxcnt) ; dyio_outfmt(dy_logchn,dy_gtxecho, " remain inactive in system %s.",orig_sys->nme) ; if (dy_lp->sys.cons.unloadable > 0 || dy_lp->sys.vars.unloadable > 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n %d constraints, %d variables unloadable.", dy_lp->sys.cons.unloadable,dy_lp->sys.vars.unloadable) ; } if (dy_opts->print.setup >= 6) { vubj = 0 ; for (j = 1 ; j <= n ; j++) { if (INACTIVE_VAR(j)) { statj = (flags)(-dy_origvars[j]) ; switch (getflg(statj,vstatSTATUS)) { case vstatNBUB: { vlbj = vub[j] ; break ; } case vstatNBLB: { vlbj = vlb[j] ; break ; } case vstatNBFX: case vstatNBFR: { vlbj = 0 ; break ; } default: { errmsg(433,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "inactive",consys_nme(orig_sys,'v',j,TRUE,NULL), j,dy_prtvstat(statj)) ; return (dyrFATAL) ; } } if (vlbj != 0) { if (vubj == 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tinactive variables with nonzero values:") ; } vubj++ ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t%s (%d) = %g, status %s", consys_nme(orig_sys,'v',j,FALSE,NULL),j,vlbj, dy_prtvstat(statj)) ; } } } if (vubj == 0) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tall inactive variables are zero.") ; } } } # endif return (dyrOK) ; } /* Routines to select an initial basis. dylp offers three types of starting basis: logical: Basis positions occupied by inequalities are covered with slack variables. Basis positions occupied by equalities are covered with artificial variables. This is the standard starting basis. slack: Basis positions occupied by inequalities are covered with slack variables. For basis positions occupied by equalities, an attempt is made to select architectural variables before falling back on artificial variables. architectural: For all basis positions, an attempt is made to cover the position with an architectural variable, before falling back on a slack or artificial. The selection process is performed in a way that will use an architectural to cover an equality before considering inequalities. As Bixby notes in an ORSA JOC article, crash is often taken to mean trying to guess the optimal basis. That's part of what's happening here, but not all. Architectural is chosen as the default basis type on the grounds that the default algorithms used in dy_coldstart and subsidiary routines are trying to choose constraints that will be tight at optimum. So it makes sense to build an initial basis with as few basic logicals as possible. But just as important, dy_crash and subsidiary routines try to select variables with an eye for numerical stability and ease of factorization. The algorithms used here to construct the slack and architectural basis styles had their roots in Bixby's article: Bixby, R., "Implementing the Simplex Method: The Initial Basis", ORSA J. on Computing, 4(3), Summer, 1992, pp. 267-284. */ /* Some utility declarations used in building the initial basis. The ibrank structure holds information useful in selecting architectural variable for inclusion in the initial basis. The function ib_archvcomp is used by qsort to sort the list of eligible candidates. ibrank_struct bndcnt and nonzero are used for the initial sort of the architecturals. If the matrix has been scaled, ajmax = 1 by definition for every row and column. But if the matrix hasn't been scaled, it's useful to know the maximum. Field Definition ----- ---------- ndx The index of the variable bndcnt The number of bounds nonzero The number of nonzero coefficients in the column ajmax The largest value in the column */ typedef struct { int ndx ; int bndcnt ; int nonzero ; double ajmax ; } ibrank_struct ; static int ib_archvcomp (const void *elem1, const void *elem2) /* This function is called by qsort to compare architectural variables. The comparison is calculated using the following criteria: * Number of bounds: free variables (no finite bounds) are best, followed by variables with one finite bound, then two finite bounds * Number of coefficients in the column: Fewer coefficients are preferable, as this will tend to minimize the work during factoring. */ { const ibrank_struct *v1,*v2 ; v1 = (const ibrank_struct *) elem1 ; v2 = (const ibrank_struct *) elem2 ; if (v1->bndcnt < v2->bndcnt) { return (-1) ; } else if (v1->bndcnt > v2->bndcnt) { return (1) ; } else if (v1->nonzero < v2->nonzero) { return (-1) ; } else if (v1->nonzero > v2->nonzero) { return (1) ; } else { return (0) ; } } static bool ib_archvrank (int *p_cnt, ibrank_struct **p_archvars) /* This routine sorts the architectural variables in preparation for constructing the initial basis. It scans the architectural variables, compiling information on the eligible candidates in archvars, and returns a sorted list. The ranking criteria are explained above in the comments for ib_archvcomp (the comparison function passed to qsort). Parameters: p_cnt: (o) the number of eligible variables returned in p_archvars p_archvars: (i) empty crashrank_struct vector of sufficient size; if NULL, one will be allocated (o) list of eligible architectural variables, sorted in order of preference for inclusion in the basis; may be NULL if there are no candidates (extremely unlikely) Returns: TRUE if the sort concludes without error, FALSE otherwise */ { int j,m,n,eligible ; double *vlb,*vub ; double vlbj,vubj ; pkvec_struct *aj ; ibrank_struct *archvars ; bool scaled,retval ; const char *rtnnme = "ib_archvrank" ; # ifndef DYLP_NDEBUG int freecnt,onebndcnt,twobndcnt ; freecnt = 0 ; onebndcnt = 0 ; twobndcnt = 0 ; # endif retval = TRUE ; vlb = dy_sys->vlb ; vub = dy_sys->vub ; /* Did the client supply a vector? If not, allocate one. */ if (*p_archvars == NULL) { archvars = (ibrank_struct *) MALLOC(dy_sys->archvcnt*sizeof(ibrank_struct)) ; } else { archvars = *p_archvars ; } /* Scan the architecturals, recording the necessary information in archvars. Fixed variables should not be loaded, so we should not see them here. If the constraint system has not been scaled, recover the maximum coefficient for the column. */ n = dy_sys->varcnt ; m = dy_sys->logvcnt ; scaled = dy_isscaled() ; eligible = 0 ; aj = pkvec_new(0) ; for (j = m+1 ; j <= n ; j++) { if (consys_getcol_pk(dy_sys,j,&aj) == FALSE) { errmsg(122,rtnnme,dy_sys->nme,"column", consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; retval = FALSE ; break ; } archvars[eligible].ndx = j ; archvars[eligible].nonzero = aj->cnt ; if (scaled) { archvars[eligible].ajmax = 1.0 ; } else { archvars[eligible].ajmax = consys_infnormcol(dy_sys,j) ; } vlbj = vlb[j] ; vubj = vub[j] ; if (vlbj > -dy_tols->inf && vubj < dy_tols->inf) { archvars[eligible].bndcnt = 2 ; # ifdef DYLP_PARANOIA if (vlbj == vubj) { errmsg(1,rtnnme,__LINE__) ; retval = FALSE ; break ; } # endif # ifndef DYLP_NDEBUG twobndcnt++ ; # endif } else if (vlbj > -dy_tols->inf || vubj < dy_tols->inf) { archvars[eligible].bndcnt = 1 ; # ifndef DYLP_NDEBUG onebndcnt++ ; # endif } else { archvars[eligible].bndcnt = 0 ; # ifndef DYLP_NDEBUG freecnt++ ; # endif } eligible++ ; } # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t%d eligible architecturals: %d free, %d 1-bound, %d 2-bound", eligible,freecnt,onebndcnt,twobndcnt) ; } # endif if (aj != NULL) pkvec_free(aj) ; if (retval == FALSE) { if (archvars != NULL) FREE(archvars) ; return (FALSE) ; } /* And sort them. If there aren't any candidates, and we supplied the vector for archvars, release it. */ if (eligible > 1) { qsort(&archvars[0],eligible,sizeof(ibrank_struct),ib_archvcomp) ; } else if (eligible == 0) { if (*p_archvars == NULL) { if (archvars != NULL) FREE(archvars) ; archvars = NULL ; } } /* Return the sorted list. */ *p_cnt = eligible ; *p_archvars = archvars ; return (TRUE) ; } static int ib_archvselect (int cnt, ibrank_struct *vars) /* This routine tries to populate the basis using the ranked architectural variables listed in vars. Equalities are examined first, because if we can't cover them with architectural variables, we'll have to use artificials. The variables in vars are already ranked according to how desireable it is to place them in the basis, taking into account bounds and number of nonzeros in a column. Here we'll try to allocate the variables to basis positions based on the pivot element a, and a notion that in an ideal world we'd like to construct a lower diagonal basis matrix. Why lower diagonal? Because we can turn it into a diagonal matrix, which is trivially easy to invert! To require that the columns we select conform strictly to the lower diagonal view, when we pick a pivot a, we would need to require that a = 0, k < i. In practice, this is pretty restrictive. So we settle for requiring that elimination using multiples of rows a, k < i, have minimal impact on our chosen pivot a. We do this by requiring that coefficients a, k < i, be small compared to the pivots a: specifically, a < .1 a. (If you're having trouble visualising this, you might want to go off and do a quick 3x3 example about now.) As we're selecting, we also try to pay a bit of attention to numerical stability. If the matrix is scaled, the maximum coefficient in each row and column is 1.0, and we simply require |a| > .9. If the matrix is unscaled, well, we settle for |a/a| > .9. (Arguably we should also look at a, but if you're really having stability trouble, you should consider allowing dylp to scale the matrix.) Note that we don't have to make marginal choices here --- we'll fill any vacant positions with the logical (slack or artificial) for the constraint. Parameters: cnt: the number of variables in vars vars: ranked vector of architectural variables Returns: the number of basis positions covered, or -1 if an error occurs. */ { int i,j,m,ndx,pkndx,covered ; double ratio ; double *estpiv ; ibrank_struct *var ; bool scaled,select ; pkvec_struct *aj ; pkcoeff_struct *aij ; dyret_enum retval ; const char *rtnnme = "ib_archvselect" ; # ifndef DYLP_NDEBUG int bndcnt ; double maxratio ; # endif retval = 0 ; ratio = 0 ; /* Allocate bookkeeping arrays. */ m = dy_sys->concnt ; scaled = dy_isscaled() ; aj = NULL ; estpiv = (double *) MALLOC((m+1)*sizeof(double)) ; for (i = 1 ; i <= m ; i++) estpiv[i] = dy_tols->inf ; covered = 0 ; /* Open a loop to scan vars and attempt to use each variable. */ for (ndx = 0 ; ndx < cnt ; ndx++) { var = &vars[ndx] ; j = var->ndx ; if (consys_getcol_pk(dy_sys,j,&aj) == FALSE) { errmsg(122,rtnnme,dy_sys->nme,"column", consys_nme(dy_sys,'v',j,TRUE,NULL),j) ; retval = -1 ; break ; } # ifndef DYLP_NDEBUG bndcnt = 0 ; if (dy_sys->vlb[j] > -dy_tols->inf) bndcnt++ ; if (dy_sys->vub[j] < dy_tols->inf) bndcnt++ ; maxratio = -1.0 ; # endif /* Scan the column: We need a coefficient in an uncovered row (dy_basis[i] == 0) which satisfies the stability criteria (ratio > .9). The coefficients we scan before finding a suitable pivot can't do too much damage to our goal of lower diagonal (|aij->val| < .1*estpiv[i]). NOTE: Scan order is crucially important here. We need to consider equalities before inequalities in order to minimize eventual use of artificials to cover equalities. Because of the way dy_sys is loaded (equalities first) and the way consys augments columns (new coefficients go at the front) we need to scan from back to front in order to consider equalities first. */ select = FALSE ; for (pkndx = aj->cnt-1 ; pkndx >= 0 ; pkndx--) { aij = &aj->coeffs[pkndx] ; i = aij->ndx ; ratio = fabs(aij->val) ; if (!scaled) ratio /= var->ajmax ; if (dy_basis[i] == 0) { if (ratio > .9) { select = TRUE ; break ; } # ifndef DYLP_NDEBUG else { if (maxratio < ratio) maxratio = ratio ; } # endif } else { if (ratio > .1*estpiv[i]) break ; } } /* Did we select this variable? If so, install it. If we have a full basis, break out of the search loop. */ if (select == TRUE) { dy_basis[i] = j ; dy_var2basis[j] = i ; estpiv[i] = ratio ; covered++ ; # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t adding %s (%d) (%d bounds)", consys_nme(dy_sys,'v',j,FALSE,NULL),j,bndcnt) ; dyio_outfmt(dy_logchn,dy_gtxecho," to cover %s %s (%d),", consys_prtcontyp(dy_sys->ctyp[i]), consys_nme(dy_sys,'c',i,FALSE,NULL),i) ; dyio_outfmt(dy_logchn,dy_gtxecho," |a<%d,%d>/max(a<*,%d>)| = %g.", i,j,j,ratio) ; } # endif if (covered == m) break ; } # ifndef DYLP_NDEBUG else if (dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t rejected %s (%d) (%d bounds)", consys_nme(dy_sys,'v',j,FALSE,NULL),j,bndcnt) ; if (pkndx >= 0) { dyio_outfmt(dy_logchn,dy_gtxecho,"; lower diag violation at .1;") ; dyio_outfmt(dy_logchn,dy_gtxecho, " a<%d,%d> = %g, estpiv<%d> = %g, ratio %g.", i,j,ratio,i,estpiv[i],ratio/estpiv[i]) ; } else { if (maxratio > 0) { dyio_outfmt(dy_logchn,dy_gtxecho," at %g < .9; no suitable pivots.", maxratio) ; } else { dyio_outfmt(dy_logchn,dy_gtxecho, " no non-zeroes in uncovered rows.") ; } } } # endif } if (aj != NULL) pkvec_free(aj) ; if (estpiv != NULL) FREE(estpiv) ; if (retval < 0) return (retval) ; /* We're done. Print a summary and return. */ # ifndef DYLP_NDEBUG { if (dy_opts->print.crash >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n added %d architectural variables.",covered) ; } } # endif return (covered) ; } static int ib_slackselect (void) /* This routine will populate the basis slots corresponding to inequalities using the logical (slack) variable for the inequality. Parameters: none Returns: the number of basis slots filled. */ { int i,m,covered ; contyp_enum *ctyp ; /* Walk the constraints, installing the logical for each inequality. */ m = dy_sys->concnt ; ctyp = dy_sys->ctyp ; covered = 0 ; for (i = 1 ; i <= m ; i++) { if (ctyp[i] != contypEQ && dy_basis[i] == 0) { dy_basis[i] = i ; dy_var2basis[i] = i ; covered++ ; # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t adding %s (%d)", consys_nme(dy_sys,'v',i,FALSE,NULL),i) ; dyio_outfmt(dy_logchn,dy_gtxecho," to cover %s (%d).", consys_nme(dy_sys,'c',i,FALSE,NULL),i) ; } # endif } } # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n added %d slack/surplus variables.",covered) ; } # endif return (covered) ; } static int ib_artifselect (void) /* This routine will populate the basis slots corresponding to equalities using the logical (artificial) variable for the equality. Parameters: none Returns: the number of basis slots filled */ { int i,m,covered ; contyp_enum *ctyp ; /* Walk the constraints, installing the logical for each inequality. */ m = dy_sys->concnt ; ctyp = dy_sys->ctyp ; covered = 0 ; for (i = 1 ; i <= dy_sys->concnt ; i++) { if (ctyp[i] == contypEQ && dy_basis[i] == 0) { dy_basis[i] = i ; dy_var2basis[i] = i ; covered++ ; # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t adding %s (%d)", consys_nme(dy_sys,'v',i,FALSE,NULL),i) ; dyio_outfmt(dy_logchn,dy_gtxecho," to cover %s (%d).", consys_nme(dy_sys,'c',i,FALSE,NULL),i) ; } # endif } } # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n added %d artificial variables.",covered) ; } # endif return (covered) ; } static bool ib_populatebasis (void) /* This routine is responsible for populating the basis (i.e., selecting basic variables for each basis position) using a mixture of architectural and logical variables. The type of basis is determined by the coldbasis option, as follows: ibLOGICAL: (logical) uses only logical variables (slacks and artificials). ibSLACK: (slack) uses slacks for inequalities, then covers as many equalities as possible with architecturals before falling back on artificials. ibARCH: (architectural) uses architecturals first, trying to cover equalities before inequalities, and falling back on logicals for uncovered positions. Parameters: none Returns: TRUE if a basis is built, FALSE if something goes wrong. */ { int m,basiscnt,archvcnt,slkcnt,artifcnt,iretval ; bool bretval ; ibrank_struct *archvars ; const char *rtnnme = "ib_populatebasis" ; # ifndef DYLP_NDEBUG int i,j ; # endif # ifdef DYLP_PARANOIA if (!(dy_opts->coldbasis >= ibLOGICAL && dy_opts->coldbasis <= ibARCH)) { errmsg(5,rtnnme,"initial basis type",dy_opts->coldbasis) ; return (FALSE) ; } # endif m = dy_sys->concnt ; # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 1) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n constructing ") ; switch (dy_opts->coldbasis) { case ibLOGICAL: { dyio_outfmt(dy_logchn,dy_gtxecho,"logical") ; break ; } case ibSLACK: { dyio_outfmt(dy_logchn,dy_gtxecho,"slack") ; break ; } case ibARCH: { dyio_outfmt(dy_logchn,dy_gtxecho,"architectural") ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } dyio_outfmt(dy_logchn,dy_gtxecho," basis for system %s, %d constraints.", dy_sys->nme,m) ; } # endif basiscnt = 0 ; /* Logical and slack basis types will use slacks to cover off inequalities. */ if (dy_opts->coldbasis == ibLOGICAL || dy_opts->coldbasis == ibSLACK) { slkcnt = ib_slackselect() ; basiscnt += slkcnt ; } /* Slack and architectural basis types will use architectural variables. For a slack basis, we're just trying to cover equalities before falling back on artificial variables. For an architectural basis, we're covering equalities and inequalities, scanning the columns in a way that will see equalities before inequalities (hence preferentially use architecturals to cover equalities). Start by sorting them into their respective classes by number of bounds, then ordering within classes by the rating described in the header. Exclude fixed variables from the two-bound group. A simple equality test is all we need, as dy_coldstart has already groomed the bounds. */ if (basiscnt < m && (dy_opts->coldbasis == ibSLACK || dy_opts->coldbasis == ibARCH)) { archvars = NULL ; bretval = ib_archvrank(&archvcnt,&archvars) ; if (bretval == FALSE) { errmsg(305,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "rank","architectural") ; if (archvars != NULL) FREE(archvars) ; return (FALSE) ; } iretval = ib_archvselect(archvcnt,archvars) ; if (archvars != NULL) FREE(archvars) ; if (iretval < 0) { errmsg(305,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters, "select","architectural") ; return (FALSE) ; } basiscnt += iretval ; } /* Use logicals for any uncovered inequalities in an architectural basis. */ if (basiscnt < m && dy_opts->coldbasis == ibARCH) { slkcnt = ib_slackselect() ; basiscnt += slkcnt ; } /* If we have uncovered equalities (and that's all that can remain, at this point), give in and use artificial variables. */ if (basiscnt < m) { artifcnt = ib_artifselect() ; basiscnt += artifcnt ; } # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\t Pos'n Variable Constraint") ; for (i = 1 ; i <= basiscnt ; i++) { j = dy_basis[i] ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t %3d (%3d) %-15s",i,j, consys_nme(dy_sys,'v',j,FALSE,NULL)) ; dyio_outfmt(dy_logchn,dy_gtxecho,"%-15s", consys_nme(dy_sys,'c',i,FALSE,NULL)) ; } } # endif /* And if we still have uncovered rows, there's something seriously wrong. */ if (basiscnt < m) { errmsg(301,rtnnme,basiscnt,m,dy_sys->nme) ; return (FALSE) ; } return (TRUE) ; } dyret_enum dy_crash (void) /* This routine coordinates the selection of an initial basis for an lp problem. The task of selecting a set of basic variables is hidden away in ib_populatebasis and subsidiary routines (see the comments at the head of this group of routines). What's visible here is the work associated with factoring the basis, establishing status, and calculating primal and dual variables and reduced costs. Parameters: dy_lp: lp problem dy_opts: lp algorithm options dy_tols: lp algorithm control and tolerances Returns: dyrOK if a basis is constructed; originates dyrFATAL on error, and can relay dyrNUMERIC, dyrBSPACE, and dyrSINGULAR originated by dy_factor. */ { int vndx ; double *vub,*vlb,*obj ; flags calcflgs ; dyret_enum retval ; const char *rtnnme = "dy_crash" ; extern void dy_setfinalstatus(void) ; /* dy_hotstart.c */ # ifndef DYLP_NDEBUG int cndx ; # endif # ifdef DYLP_PARANOIA if (dy_lp == NULL) { errmsg(2,rtnnme,"dy_lp") ; return (dyrFATAL) ; } if (dy_sys == NULL) { errmsg(2,rtnnme,"dy_sys") ; return (dyrFATAL) ; } if (dy_sys == NULL) { errmsg(2,rtnnme,consys_assocnme(dy_sys,CONSYS_MTX)) ; return (dyrFATAL) ; } if (dy_sys->vlb == NULL) { errmsg(2,rtnnme,consys_assocnme(dy_sys,CONSYS_VLB)) ; return (dyrFATAL) ; } if (dy_sys->obj == NULL) { errmsg(2,rtnnme,consys_assocnme(dy_sys,CONSYS_OBJ)) ; return (dyrFATAL) ; } if (dy_sys->ctyp == NULL) { errmsg(2,rtnnme,consys_assocnme(dy_sys,CONSYS_CTYP)) ; return (dyrFATAL) ; } if (flgoff(dy_sys->opts,CONSYS_LVARS)) { errmsg(311,rtnnme,dy_sys->nme) ; return (dyrFATAL) ; } if (dy_opts == NULL) { errmsg(2,rtnnme,"dy_opts") ; return (dyrFATAL) ; } if (dy_tols == NULL) { errmsg(2,rtnnme,"dy_tols") ; return (dyrFATAL) ; } # endif /* Unpack a few arrays we'll use frequently, and attach the basis and inverse basis vectors to the constraint system. consys_attach will initialise them to 0. */ obj = dy_sys->obj ; vlb = dy_sys->vlb ; vub = dy_sys->vub ; if (consys_attach(dy_sys,CONSYS_COL, sizeof(int),(void **) &dy_basis) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"basis vector") ; return (dyrFATAL) ; } if (consys_attach(dy_sys,CONSYS_ROW, sizeof(int),(void **) &dy_var2basis) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"inverse basis vector") ; return (dyrFATAL) ; } /* Populate the basis. */ if (ib_populatebasis() == FALSE) { errmsg(302,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters,"populate") ; return (dyrFATAL) ; } /* Factor the basis. We don't want any of the primal or dual variables calculated just yet. If this fails we're in deep trouble. */ if (dy_sys->concnt > 0) { # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 2) dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tfactoring ...") ; # endif calcflgs = 0 ; retval = dy_factor(&calcflgs) ; switch (retval) { case dyrOK: case dyrPATCHED: { break ; } default: { errmsg(309,rtnnme,dy_sys->nme) ; return (retval) ; } } } /* Attach and clear the vectors which will hold the status and values of variables, and the reduced cost. */ if (consys_attach(dy_sys,CONSYS_ROW, sizeof(flags),(void **) &dy_status) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"status vector") ; return (dyrFATAL) ; } if (consys_attach(dy_sys,CONSYS_COL, sizeof(double),(void **) &dy_xbasic) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"basic variable vector") ; return (dyrFATAL) ; } if (consys_attach(dy_sys,CONSYS_ROW, sizeof(double),(void **) &dy_x) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"primal variable vector") ; return (dyrFATAL) ; } if (consys_attach(dy_sys,CONSYS_COL, sizeof(double),(void **) &dy_y) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"dual variable vector") ; return (dyrFATAL) ; } if (consys_attach(dy_sys,CONSYS_ROW, sizeof(double),(void **) &dy_cbar) == FALSE) { errmsg(100,rtnnme,dy_sys->nme,"reduced cost vector") ; return (dyrFATAL) ; } /* Might as well work toward a dual feasible start. Calculate the duals, then the reduced costs, so we can make intelligent decisions about the status of the nonbasic variables. */ dy_calcduals() ; if (dy_calccbar() == FALSE) { errmsg(384,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; return (dyrFATAL) ; } /* For nonbasic variables, we have to decide the proper status, based on number of bounds and the sign of the reduced cost (we're minimising, remember). Once we know the status, we can set a value in dy_x. Nonbasic free variables are arbitrarily awarded a value of 0. For basic variables, if we can't say they're fixed or free, assume strictly between bounds until we calculate their initial values. We won't bother to set dy_x and dy_xbasic until we've done the calculation. */ # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 2) dyio_outfmt(dy_logchn,dy_gtxecho, "\n\testablishing initial status and reference frame ...") ; # endif for (vndx = 1 ; vndx <= dy_sys->varcnt ; vndx++) { if (dy_var2basis[vndx] != 0) { if (vlb[vndx] == vub[vndx]) { dy_status[vndx] = vstatBFX ; } else if (vlb[vndx] <= -dy_tols->inf && vub[vndx] >= dy_tols->inf) { dy_status[vndx] = vstatBFR ; } else { dy_status[vndx] = vstatB ; } } else { if (vlb[vndx] > -dy_tols->inf && vub[vndx] < dy_tols->inf) { if (vub[vndx] == vlb[vndx]) { dy_status[vndx] = vstatNBFX ; dy_x[vndx] = vub[vndx] ; } else if (dy_cbar[vndx] >= 0) { dy_status[vndx] = vstatNBLB ; dy_x[vndx] = vlb[vndx] ; } else { dy_status[vndx] = vstatNBUB ; dy_x[vndx] = vub[vndx] ; } } else if (vlb[vndx] > -dy_tols->inf) { dy_status[vndx] = vstatNBLB ; dy_x[vndx] = vlb[vndx] ; } else if (vub[vndx] < dy_tols->inf) { dy_status[vndx] = vstatNBUB ; dy_x[vndx] = vub[vndx] ; } else { dy_status[vndx] = vstatNBFR ; dy_x[vndx] = 0 ; } } # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 4) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\t %s (%d) %s", consys_nme(dy_sys,'v',vndx,FALSE,NULL),vndx, dy_prtvstat(dy_status[vndx])) ; if (flgon(dy_status[vndx],vstatNONBASIC|vstatNBFR)) dyio_outfmt(dy_logchn,dy_gtxecho," with value %g.",dy_x[vndx]) ; else dyio_outchr(dy_logchn,dy_gtxecho,'.') ; } # endif } /* Ok, status is set. Now it's time to calculate initial values for the basic variables and objective. Once we have values for the basic variables, see how bad it looks, in terms of primal infeasibility, and adjust the status for any that are pinned against a bound or out of bounds. */ # ifndef DYLP_NDEBUG if (dy_opts->print.crash >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n\tcalculating basic variable values ...") ; } # endif if (dy_calcprimals() == FALSE) { errmsg(316,rtnnme,dy_sys->nme) ; return (dyrFATAL) ; } dy_lp->z = dy_calcobj() ; dy_setfinalstatus() ; /* Make the check for primal and/or dual feasibility, and set the initial simplex phase accordingly. */ calcflgs = ladPRIMFEAS|ladPFQUIET|ladDUALFEAS|ladDFQUIET ; retval = dy_accchk(&calcflgs) ; if (retval != dyrOK) { errmsg(304,rtnnme,dy_sys->nme, dy_prtlpphase(dy_lp->phase,TRUE),dy_lp->tot.iters) ; return (retval) ; } if (flgoff(calcflgs,ladPRIMFEAS)) { dy_lp->simplex.next = dyPRIMAL2 ; } else if (flgoff(calcflgs,ladDUALFEAS)) { dy_lp->simplex.next = dyDUAL ; } else { dy_lp->simplex.next = dyPRIMAL1 ; } # ifndef DYLP_NDEBUG /* Some debug printing, to dump the initial basis & variables. */ if (dy_opts->print.crash >= 3) { dyio_outfmt(dy_logchn,dy_gtxecho, "\n Pos'n Constraint\tDual\tPrimal\t\t Status\tValue") ; for (cndx = 1 ; cndx <= dy_sys->concnt ; cndx++) { vndx = dy_basis[cndx] ; dyio_outfmt(dy_logchn,dy_gtxecho,"\n %4d %-13s%7g",cndx, consys_nme(dy_sys,'c',cndx,FALSE,NULL),dy_y[cndx]) ; dyio_outfmt(dy_logchn,dy_gtxecho," (%4d) %-13s %-7s %7g",vndx, consys_nme(dy_sys,'v',vndx,FALSE,NULL), dy_prtvstat(dy_status[vndx]),dy_x[vndx]) ; } } if (dy_opts->print.crash >= 2) { dyio_outfmt(dy_logchn,dy_gtxecho,"\n\tinitial objective %g",dy_lp->z) ; if (dy_lp->infeascnt != 0) { dyio_outfmt(dy_logchn,dy_gtxecho,", %d infeasible vars, infeas. = %g", dy_lp->infeascnt,dy_lp->infeas) ; } dyio_outfmt(dy_logchn,dy_gtxecho,", target simplex %s.", dy_prtlpphase(dy_lp->simplex.next,FALSE)) ; } # endif return (dyrOK) ; } DyLP-1.10.4/DyLP/src/Dylp/glplib2.c0000644000175200017520000001155111507440660015067 0ustar coincoin/* glplib2.c */ /*---------------------------------------------------------------------- -- Copyright (C) 2000, 2001, 2002 Andrew Makhorin , -- Department for Applied Informatics, Moscow Aviation -- Institute, Moscow, Russia. All rights reserved. -- -- This file is a part of GLPK (GNU Linear Programming Kit). -- -- Licensed under the Eclipse Public License (EPL) by permission of the -- author for inclusion in the DyLP LP distribution. ----------------------------------------------------------------------*/ #ifndef UNUSED # if defined(_GNU_SOURCE) || defined(__GNUC__) # define UNUSED __attribute__((unused)) # else # define UNUSED # endif #endif static char sccsid[] UNUSED = "@(#)glplib2.c 1.2 09/25/04" ; static char svnid[] UNUSED = "$Id: glplib2.c 407 2010-12-31 20:48:48Z lou $" ; #include #include #include #include "glplib.h" /*---------------------------------------------------------------------- -- init_lib_env - initialize library environment. -- -- *Synopsis* -- -- #include "glplib.h" -- int init_lib_env(void); -- -- *Description* -- -- The routine init_lib_env creates and initializes library environment -- block used by other low-level library routines. -- -- If it is neccessary, this routine is called automatically, therefore -- the user needn't to call it explicitly. -- -- *Returns* -- -- The routine returns one of the following error codes: -- -- 0 - no errors; -- 1 - the library environment has been already initialized; -- 2 - initialization failed. */ int init_lib_env(void) { ENV *env; /* obtain a pointer to the environmental block */ env = read_pointer(); /* check if the environment has been initialized */ if (env != NULL) return 1; /* allocate the environmental block */ env = malloc(sizeof(ENV)); /* check if the block has been successfully allocated */ if (env == NULL) return 2; /* initialize the environmental block */ env->mem_ptr = NULL; env->mem_limit = INT_MAX; env->mem_total = 0; env->mem_tpeak = 0; env->mem_count = 0; env->mem_cpeak = 0; /* save a pointer to the environmental block */ save_pointer(env); /* initialization completed */ return 0; } /*---------------------------------------------------------------------- -- get_env_ptr - obtain a pointer to the environmental block. -- -- *Synopsis* -- -- #include "glplib.h" -- ENV *get_env_ptr(void); -- -- *Description* -- -- The routine get_env_ptr obtains and returns a pointer to the library -- environmental block. -- -- If the library environment has not been initialized yet, the routine -- performs initialization. If initialization fails, the routine prints -- an error message to stderr and abnormally terminates the program. -- -- *Returns* -- -- The routine returns a pointer to the environmental block. */ ENV *get_env_ptr(void) { ENV *env; /* obtain a pointer to the environmental block */ env = read_pointer(); /* check if the environment has been initialized */ if (env == NULL) { /* not initialized yet; perform initialization */ if (init_lib_env() != 0) { /* initialization failed; print an error message */ fprintf(stderr, "\nget_env_ptr: initialization failed\n"); fflush(stderr); /* and abnormally terminate the program */ abort(); } /* initialization completed; obtain a pointer */ env = read_pointer(); } return env; } /*---------------------------------------------------------------------- -- free_lib_env - deinitialize library environment. -- -- *Synopsis* -- -- #include "glplib.h" -- int free_lib_env(void); -- -- *Description* -- -- The routine free_lib_env frees all resources (memory blocks, etc.), -- which was allocated by the library routines and which are currently -- still in use. -- -- The user needn't to call this routine until he wishes to explicitly -- free all the resources. -- -- *Returns* -- -- The routine returns one of the following codes: -- -- 0 - no errors; -- 1 - the library environment is inactive (not initialized); -- 2 - deinitialization completed, but the routine was unable to free -- some resources properly. */ int free_lib_env(void) { ENV *env; /* obtain a pointer to the environmental block */ env = read_pointer(); /* check if the environment has been initialized */ if (env == NULL) return 1; /* free memory blocks, which are still allocated */ while (env->mem_ptr != NULL) { MEM *this = env->mem_ptr; env->mem_ptr = this->next; free(this); } /* free memory allocated to the environmental block */ free(env); /* reset a pointer to the environmental block */ save_pointer(NULL); /* deinitialization completed */ return 0; } /* eof */ DyLP-1.10.4/DyLP/src/Dylp/dy_setup.c0000644000175200017520000005702011507440660015371 0ustar coincoin/* This file is a part of the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains routines to establish options and tolerances for the dylp package. */ #define DYLP_INTERNAL #include "dylp.h" static char sccsid[] UNUSED = "@(#)dy_setup.c 4.7 10/15/05" ; static char svnid[] UNUSED = "$Id: dy_setup.c 407 2010-12-31 20:48:48Z lou $" ; /* dyopts_dflt This structure holds the default values assigned prior to processing the user's option specifications. A value of -1 indicates that there is no default. Either we need to know more about the constraint system before choosing a default, or it's something only the user can tell us. The companion structures dyopts_lb and dyopts_ub give allowable ranges (where relevant) and are used to make sure the user doesn't give us nonsense values. They're sparsely populated -- it's not possible (or useful) to give bounds for a fair number of the values. An (r) indicates a recommended value -- the code will gripe about a violation, but won't enforce the limit. `Chvatal' is Chvatal, V., Linear Programming, W.H. Freeman, 1983. Some specific comments: scan: Controls the number of variables scanned when the incoming variable selected during PSE updating is rejected due to pivoting problems and we need to scan for alternates. iterlim: The value is set to 10000 <= 5*concnt in the absence of help from the user. Comments on pp. 45-46 of Chvatal indicate that 3*concnt should be sufficient for all but the worst problems. A value of 0 means no limit is enforced. idlelim: The value is set to 1000 <= 5*concnt <= 10000 in the absence of help from the user. (During dual simplex, it's enforced at 80% of that, since the dual doesn't have antidegeneracy installed.) factor: The default choice of 20 comes from the analysis on pp. 111 - 113 of Chvatal, "Linear Programming". The upper bound of 100 comes from a passing mention in the XMP documentation that factor > 100 shouldn't be used except for network problems. Given upgrades since the original version of the code, this should be relaxed, but I need to do some experiments to see just how far. check: Check actually defaults to factor/2, with an upper limit of factor. active.*: The value is for efficiency, not a limit. If it's too small, the dylp constraint system will have to do more expansions. 25% is a pure guess. I'll try and refine it with experience. print.*: The majority of the print controls are set to 0. The output is really only of interest if you're looking at some detail of the lp implementation. */ static lpopts_struct dyopts_dflt = { cxINITIALLP, /* context */ -1, /* scan */ -1, /* iterlim */ -1, /* idlelim */ { -1, /* dpsel.strat */ TRUE, /* dpsel.flex */ FALSE }, /* dpsel.allownopiv */ { 1 }, /* ppsel.strat */ 50, /* factor */ -1, /* check */ 1, /* groom */ { 1, /* con.actlvl */ 0, /* con.actlim */ 0 }, /* con.deactlvl */ 0, /* addvar */ 3, /* dualadd */ 5000, /* coldvars */ FALSE, /* forcecold */ FALSE, /* forcewarm */ TRUE, /* usedual */ TRUE, /* degen */ 1, /* degenpivlim */ 1, /* degenlite */ TRUE, /* patch */ FALSE, /* fullsys */ FALSE, /* copyorigsys */ 2, /* scaling */ { .25, /* active.vars */ .25 }, /* active.cons */ { .5, /* initcons.frac */ TRUE, /* initcons.i1lopen */ 90, /* initcons.i1l */ FALSE, /* initcons.i1uopen */ 180, /* initcons.i1u */ TRUE, /* initcons.i2valid */ FALSE, /* initcons.i2lopen */ 0, /* initcons.i2l */ TRUE, /* initcons.i2uopen */ 90 }, /* initcons.i2u */ ibLOGICAL, /* coldbasis */ { TRUE, /* finpurge.cons */ TRUE }, /* finpurge.vars */ { FALSE, /* heroics.d2p */ FALSE, /* heroics.p2d */ FALSE }, /* heroics.flips */ { 0, /* print.major */ 0, /* print.scaling */ 0, /* print.setup */ 0, /* print.crash */ 0, /* print.pricing */ 0, /* print.pivoting */ 0, /* print.pivreject */ 0, /* print.degen */ 1, /* print.phase1 */ 1, /* print.phase2 */ 1, /* print.dual */ 1, /* print.basis */ 0, /* print.conmgmt */ 0, /* print.varmgmt */ 1, /* print.force */ 0, /* print.tableau */ 0, /* print.rays */ 0 /* print.soln */ } } ; static lpopts_struct dyopts_lb = { cxSINGLELP, /* context */ 200, /* scan */ 0, /* iterlim */ 0, /* idlelim */ { 0, /* dpsel.strat */ FALSE, /* dpsel.flex */ FALSE }, /* dpsel.allownopiv */ { 0 }, /* ppsel.strat */ 1, /* factor */ 1, /* check */ 0, /* groom */ { 0, /* con.actlvl */ 0, /* con.actlim */ 0 }, /* con.deactlvl */ 0, /* addvar */ 0, /* dualadd */ 0, /* coldvars */ FALSE, /* forcecold */ FALSE, /* forcewarm */ FALSE, /* usedual */ FALSE, /* degen */ 0, /* degenpivlim */ 0, /* degenlite */ FALSE, /* patch */ FALSE, /* fullsys */ FALSE, /* copyorigsys */ 0, /* scaling */ { 0.0, /* active.vars */ 0.0 }, /* active.cons */ { 0.0, /* initcons.frac */ FALSE, /* initcons.i1lopen */ 0, /* initcons.i1l */ FALSE, /* initcons.i1uopen */ 0, /* initcons.i1u */ FALSE, /* initcons.i2valid */ FALSE, /* initcons.i2lopen */ 0, /* initcons.i2l */ FALSE, /* initcons.i2uopen */ 0 }, /* initcons.i2u */ ibLOGICAL, /* coldbasis */ { FALSE, /* finpurge.cons */ FALSE }, /* finpurge.vars */ { FALSE, /* heroics.d2p */ FALSE, /* heroics.p2d */ FALSE }, /* heroics.flips */ { 0, /* print.major */ 0, /* print.scaling */ 0, /* print.setup */ 0, /* print.crash */ 0, /* print.pricing */ 0, /* print.pivoting */ 0, /* print.pivreject */ 0, /* print.degen */ 0, /* print.phase1 */ 0, /* print.phase2 */ 0, /* print.dual */ 0, /* print.basis */ 0, /* print.conmgmt */ 0, /* print.varmgmt */ 0, /* print.force */ 0, /* print.tableau */ 0, /* print.rays */ 0 /* print.soln */ } } ; /* Roughly, MAXITERLIM = MAXINT/4, so we can set the overall iteration limit to 3*iterlim without getting into integer overflow. */ #define MAXITERLIM (int) (((unsigned) 1<<(sizeof(dyopts_ub.iterlim)*8-3))-1) static lpopts_struct dyopts_ub = { cxBANDC, /* context */ 1000, /* scan */ MAXITERLIM, /* iterlim */ MAXITERLIM, /* idlelim */ { 3, /* dpsel.strat */ TRUE, /* dpsel.flex */ TRUE }, /* dpsel.allownopiv */ { 1 }, /* ppsel.strat */ 100, /* factor (r) */ -1, /* check == factor */ 2, /* groom */ { 1, /* con.actlvl */ -1, /* con.actlim */ 2 }, /* con.deactlvl */ -1, /* addvar */ 3, /* dualadd */ 100000, /* coldvars (r) */ TRUE, /* forcecold */ TRUE, /* forcewarm */ TRUE, /* usedual */ TRUE, /* degen */ -1, /* degenpivlim */ 5, /* degenlite */ TRUE, /* patch */ TRUE, /* fullsys */ TRUE, /* copyorigsys */ 2, /* scaling */ { 1.0, /* active.vars */ 1.0 }, /* active.cons */ { 1.0, /* initcons.frac */ TRUE, /* initcons.i1lopen */ 180, /* initcons.i1l */ TRUE, /* initcons.i1uopen */ 180, /* initcons.i1u */ TRUE, /* initcons.i2valid */ TRUE, /* initcons.i2lopen */ 180, /* initcons.i2l */ TRUE, /* initcons.i2uopen */ 180 }, /* initcons.i2u */ ibARCH, /* coldbasis */ { TRUE, /* finpurge.cons */ TRUE }, /* finpurge.vars */ { TRUE, /* heroics.d2p */ TRUE, /* heroics.p2d */ TRUE }, /* heroics.flips */ { 1, /* print.major */ 2, /* print.scaling */ 5, /* print.setup */ 4, /* print.crash */ 3, /* print.pricing */ 5, /* print.pivoting */ 2, /* print.pivreject */ 5, /* print.degen */ 7, /* print.phase1 */ 7, /* print.phase2 */ 7, /* print.dual */ 5, /* print.basis */ 5, /* print.conmgmt */ 4, /* print.varmgmt */ 3, /* print.force */ 6, /* print.tableau */ 4, /* print.rays */ 4 /* print.soln */ } } ; /* dytols_dflt This structure holds the default values assigned prior to processing the user's tolerance specifications. Some specific comments: inf: Infinity. Dylp can work with either IEEE infinity or a `finite' infinity (most often, DBL_MAX). The default is HUGE_VAL, which will resolve to IEEE infinity in a Sun/Solaris environment. HUGE_VAL isn't always a compile-time constant, so we load it in dy_defaults. If the client code has a finite infinity, you surely want to pass this in to dylp. Otherwise, dylp will hand back IEEE infinity, and finite and infinite infinities do not play well together. zero: Defaults to 1.0e-11. Historically I've seen it between 1.0e-10 and 1.0e-12. A colleague offers the following rule of thumb: ``The zero tolerance should be the product of the machine accuracy and the largest number you expect to encounter during processing.'' Since the 64 bit IEEE floating point format has a 52 bit mantissa, the machine precision is 2^-52, or about 10^-15. 1.0e-11 is reasonable by this rule. pfeas: This value will be scaled by an amount proportional to the 1-norm of the basic variables, with a minimum value of zero. It's set to (pfeas_scale)*(zero tolerance) initially (right at the start of dylp), so that we have something that's valid when establishing the basis. pfeas_scale: Allows decoupling of pfeas from zero. Defaults to 10, but can be adjusted by the user. cost: The moral equivalent of 0 for things related to the objective function, reduced costs, dual variables, etc. Defaults to 1.0e-10. dfeas: This value will be scaled by an amount proportional to the 1-norm of the dual variables, with a minimum value of cost. There is no default held here. dfeas_scale: As pfeas_scale, for dfeas. pivot: This is the pivot acceptance tolerance, as a fraction of the pivot selection tolerance used by the basis package during factoring. Defaults to 1.0e-5. bogus: This multiplier is used to detect `bogus' values for reduced costs and variable values. Bogus values are values which exceed a zero tolerance but are less than bogus*tolerance. The idea is that, generally speaking, numbers close to a zero tolerance are problematic, and may well be the result of accumulated numerical inaccuracy. dylp attempts to nip this problem in the bud by watching for numbers such that tol < |val| < bogus*tol for reduced costs and variable values and requesting refactorisation when it sees one. Defaults to 1. Higher values prompt more refactoring. swing: When (new primal value)/(old primal value) > swing, dylp takes it as an indication that the problem needs more constraints (pseudo-unbounded). reframe: Multiplier used to trigger a PSE or DSE reference framework reset. The default is .1, based on the computational results reported for the primal simplex in Forrest & Goldfarb, "Steepest Edge Algorithms for Linear Programming", Mathematical Programming v.57, pp. 341--374, 1992. */ static lptols_struct dytols_dflt = { 0, /* inf = HUGE_VAL */ 1.0e-11, /* zero */ 1.0e-5, /* pchk */ -1, /* pfeas */ 100, /* pfeas_scale */ 1.0e-11, /* cost */ 1.0e-4, /* dchk */ -1, /* dfeas */ 100, /* dfeas_scale */ 1.0e-5, /* pivot */ 1, /* bogus */ 1.0e15, /* swing */ 1.0e30, /* toobig */ 1.0e-4, /* purge */ .5, /* purgevar */ .1 /* reframe */ } ; void dy_exposeOptDefaults (lpopts_struct **opts_lb, lpopts_struct **opts_dflt, lpopts_struct **opts_ub) /* The sole purpose of this routine is to allow other parts of the code to get hold of the defaults without exposing them as global variables. At present, used only by dy_options.c. */ { if (opts_lb != NULL) *opts_lb = &dyopts_lb ; if (opts_dflt != NULL) *opts_dflt = &dyopts_dflt ; if (opts_ub != NULL) *opts_ub = &dyopts_ub ; } void dy_exposeTolDefaults (lptols_struct **tols_dflt) /* As for dy_exposeOptDefaults --- make default tolerances available to the rest of the code. */ { if (tols_dflt != NULL) *tols_dflt = &dytols_dflt ; } void dy_defaults (lpopts_struct **opts, lptols_struct **tols) /* This routine loads the data structures supplied as parameters with default tolerances and options. Typically, a client calls this routine to establish base values, then tweaks the options and parameters as desired. Parameters: opts (i) lpopts structure; allocated if NULL (o) returns an lpopts structure tols (i) lptols structure ; allocated if NULL (o) returns an lptols structure Returns: undefined */ { # if defined(DYLP_PARANOIA) || MALLOC_DEBUG == 2 const char *rtnnme = "dy_defaults" ; if (opts == NULL) { errmsg(2,rtnnme,"&opts") ; return ; } if (tols == NULL) { errmsg(2,rtnnme,"&tols") ; return ; } # endif if (*opts == NULL) { (*opts) = (lpopts_struct *) MALLOC(sizeof(lpopts_struct)) ; } memcpy(*opts,&dyopts_dflt,sizeof(lpopts_struct)) ; if (*tols == NULL) { (*tols) = (lptols_struct *) MALLOC(sizeof(lptols_struct)) ; } memcpy(*tols,&dytols_dflt,sizeof(lptols_struct)) ; (*tols)->inf = HUGE_VAL ; return ; } void dy_checkdefaults (consys_struct *sys, lpopts_struct *opts, lptols_struct *tols) /* This routine looks over various option and tolerance settings with an eye toward setting or adjusting values based on the size of the constraint system or other options that might be set by the user. The default values here are, by and large, grossly larger than required. The more outrageous ones are motivated by the Netlib examples. Parameters: sys: a constraint system opts: an options structure; may be modified on return Returns: undefined */ { int scalefactor ; if (opts->check < 0) opts->check = opts->factor/2 ; if (opts->check <= 0) opts->check = 1 ; if (opts->scan < 0) { opts->scan = maxx(dyopts_lb.scan,sys->archvcnt/2) ; opts->scan = minn(opts->scan,dyopts_ub.scan) ; } if (opts->iterlim < 0) { opts->iterlim = minn(5*(sys->concnt+sys->varcnt),100000) ; opts->iterlim = maxx(opts->iterlim,10000) ; } if (opts->idlelim < 0) { opts->idlelim = minn(2*(sys->concnt+sys->varcnt),50000) ; opts->idlelim = maxx(opts->idlelim,1000) ; } if (opts->degenpivlim < 0) { opts->degenpivlim = minn(1000,sys->concnt/2) ; opts->degenpivlim = maxx(100,opts->degenpivlim) ; } /* If the user has specified a dual pivot strategy, observe it. If not, start with strategy 1 (max dual objective improvement). */ if (opts->dpsel.strat >= 0) { opts->dpsel.flex = FALSE ; } else { opts->dpsel.strat = 1 ; opts->dpsel.flex = TRUE ; } if (opts->fullsys == TRUE) { opts->active.vars = 1.0 ; opts->active.cons = 1.0 ; } /* Loosen the base primal and dual accuracy check values for larger systems, and put a little more distance between the zero tolerances and feasibility tolerances. */ scalefactor = ((int) (.5 + log10((double) sys->varcnt))) - 2 ; if (scalefactor > 0) { tols->pchk *= pow(10.0,(double) scalefactor) ; tols->pfeas_scale *= pow(10.0,(double) scalefactor) ; } scalefactor = ((int) (.5 + log10((double) sys->concnt))) - 2 ; if (scalefactor > 0) { tols->dchk *= pow(10.0,(double) scalefactor) ; tols->dfeas_scale *= pow(10.0,(double) scalefactor) ; } /* XX_DEBUG_XX There's no good way to control this print statement, given the timing and purpose of this call. But it's occasionally handy for debugging. dyio_outfmt(dy_logchn,TRUE,"\nPTOLS: pzero = %g, pscale = %g, pchk = %g", tols->zero,tols->pfeas_scale,tols->pchk) ; dyio_outfmt(dy_logchn,TRUE,"\nDTOLS: dzero = %g, dscale = %g, dchk = %g", tols->cost,tols->dfeas_scale,tols->dchk) ; */ return ; } void dy_setprintopts (int lvl, lpopts_struct *opts) /* This routine tweaks the lp print level options based on a single integer code. It's intended to allow clients of dylp to easily set up overall print levels. Just a big case statement. Level 0 forces dylp to shut up. Level 1 assumes the normal dylp defaults (phase1, phase2, dual, force, and basis print levels set to 1, which allows messages about extraordinary events). Levels 2 -- 5 provide increasing amounts of information. At level 1 and above, a specific setting of a dylp value to a higher value in the options structure passed in as a parameter will override the value here. Parameters: lvl: overall print level opts: options structure; for all except lvl = 0, should be preloaded with valid values for print options. Returns: undefined */ { if (lvl < 0) lvl = 0 ; switch (lvl) { case 0: { opts->print.major = 0 ; opts->print.scaling = 0 ; opts->print.setup = 0 ; opts->print.crash = 0 ; opts->print.pricing = 0 ; opts->print.pivoting = 0 ; opts->print.pivreject = 0 ; opts->print.degen = 0 ; opts->print.phase1 = 0 ; opts->print.phase2 = 0 ; opts->print.dual = 0 ; opts->print.basis = 0 ; opts->print.conmgmt = 0 ; opts->print.varmgmt = 0 ; opts->print.force = 0 ; opts->print.tableau = 0 ; opts->print.rays = 0 ; opts->print.soln = 0 ; break ; } case 1: { opts->print.major = maxx(opts->print.major,dyopts_dflt.print.major) ; opts->print.scaling = maxx(opts->print.scaling,dyopts_dflt.print.scaling) ; opts->print.setup = maxx(opts->print.setup,dyopts_dflt.print.setup) ; opts->print.crash = maxx(opts->print.crash,dyopts_dflt.print.crash) ; opts->print.pricing = maxx(opts->print.pricing, dyopts_dflt.print.pricing) ; opts->print.pivoting = maxx(opts->print.pivoting, dyopts_dflt.print.pivoting) ; opts->print.pivreject = maxx(opts->print.pivreject, dyopts_dflt.print.pivreject) ; opts->print.degen = maxx(opts->print.degen,dyopts_dflt.print.degen) ; opts->print.phase1 = maxx(opts->print.phase1,dyopts_dflt.print.phase1) ; opts->print.phase2 = maxx(opts->print.phase2,dyopts_dflt.print.phase2) ; opts->print.dual = maxx(opts->print.dual,dyopts_dflt.print.dual) ; opts->print.basis = maxx(opts->print.basis,dyopts_dflt.print.basis) ; opts->print.conmgmt = maxx(opts->print.conmgmt, dyopts_dflt.print.conmgmt) ; opts->print.varmgmt = maxx(opts->print.varmgmt, dyopts_dflt.print.varmgmt) ; opts->print.force = maxx(opts->print.force,dyopts_dflt.print.force) ; opts->print.tableau = maxx(opts->print.tableau, dyopts_dflt.print.tableau) ; opts->print.rays = maxx(opts->print.rays, dyopts_dflt.print.rays) ; opts->print.soln = maxx(opts->print.soln, dyopts_dflt.print.soln) ; break ; } case 2: { opts->print.major = maxx(opts->print.major,1) ; opts->print.scaling = maxx(opts->print.scaling,1) ; opts->print.setup = maxx(opts->print.setup,1) ; opts->print.crash = maxx(opts->print.crash,1) ; opts->print.pricing = maxx(opts->print.pricing,0) ; opts->print.pivoting = maxx(opts->print.pivoting,0) ; opts->print.pivreject = maxx(opts->print.pivreject,0) ; opts->print.degen = maxx(opts->print.degen,1) ; opts->print.phase1 = maxx(opts->print.phase1,1) ; opts->print.phase2 = maxx(opts->print.phase2,1) ; opts->print.dual = maxx(opts->print.dual,1) ; opts->print.basis = maxx(opts->print.basis,1) ; opts->print.conmgmt = maxx(opts->print.conmgmt,1) ; opts->print.varmgmt = maxx(opts->print.varmgmt,1) ; opts->print.force = maxx(opts->print.force,1) ; opts->print.tableau = maxx(opts->print.tableau,1) ; opts->print.rays = maxx(opts->print.rays,1) ; opts->print.soln = maxx(opts->print.soln,1) ; break ; } case 3: { opts->print.major = maxx(opts->print.major,1) ; opts->print.scaling = maxx(opts->print.scaling,2) ; opts->print.setup = maxx(opts->print.setup,2) ; opts->print.crash = maxx(opts->print.crash,2) ; opts->print.pricing = maxx(opts->print.pricing,0) ; opts->print.pivoting = maxx(opts->print.pivoting,0) ; opts->print.pivreject = maxx(opts->print.pivreject,0) ; opts->print.degen = maxx(opts->print.degen,1) ; opts->print.phase1 = maxx(opts->print.phase1,3) ; opts->print.phase2 = maxx(opts->print.phase2,3) ; opts->print.dual = maxx(opts->print.dual,3) ; opts->print.basis = maxx(opts->print.basis,2) ; opts->print.conmgmt = maxx(opts->print.conmgmt,2) ; opts->print.varmgmt = maxx(opts->print.varmgmt,2) ; opts->print.force = maxx(opts->print.force,1) ; opts->print.tableau = maxx(opts->print.tableau,1) ; opts->print.rays = maxx(opts->print.rays,1) ; opts->print.soln = maxx(opts->print.soln,1) ; break ; } case 4: { opts->print.major = maxx(opts->print.major,1) ; opts->print.scaling = maxx(opts->print.scaling,2) ; opts->print.setup = maxx(opts->print.setup,3) ; opts->print.crash = maxx(opts->print.crash,3) ; opts->print.pricing = maxx(opts->print.pricing,0) ; opts->print.pivoting = maxx(opts->print.pivoting,0) ; opts->print.pivreject = maxx(opts->print.pivreject,0) ; opts->print.degen = maxx(opts->print.degen,2) ; opts->print.phase1 = maxx(opts->print.phase1,4) ; opts->print.phase2 = maxx(opts->print.phase2,4) ; opts->print.dual = maxx(opts->print.dual,4) ; opts->print.basis = maxx(opts->print.basis,3) ; opts->print.conmgmt = maxx(opts->print.conmgmt,3) ; opts->print.varmgmt = maxx(opts->print.varmgmt,2) ; opts->print.force = maxx(opts->print.force,2) ; opts->print.tableau = maxx(opts->print.tableau,1) ; opts->print.rays = maxx(opts->print.rays,3) ; opts->print.soln = maxx(opts->print.soln,3) ; break ; } default: { opts->print.major = maxx(opts->print.major,1) ; opts->print.scaling = maxx(opts->print.scaling,2) ; opts->print.setup = maxx(opts->print.setup,5) ; opts->print.crash = maxx(opts->print.crash,4) ; opts->print.pricing = maxx(opts->print.pricing,1) ; opts->print.pivoting = maxx(opts->print.pivoting,1) ; opts->print.pivreject = maxx(opts->print.pivreject,1) ; opts->print.degen = maxx(opts->print.degen,2) ; opts->print.phase1 = maxx(opts->print.phase1,5) ; opts->print.phase2 = maxx(opts->print.phase2,5) ; opts->print.dual = maxx(opts->print.dual,5) ; opts->print.basis = maxx(opts->print.basis,5) ; opts->print.conmgmt = maxx(opts->print.conmgmt,3) ; opts->print.varmgmt = maxx(opts->print.varmgmt,2) ; opts->print.force = maxx(opts->print.force,3) ; opts->print.tableau = maxx(opts->print.tableau,4) ; opts->print.rays = maxx(opts->print.rays,4) ; opts->print.soln = maxx(opts->print.soln,4) ; break ; } } return ; } DyLP-1.10.4/DyLP/src/DylpStdLib/0000755000175200017520000000000013434203622014463 5ustar coincoinDyLP-1.10.4/DyLP/src/DylpStdLib/dylib_hash.h0000644000175200017520000000263311507440660016752 0ustar coincoin#ifndef _DYLIB_HASH_H #define _DYLIB_HASH_H /* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* Hash Table Structures */ /* In order that the hashing routines can be used for a number of different tables, they do not have any knowledge of the thing being hashed. All that is maintained is the association between a key and some generic object. @(#)hash.h 1.3 06/22/04 svn/cvs: $Id: dylib_hash.h 407 2010-12-31 20:48:48Z lou $ */ /* The basic hash table entry structure field description ----- ----------- next next entry at this bucket key hash key (character string) ent structure associated with this entry */ typedef struct hel_tag { struct hel_tag *next ; const char *key ; void *ent ; } hel ; /* Hash table interface routines */ extern void *dyhash_lookup(const char *key, hel *hashtab[], int size), *dyhash_search(const char *key, hel *hashtab[], int size, bool init), *dyhash_enter(const char *key, hel *hashtab[], int size, void *entry), *dyhash_erase(const char *key, hel *hashtab[], int size) ; #endif /* _DYLIB_HASH_H */ DyLP-1.10.4/DyLP/src/DylpStdLib/dylib_binsrch.c0000644000175200017520000000476311507440660017460 0ustar coincoin/* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ #include "dylib_std.h" static char sccsid[] UNUSED = "@(#)binsrch.c 1.4 09/25/04" ; static char svnid[] UNUSED = "$Id: dylib_binsrch.c 407 2010-12-31 20:48:48Z lou $" ; #include "dylib_strrtns.h" #include "dylib_keytab.h" int find (char *word, keytab_entry keytab[], int numkeys) /* Find looks up a word in a keyword table. It uses binary search and is insensitive to case. Parameters: word: pointer to the word to be looked up keytab: pointer to the array of keywords numkeys: length of the keyword table Return value: Normal token number associated with the keyword Otherwise -1 if the keyword cannot be found */ { int high,low,mid,place ; low = 0 ; high = numkeys-1 ; while (low <= high) { mid = (high+low)/2 ; place = cistrcmp(word,keytab[mid].keyword) ; switch (place) { case -1: high = mid-1 ; break ; case 0: return (keytab[mid].token) ; case 1: low = mid+1 ; break ; } } return (-1) ; } int ambig (char *word, keytab_entry keytab[], int numkeys) /* This routine looks up a word in a keyword table using a "shortest unique match" algorithm. If the minimum number of characters to be matched is greater than the length of the keyword, it's taken to be a request for an exact match (think of it as requiring the terminating '\0' to be matched). Parameters: word: word to be looked up keytab: array of keywords numkeys: length of the keyword array Returns: Normal: token number associated with the keyword Otherwise: -1 if the keyword cannot be found -2 if the keyword is ambiguous */ { int high,low,mid,place ; low = 0 ; high = numkeys-1 ; while (low <= high) { mid = (high+low)/2 ; place = cimstrcmp(word,keytab[mid].keyword) ; switch(place) { case -1: { high = mid-1 ; break ; } case 0: { if (((int) strlen(word)) < keytab[mid].min-1) return (-2) ; else if (((int) strlen(keytab[mid].keyword)) >= keytab[mid].min) return (keytab[mid].token) ; else if (strlen(keytab[mid].keyword) == strlen(word)) return (keytab[mid].token) ; } case 1: { low = mid+1 ; break ; } } } return (-1) ; } DyLP-1.10.4/DyLP/src/DylpStdLib/config_default.h0000644000175200017520000000573711613162250017617 0ustar coincoin /* include the COIN-OR-wide system specific configure header */ #include "configall_system.h" /* include the public project specific macros */ #include "config_dylp_default.h" /* Include float.h for _finite, _isnan */ #include /***************************************************************************/ /* HERE DEFINE THE PROJECT SPECIFIC MACROS */ /* These are only in effect in a setting that doesn't use configure */ /***************************************************************************/ /* Define to the debug sanity check level (0 is no test) */ #define COIN_DYLP_CHECKLEVEL 0 /* Define to the debug verbosity level (0 is no output) */ #define COIN_DYLP_VERBOSITY 0 /* But dylp was developed long before COIN came into being, so if you really want the paranoid checks, define DYLP_PARANOIA. The value isn't important. */ /* #define DYLP_PARANOIA 1 */ /* But dylp was developed long before COIN came into being, so if you want informational printing, DO NOT define DYLP_NDEBUG. The value isn't important. */ /* #undef DYLP_NDEBUG 1 */ /* Define this variable to enable dylp's statistics collection features. */ #define DYLP_STATISTICS 1 /* Set to the full path directory name for the location of the error text message file dy_errmsgs.txt. This file is distributed with dylp source and not normally installed elsewhere. An absolute path to DyLP/src/Dylp/ is appropriate. The string should end with a directory separator ("/" or "\", depending on your system). The surrounding quotes are part of the definition. There is no good default; the value given here will work from the test directory, on a windows system, which seems the most likely environment to be using this part of DylpConfig.h. */ #ifndef DYLP_ERRMSGDIR #define DYLP_ERRMSGDIR "..\\src\\Dylp\\" #endif /* Define this symbol if your system is `big-endian', i.e., the most significant byte of a multibyte quantity is stored in the lowest byte address. Intel x86 systems are little-endian. SPARC and Motorola are big-endian. */ /* #define WORDS_BIGENDIAN 1 */ /* Define this symbol if the quiet_nan function exists. This function should return the bit pattern for IEEE quiet NaN. */ /* #define DYLP_HAS_QUIET_NAN 1 */ /* Define to be the name of the C function used to check that an IEEE floating point value is finite. Common possibilities are finite, _finite, and isfinite. _finite is correct for MSVC, which is the most likely place for this to be used. */ #define DYLP_ISFINITE _finite /* Define to be the name of the C function used to check that an IEEE floating point value is NaN. Common possibilities are isnan and _isnan. _isnan for MSVC, as per _finite. */ #define DYLP_ISNAN _isnan /* Define to 1 if sunmath.h exists. As you might guess, define this only on a Sun/Solaris system. And really, if you're building on Sun, why are you using this part of the configuration file? Run configure! */ /* #define HAVE_SUNMATH_H 1 */ DyLP-1.10.4/DyLP/src/DylpStdLib/config.h.in0000644000175200017520000001003611573762145016522 0ustar coincoin/* src/DylpStdLib/config.h.in. Generated from configure.ac by autoheader. */ /* Define to the C type whose size in bytes matches the size in bytes of the the C++ bool type. */ #undef BOOL /* Define to the debug sanity check level (0 is no test) */ #undef COIN_DYLP_CHECKLEVEL /* Define to the debug verbosity level (0 is no output) */ #undef COIN_DYLP_VERBOSITY /* Define to 1 if the CoinUtils package is available */ #undef COIN_HAS_COINUTILS /* Define to 1 if the Netlib package is available */ #undef COIN_HAS_NETLIB /* Define to 1 if the Osi package is available */ #undef COIN_HAS_OSI /* Define to 1 if the OsiTests package is available */ #undef COIN_HAS_OSITESTS /* Define to 1 if the Sample package is available */ #undef COIN_HAS_SAMPLE /* Directory containing the DyLP error message text file (dy_errmsgs.txt). Should be set to /absolute/path/to/srcdir/DyLP/src/Dylp, using native path syntax (i.e., drive letters and backslashes on Windows). */ #undef DYLP_ERRMSGDIR /* Define this symbol if the quiet_nan function exists. This function should return the bit pattern for IEEE quiet NaN. */ #undef DYLP_HAS_QUIET_NAN /* Define to be the name of the C function used to check that an IEEE floating point value is finite. */ #undef DYLP_ISFINITE /* Define to be the name of the C function used to check that an IEEE floating point value is NaN. */ #undef DYLP_ISNAN /* Define this variable to disable dylp's informational printing features. */ #undef DYLP_NDEBUG /* Define this variable to enable dylp's paranoid checks. */ #undef DYLP_PARANOIA /* Define this variable to enable dylp's statistics collection features. */ #undef DYLP_STATISTICS /* SVN revision number of project */ #undef DYLP_SVN_REV /* Version number of project */ #undef DYLP_VERSION /* Major Version number of project */ #undef DYLP_VERSION_MAJOR /* Minor Version number of project */ #undef DYLP_VERSION_MINOR /* Release Version number of project */ #undef DYLP_VERSION_RELEASE /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if float.h exists. */ #undef HAVE_FLOAT_H /* Define to 1 if ieeefp.h exists. */ #undef HAVE_IEEEFP_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if math.h exists. */ #undef HAVE_MATH_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_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_STDLIB_H /* 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 sunmath.h exists. */ #undef HAVE_SUNMATH_H /* 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_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define this variable to enable OsiDylp's informational printing features. */ #undef ODSI_INFOMSGS /* Control OsiDylp's paranoid checks. Legal values: 0 - off; 1 - normal; 2 - consistency (expensive) */ #undef ODSI_PARANOIA /* Define this variable to enable support for dylp's statistics collection features. */ #undef ODSI_STATISTICS /* 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 version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ #undef WORDS_BIGENDIAN DyLP-1.10.4/DyLP/src/DylpStdLib/dylib_std.h0000644000175200017520000001415411507440660016622 0ustar coincoin#ifndef _DYLIB_STD_H #define _DYLIB_STD_H /* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* @(#)dylib_std.h 1.5 09/25/04 svn/cvs: $Id: dylib_std.h 407 2010-12-31 20:48:48Z lou $ */ /* This file contains common definitions. First thing to do is haul in the Ansi C standard definitions. Takes care of NULL plus a few more obscure definitions. Also haul in the standard library declarations. */ #include #include #include "DylpConfig.h" /* A utility definition which allows for easy suppression of unused variable warnings from GCC. Useful when a variable is used only for assert() statements, and for sccsid/cvsid strings. */ #ifndef UNUSED # if defined(_GNU_SOURCE) || defined(__GNUC__) # define UNUSED __attribute__((unused)) # else # define UNUSED # endif #endif /* Memory copy functions --- memcpy, memset, and other less common ones. */ #include /* We need a boolean type. Never could understand why C doesn't have this. [Aug 10, 01] For compatibility with C++, TRUE and FALSE are defined to be the corresponding C++ values. BOOL should be set in the compiler command line to be the storage type (char/short/int/long) that matches the size of a C++ "bool". */ #ifndef __cplusplus #define FALSE 0 #define TRUE 1 # ifdef BOOL typedef BOOL bool ; # else /* You're in trouble. Normally a definition for BOOL is determined by the configure script; apparently you're outside of whatever framework should do this. If you're not worried about C++ compatibility, int is a good a choice as anything. If you're concerned about C++ compatibility, write a small C++ program that prints out sizeof(bool) and add the definition here. */ # warning The compile-time symbol BOOL is not defined (dylib_std.h) typedef int bool ; # endif #endif #ifdef __cplusplus #ifndef FALSE # define FALSE false #endif #ifndef TRUE # define TRUE true #endif #endif /* flags is used to indicate a data type composed of one-bit flags. Manipulated with the set of flag manipulation macros defined below. */ typedef unsigned int flags ; #define setflg(zz_flgs,zz_flg) ((zz_flgs) |= (zz_flg)) #define clrflg(zz_flgs,zz_flg) ((zz_flgs) &= ~(zz_flg)) #define comflg(zz_flgs,zz_flg) ((zz_flgs) ^= (zz_flg)) #define getflg(zz_flgs,zz_flg) ((zz_flgs)&(zz_flg)) #define flgon(zz_flgs,zz_flg) ((zz_flgs)&(zz_flg)?TRUE:FALSE) #define flgoff(zz_flgs,zz_flg) ((zz_flgs)&(zz_flg)?FALSE:TRUE) #define flgall(zz_flgs,zz_flg) ((((zz_flgs)&(zz_flg)) == (zz_flg))?TRUE:FALSE) /* lnk_struct is a general-purpose linked list structure. Field Description ----- ----------- llnxt pointer to the next list element llval pointer to the associated value */ typedef struct lnk_struct_tag { struct lnk_struct_tag *llnxt ; void *llval ; } lnk_struct ; #define lnk_in(qqlnk,qqval) ((qqlnk)->llval = (void *) (qqval)) #define lnk_out(qqlnk,qqtype) ((qqtype) (qqlnk)->llval) /* Max and min macros */ #define minn(qa,qb) (((qa) > (qb))?(qb):(qa)) #define maxx(qa,qb) (((qa) > (qb))?(qa):(qb)) /* Some macros to hide the memory allocation functions. The serious debugging versions of these macros (MALLOC_DEBUG = 2) use outfmt from the io library and assume the existence of a string, rtnnme (typically the name of the current subroutine) that's used to identify the origin of the message. There's enough information in the messages to track the allocation and deallocation of blocks, should you not have access to an interactive debugger with this capability. The casual debugging versions (MALLOC_DEBUG = 1) only check for a return value of 0 and print a message to stderr with the file and line number. This at least tells you when your code has core dumped because it ran out of space (as opposed to a bug you can actually fix). */ #if (MALLOC_DEBUG == 2) #include "dylib_io.h" void *zz_ptr_zz ; ioid zz_chn_zz ; #define MALLOC_DBG_INIT(chn) ( zz_chn_zz = chn ) #define MALLOC(zz_sze_zz) \ ( zz_ptr_zz = (void *) malloc(zz_sze_zz), \ dyio_outfmt(zz_chn_zz,FALSE,":malloc: %d bytes at %#08x in %s.\n", \ zz_sze_zz,zz_ptr_zz,rtnnme), \ zz_ptr_zz ) #define CALLOC(zz_cnt_zz,zz_sze_zz) \ ( zz_ptr_zz = (void *) calloc(zz_cnt_zz,zz_sze_zz), \ dyio_outfmt(zz_chn_zz,FALSE,":calloc: %d (%d*%d) bytes at %#08x in %s.\n", \ zz_cnt_zz*zz_sze_zz,zz_cnt_zz,zz_sze_zz,zz_ptr_zz,rtnnme), \ zz_ptr_zz ) #define REALLOC(zz_rptr_zz,zz_sze_zz) \ ( zz_ptr_zz = (void *) realloc(zz_rptr_zz,zz_sze_zz), \ dyio_outfmt(zz_chn_zz,FALSE, \ ":realloc: %#08x changed to %d bytes at %#08x in %s.\n", \ zz_rptr_zz,zz_sze_zz,zz_ptr_zz,rtnnme), \ zz_ptr_zz ) #define FREE(zz_fptr_zz) \ ( dyio_outfmt(zz_chn_zz,FALSE,":free: %#08x in %s.\n",zz_fptr_zz,rtnnme), \ free((void *) zz_fptr_zz) ) #elif (MALLOC_DEBUG == 1) #include void *zz_ptr_zz ; #define MALLOC(zz_sze_zz) \ ( zz_ptr_zz = (void *) malloc(zz_sze_zz), \ (zz_ptr_zz != 0)?0:\ fprintf(stderr,":malloc: failed to get %d bytes at %s:%d.\n", \ zz_sze_zz,__FILE__,__LINE__), \ zz_ptr_zz ) #define CALLOC(zz_cnt_zz,zz_sze_zz) \ ( zz_ptr_zz = (void *) calloc(zz_cnt_zz,zz_sze_zz), \ (zz_ptr_zz != 0)?0:\ fprintf(stderr,":calloc: failed to get %d bytes at %s:%d.\n", \ zz_sze_zz*zz_cnt_zz,__FILE__,__LINE__), \ zz_ptr_zz ) #define REALLOC(zz_rptr_zz,zz_sze_zz) \ ( zz_ptr_zz = (void *) realloc(zz_rptr_zz,zz_sze_zz), \ (zz_ptr_zz != 0)?0:\ fprintf(stderr,":realloc: failed to get %d bytes at %s:%d.\n", \ zz_sze_zz,__FILE__,__LINE__), \ zz_ptr_zz ) #define FREE(zz_fptr_zz) free((void *) zz_fptr_zz) #else #define MALLOC_DBG_INIT(chn) #define MALLOC(zz_sze_zz) malloc(zz_sze_zz) #define CALLOC(zz_cnt_zz,zz_sze_zz) calloc(zz_cnt_zz,zz_sze_zz) #define REALLOC(zz_rptr_zz,zz_sze_zz) realloc(zz_rptr_zz,zz_sze_zz) #define FREE(zz_fptr_zz) free((void *) zz_fptr_zz) #endif #endif /* _DYLIB_STD_H */ DyLP-1.10.4/DyLP/src/DylpStdLib/Makefile.am0000644000175200017520000000352211573762145016535 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 491 2006-05-19 20:37:52Z andreasw $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # libDylpStdLib # ######################################################################## # Name of the library compiled in this directory. We don't want it to be # installed since it will be included in the libDylp library noinst_LTLIBRARIES = libDylpStdLib.la # List all source files for this library, including headers libDylpStdLib_la_SOURCES = \ DylpConfig.h \ dylib_binsrch.c \ dylib_bnfrdr.c dylib_bnfrdr.h \ dylib_bnfrdrio.c \ dylib_errs.c dylib_errs.h \ dylib_fortran.h \ dylib_hash.c dylib_hash.h \ dylib_io.c dylib_io.h \ dylib_keytab.h \ dylib_littab.c \ dylib_std.h \ dylib_strrtns.c dylib_strrtns.h # This is for libtool libDylpStdLib_la_LDFLAGS = $(LT_LDFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ dylib_errs.h \ dylib_hash.h \ dylib_io.h \ dylib_std.h \ dylib_strrtns.h install-exec-local: $(install_sh_DATA) config_dylp.h $(DESTDIR)$(includecoindir)/DylpConfig.h uninstall-local: rm -f $(DESTDIR)$(includecoindir)/DylpConfig.h DyLP-1.10.4/DyLP/src/DylpStdLib/dylib_bnfrdrio.c0000644000175200017520000003261111507440660017626 0ustar coincoin/* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This module contains utility print routines which will dump a bnf data structure in a (more-or-less) human readable format. */ #include "dylib_std.h" static char sccsid[] UNUSED = "@(#)bnfrdrio.c 2.3 09/25/04" ; static char svnid[] UNUSED = "$Id: dylib_bnfrdrio.c 407 2010-12-31 20:48:48Z lou $" ; #include "dylib_io.h" #include "dylib_bnfrdr.h" static const char *prtbnftype (bnftype_enum type) /* This routine returns a pointer to the string representation of the bnf type. Parameter: type: a bnf type Returns: string representation. */ { static char badtype[30] ; int fldsze ; switch (type) { case bnfG: return ("G") ; case bnfNP: return ("NP") ; case bnfP: return ("P") ; case bnfT: return ("T") ; case bnfDS: return ("DF") ; case bnfDL: return ("DB") ; case bnfRS: return ("RF") ; case bnfRL: return ("RB") ; case bnfI: return ("I") ; case bnfL: return ("L") ; default: { fldsze = sizeof(badtype)-1 ; dyio_outfxd(badtype,-fldsze,'l',"bad bnf type (%d)",type) ; return (badtype) ; } } } static const char *prtbnfttype (bnfttype_enum ttype) /* This routine returns a pointer to the string representation of the terminal type. Parameter: ttype: a terminal type Returns: string representation. */ { static char badtype[40] ; int fldsze ; switch (ttype) { case bnfttNIL: return ("NIL") ; case bnfttN: return ("N") ; case bnfttID: return ("ID") ; case bnfttD: return ("D") ; case bnfttF: return ("F") ; case bnfttQ: return ("Q") ; default: { fldsze = sizeof(badtype)-1 ; dyio_outfxd(badtype,-fldsze,'l',"bad terminal type (%d)",ttype) ; return (badtype) ; } } } /* prtdefname and prtrefname are basically identical, but we need two to avoid playing yet more games with unions and casts. A null def or ref parameter is an error, and a null name field is most likely an error (indicating incorrect initialisation or overwriting of the structure), but valid strings are returned in both cases. */ static void prtdefname (ioid chn, bool echo, bnfdef_struct *def) /* Parameters: chn: stream id from openfile. echo: TRUE to echo to stdout def: a bnf reference Returns: undefined */ { if (def == NULL) dyio_outfmt(chn,echo,"<>") ; else if (def->name == NULL) dyio_outfmt(chn,echo,"unnamed(%#08x)",def) ; else dyio_outfmt(chn,echo,"%s",def->name) ; return ; } static void prtrefname (ioid chn, bool echo, bnfref_struct *ref) /* Parameters: chn: stream id from openfile. echo: TRUE to echo to stdout ref: a bnf reference Returns: undefined */ { if (ref == NULL) dyio_outfmt(chn,echo,"<>") ; else if (ref->name == NULL) dyio_outfmt(chn,echo,"unnamed(%#08x)",ref) ; else dyio_outfmt(chn,echo,"%s",ref->name) ; return ; } static void prtstring (ioid chn, bool echo, const char *string) /* This routine prints a text string, or * if the string is null. Parameters: chn: stream id from openfile. echo: TRUE to echo to stdout string: text string Returns: undefined */ { if (string != NULL) dyio_outfmt(chn,echo,"\"%s\"",string) ; else dyio_outchr(chn,echo,'*') ; } static void prtstore (ioid chn, bool echo, bnfref_any ref) /* This routine prints the storage directions in a bnf reference. Parameters: chn: stream id from openfile. ref: a bnf reference Returns: undefined */ { if (flgon(ref.t2->uflgs,bnfstore) == TRUE || ref.t2->type == bnfI) { if (flgon(ref.t2->uflgs,bnfatsgn) == TRUE) dyio_outchr(chn,echo,'@') ; dyio_outfmt(chn,echo,"%d",ref.t2->offset) ; } else dyio_outchr(chn,echo,'*') ; } static void prtlst (ioid chn, bool echo, struct bnfref_type3 *ref) /* This routine prints the list information in a bnf reference. Parameter: chn: stream id from openfile. ref: a bnf reference Returns: undefined */ { if (flgon(ref->uflgs,bnflst) == TRUE) { if (flgon(ref->uflgs,bnfstbg) == TRUE) dyio_outchr(chn,echo,'@') ; prtrefname(chn,echo,(bnfref_struct *) ref) ; } else dyio_outchr(chn,echo,'*') ; } static void prtlbl (ioid chn, bool echo, bnflblsrc_enum code, bnfref_struct *src) /* This routine prints the information in the code and src fields of a label definition. Parameters: chn: stream id from openfile code: value of nmcd or ndcd field. src: value of nmsrc or ndsrc field. Returns: undefined */ { switch (code) { case bnfncBNF: { prtrefname(chn,echo,src) ; break ; } case bnfncS: { dyio_outfmt(chn,echo,"%%%d",addrToInt(src)) ; break ; } case bnfncC: { dyio_outchr(chn,echo,'c') ; break ; } case bnfncN: { dyio_outchr(chn,echo,'n') ; break ; } default: { dyio_outfmt(chn,echo,"invalid! (%d)",code) ; break ; } } } static void prtlblsav (ioid chn, bool echo, int flg, bnfLBdef_struct *def) /* This routine prints the save information for a label definition. Parameters: chn: stream id from openfile. flg: either bnfsvnd or bnfsvnm. def: a label definition Returns: undefined */ { if (flgon(def->dflgs,flg) == TRUE) switch (flg) { case bnfsvnd: { dyio_outfmt(chn,echo,"%%%d",def->savnd) ; break ; } case bnfsvnm: { dyio_outfmt(chn,echo,"%%%d",def->savnm) ; break ; } } else dyio_outchr(chn,echo,'*') ; } void prtbnfref (ioid chn, bool echo, bnfref_struct *bnfref) /* This routine prints a bnf reference data structure in a (sort of) human readable format. Parameters: chn: stream id, obtained from openfile. ref: bnf reference. Returns: undefined */ { bnfref_any ref ; /* Check that ref is non-null - print if it isn't. */ ref.com = bnfref ; if (ref.com == NULL) { dyio_outfmt(chn,echo,"") ; return ; } /* Print the basics: type, name, and name of associated definition. */ dyio_outfmt(chn,echo,"<%s,",prtbnftype(ref.com->type)) ; prtrefname(chn,echo,ref.com) ; dyio_outfmt(chn,echo,"->") ; prtdefname(chn,echo,ref.com->defn) ; /* And flesh out with the remainder of the type-specific information. */ switch (ref.com->type) { case bnfG: { dyio_outchr(chn,echo,',') ; prtstore(chn,echo,ref) ; dyio_outchr(chn,echo,',') ; prtlst(chn,echo,ref.t3) ; break ; } case bnfNP: { dyio_outchr(chn,echo,',') ; prtlst(chn,echo,ref.t3) ; break ; } case bnfP: { dyio_outchr(chn,echo,',') ; if (flgon(ref.P->uflgs,bnfsv) == TRUE) dyio_outfmt(chn,echo,"%%%d",ref.P->offset) ; else prtstore(chn,echo,ref) ; dyio_outchr(chn,echo,',') ; prtlst(chn,echo,ref.t3) ; break ; } case bnfT: { dyio_outchr(chn,echo,',') ; if (flgon(ref.T->uflgs,bnfflt) == TRUE) dyio_outfmt(chn,echo,"flt,") ; if (flgon(ref.T->uflgs,bnfdbl) == TRUE) dyio_outfmt(chn,echo,"dbl,") ; if (flgon(ref.T->uflgs,bnfcs) == TRUE) dyio_outfmt(chn,echo,"cs,") ; if (flgon(ref.T->uflgs,bnfmin) == TRUE) dyio_outfmt(chn,echo,"min,") ; if (flgon(ref.T->uflgs,bnfexact) == TRUE) dyio_outfmt(chn,echo,"exact,") ; prtstore(chn,echo,ref) ; break ; } case bnfI: { dyio_outchr(chn,echo,',') ; prtstore(chn,echo,ref) ; break ; } case bnfDS: case bnfDL: case bnfRS: case bnfRL: case bnfL: { break ; } default: { break ; } } dyio_outchr(chn,echo,'>') ; } void prtbnfdef (ioid chn, bool echo, bnfdef_struct *bnfdef) /* This routine prints a bnf definition in (sort of) human readable format. Parameters: chn: stream id as returned from openfile def: a bnf definition Returns: undefined */ { bnfdef_any def ; bnfref_struct ***altrefs,**comprefs ; int altnum,altndx,compnum,compndx ; const char *txm1 = "|\n\t" ; /* Suppress compiler warning. */ comprefs = NULL ; /* Check that bnfdef is non-null - print if it isn't. */ def.com = bnfdef ; if (def.com == NULL) { dyio_outfmt(chn,echo,"") ; return ; } /* Print the definition header first: type and name. */ dyio_outfmt(chn,echo,"\n<%s,",prtbnftype(def.com->type)) ; prtdefname(chn,echo,def.com) ; if (def.com->type == bnfG) { dyio_outfmt(chn,echo,",%d,",def.G->size) ; if (def.G->link >= 0) dyio_outfmt(chn,echo,"%d",def.G->link) ; else dyio_outchr(chn,echo,'*') ; } dyio_outfmt(chn,echo,"> ::= ") ; /* And now the body of the definition. */ switch (def.com->type) { case bnfG: { comprefs = def.G->comps ; if (comprefs != NULL) compnum = addrToInt(*comprefs++) ; else compnum = 0 ; for (compndx = 0 ; compndx < compnum ; compndx++) prtbnfref(chn,echo,*comprefs++) ; break ; } case bnfNP: { altrefs = def.NP->alts ; if (altrefs != NULL) { altnum = addrToInt(*altrefs++) ; comprefs = *altrefs++ ; } else altnum = 0 ; for (altndx = 0 ; altndx < altnum ; altndx++, comprefs = *altrefs++) { if (comprefs != NULL) { compnum = addrToInt(*comprefs++) ; for (compndx = 0 ; compndx < compnum ; compndx++) prtbnfref(chn,echo,*comprefs++) ; } else dyio_outfmt(chn,echo,"",altndx+1) ; if (altndx < altnum-1) dyio_outfmt(chn,echo,txm1) ; } break ; } case bnfP: { altrefs = def.P->alts ; if (altrefs != NULL) { altnum = addrToInt(*altrefs++) ; comprefs = *altrefs++ ; } else altnum = 0 ; for (altndx = 0 ; altndx < altnum ; altndx++, comprefs = *altrefs++) { if (comprefs != NULL) { compnum = addrToInt(*comprefs++) ; for (compndx = 0 ; compndx < compnum ; compndx++) prtbnfref(chn,echo,*comprefs++) ; } else dyio_outfmt(chn,echo,"",altndx+1) ; if (altndx < altnum-1) dyio_outfmt(chn,echo,txm1) ; } break ; } case bnfT: { dyio_outfmt(chn,echo,"<%s",prtbnfttype(def.T->ttype)) ; switch (def.T->ttype) { case bnfttNIL: { break ; } case bnfttN: { dyio_outfmt(chn,echo,"(%d),",def.T->parm1) ; prtstring(chn,echo,def.T->val) ; break ; } case bnfttID: { prtstring(chn,echo,def.T->val) ; break ; } case bnfttD: { prtstring(chn,echo,def.T->val) ; break ; } case bnfttF: { dyio_outfmt(chn,echo,"(%d),",def.T->parm1) ; prtstring(chn,echo,def.T->val) ; break ; } case bnfttQ: { dyio_outchr(chn,echo,'(') ; if (def.T->qschr < ' ') dyio_outfmt(chn,echo,"%#02x",def.T->qschr) ; else dyio_outchr(chn,echo,def.T->qschr) ; dyio_outchr(chn,echo,',') ; if (def.T->qechr < ' ') dyio_outfmt(chn,echo,"%#02x",def.T->qechr) ; else dyio_outchr(chn,echo,def.T->qechr) ; dyio_outfmt(chn,echo,"),") ; prtstring(chn,echo,def.T->val) ; break ; } } dyio_outchr(chn,echo,'>') ; break ; } case bnfDS: case bnfDL: { dyio_outchr(chn,echo,'<') ; if (flgon(def.LB->dflgs,bnfadv) == TRUE) dyio_outfmt(chn,echo,"a,") ; else dyio_outfmt(chn,echo,"b,") ; prtlbl(chn,echo,def.LB->nmcd,def.LB->nmsrc) ; dyio_outchr(chn,echo,',') ; prtlblsav(chn,echo,bnfsvnm,def.LB) ; dyio_outchr(chn,echo,',') ; prtlbl(chn,echo,def.LB->ndcd,def.LB->ndsrc) ; dyio_outfmt(chn,echo,"(%d)",def.LB->offset) ; dyio_outchr(chn,echo,',') ; prtlblsav(chn,echo,bnfsvnd,def.LB) ; dyio_outchr(chn,echo,'>') ; break ; } case bnfRS: case bnfRL: { dyio_outchr(chn,echo,'<') ; if (flgon(def.LB->dflgs,bnfadv) == TRUE) dyio_outfmt(chn,echo,"a,") ; else dyio_outfmt(chn,echo,"b,") ; prtlbl(chn,echo,def.LB->nmcd,def.LB->nmsrc) ; dyio_outfmt(chn,echo,"(%d)",def.LB->offset) ; dyio_outchr(chn,echo,',') ; prtlblsav(chn,echo,bnfsvnm,def.LB) ; dyio_outchr(chn,echo,',') ; prtlbl(chn,echo,def.LB->ndcd,def.LB->ndsrc) ; dyio_outfmt(chn,echo,"(%d)",def.LB->offset2) ; dyio_outchr(chn,echo,',') ; prtlblsav(chn,echo,bnfsvnd,def.LB) ; dyio_outchr(chn,echo,'>') ; break ; } case bnfI: { dyio_outfmt(chn,echo,"<%d>",def.I->ival) ; break ; } case bnfL: { dyio_outchr(chn,echo,'<') ; if (flgon(def.L->dflgs,bnfsvnm) == TRUE) dyio_outfmt(chn,echo,"%%%d",addrToInt(def.L->txt)) ; else prtstring(chn,echo,def.L->txt) ; dyio_outchr(chn,echo,'>') ; break ; } } } #ifndef DYLP_NDEBUG void printtab (ioid chn, bool echo, int nestlvl, bool numlvl, bool tablvl) /* Utility routine to print optional line numbers and tab leadering for debugging trace lines. Parameters: chn: i/o id for trace output echo: TRUE to echo trace to stdout nestlvl: nesting level of the trace line numlvl: TRUE to print the nesting level at the left of the line tablvl: TRUE to show nesting level with indentation */ { int tabcnt ; if (numlvl == TRUE) { dyio_outfmt(chn,echo,"%2d: ",nestlvl) ; nestlvl-- ; } /* Change the field with in the dyio_outfmt statement to change the amount of indentation per level. */ if (tablvl == TRUE) { for (tabcnt = nestlvl ; tabcnt > 0 ; tabcnt--) { dyio_outfmt(chn,echo,"%4s"," ") ; } } return ; } #endif /* DYLP_NDEBUG */ DyLP-1.10.4/DyLP/src/DylpStdLib/dylib_io.c0000644000175200017520000016253511507440660016441 0ustar coincoin/* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains a basic i/o package, designed to isolate the client program from ANSI C file i/o primitives and augment their functionality. The package uses an integer stream id, and keeps its own records on open files. Multiple open/close requests to the same file are tracked. Output to a terminal and/or log file (and, in particular, coordinated output to one or both) is handled with reasonable sophistication. There is a moderately capable lexer, a number of formatted output routines, and various random utilities. This package requires the set of error reporting/logging utilities in errs.c. */ #include "dylib_std.h" static char sccsid[] UNUSED = "@(#)io.c 3.14 11/11/04" ; static char svnid[] UNUSED = "$Id: dylib_io.c 407 2010-12-31 20:48:48Z lou $" ; #include #include #include #include "dylib_io.h" #include "dylib_errs.h" /* These declarations are used only by dyio_outfmt_, the version of dyio_outfmt that's designed to be called from Fortran. Unless you're the proud possessor of some ancient LP software, you likely don't want to know about xmp.h. WARNING! The Fortran hooks haven't been tested since the last millenium. It's highly unlikely that they still work. */ #ifdef _DYLIB_FORTRAN # include "dylib_fortran.h" #endif #ifndef MALLOC #define MALLOC(zz_sze_zz) malloc(zz_sze_zz) #define CALLOC(zz_cnt_zz,zz_sze_zz) calloc(zz_cnt_zz,zz_sze_zz) #define FREE(zz_fptr_zz) free(zz_fptr_zz) #endif #define MAXPATH FILENAME_MAX /* Maximum length of full path name */ /* The structure filblks keeps track of open files. In addition to the FILE structure, a filblks entry stores the channel modes and the full path (directory path plus file name) of the file. The i/o id used by the client is the index in this array. The size of this array is set in dyio_ioinit to be 2 less than the number of file descriptors available to the process. The -2 accounts for two files used in the error reporting/logging package (the error message text file, and the error message log file). They are handled without reference to this package to allow these routines to use the error reporting/logging package without creating a potential infinite recursion. Field Content ----- ------- stream ANSI C stdio FILE structure modes Flags specifying the channel mode. refcnt The number of opens that resolved to this file dname Directory path for this file. fname File name. Note that filblks is indexed from 1 to maxfiles, so that we can use NULL (0) to indicate no stream id. */ typedef struct { FILE *stream ; flags modes ; int refcnt ; char *dname ; char *fname ; } filblk_struct ; static filblk_struct *filblks ; static ioid maxfiles ; #define INVALID_IOID(zz_id) ((zz_id < (ioid) 0) || (maxfiles < zz_id)) #define INVALID_STREAMID(zz_id) ((zz_id < (ioid) 1) || (maxfiles < zz_id)) /* Flags for the modes field. Flag Description ---- ----------- io_active This entry is active. io_line Line oriented i/o, with '\n' treated as a delimiter character. io_free Free i/o, with '\n' treated as white space. io_read Stream is opened for input. io_write Stream is opened for output. */ #define io_active 1<<0 #define io_line 1<<1 #define io_free 1<<2 #define io_read 1<<3 #define io_write 1<<4 /* The chartab provides the character translation and class codes on input. nxtchar reads characters from a stream and uses chartab to provide the correct character translation and class codes to the various scan routines. The description of the chartab_struct structure used for chartab entries is as follows: Field Description ----- ----------- chrtrn Character supplied when this ascii code is read. class1 Primary character class. class2 Secondary character class, used during construction of identifiers. The values for class1 and class2 are drawn from the following set, defined below as the enum chrclass: Value Description ----- ----------- CCINV (INVtermin) Characters in this class terminate any symbol being formed, but are otherwise ignored. CCDIG (DIGit) The obvious set of digits. CCIDB (ID Begin) Characters which can start an identifier. CCDEL (DELimiter) Single character delimiters. CCIG (IGnore) Characters which are alway ignored. CCIDC (ID Continuation) Characters which are valid in an identifier but cannot start one. CCEOF Indicates end-of-file was seen. CCERR Indicates i/o error was seen. */ typedef enum {CCINV,CCDIG,CCIDB,CCDEL,CCIG,CCIDC,CCEOF,CCERR} chrclass ; typedef struct { chrclass class1 ; chrclass class2 ; char chrtrn ; } chartab_struct ; /* A few special case chartab_struct's used by nxtchar to handle special cases. chartab_eof and chartab_err are returned on EOF and i/o error respectively. chartab_nl is returned when '\n' is seen on a stream operating in line mode. */ static chartab_struct chartab_eof = { CCEOF,CCEOF,'\377' }, chartab_err = { CCERR,CCERR,'\377' }, chartab_nl = { CCDEL,CCDEL,'\n' } ; static chartab_struct chartab[128] = { { CCIG,CCIG,'\0' }, /* NULL, ^@ */ { CCIG,CCIG,'\0' }, /* SOH, ^A */ { CCIG,CCIG,'\0' }, /* STX, ^B */ { CCIG,CCIG,'\0' }, /* ETX, ^C */ { CCIG,CCIG,'\0' }, /* EOT, ^D */ { CCIG,CCIG,'\0' }, /* ENQ, ^E */ { CCIG,CCIG,'\0' }, /* ACK, ^F */ { CCIG,CCIG,'\0' }, /* BEL, ^G */ { CCIG,CCIG,'\0' }, /* BS, ^H */ { CCINV,CCINV,'\t' }, /* HT, ^I */ { CCINV,CCINV,'\n' }, /* LF, ^J */ { CCINV,CCINV,'\013' }, /* VT, ^K */ { CCINV,CCINV,'\f' }, /* FF, ^L */ { CCINV,CCINV,'\r' }, /* CR, ^M */ { CCIG,CCIG,'\0' }, /* SO, ^N */ { CCIG,CCIG,'\0' }, /* SI, ^O */ { CCIG,CCIG,'\0' }, /* DLE, ^P */ { CCIG,CCIG,'\0' }, /* DC1, ^Q */ { CCIG,CCIG,'\0' }, /* DC2, ^R */ { CCIG,CCIG,'\0' }, /* DC3, ^S */ { CCIG,CCIG,'\0' }, /* DC4, ^T */ { CCIG,CCIG,'\0' }, /* NAK, ^U */ { CCIG,CCIG,'\0' }, /* SYN, ^V */ { CCIG,CCIG,'\0' }, /* ETB, ^W */ { CCIG,CCIG,'\0' }, /* CAN, ^X */ { CCIG,CCIG,'\0' }, /* EOM, ^Y */ { CCIG,CCIG,'\0' }, /* SUB, ^Z */ { CCIG,CCIG,'\0' }, /* ESC, ^[ */ { CCIG,CCIG,'\0' }, /* FS, ^\ */ { CCIG,CCIG,'\0' }, /* GS, ^] */ { CCIG,CCIG,'\0' }, /* RS, ^^ */ { CCIG,CCIG,'\0' }, /* US, ^_ */ { CCINV,CCINV,' ' }, /* SP */ { CCDEL,CCDEL,'!' }, { CCDEL,CCDEL,'"' }, { CCDIG,CCDIG,'#' }, { CCDEL,CCDEL,'$' }, { CCDEL,CCIDC,'%' }, { CCDEL,CCDEL,'&' }, { CCDIG,CCDIG,'\047' }, /* ' */ { CCDEL,CCDEL,'(' }, { CCDEL,CCDEL,')' }, { CCDEL,CCDEL,'*' }, { CCDIG,CCDIG,'+' }, { CCDEL,CCDEL,',' }, { CCDIG,CCDIG,'-' }, { CCDIG,CCIDC,'.' }, { CCDEL,CCDEL,'/' }, { CCDIG,CCIDC,'0' }, { CCDIG,CCIDC,'1' }, { CCDIG,CCIDC,'2' }, { CCDIG,CCIDC,'3' }, { CCDIG,CCIDC,'4' }, { CCDIG,CCIDC,'5' }, { CCDIG,CCIDC,'6' }, { CCDIG,CCIDC,'7' }, { CCDIG,CCIDC,'8' }, { CCDIG,CCIDC,'9' }, { CCDEL,CCDEL,':' }, { CCDEL,CCDEL,';' }, { CCDEL,CCDEL,'<' }, { CCDEL,CCDEL,'=' }, { CCDEL,CCDEL,'>' }, { CCDEL,CCDEL,'?' }, { CCDEL,CCDEL,'@' }, { CCIDB,CCIDC,'A' }, { CCIDB,CCIDC,'B' }, { CCIDB,CCIDC,'C' }, { CCIDB,CCIDC,'D' }, { CCIDB,CCIDC,'E' }, { CCIDB,CCIDC,'F' }, { CCIDB,CCIDC,'G' }, { CCIDB,CCIDC,'H' }, { CCIDB,CCIDC,'I' }, { CCIDB,CCIDC,'J' }, { CCIDB,CCIDC,'K' }, { CCIDB,CCIDC,'L' }, { CCIDB,CCIDC,'M' }, { CCIDB,CCIDC,'N' }, { CCIDB,CCIDC,'O' }, { CCIDB,CCIDC,'P' }, { CCIDB,CCIDC,'Q' }, { CCIDB,CCIDC,'R' }, { CCIDB,CCIDC,'S' }, { CCIDB,CCIDC,'T' }, { CCIDB,CCIDC,'U' }, { CCIDB,CCIDC,'V' }, { CCIDB,CCIDC,'W' }, { CCIDB,CCIDC,'X' }, { CCIDB,CCIDC,'Y' }, { CCIDB,CCIDC,'Z' }, { CCDEL,CCDEL,'[' }, { CCDEL,CCDEL,'\\' }, { CCDEL,CCDEL,']' }, { CCDEL,CCDEL,'^' }, { CCDEL,CCIDC,'_' }, { CCDEL,CCDEL,'`' }, { CCIDB,CCIDC,'a' }, { CCIDB,CCIDC,'b' }, { CCIDB,CCIDC,'c' }, { CCIDB,CCIDC,'d' }, { CCIDB,CCIDC,'e' }, { CCIDB,CCIDC,'f' }, { CCIDB,CCIDC,'g' }, { CCIDB,CCIDC,'h' }, { CCIDB,CCIDC,'i' }, { CCIDB,CCIDC,'j' }, { CCIDB,CCIDC,'k' }, { CCIDB,CCIDC,'l' }, { CCIDB,CCIDC,'m' }, { CCIDB,CCIDC,'n' }, { CCIDB,CCIDC,'o' }, { CCIDB,CCIDC,'p' }, { CCIDB,CCIDC,'q' }, { CCIDB,CCIDC,'r' }, { CCIDB,CCIDC,'s' }, { CCIDB,CCIDC,'t' }, { CCIDB,CCIDC,'u' }, { CCIDB,CCIDC,'v' }, { CCIDB,CCIDC,'w' }, { CCIDB,CCIDC,'x' }, { CCIDB,CCIDC,'y' }, { CCIDB,CCIDC,'z' }, { CCDEL,CCDEL,'{' }, { CCDEL,CCDEL,'|' }, { CCDEL,CCDEL,'}' }, { CCIG,CCIG,'\176' }, /* ~ */ { CCIG,CCIG,'\177' } } ; /* DEL */ /* We need a few special lexemes too. lex_eof and lex_err are used to indicate EOF and lexical scan error, respectively. lex_nil is the null lexeme. */ static lex_struct lex_eof = {DY_LCEOF,"end-of-file"}, lex_err = {DY_LCERR,"lexical scan error"}, lex_nil = {DY_LCNIL,NULL} ; bool dyio_ioinit (void) /* This routine initialises the i/o data structures. It should be called only once, at the start of the client's program. It does the following: * Initialise the filblks array. We first get the size of the file descriptor table and acquire space for filblks. The first three entries are set up for stdin, stdout, and stderr, the streams opened by default under Unix. * A possible fourth entry is made if the user has opened an error log file. We need this entry here so that a later call to dyio_openfile can find it (the particular case of interest would be a desire to log normal and error messages to the same file). To maintain information hiding, there is a routine, errlogq, which returns the required information. Parameters: errlogpath: the path name of the error log file; used only if errlogq returns a non-NULL FILE handle Returns: TRUE if the initialisation succeeds, FALSE otherwise */ { int len ; filblk_struct *filblk ; char *fname,*errlogpath,*tmp ; const char *rtnnme = "dyio_ioinit" ; extern FILE *errlogq(char **elogpath) ; /* See the comments on the filblks array at the beginning of the file, for the explanation of the magic number 2. It's possible that the o/s may have imposed a more stringent limit on the client process. */ maxfiles = FOPEN_MAX-2 ; filblks = (filblk_struct *) CALLOC(maxfiles+1,sizeof(filblk_struct)) ; filblk = &filblks[1] ; filblk->stream = stdin ; filblk->dname = NULL ; filblk->fname = "stdin" ; setflg(filblk->modes,io_active|io_free|io_read) ; filblk->refcnt = 1 ; filblk = &filblks[2] ; filblk->stream = stdout ; filblk->dname = NULL ; filblk->fname = "stdout" ; setflg(filblk->modes,io_active|io_free|io_write) ; filblk->refcnt = 1 ; filblk = &filblks[3] ; filblk->stream = stderr ; filblk->dname = NULL ; filblk->fname = "stderr" ; setflg(filblk->modes,io_active|io_free|io_write) ; filblk->refcnt = 1 ; /* Check for an error log file, and make a filblks entry for it, if necessary. */ filblk = &filblks[4] ; filblk->stream = errlogq(&errlogpath) ; if (filblk->stream != NULL) { if (errlogpath == NULL) { errmsg(14,rtnnme) ; errmsg(1,rtnnme,__LINE__) ; return(FALSE) ; } fname = strrchr(errlogpath,'/') ; if (fname == NULL) { filblk->dname = NULL ; fname = errlogpath ; } else { len = (int) (fname-errlogpath) ; tmp = (char *) MALLOC(len+1) ; (void) strncpy(tmp,errlogpath,len) ; tmp[len] = '\0' ; filblk->dname = tmp ; fname++ ; } tmp = (char *) MALLOC(strlen(fname)+1) ; (void) strcpy(tmp,fname) ; filblk->fname = tmp ; setflg(filblk->modes,io_active|io_write) ; filblk->refcnt = 1 ; } return(TRUE) ; } void dyio_ioterm (void) /* This routine cleans up file management data structures allocated by the i/o package. Parameters: none Returns: undefined. */ { int id ; # if MALLOC_DEBUG == 2 char *rtnnme = "dyio_ioterm" ; # endif /* Data structures allocated by dyio_ioinit to track open files. */ for (id = 4 ; id <= maxfiles ; id++) { if (filblks[id].dname != NULL) FREE(filblks[id].dname) ; if (filblks[id].fname != NULL) FREE(filblks[id].fname) ; } FREE(filblks) ; return ; } static bool rwmodecmp (filblk_struct *filblk, const char *mode) /* This routine compares the r/w mode flags in the filblks entry for a stream with the r/w mode information in mode. Parameters: filblk: filblks entry to be checked. mode: Mode parameters as supplied for the standard i/o routine fopen. Returns: TRUE if the r/w mode information matches, FALSE otherwise. */ { const char *rtnnme = "rwmodecmp" ; flags modes ; bool rw ; if (mode == NULL) { errmsg(2,rtnnme,"r/w mode") ; return (FALSE) ; } if (filblk == NULL) { errmsg(2,rtnnme,"filblk") ; return (FALSE) ; } modes = filblk->modes ; rw = (mode[1] == '+')?TRUE:FALSE ; switch (mode[0]) { case 'r': { if (flgoff(modes,io_read) == TRUE) return (FALSE) ; if (rw == TRUE && flgoff(modes,io_write) == TRUE) return (FALSE) ; return (TRUE) ; } case 'a': case 'w': { if (flgoff(modes,io_write) == TRUE) return (FALSE) ; if (rw == TRUE && flgoff(modes,io_read) == TRUE) return (FALSE) ; return (TRUE) ; } default: { errmsg(4,rtnnme,"r/w mode",mode) ; return (FALSE) ; } } } static bool setrwmode (filblk_struct *filblk, char *mode) /* This routine sets the r/w mode flags in the filblks entry for a stream. Parameters: filblk: Filblks entry to be set. mode: Mode parameters as supplied to the standard i/o routine fopen. Returns: TRUE if the mode is set successfully, FALSE otherwise. */ { const char *rtnnme = "setrwmode" ; bool rw ; if (mode == NULL) { errmsg(2,rtnnme,"r/w mode") ; return (FALSE) ; } if (filblk == NULL) { errmsg(2,rtnnme,"filblk") ; return (FALSE) ; } rw = (mode[1] == '+')?TRUE:FALSE ; switch (mode[0]) { case 'r': { if (rw == TRUE) setflg(filblk->modes,io_read|io_write) ; else setflg(filblk->modes,io_read) ; return (TRUE) ; } case 'a': case 'w': { if (rw == TRUE) setflg(filblk->modes,io_read|io_write) ; else setflg(filblk->modes,io_write) ; return (TRUE) ; } default: { errmsg(4,rtnnme,"r/w mode",mode) ; return (FALSE) ; } } } bool dyio_setmode (ioid id, char mode) /* This routine is provided as an information-hiding function so that the client can switch a stream between line and free mode. Parameters: id: i/o id. mode: Desired mode, 'f' for free, 'l' for line. Returns: TRUE if the mode was successfully set, FALSE otherwise. */ { filblk_struct *filblk ; const char *rtnnme = "dyio_setmode" ; /* Check to make sure the stream ID is OK. */ if (INVALID_STREAMID(id)) { errmsg(5,rtnnme,"stream id",id) ; return (FALSE) ; } filblk = &filblks[id] ; if (flgon(filblk->modes,io_active) == FALSE) { errmsg(15,rtnnme,id) ; return (FALSE) ; } if (flgon(filblk->modes,io_read) == FALSE) { errmsg(16,rtnnme,dyio_idtopath(id)) ; return (FALSE) ; } /* Now set the mode. */ switch (mode) { case 'l': case 'L': { clrflg(filblk->modes,io_free) ; setflg(filblk->modes,io_line) ; break ; } case 'f': case 'F': { clrflg(filblk->modes,io_line) ; setflg(filblk->modes,io_free) ; break ; } default: { errmsg(3,rtnnme,"scanning mode",mode) ; return (FALSE) ; } } return (TRUE) ; } const char *dyio_idtopath (ioid id) /* This routine returns the file name associated with the specified stream. Parameter: id: i/o id. Returns: Path name of the file opened on this stream, or an error string if the stream is not currently active. */ { static char fullpath[MAXPATH] ; static const char *badid = "!invalid id!" ; filblk_struct *filblk ; const char *rtnnme = "dyio_idtopath" ; /* Check to make sure the stream ID is OK. */ if (INVALID_STREAMID(id)) { errmsg(5,rtnnme,"stream id",id) ; return (badid) ; } filblk = &filblks[id] ; if (flgon(filblk->modes,io_active) == FALSE) { errmsg(15,rtnnme,id) ; return (badid) ; } /* Now construct the full pathname from the directory and file names. */ fullpath[0] = '\0' ; if (filblk->dname != NULL) { (void) strcat(fullpath,filblk->dname) ; (void) strcat(fullpath,"/") ; } (void) strcat(fullpath,filblk->fname) ; return (fullpath) ; } ioid dyio_pathtoid (const char *path, const char *mode) /* This routine searches the filblks array and returns the stream ID associated with the full path name given by path. If mode is non-null, the i/o mode of the file must also match. Parameters: path: Full path name of the file. mode: i/o mode, as passed to the standard i/o routine fopen Returns: I/O ID associated with the path name (and mode), or IOID_INV if nothing matched. */ { const char *fname ; int ndx,dlen ; filblk_struct *filblk ; const char *rtnnme = "dyio_pathtoid" ; if (path == NULL) { errmsg(2,rtnnme,"path") ; return (-1) ; } fname = strrchr(path,'/') ; if (fname == NULL) { dlen = 0 ; fname = path ; } else { dlen = (int) (fname-path) ; fname++ ; } for (ndx = 1 ; ndx <= maxfiles ; ndx++) { filblk = &filblks[ndx] ; if (flgoff(filblk->modes,io_active) == TRUE) continue ; if (strcmp(filblk->fname,fname) != 0) continue ; if (filblk->dname == NULL) { if (dlen != 0) continue ; } else { if (strncmp(filblk->dname,path,dlen) != 0) continue ; } if (mode != NULL && rwmodecmp(filblk,mode) == FALSE) continue ; return (ndx) ; } return (IOID_INV) ; } bool dyio_ttyq (ioid id) /* This routine answers the question of whether or not the stream specified by id is attached to a tty. It is simply an interface to isatty. isatty and fileno are not ANSI standard functions, but seem pretty common among Unix implementations. Your mileage may vary. Parameters: id: i/o id Returns: TRUE if the stream is attached to a tty, FALSE otherwise; in the event of a error, FALSE is returned. */ { filblk_struct *filblk ; const char *rtnnme = "dyio_ttyq" ; extern int isatty(int fildes) ; /*extern int fileno(FILE *stream) ;*/ /* Check to make sure the stream ID is OK. */ if (INVALID_STREAMID(id)) { errmsg(5,rtnnme,"stream id",id) ; return (FALSE) ; } filblk = &filblks[id] ; if (flgon(filblk->modes,io_active) == FALSE) { errmsg(15,rtnnme,id) ; return (FALSE) ; } /* Now inquire if the stream is attached to a terminal. */ if (isatty(fileno(filblk->stream)) == 1) return (TRUE) ; else return (FALSE) ; } ioid dyio_openfile (const char *path, const char *mode) /* This routine sets up the file specified in path for i/o. It acts as the interface between the client and the C stdio library. The major differences from the standard fopen function are 1): dyio_openfile looks to see if the specified file is already opened with compatible r/w mode (see below for 'compatible') and if so it returns the ID for the preexisting stream, with no further actions. 2): Six additional modes "R","R+","W","W+","A","A+" are provided to override feature 1, i.e., to force a rewind or truncate operation, as appropriate. 3): The letter `q' (query) is interpreted as `open the file if it exists, but it's not an error if it doesn't exist.' 'Compatible' mode means everything has to match except the case of the letter. Parameters: path: Address of the full path name (directory path plus file name) of the file to be opened. mode: Address of a string giving the file i/o mode, as specified for the standard fopen function, with the extra modes as described above. Returns: stream ID, or IOID_INV if the file cannot be opened. */ { FILE *handle ; filblk_struct *filblk ; const char *fname ; char *tmp ; char mode_var[3] ; int len ; ioid id ; bool mustexist,totop ; const char *rtnnme = "dyio_openfile" ; /* Make sure the parameters are ok. */ if (path == NULL) { errmsg(2,rtnnme,"path") ; return (IOID_INV) ; } if (mode == NULL) { errmsg(2,rtnnme,"r/w mode") ; return (IOID_INV) ; } /* Get a copy of mode so we can play with the string. */ mode_var[0] = mode[0] ; mode_var[1] = mode[1] ; mode_var[2] = '\0' ; /* If mode_var starts with an upper case letter, change to lower case. For modes beginning with 'W', 'R', set the rewind flag. Convert query modes to read, but note that the file need not exist. */ mustexist = FALSE ; totop = FALSE ; switch (mode_var[0]) { case 'R': { mode_var[0] = 'r' ; totop = TRUE ; mustexist = TRUE ; break ; } case 'Q': { mode_var[0] = 'r' ; totop = TRUE ; break ; } case 'W': { mode_var[0] = 'w' ; totop = TRUE ; break ; } case 'A': { mode_var[0] = 'a' ; break ; } case 'r': { mustexist = TRUE ; break ; } case 'q': { mode_var[0] = 'r' ; break ; } case 'w': case 'a': { break ; } default: { errmsg(4,rtnnme,"r/w mode",mode) ; return (IOID_INV) ; } } /* First check if the file is already open with compatible (lower case equivalent) mode. Note that dyio_pathtoid() checks modes. If the file is already open, return with the stream id. If additionally the rewind flag totop is true, take appropriate action. The rewind flag and/or uppercase mode mean nothing if the file is not already open. */ id = dyio_pathtoid(path,mode_var) ; if (id != IOID_INV) { if (totop == TRUE) { switch (mode_var[0]) { case 'r': { rewind(filblks[id].stream) ; break ; } case 'w': { fclose(filblks[id].stream) ; filblks[id].stream = fopen(path,mode_var) ; if (filblks[id].stream == NULL) { errmsg(10,rtnnme,dyio_idtopath(id),mode_var) ; perror(rtnnme) ; return (IOID_INV) ; } break ; } case 'a': { errmsg(1,rtnnme,__LINE__) ; return (IOID_INV) ; } } } filblks[id].refcnt++ ; return (id) ; } /* The file is not currently open, so find an empty entry in filblks. */ for (id = 1 ; id <= maxfiles && flgon(filblks[id].modes,io_active) == TRUE ; id++) ; if (id > maxfiles) { errmsg(13,rtnnme) ; return (IOID_INV) ; } filblk = &filblks[id] ; /* Now attempt to open the file. */ handle = fopen(path,mode_var) ; if (handle == NULL) { if (mode_var[0] == 'r' && mustexist == FALSE) { return (IOID_NOSTRM) ; } else { errmsg(10,rtnnme,path,mode_var) ; perror(rtnnme) ; return (IOID_INV) ; } } /* File is successfully opened, so fill in the information in filblks. */ filblk->stream = handle ; setrwmode(filblk,mode_var) ; fname = strrchr(path,'/') ; if (fname == NULL) { filblk->dname = NULL ; fname = path ; } else { len = (int) (fname-path) ; tmp = (char *) MALLOC(len+1) ; (void) strncpy(tmp,path,len) ; tmp[len] = '\0' ; filblk->dname = tmp ; fname++ ; } tmp = (char *) MALLOC(strlen(fname)+1) ; (void) strcpy(tmp,fname) ; filblk->fname = tmp ; setflg(filblk->modes,io_active|io_free) ; filblk->refcnt = 1 ; return (id) ; } bool dyio_isactive (ioid id) /* This routine checks to see if id corresponds to an active stream. Parameter: id: stream ID obtained from dyio_openfile Returns: TRUE if the stream is active, FALSE otherwise */ { const char *rtnnme = "dyio_isactive" ; /* We'll still complain if the id isn't valid. */ if (INVALID_IOID(id)) { errmsg(5,rtnnme,"stream id",id) ; return (FALSE) ; } if (id == IOID_NOSTRM) return (FALSE) ; return (flgon(filblks[id].modes,io_active)) ; } bool dyio_closefile (ioid id) /* This routine closes a stream and cleans up the filblks entry, iff the reference count for the stream has dropped to 0. Parameter: id: stream ID obtained from dyio_openfile Returns: TRUE if the stream is closed without error, FALSE otherwise. */ { filblk_struct *filblk ; bool retval ; const char *rtnnme = "dyio_closefile" ; /* Make sure the id is valid. */ if (INVALID_STREAMID(id)) { errmsg(5,rtnnme,"stream id",id) ; return (FALSE) ; } filblk = &filblks[id] ; if (flgon(filblk->modes,io_active) == FALSE) { errmsg(15,rtnnme,id) ; return (FALSE) ; } /* Decrement the reference count. If it's non-zero, someone else is still using the stream, so just return. */ if (--filblk->refcnt > 0) return (TRUE) ; /* Reference count is 0, so close the stream. */ if (fclose(filblk->stream) == EOF) { errmsg(11,rtnnme,dyio_idtopath(id)) ; perror(rtnnme) ; retval = FALSE ; } else retval = TRUE ; /* Mark the filblk entry as inactive and free the directory path and file name space. We can close the three standard streams (stdin, stdout, stderr) but the name strings are static (vid. dyio_ioinit) and should not be freed. */ clrflg(filblk->modes,io_active) ; if (id > 3) { if (filblk->dname != NULL) { FREE(filblk->dname) ; filblk->dname = NULL ; } FREE(filblk->fname) ; filblk->fname = NULL ; } return (retval) ; } bool dyio_chgerrlog (const char *newerrpath, bool echo) /* This routine allows for manipulation of the error logging channel via the standard interface provided by io.c. The supplied path is checked against open streams, and if one is found it is passed on to the error logging package. If there is no open stream for the new log file, it's opened. If we had no record of the old error log file, we'll let the error logging package do the close. But if we have a record, we'll handle the close here. It's possible we've been called solely to change the echo, in which case we'll do it up front and bail out. Parameters: newerrpath: path name of the file echo: TRUE if errors should be echoed to stderr, FALSE otherwise Returns: TRUE if things go well, FALSE otherwise. */ { ioid olderrid,newerrid ; bool close ; char *olderrpath ; FILE *newerrchn ; const char *rtnnme = "dyio_chgerrlog" ; extern FILE *errlogq(char **elogpath) ; extern bool reseterrlogchn(const char *elogpath, FILE *elogchn, bool echo, bool close) ; /* Just here to change the echo? */ if (newerrpath == NULL) { (void) reseterrlogchn(NULL,NULL,echo,FALSE) ; return (TRUE) ; } /* The first thing we need to do is check for the existence of the present error logging file. If the i/o package has no record, we want the error logging package to close out the old file. If we have a record, we'll do it here. */ (void) errlogq(&olderrpath) ; if (olderrpath == NULL) { close = FALSE ; olderrid = IOID_INV ; } else { olderrid = dyio_pathtoid(olderrpath,NULL) ; if (olderrid == IOID_INV) { close = TRUE ; } else { close = FALSE ; } } /* Now see if the new file is already open. If not, open it. */ newerrid = dyio_pathtoid(newerrpath,"w") ; if (newerrid == IOID_INV) { newerrid = dyio_openfile(newerrpath,"w") ; if (newerrid == IOID_INV) { errmsg(10,rtnnme,newerrpath,"w") ; return (FALSE) ; } } newerrchn = filblks[newerrid].stream ; /* Do the swap. Once we've finished, we may need to deactivate the filblks entry for olderrid. */ if (reseterrlogchn(newerrpath,newerrchn,echo,close) == FALSE) { errmsg(18,rtnnme,olderrpath,newerrpath) ; return (FALSE) ; } /* Did we have a record for this file? If so, call dyio_closefile to tidy up. */ if (olderrid != IOID_INV) (void) dyio_closefile(olderrid) ; return (TRUE) ; } long dyio_mark (ioid id) /* This routine marks the current place in the input stream. It uses ftell to obtain the current offset. As best I can figure, ftell should always return a positive integer, at least on Unix, so the error return here is -1. Parameter: id: Stream ID from dyio_openfile. Returns: A "mark", or -1 in the event of any bogosity. */ { filblk_struct *filblk ; long here ; const char *rtnnme = "dyio_mark" ; /* Check to make sure the stream ID is OK. */ if (INVALID_STREAMID(id)) { errmsg(5,rtnnme,"stream id",id) ; return (-1) ; } filblk = &filblks[id] ; if (flgon(filblk->modes,io_active) == FALSE) { errmsg(15,rtnnme,id) ; return (-1) ; } /* Now try the call to ftell to get the mark. */ here = ftell(filblk->stream) ; if (here < 0) { errmsg(23,rtnnme,dyio_idtopath(id)) ; perror(rtnnme) ; } return (here) ; } bool dyio_backup (ioid id, long there) /* This routine moves the position of the next i/o operation on this stream to there. Parameters: id: Stream ID from dyio_openfile. there: Mark supplied by dyio_mark. Returns: TRUE if the position is successfully set, FALSE otherwise. */ { filblk_struct *filblk ; const char *rtnnme = "dyio_backup" ; /* Check to make sure the stream ID is OK. */ if (INVALID_STREAMID(id)) { errmsg(5,rtnnme,"stream id",id) ; return (FALSE) ; } filblk = &filblks[id] ; if (flgon(filblk->modes,io_active) == FALSE) { errmsg(15,rtnnme,id) ; return (FALSE) ; } /* Call fseek to position the file pointer to there. */ if (fseek(filblk->stream,there,SEEK_SET) < 0) { errmsg(24,rtnnme,dyio_idtopath(id),there) ; perror(rtnnme) ; return (FALSE) ; } return (TRUE) ; } static chartab_struct *nxtchar (FILE *stream, flags modes) /* This routine reads characters from stream and removes characters of class CCIG (IGnore). Parameters: stream: stream handle modes: modes field from filblk entry for this channel Returns: chartab_struct for the character read. Note that EOF, i/o error, and '\n' receive special handling. */ { const char *rtnnme = "nxtchar" ; int nxt,id ; /* Read characters until not class CCIG or until EOF. */ for (nxt = getc(stream) ; nxt != EOF && chartab[nxt].class1 == CCIG ; nxt = getc(stream)) ; /* Check for read errors. */ if (nxt == EOF) { if (ferror(stream) != 0) { for (id = 1 ; id <= maxfiles && filblks[id].stream != stream ; id++) ; if (id <= maxfiles) { errmsg(12,rtnnme,dyio_idtopath(id)) ; } else { errmsg(12,rtnnme,"unknown") ; errmsg(1,rtnnme,__LINE__) ; } perror(rtnnme) ; return (&chartab_err) ; } else { return (&chartab_eof) ; } } if (nxt == '\n' && flgon(modes,io_line) == TRUE) return (&chartab_nl) ; else return (&chartab[nxt]) ; } bool dyio_scan (ioid id, const char pattern[], bool rwnd, bool wrap) /* This routine scans the input stream specified by id for the string specified in pattern. It leaves the i/o pointer positioned so that the next read from the channel will fetch the character following the string matched. rwnd specifies whether the stream should be reset to the beginning of the file before the scan starts. wrap is valid only if the file is not rewound, and specifies whether the search can be continued at EOF by resetting to the beginning of file and resuming the scan. wrap is a bit expensive unless you are pretty sure that the desired string will occur between where you're at and the end of the file, since there is no cheap way of stopping at the point where the scan originally started without digging into the guts of the stdio package. Hence the scan continues til the second EOF. The algorithm used is the linear substring matching algorithm described in Section 9.3 of Aho, Hopcroft, & Ullman, "The Design and Analysis of Computer Algorithms". The routine limits the length of pattern arbitrarily to 30 chars and will truncate the pattern and complain if the pattern is longer. Parameters: id: i/o id. pattern: Character string to be matched. rwnd: TRUE: start the scan from the beginning of the file FALSE: start the scan from the present position wrap: TRUE: allow the restart FALSE: quit after first EOF Returns: TRUE if the string is found, FALSE otherwise. */ #define MAXPATLEN 30 { static struct state_struct { char nxtchr ; struct state_struct *fail ; } states[MAXPATLEN] ; struct state_struct *state ; int patlen,patndx,statendx ; const char *patptr ; bool retry ; chartab_struct *chr ; filblk_struct *filblk ; FILE *stream ; flags mode ; const char *rtnnme = "dyio_scan" ; /* Check to make sure the stream ID is OK and lex points to a string. */ if (INVALID_STREAMID(id)) { errmsg(5,rtnnme,"stream id",id) ; return (FALSE) ; } filblk = &filblks[id] ; if (flgon(filblk->modes,io_active) == FALSE) { errmsg(15,rtnnme,id) ; return (FALSE) ; } if (flgon(filblk->modes,io_read) == FALSE) { errmsg(16,rtnnme,dyio_idtopath(id)) ; return (FALSE) ; } if (pattern == NULL) { errmsg(2,rtnnme,"pattern") ; return (FALSE) ; } patlen = (int) strlen(pattern) ; if (patlen > MAXPATLEN) { errmsg(25,rtnnme,pattern,MAXPATLEN) ; patlen = MAXPATLEN ; } /* Now set up the states array. For each state, the entry specifies the next character and the failure function value. We initialize the entries for states[0] and states[1], then enter the main loop to calculate the rest. */ state = states ; patptr = pattern ; state->nxtchr = *patptr ; state->fail = states ; state++ ; patptr++ ; state->nxtchr = *patptr ; state->fail = states ; for (statendx = 2 ; statendx < patlen ; statendx++) { patndx = (int) (state->fail-states) ; state++ ; while (*patptr != pattern[patndx] && patndx > 0) patndx = (int) (states[patndx].fail-states) ; if (*patptr != pattern[patndx] && patndx == 0) state->fail = states ; else state->fail = &states[patndx+1] ; patptr++ ; state->nxtchr = *patptr ; } /* Set up the control variables and position the file pointer. */ stream = filblk->stream ; mode = filblk->modes ; if (rwnd == FALSE) retry = wrap ; else { rewind(stream) ; retry = FALSE ; } /* Now begin the actual matching. The first action is to read in a character. i/o error causes immediate termination; nxtchar will already have printed an error message. EOF is handled by rewinding the file, if allowed, otherwise it too causes a return. If we rewind, state is forced to 0 and we abort this iteration of the loop. */ for (state = states ; state != &states[patlen] ; ) { chr = nxtchar(stream,mode) ; if (chr->class1 == CCERR) return (FALSE) ; if (chr->class1 == CCEOF) { if (retry == FALSE) return (FALSE) ; else { rewind(stream) ; retry = FALSE ; state = states ; continue ; } } /* OK, we've got a character and we're actually ready to check it against the pattern. If it matches, we advance to the next state. */ if (chr->chrtrn == state->nxtchr) { state++ ; continue ; } /* It didn't match, so we apply the failure function until we get to a state where chr == state->nxtchr or state == 0. If we reach a state where nxtchr matches chr, we bump the state by one and iterate, otherwise we just iterate leaving state at 0. */ for (state = state->fail ; !(chr->chrtrn == state->nxtchr || state == states) ; state = state->fail) ; if (chr->chrtrn == state->nxtchr) state++ ; } /* To get here, we've matched. (Otherwise we would have returned due to EOF up above. Celebrate by returning TRUE. */ return (TRUE) ; } #undef MAXPATLEN lex_struct *dyio_scanlex (ioid id) /* This routine is a general lexical scanner. It recognizes three classes of lexemes: numbers (DY_LCNUM), identifiers (DY_LCID), and delimiters (DY_LCDEL). As with character classes, these are augmented by two classes for EOF (DY_LCEOF) and i/o error (DY_LCERR). Lexemes are limited to 80 characters in length. Longer lexemes are truncated and the user is warned, but no error is indicated in the returned value. The basic form of the scanner follows the outline presented in Section 3.3 of Gries, "Compiler Construction for Digital Computers". Parameters: id: stream id from dyio_openfile. Returns: A lex_struct reflecting the result of the scan. This will be a normal lex_struct or a lex_struct reflecting an exception (EOF or error) */ #define MAXLEXLEN 80 { chartab_struct *chr ; char *lexptr ; bool ovf ; filblk_struct *filblk ; FILE *stream ; flags mode ; static char stringspace[MAXLEXLEN+1] ; static lex_struct lex = {DY_LCNIL,stringspace} ; const char *rtnnme = "dyio_scanlex" ; /* Check to make sure that the stream id is OK. */ if (INVALID_STREAMID(id)) { errmsg(5,rtnnme,"stream id",id) ; return (&lex_err) ; } filblk = &filblks[id] ; if (flgon(filblk->modes,io_active) == FALSE) { errmsg(15,rtnnme,id) ; return (&lex_err) ; } if (flgon(filblk->modes,io_read) == FALSE) { errmsg(16,rtnnme,dyio_idtopath(id)) ; return (&lex_err) ; } stream = filblk->stream ; mode = filblk->modes ; /* Step over any characters of class CCINV (i.e., whitespace). If we get EOF or i/o error here, return appropriately. */ for (chr = nxtchar(stream,mode) ; chr->class1 == CCINV ; chr = nxtchar(stream,mode)) ; if (chr->class1 == CCEOF) return (&lex_eof) ; if (chr->class1 == CCERR) return (&lex_err) ; /* Form the lexeme. Note that the algorithm for forming a number does not attempt to be picky - it will handle a well-formed number, but it will also pass malformed numbers of various sorts. */ lexptr = lex.string ; *lexptr++ = chr->chrtrn ; ovf = FALSE ; switch (chr->class1) { case CCDIG: /* Form a number. */ { for (chr = nxtchar(stream,mode) ; (1) ; chr = nxtchar(stream,mode)) { if ((chr->class1 != CCDIG && chr->chrtrn != 'E' && chr->chrtrn != 'e') || ((chr->chrtrn == '+' || chr->chrtrn == '-') && *(lexptr-1) != 'E' && *(lexptr-1) != 'e')) break ; if (ovf == FALSE) { if (lexptr < &stringspace[MAXLEXLEN]) { *lexptr++ = chr->chrtrn ; } else { ovf = TRUE ; *lexptr = '\0' ; errmsg(26,rtnnme,lex.string,MAXLEXLEN) ; } } } if (!(chr->class1 == CCEOF || chr->class1 == CCERR)) ungetc(chr->chrtrn,stream) ; if ((lexptr-1) == lex.string && (*(lexptr-1) == '+' || *(lexptr-1) == '-')) lex.class = DY_LCDEL ; else lex.class = DY_LCNUM ; break ; } case CCIDB: /* Form an identifier. */ { for (chr = nxtchar(stream,mode) ; chr->class2 == CCIDC ; chr = nxtchar(stream,mode)) if (ovf == FALSE) { if (lexptr < &stringspace[MAXLEXLEN]) { *lexptr++ = chr->chrtrn ; } else { ovf = TRUE ; *lexptr = '\0' ; errmsg(26,rtnnme,lex.string,MAXLEXLEN) ; } } if (!(chr->class1 == CCEOF || chr->class1 == CCERR)) ungetc(chr->chrtrn,stream) ; lex.class = DY_LCID ; break ; } case CCDEL: /* Form single-character delimiter. */ { lex.class = DY_LCDEL ; break ; } default: /* Should never execute this. */ { errmsg(1,rtnnme,__LINE__) ; return (&lex_err) ; } } /* Clean up and return. We check to see if the scan was terminated by an i/o error, and if so return lex_err. Otherwise, we make sure that the string ends with a NULL and return. Termination due to EOF isn't necessarily an error; an EOF return will be generated on the next call. */ if (chr->class1 == CCERR) return (&lex_err) ; *lexptr = '\0' ; return (&lex) ; } #undef MAXLEXLEN lex_struct *dyio_scanstr (ioid id, lexclass stype, int fslen, char qschr, char qechr) /* This routine is a string scanner. It scans two types of strings, fixed length (DY_LCFS) and quoted (DY_LCQS). Before starting the string scan, the input is read until a non-CCINV character is encountered (i.e, we skip over whitespace characters). Fixed length strings have the length specified by fslen. The algorithm is to copy the next fslen characters into a text string and return. Quoted strings are bounded by a start character and an end character, passed in qschr and qechr, respectively. A check is made to see if the specified start character is present unless the start character is '\0', in which case no check is made, or the start character is ' ', in which case any CCINV (whitespace) character satisfies the check. It is an error if a specific start character is not matched in the input. Any single occurrence of the end character ends the string, unless the end character is '\0' or ' '. For '\0', any CCINV or CCDEL character ends the string, while for ' ' only CCINV characters will end the string. Double occurrences of printing end characters are reduced to a single occurrence in the string returned; surrounding quote characters are stripped. For non-printing end characters, the double-occurrence escape is not available. (This avoids problems with forming strings ended by \n or \f from terminal input, where the read may block because there are no more characters.) NOTE: It is possible to parse a string of length 0 (and hence get a DY_LCNIL return type) when a quoted string is parsed with start character '\0'. Example: a request for a string quoted with '\0','\n' (to parse off entire lines) will return DY_LCNIL if the line contains only a '\n'. Further, a string quoted with '\0','\0' is satisfied by any amount of whitespace, even the whitespace skipped over at the start of the parse. Finally, to avoid leaking the buffer allocated for the last non-null string, use a call of dyio_scanstr(ioid,DY_LCQS,0,'\0','\0') and free lex.string iff lex.class == DY_LCQS. Parameters: id: i/o ID from dyio_openfile. stype: String type, allowable values are DY_LCFS and DY_LCQS. fslen: String length (fixed-length strings only). qschr: Start character (quoted strings only). qechr: End character (quoted strings only). Returns: A lex_struct reflecting the result of the scan. This will be a normal lex_struct or a lex_struct reflecting an exception (EOF or error) */ #define MAXQSLEN 250 { chartab_struct *chr ; char *lexptr ; bool invseen ; int ndx,expcnt ; filblk_struct *filblk ; FILE *stream ; flags mode ; static lex_struct lex = {DY_LCNIL,NULL} ; const char *rtnnme = "dyio_scanstr" ; /* Release the previous lex space, if necessary. */ if (lex.string != NULL) { FREE(lex.string) ; lex.string = NULL ; } /* Check to make sure that the stream id is OK. */ if (INVALID_IOID(id)) { errmsg(5,rtnnme,"stream id",id) ; return (&lex_err) ; } filblk = &filblks[id] ; if (flgon(filblk->modes,io_active) == FALSE) { errmsg(15,rtnnme,id) ; return (&lex_err) ; } if (flgon(filblk->modes,io_read) == FALSE) { errmsg(16,rtnnme,dyio_idtopath(id)) ; return (&lex_err) ; } stream = filblk->stream ; mode = filblk->modes ; /* Step over any characters of class CCINV (i.e., whitespace). If we get EOF or i/o error here, return appropriately. */ invseen = FALSE ; for (chr = nxtchar(stream,mode) ; chr->class1 == CCINV ; chr = nxtchar(stream,mode)) invseen = TRUE ; if (chr->class1 == CCERR) return (&lex_err) ; if (chr->class1 == CCEOF) { if (invseen == TRUE && qschr == '\0' && (qechr == '\0' || qechr == ' ')) return (&lex_nil) ; else return (&lex_eof) ; } /* Now begin to construct the string. */ switch (stype) { /* Fixed length strings. Acquire some space of the right size, then copy the required number of characters. */ case DY_LCFS: { if (fslen <= 0) { errmsg(5,rtnnme,"fslen",fslen) ; ungetc(chr->chrtrn,stream) ; return (&lex_err) ; } lexptr = (char *) MALLOC(fslen+1) ; lex.string = lexptr ; *lexptr++ = chr->chrtrn ; for (ndx = fslen-1 ; ndx != 0 ; ndx--) { chr = nxtchar(stream,mode) ; if (chr->class1 == CCEOF || chr->class1 == CCERR) { *lexptr = '\0' ; errmsg(27,rtnnme,fslen,lex.string) ; FREE(lex.string) ; lex.string = NULL ; return (&lex_err) ; } *lexptr++ = chr->chrtrn ; } lex.class = DY_LCFS ; break ; } /* Quoted strings. We'll guess that MAXQSLEN characters will normally hold us, and expand if necessary. The first switch looks to see if we've satisfied the start character conditions. Then we allocate space and proceed to scan off the string. We allocate MAXQSLEN+1 to allow space for a closing null. */ case DY_LCQS: { switch (qschr) { case '\0': { if (invseen == TRUE && (qechr == '\0' || qechr == ' ')) { ungetc(chr->chrtrn,stream) ; return (&lex_nil) ; } break ; } case ' ': { if (invseen != TRUE) { ungetc(chr->chrtrn,stream) ; return (&lex_err) ; } break ; } default: { if (qschr != chr->chrtrn) { ungetc(chr->chrtrn,stream) ; return (&lex_err) ; } chr = nxtchar(stream,mode) ; break ; } } lexptr = (char *) MALLOC(MAXQSLEN+1) ; lex.string = lexptr ; ndx = MAXQSLEN ; expcnt = 0 ; while (1) { if (chr->class1 == CCEOF || chr->class1 == CCERR) { *lexptr = '\0' ; errmsg(28,rtnnme,qschr,qechr,lex.string) ; FREE(lex.string) ; lex.string = NULL ; return (&lex_err) ; } if ((qechr == ' ' && chr->class1 == CCINV) || (qechr == '\0' && (chr->class1 == CCINV || chr->class1 == CCDEL))) break ; if (chr->chrtrn == qechr) { if (qechr >= ' ') { chr = nxtchar(stream,mode) ; if (chr->chrtrn != qechr) { if (chr->class1 != CCEOF && chr->class1 != CCERR) ungetc(chr->chrtrn,stream) ; break ; } } else break ; } *lexptr++ = chr->chrtrn ; ndx-- ; if (ndx <= 0) { expcnt++ ; lexptr = (char *) MALLOC((expcnt+1)*MAXQSLEN+1) ; (void) strncpy(lexptr,lex.string,expcnt*MAXQSLEN) ; FREE(lex.string) ; lex.string = lexptr ; lexptr += expcnt*MAXQSLEN ; ndx = MAXQSLEN ; } chr = nxtchar(stream,mode) ; } if (lex.string == lexptr) { FREE(lex.string) ; lex.string = NULL ; return (&lex_nil) ; } else lex.class = DY_LCQS ; break ; } default: { errmsg(5,rtnnme,"string type",stype) ; ungetc(chr->chrtrn,stream) ; return (&lex_err) ; } } /* That's it. Terminate the string and return. Note that this return is used only when a non-null string has been scanned. */ *lexptr = '\0' ; return (&lex) ; } #undef MAXQSLEN /* The following output routines provide some measure of isolation for output, but their major function in life is to localize echoing control. */ void dyio_flushio (ioid id, bool echo) /* This routine flushes buffered output. It is strictly an interface routine, to hide the translation from integer stream id to the stdio stream handle and localize echoing control. If id == 0 and echo == FALSE, nothing happens. If id == 0 and echo == TRUE, only stdout is affected. (etc.) Parameters: id: stream id from dyio_openfile echo: specifies if we're echoing to stdout, and hence should flush it Returns: undefined */ { FILE *strmid ; filblk_struct *filblk ; const char *rtnnme = "dyio_flushio" ; /* Check for sane id. */ if (INVALID_IOID(id)) { errmsg(5,rtnnme,"i/o id",id) ; return ; } /* Flush the stream specified by id, if it's active and writeable. */ if (id != IOID_NOSTRM) { filblk = &filblks[id] ; if (flgon(filblk->modes,io_active) == FALSE) { errmsg(15,rtnnme,id) ; } else if (flgon(filblk->modes,io_write) == FALSE) { errmsg(17,rtnnme,dyio_idtopath(id)) ; } else { strmid = filblk->stream ; if (fflush(strmid) != 0) perror(rtnnme) ; } } /* Flush stdout if echo is TRUE. stdout is assumed active and writeable. */ if (echo == TRUE) if (fflush(stdout) != 0) perror(rtnnme) ; return ; } void dyio_outfmt (ioid id, bool echo, const char *pattern, ... ) /* This routine provides the client with an interface to the vfprintf routine, while maintaining a logging facility. The form of the call should be dyio_outfmt(id,echo,pattern,parm1, ... ,parmn) If id == 0 and echo == FALSE, nothing happens. If id == 0 and echo == TRUE, only stdout is affected. (etc.) Parameters: id: stream id from dyio_openfile echo: TRUE to echo to user's tty, FALSE otherwise pattern: output pattern, passed to printf parmi: the parameters for the pattern Returns: undefined */ { va_list parms ; filblk_struct *filblk ; const char *rtnnme = "dyio_outfmt" ; /* Sanity checks on i/o id and pattern. */ if (INVALID_IOID(id)) { errmsg(5,rtnnme,"i/o id",id) ; return ; } if (pattern == NULL) { errmsg(2,rtnnme,"pattern") ; return ; } /* Print to stream id, assuming it's active and writeable. */ if (id != IOID_NOSTRM) { filblk = &filblks[id] ; if (flgon(filblk->modes,io_active) == FALSE) { errmsg(15,rtnnme,id) ; } else if (flgon(filblk->modes,io_write) == FALSE) { errmsg(17,rtnnme,dyio_idtopath(id)) ; } else { va_start(parms,pattern) ; (void) vfprintf(filblk->stream,pattern,parms) ; va_end(parms) ; } } /* Print to stdout if echo is TRUE and the stream id is not stdout. stdout is assumed active and writeable. */ if (echo == TRUE && id != dyio_pathtoid("stdout",NULL)) { va_start(parms,pattern) ; (void) vfprintf(stdout,pattern,parms) ; va_end(parms) ; } return ; } void dyio_outchr (ioid id, bool echo, char chr) /* This routine interfaces to the fputc function. Note that it traps chr == '\0' as an error. If id == 0 and echo == FALSE, nothing happens. If id == 0 and echo == TRUE, only stdout is affected. Parameters: id: stream id from dyio_openfile echo: TRUE to echo to user's tty, FALSE otherwise chr: character to be output Returns: undefined */ { FILE *strmid ; filblk_struct *filblk ; const char *rtnnme = "dyio_outchr" ; /* Sanity checks on the parameters. */ if (INVALID_IOID(id)) { errmsg(5,rtnnme,"i/o id",id) ; return ; } if (chr == '\0') { errmsg(2,rtnnme,"chr") ; return ; } /* Write the character to the stream, if it's active and writeable. */ if (id != IOID_NOSTRM) { filblk = &filblks[id] ; if (flgon(filblk->modes,io_active) == FALSE) { errmsg(15,rtnnme,id) ; } else if (flgon(filblk->modes,io_write) == FALSE) { errmsg(17,rtnnme,dyio_idtopath(id)) ; } else { strmid = filblk->stream ; putc(chr,filblks[id].stream) ; } } /* Write the character to stdout, if echo is TRUE and the stream id is not stdout. stdout is assumed to be active and writeable. */ if (echo == TRUE && id != dyio_pathtoid("stdout",NULL)) putc(chr,stdout) ; return ; } int dyio_outfxd (char *buffer, int fldsze, char lcr, const char *pattern, ... ) /* The form of the call should be dyio_outfxd (buffer,fldsze,lcr,pattern,parm1, ... parmn) The input to this routine is a varargs list comprising the name of a buffer, a field size, an 'lcr' (left/centre/right) character, and finally a pattern and parameter list to be used by vsprintf. 'lcr' is an indication of whether the output is to be left justified, centered, or right justified. Strings longer than the specified fieldsize are truncated. The maximum fieldsize is limited (arbitrarily) to FLDMAX characters, since we have to keep a hidden buffer (FLDMAX is 240 currently). Centering is the only real work here. Spaces is an array of FLDMAX spaces. A negative fldsze for left justification is interpreted to mean "don't pad, just truncate if necessary". Parameters: buffer: buffer area used to construct the field fldsze: desired size of the output field lcr: left-justified ('l'), centered ('c'), or right-justified ('r') pattern: output pattern, passed to printf parms: the parameters for the pattern Returns: the length of the string placed in the buffer; 0 is returned in the event of an error */ #define FLDMAX 240 { int count ; va_list parms ; static char ourbuf[FLDMAX+1] ; static char spaces[FLDMAX] ; int tlen,hlen ; bool pad ; static bool frstflg = TRUE ; const char *rtnnme = "dyio_outfxd" ; /* Load the spaces array just once. */ if (frstflg == TRUE) for (count = 0 ; count < FLDMAX ; count++) { *(spaces+count) = ' ' ; frstflg = FALSE ; } /* Do some sanity checks. */ if (buffer == NULL) { errmsg(2,rtnnme,"buffer") ; return (0) ; } pad = (fldsze < 0)? FALSE : TRUE ; fldsze = abs(fldsze) ; if (fldsze < 1 || fldsze > FLDMAX) { errmsg(5,rtnnme,"fldsze",fldsze) ; return (0) ; } if (lcr != 'l' && lcr != 'c' && lcr != 'r') { errmsg(3,rtnnme,"left/center/right",lcr) ; return (0) ; } if (pattern == NULL) { errmsg(2,rtnnme,"pattern") ; return (0) ; } /* vsprintf builds the user's string in ourbuf. Then use fldsze and lcr to construct the string we return to the user. */ va_start(parms,pattern) ; (void) vsprintf (ourbuf,pattern,parms) ; va_end(parms) ; tlen = (int) strlen(ourbuf) ; switch (lcr) { case 'l': { if (fldsze > tlen) { memcpy((void *) buffer,(void *) ourbuf,tlen) ; if (pad == TRUE) memcpy((void *) (buffer+tlen),(void *) spaces,fldsze-tlen) ; else fldsze = tlen ; } else { memcpy((void *) buffer,(void *) ourbuf,fldsze) ; } break ; } case 'c': { if (fldsze > tlen) { hlen = fldsze-tlen ; memcpy((void *) buffer,(void *) spaces,hlen>>1) ; memcpy((void *) (buffer+(hlen>>1)),(void *) ourbuf,tlen) ; memcpy((void *) (buffer+(hlen>>1)+tlen), (void *) spaces,hlen-(hlen>>1)) ; } else { memcpy((void *) buffer,(void *) ourbuf,fldsze) ; } break ; } case 'r': { if (fldsze > tlen) { memcpy((void *) buffer,(void *) spaces,fldsze-tlen) ; memcpy((void *) (buffer+fldsze-tlen),(void *) ourbuf,tlen) ; } else { memcpy((void *) buffer,(void *) ourbuf,fldsze) ; } break ; } } buffer[fldsze] = '\0' ; return (fldsze) ; } #undef FLDMAX #ifdef _DYLIB_FORTRAN /* WARNING! The Fortran hooks haven't been tested since the last millenium. It's highly unlikely that they still work. In particular, it seems likely that each call to vfprintf using the constructed varargs block should be bracked with va_start / va_end. */ void dyio_outfmt_ (integer *ftnid, logical *ftnecho, char *pattern, ... ) /* This routine provides a Fortran client with an interface to the vfprintf routine of ANSI C and the logging facilities of this i/o library. It deals with translating the argument types supplied by Fortran-to-C interface conventions into the arguments required by vfprintf. The method is to construct a new varargs block, which is handed over to vfprintf. To do this, we have to make the fragile assumption that a varargs block is constructed in a straightforward manner --- as data items written into a contiguous block of storage which we can allocate. There are more extensive comments with errmsg_ and warn_ in errs.c. The call over in Fortran will look like dyio_outfmt(id,echo,pattern,ftnargtype1,arg1, ... , ftnargtypen,argn,ftnargEND) The routine deals with a limited set of argument types: the Fortran types integer, double_precision, and character, and the special categories of variable and constraint names (the last two historical artifacts from the initial impetus for this routine -- the Fortran ylp library -- now replaced by dylp). A special type code is used to indicate the end of the list of pairs. If id == 0 and echo == FALSE, nothing happens. If id == 0 and echo == TRUE, only stdout is affected. (etc.) Parameters: ftnid: the i/o id ftnecho: true to echo output to stdout pattern: output pattern, passed to printf argtype, arg: the parameters for the pattern Returns: undefined */ { va_list fargs,varargp ; ioid id ; bool echo ; filblk_struct *filblk ; int type; double varargs[64] ; /* double avoids alignment problems */ int intarg ; double dblarg ; char *chararg ; const char *rtnnme = "dyio_outfmt_" ; /* Convert the stream id and echo values. */ id = (ioid) *ftnid ; echo = (*ftnecho == TRUEL)?TRUE:FALSE ; /* Sanity checks on stream id and pattern. */ if (INVALID_IOID(id)) { errmsg(5,rtnnme,"i/o id",id) ; return ; } if (id != IOID_NOSTRM) { filblk = &filblks[id] ; if (flgon(filblk->modes,io_active) == FALSE) { errmsg(15,rtnnme,id) ; return ; } if (flgon(filblk->modes,io_write) == FALSE) { errmsg(17,rtnnme,dyio_idtopath(id)) ; return ; } } if (pattern == NULL) { errmsg(2,rtnnme,"pattern") ; return ; } /* Now start up a loop to process the remainder of the arguments. For each pair, we pull off the type and use it to condition a switch with a case for each type of argument we're prepared to deal with. */ varargp = (va_list) &varargs[0] ; va_start(fargs,pattern) ; for (type = (int) *va_arg(fargs,integer *) ; type != ftnargEND ; type = (int) *va_arg(fargs,integer *)) switch (type) { case ftnargINTEGER: { intarg = (int) *va_arg(fargs,integer *) ; *((int *) varargp) = intarg ; if (intarg != va_arg(varargp,int)) { errmsg(1,rtnnme,__LINE__) ; return ; } break ; } case ftnargDOUBLE_PRECISION: { dblarg = (double) *va_arg(fargs,double_precision *) ; memcpy(varargp,&dblarg,sizeof(double)) ; if (dblarg != va_arg(varargp,double)) { errmsg(1,rtnnme,__LINE__) ; return ; } break ; } case ftnargCHARACTER: { chararg = va_arg(fargs,char *) ; *((char **) varargp) = chararg ; if (chararg != va_arg(varargp,char *)) { errmsg(1,rtnnme,__LINE__) ; return ; } break ; } default: { errmsg(7,rtnnme,__LINE__,"Fortran argument type code",type) ; return ; } } va_end(fargs) ; /* Finally, do the printing. Print to stdout if echo is TRUE. stdout is assumed active and writeable. */ if (id != IOID_NOSTRM) { (void) vfprintf(filblk->stream,pattern,((va_list) &varargs[0])) ; } if (echo == TRUE) { (void) vfprintf(stdout,pattern,((va_list) &varargs[0])) ; } return ; } #endif /* _DYLIB_FORTRAN */ DyLP-1.10.4/DyLP/src/DylpStdLib/dylib_errs.c0000644000175200017520000006273312253224475017007 0ustar coincoin/* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This is an error reporting/logging package. It contains routines to print formatted error and warning messages. The client passes a numeric identifier, along with any necessary parameters. The routines will look up the identifier in a file to find the associated error message and pass the message, with parameters, to printf. If the conditional compilation variable DYLP_NDEBUG is defined, the warn routine is converted to a complete noop. The error message file may be passed as a parameter to errinit, or specified using the environment variable ERRMSGTXT. Failing anything else, it will default to "errmsg.txt". In addition to reporting error messages via stderr, the package has provision for optionally logging error messages into a separate file, specified by elogchn. The conditional compilation variable _DYLIB_FORTRAN, when defined, will trigger the inclusion of code which provides an errmsg subroutine and interface usable from Fortran code. */ #include "dylib_std.h" static char sccsid[] UNUSED = "@(#)errs.c 3.13 11/11/04" ; static char svnid[] UNUSED = "$Id: dylib_errs.c 524 2013-12-15 03:59:57Z tkr $" ; #include #include #ifndef MALLOC #define MALLOC(zz_sze_zz) malloc(zz_sze_zz) #endif /* emsgchn is the channel used to access the error message text file; elogchn is the channel used to access an error log file. errecho controls whether error messages go to stderr. */ static FILE *emsgchn,*elogchn ; static char *emsgname,*elogname ; static bool errecho ; /* The text of an error message (the unexpanded pattern) can be no longer than MAXERRTXT. */ #define MAXERRTXT 240 #define ERRPFXLEN 13 static char errtxt[MAXERRTXT+ERRPFXLEN] = "\n%s (error): " ; #ifndef DYLP_NDEBUG #define WARNPFXLEN 15 static char warntxt[MAXERRTXT+WARNPFXLEN] = "\n%s (warning): " ; #endif /* Only errmsg_, warn_, and a small bit of initialisation in errinit need the declarations of fortran.h. The file xmp.h is peculiar to the bonsai code with Fortran ylp and la05 libraries. WARNING! The Fortran hooks haven't been tested since the last millenium. It's highly unlikely that they still work. */ #ifdef _DYLIB_FORTRAN # include "fortran.h" #endif void errinit (const char *emsgpath, char *elogpath, bool echo) /* This routine initializes the error reporting facilities. It attempts to open the error message file and an error logging file. Parameters: emsgpath: path name for the error message file (defaults to errmsg.txt) elogpath: path name for logging error messages (the default is to not log error messages) echo: TRUE if error messages should be echoed to stderr, FALSE otherwise. Returns: undefined */ { const char *rtnnme = "errinit" ; /* See if we can open a channel to the error message source text file. If we can't, we'll only be able to report routine names and error numbers. */ if (emsgpath == NULL) { emsgpath = getenv("ERRMSGTXT") ; if (emsgpath == NULL) emsgpath = "dy_errmsgs.txt" ; } emsgname = (char *) MALLOC(strlen(emsgpath)+1) ; strcpy(emsgname,emsgpath) ; emsgchn = fopen(emsgname,"r") ; if (emsgchn == NULL) { fprintf(stderr,"\n%s: couldn't open error message text file \"%s\".\n", rtnnme,emsgname) ; perror(rtnnme) ; fprintf(stderr,"\n%s: only numeric error codes will be reported.\n", rtnnme) ; } /* If a log file name has been supplied, try to open it. Keep the name locally for the benefit of errlogq, should it be called. */ if (elogpath == NULL) { elogchn = NULL ; elogname = NULL ; } else { elogname = (char *) MALLOC(strlen(elogpath)+1) ; strcpy(elogname,elogpath) ; elogchn = fopen(elogname,"w") ; if (elogchn == NULL) { fprintf(stderr,"\n%s: couldn't open error logging file \"%s\".\n", rtnnme,elogname) ; perror(rtnnme) ; } } errecho = echo ; #ifdef _DYLIB_FORTRAN /* Initialise a common block with the type codes used by Fortran when it calls errmsg_. */ argcod_.integer_code = ftnargINTEGER ; argcod_.double_precision_code = ftnargDOUBLE_PRECISION ; argcod_.character_code = ftnargCHARACTER ; argcod_.varname_code = ftnargVARNAME ; argcod_.conname_code = ftnargCONNAME ; argcod_.end_code = ftnargEND ; #endif return ; } void errterm (void) /* This routine cleans up data structures owned by the error package and closes the error file and log file, if present. Don't close stdin! ANSI stdio doesn't seem to provide a standard method for checking if a file is closed. A bit of testing says that ftell should be ok for testing normal files. Since we don't want to be closing stdin, stdout, or stderr, it's actually a feature to report an error for them. Parameters: none Returns: undefined. */ { char *rtnnme = "errterm" ; if (emsgchn != NULL && emsgchn != stdin && ftell(emsgchn) >= 0) { if (fclose(emsgchn) < 0) { fprintf(stderr,"\n%s: couldn't close error message file \"%s\".\n", emsgname,rtnnme) ; perror(rtnnme) ; } emsgchn = NULL ; } if (emsgname != NULL) { FREE(emsgname) ; emsgname = NULL ; } if (elogchn != NULL && elogchn != stdout && elogchn != stderr && ftell(elogchn) >= 0 ) { if (fclose(elogchn) < 0) { fprintf(stderr,"\n%s: couldn't close error log file \"%s\".\n", elogname,rtnnme) ; perror(rtnnme) ; } elogchn = NULL ; } if (elogname != NULL) { FREE(elogname) ; elogname = NULL ; } return ; } /* These next two routines are exported only to io.c in the default setup. They are used to allow the user to control the error log files through io.c */ FILE *errlogq (char **elogpath) /* This routine is here to keep the compartmentalisation of errs.c. Its sole purpose in life is to return the stdio FILE handle and path name for the error log file. Parameters: elogpath (o) Will be set to point to the name of the error log file, or NULL if no error log file is specified. Returns: the file handle, which will be NULL if no error log file exists. */ { *elogpath = elogname ; return (elogchn) ; } bool reseterrlogchn (const char *newpath, FILE *newchn, bool echo, bool close) /* Another routine solely dedicated to compartmentalisation. If newpath is non-NULL, the routine will reset the log file, opening it if newchn is NULL, otherwise using newchn. The errecho flag is set to echo. Parameters: newpath: new path for the log file; ignored if NULL newchn: new handle for the log file channel; ignored if NULL echo: TRUE if errors should be echoed to stderr, FALSE otherwise. close: TRUE of the old file should be closed, FALSE otherwise. Returns: TRUE if the new file is opened successfully, FALSE otherwise (note that failure to close the old file still gets a TRUE return) */ { bool success ; const char *rtnnme = "reseterrlogchn" ; /* If newchn is NULL, try to open the specified path. Retain the previous settings if we can't open the new file. If newchn isn't NULL, use it without question. There's the possibility the user has called us only to change the echo, in which case newpath will be NULL. */ success = TRUE ; if (newpath != NULL) { if (newchn == NULL) { newchn = fopen(newpath,"w") ; if (newchn == NULL) { fprintf(stderr,"\n%s: couldn't open error logging file \"%s\".\n", rtnnme,newpath) ; perror(rtnnme) ; fprintf(stderr,"\n%s: retaining previous file \"%s\".\n", rtnnme,elogname) ; success = FALSE ; } } if (success == TRUE) { if (close == TRUE) { if (fclose(elogchn) == EOF) { fprintf(stderr, "\n%s: couldn't close previous error logging file \"%s\".\n", rtnnme,elogname) ; perror(rtnnme) ; } } elogchn = newchn ; if (elogname != NULL) FREE(elogname) ; elogname = (char *) MALLOC(strlen(newpath)+1) ; strcpy(elogname,newpath) ; } } errecho = echo ; return (success) ; } static char *finderrmsg (int errid, char *buffer) /* This is a utility routine to search the error message file for the error message specified by errid. The format of an error message is: @@@ A line which has '@' as the first character is taken as the start of an error message. can be of the form or : and must be on one line. A newline immediately following the '@' which ends the error id line is stripped. Otherwise the message is free format, with "\" used to escape an '@' in the message text. The message text can be any number of lines. Comments can be inserted between error messages. The form : is intended as a convenience for leaving blocks of error message ids open for future use. The accompanying message text is used for all error numbers in the range. Parameter: errid: error message number buffer: (o) buffer to hold the message text; assumed to be of length MAXERRTXT or larger Returns: the error message, or NULL */ { int argcnt,chrcnt,id,id2,chr ; bool sync ; char *txtptr ; const char *rtnnme = "finderrmsg" ; /* Rewind to get in sync. Then scan for the '@' that introduces the message number. When it's found, scan the error id. If it's the right message, break out of the loop. If it's the wrong message, just scan till the '@' that closes the text, then iterate the search loop. EOF causes a break from the loop and a return. Anything else unexpected in the scan causes a sync ` error and a return.`, */ rewind(emsgchn) ; id = 0 ; sync = FALSE ; while (fgets(buffer,MAXERRTXT,emsgchn) != NULL) { if (buffer[0] != '@') continue ; argcnt = sscanf(buffer,"@%d%n:%d%n",&id,&chrcnt,&id2,&chrcnt) ; if ((argcnt == 1 || argcnt == 2) && buffer[chrcnt] == '@') { if ((argcnt == 1 && id == errid) || (argcnt == 2 && id <= errid && errid <= id2)) { sync = TRUE ; break ; } } else { fprintf(stderr,"\n%s: bad error message id format; line is:\n%s\n", rtnnme,buffer) ; fprintf(stderr,"\tskipping to start of next message.\n") ; } } if (sync == FALSE) { if (feof(emsgchn)) { fprintf(stderr,"\n%s: couldn't find error message %d.\n",rtnnme,errid) ; } else if (ferror(emsgchn)) { fprintf(stderr,"\n%s: i/o error.\n",rtnnme) ; perror(rtnnme) ; } else { fprintf(stderr,"\n%s: internal confusion at line %d.\n", rtnnme,__LINE__) ; } return (NULL) ; } /* We've found the message. Shift any remaining message text on this line up into the front of the buffer. If the end of the line is '@\n', and the @ isn't preceded by '\', write a null and return. Otherwise, start a loop to pick up any further lines of text. There's still a chance for EOF errors. */ txtptr = &buffer[chrcnt+1] ; if (*txtptr != '\n') { chrcnt = 0 ; while (*txtptr != '\0') { chr = *txtptr++ ; if (chr == '\\') chr = *txtptr++ ; buffer[chrcnt++] = chr ; } buffer[chrcnt] = '\0' ; txtptr = &buffer[strlen(buffer)-1] ; if (*txtptr == '\n' && *(txtptr-1) == '@' && *(txtptr-2) != '\\') { *(txtptr-1) = '\0' ; return (buffer) ; } else txtptr++ ; } else { txtptr = buffer ; } for (chr = getc(emsgchn) ; chr != EOF ; chr = getc(emsgchn)) { if (chr == '@') break ; if (chr == '\\') { chr = getc(emsgchn) ; if (chr == EOF) { fprintf(stderr, "\n%s: sync error - EOF following \"\\\" in message %d.\n", rtnnme,errid) ; return (NULL) ; } } *txtptr++ = chr ; } if (chr == EOF) { fprintf(stderr,"\n%s: sync error - EOF collecting text for message %d.\n", rtnnme,errid) ; return (NULL) ; } *txtptr = '\0' ; return (buffer) ; } void errmsg (int errid, ... ) /* Actual Call: errmsg(errid,ident,arg1, ... ,argn) errmsg is the error reporting function used by clients of this package. It prints a message with the format "ident: error message". errid identifies a printf-style error message template which is looked up in the error message text file. A variable number of parameters may follow ident; they are assumed to be compatible with the way vfprintf will interpret the error message template. The message is printed to stderr and to the error log file, if it is open. In the event that emsgchn indicates the error message file wasn't found, only the error number and ident are printed. Parameters: errid: number of the generic error message ident: string used to prefix the error message (usually a routine name or similar identifier) arg1,...: the arguments to be spliced into the error message template Returns: undefined */ { char *ident ; va_list varargs ; /* Flush stdout and elogchn, so that any buffered normal output appears before the error message. */ fflush(stdout) ; if (elogchn != NULL) fflush(elogchn) ; /* If there's no error message file, or we can't find the message, just print the error number. Otherwise call vfprintf to handle expanding the message text. */ if (emsgchn == NULL || finderrmsg(errid,&errtxt[ERRPFXLEN]) == NULL) { va_start(varargs,errid) ; ident = va_arg(varargs,char *) ; if (errecho == TRUE) fprintf(stderr,"\n%s: error %d.\n",ident,errid) ; if (elogchn != NULL) fprintf(elogchn,"\n%s: error %d.\n",ident,errid) ; va_end(varargs) ; } else { if (errecho == TRUE) { va_start(varargs,errid) ; vfprintf(stderr,errtxt,varargs) ; putc('\n',stderr) ; va_end(varargs) ; } if (elogchn != NULL) { va_start(varargs,errid) ; vfprintf(elogchn,errtxt,varargs) ; putc('\n',elogchn) ; va_end(varargs) ; } } /* Flush the logged error message, so that the user will definitely see it. */ if (elogchn != NULL) fflush(elogchn) ; return ; } #ifdef DYLP_NDEBUG void dywarn (int errid, ... ) { return ; } #else void dywarn (int errid, ... ) /* Actual Call: dywarn(errid,ident,arg1, ... ,argn) Warn is functionally identical to errmsg, but prints the message "ident (warning): warning message". Parameters: errid: number of the generic error message ident: string used to prefix the error message (usually a routine name or similar identifier) arg1,...: the arguments to be spliced into the error message template Returns: undefined */ { char *ident ; va_list varargs ; /* Flush stdout and elogchn, so that any buffered normal output appears before the error message. */ fflush(stdout) ; if (elogchn != NULL) fflush(elogchn) ; /* If there's no error message file, or we can't find the message, just print the error number. Otherwise call vfprintf to handle expanding the message text. */ if (emsgchn == NULL || finderrmsg(errid,&warntxt[WARNPFXLEN]) == NULL) { va_start(varargs,errid) ; ident = va_arg(varargs,char *) ; if (errecho == TRUE) fprintf(stderr,"\n%s: error %d.\n",ident,errid) ; if (elogchn != NULL) fprintf(elogchn,"\n%s: error %d.\n",ident,errid) ; va_end(varargs) ; } else { if (errecho == TRUE) { va_start(varargs,errid) ; vfprintf(stderr,warntxt,varargs) ; putc('\n',stderr) ; va_end(varargs) ; } if (elogchn != NULL) { va_start(varargs,errid) ; vfprintf(elogchn,warntxt,varargs) ; putc('\n',elogchn) ; va_end(varargs) ; } } /* Flush the logged error message, so that the user will definitely see it. */ if (elogchn != NULL) fflush(elogchn) ; return ; } #endif /* DYLP_NDEBUG */ #ifdef _DYLIB_FORTRAN /* WARNING! The Fortran hooks haven't been tested since the last millenium. It's highly unlikely that they still work. In current implementations, it's necessary to bracket each use of the varargs block by vfprintf with va_start / va_end, as in the errmsg and warn functions above. This is because use of the va_start macro steps the va_list pointer to the next argument. */ /* The two routines which follow, errmsg_ and warn_, are intended to be called from Fortran code. (The is also a companion routine, io.c:outfmt_.) This interface was created because early versions of the bonsai MILP code, written in C, used Fortran versions of the ylp and la05 subroutine libraries. The problem is that the things that Fortran will hand over cannot be passed directly to vfprintf - it passes pointers, vfprintf wants values for some things, pointers for others. This means we have to interpret the values passed from Fortran, writing our own varargs block to hand to vfprintf. To do this, we have to make the fragile assumption that a varargs block is constructed in a straightforward manner --- as data items written into a contiguous block of storage which we can allocate. Older versions of the varargs macros actually did this. With more recent versions, the assumption has become increasingly tenuous. As of GCC 2.96, gcc declares the varargs macros as builtins, with no hint of implementation. This hack has worked for some 10 years now, surviving ports to various architectures and the transition to ANSI C (varargs.h -> stdarg.h), but I'm starting to feel I'm pushing my luck. Fortunately, la05 has joined ylp in the dustbin, replaced by C basis maintenance code from glpk. At present (2005), this code is historical. Eventually it will disappear. The routines deal with a limited set of argument types: the Fortran types integer, double_precision, and character, and the special categories of variable and constraint names (these last two artifacts from the ylp LP code, the predecessor to dylp). A special type code is used to indicate the end of the list of arguments. Note that we simply ignore the length parameters which accompany the character strings (they follow ftnargEND as hidden parameters), under the assumption that an explict '\0' was placed at the end of each string when it was defined in the Fortran code. Older implementations of va_arg were written in such a way that you could actually write to va_arg(varargp,). This changed with GCC 2.96, necessitating the fancy two-step of writing to varargp, then advancing it. We need to use the value to make gcc shut up, so turn it to advantage as a check this hack is still working. Speed isn't an issue here. */ void errmsg_ (integer *errid, char *ident, ... ) /* This routine provides the functionality of errmsg to Fortran code. Its primary purpose in life is to take the Fortran arguments and put them into a varargs parameter block that is acceptable to vfprintf. As mentioned above, the method used is a little dubious. The call, over in Fortran, looks something like errmsg(errno,rtnnme,ftnargtype1,arg1, ... ,ftnargtypen,argn,ftnargEND) By the time it gets here, of course, it's all pointers, and there are additional arguments tacked on at the end for character string lengths. We ignore the string length arguments, and expect that a null terminator has been added explicitly over in the Fortran code. Parameters: as explained above Returns: undefined */ { va_list fargs,varargp ; int type ; double varargs[64] ; /* double avoids alignment problems */ int intarg ; double dblarg ; char *chararg ; char *rtnnme = "errmsg_" ; /* Flush stdout and elogchn, so that any buffered normal output appears before the error message. */ fflush(stdout) ; if (elogchn != NULL) fflush(elogchn) ; /* Initialise various pointers and indices. */ varargp = (va_list) &varargs[0] ; va_start(fargs,ident) ; /* Put the ident string into the varargs block. */ *((char **) varargp) = ident ; if (ident != va_arg(varargp,char *)) { errmsg(1,rtnnme,__LINE__) ; return ; } /* Now start up a loop to process the remainder of the arguments. For each pair, we pull off the type and use it to condition a switch with a case for each type of argument we're prepared to deal with. */ for (type = (int) *va_arg(fargs,integer *) ; type != ftnargEND ; type = (int) *va_arg(fargs,integer *)) switch (type) { case ftnargINTEGER: { intarg = (int) *va_arg(fargs,integer *) ; *((int *) varargp) = intarg ; if (intarg != va_arg(varargp,int)) { errmsg(1,rtnnme,__LINE__) ; return ; } break ; } case ftnargDOUBLE_PRECISION: { dblarg = (double) *va_arg(fargs,double_precision *) ; memcpy(varargp,&dblarg,sizeof(double)) ; if (dblarg != va_arg(varargp,double)) { errmsg(1,rtnnme,__LINE__) ; return ; } break ; } case ftnargCHARACTER: { chararg = va_arg(fargs,char *) ; *((char **) varargp) = chararg ; if (chararg != va_arg(varargp,char *)) { errmsg(1,rtnnme,__LINE__) ; return ; } break ; } default: { if (errecho == TRUE) fprintf(stderr, "\n%s: unrecognised Fortran argument type code %d.\n", rtnnme,type) ; if (elogchn != NULL) fprintf(elogchn, "\n%s: unrecognised Fortran argument type code %d.\n", rtnnme,type) ; return ; } } va_end(fargs) ; /* That's it for the preprocessing. The rest of this code is just a copy of the standard errmsg used by the C part of the code. If there's no error message file, or we can't find the message, just print the error number. Otherwise call vfprintf to handle expanding the message text. */ if (emsgchn == NULL || finderrmsg((int) *errid,&errtxt[ERRPFXLEN]) == NULL) { if (errecho == TRUE) fprintf(stderr,"\n%s: error %d.\n",ident,(int) *errid) ; if (elogchn != NULL) fprintf(elogchn,"\n%s: error %d.\n",ident,(int) *errid) ; } else { if (errecho == TRUE) { vfprintf(stderr,errtxt,((va_list) &varargs[0])) ; putc('\n',stderr) ; } if (elogchn != NULL) { vfprintf(elogchn,errtxt,((va_list) &varargs[0])) ; putc('\n',elogchn) ; } } /* Flush the logged error message, so that the user will definitely see it. */ if (elogchn != NULL) fflush(elogchn) ; return ; } #ifdef DYLP_NDEBUG void warn_ (integer *errid, char *ident, ... ) { return ; } #else void warn_ (integer *errid, char *ident, ... ) /* This routine provides the functionality of warn to Fortran code. Its primary purpose in life is to take the Fortran arguments and put them into a varargs parameter block that is acceptable to vfprintf. As mentioned above, the method used is a little dubious. The call, over in Fortran, looks something like dywarn(errno,rtnnme,ftnargtype1,arg1, ... ,ftnargtypen,argn,ftnargEND) By the time it gets here, of course, it's all pointers, and there are additional arguments tacked on at the end for character string lengths. We ignore the string length arguments, and expect that a null terminator has been added explicitly over in the Fortran code. Parameters: as explained above Returns: undefined */ { va_list fargs,varargp ; int type ; double varargs[64] ; /* double avoids alignment problems */ int intarg ; double dblarg ; char *chararg ; char *rtnnme = "warn_" ; /* Flush stdout and elogchn, so that any buffered normal output appears before the error message. */ fflush(stdout) ; if (elogchn != NULL) fflush(elogchn) ; /* Initialise various pointers and indices. */ varargp = (va_list) &varargs[0] ; va_start(fargs,ident) ; /* Put the ident string into the varargs block. */ *((char **) varargp) = ident ; if (ident != va_arg(varargp,char *)) { errmsg(1,rtnnme,__LINE__) ; return ; } /* Now start up a loop to process the remainder of the arguments. For each pair, we pull off the type and use it to condition a switch with a case for each type of argument we're prepared to deal with. */ for (type = (int) *va_arg(fargs,integer *) ; type != ftnargEND ; type = (int) *va_arg(fargs,integer *)) switch (type) { case ftnargINTEGER: { intarg = (int) *va_arg(fargs,integer *) ; *((int *) varargp) = intarg ; if (intarg != va_arg(varargp,int)) { errmsg(1,rtnnme,__LINE__) ; return ; } break ; } case ftnargDOUBLE_PRECISION: { dblarg = (double) *va_arg(fargs,double_precision *) ; memcpy(varargp,&dblarg,sizeof(double)) ; if (dblarg != va_arg(varargp,double)) { errmsg(1,rtnnme,__LINE__) ; return ; } break ; } case ftnargCHARACTER: { chararg = va_arg(fargs,char *) ; *((char **) varargp) = chararg ; if (chararg != va_arg(varargp,char *)) { errmsg(1,rtnnme,__LINE__) ; return ; } break ; } default: { if (errecho == TRUE) fprintf(stderr, "\n%s: unrecognised Fortran argument type code %d.\n", rtnnme,type) ; if (elogchn != NULL) fprintf(elogchn, "\n%s: unrecognised Fortran argument type code %d.\n", rtnnme,type) ; return ; } } va_end(fargs) ; /* That's it for the preprocessing. The rest of this code is just a copy of the standard warn used by the C part of the code. If there's no error message file, or we can't find the message, just print the error number. Otherwise call vfprintf to handle expanding the message text. */ if (emsgchn == NULL || finderrmsg((int) *errid,&warntxt[WARNPFXLEN]) == NULL) { if (errecho == TRUE) fprintf(stderr,"\n%s: error %d.\n",ident,(int) *errid) ; if (elogchn != NULL) fprintf(elogchn,"\n%s: error %d.\n",ident,(int) *errid) ; } else { if (errecho == TRUE) { vfprintf(stderr,warntxt,((va_list) &varargs[0])) ; putc('\n',stderr) ; } if (elogchn != NULL) { vfprintf(elogchn,warntxt,((va_list) &varargs[0])) ; putc('\n',elogchn) ; } } /* Flush the logged error message, so that the user will definitely see it. */ if (elogchn != NULL) fflush(elogchn) ; return ; } #endif /* DYLP_NDEBUG */ #endif /* _DYLIB_FORTRAN */ DyLP-1.10.4/DyLP/src/DylpStdLib/dylib_io.h0000644000175200017520000000563111507440660016437 0ustar coincoin#ifndef _DYLIB_IO_H #define _DYLIB_IO_H /* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* @(#)io.h 2.4 03/18/04 svn/cvs: $Id: dylib_io.h 407 2010-12-31 20:48:48Z lou $ */ #include "dylib_std.h" #ifdef _DYLIB_FORTRAN #include "dylib_fortran.h" #endif /* Common definitions for the i/o library packages. */ /* The file i/o routines in io.c use an integer i/o id to specify a stream. The only reason to have this typedef is clarity in the code (and the off chance that it might someday become a more complex type). i/o id's are positive integers, between 1 and FOPEN_MAX-2 (see io.c for details). */ typedef int ioid ; #define IOID_NOSTRM ((ioid) 0) #define IOID_INV ((ioid) -1) /* The lexeme structure, used for strings. Field Description ----- ----------- class The class of the lexeme. string The value of the lexeme. The values for class are drawn from the following set, defined below as the enum lexclass. Value Description ----- ----------- DY_LCNIL Null lexeme. DY_LCNUM A number. DY_LCID An identifier. DY_LCDEL A delimiter. DY_LCFS A fixed-length string. DY_LCQS A quoted string. DY_LCEOF Indicates end-of-file while trying to assemble a lexeme. DY_LCERR Indicates I/O error while trying to assemble a lexeme. */ typedef enum {DY_LCNIL,DY_LCNUM,DY_LCID,DY_LCDEL,DY_LCFS,DY_LCQS, DY_LCEOF,DY_LCERR} lexclass ; #ifdef __cplusplus typedef struct { lexclass clazz ; char *string ; } lex_struct ; #else typedef struct { lexclass class ; char *string ; } lex_struct ; #endif extern bool dyio_ioinit(void) ; extern void dyio_ioterm(void) ; extern ioid dyio_openfile(const char *path, const char *mode) ; extern bool dyio_isactive(ioid id) ; extern bool dyio_closefile(ioid id) ; extern bool dyio_setmode(ioid id, char mode), dyio_ttyq(ioid id) ; extern bool dyio_chgerrlog(const char *path, bool echo) ; extern const char *dyio_idtopath(ioid id) ; extern ioid dyio_pathtoid(const char *path, const char *mode) ; extern long dyio_mark(ioid id) ; extern bool dyio_backup(ioid id, long there) ; extern bool dyio_scan(ioid id, const char pattern[], bool rwnd, bool wrap) ; extern lex_struct *dyio_scanlex(ioid id), *dyio_scanstr(ioid id, lexclass stype, int fslen, char qschr, char qechr) ; extern void dyio_flushio(ioid id, bool echo), dyio_outfmt(ioid id, bool echo, const char *pattern, ... ), dyio_outchr(ioid id, bool echo, char chr) ; extern int dyio_outfxd(char *buffer, int fldsze, char lcr, const char *pattern, ... ) ; #ifdef _DYLIB_FORTRAN extern void dyio_outfmt_(integer *ftnid, logical *ftnecho, char *pattern, ... ) ; #endif #endif /* _DYLIB_IO_H */ DyLP-1.10.4/DyLP/src/DylpStdLib/dylib_bnfrdr.c0000644000175200017520000017312412253224475017306 0ustar coincoin/* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This module contains a set of routines which will parse input text and construct a data structure according to a bnf-like specification describing the input syntax and the data structure to be built. The routines do a top-down parse. The major deficiencies in the package at the present are that it cannot do arrays and it cannot back up over constructs that modify the user's data structure or generate labels. These seem restrictive at first glance but in practice have not been enough of a problem for me to expend the effort to fix them. */ #include "dylib_std.h" static char sccsid[] UNUSED = "@(#)bnfrdr.c 3.9 09/25/04" ; static char svnid[] UNUSED = "$Id: dylib_bnfrdr.c 524 2013-12-15 03:59:57Z tkr $" ; #include "dylib_io.h" #include "dylib_errs.h" #include "dylib_strrtns.h" #include "dylib_bnfrdr.h" /* curnde is always the node created by the currently active generator reference; cndesze is its size. newnde is the node returned by the most recent successfully parsed generator reference. curtxt is the text string being formed by the currently active primitive, newtxt is the most recently formed text string. NOTE: while dolist is active, it manipulates curnde and curtxt so that they are the previous list element and the cumulative text collected by the list. This is transparent on either side of dolist and need not be taken into account when writing bnfs. */ static void *curnde,*newnde ; static int cndesze ; static char *curtxt,*newtxt ; /* bnfchn is the input channel ; it is global to the module and set by parse so that we don't have to pass it around as a parameter. */ static ioid bnfchn ; /* savedtxt is a scratchpad array for keeping around useful text strings constructed while parsing the input. */ #define SAVE_SLOTS 10 static const char *savedtxt[SAVE_SLOTS+1] ; #ifndef DYLP_NDEBUG /* Debugging aids -- compiled in and ready for use unless DYLP_NDEBUG is defined. See comments on activating debugging prints in bnfrdr.h. nestlvl is the nesting level of bnf rule; if set to -1, no tabs are used. numlvl causes the nesting level to be printed at the left margin. tablvl causes indentation proportional to the nesting level. warnzlbl causes a warning to be issued if a socket/label evaluates to 0. printtab is over in bnfrdrio.c; it does indentation of the debug trace. */ extern void printtab(ioid dbgchn, bool dbgecho, int nestlvl, bool numlvl, bool tablvl) ; static int debug = 0 ; static ioid dbgchn = IOID_NOSTRM ; static bool dbgecho = TRUE ; static int nestlvl ; static bool warnzlbl = TRUE, numlvl = TRUE, tablvl = TRUE ; #endif /* DYLP_NDEBUG */ /* The reader maintains lists of sockets and labels, one list for defined and one list for undefined of each type. Entries are made on the defined lists by all socket and label definitions. Entries are made on the undefined lists by any socket or label reference where one of the socket or label is undefined. For entries on the defined lists, the fields are interpreted as follows: Field Description ----- ----------- lblnxt Next entry in this list. lblnmtxt The name of the socket/label. lblval The value of the socket/label. lbladv TRUE if this socket/label has been advanced (redefined), FALSE otherwise. For entries on the undefined lists, the fields are interpreted as follows: Field Description ----- ----------- lblnxt Next entry in this list. lblnmtxt The name of the socket/label. lblval The value of the defined label/socket from the reference. */ typedef struct deflbl_struct_tag { struct deflbl_struct_tag *lblnxt ; const char *lblnmtxt ; void *lblval ; bool lbladv ; } deflbl_struct ; typedef struct udeflbl_struct_tag { struct udeflbl_struct_tag *lblnxt ; const char *lblnmtxt ; void *lblval ; } udeflbl_struct ; /* The list heads. */ static deflbl_struct *blbllst,*flbllst ; static udeflbl_struct *ublbllst,*uflbllst ; /* Routines to access the saved text array. The major reason these are routines is to keep the error checking and string management in one place. They're just big enough that I don't want to insert the code inline each time. */ static void strenter (int ndx, const char *txt) /* This routine is used to insert text into the saved text array. Parameters: ndx: index in the saved text array txt: string to be saved Returns: undefined */ { const char *rtnnme = "strenter" ; /* Check out the parameters. */ if (ndx < 0 || ndx > SAVE_SLOTS) { errmsg(40,rtnnme,ndx,SAVE_SLOTS) ; return ; } if (txt == NULL) { errmsg(2,rtnnme,"txt") ; return ; } /* Clean out the slot, if necessary, and store the new pointer. */ if (savedtxt[ndx] != NULL) STRFREE(savedtxt[ndx]) ; savedtxt[ndx] = STRALLOC(txt) ; return ; } static const char *strretrv (int ndx) /* This routine is used to retrieve text from the stored text array. Parameter: ndx: index in the saved text array. Returns: The character string stored in savedtxt[ndx], or NULL if there is a problem. */ { const char *rtnnme = "strretrv" ; /* Check out the parameter. */ if (ndx < 0 || ndx > SAVE_SLOTS) { errmsg(40,rtnnme,ndx,SAVE_SLOTS) ; return (NULL) ; } /* Fetch back the text. */ if (savedtxt[ndx] == NULL) errmsg(51,rtnnme,ndx) ; return (savedtxt[ndx]) ; } /* A few useful macros. offset_in_range takes an offset and a size and checks whether the offset specified is in range for storing an object of the given size in curnde. make_label generates a pointer, and make_socket makes a socket (pointer to pointer) for storing things. */ #define offset_in_range(qq_off,qq_sze) \ (((qq_off) >= 0 && (qq_off) <= cndesze - ((int)(qq_sze)))?TRUE:FALSE) #define max_offset(qq_sze) \ (cndesze - (qq_sze)) #define make_label(qq_base,qq_offset) \ ((void *) ((ptrdiff_t) (qq_base) + (qq_offset))) #define make_socket(qq_base,qq_offset) \ ((void **) ((ptrdiff_t) (qq_base) + (qq_offset))) static deflbl_struct *finddlbl (deflbl_struct **lst, const char *txt) /* This routine searches for the label whose name is txt in the defined label list headed by lst. It does a simple linear search. It assumes that txt has not necessarily been entered in the literal tree, hence an actual string comparison is performed (case-independent). Parameters: lst: head of the label list txt: name of the label Returns: The entry for the label, or NULL if none is found. */ { deflbl_struct *lblent ; const char *rtnnme = "finddlbl" ; /* Check out the parameters. */ if (lst == NULL) { errmsg(2,rtnnme,"label list") ; return (NULL) ; } if (txt == NULL) { errmsg(2,rtnnme,"label name") ; return (NULL) ; } /* Search the list for the named entry. */ for (lblent = *lst ; lblent != NULL ; lblent = lblent->lblnxt) if (cistrcmp(lblent->lblnmtxt,txt) == 0) return (lblent) ; return (NULL) ; } static void lblresolve (udeflbl_struct **lst, deflbl_struct *dlbl) /* This routine searches an undefined label list for entries which can be resolved by the (presumably newly) defined label dlbl. The routine assumes that the text strings it considers will have been entered in the literal tree and thus compares pointers to test for equality. Parameters: lst: one of the undefined label lists. dlbl: a defined label Returns: undefined */ { udeflbl_struct **ulbl2,*ulbl1 ; const char *nmtxt ; void **socket ; const char *rtnnme = "lblresolve" ; /* Check out the parameters. */ if (lst == NULL) { errmsg(2,rtnnme,"label list") ; return ; } if (dlbl == NULL) { errmsg(2,rtnnme,"defined label") ; return ; } /* Search through the list, resolving any references we find. */ nmtxt = dlbl->lblnmtxt ; for (ulbl2 = lst, ulbl1 = *ulbl2 ; ulbl1 != NULL ; ulbl2 = &ulbl1->lblnxt, ulbl1 = *ulbl2) if (ulbl1->lblnmtxt == nmtxt) { *ulbl2 = ulbl1->lblnxt ; if (lst == &uflbllst) { socket = make_socket(dlbl->lblval,0) ; *socket = ulbl1->lblval ; } else { socket = make_socket(ulbl1->lblval,0) ; *socket = dlbl->lblval ; FREE((char *) ulbl1) ; } } return ; } void rdrinit (void) /* This routine initializes the bnf reader. Parameters: zerolbl: set to TRUE if the reader should issue a warning when a label evaluates to 0 Returns: undefined */ { int ndx ; curnde = NULL ; cndesze = 0 ; newnde = NULL ; curtxt = NULL ; newtxt = NULL ; for (ndx = 0 ; ndx < SAVE_SLOTS ; ndx++) savedtxt[ndx] = NULL ; flbllst = NULL ; blbllst = NULL ; uflbllst = NULL ; ublbllst = NULL ; return ; } void rdrclear (void) /* This routine clears the bnf reader by releasing the label lists and savedtxt array, and newtxt. It also makes two consistency checks: At the end of the parse, it should be true that curnde and curtxt are null. Parameters: none. Returns: undefined. */ { int ndx ; deflbl_struct *dlbl,*nxtdlbl ; udeflbl_struct *udlbl,*nxtudlbl ; const char *rtnnme = "rdrclear" ; for (dlbl = blbllst ; dlbl != NULL ; dlbl = nxtdlbl) { nxtdlbl = dlbl->lblnxt ; STRFREE(dlbl->lblnmtxt) ; FREE((char *) dlbl) ; } blbllst = NULL ; for (dlbl = flbllst ; dlbl != NULL ; dlbl = nxtdlbl) { nxtdlbl = dlbl->lblnxt ; STRFREE(dlbl->lblnmtxt) ; FREE((char *) dlbl) ; } flbllst = NULL ; for (udlbl = ublbllst ; udlbl != NULL ; udlbl = nxtudlbl) { nxtudlbl = udlbl->lblnxt ; STRFREE(udlbl->lblnmtxt) ; FREE((char *) udlbl) ; } ublbllst = NULL ; for (udlbl = uflbllst ; udlbl != NULL ; udlbl = nxtudlbl) { nxtudlbl = udlbl->lblnxt ; STRFREE(udlbl->lblnmtxt) ; FREE((char *) udlbl) ; } uflbllst = NULL ; for (ndx = 0 ; ndx < SAVE_SLOTS ; ndx++) { if (savedtxt[ndx] != NULL) STRFREE(savedtxt[ndx]) ; savedtxt[ndx] = NULL ; } if (newtxt != NULL) { FREE(newtxt) ; newtxt = NULL ; } if (curnde != NULL) dywarn(71,rtnnme,"curnde") ; if (curtxt != NULL) dywarn(71,rtnnme,"curtxt") ; return ; } /* The heart of the package, the routines which actually deal with the bnf constructs and build the user's data strucure. There is one routine to handle each type of bnf construct, plus a routine which handles lists. */ static bool dogenerator(bnfGref_struct *ref), dononprimitive(bnfNPref_struct *ref), doprimitive(bnfNPref_struct *ref), doterminal(bnfTref_struct *ref), doimmediate(bnfIref_struct *ref), doliteral(bnfLref_struct *ref), dolabel(bnfLBref_struct *ref), doreference(bnfLBref_struct *ref), dolist(bnfref_any ref) ; static bool dogenerator (bnfGref_struct *ref) /* This routine handles constructs of type generator. It checks to make sure that the reference and the definition are well-formed, then constructs the node as specified in the definition. It then enters a loop to parse the components of the body of the definition. Failure of the parse results in an error return. Parameter: ref: reference to a generator definition Result: TRUE if the parse succeeds, FALSE if it fails. */ { void *savcnde,**socket ; int savcndesze,compnum,compndx ; bnfGdef_struct *def ; bnfref_struct **comprefs ; bnfref_any compref ; bool success ; const char *rtnnme = "dogenerator" ; /* First test the reference to make sure that it references a generator. */ if (ref == NULL) { errmsg(2,rtnnme,"bnf ref") ; return (FALSE) ; } def = (bnfGdef_struct *) ref->defn ; if (def == NULL) { errmsg(33,rtnnme) ; return (FALSE) ; } if (def->type != bnfG) { errmsg(36,rtnnme) ; return (FALSE) ; } # ifndef DYLP_NDEBUG if (flgon(ref->uflgs,bnfdebug)) if (debug++ == 0) { dyio_outfmt(dbgchn,dbgecho,"\n\n>>>>>> trace begins >>>>>>\n") ; nestlvl = 0 ; } if (debug > 0) { nestlvl++ ; printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; prtbnfref(dbgchn,dbgecho,(bnfref_struct *) ref) ; dyio_outfmt(dbgchn,dbgecho," ::=\n") ; } # endif /* Now look at the storage spec. If we're not in a list, we check that any storage request is within curnde. It's an error if curnde is null. If the spec passes, we form the socket address. If we're in a list, then we assume that dolist is handling the linking and no storage is done here. */ if (flgon(ref->uflgs,bnfstore) == TRUE && flgoff(ref->uflgs,bnflst) == TRUE) { if (curnde == NULL) { errmsg(68,rtnnme) ; return (FALSE) ; } if (offset_in_range(ref->offset,sizeof(void *)) == FALSE) { errmsg(30,rtnnme,ref->offset,max_offset(sizeof(void *))) ; return (FALSE) ; } socket = make_socket(curnde,ref->offset) ; } else socket = NULL ; /* Now check that the definition has a valid size. If it passes, stack the old curnde and make the new one. Clearing the new node is not just being nice - it allows us to sidestep the issue of just what sort of NIL thing we're dealing with down in doterminal. */ if (def->size <= 0) { errmsg(31,rtnnme,def->size) ; return (FALSE) ; } savcnde = curnde ; savcndesze = cndesze ; cndesze = def->size ; curnde = (void *) MALLOC(cndesze) ; memset((void *) curnde,0,cndesze) ; /* Set up for the parse loop by getting the component array and extracting the number of components. */ comprefs = def->comps ; if (comprefs != NULL) { compnum = addrToInt(*comprefs++) ; compref.com = *comprefs++ ; } else compnum = 0 ; /* The main loop to handle the components. */ for (compndx = 0, success = TRUE ; compndx < compnum && success == TRUE ; compndx++, compref.com = *comprefs++) { if (compref.com == NULL) { errmsg(32,rtnnme,compndx+1,compnum) ; success = FALSE ; break ; } switch (compref.com->type) { case bnfG: { if (flgon(compref.G->uflgs,bnflst) == TRUE) success = dolist(compref) ; else success = dogenerator(compref.G) ; break ; } case bnfNP: { if (flgon(compref.NP->uflgs,bnflst) == TRUE) success = dolist(compref) ; else success = dononprimitive(compref.NP) ; break ; } case bnfP: { if (flgon(compref.P->uflgs,bnflst) == TRUE) success = dolist(compref) ; else success = doprimitive(compref.P) ; break ; } case bnfT: { success = doterminal(compref.T) ; break ; } case bnfI: { success = doimmediate(compref.I) ; break ; } case bnfL: { errmsg(34,rtnnme,"literal","generator") ; success = FALSE ; break ; } case bnfDS: case bnfDL: { success = dolabel(compref.LB) ; break ; } case bnfRS: case bnfRL: { success = doreference(compref.LB) ; break ; } default: { errmsg(35,rtnnme,compref.com->type) ; success = FALSE ; break ; } } } # ifndef DYLP_NDEBUG if (debug > 0) { if (success == FALSE) { printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; dyio_outfmt(dbgchn,dbgecho,"-- fail @ %d of %d --",compndx,compnum) ; } dyio_outchr(dbgchn,dbgecho,'\n') ; nestlvl-- ; if (flgon(ref->uflgs,bnfdebug)) if (--debug == 0) dyio_outfmt(dbgchn,dbgecho,"<<<<<< trace ends <<<<<<\n\n") ; } # endif /* If we've successfully parsed the components of the generator definition, update newnde and store a pointer to the new node if requested. */ if (success == TRUE) { if (socket != NULL) *socket = curnde ; newnde = curnde ; } /* Restore the old curnde and then return. */ curnde = savcnde ; cndesze = savcndesze ; return (success) ; } static bool dononprimitive (bnfNPref_struct *ref) /* This routine handles constructs of type non-primitive. It first checks to make sure that the reference is well-formed. Next, it creates a copy of curnde and marks the current position in the input stream for error recovery purposes. The actual parsing is handled by two nested loops. The outer loop sequences through the alternative parses, while the inner loop parses the components of each alternative. Parameter: ref: reference to a non-primitive definition Returns: TRUE if the non-primitive is successfully parsed, FALSE otherwise. */ { void *savcnde = NULL ; bnfNPdef_struct *def ; bnfref_struct ***altrefs,**comprefs ; bnfref_any compref ; int altnum,altndx,compnum,compndx ; long marker ; bool success ; const char *rtnnme = "dononprimitive" ; /* First test the reference to make sure that it references a non-primitive. */ if (ref == NULL) { errmsg(2,rtnnme,"bnf ref") ; return (FALSE) ; } def = (bnfNPdef_struct *) ref->defn ; if (def == NULL) { errmsg(33,rtnnme) ; return (FALSE) ; } if (def->type != bnfNP) { errmsg(38,rtnnme) ; return (FALSE) ; } # ifndef DYLP_NDEBUG if (flgon(ref->uflgs,bnfdebug)) if (debug++ == 0) { dyio_outfmt(dbgchn,dbgecho,"\n\n>>>>>> trace begins >>>>>>\n") ; nestlvl = 0 ; } if (debug > 0) { nestlvl++ ; printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; prtbnfref(dbgchn,dbgecho,(bnfref_struct *) ref) ; dyio_outfmt(dbgchn,dbgecho," ::=\n") ; } # endif /* Prepare for failure of an alternative parse. Mark the input and create a copy of curnde, so we can recover if a parse fails. */ marker = dyio_mark(bnfchn) ; if (curnde != NULL) { if (cndesze <= 0) { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } savcnde = (void *) MALLOC(cndesze) ; memcpy((void *) savcnde,(void *) curnde,cndesze) ; } /* Set up for the loop to do alternative parses by getting the alternative array and extracting the number of alternatives. */ altrefs = def->alts ; if (altrefs != NULL) { altnum = addrToInt(*altrefs++) ; comprefs = *altrefs++ ; } else { altnum = 0 ; comprefs = NULL ; } /* The outer loop to handle the alternatives. */ for (altndx = 0 ; altndx < altnum ; altndx++, comprefs = *altrefs++) /* Set up for the parse loop by getting the component array and extracting the number of components. It's an error if an alternative has no components. */ { # ifndef DYLP_NDEBUG if (debug > 0) { printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; dyio_outfmt(dbgchn,dbgecho, "[ alternative %d of %d ]\n",altndx+1,altnum) ; } # endif if (comprefs == NULL) { errmsg(37,rtnnme,altndx+1,altnum) ; break ; } else { compnum = addrToInt(*comprefs++) ; compref.com = *comprefs++ ; } /* The inner loop to handle the components of an alternative. */ for (compndx = 0, success = TRUE ; compndx < compnum && success == TRUE ; compndx++, compref.com = *comprefs++) { if (compref.com == NULL) { errmsg(32,rtnnme,compndx+1,compnum) ; success = FALSE ; break ; } switch (compref.com->type) { case bnfG: { if (flgon(compref.G->uflgs,bnflst) == TRUE) success = dolist(compref) ; else success = dogenerator(compref.G) ; break ; } case bnfNP: { if (flgon(compref.NP->uflgs,bnflst) == TRUE) success = dolist(compref) ; else success = dononprimitive(compref.NP) ; break ; } case bnfP: { if (flgon(compref.P->uflgs,bnflst) == TRUE) success = dolist(compref) ; else success = doprimitive(compref.P) ; break ; } case bnfT: { success = doterminal(compref.T) ; break ; } case bnfI: { success = doimmediate(compref.I) ; break ; } case bnfL: { errmsg(34,rtnnme,"literal","non-primitive") ; success = FALSE ; break ; } case bnfDS: case bnfDL: { success = dolabel(compref.LB) ; break ; } case bnfRS: case bnfRL: { success = doreference(compref.LB) ; break ; } default: { errmsg(35,rtnnme,compref.com->type) ; success = FALSE ; break ; } } } # ifndef DYLP_NDEBUG if (debug > 0) { printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; if (success == TRUE) { dyio_outfmt(dbgchn,dbgecho,"[ pass %d ]",altndx+1) ; nestlvl-- ; if (flgon(ref->uflgs,bnfdebug)) if (--debug == 0) dyio_outfmt(dbgchn,dbgecho,"<<<<<< trace ends <<<<<<\n\n") ; } else dyio_outfmt(dbgchn,dbgecho, "[ fail %d @ %d of %d ]",altndx+1,compndx,compnum) ; dyio_outchr(dbgchn,dbgecho,'\n') ; } # endif /* End loop to process the components of an alternative. If we've successfully parsed the alternative, clean up and return. Otherwise, back up the input and restore curnde. */ if (success == TRUE) { if (curnde != NULL) FREE((char *) savcnde) ; return (TRUE) ; } else { if (curnde != NULL) memcpy((void *) curnde,(void *) savcnde,cndesze) ; dyio_backup(bnfchn,marker) ; } } /* To get here, all the alternative parses have failed. Clean up and return failure. */ if (curnde != NULL) { memcpy((void *) curnde,(void *) savcnde,cndesze) ; FREE(savcnde) ; } # ifndef DYLP_NDEBUG if (debug > 0) { nestlvl-- ; if (flgon(ref->uflgs,bnfdebug)) if (--debug == 0) dyio_outfmt(dbgchn,dbgecho,"<<<<<< trace ends <<<<<<\n\n") ; } # endif return (FALSE) ; } static bool doprimitive (bnfNPref_struct *ref) /* This routine handles constructs of type primitive. It first checks to make sure that the reference is well-formed. Next, it creates a copy of curnde and marks the current position in the input stream for error recovery purposes. The actual parsing is handled by two nested loops. The outer loop sequences through the alternative parses, while the inner loop parses the components of each alternative. As each alternative is parsed, a text string is constructed which is the concatenation of the text strings returned by all terminals, literals, and primitives parsed for that alternative. If the parse is successful, a pointer to the string may be stored as indicated in the reference. Parameter: ref: reference to a primitive definition Returns: TRUE if the primitive is successfully parsed, FALSE otherwise. */ { void *savcnde = NULL ; void **socket ; char *savctxt,*lcltxt ; bnfPdef_struct *def ; bnfref_struct ***altrefs,**comprefs ; bnfref_any compref ; int altnum,altndx,compnum,compndx ; long marker ; bool success ; const char *rtnnme = "doprimitive" ; /* First test the reference to make sure that it references a primitive. */ if (ref == NULL) { errmsg(2,rtnnme,"bnf ref") ; return (FALSE) ; } def = (bnfPdef_struct *) ref->defn ; if (def == NULL) { errmsg(33,rtnnme) ; return (FALSE) ; } if (def->type != bnfP) { errmsg(39,rtnnme) ; return (FALSE) ; } # ifndef DYLP_NDEBUG if (flgon(ref->uflgs,bnfdebug)) if (debug++ == 0) { dyio_outfmt(dbgchn,dbgecho,"\n\n>>>>>> trace begins >>>>>>\n") ; nestlvl = 0 ; } if (debug > 0) { nestlvl++ ; printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; prtbnfref(dbgchn,dbgecho,(bnfref_struct *) ref) ; dyio_outfmt(dbgchn,dbgecho," ::=\n") ; } # endif /* Prepare for failure of an alternative parse. Mark the input and create a copy of curnde, so we can recover if a parse fails. Prepare for character string collection by stacking curtxt and creating a null string. curtxt is left NULL here and only made non-null while we're dealing with a terminal, literal, or primitive in the parse loop. */ marker = dyio_mark(bnfchn) ; if (curnde != NULL) { if (cndesze <= 0) { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } savcnde = (void *) MALLOC(cndesze) ; memcpy((void *) savcnde,(void *) curnde,cndesze) ; } savctxt = curtxt ; curtxt = NULL ; lcltxt = (char *) MALLOC(sizeof(char)) ; *lcltxt = '\0' ; /* Set up for the loop to do alternative parses by getting the alternative array and extracting the number of alternatives. */ altrefs = def->alts ; if (altrefs != NULL) { altnum = addrToInt(*altrefs++) ; comprefs = *altrefs++ ; } else { altnum = 0 ; comprefs = NULL ; } /* The outer loop to handle the alternatives. */ for (altndx = 0 ; altndx < altnum ; altndx++, comprefs = *altrefs++) /* Set up for the parse loop by getting the component array and extracting the number of components. It's an error if an alternative has no components. */ { # ifndef DYLP_NDEBUG if (debug > 0) { printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; dyio_outfmt(dbgchn,dbgecho, "[ alternative %d of %d ]\n",altndx+1,altnum) ; } # endif if (comprefs == NULL) { errmsg(37,rtnnme,altndx+1,altnum) ; break ; } else { compnum = addrToInt(*comprefs++) ; compref.com = *comprefs++ ; } /* The inner loop to handle the components of an alternative. */ for (compndx = 0, success = TRUE ; compndx < compnum && success == TRUE ; compndx++, compref.com = *comprefs++) { if (compref.com == NULL) { errmsg(32,rtnnme,compndx+1,compnum) ; success = FALSE ; break ; } switch (compref.com->type) { case bnfG: { if (flgon(compref.G->uflgs,bnflst) == TRUE) success = dolist(compref) ; else success = dogenerator(compref.G) ; break ; } case bnfNP: { if (flgon(compref.NP->uflgs,bnflst) == TRUE) success = dolist(compref) ; else success = dononprimitive(compref.NP) ; break ; } case bnfP: { curtxt = lcltxt ; if (flgon(compref.P->uflgs,bnflst) == TRUE) success = dolist(compref) ; else success = doprimitive(compref.P) ; lcltxt = curtxt ; curtxt = NULL ; break ; } case bnfT: { curtxt = lcltxt ; success = doterminal(compref.T) ; lcltxt = curtxt ; curtxt = NULL ; break ; } case bnfI: { success = doimmediate(compref.I) ; break ; } case bnfL: { curtxt = lcltxt ; success = doliteral(compref.L) ; lcltxt = curtxt ; curtxt = NULL ; break ; } case bnfDS: case bnfDL: { success = dolabel(compref.LB) ; break ; } case bnfRS: case bnfRL: { success = doreference(compref.LB) ; break ; } default: { errmsg(35,rtnnme,compref.com->type) ; success = FALSE ; break ; } } } # ifndef DYLP_NDEBUG if (debug > 0) { printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; if (success == TRUE) { dyio_outfmt(dbgchn,dbgecho,"[ pass %d ]",altndx+1) ; nestlvl-- ; if (flgon(ref->uflgs,bnfdebug)) if (--debug == 0) dyio_outfmt(dbgchn,dbgecho,"<<<<<< trace ends <<<<<<\n\n") ; } else dyio_outfmt(dbgchn,dbgecho, "[ fail %d @ %d of %d ]",altndx+1,compndx,compnum) ; dyio_outchr(dbgchn,dbgecho,'\n') ; } # endif /* End loop to process the components of an alternative. If we've successfully parsed the alternative, there are three actions to do. First, set newtxt to the collected text and restore the old curtxt. Next, store the new text as indicated in the reference. Finally, if curtxt is non-null, concatenate newtxt to it. For an unsuccussful parse, restore curnde, throw away the collected text, back up the input, and try again. */ if (success == TRUE) { if (newtxt != NULL) FREE(newtxt) ; newtxt = lcltxt ; curtxt = savctxt ; if (flgon(ref->uflgs,bnfstore) == TRUE && flgoff(ref->uflgs,bnflst) == TRUE) { if (flgon(ref->uflgs,bnfsv) == TRUE) { strenter(ref->offset,newtxt) ; } else { if (curnde == NULL) { errmsg(68,rtnnme) ; newtxt = NULL ; break ; } socket = make_socket(curnde,ref->offset) ; if (flgon(ref->uflgs,bnfatsgn) == TRUE) { if (offset_in_range(ref->offset,sizeof(char *)) == FALSE) { errmsg(30,rtnnme,ref->offset,max_offset(sizeof(char *))) ; newtxt = NULL ; break ; } *((const char **) socket) = STRALLOC(newtxt) ; } else { if (offset_in_range(ref->offset,strlen(newtxt)+1) == FALSE) { errmsg(30,rtnnme,ref->offset,max_offset(strlen(newtxt)+1)) ; newtxt = NULL ; break ; } (void) strcpy((char *) socket,newtxt) ; } } } if (curtxt != NULL && strlen(newtxt) > 0) { savctxt = (char *) MALLOC(strlen(curtxt)+strlen(newtxt)+1) ; (void) strcpy(savctxt,curtxt) ; (void) strcat(savctxt,newtxt) ; FREE(curtxt) ; curtxt = savctxt ; } if (curnde != NULL) FREE((char *) savcnde) ; return (TRUE) ; } else { if (curnde != NULL) memcpy((void *) curnde,(void *) savcnde,cndesze) ; *lcltxt = '\0' ; dyio_backup(bnfchn,marker) ; } } /* To get here, all the alternative parses have failed or an error was detected which caused the alternatives loop to abort. Clean up and return failure. */ if (curnde != NULL) { memcpy((void *) curnde,(void *) savcnde,cndesze) ; FREE(savcnde) ; } FREE(lcltxt) ; curtxt = savctxt ; # ifndef DYLP_NDEBUG if (debug > 0) { nestlvl-- ; if (flgon(ref->uflgs,bnfdebug)) if (--debug == 0) dyio_outfmt(dbgchn,dbgecho,"<<<<<< trace ends <<<<<<\n\n") ; } # endif return (FALSE) ; } static int scanbinary (const char *string, int *intp) /* Quick and dirty routine to convert a binary number from string form to internal representation. Has the same behaviour as sscanf. Parameters: string: string to be scanned intp: pointer to location where an integer can be stored. Returns: 1 if the number is successfully converted, 0 otherwise. */ { const char *ptr ; int val ; if (string == NULL) return 0 ; val = 0 ; for (ptr = string ; *ptr != '\0' ; ptr++) { if (*ptr != '0' && *ptr != '1') return (0) ; val = (val<<1)+*ptr-'0' ; } *intp = val ; return (1) ; } bool doterminal (bnfTref_struct *ref) /* This routine handles constructs of type terminal. It checks to be sure the reference and definition are well-formed, then scans the required terminal from the input stream. The terminal scanned must be the type requested and, if an expected string is provided, the terminal must match this string. The value is then converted to internal form if necessary and stored as directed in the reference. Parameter: ref: reference to a terminal definition Returns: TRUE if the terminal is successfully parsed, FALSE otherwise. */ { bnfTdef_struct *def ; lex_struct *lex = NULL ; void **socket ; char *lcltxt ; int cnt ; bool success ; const char *rtnnme = "doterminal" ; static lex_struct lex_nil = {DY_LCNIL,NULL} ; /* From stdio.h */ extern int sscanf(const char *str, const char *format, ...) ; /* First test the reference to make sure that it references a terminal. We'll put off testing for correct storage spec 'til further down when we sort out just what will be stored. */ if (ref == NULL) { errmsg(2,rtnnme,"bnf ref") ; return (FALSE) ; } def = (bnfTdef_struct *) ref->defn ; if (def == NULL) { errmsg(33,rtnnme) ; return (FALSE) ; } if (def->type != bnfT) { errmsg(41,rtnnme) ; return (FALSE) ; } # ifndef DYLP_NDEBUG if (flgon(ref->uflgs,bnfdebug)) if (debug++ == 0) dyio_outfmt(dbgchn,dbgecho,"\n\n>>>>>> trace begins >>>>>>\n") ; if (debug > 0) { nestlvl++ ; printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; prtbnfref(dbgchn,dbgecho,(bnfref_struct *) ref) ; nestlvl-- ; } # endif /* Call the appropriate scanner to scan the terminal from the input. We check here to make sure that we got the class of thing that we expected and abort if we didn't. */ success = TRUE ; switch (def->ttype) { case bnfttNIL: { lex = &lex_nil ; break ; } case bnfttN: { lex = dyio_scanlex(bnfchn) ; if (lex->class != DY_LCNUM) success = FALSE ; break ; } case bnfttID: { lex = dyio_scanlex(bnfchn) ; if (lex->class != DY_LCID) success = FALSE ; break ; } case bnfttD: { lex = dyio_scanlex(bnfchn) ; if (lex->class != DY_LCDEL) success = FALSE ; break ; } case bnfttF: { lex = dyio_scanstr(bnfchn,DY_LCFS,def->parm1,'\0','\0') ; if (lex->class != DY_LCFS) success = FALSE ; break ; } case bnfttQ: { lex = dyio_scanstr(bnfchn,DY_LCQS,0,def->qschr,def->qechr) ; if (lex->class != DY_LCQS && lex->class != DY_LCNIL) success = FALSE ; break ; } default: { errmsg(42,rtnnme,def->ttype) ; success = FALSE ; break ; } } # ifndef DYLP_NDEBUG if (debug > 0) { if (lex->string != NULL) dyio_outfmt(dbgchn,dbgecho," = \"%s\"\n",lex->string) ; else dyio_outfmt(dbgchn,dbgecho," = nil\n") ; if (flgon(ref->uflgs,bnfdebug)) if (--debug == 0) dyio_outfmt(dbgchn,dbgecho,"<<<<<< trace ends <<<<<<\n\n") ; } # endif if (success == FALSE) return (FALSE) ; if (def->val != NULL) { if (lex->class == DY_LCNIL) return (FALSE) ; if (flgon(ref->uflgs,bnfcs) == TRUE) { if (flgon(ref->uflgs,bnfmin) == TRUE) { if (mstrcmp(lex->string,def->val) != 0) return (FALSE) ; } else { if (strcmp(lex->string,def->val) != 0) return (FALSE) ; } } else { if (flgon(ref->uflgs,bnfmin) == TRUE) { if (cimstrcmp(lex->string,def->val) != 0) return (FALSE) ; } else { if (cistrcmp(lex->string,def->val) != 0) return (FALSE) ; } } } /* Deal with the terminal as instructed by the storage instructions. We can either store a pointer to the text string or convert the string to some internal representation and store it. We don't have to worry about just what sort of thing any null object represents, since the whole node is zeroed when it is created. */ if (flgon(ref->uflgs,bnfstore) == TRUE) { socket = make_socket(curnde,ref->offset) ; if (flgon(ref->uflgs,bnfatsgn) == TRUE) { if (offset_in_range(ref->offset,sizeof(char *)) == FALSE) { errmsg(30,rtnnme,ref->offset,max_offset(sizeof(char *))) ; return (FALSE) ; } if (lex->class != DY_LCNIL) { *((const char **) socket) = STRALLOC(lex->string) ; } } else switch (def->ttype) { case bnfttNIL: { break ; } case bnfttN: { if (flgon(ref->uflgs,bnfflt) == TRUE) { if (offset_in_range(ref->offset,sizeof(float)) == FALSE) { errmsg(30,rtnnme,ref->offset,max_offset(sizeof(float))) ; return (FALSE) ; } if (def->parm1 != 10) { errmsg(46,rtnnme,def->parm1,"float") ; return (FALSE) ; } cnt = sscanf(lex->string,"%f",(float *) socket) ; } else if (flgon(ref->uflgs,bnfdbl) == TRUE) { if (offset_in_range(ref->offset,sizeof(double)) == FALSE) { errmsg(30,rtnnme,ref->offset,max_offset(sizeof(double))) ; return (FALSE) ; } if (def->parm1 != 10) { errmsg(46,rtnnme,def->parm1,"double") ; return (FALSE) ; } cnt = sscanf(lex->string,"%lf",(double *) socket) ; } else { if (offset_in_range(ref->offset,sizeof(int)) == FALSE) { errmsg(30,rtnnme,ref->offset,max_offset(sizeof(int))) ; return (FALSE) ; } switch (def->parm1) { case 10: { cnt = sscanf(lex->string,"%d",(int *) socket) ; break ; } case 8: { if (*lex->string == '#') cnt = sscanf(lex->string+1,"%o",(unsigned int *) socket) ; else cnt = sscanf(lex->string,"%o",(unsigned int *) socket) ; break ; } case 2: { cnt = scanbinary(lex->string,(int *) socket) ; break ; } default: { errmsg(46,rtnnme,def->parm1,"int") ; return (FALSE) ; } } } if (cnt != 1) { errmsg(45,rtnnme,lex->string) ; return (FALSE) ; } break ; } case bnfttID: { if (offset_in_range(ref->offset,strlen(lex->string)+1) == FALSE) { errmsg(30,rtnnme,ref->offset,max_offset(strlen(lex->string)+1)) ; return (FALSE) ; } (void) strcpy((char *) socket,lex->string) ; break ; } case bnfttD: { if (offset_in_range(ref->offset,sizeof(char)) == FALSE) { errmsg(30,rtnnme,ref->offset,max_offset(sizeof(char))) ; return (FALSE) ; } *((char *) socket) = *lex->string ; break ; } case bnfttF: { if (flgon(ref->uflgs,bnfexact) == TRUE) { if (offset_in_range(ref->offset,strlen(lex->string)) == FALSE) { errmsg(30,rtnnme,ref->offset,max_offset(strlen(lex->string))) ; return (FALSE) ; } (void) strncpy((char *) socket,lex->string,def->parm1) ; } else { if (offset_in_range(ref->offset,strlen(lex->string)+1) == FALSE) { errmsg(30,rtnnme,ref->offset,max_offset(strlen(lex->string)+1)) ; return (FALSE) ; } (void) strcpy((char *) socket,lex->string) ; } break ; } case bnfttQ: { if (offset_in_range(ref->offset,strlen(lex->string)+1) == FALSE) { errmsg(30,rtnnme,ref->offset,max_offset(strlen(lex->string)+1)) ; return (FALSE) ; } if (lex->class != DY_LCNIL) (void) strcpy((char *) socket,lex->string) ; break ; } } } /* The last thing to do is see if there is an active primitive collecting text, and if so concatenate our string onto it. */ if (curtxt != NULL && lex->class != DY_LCNIL) { lcltxt = (char *) MALLOC(strlen(curtxt)+strlen(lex->string)+1) ; (void) strcpy(lcltxt,curtxt) ; (void) strcat(lcltxt,lex->string) ; FREE(curtxt) ; curtxt = lcltxt ; } return (TRUE) ; } bool doimmediate (bnfIref_struct *ref) /* This routine handles constructs of type immediate. It checks to make sure that the reference is well-formed, then stores the value specified in the definition into the field specified in the reference. Parameter: ref: reference to an immediate definition. Returns: TRUE if the value is successfully stored, FALSE otherwise. */ { void **socket ; bnfIdef_struct *def ; const char *rtnnme = "doimmediate" ; /* First test the reference to make sure that it references an immediate and that the storage offset is in bounds. */ if (ref == NULL) { errmsg(2,rtnnme,"bnf ref") ; return (FALSE) ; } def = (bnfIdef_struct *) ref->defn ; if (def == NULL) { errmsg(33,rtnnme) ; return (FALSE) ; } if (def->type != bnfI) { errmsg(47,rtnnme) ; return (FALSE) ; } # ifndef DYLP_NDEBUG if (flgon(ref->uflgs,bnfdebug)) if (debug++ == 0) dyio_outfmt(dbgchn,dbgecho,"\n\n>>>>>> trace begins >>>>>>\n") ; if (debug > 0) { nestlvl++ ; printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; prtbnfref(dbgchn,dbgecho,(bnfref_struct *) ref) ; dyio_outfmt(dbgchn,dbgecho,"\n") ; nestlvl-- ; if (flgon(ref->uflgs,bnfdebug)) if (--debug == 0) dyio_outfmt(dbgchn,dbgecho,"<<<<<< trace ends <<<<<<\n\n") ; } # endif if (offset_in_range(ref->offset,sizeof(int)) == FALSE) { errmsg(30,rtnnme,ref->offset,max_offset(sizeof(int))) ; return (FALSE) ; } /* Do the store. */ socket = make_socket(curnde,ref->offset) ; *((int *) socket) = def->ival ; return (TRUE) ; } bool doliteral (bnfLref_struct *ref) /* This routine handles constructs of type literal. It checks to make sure that the reference is well-formed, then concatenates the string requested onto curtxt. Parameter: ref: reference to a literal definition. Returns: TRUE if the string is successfully added to curtxt, FALSE otherwise. */ { bnfLdef_struct *def ; const char *txt ; char *txt2 ; const char *rtnnme = "doliteral" ; /* First test the reference to make sure that it references a literal. Also check on how the literal is to be obtained. Finally, make sure that we're in an active primitive. */ if (ref == NULL) { errmsg(2,rtnnme,"bnf ref") ; return (FALSE) ; } def = (bnfLdef_struct *) ref->defn ; if (def == NULL) { errmsg(33,rtnnme) ; return (FALSE) ; } if (def->type != bnfL) { errmsg(48,rtnnme) ; return (FALSE) ; } # ifndef DYLP_NDEBUG if (flgon(ref->uflgs,bnfdebug)) if (debug++ == 0) dyio_outfmt(dbgchn,dbgecho,"\n\n>>>>>> trace begins >>>>>>\n") ; if (debug > 0) { nestlvl++ ; printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; prtbnfref(dbgchn,dbgecho,(bnfref_struct *) ref) ; nestlvl-- ; } # endif if (flgon(def->dflgs,bnfsvnm) == TRUE) txt = strretrv(addrToInt(def->txt)) ; else txt = def->txt ; # ifndef DYLP_NDEBUG if (debug > 0) { if (txt != NULL) dyio_outfmt(dbgchn,dbgecho," = \"%s\"\n",txt) ; else dyio_outfmt(dbgchn,dbgecho," = nil\n") ; if (flgon(ref->uflgs,bnfdebug)) if (--debug == 0) dyio_outfmt(dbgchn,dbgecho,"<<<<<< trace ends <<<<<<\n\n") ; } # endif if (txt == NULL) { errmsg(49,rtnnme) ; return (FALSE) ; } if (curtxt == NULL) { errmsg(50,rtnnme) ; return (FALSE) ; } /* It looks OK, so go ahead and get the text and concatenate it to curtxt. */ txt2 = (char *) MALLOC(strlen(curtxt)+strlen(txt)+1) ; (void) strcpy(txt2,curtxt) ; (void) strcat(txt2,txt) ; FREE(curtxt) ; curtxt = txt2 ; return (TRUE) ; } bool dolabel (bnfLBref_struct *ref) /* This routine handles socket and label definitions. It first checks to make sure defid is a label definition. Next the name field is processed to form the string which will be the name of the label, and the node field is processed to obtain the value of the label. The offset field from the definition is added to the value obtained from the node field to come up with the final value of the label. The routine then searches for the label in the appropriate defined label list. If it is not defined, it is added to the list. If it is defined, the routine checks to see if this definition is a redefinition (advance) of the label. If it is, the label is redefined. If the current definition is not flagged as a redefinition but the existing label is, the label is not redefined. If neither the old or new labels are flagged as advances the old label is redefined. The appropriate undefined label list is searched if the label is a new definition or the base definition of a currently existing label flagged as an advance. Parameter: ref: reference to a label definition. Returns: TRUE if the label definition was processed without error, FALSE otherwise. */ { bnfLBdef_struct *def ; const char *nmtxt,*ndtxt ; deflbl_struct *lblnde ; void *lblval ; const char *rtnnme = "dolabel" ; /* First test the reference to make sure that it references a label definition. */ if (ref == NULL) { errmsg(2,rtnnme,"bnf ref") ; return (FALSE) ; } def = (bnfLBdef_struct *) ref->defn ; if (def == NULL) { errmsg(33,rtnnme) ; return (FALSE) ; } if (def->type != bnfDS && def->type != bnfDL) { errmsg(52,rtnnme) ; return (FALSE) ; } # ifndef DYLP_NDEBUG if (flgon (ref->uflgs,bnfdebug)) if (debug++ == 0) dyio_outfmt(dbgchn,dbgecho,"\n\n>>>>>> trace begins >>>>>>\n") ; if (debug > 0) { nestlvl++ ; printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; prtbnfref(dbgchn,dbgecho,(bnfref_struct *) ref) ; dyio_outchr(dbgchn,dbgecho,'\n') ; nestlvl++ ; printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; dyio_outfmt(dbgchn,dbgecho,"[ name ]") ; } # endif /* Process the name parameters to get the name of the label. */ switch (def->nmcd) { case bnfncBNF: { if (def->nmsrc == NULL) { errmsg(53,rtnnme,"name") ; return (FALSE) ; } if (doprimitive((bnfPref_struct *) def->nmsrc) == FALSE) { errmsg(56,rtnnme,"name") ; return (FALSE) ; } nmtxt = newtxt ; if (flgon(def->dflgs,bnfsvnm) == TRUE) strenter(def->savnm,nmtxt) ; break ; } case bnfncS: { nmtxt = strretrv(addrToInt(def->nmsrc)) ; break ; } default: { errmsg(55,rtnnme,def->nmcd,"name") ; return (FALSE) ; } } if (nmtxt == NULL) { errmsg(57,rtnnme,"name") ; return (FALSE) ; } nmtxt = STRALLOC(nmtxt) ; # ifndef DYLP_NDEBUG if (debug > 0) { printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; dyio_outfmt(dbgchn,dbgecho,"[ \"%s\" ]\n",nmtxt) ; printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; dyio_outfmt(dbgchn,dbgecho,"[ value ]\n") ; printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; } # endif /* Now process the value parameters to get the label value. */ switch (def->ndcd) { case bnfncBNF: { if (def->ndsrc == NULL) { errmsg(53,rtnnme,"value") ; STRFREE(nmtxt) ; return (FALSE) ; } if (doprimitive((bnfPref_struct *) def->ndsrc) == FALSE) { errmsg(56,rtnnme,"value") ; STRFREE(nmtxt) ; return (FALSE) ; } ndtxt = newtxt ; lblnde = finddlbl(&blbllst,ndtxt) ; if (lblnde == NULL) { if (ndtxt == NULL) errmsg(57,rtnnme,"value") ; else errmsg(54,rtnnme,ndtxt) ; STRFREE(nmtxt) ; return (FALSE) ; } if (flgon(def->dflgs,bnfsvnd) == TRUE) strenter(def->savnd,ndtxt) ; lblval = lblnde->lblval ; break ; } case bnfncC: { lblval = curnde ; break ; } case bnfncN: { lblval = newnde ; break ; } case bnfncS: { ndtxt = strretrv(addrToInt(def->ndsrc)) ; lblnde = finddlbl(&blbllst,ndtxt) ; if (lblnde == NULL) { if (ndtxt == NULL) errmsg(57,rtnnme,"value") ; else errmsg(54,rtnnme,ndtxt) ; STRFREE(nmtxt) ; return (FALSE) ; } lblval = lblnde->lblval ; break ; } default: { errmsg(55,rtnnme,def->nmcd,"value") ; STRFREE(nmtxt) ; return (FALSE) ; } } /* Form the full label from the value plus the offset. Warn the user if it evaluates to NULL. */ lblval = make_label(lblval,def->offset) ; # ifndef DYLP_NDEBUG if (lblval == NULL && warnzlbl == TRUE) dywarn(58,rtnnme,nmtxt) ; if (debug > 0) { printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; dyio_outfmt(dbgchn,dbgecho,"[ value: %#1x ]\n",nmtxt) ; nestlvl -= 2 ; if (flgon(ref->uflgs,bnfdebug)) if (--debug == 0) dyio_outfmt(dbgchn,dbgecho,"<<<<<< trace ends <<<<<<\n\n") ; } # endif /* Now search for the label in the appropriate defined label list. */ if (def->type == bnfDS) lblnde = finddlbl(&flbllst,nmtxt) ; else lblnde = finddlbl(&blbllst,nmtxt) ; /* Enter in the appropriate list if the label was previously undefined. Redefine the present entry if it is not an advance, or if the label we're now defining is flagged to be an advance of the present entry. */ if (lblnde == NULL) { lblnde = (deflbl_struct *) MALLOC(sizeof(deflbl_struct)) ; if (def->type == bnfDS) { lblnde->lblnxt = flbllst ; flbllst = lblnde ; } else { lblnde->lblnxt = blbllst ; blbllst = lblnde ; } lblnde->lbladv = flgon(def->dflgs,bnfadv) ; lblnde->lblnmtxt = nmtxt ; lblnde->lblval = lblval ; } else { if (flgon(def->dflgs,bnfadv) == TRUE || lblnde->lbladv == FALSE) { lblnde->lblval = lblval ; lblnde->lbladv = flgon(def->dflgs,bnfadv) ; } } /* Now check the appropriate undefined label lists to see if we can resolve any entries. */ if (flgoff(def->dflgs,bnfadv) == TRUE) { if (def->type == bnfDS) lblresolve(&uflbllst,lblnde) ; else lblresolve(&ublbllst,lblnde) ; } return (TRUE) ; } bool doreference (bnfLBref_struct *ref) /* This routine handles references to sockets and labels. Each is handled in basically the same manner, with the exception that for a socket reference, the label to be stored in the socket must be defined, and for a label reference, the socket which will hold the label must be defined. The routine first checks to make sure that defid is a socket/label reference. It then processes nmsrc to obtain the socket and ndsrc to obtain the label. It completes the reference by making the necessary assignment (if both the socket and the label are defined) or by making an entry on the appropriate undefined list. Parameter: ref: reference to a label reference Returns: TRUE if the actions described above are completed successfully, FALSE otherwise. */ { bnfLBdef_struct *def ; const char *nmtxt = NULL ; const char *ndtxt = NULL ; deflbl_struct *lblnde ; udeflbl_struct *ulblnde ; void *val,**socket ; bool socket_valid,val_valid ; const char *rtnnme = "doreference" ; /* First test the reference to make sure that it references a label reference. */ if (ref == NULL) { errmsg(2,rtnnme,"bnf ref") ; return (FALSE) ; } def = (bnfLBdef_struct *) ref->defn ; if (def == NULL) { errmsg(33,rtnnme) ; return (FALSE) ; } if (def->type != bnfRS && def->type != bnfRL) { errmsg(52,rtnnme) ; return (FALSE) ; } # ifndef DYLP_NDEBUG if (flgon (ref->uflgs,bnfdebug)) if (debug++ == 0) dyio_outfmt(dbgchn,dbgecho,"\n\n>>>>>> trace begins >>>>>>\n") ; if (debug > 0) { nestlvl++ ; printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; prtbnfref(dbgchn,dbgecho,(bnfref_struct *) ref) ; dyio_outchr(dbgchn,dbgecho,'\n') ; nestlvl++ ; printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; dyio_outfmt(dbgchn,dbgecho,"[ socket ]") ; } # endif /* Now process the nm parameters to get the value of the socket. */ socket_valid = TRUE ; switch (def->nmcd) { case bnfncBNF: { if (def->nmsrc == NULL) { errmsg(59,rtnnme,"socket") ; return (FALSE) ; } if (doprimitive((bnfPref_struct *) def->nmsrc) == FALSE) { errmsg(60,rtnnme,"socket") ; return (FALSE) ; } nmtxt = newtxt ; if (nmtxt == NULL) { errmsg(61,rtnnme,"socket") ; return (FALSE) ; } lblnde = finddlbl(&flbllst,nmtxt) ; if (lblnde == NULL) { socket = NULL ; socket_valid = FALSE ; } else socket = make_socket(lblnde->lblval,0) ; if (flgon(def->dflgs,bnfsvnm) == TRUE) strenter(def->savnm,nmtxt) ; break ; } case bnfncC: { socket = make_socket(curnde,def->offset) ; break ; } case bnfncN: { socket = make_socket(newnde,def->offset) ; break ; } case bnfncS: { nmtxt = strretrv(addrToInt(def->nmsrc)) ; if (nmtxt == NULL) { errmsg(61,rtnnme,"socket") ; return (FALSE) ; } lblnde = finddlbl(&flbllst,nmtxt) ; if (lblnde == NULL) { socket = NULL ; socket_valid = FALSE ; } else socket = make_socket(lblnde->lblval,0) ; break ; } default: { errmsg(64,rtnnme,def->nmcd,"socket") ; return (FALSE) ; } } if (socket_valid == TRUE && socket == NULL) { errmsg(62,rtnnme) ; return (FALSE) ; } # ifndef DYLP_NDEBUG if (debug > 0) { printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; dyio_outfmt(dbgchn,dbgecho,"[ \"%s\" = %#1x ]\n",nmtxt) ; printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; dyio_outfmt(dbgchn,dbgecho,"[ label ]\n") ; printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; } # endif /* And do the same for the nd parameters to get the label to be stored in the socket. */ val_valid = TRUE ; switch (def->ndcd) { case bnfncBNF: { if (def->ndsrc == NULL) { errmsg(59,rtnnme,"value") ; return (FALSE) ; } if (doprimitive((bnfPref_struct *) def->ndsrc) == FALSE) { errmsg(60,rtnnme,"value") ; return (FALSE) ; } ndtxt = newtxt ; if (ndtxt == NULL) { errmsg(61,rtnnme,"value") ; return (FALSE) ; } lblnde = finddlbl(&blbllst,ndtxt) ; if (lblnde == NULL) { val = NULL ; val_valid = FALSE ; } else val = make_label(lblnde->lblval,0) ; if (flgon(def->dflgs,bnfsvnd) == TRUE) strenter(def->savnd,ndtxt) ; break ; } case bnfncC: { val = make_label(curnde,def->offset2) ; break ; } case bnfncN: { val = make_label(newnde,def->offset2) ; break ; } case bnfncS: { ndtxt = strretrv(addrToInt(def->ndsrc)) ; if (ndtxt == NULL) { errmsg(61,rtnnme,"value") ; return (FALSE) ; } lblnde = finddlbl(&blbllst,ndtxt) ; if (lblnde == NULL) { val = NULL ; val_valid = FALSE ; } else val = make_label(lblnde->lblval,0) ; break ; } default: { errmsg(64,rtnnme,def->ndcd,"value") ; return (FALSE) ; } } # ifndef DYLP_NDEBUG if (warnzlbl == TRUE && val == NULL && val_valid == TRUE) dywarn(65,rtnnme) ; if (debug > 0) { printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; dyio_outfmt(dbgchn,dbgecho,"[ \"%s\" = %#1x ]\n",nmtxt) ; nestlvl -= 2 ; if (flgon(ref->uflgs,bnfdebug)) if (--debug == 0) dyio_outfmt(dbgchn,dbgecho,"<<<<<< trace ends <<<<<<\n\n") ; } # endif /* Complete the reference if both the socket and the label are defined, or make an entry in the proper undefined list. */ if (def->type == bnfRS) { if (val_valid == FALSE) { errmsg(63,rtnnme) ; return (FALSE) ; } if (socket_valid == TRUE) *socket = val ; else { ulblnde = (udeflbl_struct *) MALLOC(sizeof(udeflbl_struct)) ; ulblnde->lblnxt = uflbllst ; uflbllst = ulblnde ; ulblnde->lblnmtxt = STRALLOC(nmtxt) ; ulblnde->lblval = val ; } } else { if (socket_valid == FALSE) { errmsg(66,rtnnme) ; return (FALSE) ; } if (val_valid == TRUE) *socket = val ; else { ulblnde = (udeflbl_struct *) MALLOC(sizeof(udeflbl_struct)) ; ulblnde->lblnxt = ublbllst ; ublbllst = ulblnde ; ulblnde->lblnmtxt = STRALLOC(ndtxt) ; ulblnde->lblval = (void *) socket ; } } return (TRUE) ; } bool dolist (bnfref_any ref) /* This routine handles the -LIST construct (applicable to generators, non-primitives, and primitives). It first checks to be sure that the definition and separator specified by ref are of the correct type. If both check out, the routine enters a loop, doing first the body of the definition, then the separator. The loop terminates successfully when the separator parse fails. It terminates unsuccessfully when the main parse fails. Parameter: ref: bnf reference flagged as a list construct (bnflst) Returns: TRUE if the list parses successfully, FALSE otherwise. */ { bnfref_struct *sepref ; bnfdef_any def ; void **socket ; bool firsttime,success,sepsuccess ; void *savcnde = NULL ; void *firstnde = NULL ; char *savctxt = NULL ; char *lclsavtxt = NULL ; long marker ; const char *rtnnme = "dolist" ; /* Consistency checks. First check that we're dealing with the proper bnf reference types for the separator. Errors in body type will be caught below as part of the loop setup. */ if (ref.t3 == NULL) { errmsg(2,rtnnme,"bnf ref") ; return (FALSE) ; } sepref = ref.t3->sep ; if (sepref->type != bnfP && sepref->type != bnfT) { errmsg(67,rtnnme) ; return (FALSE) ; } # ifndef DYLP_NDEBUG if (flgon(ref.t3->uflgs,bnfdebug)) if (debug++ == 0) { dyio_outfmt(dbgchn,dbgecho,"\n\n>>>>>> trace begins >>>>>>\n") ; nestlvl = 0 ; } if (debug > 0) { nestlvl++ ; printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; dyio_outfmt(dbgchn,dbgecho,"[ begin list ]\n") ; } # endif /* Set up for the loop which will process the list. Nothing needs to be done for non-primitives. For generators, we want to check out the reference storage spec and the link storage spec. We put curnde out of the way so we can link the list up properly. For primitives, we can check the reference storage spec now only if we're storing a pointer to the string. A request for storage of the actual string is checked after the end of the parsing loop. We also need to put curtxt out of the way so that we can properly collect the text from all primitives in the loop. */ def.com = ref.t3->defn ; switch (def.com->type) { case bnfG: { if (flgon(ref.G->uflgs,bnfstore) == TRUE) { if (curnde == NULL) { errmsg(68,rtnnme) ; return (FALSE) ; } if (offset_in_range(ref.G->offset,sizeof(void *)) == FALSE) { errmsg(30,rtnnme,ref.G->offset,max_offset(sizeof(void *))) ; return (FALSE) ; } } if (def.G->link < 0 || def.G->link > def.G->size - ((int) sizeof(void *))) { errmsg(69,rtnnme,def.G->link,def.G->size-sizeof(void *)) ; return (FALSE) ; } savcnde = curnde ; break ; } case bnfP: { if (flgon(ref.P->uflgs,bnfstore) == TRUE) { if (curnde == NULL) { errmsg(68,rtnnme) ; return (FALSE) ; } if (flgon(ref.P->uflgs,bnfatsgn) == TRUE) if (offset_in_range(ref.P->offset,sizeof(char *)) == FALSE) { errmsg(30,rtnnme,ref.P->offset,max_offset(sizeof(char *))) ; return (FALSE) ; } } savctxt = curtxt ; curtxt = (char *) MALLOC(sizeof(char)) ; *curtxt = '\0' ; break ; } case bnfNP: { break ; } default: { errmsg(70,rtnnme,def.com->type) ; return (FALSE) ; } } /* Now we come to the processing loop. First we try to parse a list element according to the body bnf. If this fails, the loop aborts and we return an error. If an element is parsed, then an attempt is made to parse the separator. If this succeeds, the loop prepares for the next iteration and repeats. If the separator parse fails, it is taken to indicate the end of the list and we fall out of the loop to the post-processing. */ firsttime = TRUE ; while (1) { # ifndef DYLP_NDEBUG if (debug > 0) { printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; dyio_outfmt(dbgchn,dbgecho,"[ body ]\n") ; } # endif switch (def.com->type) { case bnfG: { success = dogenerator(ref.G) ; break ; } case bnfNP: { success = dononprimitive(ref.NP) ; break ; } case bnfP: { success = doprimitive(ref.P) ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; return (FALSE) ; } } if (success == FALSE) break ; if (def.com->type == bnfG) { if (firsttime == TRUE) { firstnde = newnde ; firsttime = FALSE ; } else { socket = make_socket(curnde,def.G->link) ; *socket = newnde ; } curnde = newnde ; } marker = dyio_mark(bnfchn) ; if (flgon(ref.t3->uflgs,bnfstbg) == TRUE && def.com->type == bnfP) { lclsavtxt = curtxt ; curtxt = NULL ; } # ifndef DYLP_NDEBUG if (debug > 0) { printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; dyio_outfmt(dbgchn,dbgecho,"[ separator ]\n") ; } # endif if (sepref->type == bnfP) sepsuccess = doprimitive((bnfPref_struct *) sepref) ; else sepsuccess = doterminal((bnfTref_struct *) sepref) ; if (sepsuccess == FALSE) { if (sepref->type == bnfT) dyio_backup(bnfchn,marker) ; if (flgon(ref.t3->uflgs,bnfstbg) == TRUE && def.com->type == bnfP) curtxt = lclsavtxt ; break ; } if (flgon(ref.t3->uflgs,bnfstbg) == TRUE) { dyio_backup(bnfchn,marker) ; if (def.com->type == bnfP) curtxt = lclsavtxt ; } } /* End of the loop to parse the list. Now we clean up and return. For generators, we have to restore curnde and link the head of the list onto it. For primitives, we need to look at storing the collected text, then restore curtxt and concatenate the collected text to it, if necessary. */ switch (def.com->type) { case bnfG: { if (success == TRUE) { newnde = firstnde ; curnde = savcnde ; if (flgon(ref.G->uflgs,bnfstore) == TRUE) { socket = make_socket(curnde,ref.G->offset) ; *socket = firstnde ; } } else { curnde = savcnde ; } break ; } case bnfP: { if (success == TRUE) { if (newtxt != NULL) FREE(newtxt) ; newtxt = curtxt ; curtxt = savctxt ; if (flgon(ref.P->uflgs,bnfstore) == TRUE) { if (flgon(ref.P->uflgs,bnfsv) == TRUE) { strenter(ref.P->offset,newtxt) ; } else { socket = make_socket(curnde,ref.P->offset) ; if ( flgon(ref.P->uflgs,bnfatsgn) == TRUE) { *((const char **) socket) = STRALLOC(newtxt) ; } else { if (offset_in_range(ref.P->offset,strlen(newtxt)+1) == FALSE) { errmsg(30,rtnnme,ref.P->offset,max_offset(strlen(newtxt)+1)) ; FREE(newtxt) ; newtxt = NULL ; return (FALSE) ; } (void) strcpy((char *) socket,newtxt) ; } } } if (curtxt != NULL) { lclsavtxt = (char *) MALLOC(strlen(curtxt)+strlen(newtxt)+1) ; (void) strcpy(lclsavtxt,curtxt) ; (void) strcat(lclsavtxt,newtxt) ; FREE(curtxt) ; curtxt = lclsavtxt ; } } else { FREE(curtxt) ; curtxt = savctxt ; } break ; } default: { break ; } } # ifndef DYLP_NDEBUG if (debug > 0) { printtab(dbgchn,dbgecho,nestlvl,numlvl,tablvl) ; dyio_outfmt(dbgchn,dbgecho,"[ end list ]\n") ; nestlvl-- ; if (flgon(ref.t3->uflgs,bnfdebug)) if (--debug == 0) dyio_outfmt(dbgchn,dbgecho,"<<<<<< trace ends <<<<<<\n\n") ; } # endif return (success) ; } bool parse (ioid chn, struct bnfref_type3 *bnfid, parse_any *result) /* This routine is used to access the bnf reader to parse input. Parameters: chn: Id of the input stream, obtained from openfile bnfid: Bnf to be used to parse the input. The top-level construct must be either a generator, non-primitive, or primitive (which allows us to get away with bnfref_type3 as the common type, otherwise we'd be forced to void). result: Will be assigned the data structure or character string built by the parse. Returns: TRUE if the parse succeeds, FALSE otherwise. Note that the value built by the parse is returned in result. */ { bool success ; bnfref_any ref ; const char *rtnnme = "parse" ; /* Make sure we have a valid bnf reference, and some place to put the result for generators and primitives. */ if (bnfid == NULL) { errmsg(2,rtnnme,"bnf") ; return (FALSE) ; } ref.t3 = bnfid ; if (ref.com->type != bnfG && ref.com->type != bnfNP && ref.com->type != bnfP) { errmsg(43,rtnnme) ; return (FALSE) ; } if (ref.com->type != bnfNP) if (result == NULL) { errmsg(2,rtnnme,"result") ; return (FALSE) ; } /* Now set the input channel, call the appropriate routine to do the parse, and return the result. */ bnfchn = chn ; switch (ref.com->type) { case bnfG: { if (flgon(ref.G->uflgs,bnflst) == TRUE) success = dolist(ref) ; else success = dogenerator(ref.G) ; if (success == TRUE) result->g = newnde ; break ; } case bnfNP: { if (flgon(ref.NP->uflgs,bnflst) == TRUE) success = dolist(ref) ; else success = dononprimitive(ref.NP) ; break ; } case bnfP: { if (flgon(ref.P->uflgs,bnflst) == TRUE) success = dolist(ref) ; else success = doprimitive(ref.P) ; if (success == TRUE) result->c = newtxt ; break ; } default: { errmsg(1,rtnnme,__LINE__) ; success = FALSE ; break ; } } return (success) ; } # ifndef DYLP_NDEBUG void bnfdbgctl (ioid dbgchn_p, bool dbgecho_p, bool warnzlbl_p, bool numlvl_p, bool tablvl_p) /* By default the debugging trace warns about labels that evaluate to NULL, and (once triggered by the bnfdebug flag in a reference) prints trace lines prefixed with the nesting level and proportionally indented. The output will go to stdout only. This routine allows the behaviour to be changed. Parameters: dbgchn: i/o id for trace output (default IOID_NOSTRM) dbgecho: TRUE to echo trace output to stdout (default TRUE) warnzero: TRUE to produce warning messages for null labels (default TRUE) numlvl: TRUE to prefix trace lines with the nesting level (default TRUE) tablvl: TRUE to indent trace lines proportional to the nesting level (default TRUE) */ { dbgchn = dbgchn_p ; dbgecho = dbgecho_p ; warnzlbl = warnzlbl_p ; numlvl = numlvl_p ; tablvl = tablvl_p ; } # endif /* DYLP_NDEBUG */ DyLP-1.10.4/DyLP/src/DylpStdLib/Makefile.in0000644000175200017520000005420512506276701016545 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = src/DylpStdLib DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/config_dylp.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c_add_to_includes.m4 \ $(top_srcdir)/m4/ac_c_get_sunpro_libs.m4 \ $(top_srcdir)/m4/ac_dylp_equiv_for_cpp_bool.m4 \ $(top_srcdir)/m4/ac_dylp_find_fp_funcs.m4 \ $(top_srcdir)/m4/ac_dylp_fix_cppflags.m4 \ $(top_srcdir)/m4/ac_dylp_options.m4 \ $(top_srcdir)/m4/ac_osidylp_options.m4 \ $(top_srcdir)/acinclude.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_dylp.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libDylpStdLib_la_LIBADD = am_libDylpStdLib_la_OBJECTS = dylib_binsrch.lo dylib_bnfrdr.lo \ dylib_bnfrdrio.lo dylib_errs.lo dylib_hash.lo dylib_io.lo \ dylib_littab.lo dylib_strrtns.lo libDylpStdLib_la_OBJECTS = $(am_libDylpStdLib_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libDylpStdLib_la_SOURCES) DIST_SOURCES = $(libDylpStdLib_la_SOURCES) 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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(includecoindir)" includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_OSITESTS_FALSE = @COIN_HAS_OSITESTS_FALSE@ COIN_HAS_OSITESTS_TRUE = @COIN_HAS_OSITESTS_TRUE@ COIN_HAS_OSI_FALSE = @COIN_HAS_OSI_FALSE@ COIN_HAS_OSI_TRUE = @COIN_HAS_OSI_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ DYLPLIB_LIBS = @DYLPLIB_LIBS@ DYLPLIB_LIBS_INSTALLED = @DYLPLIB_LIBS_INSTALLED@ DYLPLIB_PCLIBS = @DYLPLIB_PCLIBS@ DYLP_ERRMSGDIR = @DYLP_ERRMSGDIR@ DYLP_SVN_REV = @DYLP_SVN_REV@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIDYLPLIB_CFLAGS = @OSIDYLPLIB_CFLAGS@ OSIDYLPLIB_CFLAGS_INSTALLED = @OSIDYLPLIB_CFLAGS_INSTALLED@ OSIDYLPLIB_DEPENDENCIES = @OSIDYLPLIB_DEPENDENCIES@ OSIDYLPLIB_LIBS = @OSIDYLPLIB_LIBS@ OSIDYLPLIB_LIBS_INSTALLED = @OSIDYLPLIB_LIBS_INSTALLED@ OSIDYLPLIB_PCLIBS = @OSIDYLPLIB_PCLIBS@ OSIDYLPLIB_PCREQUIRES = @OSIDYLPLIB_PCREQUIRES@ OSITESTS_CFLAGS = @OSITESTS_CFLAGS@ OSITESTS_CFLAGS_INSTALLED = @OSITESTS_CFLAGS_INSTALLED@ OSITESTS_DATA = @OSITESTS_DATA@ OSITESTS_DATA_INSTALLED = @OSITESTS_DATA_INSTALLED@ OSITESTS_DEPENDENCIES = @OSITESTS_DEPENDENCIES@ OSITESTS_LIBS = @OSITESTS_LIBS@ OSITESTS_LIBS_INSTALLED = @OSITESTS_LIBS_INSTALLED@ OSI_CFLAGS = @OSI_CFLAGS@ OSI_CFLAGS_INSTALLED = @OSI_CFLAGS_INSTALLED@ OSI_DATA = @OSI_DATA@ OSI_DATA_INSTALLED = @OSI_DATA_INSTALLED@ OSI_DEPENDENCIES = @OSI_DEPENDENCIES@ OSI_LIBS = @OSI_LIBS@ OSI_LIBS_INSTALLED = @OSI_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libDylpStdLib # ######################################################################## # Name of the library compiled in this directory. We don't want it to be # installed since it will be included in the libDylp library noinst_LTLIBRARIES = libDylpStdLib.la # List all source files for this library, including headers libDylpStdLib_la_SOURCES = \ DylpConfig.h \ dylib_binsrch.c \ dylib_bnfrdr.c dylib_bnfrdr.h \ dylib_bnfrdrio.c \ dylib_errs.c dylib_errs.h \ dylib_fortran.h \ dylib_hash.c dylib_hash.h \ dylib_io.c dylib_io.h \ dylib_keytab.h \ dylib_littab.c \ dylib_std.h \ dylib_strrtns.c dylib_strrtns.h # This is for libtool libDylpStdLib_la_LDFLAGS = $(LT_LDFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ dylib_errs.h \ dylib_hash.h \ dylib_io.h \ dylib_std.h \ dylib_strrtns.h all: config.h config_dylp.h $(MAKE) $(AM_MAKEFLAGS) 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/DylpStdLib/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/DylpStdLib/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 config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status src/DylpStdLib/config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h1 touch $@ config_dylp.h: stamp-h2 @if test ! -f $@; then \ rm -f stamp-h2; \ $(MAKE) stamp-h2; \ else :; fi stamp-h2: $(srcdir)/config_dylp.h.in $(top_builddir)/config.status @rm -f stamp-h2 cd $(top_builddir) && $(SHELL) ./config.status src/DylpStdLib/config_dylp.h distclean-hdr: -rm -f config.h stamp-h1 config_dylp.h stamp-h2 clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libDylpStdLib.la: $(libDylpStdLib_la_OBJECTS) $(libDylpStdLib_la_DEPENDENCIES) $(LINK) $(libDylpStdLib_la_LDFLAGS) $(libDylpStdLib_la_OBJECTS) $(libDylpStdLib_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dylib_binsrch.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dylib_bnfrdr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dylib_bnfrdrio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dylib_errs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dylib_hash.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dylib_io.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dylib_littab.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dylib_strrtns.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in config_dylp.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in config_dylp.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in config_dylp.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in config_dylp.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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) $(HEADERS) config.h config_dylp.h installdirs: for dir in "$(DESTDIR)$(includecoindir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-exec-local install-info: install-info-am install-man: 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: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-local .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES ctags 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-exec install-exec-am \ install-exec-local install-includecoinHEADERS install-info \ install-info-am install-man 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 uninstall uninstall-am uninstall-includecoinHEADERS \ uninstall-info-am uninstall-local install-exec-local: $(install_sh_DATA) config_dylp.h $(DESTDIR)$(includecoindir)/DylpConfig.h uninstall-local: rm -f $(DESTDIR)$(includecoindir)/DylpConfig.h # 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: DyLP-1.10.4/DyLP/src/DylpStdLib/dylib_strrtns.c0000644000175200017520000000700611507440660017540 0ustar coincoin/* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This file contains general purpose string manipulation routines. */ #include "dylib_std.h" static char sccsid[] UNUSED = "@(#)strrtns.c 1.5 09/25/04" ; static char svnid[] UNUSED = "$Id: dylib_strrtns.c 407 2010-12-31 20:48:48Z lou $" ; int cistrcmp (const char *str1, const char *str2) /* This routine compares two strings. It is insensitive to case ; both strings are converted to upper case before the comparison. Parameters: str1,str2: pointers to strings to be compared. strings should be null terminated Return value: -1 str1 lexicographically less than str2 0 str1 lexicographically equal to str2 1 str1 lexicographically greater than str2 */ { char cnv1,cnv2 ; while (!(*str1 == '\0' && *str2 == '\0')) { if (*str1 >= 'a' && *str1 <= 'z') cnv1 = *str1++-('a'-'A') ; else cnv1 = *str1++ ; if (*str2 >= 'a' && *str2 <= 'z') cnv2 = *str2++-('a'-'A') ; else cnv2 = *str2++ ; if (cnv1 < cnv2) return (-1) ; if (cnv1 > cnv2) return (1) ; } return (0) ; } int cimstrcmp (const char *str1, const char *str2) /* This routine compares two strings. It is insensitive to case ; both strings are converted to upper case before the comparison. If str1 is shorter than str2 but equal up to its end, this routine reports it as equal. Parameters: str1,str2: pointers to strings to be compared. strings should be null terminated Return value: -1 str1 lexicographically less than str2 0 str1 lexicographically equal to str2 (as described above) 1 str1 lexicographically greater than str2 */ { char cnv1,cnv2 ; while (!(*str1 == '\0' && *str2 == '\0')) { if (*str1 >= 'a' && *str1 <= 'z') cnv1 = *str1++-('a'-'A') ; else cnv1 = *str1++ ; if (*str2 >= 'a' && *str2 <= 'z') cnv2 = *str2++-('a'-'A') ; else cnv2 = *str2++ ; if (cnv1 < cnv2) { if (cnv1 == '\0') return (0) ; else return (-1) ; } if (cnv1 > cnv2) return (1) ; } return (0) ; } int mstrcmp (const char *str1, const char *str2) /* This routine compares two strings. If str1 is shorter than str2 but equal up to its end, this routine reports it as equal. The comparison is case sensitive. Parameters: str1,str2: pointers to strings to be compared. strings should be null terminated Return value: -1 str1 lexicographically less than str2 0 str1 lexicographically equal to str2 (as described above) 1 str1 lexicographically greater than str2 */ { for ( ; !(*str1 == '\0' && *str2 == '\0') ; str1++,str2++) { if (*str1 < *str2) { if (*str1 == '\0') return (0) ; else return (-1) ; } if (*str1 > *str2) return (1) ; } return (0) ; } char *strsave (const char *original) /* This routine copies the string pointed to by original into a new string and returns a pointer to the new string. Parameters: original pointer to string to be saved Return Value: normal: pointer to new copy of the string error: NULL */ { char *copy ; # if MALLOC_DEBUG == 2 char *rtnnme = "strsave" ; # endif copy = MALLOC(strlen(original)+1) ; if (copy != NULL) strcpy(copy,original) ; return (copy) ; } DyLP-1.10.4/DyLP/src/DylpStdLib/dylib_littab.c0000644000175200017520000000741711507440660017306 0ustar coincoin/* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* The routines in this file implement a package for storage and allocation of text strings. The package stores all strings in a hash table, merging identical strings. A count is maintained of the number of outstanding references to the string. There are two access routines, stralloc for inserting strings and strfree for releasing them. I/O is handled entirely by stdio facilities unless the malloc debugging macros (dylib_std.h) are compiled in, in which case the io library is needed. */ #include "dylib_std.h" static char sccsid[] UNUSED = "@(#)littab.c 1.4 09/25/04" ; static char svnid[] UNUSED = "$Id: dylib_littab.c 407 2010-12-31 20:48:48Z lou $" ; #include #include "dylib_hash.h" /* Definition of litent data structure. Field Definition ----- ---------- refs Reference count for this string text Pointer to the string */ typedef struct litent_internal { int refs ; char *text ; } litent ; /* ANSI C specifies that littable will be initialised to NULL; this is important. */ #define LITTABLESIZE 2039 static hel *littable[LITTABLESIZE] ; const char *stralloc (const char *string) /* This routine is called by the user to allocate a permanent copy of string. In reality, it will search the hash table for an entry corresponding to string. If it finds one, it will increment the reference count and return a pointer to the string stored in the entry. If there is no existing entry, one is created, a copy of the string is made, and a pointer to this copy is returned. Parameters: string: text string Returns: pointer to a usable copy of string, or NULL in the event of an error. */ { litent *lit ; const char *rtnnme = "stralloc" ; if (string == NULL) { fprintf(stderr,"\n%s: null string parameter!\n",rtnnme) ; return (NULL) ; } lit = (litent *) dyhash_lookup(string,littable,LITTABLESIZE) ; if (lit != NULL) { lit->refs++ ; return (lit->text) ; } lit = (litent *) MALLOC(sizeof(litent)) ; lit->text = MALLOC(strlen(string)+1) ; strcpy(lit->text,string) ; lit->refs = 1 ; if (dyhash_enter(lit->text,littable,LITTABLESIZE,(char *) lit) == NULL) { fprintf(stderr,"\n%s: couldn't enter string \"%s\" in literal table!\n", rtnnme,string) ; FREE(lit->text) ; FREE(lit) ; return (NULL) ; } return (lit->text) ; } bool strfree (const char *string) /* This routine is called by the user to "free" a string. In reality, it will search the hash table for an entry corresponding to string. If it finds one, it will decrement the reference count. It is an error if there is no entry for string, which implies that at some point a pointer to the string was acquired without consulting this package. Parameter: string: text string Returns: TRUE if the string was successfully "freed", FALSE otherwise. */ { litent *lit ; const char *rtnnme = "strfree" ; if (string == NULL) { fprintf(stderr,"\n%s: null string parameter!\n",rtnnme) ; return (FALSE) ; } lit = (litent *) dyhash_lookup(string,littable,LITTABLESIZE) ; if (lit == NULL) { fprintf(stderr,"\n%s: no entry for string \"%s\" in literal table!\n", rtnnme,string) ; return (FALSE) ; } if (--lit->refs == 0) { if (dyhash_erase(lit->text,littable,LITTABLESIZE) == NULL) { fprintf(stderr,"\n%s: confusion deleting entry for string \"%s\"!\n", rtnnme,lit->text) ; return (FALSE) ; } FREE(lit->text) ; FREE(lit) ; } return (TRUE) ; } DyLP-1.10.4/DyLP/src/DylpStdLib/DylpConfig.h0000644000175200017520000000271411573762145016712 0ustar coincoin/* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). * $Id$ * * Include file for the configuration of DyLP. * * On systems where the code is configured with the configure script * (i.e., compilation is always done with HAVE_CONFIG_H defined), this * header file includes the automatically generated header file. * * On systems that are compiled in other ways (e.g., with the * Developer Studio), a header files is included to define those * macros that depend on the operating system and the compiler. The * macros that define the configuration of the particular user setting * (e.g., presence of other COIN-OR packages or third party code) are set * by the files config_*default.h. The project maintainer needs to remember * to update these file and choose reasonable defines. * A user can modify the default setting by editing the config_*default.h files. */ #ifndef __DYLPCONFIG_H__ #define __DYLPCONFIG_H__ #ifdef HAVE_CONFIG_H #ifdef DYLP_BUILD #include "config.h" #else #include "config_dylp.h" #endif #else /* HAVE_CONFIG_H */ #ifdef DYLP_BUILD #include "config_default.h" #else #include "config_dylp_default.h" #endif #endif /* HAVE_CONFIG_H */ #endif /*__DYLPCONFIG_H__*/ DyLP-1.10.4/DyLP/src/DylpStdLib/dylib_errs.h0000644000175200017520000000154712745427302017010 0ustar coincoin#ifndef _DYLIB_ERRS_H #define _DYLIB_ERRS_H /* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* sccs: @(#)errs.h 2.3 03/18/04 svn/cvs: $Id: dylib_errs.h 590 2016-07-25 15:22:42Z tkr $ */ #include "dylib_std.h" #ifdef _DYLIB_FORTRAN #include "dylib_fortran.h" #endif void errinit(const char *emsgpath, const char *elogpath, bool errecho), errterm(void) ; void errmsg(int errid, ... ), dywarn(int errid, ... ) ; #ifdef _DYLIB_FORTRAN void errmsg_(integer *errid, char *ident, ... ) ; void dywarn_(integer *errid, char *ident, ... ) ; #endif #endif /* _DYLIB_ERRS_H */ DyLP-1.10.4/DyLP/src/DylpStdLib/dylib_fortran.h0000644000175200017520000000630711507440660017504 0ustar coincoin#ifndef _DYLIB_FORTRAN_H #define _DYLIB_FORTRAN_H /* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* @(#)fortran.h 1.1 09/01/99 svn/cvs: $Id: dylib_fortran.h 407 2010-12-31 20:48:48Z lou $ */ /* Common typedefs, definitions, macros, etc., which are handy when constructing C code that must talk to Fortran code. Off the top, typedefs and defines for the basic equivalences between Fortran and C data types. This list isn't complete, but it covers the common ones. (Taken from the Sun Fortran Programmer's Guide.) */ typedef short int integer_2 ; typedef long int integer ; typedef long int logical ; typedef float real ; typedef double double_precision ; #define TRUEL 1L #define FALSEL 0L /* A note about string handling in mixed code. C goes by the convention that strings are terminated by a '\0' character, and padded with '\0' on the rare occasions when padding is necessary. Fortran, on the other hand, keeps an explicit (though hidden) length, and pads with ' '. The two forms are just not compatible. Take care when passing strings back and forth. Adding an explicit null in the Fortran definition of the string is your best bet. The output routines in io.c and errs.c expect this, and do not make use of the 'hidden' parameter giving the string length. */ /* Some macros to help with Fortran arrays. 2-D arrays should simply be declared as array[rows*cols], and let the macro take care of the rest. This avoids complications due to column-major order in Fortran vs. row-major order in C. NOTE that these macros assume you are using the Fortran indexing convention, which starts at 1. */ #define f_chr(zz_ptr,zz_ndx,zz_strsze) (*(zz_ptr+((zz_ndx)-1)*(zz_strsze))) #define f_arr1(zz_ptr,zz_ndx) (*(zz_ptr+(zz_ndx)-1)) #define f_arr2(zz_ptr,zz_row,zz_col,zz_collen) \ (*(zz_ptr+((zz_col)-1)*(zz_collen)+((zz_row)-1))) /* These codes are used by the Fortran part of the code to identify arguments supplied to errmsg_, warn_, and outfmt_. The Fortran code sees them from the common block argcod_, which is initialised in errs.c:errinit (from the io library. Do not rearrange the structure declaration without making corresponding changes in the Fortran common block. The codes ftnargVARNAME and ftnargCONNAME are peculiar to the bonsai MILP program (which prompted the development of the Fortran interface for i/o and error messages) and likely of little use in other contexts. At best, modifications to the routines in errs.c and io.c are required to support them. */ #define ftnargINTEGER ((integer) 1) #define ftnargDOUBLE_PRECISION ((integer) 2) #define ftnargCHARACTER ((integer) 3) #define ftnargVARNAME ((integer) 4) #define ftnargCONNAME ((integer) 5) #define ftnargEND ((integer) 6) extern struct { integer integer_code ; integer double_precision_code ; integer character_code ; integer varname_code ; integer conname_code ; integer end_code ; } argcod_ ; #endif /* _DYLIB_FORTRAN_H */ DyLP-1.10.4/DyLP/src/DylpStdLib/dylib_bnfrdr.h0000644000175200017520000006125611507440660017312 0ustar coincoin#ifndef _DYLIB_BNFRDR_H #define _DYLIB_BNFRDR_H /* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ #include "dylib_io.h" /* sccs: @(#)bnfrdr.h 3.5 09/01/99 svn/cvs: "$Id: dylib_bnfrdr.h 407 2010-12-31 20:48:48Z lou $" ; This file contains the structure definitions required to use the bnf reader package. The bnf reader depends heavily on the following two assumptions: * There is some pointer type into which any other pointer can be cast and recovered. * An int can be cast into a pointer and recovered. This is used to prevent the complexity of the bnf data structure from getting out of hand, but could be avoided at the expense of a substantial increase in its size and awkwardness of use. The basic scheme is something like this. At the bottom, we have a number of terminal constructs: immediates, literals, terminals, and labels of various flavours. Above these are the three non-terminal constructs: primitives, non-primitives, and generators. The non-terminals have bodies which are made up of references to other terminal or non-terminal constructs. Generator bodies have only one parse; primitive and non-primitive bodies can have a number of alternative parses. A picture is probably in order here: definition body ---------- ---------- ---------- ---------- | | ---> | | ---> | ref | ---> | defn | ---------- ---------- ---------- ---------- | .... | ---------- ---------- ---------- | | ---> | ref | ---> | defn | ---------- ---------- ---------- A definition contains a pointer to its body, which is an array of pointers to references. Each reference points to a definition. Essentially, a reference specifies how the second definition is to be used in the context of the body of the first definition. The bnf reader has the capability to create arbitrary links in the data structure it's building. Some terminology will make things easier: | .... | ---------- ---------- socket -->| label -+----->| | ---------- ---------- | .... | | .... | The value of a label is the address of something. To make a link, the value of the label has to be stored. The place where it is stored is called a socket. The value of a socket is the address of the field where the value of the label is stored. When it defines a socket, the bnf reader associates a name with an address; similarly for a label. Both socket and label references cause a label to be stored in a socket; the difference between the two lies in which of the socket or label can be undefined when the reference is processed. When it's not important to distinguish between sockets and labels, the documentation uses label to include both. To write a bnf, you use the set of macros defined at the end of the file. For a detailed explanation of the sorts of things that can be specified with the bnf, the user should take a look at the supplementary documentation. The structures and code will make a lot more sense afterward. */ /* Definitions of enum types used as codes in the bnf structures which follow. */ /* bnftype_enum codes the type of the bnf definition. Value Description ----- ----------- bnfG Generator definition bnfNP Non-primitive definition bnfP Primitive definition bnfT Terminal definition bnfDS Socket definition definition bnfDL Label definition definition bnfRS Socket reference definition bnfRL Label reference definition bnfI Immediate value definition bnfL Literal definition */ typedef enum {bnfG,bnfNP,bnfP,bnfT,bnfDS, bnfDL,bnfRS,bnfRL,bnfI,bnfL} bnftype_enum ; /* bnfttype_enum codes the type of lexeme expected by a terminal. Value Description ----- ----------- bnfttNIL the null lexeme bnfttN number bnfttID identifier bnfttD delimiter bnfttF fixed-length string bnfttQ quoted string */ typedef enum {bnfttNIL,bnfttN,bnfttID,bnfttD,bnfttF,bnfttQ} bnfttype_enum ; /* bnflblsrc_enum codes the way in which text strings used for label names are obtained. Value Description ----- ----------- bnfncBNF A bnf is supplied which will produce a text string. If this code appears in the context of a name, the string will be the name of the label. If it appears in the context of a value, the string will be used as a label name and the value associated with the name will become the value of the label being defined. bnfncS An index in the saved text array is supplied. The string retrieved is interpreted as for bnfncBNF. bnfncC The value of curnde is used as the socket/label value. This code is not valid in the context of a name. bnfncN The value of newnde is used as the socket/label value. This code is not valid in the context of a name. */ typedef enum {bnfncBNF,bnfncS,bnfncC,bnfncN} bnflblsrc_enum ; /* Flag definitions used in bnf definitions. Flag Description ---- ----------- bnfadv Indicates the redefinition of a previously defined label. The usual context for use is to redefine (advance) a label which is the link in a linked list. bnfsvnd Save the text string developed by the nd part of a label definition definition or label reference definition. bnfsvnm Save the text string developed by the nm part of a label definition definition or label reference definition. This flag is also used in literal definitions to indicate that text should be retrieved from the saved text array. */ #define bnfadv 1<<0 #define bnfsvnd 1<<1 #define bnfsvnm 1<<2 /* Flag definitions used in bnf references. Flag Description ---- ----------- bnflst The definition referenced describes one element of a list of indefinite length. bnfstore The value produced by the referenced bnf will be stored somehow, and the offset field should be valid. bnfatsgn Store a pointer to the character string produced by the referenced bnf, rather than the string itself. bnfstbg The bnf referenced as the separator between list elements is really the beginning of the next list element. (Hence we'll have to back up over it once we recognize it.) bnfflt A float number is expected here. bnfdbl A double number is expected here. bnfcs Forces a case-sensitive comparison of the string read for a terminal with the value specified in the terminal definition. bnfmin Requests a minimum-length comparison - as long as the string parsed for the terminal matches the value specified in the terminal definition up to the end of the parsed string, the comparison succeeds. bnfsv Used in primitives to indicate that the string is to be stored in the savedtxt array. The offset should be a valid savedtxt index in this case. bnfexact (bnfttF only) used to prevent the addition of the null terminator at the end of a character string when the string is stored directly in a field (must be specified to store a single char in a field of size sizeof(char)) bnfdebug Debugging should be activated for this reference and all bnf rules nested within it. */ #define bnflst 1<<0 #define bnfstore 1<<1 #define bnfatsgn 1<<2 #define bnfstbg 1<<3 #define bnfflt 1<<4 #define bnfcs 1<<5 #define bnfmin 1<<6 #define bnfsv 1<<7 #define bnfexact 1<<8 #define bnfdebug 1<<9 #define bnfdbl 1<<10 /* Bnfrdr regularly uses the first ([0]) entry of an array of addresses to hold the number of addresses in the array. In order to convert this back to an integer without triggering compiler warnings, the code uses this macro. */ # define addrToInt(zz_addr_zz) \ ((int) (((char *)(zz_addr_zz)) - ((char *)(0)))) /* Data structures used for bnf definitions. There are three types of things here: individual structures for the various definition types, a common structure which consists only of the fields common to all of the individual structures, and a pointer union which is handy when walking around in a bnf. For C++ fans: really, what we're doing here is faking a base class and derived classes, with early 1980's technology. Just to keep the explanation in hand a bit, let's define components and alternatives. The body of a bnf definition consists of alternatives (alternative parses), each of which has a number of components. A component array is an array of pointers to bnf reference structures, each of which in turn references a bnf definition structure. An alternative array is an array of pointers to component arrays. I know this is ugly and involves a lot of dereferencing but it seems to be the only way to handle the variable lengths involved. NOTE: To keep things from getting completely out of hand, the first entry in a component or alternative array specifies the number of pointers that follow. This is an abuse of type and casting. Bad when the world was 32-bit architectures. Worse now that it's a mix of 32- and 64-bit architectures. See the addrToInt macro above. */ /* The common portion. Field Description ----- ----------- type Type code identifying what sort of definition this is. name The name of the rule (derived from the C variable name; see the macros gdef, npdef, etc.) */ #define bnfdef_common bnftype_enum type ; \ const char *name ; typedef struct { bnfdef_common } bnfdef_struct ; /* Data structure for a generator definition. Generators cause the creation of a node in the data structure being built for the user. For simplicity, they may not have alternative parses, but since they can reference non-primitives no flexibility is lost. Field Description ----- ----------- bnfdef_common As above. size Size (in bytes) of the node to be created. link Offset (in bytes) from the base of the node created by the generator to the field used as a link field when this node is in a linked list. comps Pointer to a component array. */ typedef struct { bnfdef_common int size ; int link ; struct bnfref_struct_tag **comps ; } bnfGdef_struct ; /* Data structure for a non-primitive definition. Non-primitives are simply a device for defining alternative parses. They don't directly create anything. Field Description ----- ----------- bnfdef_common As above. alts Pointer to an alternative array. */ typedef struct {bnfdef_common struct bnfref_struct_tag ***alts ; } bnfNPdef_struct ; /* Data structure for a primitive definition. The distinction between a primitive and a non-primitive is that a primitive constructs a string which is the concatenation of the strings returned by the bnf's referenced in the primitive's body. The data structure is identical to that for non-primitives. */ typedef bnfNPdef_struct bnfPdef_struct ; /* Data structure for a terminal. Terminals are used to specify specific things to be obtained from the input stream. The various parameters required to describe a terminal should really be mushed into a union, but then the bnf data structure would have to be built dynamically, since unions can't be initialized. Field Description ----- ----------- bnfdef_common As above. ttype Code identifying the type of terminal to be obtained. qschr Starting character for a quoted string. qechr Ending character for a quoted string. parm1 Overloaded field, interpreted as follows: numbers: specifies the radix fixed-length strings: specifies the string length val Expected value of the string obtained from the input stream. (This test is applied before the string is converted to the internal form appropriate for whatever is specified in ttype.) */ typedef struct { bnfdef_common bnfttype_enum ttype ; char qschr ; char qechr ; int parm1 ; const char *val ; } bnfTdef_struct ; /* Data structure for an immediate value. Immediates are used to jam a code into the data structure being built. Field Description ----- ----------- bnfdef_common As above. ival Integer value. */ typedef struct {bnfdef_common int ival ; } bnfIdef_struct ; /* Data structure for a literal. Literals are used to insert characters into the input stream. (Handy for generating label names, for instance.) Field Description ----- ----------- bnfdef_common As above. dflgs Flags. txt The string to be inserted. This field is also used to index into the saved text array by casting it to an int. */ typedef struct { bnfdef_common flags dflgs ; char *txt ; } bnfLdef_struct ; /* Last but not least, the data structure used to define socket/label definitions and references. (Definitions, mind you - there is another structure to reference socket/label definitions and references.) A socket/label definition associates of a name (a text string) with a value (almost always an address). A socket/label reference specifies a socket and a label. The label is inserted into the socket. Fields prefixed by nm are the name in a socket/label definition and the socket in a socket/label reference. Fields prefixed by nd are the value in a socket/label definition and the label in a socket/label reference. Field Description ----- ----------- bnfdef_common As above. dflgs Flags. nmcd Specifies how name/socket will be obtained. ndcd Specifies how value/label will be obtained. savnm Specifies location in saved text array where string associated with nm will be stored. nmsrc Pointer to bnf which will produce string for nm, or cast into an int and used as a location in the saved text array. savnd Specifies location in saved text array where string associated with nd will be stored. ndsrc Pointer to bnf which will produce string for nd, or cast into an int and used as a location in the saved text array. offset Correction (in bytes) to socket/label value (socket/label definitions) or socket (socket/label references). offset2 Correction (in bytes) to label (socket/label references). */ typedef struct { bnfdef_common flags dflgs ; bnflblsrc_enum nmcd ; bnflblsrc_enum ndcd ; int savnm ; struct bnfref_struct_tag *nmsrc ; int savnd ; struct bnfref_struct_tag *ndsrc ; int offset ; int offset2 ; } bnfLBdef_struct ; /* And finally, the handy union of pointers promised back at the start. We really should be using this in the bnf reference structure declarations, rather than (bnfdef_struct *), but since references and definitions are mutually recursive we get into ugliness. There's also the point that we want to be able to create bnfs at compile time and you can't initialize unions. */ typedef union { bnfdef_struct *com ; bnfGdef_struct *G ; bnfNPdef_struct *NP ; bnfPdef_struct *P ; bnfTdef_struct *T ; bnfIdef_struct *I ; bnfLdef_struct *L ; bnfLBdef_struct *LB ; } bnfdef_any ; /* Now, on to the data structures used to reference bnf definitions. Recall if you will the introductory comments about component and alternative arrays and the general setup of the bnf data structure. We have the same three types of data structures here as for bnf definitions. */ /* The common portion. It includes a type code, a name, usage flags, and a pointer to the bnf definition. Field Description ----- ----------- type Type code identifying what sort of definition this reference points to. name The name of the reference (derived from the C variable name; see the macros qref, npref, pref, etc.) uflgs Usage flags. defn Pointer to a bnf definition structure. */ #define bnfref_common bnftype_enum type ; \ const char *name ; \ bnfdef_struct *defn ; \ flags uflgs ; typedef struct bnfref_struct_tag { bnfref_common } bnfref_struct ; /* References to labels of all flavours and to literals require only the common fields. The only reason we need the uflgs field is for the bnfdebug flag. */ typedef bnfref_struct bnfLBref_struct ; typedef bnfref_struct bnfLref_struct ; /* References to terminals and immediates require an offset for storage. Field Description ----- ----------- bnfref_common As above. offset Offset (in bytes) into current node to the field where the value produced by the referenced bnf will be stored. */ struct bnfref_type2 { bnfref_common int offset ; } ; typedef struct bnfref_type2 bnfTref_struct ; typedef struct bnfref_type2 bnfIref_struct ; /* References to generators, non-primitives, and primitives can be in lists and require a separator specification in addition to the offset. Non-primitives do not make use of the offset field. Field Description ----- ----------- bnfref_common As above. offset Offset (in bytes) into current node to the field where the value produced by the referenced bnf will be stored. sep A reference to a bnf definition describing the separator between list elements in the input stream. */ struct bnfref_type3 { bnfref_common int offset ; bnfref_struct *sep ; } ; typedef struct bnfref_type3 bnfGref_struct ; typedef struct bnfref_type3 bnfNPref_struct ; typedef struct bnfref_type3 bnfPref_struct ; /* And the handy union pointer type. Same general comments as for the declaration of bnfdef_any. */ typedef union { bnfref_struct *com ; struct bnfref_type1 *t1 ; struct bnfref_type2 *t2 ; struct bnfref_type3 *t3 ; bnfGref_struct *G ; bnfNPref_struct *NP ; bnfPref_struct *P ; bnfTref_struct *T ; bnfIref_struct *I ; bnfLref_struct *L ; bnfLBref_struct *LB ; } bnfref_any ; /* The macros that make defining the bnf data structures marginally less painful. */ /* Macros to help with constructing field offsets. NULLP is specially designed to produce a NULL value when used as &NULLP. This is required for some of the macros where one must fill the field with either the address of a bnfref_struct or the value NULL. By this device we avoid having to make the user aware of when and when not to use &. mkoff simply produces the offset of a given field in a structure type. But it's not quite that simple in the world of mixed 64- and 32-bit platforms. The cast to size_t leaves us with either a 64- or 32-bit int, depending on the size of addresses, but at least it's an int instead of a pointer, and that's sufficient to suppress warnings in other places when the result is converted to an int. And the result here should always be a small integer. */ #define NULLP (*((char *) 0)) #define mksav(qqoff) (*((char *) qqoff)) #define mkoff(qqtype,qqfield) ((size_t) (&((qqtype *) 0)->qqfield)) /* Macros for alternative and component lists. These just generate the headers; the actual lists have to be typed out, as: althd(arule_alts) = { altcnt(3), mkaref(arule_alt1), mkaref(arule_alt2), mkaref(arule_alt3) } ; comphd(arule_alt1) = { compcnt(2), mkcref(brule_ref), mkcref(crule_ref) } ; where brule_ref and crule_ref are bnf references (most likely constructed using the gref, npref, etc. macros). */ #define althd(qqnme) bnfref_struct **qqnme[] #define altcnt(qqcnt) (bnfref_struct **) (qqcnt) #define mkaref(qqref) (bnfref_struct **) (qqref) #define comphd(qqnme) bnfref_struct *qqnme[] #define compcnt(qqcnt) (bnfref_struct *) (qqcnt) #define mkcref(qqref) (bnfref_struct *) (&qqref) /* Macros to initialise bnf definitions. Note the use of the ANSI C 'stringisation' operator, '#', to get a text string for the name. For non-ANSI implementations, replacing #qqnme with "qqnme" usually works (but not all non-ANSI preprocessor implementations will see the macro parameter inside a string, and ANSI C explicitly disallows it). */ #define gdef(qqnme,qqsze,qqlnk,qqcomps) \ bnfGdef_struct qqnme = { bnfG, #qqnme, (int) (qqsze), (int) (qqlnk), \ (bnfref_struct **) qqcomps } #define npdef(qqnme,qqalts) \ bnfNPdef_struct qqnme = { bnfNP, #qqnme, (bnfref_struct ***) qqalts } #define pdef(qqnme,qqalts) \ bnfPdef_struct qqnme = { bnfP, #qqnme, (bnfref_struct ***) qqalts } #define tdef(qqnme,qqttype,qqparm,qqval) \ bnfTdef_struct qqnme = { bnfT, #qqnme, qqttype, '\0', '\0', \ (int) (qqparm), (const char *) (qqval) } #define tqdef(qqnme,qqschr,qqechr,qqval) \ bnfTdef_struct qqnme = { bnfT, #qqnme, bnfttQ, (char) qqschr, (char) qqechr,\ 0, (char *) (qqval) } #define dfdef(qqnme,qqdflgs,qqnmcd,qqnm,qqsavnm,qqndcd,qqnd,qqsavnd,qqoff) \ bnfLBdef_struct qqnme = { bnfDS, #qqnme, (flags) (qqdflgs), qqnmcd, qqndcd, \ (int) (qqsavnm), (bnfref_struct *) &qqnm, \ (int) (qqsavnd), (bnfref_struct *) &qqnd, \ (int) (qqoff), 0 } #define dbdef(qqnme,qqdflgs,qqnmcd,qqnm,qqsavnm,qqndcd,qqnd,qqsavnd,qqoff) \ bnfLBdef_struct qqnme = { bnfDL, #qqnme, (flags) (qqdflgs), qqnmcd, qqndcd, \ (int) (qqsavnm), (bnfref_struct *) &qqnm, \ (int) (qqsavnd), (bnfref_struct *) &qqnd, \ (int) (qqoff), 0 } #define rfdef(qqnme,qqdflgs,qqnmcd,qqnm,qqsavnm,qqoff,qqndcd,qqnd,qqsavnd,qqoff2) \ bnfLBdef_struct qqnme = { bnfRS, #qqnme, (flags) (qqdflgs), qqnmcd, qqndcd, \ (int) (qqsavnm), (bnfref_struct *) &qqnm, \ (int) (qqsavnd), (bnfref_struct *) &qqnd, \ (int) (qqoff), (int) (qqoff2) } #define rbdef(qqnme,qqdflgs,qqnmcd,qqnm,qqsavnm,qqoff,qqndcd,qqnd,qqsavnd,qqoff2) \ bnfLBdef_struct qqnme = { bnfRL, #qqnme, (flags) (qqdflgs), qqnmcd, qqndcd, \ (int) (qqsavnm), (bnfref_struct *) &qqnm, \ (int) (qqsavnd), (bnfref_struct *) &qqnd, \ (int) (qqoff), (int) (qqoff2) } #define idef(qqnme,qqval) \ bnfIdef_struct qqnme = { bnfI, #qqnme, (int) (qqval) } #define ldef(qqnme,qqdflgs,qqtxt) \ bnfLdef_struct qqnme = { bnfL, #qqnme, (flags) (qqdflgs), (char *) (qqtxt) } #define gref(qqnme,qqref,qquflgs,qqoff,qqsep) \ bnfGref_struct qqnme = { bnfG, #qqnme, (bnfdef_struct *) &qqref, \ (flags) (qquflgs), (int) (qqoff), \ (bnfref_struct *) &qqsep } #define npref(qqnme,qqref,qquflgs,qqsep) \ bnfNPref_struct qqnme = { bnfNP, #qqnme, (bnfdef_struct *) &qqref, \ (flags) (qquflgs), (int) 0, (bnfref_struct *) &qqsep } #define pref(qqnme,qqref,qquflgs,qqoff,qqsep) \ bnfPref_struct qqnme = { bnfP, #qqnme, (bnfdef_struct *) &qqref, \ (flags) (qquflgs), (int) (qqoff), \ (bnfref_struct *) &qqsep } #define tref(qqnme,qqref,qquflgs,qqoff) \ bnfTref_struct qqnme = { bnfT, #qqnme, (bnfdef_struct *) &qqref, \ (flags) qquflgs, (int) qqoff } #define dfref(qqnme,qqref) \ bnfLBref_struct qqnme = { bnfDS, #qqnme, (bnfdef_struct *) &qqref, (flags) 0 } #define dbref(qqnme,qqref) \ bnfLBref_struct qqnme = { bnfDL, #qqnme, (bnfdef_struct *) &qqref, (flags) 0 } #define rfref(qqnme,qqref) \ bnfLBref_struct qqnme = { bnfRS, #qqnme, (bnfdef_struct *) &qqref, (flags) 0 } #define rbref(qqnme,qqref) \ bnfLBref_struct qqnme = { bnfRL, #qqnme, (bnfdef_struct *) &qqref, (flags) 0 } #define iref(qqnme,qqref,qqoff) \ bnfIref_struct qqnme = { bnfI, #qqnme, (bnfdef_struct *) &qqref, \ (flags) 0, (int) qqoff } #define lref(qqnme,qqref) \ bnfLref_struct qqnme = { bnfL, #qqnme, (bnfdef_struct *) &qqref, (flags) 0 } #ifndef DYLP_NDEBUG /* This set of definitions sets the bnfdebug flag, but doesn't add a separate uflgs parameter (we don't want to lead the user to think any of the others are valid). */ #define dfrefdbg(qqnme,qqref) \ bnfLBref_struct qqnme = { bnfDS, #qqnme, (bnfdef_struct *) &qqref, \ (flags) bnfdebug } #define dbrefdbg(qqnme,qqref) \ bnfLBref_struct qqnme = { bnfDL, #qqnme, (bnfdef_struct *) &qqref, \ (flags) bnfdebug } #define rfrefdbg(qqnme,qqref) \ bnfLBref_struct qqnme = { bnfRS, #qqnme, (bnfdef_struct *) &qqref, \ (flags) bnfdebug } #define rbrefdbg(qqnme,qqref) \ bnfLBref_struct qqnme = { bnfRL, #qqnme, (bnfdef_struct *) &qqref, \ (flags) bnfdebug } #define lrefdbg(qqnme,qqref) \ bnfLref_struct qqnme = { bnfL, #qqnme, (bnfdef_struct *) &qqref, \ (flags) bnfdebug } #endif /* DYLP_NDEBUG */ /* Last, but not least, some declarations to allow the use of the bnf reader. rdrinit and rdrclear initialize and clear the reader; they should bracket related groups of calls. parse is the main parsing routine. The union type parse_any is the appropriate thing to hold the result. */ typedef union { void *g ; char *c ; } parse_any ; extern void rdrinit(void),rdrclear(void) ; extern bool parse(ioid chn, struct bnfref_type3 *bnfid, parse_any *result) ; #ifndef DYLP_NDEBUG /* The control routine for the bnf debugging trace output. See the comments in bnfrdr.c for the proper use of the parameters. */ extern void bnfdbgctl(ioid dbgchn, bool dbgecho, bool warnzlbl, bool numlvl, bool tablvl) ; #else #define bnfdbgctl(dgbchn,dbgecho,warnzlbl,numlvl,tablvl) #endif /* Utility print routines from bnfrdrio.c. */ extern void prtbnfref(ioid chn, bool echo, bnfref_struct *ref), prtbnfdef(ioid chn, bool echo, bnfdef_struct *def) ; #endif /* _DYLIB_BNFRDR_H */ DyLP-1.10.4/DyLP/src/DylpStdLib/config_dylp_default.h0000644000175200017520000000134613434071654020651 0ustar coincoin /***************************************************************************/ /* HERE DEFINE THE PROJECT SPECIFIC PUBLIC MACROS */ /* These are only in effect in a setting that doesn't use configure */ /***************************************************************************/ /* Version number of project */ #define DYLP_VERSION "1.10.4" /* Major Version number of project */ #define DYLP_VERSION_MAJOR 1 /* Minor Version number of project */ #define DYLP_VERSION_MINOR 10 /* Release Version number of project */ #define DYLP_VERSION_RELEASE 4 /* Define to the C type corresponding to the C++ bool type. `char' is correct on many systems. The next most likely choice is int. */ #define BOOL char DyLP-1.10.4/DyLP/src/DylpStdLib/dylib_hash.c0000644000175200017520000001551511507440660016750 0ustar coincoin/* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* This module contains routines for maintaining hash tables. Each entry has a character string key and a pointer to whatever data the user chooses to keep. The module is a standalone unit. I/O is handled entirely by stdio facilities unless the malloc debugging macros (dylib_std.h) are compiled in, in which case the io library is needed. */ #include "dylib_std.h" static char sccsid[] UNUSED = "@(#)hash.c 1.4 09/25/04" ; static char svnid[] UNUSED = "$Id: dylib_hash.c 407 2010-12-31 20:48:48Z lou $" ; #include #include "dylib_hash.h" static int hash (const char *key, int size) /* Function to return an index into the hash table. The function simply adds up the values of the char's in the string. Parameter: key: pointer to a character string size: size of the hash table Return value: integer hash value of the string */ { int hashval ; for (hashval = 0 ; *key != '\0' ; hashval += *key++) ; return (hashval%size) ; } void *dyhash_lookup (const char *key, hel *hashtab[], int size) /* Function to search a hash table for the first occurence of a particular key. The hash index is calculated to get to the proper bucket, then the linked list is searched sequentially. The insertion strategy insures that the most recently installed entry for the key is the one found. Since one might use this routine to see if something is in the table, it doesn't complain if the entry isn't found. Parameter: key: character string to be looked up hashtab: hash table to be searched size: number of buckets in the hash table Returns: entry associated with the key, or NULL if nothing is found */ { hel *hshel ; const char *rtnnme = "lookup" ; if (key == NULL) { fprintf(stderr,"\n%s: null key!\n", rtnnme) ; return (NULL) ; } if (hashtab == NULL) { fprintf(stderr,"\n%s: null hashtab!\n", rtnnme) ; return (NULL) ; } if (size <= 0) { fprintf(stderr,"\n%s: hashtab size violates 0 < %d!\n", rtnnme, size) ; return (NULL) ; } for (hshel = hashtab[hash(key,size)] ; hshel != NULL ; hshel = hshel->next) if (strcmp(key,hshel->key) == 0) return (hshel->ent) ; return (NULL) ; } void *dyhash_search (const char *key, hel *hashtab[], int size, bool init) /* Function to search a hash table for all occurences of a particular key. If init == TRUE, then the hash index is calculated to get to the proper bucket, then the linked list is searched sequentially for the first occurence of the key. This position is remembered, and subsequent calls with init set to FALSE will continue searching the chain from the point where the last call left off. Parameter: key: character string to be looked up hashtab: hash table to be searched size: number of buckets in the hash table init: controls search method, as above. Returns: entry associated with the key, or NULL if nothing is found (this will occur if the key is not present, or when there are no more entries on the hash chain with the requested key). */ { static hel *hshel ; static bool search_hshel_is_valid = FALSE ; const char *rtnnme = "search" ; if (key == NULL) { fprintf(stderr,"\n%s: null key!\n", rtnnme) ; search_hshel_is_valid = FALSE ; return (NULL) ; } if (hashtab == NULL) { fprintf(stderr,"\n%s: null hashtab!\n", rtnnme) ; search_hshel_is_valid = FALSE ; return (NULL) ; } if (size <= 0) { fprintf(stderr,"\n%s: hashtab size violates 0 < %d!\n", rtnnme, size) ; search_hshel_is_valid = FALSE ; return (NULL) ; } if (init == TRUE) { hshel = hashtab[hash(key,size)] ; search_hshel_is_valid = TRUE ; } else { if (search_hshel_is_valid != TRUE) { fprintf(stderr,"\n%s: attempt to continue before an init!\n",rtnnme) ; return (NULL) ; } if (hshel != NULL) hshel = hshel->next ; } for ( ; hshel != NULL ; hshel = hshel->next) if (strcmp(key,hshel->key) == 0) return (hshel->ent) ; search_hshel_is_valid = FALSE ; return (NULL) ; } void *dyhash_enter (const char *key, hel *hashtab[], int size, void *entry) /* Function to add an entry to a hash table. The addition takes place at the head of the list (of the particular hash value). This is to facilitate the primary use of the hash tables, which is to return a pointer to the active symbol table entry for a name. Parameter: key: character string to be used as a hash key hashtab: hash table where entry is to be made size: number of buckets in the hash table entry: the entry to be associated with the key Returns: entry, or NULL if entry is not successfully entered in the table. */ { hel *new ; int hashval ; const char *rtnnme = "enter" ; if (key == NULL) { fprintf(stderr,"\n%s: null key!\n", rtnnme) ; return (NULL) ; } if (hashtab == NULL) { fprintf(stderr,"\n%s: null hashtab!\n", rtnnme) ; return (NULL) ; } if (size <= 0) { fprintf(stderr,"\n%s: hashtab size violates 0 < %d!\n", rtnnme, size) ; return (NULL) ; } new = (hel *) MALLOC(sizeof(hel)) ; hashval = hash(key, size) ; new->next = hashtab[hashval] ; new->key = key ; new->ent = entry ; hashtab[hashval] = new ; return (entry) ; } void *dyhash_erase (const char *key, hel *hashtab[], int size) /* Function used to delete a particular entry from a hash table. It erases the first hash element with a matching key. It is the caller's responsibility to deal with the entry pointed to by the hash element. It is considered an error to try and erase a non-existent entry, and the routine will complain. Parameter: key: hash key hashtab: hash table from which entry is to be deleted size: number of buckets in the hash table Returns: Value of the entry field corresponding to the erased key, or NULL if the key could not be found. */ { int hashval ; hel *hshel1, **hshel2 ; void *entry ; const char *rtnnme = "erase" ; if (key == NULL) { fprintf(stderr,"\n%s: null key!\n", rtnnme) ; return (NULL) ; } if (hashtab == NULL) { fprintf(stderr,"\n%s: null hashtab!\n", rtnnme) ; return (NULL) ; } if (size <= 0) { fprintf(stderr,"\n%s: hashtab size violates 0 < %d!\n", rtnnme, size) ; return (NULL) ; } hashval = hash(key,size) ; for (hshel2 = &hashtab[hashval], hshel1 = *hshel2 ; hshel1 != NULL ; hshel2 = &hshel1->next, hshel1 = *hshel2) if (strcmp(key,hshel1->key) == 0) { *hshel2 = hshel1->next ; entry = hshel1->ent ; FREE(hshel1) ; return (entry) ; } fprintf(stderr,"\n%s: can't locate key %s.\n",rtnnme,key) ; return (NULL) ; } DyLP-1.10.4/DyLP/src/DylpStdLib/config_dylp.h.in0000644000175200017520000000062611573762145017556 0ustar coincoin/* src/DylpStdLib/config_dylp.h.in. */ /* Version number of project */ #undef DYLP_VERSION /* Major Version number of project */ #undef DYLP_VERSION_MAJOR /* Minor Version number of project */ #undef DYLP_VERSION_MINOR /* Release Version number of project */ #undef DYLP_VERSION_RELEASE /* Define to the C type whose size in bytes matches the size in bytes of the the C++ bool type. */ #undef BOOL DyLP-1.10.4/DyLP/src/DylpStdLib/dylib_keytab.h0000644000175200017520000000207211507440660017303 0ustar coincoin#ifndef _DYLIB_KEYTAB_H #define _DYLIB_KEYTAB_H /* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ /* Data structure for keyword tables searched by find and ambig @(#)keytab.h 1.2 08/31/99 svn/cvs: $Id: dylib_keytab.h 407 2010-12-31 20:48:48Z lou $ */ /* Field Contents ----- -------- keyword Character string for the keyword. min Minimum number of characters which must be matched before cimstrcmp will report a match. token Value returned when the keyword is matched. */ typedef struct keytab_entry_internal { const char *keyword ; int min ; int token ; } keytab_entry ; /* binsrch.c */ extern int find(char *word, keytab_entry keytab[], int numkeys), ambig(char *word, keytab_entry keytab[], int numkeys) ; #endif /* _DYLIB_KEYTAB_H */ DyLP-1.10.4/DyLP/src/DylpStdLib/dylib_strrtns.h0000644000175200017520000000345011507440660017544 0ustar coincoin#ifndef _DYLIB_STRRTNS_H #define _DYLIB_STRRTNS_H /* This file is part of the support library for the Dylp LP distribution. Copyright (C) 2005 -- 2007 Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca This code is licensed under the terms of the Eclipse Public License (EPL). */ #include "dylib_std.h" /* This file contains external definitions for the routines in the string package. @(#)strrtns.h 1.3 06/22/04 svn/cvs: $Id: dylib_strrtns.h 407 2010-12-31 20:48:48Z lou $ */ extern int cistrcmp(const char *str1, const char *str2), /* strrtns.c */ cimstrcmp(const char *str1, const char *str2), mstrcmp(const char *str1, const char *str2) ; extern char *strsave(char *original) ; extern const char *stralloc(const char *string) ; /* littab.c */ extern bool strfree(const char *string) ; /* Some macros to hide the memory allocation functions. Note that the debugging versions of these macros use outfmt from the io library and assume the existence of a string, rtnnme (typically the name of the current subroutine) that's used to identify the origin of the message. */ #if (MALLOC_DEBUG == 2) #include "dylib_io.h" const void *zz_cptr_zz ; ioid zz_chn_zz ; #define STRALLOC(zz_sptr_zz) \ ( zz_cptr_zz = (const void *) stralloc(zz_sptr_zz), \ dyio_outfmt(zz_chn_zz,FALSE,":stralloc: %#08x (%s) in %s.\n", \ zz_cptr_zz,zz_cptr_zz,rtnnme), \ zz_cptr_zz ) #define STRFREE(zz_fptr_zz) \ ( dyio_outfmt(zz_chn_zz,FALSE,":strfree: %#08x (%s) in %s.\n", \ zz_fptr_zz,zz_fptr_zz,rtnnme), \ strfree(zz_fptr_zz) ) #else #define STRALLOC(zz_sptr_zz) stralloc(zz_sptr_zz) #define STRFREE(zz_fptr_zz) strfree(zz_fptr_zz) #endif #endif /* _DYLIB_STRRTNS_H */ DyLP-1.10.4/DyLP/src/OsiDylp/0000755000175200017520000000000013434203622014034 5ustar coincoinDyLP-1.10.4/DyLP/src/OsiDylp/Makefile.am0000644000175200017520000000405612243462606016103 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1152 2007-12-28 03:59:07Z andreasw $ # Author: Andreas Waechter IBM 2006-04-13 # Lou Hafer SFU many modifications since AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiDylp # ######################################################################## # Name of the library compiled in this directory. We want it installed in # $libdir lib_LTLIBRARIES = libOsiDylp.la # List all source files for this library, including headers libOsiDylp_la_SOURCES = \ OsiDylpMessages.cpp OsiDylpMessages.hpp \ OsiDylpPresolve.cpp \ OsiDylpSimplex.cpp \ OsiDylpSolverInterface.cpp OsiDylpSolverInterface.hpp \ OsiDylpWarmStartBasis.cpp OsiDylpWarmStartBasis.hpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiDylp_la_LIBADD = $(OSIDYLPLIB_LIBS) ../Dylp/libDylp.la endif # This is for libtool (on Windows) libOsiDylp_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../Dylp` \ -I`$(CYGPATH_W) $(srcdir)/../DylpStdLib` \ $(COINUTILS_CFLAGS) $(OSI_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/DylpStdLib ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ OsiDylpMessages.hpp \ OsiDylpSolverInterface.hpp \ OsiDylpWarmStartBasis.hpp DyLP-1.10.4/DyLP/src/OsiDylp/OsiDylpWarmStartBasis.cpp0000644000175200017520000007120311670764355020774 0ustar coincoin/*! \legal Copyright (C) 2003 -- 2007 Lou Hafer, International Business Machines Corporation and others. All Rights Reserved. This file is a portion of the COIN/OSI interface for dylp and is licensed under the terms of the Eclipse Public License (EPL) */ #include "OsiConfig.h" #ifdef _MSC_VER /* Turn off compiler warning about long names */ # pragma warning(disable:4786) #endif // _MSC_VER /* Cut name lengths for readability. */ #define ODWSB OsiDylpWarmStartBasis #define CWSB CoinWarmStartBasis /*! \file OsiDylpWarmStartBasis.cpp \brief Implementation of warm start object for dylp. This file contains the implementation of a warm start object for dylp. It extends the CoinWarmStartBasis class by adding an explicit list of active constraints. When operating in dynamic mode, dylp needs to be told which constraints are active in the basis. For ease of use, constraint status is handled like variable status. There's an array, one entry per constraint, coded using CoinWarmStartBasis::Status. Inactive constraints are marked with isFree, active constraints with atLowerBound. Note that active/inactive is not equivalent to tight/loose. The default behaviour in dynamic mode is to purge constraints which are strictly loose, but dylp can be instructed to also purge tight constraints when the associated dual variable is zero. */ #include #include #include "OsiDylpWarmStartBasis.hpp" #include "CoinMessageHandler.hpp" #ifndef ODSI_PARANOIA # define ODSI_PARANOIA 1 #endif // #undef ODSI_PARANOIA // #define ODSI_PARANOIA 2 /* The following symbol is useful only for detailed debugging. ODWSB_TRACK_BASIS track basis manipulations */ // #define ODWSB_TRACK_BASIS 1 namespace { char sccsid[] UNUSED = "@(#)OsiDylpWarmStartBasis.cpp 1.7 11/06/04" ; char cvsid[] UNUSED = "$Id: OsiDylpWarmStartBasis.cpp 1408 2009-10-04 10:27:59Z stefan $" ; } using std::vector ; /* A macro to standardize the size of the status arrays. CWSB::Status is the status enum, and currently it occupies 2 bits, packed 4 per char (note the implicit assumption that a char is 1 byte). This macro calculates the number of bytes needed to hold ns status entires, rounded up to the nearest int. */ #define STATPERBYTE 4 #define STATALLOCUNIT (static_cast(sizeof(int))) #define STATBYTES(zz_ns_zz) \ (((zz_ns_zz+STATALLOCUNIT*STATPERBYTE-1)/(STATALLOCUNIT*STATPERBYTE))* \ STATALLOCUNIT) /*! \defgroup ODWSBConstructorsDestructors ODWSB Constructors and Destructors \brief ODWSB Constructors and destructors ODWSB provides a default constructor, several variations on a copy constructor, a default destructor, and two variations on assignment. There are also routines to change the capacity of the warm start object. */ //@{ /*! Creates an empty basis. */ ODWSB::OsiDylpWarmStartBasis () : CWSB(), phase_(dyINV), constraintStatus_(0) { # if ODSI_PARANOIA >= 2 checkBasis() ; # endif } /*! A true copy --- no data structures are shared with the original. */ ODWSB::OsiDylpWarmStartBasis (const OsiDylpWarmStartBasis &ws) : CWSB(ws), phase_(ws.phase_), constraintStatus_(0) { if (ws.constraintStatus_) { int constatsze = STATBYTES(getNumArtificial()) ; constraintStatus_ = new char[constatsze] ; memcpy(constraintStatus_,ws.constraintStatus_,constatsze) ; } # if ODSI_PARANOIA >= 2 ws.checkBasis() ; checkBasis() ; # endif return ; } /*! `Virtual constructor' method, for when we need to duplicate the ODWSB object from code that doesn't know it has an ODSWB object. */ CoinWarmStart *ODWSB::clone () const { const ODWSB *odwsb_orig = dynamic_cast(this) ; ODWSB *odwsb_new = 0 ; if (odwsb_orig) { odwsb_new = new OsiDylpWarmStartBasis(*odwsb_orig) ; } # if ODSI_PARANOIA >= 2 checkBasis() ; odwsb_new->checkBasis() ; # endif return (dynamic_cast(odwsb_new)) ; } /*! Construct by copying a set of status arrays (parameters preserved). If no constraint status is provided, the default is to declare all constraints active. The phase is set to dyPRIMAL1, which is safe for any basis. Consider assignBasisStatus(int,int,char*&,char*&) if the object should assume ownership. */ ODWSB::OsiDylpWarmStartBasis (int ns, int na, const char *sStat, const char *aStat, const char *cStat) : CWSB(ns,na,sStat,aStat), phase_(dyPRIMAL1), constraintStatus_(0) { int constatsze = STATBYTES(na) ; constraintStatus_ = new char[constatsze] ; /* If a status array is given, copy it in. If there's no array provided, assume all constraints are active. Set up a byte with the correct pattern and use it to initialize the constraint status. */ if (cStat) { memcpy(constraintStatus_,cStat,constatsze) ; } else { char byteActive = 0 ; int i ; for (i = 0 ; i <= 3 ; i++) setStatus(&byteActive,i,CWSB::atLowerBound) ; memset(constraintStatus_,byteActive,constatsze) ; } # if ODSI_PARANOIA >= 2 checkBasis() ; # endif return ; } /*! Construct from a CoinWarmStartBasis. Much as the previous constructor, but we know we'll need to build the constraint status array. */ ODWSB::OsiDylpWarmStartBasis (const CoinWarmStartBasis &cwsb) : CWSB(cwsb), phase_(dyPRIMAL1), constraintStatus_(0) { int na = cwsb.getNumArtificial() ; int constatsze = STATBYTES(na) ; constraintStatus_ = new char[constatsze] ; char byteActive = 0 ; for (int i = 0 ; i <= 3 ; i++) setStatus(&byteActive,i,CWSB::atLowerBound) ; memset(constraintStatus_,byteActive,constatsze) ; # if ODSI_PARANOIA >= 2 checkBasis() ; # endif return ; } /*! Assignment of structure (parameter preserved) */ OsiDylpWarmStartBasis& ODWSB::operator= (const OsiDylpWarmStartBasis &rhs) { if (this != &rhs) { CWSB::operator=(rhs) ; phase_ = rhs.phase_ ; delete[] constraintStatus_ ; if (rhs.constraintStatus_) { int constatsze = STATBYTES(getNumArtificial()) ; constraintStatus_ = new char[constatsze] ; memcpy(constraintStatus_,rhs.constraintStatus_,constatsze) ; } else { constraintStatus_ = 0 ; } } # if ODSI_PARANOIA >= 2 checkBasis() ; # endif return *this ; } /*! Assignment of status arrays (parameters destroyed). The phase is set to dyPRIMAL1, which is safe for any basis. In this method the OsiDylpWarmStartBasis object assumes ownership of the arrays and upon return the argument pointers will be NULL. If copying is desirable, use the \link OsiDylpWarmStartBasis(int,int,const char*,const char*,const char*) array constructor \endlink or the \link operator=(const OsiDylpWarmStartBasis&) assignment operator \endlink. \note The pointers passed to this method will be freed using delete[], so they must be created using new[]. */ void ODWSB::assignBasisStatus (int ns, int na, char *&sStat, char *&aStat, char *&cStat) { CWSB::assignBasisStatus(ns,na,sStat,aStat) ; phase_ = dyPRIMAL1 ; delete[] constraintStatus_ ; constraintStatus_ = cStat ; cStat = 0 ; # if ODSI_PARANOIA >= 2 checkBasis() ; # endif } /*! Assignment of status arrays (parameters destroyed). When no constraint status is provided, the default is to create an array which indicates all constraints are active. The phase is set to dyPRIMAL1, which is safe for any basis. In this method the OsiDylpWarmStartBasis object assumes ownership of the arrays and upon return the argument pointers will be NULL. If copying is desirable, use the \link OsiDylpWarmStartBasis(int,int,const char*,const char*,const char*) array constructor \endlink or the \link operator=(const OsiDylpWarmStartBasis&) assignment operator \endlink. \note The pointers passed to this method will be freed using delete[], so they must be created using new[]. */ void ODWSB::assignBasisStatus (int ns, int na, char *&sStat, char *&aStat) { int constatsze = STATBYTES(na) ; char byteActive = 0 ; int i ; CWSB::assignBasisStatus(ns,na,sStat,aStat) ; phase_ = dyPRIMAL1 ; delete[] constraintStatus_ ; constraintStatus_ = new char[constatsze] ; for (i = 0 ; i <= 3 ; i++) setStatus(&byteActive,i,CWSB::atLowerBound) ; memset(constraintStatus_,byteActive,constatsze) ; # if ODSI_PARANOIA >= 2 checkBasis() ; # endif } ODWSB::~OsiDylpWarmStartBasis () { delete[] constraintStatus_ ; } /*! This routine sets the capacity of the warm start object. Any existing basis information is lost. The basis is inconsistent at the end of this routine: All constraints are active, but there are no basic variables (the status arrays are initialised to isFree by CWSB::setSize). */ void ODWSB::setSize (int ns, int na) { CWSB::setSize(ns,na) ; phase_ = dyINV ; delete[] constraintStatus_ ; if (na > 0) { int constatsze = STATBYTES(na) ; constraintStatus_ = new char[constatsze] ; char byteActive = 0 ; for (int i = 0 ; i <= 3 ; i++) setStatus(&byteActive,i,CWSB::atLowerBound) ; memset(constraintStatus_,byteActive,constatsze) ; } else { constraintStatus_ = 0 ; } return ; } /*! This routine sets the capacity of the warm start object. Any existing basis information is retained. If the new size is smaller than the existing basis, the existing basis is truncated to fit. If the new size is larger than the existing basis, additional structural variables are given the status nonbasic at lower bound, additional artificial variables are given the status basic, and additional constraints are given the status active. We need to allow for the possibility that the client has created an empty basis and is using resize instead of setSize to get the proper final size. The basis is consistent after this routine, even if it starts out as an empty basis. */ void ODWSB::resize (int numRows, int numCols) { int concnt = getNumArtificial() ; int varcnt = getNumStructural() ; bool empty ; if (concnt == 0 && varcnt == 0) { empty = true ; } else { empty = false ; assert(constraintStatus_) ; } CWSB::resize(numRows,numCols) ; if (numRows != concnt) { int oldsze = STATBYTES(concnt) ; int newsze = STATBYTES(numRows) ; char *newStat = new char[newsze] ; /* If the new capacity is smaller, truncate the existing basis. */ if (oldsze > newsze) { memcpy(newStat,constraintStatus_,newsze) ; } /* If the new capacity is larger, copy the existing basis, then mark the additional constraints as active. We need to be a bit careful here, because the allocated sizes are rounded out. The strategy is to (possibly) overlap one byte, correcting it after initialization. */ else { char byteActive = 0 ; int i,actualBytes ; actualBytes = concnt/STATPERBYTE ; for (i = 0 ; i < STATPERBYTE ; i++) setStatus(&byteActive,i,CWSB::atLowerBound) ; if (empty == false) { memcpy(newStat,constraintStatus_,oldsze) ; memset(newStat+actualBytes,byteActive,newsze-actualBytes) ; for (i = 0 ; i < concnt%STATPERBYTE ; i++) { setStatus(newStat+actualBytes,i, getStatus(constraintStatus_+actualBytes,i)) ; } } else { memset(newStat,byteActive,newsze) ; } } delete [] constraintStatus_ ; constraintStatus_ = newStat ; } # if ODSI_PARANOIA >= 2 checkBasis() ; # endif return ; } /* compressRows takes an ordered list of target indices without duplicates and removes them, compressing the artificialStatus_ and constraintStatus_ arrays in place. It will fail spectacularly if the indices are not sorted. Use deleteRows if you need to preprocess the target indices to satisfy the conditions. */ void ODWSB::compressRows (int tgtCnt, const int *tgts) { /* Bail out if we're called with nothing to do. */ if (tgtCnt <= 0) return ; int i,keep,t,blkStart,blkEnd ; Status stati ; /* Depending on circumstances, constraint indices may be larger than the size of the basis. Check for that now. Scan from top, betting that in most cases the majority of indices will be valid. */ for (t = tgtCnt-1 ; t >= 0 && tgts[t] >= numArtificial_ ; t--) ; if (t < 0) return ; tgtCnt = t+1 ; # if ODSI_PARANOIA >= 2 /* If we're debugging, scan to see if we're deleting nonbasic artificials. (In other words, are we deleting tight constraints?) Easiest to just do this up front as opposed to integrating it with the loops below. */ int nbCnt = 0 ; for (t = 0 ; t < tgtCnt ; t++) { i = tgts[t] ; stati = getStatus(artificialStatus_,i) ; if (stati != CoinWarmStartBasis::basic) { nbCnt++ ; } } if (nbCnt > 0) { std::cout << nbCnt << " nonbasic artificials deleted." << std::endl ; } # endif /* We preserve all entries before the first target. Skip across consecutive target indices to establish the start of the first block to be retained. */ keep = tgts[0] ; for (t = 0 ; t < tgtCnt-1 && tgts[t]+1 == tgts[t+1] ; t++) ; blkStart = tgts[t]+1 ; /* Outer loop works through the indices to be deleted. Inner loop copies runs of indices to keep. */ while (t < tgtCnt-1) { blkEnd = tgts[t+1]-1 ; for (i = blkStart ; i <= blkEnd ; i++) { stati = getStatus(artificialStatus_,i) ; setStatus(artificialStatus_,keep,stati) ; stati = getStatus(constraintStatus_,i) ; setStatus(constraintStatus_,keep++,stati) ; } for (t++ ; t < tgtCnt-1 && tgts[t]+1 == tgts[t+1] ; t++) ; blkStart = tgts[t]+1 ; } /* Finish off by copying from last deleted index to end of the status arrays. */ for (i = blkStart ; i < numArtificial_ ; i++) { stati = getStatus(artificialStatus_,i) ; setStatus(artificialStatus_,keep,stati) ; stati = getStatus(constraintStatus_,i) ; setStatus(constraintStatus_,keep++,stati) ; } numArtificial_ -= tgtCnt ; # if ODSI_PARANOIA >= 2 checkBasis() ; # endif return ; } /* deleteRows takes an unordered list of target indices with duplicates and removes them from the basis. The strategy is to preprocess the list into an ordered list without duplicates, suitable for compressRows. */ /*! Removal of a tight constraint with a nonbasic logical implies that some basic variable must be kicked out of the basis. There's no cheap, efficient way to choose this variable, so the choice is left to the client. */ /* To elaborate on the above comment: When a tight constraint is removed, new extreme points are exposed. There's a reasonable likelihood they'll be desireable points (since the tight constraint was most likely tight because it was blocking movement in a desireable direction). In essence, we want to take the next primal pivot and see what comes tight. That's a fair bit of work, and on balance best left to the client to decide if it's appropriate, or if something else should be done. */ void ODWSB::deleteRows (int rawTgtCnt, const int *rawTgts) { /* Bail out if we're called with nothing to do. */ if (rawTgtCnt <= 0) return ; int *tgts = new int[rawTgtCnt] ; memcpy(tgts,rawTgts,rawTgtCnt*sizeof(int)) ; int *first = &tgts[0] ; int *last = &tgts[rawTgtCnt] ; int *endUnique ; std::sort(first,last) ; endUnique = std::unique(first,last) ; ptrdiff_t tgtCnt = endUnique-first ; compressRows(static_cast(tgtCnt),tgts) ; delete [] tgts ; # if ODSI_PARANOIA >= 2 checkBasis() ; # endif return ; } /* The good news is that CWSB::deleteColumns works just fine for ODWSB. */ /* mergeBasis was originally developed to deal with expansion of a basis in cbc. The original coding manipulated artificialStatus_ directly, losing the active/inactive information in constraintStatus_. mergeBasis rephrases the activity in terms of merging entries from an old basis into a new, expanded basis. The resulting routine is capable of general merging of a source basis into a target (this) basis. This code is substantially identical to CoinWarmStartBasis::mergeBasis, with the exception that it understands constraintStatus_. If the xferRows (xferCols) vector is missing, no row (column) information will be transferred from src to tgt. */ void ODWSB::mergeBasis (const CoinWarmStartBasis *cwsb_src, const XferVec *xferRows, const XferVec *xferCols) { assert(cwsb_src) ; const ODWSB *src = dynamic_cast(cwsb_src) ; assert(src) ; int srcCols = src->getNumStructural() ; int srcRows = src->getNumArtificial() ; /* Merge the structural variable status. */ if (srcCols > 0 && xferCols != NULL) { XferVec::const_iterator xferSpec = xferCols->begin() ; XferVec::const_iterator xferEnd = xferCols->end() ; for ( ; xferSpec != xferEnd ; xferSpec++) { int srcNdx = (*xferSpec).first ; int tgtNdx = (*xferSpec).second ; int runLen = (*xferSpec).third ; assert(srcNdx >= 0 && srcNdx+runLen <= srcCols) ; assert(tgtNdx >= 0 && tgtNdx+runLen <= getNumStructural()) ; for (int i = 0 ; i < runLen ; i++) { CoinWarmStartBasis::Status stat = src->getStructStatus(srcNdx+i) ; setStatus(structuralStatus_,tgtNdx+i,stat) ; } } } /* Merge the row (artificial variable and constraint activity) status. */ if (srcRows > 0 && xferRows != NULL) { XferVec::const_iterator xferSpec = xferRows->begin() ; XferVec::const_iterator xferEnd = xferRows->end() ; for ( ; xferSpec != xferEnd ; xferSpec++) { int srcNdx = (*xferSpec).first ; int tgtNdx = (*xferSpec).second ; int runLen = (*xferSpec).third ; # if ODWSB_TRACK_BASIS > 0 std::cout << "\tmerging from " << srcNdx << " to " << tgtNdx << ", run = " << runLen << "." << std::endl ; # endif assert(srcNdx >= 0 && srcNdx+runLen <= srcRows) ; assert(tgtNdx >= 0 && tgtNdx+runLen <= getNumArtificial()) ; for (int i = 0 ; i < runLen ; i++) { CoinWarmStartBasis::Status stat = src->getArtifStatus(srcNdx+i) ; setStatus(artificialStatus_,tgtNdx+i,stat) ; stat = src->getConStatus(srcNdx+i) ; setStatus(constraintStatus_,tgtNdx+i,stat) ; } } } return ; } //@} /*! \defgroup BasisInfo Methods to get and set basis information \brief Methods to get and set basis information */ //@{ /*! Count the number of active constraints by scanning the constraint status array. */ int ODWSB::numberActiveConstraints () const { int i ; int concnt = getNumArtificial() ; int actcnt = 0 ; for (i = 0 ; i < concnt ; i++) if (getStatus(constraintStatus_,i) == CWSB::atLowerBound) actcnt++ ; return (actcnt) ; } /*! \defgroup BasisDiff Basis `diff' methods \brief Methods to calculate and apply a `diff' between two bases. */ //@{ /*! The capabilities are limited by the CoinWarmStartBasis format: oldBasis can be no larger than newBasis (the basis pointed to by \c this), and the subset of newBasis covered by oldBasis is assumed to contain the identical set of logical and structural variables, in order. We use CWSB::generateDiff to deal with the status arrays for the logical and structural variables, then add an additional vector for constraint status. */ CoinWarmStartDiff *ODWSB::generateDiff (const CoinWarmStart *const oldCWS) const { /* Make sure the parameter is an OsiDylpWarmStartBasis. */ const OsiDylpWarmStartBasis *oldBasis = dynamic_cast(oldCWS) ; if (!oldBasis) { throw CoinError("Old basis not OsiDylpWarmStartBasis.", "generateDiff","OsiDylpWarmStartBasis") ; } const OsiDylpWarmStartBasis *newBasis = this ; # if ODSI_PARANOIA >= 2 oldBasis->checkBasis() ; checkBasis() ; # endif /* Make sure newBasis is equal or bigger than oldBasis. Calculate the worst case number of diffs and allocate vectors to hold them. */ const int oldArtifCnt = oldBasis->getNumArtificial() ; const int newArtifCnt = newBasis->getNumArtificial() ; assert(newArtifCnt >= oldArtifCnt) ; /* Ok, we're good to go. Call CWSB::generateDiff to deal with the logical and structural arrays. */ const CoinWarmStartBasisDiff *cwsbDiff = dynamic_cast(CWSB::generateDiff(oldCWS)) ; /* Now generate diffs for the constraint array. */ int sizeOldArtif = (oldArtifCnt+15)>>4 ; int sizeNewArtif = (newArtifCnt+15)>>4 ; int maxBasisLength = sizeNewArtif ; unsigned int *diffNdx = new unsigned int [maxBasisLength]; unsigned int *diffVal = new unsigned int [maxBasisLength]; /* Scan the constraint status. For the portion of the status arrays which overlap, create diffs. Then add any additional status from newBasis. */ const unsigned int *oldStatus = reinterpret_cast(oldBasis->getConstraintStatus()) ; const unsigned int *newStatus = reinterpret_cast(newBasis->getConstraintStatus()) ; int numberChanged = 0 ; int i ; for (i = 0 ; i < sizeOldArtif ; i++) { if (oldStatus[i] != newStatus[i]) { diffNdx[numberChanged] = i ; diffVal[numberChanged++] = newStatus[i] ; } } for ( ; i < sizeNewArtif ; i++) { diffNdx[numberChanged] = i ; diffVal[numberChanged++] = newStatus[i] ; } /* Create the object of our desire. */ OsiDylpWarmStartBasisDiff *diff = new OsiDylpWarmStartBasisDiff(numberChanged,diffNdx,diffVal,cwsbDiff) ; /* Clean up and return. */ delete[] diffNdx ; delete[] diffVal ; delete cwsbDiff ; return (dynamic_cast(diff)) ; } /*! Update this basis by applying \p diff. It's assumed that the allocated capacity of the basis is sufficiently large. We use CWSB::applyDiff to deal with the logical and structural status vectors, then apply the diffs for the constraint status vector. Unfortunately, it's not really possible to verify the basis as diffs are applied. The typical approach is to blow out the basis to full size and apply diffs as we go. Intermediate stages can have inconsistencies because they aren't yet at full size. */ void ODWSB::applyDiff (const CoinWarmStartDiff *const cwsdDiff) { /* Make sure we have an OsiDylpWarmStartBasisDiff */ const OsiDylpWarmStartBasisDiff *diff = dynamic_cast(cwsdDiff) ; if (!diff) { throw CoinError("Diff not OsiDylpWarmStartBasisDiff.", "applyDiff","OsiDylpWarmStartBasis") ; } /* Call CWSB::applyDiff to deal with the logical and structural status. */ CWSB::applyDiff(cwsdDiff) ; /* Now fix up the constraint status array. Application of the diff is by straighforward replacement of words in the status array. */ const int numberChanges = diff->consze_ ; const unsigned int *diffNdxs = diff->condiffNdxs_ ; const unsigned int *diffVals = diff->condiffVals_ ; unsigned int *constraintStatus = reinterpret_cast(this->getConstraintStatus()) ; for (int i = 0 ; i < numberChanges ; i++) { unsigned int diffNdx = diffNdxs[i] ; unsigned int diffVal = diffVals[i] ; constraintStatus[diffNdx] = diffVal ; } return ; } //@} /*! \defgroup MiscUtil Miscellaneous Utilities \brief Miscellaneous utility functions */ //@{ /*! Print the warm start object in a (more or less) human-readable form. Intended for debugging. */ void ODWSB::print () const { char conlett[] = {'I','?','?','A'} ; char statlett[] = {'F','B','U','L'} ; int i,basic_logicals,basic_structurals ; std::cout << "ODWSB: " ; std::cout << getNumArtificial() << " constraints (" << numberActiveConstraints() << " active), " ; std::cout << getNumStructural() << " variables." << std::endl ; std::cout << "Rows: " ; for (i = 0 ; i < getNumArtificial() ; i++) { std::cout << conlett[getConStatus(i)] ; } std::cout << std::endl ; std::cout << " " ; basic_logicals = 0 ; for (i = 0 ; i < getNumArtificial() ; i++) { std::cout << statlett[getArtifStatus(i)] ; if (getArtifStatus(i) == CWSB::basic) basic_logicals++ ; } std::cout << std::endl ; std::cout << "Cols: " ; basic_structurals = 0 ; for (i = 0 ; i < getNumStructural() ; i++) { std::cout << statlett[getStructStatus(i)] ; if (getStructStatus(i) == CWSB::basic) basic_structurals++ ; } std::cout << std::endl << " basic: (" << basic_structurals << " + " << basic_logicals << ")" ; std::cout << std::endl ; # if ODSI_PARANOIA >= 2 checkBasis() ; # endif return ; } /*! Check the basis to make sure it's properly formed. The convention adopted for inactive constraints in an ODWSB is that the logical should be basic. After subtracting the basic logicals associated with inactive constraints, there should be exactly enough basic variables for the active constraints. */ void ODWSB::checkBasis (CoinMessageHandler* msghandler) const { int i ; bool retval = true ; int numBasicStruct,numBasicLog,numCons,numActCons ; Status conStat,logStat ; numBasicStruct = numberBasicStructurals() ; numBasicLog = 0 ; numCons = getNumArtificial() ; numActCons = numberActiveConstraints() ; /* Scan the constraint status vector. Check that the logical associated with an inactive constraint is basic. Count the number of basic logicals associated with active constraints --- these will be part of dylp's basis. The notion that the logical associated with an inactive constraint should be basic is a convention adopted by ODWSB when it must synthesize a full basis for use by COIN. Dylp simply doesn't see the problem --- the constraint is inactive and does not require a basic variable. If the logical is not basic, it indicates a logical error in the code. */ for (i = 0 ; i < numCons ; i++) { conStat = getConStatus(i) ; logStat = getArtifStatus(i) ; if (conStat == CWSB::isFree) { if (logStat != CWSB::basic) { if (msghandler) *msghandler << "Basis error! Logical for inactive constraint " << i << " is nonbasic." << CoinMessageEol ; retval = false ; } } else if (conStat == CWSB::atLowerBound) { if (logStat == CWSB::basic) { numBasicLog++ ; } } else { if (msghandler) *msghandler << "Basis error! Status of constraint " << i << " is " << conStat << ". Should be isFree or atLowerBound." << CoinMessageEol ; retval = false ; } } /* The number of basic variables (basic structural, plus basic logicals associated with active constraints) should equal the number of active constraints. ODSI can easily cope with too few basic variables, and it will happen on occasion, depending on how the client code implements fixing of basic variables. ODSI can't deal with too many basic variables (in general, there's no guarantee we can find a basic variable that's at bound). */ if (numBasicStruct+numBasicLog != numActCons) { if (numBasicStruct+numBasicLog < numActCons) { if (msghandler) *msghandler << "Basis warning! " ; } else { if (msghandler) *msghandler << "Basis error! " ; retval = false ; } if (msghandler) *msghandler << numActCons << " active constraints but (" << numBasicStruct << "+" << numBasicLog << ") basic variables." << CoinMessageEol ; } if (retval == false) { if (msghandler) *msghandler << "Basis consistency check failed!" << CoinMessageEol ; } # if ODSI_PARANOIA >= 3 else { if (msghandler) *msghandler << "Basis consistency check passed." << CoinMessageEol ; } # endif return ; } //@} /* Routines for OsiDylpWarmStartBasisDiff */ /* Constructor given constraint diff data and a pointer to a CoinWarmStartBasisDiff object. */ OsiDylpWarmStartBasisDiff::OsiDylpWarmStartBasisDiff (int sze, const unsigned int *const diffNdxs, const unsigned int *const diffVals, const CoinWarmStartBasisDiff *const cwsbd) : CoinWarmStartBasisDiff(*cwsbd), consze_(sze), condiffNdxs_(0), condiffVals_(0) { if (sze > 0) { condiffNdxs_ = new unsigned int[sze] ; memcpy(condiffNdxs_,diffNdxs,sze*sizeof(unsigned int)) ; condiffVals_ = new unsigned int[sze] ; memcpy(condiffVals_,diffVals,sze*sizeof(unsigned int)) ; } return ; } /* Copy constructor */ OsiDylpWarmStartBasisDiff::OsiDylpWarmStartBasisDiff (const OsiDylpWarmStartBasisDiff &odwsbd) : CoinWarmStartBasisDiff(odwsbd), consze_(odwsbd.consze_), condiffNdxs_(0), condiffVals_(0) { if (odwsbd.consze_ > 0) { condiffNdxs_ = new unsigned int[odwsbd.consze_] ; memcpy(condiffNdxs_,odwsbd.condiffNdxs_, odwsbd.consze_*sizeof(unsigned int)) ; condiffVals_ = new unsigned int[odwsbd.consze_] ; memcpy(condiffVals_,odwsbd.condiffVals_, odwsbd.consze_*sizeof(unsigned int)) ; } return ; } /* Assignment --- for convenience when assigning objects containing CoinWarmStartBasisDiff objects. */ OsiDylpWarmStartBasisDiff& OsiDylpWarmStartBasisDiff::operator= (const OsiDylpWarmStartBasisDiff &rhs) { if (this != &rhs) { CoinWarmStartBasisDiff::operator=(rhs) ; if (consze_ > 0) { delete[] condiffNdxs_ ; delete[] condiffVals_ ; } consze_ = rhs.consze_ ; if (consze_ > 0) { condiffNdxs_ = new unsigned int[consze_] ; memcpy(condiffNdxs_,rhs.condiffNdxs_,consze_*sizeof(unsigned int)) ; condiffVals_ = new unsigned int[consze_] ; memcpy(condiffVals_,rhs.condiffVals_,consze_*sizeof(unsigned int)) ; } else { condiffNdxs_ = 0 ; condiffVals_ = 0 ; } } return (*this) ; } DyLP-1.10.4/DyLP/src/OsiDylp/OsiDylpMessages.cpp0000644000175200017520000002176011507440660017625 0ustar coincoin/*! \legal Copyright (C) 2004 -- 2007 Lou Hafer, International Business Machines Corporation and others. All Rights Reserved. This file is a portion of the COIN/OSI interface for dylp and is licensed under the terms of the Eclipse Public License (EPL) */ #include "OsiDylpSolverInterface.hpp" #include "OsiDylpMessages.hpp" namespace { char sccsid[] UNUSED = "@(#)OsiDylpMessages.cpp 1.6 09/25/04" ; char cvsid[] UNUSED = "$Id: OsiDylpMessages.cpp 1312 2008-10-10 00:26:32Z lou $" ; } /* Cut name lengths for readability. */ #define ODSI OsiDylpSolverInterface #define OSI OsiSolverInterface /* The general strategy for setting up the COIN messaging facility is as follows: * Create a CoinMessages object, sized to accommodate the number of messages you plan to define. The initial size can be zero, but incremental growth is not particularly efficient. * Define your messages. There are three pieces of information that need to be supplied for each message: an external ID number, a level, and a format string. There is a notion of severity wired into the external ID number; see CoinMessageHandler for details. Level controls when the message is printed; CoinMessageHandler associates higher numbers with increased verbosity. The format string can be null, if you want to build the whole thing on the fly. Severity, as of March, 2004: 0 - 2999 informational 3000 - 5999 warnings 6000 - 8999 non-fatal errors 9000 - fatal errors (will abort execution!) Level is more tied to individual solvers, but CoinMessageHandler knows that levels 0 -- 4 are generic. Larger values are interpreted on a single bit basis as debug messages. Check the documentation for CoinMessageHandler::message. It's a typical JJF hash of magic numbers. * Load the messages into the CoinMessage object. This involves repeated creation of a CoinOneMessage object, which is then loaded into the CoinMessages object using CoinMessages::addMessage. You specify an internal ID number at the time you add the message to the CoinMessages object. One approach to this is to define a derived class, XXXMessages, whose sole reason for existence is a constructor that performs the load. The internal ID numbers can be defined with an enum, which makes it a bit easier to specify a particular message and makes your code a bit more resilient against the inevitable insertion/deletion of messages as the code evolves. * Create a CoinMessageHandler object. To print a message, start construction of the message with CoinMessageHandler::message(,) Then use the various overloaded << operators to supply the necessary parameters. Finish with CoinMessageHandler::finish() or '<< CoinMessageEol' (where CoinMessageEol is part of the CoinMessageMarker enum). */ /* Message definitions. The precise form isn't important here, so long as the method that loads them into a CoinMessages object can come up with values for external number, detail level, and format string. The use of an enum to provide a local ID for each message is mainly useful with the internationalisation feature. It makes it easy to slap the same ID on alternate versions of a message. */ namespace { /* unnamed:file */ typedef struct { OsiDylpMessageID_enum inID ; int exID ; char lvl ; const char *fmt ; } MsgDefn ; static MsgDefn us_en_defns[] = { // informational (0 -- 2999) { ODSI_TEST_MSG, 1, 2, "This is the us_en test message." }, { ODSI_MPSFILEIO, 10, 5, "MPS file %s %s with %d errors." }, { ODSI_COLD, 50, 3, "dylp cold start%? (%s)%? result %s, z = %g, iters = %d." }, { ODSI_WARM, 51, 3, "dylp warm start result %s, z = %g, iters = %d." }, { ODSI_HOT, 52, 3, "dylp hot start result %s, z = %g, iters = %d." }, { ODSI_ALLDYLP, 53, 4, "dylp %s start odsi object %#x." }, { ODSI_DETACH, 54, 5, "dylp detach from %#x." }, { ODSI_ATTACH, 55, 5, "dylp attach in %s by %#x." }, { ODSI_SHORTSTATS, 56, 4, "Problem %s: tot %.4f pre %.4f lp1 %d %.4f post %.4f lp2 %d %.4f" }, { ODSI_PRESOL_STATS, 100, 3, "%s %d constraints, %d variables, %d coefficients." }, { ODSI_PRESOL_PASS, 101, 6, "Presolve pass %d: dropped %d constraints (%.2f), %d variables (%.2f)." }, { ODSI_POSTSOL, 200, 3, "Postsolve %s."}, { ODSI_POSTSOL_ACT, 201, 6, "Applying postsolve transform %s."}, // warning (3000 -- 5999) { ODSI_IGNOREDHINT, 3001, 2, "Ignored unsupported hint; %s." }, { ODSI_ODWSBSHORTBASIS, 3100, 1, "[%s]: basis has only %d variables for %d constraints." }, { ODSI_NOTFULLSYS, 3301, 3, "Partial constraint system mode is inefficient for tableau accesses." }, { ODSI_NOTSIMPLEX, 3302, 2, "Request to leave simplex mode %d but current mode is %d." }, { ODSI_NOTOPTIMAL, 3303, 2, "The last call to the solver did not produce an optimal solution." }, // Non-fatal errors (6000 -- 8999) { ODSI_UNSUPFORCEDO, 6001, 1, "Attempt to force unsupported hint; %s." }, { ODSI_EMPTYODWSB, 6101, 1, "Empty warm start basis object." }, { ODSI_NOTODWSB, 6102, 1, "The warm start basis object is not a %sWarmStartBasis object." }, { ODSI_ODWSBBADSIZE, 6103, 1, "Basis size %d x %d does not match constraint system size %d x %d." }, { ODSI_ODWSBBADSTATUS, 6104, 1, "Flipping %s (%d) from %s to %s; lack of finite bound." }, { ODSI_CWSBREJECT, 6105, 1, "Warm start was not accepted." }, { ODSI_ACCESS_STALE, 6200, 1, "(%s) request to return a value from a stale solution."}, { ODSI_NOSOLVE, 6201, 1, "(%s) Impossible to call dylp; %s." }, { ODSI_FAILEDCALL, 6202, 1, "(%s) Failed call to dylp routine %s." }, { ODSI_BADSTATE, 6300, 1, "Solver is not in a state that supports %s." }, { ODSI_NOTOWNER, 6301, 1, "This ODSI object does not own the solver." }, { ODSI_NOTVALID, 6302, 1, "The solver is not holding valid data structures from a solve." }, { ODSI_BADACTIVEBASIS, 6303, 1, "The active basis is %s; cannot reload solver." }, // Fatal errors (9000 and up) { ODSI_CONFUSION, 9001, 1, "Internal confusion, line %d." }, { ODSI_DUMMY_END, 999999, 0, "" } } ; static MsgDefn uk_en_defns[] = { { ODSI_TEST_MSG, 1, 2, "This is the uk_en test message, to prove we can switch languages." }, { ODSI_DUMMY_END, 999999, 0, "" } } ; /* We seem to need a dummy CoinMessages object to prevent the compiler from complaining that CoinMessages::Language is unintialised. */ const CoinMessages dummy(0) ; /* The author is Canadian, eh. But we'll go with us_en anyways. */ const CoinMessages::Language default_language = CoinMessages::us_en ; } /* End unnamed:file */ /*! This function constructs a CoinMessages object filled with a default set of messages, overlaid with whatever is available for the specified language. It is used to establish the initial set of messages, and is also called whenever the language is changed. The latter, because there's no way of guaranteeing that the sets of messages for alternate languages will all replace the same messages. This approach guarantees that the set of messages is always composed of the default language and the messages for one alternate language. */ void ODSI::setOsiDylpMessages (CoinMessages::Language local_language) { CoinMessages odsiMessages(sizeof(us_en_defns)/sizeof(MsgDefn)) ; odsiMessages.setLanguage(local_language) ; strcpy(odsiMessages.source_,"dylp"); /* Yes, this is gloriously redundant, but it's set up in anticipation of future extensions. */ MsgDefn *msgdefn ; switch (default_language) { case CoinMessages::us_en: { msgdefn = us_en_defns ; break ; } default: { msgdefn = us_en_defns ; break ; } } /* Open a loop to create and load the messages. */ while (msgdefn->inID != ODSI_DUMMY_END) { CoinOneMessage coinmsg(msgdefn->exID,msgdefn->lvl,msgdefn->fmt) ; odsiMessages.addMessage(msgdefn->inID,coinmsg) ; msgdefn++ ; } /* Now, if the local language differs from the default language, load any overrides. There's a trivial uk_en message set, solely for the purpose of testing language change routines. */ if (local_language != default_language) { switch (local_language) { case CoinMessages::us_en: { msgdefn = us_en_defns ; break; } case CoinMessages::uk_en: { msgdefn = uk_en_defns ; break; } default: { msgdefn = us_en_defns ; break; } } while (msgdefn->inID != ODSI_DUMMY_END) { odsiMessages.replaceMessage(msgdefn->inID,msgdefn->fmt) ; msgdefn++ ; } } /* Each CoinOneMessage has a fixed-length array to hold the message; by default this is 400 chars. Convert to `compressed' CoinOneMessage objects where the array is only as large as necessary. Any attempt to replace a message, or the message text, will automatically trigger a decompress operation before doing the replacement, but the messages will *not* be automatically recompressed. */ odsiMessages.toCompact() ; messages_ = odsiMessages ; return ; } DyLP-1.10.4/DyLP/src/OsiDylp/OsiDylpSolverInterface.cpp0000644000175200017520000064350511670764355021173 0ustar coincoin/*! Copyright (C) 2002, 2003, 2004. Lou Hafer, Stephen Tse, International Business Machines Corporation and others. All Rights Reserved. Copyright (C) 2005 -- 2010 Lou Hafer This file is a portion of the COIN/OSI interface for dylp and is licensed under the terms of the Eclipse Public License (EPL) */ #include "CoinPragma.hpp" #ifdef _MSC_VER /* MS C++ doesn't want to cope with this set of templates. Since they're just paranoid checks, it's easiest to simply disable them. */ # define assert_same /* In general, templates do not seem to be a strong point for MS C++. To get around this, there are a number of macros defined below. For Sun Workshop and Gnu programming environments, these will expand to template functions. For MS, they expand to some code plus calls to STL functions. Apparently MS C++ doesn't have trouble with the definitions of the templates, just instantiations. */ #endif // _MSC_VER /* Right now, there's no way to ask (or set) the value that COIN uses for infinity. Portions of COIN code depend on having a finite infinity --- specifically, DBL_MAX --- and this is hardwired into the code. This definition tries to anticipate the future, when one can inquire. CoinFinite.hpp defines COIN_DBL_MAX, CoinFinite, and CoinIsnan, hiding platform idiosyncracies. Dylp can work with both finite infinity (DBL_MAX) and infinite infinity (IEEE infinity). The value of ODSI::odsiInfinity is initialised to CoinInfinity, and dylp is told to use odsiInfinity as its internal value for infinity. */ #include "DylpConfig.h" #include "CoinFinite.hpp" namespace { const double CoinInfinity = COIN_DBL_MAX ; } #include "CoinTypes.hpp" /* Cut name lengths for readability. */ #define ODSI OsiDylpSolverInterface #define OSI OsiSolverInterface #define CWSB CoinWarmStartBasis #include #include #include #include "CoinTime.hpp" #include #include #include #include "OsiDylpSolverInterface.hpp" #include "OsiDylpMessages.hpp" #include "OsiDylpWarmStartBasis.hpp" #include "OsiPresolve.hpp" namespace { char sccsid[] UNUSED = "@(#)OsiDylpSolverInterface.cpp 1.20 11/13/04" ; char cvsid[] UNUSED = "$Id: OsiDylpSolverInterface.cpp 1408 2009-10-04 10:27:59Z stefan $" ; } /*! \brief Define to enable implicit read of options file If ODSI_IMPLICIT_SPC is defined `1' at compile time, when readMps(const char*,const char*) is asked to read .mps, it will first look for .spc and, if found, process it as a dylp options file. Disabled by default. Guaranteed not to work in Windows environments. */ #define ODSI_IMPLICIT_SPC 0 /*! \brief Define to control behaviour when a request is made to access a stale solution. A solution is `fresh' if the problem has not been modified since the most recent call to dylp. The OSI specification says that problem modifications should invalidate the current solution. In practice this nicety is sometimes stretched a bit. Defining ODSI_STRICTLY_FRESH will cause ODSI to throw an exception if asked for stale solution data. Otherwise, it will ignore the problem and return stale data. At any log level greater than 0, you'll get a warning. */ #define ODSI_STRICTLY_FRESH 1 /* The following symbols are useful only for detailed debugging. Leave them set to 0 to disable traces. ODSI_TRACK_FRESH track how a solution is made stale/fresh ODSI_TRACK_SOLVERS track creation, use, and deletion of ODSI objects ODSI_TRACK_ACTIVE track creation and deletion of the active basis (the active warm start object) */ // #define ODSI_TRACK_FRESH 1 // #define ODSI_TRACK_SOLVERS 1 // #define ODSI_TRACK_ACTIVE 1 /*! \brief Define to enable paranoid checks. When non-zero, enables various paranoid checks. 1: bounds checks on indices 2: test for equality after structure copy operations and test for basis internal consistency. An error will cause a throw. Configuration should set this symbol to 0 for an optimised build, 2 if --enable-osidylp-paranoia is requested. In particular, this symbol must be defined as >= 1 in order for OsiCbc(dylp) to pass the OsiCbc unit test. */ #ifndef ODSI_PARANOIA # define ODSI_PARANOIA 1 #endif // #undef ODSI_PARANOIA // #define ODSI_PARANOIA 2 /*! \brief Define to enable statistics collection in dylp When defined, ODSI will pass an lpstats_struct to dylp to be filled with statistics. Information is collected on a per-call basis only. In order to do so, OsiDylpSolverInterface must be built with the compile-time symbol \c ODSI_STATISTICS defined and the dylp library must be built with \c DYLP_STATISTICS defined. Normally this is handled through options to the configure script. #define ODSI_STATISTICS */ /*! \brief Define to produce informational messages When defined, informational printing is enabled. Nothing will be printed, however, unless the log level is sufficiently high. Normally handled through options to the configure script. #define ODSI_INFOMSGS */ /*! \file OsiDylpSolverInterface.cpp \brief Implementation of COIN OSI layer for dylp. This file contains the implementation of a COIN OSI layer for dylp, an lp solver originally written for the bonsaiG MILP code. More information on the COIN/OR project and the OSI layer specification can be found at http://www.coin-or.org.

Interface Principles for Implementors

In addition to the principles described in the documentation for the OsiDylpSolverInterface object in OsiDylpSolverInterface.hpp, implementors should be aware of the following: Problem Structures: Within dylp, a constraint system is held in a row- and column-linked structure called a \c consys_struct. The lp problem (constraint system plus additional problem information --- primal and dual variables, basis, status, etc.) is held in a structure called an \c lpprob_struct. Down in the private section of the class, #consys is the constraint system, and #lpprob is the \c lpprob_struct that's used to pass the problem to \c dylp and return the results. The structures #initialSolveOptions, #resolveOptions, #tolerances, and #statistics respectively hold control parameters tolerances, and statistics collected as the problem is solved. Options and Tolerances: The \c initialSolveOptions, \c resolveOptions, and \c tolerances structures are created and initialised by the ODSI constructor, so they're valid from the moment the ODSI object is created. Option and tolerance settings are preserved when a new problem is loaded or assigned. The #reset() method will reset them to their defaults. When a call is made to the solver, a local copy of the options and tolerances is made, then tweaked with a call to \c dy_checkdefaults. This partially subverts attempts to set tolerances using #dylp_controlfile() or any of the various ODSI parameter set methods. Statistics Collection: Dylp can collect detailed statistics on its performance. In order to do so, OsiDylpSolverInterface must be built with the compile-time symbol \c ODSI_STATISTICS defined and the dylp library must be built with \c DYLP_STATISTICS defined. Normally this is handled through options to the configure script. Statistics are collected on a per-call basis only; there is no facility to accumulate statistics over multiple calls to dylp. The statistics structure must also be sized to the problem. For these reasons, its creation is delayed until the actual call to the solver. Any existing statistics structure is deleted before the new one is created. Statistics structures are not copied at assignment or cloning. Constraint System Existence: An invariant in the interface is that if #getNumCols() or #getNumRows() returns a value greater than 0, then a valid constraint system structure (consys) exists, and attached to it are valid vectors for the objective coefficients (obj), variable type (vtyp) and upper and lower bounds (vub, vlb), and constraint type (ctyp) and right-hand side (rhs, rhslow). LP Problem Existence: The LP problem structure is not created until it's needed. A valid LP problem structure will exist after the first call to the solver (#initialSolve) or after a warm start object is loaded (#setWarmStart). Caching: Since vectors returned by OsiSolverInterface "get" functions are constant (not modifiable by users) and it is convenient for users to make repeated calls for the same information, a cache mechanism is used when necessary to avoid repeated expensive conversions in the interface. All cache variables are prefixed with underscore (_col*, _row*, _matrix*). In general, modifying the problem causes the cache to be invalidated. Most cached values are not replicated when an ODSI is cloned or assigned. The exceptions are #_col_x, #_row_price, and #_objval, which must be copied because the functions #setColSolution() and #setRowPrice() use them directly to hold the values specified by the client. Solver Ownership By default, dylp retains static data structures on the premise that the typical usage pattern is #initialSolve() followed by lots of calls to #resolve(), #solveFromHotStart(), and the various methods that ask for tableau vectors. ODSI is designed to allow multiple ODSI objects to work with the solver; this is useful for things like cut generation in a branch-and-cut algorithm. Hence it's necessary to keep track of which ODSI object owns the solver. Dylp has been modified to do this. The ODSI object sets the owner field of #lpprob and dylp records it. To find the current owner, invoke dy_getOwner(). The proper test for solver ownership is dy_getOwner() == this and the DYVALID flag is set in lpprob->ctlopts. This is a belt-and-suspenders test; in theory only the check of dylp_owner should be necessary. The method #detach_dylp is provided to transfer ownership. There is no corresponding attach_dylp method; use #resolve(). Dylp is *NOT* thread-safe. To make it thread-safe would require a lock around the methods that access the underlying solver. In general this would result in unacceptable delays when threads contended for the solver. Recognise this as a statement that dylp predates the ubiquity of multi-threaded execution. Someday this will change. `Fresh' Solutions The OSI specification says that changes to the problem structure should invalidate the current solution. However, the de facto standards (the OSI unitTest and the OsiClp implementation) are more relevant, particularly for solvers that expect to work in Cbc. Cbc pushes the rules pretty hard. OsiDylp offers a compile-time option, ODSI_STRICTLY_FRESH. When this symbol is defined, ODSI will throw an exception if the user tries to use a stale solution. If it's not defined, ODSI will return whatever information it has. In any event, you'll get a warning at any log level greater than 0. ODSI_STRICTLY_FRESH is enabled by default. The actual behaviour is a bit more complicated, due to the extreme cases. The OSI unitTest requires that an empty solver (no constraint system) return null when asked for solution vectors. Also, the client can load in a primal or dual solution. ODSI keeps these in the cached solution vectors (and they are totally irrelevant to dylp). Similarly, when a problem is loaded, a pessimal primal solution is generated and cached. The actual tests are:
  • If a cached solution vector exists, return it. This implies that ODSI must be scrupulous about invalidating the cache when changes are made to the problem. The converse is also true; the cache should never be invalidated unless there's been a change in the problem.
  • If the solver is empty (no consys), return null.
  • If #solnIsFresh is true, rebuild cached solution data as needed from lpprob and return it. If #solnIsFresh is false, act according to ODSI_STRICTLY_FRESH, as described above.
Index Base: OsiSolverInterface indexes variables and constraints from 0 (the standard approach for C/C++) while dylp indexes them from 1 (for robustness; see consys.h). Some caution is needed in the interface to avoid off-by-one errors. Similarly, arrays (vectors) for k elements in dylp occupy k+1 space with vector[0] unused. #idx, #inv, and #inv_vec are used to make these trivial conversions explicit. Copy and Assert: To clone, each part of dylp's data structures (lpprob, consys, basis) is copied (ODSI::copy*) and then (optionally) verified (ODSI::assert_same* and assert). Helpers for copying and verifying primitive types (integer and double) and array types are implemented with C++ templates. (If you skipped it, this is a good moment to check the source file and read the note at the beginning about MS C++ and templates.) Constraint Grooming The OSI layer (or at least the OSI test suite) expects that the constraint system read back from the solver will be the same as the constraint system given to the solver. Dylp will automagically convert >= constraints to <= constraints internally using its row scaling matrix. Anything else is up to the client and should be done before calling ODSI methods. dylp can tolerate empty constraints. Error Recovery #do_lp embodies a rudimentary strategy that attempts to recover from numerical inaccuracy by refactoring the basis more often (on the premise that this will reduce numerical inaccuracy in calculations involving the basis inverse). Status of Logical Variables The OSI convention for the status of logical (artificial) variables assumes that logicals always have a positive coefficient:
  • ax <= b becomes ax + s = b for 0 <= s <= infty
  • ax >= b becomes ax + s = b for -infty <= s <= 0
  • blow <= ax <= b becomes ax + s = b for 0 <= s <= b-blow
If you want a convenient justification for the assumption that all logicals have a positive coefficient, recognise that this is the assumption required in order to claim that the reduced cost of the slack is the negative of the dual for the associated constraint. On the down side, this convention means that the status of the logical is opposite the constraint: a tight <= constraint, for example, will have an artificial that's nonbasic at lower bound. */ namespace { /* A little print helper routine for the ODSI_start_enum type. */ const char *startString (ODSI_start_enum start) { switch (start) { case startCold: { return ("cold") ; } case startWarm: { return ("warm") ; } case startHot: { return ("hot") ; } default: { return ("!invalid!") ; } } } } // end unnamed file-local namespace using std::string ; using std::vector ; extern "C" { #include "dy_cmdint.h" #ifndef DYLP_ERRMSGDIR /* This is the correct path to find dy_errmsgs.txt from Osi/test, assuming the default COIN directory structure for Dylp, to wit: DyLP src Dylp OsiDylp But you most likely want an absolute path, not a relative path, so that the executable isn't tied to this directory. This symbol is normally defined when DyLP is configured, and will be set to the absolute path to DyLP/src/Dylp. You can override the configuration by setting DYLP_ERRMSGDIR in the environment before configuring and building DyLP. Note that the surrounding quotes are part of the definition. The path must end in a directory separator. */ # ifdef _MSC_VER # define DYLP_ERRMSGDIR "..\\Dylp\\" # else # define DYLP_ERRMSGDIR "../Dylp/" # endif #endif extern void dy_initbasis(int concnt, int factor_freq, double zero_tol) ; extern void dy_freebasis() ; } /* Used to be a doxygen comment, but the variables no longer exist. Still, the information seems useful. defgroup DylpIO dylp i/o control variables brief Variables controlling dylp file and terminal i/o. Dylp is capable of generating a great deal of output, but the control mechanism is not a good fit for C++ objects and the OSI framework. Two global variables, dy_logchn and dy_gtxecho, control log message output to a file and echoing to stdout, respectively. More recently, these are not intended to be visible outside of dylp (in preparation for making dylp reentrant) and are controlled by dy_setlogchn and dy_setgtxecho. Within the ODSI object, look to #local_logchn, #initial_gtxecho, and #resolve_gtxecho. dy_gtxecho can be controlled using the OsiDoReducePrint hint; it is set to true whenever the print level is specified as an absolute integer such that (print level) & 0x10 != 0 If the symbol #ODSI_IMPLICIT_SPC is defined, command (option) files are handled in the following manner: When an MPS file example.mps is read, the solver looks for an options file example.spc in the same directory. If it exists, it is processed. This is a local file open/close, well-defined and clean, but with little user control. The commands will not be echoed. The user can process an arbitrary command file by calling dylp_controlfile (a non-OSI function). Log output is disabled by default. The user can enable logging by calling dylp_logfile (a non-OSI function). For historical reasons, dylp uses a private i/o subsystem for file and terminal i/o, built on top of the C stdio library. */ /*! \defgroup DylpResidual dylp residual control variables \brief Variables controlling persistent dylp subsystems These variables are used to control initialisation and shutdown of the i/o and basis maintenance subsystems, and to track the state of the dylp solver. The i/o subsystem is initialised when the first ODSI object is created (constructors, reference_count == 1), and shut down when the last ODSI object is destroyed (destructor, reference_count == 0). The basis maintenance package is initialised at the first attempt to solve an lp (initialSolve, basis_ready == false, or resolve, basis_ready == false) and shut down when the last ODSI object is destroyed (destructor, reference_count == 0, basis_ready == true). */ //@{ /*! \var int OsiDylpSolverInterface::reference_count \brief Tracks the number of ODSI objects in existence. */ /*! \var bool OsiDylpSolverInterface::basis_ready \brief Tracks basis initialisation Initialisation of the basis data structures is delayed until the user actually attempts to solve an lp. */ int ODSI::reference_count = 0 ; bool ODSI::basis_ready = false ; //@} /*! \defgroup VectorHelpers Vector Helper Functions \brief Vector helper functions Dylp uses 1-based indexing rather than the usual 0-based indexing; idx, idx_vec, inv, and inv_vec make this conversion explicit. See the \link OsiDylpSolverInterface.cpp file comments \endlink for a brief description. This group also provides a function for conversion between the OSI notion of a packed vector and the dylp notion of a packed vector. */ //@{ /* MS C++ doesn't like the template functions idx_vec and inv_vec. To keep it happy, wrap them in macros which will accomplish the same thing. */ #ifdef _MSC_VER # define IDX_VEC(zz_type_zz,zz_vec_zz) (zz_vec_zz-1) # define INV_VEC(zz_type_zz,zz_vec_zz) (zz_vec_zz+1) #else # define IDX_VEC(zz_type_zz,zz_vec_zz) idx_vec(zz_vec_zz) # define INV_VEC(zz_type_zz,zz_vec_zz) inv_vec(zz_vec_zz) #endif /*! \brief Load a CoinShallowPackedVector into a new dylp pkvec. pkvec's created with this routine must eventually be freed with pkvec_free. Note that 0-based indexing is used for the entries of the coeff vector (i.e., coeffs[0] is valid). \param dimension The length of the vector if it were to be unpacked. */ pkvec_struct* ODSI::packed_vector (const CoinShallowPackedVector src, int dimension) { int n = src.getNumElements() ; pkvec_struct* dst = pkvec_new(n) ; assert(dst) ; if (n == 0) return (dst) ; packed_vector(src,dimension,dst) ; return (dst) ; } /*! \brief Load a CoinShallowPackedVector to an existing dylp pkvec. Note that 0-based indexing is used for the entries of the coeff vector (i.e., coeffs[0] is valid). \param dimension The length of the vector if it were to be unpacked. */ void ODSI::packed_vector (const CoinShallowPackedVector src, int dimension, pkvec_struct *dst) { int n = src.getNumElements() ; dst->cnt = n ; dst->dim = dimension ; if (n == 0) return ; const int* indices = src.getIndices() ; const double* elements = src.getElements() ; pkcoeff_struct* coeffs = dst->coeffs ; for (int i = 0 ; i < n ; i++) { coeffs[i].ndx = idx(indices[i]) ; coeffs[i].val = elements[i] ; } return ; } //@} // VectorHelpers /*! \defgroup CopyHelpers Copy Helpers Copy template functions for simple vectors and fixed size objects, and specializations for various complex structures. */ //@{ /* Templates for simple copies */ /*! \brief Copy a structure byte-wise. Destination structure is allocated and returned to caller. */ template inline T* ODSI::copy (const T* src) { if (!src) return 0 ; T* dst = new T ; memcpy(dst, src, sizeof(T)) ; return dst ; } #ifdef _MSC_VER # define CLONE(zz_type_zz,zz_src_zz,zz_dst_zz) \ if (zz_src_zz) \ { zz_dst_zz = new zz_type_zz ; \ memcpy(zz_dst_zz,zz_src_zz,sizeof(zz_type_zz)) ; } \ else \ { zz_dst_zz = NULL ; } #else # define CLONE(zz_type_zz,zz_src_zz,zz_dst_zz) \ zz_dst_zz = copy(zz_src_zz) ; #endif /*! \brief Copy a primitive array of values element-wise. Caller supplies the destination vector. */ template inline void ODSI::copy (const T* src, T* dst, int n) { if (!dst || !src || n == 0) return ; size_t size = sizeof(T) * n ; memcpy(dst,src,size) ; } #ifdef _MSC_VER # define COPY_VEC(zz_type_zz,zz_src_zz,zz_dst_zz,zz_n_zz) \ if (zz_dst_zz && zz_src_zz && zz_n_zz > 0 ) \ std::copy(zz_src_zz,zz_src_zz+zz_n_zz,zz_dst_zz) #else # define COPY_VEC(zz_type_zz,zz_src_zz,zz_dst_zz,zz_n_zz) \ copy(zz_src_zz,zz_dst_zz,zz_n_zz) #endif /*! \brief Copy a primitive array of values element-wise. Destination vector is allocated and returned to caller. */ template inline T* ODSI::copy (const T* src, int n) { if (!src || n == 0) return 0 ; T* dst = new T[n] ; copy(src, dst, n) ; return dst ; } #ifdef _MSC_VER # define CLONE_VEC(zz_type_zz,zz_src_zz,zz_dst_zz,zz_n_zz) \ if (zz_src_zz && zz_n_zz > 0) \ { zz_dst_zz = new zz_type_zz[zz_n_zz] ; \ std::copy(zz_src_zz,zz_src_zz+zz_n_zz,zz_dst_zz) ; } \ else \ { zz_dst_zz = NULL ; } #else # define CLONE_VEC(zz_type_zz,zz_src_zz,zz_dst_zz,zz_n_zz) \ zz_dst_zz = copy(zz_src_zz,zz_n_zz) #endif /* Specialised copy functions for complex dylp structures. */ /*! \brief Specialised copy function for a dylp basis_struct This routine expects that the basis will come already provisioned with a basis element vector of the proper capacity. */ inline void ODSI::copy_basis (const basis_struct* src, basis_struct* dst) { if (!src) return ; dst->len = src->len ; if (dst->el == 0) { throw CoinError("No basis element vector", "copy_basis","OsiDylpSolverInterface") ; } memcpy(dst->el,src->el,idx(src->len)*sizeof(basisel_struct)) ; # if ODSI_PARANOIA >= 2 assert_same(*dst, *src, true) ; # endif return ; } /*! \brief Specialised copy function for a dylp basis_struct This routine will allocate a basis element vector of the proper capacity. NOTE that the capacity must equal or exceed lpprob_struct->rowsze for the lpprob_struct that this basis is attached to. We use CALLOC here to minimize mixing of memory allocation with new & alloc. This structure stands a good chance of being reallocated within dylp. Recall that this is 1-based addressing, hence the need to allocate (and copy) one additional element. */ inline basis_struct* ODSI::copy_basis (const basis_struct* src, int dstsze) { if (!src) return 0 ; basis_struct* dst = new basis_struct ; dst->el = (basisel_struct *) CALLOC(idx(dstsze),sizeof(basisel_struct)) ; copy_basis(src,dst) ; return dst ; } /*! \brief Specialised copy function for a dylp lpprob_struct */ lpprob_struct* ODSI::copy_lpprob (const lpprob_struct* src) { if (!src) return 0 ; int col_count = idx(src->colsze) ; int row_count = idx(src->rowsze) ; lpprob_struct* dst = NULL; CLONE(lpprob_struct,src,dst); dst->basis = copy_basis(src->basis,row_count) ; CLONE_VEC(flags,src->status,dst->status,col_count); CLONE_VEC(double,src->x,dst->x,row_count); CLONE_VEC(double,src->y,dst->y,row_count); CLONE_VEC(bool,src->actvars,dst->actvars,col_count); # if ODSI_PARANOIA >= 2 assert_same(*dst, *src, true) ; # endif return dst ; } //@} // CopyHelpers /* Cache functions These properly belong in the DestructorHelpers group, but they need to be up here so that they are declared before the first use. There are two variants, destruct_primal_cache and destruct_dual_cache, that are used only to respond to problem modifications. */ /*! \brief Destroy cached values \ingroup DestructorHelpers Destroy cached copies of computed values for columns. If structure is true, structural values are destroyed along with solution values. See the \link OsiDylpSolverInterface.cpp comments \endlink at the head of the file for a brief description of the ODSI cache mechanism. */ inline void ODSI::destruct_col_cache (bool structure) { delete [] _col_x ; _col_x = 0 ; delete [] _col_cbar ; _col_cbar = 0 ; if (structure == true) { delete [] _col_obj ; _col_obj = 0 ; } return ; } /*! \brief Destroy cached values \ingroup DestructorHelpers Destroy cached copies of computed values for rows. If structure is true, structural values are destroyed along with solution values. See the \link OsiDylpSolverInterface.cpp comments \endlink at the head of the file for a brief description of the ODSI cache mechanism. */ void ODSI::destruct_row_cache (bool structure) { delete [] _row_price ; _row_price = 0 ; delete [] _row_lhs ; _row_lhs = 0 ; if (structure == true) { delete [] _row_lower ; _row_lower = 0 ; delete [] _row_range ; _row_range = 0 ; delete [] _row_rhs ; _row_rhs = 0 ; delete [] _row_sense ; _row_sense = 0 ; delete [] _row_upper ; _row_upper = 0 ; } return ; } /*! \brief Destroy cached values \ingroup DestructorHelpers Destroy cached copies of computed values. If either rowStructure or colStructure is true, take it as an indication we need to delete the cached copies of the constraint system. If you want to remove structural aspects of the row or column cache, without affecting the matrices, call them individually. See the \link OsiDylpSolverInterface.cpp file comments \endlink for a brief description of the ODSI cache mechanism. */ inline void ODSI::destruct_cache (bool rowStructure, bool colStructure) { destruct_row_cache(rowStructure) ; destruct_col_cache(colStructure) ; if (rowStructure == true || colStructure == true) { delete _matrix_by_row ; _matrix_by_row = 0 ; delete _matrix_by_col ; _matrix_by_col = 0 ; } return ; } /*! \brief Destroy cached dual solution values \ingroup DestructorHelpers Destroy cached copies of dual solution values: _col_cbar, _row_price. */ inline void ODSI::destruct_dual_cache () { delete [] _col_cbar ; _col_cbar = 0 ; delete [] _row_price ; _row_price = 0 ; return ; } /*! \brief Destroy cached primal solution values \ingroup DestructorHelpers Destroy cached copies of primal solution values: _col_x, _row_lhs. */ inline void ODSI::destruct_primal_cache () { delete [] _col_x ; _col_x = 0 ; delete [] _row_lhs ; _row_lhs = 0 ; return ; } /*! \defgroup ConsysHelpers Helper Functions for Problem Modification \brief Private helper functions for problem modification This group of functions implement conversions between the OSI notion of a constraint system and the dylp notion of a constraint system, and calculations related to modification of the primal solution or objective. */ //@{ /*! \brief Determine dylp constraint type from constraint bounds. */ inline contyp_enum ODSI::bound_to_type (double lower, double upper) { if (upper == lower) return contypEQ ; bool finite_low = (lower > -odsiInfinity) ; bool finite_up = (upper < odsiInfinity) ; if (finite_low && finite_up) return contypRNG ; if (finite_low) return contypGE ; if (finite_up) return contypLE ; return contypNB ; } /*! \brief Convert OSI row sense to dylp constraint type */ inline contyp_enum ODSI::sense_to_type (char sense) { switch (sense) { case 'E': return contypEQ ; case 'G': return contypGE ; case 'L': return contypLE ; case 'N': return contypNB ; case 'R': return contypRNG ; default: { assert(0) ; return contypINV ; } } } /*! \brief Convert dylp constraint type to OSI row sense */ inline char ODSI::type_to_sense (contyp_enum ctypi) { switch (ctypi) { case contypNB: { return 'N' ; } case contypGE: { return 'G' ; } case contypEQ: { return 'E' ; } case contypLE: { return 'L' ; } case contypRNG: { return 'R' ; } case contypINV: default: { assert(0) ; return '?' ; } } } /*! \brief Convert OSI sense/rhs/range description for a single constraint to dylp type/rhs/rhslow form This routine generates the dylp rhs, rhslow, and ctyp values corresponding to the supplied OSI sense, rhs, and range values. */ inline void ODSI::gen_rowiparms (contyp_enum* ctypi, double* rhsi, double* rhslowi, char sensei, double rhsini, double rangei) { *ctypi = sense_to_type(sensei) ; switch (*ctypi) { case contypEQ: { *rhslowi = 0 ; *rhsi = rhsini ; break ; } case contypLE: { *rhslowi = 0 ; *rhsi = rhsini ; break ; } case contypGE: { *rhslowi = 0 ; *rhsi = rhsini ; break ; } case contypRNG: { *rhslowi = rhsini-rangei ; *rhsi = rhsini ; break ; } case contypNB: { *rhslowi = 0 ; *rhsi = 0 ; break ; } default: { assert(false) ; } } return ; } /*! \brief Convert OSI upper/lower bound description for a single constraint to dylp type/rhs/rhslow form This routine generates the dylp rhs, rhslow, and ctyp values corresponding to the supplied constraint upper and lower bound values. */ inline void ODSI::gen_rowiparms (contyp_enum* ctypi, double* rhsi, double* rhslowi, double rowlbi, double rowubi) { *ctypi = bound_to_type(rowlbi,rowubi) ; switch (*ctypi) { case contypEQ: case contypLE: { *rhslowi = 0 ; *rhsi = rowubi ; break ; } case contypGE: { *rhslowi = 0 ; *rhsi = rowlbi ; break ; } case contypRNG: { *rhslowi = rowlbi ; *rhsi = rowubi ; break ; } case contypNB: { *rhslowi = 0 ; *rhsi = 0 ; break ; } default: { assert(false) ; } } return ; } /*! \brief Add a column to the constraint matrix. Convert the OSI packed vector to a dylp packed vector and install the column. The remaining parameters are expected to be in the correct dylp form. Note that the ODSI client may be building a constraint system from scratch using calls to addCol/addRow. There's no guarantee that consys exists yet. */ void ODSI::add_col (const CoinPackedVectorBase& coin_colj, vartyp_enum vtypj, double vlbj, double vubj, double objj, const std::string *nme) { pkvec_struct *pk_colj = packed_vector(coin_colj,getNumRows()) ; /* Do we need a consys? */ if (!consys) construct_consys(0,0) ; /* Generate a name. Not a trivial issue; unique names are critical to the ability to write out a system in mps format. */ std::string colname ; if (nme != 0) { colname = *nme ; } else { int n = getNumCols() ; colname = dfltRowColName('c',n) ; } pk_colj->nme = colname.c_str() ; /* Add the column. */ bool r = consys_addcol_pk(consys,vtypj,pk_colj,objj*obj_sense,vlbj,vubj) ; pkvec_free(pk_colj) ; if (!r) { lp_retval = lpFATAL ; } /* After adding a column, the best we can do is a warm start. Any current solution is no longer valid, and we need to delete the structural side of the column cache. */ resolveOptions->forcewarm = true ; solnIsFresh = false ; # if ODSI_TRACK_FRESH > 0 std::cout << "ODSI(" << std::hex << this << std::dec << ")::add_col: new column." << std::endl ; # endif destruct_cache(false,true) ; } /*! \brief Add a row to the constraint matrix. Convert the OSI packed vector to a dylp packed vector and install the row. The remaining parameters are expected to be in the correct dylp form. Note that the ODSI client may be building a constraint system from scratch using calls to addCol/addRow. There's no guarantee that consys exists yet. */ void ODSI::add_row (const CoinPackedVectorBase &coin_rowi, char clazzi, contyp_enum ctypi, double rhsi, double rhslowi, const std::string *nme) { pkvec_struct *pk_rowi = packed_vector(coin_rowi,getNumCols()) ; /* Do we need a consys? */ if (!consys) construct_consys(0,0) ; /* Generate a name. Not a trivial issue; unique names are critical to the ability to write out a system in mps format. If we're given a name as part of the call, use that. Otherwise, use the OSI name facility to generate a default name. */ std::string rowname ; if (nme != 0) { rowname = *nme ; } else { int m = getNumRows() ; rowname = dfltRowColName('r',m) ; } pk_rowi->nme = rowname.c_str() ; /* Add the row. */ bool r = consys_addrow_pk(consys,clazzi,ctypi, pk_rowi,rhsi,rhslowi,0,0) ; pkvec_free(pk_rowi) ; if (!r) { lp_retval = lpFATAL ; } /* After adding a constraint, the best we can do is a warm start. Any current solution is no longer valid, and we need to delete the structural side of the row cache. */ resolveOptions->forcewarm = true ; solnIsFresh = false ; # if ODSI_TRACK_FRESH > 0 std::cout << "ODSI(" << std::hex << this << std::dec << ")::add_row: new row." << std::endl ; # endif destruct_cache(true,false) ; } /*! \brief Establish a pessimistic primal solution. This routine sets up a pessimistic basic primal solution. The logicals are assigned to the basis, and the architecturals are set to the (finite) bound that produces the worst objective function value. We can't claim this is a worst-case bound on the objective because we're restricted to choosing a finite bound for the nonbasic variables, if one exists. Feasibility (with respect to the architectural constraints) is not even on the radar. The interface design guarantees that if a consys_struct exists, then the objective and bounds vectors are already attached to it. */ void ODSI::pessimal_primal () { /* No columns, no solution. A non-zero value guarantees a consys structure. */ int n = getNumCols() ; if (n == 0) return ; assert(consys && consys->obj && consys->vub && consys->vlb) ; int m = getNumRows() ; double *obj = consys->obj ; double *vlb = consys->vlb ; double *vub = consys->vub ; double lbj,ubj,xj ; CWSB::Status statj ; /* We have columns. Replace or allocate the cached primal solution vector. */ if (_col_x) delete[] _col_x ; _col_x = new double[n] ; /* Create a basis of the appropriate size. */ OsiDylpWarmStartBasis *pessbasis = dynamic_cast(getEmptyWarmStart()) ; pessbasis->setSize(n,m) ; /* Walk the objective vector, taking values for variables from the appropriate bounds vector. The objective attached to consys is always a minimisation objective. */ for (int j = 1 ; j <= n ; j++) { lbj = vlb[j] ; ubj = vub[j] ; if (lbj > -odsiInfinity && ubj < odsiInfinity) { if (obj[j] > 0) { xj = ubj ; statj = CWSB::atUpperBound ; } else { xj = lbj ; statj = CWSB::atLowerBound ; } } else if (lbj > -odsiInfinity) { xj = lbj ; statj = CWSB::atLowerBound ; } else if (ubj < odsiInfinity) { xj = ubj ; statj = CWSB::atUpperBound ; } else { xj = 0 ; statj = CWSB::isFree ; } _col_x[inv(j)] = xj ; pessbasis->setStructStatus(inv(j),statj) ; } /* Set the logicals (aka artificials) to be basic and mark all constraints as active. */ for (int i = 1 ; i <= m ; i++) { pessbasis->setArtifStatus(inv(i),CWSB::basic) ; pessbasis->setConStatus(inv(i),CWSB::atLowerBound) ; } /* Set pessbasis to be the active basis and return. The basis state is modified because we havn't set the basis into an lpprob object. */ # if ODSI_TRACK_ACTIVE > 0 std::cout << "ODSI(" << std::hex << this << ")::pessimal_primal: replacing active basis " << activeBasis.basis << " with " << pessbasis << std::dec << "." << std::endl ; # endif delete activeBasis.basis ; activeBasis.basis = pessbasis ; activeBasis.condition = ODSI::basisModified ; activeBasis.balance = 0 ; return ; } /*! \brief Calculate objective value using cached objective function and primal solution. This routine refreshes the cached objective value. It's intended for use after client changes to the the objective coefficients or primal solution values. Note that the cached objective value is updated directly from the solver return value whenever the solver is called. */ void ODSI::calc_objval () { int n = getNumCols() ; /* The easy case --- if we have no variables, the objective must be 0. */ if (n == 0) { _objval = 0 ; return ; } /* We have variables. Grab the primal solution and objective function and calculate their dot product. */ const double *obj = getObjCoefficients() ; const double *x = getColSolution() ; _objval = 0.0 ; for (int j = 0 ; j < n ; j++) _objval += x[j]*obj[j] ; setcleanzero(_objval,tolerances->cost) ; return ; } //@} // ConsysHelpers /* OsiDylpSolverInterface constructors and related subroutines. */ /*! \defgroup ConstructorHelpers Helper functions for problem construction */ //@{ /*! \brief Construct a dylp lpprob_struct (LP problem). */ void ODSI::construct_lpprob () { lpprob = new lpprob_struct ; memset(lpprob, 0, sizeof(lpprob_struct)) ; setflg(lpprob->ctlopts,lpctlNOFREE) ; lpprob->phase = dyINV ; lpprob->consys = consys ; lpprob->rowsze = consys->rowsze ; lpprob->colsze = consys->colsze ; lpprob->owner = this ; return ; } /*! \brief Construct and initialise default options and tolerances. */ inline void ODSI::construct_options () { /* Acquire the default options and tolerances from dylp. Set the OSI options and tolerances to match. Turn dylp's printing options down to `catatonic'. */ delete initialSolveOptions ; initialSolveOptions = new lpopts_struct ; delete tolerances ; tolerances = new lptols_struct ; dy_defaults(&initialSolveOptions,&tolerances) ; tolerances->inf = odsiInfinity ; delete resolveOptions ; CLONE(lpopts_struct,initialSolveOptions,resolveOptions); dy_setprintopts(0,initialSolveOptions) ; dy_setprintopts(0,resolveOptions) ; setIntParam(OsiMaxNumIteration,3*initialSolveOptions->iterlim) ; setIntParam(OsiMaxNumIterationHotStart,3*initialSolveOptions->iterlim) ; setDblParam(OsiDualTolerance,tolerances->dfeas_scale*tolerances->cost) ; setDblParam(OsiPrimalTolerance,tolerances->pfeas_scale*tolerances->zero) ; /* Differentiate options for initial solution vs. reoptimising. */ initialSolveOptions->forcecold = true ; initialSolveOptions->fullsys = true ; resolveOptions->forcecold = false ; resolveOptions->fullsys = false ; return ; } /*! \brief Construct an empty constraint system of the specified size. Construct an empty constraint system of the specified capacity, with all the appropriate options and attached vectors. If the specified capacity is 0, you'll get dylp's (moderately large) default values (capacity for a thousand or so constraints and variables). */ void ODSI::construct_consys (int cols, int rows) { /* Set parameters to specify the appropriate options and attached vectors. parts specifies (in order) an objective, variable upper bounds, variable lower bounds, constraint rhs, range constraint rhs, variable type, and constraint type. options specifies that consys should issue a warning if requested to attach a vector that's already attached. */ flags parts = CONSYS_OBJ | CONSYS_VUB | CONSYS_VLB | CONSYS_VTYP | CONSYS_RHS | CONSYS_RHSLOW | CONSYS_CTYP ; flags opts = CONSYS_WRNATT ; /* The first parameter to consys is the constraint system name, which is never conveniently available in the OSI frame. */ consys = consys_create(0,parts,opts,rows,cols,odsiInfinity) ; if (consys == 0) { lp_retval = lpFATAL ; } return ; } /*! \brief Initialise dylp i/o subsystems Initialise dylp i/o subsystems for normal and error output. This should be done only once. */ void ODSI::dylp_ioinit () { if (reference_count > 1) return ; string errfile = string(DYLP_ERRMSGDIR)+string("dy_errmsgs.txt") ; # ifdef ODSI_INFOMSGS errinit(const_cast(errfile.c_str()),0,true) ; # else errinit(const_cast(errfile.c_str()),0,false) ; # endif bool r1 UNUSED = dyio_ioinit() ; assert(r1) ; } /*! \brief Load a problem description This routine expects a CoinMpsIO object, and proceeds to extract the information from the object. This permits problem, constraint, and variable names to be passed in to dylp, which makes for much friendlier output. first thing it does is unpack the expected operands from the CoinMpsIO object. The next action is to destroy the existing problem. Existing options and tolerances settings are not affected. The routine then builds an empty consys_struct of the proper size with a call to construct_consys. The main body of the routine fills the constraint matrix in two loops. In the first, calls to consys_addrow_pk insert empty constraints and establish the constraint type, rhs, and (optional) range. Then calls to consys_addcol_pk insert the variables, along with their bounds and objective coefficient. Finally, a primal solution is invented, and the objective is set accordingly. */ void ODSI::load_problem (const CoinMpsIO &mps) { int n = mps.getNumCols() ; int m = mps.getNumRows() ; /* Unpack the operands from the CoinMpsIO object. */ const CoinPackedMatrix matrix = *mps.getMatrixByCol() ; const double* col_lower = mps.getColLower() ; const double* col_upper = mps.getColUpper() ; const double* obj = mps.getObjCoefficients() ; const char *sense = mps.getRowSense() ; const double* rhsin = mps.getRightHandSide() ; const double* range = mps.getRowRange() ; double *rhs = new double[m] ; double *rhslow = new double[m] ; contyp_enum *ctyp = new contyp_enum[m] ; gen_rowparms(m,rhs,rhslow,ctyp,sense,rhsin,range) ; /* Free the existing problem structures, preserving options and tolerances. */ destruct_problem(true) ; /* Create an empty consys_struct. Load the constraint system name, objective name, and objective offset. */ construct_consys(n,m) ; setStrParam(OsiProbName,mps.getProblemName()) ; consys_chgnme(consys,'s',0,mps.getProblemName()) ; consys_chgnme(consys,'o',0,mps.getObjectiveName()) ; setDblParam(OsiObjOffset,mps.objectiveOffset()) ; /* First loop: Insert empty constraints into the new constraint system. */ pkvec_struct* rowi = pkvec_new(0) ; assert(rowi) ; bool r = true ; for (int i = 0 ; i < m ; i++) { rowi->nme = const_cast(mps.rowName(i)) ; r = consys_addrow_pk(consys,'a',ctyp[i],rowi,rhs[i],rhslow[i],0,0) ; if (!r) { lp_retval = lpFATAL ; break ; } } if (rowi) pkvec_free(rowi) ; delete[] rhs ; delete[] rhslow ; delete[] ctyp ; if (!r) { lp_retval = lpFATAL ; return ; } /* Take a moment and set up a vector of variable types. It's a bit of a pain that CoinMpsIO doesn't distinguish binary from general integer, but we can do it here by checking bounds. The test is drawn from OSI::isBinary and will include variables fixed at 0 or 1. */ const char *const intvars = mps.integerColumns() ; vartyp_enum *const vtyp = new vartyp_enum[n] ; if (intvars) { for (int j = 0 ; j < n ; j++) { if (intvars[j]) { if ((col_lower[j] == 0.0 || col_lower[j] == 1.0) && (col_upper[j] == 0.0 || col_upper[j] == 1.0)) { vtyp[j] = vartypBIN ; } else { vtyp[j] = vartypINT ; } } else { vtyp[j] = vartypCON ; } } } else { for (int j = 0 ; j < n ; j++) vtyp[j] = vartypCON ; } /* Second loop. Insert the coefficients by column. If we need to create a column-ordered copy, take advantage and cache it. */ const CoinPackedMatrix *matrix2 ; if (matrix.isColOrdered()) { matrix2 = &matrix ; } else { _matrix_by_col = new CoinPackedMatrix ; _matrix_by_col->reverseOrderedCopyOf(matrix) ; matrix2 = _matrix_by_col ; } pkvec_struct* colj = pkvec_new(m) ; for (int j = 0 ; j < n ; j++) { const CoinShallowPackedVector coin_col = matrix2->getVector(j) ; packed_vector(coin_col,n,colj) ; colj->nme = const_cast(mps.columnName(j)) ; r = consys_addcol_pk(consys,vtyp[j],colj,obj[j]*obj_sense, col_lower[j],col_upper[j]) ; if (!r) { break ; } } pkvec_free(colj) ; delete[] vtyp ; if (!r) { lp_retval = lpFATAL ; return ; } assert(matrix2->isEquivalent(*getMatrixByCol())) ; /* Extract the row and column names from the MPS object and install them in the base OSI object. Push up the objective name while we're at it. */ setRowColNames(mps) ; /* Construct a pessimal solution and we're done. */ pessimal_primal() ; calc_objval() ; return ; } /*! \brief Load a problem description This routine expects a constraint system described in terms of an OSI packed matrix and dylp constraint type (ctyp) and right-hand-side (rhs, rhslow) vectors. The first action is to destroy the existing problem. Existing options and tolerances settings are not affected. Next the routine builds an empty consys_struct of the proper size with a call to construct_consys. The main body of the routine fills the constraint matrix in two loops. In the first, calls to consys_addrow_pk insert empty constraints and establish the constraint type, rhs, and (optional) range. Then calls to consys_addcol_pk insert the variables, along with their bounds and objective coefficient. Finally, a primal solution is invented, and the objective is set accordingly. */ void ODSI::load_problem (const CoinPackedMatrix& matrix, const double* col_lower, const double* col_upper, const double* obj, const contyp_enum *ctyp, const double* rhs, const double* rhslow) { /* Free the existing problem structures, preserving options and tolerances. */ destruct_problem(true) ; /* We're expecting to work with a column-ordered matrix, so make sure that's true. If we need to create a column-ordered copy, take advantage and cache it. */ const CoinPackedMatrix *matrix2 ; if (matrix.isColOrdered()) { matrix2 = &matrix ; } else { _matrix_by_col = new CoinPackedMatrix ; _matrix_by_col->reverseOrderedCopyOf(matrix) ; matrix2 = _matrix_by_col ; } /* Create an empty consys_struct. */ int m = matrix2->getNumRows() ; int n = matrix2->getNumCols() ; construct_consys(n,m) ; /* First loop: Insert empty constraints into the new constraint system. */ pkvec_struct* rowi = pkvec_new(0) ; assert(rowi) ; bool r = true ; for (int i = 0 ; i < m ; i++) { rowi->nme = 0 ; r = consys_addrow_pk(consys,'a',ctyp[i],rowi,rhs[i],rhslow[i],0,0) ; if (!r) { break ; } } if (rowi) pkvec_free(rowi) ; if (!r) { lp_retval = lpFATAL ; return ; } /* Second loop. Insert the coefficients by column. */ pkvec_struct* colj = pkvec_new(m) ; for (int j = 0 ; j < n ; j++) { const CoinShallowPackedVector coin_col = matrix2->getVector(j) ; packed_vector(coin_col,n,colj) ; double objj = obj?obj[j]:0 ; double vlbj = col_lower?col_lower[j]:0 ; double vubj = col_upper?col_upper[j]:odsiInfinity ; colj->nme = 0 ; r = consys_addcol_pk(consys,vartypCON,colj,objj*obj_sense,vlbj,vubj) ; if (!r) { break ; } } pkvec_free(colj) ; if (!r) { lp_retval = lpFATAL ; return ; } assert(matrix2->isEquivalent(*getMatrixByCol())) ; /* Construct a pessimal solution and we're done. */ pessimal_primal() ; calc_objval() ; return ; } /*! \brief Load a problem description This routine expects a constraint system described using a standard column- major packed matrix structure and dylp constraint sense and right-hand-side (rhs, rhslow) vectors. The matrix description consists of row and column size and four arrays. Coefficients and corresponding row indices are given in value and index, respectively (the bulk storage). The vectors start and len contain the starting position and length, respectively, of each column in the bulk storage arrays. By passing in an explicit len array, we can handle both fully packed matrices (the usual case) and loosely packed matrices (as produced by presolve). The first action is to free the existing problem. Existing options and tolerances settings are saved, if they exist, and will be restored after the new problem is loaded. Next the routine builds an empty consys_struct of the proper size with a call to construct_consys. The main body of the routine fills the constraint matrix in two loops. In the first, calls to consys_addrow_pk insert empty constraints and establish the constraint type and rhs. Then calls to consys_addcol_pk insert the variables, along with their bounds and objective coefficient. Finally, an lpprob_struct is created to hold the new problem, and options and tolerances are reattached or initialised from defaults. */ void ODSI::load_problem (const int colcnt, const int rowcnt, const int *start, const int *len, const int *index, const double *value, const double* col_lower, const double* col_upper, const double* obj, const contyp_enum *ctyp, const double* rhs, const double* rhslow) { /* Free the existing problem structures, preserving options and tolerances. */ destruct_problem(true) ; /* Create an empty consys_struct. Request the standard attached vectors: objective, variable upper & lower bounds, variable and constraint types, and constraint right-hand-side and range (rhslow). */ construct_consys(rowcnt,colcnt) ; /* First loop: Insert empty constraints into the new constraint system. */ pkvec_struct* rowi = pkvec_new(0) ; assert(rowi) ; bool r = true ; for (int i = 0 ; i < rowcnt ; i++) { rowi->nme = 0 ; r = consys_addrow_pk(consys,'a',ctyp[i],rowi,rhs[i],rhslow[i],0,0) ; if (!r) { break ; } } if (rowi) pkvec_free(rowi) ; if (!r) { lp_retval = lpFATAL ; return ; } /* Second loop. Insert the coefficients by column. The size of colj is a gross overestimate, but it saves the trouble of constantly reallocating it. */ pkvec_struct *colj = pkvec_new(rowcnt) ; assert(colj) ; colj->dim = rowcnt ; pkcoeff_struct *coeffs = colj->coeffs ; for (int j = 0 ; j < colcnt ; j++) { int startj = start[j] ; int lenj = (len)?(len[j]):(start[j+1]-startj) ; for (int ndx = 0 ; ndx < lenj ; ndx++) { coeffs[ndx].ndx = idx(index[startj+ndx]) ; coeffs[ndx].val = value[startj+ndx] ; } colj->cnt = lenj ; double objj = obj?obj[j]:0 ; double vlbj = col_lower?col_lower[j]:0 ; double vubj = col_upper?col_upper[j]:odsiInfinity ; colj->nme = 0 ; r = consys_addcol_pk(consys,vartypCON,colj,objj*obj_sense,vlbj,vubj) ; if (!r) { break ; } } if (colj) pkvec_free(colj) ; if (!r) { lp_retval = lpFATAL ; return ; } /* Construct a pessimal solution and we're done. */ pessimal_primal() ; calc_objval() ; return ; } /*! \brief Generate dylp constraint parameters from upper and lower bounds. This routine generates the dylp rhs, rhslow, and ctyp vectors given constraint upper and lower bound vectors. rowlb[i] and rowub[i] default to -inf and inf, respectively. */ void ODSI::gen_rowparms (int rowcnt, double *rhs, double *rhslow, contyp_enum *ctyp, const double *rowlb, const double *rowub) { double rowlbi,rowubi ; for (int i = 0 ; i < rowcnt ; i++) { rowlbi = rowlb?rowlb[i]:-odsiInfinity ; rowubi = rowub?rowub[i]:odsiInfinity ; ctyp[i] = bound_to_type(rowlbi,rowubi) ; switch (ctyp[i]) { case contypEQ: case contypLE: { rhs[i] = rowubi ; rhslow[i] = 0 ; break ; } case contypGE: { rhs[i] = rowlbi ; rhslow[i] = 0 ; break ; } case contypRNG: { rhs[i] = rowubi ; rhslow[i] = rowlbi ; break ; } case contypNB: { rhs[i] = odsiInfinity ; rhslow[i] = -odsiInfinity ; break ; } default: { assert(0) ; } } } return ; } /*! \brief Generate dylp constraint parameters from rhs, range, and row sense This routine generates the dylp rhs, rhslow, and ctyp vectors given constraint right-hand-side (rhs), range, and sense vectors. Rhs and range default to 0, and sense defaults to 'G' (>=). */ void ODSI::gen_rowparms (int rowcnt, double *rhs, double *rhslow, contyp_enum *ctyp, const char *sense, const double *rhsin, const double *range) { double rhsi,rangei ; char sensei ; for (int i = 0 ; i < rowcnt ; i++) { rhsi = rhsin?rhsin[i]:0 ; rangei = range?range[i]:0 ; sensei = sense?sense[i]:'G' ; switch (sensei) { case 'E': { rhs[i] = rhsi ; rhslow[i] = 0 ; ctyp[i] = contypEQ ; break ; } case 'L': { rhs[i] = rhsi ; rhslow[i] = 0 ; ctyp[i] = contypLE ; break ; } case 'G': { rhs[i] = rhsi ; rhslow[i] = 0 ; ctyp[i] = contypGE ; break ; } case 'R': { rhs[i] = rhsi ; rhslow[i] = rhsi-rangei ; ctyp[i] = contypRNG ; break ; } case 'N': { rhs[i] = 0 ; rhslow[i] = 0 ; ctyp[i] = contypNB ; break ; } default: { assert(0) ; } } } return ; } //@} // ConstructorHelpers /*! \defgroup ODSIConstructorsDestructors ODSI Constructors and Destructors \brief ODSI Constructors and destructors ODSI provides a default constructor and a copy constructor, and a default destructor. */ //@{ /*! Creates the shell of an ODSI object. The options and tolerances structures will be instantiated and initialised, but nothing else specific to dylp. Message and hint structures inherited from OsiSolverInterface are initialised. Creation of the first ODSI object triggers initialisation of the i/o subsystem. */ ODSI::OsiDylpSolverInterface () : OsiSolverInterface(), initialSolveOptions(0), resolveOptions(0), tolerances(0), consys(0), lpprob(0), statistics(0), local_outchn(IOID_NOSTRM), local_logchn(IOID_NOSTRM), initial_gtxecho(false), resolve_gtxecho(false), lp_retval(lpINV), obj_sense(1.0), odsiInfinity(CoinInfinity), solvername("dylp"), mps_debug(0), hotstart_fallback(0), solnIsFresh(false), _objval(0), _col_obj(0), _col_x(0), _col_cbar(0), _row_rhs(0), _row_lower(0), _row_upper(0), _row_sense(0), _row_range(0), _row_lhs(0), _row_price(0), _matrix_by_col(0), _matrix_by_row(0), preObj_(0), postActions_(0), postObj_(0), passLimit_(5), keepIntegers_(false), savedConsys_(0), saved_col_obj(0), saved_row_rhs(0), saved_row_lower(0), saved_row_upper(0), saved_row_sense(0), saved_row_range(0), saved_matrix_by_col(0), saved_matrix_by_row(0) { /* Initialise complex structures: active basis, simplex state */ activeBasis.basis = 0 ; activeBasis.condition = ODSI::basisNone ; activeBasis.balance = 0 ; simplex_state.simplex = 0 ; simplex_state.saved_fullsys = true ; /* Replace the OSI default messages with ODSI messages. */ setOsiDylpMessages(CoinMessages::us_en) ; /* Clear the hint info_ array, then turn on the hints that should be on by default. */ for (int i = 0 ; i < OsiLastHintParam ; i++) info_[i] = 0 ; setHintParam(OsiDoPresolveInInitial,true,OsiForceDo,0) ; /* Acquire the default options and tolerances. */ construct_options() ; /* Increment the ODSI existence count. If this is the first interface in existence, initialise the i/o package. */ reference_count++ ; if (reference_count == 1) { dylp_ioinit() ; CoinRelFltEq eq ; assert(eq(odsiInfinity, odsiInfinity)) ; } # if ODSI_TRACK_SOLVERS > 0 std::cout << "ODSI(" << std::hex << this << std::dec << "): default constructor." << std::endl ; # endif return ; } /*! A true copy --- no data structures are shared with the original. The statistics structure, hot start structure, and presolve structures are not copied (but presolve control information is copied). The copy does not inherit open files from the original. Cached information is not replicated. */ ODSI::OsiDylpSolverInterface (const OsiDylpSolverInterface& src) : OsiSolverInterface(src), statistics(0), // do not copy statistics local_outchn(IOID_NOSTRM), // do not copy open file descriptors local_logchn(IOID_NOSTRM), initial_gtxecho(src.initial_gtxecho), resolve_gtxecho(src.resolve_gtxecho), lp_retval(src.lp_retval), obj_sense(src.obj_sense), odsiInfinity(src.odsiInfinity), solvername(src.solvername), mps_debug(src.mps_debug), hotstart_fallback(0), // do not copy hot start information _objval(src._objval), _col_obj(0), _col_x(0), _col_cbar(0), _row_rhs(0), _row_lower(0), _row_upper(0), _row_sense(0), _row_range(0), _row_lhs(0), _row_price(0), _matrix_by_col(0), _matrix_by_row(0), preObj_(0), // do not copy presolve structures postActions_(0), postObj_(0), passLimit_(src.passLimit_), keepIntegers_(src.keepIntegers_), savedConsys_(0), saved_col_obj(0), saved_row_rhs(0), saved_row_lower(0), saved_row_upper(0), saved_row_sense(0), saved_row_range(0), saved_matrix_by_col(0), saved_matrix_by_row(0) { if (src.consys) { bool r UNUSED = consys_dupsys(src.consys,&consys,src.consys->parts) ; assert(r) ; } else { consys = 0 ; } if (src.lpprob) { lpprob = copy_lpprob(src.lpprob) ; lpprob->owner = this ; lpprob->consys = consys ; } else { lpprob = 0 ; } solnIsFresh = src.solnIsFresh ; CLONE(lpopts_struct,src.initialSolveOptions,initialSolveOptions) ; CLONE(lpopts_struct,src.resolveOptions,resolveOptions) ; CLONE(lptols_struct,src.tolerances,tolerances) ; if (src.activeBasis.condition != ODSI::basisNone) { activeBasis.basis = src.activeBasis.basis->clone() ; } else { activeBasis.basis = 0 ; } activeBasis.condition = src.activeBasis.condition ; activeBasis.balance = src.activeBasis.balance ; simplex_state.simplex = src.simplex_state.simplex ; simplex_state.saved_fullsys = src.simplex_state.saved_fullsys ; int n = getNumCols() ; int m = getNumRows() ; CLONE_VEC(double,src._col_x,_col_x,n) ; CLONE_VEC(double,src._row_price,_row_price,m) ; COPY_VEC(void *,&src.info_[0],&info_[0],OsiLastHintParam) ; reference_count++ ; # if ODSI_PARANOIA >= 2 assert_same(*this, src, true) ; # endif # if ODSI_TRACK_SOLVERS > 0 std::cout << "ODSI(" << std::hex << this << "): copy from " << &src << std::dec << "." << std::endl ; # endif } /*! An alternate copy constructor. */ inline OsiSolverInterface* ODSI::clone (bool copyData) const { # if ODSI_TRACK_SOLVERS > 0 std::cout << "ODSI(" << std::hex << this << std::dec << "): cloning (" << ((this->solnIsFresh == true)?"fresh":"stale") << ")." << std::endl ; # endif if (copyData) { return new OsiDylpSolverInterface(*this) ; } else { return new OsiDylpSolverInterface() ; } } /*! Assignment operator. Much as for the copy constructor, except that we trash the contents of the lhs object before we start. As with copy, statistics and hot start information are not copied over to the assignment target, nor does it inherit open files or terminal echo settings. Cached information is not replicated. Presolve information simply should not exist at any point where one can assign one ODSI object to another. */ OsiDylpSolverInterface &ODSI::operator= (const OsiDylpSolverInterface &rhs) { if (this != &rhs) { destruct_problem(false) ; OSI::operator=(rhs) ; if (rhs.consys) { bool r UNUSED = consys_dupsys(rhs.consys,&consys,rhs.consys->parts) ; assert(r) ; } else { consys = 0 ; } if (rhs.lpprob) { lpprob = copy_lpprob(rhs.lpprob) ; lpprob->owner = this ; lpprob->consys = consys ; } else { lpprob = 0 ; } solnIsFresh = rhs.solnIsFresh ; CLONE(lpopts_struct,rhs.initialSolveOptions,initialSolveOptions) ; CLONE(lpopts_struct,rhs.resolveOptions,resolveOptions) ; CLONE(lptols_struct,rhs.tolerances,tolerances) ; lp_retval = rhs.lp_retval ; obj_sense = rhs.obj_sense ; odsiInfinity = rhs.odsiInfinity ; mps_debug = rhs.mps_debug ; if (rhs.activeBasis.condition != ODSI::basisNone) { activeBasis.basis = rhs.activeBasis.basis->clone() ; } else { activeBasis.basis = 0 ; } activeBasis.condition = rhs.activeBasis.condition ; activeBasis.balance = rhs.activeBasis.balance ; simplex_state.simplex = rhs.simplex_state.simplex ; simplex_state.saved_fullsys = rhs.simplex_state.saved_fullsys ; _objval = rhs._objval ; _col_obj = 0 ; _col_x = 0 ; _col_cbar = 0 ; _row_rhs = 0 ; _row_lower = 0 ; _row_upper = 0 ; _row_sense = 0 ; _row_range = 0 ; _row_price = 0 ; _row_lhs = 0 ; _matrix_by_col = 0 ; _matrix_by_row = 0 ; preObj_ = 0 ; postActions_ = 0 ; postObj_ = 0 ; passLimit_ = rhs.passLimit_ ; keepIntegers_ = rhs.keepIntegers_ ; savedConsys_ = 0 ; saved_col_obj = 0 ; saved_row_rhs = 0 ; saved_row_lower = 0 ; saved_row_upper = 0 ; saved_row_sense = 0 ; saved_row_range = 0 ; saved_matrix_by_col = 0 ; saved_matrix_by_row = 0 ; int n = getNumCols() ; int m = getNumRows() ; COPY_VEC(double,rhs._col_x,_col_x,n) ; COPY_VEC(double,rhs._row_price,_row_price,m) ; COPY_VEC(void *,&rhs.info_[0],&info_[0],OsiLastHintParam) ; reference_count++ ; # if ODSI_PARANOIA >= 2 assert_same(*this, rhs, true) ; # endif } # if ODSI_TRACK_SOLVERS > 0 std::cout << "ODSI(" << std::hex << this << "): assign from " << &rhs << std::dec << "." << std::endl ; # endif return (*this) ; } //@} /* OsiDylpSolverInterface destructor and related subroutines. */ /*! \defgroup DestructorHelpers Destructor Helpers */ //@{ /*! \brief Destroy LP problem. This routine will free the problem-specific structures in an ODSI object. It relinquishes ownership of the solver, if necessary, and then the lpprob_struct, the main structure passed to dylp, is destroyed. Consys_free will free the constraint system, and dy_freesoln will free the remaining data structures associated with lpprob. There remains only to destroy the lpprob itself. To finish the job, free the options, tolerances, and statistics structures and call destruct_cache to free the cache structures. Because the lpprob structure is created only when dylp is actually called, it's possible that the interface contains only a constraint system. With the addition of presolve capability, it's also possible to have an lpprob but (apparently) no consys. This comes about if the client, for some reason, solves the lp and then decides to try again using presolve. Presolve will save the original constraint system and then restore it. Note that there's no point in saving any existing basis, even when applying presolve in resolve(), as we'll need a modified basis to get started. If the base ODSI object will be retained, set preserve_interface to true. This will retain the current options and tolerance settings. */ void ODSI::destruct_problem (bool preserve_interface) { /* If this object claims ownership of the solver, it should possess an lpprob structure created when the solver was called. */ ODSI *dylp_owner = static_cast(dy_getOwner()) ; assert((dylp_owner != this) || (dylp_owner == this && lpprob)) ; if (dylp_owner == this) { detach_dylp() ; } if (lpprob) { assert(lpprob->consys == consys) ; if (consys) { consys_free(consys) ; consys = 0 ; } dy_freesoln(lpprob) ; delete lpprob ; lpprob = 0 ; } else if (consys) { consys_free(consys) ; consys = 0 ; } solnIsFresh = false ; # if ODSI_TRACK_FRESH > 0 std::cout << "ODSI(" << std::hex << this << std::dec << ")::destruct_problem." << std::endl ; # endif if (hotstart_fallback) { delete hotstart_fallback ; hotstart_fallback = 0 ; } if (activeBasis.condition != ODSI::basisNone) { # if ODSI_TRACK_ACTIVE > 0 std::cout << "ODSI(" << std::hex << this << ")::destruct_problem: deleting active basis " << activeBasis.basis << std::dec << "." << std::endl ; # endif delete activeBasis.basis ; activeBasis.basis = 0 ; activeBasis.condition = ODSI::basisNone ; activeBasis.balance = 0 ; } destruct_cache(true,true) ; if (preserve_interface == false) { if (initialSolveOptions) { delete initialSolveOptions ; initialSolveOptions = 0 ; } if (resolveOptions) { delete resolveOptions ; resolveOptions = 0 ; } if (tolerances) { delete tolerances ; tolerances = 0 ; } } # ifdef ODSI_STATISTICS if (statistics) dy_freestats(&statistics) ; # endif return ; } /*! \brief Detach an ODSI instance from the dylp solver Dylp retains static data structures from one call to the next, in anticipation of reoptimizing following problem modification. When an ODSI instance is destroyed or another instance needs to use dylp, the current instance must be detached. Setting cxUNLOAD tells dylp the call is solely to free data structures. */ void ODSI::detach_dylp () const { ODSI *dylp_owner = static_cast(dy_getOwner()) ; /* There really must be an lpprob. Not necessarily a constraint system, though. It may have been hidden away (presolve, for example) or the system we're detaching may not have had a constraint system. */ assert(dylp_owner == this && lpprob) ; /* The only field that needs to be valid in dummyOpts is context. */ lpopts_struct dummyOpts ; dummyOpts.context = cxUNLOAD ; # ifdef ODSI_INFOMSGS CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_DETACH,messages_) << (int) reinterpret_cast(this) << CoinMessageEol ; # endif dylp(lpprob,&dummyOpts,0,0) ; } //@} /*! \ingroup ODSIConstructorsDestructors \brief Destructor for OsiDylpSolverInterface Destruction of the last ODSI object triggers shutdown of the basis maintenance and i/o subsystems and deallocation of all dylp internal data structures. */ ODSI::~OsiDylpSolverInterface () { /* Destroy the problem-specific structures used by dylp, and close the log and output files, if open. */ destruct_presolve() ; destruct_problem(false) ; if (dyio_isactive(local_logchn)) { (void) dyio_closefile(local_logchn) ; dy_setlogchn(IOID_NOSTRM) ; } if (dyio_isactive(local_outchn)) (void) dyio_closefile(local_outchn) ; reference_count-- ; if (reference_count == 0) { if (basis_ready == true) { dy_freebasis() ; basis_ready = false ; } dyio_ioterm() ; errterm() ; } # if ODSI_TRACK_SOLVERS > 0 std::cout << "ODSI(" << std::hex << this << std::dec << "): destructor." << std::endl ; # endif return ; } /*! \ingroup ODSIConstructorsDestructors \brief Reset the SI to the state produced by the default constructor. When it's inconvenient to destroy one SI and construct a new one, this function can be used to reset an existing SI to the same state produced by the default constructor. */ void ODSI::reset () { /* Destroy the problem-specific structures used by dylp, and close the log file, if open. */ destruct_presolve() ; destruct_problem(false) ; if (dyio_isactive(local_logchn)) { (void) dyio_closefile(local_logchn) ; local_logchn = IOID_NOSTRM ; dy_setlogchn(IOID_NOSTRM) ; } if (dyio_isactive(local_outchn)) { (void) dyio_closefile(local_outchn) ; local_outchn = IOID_NOSTRM ; } /* That takes care of cleaning out the ODSI object. Call setInitialData to reset the underlying OSI object. */ setInitialData() ; /* Now the equivalent for ODSI: ensure default values for various fields in the object. Regrettably, messages_ is not a pointer, so we can't preserve the CoinMessages structure over the reset. */ initial_gtxecho = false ; resolve_gtxecho = false ; lp_retval = lpINV ; setObjSense(1.0) ; mps_debug = false ; construct_options() ; setOsiDylpMessages(CoinMessages::us_en) ; for (int i = 0 ; i < OsiLastHintParam ; i++) info_[i] = 0 ; setHintParam(OsiDoPresolveInInitial,true,OsiForceDo,0) ; # if ODSI_TRACK_SOLVERS > 0 std::cout << "ODSI(" << std::hex << this << std::dec << "): reset." << std::endl ; # endif return ; } /*! \defgroup ProbAdjust Functions for Problem Modification \brief Public functions for problem modification This group of functions comprise the public interface for adjusting the optimization problem seen by the dylp solver. */ //@{ inline void ODSI::setContinuous (int j) { # if ODSI_PARANOIA >= 1 indexCheck(j,true,"setContinuous") ; # endif if (!consys->vtyp) { bool r = consys_attach(consys,CONSYS_VTYP,sizeof(vartyp_enum), reinterpret_cast(&consys->vtyp)) ; if (!r) { lp_retval = lpFATAL ; return ; } } /* Keep up with the bookkeeping. */ vartyp_enum vtyp = consys->vtyp[idx(j)] ; switch (vtyp) { case vartypBIN: { consys->binvcnt-- ; break ; } case vartypINT: { consys->intvcnt-- ; break ; } default: { break ; } } /* Set the new type. Changing the variable type should not affect the value of the current lp solution (which sees everything as continuous) hence there's no need to mark the solution as stale. */ consys->vtyp[idx(j)] = vartypCON ; return ; } inline void ODSI::setInteger (int j) { # if ODSI_PARANOIA >= 1 indexCheck(j,true,"setInteger") ; # endif if (!consys->vtyp) { bool r = consys_attach(consys,CONSYS_VTYP,sizeof(vartyp_enum), reinterpret_cast(&consys->vtyp)) ; if (!r) { lp_retval = lpFATAL ; return ; } } /* Keep up with the bookkeeping. */ vartyp_enum vtyp = consys->vtyp[idx(j)] ; switch (vtyp) { case vartypBIN: { consys->binvcnt-- ; break ; } case vartypINT: { consys->intvcnt-- ; break ; } default: { break ; } } /* Set the new type. Changing the variable type should not affect the value of the current lp solution (which sees everything as continuous) hence there's no need to mark the solution as stale. */ if (getColLower()[j] == 0.0 && getColUpper()[j] == 1.0) { consys->vtyp[idx(j)] = vartypBIN ; consys->binvcnt++ ; } else { consys->vtyp[idx(j)] = vartypINT ; consys->intvcnt++ ; } return ; } /*! If the variable is binary, and the new bound is not 0 or 1, the type of the variable is automatically converted to general integer. This behaviour is required by the OSI unit test. Arguably, if the variable is integer, and the new bound is not, the type of the variable should be converted to continuous, but this has its hazards. The validity of the conversion depends on the integrality tolerance, which the SI does not know. So we do not do this conversion. Other conversions are also ambiguous --- suppose a general integer variable were temporarily bounded between 0 and 1. Should the type really be converted from general integer to binary? Similarly, bounding a continuous variable to an integer range should not cause it to become integer. */ inline void ODSI::setColLower (int j, double lbj) { # if ODSI_PARANOIA >= 1 indexCheck(j,true,"setColLower") ; # endif if (!consys->vlb) { bool r = consys_attach(consys,CONSYS_VLB,sizeof(double), reinterpret_cast(&consys->vlb)) ; if (!r) { lp_retval = lpFATAL ; return ; } } double primalTol ; (void) getDblParam(OsiPrimalTolerance,primalTol) ; /* Make a clean integer value if the variable type is integer. It's a nice idea, but it'll cause us to fail the OsiCbc unit test. if (isInteger(j)) { lbj = ceil(lbj-primalTol) ; } */ /* Change the bound. In general, this can result in a change in the optimal solution, but we'll be punctilious and only mark the solution as stale if the new bound conflicts with the primal solution value. But ... if the solution's already stale, don't check further. */ consys->vlb[idx(j)] = lbj ; if (lpprob) setflg(lpprob->ctlopts,lpctlLBNDCHG) ; if (solnIsFresh == true) { const double *xvals = getColSolution() ; if (xvals[j] < lbj-primalTol) { solnIsFresh = false ; destruct_primal_cache() ; # if ODSI_TRACK_FRESH > 0 std::cout << "ODSI(" << std::hex << this << std::dec << ")::setColLower: new bound " << lbj << " exceeds current value " << xvals[j] << " by " << (lbj-xvals[j]) << "." << std::endl ; # endif } } if (isBinary(j) && !(lbj == 0.0 || lbj == 1.0)) { setInteger(j) ; } return ; } /*! See the comments with setColLower re. automatic variable type conversions. In short, binary to general integer is the only one that will occur. */ inline void ODSI::setColUpper (int j, double ubj) { # if ODSI_PARANOIA >= 1 indexCheck(j,true,"setColUpper") ; # endif if (!consys->vub) { bool r = consys_attach(consys,CONSYS_VUB,sizeof(double), reinterpret_cast(&consys->vub)) ; if (!r) { lp_retval = lpFATAL ; return ; } } double primalTol ; (void) getDblParam(OsiPrimalTolerance,primalTol) ; /* Make a clean integer value if the variable type is integer. It's a nice idea, but it'll cause us to fail the OsiCbc unit test. if (isInteger(j)) { ubj = floor(ubj+primalTol) ; } */ /* Change the bound. In general, this can result in a change in the optimal solution, but we'll be punctilious and only mark the solution as stale if the new bound conflicts with the primal solution value. */ consys->vub[idx(j)] = ubj ; if (lpprob) setflg(lpprob->ctlopts,lpctlUBNDCHG) ; if (solnIsFresh == true) { const double *xvals = getColSolution() ; if (xvals[j] > ubj+primalTol) { solnIsFresh = false ; destruct_primal_cache() ; # if ODSI_TRACK_FRESH > 0 std::cout << "ODSI(" << std::hex << this << std::dec << ")::setColUpper: new bound " << ubj << " exceeds current value " << xvals[j] << " by " << (xvals[j]-ubj) << "." << std::endl ; # endif } } if (isBinary(j) && !(ubj == 0.0 || ubj == 1.0)) { setInteger(j) ; } return ; } /*! A call to this routine destroys any cached solution. */ void ODSI::setRowType (int i, char sense, double rhs, double range) { # if ODSI_PARANOIA >= 1 indexCheck(i,false,"setRowType") ; # endif /* Install the change. In general, this can change the optimal solution. */ int k = idx(i) ; gen_rowiparms(&consys->ctyp[k],&consys->rhs[k],&consys->rhslow[k], sense,rhs,range) ; if (resolveOptions) resolveOptions->forcewarm = true ; solnIsFresh = false ; if (_row_upper) _row_upper[i] = consys->rhs[k] ; if (_row_lower) _row_lower[i] = consys->rhslow[k] ; if (_row_sense) _row_sense[i] = sense ; if (_row_range) _row_range[i] = range ; # if ODSI_TRACK_FRESH > 0 std::cout << "ODSI(" << std::hex << this << std::dec << ")::setRowType: new row type." << std::endl ; # endif /* Destroy cached solutions. In general, this change could invalidate both primal and dual solutions. */ destruct_dual_cache() ; destruct_primal_cache() ; } /*! A call to this routine destroys the cached primal solution. */ void ODSI::setRowUpper (int i, double val) { # if ODSI_PARANOIA >= 1 indexCheck(i,false,"setRowUpper") ; # endif int k = idx(i) ; double clbi = -odsiInfinity ; switch (consys->ctyp[k]) { case contypEQ: case contypGE: { clbi = consys->rhs[k] ; break ; } case contypRNG: { clbi = consys->rhslow[k] ; break ; } case contypLE: case contypNB: { clbi = -odsiInfinity ; break ; } default: { assert(false) ; } } /* Install the change. In general, this can change the optimal solution. */ gen_rowiparms(&consys->ctyp[k],&consys->rhs[k],&consys->rhslow[k], clbi,val) ; if (lpprob) setflg(lpprob->ctlopts,lpctlRHSCHG) ; solnIsFresh = false ; if (_row_upper) _row_upper[i] = consys->rhs[k] ; if (_row_lower) _row_lower[i] = consys->rhslow[k] ; # if ODSI_TRACK_FRESH > 0 std::cout << "ODSI(" << std::hex << this << std::dec << ")::setRowUpper: new bound." << std::endl ; # endif destruct_primal_cache() ; } /*! A call to this routine destroys the cached primal solution. */ void ODSI::setRowLower (int i, double val) { # if ODSI_PARANOIA >= 1 indexCheck(i,false,"setRowLower") ; # endif int k = idx(i) ; double cubi ; contyp_enum ctypi = consys->ctyp[k] ; if (ctypi == contypGE || ctypi == contypNB) cubi = odsiInfinity ; else cubi = consys->rhs[k] ; /* Install the change. In general, this can change the optimal solution. */ gen_rowiparms(&consys->ctyp[k],&consys->rhs[k],&consys->rhslow[k], val,cubi) ; if (lpprob) setflg(lpprob->ctlopts,lpctlRHSCHG) ; solnIsFresh = false ; if (_row_upper) _row_upper[i] = consys->rhs[k] ; if (_row_lower) _row_lower[i] = consys->rhslow[k] ; # if ODSI_TRACK_FRESH > 0 std::cout << "ODSI(" << std::hex << this << std::dec << ")::setRowLower: new bound." << std::endl ; # endif destruct_primal_cache() ; } /*! Add a row to the constraint system given the coefficients and upper and lower bounds on the left-hand-side. A call to this routine destroys all cached values. Unlike deleteRows, however, we don't need to fiddle with the basis, as dylp will automatically pick up the added constraints. */ inline void ODSI::addRow (const CoinPackedVectorBase &row, double rlb, double rub) { contyp_enum ctypi ; double rhsi,rhslowi ; gen_rowiparms(&ctypi,&rhsi,&rhslowi,rlb,rub) ; add_row(row,'a',ctypi,rhsi,rhslowi,0) ; return ; } /*! Add a row to the constraint system given the coefficients, constraint sense, right-hand-side value, and range. A call to this routine destroys all cached values. Unlike deleteRows, however, we don't need to fiddle with the basis, as dylp will automatically pick up the added constraints. */ inline void ODSI::addRow (const CoinPackedVectorBase &coin_row, char sense, double rhs, double range) { contyp_enum ctypi ; double rhsi,rhslowi ; rhsi = 0 ; rhslowi = 0 ; gen_rowiparms(&ctypi,&rhsi,&rhslowi,sense,rhs,range) ; add_row(coin_row,'a',ctypi,rhsi,rhslowi,0) ; return ; } /*! One cut at a time, please, when it comes to rows. A call to this routine destroys all cached values. Unlike deleteRows, however, we don't need to fiddle with the basis, as dylp will automatically pick up the added constraints. */ void ODSI::applyRowCut (const OsiRowCut &cut) { contyp_enum ctypi ; double rhsi,rhslowi ; gen_rowiparms(&ctypi,&rhsi,&rhslowi,cut.lb(),cut.ub()) ; add_row(cut.row(),'c',ctypi,rhsi,rhslowi,0) ; return ; } /*! A call to this routine destroys all cached values. To make this work properly (in the absence of a more efficient routine implemented in the consys package), the trick is to sort the indices from smallest to largest, and delete in reverse order. It has the added advantage of being marginally more efficient. Note that we must also keep the active basis up to date, or remove it if we cannot guarantee validity. */ void ODSI::deleteRows (int count, const int* rows) { if (count <= 0) return ; /* Sort the indices and do the deletions, one by one. This invalidates any existing solution in lpprob. Remove the names while we're at it. */ vector lclrows = vector(&rows[0],&rows[count]) ; if (count > 1) std::sort(lclrows.begin(),lclrows.end()) ; for (int k = count-1 ; k >= 0 ; k--) { int i = idx(lclrows[k]) ; bool r = consys_delrow_stable(consys,i) ; if (!r) { lp_retval = lpFATAL ; return ; } deleteRowNames(lclrows[k],1) ; } solnIsFresh = false ; # if ODSI_TRACK_FRESH > 0 std::cout << "ODSI(" << std::hex << this << std::dec << ")::deleteRows: deleted " << count << " rows." << std::endl ; # endif /* If there's an active basis, check that all the constraints we deleted were slack. If they were, we can delete them from the active basis and still guarantee a valid basis. If not, we'll need to do some work if the client ever asks us to use this basis. */ if (activeBasis.condition != ODSI::basisNone) { int nonbasicLogical = 0 ; OsiDylpWarmStartBasis *odwsb = dynamic_cast(activeBasis.basis) ; for (int k = count-1 ; k >= 0 ; k--) { int i = lclrows[k] ; if (odwsb->getArtifStatus(i) != CWSB::basic) { nonbasicLogical++ ; } } odwsb->compressRows(count,rows) ; resolveOptions->forcewarm = true ; activeBasis.balance += nonbasicLogical ; if (activeBasis.balance == 0) { activeBasis.condition = ODSI::basisModified ; } else { activeBasis.condition = ODSI::basisDamaged ; } # if ODSI_TRACK_ACTIVE > 0 if (nonbasicLogical > 0) { std::cout << "ODSI(" << std::hex << this << std::dec << ")::deleteRows: deleted " << nonbasicLogical << " tight constraints, basis " << std::hex << activeBasis.basis << std::dec << " is " ; if (activeBasis.balance == 0) { std::cout << "undamaged" ; } else { std::cout << "damaged" ; } std::cout << "." << std::endl ; } # endif } destruct_cache(true,false) ; } /*! Change a coefficient in the objective function. In general, this can change the optimal solution. */ void ODSI::setObjCoeff (int j, double objj) { # if ODSI_PARANOIA >= 1 indexCheck(j,true,"setObjCoeff") ; # endif consys->obj[idx(j)] = getObjSense()*objj ; if (_col_obj) _col_obj[j] = objj ; if (lpprob) setflg(lpprob->ctlopts,lpctlOBJCHG) ; solnIsFresh = false ; if (_col_obj) _col_obj[j] = consys->obj[idx(j)] ; destruct_dual_cache() ; # if ODSI_TRACK_FRESH > 0 std::cout << "ODSI(" << std::hex << this << std::dec << ")::setObjCoeff: replacing c<" << j << ">." << std::endl ; # endif return ; } /*! Replace the objective function. In general, this can change the optimal solution. */ void ODSI::setObjective (const double *c) { int n = getNumCols() ; if (getObjSense() < 0.0) std::transform(c,c+n,INV_VEC(double,consys->obj),std::negate()) ; else CoinMemcpyN(c,n,INV_VEC(double,consys->obj)) ; if (_col_obj == 0) _col_obj = new double[n] ; CoinMemcpyN(consys->obj,n,_col_obj) ; if (lpprob) setflg(lpprob->ctlopts,lpctlOBJCHG) ; solnIsFresh = false ; destruct_dual_cache() ; # if ODSI_TRACK_FRESH > 0 std::cout << "ODSI(" << std::hex << this << std::dec << ")::setObjective: replacing objective." << std::endl ; # endif return ; } /*! Change the sense of the objective; use 1.0 to request the objective be minimised, -1.0 to request it be maximised. Since the natural action is minimisation, take that attitude when grooming val. */ void ODSI::setObjSense (double val) /* The `natural' action of OSI (and dylp) is minimisation. Maximisation is accomplished as min -cx. So using -1 for maximisation is more natural than you'd think at first glance. Changing the objective sense will in general change the optimal solution. We could fix the dual cache (negate _col_obj, _row_price, _col_cbar) but for consistency we'd also need to fix the solution on lpprob. It'd get ugly. */ { int n = getNumCols() ; double groomedVal ; /* Groom val to be exactly +1.0 or -1.0. Opt for minimisation in the nebulous region -1.0 < val < 1.0. */ if (val <= -1.0) { groomedVal = -1.0 ; } else { groomedVal = 1.0 ; } if (n > 0 && groomedVal != obj_sense) { double *tmpobj = INV_VEC(double,consys->obj) ; std::transform(tmpobj,tmpobj+n,tmpobj,std::negate()) ; if (lpprob) setflg(lpprob->ctlopts,lpctlOBJCHG) ; solnIsFresh = false ; destruct_dual_cache() ; # if ODSI_TRACK_FRESH > 0 std::cout << "ODSI(" << std::hex << this << std::dec << ")::setObjSense: changing to " << ((groomedVal > 0)?"minimisation":"maximisation") << "." << std::endl ; # endif } obj_sense = groomedVal ; return ; } /*! Add a column to the constraint system given the coefficients, upper and lower bounds, and objective function coefficient. The variable type defaults to continuous. A call to this routine destroys all cached values. */ inline void ODSI::addCol (const CoinPackedVectorBase& coin_col, double vlb, double vub, double obj) { add_col(coin_col,vartypCON,vlb,vub,obj,0) ; } /*! Perhaps better named `applyColCuts', as an OsiColCut object can contain any number of adjustments to variable bounds. The routine simply steps through the new bounds, tightening existing bounds as necessary. Note that a bound is never loosened by this routine. */ void ODSI::applyColCut (const OsiColCut &cut) { const double* old_lower = getColLower() ; const double* old_upper = getColUpper() ; const CoinPackedVector& new_lower = cut.lbs() ; const CoinPackedVector& new_upper = cut.ubs() ; int i ; int n1 = new_lower.getNumElements() ; int n2 = new_upper.getNumElements() ; for (i = 0 ; i < n1 ; i++) { int j = new_lower.getIndices()[i] ; double x = new_lower.getElements()[i] ; if (x > old_lower[j]) setColLower(j,x) ; } for (i = 0 ; i < n2 ; i++) { int j = new_upper.getIndices()[i] ; double x = new_upper.getElements()[i] ; if (x < old_upper[j]) setColUpper(j,x) ; } } /*! A call to this routine destroys all cached values. To make this work properly (in the absence of a more efficient routine implemented in the consys package), the trick is to sort the indices from largest to smallest, and delete in the same order. It has the added advantage of being marginally more efficient. Note that we must also keep the active basis up to date, or remove it if we cannot guarantee validity. */ void ODSI::deleteCols (int count, const int* cols) { if (count <= 0) return ; /* Sort the indices and do the deletions, one by one. This invalidates the current optimal solution. */ vector lclcols = vector(&cols[0],&cols[count]) ; if (count > 1) std::sort(lclcols.begin(),lclcols.end()) ; for (int k = 0 ; k < count ; k++) { int j = idx(lclcols[k]) ; bool r = consys_delcol(consys, j) ; if (!r) { lp_retval = lpFATAL ; return ; } deleteColNames(lclcols[k],1) ; } solnIsFresh = false ; # if ODSI_TRACK_FRESH > 0 std::cout << "ODSI(" << std::hex << this << std::dec << ")::deleteCols: deleted " << count << "columns." << std::endl ; # endif /* Now, see if there's an active basis. If so, check that all the variables to be deleted are nonbasic. If they are, we can delete them from the active basis and still guarantee a valid basis. Deletion of basic variables is problematic, in the sense that we'll be short when it comes time to use the basis. SetWarmStart will simply force as many logicals as needed into the basis. Still, this isn't something to be done lightly, and ODSI can be compiled to issue a warning. */ if (activeBasis.condition != ODSI::basisNone) { int basicVariable = 0 ; OsiDylpWarmStartBasis *odwsb = dynamic_cast(activeBasis.basis) ; for (int k = count-1 ; k >= 0 ; k--) { int j = lclcols[k] ; if (odwsb->getStructStatus(j) == CWSB::basic) { basicVariable++ ; } } odwsb->deleteColumns(count,cols) ; resolveOptions->forcewarm = true ; activeBasis.balance -= basicVariable ; if (activeBasis.balance == 0) { activeBasis.condition = ODSI::basisModified ; } else { activeBasis.condition = ODSI::basisDamaged ; } # if ODSI_TRACK_ACTIVE > 0 if (basicVariable > 0) { std::cout << "ODSI(" << std::hex << this << std::dec << ")::deleteCols: deleted " << basicVariable << " basic variables; basis " << std::hex << activeBasis.basis << std::dec << " is " ; if (activeBasis.balance == 0) { std::cout << "undamaged" ; } else { std::cout << "damaged" ; } std::cout << "." << std::endl ; } # endif } destruct_cache(false,true) ; } /*! This function will change the primal solution recorded in the interface, but has no effect on the actions of the solver. Its primary utility is to establish a set of values that can be used to calculate an objective value prior to invoking dylp. dylp is not prepared to accept a set of values for the primal variables. It firmly believes it should calculate these values given a basis, rhs, and bounds. */ void ODSI::setColSolution (const double* solution) { int n = getNumCols() ; /* You can't set what you don't have. Otherwise, replace the current solution. */ if (n == 0) return ; if (_col_x) delete[] _col_x ; _col_x = new double[n] ; COPY_VEC(double,solution,_col_x,n) ; calc_objval() ; return ; } /*! This function will change the dual solution recorded in the interface, but has no effect on the actions of the solver. Its primary utility is to establish a set of values that can be used in calculation prior to invoking dylp. dylp is not prepared to accept a set of values for the dual variables. It firmly believes it should calculate these values given a basis and objective coefficients. */ void ODSI::setRowPrice (const double* price) { int m = getNumRows() ; /* You can't set what you don't have. Otherwise, replace the current solution. */ if (m == 0) return ; if (_row_price) delete[] _row_price ; _row_price = new double[m] ; COPY_VEC(double,price,_row_price,m) ; return ; } //@} // ProbAdjust #ifndef _MSC_VER /*! \defgroup CopyVerifiers Copy Verification Routines \brief Private helper functions to verify correctness of copies This group of helper functions verify the correctness of copies of the data structures used in ODSI objects. For uniformity, all functions take a parameter, `exact', which influences the rigour of the test for some types. */ //@{ /*! \brief Compare two double values for equality. Exact bit-for-bit equality (i.e., d1 == d2) is usually not what is wanted when comparing floating point values. And even when it is, NaN doesn't equal NaN. Why is NaN not simply an error? It happens on occasion that we're cloning some structure and, for one reason or another, some values are essentially uninitialised. For example, we've added cuts but not yet reoptimised. The dual vector has been extended, but the values are junk. On occasion, dylp will deliberately initialise parts of a vector with NaN as a guard, and check later to see if it shows up in honest values. The inexact test looks for equality within a tolerance of 1.0e-10, scaled by the maximum of the two values. To do a toleranced test, both values must be finite. */ void ODSI::assert_same (double d1, double d2, bool exact) { if (d1 == d2) return ; if (CoinIsnan(d1) && CoinIsnan(d2)) return ; assert(!exact && CoinFinite(d1) && CoinFinite(d2)) ; static const double epsilon UNUSED = 1.e-10 ; double tol UNUSED = CoinMax(fabs(d1),fabs(d2))+1 ; double diff UNUSED = fabs(d1 - d2) ; assert(diff <= tol*epsilon) ; } /*! \brief Byte-wise equality comparison of a structure Byte-for-byte comparison of a structure. */ template void ODSI::assert_same (const T& t1, const T& t2, bool exact) { if (&t1 == &t2) return ; assert(memcmp(&t1,&t2,sizeof(T)) == 0) ; } /*! \brief Element-wise comparison of two primitive arrays. */ template void ODSI::assert_same (const T* t1, const T* t2, int n, bool exact) { if (t1 == t2) return ; for (int i=0 ; i(b1.el), inv_vec(b2.el),size) == 0) ; } /*! \brief Verify copy of a dylp constraint bound This structure contains upper and lower bounds on the value of the left-hand-side of a constraint, calculated from upper and lower bounds on the variables. Unused when dylp is operating solely as an lp solver. */ void ODSI::assert_same (const conbnd_struct& c1, const conbnd_struct& c2, bool exact) { assert(exact) ; // be explicit if (&c1 == &c2) return ; //-- consys.h::conbnd_struct assert(c1.revs == c2.revs) ; assert(c1.inf == c2.inf) ; assert(c1.bnd == c2.bnd) ; } /*! \brief Verify copy of a dylp constraint matrix (consys_struct) Compare two consys_struct's for equality. There are two levels of comparison. Exact looks for exact equivalence of content and size. Inexact checks that each consys_struct describes the same mathematical system, but ignores the constraint system name, various counts, and the allocated size of the structure. */ void ODSI::assert_same (const consys_struct& c1, const consys_struct& c2, bool exact) { if (&c1 == &c2) return ; /* Simple fields: flags, counts, indices. */ assert(c1.parts == c2.parts) ; assert(c1.opts == c2.opts) ; assert(c1.varcnt == c2.varcnt) ; assert(c1.archvcnt == c2.archvcnt) ; assert(c1.logvcnt == c2.logvcnt) ; assert(c1.intvcnt == c2.intvcnt) ; assert(c1.binvcnt == c2.binvcnt) ; assert(c1.maxcollen == c2.maxcollen) ; assert(!exact || (c1.maxcolndx == c2.maxcolndx)) ; assert(c1.concnt == c2.concnt) ; assert(c1.archccnt == c2.archccnt) ; assert(c1.cutccnt == c2.cutccnt) ; assert(c1.maxrowlen == c2.maxrowlen) ; assert(!exact || (c1.maxrowndx == c2.maxrowndx)) ; assert(c1.objndx == c2.objndx) ; assert(c1.xzndx == c2.xzndx) ; /* Associated vectors. */ int var_count = ODSI::idx(c1.varcnt) ; int con_count = ODSI::idx(c1.concnt) ; assert_same(c1.obj, c2.obj, var_count, exact) ; assert_same(c1.vtyp, c2.vtyp, var_count, true) ; assert_same(c1.vub, c2.vub, var_count, exact) ; assert_same(c1.vlb, c2.vlb, var_count, exact) ; assert_same(c1.colscale, c2.colscale, var_count, exact) ; assert_same(c1.rhs, c2.rhs, con_count, exact) ; assert_same(c1.rhslow, c2.rhslow, con_count, exact) ; assert_same(c1.ctyp, c2.ctyp, con_count, true) ; assert_same(c1.cub, c2.cub, con_count, exact) ; assert_same(c1.clb, c2.clb, con_count, exact) ; assert_same(c1.rowscale, c2.rowscale, con_count, exact) ; /* These can differ and have no mathematical effect. Test them only if the client has requested exact equality. */ if (exact) { assert(c1.nme == c2.nme) ; assert(c1.colsze == c2.colsze) ; assert(c1.rowsze == c2.rowsze) ; assert(c1.objnme == c2.objnme) ; } } /*! \brief Verify copy of a dylp lp problem (lpprob_struct) Essentially a matter of checking each individual component. Exact requires precise equivalence. Inexact allows for differences in the allocated capacity of the structures. */ void ODSI::assert_same (const lpprob_struct& l1, const lpprob_struct& l2, bool exact) { if (&l1 == &l2) return ; /* Simple fields: flags, LP phase & return code, objective value, iteration count. */ assert(l1.ctlopts == l2.ctlopts) ; assert(l1.phase == l2.phase) ; assert(l1.lpret == l2.lpret) ; assert_same(l1.obj,l2.obj,exact) ; assert(l1.iters == l2.iters) ; /* The allocated capacity can differ unless the client requires exact equivalence. */ if (exact) { assert(l1.colsze == l2.colsze) ; assert(l1.rowsze == l2.rowsze) ; } /* Vectors: x, y, status */ int min_col = idx(CoinMin(l1.colsze, l2.colsze)) ; int min_row = idx(CoinMin(l1.rowsze, l2.rowsze)) ; assert_same(l1.status,l2.status,min_col,exact) ; assert_same(l1.x,l2.x,min_row, exact) ; assert_same(l1.y,l2.y,min_row, exact) ; /* Complex structures: the constraint system and basis. */ assert_same(*l1.consys,*l2.consys,exact) ; assert_same(*l1.basis,*l2.basis,exact) ; } /*! \brief Verify copy of an ODSI object. Verify equivalence by checking each component in turn. Note that statistics, hot start information, and cached data are never copied when an ODSI object is cloned or assigned, and open file descriptors are not inherited. */ void ODSI::assert_same (const OsiDylpSolverInterface& o1, const OsiDylpSolverInterface& o2, bool exact) { /* The same chunk of memory? */ if (&o1 == &o2) return ; /* These three fields are static. If they don't match, we're really confused. */ assert(o1.reference_count == o2.reference_count) ; assert(o1.basis_ready == o2.basis_ready) ; /* Test the rest of the simple data fields. */ assert(o1.initial_gtxecho == o2.initial_gtxecho) ; assert(o1.resolve_gtxecho == o2.resolve_gtxecho) ; assert(o1.lp_retval == o2.lp_retval) ; assert(o1.obj_sense == o2.obj_sense) ; assert(o1.odsiInfinity == o2.odsiInfinity) ; assert(o1.solvername == o2.solvername) ; assert(o1.mps_debug == o2.mps_debug) ; /* Options and tolerances should be byte-for-byte identical. */ assert_same(*o1.initialSolveOptions, *o2.initialSolveOptions, true) ; assert_same(*o1.resolveOptions, *o2.resolveOptions, true) ; assert_same(*o1.tolerances, *o2.tolerances, true) ; /* The info_ array. The best we can do here is entry by entry equality. */ assert_same(o1.info_,o2.info_,OsiLastHintParam,exact) ; /* Now the more complicated structures. If the lpprob exists, it should reference a constraint system, and it should be the same constraint system as the consys field. The call to assert_same will check both the lpprob and the consys structures. */ if (o1.lpprob) { assert(o2.lpprob) ; assert(o1.lpprob->consys && (o1.consys == o1.lpprob->consys)) ; assert(o2.lpprob->consys && (o2.consys == o2.lpprob->consys)) ; assert_same(*o1.lpprob,*o2.lpprob,exact) ; } else { assert(!o2.lpprob) ; assert_same(*o1.consys,*o2.consys,exact) ; } /* A belt & suspenders check: retrieve the matrix as a COINPackedMatrix and use the COIN isEquivalent routine to check for equality. */ const CoinPackedMatrix* m1 = o1.getMatrixByCol() ; const CoinPackedMatrix* m2 UNUSED = o2.getMatrixByCol() ; if (m1) { assert(m2 || m1->isEquivalent(*m2)) ; } else { assert(!m2) ; } } //@} // CopyVerifiers #endif /* ! _MSC_VER */ /* Problem specification routines: MPS and control files, and loading a problem from OSI data structures. */ /*! \defgroup FileHelpers File I/O Helper Routines */ //@{ /*! \brief Construct a new name from filename, with ext1 removed and ext2 added. A utility routine for building related file names. Starting with filename, ext1 is stripped, if present, and ext2 is added. Either of ext1 or ext2 can be null or "" (the null string), in which case nothing is stripped or added, respectively. */ string ODSI::make_filename (const char *filename, const char *ext1, const char *ext2) { string basename(filename) ; string ext1str(ext1), ext2str(ext2) ; /* Extensions must start with ".", so fix if necessary. */ if (ext1 && strlen(ext1) > 0 && ext1[0] != '.') ext1str.insert(ext1str.begin(),'.') ; if (ext2 && strlen(ext2) > 0 && ext2[0] != '.') ext2str.insert(ext2str.begin(),'.') ; /* Strip ext1 from filename, if it exists, leaving the base name. */ if (ext1 && strlen(ext1) > 0) { string tmpname(filename) ; string::size_type ext1pos = tmpname.rfind(ext1str) ; if (ext1pos < tmpname.npos) { basename = tmpname.substr(0,ext1pos) ; } } /* Add ext2, if it exists. */ if (ext2 && strlen(ext2) > 0) basename += ext2str ; return (basename) ; } //@} /*! \defgroup ODSILoadProb Methods to Load a Problem \brief Methods to load a problem into dylp This group of functions provides methods to load a problem from an MPS file, from an OSI packed matrix structure, or from a standard column-major packed matrix structure. A call to any of these functions results in the destruction of the existing problem and the creation of a new problem. All functions will preserve existing options and tolerances across the problem change. In general, if you want to reset options and tolerances to defaults between problems, you're best off to destroy the current ODSI object and create a new one. The additional overhead is small. loadProblem and assignProblem consider all variables to be continuous. assignProblem destroys its arguments; loadProblem leaves them unchanged. The readMps and writeMps routines extend the default OSI behaviour by allowing for multiple extensions on file names. They apply the following rule: any specified extension is added to the specified filename, with the exception that if the extension already exists, it is not duplicated. For example, if the extension is "mps", the file name myproblem.mps would be unchanged, while the filename myproblem.ver1 would become myproblem.ver1.mps. The extension will default to "mps" unless explicitly set to null (either the empty string, "", or 0). */ //@{ /*! Read a problem definition in MPS format. readMps will recognize continuous, binary, and general integer variables. If compiled with #ODSI_IMPLICIT_SPC defined as `1', before reading the MPS problem file, readMps looks for a dylp options file (extension ".spc"). The name is constructed by stripping the extension (if present) from the given file name and adding the extension ".spc". A `worst case' (and typically infeasible) primal solution is constructed which provides a valid bound on the objective. */ int ODSI::readMps (const char* basename, const char* ext) /* This routine uses the COIN MPS input code, which allows me to sidestep the issues that dylp's MPS reader has when confronted with an MPS file that requires fixed-field processing or contains a constant objective function offset. Parameters: basename: base name for mps file ext: file extension (no leading `.') Returns: -1 if the MPS file could not be opened, otherwise the number of errors encountered while reading the file. */ { int errcnt ; CoinMpsIO mps ; CoinMessageHandler *mps_handler = mps.messageHandler() ; string filename ; if (mps_debug) { mps_handler->setLogLevel(handler_->logLevel()) ; } else { mps_handler->setLogLevel(0) ; } # if ODSI_IMPLICIT_SPC == 1 /* See if there's an associated .spc file and read it first, if present. */ filename = make_filename(basename,ext,"spc") ; dylp_controlfile(filename.c_str(),true,false) ; # endif /* Make sure the MPS reader has the same idea of infinity as dylp, then attempt to read the MPS file. */ mps.setInfinity(odsiInfinity) ; filename = make_filename(basename,ext,ext) ; errcnt = mps.readMps(filename.c_str(),0) ; handler_->message(ODSI_MPSFILEIO,messages_) << filename << "read" << errcnt << CoinMessageEol ; if (errcnt != 0) return (errcnt) ; /* Load the problem and build a worst-case solution. To take full advantage of information in the MPS file, it's easiest to pass the mps object to load_problem. */ load_problem(mps) ; /* Done! */ return (0) ; } /*! Read a problem definition in MPS format, including SOS information. Functionality is as for readMps(const char*,const char*), with the added feature that any special ordered sets (SOS) defined in the MPS file are returned through the \p numberSets and \p set parameters. */ int ODSI::readMps (const char* basename, const char* ext, int &numberSets, CoinSet **&sets) /* This routine uses the COIN MPS input code, which allows me to sidestep the issues that dylp's MPS reader has when confronted with an MPS file that requires fixed-field processing or contains a constant objective function offset. Note the extension in parameters to return SOS sets defined in the MPS file. Parameters: basename: base name for mps file ext: file extension (no leading `.') numberSets: the number of SOS sets sets: pointer to array of SOS sets Returns: -1 if the MPS file could not be opened, otherwise the number of errors encountered while reading the file. */ { int errcnt ; CoinMpsIO mps ; CoinMessageHandler *mps_handler = mps.messageHandler() ; string filename ; if (mps_debug) { mps_handler->setLogLevel(handler_->logLevel()) ; } else { mps_handler->setLogLevel(0) ; } # if ODSI_IMPLICIT_SPC == 1 /* See if there's an associated .spc file and read it first, if present. */ filename = make_filename(basename,ext,"spc") ; dylp_controlfile(filename.c_str(),true,false) ; # endif /* Make sure the MPS reader has the same idea of infinity as dylp, then attempt to read the MPS file. */ mps.setInfinity(odsiInfinity) ; filename = make_filename(basename,ext,ext) ; errcnt = mps.readMps(filename.c_str(),0,numberSets,sets) ; handler_->message(ODSI_MPSFILEIO,messages_) << filename << "read" << errcnt << CoinMessageEol ; if (errcnt != 0) return (errcnt) ; /* Load the problem and build a worst-case solution. To take full advantage of information in the MPS file, it's easiest to pass the mps object to load_problem. */ load_problem(mps) ; /* Done! */ return (0) ; } /*! Write a problem to the file basename.ext in MPS format. `sense' controls the objective sense in the MPS file. -1.0 forces maximisation, 1.0 forces minimisation. 0.0 leaves it up to the solver. */ void ODSI::writeMps (const char *basename, const char *ext, double objsense) const { string filename = make_filename(basename,ext,ext) ; CoinMpsIO mps ; CoinMessageHandler *mps_handler = mps.messageHandler() ; if (mps_debug) { mps_handler->setLogLevel(handler_->logLevel()) ; } else { mps_handler->setLogLevel(0) ; } double *outputobj ; const double *const solverobj = getObjCoefficients() ; int n = getNumCols(), m = getNumRows() ; /* If the client has no opinion about the sense of the objective, go with the solver's notion. If the client's desired sense conflicts with the solver's sense, negate the objective. */ if (objsense == 0) objsense = getObjSense() ; if (objsense == getObjSense()) { outputobj = const_cast(solverobj) ; } else { outputobj = new double[n] ; std::transform(solverobj,solverobj+n,outputobj,std::negate()) ; } mps.setProblemName(consys->nme) ; char *vartyp = new char[n] ; typedef const char *charp ; const char **colnames = new charp[n], **rownames = new charp[m] ; int i,j ; for (j = 0 ; j < n ; j++) vartyp[j] = isInteger(j) ; for (i = 0 ; i < m ; i++) rownames[i] = consys_nme(consys,'c',idx(i),false,0) ; for (j = 0 ; j < n ; j++) colnames[j] = consys_nme(consys,'v',idx(j),false,0) ; mps.setMpsData(*getMatrixByRow(),odsiInfinity, getColLower(),getColUpper(),outputobj,vartyp, getRowLower(),getRowUpper(),colnames,rownames) ; /* We really need to work on symbolic names for these magic numbers. */ int errcnt = mps.writeMps(filename.c_str(),0,0,2) ; handler_->message(ODSI_MPSFILEIO,messages_) << filename << "written" << errcnt << CoinMessageEol ; /* Free up the arrays we allocated. */ delete[] vartyp ; delete[] colnames ; delete[] rownames ; if (outputobj != solverobj) delete[] outputobj ; return ; } /*! Constraints are described using an COIN packed matrix and upper and lower bounds for the left-hand-side. The routine's parameters are destroyed once they have been copied to ODSI structures. Existing options and tolerances are preserved if they exist. */ inline void ODSI::assignProblem (CoinPackedMatrix*& matrix, double*& col_lower, double*& col_upper, double*& obj, double*& row_lower, double*& row_upper) { loadProblem(*matrix,col_lower,col_upper,obj,row_lower,row_upper) ; delete matrix ; matrix = 0 ; delete [] col_lower ; col_lower = 0 ; delete [] col_upper ; col_upper = 0 ; delete [] obj ; obj = 0 ; delete [] row_lower ; row_lower = 0 ; delete [] row_upper ; row_upper = 0 ; } /*! Constraints are described using a COIN packed matrix, constraint sense, right-hand-side, and (optional) range. The routine's parameters are destroyed once they have been copied to ODSI structures. Existing options and tolerances are preserved. */ inline void ODSI::assignProblem (CoinPackedMatrix*& matrix, double*& lower, double*& upper, double*& obj, char*& sense, double*& rhs, double*& range) { loadProblem(*matrix, lower, upper, obj, sense, rhs, range) ; delete matrix ; matrix = 0 ; delete [] lower ; lower = 0 ; delete [] upper ; upper = 0 ; delete [] obj ; obj = 0 ; delete [] sense ; sense = 0 ; delete [] rhs ; rhs = 0 ; delete [] range ; range = 0 ; } /*! Constraints are described using an OSI packed matrix and upper and lower bounds for the left-hand-side. Existing options and tolerances are preserved if they exist; defaults are used otherwise. */ inline void ODSI::loadProblem (const CoinPackedMatrix& matrix, const double* col_lower, const double* col_upper, const double* obj, const double* row_lower, const double* row_upper) { int rowcnt = matrix.getNumRows() ; double *rhs = new double[rowcnt] ; double *rhslow = new double[rowcnt] ; contyp_enum *ctyp = new contyp_enum[rowcnt] ; gen_rowparms(rowcnt,rhs,rhslow,ctyp,row_lower,row_upper) ; load_problem(matrix,col_lower,col_upper,obj,ctyp,rhs,rhslow) ; delete[] rhs ; delete[] rhslow ; delete[] ctyp ; } /*! Constraints are described using an OSI packed matrix, constraint sense, right-hand-side, and (optional) range. Existing options and tolerances are preserved if they exist; defaults are used otherwise. */ inline void ODSI::loadProblem (const CoinPackedMatrix& matrix, const double* col_lower, const double* col_upper, const double* obj, const char* sense, const double* rhsin, const double* range) { int rowcnt = matrix.getNumRows() ; double *rhs = new double[rowcnt] ; double *rhslow = new double[rowcnt] ; contyp_enum *ctyp = new contyp_enum[rowcnt] ; gen_rowparms(rowcnt,rhs,rhslow,ctyp,sense,rhsin,range) ; load_problem(matrix,col_lower,col_upper,obj,ctyp,rhs,rhslow) ; delete[] rhs ; delete[] rhslow ; delete[] ctyp ; } /*! Constraints are described using a standard column-major packed matrix structure and upper and lower bounds for the left-hand-side. Existing options and tolerances are preserved if they exist; defaults are used otherwise. */ inline void ODSI::loadProblem (const int colcnt, const int rowcnt, const int *start, const int *index, const double *value, const double* col_lower, const double* col_upper, const double* obj, const double* row_lower, const double* row_upper) { double *rhs = new double[rowcnt] ; double *rhslow = new double[rowcnt] ; contyp_enum *ctyp = new contyp_enum[rowcnt] ; gen_rowparms(rowcnt,rhs,rhslow,ctyp,row_lower,row_upper) ; load_problem(colcnt,rowcnt,start,0,index,value, col_lower,col_upper,obj,ctyp,rhs,rhslow) ; delete[] rhs ; delete[] rhslow ; delete[] ctyp ; } /*! Constraints are described using a standard column-major packed matrix structure, constraint sense, right-hand-side, and (optional) range. Existing options and tolerances are preserved if they exist; defaults are used otherwise. */ inline void ODSI::loadProblem (const int colcnt, const int rowcnt, const int *start, const int *index, const double *value, const double* col_lower, const double* col_upper, const double* obj, const char* sense, const double* rhsin, const double* range) { double *rhs = new double[rowcnt] ; double *rhslow = new double[rowcnt] ; contyp_enum *ctyp = new contyp_enum[rowcnt] ; gen_rowparms(rowcnt,rhs,rhslow,ctyp,sense,rhsin,range) ; load_problem(colcnt,rowcnt,start,0,index,value, col_lower,col_upper,obj,ctyp,rhs,rhslow) ; delete[] rhs ; delete[] rhslow ; delete[] ctyp ; } //@} // ODSILoadProb /*! \defgroup SolverParms Methods to Set/Get Solver Parameters \brief Methods to set and retrive solver parameters. Dylp supports a limited set of the OSI parameters. Specifically,
OsiDualTolerance
(supported) This doesn't really correspond to a dylp parameter, but it can be faked (sort of). Dylp's dual feasibility tolerance is dynamically scaled from an absolute dual zero tolerance. There is also an additional scaling factor (`lpcontrol dfeas' in the dylp documentation) that can be controlled by the user. Given a value for the OsiDualTolerance parameter, the code calculates the appropriate value for dfeas such that OsiDualTolerance = dfeas*(absolute dual zero tolerance).
OsiDualObjectiveLimit
(facade) The dynamic simplex algorithm used in dylp works with a partial constraint system, adding and deleting constraints and variables as required and generally maintaining a minimal active constraint system. A side effect is that neither the dual or primal objective changes monotonically, hence it's not in general possible to terminate simplex iterations based on a limit on the dual objective. Currently, isDualObjectiveLimitReached simply bases its answer on the objective returned by dylp. This can (and will) be improved.
OsiMaxNumIteration
(supported) Limit on the number of simplex iterations.
OsiMaxNumIterationHotStart
(supported) Limit on the number of simplex iterations for an lp initiated by the solveFromHotStart function.
OsiObjOffset
(supported) A constant value added to the objective returned by the solver.
OsiPrimalObjectiveLimit
(facade) As for OsiDualObjectiveLimit.
OsiPrimalTolerance
(supported) Handled in the same manner as OsiDualTolerance.
*/ //@{ inline double ODSI::getInfinity () const { return odsiInfinity ; } bool ODSI::setDblParam (OsiDblParam key, double value) /* Aside from simply setting the relevant ODSI field, the work here is making sure the dylp tolerance values are consistent. OsiDualTolerance and OsiPrimalTolerance are both feasibility tolerances. dylp actually maintains feasibility tolerances scaled off the respective zero tolerances. dfeas_scale and pfeas_scale allow the scaled tolerances to be relaxed (or tightened, for that matter) with respect to the zero tolerances. Hence the best approach to consistency is to set *_scale based on the ratio of osi and dylp tolerances. This is, at best, imperfect, as it doesn't take into account dylp's internal scaling. Nor can it, really, as this information isn't guaranteed to be valid. Support for Osi[Dual,Primal]ObjectiveLimit is a facade at the moment. The values are stored, and used by is[Dual,Primal]ObjectiveLimitReached, but dylp knows nothing of them. */ { if (key >= OsiLastDblParam) return (false) ; bool retval = OSI::setDblParam(key,value) ; switch (key) { case OsiDualTolerance: { tolerances->dfeas_scale = value/tolerances->cost ; break ; } case OsiPrimalTolerance: { tolerances->pfeas_scale = value/tolerances->zero ; break ; } case OsiObjOffset: { break ; } case OsiDualObjectiveLimit: case OsiPrimalObjectiveLimit: { break ; } default: { retval = false ; break ; } } return (retval) ; } bool ODSI::getDblParam (OsiDblParam key, double& value) const /* This simply duplicates OSI::getDblParam. I've kept it here until I decide what to do with the parameters Osi[Primal,Dual]ObjectiveLimit. */ { if (key >= OsiLastDblParam) return (false) ; bool retval ; switch (key) { case OsiDualTolerance: case OsiPrimalTolerance: case OsiObjOffset: { retval = OSI::getDblParam(key,value) ; break ; } case OsiDualObjectiveLimit: case OsiPrimalObjectiveLimit: { retval = OSI::getDblParam(key,value) ; break ; } default: { OSI::getDblParam(key,value) ; retval = false ; break ; } } return (retval) ; } bool ODSI::setIntParam (OsiIntParam key, int value) /* Dylp's iteration limit is normally enforced on a per-phase basis, with an overall limit of 3*(per-phase limit). OsiMaxNumIterationHotStart is handled in solveFromHotStart. */ { if (key >= OsiLastIntParam) return (false) ; bool retval = OSI::setIntParam(key,value) ; switch (key) { case OsiMaxNumIteration: { initialSolveOptions->iterlim = value/3 ; resolveOptions->iterlim = initialSolveOptions->iterlim ; break ; } case OsiMaxNumIterationHotStart: case OsiNameDiscipline: { break ; } default: { retval = false ; break ; } } return (retval) ; } inline bool ODSI::getIntParam (OsiIntParam key, int& value) const /* This simply duplicates OSI::getIntParam. Retained here in anticipation of future extensions. */ { bool retval ; if (key >= OsiLastIntParam) return (false) ; switch (key) { case OsiMaxNumIteration: case OsiMaxNumIterationHotStart: case OsiNameDiscipline: { retval = OSI::getIntParam(key,value) ; break ; } default: { retval = false ; break ; } } return (retval) ; } bool ODSI::setStrParam (OsiStrParam key, const string& value) /* Set string paramaters. Note that OsiSolverName is, by definition, a constant. You can set it all you like, however :-). The problem name is pushed to the constraint system, if it exists. */ { if (key >= OsiLastStrParam) return (false) ; bool retval = OSI::setStrParam(key,value) ; switch (key) { case OsiProbName: { if (consys) { consys_chgnme(consys,'s',0,value.c_str()) ; } break ; } case OsiSolverName: { break ; } default: { retval = false ; break ; } } return (retval) ; } bool ODSI::getStrParam (OsiStrParam key, string& value) const /* This mostly duplicates OSI::getStrParam. It enforces the notion that you can't set the solver name, which the default OSI routine does not. */ { if (key >= OsiLastStrParam) return (false) ; bool retval = true ; switch (key) { case OsiProbName: { retval = OSI::getStrParam(key,value) ; break ; } case OsiSolverName: { value = solvername ; break ; } default: { retval = false ; break ; } } return (retval) ; } /*! A helper routine to deal with hints where dylp lacks any flexibility --- the facility is unimplemented, or always on. Failure is defined as OsiForceDo in the wrong direction; in this case an error is thrown. If the routine returns, then either the hint is compatible with dylp's capabilities, or it can be ignored. */ void ODSI::unimp_hint (bool dylpSense, bool hintSense, OsiHintStrength hintStrength, const char *msgString) { if (dylpSense != hintSense) { string message("Dylp ") ; if (dylpSense == true) { message += "cannot disable " ; } else { message += "does not support " ; } message += msgString ; if (hintStrength == OsiForceDo) { handler_->message(ODSI_UNSUPFORCEDO,messages_) << message << CoinMessageEol ; throw CoinError(message,"setHintParam","OsiDylpSolverInterface") ; } else { handler_->message(ODSI_IGNOREDHINT,messages_) << message << CoinMessageEol ; } } return ; } /*! Dylp only looks at the options and tolerances structures for the solver instance --- it has no knowledge of hints. For hints that aren't implemented in the ODSI code, the approach is to stash them away and make the appropriate modifications in the options and tolerances structures. Hints are therefore persistent across all calls to the solver, until explicitly changed. Note that the client retains ownership of the blocks specified by the (void *) arguments. If ODSI took ownership, it would need to know how to allocate and free the block, and that way lies madness. */ bool ODSI::setHintParam (OsiHintParam key, bool sense, OsiHintStrength strength, void *info) /* OSI provides arrays for the sense and strength. ODSI provides the array for info. */ { bool retval = false ; /* Check for out of range. */ if (key >= OsiLastHintParam) return (false) ; /* Set the hint in the OSI structures. Unlike the other set*Param routines, setHintParam will return false for key == OsiLastHintParam. Unfortunately, it'll also throw for strength = OsiForceDo, without setting a return value. We need to catch that throw. */ try { retval = OSI::setHintParam(key,sense,strength) ; } catch (CoinError) { retval = (strength == OsiForceDo) ; } if (retval == false) return (false) ; info_[key] = info ; /* Did the client say `ignore this'? Who are we to argue. */ if (strength == OsiHintIgnore) return (true) ; /* We have a valid hint which would be impolite to simply ignore. Deal with it as best we can. */ switch (key) { /* ODSI supports a native presolve for initialSolve only. Nothing more to do here. */ case OsiDoPresolveInInitial: { retval = true ; break ; } case OsiDoPresolveInResolve: { unimp_hint(false,sense,strength,"presolve for resolve") ; retval = true ; break ; } /* Dylp can suppress the dual, but cannot suppress the primal. Requesting OsiDoDual* with (true, OsiHint*) is ignored; (true,OsiForceDo) will throw an exception. On the other hand, suppressing the dual is generally not a good idea, so the hint is ignored at (false,OsiHintTry). */ case OsiDoDualInInitial: case OsiDoDualInResolve: { unimp_hint(false,sense,strength,"exclusive use of dual simplex") ; retval = true ; lpopts_struct *opts = (key == OsiDoDualInInitial)?initialSolveOptions:resolveOptions ; if (sense == false) { if (strength >= OsiHintDo) opts->usedual = false ; } else { opts->usedual = true ; } break ; } /* No issues here, dylp can go either way. */ case OsiDoScale: { if (sense == false) { if (strength >= OsiHintTry) initialSolveOptions->scaling = 0 ; } else { initialSolveOptions->scaling = 2 ; } resolveOptions->scaling = initialSolveOptions->scaling ; break ; } /* Dylp can construct a basis using only slacks and artificials (ibLOGICAL), or it can prefer architecturals over artificials (ibSLACK) or prefer architecturals over both slacks and artificials (ibARCH). The default is ibLOGICAL, so nothing happens if the hint sense is false. For true, change to ibSLACK, then ibARCH depending on strength. */ case OsiDoCrash: { if (sense == true) { if (strength >= OsiHintDo) { initialSolveOptions->coldbasis = ibARCH ; } else { initialSolveOptions->coldbasis = ibSLACK ; } } else { initialSolveOptions->coldbasis = ibLOGICAL ; } retval = true ; break ; } /* What to do with OsiDoInBranchAndCut? Try a context option for dylp, and see how it goes. If sense = true, BANDC is the right context for resolve, INITIALLP for initialSolve. If sense is false, go for INITIALLP for low strength, SINGLELP at ForceDo. In theory, resolve() should never see SINGLELP. */ case OsiDoInBranchAndCut: { if (sense == true) { resolveOptions->context = cxBANDC ; initialSolveOptions->context = cxINITIALLP ; } else { if (strength < OsiForceDo) { resolveOptions->context = cxINITIALLP ; initialSolveOptions->context = cxINITIALLP ; } else { resolveOptions->context = cxSINGLELP ; initialSolveOptions->context = cxSINGLELP ; } } retval = true ; break ; } /* The current absolute print settings are held in info_[OsiDoReducePrint]. An unadorned hint changes the level by +/- 1, 2, or 3, depending on sense and strength (abusing the equivalence of enums and integers). If info is non-zero, it is taken as a pointer to an integer which is the new absolute value for the print settings. In this case, sense is irrelevant. Note that CoinMessageHandler recognizes levels 0 -- 4 as generic levels. Conveniently, dylp has a similar set of generic levels. The larger powers of 2 (8, 16, 32, etc.) are left to trigger specific classes of debugging printout. These must be set using info. Currently: 0x08 CoinMpsIO messages 0x10 Echo to terminal */ case OsiDoReducePrint: { ptrdiff_t verbosity = reinterpret_cast(info_[key]) ; mps_debug = false ; if (info) { verbosity = *reinterpret_cast(info) ; if (verbosity&0x8) mps_debug = true ; } else { if (sense == true) { verbosity -= strength ; verbosity = CoinMax(verbosity,((ptrdiff_t) 0)) ; } else { verbosity += strength ; verbosity = CoinMin(verbosity,((ptrdiff_t) 4)) ; } } info_[key] = reinterpret_cast(verbosity) ; dy_setprintopts(0,initialSolveOptions) ; dy_setprintopts(0,resolveOptions) ; if (verbosity&0x10) { initial_gtxecho = true ; resolve_gtxecho = true ; } else { initial_gtxecho = false ; resolve_gtxecho = false ; } messageHandler()->setLogLevel(verbosity&0x7) ; dy_setprintopts((verbosity&0x7),initialSolveOptions) ; dy_setprintopts((verbosity&0x7),resolveOptions) ; retval = true ; break ; } /* The OSI spec says that unimplemented options (and, by implication, hints) should return false. In the case of a hint, however, we can ignore anything except OsiForceDo, so usability says we should anticipate new hints and set this up so the solver doesn't break. So return true. */ default: { unimp_hint(!sense,sense,strength,"unrecognized hint") ; retval = true ; break ; } } return (retval) ; } inline bool ODSI::getHintParam (OsiHintParam key, bool &sense, OsiHintStrength &strength, void *&info) const /* OSI provides the arrays for the sense and strength. ODSI provides the array for info. */ { bool retval ; if (key >= OsiLastHintParam) return (false) ; retval = OSI::getHintParam(key,sense,strength) ; if (retval == false) return (false) ; info = &info_[key] ; return (true) ; } //@} // SolverParms /*! \defgroup LPCommonMethods Common Solver Invocation Methods \brief Common core methods for invoking dylp */ //@{ lpret_enum ODSI::do_lp (ODSI_start_enum start, bool echo) /* This routine handles the job of running an lp and making a few attempts at recovery from errors. Ultimately, it's looking for one of lpOPTIMAL, lpINFEAS, or lpUNBOUNDED. In the event we turn up anything else, the strategy is to keep trying, forcing a cold start and gradually increasing the refactorisation frequency. Note that the routines which dump the solution and statistics in human readable form also make use of the constraint system. They won't be put off by converting between >= and <=, but they'll be very lost if the constraint system they see has a different number of constraints or variables than the constraint system dylp was using. Parameter: start: specifies cold, warm, or hot start echo: whether dylp output should be echoed to the terminal Returns: whatever it gets from dylp */ { int retries; lpret_enum lpret ; lpopts_struct lcl_opts ; lptols_struct lcl_tols ; flags persistent_flags ; # ifdef ODSI_INFOMSGS int print = 1 ; CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_ALLDYLP,messages_) << startString(start) << (int) reinterpret_cast(this) << CoinMessageEol ; # endif /* Check for constraint system corruption, and set lp_retval to lpFATAL if we find it. If we currently own the solver, release it. */ if (flgon(consys->opts,CONSYS_CORRUPT)) { if (dy_getOwner() == this) { detach_dylp() ; } return (lpFATAL) ; } /* Set up logging and echo, options and tolerances, make sure the phase isn't dyDONE, and reinitialise the statistics if we're collecting them. */ if (dyio_isactive(local_logchn)) dy_setlogchn(local_logchn) ; dy_setgtxecho(echo) ; lcl_tols = *tolerances ; switch (start) { case startCold: { lcl_opts = *initialSolveOptions ; break ; } case startWarm: { lcl_opts = *resolveOptions ; assert(lcl_opts.forcecold == false) ; break ; } case startHot: { lcl_opts = *resolveOptions ; assert(lcl_opts.forcecold == false) ; lcl_opts.forcewarm = false ; break ; } case startInvalid: { handler_->message(ODSI_CONFUSION,messages_) << __LINE__ << CoinMessageEol ; return (lpFATAL) ; } } dy_checkdefaults(consys,&lcl_opts,&lcl_tols) ; lpprob->phase = dyINV ; # ifdef ODSI_STATISTICS if (statistics) dy_freestats(&statistics) ; dy_initstats(&statistics,lpprob->consys) ; # endif retries = 0 ; /* Skim off any persistent flags that we may need to reset after a failure. (Output requests, etc.) */ persistent_flags = getflg(lpprob->ctlopts,lpctlACTVARSOUT) ; /* Take an initial run at doing the lp as it comes in. If this doesn't work, we'll try harder. After the initial shot at the lp, we can clear the vector change flags (they're only relevant to a hot start). */ lpret = dylp(lpprob,&lcl_opts,&lcl_tols,statistics) ; # ifdef ODSI_INFOMSGS if (print >= 1) { if (lpret == lpOPTIMAL || lpret == lpINFEAS || lpret == lpUNBOUNDED) { dyio_outfmt(local_logchn,echo,"\n success, status %s", dy_prtlpret(lpprob->lpret)) ; } else if (lpret == lpITERLIM) { dyio_outfmt(local_logchn,echo, "\n premature termination, status %s", dy_prtlpret(lpprob->lpret)) ; } else { dyio_outfmt(local_logchn,echo,"\n failed, status %s", dy_prtlpret(lpprob->lpret)) ; } } # endif clrflg(lpprob->ctlopts,lpctlUBNDCHG|lpctlLBNDCHG|lpctlRHSCHG|lpctlOBJCHG) ; /* Did it work? If not, get down to trying to recover. The algorithm is to first try a cold start with the full system, then proceed to halve the refactor frequency. Since a cold start rebuilds all dylp data structures from scratch, we don't need to worry about the various *CHG flags. And if we're about to retry, dylp freed the data structure regardless of the NOFREE flag. */ if (!(lpret == lpOPTIMAL || lpret == lpINFEAS || lpret == lpUNBOUNDED || lpret == lpITERLIM)) { # ifdef DYLP_POSTMORTEM /* Write an mps file with the failed problem. This is the hard way to do this, given how close we are to dylp. But I wanted to try it to exercise the code. Arguably I should call destruct_*_cache in order that writeMps sees any constraint flips. But that's a consistency problem. Cached structural vectors (including row descriptions and matrices) are normally preserved across a call to a solve routine. If presolve is active, then they are saved in the presolve cache area, but if we're solving without presolve, they are still in the main cache area. Right now, seems more trouble to sort out than it's worth. */ int saveInfo ; void *foo = &saveInfo ; bool saveSense,saveEcho[2] ; OsiHintStrength saveStrength ; getHintParam(OsiDoReducePrint,saveSense,saveStrength,foo) ; saveEcho[0] = initial_gtxecho ; saveEcho[1] = resolve_gtxecho ; int level = 4 ; level |= 0x10 ; setHintParam(OsiDoReducePrint,true,OsiForceDo,&level) ; lcl_opts.print = initialSolveOptions->print ; dy_setgtxecho(initial_gtxecho) ; echo = initial_gtxecho ; std::cout << "Verbosity now maxed at " << level << ".\n" ; writeMps("dylpPostmortem","mps") ; # endif if (lcl_opts.forcecold == true) lcl_opts.factor /= 2 ; lcl_opts.forcecold = true ; lcl_opts.fullsys = true ; lcl_tols.pfeas_scale *= 100 ; lcl_tols.dfeas_scale *= 100 ; /* We're ready. Open a loop that'll call dylp, doing a cold start on each lp and halving the refactor frequency with each call. Don't forget to reset the persistent flags. */ for ( ; lcl_opts.factor >= 10 ; lcl_opts.factor /= 2) { retries++ ; # ifdef ODSI_INFOMSGS if (print >= 1) { dyio_outfmt(local_logchn,echo,".\n retry %d: refactor = %d ...", retries,lcl_opts.factor) ; } # endif setflg(lpprob->ctlopts,persistent_flags) ; lpprob->phase = dyINV ; lpret = dylp(lpprob,&lcl_opts,&lcl_tols,statistics) ; if (lpret == lpOPTIMAL || lpret == lpINFEAS || lpret == lpUNBOUNDED) { # ifdef ODSI_INFOMSGS if (print >= 1) { dyio_outfmt(local_logchn,echo,"\n success, status %s", dy_prtlpret(lpprob->lpret)) ; } # endif break ; } # ifdef ODSI_INFOMSGS else { if (print >= 1) { dyio_outfmt(local_logchn,echo,"\n failed, status %s", dy_prtlpret(lpprob->lpret)) ; } } # endif } # ifdef DYLP_POSTMORTEM /* Note that sense and strength are unimportant, except that we need something stronger than OsiHintIgnore. */ setHintParam(OsiDoReducePrint,saveSense,OsiHintTry,&saveInfo) ; initial_gtxecho = saveEcho[0] ; resolve_gtxecho = saveEcho[1] ; # endif } solnIsFresh = true ; # if ODSI_TRACK_FRESH > 0 std::cout << "ODSI(" << std::hex << this << std::dec << ")::solution refreshed." << std::endl ; # endif /* That's it, we've done our best. Do a little printing and return. */ # ifdef ODSI_INFOMSGS if (print >= 1) { if (lpprob->lpret == lpOPTIMAL) dyio_outfmt(local_logchn,echo,"; objective %.8g",lpprob->obj) ; else if (lpprob->lpret == lpINFEAS) dyio_outfmt(local_logchn,echo,"; infeasibility %.4g",lpprob->obj) ; if (lpprob->phase == dyDONE) dyio_outfmt(local_logchn,echo," after %d pivots",lpprob->iters) ; dyio_outchr(local_logchn,echo,'.') ; dyio_flushio(local_logchn,echo) ; } # endif return (lpret) ; } //@} // LPCommonMethods /*! \defgroup ColdStartMethods Cold Start Method \brief Method for solving an LP from a cold start. This method solves an LP from scratch. Any necessary initialisation of the dylp solver is performed, then dylp is called to solve the problem. Dylp uses the full constraint system for the initial solution, rather than dynamic simplex. */ //@{ /*! The first actions make sure all is in order: there must be a valid lpprob structure, the basis package must be initialised, and this ODSI object must own the solver. The routine then sets a few other dylp parameters to appropriate values for the initial solution of the lp and calls the solver. Forcing fullsys here is generally a good choice in terms of the performance of the code, but it does reduce flexibility. This should be made into a hint. */ void ODSI::initialSolve () { CoinMessageHandler *hdl = messageHandler() ; flags save_ctlopts = 0 ; bool save_finpurge_vars = false ; bool save_finpurge_cons = false ; /* The minimum requirement is a constraint system. Options and tolerances should also be present --- they're established when the ODSI object is created. */ assert(consys && initialSolveOptions && tolerances) ; /* Do we have an lpprob structure yet? */ if (!lpprob) construct_lpprob() ; /* Is the basis package initialised? The second parameter controls how many basis updates the basis can hold before it requires refactoring. Adding 5 to dylp's refactor interval should give a safety margin. */ if (basis_ready == false) { int count = static_cast(1.5*getNumRows()) ; dy_initbasis(count,initialSolveOptions->factor+5,0) ; basis_ready = true ; } /* Does some other ODSI object own the solver? If so, detach it. Dylp's initialSolve will clear out the existing structures in any event, but if it's some other object, we can be polite and notify it. */ ODSI *dylp_owner = static_cast(dy_getOwner()) ; if (dylp_owner != this && dylp_owner != 0) { dylp_owner->detach_dylp() ; } clrflg(lpprob->ctlopts,lpctlDYVALID) ; /* Are we going to do presolve and postsolve? If so, now's the time to presolve the constraint system. */ # ifdef ODSI_INFOMSGS double startTime = CoinCpuTime() ; double presolveTime = startTime ; # endif bool presolving ; double bias = 0 ; { OsiHintStrength strength ; bool sense ; (void) getHintParam(OsiDoPresolveInInitial,sense,strength) ; if (sense == true) { presolving = true ; } else { presolving = false ; } } if (presolving == true) { preObj_ = initialisePresolve(false) ; doPresolve() ; if (evalPresolve() == true) { saveOriginalSys() ; installPresolve() ; bias = preObj_->dobias_ ; } else { destruct_presolve() ; presolving = false ; } # ifdef ODSI_INFOMSGS presolveTime = CoinCpuTime() ; # endif } /* Remove any active basis and trash any cached solution. The calls to destruct_*_cache remove only the cached solution vectors. If we're presolving, saveOriginalSys has moved the cached structural vectors and matrices to a safe place, otherwise they'll be unaffected. */ # if ODSI_TRACK_ACTIVE > 0 std::cout << "ODSI(" << std::hex << this << ")::initialSolve(1): deleting active basis " << activeBasis.basis << std::dec << "." << std::endl ; # endif delete activeBasis.basis ; activeBasis.basis = 0 ; activeBasis.condition = ODSI::basisNone ; activeBasis.balance = 0 ; destruct_col_cache(false) ; destruct_row_cache(false) ; /* Invoke the solver. If we're presolving, tweak the options so that the solver doesn't retain the problem. We'll be reloading with a warm start. */ if (presolving == true) { save_ctlopts = getflg(lpprob->ctlopts,lpctlNOFREE|lpctlACTVARSOUT) ; clrflg(lpprob->ctlopts,lpctlNOFREE|lpctlACTVARSOUT) ; save_finpurge_vars = initialSolveOptions->finpurge.vars ; initialSolveOptions->finpurge.vars = false ; save_finpurge_cons = initialSolveOptions->finpurge.cons ; initialSolveOptions->finpurge.cons = false ; } lp_retval = do_lp(startCold,initial_gtxecho) ; if (presolving == true) { lpprob->ctlopts = setflg(lpprob->ctlopts,save_ctlopts) ; initialSolveOptions->finpurge.vars = save_finpurge_vars ; initialSolveOptions->finpurge.cons = save_finpurge_cons ; } # ifdef ODSI_INFOMSGS double firstLPTime = CoinCpuTime() ; hdl->message(ODSI_COLD,messages_) ; hdl->printing(presolving) << "presol" ; hdl->printing(true) << dy_prtlpret(lp_retval) << getObjSense()*(lpprob->obj+bias) << lpprob->iters << CoinMessageEol ; # endif /* Separate the failure cases from the successful cases. lpITERLIM is questionable in this context (initial solution to the lp) but it's considered ok in warm and hot start (in particular, for strong branching). Since we can't tell from here, include it in the successes. */ bool lpOK ; if ((lp_retval == lpOPTIMAL || lp_retval == lpINFEAS || lp_retval == lpUNBOUNDED || lp_retval == lpITERLIM)) { lpOK = true ; } else { lpOK = false ; } # ifdef ODSI_INFOMSGS dylp_printsoln(true,true) ; # endif /* If we did presolve, we now need to do a postsolve, install a warm start, and call dylp one more time to set up the optimal solution with the original constraint system. Note that initialisePostsolve destroys the presolve object (by converting it to the postsolve object). installPostsolve brings back the cached original constraint system, the cached structural vectors and matrices, and creates a warm start appropriate for the original system. When we're done, we again need to clean out the active basis that was established as we set up for the second call to dylp. */ if (lpOK) { # ifdef ODSI_INFOMSGS double postsolveTime = firstLPTime ; double secondLPTime = firstLPTime ; # endif int presolIters = lpprob->iters ; if (presolving == true) { postObj_ = initialisePostsolve(preObj_) ; doPostsolve() ; installPostsolve() ; # ifdef ODSI_INFOMSGS postsolveTime = CoinCpuTime() ; # endif lp_retval = do_lp(startWarm,initial_gtxecho) ; # ifdef ODSI_INFOMSGS secondLPTime = CoinCpuTime() ; hdl->message(ODSI_COLD,messages_) ; hdl->printing(true) << "postsol" ; hdl->printing(true) << dy_prtlpret(lp_retval) << getObjSense()*lpprob->obj << lpprob->iters << CoinMessageEol ; # endif if (!(lp_retval == lpOPTIMAL || lp_retval == lpINFEAS || lp_retval == lpUNBOUNDED)) { throw CoinError("Call to dylp failed (postsolve).", "initialSolve","OsiDylpSolverInterface") ; } lpprob->iters += presolIters ; # if ODSI_TRACK_ACTIVE > 0 std::cout << "ODSI(" << std::hex << this << ")::initialSolve(2): deleting active basis " << activeBasis.basis << std::dec << "." << std::endl ; # endif delete activeBasis.basis ; activeBasis.basis = 0 ; activeBasis.condition = ODSI::basisNone ; activeBasis.balance = 0 ; } # ifdef ODSI_INFOMSGS hdl->message(ODSI_SHORTSTATS,messages_) << consys->nme << secondLPTime-startTime << presolveTime-startTime << presolIters << firstLPTime-presolveTime << postsolveTime-firstLPTime << lpprob->iters-presolIters << secondLPTime-postsolveTime << CoinMessageEol ; # endif } /* LP failure. Destroy the presolve object. */ else { if (presolving == true) { destruct_presolve() ; } } /* There should be no cached solution vectors at this point. */ assert(_col_x == 0) ; assert(_col_cbar == 0) ; assert(_row_lhs == 0) ; assert(_row_price == 0) ; /* Tidy up. If all went well, set the objective and active basis. Any of lpOPTIMAL, lpINFEAS, or lpUNBOUNDED can (in theory) be hot started after allowable problem modifications, hence can be flagged lpctlDYVALID. dylp overloads lpprob->obj with the index of the unbounded variable when returning lpUNBOUNDED, so we need to fake the objective. */ if (lpOK) { # ifdef ODSI_INFOMSGS hdl->message(ODSI_ATTACH,messages_) << "initialSolve" << (int) reinterpret_cast(this) << CoinMessageEol ; # endif if (lpprob->lpret == lpUNBOUNDED) { _objval = -getObjSense()*getInfinity() ; } else { _objval = getObjSense()*lpprob->obj ; } activeBasis.basis = this->getWarmStart() ; activeBasis.condition = ODSI::basisFresh ; activeBasis.balance = 0 ; # if ODSI_TRACK_ACTIVE > 0 std::cout << "ODSI(" << std::hex << this << ")::initialSolve: setting active basis " << activeBasis.basis << std::dec << "." << std::endl ; # endif } return ; } //@} // ColdStartMethods /*! \defgroup SolverTerm Methods Returning Solver Termination Status */ //@{ inline int ODSI::getIterationCount () const { return ((lpprob)?lpprob->iters:0) ; } inline bool ODSI::isIterationLimitReached () const { return (lp_retval == lpITERLIM) ; } inline bool ODSI::isProvenOptimal () const { return (lp_retval == lpOPTIMAL) ; } inline bool ODSI::isProvenPrimalInfeasible () const { return (lp_retval == lpINFEAS) ; } /*! Aka primal unbounded. There is some loss here, as dylp does not have a way to indicate both primal and dual infeasibility. */ inline bool ODSI::isProvenDualInfeasible () const { return (lp_retval == lpUNBOUNDED) ; } /*! Returns true if dylp abandoned the problem. This could be due to numerical problems (accuracy check or singular basis), stalling, unexpected loss of feasibility, inability to allocate space, or other fatal internal error. */ /* As implemented here, we simply look for the standard codes that indicate optimality, unboundedness, or infeasibility. Anything else qualifies as abandoned. Hitting the iteration limit is specifically not included here --- use isIterationLimitReached to check that. There are applications (e.g., strong branching) that deliberately use an artificially low iteration limit. */ inline bool ODSI::isAbandoned () const { if (lp_retval == lpOPTIMAL || lp_retval == lpUNBOUNDED || lp_retval == lpINFEAS || lp_retval == lpITERLIM) return (false) ; else return (true) ; } //@} // SolverTerm /*! \defgroup SolnInfo Methods to Get Solution Information */ //@{ /*! Returns the objective function value. The default implementation calculates the dot product of the objective and the current primal solution, then subtracts any constant offset. Note that if there is no current solution, the objective will be zero in the absence of an offset. */ inline double ODSI::getObjValue () const /* _objval is kept up-to-date and corrected for obj_sense. All we need to do here is deal with the offset. */ { double objoffset ; getDblParam(OsiObjOffset,objoffset) ; return (_objval-objoffset) ; } /*! Return a cached vector of primal variable values. If there is no cached copy, construct one and cache it. \note The values returned for superbasic variables are bogus (a limitation of the representation chosen to return the solution). Dylp ensures that an optimal or infeasible solution will not contain them. They may appear in an unbounded solution. The value returned is -inf; this ensures that you'll know if you inadvertently include it in a calculation. */ const double* ODSI::getColSolution () const /* There are three possible sources of a primal solution: a call to dylp, a call to pessimal_primal(), or specified by the client (setColSolution). If we have a cached solution in _col_x, we'll use it. setColSolution writes the solution directly into _col_x, as does pessimal_primal(). If the solver is empty (no consys), return null. If an lpprob exists and is fresh, then we have a solution from dylp. Calls to the solver will invalidate cached data, including _col_x, but will not regenerate it, hence we may need to do that here. Dylp returns a vector x of basic variables, in basis order, and a status vector. To assemble a complete primal solution, it's necessary to construct one vector that merges the two sources. The result is cached. NOTE the caution above about superbasic (vstatSB) variables. Nonbasic free variables (vstatNBFR) occur under the same termination conditions, but are legitimately zero. We really should return NaN for superbasics, using the function :std::numeric_limits::signaling_NaN(), but it's just not worth the hassle. Sun Workshop C++ (Rogue Wave Software) has it, but Gnu C++ prior to v3 doesn't even have , and the local v3 installation's points to another, non-existent header. I don't want to even discuss Microsquash. */ { if (_col_x) { return _col_x ; } if (consys == 0) { return (0) ; } if (!solnIsFresh) { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_ACCESS_STALE,messages_) << "getColSolution" << CoinMessageEol ; # if ODSI_TRACK_SOLVERS > 0 std::cout << "ODSI(" << std::hex << this << std::dec << ")::getColSolution: request for stale solution." << std::endl ; # endif # ifdef ODSI_STRICTLY_FRESH throw CoinError("Constraint system has changed since last call to solver.", "getColSolution","OsiDylpSolverInterface") ; return (0) ; # endif } assert(lpprob->status && lpprob->x) ; int n = getNumCols() ; flags statj ; _col_x = new double[n] ; /* Walk the status vector, taking values for basic variables from lpprob.x and values for nonbasic variables from the appropriate bounds vector. */ for (int j = 0 ; j < n ; j++) { statj = lpprob->status[idx(j)] ; if (((int) statj) < 0) { int k = -((int) statj) ; _col_x[j] = lpprob->x[k] ; } else { switch (statj) { case vstatNBLB: case vstatNBFX: { _col_x[j] = consys->vlb[idx(j)] ; break ; } case vstatNBUB: { _col_x[j] = consys->vub[idx(j)] ; break ; } case vstatNBFR: { _col_x[j] = 0 ; break ; } case vstatSB: { _col_x[j] = -odsiInfinity ; break ; } } } } return (_col_x) ; } /*! If necessary, a cached copy is built from the solution returned by the solver. */ const double* ODSI::getRowPrice () const /* There are two possible sources of duals: a call to the solver, or the client (setRowPrice). If we have a cached solution in _row_price, we'll use it. setRowPrice writes the duals directly into _row_price. If the solver is empty (no consys), return null. If an lpprob exists, we have a solution from dylp. Dylp reports dual variables in basis order, so we need to write a vector with the duals dropped into position by row index. */ { if (_row_price) { return (_row_price) ; } if (consys == 0) { return (0) ; } if (!solnIsFresh) { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_ACCESS_STALE,messages_) << "getRowPrice" << CoinMessageEol ; # ifdef ODSI_STRICTLY_FRESH throw CoinError("Constraint system has changed since last call to solver.", "getRowPrice","OsiDylpSolverInterface") ; return (0) ; # endif } assert(lpprob->basis && lpprob->y) ; int m = getNumRows() ; _row_price = new double[m] ; basis_struct* basis = lpprob->basis ; memset(_row_price,0,m*sizeof(double)) ; for (int k = 1 ; k <= basis->len ; k++) { int i = inv(basis->el[k].cndx) ; _row_price[i] = lpprob->y[k]*getObjSense() ; } return (_row_price) ; } /*! Return a cached vector of row activity. If there is no cached copy, calculate and cache Ax (i.e., the constraints evaluated at the primal solution). */ const double *ODSI::getRowActivity () const /* This routine calculates the value of the left-hand-side of a constraint. The algorithm is straightforward: Retrieve the primal solution, then walk the variables, adding the contribution of each non-zero variable. */ { /* If we have a cached copy, we're done. */ if (_row_lhs) return (_row_lhs) ; /* In order to go further, we'll need a primal solution and some rows. */ int m = getNumRows() ; const double *x = getColSolution() ; if (m > 0 && x) /* Create a vector to hold ax and clear it to 0. */ { _row_lhs = new double[consys->concnt] ; memset(_row_lhs,0,m*sizeof(double)) ; /* Walk the primal solution vector, adding in the contribution from non-zero variables. Take care that we don't scale infinity (sigh ... I hate this finite infinity business). */ pkvec_struct *aj = pkvec_new(m) ; for (int j = 0 ; j < consys->varcnt ; j++) { double xj = x[j] ; if (xj != 0) { bool r = consys_getcol_pk(consys,idx(j),&aj) ; if (!r) { delete[] _row_lhs ; _row_lhs = 0 ; if (aj) pkvec_free(aj) ; return (0) ; } if (fabs(xj) >= odsiInfinity) { for (int l = 0 ; l < aj->cnt ; l++) { int i = inv(aj->coeffs[l].ndx) ; if (fabs(_row_lhs[i]) < odsiInfinity) { double aij = aj->coeffs[l].val ; if (aij < 0) { _row_lhs[i] = -xj ; } else if (aij > 0) { _row_lhs[i] = xj ; } } } } else { for (int l = 0 ; l < aj->cnt ; l++) { int i = inv(aj->coeffs[l].ndx) ; if (fabs(_row_lhs[i]) < odsiInfinity) { _row_lhs[i] += xj*aj->coeffs[l].val ; } } } } } if (aj) pkvec_free(aj) ; /* Groom the vector to eliminate tiny values. */ for (int i = 0 ; i < consys->concnt ; i++) setcleanzero(_row_lhs[i],tolerances->zero) ; } /* Cache the result and return. */ return (_row_lhs) ; } /*! The routine calculates cbar = (c - yA) by accumulating y[i]*a. */ const double *ODSI::getReducedCost () const /* Calculate the reduced cost as cbar = c - yA. It's tempting to want to dive into dylp for this calculation, but there are problems: First, some other ODSI object may own the solver. Second, we can't be sure where the duals are coming from --- they could be part of a solution from dylp, or they could be a vector supplied by the client. Third, both the objective coefficients and the duals are subject to sign change for maximisation. In the end, it seems best to rely on getObjCoefficients and getRowPrice to provide the objective and duals, */ { /* Check for a cached value. */ if (_col_cbar) return (_col_cbar) ; /* Do we have columns to to work with? If yes, then we have a valid constraint system data structure. Initialize cbar with the objective coefficients. */ int n = getNumCols() ; if (n == 0) return (0) ; _col_cbar = new double[n] ; COPY_VEC(double,getObjCoefficients(),_col_cbar,n) ; /* Do we have rows? Dual variables? If not, we're done. The presence of rows does not necessarily mean we have valid duals. */ int m = getNumRows() ; const double *y = getRowPrice() ; if (!y) return (_col_cbar) ; /* We have a constraint system, objective coefficients, and dual variables. Grind out the calculation, row by row. */ pkvec_struct *ai = pkvec_new(n) ; for (int i = 0 ; i < m ; i++) { if (y[i] != 0) { bool r = consys_getrow_pk(consys,idx(i),&ai) ; if (!r) { delete[] _col_cbar ; _col_cbar = 0 ; if (ai) pkvec_free(ai) ; return (0) ; } for (int l = 0 ; l < ai->cnt ; l++) { int j = inv(ai->coeffs[l].ndx) ; _col_cbar[j] -= y[i]*ai->coeffs[l].val ; } } } if (ai) pkvec_free(ai) ; /* Groom the vector to eliminate tiny values and we're done. */ for (int j = 0 ; j < n ; j++) setcleanzero(_col_cbar[j],tolerances->cost) ; return (_col_cbar) ; } //@} // SolnInfo /*! \defgroup GetProbInfo Methods to Obtain Problem Information */ //@{ /*! Nonexistant variables return false. In the absence of type information, all variables are continuous. */ inline bool ODSI::isBinary (int i) const { if (!consys || i < 0 || i > consys->varcnt-1) return (false) ; else if (!consys->vtyp) return (false) ; else return (consys->vtyp[idx(i)] == vartypBIN) ; } /*! Nonexistant variables return false. In the absence of type information, all variables are continuous. */ inline bool ODSI::isIntegerNonBinary (int i) const { if (!consys || i < 0 || i > consys->varcnt-1) return (false) ; else if (!consys->vtyp) return (false) ; else return (consys->vtyp[idx(i)] == vartypINT) ; } /*! Nonexistant variables return false. In the absence of type information, all variables are continuous. */ inline bool ODSI::isInteger (int i) const { if (!consys || i < 0 || i > consys->varcnt-1) return (false) ; else if (!consys->vtyp) return (false) ; else return (consys->vtyp[idx(i)] == vartypINT || consys->vtyp[idx(i)] == vartypBIN) ; } /*! Nonexistant variables return false. In the absence of type information, all variables are continuous. */ inline bool ODSI::isContinuous (int i) const { if (!consys || i < 0 || i > consys->varcnt-1) return (false) ; else if (!consys->vtyp) return (true) ; else return (consys->vtyp[idx(i)] == vartypCON) ; } /*! Returns a pointer to the dylp data structure, with indexing shift. */ inline const double* ODSI::getColLower () const { if (!consys || !consys->vlb) return (0) ; else return (INV_VEC(double,consys->vlb)) ; } /*! Returns a pointer to the dylp data structure, with indexing shift. */ inline const double* ODSI::getColUpper () const { if (!consys || !consys->vub) return (0) ; else return (INV_VEC(double,consys->vub)) ; } inline int ODSI::getNumCols () const { if (!consys) return (0) ; else return (consys->varcnt) ; } inline int ODSI::getNumIntegers () const { if (!consys) return (0) ; else return (consys->intvcnt+consys->binvcnt) ; } inline int ODSI::getNumElements () const { if (!consys) return (0) ; else return (consys->mtx.coeffcnt) ; } inline int ODSI::getNumRows () const { if (!consys) return (0) ; else return (consys->concnt) ; } /*! Creates a cached copy, if it doesn't already exist, compensating for the objective sense. Returns a pointer to the cached copy. */ inline const double* ODSI::getObjCoefficients () const { if (!consys || !consys->obj) return (0) ; if (_col_obj) return _col_obj ; int n = getNumCols() ; _col_obj = new double[n] ; double *obj_0base = INV_VEC(double,consys->obj) ; if (getObjSense() < 0) { std::transform(obj_0base,obj_0base+n,_col_obj,std::negate()) ; } else { COPY_VEC(double,obj_0base,_col_obj,n) ; } return (_col_obj) ; } inline double ODSI::getObjSense () const { return (obj_sense) ; } /*! Creates a cached copy if it doesn't already exist and returns a pointer to the cached copy. The row-major OSI matrix is generated from a column-major OSI matrix which is created if it doesn't already exist. */ const CoinPackedMatrix* ODSI::getMatrixByRow () const { if (!consys) return 0 ; if (_matrix_by_row) return _matrix_by_row ; _matrix_by_row = new CoinPackedMatrix ; _matrix_by_row->reverseOrderedCopyOf(*getMatrixByCol()) ; return _matrix_by_row ; } /*! Creates a cached copy if it doesn't already exist and returns a pointer to the cached copy. The routine generates the core structures of the OSI matrix: the paired arrays values (coefficients) and indices (row indices for coefficients), and the column description arrays start (column starting index in values/indices) and length (number of coefficients). These are filled from the consys_struct and then passed to assignMatrix to create the OSI matrix. This routine knows the internal structure of a consys_struct. This saves the overhead of a call to consys_getcol_pk and a packed vector intermediary. A debatable decision. */ const CoinPackedMatrix* ODSI::getMatrixByCol () const { if (!consys) return 0 ; if (_matrix_by_col) return _matrix_by_col ; /* Get the column and coefficient counts and create the OSI core vectors. */ int col_count = getNumCols() ; int coeff_count = consys->mtx.coeffcnt ; int* start = new int[col_count+1] ; int* len = new int[col_count] ; double* values = new double[coeff_count] ; int* indices = new int[coeff_count] ; CoinPackedMatrix* matrix = new CoinPackedMatrix ; /* Scan out the coefficients from the consys_struct column by column. */ colhdr_struct** cols = consys->mtx.cols ; int coeff_ndx = 0 ; for (int i = 0 ; i < col_count ; i++) { start[i] = coeff_ndx ; len[i] = cols[idx(i)]->len ; coeff_struct* c = cols[idx(i)]->coeffs ; for (int j = 0 ; j < len[i] ; j++, c = c->colnxt, coeff_ndx++) { values[coeff_ndx] = c->val ; indices[coeff_ndx] = inv(c->rowhdr->ndx) ; } assert(c == 0) ; } assert(coeff_ndx == coeff_count) ; /* Create the OSI sparse matrix structure. */ start[col_count] = coeff_ndx ; int row_count = getNumRows() ; matrix->assignMatrix(true, row_count, col_count, coeff_count, values, indices, start, len) ; /* Make a cached copy and return a pointer to it. */ _matrix_by_col = matrix ; return matrix ; } /*! Creates a cached copy if it doesn't already exist and returns a pointer to the cached copy. A little work is required here to synthesize a vector that meets OSI's expectations. Dylp uses only rhs for all except range constraints and does not keep an explicit second bound. For non-binding (NB) constraints, it keeps no rhs values at all. */ const double* ODSI::getRowLower () const { if (!consys) return (0) ; if (_row_lower) return _row_lower ; int m = getNumRows() ; double* lower = new double[m] ; for (int i = 0 ; i < m ; i++) { contyp_enum ctypi = consys->ctyp[idx(i)] ; switch (ctypi) { case contypEQ: case contypGE: { lower[i] = consys->rhs[idx(i)] ; break ; } case contypRNG: { lower[i] = consys->rhslow[idx(i)] ; break ; } case contypLE: case contypNB: { lower[i] = -odsiInfinity ; break ; } default: { assert(0) ; } } } _row_lower = lower ; return (lower) ; } /*! Creates a cached copy if it doesn't already exist and returns a pointer to the cached copy. A little work is required here to synthesize a vector that meets OSI's expectations. Dylp uses only rhs for all except range constraints and does not keep an explicit second bound. For non-binding (NB) constraints, it keeps no rhs values at all. */ const double* ODSI::getRowUpper () const { if (!consys) return (0) ; if (_row_upper) return _row_upper ; int m = getNumRows() ; double* upper = new double[m] ; for (int i = 0 ; i < m ; i++) { if (consys->ctyp[idx(i)] == contypGE || consys->ctyp[idx(i)] == contypNB) upper[i] = odsiInfinity ; else upper[i] = consys->rhs[idx(i)] ; } _row_upper = upper ; return upper ; } /*! Creates a cached copy if it doesn't already exist and returns a pointer to the cached copy. This is a simple translation from dylp contyp_enum codes to the character codes used by OSI. */ const char* ODSI::getRowSense () const { if (!consys) return (0) ; if (_row_sense) return _row_sense ; int m = getNumRows() ; char* sense = new char[m] ; const contyp_enum* ctyp = INV_VEC(contyp_enum,consys->ctyp) ; std::transform(ctyp,ctyp+m,sense,type_to_sense) ; _row_sense = sense ; return sense ; } /*! Creates a cached copy if it doesn't already exist and returns a pointer to the cached copy. Dylp keeps explicit upper and lower row bounds only for range constraints. We need to construct a vector with information for all constraints. Note that by using getRowLower, getRowUpper, and getRowSense, we'll create cached copies of that information also. */ const double* ODSI::getRowRange () const { if (!consys) return (0) ; if (_row_range) return _row_range ; int m = getNumRows() ; double* range = new double[m] ; const double* lower = getRowLower() ; const double* upper = getRowUpper() ; const char* sense = getRowSense() ; for (int i=0 ; i 0) return (objval > objlim) ; else return (objval < objlim) ; } /*! Partially supported. See \link OsiDylpSolverInterface::isDualObjectiveLimitReached ODSI:isDualObjectiveLimitReached\endlink. */ /* Report true if the objective has improved past a specified level of goodness. For the default minimisation, the objective is below the specified upper bound. For maximisation, the objective is above the specified lower bound. */ bool ODSI::isPrimalObjectiveLimitReached () const { double objlim ; double objval = getObjValue() ; getDblParam(OsiPrimalObjectiveLimit,objlim) ; if (getObjSense() > 0) return (objval < objlim) ; else return (objval > objlim) ; } /*! \brief Return dual rays emanating from the current extreme point up to the limit specified by the client. It's straightforward to return all dual rays emanating from the current extreme point. Finding additional dual rays amounts to walking the vertices of the polytope. Dylp's dy_dualRays routine does not support this. */ /* The primary purpose of this routine is to exchange the vectors handed back by dylp, allocated with malloc, for vectors allocated with new. Otherwise we risk madness when space allocated by malloc is freed by delete. Arguably we could beef up the intro so that it would save a warm start, detach the current owner, install the local warm start, resolve, and then ask for the dual rays. But I'm going to hold off on that for this first implementation. We'll see if anyone wants that functionality. -- lh, 080722 -- */ vector ODSI::getDualRays (int maxNumRays, bool fullRay) const { int numRays ; double **dylpRays ; std::vector dualRays ; CoinMessageHandler *hdl = messageHandler() ; const char *rtnnme = "ODSI::getDualRays" ; /* If we don't own the solver, we can't ask for rays. We also need valid data. */ if (dy_getOwner() != this) { hdl->message(ODSI_NOSOLVE,messages_) << rtnnme << "not owner" << CoinMessageEol ; return (dualRays) ; } if (!flgon(lpprob->ctlopts,lpctlDYVALID)) { hdl->message(ODSI_NOSOLVE,messages_) << rtnnme << "invalid retained data structures" << CoinMessageEol ; return (dualRays) ; } /* Call dylp to get the available rays, up to the maximum requested. */ numRays = maxNumRays ; dylpRays = 0 ; if (dy_dualRays(lpprob,fullRay,&numRays,&dylpRays,true) == false) { hdl->message(ODSI_FAILEDCALL,messages_) << rtnnme << "dy_dualRays" << CoinMessageEol ; return (dualRays) ; } /* Do the space swap, copying malloc'd vectors to new'd vectors. Free the malloc'd vectors. */ int len = getNumRows() ; if (fullRay == true) len += getNumCols() ; for (int v = 0 ; v < numRays ; v++) { double *tmpVec = CoinCopyOfArray(inv_vec(dylpRays[v]),len) ; dualRays.push_back(tmpVec) ; FREE(dylpRays[v]) ; } FREE(dylpRays) ; return (dualRays) ; } /*! \brief Return primal rays emanating from the current extreme point up to the limit specified by the client. See comments for getDualRays(). */ vector ODSI::getPrimalRays (int maxNumRays) const { int numRays ; double **dylpRays ; std::vector primalRays ; CoinMessageHandler *hdl = messageHandler() ; const char *rtnnme = "ODSI::getPrimalRays" ; /* If we don't own the solver, we can't ask for rays. We also need valid data. */ if (dy_getOwner() != this) { hdl->message(ODSI_NOSOLVE,messages_) << rtnnme << "not owner" << CoinMessageEol ; return (primalRays) ; } if (flgon(lpprob->ctlopts,lpctlDYVALID)) { hdl->message(ODSI_NOSOLVE,messages_) << rtnnme << "invalid retained data structures" << CoinMessageEol ; return (primalRays) ; } /* Call dylp to get the available rays, up to the maximum requested. */ numRays = maxNumRays ; if (dy_primalRays(lpprob,&numRays,&dylpRays) == false) { hdl->message(ODSI_FAILEDCALL,messages_) << rtnnme << "dy_primalRays" << CoinMessageEol ; return (primalRays) ; } /* Do the space swap, copying malloc'd vectors to new'd vectors. Free the malloc'd vectors. */ int m = getNumRows() ; for (int v = 0 ; v < numRays ; v++) { double *tmpVec = CoinCopyOfArray(inv_vec(dylpRays[v]),m) ; primalRays.push_back(tmpVec) ; FREE(dylpRays[v]) ; } FREE(dylpRays) ; return (primalRays) ; } /*! dylp is strictly a simplex LP solver. */ void ODSI::branchAndBound () { throw CoinError("Unimplemented method.", "branchAndBound","OsiDylpSolverInterface") ; return ; } //@} /*! \defgroup WarmStart Warm Start Methods \brief Methods for solving an LP from a warm start. Dylp returns basis and status information as a matter of course when the solver termination status is optimal, infeasible, or unbounded. This information can be read back into dylp for a warm start. The \link OsiDylpSolverInterface::getWarmStart ODSI::getWarmStart \endlink routine simply copies the information into an OsiDylpWarmStartBasis object. This can be done after any call to a solver routine. getWarmStart will return an empty warm start object if no solution exists. This is occasionally useful in contexts where a basis will be generated from scratch or where it's necessary to establish the type of warm start object for later use, but note that #getEmptyWarmStart exists for this purpose. The \link OsiDylpSolverInterface::setWarmStart ODSI::setWarmStart \endlink routine rebuilds the required basis and status information from the OsiDylpWarmStartBasis object and sets ODSI options so that the solver will attempt a warm start at the next call to \link OsiDylpSolverInterface::resolve ODSI::resolve \endlink. The convention in OSI is that warm start objects derive from the base class CoinWarmStart. If you're using only getWarmStart and setWarmStart, that's really all you need to know. For additional details, see the documentation for the OsiDylpWarmStartBasis class. */ //@{ /*! This routine returns an empty OsiDylpWarmStartBasis object. Its purpose is to provide a way to give a client a warm start basis object of the appropriate type, which can be cloned, resized, and modified as desired. */ CoinWarmStart *ODSI::getEmptyWarmStart () const { return (dynamic_cast(new OsiDylpWarmStartBasis())) ; } /*! This routine constructs an OsiDylpWarmStartBasis structure from the basis and status information returned by the dylp solver. If no valid solution exists, an empty warm start object is returned. */ CoinWarmStart* ODSI::getWarmStart () const /* This routine constructs an OsiDylpWarmStartBasis structure from the basis returned by dylp. Dylp takes the atttitude that in so far as it is possible, logicals should be invisible outside the solver. The status of nonbasic logicals is not reported, nor does dylp expect to receive it. For completeness, however, getWarmStart will synthesize status information for nonbasic logicals. getWarmStart doesn't install an activeBasis, though it will clone from it if it's present. This is a debatable decision. For now, I'm more comfortable with explicitly installing activeBasis at the appropriate call points within ODSI. I don't want to worry about the client calling getWarmStart and installing activeBasis in a way I didn't anticipate. */ { int i,j,k,m,n ; flags statj ; /* If we have an active basis, whatever the condition, return a clone. */ if (activeBasis.condition != ODSI::basisNone) { return (activeBasis.basis->clone()) ; } /* Create an empty ODWSB object. If no solution exists, we can return immediately. */ OsiDylpWarmStartBasis *wsb = new OsiDylpWarmStartBasis ; assert(wsb) ; if (!lpprob) return (wsb) ; /* Size the ODWSB object, then grab pointers to the status vectors and the dylp basis vector. setSize initialises structural and logical status vectors to isFree, but constraint status entries are initialised to indicate active (atLowerBound), for the benefit of the world at large. We'll need to fix that below. */ m = consys->concnt ; n = consys->varcnt ; wsb->setSize(n,m) ; char *const strucStatus = wsb->getStructuralStatus() ; char *const artifStatus = wsb->getArtificialStatus() ; char *const conStatus = wsb->getConstraintStatus() ; basis_struct *basis = lpprob->basis ; if (lpprob->lpret == lpOPTIMAL) wsb->setPhase(dyPRIMAL2) ; else wsb->setPhase(dyPRIMAL1) ; /* Clear the constraint status vector to isFree, then walk the basis and mark the active constraints and basic variables. Basic logical variables are entered as the negative of the constraint index. */ for (i = 0 ; i < m ; i++) { setStatus(conStatus,i,CWSB::isFree) ; } for (k = 1 ; k <= basis->len ; k++) { i = inv(basis->el[k].cndx) ; setStatus(conStatus,i,CWSB::atLowerBound) ; j = basis->el[k].vndx ; if (j < 0) { j = inv(-j) ; setStatus(artifStatus,j,CWSB::basic) ; } else { j = inv(j) ; setStatus(strucStatus,j,CWSB::basic) ; } } /* Next, scan the conStatus array. For each inactive (loose => isFree) constraint, indicate that the logical is basic. For active (tight => atLowerBound) constraints, if the corresponding logical isn't already marked as basic, we need to choose a nonbasic status: * If both constraint bounds are infinite, it's an error --- this constraint should be loose and the logical should be basic. * If one constraint bound is infinite, that determines the status of the logical. Infinite LB(i) forces NBUB, infinite UB(i) forces NBLB. * If both bounds are finite, set the status to match the sign of the dual. If the dual is zero, set the status to correspond to the bound closest to the row lhs. If we're maximising, reverse the sense of the dual (using objSense). This sequence has the advantage of being fairly robust against small numerical errors in the values of the dual variables. By the time we're using the sign of the dual to select a bound, we're guaranteed that the logical has two finite bounds. */ const double *y = getRowPrice() ; double objSense = getObjSense() ; for (i = 0 ; i < m ; i++) { if (getStatus(conStatus,i) == CWSB::isFree) { setStatus(artifStatus,i,CWSB::basic) ; } else if (getStatus(artifStatus,i) == CWSB::isFree) { const double *blow = getRowLower() ; const double *b = getRowUpper() ; const double &blowi = blow[i] ; const double &bi = b[i] ; if (blowi <= -odsiInfinity) { assert(bi < odsiInfinity) ; setStatus(artifStatus,i,CWSB::atLowerBound) ; } else if (bi >= odsiInfinity) { assert(blowi > -odsiInfinity) ; setStatus(artifStatus,i,CWSB::atUpperBound) ; } else if (y[i]*objSense > tolerances->cost) { setStatus(artifStatus,i,CWSB::atUpperBound) ; } else if (y[i]*objSense < -tolerances->cost) { setStatus(artifStatus,i,CWSB::atLowerBound) ; } else { const double *lhs = getRowActivity() ; const double &lhsi = lhs[i] ; if (fabs(lhsi-blowi) < fabs(bi-lhsi)) setStatus(artifStatus,i,CWSB::atUpperBound) ; else setStatus(artifStatus,i,CWSB::atLowerBound) ; } } } /* Now scan the status vector and record the status of nonbasic structural variables. Some information is lost here --- CWSB::Status doesn't encode NBFX. */ for (j = 1 ; j <= n ; j++) { statj = lpprob->status[j] ; if (((int) statj) > 0) { switch (statj) { case vstatNBLB: case vstatNBFX: { setStatus(strucStatus,inv(j), CWSB::atLowerBound) ; break ; } case vstatNBUB: { setStatus(strucStatus,inv(j), CWSB::atUpperBound) ; break ; } case vstatNBFR: { setStatus(strucStatus,inv(j), CWSB::isFree) ; break ; } default: { delete wsb ; wsb = 0 ; throw CoinError("Warm start construction failed --- " "invalid status in dylp basis.", "getWarmStart","OsiDylpSolverInterface") ; } } } } # if ODSI_PARANOIA >= 2 if (wsb) { wsb->checkBasis(messageHandler()) ; } # endif return (wsb) ; } /* A helper routine to patch a basis with excess basic variables. This comes about due to deletion of tight constraints. Ideally, we could scan the basis looking for basic variables at bound and force them to be nonbasic. Unfortunately, we can't do that, because by definition we'll arrive here only if the solution is stale due to changes in the constraint system. Given that the routine is trivially small, why not just integrate it with setWarmStart? Because setWarmStart can be called by the client to impose a basis. This bit of patching is needed only to correct the active basis held within ODSI, and that's only necessary at a call to resolve(). (Arguably, we could check if the basis parameter matches ODSI's active basis or hot start fallback basis, but this seems a bit more clean.) Why, then, does setWarmStart handle the case of balance < 0? Because we can process the entire basis, as given, before we're confronted with the need to find a few more basic variables. So the user's basis will be set as given, and fixed if necessary. */ void ODSI::reduceActiveBasis () { int n = getNumCols() ; CoinWarmStartBasis *wsb = dynamic_cast(activeBasis.basis) ; # if ODSI_TRACK_ACTIVE > 0 std::cout << "ODSI(" << std::hex << this << ")::reduceActiveBasis: active basis is " << activeBasis.basis << std::dec << ", entering balance " << activeBasis.balance << "." << std::endl ; # endif assert(activeBasis.balance > 0) ; /* Start pushing variables out of the basis until it's balanced. Arbitrarily set to nonbasic at lower bound. If we bring the basis into balance, we can change its condition to basisModified. */ for (int j = 0 ; j < n && activeBasis.balance > 0 ; j++) { if (wsb->getStructStatus(j) == CWSB::basic) { wsb->setStructStatus(j,CWSB::atLowerBound) ; activeBasis.balance-- ; } } if (activeBasis.balance == 0) { activeBasis.condition = ODSI::basisModified ; } # if ODSI_TRACK_ACTIVE > 0 std::cout << "ODSI(" << std::hex << this << ")::reduceActiveBasis: basis patch " << std::dec ; if (activeBasis.balance == 0) { std::cout << "succeeded." ; } else { std::cout << "failed." ; } std::cout << std::endl ; # endif return ; } /* A method to install a basis in the lp problem object. Aside from aesthetics, the primary reason this is a separate method is because it can be declared const, and we need this for the simplex API. It's assumed that all necessary checks have been performed. See #setWarmStartBasis for what needs to be in place. It can happen that the client will, for one reason or another, fix a basic variable. The symptom here is that we end up short a few basic variables. Unfortunately, the COIN data structures do not contain enough information for setWarmStart to tell whether this is intentional or an error. In the case of cbc, this does occur intentionally. So we compensate, and promote some random nonbasic variable to basic status. If the log level is sufficiently high, you'll get a message. It can happen that the client will, for one reason or another, augment the constraint system and then ask to install some existing ODWSB object. This happens, for example, in the Feasibility Pump heuristic, which simply tacks on the objective function as a constraint and then asks for a resolve(). This leads to the case where the ODWSB object is smaller than the constraint system. We just create a dylp basis that matches the ODWSB object, and trust that dylp will pick up the inactive constraints and/or variables. */ void ODSI::setBasisInLpprob (const OsiDylpWarmStartBasis *wsb, lpprob_struct *lcl_lpprob) const { int varcnt = wsb->getNumStructural() ; int concnt = wsb->getNumArtificial() ; /* Extract the info in the warm start object --- size and status vectors. The number of variables and constraints in the warm start object should not exceed the full size of the constraint system. Note that getWarmStart can create an empty ODWSB object (see comments with getWarmStart). Create a dylp basis_struct and status vector of sufficient size to hold the information in the OsiDylpWarmStartBasis. We'll only use as much of the basis as is needed for the active constraints. */ const char *const strucStatus = wsb->getStructuralStatus() ; const char *const artifStatus = wsb->getArtificialStatus() ; const char *const conStatus = wsb->getConstraintStatus() ; flags *status = new flags[idx(varcnt)] ; basis_struct basis ; basis.el = new basisel_struct[idx(concnt)] ; /* We never use these entries, but we need to initialise them to squash a `read from uninitialised memory' error during block copies. */ basis.el[0].cndx = 0 ; basis.el[0].vndx = 0 ; status[0] = 0 ; /* Walk the constraint status vector and build the set of active constraints. */ int actcons = 0 ; CWSB::Status osi_statlogi,osi_statconi,osi_statvarj ; for (int i = 1 ; i <= concnt ; i++) { osi_statconi = getStatus(conStatus,inv(i)) ; if (osi_statconi == CWSB::atLowerBound) { actcons++ ; basis.el[actcons].cndx = i ; basis.el[actcons].vndx = 0 ; } } basis.len = actcons ; /* Now walk the structural status vector. For each basic variable, drop it into a basis entry and note the position in the status vector. For each nonbasic variable, set the proper status flag. We need to check bounds to see if the variable should be fixed. */ int k = 0 ; for (int j = 1 ; j <= varcnt ; j++) { osi_statvarj = getStatus(strucStatus,inv(j)) ; switch (osi_statvarj) { case CWSB::basic: { k++ ; assert(k <= actcons) ; basis.el[k].vndx = j ; status[j] = (flags) (-k) ; break ; } case CWSB::atLowerBound: { if (consys->vlb[j] > -odsiInfinity) { if (consys->vlb[j] == consys->vub[j]) { status[j] = vstatNBFX ; } else { status[j] = vstatNBLB ; } } else { if (consys->vub[j] < odsiInfinity) { status[j] = vstatNBUB ; } else { status[j] = vstatNBFR ; } handler_->message(ODSI_ODWSBBADSTATUS,messages_) << consys_nme(consys,'v',j,false,0) << j << dy_prtvstat(vstatNBLB) << dy_prtvstat(status[j]) << CoinMessageEol ; } break ; } case CWSB::atUpperBound: { if (consys->vub[j] < odsiInfinity) { if (consys->vlb[j] == consys->vub[j]) { status[j] = vstatNBFX ; } else { status[j] = vstatNBUB ; } } else { if (consys->vlb[j] > -odsiInfinity) { status[j] = vstatNBLB ; } else { status[j] = vstatNBFR ; } handler_->message(ODSI_ODWSBBADSTATUS,messages_) << consys_nme(consys,'v',j,false,0) << j << dy_prtvstat(vstatNBUB) << dy_prtvstat(status[j]) << CoinMessageEol ; } break ; } case CWSB::isFree: { status[j] = vstatNBFR ; break ; } } } /* Now we need to finish out the basis by adding the basic logicals. The convention is to represent this with the negative of the index of the constraint which spawns the logical. Note that we do this only if the constraint is active. When running in fullsys mode, this is the common case. If we're running dynamic simplex, then all we're picking up here is the occasional logical that's basic at bound. */ for (int i = 1 ; i <= concnt ; i++) { osi_statlogi = getStatus(artifStatus,inv(i)) ; osi_statconi = getStatus(conStatus,inv(i)) ; if (osi_statlogi == CWSB::basic && osi_statconi == CWSB::atLowerBound) { k++ ; assert(k <= actcons) ; basis.el[k].vndx = -i ; } } /* Up to now we've worried about too many basic variables. Time to check to see if we have enough. If we're short, it could be an error, or it could be intentional. We can't tell from here (see note at head of routine). Fill out the basis by grabbing nonbasic logicals and declaring them basic. Such variables must exist. It'd be nice to correct the warm start, but we've been handed a const object, so we can't do that. If I was being picky here, I'd look for inequalities (slacks) in preference to equalities (artificials). But that would require keeping an artificial in reserve in case we didn't find a slack. My initial reaction is ``More trouble than it's worth.'' */ if (k < actcons) { handler_->message(ODSI_ODWSBSHORTBASIS,messages_) << consys->nme << k << actcons << CoinMessageEol ; for (int i = 1 ; i <= concnt ; i++) { osi_statlogi = getStatus(artifStatus,inv(i)) ; if (osi_statlogi != CWSB::basic) { k++ ; basis.el[k].vndx = -i ; if (k >= actcons) break ; } } } assert(k == actcons) ; /* Now install the new basis in the lpprob_struct. If the present allocated capacity is sufficient, we can just copy over the existing information. If the capacity is insufficient, we'll free the existing space and allocate new. There's also the possibility that this WarmStartBasis came from some other object, and there are no vectors here at all. Because dylp relies on lpprob->colsze and lpprob->rowsze for the allocated capacity of actvars, x, and y, we need to reallocate them too. This space may well be freed and/or realloc'd by dylp, so use standard calloc to acquire it. */ if (lcl_lpprob->colsze < varcnt) { if (lcl_lpprob->status) { FREE(lcl_lpprob->status) ; lcl_lpprob->status = 0 ; } if (lcl_lpprob->actvars) { lcl_lpprob->actvars = (bool *) REALLOC(lcl_lpprob->actvars,idx(varcnt)*sizeof(bool)) ; } lcl_lpprob->colsze = varcnt ; } if (!lcl_lpprob->status) { lcl_lpprob->status = (flags *) CALLOC(idx(lcl_lpprob->colsze),sizeof(flags)) ; } if (!lcl_lpprob->actvars) { lcl_lpprob->actvars = (bool *) CALLOC(idx(lcl_lpprob->colsze),sizeof(bool)) ; } if (lcl_lpprob->rowsze < actcons) { if (lcl_lpprob->x) { lcl_lpprob->x = (double *) REALLOC(lcl_lpprob->x,idx(actcons)*sizeof(double)) ; } if (lcl_lpprob->y) { lcl_lpprob->y = (double *) REALLOC(lcl_lpprob->y,idx(actcons)*sizeof(double)) ; } if (lcl_lpprob->basis && lcl_lpprob->basis->el) { FREE(lcl_lpprob->basis->el) ; lcl_lpprob->basis->el = 0 ; } lcl_lpprob->rowsze = actcons ; } if (!lcl_lpprob->x) { lcl_lpprob->x = (double *) CALLOC(idx(lcl_lpprob->rowsze),sizeof(double)) ; } if (!lcl_lpprob->y) { lcl_lpprob->y = (double *) CALLOC(idx(lcl_lpprob->rowsze),sizeof(double)) ; } if (!lcl_lpprob->basis) { lcl_lpprob->basis = (basis_struct *) CALLOC(1,sizeof(basis_struct)) ; } if (!lcl_lpprob->basis->el) { lcl_lpprob->basis->el = (basisel_struct *) CALLOC(idx(lcl_lpprob->rowsze), sizeof(basisel_struct)) ; } /* Whew. The actual copy is dead easy. */ copy_basis(&basis,lcl_lpprob->basis) ; COPY_VEC(flags,status,lcl_lpprob->status,idx(varcnt)) ; delete[] basis.el ; delete[] status ; /* That's it! The new status and basis are installed in lpprob, and the x, y, and actvars arrays have been resized if needed. Set the phase and we're done. */ lcl_lpprob->phase = wsb->getPhase() ; return ; } /*! This routine installs the basis snapshot from an OsiDylpWarmStartBasis (ODWSB) object and sets ODSI options so that dylp will attempt a warm start on the next call to \link OsiDylpSolverInterface::resolve ODSI::resolve \endlink. This method is a shell that handles modifications to the ODSI object. The work of loading the ODWSB object into the lpprob is handled by #setBasisInLpprob. By definition, a parameter of 0 is taken as a request to update the current warm start from the solver. A basis with 0 rows and 0 columns is taken as a request to delete the existing warm start information held in activeBasis. The size (rows x columns) of the constraint system should be equal or larger than the ODSWB information. The final basis built for dylp can always end up smaller than the constraint system, as inactive constraints and variables will not be included. A basis with 0 active constraints is legal. (In fact, fairly common. When a B&C code fixes all integer variables to confirm or regenerate a solution, a problem with only integer variables may have all variables fixed and no tight architectural constraints.) */ bool ODSI::setWarmStart (const CoinWarmStart *ws) { /* By definition, a null parameter is a request to update the active basis from the solver. Since ODSI does this on every call to the solver, no further action is required. All we need to do here is assert that an active basis exists and is minimally consistent. */ if (!ws) { # if ODSI_TRACK_ACTIVE > 0 std::cout << "ODSI(" << std::hex << this << ")::setWarmStart: sync request; current active basis is " << activeBasis.basis << std::dec << "." << std::endl ; # endif assert(activeBasis.basis) ; assert(activeBasis.condition == ODSI::basisFresh) ; assert(activeBasis.balance == 0) ; return (true) ; } /* Use a dynamic cast to make sure we have a CWSB. Then check the size --- 0 x 0 is just a request to remove the active basis. */ const CWSB *cwsb = dynamic_cast(ws) ; if (!cwsb) { handler_->message(ODSI_NOTODWSB,messages_) << "Coin" ; return (false) ; } int varcnt = cwsb->getNumStructural() ; int concnt = cwsb->getNumArtificial() ; if (varcnt == 0 && concnt == 0) { # if ODSI_TRACK_ACTIVE > 0 std::cout << "ODSI(" << std::hex << this << ")::setWarmStart: deleting active basis " << activeBasis.basis << std::dec << " (0x0 CWSB)." << std::endl ; # endif delete activeBasis.basis ; activeBasis.basis = 0 ; activeBasis.condition = ODSI::basisNone ; activeBasis.balance = 0 ; return (true) ; } /* The basis should not be larger than the problem. */ if (!(varcnt <= getNumCols() && concnt <= getNumRows())) { handler_->message(ODSI_ODWSBBADSIZE,messages_) << concnt << varcnt << getNumRows() << getNumCols() ; return (false) ; } /* Use a dynamic cast to see if we have an OsiDylpWarmStartBasis. If not, make one. */ const OsiDylpWarmStartBasis *wsb ; bool ourBasis = false ; wsb = dynamic_cast(ws) ; if (!wsb) { wsb = new OsiDylpWarmStartBasis(*cwsb) ; ourBasis = true ; } # if ODSI_PARANOIA >= 2 wsb->checkBasis(messageHandler()) ; # endif /* Do we have an lpprob structure yet? If not, construct one. */ assert(consys && consys->vlb && consys->vub) ; if (!lpprob) construct_lpprob() ; /* Extract the info in the warm start object and install it in lpprob. */ setBasisInLpprob(wsb,lpprob) ; /* And we're done. The new status and basis are installed in lpprob, and the x, y, and actvars arrays have been resized if needed. Set the phase, signal a warm start, and then we're done. */ assert(resolveOptions) ; resolveOptions->forcecold = false ; resolveOptions->forcewarm = true ; /* One last thing --- make a copy of wsb to be the active basis (that is, unless wsb is the active basis, and we're simply installing it in lpprob). If we already have a copy, so much the better. */ if (wsb != dynamic_cast(activeBasis.basis)) { # if ODSI_TRACK_ACTIVE > 0 std::cout << "ODSI(" << std::hex << this << ")::setWarmStart: replacing active basis " << activeBasis.basis << " with " ; # endif delete activeBasis.basis ; if (ourBasis == false) { activeBasis.basis = wsb->clone() ; } else { activeBasis.basis = const_cast(wsb) ; ourBasis = false ; } # if ODSI_TRACK_ACTIVE > 0 std::cout << activeBasis.basis << std::dec << "." << std::endl ; # endif activeBasis.condition = ODSI::basisFresh ; activeBasis.balance = 0 ; } if (ourBasis == true) delete wsb ; return (true) ; } void ODSI::resolve () /* Grossly oversimplified, this routine calls dylp after making sure that the forcecold option is turned off. But we do need to make sure the solver is ours to use, and there's some state to maintain. If we're reoptimising, then the basis should be ready and we should have warm start information. For our purposes here, that boils down to the presence of an active basis (created by setWarmStart() or a recent call to the solver). Note that we don't actually force a warm start unless we install the active basis here. Similarly, setWarmStart will force a warm start. But if we have an unmodified active basis, dylp should be able to manage a hot start. */ { CoinMessageHandler *hdl = messageHandler() ; assert(lpprob && lpprob->basis && lpprob->status && consys && resolveOptions && tolerances) ; /* Does some other ODSI object own the solver? If so, detach it. If we don't own the solver, we surely don't have retained data structures. */ ODSI *dylp_owner = static_cast(dy_getOwner()) ; if (dylp_owner != this && dylp_owner != 0) { dylp_owner->detach_dylp() ; dylp_owner = 0 ; } /* We're reoptimising, so you might ask ``Why should we need to initialise the basis?''. Consider this scenario: we've optimised with ODSI object1, and captured a warm start. Then we destroy object1, create object2, install the warm start, and call resolve(). That's why we need to do this. The second parameter controls how many basis updates the basis can hold before it requires refactoring. Adding 5 to dylp's refactor interval should give a safety margin. */ if (basis_ready == false) { int count = static_cast((1.5*getNumRows()) + 2*getNumCols()) ; dy_initbasis(count,initialSolveOptions->factor+5,0) ; basis_ready = true ; } /* We can hope that the active basis is already installed in the lpprob, but there are several circumstances to trap for here: * The user has modified the constraint system since the last call to dylp. Depending on the modifications, the basis may be useable (basisModified) or it may need some patching (basisDamaged). setWarmStart can handle everything except a damaged basis with excess basic variables; for this we'll call a helper (reduceActiveBasis) first. * The solver has been used by some other ODSI object since the last call by this object. In this case, we've just done a detach_dylp() and dylp_owner will be null. Again, we need to install the active basis (which may be modified or damaged). If we have an active basis, install it and force dylp to warm start. If the installation fails, remove activeBasis and throw. */ if (activeBasis.condition == ODSI::basisNone) { throw CoinError("Warm start failed --- no active basis.", "resolve","OsiDylpSolverInterface") ; } else if (dylp_owner == 0 || activeBasis.condition != ODSI::basisFresh) { if (activeBasis.condition == ODSI::basisDamaged && activeBasis.balance > 0) { reduceActiveBasis() ; } if (setWarmStart(activeBasis.basis) == false) { # if ODSI_TRACK_ACTIVE > 0 std::cout << "ODSI(" << std::hex << this << ")::resolve: deleting basis " << activeBasis.basis << std::dec << "." << std::endl ; # endif delete activeBasis.basis ; activeBasis.basis = 0 ; activeBasis.condition = ODSI::basisNone ; activeBasis.balance = 0 ; throw CoinError("Warm start failed --- invalid active basis.", "resolve","OsiDylpSolverInterface") ; } resolveOptions->forcewarm = true ; } /* Choose options appropriate for reoptimising and go to it. Phase is not crucial here --- dylp will sort it out as it starts. */ assert(resolveOptions->forcecold == false) ; dyphase_enum phase = lpprob->phase ; if (!(phase == dyPRIMAL1 || phase == dyPRIMAL2 || phase == dyDUAL)) lpprob->phase = dyINV ; lp_retval = do_lp(startWarm,resolve_gtxecho) ; /* Separate the failure cases from the successful cases. lpITERLIM is considered ok in warm and hot start (in particular, for strong branching). Since we can't tell from here, include it in the successes. */ # ifdef ODSI_INFOMSGS hdl->message(ODSI_WARM,messages_) << dy_prtlpret(lp_retval) << getObjSense()*(lpprob->obj) << lpprob->iters << CoinMessageEol ; # endif bool lpOK ; if ((lp_retval == lpOPTIMAL || lp_retval == lpINFEAS || lp_retval == lpUNBOUNDED || lp_retval == lpITERLIM)) { lpOK = true ; } else { lpOK = false ; } /* Trash the cached solution. This needs to happen regardless of how the lp turned out. It needs to be done ahead of getWarmStart, which will try to access reduced costs. We should only need to empty the solution vectors, not the structural vectors. */ destruct_col_cache(false) ; destruct_row_cache(false) ; /* Tidy up. If all went well, indicate this object owns the solver, set the objective, and set the active basis. If we've failed, do the opposite. Note that we have to remove any current active basis first, or getWarmStart will hand it back to us. Any of lpOPTIMAL, lpINFEAS, or lpUNBOUNDED can (in theory) be hot started after allowable problem modifications, hence can be flagged lpctlDYVALID. dylp overloads lpprob->obj with the index of the unbounded variable when returning lpUNBOUNDED, so we need to fake the objective. */ # if ODSI_TRACK_ACTIVE > 0 std::cout << "ODSI(" << std::hex << this << ")::resolve: deleting active basis " << activeBasis.basis << std::dec << "." << std::endl ; # endif delete activeBasis.basis ; activeBasis.basis = 0 ; activeBasis.condition = ODSI::basisNone ; activeBasis.balance = 0 ; if (lpOK) { # ifdef ODSI_INFOMSGS hdl->message(ODSI_ATTACH,messages_) << "resolve" << (int) reinterpret_cast(this) << CoinMessageEol ; # endif if (lpprob->lpret == lpUNBOUNDED) { _objval = -getObjSense()*getInfinity() ; } else { _objval = getObjSense()*lpprob->obj ; } activeBasis.basis = this->getWarmStart() ; activeBasis.condition = ODSI::basisFresh ; activeBasis.balance = 0 ; # if ODSI_TRACK_ACTIVE > 0 std::cout << "ODSI(" << std::hex << this << ")::resolve: setting active basis " << activeBasis.basis << std::dec << "." << std::endl ; # endif resolveOptions->forcewarm = false ; } return ; } //@} // WarmStart /*! \defgroup HotStartMethods Hot Start Methods \brief Methods for solving an LP from a hot start. The restrictions on problem modification outlined in the OSI documentation are somewhat relaxed in dylp: you can change upper or lower bounds on variables, upper or lower bounds on constraints, or objective function coefficients. No changes to the coefficient matrix are allowed --- for this, you need to drop back to a warm start. Philosophically, the guiding principle is to avoid the need to refactor the basis before resuming pivoting. To dylp, a hot start is simply a resumption of pivoting under the assumption that the data structures left from the previous call are unchanged, modulo the modifications permitted in the previous paragraph. There is no native hot start object. This is not sufficient to provide the semantics required of markHotStart() and solveFromHotStart(). In particular, if several ODSI objects are sharing the dylp solver, they will interfere with one another. To hide this behaviour from the client, ODSI provides a fall back method along the lines described in the OSI documentation. markHotStart() captures a warm start object. If a hot start is possible, according to dylp's notion of hot start, this object will not be used. If solveFromHotStart() determines that intervening use of the solver by some other ODSI object has made it impossible to perform a hot start for this object, it will automatically fall back to a warm start using the object captured by markHotStart(). unmarkHotStart() simply deletes the warm start object captured by markHotStart(). */ //@{ /*! This routine sets options in the ODSI object so that dylp will attempt a hot start at each call of \link OsiDylpSolverInterface::solveFromHotStart ODSI::solveFromHotStart \endlink. */ inline void ODSI::markHotStart () { /* If we're attempting this, then it should be true that this OSI object owns the solver, has successfully solved an lp, and has left dylp's data structures intact. Should be, but who knows where dylp's been in the meantime. Applications written to a generic OSI interface don't tend to worry about these niceties. If we don't own the solver, try for a resolve. */ if (dy_getOwner() != this || flgoff(lpprob->ctlopts,lpctlDYVALID)) { resolve() ; } assert(lpprob && resolveOptions) ; assert(flgon(lpprob->ctlopts,lpctlDYVALID)) ; /* Turn off the forcecold and forcewarm options, allowing a hot start. */ resolveOptions->forcecold = false ; resolveOptions->forcewarm = false ; /* Capture a warm start object, in case some other ODSI object uses the solver between hot starts by this ODSI object. */ if (hotstart_fallback) delete hotstart_fallback ; hotstart_fallback = getWarmStart() ; return ; } /*! Usually, this routine simply calls the solver. For dylp's model of hot start, that's all that's required. If some other ODSI object has grabbed the solver in the meantime, fall back to a warm start using the object captured by markHotStart(). */ void ODSI::solveFromHotStart () { /* If some other ODSI object has used the solver, then fall back to a warm start. Similarly, if the last call to dylp failed and the solver does not hold retained data structures, we need to fall back to a warm start. Throw an error if there's no warm start object to fall back on. (The throw message lies a little, for the benefit of users who haven't checked the details of the code.) */ if (dy_getOwner() != this || flgoff(lpprob->ctlopts,lpctlDYVALID)) { if (hotstart_fallback && setWarmStart(hotstart_fallback)) { resolve() ; } else { throw CoinError("Hot start failed --- invalid/missing hot start object.", "solveFromHotStart","OsiDylpSolverInterface") ; } return ; } /* If no other ODSI object has used the solver, all we need to do is check the iteration limit. The basis should be ready. Note that dylp does need to know what's changed: any of bounds, rhs & rhslow, or objective. The various routines that make these changes set the flags. */ int tmp_iterlim = -1 ; int hotlim ; assert(lpprob && lpprob->basis && lpprob->status && basis_ready && consys && resolveOptions && tolerances) ; /* Phase can be anything except dyDONE, which will cause dylp to free data structures and return. */ lpprob->phase = dyINV ; getIntParam(OsiMaxNumIterationHotStart,hotlim) ; if (hotlim > 0) { tmp_iterlim = resolveOptions->iterlim ; resolveOptions->iterlim = (hotlim/3 > 0)?hotlim/3:1 ; } lp_retval = do_lp(startHot,resolve_gtxecho) ; # ifdef ODSI_INFOMSGS CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_HOT,messages_) << dy_prtlpret(lp_retval) << getObjSense()*(lpprob->obj) << lpprob->iters << CoinMessageEol ; # endif /* Separate the failure cases from the successful cases. lpITERLIM is considered ok in warm and hot start (in particular, for strong branching). Since we can't tell from here, include it in the successes. */ bool lpOK ; if ((lp_retval == lpOPTIMAL || lp_retval == lpINFEAS || lp_retval == lpUNBOUNDED || lp_retval == lpITERLIM)) { lpOK = true ; } else { lpOK = false ; } /* Trash the cached solution. This needs to happen regardless of how the lp turned out. It needs to be done ahead of getWarmStart, which will try to access reduced costs. We should only need to empty the solution vectors, not the structural vectors. */ destruct_col_cache(false) ; destruct_row_cache(false) ; /* Tidy up. If all went well, set the objective and the active basis. Note that we have to remove any current active basis first, or getWarmStart will hand it back to us. dylp overloads lpprob->obj with the index of the unbounded variable when returning lpUNBOUNDED, so we need to fake the objective. */ # if ODSI_TRACK_ACTIVE > 0 std::cout << "ODSI(" << std::hex << this << ")::solveFromHotStart: deleting active basis " << activeBasis.basis << std::dec << "." << std::endl ; # endif delete activeBasis.basis ; activeBasis.basis = 0 ; activeBasis.condition = ODSI::basisNone ; activeBasis.balance = 0 ; if (lpOK) { if (lpprob->lpret == lpUNBOUNDED) { _objval = -getObjSense()*getInfinity() ; } else { _objval = getObjSense()*lpprob->obj ; } activeBasis.basis = this->getWarmStart() ; activeBasis.condition = ODSI::basisFresh ; # if ODSI_TRACK_ACTIVE > 0 std::cout << "ODSI(" << std::hex << this << ")::solveFromHotStart: setting active basis " << activeBasis.basis << std::dec << "." << std::endl ; # endif } if (tmp_iterlim > 0) resolveOptions->iterlim = tmp_iterlim ; return ; } inline void ODSI::unmarkHotStart () /* Nothing to do here but to destroy the fall back warm start object. */ { if (hotstart_fallback) { delete hotstart_fallback ; hotstart_fallback = 0 ; } return ; } //@} // HotStartMethods /*! \defgroup DebugMethods Debugging Methods */ //@{ /*! Because dylp retains information in the solver, the current solver state may need to be preserved around the activation of the row cut debugger. The problem arises because the row cut debugger clones the solver object and uses it to solve an lp; this destroys the retained state and transfers ownership of the solver to the clone. To preserve the solver state around debugger activation, we need to create a warm start object and then restore it after activating the debugger. activateRowCutDebugger tries to make an informed guess as to whether to preserve state. The condition is that some object owns the solver (not necessarily this object) and that the lpprob for that object exists and indicates preserved state in the solver. This is conservative --- it's more likely that the previous owner is no longer interested but was never detached. It's also conservative in the sense that unless the row cut debugger recognizes the model name, it won't activate. See activateRowCutDebugger(const double*) if you have a model the debugger doesn't already know about. */ void ODSI::activateRowCutDebugger (const char *modelName) { delete rowCutDebugger_ ; ODSI *dylp_owner = static_cast(dy_getOwner()) ; if (dylp_owner && dylp_owner->lpprob && flgon(dylp_owner->lpprob->ctlopts,lpctlDYVALID)) { CoinWarmStart *ws = dylp_owner->getWarmStart() ; ODSI *prev_owner = dylp_owner ; prev_owner->detach_dylp() ; rowCutDebugger_ = new OsiRowCutDebugger(*this,modelName) ; prev_owner->setWarmStart(ws) ; prev_owner->resolve() ; delete ws ; } else { rowCutDebugger_ = new OsiRowCutDebugger(*this,modelName) ; } return ; } /*! Activate the row cut debugger for a model that's not one of the models known to the debugger. You must provide a full solution vector, but only the integer variables will be checked. See also the comments for activateRowCutDebugger(const char*). */ void ODSI::activateRowCutDebugger (const double *solution, bool keepContinuous) { delete rowCutDebugger_ ; ODSI *dylp_owner = static_cast(dy_getOwner()) ; if (dylp_owner && dylp_owner->lpprob && flgon(dylp_owner->lpprob->ctlopts,lpctlDYVALID)) { CoinWarmStart *ws = dylp_owner->getWarmStart() ; ODSI *prev_owner = dylp_owner ; prev_owner->detach_dylp() ; rowCutDebugger_ = new OsiRowCutDebugger(*this,solution,keepContinuous) ; prev_owner->setWarmStart(ws) ; prev_owner->resolve() ; delete ws ; } else { rowCutDebugger_ = new OsiRowCutDebugger(*this,solution,keepContinuous) ; } return ; } # if ODSI_PARANOIA >= 1 /*! This routine will check that the index passed as a parameter is a valid variable (isCol == true) or constraint (isCol == false) index and throw an error if it's out of bounds. The index is assumed to be zero-based, which is appropriate for indices specified by an ODSI client. This routine must be active (i.e., ODSI_PARANOIA must be 1 or greater) in order for OsiCbc(dylp) to pass the OsiCbc unit test. */ inline void ODSI::indexCheck (int k, bool isCol, std::string rtnnme) { std::string message ; if (!consys) { message = "No constraint system!" ; throw CoinError(message,rtnnme,"OsiDylpSolverInterface") ; } int m = getNumRows() ; int n = getNumCols() ; if (isCol) { if (0 > k || k > n) { message = "Column index out of range!" ; throw CoinError(message,rtnnme,"OsiDylpSolverInterface") ; } } else { if (0 > k || k > m) { message = "Row index out of range!" ; throw CoinError(message,rtnnme,"OsiDylpSolverInterface") ; } } return ; } #endif //@} // DebugMethods /*! \defgroup DylpMethods Dylp-Specific Methods */ //@{ /*! Process a dylp options (.spc) file. \param name file name \param silent true to suppress command echo \param mustexist true (default) if the file must exist This is imperfect (to say the least) as one often wants different settings for the initial call to the solver vs. subsequent calls to reoptimize. */ void ODSI::dylp_controlfile (const char *name, const bool silent, const bool mustexist) { if (name == 0 || *name == 0) return ; string mode = (mustexist)?"r":"q" ; ioid cmdchn = dyio_openfile(name,mode.c_str()) ; if (!(cmdchn == IOID_INV || cmdchn == IOID_NOSTRM)) { dyio_setmode (cmdchn, 'l') ; bool r UNUSED = (dy_processcmds(cmdchn,silent, initialSolveOptions,tolerances) != 0) ; (void) dyio_closefile(cmdchn) ; cmdchn = IOID_NOSTRM ; assert(r == cmdOK) ; /* Copy user settings into resolveOptions, except for forcecold and fullsys. */ lpopts_struct saveOptions = *resolveOptions ; memcpy(resolveOptions,initialSolveOptions,sizeof(lpopts_struct)); resolveOptions->forcecold = saveOptions.forcecold ; resolveOptions->fullsys = saveOptions.fullsys ; } return ; } /*! Establish a log (.log) file. \param name file name \param echo true to echo log messages to the terminal */ void ODSI::dylp_logfile (const char *name, bool echo) { if (name == 0 || *name == 0) return ; string lognme = make_filename(name,".mps",".log") ; local_logchn = dyio_openfile(lognme.c_str(),"w") ; if (local_logchn == IOID_INV) { local_logchn = IOID_NOSTRM ; } else { (void) dyio_chgerrlog(lognme.c_str(),echo) ; } initial_gtxecho = echo ; resolve_gtxecho = echo ; return ; } /*! Establish an output (.out) file. \param name file name */ void ODSI::dylp_outfile (const char *name) { if (name == 0 || *name == 0) return ; string outnme = make_filename(name,".mps",".out") ; local_outchn = dyio_openfile(outnme.c_str(),"w") ; if (local_outchn == IOID_INV) local_outchn = IOID_NOSTRM ; return ; } /*! Print the solution and/or statistics to the output file. \param wantSoln true to print the lp solution \param wantStats true to print execution statistics for the lp */ void ODSI::dylp_printsoln (bool wantSoln, bool wantStats) { if (dyio_isactive(local_outchn)) { if (wantStats) dy_dumpstats(local_outchn,false,statistics,consys) ; if (wantSoln) dy_dumpcompact(local_outchn,false,lpprob,false) ; } return ; } //@} // DylpMethods /*! \defgroup NameMethods Methods for row and column names The primary reason for overriding the set methods associated with names is so that we can make sure dylp and OSI are holding the same names. */ //@{ /*! Set the objective function name. */ void ODSI::setObjName (std::string name) { OSI::setObjName(name) ; consys_chgnme(consys,'o',0,name.c_str()) ; } /*! Set a row name. Make sure both dylp and OSI see the same name. */ void ODSI::setRowName (int ndx, std::string name) { int nameDiscipline ; /* Quietly do nothing if the index is out of bounds. */ if (ndx < 0 || ndx >= getNumRows()) { return ; } /* Get the name discipline. Quietly do nothing if it's auto. */ (void) getIntParam(OsiNameDiscipline,nameDiscipline) ; if (nameDiscipline == 0) { return ; } /* Set the name in the OSI base, then in the consys structure. */ OSI::setRowName(ndx,name) ; consys_chgnme(consys,'c',idx(ndx),name.c_str()) ; return ; } /*! Set a column name. Make sure both dylp and OSI see the same name. */ void ODSI::setColName (int ndx, std::string name) { int nameDiscipline ; /* Quietly do nothing if the index is out of bounds. */ if (ndx < 0 || ndx >= getNumCols()) { return ; } /* Get the name discipline. Quietly do nothing if it's auto. */ (void) getIntParam(OsiNameDiscipline,nameDiscipline) ; if (nameDiscipline == 0) { return ; } /* Set the name in the OSI base, then in the consys structure. */ OSI::setColName(ndx,name) ; consys_chgnme(consys,'v',idx(ndx),name.c_str()) ; return ; } //@} DyLP-1.10.4/DyLP/src/OsiDylp/OsiDylpWarmStartBasis.hpp0000644000175200017520000002161411507440660020767 0ustar coincoin#ifndef OsiDylpWarmStartBasis_H #define OsiDylpWarmStartBasis_H /*! \legal Copyright (C) 2003 -- 2007 Lou Hafer, International Business Machines Corporation and others. All Rights Reserved. This file is a portion of the COIN/OSI interface for dylp and is licensed under the terms of the Eclipse Public License (EPL) */ /*! \file OsiDylpWarmStartBasis.hpp \brief Declaration of the warm start class for dylp. */ /* sccs: @(#)OsiDylpWarmStartBasis.hpp 1.5 09/16/04 cvs: $Id: OsiDylpWarmStartBasis.hpp 1408 2009-10-04 10:27:59Z stefan $ */ #include "CoinWarmStartBasis.hpp" class CoinMessageHandler; #define DYLP_INTERNAL extern "C" { #include "dylp.h" } /*! \class OsiDylpWarmStartBasis \brief The dylp warm start class This derived class is necessary because dylp by default works with a subset of the full constraint system. The warm start object needs to contain a list of the active constraints in addition to the status information included in CoinWarmStartBasis. It is also convenient to include the solver phase in the warm start object. */ class OsiDylpWarmStartBasis : public CoinWarmStartBasis { public: /*! \name Methods to get and set basis information. Methods for structural and artificial variables are inherited from CoinWarmStartBasis. Constraint status is coded using the CoinWarmStartBasis::Status codes. Active constraints are coded as atLowerBound, inactive as isFree. */ //@{ /*! \brief Return the number of active constraints */ int numberActiveConstraints() const ; /*! \brief Return the status of the specified constraint. */ inline Status getConStatus (int i) const { const int st = (constraintStatus_[i>>2] >> ((i&3)<<1)) & 3 ; return (static_cast(st)) ; } /*! \brief Set the status of the specified constraint */ inline void setConStatus (int i, Status st) { char &st_byte = constraintStatus_[i>>2] ; st_byte = static_cast(st_byte & ~(3 << ((i&3)<<1))) ; st_byte = static_cast(st_byte | (st << ((i&3)<<1))) ; } /*! \brief Return the status array for constraints. */ inline char *getConstraintStatus () { return (constraintStatus_) ; } /** \c const overload for \link OsiDylpWarmStartBasis::getConstraintStatus() getConstraintStatus() \endlink */ inline const char *getConstraintStatus () const { return (constraintStatus_) ; } /*! \brief Set the lp phase for this basis */ inline void setPhase (dyphase_enum phase) { phase_ = phase ; } /*! \brief Get the lp phase for this basis. */ inline dyphase_enum getPhase () const { return (phase_) ; } //@} /*! \name Basis `diff' methods */ //@{ /*! \brief Generate a `diff' that can convert oldBasis to this basis. */ CoinWarmStartDiff *generateDiff (const CoinWarmStart *const oldCWS) const ; /*! \brief Apply \p diff to this basis */ void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ; //@} /*! \name Methods to modify the warm start object */ //@{ /*! \brief Set basis capacity; existing basis is discarded */ void setSize (int ns, int na) ; /*! \brief Set basis capacity; existing basis is maintained */ void resize (int numRows, int numCols) ; /*! \brief Delete a set of rows from the basis \warning This routine assumes that the set of indices to be deleted is sorted in ascending order and is free from duplicates. Use deleteRows if this is not guaranteed. \warning The resulting basis is guaranteed valid only if all deleted constraints are slack (hence the associated logicals are basic). */ void compressRows (int tgtCnt, const int *tgts) ; /*! \brief Delete a set of rows from the basis \warning The resulting basis is guaranteed valid only if all deleted constraints are slack (hence the associated logicals are basic). */ void deleteRows (int number, const int *which) ; /** \brief Merge entries from a source basis into this basis. \warning It's the client's responsibility to ensure validity of the merged basis, if that's important to the application. The vector xferCols (xferRows) specifies runs of entries to be taken from the source basis and placed in this basis. Each entry is a CoinTriple, with first specifying the starting source index of a run, second specifying the starting destination index, and third specifying the run length. */ virtual void mergeBasis(const CoinWarmStartBasis *src, const XferVec *xferRows, const XferVec *xferCols) ; //@} /*! \name Constructors, destructors, and related functions */ //@{ /*! \brief Default constructor (empty object) */ OsiDylpWarmStartBasis () ; /*! \brief Constructs a warm start object with the specified status arrays */ OsiDylpWarmStartBasis (int ns, int na, const char *sStat, const char *aStat, const char *cStat = 0) ; /*! \brief Construct an OsiDylpWarmStartBasis from a CoinWarmStartBasis */ OsiDylpWarmStartBasis (const CoinWarmStartBasis &cwsb) ; /*! \brief Copy constructor */ OsiDylpWarmStartBasis (const OsiDylpWarmStartBasis &ws) ; /*! \brief `Virtual constructor' */ CoinWarmStart *clone () const ; /*! \brief Destructor */ ~OsiDylpWarmStartBasis () ; /*! \brief Assignment */ OsiDylpWarmStartBasis& operator= (const OsiDylpWarmStartBasis &rhs) ; /*! \brief Assign the status vectors to be the warm start information */ void assignBasisStatus (int ns, int na, char *&sStat, char *&aStat, char *&cStat) ; /*! \brief Assign the status vectors to be the warm start information */ void assignBasisStatus (int ns, int na, char *&sStat, char *&aStat) ; //@} /*! \name Miscellaneous methods */ //@{ /*! \brief Prints in readable format (for debug) */ void print () const ; /*! \brief Performs basis consistency checks (for debug) */ void checkBasis (CoinMessageHandler* msghandler = NULL) const ; //@} private: /*! \name Constraint status private data members */ //@{ dyphase_enum phase_ ; ///< dylp phase char *constraintStatus_ ; ///< vector of constraint status information //@} } ; /*! \class OsiDylpWarmStartBasisDiff \brief A `diff' between two OsiDylpWarmStartBasis objects This class exists in order to hide from the world the details of calculating and representing a `diff' between two OsiDylpWarmStartBasis objects. For convenience, assignment, cloning, and deletion are visible to the world, and default and copy constructors are visible to derived classes. Knowledge of the rest of this structure, and of generating and applying diffs, is restricted to the functions OsiDylpWarmStartBasis::generateDiff() and OsiDylpWarmStartBasis::applyDiff(). The actual data structure is a pair of unsigned int vectors, #diffNdxs_ and #diffVals_, and a CoinWarmStartBasisDiff object. \todo This is a pretty generic structure, and vector diff is a pretty generic activity. We should be able to convert this to a template. \todo Using unsigned int as the data type for the diff vectors might help to contain the damage when this code is inevitably compiled for 64 bit architectures. But the notion of int as 4 bytes is hardwired into CoinWarmStartBasis, so changes are definitely required. */ class OsiDylpWarmStartBasisDiff : public CoinWarmStartBasisDiff { public: /*! \brief `Virtual constructor' */ virtual CoinWarmStartDiff *clone() const { OsiDylpWarmStartBasisDiff *odwsbd = new OsiDylpWarmStartBasisDiff(*this) ; return (dynamic_cast(odwsbd)) ; } /*! \brief Assignment */ virtual OsiDylpWarmStartBasisDiff &operator= (const OsiDylpWarmStartBasisDiff &rhs) ; /*! \brief Destructor */ virtual ~OsiDylpWarmStartBasisDiff() { delete[] condiffNdxs_ ; delete[] condiffVals_ ; } private: friend CoinWarmStartDiff *OsiDylpWarmStartBasis::generateDiff (const CoinWarmStart *const oldCWS) const ; friend void OsiDylpWarmStartBasis::applyDiff (const CoinWarmStartDiff *const diff) ; /*! \brief Standard constructor */ OsiDylpWarmStartBasisDiff (int sze, const unsigned int *const diffNdxs, const unsigned int *const diffVals, const CoinWarmStartBasisDiff *const cwsbd) ; /*! \brief Default constructor */ OsiDylpWarmStartBasisDiff () : CoinWarmStartBasisDiff(), consze_(0), condiffNdxs_(0), condiffVals_(0) { /* intentionally left blank */ } /*! \brief Copy constructor For convenience when copying objects containing OsiDylpWarmStartBasisDiff objects. But consider whether you should be using #clone() to retain polymorphism. */ OsiDylpWarmStartBasisDiff (const OsiDylpWarmStartBasisDiff &odwsbd) ; /* Data members */ /*! \brief Number of entries (and allocated capacity), in units of \c int. */ int consze_ ; /*! \brief Array of diff indices for constraint status */ unsigned int *condiffNdxs_ ; /*! \brief Array of diff values for constraint status */ unsigned int *condiffVals_ ; } ; #endif // OsiDylpWarmStartBasis_H DyLP-1.10.4/DyLP/src/OsiDylp/OsiDylpMessages.hpp0000644000175200017520000000312311507440660017623 0ustar coincoin#ifndef OsiDylpMessages_H #define OsiDylpMessages_H /*! \legal Copyright (C) 2004 -- 2007 Lou Hafer, International Business Machines Corporation and others. All Rights Reserved. This file is a portion of the COIN/OSI interface for dylp and is licensed under the terms of the Eclipse Public License (EPL) */ /* sccs: @(#)OsiDylpMessages.hpp 1.5 09/16/04 cvs: $Id: OsiDylpMessages.hpp 1312 2008-10-10 00:26:32Z lou $ */ #include "CoinMessageHandler.hpp" /* Enum used to specify ODSI messages to the message handler. There is no need for the order here to match the order of message definition in OsiDylpMessages.cpp, but all enum values must be here. ODSI_DUMMY_END must be last, however. */ typedef enum { ODSI_TEST_MSG, ODSI_MPSFILEIO, ODSI_UNSUPFORCEDO, ODSI_IGNOREDHINT, ODSI_EMPTYODWSB, ODSI_NOTODWSB, ODSI_ODWSBBADSIZE, ODSI_ODWSBBADSTATUS, ODSI_ODWSBSHORTBASIS, ODSI_CWSBREJECT, ODSI_PRESOL_STATS, ODSI_PRESOL_PASS, ODSI_POSTSOL, ODSI_POSTSOL_ACT, ODSI_COLD, ODSI_WARM, ODSI_HOT, ODSI_ALLDYLP, ODSI_ATTACH, ODSI_DETACH, ODSI_NOSOLVE, ODSI_FAILEDCALL, ODSI_ACCESS_STALE, ODSI_SHORTSTATS, ODSI_CONFUSION, ODSI_TABLEAU_INIT_FAIL, ODSI_NOTOWNER, ODSI_NOTOPTIMAL, ODSI_NOTVALID, ODSI_NOTFULLSYS, ODSI_NOTSIMPLEX, ODSI_BADSTATE, ODSI_BADACTIVEBASIS, ODSI_DUMMY_END } OsiDylpMessageID_enum ; #endif /* OsiDylpMessages_H */ DyLP-1.10.4/DyLP/src/OsiDylp/Makefile.in0000644000175200017520000005520512506276701016117 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 # Lou Hafer SFU many modifications since srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = src/OsiDylp DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_c_add_to_includes.m4 \ $(top_srcdir)/m4/ac_c_get_sunpro_libs.m4 \ $(top_srcdir)/m4/ac_dylp_equiv_for_cpp_bool.m4 \ $(top_srcdir)/m4/ac_dylp_find_fp_funcs.m4 \ $(top_srcdir)/m4/ac_dylp_fix_cppflags.m4 \ $(top_srcdir)/m4/ac_dylp_options.m4 \ $(top_srcdir)/m4/ac_osidylp_options.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/DylpStdLib/config.h \ $(top_builddir)/src/DylpStdLib/config_dylp.h CONFIG_CLEAN_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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiDylp_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) \ @DEPENDENCY_LINKING_TRUE@ ../Dylp/libDylp.la am_libOsiDylp_la_OBJECTS = OsiDylpMessages.lo OsiDylpPresolve.lo \ OsiDylpSimplex.lo OsiDylpSolverInterface.lo \ OsiDylpWarmStartBasis.lo libOsiDylp_la_OBJECTS = $(am_libOsiDylp_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiDylp_la_SOURCES) DIST_SOURCES = $(libOsiDylp_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_OSITESTS_FALSE = @COIN_HAS_OSITESTS_FALSE@ COIN_HAS_OSITESTS_TRUE = @COIN_HAS_OSITESTS_TRUE@ COIN_HAS_OSI_FALSE = @COIN_HAS_OSI_FALSE@ COIN_HAS_OSI_TRUE = @COIN_HAS_OSI_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ DYLPLIB_LIBS = @DYLPLIB_LIBS@ DYLPLIB_LIBS_INSTALLED = @DYLPLIB_LIBS_INSTALLED@ DYLPLIB_PCLIBS = @DYLPLIB_PCLIBS@ DYLP_ERRMSGDIR = @DYLP_ERRMSGDIR@ DYLP_SVN_REV = @DYLP_SVN_REV@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIDYLPLIB_CFLAGS = @OSIDYLPLIB_CFLAGS@ OSIDYLPLIB_CFLAGS_INSTALLED = @OSIDYLPLIB_CFLAGS_INSTALLED@ OSIDYLPLIB_DEPENDENCIES = @OSIDYLPLIB_DEPENDENCIES@ OSIDYLPLIB_LIBS = @OSIDYLPLIB_LIBS@ OSIDYLPLIB_LIBS_INSTALLED = @OSIDYLPLIB_LIBS_INSTALLED@ OSIDYLPLIB_PCLIBS = @OSIDYLPLIB_PCLIBS@ OSIDYLPLIB_PCREQUIRES = @OSIDYLPLIB_PCREQUIRES@ OSITESTS_CFLAGS = @OSITESTS_CFLAGS@ OSITESTS_CFLAGS_INSTALLED = @OSITESTS_CFLAGS_INSTALLED@ OSITESTS_DATA = @OSITESTS_DATA@ OSITESTS_DATA_INSTALLED = @OSITESTS_DATA_INSTALLED@ OSITESTS_DEPENDENCIES = @OSITESTS_DEPENDENCIES@ OSITESTS_LIBS = @OSITESTS_LIBS@ OSITESTS_LIBS_INSTALLED = @OSITESTS_LIBS_INSTALLED@ OSI_CFLAGS = @OSI_CFLAGS@ OSI_CFLAGS_INSTALLED = @OSI_CFLAGS_INSTALLED@ OSI_DATA = @OSI_DATA@ OSI_DATA_INSTALLED = @OSI_DATA_INSTALLED@ OSI_DEPENDENCIES = @OSI_DEPENDENCIES@ OSI_LIBS = @OSI_LIBS@ OSI_LIBS_INSTALLED = @OSI_LIBS_INSTALLED@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiDylp # ######################################################################## # Name of the library compiled in this directory. We want it installed in # $libdir lib_LTLIBRARIES = libOsiDylp.la # List all source files for this library, including headers libOsiDylp_la_SOURCES = \ OsiDylpMessages.cpp OsiDylpMessages.hpp \ OsiDylpPresolve.cpp \ OsiDylpSimplex.cpp \ OsiDylpSolverInterface.cpp OsiDylpSolverInterface.hpp \ OsiDylpWarmStartBasis.cpp OsiDylpWarmStartBasis.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiDylp_la_LIBADD = $(OSIDYLPLIB_LIBS) ../Dylp/libDylp.la # This is for libtool (on Windows) libOsiDylp_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../Dylp` \ -I`$(CYGPATH_W) $(srcdir)/../DylpStdLib` \ $(COINUTILS_CFLAGS) $(OSI_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/DylpStdLib ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ OsiDylpMessages.hpp \ OsiDylpSolverInterface.hpp \ OsiDylpWarmStartBasis.hpp 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiDylp/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiDylp/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 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiDylp.la: $(libOsiDylp_la_OBJECTS) $(libOsiDylp_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiDylp_la_LDFLAGS) $(libOsiDylp_la_OBJECTS) $(libOsiDylp_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiDylpMessages.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiDylpPresolve.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiDylpSimplex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiDylpSolverInterface.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiDylpWarmStartBasis.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: 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: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags 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-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ 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 uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # 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: DyLP-1.10.4/DyLP/src/OsiDylp/OsiDylpPresolve.cpp0000644000175200017520000010115712055734355017662 0ustar coincoin/* Copyright (C) 2004 -- 2007 Lou Hafer, International Business Machines Corporation and others. All Rights Reserved. This file is a portion of the COIN/OSI interface for dylp and is licensed under the terms of the Eclipse Public License (EPL) */ #ifdef _MSC_VER /* Turn off compiler warning about long names */ # pragma warning(disable:4786) #endif // _MSC_VER /* Cut name lengths for readability. */ #define ODSI OsiDylpSolverInterface /* \file OsiDylpPresolve.cpp \brief Implementation of `native' presolve for dylp using CoinPresolve. `Native' presolve for dylp. The basic outline, implemented within OsiDylpSolverInterface::initialSolve, is as follows:
  1. Create an empty CoinPresolve object and load it from the ODSI object. Implemented by OsiDylpSolverInterface::initialisePresolve.
  2. Apply the presolve transforms. Implemented by OsiDylpSolverInterface::doPresolve.
  3. Consider whether it's worth proceeding --- if presolve had little or no effect, better to bail now and save the effort of loading the presolved system, postsolving, and reloading the original system. Implemented by OsiDylpSolverInterface::evalPresolve.
  4. Save the current constraint system. Implemented by OsiDylpSolverInterface::saveOriginalSys.
  5. Load the presolved problem. Implemented by OsiDylpSolverInterface::installPresolve
  6. Run dylp (cold start).
  7. Create a postsolve object from the presolve object. Destroy the presolve object in the process, after transferring its CoinPrePostsolveMatrix component to the CoinPostsolveMatrix object. Implemented by CoinPostsolveMatrix::assignPresolveToPostsolve
  8. Load the postsolve object with the basis for the presolved problem. This is done by creating a warm start object and using it to set the status in the postsolve object. Implemented by CoinPrePostsolveMatrix::setStatus
  9. Apply the postsolve transforms to convert the basis back to the original system. It's worth mentioning here that the only reason that postsolve transforms the constraint system is to keep the bookkeeping straight --- you'll notice there's no provision to extract the constraint system from the postsolve object. Postsolve will also handle things like primal and dual solution, but OsiDylp makes a call to dylp that will recreate all of this. Implemented by OsiDylpSolverInterface::doPostsolve.
  10. Restore the saved constraint system. Make the postsolved basis the active basis. Destroy the postsolve object. Implemented by OsiDylpSolverInterface::installPostsolve.
  11. Run dylp (warm start). This is (well, should be) a trivial (no-pivot) execution, simply to set up dylp's data structures. Given various bits of information loss and numerical twitchiness, a few pivots is reasonable.
Memory consumption is a nontrivial issue here. Midway through step 5), we have the original consys, plus column- and row-major copies in preObj_, and we're building a new consys. Now I see why it's worthwhile to destroy chunks of the data in preObj_. Give this some attention. A thought concerning presolve for resolve(). Here, there's some utility in returning a basis that's suitably modified for the presolved problem, and we have an optimal basis to start from. But presumably presolve should not change the status of variables that remain. Why not wait until presolve is completed, and modify the basis based on the information in originalColumns_ and originalRows_. */ #include "OsiDylpSolverInterface.hpp" #include "OsiDylpWarmStartBasis.hpp" #include "OsiDylpMessages.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" namespace { char sccsid[] UNUSED = "@(#)OsiDylpPresolve.cpp 1.6 11/06/04" ; char cvsid[] UNUSED = "$Id: OsiDylpPresolve.cpp 1226 2008-05-02 21:15:58Z lou $" ; } #include "CoinPresolveEmpty.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveSingleton.hpp" #include "CoinPresolveDoubleton.hpp" #include "CoinPresolveTripleton.hpp" #include "CoinPresolveZeros.hpp" #include "CoinPresolveSubst.hpp" #include "CoinPresolveForcing.hpp" #include "CoinPresolveDual.hpp" #include "CoinPresolveTighten.hpp" #include "CoinPresolveUseless.hpp" #include "CoinPresolveDupcol.hpp" #include "CoinPresolveImpliedFree.hpp" #include "CoinPresolveIsolated.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 /* Debug stuff. This block covers the include and the namespace. */ #include "CoinPresolvePsdebug.hpp" #include "CoinPresolveMonitor.hpp" namespace { // Anonymous namespace for debug routines /* A control routine for debug checks --- keeps down the clutter in doPresolve. Each time it's called, it prints a list of transforms applied since the last call, then does the requested checks. Checks are controlled by two magic numbers: chkMtx: 1<<0 consistency of column- and row-major representations 1<<1 check column-major representation for duplicate entries 1<<2 check row-major representation for duplicate entries 1<<3 check column-major representation for explicit zero 1<<4 check row-major representation for explicit zero 1<<5 check column-major bulk storage management links 1<<6 check row-major bulk storage management links chkSol: 1<<0 check primal variables for NaN/Inf 1<<1 check primal variables for feasibility (variable bounds) 1<<2 check architectural variable status vs. solution and bounds 1<<3 also check row status vs. solution and bounds 1<<8 check constraint lhs for NaN/Inf 1<<9 check constraint lhs for accuracy, feasibility (row bounds) These will likely grow in the future. Matrix checks work only if PRESOLVE_CONSISTENCY is defined. Solution checks work only if PRESOLVE_DEBUG is defined. */ void check_and_tell (ioid chn, const CoinPresolveMatrix *preObj_, int chkMtx, int chkSol, const CoinPresolveAction *first, const CoinPresolveAction *&mark) { const CoinPresolveAction *current ; dyio_outfmt(chn,true,"PRESOLVE: ") ; if (first == 0 && mark == 0) { dyio_outfmt(chn,true,"checking prior to start.") ; } else if (first == mark) { dyio_outfmt(chn,true,"no transforms since last check.") ; } else { dyio_outfmt(chn,true,"applied") ; for (current = first ; current != mark && current != 0 ; current = current->next) { dyio_outfmt(chn,true," %s",current->name()) ; } mark = first ; } dyio_outfmt(chn,true,"\n") ; # if PRESOLVE_CONSISTENCY <= 0 chkMtx = 0 ; # endif # if PRESOLVE_DEBUG <= 0 chkSol = 0 ; # endif if (chkMtx&(1<<0)) { presolve_consistent(preObj_) ; } if (chkMtx&((1<<1)|(1<<2))) { bool chkCol = chkMtx&((1<<1)) ; bool chkRow = chkMtx&((1<<2)) ; presolve_no_dups(preObj_,chkCol,chkRow) ; } if (chkMtx&((1<<3)|(1<<4))) { bool chkCol = chkMtx&((1<<3)) ; bool chkRow = chkMtx&((1<<4)) ; presolve_no_zeros(preObj_,chkCol,chkRow) ; } if (chkMtx&((1<<5)|(1<<6))) { bool chkCol = chkMtx&((1<<5)) ; bool chkRow = chkMtx&((1<<6)) ; presolve_links_ok(preObj_,chkCol,chkRow) ; } /* As the routine is currently written, we need sol_ and colstat_ to do primal variable checks. In addition, we need acts_ to do constraint lhs checks. This could be more cleanly separated in presolve_check_sol with a bit of thought. */ if (chkSol) { bool colSolPresent = (preObj_->sol_ && preObj_->colstat_) ; bool rowActPresent = (preObj_->acts_) ; int chkColSol = 0 ; int chkRowAct = 0 ; int chkStatus = 0 ; if (colSolPresent) { chkColSol = chkSol&((1<<1)|(1<<0)) ; chkStatus = (chkSol&(0x3<<2))>>2 ; if (rowActPresent) { chkRowAct = (chkSol&((1<<8)|(1<<9)))>>8 ; } } if (chkColSol+chkStatus+chkRowAct > 0) { presolve_check_sol(preObj_,chkColSol,chkRowAct,chkStatus) ; } } return ; } } // end anonymous namespace for debug routines #endif // PRESOLVE_DEBUG || PRESOLVE_CONSISTENCY /* This routine creates and initializes the CoinPresolve object. keepIntegers: true to keep integer variable type information; false to treat all variables as continuous. */ CoinPresolveMatrix *ODSI::initialisePresolve (bool keepIntegers) { int m = getNumRows() ; int n = getNumCols() ; int numElems = getNumElements() ; CoinPresolveMatrix *preObj = new CoinPresolveMatrix(n,m,numElems) ; preObj->messageHandler()->setLogLevel(messageHandler()->logLevel()) ; const CoinPackedMatrix *pkMtx = getMatrixByCol() ; preObj->setMatrix(pkMtx) ; const double *dvec ; double val,exp ; dvec = getColLower() ; preObj->setColLower(dvec,-1) ; dvec = getColUpper() ; preObj->setColUpper(dvec,-1) ; dvec = getRowLower() ; preObj->setRowLower(dvec,-1) ; dvec = getRowUpper() ; preObj->setRowUpper(dvec,-1) ; dvec = getObjCoefficients() ; preObj->setCost(dvec,-1) ; val = getObjSense() ; preObj->setObjSense(val) ; getDblParam(OsiObjOffset,val) ; preObj->setObjOffset(val) ; getDblParam(OsiPrimalTolerance,val) ; exp = ((int) (.5 + log10((double) n))) - 2 ; if (exp > 0) { val *= pow(10.0,(double) exp) ; } preObj->setPrimalTolerance(val) ; preObj->setFeasibilityTolerance(1000*val) ; getDblParam(OsiDualTolerance,val) ; exp = ((int) (.5 + log10((double) m))) - 2 ; if (exp > 0) { val *= pow(10.0,(double) exp) ; } preObj->setDualTolerance(val) ; if (keepIntegers_) { unsigned char *variableType = new unsigned char [m] ; bool anyInteger = false ; for (int j = 0 ; j < m ; j++) { if (isInteger(j)) { variableType[j] = 1 ; anyInteger = true ; } else { variableType[j] = 0 ; } } preObj->setVariableType(variableType,n) ; preObj->setAnyInteger(anyInteger) ; delete[] variableType ; } else { preObj->setVariableType(false,n) ; preObj->setAnyInteger(false) ; } preObj->setAnyProhibited(false) ; return (preObj) ; } /* This routine orchestrates the application of presolve transforms to reduce the constraint system held in the presolve object (preObj_) to the presolved problem. Shamelessly adapted from OsiPresolve. Various comments questioning the wisdom of bits of code are scattered below. I've stripped the consistency checks so I can easily see structure while I'm composing the code. I will want to put them back in later. If I want to do that, I should consider moving them to CoinPresolveHelperFunctions.cpp or CoinPresolveDebug.cpp. */ void ODSI::doPresolve () { /* Status codes used by CoinPresolveMatrix. These really should be symbolic. Fake it here. */ const int feasibleStatus = 0 ; const int infeasibleStatus = 1 ; const int unboundedStatus = 2 ; /* Some definitions to make it easy to control the presolve transforms that are applied. Unless you're debugging, all of these should be true. */ const bool slackdoubleton = true ; const bool doubleton = true ; const bool tripleton = true ; const bool forcing = true ; const bool ifree = true ; const bool zerocost = true ; const bool dupcol = true ; const bool duprow = true ; const bool dual = true ; handler_->message(ODSI_PRESOL_STATS,messages_) << "Before presolve" << preObj_->getNumRows() << preObj_->getNumCols() << preObj_->getNumElems() << CoinMessageEol ; /* We start with no postsolve transforms. Assume we're feasible. */ postActions_ = 0 ; preObj_->setStatus(feasibleStatus) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 /* chkMtx and chkSol are magic numbers to control checks. See the documentation with check_and_tell. chkMtx is nonfunctional unless PRESOLVE_CONSISTENCY is defined. chkSol is nonfunctional unless PRESOLVE_DEBUG is defined. */ const CoinPresolveAction *dbgActionMark = 0 ; int chkMtx = 0x7f ; int chkSol = 0x10f ; check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif /* `Fix' variables before we get into the main transform loop. This transform physically removes from the problem variables that already have equal upper and lower bounds. */ postActions_ = make_fixed(preObj_,postActions_) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif /* Look for redundant constraints. This routine will use a greedy algorithm to identify a set of `necessary' constraints that imply tighter column bounds on variables. It will then use those tighter bounds to identify useless constraints where row activity cannot exceed the row bounds. */ postActions_ = testRedundant(preObj_,postActions_) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif /* If we have integer variables, skip the presolve checks based on dual values. I'm unconvinced that integrality forces us to skip these, but that's probably because my understanding of the dual presolve checks is incomplete. */ bool doDualStuff = (preObj_->anyInteger() == false && dual == true) ; /* If we're feasible, set up for the main presolve transform loop by putting all (non-prohibited) rows and columns on the ToDo lists. Track the reduction in size of the constraint system (lastDropped). Also, CoinPresolveMatrix maintains a pass number which is used to control transform activity. Initialise it to 0. */ if (preObj_->status() == feasibleStatus) { preObj_->initColsToDo() ; preObj_->initRowsToDo() ; int colCnt,rowCnt ; int colsDropped,rowsDropped ; int lastRowsDropped = 0 ; int lastColsDropped = 0 ; double rowShrink,colShrink ; preObj_->setPass(0) ; /* Open the main presolve transform loop. There are two phases to each iteration: a minor loop that does inexpensive presolve transforms until convergence, then a single application of the expensive transforms. */ int currentPass ; for (currentPass = 0 ; currentPass < passLimit_ ; currentPass++) { const CoinPresolveAction *const lastAction = postActions_ ; # if PRESOLVE_DEBUG > 0 dyio_outfmt(local_logchn,true,"Starting major pass %d\n",currentPass) ; # endif /* implied_free_action looks for a constraint i that implicitly bounds a variable x (think bounds tightening with arc consistency). If column j is singleton (sole nonzero coefficient is a) then row i and column j can be removed from the problem without complications. But if column j has two or more coefficients, complications ensue: we have to add multiples of row i to the other rows to eliminate x. fill_level puts an initial limit on the number of coefficients in a column. If there's exactly one other coefficient a, we can eliminate x from row k without fillin. After that, fillin will, in general, occur. */ preObj_->maxSubstLevel_ = 3 ; int fill_level = preObj_->maxSubstLevel_ ; /* Apply inexpensive transforms until convergence. Convergence is defined as no rows or columns queued for processing. */ while (1) { if (slackdoubleton == true) { bool dummyParam ; postActions_ = slack_doubleton_action::presolve(preObj_, postActions_,dummyParam) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif if (preObj_->status() != feasibleStatus) break ; } if (doubleton == true) { postActions_ = doubleton_action::presolve(preObj_,postActions_) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif if (preObj_->status() != feasibleStatus) break ; } if (tripleton == true) { postActions_ = tripleton_action::presolve(preObj_,postActions_) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif if (preObj_->status() != feasibleStatus) break ; } if (zerocost == true) { postActions_ = do_tighten_action::presolve(preObj_,postActions_) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif if (preObj_->status() != feasibleStatus) break ; } if (forcing == true) { postActions_ = forcing_constraint_action::presolve(preObj_,postActions_) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif if (preObj_->status() != feasibleStatus) break ; } if (ifree) { postActions_ = implied_free_action::presolve(preObj_,postActions_,fill_level) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif if (preObj_->status() != feasibleStatus) break ; } /* Step preObj's ToDo arrays, moving queued rows and columns from NextToDo to ToDo and resetting changed flags. */ preObj_->stepColsToDo() ; preObj_->stepRowsToDo() ; /* Break out of the loop if no rows or columns are queued, or if nothing happened. */ if (preObj_->numberColsToDo() == 0 && preObj_->numberRowsToDo() == 0) break ; } /* That's it for the computationally cheap transforms. Reset the ToDo lists and try the more expensive transforms. */ preObj_->initColsToDo() ; preObj_->initRowsToDo() ; /* Attempt to fix variables at bound by propagating bounds on reduced costs. The routine does not consult the ToDo lists, so looking for the addition of postsolve actions is the only way to determine if another iteration might be useful. If we manage to fix variables, try to remove implied free variables. */ if (doDualStuff) { int fill_level = preObj_->maxSubstLevel_ ; for (int iter = 0 ; iter < 5 ; iter++) { const CoinPresolveAction *const marker = postActions_ ; postActions_ = remove_dual_action::presolve(preObj_,postActions_) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif if (preObj_->status() != feasibleStatus) break ; if (ifree) { postActions_ = implied_free_action::presolve(preObj_, postActions_,fill_level) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif if (preObj_->status() != feasibleStatus) break ; } if (postActions_ == marker) break ; } } /* Check for duplicate columns and rows. */ if (dupcol) { postActions_ = dupcol_action::presolve(preObj_,postActions_) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif if (preObj_->status() != feasibleStatus) break ; } if (duprow) { postActions_ = duprow_action::presolve(preObj_,postActions_) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif if (preObj_->status() != feasibleStatus) break ; } /* Try again for useless constraints now that dual transforms and duplicate column elimination have had a chance to fix variables. */ postActions_ = testRedundant(preObj_,postActions_) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif /* See if we should continue. The requirement is that we've substantially reduced the problem. Checking postActions_ == lastAction is a quick test for any action at all. If there's action, see if it's enough to continue. For now, make the criteria a 5% reduction in rows or columns. */ rowsDropped = preObj_->countEmptyRows() ; colsDropped = preObj_->countEmptyCols() ; colCnt = preObj_->getNumCols() ; rowCnt = preObj_->getNumRows() ; rowShrink = ((double) (rowsDropped-lastRowsDropped))/rowCnt ; colShrink = ((double) (colsDropped-lastColsDropped))/colCnt ; handler_->message(ODSI_PRESOL_PASS,messages_) << currentPass << rowsDropped-lastRowsDropped << rowShrink << colsDropped-lastColsDropped << colShrink << CoinMessageEol ; if (postActions_ == lastAction) break ; if (rowShrink < .05 && colShrink < .05) break ; lastRowsDropped = rowsDropped ; lastColsDropped = colsDropped ; } } /* That's it, we're done with the presolve major loop. If we're still feasible, it's time for final cleanup: drop zero coefficients from the matrix, then drop empty rows and columns. */ if (preObj_->status() == feasibleStatus) { postActions_ = drop_zero_coefficients(preObj_,postActions_) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif postActions_ = drop_empty_cols_action::presolve(preObj_,postActions_) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 chkMtx &= 0x2a ; check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif postActions_ = drop_empty_rows_action::presolve(preObj_,postActions_) ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 check_and_tell(local_logchn, preObj_,chkMtx,chkSol,postActions_,dbgActionMark) ; # endif handler_->message(ODSI_PRESOL_STATS,messages_) << "After presolve" << preObj_->getNumRows() << preObj_->getNumCols() << preObj_->getNumElems() << CoinMessageEol ; } /* Whoops --- we've come up infeasible or unbounded. Let the user know. */ else { CoinMessageHandler *handler = preObj_->messageHandler() ; if (preObj_->status() == infeasibleStatus) { handler->message(COIN_PRESOLVE_INFEAS,preObj_->messages()) << preObj_->feasibilityTolerance_ << CoinMessageEol ; } else if (preObj_->status() == unboundedStatus) { handler->message(COIN_PRESOLVE_UNBOUND,preObj_->messages()) << CoinMessageEol ; } else { handler->message(COIN_PRESOLVE_INFEASUNBOUND,preObj_->messages()) << CoinMessageEol ; } } return ; } /* This routine has the responsibility of deciding whether presolve has done enough to make it worth installing. Or too much. For now, take the attitude that if we don't manage to eliminate any constraints, then presolve likely wasn't worth the effort. If we come back infeasible or unbounded, well, better let dylp check it on its own. At the other end of the spectrum, a B&C code will often pass in a problem in which a majority (or all) of the variables are fixed. Presolve may well reduce the problem to 0x0. In this case, there's literally nothing to do. */ bool ODSI::evalPresolve () { int origCons = getNumRows() ; int presolCons = preObj_->getNumRows() ; int presolVars = preObj_->getNumCols() ; int presolStatus = preObj_->status() ; /* Presolve returns infeasible or unbounded. */ if (presolStatus != 0) return (false) ; /* Presolve didn't manage to reduce the number of constraints. */ if (origCons <= presolCons) return (false) ; /* Presolve worked all too well; the constraint system is 0x0. I don't think it's possible for presolve to return 0xn (it should fix otherwise unconstrained bounded variables at some bound or declare unboundedness). But it never hurts to check. */ if (presolCons == 0 && presolVars == 0) return (false) ; return (true) ; } /* This routine saves the original constraint system. Trivial, but broken out in anticipation more functionality might be useful in the future. From an efficiency perspective, this is a wonderful idea. From a space perspective, it's not so wonderful. */ void ODSI::saveOriginalSys () { /* If we don't have a constraint system, we're deeply confused. We may or may not own the solver. In the case that we do own the solver, we need to detach before we hide the constraint system, so that dylp can detach and free vectors. If we don't own the solver, well, we have to detach somewhere. The value of lpprob->consys (if lpprob exists) must equal the value of consys at all times. */ assert(consys) ; ODSI *dylp_owner = static_cast(dy_getOwner()) ; if (dylp_owner != 0) { dylp_owner->detach_dylp() ; } savedConsys_ = consys ; consys = 0 ; if (lpprob) lpprob->consys = 0 ; /* Presolve should be invisible to clients, and one reasonable expectation is that pointers to structural vectors obtained from ODSI will remain constant across calls to the solver. However, the presolved problem is structurally different, so we need to hide these while dylp works on the presolved problem. */ saved_col_obj = _col_obj ; _col_obj = 0 ; saved_row_rhs = _row_rhs ; _row_rhs = 0 ; saved_row_lower = _row_lower ; _row_lower = 0 ; saved_row_upper = _row_upper ; _row_upper = 0 ; saved_row_sense = _row_sense ; _row_sense = 0 ; saved_row_range = _row_range ; _row_range = 0 ; saved_matrix_by_col = _matrix_by_col ; _matrix_by_col = 0 ; saved_matrix_by_row = _matrix_by_row ; _matrix_by_row = 0 ; return ; } /* This routine has the responsibility of installing a presolved problem in the ODSI object. Simply a matter of retrieving parameters and calling the right version of load_problem. We also need to replace the lpprob_struct. */ void ODSI::installPresolve () { int n = preObj_->getNumCols() ; int m = preObj_->getNumRows() ; const CoinBigIndex *colStarts = preObj_->getColStarts() ; const int *colLens = preObj_->getColLengths() ; const int *rowIndices = preObj_->getRowIndicesByCol() ; const double *coeffs = preObj_->getElementsByCol() ; const double *vlbs = preObj_->getColLower() ; const double *vubs = preObj_->getColUpper() ; const double *obj = preObj_->getCost() ; const double *clbs = preObj_->getRowLower() ; const double *cubs = preObj_->getRowUpper() ; double *rhs = new double[m] ; double *rhslow = new double[m] ; contyp_enum *ctyp = new contyp_enum[m] ; gen_rowparms(m,rhs,rhslow,ctyp,clbs,cubs) ; load_problem(n,m,colStarts,colLens,rowIndices,coeffs, vlbs,vubs,obj,ctyp,rhs,rhslow) ; construct_lpprob() ; delete[] rhs ; delete[] rhslow ; delete[] ctyp ; return ; } /* This routine is responsible for setting up for postsolve. It creates the postsolve object and does the major part of the initialisation by cannibalising the presolve object. It then loads solution information for the presolved problem: status, primal and dual solutions, and primal and dual activity. Recall that COIN postsolve is schizophrenic about maximisation: it'll deal with max/min for the objective coefficients, but we have to pass in the duals and reduced costs as if we're minimising. The call to assignPresolvetoPostsolve will destroy preObj and set the pointer to null. */ CoinPostsolveMatrix *ODSI::initialisePostsolve (CoinPresolveMatrix *&preObj) { CoinPostsolveMatrix *postObj = new CoinPostsolveMatrix(0,0,0) ; postObj->assignPresolveToPostsolve(preObj) ; CoinWarmStartBasis *ws = dynamic_cast(getWarmStart()) ; postObj->setStatus(ws) ; delete ws ; int n = getNumCols() ; int m = getNumRows() ; const double *temp = 0 ; double *tempNonConst = 0 ; if (getObjSense() < 0) { tempNonConst = new double [CoinMax(n,m)] ; } temp = getColSolution() ; postObj->setColSolution(temp,-1) ; temp = getRowActivity() ; postObj->setRowActivity(temp,-1) ; temp = getRowPrice() ; if (getObjSense() < 0) { std::transform(temp,temp+m,tempNonConst,std::negate()) ; postObj->setRowPrice(tempNonConst,-1) ; } else { postObj->setRowPrice(temp,-1) ; } temp = getReducedCost() ; if (getObjSense() < 0) { std::transform(temp,temp+n,tempNonConst,std::negate()) ; postObj->setReducedCost(tempNonConst,-1) ; } else { postObj->setReducedCost(temp,-1) ; } if (tempNonConst != 0) delete [] tempNonConst ; # if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 std::cout << std::endl << "ODSI::initialisePostsolve: checking solution at PostsolveMatrix load." << std::endl ; presolve_check_threads(postObj) ; presolve_check_free_list(postObj,true) ; presolve_check_reduced_costs(postObj) ; presolve_check_duals(postObj) ; presolve_check_sol(postObj,2,2,2) ; presolve_check_nbasic(postObj) ; std::cout << " ... done." << std::endl ; # endif return (postObj) ; } /* This routine is responsible for applying the list of postsolve actions in order to restore the original system. After each transform is applied, it's destroyed. */ void ODSI::doPostsolve () { handler_->message(ODSI_POSTSOL,messages_) << "start" << CoinMessageEol ; # if PRESOLVE_CONSISTENCY > 0 handler_->setLogLevel(6) ; presolve_check_threads(postObj_) ; presolve_check_free_list(postObj_) ; # endif # if PRESOLVE_DEBUG > 0 presolve_check_sol(postObj_) ; presolve_check_reduced_costs(0) ; presolve_check_reduced_costs(postObj_) ; presolve_check_duals(postObj_) ; # endif while (postActions_ != 0) { const CoinPresolveAction *postAction = postActions_ ; postActions_ = postAction->next ; handler_->message(ODSI_POSTSOL_ACT,messages_) << postAction->name() << CoinMessageEol ; postAction->postsolve(postObj_) ; # if PRESOLVE_CONSISTENCY > 0 presolve_check_threads(postObj_) ; presolve_check_free_list(postObj_) ; # endif # if PRESOLVE_DEBUG > 0 presolve_check_sol(postObj_,2,2,2) ; presolve_check_reduced_costs(postObj_) ; presolve_check_duals(postObj_) ; # endif delete postAction ; } # if PRESOLVE_CONSISTENCY > 0 handler_->setLogLevel(6) ; presolve_check_threads(postObj_) ; presolve_check_free_list(postObj_) ; # endif # if PRESOLVE_DEBUG > 0 presolve_check_sol(postObj_,2,2,2) ; presolve_check_reduced_costs(0) ; presolve_check_reduced_costs(postObj_) ; presolve_check_duals(postObj_) ; # endif handler_->message(ODSI_POSTSOL,messages_) << "complete" << CoinMessageEol ; return ; } /* This routine has the responsibility of restoring the original constraint system, setting the corresponding basis as the new active basis for this ODSI object. Right now, all we use is the basis --- a call to dylp regenerates everything else. Possible problems: * CoinPresolve supports a notion of superbasic status. This shouldn't appear in the final result, but there's no easy way to check short of scanning the basis. Too much work for an error that may never occur. * If I ever decide to make use of the reduced costs and duals returned by postsolve, remember that they will be produced for a minimisation problem and must be negated for maximisation. See initialisePostsolve, above. */ void ODSI::installPostsolve () { /* Restore the constraint system --- trivially easy, just destroy the presolved system and replace it with the saved copy of the original. We need to claim ownership of the solver. */ destruct_problem(true) ; consys = savedConsys_ ; savedConsys_ = 0 ; /* Restore cached structural vectors. */ _col_obj = saved_col_obj ; saved_col_obj = 0 ; _row_rhs = saved_row_rhs ; saved_row_rhs = 0 ; _row_lower = saved_row_lower ; saved_row_lower = 0 ; _row_upper = saved_row_upper ; saved_row_upper = 0 ; _row_sense = saved_row_sense ; saved_row_sense = 0 ; _row_range = saved_row_range ; saved_row_range = 0 ; _matrix_by_col = saved_matrix_by_col ; saved_matrix_by_col = 0 ; _matrix_by_row = saved_matrix_by_row ; saved_matrix_by_row = 0 ; /* Set the basis. */ CoinWarmStart *postBasis = dynamic_cast(postObj_->getStatus()) ; if (setWarmStart(postBasis) == false) { throw CoinError("Could not install postsolve basis.", "installPostsolve","OsiDylpSolverInterface") ; } delete postBasis ; /* And destroy the postsolve object. */ delete postObj_ ; postObj_ = 0 ; return ; } /* This routine deletes data structures associated with presolve. It's a utility cleanup routine. */ void ODSI::destruct_presolve () { if (preObj_) { delete preObj_ ; preObj_ = 0 ; } if (postObj_) { delete postObj_ ; postObj_ = 0 ; } while (postActions_ != 0) { const CoinPresolveAction *postAction = postActions_ ; postActions_ = postAction->next ; delete postAction ; } /* Presence of savedConsys_ means that we called saveOriginalSys. */ if (savedConsys_) { consys_free(savedConsys_) ; savedConsys_ = 0 ; _col_obj = saved_col_obj ; saved_col_obj = 0 ; _row_rhs = saved_row_rhs ; saved_row_rhs = 0 ; _row_lower = saved_row_lower ; saved_row_lower = 0 ; _row_upper = saved_row_upper ; saved_row_upper = 0 ; _row_sense = saved_row_sense ; saved_row_sense = 0 ; _row_range = saved_row_range ; saved_row_range = 0 ; _matrix_by_col = saved_matrix_by_col ; saved_matrix_by_col = 0 ; _matrix_by_row = saved_matrix_by_row ; saved_matrix_by_row = 0 ; } return ; } DyLP-1.10.4/DyLP/src/OsiDylp/OsiDylpSolverInterface.hpp0000644000175200017520000011162211575424105021154 0ustar coincoin#ifndef OsiDylpSolverInterface_H #define OsiDylpSolverInterface_H /* Copyright (C) 2002, 2003, 2004. Lou Hafer, Stephen Tse, International Business Machines Corporation and others. All Rights Reserved. Copyright (C) 2005 -- 2010 Lou Hafer This file is a portion of the COIN/OSI interface for dylp and is licensed under the terms of the Eclipse Public License (EPL) */ /*! \file OsiDylpSolverInterface.hpp \brief Declarations of the COIN OSI API for the dylp solver. This file contains the declaration of the class OsiDylpSolverInterface (ODSI), an implementation of the COIN OSI API for the dylp LP solver. The documentation here most often provides only brief descriptions of methods. See the OsiSolverInterface documentation for additional details. */ /* sccs: @(#)OsiDylpSolverInterface.hpp 1.12 09/16/04 cvs: $Id: OsiDylpSolverInterface.hpp 1312 2008-10-10 00:26:32Z lou $ */ #include "OsiConfig.h" #include #include #include #include #include #include #define DYLP_INTERNAL extern "C" { #include "dylp.h" } class OsiDylpWarmStartBasis ; /*! \brief Enum to specify cold/warm/hot start */ typedef enum { startInvalid = 0, startCold = 1, startWarm, startHot } ODSI_start_enum ; /*! \class OsiDylpSolverInterface \brief COIN OSI API for dylp The class OsiDylpSolverInterface (ODSI) implements the public functions defined for the COIN OsiSolverInterface (OSI) API.

OsiDylpSolverInterface Principles for Users

In addition to the principles outlined for the OsiSolverInterface class, ODSI maintains the following: Construction of a Constraint System: A constraint system can be batch loaded from a file (MPS format) or from a data structure, or it can be built incrementally. When building a constraint system incrementally, keep in mind that you must create a row or column (addRow or addCol, respectively) before you can adjust other properties (row or column bounds, objective, variable values, etc.) Existence of a Solution: For proper operation, OSI requires that a SI maintain a basic primal solution at all times after a problem has been loaded.

When a problem is loaded, ODSI generates a basic primal solution (primal variable values and a matching basis). The solution is not necessarily primal or dual feasible. In terms of the objective function, this solution is pessimistic, but not necessarily worst-case. ODSI does not generate matching values for the dual variables (row prices).

Any successful call to dylp (i.e., a call that results in an optimal, infeasible, or unbounded result, or that terminates on iteration limit) will replace the existing solution with the result of the call to dylp.

It is possible to specify initial values for the primal and dual variables using setColSolution() and setRowPrice(). To specify an initial basis, see the documentation for the CoinWarmStartBasis and OsiDylpWarmStartBasis classes. When these functions are used, it is the responsibility of the client to ensure validity and consistency. Maintenance of an LP Basis Skirting the edges of the principle that changing the problem invalidates the solution, OsiDylp will maintain a valid basis across two common operations used in branch-and-cut: deletion of a loose constraint and deletion of a nonbasic variable. Arguably the set of allowable modifications could be increased. Assignment Assignment (#operator=()) works pretty much as you'd expect, with one exception. Only one ODSI object can control the dylp solver at a time, so hot start information is not copied on assignment. Detailed implementation comments are contained in OsiDylpSolverInterface.cpp, which is not normally scanned when generating COIN OSI API documentation. */ class OsiDylpSolverInterface: virtual public OsiSolverInterface { friend void OsiDylpSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netLibDir) ; /* Consult the COIN OSI documentation or relevant source code for details not covered here. Supported functions are listed first, followed by unsupported functions. */ public: /*! \name Constructors and Destructors */ //@{ /*! \brief Default constructor */ OsiDylpSolverInterface() ; /*! \brief Copy constructor */ OsiDylpSolverInterface(const OsiDylpSolverInterface &src) ; /*! \brief Clone the solver object */ OsiSolverInterface* clone(bool copyData = true) const ; /*! \brief Assignment */ OsiDylpSolverInterface &operator=(const OsiDylpSolverInterface &rhs) ; /*! \brief Destructor */ ~OsiDylpSolverInterface() ; /*! \brief Reset the solver object to the state produced by the default constructor. */ void reset() ; //@} /*! \name Methods to load a problem */ //@{ /*! \brief Read a problem description in MPS format from a file. */ int readMps(const char *filename, const char *extension = "mps") ; /*! \brief Read a problem description in MPS format from a file, including SOS information. */ int readMps(const char *filename, const char *extension, int &numberSets, CoinSet **&sets) ; /*! \brief Write the problem into the specified file in MPS format. \p objsense == 1 forces the file to be written as a maximisation problem, while -1 forces a minimisation problem. The default of 0 writes the file as maximisation or minimisation using the solver's current setting. */ void writeMps(const char *basename, const char *extension = "mps", double objsense = 0.0) const ; /*! \brief Load a problem description (OSI packed matrix, row sense, parameters unaffected). */ void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) ; /*! \brief Load a problem description (OSI packed matrix, row bounds, parameters unaffected). */ void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) ; /*! \brief Load a problem description (standard column-major packed matrix, row sense, parameters unaffected) */ void loadProblem(const int colcnt, const int rowcnt, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *sense, const double *rhsin, const double *range) ; /*! \brief Load a problem description (standard column-major packed matrix, row bounds, parameters unaffected) */ void loadProblem(const int colcnt, const int rowcnt, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *row_lower, const double *row_upper) ; /*! \brief Load a problem description (OSI packed matrix, row sense, parameters destroyed). */ void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng) ; /*! \brief Load a problem description (OSI packed matrix, row bounds, parameters destroyed). */ void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub) ; //@} /*! \name Methods to obtain problem information */ //@{ /*! \brief Get the number of columns (variables) */ int getNumCols() const ; /*! \brief Get the number of rows (constraints) */ int getNumRows() const ; /*! \brief Get the number of non-zero coefficients */ int getNumElements() const ; /*! \brief Get the number of integer variables Counts both binary and general integer variables. */ int getNumIntegers() const ; /*! \brief Get the column (variable) lower bound vector */ const double* getColLower() const ; /*! \brief Get the column (variable) upper bound vector */ const double* getColUpper() const ; /*! \brief Return true if the variable is continuous */ bool isContinuous(int colIndex) const ; /*! \brief Return true if the variable is binary */ bool isBinary(int colIndex) const ; /*! \brief Return true if the variable is general integer */ bool isIntegerNonBinary (int colIndex) const ; /*! \brief Return true if the variable is integer (general or binary) */ bool isInteger (int colIndex) const ; /*! \brief Get the row sense (constraint type) vector */ const char* getRowSense() const ; /*! \brief Get the row (constraint) right-hand-side vector */ const double* getRightHandSide() const ; /*! \brief Get the row (constraint) range vector */ const double* getRowRange() const ; /*! \brief Get the row (constraint) lower bound vector */ const double* getRowLower() const ; /*! \brief Get the row (constraint) upper bound vector */ const double* getRowUpper() const ; /*! \brief Get the objective function coefficient vector */ const double* getObjCoefficients() const ; /*! \brief Get the objective function sense (min/max) A value of 1 indicates minimisation; -1 indicates maximisation. */ double getObjSense() const ; /*! \brief Get a pointer to a row-major copy of the constraint matrix */ const CoinPackedMatrix *getMatrixByRow() const ; /*! \brief Get a pointer to a column-major copy of the constraint matrix */ const CoinPackedMatrix *getMatrixByCol() const ; //@} /*! \name Methods for row and column names. Only the set methods need to be overridden to ensure consistent names between OsiDylp and the OSI base class. */ //@{ /*! \brief Set the objective function name */ void setObjName (std::string name) ; /*! \brief Set a row name Quietly does nothing if the name discipline (#OsiNameDiscipline) is auto. Quietly fails if the row index is invalid. */ void setRowName(int ndx, std::string name) ; /*! \brief Set a column name Quietly does nothing if the name discipline (#OsiNameDiscipline) is auto. Quietly fails if the column index is invalid. */ void setColName(int ndx, std::string name) ; //@} /*! \name Methods to modify the problem */ //@{ /*! \brief Set a single variable to be continuous. */ void setContinuous(int index) ; using OsiSolverInterface::setContinuous ; /*! \brief Set a single variable to be integer. */ void setInteger(int index) ; using OsiSolverInterface::setInteger ; /*! \brief Set the lower bound on a column (variable) */ void setColLower(int index, double value) ; using OsiSolverInterface::setColLower ; /*! \brief Set the upper bound on a column (variable) */ void setColUpper(int index, double value) ; using OsiSolverInterface::setColUpper ; /*! \brief Set the lower bound on a row (constraint) */ void setRowLower(int index, double value) ; /*! \brief Set the upper bound on a row (constraint) */ void setRowUpper(int index, double value) ; /*! \brief Set the type of a row (constraint) */ void setRowType(int index, char rowsen, double rowrhs, double rowrng) ; /*! \brief Set an objective function coefficient */ void setObjCoeff (int index, double value) ; /*! Set the objective coefficients for all columns. */ void setObjective(const double * array); /*! \brief Set the sense (min/max) of the objective Use 1 for minimisation, -1 for maximisation. (The default is minimisation; the objective is multiplied by -1 to maximise.) */ void setObjSense(double sense) ; /*! \brief Set the value of the primal variables in the problem solution */ void setColSolution(const double *colsol) ; /*! \brief Set the value of the dual variables in the problem solution */ void setRowPrice(const double*) ; /* For overload resolution with OSI::addCol functions. */ using OsiSolverInterface::addCol ; /*! \brief Add a column (variable) to the problem */ void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj) ; /*! \brief Remove column(s) (variable(s)) from the problem */ void deleteCols(const int num, const int *colIndices) ; /* For overload resolution with OSI::addRow functions. */ using OsiSolverInterface::addRow ; /*! \brief Add a row (constraint) to the problem */ void addRow(const CoinPackedVectorBase &row, const double rowlb, const double rowub) ; /*! \brief Add a row (constraint) to the problem */ void addRow(const CoinPackedVectorBase &row, const char rowsen, const double rowrhs, const double rowrng) ; /*! \brief Delete row(s) (constraint(s)) from the problem */ void deleteRows(const int num, const int *rowIndices) ; /*! \brief Apply a row (constraint) cut (add one constraint) */ void applyRowCut(const OsiRowCut &cut) ; /*! \brief Apply a column (variable) cut (adjust one or more bounds) */ void applyColCut(const OsiColCut &cut) ; //@} /*! \name Solve methods */ //@{ /*! \brief Solve an lp from scratch */ void initialSolve() ; /*! \brief Get an empty OsiDylpWarmStartBasis object */ CoinWarmStart *getEmptyWarmStart () const ; /*! \brief Build a warm start object for the current lp solution. */ CoinWarmStart *getWarmStart() const ; /*! \brief Apply a warm start object. By definition, a null parameter is a request to synch the warm start basis with the solver. ODSI interprets a 0x0 basis as a request to remove warm start information. */ bool setWarmStart(const CoinWarmStart *warmStart) ; /*! \brief Call dylp to reoptimize (warm start). */ void resolve() ; /*! \brief Create a hot start snapshot. */ void markHotStart() ; /*! \brief Call dylp to reoptimize (hot start). */ void solveFromHotStart() ; /*! \brief Delete the hot start snapshot. */ void unmarkHotStart() ; //@} /*! \name Methods returning solver termination status */ //@{ /*! \brief True if dylp abandoned the problem */ bool isAbandoned() const ; /*! \brief True if dylp reported an optimal solution */ bool isProvenOptimal() const ; /*! \brief True if dylp reported the problem to be primal infeasible */ bool isProvenPrimalInfeasible() const ; /*! \brief True if dylp reported the problem to be dual infeasible (primal unbounded) */ bool isProvenDualInfeasible() const ; /*! \brief True if dylp reached the iteration limit */ bool isIterationLimitReached() const ; /*! \brief Get the number of iterations for the last lp */ int getIterationCount() const ; /*! \brief Is the primal objective limit reached? Put in different terms, quit when the objective value becomes better than the given limit for an acceptable value. */ bool isPrimalObjectiveLimitReached() const ; /*! \brief Is the dual objective limit reached? Put in different terms, quit when the objective value becomes worse than the given limit for an acceptable value. */ bool isDualObjectiveLimitReached() const ; //@} /*! \name Methods to set/get solver parameters */ //@{ /*! \brief Get dylp's value for infinity */ double getInfinity() const ; /*! \brief Set an OSI integer parameter */ bool setIntParam(OsiIntParam key, int value) ; /*! \brief Set an OSI double parameter */ bool setDblParam(OsiDblParam key, double value) ; /*! \brief Set an OSI string parameter */ bool setStrParam(OsiStrParam key, const std::string& value) ; /*! \brief Set an OSI hint */ bool setHintParam(OsiHintParam key, bool sense = true, OsiHintStrength strength = OsiHintTry, void *info = 0) ; /*! \brief Get an OSI integer parameter */ bool getIntParam(OsiIntParam key, int &value) const ; /*! \brief Get an OSI double parameter */ bool getDblParam(OsiDblParam key, double &value) const ; /*! \brief Get an OSI string parameter */ bool getStrParam(OsiStrParam key, std::string &value) const ; /* For overload resolution with OSI::getHintParam functions. */ using OsiSolverInterface::getHintParam ; /*! \brief Get an OSI hint */ bool getHintParam(OsiHintParam key, bool &sense, OsiHintStrength &strength, void *&info) const ; /*! \brief Change the language for OsiDylp messages */ inline void newLanguage(CoinMessages::Language language) { setOsiDylpMessages(language) ; } /*! \brief An alias for OsiDylpSolverInterface::newLanguage. */ inline void setLanguage(CoinMessages::Language language) { setOsiDylpMessages(language) ; } //@} /*! \name Methods to obtain solution information */ //@{ /*! \brief Get the objective function value for the solution */ double getObjValue() const ; /*! \brief Return the vector of primal variables for the solution */ const double* getColSolution() const ; /*! \brief Return the vector of dual variables for the solution */ const double* getRowPrice() const ; /*! \brief Return the vector of reduced costs for the solution */ const double* getReducedCost() const ; /*! \brief Return the vector of row activity for the solution */ const double* getRowActivity() const ; /*! \brief Get as many dual rays as the solver can provide If \c fullRay is false (the default), the ray will contain only the components associated with the row duals. If \c fullRay is set to \c true, the ray will also contain the components associated with nonbasic variables. */ std::vector getDualRays(int maxNumRays, bool fullRay) const ; /*! \brief Get as many primal rays as the solver can provide */ std::vector getPrimalRays(int maxNumRays) const ; //@} /*! \name Simplex API methods */ //@{ /*! \brief Return the simplex implementation level. */ int canDoSimplexInterface() const ; /*! \brief Prepare the solver for the use of tableau access methods. In order for the tableau methods to work, the ODSI object invoking them must own the solver; the most recent call to optimise the problem must have resulted in an optimal solution; and the solver must be holding retained data structures for that optimal solution. It's much more efficient if the solver is using the full system, but it's not mandatory. Because this is a const method, we can't force any of this; we can only check. */ void enableFactorization() const ; /*! \brief Undo the effects of #enableFactorization. Even if #resolve was invoked by #enableFactorization, little needs to be done here. Ownership of the solver is transferred by invocation, so there's no need to explicitly give it back. */ void disableFactorization() const ; /*! \brief Check if an optimal basis is available. */ bool basisIsAvailable () const ; /*! \brief Retrieve status information for architectural and logical variables. Retrieve status vectors for architectural (also called structural or column) and logical (also called artificial or row) variables. Returns the same information as #getWarmStart, but in a different format. */ void getBasisStatus (int *archStatus, int *logStatus) const ; /*! \brief Set a basis and update the factorization and solution. Provides the combined functionality of #setWarmStart followed by #resolve. As with #getBasisStatus, the status vectors are coded as integers. */ int setBasisStatus (const int *archStatus, const int *logStatus) ; /*! \brief Calculate duals and reduced costs for the given objective coefficients. The solver's objective coefficient vector is not changed (cf. #setObjectiveAndRefresh) */ virtual void getReducedGradient(double *columnReducedCosts, double *duals, const double *c) const ; /*! \brief Get indices of basic variables */ virtual void getBasics(int *index) const ; /*! \brief Get a column of the basis inverse */ virtual void getBInvCol(int col, double *betak) const ; /*! \brief Get a column of the tableau */ virtual void getBInvACol(int col, double *abarj) const ; /*! \brief Get a row of the basis inverse */ virtual void getBInvRow(int row, double *betai) const ; /*! \brief Get a row of the tableau */ virtual void getBInvARow(int row, double *abari, double *betai = 0) const ; //@} /*! \name Debugging Methods */ //@{ /*! \brief Activate the row cut debugger Activate the debugger for a model known to the debugger. The debugger will consult an internal database for an optimal solution vector. */ void activateRowCutDebugger (const char * modelName) ; /*! \brief Activate the row cut debugger Activate the debugger for a model not included in the debugger's internal database. \p solution must be a full solution vector, but only the integer variables need to be correct. The debugger will fill in the continuous variables by solving an lp relaxation with the integer variables fixed as specified. If the given values for the continuous variables should be preserved, set \p keepContinuous to true. */ void activateRowCutDebugger (const double *solution, bool keepContinuous = false) ; # if ODSI_PARANOIA >= 1 /*! \brief Check that a row or column index is in range Check that a row or column index is in range for the current constraint system. This routine will throw an error if there is no constraint system or if the index is out of range. NOTE that ODSI_PARANOIA must be 1 or greater in order for OsiCbc(dylp) to pass the OsiCbc unit test. */ void indexCheck (int k, bool isCol, std::string rtnnme) ; # endif //@} /*! \name Dylp-specific methods */ //@{ /*! \brief Process an options (.spc) file */ void dylp_controlfile(const char* name, const bool silent, const bool mustexist = true) ; /*! \brief Establish a log file */ void dylp_logfile(const char* name, bool echo = false) ; /*! \brief Establish an output (solution and/or statistics) file */ void dylp_outfile(const char* name) ; /*! \brief Print the solution and/or statistics to the output file. */ void dylp_printsoln(bool wantSoln, bool wantStats) ; /*! \brief Set the language for messages */ void setOsiDylpMessages(CoinMessages::Language local_language) ; //@} /*! \name Unsupported functions */ //@{ /*! \brief Invoke the solver's built-in branch-and-bound algorithm. */ void branchAndBound() ; //@} /*! \name Dylp data structures These structures contain dylp control options and tolerances. Dylp existed before OSI, and (as with all solvers) it has its own unique options. Just be aware that if you access these structures directly you lose solver independence. See the dylp documentation and dylp.h for details. */ //@{ /*! \brief Solver options for an initial solve. */ lpopts_struct *initialSolveOptions ; /*! \brief Solver options for a resolve. */ lpopts_struct *resolveOptions ; /*! \brief Solver numeric tolerances. */ lptols_struct *tolerances ; //@} private: /* Private implementation state and helper functions. If you're contemplating using any of these, you should have a look at the code. See OsiDylpSolverInterface.cpp for descriptions. */ /*! \name Dylp data structures These fields hold pointers to the data structures which are used to pass an lp problem to dylp. */ //@{ /*! \brief The constraint system */ consys_struct *consys ; /*! \brief The lp problem */ lpprob_struct *lpprob ; /*! \brief The statistics structure */ lpstats_struct *statistics ; //@} /*! \name Dylp residual control variables */ //@{ /*! \brief Number of outstanding ODSI objects. */ static int reference_count ; /*! \brief Basis maintenance package is initialised. */ static bool basis_ready ; //@} /*! \name Solver instance control variables These variables maintain state for individual ODSI instances. */ //@{ /*! \brief Output stream for this ODSI instance Holds the ioid of the stream that will be used to write out the solution and statistics. */ ioid local_outchn ; /*! \brief Log stream for this ODSI instance Holds the ioid of the stream that will be used for dylp log information. */ ioid local_logchn ; /*! \brief Controls output of log information to stdout during initialSolve() */ bool initial_gtxecho ; /*! \brief Controls output of log information to stdout during resolve() and solveFromHotStart() */ bool resolve_gtxecho ; /*! \brief Result of last call to solver for this ODSI instance The default value is lpINV (i.e., the code is not valid). A call to dylp will set lp_retval to the dylp return code. Errors in the interface's interaction with other dylp routines will set this value to the return code given by the routine, or lpFATAL if the routine does not return anything more specific. */ lpret_enum lp_retval ; /*! \brief Objective function sense for this ODSI instance Coded 1.0 to minimize (default), -1.0 to maximize. */ double obj_sense ; /*! \brief The value of infinity */ double odsiInfinity ; /*! \brief Solver name (dylp). */ const std::string solvername ; /*! \brief Array for info blocks associated with hints. */ mutable void *info_[OsiLastHintParam] ; /*! \brief Allow messages from CoinMpsIO package. */ bool mps_debug ; /*! \brief Warm start object used as a fallback for hot start If some other ODSI object uses the underlying solver between calls to #solveFromHotStart(), the solver must be reloaded. This basis is kept for just such a situation. */ CoinWarmStart *hotstart_fallback ; /*! \brief Codes for basis condition - basisNone: no basis exists - basisFresh: the basis is in sync with the solver - basisModified: `good' constraint system modifications have occurred - basisDamaged: `bad' constraint system modifications have occurred `Good' modifications are deletion of a loose constraint (specifically, a constraint with a basic logical) or a variable at bound (specifically, a nonbasic variable). `Bad' modifications are deletion of a tight constraint (specifically, a constraint with a nonbasic logical) or deletion of a variable not at bound (specifically, a basic variable). Bad modifications will in general cause the basis to be primal and/or dual infeasible after it's patched up. A subtle point: basisModified will also be used in situations where ODSI has constructed a basis but not set it into an lpprob structure. This is the case when a solution is invented for a newly loaded problem. */ enum basisCondition { basisNone = 0, basisFresh, basisModified, basisDamaged } ; /*! \brief Active basis The active basis is set with each successful return from the solver (where successful means a result of optimal, infeasible, unbounded, or iterlim), or by an explicit call to #setWarmStart() with a valid basis. By definition, calling #setWarmStart() with a null parameter is a request to synch the active basis with the solver (a noop for ODSI). Calling #setWarmStart() with an empty (0x0) basis is taken as a request to delete activeBasis. Condition will take a value from the #basisCondition enum (which see). Balance records whether we have an excess or shortage of basic variables. Deletion of tight constraints will result in an excess. Deletion of basic variables will result in a shortage. */ struct { CoinWarmStart *basis ; basisCondition condition ; int balance ; } activeBasis ; /*! \brief The most recent solution from dylp is valid. True if the solution held in #lpprob is valid. False if changes to the constraint system have rendered the solution invalid. */ bool solnIsFresh ; /*! \brief State related to the OsiSimplex interface. - simplex is set using the same coding as #canDoSimplexInterface: 0 is off, 1 is tableau methods, 2 is pivot control. */ mutable struct { int simplex ; bool saved_fullsys ; } simplex_state ; //@} /*! \name Cached problem information Problem information is cached for efficiency, to avoid repeated reconstruction of OSI structures from dylp structures. */ //@{ mutable double _objval ; mutable double* _col_obj ; mutable double* _col_x ; mutable double* _col_cbar ; mutable double* _row_rhs ; mutable double* _row_lower ; mutable double* _row_upper ; mutable char* _row_sense ; mutable double* _row_range ; mutable double* _row_lhs ; mutable double* _row_price ; mutable CoinPackedMatrix* _matrix_by_col ; mutable CoinPackedMatrix* _matrix_by_row ; //@} /*! \name Data for presolve Data related to the use of the CoinPresolve capabilities (which see for further information). */ //@{ /*! \brief The presolve object In more detail, #preObj_ is loaded with the original system. Presolve transformations are applied to convert it to a presolved system. */ CoinPresolveMatrix *preObj_ ; /*! \brief List of postsolve actions The list of postsolve (reverse) transformations required to convert the presolved system back to the original system. Built as presolve transformations are applied. */ const CoinPresolveAction *postActions_ ; /*! \brief The postsolve object In more detail, #postObj_ is loaded with the presolved system and its optimal basis. The postsolve transformations held by #postActions_ are applied to convert back to the original system. For ODSI, our only interest is the basis. */ CoinPostsolveMatrix *postObj_ ; /// Limit for iterations of the major presolve loop int passLimit_ ; /// true if presolve should consider integrality bool keepIntegers_ ; /// Saved copy of original problem consys_struct *savedConsys_ ; /// Saved pointers to cached structural vectors mutable double* saved_col_obj ; mutable double* saved_row_rhs ; mutable double* saved_row_lower ; mutable double* saved_row_upper ; mutable char* saved_row_sense ; mutable double* saved_row_range ; mutable CoinPackedMatrix* saved_matrix_by_col ; mutable CoinPackedMatrix* saved_matrix_by_row ; //@} /*! \name Helper functions for presolve Functions used to access the CoinPresolve capabilities. There are no public functions associated with presolve --- the only control is the OsiDoPresolveInInitial and OsiDoPresolveInResolve hints. The functions declared here do the work. See OsiDylpPresolve.cpp for additional explanation. */ //@{ /// Create and load a presolve object. CoinPresolveMatrix *initialisePresolve(bool keepIntegers) ; /// Perform presolve transformations void doPresolve() ; /// Decide whether presolve was effective enough to use bool evalPresolve() ; /// Save the original problem void saveOriginalSys() ; /// Load the presolved problem into the ODSI object void installPresolve() ; /// Create and load a postsolve object CoinPostsolveMatrix *initialisePostsolve(CoinPresolveMatrix *&preObj) ; /// Apply the postsolve transforms from #postActions_ void doPostsolve() ; /// Reload the original constraint system with the postsolved basis void installPostsolve() ; /// Delete presolve information void destruct_presolve() ; //@} /*! \name Helper functions for the simplex API */ //@{ /// Ensure that the solver is ready for simplex operations bool ensureOwnership () const ; //}@ /*! \name Helper functions for problem construction */ //@{ void construct_lpprob() ; void construct_options() ; void construct_consys(int cols, int rows) ; void dylp_ioinit() ; void gen_rowparms(int rowcnt, double *rhs, double *rhslow, contyp_enum *ctyp, const double *rowlb, const double *rowub) ; void gen_rowparms(int rowcnt, double *rhs, double *rhslow, contyp_enum *ctyp, const char *sense, const double *rhsin, const double *range) ; void load_problem(const CoinMpsIO &mps) ; void load_problem(const CoinPackedMatrix &matrix, const double* col_lower, const double* col_upper, const double* obj, const contyp_enum *ctyp, const double* rhs, const double* rhslow) ; void load_problem (const int colcnt, const int rowcnt, const int *start, const int *lens, const int *index, const double *value, const double* col_lower, const double* col_upper, const double* obj, const contyp_enum *ctyp, const double* rhs, const double* rhslow) ; //@} /*! \name Helper functions for invoking dylp */ //@{ /*! \brief Common core method to invoke dylp */ lpret_enum do_lp (ODSI_start_enum start, bool echo) ; /*! \brief Install a basis in the lp problem structure */ void setBasisInLpprob (const OsiDylpWarmStartBasis *wsb, lpprob_struct *lpprob) const ; //@} /*! \name Destructor helpers */ //@{ void destruct_primal_cache() ; void destruct_dual_cache() ; void destruct_col_cache(bool structure) ; void destruct_row_cache(bool structure) ; void destruct_cache(bool rowStructure, bool colStructure) ; void destruct_problem(bool preserve_interface) ; void detach_dylp() const ; //@} /*! \name Helper functions for problem modification */ /* There are separate groups for member and static methods so that doxygen won't promote the group to the top level. */ //@{ void add_col(const CoinPackedVectorBase& coin_coli, vartyp_enum vtypi, double vlbi, double vubi, double obji, const std::string *nme) ; void add_row(const CoinPackedVectorBase& coin_rowi, char clazzi, contyp_enum ctypi, double rhsi, double rhslowi, const std::string *nme) ; void calc_objval() ; contyp_enum bound_to_type(double lower, double upper) ; void gen_rowiparms(contyp_enum* ctypi, double* rhsi, double* rhslowi, char sensei, double rhsini, double rangei) ; void gen_rowiparms(contyp_enum* ctypi, double* rhsi, double* rhslowi, double rowlbi, double rowubi) ; void unimp_hint(bool dylpSense, bool hintSense, OsiHintStrength hintStrength, const char *msgString) ; void pessimal_primal() ; void reduceActiveBasis() ; //@} /*! \name Helper functions for problem modification */ //@{ static contyp_enum sense_to_type(char type) ; static char type_to_sense(contyp_enum type) ; //@} /*! \name Copy helpers Copy function templates for simple vectors and fixed-size objects, and specializations for various complex structures. */ //@{ template static void copy(const T* src, T* dst, int n) ; template static T* copy(const T* src, int n) ; template static T* copy(const T* src) ; /* Specializations for more complicated structures. */ static basis_struct* copy_basis(const basis_struct* src, int dstsze) ; static void copy_basis(const basis_struct* src, basis_struct* dst) ; static lpprob_struct* copy_lpprob(const lpprob_struct* src) ; //@} #ifndef _MSC_VER /*! \name Copy verification functions Copy verification functions, to check that two structures are identical. */ //@{ template static void assert_same(const T& t1, const T& t2, bool exact) ; template static void assert_same(const T* t1, const T* t2, int n, bool exact) ; static void assert_same(double d1, double d2, bool exact) ; static void assert_same(const basis_struct& b1, const basis_struct& b2, bool exact) ; static void assert_same(const consys_struct& c1, const consys_struct& c2, bool exact) ; static void assert_same(const conbnd_struct& c1, const conbnd_struct& c2, bool exact) ; static void assert_same(const lpprob_struct& l1, const lpprob_struct& l2, bool exact) ; static void assert_same(const OsiDylpSolverInterface& o1, const OsiDylpSolverInterface& o2, bool exact) ; //@} #endif /* ! _MSC_VER */ /*! \name Vector helper functions The inline methods are documented here, because this is the only place they appear. */ //@{ /*! \brief Convert 0-based vector pointer to 1-based vector pointer For cases where it's inconvenient to adjust indices, the alternative is to adjust the pointer to the vector so it points to vector[-1]. Be careful! */ template inline static T* idx_vec (T* vec) { return (vec-1) ; } /*! \brief Convert 0-based index to 1-based index */ inline static int idx (int i) { return (i+1) ; } /*! \brief Convert 1-based vector pointer to 0-based vector pointer For cases where it's inconvenient to adjust indices, the alternative is to adjust the pointer to the vector so it points to vector[1]. */ template inline static T* inv_vec (T* vec) { return (vec+1) ; } /*! \brief Convert 1-based index to 0-based index */ inline static int inv (int i) { return (i-1) ; } static pkvec_struct* packed_vector( const CoinShallowPackedVector vector, int dimension) ; static void packed_vector( const CoinShallowPackedVector vector, int dimension, pkvec_struct *dst) ; //@} /*! \name File i/o helper routines */ //@{ static std::string make_filename(const char *filename, const char *ext1, const char *ext2) ; //@} } ; /* OsiDylpSolverInterfaceTest.cpp */ /*! \relates OsiDylpSolverInterface \brief Unit test for OsiDylpSolverInterface. Performs various tests to see if ODSI is functioning correctly. Not an exhaustive test, but it'll (usually) catch gross problems. */ void OsiDylpSolverInterfaceUnitTest(const std::string & mpsDir, const std::string &netLibDir) ; #endif // OsiDylpSolverInterface_H DyLP-1.10.4/DyLP/src/OsiDylp/OsiDylpSimplex.cpp0000644000175200017520000005613211613141100017461 0ustar coincoin/* Copyright (C) 2010 Lou Hafer This file is a portion of the COIN/OSI interface for dylp and is licensed under the terms of the Eclipse Public License (EPL) This file provides the methods that implement the OsiSimplex Group 1 API (tableau access). */ #ifdef _MSC_VER /* Turn off compiler warning about long names */ # pragma warning(disable:4786) #endif /* Cut name lengths for readability. */ #define ODSI OsiDylpSolverInterface #define ODWSB OsiDylpWarmStartBasis #define CWSB CoinWarmStartBasis #include "OsiDylpSolverInterface.hpp" #include "OsiDylpWarmStartBasis.hpp" #include "OsiDylpMessages.hpp" namespace { char svnid[] UNUSED = "$Id$" ; } /*! \file OsiDylpSimplex.cpp This file contains dylp's implementation of the OsiSimplex API. */ namespace { /* Define constants for the integer status codes used by getBasisStatus and setBasisStatus so that we have them in one place. */ const int OsiSimplex_isFree = 0 ; const int OsiSimplex_basic = 1 ; const int OsiSimplex_nbub = 2 ; const int OsiSimplex_nblb = 3 ; } /* Helper methods */ /* This method checks that the current ODSI object owns the solver and arranges for ownership if possible. This shouldn't be a problem in context: The client should not be using the simplex API without first solving an LP, and that should guarantee that lpprob and a warm start exist. */ bool ODSI::ensureOwnership () const { CoinMessageHandler *hdl = messageHandler() ; assert(lpprob && lpprob->consys) ; /* We really should be in simplex mode 1 or 2, because we shouldn't be calling simplex API methods unless enableFactorisation or enableSimplexInterface has been called. And we really should be playing with a full deck, but that's less serious (and perhaps even reasonable, for one or two calls). */ if (simplex_state.simplex == 0) hdl->message(ODSI_NOTSIMPLEX,messages_) << CoinMessageEol ; if (lpprob->fullsys == false) hdl->message(ODSI_NOTFULLSYS,messages_) << CoinMessageEol ; /* Does this object already own the solver? If so, we're done. */ ODSI *dylp_owner = static_cast(dy_getOwner()) ; if (dylp_owner == this) return (true) ; /* If this ODSI object isn't the owner, install the active warm start in the lpprob object. It'd be possible to deal with a damaged basis by declaring activeBasis to be mutable. But really, is it a good idea? */ if (basis_ready == false || activeBasis.condition == ODSI::basisNone || activeBasis.condition == ODSI::basisDamaged) { simplex_state.simplex = 0 ; hdl->message(ODSI_BADACTIVEBASIS,messages_) << "missing or damaged" << CoinMessageEol ; return (false) ; } dylp_owner->detach_dylp() ; OsiDylpWarmStartBasis *wsb = dynamic_cast(activeBasis.basis) ; setBasisInLpprob(wsb,lpprob) ; /* Initialise the solver. After the call, dylp will be ready to pivot. I've argued with myself about forcing the full system here, but ultimately it's the user's choice. Except that other solvers simply don't offer this choice. */ lptols_struct lcl_tols = *tolerances ; lpopts_struct lcl_opts = *resolveOptions ; lcl_opts.context = cxLOAD ; lcl_opts.forcewarm = true ; if (dyio_isactive(local_logchn)) dy_setlogchn(local_logchn) ; dy_setgtxecho(resolve_gtxecho) ; dy_checkdefaults(consys,&lcl_opts,&lcl_tols) ; lpret_enum lpret = dylp(lpprob,&lcl_opts,&lcl_tols,0) ; /* Confirm that the result is as expected. */ bool retval = false ; dylp_owner = static_cast(dy_getOwner()) ; if (dylp_owner == this && flgon(lpprob->ctlopts,lpctlDYVALID)) { retval = true ; if (lpret != lpOPTIMAL) hdl->message(ODSI_NOTOPTIMAL,messages_) << CoinMessageEol ; } return (retval) ; } /* The methods required by the OsiSimplex API. */ /* Return ODSI's simplex capability. Defined codes are 0: unimplemented 1: tableau access methods only 2: pivot control methods */ int ODSI::canDoSimplexInterface () const { return (1) ; } /* In order for the tableau methods to work, it must be true that this ODSI object owns the solver and instructed it to retain data structures after the last call to solve. It's more efficient if the solver is working with the full constraint system, but not necessary. It's possible to force ownership here, but we can't guarantee it'll last. Consider the case where a client enables factorization, then clones the ODSI object and solves a related LP, then returns to make tableau inquiries. The client expects that the original solver object will be unaffected by the clone. The only way we can make that happen is to ensure the solver is ready at the head of each tableau query method. Given the scenario above, it might seem plausible to check for an active basis here, so that we have something to use in a warm start. But the client could call setBasisStatus next, supplying the necessary warm start. So we can't insist that it already be present. About all we can do is warn if the most recent result of calling dylp failed to produce an optimal result, or wasn't playing with a full deck, and that's only useful if we already own the solver. Returns: undefined. */ void ODSI::enableFactorization() const { CoinMessageHandler *hdl = messageHandler() ; /* Check if the solver is already in the correct state: this object owns it, and there are retained data structures. If that's true, check to see if we're optimal and playing with a full deck. These last two are optional but highly recommended. */ ODSI *dylp_owner = static_cast(dy_getOwner()) ; if (dylp_owner == this && flgon(lpprob->ctlopts,lpctlDYVALID)) { if (lp_retval != lpOPTIMAL) { hdl->message(ODSI_NOTOPTIMAL,messages_) << CoinMessageEol ; } if (lpprob->fullsys != true) { hdl->message(ODSI_NOTFULLSYS,messages_) << CoinMessageEol ; } } /* Do the bookkeeping. Take the attitude that if the client took the time to call enableFactorisation, they intend to do more than one or two queries, hence it's worthwhile to force the full system. */ simplex_state.simplex = 1 ; simplex_state.saved_fullsys = resolveOptions->fullsys ; resolveOptions->fullsys = true ; return ; } /* Undo enableFactorization. We really shouldn't be leaving simplex mode 1 if we weren't in it to begin with. Returns: undefined. */ void ODSI::disableFactorization() const { CoinMessageHandler *hdl = messageHandler() ; if (simplex_state.simplex != 1) hdl->message(ODSI_NOTSIMPLEX,messages_) << 1 << simplex_state.simplex << CoinMessageEol ; simplex_state.simplex = 0 ; resolveOptions->fullsys = simplex_state.saved_fullsys ; return ; } /* Check if an optimal basis is available. The question of whether an optimal basis is available isn't really dependent on being in either simplex mode, and a survey of usage says that people will use it prior to calling enableFactorization. Warn if we're not using the full system, just so the user is aware that their code is at best inefficient and possibly incorrect. Returns: true if an optimal basis is available, false otherwise. */ bool ODSI::basisIsAvailable () const { bool retval = false ; /* Check that the conditions for availability of an optimal basis are satisfied. The last call to the solver should have produced a result of lpOPTIMAL, the solution should be fresh (indicating no changes to the constraint system), and either we own the solver or we can reload it. */ if (lp_retval != lpOPTIMAL) return (retval) ; if (solnIsFresh == false) return (retval) ; ODSI *dylp_owner = static_cast(dy_getOwner()) ; if (dylp_owner == this && flgon(lpprob->ctlopts,lpctlDYVALID)) { retval = true ; } else if (activeBasis.basis != 0 && (activeBasis.condition == ODSI::basisFresh || activeBasis.condition == ODSI::basisModified)) { retval = true ; } /* If so, check whether we're in fullsys mode and warn the user if it's otherwise. */ if (retval == true) { CoinMessageHandler *hdl = messageHandler() ; if (lpprob->fullsys == false) hdl->message(ODSI_NOTFULLSYS,messages_) << CoinMessageEol ; } return (retval) ; } /* Return row and column status coded as integers. The strategy here is to ask for a warm start and do the format conversion. ODSI::getWarmStart will never consult dylp, so there's no need to ensure ownership of the solver here. */ void ODSI::getBasisStatus (int *archStatusInt, int *logStatusInt) const { ODWSB *wsb = 0 ; /* Obtain a basis. */ wsb = dynamic_cast(getWarmStart()) ; /* And walk through it, converting the entries. */ int n = wsb->getNumStructural() ; int m = wsb->getNumArtificial() ; const char *archStatus = wsb->getStructuralStatus() ; const char *logStatus = wsb->getArtificialStatus() ; for (int j = 0 ; j < n ; j++) { CWSB::Status statj ; statj = getStatus(archStatus,j) ; switch (statj) { case CWSB::isFree: { archStatusInt[j] = OsiSimplex_isFree ; break ; } case CWSB::basic: { archStatusInt[j] = OsiSimplex_basic ; break ; } case CWSB::atUpperBound: { archStatusInt[j] = OsiSimplex_nbub ; break ; } case CWSB::atLowerBound: { archStatusInt[j] = OsiSimplex_nblb ; break ; } default: { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_CONFUSION,messages_) << __LINE__ << CoinMessageEol ; break ; } } } /* A free logical is an error; let it fall into the default. */ for (int i = 0 ; i < m ; i++) { CWSB::Status stati ; stati = getStatus(logStatus,i) ; switch (stati) { case CWSB::basic: { logStatusInt[i] = OsiSimplex_basic ; break ; } case CWSB::atUpperBound: { logStatusInt[i] = OsiSimplex_nbub ; break ; } case CWSB::atLowerBound: { logStatusInt[i] = OsiSimplex_nblb ; break ; } default: { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_CONFUSION,messages_) << __LINE__ << CoinMessageEol ; break ; } } } delete wsb ; return ; } /* Set a warm start and call resolve to update the basis factorisation and solution vectors. This does require a call to dylp, so we need to establish ownership. But since we're about to set a basis, we don't care. We can just call resolve and let it deal with the details. Setting the warm start is a local matter for this ODSI object. */ int ODSI::setBasisStatus (const int *archStatusInt, const int *logStatusInt) { /* Translate the status vectors into the appropriate format for a warm start. CWSB status vectors are packed four per byte. */ int n = getNumCols() ; int m = getNumRows() ; char *archStatus = new char[(n+3)/4] ; char *logStatus = new char[(m+3)/4] ; for (int j = 0 ; j < n ; j++) { int statj ; statj = archStatusInt[j] ; switch (statj) { case OsiSimplex_isFree: { setStatus(archStatus,j,CWSB::isFree) ; break ; } case OsiSimplex_basic: { setStatus(archStatus,j,CWSB::basic) ; break ; } case OsiSimplex_nbub: { setStatus(archStatus,j,CWSB::atUpperBound) ; break ; } case OsiSimplex_nblb: { setStatus(archStatus,j,CWSB::atLowerBound) ; break ; } default: { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_CONFUSION,messages_) << __LINE__ << CoinMessageEol ; break ; } } } /* A free logical is an error; let it fall into the default. */ for (int i = 0 ; i < m ; i++) { int stati ; stati = logStatusInt[i] ; switch (stati) { case OsiSimplex_basic: { setStatus(logStatus,i,CWSB::basic) ; break ; } case OsiSimplex_nbub: { setStatus(logStatus,i,CWSB::atUpperBound) ; break ; } case OsiSimplex_nblb: { setStatus(logStatus,i,CWSB::atLowerBound) ; break ; } default: { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_CONFUSION,messages_) << __LINE__ << CoinMessageEol ; break ; } } } /* Create a CWSB object and feed it to setWarmStart. */ CoinWarmStartBasis wsb(n,m,archStatus,logStatus) ; delete[] archStatus ; delete[] logStatus ; bool result = setWarmStart(&wsb) ; if (result == false) { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_CWSBREJECT,messages_) << CoinMessageEol ; return (1) ; } /* And resolve. */ resolve() ; /* Confirm that the result is as expected. */ int retval = 0 ; ODSI *dylp_owner = static_cast(dy_getOwner()) ; if (dylp_owner == this && flgon(lpprob->ctlopts,lpctlDYVALID)) { CoinMessageHandler *hdl = messageHandler() ; if (lp_retval == lpOPTIMAL) hdl->message(ODSI_NOTOPTIMAL,messages_) << CoinMessageEol ; if (lpprob->fullsys == false) hdl->message(ODSI_NOTFULLSYS,messages_) << CoinMessageEol ; retval = 1 ; } return (retval) ; } /* Calculate duals and reduced costs for a given objective function, without changing the values held in this ODSI. We have to consult dylp to calculate y = cinv(B) (the row duals), but there's no point in going there for the reduced costs --- it'd be a make-work project translating in and out of dylp's interior frame of reference. Note that the algebra here is independent of maximisation/minimisation. It's only when we get to interpretation of the results (`Are we optimal?') that maximisation or minimisation is relevant. */ void ODSI::getReducedGradient (double *cbar, double *y, const double *c) const { /* Make sure this object owns dylp and it's ready to work. */ bool retval = ensureOwnership() ; if (retval == false) { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_BADSTATE,messages_) << "tableau queries" << CoinMessageEol ; throw CoinError("Cannot query solver for row duals.", "getReducedGradient","OsiDylpSolverInterface", "OsiDylpSimplex",__LINE__) ; } /* Ask for the row duals. Because dylp uses 1-based indexing, we really need a vector of size m+1 for y. It's not safe to pass in the vector provided as a parameter; let dylp do the allocation. For the objective we have the same issue, but it's not written and we can safely fudge the address. */ int n = getNumCols() ; int m = getNumRows() ; double *oneBased = 0 ; dy_rowDualsGivenC(lpprob,&oneBased,idx_vec(c),false) ; CoinCopyN(&oneBased[1],m,y) ; FREE(oneBased) ; /* Now calculate the reduced costs. */ CoinMemcpyN(c,n,cbar) ; pkvec_struct *ai = pkvec_new(n) ; for (int i = 0 ; i < m ; i++) { if (y[i] != 0) { consys_getrow_pk(consys,idx(i),&ai) ; for (int l = 0 ; l < ai->cnt ; l++) { int j = inv(ai->coeffs[l].ndx) ; cbar[j] -= y[i]*ai->coeffs[l].val ; } } } if (ai) pkvec_free(ai) ; /* Groom the vector to eliminate tiny values and we're done. */ for (int j = 0 ; j < n ; j++) setcleanzero(cbar[j],tolerances->cost) ; return ; } #if 0 /* Delete this from the OsiSimplex interface 100828. Keep the code around for a bit to see if anyone yells. I put out an announcement of deletion 100821, but sometimes it takes a whack upside the head to get peoples' attention. Calculate duals and reduced costs for a given objective function, but do change the values held in this ODSI. Really, all this amounts to is a call to getReducedGradient, plus the necessary bookkeeping to update cached values and tell dylp that the objective has changed, should we happen to call it. The approach here is not quite as efficient as it could be, but avoids duplicating the code of ODSI::setObjective. The alternative approach would write the duals and cbar directly to _row_price and _col_cbar, respectively, by passing them as parameters to getReducedGradient. This would avoid the cost of tossing out the current vectors and allocating new space. The cost of reallocation seems a reasonable price for better code structure. */ void ODSI::setObjectiveAndRefresh (const double *c) { int n = getNumCols() ; int m = getNumRows() ; double *cbar = new double[n] ; double *y = new double[m] ; /* Do the calculation. getReducedGradient compensates for objective sense, so don't fuss about that just yet. */ getReducedGradient(cbar,y,c) ; /* Write the new objective into the ODSI object, with all the necessary bookkeeping. Then restore the cached vectors. */ setObjective(c) ; _col_cbar = cbar ; _row_price = y ; return ; } #endif /* Return the vector of basic variable indices. We don't have to ask dylp; this information is available in lpprob.basis. Dylp reports basis information only for the active constraints, so the strategy here is to initialise the vector supplied as a parameter to an all-logical basis. Then drop in the entries mentioned in lpprob.basis. Dylp reports the logical for constraint i as -i; translate to the standard coding of n+i. Don't forget to translate dylp's 1-based indices to Coin's 0-based indices. */ void ODSI::getBasics (int *index) const { int n = getNumCols() ; int m = getNumRows() ; /* Initialise index as if we have an all-logical basis, with all logicals in natural position. */ CoinIotaN(index,m,n) ; /* Now correct the entries mentioned in lpprob.basis. */ int basislen = lpprob->basis->len ; basisel_struct *els = lpprob->basis->el ; for (int k = 1 ; k <= basislen ; k++) { int i = inv(els[k].cndx) ; int j = els[k].vndx ; /* std::cout << " Dylp says x<" << els[k].vndx << "> basic for constraint " << els[k].cndx << "." << std::endl ; */ if (j < 0) { j = n+(-j) ; } index[i] = inv(j) ; } return ; } /* Ask dylp for a column of the basis inverse, beta = inv(B)e. (Note that this is not the same as asking for the column matching a particular basic variable x; rather, we're asking for the column for the variable that's basic for constraint k.) */ void ODSI::getBInvCol (int col, double *betak) const { const bool verbose = false ; /* Make sure this object owns dylp and it's ready to work. */ bool retval = ensureOwnership() ; if (retval == false) { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_BADSTATE,messages_) << "tableau queries" << CoinMessageEol ; throw CoinError("Cannot query solver for column of basis inverse.", "getBInvCol","OsiDylpSolverInterface", "OsiDylpSimplex",__LINE__) ; } /* Call dylp to retrieve beta and report the result. Because dylp uses 1-based indexing, we really need an array of size (m+1). It's not safe to pass in &betak[-1]. */ if (verbose) std::cout << " Asking dylp for column " << idx(col) << "." << std::endl ; double *oneBased = 0 ; retval = dy_betak(lpprob,idx(col),&oneBased) ; if (retval == false) { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_FAILEDCALL,messages_) << "getBInvCol" << "dy_betak" << CoinMessageEol ; throw CoinError("Failed query to solver for column of basis inverse.", "getBInvCol","OsiDylpSolverInterface", "OsiDylpSimplex",__LINE__) ; } int m = getNumRows() ; CoinCopyN(&oneBased[1],m,betak) ; FREE(oneBased) ; return ; } /* Ask dylp for a row of the basis inverse, beta = einv(B) */ void ODSI::getBInvRow (int row, double *betai) const { const bool verbose = false ; /* Make sure this object owns dylp and it's ready to work. */ bool retval = ensureOwnership() ; if (retval == false) { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_BADSTATE,messages_) << "tableau queries" << CoinMessageEol ; throw CoinError("Cannot query solver for row of basis inverse.", "getBInvRow","OsiDylpSolverInterface", "OsiDylpSimplex",__LINE__) ; } /* Call dylp to retrieve beta and report the result. Because dylp uses 1-based indexing, we really need an array of size (m+1). It's not safe to pass in &betak[-1]. */ if (verbose) std::cout << " Asking dylp for row " << idx(row) << "." << std::endl ; double *oneBased = 0 ; retval = dy_betai(lpprob,idx(row),&oneBased) ; if (retval == false) { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_FAILEDCALL,messages_) << "getBInvRow" << "dy_betai" << CoinMessageEol ; throw CoinError("Failed query to solver for row of basis inverse.", "getBInvRow","OsiDylpSolverInterface", "OsiDylpSimplex",__LINE__) ; } int m = getNumRows() ; CoinCopyN(&oneBased[1],m,betai) ; FREE(oneBased) ; return ; } /* Ask dylp for a column of the tableau, abar = inv(B)a. */ void ODSI::getBInvACol (int col, double *abarj) const { const bool verbose = false ; /* Make sure this object owns dylp and it's ready to work. */ bool retval = ensureOwnership() ; if (retval == false) { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_BADSTATE,messages_) << "tableau queries" << CoinMessageEol ; throw CoinError("Cannot query solver for tableau column.", "getBInvACol","OsiDylpSolverInterface", "OsiDylpSimplex",__LINE__) ; } /* Call dylp to retrieve abar and report the result. Because dylp uses 1-based indexing, we really need an array of size (m+1). It's not safe to pass in &abarj[-1]. */ if (verbose) std::cout << " Asking dylp for column " << idx(col) << "." << std::endl ; double *oneBased = 0 ; retval = dy_abarj(lpprob,idx(col),&oneBased) ; if (retval == false) { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_FAILEDCALL,messages_) << "getBInvACol" << "dy_abarj" << CoinMessageEol ; throw CoinError("Failed query to solver for tableau column.", "getBInvACol","OsiDylpSolverInterface", "OsiDylpSimplex",__LINE__) ; } int m = getNumRows() ; CoinCopyN(&oneBased[1],m,abarj) ; FREE(oneBased) ; return ; } /* Ask dylp for a row of the tableau, abar = e(inv(B)(B N I)). Osi wants this returned in two pieces: inv(B)(B N) and (optionally) inv(B)I. Clearly, the last component is simply einv(B) = beta. */ void ODSI::getBInvARow (int row, double *abari, double *betai) const { const bool verbose = false ; /* Make sure this object owns dylp and it's ready to work. */ bool retval = ensureOwnership() ; if (retval == false) { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_BADSTATE,messages_) << "tableau queries" << CoinMessageEol ; throw CoinError("Cannot query solver for tableau row.", "getBInvRow","OsiDylpSolverInterface", "OsiDylpSimplex",__LINE__) ; } /* Call dylp to retrieve abar and beta and report the result. Because dylp uses 1-based indexing, we need arrays of size (n+1). It's not safe to pass in &foo[-1], so let dylp allocate its own arrays. */ if (verbose) std::cout << " Asking dylp for row " << idx(row) << "." << std::endl ; double *oneBasedAbari = 0 ; double *oneBasedBetai = 0 ; retval = dy_abari(lpprob,idx(row),&oneBasedAbari,&oneBasedBetai) ; if (retval == false) { CoinMessageHandler *hdl = messageHandler() ; hdl->message(ODSI_FAILEDCALL,messages_) << "getBInvARow" << "dy_abari" << CoinMessageEol ; throw CoinError("Failed query to solver for tableau row.", "getBInvARow","OsiDylpSolverInterface", "OsiDylpSimplex",__LINE__) ; } int n = getNumCols() ; int m = getNumRows() ; CoinCopyN(&oneBasedAbari[1],n,abari) ; if (betai != 0) { CoinCopyN(&oneBasedBetai[1],m,betai) ; } FREE(oneBasedAbari) ; FREE(oneBasedBetai) ; return ; } DyLP-1.10.4/DyLP/src/OsiDylp/osi-dylp-uninstalled.pc.in0000644000175200017520000000046511507672353021064 0ustar coincoinprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiDylp Name: OsiDylp Description: COIN-OR Open Solver Interface for DyLP URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiDylp.la @OSIDYLPLIB_PCLIBS@ Cflags: -I@abs_source_dir@/src/OsiDylp Requires: dylp @OSIDYLPLIB_PCREQUIRES@ DyLP-1.10.4/DyLP/src/OsiDylp/osi-dylp.pc.in0000644000175200017520000000044311510106361016521 0ustar coincoinprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiDylp Description: COIN-OR Open Solver Interface for DyLP URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiDylp Cflags: -I${includedir} Requires: osi dylp DyLP-1.10.4/DyLP/config.guess0000755000175200017520000012706311503442760014216 0ustar coincoin#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-05-17' # 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 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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 Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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 # 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 tupples: *-*-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 __ELF__ >/dev/null 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 ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-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'` exit ;; 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-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-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-unknown-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 ;; 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:SunOS:5.*:* | ix86xen:SunOS:5.*:*) echo i386-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-unknown-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:*:[45]) 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 __LP64__ >/dev/null 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}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-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-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-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-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu 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 ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${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-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa:Linux:*:*) echo xtensa-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; 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}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-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}-unknown-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 i386. echo i386-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-unknown-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; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-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-unknown-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 ;; 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 case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac 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 ;; 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}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-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-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-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 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 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: DyLP-1.10.4/DyLP/MSVisualStudio/0000755000175200017520000000000013434203622014555 5ustar coincoinDyLP-1.10.4/DyLP/MSVisualStudio/v9/0000755000175200017520000000000013434203622015113 5ustar coincoinDyLP-1.10.4/DyLP/MSVisualStudio/v9/libDylpStdLib/0000755000175200017520000000000013434203622017614 5ustar coincoinDyLP-1.10.4/DyLP/MSVisualStudio/v9/libDylpStdLib/libDylpStdLib.vcproj0000644000175200017520000001725111653650051023553 0ustar coincoin DyLP-1.10.4/DyLP/MSVisualStudio/v9/Dylp.sln0000644000175200017520000002050311475325057016553 0ustar coincoin Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libDylpStd", "libDylpStdLib\libDylpStdLib.vcproj", "{11A895E6-021D-4F8C-ACF7-860D695AC1C9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libDylp", "libDylp\libDylp.vcproj", "{2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}" ProjectSection(ProjectDependencies) = postProject {11A895E6-021D-4F8C-ACF7-860D695AC1C9} = {11A895E6-021D-4F8C-ACF7-860D695AC1C9} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DylpUnitTest", "DylpUnitTest\DylpUnitTest.vcproj", "{2E037744-DCA1-46FF-8B98-B2993C7C5F4C}" ProjectSection(ProjectDependencies) = postProject {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} = {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} {11A895E6-021D-4F8C-ACF7-860D695AC1C9} = {11A895E6-021D-4F8C-ACF7-860D695AC1C9} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "..\..\..\CoinUtils\MSVisualStudio\v9\libCoinUtils\libCoinUtils.vcproj", "{C4867F15-438D-4FF8-8388-62FBAAA9786C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsi", "..\..\..\Osi\MSVisualStudio\v9\libOsi\libOsi.vcproj", "{7D98E2CB-876E-4F75-9F71-77D3FE87E149}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiCommonTest", "..\..\..\Osi\MSVisualStudio\v9\libOsiCommonTest\libOsiCommonTest.vcproj", "{109D6E6F-6D91-460F-86AE-DF27400E09A9}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiDylp", "libOsiDylp\libOsiDylp.vcproj", "{4B701E10-C331-454F-A76F-2EC8D2260535}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} = {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} {11A895E6-021D-4F8C-ACF7-860D695AC1C9} = {11A895E6-021D-4F8C-ACF7-860D695AC1C9} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiDylpUnitTest", "OsiDylpUnitTest\OsiDylpUnitTest.vcproj", "{4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}" ProjectSection(ProjectDependencies) = postProject {4B701E10-C331-454F-A76F-2EC8D2260535} = {4B701E10-C331-454F-A76F-2EC8D2260535} {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} = {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} {109D6E6F-6D91-460F-86AE-DF27400E09A9} = {109D6E6F-6D91-460F-86AE-DF27400E09A9} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} {11A895E6-021D-4F8C-ACF7-860D695AC1C9} = {11A895E6-021D-4F8C-ACF7-860D695AC1C9} EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|Win32.ActiveCfg = Debug|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|Win32.Build.0 = Debug|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|x64.ActiveCfg = Debug|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|x64.Build.0 = Debug|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|Win32.ActiveCfg = Release|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|Win32.Build.0 = Release|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|x64.ActiveCfg = Release|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|x64.Build.0 = Release|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|Win32.ActiveCfg = Debug|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|Win32.Build.0 = Debug|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|x64.ActiveCfg = Debug|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|x64.Build.0 = Debug|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|Win32.ActiveCfg = Release|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|Win32.Build.0 = Release|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|x64.ActiveCfg = Release|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|x64.Build.0 = Release|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|Win32.ActiveCfg = Debug|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|Win32.Build.0 = Debug|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|x64.ActiveCfg = Debug|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|x64.Build.0 = Debug|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|Win32.ActiveCfg = Release|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|Win32.Build.0 = Release|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|x64.ActiveCfg = Release|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|x64.Build.0 = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.ActiveCfg = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.Build.0 = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.ActiveCfg = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.Build.0 = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.ActiveCfg = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.Build.0 = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.ActiveCfg = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.Build.0 = Release|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.ActiveCfg = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.Build.0 = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.ActiveCfg = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.Build.0 = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.ActiveCfg = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.Build.0 = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.ActiveCfg = Release|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.Build.0 = Release|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.ActiveCfg = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.Build.0 = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.ActiveCfg = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.Build.0 = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.ActiveCfg = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.Build.0 = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.ActiveCfg = Release|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.Build.0 = Release|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|Win32.ActiveCfg = Debug|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|Win32.Build.0 = Debug|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|x64.ActiveCfg = Debug|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|x64.Build.0 = Debug|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|Win32.ActiveCfg = Release|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|Win32.Build.0 = Release|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|x64.ActiveCfg = Release|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|x64.Build.0 = Release|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|Win32.ActiveCfg = Debug|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|Win32.Build.0 = Debug|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|x64.ActiveCfg = Debug|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|x64.Build.0 = Debug|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|Win32.ActiveCfg = Release|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|Win32.Build.0 = Release|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|x64.ActiveCfg = Release|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal DyLP-1.10.4/DyLP/MSVisualStudio/v9/OsiDylpUnitTest/0000755000175200017520000000000013434203622020176 5ustar coincoinDyLP-1.10.4/DyLP/MSVisualStudio/v9/OsiDylpUnitTest/OsiDylpUnitTest.vcproj0000644000175200017520000002125311475325057024523 0ustar coincoin DyLP-1.10.4/DyLP/MSVisualStudio/v9/DylpUnitTest/0000755000175200017520000000000013434203622017523 5ustar coincoinDyLP-1.10.4/DyLP/MSVisualStudio/v9/DylpUnitTest/DylpUnitTest.vcproj0000644000175200017520000002036111475325057023374 0ustar coincoin DyLP-1.10.4/DyLP/MSVisualStudio/v9/libOsiDylp/0000755000175200017520000000000013434203622017165 5ustar coincoinDyLP-1.10.4/DyLP/MSVisualStudio/v9/libOsiDylp/libOsiDylp.vcproj0000644000175200017520000002016411475325057022501 0ustar coincoin DyLP-1.10.4/DyLP/MSVisualStudio/v9/libDylp/0000755000175200017520000000000013434203622016512 5ustar coincoinDyLP-1.10.4/DyLP/MSVisualStudio/v9/libDylp/libDylp.vcproj0000644000175200017520000002441711653650051021351 0ustar coincoin DyLP-1.10.4/DyLP/MSVisualStudio/v9alt/0000755000175200017520000000000013434203622015614 5ustar coincoinDyLP-1.10.4/DyLP/MSVisualStudio/v9alt/Dylp.sln0000644000175200017520000001540411536744761017265 0ustar coincoin Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libDylpStd", "libDylpStdLib.vcproj", "{11A895E6-021D-4F8C-ACF7-860D695AC1C9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libDylp", "libDylp.vcproj", "{2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}" ProjectSection(ProjectDependencies) = postProject {11A895E6-021D-4F8C-ACF7-860D695AC1C9} = {11A895E6-021D-4F8C-ACF7-860D695AC1C9} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DylpUnitTest", "DylpUnitTest.vcproj", "{2E037744-DCA1-46FF-8B98-B2993C7C5F4C}" ProjectSection(ProjectDependencies) = postProject {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} = {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} {11A895E6-021D-4F8C-ACF7-860D695AC1C9} = {11A895E6-021D-4F8C-ACF7-860D695AC1C9} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiDylp", "libOsiDylp.vcproj", "{4B701E10-C331-454F-A76F-2EC8D2260535}" ProjectSection(ProjectDependencies) = postProject {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} = {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} {11A895E6-021D-4F8C-ACF7-860D695AC1C9} = {11A895E6-021D-4F8C-ACF7-860D695AC1C9} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiDylpUnitTest", "OsiDylpUnitTest.vcproj", "{4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}" ProjectSection(ProjectDependencies) = postProject {4B701E10-C331-454F-A76F-2EC8D2260535} = {4B701E10-C331-454F-A76F-2EC8D2260535} {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} = {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} {11A895E6-021D-4F8C-ACF7-860D695AC1C9} = {11A895E6-021D-4F8C-ACF7-860D695AC1C9} EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 DebugDLL|Win32 = DebugDLL|Win32 DebugDLL|x64 = DebugDLL|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|Win32.ActiveCfg = Debug|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|Win32.Build.0 = Debug|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|x64.ActiveCfg = Debug|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|x64.Build.0 = Debug|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.DebugDLL|x64.Build.0 = DebugDLL|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|Win32.ActiveCfg = Release|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|Win32.Build.0 = Release|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|x64.ActiveCfg = Release|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|x64.Build.0 = Release|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|Win32.ActiveCfg = Debug|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|Win32.Build.0 = Debug|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|x64.ActiveCfg = Debug|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|x64.Build.0 = Debug|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.DebugDLL|x64.Build.0 = DebugDLL|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|Win32.ActiveCfg = Release|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|Win32.Build.0 = Release|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|x64.ActiveCfg = Release|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|x64.Build.0 = Release|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|Win32.ActiveCfg = Debug|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|Win32.Build.0 = Debug|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|x64.ActiveCfg = Debug|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|x64.Build.0 = Debug|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.DebugDLL|x64.Build.0 = DebugDLL|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|Win32.ActiveCfg = Release|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|Win32.Build.0 = Release|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|x64.ActiveCfg = Release|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|x64.Build.0 = Release|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|Win32.ActiveCfg = Debug|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|Win32.Build.0 = Debug|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|x64.ActiveCfg = Debug|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|x64.Build.0 = Debug|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.DebugDLL|x64.Build.0 = DebugDLL|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|Win32.ActiveCfg = Release|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|Win32.Build.0 = Release|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|x64.ActiveCfg = Release|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|x64.Build.0 = Release|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|Win32.ActiveCfg = Debug|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|Win32.Build.0 = Debug|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|x64.ActiveCfg = Debug|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|x64.Build.0 = Debug|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.DebugDLL|x64.Build.0 = DebugDLL|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|Win32.ActiveCfg = Release|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|Win32.Build.0 = Release|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|x64.ActiveCfg = Release|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal DyLP-1.10.4/DyLP/MSVisualStudio/v9alt/dylp.vsprops0000644000175200017520000000156311444267774020250 0ustar coincoin DyLP-1.10.4/DyLP/MSVisualStudio/v9alt/libDylpStdLib.vcproj0000644000175200017520000002362211527112062021545 0ustar coincoin DyLP-1.10.4/DyLP/MSVisualStudio/v9alt/OsiDylpUnitTest.vcproj0000644000175200017520000002540511536744761022151 0ustar coincoin DyLP-1.10.4/DyLP/MSVisualStudio/v9alt/DylpUnitTest.vcproj0000644000175200017520000002421211536744761021471 0ustar coincoin DyLP-1.10.4/DyLP/MSVisualStudio/v9alt/genDefForDylp.ps10000644000175200017520000001325511527112062020735 0ustar coincoin# Usage: genDefForDylp.ps1 # should be $(IntDir) in VS # is OsiDylp # Eventually, this script may expand to handle the base libDylp, but for now # I'm going with a hand-crafted .def file there. Dylp is plain old C, and it's # easy to maintain the .def file by hand. $VSPathComponents = ,'C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE' $VSPathComponents += 'C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN' $VSPathComponents += 'C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools' $VSPathComponents += 'C:\Windows\Microsoft.NET\Framework\v3.5' $VSPathComponents += 'C:\Windows\Microsoft.NET\Framework\v2.0.50727' $VSPathComponents += 'C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\VCPackages' $VSPathComponents += 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin' echo "Checking path for VS directories ..." foreach ($VSComponent in $VSPathComponents) { if ("$env:PATH" -notlike "*$VSComponent*") { echo "Prepending $VSComponent" $env:PATH = "$VSComponent;"+$env:PATH } } $objPath = $Args[0] $tgtBase = $Args[1] "Looking in $objPath ..." $objFiles = get-item -path $objPath\OsiDylp*.obj if (!$objfiles) { Out-Default -InputObject "No file selected" return 1 } $babyString = ".*OsiDylp.*" $libTgt = "lib"+$tgtBase $tgtDLL = $libTgt+".dll" $tgtDef = $libTgt+".def" echo "Target is $tgtDLL" $defFile = new-item -path $objPath -name $tgtDef -type "file" -force add-content -path $defFile -value "LIBRARY $libTgt`r`n`r`nEXPORTS" $tmpfile = "$objPath\gendef.tmp.out" # "Using $tmpfile" $totalSyms = 0 echo "Processing files ... " foreach ($file in $objFiles) { # get-member -inputobject $file $fileBase = $file.basename write-output $fileBase # The following line works just fine when this script is invoked directly # from powershell, and indirectly from a cmd window. But when it's invoked # as the pre-link event in VS, VS does something to output redirection that # causes all output to appear in the VS output window. Sending the dumpbin # output to a file fixes the problem until I can figure out how to block # VS's redirection of output. # $symbols = dumpbin /symbols $file $junk = dumpbin /OUT:$tmpfile /symbols $file $symbols = get-content $tmpfile # Eliminate Static symbols. Likewise labels. $symbols = $symbols -notmatch '^.*Static[^|]*\|.*$' $symbols = $symbols -notmatch '^.*Label[^|]*\|.*$' # Trim off the junk fore and aft. Some lines have no trailing information, # hence the second pattern $symbols = $symbols -replace '^.*\| ([^ ]+) .*$','$1' $symbols = $symbols -replace '^.*\| ([^ ]+)$','$1' # Lines we want will have @@ in the decorated name $filteredSymbols = $symbols -like "*@@*" $symLen = $filteredSymbols.length "Grabbed $symLen symbols" # Anything with "...@@$$..." seems to be invalid (either an artifact or a # system routine). But on occasion (template classes) it seems that the # required signature (@@$$F -> @@) is needed but isn't generated. So let's # try synthesizing it on the fly here. $filteredSymbols = $filteredSymbols -replace '@@\$\$F','@@' $filteredSymbols = $filteredSymbols -notlike '*@@$$*' # Lines with symbols that start with _ look to be compiler artifacts. Some # are acceptable to the linker, some not. It doesn't seem necessary to # export any of them. There's considerable, but not total, overlap between # this class of symbols and the previous class. $filteredSymbols = $filteredSymbols -notmatch '^_.*' # These are not acceptable to the linker, no specific reason given. $filteredSymbols = $filteredSymbols -notmatch '^\?\?.@\$\$.*' # Lines with symbols that start with ??_[EG] are deleting destructors # (whatever that is) and should not be exported. $filteredSymbols = $filteredSymbols -notmatch '^\?\?_[EG].*' $symLen = $filteredSymbols.length "Initial filtering leaves $symLen" # These next filter lines may be needed because of mixed C/C++ code (Dylp's # code base is C, then there's OsiDylp in C++). # There's another lot of symbols that appeared in OsiDylp starting with # $.*$, where the intervening text is unwind, pdata, or similar. See if we # can get rid of them. # $filteredSymbols = $filteredSymbols -notmatch '^\$[^$][^$]*\$' # And then there's another lot that seem to be run time data (rtcName, # rtcFrameData, rtcVarDesc). Where does this stuff come from? # $filteredSymbols = $filteredSymbols -notmatch 'Z\$rtc[FNV].*$' # And then a bunch of symbols that start with ?dtor$ or ?catch$. # $filteredSymbols = $filteredSymbols -notmatch '^\?dtor\$' # $filteredSymbols = $filteredSymbols -notmatch '^\?catch\$' # $symLen = $filteredSymbols.length # "C/C++ filtering leaves $symLen" # std:: is not our problem, but we have to be a little bit careful not # to throw out the baby with the bathwater. It's not possible (as best # I can see) to distinguish std:: in a parameter vs. std:: as the name # space for the method without knowing a lot more about the mangling # algorithm. Toss the bath, then retrieve the baby. $notStd = $filteredSymbols -notlike "*@std@@*" $bathwaterAndBaby = $filteredSymbols -like "*@std@@*" $baby = $bathwaterAndBaby -match "$babyString" $filteredSymbols = $notStd+$baby "Removing std:: leaves $symLen" $filteredSymbols = $filteredSymbols | sort-object -unique $symLen = $filteredSymbols.length "$symLen unique symbols" $totalSyms += $symLen add-content -path $defFile -value "`r`n; $fileBase" add-content -path $defFile -value $filteredSymbols } remove-item $tmpfile "Collected $totalSyms symbols." return DyLP-1.10.4/DyLP/MSVisualStudio/v9alt/libDylp.def0000644000175200017520000000275211527112062017677 0ustar coincoinLIBRARY "libDylp" EXPORTS dyio_chgerrlog dyio_closefile dyio_flushio dyio_isactive dyio_ioinit dyio_ioterm dyio_openfile dyio_outchr dyio_outfmt dyio_setmode errinit errterm errmsg warn dy_defaults dy_checkdefaults dy_setprintopts dy_processcmds dylp dy_getOwner dy_freebasis dy_initbasis dy_dupbasis dy_pricenbvars dy_pricedualpiv dy_abarj dy_betaj dy_betak dy_betai dy_abari dy_primalRays dy_dualRays dy_colDuals dy_rowDuals dy_rowDualsGivenC dy_colPrimals dy_rowPrimals dy_logPrimals dy_colStatus dy_logStatus dy_expandxopt dy_prtlpret dy_prtvstat dy_dumpcompact dy_setlogchn dy_setgtxecho dy_initstats dy_dumpstats dy_freestats dy_freesoln consys_create consys_dupsys consys_free consys_realloc consys_attach consys_update consys_detach consys_addcol_pk consys_addcol_ex consys_addrow_pk consys_getcol_pk consys_getcol_ex consys_getrow_pk consys_getrow_ex consys_delcol consys_delrow consys_delrow_stable consys_setcoeff consys_getcoeff consys_logicals consys_gcdrow consys_dotcol consys_dotrow consys_1normrow consys_ssqrow consys_2normrow consys_infnormrow consys_1normcol consys_ssqcol consys_2normcol consys_infnormcol consys_mulrow consys_divrow consys_accumcol consys_mulaccumcol consys_evalsys consys_geomscale consys_equiscale consys_applyscale consys_prtvartyp consys_prtcontyp consys_assocnme consys_conbndnme consys_conbndval consys_chgnme consys_nme pkvec_free pkvec_new exvec_1norm DyLP-1.10.4/DyLP/MSVisualStudio/v9alt/libOsiDylp.vcproj0000644000175200017520000002700511527112062021115 0ustar coincoin DyLP-1.10.4/DyLP/MSVisualStudio/v9alt/osidylp.vsprops0000644000175200017520000000131411444015036020733 0ustar coincoin DyLP-1.10.4/DyLP/MSVisualStudio/v9alt/libDylp.vcproj0000644000175200017520000003405611527112062020446 0ustar coincoin DyLP-1.10.4/DyLP/MSVisualStudio/v10/0000755000175200017520000000000013434203622015163 5ustar coincoinDyLP-1.10.4/DyLP/MSVisualStudio/v10/libOsiDylp/0000755000175200017520000000000013434203622017235 5ustar coincoinDyLP-1.10.4/DyLP/MSVisualStudio/v10/libOsiDylp/libOsiDylp.vcxproj0000644000175200017520000002307012745427232022737 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 {4B701E10-C331-454F-A76F-2EC8D2260535} libOsiDylp StaticLibrary StaticLibrary v90 StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\src\DylpStdLib;..\..\..\src\Dylp;..\..\..\src\OsiDylp;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\inc;..\..\..\..\CoinUtils\inc;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) ODSI_PARANOIA=1;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_LIB;DYLP_ERRMSGDIR="..\\..\\..\\src\\Dylp\\\";%(PreprocessorDefinitions) true EnableFastChecks EditAndContinue X64 ..\..\..\src\DylpStdLib;..\..\..\src\Dylp;..\..\..\src\OsiDylp;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\inc;..\..\..\..\CoinUtils\inc;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) ODSI_PARANOIA=1;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_LIB;DYLP_ERRMSGDIR="..\\..\\..\\src\\Dylp\\\";%(PreprocessorDefinitions) true EnableFastChecks ProgramDatabase true ..\..\..\src\DylpStdLib;..\..\..\src\Dylp;..\..\..\src\OsiDylp;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\inc;..\..\..\..\CoinUtils\inc;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) ODSI_PARANOIA=1;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_LIB;DYLP_ERRMSGDIR="..\\..\\..\\src\\Dylp\\\";%(PreprocessorDefinitions) true ProgramDatabase X64 true ..\..\..\src\DylpStdLib;..\..\..\src\Dylp;..\..\..\src\OsiDylp;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\inc;..\..\..\..\CoinUtils\inc;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) ODSI_PARANOIA=1;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_LIB;DYLP_ERRMSGDIR="..\\..\\..\\src\\Dylp\\\";%(PreprocessorDefinitions) ProgramDatabase Default DyLP-1.10.4/DyLP/MSVisualStudio/v10/libDylp/0000755000175200017520000000000013434203622016562 5ustar coincoinDyLP-1.10.4/DyLP/MSVisualStudio/v10/libDylp/libDylp.vcxproj0000644000175200017520000002767112745427232021624 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} libDylp Win32Proj StaticLibrary StaticLibrary v90 StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\src\DylpStdLib;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;_DEBUG;_WINDOWS;_USRDLL;LIBDYLP_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks EditAndContinue X64 ..\..\..\src\DylpStdLib;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;_DEBUG;_WINDOWS;_USRDLL;LIBDYLP_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks ProgramDatabase true ..\..\..\src\DylpStdLib;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;NDEBUG;_WINDOWS;_USRDLL;LIBDYLP_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true ProgramDatabase X64 true ..\..\..\src\DylpStdLib;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;NDEBUG;_WINDOWS;_USRDLL;LIBDYLP_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) ProgramDatabase Default {11a895e6-021d-4f8c-acf7-860d695ac1c9} false DyLP-1.10.4/DyLP/MSVisualStudio/v10/libDylpStdLib/0000755000175200017520000000000013434203622017664 5ustar coincoinDyLP-1.10.4/DyLP/MSVisualStudio/v10/libDylpStdLib/libDylpStdLib.vcxproj0000644000175200017520000002247112745427232024021 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 libDylpStd {11A895E6-021D-4F8C-ACF7-860D695AC1C9} libDylpStdLib Win32Proj StaticLibrary StaticLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks EditAndContinue CompileAsC false X64 ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks ProgramDatabase CompileAsC false ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions) ProgramDatabase X64 ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions) ProgramDatabase Default DyLP-1.10.4/DyLP/MSVisualStudio/v10/Dylp.sln0000644000175200017520000001600211645040013016603 0ustar coincoin Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libDylpStd", "libDylpStdLib\libDylpStdLib.vcxproj", "{11A895E6-021D-4F8C-ACF7-860D695AC1C9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libDylp", "libDylp\libDylp.vcxproj", "{2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DylpUnitTest", "DylpUnitTest\DylpUnitTest.vcxproj", "{2E037744-DCA1-46FF-8B98-B2993C7C5F4C}" ProjectSection(ProjectDependencies) = postProject {4B701E10-C331-454F-A76F-2EC8D2260535} = {4B701E10-C331-454F-A76F-2EC8D2260535} {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {109D6E6F-6D91-460F-86AE-DF27400E09A9} = {109D6E6F-6D91-460F-86AE-DF27400E09A9} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "..\..\..\CoinUtils\MSVisualStudio\v10\libCoinUtils\libCoinUtils.vcxproj", "{C4867F15-438D-4FF8-8388-62FBAAA9786C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsi", "..\..\..\Osi\MSVisualStudio\v10\libOsi\libOsi.vcxproj", "{7D98E2CB-876E-4F75-9F71-77D3FE87E149}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiCommonTest", "..\..\..\Osi\MSVisualStudio\v10\libOsiCommonTest\libOsiCommonTest.vcxproj", "{109D6E6F-6D91-460F-86AE-DF27400E09A9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiDylp", "libOsiDylp\libOsiDylp.vcxproj", "{4B701E10-C331-454F-A76F-2EC8D2260535}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiDylpUnitTest", "OsiDylpUnitTest\OsiDylpUnitTest.vcxproj", "{4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|Win32.ActiveCfg = Debug|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|Win32.Build.0 = Debug|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|x64.ActiveCfg = Debug|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|x64.Build.0 = Debug|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|Win32.ActiveCfg = Release|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|Win32.Build.0 = Release|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|x64.ActiveCfg = Release|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|x64.Build.0 = Release|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|Win32.ActiveCfg = Debug|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|Win32.Build.0 = Debug|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|x64.ActiveCfg = Debug|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|x64.Build.0 = Debug|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|Win32.ActiveCfg = Release|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|Win32.Build.0 = Release|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|x64.ActiveCfg = Release|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|x64.Build.0 = Release|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|Win32.ActiveCfg = Debug|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|Win32.Build.0 = Debug|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|x64.ActiveCfg = Debug|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|x64.Build.0 = Debug|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|Win32.ActiveCfg = Release|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|Win32.Build.0 = Release|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|x64.ActiveCfg = Release|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|x64.Build.0 = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.ActiveCfg = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.Build.0 = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.ActiveCfg = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.Build.0 = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.ActiveCfg = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.Build.0 = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.ActiveCfg = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.Build.0 = Release|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.ActiveCfg = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.Build.0 = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.ActiveCfg = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.Build.0 = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.ActiveCfg = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.Build.0 = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.ActiveCfg = Release|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.Build.0 = Release|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.ActiveCfg = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.Build.0 = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.ActiveCfg = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.Build.0 = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.ActiveCfg = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.Build.0 = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.ActiveCfg = Release|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.Build.0 = Release|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|Win32.ActiveCfg = Debug|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|Win32.Build.0 = Debug|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|x64.ActiveCfg = Debug|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|x64.Build.0 = Debug|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|Win32.ActiveCfg = Release|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|Win32.Build.0 = Release|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|x64.ActiveCfg = Release|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|x64.Build.0 = Release|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|Win32.ActiveCfg = Debug|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|Win32.Build.0 = Debug|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|x64.ActiveCfg = Debug|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|x64.Build.0 = Debug|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|Win32.ActiveCfg = Release|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|Win32.Build.0 = Release|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|x64.ActiveCfg = Release|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal DyLP-1.10.4/DyLP/MSVisualStudio/v10/OsiDylpUnitTest/0000755000175200017520000000000013434203622020246 5ustar coincoinDyLP-1.10.4/DyLP/MSVisualStudio/v10/OsiDylpUnitTest/OsiDylpUnitTest.vcxproj0000644000175200017520000003406012101652424024747 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD} UnitTest Win32Proj Application Unicode true Application Unicode Application Unicode false Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\..\..\src\DylpStdLib;..\..\..\src\Dylp;..\..\..\src\OsiDylp;..\..\..\..\Osi\inc;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;..\..\..\..\CoinUtils\inc;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue false libDylp.lib;libDylpStd.lib;libOsiDylp.lib;libOsiCommonTest.lib;libOsi.lib;libCoinUtils.lib;%(AdditionalDependencies) LinkVerboseLib $(OutDir);%(AdditionalLibraryDirectories) true Console MachineX86 false X64 Disabled ..\..\..\src\DylpStdLib;..\..\..\src\Dylp;..\..\..\src\OsiDylp;..\..\..\..\Osi\inc;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;..\..\..\..\CoinUtils\inc;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase libDylp.lib;libDylpStd.lib;libOsiDylp.lib;libOsiCommonTest.lib;libOsi.lib;libCoinUtils.lib;%(AdditionalDependencies) $(OutDir);%(AdditionalLibraryDirectories) true Console MachineX64 false MaxSpeed true ..\..\..\src\DylpStdLib;..\..\..\src\Dylp;..\..\..\src\OsiDylp;..\..\..\..\Osi\inc;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;..\..\..\..\CoinUtils\inc;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase false libDylp.lib;libDylpStd.lib;libOsiDylp.lib;libOsiCommonTest.lib;libOsi.lib;libCoinUtils.lib;%(AdditionalDependencies) $(OutDir);%(AdditionalLibraryDirectories) true Console true true MachineX86 false X64 MaxSpeed true ..\..\..\src\DylpStdLib;..\..\..\src\Dylp;..\..\..\src\OsiDylp;..\..\..\..\Osi\inc;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;..\..\..\..\CoinUtils\inc;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase libDylp.lib;libDylpStd.lib;libOsiDylp.lib;libOsiCommonTest.lib;libOsi.lib;libCoinUtils.lib;%(AdditionalDependencies) $(OutDir);%(AdditionalLibraryDirectories) true Console true true MachineX64 false {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {109d6e6f-6d91-460f-86ae-df27400e09a9} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false {11a895e6-021d-4f8c-acf7-860d695ac1c9} false {2f33ad17-18d4-4737-befa-fd03a07d7ba3} false {4b701e10-c331-454f-a76f-2ec8d2260535} false DyLP-1.10.4/DyLP/MSVisualStudio/v10/DylpUnitTest/0000755000175200017520000000000013434203622017573 5ustar coincoinDyLP-1.10.4/DyLP/MSVisualStudio/v10/DylpUnitTest/DylpUnitTest.vcxproj0000644000175200017520000003126012101652424023620 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C} UnitTest Win32Proj Application Unicode true Application Unicode Application Unicode false Application Unicode <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\..\..\src\DylpStdLib;..\..\..\src\Dylp;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;DYLP_ERRMSGDIR="..\\..\\..\\src\\Dylp\\\";%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 EditAndContinue false LinkVerboseLib $(OutDir);%(AdditionalLibraryDirectories) true Console MachineX86 libDylp.lib;libDylpStd.lib;%(AdditionalDependencies) false X64 Disabled ..\..\..\src\DylpStdLib;..\..\..\src\Dylp;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;DYLP_ERRMSGDIR="..\\..\\..\\src\\Dylp\\\";%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true Console MachineX64 libDylp.lib;libDylpStd.lib;%(AdditionalDependencies) false MaxSpeed true ..\..\..\src\DylpStdLib;..\..\..\src\Dylp;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;DYLP_ERRMSGDIR="..\\..\\..\\src\\Dylp\\\";%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase false $(OutDir);%(AdditionalLibraryDirectories) true Console true true MachineX86 libDylp.lib;libDylpStd.lib;%(AdditionalDependencies) false X64 MaxSpeed true ..\..\..\src\DylpStdLib;..\..\..\src\Dylp;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;DYLP_ERRMSGDIR="..\\..\\..\\src\\Dylp\\\";%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true Console true true MachineX64 libDylp.lib;libDylpStd.lib;%(AdditionalDependencies) false {11a895e6-021d-4f8c-acf7-860d695ac1c9} false {2f33ad17-18d4-4737-befa-fd03a07d7ba3} false DyLP-1.10.4/DyLP/MSVisualStudio/v10alt/0000755000175200017520000000000013434203622015664 5ustar coincoinDyLP-1.10.4/DyLP/MSVisualStudio/v10alt/libDylp.vcxproj0000644000175200017520000004341011613162250020700 0ustar coincoin DebugDLL Win32 DebugDLL x64 Debug Win32 Debug x64 Release Win32 Release x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} libDylp Win32Proj DynamicLibrary false Unicode false StaticLibrary Unicode false StaticLibrary Unicode DynamicLibrary false Unicode StaticLibrary Unicode false StaticLibrary Unicode <_ProjectFileVersion>10.0.30319.1 $(CoinLibDir)\ $(CoinLibDir)\ $(CoinLibDir)\ $(CoinLibDir)\ $(CoinBinDir)\ $(CoinBinDir)\ AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(CoinRoot)\DyLP\DyLP\src\DylpStdLib;%(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true MultiThreadedDebugDLL Level3 ProgramDatabase false libDylpStd.lib libDylpStd\$(PlatformName)\$(ConfigurationName) X64 Disabled $(CoinRoot)\DyLP\DyLP\src\DylpStdLib;%(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true MultiThreadedDebugDLL Level3 ProgramDatabase false libDylpStd.lib libDylpStd\$(PlatformName)\$(ConfigurationName) MaxSpeed true $(CoinRoot)\DyLP\DyLP\src\DylpStdLib;%(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase false libDylpStd.lib libDylpStd\$(PlatformName)\$(ConfigurationName) X64 MaxSpeed true $(CoinRoot)\DyLP\DyLP\src\DylpStdLib;%(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase false libDylpStd.lib libDylpStd\$(PlatformName)\$(ConfigurationName) Disabled $(CoinRoot)\DyLP\DyLP\src\DylpStdLib;%(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) false MultiThreadedDebugDLL Level3 ProgramDatabase libDylpStd.lib;%(AdditionalDependencies) libDylpStd\$(PlatformName)\$(ConfigurationName);%(AdditionalLibraryDirectories) libDylp.def true Copy import library to $(CoinLibDir) if not exist $(CoinLibDir) mkdir $(CoinLibDir) move /y $(OutDir)$(TargetName).lib $(CoinLibDir) X64 Disabled $(CoinRoot)\DyLP\DyLP\src\DylpStdLib;%(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true MultiThreadedDebugDLL Level3 ProgramDatabase libDylpStd.lib;%(AdditionalDependencies) libDylpStd\$(PlatformName)\$(ConfigurationName);%(AdditionalLibraryDirectories) libDylp.def Copy import library to $(CoinLibDir) if not exist $(CoinLibDir) mkdir $(CoinLibDir) move /y $(OutDir)$(TargetName).lib $(CoinLibDir) {11a895e6-021d-4f8c-acf7-860d695ac1c9} false DyLP-1.10.4/DyLP/MSVisualStudio/v10alt/dylp.props0000644000175200017520000000253411536745403017736 0ustar coincoin yes $(CoinRoot)\DyLP\DyLP\src\DylpStdLib $(CoinRoot)\DyLP\DyLP\src\Dylp <_ProjectFileVersion>10.0.30319.1 $(DylpIncludeDir);$(DylpStdIncludeDir);%(AdditionalIncludeDirectories) DYLP_ERRMSGDIR="$(CoinRootEscaped)\\DyLP\\DyLP\\src\\Dylp\\";%(PreprocessorDefinitions) %(AdditionalLibraryDirectories) libDylp.lib;%(AdditionalDependencies) $(DylpStdIncludeDir) $(DylpIncludeDir) DyLP-1.10.4/DyLP/MSVisualStudio/v10alt/genDefForDylp.ps10000644000175200017520000001325511536745403021020 0ustar coincoin# Usage: genDefForDylp.ps1 # should be $(IntDir) in VS # is OsiDylp # Eventually, this script may expand to handle the base libDylp, but for now # I'm going with a hand-crafted .def file there. Dylp is plain old C, and it's # easy to maintain the .def file by hand. $VSPathComponents = ,'C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE' $VSPathComponents += 'C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN' $VSPathComponents += 'C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools' $VSPathComponents += 'C:\Windows\Microsoft.NET\Framework\v3.5' $VSPathComponents += 'C:\Windows\Microsoft.NET\Framework\v2.0.50727' $VSPathComponents += 'C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\VCPackages' $VSPathComponents += 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin' echo "Checking path for VS directories ..." foreach ($VSComponent in $VSPathComponents) { if ("$env:PATH" -notlike "*$VSComponent*") { echo "Prepending $VSComponent" $env:PATH = "$VSComponent;"+$env:PATH } } $objPath = $Args[0] $tgtBase = $Args[1] "Looking in $objPath ..." $objFiles = get-item -path $objPath\OsiDylp*.obj if (!$objfiles) { Out-Default -InputObject "No file selected" return 1 } $babyString = ".*OsiDylp.*" $libTgt = "lib"+$tgtBase $tgtDLL = $libTgt+".dll" $tgtDef = $libTgt+".def" echo "Target is $tgtDLL" $defFile = new-item -path $objPath -name $tgtDef -type "file" -force add-content -path $defFile -value "LIBRARY $libTgt`r`n`r`nEXPORTS" $tmpfile = "$objPath\gendef.tmp.out" # "Using $tmpfile" $totalSyms = 0 echo "Processing files ... " foreach ($file in $objFiles) { # get-member -inputobject $file $fileBase = $file.basename write-output $fileBase # The following line works just fine when this script is invoked directly # from powershell, and indirectly from a cmd window. But when it's invoked # as the pre-link event in VS, VS does something to output redirection that # causes all output to appear in the VS output window. Sending the dumpbin # output to a file fixes the problem until I can figure out how to block # VS's redirection of output. # $symbols = dumpbin /symbols $file $junk = dumpbin /OUT:$tmpfile /symbols $file $symbols = get-content $tmpfile # Eliminate Static symbols. Likewise labels. $symbols = $symbols -notmatch '^.*Static[^|]*\|.*$' $symbols = $symbols -notmatch '^.*Label[^|]*\|.*$' # Trim off the junk fore and aft. Some lines have no trailing information, # hence the second pattern $symbols = $symbols -replace '^.*\| ([^ ]+) .*$','$1' $symbols = $symbols -replace '^.*\| ([^ ]+)$','$1' # Lines we want will have @@ in the decorated name $filteredSymbols = $symbols -like "*@@*" $symLen = $filteredSymbols.length "Grabbed $symLen symbols" # Anything with "...@@$$..." seems to be invalid (either an artifact or a # system routine). But on occasion (template classes) it seems that the # required signature (@@$$F -> @@) is needed but isn't generated. So let's # try synthesizing it on the fly here. $filteredSymbols = $filteredSymbols -replace '@@\$\$F','@@' $filteredSymbols = $filteredSymbols -notlike '*@@$$*' # Lines with symbols that start with _ look to be compiler artifacts. Some # are acceptable to the linker, some not. It doesn't seem necessary to # export any of them. There's considerable, but not total, overlap between # this class of symbols and the previous class. $filteredSymbols = $filteredSymbols -notmatch '^_.*' # These are not acceptable to the linker, no specific reason given. $filteredSymbols = $filteredSymbols -notmatch '^\?\?.@\$\$.*' # Lines with symbols that start with ??_[EG] are deleting destructors # (whatever that is) and should not be exported. $filteredSymbols = $filteredSymbols -notmatch '^\?\?_[EG].*' $symLen = $filteredSymbols.length "Initial filtering leaves $symLen" # These next filter lines may be needed because of mixed C/C++ code (Dylp's # code base is C, then there's OsiDylp in C++). # There's another lot of symbols that appeared in OsiDylp starting with # $.*$, where the intervening text is unwind, pdata, or similar. See if we # can get rid of them. # $filteredSymbols = $filteredSymbols -notmatch '^\$[^$][^$]*\$' # And then there's another lot that seem to be run time data (rtcName, # rtcFrameData, rtcVarDesc). Where does this stuff come from? # $filteredSymbols = $filteredSymbols -notmatch 'Z\$rtc[FNV].*$' # And then a bunch of symbols that start with ?dtor$ or ?catch$. # $filteredSymbols = $filteredSymbols -notmatch '^\?dtor\$' # $filteredSymbols = $filteredSymbols -notmatch '^\?catch\$' # $symLen = $filteredSymbols.length # "C/C++ filtering leaves $symLen" # std:: is not our problem, but we have to be a little bit careful not # to throw out the baby with the bathwater. It's not possible (as best # I can see) to distinguish std:: in a parameter vs. std:: as the name # space for the method without knowing a lot more about the mangling # algorithm. Toss the bath, then retrieve the baby. $notStd = $filteredSymbols -notlike "*@std@@*" $bathwaterAndBaby = $filteredSymbols -like "*@std@@*" $baby = $bathwaterAndBaby -match "$babyString" $filteredSymbols = $notStd+$baby "Removing std:: leaves $symLen" $filteredSymbols = $filteredSymbols | sort-object -unique $symLen = $filteredSymbols.length "$symLen unique symbols" $totalSyms += $symLen add-content -path $defFile -value "`r`n; $fileBase" add-content -path $defFile -value $filteredSymbols } remove-item $tmpfile "Collected $totalSyms symbols." return DyLP-1.10.4/DyLP/MSVisualStudio/v10alt/libDylpStdLib.vcxproj0000644000175200017520000003224311613162250022004 0ustar coincoin DebugDLL Win32 DebugDLL x64 Debug Win32 Debug x64 Release Win32 Release x64 libDylpStd {11A895E6-021D-4F8C-ACF7-860D695AC1C9} libDylpStdLib Win32Proj StaticLibrary false StaticLibrary StaticLibrary StaticLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.30319.1 $(IntDir) $(IntDir) $(IntDir) $(IntDir) $(IntDir) $(IntDir) AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled %(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions) true MultiThreadedDebugDLL Level3 ProgramDatabase CompileAsC false X64 Disabled %(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions) true MultiThreadedDebugDLL Level3 ProgramDatabase CompileAsC false %(AdditionalLibraryDirectories) %(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase X64 %(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase Disabled %(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions) false MultiThreadedDebugDLL Level3 ProgramDatabase CompileAsC false X64 Disabled %(AdditionalIncludeDirectories) WIN32;DYLP_BUILD;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions) true MultiThreadedDebugDLL Level3 ProgramDatabase CompileAsC false DyLP-1.10.4/DyLP/MSVisualStudio/v10alt/libDylp.def0000644000175200017520000000275211536745403017762 0ustar coincoinLIBRARY "libDylp" EXPORTS dyio_chgerrlog dyio_closefile dyio_flushio dyio_isactive dyio_ioinit dyio_ioterm dyio_openfile dyio_outchr dyio_outfmt dyio_setmode errinit errterm errmsg warn dy_defaults dy_checkdefaults dy_setprintopts dy_processcmds dylp dy_getOwner dy_freebasis dy_initbasis dy_dupbasis dy_pricenbvars dy_pricedualpiv dy_abarj dy_betaj dy_betak dy_betai dy_abari dy_primalRays dy_dualRays dy_colDuals dy_rowDuals dy_rowDualsGivenC dy_colPrimals dy_rowPrimals dy_logPrimals dy_colStatus dy_logStatus dy_expandxopt dy_prtlpret dy_prtvstat dy_dumpcompact dy_setlogchn dy_setgtxecho dy_initstats dy_dumpstats dy_freestats dy_freesoln consys_create consys_dupsys consys_free consys_realloc consys_attach consys_update consys_detach consys_addcol_pk consys_addcol_ex consys_addrow_pk consys_getcol_pk consys_getcol_ex consys_getrow_pk consys_getrow_ex consys_delcol consys_delrow consys_delrow_stable consys_setcoeff consys_getcoeff consys_logicals consys_gcdrow consys_dotcol consys_dotrow consys_1normrow consys_ssqrow consys_2normrow consys_infnormrow consys_1normcol consys_ssqcol consys_2normcol consys_infnormcol consys_mulrow consys_divrow consys_accumcol consys_mulaccumcol consys_evalsys consys_geomscale consys_equiscale consys_applyscale consys_prtvartyp consys_prtcontyp consys_assocnme consys_conbndnme consys_conbndval consys_chgnme consys_nme pkvec_free pkvec_new exvec_1norm DyLP-1.10.4/DyLP/MSVisualStudio/v10alt/OsiDylpUnitTest.vcxproj0000644000175200017520000003772711536745403022415 0ustar coincoin DebugDLL Win32 DebugDLL x64 Debug Win32 Debug x64 Release Win32 Release x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD} UnitTest Win32Proj Application false Unicode Application Unicode true Application Unicode Application false Unicode Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(CoinBinDir)\ true $(CoinBinDir)\ true $(CoinBinDir)\ false $(CoinBinDir)\ false $(CoinBinDir)\ true $(CoinBinDir)\ true AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled $(OsiCommonTestIncludeDir);%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS true MultiThreadedDebugDLL Level3 EditAndContinue false libOsiCommonTest.lib;%(AdditionalDependencies) %(AdditionalLibraryDirectories) true Console MachineX86 X64 Disabled $(OsiCommonTestIncludeDir);%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS true MultiThreadedDebugDLL Level3 ProgramDatabase libOsiCommonTest.lib;%(AdditionalDependencies) %(AdditionalLibraryDirectories) true Console MachineX64 MaxSpeed true $(OsiCommonTestIncludeDir);%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS MultiThreadedDLL true Level3 ProgramDatabase false libOsiCommonTest.lib;%(AdditionalDependencies) %(AdditionalLibraryDirectories) true Console true true MachineX86 X64 MaxSpeed true $(OsiCommonTestIncludeDir);%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS MultiThreadedDLL true Level3 ProgramDatabase libOsiCommonTest.lib;%(AdditionalDependencies) %(AdditionalLibraryDirectories) true Console true true MachineX64 Disabled $(OsiCommonTestIncludeDir);$(CoinRoot)\DyLP\DyLP\src\Dylp;$(CoinRoot)\DyLP\DyLP\src\DylpStdLib;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS true MultiThreadedDebugDLL Level3 EditAndContinue false false libOsiCommonTest.lib;%(AdditionalDependencies) $(CoinLibDir);%(AdditionalLibraryDirectories) true Console MachineX86 X64 Disabled $(OsiCommonTestIncludeDir);%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS true MultiThreadedDebugDLL Level3 ProgramDatabase false libOsiCommonTest.lib;%(AdditionalDependencies) $(CoinLibDir);%(AdditionalLibraryDirectories) true Console MachineX64 DyLP-1.10.4/DyLP/MSVisualStudio/v10alt/DylpUnitTest.vcxproj0000644000175200017520000003430111536745403021723 0ustar coincoin DebugDLL Win32 DebugDLL x64 Debug Win32 Debug x64 Release Win32 Release x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C} UnitTest Win32Proj Application false Unicode Application Unicode true Application Unicode Application false Unicode Application Unicode true Application Unicode <_ProjectFileVersion>10.0.30319.1 $(CoinBinDir)\ $(CoinBinDir)\ $(CoinBinDir)\ $(CoinBinDir)\ $(CoinBinDir)\ $(CoinBinDir)\ AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled %(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true MultiThreadedDebugDLL Level3 EditAndContinue false true Console MachineX86 X64 Disabled %(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true MultiThreadedDebugDLL Level3 ProgramDatabase true Console MachineX64 MaxSpeed true %(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase false true Console true true MachineX86 X64 MaxSpeed true %(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase true Console true true MachineX64 Disabled %(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true MultiThreadedDebugDLL Level3 EditAndContinue false false true Console MachineX86 X64 Disabled %(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true MultiThreadedDebugDLL Level3 ProgramDatabase false %(AdditionalLibraryDirectories) true Console MachineX64 DyLP-1.10.4/DyLP/MSVisualStudio/v10alt/Dylp.sln0000644000175200017520000001460011536745403017324 0ustar coincoin Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libDylpStd", "libDylpStdLib.vcxproj", "{11A895E6-021D-4F8C-ACF7-860D695AC1C9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libDylp", "libDylp.vcxproj", "{2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DylpUnitTest", "DylpUnitTest.vcxproj", "{2E037744-DCA1-46FF-8B98-B2993C7C5F4C}" ProjectSection(ProjectDependencies) = postProject {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} = {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} {11A895E6-021D-4F8C-ACF7-860D695AC1C9} = {11A895E6-021D-4F8C-ACF7-860D695AC1C9} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiDylp", "libOsiDylp.vcxproj", "{4B701E10-C331-454F-A76F-2EC8D2260535}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiDylpUnitTest", "OsiDylpUnitTest.vcxproj", "{4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}" ProjectSection(ProjectDependencies) = postProject {4B701E10-C331-454F-A76F-2EC8D2260535} = {4B701E10-C331-454F-A76F-2EC8D2260535} {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} = {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3} {11A895E6-021D-4F8C-ACF7-860D695AC1C9} = {11A895E6-021D-4F8C-ACF7-860D695AC1C9} EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 DebugDLL|Win32 = DebugDLL|Win32 DebugDLL|x64 = DebugDLL|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|Win32.ActiveCfg = Debug|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|Win32.Build.0 = Debug|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|x64.ActiveCfg = Debug|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Debug|x64.Build.0 = Debug|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.DebugDLL|x64.Build.0 = DebugDLL|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|Win32.ActiveCfg = Release|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|Win32.Build.0 = Release|Win32 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|x64.ActiveCfg = Release|x64 {11A895E6-021D-4F8C-ACF7-860D695AC1C9}.Release|x64.Build.0 = Release|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|Win32.ActiveCfg = Debug|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|Win32.Build.0 = Debug|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|x64.ActiveCfg = Debug|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Debug|x64.Build.0 = Debug|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.DebugDLL|x64.Build.0 = DebugDLL|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|Win32.ActiveCfg = Release|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|Win32.Build.0 = Release|Win32 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|x64.ActiveCfg = Release|x64 {2F33AD17-18D4-4737-BEFA-FD03A07D7BA3}.Release|x64.Build.0 = Release|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|Win32.ActiveCfg = Debug|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|Win32.Build.0 = Debug|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|x64.ActiveCfg = Debug|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Debug|x64.Build.0 = Debug|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.DebugDLL|x64.Build.0 = DebugDLL|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|Win32.ActiveCfg = Release|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|Win32.Build.0 = Release|Win32 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|x64.ActiveCfg = Release|x64 {2E037744-DCA1-46FF-8B98-B2993C7C5F4C}.Release|x64.Build.0 = Release|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|Win32.ActiveCfg = Debug|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|Win32.Build.0 = Debug|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|x64.ActiveCfg = Debug|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Debug|x64.Build.0 = Debug|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.DebugDLL|x64.Build.0 = DebugDLL|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|Win32.ActiveCfg = Release|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|Win32.Build.0 = Release|Win32 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|x64.ActiveCfg = Release|x64 {4B701E10-C331-454F-A76F-2EC8D2260535}.Release|x64.Build.0 = Release|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|Win32.ActiveCfg = Debug|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|Win32.Build.0 = Debug|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|x64.ActiveCfg = Debug|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Debug|x64.Build.0 = Debug|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.DebugDLL|x64.Build.0 = DebugDLL|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|Win32.ActiveCfg = Release|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|Win32.Build.0 = Release|Win32 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|x64.ActiveCfg = Release|x64 {4DD541AA-CD56-4C73-B4C6-332CF6D9ABFD}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal DyLP-1.10.4/DyLP/MSVisualStudio/v10alt/libOsiDylp.vcxproj0000644000175200017520000004123411536745403021370 0ustar coincoin DebugDLL Win32 DebugDLL x64 Debug Win32 Debug x64 Release Win32 Release x64 {4B701E10-C331-454F-A76F-2EC8D2260535} libOsiDylp DynamicLibrary false MultiByte false StaticLibrary MultiByte false true StaticLibrary MultiByte false DynamicLibrary false MultiByte false StaticLibrary MultiByte false true StaticLibrary MultiByte false <_ProjectFileVersion>10.0.30319.1 $(CoinLibDir)\ $(CoinLibDir)\ $(CoinLibDir)\ $(CoinLibDir)\ $(CoinBinDir)\ $(CoinBinDir)\ AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled %(AdditionalIncludeDirectories) ODSI_PARANOIA=1;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) true MultiThreadedDebugDLL Level3 EditAndContinue %(AdditionalLibraryDirectories) X64 Disabled %(AdditionalIncludeDirectories) ODSI_PARANOIA=1;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) true MultiThreadedDebugDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) MaxSpeed true %(AdditionalIncludeDirectories) ODSI_PARANOIA=1;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase %(AdditionalLibraryDirectories) X64 MaxSpeed true %(AdditionalIncludeDirectories) ODSI_PARANOIA=1;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) MultiThreadedDLL true Level3 ProgramDatabase %(AdditionalLibraryDirectories) Disabled %(AdditionalIncludeDirectories) ODSI_PARANOIA=1;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) false MultiThreadedDebugDLL Level3 ProgramDatabase Generate .def file powershell -ExecutionPolicy RemoteSigned -File .\genDefForDylp.ps1 $(IntDir) OsiDylp false %(AdditionalLibraryDirectories) $(IntDir)$(ProjectName).def true false Copy import lib to $(CoinLibDir) if not exist $(CoinLibDir) mkdir $(CoinLibDir) move /y $(OutDir)$(TargetName).lib $(CoinLibDir) X64 Disabled %(AdditionalIncludeDirectories) ODSI_PARANOIA=1;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) false MultiThreadedDebugDLL Level3 ProgramDatabase Generate .def file powershell -ExecutionPolicy RemoteSigned -File .\genDefForDylp.ps1 $(IntDir) OsiDylp false %(AdditionalLibraryDirectories) $(IntDir)$(ProjectName).def true false Copy import lib to $(CoinLibDir) if not exist $(CoinLibDir) mkdir $(CoinLibDir) move /y $(OutDir)$(TargetName).lib $(CoinLibDir) {2f33ad17-18d4-4737-befa-fd03a07d7ba3} false {11a895e6-021d-4f8c-acf7-860d695ac1c9} false DyLP-1.10.4/DyLP/MSVisualStudio/v10alt/osidylp.props0000644000175200017520000000245611536745403020454 0ustar coincoin yes $(CoinRoot)\DyLP\DyLP\src\OsiDylp <_ProjectFileVersion>10.0.30319.1 $(OsiDylpIncludeDir);%(AdditionalIncludeDirectories) libOsiDylp.lib;%(AdditionalDependencies) %(AdditionalLibraryDirectories) $(OsiDylpIncludeDir) DyLP-1.10.4/DyLP/ltmain.sh0000755000175200017520000057753011503442760013531 0ustar coincoin# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 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 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # 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. basename="s,^.*/,,g" # 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" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" # 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 # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # 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 "$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" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # 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. func_win32_libid () { 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 if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $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_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 () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done 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 "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # 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. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # 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 $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi 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 my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do 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 have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2005 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --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 $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # 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= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # 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= 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) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$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,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$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. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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 $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) 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 "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 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 $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "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." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </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." $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 $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </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." $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 $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built fi 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 case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$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 dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= 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 compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes 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 $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" 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*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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*) # 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 deplibs="$deplibs -framework System" 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 deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -pg pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ -t[45]*|-txscale*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 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*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # 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 ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" 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. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'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\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; 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 test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$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 test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$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 case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; 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 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 "$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) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; 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 (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac 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 ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." 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 -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; 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 newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` 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 used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi 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. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # 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 case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$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 $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE 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. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$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 $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$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 notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi 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 newlib_search_path="$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*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test 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 test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$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 -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 *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if 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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; 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*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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 "$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 module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; 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 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; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$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 $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$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:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; 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:"*) ;; *) finalize_shlibpath="$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 [\\/]*) add_dir="$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*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$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" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared 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 "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs 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 "*) ;; *) lib_search_path="$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 "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$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 tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" 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 if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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="$2" number_minor="$3" number_revision="$4" # # 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 darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; 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]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE 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 major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` 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 iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` 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 iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; 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 $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$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) ;; $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 removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` dependency_libs=`$echo "$dependency_libs " | ${SED} -e "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 temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 "*) ;; *) dlfiles="$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 "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-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 deplibs="$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. $rm conftest.c cat > conftest.c </dev/null` 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$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 newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e '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 "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $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 fi ;; 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 is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; 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 # 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$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 if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$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 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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$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" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$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 "$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 realname="$2" shift; 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 linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "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"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $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:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # 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 output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$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. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 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~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "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" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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\" 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 # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(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 "$mode" = relink; then $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 $show "${rm}r $gentop" $run ${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 $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run 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 "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $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 wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${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" # $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" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$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 "*) ;; *) finalize_rpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$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 "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # 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/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= 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*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; 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 "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" 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 rpath="$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 rpath="$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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? 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" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e '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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` 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 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #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 # 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 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ 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; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); 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 ("getcwd failed"); 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 ("getcwd failed"); 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 * 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; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # 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 variable: 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 echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ 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 >> $output "\ # 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 $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE 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 $EXIT_FAILURE fi fi\ " chmod +x $output fi 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" 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" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$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 # 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 $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_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 for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$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= 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 save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; 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 "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then 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) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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' # Libraries that this one depends upon. dependency_libs='$dependency_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 fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # 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. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; 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. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$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 "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. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi 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 $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run 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 if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run 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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` 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 file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "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) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $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" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 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 -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # 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 ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" 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) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; 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 (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$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 rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [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 --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information 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. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [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: $modename [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 -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking 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: $modename [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: $modename [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: $modename [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 rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [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 -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 -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] 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: $modename [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." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # 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 disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: DyLP-1.10.4/DyLP/README0000644000175200017520000000537711267165330012563 0ustar coincoin Dylp: An implementation of the dynamic simplex algorithm Dylp is a linear programming solver, based on the dynamic simplex algorithm. Roughly, this means that dylp attempts to maintain an active constraint system which consists of only those constraints and variables that are relevant at the current extreme point. The bet is that this will be a useful property in situations where the same constraint system is repeatedly modified and reoptimised (e.g., in a branch-cut-price MIP code). You can also tell dylp to operate with the full constraint system, which is useful for obtaining an initial solution. Dylp is built to be a research and development code. It can produce a range of statistics, and it can tell you more about how it's solving your problem than most people will ever want to know. It also includes extensive cross checks to catch errors during program development. Dylp development takes place in a Sun Solaris/Workshop programming environment, most recently Solaris 10 and Sun Studio 12 (cc 5.9). It is also tested in Linux and Windows environments. COIN-OR places some importance on Windows compatibility, and if you can build COIN at all, then dylp should run. If it doesn't, please report the problem by filing a ticket at https://projects.coin-or.org/DyLP/ Generally speaking, if your computing environment supports IEEE floating point then it should be possible to port dylp with very little effort. ============================================================================ Maintainer: Lou Hafer School of Computing Science Simon Fraser University Burnaby, B.C., V5A 1S6, Canada lou@cs.sfu.ca Web pages: Eh, what to say here. COIN is still settling into its infrastructure, so this may be out-of-date by the time you read it. But, if you've managed to acquire the code, you're probably over that already. Here's a selection of resources: http://www.coin-or.org/projects The main COIN-OR projects page. https://projects.coin-or.org/DyLP Dylp's Trac page. From here, you can read about dylp, browse the code, and file tickets for bug reports. SVN repository: https://www.coin-or.org/svn/DyLP/trunk development branch https://www.coin-or.org/svn/DyLP/stable stable branches https://www.coin-or.org/svn/DyLP/releases releases The releases are frozen snapshots of the corresponding stable branches. Stable branches get bug fixes, which eventually trigger a new release. Unless you have some good reason to do otherwise, pick the highest numbered stable branch or release. Mailing list: http://list.coin-or.org/mailman/listinfo/dylp If you're using DyLP via the OsiDylp interface, you probably want to monitor the Osi mailing list. DyLP-1.10.4/DyLP/config.sub0000755000175200017520000007772611503442760013673 0ustar coincoin#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-04-29' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # 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 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # 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. # 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) 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) os= basic_machine=$1 ;; -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*) 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 \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | 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 | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-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-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | 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-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | 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-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # 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 ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; 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 ;; cr16c) basic_machine=cr16c-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 ;; 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'm not sure what "Sysv32" means. Should this be sysv3.2? 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 ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; 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-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; 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 ;; 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 ;; 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) basic_machine=powerpc-unknown ;; ppc-*) 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) 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 ;; 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 ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; 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 ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-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[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. -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* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -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* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -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*) # 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 ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -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 ;; # 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 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) 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 ;; -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: DyLP-1.10.4/DyLP/dylp-uninstalled.pc.in0000644000175200017520000000051711573762145016122 0ustar coincoinprefix=@prefix@ libdir=@ABSBUILDDIR@/src/Dylp Name: DyLP Description: dynamic simplex linear programming solver URL: https://projects.coin-or.org/DyLP Version: @PACKAGE_VERSION@ Libs: ${libdir}/libDylp.la @DYLPLIB_PCLIBS@ Cflags: -I@abs_source_dir@/src/Dylp -I@abs_source_dir@/src/DylpStdLib -I@ABSBUILDDIR@/src/DylpStdLib Requires: DyLP-1.10.4/missing0000755000175200017520000002540610442173473012466 0ustar coincoin#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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 run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] 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 # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: DyLP-1.10.4/Makefile.am0000644000175200017520000000510412260622507013111 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 532 2013-12-31 20:12:55Z lou $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign EXTRA_DIST = INSTALL LICENSE README ######################################################################## # Subdirectories # ######################################################################## # subdirs is set by configure as the list of all subdirectories to recurse # into SUBDIRS = $(subdirs) ######################################################################## # Extra Targets # ######################################################################## test: all cd DyLP; $(MAKE) test unitTest: test tests: all for dir in $(subdirs); do \ if test -r $$dir/test/Makefile; then \ (cd $$dir; $(MAKE) test) \ fi; \ done unitTests: tests # Generate doxygen doc'n in subdirectories (except @PACKAGE_NAME@) if a doxydoc # directory is present, then do the base, if present. doxydoc: for dir in $(subdirs) ; do \ if test $$dir != @PACKAGE_NAME@ && test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) doxydoc) \ fi ; \ done ; \ if test -r doxydoc/doxygen.conf ; then \ doxygen doxydoc/doxygen.conf ; \ fi @echo "'make doc' to build typeset documentation." clean-doxydoc: ( cd doxydoc ; rm -rf html *.log *.tag ) # DocInstallDir is defined in Makemain.inc and is specific to the package. # For the short term, adopt the notion that we install only the package # doxydoc. install-doxydoc: doxydoc if test -r doxydoc/doxygen.conf ; then \ $(mkdir_p) $(DocInstallDir) ; \ cp -R doxydoc $(DocInstallDir) ; \ fi uninstall-doxydoc: rm -rf $(DocInstallDir)/doxydoc clean-local: clean-doxydoc # install-data-local: install-doxydoc uninstall-local: uninstall-doxydoc # Generate typeset documentation --- will work only if there's a complete # LaTeX installation in the expected places. doc: cd DyLP; $(MAKE) doc @echo "'make doxydoc' to build doxygen documentation." .PHONY: test unitTest tests unitTests doxydoc doc ######################################################################## # Maintainer Stuff # ######################################################################## # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = coin_subdirs.txt include BuildTools/Makemain.inc DyLP-1.10.4/doxydoc/0000755000175200017520000000000013434203622012523 5ustar coincoinDyLP-1.10.4/doxydoc/doxygen.conf.in0000644000175200017520000017424011431335701015463 0ustar coincoin# Doxyfile 1.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = @PACKAGE_NAME@ # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @PACKAGE_VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doxydoc # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = "@abs_top_srcdir@/" # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = @coin_doxy_logname@ #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that # contain documented source files. You may enter file names like "myfile.cpp" # or directories like "/usr/src/myproject". Separate the files or directories # with spaces. For COIN, the default is the package base to suck in all # source directories present in the package. Externals will be processed # if present. INPUT = @abs_top_srcdir@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.hpp \ *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.svn* @coin_doxy_excludes@ # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 3 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = YES # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = YES #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = YES # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = letter # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = @coin_doxy_tagfiles@ # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = @coin_doxy_tagname@ # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = YES # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @coin_doxy_usedot@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES DyLP-1.10.4/BuildTools/0000755000175200017520000000000013434203623013133 5ustar coincoinDyLP-1.10.4/BuildTools/missing0000755000175200017520000002540610430173037014537 0ustar coincoin#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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 run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] 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 # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: DyLP-1.10.4/BuildTools/headers/0000755000175200017520000000000013434203623014546 5ustar coincoinDyLP-1.10.4/BuildTools/headers/configall_system.h0000644000175200017520000000072411063737131020266 0ustar coincoin/* * This header file is included by the *Config.h in the individual * COIN packages when the code is compiled in a setting that doesn't * use the configure script (i.e., HAVE_CONFIG_H is not defined). * This header file includes the system and compile dependent header * file defining macros that depend on what compiler is used. */ #ifdef _MSC_VER # include "configall_system_msc.h" #else # error "Trying to use configall_system for unknown compiler." #endif DyLP-1.10.4/BuildTools/headers/configall_system_msc.h0000644000175200017520000001017311654311600021122 0ustar coincoin/* This is the header file for the Microsoft compiler, defining all * system and compiler dependent configuration macros */ /* Define to dummy `main' function (if any) required to link to the Fortran libraries. */ /* #undef F77_DUMMY_MAIN */ #ifndef COIN_USE_F2C /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ # define F77_FUNC(name,NAME) NAME /* As F77_FUNC, but for C identifiers containing underscores. */ # define F77_FUNC_(name,NAME) NAME #else /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ # define F77_FUNC(name,NAME) name ## _ /* As F77_FUNC, but for C identifiers containing underscores. */ # define F77_FUNC_(name,NAME) name ## __ #endif /* Define if F77 and FC dummy `main' functions are identical. */ /* #undef FC_DUMMY_MAIN_EQ_F77 */ /* Define to 1 if you have the header file. */ /* #undef HAVE_ASSERT_H */ /* Define to 1 if you have the header file. */ #define HAVE_CASSERT 1 /* Define to 1 if you have the header file. */ #define HAVE_CCTYPE 1 /* Define to 1 if you have the header file. */ #define HAVE_CFLOAT 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_CIEEEFP */ /* Define to 1 if you have the header file. */ #define HAVE_CMATH 1 /* Define to 1 if you have the header file. */ #define HAVE_CSTDARG 1 /* Define to 1 if you have the header file. */ #define HAVE_CSTDIO 1 /* Define to 1 if you have the header file. */ #define HAVE_CSTDLIB 1 /* Define to 1 if you have the header file. */ #define HAVE_CSTRING 1 /* Define to 1 if you have the header file. */ #define HAVE_CTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_CSTDDEF 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_CTYPE_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_DLFCN_H */ /* Define to 1 if function drand48 is available */ /* #undef HAVE_DRAND48 */ /* Define to 1 if you have the header file. */ /* #undef HAVE_FLOAT_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_IEEEFP_H */ /* Define to 1 if you have the header file. */ /* #define HAVE_INTTYPES_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MATH_H */ /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if function rand is available */ #define HAVE_RAND 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_STDARG_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. */ #define HAVE_STDLIB_H 1 /* Define to 1 if function std::rand is available */ #define HAVE_STD__RAND 1 /* Define to 1 if you have the header file. */ /* #define HAVE_STRINGS_H */ /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 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_TYPES_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_TIME_H */ /* Define to 1 if you have the header file. */ /* #define HAVE_UNISTD_H */ /* Define to 1 if va_copy is avaliable */ /* #undef HAVE_VA_COPY */ /* Define to 1 if you have the header file. */ /* #undef HAVE_WINDOWS_H */ /* Define to 1 if you have the `_snprintf' function. */ #define HAVE__SNPRINTF 1 /* The size of a `double', as computed by sizeof. */ #define SIZEOF_DOUBLE 8 /* The size of a `int', as computed by sizeof. */ #define SIZEOF_INT 4 /* The size of a `int *', as computed by sizeof. */ #define SIZEOF_INT_P 4 /* The size of a `long', as computed by sizeof. */ #define SIZEOF_LONG 4 /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 DyLP-1.10.4/BuildTools/get.dependencies.sh0000755000175200017520000004213112746133102016676 0ustar coincoin#!/bin/bash # Author: Ted Ralphs (ted@lehigh.edu) # Copyright 2016, Ted Ralphs # Released Under the Eclipse Public License #Exit when command fails set -e #Set defaults root_dir=$PWD declare -i num_actions num_actions=0 sparse=false prefix=$PWD dest_dir= svn=true fetch=false build=false run_test=false run_all_tests=false configure_options= monolithic=false threads=1 build_dir=$PWD/build reconfigure=false get_third_party=true quiet=false MAKE=make #If this is an already checked out project, which one? echo "Welcome to the COIN-OR fetch and build utility" echo echo "For help, run script without arguments." echo echo "$@" > .get.dependencies.config #Parse arguments for arg in "$@" do case $arg in *=*) option=`expr "x$arg" : 'x\(.*\)=[^=]*'` option_arg=`expr "x$arg" : 'x[^=]*=\(.*\)'` case $option in --prefix) if [ "x$option_arg" != x ]; then case $option_arg in [\\/$]* | ?:[\\/]* | NONE | '' ) prefix=$option_arg ;; *) echo "Prefix path must be absolute." exit 3 ;; esac else echo "No path provided for --prefix" exit 3 fi ;; --build-dir) if [ "x$option_arg" != x ]; then case $option_arg in [\\/$]* | ?:[\\/]* | NONE | '' ) build_dir=$option_arg ;; *) build_dir=`pwd`/$option_arg ;; esac else echo "No path provided for --build-dir" exit 3 fi ;; --threads) if [ "x$option_arg" != x ]; then threads=$option_arg else echo "No thread number specified for --threads" exit 3 fi ;; DESTDIR) if [ "x$option_arg" != x ]; then case $option_arg in [\\/$]* | ?:[\\/]* | NONE | '' ) dest_dir=$option_arg ;; *) echo "DESTDIR path must be absolute." exit 3 ;; esac else echo "No path provided for DESTDIR" exit 3 fi ;; *) configure_options+="$arg " ;; esac ;; --sparse) sparse=true ;; --svn) svn=true ;; --git) svn=false ;; --debug) set -x ;; --monolithic) monolithic=true ;; --reconfigure) reconfigure=true ;; --test) run_test=true ;; --test-all) run_all_tests=true ;; --no-third-party) get_third_party=false ;; --quiet) quiet=true ;; --*) configure_options+="$arg " ;; fetch) num_actions+=1 fetch=true ;; build) num_actions+=1 build=true ;; esac done #Help if [ $num_actions == 0 ]; then echo "Usage: get.dependencies.sh --option1 --option2" echo echo "Commands:" echo echo " fetch: Checkout source code for all dependencies" echo " options: --svn (checkout from SVN)" echo " --git (checkout from git)" echo " --no-third-party don't download third party source (getter-scripts)" echo echo " build: Checkout source code for all dependencies" echo " options: --prefix=\dir\to\install (where to install, default: $PWD)" echo " --xxx=yyy (will be passed through to configure)" echo " --monlithic do 'old style' monlithic build" echo " --threads=n build in parallel with 'n' threads" echo " --build-dir=\dir\to\build\in do a VPATH build" echo " --test run unit test of main project before install" echo " --test-all run unit tests of all projects before install" echo " --quiet suppress build output to stdout" echo " --reconfigure run configure also for already configured projects" echo echo "General options:" echo " --debug: Turn on debugging output" echo fi if [ -e configure.ac ]; then main_proj=`fgrep AC_INIT configure.ac | cut -d '[' -f 2 | cut -d ']' -f 1` else echo "Unable to find root configure script." echo "Please run script in root directory of checkout." exit 2 fi #Build list of sources for dependencies deps=`cat Dependencies | tr '\t' ' ' | tr -s ' '| cut -d ' ' -f 2-` #Keep track of the subdirectories in which we need to build later. subdirs= # This changes the default separator used in for loops to carriage return. # We need this later. IFS=$'\n' #Get sources if [ $fetch = "true" ]; then for url in $deps do if [ `echo $url | cut -d '/' -f 3` != "projects.coin-or.org" ]; then # If this is a URL of something other than a COIN-OR project on SVN, # then we assume it's a git project git_url=`echo $url | tr '\t' ' ' | tr -s ' '| cut -d ' ' -f 1` branch=`echo $url | tr '\t' ' ' | tr -s ' '| cut -d ' ' -f 2` dir=`echo $git_url | cut -d '/' -f 5` echo "Clone $git_url branch $branch" if [ ! -e $dir ]; then git clone --branch=$branch $git_url else cd $dir git pull origin $branch cd - fi subdirs+="$dir " elif [ $svn = "true" ]; then # Here, we are supposed to check out from SVN svn_repo=`echo $url | cut -d '/' -f 5` if [ $svn_repo = "BuildTools" ]; then if [ `echo $url | cut -d '/' -f 6` = 'ThirdParty' ]; then tp_proj=`echo $url | cut -d '/' -f 7` if [ `echo $url | cut -d '/' -f 8` = trunk ]; then version=trunk else version=`echo $url | cut -d '/' -f 9` fi mkdir -p ThirdParty echo "Checkout ThirdParty/$tp_proj" svn co --non-interactive --trust-server-cert $url \ ThirdParty/$tp_proj if [ $get_third_party = "true" ] && [ -e ThirdParty/$tp_proj/get.$tp_proj ]; then cd ThirdParty/$tp_proj ./get.$tp_proj cd - subdirs+="ThirdParty/$tp_proj " fi fi else if [ $svn_repo = "CHiPPS" ]; then proj=`echo $url | cut -d '/' -f 6` if [ `echo $url | cut -d '/' -f 7` = trunk ]; then version=trunk else version=`echo $url | cut -d '/' -f 8` fi elif [ $svn_repo = "Data" ]; then proj=`echo $url | cut -d '/' -f 5-6` if [ `echo $url | cut -d '/' -f 7` = trunk ]; then version=trunk else version=`echo $url | cut -d '/' -f 8` fi else proj=`echo $url | cut -d '/' -f 5` if [ `echo $url | cut -d '/' -f 6` = trunk ]; then version=trunk else version=`echo $url | cut -d '/' -f 7` fi fi echo "Checkout $url" svn co --non-interactive --trust-server-cert $url $proj subdirs+="$proj " fi else # Otherwise, convert SVN URL to a Github one and check out with git svn_repo=`echo $url | cut -d '/' -f 5` if [ $svn_repo = 'Data' ]; then data_proj=`echo $url | cut -d '/' -f 6` echo "Checkout Data/$data_proj" svn co $url Data/$data_proj subdirs+="Data/$data_proj " elif [ $svn_repo = 'BuildTools' ]; then if [ `echo $url | cut -d '/' -f 6` = "ThirdParty" ]; then tp_proj=`echo $url | cut -d '/' -f 7` proj=ThirdParty-$tp_proj mkdir -p ThirdParty if [ `echo $url | cut -d '/' -f 8` = "trunk" ]; then branch=master version=trunk else branch=`echo $url | cut -d '/' -f 8-9` version=`echo $url | cut -d '/' -f 9` fi echo "Clone $proj branch $branch" if [ ! -e ThirdParty/$tp_proj ]; then git clone --branch=$branch \ https://github.com/coin-or-tools/$proj \ ThirdParty/$tp_proj if [ $get_third_party = "true" ] && \ [ -e ThirdParty/$tp_proj/get.$tp_proj ]; then cd ThirdParty/$tp_proj ./get.$tp_proj cd - subdirs+="ThirdParty/$tp_proj " fi else cd ThirdParty/$tp_proj git pull origin $branch if [ $get_third_party = "true" ] && \ [ -e get.$tp_proj ]; then ./get.$tp_proj subdirs+="ThirdParty/$tp_proj " fi cd - fi fi else if [ $svn_repo = "CHiPPS" ]; then git_repo=CHiPPS-`echo $url | cut -d '/' -f 6` proj=`echo $url | cut -d '/' -f 6` if [ `echo $url | cut -d '/' -f 7` = 'trunk' ]; then branch=master version=trunk else branch=`echo $url | cut -d '/' -f 7-8` version=`echo $url | cut -d '/' -f 8` fi else git_repo=`echo $url | cut -d '/' -f 5` proj=`echo $url | cut -d '/' -f 5` if [ `echo $url | cut -d '/' -f 6` = 'trunk' ]; then branch=master version=trunk else branch=`echo $url | cut -d '/' -f 6-7` version=`echo $url | cut -d '/' -f 7` fi fi if [ sparse = "true" ]; then echo "Clone (sparse-checkout) $git_repo branch $branch" mkdir $proj cd $proj git init git remote add origin \ https://github.com/coin-or/$git_repo git config core.sparsecheckout true echo $proj/ >> .git/info/sparse-checkout git fetch git checkout $branch cd .. else echo "Clone $git_repo branch $branch" if [ ! -e $proj ]; then git clone --branch=$branch \ https://github.com/coin-or/$git_repo $proj else cd $proj git pull origin $branch cd - fi fi subdirs+="$proj/$proj " fi fi done echo $subdirs > .subdirs fi unset IFS #Build (and possibly test) the code if [ $build = "true" ]; then if [ $monolithic = "false" ]; then if [ ! -e ".subdirs" ]; then echo "No .subdirs file. Please fetch first" fi for dir in `cat .subdirs` do if [ build_dir != "./" ]; then proj_dir=`echo $dir | cut -d '/' -f 1` if [ $proj_dir = "Data" ] || [ $proj_dir = "ThirdParty" ]; then proj_dir=$dir fi mkdir -p $build_dir/$proj_dir cd $build_dir/$proj_dir else cd $dir fi if [ ! -e config.status ] || [ $reconfigure = true ]; then if [ $quiet = "false" ]; then $root_dir/$dir/configure --disable-dependency-tracking \ --prefix=$prefix $configure_options else $root_dir/$dir/configure --disable-dependency-tracking \ --prefix=$prefix $configure_options > /dev/null fi fi if [ $run_all_tests = "true" ]; then if [ $quiet = "true" ]; then $MAKE -j $threads > /dev/null fi $MAKE -j $threads test fi if [ "x$dest_dir" != x ]; then if [ $quiet = "true" ]; then $MAKE -j $threads DESTDIR="$dest_dir" install > /dev/null else $MAKE -j $threads DESTDIR="$dest_dir" install fi else if [ $quiet = "true" ]; then $MAKE -j $threads install > /dev/null else $MAKE -j $threads install fi fi cd $root_dir done if [ -e $main_proj ]; then if [ build_dir != "./" ]; then mkdir -p $build_dir/$main_proj cd $build_dir/$main_proj else cd $main_proj fi fi if [ ! -e config.status ] || [ $reconfigure = true ]; then #First, check whether this is a "rootless" project if [ -e $root_dir/$main_proj/configure ]; then root_config=$root_dir/$main_proj/configure else root_config=$root_dir/configure fi #Now, do the actual configuration if [ $quiet = "false" ]; then $root_config --disable-dependency-tracking \ --prefix=$prefix $configure_options else $root_config --disable-dependency-tracking \ --prefix=$prefix $configure_options > /dev/null fi fi if [ $run_test = "true" ]; then if [ $quiet = "true" ]; then $MAKE -j $threads > /dev/null fi $MAKE -j $threads test fi if [ "x$dest_dir" != x ]; then if [ $quiet = "true" ]; then $MAKE -j $threads DESTDIR="$dest_dir" install > /dev/null else $MAKE -j $threads DESTDIR="$dest_dir" install fi else if [ $quiet = "true" ]; then $MAKE -j $threads install > /dev/null else $MAKE -j $threads install fi fi cd $root_dir else if [ build_dir != "./" ]; then mkdir -p $build_dir cd $build_dir fi if [ ! -e config.status ] || [ $reconfigure = true ]; then if [ $quiet = "false" ]; then $root_dir/configure --disable-dependency-tracking \ --prefix=$prefix $configure_options else $root_dir/configure --disable-dependency-tracking \ --prefix=$prefix $configure_options > /dev/null fi fi if [ $quiet = "true" ]; then $MAKE -j $threads > /dev/null fi if [ $run_test = "true" ]; then $MAKE -j $threads test fi if [ "x$dest_dir" != x ]; then if [ $quiet = "true" ]; then $MAKE -j $threads DESTDIR="$dest_dir" install > /dev/null else $MAKE -j $threads DESTDIR="$dest_dir" install fi else if [ $quiet = "true" ]; then $MAKE -j $threads install > /dev/null else $MAKE -j $threads install fi fi cd $root_dir fi fi DyLP-1.10.4/BuildTools/run_autotools0000755000175200017520000003253612752402346016014 0ustar coincoin#!/bin/sh # Copyright (C) 2006, 2007, 2008, 2009, 2010 International Business Machines # and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # It is part of the BuildTools project in COIN-OR (www.coin-or.org) # ## $Id: run_autotools 3632 2016-08-09 16:29:26Z stefan $ # # Author: Andreas Waechter IBM 2006-04-14 # Modified: Lou Hafer SFU 2010-06-11 # Mods to allow variations from standard package structure. Decision to # process a configure.ac file is based on presence of COIN macros. # Directories specified on the command line are recursively searched # for configure.ac files. Install-sh signals an independent unit. # Modified: Lou Hafer SFU 2010-07-08 # More mods to maintain flexibility but be a bit less aggressive about # forcing installation of autotools auxilliary scripts. Also add some # command line options and restore ability to specify individual # directories on the command line. # run_autotools takes care of running the autotools (automake, autoconf, # and helpers) and also makes a few arrangements for when configure and # libtool execute at configuration, build, and installation. # Run_autotools can be given a set of directories on the command line; if none # are specified, it assumes the current directory (`,'). Subdirectories are # searched for configure.ac files unless suppressed with the -nr option. # Autotools will consider a directory for processing if any AC_COIN_ macro is # present in the configure.ac file. Should it be necessary to fool this script # into processing a file that otherwise contains no COIN macros, just add a # line with AC_COIN_. The resulting list is winnowed to remove directories # specified in COIN_SKIP_PROJECTS. # Each directory processed gets a temporary link to BuildTools, unless a # BuildTools subdirectory is already present. Mostly this is a convenience, but # one thing makes it mandatory: Many Makefile.am files in COIN use an include # directive to pull in BuildTools/Makemain.inc. There's no way I (lh) can see # to alter the path that's hardcoded in the include directive. Just to make it # more interesting, COIN projects are generally constructed with the assumption # that BuildTools will be one or two directories up, so you'll see things like # `include ../BuildTools/Makemain.inc'. run_autotools doesn't understand this # hierarchy, so it keeps all those temporary BuildTools links until the very # end. That way, it works with the old-style COIN organisation where a # BuildTools directory is pulled in as an external in the top directory of a # package, and with the new-style independent organisation, where there may be # only a single copy of BuildTools out there somewhere. # If any subdirectory queued for processing is found to contain an install-sh # script, it is treated as an independent unit (i.e., you can run `make # install' from this directory) and the set of auxilliary scripts is refreshed # from BuildTools. You can force installation of install-sh and associated # scripts with the -i option. It's good to read the autoconf documentation for # AC_CONFIG_AUX_DIR if this doesn't make sense to you. # Make sure we bail out if there is an error set -e # Define a cleanup function. We'll set a trap below, just before we start to # do actual work. cleanupOnErrorExit () { for link in $buildtoolsLinks; do echo Trap: removing $link rm -f $link done cd $startDir } # Note that vanilla sh doesn't like negative exit values. # Determine the location of run_autotools. If there are no '/' chars in # the command name, we're running in the current directory (almost certainly # not what's wanted). Otherwise, strip the command name, leaving the prefix. # Convert the prefix to an absolute path, if needed, and clean it up, removing # `XXX/..', '/./', '//' sequences. startDir=`pwd` if expr "$0" : '.*/.*' >/dev/null 2>&1 ; then runautotoolDir=`echo $0 | sed -e 's,\(.*\)/[^/]*,\1,'` else runautotoolDir='.' fi if expr "$runautotoolDir" : '/.*' >/dev/null 2>&1 ; then : else runautotoolDir=$startDir/$runautotoolDir fi while expr "$runautotoolDir" : '.*/\.\./.*' >/dev/null 2>&1 ; do runautotoolDir=`echo $runautotoolDir | sed -e 's,/[^/][^/]*/\.\./,/,'` done runautotoolDir=`echo $runautotoolDir | sed -e 's,/\./,/,g' -e 's,//,/,g'` # Make sure we're using the correct versions of the autotools. Failure to # satisfy this requirement is a fatal error. ver_autoconf='2.59' ver_automake='1.9.6' ver_libtool='1.5.22' EGREP='grep -E' # Check if the correct version of the autotools is used if test x$AUTOTOOLS_DIR = x; then AUTOTOOLS_DIR=$HOME fi grep_version=`echo $ver_autoconf | sed -e 's/\\./\\\\\\./g'` if autoconf --version > confauto.out 2>&1 ; then : ; else echo "autoconf $ver_autoconf not available" rm -f confauto.out exit 2 fi if $EGREP $grep_version confauto.out >/dev/null 2>&1; then :; else echo You are not using the correct version of autoconf rm -f confauto.out exit 2 fi rm -f confauto.out autoconf_dir=`which autoconf | sed -e 's=/autoconf=='` autoconf_dir=`cd $autoconf_dir; pwd` if test $autoconf_dir = `cd $AUTOTOOLS_DIR/bin; pwd`; then :; else echo autoconf is not picked up from the correct location exit 2 fi grep_version=`echo $ver_automake | sed -e 's/\\./\\\\\\./g'` if automake --version > confauto.out 2>&1 ; then : ; else echo "automake $ver_automake not available" rm -f confauto.out exit 2 fi if $EGREP $grep_version confauto.out >/dev/null 2>&1; then :; else echo You are not using the correct version of automake rm -f confauto.out exit 2 fi rm -f confauto.out autoconf_dir=`which automake | sed -e 's=/automake=='` autoconf_dir=`cd $autoconf_dir; pwd` if test $autoconf_dir = `cd $AUTOTOOLS_DIR/bin; pwd`; then :; else echo automake is not picked up from the correct location exit 2 fi # Failure to find the correct version of libtool isn't fatal here, but # the user should be warned. grep_version=`echo $ver_libtool | sed -e 's/\\./\\\\\\./g'` ltfile=$AUTOTOOLS_DIR/share/libtool/ltmain.sh if test -r $ltfile; then :; else echo WARNING: Cannot find libtool shell $ltfile fi if $EGREP $grep_version $ltfile >/dev/null 2>&1; then :; else echo WARNING: You are not using the correct version of libtool fi # Set up to process parameters. No parameters is the default. printHelp=0 doRecurse=1 forceScripts=0 userSpecifiedDirs=0 dirsToProcess= # Process the parameters. A parameter without an opening `-' is assumed to be # a spec for a directory to be processed. while test $# -gt 0 && test $printHelp = 0 ; do case "$1" in -h* | --h* ) printHelp=1 ;; -nr* | --no-recursion ) doRecurse=0 ;; -i | --independent ) forceScripts=1 doRecurse=0 ;; -* ) echo "$0: unrecognised command line switch '"$1"'." printHelp=1 ;; * ) dirsToProcess="$dirsToProcess $1" userSpecifiedDirs=1 ;; esac shift done # Help? if test $printHelp = 1 ; then cat </dev/null 2>&1 ; then dirs="$dirs $dir" else echo " Skipping foreign configure.ac in $dir." fi done # Now compare against the skip entries in COIN_SKIP_PROJECTS. To match the # entries we just collected, add `./' to the front of each skip entry. candDirs=$dirs if test x${COIN_SKIP_PROJECTS+set} = xset ; then dirs= for dir in $COIN_SKIP_PROJECTS ; do skip_dirs="$skip_dirs ./$dir" done for dir in $candDirs ; do skip=0 for skipdir in $skip_dirs ; do if test $dir = $skipdir ; then skip=1 break fi done if test $skip = 0 ; then dirs="$dirs $dir" else echo " Skipping $dir listed in COIN_SKIP_PROJECTS." fi done fi fi # Set a trap so that we'll clean up any links on exit, for whatever reason. # Note that this executes on normal exit, too, so don't do anything rash. topLink= subLink= trap 'exit_status=$? cleanupOnErrorExit exit $exit_status' 0 # And now the main event. Process each directory. echo "Running autotools in $dirs" autotoolsFiles="config.guess config.sub depcomp install-sh ltmain.sh missing" m4Files="$AUTOTOOLS_DIR/share/aclocal/libtool.m4" buildtoolsLinks= for dir in $dirs; do if test -r $dir/configure.ac; then cd $dir echo "Processing $dir ..." # Do we need a BuildTools subdirectory here? The criteria is that install-sh # already exists, or Makefile.am (which may include Makemain.inc), or we're # forcing installation of the configure scripts. Assuming we need BuildTools, # what BuildTools should we use? If a BuildTools is already present, that's # it. Otherwise, assume that runautotooldDir is BuildTools. Allow that the # user may have linked to a BuildTools. needScripts=0 if test -f install-sh || test $forceScripts = 1 ; then needScripts=1 fi if test -f Makefile.am || test $needScripts = 1 ; then if test -d BuildTools || test -L BuildTools ; then createLink=0 toolsDir=`pwd`/BuildTools else createLink=1 toolsDir=$runautotoolDir fi echo " BuildTools directory: $toolsDir" # Test to be sure that run_autotools is coming from the BuildTools directory. if test $createLink = 0 && test "$toolsDir" != "$runautotoolDir" ; then echo "WARNING: using run_autotools from $runautotoolDir" echo " but BuildTools is $toolsDir." echo " Consider carefully if this is what you wanted to do." fi # coin.m4 should live in the same directory; failure is fatal. if test ! -r $toolsDir/coin.m4 ; then echo "Cannot find Coin autotools macro file $toolsDir/coin.m4." echo "It should be in the BuildTools directory." exit 1 fi # Install a link, if needed. if test $createLink = 1 ; then ln -s $toolsDir BuildTools buildtoolsLinks="$buildtoolsLinks `pwd`/BuildTools" echo " creating temporary link for ./BuildTools -> $toolsDir" fi # And refresh the autotools scripts, if needed. if test $needScripts = 1 ; then echo " refreshing autotools scripts in this directory." for file in $autotoolsFiles ; do cp BuildTools/$file . done fi fi # Get on with running the autotools. echo " creating acinclude.m4 in $dir" cat $m4Files $toolsDir/coin.m4 > acinclude.m4 echo " running aclocal in $dir" if test -d m4; then aclocal -I m4 || exit 1 else aclocal || exit 1 fi if grep AC_CONFIG_HEADER configure.ac >/dev/null 2>&1; then echo " running autoheader in $dir" autoheader || exit 1 fi echo " running automake in $dir" automake || exit 1 echo " running autoconf in $dir" autoconf || exit 1 cd $startDir else # Serious confusion! Should not reach here. echo "*** No configure.ac file in $dir - SKIPPING! ***" fi done # Remove the links. Yeah, the trap will do this, but it never hurts to clean # up properly. if test -n "$buildtoolsLinks" ; then echo "Removing temporary links to BuildTools." for link in $buildtoolsLinks ; do # echo " removing temporary link for BuildTools: $link" rm $link done buildtoolsLinks= fi exit DyLP-1.10.4/BuildTools/install-sh0000755000175200017520000002202110430173037015132 0ustar coincoin#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # 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. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= 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: -c (ignored) -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. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; 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 for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi 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 "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # 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: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # 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 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $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 "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: DyLP-1.10.4/BuildTools/set_externals0000755000175200017520000001173411504414745015754 0ustar coincoin#!/bin/sh # Copyright (C) 2007 International Business Machines and # Copyright (c) 2009 Lehigh University # All Rights Reserved. # This file is distributed under the Eclipse Public License. # It is part of the BuildTools project in COIN-OR (www.coin-or.org) # # $Id$ # # Adapted from prepare_new_release by Ted Ralphs, Lehigh Univ., 2009-07-07 # Modified: Lou Hafer SFU 2010-06-02 #set -x -v set -e # Know thy self. If there are no '/' chars in the command name, we're running # in the currrent directory. Otherwise, strip the command name, leaving the # prefix. Coin-functions is expected to live in the same directory. if expr "$0" : '.*/.*' >/dev/null 2>&1 ; then cmdDir=`echo $0 | sed -e 's,\(.*\)/[^/]*,\1,'` else cmdDir='.' fi if test -r $cmdDir/coin-functions ; then . $cmdDir/coin-functions else echo "Cannot find utility functions file coin-functions; exiting." fi printHelp=0 exitValue=0 depFile= # stableExternals specifies externals which we do not want to convert to # releases, for whatever reason. stableExternals= if test "$#" -eq 0; then printHelp=1 else # Process the parameters. A parameter without an opening `-' is assumed to be # the dependency file. while test $# -gt 0 && test $exitValue = 0 && test $printHelp = 0 ; do case "$1" in -h* | --h*) printHelp=1 ;; -s* | --s*) if expr "$1" : '.*-s.*=.*' 2>&1 >/dev/null ; then stableExternals=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift stableExternals=$1 fi ;; -*) echo "$0: unrecognised command line switch '"$1"'." printHelp=1 exitValue=1 ;; *) depFile=$1 ;; esac shift done fi # Find the most recent release for each stable external. Allow for the # possibility that a stable branch has no associated release, or that the # user has asked to keep the stable external. if test $printHelp = 0 && test $exitValue = 0; then if test -r $depFile; then rm -f Externals.releases echo '' echo '===> Converting stable externals to releases ...' echo '' ext_name= ext_url= for i in `cat $depFile`; do if test "$ext_name" = ""; then ext_name="$i" else ext_url=$i if expr "$ext_name" : '#.*' >/dev/null 2>&1 ; then echo "Skipping $ext_name." ext_name= continue fi if expr "$stableExternals" : '.*'"$ext_name"'.*' 2>&1 >/dev/null ; then echo " $ext_name $ext_url unchanged" else extType=`extractTypeFromURL $ext_url` if test "$extType" = invalid ; then echo '' echo "The external URL $ext_url appears to be invalid. Exiting." echo '' exit 3 fi if test "$extType" = stable ; then ext_majVer=`extractMajorFromURL $ext_url` ext_minVer=`extractMinorFromURL $ext_url` ext_rel_url=`bestRelease $ext_url $ext_majVer $ext_minVer` if test -z "$ext_rel_url" ; then echo "There is no release for $ext_url" echo "Keeping $ext_url" else # Normal (not BuildTools/ThirdParty/Data) need a directory name, # and it may differ from the project name. Carefully preserve it. # ThirdParty URLs include BuildTools ; both named for emphasis case $ext_rel_url in */BuildTools/* | */ThirdParty/* | */Data/* ) ;; *) ext_tail=`extractTailFromExt $ext_url` ext_rel_url=${ext_rel_url}${ext_tail} ;; esac echo "Replacing $ext_url with $ext_rel_url" ext_url=$ext_rel_url fi else echo "Keeping $ext_url" fi fi echo "$ext_name $ext_url" >>Externals.releases ext_name= fi done echo '' echo '===> Updating svn:externals property...' echo '' svn propset svn:externals -F Externals.releases . svn propget svn:externals . rm Externals.releases else # if test -r depFile echo "" echo "Dependency file does not exist or is unspecified..." echo "" printHelp=1 exitvalue=2 fi fi if test $printHelp = 1 ; then cat < Options: -s Suppress conversion from stable to release for the listed externals (comma-separated list of project names, e.g., -s Osi,Cbc). This script takes as input a dependency file containing a list of stable versions of COIN projects on separate lines in the form Recommended practice is to keep the set of stable externals in a file called "Dependencies" in the project's root directory. A temporary file called "Externals.releases" in the same form, but with the URL of each stable version replaced by the URL of the latest associated release is produced. From this file, the script will set the svn:externals variable. It does not do an update or commit the change. After the script runs, do an update and test build, then commit the change if you are happy. EOF else cat <. 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 outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac 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" # 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 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. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## 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). ## - 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 -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## 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. tr ' ' ' ' < "$tmpdepfile" | ## 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. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -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 -eq 0; then : else 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 ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; 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. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else 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" ;; 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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in 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.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #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 $1 != '--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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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 $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac 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. -*|$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" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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 $1 != '--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, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; 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-end: "$" # End: DyLP-1.10.4/BuildTools/Makemain.inc0000644000175200017520000001150512504673677015373 0ustar coincoin# Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makemain.inc 3482 2015-03-26 03:06:39Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 ######################################################################## # Documentation installation # ######################################################################## DocFiles = README AUTHORS LICENSE DocInstallDir = $(datadir)/coin/doc/$(PACKAGE_NAME) COIN_HAS_DOXYGEN = @COIN_HAS_DOXYGEN_TRUE@TRUE COIN_HAS_LATEX = @COIN_HAS_LATEX_TRUE@TRUE doxygen-docs: if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ doxygen doxydoc/doxygen.conf;\ fi;\ fi pdf-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/latex"; then \ if test "$(COIN_HAS_LATEX)" = TRUE; then \ cd doxydoc/latex;\ $(MAKE) pdf;\ cd -;\ fi;\ fi;\ fi clean-doxygen-docs: if test -d "doxydoc/"; then \ cd doxydoc ;\ rm -rf html latex *.log *.tag;\ fi install-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc"; \ $(INSTALL_DATA) @coin_doxy_tagname@ "$(DESTDIR)$(DocInstallDir)/@coin_doxy_tagname@";\ if test -f "doxydoc/latex/refman.pdf"; then \ $(INSTALL_DATA) doxydoc/latex/refman.pdf "$(DESTDIR)$(DocInstallDir)";\ fi;\ if test -d "doxydoc/html"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/search/" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc/search/"; \ $(INSTALL_DATA) doxydoc/html/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc";\ $(INSTALL_DATA) doxydoc/html/search/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc/search";\ fi;\ fi;\ fi uninstall-doxygen-docs: if test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/"; then \ rm -rf "$(DESTDIR)$(DocInstallDir)/doxydoc/"; \ fi if test -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; then \ rm -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; \ fi all-doxygen-docs: for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) doxygen-docs) \ fi ; \ done ; clean-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) clean-doxygen-docs) \ fi ; \ done ; install-all-doxygen-docs: all-doxygen-docs for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) install-doxygen-docs) \ fi ; \ done ; uninstall-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) uninstall-doxygen-docs) \ fi ; \ done ; install-doc: $(DocFiles) test -z "$(DocInstallDir)" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)" for file in $(DocFiles); do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ if test -f "$$dir$$file"; then $(INSTALL_DATA) "$$dir$$file" "$(DESTDIR)$(DocInstallDir)/$$file"; fi; \ done uninstall-doc: for file in $(DocFiles); do \ rm -f "$(DESTDIR)$(DocInstallDir)/$$file"; \ done ######################################################################## # Maintainer Stuff # ######################################################################## if MAINTAINER_MODE # Make sure acinclude is using most recent coin.m4 $(srcdir)/acinclude.m4: $(BUILDTOOLSDIR)/coin.m4 cat $(LIBTOOLM4) $< > $@ # Make sure the autotools scripts are up to date $(AUX_DIR)/install-sh: $(BUILDTOOLSDIR)/install-sh cp $< $@ $(AUX_DIR)/missing: $(BUILDTOOLSDIR)/missing cp $< $@ $(AUX_DIR)/config.guess: $(BUILDTOOLSDIR)/config.guess cp $< $@ $(AUX_DIR)/config.sub: $(BUILDTOOLSDIR)/config.sub cp $< $@ $(AUX_DIR)/depcomp: $(BUILDTOOLSDIR)/depcomp cp $< $@ $(AUX_DIR)/ltmain.sh: $(BUILDTOOLSDIR)/ltmain.sh cp $< $@ # Take care of updating externals (if Dependencies file exists) if HAVE_EXTERNALS $(top_builddir)/Makefile: .Dependencies-stamp .Dependencies-stamp: $(srcdir)/Dependencies cd $(srcdir); BuildTools/set_externals Dependencies touch .Dependencies-stamp update-externals: .Dependencies-stamp cd $(srcdir); svn update endif endif if HAVE_EXTERNALS EXTRA_DIST += Dependencies DISTCLEANFILES += .Dependencies-stamp endif DISTCLEANFILES += $(VPATH_DISTCLEANFILES) .PHONY: install-doc uninstall-doc update-externals DyLP-1.10.4/BuildTools/config.guess0000755000175200017520000012706310637360060015465 0ustar coincoin#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-05-17' # 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 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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 Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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 # 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 tupples: *-*-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 __ELF__ >/dev/null 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 ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-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'` exit ;; 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-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-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-unknown-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 ;; 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:SunOS:5.*:* | ix86xen:SunOS:5.*:*) echo i386-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-unknown-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:*:[45]) 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 __LP64__ >/dev/null 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}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-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-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-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-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu 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 ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${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-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa:Linux:*:*) echo xtensa-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; 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}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-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}-unknown-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 i386. echo i386-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-unknown-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; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-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-unknown-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 ;; 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 case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac 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 ;; 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}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-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-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-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 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 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: DyLP-1.10.4/BuildTools/MSVisualStudio/0000755000175200017520000000000013434203623016026 5ustar coincoinDyLP-1.10.4/BuildTools/MSVisualStudio/v10/0000755000175200017520000000000013434203623016434 5ustar coincoinDyLP-1.10.4/BuildTools/MSVisualStudio/v10/Debug.props0000755000175200017520000000122012154626433020553 0ustar coincoin MultiThreadedDebugDLL true EnableFastChecks Disabled true DyLP-1.10.4/BuildTools/MSVisualStudio/v10/Common.props0000755000175200017520000000135412204424023020750 0ustar coincoin $(SolutionDir)$(Platform)-$(PlatformToolset)-$(Configuration)\ $(Platform)-$(PlatformToolset)-$(Configuration)\ Level3 true $(OutDir);%(AdditionalLibraryDirectories) DyLP-1.10.4/BuildTools/MSVisualStudio/v10/Release.props0000755000175200017520000000061012052443620021077 0ustar coincoin true DyLP-1.10.4/BuildTools/MSVisualStudio/v9/0000755000175200017520000000000013434203623016364 5ustar coincoinDyLP-1.10.4/BuildTools/MSVisualStudio/v9/BuildTools.vcproj0000644000175200017520000000534111572120430021667 0ustar coincoin DyLP-1.10.4/BuildTools/commit_new_stable0000755000175200017520000001636713054156146016576 0ustar coincoin#!/bin/sh # Copyright (C) 2010 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # It is part of the BuildTools project in COIN-OR (www.coin-or.org) # # $Id$ # # Adapted from commit_new_release by Lou Hafer, SFU, 100507. #set -x -v set -e # Know thy self. If there are no '/' chars in the command name, we're running # in the current directory. Otherwise, strip the command name, leaving the # prefix. Coin-functions is expected to live in the same directory. As of # the original version (100602), this script doesn't need coin-functions, # but this still has some value as a consistency check. if expr "$0" : '.*/.*' >/dev/null 2>&1 ; then cmdDir=`echo $0 | sed -e 's,\(.*\)/[^/]*,\1,'` else cmdDir='.' fi cmdDir=`cd $cmdDir ; pwd` if test -r $cmdDir/coin-functions ; then . $cmdDir/coin-functions else echo "Cannot find utility functions file coin-functions; exiting." fi # We need at least one parameter. The default is a dry run (dryRun = 1). printHelp=0 dryRun=1 dirToCommit= if test "$#" -eq 0; then printHelp=1 else # Process the parameters. A parameter without an opening `-' is assumed to be # the spec for the directory to be committed. (Strip any trailing '/'. Some # people add it, but the script doesn't expect it.) while test $# -gt 0 && test $printHelp = 0 ; do case "$1" in -h* | --h*) printHelp=1 ;; -c* | --c*) dryRun=0 ;; -*) echo "$0: unrecognised command line switch '"$1"'." printHelp=1 ;; *) dirToCommit=`echo $1 | sed -e 's,/$,,'` ;; esac shift done fi # What are we committing? if test -z "$dirToCommit" ; then printHelp=1 fi if test $printHelp = 1 ; then cat < By default, commit_new_stable is a dry run, printing the commands that will be executed. When you're confident that everything looks right, use the -c (--commit) flag to commit the new stable branch. EOF exit 1 fi # Remember what was done during generation of the new stable. if test -r $dirToCommit/.new_stable_data; then . $dirToCommit/.new_stable_data else echo '' echo "Error: the file .new_stable_data is not present in $dirToCommit." echo 'Are you running commit_new_stable in the same directory where you' echo 'ran prepare_new_stable?' echo '' exit 1 fi # Confirm that we're in the proper directory. currDir=`pwd` if test "$currDir/$dirToCommit" != "$topBuildDir" ; then echo "According to $dirToCommit/.new_stable_data, the stable candidate was assembled" echo "in $topBuildDir." echo "You have asked to commit $currDir/$dirToCommit." echo "There is some confusion. Repository is unchanged." exit 1 fi # Change to the checkout directory. cd $coDir # If there are externals set on this directory, confirm that # .Externals.original is present so that we can restore them later. newStableExternals=`svn propget svn:externals . || true` if test -n "$newStableExternals" ; then if test -r .Externals.original ; then : else echo "This project has externals, but no .Externals.original file" echo "is present to restore them. Repository is unchanged." exit 1 fi fi # Make some short-form URLs by stripping the COIN URL base. srcURLshort=`echo $srcURL | sed -e "s,$coinURL/\(.*\),\1,"` newStableURLshort=`echo $newStableURL | sed -e "s,$coinURL/\(.*\),\1,"` # Do we have to svn add Dependencies? If this query comes up with a leading # `?', the answer is yes. If Dependencies is entirely absent or unchanged, # we'll get a null string. If it's modified, we'll have a leading `M'. dependStatus=`svn status Dependencies` if expr "$dependStatus" : '?.*Dependencies.*' >/dev/null 2>&1 ; then cmd='svn add Dependencies' echo $cmd if test $dryRun = 0 ; then eval $cmd fi fi # Now, do we really need to to a temporary commit? BuildTools is the poster # child, there are no changes at time of writing (100629). Do an svn status # on the checkout directory and see if anything comes up as modified. if svn status $coDir | egrep '^M' 2>&1 >/dev/null ; then doCommit=yes else doCommit=no fi if test $doCommit = yes ; then # Commit the stable back to its source URL so we can do a repository-side copy # to create the release. echo '' echo "===> Temporarily committing stable candidate to $srcURLshort ..." echo '' rev_num_before=`svn info . | grep -E '^Revision:' | sed -e 's|Revision: ||'` echo "Revision number before commit: $rev_num_before" cmd="svn ci -m \"temporarily committing stable candidate\"" echo $cmd if test $dryRun = 0 ; then eval $cmd fi # Update to confirm the commit. Avoid pulling in externals --- if we're # doing multiple commits of new stable branches, they may not exist. As it # stands, the main purpose of this call is to allow us to easily obtain the # current revision. # It might be useful to strengthen this and check that the value # is what we're expecting --- one greater than the revision before # commit. `--ignore-externals' could be made provisional on the existence # of all externals by passing a boolean through .new_release_data. This # would strengthen the update, in that the update would confirm existence # of the externals. cmd='svn update --ignore-externals' echo $cmd if test $dryRun = 0 ; then eval $cmd fi rev_num=`svn info . | grep -E '^Revision:' | sed -e 's|Revision: ||'` echo "Current revision number is: $rev_num" fi # End of preparatory commit. # Create the new stable branch with a repository-side copy. echo '' echo "===> Creating new stable branch $newStableURLshort from $srcURLshort (r$rev_num) ..." echo '' cmd="svn copy -m \"creating $newStableURLshort from $srcURLshort (r$rev_num).\" $srcURL $newStableURL" echo $cmd if test $dryRun = 0 ; then eval $cmd fi # Now restore the original stable branch. if test $doCommit = yes ; then # And restore the source to its original condition. Start by reverting # to the original externals. if test -r .Externals.original ; then echo '' echo '===> Restoring original externals ...' echo '' cmd="svn propset -F .Externals.original svn:externals ." echo $cmd if test $dryRun = 0 ; then eval $cmd rm .Externals.original fi fi # For every .bak file that we created, revert it. if test -n "$bak_files" ; then echo '' echo '===> Restoring modified files ...' echo '' for i in $bak_files; do cmd="cp $i.bak $i ; rm $i.bak" if test $dryRun = 1 ; then echo "$cmd" else eval $cmd fi done fi # Rebuild configure and Makefile.in files echo '' echo '===> Executing run_autotools to restore configuration files ...' echo '' curdir=`pwd` cd $topBuildDir cmd="./BuildTools/run_autotools" echo $cmd if test $dryRun = 0 ; then eval $cmd fi cd "$curdir" # Commit the restored source URL. echo '' echo "===> Committing restored $srcURLshort ..." echo '' cmd="svn ci -m \"restoring $srcURLshort\"" echo $cmd if test $dryRun = 0 ; then eval $cmd fi fi # End of restorative commit. cd $topBuildDir cmd="rm .new_stable_data" echo $cmd if test $dryRun = 0 ; then eval $cmd fi cd $startDir echo '' echo "Done, new stable $newStableURLshort created." echo '' echo "You can now delete the directory $topBuildDir including subdirectories" DyLP-1.10.4/BuildTools/config.sub0000755000175200017520000007772610637360060015142 0ustar coincoin#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-04-29' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # 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 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # 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. # 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) 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) os= basic_machine=$1 ;; -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*) 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 \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | 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 | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-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-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | 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-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | 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-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # 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 ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; 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 ;; cr16c) basic_machine=cr16c-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 ;; 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'm not sure what "Sysv32" means. Should this be sysv3.2? 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 ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; 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-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; 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 ;; 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 ;; 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) basic_machine=powerpc-unknown ;; ppc-*) 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) 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 ;; 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 ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; 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 ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-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[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. -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* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -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* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -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*) # 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 ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -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 ;; # 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 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) 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 ;; -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: DyLP-1.10.4/BuildTools/ltmain.sh0000755000175200017520000057753010430173037014775 0ustar coincoin# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 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 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # 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. basename="s,^.*/,,g" # 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" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" # 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 # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # 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 "$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" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # 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. func_win32_libid () { 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 if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $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_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 () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done 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 "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # 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. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # 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 $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi 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 my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do 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 have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2005 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --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 $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # 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= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # 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= 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) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$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,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$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. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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 $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) 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 "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 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 $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "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." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </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." $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 $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </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." $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 $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built fi 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 case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$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 dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= 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 compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes 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 $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" 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*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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*) # 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 deplibs="$deplibs -framework System" 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 deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -pg pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ -t[45]*|-txscale*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 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*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # 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 ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" 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. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'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\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; 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 test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$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 test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$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 case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; 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 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 "$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) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; 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 (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac 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 ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." 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 -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; 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 newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` 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 used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi 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. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # 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 case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$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 $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE 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. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$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 $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$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 notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi 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 newlib_search_path="$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*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test 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 test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$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 -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 *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if 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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; 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*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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 "$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 module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; 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 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; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$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 $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$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:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; 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:"*) ;; *) finalize_shlibpath="$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 [\\/]*) add_dir="$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*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$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" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared 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 "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs 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 "*) ;; *) lib_search_path="$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 "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$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 tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" 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 if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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="$2" number_minor="$3" number_revision="$4" # # 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 darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; 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]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE 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 major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` 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 iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` 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 iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; 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 $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$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) ;; $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 removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` dependency_libs=`$echo "$dependency_libs " | ${SED} -e "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 temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 "*) ;; *) dlfiles="$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 "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-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 deplibs="$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. $rm conftest.c cat > conftest.c </dev/null` 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$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 newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e '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 "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $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 fi ;; 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 is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; 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 # 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$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 if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$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 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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$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" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$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 "$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 realname="$2" shift; 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 linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "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"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $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:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # 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 output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$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. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 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~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "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" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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\" 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 # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(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 "$mode" = relink; then $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 $show "${rm}r $gentop" $run ${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 $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run 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 "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $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 wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${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" # $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" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$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 "*) ;; *) finalize_rpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$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 "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # 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/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= 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*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; 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 "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" 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 rpath="$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 rpath="$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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? 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" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e '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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` 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 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #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 # 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 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ 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; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); 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 ("getcwd failed"); 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 ("getcwd failed"); 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 * 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; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # 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 variable: 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 echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ 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 >> $output "\ # 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 $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE 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 $EXIT_FAILURE fi fi\ " chmod +x $output fi 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" 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" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$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 # 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 $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_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 for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$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= 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 save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; 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 "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then 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) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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' # Libraries that this one depends upon. dependency_libs='$dependency_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 fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # 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. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; 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. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$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 "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. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi 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 $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run 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 if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run 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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` 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 file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "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) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $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" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 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 -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # 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 ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" 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) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; 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 (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$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 rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [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 --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information 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. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [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: $modename [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 -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking 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: $modename [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: $modename [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: $modename [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 rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [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 -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 -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] 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: $modename [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." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # 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 disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: DyLP-1.10.4/BuildTools/coin-functions0000644000175200017520000005022312467317470016031 0ustar coincoin # Utility function definitions for the various COIN scripts. # Copyright (c) 2010 Lou Hafer Simon Fraser University # All Rights Reserved. # This file is distributed under the Eclipse Public License. # It is part of the BuildTools project in COIN-OR (www.coin-or.org) # # $Id$ # Functions to disassemble svn URLs and extract relevant bits, and utilities # to find the best (most recent) stable and release URLs, calculate libtool # version numbers, and compare URLs for compatibility based on major and minor # version. Complicated because we have to account for trunk/stable/release and # for the variant syntax of Data and ThirdParty URLs. For your normal project, # it's # https://projects.coin-or.org/svn/ProjName/trunk # https://projects.coin-or.org/svn/ProjName/stable/M.m # https://projects.coin-or.org/svn/ProjName/releases/M.m.r # with the proviso that sometimes it's # https://projects.coin-or.org/svn/ProjName/SubProj/trunk # etc. # For ThirdParty, it's just like a normal project, except the prefix string # is longer: # https://projects.coin-or.org/svn/BuildTools/ThirdParty/ProjName # Data is the real pain. Prior to 20101103 (1.0.x series), it had this form: # https://projects.coin-or.org/svn/Data/trunk/ProjName # https://projects.coin-or.org/svn/Data/stable/M.m/ProjName # https://projects.coin-or.org/svn/Data/releases/M.m.r/ProjName # After 20101103 (1.1 and subsequent), it uses the same layout as ThirdParty, # namely /Data/Projname/. Macros below # will cope, but really you should be using pre-1.1 Data anyway. # Extract the COIN base from the URL, up to svn. Just in case it ever changes. # usage: baseURL=`extractBaseURL $svnURL` extractBaseURL () { exbu_baseURL=`echo $1 | sed -n -e 's|\(.*/svn\)/.*$|\1|p'` echo "$exbu_baseURL" } # Extract branch type (trunk/stable/release) from the URL. # usage: branchType=`extractTypeFromURL $svnURL` extractTypeFromURL () { etfu_type="invalid" case "$1" in */trunk* ) etfu_type=trunk ;; */stable/* ) etfu_type=stable ;; */releases/* ) etfu_type=release ;; esac echo $etfu_type } # Determine if this is a `normal' URL, defined as not Data, ThirdParty, or # BuildTools itself. ThirdParty lives in BuildTools as of 100628, so the # condition is redundant. Returns yes or no. # 101105 Exclude CoinBazaar, which follows the Data pattern. May not be the # correct choice if any CoinBazaar projects use BuildTools # usage: isNormal=`isNormalURL $svnURL` isNormalURL () { case $1 in */BuildTools/* | */ThirdParty/* | */Data/* | */CoinBazaar/* ) echo "no" ;; *) echo "yes" ;; esac } # Extract the project from a svn URL. The trick, for `normal' projects, is to # handle CHiPPS, which has CHiPPS/Alps, Bcps, Blis. We can't assume the # project name does not contain '/'. The heuristic is to look for everything # between svn and one of trunk, stable, releases, or end of line. # usage: projName=`extractProjFromURL $svnURL` extractProjFromURL () { epfu_URL="$1" epfu_projPat='\([^/][^/]*\)' epfu_sfxPat='.*$' case "$epfu_URL" in */Data/trunk/* ) epfu_pfxPat=svn/Data/trunk/ ;; */Data/stable/* | */Data/releases/* ) epfu_pfxPat='svn/Data/[^/][^/]*/[0-9][0-9.]*/' ;; */Data/* ) epfu_pfxPat='svn/Data/' ;; */ThirdParty/* ) epfu_pfxPat=svn/BuildTools/ThirdParty/ ;; *) epfu_type=`extractTypeFromURL $epfu_URL` epfu_pfxPat='svn/' epfu_projPat='\(.*\)' case $epfu_type in trunk | stable | release ) epfu_sfxPat=$epfu_type'.*$' ;; * ) epfu_sfxPat='$' ;; esac ;; esac epfu_projName=`echo $epfu_URL | sed -n -e 's|.*/'$epfu_pfxPat$epfu_projPat$epfu_sfxPat'|\1|p'` epfu_projName=`echo $epfu_projName | sed -e 's|/$||'` echo "$epfu_projName" } # Extract the tail (directory) from a URL that specifies an external. Relevant # only for normal projects, where the external will be a subdirectory # of the project. Returns null for Data / ThirdParty / BuildTools. # usage: projName=`extractTailFromExt $extURL` extractTailFromExt () { etfe_tail= case "$1" in */Data/* ) ;; */BuildTools/ThirdParty/* ) ;; */BuildTools/* ) ;; */CoinBazaar/* ) ;; *) etfe_pfxPat= case "$1" in */trunk/* ) etfe_pfxPat='.*/trunk/' ;; */stable/* ) etfe_pfxPat='.*/stable/[0-9][0-9.]*/' ;; */releases/* ) etfe_pfxPat='.*/releases/[0-9][0-9.]*/' ;; esac etfe_tail=`echo $1 | sed -n -e 's|'$etfe_pfxPat'\(.*\)|\1|p'` ;; esac echo "$etfe_tail" } # CppAD uses a version string of the form YYYMMDD.rr. What a pain in the ass. # Hence the scattered exceptions below. # Extract the entire version string from a stable or release URL. Returns a # null string if handed a trunk URL or if there's no version in the URL. The # version number must have at least major.minor to match. # usage: version=`extractVersionFromURL $svnURL` extractVersionFromURL () { evfu_URL="$1" if expr "$evfu_URL" : '.*/stable/.*' >/dev/null 2>&1 || expr "$evfu_URL" : '.*/releases/.*' >/dev/null 2>&1 ; then if expr "$evfu_URL" : '.*/CppAD/.*' >/dev/null 2>&1 ; then evfu_verPat='\([0-9][0-9.]*\)' else evfu_verPat='\([0-9][0-9]*\.[0-9][0-9.]*\)' fi evfu_sfxPat='.*$' evfu_proj=`extractProjFromURL $evfu_URL` case "$evfu_URL" in */Data/stable/* | */Data/releases/* ) evfu_pfxPat='svn/Data/[^/][^/]*/' ;; */ThirdParty/* ) evfu_pfxPat='svn/BuildTools/ThirdParty/[^/][^/]*/[^/][^/]*/' ;; */Data/* ) evfu_pfxPat='svn/Data/'$evfu_proj'/[^/][^/]*/' ;; *) evfu_pfxPat='svn/'$evfu_proj'/[^/][^/]*/' ;; esac evfu_verVer=`echo $1 | sed -n -e 's|.*/'$evfu_pfxPat$evfu_verPat$evfu_sfxPat'|\1|p'` echo "$evfu_verVer" else echo "" fi } # Replace the entire version string from a stable or release URL. A trunk # URL will be unmodified. newRev will not be accessed unless the URL is a # release. The version must have at least major.minor to match. # usage: newURL=`replaceVersionInURL $oldURL $newMajor $newMinor $newRev` # and just for CppAD, # usage: newURL=`replaceVersionInURL $oldURL $newMajor $newRev` replaceVersionInURL () { if expr "$1" : '.*/CppAD/.*' >/dev/null 2>&1 ; then isCppAD=yes else isCppAD=no fi if test $isCppAD = no ; then rviu_verPat='[0-9][0-9]*\.[0-9][0-9.]*' else rviu_verPat='[0-9][0-9.]*' fi if expr "$1" : '.*/stable/.*' >/dev/null 2>&1 ; then if test $isCppAD = no ; then rviu_newVersion=$2.$3 else rviu_newVersion=$2 fi elif expr "$1" : '.*/releases/.*' >/dev/null 2>&1 ; then if test $isCppAD = no ; then rviu_newVersion=$2.$3.$4 else rviu_newVersion=$2.$3 fi else rviu_newVersion= rviu_newURL=$1 fi if test -n "$rviu_newVersion" ; then rviu_newURL=`echo $1 | sed -n -e 's|^\(.*\)/'$rviu_verPat'\(.*\)$|\1/'$rviu_newVersion'\2|p'` fi echo $rviu_newURL } # Extract the major version number from a stable or release URL. Returns -1 if # handed a trunk URL or if there's no version in the URL # usage: majVer=`extractMajorFromURL $svnURL` extractMajorFromURL () { ejfu_URL="$1" if expr "$ejfu_URL" : '.*/stable/.*' >/dev/null 2>&1 || expr "$ejfu_URL" : '.*/releases/.*' >/dev/null 2>&1 ; then ejfu_majPat='\([0-9][0-9]*\)' if expr "$ejfu_URL" : '.*/CppAD/.*' >/dev/null 2>&1 ; then ejfu_sfxPat='.*$' else ejfu_sfxPat='\.[0-9][0-9]*.*$' fi ejfu_proj=`extractProjFromURL $ejfu_URL` case "$ejfu_URL" in */Data/stable/* | */Data/releases/* ) ejfu_pfxPat='svn/Data/[^/][^/]*/' ;; */ThirdParty/* ) ejfu_pfxPat='svn/BuildTools/ThirdParty/[^/][^/]*/[^/][^/]*/' ;; */Data/* ) ejfu_pfxPat='svn/Data/'$ejfu_proj'/[^/][^/]*/' ;; *) ejfu_pfxPat='svn/'$ejfu_proj'/[^/][^/]*/' ;; esac ejfu_majVer=`echo $ejfu_URL | sed -n -e 's|.*/'$ejfu_pfxPat$ejfu_majPat$ejfu_sfxPat'|\1|p'` echo "$ejfu_majVer" else echo "-1" fi } # Extract the minor version number from a stable or release URL. Returns -1 if # handed a trunk URL or if there's no version in the URL. # The CppAD form (YYYYMMDD.rr) doesn't have a minor version number. # usage: minVer=`extractMinorFromURL $svnURL` extractMinorFromURL () { emfu_URL="$1" if expr "$emfu_URL" : '.*/CppAD/.*' >/dev/null 2>&1 ; then echo "-1" elif expr "$emfu_URL" : '.*/stable/.*' >/dev/null 2>&1 || expr "$emfu_URL" : '.*/releases/.*' >/dev/null 2>&1 ; then emfu_minPat='[0-9][0-9]*\.\([0-9][0-9]*\)' emfu_sfxPat='.*$' emfu_proj=`extractProjFromURL $emfu_URL` case "$emfu_URL" in */Data/stable/* | */Data/releases/* ) emfu_pfxPat='svn/Data/[^/][^/]*/' ;; */ThirdParty/* ) emfu_pfxPat='svn/BuildTools/ThirdParty/[^/][^/]*/[^/][^/]*/' ;; */Data/* ) emfu_pfxPat='svn/Data/'$emfu_proj'/[^/][^/]*/' ;; *) emfu_pfxPat='svn/'$emfu_proj'/[^/][^/]*/' ;; esac emfu_minVer=`echo $emfu_URL | sed -n -e 's|.*/'$emfu_pfxPat$emfu_minPat$emfu_sfxPat'|\1|p'` echo "$emfu_minVer" else echo "-1" fi } # Extract the release (revision) number from a release URL. Returns -1 if # handed a trunk or stable URL # usage: minVer=`extractReleaseFromURL $svnURL` extractReleaseFromURL () { erfu_URL="$1" if expr "$erfu_URL" : '.*/releases/.*' >/dev/null 2>&1 ; then if expr "$erfu_URL" : '.*/CppAD/.*' >/dev/null 2>&1 ; then erfu_relPat='[0-9][0-9]*\.\([0-9][0-9]*\)' else erfu_relPat='[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\)' fi erfu_sfxPat='.*$' erfu_proj=`extractProjFromURL $erfu_URL` case "$erfu_URL" in */Data/releases/* ) erfu_pfxPat='svn/Data/[^/][^/]*/' ;; */ThirdParty/* ) erfu_pfxPat='svn/BuildTools/ThirdParty/[^/][^/]*/[^/][^/]*/' ;; */Data/*) erfu_pfxPat='svn/Data/'$erfu_proj'/[^/][^/]*/' ;; *) erfu_pfxPat='svn/'$erfu_proj'/[^/][^/]*/' ;; esac erfu_relVer=`echo $erfu_URL | sed -n -e 's|.*/'$erfu_pfxPat$erfu_relPat$erfu_sfxPat'|\1|p'` echo "$erfu_relVer" else echo "-1" fi } # Now some functions to locate the highest-numbered stable or release. # Return the URL of the most recent stable branch matching the parameters. # A value of -1 for major version is interpreted as `highest number' # Returns an empty string if no suitable stable branch exists. # usage: stableURL=`bestStable ` bestStable () { bstb_URL=$1 bstb_majVer=$2 # Construct a URL to send to the repository to list the stable branches. bstb_baseURL=`extractBaseURL $bstb_URL` bstb_proj=`extractProjFromURL $bstb_URL` case "$bstb_URL" in */Data/trunk/* ) bstb_listURL=$bstb_baseURL/Data/stable ;; */Data/* ) bstb_listURL=$bstb_baseURL/Data/$bstb_proj/stable ;; */ThirdParty/* ) bstb_listURL=$bstb_baseURL/BuildTools/ThirdParty/$bstb_proj/stable ;; * ) bstb_listURL=$bstb_baseURL/$bstb_proj/stable ;; esac bstb_rawls=`svn list $bstb_listURL | sort -nr -t. -k1,1 -k2,2` # echo "Raw ls: $bstb_rawls" # Filter the list of stable branches to remove any that do not match the # requested major version. Note that there's a / at the end of each URL. if test "$bstb_majVer" = "-1" ; then bstb_verPat='[0-9][0-9.]*/' elif expr "$bstb_URL" : '.*/CppAD/.*' >/dev/null 2>&1 ; then bstb_verPat=$bstb_majVer'/' else bstb_verPat=$bstb_majVer'\.[0-9][0-9]*' fi bstb_filter= for bstb_ver in $bstb_rawls ; do if expr "$bstb_ver" : "$bstb_verPat" >/dev/null 2>&1 ; then bstb_filter="$bstb_filter $bstb_ver" fi done # echo "Filtered ls: $bstb_filter" # If there are any candidates left ... bstb_bestURL= if test -n "$bstb_filter" ; then # If we're dealing with old-style Data, we have to work a bit harder # to find our project. See if any of the filtered candidates contain # the correct project. case "$bstb_URL" in */Data/trunk/* | */Data/stable/* | */Data/releases/* ) bstb_projPat='.*'$bstb_proj'/.*' # echo "Pattern: $bstb_projPat" for bstb_ver in $bstb_filter ; do if expr "$bstb_ver" : "$bstb_verPat" >/dev/null 2>&1 ; then # echo " url: $bstb_listURL/$bstb_ver" bstb_svnls2="`svn list $bstb_listURL/$bstb_ver`" # echo " result: $bstb_svnls2" if expr "$bstb_svnls2" : "$bstb_projPat" >/dev/null 2>&1 ; then bstb_best=$bstb_ver # echo " best: $bstb_best" break fi fi done bstb_bestURL=$bstb_listURL/$bstb_best$bstb_proj ;; *) bstb_bestURL=`echo $bstb_filter | sed -n -e 's|\([^/]*/\).*$|\1|p'` bstb_bestURL=$bstb_listURL/$bstb_bestURL ;; esac fi echo $bstb_bestURL } # Return the URL of the most recent release matching the parameters. Returns # null if no suitable release exists. # A value of -1 for major or minor version is interpreted as `highest number' # A value of -1 for major version means that minor version is ignored. # usage: releaseURL=`bestRelease ` bestRelease () { bstb_URL=$1 bstb_majVer=$2 bstb_minVer=$3 # Construct a URL to send to the repository to list the releases. bstb_baseURL=`extractBaseURL $bstb_URL` bstb_proj=`extractProjFromURL $bstb_URL` case "$bstb_URL" in */Data/* ) bstb_listURL=$bstb_baseURL/Data/$bstb_proj/releases ;; */ThirdParty/* ) bstb_listURL=$bstb_baseURL/BuildTools/ThirdParty/$bstb_proj/releases ;; * ) bstb_listURL=$bstb_baseURL/$bstb_proj/releases ;; esac bstb_rawls=`svn list $bstb_listURL | sort -nr -t. -k1,1 -k2,2 -k3,3` # echo "Raw ls: $bstb_rawls" # Filter the list of releases to remove any that do not match the # requested major and minor version. if expr "$bstb_URL" : '.*/CppAD/.*' >/dev/null 2>&1 ; then isCppAD=yes else isCppAD=no fi if test "$bstb_majVer" = "-1" ; then bstb_verPat='[0-9][0-9.]*/' else bstb_verPat=$bstb_majVer if test $isCppAD = no && test "$bstb_minVer" != "-1" ; then bstb_verPat="${bstb_verPat}\.$bstb_minVer" fi bstb_verPat="${bstb_verPat}"'\.[0-9][0-9]*/' fi # echo "Version pattern: $bstb_verPat" bstb_filter= for bstb_ver in $bstb_rawls ; do if expr "$bstb_ver" : "$bstb_verPat" >/dev/null 2>&1 ; then bstb_filter="$bstb_filter $bstb_ver" fi done # echo "Filtered ls: $bstb_filter" # If there are any candidates left ... bstb_bestURL= if test -n "$bstb_filter" ; then # If we're dealing with old-style Data, we have to work a bit harder to find our # project. See if any of the filtered candidates contain the correct # project. case "$bstb_URL" in */Data/trunk/* | */Data/stable/* | */Data/releases/* ) bstb_projPat='.*'$bstb_proj'/.*' # echo "Pattern: $bstb_projPat" for bstb_ver in $bstb_filter ; do if expr "$bstb_ver" : "$bstb_verPat" >/dev/null 2>&1 ; then # echo " url: $bstb_listURL/$bstb_ver" bstb_svnls2="`svn list $bstb_listURL/$bstb_ver`" # echo " result: $bstb_svnls2" if expr "$bstb_svnls2" : "$bstb_projPat" >/dev/null 2>&1 ; then bstb_best=$bstb_ver # echo " best: $bstb_best" break fi fi done bstb_bestURL=$bstb_listURL/$bstb_best$bstb_proj ;; *) bstb_bestURL=`echo $bstb_filter | sed -n -e 's|\([^/]*/\).*$|\1|p'` bstb_bestURL=$bstb_listURL/$bstb_bestURL ;; esac fi echo $bstb_bestURL } # Count the total number of stable branches for the project for the specified # major version number, up to the specified minor version number (libtool age). # Returns 0 if handed a trunk url, or if the url is BuildTools itself. # usage: calcLibtoolAge calcLibtoolAge () { cltc_URL=$1 cltc_majVer=$2 cltc_minVer=$3 # Construct a URL to send to the repository to list the stable branches. cltc_baseURL=`extractBaseURL $cltc_URL` cltc_proj=`extractProjFromURL $cltc_URL` case "$cltc_URL" in */Data/* ) cltc_listURL=$cltc_baseURL/Data/$cltc_proj/stable ;; */ThirdParty/* ) cltc_listURL=$cltc_baseURL/BuildTools/ThirdParty/$cltc_proj/stable ;; */BuildTools/* ) cltc_listURL= ;; * ) cltc_listURL=$cltc_baseURL/$cltc_proj/stable ;; esac # Run an ls and filter for standard stable branches (M.m or YYYYMMDD) if test -n "$cltc_listURL" ; then cltc_rawls=`svn list $cltc_listURL | sed -n -e '/[0-9][0-9.]/p'` # echo "Raw ls: $cltc_rawls" # Filter the list of stable branches to remove any that do not match the # requested major version. if expr "$cltc_URL" : '.*/CppAD/.*' >/dev/null 2>&1 ; then cltc_verPat=$cltc_majVer else cltc_verPat=$cltc_majVer'\.[0-9][0-9]*/' fi cltc_majfilter= for cltc_ver in $cltc_rawls ; do if expr "$cltc_ver" : "$cltc_verPat" >/dev/null 2>&1 ; then cltc_majfilter="$cltc_majfilter $cltc_ver" fi done # echo "Filtered ls (major version): $cltc_majfilter" # For the specific major version, filter the list that matched on major # version to remove any that exceed the minor version. cltc_minfilter= for cltc_ver in $cltc_majfilter ; do cltc_min=`echo $cltc_ver | sed -e 's/[0-9][0-9]*\.\([0-9][0-9]*\).*/\1/'` if expr $cltc_min '<=' $cltc_minVer >/dev/null 2>&1 ; then cltc_minfilter="$cltc_minfilter $cltc_ver" fi done # echo "Filtered ls (minor version): $cltc_minfilter" cltc_cnt=`echo $cltc_minfilter | wc -w | sed -e 's/ //g'` else cltc_cnt=0 fi echo $cltc_cnt } # Count the total number of stable branches for the project up to the # specified major.minor version number (libtool current). Returns 0 if # handed a trunk url, or if the url is BuildTools itself. # usage: calcLibtoolCurrent calcLibtoolCurrent () { cltc_URL=$1 cltc_majVer=$2 cltc_minVer=$3 # Construct a URL to send to the repository to list the stable branches. cltc_baseURL=`extractBaseURL $cltc_URL` cltc_proj=`extractProjFromURL $cltc_URL` case "$cltc_URL" in */Data/* ) cltc_listURL=$cltc_baseURL/Data/$cltc_proj/stable ;; */ThirdParty/* ) cltc_listURL=$cltc_baseURL/BuildTools/ThirdParty/$cltc_proj/stable ;; */BuildTools/* ) cltc_listURL= ;; * ) cltc_listURL=$cltc_baseURL/$cltc_proj/stable ;; esac # Run an ls and filter for standard stable branches (M.m or YYYYMMDD) if test -n "$cltc_listURL" ; then cltc_rawls=`svn list $cltc_listURL | sed -n -e '/[0-9][0-9.]/p'` # echo "Raw ls: $cltc_rawls" # Filter the list of stable branches to find those with standard version # numbers. cltc_verPat='[0-9][0-9.]*/' cltc_stdfilter= for cltc_ver in $cltc_rawls ; do if expr "$cltc_ver" : "$cltc_verPat" >/dev/null 2>&1 ; then cltc_stdfilter="$cltc_stdfilter $cltc_ver" fi done # echo "Filtered ls (standard): $cltc_stdfilter" # Filter to remove major versions that exceed the specified version. cltc_majfilter= for cltc_ver in $cltc_stdfilter ; do cltc_maj=`echo $cltc_ver | sed -e 's/\([0-9][0-9]*\)\.[0-9].*/\1/'` if expr $cltc_maj '<=' $cltc_majVer >/dev/null 2>&1 ; then cltc_majfilter="$cltc_majfilter $cltc_ver" fi done # echo "Filtered ls (major version): $cltc_majfilter" # For the specific major version, filter the list that matched on major # version to remove any that exceed the minor version. cltc_minfilter= cltc_verPat='s/'$cltc_majVer'\.\([0-9][0-9]*\).*/\1/' for cltc_ver in $cltc_majfilter ; do cltc_min=`echo $cltc_ver | sed -e $cltc_verPat` if test $cltc_min = $cltc_ver || \ expr $cltc_min '<=' $cltc_minVer >/dev/null 2>&1 ; then cltc_minfilter="$cltc_minfilter $cltc_ver" fi done # echo "Filtered ls (minor version): $cltc_minfilter" cltc_cnt=`echo $cltc_minfilter | wc -w | sed -e 's/ //g'` else cltc_cnt=0 fi echo $cltc_cnt } # Function to compare the versions in a pair of URLs for equality. The criteria # is that the major and minor versions match. In theory, the release should # not matter. Probably should be a parameter. # usage: compareURLVersions compareURLVersions () { url1_major=`extractMajorFromURL $1` url1_minor=`extractMinorFromURL $1` url2_major=`extractMajorFromURL $2` url2_minor=`extractMinorFromURL $2` if test $url1_major = $url2_major && test $url1_minor = $url2_minor ; then echo "yes" else echo "no" fi } DyLP-1.10.4/BuildTools/prepare_new_stable0000755000175200017520000005276512214547251016744 0ustar coincoin#!/bin/sh # Copyright (C) 2007 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # It is part of the BuildTools project in COIN-OR (www.coin-or.org) # # $Id: prepare_new_stable 2947 2013-09-13 08:36:57Z stefan $ # # Adapted from prepare_new_release by Lou Hafer, SFU, 100507. #set -x -v set -e # Know thy self. If there are no '/' chars in the command name, we're running # in the current directory. Otherwise, strip the command name, leaving the # prefix. Coin-functions is expected to live in the same directory. if expr "$0" : '.*/.*' >/dev/null 2>&1 ; then cmdDir=`echo $0 | sed -e 's,\(.*\)/[^/]*,\1,'` else cmdDir='.' fi cmdDir=`cd $cmdDir ; pwd` if test -r $cmdDir/coin-functions ; then . $cmdDir/coin-functions else echo "Cannot find utility functions file coin-functions; exiting." fi #################### end of function definitions ########################## # Note that plain sh does not accept negative exit values exitValue=0 # Specify the COIN URL base for convenience. coinURL="https://projects.coin-or.org/svn" # Begin parameter processing. printHelp=0 ignoreBuildToolsMismatch=no mismatchBTExternals= bumpMajor=0 suppressCheckout=0 # srcURL will be the parent for the stable we are building. We'll need to be # able to distinguish ThirdParty and Data builds, and BuildTools itself; they # require special handling. cmdBTURL points to a BuildTools source and is # required when srcURL specifies a ThirdParty or Data project --- we'll need to # assemble a temporary package while creating the stable candidate. srcURL= isThirdParty=no isData=no isBuildTools=no cmdBTURL= # trunkExternals specifies externals for which we want to do simultaneous # creation of stable branches. We will use the trunk as the external while # preparing and testing the stable candidate, changing the Dependencies file # to specify a (nonexistent) stable branch of the external at the last moment. trunkExternals= # exciseExternals specifies externals that should be removed when creating the # new stable branch. exciseExternals= # We need at least one parameter. if test "$#" -eq 0; then printHelp=1 else # Process the parameters. A parameter without an opening `-' is assumed to be # the spec for the source branch. while test $# -gt 0 && test $exitValue = 0 && test $printHelp = 0 ; do case "$1" in -h* | --h*) printHelp=1 ;; -i* | --i*) if expr "$1" : '.*-i.*=.*' 2>&1 >/dev/null ; then mismatchBTExternals=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift mismatchBTExternals=$1 fi if test "x$mismatchBTExternals" = "xall" ; then ignoreBuildToolsMismatch=all else ignoreBuildToolsMismatch=partial fi ;; -m* | --m*) bumpMajor=1 ;; -p* | --p*) suppressCheckout=1 ;; -t* | --t*) if expr "$1" : '.*-t.*=.*' 2>&1 >/dev/null ; then trunkExternals=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift trunkExternals=$1 fi ;; -x* | --x*) if expr "$1" : '.*-x.*=.*' 2>&1 >/dev/null ; then exciseExternals=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift exciseExternals=$1 fi ;; -b* | --b*) if expr "$1" : '.*-b.*=.*' 2>&1 >/dev/null ; then cmdBTURL=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift cmdBTURL=$1 fi if expr "$cmdBTURL" : '.*BuildTools.*' 2>&1 >/dev/null ; then case $cmdBTURL in http*) ;; *) cmdBTURL=${coinURL}/$cmdBTURL ;; esac else echo '' echo "URL $cmdBTURL does not point to BuildTools." echo '' printHelp=1 exitValue=3 fi ;; -*) echo "$0: unrecognised command line switch '"$1"'." printHelp=1 exitValue=1 ;; *) srcURL=$1 case $srcURL in http* ) ;; BuildTools/ThirdParty/* ) srcURL=${coinURL}/$srcURL ;; ThirdParty/* ) srcURL=${coinURL}/BuildTools/$srcURL ;; * ) srcURL=${coinURL}/$srcURL ;; esac ;; esac shift done # Consistency check: Make sure that the source URL exists. Note that it's not # possible to specify a Data URL without including trunk/stable/release in the # URL. For others, helpfully append `trunk'. srcURL=`echo $srcURL | sed -e 's/\/$//'` urlType=`extractTypeFromURL "$srcURL"` if test $printHelp = 0 && test $exitValue = 0 ; then if svn list $srcURL 2>&1 >/dev/null ; then : else echo "Source URL $srcURL does not seem to exist." printHelp=1 exitValue=5 fi if test "$urlType" = invalid ; then srcURL=$srcURL/trunk urlType=trunk fi fi # Just what are we building? Order is important; BuildTools without ThirdParty # means we're actually doing a BuildTools stable. if test $printHelp = 0 && test $exitValue = 0 ; then case $srcURL in *ThirdParty* ) isThirdParty=yes ;; *BuildTools* ) isBuildTools=yes ;; *Data* ) isData=yes ;; *) ;; esac # If we're building a ThirdParty or Data release, we need a BuildTools URL. if test $isThirdParty = yes || test $isData = yes ; then if test -z "$cmdBTURL" ; then cmdBTURL=`bestRelease $coinURL/BuildTools -1 -1` echo "A BuildTools URL is required for Data or ThirdParty projects." echo "Using $cmdBTURL; override with -b" else if svn list $cmdBTURL 2>&1 >/dev/null ; then : else echo "BuildTools URL $cmdBTURL does not seem to exist." printHelp=1 exitValue=6 fi fi fi fi fi # if "$#" .eq 0 if test $printHelp = 1 ; then cat < This script will create a new stable branch from the head of the specified URL. Typically this will be the trunk, but it can be an existing stable branch. You can specify the entire URL, or just enter what comes after "https://projects.coin-or.org/svn". A typical example is prepare_new_stable Ipopt/trunk Options: -b URL for BuildTools; required to generate a release for a ThirdParty or Data project. -i Ignore BuildTools version mismatches for the listed externals (comma-separated list of project names, e.g., -i Osi,Cbc). '-i all' ignores all mismatches. -p Suppress checkout (useful for testing) -m Bump the major version number. -t Suppress conversion from trunk to stable for the listed externals (comma-separated list of project names). -x Remove the listed projects from the list of externals (comma-separated list of project names). This script will do the following: - Set the new stable version number as the next minor version number in the current major version number. Use the -m flag to bump the major version number. - Convert externals from trunk to the top stable branch. Externals which are currently stable or release are left untouched. Use -t to suppress the change from trunk to stable. Set_externals is then invoked to set release externals where available. - Check out externals. The BuildTools version used by externals (if any) is checked, and the script issues a warning if it doesn't match the version used by the source URL. - Run the scripts to download any ThirdParty code. - Run run_autotools to rebuild configure and make files. - Run configure, make, and make test - Tweak the externals to upgrade trunk (-t) dependencies to stable (you won't get to release in this case). If there is any error during these tasks the script will stop and you should examine the output. If the script completes without error, examine the output, particularly the output of the unit test ('make test') and the set of externals specified in the Dependencies file. Whether you start with Externals or Dependencies, the stable will have a proper Dependencies. Externals will be unmodified. This script does not make any changes to the repository. If you want to commit the new stable branch, run the "commit_new_stable" script, as described at the end of the output. EOF fi if test $exitValue != 0 || test $printHelp = 1 ; then exit $exitValue fi # End of parameter parsing. We have a source URL to work with. Tell the # user what we've seen. srcURL=`echo $srcURL | sed -e 's|/$||'` srcProj=`extractProjFromURL $srcURL` echo "Source URL..........: $srcURL" echo "Base project........: $srcProj" if test $isThirdParty = yes || test $isData = yes ; then echo "BuildTools URL......: $cmdBTURL" fi # Figure out the URL of the new stable branch. Consider that there may not be # any existing stable branches. topStableURL=`bestStable $srcURL -1` echo "Top stable URL......: ${topStableURL:-none}" if test -z "$topStableURL" ; then majVer=0 minVer=1 case "$srcURL" in */Data/* ) newStableURL=$coinURL/Data/stable/$majVer.$minVer/$srcProj ;; */ThirdParty/* ) newStableURL=$coinURL/BuildTools/ThirdParty/$srcProj/stable/$majVer.$minVer ;; * ) newStableURL=$coinURL/$srcProj/stable/$majVer.$minVer ;; esac else majVer=`extractMajorFromURL $topStableURL` if test $bumpMajor = 1 ; then majVer=`expr $majVer + 1` minVer=0 else minVer=`extractMinorFromURL $topStableURL` minVer=`expr $minVer + 1` fi newStableURL=`replaceVersionInURL $topStableURL $majVer $minVer` fi echo "New stable URL......: $newStableURL" newVersion=${majVer}.${minVer} # Construct a build directory name. topProjName=`echo $srcProj | sed -e 's|.*/\([^/]*\)$|\1|'` topBuildDir=${topProjName}-${newVersion} echo "Build directory.....: $topBuildDir" # Now decide where to check out code. if test $isThirdParty = yes; then coDir=$topBuildDir/Thirdparty/$srcProj elif test $isData = yes; then coDir=$topBuildDir/Data/$srcProj else coDir=$topBuildDir fi echo "Checkout directory..: $coDir" echo '' echo "===> Checking out source $srcURL without externals ..." echo '' cmd="svn co --ignore-externals $srcURL $coDir" if test $suppressCheckout = 1 ; then echo "Pretending to do: $cmd" else rm -rf $topBuildDir echo $cmd eval $cmd fi if test $isThirdParty = yes || test $isData = yes; then echo '' echo '===> Checking out BuildTools (Data or ThirdParty) ...' echo '' cmd="svn co $cmdBTURL $topBuildDir/BuildTools" if test $suppressCheckout = 1 ; then echo "Pretending to do: $cmd" else echo $cmd eval $cmd fi fi startDir=`pwd` coDir=`cd $coDir; pwd` topBuildDir=`cd $topBuildDir; pwd` cd $coDir # Find configure.ac files for the package and project and update the version. # We have no externals at this point, and no third-party code, so there will # be two files for a standard project, one for a ThirdParty or Data project. echo '' if test -d $topProjName ; then bak_files=`find $topProjName -name 'configure.ac'` fi if test -e configure.ac ; then bak_files="$bak_files configure.ac" fi echo "===> Creating backup (.bak) for configure.ac files..." for i in $bak_files; do cp $i $i.bak done # Take the attitude that [] around parameters in AC_INIT is optional, # it's the commas that count. This does make for a surpassing ugly regular # expression. A comma in the version string will cause a spectacular failure. # In AC_COIN_PROJECTDIR_INIT, take the attitude that the existing parameters # don't matter, we know what the release parameters should be. echo '' echo "===> Updating version numbers in configure.ac files" for i in $bak_files; do sed -e "s|AC_INIT\(.*\),\(\[*\)[^],]*\(\]*\),\(.*\)|AC_INIT\1,\2$newVersion\3,\4|" $i > bla mv bla $i svn diff $i done # Find config_proj_default.h. If there's a definition for PROJ_VERSION, adjust it and # add config_proj_default.h.bak to the list of files to be restored. topProjNameUC=`echo $topProjName | tr '[a-z]' '[A-Z]'` if test -d $topProjName ; then configFileLoc=`find $topProjName -name .svn -prune -o -name 'config_*_default.h' -print` fi echo "config File Loc: $configFileLoc" if test -n "$configFileLoc" ; then versionSym=${topProjNameUC}_VERSION echo '' echo "===> Updating $versionSym in $configFileLoc (if present)" echo '' mv $configFileLoc $configFileLoc.bak bak_files="$bak_files $configFileLoc" sed -e "s/# *define $versionSym .*\$/#define $versionSym \"$newVersion\"/" \ -e "s/# *define ${versionSym}_MAJOR .*\$/#define ${versionSym}_MAJOR $majVer/" \ -e "s/# *define ${versionSym}_MINOR .*\$/#define ${versionSym}_MINOR $minVer/" \ -e "s/# *define ${versionSym}_RELEASE .*\$/#define ${versionSym}_RELEASE 9999/" \ <$configFileLoc.bak >$configFileLoc svn diff $configFileLoc fi # Now generate a proper Dependencies file for the stable branch. References to # trunk will be converted to references to stable branches unless the reference # is to a project in the trunkExternals list (in which case it'll be converted # at the very end). References to releases are not changed. Each line in a # Dependencies file has the format . Normally, each entry # should be a stable branch. srcDepFile= for file in Dependencies Externals ; do if test -r $file ; then srcDepFile=$file break fi done if test -n "$srcDepFile" ; then # Save the externals property of the source, so we can just restore it after # the commit. Also save srcDepFile, because we may well modify it for the # stable branch, converting trunk externals to stable externals. svn propget svn:externals . > .Externals.original bak_files="$bak_files $srcDepFile" cp $srcDepFile $srcDepFile.bak echo '' echo "===> Checking externals in $srcDepFile ..." echo '' # We've just checked this out, no sense going back to the server for the # BuildTools version. Because of the intermediate variable, newline has # become space. srcExternals=`svn propget svn:externals .` srcBTURL=`echo $srcExternals | \ sed -n -e 's/.*BuildTools *https:\([^ ]*\) .*/https:\1/p'` if test -z "$srcBTURL" ; then srcBTURL="none" fi echo "Source BuildTools...: $srcBTURL" rm -f Dependencies ext_name= ext_url= buildtoolsMismatch=0 for i in `cat $srcDepFile.bak` ; do if test "$ext_name" = "" ; then ext_name=$i else ext_url=$i if expr "$ext_name" : '#.*' 2>&1 >/dev/null ; then echo " $ext_name $ext_url ==> skipped" ext_name= continue fi ext_urltype=`extractTypeFromURL $ext_url` ext_proj=`extractProjFromURL $ext_url` # See if this external should be dropped. if expr "$exciseExternals" : '.*'$ext_proj'.*' 2>&1 > /dev/null ; then echo " $ext_name $ext_url ==> excised" ext_name= continue fi ext_isNormalURL=`isNormalURL $ext_url` # Convert a trunk URL to stable unless it's listed in trunkExternals. if test $ext_urltype = trunk ; then if expr "$trunkExternals" : '.*'$ext_proj'.*' 2>&1 >/dev/null ; then echo " $ext_name $ext_url ==> unchanged" else ext_oldurl=$ext_url ext_url=`bestStable $ext_url -1` # Normal (not BuildTools/ThirdParty/Data) need a directory name, # and it may differ from the project name. Carefully preserve it. if test $ext_isNormalURL = yes ; then ext_tail=`extractTailFromExt $ext_oldurl` ext_url=${ext_url}${ext_tail} fi echo " $ext_name $ext_oldurl ==> $ext_url" fi else echo " $ext_name $ext_url ==> unchanged" fi # Get the BuildTools URL for the external and compare to the BuildTools URL # for the source, assuming we have one and the external has one. if test $ext_isNormalURL = yes && test $ext_proj != BuildTools && test $srcBTURL != none ; then ext_url_notail=`echo $ext_url | sed -e 's,/[^/]*$,,'` extBTURL=`svn propget svn:externals $ext_url_notail` extBTURL=`echo $extBTURL | \ sed -n -e 's/^BuildTools *https:\([^ ]*\) *$/https:\1/p'` if test -n "$extBTURL" ; then testResult=`compareURLVersions "$srcBTURL" "$extBTURL"` if test $testResult = no ; then if test $ignoreBuildToolsMismatch = all || \ expr "$mismatchBTExternals" : '.*'$ext_proj'.*' 2>&1 >/dev/null ; then echo " WARNING: BuildTools mismatch: $ext_url_notail uses $extBTURL" else buildtoolsMismatch=1 echo " ERROR: BuildTools mismatch: $ext_url_notail uses $extBTURL" fi fi fi fi echo "$ext_name $ext_url" >>Dependencies ext_name= echo '' fi done # If we have a BuildTools mismatch, exit. if test $buildtoolsMismatch = 1 ; then echo "Exiting due to BuildTools mismatches; use -i to ignore." exit 2 fi $cmdDir/set_externals Dependencies # Try three times to check out externals before conceding defeat. echo '' echo '===> Checking out externals ...' echo '' svn update || { echo "Retry 1 ... " ; svn update ; } || { echo "Retry 2 ... " ; svn update ; } || { echo "Checkout of externals failed. Aborting." ; exit 3 ; } # Run any scripts to acquire ThirdParty code. if test -d ThirdParty ; then echo '' echo '===> Downloading ThirdParty code ...' echo '' ext_name= ext_url= for i in `svn propget svn:externals .` ; do if test -z "$ext_name" ; then ext_name=$i else ext_url=$i if expr "$ext_name" : 'ThirdParty/.*' 2>&1 >/dev/null ; then cd $ext_name ext_proj=`extractProjFromURL $ext_url` getScript=get.$ext_proj if test -x "$getScript" ; then ./$getScript -y fi cd $coDir fi ext_name= fi done fi fi # Done processing externals. If this is a ThirdParty project, we still have # to run the get script. if test $isThirdParty = yes; then if test -x get.$srcProj ; then echo '' echo '===> Downloading third party code...' echo '' ./get.$srcProj -y fi fi # Run the autotools to update configure and make files echo '' echo '===> Running BuildTools/run_autotools ...' echo '' if test $isThirdParty = yes || test $isData = yes ; then cd ../.. ./BuildTools/run_autotools cd "$coDir" else ./BuildTools/run_autotools fi # Let's see if it works. We only run tests for non-ThirdParty, non-Data. DO NOT # turn on --enable-maintainer-mode in the initial configure command. At the # least, it's not needed. At the worst, as of 100526, it'll undo all the # careful work above to set externals. if test $isThirdParty != yes && test $isData != yes; then ( set -e echo '' echo '===> Creating build directory and running the configuration script...' echo '' mkdir build cd build cmd="$coDir/configure -C" echo $cmd eval $cmd echo '' echo '===> Compiling code...' echo '' cmd='make install' echo $cmd eval $cmd echo '' echo '===> Running the unit test...' echo '' echo '*******************************************************************************' echo '*** ***' echo '*** BEGIN OUTPUT OF MAKE TEST ***' echo '*** ***' echo '*******************************************************************************' echo '' cmd='make test' echo $cmd eval $cmd echo '' echo '*******************************************************************************' echo '*** ***' echo '*** END OUTPUT OF MAKE TEST ***' echo '*** ***' echo '*******************************************************************************' ) if test $? != 0; then echo '' echo 'Error during build or test' echo '' exit 3 fi fi # No fatal errors. Declare victory. echo '' echo '===> ALL TESTS PASSED' if test $isThirdParty != yes && test $isData != yes && test $isBuildTools != yes ; then echo '' echo 'Please review the output above, particularly the one of make test' fi echo '' # Do we need to plug in nonexistent stable branches for circular dependencies # tested with the trunk? If so, generate a new Dependencies. This is the only # reason trunk references should appear in the externals for a stable branch, # so we don't need to check further before removing them. if test -n "$trunkExternals" ; then echo '' echo "===> Grooming externals to remove trunk references used for testing." echo '' mv Dependencies Dependencies.temp.$$ ext_name= ext_url= for i in `cat Dependencies.temp.$$`; do if test "$ext_name" = ""; then ext_name="$i" else ext_url=$i ext_urltype=`extractTypeFromURL $ext_url` ext_proj=`extractProjFromURL $ext_url` if test $ext_urltype = trunk ; then ext_oldurl=$ext_url ext_url=`bestStable $ext_url -1` ext_majVer=`extractMajorFromURL $ext_url` ext_minVer=`extractMinorFromURL $ext_url` ext_minVer=`expr $ext_minVer + 1` ext_url=`replaceVersionInURL $ext_url $ext_majVer $ext_minVer` ext_isNormal=`isNormalURL $ext_url` if test $ext_isNormal = yes ; then ext_url="${ext_url}${ext_proj}" fi echo " $ext_name $ext_oldurl ==> $ext_url" fi echo "$ext_name $ext_url" >>Dependencies ext_name= fi done rm -f Dependencies.temp.$$ $cmdDir/set_externals Dependencies fi if test -r Dependencies ; then echo '' echo 'Also, please confirm the Externals are correct:' svn propget svn:externals fi echo '' echo 'After reviewing the output above, you can create a new stable by going into' echo 'the directory' echo '' echo " $startDir" echo '' echo "and run the commit_new_stable script" cd $topBuildDir # Record information for the commit_new_stable script. cat >.new_stable_data </dev/null 2>&1 ; then cmdDir=`echo $0 | sed -e 's,\(.*\)/[^/]*,\1,'` else cmdDir='.' fi cmdDir=`cd $cmdDir ; pwd` if test -r $cmdDir/coin-functions ; then . $cmdDir/coin-functions else echo "Cannot find utility functions file coin-functions; exiting." fi # We need at least one parameter. The default is a dry run (dryRun = 1). printHelp=0 dryRun=1 dirToCommit= if test "$#" -eq 0; then printHelp=1 else # Process the parameters. A parameter without an opening `-' is assumed to be # the spec for the directory to be committed. (Strip any trailing '/'. Some # people add it, but the script doesn't expect it.) while test $# -gt 0 && test $printHelp = 0 ; do case "$1" in -h* | --h*) printHelp=1 ;; -c* | --c*) dryRun=0 ;; -*) echo "$0: unrecognised command line switch '"$1"'." printHelp=1 ;; *) dirToCommit=`echo $1 | sed -e 's,/$,,'` ;; esac shift done fi # What are we committing? if test -z "$dirToCommit" ; then printHelp=1 fi if test $printHelp = 1 ; then cat < By default, commit_new_release is a dry run, printing the commands that will be executed. When you're confident that everything looks right, use the -c (--commit) flag to commit the release. EOF exit 1 fi # Remember what was done during generation of the new release. if test -r $dirToCommit/.new_release_data; then . $dirToCommit/.new_release_data else echo '' echo "Error: the file .new_release_data is not present in $dirToCommit." echo 'Are you running commit_new_release in the same directory where you' echo 'ran prepare_new_release?' echo '' exit 1 fi # Confirm that we're in the proper directory. currDir=`pwd` if test "$currDir/$dirToCommit" != "$topBuildDir" ; then echo "According to $dirToCommit/.new_release_data, the release candidate was assembled" echo "in $topBuildDir." echo "You have asked to commit $currDir/$dirToCommit." echo "There is some confusion. Repository is unchanged." exit 1 fi if test $dryRun = 1 ; then echo "Dry run; testing commit of $dirToCommit." else echo "Committing $dirToCommit." fi # Change to the checkout directory. cd $coDir # If there are externals set on this directory, confirm that # .Externals.original is present so that we can restore them later. releaseExternals=`svn propget svn:externals . || true` if test -n "$releaseExternals" ; then if test -r .Externals.original ; then : else echo "This project has externals, but no .Externals.original file" echo "is present to restore them. Repository is unchanged." exit 1 fi fi # Make some short-form URLs by stripping the COIN URL base. stableURLshort=`echo $stableURL | sed -e "s,$coinURL/\(.*\),\1,"` releaseURLshort=`echo $releaseURL | sed -e "s,$coinURL/\(.*\),\1,"` # Do we have to svn add Dependencies? If this query comes up with a leading # `?', the answer is yes. If Dependencies is entirely absent or unchanged, # we'll get a null string. If it's modified, we'll have a leading `M'. dependStatus=`svn status Dependencies` if expr "$dependStatus" : '?.*Dependencies.*' >/dev/null 2>&1 ; then cmd='svn add Dependencies' echo $cmd if test $dryRun = 0 ; then eval $cmd fi fi # Now, do we really need to to a temporary commit? BuildTools is the poster # child, there are no changes at time of writing (100629). Do an svn status # on the checkout directory and see if anything comes up as modified. if svn status $coDir | egrep '^M' 2>&1 >/dev/null ; then doCommit=yes else doCommit=no fi if test $doCommit = yes ; then # Commit the release to stable so we can do a repository-side copy to create # the release. echo '' echo "===> Temporarily committing release candidate to $stableURLshort ..." echo '' rev_num_before=`svn info . | grep -E '^Revision:' | sed -e 's|Revision: ||'` echo "Revision number before commit: $rev_num_before" cmd="svn ci -m \"temporarily committing release candidate\"" echo $cmd if test $dryRun = 0 ; then eval $cmd fi # Update to confirm the commit. Avoid pulling in externals --- if we're doing # multiple commits of new releases, they may not exist. As it stands, the # main purpose of this call is to allow us to easily obtain the current # revision. # It might be useful to strengthen this and check that the value # is what we're expecting --- one greater than the revision before # commit. `--ignore-externals' could be made provisional on the existence # of all externals by passing a boolean through .new_release_data. This # would strengthen the update, in that the update would confirm existence # of the externals. cmd='svn update --ignore-externals' echo $cmd if test $dryRun = 0 ; then eval $cmd fi rev_num=`svn info . | grep -E '^Revision:' | sed -e 's|Revision: ||'` echo "Current revision number is: $rev_num" fi # End preparatory commit. # Create the release with a repository-side copy. echo '' echo "===> Creating new release $releaseURLshort from $stableURLshort (rev $rev_num) ..." echo '' cmd="svn copy -m \"creating $releaseURLshort from $stableURLshort (rev $rev_num)\" $stableURL $releaseURL" echo $cmd if test $dryRun = 0 ; then eval $cmd fi # Restore the original stable branch. if test $doCommit = yes ; then # And restore the stable branch to its original condition. Start by reverting # to the original externals. if test -r .Externals.original ; then echo '' echo '===> Restoring original externals ...' echo '' cmd="svn propset -F .Externals.original svn:externals ." echo $cmd if test $dryRun = 0 ; then eval $cmd rm .Externals.original fi fi # For every .bak file that we created, revert it. if test -n "$bak_files" ; then echo '' echo '===> Restoring modified files ...' echo '' for i in $bak_files; do cmd="cp $i.bak $i ; rm $i.bak" if test $dryRun = 1 ; then echo "$cmd" else eval $cmd fi done fi # Rebuild configure and Makefile.in files. echo '' echo '===> Executing run_autotools to restore configuration files ...' echo '' curdir=`pwd` cd $topBuildDir cmd="./BuildTools/run_autotools" echo $cmd if test $dryRun = 0 ; then eval $cmd fi cd "$curdir" # Commit the restored stable branch. echo '' echo "===> Committing restored $stableURLshort ..." echo '' cmd="svn ci -m \"restoring $stableURLshort\"" echo $cmd if test $dryRun = 0 ; then eval $cmd fi fi # End restorative commit. cd $topBuildDir cmd="rm .new_release_data" if test $dryRun = 0 ; then eval $cmd fi cd $startDir echo '' echo "Done, new release $releaseURLshort created." echo '' echo "You can now delete the directory $topBuildDir including subdirectories" DyLP-1.10.4/BuildTools/share/0000755000175200017520000000000013434203623014235 5ustar coincoinDyLP-1.10.4/BuildTools/share/config.site0000644000175200017520000002747311527752304016413 0ustar coincoin# This file contains site-specific settings for the configure scripts. # It can be used to specify options that are otherwise given to the # configure script as command line arguments or environment variables. # # This file must be located either in $prefix/share or $prefix/etc, where # prefix is the installation location. For the COIN packages, this is # by default the directory where the configure of the main package is run, # unless the --prefix option was given to the configure script. # Alternatively, one can set the environment variable CONFIG_SITE to the full # path to this file. # # This template file also serves as documentation for many available # configure options for COIN-OR projects. Please be aware of the following # conventions that translate the command line format into the one for the # config.site file: # # Command line version config.site version # # --with-NAME1-NAME2 with_NAME1_NAME2=yes # --with-NAME1-NAME2="VALUE" with_NAME1_NAME2="VALUE" # --without-NAME1-NAME2 with_NAME1_NAME2=no # --enable-NAME1-NAME2 enable_NAME1_NAME2=yes # --enable-NAME1-NAME2="VALUE" enable_NAME1_NAME2="VALUE" # --disable-NAME1-NAME2 enable_NAME1_NAME2=no # # Here, "NAME1-NAME2" is some string corresponding to a particular option; # note that dashes (-) are converted into underscores(_). VALUE is the # string that is the actual argument to an option. # Other variables that are directly assigned in the configure command line, # such as CXX=g++, are also written in this way in the config.site file. # # Note: This is a /bin/sh script, setting variables. There must be no # space between "=" and the value, and if required, a quotation must be # used. # # In the following we show some arguments for configure that can be used # for the COIN configure scripts. ########################################################################## # C++ compiler choice and options # ########################################################################## # C++ compiler name #CXX=g++ # C++ compiler options, overwriting configure's default choice #CXXFLAGS='-O3 -pipe' # Additional C++ compiler options that are added to configure's default # choice #ADD_CXXFLAGS='-pg' # Additional preprocessor definitions for the C++ compiler #CXXDEFS='-DZEROFAULT' # Sometimes it is desirable to compile some projects in debug mode, # and some in default optimized mode (see also enable_debug_compile # below). In those cases, you can set the separate C++ compiler # options for optimized and debug compilation using the following # variables: #OPT_CXXFLAGS='-O3 -pipe' #DBG_CXXFLAGS='-g -pipe' # If you are using MPI, it is best to specify the underlying C++ # compiler for the configure script in CXX (so that it can figure out # the default compiler options and test them), but then to tell the # configure script the actual MPI compiler (wrapper) using the # following variable #MPICXX='mpiCC' # If a project's library is generated from C++, but the compilers used # for linking is a C or Fortran compiler, one has to provide this # compilers with the C++ runtime libraries. This is done with the # following variable: #CXXLIBS='-lstdc++ -lm' ########################################################################## # C compiler choice and options # ########################################################################## # C compiler name #CC=gcc # C compiler options, overwriting configure's default choice #CFLAGS='-O3 -pipe' # Additional C compiler options that are added to configure's default choice #ADD_CFLAGS='-pg' # Additional preprocessor definitions for the C compiler #CDEFS='-DZEROFAULT' # Sometimes it is desirable to compile some projects in debug mode, # and some in default optimized mode (see also enable_debug_compile # below). In those cases, you can set the separate C compiler # options for optimized and debug compilation using the following # variables: #OPT_CFLAGS='-O3 -pipe' #DBG_CFLAGS='-g -pipe' # If you are using MPI, it is best to specify the underlying C # compiler for the configure script in CC (so that it can figure out # the default compiler options and test them), but then to tell the # configure script the actual MPI compiler (wrapper) using the # following variable #MPICC='mpicc' ########################################################################## # Fortran compiler choice and options # ########################################################################## # Fortran compiler name #F77=gfortran # Fortran compiler options, overwriting configure's default choice #FFLAGS='-O3 -pipe' # Additional Fortran compiler options that are added to configure's default # choice #ADD_FFLAGS='-pg' # Sometimes it is desirable to compile some projects in debug mode, # and some in default optimized mode (see also enable_debug_compile # below). In those cases, you can set the separate Fortran compiler # options for optimized and debug compilation using the following # variables: #OPT_FFLAGS='-O3 -pipe' #DBG_FFLAGS='-g -pipe' # If you are using MPI, it is best to specify the underlying Fortran # compiler for the configure script in F77 (so that it can figure out # the default compiler options and test them), but then to tell the # configure script the actual MPI compiler (wrapper) using the # following variable #MPIF77='mpif77' ########################################################################## # Utility programs and their options # ########################################################################## # Program for creating and extracting archives #AR=ar # Program for listing symbols in a binary #NM=nm ########################################################################## # Flags for setting compilation and configuration modes # ########################################################################## ##### INSTALLATION LOCATION # This --prefix flag determines where the binaries etc. are going to # be installed. By default, this is equal to the directory where # 'configure' is run, so that the 'bin/', 'lib/' etc. directories are # created as subdirectories there. One could also choose other # destinations, but keep in mind that some COIN packages use the same # COIN "sub-projects", but possibly different and conflicting # versions. #prefix=$HOME/MyCOIN ##### COMPILATION MODE UNDER CYGWIN # This options can only be used under Cygwin, and it has the following # possible choices: # - mingw (default): Use the GNU compilers to compile binaries that # can be run independently of Cygwin (particularly without # Cygwin1.dll) # - msvc: Use the "native" Windows compilers, such as cl, ifort # - no: Use GNU compilers to generate Cygwin-specific binaries. #enable_doscompile=msvc ##### SKIPPING CONFIGURATION AND COMPILATION OF SUBPROJECTS # It is possible to skip the configuration and compilation of COIN # projects in a package, even when the source code for the subproject # is there. For this, list the directory names that are supposed to # be skipped in the variable #COIN_SKIP_PROJECTS="Bcp Couenne" ##### DEBUG COMPILATION # Switch on debug compilation for all projects. (Note that this will also # switch to the usage of static instead of shared libraries, see # enable_shared below) #enable_debug=yes # Switch on debug compilation only for a specific project is done with # the command line flag enable-debug-project, where "project" is the string # with the project name (say, Clp, for the example). #enable_debug_clp=yes # Similarly, if the global enable-debug is set, we can switch it off for a # particular project, using #enable_debug_clp=no # Each project can make use of a project-specific "checklevel". It # depends on the project manager, if and how this is used. The level # checklevel is specified with the --with-PROJECT-checklevel, where # PROJECT is the lower-case string of the project name. For Ipopt, # this looks like #with_ipopt_checklevel=1 # Each project can make use of a project-specific "verbosity" level. # It depends on the project manager, if and how this is used. The # level checklevel is specified with the --with-PROJECT-verbosity, # where PROJECT is the lower-case string of the project name. For # Ipopt, this looks like #with_ipopt_verbosity=1 ##### CREATING SHARED VS. STATIC LIBRARIES # By default, projects that are compiled in optimized mode, produce # shared libraries (if supported), and those compiled in debug mode, # produce static libraries. This behavior can be changed using the # following options: # disable shared mode: compile every library as static #enable_shared=no # disable static mode: compile every library as shared #enable_static=no # enable shared mode: compile always a shared library (possibly in # addition to a static one) #enable_shared=yes # enable shared mode: compile always a static library (possibly in # addition to a shared one) #enable_static=yes ##### MAINTAINER MODE # Project developers might want to make changes to the autotools files. # Using --enable-maintainer-mode enables a number of automatic updates, # including: # - regeneration of Makefiles if Makefile.am is changes, # - regeneration and rerunning of configure script if required # - updating the svn externals if the Externals file has changed #enable_maintainer_mode ########################################################################## # Third-Party Codes and Packages # ########################################################################## ##### GENERIC FLAGS # Use the following if we want to have configure check for GNU packages # (such as zlib, bzlib, and readline) #enable_gnu_packages=yes # To use some third-party libraries, such as LP solvers, one needs to # specify both the directory with all header files as well as the # linker flags for linking with the library. This is done with the # --with-LIB-incdir and --with-LIB-lib configure flags, where "LIB" is # replaced by the lower-case short-form of the library. A possibly # incomplete list of choices for LIB in the current COIN-OR projects is: # cplex, gurobi, mosek, soplex, xpress. # For Cplex, one might set the following: #with_cplex_incdir='/usr/ilog/cplex90/include/ilcplex' #with_cplex_lib='-L/usr/ilog/cplex90/lib/static_pic -lcplex -lpthread' ##### FLAGS FOR SPECIFIC LIBRARIES IN THIRDPARTY # For some third-party dependencies, COIN supports automatic build # procedures, for which the user can download the external source code # into appropriate subdirectories in a "ThirdParty" subdirectory. But # the user might want to specify locations of already precompiled versions # of those dependencies. Those flags are discussed next. ### BLAS # Flag indicating where to find Blas. If --with-blas is not used, # the configure script will try a few default locations of Blas, and # if it doesn't find Blas, it will test if the Blas source files are # in ThirdParty/Blas. If so, those will be compiled, otherwise we # assume that Blas is not available. # # Specify precompiled Blas libraries via linker flags: #with_blas="-lf77blas -latlas /usr/lib64/libg2c.so" # Specify that Blas should be compiled within the #with_blas=BUILD # Specify that Blas should not be used #with_blas=no ### LAPACK # Flag indicating where to find Lapack. If --with-lapack is not used, # the configure script will try a few default locations of Lapack, and # if it doesn't find Lapack, it will test if the Lapack source files are # in ThirdParty/Lapack. If so, those will be compiled, otherwise we # assume that Lapack is not available. # # Specify precompiled Lapack libraries via linker flags: #with_lapack="-L$HOME/lib -lmylapack" # Specify that Lapack should be compiled within the #with_lapack=BUILD # Specify that Lapack should not be used #with_lapack=no DyLP-1.10.4/BuildTools/coin.m40000644000175200017520000045711713003663644014351 0ustar coincoin# Copyright (C) 2006, 2009 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # ## $Id: coin.m4 3701 2016-10-25 14:09:40Z stefan $ # # Author: Andreas Wachter IBM 2006-04-14 # This file defines the common autoconf macros for COIN # # Check requirements AC_PREREQ(2.59) ########################################################################### # coin_foreach_w # ########################################################################### # the autoconf version used by COIN-OR is so old that it does not have the M4 macro foreach_w. # thus, we define our own one which applies the foreach macro to the same arguments but with # all spaces replaced by ',' in the second argument. # further, we run the loop only if the second argument is not empty AC_DEFUN([coin_foreach_w], [m4_ifval([$2], [m4_foreach([$1], [m4_bpatsubsts([$2],[[ ]+],[, ])], [$3])])]) ########################################################################### # COIN_CHECK_FILE # ########################################################################### # A simple replacement for AC_CHECK_FILE that works for cross compilation AC_DEFUN([AC_COIN_CHECK_FILE], [if test -r $1; then $2 : else $3 : fi ]) ########################################################################### # COIN_CHECK_VPATH # ########################################################################### # This macro sets the variable coin_vpath_config to true if this is a # VPATH configuration, otherwise it sets it to false. AC_DEFUN([AC_COIN_CHECK_VPATH], [ AC_MSG_CHECKING(whether this is a VPATH configuration) if test `cd $srcdir; pwd` != `pwd`; then coin_vpath_config=yes; else coin_vpath_config=no; fi AC_MSG_RESULT($coin_vpath_config) ]) # AC_COIN_CHECK_VPATH ########################################################################### # COIN_PROJECTVERSION # ########################################################################### # This macro is used by COIN_PROJECTDIR_INIT and sets up variables related # to versioning numbers of the project. AC_DEFUN([AC_COIN_PROJECTVERSION], [m4_ifvaln([$1],[ AC_DEFINE_UNQUOTED(m4_toupper($1_VERSION), ["$PACKAGE_VERSION"],[Version number of project]) [coin_majorver=`echo $PACKAGE_VERSION | sed -n -e 's/^\([0-9]*\).*/\1/gp'`] [coin_minorver=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.\([0-9]*\).*/\1/gp'`] [coin_releasever=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\).*/\1/gp'`] if test "x$coin_majorver" = x ; then coin_majorver=9999 ; fi if test "x$coin_minorver" = x ; then coin_minorver=9999 ; fi if test "x$coin_releasever" = x ; then coin_releasever=9999 ; fi AC_DEFINE_UNQUOTED(m4_toupper($1_VERSION_MAJOR), [$coin_majorver], [Major Version number of project]) AC_DEFINE_UNQUOTED(m4_toupper($1_VERSION_MINOR), [$coin_minorver], [Minor Version number of project]) AC_DEFINE_UNQUOTED(m4_toupper($1_VERSION_RELEASE), [$coin_releasever], [Release Version number of project]) # We use the following variable to have a string with the upper case # version of the project name COIN_PRJCT=m4_toupper($1) # Set the project's SVN revision number. The complicated sed expression # (made worse by quadrigraphs) ensures that things like 4123:4168MS end up # as a single number. AC_CHECK_PROG([have_svnversion],[svnversion],[yes],[no]) if test "x$have_svnversion" = xyes; then AC_SUBST(m4_toupper($1_SVN_REV)) svn_rev_tmp=`LANG=en_EN svnversion $srcdir 2>/dev/null` if test "x$svn_rev_tmp" != xexported -a "x$svn_rev_tmp" != x -a "x$svn_rev_tmp" != "xUnversioned directory"; then m4_toupper($1_SVN_REV)=`echo $svn_rev_tmp | sed -n -e 's/^@<:@0-9@:>@*://' -e 's/\(@<:@0-9@:>@\)@<:@^0-9@:>@*$/\1/p'` AC_DEFINE_UNQUOTED(m4_toupper($1_SVN_REV), $m4_toupper($1_SVN_REV), [SVN revision number of project]) fi fi ]) # Capture libtool library version, if given. m4_ifvaln([$2],[coin_libversion=$2],[]) ]) ########################################################################### # COIN_PROJECTDIR_INIT # ########################################################################### # This macro does everything that is required in the early part in the # configure script, such as defining a few variables. This should only be used # in the main directory of a project directory (the one which holds the src # directory for the project). The first parameter is the project name. The # second (optional) is the libtool library version (important for releases, # less so for stable or trunk). AC_DEFUN([AC_COIN_PROJECTDIR_INIT], [ # As backup, we make sure we don't loose an FLIBS if it has been set # by the user save_FLIBS="$FLIBS" # A useful makefile conditional that is always false AM_CONDITIONAL(ALWAYS_FALSE, false) # We set the following variable so that we know later in AC_COIN_FINALIZE # that we are in a project main directory coin_projectdir=yes # Set the project's version numbers AC_COIN_PROJECTVERSION($1, $2) ]) # AC_COIN_PROJECTDIR_INIT ########################################################################### # COIN_DEBUG_COMPILE # ########################################################################### # enable the configure flags --enable-debug and --enable-debug-prjct # (where prcjt is the name of the project in lower case) and set the # variable coin_debug_compile to true or false This is used by # COIN_PROG_CXX, COIN_PROG_CC and COIN_PROG_F77 to determine the # compilation flags. This macro also makes the switches # --with-prjct-verbosity and --with-prjct-checklevel available, which # define the preprocessor macros COIN_PRJCT_VERBOSITY and # COIN_PRJCT_CHECKLEVEL to the specified value (default is 0). # # The project specific flags are only made available, if one gives the # name of the project as first argument to this macro. AC_DEFUN([AC_COIN_DEBUG_COMPILE], [AC_BEFORE([$0],[AC_COIN_PROG_CXX])dnl AC_BEFORE([$0],[AC_COIN_PROG_CC])dnl AC_BEFORE([$0],[AC_COIN_PROG_F77])dnl AC_MSG_CHECKING([whether we want to compile in debug mode]) AC_ARG_ENABLE([debug], [AC_HELP_STRING([--enable-debug], [compile all projects with debug options tests (implies --disable-shared)])], [case "${enableval}" in yes) coin_debug_compile=true if test "${enable_shared+set}" = set; then :; else enable_shared=no fi ;; no) coin_debug_compile=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;; esac], [coin_debug_compile=false]) m4_ifvaln([$1], [AC_ARG_ENABLE(debug-m4_tolower($1), [AC_HELP_STRING([--enable-debug-m4_tolower($1)], [compile project $1 with debug compiler flags])], [case "${enableval}" in yes) coin_debug_compile=true ;; no) coin_debug_compile=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug-m4_tolower($1)) ;; esac],[:]) ]) # m4_ifvaln([$1], if test $coin_debug_compile = true; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi m4_ifvaln([$1], [AC_ARG_WITH(m4_tolower($1)-verbosity, AC_HELP_STRING([--with-m4_tolower($1)-verbosity], [specify the debug verbosity level for project $1]), [if test "$withval" = yes; then withval=1 fi m4_tolower(coin_$1_verbosity)=$withval], [m4_tolower(coin_$1_verbosity)=0]) AC_DEFINE_UNQUOTED(m4_toupper(COIN_$1_VERBOSITY), m4_tolower($coin_$1_verbosity), [Define to the debug verbosity level (0 is no output)]) AC_ARG_WITH(m4_tolower($1)-checklevel, AC_HELP_STRING([--with-m4_tolower($1)-checklevel], [specify the sanity check level for project $1]), [if test "$withval" = yes; then withval=1 fi m4_tolower(coin_$1_checklevel)=$withval], [m4_tolower(coin_$1_checklevel)=0]) AC_DEFINE_UNQUOTED(m4_toupper(COIN_$1_CHECKLEVEL), m4_tolower($coin_$1_checklevel), [Define to the debug sanity check level (0 is no test)]) ]) # m4_ifvaln([$1], ]) # AC_COIN_DEBUG_COMPILE ########################################################################### # COIN_ENABLE_MSVC # ########################################################################### # This macro is invoked by any PROG_compiler macro to establish the # --enable-msvc option. # The job of this macro is to make sure the option is correct and # to set enable_msvc. Legal values are yes and no (disabled). # If set, assume the presence of cl/link. It's the user's responsibility to # make sure their PATH is correct. In particular, that MSVC link is found # and not cygwin link (we want to do code linking, not file linking). # It's the responsibility of individual PROG_compiler macros to ensure that # they correctly set the compiler search list and preprocess, compile, and # link flags. This is tied to compiler setup because in practice invocations # of the preprocessor and linker are made through the compiler. # For backward compatibility, we also check for --enable-doscompile=msvc. AC_DEFUN([AC_COIN_ENABLE_MSVC], [AC_REQUIRE([AC_CANONICAL_BUILD]) # for backward compatibility AC_ARG_ENABLE([doscompile],,[enable_doscompile=$enableval],[enable_doscompile=no]) AC_ARG_ENABLE([msvc], [AC_HELP_STRING([--enable-msvc], [Prefer (i)cl/ifort/link over GNU on MinGW/Cygwin.])], [enable_msvc=$enableval], [enable_msvc=no if test "$enable_doscompile" = msvc ; then enable_msvc=yes elif test "$enable_doscompile" != no ; then AC_MSG_ERROR([--enable-doscompile=$enable_doscompile not supported anymore.]) fi ]) if test "$enable_msvc" = MD; then enable_shared=yes enable_msvc=yes fi if test "$enable_msvc" = yes; then case $build in *-cygwin* | *-mingw*) ;; *) AC_MSG_ERROR([--enable-msvc option makes sense only under Cygwin or MinGW]) ;; esac fi ]) ########################################################################### # COIN_PROG_CXX # ########################################################################### # Find the compile command by running AC_PROG_CXX (with compiler names for # different operating systems) and put it into CXX (unless it was given by the # user). Then find an appropriate value for CXXFLAGS. If either of CXXFLAGS or # PRJCT_CXXFLAGS is defined, that value is used (replace PRJCT with the upper # case name of this project). It is possible to provide additional -D flags # in the variable CXXDEFS, and additional compilation flags with ADD_CXXFLAGS. AC_DEFUN([AC_COIN_PROG_CXX], [AC_REQUIRE([AC_COIN_PROG_CC]) #Let's try if that overcomes configuration problem with VC++ 6.0 AC_REQUIRE([AC_COIN_ENABLE_MSVC]) AC_LANG_PUSH(C++) AC_ARG_VAR(CXXDEFS,[Additional -D flags to be used when compiling C++ code.]) AC_ARG_VAR(ADD_CXXFLAGS,[Additional C++ compiler options]) AC_ARG_VAR(DBG_CXXFLAGS,[Debug C++ compiler options]) AC_ARG_VAR(OPT_CXXFLAGS,[Optimize C++ compiler options]) coin_has_cxx=yes save_cxxflags="$CXXFLAGS" # For *-*-solaris*, promote Studio/Workshop compiler to front of list. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl g++" else comps="g++ icl cl" fi ;; *-*-solaris*) comps="CC xlC_r aCC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; *-darwin*) comps="clang++ g++ c++ CC" ;; *-linux-gnu*) comps="g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC xlC_r aCC CC" ;; *) comps="xlC_r aCC CC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CXX || test "${ac_cv_prog_CXX+set}" != set || { ac_cv_prog_CXX=; export ac_cv_prog_CXX; } # AC_MSG_NOTICE([C++ compiler candidates: $comps]) AC_PROG_CXX([$comps]) #AC_PROG_CXX sets CXX to g++ if it cannot find a working C++ compiler #thus, we test here whether $CXX is actually working AC_LANG_PUSH(C++) AC_MSG_CHECKING([whether C++ compiler $CXX works]); AC_COMPILE_IFELSE( [AC_LANG_PROGRAM(, [int i=0;])], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no) AC_MSG_ERROR(failed to find a C++ compiler or C++ compiler $CXX does not work)] ) AC_LANG_POP(C++) coin_cxx_is_cl=false # It seems that we need to cleanup something here for the Windows case "$CXX" in clang* | */clang*) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) sed -e 's/^void exit (int);//' confdefs.h >> confdefs.hh mv confdefs.hh confdefs.h coin_cxx_is_cl=true ;; esac # add automake conditional so we can recognize cl compiler in makefile AM_CONDITIONAL(COIN_CXX_IS_CL, [test $coin_cxx_is_cl = true]) # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cxx_g" = yes ; then ac_cv_prog_cxx_g=no AC_MSG_NOTICE([Overruling autoconf; cl does not recognise -g.]) fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CXXFLAGS="$save_cxxflags" # Check if a project specific CXXFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CXXFLAGS+set} if test x$coin_tmp = xset; then eval CXXFLAGS=\${${COIN_PRJCT}_CXXFLAGS} fi fi if test x"$CXXFLAGS" = x; then # ToDo decide whether we want -DNDEBUG for optimization coin_add_cxxflags= coin_opt_cxxflags= coin_dbg_cxxflags= coin_warn_cxxflags= if test "$GXX" = "yes"; then case "$CXX" in icpc* | */icpc*) ;; *) # ToDo decide about unroll-loops coin_opt_cxxflags="-O3" coin_add_cxxflags="-pipe" coin_dbg_cxxflags="-g -O0" coin_warn_cxxflags="-Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas -Wno-long-long" esac fi # Note that we do not need to cover GCC in the following tests. if test -z "$coin_opt_cxxflags"; then case $build in *-cygwin* | *-mingw*) case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -O2' coin_dbg_cxxflags='-MDd' else coin_opt_cxxflags='-MT -O2' coin_dbg_cxxflags='-MTd' fi coin_add_cxxflags='-nologo -EHsc -GR -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -Ox' coin_dbg_cxxflags='-MDd -debug' else coin_opt_cxxflags='-MT -Ox' coin_dbg_cxxflags='-MTd -debug' fi coin_add_cxxflags='-nologo -EHsc -GR -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CXX" in icpc* | */icpc*) coin_opt_cxxflags="-O3 -ip -mp1" coin_add_cxxflags="" coin_dbg_cxxflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CXXFLAGS= AC_TRY_LINK(,[int i=0; i++;],[], [coin_add_cxxflags="-i_dynamic $coin_add_cxxflags"]) ;; pgCC* | */pgCC*) coin_opt_cxxflags="-fast" coin_add_cxxflags="-Kieee -pc 64" coin_dbg_cxxflags="-g" ;; esac ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) coin_opt_cxxflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cxxflags="-bmaxdata:0x80000000 -qrtti=dyna -qsuppress=1500-036 -qsuppress=1500-029 -qsourcetype=c++" coin_dbg_cxxflags="-g" ;; esac ;; *-hp-*) case "$CXX" in aCC* | */aCC* ) coin_opt_cxxflags="-O" coin_add_cxxflags="-AA" coin_dbg_cxxflags="-g" ;; esac ;; *-*-solaris*) coin_opt_cxxflags="-O4" coin_dbg_cxxflags="-g" ;; esac fi # Generic flag settings. If these don't work, add a case above. if test "$ac_cv_prog_cxx_g" = yes && test -z "$coin_dbg_cxxflags" ; then coin_dbg_cxxflags="-g" fi if test -z "$coin_opt_cxxflags"; then # Try if -O option works if nothing else is set CXXFLAGS=-O AC_TRY_LINK([],[int i=0; i++;],[coin_opt_cxxflags="-O"]) fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cxxflags" = xyes; then coin_warn_cxxflags= fi # Do final setup of flags based on values determined above. if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$coin_dbg_cxxflags $coin_add_cxxflags $coin_warn_cxxflags" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$coin_opt_cxxflags $coin_add_cxxflags -DNDEBUG $coin_warn_cxxflags" fi DBG_CXXFLAGS="$DBG_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" OPT_CXXFLAGS="$OPT_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test "$coin_debug_compile" = "true"; then CXXFLAGS="$DBG_CXXFLAGS" else CXXFLAGS="$OPT_CXXFLAGS" fi # Handle the case where CXXFLAGS was set externally. else CXXFLAGS="$CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$CXXFLAGS" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$CXXFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CXXFLAGS="$CXXFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CXXFLAGS works save_CXXFLAGS="$CXXFLAGS" AC_TRY_LINK([],[int i=0; i++;],[],[CXXFLAGS=]) if test -z "$CXXFLAGS"; then AC_MSG_WARN([The flags CXXFLAGS="$save_CXXFLAGS" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually.]) CXXFLAGS='-O' AC_TRY_LINK([],[int i=0; i++;],[],[CXXFLAGS=]) if test -z "$CXXFLAGS"; then AC_MSG_WARN([This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually.]) fi fi AC_MSG_NOTICE([C++ compiler options are: $CXXFLAGS]) AC_ARG_VAR(MPICXX,[C++ MPI Compiler]) if test x"$MPICXX" = x; then :; else AC_MSG_NOTICE([Will use MPI C++ compiler $MPICXX]) CXX="$MPICXX" fi # correct the LD variable in a build with MS or Intel-windows compiler case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac AC_LANG_POP(C++) ]) # AC_COIN_PROG_CXX ########################################################################### # COIN_CXXLIBS # ########################################################################### # Determine the C++ runtime libraries required for linking a C++ library # with a Fortran or C compiler. The result is available in CXXLIBS. AC_DEFUN([AC_COIN_CXXLIBS], [AC_REQUIRE([AC_PROG_CXX])dnl AC_LANG_PUSH(C++) AC_ARG_VAR(CXXLIBS,[Libraries necessary for linking C++ code with Fortran compiler]) if test -z "$CXXLIBS"; then if test "$GXX" = "yes"; then case "$CXX" in icpc* | */icpc*) CXXLIBS="-lstdc++" ;; *) # clang uses libc++ as the default standard C++ library, not libstdc++ # this test is supposed to recognize whether the compiler is clang # AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[ #ifndef _LIBCPP_VERSION choke me #endif ]])], [CXXLIBS="-lc++"], [CXXLIBS="-lstdc++ -lm"]) ;; esac else case $build in *-mingw32 | *-cygwin* ) case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL*) CXXLIBS=nothing;; esac;; *-linux-*) case "$CXX" in icpc* | */icpc*) CXXLIBS="-lstdc++" ;; pgCC* | */pgCC*) CXXLIBS="-lstd -lC -lc" ;; esac;; *-ibm-*) CXXLIBS="-lC -lc" ;; *-hp-*) CXXLIBS="-L/opt/aCC/lib -l++ -lstd_v2 -lCsup_v2 -lm -lcl -lc" ;; *-*-solaris*) CXXLIBS="-lCstd -lCrun" esac fi fi if test -z "$CXXLIBS"; then AC_MSG_WARN([Could not automatically determine CXXLIBS (C++ link libraries; necessary if main program is in Fortran or C).]) else AC_MSG_NOTICE([Assuming that CXXLIBS is \"$CXXLIBS\".]) fi if test x"$CXXLIBS" = xnothing; then CXXLIBS= fi AC_LANG_POP(C++) ]) # AC_COIN_CXXLIBS ########################################################################### # COIN_CHECK_HEADER # ########################################################################### # This macro checks for a header file, but it does so without the # standard header. This avoids warning messages like: # # configure: WARNING: dlfcn.h: present but cannot be compiled # configure: WARNING: dlfcn.h: check for missing prerequisite headers? # configure: WARNING: dlfcn.h: see the Autoconf documentation # configure: WARNING: dlfcn.h: section "Present But Cannot Be Compiled" # configure: WARNING: dlfcn.h: proceeding with the preprocessor's result # configure: WARNING: dlfcn.h: in the future, the compiler will take precedence # My guess that the problem lay with CPPFLAGS seems to be correct. With this # macro reduced to a direct call to AC_CHECK_HEADERS, there are no warnings # now that CPPFLAGS contains -mno-cygwin when it needs it. -- lh, 061214 -- # AW 070609: I restored the previous version, since otherwise the warnings # still pop up for the cl compiler AC_DEFUN([AC_COIN_CHECK_HEADER], [#if test x"$4" = x; then # hdr="#include <$1>" #else # hdr="$4" #fi #AC_CHECK_HEADERS([$1],[$2],[$3],[$hdr]) AC_CHECK_HEADERS([$1],[$2],[$3],[$4]) ]) # AC_COIN_CHECK_HEADER ########################################################################### # COIN_CHECK_CXX_CHEADER # ########################################################################### # This macro checks for C header files that are used from C++. For a give # stub (e.g., math), it first checks if the C++ library (cmath) is available. # If it is, it defines HAVE_CMATH (or whatever the stub is). If it is not # available, it checks for the old C head (math.h) and defines HAVE_MATH_H # if that one exists. AC_DEFUN([AC_COIN_CHECK_CXX_CHEADER], [AC_LANG_PUSH(C++) AC_COIN_CHECK_HEADER([c$1],[$2],[$3],[$4]) if test "$ac_cv_header_c$1" != "yes"; then AC_COIN_CHECK_HEADER([$1.h],[$2],[$3],[$4]) fi AC_LANG_POP(C++) ]) # AC_COIN_CHECK_CXX_CHEADER ########################################################################### # COIN_PROG_CC # ########################################################################### # Find the compile command by running AC_PROG_CC (with compiler names # for different operating systems) and put it into CC (unless it was # given my the user), and find an appropriate value for CFLAGS. It is # possible to provide additional -D flags in the variable CDEFS. AC_DEFUN([AC_COIN_PROG_CC], [AC_REQUIRE([AC_COIN_ENABLE_MSVC]) AC_LANG_PUSH(C) # For consistency, we set the C compiler to the same value of the C++ # compiler, if the C++ is set, but the C compiler isn't (only for CXX=cl) if test x"$CXX" != x; then case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) if test x"$CC" = x; then CC="$CXX" AC_MSG_WARN([C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX]) fi ;; esac fi AC_ARG_VAR(CDEFS,[Additional -D flags to be used when compiling C code.]) AC_ARG_VAR(ADD_CFLAGS,[Additional C compiler options]) AC_ARG_VAR(DBG_CFLAGS,[Debug C compiler options]) AC_ARG_VAR(OPT_CFLAGS,[Optimize C compiler options]) coin_has_cc=yes save_cflags="$CFLAGS" # For *-*-solaris*, promote Studio/Workshop cc compiler to front of list. # Depending on the user's PATH, when Studio/Workshop cc is not present we may # find /usr/ucb/cc, which is almost certainly not a good choice for the C # compiler. In this case, put cc after gcc. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl gcc" else comps="gcc icl cl" fi ;; *-*-solaris*) AC_CHECK_PROG(sol_cc_compiler,cc,cc,[],[],/usr/ucb/cc) if test "$sol_cc_compiler" = "cc" ; then comps="cc xlc gcc pgcc icc" else comps="xlc gcc pgcc icc cc" fi ;; *-*-darwin*) comps="clang gcc cc" ;; *-linux-gnu*) comps="gcc cc pgcc icc xlc" ;; *-linux-*) comps="xlc gcc cc pgcc icc" ;; *) comps="xlc_r xlc cc gcc pgcc icc" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CC || test "${ac_cv_prog_CC+set}" != set || { ac_cv_prog_CC=; export ac_cv_prog_CC; } # AC_MSG_NOTICE([C compiler candidates: $comps]) AC_PROG_CC([$comps]) if test -z "$CC" ; then AC_MSG_ERROR([Failed to find a C compiler!]) fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cc_g" = yes ; then ac_cv_prog_cc_g=no AC_MSG_NOTICE([Overruling autoconf; cl does not recognise -g.]) fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CFLAGS="$save_cflags" # add automake conditional so we can recognize cl compiler in makefile coin_cc_is_cl=false case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_cc_is_cl=true ;; esac AM_CONDITIONAL(COIN_CC_IS_CL, [test $coin_cc_is_cl = true]) # Check if a project specific CFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CFLAGS+set} if test x$coin_tmp = xset; then eval CFLAGS=\${${COIN_PRJCT}_CFLAGS} fi fi if test x"$CFLAGS" = x; then coin_add_cflags= coin_opt_cflags= coin_dbg_cflags= coin_warn_cflags= if test "$GCC" = "yes"; then case "$CC" in icc* | */icc*) ;; *) coin_opt_cflags="-O3" coin_add_cflags="-pipe" coin_dbg_cflags="-g -O0" coin_warn_cflags="-Wimplicit -Wparentheses -Wsequence-point -Wreturn-type -Wcast-qual -Wall -Wno-unknown-pragmas -Wno-long-long" esac fi if test -z "$coin_opt_cflags"; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -O2' coin_dbg_cflags='-MDd' else coin_opt_cflags='-MT -O2' coin_dbg_cflags='-MTd' fi coin_add_cflags='-nologo -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -Ox' coin_dbg_cflags='-MDd -debug' else coin_opt_cflags='-MT -Ox' coin_dbg_cflags='-MTd -debug' fi coin_add_cflags='-nologo -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CC" in icc* | */icc*) coin_opt_cflags="-O3 -ip -mp1" coin_add_cflags="" coin_dbg_cflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CFLAGS= AC_TRY_LINK([],[int i=0; i++;],[], [coin_add_cflags="-i_dynamic $coin_add_cflags"]) ;; pgcc* | */pgcc*) coin_opt_cflags="-fast" coin_add_cflags="-Kieee -pc 64" coin_dbg_cflags="-g" ;; esac ;; *-ibm-*) case "$CC" in xlc* | */xlc* | mpxlc* | */mpxlc*) coin_opt_cflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cflags="-bmaxdata:0x80000000 -qsuppress=1500-036 -qsuppress=1500-029" coin_dbg_cflags="-g" ;; esac ;; *-hp-*) coin_opt_cflags="-O" coin_add_cflags="-Ae" coin_dbg_cflags="-g" ;; *-*-solaris*) coin_opt_cflags="-xO4" coin_dbg_cflags="-g" ;; *-sgi-*) coin_opt_cflags="-O -OPT:Olimit=0" coin_dbg_cflags="-g" ;; esac fi if test "$ac_cv_prog_cc_g" = yes && test -z "$coin_dbg_cflags" ; then coin_dbg_cflags="-g" fi if test -z "$coin_opt_cflags"; then # Try if -O option works if nothing else is set CFLAGS="-O" AC_TRY_LINK([],[int i=0; i++;],[coin_opt_cflags="-O"]) fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cflags" = xyes; then coin_warn_cflags= fi if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$coin_dbg_cflags $coin_add_cflags $coin_warn_cflags" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$coin_opt_cflags $coin_add_cflags -DNDEBUG $coin_warn_cflags" fi DBG_CFLAGS="$DBG_CFLAGS $ADD_CFLAGS $CDEFS" OPT_CFLAGS="$OPT_CFLAGS $ADD_CFLAGS $CDEFS" if test "$coin_debug_compile" = "true"; then CFLAGS="$DBG_CFLAGS" else CFLAGS="$OPT_CFLAGS" fi else CFLAGS="$CFLAGS $ADD_CFLAGS $CDEFS" if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$CFLAGS" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$CFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CFLAGS="$CFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CFLAGS works save_CFLAGS="$CFLAGS" AC_TRY_LINK([],[int i=0; i++;],[],[CFLAGS=]) if test -z "$CFLAGS"; then AC_MSG_WARN([The value CFLAGS="$save_CFLAGS" do not work. I will now just try '-O', but you might want to set CFLAGS manually.]) CFLAGS='-O' AC_TRY_LINK([],[int i=0; i++;],[],[CFLAGS=]) if test -z "$CFLAGS"; then AC_MSG_WARN([This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually.]) fi fi AC_MSG_NOTICE([C compiler options are: $CFLAGS]) AC_ARG_VAR(MPICC,[C MPI Compiler]) if test x"$MPICC" = x; then :; else AC_MSG_NOTICE([Will use MPI C compiler $MPICC]) CC="$MPICC" fi # Correct the LD variable if we are using the MS or Intel-windows compiler case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac AC_LANG_POP(C) ]) # AC_COIN_PROG_CC ########################################################################### # COIN_PROG_F77 # ########################################################################### # Find the compile command by running AC_PROG_F77 (with compiler names # for different operating systems) and put it into F77 (unless it was # given by the user), and find an appropriate value for FFLAGS AC_DEFUN([AC_COIN_PROG_F77], [AC_REQUIRE([AC_COIN_ENABLE_MSVC]) AC_REQUIRE([AC_COIN_PROG_CC]) AC_REQUIRE([AC_COIN_F77_COMPS]) AC_LANG_PUSH([Fortran 77]) AC_ARG_VAR(ADD_FFLAGS,[Additional Fortran compiler options]) AC_ARG_VAR(DBG_FFLAGS,[Debug Fortran compiler options]) AC_ARG_VAR(OPT_FFLAGS,[Optimize Fortran compiler options]) coin_has_f77=yes save_fflags="$FFLAGS" # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_F77 || test "${ac_cv_prog_F77+set}" != set || { ac_cv_prog_F77=; export ac_cv_prog_F77; } # This is a real belt-and-suspenders approach. AC_COIN_FIND_F77 will use # coin_f77_comps to see if there's a program that matches one of the names. # If there's no such program, F77 = unavailable. If we match the name, # feed AC_PROG_F77 the same search list, just to be sure it's a functioning # compiler. # AC_MSG_NOTICE([Fortran compiler candidates: $coin_f77_comps]) AC_COIN_FIND_F77 if test "$F77" != "unavailable" ; then AC_PROG_F77($coin_f77_comps) else AC_MSG_WARN([Failed to find a Fortran compiler!]) fi FFLAGS="$save_fflags" # Check if a project specific FFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_FFLAGS+set} if test x$coin_tmp = xset; then eval FFLAGS=\${${COIN_PRJCT}_FFLAGS} fi fi if test "$F77" != "unavailable" && test x"$FFLAGS" = x ; then coin_add_fflags= coin_opt_fflags= coin_dbg_fflags= coin_warn_fflags= if test "$G77" = "yes"; then coin_opt_fflags="-O3" coin_add_fflags="-pipe" coin_dbg_fflags="-g -O0" else case $build in *-cygwin* | *-mingw*) case $F77 in ifort* | */ifort* | IFORT* | */IFORT* ) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_fflags='-MD -O3' coin_dbg_fflags='-MDd -debug' else coin_opt_fflags='-MT -O3' coin_dbg_fflags='-MTd -debug' fi coin_add_fflags='-fpp -nologo' ;; compile_f2c*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_fflags='-MD -O2' coin_dbg_fflags='-MDd' else coin_opt_fflags='-MT -O2' coin_dbg_fflags='-MTd' fi coin_add_fflags='-nologo -wd4996' ;; esac ;; *-linux-*) case $F77 in ifc* | */ifc* | ifort* | */ifort*) coin_opt_fflags="-O3 -ip" coin_add_fflags="-cm -w90 -w95" coin_dbg_fflags="-g -CA -CB -CS" # Check if -i_dynamic is necessary (for new glibc library) FFLAGS= AC_TRY_LINK(,[ write(*,*) 'Hello world'],[], [coin_add_fflags="-i_dynamic $coin_add_fflags"]) ;; pgf77* | */pgf77* | pgf90* | */pgf90*) coin_opt_fflags="-fast" coin_add_fflags="-Kieee -pc 64" coin_dbg_fflags="-g" ;; esac ;; *-ibm-*) case "$F77" in xlf* | */xlf* | mpxlf* | */mpxlf* ) coin_opt_fflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_fflags="-bmaxdata:0x80000000 -qsuppress=1500-036 -qsuppress=1500-029" coin_dbg_fflags="-g -C" ;; esac ;; *-hp-*) coin_opt_fflags="+O3" coin_add_fflags="+U77" coin_dbg_fflags="-C -g" ;; *-*-solaris*) coin_opt_fflags="-O4" coin_dbg_fflags="-g" ;; *-sgi-*) coin_opt_fflags="-O5 -OPT:Olimit=0" coin_dbg_fflags="-g" ;; esac fi if test "$ac_cv_prog_f77_g" = yes && test -z "$coin_dbg_fflags" ; then coin_dbg_fflags="-g" fi if test -z "$coin_opt_fflags"; then # Try if -O option works if nothing else is set FFLAGS=-O AC_TRY_LINK(,[ integer i], [coin_opt_fflags="-O"]) fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_fflags" = xyes; then coin_warn_fflags= fi if test x${DBG_FFLAGS+set} != xset; then DBG_FFLAGS="$coin_dbg_fflags $coin_add_fflags $coin_warn_fflags" fi if test x${OPT_FFLAGS+set} != xset; then OPT_FFLAGS="$coin_opt_fflags $coin_add_fflags $coin_warn_fflags" fi DBG_FFLAGS="$DBG_FFLAGS $ADD_FFLAGS" OPT_FFLAGS="$OPT_FFLAGS $ADD_FFLAGS" if test "$coin_debug_compile" = "true"; then FFLAGS="$DBG_FFLAGS" else FFLAGS="$OPT_FFLAGS" fi else FFLAGS="$FFLAGS $ADD_FFLAGS" if test x${DBG_FFLAGS+set} != xset; then DBG_FFLAGS="$FFLAGS" fi if test x${OPT_FFLAGS+set} != xset; then OPT_FFLAGS="$FFLAGS" fi fi # Try if FFLAGS works if test "$F77" != "unavailable" ; then AC_TRY_LINK(,[ integer i],[],[FFLAGS=]) if test -z "$FFLAGS"; then AC_MSG_WARN([The flags FFLAGS="$FFLAGS" do not work. I will now just try '-O', but you might want to set FFLAGS manually.]) FFLAGS='-O' AC_TRY_LINK(,[ integer i],[],[FFLAGS=]) if test -z "$FFLAGS"; then AC_MSG_WARN([This value for FFLAGS does not work. I will continue with empty FFLAGS, but you might want to set FFLAGS manually.]) fi fi fi AC_MSG_NOTICE([Fortran compiler options are: $FFLAGS]) AC_ARG_VAR(MPIF77,[Fortran MPI Compiler]) if test x"$MPIF77" = x; then :; else AC_MSG_NOTICE([Will use MPI Fortran compiler $MPIF77]) F77="$MPIF77" fi # correct the LD variable if we use the intel fortran compiler in windows case $build in *-cygwin* | *-mingw*) case "$F77" in ifort* | */ifort* | IFORT* | */IFORT*) LD=link ;; esac ;; esac AC_LANG_POP([Fortran 77]) ]) # AC_COIN_PROG_F77 ########################################################################### # COIN_F77_WRAPPERS # ########################################################################### # Calls autoconfs AC_F77_LIBRARY_LDFLAGS and does additional corrections to FLIBS. # Then calls AC_F77_WRAPPERS to get Fortran namemangling scheme. # # To ensure that the FLIBS are determined and corrected before linking against # Fortran compilers is attempted by other macros, we put it into an extra macro # and call it via AC_REQUIRE. This way it seems to be called before the macros # required by AC_F77_WRAPPERS. AC_DEFUN([_AC_COIN_F77_LIBRARY_LDFLAGS], [AC_BEFORE([AC_PROG_F77],[$0])dnl # get FLIBS AC_F77_LIBRARY_LDFLAGS orig_FLIBS="$FLIBS" # If FLIBS has been set by the user, we just restore its value here if test x"$save_FLIBS" != x; then FLIBS="$save_FLIBS" else # This is to correct a missing exclusion in autoconf 2.59 if test x"$FLIBS" != x; then my_flibs= for flag in $FLIBS; do case $flag in -lcrt*.o) ;; -lcygwin) ;; -lgcc*) ;; *) my_flibs="$my_flibs $flag" ;; esac done FLIBS="$my_flibs" fi case $build in # The following is a fix to define FLIBS for ifort on Windows # In its original version, it linked in libifcorert.lib or libifcorertd.lib on Windows/ifort explicitly. # However, this seem to create a dependency on libifcorert.dll (or libifcorertd.dll) in the executables. # This is seem to be unnecessary, libifcorert(d).lib has been removed from the link line. # Further, excluding libc.lib from the default libs seemed to be necessary only for VS < 8. # Since the corresponding flag seems to make more trouble than it avoids, it has been removed now. *-cygwin* | *-mingw*) case "$F77" in # ifort* | */ifort* | IFORT* | */IFORT*) # FLIBS="-link $LIBS /NODEFAULTLIB:libc.lib" # if "$coin_debug_compile" = true ; then # FLIBS="-link $LIBS /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmt.lib" # else # FLIBS="-link $LIBS /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmtd.lib" # fi # ;; compile_f2c*) FLIBS=`$F77 -FLIBS` ;; esac;; *-hp-*) FLIBS="$FLIBS -lm";; *-ibm-*) FLIBS=`echo $FLIBS | sed 's/-lc)/-lc/g'` ;; *-linux-*) case "$F77" in pgf77* | */pgf77* | pgf90* | */pgf90*) # ask linker to go through the archives multiple times # (the Fortran compiler seems to do that automatically...) FLIBS="-Wl,--start-group $FLIBS -Wl,--end-group" ;; esac esac ac_cv_f77_libs="$FLIBS" fi if test "x$orig_FLIBS" != "x$FLIBS" ; then AC_MSG_NOTICE([Corrected Fortran libraries: $FLIBS]) fi ]) # _AC_COIN_F77_LIBRARY_LDFLAGS AC_DEFUN([AC_COIN_F77_WRAPPERS], [AC_BEFORE([AC_COIN_PROG_F77],[$0])dnl AC_REQUIRE([_AC_COIN_F77_LIBRARY_LDFLAGS])dnl AC_LANG_PUSH([Fortran 77]) AC_F77_WRAPPERS AC_LANG_POP([Fortran 77]) ]) # AC_COIN_F77_WRAPPERS ########################################################################### # COIN_FIND_F77 # ########################################################################### # Attempt to preempt autoconf by locating an appropriate F77 program. This # macro will not trigger a fatal error if a suitable compiler cannot be # found. It should be called before COIN_PROG_F77 or COIN_TRY_FLINK. AC_DEFUN([AC_COIN_FIND_F77], [AC_REQUIRE([AC_COIN_ENABLE_MSVC]) AC_REQUIRE([AC_COIN_F77_COMPS]) AC_MSG_NOTICE([Trying to determine Fortran compiler name]) AC_CHECK_TOOLS([F77],[$coin_f77_comps],[unavailable]) ]) # Auxilliary macro to make sure both COIN_PROG_F77 and COIN_FIND_F77 use # the same search lists for compiler names. # For *-*-solaris*, promote Studio/Workshop compilers to front of list. AC_DEFUN([AC_COIN_F77_COMPS], [case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then coin_f77_comps="ifort fl32 compile_f2c" else coin_f77_comps="gfortran ifort g95 g77 fl32 compile_f2c" fi ;; *-*-solaris*) coin_f77_comps="f95 f90 g95 f77 xlf_r fort77 gfortran g77 pgf90 pgf77 ifort ifc frt af77" ;; *-linux-gnu*) coin_f77_comps="gfortran ifort g95 fort77 f77 g77 pgf90 pgf77 ifc frt af77 xlf_r" ;; *) coin_f77_comps="xlf_r fort77 gfortran ifort g95 f77 g77 pgf90 pgf77 ifc frt af77" ;; esac ]) ########################################################################### # COIN_INIT_AUTOMAKE # ########################################################################### # This macro calls the regular INIT_AUTOMAKE and MAINTAINER_MODE # macros, and defines additional variables and makefile conditionals, # that are used in the maintainer parts of the makfile. It also # checks if the correct versions of the autotools are used. # # This also defines the AC_SUBST variables: # abs_source_dir absolute path to source code for this package # abs_bin_dir absolute path to the directory where binaries are # going to be installed (prefix/bin) # abs_lib_dir absolute path to the directory where libraries are # going to be installed (prefix/lib) # abs_include_dir absolute path to the directory where the header files # are installed (prefix/include) AC_DEFUN([AC_COIN_INIT_AUTOMAKE], [AC_REQUIRE([AC_PROG_EGREP]) AC_REQUIRE([AC_PROG_LN_S]) # AC_MSG_NOTICE([Beginning automake initialisation.]) # Stuff for automake AM_INIT_AUTOMAKE AM_MAINTAINER_MODE coin_have_externals=no if test "$enable_maintainer_mode" = yes; then # If maintainer mode is chosen, we make sure that the correct versions # of the tools are used, and that we know where libtool.m4 is (to # recreate acinclude.m4) AC_SUBST(LIBTOOLM4) LIBTOOLM4= # Normally, $HOME AUTOTOOLS_DFLT=$HOME AC_CACHE_CHECK([whether we are using the correct autotools], [ac_cv_use_correct_autotools], [ac_cv_use_correct_autotools=check]) if test $ac_cv_use_correct_autotools = check; then ac_cv_use_correct_autotools=yes # Check if we have autoconf AC_CHECK_PROG([have_autoconf],[autoconf],[yes],[no]) if test $have_autoconf = no; then AC_MSG_ERROR([You specified you want to use maintainer mode, but I cannot find autoconf in your path.]) fi # Check whether autoconf is the correct version correct_version='2.59' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` AC_MSG_CHECKING([whether we are using the correct version ($correct_version) of autoconf]) autoconf --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then AC_MSG_RESULT([yes]) else rm -f confauto.out AC_MSG_RESULT([no]) AC_MSG_ERROR([You don't have the correct version of autoconf as the first one in your path.]) fi rm -f confauto.out # Check if the executable autoconf is picked up from the correct location AC_MSG_CHECKING([whether autoconf is coming from the correct location]) autoconf_dir=`which autoconf | sed -e 's=/autoconf=='` autoconf_dir=`cd $autoconf_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $autoconf_dir = `cd $want_dir; pwd`; then AC_MSG_RESULT([yes]) else rm -f confauto.out AC_MSG_RESULT([no]) AC_MSG_ERROR([The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin.]) fi # Check if we have automake AC_CHECK_PROG([have_automake],[automake],[yes],[no]) if test $have_automake = no; then AC_MSG_ERROR([You specified you want to use maintainer mode, but I cannot find automake in your path.]) fi # Check whether automake is the correct version correct_version='1.9.6' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` AC_MSG_CHECKING([whether we are using the correct version ($correct_version) of automake]) automake --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then AC_MSG_RESULT([yes]) else rm -f confauto.out AC_MSG_RESULT([no]) AC_MSG_ERROR([You don't have the correct version of automake as the first one in your path.]) fi rm -f confauto.out # Check if the executable automake is picked up from the correct location AC_MSG_CHECKING([whether automake is coming from the correct location]) automake_dir=`which automake | sed -e 's=/automake=='` automake_dir=`cd $automake_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $automake_dir = `cd $want_dir; pwd`; then AC_MSG_RESULT([yes]) else rm -f confauto.out AC_MSG_RESULT([no]) AC_MSG_ERROR([The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin.]) fi # Check if this is the correct version of libtool (with escaped dots) if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi correct_version='1.5.22' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` AC_COIN_CHECK_FILE([$want_dir/libtool/ltmain.sh], [have_ltmain=yes], [have_ltmain=no]) AC_MSG_CHECKING([whether we are using the correct version ($correct_version) of libtool.]) if test $have_ltmain = yes; then if $EGREP $grep_version $want_dir/libtool/ltmain.sh >/dev/null 2>&1; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) AC_MSG_ERROR([You don't have the correct version of libtool.]) fi else AC_MSG_RESULT([no]) AC_MSG_ERROR([I cannot find the ltmain.sh file.]) fi fi # Check if we can find the libtool file if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi AC_COIN_CHECK_FILE([$want_dir/aclocal/libtool.m4], [LIBTOOLM4="$want_dir/aclocal/libtool.m4"], [AC_MSG_ERROR([I cannot find the libtool.m4 file.])]) # Check if we have an Dependencies file if test -r $srcdir/Dependencies; then coin_have_externals=yes fi # Check if subversion is installed and understands https AC_CHECK_PROG([have_svn],[svn],[yes],[no]) if test x$have_svn = xyes; then AC_CACHE_CHECK([whether svn understands https], [ac_cv_svn_understands_https], [svn --version > confauto.out 2>&1 if $EGREP https confauto.out >/dev/null 2>&1; then ac_cv_svn_understands_https=yes else ac_cv_svn_understands_https=no have_svn=no ac_cv_prog_have_svn=no fi rm -f confauto.out]) fi # Find the location of the BuildTools directory BUILDTOOLSDIR= if test -r $srcdir/BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/BuildTools else if test -r $srcdir/../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../BuildTools else if test -r $srcdir/../../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../../BuildTools else AC_MSG_ERROR(Cannot find the BuildTools directory, better disable maintainer mode.) fi fi fi AC_SUBST(BUILDTOOLSDIR) # for running automake by make, we need to have Makemain.inc available at the place where it usually can be found during run_autotools if test "$BUILDTOOLSDIR" != "$srcdir/BuildTools" ; then $LN_S `cd $BUILDTOOLSDIR; pwd` "$srcdir/BuildTools" fi # The following variable is set to the name of the directory where # the autotool scripts are located AC_SUBST(AUX_DIR) AUX_DIR=$ac_aux_dir fi # helpful variable for the base directory of this package abs_source_dir=`cd $srcdir; pwd` AC_SUBST(abs_source_dir) # Stuff for example Makefiles if test x$prefix = xNONE; then full_prefix=$ac_default_prefix else full_prefix=$prefix fi full_prefix=`cd $full_prefix ; pwd` AC_SUBST(abs_lib_dir) abs_lib_dir=$full_prefix/lib AC_SUBST(abs_include_dir) abs_include_dir=$full_prefix/include AC_SUBST(abs_bin_dir) abs_bin_dir=$full_prefix/bin AM_CONDITIONAL(HAVE_EXTERNALS, test $coin_have_externals = yes && test x$have_svn = xyes) # AC_MSG_NOTICE([End automake initialisation.]) ]) # AC_COIN_INIT_AUTOMAKE ########################################################################### # COIN_CREATE_LIBTOOL # ########################################################################### # This does all the tests necessary to create the libtool script in the # package base directory. If this is used, then the COIN_INIT_AUTO_TOOLS # test in the subdirectories will be able to skip the libtool tests and # just use the one in the package base directory. m4_define([AC_COIN_CREATE_LIBTOOL], [AC_CANONICAL_BUILD # Check if user wants to produce debugging code AC_COIN_DEBUG_COMPILE # Get the name of the C compiler and appropriate compiler options AC_COIN_PROG_CC # Get the name of the C++ compiler and appropriate compiler options AC_COIN_PROG_CXX # Get the name of the Fortran compiler and appropriate compiler options AC_COIN_PROG_F77 # Initialize automake and libtool # AC_MSG_NOTICE([Calling INIT_AUTO_TOOLS from CREATE_LIBTOOL.]) AC_COIN_INIT_AUTO_TOOLS # AC_MSG_NOTICE([Finished INIT_AUTO_TOOLS from CREATE_LIBTOOL.]) ]) ########################################################################### # COIN_INIT_AUTO_TOOLS # ########################################################################### # Initialize the auto tools automake and libtool, with all # modifications we want for COIN packages. # # RPATH_FLAGS link flags for hardcoding path to shared objects # This is a trick to have this code before AC_COIN_PROG_LIBTOOL AC_DEFUN([AC_COIN_DISABLE_STATIC], [ coin_disable_shared=no # Test if force_shared has been set if test "x$1" = xforce_shared; then if test x$enable_shared = xno; then AC_MSG_ERROR([Shared libraries are disabled by user, but this is not feasible with the given options]) fi enable_shared=yes; else case $build in *-cygwin* | *-mingw*) coin_disable_shared=yes if test x"$enable_shared" = xyes; then case "$CC" in clang* ) AC_MSG_WARN([Building of DLLs not supported in this configuration.]) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) AC_MSG_NOTICE([Building of DLLs not supported in this configuration.]) ;; *gcc*) if test x"$enable_dependency_linking" = xyes; then coin_disable_shared=no else AC_MSG_WARN([Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built]) fi ;; *) AC_MSG_WARN([Building of DLLs not supported in this configuration.]) ;; esac fi ;; *-aix*) coin_disable_shared=yes platform=AIX if test x"$enable_shared" = xyes; then AC_MSG_WARN([Shared objects are not supported.]) fi ;; esac fi if test x"$coin_disable_shared" = xyes; then if test x"$enable_shared" = xyes; then : else # we don't disable shared, because it was not selected anyway coin_disable_shared=no fi enable_shared=no fi # By default, we only want the shared objects to be compiled AC_DISABLE_STATIC ]) m4_define([AC_COIN_INIT_AUTO_TOOLS], [{AC_BEFORE([AC_COIN_PROG_CXX],[$0]) AC_BEFORE([AC_COIN_PROG_CC],[$0]) AC_BEFORE([AC_COIN_PROG_F77],[$0]) # START AC_COIN_DISABLE_STATIC([$1]) # Initialize automake AC_COIN_INIT_AUTOMAKE LIBTOOL= if test -f ../libtool; then coin_config_dir=.. LIBTOOL='$(SHELL) $(top_builddir)/../libtool' fi if test "x$LIBTOOL" = x; then if test -f ../../libtool; then coin_config_dir=../.. LIBTOOL='$(SHELL) $(top_builddir)/../../libtool' fi fi if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Creating libtool script (calling COIN_PROG_LIBTOOL).]) # Stuff for libtool AC_COIN_PROG_LIBTOOL # AC_MSG_NOTICE([Finished COIN_PROG_LIBTOOL.]) # set RPATH_FLAGS to the compiler link flags required to hardcode location # of the shared objects AC_COIN_RPATH_FLAGS([$abs_lib_dir]) else AC_MSG_NOTICE([Using libtool script in directory $coin_config_dir]) # get all missing information from the config.log file # output variables and defines as_save_IFS=$IFS IFS=' ' for oneline in `cat $coin_config_dir/config.status`; do case "$oneline" in # First some automake conditionals s,@am__fastdep* | s,@AR@* | s,@CPP@* | s,@CPPFLAGS@* | s,@CXXCPP@* | \ s,@RANLIB@* | s,@STRIP@* | s,@ac_ct_AR@* | s,@ac_ct_RANLIB@* | \ s,@ac_ct_STRIP@* | s,@host* | s,@LN_S@* | s,@RPATH_FLAGS@* | \ s,@ac_c_preproc_warn_flag@* | s,@ac_cxx_preproc_warn_flag@* ) command=`echo $oneline | sed -e 's/^s,@//' -e 's/@,/="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; s,@DEFS@* ) command=`echo $oneline | sed -e 's/^s,@DEFS@,/defsline="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; esac done IFS=$as_save_IFS # And some defines (assuming here that the packages base dir # doesn't have a config.h file for word in $defsline; do # echo word $word case $word in -DHAVE_@<:@A-Z_@:>@*_H=1 | -DSTDC_HEADERS=1 ) i=`echo $word | sed -e 's/-D/#define /' -e 's/=/ /'` # echo dd $i echo $i >>confdefs.h ;; esac done fi # AC_MSG_NOTICE([End of INIT_AUTO_TOOLS.]) AC_ARG_ENABLE([dependency-linking], [AC_HELP_STRING([--disable-dependency-linking], [disable linking library dependencies into shared libraries])], [dependency_linking="$enableval"], [dependency_linking=auto]) if test "$dependency_linking" = auto; then # On Cygwin and AIX, building DLLs doesn't work dependency_linking=no if test x"$coin_disable_shared" = xno; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) dependency_linking=yes ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) dependency_linking=no ;; *gcc*) dependency_linking=yes ;; *) dependency_linking=yes ;; esac ;; *) dependency_linking=yes ;; esac fi fi if test "$dependency_linking" = yes ; then LT_LDFLAGS="-no-undefined" else LT_LDFLAGS= fi AM_CONDITIONAL(DEPENDENCY_LINKING, [test "$dependency_linking" = yes]) # Check if we want to set the library version AC_MSG_CHECKING([if library version is set]) if test x"$coin_libversion" != x; then LT_LDFLAGS="$LT_LDFLAGS -version-info $coin_libversion" AC_MSG_RESULT([$coin_libversion]) else AC_MSG_RESULT([no]) fi AC_SUBST(LT_LDFLAGS) #END }]) ########################################################################### # 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 AC_DEFUN([AC_COIN_PATCH_LIBTOOL_CYGWIN], [ case "$CXX" in clang* ) # we assume that libtool patches for CLANG are the same as for GNU compiler - correct??? AC_MSG_NOTICE(Applying patches to libtool for CLANG 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 ;; 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 \\$('"$CYGPATH_W \$[]1"') '"$mydos2unix"' | xargs echo); echo \\$bla; for i in \\$bla; do lib -nologo -extract:\\$i \\$('"$CYGPATH_W \$[]1"'); done%' \ -e 's%$AR t "$f_ex_an_ar_oldlib"%lib -nologo -list \$('"$CYGPATH_W \$[]1"') '"$mydos2unix"'%' \ -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 ;; *) 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 ;; esac mv conftest.bla libtool chmod 755 libtool ]) # COIN_PATCH_LIBTOOL_CYGWIN ########################################################################### # COIN_PATCH_LIBTOOL_SOLARIS # ########################################################################### # If we want to do a 64-bit build with GCC on Solaris, the system search # libraries need to point to 64-bit subdirectories. If they do not already do # that, fix them. This patch is evolving, as are GCC compilers. GCC 4.2.1 # reports the correct search list, given the correct call. GCC 4.1.1 does not. # `Correct call' means -m64 is specified. `Correct search list' seems to amount # to prepending the list of 64-bit subdirectories to the 32-bit directories. # Both SPARC and x86 have this issue, but a different hardware id string is # required depending on the underlying CPU. The macro executes isainfo to get # the string. This will fail, of course, if we're cross-compiling. The # alternative is to fail on a regular basis each time a new CPU identifier is # needed. This macro will also fail if the search list reported with # -print-search-dirs differs between the C, C++, and Fortran compilers; each # have their own setting in libtool. If GCC reports the correct search list # given the -m64 flag, the best solution is to define CC='gcc -m64', and # similarly for CXX, F77, so that libtool will make the correct call. ########################################################################### AC_DEFUN([AC_COIN_PATCH_LIBTOOL_SOLARIS], [ if test "$GCC" = yes && \ (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm64' >/dev/null 2>&1) ; then hdwisa=`isainfo | sed -e 's/\(@<:@^ @:>@*\) .*$/\1/'` if `$EGREP 'sys_lib_search_path_spec=' libtool | $EGREP -v $hdwisa >/dev/null 2>&1` ; then AC_MSG_NOTICE([Applying patches to libtool for 64-bit GCC compilation]) fixlibtmp=`$CC -m64 -print-search-dirs | $EGREP '^libraries:'` fixlibtmp=`echo $fixlibtmp | sed -e 's/libraries: =//' -e 's/:/ /g'` if `echo "$fixlibtmp" | $EGREP -v $hdwisa >/dev/null 2>&1` ; then # AC_MSG_NOTICE(Compensating for broken gcc) for lib in $fixlibtmp ; do if test -d "${lib}${hdwisa}" ; then syslibpath64="$syslibpath64 ${lib}${hdwisa}/" fi done syslibpath64="${syslibpath64} ${fixlibtmp}" else syslibpath64="$fixlibtmp" fi sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="'"$syslibpath64"'"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi # AC_MSG_NOTICE(Result is ) # $EGREP 'sys_lib_search_path_spec=' libtool fi ]) # COIN_PATCH_LIBTOOL_SOLARIS ########################################################################### # COIN_PROG_LIBTOOL # ########################################################################### # Setup the libtool stuff together with any modifications to make it # work on additional platforms AC_DEFUN([AC_COIN_PROG_LIBTOOL], [# No longer needed now that CPPFLAGS is correctly set -- lh, 061214 -- # AC_REQUIRE([AC_COIN_DLFCN_H]) # NEW: If libtool exists in the directory higher up, we use that one # instead of creating a new one # It turns out that the code for AC_PROG_LIBTOOL is somehow AC_REQUIRED # out in front of this macro body. You'll notice that LIBTOOL is already # defined here. We'll have to count on this macro not being called if libtool # already exists, or at least move the libtool fixes outside the conditional. # AC_MSG_NOTICE([Entering coin_prog_libtool, LIBTOOL = "$LIBTOOL".]) # This test is therefore removed. -- lh, 061214 -- # if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Calling PROG_LIBTOOL.]) AC_PROG_LIBTOOL # AC_MSG_NOTICE([Finished PROG_LIBTOOL.]) AC_SUBST(ac_c_preproc_warn_flag) AC_SUBST(ac_cxx_preproc_warn_flag) AC_MSG_NOTICE([Build is "$build".]) mydos2unix='| dos2unix' case $build in *-mingw*) CYGPATH_W=echo ;; esac case $build in # Here we need to check if -m32 is specified. If so, we need to correct # sys_lib_search_path_spec *-cygwin* | *-mingw*) AC_COIN_PATCH_LIBTOOL_CYGWIN ;; *x86_64-*) if test "$GCC" = yes && (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm32' >& /dev/null); then AC_MSG_NOTICE(Applying patches to libtool for 32bit compilation) sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="/lib /usr/lib"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi ;; *-solaris*) AC_COIN_PATCH_LIBTOOL_SOLARIS ;; # Cygwin. Ah, cygwin. Too big and ugly to inline; see the macro. *-darwin*) AC_MSG_NOTICE(Applying patches to libtool for Darwin) sed -e 's/verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"/verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"/' \ -e 's/ -dynamiclib / -dynamiclib -single_module /g' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; esac # This fi matches the commented `if test "x$LIBTOOL" = x;' up at the head of # the macro. -- lh, 061214 -- # fi # AC_MSG_NOTICE([End libtool initialisation.]) ]) # AC_COIN_PROG_LIBTOOL # This is a trick to force the check for the dlfcn header to be done before # the checks for libtool # No longer needed now that CPPFLAGS is correctly set. -- lh, 061214 -- # ACDEFUN([AC_COIN_DLFCN_H], # [AC_LANG_PUSH(C) # AC_COIN_CHECK_HEADER([dlfcn.h]) # AC_LANG_POP(C) # ]) # AC_COIN_DLFCN_H ########################################################################### # COIN_RPATH_FLAGS # ########################################################################### # This macro, in case shared objects are used, defines a variable # RPATH_FLAGS that can be used by the linker to hardwire the library # search path for the given directories. This is useful for example # Makefiles AC_DEFUN([AC_COIN_RPATH_FLAGS], [RPATH_FLAGS= if test $enable_shared = yes; then case $build in *-linux-*) if test "$GXX" = "yes"; then RPATH_FLAGS= for dir in $1; do RPATH_FLAGS="$RPATH_FLAGS -Wl,--rpath -Wl,$dir" done fi ;; *-darwin*) RPATH_FLAGS=nothing ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) RPATH_FLAGS=nothing ;; esac ;; *-hp-*) RPATH_FLAGS=nothing ;; *-mingw32) RPATH_FLAGS=nothing ;; *-*-solaris*) RPATH_FLAGS= for dir in $1; do RPATH_FLAGS="$RPATH_FLAGS -R$dir" done esac if test "$RPATH_FLAGS" = ""; then AC_MSG_WARN([Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually.]) fi if test "$RPATH_FLAGS" = "nothing"; then RPATH_FLAGS= fi fi AC_SUBST(RPATH_FLAGS) ]) # AC_COIN_RPATH_FLAGS ########################################################################### # COIN_LINK_INPUT_CMD # ########################################################################### # This macro determines which command should be used to "link" files # that are input to the generated executables. On Windows, the codes # using the native Windows system libraries, cannot understand symbolic # links, and a copy should be used instead of 'ln -s'. # The result is stored in coin_link_input_cmd AC_DEFUN([AC_COIN_LINK_INPUT_CMD], [AC_REQUIRE([AC_PROG_LN_S]) AC_BEFORE([AC_COIN_PROG_CC], [$0]) AC_BEFORE([AC_COIN_ENABLE_MSVC], [$0]) AC_MSG_CHECKING([which command should be used to link input files]) coin_link_input_cmd="$LN_S" case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_link_input_cmd=cp ;; esac AC_MSG_RESULT($coin_link_input_cmd) ]) ########################################################################### # COIN_FINALIZE # ########################################################################### # This macro should be called at the very end of the configure.ac file. # It creates the output files (by using AC_OUTPUT), and might do some other # things (such as generating links to data files in a VPATH configuration). # It also prints the "success" message. # Note: If the variable coin_skip_ac_output is set to yes, then no output # files are written. AC_DEFUN([AC_COIN_FINALIZE], [ AC_REQUIRE([AC_COIN_LINK_INPUT_CMD]) if test x$coin_skip_ac_output != xyes; then # library extension AC_SUBST(LIBEXT) case "$CC" in clang* ) LIBEXT=a ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LIBEXT=lib ;; *) LIBEXT=a ;; esac # Define VPATH_DISTCLEANFILES to be everything that needs to be # cleaned for distclean in a vpath configuration AC_SUBST(VPATH_DISTCLEANFILES) VPATH_DISTCLEANFILES="$coin_vpath_link_files" # Take out subdirectories if their configuration concluded that they # don't need to be compiled if test x"$coin_ac_skip_subdirs" != x; then new_subdirs= for i in $subdirs; do skipme=no for j in $coin_ac_skip_subdirs; do if test $i = $j; then skipme=yes; fi done if test $skipme = no; then new_subdirs="$new_subdirs $i" fi done subdirs="$new_subdirs" fi # need to come before AC_OUTPUT if test x$coin_projectdir != xyes; then # write coin_subdirs to a file so that project configuration knows where to find uninstalled projects echo $coin_subdirs > coin_subdirs.txt else # substitute for OBJDIR, needed to setup .pc file for uninstalled project ABSBUILDDIR="`pwd`" AC_SUBST(ABSBUILDDIR) fi AC_OUTPUT if test x"$coin_vpath_link_files" = x; then : ; else lnkcmd="$coin_link_input_cmd" if test "$lnkcmd" = cp; then AC_MSG_NOTICE(Copying data files for VPATH configuration) else AC_MSG_NOTICE(Creating VPATH links for data files) fi for file in $coin_vpath_link_files; do dir=`AS_DIRNAME(["./$file"])` if test -d $dir; then : ; else AS_MKDIR_P($dir) fi rm -f $file $lnkcmd $abs_source_dir/$file $file done fi AC_MSG_NOTICE([In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting]) if test x$coin_projectdir = xyes; then AC_MSG_NOTICE([Configuration of $PACKAGE_NAME successful]) else AC_MSG_NOTICE([Main configuration of $PACKAGE_NAME successful]) fi else AC_MSG_NOTICE([No configuration of $PACKAGE_NAME necessary]) fi ]) #AC_COIN_FINALIZE ########################################################################### # COIN_VPATH_LINK # ########################################################################### # This macro queues source files that need to be available in the build # directory. In a VPATH configuration, the files will be made available by # symbolic link or copy (when the platform does not support links). The list # is processed by COIN_FINALIZE. The parameter is a whitespace-separated # list of files. AC_DEFUN([AC_COIN_VPATH_LINK], [ AC_REQUIRE([AC_COIN_CHECK_VPATH]) # Allow for newlines in the parameter if test $coin_vpath_config = yes; then cvl_tmp="$1" for file in $cvl_tmp ; do coin_vpath_link_files="$coin_vpath_link_files $file" done fi ]) #AC_COIN_VPATH_LINK ########################################################################### # COIN_ENABLE_GNU_PACKAGES # ########################################################################### # This macro defined the --enable-gnu-packages flag. This can be used # to check if a user wants to compile GNU packges (such as readline) # into the executable. By default, GNU packages are disabled. AC_DEFUN([AC_COIN_ENABLE_GNU_PACKAGES], [AC_ARG_ENABLE([gnu-packages], [AC_HELP_STRING([--enable-gnu-packages], [compile with GNU packages (disabled by default)])], [coin_enable_gnu=$enableval], [coin_enable_gnu=no]) ]) # AC_COIN_ENABLE_GNU_PACKAGES ####################################################################### # COIN_CHECK_LIBM # ####################################################################### # For a (space separated) list of arguments X, this macro adds the flags # for linking against the math library to a X_LIBS and X_PCLIBS. AC_DEFUN([AC_COIN_CHECK_LIBM], [AC_BEFORE([AC_COIN_PROG_CC],[$0]) if test $coin_cc_is_cl != true ; then coin_foreach_w([myvar], [$1], [ m4_toupper(myvar)_LIBS="-lm $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_PCLIBS="-lm $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS_INSTALLED="-lm $m4_toupper(myvar)_LIBS_INSTALLED" ]) fi ]) # AC_COIN_CHECK_LIBM ########################################################################### # COIN_CHECK_GNU_ZLIB # ########################################################################### # This macro checks for the libz library. If found, it sets the automake # conditional COIN_HAS_ZLIB and defines the C preprocessor variable # COIN_HAS_ZLIB. Further, for a (space separated) list of arguments X, # it adds the linker flag to the variables X_LIBS, X_PCLIBS, and X_LIBS_INSTALLED. # TODO the macro name should be changed to AC_COIN_CHECK_ZLIB AC_DEFUN([AC_COIN_CHECK_GNU_ZLIB], [ AC_BEFORE([AC_COIN_PROG_CXX],[$0]) AC_BEFORE([AC_COIN_PROG_CC],[$0]) AC_BEFORE([AC_COIN_PROG_F77],[$0]) AC_BEFORE([$0],[AC_COIN_FINALIZE]) coin_has_zlib=no AC_ARG_ENABLE([zlib], [AC_HELP_STRING([--disable-zlib],[do not compile with compression library zlib])], [coin_enable_zlib=$enableval], [coin_enable_zlib=yes]) if test $coin_enable_zlib = yes; then AC_COIN_CHECK_HEADER([zlib.h],[coin_has_zlib=yes]) if test $coin_has_zlib = yes; then AC_CHECK_LIB([z],[gzopen],[:],[coin_has_zlib=no]) fi if test $coin_has_zlib = yes; then coin_foreach_w([myvar], [$1], [ m4_toupper(myvar)_LIBS="-lz $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_PCLIBS="-lz $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS_INSTALLED="-lz $m4_toupper(myvar)_LIBS_INSTALLED" ]) AC_DEFINE([COIN_HAS_ZLIB],[1],[Define to 1 if zlib is available]) fi fi AM_CONDITIONAL(COIN_HAS_ZLIB,test x$coin_has_zlib = xyes) ]) # AC_COIN_CHECK_GNU_ZLIB ########################################################################### # COIN_CHECK_GNU_BZLIB # ########################################################################### # This macro checks for the libbz2 library. If found, it defines the C # preprocessor variable COIN_HAS_BZLIB. Further, for a (space separated) list # of arguments X, it adds the linker flag to the variables X_LIBS, X_PCLIBS, and X_LIBS_INSTALLED. # TODO the macro name should be changed to AC_COIN_CHECK_BZLIB AC_DEFUN([AC_COIN_CHECK_GNU_BZLIB], [ AC_BEFORE([AC_COIN_PROG_CXX],[$0]) AC_BEFORE([AC_COIN_PROG_CC],[$0]) AC_BEFORE([AC_COIN_PROG_F77],[$0]) AC_BEFORE([$0],[AC_COIN_FINALIZE]) AC_ARG_ENABLE([bzlib], [AC_HELP_STRING([--disable-bzlib],[do not compile with compression library bzlib])], [coin_enable_bzlib=$enableval], [coin_enable_bzlib=yes]) coin_has_bzlib=no if test $coin_enable_bzlib = yes; then AC_COIN_CHECK_HEADER([bzlib.h],[coin_has_bzlib=yes]) if test $coin_has_bzlib = yes; then AC_CHECK_LIB([bz2],[BZ2_bzReadOpen],[:],[coin_has_bzlib=no]) fi if test $coin_has_bzlib = yes; then coin_foreach_w([myvar], [$1], [ m4_toupper(myvar)_LIBS="-lbz2 $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_PCLIBS="-lbz2 $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS_INSTALLED="-lbz2 $m4_toupper(myvar)_LIBS_INSTALLED" ]) AC_DEFINE([COIN_HAS_BZLIB],[1],[Define to 1 if bzlib is available]) fi fi ]) # AC_COIN_CHECK_GNU_BZLIB ########################################################################### # COIN_CHECK_GNU_READLINE # ########################################################################### # This macro checks for GNU's readline. It verifies that the header # readline/readline.h is available, and that the -lreadline library # contains "readline". It is assumed that #include is included # in the source file before the #include # If found, it defines the C preprocessor variable COIN_HAS_READLINE. # Further, for a (space separated) list of arguments X, it adds the # linker flag to the variable X_LIBS, X_PCLIBS, and X_LIBS_INSTALLED. AC_DEFUN([AC_COIN_CHECK_GNU_READLINE], [AC_REQUIRE([AC_COIN_ENABLE_GNU_PACKAGES]) AC_BEFORE([AC_COIN_PROG_CXX],[$0]) AC_BEFORE([AC_COIN_PROG_CC],[$0]) AC_BEFORE([AC_COIN_PROG_F77],[$0]) AC_BEFORE([$0],[AC_COIN_FINALIZE]) coin_has_readline=no if test $coin_enable_gnu = yes; then AC_COIN_CHECK_HEADER([readline/readline.h], [coin_has_readline=yes],[], [#include ]) coin_save_LIBS="$LIBS" LIBS= # First we check if tputs and friends are available if test $coin_has_readline = yes; then AC_SEARCH_LIBS([tputs],[ncurses termcap curses],[], [coin_has_readline=no]) fi # Now we check for readline if test $coin_has_readline = yes; then AC_CHECK_LIB([readline],[readline],[:],[coin_has_readline=no]) fi if test $coin_has_readline = yes; then coin_foreach_w([myvar], [$1], [ m4_toupper(myvar)_LIBS="-lreadline $LIBS $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_PCLIBS="-lreadline $LIBS $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS_INSTALLED="-lreadline $LIBS $m4_toupper(myvar)_LIBS_INSTALLED" ]) AC_DEFINE([COIN_HAS_READLINE],[1],[Define to 1 if readline is available]) fi LIBS="$coin_save_LIBS" fi ]) # AC_COIN_CHECK_GNU_READLINE ########################################################################### # COIN_CHECK_GMP # ########################################################################### # This macro checks for the gmp library. If found, it defines the C # preprocessor variable COIN_HAS_GMP. Further, for a (space separated) list # of arguments X, it adds the linker flag to the variables X_LIBS, X_PCLIBS, and X_LIBS_INSTALLED. AC_DEFUN([AC_COIN_CHECK_GMP], [ AC_BEFORE([AC_COIN_PROG_CXX],[$0]) AC_BEFORE([AC_COIN_PROG_CC],[$0]) AC_BEFORE([AC_COIN_PROG_F77],[$0]) AC_BEFORE([$0],[AC_COIN_FINALIZE]) AC_ARG_ENABLE([gmp], [AC_HELP_STRING([--disable-gmp],[do not compile with GNU multiple precision library])], [coin_enable_gmp=$enableval], [coin_enable_gmp=yes]) coin_has_gmp=no if test $coin_enable_gmp = yes; then AC_COIN_CHECK_HEADER([gmp.h],[AC_CHECK_LIB([gmp],[__gmpz_init],[coin_has_gmp=yes])]) if test $coin_has_gmp = yes ; then coin_foreach_w([myvar], [$1], [ m4_toupper(myvar)_LIBS="-lgmp $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_PCLIBS="-lgmp $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS_INSTALLED="-lgmp $m4_toupper(myvar)_LIBS_INSTALLED" ]) AC_DEFINE([COIN_HAS_GMP],[1],[Define to 1 if GMP is available]) fi fi ]) # AC_COIN_CHECK_GMP ########################################################################### # COIN_CHECK_ISFINITE # ########################################################################### # This macro checks for a usable implementation of a function to check # whether a given floating point number is finite. # If a function is found, then the macro defines the symbol # toupper($1)_C_FINITE to the name of this function. AC_DEFUN([AC_COIN_CHECK_ISFINITE],[ AC_LANG_PUSH(C++) AC_COIN_CHECK_CXX_CHEADER(math) AC_COIN_CHECK_CXX_CHEADER(float) AC_COIN_CHECK_CXX_CHEADER(ieeefp) COIN_C_FINITE= AC_CHECK_DECL([isfinite],[COIN_C_FINITE=isfinite],,[ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif]) if test -z "$COIN_C_FINITE"; then AC_CHECK_DECL([finite],[COIN_C_FINITE=finite],,[ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif]) if test -z "$COIN_C_FINITE"; then AC_CHECK_DECL([_finite],[COIN_C_FINITE=_finite],,[ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif]) fi fi if test -z "$COIN_C_FINITE"; then AC_MSG_WARN(Cannot find C-function for checking Inf.) else AC_DEFINE_UNQUOTED(COIN_C_FINITE,[$COIN_C_FINITE], [Define to be the name of C-function for Inf check]) fi AC_LANG_POP(C++) ]) ########################################################################### # COIN_CHECK_ISNAN # ########################################################################### # This macro checks for a usable implementation of a function to check # whether a given floating point number represents NaN. # If a function is found, then the macro defines the symbol COIN_C_ISNAN # to the name of this function. AC_DEFUN([AC_COIN_CHECK_ISNAN],[ AC_LANG_PUSH(C++) AC_COIN_CHECK_CXX_CHEADER(math) AC_COIN_CHECK_CXX_CHEADER(float) AC_COIN_CHECK_CXX_CHEADER(ieeefp) COIN_C_ISNAN= AC_CHECK_DECL([isnan],[COIN_C_ISNAN=isnan],,[ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif]) # It appears that for some systems (e.g., Mac OSX), cmath will provide only # std::isnan, and bare isnan will be unavailable. Typically we need a parameter # in the test to allow C++ to do overload resolution. if test -z "$COIN_C_ISNAN"; then AC_CHECK_DECL([std::isnan(42.42)],[COIN_C_ISNAN=std::isnan],,[ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif]) fi if test -z "$COIN_C_ISNAN"; then AC_CHECK_DECL([_isnan],[COIN_C_ISNAN=_isnan],,[ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif]) fi if test -z "$COIN_C_ISNAN"; then AC_CHECK_DECL([isnand],[COIN_C_ISNAN=isnand],,[ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif]) fi if test -z "$COIN_C_ISNAN"; then AC_MSG_WARN(Cannot find C-function for checking NaN.) else AC_DEFINE_UNQUOTED(COIN_C_ISNAN,[$COIN_C_ISNAN], [Define to be the name of C-function for NaN check]) fi AC_LANG_POP(C++) ]) ########################################################################### # COIN_DATA_PATH # ########################################################################### # This macro defines a preprocessor macro with the absolute path to a # subdirectory of Data. The argument of this macro is the name of the # subdirectory (in correct case), and the name of the macro is # COIN_DATA_DIR_PATH, where dir is replaced by the capitalized name of # the directory. The path ends with a separator ("/" for linux and # '\\' for Windows). The default value for this path can be # overwritten with the input variable with the same name # (COIN_DATA_DIR_PATH). At this point we chech only for the # $srcdir/../Data subdirectory. AC_DEFUN([AC_COIN_DATA_PATH], [AC_MSG_CHECKING([absolute path to data directory $1]) AC_ARG_VAR(m4_toupper(COIN_DATA_$1_PATH),[Set to absolute path to Data/$1 subdirectory]) if test x"$m4_toupper(COIN_DATA_$1_PATH)" = x; then m4_toupper(COIN_DATA_$1_PATH)=`cd $srcdir/../Data/$1; pwd` fi # Under Cygwin, use Windows path. Add separator case $build in *-cygwin*) m4_toupper(COIN_DATA_$1_PATH)=`cygwin -w $m4_toupper(COIN_DATA_$1_PATH)`\\ ;; *) m4_toupper(COIN_DATA_$1_PATH)="$m4_toupper(COIN_DATA_$1_PATH)/" ;; esac if test -d $m4_toupper(COIN_DATA_$1_PATH); then AC_DEFINE_UNQUOTED(m4_toupper(COIN_DATA_$1_PATH),["$m4_toupper(COIN_DATA_$1_PATH)"], [Define to absolute path for Data subdirectory $1]) AC_MSG_RESULT($m4_toupper(COIN_DATA_$1_PATH)) else AC_MSG_ERROR(Directory $m4_toupper(COIN_DATA_$1_PATH) does not exist) fi ]) # AC_COIN_DATA_PATH ########################################################################### # COIN_LINK_FROM_FILELIST # ########################################################################### # This macro creates links (or copies, if necessary) to files listed # as content in a text file (second argument) into a target directory # (first argument), which is created if it doesn't exist yet. If s link # already exists, nothing happens. AC_DEFUN([AC_COIN_LINKCOPY_FROM_FILELIST], [cmd="$3" if test -r $srcdir/$2 ; then my_target_dir="$1" my_link_files=`cat $srcdir/$2` my_dirname=`AS_DIRNAME($2)` # if test -e $my_target_dir; then : ; else # AS_MKDIR_P($my_target_dir) # fi for i in $my_link_files; do #rm -rf $my_target_dir/$i if test -e $my_target_dir/$i; then : ; else dirn2=`AS_DIRNAME($my_target_dir/$i)` if test -d $dirn2; then : ; else AS_MKDIR_P($dirn2) fi $cmd $abs_source_dir/$my_dirname/$i $my_target_dir/$i fi done else AC_MSG_WARN([File list file $2 missing!]) fi ]) AC_DEFUN([AC_COIN_LINK_FROM_FILELIST], [ AC_REQUIRE([AC_COIN_LINK_INPUT_CMD]) echo Creating links in $1 ... AC_COIN_LINKCOPY_FROM_FILELIST($1, $2, $coin_link_input_cmd) ]) ########################################################################### # COIN_COPY_FROM_FILELIST # ########################################################################### # Like COIN_LINK_FROM_FILELIST, but copies the files. AC_DEFUN([AC_COIN_COPY_FROM_FILELIST], [ echo Creating copies in $1 ... AC_COIN_LINKCOPY_FROM_FILELIST($1, $2, [cp]) ]) ########################################################################### # COIN_EXAMPLE_FILES # ########################################################################### # This macro determines the names of the example files (using the # argument in an "ls" command) and sets up the variables EXAMPLE_FILES # and EXAMPLE_CLEAN_FILES. If this is a VPATH configuration, it also # creates soft links to the example files. AC_DEFUN([AC_COIN_EXAMPLE_FILES], [AC_REQUIRE([AC_COIN_CHECK_VPATH]) AC_REQUIRE([AC_COIN_ENABLE_MSVC]) AC_REQUIRE([AC_PROG_LN_S]) files=`cd $srcdir; ls $1` # We need to do the following loop to make sure that are no newlines # in the variable for file in $files; do EXAMPLE_FILES="$EXAMPLE_FILES $file" done if test $coin_vpath_config = yes; then lnkcmd= if test "$enable_msvc" = yes; then lnkcmd=cp fi case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) lnkcmd=cp ;; esac if test "x$lnkcmd" = xcp; then AC_MSG_NOTICE([Copying example files ($1)]) else AC_MSG_NOTICE([Creating links to the example files ($1)]) lnkcmd="$LN_S" fi for file in $EXAMPLE_FILES; do rm -f $file $lnkcmd $srcdir/$file $file done EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES $1" else EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES" fi # In case there are compressed files, we create a variable with the # uncompressed names EXAMPLE_UNCOMPRESSED_FILES= for file in $EXAMPLE_FILES; do case $file in *.gz) EXAMPLE_UNCOMPRESSED_FILES="$EXAMPLE_UNCOMPRESSED_FILES `echo $file | sed -e s/.gz//`" ;; esac done AC_SUBST(EXAMPLE_UNCOMPRESSED_FILES) AC_SUBST(EXAMPLE_FILES) AC_SUBST(EXAMPLE_CLEAN_FILES) ]) #AC_COIN_EXAMPLE_FILES ########################################################################### # COIN_CHECK_USER_LIBRARY # ########################################################################### # This macro sets up usage of a user library with header files. The assumption # is that the header file(s) and library do not reside in standard system # directories, hence both the include directory and link flags must be # specified. There are two mandatory arguments and two optional arguments. # # The first argument (mandatory) should be a name (LibraryName) for the # library. The second argument (mandatory) should be an abbreviation in # upper case letters (LBRY) for the library. Ultimately, the macro will # specify two variables, LBRYINCDIR and LBRYLIB, to be substituted in files # generated during configuration; a preprocessor symbol COIN_HAS_LBRY; and a # matching automake conditional COIN_HAS_LBRY. LBRYINCDIR should specify the # directory containing include files for the library. LBRYLIB should specify # the flags necessary to link to the library. A variable coin_has_lbry will # be set to true or false, as appropriate. A variable lbry_libcheck will be # be set to yes or no; no indicates link checks should not be attempted. # # The macro defines three configure arguments, --with-libraryname-incdir, # --with-libraryname-lib, and --disable-libraryname-libcheck, by converting # LibraryName to lower case. # # LBRYINCDIR and LBRYLIB can be specified as environment variables or as # part of the configure command using --with-libraryname-incdir and # --with-libraryname-lib, respectively. Command line arguments override # environment variables. # # If a third argument is given, it should specify a file in LBRYINCDIR. The # macro will check for the presence of the file. If a fourth argument is given, # it should specify a function name, `fname'. The macro will attempt to link a # trivial program containing a parameterless call to the function, `fname()', # using the LBRYLIB flags. The link check uses C as the language; this has been # adequate to date but has limitations. It is possible to disable the link # check by specifying --disable-libraryname-libcheck. This is a workaround for # instances where the link check does not work properly, for whatever reason. # If you're trying to link to a Fortran library, consider using F77_FUNC or # FC_FUNC to obtain a mangled fname appropriate for use from C code. For a C++ # library, you're on your own unless the library declares some function with # extern "C" linkage. Otherwise, you'll have to somehow find the mangled C++ # name. # A fifth argument can be specified to include linker flags that may be required # to sucessfully perform the linking check. # # An optional sixth argument can be given to specify a list of targets. # For each target X, the variables X_LIBS and X_PCLIBS will be extended by $LBRYLIB, # if the library has been found and seems to work. AC_DEFUN([AC_COIN_CHECK_USER_LIBRARY], [ AC_REQUIRE([AC_COIN_PROJECTDIR_INIT]) AC_MSG_CHECKING(if user provides library for $1) # Check for header file directory AC_ARG_WITH(m4_tolower($1)-incdir, AS_HELP_STRING([--with-m4_tolower($1)-incdir], [specify the header file directory for library $1]), [$2INCDIR=`cd $withval; pwd`]) # Check for library directory AC_ARG_WITH(m4_tolower($1)-lib, AS_HELP_STRING([--with-m4_tolower($1)-lib], [specify the flags used to link with the library $1]), [$2LIB=$withval]) # Switch to disable library check if requested AC_ARG_ENABLE(m4_tolower($1)-libcheck, AS_HELP_STRING([--disable-m4_tolower($1)-libcheck], [skip the link check at configuration time]), [m4_tolower($1)_libcheck=$enableval], [m4_tolower($1)_libcheck=yes]) # At this point, if we're going to use the library, both LBRYINCDIR and # LBRYLIB must be defined and not empty. if test x"$$2INCDIR" != x || test x"$$2LIB" != x; then if test x"$$2INCDIR" = x || test x"$$2LIB" = x; then AC_MSG_ERROR([You need to specify both an include directory and link flags to use library $1. Use --with-m4_tolower($1)-incdir of environment variable $$2INCDIR to specify the include directory. Use --with-m4_tolower($1)-lib or environment variable $$2LIB to specify link flags.]) fi m4_tolower(coin_has_$2)=true AC_MSG_RESULT(yes) else m4_tolower(coin_has_$2)=false AC_MSG_RESULT(no) fi # If we have instructions for use, consider header and link checks. if test $m4_tolower(coin_has_$2) = true; then # If argument 3 (file) is given, check for the file. Typically this will be a # header file, but that's not assumed. m4_ifval([$3], [AC_COIN_CHECK_FILE([$$2INCDIR/$3],[], [AC_MSG_ERROR([Cannot find file $3 in $$2INCDIR])])]) # Now see if we can link the function. There are arguments for and against # assuming argument 3 is a header file declaring the function. A correct # function declaration is the main argument in favour. Having to cope with # possible dependencies or other oddities are the main arguments against. # Force the use of C as the best single choice amongst C++, C, and Fortran. # Obviously, this has limits. m4_ifvaln([$4], [if test x"$m4_tolower($1)_libcheck" != xno; then coin_save_LIBS="$LIBS" LIBS="$$2LIB $5" coin_$2_link=no AC_LANG_PUSH(C) for fnm in $4 ; do AC_MSG_CHECKING([whether symbol $fnm is available with $2]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[$fnm()]])], [AC_MSG_RESULT(yes) coin_$2_link=yes break], [AC_MSG_RESULT(no)]) done AC_LANG_POP(C) LIBS="$coin_save_LIBS" if test x"$coin_$2_link" != xyes ; then AC_MSG_ERROR([Cannot find symbol(s) $4 with $2]) fi fi]) # If we make it this far, we've verified the file and linked the function. Add # the necessary link flags to $6_{PC}LIBS and define the preprocessor symbol # COIN_HAS_LBRY. coin_foreach_w([myvar], [$6], [ m4_toupper(myvar)_LIBS="$$2LIB $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_PCLIBS="$$2LIB $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS_INSTALLED="$$2LIB $m4_toupper(myvar)_LIBS_INSTALLED" ]) AC_DEFINE(COIN_HAS_$2,[1],[Define to 1 if the $1 package is available]) fi # Arrange for configure to substitute LBRYINCDIR and LBRYLIB and create the # automake conditional. These actions must occur unconditionally. AC_SUBST($2INCDIR) AC_SUBST($2LIB) AM_CONDITIONAL(COIN_HAS_$2, test $m4_tolower(coin_has_$2) = true) ]) #AC_COIN_CHECK_USER_LIBRARY ########################################################################### # COIN_TRY_FLINK # ########################################################################### # Auxilliary macro to test if a Fortran function name can be linked, # given the current settings of LIBS. We determine from the context, what # the currently active programming language is, and cast the name accordingly. # The first argument is the name of the function/subroutine, in small letters, # the second argument are the actions taken when the test works, and the # third argument are the actions taken if the test fails. AC_DEFUN([AC_COIN_TRY_FLINK], [case $ac_ext in f) AC_TRY_LINK(,[ call $1],[$2],[$3]) ;; c) AC_F77_FUNC($1,cfunc$1) if test x"$coin_need_flibs" = xyes; then flink_try=no; else AC_TRY_LINK([void $cfunc$1();],[$cfunc$1()], [flink_try=yes],[flink_try=no]) fi if test $flink_try = yes; then $2 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" AC_TRY_LINK([void $cfunc$1();],[$cfunc$1()], [LIBS="$flink_save_libs" coin_need_flibs=yes $2 ], [LIBS="$flink_save_libs" $3]) else $3 fi fi ;; cc|cpp) AC_F77_FUNC($1,cfunc$1) if test x"$coin_need_flibs" = xyes; then flink_try=no; else AC_TRY_LINK([extern "C" {void $cfunc$1();}],[$cfunc$1()], [flink_try=yes],[flink_try=no]) fi if test $flink_try = yes; then $2 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" AC_TRY_LINK([extern "C" {void $cfunc$1();}],[$cfunc$1()], [LIBS="$flink_save_libs" coin_need_flibs=yes $2 ], [LIBS="$flink_save_libs" $3]) else $3 fi fi ;; esac ]) # AC_COIN_TRY_FLINK ########################################################################### # COIN_DOXYGEN # ########################################################################### # # This macro determines the configuration information for doxygen, the tool # used to generate online documentation of COIN code. It takes one parameter, # a list of projects (mixed-case, to match the directory names) that should # be processed as external tag files. E.g., COIN_DOXYGEN([Clp Osi]). # # This macro will define the following variables: # coin_have_doxygen Yes if doxygen is found, no otherwise # coin_doxy_usedot Defaults to `yes'; --with-dot will still check to see # if dot is available # coin_doxy_tagname Name of doxygen tag file (placed in doxydoc directory) # coin_doxy_logname Name of doxygen log file (placed in doxydoc directory) # coin_doxy_tagfiles List of doxygen tag files used to reference other # doxygen documentation # coin_doxy_excludes Directories to exclude from doxygen processing AC_DEFUN([AC_COIN_DOXYGEN], [ AC_MSG_NOTICE([configuring doxygen documentation options]) # Check to see if doxygen is available. AC_CHECK_PROG([coin_have_doxygen],[doxygen],[yes],[no]) AC_CHECK_PROG([coin_have_latex],[latex],[yes],[no]) # Look for the dot tool from the graphviz package, unless the user has # disabled it. AC_ARG_WITH([dot], AS_HELP_STRING([--with-dot], [use dot (from graphviz) when creating documentation with doxygen if available; --without-dot to disable]), [],[withval=yes]) if test x"$withval" = xno ; then coin_doxy_usedot=NO AC_MSG_CHECKING([for dot ]) AC_MSG_RESULT([disabled]) else AC_CHECK_PROG([coin_doxy_usedot],[dot],[YES],[NO]) fi # Generate a tag file name and a log file name AC_SUBST([coin_doxy_tagname],[doxydoc/${PACKAGE}_doxy.tag]) AC_SUBST([coin_doxy_logname],[doxydoc/${PACKAGE}_doxy.log]) AM_CONDITIONAL(COIN_HAS_DOXYGEN, [test $coin_have_doxygen = yes]) AM_CONDITIONAL(COIN_HAS_LATEX, [test $coin_have_latex = yes]) # Process the list of project names and massage them into possible doxygen # doc'n directories. Prefer 1) classic external, source processed using # a project-specific doxygen.conf, we use the tag file; 2) classic # external, source processed using package doxygen.conf; 3) installed # doxydoc. Alternatives 1) and 2) are only possible if the directory will be # configured, which we can't know unless this is the package base configure, # since coin_subdirs is only set there. Hence it's sufficient to check for # membership. If we use a tag file from a classic external, exclude the # source from doxygen processing when doxygen runs in the base directory. coin_doxy_tagfiles= coin_doxy_excludes= tmp="$1" for proj in $tmp ; do lc_proj=`echo $proj | [tr [A-Z] [a-z]]` AC_MSG_CHECKING([for doxygen doc'n for $proj ]) doxytag=${lc_proj}_doxy.tag doxyfound=no # proj will be configured, hence doxydoc present in build tree doxysrcdir="${srcdir}/../${proj}" # AC_MSG_NOTICE([Considering $doxysrcdir (base)]) if test -d "$doxysrcdir" ; then # with a doxydoc directory? doxydir="$doxysrcdir/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (base)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) if test -d "$doxydir" ; then # use tag file; don't process source doxydir="../${proj}/doxydoc" coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=../../$doxydir/html" AC_MSG_RESULT([$doxydir (tag)]) coin_doxy_excludes="$coin_doxy_excludes */${proj}" else # will process the source -- nothing further to be done here AC_MSG_RESULT([$doxysrcdir (src)]) fi doxyfound=yes fi # Not built, fall back to installed tag file if test $doxyfound = no ; then eval doxydir="${datadir}/coin/doc/${proj}/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (install)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=$doxydir/html" AC_MSG_RESULT([$doxydir (tag)]) fi done AC_SUBST([coin_doxy_tagfiles]) AC_SUBST([coin_doxy_excludes]) ]) # AC_COIN_DOXYGEN ########################################################################### # COIN_HAS_PKGCONFIG # ########################################################################### # This macro checks whether a pkg-config tool with a minimal version number # is available. If so, then the variable PKGCONFIG is set to its path. # If not, PKGCONFIG is set to "". The minimal version number can be given # as first parameter, by default it is 0.16.0, since COIN-OR .pc files now # include an URL field, which breaks pkg-config version <= 0.15. # This macro is a modified version of PKG_PROG_PKG_CONFIG in pkg.m4. # Further, the AM_CONDITIONAL COIN_HAS_PKGCONFIG is set and PKGCONFIG is # AC_SUBST'ed. Finally, if this setup belongs to a project directory, then # the search path for .pc files is assembled from the value of # $PKG_CONFIG_PATH, the values of --prefix, --coin-instdir, and the directories # named in a file ../coin_subdirs.txt or ../../coin_subdirs.txt in a variable # COIN_PKG_CONFIG_PATH, which is also AC_SUBST'ed. For a path xxx given in the # coin-subdirs.txt, also the directory xxx/pkgconfig is added, if existing. AC_DEFUN([AC_COIN_HAS_PKGCONFIG], [AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_ENABLE([pkg-config], [AC_HELP_STRING([--disable-pkg-config],[disable use of pkg-config (if available)])], [use_pkgconfig="$enableval"], [if test x$coin_cc_is_cl = xtrue; then use_pkgconfig=no else use_pkgconfig=yes fi]) if test $use_pkgconfig = yes ; then if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_CHECK_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.16.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi # check if pkg-config supports the short-errors flag if test -n "$PKG_CONFIG" && \ $PKG_CONFIG --atleast-pkgconfig-version 0.20; then pkg_short_errors=" --short-errors " else pkg_short_errors="" fi fi AM_CONDITIONAL([COIN_HAS_PKGCONFIG], [test -n "$PKG_CONFIG"]) AC_SUBST(PKG_CONFIG) # assemble pkg-config search path for installed projects COIN_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" # let's assume that when installing into $prefix, then the user may have installed some other coin projects there before, so it's worth to have a look into there # best would actually to use ${libdir}, since .pc files get installed into ${libdir}/pkgconfig, # unfortunately, ${libdir} expands to ${exec_prefix}/lib and ${exec_prefix} to ${prefix}... if test "x${prefix}" = xNONE ; then COIN_PKG_CONFIG_PATH="${ac_default_prefix}/lib64/pkgconfig:${ac_default_prefix}/lib/pkgconfig:${ac_default_prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" else COIN_PKG_CONFIG_PATH="${prefix}/lib64/pkgconfig:${prefix}/lib/pkgconfig:${prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" fi AC_ARG_WITH([coin-instdir], AC_HELP_STRING([--with-coin-instdir], [prefix of installation directory for precompiled COIN packages]), [if test -d "$withval"; then : ; else AC_MSG_ERROR([argument for --with-coin-instdir not a directory]) fi COIN_PKG_CONFIG_PATH="$withval/lib/pkgconfig:$withval/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" ],[]) AC_SUBST(COIN_PKG_CONFIG_PATH) # assemble additional pkg-config search paths for uninstalled projects if test x$coin_projectdir = xyes ; then # if we are in a project setup, then in a classic setup, we want to find uninstalled projects # their (relative) location is written to coin_subdirs.txt by the configure in the project base directory # unfortunately, if the user set prefix, then we do not know where the project base directory is located # but it is likely to be either .. (if we are a usual coin project) or ../.. (if we are a unusual coin project like ThirdParty or Data) COIN_PKG_CONFIG_PATH_UNINSTALLED= if test -f ../coin_subdirs.txt ; then for i in `cat ../coin_subdirs.txt` ; do if test -d ../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi if test -f ../../coin_subdirs.txt ; then for i in `cat ../../coin_subdirs.txt` ; do if test -d ../../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi AC_SUBST(COIN_PKG_CONFIG_PATH_UNINSTALLED) fi if test -n "$PKG_CONFIG" && test x$coin_cc_is_cl = xtrue; then AC_MSG_WARN([Using pkg-config together with MS or Intel Compiler on Windows is not support by example Makefiles. Consider using --disable-pkg-config.]) fi ]) ########################################################################### # COIN_PKG_CHECK_PROJECT_EXISTS # ########################################################################### # COIN_PKG_CHECK_PROJECT_EXISTS(PROJECT, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular project exists. Similar # to PKG_CHECK_MODULES(), but set only the variables $1_VERSION and $1_PKG_ERRORS variables # AC_DEFUN([AC_COIN_PKG_CHECK_PROJECT_EXISTS], [AC_REQUIRE([AC_COIN_HAS_PKGCONFIG]) if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "m4_tolower($1)"; then m4_toupper($1)[]_VERSION=`$PKG_CONFIG --modversion "m4_tolower($1)" 2>/dev/null` m4_ifval([$2], [$2], [:]) else m4_toupper($1)_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "m4_tolower($1)"` $3 fi else AC_MSG_ERROR("Cannot check for existance of module $1 without pkg-config") fi ]) ########################################################################### # COIN_PKG_CHECK_MODULE_EXISTS # ########################################################################### # COIN_PKG_CHECK_MODULES_EXISTS(MODULE, PACKAGES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of packages exists. # Similar to PKG_CHECK_MODULES(), but set only the variable $1_VERSIONS and $1_PKG_ERRORS # AC_DEFUN([AC_COIN_PKG_CHECK_MODULE_EXISTS], [AC_REQUIRE([AC_COIN_HAS_PKGCONFIG]) if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "$2"; then m4_toupper($1)[]_VERSIONS=`$PKG_CONFIG --modversion "$2" 2>/dev/null | tr '\n' ' '` $3 else m4_toupper($1)_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "$2"` $4 fi else AC_MSG_ERROR("Cannot check for existance of module $1 without pkg-config") fi ]) ########################################################################### # COIN_PKG_HAS_MODULE # ########################################################################### # COIN_PKG_HAS_MODULE(MODULE, PACKAGES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Checks whether pkg-config files for a given set of packages is available. # If so, sets MODULE_CFLAGS, MODULE_LIBS, and MODULES_DATA and executes ACTION-IF-FOUND. # If not, then ACTION-IF-NOT-FOUND is executed. # A reason for not finding a package is stored in MODULE_PKG_ERRORS # # -------------------------------------------------------------- AC_DEFUN([AC_COIN_PKG_HAS_MODULE], [AC_REQUIRE([AC_COIN_HAS_PKGCONFIG]) AC_COIN_PKG_CHECK_MODULE_EXISTS([$1],[$2], [ cflags=`$PKG_CONFIG --cflags "$2" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command [cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'`] fi m4_toupper($1)[]_CFLAGS="$cflags" m4_toupper($1)[]_LIBS=`$PKG_CONFIG --libs "$2" 2>/dev/null` m4_toupper($1)[]_DATA=`$PKG_CONFIG --variable=datadir "$2" 2>/dev/null` $3 ], [ $4 ]) ])# PKG_CHECK_MODULES ########################################################################### # COIN_MAIN_PACKAGEDIR # ########################################################################### # This macro substitutes COIN_MAIN_SUBDIR. # If $2/$1 or $1 is in COIN_SKIP_PROJECTS, do nothing. # If --with-$1-lib, --with-$1-incdir, or --with-$1-datadir is given, then assume that the package is installed. # Otherwise, if the directory $2/$1 and the file $2/$1/$3 exist, check whether $2/$1/configure exists. # If so, include this directory into the list of directories where configure and make recourse into. # tolower(coin_has_$1) is set to "no" if the project source is not available or will not be compiled. # Otherwise, it will be set to "yes". AC_DEFUN([AC_COIN_MAIN_PACKAGEDIR],[ AC_MSG_CHECKING([whether source of project $1 is available and should be compiled]) m4_tolower(coin_has_$1)=notGiven coin_reason= # check if user wants to skip project in any case AC_ARG_VAR([COIN_SKIP_PROJECTS],[Set to the subdirectories of projects that should be skipped in the configuration]) if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "$1"; then m4_tolower(coin_has_$1)="no" coin_reason="$1 has been specified in COIN_SKIP_PROJECTS" fi m4_ifval($2,[ if test $dir = "$2/$1"; then m4_tolower(coin_has_$1)="no" coin_reason="$2/$1 has been specified in COIN_SKIP_PROJECTS" fi]) done fi if test "$m4_tolower(coin_has_$1)" != no; then AC_ARG_WITH([m4_tolower($1)],, [if test "$withval" = no ; then m4_tolower(coin_has_$1)="no" coin_reason="--without-m4_tolower($1) has been specified" fi ]) fi if test "$m4_tolower(coin_has_$1)" != no; then AC_ARG_WITH([m4_tolower($1)-lib], AC_HELP_STRING([--with-m4_tolower($1)-lib], [linker flags for using project $1]), [if test "$withval" = no ; then m4_tolower(coin_has_$1)="no" coin_reason="--without-m4_tolower($1)-lib has been specified" else m4_tolower(coin_has_$1)="no" coin_reason="--with-m4_tolower($1)-lib has been specified" fi], []) fi if test "$m4_tolower(coin_has_$1)" != no; then AC_ARG_WITH([m4_tolower($1)-incdir], AC_HELP_STRING([--with-m4_tolower($1)-incdir], [directory with header files for using project $1]), [if test "$withval" = no ; then m4_tolower(coin_has_$1)="no" coin_reason="--without-m4_tolower($1)-incdir has been specified" else m4_tolower(coin_has_$1)="no" coin_reason="--with-m4_tolower($1)-incdir has been specified" fi], []) fi if test "$m4_tolower(coin_has_$1)" != no; then AC_ARG_WITH([m4_tolower($1)-datadir], AC_HELP_STRING([--with-m4_tolower($1)-datadir], [directory with data files for using project $1]), [if test "$withval" = no ; then m4_tolower(coin_has_$1)="no" coin_reason="--without-m4_tolower($1)-datadir has been specified" else m4_tolower(coin_has_$1)="no" coin_reason="--with-m4_tolower($1)-datadir has been specified" fi], []) fi m4_if(m4_tolower($1), blas, [ if test $m4_tolower(coin_has_$1) != no; then #--with-blas can overwrite --with-blas-lib, and can be set to BUILD to enforce building blas AC_ARG_WITH([blas], AC_HELP_STRING([--with-blas], [specify BLAS library (or BUILD to enforce use of ThirdParty/Blas)]), [if test x"$withval" = "xno" ; then coin_has_blas="no" coin_reason="--without-blas has been specified" elif test x"$withval" != "xBUILD" ; then coin_has_blas="no" coin_reason="--with-blas has been specified" fi], []) fi ]) m4_if(m4_tolower($1), lapack, [ if test $m4_tolower(coin_has_$1) != no; then #--with-lapack can overwrite --with-lapack-lib, and can be set to BUILD to enforce building lapack AC_ARG_WITH([lapack], AC_HELP_STRING([--with-lapack], [specify LAPACK library (or BUILD to enforce use of ThirdParty/Lapack)]), [if test x"$withval" = "xno" ; then coin_has_lapack="no" coin_reason="--without-lapack has been specified" elif test x"$withval" != "xBUILD" ; then coin_has_lapack="no" coin_reason="--with-lapack has been specified" fi], []) fi ]) # check if project is available in present directory if test "$m4_tolower(coin_has_$1)" = notGiven; then m4_tolower(coin_has_$1)=no if test -d $srcdir/m4_ifval($2,[$2/],)$1; then coin_reason="source in m4_ifval($2,[$2/],)$1" # If a third argument is given, then we have to check if one one the files given in that third argument is present. # If none of the files in the third argument is available, then we consider the project directory as non-existing. # However, if no third argument is given, then this means that there should be no check, and existence of the directory is sufficient. m4_ifvaln([$3], [for i in $srcdir/m4_ifval($2,[$2/],)$1/$3; do if test -r $i; then m4_tolower(coin_has_$1)="yes" else m4_tolower(coin_has_$1)="no" coin_reason="source file $i not available" break fi done], [ m4_tolower(coin_has_$1)="yes" ]) fi fi if test -z "$coin_reason" ; then AC_MSG_RESULT([$m4_tolower(coin_has_$1)]) else AC_MSG_RESULT([$m4_tolower(coin_has_$1), $coin_reason]) fi if test "$m4_tolower(coin_has_$1)" = yes ; then if test -r $srcdir/m4_ifval($2,[$2/],)$1/configure; then coin_subdirs="$coin_subdirs m4_ifval($2,[$2/],)$1" AC_CONFIG_SUBDIRS(m4_ifval($2,[$2/],)$1) fi fi ]) ########################################################################### # COIN_CHECK_PACKAGE # ########################################################################### # This macro checks for the existance of a COIN-OR package and provides compiler and linker flags to compile against this package. # A package can consists of one or more COIN-OR or other projects. # It defines the PACKAGE_CFLAGS, PACKAGE_LIBS, PACKAGE_DEPENDENCIES, and PACKAGE_DATA variables, referring to the compiler and linker # flags to use when linking against this module, the libraries the package depends on, and the directories where the module data resists. # The difference between PACKAGE_LIBS and PACKAGE_DEPENDENCIES is that PACKAGE_DEPENDENCIES does not contain arguments starting with '-', # so it can be used to setup the _DEPENDENCIES variable in a Makefile.am. # It also defines a COIN_HAS_PACKAGE preprocessor macro and makefile conditional. # Further, tolower(coin_has_$1) is set to "yes". # If a list of build targets using this projects is given in the third argument, # then the compiler and linker variables and .pc file setup variable corresponding to this build target # are extended with the values for this package. # That is, for each build target X, the variables X_CFLAGS, X_LIBS, X_DEPENDENCIES, X_PCLIBS, X_PCREQUIRES are setup, # whereas the last two specify the values to put into the "Libs:" and "Requires:" fields of the .pc file, resp. # # The first argument should be the name (PACKAGE) of the package (in correct lower # and upper case). # The second argument should be a (space separated) list of projects which this # package consists of. Optionally, required version numbers can be added. # The optional third argument should be a (space separated) list of build targets # which use this package, if available. # # It is also possible to specify a preinstalled version of this package # or to specify only the linker and compiler flags and data directory. # # If the user did not specify --with-$1-... flags and pkg-config is not available, # COIN_CHECK_PACKAGE_FALLBACK($1, $2, $3) is called. AC_DEFUN([AC_COIN_CHECK_PACKAGE], [AC_REQUIRE([AC_COIN_HAS_PKGCONFIG]) AC_MSG_CHECKING([for COIN-OR package $1]) m4_tolower(coin_has_$1)=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "$1"; then m4_tolower(coin_has_$1)=skipping fi done fi if test "$m4_tolower(coin_has_$1)" != skipping; then AC_ARG_WITH([m4_tolower($1)],, [if test "$withval" = no ; then m4_tolower(coin_has_$1)=skipping fi ]) fi m4_toupper($1_LIBS)= m4_toupper($1_CFLAGS)= m4_toupper($1_DATA)= m4_toupper($1_DEPENDENCIES)= m4_toupper($1_PCLIBS)= m4_toupper($1_PCREQUIRES)= AC_SUBST(m4_toupper($1_LIBS)) AC_SUBST(m4_toupper($1_CFLAGS)) AC_SUBST(m4_toupper($1_DATA)) AC_SUBST(m4_toupper($1_DEPENDENCIES)) AC_SUBST(m4_toupper($1_LIBS_INSTALLED)) AC_SUBST(m4_toupper($1_CFLAGS_INSTALLED)) AC_SUBST(m4_toupper($1_DATA_INSTALLED)) coin_foreach_w([myvar], [$3], [ AC_SUBST(m4_toupper(myvar)_CFLAGS) AC_SUBST(m4_toupper(myvar)_LIBS) AC_SUBST(m4_toupper(myvar)_PCLIBS) AC_SUBST(m4_toupper(myvar)_PCREQUIRES) AC_SUBST(m4_toupper(myvar)_DEPENDENCIES) AC_SUBST(m4_toupper(myvar)_CFLAGS_INSTALLED) AC_SUBST(m4_toupper(myvar)_LIBS_INSTALLED) ]) #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $m4_tolower(coin_has_$1) != skipping; then AC_ARG_WITH([m4_tolower($1)-lib], AC_HELP_STRING([--with-m4_tolower($1)-lib], [linker flags for using package $1]), [if test "$withval" = no ; then m4_tolower(coin_has_$1)=skipping else m4_tolower(coin_has_$1)=yes m4_toupper($1_LIBS)="$withval" m4_toupper($1_PCLIBS)="$withval" coin_foreach_w([myvar], [$3], [ m4_toupper(myvar)_PCLIBS="$withval $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS="$withval $m4_toupper(myvar)_LIBS" ]) # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then m4_toupper($1_LIBS_INSTALLED)="$withval" coin_foreach_w([myvar], [$3], [m4_toupper(myvar)_LIBS_INSTALLED="$withval $m4_toupper(myvar)_LIBS_INSTALLED"]) fi fi ], []) fi if test $m4_tolower(coin_has_$1) != skipping; then AC_ARG_WITH([m4_tolower($1)-incdir], AC_HELP_STRING([--with-m4_tolower($1)-incdir], [directory with header files for using package $1]), [if test "$withval" = no ; then m4_tolower(coin_has_$1)=skipping else m4_tolower(coin_has_$1)=yes m4_toupper($1_CFLAGS)="-I`${CYGPATH_W} $withval`" coin_foreach_w([myvar], [$3], [m4_toupper(myvar)_CFLAGS="-I`${CYGPATH_W} $withval` $m4_toupper(myvar)_CFLAGS"]) # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then m4_toupper($1_CFLAGS_INSTALLED)="$m4_toupper($1_CFLAGS)" coin_foreach_w([myvar], [$3], [m4_toupper(myvar)_CFLAGS_INSTALLED="$m4_toupper($1_CFLAGS) $m4_toupper(myvar)_CFLAGS_INSTALLED"]) fi fi ], []) fi if test $m4_tolower(coin_has_$1) != skipping; then AC_ARG_WITH([m4_tolower($1)-datadir], AC_HELP_STRING([--with-m4_tolower($1)-datadir], [directory with data files for using package $1]), [if test "$withval" = no ; then m4_tolower(coin_has_$1)=skipping else m4_tolower(coin_has_$1)=yes m4_toupper($1_DATA)="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then m4_toupper($1_DATA_INSTALLED)="$withval" fi fi ], []) fi if test $m4_tolower(coin_has_$1) = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic AC_COIN_PKG_HAS_MODULE([$1],[$2], [ m4_tolower(coin_has_$1)=yes AC_MSG_RESULT([yes: $m4_toupper($1)_VERSIONS]) # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then m4_toupper($1_LIBS)=`echo " $m4_toupper($1_LIBS) " | [sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g']` fi m4_toupper($1_PCREQUIRES)="$2" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in $3 coin_foreach_w([myvar], [$3], [ m4_toupper(myvar)_PCREQUIRES="$2 $m4_toupper(myvar)_PCREQUIRES" m4_toupper(myvar)_CFLAGS="$m4_toupper($1)_CFLAGS $m4_toupper(myvar)_CFLAGS" m4_toupper(myvar)_LIBS="$m4_toupper($1)_LIBS $m4_toupper(myvar)_LIBS" ]) ], [ m4_tolower(coin_has_$1)=notGiven AC_MSG_RESULT([not given: $m4_toupper($1)_PKG_ERRORS]) ]) # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else AC_MSG_RESULT([skipped check via pkg-config, redirect to fallback]) AC_COIN_CHECK_PACKAGE_FALLBACK([$1], [$2], [$3]) fi else AC_MSG_RESULT([$m4_tolower(coin_has_$1)]) fi if test $m4_tolower(coin_has_$1) != skipping && test $m4_tolower(coin_has_$1) != notGiven ; then AC_DEFINE(m4_toupper(COIN_HAS_$1),[1],[Define to 1 if the $1 package is available]) AC_ARG_ENABLE([interpackage-dependencies], AC_HELP_STRING([--disable-interpackage-dependencies], [disables deduction of Makefile dependencies from package linker flags]), [], [enable_interpackage_dependencies=yes]) if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) m4_toupper($1)_DEPENDENCIES=`echo " $m4_toupper($1)_LIBS" | [sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g']` coin_foreach_w([myvar], [$3], [ m4_toupper(myvar)_DEPENDENCIES=`echo " $m4_toupper(myvar)_LIBS " | [sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g']` ]) fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$m4_toupper($1)_CFLAGS" ; then AC_MSG_NOTICE([$1 CFLAGS are $m4_toupper($1)_CFLAGS]) fi if test -n "$m4_toupper($1)_LIBS" ; then AC_MSG_NOTICE([$1 LIBS are $m4_toupper($1)_LIBS]) fi if test -n "$m4_toupper($1)_DEPENDENCIES" ; then AC_MSG_NOTICE([$1 DEPENDENCIES are $m4_toupper($1)_DEPENDENCIES]) fi if test -n "$m4_toupper($1)_DATA" ; then AC_MSG_NOTICE([$1 DATA is $m4_toupper($1)_DATA]) fi if test -n "$m4_toupper($1)_PCLIBS" ; then AC_MSG_NOTICE([$1 PCLIBS are $m4_toupper($1)_PCLIBS]) fi if test -n "$m4_toupper($1)_PCREQUIRES" ; then AC_MSG_NOTICE([$1 PCREQUIRES are $m4_toupper($1)_PCREQUIRES]) fi coin_foreach_w([myvar], [$3], [ AC_MSG_NOTICE([myvar CFLAGS are $m4_toupper(myvar)_CFLAGS]) AC_MSG_NOTICE([myvar LIBS are $m4_toupper(myvar)_LIBS]) AC_MSG_NOTICE([myvar DEPENDENCIES are $m4_toupper(myvar)_DEPENDENCIES]) ]) fi fi # Define the Makefile conditional AM_CONDITIONAL(m4_toupper(COIN_HAS_$1), [test $m4_tolower(coin_has_$1) != notGiven && test $m4_tolower(coin_has_$1) != skipping]) ]) # AC_COIN_CHECK_PACKAGE ########################################################################### # COIN_CHECK_PACKAGE_FALLBACK # ########################################################################### # This macro is used by COIN_CHECK_PACKAGE, if it fails to find a package # because pkg-config was disabled or is not available. # # For each project xxx specified in $2, it searches for a xxx-uninstalled.pc # file in the directories specified in $COIN_PKG_CONFIG_PATH_UNINSTALLED. The # latter variable is setup by COIN_HAS_PKGCONFIG and consists of the content # of the coin_subdirs.txt file which has been created by configure in the # base directory. The content of xxx-uninstalled.pc is parsed in order # to defines the variables PACKAGE_CFLAGS, PACKAGE_LIBS, and PACKAGE_DATA, # referring to the compiler and linker flags to use when linking against this # package and the directory where the package data resists. Further, for each # build target X specified in the third argument, the variables X_CFLAGS and # X_LIBS are extended with the compiler and linker flags of this package and # the variables X_PCLIBS and X_PCREQUIRES are extended by the list of linker # flags and dependent projects as needed to setup a .pc file. The macros # checks also dependencies of $2. Note that the PACKAGE_DATA variable is # set to the content of datadir of the first .pc file that is parsed. # Finally, for each X in the third argument, also variables # X_CFLAGS_INSTALLED and X_LIBS_INSTALLED are setup. They contain the compiler # and linker flags for X when all projects have been installed. Their content # is assembled from the .pc files that correspond to installed projects. I.e., # whenever a file proj-uninstalled.pc is parsed, then also a corresponding # proj.pc file is parsed for compiler and linker flags, if available in the # same directory. # Similar, a variable PACKAGE_DATA_INSTALLED is setup to the content of datadir # of the first .pc file that is parsed. # # If .pc files for all projects in $2 and their dependencies is found, # tolower(coin_has_$1) is set to "yes". Otherwise, if some dependency # is not found, tolower(coin_has_$1) is set to "notGiven". Further, a # COIN_HAS_PACKAGE preprocessor macro and a makefile conditional are defined. # # The first argument should be the name (PACKAGE) of the package (in correct # lower and upper case). The second argument should be the base names of the # projects .pc file which define this package. The optional third argument # should be a (space separated) list of build targets which use this package, # if available. # # $1 is not checked for $COIN_SKIP_PROJECTS, since we only look into # $COIN_PKG_CONFIG_PATH_UNINSTALLED. When the content of this variable was # setup in the base directory, $COIN_SKIP_PROJECTS has already been considered. AC_DEFUN([AC_COIN_CHECK_PACKAGE_FALLBACK], [AC_REQUIRE([AC_COIN_HAS_PKGCONFIG]) AC_MSG_CHECKING([for COIN-OR package $1 (fallback)]) m4_tolower(coin_has_$1)=notGiven m4_toupper($1_LIBS)= m4_toupper($1_LIBS_INSTALLED)= m4_toupper($1_CFLAGS)= m4_toupper($1_CFLAGS_INSTALLED)= m4_toupper($1_DATA)= m4_toupper($1_DATA_INSTALLED)= m4_toupper($1_PCLIBS)= m4_toupper($1_PCREQUIRES)= # initial list of dependencies is "$2", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="m4_bpatsubsts([$2], [?!?=[ ]*[^ ]+])" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else AC_MSG_WARN([Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples.]) pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=[`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'`] # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=[`echo $projtoprocess | sed -e "s/$proj/$projrequires/"`] # read DATA from $pcfile, if _DATA is still empty if test "x$m4_toupper($1_DATA)" = x ; then projdatadir= [pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile`] eval `sh -c "$pcfilemod"` m4_toupper($1_DATA)="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else AC_MSG_RESULT([no, dependency $proj not available]) allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$m4_toupper($1_DATA_INSTALLED)" = x ; then projdatadir= [pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile`] eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi m4_toupper($1_DATA_INSTALLED)="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^[ ]*//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : [pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile`] # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=[`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'`] fi m4_toupper($1_CFLAGS)="$projcflags $m4_toupper($1_CFLAGS)" # set LIBS variable m4_toupper($1_LIBS)="$projlibs $m4_toupper($1_LIBS)" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : [pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile`] # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=[`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'`] fi m4_toupper($1_CFLAGS_INSTALLED)="$projcflags $m4_toupper($1_CFLAGS_INSTALLED)" # set LIBS variable m4_toupper($1_LIBS_INSTALLED)="$projlibs $m4_toupper($1_LIBS_INSTALLED)" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up m4_tolower(coin_has_$1)=yes AC_MSG_RESULT([yes]) AC_DEFINE(m4_toupper(COIN_HAS_$1),[1],[Define to 1 if the $1 package is available]) # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then m4_toupper($1_LIBS)=`echo " $m4_toupper($1_LIBS) " | [sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g']` m4_toupper($1_LIBS_INSTALLED)=`echo " $m4_toupper($1_LIBS_INSTALLED)" | [sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g']` fi m4_toupper($1_PCREQUIRES)="$2" coin_foreach_w([myvar], [$3], [ m4_toupper(myvar)_PCREQUIRES="$2 $m4_toupper(myvar)_PCREQUIRES" m4_toupper(myvar)_CFLAGS="$m4_toupper($1)_CFLAGS $m4_toupper(myvar)_CFLAGS" m4_toupper(myvar)_LIBS="$m4_toupper($1)_LIBS $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_CFLAGS_INSTALLED="$m4_toupper($1)_CFLAGS_INSTALLED $m4_toupper(myvar)_CFLAGS_INSTALLED" m4_toupper(myvar)_LIBS_INSTALLED="$m4_toupper($1)_LIBS_INSTALLED $m4_toupper(myvar)_LIBS_INSTALLED" ]) fi AM_CONDITIONAL(m4_toupper(COIN_HAS_$1), [test $m4_tolower(coin_has_$1) != notGiven && test $m4_tolower(coin_has_$1) != skipping]) ]) # AC_COIN_CHECK_PACKAGE_FALLBACK ########################################################################### # COIN_CHECK_PACKAGE_BLAS # ########################################################################### # This macro checks for a library containing the BLAS library. It # 1. checks the --with-blas argument # 2. if --with-blas=BUILD has been specified goes to point 5 # 3. if --with-blas has been specified to a working library, sets BLAS_LIBS # to its value # 4. tries standard libraries # 5. calls COIN_CHECK_PACKAGE(Blas, [coinblas], [$1]) to check for # ThirdParty/Blas # The makefile conditional and preprocessor macro COIN_HAS_BLAS is defined. # BLAS_LIBS is set to the flags required to link with a Blas library. # For each build target X in $1, X_LIBS is extended with $BLAS_LIBS. # In case 3 and 4, the flags to link to Blas are added to X_PCLIBS too. # In case 5, Blas is added to X_PCREQUIRES. AC_DEFUN([AC_COIN_CHECK_PACKAGE_BLAS], [ AC_ARG_WITH([blas], AC_HELP_STRING([--with-blas], [specify BLAS library (or BUILD to enforce use of ThirdParty/Blas)]), [use_blas="$withval"], [use_blas=]) # if user specified --with-blas-lib, then we should give COIN_CHECK_PACKAGE # preference AC_ARG_WITH([blas-lib],,[use_blas=BUILD]) # Check if user supplied option makes sense if test x"$use_blas" != x; then if test "$use_blas" = "BUILD"; then # we come to this later : elif test "$use_blas" != "no"; then coin_save_LIBS="$LIBS" LIBS="$use_blas $LIBS" if test "$F77" != unavailable ; then coin_need_flibs=no AC_MSG_CHECKING([whether user supplied BLASLIB=\"$use_blas\" works]) AC_COIN_TRY_FLINK([daxpy], [if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi AC_MSG_RESULT([yes: $use_blas])], [AC_MSG_RESULT([no]) AC_MSG_ERROR([user supplied BLAS library \"$use_blas\" does not work])]) use_blas="$use_blas $FLIBS" else AC_MSG_NOTICE([checking whether user supplied BLASLIB=\"$use_blas\" works with C linkage]) AC_LANG_PUSH(C) AC_CHECK_FUNC([daxpy],[],[AC_MSG_ERROR([user supplied BLAS library \"$use_blas\" does not work])]) AC_LANG_POP(C) fi LIBS="$coin_save_LIBS" fi else # Try to autodetect the library for blas based on build system #AC_MSG_CHECKING([default locations for BLAS]) case $build in *-sgi-*) AC_MSG_CHECKING([whether -lcomplib.sgimath has BLAS]) coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lcomplib.sgimath $LIBS" AC_COIN_TRY_FLINK([daxpy], [use_blas="-lcomplib.sgimath" if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi AC_MSG_RESULT([yes: $use_blas]) ], [AC_MSG_RESULT([no])]) LIBS="$coin_save_LIBS" ;; # Ideally, we'd use -library=sunperf, but it's an imperfect world. Studio # cc doesn't recognise -library, it wants -xlic_lib. Studio 12 CC doesn't # recognise -xlic_lib. Libtool doesn't like -xlic_lib anyway. Sun claims # that CC and cc will understand -library in Studio 13. The main extra # function of -xlic_lib and -library is to arrange for the Fortran run-time # libraries to be linked for C++ and C. We can arrange that explicitly. *-*-solaris*) AC_MSG_CHECKING([for BLAS in libsunperf]) coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lsunperf $FLIBS $LIBS" AC_COIN_TRY_FLINK([daxpy], [use_blas='-lsunperf' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi AC_MSG_RESULT([yes: $use_blas]) ], [AC_MSG_RESULT([no])]) LIBS="$coin_save_LIBS" ;; *-cygwin* | *-mingw*) case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_save_LIBS="$LIBS" LIBS="mkl_intel_c.lib mkl_sequential.lib mkl_core.lib $LIBS" if test "$F77" != unavailable ; then AC_MSG_CHECKING([for BLAS in MKL (32bit)]) AC_COIN_TRY_FLINK([daxpy], [use_blas='mkl_intel_c.lib mkl_sequential.lib mkl_core.lib' AC_MSG_RESULT([yes: $use_blas]) ], [AC_MSG_RESULT([no])]) else AC_MSG_NOTICE([for BLAS in MKL (32bit) using C linkage]) AC_LANG_PUSH(C) AC_CHECK_FUNC([daxpy],[use_blas='mkl_intel_c.lib mkl_sequential.lib mkl_core.lib']) AC_LANG_POP(C) fi LIBS="$coin_save_LIBS" if test "x$use_blas" = x ; then LIBS="mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib $LIBS" if test "$F77" != unavailable ; then AC_MSG_CHECKING([for BLAS in MKL (64bit)]) AC_COIN_TRY_FLINK([daxpy], [use_blas='mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib' AC_MSG_RESULT([yes: $use_blas]) ], [AC_MSG_RESULT([no])]) else AC_MSG_NOTICE([for BLAS in MKL (64bit) using C linkage]) # unset cached outcome of test with 32bit MKL unset ac_cv_func_daxpy AC_LANG_PUSH(C) AC_CHECK_FUNC([daxpy],[use_blas='mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib']) AC_LANG_POP(C) fi LIBS="$coin_save_LIBS" fi ;; esac ;; *-darwin*) AC_MSG_CHECKING([for BLAS in Veclib]) coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-framework Accelerate $LIBS" AC_COIN_TRY_FLINK([daxpy], [use_blas='-framework Accelerate' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi AC_MSG_RESULT([yes: $use_blas]) ], [AC_MSG_RESULT([no])]) LIBS="$coin_save_LIBS" ;; esac if test -z "$use_blas" ; then AC_MSG_CHECKING([whether -lblas has BLAS]) coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lblas $LIBS" AC_COIN_TRY_FLINK([daxpy], [use_blas='-lblas' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi AC_MSG_RESULT([yes: $use_blas]) ], [AC_MSG_RESULT([no])]) LIBS="$coin_save_LIBS" fi # If we have no other ideas, consider building BLAS. if test -z "$use_blas" ; then use_blas=BUILD fi fi if test "x$use_blas" = xBUILD ; then AC_COIN_CHECK_PACKAGE(Blas, [coinblas], [$1]) elif test "x$use_blas" != x && test "$use_blas" != no; then coin_has_blas=yes AM_CONDITIONAL([COIN_HAS_BLAS],[test 0 = 0]) AC_DEFINE([COIN_HAS_BLAS],[1], [If defined, the BLAS Library is available.]) BLAS_LIBS="$use_blas" BLAS_CFLAGS= BLAS_DATA= AC_SUBST(BLAS_LIBS) AC_SUBST(BLAS_CFLAGS) AC_SUBST(BLAS_DATA) coin_foreach_w([myvar], [$1], [ m4_toupper(myvar)_PCLIBS="$BLAS_LIBS $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS="$BLAS_LIBS $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_LIBS_INSTALLED="$BLAS_LIBS $m4_toupper(myvar)_LIBS_INSTALLED" ]) else coin_has_blas=no AM_CONDITIONAL([COIN_HAS_BLAS],[test 0 = 1]) fi coin_foreach_w([myvar], [$1], [ AC_SUBST(m4_toupper(myvar)_PCLIBS) AC_SUBST(m4_toupper(myvar)_LIBS) AC_SUBST(m4_toupper(myvar)_LIBS_INSTALLED) ]) ]) # AC_COIN_CHECK_PACKAGE_BLAS ########################################################################### # COIN_CHECK_PACKAGE_LAPACK # ########################################################################### # This macro checks for a library containing the LAPACK library. It # 1. checks the --with-lapack argument # 2. if --with-lapack=BUILD has been specified goes to point 5 # 3. if --with-lapack has been specified to a working library, sets # LAPACK_LIBS to its value # 4. tries standard libraries # 5. calls COIN_CHECK_PACKAGE(Lapack, [coinlapack], [$1]) to check for # ThirdParty/Lapack # The makefile conditional and preprocessor macro COIN_HAS_LAPACK is defined. # LAPACK_LIBS is set to the flags required to link with a Lapack library. # For each build target X in $1, X_LIBS is extended with $LAPACK_LIBS. # In case 3 and 4, the flags to link to Lapack are added to X_PCLIBS too. # In case 5, Lapack is added to X_PCREQUIRES. # # TODO: Lapack usually depends on Blas, so if we check for a system lapack library, # shouldn't we include AC_COIN_CHECK_PACKAGE_BLAS first? # However, if we look for coinlapack via AC_COIN_CHECK_PACKAGE(Lapack, [coinlapack], [$1]), # then we will get Blas as dependency of coinlapack. AC_DEFUN([AC_COIN_CHECK_PACKAGE_LAPACK], [ AC_ARG_WITH([lapack], AC_HELP_STRING([--with-lapack], [specify LAPACK library (or BUILD to enforce use of ThirdParty/Lapack)]), [use_lapack=$withval], [use_lapack=]) #if user specified --with-lapack-lib, then we should give COIN_HAS_PACKAGE preference AC_ARG_WITH([lapack-lib],,[use_lapack=BUILD]) # Check if user supplied option makes sense if test x"$use_lapack" != x; then if test "$use_lapack" = "BUILD"; then # we come to this later : elif test "$use_lapack" != no; then use_lapack="$use_lapack $BLAS_LIBS" coin_save_LIBS="$LIBS" LIBS="$use_lapack $LIBS" if test "$F77" != unavailable; then AC_MSG_CHECKING([whether user supplied LAPACKLIB=\"$use_lapack\" works]) coin_need_flibs=no AC_COIN_TRY_FLINK([dsyev], [if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi AC_MSG_RESULT([yes: $use_lapack]) ], [AC_MSG_RESULT([no]) AC_MSG_ERROR([user supplied LAPACK library \"$use_lapack\" does not work])]) else AC_MSG_NOTICE([whether user supplied LAPACKLIB=\"$use_lapack\" works with C linkage]) AC_LANG_PUSH(C) AC_CHECK_FUNC([dsyev],[],[AC_MSG_ERROR([user supplied LAPACK library \"$use_lapack\" does not work])]) AC_LANG_POP(C) fi LIBS="$coin_save_LIBS" fi else if test x$coin_has_blas = xyes; then # First try to see if LAPACK is already available with BLAS library coin_save_LIBS="$LIBS" LIBS="$BLAS_LIBS $LIBS" if test "$F77" != unavailable; then coin_need_flibs=no AC_MSG_CHECKING([whether LAPACK is already available with BLAS library]) AC_COIN_TRY_FLINK([dsyev], [use_lapack="$BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi AC_MSG_RESULT([yes: $use_lapack]) ], [AC_MSG_RESULT([no])]) else AC_MSG_NOTICE([checking whether LAPACK is already available with BLAS library]) AC_LANG_PUSH(C) AC_CHECK_FUNC([dsyev],[use_lapack="$BLAS_LIBS"]) AC_LANG_POP(C) fi LIBS="$coin_save_LIBS" fi if test -z "$use_lapack"; then # Try to autodetect the library for lapack based on build system case $build in # TODO: Is this check actually needed here, since -lcomplib.sigmath should have been recognized as Blas library, # and above it is checked whether the Blas library already contains Lapack *-sgi-*) AC_MSG_CHECKING([whether -lcomplib.sgimath has LAPACK]) coin_save_LIBS="$LIBS" coin_need_flibs=no LIBS="-lcomplib.sgimath $BLAS_LIBS $LIBS" AC_COIN_TRY_FLINK([dsyev], [use_lapack="-lcomplib.sgimath $BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi AC_MSG_RESULT([yes: $use_lapack]) ], [AC_MSG_RESULT([no])]) LIBS="$coin_save_LIBS" ;; # See comments in COIN_CHECK_PACKAGE_BLAS. # TODO: Is this check actually needed here, since -lsunperf should have been recognized as Blas library, # and above it is checked whether the Blas library already contains Lapack *-*-solaris*) AC_MSG_CHECKING([for LAPACK in libsunperf]) coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lsunperf $BLAS_LIBS $FLIBS $LIBS" AC_COIN_TRY_FLINK([dsyev], [use_lapack='-lsunperf $BLAS_LIBS' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi AC_MSG_RESULT([yes: $use_lapack]) ], [AC_MSG_RESULT([no])]) LIBS="$coin_save_LIBS" ;; # On cygwin, do this check only if doscompile is disabled. The prebuilt library # will want to link with cygwin, hence won't run standalone in DOS. esac fi if test -z "$use_lapack" ; then AC_MSG_CHECKING([whether -llapack has LAPACK]) coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-llapack $BLAS_LIBS $LIBS" AC_COIN_TRY_FLINK([dsyev], [use_lapack='-llapack' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi AC_MSG_RESULT([yes: $use_lapack]) ], [AC_MSG_RESULT([no])]) LIBS="$coin_save_LIBS" fi # If we have no other ideas, consider building LAPACK. if test -z "$use_lapack" ; then use_lapack=BUILD fi fi if test "x$use_lapack" = xBUILD ; then AC_COIN_CHECK_PACKAGE(Lapack, [coinlapack], [$1]) elif test "x$use_lapack" != x && test "$use_lapack" != no; then coin_has_lapack=yes AM_CONDITIONAL([COIN_HAS_LAPACK],[test 0 = 0]) AC_DEFINE([COIN_HAS_LAPACK],[1], [If defined, the LAPACK Library is available.]) LAPACK_LIBS="$use_lapack" LAPACK_CFLAGS= LAPACK_DATA= AC_SUBST(LAPACK_LIBS) AC_SUBST(LAPACK_CFLAGS) AC_SUBST(LAPACK_DATA) coin_foreach_w([myvar], [$1], [ m4_toupper(myvar)_PCLIBS="$LAPACK_LIBS $m4_toupper(myvar)_PCLIBS" m4_toupper(myvar)_LIBS="$LAPACK_LIBS $m4_toupper(myvar)_LIBS" m4_toupper(myvar)_LIBS_INSTALLED="$LAPACK_LIBS $m4_toupper(myvar)_LIBS_INSTALLED" ]) else coin_has_lapack=no AM_CONDITIONAL([COIN_HAS_LAPACK],[test 0 = 1]) fi coin_foreach_w([myvar], [$1], [ AC_SUBST(m4_toupper(myvar)_PCLIBS) AC_SUBST(m4_toupper(myvar)_LIBS) AC_SUBST(m4_toupper(myvar)_LIBS_INSTALLED) ]) ]) # AC_COIN_CHECK_PACKAGE_LAPACK DyLP-1.10.4/BuildTools/prepare_new_release0000755000175200017520000006217212214547251017103 0ustar coincoin#!/bin/sh # Copyright (C) 2007 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # It is part of the BuildTools project in COIN-OR (www.coin-or.org) # # $Id: prepare_new_release 2947 2013-09-13 08:36:57Z stefan $ # # Author: Andreas Waechter IBM 2007-06-21 # Modified: Lou Hafer SFU 2008-01-20 # Accommodate simultaneous creation of releases with circular # dependencies. # Modified: Ted Ralphs Lehigh University 2009-07-10 # Set libtool version info automatically # Modified: Lou Hafer SFU 2010-06-02 # Adapt to new script architecture pioneered in *_new_stable; major # rewrite. # Modified: Lou Hafer SFU 2011-03-14 # Change handling of externals so the svn:externals is left pointing to # releases but Dependencies is left pointing to stable branches. # Modified: Stefan Vigerske HU 2011-07-16 # Do not attempt to configure/make/make test ThirdParty projects that # do not have a get-script, since this fails in most cases (which is # the expected behaviour). #set -x -v set -e # You can think of this script as having two sections: parameter parsing and # validation, followed by generation of the release candidate. See the help # message for a good description of the actions taken to generate the release # candidate. # Know thy self. If there are no '/' chars in the command name, we're running # in the currrent directory. Otherwise, strip the command name, leaving the # prefix. Coin-functions is expected to live in the same directory. if expr "$0" : '.*/.*' >/dev/null 2>&1 ; then cmdDir=`echo $0 | sed -e 's,\(.*\)/[^/]*,\1,'` else cmdDir='.' fi cmdDir=`cd $cmdDir ; pwd` if test -r $cmdDir/coin-functions ; then . $cmdDir/coin-functions else echo "Cannot find utility functions file coin-functions; exiting." fi # Note that plain sh does not accept negative exit values exitValue=0 # Specify the COIN URL base for convenience. coinURL="https://projects.coin-or.org/svn" # Begin parameter processing. printHelp=0 ignoreBuildToolsMismatch=no mismatchBTExternals= suppressCheckout=0 # stableURL will be the stable branch that is the parent for the release we # are building. We'll need to be able to distinguish ThirdParty and Data # builds, and BuildTools itself; they require special handling. If a project # is not BuildTools, ThirdParty, or Data, it's `normal'. # SV: I think also ThirdParty projects should be treated as 'normal', so I changed that. stableURL= isThirdParty=no isData=no isBuildTools=no isNormal=yes # cmdBTURL is required when stableURL specifies a ThirdParty or Data # project --- we'll need to assemble a temporary package while creating the # release candidate. cmdBTURL= # stableExternals specifies externals for which we are doing simultaneous # releases. We will use the stable branch of the external while preparing # and testing this release candidate, changing svn:externals to specify a # (nonexistent) release of the external at the last moment. stableExternals= # exciseExternals specifies externals that should be removed when creating the # new release. exciseExternals= # We need at least one parameter. if test "$#" -eq 0; then printHelp=1 else # Process the parameters. A parameter without an opening `-' is assumed to be # the spec for the stable branch. while test $# -gt 0 && test $exitValue = 0 && test $printHelp = 0 ; do case "$1" in -h* | --h*) printHelp=1 ;; -i* | --i*) if expr "$1" : '.*-i.*=.*' 2>&1 >/dev/null ; then mismatchBTExternals=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift mismatchBTExternals=$1 fi if test "x$mismatchBTExternals" = "xall" ; then ignoreBuildToolsMismatch=all else ignoreBuildToolsMismatch=partial fi ;; -p* | --p*) suppressCheckout=1 ;; -s* | --s*) if expr "$1" : '.*-s.*=.*' 2>&1 >/dev/null ; then stableExternals=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift stableExternals=$1 fi ;; -x* | --x*) if expr "$1" : '.*-x.*=.*' 2>&1 >/dev/null ; then exciseExternals=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift exciseExternals=$1 fi ;; -b* | --b*) if expr "$1" : '.*-b.*=.*' 2>&1 >/dev/null ; then cmdBTURL=`echo $1 | sed -n -e 's/[^=]*=\(.*\)/\1/p'` else shift cmdBTURL=$1 fi if expr "$cmdBTURL" : '.*BuildTools.*' 2>&1 >/dev/null ; then case $cmdBTURL in http*) ;; *) cmdBTURL=${coinURL}/$cmdBTURL ;; esac else echo '' echo "URL $cmdBTURL does not point to BuildTools." echo '' printHelp=1 exitValue=3 fi ;; -*) echo "$0: unrecognised command line switch '"$1"'." printHelp=1 exitValue=1 ;; *) stableURL=$1 if expr "$stableURL" : '.*/stable/.*' 2>&1 >/dev/null ; then case $stableURL in http*) ;; BuildTools/ThirdParty/* ) stableURL=${coinURL}/$stableURL ;; ThirdParty/* ) stableURL=${coinURL}/BuildTools/$stableURL ;; CoinAll/* ) stableURL=${coinURL}/CoinBinary/$stableURL ;; *) stableURL=${coinURL}/$stableURL ;; esac else echo '' echo "URL $stableURL does not specify a stable release." echo '' printHelp=1 exitValue=2 fi ;; esac shift done # Consistency checks: Make sure that the stable URL exists. If we're building # a ThirdParty or Data release, we need a BuildTools URL. if test $printHelp = 0 && test $exitValue = 0 ; then if svn list $stableURL 2>&1 >/dev/null ; then : else echo "Stable URL $stableURL does not seem to exist." printHelp=1 exitValue=5 fi fi if test $printHelp = 0 && test $exitValue = 0 ; then case $stableURL in *ThirdParty/* ) isThirdParty=yes ;; *Data/* ) isData=yes ;; *BuildTools/* ) isBuildTools=yes isNormal=no ;; *) ;; esac if test $isThirdParty = yes || test $isData = yes ; then if test -z $cmdBTURL ; then echo "You must provide a BuildTools URL to build a ThirdParty or Data project." printHelp=1 exitValue=4 else if svn list $cmdBTURL 2>&1 >/dev/null ; then : else echo "BuildTools URL $cmdBTURL does not seem to exist." printHelp=1 exitValue=6 fi fi fi fi fi # if "$#" .eq 0 if test $printHelp = 1 ; then cat < [options] COIN standard practice is to generate periodic releases by taking a snapshot of the stable branch of the project. You can use this script to prepare a new release based on the specified stable branch. specifies the stable branch of your project to be used to create the new release. You can specify the entire URL, or you just enter what comes after "https://projects.coin-or.org/svn". A typical example is prepare_new_release Ipopt/stable/3.3 Options: -b URL for BuildTools; required to generate a release for a ThirdParty or Data project. -i Ignore BuildTools version mismatches for the listed externals (comma-separated list of project names, e.g., -i Osi,Cbc). '-i all' ignores all mismatches. -p Suppress checkout (useful for testing) -s Suppress conversion from stable to release for the listed externals (comma-separated list of project names). -x Remove the listed projects from the list of externals (comma-separated list of project names). This script will do the following: - Automatically determine the next release number (X.Y.0 if this is the first release for stable/X.Y, otherwise one greater than any existing release) - Check out a clean copy of the specified stable branch, without externals - Make sure that the svn:externals property points to releases, with the exception of projects in the list specified with -s. - Create a new package configure.ac file with the release version number specified in the AC_INIT macro. - Use the "get.*" scripts to download any ThirdParty code. - Execute run_autotools to update configure, Makefile.in, etc., to reflect the most recent release of BuildTools. - Run the configure script, compile the code, and run the unit test. - Replace stable externals for projects specified with -s with the appropriate (yet to be committed) release. If there is any error during these tasks the script will stop and you should examine the output. If the script completes without error, examine the output, particularly the output of the unit test ('make test') and the set of externals specified in the Dependencies file. This script does not make any changes to the repository. If you want to commit the new release, run the "commit_new_release" script, as described at the end of the output. EOF fi if test $exitValue != 0 || test $printHelp = 1 ; then exit $exitValue fi # End of parameter parsing. We have a stable URL to work with. Tell the # user what we've seen. stableURL=`echo $stableURL | sed -e 's|/$||'` stableProj=`extractProjFromURL $stableURL` majVer=`extractMajorFromURL $stableURL` minVer=`extractMinorFromURL $stableURL` stableVer=$majVer.$minVer echo "Stable URL..........: $stableURL" echo "Stable project......: $stableProj" echo "Stable branch.......: $stableVer" if test -n "$stableExternals" ; then echo "Stable externals....: $stableExternals." fi # Find out the most recent release (if any) for the stable branch, then # construct the revision number of the new release. If there are existing # releases, it's a matter of bumping the revision number and inserting the # new revision in the URL. Otherwise, we know the new revision is 0 and we # can simply tweak the stable URL. releaseURL=`bestRelease $stableURL $majVer $minVer | sed -e 's|/$||'` if test -n "$releaseURL" ; then curRel=`extractReleaseFromURL $releaseURL` existingURL=$releaseURL newRel=`expr $curRel + 1` else curRel=-1 releaseURL=`echo $stableURL | sed -e s/stable/releases/` existingURL="none" newRel=0 fi newVer=$majVer.$minVer.$newRel releaseURL=`replaceVersionInURL $releaseURL $majVer $minVer $newRel` echo "Top release URL.....: $existingURL" echo "New release URL.....: $releaseURL" # Relevant only if we're building ThirdParty or Data if test $isThirdParty = yes || test $isData = yes ; then echo "BuildTools URL......: $cmdBTURL" fi # We need a libtool version number only for normal projects if test $isNormal = yes ; then newLTCurrent=`calcLibtoolCurrent $stableURL $majVer $minVer` newLTRevision=$newRel newLTAge=`calcLibtoolAge $stableURL $majVer $minVer` # expr returns with status 1 if the result of the calculation is 0 # this leads to exiting this script, which is somewhat unexpected if test "$newLTAge" = 1 ; then newLTAge=0 else newLTAge=`expr $newLTAge - 1` fi newLTVer=${newLTCurrent}:${newLTRevision}:${newLTAge} echo "Libtool version.....: $newLTVer" fi # Now decide where to build and check out code. If the stable project name # contains a '/', strip it out to make the build and checkout directories. topProjName=`echo $stableProj | sed -e 's|.*/\([^/]*\)$|\1|'` topBuildDir="${topProjName}-${newVer}" if test $isThirdParty = yes; then coDir=$topBuildDir/Thirdparty/$stableProj elif test $isData = yes; then coDir=$topBuildDir/Data/$stableProj else coDir=$topBuildDir fi echo "Build directory.....: $topBuildDir" echo "Checkout directory..: $coDir" # Check out the stable branch that'll be the base of the new release. No # externals at this point. Creating a release of a ThirdParty or Data project # requires a bit of work, as we need to assemble a temporary package with a # BuildTools external. echo '' echo "===> Checking out stable release $stableVer without externals..." echo '' rm -rf $topBuildDir cmd="svn co --ignore-externals $stableURL $coDir" if test $suppressCheckout = 1 ; then echo "Pretending to do: $cmd" else rm -rf $topBuildDir echo $cmd eval $cmd fi if test $isThirdParty = yes || test $isData = yes; then echo '' echo '===> Checking out BuildTools (Data or ThirdParty) ...' echo '' cmd="svn co $cmdBTURL $topBuildDir/BuildTools" if test $suppressCheckout = 1 ; then echo "Pretending to do: $cmd" else echo $cmd eval $cmd fi fi startDir=`pwd` coDir=`cd $coDir; pwd` topBuildDir=`cd $topBuildDir; pwd` cd $coDir # Find configure.ac files for the package and project and update the version. # We have no externals or third-party code at this point, so there will be # two files for a normal project, one for a ThirdParty or Data project, and # none for BuildTools. echo '' echo "===> Checking for configure.ac files ..." if test -d $topProjName ; then bak_files=`find $topProjName -name 'configure.ac'` fi if test -e configure.ac ; then bak_files="$bak_files configure.ac" fi if test -n "$bak_files" ; then for i in $bak_files; do cp $i $i.bak done # Take the attitude that [] around parameters in AC_INIT is optional, # it's the commas that count. This does make for a surpassing ugly regular # expression. A comma in the version string will cause a spectacular failure. # In AC_COIN_PROJECTDIR_INIT, take the attitude that there is one parameter # with the PMs choosen project name which is preserved and we only add a # libtool version number afterwards. echo '' echo "===> Updating version numbers in configure.ac files ..." for i in $bak_files; do sed -e "s|AC_INIT\(.*\),\(\[*\)[^],]*\(\]*\),\(.*\)|AC_INIT\1,\2$newVer\3,\4|" $i > bla mv bla $i sed -e "s|AC_COIN_PROJECTDIR_INIT(\(.*\))|AC_COIN_PROJECTDIR_INIT\(\1,$newLTCurrent:$newLTRevision:$newLTAge\)|" $i > bla mv bla $i svn diff $i done else echo " ... none to process." fi # Find config_proj_default.h. If there's a definition for PROJ_VERSION, adjust it and # add config_proj_default.h.bak to the list of files to be restored. topProjNameUC=`echo $topProjName | tr '[a-z]' '[A-Z]'` if test -d $topProjName ; then configFileLoc=`find $topProjName -name .svn -prune -o -name 'config_*_default.h' -print` fi if test -n "$configFileLoc" ; then versionSym=${topProjNameUC}_VERSION echo '' echo "===> Updating $versionSym in $configFileLoc (if present)" echo '' mv $configFileLoc $configFileLoc.bak bak_files="$bak_files $configFileLoc" sed -e "s/# *define $versionSym .*\$/#define $versionSym \"$newVer\"/" \ -e "s/# *define ${versionSym}_MAJOR .*\$/#define ${versionSym}_MAJOR $majVer/" \ -e "s/# *define ${versionSym}_MINOR .*\$/#define ${versionSym}_MINOR $minVer/" \ -e "s/# *define ${versionSym}_RELEASE .*\$/#define ${versionSym}_RELEASE $newRel/" \ <$configFileLoc.bak >$configFileLoc svn diff $configFileLoc fi # The Dependencies file in a stable branch should contain only stable # and release references (trunk is flagged as an error below). The overall # algorithm is to convert svn:externals to use releases but leave Dependencies # with stables. In practice, this is accomplished by backing up Dependencies, # using Dependencies to assemble and set svn:externals, and finally restoring # Dependencies from the backup after all else is done. # Look for a file specifying externals. Preferably Dependencies, but check for # Externals just in case this is an unconverted project. srcDepFile= for file in Dependencies Externals ; do if test -r $file ; then srcDepFile=$file break fi done # Now generate the proper externals for the release. Each line in a # Dependencies file has the format . Normally, each # should be a stable branch. References to stable branches will be # converted to references to releases unless the reference is to a project # in the stableExternals list (in which case it'll be converted at the very # end). References to releases are not changed. References to trunk are an # error. Failure to find a release for an external not in the stableExternals # list is an error. Save the existing externals and srcDepFile, as we'll # probably change both. if test -n "$srcDepFile" ; then svn propget svn:externals . > .Externals.original bak_files="$bak_files $srcDepFile" cp $srcDepFile $srcDepFile.bak echo '' echo "===> Checking externals in $srcDepFile ..." echo '' # Because we're working directly from command output, the regular expression # must check for lines. ourBTURL=`svn propget svn:externals . | \ sed -n -e 's/^BuildTools *https:\([^ ]*\)$/https:\1/p'` if test -z "$ourBTURL" ; then ourBTURL=none fi echo "Our BuildTools...: $ourBTURL" rm -f Dependencies ext_name= ext_url= buildtoolsMismatch=0 for i in `cat $srcDepFile.bak`; do if test "$ext_name" = ""; then ext_name="$i" else ext_url=$i if expr "$ext_name" : '#.*' 2>&1 >/dev/null ; then echo " $ext_name $ext_url ==> skipped" ext_name= continue fi ext_urltype=`extractTypeFromURL $ext_url` ext_proj=`extractProjFromURL $ext_url` # See if this external should be dropped. if expr "$exciseExternals" : '.*'$ext_proj'.*' 2>&1 > /dev/null ; then echo " $ext_name $ext_url ==> excised" ext_name= continue fi # External must be a stable or a release. if test $ext_urltype != stable && test $ext_urltype != release ; then echo '' echo "===> The external URL $ext_url is not a stable branch or release. Exiting." echo '' exit 2 fi ext_isNormal=`isNormalURL $ext_url` # Convert stable branches to releases unless listed in stableExternals. # Existing releases are unchanged. if test $ext_urltype = stable ; then if expr "$stableExternals" : '.*'"$ext_proj"'.*' 2>&1 >/dev/null ; then echo " $ext_name $ext_url unchanged" ext_rel_url=$ext_url else ext_majVer=`extractMajorFromURL $ext_url` ext_minVer=`extractMinorFromURL $ext_url` ext_rel_url=`bestRelease $ext_url $ext_majVer $ext_minVer` if test -z "$ext_rel_url" ; then echo '' echo "===> No release for $ext_url. Exiting." echo '' exit 2 fi # Normal (not BuildTools/ThirdParty/Data) need a directory name, # and it may differ from the project name. Carefully preserve it. if test $ext_isNormal = yes ; then ext_tail=`extractTailFromExt $ext_url` ext_rel_url=${ext_rel_url}${ext_tail} fi echo " $ext_name $ext_url ==> $ext_rel_url" fi else ext_rel_url=$ext_url echo " $ext_name $ext_url ==> unchanged" fi # Get the BuildTools URL for the external and compare to the BuildTools URL # for the source, assuming we have one and the external has one. We only need # to do this for normal URLs, and we need to strip the tail. if test $ext_isNormal = yes && test $ext_proj != BuildTools && test $ourBTURL != none ; then ext_rel_url_notail=`echo $ext_rel_url | sed -e 's,/[^/]*$,,'` extBTURL=`svn propget svn:externals $ext_rel_url_notail` extBTURL=`echo $extBTURL | \ sed -n -e 's/^BuildTools *https:\([^ ]*\) *$/https:\1/p'` if test -n "$extBTURL" ; then testResult=`compareURLVersions "$ourBTURL" "$extBTURL"` if test $testResult = no ; then if test $ignoreBuildToolsMismatch = all || \ expr "$mismatchBTExternals" : '.*'$ext_proj'.*' 2>&1 >/dev/null ; then echo " WARNING: BuildTools mismatch: $ext_url_notail uses $extBTURL" else buildtoolsMismatch=1 echo " ERROR: BuildTools mismatch: $ext_url_notail uses $extBTURL" fi fi fi fi echo "$ext_name $ext_rel_url" >>Dependencies ext_name= echo '' fi done # If we have a BuildTools mismatch, exit. if test $buildtoolsMismatch = 1 ; then echo "Exiting due to BuildTools mismatches; use -i to ignore." exit 2 fi # Try to check out the externals. Try three times before failing. echo '' echo '===> Updating svn:externals property and checking out externals ...' echo '' svn propset svn:externals -F Dependencies . svn update || { echo "Retry 1 ... " ; svn update ; } || { echo "Retry 2 ... " ; svn update ; } || { echo "Checkout of externals failed. Aborting." ; exit 3 ; } if test -d ThirdParty ; then echo '' echo '===> Downloading ThirdParty code ...' echo '' ext_name= ext_url= for i in `svn propget svn:externals .` ; do if test -z "$ext_name" ; then ext_name="$i" else ext_url=$i if expr "$ext_name" : 'ThirdParty/.*' 2>&1 >/dev/null ; then cd $ext_name ext_proj=`extractProjFromURL $ext_url` getScript=get.$ext_proj if test -x "$getScript" ; then ./$getScript -y fi cd $coDir fi ext_name= fi done fi fi # Finally! Done processing externals. If this is a ThirdParty project, we # still have to run the get script, if there is one. isThirdPartyWithoutGet=no if test $isThirdParty = yes ; then if test -x get.$stableProj ; then echo '' echo '===> Downloading third party code ...' echo '' ./get.$stableProj -y else isThirdPartyWithoutGet=yes fi fi # Don't run run_autotools for BuildTools! if test $isBuildTools = no ; then echo '' echo '===> Running BuildTools/run_autotools ...' echo '' if test $isThirdParty = yes || test $isData = yes ; then cd ../.. ./BuildTools/run_autotools cd "$coDir" elif test $isNormal = yes ; then ./BuildTools/run_autotools fi fi # Let's see if it works. We only run tests for normal projects. DO NOT turn # on --enable-maintainer-mode in the initial configure command. At the least, # it's not needed. At the worst, as of 100526, it'll undo all the careful # work above to set externals. if test $isNormal = yes && test $isThirdPartyWithoutGet = no; then (set -e echo '' echo '===> Creating build directory and running the configuration script...' echo '' mkdir build cd build cmd="$coDir/configure -C" echo $cmd eval $cmd echo '' echo '===> Compiling code...' echo '' cmd='make install' echo $cmd eval $cmd echo '' echo '===> Running the unit test...' echo '' echo '*******************************************************************************' echo '*** ***' echo '*** BEGIN OUTPUT OF MAKE TEST ***' echo '*** ***' echo '*******************************************************************************' echo '' cmd='make test' echo $cmd eval $cmd echo '' echo '*******************************************************************************' echo '*** ***' echo '*** END OUTPUT OF MAKE TEST ***' echo '*** ***' echo '*******************************************************************************' ) if test $? != 0; then echo '' echo 'Error during build or test' echo '' exit 3 fi echo '' echo '===> ALL TESTS PASSED' fi echo '' if test $isNormal = yes && test $isThirdPartyWithoutGet = no; then echo 'Please review the output above, particularly the one of make test.' else echo 'Please review the output above.' fi echo '' # Do we need to plug in nonexistent releases for circular dependencies tested # with the stable versions? If so, generate a new Dependencies. This is the # only reason stable references should appear in the externals for a release, # so we don't need to check further before removing them. if test -n "$stableExternals" ; then echo "===> Grooming externals to remove stable externals used for testing ..." mv Dependencies Dependencies.temp.$$ ext_name= ext_url= for i in `cat Dependencies.temp.$$`; do if test "$ext_name" = ""; then ext_name="$i" else ext_url=$i ext_urltype=`extractTypeFromURL $ext_url` ext_proj=`extractProjFromURL $ext_url` if test $ext_urltype = stable ; then ext_rel_url=$ext_url ext_majVer=`extractMajorFromURL $ext_url` ext_minVer=`extractMinorFromURL $ext_url` ext_rel_url=`echo $ext_url | sed -e 's,/stable/,/releases/,'` ext_rel_url=`replaceVersionInURL $ext_rel_url $ext_majVer $ext_minVer 0` echo " $ext_name $ext_url ==> $ext_rel_url" else ext_rel_url=$ext_url fi echo "$ext_name $ext_rel_url" >>Dependencies ext_name= fi done rm -f Dependencies.temp.$$ svn propset -F Dependencies svn:externals . echo '' fi # If we had a Dependencies file to begin with, it contained references to # stable branches, and perhaps releases. This is the set of dependencies that # we want to commit in Dependencies, so reload $srcDepFile.bak into # Dependencies, now that we have svn:externals set to releases. if test -n "$srcDepFile" ; then cp $srcDepFile.bak Dependencies fi if test -r Dependencies ; then echo 'Also, please confirm the externals are correct:' svn propget svn:externals fi echo '' echo 'After reviewing the output above, you can create a new release by going into' echo 'the directory' echo '' echo " $startDir" echo '' echo "and run the commit_new_release script" cd $topBuildDir cat >.new_release_data <ÚO§™ /È•€¿þú¿o׿¿þó?ÿùOÿþoÿ÷?þü§í_·íŸþú¿÷=íÉü•á/‚¿þøKá¯Uø«Ù¿ÒÁ\Ì%Á\Ì%Á\Ì%Á\Ì%ÃèÆËð›~…`ž3#x“áM†7æ)0žÂÌ~EQiÏ Í ÒÌ Í ÒÌ Í ÒÌ Í ÒÌ Í ÒÌ Í ÒÌ Í ÒÌ Í ÒÌ MûÌ%Ã\2Ì%Ã\2Ì%Ã\2Ì%Ã\2Ì%Ã\2Ì…`.s!˜ Á\æB0‚¹Ì…`.sa˜ Ã\æÂ0†¹0Ì…a. sa˜ Ã\æ"0¹ÌE`.s˜‹À\æ"0…¹(ÌEa. sQ˜‹¢¥À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À ¬‘À¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬‘Á¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÀ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁ¬QÁÏ¿þyÛþñëo&‹óß×_Ÿgžex&ðLàYgžUxVáYƒgÍ>ëùžóÙ÷_} k XÁì3‚gÏž1<x&ðLá™Â³Ï <«ð¬Â³Ïš}Ö#ïo¾ð…/ |aà _øÂÀ¾0ð…/ |aà _øÂÀ¾0ð…/ |aà _ø"À¾ðE€/|à‹_ø"À¾ðE€/|à‹_ø"À¾ðE/ |Qà‹_ø¢À¾(ðE/ |Qà‹_ø¢À¾(ðE/ |QàËù×ß·í_~ý×§nñù+Ã_1ü%ð—Â_ï¶ÿf†ßÌð›~3ÃoføM‚ß$øM‚ß$øM‚ß$øM†ßdøM†ßdøM†ßdøMßøMßøMßøM…ßTøM…ßTøM…ß<ÿúµmÿö?þ×ßÿé?ÿå¿þü§ú·ý?ÿøu–±ŽÿïKpç}6ØÍüK¯­×Œ>ÿóu ÂB#ù§–oÉÖÓ¾ýÁDs0:M£ôçûÿýåU´æ6‘ÿ&ÿQéyz}‡¡9ùk;ù”¹ä±Î’¿Íkb’eÝA”:S†ß FÏÓè8´ ÿv 3ùoïÁHþѫϡôÚ­|¾˜ŠR<¤p`ÍRíx«ÇHîOÅ=·—ä‰üVµ¥Ëý”O•‘ü“*ùP_]ºY¿+(ÞèòD;”4X;EävòL5"ñr(^Ú|Pj¡Î£Çoñ­õ>$_ˆ—Cñò­õ. €·.F1„rÈ •À×̓ó#ùlõõEóÉ(¢ÒŽä¯‡ìèüd—–œÐ¬Í[rÏà•xeó¥(¥ºk×—&—œr}"1K”ΡöörȺsí‰JõF×NþC ä“%`]¸wˆÕºVÖÁ[lw5oiëØ¹ÏÑ<ØsÉ#ù,yeíÒ‹Cm¯¥äÈà“kõ—XöLßâ'Ê¥F;`í…Á‘Œä‹]0ƒƒ ÐÖ…úƒ;¶‘<Ü=ß›ÄÝ€ƒCÉÀbòáœ¼¯Á3êÉ'ø'¹i묳/àųÑ}ü‚&Ürn¢—÷Û<¥LÁä}å²Úñõ-`]èùõ~í¨Íåýׄ •ĸ\»µË–)µ%˜|l~kl4p¾ƒcxQŸì¼ ŒnÐIîØh!îøâüH>›/1tíàP¹ØÈ‡—º9)×#P+X¿%›Br–Z“ Æ–ûÚ8ìÕ#Ÿ1ŒÃà“¾R0ù­ÎÈ>‡ É<ʧJŽp¡ŽäqÜ»Rmyäùõv‡ñ@¥‘|ÂF”éK> h•;¸™ñ›#Þ·oòÈw pá 6­¨Kž€£ûýµs¨uÓè¿‚Ñ=d¦L>LÈvß[·ØFò ·k–B¡Ú“ן«6ª}˜–kX‰˜\¹iÛd9ľvœ¿õdŽ|»wx^U§ÑgŒùaðjãã{Ý\ɇ]Üñ¥uZF+%wž2ZœÇùAƒx1™æn¹¿É­ zîKËD¾Ø»O¯¤¢#ùŒ]÷,Ò9$–C•GòQ gÝBk(÷‘|–OyÃþY>)7 X'OTÛfqòbUHíã‚›/9T_>‡vŒä‚Ê/¦–R]­ï¥â¾Cάp©®|µ‰ÜÃ%=ÑM½U®™u‰fÖÍÀ[öÒ­Œøàs4̦^r Èg¿X"/à… ­²7zR;yI¥¬ €ZÉOýŽž¬nVõ°•Üj°vú)pà*]€Zv¡U> @…xÓ]{ÁÔ‹ÉÊ3À ]Á‹ü•Îùa?/àű)аŒ*eÌxNFÕ~c>wtµs”Ìäêü^“P[ÒÕö1çöD7éðf@'?ÆF`£aŽ|?úçxˆÏà‚褤`tF v7ȇ}ù|+—š¸N¬[ gYpþQƒõª(¸xo_ãäü^T&ò;ï‡òÙkžÈ]pÃkt \8»üJ‡S­#ùç´ƒU®+'s|0ÊõnxšÈgðéF¢$°.V5*hÁÍž«;ùƒÁ:’Oð‚Î&à'ž nn€?vgg{ìpí°Ä¯Š‘‡;Ô%ŸQéõ–@€i±Ñû¯OWfÀ!=¸Ã‹¿¼rÒNÎ÷äŸ#»6-x¥mÏÓƒÏewòC÷Š{)¯Di :fßÉ“ÿôgúûÛ’usÂo? ÅK(¥ZM«–÷EA3¦ Î:r0y çÈ·Küœ' åÃ[(†' ¶£s´D£DœFò™gZÄW®l6g :Jr{ãè¥xíäeÕFxšLÚëHî¹ØÂn®çûã‡\Œaab›—“ëH>À–÷Ù—{6i 1{{¤6’Xó&â=c{7—pÈ]]rÈ pbñRE´ï`Xr+¸¥Ü%6ó–ÞÖ”“‘¤Dù-ƒ!ê¦"ùT³áïM‚ý§ki#¹£\Ù–­ò·`ôŽvѤn¾ƒ¸ˆ7:æ;Àt±=Î¥ò¦F ¶ÇÚÝ5ëÕ»Ýu½ñé³øþ2X{ˆJíä M¬s|ú.¼vÊHN.ùNd£Ú¸vŽ8OA²S!¦„\O©këÕ$˜ò(_ãò{‡çoç#ù`uKµá-ôkk0¦l‚W½R­(8ª)Ok¿SÚ!”BÁùî–dDqí ñ#1Ô:+¸x{¯ºØôÕë20Û®ƒô©ÈHîÏÑ]"iIù¯-&WU6íS'ûP3ä÷.g9yK>8¦'‚ ¢ÐCrêrà±ÔO±¿½ª+w²ƒvtäqß; ôp%@fW{/cÔȧ˜m—£L-‡–äA”C›É+V±÷½õÑy1úoo­äêÎþ€‚9˜|Jeh)LibÝdµ¼öÒ§E÷“ÿ`³‰ø+Çwžˆ³ÕHîÐSÛì{,”1’Ê}$÷• ÿ®-sfÓ÷[Œkɇ¦KÐMvµãkú“xÏÜWÌ螃µïn×~Ͷ; '¯‘e,X÷¹A%Rm½'ÿì»«ŠØ9ŠyËìÁ…‹º þ>uäá'Hôâè=É©í­¯Òdm}äÐ×[%T›iò¿ï• º&wñF·‰øSƒ/ćª}˜ £ÇR Ð_Â9NNGòȇ€1Ý–b%çÎyëSsÉ)öd€M~;á‘uóÌ$4RíäÐÙY#ò«êyrÊÜ×¼¦É¯\Cc…Hð"¯¦þ)‘k€80³öj*ϘãÛ)ÚÛM«šúg²­K¼÷¾+ =‹}Øô;Þ4.çÝ“Q‚µ>]B¯¦ö+ÑAØdžp’iô4ñëºÿ¾c1úï`ôÏýŽ€7)˜|ÐÐøtí¾E[ø[OL[°’µO£/äcú¹j2fôA¹òצ²ÔMrU›[kÉ1¬÷!¡‘|ÖzU 6`¦"²³éÙL'Ñ®`ñL-9à|¬¶(L%¥ n$÷8¤úD;x U° ŽCí°“gd„Ãù·Ò£Kd~X§2Äü9ð ^Þ<øèæÒø-ÖÆ4ŒDîw×Õ 08] ÛÃÚm<] â‹4Xe´i$Ÿ”€k¢öd粓‡®ý¯†,Oi Þ¬d;B]vÅ!ÝL¾…ËIoÞÒÍ7ÊO䣛ÏÇÒ©™ãç­¯"`2â…ƒšÝÉc^bçä­]RkÑÚQ ’/¸ ›³Ÿï8ÅØu¨-\¬ïù'òßùç úÜàèúSókw~ nÚúˆÏ#O{ìR Qi[ ³Ï]þ*m hµØœqí[»nœ|üÖ½ƒ_øÞ¶pð lÔž!3½ý¥‹¶ÂF¿žŒî3ØQ®™™µ§}DP¾ÒZ·ˆœ§ó#ÁÅoñ­<#ñÁJ¹îÑÉÒ~ø6jðŸ7zÚGÔÅË¡r±'Þ ö/p!®&ËU{R®TjÞºG' Ïߨh)ÙBå38eõÈÓ€›´‡à¦¬üqL‰“Ðã™ÙɧØ™·Ô¼5£4ä·Ø(í#dÉCÏ¿„-Ø Ì_{ Ö[ù,™eÝX»Þúæç^?_ 4R‚¹Óe ­urZ“ãFŸ¨ß5¡‘ý|È?—öuñ»£öZåœ$wôŒú™ööuô¥®ÚrÇLè•úï®Fÿåq¨¯ îiÎnÎÔ3ªŸ]Åù­½7•ïxW?ò!÷¥N> {[µn$÷.šéaÙƒy ÀѺWú¾@ÞcåÐ^ó劚ùôÑM•‡¹»îÁ‡œw~W äc ý˃$wU6+ò!ÿ\RiæX«ßŽÜ^ýŠ…œlGai}tžNä÷–;â.°îìˆSNÌvŽz«\þè#ùçvÍÞ"ZR`z eɉ’Kg°ø5ZKŽ|L"5h]¢LÞ6õÕ>úŽ¥/ØTÔ–6·sãÐŽ®Ú vmŽÄÙezæðäž|e—Ñ~œÏ;"n,#…}ä©__PBŸ‘ÀåÐO-ÃŽ^lqG/°[ d¦?Åí]öðàG—GÀ8`ý\7)HAYxA l´Ô`þï1˜#ëÝËåºG'N¶Å;t2 Ç'æÇ^¶eÔMU{ ‡$#¸Ù.þQxIõ{…û¢(¡ô ÜPt-Â7¸™³8° 2[zU;ú€Ï_SÀº•.`%=‚V¥³¾¡ÕR>úcø'Å]l4§ŠZÑd]+ˆ é.0×H¾@ö:À]‹PCxä9"§{r'ùÁ)ÊKôkE’½ ±F=Æ1mEóÚ¿¿$ ¸°»¯á”ŽIÄãÚƒÀO7î:MþóÍľėôŽQÌ8ÔìN>áAØ]jgŠ>à<®¸öÉ#XÖ`í[¬¡k@ÁÅoQÐØVEC¹ä¡|ž.ÑÓÍ~‹—ü C{)~ZC÷â’:´ëñÒ½YÿzÊyÅ92·Ù°þre»¤-4þ¾*ðéê®}HzQNAB–&Î>òÙmŸZ³ö÷âý^;ãÚ'òß7äƒx©74&s£‡Lµó㨣—¢ ½ewô¡»¤u£xùÖ°>ŸB]p>Úµ—ºÉñÞá§Šªø¬Cñ¢ùÉæ­„Y®û”†\¦6’{‰ŸjlÚ]¥Ì£+øÚ“7É%{ åÍÆï›QÊ­ŸÓÌ”‚É#¤–Ðâ\òáÀä'ŸlÀô¶ìíºÎlä<˜_”3ËTœÉ¿!ÅH>)×½=ÚÛ5Z"sÿÝŽ ³=+b'¯ aeÉOä£F>–\®¶ ¡ë‹šœ‡·Lh/™MjN$Nz±†˜k$¿ÝÛ‡|™¤Š<€•Cº‘MºÉð¹–øÙÊ7z\cbY€ZQ¬û1î;\¸Þ¹äY4’°®ŒÚ¼EAŠö»eî8tƒNžpÈ’l jeì|¸:’‡–±ÔÍ(åövK岘˜&·è+m0ùàˆ¸„°R¢¾¸öû™&‹;Äφ]jã$brr1ñŒåfÙê4ù?¾¥É¶ô˜K"Œ ›ü÷£Dmí F0¦[jý®I‹øÂËa-Xž€èH¾ŠÓ :’û`ùzK phÑþÖB«--J¢¶pƒÒ®Ò«w3·Ð-ª-uËÔG_L>¬O/ÊÛºè[üž|^OÞ­ÍO^qÞ¿r`¸{1™Xå^TÇ„ÎãWŒŠy+¸ðìÉ Õf$÷u(TÚ‰üW ›ß“G4%#¹_G~bvòŽŸ¹™F÷,£´uu×þä’Ã#¼ä`òòÓÎ…Ö? íÇ^…H“vxòß!>WòD>¼”Ï\}É=ù\_qµÈlR.¾UíEߢ½Þ¸=èLó9ŠwiXOz÷ì¿íáÕœ&òH>‹ò©F_AÞSÒu.ù Å$ë/Nþǃ8y€ZÃÊs0y Uð¦Jºy÷Cî¥òHÖh=ñf—|œ£•Ol½Á-’æÛså9]'`·(0«)®Çs,ÆG¶Ñ“~2:ϲÂ÷ð¢,À¼Ñ9ÐÊ…lÓäCß»ðüeNبøŸh4¢ÆC]£ÑŸÉ}`ëݵ°‹ßºG' |PnàE än|o¹sðO8DOÌÈé§è¤¸¡Ÿz¿ò öžLý³XÇ‘ePhò$é¯]ŒaÉÔ<´À\–|ø®ˆMép(8Kè¤ßÁæ~ˆó³<Lž§]aB|)WšXçɇô‰Î?M5ÈGŸÖ(É¿9ð‚Z_»iõ¿‡¹jŒ¹R{‚g4ï» ½ÈGYòA7÷^.n1ê¹Jåp +2ØÜ´l[ÿÆräÐõ5’;Y‘þï›3 úâÒÜþË›–G>¦5$wòÕÚßoxscÆ~ÜφÍÎûaç#¹ßþÖW‘û§5†|‡˜­§Ý5õ™·h ¥¶mäqÔï…v„Ù°'½amqbÁÉ%ˆIàÚ%Ò¹Ÿ¼§ÚùÁ‰ýèæ}SŸ—ö&?èP–ôÄ.i{²s=8rxh‹.*o‰y"¿Ý;nú×$Óð£\¬×ŽÎ?=±ÐÂt–¨¬»çÌõà®Y?œ‹;’oXYR°öØø£„R¾.q}F>Ê'×°3m$÷¥¸î k12Kö†“ÇÛßtÝ|g.'wí! $E¼ÑÝæ;ßdFòEZƒtÂsZxh‹°¥r­û×Öäc.îj¨w¾âújÍ#Ä5­ÐpòC‹žŸÊ«½€™÷¼)KÖ}Èïñf?äc"äýÚÒ³ £óÝâEyÕÉ)W1Gøaò˜ëM! F£Ü“{Y¶ë£(É1›÷¶ ,¹‹ôG ú—ó«ÜÅ%ñfÞoŸ.SÞwH”ÅA :î›÷»BÞ!Ë…Æ–·Õ!Óatú!ÖFPÛKÇCê1OkŸ €2òE-µ`ÎÓ£]aWoòîÙä¥eÐödïà(Û¢Q8´Æ›1`„Ñ1ÓÔå£Ýatvš¬×ªö$Þ/¹OäѶëhù²ô@®k´;*ßšõR;B¸š-ƒïO‰zj“ÓH>!ŠÚžœÈ;#(¥Â~ Jªx“”+]ÀÑî‡Ü…«9È`Á¾¹>!{»oÊ“mW‘Ço™À™é²k?ï‹3ª“܉¬÷× s­ŸM¢N®ÛMc¾}¿“œýÊÎwíÑq‹ªÃèƒ}v×ßW§ñùV »û‚˜òx­yä”ðŠùëƒJy¸˜ ‘;ú>Ô§s÷ã““Ç”›öiÙÑés½>’'ȶ¤|YoÇ”û¬ƒ“x\¯Ò~Æã½ù“K˜Èá ñlf{82…¬x¡|}³#ã— ®“D|øNÚñïø±Wg!¯œìäysÄ{ʇ‹/¸XÇÖÉÕU”Ëð!:uÉñª½wámœüû ]#ùð 2\;ê|ŠG‡9¦ähÝë\µ‹¯6Çä“ÏSµ±ävtjìÊý$ñÈ vmÎ×ÇýP$!ë`;W‰5` rù–|uA £ãFîè‹ÊžrËàVÌ7UMѫϺZ¯ÖqûÁ‡ZFòá£thïÈÓsõFÏx=ž^~8AÞ‡öy5k‡»ã®J,Yl“²ä OMfêÓ²„Ä%¤RÔî´ftI‚ÑÅõ°y¸q´rß“:Jû6ø€ó¸ÛTw9¨]Á¡ÎŸþýz+‡ ¢ô[nÚðšì’ö#)ðïD.ùˆÔwãI“GNøÑ3®Åfï‡`òx£qõ4Ksɱ‰*ïê#«¢þèŠS|owcÜ„pm¨¸Óቃµ#öl.ÒZ¦µßj9þyu‘òsó&ººR³ù•È'Õ¾'e(&«6ì«M¦æC•Â9ÃŽ˜|à|µß 9Š÷€˜Õueda»%GµÉ*>,´øË’Ó`2É×ùB>ù€|k liw'?l*Zk€|S ÖÎþÚëøé`—|„®æûŒÚLÞÊ]z¸F]Ö!Ìâ @ntž=ðø5ŒU.ä}ùq°Â ù¯)EµŒäø}¢yW@‘Üчïl$³+ÊÝ#GœtÚt&íÈ•õ½Pî‡ÒºäZ(³Q¼@®ƒ—âO A•«å 7«s¯sÉCÃ"ΔÎ3î›Aаwt¨¬ÚAÔl»o¶–8”³G>DÝå FoÁ`ɬê’Cˆv(T Œ?ûäCœ¡fçÒpçÒÍ·Ÿw™eïà/C Ú‘ À냂]ÁÁäó)>†g)¹3NÁwÎC=œ4¥€óéŸP½3ų俒ï0zJ)ŠL$X»y«5mîŽ8É\ÎOC"°#Ô8W—<[0–2õ¸ (•ÊHþ¥\ 銱㦘GOSy̓®&´ ˆ èjƒðZLìF>¼þb± 5N…`—|áWafÎ.9Ü÷É¿o¦Øß•äO@xîD3Ã¥¸äcTÆ]Ÿà+>9bøT)ꤨK>ä¥;Ðaüj¬F‚ËnÂjn…‚ɃàlJ2ÃâšÌ€P›‹ +Þª!!fWðÇ#ôÉá;&æËœÌèjsÈ ¿$¹s.×k-î%¼¾Ã@xãmNþè#Ž-®ÖíMÈ%ÇèIjó£üÂ.ë†4¤ôcºÜ`O #“ÔwÚ8°AÎpnÉ……;k X‡a¹È ¼ E…Ôz¦È²îØB5r·è¯B@n‘EqQkÔ2ÉýÛ˰ïe†€6ÐyEµ!Ë¡(læ8 T"<ƒ·>­×‘ûÛârF1D±AqÉy@Ѿr&ã’+¾EâÉ=vÉ.9†UýbêêNž†ä·PP L^P‡5íIALxÚ»¡ž&ãŽ^†Öbòs@% BJ N‹ ÈñóDÍHщٓÄß“°»½œ ñ»‘Ô°¥‰1kA³6o…AÝåìiÇТˆGŽ \öd`–Aýܨ¹£#†/¼lÉëlŒ ÈÅ:‘Ú|EʼnÜû­ç˜Ã÷ ÀÇQ<üF¨ß‚ÓµàpW°”kyai¤uPUÊ”²Kޱï5Ó9£cÌT•¸øäpºð;Ì™ÜDÊœ}¹CDzÄ­|\ò±®#âä2qÀ:¿ž7äèªIõ˜’pPÚ‡uŒ0+›<ˆ%סXü1–13ì’­ÐW=È¿ ljî?ä€|cœkr±¢½\ ˆ°£ïØ\“dÝnܸ!<`$×vÎs 8 êÒeq2»È]™^ÝBL¸vv×NîûÇÅ9 7ˆK>\û}5ÑÒPða_m *;@@îLÁJP$8ˆÙ¯š@p”L"uæØ èB‹Ë€¸sž‚hÜ M¦Tíú °N‡öÿÒÕl‰r 6 óDnné¥/wtŒÙérÐ<x¹r6£³«´‚Z‡“g_iO³îäš ›Éã[©Ka;“§‰u³ÖÛKŽGÑúv!MànÃþn“zóšâ°UòæniFëP瓜g»À\@ÊêržPplœ‡N*ˆHOÝìœçÐÞíèØs¯®ó`fÉ9èä±”ã“jc]$‡» ‰—‚ˆë Ï=Ô%/Ãg€çпÛÑDX—ãû£+¨>:fwbÖ1îóæ­á1IJÔ—…¤’r(v]-/8úá&’K–‘•r×:¼¤zä< së‡!ÑÄÈ)W#ˆ «“ˆy}ü +³²;y€í¹gÆb “;º %Ö«ù€Ç‰?:ª`»Œ¸Ï'bWp2ˆ·k9iÉçpÚìI2dK ä{ÒÕ7‹n"¥ÝÕyôG0^:ë 3RÉ$ôêUTÇ”\¥•Aµ¯O[àŽx¸28y–.8TòÈàtµ}0$ έÖÕù‚>£Zù¨o—_²»ö”{ä¨Ú©xqí‡n5wt )ùrö\0PfwtBÊ ãŽx¤Ù%ǃz%ÙdÈS¥â’cÜšJr·4È[òCRa§SÍîÚqã#&u·Ê¬êʹR|ÌÃêN>i’¥¨¡ wí‚¥õ+%û…©ÖAúìºö^ðÖH›>³äË )¡³8µ€u 8ë ,¹øä<ÔïûvkçT\­£Š¨Þ×\°+Á×:‚µK¹úfÑEæjÂiyÒ0Õ=ò¹V½]ò© V~ò¡ÖGòáÞ¹©+!ê '}qSr~¨ ‡ugwô©o#l–pÉ£®Ý¹líN>EEθ+A´Ì}&ù\€_÷È“žˆ©Q$ ºÖ-ò¤+!n¥‘Õé›Òº<«N…c|®¤®Këò¤­`ª;»äQaîvpɧöº°/wõáuW‚ÜT_öŽ<}ج¦^ wòQe~î7ÖÎnñô¦D4³Üt%ȃ~›– yÒV·ÒØÑã–yPà\ò©’ºM÷WŽE4‰Nµ:´®ÌË“òòÔ0à’‡õá¸6.ñyBªëâ¶<(ìÏÍÁÚýÚøÜíà‘ßu%Dý È:öwÄ©QÄ#Ÿë÷ë~ [Í¡SŠÃíüACGÜR!Z*núAä®­À¼¥[XA߯;PÃÒ-,¯K¬âwk¿Ëÿë©<é ˜jî.yXØŸºò¡s"¬;{äayynW8?ÔïÃ’½KõÌ­yPØ+óò 妴.Ð'?t„ .ùÔ9±nj'q/Œ<è ¸éFÑÕé›:¡!ŸK¡aáØ#«”qi'ŸÝb×\•êw@N¾½ÇÕOC>7„½îèQ}ø¦¥B£p:õpú¦¸­šn*ó¸vö÷ù©Q$X;û­sS£ˆK>àê·»ö©å%lÕpGŸ:'Öí$–uS×HØíÎof™»‹óÛ nºìäãž…:áPA_÷èƒâö\4wɧøº2¯ û7mú¤­ ®+”—‡2ðºÄjGŸê¸nfp¤ëúðÜ0à’GÕé¹QÄ|T¿)n+45 åÿua_ïªÓa›Š;ù¨'bnS Ô&èJ˜ú ¥ºFÖ-vô©ícÝСOúâF½ë1oÙÒúPÇ]9õAi}®~ºäS)4¬¹»äS=ìvðÈïJ¬CÍ=XûPE«Þ.ùT€_WhõAuz.š{äamü¦2¯šnºjãâÖ‹n ûú +aîvpɧ®‘°Ë%`ÝÐ5²î…±äSÃMØ$ãÊ=*ìß´ÒèƒVš›¶‚¦QÌ ^ü´J3;b‰3Í)žˆG.Xþ¯W—>'Ì1$wò62ùÚÏÙO%X_T¢DÆyµägZØÔÀ&yg׎Ud¾²oCŽ¡ b׎Æî=…ÅS{_@ s\L»5\1›}¹3Äý'U†+©LA¡ø§3¾b‹â‡ép~ȃ´æäÞ}.9&2zÖuHËÕœrPÚ”ýh¯k‡°Šøòq‚)$–I燛ÌÏrDæ—ŸBrå>${ßßÑÌ&bɇÛn{ÖÐg’ýÑñ¶µ¾Ï™ÇÃ0]ò!ÁØ/¢e¼X8X;^XVºÒ‚Å‘“òÝr(ˆO%pàõ{·qɇ[EËøÒÚì‘cØ›K&?趨„ùŠz5 frCþk?î}ÿVZ—|h>è ÀëÓdܵŸ"ëaâî@pSÌ^ý„CfwtÜPÍ—§1ht“}å²–1ŒÞšK>\VŠŸ:Ä 5ÈÑW6¤¹l׈åö”ÜÑ1CH™ün{§g IRÐ-¤.ùØdÖ½µѸ?ú!ìaUŽ=ù¬Ú±z)§q‘?:6éuíÄ!ãHk”)"ªA‡œ—|ìdk~ãÅÑ£C"ã"l^kÆ™Ôøö˜V‚>­2‘mçpblËú š‹«´cZ/nŸvÌ.9r¾{flk5°8lÃknD*…K0y‰eö·‹1ñßÔÍù’ýÞ’%¯ƒn– ¥obƒ6™qµºÉ~øcw…!†Å[дՕ ŒÇf厎®¡o¨c"£‰K®ØWSýkZ¤æ:’«6/UûÝóâ®Gïº9&[”Σù5?œFå ó“½ [ÜpWàÍÝ7­ráIAteìGOvONˆ“ÇÑ[Л¨.ùˆ(®Î Âh¼£Íz=øÂÑÑÅÍ`ÍOo7ö»YWÆ¡+‹/Èiîž”í…ð5¼$¦ƒ¼±‡°øä°© ;—Û †×èÔ°õ¡ÆÙ¬ëê(Ô:Êê®C+Z 2„¬îèO7e R=äO{$‰+Þ”Á.e :ÎöÖ7+ÁÍ*`¤´8Jûñîèc'[‹¢È}øPCß“ð$É­—Œ»Åse´S@ñå.A+Zv9?6Â¥â:©l¿ÆU£^21©÷á°]óµûÝjUwS!{b GµI4wô±ç+‘ß\(>ç‡ÜyÏÜÉU,¾‘í¶«þ[ç .wSI$Í%ǯô–$Ål# •(-QöâêfF \Q“‰ØoËÙA>á5©ú‘}QòHÞ{ ÆÈì2J PÉ~Z‚Ø<ê¦î—à9Ÿ‹+÷©—,ýT9¬ƒ·RqS|G id1«¸É0¶—éÕ¸“­»2H²aQ ÔF!cVÜF¸T’+w®6wŽï$€UUˆž¢öËÒo[V•j 6À:JAûe‹ÔƼ¥ýƒ¯¤xôSÛø—O½túøxÚ÷×—Î4Gz}þ»“¿•ÌK·òæÿÖ_¾¾1>by$Çs4oŸkÆA8„ ÂOØÅ!#ìg•%œŠ<DïÉAp*úÓA,y6‚Ï£àûƒHoòÚ™·òzŽ9Ô›lÔ.jgÞŠ¾R +ápz´6ƒ ‚÷Á9ò£Aä »$Ä~˜OÃõjðÖ›]‹9’ÑÕã§äÑ~CFð4ª‡?ºC¾œŠýðGƒP8=äÁ~CáN6§b¯ÔŸË$úˆ¢OVí7lÏÑ~Ãá~Ãö6zÑŸâp¿áGzÃw‚ßÜk€pèf3dÿt‡Ü¹™§"æ-õ-€Cà»íʼ¥OV齑Ÿï7HžÂA²ßßûtÌ šˆ­rJ¨7òh¿±WQɨ?%—p*ü”„z#ÐC¦á údHoÔ^®7HžÂAr0ˆ©†û>Úo*SŸÒp'ÑGz£aV"áJøÑ ²ù¿õ—g2±äNEƒ·îù÷ÿùïß8þãûÑz™¨(Skòú”€šs¢ÏYÓÜ€¥V_Ÿô¢u‚¥Ô%ï{Ö çúú”V) «¼È%ïUöt³éõIrQçEž¤µWqÉ[‹÷ÚûZ’¹–2—œÔ]{²¥f*9°®’øä¦c%¹ar &Ÿ`»Þ/r¸ä%"¯vZ#]r{qçÖ½Ìevýsòåžqò’Í5‚ó"û+{äd9_µQ§¼»iwò¶9ã  WvÊú[‘äsÞÐIùКâ4Tâ¡{äö(Ë!wmŸµ«ª²;yµ NÌÜL‹ eòjFÏzPkßr·ö܃µqjªí*°ÚpE´–WsÉ j-io}»è¸â¼X«½Ä%7NHõ°«Ö7‚|©,çòª.yµ“ç|iÝn:VHs­¾É˜¦œÌ©]äÉæŒDØ\²¬Ë’»ÅÙH/IÊ>¹ai×F’q`°IÇ·úFð„ܲnkÚÉ ë6= ¹Û…!?U{›/Áݪ{]†ìÕNnY'…^É%‡XIŠš/r>X»½*w;›[½;OsN%Øë@먫½ßù¼ùÏ—;íàìåÔ‡ï%t{uÊ©½¼/MÞS‚Ñ ëNY½Ì™) 6jµ£ï}·±Ý:YKõ·J{L÷£\:oÿÈ!Ø.ì•PÛ‰.Èiã96’êOÞÀ=¿³~n›}`Û©tî*/s^ß<õG·¬£côkòe|à’×q‰No`¼vÛ€äpýFàÄö±%-ûË´ü¦è’[Ö•ÜA©=tèCöå.°×µ*/§7p«(•‘ëŽÝÆõq Zg¶Jµ¬;·GþÝV6ä†uD)ð°jY—NlÔ¿1Ú}'e+ùØa.L ©ç|H( ®·4i²áÀõ Rð|ÏäŽrÿ•tX\ ºv‹üÕîø©«Íu%¨ËR6á@gÊ!Ÿ…C‡¨  ë íQ8ÐßJJÕ„d¢Œ80²E:>€Ü¥?°U@n/ÐÃbx›¯tÞÚ¡Nîncï]?ÞÊ¢¶w¥!äœO/ï.ûãàY·wt¡VmŽÜuRöÊí|zsÁl'gB!Ë:–IÙûÜßÓ B!³Ä3PÞæ«ðÓ1•ÀAƒÖe®æÓp}U¹ØÆ­=É»ƒ¶¬;æøw˺#™;ÂÌäÍÆŸ¼e£Ë6ߢ¶‘HÇYÖ•L/sR¯žr u¶q.¥ÃzWÀ‰Jíõwˆè>Î6Êñ] &_Æ·œ6Ð÷ª\ò¬Ýv{Æäpù^1àĶªž÷áÊNjŽÖZÖ•ª8±¬;øð§{ø`ª]ؽ®nœ~Ër`ݱ›§îø%'ñÝ„&ÐMã í^wDà~ÂM ëH_“W¶œOì[œÖ1ì…ëlSÀÛñá?# 莟Ññá?# 莟Ññá?# 莟Ññá?# 莟Ññá?# 莟Ññá?# 莟Ññá?# 莟øwßêŽÿ ¹½-à lóÍÿ§L‚ܰnkÒÃûe†­±.Ò²îLÛpwü†óxûõˆw ¼Í—çŸk¯QøÏF<UÚ;ý3"á ü7ZGé²8øæ—(‚ÞÇ9nó× Že5ß`í΋ÿ^Þ}ˆoÇ„ÿŒ(`›+¿þ3¢§µöíøƒðŸlÎ… _Ž?ÿQ€Ó5~ã"-ë¾P€Ó¿ûvüAøÏˆ¶ù2Ç·ãÂöý{á?ûئ=Y»ípFx¬‹’¶õù¶ù,üÛñá?# Øæ#¡oÇ„ÿŒnÜ;ðåøƒð? ÖŽ?ÿY“¨ ÿBhP›P»×%ªjÂFÇ„ÿCmß/Á©a] ÈM?ÞT ”GÕ@‰ªò¨(Q5PU%ªÊ£j DÕ@yT ”¨(ªUåQ5P¢j <ªJT ”u5Ð~cå¶ùû%oÇ„ÿ‚(`›¿ròvüAø/ˆ¶ù$q†<#뺇µ_y;þ üDÛüqœ·ãÂA°Í_͉Á A퉶ùË>oÇ„ÿ‚õÒm¾5!“FàDüeºÍèºðÀ°ê°öÒ…³:æïóön…3%z­ÝÞ{î´ƒ¶¬û*önó¥ )©ä†uX¶Zwl$Aö@ì ¹ôÜ…e]XD¶·¯¾ßÚæ£37%ì¬Ý^‰ÉX§ü2'Uû´ê±Yå ü·JÛ“NöHÎVV‚ð_ܺ=÷slÇA0bO¥cs™ã–OÈ‘u½2¢–u_Ž?ÿQ@wü‚Ž?ÿ‹üÝñ :þ üDÝñë…óó±ƒSþ÷†£ÔŠ˜ðÿz í0†(ü×îÆ89uÇ^R”¯³íNÚR÷~®$·B“7Gg׈íæè •ºïQø¯¶z¿›ð_ME«Hþ÷·²f1á¿á©Dä†u©µÞ8‘l‹à¹Y• üÞêŽÿ ¹=uD‡#5_•TÌûá¿b`›?÷Îûá¿b ;~żþ+¶ùófq‚Ý~çí]ØæÏϽóþAø¯XØæ˽óþAø¯nmÂ~?î÷ÂÅ"Àæ\ø•r óöÚ©õ·Þ{¬KAÖˆ@ëL).üÊ¥äçØÁ‰eÝåëXG|•óN EÃ^·÷¾ ÖØê„ÿvôrù8¸­ÿ¼6ý„ÿê6páÿ°Äm>;¯]ö€\€u%¨„ °®ôh®Û?S¥Qøoé´à^dJX·÷;@ìÁÏc»¡`í5"o¸vŸójY÷UèŽ_1ï„ÿŠE€îø»“b *#jÝÄW ;~żÿHþ߃ÃÇV÷öq_zSBf)iVÚ¯·®ƒ³V ¹é»8ìî“÷¾‹t¾Ôɯ¾‹CáÓáþ\rÓžwؘ%7—Vs4z/¿P)ߟâúzÐ+.‰Ïê„OnË/jG¿*.©Õ#~÷'oŽ­ Xw.’cÖ]R‘utI[Ì:ºôúšü¯¿AU¨¶½¥W 6Ü!ªÍç·“y3ù¯¿Aíè¼f7œïU¡ZœÂÊ7ç{fëÜõ¯É÷”ÓùñÓHiùƒÊ´Ù¡.î—ó¿þfKO[kµYÁ]“OÌyO6žây÷}K”M«PDnR’üz‡ÀßrçOŒAâjݯ¿Ù’V:?Ä•^]!øêõŒGï±L:?sPŒÅÉâhȺñ(¶´dÔF.µÉÇv©Í•-¯° µÎ ‚Zw=¨ûÖi¤uÚ±I޵îbÝÞZiFë:çóÖi¤uúé<à!h¤uzeœg£uze¾µîï¿þö×ÿüëŸÿôÿ`¼àËŒDyLP-1.10.4/Data/Netlib/stair.mps.gz0000644000175200017520000005437610430174061015436 0ustar coincoin‹áK®9stair.mps}Û¶Ý6Ží{Ñÿ°~Àk¯¶w\îœ$ÕÇNí“‘ÿÿCIIaôŠë%*/ÍÍ‹&A$'ÿøøû/þ¿ï~üŸoÿý_ßþýÿ¾ÿ÷=þx<~ÿ«þßG}ã_ÿóÇûv>~û?¯§Ïÿþcüíñø¸]O®?qòý)ô§ØŸRÊý©\O´õ§^õ2¨—A½ :ʨütÖêxrý‰û“ïOûSêO¹?•ëé¬ÕñÔË ^õ2¨—ÑkõöíÿþFÓ³›žyzöÓóÕkoW¼]=ðvuÀÛÕþ·« _Ú¿\ÿý×Çÿ¥ñ=¯Çïûã¿Þ®¾¶?ö+õ¯~=}é/íèŒ\'@âþäûSèO±?¥þ”ûSqý©—A½ êeP/ƒŽ2Nô'ן¸?ùþ4±?¥þ”ûSqý©—A½ êeP/£×ê Àôì¦gžžýô|õÚÛÕoW¼]ðvµÿí*è—öß/nÀ ¸A7п¶?ö«ë¸ž~ysãñªð·ß~y»µSÄ ŠôOJÜ)ÒŸ¸?ùþúSìO©?åþT¸S¤?õ2¨—A½ êeÐQÆI‘þäú÷'ߟ"ö§ÔŸr*Ü)ÒŸzÔË ^õ2z­ŠLÏnzæéÙOÏW¯½]]ðvõÀÛÕoWûß®‚~iÿýƒ"<(ƒ"<(Ò¿¶?ö+wŠpçG7¯ºláÁlé_—|gKâþäûSèO±?¥þ”ûSñ-ý©—A½ êeP/ƒŽ2N¶ô'ן¸?ùþ4±?¥þ”ûSñ-ý©—A½ êeP/£×ê`Ëôì¦gžžýô|õÚÛÕoW¼]ðvµÿí*è—öß/~°Å¶øÁ?ØÒ¿¶?ö«ïlñƒ-ãÑÇ«î[ü`‹lé_—BgKâþäûSèO±?¥þ”ûS -ý©—A½ êeP/ƒŽ2N¶ô'ן¸?ùþ4±?¥þ”ûS -ý©—A½ êeP/£×ê`Ëôì¦gžžýô|õÚÛÕoW¼]ðvµÿí*è—öß/a°% ¶„Á–0ØÒ¿¶?ökèl ƒ-ãÑÇ«î[Â`KliôKý×ΛØyÓŸ¸?ùþúSìO©?åþTbçMêeP/ƒzÔË £Œ“7ýÉõ'îO¾? DìO©?åþTbçMêeP/ƒzÔËèµ:x3=»é™§g?=_½övuÁÛÕoW¼]í» ú¥ý÷K¼‰ƒ7qð&޴ǯíý;oâàÍxtãñªûÁ›8ÈÒþÒç+þø|ù¡Ÿ/oãó5‘|¾lÄç­£Òõ¯‡Òh»®¿|9uŸ¯©ûóe•?Ï#•ÒÔûÓ3OÏ~zéêýëÁ]|=øë!¤ÑOãÑÇòùß¿ýç÷?öè°þ¯‚-p<ÂÃÇýô|œÁâ~8á£À?\oí1æùO߯#¼õ¾QûiùDø©âžîð˜¸ëp÷"¼¶cëpîp~NÏtDnÜw¸µôdzôÒC‡‡WáÏ|Pö€Ç/WžÏ÷€§O/ÃÝašxîðüzé‡gpÀK‡—ÐóWé´]ðпÞóù‚wÖ½ÜóŽ®Guô*ëü3ô¶SgñË¥ûÒáuôëÊ“C)å‚wÖÑˬãçÖ8ÿ½ÅD|¸lY¶cÀÏìÈ€>)žþÒi;Ú/¿ÿõí¡òQ˜‹g ß\‘ðÂ*<·ú?÷8s\÷¨¿wp­ãÙåÅ€}n1vXÀ£,¤¾÷83g÷8E¥t1°jí?Î$›l•ÃÒÅÈxÖ8”Ç™xF8t]á£ò‚´O—’Vº—M¤r–.ºÎqHN¿ÕÒ3‡GKuäðoãQpç¢ûŸ/íׯ$Î…Íÿ`*ûÏoW·¾Mi¥¿µ¥OpÆ·ž{Ûß<þà;üúÛJ!­t^•ÞáJ!®¿Åv[! œ;ÜÛ…4xXÕÑwrÁkîÙÌãoo‹Ïð°>CÿŠ¿½-úñaõã_ôÐÃê¡ ¾è¡‡ÕC> /˜G¿1'Í*PO"Àå´øt1%mðSõÀ2Â¥y¤”Šfô·ÀÑI¸ü{)Á·‰Éü¾šŽ~ŸD#ɦà‘õïpGÿpŒ Îôé±¶Ðáž^~<6÷¾6üþî”úˆ®úÉÍ_ýaÀ1)¿ççŸ{cN:<ü <.Á‹ðÔáégàÙò(^ƒ—/?ïç#ºê/À&MxÕËf¸tƪۡ:cŽSÏîrª3–]Ê—f·¾sÔeÛ'ƒ*8ÿ$rA› k½(I8òÌ1dÍÒÎ¥ÿiN&ÕÛlm—Nž?³X.¿O)Ñéþq$8ø±1Å wJ„p¨c:C9I{×ýiÎES}Û×eo=ÚÒ­eûoÇR®QȗϽ*ø·Æ[Ý+Ößz´õ_3¥sý¸ªð˜}•‰ø,DiɈý>^Q寋N­þ½ýÖãÙèñ—5}x_B4c?„c ØÈ)y8)pðtòÆ*·kŒçžÀª¸¨š›íÜ!àÒ`˜¡-bå1ôg€‰±.»Ž£Oê«ÿÃNâææ|RÝ —þÛÑCNñÌöBÑà|‹˜ßèI>e¨<Æ§Í :+¡Rû¯É" íÒ~xæ@1 {žIsnö¿[=Ï[ÑI› #IKY'-_™^ 88p i{Vd‚#iƒw*i9“G8t]òA'-e¬<–ÃFzþùß]#m²H;¬[‘6+ñÀÞu>œ’T)ìÏÊ/HËd¹õY·´Ù{„óÚ1—Fìy*ÒR2,m „pIÚ-fƒ´=9ÃÁÒºÂ*i«„¥#i]4,íæ3Â%i]Kc*¤%‡pÙuŽ=é«üîi[§‘–ƒ¤ÝŠNÚŠ8’ÖW÷þ¬ü‚´Þ"­£ÜæwìùàîAàˆ¤­†šýð.üÂÒ6Ï\_á@ÚtÒÒ¶„„;ÝÒF•GÒ’/:ió0ÔÞ$m®6É mžGÒºôµ¶~w´›FÚÓqÐà’´‰uÒŸ$\q\:Gœ_6˜–6&Ö|Ús,"œ‘\¤[ZÏááNí”·,K«À%i£;×K›áHÚ-è¤emW,m*iÉCÈ´ƒAZç”Ò´!;}…÷ß]%m6,íð¬ÂÂ=è.ñ´nŠe‚IZÞŽ¶ï»lmÒF“´u¸ÃÒB¸ìùÝýÓIÛ³3<(ÜDÒVCMeSJŸötÒº¤”¤M9¤Íà iSÖI›(!,­?+¤eVàCò.éû øÝÕ@Ì뤥1IE›´nKi]”p$m £ç÷ á6i“IÚpþ‹BÚ8¾{ZYZݧ¥à áÐóÕóU-m%]Bx’ÁbJFö ù‚ð‚n{ѵ»®Öé±Sà²ëJ̆O˶±âNc•¤M Ò²ˆqÖàÒÒoø´h¤%èômÒ‚´yˆ±îÓVÚd„£cõtnŠá`iÃa.´Õ× KËIñi?< EVà=ðÉ«–¶zGÒ¶tÖÇáYåiÙHy¹ì¤ÝâIÚ¼ m^YÚòCÒæiC2²1I¸ˆÕ)ö¬ü‚´eEZ¯’6ÒpÌŠí„b¸>F„#i‹¾±å¢À!ËY÷ik—f„éQ—lbyxÔe‘§=SÜ@Z·ì:ði·¬”+¥˜"À—iËO¸ça?€Ë@,–6ŽìAY¸áLy›´cÉI눔WŸ"'8¸ñ4VŠ¥ á@Ú’±pÖó´<Á‡s†O!\XÚ=ÜÒ܃êwÄž)V{1{°é–v+Œ¥ƒ¥ mïœâ(mÇ@¬¾Í'uZÂ5ÒÆhù´¤Á¥O›‚ni£ƒï®¸tLRŸÎ4HK KKI'mé“Ù+b[Ù ÒrwˆV‹ zž¶Ò)!<µÏÕIZr+péïõ@¬øˆ‘±"V}ÚÚ„ÃU‡€p¹;ªúÍVž¶¯Ë½"æ|:I»X£ÕŠX_Ò‚Å…¢Á%i£‘= l»âða¨?ÑbEŒœ½S—¼WéX¿IB8.9¯ÓÑõ¥Ì Ñ"FcÙ€8f¶‚±S7vçdÀ›JRm(å‚m''WÀ99Õ†zr ¨¬îÔ­Î&Cå•-ðm£¢fC¡t›Þëtô.jp¨~Ò“Y®'æÊ/¸¹\ø²¶ v°mP¯åV´ [AxP&tl&„'̶[騾jG«…¯¤o1ØÂð _'«ƒš–N,íñµ‡võ”,Òb᫜É!Z,|Ñják3“Nƒ³\ߊi÷´´]Y­¥c{Å.R`“Ö/Ž>´¥'Hq÷ír3'û¶n†t&Í/ jf•Ž>rA8róô=‘Žœ®$°²×阇çëí£á2`PS`F¸—¤MìŒðƒÒ•S=¶A´ñ ƒX§cJAƒ nž^€bPK(JåÜ «\€¹g«  ªÓe[áè°±¾•{&‚ìõ­­DoT¥òÀ`OÆúVöx±¾•³V…‚mÇí/[±Ö·²Kƒ¹º3§“·XߢÕúë[±§MÉZß:)l$°zʘ¬õ­î+ì /ißÍ]ïÏœrŒªµq=˜·7ÛU{x¦à<•sýœãb·çt®s {ÍPy½ûbúnÒÄNN÷¤”¯ÈäÝÞ²_#V³®.ûË x·÷lñµyÚ^­M–pm{ÒqPŠÔÁå%\nVÝÏÿn½‰ /ÍëMôõ»e€Ã‰™HgÔ,›Èu΀ҵÍ,jŸu¼Æ ᢉÇeêŸÁžÓ«£¯úr5ÀËàò+Öð]g0ŠNµ­z«?‘IÂåW|*¾Ÿe¶m»ÏNµ®KL‡¯XƒPÒ›Øóû®-”ëMt~_1X»ªŸ©„qÚÛr­(0©G»Ø¥PŽ_‘½êÜð¼—pmYÕ‹uþ€ÊQ¹~ê^Gë˜Ë“jd£î¶sŽÆ‘rseÒñFQ57Å ¥ÞÄôâW¬÷ày²šèb>›n!¯E?õ¹Žå=g•¨.¥ àÚ’1³wǯèý°Ž Õomx:.§À‡¯˜xS¿"ûH$áZ‚ßøŠÇ”UL‹ê|êçÿ­#M»YhL é;É]ß:ü!-ÑÛ'u;O\û'zÕVF¾ö°¿OéFH‰ºõ´“ḬTŠ‘ð•·ó…µŠ¤ZAGWÂïÝΙUk®…xnHáÂ[Õt«äJ{úZµ¼‘1]s,PyÑDÿŒ[ÌCÂj¢«1tÖ¾ÅtE±ïdn&Ž#ôZþ`|+ýpÆ9¹ÂÖ×,ß­¼ŽŸ¬V><‰yèr›G«…©s‘ºüCÁ_›KfxCV¢ŸŽ¶{³í):e`•'çéóóÕ¬s“ëĦÀÁ×ÈÍÏ 0ówo¹ÿ¦E3–·µ 'dWþ ‹\»€d ÅH ¦ŽÔfƒëp-ý¶ÛŽoãˆ#wÍÊ× ‰úß}nàªÄÁ£Éb¥2™Ç¿|"A£tÊå…ŒVù#¬ývC7å’¶ÀÓí]vÅY!ø€Ÿš¤S_?üe]¿÷‚ÊYÁqžñ^Ê3\‹öw¸Õ〠~êñ±Öøíxàÿºá¦Jåz8ïîß ÆÓmißAŠÎN.Ž´Åuaa*3'ašž6ßÈ¿ÛO¯Íðäd2îÚDå æ^ ‰®‚âŸB8ÂOßÕAå•ÒÅüS»ÐüB/[EJÏ ûV&$õ¿8ÌîD€R¹m¾w´Q”e„€ÌþëW‹›_øû‡²Œ„ëò5ý|,–¨ãG;^{œe˜ôãµÿùº¡wÕÜ ¾iÙtCo5-üaÒ²é†Þ*W¥w¸RȤec×ñÓ@ø¤ecr‰i¬êè :?îZ6ögxXŸaÖ²±ûñaõã¬e³øŠVÍZ6‹Ï`õФesý–šsI¤X«c¿\Z+—Ü*;‘eðW¤=Ã¥¥¦ìX›I÷}qP:¥r ?BÞ;|5©jä#¯î4 ’MÁCÀ|,¹8ÆÍó‘–wÿp2écÅɽ8üf-§94¯ ¿¿;¥>bú¼‰’,¼ˆ¿»‹ðSÓ¯ÀÙð"^„wÛ)ÕWàÁpB^„Ç?O†ó"¸“vןqA©è>m>°í`ic -;óI02Zž¶,H[V¤e+s\f"é–vR»* ÷`kú36iÇ2£’§mRœ˜òê´™àà45ÅÒŽ“Ž›miÛYCÌÄž«œàÒÒ>RtF(4Á…¥Ý••ìÁ.{–®d6=åUÿ=!ÆûƆ¥e¥íˆ”ÜlÒöß4ÒF+å5Nyn6iO¹iÅÒúp\|ž—?1‰AZZXZŠ:i󨼽"¶•-Ø¢Õâ‚Ó-­jöŠ%ugå¾>)•—îAIQuö{·Nr1±Nï^ÏÓNC†ììA;u¯¤¼\@8öÔÖSNt<ð»«>­3H›’—î F 6Æ»½"Æåh{­ü‚´ÖFžc*"Ž4åë&8.9}CÇ6¼Ê 1SêôeƒèÂ1³ÕV!ÄŠãT·sÖ®.gÛÁ†RîqÜw" ,Ü$—ÙÜR1ÃÊ«t¤ÂWŽâLr Ò† ׸éY·¡~K\xñ@)ɬâ‚Rù7— _ÑJÇÂ-"Y _ ¾Š3Ò±=æ Å™[ ¼/˜ÿÒ·ª×‘•W’¤Ç[[*(ÆÂס?c¤c½ ÇMå<ß·Xø¢ÕÂ×fT& .|®*^À$“a/|mç™ÿO´Xø"oíŒ|¶4¨®ŒÙÀÛ•Oµm–ŽaUPwÈÕXbèBù…Am³®ÃNâ9¦AuMUÒI6Òõ0*¬Ô4‰Øyà4ÞpJ ”®‘³ ê¤?³0¨t:&O\Lö§ü¿2¿ø¹ò n†U.À<ûSÕ±µýeÌ—Á6¨ já ãË ?i±¾Õe=aºÝ°t…ÁÉ0¨³„‹½ýeKÞÈLÒ=ºA=ôgÎEYZ¬oQø‰Vd¯Á%ƒ9Û_z^1¨‘ÏÓöúÖ»¹Sý™]Lê‡s¾KÕ¿››íž5zIêÖSçhó‡ÔaŽç6t¯*mwÕ=¾NÔN¿¹]ë4 s2©á“šÀªžË/€¯í/²í»Æš„kۓεðEsßp6ࢉt.Êv Û¨xŽZ}šõg¬Ïë|µ&rbŠ®mfÑ›¸_PHMLÜï+xßì9Ý— ®RîGúàp§ø¢ä)ý­×¶>èM¬Tw^Âå6ágqT†€ŒiÛ}‰ÚWÜOEpÙÄ:5Ñdhbß³2àÚB¹ñ©D(š˜rñý3˜Ç>ŽþRÇbH£‡¢9]!Õ¹áýVC ×–UÕ&îW–3Àeš! cM±D~Ó‰êiŸ$“¨.û .߸²% ×áô¯È©ÄcÑÏ]ˆ'›niW‹ÁWÌÓ`ÊæWô~Sc~—ºPò€kK6ÆW™å‡&rìÒñïæŸÚ]Ñë癆Ù6W=\"},rm{”p-Á¯E_ g G‹J¥tëÒ>­^ÊÁÒ¢ö‹ßÍ$÷¡””Dï¤?cNêé\C[(uõ²*_ýØFAÂ|B8,+]ï d•/ôE­¼s[g°•3£ýV;És«¼{áÂ[Á‘:—Å2d´–y#ÃDlýØ€‹&úZÈ à”½är^'Åè#Â!Î÷‘ŒüÁ¤?³Ø,ž´ï³+Pø! c}ŸJA¯T>솯{ËdlÝ®¢W·4Qí¥tyL¬„Öv¿h»µ}³~Ÿó9ÑöòôÕQêä Ö‡«ÞnÛd ¸é vØ{K,ê)³·p–p-š1¼e†I3œ>b)¾$\®‘­l~ž›¾´Äš—ðoãñžãP´]> ý·(½©ß(ÕÊ×êx©ß°Åþòvµ¨ÿÝYýæ‚«¢gél•þ½ëò( =íLÞ¢òþSŠß».¢ÐÓK_Uþ:ªþO¤fåŸóOû yc³¿)ÿ°ùášò­Sñ½+(Z]ù‡Í®ë ã`O¹“jn®äÔ÷~žR9Y9NÞK¹+ÿ ¸ùúqJýŒèÃg‘pM¹ä>n¸I¸pO¤°ˆÚkÙ?†ì!œYæÉÚIž»mî—ê2Â…y¬B+=Êú™ŠžX®©µ…ÆÌ°Ð¨T¾@¯ìŸø!ôãgœáMùGv QD¸è:—®}Æ¢ëvetì:1³To•ÜãÆÌZÊïäÒþxgAEH(ÿì¿~µ¸ù•Åßå÷X‹±¡ “¦ôÕ¤üs&“òïó¶2°i+ü#º³®MŸIYï.œKnº6}*´à¼‚÷©-¸_Á=ô°zhÒµ¹~;´k5xm,÷…– .Ü]ꕵQF[¼âÓäˆÍ}ÐmžØ|—ÑprÅuùNkðÕ”µ'éyäëY£ ÙÜSùîT¸[ÂyÀY…óîÜ«p¿„Ö¦ë׆ßßR1-ßJsäß}üˆ)ïWàlÌ‘/»íÀTí+ð`M±¯Ác‡ÇŸ'c†~ž;<ÿ ¼ükðnp>bâçøïä‰y|ÒµŸkèÚ x”NH×µ‘3ÿ¤k3àÒº6Púеq“ÞIÓµYµ}2¨‚ó“®tì&]›ë'(¤ëÚ¬JÿÓœL6çÛ¦Kãµi†9g4½]ø$Ô¯&8x©´›ä\423ÜËjWÇËI*ì‚»¾ê¡o=lÑßR#›»® ÷˜År¿|îUÁ¿5ëÚðê­„O‡® ?~Pá1û*ñе±àYÈ®k®ûz1JrgˆfŠ%Â6áá¤òqã¨À“„s %MZdÑgÛ'€<'74>ÈŽ’ªi=(–6ñnøÚ»®M[æDÒÖ¡ˆp -e6H;w±™ÚR,†¥-Jå!uÝŠ%I»Ÿ8’ÖµU8œ¤‚ÇT^»Ü»n‹—]ç˜Ïc´¼ -/H;tmÄÌüVÌÑÃ*ik§@å‘´þ¤[­ü‚´Þ"-iûòé ‡ž¾ iw]›8ZÚKmAþ]?$¼MÚxÝŒ.áÓ™¿p‚–D=ޤ¥vG5$Q7ÆÒ´96gI±íHZ— i˜~w´›FZ¡kc[Ú-&´iƒ¤¥³ç?—¤ ¦¥ ¥É% i)"HëÛÍÐó~xFZâÃ3ÅóÂÕÒz„KÒÆc)–6„+¤õºO‡?–öº]µÊCH\ ŸÖmXy$íy>ꓚê‘p•´–{à‚—îA?‡áYŒwøîHZw |:?€AÚh’6†lYÚIœÅ&mJA'mœÄYlK›ŠâÓîº6ãJû .IË6ÊrÕ¤®² m¶H®6y=·ƒOp°´Ìi™°ë€´þT†ý¤&%\ ÄØ m)\’6ëîAýw'á-ÙS2M”gAÚd’¶D´‡ŠGK›tŸ–B¿Äx‚cöÀéîKÃÖÜ]Öf;7>!ió?K¶O[¶d¹ à i[ò,mÈXy m ÑðiÝPšHv VšÜaZ6¤íÒ0ªO5¸$m2܃q=q‡ƒ¥¥}È•_6/±¿;ô™á`.²g=åÕ·«Îp°´!èîRàÒÒº”@ìó~Ï^”¥ZZž\âl“¶x´ÕÏÇÒÒ:6H•Ҵ癳OêbŠ„«–6ÿ´yAÚ~„XXZÏPyt˜ËIÚ¼ mY¤¼6}7K v—=Ï?¨ù´Ã»(6i£KºO›‡¸j±±RŒ@,M¢<:iw¥È&…)¯Ip°°µ‚¾µK¸€´ÎOª:&i£Oi§Tg1I6nº6 Ò–Ÿq¨hpˆ…¬[Ú0â¸bg\9}Úb“v,3¢¥½…£{ÂÁ=ˆ¹yÚÈJnIÏD­tIÚÉp†’Ô–vÏP(‹ »ÛÁK‡Ýí{ç=Œ-X„pÖm†{0. ˜àˆ6N <ð»«yZgù´Aƒ³Ìl9ÝҲ󮸧ÆÇ§óªvƒ´´p(¤’@d’v+M˜F‰&áÊ₾"æû¥Ö3(«ÙƒÚ%\’v;ÿ}ÚŠA8ÉÅÄÒbXÌÓÆ@‡ìA oYZ¤õÑ8)òÀﮑ–­±4¸ÌÓö4¯ m‰@Å=ˆíßÅŠ™yŽ.ÒèHSžv‚ã’c“ø hiÂÁ mu3°Ý=˜àYÉâë!V¶Î±µ+¡NRAõV©o+˜ábͰ°»NLË¿» )¨Gª:Êb WŽøL2 Ò†B×iÜôN·¡œ‹™­S)RIfEìºZù7— _–AšKlT¶ ê4®¾ŠµZ›xÂyؤõáó_I_øJJÛµ5cákR1¾N]}#¶Á#½€dHÃ<ð»«éXË `ÒàÒ 02[[ oöÂWÛ¡ð‰ _ä ƒzÊ©uZ¹"oTn™-¤ãPSò ƒÚ¾îßOGn6T £ß°òÊN‚ëD °.d„ãdà—ÛÇÆúÉ÷’´©éC:“æ»Mò¯T‚ÒÕõ­ Ó1mEƒß¹éø˜H•ù}$ÂçÊ/¸µÉ){¶2ÂÁ :ÎFX•#ÂÑ%h—JEô¬~¦dyáÈ`¯/¸må± jކAM„¥ãž­¦À§$°FHi¬oíº6é)•Ôüî*ƒ“nP#  6<Ô0dbíõ­-4åE{}ëÝÜ©þL)õH’‹eH˜›íBµIû$»­b„ÃR·åpt¯*!e9]±ûr?NCqÙ“Iñm+€h;û~kÄ»½g‹G½íCMiÀµíIçI]ø¢©_>0ࢉ´ïÙš$ /ͳº—2PØ.›› 4‘SÏ ¸¶™Eo¢ ©°„C“/£‰öœš>#08Ä€pÙDW½§†½¹ %>5([ô&Ruô.· ?káqèÚ˜¶=PÓ+Mú¦ïöîòT¢ÚÄÒ7•¸¶Pn|Å¡!9àÐÄ”ãh¢uìcߪîÔ „ %s­¹ú¤¤Çâ}ƒ„k˪F}÷‰ˆÊ‰ã¦±¦Xr×,¦Ö»phb ùƒjnrÊ?©71½ÖÄÝÚE'áÐÄ]æ¬71›n)Y57ž‚—MôýzF8ºÊC¢*÷&æWÇbàpüй_¯õnñ©oµô5N<$Š@vQMk°wI¸–à×›È)O²8¦Eu4Ô;¬cH•i¥9spèÑpF8‰ÞIׯšÔ]8/ÝC[éûáƒ÷)ݸÁ×¾Ô?qs"!–•ÎíZÂoÒµ±ó…çÉ ¨|½}Œ[93ªD QÉ™U‡&ºna¬œÙ>]3k!Þ®iÒ•ö–y#à VnAåáÈ‹²){!Éå/•t9KÅàÂå”åšÇH¼ø>Vúá 5´ïS97äQŒÜ=÷…‡•ûÙ¹¡¹dl­†³W3éäƒ÷—ÇÄÚ:½ŸNº67#Ÿâ®¢íå¶¾m÷}Š’¤} Qûp®çIÈÞƒXBÛí-[xË®E3Æôµk2H¸h"ï‹W†å—·kd+›/]%ôþm<ÞsŠrɬk³(½éÚ(ÕÊ×êxéÚx#Šýåí5j!Qÿ»³®ÍWŽUw]«ôïCÛ¥]º² ý®tyÖ¼K2Lp­ëÆ[®×ÑYut‹:^çáUÇÅöï]XG‘ØÚ;þ‡p]’á±>ÿ[ïüo¿áw°´nÚ;Þ$WÓÞÑhÓÅs.ñÔ+èÚ;Þìº:¿ù‰uª¸¢¤qS?bú°”K$\“õ8UA †cðï'N•³§ã|ìý/Ü•Ü"Áçÿá{²Ç‹ÌBºîðö¡$„³‡¥³¶ñÃË©ûºYv†Yº¿î†‘wÓàI¼åýu³¬‡ÅP¥òÂsî;µ„Wºo(ñ'‚º´wdåûf§.ºÎ¥ó¸ÐG1uïÙóIw¨ÃE×9>sÃ_Û{½»p.¹iïôéÚ‚ó Þ§k¶à~_ôÐÃê¡I{çú ìÇSzÆbõƒ¯!\ŽE—¯OŒ2ÚÒµ_u†K;D¹mžØU’„ã˱»Ñ– ðÕ”µ/$ø±¦à5 ’MÁ}¹aÀ wK88«p^Âý€{î—ðàµéúµá÷w§ÔG\:h"*‹‰øï>~Ä´ü+p6æÈáÝv`:ùx0¦Øá±ÃãÏÀ“1C¿Ïž^¬ þ%x7819õü÷aÒÄ<>iïk3kï ¸t†öŽœù'í—.ÐÐÞÒ‡öΰˆ›ôNšöΪí“AœŸ´w¤Ï5iï\?A!]{gUúŸæd²¹v ]~’Í“rΈí€x¥ýï Þcnp˜‹|¹r¥3êØn£‘“Tàž“ðU}ëƒþ–[ܵw|Œ,'ñËç^ü[³öŽ_½õƒæÐÞñTx̾ÊD<´w,ø_Ö²kï¤vM‰’Â1JÊ:Cè»m'8x'í àãÆ}Ïç—QsÓ£€(iºî— #z ˆ*ωs8FI¾m†®óãzo²¢¤Oåm&7í+JÚ·þe}7òÝ¥Ïu×Þ?ô-078ßß"ŠŠ?³§¬#´]‰äNþéÜæ®¬¿&·zÞ]×¾ÞÙœs:$Îr[öÎY%í~m¡ç™u#º‹³ IËi91 ™¤’Öñ†¥Ë•C|G%­/“xŽMÚxɘÀXJØó8GžR>©Ž¨„k¤Ñ í8xè Òö êÒ‡ßg¿q6ߤ=÷g•_–mÒvíùCR]†¯½kï„v?7öü8¿Æ6i¯cPHZN—¤Ý2yÃÒ––¯ ò‡R°íhi]ÐóQûEggkÈ`×mJé–;£xAZ^Ö±AZv\XÚ-G•´õÏ’„£¥­¶ -Hë-ÒR¾<}ìù!Ùäm÷ ´Û‚½0Ô.c~ai-wÕë­íÙÌ’–ú]l3“¨íTXZÖÛ¤¥ëÈ'”> ™¤Í![–6`×!i]>¿»_Ö/H;´wäEƒKÒöKåiý´Q܃Ó-ütš5HLKb;hŒ¤¥€p mW„—«·°Ò»öÎuif>%pii7é´´CÙ/Ø–¶_¶%[•†C–¶DÒŽ+;'¸Œ‰]ÔIë6¬<’6ÄÓÒ†iÊ´É ­ \’¶dÝ=˜äé‚IZwžš¬•_6š¤×!eŽ+Ò¦¦­=‡Â[´-mvÊrÕn¨Ç‘Ï >­iyJD›´9¤ÍCO2®HëÒVÐ#,­k—ÊC×Mu4Ië?c™¸ m\b–{0ä,â"ËdvK®¸mûÚ¤M&i=%Ã=˜„DÒÊÒêXâÂ!{ж{àbO‚ÚL9è¤ÍAi õë‰\!-k¬i¨]%“´%´e!´´{–íž—"DZ6­|Úbù´AƒKÒÆbø´Úޤ-çíZùió"sQ%­‡ë'8˜‹œ‘=I§l[Ú¦~¤åqãúOü&%{°kïøAÚlg¢Ó--sF8’¶´{.e×ÅmSà@Z5÷àÜÖ€pÙu¼yC¾æß]µ´é‡¤Í ÒrÒ-­!p¶-íé]ÔÊ/H[V¤ÕÝ'õ;åÕ„¾Ÿvp¾Ø¤ÞÈÓæ!YLÒÒ)š¤byR€ÑI»{Ô)–Ö–®äi/T˜&&Ý!“´Ñ_Ò|‹ÄK±S^a3äkøÝÿ‘{€m×|Ú`d|€ï®¹t’¶Ø¤ËŒHZJ†O»Ìø÷ ¶ù-mO÷Mð€´×³qœ5ÜL҆†O; ‰l–¥%ŸYÉ©®36­ÐÁº¥[°f8c67––±ë0+§$£ºp,ájžÖZ\(Nƒ Ò:oø´T íŠ{àü¹k~[––¶¥:´i¨-Ø+b[¡¨“–»ð/Y+bçê‚JZï4xÂõ8uß`»zÒ‰Ì1jRœ°aà8ŠpAÚC|GÏl‰Â!{pj´´¤”¤=5“•Ó,üî° é¦')H›œ—¤uºOK9Á‡S,-Ÿ––+bdmä92ÙEøiäë&8.9¶äCÀÐ: ¼€v’— ÒËrÞÚÐq%Z1ÄJŒ¥ƒàc|&ð.‚k†ÅÅvRlèÖ㸠®$ÕM ûb(]9†4IEHê$ö¾=§<­ #'.¼€3’R’Y~LSåÜ\.|Ykƒ›lT&Ãu—ÐbáËmÞXøNÄbáËiñVs­Ž _›îºª¥kkÆÂWñXº`ð!¾£/|ù@ØóŠO›´Xø¢ÕÂ×ÐÞK«Á¥AMz¼µe†®SÖÎ+Ékå¤õ¶A=E­€ŽÄã²ò¶Aå¬uXB8Ô3£‰N©bf~aP›QpËJ¸V5ß“01掓}»ž•¥ „‹¥ÁR.8Ò1CÏ+ÇmƒJ×&{Ÿu:Æ¡ÄæMƒZÒ7ðFJåÜ´Ö·f^e‹ÂÁ :Öölû_޵ó˜ 6É^ßÚïg0H"‹²·J'­KW¥‚Ih/ØÛ_66eÝPÊ3Ö·íoÈ×<ð»ÿ“V(IƒƒY÷Pý0iöúVõ†Nƒj¯o½›;ÕŸ‰Ý¦n¶sÅOÚ;Ö‡ ©­ªÂa#ÊÞ!R‡9œYt¯*m§äÃ¥½3ýæöt,w%Û;¯¤Swp¢!úbíÙz²kw @ÀTÊpm{Òyš¾hõ›.šHû%ÍC܈íãæÕ>!ºŸ·zj9æä%\ÛÌ¢7Ñqð$áÐijë_ÑžÓƒ±Äå~™Ò»½d?ûæÕ¯˜³c ×¶>èMÜï‰t.· ? ÷ŒÛ»}¤¢¶ÑéƒÔÑhb07’ߊÞÄ2ièM ¯61»!/¬&¦œ\Ë:öñ¤°é+ Þ%ÏÇãXñº~Vu8µ®-«D¥ÂN¨œýÖGƒu4¥2"ù¬µgëßí•Éý£:ÝÜÁ©71½ØD¦0I÷XMtÞ™&ëøÌ‘¨R‰ZíôÐ02×±hïøÇZhŒ e˜|0®&íküà0™µwú\ [‚i+ü#º*³öNŸíƒÞ]8—Ü´wútmÁyïÓ5[p¿‚/zèaõФ½sýv¨«—D¯4$]3}‚˱è²o{´Å(£­\gx3ÖosºÍ›w.K8¹TŽ“@»i;š²ö…„0Ö‚FA²)¸/7 ¸Sán çgÎK¸p¯Âý‚6]¿6üþî”úˆKMDe1GþÝ'À˜–ÎÆù"¼ÛL'¿Æû"Lš˜Ç'íamfí—.ÐÐÞ‘3ÿ¤½3༈K{JÚ;Ã" ³ÛµwVmŸ ªàü¤½#}£I{çú éÚ;«Òÿ4'“}'iŸdó=5ÃÌ×;9M„+W:ÁÁ{,þZ Jȇ:nmMT+¸ ôU}ëa‹þ–ÙܵwBY,'ñËç^ü[³öNX½õƒðéÐÞ Tx̾ÊD<´w,ø_ÖòáYâu¿—%ÍpŒ’®íñrŒÇqj’Ì(ɺÈÇ£G¸Œ’8´=F%ÍÚ;v”D—*"ŒÂÒ1Jòíøt]ذíÒ«•oK¹{^(='}7òÝÁç:ºHñ¦Ž-0Nƒóý-"Å­Ü­c Q•H.åóœò‘†SÖ_“Û=í§tw6ç28u&i9¶[>¡çyœw&i7öI'mJ IÛlp–HWåᆠ³JZ&Ý!›´A í÷]}ãövg“66è:ŠØó@Z>ïÿ¤:¢.I{“tpðƒÒŇßË´]!m¼„ƒ¤e›´]{>ÉPú2|í]{‡£>óo4˜³MZjWÏ#i'ËÛ}6ÅÒÎò5¶¥eº¥Ý2VIëÚvLœ¤†.›¤¥Òà¿)!&)>oPà ×HëœAZ& .H»e§’v?*,áHÚÚñ§¥åi½_>)‘7܃!Ùäm÷ DVH»Ÿ@bY~ai¯;kåßõ¤À¥¥ÝÚ> -Q¿„r‚à|4,-OºC6i©íF“]GnØyo’6¶,íÇó6iÏëŸÔ [Â5Òn–¥ÝŠ—¤í‡ïi9: W,m¾„ƒ¤ ¦¥ mcBÚá×›´>é>mýFx¸êøÒÞAK.I›²ó†O;¦‰`[Ú’ni aåKÛàÜŽ¬ÀeN’š4¬BÚq>=ؤ ñüîaAÚ°"m2Hë¼—¤-¬¥øv3•GÒÖÐüt‚´Ñ&mnw+s#H›Šæœn ÂÁÒæëp½ð¨I‡hû´1ËUì86´çYR€ËÝJÏqU„ä“kѶ´ŽƒNÚIŠ3š¤mŠÂŸÔ£„k¤‡ëŽ\ú´‰uŸ60T^qBS„ˆ Ò&“´|]P¤õ#H KÛÔo€´=›5Ãam£y•`i«s‘žÀQ±ƒŽŒp mi ¢{®XZÒ}Zʹ œ!¼AÚ¤”X.§O›¤M+Ÿ6[>­×à’´ÑòiޤÍçÅhµò ÒæE 悺òœä,²IÚ|åP½òE–6=Ë~¸ÄÙ´´®$%åµkïÌò5&iéºSnܶIÛä,€´1 ¿.+wÞ¥{°ëÆÉ6i/Á¨¼ m^YÚôCÒæiY÷i‰"tâd×´w¤-+ÒêÙ?NÇOpIÚxÉz%ˆp mŒº¥Ýò°6Å$-é–v?w‚ð"<êØo£¥KWò´žu÷  ·°˜–6r»Ì}ÚIýÆÚ ±Ù9}Ú² mY‘ÖÊt=Š\ú´Aw6¿Áw×܃tŠ ›´c™IK1–v‹GŸöŒsÑGÜ8A‹]³xŽIÚØdH•<í$žcYÚê~©[°ªÛAáʬRt÷€]B¸ì:_¼ˆy@xÀ‘aÈ×<ð»k¤ EÛªñœÕ6ƒ´§ [Ú-AÛ÷Àó)°-HK Kk¥¼â8ûm­ˆ´sF ÆáßÒ󴞺[HöŠ˜£Mµ´äypÞ\«ý›½fi+¿i±SzG·´Ó­Dvö€/Á(´´á@ÚóX¶ršåß]õiMÒ& .,­£¢“6 Á({EŒOú-VÄÈÞÈsIum°KŒ&ùc'ΰ6hCÝ༠ֆŽ-4K Ø•Ò1³½‘çé]°v%:ƒP°¡”{žv‚‹5ÃB%݆NRŽTs‰qçƒÒ•cH“T„d´]u]‹NG*\zGŠ[ñVÝ$š4*¿àærá+X[ 2ÂRHŒ…¯¡BÇ ƒêÈHÇ>¶×œ³¶ ’Õ©›?w™pm A_­¥á,í1'=IPgHìyÅ ˆ†|Í¿»šŽµ\×1° _.ꫵõÁwWÖΙ°V~AZoÔc`eÕ V6Âq'A2 *õ,þW jQéÒ$_³0¨¬ï«ž®„Uí¦R²Ä‡®ËN7¨iä’'¸—¤M×Ù9L}$ WŽêõŒ¤$\ã¦O:ãP^ô¦A­Né5y­ò n†U. [5!=Tg…U“‹V]×ÿEÜ#เkïŽbP ‘ÁÉ뤉 Z¬oå ÒsìoÎJ`E„‹¥ÁS<=ÔÅú­Ö·ú…g‚´!  öÆö—áÜÛë[Û™¬¯•7IûnîTÆœ³šÄá]vàòÃ…ŠjTuYÏ÷Ån9ÎM¶Ýk†ÊæÒÍ—ë$u¸}´R†‚3'“Ôï–¸ÿà·Hà²íÕ…Èê¶Ûgu]‹„kÛ“ÎÓÄðE#E§o0¥=µ»õ·^š÷ê^ÊÚÀ¡Õ`::¡¸—cRÜ›È/6Ñí+LMLeèlöœˆÔ¥uÞ"#òdÖòäD$áÚÖ½‰µœ¡NämÂÏR­ãÐÞ1m{¸®“” ±CåüÝÞ=@\rЛ˜Àµ…r£‰1¨<41cÑ:ö±_«ïŸô1mWŽcµ ‰´C%OÊ?½‰ñU¢î‹DåRâP¿±¦XbŸÔ•Éêº&se²9çüÁ¤½³Ø,Ur…ºZ£‚»gð—Zã­òþYg™¡Jel­_· 5“NœÈ#\+¾Ý^àm7·o—‹ÂÍò¬žzŸb§(IÚ7·¤q³ºˆ1!\ú…½zÊŒ‚ó×¢•›Ç"ᢉ¼/¼…._slå`ó¥½£Ä^¿Ç{ŽCQ.™µw¥7í¥ZàZ/íhD±¿¼]£F-$êwÖÞ¹àʱꮽc•þ}h» ´ËÐÞù1\é:ó¬ùM{'Ø]7iïô::«ŽnQÇë<¼³ê¸8Ðþ½ ë(;C{'þ®K2<Öçáëÿí7ü–ÀM{'šäjÚ;mºxÎ%þz]{'š]×AÇá·8€¨„I<§u0žþ'T£´œÿRŸÌªô#Ÿú9Ö‡%"ášvÈ)=ÝpQ‰=Ù…s“|Û!CIçKg-C…áH”<¥¶žåßíûÿgxoù|ÝÉa1Ô!¼@¯ûkd§ô+Ÿ&8À¯z²òž±òÂ;©n?·%xÑu[ m°ëÄì·ËYùëÏGì0Qûø¢þù˜Fæ·Ú©Òχ6üüõ­V3\\q|Þã±eæø¢²sçÆçÃ}˜Ø¿(³¬üy]õçÂÜ[ÅðÝ?Ó&{(g^>ÜE„Ë®£sù3‰®;¾(ÂEן÷øAtÝñE%üKw5=¿› Ëèø·ñ(ì&j. 5¥ýׯ–µùÅŸ5¥ðX ; k§¾¦œØ¤¦tYD4|³šR÷N¢1û…hÎ~þÏYM©ûoQï.ônjJݳ༂wŒ-¸_Á=ô°zhRSº~ƒ™eW-šu¥T®¸j‚Këêj|JšÝ$êWéÌðSHÚÌ¿TôŽ£,yº–¬Q6à+'d_Šc•(j$›‚ûÒ€;î–ppVἄû÷*Ü/á!jØkÃïïN©¸Ôdq^ÏßÝ¥ùˆ -¯ÀÙðz^„wÛ ¯Àƒá4½ž ŸëExîðü3ðb¸l¯Á»ÁùˆéÆà¿“&<³IMIX›YMiÀ¥S;Ô”„­›Õ”\:µCM JjJÃ" ³ÛÕ”VmŸ ªàü¤¦e†b¨)]?A!]MiUúŸæd²J%í“ìwÊ{„9gPpzœ®eÝ 3VÛ1Šs‘ï—ÌpYÇêFm’ ãÞ¼_õзˆêo©±ê]M)ö(4…|ùÜ«‚kVSŠ«·~jJññƒ ÙW™ˆ‡šR´ÃæøX´÷nôÀh>æÝ[ŽàÏÙ?Õ ïŽl~°ZG-´Ñ$}ŽÜ£®cvh?Ãehï¶-ªC.Ĥ”žõ!7 Ús⨇ö“2Ù¡=ÕùÜO”€chï·¬†ö[ðáÒVn|ùĞǶƒïZ£àó,™n倃[yŒŠ÷¤ÁùþÖÙgÒeÛWr³WKOVééþïØuGéI”~mE én„>œ«ƒ'÷GÆ~43ö­Üœ›í|^Öàðy9$}d¤qÚ-FÆ%;¤M—#ã:w#Ã¥€•Ç‘Ñ4±`d„2Nø9+éU»ò:ÁŸ$⇃‘±¯Ç?ÔS³*•12Î[r‘¥CÄtìcWb¡ý¤WñjérdDedÜÜK—#£ï²N÷Òz^Ë•!ÿdŒËè£áÃÏ Œví+gŒ gžÙŒlžÛfÌ©¥›àIšÝ­)kÀÈ M)æŒk9æ ÊØv®­bãt›8fÒ=sFÁ¶ÃÈpíFp5V•pmd8mθݾ{ƒ‹9cKEû¹aµôd•.(jéIv°22NÍ Ç‘ÁÛДóÖÈ H×Vn\E𗀚Ñ÷bÈd7”O¼=g´»ò0€™Œ¾7çŒ-µ3rdÔ Î!FF ¤ÏAé:äõ‘A°ë`ddß6ÕzïCÆÁÛ#Ã5%C¿~12†¾–ü¡hp92‚12xXD¿£tùCVKo…¨Îu\AÏ+sFÞ†–•‹ÛwR$cd g,ØKˆmŸ&Γ֣‘ ûðL5×FÆIz„'̰–¨š@Op¡ès†Û \™3Ú‰F‡¤‡Tø%‹‹Ó­VzÀÑ{ê!…ÅÈ«‘‘Œ‘áXƒË‘‘õ‘1K†ÕÈHÖœ¡—.ÞÊúÈ ¾çlÀqdP>W4½©à³5g ²hŒ¶õGFô s[VâŒcƉ ⌜²12Æ„í‘QšÔŒ ŠØuÊȈzîbÂÒqΠœô‘áÆÈˆæÈðÎú5q12âbd³¼©¢Áe>ÎSŠ8cxSq12Fé’ó*\Æ!#cø Ñö¦ÜÈ$sdp´æ ?¦Å´˜3ŠžÞ·Œ"Ûi[ð¦Üб—@a=Θ¬B2GmV–®Œ Ò½)7é&sd”¦ÔªŒŒ®0Á!?·Ü|R×…$\3¬9»NA»¦£Zºœ¢12†´rZŒ Ÿ­8£H¸²¦\†Âb^Dàí;8ËiÒ¾2GF.Qc™f†Cœ8ƒ½WJ‡9£yú÷‘±Ë½‡.+2Á 6QÏÚúÍ;€ãȸ¦'g¬¤´]VÖÖyüp82N¹÷Oê’§„«sFüáÈÈ‹‘áŒ9c A-=Y¥›###ã,^3Ê0¨Ù.äþVYŒ Ž .#«^Ì‘OÑX-Î( GFÖçŒ]äá rHI_Ï 2Äuï]ª˜ŠáM匥„hÛ¥p ¶„C×q0æ "¬<®Ÿœ>©«ùþ²7%„ÕV8øpƒËjdX¹)Rá «úÈ`ÎkÞTŸÓǶe=#ÞTRÛ"ΰÖ3\rÇ8ÊÀI«¯½NÔT•9ƒ#ÇSÃb±N´Š3ŠµÒ—5¸˜3Üfä¦EµtgdcdD~×2˜G]§xS)%8c äaøH]© 1«NpÉaÒý¤‘`™àà4…õ•Š iq¸Óœkù¤I]o•OŠÖlΘ´2­EãlÙ yØ^·&—¼å &„ôÙÀT)-Ö­sƒã``,w^+ J¦µ \,ù×áZ }»Yœï'2­ãj Z¬[Ç—«sCByµnMFÔ|TKoe=ŸDŒ¤UfŸ52¢Ï¤²ƒ¥ pÉŽéÒlGP(d,]Ybâólñýx®{&?„»H?Ù<œ2úu~3<€UÖÆpÂÓbÎ(Ñ>hpg3ŒŒ:ÞJ‡‘áBRXšKûNœv#‹œ3ü”Ò4·Uï×ë##æ¡OŸÍ‘qead„)7•­‘Q ÉúÈØbPàgd—´‘±_ËÆ—qF—”¼Ž™)!¼@IÀçáÇf3w~S#pG¿»22N]nmd0~8ÂäE!cd _!ÿÄÈà. ƒ‹Å½´ÜÔ1b¡çqΈe¸–œX¥vÑ#ðjާ«Ì9#rÛG$sSµ…AµÜTŠÚÈ J›gœ=³îMMÙúb{S[0⌸1ÂåÈàЖô¦B.áå>|(§{S9yèyÅ›r¬Ç%dì:ˆÀcsqd°Ç®ƒ9#Œ• 𦼄k##8#Ƕkg*Ššµuµë€ó02Rœ.½°”òj!‚(…x†86ø9Mqæ˜ø¡òÊν¸©¾M¤m\ÕemrvÕR;Å·ñÕ5 Aó}šàRª;6ëHìy25¸ªc¶ek­9H8Œ .±eaÀŠÑ2öZsß…@QJ—^Ö³£Gå•ÒaE½é¦jH<Àï#ƒöµLÒ³£.)]'gƒ@áÌ “X¦/‘•ÊC¤Ë.ÓÖ V¼ÏP¥T4ø}6ˆçÉo >;„‹‘Qž9¸¾"=í&–©žØŽ¢ÝGƱ["ÂaƒÞuLr>¸12Â*d­5÷¥j²×š·S V ³˜"/z(lŒpÈå¶ì€#c˜´ÅZsÛB¢ìOÑž¹Ö\¿®wÆÈ(Xyˆ‡ùòú1;êñÉÛzª‹µ¢æ682(r6FFTábE­~Ž»V逋‘ÁG¨:î>lX¹†äºûPÙfï%üÛxœ^{¨7ÇÍw.Jow*ÕÊ×êxÝ}ˆÕê—^p­¨ÿÝùîà ®\‚Òï>´Jÿ>îÖëõÆÝ‡?†+]gÞ s»û0Ú]7Ý}Øëè¬:ºE¯ÛkœUÇÅõ3ßûņʇãîÃôC¸~Òc}{Í÷~«r¿Ï‡~êjÚk¾ß+è⸀,YF¿]º§ž] „3ì–ÐþýÒ½dývéžvvaºt/YF¿]º§m0ÊJÛ &ÃTwè~é^²ÿíЖrva¾t/™‰ÿóÒ=4ú·K÷’á]—î):ÜÆe²,âuáSRè(á8¬öÑ{°9-l/Ý饻eéíW¥ÛÀê…°^/ i¿¾y»ÿôOyëº<ʆÿ6ÍkÚ[?èˆßÆÌâ,8¯à}j` îWðEÛVÛ?ÌwŽ%5ˆ]QðvçXRÝ–‡nwŽ%5^±ãvçXR½žÉj/áaÀCú´ùöõ{û_¿·þ´ÍÈûgª–ûTuwËö;ãÎÓ[”ŽEñîopŸŸ1„‡é-çž1]ðx/½;WÆr†§{é…\ƒgYy¾’~3¼ÜcÑ홎ý‘ŸhžÐ\zºJbåiî:k×g]>t]Œ œooåÚD>K¿wUWüZpžás×¥ýJò3[û&·íY)èº7o¥s3“$Nšà^¼ŸMž/ˆÒ“ñ»ïW"‘$îYy‡»!”ÊÃ[çToìdåsôXy'+_ÎÄWp²òÙ“Vùû{û9´£ò •g¥ò,ëx²õY:Ø=w4Wž¡Ž§âh?äg?”x¯üý½üȺÛð1ÞžP:á>¡c=zž—‚{ž›kd€@ôLʇ“ÑËó¼Í/7«­r~öÝ1ek‹»‡CéË.ïpv1ã>ëjCRph¨áçjÛ …¸ªÂqàŒðt/Äí·â=”k›i?7ƒpq‡³wÜ<üMv 9,ý¾P­qI›²µ§–¾oB¸8}Qg÷óÜøGO§YÚ³A$ÍÁÙs.‡Ìý-ª¶æÌ:¥Ž¥°ovüôïÿüñ¶;)_þzüò׿ÿuþú÷ÍIyø}ãß1¥‰·nsZu&‚?ÔkÄ[÷ îéÓ©.$ÞºMpµÚ|=oÝg»½o²R¯»/óäJ?·Òý­œò1Å[wÇæ8Ê£´±ˆ›’Îý-º‡íÏ”cRJ¼MÉþ™ë”¨ôÄmJÞ÷5DRzõ>?W2ºMëû{‰[¬ô×}²®C_}+й^¬ì{w_“¨_Hic–ÛsPÞ*¢Ä-)ß‘6Qâ¾ùIé{¾¹‘¾pQ¾ð(øyî?•}ÏbáÄkµ¿¹~¿Õ4*%Þ}úÖ¹‘]ö½(Ñ ÷²ïù>y…Óß”}ÿ[Õ#ß”‘VD‰»­Uú^–x^n+ûÞßýÛTŠÂÕ›CÄ5È^ù[wïèYg™Më{ûÚ©­ÂUªC•/ï%Ö>MÊßJþ¾%&‘ÆÂ|ÿ[.ŸjÖ²ïïo%GY³9÷)“Ɖ»?WýóÓ¥‘}{Ëï;‚´¾9®Ê/åo çn 4{î£ÖÂé²ïý'¼Ê¯îë×!jüÊ÷¿Å!lJíËý­ÏÙdß1aR8qs4ktAE³&î¾Êžò–5›#Îcäs‹¦ìûxsü;·ʾ¿¯Ø;½Dqœ°ÎVY³9ñÖÕ!ôJ‰Yî™?—Ãeß‹z¥œ4{ï¯:#+#íO<‡}ñßr÷øoKI±r²pØ)ì‰?ýÝ÷ÏuæÃ6þy£}ØÃ&etüyëˆ!lçVõ/ߦ·ö+šö¬ý£×þQý›Ðå_>Ë ÇÞíø–Ã·¾Å/ý-ÄVj¾07ð-eekë?ÿ;¿õö¿ÐÈðTÞrð’ö·ø¥·üKo…—ÞŠjío=q\¤M¢ï‹ú–{é-~é-ÿÒ[᥷âßzßdG`O|ÿ8¿ܾ۬Àßúüï?Æ[nËÕPÞú×Ûÿnsòr{æö–X•À¿üñöñÏÿý_ÿðIËó DyLP-1.10.4/Data/Netlib/d2q06c.mps.gz0000644000175200017520000053254510430174061015312 0ustar coincoin‹K®9d2q06c.mpsTœ[’£°²EÿOÄ™CÏà€»êÓ,=®‘ èªùä —É\Ý_+‰ ʽSÂÎêx ãù7˜¥ºÜÿûŸô{þïþÄ?RUþôþT·ÊÖa?üÎ×åäæ¶eáñÚ+LÂê¡ÜÉüÍDþøž1>c˜0èœ!ƒqoó\¯ÃÉWå¾êVxª[ÀÇœã/›QÆ{s3bü¢Œ?ÖAùï\ƒ ¸‘yvÌ¹ã³ª×ø‹›<Õ`nÀ­°‘\M_­Ê’DZYy~ó£êŸë{žGåê|rs¶3¦Iæ[¸NñͶ±þÔÌl¦kGáã3ÆÃuΈɈùh:eÄ|hLsd¼±Ï§ðÔ|(#~]ÍÍŒÜ[a àŒxÜg“óÞç‡Æ´¸ŸvÖuhqmgÄàsÛ Æ?þá3Æ7÷±7Âq­„S¨ÁÜ‚;ðYOBñ£}óOªëÉMþ4áÅEWõ­rû*œoI¸7å4ýÉõ}¸ßz.<}ËxwÓøÎæZØaÜ%÷VÇãÿœpî5&[åúÞž|yTOåZÙVÏóÞ®8ƒwð·røñ5âk·Õ ¼€8Ÿ÷öá³rz<ÞÜ#/}R/íìÁAXóØW[ÈÂ?Nc4§ý;§Ç½õµÔ™Âô O߃ðÓ˸7÷ü'åöGx YyuÂqÒñ蕟÷V8)·“­„ÓCž¥èí)¬zë»É’ ¸V¬1þÙ€[áøÔøçJ6`½V5|°Æ¨ž{h¸‡†û·†ù”S5‡¶{h»‡¶{h»‡¶{hûà/0®­õZÕvm÷omŸ,¾>¥žÂê /XxÁ¾õÿf?(·ò¹M-{¨…G,šá£g¼~™±_ÌðË ÌðÈ _ÌMzœ÷9—³“V=ÏÐó =ÏÐð ÏÐí ÝÎÐíÁ¯šœq.š¡Ïz›¡·z›qšqš¡½Ú›¡½ÂÄ_sÑ‹9õü3ãÌ3ãÌ3C“3t8C‡3t8C{3ô6Co3Î-346Cc®ºYX볃®tåP“]µÎ7aÕ˜CMvИ{¿žÜ «ÞôæÊ»€\ÛøÇCø+ɽA{ÚsОC-uСë|ÿWùÙ€[aÕ¡Cýt¨ŸštС뾒¬-4é IM:Ô@:èС¾9œ¥ꛃ–ÎϺrЕƒ®ꛃÆꛃÞôæPßꛃö´ç«þ–…µ¦yèÐC{¾ZÖ$¬:ôxoõСG­óx‡õФ¯÷蓲ÔÃÂÏoaÕª‡V=Î ï¹öÍt¯”mn•å=·ð—ÎéÌ»oí$÷ÙN·$œ|®¿Ç÷*Ga=ŸxœO [Œ[Œ?u\}Wø’/xÐÃk5ÿàFX}çá;ßyÔ¯yÔßùâ»Øuô ãq†ñð©‡O=|ê±wxìžõð¬ÇÞá±xø×c_ðØ<Þ…=¼ìáewa_{¼ {¼ {xÜÃãïÂ÷x/öð»‡ß=üîáw¿œgÎ3Þðl€OüàÁ†·_×O`NªáÝìÐj€V´ Õ­h5@«z Ð[€Þô ·½è-@oçíè-@o{G€Þ4 ±€½#@Kš ÐLÀ™$@':‰ÐI¬ì-(÷QXõ¡ŸˆsKÄÞqŽØG"ö‘ˆ½£púVMFì#úŒÐçÁµ°ê3b/ˆí½½ƒ8 kíŠÐp„n#tqæ‰ÐmDíÐp„†î„UÏzŽÐs„ž#ô|°ŒCÛÚŽÐv„¶#´¡ímGh;âq8‡Gè?BÿúЄþ#4¡ùˆºz°<;ô¡ÿýGè?Bÿú_ ÿ:_ ó:_ ó:_ çz^p>_ íƒ{eÑù/Ðù/¨É 4¿4Ït®óÒNÆžsBÏ jòm/Ðöm/Ðöm/Ðöm/Ðöm/Ðöm/ÐöÁ:gÆý¨Îè|Îè|ÁÙ~¹ä{>Ï~ ô¿@ÿ ô¿@ÿ ô¿@ÿ ô¿@ÿ ô¿àì±À ¼°À ¼°À êÿý/Ðÿý/ÐÿrÍwѼ°À šOÐj‚>~gLÐgÂoRé­Ïß};ø?°ôôæôæ Í£OÏ OÏ O¯°ê½y…uoBo^á¿>žl_ö‘‡rî•e¿°Í¼~ ?už²GtàOátöþֽö÷³ýàFæoŒ[°î5è|q£,ž:8‚+°Æ«76ÂêS Ÿ¬sªOÑOhÐOhÐOhÐOhÐOøâ|€?…u/³ØË,ö²ƒ[p¾([Ìc1ÖGkÈÁ\ƒ ˜×ê=ÔYÖµý…ý ¬uÉ¢.YÔ¥ƒpï`Ñ*êÅjQ‹,j‘½z9|KްÏZÔ+‹}Ö¢^Yì³û¬}ﳿœ»Ì©5Íbϵ¨oõ =“ÆbϵØsÑ?iÐ?i¦ò~] ë~:UãN¡†O×Ûzà œÀßÂC+ÚÃ^0¡þO¨ÿêÿ„š?¡æO¨ùΟ“öŒ½Ø=¸_dž„y´nOÚ'öböà ,s¢nO¨Û3jõ\>kMžQ“çJþf¡°ÖÛµtFÍD?¼™Q'Ñoæú¶­ÂZÑ_XkÚÜü~ûËÓ*Ÿ[¼<‚­ðøWžþEÿ¼9úäG°kŒzs†×fxm†wÐ'oæ‹|çlÐ3oÐ3oÐ3ofía0ó[ó'Ÿ˜¡sôÕ¿xgðþÖw.ôÏ¿8%§ÐùŒsËŒ÷,ôÒ›šŸµ‡Ç ¯þÅ#x;ÄŸu=öf¦ž?¤×dh;CÏ犌³DƾŸ¡ÛŒ}?CÃÎÐmÆûT††3öÖÜÜ廵Œï2Þ›²þÝSáZt›¡áÜMr¾ÊE«Êñ)Ï‚úŸQÿ3ê†V3ô™¡Ï }fÔä íeh/C{ÚËÐ^†Þ2ô–Qc3jl†ö2´—qfΨ·ïøzËÐ[†Þ2êjF]Í×lïç<Ð^.z;çÿ[ÖüÔÌ÷[oǵßomã?ÕMêFSÕö]š¦z|<”?7ágÐñþ{j¸iÁæépm‡k;Ä"æ1ŸÓâÿhoŸÊø¾½kÏ[‹ïÚI{êÚY{J[§~lݧ2þÖ  ºï´è/mŸêÙvÑ=¨EÏR»ª—ÛM÷£öK¿Ókwý®¯ý«o¿µ'°ýÑ:ÐVåÇ ÷k~\uü”XrÝÖ˜§Öß ëœ5æ¬1g9kÌi0§Á<óÌc0Á< æiß ºmÛ¢Õ“;\ÛáÚ×v¸ö‚{û(º®5æSã;«ýÉݬý-ÝSëywäè¯ò¹¶…µŽ?ZågPNàZæ©1gyj\[ãÚ×v¸¿wæép?æì0g§s^Êýwo¿\ŒÎyiþágX…“p[ VùQeÎÌóù뵟¸¶°wÊzŸ¸‡Ïj?ç¹Þ´ààó³ ço»/ÖøÇ÷·òÏr…˜Z甃ƒ[\Û!þ2*è¸üŸ'ŸïqŸý/¾‚?•Ï>ŠÂ¢áë­kßÅõvUî±&½êç`YŸ¾†IÙ*?pKÖùݨ|AÌ1WðbN¿¿XÇ<ù*üûtro`}Ædõ®M¸6áÚ„kw¬›®s¯Þ¹Z£–õ´f~t#5ª°>×Pý~ÿðæ 1 ¬÷`ñ¹Ÿkñ¹VkÂÁ’;«õáàNçÑ{³ÈE©“ñ)ìÀzÿ÷oqÿ¹°x[ý~òËú\žeþ‡õ¹æê÷ÿC{s¾€?”Õ_3îyÖ³Já–³ÊÕaîÇá~\ñŽÆèz:¬§Óý¨°ÞƒÃZ9¬ÏÁ•rge]7_î³gð¦¼"^ž¥ð×]XŸË—çÒ95Ø€p ¾€¯zO÷Xrä±>¾¬OÎà üü£|~ÇU8a]g:àQ<ê@9CöOáõ«Þó*\cý™­Z ¨Ã¹Xÿx9@óšÐ[€þÖ6@óë ÿ€õ X‡Pê¡Æè³ø%àÙcyƇ² Ög ãþââw¬‰®áRq­t ¬aÂ&¬a™0áì—ô,zp§¬ç·„gLÐCúÖ¾5»‘UYs*š€²“7ü´ÊUö*ËnoÉ>e{þiÈg@D)Ñçǽ^[|•Ä› XýÕáïõ»ðß/࿯s¾½q~Ýøu@Ï€µ|_÷¬ë¬ë¬ë¬ë¬ëìãXãXãXãX×X˘ÿ˜ÿ'˜ó'àÛO0çO0çO0çO0çO0çO0çOà?‚y~‚y~‚y~Šu>ÿzø÷:Ÿ`>ÿÀ|þùüóù¾û|÷Ø÷`¯¿€žÿ<óÆñ©–xŠ)|Š}Àß×õïy-ñï…Î>ÅAëø?ü­ÀßümÀßüíÀß~ýû æpþ<­Ï{ÿ~}\Ç/ç×ñï øûóió?0çàßëzð÷:q^¾uZë·=ˆÒß³äA|ÿ>Íú'ý½Ð0þý¯_þ^â¦ô÷Ë:~©±OËõ[K½½±UúÛ€ÿnÁßnýûéׯõï9ÿ~ùýµþÝŸ—¿Ï`ËYáð·^ÿ^öèöÄbÄbéïYĿߟVZ½Z]ÀßÿÀþ9ÿ»®ÿÎ"ÃßËøõ~Aüûõqý[¬ÿÝ1ŒYuŽÿ dä7Ø÷ß`O¹øåü-Áß ümÀßüíÀßüÖ¿Wžü ö(þ-ûåïW0f•‘ß@F~¹ø èüÈÅo O`í ~Œ¯|þ´Þ¹þÿ]€¿øÛ€¿-øÛ¿=ø;¼/ŸÁ|Vþ|üùxĞĞéï§u-ï`-˽‰áïõ¿ÿß]bRbÒáïe àÃ'À‡O€Ÿï=Þ{4^ýô÷¢s@üÿ^÷âè–g°Ïkn*ý-áß`Œÿ]ÿ®Á¿©Áþ¶ðo€uàoþëßKÞ ý½Èû3Øëg°×Ï`¯Ÿ.zûþ tÑ3àçÈOàï•¶+?<¯ñãð÷:Ï À®|ò¼Æ†Ãßëø`þ+Ï<žy<ó,Àžþyüó øçè±gÀ?Ÿ€ÜHüûññßú÷"ï#\Ö¿Õëú·^ǯº+ýý½þmÁßî/ø{Ϻï ÇâAŽ%þ½Òÿ/Ð]éï ø{ýw.`Ì%ûïë|þ=½‚¿¯Ëß+ýÓß 轿bÏøW ›W@Û+ÐW kW kW _W G×õžWúÛ¿Á¿þ}sXåâ äâ è|t¾Þ¾¾½ú\O^õrGÌ_×ûbþ ðÃwÿg®¯‹/õuñïs/–¿ßæóâø÷å÷üïüôËøÀ·?€¶ñïÿ½ƒ¿/Ëß+?ÿDš¿®kð·[ÿ^ç“þVào þvËßKÝÅð·\þ^y#þýú þþ¯ÏõTÃßë¿yÿÎü;ðï,y¤ø÷ÊÏ= |ƒø=£È‹|®€?£Í5Ð:ÒD.¯ë2`¿ ýt þëß+ý  ºÛ8¯Ëýâ¿þÓß¡_õRúÛσ3Íø÷¢Óâß Ý‚ŒÿþËßË>Æ¿/ào±Œg[ñï%^€Va>_küƳé±ùr/Îëßòü}ÒãâÔ{YÏo=¼«åˆwužk ‡¿åò÷S/ÀßëÿþûŸå¿€çü;àßùÿÎøw>Ög¨uœûý[ûu—þ_/€²¼£¡Þ—75>Ô»X{êžÞÖþ¿®ËçÍò·ð÷iýÛà¿,=Ù´Xïýéå¿Ç¿×ú±“ïèû²Žÿ«—Ú€Ùþ<-?¿.÷:õ¨üõÏŸ¯oiò‡´Ø‡“|H /¼¬OÀ:ezmó{&ø¿£èü7 7}øoþçãqü+=ˆ² èÔð¿Ãü: ÿúUÂÂv6ýÏæU*ð}¤ûn† øß;¡ÿ’Ù(éæÉ©õ¿‰$\ ÉK•¯}ýú±‹’žÃå6\Vàj®XøËÛ‘ØwÑ)mŒ?ÌOа”ùGÀE'µu^æ×rXø¿úëÒH5qÝC…ëþÑ<èâåa~W§ÿMÕ³ œýúéåíµv?îåæägxÀ'’B¢3A[¶?2Á«ÛðûáäNã_jú îÅa~ó%ÿÏ øð ó‘óé×ï3AíNõZép˜¢aà?ç5>ADÍqx[¦üÀõõÔ bÔ0»àc3ÙrއùÄ2‡w¢„ç‹ù AÊÆCÅ­ x !*£dÛåÖñäM 'Wb™ÉKWm“W·îO×û~ÿþ¨eNåÚÁ(ݶDݶ?šÝÇL^Â%š¶É›ÍýyºÓò%œÜEËn¯ï¢m[¢½y‰}\‰e À]ÛäÝöäO[_§¥lÏþ¸]ûãÛ–èo^¢D_§¥Œ¬.Úì˜í¸<ïÔoB”ðÛ&o8¶?pT›ýrk‰xò²„“+ñœý,ÚìP7ï´?BµíoàGÚìзï*áõý9ñþh³?Âlî²?¡„“»èvØ^ÁÛ8ªÍþ{ó%ú:½‹ìÆx›ýn{ò§­¯ßf ¯ïO›ýþæ%Jôõ»÷G¶Ù¹ÚŸó^û#K89y±Ã¹‘¼ý&V¶Ù)·–ˆ&¯m 'W˜É+`¡e›ý‘êÖýÉâS©Úö‡·?@‰Ê6û#õíûãJx}ŠäGÌ—l³?ÒlîRβ„ßf¯ïb›ý‘öö%†Nî"‚Cx›ý‘n{ò§­¯ÓR¶gÜ®ýi³?ÒߺÄ\Xû£ÝŽýQ¤ýQBš1U»1yµ™+¦£fUÂñ»^Nþõûë©ð ¿”£$­Ûcäl¯’mk—7¯Ýè~ÿÚåöÚO…×Ô®RmkßÎë•_ײ„“ÜX¢p‚B,Q\·­]o¯ýš¯]¹N­Ýé=k×Mk×mò®7óÕ`S³ò>';ËU‰>p´Dey‡á„n“w}k"¤30Q¥eÛÚåöÚ ‰³À”é6y×Ûy”Z¤YyW†% '(ÄÀÛä]ëíµò\ÍÊ»ò{Ö®›ÖnÚäÝlƗ媴u%œòA†¯S«Š€ã%:ZÞÓ&ïFÞ¼vxÙ¶v¹½öBℷɻَ[Kmt §(ä%KNPˆ% €·É»ÑÛk/äÝ«N­=¨=k×-kÝ>Ž­¬ýuó8¾Í'ŸJvJ8ý‘ÃÜ™­%˜àc9;®õãìqÕ Ç:Ì¥ÖlñuóœžX»-á÷¯]¸%nU–€×Nó_7Oó7¶Wµ-QÍÛ‹Ï”é}ïzGÀ &`÷ÀuÛöê¶µkníCŒ\•%àU&wH¯)áµ%P §vQ°Òk8‘ìß!½âéõ%üþµóÒ+¹Uy^; }ªm{UÛyé ;¤W¨Ûõœ¼nÛ^ݶv^z ·*EÀëL`Ú¶×´-ÑlJ¯¹ò¶wß ½ÀmÛöÚ¶µÛ·D³gã,+½ \Ûöº¶%:Vzíéu,…üéõmÛëÛÖîYé•ܪ,¯2Mî…Üa{Ïü%o{%§ §‹DIéÜ!ï°½¡„ß¿vÖöjË­*ðÚ9ð«TmÛ«Ú–¨¶8¸*½’·½b‡[)uÛöê¶µó¶×sûx LÛöš¶%šMéE Jð¤NÞ¶m¯m[;k{‡óËÍãl/<$}•®m{]ÛYÛ+Åéåm¯Ü#½¾m{}ÛÚyÛëèUÅeð*lb—KÌŽÔ&øÝ¡½´vN­]©¯½Š½‰B—òxí¨ûuó¨{ƒBm¹-%i&H£ éœ$àôI9M:^¥£¾‡  ¤Ûr'šå!˜µã¯cB¬ÁZ;8$ZáµãÓW-Û(Ô–aÑ,iއ”#àôé+M:^¥£¹•‡²Ôÿ¿[Õއ´å¢XüuB˜„ÐÜÚ=¯ɽÙF¡¶HÁ°<äCº 8}¢G“Ž€×èø#軳qXH®ŽHo$sWFû‡7ü6v‡fGÀ(Çòßć.ì¨_àß ì¨G1Ü2éñʨÁ /éˆÊ(*‰CD7œõ'5 !θøø˜8ÿ9è¢ñ‰0~”cvë(dw˜;vWàîøeþQ‡lÀ?ëðÏ ø¿:ü_þ›ÛÅ~ŒZâ.þ®ìâo°‹<£ÿ^wñüÈrÿ12wôdŸ‚b*#\ügjSù#þ£Ò;=¢2jh Þê£ÆKãã»ß•Q_èáEʨŸAʇž6ü(?Ì~|¡ˆõ$&JØë/žO~þâû¿ÆçeëÞ?þð£Æ‹ØºƒîsKþwR8é¡SYµ.Kâ?wýõÿ£ô½Yár‚ñ5Uþ#Ëz«£üpö?¾^5ìÖØ«2j“v— í^æ §GêØQçe³þwaG½.£.O0žJç—Úµ>v’c?í©¬ŒZíimÔlÁk£ ®ŒZõ8?ê¼­{*û°j‰^Kœ®·ïƒ[–>vëã>òkÏn采1¬•-¬›8mŒšc‰ú¨§É´×GM\´1jR¤£†ßèÂA0jÐ âucÔÄ·£&¾Ý5^qÙ5èñ±1jˆÄçÆ¨!4ÿê£f/vcÔìñÔG ¦^þÞ5Kp}Ô,\õQ³Q5¨òñ•FvÔiáœÓյЫ>j¦D}Ô<ûÚ¨_ òF?š¹°6êÏÂ9§‡_ì¨' 'ž+£V=QµÊcmÔ*iµQ«¤ÕF­’VµJZmÔ*i•Q@†j£VªZ¥£6j•ŽÚ¨U:j£VéàG=/úþùúZ5ëûú¨YûÖGÍjfõꨅ ꣖@¥:j T*£^ª¾^N•Q3Uë£fªÖGÍT­š©Zµ¬±>jæÕÚ¨·…oOçʨ™õQ3%ê£fM\5Ó«>j¦W}ÔÌ…õQ³Â­ŽZ¸°>jÞ¡Ú¨w@û×ʨ•^µQëk£Ö5ÖFÍ*¾:j‘Úú¨•^µQ+½j£f½ZõßÂÿ}\*£fzUG-fŒu˜ûlWàó²ê£fA­º¬1›ýN£–,BuÔ’¨ŽZ" <ê07¯À—”@uÔ¨TG-JuÔ¨TG-JuÔ¨TG-)Ú¨5¸¨Œºþ§2jµá•QÀ¢ò£>ûñ—Ÿ×Ç"ÁõQóë£f ®ú\ôâçëµ2jfÏê¨E‚ë£fzÕGÍk¬šÅ¹6ê˼žÞß+£f×·6êßšB¹ü£µñ€/¹•ʨ¯…=>WFÍìY53^}Ô’©Zس>jÞºú¨™=k£¾J<üü«Œš)Q5kâú¨Y•ÖGͪ´>j¦jmÔÏ"‚?/¯•Q OTG-jáœê¨Y5ÔG-yÀꨅ «£fsQ5›‹ê¨Eœë£f•UµHGuÔ¬²ê£é`Gy|zàGýýTµšêÚ¨ÕTó£ÖÈÿúþR5S¢6ê ü[oì(èÞÿ©ŒZC«Ú¨5´ªZC…Ú¨5´ªZŠÚ¨5 ¨Œ¡ÂÊ@ OUàk QµÆµQk ÁZ½¿ëû…õ3ÉŸþáÄx3âááa,Tùßðƒ?_óÂÍ~¾á¿Âqícærð8ê´~$¯°:vÖ“_?vJb85•USY|]¶,q‚o~DMyû?/ùJzϬ}îL—Á1!<1Ç4Ãù²ç /çghý:ê· ûñ ìu` ñk¡6"ÄPŒC"›£ÜÞëÚ×·ÄÎ1LÐ) ¯|=/Â(¾®Ù¯[îëÃïûúãƒàÏûdóh‚.ž¿ }1t‚‰“ºŠ|Z½Äpór)FyO2ÄzU!ƒ‹¬Œ1~chu ìŸ> 2:í†Û§|T*4~p9\ÚÎ £®9}„›€þ¨pËUúþ ÉîÆË„ñ‡èhç“RÄÚã¨ÿà(3–å?dŠ^-} xÎ6bènˆø)ÒÔk÷—? Í5s]VS÷m~5k…#õØ oáGdoÊ6Þ”m¼)oæMM¬½äÍNjMò¦ë2K–7-Å›a;I¿3ºÛŽãMO¬½äMÝ ÷7o†NM¯äÚ7xS¶ñ¦ÜÅ›ª7Uoª6ÞT[¼YrðÄ×1LÖºÜ÷¸ñŽ„_2ý$gtR¦¹hs7×rß;íÐ×i&سïºmßuÛ¾ë¶}×›:IÔì¥Þ´—¢f/õ¬Tg/EÍ^®ð»ì¥n³—ºÍ^ê6¤÷è¤'Á×díàͧ6_î‰õåœáxÓðœ7‡ÐöÒ(…á„æŒ½Tñ½\Í-äMÙ/ïpÈ›Ã(NU“ÇöÒ:†7¥&á%o:Ž7‰¯ïåÍaçJ8Á›Šß“lãÍ6_îI¶ñ¦¼•75ôgž_nê ƒyÓwÁ`8æÍ)Ì/ãŒÐIGÂ3½ÆÎo ŽxS‘zÓuÚx^úrroÊ6Þ”»xSµñf›/÷¤ÚxSmñf©ûŒ79_NAî»ì´"á—Œ¦™ö)ÔÖGœ'Ÿ3­‰¾£!á…hͦ•mL«Ú˜Vµ1­jcZÕÆ´·:볇޹cMÉÎ#Œ ^hç1Žêiç‘þ:æE;íM ßäÝÆº;twè6îзqGjLL¾àŽc´¶âŽ£îœ$á€;Žª NPÜqL©8 'ÎE «.JxäŽ?ýG~z:<4¿Å6çÙ}#îlì`›ó¦ûöP¤Ÿ³¸h†SÌ5óÓ¹Èk~ÎKý;a4ÇO†€cæ\úÙa8¥ôwlÜY0ùýòæeI•Ò…àûs¹Ã½ŽÅ:HF¬¡¹½p%Ð å¡`]x÷Z1Ù,¨µ/¬{é©è¥½:„ãl– d6ËfÛ{aNÍ-°å)1yâ€<™Ô4¼p¯}Øá©\nw¯aÔ|‘mL+Û˜V¶1­lcZy3Ó‚Z§N§K&&à ¦•$ÓšNxž1­Y¼s|œn 8r¯]`ŽÓ¡B½0îuz lÓÊ6¦UmL«Ú˜Vµ1­jcZµÅ´8û¦0œH†Ž!$ ÏÏÙê;P—›Ýk­|‹;¸SÇnr1«Üñ§g iª$·7yŸ^ꎩ“Ò ) 6^j…é¥\d£;G„ðïÜ ÎFIn‰Ó©Éc8µzò‡ŒB+¼X‰5Ìä-¤Ð*~ç{&¯n|×Kþ/O™AN>ýàzƒ;Pp|Ì&¯ÉÉ'—B2”gà™eQ1¤1Q1êŽ8¿¨`4¡;ŽÑàyIÂ/åmÇ„æùÚ ©µEÔ‚Ž z)0Ùô`ÕÊŽòkñ[žßV‘ð‚ò=GùÞð;)oþ¿Pž{-¥µ£¢µÀ-úíXKSÞŒïomjÛÄó¢ÍˆÅΈŠ5‚>Ö@T¬€W¬Ø¶¢²?bQç‚S¨¢²?ÎYQ±bÛT'¯n|f œ³¢b „¾;â¿«%†ã9:C¿õðÐÂ3èÇ“îBÞÅU ±Ç§0*¿êñG´imah íÔÚÂÛ µ¶¨hmç´¶¨hmAiíImïÐÚ‚ÑÚÊvv‡ÖmZ[lkíª`Yšò@kWµ‚å(o8ÊgZÛÝ&X:tN`8ž£î¨i©T¸DÂáÕRÞ´!XnN›Š`Éþ@gm÷íÏ „Úu®KÆM0oóðŒªs–\{úa…«þ¶ý1}'%†ã9ŠŽ™–÷$¼˜£÷;ög„§ýùþæ÷GÝ–Käâ@¯-‘Niî^¢ØµDyÛFwÃñ5½DÛÿε£×{–8—ñýùùa—øÜsIùy‰8‹üƒŽµúµÐñ!ûïZZ /ìDd0Ô9V´õ$üš9®Ž-ÜÄ׫vâÜ3™æ.g± ¼LéÛðúÁlƒ˜S:”ïŠáØ×\1€ôNd+Í8ùâ ·.€j××yóä;áT Á® é%²«*á›KTÛK,¬Tg0œ „æÖ.øÛ«š¶—ËçL:¾€ <Üמ½0:+Ñ5íâÝ_; g;ãÓUïæ»h@pq}jÚÅër-{Ñ-Q¶ìâ]ƒºq‰’]bسÄɳÕ%~61êßϨ´Aðká[™m 2Á݃Où«‹°]ÉõSµ-QݶÄáz1 ¿k‰“ýrµ%þ¯§ v¾î‡²HÐ6M¿tè:5C”7×£dJ¸®¼õ1ŒzÚþÈså#\W0F½p™..–5¹ÅG¸~á[–£Î4µS9çªà,>2Àu¥gø0Šx>2Ýzws!mYS|d€ëJØ8JÒ/æ=éûé’o&8~Ò«³SW†*ßÈ]|#i¾s¤¾^ÂiîÚf(I3”˜Šú:8a˜à4Ûmsšþæ’ŒG&w4’€£ Ü‘ÌÀ¥ô!8{ƒðï5 Ù«0ç«h‚§ œþf ù¸m‰GãáIÀß½DÝ׿ó„¿pÛK4K§2˜Ê/—h&~,³áG!ûÔ?#€\ïGÙð#™ OKÍK ü;O(ë»8ÁÓíov‰þ†]<w0ñ†ïØÅ!ܳðï<¡,äöýº‹žÝÅÓ®®g'NW®pê‚ïëÏBÀ‰f-‡­¶e§¶¶e§¶¶e§¶¶e§¶¶e§¶¶e§›Û–¥-Ak¯·a9íj[Vc.ÙÆ\òfæÒÄäïê;vjë;vjë;vjë;vjë;vº¹ïXÉ\rs©6æRmÌ¥¶˜«Ò8ìÔÖ8ìÔÖ8ìÔÖ8ìÄ5vqÇÆíiÎTÙ¸§ÛMŽ#¾Nõ”8luW:µuW:µuW:µuW:‘Ý•R§ˆˆÃV·ˆS[w¥ÓíÝ•r­°§»ÒiWw¥sÉ6æ’·2—†j÷–öHCk¤¾‡&§©=Ò©­=Ò©­=Ò©­=ÒéööHsÉ]Ì¥Ú˜Kµ1—Úb®J£S[£S[£Óý: Ö¾Ùäd·§‡Leã^vÜ"F·Ò 8qEýÀÝJ'àÄõÃV˜S[˜ÓMM`†Ö.ùÆá&0ÇeÔa« Ì©­ Ì©­ Ìé®&0.Û¸N¶qlã:y ×¥.ù¾·tq9µuq9µuq9µuq9µuq9ÝÕÅÂUש6®Sm\§¶¸®Ò†åt[–Ô‚¥PV-mXNmmXNµ6,p{uÛöê¶íÕmÛ«oÛÞ¬Êé¦>*C•b{[ú¨œÚú¨œè>*©‰J¿´h¬íûž>*•}_Z‘íR[íwœh—rà:¤p¢] ÇÃïj„râ¡dÝO»¡T|á}Dqà.Þpâþ»xOÀ‰[ø‡­N&§¶N&§¶N&§¶N&§¶N&§¶N&§{:™Èu²ëd×É6®“7s0~W+’ÙŠ$µ!YC‹J+’S[+’ÙŠ$µ!áriY+’S[+’Ó=­H2®Sm\§Ú¸NµqÚâºJ/‘Óm½D°ÑÔKäÔÖKäTé%·wO/v{mÁû?ê×ãç¼Þ°ä±í#ð#ìJ®—›ê‡*¹5#ºÂA‘œð¾ó*ÇÕÒð²ÔÑoÉÍðâªr^$wz81tŒñôX¥}2çwÅPèôð‹†KÙ)©f¸fáÓ90úz*§8픟ÎE÷KȳÀÅId{îßH1þðø ×Þ©~&/ôPüF?Mþù)ÿA9EÀKm%Iº¤‚)xN¡$Šzüáí=ÿº¡Ö^(»è·ðO…~ëzí†c;Þ1?<ß »ÜÔp`b½‰æ9„éë¹/'R–˜†ÿƒn–ÒÎ?|CO.ý@À‹+‚ÓÓC×ÌÝ\Kìrø59ÆÆ"釙m޾ 䦜0±ã¾ç:8i$'/Ûx^¶ñüWoçR©hV0œ’ V8!¬0pB2Xa à„dL 0`8%ÓŠ\üräàyÅÚ(óÿËrÑ®3$œQÙ&2²Mdd“È<í0ϼÈ숇ϦM2L›d˜[²®X›-}Lˆ ¿Ó…1V~ö¨sÓ¦ÎÍutX‘ÁpÊÑa}Žä‡õm8!?¬Èp$?¬È`ø)¤³mÛ&2¶Í…±m"cÛDƶ‰ŒmÛæÙ6ȶy@–÷€ÖQo›i”·§J­Å[_4^Zļ)4ç.K\7n1¹È¢¤B“¥Y)õHÀËÌcï “y„‰å7úà8é>Cg•#Ö^+%ȃãt˜XûêψÞuÒÍýåNøå!%I88ë;cu ŽÇ8:óÔ)˜‰*UHžÏQ®~È) ™2²N5ÉØ¡ßdÏË[y>ª; ¿—çeÏË6ž—mׂ€#æš&ù *«wλXàèv† Ö^zÚpšv½a à°`@v6˜éÎò.„ƒ‡²ïLõ²œžAÕËé^ò¼ìæyR©!á9ÓÚ ižwހߩißeÏËy^zAÀQ‚dz7âd.ˆ!0œ’ V8!¬0pB2Xa à„dìáyÙÆu²ëÚìûϦ¦ýy©pÝÇC DÒyž @®Ã¥%ÃwC Õ[¾Ó¾=äxY i-Éu]ïaEßWÙµü—†?þ»ŽÂ@ç¦Aa8¬v©#”“´¢vZXu4’ZzBQ?päœHº2øHxnL¬%EFtYÍüO[e×lÙ&2²Mdd›ÈÈ6‘‘m"#ÛD†‹"wŠ ®Ù*EFÔD†©ÙŠûfˆð‰ U³•I!Kœ,V–H8¬9ŹçˆèGµ –ڬ܅9vNXNÉÏaû2Ê'ägG~åGXùaE†€òÊ ¢årC2T›:Wmê\µ©óñæö©ÿc~glÔ:Çß{"Ò?,oþf#Ò è³iwü~g*àõÔ¸ WÀÃËÀ ³ötŒ…ó àë÷»à¼súÒÈp$AÀ±wï0× /ySÚ@{@^”Ç>ü|„á^wÑ9׎âÖ9Î= ô¢¶4$híq!2ƒÌ¤+®ª¨º44XOÂóBÏ ^•Ÿß{âÖšdÈ[%#áÿ½·<á”6¯þ~—VXž'à„°<áÈŸ‰Àò<†g·¦& ýC~G@x*H2Ȩy–çI8–ç1ü¾¨ù·ü¦xÞuAL_/}©!åGxÉÚéd^+ÊZ§†tÃË|EÚ`Ò‚~ZŽâ¾î¿û?çÇ<یɟ…ió„ÐÒºãTy)ÀÁYŒW‘µ¬v‚⺴¨@‹ǜ{Ìuãó@ÛÌouŸ¸7¦OTC 6ÃÄÀȨyx6’„—ý2SË#GÀs‘‰<¿“˄ԮKž€ˆ~Í( ™am®]ØíÝC:´MI:Q# ÷’NÔH'ÚH'ÚH'ÛHG)êø?­;Ɉ 8€ð‚tÚ0¤Ó†€—¤[nš¯¤ëCjL¼%áŃtsý"\»¡S|PÛômcPšKª3û`5#°à@³¦¶@Ûä}lsmcÖd‹¼gòiá"…µ2Žœ¼ì¬#áÙäMG”jŒz‚cë?†;<Ý9y…(ß«.=æå9ùœi¼èŒï5©*Ó®7Ù¦f¤Œ.%±¨±&%NrFªd³É6ÕÉ—ÛˆÛzò€mDmì&ÛT'oåK¶©é:çØFðlóܳQþd&Äó÷#;ù .Nòýœgpû‰túù©gõüÇE ÌÙë±I‚Žu/ˆëÒiç:`„ðkVhá$‘…Ihh"øþ,Œ0ëÆ=ËgšòÞÌÇÖï‚§ü—Ïöý•rJå³{-úÉ9‰áqTVgr´CnvøaªrIOæ¥>sA‘p›]¯sü+¨—%»èù©I’úuå%c‚G&(—8;ùE x@À´Àã¨)Íuô6óê¹ ®=½aíAvÂÿ΋ó.RÂM“_(C=Âçôð·­¢›ÑË×ûìx¹7xò‘3IV~þJ‚À"eÒìt8Q'°¼ÀéŸý€8$°é”V6Làƒï´1!„ÿ]ᑌb>^ ,}gt°àXÂßVêx]¹@8åd —‰Àe¡•š(óꆫ¿ß,_Hˆ¡­SKÃêþ¼Ü,Ú€Dà €èéGòh¦“¯\t ¹]{ÁÞƒe*÷':æÎè¸Á/H†¯í‚s¤$µ‹àOæ×/Á À‹ ^ NŽ˜`÷ø|+5P¢ XªTÛÞOØDñQ–„ÿ]Vçú¨JfË¿èàv½à`Âß֯˸¿ž&°· h~†ŸënÓ0/òfvàðõk˜D Ó?×ä­Žä5:k÷BhÛG y&°îŒY—Ëá ÛNDMï=&pç£Ã†¿N«ˆá‡*åÏœo´æyËnª9\nÃ5ªýY]^MQÄ$éTw§þÜ[–;΂ÉGMKWî; "&øæGÔÎ0Ư0+éT ßüˆ&O|ŽÝ¬ ðÁ±Å ϧ—;\\Úüº¡Ï›–ŒC¹öøuAÀ1µíž¯[úëéóC ßúȜʣ¸–Õ0^ª›hrD©Â]´‘B9pSÂguÒ£q½[5ÁßÙ[Ný·{ Šý |6˜6¤Æ–nUcoëÒjúëž•8°"·gí‚^»ÑÆ–k7I F-H8°e.¥î%6_qúÂ7ÂÏðtB-‰ÄÌ" ÀgQC;×.éµÇXH•–exÛ] P%áÀI‚UZ–¨ûSE¹ $|qdutC°?sp ÕÐû¯‡”WËÚå=kWÌÚƒr¥ßnbˆÝ·Hx¶váŒÉ×—n:çcÈO×µGÛkc”„÷ý¨û(Š ãÒy¨@Áѱ˜ŸiI𗼤HÛžs]:‘‹Ñ…Æ\KÍ <_O®¥£¿û=MðòëѱSà`çl6UÚ¥¶½3Ü]8•v©©4GškþaQVѵ2žÄžÍ¦NªO^Г_uÒ¥¦“©žròÂGÇ7&oiæŠviÞÞ ÜÞc±½ÖòLi;Ùt»ÉC—Ù€?’umÆC! ù×où×Aë×ÙÇDb:WÏ/ì..pX] ;?y¹wòa\ôëÒ¡ GÇGÌäüúæyb}òœd]CË^'·.ØàI8:>Bb„B¬]ϰ͒? ¶d¿±Ù‹l”˜[Æ–·]¸^>T½ÄÕ|“›©¥28þ¨}ÓÜGæ{»Õ‚‡ŽKB©£G£ŠÍ‚ðüÕÈ`,Sràˆ¯—KÌøñÍl-‘Ò0¾ñ¹ý‘ Û¹ë#jû#ªòµç#n‹\{à©H[=óSq[äB% $|)Y8¢Ò´¢†EÔ „ÿƒõgNo*¤Š5¡@Zd× 1»¸¨Ä®ä;ÇÖsQœP§Ts ÇçØ‹ªF'Ô”?,p|ãÁ1õâœE­p”¢äýÎðâ´îÐÍ·|²$‡’)Ñ I8à! .ÊÀ‰VR€¦Ö¾*.tRQ&9¤ëB$ pbÞo?E=¤›¼ç6N{fã\ à»6.:LªÏ(ïé4u/­Åg|g„ $üïZf•öós.0ƒ| "á1üÞ ŒªÔó=³úÆ…ÛU¥ÅpBUr.q¦¬ÂröºaZë–ı£~'éM¨ùqÈz4!n&`8 ˜hbmâ…Hz€­ðòéjÒ»˜’žyÉÆ·pVVJ§³ÉÀsï®UcK1Nºzไ/*-ÅV¬ð%𩿆œü½ûÎDqŠz‡ÈˆÛ£ è6š˜Š©±®‘ï\5MÍ«$àØ« ‚ˆ<´Ö‘ðçu×mè%Š&’õ½°Þ’ðy߃Ꜵ‹ªÌ¢ £„ °~ï¾+î¬Nî±qBÝnã$†òÎ9'Ð-ê6y&¦L á°q"í©!ᙼ›è (2Isë; |Ù÷¡ÆNcy×éBJhBØ6y·mònÛäÝníû¥*ï–sJƒ ¢ $ï–rJG±Æ×Q–³Ëø½çÚÖµ ¬kXwËÆauŒSºì¥*°‡³\–ÑÄ(Š!_¿wã¸hBï ÅíÑ„µŽ%NqÍœŒ!à{%®óZbx!q ¦)Û8Û…œmp4tÒr¾/6.†"½†Ùö~ïÆqÑD?Ýàߨ¸Û£ a1œˆß§*‡ÑÄ¥vG1üNÒi.𰓦­GúöhB[ '1.š€A¨fzÙ»¥»*ª-Öžû )Œ[ÝÂ<™¥4‡1G_#™Û!¬r$¤¼dgæ.OyòZ á`ŽÀ׌¦L Ó=òj°wÍu“ɹƒ9ìÁÒ²I°4sÅ%Æg¹£¨Ûg8ÁC{,wXq ,µÇÉÓw8÷ à 'Ó\Nð ‹Æ)0ÿ¥UÕ.Û6¶mlÛ8ضé·ùá“Òò;eh÷Z âë ¬û.(zAæ|É”= ËŸng…9jÞØ^»k{]›ü¸6ùqmòãڶ׸P*0N¸ &Ÿ‡R*íc@™áTàJ_¶×tÞ÷zб6¶×íÚ^Î#7bOšXßî‘;á„GÎI¯ÑüÎíõÜöN5”Û+úž˜|.½Âù<ÚÞÐùTÿoH8ðÛ…êç+âÛë÷l¯áœOÁœäΧ¹Ýù„ú͈¦‡áOü Äqr+1œJ|Ò¹N c r>“û©:mœ$O ßâ€pp½WvÖàë½Q¬…²Y&ÜΧïì\»Zç³Ëù4œóéÄžpÜÈ&ÝnXçS…y#·¸:Ÿ(bˆ|ù†&Þå|Îù4av5·;Ÿ0ÇgXçS‰ÚÕ¨mËBmR_¿“À»œOcÛ8ضq°mã`Û¦ß(çsâsÚ;éÅðÜ;éSJGÞI:¨ 4|Qc®s½wa—‚Úå|Îù4RìÙ^×&?®M~\Ûö2ÎgçÉØ"n¯ÓÃËíõj-^X S:e5’†/ÛRù¦ jÏöîr> ›¶{b sG:X`8Þ^Éåñ5¿s{)ç3§ÓÒ;¸Ÿ óíU.FÝB¡<±‰S곸×àKŒÇèݦÚm·g{w9ŸaÍ»2—HŠ„l–wýïÊÝÝ;r׫pÏxÙ̹Žì%Ú‹^ÜÐéëéÞâß‚ü¿¯›'/@`´Àa¯I=´é ž™<°½^L>,“ÿb'?]ˆé«SŸ÷ë•J6¯³Lpz‰åªdH—Æ`M/–h »%%<.Q<=ñKlÛŸ+±?ËJØÉ“p†¹Dmä_JoF¾¶“æB}÷øî{‹©ëh¶ÀWÁ’ÒEÑÿ£ï-¦Sežßž×îÿöÿà»_%sÑ­¨}'Åtö»±öï[×®@@¼ÀÁÍAmjZ»æÖîIx¾v«†µ÷o•†‰·jÄáùB ¿A#wèc[#þ«hD¡HcŸ©ŒZ¡—sN9À6\?”£2 ý´ý‘çÊG¸~*Gyá>2¹VýË¿ÊG¸~)G9“qK¦•d¡£ p}.Gy#?¢º¹ eþÚ)úÈ×oå¨â#ïÛy­|d€ë÷rTñ‘fOät-K}d€ëŸrTþC¯ÄvV.+ùÃd„›÷rTö¹!'ý£’…»lÁËÜ–¦m’´‰Ý_:°b¶-YrC²È¯ûNËß¶ÈIýʬÝxní ]9Áã×_/'êë¯åÅ×?™¯L}ÝÈ¿þùz¥¾þYþP|ý§íë?VʶKš;xÞ”p‚ë¤v´08ÐJq‚cÉ8މb̴Ǽ졞i«|L·áWRJ w¼}ºâÝ«@¹’©+È2@8dmc9 ¯C«<ÁÓ¨ðœMÞ÷ð#ô+zi’Y;hu¹Àq§foG’²ÜJKMÂ3B¤›Ê¤GùÆ—pšhíqϵ†ºzVÔÚëS ùuññ Ç¢_DJY:á9…úNxN­høGf±üÀڛܡHîÈCý̽”±¸¥ËG©‡.! ‘ð/:ƒÇ&ÖS›§¼û„ƒèGeºåiNØý T:5ëU4O½òæxÈüfõ›þÜM!pÃQ/øc§™µƒT„„ª¬‡U}òkÿ”»'/Ó4=áåä“%'Ÿ¦EÂù=Ÿ!‚×{¢r3Ë)DÙ"áŸaYàðÑ´ÈéWìÒã ÜKÂÿ@·3ZRïiŒ?”p‚¹ò%Jj‰NW–(-†gïÂ¥`ÜHI.1®Ððy‰ÇG(ß b‰!55•%|s‰ŠÜEiÖ%ŠB»:ƒá@©ô,µÌ[é§=SWqàùpÔÕgš¼ã'ïŸo˜|èS?3ºÜøgnò² Û“‡pnòžg®ð´ò²3Šÿ* ü'&ï±0L_ÓpÎ O•ɯ¾ë'1ù-ø-gÇ3*“ mvl\¨lܳÜ?ùäxçGQhíròzÏä%=ù©CV}ò§Ç1å#´ü©Øõ¬B?”pÔÞ5Uf/Ìu¢ßÐH‰«¶ßÐ8Ýú†Fz¦gÍ™ð‡£‹ÎEïÄúŠEöJ4kÞ‰zCã"cõ½¤^éѩى'á  ¹“©]Ñ?ñ¼©‘½¡‘ÚÓºùYT¨Þô¸ÆéöÇ5”Y[8ŸˆÇ5ÒÕsæùa!á×òé„ Q>=FkÜ8ü|ÏÑŠ¡wÉz³§‡¹Fè+œîy\£ÓG).x;M}ûáþ­ëŒ aª^Uï¿4»?moœÚÞ,8µ½Ypj{³à4µ¯‘îR#]SoôS[oôS[oô}8ï¢dyæU»lòðxÁ³Çî$Á³Çî%¼~¢Ïà}Ü_î!îb‰ßö¨=]'áè¨=]/áõ£ö_»¯»pKüµ>^wá”ó…¼n…ƒ«Åãuü, :ؤ'º†ÉWß•ûE¾+7›¦k—·­=Wn…õçïÊ]ð‹q$|yy"Ý¥žÎè'ßJ8ýþÛaëÉ·_»ž|»lÁo`øäÛ ú­xòme›å17>?þ˜Á«OVýÚõ[míç[×^c[á`íÅklüÎ _^µë£ÈD¥¯[¥ýzi™y󾃇ÒV8(-J»à'ÐHøyek…”-žÞK¡Ç]qK¡Ç[¹#31w 8ã‚#ª‹Ní(d€àÕxేoç!<Ûäç³M~>Ûäç³M~> ù™ k‹Hø"?ÑrFî’ŸÏU~>yùùl“ŸÏ6ùùl“ŸÏ6ùù¤åg°?¬É!áËþ$îˆ<äwÈϧ¤ö§”Ÿ¯6ùùj“Ÿ¯[䧤³îÏ— ÷'Ú SîO‘ÀVû@Â3ù1R/q ýƒ¾_=¾|@Ò>ìÏ/?_mòóÕ&?_·ÈI=/2§ö‹”Ÿ¾S^+¤ßTçvÐ¥þ’ôþhgíùù¢ìNÇÛÖû#¼s%¼ÜŸB~þrS不SypþnGL—Šã½ÀQ&ðHeãÔýšÎZá ›lm'zÝtøä£ÚsFA û#ÊÖÐBúôœXÀðHà Šl<ÅD6½›ò¹–m–7X)CÀ!S6¹G©Ö®Ó ¨É¢Òл"BŠÎSÂK§„Žâ"aÅoG —ІYࣲ¼IÂFMÁµ3k¯ä\·÷ëQR_}j>oƃ¬tWž7¯\Ôm”ÙC:ÙF:y`Yå:¾² ×龑 I§½0$èàukéJ®ãüöÞqGˆé>Û¸î³ë>oå:ë´$á™zŒæÓ̤ûä¹î“ÕˆféÚ¸î³ë>o㺼‘c?gZÏ“¤+¹î«ë¾Ú¸î뮋ċëòÚ‘ð•t!ú=jmâ 'µÎ2„³\÷ÅsÝW×}µqÝ× \9§už„® 6ÒÒë] á,×}±\wyni²3ó4AL̇­4œéôøÄ–&_?g8:[d7?Rpt_h~¯w]•JÏDÅU­÷‰38sc´\•Æ_OK|ä–øøðÐ÷tŒ%ôP $Ñëä~bàÒN×Ñó!þ‹†KÙ©±èÕFæpÁˆr àů_Ÿ[ð8êùû1¯{Ÿ>–çôÝúò€õ)< 4éÖ×Ô!üåR´oëÒÉBÝ(þï‘|§ã±¼ Э×d¼äàNŽ}‹ËñKôàù•ý¤iß³ËÇñþÔŸò,Ûø¸ÌcÞ¼GÆØ`9¯Íáל¼ãqï#î눵—or§Œb²‘DrsI’¹Ñâé=Ì%9æš«Î\’e.·‡¹äÍÌe,†#æRcî3×9xÎ\‘»Äض/g®áf×’¼€ð‚¹”3/ˆ¹œòŠ„gsb4·[Ì%IæJ¼%×Q‚Õ\cÓMÄ\]€û#8Íe' !æ’"`8f.%Iæ-%!|¯æÊyS¬šKîc.ÙkÇšk|!¸d®(qŽ˜|©¹¼òžÔ\é^j.=ø!æÁižk.7>#A0——Ž™ ê!Y³hö0­¹:e…ØÃ\œæêÙÃ\¼æ²{˜KÞÊ\ÂkÇÌ4©¹´ÔÑY´Óä‘Y´=/5—Ò†`®dµ#á¹æšî‰m1¯¹ÀþHVsõ$s‰T¤S Í%«¹†cÍå-Ã\†ø:Á\Š3‹†€ÿ{T{5GÌ%Í\ÂkŽÌâÔ›Em-/˜KMù\©T*’Ó\¶g™‹Ø8Bs镼æ’{˜‹Ó\SN‹¹xŸKïa®[5WÁ\òV枘<Ö\†vè…õÄäKÍ5g‘æJ?ðÒ,zëH³ØgfQJΡKû)æ²^uè8Í55:Ì;£è½À >,8)>uͳ Ç€cê'«úüTp‡¼d.Ñ{2Ц'›}O‚Uö÷N‚MÀ‹'ÓCÓO¥MWŽ8XOv kD©1<çàÔ)\;Ì´©íŠ4ü{ÝÜq­µ¼P^)Å0­õν«HhD)œÓˆÓ“”[L+7˜Vü/¿\Ÿ¶Ã)Öf¹Ã)Öž(›ÒK~'ÏË6ž—m<Ï„ÐKn 5kˆ¿`8%t”ã„Æð\ûhqÆFI…: à„d°Â@‘d°Â€á„:yfÕù”Á꟯¯¼d<Óê|¸2´ƒµg8fíà¦5€cv ÓBÉXàGÔ4Ó I¬q°{2~¬"&yÓ+ÚÕ0FaxΛ¦ ÆPAÒø/] áéj˜Þðœ7åä„×yó™÷cÁþœYÞ”ãöæ «KÞ<³®ÆäŒÕ]3åjÄ/H7g‡`ç¬tÖ%u àƒkX0ÓÆ7š 98.\¸)PȘ6~Ý / 8äàä)ËY°®Ùä]:ŸÆðŒƒ;Ó ;%X2¦d8¢ <ãàôæÙT7™vèïf%ˆ_ ü8Ã(Ä´CO6­ˆµCN-ì¬0ž`ÚDTIÀ÷ºƒ¯àrK¡Ö™Vn0mæjt©ÿ¬!àû\‰›1œbm¬¨ã’úúˆgÙÆó²çeÏS‘cTÙÚŽ'û…0Hi=È÷-pJ2HaÐ_ ªsŸzHô}(Õùqþ€’Á  G’±CŸw¹¯|ä89áYÏóR2^Yu>-±®Î_ïˆ/’”íç| Žе§\6GÉœLF^´ Ž5É%áðÒ!±Z+ Q+iEÂC2Ž"|a߈+åÐ;Iû &_¿%r„_çÕ¹Ûôrƒiqäåòµ-r|e"ÇC7Çn7p‚µYn&àk³ÜLÀ Ö&'¢JÖŽó}Ó×ÏKšç¥“–àù¡üÌpÀózižÅó²çåÍ<¯éÞ¸75Îåo¸”<ÿÆ)jÑŽi%†c}<ùž8&Ôž€c¦Õt1LEæ Uà˜–š•5RÓð2&ÜãD¼‘1á Žk¿mêã:oÊ Þ$2yÃ)f™–€ »Ä]{X[¶±¶lcm¹ÁÚå‘KäbòXOÁ<Åó^ @o”"õ±QÖ’ðLµ²6âyNËó¾S'u¬Ó^xÇy )ìÖSòü¥-r¹Ýq†¹€ ë8÷a‡ã|á\ÃÍž‚¬Ø‹K?{ GYæÃØÓ1m:…Æð‚iE§½&Ž\DŒË`îüB¹Œ£h¦…ÇÀ+¼,wPd$)+1üÇîûö‘K•ioʃŒŽ³Àð;ç {ä2óÄ‘‹'àwò¼lãyÙÆóÜ‘Ëìƒ%±œ’ Rƒƒàž«sõó"óÅF¤†õ€$†×< òpÛpäÜ+½Ã|ÝZtÒõðú‹MJÃXO¬Ç­SAT½èä‹IJá%:ìµ!áyê°×†9Z€ï,:9äŠú뎓 ¸q¼´‹iåÓb=Ý·/Þ’;ôüu4 ¼b¹™€ïO bòkï8™ÿbCÕ‰ëP¨š©Ê/6T¥N?1Ïs©C#‰B«ƒM冄žGíáyÙÆów¤ÿõÍ+êÑóí~þñ<ÿÍ*jË–“( ÇúxŠ·¦¥à„Â1­%ผÄ0L õo6uè¿[z‡áDÅЩC刯—~wzŠô»Ó¼ô»A¬™g²­±$<÷€„Ùã]|‹=ç?›çÙ»Ã%oþ´?þÜžF¢V8â`É:Κ€c6œ¦õgõ'â‡u",wþ(ˆ¯—ìUO;.«ýaœ7×Ña… Yû‡q"œÖ–fZ«øç?¼aö0íçÃï ¸4Ê\V@q3ß›ïNÜLÀ Öf¹™€Wœˆâüž~þðùî]<Ï8Ê÷†Ìwko4 ÏòÝiÔž—m<‡±*êßïìùãttÛ¿=ñ ’ ŽkR»àì¶±ÀQ"Côœ\×~á91yÌ´š94ï­#àˆi§‹aøò`ÚNÜ eÎ-ÓxΛ"µÝ£ê¥Çxy6.™»U>xK¯Å)‰Øv"8>WŽÿÈžI`q÷‹²ûì ==çfËìNÏÆ!^Ø%>‹žó ¦¼iÙ[‚‚#£q\õ9¾¨è1¼Ð¨ÇÅñ.”]ºº`1<×|éxZPgx©7,p8õ0ÀaóÚÔ¹gb–E‘ ¾4PÆÏ½Ü†ë \mÃen&ßõ½x¿lÿúµŽOѲQ–¶·ó{¹•ç(Ü‘IíÉÛQ©ý†+á›ñ´ü$»J.1~Eðb‰QúôޝÞ.³Y£dðO[xù´¥^‡L?LÒ›—ÔAhÐhŸg=›ÞrÓ› kØôÀ£é,Ü€ðEyxÝ`Êkç0¹'(7–¸ØÛû–àK^°4:*°D%ª¼9yAO^‡é~˜¼N¯‚êÊz <ÝkR#œPN^öé]YàÚg óþq×ä%=y¥MIùƒw1xRäd ü:JÞMçôpò² Öp.tVj™ü=’1ÃÑäí|·q¥|o;imNyEQ>ÂçL-|”7ušsÂC¸^&¯î™¼¦'/ÂÞ®”óZþœæûélRÞw2Hã!Ï›eòw ¬a&¯¬FÓ’ã] AÂWÕ#mÙŒÀ– ‚õÔa§ò„ÞÇ+éBp´À!1J¯ê¬“z>·+Ö»l‰öPnƒÑ×J:Q*TR`n½Åp"`SŒÛÒ³8T‚"Ò¥4AXXû%÷ÇáäµCû3üÙ&5g½i×.5šáåC{«Ò¿Ô”>€3JÿR³k^±kfÓ®U—¸Y÷-À7–8,°´kfÓ®Õ'/èɯvíR³kÎØµKÍ®™M»VŸ¼¤'¿ÚµKÍ®8c×Àäãšt¯²Û´kõÉ+fò‹]»Ôì€3vííZº„UÙ´kõÉkzò«]»Ôì€3v Šu¤½ ûw6›v­>yÃL~±k—š]ðó2EÑy\b›]3³]»pv ½ü›±¶= éMž”]• |J 6íH8°kéêtÅ*ÔdÙ<¼àºÀï´kfމÀuÏö:j{‡G %Á›“š‘p@¡t/{]ûʛʦĩ"á+…œè\Î-΃vÄÜâõ#¹éîÁyÕϦ2e AUÑë’ÃE ¥™ŽO•œÙÏ27éI/©Ö ©_'ȱC8÷Xc%¶òÌõ9 fŽš®ƒM‡©–„£4õ:Jõœ(O¾¿²Oy.p¢wÈœ )Oó%*:³²ÜÅÚ“ÆðŒ"•ÙHÏ­€ã›Àš¼ng¹«»hN. [ÝÖ§.Š˜BGIr0j3Ë]Ÿ#ÃiÑÓ{æÈqšèµ™å®ÏQ2sTÒì™#]>$ÉÁ¨Éñ(OÔ×|#1y GÅÅp%olFþ[oLÎz%WY(ƒðµ=ä^8¸¸û¶¨WÎó®Ã]OóLttýÇ,½9¹ 7xLÆŽzg[¦ÏõJâýüÁîâû¼‹(5}œoh ¶Ô€B 1χqy¼%àEp‘®:’¾o§€´ÂËÄø²½„wƒáØÕ p”l#ð\öò~ùSà=Ky §¶¥<'¶¡¼¡àh¤a)á78™˜òQLÞ¾ ïăQŠÞŸT*@íÈî·¿ÏG;hݳ?ŠÝ¹gÔÍûˆÉ£ý‘2ìÙEîO*jbŠc„BkGû“:À9jV~)?]ð®„ß  :Ñ Gǃ[cˆ¯¾†Ùa®p$?Ö2ûÓ“¿E~àäMå «¹ôÉ0vØ-!àÄþ°[BÀ±e‘œe œØŸ=–Ű–Åq*M¸e6nzÌ«4™YUËmÜ|Ǩ¾q–Û8±kãlÛÆY&ߨÍ}¿®Óž€ïܸA×a8¥ø] û „˜ÊK꾂7ë:Pë¸À “˜-Y•^$K;å™Ëë`_ƒ~Ÿ3&v9cìK; Ì:cSp]2×scéuOPž€ÛÀP>H޶Aí1ö¢Í¬3&á§¹&o·îŒ Îë¦{+û£¸ýÑ»öGݺ?°¹Ø /÷Gª=β¸Ñ”R '”–w¶ÿÜéµîHF~–w€êû#YùцÛâëÄþfÀ¥çŽögJa¡â#Ñi^ææÕšÞw)yýÆ–†¤cK:Æ%PNº{¢PÉ –Q{6NݼqNðrãÄÒ¸»ºqêöóN‰³q`òWñ@l\:ÿŸ6ëÏê×o>Ë6Á‰üõ”Cz¨Ö6_Åøë‰5\øÍ¯ÿWÿú_¿kB)lصöKýë—¯”×Ή¹Í¯Ô¿þ±ñõOŠòÆ++w}ý³þõÏê×…~ Õ…›®`â¯wÄì¼|‹`ÿŸ~((¾þÌ(+?tNéû?_¿ØµOpzŽÜM~€ëçrÔäˆöôókt¯ éäà¢n’îu"]ÖŒs%ÝkùCñõ ùõt¤·kãf‘É:­_¿”?_¿’_‘oýž¯_g¦}øSõÅpGaÏG¾¦d- Ö%~•?Kü¦¿žê ÷ðæ÷of·ÊÑä¸þ.G­¼ùðSã͆7û}¤û™I÷òJ‘î§ü!ûºyâZ¹Ë<ðòć÷8ŽÒ§†…Ä•,)S=/áÄ¡É!›£¼}ŽÃï£Ü1Gw+ÓÓÐÃË9ZküöÝJGW›£¼yŽÞ`ø½s”Ûs<ýÚ~ê¸,ˆ„ð¿â ÃuglôNÌf Ë 'ŠÃŒÐ¸†Åé#­ÑbÅaéaÜžªa‰¤ëײˆ ¯T7Þ(~ê¯ü•’镊¡eýŽ^w>O¤6T÷Z·ë#¼îg8?K(½o%¼îNHwÊwÆõó=^ÊQ*á´×4•—èÊ× wJÆÐK_¯›¬N{M¬£„áÔ7Ý©?S“ïƒ^H—=BH7Àõ¹Å‘.©!à¯äÆy»|pÓJ8í³íÙ¸7Jä[Gu¯F_àú­Å~½ÓkÏ‚éJÊTT´2-vK8í1îY;v%EŸz­€}ÿSùú%Öláþ•pÚÜ3ùoŠtJ‡0h×M‰û>°¾ ëþa8/q'ñD:‰¾S@â÷¯„Ó¾àÒ™wÚªjÀó•}áæ½?rJ؈b¾ÝnÍðââIò²ä\p®ü}ßÙ°f„2øóŠŽ¦{îæQ\ê8Æå+>‰µP²‹6ÑùÞ¯ÿ®J)>SÂSÚ)S»¶-»Nt…Ì”èÝ ¤)$½r…Ž.2WoìzŸ,ƒgêµ0…ŽéEÂg ÉôÐL”?‰(4üÃ~M7ÎpD¡”Ë^)ô—å¡ùIäþA ý}"oe$&ò®pÿŽ>*ý^Û Iø3Üë^ôËņœBa=-Ëà …R/B7·Ëü£ð°µÚ ºTxè/ËCóÍ« QW?†XFEÞGŸ.„jžñ +<§[ Ü3øB!ÛI£ÌZb¤ÌE¯Ôf8¢Pâ¡Uü÷Ä4)Y£¤üJ}*n 2µÏõd/÷á¢t OMžØ()Ž’ms”7Îñ‚Õ¾1ÇëtLÔëÉÎ Ïæ(Bg•Ût¼.tÕ9ʶ9Êçx%½3¼:ǧ‡.">ÈqŽO•ˆøéáÄÀ¹™áЇ‹Á¸+ýO• |ã#LÐ/£w6ö)xB¥t9œiè$§´OŃä$<Ž*uD÷júzù ¹XN˜?H>^}Âe„‹ãá¸Ï‡!·7J©"àe]÷ÄÁOD;uá¸#ÓXRõTvdŠa–ÁðòAòhLÌüCö yú€—mÝØ ë©|C«¥p>‡/ØŽ¥Oø0kÇw,·'’s7¶˜K2Ì5Ì-æ’sÍÒ[g.É2—ÛÃ\òfæ2ÃsM•˜¹”^ô¬R‘ƒf®á¹û¥{ „Ì¥ÜØ‘1—[Ÿ ÍáEGòQ·o1—d˜K @¡=ÚU³ÚõЮõ(8õ¨ÆrsÄÁ]€L Xõ8öúÃ,EÀpÌÁ³ vyVð½ê1±ªG¹ƒeO¬hXç)NEÄäKõwדêѯ7!¼Tz|( qpTIš„çêÑÝŽ ^b)'® ÁíeÕãØPp‹¹8õ¨Ý.æâÔãôâÂsñêÑîa.y+s O¬3WФzÔR[ G¶×N“G¶×ö¼TJ‚¹’ñÕŽ„ç걟tûs±êÎQrš«_(™K¤×J8Á\Ò[޹†cÍ5Ãsâës)Îö^ô’¯i.ŽÛÀ:š¹„×Ù^m-m{µµ¼l4娉ÎèõHNsÙže.bã°ær@z%«¹„ÛÃ\¬æÏú¶˜‹wìôæºUsÌ%oe.á‰ÉcÍeè¨AXOL¾Ô\ Gj®ô/Í¢·Ž4‹}f¥ä¢†1F1—Åp"jVœæšê† ³ “âCÒÀ0—”Ž™kr} ³¨ øþÔ:þïQ!©¥}.#<†#Í5=“€5Wo ¿/$U7‡¤¢'6kH!NsMmB¶˜‹Ó\jvšêÌÅú\Þìa®ÛCÒŒ¹äÌ•˜ÃqH*4ãÐ{‚ts tæ:åZAáejeŸË^ø\ApÌELž`®u{øg,F åYwôžX°|`Ò¨ëÆZ”àêz~,GM?èsþß5ñuîÝ'ü †¢à葹Y2øÞìÎ<(ðTy•ÂQov9yøAOÀñºžV»Z_§"$#u·0Ãó†Î2Mj$ÇéŽÞ p–tÍú¸M/ÔîxËç©rÀ©·¡'®;½å̘QžÑǽ[@o‰ŒÜüˆF à”`±²DÁ±`±²„á㆑¥>pB°XY"àÌãu¤,pB°XY"àåS¦R &D“ÃwJ\üÁ/z¶ÈwÞÊÑ~ à!ï.'‘¡D‘€rÉŠ"†sOxî5Eºº\>s}èñÖòS^$WÊå3gÊ„á2—ÀÜ.p,Ò1’aÇ`9ž¼¼˜ÝÍÙÄóÀ]á¥L¥ k ŽÝ,mèQ‚ò9k›¡Ž—Ç(¸ù̽¬`HÖÖ0º]á…§‚UkÃ'îüÖ6Ä×1kÃýyáß°?Ò¿üûàYû…fíT·åwxi/m^Ú ï¥ RdÀ;¹ŽäÇ0^ZôV8ó‚%XÄÚ ËbÁê)8²,cç!ÂKóÄä‰×,饅Þ_Ͻ4GÁñqú€£G~½'­Vð+9ùº—öÂyib¬Z!D&£<祩±znKdä†È /Í~§—ör‡—FÀ Áò¤,–^N+Kœypž”%N+K¼Èt²gâ"©‰Éï–8)%/ß´³X>˜~ à¥—¶b#Q$à„\²¢ˆáûMÙÚ¬šŽ—³¶E¥‹ùÅõ\òNð[’wËfr Òð½%¹Íøâ“w–É1XjòH~¦Ä2Ž·`Zû‹MÞYAZ,i¡¹ýb’w~öÊxËÃkD^_óé4q…*ð“4jÍDäæ63x_7×*IOÀqÂ!Û6ø’»$CnH¶E…ØÜS9ñÅäèÒôWêŽ/6G'÷TN|Ý‘£³œVd8 ѸŠòõ‰yß-XBÁàë‹49² óü\°Æ8!?¬Èp$?;LΛ£óv‡È|³•«Sr5o6WŠÌ7›£›j•ê ‡oqc^:yPü†;KÀ1k;Ž›=G¬=iD\É=+˜«J_/ü¤ôޏ¤â—á ­AJ8Ú(x³k…¬-µ47KCLþ†3R äý‡õ€¦‚ô¼û`É´?m§Ÿ?wÔ¤J ß]“š«Ê¾&Õ2@“¿åæ#àXd$wHã 8ÎÒÄÚ÷Þcˆ¡&´q?Œ57—Ä ë/"ü°7‡‚$C~+”!áÅYŒÙòÿð§ŸŽ;‹”g]£éoCdî8ý$àwž~þð5©{N?¸šÔ%KFÈ'kÇIÐÌ;V–8!X¬,ðâôsi-óÝÔ×wK\ÔÀÄÚËä·ñT0 àwJœl“8.­­œÝ–¸ß﬑šbͼIm!q¼j¤*"³À ÉPŒ•Né ǧŸn;šXáˆççX_¢¾ŽXÜé§ôŽ/8LžárY Ç­%z\}6´¥†ÂÁ‡qv¹Òãí} à¨™X0t+E‹£¶y~ã£Iådé™ßâ…âù.˜éEnÄÍYó'X{)ØDpQp.z¡r_àÚ&ÿgÇäOb^™ü©2yÕÓ<¿|j<Šáè}“Cçh .ÁM'ÏÕ¹ –àæÔÝpÝ Ïº›Æh¢wäÏáa…&s²&^ -–Î 0œ%Aá¹V÷ÆŠ`üÀ휧k‰ÉƒäÃß?yÑ //Ó;ë©É?¸¦iRá!¿g\7ÃQ×ÇŽW•M^ßÄ´Ý GÂa <Œ¢E±Y£'öýßMW<8˜Éû3×J¶÷S…uÑ4%Ê 8¨xî7£ÈüèéØY„®ðܧÂ22žª¤=†ß͵< õÃÇK…BòV Á³ñ祥èN %KÁ ¯?"]˜D"Žè8Å[鈯StÜA:Ñ3¤s’$ G¤;®Î#n©ã1¼09éþ$u+z8?Tž;:‰¼ŠºJ–ÊÇÀ Ó/ ¼d²ë¼)'8¦œÌø/öi$/HX.ofo"¤ŸzpëcÃ'$Ò}t9½°ûßDHu¤ v©„ðóìx¦›½ñ,×I '¼?H!ÑF¡Ù;¿pºT)4;¸ŽB—*…Vø];(tæ”óê ÖZ™Ÿ9ÍáºWÛpY[BwÄMˆáËð^ÔY]^ù.ðœpÕǶYQvÏCû-îÚ¾îµkçþîù´R\åJøæ}Ûý1 sCÆòAbx{f…_Kow¨<ÚšüÐ4•aRsÑðRÙå°kÑ\†èà ž=eÕé^ø9PxïÖ9Ó9xÏÂÒ{Ý9m@Îë<‡”˜ìX¢ê›–àKŒ L÷ÊzfΊ?Û°¬`•pÒþ8rU:há`‰:.Ñ9’Bû#Lº+¡Iøy xB*DplöAa8Ö®=Ò¥1ßû‡¸g{%½½J›r{Þu:z Ý:„?ÃÐÂ;!Ê핲 Ö)Ÿ•Z&øÍp4y;çc×ëÓ‘Ÿ A“ðg«ª^…rò*½i넇p½L^Ý3yMO>%¯ÇE_Yþœ9˵@yßÉ ‡‚etX¶sò†™¼²M+ÆÉFÂ3_õ›´é’$°åNã=Ýê·~{«ð!1 ¿êlŒ¦~µ¥ð{—-Ñ"çÓèÎktǼ¬¨7­‰ŸÅpJEìÐ šr†¬zXXûåû•¢„gû3¥B€óyÖ›ÆóRã¡^z¸«e¹Ô, €3–åR3ž^1žfÓxV—8Ãï\"€o,‘4ž¦Íx>4qäªrãiPhRÏKÍxš24¹Íxš]ÆÓlÏúöJz{Wãy©OgŒçº½2ÒG÷*ãŽMãYŸ¼b&¿ÏKÍx8c«ˆ0œVI®cyn<Ããii ¥ ‰Ë6ä>fo<Û¬©‚ô'9‡þÀù÷‡/~‚Ø‚÷þ:§€QÆ‘;G>Pð,Ã?¼üë©3†¢XCÂËܽ£¸[;ç(˜9E]–M¶‚…¯Ì“1ù¥ÖWÉí£äæhYù¤á“r¯ÌË#ù-µ×ÅÕ~º‡Ž†ÙëÕ#sŒž°ƒÈ~eÏx_ sAv^ú¹½Ž£šê8µzòÎðl%>:v–+ž€å ¯mõ |ÿä%°L |ÿäaùÂ{ÐuÚsœ¹òP¡õ‡Öš+Üѧb@£þqOüר„‡ç \nÂMåë!0§¡pÔ;WŒ:!Žg}ïçVÊÞÙmèW! N4V8¾{dÉ`5ÆVž€Uº[¹í·¼Wj}^²ÉË6ÒÍ…Õï—?éb >Œ²T’ðDÝñ+áôµçuYXºµÇÉ ÏîlÙiá¨N5¶ÓÞÒppgÛ÷Öûe{=·Qèy…ØTÕ ¿…Ba­eXá€B¦ï¼îýz#9£P ô _(d;i¼Z)ôØÆCm<ô¸òÐ…£Ð…硞ÝùÉxèÂóP_(ƒ¿χE‰>¶ñÐc=>ßN!ÀC+P¨à¡ ÏCòPôšï¿N·ˆãA;)Q$`‰3¼†d¬¥ôHE}ßÙ°:‰üyEËôvÝÉ«ÉV&Èàçù9}œg‚Bf:@Ý ¤)$½r…ŽÎwª76ÛIS¨×Â:¦·Ê Ÿ)U­3:‰(4üÃ~eÁŽ(”Έ…ÈG‰¢¶r:ìá¡/އæ^Œ€BézH4A’p@!ѱ¶žÈ)2øÂCº Âk‚‡&$gø@¡¯œ‡Öâ²8J’ÒÂN±Ô…8r5O9ºèèôFþ àQ—Éð¤á Ùtp ‚¡y衎(yhm°ýËê!=]EJRèïÓÚ?á!¼+”èÑÇP³×‡ ünu?¿þ“_îŒ ë‘`_(’›{Vg—o§']KxJýWôÐ_VÍ—Ì7(Duo¤L÷´“ ™µ”"ƒgzȆ^H™ $ð4ÊtÅ=µ÷ˆ¶„# %=´Z“ÿž¸W!Ô}´ñª—À𬱩œF˜NIJ„§îœOlÀGɶ9Êç3|cŽ×é˜.%®g+<ï躨ëÄ6¯ Eu޲mŽòÆ9¦WwKxuŽNLˆ80þ0ñCø¯=pÍÂH«œžo¯Hý­œe-pñ—*V¿Î¿îàÄ‹€aþ½®IÀQ³Ùñ¬þoå gÑü‹k?–Ê-+BøéRâߢ.)þç¥,¯'™#L_Çoãj ÇOŒUѳ\¯p·Â£2ê6Œ¦ðožUž§á +¸‰ÎÊX¹õ7ï >þ@À³9šä÷‡ù‡ÿ²“h!, Ïß_ÎÌ?|來 ¸Ž«ØûKôn\÷¼)2üìG"“ ó4'2ñÈh͈ÌRí áHdÆ8…KÀ‘ÈHňŒ¼™ù=è¿ø Ž´1´0ˆ 1K†¥0¨ÈŒÞÉžø:z5Ú—vraˆ‘¶_Û—äpðÂ8ŠEƓǒ¡ % …²p(¶Óc"åo¥HÀ7$C¶I†l“ Ù&²M2d›dÈ6É·IF2°Ã÷HÆpm¬wŽ$£wŽŒC-eHxöžz5ý`ߡȣ-·ÿòjÁ1pM?|瘎ú:!~¬Ä‘p$~¬Äaø½¶ht1ÿö쟼"lyî(ŽzÙ´X|ÎÇN^çí$X——ÌÑÆ`8÷Ð!—Fð²\wzõvÃÉ{á<É9yÔב\ê@¹oƒ9 àØ—³´\ê@?®FÊeª WÃÑo7žÞ–r)ºõ¢gÿÎXc¼­XŠŒîœò’€#ùé=é¾Ii= ÿÈòQf b7,Ö m±ZG½mJ_’µÀ ‹%Æ ™+Ï8¶XŽ“ hrÞVÖ.@0<ß{ŽÀ1šqOÂDæ½"¼´ñžÏѧnŽ Ï»@‹9*‡y~HJbßwÚŒôu¨TÞdÏË6ž—mw—Ã×ýQ>=8pŠoúa…?+Æš'â(ûtÍbxÆéÖ¤3ÄPšä}‚9îŒB²§ý¤–ˆÀéÍ3+d `6ëd,aºÅL«sNÍ‘†oÌQÒ~ì^ ÉÛ)$Iø?ã±1}ÃtCúa…«~ƒBÔÝ, “סëM´ö~é%?Ñ”z…g)òôÏæx”¦ë¡ÒRIª$¼¼Ê&•vž¥pÑF:q3éø]¤7“Î ~¥5W•t¦ßP|u‘1ˆëdŸÞ“5ÊîQ*†âºƒÔ1³„ÈŒ?¸ KqöNï»p!u 5Žž¼„òn¨}Ÿá}Ï;ý}x¦»6wBêñ ð_ñüýÈN~‚#Ö>.N^Ùâ4Zƒáˆ;:¶h˜‚g·«J;OHáq¢Á;÷ü•Ëóô¾Ñ_â$Éü»/á›qÛst¸?ÐGAq*Üe ßüH`m/}ç%õ àWô¨ªÝñuÑÓ_?NO !˄Š+ï¢f¦¥d ßšãl@ÐÞE¼¿¾oÃË.DNj1ÿð¼ªö>:Ö‘ð¹7Lô]ƒ”ùŸ•¬rÚæ%=G3×Ïdý(¢ã¢Ö'røy ØEL'ÚgíI¥ä{ß/ÉŸåVÀM›àð#s ÈØÍæf]j„XŒÆ…Û¬Km³|Ù¬ôƽ” Òñl67«>GIÏqݬKm³|Ù¬¡¬&Û,ò õZ¸ùBÿ†ú‡™í”\'¾óÅutñúgN߯L,w¿óSž¨¼ÁðB÷¤4Pº'Ám Êãáã¥2GyÛóÐfÚñõí°î©âÄ,ðÌ}ÃUPª\|ð0 G~Zé ­íB€,øÚ.pîÉkrU^zÈbê‹M®Š„×–¸TÖ÷GÞ´?éåI8 =ñäM9ùm÷¾:yƒ˜KôÑfh?_¶E“× ŒÂ7™kü`lòºíÞ×'+g¢{+ W@“Ož ¬$¦üT´ 'ïú£;f½YòœüüûßÊsìi”dF-]EÊ–(9\mÃ5’Ÿ#™ILmcV¸&–€¯™Þù-y|ÙC&øË&ïÊÈ5Z>]…¬!ƒ¿£ê ÏZNÛÎQyæÔÇÔ“§ž¢£³ÄƒévÉ´bFˆéYû¿•gíÿ2ÏÚ§ã 7æTÞ \àˆUÒ]C²¦#ÙwCÀñk¼Š ¿¨¯—vç§’Ò§îCO|½l2ªÜœÕ_ýþ^vÞ n,pî5*áîœ}qnÊ-oPžÒNX†òÊžS>µè1{(/iʧDŽÊ¢m‘ÃsÊGo]L¡'ˆfBºÞç…w~ å=€’çmôáwñ¼a(ßÏð¼0¼¤¼ò»(?ÁË8¥óN’¡‰p  ~—MQ½U¶ ŸzÝÙt%˜ü-”‡_·mÚÆ¶iÛ¦m,GùYÛ\ªÚÆÒ”_µ  |êÈh ¨éXà÷jצm\›¶qmÚÆÑ”_µÍ¥ªmEy¨m@¤| ‰öÖaø½ÚÆ3ù`?•A¡*•Õ%ó¼TŠ¡¼–Š€—”wVg,¬]“Så½ÔÄ×s=¯ã¨ù`Õó^ 5ìÁaø-”_ƒ$ú‰ûýz^°m[¦»aXÛ@ž‚¡¼^õ<,ðŒò1ÊqË¡eáÛ)†—¾±kÂoÑ6&YX†ß©m]fã¥ÙGyÚ·é„Öœ¶Ñ†€o¯î¡<ïÛÚ·qA`xNù¨nœD<l§¥$áwjAû6F‹éðjƒò†±°Zp¾ (¯ZáˆòÊî¡<ëÛÆ· Z`xiaƒWYØHy$H*.ð{)oÛ´mÓ6¶MÛP¾M¦m.UmÃø6«¶É¼J¬ðÄäïÕ6®MÛ¸6mãÚ´ ïÛÚ·ÉÕéÛ@m³5#ã}Àð{yÞ“”&Ðþ|áÛη\$¥`(8߯îãyÊ·é¬e,lêö&<†—1l¯‚C¾MRBÖx~§oãé*ƒÞM/lð¼'}›(Õ’¼‹“ŽÿAUÞ /)/‚aÎ ¨¯¶óª7tÞÆX‹áøq˜¹þùj›Þç‰ÉßÉó^¶Q^¶Q^nS¾âÏ{ÙFyÙFù6ßfÐæ„ocâ$÷P^3¾š»8–”—ÊðŒò‰ðnÏkRϧjC[ØLQÏpäÛh³&j“S^7åm¼¡yÞέ¯6(Oz•éJ¸ex^C߯–çíÊÎÂz:o#TÔžñ*­1 ¼wÚC#åM“oãm›¶±mÚÆ¶éy:c´Í¥ªm¯R8ýyÙi‰¢1ü^mãÚ(ïÚ´ÛÖ65=ïÚ´kÓ6®MÛø6Êû6mã·µMò¾MÛø6mãÛ´Mh£|hÓ6¡Í· mÚ&pÚfömêÚ&´h›ÿ1ª…0šl1¯ý/ìc¶ì“<¤>¬ ÁbxÙnGOï¼5ðª‹ñ#á  ~u`ʉe wûÓÇ[6y®÷KÉXNˆc7æWPO’œ7û?ô¡ù\q–÷$~0@°õÒ¸K}ØG¥’ÞuÍ&o h¡7ÁÓ¨ÇrÔaz*ü/;ùþ§?½“O…£GjÀcê \?TŸ²Ôsæ.¥p*K %œ\bسė­%-Ú‹%pýRmä.ô^¢ê¬´~ð(ð¥ëL ÇKL£TÓbŽ\¿U»  ýÞ6Ç÷í9¾Væ8Àõ{µã ÐWÑ’âÉÛ”¬ PÑOðlò˨=|þ3þUöHKL«ú©6”†äÓ÷,å-¸;1Á ÊÛéZCyÿ9§ü7ïÕ[Ò’V$ÎÙ]ŠDn)’G%‹žgزNn«aJ8­n¶5ŒúÃ]Y;–÷!"ô‰m¼•ŽßLâ£R¼kák‘š’ì—ö\Š— ÃäSQ凜g&Ÿ*ìš|*©³8Ÿžž|4ÎÏ“÷ìäO†²Ð‡èxåÍOýÚrc†Gæº>g­í†jʺXÏpÚoÚÞ&'/ÝxL'Ÿ*K8ž|:§9PïA±žáú¹ö:QõÒFà—6·Èe„¿Q“7Έž&°Ô«Þœáxòrî-V³ü3¼nùã¨÷¶9¾oϱÆ;,u!™À(«5ͨa-ÍŸá£NoþÕ,ÿ ¿ÓòGø79y%¥¥'«ašáxòi’ªûZ1ù®¿k=Úâ¨jŽZÈñ-(†fº_Õ¶MwXZ.Ó³ÐØBÛ¨rûèÚ¹Ž)/õëgÛäÒ‘<ŸÚM™áñ’òQ¥ØµÚ &¯2•2)ýúä]Ï;’ço˜üKÛä›xÞ3ÚFz70-1y¹VýÎðaò:›üø`ÎÆä}å=£mvOþ¥mòM”Lª•¶´!µ¸Ôa#Œ¬ç£fx}Ž×ç?dÖW¸^Og ¨‘€—‡öÇ¡xœ8§OÜÖ‡3xþ&½²eËAÄpMè°w–é­= ¤a—×JÙ—ýõë™áèªÄ—‡æ­ûÔ nøÈ uãsŸ¸ŒŠo‚—×Js8Ys–*pÆÚâ?}1‡‹ <Žúߥl50ÁK™v:ÆÐ óìÒ1e8Æ–ª/yj,J‰vÄ×¹ó¹—JË›î^Ê3ª¤ö×QâDPÈ ‰O•{» |c~Ñ»(c4>´ü‚n÷fð=sÔì9ò™^˜'YeØ—ÜñHð-w¥¸x¿r¥ÔÓ|8jT.Æ«V/Ä×Ä×KvžÛ&¿TÚ&gpúuŠÜ¿ÓŽÛtN“Gm:-1yÜ©Z;jÓ¹¶Œð²Óxº‚¥,=§d5±ö¨ìNyéêØº$ýpÉ”Kï¬^4©~©tºpô–¡ž‰Ò{y-ùÁÓ¨kqI.Û^ÙÆÚ²µekK޵ƒÚÃÚ²µekK޵'óµÁÚ’fmgGG©`íƒO î ø¬-ÛX[¶±¶œYû­µ¹GҲȾ“böÊ–™Ò‘ 9¸ày>Œ:QØ zà±_šì¾<üù0œ{1Á+MõT¡øTdŽàVɘ»°¾pmA6¾>ɇÊ%Å›qé˽«—¥Ïæ ×(ó¥Ò(Àñ×-õužx´<“ŒôªˆöH2R£Lç5 /þ»Á#½¿>e»ÛƒHû¹çd7îâKÙ¯ N–päç§_PgA#5/; jgIç¯0Áí|”Ãð•Ϧï¼î}$Ÿ \ÉgŠÏSÉ+ÈçBÑKýXÏüR邼ÀI&àÞc8ÑDY®Êwž{ôÇôÈŽ$\•ÄÀYXà9Ò‘ó‚Ö éäøäAIº”ªEp:Žd=(Î<2‚ƒ¬`‰¯QÒpÍÓT‰ô ’&á9éÔøF ASá0 ©]?òW¢Cð4ª°~ Ï|^ÒÔLóÄ—j÷̘¯ ®+ð9ŠeÚ–¿Túe¿,­ÕK#wL!m॰%|ó#ŽVÇÙËÿµ*á[a„Ô›)ùTìuAÇ›…Të 0|aç¶Êh꣉´§ç:“Bª]dG¥J¶!‚S0€7 é™Ò´ÄrUR¥« é™RÓ©©+Rm£ã PágBHSûg/(!-6NõVLv¬}I&0ßáÚ]òí• š„¯­ÆÓÚåÚ]è¼K;àô±ÇÒÿ†ëŽ—m“#V5ô·–;ÛdžbÚth˜­]`ÇNÇÀ"È XŸñííáGäˆSöo¯¤·WzåU=£Ì*D‚pØ-Ŧ³\©MU—À©=+E†O»'¯˜É»Þb— Út!²ýQÔäÓs2Úcm“ŽúƒûC?pÒÔ3<ï*¯µ/áÙG¦,9Ô›fSz/5 -Yº '½—×Ç™}±ô8#½—šôš6é“|¨{Õ"½—šô.9Âu‰…ô^jÒ à÷H¯Ù%½fSzëÛ+éí]¥wYûg.¤Àé½Ô¤×lJo}òŠ™ü"½pòHzœ‘ÞKMzÉ7!2é½Ô¤wzâ%{bˆ.@ ëu9Ä º:ÐÇB <‹ýÒKŒÎ{ê„,2·3$œ{ ñeiî_9h©ÏQ0sÔSlžÏ1’ÑiCÂQ"µ}VQ£aè·š8iT© äß u€Q›'õ92tAšq~çÆÖÅÔäÆ:xìñnxÓ1§<Ǹ]"¡¯`$wtÆ¿¦ã Çör>7G&Ò_GörºV ìð /ìåjHç}·&Ú)AAÊ;˜K§î½#}OïÉÉg\§RI|À&2Â¥'â ¼îˆÅhv1—jc.ÕÆ\êÀ¹«žå:N° “¶Í¶—õP…cªBpR¡ÚN„a=Ô)ðÜ ¹Q.U0Ë夓°\ âëH.Ñ´\£IøsQûª\úÎZ­õõR.…‘„\öåQ€(æR“Ìuu2én°é8×Uˆ°‡ël×Ù6®³ÆÁ*‚7Ö²ù ¹#6˜áU÷“¹Î9œÈ‹L04ÿw™4tFщ@tO‰Ô1r:¯ªô¤|ÙÕ“2:“‘ó[{/ýõáRùÈ×çrTñ‘Wn%“ÃØ¿^N• pýZŽ*>òFo–êækc|©—]½#Ó¨†\z*î?þ>T>2ÀõG9ªøÈÍ7ÓG~>W>2ÀõW9ªøÈÃÛ®ÓÓG^^+àÕ¶(/t3ÅK‡róžüá?²£ßÐ˃bz¯83^ø:LœX1›àâDÉɶ˜™'q[fz0ažuîKwßÇö DZNÞ<ÉÛ¿0ü¾¯»[מ /¿ní {ˆüëòæ¯{ƒá÷}Ýß¼ïGÙ Ï¿:é{AŸÆä_¿uߪ“~××Oüåséäaë†î ^>?åî CWc8¾ˆëØÛ㒀㌷80Wl/¯Ø )™byÀÑ[3ùl¨ú[¬ÕÅ'æö¸ˆ¡® î¹EOÃ…žøzyÅ6zŒÔÛÔüÔž]ðZ³NGWlAýõéñÌ1—˜湯Q2×y‹¹Ô/}æYûL6'þsЏ“¼$ë4‡,˜ ´×¥þók^À! ¦Ç§ÇDs®‹ŽºöÆpȂ鼧wÄ%½è}ic‰¯g,Ø ½4¹.] ÷ <`AaÒé§ŸJ£ó2t£Ê_ÏXP¦ AzÌuéB¼”å)d"x¸î•UiS›;Ÿ%×½Þ¡Ò$†£š›Hþ*í•oˆ¡•f=G*Ír‰9%0©4å˜ -Rk /»e™«»ÁkG*-*-2¤Qž„*mÊ*ÖUÚ+Ûà ½±Ìeš”ÌõÖ¦ÒÞç¯÷•TaÊÇ}/¸¼´Öo,oNU}oŽÍ­çx“€cÞäÌ­„ZááÍ>HCò¦°Îð’7ToÆ(2XGÂó¯«~o¾1?GÐmåôøÁòfOE´%o~p¼©æGUñ}°Ìe¸£¤^pÌ\š.´$ÖNµK™SX8L}½hˆÑ©I2׉@³  $×)£†ç,è:gµ¢¹Î*âë¥Çg— 8å Aps…ï4·I#°ï_,×M7œòäEÉu_w˜[áeifÜwAÛáõiP'Zùpv˜ú:Ž34ÍŽ’Z;Á›t'†NKŽã áI®KW1¼ìhaŒ ¹.ROÀ Å'd¯i]'…Äð½N^¡ë~x® DΫ亟6'ï‡ošf%'Ì-Çuž€#®SL}`GÂ×qý?:h‡8®ë"¹ÎyG|½ä:å%¹®MÓ¼(×~.cB\ÕÅÏíº˜ñßï,×)E$A ®›à·qÂpìäM×"× °öN ¬é%à˜ëÍu‡Žú:w,‹ý:Ø,pÂÉ3$×Å€ÇbxÉuR+C[Xm)x©ë¬“œ_G¬ý†€v-—8µµz9­­^.ÜõÞ ßêe…gǧY«— ßê%ƒ/÷Òå^½¶}9µuù8=ß¾DÐåc…ƒ%]>.|— »|ôA¯õ›§¶N §µ“ÂÞ%ÂN +<ÛŬ“Â…ï¤Á™N ¾“ÂiG'…Êu²ÓÚËàÂuRXW…:)dp¦“ÂvR°N€’ô ~{'…Ó®N §¶+ü§óÍܯð¯ppŸ²¸Âá¯ðgppÙݺ ‚,I‡®ðŸÎmÜqæ¸c½Â¿® ]áÏàÌ~°*—Ôž\ï*fðÛ¯ðŸöÔ%¼±u ¿x¸œ¯ò-Ì ü‘ÍÈå4ÿ×ã5¯ÜX]ÁG³—R ×yhµklÌžÕL4¾ÞwXáÈq蓬k¹÷# ºË+”Dÿµ±E©$àe´ÜÏ-|$.ƒ_‹°5ÐŽ¨XïÛ]ÉÖhcªÕÑW ×]—Þfè¥)=®Ô²É®îP^Ñ2µÁ'¯Ç;p8‘ÁçNôJFuaÝzE¨_ÿ]ÕIPntå:« ðPn%9 Mi‰ IšBtó“.B¬_ RŠÒ…Ð-¨tËÙ‚Dš^9p%Q(Uy®úËòâÊ; ¼T»ÃƒeìÑët9ßIÂ3²J.ðœBa…2øB¡ÐéÞõó Õ%£‡3|P<ýåyhÎ Ö)DU …ЍHÕã—ûž^w6Ô¾§І‚?‘uľ+ží{*,#÷=öPðÝû.z…á`ßSw$gû±,ï»´–„gûnÇ7ñ¾§0œØwµgßí¶¼×öÝ޸オ†‚—7tŠÞ÷> ~ß¾Û¶}·mûnÛöÝ6í»m³ï–·ï±ïÚPpdß'ï’‚¿—0œžš€ÿ{”;÷]( ûnM*6UÞ÷#yží{‚ÖóüúzÞ¶Ùw+nÝ÷Þ{ Žì»ää=Pðûö]´í»hÛwѶïMö}® >sw5â¾?~æg¤Âc¸ÊÎBÓ#zã½÷ôCÞõ¿×ÃõsvÙ)=@8®]_þ<1çÿNU L?üŸSq’ªxY>Ð÷Óæ¹Q¤&àLÑJI¥– ]‘œ™y>ÏÇF¦‚€ç¹éF¡¥™VbíE4ž|R[r³%äaE,„_3kg žOdzŸÃ3žâQvÄ„gÓÆ´T´3.R±ÜŒáeæ^IçiócàÉü çyžàf §X›åf^¶Ã›®ÿ“ÜLÀ Öf¹™€¬Ír3ÿÔ Rê0‹ ¬ÀŠ™ÎbxÞs¯*ø]"Cää]ÒI:uØ7“ð€ë´•«Sú ôäð¿S`M›À’9ù!¦cªB•"ó:[¢_4)°–°/päú^3‰'0¼ŒãÔ\_w _ù8Np‡h|w5Šƒ÷ÊW‰ Æ-ô¼¬Fñš9Dó0ïùÊžz+æÍh^º… åqx÷Jœz‹>F{NBâŒí³j”W|êã(§SWBâŽË‚)‡ÝBã;/| áECBâLç,hqàw¦M_M›ÄÍ&òùû±HZò8\ÁK# ü^e,lŒ“' ûô,‹ii GvXM“/ä=‰;1y"ŸºKÞM›¼›6y7mònÚä}5ÐyÖu>wÆei’€ãûP‚Ž"¥…õ+a Sk{){Ç”¥YEÂó5ë]–f)‰#ÔE ÔEè¬Pž„çò.t ÔE0RôÄ×qi¹(nÜÛl ‰·hZ8‹á¨ÊELòŽÂ@ÃÀ·a`Ü’p,°Ó¾+8ÊÛÌ­?^.yFÆ bíD• }!ôã‚ðR`ÍÇárQxrõÆšOuØ¥È(õk㦠r€i]4¦W†_‹‚ZG¤>"Û:OÀï´qo¦i¹C¿©K2ÉÍŽŒÔÔëŠ2?Ã÷…7c8ÅÚ,7p‚µYn&àL—W’› 8ÁÚ,7ðÿe¥ñÉÆ±¹Já(W9ï;ÙðÌÊHÝy+ me¤U$ü_–7ÎPVFä³7ÖÊXÂÊ8Ùy£, /VKB`m§,µvÂÊxÆÊÀóÒÿf+óßÇμ†·>þc/ Çx•pßÿãÂ@mö?ÿÇZÃ8âëX.½bÜB¨¨ÿãÃ@M»…&^þc/ M·:ѱÐÄÆΣ¡T Ö^еÓôi`Ú GÞß|%ˆ¢‹,­O HWÊ¥Ÿžè<—Ý$…‡¼ÿ‘•]ã(FÁåÀžy¦‹~³£ãÃ`h8˨môt£‹¢!˜¶nHÿ3mrÉ”H/‚E ,†SÒK[Xë=ÿc£½)hØk6Ú›+HêbmÚÄÚ´‰µikÓ&ÖfC¬q˜IW|#&c‚÷Ää±VpTñì´ÌÄš.¾IhØ´;‡g>âœ'Â@bßs­ZðHV+ž¹×ÑÜjΣ&؆°Ö`Ôe)¤~}Øé^ú¿^¦„–œVñV˜˜«ÈÁG¡¼4öz®á r@œ¯©#䀣‹†SÅ%v¯¡›u¦tnâ$ï´-Yá¥XÏ—…p)€"6]UšIGÜù%Öž‰Ÿ3ÊÈ«JÖ;ŒrŒC¯ ;<þ@ÀñÕÂ?N 1$¼¼ºàH;,\O¬0ÊŒ,š¼;÷×Ó{Qí0ñ¼ Ô…ê\Hxñ2‹¤Õ… ’€ßRúƒ¸înuñ9Û÷Ï×ëNu÷ý“Æ5wQ Ö1|²­;&E]wÛ?o/® áV8kGIòÐ`Š€3o0’LÀ‘ÛÞ;Æm'᥼;'·æú?¹h|nP€;ôľc±ª”d/RIbòÈ XD&3üªS½’Ñø8Š“d‚m ±Ö)V¥ ¿€Ñø' á÷tþøÜš6¹ä.,‹õì ,†SÒKèì8㓵ÃvO’íÓ´‰µikÓ&Ö¦M¬M›X› ±.‡ˆ@R¾4ös&‚¸É¬0GãJ“ö=xM¬_…éí¾ÉLm¾Ö¼+G÷ièt–«Øï Ï}¥bŸX{=ÿ™­5ñ¼;­<3ùb²âúˆ?›'´X` †§UXâëÄM4Ï ¬"àHz ã^{CßDSŽ–K óT?´¹“N~“”G‚e<,ï£Ó.¬¬ÿa’ß4ÅQÆ*ròy¥Ô8êÀtä!&_VJY/-æòÊpPú`¼0»®Âüì2·?¦M°ØJ)í˜ãe0|§¹M‡ÐPíÎp\¥5c‡¡Éù¡¡‡¢ã=bmÚÄÚ´‰µikÓ&ÖfC¬Ëäw²¼è›¶—«"HGD…uóTG|D)K'¿M0$úIÎh¹‡òŠš|zб'š>N?¸^&åu9yãlç¢a8u! ¿gò¾¯z@îÜ¿<ó“÷¢êýmÂeÕ Ø‚¯Õ–×PªssS›2`q£µæ¯WÅ3=ÿÜÓu«™PÏ¿ú¼¤Â[ Ï"Ò.(z¶K`8zÃjn5Z©Îc8¾ÊOÿu¯xBxþ^¦7’2‘pà0r—i‰eò•× Ïgví3åÑË\pãν܆ë \‘©„¡?Êz†³‡‚yX¿ÂËŠr;9M|VVÄ›o¢{³5ùëSmí¦ºïQ⦠ðn·¾žçW†,GsìÂÒÙÃŽ9ŠžLõ$É"ÝëcVë·Â¯åÃxC‹áëŽß!¶¿.+_m_—äׇœZ¤.ïÞóuµýuYùºjûºæ(/ülÜ–ñæ/¹CzÉMË–ðÍ9ší9ÊÊé;»çhvÍÑXr±Ò[Â7?B÷Úý·ç#s(EY“ÑB¿¿¾oóyS˜.g|~‘÷(\t¨…‚- |ö ‚ë´éÝÜ«çýõR]p½Q(„ÏÛÐ…Ô|YÎ?¼Í?¤üHð MëY‰&;1Ã…ºàI¢hØÅ} ¥ì™0‰’(C‹Z!_áWÈwÞ)_EŽÏ‚f;þ¶,Nˆ.ôRì03JÞlä2ÒÉ[I'¨¯Ò©tXfÃÔS:'Oï~:þw&œMa¤ˆtéÒTo ¸á3sõ1þ·óKÙ[¤£AÜ-q†–8=_!D‰"Ó‹¬O$„?Â\aûR⎮AœÞ’ðór4.»Þ íK¢DOS¦G$ ‡y½ô($ðú\ ¼‡B–¦4óóË+á©9ŠqÞfûc1…Tç{±’ΊÜáÒÕ—é$‹tRj6èUŒ«J‰Kœƒ+IxF!¯ž‡9êÑàn:,+Þz©ùN ‡»8LÆÇ°°ŠÙ4 —Ú6,y® g.5ÓàŒi¸ÔL€ŸW `Œ”àôèlÚ,À G„XÔØ¥ff8 Da.5 àŒX×u QIZ ¯k+Ó¦ègø~ êë€B…¢¿Ô=€3ŠP(² ö"ã!¹‹B›¡ríb廬§î |¡PüçmJƒˆ^äkzHw2Ø ÂÏ«0sÞîY»Þ^»¬¬]ߺv% †ƒµ«·f>škû´î€Ï¶,½mg¢™Øã™M;^W†V«¿Ôì8€3vüR³ã> €îw¿|½b¡Í¦…®¯ÝÖ.×>"ôNþ ܃é5Ú÷ôl‚ñÙÚ-Z{$°v~æùrí¹íµ›¶÷R³½6`‰ ¸$}v=“¶íy&)>‰áTv–X /FÓõA…¤é‡@ÀQ*c©ÅA+1ùýy×Þ"xŒ{>žø ˜mmç XžX8¦¶ˆeªöX´Xì"°$ …|*, l4LòÍð{ ,é£ý”ûg’‡Ð²8ysê_!ø…–ñ¨>½\ H¡ô€3p‰”ñ´Y‚*âß{ÂpTíçe +é4xLl…eu¢§z|@×*2>6À$| 'îJîEEš _àH‰Î‡LH‰Z¬ðÒ=ï”Þvÿ8EljtÿûU!m#m#åHgmà-¸ »Âï$m#]àH7õ\Ú ]h#]à²ò“RÙX{ØZû¿ë¿vÁú…S²x?ä%$@k/p™:¦Q%éŽ.™œL' Ú­-BÊsØkk#®S†«×ÁV8jS(‹uLŽ7±öÜb £ ³ˆìJúÏc–äϳÄ7ôö$|ŽY”ìbÈѯùô̱ïÙAø³¨>&ʱWÁuü^XÕäôL\÷ñ¿ž7eÛ…’O•â¡^Vû‰ù:þZÆ‘J¢t˜C8*§,Ë8ŽV¶@Þ¥Z&/â&^Ë%'¯˜ÉƒÇv—É;&OwöÛ=yÃÔY†õ~mmòf?å‡I ê,_USíQ9ùž«s™úEï¨=Zàl¡d]Ï/õµ%»õùñ¼(Iƒäì+(Q½Ì…†‘8ÆK¾^>t’&áPOûNËVFõ‡NÞh1A‰QY ›íÏægõ©¯¦¤nž? /_;tÁ”Ÿ†“¬÷=Ï ãGÔúö?¸çÊþisk-2 <°³Âçí=:/â·½qÄskÉÈÀkÙ¾n¯NOƒ˜WGödˆ£ôáÕ÷G0< @ùxzY ÃA)vˆk´!xò¶ß1+s†ðÜŸ1Α‰ÓWÌ´vJp€—R!<»o%¸Ô÷êôÖGÞ*µp¯ÎlÃù$÷Èe£×jݬøC™oN}„²üC‡†®×¯£6/,ðûÊù!üŽrþ^.1“†7³µDê6†×?b7?B¾cøÆGÄÖGˆu ßøˆÜþHm%rÏG·’¹Ö‘º»„á‘Û9W>²o%jã#¨¼þHÁ“wa8Žñ–¾pT&áÿÖ¶sЏ£wˆ?’q |c‰úæ%B)uèÁhRL' ½D®!BøºD᣽ö/qúé%Èþ|òf‹‡ÐÝ NQˆ% †Sb‰BÂ…vìûœEE'äà÷ÑÊáS±n¾¬˜'&Dt…Apþ>É"1ÌHL¨ÈØÖì,pÌY¡Ä„ ¾ŽKNµáž€—‰ ѺÞ2]àeUSg‚À…LqíÞQk‡Yîc4²J)‡K½Ò4‚ðµŠ$õ.õe1\ôq#_J+AƒG[,|ç¤í{ö]b8 T‚ƒû#IæŠjLk2ë•qðû|•â^æ’·2|9è½—72Wâ.޳^bs±•–VÌå…QÔÚ³#”£ŠL¤%b.‚ÁÀWæ²2nÜ$°í£ ©­$áo+cŸ öö0—ÜÅ\Ša.1¦ æRmÌ¥nf.'1üÍ: ½³÷tz¯÷0—"˜+ÝÝë{Bs U$š€gšKùj;‚¹‚—ž"¨Xµ¦ J÷ó=ÜŒ¹â? „#ák=¦ê‡=Ì¥v1—mÓ\¶¹l›æ²mšË¶i.ˇY3ñXsYª8 j®KUsY¢¸2Ó\ j¬ï”‰”“Nñжqm:ɵ±kÓI®M'¹6ä¶ÉtÒ¥ª“f›\']ª:É¡ŠÓB'e…–ªó ÔÕ-ð{ÙÆÓl³4qÝ`߯6þf¶‘ÃoÑ6š€#¶±rÛxNÛ8C²M ͉ɗl£½õD­bô£ƒÒ$|)ÚôCµkÐ%ÛCzÜR«€áw²œ‘’rGì&Úb7qsì&@šú¹L:ð £m41yÌ6k›Î¢P,ðÜrB³P}xá^÷kÛÌ2¦éà¸;qß¼ÇPè;g¡$áÉTCìüHìŠÝ»õS¡r]'‰¶ØMÜ»–Þï•»Âz‡Nr['Õ˜‹‰Ý¢ø’¹‚ÑÄÚs÷Ú¥"^й¢Ô= _˜Ëv1>óȽN «Þ+í= ÏÜke˜Š…‚¹vÅn‚‰ÝâdÂæj‹ÝÄí±›0~ƒæR–€#æ2vs‘±›sŠÑ\‘»±vp—NÇØI­÷NЬSpÔÚ!s¥Öh w@ær©í¸È˜‹ŒÝdJxË=̵+v¶MsµÅn¶i.Û¦¹l›æbb·Us]ªšËRÞÔ\—ªæ²Ø›Ê5×»¤Êá÷zS®M'µÅnµé$צ“\›N"c7¨“.U„b·R']ª: Çn…NlcSõZ³%¢-vtì6ˆÜ¶i‹ÝÄͱ|1gßÀ6Òðò¦ñ¯³ »Åàšbçn‰Éç򮮬])‚m©“< _ 8Cgu¯ƒ@±[´)­1üN¶‘mçn²-v“·ÇnàŽ÷'Ž×—:¤àÄ%SÚq¶Š˜|éE;¿ú Ù‰š…×  ºÝ^íá·‹;Úδd[\$o?Óê-†Q³âeâë·pGÀpte­—q‡éBŸ8äa4⎤œU>ãOpG0]tUv鿇;TÛÑ•j Ôíá<ýQLøsèèç⇸ˆ€ý…˜sxή˜ð'(k‰C)òTbÂ%×Ó…%â¢êû@Ã3îFÂ!Ñé7‚tw:$ªíPJµ…?J6)%oW*’€ïg˜æR’a› òcS—óì 2Ï’¾W%ÛøhpŒ÷†¶ñQw­\—ù±ZÂÕþ¨¶ã&Õþ¨››zжr©¸À° ,ŒQêV¶ñ‚øzÙ”1~œ ‚Z{qÞkO„?‰ul Ÿ¯O÷"ÝGìƒ'ØÆ§‰á÷²MÛA’j ”mÓ6¶MÛØ-¶¹Tµ Ù) j›KUÛpáÏ¢m.UmƒÃŸà’íž µ+üQmçEª-üQ®M©¸6¥ânåŽ\©PáO¦T.U¥B†?P©\ªJ… Bˆ.¸¶{¸cWø£ÚŽ…T[ø£n ò `ņ?"p>Š€ïçGL¾ä!U tG‘aWžK(Sꎨd/áË辘Ýi¯ìÔlƒ;v…?ž iYÊðÇ·…?þöð ž=ýÑœîp†€sx° ì™ðÇ[Kœþ›ì"áYJm…&ʦzEóԉPšê:P“¿Ó!ñ’Ë©8·C©ø¶ðÇßþ(‰áÛp‡†Vðýl£†£ð=x0<î|®T¼¤ÙÆ%Pø#Ò•Þ¶óøô'ȸ¹Ñ!QÛˆtdé1ü^¶áŸ¹gÆÛ´…?þŽj;‹á„ëØš¾Ÿm1ùâôÇZ‰NFÆÑY°'Ÿd±´£N¼é¼Vž„ƒº§ ¢«-I¶®'Ö~/ÛØ6mÓþxÛ¦ml›¶±[ls©j.üA=ôimÃ4J^µÍ¥ªm,åà¦^6aÏõK¿+üñ®M©´…?Þµ)צTÜÍÜáˆÉ§?@©\ªJ…r¥r©*‡ƒcÕÙÐÏ ñ6¸cWøã¹Ó­öœ ú¶ðÇßþx '‚cÃp¼Õ³ÀwqG#‹žš< ŽA‹÷Œ;¼€‰ïiÝ‘@áÏððbV é‰ÓŸ!S«ü.ݱ+ü ‚³,~OøÚŸp{ø£Û nL¬%åAÀßÞ÷¦ñaí\àNœÑdø¹F‘p ;lïlýX׉øÏ²„€‹ßBˆ£Ò-ZÂ!QR–˜üIà£÷dÜB[ønzo1œP*œÉçVø.¶é¼4=5yœÆ—Šde@ï]‡&§w¸Š)9^‰”ƒ¤ÒøÞ¥–$dÔìUÆumáOàÂmöø±¡-ü ·ŸþÀlIàO¸4¾²|·¶ñš€#¶1?É ™×©EGÍÖY"ü &*+jí ÙG¥j`šmD°Ä×ïeÛ¦mÚŸ`Û´mÓ6v‹m.Umc¹ü¾T„ ƒ´%\ m.Umƒß‰éûTCáýž!aWø\›Ri ‚kS*®M©¸[¸+îôÇh”ß§”Š£ÜU©\ªJÅaî Bï ®ð'ø6îh Âí—‚´Åpâô‡+o’’€ïÔÁ÷ÔäQñ›PTp¬:ã„'áwx+æŽdMdæ§?¦Z»]…³aOøóßiGƒßËzödRÙ®ÇpÜvUÓmWSßÕžkx:±,øß•ìaœÚÏN!ZÑvµÓ ”0.ðl‰qyzéòŒZ΂Ê |í?;•:ËNÈ6ÍZH¾¹Îê¡DnXû•]ûôZ{gäĨålXpÛg)<½vhºøÊ2èÙrÆI#å²’ëÃ¥ò‘®Ñ¨â#¯ÌJŒœ>òz9U>2Àõk9ªøÈþHt"‚]VòöTã®®ßÊQÅGþ#7^®ÿßG\\ÿWŽ*>r¡ö¤7bå.tëÞ”p})Gù¤V¢”Y>òùZ““®?ËQÅG~¶>òóòZùÈ×?å¨ì#òÄ½ÝØO]“Š.ÏÇyh /­z·”¢®=Àµë|4ØÀç[àY/èè»ÇÀCP/èhY¬§„ðÕ8L£ŸB“‡þTº,¡|Š´(pãZ2&ÏLõ£Éû#y“§Ò!O×MH÷+°öå]ÛwV¨Þ4Må ÀƒpÐd½jX8LÓéŽݘ¿iªLT»Î’ðü¹íɧxBt°e OVSóÐ9;ÉOÿ[}¼lÂʼn²˜ÛW‘(~]îüúËôuÂmÛ/Í0Wâ®@z‰‘öÃôÆ@!Sâþ)Ô>æ©i抖ÑÎýs?p,½@é:Mð4Ö^ƒ]@:;¼CH·À‰‡HÄ{{„„£‡H¦É»OvòátÃä½Jf_ƒÉ‡?y·=ùpÚž|`)zõ]´¼¿?)Í#õGví§É#BÑŒˆÒ·ôÔ’[py¢îÏ£âOßÔG|ê)7yfç±71õ‘î¿û?çÇBzÍøÃËÛSùÃ>qeìv =Qk 8ùçUËž#sÕ2XÐk¥~† á jäã#o8ë×›¬ü®ÏÚP¾q T>ŸA×Yãõz$ÞÃWéÕ#Ÿáéýš×Sv¢VÇ;Žâi‰– …3ˆÀ"Ns„ žX‰µg ¸g¸ï5 Ï ¬{ÜG“ýEGÂ×·¤Lzag½2šXôõ’À©ÿ³K¼²m¸¦Æwu_Û8øŠ88b[×\Lpð•á`c &°O—8¤×$Øv*IX‚{è3| ð•çà+ÇÁóqÛÛ8øJrpôÂE°;8øÊp°Q+…Ëô¨YSñ|QQ=©À©i•)á%KþlãàÏ6þlãàÏ6üy«Î9øsåàOžƒ?Û8øó^x˜„ïàà×ZÔ ~þ¼Uçü))—üÕÆÁ_·ppŸnÖˆ^ðgèÜG]YöÃ8ÙIoµ$|[cþ"u°ìœP %TP_+ñüÕÆÁ_7pp¿~ô½ á€À}ºµ€8ØûÔ£3@%úu‹ÆüErp·wýzN`±ffxIà’ƒÚ8ø§MÿZE$-¼Cÿœª &°‰ÞW xÔÂ$­÷hòxþiãàŸ6üÓæEü0¬&° é SzEÂ÷éàHy_ÂKü—‹äz?½¡ŽUÀ—`è’X÷¶l÷p°©³î×ô]N-Y=.Ú9x“Jâ Ïœ[ŸŒZìÒæ€ç²2xFÇÈ[j$ÝÅhÀÙK¹Sqóé$M:¥ ªw²Ñ0˜tæJ³MWÞv?ø¸!i醄¿äa¾Õˆt}g¢õd¾ž“Î:Št‰ëÖj„ëß'ŽëÂÔg Nº'†ëV½y©èMg|×KEoBx.ÖÁ–mÇñ|ì5iœÁ‘zœI÷”q]ç¸ÎOwü6Hw×aá™F”^hB`uT•Rðœt^Äu:rí×GÚ2xN:ë,&ÝÀsÀ!ù{eoMê¼Nºk›®»’\”#š—DwÈö1¦Ô$Û¸î³ë>Û¸îó ë£gÓ[OåºOžë>Û¸î³ë>Û¸îó +ºh}Fº\÷ÉsÝW×}µqÝÁu"%w,Õ¨)D‡O)þ4u Kn…ë¾vpÝÏu_m\÷ÕÆu_$×¥;üÎ\:m¤%áEÔìÕ®ûÚÁu_,×ý7Ë»xþ†ÇJéŽúøupa¤<8p]áøþ´ïæWy ½Þ_áÄ%oÁœB;Ž…•2e´ë;%5¨€ÎàÙ¡°’ªÉк³Ôä‰{Óýëòj0¡„îùÑd·Þ ¸^o¹€àÌTá7y¯føPäÍž¾^?–r½g¼×TßP5†áx‰ejÄ׿ñ+BÙøåHÍ­Ý“ðœñ™ŽeŸkk—mk—·®<°½ÂoX»ð$ü®µÏ7V‘ŒO^AMÀ 1¿Þ}Zá˜;zƒ«ý†Îp–†å®"‰’^§)á›ÒmÒmÒ…´ÚC!ÍRHì¡Þ¤ÐëÃi´ØÈtK;ÉÏ+êÜ á¿öÀ5 | }®T/:6—y­ÜLXàâU0e'¯¦¸–ÔËåî€Û›Ú’*jíéÀÈðâ"G߇iíùµ¾h,Ï{Ÿ¤ªt9þ—³tb-ô‚ðk~¹,*ç!!ôZuj)…ð‚ƒ£«>–x¿:OõÏjÉ#xQnÔ…©Èú–„î”[X;‡Ã,¦š ~^œ–è£3¶¤‰!<¬dàÇŒÎk!2é9EÂ? g™n<ˆz-=Џ¥ÄÆa÷"ÀQ²µå¬-bŽá÷²¶lcmÙÆÚ²µ%ÍÚB{±‡µekË[Xûú¾H ŽX{´ªˆµc€§H84 Çòíbm¹‹µUk«-Ö~È.q%_Ybx.Ñpûñ‚Éóœ–ç 8!,ÏpBXžÇp^k×õ¦jÓ›ªMo*ž¹’§òÚÿQ2nÈå3å+$¦sãS/¯ýóõ•çºgÚWˆP^Ë<úcà ÞLmŸÄÌŽC@¹|f\”‡aØòü3çjH½(Ôüß V𒹦ۂˆŸÔzËÀsæJÛãÍO²—$üZH†'ùÉvÞb8¾ kÍOqGKxd®×üà,›ñ,Û˜K¶1—¼‘¹„’š€ßÉ\²¹ämÌ[xiƒ†QV üZèã@2Wßibò÷2—ÜÃ\/œæÒfœcå^ÏÇö² ^Îlóåq^`82‹vÌQÜ¡/¹cvHÊæ%©÷ /Í¢–‚´„}ð¼d.¥HW0µg1Žì¥ D”“äÕ^º‚½OsWpwéIø7ÜÚ4Šàùè£õ^p$cgÄóÊGÂ3ÝXl±a­_È(g4×`”lcmÙÆÚò@ÇBÂy–ç 8!,ÏpBXž'à„°<á”j7¶a8%,Ï“p$,Ïðl޲ÓVšçsÉ`”¾“Å*3cGÛG Àž¿pêÜ.áÛ&`¾B/ÄÌó—L¬×žÄŽS[S|‰Ã+ 8âùÞp<¯ 8 ¼¢yÞB‘Yàeø£&? ñ¼Æ”'Ô¹[Ù& ¢º &_äcó[-X¡jeIxþ„=áÏ…KÉl”lc.ÙÆ\´BÊs÷0—lc.ÙÆ\²¹¸´‘YÑ"q£‰µÌ%eå Ï7¡› æ’{˜ë{Ss=üüã™ë› ¡Ç~Ù(ÊéÌË}3!´³¹E!´6E9Ê2\g)8êÈ·pGåX˜—ûæÑÙÑA!´2Ãs%‡ãD&„6–„çFyº–]ê$):A|ˆr$Ã6måÀÄÚ·lc.ÙÆ\òF檞oÙÆ\²¹äÌ%×r;Ï”îìô€AP¤Ã!tH$TGLþ^æ’;˜ëÏŸþ@ÅK:ÈÎxæíª0ôÕ¦¼ÝCª¯"á3+ß‘º.ÞîqùÀiÅ·{òMÞè.D2GN>i¾Š_z Û¢ÉOdÛlò«`]¼qòº„ÿƒ§õ”ŸÉ'?þ°Â%-Ö{'/‰ )½¸k¬ å% Š/õç[ׂ¤ñ‡®ú;G:±ê/#þàœ¾sòTd¯U§½WääE¶ï†bZ™š‚[Bâ¦øsO»˜Bɱ'qiÆóÉOpÄÚCÒ‹`ˆcç{a0;Ë‚ìW¦=Q ¶ÖÃ4Ê@§£ÉP£);÷|Í˹·’šÏÖ‹6&© é©kO‹/á›stôG&Ü‚ÏÒ‹Š.ï ’ðò)'gf¾ƒxN¦Ëë»/9|*ûÞuAõÞ/ð¹cµ‹®Œ×=àà³ÕµoN^Г7S!7œ¼±ÉìAí„Ï}ûJ™Ã~¶ÖëäÓ^5„39É¬ÙŒŽ–ØYG¬*%j5ñuðÔEЩB¡÷¡XUZ—ëôÚ?0‡ÏOæ¸è+¤öxŒRÛK”•%ªÛ–W˜q‡¢–h•tA¢ A>8 ‚ðõ½9g#kCBh¢'¾H‹X?ò’ñŸÑ¶„çj@¬„ ”¦6¾w†ùHo}ÄDŸh+³© .5aZ,é…Ó,ã$|–:å¢ó ç¸)ðõ9 zŽ«À_°(“ðyŽÒvV uši“ëŽV²0ý¥&׋OpÁâ›O~–X‘¸MbgøÞÉ;Ãá6Ì‚YL~‘E LvSL.51±á€>2v†êÁ(G”ѦCHI2ùÝ`p5Á)K²()wõ'8 ÁómxãHä·¸)ÃUÒ }·ÀË9;A&ws·gs—=ˆª"»Ÿàq‰yþ ²ø:G›x‰Óù^¢1N,Q0KTÃï]¢Ü³DÙhŽ8rA%Tv Ü•£Dß‘a„æÂËøI”aÝÑŽ-áäY’š!°³N-‘]†—KT2(vU$¼¶ÄÍŒE}$]ªe¥æòÌ2pßâÉ›bòo›Yº"üÊ'ÿ¶™'«Ãçà]f;f£43j©>-/<äp³ ׸=°¡–½>PÖý¶—a ¥[+\HžB4àà·Í¬J}6óu¸ãÒa34HíýÅaÃG R§wr^ó©E&¿×ª”½›¼ˆúäC`t;äŽwI'O¬ Ó)DùVçýy—´tB*¦Ð8OÀ‹CZ!únÚ/«Î†5ì.|LP³À³×5µI•ÑÇŽÑÐE…ðÕ™‹!²Sis5-²ÀñkT˜<âŠñ­Û½VÞ*[àÄþ˜ñ¥A¼?Öh^îÏô4èÖþHf¦æU(ðõÊ_Ï÷§O±?²sª÷$|޼LÉD{öG2ÕhT¿KEîUÓ{Ýåþ¤fÇê±S¹ÞŸ`x¹?*„=û£˜ýé½%÷ÇÁ{ <Ûe;/”%r/>ú´F’ð%’‹cŒ´Ó×7ö‡©í=¸Zó>xiX¿Å‰xOë7çe ÇòÓÍÈ,ÿYáeŠvÏþh2 4rŠLD÷Üc8C]HT(cèá©N!{`ùøþàÀg¤3m–Å´YÓfY MùÕ²\ª–ÅÙ‹É€ ÊG“Ñ!†ï§|n3l›Í°m6ö٠ËP~±—ªÍ°åGÓ€)/:甾“ò¥5PlC—©ôñ¼™øwÅySÓn˜ò Ü\᥶qÊngìxi "‰4y¾ÐË^axn­ÏÏCkšÚ¹Î¤fwž„¯ÞT°éùD¹Ã¨]Þ”ºÕ›ê†û£è›ëé¥MÀ±50{ö‡ñ¦œÔ–9F ÃKoWJOXk×§N@Ž„ƒýÞÉð{ög—7¥oJš±!2Ö\4·J1û£·?NðrBP{ö‡ó¦‚ ´·»>ãàùþˆHàUü€J³év°'á  Q~æ óúþìò¦ÔÍÞ” º„ÞÔô~/Þé /÷Ç·goÊËI»–Þ”€‡´ xSÞv2ôË1Üz"b,¯´ñÃïô¦ÔÍÞTnYL›e1m–…ñ¦VËr©ZƒýØÙ€ ÊÛNûèàj ¿Ó›R¶ÍfØ6›aÛlãM­6ãRµ”75™Dy]<é2žoó¦,›RÚr”×àï'´Í|Í“Ð6i½'‚°Œ7¥u ­µñà®ÕϬ%£ô¦Òƒ–Qƒ‚S_­IÍÂ{X;’ 3<Nãt€i-]—m´°œ™P²„I‘Þ1ˆ‚†Ôrn–Õ{˸YTBä§œÆðlãR­¢7›q­ÒÒ §â{½gã¸KvHÄonéõÒÍ«±Äi[ ‰Ó†“¸lã8ÿKË]GÚG¥ éC{ ïK,ð¼vB /[ãC{ãò‹H œÚF–`È?Â7÷G·iDݦu›Fdü¯U#^ªû_‹â#ö'6TE,ðöÇ¡¯oîiS|¦Mñ™6ÅÇxi«â»T•óšô[é+Ý7å`|iÍ­ûc"ÝÖþ¸›= ½hÇyF3Wv„W¼Üe÷Ä/Žó(¦‡š‘a²2“Ï= ÙEæPD¶^DñƒùXGz!†ÌiWn˜\›Gánö(àÅ÷ N)¾iòXñA£ì8BÏýŸêÇyÆzÆ4ÃKWÐZOƒE¨hàá ,Ú/ç÷¸‚®Í£pŒGaæZ6,qP¥9ΣPi*'”!à¨ÏÌöÖ7Žñ(ŒÐžö(`ÜÏkmçƒ'< ›J«%1ù;= ·Ë£pºM#ê6¨Û4"çQ,ñRÕˆšÚŸQñEˆÿ.<|um…ÛåQ8Ó¦øL›â3mŠó(Åw©*>Ò£õé‘Kc†ßéQ¸]…§= c‚Ö\FT–p*#êè^¸Iupä‘KA—çfûãÂ+Íœøè@|=u£O®%:ñ *½à©µç' axB`GÆÚï:ññ´ãà­`ó¦à~Õ§ò¦‚‘% G¹Ûµ?܉Š>ññZbx¾?¾K÷w°ãàmz}Q“p°?.¡ï©Ïð»N|<íÉÔÏ$aK8¥ß<›q0é·IÃPe¿œ¨¦ËáHÊÌê‘ÿœa">ðEÊÒÃsš¸·Õ÷ >;Mñª)-î)Ça8Êá6ÎÂT‘g kÓ¼ƒGžsì”ßÜØ8}ëÆõ }ÁGâÖÂ' qéò9Ìdør’ä£Ý@¬—¬ºO=c²4Œ¿í$ IíQèÞk6GaJ8åñqÕ!ÂKŽ<>cöhDÆ£ð^Yú O …á‹G1HFÞ}(®DÅ\”×@LþÎ3Úiœuìx9eûsâùäŠ*5 ±!©Ìÿ<•Ò6ItAP*——<Áz–tíÿýDeEÏ™¾Ö±+ÄSH]k-›þXûax¥sÓ‚µ$ä –x©Êξ^ðGc-Qã%š9§©\b8Xá}Òü ŠÊ©VjÍ¥žál‰™‘ä«‹Ö)Ó@ÔZÂb†cBàµG/1ªˆ|íÃÒµöÂå¼v·*ÿå÷CÉ^E$ø³w°½ÁY»¾uí~ µ®ðbíqàbðx튔m)àO«”k3,Ý¡µg‚Àÿ¶ñýoßÿÞÄ÷qÃ\#œX.Ÿ+â©yí•ÑWÞÆ÷¿m|ÿ{ßG?)x_Önó³)yík‹¬×?-Wˆ3¼¾F r½nÎÖ}¿ý q†÷`âIùõòó¶;Àëä9üK7\¼Z‰›n¸þÊ7\¯½¨ê¦Ö L¦œ…Éîš9PÞsxA!Õ燩{ qD)¼f¯GDw½ášá9–ÐoQHïSè²A!ÝF!ÝF!ÝF!}€BJNKVîêpï©c§þ*!87©Dp˜ûzV%ðã^“°Vxqsw=LRß Cøk="ðà6­E¦gx&°ú»A`ÝF`-Jp&°ð/X·X·Xïøù‰H§a“¿>öxf™DþíÜŠðïwø<Ý›éHú¼/\àê¹nú”_™«f<óü´vÖYZ_ï0žÉý@Ìh|Z"X^ßOÏ=0ŸËûi×i»<à,áä~úúÕõ‡‡òòɧå…ÂY/Äëqü™õgMÁAøkÝ…ë¾ö¼ÑŸ•ÀAÿ)B¡o‹ø gÅú¼|ÊŠõMP,5>¤XŠÃ¹bUæ´§p ?بtpt¦?Î *c¼ÒŸuòõãÈB±¾­ŠÅÔoV™úͳåpvùÔ]C@e¨p}[E{ý*7‡ÒΕ¹*<„Ñï4ev>W·Rç´¶E ðbŽùeôµ›ú3hiì ¼îÿéÊä2!.5cíC)\·©ŒÞQûÍ~Û‡#Åu ÀbØ‹8P,Q—(–¨KKÔ%çŠuDeô,ó~þêì;?€§µ?|”‡ÐÞBø¿2©n&Wep ¢2@8ÓŒ›É Gš‘Çg– Ð-ê8à¾ý’eþAØeºÙ\lï2²û¦÷Í$¼T_¹#îÛƒì¾éîÛƒì¾YAe\ðJeºëEvÌ8dáAe¨Æ=ð]&Ú̵=tÌ´¦~÷Úe†Ó‹îðžëÄÁü€W^šòÖ ŽY ¼Ì]í£Bº4^”pøñ]FyBù_»Ž™œ}°À™Ê ›LŠ’ÊXç*3‘Ž«Lïœx¢‘TÆ8Sm°Ê¬¯<)œ©Œ•v™¤¼V5ÃëýÙÀáLe¦2Z@ebâp¢2f8XÄ —]¦²óÁGÿ(6cwÌÎ×¼˜cNåg?ËJž)€·ÒaÄ8?™¤cí-çþ—ý/0yzÊqðùû>ÁÍ$6é?ÁÿrÚèå¼ö¿¦ÚÕè,£ ¼Œ’õÆáÀXaÒþ»m3¹êõ Ü=²È™• ©ŒNó)¿¼±‰”t3ÜþïR\<ëééøs}çH.|ìXFPE§œ ÜÏã'ž±j€s½”ö"›¼Ò¸ì(¡ÏXE•Ùb©y/*~°]0Qs88ZD|šÐÔ}{Ä1ß¾sלÉcú£ó%¾Â£nmÉOš=•J´8mïÔÑÖm¢­ÛD[·‰¶nmÝ&ÚºM´u›hë6ÑÖGDûi×Ñy½»È²ù´wOh¾Ù'ù–ò ™Ýì¦$cŸ”‹iàT‚3â´ÙB›[ÍEªOÈOÊâk£âB›¯BŠîèW¾ŸG§B›$€S ýüü¤ÁV¸>§îP®J5µî)= Îša|@ºB´óé#Ì®ÆWÑuѦHEû ÝvJy\í)7Œ µ Oìžð¼|Å+çÛà-€ÅÊÉMÑ÷àž0;IÆbø[‘ýÒ_Ë •Š•­‘žíOºM±t›bé6ÅÒmŠ¥ÛK·)–nS,½§X@e8œœÀc$ب9†JÝ9ádøËÂÿ‘¤—î¶fè6ÍÐmš±±åðC7·I¦MeL›Ê˜6•1m*cÚTÆ´©ŒiSÓ¦2æ$ж(ÍÎD[”fG¢¤¹³Š†;žw¨ç‡D«gñÚ¡?rS÷,çƒHÎ=%ݳ)RR¤(B¸Ã—Û›‘¢g9R…è(½j{V'! ¤…L)MC|ÏÒ¹u*–M= sð ‡ó´éž°¼POõþ¯pîð€òÒù&Ï! ÁU ü fì¦ìöÑâYö€¨tè6ÍÐmš¡Û4C·i†nÓ Ý¦zO3€Ìsxq‰0> çmxz ý,åm,AÐmÑÖm¢­ÛD[va"¾7(Ši“yÓ&ó¦MæM›Ì›6™7m2oÚdÞœDÙÅ™lŠâÈáGCï9ÑŠ¸í/|{ÜÉé½? u/bôº7Bˆ¯·^×ô%bSÇè"€ƒ[%A ”æpP;GHq³)p8¹/ÊUšû„óuÆ‚Z^”Óó]Š +ô<þàåÓ`“¤|꼈Ékx³ÚÐÀ¸[î‹èÚu›Ðê6¡ÕmB«Û„V· ­—¶) ût¶çðjÏí…=ºþÏÁä¿*uºMêôÿÔô˵IÍðÕlP‡s«™dóÏÛF$âÏužÃù6>§ó›à,I ˆé—ÀyƲ>óG¼Œ4ú´Ÿ±üGz=£=Á×3É ÒôéLH^ÏÄÚÎ{—Ƕ ¬% Ì&Ÿ ©9ÿ#ž SD纠ÀÚ¹úiƒó‚ÃpzÝdº©¶äŽãüçЙð"(ÖÜKã•6ªáÈèO¹½ö›½ìÃox @Ïì1-Ç;!Í{?î^S£‘Ór‚ä^'çîu 7kõ@ g¦×¾\±Lk犥L­XÁuIY—"‡×ÙÏ® Ø¢lg”2N²o®_Á„c x–†K÷4ßí"[–ãô¶b]=Kû·{Ën-pøÆÆð¦þ‰;VÂ;Vù®ìŸ˜ýŽäü“Óg’ 2ôðõï ÙÏÀyŽ|98œoL½ø,-rxUÙÒúÎ9!>Iï‹þ ÏÒÂTÌ‚=KË?x5Ç0Õ³*c „×§fÉt@l¾˜ úO·©ŒnSݦ2ºMet›Êè6•Ñm*#f?KñIE/9ÿáøäyñΑ48mQš!œ‰öÝàŸô®L%'Ä'iŒîs×ÿú|Ü8t~!Rd8œ•ÖïVÿ«ˆàì`3G7eþSÞ&¢$ó ÀoxŠéœE1çCó¬˜ü ¯—-½.€œ:+¼^vôíô'Þ&Rç#ŒS?x]ÍÈwFò¬„W±´¤Ñ‘Åæ~Ó~KÄ€LâÐýà¹jl¬Ê´ØîcÊ4ºtîRQÓ _5NÁ¤>yòòÇÃþ;†;Yßì¾#ÝL©Xàè°ù‘2 ?D·Ð:)x‡à<’§M&Ï ~<ˆ&°&S±Yál+ë…ÛiG.’8PëúvZ«Ø%ß»ÖÎÞ¾%…n§µê"1VN"ׯNè鵦/9<ˆ&à©×¼zd$¾.ðÍç ?t›fè6ÍÐmš¡Û4C·i†nÓ ½§@æ9œ&Ø ¢á“Jy Ë'n1èC¢­ÛD[·‰¶|;m±÷WÓ&ó¦MæM›Ì›6™7m2oÚdÞ´É<¼¾Ê¦(ŽÎdSG?~;íHˆâÇ‘Û韲ÔÉ·ÓñÀ9ûÇKSŠ…;|ÃƸ®?^D' I }ôþ*ÔQãQWòŽtó{BÏ®3r’¿I‰\güxRÜNÝ´-®­õZ豄ÿ+ãžÕoÉ­z?hiGÚAxuÎŽÎÙ |3êúãÈö–h7¥¸ýxÑm¢­ÛD[·‰¶Þm ´^Ýt§Üí_në„áe (ôêˆlê6ÙÔm²){{Ô*üüÙO”:H‚\"´ œ¤ÇúÔ¹ÞØëmœlGN¤¾òÇ '˜Øƒ5Ó+ü—â¶L~ˆ³3‰6$/a ɹ%ÞMbàú Ê±†£ìJ¡ƒ{9bðS÷X±òG3þä|¢\ë¡”}?µ”Žužb5|Z]àp4GqZ¾3GG)¤o§†ð$v*¡Š1×V¸éw(´Q½œÀÉämʱ´¦ŒmÎ õS6»›Þ‘漘ãY»¹+í¬‚ð×J†@…¨1BéèÚUéÔͤà_"º™tAAø+6|›¤sýŽÝÜVÇ¥î¤BßYõ©sHêrapÕ{h p!ñâèäß•³µÆ|×qt(œtÞÕöð}úa…‡þ°EÔÚ f(%rÙµÀ-rÂÍàÇk/šæ¯ðVFUæ?õ‡oeª‹ÞÌ™†¬9ЉÇÑis \µ.ͯ\–¶?gŸ}·”ÈnMáOóVc6¥®Š<ÅD.|føûK?TÎÔhmþø×ofoíêOxýv'ò4 0¸¾™ds ðS/×é~/ù~žïuê¿;춺†ï’à ¹:ŠP’çÜi/]õÜÕÃ]õû£kyô^âèè¦ÒÛ±%Á ¼–à çRY‹k7–f°D{)|–àAΓV‘Øö'#½£;8G…æ8~ä«9fÕï»`È…6…?­i6q,ùJ8¯£Æt´61Kuç˺ä¾XÕ¥ÜÏ$‘¯Ì¦.îÎÑsŒsÅX2ÇañÙ^AøJÇálÑÓìƒ'c%mXžÚVZF“<8Z ž|R`tjwC—œ sî6!°¸3ÝíO^oLÞÝ8y§œæðBœuʤëÉç– º/&?~Ä«øÄ>ö ü±˜“!G“ ^°w –’÷ûOn×Ü\¶Dpq”.’¹¹l™_Ì·Z‘Û½'·kn¶ç¨Ð©¹¹l™Ÿç8|£Í`éW»æf{ŽÓq57—-sCàD•Eñ$•çÉíš›í9aŽ‹¹¹l™Ÿé؇.š`НÚÌÍ G+Á“/ÌÍ '+©ÌÍ…Ús“¬ŽÀÛÌÍ ?<ùÒÜÌðBœ s³N~8íõÉy’äö4¦Uƒn»}˜«d^*sCëPOðB§Ó…&sLýŽš0Ù,D0IçVø½ ÿý'häNh‘ÎEJú /#J>yvwo£K•É1"U¦†ï ‚Ûð ç´8·¼¨G/àû±¼‡“ë/b¹¥´Ámr¥náìp^Ç ÎÞçîŠÄvün .p´DqU^/Q»`ÄUAøÖw#‰ÛüÑ7ñ眓¾"„³x#Ÿ¼«'¿ÓÙœ¼ãÂs꜎)àÉ[*\îášâñŽŽ¾ÓÙž<¦…\¦L¹µNÒÖä…hšî”Ó·tòsT…›žÙnÖòD'ÿÜ yqEüá¹r„Ö\u±nöáV†+-Ï^ú«ŽÜŒ>ë~ÇÇpCàjǵÚ/žÙý1xƯpÓK†O\ï=µcô·á»jÍ&_×®bmÃÅpå¹WžUŠ]Òƒ3§8œ…+϶CáʳIdS~ÆáÊá¬ÓMFgòøÖ~–ùhçsJ8Ñ¥øêeÿz¯›SÇé0Á„) J½<½•éUäøô"ØŽ\v>üÈ.—p–àŒ¨2^Ÿà»8ÝÚ×'ø>õ`tHÜnãBLõ ¾×ƒå,IC_àŒ?óûšïçŽÔÇ~éaß±ˆ‚”¯'ål*/PÞà%åóÓw„òZˆts’2ú—“ò,‡Êçëß÷küm9gœ“ÎaÅá·Pž ­i£¼i£¼i£¼‘(?½RcçËŽ€‡Ñ9ÒêæÎ=ìa´"ñI ¯–è¤%6ú°Dõð .ñýFQ cž?‡×ržM~ø«$EÂË•Ø9­íûw™?ÿû¶½˜ß?÷a|hœxKÒ0˜§Þ“TN ÿ·5† µŸT7Áó3Í÷oò—NÝ‹’äeäðª¾é)…Ö7V¯1œ&'º|û òÏã5|\âc±hbjûYáûŸ½”œÖJ à•½Èr¾|¥ìßICÎjpcáǬ¤¿ŸçXJùÏ_½}¯¿:]û3\žÊxlb£Û»ú«B"”}h›ãÃþmÌq„Û‡ú«jŽpŽÖÀ9úÎVs|sœ¾ºÎññãmcŽ#Ü>Ö_Us|âsÔêšãø£"Mn&x9Çù«j·[Íq„ۧͦ¼Ê>ó9šÎ÷Fœc$.ùsŒÓ#ƒºŸ^5Çn·»î)ûÒ6Ç—ý9þÞ˜ã·/›í®”ýåщ¼4ÂÖp>ÇüÕ 54ªæ8ÂíŸÍ¶GêÚz¥–ÇœS$ÑqØäk8 ãðÕ õ†©æ8ÂíuÉ÷go/ò&©ì'"°qI$°íR ¾:¡ÂêÕäG¸ýÜ,¿®Ô”dA Tœ$¨ó&YW«+çx…»—Íšvæ§T£½èsû¥è5‡WûõNŽoÑgc:Z\‰Â×ýÚèN÷zöUŒ,†œ† ôdíÿ*÷dΜ˜s·¤Õýª‹y/q…W¯Š†¯„’Ñ&‚Ñkõ¼8™¤Úc.yVlY ¼¢|ÑÀæUª£÷Èþ¯þê*ê‹4#œs)C=ä¢y¨‘N‚º3^ð­#]þ*ÉçEwƒhçJ>±×‘ôÝ­¢íóáD´]çR˜;?¸Ÿ“×xòçN'æ:Ÿ³Ù¢oux9ùŠÞñÉçže^Y 'åõúÎè±jƱÉó“F~ðM¾2‚ú)ç ‚‹û ‚J|}ÿ.v§zþÜvt´œÓ¯,„ß.?¼‹s$ðPÀ%Ì m‚nÔQN=1cAT{ hÕ“¯–Ú<Áí?áú˜D xý~íl:…•4%¥pIIƒÌÞØÆ¸øSž|Úg\<À¸(3.¶1.¾79ñý–µ3ÆEȸ‘sýl ¢Ì¸t“×Ã^M¦6Æ¥ŒK"ãîu8_3ß*w*Ãa‰¹±WiðÂó*çAöµÄÜ¥*1×ló¾"¬‚Iþzó‹Ç18¬$wÚ+w¨x\×.;VåžÛ$N°–‡Rðvd}Uë{¹xœÏ,{£«^Ýz<ºYcô÷Åã”92º¬L¦µ¾Ö p6G—0QÌê4ÍðÝ9jiŽsy=6GŸœÍq¾v¬Ig”ªá»s4­S˜® „94ˆq.â•´¼¾;ˆT’H)A"\4^¯WqÁÝѽ4z/ðÚà5!´?¤ sn@™›+RaU!ÔðÝAâé$…Œ‚­ìt ßD*ˆÙOµ™Ø#5œJ²iÊè£k© fo.FëœUUêÈè¸"Ø8{HùA„ €³ÑÍÔ‚f² Âèî$"ü]jøî ’šô^ £¯ÏܼVåâ‘у´Ä¹ÿ:[¢Ž5|w(Z-dHuÀË931N45|wŽØs§‚G'•2 œ™íù8¿5ú¡2pì–†`ýT²š=w 뻈{é™è‰–º\ž‰ºá@àSÂpòê,.¯š6Ÿ‰ÞKÏDÇ'ôLt0ž‰š“ðLT¸ðbhó™èý¡g¢÷]tžñMvÌs‘xµ¾ ˜áýwóú«˜£Ÿ­àÖEç ß¾è¾úçØÛkÐŒÏñ¤ƒó9æJ…ÓÂåscŽ#Ü~«¿ªæøÐFLJ}:þÚ˜ãËØá«_hŽ*ªkw>G¥‰O0Áù‡ÓØÕVö¿^oÌq„Û_õWÕÿƒ)lÚ:‡é˜ïk8൞ܞþáþycŽ#ÜþWUÍñ±×{¼Þ¸ÔžáÛ—ÚÃWOpŽZõãIðÚ¯÷p3ñzŠ&l]jÏðíKíá«gÈk«Ò¸7€6×ÅÎ稻頲u©=÷/µ‡¯^Úæø²?Ç-9p©=|õçVyì yü#ÉãúÙºÔžáÛ—ÚÃW¬×}°Ó±_“f8¢ã”ž¹u©=ÿx©=ÀÿÁÉ«èÞ€T_(Ó?I™¦^MýÝçÇÆäG¸ýWUø >(IR ‡B°ñ>÷/Þï{h2îîa׸ßmÌñ w[Ý9‡¯Âúî£`8µ¥ ïD…·q79`†o'Ü[ì´õÚÁ(Ìšï;Ã;3¦Jÿ·éŽMð×ÎâMòø÷渵ýMð­Ôbéuìǧ»süÜ›ã–6LðÍJ8ƒ.˜\œëµ'sL[„Øu#¾}Ãu›Ç~M†?¨áü& JÁÍEÁª/å×#Ì·©ïMï ¨ùMN'MN^òæ*T×Çàô·&ì~ûÊé¯p~ú»ºËàô· \(žºyúûvèô÷½?ßÛøó½?ßÛøó½?ß)n/âôý^ý„EœTèmÂѪ½3¼æÏy¬ÂVó'†\ÜEáeˆÑWÏ…OÊ §—aRküb†‡çþå÷ÏÒë±ô+ü[¹4]¾í,5ÄÉ+ìµb"˜óµz³V8.àåûµ,ä¼D£iãš+6ÃÙs‰ »~õŽû«`Ô¼þU…ìÉœáìÞ?§n©zW˜B¶B‡E“m¼¤u‘ Aê¢K}ð^¾)»–I÷^9ž-»¤Óm¤„K§õ½üB:ÕEUÒ^ —1L¸rC¶>&á%é¼Å¤Ëb·Àÿö£¡Ÿ.4YB]û?Q{š,6º¯ÛªœBÊâ@zŽðbí¡O®Ì×>œSúÀàÃ/ÌvÐ% •Ö–Gº;KÔx‰fi§HjƒœrÂd„?–9h6ÔKÌ}”ú¬% g8[bNçQëWïÛ\  Ö<¬Ž !²—à !bê² \k¬”k7k‘”¾ð:u>;+ÿåwÕŒÞRø6{w×®o\»!Ý2W8]»îÜ0ûõ%p©Ö‘ì~¾Á°v—Tthí™ïëÆtë£ÊòÁâkÛ£Ê׋ôHŠx÷îî…ÃöÝõjˆ¹VüÛ¸áßï„:&]}£?§Ø>ø˜eÓøåféh¯9¼î.0÷]ÿSç¨çjr^å¨ÏW«À+]ž(œ¹¨JÍ?¸òß—æáÎ:ÓkÚuS¦ðòb*?QI'PØ4×+Fk//$³gvå;ËÏ·hí¬±ýôJýO™Ÿ¯hO2/sóKxµÀ?èE’¶‹/WÂI“âëW׊i¹Î§¥ï:…³Ž÷×J,ù‡ 7¨õ¸„Ï0Õ5/vüáÈ»î‚B[Mr6žpQ„tßð^d‚ž5N¾"[àLãT¦¤qŠÃ¹ÆMkg]dÖW! [›ŽÎËyA— ‚WеN¾¾ä-4îÛªqL/g]ªÊ”$Ëá,­vêŽ t)8/^;Ÿ· ti4ÂIü:uar"þ”]«¯?x1GŸ«h K£Ðbx¡X!® ûZé†SÅ ]œ‡t‰Ã¹biÊ^ݦXºM±t›bé6ÅÒmŠ¥ÛK·)–>‰ú3‰ö\+àtöƒwœ,Z;-0%H™ù‡ef›£U3t›fè6Íвfdßó+‡°¦w ð‡Þß/Ye¤½H*_ªÌƒìýiÁû3 À«öfsÞäŽ÷÷ {ú€÷÷ {VÐ%¼R¬Ü®Bôë8œ;y×òN@—¨Â>ð½(梮:Eý:­©Ûþ€ö¢ápnÕ”Vúu×¼rò”·Vðëúá—âöÒ5N¯ÝƒJ8Õ¸|h·4îîEyŽž|õk×É“ów8Ú‹¢¸YçŠ5˜+V¢‘Ë8S,m°bieœ)–U‚b% àµb©^ïEÎgŠ¥¦'8\±bâp¢XÆåXžnS˜“|„ðb/26'ïú€s 95@ Še„[YнFŠu*ý¯_X±|g¯íòvë—¨X‰~¥ÛK·)–nS,ݦXºM±t›bé6ż˜j'/§!ÿ®‡—NÞXC='/»Pþ«š¡Û4C·i†–5:y¢Œ{Üuòää…¾åä•/Ü;k©ƒ;ÃbAeœp~zrœ¼Ç¼±ž€s'OR›¼:e«œâ½¨ï¦V;÷(Qëç]'ONŠ]àKÁoãS¥2ùZµ÷)EÃáõùåìV©Lß©Ãÿ²©VѦӊ]|ƒßÓ½A¥2¶3NAx5y¸ÊŒ§7 Äæ–à7ݦ2ºMet›Êè6•Ñm*£ÛTFï© P/¼´áh¢»‘c–éYÿïÊvd^·É¼n“yý óÀK+m’iÓ Ó¦¦M3L›f˜6Í0mšaÚ4ÜD …™‹B áL‚8:3¼®ËÝiz]ûrÀÑÙ8t¿´9:/¢ßÁ‡ï-€×)ÀD¸j'<x%C§ný•G¯9œ]ž®Ï޹pÙ8œøðÉt¶O8P;æµa85Îù•Zä>Èx$M`í•h§ÁrIZê'½`Þ䦉‚hÓóˋ¢ûQíÙ‡§Òm¢Ýæ¼è6ÑÖm¢­ÛD[Šèدp:ÛÎsxå8 ”›ífym§:çÁÚ¿*›ºM6u›ljY6ñµÝ©#k¿`{lû8uNF/ôjøVÒÖÝ¥|ªh‚çp$Ú‚A?—õÜZïÖNÊæB£w5¨Ð^„sëDyèj$ç®FÂWà§N8‹ûLµ xtTÒÕg¹1Š”…áÅÅY2Æ g4zìñrØ–ùË!{üw7XùùþCí¿mÙQå‹3}À þ+ÞHû( -€s ¶‚Ðj4:OõRv‚³ø¾NÂn`ÁäyY`ÄLC§ŽŽî\ø$GÇCøÇvY{pGç¼üàå]•:p#ýW¸8S×RVЇ÷Nƒ•nпt@±þÊŠE6û¿ºM±Ú²£þê6ÅÒmŠ¥ÛK·)–nS,ñâL#7K¥Î$¯³£bÔ ‡d¼µþEÍÐmš¡Û4Cv³"Éj“þí{åZ ü¶»fÅá\e&‹X«L™øOLâG.ÎþÉ{Q: 2ÿ¾Äáœ_œ9Ae|àp~ Ћ™º‘ëþ=ÖOMœ@àŸžLþáC÷)LÅ ªCw¾ë¶hôjŽ¡SR<É/6qÊR— ¼:ØLá¨mûw(‰ãŸnS,ݦXºM±t›bé6ÅÒmŠ¥ÛKÎÔÅ·¤”³\ í½(ó@”yg Ê<‡¼À2nh$üs÷d/ÃXà·…£ ‡×𱯓˜—FCÙŸ_8þ Ñ¹fDI3€ƒL÷^Ú§xüéƒpfw`ò7<±`ôjËq©³o9ŽfÐâ-'¿…qÞñ¯ŸIúÎHqá…“gz'8yE~Ò'>þØAûŽÄÒ>zW¸Þ$•9wÉÒLž~U,Cf`ô•??þÛõ$Õï{Q­'øW_Y.ðJ{óÆb…u À>M)²d(¼J§OÒÓàà1¥°•%´ö:ÞNaâ:¹ÊZŽZàìñ ¿µÂÆÔ©ÜÇLžµ1 A¡L?«4„ÿ+.iâê –§2 uX{¡Âö‰X gÚ öË1‡¬ý†ý’d ü8rçøSV™¶;Ç/MÙQ^_ßHQfbP¼ˆQf+\h÷Ñø«ðªšÇè¬æp~¯ã#“y×E3ȼáðzÇ:M…9Ùe¤î¢…ðe”9¢§Á¹©Wà<Ÿ7 qì« áuÙ¡(øˆˆÍמÿ8r¹%óºMæu›Ìë6™×m2¯÷dH3‡WW–¹E‹Æ› 5„—›´>IÚZÝ&´ºMhõÿТX5* [Ìr9mÒp(T5|øª¬4tîütóUõ¼¼nêƒ,ð×o¶t!T~÷Ùö9™,ðºÙ@ÆÄMÚ9t-(ü_rÓãܪ²X—"¹w[á´—³Ý iþ¡(¡b¢Âð5,…\!~v³›z6ùpÇú8L]þ°^T€qÃW¼KcיᇪüRæ(_ØôÑ„cbsi›K›Ø\nï üKbsi›K›Ø\N¢tˆà@:ò$Žþ†ÄÆ÷á Ø¼µ‰Í[›Ø¼Ý.6¿$6ombóÖ&6ombó¶-6o›bóóg:Mk5JžÅ‡àäõ€O¹N ðñçÉväE9…¯ì51?2¯ª§\`òÎÑɳ”Î%DûÞú Lž8^L~y<ùüà ªX©4uâá(ŠÉë^H„;O,^_”8P Q¨VØáô’£Žóg'šûóSKŒcüÑgÜë?ÃɳJuŽRHµXÝL`þ%«Ûœ q(?J`8ùm”3y&!Ø_¼é&‡×ÁÊ´¼Y·œát×Ç@à ¼dC®êÖƒŒîs»Åá+¦¯ÐÉ1?ʶÎâ}&N5j^ޞˠ£[‰t.àÛª’tV î뮲:wN $~¼Àyú™oý´Îi é®_ ¤3–Ã9éBHç)ܵ‘Ρ ÈÙ›ny|@‚"ãëZêø¿"¦M8²v··ö2à0r´†ïQÈõ'‘¶EÇw–“ }gUÔv‡v–Ü c*[m‹×\Ȥ>:yfµÕàç[kŒ`µíp^(€ö>B™Ï?¸Ù¡ü*ugë:¯uás9sB"˜ËÏ*.uãÃoGyö”B~w[,Ox•þxt©«S§b´BˆÜyÿ qòÎmñúë“8Ç’ÀÖv^Yë5‡SçÌ;ë”¶] ¦&øõBMwmÍUÔ¯ß÷à¨-¶†«ÊÒm ¼Üà‡sv¯ÞÓéMÅçqS%ÆMW =IMAÂÔÔŠud(„kîÖýGêÖOÊrÝß¹[÷ÞxUÃúccÃо;H‚ƒ cÌ5ÒXSÆN8ëÇüÑU¿?º–G_à¬[÷¡ÑM³YVãüòûe^7 zÊóZã3Úe-,qÙ(|î$ï¡ïF‘¯¤"ç¨Ð¯¡6C:›¾ †ÜnSøÓêwÛ¾DËžŒp±stŽÓÑÚÉ#­O£¶™¢Î1…ÏtÔcTÄ‘(õ“1›º¸;G#Ì1ÎvˆÌqØ¡½éÑèUîéf)­¤ Ñb- ÔZ-n4X ž|R`t²ºäL˜_ë»\B(D:ºÛŸ¼Þ˜¼»qòç9¼çA†cN¬'Ÿ[辜¼—v©)¥vG:ü ÅœÉ>^MÞôÔRÏp2ùsð]Zš÷’É*jr ‚Ó°í™ Ú–n\¢¶Œ^ªÉ5/WÖÝB^b9ÈÈjv¥ l¿dÃqñ,D$Áo‚WqñažƒÅ!æflIÂ×58aZTt‚³A\)³ÜîÎtÙbÖrh¹H;Óekg"ðegrsZ‘+Ó'·»3mÏQ¡9Òé²µ38Q m†í“~µ»3mÏQc:®;Óekg"pbõCîAdÛíîLÛs4—鲵3øLÇ>äã¿)¾jÛ™f8Z ž|±3Íp²’jgºÐ­ß$kI]õ'×¶3ÍðÓ/w¦^ˆs±3­“Žh}r>ÑÉïîLÛÒ±»3]¶v¦N&_íL„ò±Óùß-€oîL.´-1ܸÄrӘᥚЉ,ÑÔé£+|sgò»l8Ž3÷ÏŸ2!üîÎtÙÚ™|bÖêe7äµàSêw,*3cÅ“ÂOà÷2ü÷Oübî|Uv?<+:Ès/“*þ¹×ÂW˸ºGb 7rÄcýŠÜ`?º&Dî”Iàj'¬àŽÀµL ¾*ü³îw&n\íÄ vàK˜áþ<ãW¸Ó÷ÄÑÉË“g³—Y· ßµ•lòTΟwíÐ6}%ƒøãáþ“†ýçˆþh„?Fг$Øoòǘ[í[á˜6ïÄÜìz:ÆiµeÖçÂ7ì?>% _b'¾‹ý’ž²ÍsHŒoãoãoãÏÍûOÉ/ùokn͘þdÛfr¯¾#Þ½9¤?ëR1 þ["Qù ~zçüÑZà)¼Â¥°z¹ÿD]žŽ­–Þ»5¶µfE“ d‚pšò“‹ ñßì!ý¯LøcÛøcÛøc÷e¶ùcÛøcÛøcñÇ·ñÇ·ñÇ·ñÇïéÏe“?’½ðç²Énß²ƒmݱýdzo¡?¡?¡?aO¶ùÚøÚøŽðÇ —Ònà|êjøMçSo8œóGIÑY’¹Âëþbrô/xmߔ֞EÿRLáËùÔuñ¨0÷ϧN‰w_’ÿ¦| ¿‰?Ép8Щb£Q~œ?ôvÉÑY§@\/ßnÜu _øcsAñì?NÒÝÆÝÆÝÆ}+,ɹ^à<:qt¶sÀ+.º¥³h}7é»B:4>;ŒÎzZ”ò䎒&ï œU 'þ>Èïl¦r_eܯ75{í$Æy?Ê8²³Pxµö01N=<Èk¿>Béïú×ð¬åÌáìâi}¢TNáo·ŠÍøÆ‚Ão©Þí \ù ±yÿy›I c=¯MZ¶i`U±K´þ/…¿–cKå5-Ÿü°Äïßå%þï—Ð&.Ù©¯cÿëUn˜:Á7Z ›—KÙ„C‘ãÞµ¦ê?¼ß½pÖVuê¼Ä{ Gà¼a—è²a¸«Âgæ$õpÞpXŸp'U/k½äÛ×+åY“º>€É󶪱®ˆ>~hcÇ;yؤΠ®‚pÚ¤nü X…ÐiK‚+¼T¬A¸,n̘bá¯õýÀ tRõE¤;Þ˜Q[6z~Ú©~VAßD¾Òmz©ÛôR·é¥nÓKݦ—ºM/u›^ê=½ÇáUÍøìëÏ>ŠFzc@Âÿ{bìíÅÒmŠ¥ÛK·)––ë;ìñï„J¹)fŒºÕp`v­ñµAÍoˆƒ¢uB8ët«hZ•íqOÊ…S8ítk•µ´] Ï5ÌHEŠÎù"aûZ Ð%¨ŒJ¾¬Ö5ü†îPyN7¦Ü*`-wÇÊí'á´W€8¡é®?p8oº;>Rg åi#Ù!šV ¯Ø;øÀä/ê¶ÉÈ›àÇk ‡å9¼jís¾êÊ’ åûE |Ÿ£êŒï4,±ÀAèD#Òåë1"´ÝF:}éÆ}†Ã+_®Ï…,‘ÊtºàÕ"÷mœUâp™t¥8fÁwlÎkï)"] ]ÌStˆtÚwÔÕ¸ÀÆ@ƒdåO¨%Sê ÅB¦¯DÒÕpHGÂÅÒ ÏOZû»Ï™Bÿn;áswÇáÀ“t‚'Ir°V8÷$½äI&¿Á“Tîp†ó$ ‚3Or"]ýpª<$ýÛ;+œðåYð¢Óè„wREe›Nx ŸðyEáå Ï­õ½JG4ô`í¼£³óÀÍžh²^Öˆ³=pDÇØ‹Rw‹#ÊFç»ê©+Ø«ÛôR·é¥nÓKݦ—ºM/u›^ê6½Ô{z 4ŽÃ«Véca7|‹!BxqÂó6¥#Š¥ÛK·)–nS,-+–pÂ#2ß/ÑŸ½Tm+þï Vx /¢õýÏÙ£¨ÚF;ãÄÑk8›Ê€6>ü@^ô* ÚÄ" Óµ4gÿ½¿SrØh‚_ýþf¾+ø=»¾+R£¿Â¾}¯¿ºš4uy*ó别>Áí]ýU5LJ½%nÏñaŽ¿6æ8ÂíCýU5ÇG8GÐU××s|äsœ¿ºÎññãmcŽ#Ü>Ö_Usµ¬Í f Ìq>7Ä^Ìqùê:Çç‡-^pû\UÍñ¥mŽ/ûsü½1Çn_ꯪ9^øs•© ÎÑ® æh¦|»^U¯ Ê9Žp{©¿š5ögo/²¹Qö/š|ß› « |݈ûÏ÷“áöoýUEàO¤L½çèRçj8Ÿcþjšãã–ŒpûYUÎÑý×$Wø¶ÜËs¼ÂÝõWÕ¡2éÞIs,®b'8ŸcþjV¦Ÿsáî¥þª˜£ù)uŒäմ丄㇖³1í“Má«oeô@£ñÒ%ïÊFV¦ð.dL—b<¦£m‚'ø±µO}>ˆO½Àë[¾UCk÷u )œø•Æu×Âðyíá]\{¼q:§¼ô:’仸Sž<ç¹{OnÚ#fœëlˆzvåä ã Nù¹‘ßë%‘MqUÎø#²¤†K”ù“nR¬Ø%í ¹WJmüIø“DþÜZ}ª4?öØêkrÿó\îkrÿ´±”jÁ—cºvžÃ«AÎ|š¤ƒ¶—Éñz}(6ÃÇn™acŽÛÝLÁÍI\álŽjî´[Ï‘œÇg8›£Êu¸ÈWŸÚiËTU¥îig+ÑS©>ùµ–Û ¯W¢“IÂä××ê÷mý^W8›|ïž|¿†V8›|°^˜ü3¸'`ïIÇÀ_•8œÍ1ÍÉÕ´l¿VÉ™á\‚»Ô“9ª½æ5éŒ×žÃë9*3?ݨçH®žg8˜ctt–¶5+œ­$N7Ìlò¤UÚ g+ñÉ “_ïïqï¢Î©œ«xšz‰y€÷´w‘l+_öMmM! w(|1!Ø4f?l‡/f¸èê÷ßÍ믂qŽ\Ïp¥Ø L ðoh홉ãE%ŸÖÉw®†ó9ž:?ŸS.Ÿ’=Ãí·ú«jŽ{¤«á˜Ž»Á“¾<¾ú稂C”€Žvu§f8¢£M0sªšã·¿¶ò«†¯Ûèø¸GÇÏ ßð _A…7ùÙj|’3kðd†ó9ǽýÏ ßð _½´ÍñeŽ[¼>ྺ@^[ã”Á§vµ¶Ìšá|Žù)ún€g†1À3ÀÿÂÉ;ïŸâzèŸáH™¢Ù ðÌðíÏðÕ?8G­Ýè÷€9ºõ­ð Gstø"­šã·ÿ¶®Û†¯>Ñu®ƒÏŒû ë*ÑN”3*¼Þ BÍðí Ô½CA¨uBm ê½<Ç#A¨á«›^S…w¢Â븄šáÛA¨{/x!Ú÷ã²ã…xì…xÝ¥`çÉkêèá‡þU/Ä ;™<˜V ÇsÜß™ü¡É Õèk_‡zŽƒ˜&róÄ¢êBLÓ¼ÃoYTßfQ}›µòÄZéÛ­•?d­<¶VJGí+ês_æTù¨¹íͦµò‡¬U´L%hYZæbTM'o(bX_+Îð¯jY´ŒLL«†ã9îkY8¤ejÙTk™Yû±Íðz޹ùŠŠûZÚ´,¬b‘s9“=ÔpNà §4úM ‡$8áËvÛGà²}†s{á픲u[>÷õõ×O…*ÃnpMب u x]#w u õÜáÒÆ|‚ðÇ"aÂøp* u(3Ø—aRkÔl†çF‰¿V¡9ú•Ærîæê;KÔ`‰ctÍ*Õ„ÔÙÜ@ÁBx¹ÄÞÖeÞ”9›†äaÍp¶ÄÝ•_½+¼Ä`Ô|$þ« Yk8»ß8/ùRÛzW˜Bƒ¤3!Ä`ði•s^RȺȄ uÑ¥>ø>Rè½´=ýj[v)¤Û($Èž«…•2¤s«Žá• Ãd(÷ŸŒ [;§P¢õ«¿m2ô·M†þÞ CI ²‘4Õ²¿7Ê7‰ÊÐßU†þ–"äèWŸ•×Gdèo› ýE2t•"®eãëâRð‚Bv.“RZc«ÝŒ¯áŒB¥úï&} ýôƒ£KüoÙ.•èžU)‰9†3°ÑBx±Ä° 3|Xâ…í&|…Órcoü¡%j¼D£xKÁàÇ´Ë ¼X¢wóó¿u‰*æ>Q$ëz†³%æDµ~õ¾ÍE çjM4˜á˜"{9œòzØV‡]1:¼vã-„/¼N˜æµ¿Wì¥ðmöî®]߸öÌw/åÜ ³Ÿ_]Wkw‘øC¾Á°v—Tthí™ïK0ïõrc9ƒ8.—8¼¨Z0XÖ¶ïb-†×ý½\Âãrwÿv…_ê»·Á¼ºëìöxñ–x¸l\£ç¯´4HÑ®†ïb–AôWVb b¥A®uøÀ Ëeáßä›Ì“#äú¶òDéAtËJ¾­<ÙÄà•d†ƒÙ^ໃ<9:ˆ=0È÷»‰'űðœs:¯nÄ¥z0"ÀÕ÷_o…›˜ü4Ǻ ÚºÇ8þq=n²µçëQgO+®íL/ü½#‚ó'öjÜ=/Õ“§aãPšÃÙlu ._ª'OÊwËSÄN_fŒ_]¨ŸVD¯Ï«ëâR=šÈo&åùCïëÃAl^Jx¢pÝ&6ºMlt›ØèŦ³Ë¾Hà\lŒ="6Z›k0¯›,7ÂÿJ¹qHlN¶C¤cb£¯U‚öÄF7‰ÍÃjm~}Al$k3µ€Û›ÑÚD'ˆÍ’™Gá\l<§#‡3±QÉ b‡3±1×À³6imY k“¿ÂÖF°vnmÒkó [›pDlt›Øè6±Ñmb£oj.Dk³š úƒ!.çbc” 6.@x%6. ±±™sάÍ5°'6ºIlgkCï=Ž‹Í#¶6{gO’?†M^‹ÍÜM99Æà\l¬àÛPÆ= Ö&Gð µ1]Ò^‰ò€ÄF÷kð°„S±¿ÂÖ¦·Àù&•ˆÍ£lm<Zþ4Ãu›Øè6±Ñmb£oÇá@l7pŽÃ¹Ø`ßfç!¼ç—¸yÑÚ\{Dì‰nÛ&6¶Ml¬´I©Cbc÷Ħª»9HcäðŠ?9 •K2ŒŽø#²¤†üùÙ³æáGçÚçï"¨+éÔ¯߫ÈãpS~µÔP|W`òœï×8>â{ðƒ|§Mw¼>s .Lª¸>ñ pÎ÷ òžù®+¾ÉG{|¿,‡‘2{ïÁ=ÈΤ°žÃ™?]ßßƹ༪„ΰÔÖ]äЇ‡vÞ§‰‹t±×HæU: ^x•N<ŒXeœÙùþÈö݃s.Já Ø”–ö¢ÛÄF·‰n}³Ø0:}8Á=p†Ã™Øx%‰¯ÄÆ|Ñ}p&6öÈö¢›ÄFxê’wB³/6?{É\L—1ܯƒð’?c ê€X2†!ü£Œ-9£Q–2îg?‹ ˜#v7ÏÅä5šüèW:8ùjíN^©ÅÚTò¤¨±ZáÕ—ÁPžªÉÁ¯›îÀ™{PMÞ@÷`å;p ‡WV!÷ÔÓÈ䊽‘ÙUHSˆ›¹…)€ÑkÆéîúI‡ðŠq½ףыN*æ´3ȸsÀÚAñ¡ˆœZmïr7ç\ú—ßo€qãE¾ÿêU‹Ø,ð¯‰Íç…±&¿Žï½ãp~h°0F}ÎqÎ _mŒ,áðMþ<-s¬³lf›T%Ö¨œ Êák–R}gì⺒>»±«/UÇJmÇÓb7/Ò/›sœ-×EšãÚ¿'èœÓ‰LðÝ9š“p9Ûv@`gÔv6Vÿ¨±>¯Ä\»szJm»7ÇËæí S{™ãesŽ+üi7§¯öä4ò4öqEÍ=Cð3ü±JF 5¼äêyr…þ”à Üäþ•é`ã} 'Ô¾~Ôûåj<~¿‰£ëÛêmÓµÀKÓ5ˆ§™Î›ò¯¥qgl1+œ8½o{¸TÄöÒß½=–;©]}ßû^ÞÆ—÷›ÎKù‹âeñ>d”ž{&;M}Fvá³.V\\–XÿÝÓúê,à '_y<ǹtߥÿéÞdxJxë/¾z‘=úÉ·R/oJdÖ˲ï9'úi‹ínn1ÆáuSò‹¶²»¹—®Îï„Ïv7o-yI’š8ïŒJŠÎR$ðó2‹à@ºòâ-ÁD(í9üÒ)ÇálËꃪIB—|E:ÍH×ûñ赕÷éÄ(u²éå»Á¤“¥NÇáÇIÈyâEØíǼáštÞç.è1bø²“¦´Öôß#H§ú .P³7+,IYàRK@NºD½ œIJLaSnäPIå ;8‡¥Î Á¤à‡¦“w·*lŸü8é¢OÎIg\ícfc—Š×nŠJ—:'.z‰t†Âým ;ØïÀo ]¯9œÛ:é‚ì, zQøbëÜÆ6‘Ã`òÀÖ%ÉÖSÂÛ¥ko¤°‰Ãe[Ç:ÖS¡áÕ©aLg§†sŠ91;AøÚÃ3\eó€Ô)q‡õá€Ô)Ýäœ(}3é¨s¢´H:[‘9'¾H]•Ï-ަ dã%÷¯ÏXkÑŒËFÑŒþX%¥êܪLèâpî_o¢V8Ø' ºÀÌG?Oà°ÂÉå7GÖŽbiã;ØdØÚûÁ0Û¸Êf¯×®ØÚGÎûõ;]{~ÝÜH|Ÿ|íµaí&²³uTãñ0z¯×nÙÚsåúd“âðãkOëåúë‚ÌçlℽºöÿÞÐá8¿ýV¾vOÑw¶×z½©(àÕÚç|òÜ[wN+ETæ¿}™¿Ðµ«Ü38–ùAè'«½³v×n´7lí}—zµ–ï(á5ßu½öaÓz°‘î=3~iù›áFâû”Dµ³vx<¥¶î²aë(œ¼h½ïåÌSÃÙs•²Ä¿’h[d‰oíÓ)åö}„ðZ´-í˜CN)ßbï_Y´ÿJæ\ksdí·ˆv̵{Ìz*àµhsµî;Ÿ4µˆ üàÚkÑþ+‰¶u‡ø~ƒh'Ý…±Ç¾,Ñç4ì •©áõGÉ^õçòö…3‹çp85ùíß$7ëíîn‚¿I]Þø—¤¤Þú)£b]ä²5¼-…Þê¶ë¹˜À‚—s<çŽ÷û²9ÁwçèoR€<„r5¼dÂÇõ«oDj9÷’Zß`CYO¢Xâ·E8´Àœ êµ í6æšÛsœk¼¡ÀøÃF*6ƒ<¤i‰ü¡pp–‡tõ]‡þߣè¥ðÚÂ\#v\˺~Iá"pžçM†~ãFKú ×yþ~*áòVàU‡&_gô†©fô[ÑÖÒ ^t#O›~þáRÅ"„WYP×bÅo[,ƒXé¬,BO'¯Û¤N·In“:Ý&uZ’ºÉºò%Örx-uaÊ(DRç!¼.¬¤n¬¥WKŠÚ×R—ÃïÂëg'‡¤N·Ii“:Ó&u¦MêL›ÔMp^q#jÈÑÓ“$p^ãšM ìˆkçì½æ±2ŽÉßcïú•ýú{nßÊ‚pÆ^%öF¯ûg÷× Hˆ½–ÃyýŒ‰À€ïŠÃ¹Q¹^÷£‚Fç/Úûˆ¶²ñgFåd[™¶^oeá€QyhÛÊt›Ôé6©ÓmR§Û¤NÜÊ®·)o ; ]-uqjå¤ÎD¯ª¶è¨´6T§p&u:P¡³.Bx½•é#R×¶•=˜6©3mRgڤδI´•õ“ÔÕÕ5^±Wu~ua^…t.?¼• 68Õð=ö>Î[¸Ì<ÀÞGy+3{€söj‰½À«CwÎ †ZRE˜ÀùVæ“°•yÏáüõµÆþqîáÕVƒ°•E0ynTt¶2ƒá¯õ•Ç/le®Û¤N·In“:Ý&uZt ”p*ëÁè<p-ú¤ŽZÄG-:P’Ôõ`ò\êz‹¤Î [œƒðj+óîˆÔé6©3mRgڤδIi“:a+›+X€­Œú x+¾êñV–ÿ.‡?•ùÞÕð]öÚ6öÚ›Ù‹F¿½½ð/²×böžµ¦ìû`9¼do~¡ª=`oNò,Ô_"dv¢ÂÖð½e%©Ü Âá»kã»kSkצ֮ïNØLzÐ6‘ÕŽ•òè´Á»Aß„‘<=GŠÀ½æpÙœW%¦:ïÙè{ÒqYb5°ÅÕžt\dW ÒA}ø‹ààæDpA:hÀá":¸I ÒᇃªTQppSâp^•j•ŽêÔì1¼*ÈÝxjö…U¸È×0lIg´^?¾N\Ë\JyÝ&uºMêt›Ôé6©c5J¼v“çÇ*•$©Ã𪨕‚ÂñgnHµ_÷$ߤR§Û¤Î´Ii“:Ó&u¦Mêäk#qLž];¤ ÄëK¿áÚÁ2ø{…„é¹ÌÅ{ü·î„÷·KÇ7ßÜõWbˆÃÁÕ•’n«€soÊKbcœWàsR`Ùs8Ø/50Vƒ­²LžUà›šVÆJ…áø!ü_qKïûˆDÛvɯæAkÉXÒ ù};ÎýG¢ÝÓ9ê6ÙÔm²©ÛdS·É¦¾Y6 ¨©lÒ#‡sÙ\·ÛºŸŠ‚𺟊²鈸ÂKÙ̶VŠ+Ò}U6õ!Ù4m²iÚdӴɦi“M³'›»¾óÂi©p?xº6¢ç¤‹”%üy¶¦vÐé¹àÛF™'g¼>97 þ°¶°|[jÎrÊû)Ó P>røqÊ{g9¼.;øG®¢üÙö¹EI:(Ÿißwlû:Gßùž¸|NwÒ³™úíîQ^¼GSÂ=šòtt)Ÿp`™/¶ØÎ^cã ? pö¢×YAeœçp¦21j¤2fðꄯu2CÎ~ó«/ª2ž©ŒAŒ;³ GgnVE…ÖžD“&0ŽD”øWgof\àŒq×.ÏœqÙ@øRÌ9u.õS{î’qêZIÂ+ÆÙCŒ³7kIGž §ßeJ¾+µw²a”'· ¼>÷ýœS[zúgGwk _Š|ºNGnëRªl‚»Œ3wuû.£èäoÝerÅ?Lù½v_àLæµ5Hæm.+á‹ÌÇ1’jÊŸ“ŠÑB8•yçw=;”¿}—1DaÕí»L!6â.£%cE3%V­¸v}q#r”ZàR‰êšq:uéc6ø+|©¬Ù×Q .ƒ»S®ÈãnÞeúD­Íí»Œ6þUÆÙ[×ÏáLã–d‚mÆñ]&Äá `ëÎ)Ôa2 ®‚ïñãnße¨­ÓJи8íq€qÃÇøÇ Œ^ÇÏúå5Ù…Tu÷ù DežÀŸV÷‹ØºmÒi9ò%ÒÆiÝt ÔúfÒÑc Öˆtôxá<§§={p‡Õºé§MÓ9N›[IWœãfx]Õ}=Ç]ø ‹ãÚ\š|t¦é ¦íÍ Û[ÿ¢?¯wýy¹(<3}wª¦ü¸ñ)Rž»„/ú>XÚ1v„òöV}ï‹Ñ]ÓX»6Ê»›)OÀÚ æb9_øá¿di]ÓVû¦3ì ÿ*åýÍ”ïœQ~9Ã^øéÂÉ=Vd}17Ÿ Š]ÕìÆ©˜löžÃ™ z¯éæ„KpØ£0êv‚(¿¹õQn‹FßJº"Äg´tø2©&]¤C'ˆH¬ëén?AÐs«¹õQÆèŒ¹5Ñ#ìéKŒî£oNBqkçÅ=ÒÝ~‚ A6só ¢/øÞ«1»±¦ï4à`à bÜúëˆAŽè3¡å'ˆ¼3ÚÛOŽ~û ‚:áÆµQÞÝHù2¼iœDy ໂqî\‚ã2ó ¢´´·Ÿ h|Òø6Êû[)_Ä't‚Xâ“y„prvó‡)û ¢0Ôávk9\êB‡Ì…åpîô,àtHáOä®ê0éÂÍæ"R©‹·› ÇáÇI€3Ò)¦ïçu+Ï­þ•XÍ ¿Eß)üv¯¿›t3éè½³IB€19n*Ï1ç‹v>!…Õ‡I—nVXrnýó*¥ËYº\¾Î(z^8k¼ÕwÂóµsà¨ù”*øðZįhÍñË¥iò—‹0ù\Àì´û¸dË“ÿþp'ÿúpxògrzÐ`†4‡3Ê».íS~Ë“/ºÐÕ“o¢üg”·®¦”[=p¸X,¾nbWbŸ»Ð}yòB)¨ü ùÈä÷*݇­Éªw”ÍØ%ëæj=êõwñƒ²±†s¾÷öšþ® x• 9Ãßù6~Í~GO8$«ëÜŠ©>ÈfÑHç:ùå+¹OŸŸ*Xlôé{;Ô§ïMìÓW òkcý>}obŸ¾Ð…©ÌFŸ¾·C}úÞ¶úôM7úô½êÓ7|u}ù»=Ƚ<ÈîþC/—¯æv|oR3@ò/ßñåÎfä ÉgÏÏvWÍ­ƒðª :ÐÊÃ-mfª–TûÅž¶sB†¥ÐÒuï ôücI+>±¢/ 8éÍpì]R#˃‘SÂIg@Óç~J )Âù®8\Þ²^êöiëØFË@;UÒÝ!JÔ[†:øäR§s ±á3éÂ ÇÆD‰tkÛ¼¾np±Œ I#ÒÒcŠÀ’n8kÚuË;ÚÌÞ#¤3éßIÆÍ@½h„/¤‹¹„IA"‡ðÙžç¦ŒÞÆ5ag&Ë*mK™77’.˜`ÜBÒ²€€íúf¨áˆÀ]@šœc’ÃKç&×!€ô³Ð‰áL­Oü V2I‰l*µh+—HÊ)Íp¤ÖktuøÊa盿#v78:8¼"pŸŸjûÁ‰Ïï#„3å¯ s¨{ N“Ébçq‰·šÀ8k´ä+éEáÔ)|ÀþlÈ…Þ ¯ȶCÏÞ/™½‚í˜ïewØû ox^Øð‚ð OWV!8“#H‡£VûA4= šÓwLžíkfº)á­ØèŽõ€MÏø0=Úw–x|+œµ©é7=ù¶×Çáh_·²¾·¯=îîkòµÇßMûÍV>±³.µuã¾v·\úS8—`- -‚óÚ¥AZ«9œKðõØ „6$çêBB«_.BxÕÉ ÃwðÒë;—Úá(c„—¼ØÍMgìñ ÎÛ&´öF¡ízg9ü«BkÛ„Ö¶ ­…õÈPU?¿~ _é6 é)”“ˆœ¥Í™KÛÒmÒG(Ôæéü– ýª?ÕK¯ÁWp‹s®6ôgo‹ºÃïKÑþúac‡þͼˆÕÉT´Èû[ò"òD—¯æ–ï e€Ý·‚SËðúGOû8{÷{â𒔨N·¬á³}J•q-ª¢ þDD6W¢r|ÏÉ'WeÀäAî„p°RäL:ÁÑÉ58ò•´±©)¸Ã^icSKjÌ&{•À^5GU¶Ù«$öö±7_§/<’sÊDÍÙër¹irkBáó“xï:Óë´JÇs‘c˜žv“–8ï€adx©½®s)¹Š½ç{웄í qð(,Ò^ÓEÖ´×KÚˇ´×Q ‘½þ{Ä^{ˆ½Fb¯³GØk$í ko臗ìÍíâ{S³×göÔ¤ð¥TX;Þ"íƒä…Ý4"{£¤½ltàt=A/²7Jìepàœæ„zçà é_à{B£ã×àÐßyÃáõÂ|ð­7e—"„“²¹$ÌjÛŸVv9 …G¯vh%Ý”hÇáHǵ¶T:‚Ä÷)¤ºÃ÷ ú\æßÃÍ|Àò=§Dq8W~¥!ߣò ‰ò{k]Œ ‹& /ùî§«äŒq8P~‰ï…ÌGÌ÷Ó|¹Èùl ú¾‚·±(òÝHvÞ8~ø”æðZßcXwƒôöÈÇÞCøR*#÷!ÙZßcü“ s!ßm.\&ñPè{ø®éèéf;_ð=Iú.\mV|O7óÝF?Ìw ‡3¾ÏÄ’ï!רÆpRn.™@ŽhÄ}‹ƒû×[.î&çrß8ü°¾ŸhÐë%Ègk-ðnRA<[O.&:5¸Ð±jr±ºÀÙ­¢Þ³ëÝã|aœÏà”Û Í@PEãQþ\$…ùô´É¸~ÃMÏnA>5Ç#ŒOÍSjrÍ8Ò¾“Â3Î8‹}Ø5(RDèª*'m„½É¨Øy8 êÖ––À©Æõƒ £EšÃ‘{-0ŽÄ‰_Âíçáàk8´´J:é"¸Pá˜J¯9œ›J 5.’‚¡%œ0.o†:²-r¼>I N5.u±O\â ›\â ŸtÝƉ'Ýù• ÷m€gœÖÎLå\άŒ@岄ÞC81•:—€Ag™à}¢QL/}5Ý’nû´3üŸ–®]>Æ!Šà¥{¡éÞx-ÀùQÇ‹× ô`5˜£¥÷'¼:Š&—PMô(Øå9ö]4:%‹TÑ: àH/Eoµ†#öJ`ù¨z$Ä£ê¤Ö;ì büø{ƒÄ^1{M£3³×üÿˆ “K9'ÚãÀÞˆ¡t7°×…úU”ØÛ'½žÁ‘öú ±×87ÎJ8sçOã!{ÍÑ^à|Wíëì’kã!Wî—‘±7划öæÓ* `¯9¢½QboᤛsÁÞ$g{„½Ib¯µGØ›$öâÛŸ.Z &_í½zðƒ™öF?Xö°Öa,áO$à †¯boN«K~‹öÆóJ¡¹zλT»‡&õ¥Üæ)%’ܵÀQ¥X!©Ït5|˜cU¢§¸A|}8<Ç™A®³ÎçhÝ~âáëòˆ·¨#\ÍñSÌð3S@u£íÿZ9Zgržœ‚Ir6g6Ÿ IΆ|Ãcƒçãr§ŸóÌLî5:Xˆj—~ðùÙùZ›ŒÀ¿RK7Ãuåuå5ÎÝ[)Ù¤¼®s÷V×¹{ M9ü«¤3m¤3"éŽQœœ_ò¬á-Ò™6¡5mB+^îõ‡(oÛ(oÛ(o…„Ó…òÛBk¹ÐNôÕG„Ö¶N®Š×RRUì÷CU±óW?Ñ ÃéÉ\¦äaŽ¿öà›Eµß7ŠjÇéh²QTûýPQí÷¢ÚÖÍ+‹j¿*ª¿úVâ'/¼~«X 2Âíçæ‹F¹r7Yɽ<ÈÊÝù+H®Ð;=”aÔáü-PgGW…1ë< M ÿúË×ÒÑ!9gîMzsÆïarùj¯LœÍú¼ª.NÞjQø¿"ÕŽ½*@r$±|¯ßwë4mˆó ?^@ ¿fvþ¥^fÈæ‡bø0DÃlþ•+œ×XËp‘ºZwä)Ä ¯ÙõÆ'äFÛœçÆáGÙÏ@fx–Žb.:%õ×<¤nn›B±f8ÓËQ±Dyâp&\ÁÆÓ^€^ WnŸã<éÃRgÂ¥`ñÑAæp&\× ñ·^ ×`StÞ#çô1å œVߵ˽÷FS!GÂ…äIu$Ud†#áZ³aÄ^¹q‘Æ.µI¿ÞàeÛÚË€†|êŒ%½ JxÑË€‘ª¢Àkí¸{TA oHÛ¥>PˆU†^ÃÔbË=PߣºÕ:=7XÂONåqÔW/à´ÂvÊ•ˆ õ  ™±³ÀÊJ!5l—lí€Bý‰—jgçê×SžåFýè^9îcíì¹h@Ñåp,Ân!¼"ÄœaAjg›Nëd×|®>,±(}ò•$ó‰kg‰/ÑxÍ–³”:’ñVÀkm0õU윎¤€à gKìR\Dåc£®®º–`þØ8u,põ*Å\áe  ˆ×@AçåsÃüƒ®—…àÜ @s9„Ï…W:ˆoì{0y^>÷zâú(¼R5H¿ãŒ¿úGs|òW×ú"P¬"ÝðÕ}ʾÞ”Êürp‰r—ðºJ¡™x+ÐkÏBGE®?ðÝQ>|Š~¥ÛD[·‰¶nmÝ&ÚúfÑ^îœ×Öˆª픟›û’çp.Ú×ËùJ´CN(Iþ&É寰h+ HÇD{ºù¨ßë ¾‡‚ðêñž…¢Ýwk·!ÿªhë#¢ý¸kµå3åç¢=Ÿ)?6J%8¨*§$ÑV^‹ötù±QΜÀ îœÕS0 ­æðR‚m6 ­ÎùÿÂIÈ ×ɼ^q}”a®?8—à$ m‚pZ\&_o$´ƒ9ÂK Vל›¢tŽ$XZÏáu_òWºM´u›hë6ÑÖm¢­OØ8» ÑvšÃ ¿#é<míu„ðU®“¡W•hŸ—¼íaËðP´ó^g§{0ü­Ì?¸'öD[·‰¶>$Ú¶M´íí¢­9ü«¢momÊ#pÊ›ü™RlrÅôŒ^ÊÐZP¼›ÜÌÊCø+\{ TÜr8!{`OŸ*Ð~€ ´V.ÇGgÂuê…^v]‚ç‡ß²p½È¹$ —âp \I.mœ9µ¢pQwèEa»™lHê:³Ö¥&pb7óimŒZ!?6Û´áU‡“¸K0Ò ‚WvÓ„à ÝÌ?@xQ§v.ªÍ\‚ÞSÍxÁ.îÂ5Ôú±­$ð£vsŒ¸nZÝ&´ºMhu›ÐŠ›ýtP¨…VÇà8œnöƒ#›óõZÝ/„6t6@¡Í?x-´z>áÕB«]„ðKÁ7c#Z[hœ†B«oÙZÝ$´—ý™xu¼À¿W¸È!3Ih­pW˜N¼fg@£óÊN2Á`ôc!³Ç7®NE{ðSèW•ÄÜ uôd!³ëWBÈ̃µó™×HšMg©sÁ!³NO 4¼G©\ÚBf9dFù£ÛD»-dvÑm¢­ÛD[ß(Úƒsá8üHÈ,_wõ¾§^ÀE#ÑöÎ:(Ú>'ûax Î_!Ñμt¯sø!`C¢ðº W†z½I"𯊶>"ÚŸ»V[ÎÅYàH´u:Wø­v:"ÚŸ¢Õž\L^7\EgEÄm‡ƒ"âÈj‡üD;pxåä—³,<ˆF°}ì„ÿ[èú¶Ú!9¯­vHÆÒt G¿OÁj«éeç+;î# üEûS¶Út‰ºM´u›hë6ÑÖm¢­omÛ8("žØ™Påì¾õ1¢ÝÅ^+hµu—oà!üÝ÷ç{z.ÚÆƒÉ3Ñ6>ÑÖÙM^ж [mG#:ŸmVûSí¹u!\ç.dQÇA+R^’À¥"Õ”½¹´« š˜ž iö¶ÃÅ!üM:¬¾ôgNnüØ(Màe ¤Ê`‚0ù` œ¬Ä &Ü0ùënv¼QœÀÉämÊÙ\Bä%7 ‰þA3­\0 (Öõ§Z–«DG«€b]€ð ÄèE¬ÏÒäÙ[»RH®Ã­¦ðÎFîŽoÁì¿pKu¸k•U\s8Újtbó¼<„Ã2Þ Œ7]*ãý±Qÿöc)¤ý!•ñþØ(ãMàä±G,»2SížRÆ[›n8Ãúä |©„ßëy»ÂçÇÞO¥ëk8·®…ú=õÂæ¹š°v¯ ᜎåÚó1Ûe—‹\fR8yõâÆ:õÚÉ©§)z^¶¨AŵKt³·ÄËæg%½HK¼ðÉCøÖJ滑‹$i—MI³§j*«@Õ£/2TÃwEÅa7í(¦£ñ^1:.Î%Ì!|^IŸ›¶ê˜(½=8G/ÌÑÌÞØ2ÇëƒÍ>’æùóA7’Yó¤f•Ϩœ’TNûP›ßw¹j+嵂*gRçW«2OÞömÍ‘ ³¾Ï_™½%n²AI*·,ñÂ'á+Ùkð±Ñ`“AïÚvÑXz¿07øš|i¸]R} ßiðA“€ÇÒ6NX:ž®£Yƒ¥ek‚ÐY²D¹9ÀTÂìc£ôýßr<€GàBs€Ò÷.•¾ß>›ÌÍ>ŠÒ÷ƒC]ÍQ·QHßD¡èÐèœBùMý é6 é#j;½ý–¼ÏU ï3×´'ÔßÐû<_¿BAÍ.rGõ»WbP“å ä’ý‰ôøXªûoë6Žu œ-ÑÙ€WåÈý…KL±÷R6py‰sk‚©5Á¶K±Ûšàc£5ÁÏYîmc#ÞÍóâÝ­ >6Z|,­ >6Z|,­ >6Z|ܽH¾œvµ*ríú¬ŠZÃijotî…tÁ[èxô}H^”·´®3ËYQ¹Øû2I£za‡žüUÊoQe[VÞù{CþE>ðiéÀçØè("èW’Õ÷Ó5Þ$«¯B8Â-ðÇ' øsÊ=-‡üèhmo9üàã§!œTÿ ƨT»ùí°cé”8\ªþøÙä‰è¾ˆ"Â$6 Žø“Ìþ‰?s~oÍÀè%ì }!¡³òàûö—ò=®‹AÍ¡øR·8õ`t©|çÒª†#þC¾²¢}óXºk80µSkjxøãpÆŸ8‡”jûfI8z—öMçþ¡âÏ9Úát«"9üQøÌŸñŒØÏ—%üpæ±`í ¹†>b߬dߣ“ø3™ðþ8I&¯i‡?NÚL€ú“¬2NOƒusF»kþ„?.Ƥ |iŸrÜÊAý±¹'xâðöŸÂ¾9‰?Å¥Ò“ó~‡?^ÔŸp„?^ŠvA û3^Ú7—ëb£ý' RÓ+_ö=Ø7—Vö’â‚&WÊpø£Ø7/ò‡XIû¿6wúµ#] GúƒL¹ðr—Êq(>jœ•Áá¥>ι¨…á¶øè5„+µ¶ÉÕá¥Þåx ÊP8Ѳ˜Ë–{)’Ÿ8œ\½À8rdzQRv¾êã¬èxÛ#Œ³·2.Ô¶ÎÝsej‹hó{!×SÏŒÀóèò“Mc\~Å® `Søâþ…a?Ov²›È"r80Q`uj•“<>aǪçD‹èŽ0ÎÝÌ8 FçûZ€© Ã.ì „/Aò›—×óÀÓzr!˜d!œhœÉ wæãÜI²›N`Ýð”´•¹d¤­,Ôp@‹’©TÀË o`\”LeðZã”î#0•¹"Yo!|)·jrºžNìò«ùxç’ƒðgº‘=YÚSéo6•šîqR}äù”³Ã¸ îqöãÂ͌ӎù§o d\ZC8ÙãGrÚr }PÔ}#ðÂÓ×>ª#n4•'s~QRåã`ýÆE‰qSúöãâÍŒëÁè|‹ÈTÆ\–ØA8iªâãpÄ Œqvå¾Ü&"ßãLîê6UÙc\¼ÙTÒ³›–ö8g%S2NˆjÌpV24Î¥*.µ¿Hù®]}A ÃkguÒõ5Ú@{Ó)š'°ÀoQ¿N‹Ç*z2Ѿ)ìª}SØu†3/a×ËVØUû¿DŸ¢«5‡}&o'Æqøã¦Ú‰›êÐ7Õ¡)n:Ã}B\ÇMgxAà)µdÛQZ²í}Š3œ› œ“¸‡‘Æ[û˜˪p¹Ão`ËàH‚ Õ²Ô¹Ô©)r9Ã9çÈåe+r9é ž” m% Û"u[tj =^á{¡GÓ7…¯ð/‡g8·Á&@Q†g8!ðad&bp/¼§9` ü‹±Ã+|/vh$<5§Ý9)É ïe«“² {'eVÜ™ê¸ 8/HÙ‘í:ðµ—rž÷ÉÆEÑæp çJ²tôØ4±)*hâ”/£‚&ž//8`T®ñ>_(ï;M㳪‰Ma=“šÂz&5…õøaÊa=“Ê/a½ ØA8I› ½u“Ñß>³Ìð/Æå¬ÔÒywà°i%s>¿LØ>l.pñ°É²»ÄáÌÚ„ÞrWpp©MOežÀדM~¶Ö‹/ÔXûakS+«škV5Ö¬º‘òe`m†3Ê/µ ™A8±óaðfb8`m¬jŠŒYݳº)2fõÍ”§’Î=Ik€¿Æ¼ œ¸êÃ6hãkcuShË÷7î°åùÒ÷{xÞvÖ¸˜Ϻ—’\Ãκ—&£y ñõ‰`€ðÿNä@—ê[€Ðçú³)âÑ«¾ð‡®o¼h¬FC½ð’±òÓ+ÆÆ©½Ào£ü8ã ©SãTïãR~ï!|ÝL\æœr5ã¼ËÁŠâÐ@àeÓ5Û‹Œ3ΗԀƒ×â.ã×¼Þ;ó¶³ ÀÅÇ,‹¼ë^à¬b4 ˜œß† œDÜ/ÀGË4nà‡³¥ÆiÈ8•Ûe8ŒxÑTz{àœíÅwˆqfïœ-·¥ðÃŒsQs8c\o=`œÍï<„“ ScùM÷|„/Ö@Si:kíSiDÓÎï^ R{{à,ã}Ó)r×ïzN9ôÒª¨-‡—ìÕSI³{#„…[èyêР—ù)ÜzmWm~L9’*2øÞQÕKá™Ðû#ì MGÕöË#ì {]²˜½Ê¯Ù£JLaððPÔÀÙë;#e†å“Oúpsô-1øÞyØ‹1 œ |l:•-pnœƒxhàpžÍ²z*å ­îºÀKöú =coLã‰#Y'}IU®à{mî²ÃáGµ7ó—Q~ïèçÅ@S´GØ›šŽ~ œ·MGØ›$ã§öÔ[°ù1¿MAŸê7Ϲ„KLäþås£Ö„Dà厰)¯Û(¯OÂýKò0 TQ^³›¯…À'þûJSÿ*é¤ÃŒ ‡HgöH'÷%%pÞÆØG,´‰ÜÊ~²÷>ƒÐæ´´T+„v8ÊИŸì½Ïøß*óÏdWCÀ¥w{”·m”·m”Šf¬”¿lRÞ"¡½˜ íLSÿé`GØO¡×××ý“ùöÔ«"· œ7°É_vZÅ~à6¬!'uýq4k=íôgÍð>ú°×…££¿L£W•¡çÑ_6KFÃî°ƒl˜£”¿Ì”ç=dO;mc?pÛØï”Žþ9šËžvúÉ~,L?¤6ªk®³œ¯ªxÈmTí‰×ßG)§mT‡¯Æ¤V𛘋~˜Gš',m¿Ö¨f¾Ò>¨þ•æ +ôAÕ'Øô{ð0œ¤º8ù+à-™þz¹¾7È—AÞÐJžuhÞvyG~¿ Ñ_˜÷áá}cþî.@žèÎO}/û~ª¶YàOê¯ÊAþC+IFõãCŒ~€ÿ»ï¿÷?ÿ*äïÍq„‡ÿvæø ‘+)º±ôêîŸÛæ8ÂÃóöã=4ƒ*‹÷A®ðx¿3È–mcƒ=2È׿¿·€ñagô_§»ò½ÑGxüµ3Èh~d„Çmúî‘Â4ÈËïwq îÙWå Oøˆ©¦F^{ƒŒðð´3ȶjì2Ëöö ø :7–Ò×낽AFxø³=Ⱦm²(Ðö » ´=È®m¾«@Û£Ï ´=È®m2+ÐÖ ÿí+Ðecÿºl²«@ÛƒÌ ´=È®m2+Ðö » ´=Ȭ@›ƒì+Ðæ ‹m²«@Ûƒì*Ðöè» ´=ú¬@Ûƒì*Ðö ³mò‰‰]H#û;óëú‰0È5t §’ÿÎçæèÍK±ŒŸØ»y‰ͪ¿*åQ…#ƒÌòh·%âz|Üd’ˆÍA^%GÜMÏnz«6yqöU9ÈE$z}dép´3Èd8Û#ƒL‡£íAö¿9ÈÂøíA$C¤Ý‘•ì¢ÑwÅn{ôYì¶‘ Ñlív™ ÑÖ =dV~ãõ´5ýìåAúeר¿*y€ƒè4E@öÙÝ5¶GÿGï{>ï[ƒ˜t4ò f¥£ÙdŸŽ›ƒìÓqsô}:n޾Ðqc z–æúò$ȃ„ų¬¿*y’Œ‡uG™÷¿íA°g™ãPêÈ ³g¹=ô,­òÁZÉìYnr@¶·Ye{s}ÙÞd_¶7Gß—íÍÑÙÞôÐyӻŠo rÿ«É³œáø”xõ,7†?'öÎıÝ„«º¦.y |üªJ\“¢ûÿ¬ÿI“Ÿá˜Ž×8ãÏøS˜¼¾ûÖ¿Cï(;z#tÿ¤•0úÝÄ©3åWzžãµJËsÄöñ”sXG«r¿‘œ·ÀwW‚MW.Ÿºp]àrÀuKÀu“’¿<õ3Ùd¾LØDò—ý5Û`où2as(lyÆ\¢î ²†Ž7üå>j{@"vÌ«~ÄnkôW<º2öÐè#<¾nDuíÝ÷I¶ïÝÓ‹A×t¶¯8ðqWWO_ƒÿ¸Ž>˜×éÿj¡ÏÓ’'?ÆAìÆ ë­4Ç øu›Ês¼þ_=ÇCðÁWâ¤(§ît=þ¹ayqE”óucW´Ïä+úþÐ ³@m "D9u§â5“Ùõ—Ah”sc}rmBbZ[ƒì’k{™\[ƒüŽ÷R˜äš­àŠö>õ ¿;VUò ¢¯9 {ƒìº‰Û£ï2k{ô‰Yj{]fm23kk‰YV‡‰YO²D¼¬›ÎÃëÆ ³L4ñÈ û÷•›£ Ìê}ÔGF_¬Ýæ YÖû…YÛƒ,;ÛÆ ö™u·1ÈŸU³6ÙeÖö ûšõÀÕpÎÒsgéW»,ÝžãÌR0Èëjô]^o¾(æ^÷y­6Y¢§ì«r]^o²ËëíÑw¹¸=úÌÅíAv™µ=È̬­AÞ$¡·×{Ð{û«Êða*|*W×ácsttLÜ®ÉoðïÖð᜵=ˆ0™Î¸4Ý]î 2G˜6ÙúÍA¡ßdWè·ÙúíÑw…~{ôYè·ùOþØÙcÝdŽ0m²«Yۃ̚µ5H/2Kûi%Õ»‘bCW[£KÌR×H{£ï_ä¯0µNd¦ãÖJÔ•(yµ®Dm ²¿’ÍA–•l ¢%a|˜Ô÷§–ÑkZo ²O®ÍArm²O®ÍArm b¬ÄȃÐÛš­AöW²9Ȳ’Aì•Xy»®Än ²¿’ÍA–•l â¬ÄɃ¸u%nký•l²¬Ä}ñÒ5ÝpH Ó ^į×t^6^ÔxëâAVßdŸ'›ƒ,<ñr©IW×Ão„«|‘púº1ˆp«éô5޼7Èšpº1&W–¯kygÑ=£{×»Ó8%¥?\{ÎP†Õp<•½°Ÿ—“Wf]ŠVçå„ý¼”ÜH™µ=Țܸ1ˆô÷þúNng#ÙzÏ£ïŠÊöèkdsk&Qùo0•½§¿{BJåRcÓ;ßß½=ˆK|"!χAvé¸=ÈôØä·$vê–ç7‚Ž <§ŠAG#Ä*w0#äÚä@„Øã±ÊÎô±A"Ä^Šç·»Î}?Bœ¿Žy½M‡–8ó¶‘4Ë*A³Oe/>íq|Zå|‹¨ÈqU(>íq|Z底úØ ñi/ŧóëNkŒ¾Ÿö8>=rÑÙ\|Y¸øô l¥[£ÿ‘R"æ\êA:¾‹Kü³¤DÜm"í×S\g+·ÀñT®ùöèÒF>ÕrØ[âšK½5ÌC0ƒ.:}d9as}•Û„Ü2|ßdWå¶¹õ–¡}Wå¶GîªAšTîÏj8¡<Ž÷2_÷¹¨6¬Ê‘ûïJ.nÒpà¥ûÊÅíÑ÷ï¼”}=ì±!ZâJý½1H“¨¼.¢¢$ë¼½Äx‰ÑôþÈGxü×?o˜×·6ëü¶Xç/\‘xáŠ$WïŠ×ç]~#Ví]‘x|E¢» ìtE²7Èþ‰ÇW$¥^oràŠÄã+’R¯·i¸"ñÒ ÕëíÑ÷¯H¼|E²êõö ûW$_‘×ë·E¯?$½Þ½D¥7iö~öò.wäM‡Ç4ù˜¥mh† /]Ðd«bã‘Ñ÷/h<¾ ¹¨Ó¡%î_Ðx)º]¬Äʃ‰n{Ý®V²9È~tÛKÑíb%NäHtÛãèvµ’ÍAö£Û^Š +ñò 4&üº1ÈþJ6YVâ·V‚¶øØùù¥ËÞ x‹Ïõ'õõ‡Ë×⇴”ŠówQ:þ…ëk€/=¤ù‡{*³ù)¸”ŸøSˆ|o0üµô'&©+ëàžÝÚš•ÂAáø+¼,ŸËÆ+ wm2?ÁÕÿʯ¦:ÅX8i†¨ 4CTš!*€Í€f(»í^Ù¤N¥ˆuI÷€qH±j]¿ô]!óîkì¥l¹.å˳¥UC_OŽçëW¢.8P,Q— œ)–¨KÎKÔ%çÍk41¨÷ófr÷zT±Ü¼=–í$•ÖóºþÃbèœ ‡:0z­Xë^ÄËø†b=Ê[Ù犕„]&ѹfLÞ_¡qØ í{u‚[Žw“^–»LÈ%œ0œl9ׯÍP`í\3ÒŒáÐÛÇáµf¬QãÑkÍp4c†oo9÷¡M3B›f„6ÍmšÚ4#ìhFí¶[Z{½åô“›Å·&L±N&ææt^m9ƒ3bT¾ ÐN¶œëWG+´)VhS¬Ð¦XAP,7vwýÓû}ŲÙ?¬›_‡4®<=›¹HˆWP'ïA8ØtófÏÝ7ªqÂÁ& ½¤KhôÊ—Ë"逳n`S’2X/4#é|~±p—1½óN¶œÔ™¨Øe®?x¥ƒMÑPò^hFtN<Øx¯œ±`2œÎ¶ó`ô6Ôÿzpm2/l\Deàp¤¢28Ð Qh†¨ 4ãÀÁæA<Øx-è’kGŠ…6Ö‡g»Ì|¤,uÉäˆ7†ź~%ê€Åu ™b‰ºáL±ì2Nrß 1*ófRt<¬XâÁf‚s÷ÎñQ>Ø$Á} ÎÝ·(¸o&8S,÷îòÁÆbÿËYçš" Ÿ¥|Ki`\©Ã^”¦°véé~ðþ<„ÿëú• $*¾Â™f5#$ë ¼Ö ‹5#õÂß ÅpӅܶf<Šºå<º6Í·œI:Êp8ÒŸýØùGú#ª €ýUÀþˆ*àüøã„½(‚µ³éÔQã8¼Ú˜ò(à½È) /6&­{QþÀú‰áLýDƒp¦~¢Æqø N^!6¡MãBÛ^Úö¢Ð¶…¶½(ììE\—¬p¦XéØVf¨“÷ŽoeÙÇË ‡×§§潨Ð%ÛEo,„ź~ud+ m[YhÛÊBÛV&†Æã4 %ÐÐclӸضÇŶ=.¶íq±m‹m{\”ö¸ùTV«¢6šÃeÛ–ùØ&ó±Mæc›ÌGñ`¯2ÿö\H‰ãüg>ñüy» XkÇá\h”` ‡óˆAÂgJ!8K'Ahéaþ„Vi)/€¤ .p¾Lޏ¾£“ÝÀ‡©w0/à”ï „иr¯{ 6€ë^–Õª2e,Y…áÅ]¦rV Ê@#pølLTıä„Fÿbøl†[ óä+צbö@¯D•áp¤?¢Ê8ÐQeè¨2ôç@íd³A²)@y¤~è,“CË^©_ÎA¶“Ï|‹NB ׯDp ~¢ÆA8S?Qã œ©ß½èd³G4.´i\hÛ‹BÛ^Úö¢Ð¶!;pX£t- àl+S“Øìle T®aj]òNëäº81®Ð¥,ޱ0•¡m+ m[YhÛÊ­[™ÓLêài8 qï³÷÷þûhº•ùwÑû3îÀåé»èýMi^\ã œß9éŠ(8Ó¸9?¯îÊÓQ·ý]Ì UQR@ùBeBΊ_žöžæ™¼+W³ÉZWË?8S™õÈR©ŒÁð2­À‡Tæª3^ž‹|Ä—§®sŠÃ¿èý½»6™üºœ,*‡ßpyJSßE¿n†ep ¢28РɯCpžª„í'hGж--€ó½((°ý„aï£AÁwè×]¿u Àb‰ºáL±D]‚p¦XüºwÙ¯£ mŠÚ6“ж™„¶Í$´m&‚û65É;¹ãp®?þÐ^Ý7cÆÐ}ë|Ô Â‹sQZnYª£P*Âgï¡m/ m{QhÛ‹nv߬g£ïÅ¥ÿ7{i//‹n9ÿßîÌŠuwù_À¢²ù¿Y ÕKš“ú?1+A)áÀäÀÚ·v¬jtê^ÿOÌJbtŠ>DøŸä'i/-´^-¬óA:ZàÑKÙ\6ýùoЃ”ö €3Íp’f0:x ,ä&*¯8¼P“kj+l&4(ò¡ð¹U§àá¹5ÿàµDƒ ä ¼J‹öÒº}ˆgñf˜ü ›‰p dž|åÚ4CòÒôô(© ‡#ýUÀþˆ*à@D•p ?B Õµóe¾AßV,!é÷”:A±Š«Ð襩.§àf‹ëõ)–kS,צX7ziãɆ÷ësÞr>!Òú)n9Jª¤Áè¬XÌ¥8|Š[ޓй84:´¹(ÿ“¶‚x~£—×v9W/z¨ÁвŸBÒÖ š&måœ_ÖG‹ÕùÅy/C¥ÉŠçá•hOup*ÍðJþÅk»O×&ób:–‰¢2p8Ò Qh†¨ 4CT?žŽEÏ­Ÿâµ]ÔbÖ‡#ÅB׃ÿ†àµb™‹¹¸ÎkzÓý ¯í®_‰ºà@±D]‚p¦X¢.A8S¬ç—Ït¬å«”’Í9S1©±é÷þC³Bu5|Ðõ½uƦ$(¬î„ÊçÒ,Qþú¯õ[¿bm¼ÖÆ«\{‹Mnn áÅå‘íT„—Gù_ °~iò›Êa_så„bæ7µØäÜᣣ“ç¡h©±Q›Aè!üK“_Ë=»¯LÞ3…±³} EW*'BcxáQô¾sXà¿ú9â׿ïxÅÚ8¼ÞÊÎs¾h¹ š™¿ÀËÍäúØòþC¢% œ3Âi·NäSïF(®õÊu©†çì¨1ɳ÷Iÿ8]½©»ëÿñAjßÀõ䑯„„uêh^Âçí–¥0.üò[–à^~ß›bŸìüÃéï…¾K¶WÄY¦ðÿæ@®íW*ÎåT_~?MpóÅ­ Ÿç¯BA!’öd„L«£KTx‰ÎO²ÄÁÑÆUÌQ±%_“êåóü|IH“Âç%›WpZ‘ø'³l_ß¾´D—h—`À¼ÄÁìg¼áÓÏQuƒÛ1¿O"\4±3Áù‚BºZâ0È`ÂCì .®ÌW–hÐGÈ”“?«a{ É›¤ |^ɰhãX˜ˆCÙ센ü~,Fwä¾v‚q%fgRE¡ù‡HGOxtã‚ã÷.Ôp>º§>žÜ®½¸l±aq/’½¸pKá‹Y|! F?¹]…ßž£Âs\þÂUÂç9êAÌüàoү̞ÆnÏÑà9®{áºá‹búA˜L¡×Îî©Üö-š#U¹Ë–Êø¢r¹¶©‰”ŽË©£9œÅ £ßÕ™Ë–ÎøTÍqfxG’ žÒªYبô:¿¨_™õ»ÇµÛÆâ.'ð.!Íáµqî,¬{ÎüðÒ8/õc+Ÿ‹çÞ|ð”îÞd6üž½9¶ÄSçð!¼Zâ¹ó×ô9w&x½DÛ oÊÒίœÈÀùݱÕ0É[o ¼¾;ö8O)Pø[­éÇPíã–(]í}ž¥@„—ÊcàD9_€ð‚B¦BMš>Ï¥pÖ«&ÊÙç¤ÇDÊBÿÖj/B¹½v%¬Ý×nȈÂéÕ`9‚VEœ^DÓξ˜£>‰•ýÃÅïý`Ü&…œ ÊF)”€ð"OnU¬Re I³¡pñäsšN~7–·½vA:”1¯ÝªG¾¢s§ˆ ¤µkgC¼vÈä÷£i›k÷&¨õ^¶4•ªÈ„ ðbA²¾k’bDá,d‡×®-ün0n{íFZ»IÂÚéVFàB,ñdðS8‹ø |wtò»±¼íµ;Iß“ô=YBlí$Lá,`(¬½'“»ÍÓj#H×þ¼8y?Ÿ.‡‚q…¥}V{Dz*–£i«Ê<›½Ë¶:7LÑmÏ»v¾†—kß½9`“ïÉuñ󮵓·¾§°;ð=™ß†Ïbƒ(tõ¿~Fù*öy>Z°®„ô«—^áSŽš\õòôV îj8ˆÛ9G¨>cÑy€¦sÉ ˜L,I<\àôôtN«:¸Ä"kg›:ÈU,…OG´sp]ˆÖ§X‡ŒÎÏ[cpN¦]W_z˜rKLÇqFàSA!-ØÌ¬· ¬{g!£%;xAàLG?ò׸ž3y·¤n0…ÏŽ:wÔŒÀùïêΩÞr8'0I}éMM'xïX |Ù$ðmatdáƒ1\£ÉCоC!‹)´6–ݦ(47óÛ¡(ú)”L¡?ö"k.uz2P+…ÎÑ|H Ày3Ékxé]› ¹6rXIOókF:],ÑÁøugµqÜ š|¿5„?­ž[ˆjQÒŠ?VYà„?çá8á‚büNXƒqµ…uG$XÁ¤¦Á·7ÉØ¥D¨3V r8çÏG©¨!Ùœ ¼4¢}.ðë™ Ãîá,5¢N,ذ^O<“˜³øë9|{—RBsï û#  ”D`XI8wO^x0£9hÍ`0Iká+S¾ïØ¥ü`9´æð ÖmÖmÖØ¯¾lXŸèÈw©t}LžÃw($ìãβÁJì_®Í ‘B^§ôŠäÙ,p²{×i?lä PÈ›/¹ç\àÛ»”²m2dÛdÈ ®¤IÂ.e´åp¶K9§Á-øà £ ü‰z¢znÎv)GBá+œJp~uƒáü19ÓFø¶[a—RÊÙ¥l/yFKWÀ+_ãÜMÏtø€8 §ŒÁIu¦dv®MpJ€ï" &Åñ.œ#ïý!¿Ûɇcu„òêFÊŸh*÷¯8û¹½6K'Icª×a áiŽ6n¡ƒÞ…]ûgn› §Û(¯Û(¯÷(Ù¤¼¶È…òNS'î“UÓÝÈé„ã´õ‡,­½ {ˆtæFÒuÑ%¯I7½B,-­ÍiÝ&bøœØ÷×Ù*ð.œm“:Û&uöVKkåpî]8¬ÌËá¥wá‡C¾QüîÌ`ÁMðÚ»Hy9×i¢žÔ÷G#Nò.´>Ä8)Œ¿ÔCÞfœ»Yæ£ãpî]8ËdÞç[’„?‘d½ÔÍÖfÓ»øs7꯽øYàèñê ½Õ´¼Ê/3XòÚSbI+9™ÊP©£ðꪻ §Ý‡¡ ü–C®†çtÈ*½£+lÚ(dÚ($dïœ;ëŽPÈLKüþ ¿ÞþsçnYâ5oÑp8{CœX¢l’é„]¢e“¹ø*/ñUݼD&^àÇ–¨ýàÜ“.›þ•%¾Î‚ú´µÄý§i¿¶„`yš’–¯.7››lo8\NJÚª1²À‘^_)ôQUYK‘›Tùrƒ*çû@om(Ö~»*»®†K|x¹øz»=×äÁ÷ë$ç!°V¯w¢œ+³o­^ƒ¬6õµÍZ½¶Y«WÙZ…ªüºX« U~=¢Ê{ðQ•åì…÷¶­ÿ]³¶BxYÏüÃñ…FÞeQI­g“wêé»,*ï·+;v}ØWøwAáÏJTør‰³ÂÿÞZ⮨èoßÞ÷à Os‚ÿ@ œ üsÕÿºÐY.‹zڭ˳ÀY±¯8YT^ì‹x³š^N õ½ ‰R8yko;å=oŸ{äæ8œoFŠÎq¯r'5|£j#]"!ëÿI…rC>DºAOmäpNÇu1•Þ`8¡ãõ«¤Û·‚5Q¨hÿo±‚["ø$Ë‘{=G,6Ë=ü+ŠÑú,fX†'}ž ûfèá‚Âg:æ4ؘ–4Â…tçå‡ÿõ—rªð@>,«œ8¯“çpV¸âÜ¡šxcñ.á¤pEnø£®¯ÑÔÏ^¶oÊÞá˜N4Ó~Û«ËS©$Ž9Á-ûª ²÷|œÓ­âtŸØßß½n 2Âí}ýU5È^IškJsüµ1È·õWÕ Hœ“í픋P¶›gƒŒpûXU ò âŒOêjUÊžªlnÿÔ_Uƒ¼cr9;Yç²ód„Û÷ú«jÿáA‚OeŸ6È·ÿ«¿ªùÀƒØ¹igY²š 2þf?ꯪA>…Aæêæe)S6È·ŸõWÅ úN|w<‘«61Ù+æpbotì†MÕD\Ì*Wk†ðjm’C[§jx~}¡e{£ï´¸D/-Ñr8]â0`™Ä¼¾žT¥ðšN£Uâ§jøÎÀÅüH.qX!if•ëaDÐJ~ØîûDÞFÌÅœ–@…£é‡ž—hä%Ú;u|Ë ƒ¿è”"e7,™c)lyù‰‰ó„ ¾®$'^¹1§*OÞÊ“w·Lžï×Nœ¼92yw`òNž¼¿eò~ÿü4'r8™ü@ô4–B­&?OœüÉ{yòá&± å"””O€ò¶ ¼Š xò9ñk4áyòAž|l›|¼qòn8ĵŽxòv üäæ±Goåäû¨:çÌId”|T(óW_šXí(ø¨ãW“*Oþ^(j<BçÎ/uµð|ʬá¼(xþê4U43{£ãÒÇ'©Úq ß.}|Kç°kÒ~ªÛ|/——½_j#BˆkçpDˆÓ^åäû¶ÊÉ÷?õ_¶ös~U8XÝkŸà_]û—×ΪÄö.p A"Šfð¿Ã ¿7–Ø$?Û¤ãçmÒQëÏ¡ÚÅ÷S4ùת “ﺌ¸?Œø) "G†ãP¬á ¥U~îÈ›ÆÎN3ƒ%[ï²~:¬ .êë¹l›×3œóZÏ—í5¯5‰‡­pÆëÎ{ 8«þc=Ö†œ"Èàµ6ä¢DØ7ê ‡Ç¿ÕWgúÕ믻“!THS½–7F<Ãët‘ÛNºÎs©³F‘Wk|Î÷±‹Jé´¤¡<Ò¹GÕŸâ-j8¥ôùa¬e e§ñi=ÿÌðŽÕc†Üa™|1…’Ó‡(…rT¾_ßõÍòv8A»°‘)à3…òÃcûõí{I¡°6+à3…L¤×¦…Dk6:£Ð­Z¾úïNH¨±sÞ%Ë€£ú領Pºpé€ð‚!*[åº(å:lXc3|X"{Û¶¦S_y!ÙËM¯¢v–èÁ ! O# Q /ymCýnL…þû~M£Ÿál‰—û§û»oøõìhÓF6Ü«ênGuKø}ëûºá\s'ÿPvbQËýF¯L¢¾¾Î¼ç™EK…< ÿ…kpÜ»§—ªŒrþôb«µ_'Ï{*qÒé{z¿¡ú3‡ÍüÃk…UÂiÌ- ºlçhæñçÙ ×2U÷ É#]»º‘ïÙ ©áˆï×ð,ã{6þY܃à7ðÎø¾ë¥Þ*¾g•ìTŒ”ñÝ{k!¼hó{¥9ßÏ×8ð= |wtíîf}/¤Î‰|O‚¾;ƒà5ßuøü‹|w"ßÀ÷&_ÜgÆÐ9g4ä{0K𣄽A¬qðýú‡s¾_swß©¾ûù®;j8âûu/|WÁk×÷z²áv^éàÇù®-€×|W×2!œïk¤–ÀË{lßž ¶ó®Â?ŠÓ¥½fM×v~üÃ9߯÷†÷ ÿ"aœ»u'gÊŽø~}Ö„ì|@ðŠïF)a· ÀÁ69š—àß±Øp}׎ÃËz°h ë»/øîðþîr™QÄ÷ñvÞØßÝöwSÃß­ô=i¯ù®½Äw¯ø~šzD "€æ»2žÃ ß­é¼òS&ã»ñACøG‘”¡¯^Í÷ñç|Ÿ¼ÊíýÝݾ¿k]Ãß–öw‡àõþ~ÍtAû{p®ïQâ»ðã|÷^Úy§;—<仵t“rp7]ôëq HQŠž…œ¼¿§û»ó7óÝ3øMû{A:i×I:ÇEà`Çv~?Søa¾÷!pxÁwm;Ÿ&K[ó]÷!AxÑ…©‹ êûø‡s¾‡´¿¿ŸîÄîË䣵‹ì}UÅ»ÀÍ·7EªÑMõ†ìS9ºq^±7ãÜì±U%ÇλÈz$ùïF/¥c°ói¢ ÔæMMþõ^•®§žd¾ ÔæbljÃ+ᬂ›N‘¬°{k¯Z’GÛ)¤.WN ÂI*?îcRwž~p^þ]Í?¬‰S¹•öþZzÓùÕ…÷0Nêœ l¡Bën“ùA ƒçpõ¿ïåfb¯e  2pø 2oÀè_•y×&ó®MægøÿØWšàâ½Àk•Ž[ ©L~Ái9¼Rí¦F7ÌPGc"„CµDŽÙùú€S™Á­óÁAøksJ\eróKÂ> ¼R™ü Ïyß§ðЦ2aWežb¡°.î2¥ß0ª;€Uã®ÆÝÿ-UÆFz)ª"€½UÀ^Šªà¥^fï͉ªÈá|+ó¨¢ÉA#@:vPvÑU ]p ÃÿÑ8xþJRE à…^Æœº¡ðîIǶ25^€*r8Ò˼Ïß÷Oï÷ÕùŽŠMlSØ()l<¤°ñf…-܃ئ°ñV…õ…ØÄ6…m oUX[xQPXs­ÆÉ6$ÍáÇÖôƒ.õ`íLauÐø²ÊDáåÍ•‰îˆÂÆ6…m %…_…žî~>ˆ46bt»ß;ˆq]¢bsoĈcVêRׯ©ùÎUF ´*g*3G _ïuy9 é•©¬‚µøˆµf;8s}tµÌÇ0Ȳî#½>où`-8b…Nê˜89o]¿dÞ¾2¯mCd>Ò4S™Wý|ŠÜxìNàà±;™ãÃcøuP´©f<,¢]˜´ñ+&óùö*xç‘A3Räp¾åhI3H~…sÍ0Âfb€3͘#šõfB/¾V8ÛLðÍUg=å?Hš1=µ§š‘TóÓ?À¸Z3ô|\«Û_+‹Ö^÷ÂÎ_I»˜|¡ùù¨^7“J3¨I{@š‘Sƒ»Íx5Ã9>ΚQ¼e;¬Èè_uàHôíGßFávr˲ÂkˆÞˆ»€sÐXæMk¯¶†¬íYeåY2ç –yç"‡—ç—8øÅ|õ 2hí… ¢©lï¸ÌO?8Ø ä,›Z†}-B™¼kËá7Dßènðèn“ùòFyW'“n.å•Ã˼¦gƒG×&ó®Mæ]›Ì‹Ñ7 £oƒ¥TŠÃë=Cû銈© ½]àDeŒí¼êï¼v =™<¢è›ÒuÊSþø ‚s•q@eú.õ&BxÝÕ¬sŒA['ˆ èaþ1´©LhS™9úöëIãìv˜·`ò_Õ¸°«quôÍ)?x2UÀ^Šªà@/%UDp}»>–€ªÈáL/mÔ,CÁ –”z@ºZ/­êPÅAeõ|rß®_Iª˜¼ÐKßÅ$¹oÉD[câ.9ß+Q9é%>Ìê8?Æ6…¢oƒÊRØx³ÂFÿªÂÆ[–¦·®ð/*llSØx³Â{œ}›T†)¬ëéŽ(ì˜T4¬ H]­°F' ÖÐ Q /Ö, ¦Û Û6¶)¬} +¬ê=±uOóAìõîrô 9„(â.tZ®'Ù3^2Œ›s²ësÜ©CðBa‡™[;‘nPXCWîrUÌQtmÁÚ ÅêlrfŠõº”]Ò¤œÔFʉ¹!„œÒNéA脬¾^GïëÜÜóò€ÅÊjeS µ.)Ó lK}„ðWʯù•ðà’ê¤4½Ó}j;ǽÌ*óüðûà S²^©ÌøÕ¬2º½ðç_p¼;x?­Ý<ÿ¬v/Õ{”ÅwG= ½ˆQ½5 £J4ìÁÚùCP½lRFLo]á¯ÕWJx‡IÇîxŒçñnÝÅžô"ðúŽG›`J‘NÆCx‘_”¿Â»ŒB¤cñní4Μ×T®ÖàDõ^Å»ßgÍ(ê:mn&4¶ô.n&.ðþÞoŒwëxw¾KIЯS ­k†’.O©E|—âÝnr ØMN`í,ÞíœÂñnú6j3ÿkɱ)žl;(`˼³6Í0ã>áD3®_ þW“/5cpßú5\^)¬ŠþF½?—æ¼ñMÍx?¤Ÿ³f%¼¶4CÓlÓOI3¦Nn;7AŸ·ßÑûˆOù&È ù”ÀŸ²fhA3è-姸g¸ˆ6І>•p°ñJz«êœU©úNš1ˆ¬JÅýð§°g„>z 2G„Óßø•¤€q¥f˜.YaÏÈ÷[^æõœ6¸­Ÿ‡4£Çï¬Tšï#x 1øAœ±Ÿ·b;~¼ˆ[Δ·18c¦Ô"›?¾àŒ‘ûˆ²3†·œñá€T¬ñ†À™bƒ1EÒ:ÎX~9šÅB¤ãΘá 7ÑvÁRgì‡èŒ9…·KS~¼[NþJP,¢Ö? 3fMŽDìŒy!ü­Ô« ¾©X?¶œ±ñ ”aÿ< q÷²ÆýÔ= s;ŸàUΠ2Dh8*Ý‹’”Oƒê8œ¼íßóã1G„–‹'EÕWÂó ñ]LE!üB! žüZÖ©„ïܽ àÝëùúà 7{F×9¼ž¼|Ô“ÃlÂ? ðh÷<ýà…úe“´žì/ë>˜r|2AxUÕÝX°•e²F²v·Wc›ïüÝ«ò:7 H¾ƒ;éÎYÿ¨2š¸¿þ@à‚—vtò< MçåÉ«ŽäSý„7‡9'ßÓ´‚ŸS_¶2`wÃä5Z•âHú ™ áEZŽuJÁLœüà ÷=¼^>:yÏÅf°›bCî (œP~àI=%”¿þ@à‹㣓lsÅ”§åP(¼Ø­OKÎÓ®áµÃáÉ3±1ù1ôÁY'¯»á„ò¹Í¹G”¿þ@àæ„®…OÞð´‚qö) »L±‘ø:y3ˆVÔ‰O~úaÿê'ÆI½†Ø.s¦‰¯ ¼4Ôçõ@Ë õYw^ûIÙû”\£Ußi\{`иËôwæWü)?Á‡%̦֕®ÿ¥IÞì/z„:5xÎy¡=é´žÄ)|îÃ8˜S7°g¾nzùíOãkøXVS‰^ÀSoðUè²DVa „Û}¸Ý€»ù·º^à¯zžo¾z+rñ©ŸÞ›§>”«Søàyæðq°1HØä¾Z 1 œOåZuoô¸?zUH¼¼[àõèSEùÝÑÓ '†£‚´*[Ãó J˃,¥ÈQ!å:&øî j¡£t’væðñ+¿1ˆÐŒ¦›ÓÄÔûsU‚2KéÍ9îñz†×äš» ×ôª†ï.ÑܺÄÕeö—¸¡L3IÄ‘%šCK…~1]÷F†ku£QÊ]µ9¼¾ ;wñˆÆj½ow,çZ±»ÚÜf£@2ûxEÇs.VŠ(tÎ¥²ü¡„_KîRhÚØ¸ Nb²yꇳ²Ð³t€¦K¦†ï‰ v§šãpô¾KßFßFÄl©„—ž.Ŷ½%ÂZÁÏ匪îïA“^ œ¸yg•«`+7O«á´ä#Éæ>»y>Wƒpz>¾üž—åsÅI|t#™|%»ÒÊp´Œº‘B6k©¾Pè¬lè‚WsíâþqPÞòÉÊõ6’5s9IêS"…ç |‡BZ¤Ð”/Qþ©(¤o¥÷Ã)…\ Å]•r@á3…lîðtˆµ åfî¶Hx pFÇ#¤“vû¥va]¯$¹‘tÚ’€Ô/NY×äøZýΪ]ªÖnpõ*öë)«X–ë©óJà~aŠGIgEÒ™)]ïÛëéì­¤Óä:¯¤;ûÐy“BbzÜàFzK.G(üi%ü0ÈR¬"öÔM#pºäÐF:B:·oÒ6|ãÚLš;lÒV£áLÚ4-ߦøþ'_;΃<–^RÅw‚ì]òeÉWI`ƒ3Ò“k÷ ^’k|’w|OrÎùYÐæ?ÜY1ò…×—­ ~‰×_¤ þ²µÁøÓ’ æ7V¥¾±Á»C¼\Í2šüÕ?L¡R–K‹¤ —uƒÏÌ}â“§Êú0ÌüÃÆïmðN¦št§s4Ó&@¸/Ó&“;B:ñ8?½Ý!Ù9*ïΜ š9º$ï¼ÒþßL¹¾sy/«IwŽ>ÇW]²þ%ÒÙ=½Üt+½U/ ·r†S½,ÝÊË–[Ià‹[9˜½A´æü—-·’À¿âVJ…Z³Øp+çr¡‡IWº•K±Ò‹äV^¶ÜJ'&-—BïMM:àVøWÜJ¹Öéd·ÝʹâfA:Ê8FºÂ­\ê}^$·ò²åV¸àVV¤ËÖ¿âVºpÂểÆ*´«Ðf¬B›±ŠûNĆKíb›;«áœθxĉð°-ÔYr©Ï•KíôvןZmÙp^]êK5HáR{Nˆ)S Еìúí—-¿Ý'4Èh É ©?‰©¼Ò$”ï˜t1Þ÷àÚ‘ÀõI¼Âœ¢Š/!ú´\Ûó³Å ß§Äãì«ßïÂõú`1¦2t¿ÞÊ&iŽØÊÎغ Ä]É­ØÿÚõúqWαЬßïÔë÷Ç*ÇÂÀÉç CçIH¢Ù§y+ijN)d ‘Ê[þQL=¡¢ c›\å¼Ns›+;‰¥g?LTU ð×ê²gO¨ØÒöJ•òùÚö>öÅk‚©XÝðÃËÃcý›ÑFBËáH‚¥UYG|ü÷Ç÷Jh=[iòs™&´äÚ¯'îlÜßf¸<ùºK@¡qNÈÙÑÓÍSEÓY¯‡- « ÃÁKŠ„•A)ÍáUU«|/d 2oË(¼xË»(º@`òõñé*´ˆòŠ‘nüJo}Á=ÏÖ}ÿºÑ÷‚Õ.iËþ^àL–Ô©R2‡—Bà&¨… èªCáËó`ïª3Úïýì¼ÎS˜×"Sdò¾K–ü Ÿ…k8á§'BôHžÎyZ^&yb“žå3ðT™¹«¥3ðà‘{Á]%=3žßEþtZ8»‘ò,ÏðQúÙæ²ß·F·"ÞÏ»®:›caœý^‡Ñmxà4ïü?û¼Ä9Ë–H¿zé¥Ü 3g«¿¼éjpWÃ72dõKY¥ð á¦z§£f!à!ÉÑqc‚쫸˜ÖÀò£<€W¡º¨”ãYy&—zé„“›4|å\uQ’“zŸh+ ÷Uœ v|Î{¯!p1åÓ |?b£oä{%uú$±×ˆpÀÞ}÷À9{×üµ‚£I·eìŽ;6êPgzß ÇoS0®ÎWØ›2{CŠŒ£z€ ? °W“¯Ä´Ôé‰ù{M{M{M{tÐ >c¯É{/›ì5,ã-ÆáDªû¹Lçe“½æ{ÅÔÙiŽŒ½¹m~éí­VÂ9{×*`[ìµmìÓ‚‚ÇìMÁr8IÐp¶‹Î¹øMûLHÂgö&ÝmÜšÐèËÛ…ŒØK…@Nï=dœ]›öº6íumìr“ý3ï&÷v ¼6á.x[g7h¯¯ÔÏ$…¼+»©ø"ÛnM‡à•ã 7*¦Ï%½„/éU9Íš{ôD%MY£p_z:q |›KàۤηIß“º—·Ÿõnà’+¸m•”£m&±Ùö¢ç£î½è^{ÑkŒ‚ÓTsø½hò8Ùô¢yÑÉZàE».’`NádS6jð§Ríf¥j.Ðs ¯TfºÇÚV%>-›nÊ·UF©&•QR‡åÝ•QjßP›ýÑ™¡^šäÔ^tŒ`tæEûÞ±sѰÛ©¾°×w>÷QÔ µRGöañµúÜ/q‡½m‡$¥ÛØ«ÛØ«±›µ²÷²É^-xÑ {/›ìÕÜÍvBÕšF»Å^}ˆ½Â!)×M’¼hWÃoó¢xÑú{M{ÅCRÔ'”¯Ú{’â°À öºìëö,Í9êÎCsu)|aoì¼^Ú r/ZƒÑYdì\tHš»™ïh¯mÓ^Û¦½¶½ÂãÈ\Kð¢mäðÚ„{Ûnõؽ¶ØUÙãÈ1‰ÃX½nÊ{ ‚×^´_Ÿ^µ¾ð¢ |=È©_iîEN¸‹ÆBxåØxÄtm.AÛÙM¹6©Û=»U^tÞ \r·í±Þ+e°M:Ý7‘n†×uAº…Êꊮ]·yÑ–ø9çwKM”²`ˆ¡A+ÝKΘ—œ1jÎuœ±ñ•'z mUP¤{…¯Š•÷k냠ï¤ÀÝGŠuBµV2K\r•Q¶q­š¶ñ¥˜ÍQ±)ª2.ð¯ŠjñékÄz#‡—Nžï=óÌ@‘ b‚pâXãõúØ©öÀä‘Q9 6…Sâ,6ªºü15Û¤Óî»ÐŽl–'8:®vÞô7y¹´,Õw³>m)…KOqø‘?*¯« S4À åË@â3üÈ?—ñÉ&sª ôýôâ™pØßÍRL­ßâÏ›¤öàØr.u-×á’ž-9ðÛÂ¥Ú„Kí 7V`tf¹’vÀX©Î)ê<øê<¦¾ &±ì ^<(áõñÔ8²uD¸,®ALùI¶-êd¥zþ^«¬ÔO+B¬ðºFœ÷Ë"U*—æ#¥ÍVx)C]˜[¦óxE2Τ£7 ÉíÈ©å²L:ÎÁw.Ÿ~"?Z¤áÌaèå‘ÅÒarÿh!•<ïx±r™¦x„ïmá(«Ûø®Ûø®÷øþ²Éw-l9ýZ§l‹ïšm9ß_¨ Ó'©£c5Üró]¼Ì·áßÛ.ó­ømÂ|t·¶8N5øhÓƒÆ÷Hï´¬îXRHÐwFgÁJÝ£P‚ü”Bh ×w…õ='q þ‹‰Â}y¹àã¾ãVŽ_ù#|o `YÛÆwÛÆw»Ç÷—M¾ ¬•ï/›|·\ß• ïß“ ©Ðw¡º×Q¾‡ý쎂%ž>?›à_>™Ìð£'atއΠۄ-¶È l>a±4.xµM¤`–JÉ%\»LÏÃû Ö/ë\d» X‡s2Õ "¦Éí?„ó°“çÂå-ò*kÆE1\îŽH]l“ºØ&u±Mêb›ÔÅ6©‹R>b4Øk)¥.‚à]!u/›RÇKÝ b§ÉéeSêb›Ô%á,cíq©mK0x—ûKÁÙõžÃ™pùu‹,å)Ñd°^ —ŸùÔ›_2Á‹ƒò¹³ª—ŽB!r8¿Ç Þ²¸˜0|®8½ZDW·½²)@xå+É%¦¹×6Áƒòȸõ+¡tb§9"\®íBÁõMÂåú&áZà_.×ï ×Ë–p9!«g®—-ár,ÄW 1V)ׂ*Rë]/· —ëן×Ý·äÑV¾%µ=ɺZàü‰œ]äV]¼ÈCì ž <|%øÏ«9<dzÓÓ©'[ÃÿêÍ2ÇWyŽï{MvXzòGxÂ8Ès¬6uKƒÎ –ÃÙ[N+ÖGoýþl’$ú3¿A´wï2m2G)4èRn²c©¥^à_¥i£Ð$Ca‹B“wµ-çUÛqrØ\àDTzÛyåMt‚8á¥6Ø4=ÔRòäÛ É«lHÂ%}] Édž’¾7$ä‘4‡ó9¦Csœ ‰Úœ#.ݳ¶â¯œ-‡³â,½òœ *vÖS! ðj‰kéžb‰Útº†ç=gk‰ï·Éy¾r!ªü Þk/ý%ORKIgý%¯“¿ÿè7&ïŽoF¼ŠÃë»@à¥òR¿>˜ZµeHÞÃ-º8ÕŒáð¯Î1LÆnsŽúòjãàÃDAα¬tÏp <>ON›^Ùó$Óð†ÿõϽè:¿Š½ëô”Ö°³ÄOa‰ª®ÔrR¾ï’òš< ðj‰!á%ºÄFŸƒEý-.ñýý°ÕÎò6ïèŽèâ»ä·¨N ÕòÑmøý]–´÷÷¬¾ÍUn£#Q•wÉs8:Çyëßšã_ñsßã›vÇeN°J'„ovÕêß—êO‘|ºÔÏ÷ñOòCð^×ZYÜp^’ìL |­µr!·v=4óÓ’`1üãD÷?g—槤¼ÊõgµVœª­þ0­Š#H/úçzŸ¹ÍFb“ÏOåû÷ /-Áž~B{ø¡Ê„pÂ5d/`œçpÀEÖ$þâpP7…Ö*„‹ƒ—h‚«—¹–œw…l®ð+ ¯_aÆ)RÕªGJζïtoë<èEJÂßJß(ø}Æ){•?ä»çñ“^]Êò‰HÇ·wõW…¥Vö^ÄM··ý`ô7á–}U ò°¿’_ƒŒpûPU ò( ¢§Kµþñãmcn믪Ažà ƒY™y½»l 2ÂíSýU5È $§Mäz.7ßjn_ꯪAÞñÖ’‹ê]yÿ½Åønß믪A>÷ù|ÜZÉ·ŸõWå N"—žy~ø)r…»—ú«bý*lS¼Ø×àÞû1˜G¼®^ûʦŒm@¹W³§¥’(|ÝÌp€¹ÖEÌ–DË'+½cIúïFWAdOÌàÇöfßÄèíßýá$Úˆ}³ ±YP³Y€£§ŽÇ¾½ÐXˆѯwo`ô b Ǻ¸¯~«ß0º»Ç¡µ§Xñ’îë¥yoRó.©ŒéT½õ3(Œ¢¾…nЬ¦¼ûŸFÞ|í/½xµu’jWÅáëuÞö‡%z‡V•û¦;ÿ +Ïiæõª {¢4Áóí¯%še‰æ+K4mK4mK4‡–h%.Ná€á‡P%x? ÁëÚ9B\;„3Bì¯Ý½‹<=Ød¯ãåõϺOƒHkyÊ× |QR×¥˜LâìuÕ‰úýn©PÿÓ½o,Q”àcK4mK4mK4‡–NPP‡Cp:²ÄжÄжÄp`‰^Ô.Ú\ôïÜÔú8¦³‹—HÑõÈ9sÁÌw Ÿ+¿ô$e$ý*¨~k‰¢ Fwd‰¦m‰¦m‰æÐSÛ¹iŽL‚5ymµÀ˜ÚeíŽ!®Â!ö×ÚÏÓÎjüz{‚e}I-ªþZ¬Ð$‚fçÔ©F¯/Þ¡åî÷eþnCæýŽÌ#iæð¯ ­oZß&´3¼¬ûÚõIáSCg-½íïšÅƒã`ç‡3]ðÚT.ljiÖ~}~WÀ ÑÖsï Í@lJÑ6¹L¥èúA$ |ísìŒ3·JiF–ÃYÅj¯É —l˜ór7xXÌùwœHe>ÿÑ^QÍXáÜè š‘"‡WF?gÍX¤2EZ sý1‚ʘàLæÒµÊ(&Ïô§‡~lçTŒcšáV/mþ!™Îöôåï ¯¾ÑÊÍHcA'šqý Ý”Œªà…f亢Ác;ï•‚ðB3œš^´ ;ÏáÀè“%>*Ê;¬ÈѹêÀGçQªgÖO©bUîAæUðZ¢7’̣ѹh,óf­vOàUÁµMûk¥°VÊ3ÿ¸s˼šÃ+G'õs·»Ræu§•ÁðUróUk5—ùég[ƒKPæcŠÂKH&b™OÎsø Žuòý¾Ìßmȼߑy$ÍþU¡õmBëÛ„Vpt´s‚£cläp&ÚÊx$ÍÖuÔ½~DŽŽ#;TXiáÄœ_¿’¤P¾í¾Ký*´UkƒáD´C4n’˜À8îèòÕÓl΋»TÙœç‡WŽŽZRkÊxEîÑKeó ì*'2õÓ†z7 åõWx¡?¹Í\b®h»4(L¯bpªXÃW¡7@±²Zi›œ*VV«0-+Ÿ¸}¤+Ü¡A«†½>rÅÊÇmÁÚ ýéœîƒ}_³Â$DùU”³ÃA!.ݤV–V›áë…˜Ó*©úØ{^~p¢?Y{ì°z–`h:çUê#„¿Rþxí@Ÿ´N§áT¦9ü‹»Á“ßW™» •ñ»*ÕÁ¹fˆÊÀá_•yß&ó¾MæÑf’ûÌýÛKe°&ñ m&“fÔÊЧ. ÇY&_jÆ€Ÿß!ÒÍD…ÇðäÐ<~%*€Í•™feÈ{‰±¾}j~™7“"gf3j¼>5ç¯PTs¼:s¼û}͸ÛРߦ¾M3„K¬¢Ì8PQæ(€(ó^o&ʧq£ÀèG4#·—Œ9ŽÃ«8Õ°Õƒ„i¥:}!|SM_Ñ ß¦þ6ͨ²;ÞÅ©>gÍ(^^ˆš‘;ÛPÓó 5ãúÕìŽÏ5#ïÖ‰ÃyÞ“’Ü,ÖÎ5#JÇiÖÎܬ¹Ð,»ôÊxu8Ü,çn–fq*Šäjœ^ºmŠ‘ïc1ç!œ<†9_IšWh†6]²Ç©}ÇðâZªu@3>iÆõ!SÿÓ€$ŽýìŽ$üó 3F’rØ/·‰¦ s‘@Ó/€ÉUè9ç÷m}Îïõ9ß×&6-ÊïÛ•ßjT¾±ö¦Nã÷mÆïÛ:ß·u¿oë4~ßÖiü¾­Óøý¡NãS«ðû¶Vá÷m­ÂïÛZ…ß·µ ¿ok~ßÖ*üþæVáEGãû¥ã4êº|€ï¦Mß×fݼëòIj´Ìᨥ÷IêâÍᨥ÷Iêâ ᬥ÷IêâÍáÇõÝ“¿Qßk¾«›ùN. ií/ñ]µñ]Öww’ls8ê¶}’lC8ë¶-L,‡#Ïw—ﯿޅSóZ¬ŠÊ|.VH^s­p*ó§“ÏÏýj¯2'¾EÉWÀé̽QUû“Ò±KÉc#ðBjÏÚwøÐ}] (ôò».ieÉWúF §¼ 79”Æâ Ñå—Ó¤J/)ä|ÝLÛ ;‰à…Â! iH¡lÓÖ%þ÷.éÏB¡KE!³Þ_®p¢?ÃÄÿ­ÑàEbÕÔ±€W2ÄÚØ+­å3¤QL/)dû«¥Ð‹ ]JÊÎ ùJßJ!ÒT{…S sò®Ó! …ÎVÒ…¼‹ŒB¾‹ý [Âû‚@ª G(¤!…òî¹XÁ×Ç6;ôØf‡o±Cf0Íñ“ðç±Í=.2t_Û¡b‰Mvè±Í=Þd‡rÕ‚‚ð/Ø¡ÇE†î™ ­ºü:Þg&»V¹Ä@pÞÖÊK»Ö^83|˜ã÷©ï·6ÓÕÊ·6ßµqø¶Ña òkcý ß6:,¸k0íÛF‡…o‡:,|»3˜\ƒ¿ÖX똷Ç{‘Ú\Ý#ríSÛà%ýq,qB?îæª†?¤²„?ê$Ĭ®¾ÿz«î?ÇÛ]ÂÏÎÓÛ¯å(¸_w‚GOáü±lºþÀrš,ýùÿ=V_™ë¯÷wU²ýµ~èu øýàY„Þp8Ëiê¯.ÅZ–Ж  œ½‚ê¯;~Ôe ^%¼(K˜¿ºþðÐß•K`íÃW÷Åi ¿¶ôÊ?¼B”‡ðú©Õ/S¢Bï œf÷ʵ"Ê”(g)QZQ»6Íp;š¡þWe÷ÚàHD•áp¤?¢Ê8ÐQeè¨2þñý± y¬XÃ.ËáGküÒw…f8¤X¹OÅ5U±T¬S4S'ɂׯŽ(–kS,צX®M±R¬¢íðÕý¼å œ¶ À¹bMp 2ôÇÌ*S‰vDðº)ê¢X\e,€ol9²^ÞË[N¶œFçšqA•š‡ÝÀPѾ¶?eTý¨+/hc1¼(ÿ4CµsÍPH3?gÍÂ-áµf¬QãÑkÍp4ãþЖsïÚ4ÃíhÛr‚#ýU†Ã‘þˆ*à@l9÷ë–óˆ]A 2ζ+m9tǺw·(V®”zËáÜ—3È—ë;£‚ðâE{þêˆb¹6ÅrmŠåÚËIŠe…ç-G¨Iúcã¥3Åšç¨køÁþ$Ae‚p®?QPœé‰‚ÊD à\,Ö gœkFˆì”“ºÞ•§œG¸åèN¥k¦cåŒé1͉3vý jFŸØÔš‘¿‚š’u««pÍH½‡p*´¶s׺õ;šñ(n9Ô{tmšáv4ƒo9…tà-g ^@•áp¤?¢Ê8ÐQeè¨2η¬X9“‰Ã(ÖuÓ‰]àðꔓ/‘/g†ÍÄ/*B䯎(–kS,צX®M±ä-‡JGlS¬Ø¦X±M±b›bÅ6ÅŠmŠ%Å ÂŽµV’&ðƒŠ¥b§5€³ðÁLºrÇr]Ò:Aø?ê 寎(VlS¬Ø¦X±M±¢¬XÙ=øÁŠŒûßìä=¼¼<=!8Ó8sͨbº4üeÅáîîò?ßÖ¸þë¡„+­Sht^B<=¡ÑYÀ.DAã oÕ '{í#‡³ˆöƼ¬óÂ+¡µÂ¤OÂËÈô¨bGhÿ§¤˜W!\£ŠlD¡­áX‚¡ÕŽ$ ­¦ç˾u~©„V!8`QhH°(´Î$xÞ ˜Ðj0:“`<Z<„‚Š‚Ð:¸7Ë‚Ûx3˜óBe>”´Etï;‚‡p¢ׯ°2D£¼ÖŒx-°X§OóÂëŸQØ‹åÙ^®tvö¢ñd¢é]›f¸Í`»Œ.–(Þ9*%ª ‡#ýUÀþˆ*à@D•ðzËQRšKoü˜båÿRg9œo9ÊÀ]&§ ¼Ørⲕm+–kS,צX®M±°“7ŸÖ¯zœ„›¯oí"üCÿðΫ”ƧVý÷þCÿï'8×˹6% ®æ{]¯%832‡âþõ?Ÿ¾oŒþ‰&‡óñÉîOþŽÄ0{RY†ÀÁä³hÇϾ®oBGÿù¿Gò–Ø9¿˜AðUý\Jù=IŒiÜXÂ?hŠZ Fñ+—éß 4¡UÕp¼DqUΖ8¬µëHæ…Ó“cõ•þË–8¬!8Ç´ÿŸ´+MŽ%ÅÁW© TûòÓõl—Ã[ØUöøõ»ÿAr åì=]ùY $!„Â5Ãk•íQæK8¢?–’:QÀÿ"o•1îÒŸÇÛô§à ÔäýCTˆ0â ×§&¢P“C|Ÿ®™ô–P)Qxâþ©êñÅ6øü•–sìyG ‡=ðT0ΆyJÇÛáÉ+·œ£×ªñ·Øè2Í%µ³]uú…$ç-·ùÄŸd¦„g/X˜AvÕð2€ušáW‹b£K±áÚ\šmݯ)Ħ 9›Ç‹  +<ñ"ŽÓWhØîPøgv§lPÇ!ÆPx2÷ãö6~Å[Îç¹²­ð‚s¯úrî[«ûþ÷+oœ ¦|WϦ(à©kómÓ¨lom?«Ê!ÍpqåpÅP8îªÁk%ðÈo/œ¹ֵݴúÜ éàR:|AøFD„¹sKÍÝy^ø‚øÜƒ!Üà–5æ^œû;›©ËÇ× .uÈþ³Áyk—Êbf”b ðõLIm yÈ- F¿ËÖ‘´„ƒ´Å÷¦ÊåoÖ-œÇ¾š|ÌGwG³Î{ü†+ùêƒá%”‚úÍøÇëWF\çp$¬®˜Åw?„zé zqâ³buVè OŠWI³|ပŒ‡v_Š–Y=X§æ.åM7D/‚xìUgÝ!™;•%ç'B Ö ‚uF+”uáðfKxZ÷+pÈÌïa±m¯xÃW-ú߸yÝa¹ÈeŠtèKxYvoy ”«Ÿ9å+×VnX.ŨÝO ô4„§Å žíÇÁX£‰S+¼PR'u¡—cYkç5 ÞÐ2¡–kàQƒfÀàuû¦(û&y*Ê©óú4Ìoe°•º„uš•SƒcA;¨ã ‰=m8×Ì%Ó“Ø£ƒqÜ!ðºŽ+±ÁbƒE‹Á—*ƒÅ÷aV_JÖ¡ð|ðÆÌ/ª¬ÃÛ-Ä|Ó.ÖQ®/7¾‡uòVÖ9ÉKxaDí’ÉT‰á¿CÇÀ“êàÚßa75#XçDݤ"Þk :ë4è­¨5ôø4#ÔZpbe¬ŠjPøZ~ņsÇuh7c¼ÝjŽÁëvSÁfºœMû…¼‡ÁüFàUì /ê]/…x_Û¢ðçíèÆ™°Þ ¶áHè“}MwÙM-ö1Xìc°h1øRe° ”eð¥d |d^q/{XG¸•ÊØ.Ö‘vSu±NÞȺÁi_ÂsÖ…Åå¬ Ú븅!\UÖˆ:Þc7‰X‚¢‹uT, OÜ ~û@ØMgy ÏÕš¯©1«ZeØJX¨ðçmÃaáXä}~Ìd¬â)á¥l 8FM0Øöɦ¦¼$Ô— V¼é †`°°%<Û˜øú„%sèM¬ÂWåVç]i7}8¥sŸˆ¶î`ð'UÛr¤ç©K‚Ûþ‰W—ŒBäËŠDñêGÂÒ ~M”–½·¨± 2”f¸{`wg:IîóNÜ7EI%a©®)ÊyŠ÷Õ)ê[¦8ÎØàO¼”aœ!RW*Ê©” ËÂ{§¨ŠÁ«x¥§xå7O„Vxß… ®/(&á¿™âuÔ×Ê/wõ«òÿ©ÁõvUà%ëõŽâµr~½#9Äe[ί«*óêwÉùuŸœ_i9·Bp]åü§"ßû ò7¹ŠÒÚlŠñ˜£âvbPx§œÃ”Ñïu_ïï*S¼Ù 3©Jx1EÍŠ)j;¥,H[ù& rlÕ5ÅÅ ¿U¦ø¿;ý»»àÔùc+^ÜoŒzü "ñ+©1ê؃£Xø¿„gyžbX³»¶ÔN[hø¨Âÿ[ìéòÕ­ "Ïp¤„Œ¡¦ÿ­5`þ—¿ySx¡Œ$˜½Â >:O”gåpŠÿ+ÒƒÇÿÏ—Šúå[- C)ñjàÆÈC™?ýPÂËç‚ޱõ¾¤d±9¼ò¶¦`…2ÿG=O@Þ=d]0E Lçÿˆç)±2GX'o$|œ¾j³î/ö¢‹ßžéåQÇ©ò¨ãïò$«ãi÷ÛÜhËKxžf†_|‹)ÎÃs„ÿ7Ưヰ˶Â×ýç‘2ÎËG®âª1eU /rÄÂ,Üø,J£ðÿ é1Sï­˜™Ãi³‹¶Óàƒ×RÏ8•]í4âW§’ˆ»÷srZ¸ 2ÂÕ)ÿ*#ò‚aZúùÝdµYDO;øÕÿæ]*)b± ªú_ñC ÿÁ¸ÄyIÆN_*cS?ùW A9ÅÇAàVŽÈSw¹¥>ÆÎaÁœJ‡?äˆ/cQø”Y¯µ(uþ!‡G©´ÔŠ;ANÑPST%N1 DYôcœÓ…ƒ)Úxëo)N?äðÆå‘çy¤#¦hD ß g¼` *Ÿ EØ…9ôH$¶Š£Sb­EÌÍôCS”ôõ-†³´úš2œa×* çQ†I° 5œñŠXŠƒ×ôàÍv?\g&‰Ò‰’DËL3µ…ªòY ð†Ù Z6O‘œUS4ôí-ëcmlÒÁÁúØÊúxdð*ˆH¨´øúÄKâ1k-ÞÒƒwûïn||Ý Úï8|ð*,øã!ù²éàE÷à…RA­yîNÜ “·Ì#„C—büj<¯ ÞßP·*Hµƒ†ßdÓ׈lþþ‡G~*ðÓî¯2.qMõ´U @êܨ×p%\ò{âùC¥€Ái_ƒQÀÀøív}îÿöÍý_{îdýƒÓ¾ú'â}½zzþИûö¾þWs_áôÜ+ÏóOûžçŸºžçŸ÷IÇã>éx¼M:xýuÿißaõ´‹HÕü¢z\üƒš1HÏÝ|N©qèPþÒDV!‡×MÄÔD„³”Ñ~~§Ó㿩ʤöæðº*ÿyÜ7ÆGtŒ`«2ô•¡xeëìL½öbü 9q 2”‹¸ÊÈáuA½oOS€^'r}º³xþ©õs-x¬[kÏ/ŒÇî¶"¿0Ö~P’ƒÜõ¾dÙY78ÎÅv¡Ÿtku|sQøÚþ7¸’ñùÅä(±,15è¨p‡ÏÝkÑ5w‡Ì=å˳F Jh»8h[«¤bÛ{§tîvë’À×¶µv06œ/6÷à]©Õ]Ÿïˆ4µäažsxžÄ×ý’®(ÛZ§ðdŠÖq•%q®i•Ýâ0 !blK\àÅc¿¬å«óÝiîÛ|6¯÷è9ål“k­ØSy}yàá«?é9…­p›þY=äpwf¯Ìv(~%n£^ÃþÛ1ŠŽ1þ!^>Æd¼QœÏüÏŸ¬³õZd…‹³þó'KÚ™Ä9þ ³=Á󻳩úiü!…Ë5ËÂÏW‘žÛé‡ôN&ÓAøë‡Ì&Ï—Tö6øôr%úäNËzw [·†§ñ+}ÛúðX ‡cë3ÅDËõáNað¬c Ÿ^•ë³å@x±>cÂSs}4¾>±ž:º>ÃVtÂû×Ç Ôóõ »¬Ý¾ÂßßÕÖGÃ)ÎOØõœÐí1x¶>‚ |}¸Ó<[ŸÃÜ›°±>+¼X!(ý±ü†õá%Y ‚üFýÃÖ;r…cëã,¡?Það^ûÆÖËc/ôÇúžõѤ}S¸þpaxÿú8„uåõ-\q£þŒÞ\GÖ‡y¾m¯ø9kcVýÉ*ÒxŒz©?|YŸ÷ô’È ^è³”þ`ÔîS"–‘û/á¥þpHäöýGñŽÚ7JœÄàùúO¬Ǩú£DÏúÐúCÚ7Àû×G»ŽØ7@DÞ¼ÿXha$¹ÿL·9ýG’úc‰õÂ"ðb}„ìXIêÏb]«ûü…þ€õ‘zç Í[Ca¹Ï9¯-ÎyõRjÒrÙÎÿÂ3S¼Ÿó ^ݺg„3‹Ìáè™·IÑÂà¹OìÈ3‹Aàå™E“§ŽM°ÝímEí@eÔ¾Óˆ¢O#šà½Ü‚Ké¶8—ÂBvB‹ ÓÞÒC=¨˜L‡ÀKí•Ý 78öó”A1²N? pD{I…Eá…ö’ [©¶ÏÈN¥îeÙ “«Ý ûBì„aÙ-á{j[ÂoÙ e Ï4.f \ãœÁà¥ÆiÊ÷ô<׸¹äG®qé•ÿ¿žTÎ!\ãG_dˆšØ 5¸Xá@±œ‹¤óÔNhQø†Ë¹Y—ï„Rj…“0~Eé’@à‰‹ébÓ(‹ê’`ΡðD±˜4ªc'|!wBǨ÷)–n(VQÈd€‡¯òè7 W}'|!wB§{ôRïÓK½O/õ>½ÔûôrÛ Ó€ª˜oiÊî/ÔN¨µCvƒ´CàÈN¨P×U)ÁQxZ ìyåN8o†Ñ^RaQx¡½¤Â–ðþP€D†û×e'¼Þ]úb5Ü ®ðâ½Ð’R8¥º0¯øN8–u˜Tñþõ ¯“³ÁWçô«¥{ª°Q ¸_áI¦ÈÀ™6‰¡Æ_¢ï¯ØF‰€;aÕUZ‡Q‡ ×X^qÆ@ÅÒ Å*öËT3Èýr®ú~ùAí—\KRãJ8¦~¤Æ!pDýHCàˆú‘‡ÁKõ#6<˜¢ðAmx\˽$6<ÉCé¥@á™äÆó`ÏGá •`úªG/õ>½Ôûô²kÃûZ6¼¯ç»_Üx~Ñ(DROúV8™JÞeí18âˆ*,Ù5>kÆà…^ZM9¢Žèr}“ße ƒQÏ“]…wxVʺìbs+’gÛá¬+sZMqeéÙà¸Þºxéozƒ^YJc ßÔ/ö½0Ú—;áü/üÍ-Òš\YJåpxº[ ,ygŠê ƒïÔÂ’ ÷_zŸÆé†ÆåÙvÙºSZ%uGŽÁšcÃ>dŽÜH¿¶ƒB/IUDàˆ^’ªˆÀ½$U#zIª"O³íâ Í1yZÂ{6ü£Eç^*¬âèé-×(<ñc”u]ãü— «÷)ìí9ÐXý]¶Èß= #Т„—¡žù%[¡Š<Ù_áô]æŸôjDj¨ï©,7ä;-„zÑ zéФ Î=BI âDRD8_:¸‹ß§ÇÅü‹'ë Æ“‚4¶î…^jI½Ó‚ Q‘´u?hk¦ ¡h‡§2OÄj8¼GáÿA¡_Qªhx«QÑu•D¬FJþ•Ÿ×½îºþ%”0žôWïÓKÝÐË|#Í‹ÚHáªßxþ%C°ó{LaK8¦½¤Â"pD{I…Eàˆö’ ‹Àí%ƒ—Ú[ÞxÆ5Y¸2ëTZã'RÁn¨¬Aá©þh­µ–Aê¸@áI¯.©¹èQk½O­õ>µ&O¤ fÅý¿u»}yû…Zÿ#O¤Ës’"äêäv[jœB¨—¯,…¦.=/ÕOS þÑû%úœ$-è¸Á‹$Zj¿4ÐGüG^YιE KXÖi…Ų±íj8w’ϼ O$Ø.ƒÏŠÄ:y…ÿ—ÄZ„²„b¡ÔÅ’ƒ_ÂÏ…ëšÄ>ÅûK4 S™Žé©2¼7Kf€C68¢?¤Ê`ðRH•)á˜þ*SÂ1ý!U…úCª Gô‡T^è©2%ü†Xg¢2zŸÊè†Ê”>b²îôHÕ¾¦ ®éǪì=§÷iœÞ§qzŸÆé†Æ•×ô¼|˜ÌeÏVF\ÓÇ&¿TPÄ¡ðLæÇ}D¨ å#j/z¶2½o+Óû¶²žkz´s\°|aŠã‰F“™žÖoç»Çµž}ž@¹­46ðD¸[a¹A÷ÁãOË nMìâW„’öŽTn©4GÇÈd2FMŽQ ù$zúžä“¤_-eѱ™àçµd%¶ *ˆ³1DEq‡Âó)bn¥´a ì‘ÓWˆ.(ê@ƒ.©5~–éâX³…§1 3=®åŒ³š/2¤ sc¼K$á °ÉAxÆ`1 Ij üR8È(¾"â½S,Ÿ87(f—ycŠœ˜"30µÊƒ„7S,¾)Ë›NQâ7›½’·rHq…Âs-CX>(iq8àPþ•!ІwNÑ”†DñÁ¯­<Ë)rwá×LÌê_k ^ @xâlg_mýË~³Š†ßÃÅ•¼~%9jªírð‡ãôC ÏOo\O‰×p2â Ü€„¹ž¹áëeõ5xÞ¯éE;/¨»+Ës£×øƒÊn6ñŒ³N2¿°®Òªx…—'âMù³S! ¿RðkQUÚŽWª½ãF=¯ðžÂE®*pMd¸®j·õ<`ð´ÇçØÿϰ¶žQ3Ü ênꆠ®æúØu)!Üâ7F½Ô-A}©„[Î]C¸Ãc½ÔEÝÔäüÒWP>Ý?2æ´ØLðñD¬è1râ®»sŠœSSœïÔêÂÅšJÚM]PÔ—SR!\Â%~íÑK]Ô%\:™»jEêÔJ}$ß#\|Ý/½OO|µ˜ž¯_­ezÔrçY•Ž5“Ë9P€ŠÕ¼ ¯Xm±É&¯íB¶á5êª ¯ìB·áº7m¸¡ád/ÀµÕPuÃ[?yï÷…zÚêž¾-^ákï÷cðD£µ˜+$níÞy7ã¼QTá6°zõô?ÞÖi—«Œ¤úX/Q‘ºÕ–üƹkʹ®p0w-†Xs‰á®s?Z68'=H€ðeîÂĬ6ím1÷y^…ÓÎØëX¸åÐzÛ|ªqHÜÄ¡¸€òB+|åÐxʰgó{¡•Caîb0ÂÁ¬IŸå£'Õ Ë­VÉ!‹Â3 ˆ¤8dÖÆ€5ÉeHYfJ8!¥íÜ’ë¾ÉP|ônÂn+5 _d(#µVfI@Û8õ2hé×8¤()´-Nà°9k‡<¿ÑÆXWÂs> ·¼‡Â-L üyͤqƒ`z) ² Wü%0kÂYî^ô¨Ÿ&Y‡w*΄Kߦ~‘-º„'ƒÿB—LQ…uÕ…úñïcrc]2-奻 ”i(výóZáÙg L¡~ÁÎø`ŒÒà#„¯SÔƒuÞnZ–-¯‚ƒ'½¼-Y9¨[½\¶ðpuá€)]úonÐá+ ¿2ÄòйFh˜¢¯LÑÜ:E žÿ¬ð|Ša‘déEðÜ‹PåÉm)–˜â’Öªù•U¦xë&'`-ϾMñèt8@ÇÅʧ~`qð…¿n|¨IpRŽºga+ü%&+“ÃGvè˜pOQ--N>âšá%‘ æ€t¿jï:bKš¹P«x©Å"Ö,… ‹¸Ôb¾¬¢ñA•]28/µX„¦v)ð©²C/ùÝsOckúÂ…ŠE\j±ÝÎãÖh¹Ô¿Ôb^qõ5‹`[»…‡ÄMÊ]ý¾r¨ˆE\j±ÝTÌÇïÅ!‹Â+'m-IR±ˆ%C£[†ÒXÄšàq¡b—Z,À×½,ð1ü3ׇBb^ã"eHvÄ"t3q©Å"xÎÇ-q©Å"œˆEõ“ÑpÀÖÙNÄ"êêG6G¶¼#±´uïU¿ì”´À%±ˆK-àÀIŒµ½F™’Æ"¼Æ!Ó0PõX„6û ”)Ô/‹E\j±_clà6œ´q•Æ"¼‹ÐT,bi XEh{£Jc <•!‹¸ÔbRQ†ce0 dY$e·(Ã%#’DŒÃ¦xþƒ¯š¡ŒK-”aì¾J(‡Â‰wnÕÁ·XU¯QÎOŒ²Ás¥L ­GÈN<°Ê¯“Á7ŸNÕÏ{΃rðñ+GáÄÓ©bð RßE½ÿfðÔÛuÅ»/H±‘øà•ÔÛƒ7”Øp¶oSI‰ 'žªäƒ‡^é[û%R}ð”Øpé{ÏIÎ+bð ÝüÍ.ƒÿ¹'v™¬hmji­hÃE.Wø;—¸jÃ雎÷eƒæ×û¾ö8€4ïÔþ~\ç!Õ•T / 5×Ùe±t‘@áל²îYq¦^V¬ö³{ð‘gÁ÷Îf÷-o°Ê|V,ž46¿î}Iô/Þ‡ôÁ—V^²GíkñøKåµû;™e]¡Îœï£¾½?ø u¹oî²å•ÔA¯wÉΉ½<þÀƒ£ ÐJ¼\]ZKä}¹æ,ï­D–ŽÜÚ¨0°â ÏŸååP¶~ˆ¥á|{–'Õàå|E•>1çïM(ãP,aK8¡Íè¿ÖÍ¡íEc /Jˆ­9FÊ:1àð"ð†•eróWWÂË1ú®1.ZÆkcüî^k ?%+ÛDŠ`ÊÄkÊôÝ¿ÖG®ÆþÞÀM[á¿ã¼Ö¶:ÆåM<ÿKt:“Ï_°©ê`è:°Â³='^aÙœc À‘›Ql7‰^g ÄÚ4»«‹•ûJxYoößòðƒô²|ŒEÜýM¨9×¾c—¿©[ò̾o‘`¯bmf J~|ŒÕÑ éëþ½JðÛ=-ßý|äNGCÁ“Ü7!ÁÝc\$¸6Fv]: %­¿Æíí_5ÚÊžO1îL‡¬ÓѱìRy…g‡Õ­®ivX gU¡QøOz£­Åéi<þ€À·eà~òÇG9?ÀÞ]—!>1žï‹ÚAóßç—Û˜:ç¿û9äL*åü÷>Îïãü÷>Îwpž–yþÍ÷Ä ø7Q,°H!1(9xxƒpƒ’½ã±9žW¯îÐã“Ôœ!Ëø%¹u:§s¸ºË¿JÜh®Îm"O"#\_eD^H"“°—Ÿ¯ ‘®^ò¯2"¯Ä]·/±ëÝ¥Bd„«×ü«ŒÈ;JDz>Ö±÷smMF¸zϿʈ|´‰¼UˆŒpõ‘•ùB‰ÉžË¥ý- "#\}å_eDþk²¤—¤½¿ "#\ýͿʈü+‰ØA(Íæ]iÔ‚ÈWÿò¯R"º)Âךˆ&ExL8Â*û‚ª¹\Sa檬i½ï‚ú×ùWÉnoøb ؽY®—1"‡ãV©mˆnˆú©Ÿ¤¹j[(ѰP(u›Ãq;Ö6]‘à0q£ä$Áup:˜á¸œ·E[îÛ$%¹IÊg›ä´Ez܉n’)gæ+ÌGIo’zó­²(Ò 9«\(Áb$F }G´GáÉ]”w[uM°õëAI)rxœ¢®Mq ”ÝSä=Sû¦(öMQtLÑÐS4º=ESLñ(Œ 'p'¶~Eˆ…g7Šž£œ7à„i¶)šÚ%%¨¶kŠrßå¾)ÊŽ)Ú}†ÄÞdHL|¤ ‰Å½m³Êíjë’r¢„ÃÅŽ– ec~ô“(ü /ÄRH5íÅ­Ný¿äJY)ªã£v½ûôR´ôѸŽ©©qQ?Rã8¢~¤Æ!pDýHÃà¥ú‘WÂ1õ#5®„cêGj /ÔÔ8ލ©q(¼P?RãJø ;a¢qrŸÆÉ}'÷iœÜ§qrŸÆÉ}'÷iœli\}+“û„Vö í"³ÈÜÁ›ÜXq6戞ÍDb›IŒBïüUïmÝíäTVš4*>©ç#&ó%<Ï’ Dz.ÍÐû4CïÓ ½O3ô>ÍÐ ÍHjŒ~e‘¹§;–мêQ¬ò>Ï„µÌk‹mRáD ct¯Ø}^,%Ê=/6©øfDy†S_w¬å«Qïóõ>ƒ?ÞÀWfŸZ›}jmö©µÙwv3ûÎnfßÙÍì;»™}g7s µ·G/; ÏìÛðL±áÑðNó9Ä×Ð ƒox¼C?Ý¿/QäÅ­ƒ·Â–ð\3GáÝÆ;Õ¼ŸS|²lÈã a ðjDÕ˜—· CbƒÏ‹©Å‡þDj ôáßÉënð0$ƒöwªpäÀÐ̰‘w<«|@ºÀFƒ¨Kxm”†Ê@±ˆØ€3Ss« ê¢Ü£ð´gûªXÉU[¬îJP÷nÓW×ïXTãàm7µÎZÉ[…Âaä>(°é¹x'£жܧ—rŸ^Ê–^"WÂ1õ#5#êGjGÔÔ8ލ©q¼T¿Å’·„Èg¡Eá…“B‹À“3Vð–ܬ†hg,)aHó]ïmÝíüæ+Û3È›¯Ùnb2_‹iI‰mh†Þ§zŸfè}š¡÷i†nhF^2Vä/áÅŽµp¾¡XåkÉ<ÄŽÅ ¿fi.½S(ë²û±£3Öœ‚°î·;–Þ·c‘9“*–Ù§ÖfŸZ›}jmöy’fŸ'iöy’fŸ'iöy’Û«ÐÞ½4û6<³oÃCÎX‡ÁvoxÄ+ŒŒñc;c½ýB3>¨3ÖR]¯”y!Jxÿ t Ùày Øa­ “‹6ƒÒñ’¼¨Ÿ“->ˆCÒ°î—¥h#s/E{iB‘Šö¿(áÅ–£æSN!Ú†4?ç3zPVWI…§QN![·ÙÓ¡ôd·¥Æy„óiˆCÅÒ×8Ã< )œ Ú÷Dë?ºIbŸb‰}Š%Š…©L Çô‡TŽè©2ÑRe0x©?¤Ê”pLH•)á˜þ*ƒÂ ý!U#úCª /ô‡T™~ÃÝm¢2zŸÊè†Ê^Zºîäák¶Çu/íƒ:|q-{4NïÓ8½Oãô>Ó +ü/)‘u/ôra]c+#NO’ ØV6=9Cá×ÌÃÔÈéÉ ž œ:xq6}Õ³•é}[™Þ·•už¾1©—ÓüEg/ΔÔ%œÌ³/} ·%9$)Bã,B9þ/[˜Áày>ï’Q[¼ñÞ!ðüe‹’Ëçý%¼P¬À!âøcê0Ï^ N á¾Çq¨X_Ä‹3Å8–g»/b —æÙO_!Š5Å%xrD‹MÒ¼Ç3u…·(<í]↞g_ds ×GïS,ÝP¬bÃKLet,ÂUϳÿBóìc¥b2Ïî—_ä†g5©qQ?Rã8¢~¤ÆaðRýè[2ëxþte]C/Ñ O‹(„ï©8 ¿¦ÞG6¼XÔ@Âkï/ݦ¯zôRïÓK½O/© OÀ¸Ï¿eÃKjOu§dü#7¼å)gáb:N&–ŠOÿ8‡w„b ^¼SY’" OR#¬Ëß© ˃Âòi 6÷âŠáÄ éÁ#}г›u ¼‚EAþqêìæÑr£ƒMSþÃÊr>Xiz'@à…Ãè°vL2H¼ÆáÙ ìì«¶|çÙ-Ïbú§÷©Œn¨LaOÖ<»9Ó‘Åô¼ùš£Y˜.!pD±H]Bàˆb‘º„ÀÅ"u çmÒ–.^å©L!œïѸñK10dðHQ´4XXvfP88¢é —Ê"§²éþKÓû4N߬qÐ!êfóÿÃeÕyds—Žª‹ù°>±N*„V½Ä·Û˜I€:¸#OK8¦½Èv+å GžXs\aa8êzb]Y4…$þ€Àí%…ÚK*l ¿¡ØÈx~å·_N<åK.Rí@•ð.Ê9/\M\”ƒ6t^†d\;ä¾(_Uæ”Ýh ^ÜAÌXŠª=Ðå\· a]ZgÒI©É:“Ö£ðThµÇÊn©ÃçŒøEùôåº"R—*–SøN˜Óû4N74®LTt¼¬›ÅeÏVF\”Ç–D„*b¬+.ÊAÙ­4 “Cð‹òé+J1ê¿ÜÊô¾­¬ç¢üI\Ë =(Å’FññE—2Ÿáâš¶– >ø\¸÷št“=N?”ð\8ŸÎE× ÚwÉM—<é Œ½,F£rÍ8k8ª8ôš(µ“)Ý• , 7ÃǯR½„ñ¾g‚ÁÌ/ .âÇÁ3¼´\[ɾ¼M3¿Rðk‘>Ú üy¤vbéP´*Ô¯Ok‘ÿ7¢ÈÿÇÛ]"à)ô_mýˆLìÂcÔòÃó²[óÁq^Å%ðäÈoälzÂóºsáÆ~ë[ªžLþ¸šž·¬Y°-æÛ0¾¥“ßž„¯Ä <9dL8„.eD!‡t0¹ 4*Jà)‡´ñ9‡dpGœçÛÙ:g²](‡bàf›âóú²òBqè’q$jmðð!=~µü°pèàdÚG1'Rn޺ë éÁD´Bá)‡[Osh†]ÞÒ¬†,Ã󻸕CÎù8d\lÊn–†5C6íw˜Ài¶D.7É©O%A% Zã3u œCä­_Ÿ¿÷ÉÐ÷>ú&dÈÈå8d(Þ°J¹¥$ðßÈÐ÷&Cß´ }ï“¡ï}2ôMÈ1ºÔ²p,cñï¢ðßÈзÀ9”ÈÐËÄÇr+¤Z:ÒýyJβ„_½&_‰åÊóÏž%ẞyc1~=·í:½QwbOww üàõTˆý‰ß½f]j×ëÞ¾âÒ&|ª öTœ¶šÉ0"S³ü Ò©¯Òá_¯éékR¿§p4ÉQ/|A6UDyÊd¾µ¦Xáî‰}Ü+ 8ƒÍ\‚aðêJ®ð’Á‘Ã8ƒÓ1 œÁj.…^2xK€ð‚ÁN õ’ÁSG ‚ÁÌ®}OVx`ð¥Ê`‰3XÌ¡—’ÁTePÖyÆ<Ïø(Ät†~*ü7”zâÌÅ´ÒYùãÀvØÁYÅQøëj¥ë<ø’ó<"盚œ¦¾¾Èݼ˜¶™ŒCÙÿ<½Îz*[­N?üÜ¿Óðÿ½Ìðÿe’àôòþQÄ9%$'éøóç»DþüyÊ´Ï/?¼fÁ ‹ÁÏO™–XLêàKÏ<¿7-ç~Ä_R¦pð?Ä„KÉ=°®+<‹EĪý|ùá+ÙU‡5û ÀËX¥ü[…×·.\8$æðrá"žX8‡Âó…[àÅÂ9‡À³…[À´Nã /Pó… ¾žÁkB¨ç ö.œ¬.áåÂM‡ëÆÂivû™Žiܼ)— §4??aQEdá´@à¥ÆùŽ…Ó¤ÆÍûešƒe‚¡–v… ç5¾pzûå /Nõhœ¾Uãô¦f8¶pœ0•B ðLã˜#4n«' á¥Æ‰ž…Ó»L¥Ö»L¥&5nÊük,œ¹Qã8ˆã¯ð›ö8³…“ÆžJ=]¸°ÎPá$ gH›/$ ÆèÄT\ã‚±á¸ÆÅN %ÙãDÏÂݦqaƒ3Êåð›ö8p6ð|sÄÑ ŽÀó…³Ö÷,¥qsÁÁÌT†mŽ[‹…ãJ§Öå 7¹Ž…³ìÆ…3Úy{û'ÏŽq|á$4V–Ò8ãyÇÂYRã Çö89lÿ¼X8Çð…³ƒ@掘ʳ·i\°ôš‰~ÓÇ9?çëNhœ‡úni= §w™J«w™JKïq²½pK›×'ªëSš%¯ ¼-áò|Ê6}5ýðþñ’F8GºíÌëþr¹Ë.ð /nó™E¢ãSs…À‰ÖÆOy’'ÀPop¢…êS‘£µ,áE–&w󺃵Á¯ñÊzdðy?î°™‰å‡,{šKžeOs‰Xn@_3Ï…v1Yše|ù‡,•Ú‚-0ÔKÔ_ í çÿËÞ_Ê©+*Í%\>ŠdŒnzß’y½Oæõ>™×ûd^7d> 'ŵØàÓCC 2¾èóJîWc£õW^–ð\eâ 1ª2jP8`1úI&X¤˜2C¸FÒ¡ðŸôòeŽêe¢=þ€ÀS£_jÜÎ+iQøWr&ãÎv¾„#Î=”½O6I?iªhŠ m Ïý$Εím½O´õ>ÑÖûD[pwˆ[{@Œ#s/Ü!%LfèB3¬Ž]&™ó„f`sϾ”@~üÿR3ô>ÍДf0Å—ÅjÍkš±À3æ8,ˆ?cJxéÏXEù3wŠö @à™?³¥>þŒDà¥Õž3[ʺ4Ð!yáˆCâÇ2˜C"á•Gá@6_ºÏ¦²yœ~@à©lêÁiE8$†£ðÔU×BtÈæKÅj?(D\ïZҜϡݺ9_à¿•y½Oæõ>™×ûd^S><ǯ/ãɤ„—O¥æÝ ¡2¥9?X6h§¼Ç}xo ÿIãA3çS•™~@à¿TM©ŒîR™Š9ïQ³Oe qì]NO˜2”pL3He@àDéiT8¢¤2 pD3eØà‹Ó­Å££‡Ä;_à˜f Z-­ÁšaG}›˜IŽÂG'~E*G4ƒT†~C¨Ç#ƒoh†Ý§¶¥i@(6t%ü·›‰Ý·™Ø}›‰Ý·™¡%w´P… ¾,r6Ͻ±™”¡ <2¾£p”Ê(žé”„Ê`sÿífboßL¹—gÇÁ—¡%FÅö(Öër´ Z5‘V.áíÂ+q£¿ZTæ5 ¡"Ôõ¸4ÓÌ!Š‹—x«´ÂaRéÀ\¬¨UžÆcTYŒzÖk‘™…zÚkQ®B7xÚkQx±\ÀÓø9WØà¡úÅœ6õ@I5# Þ*Œó@6¹ŒåE”æ¥lFƒä”Fá_ðÔÄ;Wòlw–W½O¸°#@ìsbfcRWÂå#ÿHDÏá܆ljD6c ¹¹FK6õ>ÙÔûdSï“MÝÍ$Ç &Â9xïöŠ böŠ÷ªG´Ë„dÑæZ†ºãmç…¯F_Çg•ÞøÜè—ø/KïS,ê! Kð¶Xí·Ë©ï~LÑ^Ü«ù’§tt l¾‘y³7•9:1SP ðî;áíÙ.„çQm5æèÄçÚÈÜK¯Gy<Šé §ÿFåAH®‘ø¾–y^^êƒz*ᤠQxâ¶Ä¯0OÅÆGÏ<¯+`¥"²®0Îß’ÅFïZ* ¤”#¥¹„c¢MJs ÇD»#¾ÿ†„FÑ&¥#¢MJ3Ïãû’s<¾/ááøˆïKŽÇPGe(á0ÝA :Èã„2(‹Â“ m~ØB°I…6ß&npD3He@á…ft˜ó72 c^ï‹9'zù5ÒÞ)s¾D™3(¾ü³%¼T€å}Q~nݺéAx¿9‡ñ7çàuSÑÀ¥^ôi‘–Ü`sÇšæeB&=Ö…ñ狺NËÅYZÊ)ž\¡ŸôŽ˜óãü–‰~‚÷nï”9çNbO7h…°îs ê»Þ'´¸9_‹4£Ò\ÂSÑ>Áä4—pL´;Ìù;iΗ$º³+„#¢MJ3ÿ_Òþ26G•Xp<!Ô‹²œ ë*$†4Œòï‡3²(üs®œCâûÓÑ RPx¡æü6ç€ÈÇfÎßz‚•ƒ7à½ç Ï.¸Æ¯ð­ÑÆ›Íy’Cõq»9‡WÕœ ã/§æ¢Ì˜ô¼l»¥ð8":÷ò9 ç…w P0ëÎç,¸ôˆ9÷ƒqΣp`Χ¯0¡U –„ç,¹À…–q„ó7˜s*ýÐû„–òÎÅ|ìŤ¹„çæ\­ñŠª9ÿ ¯k½î0ç¤97Ž”fŽˆ6)ÍüY7caO͹r¼„çÖ…u˜2”p˜}ËðHí,îÛžÔ¬ÔÊ D¦8¢¤2 ðB3:Ìù}] ¦ø¹˜óϯ¾(&KܬOÊ;_¶¤8Š.ᥧ"uydx.Úbq5Šƒ'G_<—ÇÙÁ36ø@_f†)G¸0kñ˾q|PÎ D6yÌEÆá‰.ŒS¨ß@ày['»¹×YÕnƒÃSÙ4¼ÇÕø$#ì0ÏþSï“M p«MÁ1 &…#L -G$˜ZŽH0-ÑððõI=áK:pî^[cK8¦¥Ì+7vX/áE÷&aÑÇ!>=A|âCüzjÆd# @Ê| ïôT¦ƒü²æ°¿Ýýâày!³! ´%99òWãBÙcÎ$%Íç¢-œ ¤æj\{¬™#"yÂ#ƒOí±'va‰L]Š»à9ìÜ Ía@ày$O[ÜWàÒjžµTp=©]ÚCë}²Ù Š B[Â1 &…÷?Öƒ7+Ú{Rh8"Á¸=£^Øã©H½6ðÖïB=ÖÉàÒ., _ˆÇz|}mWÜëH³{©I™Gàˆ2_ÂùXïböÉ<•µ(—{ºÌ›}2oöɼi˼¨È¼¹Uæïü‚g-b™{ÙyG Ô{d^ºÁZ•ä¥] %óDÖ"ƒÅ7 <‘ùøUÌ›}2sÖ¢€±š‹Ý'ó¶%óE>"G¨ÿÖ…±û\»Ï…ÙòÅo\{ 5ß’áÅÁoÍt„=PM¹×ø]&¬Gá™fHG(L>¸Ø}½ÝB¨#ùˆËGŒéˆþµ¸íDgp$ÀèxGœï ò‡{FÃ+ð/2*Îí­c¤¼|ý"gE!p¤ƒ7ª Ì«¶/Nl£Qqbîå5=+£â|ðÊjp¾×·jÀæž?P_áÒl0±) p¢fÈÂ݇p½Ohɨ¸Ñ¤4—ð\´µ"£â0yú “zØR^ªvþ‹ÎYQ¤4#pD´IiFàÅ›T¼”ßÀ•¡‚8jyk‘(ÃøC”ðßîfßn`öíæ¶Ýà>»]áÅVá5‹‡ä©Æ/´Ëi¼±™ì@«bn/•œk O’síà$šœ@à¿ÜL̾ÍÄPÚdyí>Ͱ7iÆ1^‘ŠŽ„dÏfb÷m&vßfb÷m&ö@ê©2<ßL–×…ÊH,\Ïf"ÃÙ (ŒGÄÙLª21…Cý"{6»o3±äfâ•QëЀ®¿Ë âß÷C—b¥Ïûþ6Ÿžf¹dÒ@áú»@²¦6Œ:[;dðY?“˜³¥±Cw¬ ŒP¿A±à•Ë_2ËRK\±´Á¨gеæÜ—weØà Íð¬|,+=º"±L)äÞ ¸OJ+ÂÿƒNVü Ñ ¡ëLü¥²,—t9¨G.k$Bý–ܰ[ÿÕûdž:™,àú‹Ø¿D–%·Ê“ÊPÂ1Í •#šÑá¥ý¥ÂQÜ R8¢¤2 ð<Ó'“ÈÓÞ£2J^jãx™Z–O6ƒHJŠþÅN&Çé«•ÑûTf_ºÑc–ûaµuç$¼™–þÿapݬIeØËû¹wÿ±ÇפblRTý~ér$_Ï,ÿꀾB:`ð¢8êÏÛ[k6¨ŽÅ}pW#¸ (èw’¬Cà{X'ö —8¡—áû„K`Ô‘+>¨á]Â%÷ —ܵZá¿.Ù+\€uüwµvˆ¦ÚÙ×Y§ ËÅ$°S€{áI9 ¥Qáš~p~À#kƒç·š]>x¾ ^¨0{ ~þÀ~®ê¼¸yÏg! ÞÇn%üôçº$wÞb#b1dEØ$9o0±2¾ðÈà§œ£÷é݃/ÅF([h)µvdžp0x ÷ …&æ\ ÷7݃/ÄF 3Ø0vIíàÚÂÁàÍ`–.1éà§Vø™-áÑ÷Gt+ËûÙ…ÿîJxÞϮҵˋžÚùcX9‡ÀŽÚŽ >µ´G¾–áM,mp<µçôÞŠÀay¹îžØù=½xÓ~%ö1X๽ 8ƒ…Êë÷¹ƒŠ%EU Ï<0o ¡É,2ø"FÎçØ{Á` ÊÏÌp„Á¸CO×EŸÞ®¸3öñF;c+Ü~€çvá ¹<ú ?<ÁH!AÎ2„¿$qȵŽÈÇÛ¼pñ†K+-Á[Aߎ·Ñİ%ÿãͤcgÅà‡>Þ’b%IÎòÓUìãÀ9$üRÆ'áP¬¡Ê›BxÊ!³Dì‡Ø ´× Â!‡ÆâÊ=‡ÆN§`©H“YÏé¯'Ò„?­F4WeRÇáížgÒŰ/êǤ¨^Ü’¶£cù'Â;ÖŒ¯ ø ›ÎOCòöÔ üHÕAåðc ¯… êÔÿáñ\)Æ;&v'ŸÜ¿\üÂv÷/ü@ÇÏžß›öíRÑÞn/™}[+Ç]Þ–|!K×z¸ÉAxa—µV\@ø¢ãÁsÕNÉå²àÕ:¤ (eá…ŽOj}y{O Ÿâ.ö±N¬“Rö°Nìc(YO,Æa¬¹ÇðÁ÷°.ÚçÉ•ÇÌœQUµ Ï˾†1˜ÇŽ1˜ä) OÌ–sàn9ÞJk@x!›$OsøÈàk–q‰”Á‡õ¡}ƒÁâVKp¹Âƒ‹å`,Sƒ³=Â3¯‡ÉBhõ`%ƒ‡/$¸‡ÁcðtG¼}ÅÖ¼‘, káPvqÀ“7+¹þY“úŠJ8Òr¨ÅA..‰1fB°À‘1ZjŒ²„×Ç(Θ n™)I!xè‹Æ.Îòùë?ÔðdŠûöÞçeï-Ô䀩IlŒ¬¬-ᛚ­Š÷¸~³Á‰_KŒ ð䙀^»~/jl˜”Ôª €ƒÉ‹à#/¯¾25‰Õ-sxt/Þè+ª—æ ¤þó‡·à1ìTYÅ—¶ÿV%²øoU"¯ëÛ×»/Â$Þ}¥&Q{±ÂÃW Z˜A/©@wà à^HŽÂG•ÉZÝ}ýa^¸¸qðBƒú ϯ†µ1M}ðâ¦Á‡…S púJ`Vÿ:+Ø,ïëjÆ*pUË5Gà™9<›qÃkP?W¨/‰HO÷ЏÞ>ßµáö^e»½˜9?üò8òþ÷pùÇëWN¾<¸‚Ë‚ŽMŸÕ£^î?ÚõÌݶ9ÿR¡¾¾$ªálƒ8ÆÇéXà5™ õ-9 «7ábû ½FKf5˜hÞy ÏS/ŽƒÅç~@\b…Ñ 5Æšƒ—û/q× þ¥2x¹oðºªX#ÜVàfçÍ¡‡ˆÝÇ!ÛEÄ tœWôÇ|pAÛ®/æÔæpqÆœ›F°öÜ+»ª 2×ÔÜSêºÍºŠu†:šlY_•…–ÎL; ¥r¸kÃ+¬“x88VróÉš{ôA:>ÒC‡àp½ÂaX=–aQviäö±žŒžw‰Èó•ç4½î’7ötlV%<âø‘)g%ULªð(|™¢ŽÕ¼,ìó*1E±„뫻ꚾӻ>Z‚Êó+<™ÉXBÉê|ð<œTcƒÂ+;À”D‚L‘-…#>¾^+S”7NQzcJx6EVKæSrPÊ+ÏQx6EǨð)rc‰K—tŠêÆ)r Êê®ðtŠbp~)1 ¦¨å¼O„@ỵùÁŸ?µõÑ7^YfJx¶>ñ~±¼Ò±!žƒ§Eg›};_›Ù4Ĺل¹×ÎÜ8w¡Au°žÎ]ÆGå±ÁYËÁ8„³< ‹˜»€ƒ·ÔÜç°-«ÝDÍð[æ»ß®ðtî6|µ]V¡ÎÃr‹NÇ^GŠMÑÏ÷‰Õ€ß ïžb´=Z—ðdŠœ F–ÖUŠ!XXé= OF¯ä€_K>@êž²IsBJ˜{M´ý­6ÉÀCÇ/DÛ [ì,~áÉÎâ ÑŸvˆöòÚ»ë^~ ‰¯ ›èRH@ÜVAC–³&~m¿_•'Ì®–'´Íá%„54áþ1ïx‡û·¤PvÇœS÷oÍÀ\bÎSf—k ¾Ké¢ðÕI ;€°&׫¦®÷œí‰Kh~ãSJóbŠZ/Ïpç°úäZ¡ð×õ†J…•6Û•veûÒ„÷ÈìR,¢êZiqë•BâZiQ̱°>N{Í}ô¹Pøëvÿ©Í”!æ}.-©¹Ïg‹âÄ”Î]Þ|¢} ‡·Ž1±:¾OD曢‚,_ÖÝÛÁ›˜+IÌÚv­¨¹/U>ò³j:wuëܵñ%<Ÿ»Xëldsçðå!„ƒ¹»à*;Û3wMéûì4ÕÝU­oœ{ê®.ppÆ¥l°Í¨Ì~, _õ]© [Lûü‚ÌÅ?k´W(¼f %K¤¶êÔjs#‡R§v§Ò¡c9eÄèÏÞ. V»CÊ ÞÑ´(¼âhKqh.>Zw}µ½•C‰ë»À™˜/h0M>1 ݬ¦B{ô‰µ#mïð‰µ»iî¹O¼ÀÁž!lpÿ¸pºœûì,£ðÕsfÁ©ôK½ë,CÅ6Ñ(¼â9kO泘ÏYû¥#õœx’Ïrëq\¬°(|õ¯ã‹Âpèç%‡ÂIQ8Ëáý1¨þ)ù˜9ÈÆ¢¾k|KäÜà‚zÜäKF$q+ É|‘œizá—šnË„³=P.*”Ç^\¨° õž” $Ë _/Ôƒ5öa¿ Û-’ ŸŸ)lðá«ô‚@ƒD¦WÛŒµ"ƒ/áùL¢³e„ѳ  •5Ø¥|h1xM¢%®÷z/ðÁK=8çÃ9ß„í $ÎCøSr–ZËHäƒÀ‰ë½ÞÁKlðqôsQa8øèÆ ï$ Oï¤òøàe2ø%c!ïß9x…s^ø%y/I"9šð„ð§$±lML”ɽŸ%:Gô^ƒ—‹¡Ov îBøšèâýXÞãüØ%ÂñjÐ݃7Äà57øàx!ῼ§²tÖKe$ÀÅÌå™or³R¸<±“Nça¼­O,®iÅÝ5,(Ÿ¾^ÚðTêŽ<×¥ãÞ'¾1ª,©°XaИdœÏ7F5šhC±q'ã%éL FÖñ»êÜ×,ø/â*6“æ#tÿVxÉ!ÓC}M In”zÒ”ð’º@›j·´%<_ŸùØ‚¡ú^+§ºkBE›Ç–·XýµãàhɲÂSÇ’Ó¸ÐZ£KxÆ¡Á;G4þ¢à_iÈ\)çlsx‹CBP{ÆàˆÔšXá…¨¬®`.l·+•â•éÑØÉx³̹ò,X_ÂS+»y_·,ÜÏ*‹IÅ`Æ_Ò¾DöÌÛ¢7ÌŽáà+Þ$rªá]DD›ÈK…ˆè!"›ìBNI%¼$Øï‹ÔÊœÈêBÕtf…;¾â-"ÿ«dÜ­ðÑ&ò^!"zˆ˜&»"%%¼A¤É.¤˜H om"v™.vÙ»° Ô%|- räNŽÅO¶ éÃp Œ„ÿl_˜ÁJS–n9„¸Æ oL±¹Xµj•+¼NÄÏqżžGò·>îþVÓ¢/:}‚ï¼á‹–5«€/ºÂóRl`ø[( ðdâS¡xŠ>ÓÂG»¢fn,S8§²c檟ÕÇË9Vä_©×&G ^6òk+®sæ+N†üò«‡´;ZáÙMÍà¬RåÅ”ƒS `*„?%þñ1Ü.7¬ó<ˆ†p“5ÑÓ §fåüžº±pb߉} 'Z ÷Q]8¬|I²på’ ðu}ô b>¨E“ªâ’”ðÆúik—¹ÆúÈ}ë³ëK ߨ•uú]Ò„p%ü·Ë+Q{<07_ìfé8ƒÀ]†ð·„uRø¶“¹ÂËõ±Û ÒVµ3<|Uçšyl>Ÿ=ÅòÂZ™Ë Å|y×NpyÃ6$%l8¼Â³åƒÔØòŽuÄKxù>ràèò&!´ žm·[§µ<ÛjP8ü-Ë\Ñ=Ë«pÇ!¬¯C7ûÈ”^,oÎ!"uDع^DcyÍ Ë‹LÑ ë3p¦Ðõ„÷Z×ÁhY ë*ŒA­«΢ðպߕYƒ[×ñ"°„#Ë M•³½¤Ž4ÖÇî[KZWOXWiKøo—×RÖuéð’YWéBá™ue]ÖÕ7vÜYPëZ ³®CœòJ#–Ö ùà„Wzfߨ¾¼œôJ­Æw?rs68y‹^x¥<÷J½Ö¹W}Rï¥ÆæžçZ/ ¯ÔÝSA/ Ïò^äÐáõpªŽºgáľ…û®™þðQ]8Â+Ýî£\¾&üù˜¶å–CûG¹$%¼±>’Jér¦g}ä¾õ!½RKÙMpiºÂ»¼”Wê5ꕯÅàðÔnªž<ëòù¸5ް›ÖçpÌn&¢ÜÅq»Éîrx±¼±új×òn s =5ÄçG ÷ªß`±Áê·´ÊÕO ‹ÃW!8zåJÜmqðPÈ»ÜN¹-|ÎÙn¬Ý·>¤Û2+©~†—ðß./å¶ø97­8JíPx¦~Ò÷¨Ÿ%…”ú¹bá0õƒt0ÍQÖÕçpÔºÎæ1)‹/M@× Ç„€Z8„z¹ŠŽ—~á1>b ç-L3JæCaîõíEà…×#‹“fp°?„'G®™(bq>œf¥„Ë+p¯'Öw»ªXR’º3ÅúP;¥dtˆ}Ò!öI‡Ø'¢%Ué \+Áð€_\w„À+ë'l;ŒŠŠkÕ³îd$>Ìøþûu—uGœ1ŽÀ‹pÉ\ñ´!6²%6ÅnÀ‘Á[ƒRšØ Gd“Ç^ºlã뀾uG;N„ `U!¨yÝ_ÁçpÔWès«¹ðÒ”ð"’Áê1æVsaœ+áEËx‡º‚ÎÂWsacW”5 ?7cæ öˆ Ú’ªgÝí¾u··› ‡ÀKÑÖ=bc[bSļ±±„¹àÖ1/‹°î·æ‚ŒŒYѽp”¹Ô©AqŠÔ.cs8ºËXDlbT”Ö]áýæÂ€—€+¼Ø&”Bœû¸$FDñGÇA9. ßê\áiiCNŽN°‡jŒ6=<ñP}¼ãh(. Þ pp𴃔}þ=>t+á½ó…#ë.×#6bŸØˆ}b#ö‰h‰ÍGUlDKl>ªbƒÖœš¤#ß~¼‹7¯°žúQsj”ŽŽ#‹‡é j 8Ö%rŸtÜèºF[éxyf7=Â%[•íEœ1‡Àó½Ès‹ïEZ!ƒÇ$˜ÚNÊ&²IƒÇ¥ƒ¸c-9FK á#ƒ•–tt 8êè˜áºÙÁµœ—ðB:Œî2=æfÓsÖŠWÉò ÊôĹÃë5¼Þ–ŠÝš ÕƒK¼4OMÓ¢#*M—é¡Ü`ê¦"“»O:nwƒá=‰´”é±¶G¸lK¸ŠS³×<7=FrÂô$²i÷™‹Èæ±jz|1÷~Óƒr3=  À‡"ï—yO Vµµµ8¼âd ݓў¿sÒ øÇÁ&¡REzŠ72[±x,‚EáE<– Á–ðºs£èb¢=‘V%ö-¯Ø·¼bßò•P·åý¨./ê•Â@:CEá¿ ¤+C¥Ìm;ë±ÕŽyUŽº¿\o¨°ÿåÂ54‡¥N!Í*áXh‹Œf¡ð"´Õ±§SÅç¸Ð¢ã  ÛчÚÂiÊ ÁIç §@®ÃÂ)x+«Iƒºu”©œõ¾ðÞ>Ð]•ª¯'¸â=Ë+ö-¯Ø·¼bßò’ÕËŽc¾ÞwÌ×ûŽùT 4!¸íð¢uûŒU]8Ê ZÎIÿrá(ƒjì8$é}‡$½ïdHµKãÌ­á\Ë0ø q9cJx±¼}“46ŽU<Û/½\µ²8¼â0òbH{lîà:x `P{,í¼#2+µAá¯@6WÞöÞxš[ùÙ‘¯‚¸é±Olnç~‹ØhþK±!í¼Åý¯Ll;¥£°ófб/7Gá…ttØyC„s³õ!#n^vìæÖˆ[ ŽÀoˆ¸ÁüKCEܬÓ=FÅì“r3Q“Ž  9ç O¥cLB,¼s/ƒ¹ÀYW>Ló®g31¤t€¯,éÃÒvpÔvàÒa$d°½qˉ¯x /S€ç£_!ºYÍÙfOZ4æ%9(]·ÂËÌþ%y4‹Ã ÃÖ¥l¹‰/á…'1µqYoÜ#g|Lqxe‰”9ÈÓc9.\Ùò’'/z„Kì.±O¸Ä>áû„‹êmÓ)\hî®RlPøV‡˜‰pPh2Ì(6%¼ÛŸÉŽ<¿xòŽHçptÇÒ=bsóŽ¥ážn©kIÉhˆÙ'6ÔŽµ6t®‹ •N¿.ÊÄFq¸ÝÚ<‡j¬‰¯\Ð…;:‚#ƒïÌ¡ÊÎ1Â\,5⇳ª„#¯h×<"º,ö /.ˆ…AèÅá žÞÒø9Óiî¬s8ú VyDàÜúyÅë"‚ iE°£µƒ*áeÍ …×EåîŽ<0HÆ¢\¢‡Cr‡æì[åÐß~9{¾¥UËVø rî ꣜ÿ¥ÇÈï°ÝO„ãÖR†!¯Q…Àí{­T²š[Iö0"¬âÒR¬„—ŒÐ#”/¨Fðó™œÉõF£t䊣t¥’ï0J×ë6FÚ(]¿ûù(x°™ ÑþúMŒ1†5;ø¸š^úë¢Y¿ä#PÌ_qQÌêײÀ$Þž¹Ú¼{…5sǬ²uø°…H®â?Lå\Ø»ç÷EÈdðÜýÇÞËj‘à«8)æ;¢ æ¡„»ìçL7ïúÚ·‘]o–G¨3_«ÎüTt拨>÷™Ù½ÿùóÝ‚£ÛQI$xQ©*w@‹´Á÷Þ_ŒbðREe­Þvˆz$ÆšŸ%ÂÕWþU6Åo²s¡@öýv­áê;ÿ*#ò— Âç¶xìß÷C…ÈWó¯R"ºi#®/4MÚˆÁOÇ×ìŽ œÅ¸~oS¯PoQy?W¨S*g7•{¬Páú#ÿ*a°¸e/´&ß Å {á¼:pß&нPÆFän~6ó(è½P|ß0øµ} ï¼ W …ƒÁËX7iÙÈíÄÈ͉áùîÄÀËŽ^žGæˆaÉ1”×ÜÍ;rcçhÆ”ãàÀ)¡›§§ææ›®çåg{”ôòÊï]²)Éå•ÛaŠ^^Ù±¼²²¼¸ŸNäS¹aö ¿^N-8?a~ZÛÍ“˜ou õ—™:å[U]3õD‰öaŽÂV +|[^!äØÇhT69,ô áÉòZç¹¢9<.¯z"9¤öÙMu“Ý £Wƒ9§ ·›j`Nøeð´b)T:ÅœV‘Cìž=~Ý'u 13<ÑN_È “?cb“Ã2¤û˜Æ¦>[Â;m»”y±apoìt Ž Ö4ƒ5uÊ,'Œ3O¢=« ááY þ98ì ~ÈáöŽ=þ÷¹Šæºkï5WÚ8ûöú˜Žõ14‡Ì7m \Û@™ïÒ@™©›Tø¬ Úæ5PÓÉYåðqŠôþcö‰ )EP25Š „…g"¨^Ï"MåóÈà3ÔÒ¶è#ë¶îÒ|³\çe•õ˜åŠ‘ÿíejO.:™ö½Ûd =€§W%B íî¢ð¯‹¥æ.¶YK±(Ž%¼Ìµäð+½O´g8ÿß}"Â.m\™/áéñöŸ ùÍÐ ÍÿËàB"Ô1ý!U#úCª Gô‡TŽè–D{»\Ùà¹bI9?lm(–.kLqäÜá7Cƒó …ŃcH{¿ãüÿ¥bé}Š¥D§_·=ã©O±¤·%¼Ð¹¼cÌ5CÀå=Sõ˜FE{`ž)Þ)Ú£l#ðB´çâ4…hsáx!Úó‹ñ\h5(C¹Áóká(Â¥Ðzƒ¸¦„ç[ƒŠ#BN›£žJðô"´"¾¯Ä¨çì-v)}»%“`Bh”:½Oh©ÝÀMJs /v%»d~§F”MRJ8¦~ÒYHÍ •#šA*Ͼзó‰=^à=*N·Vãê¹Ê°¥Fvª2fJ;TfúªGeô>•Ñ7«Œ;á Ç"XÝ*ó‚;÷Ç­]ñ®ú /›sŸ^}1‹ m„#ƒïÚ(µ_OÍÔsvj© Ñ Ì‚G4B½P™µ¬|]eJ·=˜s®GU&&Bhþ“ÈÍÐû4C¨Å *#”DæŽér¡ÀÇa”ìMãÎX g!›I<ÚHƒÂÁÎ2}Eª Gô‡T™ÞéŒMÞØ_vƒ$7¿¦2V‰^h†¥.»¿?¦žä;y¡°¼…Ëý$Îï¾+cÐ}Ç/’w´2ó“0ê×sæ¥IKx@ØÜ wH,•ÁK<Ÿ=òÙà¹ÑçlËv>œ¹­6(ü?([ñ+Lhýjzx&´Llù„™û 'ˆ®÷ -iç•&¥¹„§¢}#3'àVö®¤hwêwÒPÏÑLš8"Ú¤4#ðôíx°´xÎ×È”Þ!ó£¥–QìKx.óÌäíøÁ†ÍÏáðÿ s¿ê‘y½Oæq#ŒÕÇf¨ßºdžy/Kx.Úñ+ÜPk!Jx¿¡fðTöq»¡6ÈÜË­°¨4I®Òi¨g™/¯ °¹—Bë5’ü¢ä*çƒ2ÔÞÈVÏ‚YãQxRÏ"~…¥+øAHdÝ‹s+Só.â“odán¹ù…¬Óû„7ÔÑ\XRšKxn¨¥=†úƒ2Ôl^÷º¡þ µq¤4#pD´IiFà…¡v¸¡ŽL)á=2ì´Ë—ð£æÒ ‡Pf¬Fáɉ4~Õ#ózŸÌßn¨¡?YStà+Ínçd§H9ïïå)Ò Ô‘Ã¢¥ÜŽÀû³Ï˜DàÅa‘{ü|(2÷ì°ƒ®Oú2w$ßÀ!ÞÅÁ‰A©^%æQëpŠ´…'¥KâW˜w¡cÆ(ϼ ±äV•ÞÌnºìó¨/zŸÐîó¨/zŸÌ“‘NÆm Ç4£ÃÎ_(;Ï™$•#šA*/ò2á{ ¾Ge4¬ç^á]ˆÉ•Á¯nå­"•¡„cš+ ÿí6aömfß6aÛD® BSÂË£ªT¤2”ðl3‘lÐUÎ`,€ÿ@F:ìÝÒqú#šA* /4£# 1Ôt]/vŸfØ–fW·0²µÀ»™Ø©?=›‰Ý·™Ø}›‰Ý·™Xb3¡£;a]ŸÿF1xç~±„ÿÅR[lôú•Fáÿ%y™Bum&vßfbÑÍ$†å8¡2¦€¼qy‡¾–£ER›¥¦XÌ"ðÂcó£ßѦ zíb2_ÂsPnŽKc2Àó=ƒ“¦D3ô>ÍÐû4CïÓ êÂg»Y>²„»õuuëdh²*æ·%å/âÂA‘°gˆà¤Á<­/ô2}Eª Gô‡T™~K  °ny¤œÑêÎvø¦Ì¹š»¡#~’+á½)nñÍ 2ø[ž9 ^¸CŒ:A@±ù¦MZe‘Á—B«Téè8{±ñ^­4H¾WƒL‚êßh iú Z‰M!´Ö—×X18ª9CÖý–S3P™o½Oh÷¥è|SoÁØü6SŽh‚‰"ßzŸÊè}*£Û*#**£*Slæ}/ƒ…ãŽÔ¥³BýàçøƒÁzx"ýÖø¡Û/þóCwü#ŠEê /«ÃúFŸLgð•Ù§XD8J3Ÿ ÂNfKøo7C8P ¼þáÛHýép ¾ÍÔRe8²å¹oð%Á7ùx—Œs¾o/6^•!ÔóWmA²=šR!ÒÍÄà)hFm/2ûö¢Û"L™Ôn÷©Œ½Ue8¡%_ESWë(¼HVUF·s È¨Å\T=«‡únܑҌÀÑ&¥g9P‚ F”AæÞ#óñM–ðyëÅ,zŠ þ_z›ÁEÌë}2ÿ‹ÐÔ¦°o}{ÆÁóWy½Å8ÍN¤[åBɯM8Ö ~%Nø½ŸÒ}NõŽ¥MýY ý/bŸ¯é2%,Û²³ÅgùüõJ½€§ÔëöØ|vM8ÒÖ}¡ž7lW 8P+|íÞÄOÚÞ/yØIÃö‰'(ü0ÛÁò˜WEݤƒcïœìòFv8½4E[ÿùÃ'Âlu•øø•H¾’Ë6þ']¸øC¿Jks'DÚ¢RϦ¸ˆv>”D^›ŒÉfçŒ]£×µü ³LGÆ8·0Ê9[>ˆmáœ1ºÓþéqV …äci–ôÑ>N_¨Îè%<붌蒼“¶oŠÇV^‹­Û»Õ“L« \Á ž5˜[»x¿&|ƒg7OÛpK!pÇνØ@¬ž‹Þ#LÉáEƒ«„C÷÷T·ÒàœLZVôŲ¹À±Þે"¯÷$‘‡."Í"Ëüår!‰<.U’‘f€hÏôñÚ/‡ÇNÉã¹ãS¹á-8¦±ÉWè–Ø=UÀ [Ö“ûׂ‡5É;ÔÏÓþ…è1>ï£~û†)AEÒûrÃ<­Š•;—Ç;Ù†wL“¨ˆ¶K6þ²“¹pƒ’é8K®R—ôÚr'UÅÜ#ƒémõþ³)çµ–Þ÷]-½ï¯K÷¾ïjb|mˆJ½‰ñ}Wã‡y¬8pû¸‡}ÜÃ>îaŸ|úºÄÖx@CY·ÀѾNú@´\Zuñú´õN|ûx›7²®ù·`}ÂRÏ!¬ðÃÓößEØú·ØcI+eVø¼$\ ã%蘑ÀH—°ñ äòCº$G[ >îðoé£/.!±CçXœ£”CA´ÝVF!§ZÂê€CÁVzÃ@×¢9¤‡%wµÁ!q(n¥[ªâõ¹-C— ‡Vx¢ãQ†Ü¦½KOcc.x5ŸÀ IC¶™À:‰ *?&Öb6¥ò‡G›^ðqbÝ%.ÁààÅ>Ö ‚uËé °.0OÆ2… DY6bÂW䃕Ll —lGÅðÁ÷°n»u/û,×Ë>Ëõrƒå ¦ËÄ^bÛ–“Àa¹^VËuJ8Äá“Íð•ØÇ¡]–ëåË%c» Ç'ð_X®—Õrr˵•½»^žú{+sϳ–$<ØyÑ[Yû!‡‡1ÞŸ)ßèùþÁèïŽDž‹ÆÝ>7HÀºƒOž‘ž6‡‹çì",n’¥#¯%?`~j íéîJ í Úh5)´²„#B«¡ÍÓ^Ü%i¹mö€5|~=g_M ̈ÐzUÂK¡Õ"ÚQlm"ó'ZhM!´a³×Ò®—L)<é%#çܣ缗ŒÜ) <ZÇz„öT íØ\Õoq¡5V”ð_ í¹ÃÒ>ÑB{Æ-íº[?ë»Kz4/á˜=¦¤Y"ðÂ3GH³ò<·ÇóÃ[Ô—ðRh§Ø})V"ðR:”GÂ~{q¯(uL J8"@6_šÒQVÉ´9¼&Õ}ø…6i‚0iP­_H“¦,aÒ,2xĤ ܤi¥J8R¨Õç&ÍËX9ÄyÞeÒÆ úL þ½/æ5bÒæx.Áf“ÍÏCfÓPø&wy3‹M™^e} ¿Å¤Ö½5…¶¬lisx¹˹ícc~£…ÖB«4/„Öx\h·7å^ít~)…V:dðT³‘Äyd±#•öª„#BëJ¡Œæ‰Â¾•BËp/Ï„ö¸þ€À3¡ÜrJh- _„VùA§½Ã…Vx_ÂoZxhøl íç×…ÚOJhç"ˆÐJY¡ÕBûI ­¦„Ö#ðBh§»ÔçJy/…Ö"ΣeƒÙJ x)´9ñ ÎY ¥îZmG…vúçB;—ÇœGÂל Î#qâ1¡~‹Ð‚CÃwShˤp›ÃK¡^ð ÁöXÀ»-mÜ{xyL7„Ð2 ^øˆ–pôm¾écºG„ÖÄŽª„#Bëñcºe8V–‰…°K÷ ¬Ûø/Žé›©Ì…Ö¡p ´"œGq¡™RÂiiÿ5…ößË-´ÿ¨ØÒÜ^±´PeþýÂ=P¼´´¸ÐÆY!ðÂÒNñIÄÒZ]ÂKks¡µaó1"9åÿ£Ý…müÃõ¼&¯²B!Çôé^¸ä1ÝàðÕ=ƒcÞS–VqdÝ'´M¡}x¥…v†#±%¦ÄrLH/} /r¥¸6‹Ð>ä6—yÊ–²´<ÚØUµOº+¼zhxhŸt¯ð‰PÎ`ê¤Ë‡©—2vh0%<· K¡g¤|&GàeðŽb°P¼´ xÄù0€0Ê}Ò Þ1ÃÁ#[™E‚wÞ)MÀ“°|Q¬¼æ+G®ØÊ”£ü/¥P88隘kžtǽ¬„ÿî¤û¸°ò Û|T.¼eYá Fzla¯²_n ¿nq£Û<ßeI¤´Ðó…ðÅ?F¾ŒðÒú¦¸ÀŒÏüçZÙÙㆂl~ÍÍøŠCöŽ‘#c,ÊvùÌl‡Báùe¡f0R;ÆQø¢&Gä+1Oñáï×o¦(n[†XuÒ¡ð¼Ñ—_ɾuŽQbctQI—Ac¸F|í‰Å(8ÞùWr–Gl&¨ —ãžLÑÄ—p¸ÂKpSáù2ÄëAiÅQxò-~…ØàèQÀÏ™¨H­R|,,›–[u¢~͈hAlÄ}2¤K9籦¡WÌšM˹G¹ÁØJŽÃAl7ÿʰêòuNÑ2$¤t8w:…OQ`Ô‹) L†ïâNŠÂ·)æ_=Qà˜¯1M‘Î!YáHžeãçCVøáaÓ¥¼B‡ðçÍí‰Gèålž%—hÜ]ÝD(³î™}¼]²ä,à‚˜ûÜàª5wÌ}J ùÜm§À ·¹Û°­ó列Í]ÉQ8Èk ¤Æ'Uù܃WÀCÓÛyŒØ™Ùf_Ší§-ÉšÌb¾{þ®¹%Zy©0x†‡)fÙoj‰•&Ùoã9ÚJ¾0عÁ0«Ãì·xL‘@6!|®Ø V»)N|yû®çÿ(ábóÝHcî™{"\I柜¶Â×¹G­Ô¹rîQºà¥„/sgv0B‡Í=®×%ì$ï¾ÎèÞ+Ÿ¾^HáZá&‡/f×Þ}¥ÖFxWÂÃWOIr✵Hž°¥.¨‡)&Ôã!ÖKð•Ø7Eqã…rª„—Sœ“SØã*‚ˆ÷+ÓøYwc€¿2ÚD¼2ƒG}!ÜVàö€žÇÃzQ’þÝã uoqxZC/×CDÔùˆp(ËE™"\‹½l§Û[,0$+|ÛËŽ\?I í³íëhb3¯…ð×-Üœ ¸¾JÑœ"ùÄÀ»§(­U%<Ù®£#!‹úÈcŠ*¸W‚ðíuIØh‚A6à+Ùžâ]eŠòÖ)ªdŒ²œâQø°.‰Sée’ßá[*éÑëäšçu¬fŽy«·Œ ¾„ç3NË\µ3­>€o3‰ýJçïÛàÃüT||¯6_ÇL r»Ž·AñÆ¢ž(“Ã3Åò JšÞ§Ê œzEõœ¿¢JUYo ¡Ê—š*ëÜ:òxvd\z8Å}ª¼À»§˜ª²‡Ò9JTùRSe]¸=ǘ@i‚×ù¸O•xÿU^àpŠ©*_jª àË}Œ¼ÛíYQüª©Ê—š*/ð|&›*_jª à„*ƒ÷£r0<¹;{o…1ÏÛ(Ô÷å1öŸÃ!‡fUöàpñjyÕ»A<»„CvóQsu˜g‹Yq %­‡ºÀ©KµX‚”úAÁTÔW+¤*÷P—u;߬–Ô ¤®Zaî:u…S~¾aË©ä©ëV»N]cÔGú§È£ðÕ½÷A2A«Öç»7ÖÜf²+²ã M ÏË“-Çúhó¶øÝ÷nߊ×4À§^áåuH«xãË%âõ>Ue1õT©¿Vx£_áéòÆØ¸ÆÛà)‡b»Æ¯@Æé šsmŒb°bsRmcŠÔãOW:[Âó’UÌI$é&2žq_‹ls ÿz¶Ô oI—(‡óÃì&‡d[Ò‰§– ~¥Hé(ᘨŒsçuéÐû@ß4÷Bô>Їž)úž›vÜÌ}n~k_‡ž+ÁûžÜ´á>q®\‡B8Äè!¸Ô¿í†÷¤oí{ÒúàÑ«úqø<¼ ƒð LyJ*jðÀ›7 õÁ œó\Ž_kqh¹¼“ó|pÙ¼Öª^Rƒ—FáIðZ ÂçÁ{†§¬Õ–ü¦—ïŒx$´>ÏžHÿÎY žUï9ÀÁwK]¹®AÍå‡ã–=QÂÁžq”ƒgX’DøÅ V‚\GßBÓá+6¦ŽƒgôÜ-šûÜ–OuïÞãé)ÉW ¿X;‚?çeÀ‚È›ŽdHÉå¹l™ «8å·‡™$6¬ð$Œý‰u}’ÈÍapÒ"Ô“”’1!Rä‘Díf¾Fƒ1½Þ¼euð@Þý / ódŠD™¶p„–Èúo¼ÉáÈú,yõ‘ûÖ‡ˆf»P¼CJaðd}t¼/6¶ˆô†S·v:YŸ"Fxtv°6|g‰õñÈÜ ÇÁkÈ`µo}Ô¾õQûÖGáŸm}.ÕõQHà'YŸKu}TÛJÖ§ÎyN\år>õMjX.N½^²ÇrqÞˆwÔ9ϱ;ÁrÜr ^rÁAZ©àæ[±ÁWÎGC&÷‘BnÌIi†aÛ^·\œØYØò ±®œÚY‡¾±>bßú81ôŠÞ 0fu ‡c…yë]~'p´|Іƒ7”žÞnXáˆõ1õ†þÈ}ë#÷­Ü·>DÈz[ŸKu}Šu¾>—êúH$ ×§ÎyEú\·\Lh™ÃQËåð#ZÂùžŸ”ç NùfË÷B8²>„Ê€#+<óÌâM¿GLšŠ~¨Gá[ Þ˜A¹Íe[MšÒà·(<·o¢Ã¤)Re¦~'éÂÅ7®¢„£*ÓµprßÂÉ[.¶ì`Øà Ã'´B¼h?(~ƒðec²b0¯ËËjo‡xˆÂsÃ'z4Ní[8µoáÔ¾…S­…»TޏúÚîR]¸âê+_¸KuáTÏ^¤I_n®ùT·ˆšòåæÞhõѼ½>wôúh~³EÔ¢„çgUï¶Í~µˆcqq}9$¬Æ-KñM/W‹cR‚ /„gŠ¥{,¢¦œ<­}‡biÒÉÓ¢gáľ…»}+K8/‹¨™CÒwTŒVÎÚB"ÑΞ-œïñA´Ü·prßÂÉ} 'o±ˆåÂIÂ"® w©.œD’’…»T®'®ð¹VÁ£î,«E>ñZlð±(3è¯k9 Ïb‡ƒkß…Îp÷ÌîÏwd|óJ•`Ú‚³ùà=¨Ss%K0I®ó) ?F¬AáÙݯžŠù™¾6¿¾Ý<øÀùžU{4áPÖ+‰©Ð îé3<Œ1/‘Œñzóá1r…o‘ÿ(åÒ‹5:T°ÎðqŒt€ÿë{¿ÊjG®âæg”EøhYÂǯ5³šŸ¿É1~ÿ|cš:ø˜¬[³«¯ÁZΉ«/P' ÂQ‘:xY^-/ Ëep9<êâýOeŠøSÐ&‡N1ˆ$×%<_¬€&®&aÁ+_µ FIf°ê=ñî×»Þ˜"WwD>¥žú¿eeIÇî :‡«»ü«Äîru"ˆ¸ykIËHDF¸:å_eDÎí™Ó7 ‘®>ó¯2"ß-"ßo5‰áê;ÿ*#‚7C Ÿʲ(‘®þå_¥DtS"’* 9MJÄø>í'°™j±n¸¿ºÊoÄCë£DZ¥¤û „ƒWF2&ÉÉö<Š i{dÿàǺ&8ßJrðbPíÁKtð2Q;»:’v#Ô7p~tƒ5œ_áç±Kô˜= ^nA8¼¼qsîߣ¢­¾¾»aðZ޹`ðúŽ<Îyí¤Báÿm|×Ìûñ ¯iYÿwƒØÄñÛXµ§„w¤/eÌ*·Ð9Ò8çðË{ÎGý9xóß.…57 ^Ç"ëðnÒàƒ×Áï0 ç =xûŒç8ÆVĸ?/Vxîò‰õˆ˜' 1PÂ/›pÅžâsùb$årxœ¢}¦§ø½K­í÷mjåÆ@8–3žvÉÝ-jíãË'ïÁàÝj ÞݵÏ­Öî{—f¸ï~ÍÀßÁyGr¾ÝÀú¹ÒÀúùúD4„”âÐzá¾Àû^÷Œ„Ò›^&pðº?ì¢KQâü…»³‡¯¯ûÝ`œe½—'–ÃÇwðiÜInïaÂWÄ3íð§º8tC í%¹ò…/²&P¶ÒœCàÅ]5\ ®L‡Æ¡C|ÆøM= =bOgé(á°Ä,)œ”^0‚”Ž>N1­æÞŸ®]”:§8/o ÇÖšX^Þšâ¶¼9<Ÿâ”A°~õ|·§Ã/K1l–àR±NX‚¬Q°Ž…¯ˆb¡ éýìå±e¹. ð=¥x_)†RÇ!œÐñlîÖmµW8(Cáõ|#˜Í=ü AîÒÚ¿ "¹¢%¶èJµ÷RÑ^Ï—×R+ZÀÇ)ÒÚûü-n™b®½+[ÅbáD®½ž¯¢¢Nåð|Љö^×v+W¤—Ïq¸fn@85¬QIç÷OIŽ‘S¼ñ*¯i0à8¬±/jZ²)³úªŸÎù½–Dà/—ì¾yª|ÕïwéÝ•À¨_O<Íß™×ì^*–qAX—?dRj*ïE*´"ƒO[ñ`š§°ü5+uv´Ûk¶~=¤±Z·üÏÓÜlå@SøpÝÍ\xùš×i7[ÍDOžBp?Ì-†®e!V£Qx<ôÃTxùj¯ç?‰8ϤqÄfõòLm&‚ØLüÀqx¢?ñ+b3ÑÈÂeúÃuŽo&Îãð|3á˜ÊÀî ~ËfÂs8º™Hb3bó²¨LÙéGe^p•‰VWpàÈ–£ð]F*Às•qFâ*³EH <ßræ‚#È.÷¢\eb…IBe¶Fƒžn9.l%V£*ã/Q8±4<ÉU&ÖV(ªÌøª2zpçS•‰•rµBUF$†ú…T™yÝK•ÁÖý—*óB«Œ¦TPÿXTæýüÖwdqV•ð\e–öJWùç5ÍP¡^îE\Û6øâȼÆTæóBx¡2Ó-ôµì„UæƒP™a.ÝPY$tÛ?#‹ˆý®¥7¨Ê„ó€EáYã1å‰#‹ð(<;²_ªLì—",2÷Le„œ@U†mÝZRø "ç5¡2¡Þ¯2ÛK¯Žzi‚pÌ$ðm>ÄÍ*Ãx¡2r>(7TFHÍ •#šA(÷üzyvVʈ}*#ö©ŒØ§2bŸÊˆ}*#ö©ŒØ§2bŸÊHÌ1›‚ñB—ޱ>°KÖ}†ç±€à’ D—itJxºËâÖc»Ìºp%Èåõ ®I¾„K~Mkž1Oyý•ðÒѱ?( ƒPÏcKÌJÜ…‰âYÂóØÒ:ø2¶¤êi¯d¡¥rÇzcø¢bKÒKÌ…ý þ_š3©ê¢|RpJÊpÇ–¤r(ü+ 8;Ê…Aà7”YÁ:Ô…!bK ZÄ/q“ÊŒ·Û¦„Ó^]eH¯_`ñ‰‚Gi© Ñ Tæ‡á™/Åú''1ÔÇØOÍ£ðk:EÅ1yНH0êˆpuÄú8&\³¡NeÞ'a¹/±Oêä>©“û¤NÞ$u“ Fà¿”:y“Ô×hËðLêü`¤)¥.æú:xÒý’¸Ô)É &uÁ &R'÷I¼Iêⲋbî¿–º¿‹{ðïû¡Ï=ت x~õ¤˜¦öw%KxyÃdñKYΡ×ÿ—S-ñK%m0x.×SÙãbã—Z"p¤ rq)ߘ:æ1xyÃÄ$»PÌ¢pØ9–y2åÆœ~@àé¥ìØü]ÈÄ\üÅ/eclÈa± 6xH]©2¶çRö/§TFr*B^PÇÂåð`óoÕŒ—·>ÍÐðžãå8«ùÒ¼Ô ÍK8r÷ª‰Üx=öÖ G¤+(dî…f,ÞÒÔZ熲P3lp‰E0*º„—I–cšœ˜(òHWˆ-{Ш^üŸsêÌšáqø5¿wFÓÄ ±Á—OÑ¡ÿ~¡"‡cša¶¯ÀEÒc_T¾ò"IÌÑÑ"*.A éºHŠM;èáƒÎ}s„ÊH ^èÏ’:—« ¹oäE’œeT\"sOs߬rŠG©•(<•MÍ-¶™ÈØá…ÿ—¿Õ²á¥Qq>x°å<àIBNãé aW(•B/žOQÌ/Ù²)Žïk5 ¿f‰•ä=¡@áù=¡ÀœŠúfÆNÍCÐi ÿJ‰$"èqO²W†|Î`nU0¹Þ;ƒ2X@o ³*(b@Ó}ôà OÒ}‚ϵMñõJù›Ë3—-Ò–ð²ˆÒxÔIƒHë ;Yè%|E²ŽIWs0Ý‹m…‡¡doç¬X"cËS§#·ñÑxð™ÂŸ3æGßd‰Ç–­m _Ú<Ù fÒrl÷K•ô•(³œ5÷Aà8‡P¦h!x ‡ uR¶j|ï6Õ:—(<åóª §°Ø\¸ê©CÆI.‹ÜMP_N a~vjÕZ8µoá µpóýB¶p<œ› xÿÂÅ-áý g/Ú jk±…“ ¾å„ðµYœŠû"¾p’i¾Æb÷a<¥q¢€c7zãSÐò@,-MïqºCãôÍ{œQ‘ž;Œr{|J®=¸_á…AuÂ㛟b£9 ŠÉÙÐØ’Y)ž,¯fKº°¡.Æë`@i…c;!®ŠÂÔ½„¹ùTˆøÚÕö,¯¼Ù…iu+ü·Ë+„£c4¾¼ðÒ Ï÷K¶>_½plÓ„ðÔÑqBËëC£Â—pÌì¾(¨cŽ4=šÜ/ç[­Æòª}Ë«ö-/~–÷£º¼Å}H¾¼Õå%îC„+n€ûÆ«5QœþÛåU]ËKgWÕæVwHxþÛå5øòZ¥4î'‰rîÉuW¼¶pW]·[7(™DÙ <]^µíé¯ð`ÂÈ'^áØÞKøI‰Ù5Äò: Ÿ·Ü÷­™.ÔKøïî{?×ûÞ»3sóy•ÝcŒ-JãuX†þÛ1ÊuŒôôµŸS{–4`q¥ùh;Æx]ùÈ+cü¾eŒ±û´QÉž1ö§ÆÈ êîªÞîkc”ûÆ(÷q^k[ãÏ>ùÙ·Ö?ëZÿTÖš_±×‚sÓ2²VÂaI{1N„ÈNhþ“†¿•#hÀlóuŠð5g1E¢ ‹ ‡Ý‰H¥ ˵« Ë•ìÂrpÃìUº°\»º°\É.,ÉLž*DÚ]X®d–Xµs HUº°\ë]XÀW(ŸÊÊò‘®>ò¯2"_øšÙ•¼û*ˆŒpõ••ù‹ó™6æSáêoþUFä±&v®àTi¶ríj¶¾ÒøšÈÁÍNjš|ž™àú#ÿ*!þHÀ~6‰ mf…SmIPK‚ ³2[A[¹Ë4[~´˜mc) c‹hù1±ÏⳂ)wrŸ±”›±”•)âÆ2þ¥ñý6{_/§œŸ0cÙ¶µ·=ýÔ_fêD¨ºéRý² ®„w˦@®¾¢dSMïxãÂ)záô¾Á뛯ðV#ƒ—ñmv#âà5í¹›{¾ço…#½5|{ðN ÞT_± ®mLéB‰pF4áø%UÛ*Ê*˜{”8]Âó>N‘.wÝuÍêHá¢ÖÇ@Íp˜pÅY€õqäàÛíCªA®O«OôE¸­ôØà°õƒ§ŒÍèow(NgÛ¾vxЃVljÅæþñ–>UæÛï· ~ª ÀÓ¸UØåí ‹ ë ㊠|1ú\ݳSUù|ðãëþúó•™oƒÏËöƒ€ý‡eû£3³q\;:;(xüJà+çÙàcln–ºKÆy±] ¸¸qðÂm9²<‹÷k·ø®Yެc [_[ °Áy37‹È/þÖ ÿ-e/Ñ+²Ñ¨üWñîW¸øãWöÝøz8_áá«÷sÞ±ÇN?\Ò³”^ËOG¸Ø7xqóà×ÔÝŽ Þ¨öà_Ù2÷²3¡™~xy?g?`ðùß“ößò¶%¢("׈ÌA„Û«'ÄÿÚVû¿ŠÕþww÷…•ƒRNÕÉþ±ù“<|õ¨ÞR>L1Õìã+}0+Ö´1¿œÓü1æ$ÆÞò¿ëxÚk9¾Þ3à+ÔYŽåsÇ””qŠ/•)¾PSàÅàáú@xÖ´½_ýï[ÇìôÈ"Žñô§ßƯ.É8¦*#åàcr ÿH¹ [ÅøôW"ðl±Ûc¯wsàlâJMÍ1œî¼Â‹™Ä{‚­šz€3ÄRóA›¥ r`ÝéŽ\Åž3x¼#Ð8ƒ•ÓÅã 5ùwx1FƸo‹µ¶|\áåZo&qže¢r±ô£µÜkÌ0·9»ª°ç#ãÿÈýJ‰^Š' € lð*m«‰°ð5f8¡Uò=¬Õ/nc@ÄûãŒ]ÉÅ][³úC3<åü‚1»O䈨nðò¨L„Dߤããí½È’ÊJü°šHð ¿úîapª¤c:ãµ¶ãi(ù{¦‰Ìpû\|•¡Ø¥´ï!2³ËÖ‰àì2Ú0ÕCdfW•ˆCÙøÅ˜˜‰<:šˆ[Ù••Aõ„»Ø6¤‡È"]5"~Ü¿°¿59©ñÿMùó4®rK™žõ°gñdßZp\ãàßjú÷µ$S7Ÿñ˜5R¯P¯S¯š˜?Ïí¹?Wæþ¼ÎýBÍýR¥ŽÍ=œÀ“b¡þ^¡þ^§^5J®í¹_+s¿®sGtqš{Eýþ\Ûs¿Væ~]çNP¯Rwí¹»ÊÜÝ:wD{§¹WökÏÝUæîÖ¹Ô«æâaVö¬Åjn«]{÷Ã3f]cÅ8ÁÆ7ýúü Jdþíçšh?<¯S|¦¦XÙoº6õ‡k{Š×Ê¯ë ®nÄ×uŠWjŠ•=òa݈«D\{Š®2E·N‘Ôêæù€«ItD§ÞHý½B}‡š(ÊrV+'ÇO* V]î”Â=ølKÍS|•ï_,£!r8>”– ¤ïž$V’fÐáØì·ùدz÷ úùø¼òñBñ±Ný ÷®ÌTý¥9Ŷ»ÀïÞpƒ.¬õz&B ÚàÁ ç_¥DðÅRvjÛ$²º U"øe¥Òf¼’iáÁ¤Ö‰ kb¼gc±]vÏÿ&Ï.bY§Žeö#*Ô?qÍÒ†M}g#¾dÄ'¾XR25ÆúàUߎã¾]œ‰òãîÛЬÏU³î΄fÕ©ޏÕNöL±íôñàP5‹·áˆÓwH¾ÂŸÑi˸ì†W>N9}ÝD:œ>Ž;}©ØÕ‰´>Ž;}ýbw]ÅŽSbW§Žyƒñ ˱V½Á>Ž{ÕÖüWXX¨ÅàÅ>Ö§ˆjÖ%E÷i»œüîG¡+¥fSm¯ Y§¯÷< %ÿ 凨³sŽwÃíoi+PüêÝÉ­÷¦‹È·/U"Ïí5¹´áa(—ÊPžÛkÒ¯ž£]‡kR'Ò¶7ñ«æšÔ‰,kR#òÙfmÔD×áHPïpp°\ôi[ÎøÕ ÿ4ŒœšDvÕˆ g =f¸­3Ð Cá•¡ '5ø 'Êuë'A…‹ášÔ‰ôXák{MêD–5©A½g5XÉÄK¥½É†B{¦wlÕÀœŠ—ôÁ«Žmüê¥>“‘…]5"·ÂÊÈ©­qÕ{^áa(´o(pï9PáÆŒ2†°Iïy…ãDZÞ³À½ç©VÙ4ÅÖàÛÞsü —m-„Ð=D–Å¢‰HÊáÎxÑ á¯p%+»·Ä“"e”j]ÿ¯ðT"†`Ñô”FѯúJwc¢yff,1Ü$Òvc$åÆÀ5¹´áJVvo‰g"¤kR'Â{ˆ´×¤^õ•$îÆ¤kR'Òvc$~µ iµ+Ò4‰´¯$­c˜Æ›V´z…‡¡Ð~ˆ$Ò©–“ï!‚.| óeM:àU¯Oâ^Ÿ„Nù"m¯Oâ^ŸŒ¾ÒœçÒ"Òöú$^—±8Úäî·ˆ´Ãëw-ú;=S«®å W²âQI"q#‘®:ÞEÄ£ç<¯ùä¿vÁ«1|‰Çðo Òª¸'žêIHÛ—¸“œŠpHÛI–D;á:‘v[Ýùi(üE¿žþæ_Ÿ°GOQ§ þ¿Ëõføž—Å•žÌs<:dŽœâý>"÷€ˆ&‰<ì#òà;\KMe‡X-œõ-×r…+]ñ¨4‘½d;¥NðÞCÓR‹0ñÉÝï‚W]K‡áÄ`¸ÓãÛ©&‘vNS™&pM.m¸ÒgGI®ÉšÔ‰ð"í5é€W]K‡áÄx¥%»ˆ´Ãpw-ù ±¨m“HÛµÔT"\xÚwXáa(´¢q×2¬»äVÈ–k¹Â[DÚ ß¯º–w-El*¨§¨e‹HÛµÔ¸×ÇcÝ7? hi{}šJª€ ÏÛð0^ʵ½ðu"¼‹ˆÇÖÄqϦxH¼êõiÜë»H‡×§q¯/á:‘¶×§ñøk*Âu"íø«Æ½¾T„ëDÚ^Ÿ!¢mƒ .¥wFS „™®h›¡îªÃÁ{êÔ$Ò¾«vwW÷„ºû.)Férœf× wO–Ÿ¿I"èð¸òÜO%®p@%¼öÒ{ü ¿Fv̈."‹ž<ÚÚL𞌖ÏI -"m‡;~õЧ¶y¡ºˆ,Y>Õ™8”]<Æ'b-"Ü5ØåÎiÆ.\gùüõ_…È”«…%R?7¨·d»1ÅY¶kDNûè´*P°7× ´T£ ¶s:ʶˆŒp÷œ—4͈ µwÝÀø\ˆ°Id*ž[4ÆDx­ÊøÕ+äU\Ï/öfR ªµ[á¤D¸sƒú:Åà'Ú®)n†¨F1DyÌŒ‘=ÔG8n¶›u×Í6ÇÝæŸêªÙs~÷¤ñ&­’ñ©IÜ?©Á‘sÿ”ƒ¥y% +­\Ь<{ÐãÔù s8NdÒ :šáÑ«µX»ÇwÌ}‚ÓÔÿV©?œçœÙ¹¹Às…úóÊù ÅùK…óÏmÎ?W8ÿ¼rþBqþR›»ýÁ¨ë`§:-ê?uê? êÍu¯r~]÷ µî5꟔Æycçòï× õÏuÝ‘Óê4,ú°kwàënôÔt¡9ÿ¹®ûµчèÿ‹:vLLïáZs_9OPÿ[Ù ùÝ•à¼ò‚ù6õëÊyNqžW8%8/—¦ÍùëÊù_xŽhœ*'¬à=ÔêÔÔw­ûu]wþ›uçøºkfŸ­Íc…:_×ñô§aÑ…Ç×]'„Kœ:ä<_×!2­û#õ„£–VhfuõŸ:õŸõ¿õ€TƒóëºÔÿV_÷.Ä }–BkáÕmQß½µgB‡¶WxÜÈжÆ÷ŸŒÈ™žÉçFäLÏäÚ&Â+DzÂV×ë ÛcÑ•‰mVxU}5®¾"\­3òšD–…¯QDMDmD4AÄÜÝ E]LOÉ×ì^Š,eËxŸÃù©(b>L¹/çü‡A(ÑèÛOá«31ƹx=2F'sø8Ƨ|(qŒÅqð9¼Væ}üê…£™L*6F—ÃË:íÃ<Æì‡AyÑ2ïÛÿk톹Ee9FËt§×úZYë?]ký‡äc£"Çhs8ÂÇuŒ9Ó1¶ùxOð1H£ðÚ´Öú¾ÉG^Ó™û.>Þ| c”–£—9œäc#ÍÇû.>>TlÏ”Ð^Ž12‡#|œuæOÁÇMgºøøPÑk+)½Nˆ4ôúOE¯ºøøXá£Ö„΄3m¿²á]||¬Øp­|ÏÏÒT/c|ªŒ±mÃ+k­-iÃyÇMõ4FDrxu­Ï䃜š‹"ö‘›Ž ¥Ã>ž»ÆøDÚžxgl½¶<‡ã&†|¯Žñ¹²ÖNxjŸQ9WßÖZ?wñ¥²_OÇ tŒ>‡‹_í×/]zýBêu÷z}­èõK—^‡¯ôJ¯¥¤tÆåð0ƬyKXk71kÞ~°9ëý2nHï—ã**¯´³¡*¹Êá¸OAJG¯ Á+ÁààúÆ.¯”ˆƈð‘ä|ÿƒßj^#½9ŸÃů¼·.¿‡¯þáÕsŠÁÆ‹^2x#&Á:‡c|„cÔX>úøØ‚£ÍáaŒo—&Ø]Wo9¼G>p!ˆ~¨ž v޳Ƿ¤—KÏî ¿úºÏ¿¢ænr8¿£NŸKýÑ%C¸¥¾eŠç}S<¯S|¢¦øT™bÛÐà›zôÔeeŠ*‡£ST”ã9½C()£ghtßàa(d?~…j||þÍF£Ö_ ¶ðñá,—N÷i^2uwÁÛfsnìøöÎ(v¦Öd…‡™ä_¥D0ŒåÒwYfR#ÂÚ3yd4¶YaV#‚ÏDiﻈ4o2Ư¾Ð¤ ©ï"²šú*‘oœˆa}DVS_!¢;ÖDÓDzvÆø±&r•®:‘uMªDÚkR%ÒÞ~±ý¦kR%ÒÞ~]° ØÎÁ› Ž#W1++Ü>UÌŠ£lWXźˆ´mWüê ½»dŒ÷ÍdY“:‘ï}D–5©ùÁØÅ¤œM}‹Èr­Hñ S§:J]ðŸ:¼N­Ô³Ò²‰þS‡ÿTáb£.(ê¢ÿ©Ãªp½Q×u]ƒÿÔáµëdº¬ÔÎuz_ðŸ:ü§ÿCxûál$Ç,ºðw‹½à9<|}äx|”cœ0ü½ÁX;²ŽMqàÅ)â8ÿ]~_D!3!À‘™ N8´(?2“%•…üó¾õyF×gŽ•³Jƒî+¼s}æ/Ž ‘›Ög<GfÒ^Ÿgl}–™ëS þrÛúÄ- ×å¶õÉ¥u½3‘öú\ºôç‚®ÏF¤±>—›ôçXrè–õIoïîî—9p=E˜‚óúʾuø‰€Çf[þ§îIø=|Xÿq&áo8œûÁhƒp!ü“]Q¸‹ÍÔgøùJƒPs7ƒ[¥— ü« ÿ"áWvnÁÉÂ#ü»Wy©3ÿjþõüJÂÿcÿµÄæñ¿ÿHø?ö¯ ÿ÷„3rðnðøÂ9.6 œÓb#;à’†+‚uÜnV™GE³NSæÂ ÒágÝ>ŸYî(W°rÀ pCH¤nHê®mmòÒy~ê1V\ð¶ÆñŠÆÚgi;C}ªþT1Ԏ߈AxFØùc o9­_™üoõÀ±ZEƒWʈéÙ{½ÿ[ãórUóë×GÝ>7A-4²k–÷Îu"ïx y®zÖdÄû>F,õêcDЦéAX©´"©çpþi®$ty„û•?(ø3Kþ„ÛëŸ;ø•4¬k–’mõ)~á:cü˜Û$²ÄwªDÈ•S/¸‘µÚAQ 2p[êÕ68>”Ãøl¶Ný ×§»tf­vP'‚ÖŽtƒ6BõY Õ‰{÷àm×LF¸»6ˆü‡ÏDpÑEd)Pùøz_!òÈÑRcX±Id„»Õ™<1lყ2ת+¾=‘DžPO)ƒ_+ðï6ü»ÿÛ†ÿ%áÏèÜ\ÅB‰‡¹èÙS~mïøwþ]ÿmÃ鹿á¾Êv.;UÎe§»wÊՉǙú¹ŸìþÕdH>Î/¤Ð~’þùì§*§ÂÿÛ†Ó¬»àbá÷gZl.ènÂcBõxU«P°Áq"Ó6“ÿpLàOøµô\»Iý©Ný©J½åŸ7¨Ïp¤‚|òZØ÷°öm™àxùßê /¾E½Vš¬‡zÝ÷mR¥|¨—á„S¬ ç=ÔßëÔßÔ?±k8®ƒ»Û³î³ÃIRÿlPÇCM±«@hÏaP’ú¥A½î7©Õ©5¨ãÔ› P´¨ששï3¨WwªR¯ÅáD»S5Ý•7©×‹â´ô½]güj—Ñ¿®FŸàÐSƒ:æö»ÁÏ•š›ÔŸëÔŸ«Ô¿Zäû©ø ß›ý=½ÙK>GOìQÒpÕW8ÞDz.¤ë†õÒè=]ê§$_Ž)U"[û†*‘'â.œè!²6P¨Ñì¡· DôIÄ‹µFNÜæÍ# Ü‘’¶Á=x9v#ߨX.Âý¹oS÷ê 9goÒÚs Ž™À“bs"ÎéÁÀLíoëçôS×9ýt!cPSߺ]àHÍÙu›©œYxýlqº4‚HÍ1>íã¢ãµ1ÎÞ=>’zÿåáàÔ:ð“9³œŸ‚D~&WnÝòÃeÑK>xgPx¶ã»ÉøC”£Vuä%a0q9 =¾Æiß /د&×¶šT—·]×vüªémŽñ\c=P¼ÀiwêÜü.¿¶u¼ÎàfUÝñ+¢G‘šâÌÍ1>ïc³‡=Ý“—}Jµ4ë—}÷]—}÷'’Lènx=à~OÆÂ™ì#Ò ¿¿6ØU_Òû}Q¼CK|¡6whiQßu‚y çÎqÍMãaߦñ°oÓxèÚ4® A­3øaŸÆ>tiìußϵ"çcUøáåýœÿ0ÃïïNdätöï+Ôïïžp¸`ƒšRÐîéÊþLP_OF÷tÞ£n˜àôeÃýÝ'z|Êô«…ðkÎ+ðzð|üéë„ÿ%áFÎð»¿$\Sœ_N…÷E3󎞌T8™1 @TÇôñ+äý®¬7r,ÊÑ$Òl˾²Œ ÏxgRÖÌsEÎKÚLÙfÕ¨)º»|ð|üJ jüA·àÍ èü=w.œÎn;Ž%¼IäË ’R‹>½ìãÐ =ÆI¸jS|¤”T›a–ŽóûIýLê¸ôóú¼TàMã|®ç3q Œó¹r ~nÛösŶŸ)Û¾]$Ÿ+¶ýLÛöźž+¶ýÜN±=Wlûo›}–‹)Ct|<–ðªp`:Ôboð&‘Wt&&Øù±þy¥èÇ•ô@u1Êáø[§ös{‹=W¶ØGÛ¸ë`{ØÔ.–ðc oiîãçÊ>~¾û6ËÙ…†óJ¿,@[À@¸jÝbœ+áóÿ[ß{ÏtIÓoú0çŠpnïüçêÎï;æNÆ–Ï'\{É™Ÿ«<šKø/kã&¢ežïîØ#jœí0ŸÍŸ+/OžƒÓÔ·$ü‰€ÇâBn‚¼=Òp‰åq \[=Æò¤,àÇÞ$â§}û[mø3:Å Ylz½à—|¥~¡¨×ào8ƒ_rÀž+{o€céÁeó~ª#ß·ïô£Þñ+4+#L™KÛCdI®¹àŒˆ¢¦fIû{¦ùxmKZ?–ð&…A•Æ,b©DT‘E ¿Õ†ÿP|”Á[™àôù|ÇøzÒêÂhê²m/ò¦Xn:à¦G“—Â)I©eîð  ùWÇä«OLå¸bì`Ö$²hCˆk¯â££‰¸Ž1¶áqŒŽãŸ7¢™¯‘v|‘ÉžÅÛôÚ#²ÀÃWsÇÜá¬Z•?[ãØŠÊÝ£¦kôªõÔÕçYΟ`D8>”¦M{˜Í+{Vó¿Ý4ŇëüÒ+¾Tvø—öÉõ¥rr}i=_*GÏ—öÑó¥Â¡¼AòXSczËÔ¯5HŽ_Q÷e^wÙºéVˆ4Ñ/•CôKûýRq2_ˆ|ÛàG0?ú@øeyoAOêSÑ.×:©¯ðò–)8û‡z_Ä Þ$Ò»xõDýBdâÆr1f¬Þ$Òìg;~…ºvÁgâ¬GnÖ¢N„Èlu¢H³ŸmüŠÈa3zÎaké¸÷ifŠV/îW8>”ÖÅý ™*¹“]Slß¼¿ÜQ¥ÞL)ØM"틸—»ï¶¹º¿§‰ü´·<ÚÇ}i3^*ÁŒ—v0ã¥Ìx ®]sð®§ œÔK9…üuö±„7‰àñN/„\Ò(³LÄc oy% œSº›׆B˜! ë!²¥¶V‰àfAèIgfÁ­fÊdêÔŸðÅŠ»wÏ×ÄÚ ßZ¥*Ù¡¯wwÄc³õîîµÅzm?Ë­ø¸¯ûžå¯ð&‘½Óã—‘—"Tâ™SEüš¤­pœÈ¡ñÄøõŽNFš 7ßNFz­<̲g­;’‘^ïÈ„_5§Õ·ˆ´~_ïþR+Ì f¡¿ž>H"O(<} '³S~mïøwþ]ÿmÃÿVàÿÚð4œLqœŸ©wÁãÖ·oryŸ‰÷·ëóÝ×pô¥×‡89§ðs~mïøwþ]ÿmÃéå}%XçÎÄr"§çÞ|ùüZ9‘¿†³vãås€ŸOøµ ¿Và 5NsþÚ<¯ þÚŠ3¼VÜûÿÛ<ÙH2À¿È}|…¿>уÿnÃïïiø{­ßÀ¾VŽ ¯wœ¤¾Â9M]tÀ —pIÃå€-‡–W4ÜtÀ o¾lz­¼lz ÎgÓý{ô4uOeo8ë—Ó ù8h…׉œ:lÒÏõ‹„ÿ´—÷㋺â~ýÓcÿ÷‡‚S©ì1l&DÓA¾ïréTvi­ì†×½G:•‹±h“H‡÷xÿF-–‹úúõéOCžü[Öv£÷¥!¿µ Þ*G±·vFÀ[å¶ýÊtKáIxó²þ­rÛþFø\ü\ÿmÃ+ƒ—hªštbZw<‡ ‡7¦ØL(x«øFoä=Äz ÿV¹‡x#ë²$pšCÍ$€·ÊÝ÷éÜ8¯ ¿ÞxÆÆSCõz…·Æˆ_Í:î§Ð{•ï_yÿy‘ÑŸ’ÈŠÿ©Œñ«ÍàŸÊà©ä‚Õ{|«xPodr`ƒõœN.x#3è œÓÂ%Û–‹ÎMx£r‚Éßà††Qㄺ¥e³™ðV¹Ñ;½Ñ Çæ…£½“wjÏØnyß+{Æ;•„¶EÿÞ+Þ;±å€`À{eËyoG2Þ+‘Œ'Ö8;©LƒúzEFgº½û8O¿WŒþ{û4ÿ^9Í8ž<帣lJYÙ˜VxkŒåÔf°øX !ç›ü^ÙýÞÃöõHzáb†Ÿé1^Úð¿xóÿ½²}½S)pRz§ø¡‘·ÂclÖby¯Ôby'øÇÖïïiêÿ£Î‘1=m6$ßH8«¬Ÿ3¿M]Rfl9¿W6wº$õ²y¸§Y§ÉÁχà×4uÓÚºß+Û×;]ÚdÛèÒ&ŽNLú‘¤¹c oŒÑvpÈÖàßm8=E×AÝ=Vàu6, vêmNçò­ðÖñDzçŒåªu-¼ÂG9¯ÌãTã[v'kJ ®…³hÍq•óÚÑ›ƒ°KY9½ôi ~»Lu4#|‡¨xzŒ~ËSõÄé1žºŒ(¹Gž žR9pÍìÜ¿ýúÄS0Ó9WåC#1öýäöQwuGQ'Õä“öƒGö³â8f±Qž°†(½ŽÀ‘šßÓºçe¾cfúÒì{ƒç5¿ñ¢e™ïà:0Ás8Òé丰.uâc&‡ð/lîšǬkî_ûæþµoî_rЇ¹ú¸"ÅæDî½\£¬Kç~¢ú+ö‰Íév± ÛFGXgÆaa £s¼öŽ×#ÕÞNmsðïû_)Òß3ø ¾• Ý·p—} wÙ7÷Ëœâa,gJâ?ñ²þýú~º]ßÓ¹í›ûW}î_Õ¹?µ Ÿ•Á'°Èàßøß6œæü¥>†…f pâïìrxkŠø»5cœRDHçXÂDšA•ÏJÄá³Tù¬U>ñhà#·f\†j´…·ÆHñQò©Õ{ÈÊÇ‘fPå³Tù¼û@àÒÄ7Š~zŒV‘ ¶K½V®>Û1™ÏJ¼ã³“ù¬Äd>©˜ŒÊsۊɬpûi«cDƒÒŒÏ÷Ju"‹¤U‰4œêÊÞbWcÃìƒW mâÏÀÎÔ$Ò~ŽðI^´±û©p»fû¬„Ù>Ûa¶ÏJ˜í³rͳú«§ŠÆþk…šüý oFé>+QºÏ;Þç4\¶÷n:È÷Ù³}VBXŸíÔg%õÙŽA}V‚ŸíÔg%õ‰?MG$''ÇKx$âi"¾cŠžž¢ßž¶â±“*õe­›ªÍðOþôß}rPÎåpþ©žÄ9qK—ãîõzM°¾„»Ëã#´ôŒÍ] +%úVxaßï·³î‰xDÍ¥çc{5²ÂñGÔM8¹}ÔÝFÝQÔiøsmž´åÛ}Nר¬n±÷OÄYwÙÇÙ³|mP¿Â_W}êû.Ÿúþ¹=ÆçÊŸ×1>Sc¬ø«÷]þêýµ=ÆkeŒ×uŒWjŒwj7ÖÚµÇè*ctë5ÆJsWµáÒlzÌ/úzæ$¼ÙôøR‰z]ȦÇk¬õRé#zi7=¾Tš_Â!‡ 5ð^t«Nàç—ÊüŽž_õ£gÙ =…ÿmÃiê͆ϗÊyïÒ>°]*¶K»có¥Ò±9ÀÑTV>üûÚðùX›D¾P"F[£»ááQ š·2Xcy‘©%Ïw•Hó|{©†.í×—JƒëK»Gô¥Ò#úr':à‚†7»4_*]šOš¢& ? í›%¼I„4¦¤î†WFǯI ŽO‘EÒ*DÚ™/•ÎÌ_Í͹‚ðæfôUÙŒ¾Ú»ÉWe7ù"v°|Uv“¯övðUÙ¾Úöü«bÏ¿¨÷N[,â«òÞé+ØóK}Ý£¼Tà_m8=wj;ÐR+ÞÚVx“*ÚƒãbªÎÛ¯Z꯶¥þªX꯶¥þR5õkZꯊ¥þj[ꯊ¥þj[ꯊú",u"´åZáM"M!è€Wè×éO‡#⯶ þªØàï¶ þ®Øàï¶Gáž„7mðwÅ“ý™û®ØàÇ‹Øã´ÂMø±„7ˆ4 ýwÅÐx{Œ—ÊŸ×1Öˆ4w“ïÊnòݶçß[ùMÚsçÍx¡Rµç+¼I¤ÉÇ:‘¯"M{þ]±çßw?-Kð]‰Ñ·íùwÅž·íùwÅž·íùwÅV~“öœÇlËž¯ð&‘¦Ô‰|µ‰œÞH>úyyE™NoøƒµpӓʯJѹÞ$²ìLÈßjÁÚfû§b¶Ú˜ŸŠEý©XTígø¥ §bj° ü/ oÚÊVc]ÓVþT,ÌOû±þOå±þOÛDüTLÄOÛDüTLÄOÛDüTëïÝ“fhbãZÍYÄó'ˆf¬pÍŠ0Ý,ó+ñ»Çî±å`¤`£^"ÔùúDw…#AÂ.êÏí¹?Wæþ¼ÎýBQ¿Ô¨·çþ\™ûó:÷_RÿÁ¨ ã÷=Ô¸ZwQ¿¶9­pþºr>×Ë•:­°ñ쉔ó×ÊÜaöÄ/¨óöÜ+sçëÜó7œ+uúqg€ãs—Ü*GP‡sçëÜËN=ÔQ©c’+ßE}‘ºßP?Q k©ª¹85÷¸ªÌŸš»LUlNͶµ¹›;m©Sƒ°žùx6¬â¥­pkÂW¯4ìh¯bø@Lå1¾ëDfªBÄÝ…Ã5^ƒãà‡1%ÒÝч뿧àsÓç+'áO\N^Z þñvGÃÝØT›…Qˆä>²îНŽÉWå#²cXk§ŸíÛÝ÷µBäyã¸C´¬9Æ¥þH}Œeá²£ãcáÑ?pÿ>âƒÏáøLcÁ:²¢Y€?SB0‡HÂß½T8ôÜ‚x‚K…Áo䥞‰.u€’j2Y«?ßUà×6œ^Þ 9ø`k'ø}…úµ½>¼ÿ¢án†ÿTá͹ÿTæþMPö‰Íð·{šúw[¸:àA¸ò¯ pýäf3‘×ïIä§mDɘL€ ŠCs|4À=EÑæPÛÁ–b°¥ì(ÙaŒØáVaƒwp¨ rôZãnÐÖ¹û6Ãiûö{Ozp·‡¼þ»<\“¯‚ú¯v­¢ÛVÑÝ¾Š§RÎùøú"üÝï3¹ŸÚ® ¥}p¤mí‘ü‘Ñp×TR^‘¡?„q\ÊŽ d×mð «;‰,õ³+Æîí B››^•?„2)§Ä¨Luý³i¢3M5ùã:¦X¥ÞžâéîŽzOºÈã©Y8¡U ‚9äŒ)¶U4õ Þ$‚H­¼VSKä¹ð±„#Ï…×N[äƒÝ Þ#–³mT‹÷Œñ½>Æ÷߻ƈ_›„í‹Í7‚u"_=Dð.:,ט¦PëB°Áq"‡¹ AeŒxq÷ Ìv| ÜüR¢¥N³¢\Ä–X¦‡ÈV¬–&rj¼ör':)1Â1Å™bÒBŠY#‚VnêUÌÓ>Å<Ŭ‘h•Õ§˜§Å´-xsŒh¤˜·s²qÈ¥‹qYµ¿F䫇®ý‡Ní?í¿µÉ'Z;@í¯ ~ÓþªT5Ðþ‘f©êðÕj[–ƒY¶e*—/ÀïÛÆƒø8ÆG0Qâ$ùë¹cüØ*>?À¹?àƒÁ¾Ž½Ç¿K›×Bô0%¬³;9RƒãSì¦>N‘6î­*YÅ#Âñ¢õ‡ÁY5¦Žœ*¡üÞ$òJ¨òœÚýÚ òÚEêæ›J²¿7ˆ¼wA2­/1?D>{ˆ´mO¼ÖV&|E—™2–‘K…È3!7qMí$7—õUnêD¨˜ÚÎìëD^»ˆÔwu¤¨í±„7‰ UiÃMèùÉ{Ègº‘vÝð 7Õ¡à{VìÎ5zƒM"ËžU#òÒH DN"/mê€Fœ*c|¥K•ަ !› Ex{Œð±Ýï™#Þ,v°“Ç*_Ý¿ ‘r(S@ Fýà`Ÿ]‡ŸŠëðÖ>wY§|üK…HÓ•­ùê!Òöó:àî¹>”ÆZ7‰,1ž‘÷ö’޿КõÞ±³_Zð¸³+cls»NdMÀ¨ir»NdávÈqßÄͶö•¼ ?µ³N•,‚S³ƒ˜;)²ƒX„7׺¯ ‡.ì©5Åû3í¡_Û þ©pèÚ±Mý0Þ4pÅ[¹c |ä>^›‘K‘–mùê!²/ p]‘1 Pc[œëƒ_ĹN¤eºD¶®Ø4‘ï¶^¿ÝÓD¾Éec–bc¾×e@ˆLËÿOW•žSgN•Ô™ÓݵÍ9¬QcÉÔ™ÓCà"ú{sÁØÀ™Ñ¬c¤ i#»á±ê7£9$ÈŽ|¹†y´M“ä¹pƒKzŒ²cŠmxœ¢¤§¨I žR‰#M1pSãf›i)¿ôÑ<ƒ7«_Z'BÅe´Óù:‡Kx“2 gßùè['òÞC¤C"Úð(•¡Øv”’,háclÃk½ÍÝéô§ç~ÔPDN÷=±LI»cdøôÞ¨æà/ì•„·}I[qOm_²îžlÅ—<µ^ʆ)’/eGøwË—<ÿùCÛΠåµÁ/VÅV„SÛl¹ti9ƒ "_=Dv9ƒ§Õ´”3Xc[ëƒ_ä±N¤å 6ˆt8ƒ§¶3h+Îàé{ß2¬Î ¥œA[qÿ¼‘ƒ÷C;®ò§#˜Q9Ãÿ¹ö¯ï+ð¦^YÞ{rîË…`þ’ð6õšp]Éþ·Ì¸öÍå®Þ²î~ô8pìUPçî‡ö#¤‡Ê w8<ÑñʌݳÑ„#gæ÷A-ê˜U8Ê+?‡té—?É뤇_S¯¾Nz@_'…/‚+6ÂiޱãuÒC‹:>“CãuÒCûuÒCåyQ€ï“ŽçU:.”tÔ¨7ß=TÞ=´#†•ˆa€ãs˜“L·çþ¹Î=ã:÷Úà/í¹ßWà×Ö£©‡Ê«§ß7÷ë:wNͽF½ùæê¡òæê¡ýæê¡ ð}sÿZçþCͽ6øfõCåÉÖCû5ÕC%$ôpÇI©›Ožì‘ÓÔ›±*¯©œâ¼•¼ƒóbåü£ 8_£.;/+ð}ƒ—Ûà%5ø*uƒ]Ék.Œæ‡ùé½Ë,Ï·~ó|ë¡ýþê¡’Ùþ€>NŠ>RŒéöà—ÇI¿yœôÐ~ôPyàD ¤ïü Ïæ‘} ë.žíòÑ>8åüRÂÃW×Í5ñq4|ùágs¬Â±ÕI…Âÿ–‚y?›sÿGœÀåØÛ²9÷Å·AˆOÚ³*O|ŸÂÚMa-¥°Uêÿðl §XëìÆºÛ_l=´_l=TžPø>Ö¹uŽb]•ú8댦ͺåõÉÃožr=t=åz žru/¯Û–×ýby}ÇVæIŸ:|ú)×Cû-ÖCå-Öñ‚i,H4•ºbu½`z ^0Åò3b™bmŒ»^0=/˜Ò)V©wLñÞ8´/GLUvókÂ;Z¸¸£6¦»ÚÆ´Á©énÛ˜ÆmÉHÃ8 ß"n’ŸÀÛæÆô@Ì]8aÇÆ]ø¬r8>Å|VëÔPxº÷†I’³ÊáÕ)žÛÔΕÇ6gòM·4¯ã.«–¶Etÿ oy!\+>>3´/ "/]D^ñ™pÎætî:‘×."âÁN5'/ "—."_„U™¾úe…·ˆ¸¦YaÕÅ’1[%2Á›Džˆ…gJwëïUÎø{70&æÜß‘ö{•øÕc—d^ôáîÚ B¥ïyÝÅ®e;©iÞØž+7¶îˆûøôÐx:³ÂŹöúDÒƒßÄ®:Æ'‚|¬^‹SÏá8‘CãyϹý¼ç\y`à4ƒuƒz¬èÁׯøD;ÚOV8=Æ.êÕ'Hçö¤så½Ê™|îLW¼úÜå|÷ÌÞëWFgvy{'‰4_Ëœ+¯ÎäË 0ÅxõeÆ™|4ûð‰È©Bä¥=ÆxõÑÄù®yc{®ÜØžñ'©Eg¯¯ð‘ö~]%²êuHs+í€WŸœÛÙúçÊ÷™ÌÖ‡ŠÙ†W³õÏx¶~ʈ:‘v¶þ¹’­¿n÷u"ílýs;[ÿ\ÉÖ?·ïÞÎŒWá ýs%Ý>À ¡gjúJþ oi T¼ú$àÜlx0ò‘ÞÕ¯íUü©,C3¯â\É«8ãOWÉ_áH*{J¤u´j¹ti­D¾zˆ´¥¶Jd•Ú:‘¦ÔvÀ«™ÿg<ó?1ƒ "íd¯s;óÿ\ÉüpœÛÒ*¿p›ÎÖZá "©1j;,¦úî/ §üå¿÷¬»¿äLþ£s¯ØìU³ Mä¿ö;àaŒùWpŒŒ°cBlÞû³€\B„Q®„Ó«ÈQÑr•ʆÞ$B*ærüë€WŸSœïx;ê÷Èi"²•˜~®¼‡ð>Jzðrãc…ˆî˜¢¦á¦}ü£ü¼iU*™ÿ+¼I¤-*mxõ¹ýá\yEàkm+Ô7FT‰´цW_:œï\#MÄwÀý ŸzÞ‹sÚ¾~»+­ÂOs(”ýco½…ƒx=’zº¶}:Ñî|j{™5oáÔö2+‰é+¼îÊžÚ^fƒÈ¥‹HËËlùê!Òô2ëDÅliy™=ðê“‚ó©íe6ˆtx™í'çÊ“‚oî•7+¼N„Î_·Z˜¦’ïË_j_D>U."ŸðJ™bàÆ›v¥ÌÞ$‚ä³ÞŠvA¾§¾J™ªoŽ‘¨+å”ËEdÈkü‘¤óœóFì(ǹ›cü ºÖjm;]#òÕE¿mÜ\é»A仇q'3x¿”3«™µ¿E䌧±©YõÕÒ Çë‡öP¦®t¦L˜.¸«+P³æçSÅÀ=‘5?ciêÀÄÔˆì21»j~®ðæñ„Š0Ê1¸šP±Â›D:ìXÈk‘]vlWõÒÞã»åì¥AäÒE¤ÃXÖˆ|õé±c"ÀŽÕˆì²c'`Ç,eÇjÔ;ìXîZŠßܸAN6¢I¤¨ñtWy™?VF‰’ȪVƒ5|®ÕÃ%¼Id—±ü³ÏûŒemŒuA<éë)»f[“W¸xÊîÃÔXiÜžŒqŸëðÇu-ƒ»Dôز^ÍNŠ_u}È&ô´ØQ…}¹ü|¡ û>áÙI½…}W8ž„„gþ@x3óç©’×àTõR¹eÕØS ŽçÞÄÿ9i:_f…·ÆHˆsWñá~Kñác oŽñJeP)jÍ1^i"³šTÆøØª$øýƒ¤þDÝô.që˜Qt­À¿ÛðoÞÞ4è|¦Þ$Òt,ëD^»ˆàŽeðm³ðò oÁ / íÚ…—Wx‹H{©q]k²Ïi{Z6d(=Ô›N[||ÿ_cD}ÿÂ_öçpñd>Þ>³ žlò²ŸRY[ÂÃW‰íYZÔÆ 2¨0,þ:OM¸AI=øÆX’L%¸FáÙ­Öêo$ëˆ<Å-Ñð©’§á×6üZ·á´t<·mÚ¥"6Ï«M«iÚ´:‘×."M›V'òÞE¤iÓêD>{ˆ´mZ•ˆëZ“}6íyµiʦթ7mZ¼Z’<~µË¦Íp|(“Y¨Qi +´·ýÒ‚Sú*§ _ÛcüiW·ÜºÊ³Ï¿™ïzɘ?ƒíæoÒ¤“&énWïÿB^0l!§=ÙÓ½ÄBIÐÍ-¼ÞGºØx„W™T¿â¥ð/ñ+þ¢ ú©ý|btÐï‰,ˆ>sÊÒÑÀ>v¾Ä¤ª^ËL.«˜”Õëè¦àKðl‹¾Î|‘byÉ6~E«Ë}|_ÕDzv¶¢š”àøHÈÎC¸Ý‘¬é|ÕÇYž¡çšBSFíj „~‘9ínú_q¾( q¦/JLþ´±]ãÆöË!žè>âúb9Äê¾Xæ^Ï1p­ª±2“É!VfRuˆ•™Ôß68Õ³%N…$ _qx<¸§Ãc‘ÉŸäñ=„<–¹×ux1WãDåjÌ¿u™I=WãTÏÕ8r5,Õ|ÍVKÙ¬Ð|·¨ù “äü¬sovâVd²Ïúèºh˜³´‘*zÜ®ø]÷+úXÍy9r^Nõœ—S!ŸÄÁ¿kÜûã7 G…@­‚yµ;b‚ûÒØIucñ:Ç&‡×f“!µZ†>¢ ýjˆÕÇ=N…Ç=NõD S!èÔ?ê²Yêü£.›¬0óª­_H'‰ð*“Úu{…É}“š)Zaò\Å„¸ylÃ3†ŸVTž&Ÿk˜Ô—\q$qÉ•™üi‡Ÿ [£™¬á^ÝáK 9ˆ~¯…‰ ‚/çr ¼’Ð’ÉóoÚy^“’P]_…>>ÿ¦8ŸQqþ’{õ+®€_ñANðg]ÁѸ§zž×©¨uª§` 9T'0Z•#Ðh&¼³ Â79¼Â„Ó}œoè·jü³§gH;¼Ùv.x5Ēκ²ð,è i‚K}\!ç‚–s‘ä¼4’¿É¹Hr.$¬Ä¹œËSþ¨~EIO°¢$XlÍW4¼]Á½-Áë  ¥§ŽzÉÈ `ý%£¯2¡.åXX®ø’Q„W™e»áV_2Šð“‹©ÄĬÉßS›SK-¦"wÔ4ÓvŒÚ¬GºÈã¸,ò¸ÙvÜ4±„ᩞ@y*$'Zø IÓô÷ÑIÒŠL¨û>>§/&—ULêâ\dò¾Š þ&µix®ŸËL>Ö0Y±fJL̪oò·5£ÓšÑÔš)r'Þéá W«áÖÚ.M„Y±4 ÍĬX×uøo×uGß ›i†:’{ýå³b¬èp"_,o„ª†< «Bž†¿…²sOCÝeXÈ Žð*“šË°Â侊IÍeXaò\Åä/.Ã!º ËLêbWI»2“¿¸ ã[xè“wk¸×œMkàÅœòÓð_=Ô›~ö÷44µg‹®”×jeÅb`Ôë õZÞz«Wª÷éµþJŽß×UŸáµ7̼‚nDgР–“oÎÜø¿À.§­ d@ÉŽ”6?Áñ›·ªžmv}ÝáRÈÚ­J›ßõucc¼œÜk[Qå [Å×0™êýÆH&ÚéÒ5x9?o7¬™®*¼œC¸ÖLW‰ÉŠÂÝë&dÎÖnUÎÖîTaR¶2w ¬ßý-°~÷·ÀúÝßëw纤‚„w«‚„wD°=fI)êßçoA»K]: Á­»¿·î®u}Qˆ¾Ú­ŠNÝ]ë_q¼Ò¶»Ö—r™ÉŠh³Ý{I!Ìi·*Ìi÷¨~“ÒõnUÁîQÿ&…ëÜݪ;ãygÜøÜà*“wÆ»g}$…óÛnÕ½éŽt±j%xÕźû›‹u§ëC,8«v«œU;³bˆ´·i÷7oÓþo›äþo®˜ý¥¾® ¾”ý*_ʾ¾®KÇÊýª£þ¾¾®×ÀË'нÆÊ¸àá¶Sú‹Ÿ·Ü„ççŽm׎ð³l}´Ž;Vx~+¾uá`wXu°;Ô?CI;V}ºZ É)˜È«‡v&롽t[_ûî\8Ïœû¡ùGøÍÂëiçBçÏäsàñù\xÛÁïTçýKž~'áçÚû±çƒÏNŒÝl Ÿàÿh8&ÁlkŒö>ÃuðÑ.¥öîs¡úè¦h2ÇŽ$“+ 3Ÿ æØÏXq¼hÍû÷zikîÜPï3j£%n!ð¢uãZýà÷}i"ÊL¦‰ í´s'×bgúîs!j6ÂieçàÿêpZÒ>ýÛsô+޶ó»/ÎëšàÀiM îs¸¤¹KJ†˜íjx.C›íhRdï3º×†õ N¼Þ) “k¸Ç÷%-\ÕG“Ï…G“üå"UÓ )ZÙµ+àm¾âûÔáùgXÌnÎÕ"í¡3€1¢¦—_á\oªœ Ϙ:x}‚ÉcÃy¨ë`VÐÁ‹Â¶?Ö-áÿjºƒÖ®k=Ê7‚ ô°&Uˆ‡ÇJ:¤ ôèw\ kÅÊn j ñÎJêF¦c=$ê·¯2¹V„ë#»T˜\V0Ù¯™ú3TK = %…øKhv‡æ2”gÎ+mrx…IµDÈ£P"äAÕø°½lüµéÁ79¼Æ¤>E&q"JL®ä‚ ‚aø òù–›q"ŠùÇ^eB\ívíô¾"}µû¨ç׸×>+ñ´bˆÕTÌG!ÑЩÏÐ>ÃåH‹Ê-~†2“?}†[*´‰§sÔ¸£Ÿ¡5]\ å!žV ±šŠù(¤»=¨tÄùgè }üH«¡ÈäOŸá#­†#°d㣯 U¯õ±ú±îžÒMp…”¹?ê_‘•àõ¯È _ñ¿b™ÉŸ¾b WÁº²†{õû”‡xZ1Ä'¿kóÚ°¿ûU`à–ÉW‘ ¿+¶ ÓfgýQaò±†I]"ŠL¢D”™üI"žQ"¾(‰(s¯JDyˆ§UCD_ÞJð†×."¼Â䳺úåuW€Ê´ëtõ}·¯2ÁcµÝ%ŽªëϘߊte wü[«¶ ûÂ…h„W˜O¯‰n+tÐáôÓk2mpå UÓkÜk3TÈŒŒð 47‘7[ÝùâÁÎ ð}dôbb©&|EyN.&­¦×¼8ÝGg™I}"ŠLN+˜:Å­ÄYà+ú(è>ŠÔÇYKå|²ø,|E%ÝG™úX`RM´pµ#áÕTA o pêÜÞŠñ¦´˜†á#zˆí ¡/11똜Pý8~­—Ê+}^abV̶!áêÓù±†GýL\°†º  û×P· /pEx•É_v¹!Úš²*Ük ¾@á&«V,ÿ×ï›kùV<¿mŸÃ<:¤óÛÂ9ÜԹˈÿéOÍOùR=ÖœÃÏ,?Ûyò"â§¿×áôMÂ=458}‰ùÓÿ×É î‘@þ×pYÿpð†o×$<„rX¸&áÃ5öùw¿‘ðk}êhOæÏp£Ä&Éüûð¦Å*Ö¼l…lUŠ¢6dÅš7=õ*YÓ\xS€ïQ}Ì÷™Jû ¾Éá&§¿ ñ‡râéH¯ù]¯2Éú¾µãk§g;úÏG ŽÄ­âƽaJr±†ûÇ#$_*±^éãùoBpŽBp§fè^ä^‚{AÎQJL:Ä—-cbLx® QÅ!Âp†8D:ÎÁÁ÷(÷ŽuJø!"¿ áU&è{TJ16EÍ•™œW1A*4n¶öSI+þ]aò½Š ²ç¸Bϭດáe&Öb$Ä®aMø&—9’ îÔëŽbÂzƒÖ<ÛŠ–sŸåßgñ›nX!Jõڣ¦³V¢wø}…É~4,¸m´ $Ùäð"Ñ¡ßd«5“þàêVöËK® ܶžïËV~H˜sß}áKs-ÇÚ=VGôœ*¾ácùЬž€t+ƒû¸'úÈíÿ Er‡p¼+5î7ˆŒ{¨¾›J¨Ó%üdÝ ’–À pD:´=«FTKøE8n6Õ¹£E+¬jd Ö¤m•·Lndø®¤ÞéqáZm5S"ÂG£à>Äw¬|¼5óykº©d´U69‚ª®<„Û>Ò&½ÄK¨ÛÏжdðð&‡W™ŸAÊ—Jìq„W˜ÜñÅ$”kÓ=.&¾¿5×ëà{t)·J­YL÷¸˜~ÉÿŠŠÇ¯ˆü.„™(ê¥RµåÌûì\j/ŸáFe­æL^ñ Re-|œ:—†‘L|d LVŒ¤Ääg“ žÖ"·ŸÂaélÓ·LhOŒ"ž{qJ†µÕŒØÇ_ëÜ©`ÜèP…`\ ÇV¬²RÛ™1"Û®™÷58ïÛCsC:Ï{=6¬e[#MgL×à"Ï'åD˜¹‘6Blu‹Âç[€°Ga¾fì覵rÞñiìûœï©±ï+cpjìûÊØüWc'VFÛu!’Â79¼Êä‡X~ºcáÐî&?+˜˜ÊHøû>Îϳ¥ýÓ˜‰ðˆß`Û9> …¥OÕnµh»‰¾%4v3„p7DS"ö†€“†©ê 5«Lþáó¨ÍøÐN1) Â+Lºb§þ‘Lº4]]‰ÉŸ¦«KÓUdR®,Ç¥i!Kxéd•û0Ô·è,I2‡íÓ êrgÚZLsWŽm-Vþ…Ý{«[K„ÿnk™ÁWo-|+ _¨×f;v¾:ö=¶­JÓ UÝZ"üw[Ë ¾zkc'¶–µc?ã²Ùv¾ŠÂ9ƒorx•É&\Œ5¾ªpÑŸáE&¡™5ìšéz2_ãÂÑ5>NDgue‰;jWnU+âšj“Ã+LºTkdÎëÓ»œª¢Àz»±ÇZ•ÁkLbÞ^>Þ ¼ë{.1?¹Ùr©”?”  組p64ì~Y´’c* ;BÂKtO%8`­Ü†Ñg„Í¢óoxç• :¯§rH n;ÿöõÄ; óo¡óH+×ù·Œ:?‚œyk6A8ÞÇ1z„ÿ®ó¯´Ø´†žy á¸t¸n¡òá¿›WZl4ÝyÁ!œžù¡0ó¯›ù9óB·tç%„Ó3ÿZ˜ùÝßf~G˼‘tç;§gþµ0ó»¿Íüž˜ùÑ…'8%ó ÂIUÉKªrÿ·™wp"¬Ãl™":Ï „ÛÎÿ¼]qmƒ Üv´ c—?¶B-Q¾5¨Ýµ'x…É5Ór¢ÒÖ&‡[&dœ÷ØŠ‰œFRfò³‚ GGbÂE;Eùñ;ɄǑ…¯ÆV?襀6\©ŠÃ0Á‹L8õv¹°Ê}*PEVÒMðŽÓuÜÆVÄ­ZÃy /3ùYÁ„JìpÙAÜÃùI-÷ý ¡;­* N‚T¹ïQî­+*R Ip2¤Êý„/̦•|5||wº'¿"ád· SÄ‹4ro‰pÛ•ƒø »‚:Ù­4kÞÕ*­™¯2iq&¼íªFE„—™ ×ú¤5r„[&wzÍ ×ú¼KL~V0ÁV[½²&8ïÛ#u«vlúÅ¿òè$™Ám«áey'b&BøÝn¶²Õ¦kQ8Vxd$,ÕeÏ]ZñPëZíÑZ·ú'8ßS3´¯ÌÐtyFÌо2C ŽÎо2Cûê ‰ž¨¢ïÒtÇËçRýïDÁ>q­Ê!|Ë¥ñ•Cìy 4)ÁóÒÌv"Û¬óf/>"\E©ª¿ãêµãËú^™¡ûªz¶h£ü T&Ï5L¨ÝÈøÝ¨T^+Á+LîuÚï$“{(Øjɤ:]e&Ï5LªÓEWîIð"‰¯?+צ1Ó“¸ô7‰ð®‹;¶B_ÞdR­XòoëOÖ×_­ów|†:^€«ÌÐ}Õ nøŠë/ÂkLp;mmýEx• {¬´¨G'x• A®„ªj#¼ÈDQ[“5Ôd×Ö–F„wªÂ„ª7Õ1z¨0Ö0!K7úÔSabÖ19#iñÞå&‡W™oÏêV˜štEx• ‘®™ikÒá%&üÔ39"ܪÑ8;5Cÿ¨Á嵊]iný@­x³5ÝKù™ƒonâ =Ÿrb —£àC{Wç>¬âÎÉÎ? îŒo§WÉš" ^â~l豸‹:÷awzìºþÝÉºÖ ^â~(Œ]׿{û°Š;=öx}»Õ¨E™÷ð_Ë<ͽ«sVq§Çþ ¸3æžÖý@‚ÿVæ Ü»:÷awzì]ý»ºS þ[™ïêß½À}XÅû“Ôó»gšv“ÃîÞBnž™îmû°Š;=vBÓn˜{¥ù¥\Î2ÁKÜi™îMû°Š;=v]ÿîäeX‚—¸ c×õï^à>¬â^ybÅMcG4í&‡ÿZæiîmû°Š;=vBÓn¬¦Õ„¦ÝäðßÊ|{[ç>¬âN½«w¨i79ü·2ßÕ¿{û°Š;5vÕïyHñjöâž ÞMãÿÂ,G‚¹KÌáâ~x% ï†&þþ&¬Æ¤íìñöäÿÂŽRn¶ gÊíë”ËÞó—2Æä&óÇ1¦gÚ\¨æ~=,Ñcy¥šû¿ÛA¸rðod†ôGsÕ ÎoïÍ%¬ï^ɰ^õyœÒHÈòvPxLⱓbOÓM×y!,ËYJ3àó¾1?t"Ìd扣ìù<=%º˜¸{\clnN5=œ=¯8Ûq7‚ˉ0¿]j;]=ø”ÞÖÊ­ä¬ëôDx[0WL£ð0󬱧;#|þàH˜}^n-AÓåpsyÌ&ØeÍù`™gs».£«uÛæpñúú€áS³V `µ•Ò¬™`…Mð¶kù˜4 'X¸×Õ Ülçþqd‚eÇPø$ÚÚªFv£ÿ-›àvËÃWN° è”ÈØ+Ül [3Á->Á˜Û壄@á³ÍÖ¥ÐIB‚' à3ÝÑYAe›`½U¦Íá«'Xt ;=ÁvŸøè…ÿ‹º=飆ÎþCǶvíZ͕é;ÌS~‡Ùn! €H»rÓßðêg«Æ´©Üƒ'¸«Ûƒ–ó·6ÁÍ”à{Š»h+wÌ îêöü‚ûPìü¬UÉìÅûê[ͷ“õóR‚Ä©£ýÀ#½µÕ‡j¦Ë¤ërW2ƒ»VÏlõ‚‡+·&ƒ_Äë~¾©[Å7îl"½G„³¬ÕK9P¼}PcWÌÚ(º6öÇ߯þXŒ]`cÿ(Œ=ÂÙ×oÆþÄãÌõ¶m ñÝí˜&m•àÙØÇV/D°4ƒp;Äe8yû#@x)}”|ˆL®âÇ߆˜àѦ‡øQ¡âØäØMGˆö|ì¿ý±;!ÚôØ#ÜŠö/ÆþÄóüìØuK©4;,áù²v­¨±·n‡¸ôLâÏtvwc“æÑ/üCöü¦ œrÙj“Z9o J±»R'n°‡FÞùDÜOðc1¨—´Ž$W[OØëañ MtwÍá{³ô`² ~h@¶ ˆÓm®¸& ¨­Dà±'“ÝÖçÆë;K88ßr~W2tV¾³Ú_wÙáq€“‚ÁA›WÑ–ðXvÞn<-×ziX3îá!dðAìx«·Ýzº¾ ~¡ÜÌkÓNï“æ\¶Ž`&?€‹ UÝØª [³%xî®X Ÿv`©=¼] Í^ Ó ]P¹ØØV“h³n.6{ñ|‚®í¨øóí< ÝØÊŒþÏæ ^§÷V¡ÓyçâΗy€Ò/™ƒ`÷÷*ü(Ž—å‚m½ØœùiYf†ÅâH3¸kõ¾lå &žù>±Åàç%üÅ¿bm W°5o; þX2á[¥'Â;pë2nÄráÓØMÖùƒƒÎó­»èw×êÌŸÅñ6ù½™ÞºW¯Ç(aK8es÷2vAͼ%,ÁvrŒ.àgÈ„îÙ'чL‡ËÔÐVbc,¹«m¸ƒ'·‚cð%×Ê Ç>œ ?œ±À\™oÇS,á „–o‘±Ës&›~…3ß"N>5qOS§Ý…—“'ÞÂ>™—fIà²ÃºV˱ë1n~ôœ”ùÙ)&)TOx.¢ÌüEܯ‰iù~¿ò°”6.ẜAèFQzÞµj§ëá~Á^íÞy„*8ƒÿˆËd_13ß&~Äu"­ˆ©c={ž#Ó.£&Â0m~ž :~ú×#ß lÚe˜|¬@™kÛ*š©Òo¤~ê,áô/˜œ·VUt±ß~»<§V|ô”ç‘°Ñz„çBËqš—_fŽî`ÛܲbCv+Çõ>$0ZD‡·É΄½Jìõõs’W"ƒïÒ»"…Ñ8±„8uÌÚj~T<ÎÓf6vKV¹[þßdDðv&ól§ŽåiNä6­m•ÝR›íD`N±gñþm)vl¯‹XƒM›[•ì8›`oý…±Óœ i¶Êþ{Û!ð4ÁM·mF¼'¼ß¦nòÃg3Ï]ŒÅ$´G8óBäµmg^4j6óGÁ&i~1É=û>m˜ºì“Dhðû„g¹,áö”ž¯÷cöá¤[87ýÏ8 äð3tÚ¯;vþ?Ü‹qÛ„Õ"×uçôáüºQ¾š³%¤OÒŒ•N°©;‹ûaR¢-+/6çlêÖùL´_ôÖ²7Å¡=gê¢õS÷Ö¼N/nZá„¶ërUù–ô¼”zT•ZN„a:WšQš‘©{›Ë¼šÉü[šºÐ+ƒ¬÷7ñ*Çf®.ÞÄåP=„ÚVÿ-Wþ»¿eÒü‚,™7u¾‘S¤#€§mó–}8³õcϤÓó«m}4Ú8Gà“7CSô%é$ígÞŒaYŽpûfã?œ®FF¼—™Ì[³ƒá2IÚæEÛNº¥áá³¶“$<}w)ü«ÔZBÜaÓÖ‹À÷q±‹¼¦Ñq>° ”f¼²º ºN!pøÝùh”²KöÝÂýšt’líZµSÔOHjHYÛf ¯AàË…¥,sá ÿ-ÞKj‹˜FWD'ɉ «ô5Ó6ÌËü{ÇFº’ŘI<¶šÌvå®íEº÷¹¦•[…ž&Ø{›¥uñ._åkpõ ÷7S<ÿp®Õ[håÌöÖx·ÏH¸OBKn‘ïò¿ûÛ¤Pí‰Ç0­üØÕÛUuš´Í{6óLâpNÐÂÀ6áž2Eàa)óÞw1²TS ~dà.&€–Ãgb#ضmeëO3±±j¤Q ›$6L[ËÊL¦ÑÇrç¶?Ò"Šú,«Xü÷!Oü¸pT7,û²dôDÀ—Î8ÜÆ·>¨ëÎüË–s&øÅ‡Û³°•5úò©»'m³\2÷ì&@!;ìL°;3n=áöd5?íØŠ³püîÏ™4þ€×åcfÜ•õ|ξ¨–Ô‚}ŠWuFNÐì3q·’¸µÇàNæßýsÉ]¸ÔKæ yΣÒ!pö˜yõ¸´ðqƒþLÝJŽû þ•ú¨šffU~ͺ¥…wäií¯ÖoR_ËnùhÍ þÝ<ŽÙ3½ã›Có öÎÞd…ܘœàSž„²ë]¸¾3Þuá4Ñ€€§ñ³"ðûõÛßÙ/ŸþVÈÅŠmçð&ÌøÝysa|š AImÅÁIןaól‰f®Uæ$ðgö~Q&¢ë²T\6hÕ¤ðfŃ¥ŽÀìOùÀ§CN«ýi‚ap±€ÛóPr"hSà®"1;€«ôœ:ŒR*‹¹ R§¬Ø<À]Æý[Éùù]¥Ä&îÞ‹v„\]´öûì€G³ ð””Þ¢ð凳ëRz¡‰ë½£¡¶•\ì„"ÁÕDè‚ÐbÜí3N,Áı3?vŒ;˜yç¢ð0óÚÖÎüÂÍÛ*¿`ÛYJ™ÒÔ¶MÕA8éjà êu÷¨ãx?sût2I#Dã„Sn^ÞÏõq“vKH^HFel«ä·:mмç±[›–Úãx/^§ì)åœ&“Ú—;P‚3ú¥øv"pèÀEáK•Ƶ‡Ã#gwk½!RÇ{x̰Ìó©šÇ"žzcgyû¾(甫ӵš\¬U³ïž|ÔVÿ³pEŠÀ“ëÃZVrO¦‘Õž¸®lLZKxìÞ€3 ëüçûdË™·ÐþÛÉ4vïûÎáö˜Î?Ôw^L¦¶U{ãmtþál«0D»àF‡¨kŽ[ÂiâNf®Õeú¼™-™¹ƒ½.)xšàVϧN°Ë±f”òAÞ—¯4m|ÔÏýó/¹‹›ïg†Y7»²„hQ3-)©ÛÏNºræ-´„åùýÅRUç÷ gf‡ë;EÚVi½w3“˜ï3ŸH“'|×å†zž;û"Žn”Á]«ËBêäh”ò¹çSzž'7<š»Û_ÙâÌ+Ój|æ`wÁb¼;ò°â8â`çs{°A¼¢>²ïËb÷êd—9FÇØ†ÙÎϸÛ%s¨ùç]«Çõîüw?ÎŽ~ZKX.—JÙ!ðÿæ!Eñra$L~ÀÆ[-›º¯8ó¡•—ùc¯ ^™äð´â®K€ZÌjÒwB&:³¬NiKn÷8Þ-¸§Ûe)©Ð×*.k=»ƒ¶ý¢°ÎßžWäþ}ÌB®k›“€ÒíÖ—j,ª¡ÂØíFº\qṫ÷¼—Áà·'( ¬‚£ê-òd­ÊØž2@nË‹ln{`Jº.¥¢o#WÜ™õŸO²ÒzBºD¶áö8©8ðÛÈ ëγ§;j‹<‹xÖdrv‚¶„(OÜ œàgäØÃ¿¾EºV fϧwìæGBù#ÍïØxÍ>fÏΣ–¥»ÒwK†#ð´¿{£4(êÇlëmÊ dT7ÄZBÜzÓmSÿ¶¢}]^=y«òß,âÅ~Lƒ[Ô?Mï…ÖbÔ¨*Íx3¨0±ÁnÀ]΂9ÃW¼`É RæŠÚ¶º-òþ7!pÂ`Až›…¶Õ÷qÑJùƒ˜`C¶Ã ;/·c@¬P [­8èc±„%wwVÈá`â¼øÆòb/™¸ rº/e2ÙÉ Î¬ž!Z†8¸ñ +ï ó)ê{€n‰7ùlžç~b2‡6Ÿaßè.Xê™ÔÉÿš)×±›ÁS²Èx•‰«JùÝü|î§Vó÷/ÌÌ~7ƒÇR+\M3›º¦é—õl6ˆßƶ–å<‚A.{¡¬8²ÃJçÅϬ~O¸_—p•++Û ÔÜÑ>XÈn  óë|öÀ‡’£ua `T.a/‡èìÌÀ¨ìŠ0üÆÎÆè>Kˆ£bö˜oR’Ã!ZË•yì|—+jÛ tÞõÞ@ç] -·}ž>‰5˜3›VЬóbÔ´RdÜÿ¼÷ÆsŸo‘!T©ËÅFÚŒ}Ü&¤Âº•ÁUÖGṫ¬[È-°m•úhn4߯×fò„„ëHc·Èh×Í|•Ò°$6 åp“]â¾™»}Ô±9öK«ÉRg«‡¥m3ºy•Ó´‡Éj¡ö8å”Ê7˜!ಠ9€+÷<Œ´žpå†ÛF9uñNºQU*–u qyÙV°ò‘·mƒÜÝ í–DòɤŠÍº¥)W§R°AU*¤än¾A#e›¼²r0§|‹qχ¨^ÐBO,W•J͆8)5º0šƒZÆ ÖEËჟ¶ÍÊâsžFZ« Y´ô„û’ð‚Áe–OÉ|ç­uTòïîZ-‡h·²vôôd2ß!Üó2`Þž·Ø-äZǶ‚}ôѼŽÀŸµïîZÅÎÇ€eOsŠ´]6ÁzÖÛ„â±dp¥e `›ÀäÆVß`É0O€—-òݯ™pÅ™¿ç¿‹Àt¼„¢é×Ù¥…»ã¨A~ÍŠ›ó©Váº%î"]+`ým5ó„(=Ã{þJGëÝ}ްÄÓºVjàÔÅ;ç2T\°Cè;kY"bãJ…-™„³Œ#< ¹‰Â?Á6à—Ï×ÿÝ­%ÖùËgœy—^¡øXîÊ–Òli'ÑnChbë Ih…{–=¼Ï, ÅÓÕ†{–8³Gköxp›´' ï?à‹(¾Ô6b2 ?€Ô¹àHÀÔ1Éì ä¿#öüMiÑ;:.ÑÎÓUƱy²¦%Úy 6>#Õ–ßÝΜ<ϡ]ùö…²RI-[Áãó„;¼ÆUØØ£ØcE›‡¼HKjˆaÇÀ;â1 †¯C¢ûl+è5ò©xÌ$2ó÷ä[b¼™í°wè1Ãüu¶Uî’—Lþ¢@LâçlˆšÍ òg6*Žœ"ŸÙ™·mž³QÙF‹ÆçåÛE„ÃQ!qVú3¢O`·h7 ‘¶ø¼FyUù9»=fág6vŸnã ÀÁØ[6uŒ!QÜú3{†2ø*¿óã?r~w¹äfÄôVÓö³í »É­v“2ž#ˆ²Z¼ßµIæ-ኀk~=²Ã:‚ìA-0¸ê'«dælt„¶—J×€»˜¸Ç"àSìDà—Ï9M8Âr‡eH‹muÝõÀ| 3Ëã3ÍB ¿_{À<À?°VÆý Öx÷õQ{vhúš³Ñ¶º,;|ÔùÛš Q•¶Õ²ó¼ºp„ì ›að¯1‰-a÷öYó˜ÙV QútGˆ)‹.Wÿî¶•šÕ[“âi¡ýF)Öùè†v›ˆU,áøúZóºV <¯›fþm—¿5 çÃØ‘ÔtÓ#äôáàb +#hGh4 ¾p„ko[ Ü ÷2®U”:"ØCçS²(™i[}e‘|"p¸{åp˜x*U˜:y]&}`6­m3R]ìg¼›0ûlÉ`S··¦kŒ¹ ÆàQ¡v:Ý:‚&ÞKX»ç³mbŸtÝ YuÁ¶º.Ôú° Å¸A´ÍÞ=Élæwdj¡m”U‚=±=ÎÝ`€îÂØBŒÇ ~‚Næå5XÚUg#¾û -ÛÄi&´d!2׊ƒpo8Â'ðU¢ðeî?óé6ŽsÀ;C”r­ZPÒ¹›¸·`-!›Ôì!Fa•U3;(Þ®ÐÎÃÛ@¹ [f¥Pî0šM.¯!Â1xVƒÇØaçÃøø¨D"^FÂb‡m‘(nìíÒ‰û­7¬ˆE}Ê.<åvzËfZ°1DMcðe¦x¨å5 Ç©J‰ÄÚV÷e9›à ·üI«[}¦©ÞÂüQSŽ„ëØV >qͽÐf':lêfêBŠ9÷¤.\†±Þó{XéM£s³Û}¥™güÀïHð€#È/`Ï£ðöØâD À·¯³ÐÝÖ~Ù ïÛC=¯Qî·ëL|ûýú0oø×ñštR2NÎ rGnÍÖ|pEt&£j<Ÿ•öð!–™èZb¢ Ü—ˆ×ȵZf&N‡ÐGRÔLR)䮕ZŽÝ—òv„¥ççnf»ŽÆÉ£É‹°qUeì<Ð#®L,¿ƒVA]<Òzw¥”ŠN¤ 1óÓôï‹ð{¨q­@9g5ÞÒ¥C‹Omõß QO„;8*UZrxÂA^gGC|—±­¦R뢛2É<d&º§Ü8¨åªëXÂíz…®4‹f©mà#Ü’[ß—L\؇'Àëaì(ô“tKö1qÅ5É•¨r¡màö aZŽÀaØCà·å9N³°<,~Þ0–Ürí,áňìŒx‰DÊ"µžß;D ÚVðV±÷Ï[ ì2,Œ4j¶dºyçgoÜÄtÚüùâÈô1Ï«ÏêÏß²GåÃ1·ì½wìyš[z—}ù8Î-=™NWˆµ­âÓæËGRnéÕqº\Æø&=ÚùçªÎ?©Î?WuþIuþ¹¦óÈCã>¹ô¾öâyš¸½ñÚy‰£F¹ /ûÌ6dyäe²8óñ51Fê:ä9°6¼íš=áÅöáâ\Œ‰¯ ,CN¨Ë˜ Š)&Á^é«.ôrÊ5ÂDñݬ˜¥å«.̸Ç4Ý<û~¾¬uÚeÜuÚÏd/jªó.¿ ĥćñU£ì=.=V Ý¿ïúgÿÿÿ÷?¯Qâ¾Ã:DyLP-1.10.4/Data/Netlib/scsd8.mps.gz0000644000175200017520000010762510430174061015334 0ustar coincoin‹¾K®9scsd8.mpsýQ®Ä:Î¥‰¾Psˆ 0²å°ýXènà>Ü®ººqç?“»ãcK\‹KôyÊ“Û_rIa‹¤(1ÿçÿø?ÿ׿ÿü¯ÿíýïÇÿoÿ÷ÿõÿû_ÿý¿½þçëµ½ÿüýÛßcå÷/å÷oK÷oíoK÷·¥ûÛÚýmíþV»¿Õîo[÷·­ûÛ§ûÛ§ûÛÞýmïþvt;º¿ÝßÎûßÊûþ·ÒÍK鿥tóRºy)ݼ”n^J7/¥›—ÒÍK鿥tóRºy)ݼ”n^J7/¥›—ÒÍK鿥tó²tó²tó²tó²tó²tó²tó²tó²tó²tó²tó²tó²tó²tó²tó²tó²tó²tó²tó²tó²tó²vó²vó²vó²vó²vó²vó²vó²vó²vó²vó²vó²vó²vó²vó²vó²vó²vó²vó²vó²vóR»y©Ý¼Ôn^j7/µ›—ÚÍKíæ¥vóR»y©Ý¼Ôn^j7/µ›—ÚÍKíæ¥vóR»y©Ý¼Ôn^j7/[7/[7/[7/[7/[7/[7/[7/[7/[7/[7/[7/[7/[7/[7/[7/[7/[7/[7/[7/[7/Ÿn^>ݼ|ºyùtóòéæåÓÍ˧›—O7/Ÿn^>ݼ|ºyùtóòéæåÓÍ˧›—O7/Ÿn^>ݼ|ºyùtó²wó²wó²wó²wó²wó²wó²wó²wó²wó²wó²wó²wó²wó²wó²wó²wó²wó²wó²wó²wórtórtórtórtórtórtórtórtórtórtórtórtórtórtórtórtórtórtórtórtórvórvórvórvórvórvórvórvórvórvórvórvórvórvórvórvórvórvórvórÞ祼ïóRºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]¼[ºx·tñnéâÝÒÅ»¥‹wKï–.Þ-]L[º˜¶t1mébÚÒÅ´¥‹i—oû¿ý_ÿßÿ÷ÿüŸßÍÜ¿Ö_l»\Ûº¯Û?å?¯k‡÷öß[ùψÿ³×Ûã¿§ê##FF)+6²LŽd½v¦)I#FF)Y'GR¯}ô@JÒÀ‘QʆÔÉ‘l×® %iàÀÈ(å¼ÂK`äÂÿ©J #õ‘€#£”½7RþSÿBÉ¿ˆø3L—ýgïYåùï¤üûÔ…ïý¾##5§ñEñŽdÐh Frô—ÿ,ëçï¡ópóxœµ.ûåŒÞÿ¤ÿ©uÿãmˆÇï¿øï)ûïF2«q4R±F#MáG?Än$g¯qýÏ_¤ºìûÇýÖöŸ³Ÿã¿r¾ïßÇõÇï~6ë1~þlüƒw#™Ö8©P£Q&ð³â}$åÝk¬ÿ)ËZÞÛgó¸ÓÇmÄûy\þžXïxyÿ3Äÿ=eÿâ÷‘ÌkŒT¨Ñ¨F‹ñöÔ qýÅI«Vh²LÅy#WqÄB]ü29’‰8"oà*ŽX¨‹_'G2Gä\Å‹sñȳ-Ìé,w¿0ïûaÎ{qò _àSƒÆ—Â?ÁDì:TZX´xª¼€#£”ãál_¸z#Ž`M~Òãá[[¡FcMáÑHNë,,[îNvañØÉâ±Åûh%4¢x h4¢Ñ~²xlq>Å: ‹Ç–»^Hqa¡çD.¼……úÈÀKP"iR½m÷‰ñl.ÔGF^‚m’&åÔå¿OŒ— TªŒ¼AßO {…ëÜH¾x ^áúÈÀKð16)EŒþ™}ñî_³O6oàÀÈ(eÑë+-Üþp\½âOZ6¾ã…n_ÇÅåA£ <ɪý=Ý‚ÿáx{ûÒH w¼¬,&IhDAÐhD£ ¼¬,&ù{ªêø“n ýp¼åri¤›Rw¼T#g4‚ ×k4ªÑb¼T#ÿ=µé|ˆ&]?'4—FšòÝñ²±œ-£$]^£Qãec9Û)T²OÅy#WqÄN]ü29’‰8"oà*ŽØ©‹_çF2Gä\Å»sñȳÑ2Ý~sñãS×@Lï.B@þ/¡‘ã¸(:h| ?ÕF²èP‰uÚ½‹UÞÀ‘QÊúp¶/\½k0ƒ&?éúð­­P£1&ðp$UÇ:´,²ß}ôÎâ1Z”Ù½ñXB#ŠÇ€F#Mॲxlw>Å:tÓq¿ûèÅctËsq„Ç2A<æ5Õh1^6qÁC9ïcÊûæ\y߃:Æen$3Þ7oàÊûγ¡ï^u9îží`k½hsxÏÖˆ„Fô‘F4¾^ [#Ž©üœ{~~„{&pžÅ'4r—wÅ>G…ÉD¬:À G`û0$oàÀÈ(¥>œí WoD æÑeñð7©ßÚ 5ÓhG²=üú/\­P[°Àž ¯PÛÃU´bF4šÀËÆV¨3.ž(—wNù¬¼€+Ÿu:€bz­ð¼ûƒ“ÅcôRã 2Fe4‚€Êk4ªñ㥰xìtþ½µôZÅy÷'û²è¥ŽÓûðe%4¢Oh4¢ñ%ð²_ÖD.HK§ç=<Ã|ÕÎ3Æ„FŽãBµÈ©+ÔH&¢j·L: ™óÎ;oàÀÈ(e{8Û®Þˆ-˜G—1Âßd{øÖV¨Ñ˜F8Iy»UìŽÓ‹Ï Ç—ŠÁJâ…ìà§4ú-x Ñ¨Æ—À ÙÁ/o·ŠoD/~5_ªWQøB/ª‡gÎŒFà1‘F›¬ÂV¬Ñ{ÌòžÉ;èăã#›"ïp8ËN29޾Šü­Bd"6éÌèQ§†÷‰ƒsyŒ餔¸°P‚s"^‚ÂB}dà%(‘4)º U8’uøÌ°”¤€—`›¤IÑm¨Â‘Ôñ¸”’4ð}MŠnCŽd7ê¡”¤€—àclRt*zÔ©áÿü?M°O6oàÀÈ(Eߥ…Û†ã¢è…³²q³ÂmFã‹â¸¸¡‘㸼+ö9*ÔH&B·¡¢GÞ'Ø> É802J9Îö…«7â æÑeñð79¾µj4¦ÑŒdy?üú/\¬PË›/pγÁjZ#^bœF#Mà ëuUj\>cD¿É´ÆÅÅ¡¬/b$›[EÑî8»øÜp|©¬ô!Îz]¥4‚-x¯Ñ¨Æ—ÀY¯«ïSº½øÕp|©j\EMà¬×UJ#ð˜^£Q/³^Wß§&ª‡ìÃññxQ=t8­p&4" 4Úd¶bÀcnSyÇ, ';²)ò‡Óì$¡‘ãøè«Èß*Ôˆ'bÑm¨øQ§ $Þååé¤|âÂB Ή\x õ‘€— DÒ¤è6TáHŽá3ÃR’F^‚m’&E·¡ GrŽÇ  ”¤€— èûIYtªh$Ë{ܨGR²F^‚±IÑm¨øQ§Þ>Fzl*oàÀÈ(Eßå…ÛŽ‹¢WüIËÆw|¡…Û„ÆÅqqyÐhG2qÊšnÁÿp¼½}i¤€;¾Ð“à (¨h4/ô$øßSºßúáxËåÒH7¥îøÂz]¥4‚ ×k4ªÑb|a½®¾Oé>R<éúá8¡¹4Ò”ïŽ/¬×UJ#Hº¼F£-ÆÖëªìq‘B…!ûT‘7pGìÔÅ/“#™ˆ#òF®âˆºøun$3qDÞÀU±;<-Óí7_Xg£…™Þ]„€ü_B#ÇqQtÐøøR‚‰Ðm¨øQ§Ý»xP奬gûÂÕ±ó8øhò“®ßÚ 5ÓhG¢ûHñ²È~÷Ѭ×ÕB‹2»÷Ñ KhDñÐhD£ |a½®¾Oé>R|Óq¿ûhÖëj¡[ž;ˆ#|<–Ñâ1¯Ñ¨F‹ñ…õº*G\ðPÎû˜ò¾y#WÞ÷ Žq™ÉŒ÷͸ò¾‡ólèû£W]Ž»gcdzÑæðž ¬ è#h| |a½®¾OMäç´àxÜóó#ÜC0ó,>¡‘㸼+ö9*ÔH&B·¡âG`û0$oàÀÈ(¥>œí WoD æÑeñð7©ßÚ 5ÓhG²=üú/\­P[°Àž ¯PÛÃU´bF4šÀÖ몜qñD¹¼sÊgå\ù¬ÓùëÐk…çݰ^W ½Ôx‚ŒÑÇc  òj|ÅøÂz]}ŸÒ}¤øµŠóîX¯«…^ê8½?_VB#ú4€F#__–àËšÈiéô¼ç‚g˜¯šÀyƘÐÈq\¨9u…ÉDè6Tü¨Ó ’9ï¼óFŒŒR¶‡³}áêØ‚yt#üM¶‡om…i4Ó‘,o·Š‚Ýqzñ¹áøR1XéCœõºJiô[ð@£Q/³^WËÛ­¢ÀÑ‹_ Ç—ªÆUÔÎz]¥4z 4Õø8ëuµ¼gª‡ôÃññxQ=t8«pf4‰4Úd¶bÞc.ƒÆl8>²)ò‡³ì$£‘ãøè«Èß*ÔH&B·¡¢GÞ'Îå=0p`¤“RâÂB Ή\x õ‘€— DÒ¤è6TáHÖá3ÃR’F^‚m’&E·¡ GRÇãPJÒÀKô5)º U8’mܨ‡R’F^‚±IÑm¨èQ§†·§Ø±©FŒŒRôPZ¸m8.Š^8+÷8+Üf4¾(Ž‹ËƒFSx4}ÊšnÁ7oo_8+ô8; žÑˆ‚  ÑˆFS8; þ}J÷‘¢ÛB Ç[.Î6¥zœõºJiA®×hT£ œõºú{jÕ}¤xÒõÃqBó/¾Ò”¬×UJ#Hº¼F£-ÆWÖëjYâ"… C–©8"oà*ŽX¨‹_&G2Gä\Å uñëäH&∼€«8bq.y6V¦k8.æ]8;2Ýã¬×UF#ÇqQtÐøRø'˜݆ŠujxçâA@•7p`d”r<œí WoÄÌãà£ÉOz<|k+ÔhL£)<‰î#EË" Ç%‡ÑG+œõºÊhDñÐhD£)œõºú{jÕ}¤ø¦ãr÷Ѭ×ÕJ·<Gøx,£Äc^£Qã+ëuµ¬qÁC9ïuÊûæ\yß•:Æer$Þ7oàÊû®Î³¡ï]ui8ÞduÞWà¬×UF#úÈF#_ g½®¾OMäç¬àØp\–ù¹ÃiŸÐÈq\Þûj$¡ÛPÑ£N ïl†ä¥œgûÂÕqóè²xø›œßÚ 5Óh F²¾~ý.V¨õÍ8çÙà 5­/1N£&ð•õºZj\>cD¿É´ÆÅÅ¡¬/b$›[EÑî8»øÜp|©¬ô!Îz]¥4‚-x¯Ñ¨Æ—ÀY¯«ïSº½øÕp|©j\EMà¬×UJ#ð˜^£Q/³^Wß§&ª‡ìÃññxQ=t8­p&4" 4Úd¶bÀcnSyÇ, ';²)ò‡Óì$¡‘ãøè«Èß*Ôˆ'bÕm¨øQ§ $Þååé¤|âÂB Ή\x õ‘€— DÒ¤è6TáHŽá3ÃR’F^‚m’&E·¡ GrŽÇ  ”¤€— èûIYuªh$ë{ܨGR²F^‚±IÑm¨øQ§Þ>Fzl*oàÀÈ(Eßå…ÛŽ‹¢WüIËÆw|¥…Û„ÆÅqqyÐhG2qÊšnÁÿp¼½}i¤€;¾Ò“à (¨h4¯ô$øßSºßúáxËåÒH7¥îøÊz]¥4‚ ×k4ªÑb|e½®¾Oé>R<éúá8¡¹4Ҕ¬×UJ#Hº¼F£-ÆWÖëjÙã"… Cö©8"oà*ŽØ©‹_&G2Gä\Å;uñëÜHf∼€«8bw.y6Z¦Ûo.~aVzdzwò ÇEÑAãKàk &B·¡âGvïâA@•7p`d”²>œí WoÄÌãà£ÉOº>|k+ÔhL£ <‰î#ÅË"ûÝG³^W+-ÊìÞGƒx,¡Åc@£&ð•õºú>¥ûHñMÇýî£Y¯«•nyî ŽðñXF#ˆÇ¼F£-ÆWÖëj9₇rÞÇ”÷͸ò¾uŒËÜHf¼oÞÀ•÷=œgCß½êrÜ=ë$³Ò‹6‡÷l`HhD9ÐhDãKà+ëuõ}j"?§Ç㞟á‚ œgñ Çå]±ÏQ¡F2º ?êt€Û‡!y#FF)õál_¸z#j0.‹‡¿I}øÖV¨Ñ˜Fx8’íá×áj…Ú‚nôlx…Ú®¢k4¢Ñ¾²^WËO”Ë;§|VÞÀ•Ï:?@±½VxÞýëuµÒK'È}<–Ñ*¯Ñ¨ÆWŒ¯¬×Õ÷)ÝGŠ_«8ïþ€õºZ饎Óûðe%4¢Oh4¢ñ%ðu ¾¬‰\–NÏ{.x†ùª œgŒ Ç…j‘SW¨‘L„nCÅ: ™óÎ;oàÀÈ(e{8Û®Þˆ-˜G—1Âßd{øÖV¨Ñ˜F8Éúv«(اŸŽ/ƒ•>ÄY¯«”F¿4Õø8ëuµ¾Ý* ¼½øÕp|©j\EMà¬×UJ£÷˜@£Q/³^Wë{¦zHð7ÕC‡³ gF#ð˜H£MVa+Öè=æúžÉ;èăã#›"ïp8ËN29޾Šü­Bd"t*zÔ©á}âà\Þ#F:)%.,”àœÈ…— °Px J$MŠnCŽd>3,%ià%Ø&iRtªp$uR|Óq¹ûhÖëªÒ-ÏÄ>Ëhñ˜×hT£Åxe½®Ö5.x(ç½Nyß¼€+ï»RǸLŽdÂûæ\yßÕy6ôý±«. Ç›¬Îû œõºÊhD9ÐhDãKá¬×Õ÷©‰üœŽË’"?w8Íâ9ŽË»bŸ£Bd"t*zÔ©á}‚íü€#£”óál_¸z#Î`]“óá[[¡FcMáÁHêûá×áb…ªo¾À9ÏW¨ix‰qh4WÖëj­qñD¹¼:å³òF®|VuþÅ:ìZaÃñ•½Ñ˜ÀY¯«”FPyF5¾Îz]}ŸÒ}¤èµŠ†ã+ Îg œõºÊhDŸÐhDãKá{ðeMä‚´tZïùª)œfŒ Ç…j‘SW¨‘L„nCE:5¼Oæ¼óÎ802H©ï‡³}áâ¨o>>cD¿É´ÆÅÅ¡¬/b$›[EÑî8»øÜp|©¬ô!Îz]¥4‚-x¯Ñ¨Æ—ÀY¯«ïSº½øÕp|©j\EMà¬×UJ#ð˜^£Q/³^Wß§&ª‡ìÃññxQ=t8­p&4" 4Úd¶bÀcnSyÇ, ';²)ò‡Óì$¡‘ãøè«Èß*Ôˆ'¢ê6Tü¨ÓïòòFŒtR>qa¡çD.¼……úÈÀKP"iRtªp$Çð™a)I#/Á6I“¢ÛP…#9ÇãPJÒÀKôý¤T݆*I}õHJÖÀKð16)º ?êôÃÛÇHMå¥è; ¼pûÃqQôŠ?iÙøŽWZ¸Mh|Q—&ðp$§¬éüÇÛÛ—FZ¸ã•žOhDAÐhD£ ¼Ò“àOé>R|[è‡ã-—K#Ý”ºã•õºJiA®×hT£Åxe½®¾Oé>R<éúá8¡¹4Ò”ïŽWÖë*¥$]^£Qã•õºZ÷¸H¡Â}*ŽÈ¸Š#vêâ—É‘LÄy#WqÄN]ü:7’™8"oà*ŽØ‹Gž–éö›‹_Yg£JLï.B@þ/¡‘ã¸(:h| ¼–`"t*~Ôi÷.Ty#FF)ëÃÙ¾põF¬Á<>šü¤ë÷¶BÆ4šÀÑè>R¼,²ß}4ëuUiQf÷>Äc (h4WÖëêû”î#Å7÷»f½®*ÝòÜAá㱌FyF5ZŒWÖëj=₇rÞÇ”÷͸ò¾uŒËÜHf¼oÞÀ•÷=œgCß½êrÜ=ë$SéE›Ã{6°F$4¢h4¢ñ%ðÊz]}ŸšÈÏiÁñ¸ççG¸‡`çY|B#ÇqyWìsT¨‘L„nCÅ: ÁöaHÞÀ‘QJ}8ۮވ̣ËâáoR¾µj4¦ÑŽd{øõ_¸Z¡¶`=^¡¶‡«hÅh4WÖëj=ãâ‰ryç”ÏʸòY§ó(Ö¡× Ï»?`½®*½Ôx‚ŒÑÇc  òj|Åxe½®¾Oé>RüZÅy÷¬×U¥—:NïÀ—•Ј>  ÑˆÆ—Àë|Y¹ -ž÷\ð óU8Ï9Ž Õ"§®P#™݆Šu:A2çwÞÀ‘QÊöp¶/\½[0.c„¿Éöð­­P£1&p:’úv«(اŸŽ/ƒ•>ÄY¯«”F¿4Õø8ëuUßnÞˆ^üj8¾T5®¢&pÖë*¥Ñ{L Ñ¨Æ—ÀY¯«úž©Ò#ü ÇÇãEõÐá¬Â™Ñ<&Òh“UØŠ5zYß3y=ŒÙp|dSägÙIF#ÇñÑW‘¿U¨‘L„nCE:5¼OœË{`àÀH'¥Ä……œ¹ðê##/A‰¤IÑm¨Â‘¬Ãg†¥$¼Û$MŠnCޤŽÇ  ”¤€— èkRtªp$Û¸Q¥$¼c“¢ÛPÑ£N oO±cSŒ¥è; ´pÛp\½pV6îqV¸Íh|Q—¦ðh$ú”5Ý‚o8ÞÞ¾pVèqv<£@£¦pvüû”î#E·…Ž·\.œmJõ8ëu•Ò‚\¯Ñ¨F8ëuõ÷Ô¦ûHñ¤ë‡ã„æ_|£)ßßX¯«”FtyF5ZŒo¬×U]â"… C–©8"oà*ŽX¨‹_&G2Gä\Å uñëäH&∼€«8bq.y6V¦k8.æ]8;2Ýã¬×UF#ÇqQtÐøRø'˜݆ŠujxçâA@•7p`d”r<œí WoÄÌãà£ÉOz<|k+ÔhL£)<‰î#EË" Ç%‡ÑG+œõºÊhDñÐhD£)œõºú{jÓ}¤ø¦ãr÷Ѭ×ÕF·<Gøx,£Äc^£QãëuU׸࡜÷:å}óF®¼ïJã29’ ï›7på}WçÙÐ÷Ç®º4o²:ï+pÖë*£}ä@£/…³^Wß§&òsVpl8.KŠüÜá4‹Ohä8.ïŠ}Ž 5’‰Ðm¨èQ§†÷ ¶CòFŒŒR·³}áê8ƒytY<üM·om…i4…#ÙÞ¿þ +Ôöæ œólp…šÖˆ—§ÑˆFøÆz]ÕO”Ë«S>+oàÊgUçP¬Ã®6_Ùý œõºJi•×hTãKà¬×Õ÷)ÝGŠ^«h8¾²à|–ÀY¯«ŒFôiF4¾¾_ÖD.HK§õîNj˜¯šÂiƘÐÈq\¨9u…ÉDè6Tô¨SÃûdÎ;ï¼€#ƒ”íýp¶/\¼ۛϣÏÑo2­ñEqñF(ë‹ÉæVQ´;Î.>7_*+}ˆ³^W)` Þk4ªñ%pÖëêû”î#E/~5_ªWQ8ëu•Ò<¦×hTãKà¬×Õ÷©‰ê!;Âßp|<^TN+œ Èc6Y…­X#ð˜ÛTÞ±ËÂÉŽlмÃá4;Ihä8>ú*ò· 5â‰Øt*~Ôi‰ƒwyy#F:)Ÿ¸°P‚s"^‚ÂB}dà%(‘4)º U8’cøÌ°”¤€—`›¤IÑm¨Â‘œãq(%ià%ú~R6݆*Éö7ê‘”¬€—àclRt*~Ô釷‘›Ê802JÑw@yáö‡ã¢èÒ²ñßhá6¡ñEq\\4šÀÑLœ²¦[ð?oo_iàŽoô$xB# *€F#Mà= þ÷”î#Å·…~8Þr¹4ÒM©;¾±^W) Èõj´ßX¯«ïSºOº~8Nh.4å»ãëu•Ò’.¯Ñ¨F‹ñõºª{\¤PaÈ>Gä\Å;uñËäH&∼€«8b§.~ÉL‘7pGìÎÅ#ÏFËtûÍÅWÖÙh£G¦w! ÿ—ÐÈq\4¾¾•`"t*~Ôi÷.Ty#FF)ëÃÙ¾põF¬Á<>šü¤ë÷¶BÆ4šÀÑè>R¼,²ß}4ëuµÑ¢Ìî}4ˆÇQ<4ÑhßX¯«ïSºßtÜï>šõºÚè–çâe4‚xÌk4ªÑb|c½®ê<”ó>¦¼oÞÀ•÷=¨c\æF2ã}óF®¼ïá<úþèU—ãîÙX'™^´9¼gkDB#úÈF#_ßX¯«ïSù9-8÷üü÷Là<‹Ohä8.ïŠ}Ž 5’‰Ðm¨øQ§$Ø> É802J©gûÂÕQƒytY<üMê÷¶BÆ4šÀÑl¿þ W+Ô,p£gÃ+Ôöp­X£&ðõºªg\ëtþÅ:ôZáy÷¬×ÕF/5ž côñXF#¨¼F£_1¾±^Wß§t)~­â¼ûÖëj£—:NïÀ—•Ј>  ÑˆÆ—À·%ø²&rAZ:=ï¹àæ«&pž1&4rªEN]¡F2º ?êt‚dÎ;ï¼€#£”íál_¸z#¶`]Æ“íá[[¡FcMàt$ÛÛ­¢`wœ^|n8¾T Vúg½®Rý<ÐhTãKà¬×Õöv«(ðFôâWÃñ¥ªq5³^W)ÞcF5¾Îz]mï™ê!=Âßp|<^TÎ*œÀc"6Y…­X£÷˜Û{&ï ‡1ŽlмÃá,;Éhä8>ú*ò· 5’‰Ðm¨èQ§†÷‰ƒsyŒ餔¸°P‚s"^‚ÂB}dà%(‘4)º U8’uøÌ°”¤€—`›¤IÑm¨Â‘Ôñ¸”’4ð}MŠnCŽd7ê¡”¤€—àclRt*zÔ©áí)vlê€#£}”nŽ‹¢ÎÊÆ=Î ·/Šãâò ÑDŸ²¦[ð ÇÛÛÎ =ÎN‚g4¢ h4¢ÑÎN‚ŸÒ}¤è¶PÃñ–Ë…³M©g½®RAë5Õhg½®þžúè>R<éúá8¡ùÿДïŽX¯«”FtyF5ZŒX¯«m‰‹* Y¦âˆ¼€«8b¡.~™ÉD‘7pG,Ôů“#™ˆ#òF®âˆÅ¹xäÙX™®á¸˜wáìÈt³^WÇEÑAãKáŸ`"t*zÔ©á‹UÞÀ‘QÊñp¶/\½G0ƒ&?éñð­­P£1¦ðh$º-‹4—F­pÖë*£Åc@£¦pÖëêï©î#Å7—»f½®>tËsq„Ç2A<æ5Õh1þa½®¶5.x(ç½Nyß¼€+ï»RǸLŽdÂûæ\yßÕy6ôý±«. Ç›¬Îû œõºÊhD9ÐhDãKá¬×Õ÷©‰üœŽË’"?w8Íâ9ŽË»bŸ£Bd"t*zÔ©á}‚íü€#£”óál_¸z#Î`]“óá[[¡FcMáÁH>ï‡_ÿ…‹êóæ œólp…šÖˆ—§ÑˆFø‡õºÚj\}áâø¼ù<úŒý&Ó_o„²¾ˆ‘lnE»ãìâsÃñ¥b°Ò‡8ëu•Ò¶à½F£_g½®¾Oé>RôâWÃñ¥ªq5³^W)ÀczF5¾Îz]}Ÿš¨²#ü ÇÇãEõÐá´Â™Ðˆ<&Ðh“UØŠ5¹Må[°,œìȦÈ;N³“„FŽã£¯"«P#žˆnCÅ:m qð./oàÀH'åJpNäÂKPX¨Œ¼%’&E·¡ Gr Ÿ–’4ðl“4)º U8’s¥ûHñ¤ë‡ã„æÒHS¾;þa½®RAÒå5Õh1þa½®¶=.R¨0dŸŠ#òF®âˆºøer$qDÞÀU±S¿Îd&ŽÈ¸Š#vçâ‘g£eºýæâ7ÖÙèCLï.B@þ/¡‘ã¸(:h| üS‚‰Ðm¨øQ§Ý»xP奬gûÂÕ±ó8øhò“®ßÚ 5ÓhG¢ûHñ²È~÷Ѭ×Õ‡evï£A<–Јâ1 ÑˆFø‡õºú>¥ûHñMÇýî£Y¯«ÝòÜAá㱌FyF5ZŒX¯«íˆ ÊySÞ7oàÊûÔ1.s#™ñ¾y#WÞ÷pž }ôªËq÷l¬“̇^´9¼gkDB#úÈF#_ÿ°^Wß§&òsZp<îùùî!˜ÀyŸÐÈq\Þûj$¡ÛPñ£NH°}’7p`d”RÎö…«7¢óè²xø›Ô‡om…i4‡#Ù~ý®V¨-XàFφW¨íá*Z±F#MàÖëj;ãâ‰ryç”ÏʸòY§ó(Ö¡× Ï»?`½®>ôRã 2Fe4‚€Êk4ªñãÖëêû”î#ůUœwÀz]}襎Óûðe%4¢Oh4¢ñ%ðÏ|Y¹ -ž÷\ð óU8Ï9Ž Õ"§®P#™݆Šu:A2çwÞÀ‘QÊöp¶/\½[0.c„¿Éöð­­P£1&p:’ÏÛ­¢`wœ^|n8¾T Vúg½®Rý<ÐhTãKà¬×ÕçíVQàèů†ãKUã*jg½®R½Çj| œõºú¼gª‡ôÃññxQ=t8«pf4‰4Úd¶bÞc~Þ3y=ŒÙp|dSägÙIF#ÇñÑW‘¿U¨‘L„nCE:5¼OœË{`àÀH'¥Ä……œ¹ðê##/A‰¤IÑm¨Â‘¬Ãg†¥$¼Û$MŠnCޤŽÇ  ”¤€— èkRtªp$Û¸Q¥$¼c“¢ÛPÑ£N oO±cSŒ¥è; ´pÛp\½pV6îqV¸Íh|Q—¦ðh$ú”5Ý‚o8ÞÞ¾pVèqv<£@£¦pvüû”î#E·…Ž·\.œmJõ8ëu•Ò‚\¯Ñ¨F8ëuõ÷Ô®ûHñ¤ë‡ã„æ_|§)ßßY¯«”FtyF5ZŒï¬×Õg‰‹* Y¦âˆ¼€«8b¡.~™ÉD‘7pG,Ôů“#™ˆ#òF®âˆÅ¹xäÙX™®á¸˜wáìÈt³^WÇEÑAãKáŸ`"t*zÔ©á‹UÞÀ‘QÊñp¶/\½G0ƒ&?éñð­­P£1¦ðh$º-‹4—F­pÖë*£Åc@£¦pÖëêï©]÷‘⛎ËÝG³^W;Ýò\@á㱌FyF5ZŒï¬×Õg Êy¯SÞ7oàÊû®Ô1.“#™ð¾y#WÞwuž }ìªKÃñ&«ó¾g½®2ÑG4ÑøR8ëuõ}j"?gdž㲤ÈÏN³ø„FŽãò®Øç¨P#™݆ŠujxŸ`û0$oàÀÈ(å|8Û®Þˆ3˜G—ÅÃßä|øÖV¨Ñ˜FSx0’ýýðë¿p±Bío¾À9ÏW¨ix‰qh4ï¬×Õ§ÆÅåòê”ÏʸòYÕùë°k… ÇWöF`g½®RA@å5Õø8ëuõ}J÷‘¢×*ޝ,8Ÿ%pÖë*£}@£/…ïÁ—5‘ ÒÒi½»“櫦pš1&4rªEN]¡F2º =êÔð>™óÎ;oàÀÈ e?œí oÄþæóè3Fô›Lk|Q\¼Êú"F²¹U펳‹Ï Ç—ŠÁJâ¬×UJ#Ø‚÷j| œõºú>¥ûHÑ‹_ Ç—ªÆUÔÎz]¥4é5Õø8ëuõ}j¢zÈŽð7ÕC‡Ó gB#ò˜@£MVa+Ö<æ6•wlÁ²p²#›"ïp8ÍN9޾Šü­Bx"v݆ŠuÚ@âà]^ÞÀ‘NÊ'.,”àœÈ…— °Px J$MŠnCŽä>3,%ià%Ø&iRtªp$çxÜJIx ‚¾Ÿ”]·¡ŠF²¿Çz$%kà%ø›݆Šuúáíc¤Ç¦òFŒŒRôP^¸ýá¸(zÅŸ´l|ÇwZ¸Mh|Q—&ðp$§¬éüÇÛÛ—FZ¸ã;= žÐˆ‚  ÑˆFøNO‚ÿ=¥ûHñm¡Ž·\.tSêŽï¬×UJ#r½F£-ÆwÖëêû”î#Å“®ŽšK#MùîøÎz]¥4‚¤Ëk4ªÑb|g½®>{\¤PaÈ>Gä\Å;uñËäH&∼€«8b§.~ÉL‘7pGìÎÅ#ÏFËtûÍÅXg£™Þ]„€ü_B#ÇqQtÐøø^‚‰Ðm¨øQ§Ý»xP奬gûÂÕ±ó8øhò“®ßÚ 5ÓhG¢ûHñ²È~÷Ѭ×ÕN‹2»÷Ñ KhDñÐhD£ |g½®¾Oé>R|Óq¿ûhÖëj§[ž;ˆ#|<–Ñâ1¯Ñ¨F‹ñõºúqÁC9ïcÊûæ\y߃:Æen$3Þ7oàÊûγ¡ï^u9îžu’ÙéE›Ã{6°F$4¢h4¢ñ%ðõºú>5‘ŸÓ‚ãqÏÏpÁγø„FŽãò®Øç¨P#™݆Šu:@‚íü€#£”úp¶/\½5˜G—ÅÃߤ>|k+ÔhL£ <Éöðë¿pµBmÁ7z6¼BmWÑŠ5ÑhßY¯«ÏO”Ë;§|VÞÀ•Ï:?@±½VxÞýëuµÓK'È}<–Ñ*¯Ñ¨ÆWŒï¬×Õ÷)ÝGŠ_«8ïþ€õºÚ饎Óûðe%4¢Oh4¢ñ%ð} ¾¬‰\–NÏ{.x†ùª œgŒ Ç…j‘SW¨‘L„nCÅ: ™óÎ;oàÀÈ(e{8Û®Þˆ-˜G—1Âßd{øÖV¨Ñ˜F8Éþv«(اŸŽ/ƒ•>ÄY¯«”F¿4Õø8ëuµ¿Ý* ¼½øÕp|©j\EMà¬×UJ£÷˜@£Q/³^Wû{¦zHð7ÕC‡³ gF#ð˜H£MVa+Öè=æþžÉ;èăã#›"ïp8ËN29޾Šü­Bd"t*zÔ©á}âà\Þ#F:)%.,”àœÈ…— °Px J$MŠnCŽd>3,%ià%Ø&iRtªp$ušü¤Ç÷¶BÆ4šÂ£‘è>R´,Òp\r}´ÂY¯«ŒFF4šÂY¯«¿§ÝGŠo:.wÍz]tËsq„Ç2A<æ5Õh1~°^Wû<”ó^§¼oÞÀ•÷]©c\&G2á}óF®¼ïê<úþØU—†ãMVç}Îz]e4¢h4¢ñ¥pÖëêûÔD~Î Ž ÇeI‘Ÿ;œfñ Çå]±ÏQ¡F2º =êÔð>ÁöaHÞÀ‘QÊùp¶/\½g0.‹‡¿Éùð­­P£1¦ð`$Çûá×áb…:Þ|sž ®PÓñã4Ñh?X¯«½ÆÅåòê”ÏʸòYÕùë°k… ÇWöF`g½®RA@å5Õø8ëuõ}J÷‘¢×*ޝ,8Ÿ%pÖë*£}@£/…ïÁ—5‘ ÒÒi½»“櫦pš1&4rªEN]¡F2º =êÔð>™óÎ;oàÀÈ åx?œí oÄñæóè3Fô›Lk|Q\¼Êú"F²¹U펳‹Ï Ç—ŠÁJâ¬×UJ#Ø‚÷j| œõºú>¥ûHÑ‹_ Ç—ªÆUÔÎz]¥4é5Õø8ëuõ}j¢zÈŽð7ÕC‡Ó gB#ò˜@£MVa+Ö<æ6•wlÁ²p²#›"ïp8ÍN9޾Šü­Bx"݆ŠuÚ@âà]^ÞÀ‘NÊ'.,”àœÈ…— °Px J$MŠnCŽä>3,%ià%Ø&iRtªp$çxÜJIx ‚¾Ÿ”C·¡ŠFr¼Çz$%kà%ø›݆Šuúáíc¤Ç¦òFŒŒRôP^¸ýá¸(zÅŸ´l|ÇZ¸Mh|Q—&ðp$§¬éüÇÛÛ—FZ¸ã= žÐˆ‚  ÑˆFøAO‚ÿ=¥ûHñm¡Ž·\.tSꎬ×UJ#r½F£-ÆÖëêû”î#Å“®ŽšK#MùîøÁz]¥4‚¤Ëk4ªÑbü`½®ö=.R¨0dŸŠ#òF®âˆºøer$qDÞÀU±S¿Îd&ŽÈ¸Š#vçâ‘g£eºýæâwÖÙè G¦w! ÿ—ÐÈq\4¾~”`"t*~Ôi÷.Ty#FF)ëÃÙ¾põF¬Á<>šü¤ë÷¶BÆ4šÀÑè>R¼,²ß}4ëuuТÌî}4ˆÇQ<4Ñh?X¯«ïSºßtÜï>šõº:è–çâe4‚xÌk4ªÑbü`½®ö#.x(ç}Lyß¼€+ï{PǸÌdÆûæ\yßÃy6ôýÑ«.Çݳ±N2½hsxÏÖˆ„Fô‘F4¾~°^Wß§&òsZp<îùùî!˜ÀyŸÐÈq\Þûj$¡ÛPñ£NH°}’7p`d”RÎö…«7¢óè²xø›Ô‡om…i4‡#Ù~ý®V¨-XàFφW¨íá*Z±F#MàëuµŸqñD¹¼sÊgå\ù¬ÓùëÐk…çݰ^W½Ôx‚ŒÑÇc  òj|ÅøÁz]}ŸÒ}¤øµŠóîX¯«ƒ^ê8½?_VB#ú4€F#_?–àËšÈiéô¼ç‚g˜¯šÀyƘÐÈq\¨9u…ÉDè6Tü¨Ó ’9ï¼óFŒŒR¶‡³}áêØ‚yt#üM¶‡om…i4Ó‘o·Š‚Ýqzñ¹áøR1XéCœõºJiô[ð@£Q/³^WÇÛ­¢ÀÑ‹_ Ç—ªÆUÔÎz]¥4z 4Õø8ëuu¼gª‡ôÃññxQ=t8«pf4‰4Úd¶bÞcƒÆl8>²)ò‡³ì$£‘ãøè«Èß*ÔH&B·¡¢GÞ'Îå=0p`¤“RâÂB Ή\x õ‘€— DÒ¤è6TáHÖá3ÃR’F^‚m’&E·¡ GRÇãPJÒÀKô5)º U8’mܨ‡R’F^‚±IÑm¨èQ§†·§Ø±©FŒŒRôPZ¸m8.Š^8+÷8+Üf4¾(Ž‹ËƒFSx4}ÊšnÁ7oo_8+ô8; žÑˆ‚  ÑˆFS8; þ}J÷‘¢ÛB Ç[.Î6¥zœõºJiA®×hT£ œõºú{êÔ}¤xÒõÃqBó/~Ҕ¬×UJ#Hº¼F£-ÆOÖëêXâ"… C–©8"oà*ŽX¨‹_&G2Gä\Å uñëäH&∼€«8bq.y6V¦k8.æ]8;2Ýã¬×UF#ÇqQtÐøRø'˜݆ŠujxçâA@•7p`d”r<œí WoÄÌãà£ÉOz<|k+ÔhL£)<‰î#EË" Ç%‡ÑG+œõºÊhDñÐhD£)œõºú{êÔ}¤ø¦ãr÷Ѭ×ÕI·<Gøx,£Äc^£Qã'ëuu¬qÁC9ïuÊûæ\yß•:Æer$Þ7oàÊû®Î³¡ï]ui8ÞduÞWà¬×UF#úÈF#_ g½®¾OMäç¬àØp\–ù¹ÃiŸÐÈq\Þûj$¡ÛPÑ£N ïl†ä¥œgûÂÕqóè²xø›œßÚ 5Óh Fr¾~ý.V¨óÍ8çÙà 5­/1N£&ð“õº:j\>cD¿É´ÆÅÅ¡¬/b$›[EÑî8»øÜp|©¬ô!Îz]¥4‚-x¯Ñ¨Æ—ÀY¯«ïSº½øÕp|©j\EMà¬×UJ#ð˜^£Q/³^Wß§&ª‡ìÃññxQ=t8­p&4" 4Úd¶bÀcnSyÇ, ';²)ò‡Óì$¡‘ãøè«Èß*Ôˆ'âÔm¨øQ§ $Þååé¤|âÂB Ή\x õ‘€— DÒ¤è6TáHŽá3ÃR’F^‚m’&E·¡ GrŽÇ  ”¤€— èûI9uªh$ç{ܨGR²F^‚±IÑm¨øQ§Þ>Fzl*oàÀÈ(Eßå…ÛŽ‹¢WüIËÆwü¤…Û„ÆÅqqyÐhG2qÊšnÁÿp¼½}i¤€;~Ò“à (¨h4Ÿô$øßSºßúáxËåÒH7¥îøÉz]¥4‚ ×k4ªÑbüd½®¾Oé>R<éúá8¡¹4Ҕ¬×UJ#Hº¼F£-ÆOÖëêØã"… Cö©8"oà*ŽØ©‹_&G2Gä\Å;uñëÜHf∼€«8bw.y6Z¦Ûo.þ`Nzdzwò ÇEÑAãKàg &B·¡âGvïâA@•7p`d”²>œí WoÄÌãà£ÉOº>|k+ÔhL£ <‰î#ÅË"ûÝG³^W'-ÊìÞGƒx,¡Åc@£&ð“õºú>¥ûHñMÇýî£Y¯«“nyî ŽðñXF#ˆÇ¼F£-ÆOÖëê8₇rÞÇ”÷͸ò¾uŒËÜHf¼oÞÀ•÷=œgCß½êrÜ=ë$sÒ‹6‡÷l`HhD9ÐhDãKà'ëuõ}j"?§Ç㞟á‚ œgñ Çå]±ÏQ¡F2º ?êt€Û‡!y#FF)õál_¸z#j0.‹‡¿I}øÖV¨Ñ˜Fx8’íá×áj…Ú‚nôlx…Ú®¢k4¢Ñ~²^WÇO”Ë;§|VÞÀ•Ï:?@±½VxÞýëuuÒK'È}<–Ñ*¯Ñ¨ÆWŒŸ¬×Õ÷)ÝGŠ_«8ïþ€õº:饎Óûðe%4¢Oh4¢ñ%ðs ¾¬‰\–NÏ{.x†ùª œgŒ Ç…j‘SW¨‘L„nCÅ: ™óÎ;oàÀÈ(e{8Û®Þˆ-˜G—1Âßd{øÖV¨Ñ˜F8Éùv«(اŸŽ/ƒ•>ÄY¯«”F¿4Õø8ëuu¾Ý* ¼½øÕp|©j\EMà¬×UJ£÷˜@£Q/³^Wç{¦zHð7ÕC‡³ gF#ð˜H£MVa+Öè=æùžÉ;èăã#›"ïp8ËN29޾Šü­Bd"t*zÔ©á}âà\Þ#F:)%.,”àœÈ…— °Px J$MŠnCŽd>3,%ià%Ø&iRtªp$ušü¤Ç÷¶BÆ4šÂ£‘è>R´,Òp\r}´ÂY¯«ŒFF4šÂY¯«sq>Å:tÓq¹ûhÒëêGø¿q„Ç2A<æ5Õh!þoáã±5.x(ç½Nyß¼€+ï»RǸLŽdÂûæ\yßÕy6ôý±«. Ç›¬Îû œõºÊhD9ÐhDãKá¬×Õ÷©‰üœŽË’"?w8Íâ9ŽË»bŸ£Bd"t*zÔ©á}‚íü€#£”óál_¸z#Î`]“óá[[¡FcMá|$γMý¯Pÿú¬¿üŸ_¡æ5Â%Æk4¢ÑbüŠ#Ü Uãâ‰ryuÊgå\ù¬êüŠuص†ã+{£?0³^W)  òj| œõºú>¥ûHÑk ÇWœÏ8ëu•ш>  ÑˆÆ—Â÷àËšÈié´ÞÝI óUS8Í9Ž Õ"§®P#™݆ŠujxŸÌyç7p`¤—âüÁôl_xüFüë³Bü_¯~“y/ŠÇo„´¾ˆ‘lnE»ãìâsÃñ¥b°Ò‡8ëu•Ò¶à½F£_g½®¾Oé>RôâWÃñ¥ªq5³^W)ÀczF5¾Îz]}Ÿš¨²#ü ÇÇãEõÐá´Â™Ðˆ<&Ðh“UØŠ5¹Må[°,œìȦÈ;N³“„FŽã£¯"«P#œ·†#gF:m qð./oàÀH'åJpNäÂKPX¨Œ¼%’&E·¡ Gr Ÿ–’4ðl“4)º U8’sR<éúá8¡¹4Ҕ§PΖÑ’.¯Ñ¨F ñž9Û)T²OÅy#WqÄN]ü29’‰8"oà*ŽØ©‹_§F2Gä\Å»sñȳÑ2Ý~¹x÷ÔõÐ#Ó»‹ÿKhä8.Š_1Nžj#Ñm¨øQ§Ý»xP奬gûÂÕ±ó8øhò“®ßÚ 5Óh1D÷‘âe‘ýî£wÑ¢Ìî}4ˆÇQ<4Ñh1~ED.ÛF±ÝtÜï>zgñÝòÜAá㱌FyF5ZˆÿGøxìˆ ÊySÞ7oàÊûÔ1.S#™ò¾y#WÞ÷pž }ôªËq÷l[#èE›Ã{6°F$4¢h4¢ñãÿî!ø5â˜ÊÏiÁñ¸ççG¸‡`1dñ Çå]±ÏQ¡F2º ?êt€Û‡!y#FF)õál_¸z#j0.‹‡¿I}øÖV¨Ñ˜F‹ñx$ÛïÿÂÕ µ ÜèÙð µ=\E+ÖhD£ÅøG¸ꌋ'ÊåS>+oàÊgΠX‡^+<ïþàdñ½Ôx‚ŒÑÇc  òj|…ø¿žÍÇc§óè­¥×*λ?8Ù—E/uœÞ€/+¡}@£¯ÿ7_…_ÖD.HK§ç=<Ã|Õb<È9Ž Õ"§®P#™݆Šu:A2çwÞÀ‘QÊöp¶/\½[0.c„¿Éöð­­P£1ãt$¥­^ñî8½øüŽ/ƒ•>ÄI¯«œF·4Õø8éuUÚê{#zñë_ªWQ8éu•Óè<&ÒhTãKà¤×Ui«Wìèþp|<^TN*œ)ÞcB6Y…­X£ó˜¥­ñÚCcþƒã#›"ïp8ÉNR9޾Šü­Bd"d*zÔé¼OF—÷ÄÀ‘NJ‰ %8'rá%(,ÔGF^‚I“"ÛPÅ#Y‡Ï KIx ¶IšÙ†*I@)I#/AÐפÈ6TñH¶q£JIx >Æ&å£?Æ|fŸŸú°O6oàÀÈ(e×ëka‹øÇEÑ ßÙÊÙá;[Ä_ÇÅåA£)<É¡ý}aAÅÇÛÛ~°¦Ã“$4¢ h4¢Ñ~°˜äï©SÇŸ…¹?o¹\øÉBì?YŒœÑ‚\¯Ñ¨FøÉbäò÷˜Î‡hÒõÃqBó/^hÊwÇË›ål éòj´/o–³-q‘B…!ËT‘7pG,ÔÅ/“#™ˆ#òF®âˆ…ºøur$qDÞÀU±8<ÛœÎrwñ 󾿼! ÿ—ÐÈq\4¾þ &bסÒ‚ Å»xPå¥gûÂÕqó8øhò“ßÚ 5Óh FrêXgañØrw² ‹ÇN-ÞGƒx,¡Åc@£¦ð“Åc‹óÑ(Ö¡›ŽËÝG³^W…ny. ŽðñXF#ˆÇ¼F£-ÆË›Åck\ðPÎ{ò¾y#WÞw¥Žq™É„÷͸ò¾«ólèû[ÙG¾Þ]í$óaKÌê=X#ÑG4ÑøRø‡­ëT~¾²¥z½;Æ5ÜC0…Ó,>¡‘㸼+ö9*ÔH&âÐÆÊB‡$Ø> É802J9Îö…«7â æÑeñð79¾µj4¦ÑŒ¤¼~ý.V¨òæ œólp…šÖˆ—§ÑˆFxy³ªÆÅåòê”ÏʸòYÕùëTPÕû‚^Ùþ؇…sdŒ>Ëh•×hTãKàUçÐ[[Ù§Qï ze¾gfõþ|Y èÓh|)|¾¬‰\–NëÝÔ0_5…ÓŒ1¡‘ã¸P-rê 5’‰8µ[®ÌáVÌyç7p`dRÞgûÂÅQÞ|}ƈ~“i/Š‹7BY_ÄH6·Š¢ÝñmÁo÷epc§®>¬°•Þïàg4‚-x¯Ñ¨Æ—À?ls«(òFó˜Û}ܘÇÜ™ÇÜ@vâ=fF#ð˜^£Q/ïÌcnSÕÃyÌí¾ na…ÓN+œ Èc6Y…­X#ð˜ÛTÞ±ËÂÉŽlмÃá4;Ihä8>ú*ò· 5â‰(oíÌèQ§ $Þååé¤|âÂB Ή\x õ‘€— DÒ¤zÛîã%Ø\¨Œ¼Û$Mʩ˟/A¨Tx ‚¾Ÿ”òÖ¢>1^‚W¸>2ð|ŒMJÑã‡fåßCÚ…›Ê802JYôúJ ·?E¯ø“–ïx¡…Û„ÆÅqqyÐhG2qÊšnÁÿp¼½}i¤€;^èIð„FTF4šÀ = þ÷TÕñ'ÝúáxËåÒH7¥îx©,FÎhA®×hT£Åx©,Fþ{jÓùMº~8Nh.4å»ãec9[F#Hº¼F£-ÆËÆr¶=.R¨0dŸŠ#òF®âˆºøer$qDÞÀU±S¿Îd&ŽÈ¸Š#vçâ‘g£eºýæâ߬³Q¡G¦w! ÿ—ÐÈq\4¾^J0‹•èQ§Ý»xP奬gûÂÕ±ó8øhò“®ßÚ 5ÓhGRu¬CË"ûÝG³^W…evï£A<–Јâ1 ÑˆFx©,ÛF±ÝtÜï>šõº*tËsq„Ç2A<æ5Õh1^6qÁC9ïcÊûæ\y߃:Æen$3Þ7oàÊûγ¡ï^u9îžu’)ô¢Íá=X#ÑG4Ñøx)l8¦òsZp<îùùî!˜ÀyŸÐÈq\Þûj$±êƒu:@‚íü€#£”úp¶/\½5˜G—ÅÃߤ>|k+ÔhL£ <Éöðë¿pµBmÁ7z6¼BmWÑŠ5Ñh/[¡Î¸x¢\Þ9å³òF®|ÖéüŠuèµÂóîX¯«B/5ž côñXF#¨¼F£_1^ ‹ÇNçÐ[K¯UœwÀz]z©ãôþ|Y èÓh| ¼,Á—5‘ ÒÒéyÏÏ0_5óŒ1¡‘ã¸P-rê 5’‰¨Ú-Ó£N'Hæ¼óÎ802JÙÎö…«7b æÑeŒð7Ù¾µj4¦ÑNGRÞn»ãôâsÃñ¥b°Ò‡8ëu•Òè·àF£_g½®ÊÛ­¢ÀÑ‹_ Ç—ªÆUÔÎz]¥4z 4Õø8ëuUÞ3ÕCz„¿áøx¼¨:œU83ÇDm² [±Fï1Ë{&ï ‡1ŽlмÃá,;Éhä8>ú*ò· 5’‰Ðm¨èQ§†÷‰ƒsyŒ餔¸°P‚s"^‚ÂB}dà%(‘4)º U8’uøÌ°”¤€—`›¤IÑm¨Â‘Ôñ¸”’4ð}MŠnCŽd7ê¡”¤€—àclRt*zÔ©áí)vlê€#£}”nŽ‹¢ÎÊÆ=Î ·/Šãâò ÑDŸ²¦[ð ÇÛÛÎ =ÎN‚g4¢ h4¢ÑÎN‚ÿÑ}¤è¶PÃñ–Ë…³M©g½®RAë5Õhg½®¾NR÷‘âI×Ç Í¿øBS¾;¾°^W) éòj´_X¯«²ÄE †,SqDÞÀU±P¿LŽd"ŽÈ¸Š#êâ×É‘LÄy#WqÄâ\<òl¬L×p\Ì»pvdºÇY¯«ŒFŽã¢è ñ¥ðO0º =êÔðÎŃ€*oàÀÈ(åx8Û®Þˆ#˜ÇÁG“ŸôxøÖV¨Ñ˜FSx4ÝGŠ–EŽK£V8ëu•шâ1 ÑˆFS8ëuõ÷Ô¢ûHñMÇåî£Y¯«…ny. ŽðñXF#ˆÇ¼F£-ÆÖ몬qÁC9ïuÊûæ\yß•:Æer$Þ7oàÊû®Î³¡ï]ui8ÞduÞWà¬×UF#úÈF#_ g½®¾OMäç¬àØp\–ù¹ÃiŸÐÈq\Þûj$¡ÛPÑ£N ïl†ä¥œgûÂÕqóè²xø›œßÚ 5Óh F²¼~ý.V¨åÍ8çÙà 5­/1N£&ð…õº*5.ž(—W§|VÞÀ•ϪΠX‡]+l8¾²7ú8ëu•Ò*¯Ñ¨Æ—ÀY¯«ïSº½VÑp|eÁù,³^WèÓh|)|¾¬‰\–NëÝÔ0_5…ÓŒ1¡‘ã¸P-rê 5’‰Ðm¨èQ§†÷ÉœwÞy#F)Ëûál_¸x#–7ŸGŸ1¢ßdZã‹ââPÖ1’Í­¢hwœ]|n8¾T Vúg½®RÁ¼×hTãKà¬×Õ÷)ÝGŠ^üj8¾T5®¢&pÖë*¥xL¯Ñ¨Æ—ÀY¯«ïSÕCv„¿áøx¼¨:œV8‘Çm² [±Fà1·©¼c –…“Ùy‡Ãiv’ÐÈq|ôUäojıè6Tü¨ÓïòòFŒtR>qa¡çD.¼……úÈÀKP"iRtªp$Çð™a)I#/Á6I“¢ÛP…#9ÇãPJÒÀKôý¤,º U4’å=nÔ#)Y#/ÁÇØ¤è6Tü¨Óo#=6•7p`d”¢ï€òÂíÇEÑ+þ¤eã;¾ÐÂmBã‹â¸¸Ëhñ˜×hT£ÅøÂz]•#.x(ç}Lyß¼€+ï{PǸÌdÆûæ\yßÃy6ôýÑ«.Çݳ±N2 ½hsxÏÖˆ„Fô‘F4¾¾°^Wß§&òsZp<îùùî!˜ÀyŸÐÈq\Þûj$¡ÛPñ£NH°}’7p`d”RÎö…«7¢óè²xø›Ô‡om…i4‡#Ù~ý®V¨-XàFφW¨íá*Z±F#Mà ëuUθx¢\Þ9å³òF®|ÖéüŠuèµÂóîX¯«…^jRüZÅy÷¬×ÕB/uœÞ€/+¡}@£//KðeMä‚´tzÞsÁ3ÌWMàeM·àŽ··/œzœÏhDAÐhD£)œÿ>¥ûHÑm¡†ã-— g›R=Îz]¥4‚ ×k4ªÑÎz]}Ûé>R<éúá8¡ù_iÊwÇWÖë*¥$]^£Qã+ëuµ,q‘B…!ËT‘7pG,ÔÅ/“#™ˆ#òF®âˆ…ºøur$qDÞÀU±8<+Ó5ó.œ™îqÖë*£‘ã¸(:h|)üL„nCE:5¼sñ  Ê802J9Îö…«7âæqðÑä'=¾µj4¦ÑD÷‘¢e‘†ã’Ãè£Îz]e4¢x h4¢ÑÎz]ý=µê>R|Óq¹ûhÖëj¥[ž ˆ#|<–Ñâ1¯Ñ¨F‹ñ•õºú‹j݆Š;ïuÊûæ\yß•:Æer$Þ7oàÊû®Î³¡ï]ui8ÞduÞWà¬×UF#úÈF#_ g½®¾OMäç¬àØp\–ù¹ÃiŸÐÈq\Þûj$¡ÛPÑ£N ïl†ä¥œgûÂÕqóè²xø›œßÚ 5Óh F²¾~ý.V¨õÍ8çÙà 5­/1N£&ð•õºZj\>cD¿É´ÆÅÅ¡¬/b$›[EÑî8»øÜp|©¬ô!Îz]¥4‚-x¯Ñ¨Æ—ÀY¯«ïSº½øÕp|©j\EMà¬×UJ#ð˜^£Q/³^Wß§&ª‡ìÃññxQ=t8­p&4" 4Úd¶bÀcnSyÇ, ';²)ò‡Óì$¡‘ãøè«Èß*Ôˆ'bÕm¨øQ§ $Þååé¤|âÂB Ή\x õ‘€— DÒ¤è6TáHŽá3ÃR’F^‚m’&E·¡ GrŽÇ  ”¤€— èûIYuªh$ë{ܨGR²F^‚±IÑm¨øQ§Þ>Fzl*oàÀÈ(Eßå…ÛŽ‹¢WüIËÆw|¥…Û„ÆÅqqyÐhG2qÊšnÁÿp¼½}i¤€;¾Ò“à (¨h4¯ô$øßSºßúáxËåÒH7¥îøÊz]¥4‚ ×k4ªÑb|e½®¾Oé>R<éúá8¡¹4Ҕ¬×UJ#Hº¼F£-ÆWÖëêï^t*†ìSqDÞÀU±S¿LŽd"ŽÈ¸Š#vêâ×¹‘ÌÄy#WqÄî\<òl´L·ß\üÂ:­ôÈôî"äÿ9Ž‹¢ƒÆ—À×L„nCÅ:íÞŃ€*oàÀÈ(e}8Û®Þˆ5˜ÇÁG“Ÿt}øÖV¨Ñ˜Fx8ÝGŠ—Eö»f½®VZ”Ù½ñXB#ŠÇ€F#Mà+ëuõ}J÷‘⛎ûÝG³^W+ÝòÜAá㱌FyF5ZŒ¯¬×ÕrÄå¼)ï›7på}ê—¹‘Ìxß¼€+ï{8φ¾?zÕå¸{6ÖIf¥mïÙÀ‘Ј>r ÑˆÆ—ÀWÖëêûÔD~N ŽÇ=??Â=8Ïâ9ŽË»bŸ£Bd"t*~Ôé ¶CòFŒŒRêÃÙ¾põFÔ`]“úð­­P£1&ðp$ÛïÿÂÕ µ ÜèÙð µ=\E+ÖhD£ |e½®–3.ž(—wNù¬¼€+Ÿu:€bz­ð¼ûÖëj¥—O1úx,£T^£Q¯_Y¯«ïSº¿VqÞýëuµÒK§÷àËJhDŸÐhDãKàë|Y¹ -ž÷\ð óU8Ï9Ž Õ"§®P#™݆Šu:A2çwÞÀ‘QÊöp¶/\½[0.c„¿Éöð­­P£1&p:’õíVQ°;N/>7_*+}ˆ³^W)~ h4ªñ%pÖëj}»Ux#zñ«áøRÕ¸ŠšÀY¯«”Fï1F£_g½®Ö÷Lõáo8>/ª‡gÎŒFà1‘F›¬ÂV¬Ñ{Ìõ=“wÐØ ÇG6EÞáp–d4r}ù[…ÉDè6Tô¨SÃûÄÁ¹¼FŒtRJ\X(Á9‘ /Aa¡>2ð”Hš݆*É:|fXJÒÀK°MÒ¤è6TáHêxÜJIx ‚¾&E·¡ G²õPJÒÀKð16)º =êÔðö;6õÀÀ‘QоJ · ÇEÑ geãg…ÛŒÆÅqqyÐh F¢OYÓ-ø†ãíí g€g'Á3QP4Ñh g'Á¿Oé>Rt[¨áxËåÂÙ¦T³^W) Èõj4³^WOUÝGŠ']?'4ÿ╦|w¼²^W) éòj´¯¬×ÕºÄE †,SqDÞÀU±P¿LŽd"ŽÈ¸Š#êâ×É‘LÄy#WqÄâ\<òl¬L×p\Ì»pvdºÇY¯«ŒFŽã¢è ñ¥ðO0º =êÔðÎŃ€*oàÀÈ(åx8Û®Þˆ#˜ÇÁG“ŸôxøÖV¨Ñ˜FSx4ÝGŠ–EŽK£V8ëu•шâ1 ÑˆFS8ëuõ÷TÕ}¤ø¦ãr÷Ѭ×U¥[ž ˆ#|<–Ñâ1¯Ñ¨F‹ñÊz]­k\ðPÎ{ò¾y#WÞw¥Žq™É„÷͸ò¾«ólèûcW]Ž7Y÷8ëu•ш>r ÑˆÆ—ÂY¯«ïSù9+86—%E~îpšÅ'4r—wÅ>G…ÉDè6Tô¨SÃûÛ‡!y#FF)çÃÙ¾põFœÁ<º,þ&ç÷¶BÆ4šÂƒ‘Ô÷ïÿÂÅ Uß|sž ®PÓñã4Ñh¯¬×ÕZãâ‰ryuÊgå\ù¬êüŠuص†ã+{£?0³^W)  òj| œõºú>¥ûHÑk ÇWœÏ8ëu•ш>  ÑˆÆ—Â÷àËšÈié´ÞÝI óUS8Í9Ž Õ"§®P#™݆ŠujxŸÌyç7p`dRßgûÂÅQß|}ƈ~“i/Š‹7BY_ÄH6·Š¢Ýqvñ¹áøR1XéCœõºJi[ð^£Q/³^Wß§t)zñ«áøRÕ¸ŠšÀY¯«”Fà1½F£_g½®¾OMTÙþ†ããñ¢zèpZáLhDh´É*lÅÇܦòŽ-XNvdSä§ÙIB#ÇñÑW‘¿U¨ODÕm¨øQ§ $Þååé¤|âÂB Ή\x õ‘€— DÒ¤è6TáHŽá3ÃR’F^‚m’&E·¡ GrŽÇ  ”¤€— èûI©º U4’ú7ê‘”¬€—àclRt*~Ô釷‘›Ê802JÑw@yáö‡ã¢èÒ²ñ¯´p›Ðø¢8..MàáH&NYÓ-øŽ··/´pÇ+= žÐˆ‚  ÑˆFx¥'ÁÿžÒ}¤ø¶ÐÇ[.—Fº)uÇ+ëu•Ò‚\¯Ñ¨F‹ñÊz]}ŸÒ}¤xÒõÃqBsi¤)߯¬×UJ#Hº¼F£-Æ+ëuµîq‘B…!ûT‘7pGìÔÅ/“#™ˆ#òF®âˆºøun$3qDÞÀU±;<-Óí7¿²ÎF•™Þ]„€ü_B#ÇqQtÐøx-ÁDè6Tü¨Óî]<¨òFŒŒRÖ‡³}áêXƒy|4ùIׇom…i4‡#Ñ}¤xYd¿ûhÖëªÒ¢Ìî}4ˆÇQ<4Ñh¯¬×Õ÷)ÝGŠo:îwÍz]Uºå¹ƒ8ÂÇc ój´¯¬×ÕzÄå¼)ï›7på}ê—¹‘Ìxß¼€+ï{8φ¾?zÕå¸{6ÖI¦Ò‹6‡÷l`HhD9ÐhDãKà•õºú>5‘ŸÓ‚ãqÏÏpÁγø„FŽãò®Øç¨P#™݆Šu:@‚íü€#£”úp¶/\½5˜G—ÅÃߤ>|k+ÔhL£ <Éöðë¿pµBmÁ7z6¼BmWÑŠ5Ñh¯¬×ÕzÆÅåòÎ)Ÿ•7på³NçP¬C¯žwÀz]Uz©ñ£Ç2A@å5ÕøŠñÊz]}ŸÒ}¤øµŠóîX¯«J/uœÞ€/+¡}@£/×%ø²&rAZ:=ï¹àæ«&pž1&4rªEN]¡F2º ?êt‚dÎ;ï¼€#£”íál_¸z#¶`]Æ“íá[[¡FcMàt$õíVQ°;N/>7_*+}ˆ³^W)~ h4ªñ%pÖ몾Ý* ¼½øÕp|©j\EMà¬×UJ£÷˜@£Q/³^Wõ=S=¤GøŽÇ‹ê¡ÃY…3£xL¤Ñ&«°kô³¾gòz³áøÈ¦È;β“ŒFŽã£¯"«P#™݆ŠujxŸ88—÷ÀÀ‘NJ‰ %8'rá%(,ÔGF^‚I“¢ÛP…#Y‡Ï KIx ¶Iš݆*I@)I#/AÐפè6TáH¶q£JIx >Æ&E·¡¢GÞžbǦ802JÑw@iá¶á¸(zá¬lÜã¬p›Ñø¢8..MáÑHô)kºßp¼½}á¬Ðãì$xF# *€F#Máì$ø÷)ÝGŠn 5o¹\8Û”êqÖë*¥¹^£Q&pÖëêï©M÷‘âI×Ç Í¿øFS¾;¾±^W) éòj´ßX¯«¿E¦ê6T< Y¦âˆ¼€«8b¡.~™ÉD‘7pG,Ôů“#™ˆ#òF®âˆÅ¹xäÙX™®á¸˜wáìÈt³^WÇEÑAãKáŸ`"t*zÔ©á‹UÞÀ‘QÊñp¶/\½G0ƒ&?éñð­­P£1¦ðh$º-‹4—F­pÖë*£Åc@£¦pÖëêï©M÷‘⛎ËÝG³^WÝò\@á㱌FyF5ZŒo¬×U]ょrÞë”÷͸ò¾+uŒËäH&¼oÞÀ•÷]gCß»êÒp¼É꼯ÀY¯«ŒFô‘F4¾Îz]}ŸšÈÏYÁ±á¸,)òs‡Ó,>¡‘㸼+ö9*ÔH&B·¡¢GÞ'Ø> É802J9Îö…«7â æÑeñð79¾µj4¦ÑŒd{?üú/\¬PÛ›/pγÁjZ#^bœF#MàëuUk\>cD¿É´ÆÅÅ¡¬/b$›[EÑî8»øÜp|©¬ô!Îz]¥4‚-x¯Ñ¨Æ—ÀY¯«ïSº½øÕp|©j\EMà¬×UJ#ð˜^£Q/³^Wß§&ª‡ìÃññxQ=t8­p&4" 4Úd¶bÀcnSyÇ, ';²)ò‡Óì$¡‘ãøè«Èß*Ôˆ'bÓm¨øQ§ $Þååé¤|âÂB Ή\x õ‘€— DÒ¤è6TáHŽá3ÃR’F^‚m’&E·¡ GrŽÇ  ”¤€— èûIÙtªh$Û{ܨGR²F^‚±IÑm¨øQ§Þ>Fzl*oàÀÈ(Eßå…ÛŽ‹¢WüIËÆw|£…Û„ÆÅqqyÐhG2qÊšnÁÿp¼½}i¤€;¾Ñ“à (¨h4oô$øßSºßúáxËåÒH7¥îøÆz]¥4‚ ×k4ªÑb|c½®¾Oé>R<éúá8¡¹4Ò”ïŽo¬×UJ#Hº¼F£-Æ7Öëªîq‘B…!ûT‘7pGìÔÅ/“#™ˆ#òF®âˆºøun$3qDÞÀU±;<-Óí7_Yg£™Þ]„€ü_B#ÇqQtÐøøV‚‰Ðm¨øQ§Ý»xP奬gûÂÕ±ó8øhò“®ßÚ 5ÓhG¢ûHñ²È~÷Ѭ×ÕF‹2»÷Ñ KhDñÐhD£ |c½®¾Oé>R|Óq¿ûhÖëj£[ž;ˆ#|<–Ñâ1¯Ñ¨F‹ñõºªG\ðPÎû˜ò¾y#WÞ÷ Žq™ÉŒ÷͸ò¾‡ólèû£W]Ž»gcd6zÑæðž ¬ è#h| |c½®¾OMäç´àxÜóó#ÜC0ó,>¡‘㸼+ö9*ÔH&B·¡âG`û0$oàÀÈ(¥>œí WoD æÑeñð7©ßÚ 5ÓhG²=üú/\­P[°Àž ¯PÛÃU´bF4šÀ7Ö몞qñD¹¼sÊgå\ù¬ÓùëÐk…çݰ^W½Ôx‚ŒÑÇc  òj|ÅøÆz]}ŸÒ}¤øµŠóîX¯«^ê8½?_VB#ú4€F#_ß–àËšÈiéô¼ç‚g˜¯šÀyƘÐÈq\¨9u…ÉDè6Tü¨Ó ’9ï¼óFŒŒR¶‡³}áêØ‚yt#üM¶‡om…i4Ó‘lo·Š‚Ýqzñ¹áøR1XéCœõºJiô[ð@£Q/³^WÛÛ­¢ÀÑ‹_ Ç—ªÆUÔÎz]¥4z 4Õø8ëuµ½gª‡ôÃññxQ=t8«pf4‰4Úd¶bÞcnƒÆl8>²)ò‡³ì$£‘ãøè«Èß*ÔH&B·¡¢GÞ'Îå=0p`¤“RâÂB Ή\x õ‘€— DÒ¤è6TáHÖá3ÃR’F^‚m’&E·¡ GRÇãPJÒÀKô5)º U8’mܨ‡R’F^‚±IÑm¨èQ§†·§Ø±©FŒŒRôPZ¸m8.Š^8+÷8+Üf4¾(Ž‹ËƒFSx4}ÊšnÁ7oo_8+ô8; žÑˆ‚  ÑˆFS8; þ}J÷‘¢ÛB Ç[.Î6¥zœõºJiA®×hT£ œõºú{ê£ûHñ¤ë‡ã„æ_üCS¾;þa½®RAÒå5Õh1þa½®¶%.R¨0d™Š#òF®âˆ…ºøer$qDÞÀU±P¿NŽd"ŽÈ¸Š#çâ‘gceº†ãbÞ…³#Ó=Îz]e4rE/…‚‰Ðm¨èQ§†w.Ty#FF)ÇÃÙ¾põFÁ<>šü¤Ç÷¶BÆ4šÂ£‘è>R´,Òp\r}´ÂY¯«ŒFF4šÂY¯«¿§>ºßt\î>šõºúÐ-ÏÄ>Ëhñ˜×hT£Åø‡õºÚָ࡜÷:å}óF®¼ïJã29’ ï›7på}WçÙÐ÷Ç®º4o²:ï+pÖë*£}ä@£/…³^Wß§&òsVpl8.KŠüÜá4‹Ohä8.ïŠ}Ž 5’‰Ðm¨èQ§†÷ ¶CòFŒŒR·³}áê8ƒytY<üM·om…i4…#ù¼~ý.V¨Ï›/pγÁjZ#^bœF#MàÖëj«qñD¹¼:å³òF®|VuþÅ:ìZaÃñ•½Ñ˜ÀY¯«”FPyF5¾Îz]}ŸÒ}¤èµŠ†ã+ Îg œõºÊhDŸÐhDãKá{ðeMä‚´tZïùª)œfŒ Ç…j‘SW¨‘L„nCE:5¼Oæ¼óÎ802Hù¼Îö…‹7âóæóè3Fô›Lk|Q\¼Êú"F²¹U펳‹Ï Ç—ŠÁJâ¬×UJ#Ø‚÷j| œõºú>¥ûHÑ‹_ Ç—ªÆUÔÎz]¥4é5Õø8ëuõ}j¢zÈŽð7ÕC‡Ó gB#ò˜@£MVa+Ö<æ6•wlÁ²p²#›"ïp8ÍN9޾Šü­Bx">º ?ê´ÄÁ»¼¼€#”O\X(Á9‘ /Aa¡>2ð”Hš݆*É1|fXJÒÀK°MÒ¤è6TáHÎñ¸”’4ð}?)݆*Éç=nÔ#)Y#/ÁÇØ¤è6Tü¨Óo#=6•7p`d”¢ï€òÂíÇEÑ+þ¤eã;þ¡…Û„ÆÅqqyÐhG2qÊšnÁÿp¼½}i¤€;þ¡'ÁQP4ÑhÿГàOé>R|[è‡ã-—K#Ý”ºãÖë*¥¹^£QãÖëêû”î#Å“®ŽšK#Mùîø‡õºJiI—×hT£Åø‡õºÚö¸H¡Â}*ŽÈ¸Š#vêâ—É‘LÄy#WqÄN]ü:7’™8"oà*ŽØ‹Gž–éö›‹ßXg£=2½»ù¿„FŽã¢è ñ%ðO &B·¡âGvïâA@•7p`d”²>œí WoÄÌãà£ÉOº>|k+ÔhL£ <‰î#ÅË"ûÝG³^WZ”Ù½ñXB#ŠÇ€F#MàÖëêû”î#Å7÷»f½®>tËsq„Ç2A<æ5Õh1þa½®¶#.x(ç}Lyß¼€+ï{PǸÌdÆûæ\yßÃy6ôýÑ«.Çݳ±N2zÑæðž ¬ è#h| üÃz]}ŸšÈÏiÁñ¸ççG¸‡`çY|B#ÇqyWìsT¨‘L„nCÅ: ÁöaHÞÀ‘QJ}8ۮވ̣ËâáoR¾µj4¦ÑŽd{øõ_¸Z¡¶`=^¡¶‡«hÅh4X¯«íŒ‹'ÊåS>+oàÊgΠX‡^+<ïþ€õºúÐK'È}<–Ñ*¯Ñ¨ÆWŒX¯«ïSº¿VqÞýëuõ¡—:NïÀ—•Ј>  ÑˆÆ—À?KðeMä‚´tzÞsÁ3ÌWMào·Š‚Ýqzñ¹áøR1XéCœõºJiô[ð@£Q/³^WŸ·[E7¢¿Ž/U«¨ œõºJiôh4ªñ%pÖëêóž©Ò#ü ÇÇãEõÐá¬Â™Ñ<&Òh“UØŠ5zùyÏäô0fÃñ‘M‘w8œe'ÇG_EþV¡F2º =êÔð>qp.ï€#”JpNäÂKPX¨Œ¼%’&E·¡ G²Ÿ–’4ðl“4)º U8’:7€R’F^‚ ¯IÑm¨Â‘lãF=”’4ð|ŒMŠnCE:5¼=ÅŽM=0p`d”¢ï€ÒÂmÃqQôÂYÙ¸ÇYá6£ñEq\\4šÂ£‘èSÖt ¾áx{ûÂY ÇÙIðŒFTF4šÂÙIðïSºÝj8Þr¹p¶)Õã¬×UJ#r½F£Mà¬×ÕßS»î#Å“®Žšñ¦|w|g½®RAÒå5Õh1¾³^WŸ%.R¨0d™Š#òF®âˆ…ºøer$qDÞÀU±P¿NŽd"ŽÈ¸Š#çâ‘gceº†ãbÞ…³#Ó=Îz]e4rE/…‚‰Ðm¨èQ§†w.Ty#FF)ÇÃÙ¾põFÁ<>šü¤Ç÷¶BÆ4šÂ£‘è>R´,Òp\r}´ÂY¯«ŒFF4šÂY¯«¿§vÝGŠo:.wÍz]ítËsq„Ç2A<æ5Õh1¾³^WŸ5.x(ç½Nyß¼€+ï»RǸLŽdÂûæ\yßÕy6ôý±«. Ç›¬Îû œõºÊhD9ÐhDãKá¬×Õ÷©‰üœŽË’"?w8Íâ9ŽË»bŸ£Bd"t*zÔ©á}‚íü€#£”óál_¸z#Î`]“óá[[¡FcMáÁHö÷ïÿÂÅ µ¿ùç<\¡¦5â%Æi4¢Ñ¾³^WŸO”Ë«S>+oàÊgUçP¬Ã®6_Ùý œõºJi•×hTãKà¬×Õ÷)ÝGŠ^«h8¾²à|–ÀY¯«ŒFôiF4¾¾_ÖD.HK§õîNj˜¯šÂiƘÐÈq\¨9u…ÉDè6Tô¨SÃûdÎ;ï¼€#ƒ”ýýp¶/\¼û›Ï£ÏÑo2­ñEqñF(ë‹ÉæVQ´;Î.>7_*+}ˆ³^W)` Þk4ªñ%pÖëêû”î#E/~5_ªWQ8ëu•Ò<¦×hTãKà¬×Õ÷©‰ê!;Âßp|<^TN+œ Èc6Y…­X#ð˜ÛTÞ±ËÂÉŽlмÃá4;Ihä8>ú*ò· 5â‰Øu*~Ôi‰ƒwyy#F:)Ÿ¸°P‚s"^‚ÂB}dà%(‘4)º U8’cøÌ°”¤€—`›¤IÑm¨Â‘œãq(%ià%ú~Rv݆*Éþ7ê‘”¬€—àclRt*~Ô釷‘›Ê802JÑw@yáö‡ã¢èÒ²ñßiá6¡ñEq\\4šÀÑLœ²¦[ð?oo_iàŽïô$xB# *€F#Mà;= þ÷”î#Å·…~8Þr¹4ÒM©;¾³^W) Èõj´ßY¯«ïSºOº~8Nh.4å»ã;ëu•Ò’.¯Ñ¨F‹ñõºúìq‘B…!ûT‘7pGìÔÅ/“#™ˆ#òF®âˆºøun$3qDÞÀU±;<-Óí7ÿavzdzwò ÇEÑAãKà{ &B·¡âGvïâA@•7p`d”²>œí WoÄÌãà£ÉOº>|k+ÔhL£ <‰î#ÅË"ûÝG³^W;-ÊìÞGƒx,¡Åc@£&ðõºú>¥ûHñMÇýî£Y¯«nyî ŽðñXF#ˆÇ¼F£-ÆwÖëêsÄå¼)ï›7på}ê—¹‘Ìxß¼€+ï{8φ¾?zÕå¸{6ÖIf§mïÙÀ‘Ј>r ÑˆÆ—ÀwÖëêûÔD~N ŽÇ=??Â=8Ïâ9ŽË»bŸ£Bd"t*~Ôé ¶CòFŒŒRêÃÙ¾põFÔ`]“úð­­P£1&ðp$ÛïÿÂÕ µ ÜèÙð µ=\E+ÖhD£ |g½®>g\ëtþÅ:ôZáy÷¬×ÕN/5ž côñXF#¨¼F£_1¾³^Wß§t)~­â¼ûÖëj§—:NïÀ—•Ј>  ÑˆÆ—À÷%ø²&rAZ:=ï¹àæ«&pž1&4rªEN]¡F2º ?êt‚dÎ;ï¼€#£”íál_¸z#¶`]Æ“íá[[¡FcMàt$ûÛ­¢`wœ^|n8¾T Vúg½®Rý<ÐhTãKà¬×Õþv«(ðFôâWÃñ¥ªq5³^W)ÞcF5¾Îz]íï™ê!=Âßp|<^TÎ*œÀc"6Y…­X£÷˜û{&ï ‡1ŽlмÃá,;Éhä8>ú*ò· 5’‰Ðm¨èQ§†÷‰ƒsyŒ餔¸°P‚s"^‚ÂB}dà%(‘4)º U8’uøÌ°”¤€—`›¤IÑm¨Â‘Ôñ¸”’4ð}MŠnCŽd7ê¡”¤€—àclRt*zÔ©áí)vlê€#£}”nŽ‹¢ÎÊÆ=Î ·/Šãâò ÑDŸ²¦[ð ÇÛÛÎ =ÎN‚g4¢ h4¢ÑÎN‚ŸÒ}¤è¶PÃñ–Ë…³M©g½®RAë5Õhg½®þž:t)žtýpœÐü‹4å»ãëu•Ò’.¯Ñ¨F‹ñƒõºú{;wÝ†Š‡!ËT‘7pG,ÔÅ/“#™ˆ#òF®âˆ…ºøur$qDÞÀU±8<+Ó5ó.œ™îqÖë*£‘ã¸(:h|)üL„nCE:5¼sñ  Ê802J9Îö…«7âæqðÑä'=¾µj4¦ÑD÷‘¢e‘†ã’Ãè£Îz]e4¢x h4¢ÑÎz]ýýÛ¡ûHñMÇåî£Y¯«ƒny. ŽðñXF#ˆÇ¼F£-ÆÖëj_ょrÞë”÷͸ò¾+uŒËäH&¼oÞÀ•÷]gCß»êÒp¼É꼯ÀY¯«ŒFô‘F4¾Îz]}ŸšÈÏYÁ±á¸,)òs‡Ó,>¡‘㸼+ö9*ÔH&B·¡¢GÞ'Ø> É802J9Îö…«7â æÑeñð79¾µj4¦ÑŒäx?üú/\¬PÇ›/pγÁjZ#^bœF#Màëuµ×¸x¢\^òYy#W>«:€bv­°áøÊÞèLà¬×UJ#¨¼F£_g½®¾Oé>RôZEÃñ•ç³Îz]e4¢Oh4¢ñ¥ð=ø²&rAZ:­wwRÃ|ÕN3Æ„FŽãBµÈ©+ÔH&B·¡¢GÞ'sÞyç¤}áâ8Þ|}ƈ~“i/Š‹7BY_ÄH6·Š¢Ýqvñ¹áøR1XéCœõºJi[ð^£Q/³^Wß§t)zñ«áøRÕ¸ŠšÀY¯«”Fà1½F£_g½®¾OMTÙþ†ããñ¢zèpZáLhDh´É*lÅÇܦòŽ-XNvdSä§ÙIB#ÇñÑW‘¿U¨OÄ¡ÛPñ£NH¼ËË80ÒIùÄ……œ¹ðê##/A‰¤IÑm¨Â‘Ãg†¥$¼Û$MŠnCŽä@)I#/AÐ÷“rè6TÑHŽ÷¸Q¤d¼c“¢ÛPñ£N?¼}ŒôØTÞÀ‘QоÊ ·?E¯ø“–ïøA · /Šãâò ÑŽdâ”5Ý‚ÿáx{ûÒH wü 'ÁQP4Ñh?èIð¿§t)¾-ôÃñ–Ë¥‘nJÝñƒõºJiA®×hT£ÅøÁz]}ŸÒ}¤xÒõÃqBsi¤)ß?X¯«”FtyF5ZŒ¬×Õ¾ÇE †ìSqDÞÀU±S¿LŽd"ŽÈ¸Š#vêâ×¹‘ÌÄy#WqÄî\<òl´L·ß\üÎ:ôÈôî"äÿ9Ž‹¢ƒÆ—ÀL„nCÅ:íÞŃ€*oàÀÈ(e}8Û®Þˆ5˜ÇÁG“Ÿt}øÖV¨Ñ˜Fx8ÝGŠ—Eö»f½®Z”Ù½ñXB#ŠÇ€F#Màëuõ}J÷‘⛎ûÝG³^WÝòÜAá㱌FyF5ZŒ¬×Õ~Äå¼)ï›7på}ê—¹‘Ìxß¼€+ï{8φ¾?zÕå¸{6ÖIæ mïÙÀ‘Ј>r ÑˆÆ—ÀÖëêûÔD~N ŽÇ=??Â=8Ïâ9ŽË»bŸ£Bd"t*~Ôé ¶CòFŒŒRêÃÙ¾põFÔ`]“úð­­P£1&ðp$ÛïÿÂÕ µ ÜèÙð µ=\E+ÖhD£ ü`½®ö3.ž(—wNù¬¼€+Ÿu:€bz­ð¼ûÖëê —O1úx,£T^£Q¯?X¯«ïSº¿VqÞýëuuÐK§÷àËJhDŸÐhDãKàÇ|Y¹ -ž÷\ð óU8Ï9Ž Õ"§®P#™݆Šu:A2çwÞÀ‘QÊöp¶/\½[0.c„¿Éöð­­P£1&p:’ãíVQ°;N/>7_*+}ˆ³^W)~ h4ªñ%pÖëêx»Ux#zñ«áøRÕ¸ŠšÀY¯«”Fï1F£_g½®Ž÷Lõáo8>/ª‡gÎŒFà1‘F›¬ÂV¬Ñ{Ìã=“wÐØ ÇG6EÞáp–d4r}ù[…ÉDè6Tô¨SÃûÄÁ¹¼FŒtRJ\X(Á9‘ /Aa¡>2ð”Hš݆*É:|fXJÒÀK°MÒ¤è6TáHêxÜJIx ‚¾&E·¡ G²õPJÒÀKð16)º =êÔðö;6õÀÀ‘QоJ · ÇEÑ geãg…ÛŒÆÅqqyÐh F¢OYÓ-ø†ãíí g€g'Á3QP4Ñh g'Á¿Oé>Rt[¨áxËåÂÙ¦T³^W) Èõj4³^WOºOº~8NhþÅOšòÝñ“õºJiI—×hT£ÅøÉz]K\¤PaÈ2Gä\Å uñËäH&∼€«8b¡.~ÉD‘7pG,ÎÅ#ÏÆÊt Çż gG¦{œõºÊhä8.Š_ ÿ¡ÛPÑ£N ï\<¨òFŒŒRއ³}áê8‚y|4ùI‡om…i4…G#Ñ}¤hY¤á¸ä0úh…³^W(h4…³^WOºßt\î>šõº:é–çâe4‚xÌk4ªÑbüd½®Ž5.x(ç½Nyß¼€+ï»RǸLŽdÂûæ\yßÕy6ôý±«. Ç›¬Îû œõºÊhD9ÐhDãKá¬×Õ÷©‰üœŽË’"?w8Íâ9ŽË»bŸ£Bd"t*zÔ©á}‚íü€#£”óál_¸z#Î`]“óá[[¡FcMáÁHÎ÷ïÿÂÅ u¾ùç<\¡¦5â%Æi4¢Ñ~²^WG‹'ÊåÕ)Ÿ•7p峪ó(Öa× ޝìþÀÎz]¥4‚€Êk4ªñ%pÖëêû”î#E¯U4_Yp>Kà¬×UF#ú4€F#_ ߃/k"¤¥Ózw'5ÌWMá4cLhä8.T‹œºBd"t*zÔ©á}2çwÞÀ‘AÊù~8Û.ÞˆóÍçÑgŒè7™Öø¢¸x#”õEŒds«(ÚgŸŽ/ƒ•>ÄY¯«”F°ï5Õø8ëuõ}J÷‘¢¿Ž/U«¨ œõºJiÓk4ªñ%pÖëêûÔDõáo8>/ª‡§΄Fä1F›¬ÂV¬xÌm*ïØ‚eádG6EÞápš$4r}ù[…ñDœº ?ê´ÄÁ»¼¼€#”O\X(Á9‘ /Aa¡>2ð”Hš݆*É1|fXJÒÀK°MÒ¤è6TáHÎñ¸”’4ð}?)§nCä|õHJÖÀKð16)º ?êôÃÛÇHMå¥è; ¼pûÃqQôŠ?iÙøŽŸ´p›Ðø¢8..MàáH&NYÓ-øŽ··/´pÇOz<¡@£&ð“žÿ{J÷‘âÛB?o¹\é¦Ô?Y¯«”FäzF5ZŒŸ¬×Õ÷)ÝGŠ']?'4—FšòÝñ“õºJiI—×hT£ÅøÉz]{\¤PaÈ>Gä\Å;uñËäH&∼€«8b§.~ÉL‘7pGìÎÅ#ÏFËtûÍŬ³ÑILï.B@þ/¡‘ã¸(:h| ü,ÁDè6Tü¨Óî]<¨òFŒŒRÖ‡³}áêXƒy|4ùIׇom…i4‡#Ñ}¤xYd¿ûhÖëê¤E™Ýûh%4¢x h4¢Ñ~²^Wß§t)¾é¸ß}4ëuuÒ-ÏÄ>Ëhñ˜×hT£ÅøÉz]G\ðPÎû˜ò¾y#WÞ÷ Žq™ÉŒ÷͸ò¾‡ólèû£W]Ž»gcdNzÑæðž ¬ è#h| üd½®¾OMäç´àxÜóó#ÜC0ó,>¡‘㸼+ö9*ÔH&B·¡âG`û0$oàÀÈ(¥>œí WoD æÑeñð7©ßÚ 5ÓhG²=üú/\­P[°Àž ¯PÛÃU´bF4šÀOÖëê8ãâ‰ryç”ÏʸòY§ó(Ö¡× Ï»?`½®Nz©ñ£Ç2A@å5ÕøŠñ“õºú>¥ûHñkçݰ^W'½Ôqz¾¬„FôiF4¾~.Á—5‘ ÒÒéyÏÏ0_5óŒ1¡‘ã¸P-rê 5’‰Ðm¨øQ§$sÞyç¥lgûÂÕ±óè2Fø›lßÚ 5Óh§#9ßn»ãôâsÃñ¥b°Ò‡8ëu•Òè·àF£_g½®Î·[E7¢¿Ž/U«¨ œõºJiôh4ªñ%pÖëê|ÏTéþ†ããñ¢zèpVáÌhi´É*lŽÇ<ß3y=ŒÙp|dSägÙIF#ÇñÑW‘¿U¨‘L„nCE:5¼OœË{`àÀH'¥Ä……œ¹ðê##/A‰¤IÑm¨Â‘¬Ãg†¥$¼Û$MŠnCޤŽÇ  ”¤€— èkRtªp$Û¸Q¥$¼c“¢ÛP…F’øh]ßÛ¤ÅÖ†ãBæ…³Ro³bkFã‹â¸ ™óÎ;oàÀÈ(å|8Û®Þˆ3˜G—1Âßä|øÖV¨Ñ˜FS8‰óÓŸï…ã5bôè럷Îq¼x Ö‘øoˆ+GQ§Vú¼€«•¾ºEù~vU¬áÑ5¬š4v0¼;Õ­¢è`‡ÕŽ‚»•^ଃPF#ry@£/…³Bß§&òZª÷E¸†¹‘)œf' Çå?‘¿U¨‘L„nîC4¼O¼ËË80ÒKqkíôl_xüFü»ÒƒÙž·Îñø·þw¥÷â7·t¡Iv´áÑõÊš4x#N€lníA‹0»„Òp|Ác\{Là¬ïNJ#p^£Q/³¾;ß§&ª"ì8qÃñQ]Qq8­Ü$4"?4Údu©bÀÏlS1.=¶Ý—®-ŒÃMá4Nhä8>†'r… 5‰pë#r4ÊÌã]üø‰·kK°[á£uÝzæ<ëI|´®ÛÅœg`=‰÷Öéw6XÞoj=wÖ÷8UW?ÜW¿OÞÀÕ¯¸ÓŸa™É©ë¼€«7b§?é:5’ÿÂÕ{“7põvqX«~Òcê7ɸúM:]SKÌ1õ›ä\ý&gì(ÔDœS#É8Éÿýÿù_¿GÿþÃ?óó34”¯?À½F‡W‚×îw!x]û§®?Ô¼ÿ¸Y/¼o¿2¼b¼,ÝÿnÅø_–Ò?uý¡ÎàŸÎÈv៵ÿÁëøÔÿñ?ÿ÷ÿñÿüÿþßþÿUréÂÏDyLP-1.10.4/Data/Netlib/scrs8.mps.gz0000644000175200017520000004620610430174061015347 0ustar coincoin‹³K®9scrs8.mps¥}Û²í(’ä{›õ?ì82 nðX§úbV••“™55óÿ?2°Ö^Á%„†.ë¶V­íÇ‘ˆpœ_ÿò÷¿~ÿóÇ/¿ÿÿýß~ÿÇ¿þø÷ûúõëë—üñgþÿòŸüòÛ/ÿøËßœû\ýí_¿ÿŸëê?ÿ£¾úËÏÿ]]ýö×?ÿëºúãÿþúŸ×Õÿùû\WýÛÿßê/ÿõÏ÷¿ò___?ÿþ׿ýõ—ëê×|ùùË?þ^·ì¿×|ùêoÿüóuõ·rõë_þüççêçÿœ ¯«ÿøý¿~ý0üú‹ºÛßÿ×?WWA]ºBuEêŠÕ•¨«¨®R}•ÉêRý@ªHõ©~ Õ¤úT?êRý@ªHõ©~ Õ¤úT?êRý@ªHõ©~ Õ¤úT?êRý@ªHõÃ÷Õ¿þ,O»ÏUyŸ«ÿùõÏ?þùw¯zÌ«Ìñ*s¼Ê¯2Ç«Ìñ*s¼Ê¯2Ç«Ìñ*s¼Ê¯2Ç«Ìñ*s¼Ê¯2Ç«Ìñ*sÔUPW ®P]‘ºbu%ê*ª«äUæ\}ôz¤zŒT‘ê1•c^å˜W9æUŽy•c^å˜W9æUŽy•c^å˜W9æUŽy•c^å˜W9æUŽy•c^嘺 ê Ôª+RW¬®D]Eu•¼Ê1¯r,¨ *ǂʱ r,¨ *ǂʱ r,¨ *ǂʱ r,¨ *ǂʱ r,¨ *ǂʱ r,¨SWA]ºBuEêŠÕ•¨«¨®RP9TŽ•cAåXP9TŽ•cAåXP9TŽ•cAåXP9TŽ•cAåXP9TŽ•cAåXP9TŽ]WêþÞý§2N]ºBuEêŠÕ•¨«¨®RPTÆÊ8P*ã@e¨Œ•q 2TÆÊ8P*ã@e¨Œ•q 2TÆÊ8P*ã@eÜu¥îïÕê*¨+PW¨®H]±ºuÕU• òTþÊ?Pù*ÿ@å¨ü• òTþÊ?Pù*ÿ@å¨ü• òTþÊ?Pù*ÿ@å¨üSWA]ºBuEêŠÕ•¨«¨®¨ü•¨òUþ¡Ê?Tù‡*ÿPåªüC•¨òUþ¡Ê?Tù‡*ÿPåªüC•¨òUþ¡Ê?Tù‡*ãÔUPW ®P]‘ºbu%ê*ª«„*ãPeªŒC•q¨2UÆ¡Ê8T‡*ãPeªŒC•q¨2UÆ¡Ê8T‡*ãPeªŒC•q¨2ÏS÷ðî1•cê Ôª+RW¬®D]Eu•Påª#•c¤rŒTŽ‘Ê1R9F*ÇHå©#•c¤rŒTŽ‘Ê1R9F*ÇHå©#•c¤rŒTŽ‘«{ŒTŽ©« ®@]¡º"uÅêJÔUTW‰TŽ‘Ê1R9F*ÇHå©#•c¤rŒTŽ‘Ê1R9F*ÇHå©#•c¤rŒTŽ‘Ê1R9F*ÇHå©#•cê*¨+PW¨®H]±ºuÕU"•c¤rŒUޱÊ1V9Æ*ÇXå«c•c¬rŒUޱÊ1V9Æ*ÇXå«c•c¬rŒUޱÊ1V9Æ*«ÔUPW ®P]‘ºbu%ê*ª«Ä*«Xe«¬b•U¬²ŠUV±Ê*VYÅ*«Xe«¬b•U¬²ŠUV±Ê*VYÅ*«Xe«¬b•U¬²ŠU©« ®@]¡º"uÅêJÔUTW‰U±Ê#Qy$*D周<•G¢òHT‰Ê#Qy$*D周<•G¢òHT‰Ê#Qy$*D周"bÇþ?þ<ÿ€«_Õž¿®…0õƒŸ°7wòu­í(¸Lد¿úq¸š]ýà:¸zB>Ò¾ èë¯ÞË×BäÃ'ÔÀWn1÷oh៥«ŽÝnü{µôZ7}ØøÞ7^±å1Ú1žÁõ^-½ÖiìïÅÖ1ûôYv­Ÿó_׺ã8NvÝÆp8‰ñ|Àï5ãkõøa? 6IK ¾®ÕÐqOvÕÆàÎ@}¯d_kÚ m á þY†®ïäx·ñ½F;nã>Ê2'³,ëØ›nÈý @ç-¾—篅ú•@ýquÃ4è,àWš|/ðy8ámPðïžôÉ o_@ü×—tãqôÕù[U0êÒ<œð0ƒ'fp0àxÂqGN'œfp2à|Âyg.'\fp1àñ„Ç<ðtÂÓ žæð¢¹¹Ô7Cx‘ƒŒà¿þó÷ÿõ޵Á KEÝ0ã.xóÎA|F¯¿ ÷$Á =ÉF8á<ƒ³—.3¸ðxÂã  x:áiOsø{*;˜ÔÖ#ä1ü{º:®óo,ÔÁïErzºzK ’0!;§§«·$`À˜¹™®Þ’ A‚cöÍtõ–„ “5ÓÕ[6HxLc3]½%ƒD†$eV§§«·$Ñ ‰c’²à¢¦«·$É I’ÔLWïHÚ/W=¼' BjºêÝhVú!ùÞC3Ÿ®zwíNÒeeôŽ}Mƒ;vÝÆ€x0B=ãón4ßT£Lo¬›z7 ëÙ®7ÖM+öÙ¢¢7ÖM+öÙº©7ÖMû'$þÈ•#©uSïFÓÕ¥'ÔÀWn±ízwmGº™í¶ÿLRûéêRãøÝº)ºƒÅšíz7š•ªYš7ÖM½ õl×X7m»7Ç>qr)©uSïF³Ò¥6~@m.¶³]cÝ´m£’ßQžIÍ7½ÍJ§mlg»U ÍÖM½±n:˲z¶k¬›öY†p #¦zºêÝhV:Ôf¶ëݰ³Ôl×X7õn4]U³]o¬›VpcÝԻɼk¶ëuÓÉÛ¤žízcÝÔwh‘$$5Û¼êÙ®n¼žíN^õlW?Ç£ƒ«6J£ü5ÛT•f¶;Éëf¶;éøf¶;Jòv¶k¬íŽë˜žík»“¸Q³]cm×»á¤VÍvµÝfð`Àá„à O8ÎàhÀé„Ó NœO8ÏàlÀå„Ë .<žð8ƒGžNxšÁ“7Öv½NjÕl×XÛT‚ù7êàÍà5Ááá£yzOWïI‚Az9ׯzºzO t$!ÆCBÄúNðž ìH ú#2s½XI÷$dÐàEÎùVq=]½'aƒ„;Âtä$ýÉÞÓÕ{1H¤#áàŽ<Ô}ïI¢A{’\ÞGW?®tO’ ’ä{å@È0—b=]½%i¿\éÙnO’|ì#àÊàìçßË_}L?àʨíïFpÓqø ÿן!ÇGùíc+ÒM–U³ˆœÐRã‚kv GLy˜ú56{ìqÀG—¤—§òá$\ðà·Øßð†fø O~êã Ž{ì8`§#DÏ©aGŽêäáu/¸ì±Ë€=?àÄ¡½wAßÂcÞÇÃËùÊzÁãû“˜ÿòx8rW¿Çg1ß±?‹yw”ýšPÁq}=æ¿ò#rÀO9Áe}=æÃèrÈRÕïÏb¾c_ù\ß}Ìï˜èÏjþaÌG,¯Â¾óùÙÂ÷ØÕù\iIX.øÃ˜oÙÄ|NvŸØÁçSâ Ž{ìë18ÎÅ&† .{ìë1_*-Æ_ð‡1ß²?ˆùpäç„èzòø(æÑa€üŠná‹1_*­ÏC× ÷Øż{½â«{ó=ûƒ˜Ïó>ŸÓ¢TpÜc_ù\i)ÇMÄêÉ?ŠùûrÌ—J+1~oÆý†?ŠùžýAÌã!ÅÄÁ—g1Ÿg(áüÖzÁWë|(uþzÇexÜc_ù2¬Ââ†ü&hïØoR¦©´IrÇ­{2¶9Q"q —=öõ˜Ï•6—Ft5û³˜ïØŒçpÆ#òÕïy õ,æÙ% ©…¯Æ¼Ë'Ž*xÜc_ù\ic^ðgu¾cPçÃAÞsˆ"÷Ø—c¾TZHj¸ì±¯Ç<,ù±Ÿ›2 üaÌ·ìê|™¿ç‹Ÿ¹Ì·JFRýÕÈØài°£wcG€ou9‹ŽÜAŸÑß·N€F*…¥6~@Ýúi£‘0v\ìa&—ÆŽ€‹=ÌvcG@÷„¾0¿6ò¤.*•DKOH×n±ÓHÐez£‘hÿ‘6ô"‡¥Ækx¸ÛrU pI©h¤eÐß=žFKˆJ#Œm÷–†§<í¥R ‘–a©P›¤F";Ú6â} Éû d4Ò2LÛØi$h¨³©5ÁØ0˲J#Œ}–…\Dó˜”ÈFZ†y ¶ vV­‘ÆŽO#‘ƒÖH;.x0vxšè¾*„±#`ò6Q cG@Û >Hž’æA*•Âøu 4ÆŽ€Éë@i$Œ]9Á‘gº’”Fb\UZÄ8¯[ĸã[ ¥µF";ÆuLi$‚±#`7µF";< ¥õju0vœð0ƒ'fp0àxÂqGN'œfp2à|Âyg.'\fp1àñ„Ç<ðtÂÓ ž‚±#ÀÓP Q¯«cGÀ¤Ì•9ÔÁõKƒäˆà?Ÿ¬¿E·$Á ýÙÓÁRR"‡[0H '‘t%r¸%Aƒ;’røÜóA‰nIÈ ¡ž$ùÃEòQ‰nIØ áŽÐ!O­¼9Ü’ˆA"=I¤ƒBR"‡[’hÄŽó¸Çå12(‘Ã-I2HROÂÈᎤÕ;5‰Ž$w<±4 ºŽÙx4‚ûÖHÐu.ÇÊ8¼ÕHÐuÇl¦Oß3}‰y*ÐÂ5{™éÇ@ô5½: ¨D[ìqÀŽ zö"Ñ ‘ D;ìo¸fÏ1„ù½êûokx08%rØbÇ{8òÝ}ÙKGYµ‹§}Ù·Èa‹]ì˜kZêU pH à£(‘ÃûÞ°SŽºüê¿­qð¯¯Ù/‘Ãvr9h*iM|óPŠ 9l±?‰y/åé"+‘Ãû³˜÷Gt˜´Èa‹}=æù¡²bÌJä°Å¾óùÅË)î£ÖHì°?ˆy8rsÁE%rxÀίu iá«1ïFºúý%rØbTçK©¥ð[ìb>WZÎrì¾E[ìë1ŸKMÂ5•Èa‹}9æ_•1buÏb¾cótÄÙƒ$%rxÀ.ù-1¶ðŘϕ–«Æã³˜ïÙÕù¢ë%rØaóeÑ2æ‚# D[ìë1Ÿ+m"æ\ï”Èa‹}=æs¥ÍsနÈa‡}=æ_‹g”_2Jäð€=ùœ5[øjÌã‘gã×ÂßKä°Å¾óéðùéE´F‚ÚŠ˜'Ùœßø5‹æ>nã×ì®”ÈaçÞ×c¾TÚ€1E`%rØb_y*ƒ:*ã%rØaóùî]ùª!^‰ÖÙó 0ç+Q _y$Q:G1?`_yÎp‰ù% Jä°Ãþd<ï`*9%rØb_ù²98q†³9l±¯Ç|,+ãùa±9ì°?‹ùüPrÖ¤Z¥ÜHË ¾Ã?¸ÁL£‘0l(B·í+ááüÂñÖ 7R),µñêÖOµF">ûÌd!>ûÌG">ý y6îZèÿHz‘ÃÒjà+·Øj$‚»ŽÜ¼ÑH´ÿHz‘ÃRãø­ÿ>Õ˜µJ!¸‘–A}÷ †Dp£%D­‘0|$ÚîõeÏ#æ¼V‰àFZ†¥6~@m’¶ ÃG¢mc8R*¢ZV‰àFZ†iC3‰`øH̲¬ÖH>}–y>„ä"ù(z-ÓJ0WæPo<^óÈÛEµTîI‚AÂÈG,å¾÷$`Ààõ—g¨àEi$îIÐ Á¾p¢!°W>÷$dP8ëGwœûDß"‡{6H¸# ¯/§>Õî rO"‰ô$ʦWuÚA¼'‰IìIòÔ•Ê]-r¸'IILabquFÀ-I«wÒ‰Ž¤œÜ~VîÞ‰púH<Á½5áܰ6o4áÜ f»!Âg7D¢œ~IZ¸fg_¶þCM³r˜*xÜcv,k5©g÷©|öªE[ìoxÃ^nÑöÔ—ÏéN99à;öìE»+Û[98·]T>{ì2`‡ÚC·ÿ(¤H>Õ"‡-ö7¼‰yáü—º]o9\ÛÖŠÈá;y!‘[øjÌÃSªE{ìbž_[M©9l±?‹y÷új8Ç|Ù3!Þ#‡Zä°Ç¾óy†É!8©E[ìë1_¶½¥„18ªEëì_å°ÑbcÑÂWc¾ø‡Äj±ó#ö'1ÿ*µ¢T ~‹ýAÌçJ›»-¿ä¹9챯Ç|Y]Èü®ÚSïŸÄüˆ}9æ_•6y‚j±óöu^ŸSDå#ñ$ãåòC»à‹1_*mªïŸÕùžýQÏ•6žçr¾E[ìb>O¡öÐxVç{öõ˜Ï•–¢ä@©ï]öØ×c>ß{„ä*-\9l±?ˆùt„”’p¨Å|LEA‰-|5æá`áȵÈa}=æåÈ£Ó>&».•àÐA­N‘›˜¿kü³˜ŸÀWb¾TZÊmw—7Z9챯Ǽ"Ò"‡-öc›<{ÍáèÄÅZäð€=¥¸ƒ¯Æ¼Ë#jï”Fb}=橬…Üï¾9l±?Ïÿ8|ÌÃJ¨¸Ç¾ó¹ÒBQ=ÇÚCCöØ×c>WZæü¨‚9l±?‰ùô¥] U 4Ò2è¯F†D ÁŒÖH€á#ú­x1¿Íˆ’Ò ÐH¥°Ôƨ[?m4†ÄÅ3“0|$.v˜ùH€á#Ñ?!Ÿ+å¸S*‰–ž†/Ýb§‘8=àÎG¢müGÚЋ–¯á`ûH¤ü²ÏtÚT«h¤eÐß= ‰@£%D¥‘ÃG¢í^ŸƒË7¯T 4Ò2,µñj“´ÑH€á#Ñ·1R8‚–ÐHË0mc§‘ ¡Î¦ÖH€á#1˲J#†Ä Ë\9æú«‚¡×2̵ÕHа³j>F"­‘0|$.8>&º¯J#aøHLÞ&J#aøH”ß~ý¥+c_G÷.ØÎï Vò…ñ{B‰' ƒ‰É{B‰' ƒ‰õÆsñ‹çºÝÏߌþnü Kòø½…Ûø5lÖ#vìJâ$Ï O«òŸ¿µ²U~Œ«UõWF½˜uV~«R ï;ë¾û„b9 å4ëûù›‘ÊF BWõ‚‹qYTâ–qƶâjXjq  ã·€a2IøZ܆H ¡†¥–€arÂà  8œp˜ÁÁ€ã Ç 8pšÁÉ€ó çœ ¸œp™ÁÅ€ÇgðhÀÓ O3xÃ$ÐPÃR/ˆƒa2©ÔsIuðf­¡¨ÇÏÃþÕ)·$Á adGét1ûV§Ü’€Aƒ:”Š µ2›À{4H°'Iþ@O”:å–„  ½_J(GJ'Tê”[6H¸'Pž++{1H¤'ÁXNT¦,ñž$$±'a<ùFÜrK’ ’Ô“H$JrGÒ ÕqKG’‡vEäJÜrî;{8ôþ·œIÖ&P­¸åÜÆfÛXÂg ÌjWû7\³3ù½H±_ô|¹¯&e²Ç{vqGÙÑåG³sŒ•¡ôK²Ãþ†7ìX|¯Çf!:”:e‹ìñHÎ1wE%æzªÅ-[ì2ˆºG~ÍtîEZYö5E¥NÙaÃ5{œçÜoÑ-‹”„ Õ)Ø‹7n¾ó.ß~"uHÊû£˜Ç|õ1ü¥NÙaóñ@öÅ”S9x챯Ç<«0(_J²Å¾ó¹ÂBp‚>åd‹ýAÌÓ)å·%)ìEX[:à‹1_lg½·l±?Šùòð#huÊûƒ˜§#ú—¢J9x챯ÇüW±ØÎ=”ÈûzÌ—J[¼Žjã—G1ß³?ˆy9SFç•:å{1ИZøjÌçJ[tJ²Å¾ó1)|c²Åþ æ¡ì7 |ï¤Ô)[ìË1ÿ£€HRê”-öõ±M)µ¯¥ú¤Ô);ìb>.¿e¢8­NYg—<¡K\i åQÌ—R›Ÿ–(uÊûzÌçJ[¬)-ö'ãù#‰G¬ådò(æìëu>—ZˆÔ^©S¶Ø×ë|®´HÂP¿<Šùž}=æß ,ç–ouÊv,Dï[øRÌç6å±Vb¶—:e‹}=æóÖ9$•ÈûzÌ—J[À¬Ô)[ìëu>Z”<®Ÿü³˜ïÙ×c>–óª1íKò hÃkÇ\láÿ_ËKÀD(ê« à 0¸Å0~%¹—xâ#*éå%Kmü€º…o-näbŸ¹c€aR±Ï @À0éŸP©\Öòp#uÊÒjà+·ØŠ[à4o€;¶ñMJ¯NYj|· @ø(ŠŒ(Q€€‰PÔwO0 @À–µ¸Å0éº÷(–Ÿ>¥TËKÀD(Kmü€Ú$mÅ-†t&%eóAnb¬õ!àF"”iKC30 @fYV‹[ öù@vyx¥V§€‰PæÚˆ[À ;K‰[ p#uŠ·€aRÁ pÁÞ%nÃdò6©5`€”ß~ý¥+c_Gçås6ƒÄZ^2yOÔz 0œA&ï‰Z܆3ÈzãÑ•ok^”¸eRÂkq‹f×â–7û¨_Ãfý8¸cWm„TäçÀµ¸eR+qˤZ5â–I½˜uV+nwÖHÜâóXŠ¡m­N™¤²¨ÐÁõʵ;¨ôi-n™dl#n¡q‹áÜ2~iq‹áÜ2Ix%n1œ[À 5,JÜb8·œð0ƒ'fp0àxÂqGN'œfp2à|Âyg.'\fp1àñ„Ç<ðtÂÓ žÀpn7Ô°(q‹áÜ2©ÔsIuð~+k~*qË=I0H€$Hž×Åú¸¸'ƒu(¹ q}'xO‚ ö$ćpp5 Ý“AB= §ü´Õé6÷$lpO}&iœ[îIÄ ‘AÇ¥—xªV§Ü“Dƒ$BoCæ<\uõãJ÷$É I=I±ÍM ¡V§Ü’´B5-nLp‹ º|t¢oq œÎ-‡Þoq œ;€Ö&P¸ÎýG0ÛŸýGg·1Æ®ÙÅZ Ã…~¤ëÓ\Q§ì±Ç;çYæ÷'švù)£õé6[ìo¸fyæ7\~JÄ… Ô){ì8`G,KC_íÞj)Nǵ:e]zöDG9µë÷#§AÂFܲÅþ†kvïÂËv»[r¥ÔÞ)b>ÓÇàs¹há‹1ï_Š9Vê”=öG1ŸßAH‰[¶ØÄ|ùÌð:y öNÁ=öõ˜‡ËsPJ×þâ¢NÙc_ŽùÅÆ®³R§l±?ˆy:ò»¬l<†Zò 〉‘ZøbÌ—RK¤¤5q}=æs¥vÕ‰þQïÙÄ|®´e½Zn³Ç¾ó¹Ò¾wC+ë•=öõ˜/•6‘óµ:e‹ýAÌóA‘ËqwÊzå {Œù­µ1Oê¼?ÄQRâ–=öõ˜Ï÷îùÜZðV§l±?ˆùRjɇÚGŸÅ|Ͼó?Š©xÈï8_Ÿ­#{ìëc›Rj]~½{®Õ)[ìb^ŽDä’¯œšäQÌGÌÓC`jáK1_Nòï"+qËûzÌcYjPy£uÊû“˜?\Ìc§ä%¸Ç¾óp` ‡7êt›=öãùRks¾±R§l±?ˆùTŒOó<Êa­NyÀž|ypõ1bž‹c»$ JܲǾóá(BÛÀê„¿Åþ æK©Åǥʹe}=橜1iuÊûúØFŠo ð¹óé­NÙb_ù· +G ¨Óm€F"ýÕÈpn,Àhq Î-0ÚCI’H „F"”ésìÄ-4HÕâ4œ[fYV‰[Ðpnios~zJQ@©Sh$B™j+n÷b-nAùh¤NÑâù傣áÜ4ìUâùeò6Qšݽ±…ÿúKWÆò_uŠ…ü‚—(úØ›É{Bé% ç–É{B‰[w‹¾Öø@þ•BZ^2.áJÜb8·ÍÚø5lVÕø“]µQBÑÙIPâ–q­lÅ-4¬*­¸e\/fÕ‰[†5·¼–ä„((uÊ8•@íázÜ’çð¹O•sË$c[q 5,µ¸ ç–ñ H‰[Ðpn™$|-nAùh¨a©eh8·œð0ƒ'fp0àxÂqGN'œfp2à|Âyg.'\fp1àñ„Ç<ðtÂÓ žÐpnjXêq4œ[&•z.©¢ÞhòÀ”ƒ²" ÷$Á 0²\ô)|¦6ßê”[0H`P‡ò¤£’„à= $Ø“QX©SnIÈ ¡žá,JÂ÷$lpOBùÕࣥN¹%ƒD$r€‹¤Ž%º'‰IìIŽbù\m}ÿQ4FqeןR§l±cÇîËS»ˆýGј˜ñ4ïúV§l±ËàÞ½Kù%ÐÚYÿ8ò@C\¨<4Š:e‡ý ×÷î‹^=Rê—´¸å{„rÐG_y<28 R§l±¯Ç|~"SH•:e‡ýAÌcxDŽI‹[¶Ø×c¾lRâ &­NÙb_Žù\a“sCPÇm±?ˆùr/ëÿF²Î ‰} _ùò )iMÜc_y>^ë~Ô±D[ìb¾ˆ¯9—+TÇí±¯Ç|®´¹ÔÅÊze}=æK¥ÅòáT”:e‡ýAÌ—E©ÈybÂJ²Îž `$íܲóéȯĀY©S¶Ø×c>WZ*•­NÙaó¹ÒFHéœ1}«S¶Ø—c¾È3¶œú Ô)[ìë1_*mX\n„/uÊûƒ˜Ï³açó Vy§¬Ç¼ë?cÅ.b>WÚ”ÿ{Gê\¡=öõ˜Ï•–…%Vê”ö1ÿãåÏé·:e‹ýAÏ¥ÖÖoXyóCöõ˜Ï•–˳ª µ<ˆùûƒ˜—ƒ€…ª¡ÑK²Îžo*”qa _Šùr8*uÊûzÌÁ¨ªÍK²Ãþ$æs©ÍsHö¢Ô)[ìë1ÿªµA*/Ä—:e‹}=æ‹t–ˆ#{¥NÙaó±ìgÕòt#Šúj„†s ºÁL#n1œ[Ð fº.8µÀÝH^²Ôƨ[øÖâ4œ[*ö™­ Î-û̹ ç–ö åÇ“B.}Ñ×òt#uÊÒjà+·ØŠ[ðtÝ@Û¹¥oüG“Ò«S–ßÀmç–p”AUŠ…ÏÊ_/BQß=ÑpnA7ZBÔâù¥K€rrYŒN¤–— ©S–ÚøµIÚ8· áÜÒ·£óA9· ‰P¦mlÅ-U Íœ[Ðpn™eY-n1œ[Ú[ &£øT«SÐD(ó@mÄ-膥Ä-†s º‘:E‰[Ðpn©à†s º‰`ï· áÜ2y›Ôš¦{S×[…å¨4È?3^µ, ƒ–Éë Ö°èçxøŽ]µ‘ø¨<þfäZª‚† ºYS:•§âï,P‹P&5­¡LªJ#B™äõìi·"”ñÓŠP8".¨ãƒ&)g”ïàz|A¯m¢¾¡L2«¡ ‡:ÅpX¿(´ÅpX™$¦¡+è†Z%B1VNx˜Áƒ‡38p<á8ƒ£§N38p>á<ƒ³—.3¸ðxÂã  x:áiOh8¬ jM”ÅpX™”Ú¹ô‰:¸öÙö„õÙ+áž$$‡ÖˆB¡VºÀ= $0 É“AduÞ“ A‚=I(ß51„ZErOB áÀ—$ðY‰PîIØ áž|‘ùT÷‰Ü“ˆA"ƒ;Ê3t]ñž$$qp'¯÷5Öw’îI’A’F}‚áP!üÎ`“¤”iJO‚99‰:>O‡•‡Cä·Ï:kF„‚ç>!œíÂÏÞ8_ÔÅ×W¨\³ÇKA{œ”u%e‘²Ç{öäK!j?ä”e"y+J„²Åþ†+öbÄy`ÙÞ;•ÃÂ2Xjî±cÏîó“÷Nb÷ñ2Å:>h]zö€‡ä.éÌÎ\šbJ¢,R¶ØßpÍ1Ï··;2C ³ÔRˆg1Ÿ’£ÀØÂc¾¬È_[ZÞ*’=öõ˜—’nj—¿Åþ æáxóDÊã÷Ø×cþëàÜ$NA©HöØ—c¾lFeŠ”o¿V‘l±?ˆy88a$fuþÏ:ûבQláK1Ÿ+-Å÷Ø×c>WZ"€€êüŸ-ö1ç å”S+{ìb>—Z ¾–ÀÈûzÌ—JÙEQ"”-ö1åTF`¥"Yg/ëD¡¬ô´ð¥˜Ï•6rJ R«HöØ×c>WZ.ò¬e ~‹ýAÌ¿Î}˜_±µŠd}9æK¥%Dˆ¨,RöØ×c¾TÚ<óRÞ6Ob~Àþ æs­ãœì±’ÿȃ˜÷yHœGeà| _Šù<‘ñL΃rXÙc_ùp¼R!Q)[ìb>Úb-C¨ŽÚc_ùP,`sskÉûzÌçJë_Ë X«H¶ØÅ|t>$e‘ò€0ľó9ßËqœÄR«HöØ×c>WZ)Šv©Ðñ[ìOê|©µA±ãûzÌC93*H~üµŠd}=æË¨2O;•çQÌ÷ìë1ÿÒÀ€°»Ü>ë&½XD52V 0Z„B†Ã RëlXäˆÎsRB É@–Úøu ÔÅpX¹Øif?B†ÃÊÅN3‡2VÚ'Žü|’gQÇ!T$KOH×n±¡œîd;¬ôÿhGzÉRã5œl‡ æ÷HR2‰EôwOÃai´„¨D(d8¬`ç^’GCâOCóoÄ"Kmü€Ú$mD(³6žìêsÔ‘K¨?×¾u4‹LÛØ‰Ph(dªE(d8¬Ì²¬¡á°ÒÞ¢­!&u|ÒH,2ÔV„BÃΪE(d8¬ T$Z„b8¬\p2V&ºJ„b8¬LÞ&Í@—ã•qÅèu§Äy”Z¾A)Èøu d†‘Êäuð¡Xmä<Î’<‹Ò"”qAV"Ã/iÖ”N„âèð€ñd7*ê´~\F7'ܼE£p¶J—qéj•.ãâ1ëÒNé2ìÒ¡Òs@9—”_Ê$¯ßìú£¤¼CHJÃ2NÌVÃBC©J­a!ÃHeüžQ2ŒT&y]kXÈ0RAJUj5F*'<ÌàÁ€Ã ‡ 8žpœÁÑ€Ó §œ 8ŸpžÁÙ€Ë —\ x<áq<ð4ƒ'2ŒT†R•zÝ› #•I¥ž+§¨ƒ·'”c€¤Dáž$$;D%")Ê- $ÐärŽKžÅ«S‚îIÐ Á #D%B¹%!ƒ„$\ðaQ"”[6Hx@’*óJ%B¹%ƒDpdšóD eâ=I4HbOòŠÁg]ê[„rK’ ’„#›ÌQ‡J„rGÒêÑ KO‹'™Ó–ÓHåáû[ÃrnÈY›'µ–s;ζágÛ§!ÿ/´ð†=ñ_ƒ öÈI‰P¶ØcÇ^6b…c¬2Åò]”e‡ý ×÷^>Á v:(Ûû‹:£÷ر¿÷ÁG¦€ 1ˆrBÙc—žý¥Ný÷þXlžHkXvØßpÍÎ.Oרõ+«!£ó”Ö+Ê*»?Êþt®—Šb>žs`儲Ǿót xÈꘟ-ö1Ÿ£sº9TN({ìë1ÿúZã8EuJÐûrÌç ›c4¿K@©l±?ŠùDeÛg#BYgÏA›KUà¾óeM*§«S‚öØ×c>WZ”\k:æg‹ýAÌ—R˹K@9¡ì±¯Ç|®´ÂX™ÈÈûzÌ—J œ«¡ì°?ˆù,÷$Ñ ‰42++ʇåž$$‰F.?¹¡Ü’´z4­aôI9?jÒ·†…N–‡#ì·†…ÎýŠùžýȦ#ZŸbµCÞ?Šy ïrÒtð¥˜Ïmò%I´‘ÊûzÌ—Eå˜0$%BÙbRçTŽ„ ¤ŒTöØ×c¾TZt޵‘Êû“˜Ï•6æR«D([ìb^%'JEò$æóˆ?ß+¦¾óx„œ±^D´Ç¾óÅ82ÅÚ› ,1o±?Û”Ï÷¹T‹PöØ—c¾TÚŒO¢OóÙc_ùp„$¹P“2RÙbóû#æ÷R Z„²Ìþõò°ñµäMÄ|®´™«Ó|öØ×c>WZÂÀ ÊHe‹ýAÌ¿|XbòR+hpýIÌGWFàµÿ΃˜²?‰ùb“£jÊû£˜ÏÕÁç“: èAÆåZÁ1¸ØÂ—b>ÃÁy‡ 4,{ìObÞ…˜§±µe‹}=æK¥-_ÆÄ) ËûzÌ…¬Dö 4,{ìë1_*mÔykÊû£˜/êÑ*iMôW#Ç…h°£5,lø°P»; òøáÜ'ý­ã ‘Šd©P·¾ÝhX –‹g&%lø°\ì<óaaÇ…zŒFR‡´&ó@m5,4ì¬ZÆ ÑH„¢5,†ËgÇ…h¢Ë«4,†Ëäm¢Äº{co7ëæbã”Êäu †Ëäu 4,“6Ž 2È‘G¢”e\•†Åða!š5¥«¨èòô¯ã’ŒŠ:톗ÕÌ 7oÑ(œ­†e\ºZ ˸x̺´Ó° »t¨añ|``Ò°Œóº×°ä!Ôë1„¨4,ãÄl5,4”ªÔ6|XÆï¥aaÇe’×µ†… ¢¡T¥V°áÃrÂà  8œp˜ÁÁ€ã Ç 8pšÁÉ€ó çœ ¸œp™ÁÅ€ÇgðhÀÓ O3xbÇ…h(U©×½Ùða™Tê¹rŠ:xs nžýÄs+ø·å–$$zŸÄ²ó—”{ Ü“€AÔ9Ê$ö¾Õ+Ê- $Ø’P~oÆä’C%B¹%!ƒ„¨³­Að”_ñA‰PnIØ á–¤ý\>³Å¨D(·$bu¢EH@ç™ß"”[’hÄ–$å×pHe^‰PnI’A’häòãóLI”厤գ5–IÌQLJÃrú°<akXÎý,[ìb¾,JcrNÁqýIÌ;熠|XöØ×c¾ÄsRêò¡ì°?Šù²¾å„•‘Êvˆ@ZøRÌ—R ÎQåŒàÅü€}=æÃ\,»Í¢¡ì°?ˆù¯’ïÄI”‘ÊûzÌÿ(#>¬O¬{‰P¶Ø—cþ]i±œ¦D(;ìbþ¥ÔO™Ü+Ê:{ô)ðЗbŽr2µ©Ã€öØ×c>— yˆŒê0 -öG1ï\ÊcZÔ–-öå˜ÕÙ E-©D([ìOb^(Wj½¡ì°¯ÇüK¬è9BÐ"”Uö2*-ßÔa@ë1Ÿ+-äa™ˆ¡XìM©¤Ü©‰¸…Ocþ®ñb~_ŠùÅ­Á§óàÙoÊû“˜Çò5¼2RÙc_ùRi1Q­•1?bT狳l‘±(Êöât”§#-|)æ_Ožc5¶y‰P¶Ø×ë|®´!qDÖ"”öG1_η”$ÊHeýIÌ ÆX+â_"”-ö'1Ÿ‡BQ\`%BÙaóù‡×Òógݤך¨¯Flø°°,À4Ç…]w¶[±ÉDµŽƒÝHE²Ôƨ[ßÖ6|X*ö™I >,û̇… výé¶e¤V‘°‰P–žP_¹ÅVç‡Û>,}ã?Ò“^„²Ôø~çÃÈH¡V‘°iMÔwO6|XØ–µ†Åðaé»7?‹Óv#­ÉR? 6I[ ‹áÃ2h#³ÏCÆXË@Ø´&Ó6¶–*†f>,lø°Ì²¬Ö°>,ý-B.Ó„äk »‘Öd¨†…ݰ³”†Åðaa7¡( >,Üðaa7Ñå]6|X&o“£Åkn8÷WýüÍ(ôµ” ‡•I¡«SmLžkC@_ G&E´Ö°áÒÅÐW üÜÎS%~þf»ÑjÛhT«F82©pd’±³§Ý GÆO{,)Ž€§7îÏߌdêD5½Ã7²¡Ž ‡'pÄ0?w-1ÌO&ɤ„#†ù »¡>D G ó“fð`Àá„à O8ÎàhÀé„Ó NœO8ÏàlÀå„Ë .<žð8ƒGžNxšÁæ'ì†ú%1ÌO&Et.W¢®ß¤RŽí ¤ð¹' IàÞœ0rt¤äpO ôs¤D(±6ÚÀ{4H°%rÜl¢óÀ×·òãž„ êIRîJPû’ð= $Ì! Gïòt»>%HîIÄ î|;CÌ·q—ßÊ{’hÄž$’NÍö[ùqO’ ’ĽµN9yÐ×Ê[’V¦…#=‰ ¤àQ™Ÿði~òpXûŽð¹‰fmrÒGøÜÂó-<üÙžR±GŒ-\±ûrNOþ¯{ûÉGu€Ï{ìï݃;Rô½Ý888wo¼•[ìoxÃN%·}„CžV¥Zù±ÇŽý“®lý§~Ó– „#{ìÒ±_>ê¾ÿÒ1Ïùsb)÷’-ö7\?ù€é ê–„ò›)Öö#ë1_Þlì£$ß—b²’몭ÙEù±Ç¾óù…é"&¥üØbó_¹Iè=\[³‹òc}=æ!B]m⃘²?‰y‰ ‘ªS§âƒ˜±?Šù2aK•òãAÆÅ\'£‹Ò—b>WÚ_€Zù±Ç¾óÅ+8ù«ÒåÇû£˜GE®¤ÌOöØŸÄ<"`žÕÇÉûrÌ¿*-çw¬Kµòc‹ýQÌS9«'b>žr¦ZøRÌ—…¡P´ÛR+?öØ×cþ«ì­¦ä\-Ýð[ìb>WZ`.W+?ö؟ļÄ" õ½Ëû“˜‡rRY¬MoÄüˆýQÌ‹.×úZ{ñ$æ).[ú[øRÌçJË)2Ee~b²7¥™Ë‘_-|ÜÆ¯Y2ÔÊ­{óyüï¢r/Ùc_ŽùW¥õî”ùÉûƒ±M)µRRî%[ìë1ÿr~É#«Æ½ä{"q$êž'1ïŠñ‹D¥üØcPçúx®H¼•[ìb^Š£Žì±?‰yðâ}p¡V~ì±?©óÅ~ÄW[/Šòc‹ýQO)¤r®’nÐHà¡¿æ'Lƒ-Ãü„ûý‰ ‹T?)ñ¤Kmü€ºEåF8b˜Ÿ\ì2sÃüäb—™ù‰æ'Lý’¶ä™‰Sø0”KOH×n±ŽœÆrc~Ò5þ£÷è•K×p¹1?)«šä}%Ý ‘ÀC÷4ÌO˜FKˆJ8"†ùIß½¥œåY€ŽÐHà±ÔƨMÒF8"†ùÉ è]®0Z8B#Ç´p„†â£Z8"†ùÉ,Ë*áˆæ'ý-†bþOPÊ <æÚ GhØYµpD ó¦‘òC G ó“ .†ù ÓD W G ó“ÉÛd(qEïîµòc\è•”Á°5™ú‘päËãH)?ÆET G æÙ>çá(áȸ؞PÛF£ZµÂ‘q½h…#ãŒ=íN82|ÚáyV‚óZ82N¦þAø<ÅËOÁ]þ.F6´ÂêCjሎ#ã⮄#b8ŽL’©Žˆá8Â4Ô‡ÔKøb8Žœð0ƒ'fp0àxÂqGN'œfp2à|Âyg.'\fp1àñ„Ç<ðtÂÓ žÄpaêCêÅf1G&Et.W¢Þ| IÑ*åÇ-I0HBO’"…xŽ+¿•·$`@?7)Û|"qTÊ[4H;ï”â7´Ý“AB= J*笔·$lp×'yºZæ)(åÇ-‰$ Lˆ˜Ë˜v¹'‰IìI8ËVŽ#÷$É I=I ¹"†””ò㎤5ÂêϱDüœ.õ-9Gk¿…#çΕµÉI+9÷Íðlß öçwFˆ.µpÅ^öKåàv©[DG/e±rÙcý½{,Û»Ï^¡|‘a$ñJù±Ãþ†ë{—<¨&„~§Z™øL¨”[ìØ±çIk1‡ ¾›õ—ôjYë¥üØb—ž‹ã0„~§”¯fΣR~ì°¿áš=¦—µ–ïØ£!DŽJù±Î. <`J-|)æáÀ<˧¦Jù±Å¾óþ(Øý9ƒùV~ì°?ˆù¯C^CIš³Ç¾ó?Ç>?{T§æì±?‰yv9Ù)$¥üØaó)ržÙ{RÊUö²ž™S6DláK1_Üç|vZù±Åþ$æ_ ÖÇÞl±?Šù(“;å8²Çþ$æK/ÖRJù±Åþ$æcÙ ŽÕqþAÌØ×c>i<ä@qDJù±Ê^Ö‹Fò©…/Å|Q½$ˆÕ©9{ìë1Ÿ+mŽqÉ+åÇûƒ˜Ï•–ˆ’rÙcó\6Eø•òc‹ýI̧×Iõ½?ˆùû£˜Ï¯v*ßÉ•òc•ÊaØ>(¤…/Å|)µX4½¤”ýrY~c®Š_³hnáã6~ÍîJ)?vîýQÌç*Ë"+åÇû“˜Ï£á¥I{³Ç¾ó¯JëË­üØaóå´á2¸QÊuvJù Úqd=æËÆ—´pd‹ýA/jhäóÛÔ·òc‡ýQÌSâ< HZ8²Åþ`[Jm X{~<Šùû“˜Ï“Μï×iˆ/åÇû£˜GDÇçÌ[º!n$ðP_Äp7X€i„#†ãˆtû£̉µxBÜHº±Ôƨ[TÖÂ1G*ö™‡Ž#ûÌqD Ç‘þ @òŒTK7Ä”KO¨¯Üb+‘Ó-BîGÚÆô½òc©ñ üÎq$îINÅÜ[º!n$ðPß=Åp7ZBÔÂÃq¤ïÞü" yÎOµtCÜHà±ÔƨMÒV8b8Ž ÚŠ 쥪øÈ:zÇ´­p¤Š¡™ãˆŽ#³,«…#†ãH‹>à1y¬•âFy 6ÂqÃÎRÂÃqDÜHù¡„#b8ŽTpÃqDÜD w GÄp™¼Mz5â%^BÿüÍ(ôµ”A Ç‘I¡ï…#±H0}©•“"Z GÄpic(â€Â¹íëçoF±ëŸPßF£Z5‘I½h„#“Œ=íV82~Úá ½X G&É4PÐñý$ÔQ5“lh„#ÃáI#1GÆÅ] G Ç‘I2)áˆá8"n¨QÂÃq䄇<p8á0ƒƒÇŽ38p:á4ƒ“çÎ38p9á2ƒ‹'<ÎàÑ€§žfð$†ãˆ¸¡>D G Ç‘IË•¨ƒ·_n(&ï”ãÈ=I0HBO¾¼N\m<÷$`@O’°H:|íÓ÷$h tÞ)åXU:m`ßÊ{2H¨'¡â?pº;¿•÷$lp÷¸Êçì’äÊqäžD ‘Þ¡R±¨ï$Þ“Dƒ$ö$yÚIôQ5÷$É I= §Üïꨚ[’V¦…#=Ižþ;VGÕȹÍîá°ö-‘sçÊÚ䤎ȹoFfûfä{O°”O=^B Wì>¤<,„ÐÛ¹#»üŸÊ€|Üc=;ñAB¿W,A”X”]–¶Øßpýä}L™‡ÃJP+?öرcùÉçlì?ºåqs˜X9Žì±KÏ.’S±ÿÌ$¹œ:ªf‹ý Wìt”M 4XXb'!¨³f–Ù‹/wä²|Û—bþ•ñe1¨–­Ä=ö'1ŸGˆÏÌ[ù±Åþ(æ)Q GöØ×cþ%ö•ÏM|óCöõ˜/[’ó¼SE݃˜±?Šy)gÓ7‘ì%•ïä-|)æs¥-å!R {ìë1Ÿ+­÷è9(Ç‘-öG1ŸCž’‡Ž{ìOb>”l÷N9Žì±?©óååV~l±?ˆù²šZŽ3D¥üXf/뙎r˜‡¾ó@¬b~Èþ$æ‹h?¡òüð[ìb¾G$æB[K7pýIÌ#1ÅZo„b~Èþ$楼•Ð)áÈû£:Ÿ+M~É&%Yf/züÜqì¹…¯mŽ(•eÈ û(š[ø¸}¥õùý^M%b~tïb>Ïy™`­üØcóœgÝ$ÕÊ=ö'1Ÿ ­óÊqd‹ýYÌç„Ëó uTÍ2;–óž±…/Æíf OÇó'O+µf`œ #ͽŸDRšqœ·šJ~4Ò€aMû^Ûÿå÷þi_‹´Ÿ …ÇÔbê88ç €f-¶SÑç±U®1Õbê-I0H‚ œ­R,Ênµ˜zK ô$£$öI-¦Þ’ A‚=‰HÌ“µ¸H÷$dPO’ˆ_§š«ÅÔ[6HX:Ïûà½ZL½%ƒDz’PDåç¢ß‹©·$Ñ ‰= ä9@ ê°ŒtO’ ’Ôõ‰?ȃǠ6ñß’´ºŠf-¶»ö˜‡úŸ•þïµØsçÊÃ÷ý÷Zì)_*µk±§]fRtùÞZšò;JrO´pÍî!OdG›;%O?X¯Ån±ÇŽ=ò$Aï ŽE*’ª Íe1u‡ý WìÁ»B~ýj( ¨mô¸ÇŽ=;Å#H`h 0(¸ì±KßïàùHL©ÿnåÑQªœðËbêû®Ø!ÆC˜÷_0zŠI¯Å®²‡ÊZªP_ŒùrúoÔk±[ìOb>|Y‰V§?l±?‹yˆE¦S·Ø×cþµµ´ç£S·ØŸÄ|D¯SwØÄ|Ùoådqu|Ãö˜b~§GjáK1Ÿ+mq pAíÂßc_ùRhó?@¬SwØŸÄüQ>&”%µ˜ºÅþ$æs“€‘õbêû“˜Ï•¶ŒH-¦î°?ªóå€ ¯NXf‡â<‘ò{[øbÌ—“ïÀëÓöØŸÄ<Ä<ÐÕò>ˆùûƒ˜/•6€sI¯Ån±?‰ùü¨RY„W‹©[ìOb¾XCÕ[K_‹©;ìÏb¾Í¢ZÎ\ù²D£6ÕG<ˆù\iË’œWK¹±›Ëœ$ƒR™§Ú^¤‡Ob~|Wj1uçÞÅ|þ¥8áƒZLÝbó¯ƒ38©ãöØŸÄ|®´ùÞYmâßbóâ8ú*l^‹©«ì”»“òøc _Œùr4¼8¯×b·Ø×ë|Y‹ep•aÉk1u‡ýQÌD©×à_‹©[ìObžÊé Õ&þ=öG1OI)¨ÅÔögãùâüEðûÿñþ7òÿóýëû ‘£³®æy­¤¿ðî¬Yø³ØÂ=å0ž?„îOÕP '¼8/Å î%À¹µ¶…]ÅÌxþ€<ÑghÙÂñ‚sÑ?Ðg’8SÏMô_홫ù‡’ÀÎ\øýE[o È?Äm~ — ñíjûþhwöhù”›ü^þêÓ½_?ŠóàõÃçß9r³` ?»Ê%|ÁÏ RvTó®^ær×G ú‡ÏX GÇ Ž Î8)x¼àTÃÁMàõ™-åþ¿Fž§?'pQpmý±ƒ¿k†ïõß? 8-<Ìàa 38,ÁqÇ%8Íà´çœ—à2ƒË ü½BèÜõ>ö!Åëª~8‘nᾆCô×5}ÃC Ïs•ë cø»ß_Ô¾lQ¹~ ÏyJr¾f[xUËNº~øÀóë#œV!-œ>ì8úÒõ}þÙ_u0aç|ôyü¥OxCËÉc¸|àù±üjÖ|_Z·üþ4¾,í:uÉÇ&¥üP=yHBcxÝïEòqý@Õ?"Œáu¿‡·sô÷u¿Ÿ*š >Þõýeïçnà8ƒÓœgpY‚Ç<­ÀûÏãut ]¿¤_^eýõç_þüË¿ÿÛÿwyCÊDyLP-1.10.4/Data/Netlib/boeing1.mps.gz0000644000175200017520000004461110430174061015627 0ustar coincoin‹íJ®9boeing1.mps¥}Û²)®íûŽØÿ0ÏÙ•$®®nÛÝg»ÖrøRUîÿÿy„ÈdNüP±²`LÐ!ˆ·||œÿ~ÿøï·ÏðxüŸO_>|ý÷Û/ÿ÷¿ÿëÛû_ßÿû¿Ÿoÿüøöóãþõáïÿxÿþ#}½=ï¿ÿ¿ÿøñï?·²ï¿¾ÿøçǯ?ŽšüûË û^||ýðýûÛçoÇï-о|ŠŸ±òŽúñþ– ÷ŠÕ×—O?ޝHKìùŸÿÅßXüMÅߺøÛÛãWA)øÅ²/,¾¨*Ó쫬iª2S”AUU™R¶ÂÙªÌUe®*óU™geT|…ªf(k‚*ËØWY³âû*kV\‚ŠKPq *N@Å ¨8' âTœ€ŠPÑíXÑŽíˆì «¯‚»Xq+Nį²fEVôů²fE-VÔÆ¯²fE;V´c¥XqkNVSW_&Qųø…ÕU_ůPÅOªøI?ãW+[¯xM¯©â5U:H•R¥ƒTé U2¢JFTI…*©P%ªx­û*pºÒ:]qIWÔêŠ"mÙWù›U?µce—LÕ3SõÌl=ûòx¼½ýñåýMmeûWQöã×{Q¿ö²þñûû÷½})¾¾|ø»øúþñCùõé½øúñõcùõ«,ûõ³üÍ_~+¿þú\~ýúÏùõóÛû‡ÿ-¾ÊÖãWn=v¹ègúz+¾¾~øV|¿’¾ª_)zöåCImüªÊþ.z¿ªš¿¿ ¾¤¯_eYù›ïoE?ãWù›ïoEÍØôûÛ⫨ ŠÖÓW.‹?_¿ùíí½(‹_EY,(~3~¥¯_eY‰ûô^ÖŒ_EÍOe ±ZQ¿Ê²_eͨHì+kOúÊÚ«•eñ«(ûës©gïßK={ÿ•«,˼Ž¥îþüVjyü*FÀÏoÅ8Š-¤¯ü›Iër?ÓWîYúÊ#'ê`¥=ßkÍ*t>~ºûR”ůZÏŠ¾¤¯ÜÏøgQ3~­§¯Üzü‰²æÛ²füÊ5“f]ŠzVÔL_¹fÒ‚Ì—ô•ù’¾2_’†Ô_EÍøµþÊÇ]ë6ú>î\Ú$}|mœˆVñï§<¾¶Ñq~­4_[ëçת!ç×Úúùµölû:¬ÛñU¶pX·õë´nÇWQó´`ÇWÑúiÁޝªìï¢õÓ‚_ù7O v|•¿rجãë´!ëWQó´YÇWÑÞi³Î¯ü+§ÍZËN+u|-œVêø*z}Z©ã«Ä}*å´Dë×imί,ÍÓÚl_‡µ9¿Š²ÃÚZPpþ´ w·‘šdÉø›0¹¿>¿ÿv6QUfÿÖ”qªúÂò7Ó¯˜ªf.ƒêW•8¥‹²èyT-¸¿±ÀA…Ãê7]õ…eëˆå¯@(kbù›©õ¢¨~SÛª/þoS|U¿ PÑŽü7‹žU¿‰µþÆBªü2Šq°üò¥üR_êߤê7+^SÑðž™êW\õ+¶j+¾`…Ë¿•€f\*¿*ˆ8]—aÉ—²ÌW´+Æ%ª¸Tjˆ©¾jùòW°’;)¦ƒ¬½Š/%}UÏ ª UM$Þº)Ç_­Ÿ5穪i©ïEMÒÕ—e#Üê WüJ¥×8ÎT-Ըʾ”V دPÕz©É•ÄRͪ=V³²|%MÕB5ɯ_ÿxÿòó·ÌŠÿ¾n3»Ê1´#ä¶ @Ûÿÿo[‡³Gñ–Ç;;þŸYÀš`8üªímìµy Vÿn ßbME¥ßÖÖ°S]PÁaŽvx†voh_kÑyÅ,Ò®oi?Õµ\áß…Ú zl.phëã‰./¶øæÿ]tÞ‹·ÖÈ·ÖpøLç}^ãËo 2<º?Ò¸R%Ý\ 8|T7)Òntgº¹×zähHö¾EzdÝ´}ÝŒp˜£ž¢lpÞÒžjѽá÷¸q.Ž8ÒE¥M~­´×w9 %À·õP¯óq0ŠJ‹&XQp©€ÃG‡‹öÞkg‚Ûk=D;òh;/O&U-˜#ž!Ñyë‡7$®µÆH„Ñu3·¯i?‚Þ=¸‚›‹Z8Ç`œÓ!œÓ!Ìáï.‰ŸÞeÛ®=Èö-pø8‰6xm8¼!q­õÿ£íü±"—훾¤æh‡9ÚaŽvÈñ‡§mû¯A²íÆ¢ìM¥¿¶í±N¯óü›ÚâDÆeê=z¡óµ€Ãg:—ÞÔ(ïvþ×»ÈymPvS‡ßtþWWm6ø ç½_tÅΣ²rçc‡Ïtþ†óë¦D¯ó¿~ŠëK….ˆk¬µ€ÃGÇ{\» žÃëñžr©Ö#ïÇõhß[ß#Œ½ Ï\Ðs´Ãí0G;äxªL;õm]„ãí8G;ÎÑŽ9z,Ó~±~‰pš£æh§9Ú)ÇÊå9N]Ò®çh×s´ë9ÚuÞiǾoÍ ¼ü±NË®k,àð'|«ŒçðÖ·Iµ¢´——ž×ßëçMåŸß`ŽuϘJ\¢Bçj³Õcä#>=S‰×´ßÔ?¿á‡žZEÒuo”k­5Æ!ÌG”ž7¨}§•J*àðQÚa1 ápFû^ë‘îtißá/®š+¸¹¨s‚g8D>.Ë8¼áÐZkŒCÐ&#®Æ_ŸÅ8//«R‡_ûÇ×wâÌrÀ·­ònçýGTmÚf¬VpTOx+||¾4Ö—ñ¤ ÞÌ—k­G>…Ö¥}k}ß;^µ÷ÖoTû×`ŽC0Ç!˜ãäó=o ®i¿ö¹Ö³3²)B™CŠÃÇ9Dh³í8à ‡ÖZ|vQæP†ogÐ/H„9aŽD˜#òqò‰à¹2Hb*àðaKÎp8#1¶’j=ò™Ó‰9xº3ÁßÐs´?5})bo¦¯µÖíïÈ´Û ÚåhpÒ`ê©6qøSªm‡KªmÜ#Ÿ.îÒ~Dƒ¡»RîÒ¾å“WLÞÉÑàTÀáO8µ†ÈsxëÔ¦Z|–Z¤=·¾Ÿ“Oôv68ÌÑs´ÃíO¿É´ëK¹ãí8G;ÎÑŽù¬ŸDûzIê‚vš£æh§9Ú)Ÿlìí€ôuþýMï„F‰‹Øµ€ÃGiwK\¾kÇáŒö½Ö#ß–èҾ÷ûU"íˆr³âÎ>h’wöA‡_,Sn;o{Gfù–E¯ó_?H¡­(9;ÿÛZÀáコх×Þn­õÈ[z´ðWÁé¢VG¼ÖvÄk-‡_‹÷šÄkñn‡Ç{ïÜ ]ÙXÀáOD.ƒÞF.S-ùœ×£íüq¾Zž‹ o“z':Æi‡9ÚaŽvȧÉeÚ/T»wØbœvœ£çhÇ|vþ¹ÓŸÛ]Ù÷„^@œæð'BÎ>œ‡GOxrNµù>^—ö¾Ýê~Úÿê§æh‡9Ú_>ùºÁxœ“2Ä¿6Ô×w¢›5pÂn;1*ÎÃ@Äy8pøø€õq©IÞ Øµ–|¦õÑvþ¸ÞÒ3VpMûI“w’žáÐsô”¡ÞÐKµÆ8ùÊOÏS¹â ÷ª ~­Ú×w—>ÈvÙLìüv?OŽ¡2r Ï Î ƒø4ÍpxYk=òh‘öÜú~;KŽƒ„ŽÒnp˜£æh‡9Ú!ßE“•¶çm71e¹;y.Z 8|œö(‡7´¯µù¶{öl“R®Ž§åáâ¢!ڤ΀~1`o;oEñ Ø¿ûÛ®“wÈáO.ÉÃámà2ÕzäÄÚÖ÷+“½ \Ðs´Ãí0G;ä ¢²Òº®Ò&8ÎÑŽs´ã혯Ãö®¦tåÞ¤¬êlTÄb£"NÐÀáíFEªõÈé7z´ç…rºü+û_¾/÷â‚„ïÄA¶Z0Ç¡§FF0ÆoÍyª5Æ!È¢e…Káí8§8§˜¯ËV.GæÌ[µhŽC4§4§”¯ÄËÂKé9Úõs›œ!4pa“3ì×Úni×9@oθ¡ýnf‰µÌ‡Ìœv˜9í09)‚ì_Ï,vŽv;G»£Ýæ2í×ÚáæhwsvÓÍÙM—^È´‡;Ú¬vµü‡ü‡ü‡|N"S—ò9cßE­0Ç¡07~ÂÜø 91ŠÈ!sÅ¡î’!üé#$Ñ×nà¢GŽrHóÑvþHÓ e_Ñs´Ãí0G;ä¤7=œ.hÇ9ÚqŽvœ£=û›Ôó7ñ‚vš£æh§9Ú)'4z~Îøô®çh×s´ë9ÚuNßôülðéÝÌÑnæh7s´›œ¬ê¹­« nçh·s´Û9ÚmNÍ%ÏqëË_?ŠG‡”UâŲµ€ÃÇO Ä¾ãðæÊZë‘“›öhß[ß‘=í­oÙ”{pº€ÃëàÖΧ®NxúµÖë gm{ÚT­Kîu†Ó¼ëÜ› 8ÎqŸâ<ÕÞr>Õã<æ yOê£uÉmÏp‚ë‹ZrŽ'#¦|l~¹rÃ!/:÷)¶üÇâf>°âVu*àðñücNûÞä[k=r†æ.í¿ÞUÏr=zƪ‚Ãíϸí‘z¯‰Ã›Ûk­1Ú¡gz÷‹ù ÞõþôçX‡Ï¨8ïSðFmÖZc¬Ãžíxܯò+8]Ôòât$ñ‰~c.I¼· t[Naq1oAγpøx¨´Fäð&Ô³ÖzäLí=ÚóŸ”Gµ· …kÚå¨õpçù¬{`9¼’¥Zc¬Ë{OØÛ{‚kÚïv¨:·ÈŸàÎ)Î)æD¼O»‚ùú ®àšÝ[ÎdcQ^|¥"³Z²Þf¶HµùÍ™u~q†}«s$‰0G"ä‡k.HÄ9qŽDœ#ó‹;=;g·|mZ[ÌéNø(‰:%Ô–ÃÙßkÉMmçLj.H„9aŽD˜#ò+J=;nB ™ÄTÀáO˜vf9¼%1ÕzägXz$æy¼{±f«s$>%ÅR¢pxCâZkŒÄln:kº¤]άŒÚË W<3nœð+õ®ó®wéëîäßö|…¼ßº“’ÎΟð'â6ûY'¼CÚÃÏÚꈴðíñº aŽD˜#æH„ü¶]ÄÞY6M û‚©€ÃÇI´ÎÓ'¼!q­õÈ9õHÌ®»—¯úâíR§æh‡9Ú!?:!Ó®/iÇ9ÚqŽvœ£óÏCÚ×éX.ÓÙAs ä„?3¬éL‚zÂ…aM¸ÅN¶:2ígëûƒ"2í½‹çÛSB³«Ð9h 8ü‰Õ1å‹ç'¼]Óqñ|«Ó¥½ïúÙñž[¿²ˆk-˜ãÐsñçͲÞr(Õãä'ezÚ×´èÎqè¹®Q\Ã…3Œ±Ö‡0?³óÜ)›¢õí­I±ÖvËZ~P¥s•g-àðñè¬ôÈáMtv­õï?ÚÎ˾ëãfq½ÁaŽv˜£æhï.Ë7«îíIyÕí}gI 8ü‰Å YCÞ.fR­G~â²GûÕzíq7Úà0GûSr£ýÌ rÂÛG„R­1Ú_^Èqø‡zË=×[î9¿XîÝ’èzI î–{Û;ƒâ>¥"â†S*àðg2ðÑyÁï„ øÈmâÝꈴçÖ÷×Ôäi±wéeƒÃí0G;ÌÑùí8Yµ{Þö¢dgtg¡4‡?±Pðá\Ÿðv¡j=ò˼=Ú‹›™¾w3³'÷íýÌíÚuh?ì f‘tàpa‘k=ò;Ä"í¹õý•Àç.zmp˜£æh‡9Ú!¿‰øÜ5¦ Žs´ãí8G;æ Ÿ[lpš£æh§9Ú)¿w)Ón/i×s´ë9Úõí:¿î)ÛyI»™£ÝÌÑnæh7ù-ÓçÎâlp;G»£ÝÎÑnó˭ϦÙަ‰Kgœ˜yt-àðQÚí¢‚± œ¹í{-ùðÜ£íükgb78ÌÑs´Ãípëîx¿¢çhÇghtçîé oh_kÑŽ¯žãpsQ‹æ8DsÚAsÚA½3r›#µÛÑ´ÎñO½uOþÄÆs pÞn<§Zòá¹GÛùËç[-˜#æH„9»ƒ¿ª…s$>ãÇF"ýù`Ú oÎ×®µÆHœã¿D?ö ÚiN¼4'^º9áºEkÄå)”·§S‡»-Pœ‚:áÛû!*!žôh;<1//O±ï®öNyŽÓs´ÃíçOzò€ìÇ9ÚqŽvœ£®ôä × Ns´Óí4Gû¾<í†â@]Ò®çh×s´ë9Úõ‚íÑ~­ófŽv3G»™£Ý‰{´_ë¼£ÝÎÑnçhß³‚tÏè ]Òîæhws´»9ÚϬ Ú®Ô&xïJ-9/nצ?‰ ZÃáÍI„µÖI{oé—á¯ÚŽÞ•ÚaÚŸ:…a”Ö ¼¡}­5Fû”U(áú¢Îqç´ç´cjðwïÄJgtÖqí ‡ß ëËÎßëÎØèžDðAv‡R‡?ñ6žWçi'¼}/Õ:hïºCgëë’_?»äÿô~u'¶ªs‚9Á‡ÎdžÜÃË­_˜ˆ8etâÚÊï<‘ 8ü‰'rU>ÁuÂÛ'rîYP¶:"‡ øÅ¦ÖV æH„9aŽD¸q}·Z8G"Αˆs$Þm>mµhŽDš#‘æH¤3Öê–u ­¼¿çâ bMÁ¹;qÂÛýµTë ±g­ ø++ÈžîÅNïÅk‡ïNØàOæ„7»k­ö_]K]À/ü¬ôÞµL"€u"‰k‡?ñ¼VgÚ£Þ>/”j=޹;$æÖ×è…íF/ðšöמ{ßà0Ǻ§ž¯AïÎ~Nxó|ÍZkŒuÛ¾.R\àðf]´Ö:iï÷³õMçÍó:¿·~µ‚XkÁ‡žŠ>(çΟ'¼åPª5Æ¡Ó @zrm½ÂqŽvœÓœÓŽ<2ô+#ÏZúësÏ?6¦÷ÄŽ9ŸØ9áO<±Cä,‡·Oì¤Z‡Ö:2‡ÎÖ×ñ£Í“kës´Ãí0G;ÚA]í¸’;ÎÑŽs´ãí§Œôäªy…Óí4G;ÍѾ¯‡}—öÞÎóïïß;üi“e­>n­·çFÇ o,âZk¥}«#Ò^À×÷\ñ‚Dùf0r^ŽTÀá§"nûh÷ZSŸÞkxÕùß {)…¶òëÑ©€Ã¯;ëô:¿Á/:+4¥ÎkkµØùTÀáRçq°óxÙùæ-›ß$x¬U7R+—”C2ÉÇ¡‘åãÎmÊ~£\$'ü‚Ä&Ùï¼,Ÿ-ý† Ÿœ½ã„_Ëçºó3ò9àéÁ窑¢ÖO9mÑöú:=:¯¯‡_Éçg7)Ï ß†É³Iy"F<ë±æ«ö²|R‡_w¾·Í¯;ß;Ï•àÒæõÙ”-æUè ¿é|çŒé ¿é|çŒiÄüëí‹8-¢âá…µ€ÃǧEcBIûo¦ÅµÖA{¬Ó£ý€ƒR=o«Õ™ ;Óbžùøµ|®ûh{Öu…Ç ±Lì|,ê¹-) ¸,<Íî —÷æÜä9á|ÖZGç{.A_å#Ÿî nƒÃíO-à}€€ÞÒžjѾíÿCv¸¡çhj¬:·®NxCûZkŒvìe¥~œW´{ÙÕ€Ž+ 8übÀÞvÞ÷Æå1[÷üØ—Ó‰)+G^R‡?aPƒŽÃ[ƒšj´w<•~#Ÿ·V<} â›M«Eµ~#ŸË>Ú[ùtü¤ˆãå©ï>tü$_ŽŒn¼¼è|/è{·ZJ³A3®;/nVWÃ›Ž«á ‡ßt¾³?á7¯àuç~‘;¯{~’ÆÀá7ÿù¥Ûù~ÕùŸ_zê—ß»ªrU9Ëá—¯p}ï¿ÂõýðPãŸ/¼Âõ½ç¡B0rçS‡ßt¾û°à÷ÃC½ì|ÿaÁ8àÅ#¦F¸É³pøpÐ*½X¾ò´ÁyÐj«uX›X§Cû _ÓívnAÙþ W.º®¸=í'h]õ2à¿~ûíºóöòí7éÅ .¦‰%ÕYt§Ÿé¼_áê>*Ru¾ó@š å´+©€ÃÇoWëãðævÕZë ½û´R†¿¨uœ.jutÓv}‰~-Þk¯uSJ\ÁeÝ”V*àð™Î_ëf“¹ZÐFÍ•ç"OºÃyÒ~½ í ¬~p¸° #>˶ÝÜëx±€Ã¯;ßãü ¿èü•Ú¼¿õ‚ |‡ó±€Ã¯:êy¾'üâ¡£æÅ€ºóârzu\ÇmŽÃo:ßYVð«Îó§Rªw^ä×üÖÎû^ç=‡_t~«#vþ„Ë}¼S›ˆé\f^µ^êüªõ~ÝùžóxÂ/:á<&x/¼iMGçc‡ßt¾ã<žð›ÎwœÇ8zÖ†`Çäð«Î¯uäÎpy\ÞªÍÛ~T\uV{ö|â„_w¾«6ü¢óWjá=µÑ¦ó˜y,àð›Î÷Ôæ€ßt¾£6I(ŸÞ; ¦Žo“ 8üú…ƒ^&Ü~ýÂAo¿èÛÛ{WmzñnÌñî~Ñù­ŽØù.$óP›³Á¬ m”í<*äð›ÎwÔæ„ßt¾£6é2e'¶DØ \â¹T=áßêˆ?áÂ…ÏØRÂtbK•¬ó©€Ão:߉-ð›ÎwbK Ó‰- ²Î§¿é|'¶t¯:ß-¥{¨Rç7Öw³XÀáW_ëÈ?àÂ]ÙÁÎwÔ†´ḛ́ú|„î„ßt¾§6üªój1‹Û^i1rž>á7ï Ø~Óù΀݂ÜrÚT2òÓ‡©€ÃÇOs)mÎ3+'¼9͵֒Ãð¶óWï}þöÏÿþ#M&Ÿ¾|øóÊ0ÆÑÇÿxÿÇû÷e*}„Q2\p¯Y­·'I;6t\3Îpa_‡ÕJÙÖFpŒ:Rue¸@ «õöD#éÔ¯=¬`† gƒY­”am„Æ(Ae9\ „Õzë6Rý–Þké¡®¤‡·]áµÞºT¿eöZfŒ+`‰Ã®°ZoÝFªß²{-;Ö ‡KkÒºÖ[·‘­Ö(þM‹ ¥¬09ìþý×÷ÿüøõ‡@ ?téÜñ¸kÑú÷\ ”·KPfݳ)m—³jñ¤5­3»`Cj=ü°î’V—’Ðë†ö?¾ÿëíKóªÕcK¡Ä.;YWѳÔ¢÷4kÖ>Ã:¬Y÷°A-6è5ÄX²N{Z´·êx5ù!мÓDÖW í3¬£FëÜb’‚»{‡Ï°ŽëtÀÅxÄXGZ/À†Î,_ÚorëAuèÚ_f ìâƒÒí æ(àp‰u(²Î«s’,Z/Y@~cÝû¸ØxgÖ.:š~H©ØQSCû^ ëaýH<í'ŠÍð•óM­GO$Þæ‘Áa}S^«¼º9ËÅÛ•”ð„ G‡Ïˆ—‡'[¯¸=6Ê.Ñ×¶9œ»Q»vpñ‚Ñ í­x“é/ΉçÄ‹Câm Ÿ_‚ÓÒ¡±½€ÃgÄË Ÿ“ œsÜðYX”õHÙáK£×¯¾‚ ^P í‚x£y/͉—æÄK÷â%É8ÇÉ×Z×zSG‡ÏkÆP9§“àM‘MoÝw šÅÚàBo¼)RÚŸ.õ3eëZŸúÊóZ—À×pÉ›R¤œ‘¼©µ€ÃgX×xSÆ/ÑoÀÆ›Š#(œ[åÎ ŸIK?O"ëjÃGÙr½È:É›"Mä$oj-àðÖ5Þ” ‹G@îPéÞé ˆÃoÊ(@”YWÊVáÖiiÀº]˜­Öí>j÷ÌMë倧ˆ}DƺÈÎÈ:Çs½ÞxSÆA8µN÷¬ÎÞT•­$ÕZ jsé¥2¨ºX=ñZžH8<ÉG×ò±þ\]¥œä'Ù´Ì‘ü¤µ€Ãg×øIÚFÁ)2ÜOBŒZãPoü¤8{Ypµ¹ÐÙOª—j ç‡s‚kUX¢Ê!&ºpøŒàˆp‰N€ç.9\´‹kjäðÆ2A¯¹RÁUÆJg¨¨AÁÑœàhBpF\“Òüíþ„ëšï¹­×‚SKØÓ%Ô‚ƒÅÆ5‡oç! Îô×ì& Έ®ëï?¿uNÖdø*Ÿn-¼ Û–ß`p¾LS´ÞŒ  vm°ŽŒ`óÚº ú˜‹ Ï`È fWnÊ‘qË:™Á·#ã€MÕ‘—hÓGAdØÎÈ +¤Ø 8|\pÅM ¢õJp[ÔJqו<Ķãdä9¼œ£íS{E¨6 +ŽŒ(Î&S†_ ¥œà¥¡‹„NG‡2Ø,`M0MëƒQ…èE;|Í`ÐÑ”‚n¿åðÚK‹ZíÀ™s²wý µË^šc^éÎrÙëv/-Öj®@¬šÝ饹‹e¯œ1T)ldÛppøŒ|˜3-—øñÿ§´ñ^;cI>Úy-Ê§Ž„»ìŒ91hu+œ“ɧ1PM‘p»ä(àðùpŒZ à>—µqÑ=i@¯ ¤ ;ò© ”ËÊÉS÷|hN>t//­Ba Ay!l´p¸$äY§Ï 4Eëõ^Çe¾ß,à£t½·h9œ­BõWBá\Àûþ*Ôgûæ…Uè^@×p9v¸»O”ðæœÿ çùzpi/çΡ÷§uõ½˜${ÃÅõপå2¼LÀNõà¥sCEëF× … ŽB(›‚x&j/àð¥å+p fI33 ²‹3³Òη?)Z>¥E¥­Wà>}/¬À[¥•à3J‹sJ‹sJ‹sJ‹sJ‹sJÛºêfñNIdž÷ŸQZ>"¤™Ð0¥{‡Ï(­aJM*,Þ÷iãj$¤:k9œã‹J‹D²{ðpº¡]PZ×q$øŒÒš9¥5sJkæ”ÖÌ)­™SZ+XZ'hÑÒ®>£´¶±´~‰³{ã$K«BJ×ËáìÀgt‚Ó±´¶¡]²´¶gi[øŒÒÚ9¥µsJkç”ÖÎ)­PÚ á&Í2Ò¾ÁZÀá£ÑX”‡`›Ö«èAì7Fß•/ÄH¹EB¯9œE(Â1»¡=9zÄ=ìë3Eánù/é‡'ù„žÚ¦6®×LîU­vW´FL‡´pøŒx›u¶ Ñrǽ?ˆëo.ûgëlŠð"øúëì×ÙAÜé¾/ΉçÄ‹Câ%ÁOrÊ •ü¤µ€ÃgÄËW¤Ý!å•oV¤±Ûd¬)Ï¿iEš¶¨É£·^R†¼" â®ß­xiN¼4'^¯´vÃ(F#yk‡Ïˆ·]»Ñâ­o޵=FÝr® wií¥«ÀÊ£·^|…¼v ÂÚm@¼zN¼zN¼zH¼F¯ñFÊÛµpøŒxù*H¯;|î}ZB\±¹·]åDñb€ŽxnhÄëF³™¯™¯¹/(ɵZ§ˆÙ½¶=Y™r‡Úb=p´^-bMzÀLsÙ‚ÖX¥¦u~k2v1Ò¼‹T×µÚá]‡þkªÒp¾‚·nK„í%Öm>Ã:î¶<cÉò=ÇFô± œo,>¥šYW¹-;|†u­K ¡VÂy’½€ÃgXÇ]‚Gº‚d­»`t ˜à—`=„îdÖ•.ÁŸa];ÝFÁiRâ k‡Ï°N7Q'\¼mð¿h64­7÷XK(k]5ÝîðÖuÁh9àZÀá3¬kv&]ükÖétF0ÆëŒÎïÝ.é<ÄÁXçtCû ë¬À:ë,Š ˜ÖŸa§Öm±D†Ãù=áÅ‚²®£u¶¡ýeÖ¼ˆù8°*ÏÎ<¼¯x¼ZÀ4»È~ŸO¿gx¼“ÏqôgX8ƒ±V'xÑZL>ØáI>P½Ö“bS£ t jר„WT›ƒZ)£Ý^Àá3âm‚Óa€fù>.‹Lœã<‡7Á‹”ïDñÖ^œÁ‹Z¼eðâZ>8'^œ/‰W ^m­¼X 8|F¼Mð»8JɶÁ ˆÓp0è8œy*Ñ…þŒ–Å[y*p/˜x‹àŵ|hN¼4'^¯àM¥ð˜Ls+àðñ6ÞTp‹CßĦ±Û:B¬ãð&xáœéŒÞÚ›‚3xQ‹· ^\ËGωWωW‰W ^Ä¥yq·+pøŒx›àÆõQë¶øèµØ8® ‡s/-å‚‘ÅëtC» ^7jœÍœxÍœxÍx[¯42Èn×™x÷Ÿo땦Œ Úxë–¸2–ÙWŠKðZ»Îèµ íÒ赃âµsâµsâµ÷╤7Ñß6’kµpøø¢#®¸\¯ÄKq”*Bͯ aº…è0p8óœS6 ¤ãÐ0ô^»¾‰uì–Å`)ÉFÚZñ˜½€ÃgX×x¥:ÝEÃÖ+uÑ[+àÒ+“lDÖíiÝZÖÕ^)^»•¬#aÎ (îg¬>úÆãs&:î® xFO=„P:$({|)Ç'ɬ«<>¼vÙX§{¬ÑIÇøöŸaní1,î8RÙc½`NUœá7…Ö;™uµ7…×îÐëÌ4œe-ò‹‰:âW#N2&®‡7û$¤¶çe‘4­‹òyH» –”åðv«!Õ’9_9:ÔY¢y킸DKþ„@er iYÅu¶Çh°¥¹ Î-X}juïþìð½Vçrb‹ ŽÜMŠêà ¸¼Û¸Ã“n»UJ‡ÒR½C…¦†K;ÇéVµ¸µ¸pøŒàÚÅWXP÷yËÅWX´&]ÆåH6^‘±JpÕ…¨Þ .Õœžœžœ¸¬òNkqY• 8|Fpí²Ê§Œ5¶ñ»}Hn7WÉÖy*¢Áµà¼mhçí àÌœàÌœàÄ“_Ú 8|FpÍ‚)DÁ9ÐAw8Tªm½9ý™ÙðgÚ¥7*8;'8;!81§H:Sgr!NµpøpN‘8u‡Ò³ÒR2]Ë MNÄ4µs¡8 º3Ç¡QçRH÷縜Sô sÜ‘S¤ynçÜef 8sŠ€nWÕ§2Å©,pøŒ|Ú©ÌDÇ·•Oš_—G$£œ(Ÿz*Óy*Ó/LezŸÊ^—’8cEË#.êÖŸ‘O;cÑb½ ¿®“¹|¤Ë—uº?cé…íèµ íÒ误¯½¯íÄ7ÁI‡e÷B¼ª ‹[iígÝ$LO£:ú¤¾H˜¶³öÓ¨ÎMlÛŸ{sò5°/̽v`íw Oò±=ñÚZpžÁÅY;W'ÖŸ\»(\B¶7cÒî´²eÂçÞ. - ®žUmžUí ³ªXÞÂg'® ¥Ç;öŸ\;_ÆÅˆtP8Ãú °í¬A' ®š/mž/í ó¥X-ÞÂg'Æ7)t„¤ŸœÂ0ƵiÆÒô–iÆvx»Œ4¶;âlC»4âFgçg'ç:sJÏ þŒàByWÈß·Nržt³W ¾ºŽâzs\ÈÇ,ûùû çï÷B|Ó ³¼XÿŸùûÀõÓîâ$O ¯Ä«m]Kœ iKFÖ΄©€ÃgÄ+Í„i`IáQoCy¿|‡ 3a°Vouy&t/„GÝÀ1Ëkñê9ñê!ñŠóe%ò~`*àðñ¶ó¥Y,€0_Zkªõ‹ëÌ—ždñú–vA¼cÑU7pÌòZ¼fN¼fH¼â¬ª-ɳj*àðñJ³jЮ=E‡X å)Z×™U­ ½ÑÛÒ.ÞQñÚ9ñÚ9ñÚ{ñJ¹YÓ‹tÎvžªK>{_w=lÓzuVЫ%\âND£­¼µºó+Àé wn ÷s³BÎÍ þùì*pdGýöö.ßðnñàI>½¤<± všL G!Õ#2Âq»½€Ãg‡ÍIEŸF¯ky¢^×—à9¼9ä©ÁçMá~~RÈùIÁ?Ÿ7Ž ¡¯ çGÒ­Gâ­“TÀá3‚#áZBˆ>µ®%Äç]o¼]ŒŽqGpUD'çèÿ|F8²d¾.8šœtÀÕ i¬Ÿ\ãÇZ»::ࢅ'k8¿|ÑÔz+ ®Žèä<•àŸÏuG¦È×§çg$&íÑŠ.L*àðÁ5W¿c÷Œ1­ cÂâ}•¿ ¼ì¡icdÁ9ÝÐ.ΚJ3'83'8É÷³¥×j·pøŒàßÓ¦'„-4{ÚDÁ!o1—}OD|gÄÙ†viÄÙAÁÙ9ÁÙ Áurö)’àö\x}í]‘ø"úôÖOõ"trö×(ú9û çìƒröAÎÙ÷½—7èâA8“îA/o°Œ@ÕÝÉÆgç¥[Wk‡Ï®¹:Õ]S›\XŒ¢*#˜o½Uw¾—ýl|³ñÁ Ùø gã{Up8'8)†ªý?nó§Ÿ\»O˜ÒEasœ>6Ó]Êò8}èÄP£Qœ@» ¸1¯2çÙ{Up4'8ùºÂÎ%t…šÃg'ÕàÄ]‹(Uz• z..âeSY{•9ƒ¼Ar½W§ç'Æ=•srÜ3pøŒà¤S¥¨Áù¸LpÄ'Ÿ*Uù\M?7äÜxðBn<ȹñ^œy]p(f½ÓQ·!È×cS‡_T4– ¹£õÓ»ÁqÄp¯¬Š+k‹Åe=³ÞÁbsGÀûYïPå˜Uç¦!ÖéŒ*¿ŬwIµ Ê ÄU™’ŸÍzײ® :EÇ[ë6sT8}`™‹Ŭw‘u`Ï|ØÏz‡*G^dI×cSšsi-³pø ëHÈ” u» –.eGÓùv‚†¸odÖñGs¬ÓBÂ@ë¼ðvúQÀá3¬k¦H£×t;͹ôƒ5ŽÃyàÒ'²®š"QåÈÉ‹¬3ëª\6Ýã)vª±=>‰Ñ¿[¢ýáÇ'! I™˜\q|½¬\¤à|%ûÇ'1ŸDßS.ßW.?§\>kGs3åÑSÞèУ§6ž´ƒ(_>Dé„^/§ q£€Ã%í0¢émŠŒŠØƒÀ  ¨àÓC*Ú=ð¶3í°ëˇÇùìƒÀ| CoÆ •vôáEà””.ধ\aN¹Š‡eåº|¼ GÞ]¼°\áVµ¯Þ-áÝ·F/T;ÌŒó †ÚºZ˜ÝX {f·‚—f÷|k4¸ž=.áZ¼‰ ¨úÝ^çµé8¢¤:ëÖ¸T°âº5p¸4¬µ<¬ŠW9H …Oð\Ð|X#¤ÉÀÙÀHÉëVc=õ7wø^KÖ±€êÙ ×ͲW°.ÞÇmâjRS ©©)§„¿0°vø×ôWg`¥‚ÞÀªá¶?'œ™ Óq§Ð0J—øöÊÒ,[,º©Õ@zòBGçB0]Í5ÅÒÄtÜ~!Rg:nê§ã¦«¡^¬†ú±š®{psÝú…9ÿýýâ°Ä Ø_}à©à×ná?¿t[ïÏEþ×禑Çñ»¼[-<5"w>Âï;Ÿàbë©àç—kxu4+Ÿ3‰å»×)㨠¯§›á¶Š’鼜‹Rh<ÃËÖC¯u[Ne¤2Ü™Î^wå"°ZÍnUôC\˶wYŽŸ± |·ÊEkB{—Å(Z0èrs›ÄLó~‰“&ÊV¡Ú­Úá­U¯d« :p݃›ëÖg¬ÎYœ³ 8gpÎ*àœUÀ9«€sVç¬ÎY² ÍFlz°ÏZá…£€Ãg¬߈5ž ÍR2éЉ÷Úr8ÛˆM›GÆu¬¨†vÁ*lù«P¦ƒ¨áº7×­ÏXš³ 4ghÎ*МU 9«@sVæ¬ÍYš³ 4dÚ3É G'œÝ 8|Æ*èæ­D·‚ÐÜ4÷nA‡ä-‡³3nѰeój­BuÆ`‡·VaOÒZ…*‹H ×=¸¹n}Æ*è9« ç¬‚ž³ zÎ*è9« ç¬‚ž³ zÎ*è9« ‡¬‚‘ÈÅ@ÂY€½€Ãg¬?>C:Û›‚¢ÇдΎϤØþº­šR5”»²ÔžJ—%âð7 ÚËé`±QŽÃY´1åÞ¤a§îÉ0Ê'„ˆzÑFênœÝÆû„×Â¥á70°è.`w=2èŒ:Q}~ÌŸ#ƒ=”¢u^]NÜè ­kÏ^CJG,剨 8|Fëx4˳8åšÇÚuZ·¦”-šÃY4+ÝVN‹ZW‡£(‡£¨ͪ´®GÑm<éNëpNëpNëpNëpNëHð€Òw1WÂZÀá3ZÇ£%:%&Û£u4§u4§u4§u4§uZ¸¢c­’nrî>£uÍj<Îb){xûF¬Š^»Åe Ÿß³ Xò²­«—Óùù=¢Þj¼Òºz9M·ëá;­ÓsZ§ç´NÏižÓ:#dD"/f\ 8|FëšÕ^ìhÛh¢Z¢ÆÓºvµg—”·e­«–kùí@¢Þj¯Ö:§øŒÖ™9­3sZgæ´ÎLh–V&½Æ*¼‡}pøh¦†õ•ïòÀnWÁÁBÞ4g¬ KpªL7°ÃÙjÂD{ ç `ÒýՄΫ -¬&î–éúnûÿz¡¬O‡\×rÏKU}!÷^M!U×Ba»)Ž^ôÒvÓZÀá3âmÜvˆ–ËkË(MéVZÀâý•ÎÜv³¤'š½(ÞÚm×ÙmׂÛ> ^œ/Ή‡ÄKœŒ1Aš3ÖŸoãkµNL|ô’òÉ)¯2“øúe½ª8cÐý’òë—$¿~y+^š/͉—îÅk$ãLÉåƒV¼G‡‹Wp ¼¯×!ÝÞ±#^nœã 0¥Pmæ^L¯¸G¯Þ6ðÆ8«(_+‹·2ÎùiH2]ã|)^š/͉—†Ä«…$ãéa!Wõ^Àá3âm¢J-iðòÑ qN6qðzÃá<óÎC§m.ÇÄëmC» ÞãéŽ[ñš9ñš9ñš{ñZyÝë´v= 8|\¼Q7´nZ/Ï쯛h¨5ß[_7ÑœƒâUt²²köWƒVÁÙ¾k•/L“³ð^‡KìÝ6Øu¼Ãž¾‘eOwèC¼–e(45\ZÑð•壀Ãg'mDÙ¤(OÁ;oœ&o)‡Élßi²Ùi²bÞ[ÁáœàpNp$qCÝ9ã– 8|Fpâ^NlÄJ{9äˆÃwȧ­,¸Êʯu2ÁYxoGs‚£ Á¹N^㽜…7pøø+G¨}qËŸ„7ÊÂâuûÌj²ð>¨ò™Uß(‹}D<3ÍSÿ2Êo”‘üFÙõTæŠó}/œ¥9#ÇfÂó8JýÊQ}¥„÷ƒ 7Ê‚´³¿pøŒx›$M&å•õ­«¢Q0>”~¬øFY”nz Ioåèä7ÊH~£ìV¼fN¼fN¼æ^¼—YÈ-æàZ 8|<WôAÊ{DÒË,ѳ„7ÊÒiÞ|—Ó—!:G¯ï^}>6±Î7œ¯àíÈHS‹·ÂÈØ 8|†uÍÈHŽhr×R(mšÖ›ôeh•#™uÕÈðׇïXd­sqøZIëÖf¬G_›ÖëCj~ÑqRn©¥¼d±qÇáÖYPyÎ}­ ×F?±®ÎÍ]ë 'Í qi/&C^ 8|†uÖiµ¨è 56øu¿¨È'LÜéÖ8dÖUZ® ê ë´ê¤j RÒ¼£€ÃÇÓÎë]o’!Û8Rš´óä£C–ÙÖÅ5aÔÍcÍ®UWëvø^Kz/àr.Òjê0ÿÿšþªs¾œ'_cî%Å­à]GT+ydÄùJ6*k‡Ïˆ·IØœì‡ZLórò­ÃBE6JÝIØœl–Å[ŽŒ.ˆ×éAñš9ñš9ñš!ñJI¥iéÕÆ½€ÃgÄÛ$•NÃ7½£Óˆ7å2G¡u–T:öQ‡ó™>zmC»4zí xíœxíœxí½xAÎT Hâ] 8|Ü›"ж³Ä×jm¤É£‹qRÔ¨ŠiQƒlœ•Òú/ô3.ìMih8_Á¥LõDÆH‡¯·Ÿa]cø(, ZÖ¹…”7DÞ>¥ò¥aƺÊðAá¼Æ:ɨ¨ôԜĺµ€ÃgX×\ß1l4y JKkošÖ£•î¼YɵÎ6´¿Ì:”¬òbºõ½€ÃÇY—öO8c^´RÍᒸظ*_Öâ¥ÔGä¼Ásºí_JÕåÝFn7wÖ!ËÞlj¸4`HkÑÖ¥Ÿa];`S$Üù&ñ5â§}g6±.¿û®û7÷tyì5Öµ6.Ž„™£€ÃgXg­K©æ'/ålQчçOKÄjæ|ekmh™u$Š6…¬t\h-àðQÖáz•S7­W{Z írÊ©8MÄÙ½ÈȨ©s\È»óf˜îß ÓÅåªþÅL-ÞbŠöŒ7Ò}’µ€Ãg8Ôlé”QˆK—Úë@žÃ›Í#þ¼Å¤û·˜tqèšCÒ¡ðDâ¡•µ€Ãg8ÔìÒD»’5»4éTCR"g»4é}w‡^æP¹K£‹K+OLëõðjkÛç ^›¦õj”…t+;ðTÛ¼wMëÍ(‹p< ”îf{ÓºeŸÄ¼ÁZ×ñÇàÒ7$ì$>úfø›ÎåÚÒ>m†`¸pÙŸ¸Ô¬«nj] ¿×X'K§HJ¦¼pø ëšqY—rw6gµ‹ê¤Ð4ðf÷Ôù:¬+¯²i]ŒËXgåK„/®>WH©õM±©…g'}ël»ñœvF9jàÍ%BoÕy^÷7žuÞxÖV<‡÷åÃßïþ·gëŠç¦ÖÎy˳(ý1½|\ž:ÚuëQÀá㯘 ŠÍ#-¤—O'­³¼_œsTÆcÅôòéÕ!Ènp?½¼Îéåµë$ƒÕ®{U]»ü I‘щýl®'< .Và—É`Kxoıüðe¦a}懵Ê#X9k,0º7`0M %Cí[?ö(àðµaÓè襑jRƒƒR!=‘Y¦ßáõ4‘Ô&Ž-ªM=M¸óˆO­6ûŸVm$øŒÚàœÚàœÚàœÚpÓ§„åÏ^Àá3jCÜ1‹F6®­›ø±Ã´¡æÀ8篈¦íxíeµ©¦H—í¼ j#ÀgÔ†æÔ†æÔ†^W£ä×á2Z|~-àðñó/JA±çh¤ÇgãÂ6]œmr¯Eu Ñg* ÕyžÐ«fÓ|v‡ïµ:îA)dŽ·kßß~tÞ83|C!4ð­Vµ»€¦®¥¥§ ÁZé‘­€ÃgäÓ> qÕۜ°nÁ@T„Þê<¯ñ\³›þ ·&oêÖò9ŸÝÊGÏÉGÉG|ë·Ãí»×©€ÃgäÓÄ:!Eì¶çTëm;¿fY¶Mëí[ïÖœ·˜Lÿ]“we™|Žóc·ò1sò1÷òœ¥ôfŸ´k¾pø; äË <8 éM^­škHi\¡òº¸†d@~Ò­;߯4ýg \¿U’X̓…ÖÏέ>Ã:lÎέq hv¤-¤G.¨80m@~Ò‚ Ad]åIšüà쫬#éqí4{J; k‡Ï°ŽšÇµqAï©Ù<Š cxGÞ<é®—ßLÿÁY“œ}•uâF¹öFÜw[ 8|†uíF9.:x Âæ‘ÓÞ+âðv£ÜÀù¤»é?8kòƒ³¯²NÜ(÷äåòTÀá3¬kæ" éÖUh| kã®·åFƒ<`ë¹(?8û*ëÄrk½¼Û› 8|†uVÐ:0¡}Ò=j‰+jàíFyœÉ°£u¶¡ýiÖ}û×÷í7âûo· H·2ͶǷ9œYëu—nõrùžÆ÷áåBaq'Üðn«Fô’ýçÍÊާ‡2|­U/a Z¬µƒ£ ¯Øˆ'¼óôƒ³'‚è„WÛ©ö¼/Èàõå´^F%×—‡,Ìÿù­Ž¢ÿÉžù4xÂ+¦ “hç w n9 ê×G —ž] ªn(÷&:@æ„×<µíü‰lÚ$[ j8ÉpÂvþ€×η’áeç1œo¼"áµÖi8áUç!ˆ­7·­óaÊðšCfo=r$®*jKÒÂc-&ÞóiER E'ÂùºEïo­%iÄÅZlÄíæâÛÛ{Ï[ý%<Öj”k-`oImš§Æt†WÐ2¼jÝœðOïÌXI´§Z•Ú@†W¿‹Á pþÀ.÷XP3E¤=bëZ‡àø=D´’Öñãù(à #ˆV4üö8¹Ý\ð ãíüJ ã½Ù¥‚Î4mj)—áoìÍAÑPw¦‰ŸßØôƒ2\zàn-`3lÇγÉDŸ––w+ÃÙ½ ʆº:"ˆº¯Î%él¨íF¶ó2íÍÙ=CÍL¥?Y×ya›q^žã"–ÉdK+m®6´±à¢¥er'œ1eK+O±`@ëR-‘óÉPº…GKÛˆ÷,¸ï|²I•Öaa¬*­åžjÕ§áö—¬X]гuu#.ÃënµJ{±§Ñ?%Äà ƒ;'ò ïßø–3ppx}òwÏðÐ8¥2üç7ù-Pî”J¦RÚM¢¼›Tÿ.Êpù)ÑÆ«áܫܟ] :wík8?½®“áuç±ûŒªÜyþ:òκÖ_;ÏÇs#Žû‹"¼q8÷S·8sÏηqn‰öÆy.rl$­Þ o16’n·ðvJÓ‹yÈp6¥ù©ƒOÁÊp¦u¹õÞ² †³•Zº±Îç:ÈðÆ·ðv®ÃEŒ!ÏÎç:ð‹ioç:½È±qÄ53"†EŽä颀óŽ0@; Îb΢R"\”ȱQîÍ„Jjc#²àš@É!÷&6"ÒÞÌÇè16’B+2¼ŠaX\ÄØˆ<Þ›ù˜8Ÿ‚шZòmåØˆ ç96"OB ¤áò Ûú$[Zy¼K±ÙP +*!6Ò±ußå•´M%›¤²¡nb#"ëGª-­´,c#¢¥íÄ0„؈oNÝØˆh¨e­“b#²¡þ$Á¥Øˆh¨åÎ7±Qëš@I ç±.JäØˆÈº&P²öñ÷÷ŸoÿLð—÷Ç¿ß~ÄÏTòùÛ?üûÂÝþ ÔÊŸ_¯jÅ«S&ýV±ú[€ÞoáÐo[¨¿i×û-ú-]üÔ¶+ý–ú­boö7ßí—ú-[þV—_¶ù­ªÖ(µžbš)Õ¡Zt_ ‡ZÄ¡q¨Eb-ê^-ªE÷µôP‹z¨E=Ô¢aµP¨M-Ëü–RŽÑØ­…CµZô¬E׫…Cµh¨–ªe†jÙûZaˆÆ0Dc¢1 ÑFh5ÒûT ‡jÑP-=Tk¬÷÷¢†h„!aˆF¢†hÄ!qˆF¢‡hÄ!‡l4k±[Ë Õ²÷µ†,yª¥‡j™¡Zý2Cý2Cý2Cý2Cý²Cý²Cý²Cý²CýrCýrCýrCýrCýšah~„¡ù†æGšah~„¡ù†æGšah~„¡ù‡æGšqh~Ä¡ùÕhïï%„Có#Í84?âÐüˆCó#ò™Oô‘†jÙ¡Zn¨–ªFj‘ª…£µp¨ ÕÒCµÌ}-.!Ó«…Cµh¨–ªeîké¡Þë¡Þë¡Þ›¡ÍP‹f´E=Tk€_v¨÷v¨÷v¨÷n¨÷n¨÷lÕ«eîk ÍV44[i5Ò/­Fú¥ÙÜÑ©Å,9vk™¡Zö¾µˆC-âP‹4ÿÒ4ÿÒ4ÿÒz¨E=Ô¢jq(‚¤‡f>íFfíFf£FƶQ#cÛ¨‘±m˜7$ë„aÞP¿ ÕÒCµÌP­F£?¾ýóÃÿý_ÿcó°W'DyLP-1.10.4/Data/Netlib/woodw.mps.gz0000644000175200017520000033765210430174061015454 0ustar coincoin‹ûK®9woodw.mps¤ýM²&»Ž-öËLsØP˜ƒÿlªò•UGRš½Ìgªù¤"âÜ ç‚ Ü‘­ùmœ'AI¬ÿûÿø¿þ??üÿÏþçÿøþ·ÿ×ÿüÏÿç¿þ·ÿ×Ïïþû?ÿûÿø?¯‹à_ þ•á_þUá_ þÕá_þ5×Ñÿ]t!Ð…@]t!Ð…@]è’@—º$Ð%. tI K]è’@— ºdÐ%ƒ.tÉ K]2è’A— ºdÐ¥€.t) K] èR@—ºÐ¥€.t© K]*èRA— ºTÐ¥‚.t© K]èÒ@—º4Ð¥. ti K]èÒ@—ºtÐ¥ƒ.té K]:èÒA—ºtÐe€.t Ë]è2@—º Ðe€.t™ Ë]&è2A— ºLÐe‚.t™ Ë\u¡ë‚ü+Á¿2ü«À¿*ü«Á¿:ükÀ¿@ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~7ßMàwøÝ~7ßMàwøÝ~7ßMàwøÝ~7ßMàwøÝ~7ýÛïþ¿ÿæÓÿþ¾ý+Á¿2ü«À¿*ü ÿ›þ5à_sý׿¿ï_ÿ]t!Ð…@]ðût!Ð…@—º$Ð%. tI K]è’@—º$Ð%ƒ.tÉ K]2è’A— ºdÐ%ƒ.t) K] èR@—ºÐ¥€.t) K]*èRA— ºTÐ¥‚.t© K]*èRA—º4Ð¥. ti K]èÒ@—º4Ð¥ƒ.té K]:èÒA—ºtÐ¥ƒ.t Ë]è2@—º Ðe€.t Ë]&è2A— ºLÐe‚.t™ Ë]&è2W]8Ÿÿ׿þ•à_þUà_þÕà_þ5à_  ø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿Kàw ü.ß%ð»~—Àïø]¿›Àï&ð» ün¿›Àï&ð» ün¿›Àï&ð» ün¿›Àï&ð» ün¿ ù|‚|>A>Ÿ ŸOÏ'Èçäó òùù|‚|>A>Ÿ ŸOÏ'Èçäó òùtá÷èB  . tI K]è’@—º$Ð%. tI K]2è’A— ºdÐ%ƒ.tÉ K]2èR@—ºÐ¥€.t) K] èR@—ºTÐ¥‚.t© K]*èRA— ºTÐ¥‚. ti K]èÒ@—º4Ð¥. ti K]:èÒA—ºtÐ¥ƒ.té K]:è2@—º Ðe€.t Ë]è2@—ºLÐe‚.t™ Ë]&è2A— ºLÐe+ òùù|‚|>A>Ÿ ŸOÏ'Èçäó òùù|‚|>A>Ÿ ŸOÏ'Èçäó òùù|‚|>A>Ÿ ŸOÏ'Èçäó òùù|‚|>A>Ÿ ŸOÏ'Èçäó òùù|‚|>A>Ÿ ŸOÏ'Èçäó òùù|‚|>A>Ÿ ŸOÏ'Èçäó òùù|‚|>A>Ÿ ŸOÏ'Èçäó òùù|‚|>A>Ÿ ŸOÏ'Èçäó òùù|‚|>A>Ÿ ŸOÏ'Èçäó òùù|‚|>A>Ÿ ŸOÏ'Èçäó òùù|‚|>A>Ÿ ŸOÏ'Èçäó òùù|‚|>A>Ÿ ŸOÏ'Èçäó òùù|‚|>A>Ÿ ŸOÏ'Èçäó òùù|‚|>A>Ÿ ŸOÏ'Èçäó òùù|‚|>A>ŸþÉçÿ¿??ÿã¿®¾îÿüùù_ò/ÿí 9¾ÄoþUà_þÕà_þ5à_sý×:rþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9†œ?CΟ!çÏógÈù3æÂógÈù3äürþ 9†œ?CΟ!çÏógÈù3äürþ 9^sþ¼äùø¿—ÿvœ¿\â· ÿ*ð¯ ÿjð¯ÿð¯¹þkƒ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/óÈù äürþ9œ¿@Î_ ç/ó—5ç/Kžÿ;ñßÔåÿÿûÏßüß??ÿý?ÿã?ÿë¿ÿAøó¿þ=bÿwZþw^þwYþwýç¿ùÿ×ÿñÿûó¿ÿã?ÿÏÿõýßÿþy ü÷²þE÷3àŸåÿè×Ïýž`ùSú%ÅÿýÎ`‘.cï÷ÿ?禉¤”[œšº‚Nsù!‘"ž®õÛç-žêòÿoYo+H¿Åsñ çª çõ«~º&>Ö¿Ê·xÉôRôš<è5#:üUº_•kƵþÐÊCüßÏVVÛ"¾šÍLšøbi¬ÖÑ=è4t0ÒÐÓº°hA³‘+ã_u¬ËʳQÑsSÐÑl´oÏëúùY¾ÌFE/UAG³ÑÐkAtø«|7)ÐŒkùáw²òZG×bÃ#Ó›q˜¸©‰Ãü¬â0ò¤‰Ã¯â0tR¼Ü´¡+ë·‡ø¿ŸŒ­"-C·Œ|–ë²Üo¾äºÅ+dúU÷âiÞü«ÞC·LIÏšx ·i_0rŠx!0àE|õ6E¯H½{lhóSÑ'Iñ?âÓ¢ê2ò)Eœ*†îŸÝÈÿYÖ{ñT´°¹BRÄsÆØû³ùíÛKÒâxmíÛ+Á³Ý]O´ùi«\ñç×¶úŽuèJUÄ×ú­ñ2Bë·“&Ÿ˜Å_õ»•‹ÃEüÖþ!¾1ÔTö.¢^EC¥¶wõÓ·†Z1‹&¾êïIÜ»ˆŸ¬‰ƒ¡’â"þ­o]„ws‹Èb•¡bæ\0iÚ‹¯\rR\„\¤ckçú&Ìzöâà"i.BûvtYsÚ·£‹ ò¼Û9\ÄϸâÏîIsrÏ­‹Èš‹øÑÄá…¢ëîá¤|âúCÔŸßþýH}åý‰ýÛ^1­vúêHuÕqE¯B<ßݽ¾ØPŽÙPŽÙPvÙP¹[–}±¡³¡³¡â²¡z÷aûbC5fCíîûöņZ̆Z̆šË†úÝÌî‹ õ˜ õ˜ u— »Cß1šwG@ }ýaއø¦$TÒ¾’˜fÑÄ× [jJ%QE‡’Њ•D±ãZćR­Y+‰ÔÚ‹CIh­TÕäA¯Æ¦2]wFe~à±I×¶Z3ʾ' ‹ø2Ž©&¥§¢C±gE‡‘ûñE|bÁp_ŒëI_kEtiÅ8*J¢\™èîš©ÍÏzŒ vĉv\Öt77xnìgûíC‡O^0¥»¨ö‰ëž´ô‡øfg´Ö5Ö=i.YÏd¿'mšx!¥(³îIuå«’ïö¨Úe\Rü¹µA/¸~»¨zÝâëžç«Ýï ³&^’æÆ.òë–IúÊTî–±ÚAÁãzˆ??±@ NzÑù_u|€Ô»‘­ÃÎÃ?Ä7shoç¥"s=¦bçIÇ ÀTì|hÊã\ v7÷õØyñ]•/ííüO˜Ù‹¯FûPìœ4q,޽ÿ‰{q°ó&@úÝðØaç?ýzˆ??±eÍγ&v.AÆÝ†YÓqà*“âÏÔùÏbÚæýU6¶©³™wshMG8Û|Š?“b«+:%M|MeôÌ×ݲZÑqý¡_Oñ'H–Ew'ì“•)4Y·¸5Y9Ýý¹?LVN¡ÉºÅÍÉÊw×ð/“•]“Uîfä_&«Ä&«¸&«Þ-Ò¿LVMVuMV»·™¬æš¬~÷ƒ×@ºžzç¾ÝÂ@êq„öâë†ÖÊDMtØÂˆÌ=»É½ö‰C¯Åç±Û]ÌuÑOûnñu’×åUôZ ƒšwç~íWs¾žâOÛ¥Ü'â庙ôõ¹b˵M\ ­º¿¸Å«B7¦#é\h—y ¡^º¿¸Å×”D®†’nVMǤ/å’v Ò-”|“58&Kæf%ïwSÊdµ¬‰ÃpIrSH8&ë§<Å7ibS&+7M|Ç*AêMlá˜,ºžâO)ÿªÝ|H3æz[]~ØM¿i84µ,³Æ™&ÿjÞ|_¾dz¾¤^7Mȇ/©—çKjºùF>|IM®/É7É—/É®/©7вþ Ë¢õ6á¦Ük¤_þ½Å[R®)u£¦{‹wR®˜ô¬_³XÄ‹r¬O½Öu‹K)¨¡ßPYħrCe’G|&M¼ëU’E|ì«$—²‚Np7Hp»éu4ãjú%¶zºb`6â’á-Þ²rùÌ&kâ]»×Þ‹~\±ˆWÍ:.½y‹Rj‘cê×knñ©Ýk³Ñų&>ôÓ">÷&4›Eœ®¡ß,¯ýfkÒŒ«ë9yí;ë€Q˜÷¡‰Ãô®g¾ƒô½ç-óC‹8Œ¼8 ^Äç>C'ÄÇMm¥ ÝÐo‡Ö{?2•kñÍxñq‹7íÅGoúiá-Þ»R½Æ“[|hO6fÑo‡Þâ³î¯ÅÓe¼¹`qºÄµ7ø«y“ióûÐñÿ7›ºÇŸíÈK¿y‹k&`ä¥uÌ›O@9«Æ«‡[|h¯päµoŸ ÔÏväIùvºªîÛÛuÓ¿)ó³þ ïb´k7Àèz†^˸ÅGWöÊðí:~¢Ø¤5º9í.B>Ëj´ukð\]D)C—†ºwb•Ýâ`¨kø!ònqi¨{!FÝâh¨YsÊ·›†ÚÒÍ2èpòeSK;CE¾F‘x/âë5æõ::礈wíºÉw’÷â°ÖM޼öí°LÀ…ÃÈ+ßNò^;üU¾y.B¾-jy7À­h."kâ£+õJtŠ8~¢È Z¹É,µO,ú¥»Vn¶åÒÝHú¥»[|ä}F×¥_ºcq‚G¯"ÏjõfèÔ>±ŽþÞÞ6ÅÑ£h}‹²wô¨¼†N—qRÚÚM;ª}bÓ/ݵ¶Óq½t‡èâÒ]ë7Íéê1ê1ê.7wë11.š7!íš!ê×M€ûÁ†ú²¡[ü“ õËcCnVß6Ô)dC·ø'ê䱡žnªâ6ÔS̆òM¬ ¯?ÈËq=oKBë;µ’(/ÿÞâkI®½­•DyßjŸÊ}«µ’(wÄ·8”„`GÜõ m‹øØoذ’(rõž÷%!ñ‰å&«Öæ§è}/»j ð¥W¹oñµ¦—qä5ñ©] ‡‘;âE÷—QyM7'"äMS ë#È;×Ë¿€./2NS ³è‹i–]âB°˜Œ ä³ì—Çbâ2µèí)þÌ<Ö*! ?Œ îRyëtr™ZY7þfÛÈ“CÀìŽÉ’¹ÙìÛ,³)“%«­³»†‹#ÈŽÉ’—sæÐ¶CÛÉ’åÒ¹Ý' ÂdNÇdÉ ós{Ó@”5ÿº¿ XD^@à‡¾F£,ÿŠ„4RÍŽ®m}·É¿Ê ’¿|Iv}IaòåKŠëKƒ´/_Ò\_Ò¤ù’îú’É SÑ_@÷ˆ"º”e¶6ƒ1ĵUº>­ .—.â îªÝ`i}ঋ碈CÀ®‰Ã­ü¾ˆÃëXU.‹¿âöZ¤µ×‘G_KÜàŠ´¶68òºxWÄ“^/]ĵ®80òºxV.XâÈ“&.›êülG^¯ú5LâÞ`¤õƒä"åî\0Àeͺ`èzUÄa„ú:BpOOÇÞâ¯bÒ>1©w=‰{ƒåý]OZ›‚ˆZ×"ý–kJ”õn‹xVZ^¼•Ãbâ"^.¥˜ …ðdkŸÊ{¸¹LÚ·ã%]1ÀVµîi8ò3=ÄÿõWe×F^Ü4]ÄSÞßÓÑÏMÏJà yi,.»zülGž´o¯ÚôâÈkß^-ÎH´ÖoðƒH2‰›¯Áç5Ff½ÝÇ"#´&ëðíY‡OLâ¯*bu¸±¡ ný†¼ê˜ô“‹xR^e®."µ_©îÅC%ú•êÎEôñ«+â‹¡æü«×­‹0Ä×ÚÀ*¾¸CùÅPÿ*ÅùªÖG^š`Û*¦iIÝÊ-â`Áëôf2BlÛÙ9¦iæ{ñu´5MC笉Ã2,ox”_×O™(wö#­³:g™EôÝCíÚœ÷'úc„þÍÖ­‹ ¤‰¯Ÿøü‰CûÄ¡ ˆ;ûM%…Þ`WUıÞš õŠÖ"O$å\ó^Jk?déÆîÝ̵¿¢…Ê7MÚ¬W´@y½6=p>Ò:ðÁ²–‘®ŽpE Ыçd;ÑJ²¡[ü“ Ýâ– q9Jéƒ ¥²¡[ü“ Ý⦠q¾ª5ˆ³m(Çlˆ³±T¾ØP‰ÙP‰ÙPqÙgc©~±¡³¡³¡ê²!Nh´æk¶ µ˜ q¸Ö›ÁId$©ïŠ'+u”­tñµxâØãS‡â ˜ yıŸ«ø+ŽöZ[5üv‘1r_4Òš?á·«â¹*â¥<¶Å°àä¯Yß—qS7ÒšºÁ¹>ÅŸŸ˜W †ÖSªøª£ü+nêFZS7øA\X¤|íÒûõÂ"Ô^ÄuÉE¼\ûKR°±Wñ©TjW¯K.âuèå îHGZG:üv¼lF™¶[›åÂ"|»¸.¹ˆÚß”Ãoìõ¸ßÚMùjpB£õÃäÞ>§Ý'¦¡”/Ä‘ï"^§z¼OÜ´~x«“ܽ弛ë Çs± ®‰/sýÛ6í UE/SÙ/vþ÷¿»_çú¡#gMZ3?\] pÙÍ5†,ý>Ï"¾A^+ùeêÉÂ-^/-â ÝSçm ŒDjÆ­Ik%ˆßÞŸâÏO¬©*e:UË â¯8kÒZ ÂEDÛåVk1f±mó? ¹•Ö‰ÑÇSü™ÙÁ­¬Z OÐwùßëpv£µ„äño;yüËÍüHkægOÖŒMÖôL·ü£r}˜¬r…&ë·&‹[þQ¡“UÈ3YܳJú0Y%…&ë7'‹£\É_&+Ç&+»&‹ãL)_&«¸&‹]µÖ³~©w©»MnÉ#=Må_±«ÖZþÁ²"\Ún/e £‹×lŒ#»j­c üP7âOÇ_±¯-š¯-CÏËØep6T-£» áaÛ쪵®†˜›•§ø3ÄÃùHÕIhWq„›"’Ö~÷„굑×*ûÚJŽÉ’IP¥ý¶¥î'«&M[W‰¿bW­5nDS‘Ÿ˜¶ûŽªLVÖÅ×q«Ÿû>’Ö÷ÐÓFü Òå_±¯­š¯­úÝò¿¿=Ýþã{Ù×jÍ%ᇲ:ô‡q²#ÒúÀÙ_Ò]_ÂŽHë˜fÉð| ·•¢v}ø’»±“õ%ÜØ‰´ÆNæ—4r} ›°Öý~íŸèî?³6n€k%k£ Y¹Å¡!ÄÒ|ŠéÅŸ[|$åZÉÐ;k®âZgÍ©?¿ÅÓ%¨åøXL]‡Ô/FqëÒZ÷À¢ýÝÍs ëÄZœƒ‘oE‡në­®‘ôÒÓ-âÖ—ºCoN¹Š+Í)ÅÈ+ßž.¥ç¬ù¢‰wýV÷"­ïüÐD¸¿;ÿtÂÔág7t2£¹Å‡Ò]¿]CÇOÛî;DZß!øáá"8I]‹€VÒX¼7ÍEÃE°øÐžÓÏl¸Ÿ ùq‚f%IùöWéW÷Q»"NÉpVµÎLðÃÃEpX]»¡‹h†‹`qxI .¢.‚Ňö˜ÃE°¸öŠ\Œ¼òí ^!¬.G^ùöDÙpœ‘hm¥à‡‡‹»FÑ 1¶#.¢.bl?QºÞYim¥ÀEÈ#$n+… &±Š"m=jÛºˆßK¯öÝâ‹¡R]¯ö-.¢ qiï_ 5Íå^âê"~Û¯"†ZWñÅE¤¤)†:Å_qã-Òo¡s«ìn}Õ”~0ò {i,â«çµÓ+¸áƒoñÕÎÿ´ˆß»ˆ<ñuÔñ«î]„ðÁ,ËäO÷½‹ ¬ˆãån<·á®a¤u ƒ‘—å»oW‡}·â"äÑÔ-¾ŽÐìë­ßÞqøÄ,Ax?¯u ƒä…îF=+zæ¥_‡¸Åáíôr¶”°£"žàù•¸ÐíÉHkM?È =w­^” =“ôû ·¸ö¾•×Ð÷̹»iݽày¡çnQ5Ó¾*ƒè¢½«Hë]eÛPÙPÙPuÙ'ÛZï*Û†Z̆Z̆šË†8_ÕšOÙ6Ôc6ÄÙ˜ÖØÉ¶¡³¡³¡á²!ÎÆ´¾P¶ ͘ ͘ M qc'Ò;™6t÷FúdCÜ4‰´¦IðƒèœEw×#hWº¦SØ/~hâpí'íËVò2‹cñ¤ke«’4ñ†;.ø+ŽöZË&øA¾&¼{.­Õ …=haÙ4ñ¹ßOà·OEŠ'ëSHüvMy¬ªˆ+iÜ0Š´†QðƒôCwǧ1ñ†å¶ò#™FÞê(A8Úk £à‡‡—]zvŽ] ‡">êe¨½<ì¼lÓû®Õ^Š¢¼Hïg$Z·+øáaçu»µêT1ì¼n÷ö`çÙ°óºMï‹VýДÇÒ€´sNh´^[¸7‘&ØvŸˆv^ ;o[%g$Z¯­ÕÎoxpks÷ÚZçºç_ÛBþmBŠø2×ô{·„¿ÿÝ­8Ìõº=^íüïw/¾Îu•:rÖ¤5 à —òØ–ªJßÛùoªˆ¯FzVì¼(âXéZz>£wEyÜÂÖ ¸MimÊàÛåk»ÏØú‰¥Ö½Ë¼rÌ}™ÿŠÛ”‘Ö¦ ~ןî6e²ÏØ6y•ןæµÍÿ$çVZ—3DOñgf·^tY-´Ëÿäõ'nSFZ›2øAÿr£0‘Ç¿Ü(Œ´FaödåØde×dq‚ µ³'«Ä&«¸&‹C´ÖNÌž¬êš,ŽrZ?0{²Zl²šk²8ÊiíÄìÉê±Éê®Éâ8£µ³'k¸&‹]µÖ ~)Éœ»MD‚”Dä*Џþ¸)q;±¤µƒÄ>]×n°îá}¨â]ÒÄÝÈ’Ö ~›ðtÑ$É¿J ’4½^ó÷·g†“E¤NÖ"Nɘ¬Ì:fMÇlLVÞ…x˜,JÆdåmì— …u,šŽÅ˜¬²yLVeê˜,‘ýz×úþ&ëOv´‡.&SüUc›c²ѶûR&+5MK¦ø«Î:vÇd‰»ËéÚžK7ùWƒA†¢_âþûÛÓígùW“A¦¢ßTM×¶(.±%î>| ‘çK¸¿V¢ôáK(¹¾„W)•/_R\_«”ê—/©ç/ùí¸[±à‡ïÿÿ×_ã]Ø.¸2ß4ñu¸–=õ õ. êÕU|!úÕöâ Î~_Ÿü—ök(⫎ô«³8<«®:XUÅaèÖ HQ[~­âUð,iß>Aœ3I­9V „·Ii[1X½ÍZ1È£(âYaþõIM¼æ.¦î¬nñz=œ•Ãl8ÁÕšœ_)ë=o÷ìëz‡2ŠpÔ·xVHyD…PÇ á"^/Ã]ä}…p8­Žóc­C;üðXqe[¯€%£^zYÅ«`ïýñhî½~i½×/MéñÍ’YGzÌŠ èÏI1,²iâXd¿”"›¦|½Ê;– çÝZOw¹`Û¶$Þ&Þf[Nµ)K&iâXæjÊ’Q•Ç2Wq.NÛµ†ôèGš°ù¾ûöV´%S4ñúì5ãX2œwk½âá‡&ÑÇnk±¶±€ ÓãÛÇvkQ¼ÊsB®µq‡Šô6s·iXɽ@­Gz0·[‹¡+ÕQîï~iýÝá‡!nâäk‡ž.Rbî~eú0ï™Bó~‹šwnk~åôaÞs Íû-þmÞ99ÑúÛóžcóÎñ=—/ó^bó^bóÎñ=×/ó^có^cóÎVëÿmÏ{‹Í;©Üµ YÙÊ}[»øQjr¸ˆÃv½Rpc¿‡y§U® M|¸®Ô.rIŠøºQëµAh&LúºQNÿtªÙLÜ^àâvçWŽÚ…,Ëå±½Fô£Ô.(ã5¢E¼+÷€XÏ¢â¶v‘DN»ˆÃÍ»}íâOº¨ #“4íkft/û÷ÚΊ““<µ Y’Ìs{qo½>&®äÕ½øŠž•ÚEIªøòíT’f´ÂÛpkú«\Ž˜ô6åÚî9~”Ú…ÜÜâ˜(µ é.nqØst¥vQª¦<ô(¦â3î˜òlÄÄz/´Ýˆý(µ é¨oñ¬´6µä‚½ÅKR,tÙ.šòU€hCE˜à*ɱ“+®¤í·ge#–‡&¾*_»3@3AÀU²gɈËQ%ï—ŒR»Å‡[<'­øpáŒîÅ‘ Z©]´KS¾^³q,ÎiKñ,‘]”²_2JíâámÊ~É(µ ™Üâ`´]©]<¼Í¶b–¯â\2œQ—êY2âȱl/Cþhµ ššøª|oÞ%Ãui޽Œ¬œ”ýa/){™Þ4qØ4L¯òœ—îØË`«¤Ä7§µÚ^¦vM¼ŒGz°UNk™sá*óËÈÏØÈÏÐÈ3ÃU¯#_¯ÐÈ×+4òL pÕôaäk ü-þmä9ÆÕüeäsläsläÙUjd ðƒ¼;]o_O´ïW°W#ýÒû-ÞD‰{;M`sQÄ¡éXų~s{‡h°ìãÖ¦tòÎü-> %^ž¾aã/¼~¼ˆƒÑþÊ,>IOnqì뱤FÐ:¡kè_ÎñågÂËôÊ·^;×/?Ãö¿rŒ«ZŒ[HðxúñýUWîC-öôxúv‹7¸ã¼Îûš©WMºÃR_ÄÕ¿ ^•ÛX«=ɧo·øÚ¶ž¾aý_s/>ñÌ}wz&=«\ĵ=ìD›/Š8êØ~{j[qÂ;óÎ>Ìériœ.ðCIÂêúÆlðé[‡n#ÂlúvÞÛâ*וOßnñ‰/¨nô™õœvŸû’ÉwRü|#‰ùl.Ï~ê]š¶¤Å¥9€¸#p‹CïúõIÄÚ§V>J¸Å¡wýúvmm&_ÎÝâÐ6l}}‡¦&Ò-Nð^³)ÊÓ…B›oepæ[µÌ·N#ŒsêºR ÁÛ5h .JS‹8°¡.q’GfñµK.¼]ÍØÓ^|@k—åLI×Ä',´à[qÂXz …ygr§K#w‚äåZ&w‚‘‡ËµÐyX\®½Å¡áZƒAU½›Z \ßc机4Î)ð6ÒêíL^°¯Þ¦ô¦ˆÏͽ·‘Vw‹wÌÒÆÖÛtñøìo3›Ÿ†ÕÝâHEr‹ƒ·!My4í¤¿×oÓx·×’ÃÛüI̤øÓ´1L¬Ž vM|½Ö¼Võºh*°_W†‰OÛ^|ÀåÍ5Lˆ®{qXX&€aHQW\ÕÊóNW#`à Òvfƒ‘¯³*ÞF$η8vœ&ÅÛˆÔõfPƒo×O0„·ár¬Fn?È'ÌÐuµªlY Á¶tV,˜—Méôb‹8áG:Ÿp0qØ¥‡Á(sïò›eF6¢Ì½Q.û(ƒ_%£Ì½UM¾(ƒ®’·ª£ü Ÿp´¶S~}Âj¥§øù¨€Yµ.U˶ͳͳͳMÞshŒU¶mŽ˜mŽ˜mŽ˜mrÚ®QYÙ¶9c¶9=¶ÉtNW¿>Øf¿B¶y‹²Í›é“m2UÒ¥Q%™¶Ù)d›·ø'Û¼™–>Ù&s(]‡’i›=…l³»ž 3 Ò¥‘ ]:ùÈ?â›zßze­Ë·øPÈ-°~,·ñ©nCýxhÊϤ;`ýXCÇúñ—€õcåÛE½/9'cµüÄ©S;A)î{®S"Ÿ¾ÝâCáÜÀ)Gë·ø¼”£õ©6pqítK°*:”`WØõ,úfÅÂr¡ó ³b]+üPÄuÑ^w#Oß`L‹&>¡yÆ*®6¥^ÄñÛÉùôé².. +â5IoÛŠÁúv è;Ä•Š[|†T¥>©‰Oå¡­¨O*Ê‹údsš '¸ îÙ¥§íÛ=ûúv Ê(âåÜ->à"õêi§®·øÔX±B¨(/*„Éiuœkbðƒ¼]ÞǶ^aÂxlzsˆòÃy5žÙÁ. –ÌcâævɬŒ¡¤/G~n­c½68­‰›û"[ú¥ÙåE‘mø– ³Ž]ëžsˆÎ^Ì:†fÞFÐíÅ¡¨¾¾ËŸâåõ^|6ÍÛ¨DÚ‹¸(s5ß’aÊ´K£LƒA‘ÙŠݷצ,ßoÊ´ëÉ"t^2Ìfvilfðƒ| 3Ònk Îë†I>…¹ÙÌ$—»OyNÈ5¢1øA:«‘w›†ÕYZÒYÝÍ;sO]“µ Y ™´­]üÔ}íB¾¨¸Å!»XŸ¾¡9&Mæ}½ÌBx›q/Ž´­u_»2ñwë¾v‘•oÇòt>}cB®K#ä×ñm¦í5"RjòéÛ-޹ÍTj¤‰«6?¡‰ˆ¦gÅ$g×ÌŽÚŸ>6óöâÞz}L\É«{ñ½ôº­]<ž¾Ýkë·—î|úÆäi×,Ž˜,yͲ݈ý(µ Y†¿Å1=Pjò5É-¼œ¤Ô.ä˹›ù ö½9͆³Y±‡§­Û)µ YÅ¿Å19QjWYw[–””Ú…|97ëv/c<‚‹"ÌTwÍæØˆÉ›õ³m¿]«]È›õ7Ñݪ¼u³— §…³{–Œœ¸¾_2YY2räû~Éôý’Iª8míû%S³¢ÇF>ÇFž™]UÆsäKläKlä™U%¯0G¾ÅF¾ÅFžiZUö sä{lä{lä™ZUkä?ˆ ÀÄ­ô Hb— ÀD:]Ì*Þö×im‘!./âÐùy¹LY§‹YÄ¡CÍrý˜JU//â¥=.ÿóCÕébñšׯLjYHc!€Ä`b"Ú_†)×Wñ¾¿~ S"./âë£Ðõ0L‰¸~¼ˆÁÙrý§dhâð>{¯I½~¼ˆÃSW'Ã1…i ðC6ÔÄŸ#ŸÞyÓ?7ƒ÷âÈ5¸,Ø"¾½ø—nÍÄ ¤Q(ÀÒÛ0…qîêmI¯(âÐncõ6ëëcémnñµÝz›©{›[¼\š·º·Yħæmºîmnñ:|Þ–S#W~xxÎm¨(Þº·JoÃâHȶxèÞ*½ ‹C£ÒÕÛ¬Sòð6,Í>ÀÛLÃÛ°8ô$o3 os‹OŸ·AtN 5R øáámÊnäÁÛ`iRıy̲`aP¤·)Ûoÿñõ“bFŠÞ&a‰›˜L».<‹àm VñÅ´Ez6a6ugÚ¿7ù´õ6­ÿj{qhîÓnNYð6?UÇBxÙz›?/<÷â`ÚÉ÷“˜)„4¦uJ¨c‰›˜«LÃDZnm&6ŸhïmRÿ•÷âÐ+z ë”Ô hYñuÉ伆‰ ~>íÅýãØ{›.ÂDÛ®¸ê{‰ILsBÍÉ:%iv1ò}3òµ¦uɬéAÕÄסËyÊR}ûí”Þfð·íÛ‡zÇŸ˜æ„hîïøÈ܆š èzÇ¿õpaÇ(Å™×ñ.R£OÄ¢{wíïøãWõ¡ˆCÍõŽ­j‘y¯íýbÒHàqÇŸÒµSîøƒZé)~¬%“mP¢¶™(d›·ø'Û¼Å?Ù&“mPJl3¥mÞâŸlóÿf›œ¶kl¶mæ˜mf—mr†šÊÛ,1Û,1Û,1Ûä 5Õ/¶Yc¶Yc¶Yc¶ÉIžFKaÛf‹ÙfsÙ&ç3ÿü îNSêÛúäzù9ëd5‹x.Êy¬OjâXŸ\Ä«NV³ˆc}29M›Ó!}~w§‰é# šµÞ†A7·q(s-7·E…PÇ áê’zs{Ç ¡ï}1÷iÜðCÇiî¾=­^ZüM”o¾>Äܤq_ÀrÉäk[dƒ%3õ%s‹C‘ –ÌЗÌ">µ%Óõ%s‹×á[20ïLÜAqü —L¦Ý& – ÔÄ’¹Å¡VKfêKæÇ2׺d†¾dñé[2huœäi´!ðƒ\29í¾– ´/.š8(ï$ê!¦ !6–LJbäó¶R´ŽüºdŠHanq°Ž«üR*EªøÜ_•"My¬5ç’áäQãÌ{¡Ð¼3ÿ•ôaÞK Íû-þmÞ9¾—üeÞslÞslÞ9–òeÞKlÞ9Hi$¸3ǼTên¯¹^¦¬3®,â˜]äý\\^Ä8-çý<©ÊÃ^S%)Â'6Ä Tšc..SiÛë$¤lÀÅõãE³ e../âëVõ_€Ÿƒ"®/â5?®;,èÒð?7ƒ¥øæÛ©î7ànïÅ‘UÌy¸p€.ñ›x,™±ÝMÀ’™Æ’Û 8,™a,™±KœqÉtcÉŒmâìäõ"æ¾ 2»‰Ç’™Û;¤lÀKfn7à?Êü±dæ.ïÆ%3Œ%3· 9ùØfˆ™7¨^ŽÝ„\2õÚ~ûºdÖÿ®\2·x–Låܦ’gɈk*•¶Ö‘×c뉛۽xQššÃ’ù3£Šøzd‡†îSS~±JYK†IK¨&ÏüÂ#ûš¶Ö±z¨JLMÍ&o— MUª;àmîAÉ]U¬®tç’á´°fÇ’!qY¢n¯¥å´¿ísÒÄå9ßBþM—ÿ¥|q$äòÆ~Ý»‘’Ëûu{ìæ¾±Ï|/T«#!—7öëþÜLKÈåýº=7sߨgªýËÈ÷ØÈ÷ØÈsrRÇ—‘±‘¡‘ç>óÔ®#wzÿ4ò·ø§‘çFñÔèÃÈßÝÎ?|£ØÈ³«ÔznÃM$¥w×ëµËêÊuCÐ;VT‰oqèÞºpÝÐúš}м·øHxËø7îR.âÏ»”ÿüŠ"žà9áÂ6“°¸¢|LHêõcØ„rÃp҆åbN{·ì^[ÄþaÞøÙNI%EZÏæ%!_§ä·Í¦½8ô_iË]ÊaÜ¥\ÄŸw)ŸSò{Þ÷â †¸¯â ¯ò+âH&ä¢' îvNZ·sø¡‹„üî7ޤdK>­v¨+âcîó:{ñô¥±*q·sÒºÃoÃŇÖoƒäGCÇ—ñ«·)†·aqh„¹zìû)܋ϲ÷6i}gøð6ÿ*+Þ^=‘¢|Â÷AΧUÜž´ððÃÃÛpnÔàmšámXÞ僷©†·añõ]>x›Y oÃâØ¬`uÙð6ÿª(Þ†’ámXßéÞ͆ÓB­=üðð6c;òàmšámÆvèÀÛÃÛŒý·'ß½qî_OZÿzð6‚ð‹¸=ÚüBøEØLx(âÐCt}Zµz›"ìÜ™öJøÞFÐ-â3ÅÛ¯[½ iÞf*Ê£i{rrSÒšúÔÈ׈w[}àNÊŠ·tc‹x [o#_#ÞâÎeo#èÆñ)@¶ÞF¾Fdq\XYó6]QW\qzf$ ‘€ØÇÝœëÈ×uUpuÇ~ÉCñ6Ø4þÇo'§·aFÒ àyÛš hí«·­ç¥ßö¹Å¡_ßrÛ:aW²¶OجÀyÛš™Hc:€ämë»]ÿÚšn[ÃW‰ë:·8´¼[n[ãW‰¬’ž÷wÞ¶f²ÒÈàyÛúîx¿*¿Þ¶FµÒSü\Kæ¾ø¤õÅ·m³Æl³Æl³Æl“÷Z_|Û6[Ì6[Ì6[Ì69m×ÛÛ¶Ùc¶Ù]¶ÉªÖA޶ͳͳͳMÎPµô¶mΘmΘmÎmryÒ:È›¶y7aÿd›Ãõº[µ“Öª~¨¢«ÆÝkH¤ÊšIÂÖ¢hâ•ú¤".ê“«ië]1WñöÁ´¹Qi=öá‡Ç’©Ûçºd >‘E|VmÉdcÉÔ}™k§d,™º/õ §Õq’§uø‡K¦m¿–L1–LÛ*Ÿœ·X¹Ã?iþaÉê%º;üƒÙ4eÉâ§E\4)•"E\TŠ´%3åE¥È»d8yÔè ЈGm7¿T1“²dñÓ">ˆR«QÄE­F[2]Q^Ôj¼K†sO%Ë%3wß^´%ó3qPž¼K†ÉHk?È[ë79¤ý­uÈúå­õymócï­uæV [~·Öo‚€5ó]o­ƒZòÖú¤m~ì½µÎü¤ñ ÀòÖ:7Ét÷­un’OZ“|{ÞslÞslÞ95ÒºÜÛó^bó^bóÎɉÖgÞž÷›wŽïZ«v{Þ[lÞ[lÞ9¾k­Úíyï±yï±yç«5K·ç}ÄæƒÔœŽ ¸|û|7 ÇMèT6à?EW¿}½<qÜk.|"¸ïM‡½æt½RIÜíb¿¯]‡ õ`÷ZO96àÚ¥IñÝ·×ý|TE•Ÿ¾+÷“õ)Ÿ» ±dþ mvë’ÁÐ[q-ÆZbÉÜâ¸×\— ì&º¢¼ØkNç¼gºìØM<–LÞžR’¶—K&o7¡?Ênâ±dò.ï†%CÉX2y»›0–LñÂCW»‰Ç’)ûo¯ûÝÄcÉ”­òî%SYùêY2$¬®î—ŒV³JEGëP6à‚?èG£íÊ\°-âŠsÉ4ºæY2XöI7AÀxvºÚò†"®qà ˆGm·8Vwª²d{Ñ"NÄ·d:]÷,ÌëÒµ¿––• ¸ ¹»ÅAùÚ/ç’¬üp$äâÆþ_¡Í) ¹¸±‹cæ;½ÊOV~:rqc?]ûs3-!7öoqH‰½7öw¹Oj—{käï>óŸFž(4òܦ>©mê­‘¿{­yJ±‘ç§vü6G¾ÄF¾ÄFžcœÚ²Ûùùù|qN{i9í…õŠþø?EsV|å®yÚÄw:6‚¿bþF•ãÈÔ1ÇtT:‚Ô‘yU*#SÇÓ±¸Æ‘ µdÌÖ±Æt¬®qdæ@•UÉÔ±ÅtT:lŽÅ*y’©céØ]sÍL|Zaë8b:×\3å–,Ø:ΘŽÓ3×LYti”E¦ŽÌ»óMGº<ãÈyË¥å-¶ŽÓ‘ö:NGŽ3ô%ÎP,Îgf¿â8C_â Åâ ¹â gJ}‰3‹3T\sÍq†¾ÄŠÅª®¹æ8C_â Åâ 5×\sœ¡/q†bq†ºk®9ÎЗ8C±8CÃ5×gÈgÒ%@¶q¦_ŠŽ´ßéØëúWÌÈp¥ëƒŽé é¨12 Ô‘ãL¢/:RLG-Î4ø+Ž3)}Ñ1ÅtL®qä8“òsLÇìGŽ3©|ѱÄtÜÆ‚wA¿ÿŠãLª_t¬1«k®9ΤöEÇÓ±¹æšãLê_tì1»k®9ΤñEÇÓq¸tä8“¾Ä™‹3i*:öõ¯¸Õý•¿Ä™‹3ùréÈq&‰39g2yæš›·_ùKœÉ±8““k9Îä/q&ÇâLÎ.9Îä/q&ÇâLvÅî:~å/q&ÇâL®®qä8“¿Ä™‹3¹¹tä8“=qæGìò6ÎTMDzßÄBú{.n~åñEÇÓq¸tä8“çgLG%Î$Бû†_åú c¹B:–KGØ»r{ð«Ð)¦#¹Æ‘ãLI_tL1“KGŽ3%Ñ1ÇtÌ®¹æ8SÊKLÇâGŽ3¥~ѱÆt¬.9ΔöEÇÓ±¹tä8S¾Ä™‹3EÙÏd´GŽ3åKœ)±8S”ýLÎðWgÊ—8Sbq¦¸â ÷p¾ê—8Scq¦^ž¹æVÍWýgj,ÎTòÌ5÷D¾ê—8Scq¦ºâ 7¾ê—8Scq¦f×\sœ©_âLÅ™Z\sÍ>¼~9û¨±³Ú<ç×Ü1øª_Î>jìì£vÏù 7¾ê—³;û¨Ã5ŽìÃë—3ö;c¯Ó3ŽÜ£øj_ÎØ[쌽]ž{ÜŠøj_ÎØ[쌽‘g®ûðö匽ÅÎØ[rÍ5ûðö匽ÅÎØ[vÍ5ûðö匽ÅÎØ[q#ïÚ—3ö;coÕs6Ì=i¯ö%δXœiÍs6ÌíW¯ö%δXœi®8ÃF¯ö%δXœiÃ5×gÚ—8Óbq¦MÏ\sóË«‰3=gºë.÷y¼ú—8Ócq¦»îrq?Æ«‰3=gºë.÷M¼ú—³;ûèÙsçƒû^ýËÙG}hý ñüšû^ýËÙG}ôê9¿æ>„WÿröÑcg½¹Æ‘ãLÿrÆÞcgìZ¿@1Žgú—3ö;cï®3vîëwõ/gì=vÆÞ§g®¹ÿÞ5¾œ±Ø»Öçšûï]ãËûˆ±×;7º»Æ—3ö;cÉ¥#Ç™ñ%ÎŒXœ®3vnw/qfÄâÌ(.9ÎŒ/qfÄą̂®¹æ83¾Ä™‹3ÃuÆÎÏ®ñ%ÎŒXœÝ¥#Ç™ñ%ÎŒXœ®8Ã=¼®ñ%ÎŒXœ®»\ܪëš_â̌řéºËŹ®ùåìcÆÎ>&yîSpã­k~9û˜±³™\:rœ™_Î>fììcfÏù wáºæ—³;û˜Ås€›m]óËûŒ±O×;·äºæ—3ö;cŸ®3vî¼uÍ/gì3vÆ>»k®9ÎÌ/gì3vÆ>‡k9ÎÌ/gì3vÆ>=gìÄý®èúpÆNWèŒý¯¸CGîüxÑ)¦#9Ά‰ßÚÓ•¾è˜b:&ÇÙ0ñ[{ºòsLÇìškîöx•/:–˜ŽÅ5×ÜÔñª_t¬1«k®¹õãÕ¾èØb:6×\s‡Ç«ѱÇt쮹æFŽ×ø¢ãˆéè¹ËEü޾¼c§Ø;vÒÞ±Ãù5ñ;vúòŽbïØI{Ç>PGöá_Þ±Sì;Qr#ûð/ïØ)öŽ\ïØ‰ß±Ó—wì{ÇNÚ;v¸@ü޾¼c§Ø;vÒÞ±‹¹fþå;ÅÞ±“ë;ñ;vúòŽbïØI{Ç.æš}ø—wì{ÇN4\ãÈ-{i~ÑqÆtœŽ³aâw씾ę‹3Ú;v8&~ÇNéKœI±8“\q†ß±SúgR,ÎhïØÅ\sœI_âLŠÅõ;Î5Ç™ô%ΤXœIÅ5×gÒ—8“bq&U×\sœI_âLŠÅ™Ô\sÍqæË;vнc§Ôw>ˆß±Ó—wì{ÇNi8ί‰ß±Ó—wì{ÇNi:ί‰ß±Ó—wì{ÇNÙÓ/…ø;}yÇN±wì”É5Žg¾¼c§Ø;vÊž3vâwìôå;ÅÞ±Sή¹æ8óå;ÅÞ±S.®¹æ8óå;ÅÞ±S®®¹æ8óå;ÅÞ±“úŽuä8“¿Ä™‹3ÙsÆNüŽò—8“cq&—Žgò—8“cqF{ÇŽsÍïØ©|‰3%gŠçŒø;•/q¦ÄâŒöŽ]èÈq¦|‰3%gŠ+Îð;v*_âL‰Å™’]ãÈq¦|‰3%gJqéÈqæË;vнc§ý;vqŸ‚ø;}yÇN±wì´ÇþБãÌ—wì{ÇNÚ;v<Ÿáwìôå;ÅÞ±SŽ{ÄïØéË;vнc'×;vâwìôå;ÅÞ±Su±ó;vúòŽbïØ©’g®ù;}yÇN±wìäzÇNü޾¼c§Ø;vª®3v~ÇN_Þ±Sì;ÕâÒ‘ãLýgj,ÎÔê9æ·öT¿Ä™‹3µyΆù­=Õ/q¦ÆâLuÅ~kOõKœ©±8S‡k®9ÎÔ/q¦ÆâLž¹æ·öԾę‹3Ígø­=µ/q¦ÅâLsÝåâ·öԾę‹3Íu—‹ß±Ó—wì{ÇNÍÃIBü޾¼c§Ø;vjNâwìôå;ÅÞ±Sk®qdþå;ÅÞ±“ë;ñ;vúòŽbïØI{ÇŽ÷ø;}yÇN±w줽cǹæwìôå;ÅÞ±“ë;ñ;vúòŽbïØI{ÇŽsÍïØéË;vнc§ž\ãÈ{…þ匽ÇÎØµwìx6ÌïØ©‰3=g´wìx6ÌïØ©‰3=gº+Îð;vê_âLÅí»˜kŽ3ýKœé±8£¾cǹæ8Ó¿Ä™‹3Ýu—‹ß±Sÿgz,Ît×].~ÇNãKœ±83\w¹ø;}yÇN±wì4Èsçƒß±Ó—wì{ÇNÃÃIBü޾¼c§Ø;vNâwìôå;ÅÞ±Ó(®qä8óå;ÅÞ±Ó¨®qä8óå;ÅÞ±Óp±ó;vúòŽbïØit×\sœùòŽbïØi ×\sœùòŽbïØi¸ÎØù;}yÇN±w줾cG9ÎÌ/qfÆâÌt±ó;vš_â̌ř™\:rœ™_âÌŒÅí»˜kŽ3óKœ™±83]gìüŽæ—83cqfV—Žgæ—83cqfºâ ¿c§ù%ÎÌXœ™®»\üŽæ—83cqfºîrñ;vúòŽbïØiÿŽ]ܧHüŽ=}yÇžbïØÓu¹t$Ö‘¾èH1=œ$‰ß±§/ïØSì{º’ã@âwìéË;ö{Çž\ïØ¿cO_Þ±§Ø;öt—Ž•u¬_t¬1«k®ëؾèØb:6×8vÖ±ѱÇtì.ë8¾è8b:—Ž“uœ_tœ1§ãl8ñ[ûD_â Åâ ]޳áÄoí}‰3‹3äŠ3üÖ>Ñ—8C±8CÉ5×gèKœ¡Xœ¡ìškŽ3ô%ÎP,Î+Îð[ûD_â Åâ U×\sœ¡/q†bq†w¹ÊŹ٥æfëe¹ ÿˆÿóWpÜXÿê¸ÅâÜ¥NͺLôCçþsj>e¢—:w–S3%½¾D/ Ĺgœš™è-†ÎÝàÔìÆDﱑç>ojÞb¢Ø·s75#1ÑgsKÍ5,ô;×ø†ÎÝ=Õ,ÂD§·è0ïœ\ôÅ×QŠ¡³¯£/¾ŽrläÙ×Ñ_G%öíìë苯£Cg_G_|Å|w³¹è‹¯£ûvöuôÅ×ш¡³¯#—¯»úÖ×ÑåôóÜ[æJ×ôtÅÐÙ×%ú‚N/ÑÑê¸Ì•Òôûvöu)Aϱog_—Êôò½":ûºT¿ ×ØÈ³¯Kí z‹<ûºÔ¿ ÷ØÈ³¯Kã úˆ¡³¯K_|]š!tîorå/¾._1töuù‹¯ËCg_—¿øºœbèìëò_—s }]þâërÌ×q‡+ñu¹ÆÐÙ×å/¾.·:ûºìñuC¢ï}]]ª;S-ý#~öÇÜÕãÊ㋎#¦ãpéÈ~3Ï/:ΘŽÓ3×ÜÕã*×ËÒQëê!td\苎Ó‘\:²§.鋎)¦créÈþ¼ä/:明٥#{ýR¾èXb:—ŽJý¢céX]:r)틎-¦cséÈq¦|‰3%g´® uä8S¾Ä™‹3e¸tä8S¾Ä™‹3Åg¸«ÇU¿Ä™‹3ZWGîêqÕ/q¦ÆâL%—Žgê—8Scq¦ºâ wõ¸ê—8ScqFëê!Æ‘ãLýgj,Îh]=„ŽìÃë—ênm¡³$î…qÕ/ÕÝ;Éâ.WýRÝ­#†Îµ~9ɪ±“,îLqµ/'Y-v’Å='®öå$«Qhä¹›ÄÕ¾œdµûvö\íËIV‹dq—Š«}9Éj%†ÎYmûr’Õb'YÜYâj_|]k1töu틯k=6òìëÚ_×b'YÜçáj_|]›!tîàpõ/¾®Ç|÷f¸ú_×c§öÜuáê_|]Ús?…«©îö:ÍáN WÿRÝí%†Î¾®©îö:KâîWÿRÝí-öíìëú—“¬Þcßξ®9É걓,î5põ/'Y=vjÏ]®ñå$k\¡‘wðܛ豓,ƒ½‰;Érpӛ豓,뼉;Érðɛ豓,S¼‰;ÉrpÀ›è±S{»»‰óuÞv=vjï`d·ÐgìÔÞÁµnUwf¬’§½QGìàZ7uŒUò´7êBÇ3׺©c¬’7]'F®uSÇX%oºNŒ\릎±£é:1rp­›:ÆNŒ¦ëÄÈÁµnê;1ÒÞ¨ Ï\릎±#íºÐñ̵nê;1šž#׺¡ãµþEG•k]èxæZ7u¤˜Žž#׺©cŠé˜\:ž¹ÖMsLÇìšë3׺©c‰éX\ãxæZ7u¬1«KÇ3׺©c‹éØ\s}æZ7uì1»kÏ\릎#¦£çf‚‡kݨpÒë7YPoñ°¨›èC?ó£›è)†~f>7ÑC'YNs½ÄÐÏlå&zü™‡ÜDo±o?3Œ›è=†~æ7ÑG ýÌ n¢‡N²<|ßzºbèg&oB#ïàè6ÑSìÛÏìÛ&zŽ¡ŸyµMô˜¯s0f›è5öíg.l½ÅÐÏ,×F‘^¿ÉB?ïà¯6ÑG ýÌLm¢ÏÈY’‡sÚBÏ¡÷§6ibß~æ‰6ÑC'Yh=ÇFþÌíl¢—ØÈŸY›Môù3³‰Þbèg¦e½ÇÐÏÊ&úˆ¡ŸÙ‘MôÐI–‡÷ØB/W ýÌhl¢S ýÌUl¢Ç|ƒ…ØDÏ1ô3¿°‰^bègæ`«º{cDÚ#ôÇæ`SÇX%O{c$t<3›:Æ*y¥»æúÌlê«ä•áÒñÌlê8c:ºNŒÌÁ–ޱ7F*s°ÐñÌlê;1ªäÒñÌlê;1r½1ò0›:ÆNŒªëÄÈÁlê;1ªÅ¥ã™9ØÔ1gªëÄÈÁlê‹3s°ÐñÌlê‹3ÕgÌÁ¦Ž±8S]'Fæ`SÇXœÑ˜ƒQGs°¥c‹Å™æŠ3æ`SÇXœi®› æ`SÇXœi®› æ`«ÂÙBT=œÀ&zì$ËÁök¢·ú™Ç×Dd9zMôØI–ƒ{×DŸ¡‘w°êZè±7Y¾\=v’å`Â5ÑS ýÌqk¢ÇN²ìµ&z‰¡ŸyiMôù3㬉;ÉrpÉšè=†~f‰5Ñc¾ÎÁÿj¢ÇNíÌ®úˆÚ;8[­ãë7Yèçl¬&zŠ¡ŸyVMôP'Uƒª‰^bß~æF5ÑkìÛϬ§&zì$ËÁgj¢ÇNíL¥&úˆü™ƒÔDd9ØE-ôØ›,o¨‰;Ér0‚šè±“,×§‰;Ér°xšè±“,?§‰;µw0ošè1_çàÔ4Ñc§ö¶L=vjïàÁ´ª;±7F¤½1ìáÁ4tL±7FI{c$t<ó`š:RLGω‘‡ÓÔ1ÅtL.Ï<˜¦Ž9¦cvéxæÁ4u,1‹KÇ3¦©céX]:žy0M[LÇæÒñ̃iêØc:v—ŽgLSÇÓq¸t<ó`š:Î˜Žž#¦¥#Åâ ].Ï<˜¦Ž±8C®8ãàÁ4uŒÅJ®q<ó`š:Æâ e—ŽgLSÇXœ!Wœqð`š:Æâ U×8žy0Mcq†7ªƒ“Çù;½_Aþ‚¤_•௎t—6HvY-mâ9’WÚ Õr䨴Aš äHEiƒtÈ‘qÒ.#±¤ 2= gþHdd GšH„\ G6HĵâϤ6ˆkÅŸ¹m׊?S8Ú ®fj´A\+þLÈhƒ¸Vü™wÑq­ø3½â "ŽåêM¯ˆ/µc9‰~¦W4Ñù)ïGô#½¢N1ô#½¢žbèGzE=ÇÐôŠ6z‰¡émôC?Ò+Úè-†~¤W´Ñ{ ýH¯h£ú‘^ÑFùº3½¢‰žc¾îL¯h£Ç|Ý™^ÑFùº3½¢óugzE=æëÎôŠ6zÌ×émô˜¯;Ó+"zè{_7¼èGâD}ÄДˆ6ú ¡ŸÉMôrÅÐ4†6:ÅÐ…6zŠ¡©môC?’ Úè%†~¤ ´Ñk ýHh£·ú‘âÏFëë¢ÉûlôC?ÒòÙè1_w&Ü3Ñëúö3•žN1ô#Ižóugú;=ǾýHlg£—ú‘²Î,UW™ëÌLgƒ¸Ê\g:ÄUæ:óÌÙ ®Âö™NÎi®Âö™5Îq¶Ïäp6ˆ«°}怳A\…í3Õ› â*lŸÝlWaûLÜfƒ¸Vü™ŸÍq­ø3 › âZñg¶5ĵâϤj&Hw­ø3wš âZñgŠ4ĵâÏLhf9 Ç 1g&4=Vˆ93¡Ùè±BÌ™ ÍFbÎLh6z¬è|fB³ÑcEç3š+:Ÿ™ÐLô+:Ÿ™ÐlôXÑùÌ„f£ÇŠÎg&4=æëÎLh6zÌ×™Ðlô˜¯;3¡Ùè1_wfB³Ñc¾îÌ„f£Ç|Ý™ ÍFùº3š‰>c¾îÌ„f–f¬è|æ8³Ñc…˜3{™+:ŸyÉlôXÑùÌ8f£ÇŠÎg.1=Vt>³„Ùè±¶3ÿ—;`;3{Ùè¡¢³ƒ³ËB¿9»>¢Ù¸lôPÑÙÁ³e£§ú‘AËFϱ‘?rcÙè%öíGÖ+½ÆÐ|V6z‹ü‘©ÊFï±o?rPÙè¡6»”U"×m‰” B.#W” ’\ GJ($»@ŽÌO6Hq žlê9ò8Ù Ír¤k²Aº äÈÊdƒ È‘|Éñ¶K&Hr­ø3•’ âZñgÆ$ĵâÏÄH6ˆkÅŸùl׊?ÓÙ ®f3²A\+þLZd•(vÓÙAZd£ú‘´ÈFb¤E&z즳ƒ´ÈF§ú‘´ÈFO1ô#i‘žcèGÒ"½ÄФE6z¡I‹lôC?’Ùè1_w&-²Ñc¾îLZd£Ç|Ý™´ÈD/1_w&-²Ñc¾îLZd£Ç|Ý™´ÈFùº3i‘óugÒ"³»éì #²Ñc…˜3ÑÞcèG !}ÄÐä@6z¬è|¦ý1Ñk¬è|&ô±Ñ)†~¤ê±ÑS ýHÂc£ÇŠÎgz½ÄÐÄ96z¬è|¦Ä±Ñ[ ýHvc£Ç|Ý™ÆÆFÏ56ú ¡Ÿ©gLôóugR=vÀv¦‹±Ñclg"³8亱íà{±A\e®3­‹ â*sÙ[lWaûLÒbƒ¸ Ûg.ÄUØ>S®˜ ®ÛfÄUØ>¨Ø ®Âö™'Åq¶Ït(6ˆkÅŸYOl׊?“›Ø ®æ0±A\+þLUbƒ¸Vü™‘Äq­ø3ñˆ 2\+þÌ/b–b7ü"6z¬sæ±Ñc…˜3¿ˆ+ÄœùElôXÑùÌ/b£ÇŠÎg~=Vt>ó‹Øè±¢ó™_ÄFÏü"&z즳ƒ_ÄFùº3¿ˆóug~=æëÎü"6zÌ×ùElô˜¯;ó‹Øè1_wæ±Ñc¾îÌ/b£Ç|Ý™_Ä,Än:;˜C,ô»éìà±Ñ)†~dû°ÑS ýÈãa£çú‘¡ÃF/1ô#÷†^cèGV ½ÅÐ|6z¡™0lôC?r\Øè¡¢³ƒ½ÂD§+†~䥰Ñc¾îÌ8a£§Ø·¹$lôC?²DØè1_wæ°ÑkìÛÌ6z䀭½älø™cEÿG|ƒžTôœ@ü™Ã=ÇÐ_±<<ÑK ýýýÆÐ_ñB<Ñ[ ýaĽÇÐ_1I<ÑG ýÅÄ}†ÐßqO<ЕëFEJñD§ú+¶Š'zÌ×½£±x¢Ç|Ý;~‹'zÌ×½#¾x¢Ç|Ý;FŒ'zÌ×½£Êx¢Ç|Ý;'zÌ×½%×HýínÑß’kôtÅÐ_’kHtŠ¡¿$×è)†þ’\C¢çúKr ‰^bè/É5$z¡¿$×è-†þ’\C¢÷úKr ‰>bè/É5$zÌ×½%×è9æëÞ’kHô˜¯{K®!Ñc¾î-¹†Dùº·ä=æëÞ’kHô˜¯{K®!Ñc¾î-¹Æ%з¾Nå¼ ¿$×è#†þ’\C¢Ïú[r ¾ræGI®!Ñ)†þ’\C¢§úKr ‰žcè/É5$z‰¡¿$×è5†þ’\C¢·úKr ‰þÖוâ/É5$úˆ¡¿$×è1_÷–\C ×+ôíoÉ5$:ÅÐ_’kHô˜¯{K®!ÑsìÛ_’kHôCE®ñ¨ÕXÅìëÆ=V1{GÇñDUÌÞñt<Ñc§ï<è-v:ðŽÙã‰;xGùñD¼ãy¢ÇNÞ‘„<Ñc§ïØCžè±Ów´"Oô˜¯{Ç7òDùºwD$Oô˜¯{ÇPòDùºwÔ%ôóuï8Mžè1_÷Žìä‰óuoYPDݦÇ*foYP$z¬bö–E¢Ç*foYP$z¬bö–E¢ÇNÞ² HôØéÀ[‰;xË‚"ÐGìtà- ŠD¼eA‘è±Ó·,(=æëÞ² Hô˜¯{Ë‚"Ñc¾î- ŠDùº·,(=æëÞ² Hô˜¯{Ë‚"Ñc¾î- Š@Ÿ1_÷–EÔmfìtà- ŠDUÌÞ² HôØéÀ[‰;xË‚"Ñc§oYP$zìtà- ŠD„¾eA‘豓з,(=t:ðšÑ?úK‰:xÍ‚"ÑS ý% ŠDϱ‘É‚"ÑKìÛ_² HôCÉ‚"Ñ[lä_² Hôûö—,(=tú’EV(övà%=Êbè¯xSžè)†þŠP剞c诘Vžè%†þŠ‚å‰^c诸Yžè-†þŠ´å‰Þcè¯Ø\žè#†þŠæå‰:xÉÿò@O1_÷Žæ‰óuïcžè1_÷ŽJæ‰óuï8fžè1_÷Ž|æ‰óuïXižè1_÷–®& ôPÅì5]D1ô—t5=T1{MW#Ðco^ÓÕHtŠ¡¿¤«‘è)†þ’®F¢çúKº‰^bè/éj$z¡¿¤«‘è-†þ’®F¢Ç|Ý[º‰óuoéj$zÌ×½¥«è%æëÞÒÕHô˜¯{KW#Ñc¾î-]Dùº·t5=æëÞÒÕˆºMìíÀkº‰«˜½¥«‘è=†þ’®F¢úKº‰;xKW#Ðkìtà-]D§úKº‰žbè/éj$zìtà-]D/1ô—t5=v:ð–®F¢·úKº‰óuoéj$zìtà-]DŸ!ô·t5½Å|Ý[º‰; }KW#Ñc'¡ïèjU£ØÛ—<6OôXÅìÁÍ=V1{Ç|óD¼£Äy¢ÇNÞqå<Ñc§ïHtè±·/Ùužè±Ów´;OôØéÀ;>ž'zìtàQÏ=æëÞ1ø<Ñc¾îµÏ=æëÞqþ<Ñc¾îÐ=æëÞ±=Ñc¾î}Ð}Ä|Ý[^!Q·‰½xÍ+$Ñc³·¼B=V1{Ë+$Ñc³·¼B=v:ð–WH¢ÇNÞò IôØéÀ[^!‰;xË+$Ñc§oy…zìíÀk^!‰óuoy…$zÌ×½å’è1_÷–WH¢Ç|Ý[^!‰óuoy…$zÌ×½å’è1_÷–WH¢Ç|Ý[^!Q·‰½xÍ+„è)övà5¯D§úK^!‰žbè/y…$zŽ¡¿ä’è%†þ’WH¢×úK^!‰Þbè/y…$z¡¿ä’è#†þ’WH¢‡N^ó tºbè/y…$zÌ×½å’è)öí/y…$zŽ¡¿ä’è1_÷–WH¢×Ø·¿ä’è‘“ÐîàºÖãa¬õ›W[ÄhU#úÕ;ˆy…lôC?ò Ùè%†~ä²Ñk ýÈ+d£·ú‘WÈFï1ô#¯>bèG^!}†ÐϼB&:GØèG^!^¢ÏâG^!=ÅмB6zÌ×y…lôûö#¯^cèG^!=æëμB6z}û‘WÈF1ô#¯¢“@ßûºéù3¯‰ž®ú‘WÈF§ú‘WÈFO1ô#¯ž_¢£Õy…lôò =ýºýÈ+d£×ØÈy…lôù#¯Þc#ä²ÑG ýÈ+d£Ïú™WÈDÏW ýÈ+d£S ýÈ+d£§ú‘WÈFÏ1ô#¯óug^!½ÆÐ¼B6z‹¡y…}T¾õuTžöÌ+d£ú‘WÈFŸ¯ÐåÈŸy…LôrÅмB6:ÅмB6zŠ¡y…lôC?ò Ùè%†~ä²Ñk ýÈ+d£·ú‘WÈFï/Ñ Ñ¼B6úˆ¡y…lô˜¯;ó ™èõ }û™WÈF§ú‘WÈFùº3¯žcß~ä²ÑK ýÈ+dVj¬bvæ²Ñc§g^!=v:pæ²Ñc§g^!½ÅNμB6:ÅмB6zì$ôÌ+d£ÇNμB6zì$ôÌ+d£ÇNμB6z‹¡y…lô˜¯;ó Ùè±Ó3¯>Cèg^!½Ç|Ý™WÈF„žy…lôØIè™WȬÛôªŸy…lôC?ò Ùè±Ó3¯ÞbèG^!½‡Î&μB6zìtàÌ+d£ÇNBϼB&ú¸B#æ²Ñc§g^!=v:pæ²Ñc§g^!=v:pæ²Ñc§g^!=v:pæ²Ñc'¡g^!=æëμB6zì$ôÌ+d¢ÏØIè™WȬÛL Ëœy…lôC?ò Ùè±Ó3¯;8ó Ùè±Ó3¯;8ó Ùè=†~ä²ÑG ýÈ+d£‡N¼BúÍ+ôýÈ+d£‡N¼B6zŠ¡y…lôù#¯^bß~ä²Ñk ýÈ+d£·ØÈy…lôûö#¯: uð YU#нpð ÙèC?ò Ùè)†~ä²Ñs ýÈ+d£—ú‘WÈF¯1ô#¯ÞbèG^!½ÇмB6úˆ¡y…lôÐ逃WÈDOW ýÈ+d£Ç|Ý™WÈFO±o?ò Ùè9†~ä²Ñc¾îÌ+d£×Ø·y…lôC?ò YuJ=R!wð Ùè#†~ä²ÑC§^!=_1ô#¯N‘³ ¯:pð Ùè96òG^!½ÄFþÈ+d£×ØÈy…lôC?ò Ùè=†~ä²ÑG ýÈ+d£‡N¼B&z¹bèG^!bèG^!=æëμB6zŽ¡y…lôC?ò ™u›—o¤§=ó Ùè-†~ä²ÑC§^!}ÄмB6zìtàÌ+d¢×ØéÀ™WÈF§ú‘WÈFO1ô#¯;8ó Ùè%†~ä²Ñc§g^!½ÅмB6zÌ×y…lôØéÀ™WÈFŸ!ô3¯‰Þb¾îÌ+d£ÇNBϼB6zì$ôÌ+dVbo¼B6zìtàÌ+d£ÇNμB6zìtàÌ+d£ÇNμB6z蔃WÈD½pð Ùè±Ó3¯; =ó Ùè±Ó3¯^bèG^!=æëμB6zìtàÌ+d£÷ú‘WÈFùº3¯; =ó ™è#vzæ2ë6#ÔEÍÁ+d£§ú‘WÈFœy…lôC?ò Ùè5t6qæ²Ñc§g^!=vzæ²ÑGlä¼B6zìtàÌ+d¢ÇÞ8x…lôØéÀ™WÈFœy…lôØéÀ™WÈFœy…lôØIè™WÈFùº3¯; =ó Ù豓Ð3¯Y·yùv@xZ¯…ž^¾x y…lôÐ逃WÈFO1ô#¯žcèG^!½ÄмB6z¡y…lôC?ò Ùè=†~ä²ÑG ýÈ+d£‡N¼B&:]1ô#¯óug^!=žýÈ+d£çú‘WÈFùº3¯^cß~ä²Ñ#'¡ÃÁ+DK£+º€Õèñ'HùuüÕ‘>ÈÉ.#K R\ G2 ¤º@Žœ?6Hs©}lî92øØ Ãr$ê±A¦äÌÇc‚ür€iwlrÙul׊?“èØ ®æÊ±A\+þL‰cƒ¸Vü™ùÆq­ø3Á âZñgĵâÏt56ˆkÅŸYiLäZñgòĵâÏ36ˆkÅŸ©dl׊?3ÆØ ®&†±A\+þÌÿbƒ¸Vü™æÅq­ø3›‹ âZñgÒĵâÏÜ,&Hv­ø3‹ âZñg¦ĵâÏ„*6ˆkÅŸySl׊? ®fA±A\+þLv²‚üÌ*@˜NñµÍäýHvb£ú‘ìÄFŸ!ô3Ù‰‰Î–>¢ÉNltŠ¡ÉNlôC?’Øè9†~$;±ÑK ýHvb£×ú‘ìÄFo1ô#Ù‰óug²=æëÎd'6zÌ×ÉNLôóug²=æëÎd'6zÌ×ÉNlô˜¯;“Øè1_w&;1¨êJ Îœ&6ˆkËt¦.±A\[¦3C‰ âÚ2‰HLæÚ2ùFl×–éL+bƒ¸¶Lgöĵe:“„Ø ®-Ó™ Äqm™Î”6ˆkÅŸ™=l׊?xØ ®æé°A\+þLÇa‚t׊?³nØ ®&×°A\+þÌ¡aƒ¸Vü™*Ãq­ø3#† âZñgâ ĵâÏü6ˆkÅŸi,l׊?³UØ ®&¥0A†kÅŸ¹'l׊?SLØ ®f’°A\+þLaƒ¸Vü™Âq­ø3ýƒ âZñg–ĵâÏd6ˆkÅŸ9l׊?S3˜ ÓµâÏ æfrƶñg=¶?30Øè±mü™ÁFmãÏ 6z¬dyf`°Ñc%Ë3ƒ+YžlôXÉòÌÀ`£‡J– ýf`øˆ~d`°Ñ)†~d`°ÑS ýÈÀ`£çú‘ÁF/1ô#ƒ^cèG½ÅÐ 6z¡lô¯s00X ¹n‹:ˆlrùlä9Ò&Ø ÙrdG°AŠ äH‚`ƒTÈ‘ëÀi.#¥ Ò] Gæd¸@Ž6ˆgËäà!0A\·Et6ˆkÅŸYl׊?“Ø ®æ°A\+þL`ƒ¸Vü¹ã¿ âZñçÆþ6ˆkÅŸû÷Û ®nÓoƒ¸Vü¹¿ âº-êhºoƒ¸Vü¹·¾ âZñçú6ˆkÅŸ;åÛ ®nˆoƒ¸Vü¹ï½ âZñçöö6ˆkÅŸ»ØÛ ®nVoƒ¸Vü¹'½ R\+þÜzÞq­øs‡yĵâÏäm׊?÷‹·A\+þÜÞÜLÆnY:ÚÂÛè±mü¹-¼ÛÆŸÛÂÛè±mü¹-¼+YžÛ›è±[–޶ð6z¬dyn o£ÇJ–ç¶ð6z¬dyn o£ÇJ–ç¶ð6zÌ×ÛÂÛè1_wn o£Ç|ݹ-¼óuç¶ð6zÌ×Û›è-æëÎmámô˜¯;·…·Ñc¾îÜÞL \·EÝßm×–éÜäÝqm™Î½Üm×–éܲÝqm™ÎÙm×–éÜ€ÝqÝuôY·A\[¦s;uĵe:wM·A\[¦sstĵâÏ=Ðm׊?·:·A\+þÜÑÜq­øsãrĵâÏýÉm׊?·!7A\·EÝÆm׊?7·A\+þÜ;Üq­øs‹pĵâÏÀm׊?7ü¶A\+þÜ×Ûq­øsûnĵâÏ]ºm׊?7ã6A\·E=·m׊?·Ö¶A\+þÜAÛq­øs£lĵâÏý°m׊?·½¶A\+þÜÝÚq­øskĵâϽªÍÍdì–¥£Wµ…žb·,½ªmtŠ¡{UÛè)†~ìUm£çú±Wµ^bèÇ^Õ6z¡{UÛè-†~ìUm£÷ú±Wµ>bèÇ^Õ6zÌ×{U›èóuç^Õ6zÌ×{UÛè1_wîUm£Ç|ݹWµóuç^Õ6zÌ×{UÛè_}ÝðÏ¿úùßÿ¢ÿ÷ÿüóüð[­£ÿî×ÍEqÿþ÷¿iÖ¿”O×ú_&J[ñ„²ËXÄœsÓÄWI¥Üâë˜êèpwE‡Û­‰q¼ž:oq¸¾Ø²&¾Î{ê·8\¸RÑñÆÔ‚Žº&Q&ßâpÃDEÇ+" :2kèxüýü×%’͇Õq_þÛl¤Õ­è­lŶNŸm_íi&M|±Ž4V³ét¸Ÿ½¢ƒ=‘†÷•iA{’Kæ_u¬Ë’{RÑá ÝŠŽö¤};^)[¾ìIE‡;C+:Ú“†Ž—Ä1íÂmÒ¸VV€vmÅÑ:ÊXÄ×y×Åazó"75q˜ŸUFž4qàU†NŠ3gĽe‘CWÖo[ñ„D=-C·Œ|–ë’ÅI€ÜC·x…L¿ê^|½>OùW½‡n™’ž5ñ,@nÓ¾`äq¸¢XVñÕÛM¼Z ̪q°œŸŠ>i'ž€CÃí2ò)E|M³þÄôŸÝÈÿYÖ{qxyñ’ˆ¤ˆÃ]é¶<2¼‹ãíÎ5à×Ö¾n~ɨʼ#÷Ëùi«\[qàÚVß±]©Šø:BtÕe„Öo'M>1‹¿b"§;±3\Äoí·âÂPSÙ»ˆzE •ÚÞE<ÖOßjQ\Ä,šøj¨¿'qï"~²&†JŠ‹xø·¾u„©®îÈrY¬²±3TL© &M{ñÕ‚KNŠ‹‹tlírâ„YÏ^\Ä ÍEhߎ."k.Bûvt"sf2°;½0\Äϸ¶â8À=i.B®ñ¹uYs?š8|¢ðC7ãØ]Ÿ¸V‡ªÈ þ-ž€ð导?q Û‹Ã;§²~bÓýÛ-W»Å8Þ´f¤m›Wåsº¶â èf Çå›&¯¬æ"Ê«èp<‹¿â=i{´UùqíÅQÇQpmÐëSüýÙG&ky3¬Qþbi9fi9fiÙeiœ’Sùbi%fi%fiÅeiœÕRýbi5fiÕeiœÙQûbi-fi-fiÍeiœÙQÿbi=fi=fiÝeiœÑøbi#fiÃeiœ – @QsŽ­¸(B•´/j¦Y4ñu‹˜šRÔTÑ¡µ¢CQSìññ¡Ô‡Ö¢æµöâP„Zkc5yЫ±MœÝ$-»‘ tmëC£ì˲IJˆ/ã˜jRÊ*:”—VtyQXÄ'–(÷忞ñµ:E—VþSÑ¡†% ¤‰S³¤¥fëȓ؃'Ú pYìÜ<âY8»Ÿí·M>QøÊÄ©YÒR3Ø—¾{±µ’²î‚sÉŠx û]pÓÄ )e u¬+_-N “–·²ÇÍzÁõÛEí_wY\í~š5ñ’47vy”_7iÒW&Î+“–W&(±\[qüÄá:éeî[|Õñ‰aª;ÿ ¿shoç¥"s=¦bçIÇšÃTì|hÊã\ NKSóØy[qYWL{;ÿföâ«ä>;'MË’coçâÄ^ì¼ ÎjSwØùO¿¶âø‰-kvž5q°s ÂiiÒÒÒuwPæ^ì?‹i»;x¬²±M°%§¥IKK}ìÅ1u†°º¢SÒÄ×[FÏÌ©YÖR³½_{qÉÿˆŸ÷̉G¦³˜)4‹·¸5‹™3‡œ>ÌbN¡Y¼ÅÍYäØó—Y̱Y丘˗Y,±Y,®Y丘ë—Y¬±Y¬®YäȔۗYl±Yd¯Ÿ5¯¿îCeŸûv7Y|ơۋ¯»!ZK!5yÐa7$6L ¹è(?qè yì6*FPô£Ê[|ÝÎäu„@y½ÃÒ8æd-æ¬Ê§k/Ž:¶K¹ ±?[sT.É ÐqÍå‚/×6S‚+èØòýŸ[?ç«Òܽi1iuM¿òWï"IWÌìI\ɼÅ×' pUì)kâ]{í6ÄQË"^5³¹ô:ê-Ž/+–oS¿Œt‹Oíy¾ˆVų&>ôâØ">÷Å1A! ˆ‹Vÿb]r,«Z,[ÍFnjßYù¼M¦w=Õ¤ï‚oq˜ZÄaäÅq÷">÷9›:!ÎÛ¯ªm¿ÖŽeò.m½7@SyDÐŒ‡3·xÓÎ@÷qÒy‹Cû–µò:Œ—/·øÐ^¾À {Ò¾ŸÈ·eä§+,.ØK°~νז–óß±OÀáûÇ=þlG^úÍ[\{b#/­ƒÅ¡óÍzÎ:Œ7"·øÐÞˆàÈkßÝ(-óc<ò`qäw¾»Ó-,ægyyÛ¤]»F×3ôâÉ->º²í†o×ÐñŶŽ[à-‰á"äë¶F[±ÏÕE”2qi¨{!VÙ-Žž¦â"Ä!ä-. uï"Äû²[ 5k.BùvÓP¹Ià’.B¾kig¨èÂ× 2òE|½ô½^Å@çœñ®]•â÷^ÀºÁ‘×¾4ÍE(ßNòüïêZv¸ù«åÝ·¢¹ˆ¬‰®HÑ=*âø‰"ƒj\ÓiZMgí@)¯6.ʬ-$áZáHúµÂ[úl- ÃeE ÜDžÕxÛÜ´móªüÃÑßûÞ¦8úaTÉoqèò5×, GoÞŒSÞÆ{´¦íÑVååµÂÖv:®× ½>Åϵ±Æ©~ë_,­Ç,­Ç,­»,Sò6¾XÚˆYÚˆYÚpYgµm~±´³4׉HçÌ®_,­_!K»Å?YZ¿<–Ö9³ëôÁÒ:…,íÿdi<–Ö99ê郥õ²´îzþÑ9AèZ‚°5åUž·E¨õäZÔ”W¥oñµ—¡‹¡¸¶ˆOåvtõ{ð[ŠP°ïúõ¿E|ì·ˆXÔLû‘—E(ñ‰œÝt-»‘{ˆ^võ!àK/¸ßâk ®JãÈkâS»H#/öà‹xÖöàC¿*½ˆÏýUiQNVı†%öàS³®¥fëÈËcå^w ÷H¦qhz‹ÃÁ|êLzÝ~¢tcœšu-5[wÁò&oo۽غIÆkŠ[|h¯)¦µÚv/–•BÙc·í^L<šíœv-1\¿]V)zßm¦ iÃ0Þ3ÜâC{Ïß^4ñ©ªá·wEyؤɋ¦óÊ®å•ë·Ëû}ì>±hIyû¢­Ž„Ã>v.ßíô¹µóÕÙ­v.;wÜâr®÷v^4ñYµ³ŽlØÐôÌõà´t\;—¨ãÚ À4½Þ?¶Gè1RÈ->›æ Š~ 8¶õÊ?ÇðWœÕrع¼¶6h÷‰Ð½”oŠ8è(œ§¥CKK×ݼ/5Ò.Á^¯gÂî@F¼‘¶ ¶á´thi) ½8¦Î«¿té/FÞ%ØÒ_ N͆–š­èòZÆ(;÷õÌÁ‰Ç¨_f±Æf±ºf‘3‡Ñ¾Ìb‹ÍbsÍ"ÇîÑ¿ÌbÍ"ÇÅ1¾ÌâˆÍâpÍ"ÇÅ1¿ÌâŒÍâôÌâäÈ4¯³8¯Ð,NöúSóúÓx£5i»‚,¾ë×>ñ±¿[ŠûЮˆãnHl&©Uy9‹3í6*pÿuU^†¬E|î¯J£òš8îsDôœs¦sVå庙w:®W¥6âKã˜3µ˜3‹¾gÙeJkѸ”?Ë.Sz¬EŽLS‹L€Þöâ˜ê¬ÅK@˜JÝå@ò*îäÈ4µÈ´¢ËÛŽ³í@šÛ_pÌ™Ý1‹2Kœ}›ï6eeuxv×8rdšÃ1‹òbÒÚÆl;‹²¼;·;¶"A82Íé˜Eù:anoY ç,ÒÍ*p)1‚¯ˆ9,Žá/Ë¿â†ÚZsa/Š8¶&ÿŠ;Wkí>í/É®/áÕZcLûKŠëK¸´Ö=Ðþ’æúnn¯õﳿ¤»¾„»ÈkMÎèÒ¨±x"º”õ·v?3ĵå»öv¨ .ì.â .ðÝ×…i} ¬‹ç¢ˆCˆ®‰CGŸ¾ˆÃsgU:tßmcºðk­ÛpJÐ;³øï¿RÚá”èâ]Oz­w׺$Á”èâY¹ŽŠSBš¸l²ô³U¼ê—Vé¦(ÐúÎÁÈËÕËß`€Ë*C׫"#Ôׂ[š8vyÅ<Zß9Z{4‰›±,þû¯òþf,­í_Dn‡ÎË¥.Êzß‘E<+ÍMúÂ`!t/—R…S‰4ñ©¼TgÒ¾¹–Ås¼ÕzîáÈÏ´ÿýWe3F^ÜË]ÄSÞßjÄ‘ÏMÏJkyi,.û·ülGž´o¯ÚôâÈkß^-NU´†0ò"-eqà¼Ϭ7vYÄa„Öô¾=kâð‰Iüvh ÁEˆ-‹£¡‚ŽI©ºˆ'å9ìê"Rû•ê^|1T¢_©î\D¿º"¾jοzݺC|-F¬â‹‹0”_ õ¯òðWœÈjÍqä¥ ¶¡bþ–ÔÍß"¼No&#Ķcþva~°_@[ó7tΚ8,Hÿ†Gùuý$‘¢r§GÒ:=¢s–YDß 0‹ …~ߣÃý9V®[AI_?ñÂ,ZZ§GZYªÌDy OSÉD¡ ÜUqìv¸æ‚E½„¶ˆ×jÌ5o²´F‘ |–nìÞæ\ûKh¨|ÓÄ¡ËÄz ”WÑkÓÃ÷Z$­×"(/.¡±8ê—н>ÅÏ•î7H‰>XZ¢¥ÝâŸ,í·,û RJ,-¥¥ÝâŸ,í7-³Z­a mi9fiÙeiœÙ¥òÅÒJÌÒJÌÒŠËÒ8³Kõ‹¥Õ˜¥Õ˜¥U—¥qr¤µì³-­Å,­¹,­iTÐ’ÈRß•kV"¨ éâk¹ı¬&å0Tòˆc¯`ñWœ_h-ûðÛEŽÊ=÷Hk†ß®Šçªˆ—fØùØ–kÀΓG¼f}'È Ikßžë^?1¯vMÊTñUGùWÜ0´†Pí×;Y7ëõN¨öˆË¥‹x¹öWÊ`+'®w®âS©eÔ®^.]ÄëÐ &ÜÔ´¦†øíx5ÅÅfj¹Þ ß..—.â…ö÷ ñÛ»&.ûˆî7SES¾Z œi-áÛe5!§Ý'¦¡LÄyõ"^§zƒ¸¥"i-W;'¹_Ìy7×NDæbA]_æú·mþÚ—,ªŠ^¦²!_ìüïw/¾ÎõCGέ´¶X4èb€Ën®1déw™ñÕòzvP¦žRÜâõÒ"ÞÐ=uÞÝH$pÜt’´¦“øí}/ŽŸXSU ƒª86Ä_qn¥5„·Èh»,Âj-Æ,¶m–(A8·ÒZS"úØ‹cþ7Òj5R¹>Ìb¹B³x‹[³Èm©Ð‡Y,šEnèH%}˜Å’B³x‹›³Èq±ä/³˜c³˜]³È‘©”/³Xb³È^_kè{1™Å—ºÛàn•<âÐ/Wþ{}­í# Ërvi» E¾”Ý.^õ –Ä]#Ië èUGêžEöçEóçeè9j»,N¼ªµLÆ. y¬öúZËKÌÿÊ^Ó8õ©:mó*n€pÇLÒ:fº¼U¯HñÎbe^É1‹2«´ß3Õý,Ö¤‰c_3ñWìõµvŸhCr„ÒvÓS•Y̺ø:ÀÂ_p·PÒº…zRĤWï,²?¯š?¯úmÇÐòvÛZ¯R/Š8‡9³OÓºÚ_Ò]_®Kë³gÉð| 7#£v}ø’»˜õ%ÜŒ´v`æ—4r} Û¶Ö3‰ W£(yÜ]‹Öp½fm¦$ë5·8ô¢]Z–Ñ ½$u‹¤\¯z£ÖU\kÔ:õÿ·x‚!KÛ»­œ°eÙ*-±þv“8ß¼äNP¤u‚‚)ÝÄèîÅGÖZ"LI+Š8´s]¯½¤WÊnqè[²>Ãz¯ÓU\éu*¦Dùv⥷±˜’¢‰wýÚ·±"­Œ|™ÃÝHªf!?»¡“ÉÑ->”f¥øí:~¢Ø3q+ÒÚXô«‘FÀ‰ðÚ–|ôñFÀâ½i¾£¾ƒÅ‡Ö+afÃw°øT˜Ç1¬'åÛ´%\}‘á;Xœó8üÇ[­…ŒüÃEp¼]Û¢‹h†‹`qx&.¢.‚Ň֩aÃE°¸Ö"@Œ¼òí žÉ¯.G^ùöDÙpœªhýÇ`ä.bì]D3\Ĩޏˆb¸ˆ±ýDé"x“¦õ!O¼¸ÿ*œxuxøVqèÙRÛÖEü^úx÷ñ_ •êz÷qqmˆ[·øb¨i.7WñÛ~q0ÔºŠ/."%My0Ô)þŠ{¯‘Ö{ ³Xew÷³¦4s‘OØ(e_-8¯ƒÁE|‹¯vži9è‘§"¾.€:~Õ½‹>˜Åa™üáØ»ÊŠ8Þ~Çc&nGZã8yYI¹[·uØ©+.Bž¤Ýâë;ŽPÑß±8|b– \ÐÇÑÚ^ÞRâÆqÔ³rKi^úí[š§-Ga ÛE)âéšú-%î;GZß9P^ÞRº›§õ¢ÜRš¤_¿¸Åµ÷¨¼†žÈ¸ˆÏ­ÛHkÝÊË[Jwÿ±™öuD¯Oñs%…Û—‘־̶´³´³´ê²4Nɵöe¶¥µ˜¥µ˜¥5—¥qV«õ³-­Ç,­»,3;­˜mi#fi#fiÃeiœÙi ÄlK›1K›1K›Kã`¤u3-ín¢õÉÒ†ë69÷à"­TÐD#6º›hAÜ5Cƒ¡‰Ã½¨´¯ ÉÛ^,Žåš®UÐJÒÄîñà¯8¿Ð:€Á·Ëžw ¯µÞ’¡ÆQ›&>÷;üö©ˆC¹f}Šß®)uqgû‘Ö ¾]z«»Øú‰T”Z“<#y«£áüBë?Õž‡—݆웊E|*¼ç°Lv^¶Š®U{Š¢¼ØPÎn´iðí;¯ÛÍÔÊaçu[M;φ×톢hõMy,FH;çäHëІ»!i‚m÷‰hçŰó¶ÕQ‚pv£uh[íü÷ 7Sw‡¶u®{þµ-Yäß&¤ˆ/sM¿‡q[²øûßÝŠÃ\¯òÕÎÿþw÷âë\W©#çVZ9,È¥<¶Å±Ò÷vþÛ…*⫤ž;/Š8ÖÖ–âhç]Q‹„• îaGZ;øvùœânB·~b©uoç2ûs_ØÀ¿âv¤õ°ƒWÞöº{ØÉ^sÛWÞöš×6K” œ[iî}ìÅ1ÿ[o{º¬ÏNÚe‰ò¶·ª#­U Ë“hn îÛ^ÜEŽ´.rö,æØ,f×,ræ u‘³g±Äf±¸f‘c·ÖEΞÅ›EŽ‹Z8{[l›k9.j]äìYì±Yì®YäȤu‘³gqÄf‘½¾Ööb2»™s·I݈´G×’%î"—´.r€.Š,Žеh€èCïê\'nB—´&t€.vý,Ž É9‹ýzÒÐõÊ‹c³H¤Îâ"NɘÅÌ:fMÇlÌbÞ¥0‹”ŒYÌÛüB‚Ö±h:cËÄ?‹•Ñ«cEÆâ8Žëë ˜Å?©Ù^ºÚLñWulŽY|˜JÛnzH™ÅÔ4q8šâ¯:ëØ³(®ƒ³8‚´êÅÁèCC×oÒ³8†–,ÿj2ÈÔ@¦zËÅ1hˆ[~‰ÛÀ%¢_BäùnÄ–(}øJ®/áuMåË—×—ðò¥úåKêùK~»ř ÊfðŒôÿý¿ÀU/ièð˜þç/úéÚè?âÿñŸÿõßÂóýºþŠ kYXÝïOùµÿý¿Ö²’—,V—\zñ5'¯ ÏÚju½iâ…ù…(mµºLb~Xú>^Ëü¬V—ë/RÄו‘ÓÎv/ž±ëVWÄʸÅáÞç¯ô³µº*Œ‹Å ®ŒÛ´±Û¨†^Ñ´ÿ o­.ƒ8÷¤×òJ°§\„CͳÉ#­>iiB—º0›¼›÷Ÿ•Y ºMšâ̦z5®â0ò+}6Œ)\õüG|;À¨#7Ô×’â ’9r¸¡>œÊ­!gͳÊ5qhÓw­œŒ˜ÁâÐÉsë‹û&ý&‹Ã«óºzíËpú,}*ÁéCùBS­§¿Ê;V³ hû ˜’‡?f–u{ þx’G®Àâ$@~vSòp¨,žŠâP¡á… ö,žÈÏvJŠ&^’âEçDEù*@´‰C³aêm“Sòpim7òuÙdÁ˜þqV{ñœñPág;(Ò'µí·ÿs=sûíhóLü mÞÀÛPV×·Þ&—½·©¥(âT›‡¦ —0›¾3í?×o·Þfda6}gÚ`óàmTq0íŸUÊ•šòõzؼÃÛ0†¶ï½þPXÝØ™6†‰b„‰±õ6=í½Í#¹»•a"abì–L?OFv>¶ k‡)™šò°âš&)B´Z€.¼ÍÜ|š·IMÏ ‹æmŠ"ŽÞ¦ù¼ 3\Á»ñßÎíô/¨öõÛ~Õ^úá¯Ä­ÈÐqh°öSÔo‡¼ŽË;—VÞ¯ª$¾ýÞÌ'ŒE?Û¯êC‡N÷kâ\TêáU¼ˆ^æÚ·ƒ¯ãªÓ¥Uà«FßžvÊÓò ÕJOñ}!QQžÀÏsoüKëomŽmŽmŽ-oF´Jžm´%f´%f´%f´œÏkFÛhkÌhkÌh9§ÕºµÛFÛbFÛbFÛbFË9­Ö Ý6Ú3Ú3Ú3ZN µé¶ÑŽ˜ÑŽ˜Ñrj¤5?‡‚5¾…½Å±tøçÉë¶`ý‡žDW³BÁoG®âYp>+뢉Gfµ+X'E ÖK>_Õ»™«xoa]+Ž[º_ZKw÷—Öç¦$‹õžh7òk&,´ªâ0të^¦¨ÞVñ*À´oŸ ÎI©Ö‹ÂÛ¤´->¬Þf->äQñ¬pR‰R§&^HsSwV·x½ÎÊa6œkõ¯”õž·Ûÿu½CEF8ê[<+tQ¢Ø¨‰c±q¯—á.ò¾Ø8œVǵÖïå±âʶôKF½—³ŠWÁpí ÐÜÉÿÒ:ù_:Ï×-.–Ì:òЋX¤F·xNŠÙ`½NÇzÝø¥Ôë4åëõPÞ±d8!×pPä‚mÛêx›dx›m‘9Õ¦,™¤‰cŬ)KFU+fŹd8Ÿ×ˆ Ð4aó}÷í­hK¦hâõÙäDZd8!×8`'Õ$úØí9Öþ!°“z|ûØî9ŠWyNȵvÿ V‘Þfîv+í¨õHævÏ1tå¡ÐÊ<—Æj qõ'_;tçíÂÄ·:BâÌø¯L¬#SÈ:nñOÖÁMò¯œ>XGN!ë¸Å¿Y§0Z÷|Û:rÌ:²Ë:8WÈå‹u”˜u”˜up®ëë¨1ë¨1ëàh­õœ·­£Å¬£¹¬ƒÃbîŽj‰,²å¾­–ü(Õ¹ñ\Äa×¼^¥)XJØ‹ÃÖœVq¸Y4ñuz»R-É%)âëÖ|¬7#¡75ièëÖ<ýÓ”h3q?xûŒñ_y8ª%²B˜ÇöÔR-¡Œw ñ®\bBªlM§$‰,z‡kƒûjÉŸUAGºuÚWKþÌè^*µ;]§Cy:ª%²:šçöÖáz÷MÜ'¬{ñuè²R-)I_¾Ê?èŸ4=>‰®r96ˆÒ'•k»úQj*r›r‹CMåG©©H§r‹Ã^¨+5•R5å¡Í5Ÿq1±ÃUȳA^¡Ðvƒø£ÔT¤;¿Å³ÒëE.ë[¼$eYC÷¢)_ˆ6tp†Y)®’D¹.KÚ~{V6ˆyhâ«òµ;ƒýqÇÂâtµdÏ·ÄJÞ/,¥ò"K'·xNZéäÂyß‹#úRyi—¦|½ÆåXXœE—âYX"S)e¿°”ÊËÃ'•ýÂR*/2ոšFÑ•ÊËÃ'më}ù*Î…Å9|©ž…%NRËöVèVy¡©‰¯Ê÷æ]XÕµ°8Ó/ͱǒա²?é&eÕ›&›™©oSPyÞ”îØcaï¬[\Uk{¬Ú5ñ2 ÉVy8ªfn«Ì/#?c#?C#Ϥ!W½>Œ|½B#_¯ÐÈ3ŸÇUÓ‡‘¯)4ò·ø·‘çHXó—‘ϱ‘ϱ‘g‡ªQx\À6!Gþöˆð„þ~s|5ÒßÜâ-A,¹7 À'‹"|cÏúE÷EbƲsìSbp‹H¯—÷„Øã ok/â`´¿2‹OÒ¨[z® Ôìú …EŸ#ò]qB6åÛ Ù þÞ?¿'¬Õóž°r$¬Z$\­.Áƒö[ü÷ÿêÊ•±Åêï oñÇWëX÷Uï°Ë鋸ÚfÄ«ramµ:ùžð_û8Â{B¤xø5÷âÝÒgÒ3ÔE\Û5O\EGÛbum+NЯôÇùjŠù†.oì©$au}c6øž°C3a6};ïmq¨ëŒÊ÷„·øÄgi7úÌz~¼ˆÏ})NŒ)=ÄÏw³˜kéÒ¸–®•}K¾ô¨wÉ (¾Çüâ¶Ä-¾¶@‡w&kóyùÒãú„õAàÚGN>G¼Å¡ÜúÎú%NMú%¦[œ \S”§ _Ú6ßÊàü¸jùqF°ç·­½‚Ö—Е^Ãqà^<â:%hÍâ}͓ւ íÅ4èYÞVÁ”tM|âáÄn þ°'|Õ¦?Í‚ygâ±K#ƒ)‘÷™x Fî÷¡ß?¾Å¡)ðZŠƒAuÄ›ö y±†ï…ó¡]xiuv¦ mVoSzSÄê‚æÞÛH«»Å;ærcëmºxÑw‹ƒ·‹ÍOÃênqdùÅÁÛ¦<švÒÁ‚·i¼'lÉámþ$f;q4m «#¨]_/x¯Â.:5ìÅוa¢Áܶpu ¢ÕÂ^„ ¹R”ÇWõ0â¼ÖÈ1ˆ´î`ä묊·‰ó-Ž-ÈIñ6"u½ÙýàÛõ3ám¸´«ñë]+¿ž|åÂ$qW«Ê–:®KgÅâ@·lHg¸[Ä woÎW.Ì]wiÜuðU(sךeF6¢Ì½.û(ƒ_%£Ì½¡M¾(ƒ®’·ª©|•|åÒÚNùõ• ª•žâW.ÌøviŒo¶Ñö˜Ñö˜Ñö˜ÑòfDcS³vÄŒvÄŒvÄŒ–óyfÍ6Ú3Ú2Zæ »úõÁhû2Ú[ü“ÑÞ$bŸŒ–ù½.ßË4ÚN!£½Å?íMöÉh™øëÒˆ¿L£í)d´=ör›)½.ÒëÒéonqQ:\/ܬkùLå q ¬Å™û">•3w(XMù™”s,XkèX°^¸8°`­|»(&çŠã¼N#*ƒ)I☄‰Ê ª_×)‘ï oñ¡ð¹à”ˆÿ[|^ʉÿT÷‚¸vhŽÕ\ª¹««ìzB~s¼aåÑù0ŒÙÛ.½ ¦¤ˆ{³½îFÞ˜M|Bs“U\m_¾ˆã·“ó=!Óº]­Ä޶ŇõA PÈ›·ø|¿J©SŸÊëeQêT”¥Îæ4N‰5º8ÜþKOÛ·ÛÿõA TdÄsÄ[|ÀòÕÓï‡oñ©q\c±QQ^“Óê8£ÖXì`Pä5û>¶¥Æ ޛŔÎ7ÌOwiüt°d7·Kf}¹ §räçÖ:Ö;Óš¸¹¯×¥_J½NQ^Ôë†oÉ0ïÝ¥ñÞá‘‰è¼Æ¼wXÝo#(¦öâPŸ_›Lñœ}/>›æmTZøE\TÌšoÉ0ߥÑñÁ ÈìbÐîÛkS–ŒŒï7ßõd¨:/fÊ»4¦<ØIÉ7A#íöÀG¾î¤ä› ›)önå9!×Hì@-é¬FÞí&VgjIgusà]É笠ÐÊìv—ÆnjÉ7A7=vevÞfü#~¾Åür—Æ/g[GYGY'Põ›m-f-fœÂhœp¶uô˜ut—up® ±²ÙÖ1bÖ1bÖÁ¹‚F˜f[ÇŒYÇ Y3©]“ši7“Ú'똮·È̤vMrTKd­fÒ¶ZòS÷Õùå‡jÉúžª%?I‡jÉz‡ðÂæ^©Šë¾Z"߯,â®eÖ}µ$+ߎ[óé|OÈôr—F/'n\â àLÛ;P¤TKä{Â[|Ðþ“¼q©ˆÃÎþ‡öÕ’44åaË?÷Õ’Ç{ÂE|=Ü^Þ”¤¡ˆ‹ŠÁô¹4fæ»fvTK~ÄÝ·™··×»oâ>aÝ‹¯CWzÝVKï o^ÀõÛKw¾'œ®ðÌ xÍâØ ÊRÜ,Û âRS‘ç·8ÔT~”šŠ||s‹-)5ùñ&5„½PoNãâTpVÇñáëvƒHJME;Üâp/àG©©<jÝm¥RRj*ò9â¬Û=–ñb îÂ0×â5›cƒ(Ÿ̶ýv­¦"ŸÜT«òÿzbàXX®æLÕxÍîYXrzû~aeeaÉùéû…Õ÷ +©âPd¨}¿°jV”'lmŸ ‹³è9< ëoÌ̱µ¡¥òò“Hã"¥òò'”íÅ¡¬GJå%OEy°ÍÔšsaq?§gaÉLe{+ôÏmüíÂzä ÛkíŸËÞŽ…åyOÌžI×åØc‰# g¤ì±ÄÛª[73ηUÄtg¤Ò¬:>ºöGÕÚK8¾[v9Þ·UÄÌD¤2™#Ÿc#Ÿc#ÏÈ*ë9ò%6ò%6òÌM¬¨˜#ßb#ßb#ϤÅ*Š9ò=6ò=6òÌ'¬‘I â}iO”ÉË}i"²hoûÛÚ´v:÷¥qè%¾Ü—¦¬S-âÐhh¹­M¥ª÷¥ñÒ÷¥ÿù¡ê”E‹xMÛÚÇ'yÅOòˆù2HãË€‰·ªYü÷ÿ¢ý­j˜8q§{ïû;Ý0qâVõ"¾¾Ç]oUÃĉ;Ý‹8Pñ-wºqâ†&ÝËVñšÔ;Ý‹8t_vr“}FöSRö÷Ç‘ÿsuûg7¦®[ïÅ‘;sYÖE${ñ/ÍÀ‰É>H#û µ½ôILöA@½ú$ä|,Š8ôCY}Òúð[ú¤[|퇂>iê>é/—擆î“ñ©ù¤®û¤[¼Ž‡Or-'PÑ LÉÃÛpDEñ6ÐXzGêÀÅÛ@s`émXúà®Þf’‡·aqèÆÞfކš.x›ax›[|ú¼ ¢sò¨±´À”<¼MÙJ)b–ÒXZÀÛ$,½³8šv]AÁÛ¬S-â‹iÿ‹8´¯lÂlêδæ/Úz›Öµ½8t_j7G2x›ŸªŠc¾l½ÍŸg³{q0íä{ÞJÌPCCÍ:%Ô±ôÎâhÚ&Òr…4q°ùD{o“ú¯¼‡Väk˜X§¤^@ ¼ˆ¯K&ç5LLðói/.ˆJÇÞÛt&ÚvÅUßóVbzÒèuÖ)I³‹‘¯5­KfMª&¾ÝXÎ qP~DêÛo§ìô6ƒ¿}hß>Ôg,þûÍý3¾ ™Û°80É¬Ï jQ3ñZß?ƒ fç!¾J<ƒ`ñßó~íŸAàWõ¡ˆCÇ×õD­jÁz¯íý3b‚Ònà«Ä3GåᨕžâߟA“¼P¢F›(d´·ø'£½Å?-“¼PJŒ6¥ÑÞ⟌öÿf´œÏk,-¶Ñæ˜Ñæ˜ÑrN›Ê£-1£-1£-1£åœ6Õ/F[cF[cF[cFËi¡Æ“bm‹m‹-§FS DÅ…tÑõFyÖi•ñ\”‡XÕı ºˆWViÇ‚hrÚ«·‚é.¶•Òt eÉMË>CY2]SË>ɹd8)Õø|Ј„<×ݷפ,™Ÿ®‰Cªì]2œUj|>°hrÁ¶]â /ªÎ@·ˆCâ\¼ÊsV©ý€ZEŽ|ߥÄðòaUK¼|Xıç°ïå1Ù id7 –xùÀâˆî}ùðWü|„y]Hãu±­cƬc†¬ƒ)W¨\¬£\!ë¸Å?Y“žP¡ÖQ(dÄÏÖÁì"TÒë()d·ø7ëà\¡ä/Ö‘cÖ‘cÖÁѺ”/ÖQbÖQ\ÖÁaQ£È€-¿¸ Í⸻]oBSÖYq$[Ëû-¿¸ ½ˆ`Îû-R•‡Ý­J§…ï–ˆ©7¨4Ç–_Ü„fqq†”-¿¸‡½ˆÃ–ÿGÙò‹›Ð‹øº9þ×Mèç ˆ{Ø‹xÍ{ØŽeÍ)AéŽ-ÿŸ+Ò;qñíT÷[þ?W¤÷âÈW «»'e8v9…5¶»XXÓXXc[€…5Œ…5v =.¬n,¬±MèŒüÝqÿÓÈ7Š<;T­ï;­LJM$¸wçõµoïÊ·D '†"Œa ß­M ¦¸ð|‹„—²oqãêé"þ¼zúÏÐÏ¡(â º/ŒG ÛÑ+Ê'ÁÙõGùóÓŸ–=O¸µ=i­íaâJÅ,ún.¿¶&þÃó³¸JŠ8P½åe °NÜoËN{qhÉÓ– ªÃ¸ ºˆ?/¨>'î·uìÅq"ú*Þð}„"Ž´W." â¾ü¤õå‡)éb pwÆG’½eÝ—¨+âcîsD{ñô¥o/q_~ÒúòÓÚ-úᓸ(Һⓦk(âØº`õIÅðI,}VWŸ„me…SañYö> ’̇OjüWYñID†ObqJŸä0ZN 4N˜’‡·á H^ÀÛ4ÃÛ°84NoS oÃâkãð6³ކű›Äê.²ám:ÿUQ¼ %ÃÛ°8eŸ·A³áäQ#T€)yx›±yð6Íð6c;tàmŠámÆþÛ“ï2>*F¨ÞFPÓ±8šöJMGØ«z(âТv}¯¶z›"ìÜ™öJMÞFã-âÒ7ÅÛjº[½ iÞf*Ê£i{_Ç2™id0%ò‰çMç,_Yñ6‚oïdëmäÏ[|À©’âm1Þ">ÈÖÛÈ'ž,Ž +kÞ¦+ÊãŠ+NoÃL¤1a`»½›‹bùºîö õ /âØŽ{(Þ9 nqüvrzf ƒV¦Qy!™0hm¢Òç¥ß{ºÅôa¹ž°]Û‹§k~¸ÎD¤iÀWÉ é7ÄÚ‡.¤ÃW‰‹K·84g\.¤ãW‰¬’Å].¤3i\ðUòBúM¨°*¿^HGµÒSo¿}a8ƒ¯¢¡ˆ£òÉùô‡ H#T€ôcÉ”íz]23K¦l‹C´Ú|2–LÙ×ëq¬×)Ê‹zóÉó<ÆóƒòX2u»‡]—ŒÁ|³ˆÏª-™l,™º¯˜-┌%S÷U£á´:N 5– ”Ç’iÛo‡%SŒ%Ó¶Ê'çu^f™ e–Œ £›eºó6eÉвE\R‰)E'E\´%3åEÑÉ»d8«ÔÈ/Ј—‚7{D“²dEÙ">ˆRöQÄEÙG[2]Q^”}¼K†“Rz%Ë%3wß^´%ó3qPž¼K†©7H£Þ€í€¼¾SoLÚ_߇퀼¾?¯mâ콾Ϝ¤qr€ZòúþM,±¦Äëõ}PK^ߟ´Mœ½×÷™—‚4^ PK^ßgr@w_ßÿ#~¾Â ¤Q0ØÖ‘cÖ‘cÖÁ ”ÆŽ`[G‰YG‰Y§0?m5fÕeœ+hD¶u´˜u´˜up® µø·­£Ç¬£Ç¬ƒ£µÖd߶޳׳AîfOs:¶üò ûÝŽšc/Ä9¸åÿ)šøxÔ+ž[þ6qÜÝ.Ì7¸åïM‡Ýít=ýIÜ%?i]òqPœ;§»Í=v ×¶ü?YŸsçç TRÄasü‡Âd¿å¯]‡Ûõ¬÷èO9¶üèíÄå·×ý–TE•Ÿ¾ Å ëïã_Ÿ˜»±°X\ìrÖ……\X‹8ìr~h¿Ë ëÇ=ðº°`—ÓåÅx:­#óÐeÇ.ç±°òö –´Â€\Xy»9þQv9…•wûXX”Œ…•·»cae/蘮ŽI Y¨#‡¬D_t¤˜ŽZÈjðW²Rú¢cŠé˜\ãÈ‘)å/:明Ù5Ž™Rù¢c‰é¸L/²~ÿG¦T¿èXc:V×\sJ틎-¦csÍ5 Ô¿èØc:v×\sJ㋎#¦ãpéÈq&}‰3)gÒTtìë_1Ý•¿Ä™‹3ùÝ‹‡ò€ò—”c(“ǘYàÊ_PŽ œ\ãÈ( @9€rŽG¦ü%2åXdÊ®ÈĽò¯ü%2åXdÊÕ5Ž™ò—È”c‘)·˜pÈÊžõ#ö#y²ª¦|ÙˆoÂ*ý‚}w¾¿òø¢ãˆé8\:rÈÊó‹Ž3¦ã|i ”çÎ÷W¹>(_®òåR6ÎÜàþ*ôEGŠéH®qäUÒSLÇ3Že%Q>Ç”Ï.#àUÊKLÇâGY¥~ѱÆt¬1#àXVÚå[LùæÒ‘CVù²J,de—•ÑP9d•/!«ÄBVùw™œF3ˆs,+_bY‰Å²2=FÀíůú%dÕXÈÚ÷—FÀýÁ¯ú%dÕXÈú#0îÐ}Õ/±¬ÆbYM.#àU¿„¬ Yû^Ö#àU¿„¬ YµÄŒ€ÃAýrêSc§>µyÎú¹eõU¿œúÔØ©Oíž“)îL}Õ/§>5vêS‡kÙë×/÷jì>Bžqä&ÙWûr¡Åî#´Ësg‚{a_íË}„»ÐÈ3×{ûr¡Åî#´äškvîí˵ƒ»v õ–sÍν}¹vÐb×Zq#ïGÚ—k-ví UÏ©8·;¾Ú—8Óbq¦µÐ©8·ü½Ú—Ôb¨¹w·½Ú—Ôb¨ —pj_P‹ 6CFÀX¯þ%2õXdê®›rÜtôê_"SE¦îº)ÇÍA¯þ%2õXdê±›rÜÝóê_Žƒzì8¨gÏýîÂyõ/§>=vêӋ笟›m^ýË©Oúôê9ë禘WÿrêÓc§>½¹Æ‘#Sÿr¡Çî#ôîGŽLýË}„»Ð]÷¸—äÕ¿ÜGè±û}zæš{>^ãË}„»0.Ï\skÇk|¹v0b׆ëÚ÷P¼Æ—k#ví`$—ŽgÆ—83bqfdÏÁ2÷$¼Æ—83bqf”Щ8w¼Æ—4bhT—p_Ј Ñ\ãÈh| @#€FG¦ñ%2Xd®ÈÄ å®ñ%2Xd®›rÜ7îš_"ÓŒE¦»)Ç}ã®ùå gÆÎp&yîžp{¸k~9ª™±£¥=œÔ‘CÖürT3cG53‡NŹ=Ü5¿œáÌØÎ,ž«Üîš_®ÌصƒY]ãÈ!k~¹]0c· f‹DzùåÚÁŒ];˜Ýe²æ—k3ví`×8rÈš_nÌØí‚º)GÜn®×Xü›òÅ:r«Ó‹¾èH1Éq*NÜx®ôEÇÓ1ENʼn;2Е¿(ŸcÊg—pGÓ«|ѱÄt,.#àÆ¥Wý¢céXcFÀM¯öEùS¾¹Œ€—^ý‹Ž=¦cw÷'½ÆGLÇÐM9âþô¥?Åú#ÖÎú‰û#Зþë@Z„:r8øÒbýþŠ;Æ‘½þ—6kƒ@®6ÄmèKеA ­ Ü™ nƒ@_Ú P¬ Â_qÇ\³sÿÒí€bÝÈÕ퀸Û}év@±n¤u;sÍÎýK·Šu;ø+îGn>Mó‹Ž3¦ãtœŠ75 ô%ΤXœIWäTœ¸Û¥/(ÅPr îv@éKJ±¤u;FÀ(} @)€RŽG¦ô%2¥XdJÅe™Ò—È”b‘)U—pdJ_"SŠE¦ÔbFÀ!ëKŠõG Ô÷cˆû#Зþë@i8Îú‰û#Зþë@i:Îú‰û#ЗþëðWü<ŽÜ¾´A XÊäGŽL_Ú P¬ eÏ}â6ô¥ ÅÚ üwÌ5 /Ý(Öí€rqÍ5 /Ý(Öí€ruÍ5 /Ý(Öí௸CGŽ3ùKœÉ±8“»ã`™¸©å/q&ÇâL‘Sqân”¿  @yzŒ€›Pù€J,•Ë3ŽÜԀʗTb¨Pȸە/‘©Ä"SqE&nj@åKd*±ÈT²k92•/‘©Ä"S)1#àõ¥Ûźü?Þ=!nj@_šP¬©í›Q FĹ'£šò™è9†ÎMÕdÎD/1tn—¨fc&z}‰^ˆs#D5Ï2Ñ[ ;ª”‰Þc#Ï= ÕÈD±oçîƒjrc¢Ï:§-—š¶XèwÚò {Ùªy‡‰NoÑaÞ9£¸è‹¯#Ë×í3r)îБ="}ñˆ”cóѾxD*±ùaH_<"ÕØüT—Žì7é‹ß¤˜ßäŽK}ñ›ÔcóÃ~“¾øM±ù.Ù»’Ë»^BÇ­w¥ËY¸KÒ•®è銡³wMô^¢£mr£+¥/è)öíì7Sþ‚žcßÎ~3•/èå%zEtö›©~A¯±‘g˜Úôyöˆ©Aﱑg˜ÆôCg_—¾øº4CèÜ^çÊ_|]¶|Ý9äË¥#{ÄüÅ#fŠ{ÄüÅ#æCg˜¿xÄœcó“]:²ßÌ_üfŽùMnvså/~3×:ûÍüÅo曟æÒ‘½köx×!uÜ{׺ˆOµ2öø9p›+/:Ž˜ŽÃ¥#{ê<¿è8c:¾e@#à66W¹>(_®òÅåè¹ÍU苎Ó‘\:r8(鋎)¦cŠG“’¿(ŸcÊ»¢ ·±¹Jù¢c‰éX\:rÌ)õ‹Ž5¦c‡¬Ò¾(ßbÊ»B·±¹Ê—Ub!«(!«¡Ž²Ê—Ub!«¼eÊs,+_bY‰Å2­ ·±¹ê—Uc!«^žqän5Wý²j,dU ·±¹ê—XVc±Lkc#Œ€CVý²j,dÕìGYõKȪ±UKÌ8Ô/µðÚB§xÜãåª_já5v†ÈÝ[®ú¥^G }pýr†XcgˆÜXåj_Î[ì ‘[¦\íËb£ÐÈs3”«}9Cl)öíìÒÚ—ÓÁ;ä^*Wûr:ØJ 3çöåt°ÕÐÙ÷?¹Ú_×Zèì«5—ŽìÛØzl~Ø#¶/±Øü°Gl_#Wÿâ7{ìîEwݽà>#WÿR1ï9tŽÆD®þ¥ÞK ½kÿR ï5tŠÇÍ=®þ¥Þ[ìÛÙoö/gˆ½Ç¾ýfÿr†ØcgˆÜQãê_Î{ì¾÷ʸƗ3Äq…Fž›]\ãËéàˆr‹k|9±ÓAnPq/¾nä:ûºñÅ×:û®J-·ž¸Æ8b§ƒÜTâ_<âh1töˆã‹G=6?Ý¥#ûÍñÅoŽ˜ßäF×øâ7Gìî·x¸æ¿9cw/¦ëHŽ[<\óK}sÆê›Z‹ŒÜâáš_ʘ3VƜɥ#{êù¥Œ9ceÌ™C'FÜâáš_ê›3Vßœ.GÏ-®ùåHnÆŽäfuéÈá`~9y›±“·ÙbFÀÑd~9’›±#¹éŠ&Üâáš_ŽäfìHn—Žsæ—“·;y›¡[$Ä-èúp$GWèHŽ®Ë¥#w%ºè‹ŽÓ‘‡.ÄöèJ_tL1SäĈø½]ù‹ò9¦|vw%ºÊKLÇâGîJtÕ/:Ö˜Ž5fÜ•èj_”o1å›Ë¸+ÑÕ¿èØc:v×8rW¢k|ÑqÄt Ý"!~‡H_Þ!ÒëwˆPw"~‡H_Þ!Q ]ø—wˆD)†Î>øË Cн0$~aH_^•:ûÍ// ‰jläÙñ}y;H±·ƒÄoéËÛA¢Cggõåí ш¡s4š_Ðgäì‹øU ¥/¾.]‘³¯¿âÙ#¦/1Qh~øí ¥/1¥Øü°GL_v$W]ÑÄÁénê;’s=†ópº›:ÆNÞjŽÁ™ÓÝT>v$W]!ËÁénê Y§;º88ÝMc!ë5§»PþÌén*‹eµ»ŒàÌénê Y§»Ç3§»©c,d½ætGåœî–ò-˚뉃ÓÝÔ1²šë‰ƒÓÝÔ1²Z쉃Óݪ·Pßf[»‰;Ctð°›è-†~fX7Ñcgˆît=v†è`E7Ñghä|çzìí ‡ÉÜD:8ÊMôC?³›è9töåà7ÑKèì«—ŽgúpSÇ›Ÿ31¸‰Þbós¦ü6Ñ{l~ºKÇ3³·©cÌo:8»MôØÝ ·…>bw/†ëî…ƒt۪Ⱦ~‡ˆ‘ÅA§m¢§ú™(ÛDõmöP`›è%öígrk½Æ¾ýL[m¢Ç΄Ô&z쾄ƒjÚD±‘?“H›è±ÓA=´…>c§ƒâgbègJg=…Rë`n6uŒ:8™MôC?³-›è56?Õ¥ã™TÙÔ1æ7tÉ&zìî…ƒÙDݽp½’óð[¥­Ø+9…ïXDß±¡cŠ=†KÚc8¡ã™ïØÔ‘b:RäÄÈÃwl*ŸbÊ'—Žg¾cSÇÓ1»t<ó›:–˜Ž%fg¾cSùS¾ºt<ó›:¶˜ŽÍ¥ã™ïØÔ±Çtì1#8ó›Ê˜òÃ¥ã™ïØÔqÆtœŽCß±¥#ÅBÖk¾c¡ü™ïØT>ËÈs‹ÄÃwlê Y;¡Ç3ß±©c,d½æ;ÊŸùŽMåc±ŒŠËÎ|Ç¦Ž±EÕ5Žg¾cSÇXÈ¢È-’êà;¦ÛÿüýAŠ?AÒ¯JðWGZc$»@ŽìÅ6HqIŠmê9rÛ Ír¤¶Aº äÈ,lƒ È‘@Ø™3O° B— äHlƒ äÈúkƒ¼ãÍy ù|mt—+8ÓöÚ .WpfçµAjl¼»6ºËGœéum—8³èÚ #6ŽG~Ü]œ‡ÞâiyæjœÆJô3?®‰Î/á?¢ùqmtŠ¡ùqmôC?òãÚè9†~äǵÑK ýÈk£×ú‘×Fo1ô#?®ÞcèG~\}ÄÐü¸6zÌ×ùqMôlùºÓYIUøq:ùqmcñÌk£Ç<â™×Fϱùq%vg~\[ǘß<óãÚè1¿yæÇµÑ[l~\ ã™uLBǽwÞ:2ßÚè#†~䴵ѧî˜×.öL]kêX®ÐIimtŠ¡éfmôšŸâ*”Yemsl„Ž|±6z‰¡™`mô›WeîLøjëØb#t¤rµÑßz׆èG’V}œæ‡Ìù.\¬¶Ž34?g–U½^¡ù9ó§Ú蚟J.4©¶Ž)6?GT=ÇæçHmj£—Øü—ŽGS³W]I♨ÔqUÏ|¤6ˆëäáL;jƒ¸r¶3»¨ Ò\ß3‰¨ â:y8s…Ú ®êL jƒ¸ö¡gæOÄuÀp&ø´A\Í™ÇÓi¡êû™¡ÓFw¹‚3§ ârg¾Md†Æñ̤i¢w—8fÚ .qæÅ´Ab§“gÆK³ÆÒc§gÆK=VÝ:3^Úè±êÖ™ñÒF œ/môØ©À™ñÒF œ/môØ©À™ñÒD±Ð3㥫÷Ÿ/môX½ÿÌxi£Ç|Ý™ñÒF/¡jöp%`gÆK[ǘG<3^Úè1xf¼´Ñ{l~\‰Ý™ñÒÖ1æ7ÏŒ—6zÌož/Mô;M®„ñÌxiVâLgƒ¸|Ä™éÎi±q©Ùè-TÍÖž|i¶Ž=6?G&4}ÄæçÈqf£ÏØüLŽg*3SÇ;M=“”Ùè±ÓÔ3ý˜;Mm®ÓÔ3˘Y‹s½yp‰Ù ®ªâ™3Ìq<œ©ÁlWÎvf³A\ß3Ñ— â:y8óy™ ® Ú.ĵ=³sÙ ®†3 — âÊhÎ\[6H UßÏ,Z6ºËœÉ²l—+8sbÙ =6ŽG¶+Ýå#ΤV6ˆËGœ¹«L;<³R™5–Ø[+•«nY©lôXuëÌJe£ÇNάT6zìTàÌJe£ÇNάT6zìTàÌJe£ÇN@ϬT6z¬Þf¥2Ñg¬Þf¥²Ñc¾îÌJe£§P5{º°3+•­cÌ#žY©lô˜G<³RÙè56?®ÄîÌJeëó›gV*=æ7ϬT6zì4uºÆ3+•Yñ˜¡z¿ƒoÊBO±›û&)"Õì¿â„Q¶Ž)6BG*(=ÇÐ$O6z‰ÍOqéxär²u¬±:²4Ùè-†~ä_²Ñ{l~ºKÇ#Í’­ãˆÐ‘@ÉFŸ‘j¶ƒÉD§+RÍNÚ³¡ã‘ÉÖ1tšêà6²ÑSl~ެE6zŽÍOvéx$'²u,±ù9ÒÙè56?GB!½ÅæÇqšÚ^òý̱êx‹ “:B9ø+B¡'zŽ¡¿bz¢—ú+ ¢'z¡¿â&z¢·ú+Ò¢'z¡¿b3z¢ú+š£'ú ¡¿ã?z +1ÝþŠé‰N1ôWŒIOtË×òÍÄ:¾âUzêóˆï—žè1øŽ‰é‰^cóS]:¾âkzêó›ïˆœžè1¿ùŽáé‰>bó3\:¾äJBÇ·;&DË%ÐÓCÉ%Ñ)†þ’J¢§úK(‰žcè/y $z‰¡¿ä’è5†þ’J¢·úK(‰Þcè/y $úˆ¡¿ä’è1_÷–J çÈ]û¦ò@ _ò@Icñ-”DyÄ· tÇüLŽoy „ŽûפîzË%Ñ)†þ’J¢§Ðü×nþ-”Ô1ÇFè%”D/1ô—«'zìüæÑÕ=v¢ýŽë‰ÞB§͵Ÿ~Ç“õÔ1æßh=Ñcñ³Ö}ÆæÇµŸ~Ç¿õбÇüæ;b®'zÌo¾cìz¢ÇNÇ»k?ý–×KÔÌzì”ç-¯—DU+ßòzIôXµò-¯—Dò¼åõ’è±Sž·¼^=vÊó–×K¢ÇNyÞòz ô;Ñ~Ëë%Ñcç7oy½$zìüæ-¯—Dùº·¼^½„N'4^/¡ãK^/©cÌ#¾åõ’è1ø–×K¢÷Øüt—Ž/y½¤Ž1¿ù–×K¢Çüæ[^/>c§ãÓu:þ–×KT°fìüæ-¯—DÕßòzIô:˜®Óñ·¼^RÇØùÍ[^/‰^cè/y½$z‹Ík7ÿ–×Kê;Ëë%Ñc§ãoy½$zìt|zvó¯y½PG…×Ë;B¯y½$:EN'^ózIô9Py½„Ž/y½¤Ž96?/y½$z‰ÍÏK^/‰^cóS]:¾äõ’:¶Øü¼äõ’è=6?/y½$úˆÍçtü%¯—¬ØQì-ÏK¯':ÅÐ_1=ÑS ýEØ=ÇÐ_q‡=ÑK ý©Ø½ÆÐ_±=Ñ[ ý Ù½ÇÐ_ñ“=ÑG ýqÙ=t¢ý’Ñìž®ÈéÄ_q‡Ž¯xÏž:Æ<â;B´'zÌ#¾cJ{¢çØüd—ޝøÔž:Æüæ;¢µ'zÌo¾c`{¢·Øü4—Ž/yÚ’Ð1tÊóš§M¢úKž6‰ªV¾æièùŠ¡¿äi“èCÉÓ&ÑS ý%O›DÏ1ô—có3=:¾åi:¶Øéø[ž6‰;ËÓ&Ñc§ãÍu:þާíQ±‹½åyIàöDU+ß1»=Ñc§<ï(ßžè±Sžw\pOôØ)Ï;’¸'zì”ç{Ü=öþæ%­Ü=v~óŽoî‰;¿yGD÷Dh¿c¨{¢—ÐéDwí§ßñØ=uŒyÄwwOô˜G|Ç|÷Dï±ùqí§ßñã=uŒùÍwÄyOô˜ß|Ǩ÷@±ÓñáÚO¿åÝ5³Ø[ž×¼{=V­|Ë»'ÑcÕÊ·¼{=vÊó–wO¢ÇNyÞòîIôØ)Ï[Þ=‰;åyË»'Ñc'Úoy÷$zìüæ-ïž@Ÿ±ó›·¼{=æëÞòîIô:˜É¥ãKÞ=©cÌ#¾åÝ“è1ø–wO¢×ØüT—Ž/y÷¤Ž1¿ù–wO¢Çüæ[Þ=‰;Ÿ®Óñ·¼{¢‚5Cç7¯y÷=Å^Ö¼æÝ“è9Py÷„Ž/y÷¤Ž)6B/y÷$zŽ¡¿äÝ“è%6?Å¥ãKÞ=©cÐKÞ=‰Þbè/y÷$zÍOwéø’wOê8b#ô’wO¢ÏÈéÄkÞ=NWätBåÝ:¾äÝ“:†NÇ_óîIô›Ÿ—¼{=Çæ'»t|É»'u,±ùyÉ»'Ñkl~^òîIô›Çéxwðî]÷ÅY±»ÅÓÒ˨Ò¯ÞAüÈ»g£çú‘wÏF/1ô#ïž^cèGÞ=½Åм{6z¡y÷lôC?òîÙè3„~æÝ3Ñ9¦D?òîÙèô}&?òîÙè–¯;å›]áÝ{èxäݳuŒyÄ3ïž^bósäݳÑkl~ªKÇ#ïž­cÌožy÷lô›Ÿ#ïž>bó3\:y÷PG:î½ëtÎÏ™wÏDOW ýÈ»g£S ýÈ»g£§ú‘wÏFÏ/ÑÑêμ{6zy…ž~]ˆ~äݳÑklä¼{6z‹ü‘wÏFﱑ?òîÙè#†~äݳÑgýÌ»g¢gËףƻ't<òîÙ:Rl„޼{6zŠ¡y÷lô›ŸìÒñÈ»gëó›gÞ=½ÆÐ¼{6z‹ÍOséxäÝG:n½+U§o?óîÙè#†~äݳѧ陟3ïž©c¹^ÐýÈ»g£S ýÈ»g£§Ðüh¼{BÇ#ïž­cŽÐ‘wÏF/1ô#ïž^cóS]:y÷l[l„޼{6z‰Nˆ~äݳÑÇi~ÈœŸáÒñÈ»gë8CósæÝ3Ñ뚟3ïžN¡ùÑx÷„ŽGÞ=[Ç›Ÿ#ïžžcósäݳÑKl~ŠKÇ#ïžY±«±jå™wÏFòœy÷lôØ)Ï™wÏFòœy÷Lô;å9óîÙèC?òîÙè±í3ïž;¿9óîÙè±í3ïž^C§gÞ=½…N'ö¼{¼{¶Ž1xæÝ³ÑGl~޼{6úŒÍÏôèxæÝ3uì1¿yæÝ³Ñc§ãgÞ==v:Þ]§ãgÞ=³fÖsè¤ãÌ»g£—ú‘wÏFòœy÷lôC?òîÙè=tÆtæÝ³Ñc§c§ãÓu:~æÝ3+X“BçkgÞ==Åм{6zNL×éø™wÏÖ1v~sæÝ³Ñk ýÈ»g£·Øü¸NÇϼ{¶Ž=6BGÞ=}Äм{6zìt|zNǼ{–Ž7ïÞ§rðîÙè9pðîÙè)r:¡òî ¼{¶Ž96?GÞ=½ÄæçÈ»g£×ØüT—ŽGÞ=[Ç›Ÿ#ïžÞcósäݳÑGl~<§ãÞ=«bG±·<Þ=bèGÞ==Åм{6zŽ¡y÷lôC?òîÙè5†~äݳÑ[ ýÈ»g£÷ú‘wÏF1ô#ïž>#§Þ==]‘Ó …wï¡ã‘wÏÖ1æϼ{6zŠÍÏ‘wÏFϱùÉ.¼{¶Ž1¿yæÝ³Ñkl~޼{6z‹ÍOséxäݳjf”zä¤ÃÁ»g£ú‘wÏFò8x÷Lô|Åм{6:EΘ¼{6zè”ÇÁ»g£çØÈy÷lôù#ïž^c#äݳÑ[ ýÈ»g£÷ú‘wÏF‘Ó •wOèxäݳu ß8x÷LôrÅм{6:…æGãÝ:y÷lc~óÌ»g£çú‘wÏF/±ù).¼{f«ÔÈùšƒwÏFo1ô#ïžÞ#§*Ÿ#ïž­cèüÆÁ»g£‡^Ö8x÷LtóeÍy~êåÒñÈ»gëH±:òîÙè)†~äݳÑsl~²KÇ#ïž­c‰Ð‘wÏF¯¡Ó‰3ïžÞB§ïžÐñÈ»gëØcósäݳÑGl~޼{6úŒÍÏôèxæÝ3ul±Óñ3ïž;?óîÙè±Óñæ:?óî™»Ø[ïž;å9óîÙè±Sž3ïž;å9óîÙè±Sž3ïžz·èàÝ3Ñcïo¼{6zìüæÌ»g£ÇN´Ï¼{6zNœy÷lô:Øóî=t<òîÙ:Æ<â™wÏFo±ù9òîÙè=6?Ý¥ã‘wÏÖ1æ7ϼ{6zìtüÌ»g¢ØéøpŽŸy÷ÌšÙu§tðîÙè)†~äݳÑc§#§Þ=®Èé„Ê»'t<òîÙ:†NǼ{6zŠÍÏ‘wÏFϱùÉ.¼{¶Ž%6?GÞ=½ÆæçÈ»g£·Øü8NLJƒwî‚?âOòë"ø«#½ž ’] G=¤¸@Ždy6Hu9ñlæ9RßÙ Ýrd¸³A† äHdgƒLÈ™¯Îٳȑ–Î!È‘}ÎIZrõãB?òÊÙè.Wp¦³A\®àÌgƒÔØ8ùßlt—8Ó¼Ù .qfs³AFlâ̈fƒ¸Ò…3ñ™ ârg~3Äå Î4f6ˆ+]8³•Ù ®&%3AþœÚ™nÌFw¹‚3«˜ ârgò0$ÇÆñH f£»|Ä™ýËqùˆ3É— Òbãx¤ïZÑfèÿ.ô-76~ÿŸ¶  é»lôC?ÒwÙèÓ@?9‡Bß%u<Ów™:ò#Ão#t¦ï²Ñ)†~¤ï²ÑSh~ŠË žé»lsl„Žô]6z‰¡é»lô›—w=ÓwÙ:¶Øé»lô˜w=ÓwÙèã4?dÎ+å;ÓwÙ:ÎÐé»Lôó®gú.BóS]©ä™¾ËÖ1ÅFèHße£Ç¼ë™¾ËF/±ùq¥¨gú.3{¬®晥Ëqí0Ïd\6ˆËÝœ9·lWÎv¦Ö2Aš«¦tfвA\«ÿL”eƒ¸R¨3– âª)i¯l×b<³[Ù ®ŒæLbeƒÄö‹gz*Ýå Î,T6ˆËœÉ¦lÇ3”‰Þ]>âÌeƒ¸|ęʉZéžlt—ó8³:Ù .çq&o²A\ÎãÌÑdƒ¸Ò…3“ âògÆ%Äå#ÎÄJ6ˆ+]8ó'™ Ãå Î4I6ˆËœÙlWºp&=²A\+þÌmdƒ”S;³Ùè.Wp&'²A\®àÌAdƒôØ8Ù…lt—8“Ù .qæ 2AfìÐêÌdn„g¬ |f²Ñc%ˆ3 žCEÎéòVg [ÇXøÌd£×ú‘ÈFo±ùqyÁ3 ­c¬ |f²Ñc‡lg =vÈ6=ÞÕÁdéx³}! N1ô# ž"ENr]Rv°Ù:æØY€lôC?²Ùè56?Õ¥ã‘ÈÖ±ÅFèÈd£÷ú‘ÈF±ùñ¤¨ +{$× iÙ B.#§ âr7gê$»@Ž =6Hq‰xl×ê?óíØ Ír¤Õ±Aº äÈžcƒøã‘$Çqe4g.$…ö‹–Ýå Îd66ˆËœ9klÇ#îògÒÄå#ÎÜ26H‹ã‘5ÆFw939Œ ârgÄå<ÎT/&Hv¥ gFÄå#ÎÄ-6ˆËGœùYlWºp¦a±A\®à̶bƒ¸\Á™TÅq¥ gîĵâÏ)6Hèy”ƒüÄFw¹‚3lj R\®àLebƒPhÏ$%6ºËGœ¹Hl—8SŽØ %6ŽG2s#\Be`™ˆ+AœÉDlô)r*d"d"¶Ž#6BG2=tÏ×A&b¢›÷|ÏóS]^ðL&bë+ŸÉDlôC?’‰Øè96?.ïz&±uŒ•Ïd"6zÌ»žÉDlô*rº.);ÈDlceà3™ˆó®g2}ÆæÇ•JžÉDL[ìíL&b£Ç¼ë™LÄF²¹®a;ÈDÌìÑuCÚÁbƒ¸v˜gjÄånÎ 6ˆ+g;}Ø ®šÒ™ÏÃq­þ3m‡ âºïì`ç°A\5¥3 ‡ âZŒg® ĕќ)5lØ~ñL–a£»\Á™Ãq¹‚3õ… Òcãx$µ°Ñ]>âÌ]aƒ¸|Ä™¢Â±C«3ù„îrgŽ Äå<ÎT6ˆËyœ#lWºp&†°A\>âÌÿ`ƒ¸|Ä™æÁq¥ g6Äå Τ 6ˆËœ¹LéJÎ 6ˆkÅŸ™lÐó(‡‚îrgªÄå ÎŒ6Hã‘ëÀFwùˆ3¥ âògæ$vhuæ$07Â3TvpXè)vÏ×ÁI`£S¤È©p¥¢ˆSŘþ³ù?Ëz/žŠ/!‰HŠxΔ¶#ÿ£}{IZÀ¯­}{%#ª2 •²Ç‘OåÚŠã×¶úŽuèJUÄ×¢«.#´~;iâð‰Yü *{~t¿µßŠ CMeï"êUq0Tj{ñX?}k¨Eq³hâ«¡þžÄ½‹øÉš8*).âáßúÖEH&QTêbä³Xecg¨˜RLšöâ«—œ!éØÚ9äÄ ³ž½8¸ˆAš‹Ð¾]DÖ\„öíè"DæÌ4“JEHŒü¸¶â8À=i.B®ñ¹uYs?š8|¢ðC7—¥RvÊËÿø·x^ˆ½þñ•÷'ôo{ñ4QÇû›îßnñÒõq¼©0IÛ6¯ÊçtmÅóB+&rLP¾iâùÂTòg«¼Š^&‰ðW¼G#m¶*?®½8êø/BÆ z}Šÿ¯?ûÈdí#oVNÊ_,-Ç,-Ç,-»,Sr*_,­Ä,­Ä,­¸,³Zª_,­Æ,­º,3;j_,­Å,­Å,­¹,3;ê_,­Ç,­Ç,­»,“#_,mÄ,m¸,Ò(jαE¨’öEÍ4‹&¾nSSŠš*:¡Vt(jŠ=Þ">”úÐZÔü£Ö^ŠPkm¬&z5¶±‰³›¤e70òb”®m}h”}ùO–XñeSMJùOE‡òÒŠ#/*‹øÄå¾üד"¾V§èÒÊ*:Ô°D4qj–´Ôly{ðD».k‚›G< g÷³ýö¡‰Ã' _™85KZj»àÒ·âb/¶VRÖ]p.YÏd¿ nšx!¥ ´î‚u嫉aÒCøöQ¶â¸™B/¸~»¨³Ýâë.ë«ÝïC³&^’æÆ.òë&MúÊÄyeÒòÊ%–k+ŽŸX \'½Ì}‹¯:>@81LÕaç¿á·âb®íí¼RÄa®ÇTì_³D¹à˵͔ žº»¹Å«‘©h‘©> …v©šó¥»›[|Íäšan`ZÑóµGîõÌú«‘‹\_$p%ï÷uÊ,¶¬‰Ã8JŽL¥8fñ§ìÅEÂÚ”YÌM_¸JŽL¥:f‘®½8‚L÷,rÌ)ZÌYƒ¯Œ9e[&X‡–¢…–U¼(âØšü+ö|e~ù’éùn¢¥qíÚ_R/Ï—p*®Öþ’š\_ÂË·æ/_’]_¶]5Û®U¯ÜÖÛ¶›r9®‘~UúoI¹»Õ²ó-ÞI¹wÓ³~÷d/Êݺ>õrÜ->.¥æ7†~mgŸÊµIñ™4ñ®rñ±/äÜØÈ :]ýqëç|Uš;uitžD)²ÞE’®˜ Ø“¸’y‹¯àª4ØSÖÄ»ö< ý¨e¯šÙ\zõÇ÷Ë·©_FºÅ§ö<ìIÏšøÐ‹c‹øÜÇО~qºÄóø+ŽeU‹e«ÙÈM@í;ë€#_˜÷¡‰Ãô®§Úƒô]ð-óC‹8Œ¼8î^Äç>gC'ÄyûUµíWú]Úzo€¦òˆ gnñ¦=œéM?é¼Å{W*¯Ãxùr‹íåË,ú]Ú[|Öý#ºŒ§+,N—¸$ÅTÕ2¨ ß±Ï cø?îñg;òÒoÞâÚyi,Þ‡rÎ:Œ7"·øÐÞˆàÈkß>:¨ŸíÈ“òítUÝ·s÷@’G^Þ6i×n€Ñõ ½xr‹®l»áÛ5tüD±­ã…!<ºùº­ÑÖE¬Ásu¥ E\êÞEˆUv‹ƒ¡®á \„8„¼Å¥¡î]„x_v‹£¡fÍE(ßn*7q¼Zr¸ù¬¥¡¢ _#€ÈÈñõÒ÷zsRÄ»vUfˆÜ{qXënG^ûvX&àÂaä•o'ù þŠwu-;\„|‰Õòn€[Ñ\DÖÄGW ¤èqüD‘A5®é4­¦ÓŠ~­°qQ¦UåZáHúµÂ[|ä}¶Ð/>¯²8ÁFäY·ÍMÛ6¯Ê?ý½ïmŠ£F•üeïèQy .ã”·ñ­i{´Uyy­°µŽëµBD¯Oñsm¬qªßúKë1Kë1Kë.K㔼/–6b–6b–6\–ÆYm›_,mÆ,Íu"Ò9³ë×KëWÈÒnñO–Ö/¥uÎì:}°´N!K»Å?YZ'¥uNŽzú`i=…,­»žtNº– ¬EMy•°çmj½¹5åUé[|-BÁ%Áµ¨)o§-âS¹¶5åü‡"ìÁ»~ýoû-"5Ó~äeJ|"g7]Ën`äÅ¢—]}øÒ î·øZE‚«Ò8òšøÔ.ÒÃÈ‹=ø"žµ=øÐ¯J/âsUZ”“q¬a‰=xçÔ¬k©Ù:òòX¹×ÝÃ=’išÞâ0B°Ÿú“^·Ÿ(ݧf]KÍÖ]°¼ÉÛÛv/¶nÒ†ñšâÚkŠi-€¶Ý‹e¥PöXãm»f;'†]K ×o—UŠÞw›)hÚ0Œ÷ ·øÐÞ3À·M|*‡jøí]Q6iò¢iç¼²kyåúíòþC»O,ÚFRÞ¾èc«£áİO‡Ëw;}ní|uv«Ëη¸œë½M|Ví¬#64=s=8-—ÃÎå긶EðM¯÷mÁzgL£r‹Ï¦y‚¢ŸŽm½òÏqügµƒv.¯­ Ú}"t¯å›":Ê#§ÁiéÐÒÒuw ïK´K°×ë™°;o¤m‚-A8-ZZ èc/Ž©óê/]ú‹‘w ¶ôƒS³¡¥f+º¼–1ÊÄ}=spâ1ê—Y¬±Y¬®YäÌa´/³Øb³Ø\³È±{ô/³Øc³ÈqqŒ/³8b³8\³ÈqqÌ/³8c³8=³892ÍëÃ,Î+4‹“½þÔ¼þ4ÞhMÚî† ‹ïúµÏE|ìï–â>´+⸛€ÉAcjAcU^ÎâL» Ü]•—!kŸû«Ò¨¼&Žû='Çœ©ÅœUyynæŽëUi@§¸ÃÒ8æL-æÌ¢¯ÅYv™ÁZ4.åϲ˔k‘#ÓÔ" ·½8¦:kñЦRw9¼Š;92M-2­èò¶ãl;æösfwÌ¢Ìgßæ»M™EYžÝ5Ž™æpÌ¢¼˜4‡¶1Û΢,ïÎ펭HŽLs:fQ¾N˜Û[Ã9‹t3'(Ä |EÌaq Yþ7çÖš ƒxQÄ1°5ùWÜ[k÷iIv} ·±ÖcÚ_R\_Âý¢µîö—4×—pÓ}­Ÿý%Ýõ%Ü·^krF—þ@Å3Ñ¥¬¿µû™!®-ßµ·CMpawOpï¾.Lë[`]<E:@tM:úôEž;«âÐé¤ûnÓÝò_k݆S‚Þ™Åÿ•Òæ§DïŠxÒk½‹¸Ö% ¦DÏÊuTœÒÄe“¥Ÿí”¨âU¿´J7ÝÖwF^®^îü\Vqº^q¡¾ŽÜjÔıˋø+æTÐúÎÑÚ£IÜŒeñß•÷7cimÿ"êt‹8t–X.uQÖûŽ,âYinBÐ ¡‹x¹”B(4˜J¤‰Oå¥Bíê½ÜE¼õ^;ݬZÏ=ù™¶â¿ÿªìoÆÂÈ‹{¹‹xÊû[8ò¹)âYi­‚#/­ƒÅeÿ–ŸíÈ“öíU›^yíÛ«©ŠÖ0F^¤¥,Žœ×à™õÆ.‹8ŒÐšÞ÷gM>1‰¿bZ­a ¸±aq4TÐ1é/Uñ¤<‡]]Dj¿RÝ‹/†Jô+Õ‹èãWWÄCÍùW¯[aˆ¯ÅˆU|q†ò‹¡þUþŠY­Y"޼4Á¶3TÌß’ºù[ÄÁ‚×éÍd„ض³sÌß.Ìöâëhkþ†ÎY‡eéßð(¿®Ÿ$RTîôHZ§GtÎ2‹è»†b´Ðï{t¡?ÇÊuë"(iâë'>@˜·KëôH+‹C•™(oái*™(t»ª"ŽÝ×\°¨—ÐñZ¹æM–Ö(”ÏÒÝÛœk •oš8t™X/¡ò*zmz8à^‹¤õZåÅ%4Gá ×§ø¹’Âý)ÑKK²´[ü“¥Ýâ–¥q¿AJ郥¥²´[ü“¥Ý⦥qV«5 ´--Ç,-»,3»T¾XZ‰YZ‰YZqYgv©~±´³´³´ê²4NŽ´–}¶¥µ˜¥5—¥q‚ 5̓ Z9Pê»rÍJD4]|-×€8öÕÄ¡\†Jqì,þŠó ­e~»ÈQ¹çimÂðÛUñ\ñÒ ;Ûr Øyòˆ×¬ï¹a i áÛsÝ‹ã'æÕΡI™*¾ê(ÿŠ’Ö0ª=âz'‹ã†b½Þ Õq¹t/×þJlåÄõÎU|*µŒÚÕË¥‹xzÁ„›’ÖÔ¿¯æ±¸ØL-×;áÛÅåÒE¼Ðþ^!~{×ÄeÑýfªhÊW „“#­¥"|»¬&ä´ûÄ4”‚‰8¯^ÄëTo0·T$­¥âjç$÷‹9ïæºÂ‰È\,¨kâË\ÿ¶Í_û’EUÑËT6ä‹ÿýïîÅ×¹~èȹ•Öö‹] pÙÍ5†,ý.Ó"¾A^ÏÊÔSŠ[¼^Zĺ§ÎÛ¢‰Ž›N’Öt¿½ïÅñkªJaPdžø+έ´¦“â9m—%BX­Å˜Å¶Í%çVZkJD{qÌÿàFZ­†'è»,ñáU8»ÑzKº<‰Îc⽑FÜö‘´¶ö,ÎØ,NÏ,rÛG*ׇY,Whoqk¹í#ú0‹…B³È ©¤³XRhoqs9.–üesl³k92•òeKlÙëk a/&³øRwûÜ­’GúåÊ¿b¯¯µ}tYÎ.m·¡È—²ÒÅ«~Á’¸k$i]#½*âRݳÈþ¼hþ¼ =G-c—…À‰Wµ–ÉØe!ÕÀ^_ky‰ù_Ù‹c§>U§m^Å î˜IZÇL@—×¢êµ)ÞY¬ìÏ+9fQf`•ö{¦ºŸÅš4qìk&þн¾ÖîmHŽPÚnzª2‹Y_Xø îJZ·P@OŠ8‚ôêEöçUóçU¿íÏâZÁn[ëU âEÇ ñ0göiZ÷@ûKºëKØui}öì/ž/áfdÔ®_r·³¾„Û‘ÖÌü’F®/aÛÖz&ôj%»kÑÚ¢®×¬Í”d½æ‡^´KË2¤—¤nñ‘”ë5CoÔºŠkZ§þàÿOÐ di{— •¶,[Å¡%Ößnç›—Ü Š´NP0%¢›ݽ˜ ñÈZK„)iE‡v®ëµ·‘ôJÙ-}KÖgØCïuºŠ+½NÅ”(ßž.¥·±˜’¢‰wýÚ·±"­Œ|™ÃÝHªf!?»¡“ÉÑ->”f¥øí:~¢Ø3q+ÒÚXô«‘FÀ‰ðÚ–|ôñFÀâ½i¾£¾ãÿ_Ú¿äêÒëXX߀ç°GpÔ[ÍB•wì*³Ï$>L†H)Rü[w<‹’Ôsq¡ùj%̬ä4Ÿ‚òx"ÓzÚžHYÂ5w(¹Í)“_á|+•ð"=¿¥œoײ„4E4%E 9¡É“Q•æCªÔ0‹’"Ð\*Àz^h{"4ù5EОÚž +)—*Rý1Òó[Š_LSDSRÄøì!’"Š’"ÆgyŠÀMšTŒ¤~ã…õÇH ’¯NˆoE0'5[jûL¿?}úöñ5_êúöqIm°W¯ù¨i.7×ñ;~s¨u5_RDJ’ó$P'ûÖ^©öMÎì+{«Ÿ5¡˜ éùD ¥,ækçµp0I,¿ækœgX.zHŠÈS0_?€:~ÕïÁr0š“Ïä–ÀwŠ€,˜Ó×ïôš ÇT8ŽôòëלO[®Â-%˜§gʯ”°îHuçˆóü•Ò[<­á•ÒùùÅk.1î©ózå!>–n©tqž¿RzëÍô}ŽCÑën~>IÁòe •/Ó#­Æ"­Æ"­š" —äRù2=ÒZ,ÒZ,Òš)ÒpU+ÕÓ#­Ç"­›" WvR0=ÒF,ÒF,Ò†)Òpe'Ó#mÆ"mÆ"mZ" +€TL´·ˆÖU¤ Ókr¬ÁR .r‚Æ ±Á[D‹ÔÈ]pTð`Hæä]Tú>A㯽М×té­$ɼÑ=ù®/¤ `¤íœàù–ðZÏ[29c$Q›d>¿w0´íS0'Ç5+;•¶]ržžã°7{X ¤úc¤í<[½ÄÖ&BΚøÙÈŸ>r\_HõÇÈiÏçåkCA✂ùtÏÉiÏçåsCÑ¥Óž"8Ï6 W7R4Òö-ÎëçfŠœ‡%Îëçi‰ó¬ÄyýÜPé¼EržFð8ÇÅ‘T¡î†x¶¯&Ò8/Jœ·O9®n¤ mkœÿÞbÑÍÔ[¡mëž}Yüþ•d¾Œ5üîÆÏ#‹¿ÿî§9ëuC¾Æùß÷Û|ëÊ}ĵ•TEŽðOy|Ž•þç¿S¨`¾AêYˆó"˜Ó³µ¥„8ó.8O €žL` ;jØ‘¶s:Å[„nmb©õ;ÎùêsÌïƒ ú+¬aR ;²Ä寽Þv¼ÖÜç—¿öšÏç*‘ƒàÚJªtGÑÇ·9]ÿ­¯½:?ŸðµJ䯽°TH¥ê:¿‰ÆbqÄüÚ «ÈTENÅÅlE\9HUäôQ,±Q,¦QĹ[ª"§b"΋R}8}[l›iq^”ªÈ飨c£ØM£ˆ3“TENÅEÌúR}8²ã«›9¿ö#‰¬nزG0—‰d «È%©ŠAg‡hN7ë¡E¢yÇ:aº$¡#èl׿$Gñïòê¿Ð“„.Ÿ¡9]…QGq1‡¤ŒbF³äcVF1-#È(BRF1®/8HA‹äcQF±|ØG±"z5Œ"[¡9íÇ•DFñÏÒìÛœTµ™ìW }l†QÜB¥}nz@ÅÔ$sr74Ù¯:úØ £Èžƒ£9iÕ:Šч„.¿¤Gs:µdþ«‰ S™â+?4§“{å—° \¸h €¥%Xˆ-Aºh $SKð»†rÓ’bj ~¾PoZRÏ-ùJ°Ž¶4Ï<äØŒÐH_óß¿"©z‘Ðx=¡Iækw-;ý‡T^|$tRy±®ækÁ¯ömžÈ=Ư‚æiÝ{¶_C0_}„_Í ¾Jè¤,aþ5_srù«æä⯆æ…óýJßæ…¼_ú5М铄NÈô?ÑOÏFÿ™ÿÏÿýÿI_6üüz€ü  K«u¿“ð¯/óß¿ZgU¼d‰º”È£b¾®É뢳¶F]o’9ƒùE(mº l|МÔ}|–ñY£.×_ ˜¯_F^B;W´ßæ™–s}ÑIÔöe¼æäÝç¯ôóu•šúe¼¡M«J蕆öôϨËÄkÒKëJO¹°„š?Â&´æ¤¥]ê,lò׸ÿ¬ÊR¤ ðÌIQœ¹ “!!µWsÒó«|6éSòÔóŸùgS± ¾´(~ÈbŽO9XPŸÜÊ­SκÎ*ÏÌI™¾gíà¤ÌhN*y®sÆÊ¸oÙ£yf ?ŸCR$ó’„ŒÈ*' ÎW"  ”^6YdH¶”Ö¾z¾.›,Ò§’Õ·yÎôRáç³SxNjŸmÿ÷<ó³í4æQøAÚ¼‘l™E]ÿÌ6¹|g›ZŠ`EˆyRôaaÓ¿BûÏóÛÏl32 ›þÚ$æI¶ÍIhÿ¬æä¸Rr¾>[̲ ªaHûއʲ¨_¡M§‰¢Lã3Ûôôm¶Åýøú2è4‘”ib|}2…äyPVçãóÃZÍÉLÉyòÅ5yš è("%Ð  ³l3¿z¾ )Û¤&˜g2A)ÛÁœf›fË6¨DðHJÙÚv,§ÿóѾ¶}ÐV}›“zø«p+Õh‚9)°öSĶ“uï<ÒñiUÖöw3Ÿè\ôóÙª>sRé~]8Qzx5/¬–¹Ôv’ëðÔé‘NH«FemO_Ρn¥Ýüû QpHžÇÚøT_Ú Ú Ú ZÜŒH'yzЖXЖXЖXÐâz^:`Ôƒ¶Æ‚¶Æ‚×´Rµv=h[,h[,h[,hqM+UB׃¶Ç‚¶Ç‚¶Ç‚—…R‰t=hG,hG,hqi$?'Ö” ûšÓ£Ã?”×Ïë?ò$‚¹@f%Öôuäjž™æ³p`]$ó±­¬¾¬“`N¬—õ|ßf®æ•qaM_–t¤’îôaRçÓóuª÷G%æó47±t±˜÷ïw©tHº„žŽ:;Í’99Í]¿w²ý/‚y(îì4WB¯Å¶ý''ÙXçþ‘êÜ“!Éì{OðÕók}&zÐ*š“®[÷2E,ô¶šW¦&µ}s\”JðéáË6)}>¬Ùf=|È£æYФbG’y)]L9Y½æõÙ’•!lpI,ÖRV¾÷ü¹ý_¿wr"Ãõkž¹(vØ(™ÓÃÆÅ¼>JºÈ߇Ãu¸¢–êý“NÙ¾¸òyôA>ñ]Îj^™Âµi‚ÆJþTÉÿ‘u¾^söɬ=Oj³¥Ñkž“6ô¼N2§çuã—p^'9_ŸÍyÃ'ƒ rI!€v ÿ`ÛçéÉ6IÉ6Ÿ‡Ì©6á“I’9=1kÂ'#:OOÌŠñ“Áõ¼$\@óHc1ß¿ÚÞŠôÉɼîE~ Ÿ .È%M²“j}|í9Öú!d'µµ}|î9ŠÕy\Kåþ‰[…g›ùµ›Xeçˆ[Ûò`~î9†ì<9hE€GÒ n öô'?_èÆ×…ÿÌ?}$ g¬Äÿd¸ˆŽ ¡èxͯ¢‹ä?9]DGN¡èxÍ0Rõ|=:r,:²):p­ËMt”Xt”XtàZ!כ許許èÀÙZª9¯GG‹EG3EN‹¹NKø![%?Âi ßx.æd×¼>¥)ô(áÛœlÍa5'/#‹d¾oNKrI‚ùº5ëËHR›$ôukžþ%ú¸úú ñ?yNKø aŸo ~„ÓÈô ÔbÞ…GLT*[2Ï{EÌ}H[E/æäÙà÷iÉŸª€NåÖáû´äψ~›“ƒÚ) —CyNKøéhžŸ¯×·oì=aý6_». §%%‰æKÛ¡üC7ä¤iÉI¨ ð”ǰAä9©<Ÿ{¡áL…oS^sr¦ò#œ©ð¤òš“½PÎTJ•œ'e®¡Ø‚ …ž– "Ë >7ˆ?™ Oç¯yj]’NáŸõk^’ðY“ îEr¾2©ëÈ[T¥xJ2lùwYÒgÛ³°AÌC2_¯Ý8Ùÿ17|X¸\-Ùòa±Wb%XÂÉ ?:yÍs’ŽN:îßæTa]8yiä|}¶à2|X¸Š.Åòa±•J)ß–pò²å¤òýa '/|©ñš“3Š.œ¼l9éó¼/?Åøaá¾TˇÅnRËç«Ðéä¦d¾:ß›õê¦ Wú¥öXüt¨|ßtƒ°ÇêM2'›™)oS¨ó¸(ݰǢµ³^svU-í±j—ÌËØ$ŸÎ“«jÔyʼéùëùêy yêsÑóõ õ|}B=zOM=_S¨ç_ó»žÇ™°æ›žÏ±žÏ±žÇ„*Ix¶!êÚ§9z¥?FÖê =’Þ‰§’XÔõ°¡|ÂNŠÉ°°éŸãÞ–„ºŽ(ç¾æ“ÒÒ^ô™åõñb>¿âXŸÂf~~›…ZK¤µô¬ê[œéQß#3"ñµ$>¢OÁ^K¼æk tÂ3Y‹Ïs¦ÇkNäVBàZGŽÓ_sRGnå™z‰S2'õÓk¤ï›à<<”iÛl_®«´>®S™ìqÛÖZA+ÓƒT¥g‡a‹9Ñ^2â:$Ûlæ}]'­„@¦¾Í)гp«ÈtÉ|Òˉeº-ôŸæ@Ym25‹Œ; =’ðþþ…ÇHÏ“÷Ç}Èï_sRx=Š#ÂÎ_Ù3ª‹5l ÔC{$=4’mxÔ5ø mR`Í6¥7ÁœH]ÀüÎ6<ê^óN×rã3ÛtÆè{ÍI¶KÌO%ê^sª†óš“l’ó4´“L‚%٦ឰ%C¶ù³0û2§¡M§‰5Ô.™¯¼×ÂÎ*5|›¯_&y‚Û¾ÍyƺN¬Ô·9ù°È4AD®çéWåi‚šã~X¤[¶£Âéù:«mØÂù5§%ÈAÈ6léúªû‘¶Ëw&,ÛàÑ®¤¯÷¬úzœå‚"qO«Â–…T\çÉ Í‰@Þ²iYán1º{3²\P»î‘´ëH«¶Yæ= hÂ,3²2˼Ûéò=ËÐVñYæÝÐ&Û,CS%nU%Q;Ò*ÎriíËù•åBÝJ»y€å‚Šo¤ø¦mmm-nF$55=hG,hG,hG,hq=/ɬéA;cA;CA‹dO.‚¶?¡ }ͯ‚ö» ZÔ÷z$}/5h;„‚ö5¿ ÚWì*hQøë‘„¿Ô í)´=ÆÜFI¯G’ôzdù›×œ®nÖkNSy͇ œB¬Ùûb>…;wr`=$çgî9资N¬-z`-´&ã‡ë:I¨Œ Ib×$(TFNõÈÃ×uH8Ÿð5‚ž vãÿšÏG¸ñŸbá^b.]šÓÓ\œæ®©²Ë òWãž<‰a¨ÞöHêmdH {7ÛëWÏ>!éÓ"™ORÜd5Ë—/æ´í`䢬Û#ɺÑÃFÑéíóða%iöÒã5LïW8ê”̧À^fG‚ó쨳×Ē\ÝþóLÛ?·ÿ+!œÈ0:âk>È‹ò5Ó*üá×|J×ô°Qpž6&cÔáŠZR±#ŸÙ÷ñyôA¦ …ÁûªØ燑#€út¤OG>™màæç'³2·Éíïùùë›Ç© Üü>¯K¿„ó:Áyv^7lŸ êÞ=’î½2a•×P÷ŽžîlÃ$¦¾ÍÉùüZì`2:û·ùlR¶eásvbÖlŸ Êñ=’龺ðÕöÚ„O†Ïï¯ß³+T?TÊ{$¥<²“✠‘¾öD|ÝIqNЫ”GöfçqA.‰Ø·x²ùk7±&+âOV¯Þ“lÉŠ´¢ºÝ#©Û·8'è•§£U™¯ÿ˜ŸG¡¾Ü#éËéÑQcÑQcÑ (IúMދދ\ÂHšpztôXttStàZAReÓ£cÄ¢cÄ¢× ’`š33¨¤öHJjjt¼JjWÑ1M\dTR{&NKøYÍ„ÏÓ’Ÿú}Z (¯99-Yù„ä´ä'Iæä´d}‰ôÁæ·9•*®ß§%œ¿²˜ò,³~Ÿ–d¡ítk>|B”—{$y9öâ’ÞÎôù „ÓÎ'|Í|?bâ/.s²³ÿïÓ’4$çÉ–~Ÿ–l|ÂÅ|½Ü^ø„dHÒÌÙ‰Á´¥4Tæ{f6œ–ü°·o3¾:\ß¾±÷„õÛ|íºÒëçiÉÆ'|u×¶—näNuŸY D~7ËçñG8Sá÷¯99SùÎT8ùæ5'Z´ œ©p:â+jHöB½ƒ —‚³6ˆ[>®ŸDÎTøµÃkNÞüg*[B­_[©”„3NGœõs¥0ÆÈ[ÔZ|f3l9Å`¶Ï¶Kg*œbðJ5®ÎÿÅÀða™Š Tã3»åÃâÃÛ¿?¬,|X||ú÷‡Õ¿?¬$š“C†Ú¿?¬šç–¶ÏÆ WÑsX>¬úbfŽÏúN^~æ$¸@8yù3•}›“c=N^òœ'±™Z3~X¸†ŸÓòañ•Êç«Ð?¯ñ??¬m­ðù¬³ý{ìmø°, x@õLxË]a 9»aŸU¯9Ý̹U€rg Ê,&>x¾¯ª¥=K|¯9ÙåX¹U€ÊD *©=Ÿc=Ÿc=È¢êÚó%Öó%Öó¨M, ¨¨=ßb=ßb=¢Å¢ŠÚó=Öó=Öó¨',‰IA¤ï¥Ñ<‘L^ÞKÈ’E«yû~­ k¥ö^z1'µÄ—÷ÒeɢŜZ^kC©â{éż´í½ô¿?TY²h1¯i{­}¤äý5?Ròõ2@ÒË Ç^U£ùï_Á÷«j2pìM÷jÞ¿ßt“c¯ªó•»¾ª&ÇÞt/æDŠoyÓMnHæ¤zÙj^“ø¦{1'Õ—Z`€b ‰}!©Dö÷5§=ÿçéöÏWŸþynýmNµ3—Ϻ°Åã·ùM1p@±Ä>`-AÏsŠ}‘Ž^sÕ|,‚9©‡²æ¤•øÍsÒk¾ÖC¡9iÊ9é5/”“†œ“ó)å¤.ç¤×¼Ž-'‚P’Ð ’-Ûà ŠmHq`žmМJ.Ù†æÙÍIÜ5Û¬C²e4'ÕXH¶™J¶AsR—d›¡d›×|Ú² EÇÅ£¤ÒB†dË6å«çI¶¡5ÊA0§Õ}––t Ï6å³í?6I)@•TZH¶IôèÍih×E”d›BÏ©ó%´O‹9)_ÙXØÔ¯Ðþ™¿à3Û´þ«}›“êKíÕH&Ùæ§Šæô€¾|f›?´ÙosÚÉFoT¨I¡fèôèÍihÓi"-ïW@2'1Ÿà;Û¤þ+›“Räë4±I}ˆ€ðb¾~29¯ÓÄ$y>}›3¡Òñm:›&ÚçWmôV@yäuÖ!I³³žï=_kZ?™uyP%óµëÆrOH;å‡MRý³íÙf`Û‡Ôö!Ò Ðü÷¯æ7 ˆ^_Û 9Q’Yiµˆ×‹y­~ :Hê<¤UŒæ¿Çýù¦AÐVõ!˜“Н+ ¢VñÀz1¯ÍOƒ¸Ià†´ŠÑ М:OhÄ­´›ßÓ E^ ÁEÐ&ík~´¯ùUÐ¢È ¤t´)…‚ö5¿ Ú×ü.hq=/©´èA›cA›cA‹kÚTn‚¶Ä‚¶Ä‚¶Ä‚×´©Þmmm-. %=h[,h[,hqi$)•Qö ÍÙèú¢<˲J‹y.ˆJæô@t1¯²¬ÒbND“1æqe%é¤NaÒÑœŒ­ÒI§°çð‹991[žÃ³ÃFÉœ6®é"‰ÏászØh#]ª´€¤ÒB:¥²û“4¿ÚžÖtA 5Éœ8ßl¬)@•TZÈš2ùù<¯#ŸÌ”?™×œœ×‘OfÈŸÌb>¥O¦ËŸÌk^‡í“!ãŽâ1 ‰ÇNáŸL†¯ýùdȱûd^srìC>™)2¯9=1[?™!2‹ù´}24êpY(I×NáŸLN_m'Ÿ )U]$sâ¼QR Pº$éòɤÄz>:­=¿~2…­m^sOù%:‰æóûý ;t’œ§‡NÍøÉàªRRÔ¡y¤±¶|û¬Ù† ðtñyRšž!|2E2§Ç>Cødºä<=öIÆO¥’žÍ#lAžëWÛk>™Ÿ.™“*TÙúÉàªRÒó!ÛÆ?Øöµp&̇*+Ð-ædá\¬ÎãªRú!nÞóýkIL˜«[Œù°˜ÓšÃ6æ Ø Hb7Ä-Æ|@sŠne>ü5??A]t]ô蘱蘡è@É(ÏEt”'¯ùUt è ¸ˆŽ¡èøc~ŽT’.¢£¤Pt¼æwÑk…’o¢#Ç¢#Ç¢gëRn¢£Ä¢£˜¢§EI"ƒlùÙKh4§»Ûõ%4dYõg1§bkù{ËÏ^B/æD0çï-'»[QN‹ò–¥7 4ÖŸ½„Fsö„-?{‡½˜“-ÿ°åg/¡óusü_/¡÷Naï°óš·w؆Ï—¥¶üžH™³¶CýÞòÿy"ýmNõïªñÃê¦ ev9Û‡5>w9äÚʇ5>ȇ5”k|-èé‡Õ•k|.è:u€Ê*P¦a—³}XóóÙÛ‡5?~„ƒíÚ_ûúa åÚŸ°)êº@} »þaÕç³í뇵¶ŠX¯yVµð|ÿfôÿj"X>,ö^§Âg åõþ~Ò­ù·yJæ“ëϸ æëØ՜ÈLÉù%† e‰iË>,Κ,Ç}»PÓg ­9‰œ©LÉœWþü°`ŠæälŠä¤·Sr'±YºñÃÂ…h͆ Ø«‘úù>/§ïg9'É|q¾‘¬ú×ÜðaárµÃFÓ ê÷#Nƒ¨ŸwŽf*A­†§AÔïKCi£ÀiõóÒÐLƒ@¨ý¦ç{¬ç{¬çq¡SÇMÏXÏPÏ£Ö´ç¢ç_µ«žͯzÅ  ÁEÏ¿÷¯z¾A¬ç1¡JußaURjlûV^_ëö®zKÐÈåÄ̉bØ¢·kQ‚É<¿æ#ÑGÙ¯¹òôt1ߟžþû©çPóDª/ŠG‰–£œOL³ëógêOËê–¶©´=¸Ré*ú-.¿–&þ£óó9ps"õ–—-À:p¿#;}›“’æ÷‘v ŒoótS·°.?Huùa­½å$<i]ÈIT¦kæ´tÁš“Š’“МÔY]s-+Ë’ šÏò“ÒºÈÜrRÃ_e!'(9 Í!m9É´¸€’4 ÈlÙW@Dä…d›¦d4'…H¶©J¶AóµpÉ6³(ÙÍi5‰5]d%ÛtüU² $%Û 9d[¶¡aƒ‹GIP É–mÆgÏ“lÓ”l3>»Žd›¢d›ñÝöd{Œ‚ *läéМ†ö*M´VõÌI‰Ú•¯¶f›Â?ØùÚ«4É6Lo1Ÿdù&d&M÷šÓlR¶™‚ó4´­ìX“IL‚ §x¾rDå+ Ù† ã-æ|fNñ|͹U² Æ[Ì'ùÌ6œâ‰æôÃÊR¶é‚óô‹+ÆlƒJ )aÐ €íö^-еçëºÛ#¥o¨€ðbNËq!ÛPM‚ל¶ŒÙ•0@R€Ui”?HG% X‹(’éó‘ß=½æDôayžh ºömžžyñ …4@Ò ­âÒ_5ˆµ!yNZÅ.½æ¤8ãò ¶Š­*Ñ<Ásñ µ(@Ò¢ ­âÒ_A…ÕùõA:u+íæé¨Ç’ƒ´5´5´5´¸‘ôô m± m± m± Åõ¼$¨ mm-®i%I=hG,hG,hG,hqM+)"èA;cA;cA;CA‹’ I¨Aûª\툑,QT$Qr ZYÕ“W€è •uQJv)E2g±)ˆ æì@ty¹NêjÞ.b% @’4 RØ[‹W“`×(Ë>Žt #a,æäÅÌó$]æì°q5— i®æÝöÉ÷ì(¨’ é”Îc>¶}Q8#­‚!˜Sç“‘úƒ‚ *ôöÉ”ÏôúÉ̬|2åópÖ˜OÊ'S¾Ïësz^'8ÏÎ댔/ÔyIçtÊöÉÔÏ=ìúÉ(Ê7‹ù¬Ò'“•O¦~Ÿ˜-æ”O¦~Ÿ cÔá²PR™ ²}2í³íä“)Ê'Ó>OÆç¼¨2’Êùd˜H¼*¤:o>&Q¶˜s)1áÐI0g‡NÒ'3çÙ¡“õ“ÁU¥$~Aóc ¾êä@4 Ÿ “([Ì'Ž}svì#}2]pžûX?\”JÒ¤S2ÿdæWÛ‹ôÉü Áœ8ÖO¥7@’Þ Ûþ|ÿ•Þ˜ðý|Ÿløóýù|.œ­Ï÷Q“$Mâ¾ÿ K¬Kâõù>q‹?ߟð¹p¶>ßG] t)ˆ[üù>Š+tóóý?æç' (Á’ƒ99¸€’Ôôè(±è(±èÀ%Œ¤O GGEG5E®$!=:Z,:Z,:p­ •ø×££Ç¢£Ç¢gk©È¾#&Ú V³‡9 [~NaËÑ“âØ‹pÝòÿÉ|lçû–¿ ÁœînåºåïM2'»Ûi¢þ$¬’Ÿ¤*ù´S¹wNo™{Z1\ÚòÿdÉ|n÷Î{§TÌÉæø„É÷–¿vÉœ¼v¦Ï:aþô€aËÿ§€Þ—9o{ýÞò*˜Sç§¡ð×üøaýÝDüW“a—Ã>,4g»œõÃ"ôÃZÌÉ.ç¾w9ìÃzÍéxý°È.§ γ=ð4FGƮˆ]ÎöaåÏ‹Xø‡•?7Ç?Â.gû°ò×~€|X”+îr”+ó‚]W »œíÃ*ßm¯ß»œíÃ*ŸÎ›?¬bú°*6±Z>,`±Y¿?,éÄ-ÁœÆp|Àô°^sºSîÂñSãZÌÔî(Æ«a×5ˇE­Ò+R1öªh_ÇC0—´¦I§0>ákNϦªða15®ÅˆíÃêØuÝòaÑ•dz¾ßçeáø€I;¾æÄùÚã‡ÕMÖÀ&ÃFÑ ÐœÝΰQ`4ˆ×œ®È4ˆ„""I!ne†þ}i(m â5'Ku+ "¡ÒB•´žµ®z Ôó(•D©­çßzÿW=)Öó8_ŠUçÕž/±ž/±žÇ™P,¯ö|õ| ô|~p}üHë㇮áWô׿˜ÇfPQ]TÝR},1‹©QÆSZ²é>Ö˜ÕÔ¨—)ê©>¶˜‚àåHäW(x)Ê|©>ö˜Ý4Ö¨,)­"tGÌÇak”p” º3æã´Œ5Êf=’l–ê#j?Ýù¥qÝòHëÝGˆù(œÃLÚ8ÏÀÍ<±yæ¹ëAÖ,Ä' ¸™€ 6iÂ%Ô7Ä& (¦ À n& ˆM@Ì#A€3ÜÌL›™ ™‚g&¸™™ 63A7ÎLp33Alfúc œ²À2e¥‡¡NYýœ‡ó/{]…#Oz.|LOÈÇ$MYÔGœ²Üø1¥)«‘_ᔕÒ)æc2õ#ÎL)ßø˜c>fS?âÌ”Ê%æãçÌ„‘õûW83¥zãcùXMcPj7>¶˜Í4Ö8¥~ãcùØMcP7>Ž˜Ãä#Î3éfžI±y&MÁǾþ åž|3ÏäØ<“}‹Íyœ€òÍ”cPK ²À“o& ›€r2õ#N@ùfʱ (çXàÌ”of¦›™²ifÂZùO¾™™rlfÊÕÔ83å›™)Çf¦ÜbA€SV¶LY?l?’?§¬*9_>Ì?¦UøEöuXùþÉãÆÇóq˜|Ä)+ÏgÌÇé ‚DœÇÊ÷Oy.œ/OÈùòL6ÎXàþ)pã#Ä|S?â”UÒ)æcŠÎe%ß8ŸcÎgSà”UÊ%æc1õ#NY¥ÞøXc>ÖXà\VÚó-æ|3ùˆSV¹™²JlÊ*Â.+Ó@Å)«ÜLY%6e•ÿ>æcäLÌq.+7sY‰ÍeeZ‚Ë‹?õfʪ±)ë»>8¬þÔ›)«Æ¦¬?æ À ÝO½™Ëjl.«É8eÕ›)«Æ¦¬ïZÖ[à”Uo¦¬›²j‰NõæÖ§Æn}j³ÜõcÉê§ÞÜúÔØ­Oí–›)¬LýÔ›[Ÿ»õ©ÃÔ˜õëÍ{„{P§¥±HöÓnÞ#´Ø{„öXÞL`-ì§Ý¼Gh±÷ ,cÝ0¹·›÷-ö¡%ÓXcro7ÏZìÙT[š5&÷vóì Åž´bêGÜ´›g-öì UË­8–;~ÚÍ<ÓbóLk¡[q,ùû´› ¨Å& fš€°ºíÓn& ›€Ú0N@ífj± ¨ÍP`%Ö§ßÌL=63uÓK9,:úô›™©Çf¦nz)‡ÅAŸ~33õØÌÔc/å°ºçÓo®ƒzì:¨gËû¬Âùô›[Ÿ»õéÅr×Å6Ÿ~sëÓc·>½Zîú±(æÓon}zìÖ§7S?âÌÔoÞ#ôØ{„ÞMýˆ3S¿yÐcïºé=Ö’|úÍ{„{Чe¬±æã3nÞ#ŒØ{„ñXÆK;>ãæÙÁˆ=;¦gXCñ7ÏFìÙÁH&qž7ó̈Í3#[.–±&á3næ™›gF ÝŠcUÀgÜL@#6j œ€ÆÍ4bÐh¦~Ä hÜL@#6 œ™ÆÍÌ4b3Ó0ÍLXPî73ÓˆÍLÃôRëÆ=óffš±™iÆ^ÊaݸgÞÜáÌØÎËÛ,÷Ì›«š»ªÊÃqqÊš7W53vU3sèVËÃ=óægÆîpf±<À*pϼyv0cÏf5õ#NYóæuÁŒ½.˜-8—Í›g3öì`vSà”5ožÌسƒ9LýˆSÖ¼y]0c¯ fè¥`¹5x.ž ùóÍ >b©Ón|„˜`¸,¼Oºñ1Å|L‘[qÀŠ ðäçsÌùl ¬hú”KÌÇb ,\úÔkÌÇ ¬hú´ç[Ìùf ,\úô{ÌÇn ¬OúŒGÌÇÐK9ÀúpSbõ@ª@îúë#ÀM}ˆÕG©> >âtpSbõþšú³þMˆ•ASÀ2pSbe@*ƒ@ÞL–A€›2+ƒð×Ü0Ö˜Üoª@¬Ú˜ªV;€›j«vRµ6Ö˜Üoª@¬ÚÁ_sC?bñi˜7>ΘÓp+XÔÒÍ<“bóLz"·â€Õ ÝL@)6%Ó„Õ ÝL@)6IÕXà”n& ›€RŽÎLéffJ±™)SàÌ”nf¦›™R5ÎLéffJ±™)µXà”uSbõ uÃûÀúpSbõ Ã]?`}¸©±ú¦á®°>ÜÔG€X}„¿æç~Ä2pSbe ƒ©qfº)ƒ±2-ïË ÀMˆ•Aøknkœ€nª@¬Úäbkœ€nª@¬Úäjkœ€nª@¬ÚÁ_sƒ8Ïä›y&Çæ™Ü Ë€E ßÌ396Ï乬vùfʱ (OK`Q(7P‰M@å±ô#5€r3•ØT XíÊÍÌTb3S1ÍLXÔÊÍÌTb3Sɦ~Ä™©ÜÌL%63• œ²nª@¬ÚÁ_óãÛÀ¢pSÔbE ໨Áæ#NY7E VÔà¯yàV«ÀMµˆU;øk~|XÔnŠ@¬¨˜Š5€›¢+jð×<Xínª@¬ÚÁ_ós`Q¸)j±¢`*jXÔnŠ@¬¨Á_óHà\vSíbÕþš|Ä)«ÞLY56eÕj¹Ç Po¦¬›²j ÝŠcE¨7sYÍeµ›‚§¬z3eÕØ”U‡)pʪ7SVMYu†‚K5@»™ËZl.k¦—rXªÚÍ”ÕbSV3½”ÃR Ðn¦¬›²Zì¥ÖG€›ú«Í¢ Xnê#@¬>4‹.`}¸©±úÍ ýˆYÿ¦ ÄÊ €© `¸)ƒ±2 •A o&° Ü”A€X„¿æç±ÆjpSíbÕÀTí°ÚÜT;€XµªбÆjpSíbÕþšú÷#ýæÙA=;ŠÐ[q,jýfžé±y¦—Э8V;€~3õØÔMV;€~3õØ$U;`A€P¿™€zlê=83õ›™©Çf¦nz)‡e ßÌL=63uÓK9,ƒãff±™iÄ^Êa}¸©±ú0Àò>ë#ÀM}ˆÕG€aѬ7õ V†E°>ÜÔG€X}„¿æ†~Ä™é¦ ÄÊ À¨¦~Ä™é¦ ÄÊ À0½GÀ2pSbeþšÆ' ›j«vc˜Æ' ›j«vÃôì«ÀMµˆU;øknðç™y3ÏÌØ<3Ár±ŒE `ÞÌ336Ï̺Çj0o& ›€f6N@ófš± hS?â4o& ›€fÎLóffš±™išf&,jóffš±™iš^ÊaQ˜73ÓŒÍL3öR«ÀMµˆU;øk~|{’°¨Aº)jbE Òó˜|ôn|„˜¹OXí ÝT;H±jÍO#5H7E R¬¨A25HXÔ Ý5H±¢Í#APÑùzã|9_MAÐÐÇvãc‹ùØLýØÑÇ~ãcùØcA0Ðùqãüˆ9?L>NôqÞø8c>Níx n¦,ˆMYðDnÅVdHp3—Al.‹”]Š n¦,ˆMYLA€SÜLY›² Ç‚ç2¸™Ë 6—A1NYp3eAlÊ‚j œ²àfʂؔ‘—råÁ…á#. ß7Š??“ ¿æy©7ÿ¯‰ÒdÔ‰9Öd—|*zŽ¡cQEq1§¢—:–KWc*zu¢—Ḏ¢¸ÎRÑ[ +Š+(½ÇzkŠK }ÄÚŽÕÅÅŠ>Cè¸lyÄe‹†þ.[îб–­¸îPÑÁ‹NÆWÜä:ÐrÝ÷Šœ›|ÄŒ7rl|0#ÂMF„̈p“¡ÆÆ§š|ļ 7yby+.=p“7¡ÇÆó&ÜäM±ñ&1»‚)»>ÌÇÏì qfÁ*IOz.ÐÓCÇìšàœè46±€Ñ“Ò zеófÊ7è9ÖvÌ›©Ü 'z¥è˜7S½A¯±žÇŒ˜Ú z‹õbè˜ëÒM®K3„Žåuž|“ë²–ëγA~L>bFÌ71C¬‡0#曌˜S 3b¾Éˆ9ÇÆ'›|ļ™oòfŽåM,vó䛼™k óf¾É›¹ÅƧ™|Äìš-Ùup¿³k]̧x2öÏü<`›'GÌÇaò3už7>Θ^ÅXÆæ)Ï…óå 9_L‰ËØ<n|„˜`ò§ƒ’n|L1S,p6)ùÆùsÞ4›`›§”KÌÇbòçœRo|¬1k,pÊ*íÆùsÞ4ea›§ÜLY%6eaÊjÔGœ²ÊÍ”UbSVñ*0çq.+7sY‰ÍeRXÆæ©7SVMYõ±ô#V«yêÍ”UcSV…P`›§ÞÌe56—IelXà”Uo¦¬›²j6õ#NYõfʪ±)«–XàtPoÎÂk Ýâa—§Þœ…ר"VoyêÍYx1tÌÁõæ±Æî±°ÊÓnî[ìK¦<íæ±A¨ç±ÊÓnî[еSZ»¹l±ÛA¬¥ò´›ÛÁVbè¸rn7·ƒ­†î¾°þÉÓnr]k¡»¯ÖL>bFl7±õØø`Fl7±Øø`Fl7±ÍØøL‹X³äé7y³Çò&V#yúMÞì±·Xgäé7y³ÇÞ^tÓÛ ¬3òô›óžC÷hXAäé7gá½ÄÐ1»ö›³ð^C·xXÜãé7gá½ÅÚŽy³ßÜ!ök;æÍ~s‡ØcwˆXQãé7wˆ=ö^ke<ãæq<¡žÇbϸ¹±ÛA,cñŒ›ÛÁ»ÄϸÉu#ÇÐ1×›\7Jèîk˜Nj±ôÄ3n2âˆÝbQ‰gÜdÄÑbè˜ÇMF=6>Ýä#æÍq“7G,ob!ˆgÜäÍ{{%žy“7gìíÅ4]Éa‰‡gÞœoÎØù¦TâÎXâá™7ǘ3vŒ9“ÉGÌÔóæsÆŽ1gÝa‰‡gÞœoÎØùæ4%z,ñðÌ›+¹»’›Õä#NóææmÆnÞf‹Î&óæJnÆ®ä¦i6Áϼ¹’›±+¹9L>âœ3onÞfìæm†^‘–x€çâJžÐ•<ÉG¬JôÀó —.€„=xÒ)æcŠÜòýàÉ7Îç˜óÙX•è)7>–˜ÅÔX•è©7>Ö˜5X•èi7η˜óÍX•èé7>ö˜ÝÔX•è7>Ž˜¡W$€#w_€¬@H7¹.=‘»¯¿æ1#¦›Œ˜ 4>È„t“SŠfÄt“SŽO6ùˆy3ÝäÍË›È0„t“7SæÍt“7S‹O3ùˆÙõ†‡n"Y‡7Á wr‹¡ŸÅíUôC?ËÖ«è#r÷y˜|<«Ó«>†n-ºózybègEyBãc¢âY„ãUcyÓ ¯¢çúYì]E/±ñ)&ÏšîÚÑVŒ%'hºóÀ é®ú;Æ”ÈpÌdz¦»êcìÓ­é΂à¬é®:;ß,¦DoÐtW}œ1-d8‹¦»æcŒ ç×tgΟ5ÝUçcWrÕ4›4ÝUcWr&2œEÓ]õ1vóVs,Κîªó±+¹jš² šîª±)KÒt§—.MwÕÇØ”åÖtgΟ5ÝUçcsYí¦ 8kº«>Ʀ,IÓõãYÓ]õ16e¹5Ý©óMwÍù›Ëšé‰AÓ]õ16e5Ó+ƒ¦»êclÊj±W$Mwí<¸…ê6[ÔÚUôØ¢A‡]Eo1ô³ÂºŠ»C4h§«è±;Dƒ*ºŠ>C=oÐ;×ÐcÜA‹’¹Š»4h”«è)†~VWÑsèîË +®¢—ÐÝW/&Ïòáª56>gap½ÅÆç,ù­¢÷Øøt“geoÕÇXÞ4hv«è±·5n }ÄÞ^ ÓÛ ƒè¶v"ëæ!ҙЧ­¢§úY([EÕm¶H`«è%Öö³¸µŠ^cm?ËV«è±;Dƒ µŠ{/ašVÑG¬çÏ"Ò*zìvÐ ­¡ÏØí AøYE‡úYÒYEO¡»¯i:©5(7«>Æn šÌ*z‰¡ŸÕ–UôŸjòñ,ª¬úË›¹d=öö „¬¢ÇÞ^˜Xr½cíh+Æ’ôŽÙ `Ñ;V|L12\’ÈpÌdzޱê#Ä|„È‘EïXu>ÅœO&ÏzǪ9æc6ùxÖ;V},1K,ÎzǪó5æ|5ùxÖ;V}l1›ÉdzޱêcùØcApÖ;V1ç‡ÉdzޱêãŒù8 —.½cÍGˆMYn½cæüYïXu>6—å‰EïXõ16eIꄬÏzǪ±)Ë­wÌœ?ë«ÎÇæ2(¦ 8ë«>Ʀ,¨¦~<ë«>Ʀ,ˆ¼"©½cxsðÏß?pó$ýª@~u”5ÖA² ä¨^¬ƒÈQ¤X©&£±ÒL GÉa¤›@ŽÊÂ:È0„ui9ë« ð˜@ŽrÀ:˜@Žª¿:ˆO7gC?êùêè¦Tp–íÕAL©à¬Î«ƒÔX?uwutSŽ8Ëëê ¦qVÑÕAF¬ú¸+:»}ÍóBsUnc9úYWEG&ü%úQWG‡úQWGO1ô£>®ŽžcèG}\½ÄÐú¸:z¡õquôC?êãêè=†~ÔÇÕÑG ý¨«£ÇrÝYWEÏZ®;Ý•TAwóñ¨«ûˈg}\=–Ïú¸:zŽiawÖÇÕ}Œåͳ>®ŽË›g}\½ÅÆÇ´`<ëãRóñ;»k•ouôC?jÚêèSA7Œi{–®U},O¨‡Î¢´::ÄÐr³:z O1”Ueus¬‡Žz±:z‰¡•`uôÓÉÜYðU÷±Åzè(媣{³k£èG‘V}œÆÔñ&Z¬º34>g•U½>¡ñ9ë§êèŸ &2©º)6>GT=ÇÆç(mª£—Øø“GSõ,®š‰g¡RÄtªxÖ#ÕAL7gÙQÄ´f;«‹ª Í´ñ=‹ˆê ¦›‡³V¨bZB%AuÓ>ô¬ü©ƒ˜.Ο:ˆiEsÖñÔAZèôý¬Ð©£›RÁYˆS1¥‚³Þ¦2CýxVÒTÑ»)Gœ3uSŽ8ëbê ±Ûɳâ¥zÆÒc·gÅK=vºuV¼ÔÑc§[gÅK=v+pV¼ÔÑc·gÅK=v+pV¼ÔÑc·gÅK}Än@ÏŠ—:zì¼ÿ¬x©£ÇÎûÏŠ—:z,×/uô:ͦØYñR÷1–ÏŠ—:z,#ž/uôÓÂî¬x©ûË›gÅK=–7ÏŠ—*úŒÝ¦NÓ‚ñ¬x©žxÌØyÿYËRG5U*uô:Íž¦]ìYŒR÷1vÞ–™ÔÑk ý( ©£·Øø˜ÊÎ:‘º±ÛÔ³¤Ž»M=k;êè±ÛÔi9™3H8j>¾ŽW=dgÔÑ!ršm]ÔÑSä4$Úóñ¨®¨û˜cãsÔMÔÑKl|ŽŠˆ:zO5ùx>Ô}l±ñ9Jêè=6>G±B}ÄÆÇr›jÐ$ÔÎâÀÄy0Hê `9* ê ÉrÔA² 䨨ƒÈQP©&£úŸÒL G‘?¤›@ŽZ~:È0%ûtÓŠæ¬Ì§‚¤'rúnÐÜÓÑM©à,­§ƒ˜RÁYAOɱ~5ìtcñ¬a§¢—XF–XåÖtô:Í> ©éè-tš-јG½4ÝÇŸ£šŽ>bãsÔ8ÓÑgl|¦Ådz”™êc‹Ý¦žEÊtôØmêY~LGݦ6ÓmêYeL=‹3q bb:ˆéTñ¬¦ƒ˜nÎÒ`:ˆiÍvVÓAL߳Зbºy8ëy© &ƒA¶K1íCÏê\:ˆé‚á,Â¥ƒ˜V4g­-¤„NßÏ*Z:º)œÅ²tS*8kbé =ÖGµ+Ý”#΢V:ˆ)Gœµ«T»<«R©g,1®€A•JGnU©tôØéÖY•JGÝ œU©tôØ­ÀY•JGÝ œU©tôØ­ÀY•JGÝ€žU©tôØyÿY•JEŸ±óþ³*•ŽËugU*=…N³§ivV¥Ò}Œeij*•ŽˈgU*½ÆÆÇ´°;«Ré>ÆòæY•JGåͳ*•Ž»M¦ãY•J=ñ˜¡ó~ƒÞ”†žb/÷ JR::DN³ÿš|< Fé>¦X¥ tôC?Š<éè%6>ÅäãQËI÷±Æzè¨Ò¤£·úQIGï±ñé&2Kº#ÖCG%}FN³ ÒH*:<‘Óì$јG$ÝÇÐmªAÛHGO±ñ9ªéè96>ÙäãQœH÷±ÄÆç(;¤£×Øø…tôÃmjsêý̱úøš3“ØC9s— ÐŽžcè.¥¡½ÄÐ]D;z¡»´‰vôCw‰íè=†îR3ÚÑG Ý%s´£ÏºOÿhCæt3ºKiG‡ºK1iG×rÝi½ùÏÜà£KWi÷1–}‚K;z,#ú”˜vôŸjòÑ¥×´ûË›>!§=–7} O;úˆÏ0ùèÔJÌG¢{u zzbèN(Ž1t§GO1t§GÏ1t§G/1t§G¯1t§Go1t§Gï1t§G1t§Gå:¯CÏ‘·öMÔb>:u ¸±ŒèÕâ豌èÕâè96>Ùä£SŠûË›^(ŽË›^(ŽÞbãÓL>:u æãgv…ÇÚCN(Ž>bèN(Ž>tÃøL‹^(æã7›ÔÜC^(Ž1t§GO¡ñ)¦Ý¼WŠû˜c=äÔâè%†îÔâè56>¦Ý¼WŠûØb=äÔâèÞìZ1wê@qôqPÇg˜|tê@qgh|¼:P ½>¡ññê@qt¤Å|tê@qSl|œ:P=ÇÆÇ©ÅÑKl|ŠÉG—ÔvbWc§•>¨=vZéSŽÚÑc·<>I©=vËãÓšÚÐ[ì–Ç'Bµ£Çny|êT;zìFÛ'[µ£Çîo|zV;zìþÆ'tµ£Çn´} X;z ÝN4Ó~Ú§“µûˈ>­=–}ÊZ;úŒi?íÓßÚ|ì±¼éæÚÑcyӧص£ÇnÇ»i?íÕõbgf=vËãÕõâè±ÓJ¯®GVzu½8zì–Ç«ëÅÑc·<^]/Ž»åñêzqôØ-W׋¡Ø¶W׋£Çîo¼º^=vãÕõâè±\çÕõâè%t;!éz1º^ÜÇXFôêzqôXFôêzqôŸnòÑ©ëÅ}ŒåM¯®GåM¯®CŸ±Ûñiº÷êz±¬»¿ñêzqôØÙ¡W׋£çÐíÄ4ÝŽ{u½¸±û¯®G¯1t§®Go±ñ1íæ½º^ÜÇØí¸W׋£Çnǽº^=v;>-»y·®õQÐõ²ö[׋£Cäv­ëÅÑSävBÔõb>:u½¸96>N]/Ž^bããÔõâè56>Õä£S׋ûØbããÔõâè=6>N]/Ž>bãc¹wêzñ;ˆqyœ‚_;:ÄÐ]J`;zŠ¡»$ÂvôCwi‡íè%†îÛÑk Ý¥6¶£·ºK†lGï1t—>ÙŽ>bè.á²=t£íT4ÛÐÓ¹øknðÑ¥{¶ûˈ>A´=–}Ji;zŽO6ùèÒSÛ}ŒåMŸÐÚŽË›>¶½ÅƧ™|tê´%æcè–Ç­ÓÆÑG Ý©ÓÆÑC§•n6†žŸºS§£C Ý©ÓÆÑS Ý©ÓÆÑs Ý©ÓÆÑK Ý©ÓÆÑk Ý©ÓÆÑ[ Ý©ÓÆÑc¹Î«ÓÆÑGävBÔic>:uÚ¸±ŒèÕicè%–½:mBã#é´1:mÜÇXÞôê´qôXÞôê´qôŸbòÑ©ÓÆN°JèþÆ­ÓÆÑcg‡^6ŽÞ#·¢NóÑ©ÓÆ}±rê´qô³Æ­ÓÆÐUfÍy|ªi7ïÕiã>B¬‡œ:m=ÅÐ:m=ÇÆÇ´›÷ê´qK¬‡œ:m½†n'¼:m½…n'$6æ£S§ûØcããÔiãè#6>N6Ž>cã3->zuÚ˜-v;îÕiãè±Ûq¯NGÝŽ7Óí¸O§m;±‹qyœn;zì´Ò§ì¶£Çny|’o;zì–ǧ·£Çny|"q;zì–ǧ·¡Çø7NY¹=vãÓ›ÛÑc÷7>!º=v£íS¨ÛÑKèv¢›öÓ>»ÝÇXFô Üí豌èS¾ÛÑ{l|LûiŸ>Þîc,oú„óvôXÞô)êmè#v;>Lûi¯î;3‹qyܺ{=vZéÕÝãè±ÓJ¯îGÝòxu÷8zì–Ç«»ÇÑc·<^Ý=Ž»åñêîqôضWw£Çîo¼º{ }Æîo¼º{=–뼺{=…n'f2ùèÔÝã>Æ2¢Ww£Ç2¢Ww£×ØøT“NÝ=îc,ozu÷8z,ozu÷8zìv|šnǽº{ìk†îoܺ{=Ř5nÝ=Ž‘Û QwùèÔÝã>¦X9u÷8zŽ¡;u÷8z‰O1ùèÔÝã>ÖX9u÷8z‹¡;u÷8zO7ùèÔÝã>ŽX9u÷8úŒÜN¸u÷:<‘Û QwùèÔÝã>†nÇݺ{=ÅÆÇ©»ÇÑsl|²ÉG§î÷±ÄÆÇ©»ÇÑkl|œº{½ÅÆÇp;Þ º{Ïû°€ŸØ½æy)„¥œ¯މùQwOGÏ1ô£îžŽ^bèGÝ=½ÆÐº{:z‹¡u÷tôC?êîéè#†~ÔÝÓÑgý¬»§¢ãœ~‰~ÔÝÓÑÁ‰>1?êîéèZ®;­7» »·ùxÔÝÓ}Œeij^bãsÔÝÓÑkl|ªÉÇ£îžîc,ožu÷tôŸ£îžŽ>bã3L>u÷¨À|üήÓ8>gÝ===1ô£îžŽ1ô£îžŽžbèGÝ==;ÑiÔu÷tôâBO¿Š~ÔÝÓÑk¬çº{:z‹õüQwOGﱞ?êîéè#†~ÔÝÓÑgý¬»§¢g-×gIwùxÔÝÓ}„Xu÷tôC?êîéè96>ÙäãQwO÷1–7Ϻ{:z¡u÷tôŸfòñ¨»G|•ùø™]¡sûYwOG1ô£îžŽ>tÃøLËøœu÷TËãê¡ ý¨»§£C ý¨»§£§ÐøHº{ÌÇ£îžîcŽõÐQwOG/1ô£îžŽ^cãSM>u÷t[¬‡Žº{:zw¢E?êîéèã4> ŽÏ0ùxÔÝÓ}œ¡ñ9ëî©èõ ÏYwOG‡ÐøHº{ÌÇ£îžîcŠÏQwOGϱñ9êîéè%6>ÅäãQwO=±«±Óʳ»å9ëîéè±[ž³îžŽ»å9ëî©è-vËsÖÝÓÑ!†~ÔÝÓÑc7ÚgÝ==vsÖÝÓÑc7ÚgÝ=½†n'κ{:z ÝN|ëîm>u÷tcñ¬»§£Øøu÷tôŸiññ¬»§úØcy󬻧£ÇnÇϺ{:zìv¼›nÇϺ{ê™YÏ¡›Ž³îžŽ^bèGÝ==vËsÖÝÓÑ[ ý¨»§£÷ÐÓYwOGÝòœu÷tôØöYwOEO¨çϺ{:zìþ欻§£Çîoκ{:zŽ¡u÷tôºt÷˜GÝ=ÝÇØýÍYwOGo1ô£îžŽÞcãÓM>u÷tcy󬻧£ÇnÇϺ{*úŒÝŽOÓíøYwO=Ášº_;ëîéè)†~ÔÝÓÑsèvbšnÇϺ{º±û›³îžŽ^cèGÝ=½ÅÆÇt;~ÖÝÓ}ì±:êîéè#†~ÔÝÓÑc·ãÓr;nÐÝÓ||u÷®zÈ »§£Cäv »§£§È턨»Ç|<êîé>æØøu÷tôŸ£îžŽ^cãSM>u÷t[l|Žº{:zÏQwOG±ñ±ÜŽt÷´;ˆqy º{::Äк{:zŠ¡u÷tôC?êîéè%†~ÔÝÓÑk ý¨»§£·úQwOGï1ô£îžŽ>bèGÝ=}Fn' º{*zz"·‚îÞæãQwO÷1–Ϻ{:zŠÏQwOGϱñÉ&º{º±¼yÖÝÓÑkl|Žº{:z‹O3ùxÔÝÓÎÌ õÈM‡AwOG1ô£îžŽºå1èî©èù‰¡u÷ttˆÜ1t÷tôÐ-AwOGϱž?êîéè%ÖóGÝ=½Æzþ¨»§£·úQwOGï1ô£îžŽ>"·¢îóñ¨»§ûº¿1èî©è剡u÷tt¤»Ç|<êîé>ÆòæYwOGÏ1ô£îžŽ^bãSL>u÷Ô¬R#÷kÝ=½Åк{:zÜNˆº{l|Žº{º¡ûƒîžŽbÖt÷Tt•YsŸú˜|<êîé>B¬‡Žº{:zŠ¡u÷tôŸlòñ¨»§ûXb=tÔÝÓÑkèv⬻§£·Ð턤»Ç|<êîé>öØøu÷tôŸ£îžŽ>cã3->žu÷T[ìvü¬»§£ÇnÇϺ{:zìv¼™nÇϺ{ê‰]ŒËcÐÝÓÑc·u÷tc÷7gÝ=½Äк{:zO5ùxÔÝÓ}Œåͳ»?ëîéè±Ûñiº?ëî©'XsFî× º{zr2k6ô£îžŽ‘Û Qwï¡>u÷tC÷7Ý==Çк{:z‰O1ùxÔÝÓ}¬±:êîéè-†~ÔÝÓÑ{l|ºÉÇ£îžîãˆõÐQwOGŸ‘Û ƒîžŠOävBÔÝc>u÷tC·ãÝ==ÅÆç¨»§£çØød“GÝ=ÝÇŸ£îžŽ^cãsÔÝÓÑ[l| ·ãà»oÁŸ¿àæ;HùõùÕQ^OÉ&£ŠžRL G±<¤š@Žšx:H3¥ïtn9*Üé Ãr²ÓA¦ä¬W§‚|OfÈQ–NÈQ}NIÒâêÇ„~Ô•ÓÑM©à,§ƒ˜RÁY%N©±~<ê¿éè¦q–yÓAL9â¬æ¦ƒŒX?uÚttSò8˱© É”<Ϊk:ˆ)yœÅÕtÓrᬡ¦ƒ˜rÄY*M1刳"šbZ.œ…ÏtS*8ë›é ¦Tp–1ÓALË…³Z™búâÏ¢d*È£@R;Ëéè¦TpVÓAL©à,¦ƒäX?eÁttSŽ8«é ¦qùÒAZ¬ò]+úϬ ý¿ú–¿ÿ“¶áúQ¾KG1ô£|—Ž>ôÓ!ç仸gù.ÕG$ÞõÐY¾KG‡úQ¾KGO¡ñ)¦,x–ïÒ}̱:Êwéè%†~”ïÒÑkl|LÙõ,ߥûØb=t”ïÒÑcÙõ,ߥ£Óø€:>¦%ßY¾K÷q†zè,ߥ¢×Xv=ËwéèŸjZJžå»tS¬‡Žò]:z,»žå»tôÓõ,ߥ®«i‡yVéÒAL;̳—bJ7gÍ-Ä´f;Kk© Ít¦tVÐÒAL_ÿY(K1-¡ÎzX:ˆéLé,{¥ƒ˜>Ƴº•bZÑœE¬tØ~ñ,O¥£›RÁY…J1¥‚³Ø”2Cýx–‘RÑ»)GœÕ¢tSŽ8‹Bé ±K«³Ü“ŽnJgU'Ä”<ÎâM:ˆ)yœ5štÓrá,Ťƒ˜rÄYqI1刳°’bZ.œõ“TaJg™$Ä” ÎjH:ˆi¹p=ÒAL_üYÛH)¡¤vV-ÒÑM©à,N¤ƒ˜RÁYƒHé±~<ª éè¦qÒAL9⬤‚ÌØ¥ÕYHÝÏØ1ðYHGAœU€tô:䜦luVÒ}ŒŸU€tôC?ªéè-6>¦,xVÒ}ŒŸU€tôØ%ÛYHG]²MKv5¨i>¾*@W=dPÒÑ!†~TÒÑSäL” *@º9ÖCG ½ÄÐ*@:zO5ùxTÒ}l±:ªéè=†~TÒÑGl|,KTƒ ¶zÓ iƒØ&£¦bJ7gé$›@Ž =:H1…xtÓ×ÖÛÑAš ä(«£ƒtÈQ=G±}ŒG‘Ä´¢9kᨠ)´_4¨Üèè¦Tp³ÑAL©à¬Y£ƒäX?ÕhttSŽ8‹Îè ¦qÖ–ÑAZ¬ª1:º)yœÅatSò8kÀè ¦äq–zQA²i¹pVtÑAL9â,Ü¢ƒ˜rÄYŸE1-Î2,:ˆ)œÕVtS*8‹ªè ¦åÂY;E1}ñg‰$D2ˆŸèè¦TpÖ8QAŠ)œ¥LtõãY¤DG7刳‰bÊgɤÄúñ(&¢n„KèØ &¢£ÇŽ Îb":zr b"›G1ÝÇë¡£˜ˆŽzçkQÑÕw¾çñ©¦,xÑ}ŒŸÅDtôC?Љèè96>¦ìzÑ}ŒŸÅDtôXv=‹‰èè-tÈiz¤lÑ}ŒŸÅDtôXv=‹‰èè36>¦¥äYLDõ±Å.ÙÎb":z,»žÅDtôØ%›é¶ALD]=š^H4CtÓó, ¢ƒ˜ÒÍYD1­ÙÎB:ˆéLé¬ç¡ƒ˜¾þ³l‡ bzïlPçÐALgJgÄô1žµ6tÓŠæ,©¡ƒÄö‹g± Ý” Κ:ˆ)œ¥/tëÇ£¨…ŽnÊgí Ä”#Î*Ȉ]ZÅ'ttSò8kLè ¦äq–’ÐALÉ㬡ƒ˜– gaÄ”#Îú:ˆ)GœetÓrá¬æ ƒ˜RÁY´A1¥‚³6ƒ 2MË…³ƒbúâÏJ :HˆeÐPÐÑM©à,• ƒ˜RÁYA©±~Íit”±˜¯ã.›“áÍ‹9¸)™“ñYÍIσdN:x5']ÇÍQAHØp•åÚ>>ÍË"øò'u¤¥ë–žÏü»Ds` o×-Y!ïúmžÖáÍ¿êÛuËô,™gò†öCzN0/@x1_³M‘Ì«‚KÂf“õüd_FÅ_5iº]z>¥"˜C¥súÏWÏÿù¬¿ÍS‘æK²ˆH‚yÎtRþùìù©í%IÉÚRÛ+(³*ªP ÛqÚó©<Ÿæ´ƒk[sÇÚu¥ ækÁS—ZÛ’9ibf¿B!AaÏOSÄoï?ÍY ¦ò"êSs¨Ð¾SÄöýôÏ@-BŠ˜E2_õ÷ ~§ˆŸ,™“@!Elù­¦‚"ŠÂyëù̾²ñ¨tI]è¢éÛ|à’“"øG:>㜬‰]õ|›“1@JRÛiŠÈRŠÚNS[9£Ì¤p"Äz~<Ÿæ´ƒ{’RÿÆçgŠÈRŠø‘ÌIYzµ,…c§²üá_~û2/‹°×¿\ù6qÐüömž&õñmb“óÛk^ºÜ¯&HÛæÕùœžOó²Èб5&q¾Iæù¡KÉŸOçEô2è"‘ü ÷h íÑVçÇómN}ü/AÆôº›ÿß?ûȤí#_UNÈ7‘–c‘–c‘–M‘†Kr(7‘Vb‘Vb‘VL‘†«Z¨7‘Vc‘VM‘†+;h7‘Öb‘Öb‘ÖL‘†+;è7‘Öc‘Öc‘ÖM‘†‹#7‘6b‘6L‘† äPsŽOsvUÒ÷¡fšE2_·ˆ© ‡š":9„ZÑÉ¡&Ûã-æC8Z5ÿ¸õmN¡Ö³±š,èUÙÆ&\Ý$iuCzžm€Òóy>4Ê÷ñ?bYÌ—~L5 Ç":9^ZÑIϳ€Å|Ò#Êï㿞óõt éøOD'gXì€4áÒ,IK³µçíÁ|upYعYÌ3Kv?Ÿm’9i"Ë• —fIZš‘]péŸæl/¶ž¤¬»à\²`žÈ÷.¸Iæ„c u,;_5\&iaHÚ>ʧ9ÝLÑ,¸¶³½æë.ëOªýÞ‡fɼ$)=ç×MÏ• וIZW&rÄò|šÓ&2]'ù˜û5_}Ü@pa˜ª!ÎÚ³±Nð祀`NÆzL!ΓdNϦçCržŽ5Áeij–8OãÓœŸ+¦ï8ÿ3Í|›¯Aûâ$sz,9¾ãüÏ<ñmNâ¼1\Õ¦nˆóŸþ|šÓ&¶,Åy–ÌIœs\–&iYºîÊü6§ ì?Óçî`ûÊÆç›ƒà²4IËR‚>¾ÍéÒ™L«+:$É|]`óÙ3ãÒ,KK³½?ßæ$?ÿý^ã°pϸðÈp1ŠB£øšk£˜qåÓÅ(æÅ×\Eœ»s¾ÅEœs¹ÅÅbEœs½ÅÅjEœ™r»ÅEÌúYÊúë>”¯âsÿÜ ‘U|¦]÷m¾î†`= ©É‚NvCl€R»’R/s~|›Ó (òUåk¾ngòÚCÄy½%ÒpÎÉÒœ³:Ÿžosêc{„Ç_æçHC=_I˜®ù_žÏ•YGO9ݼæUÁ™©H3Sy |-uh8?rºyÍ×5ÿfPX’¦èùù6§ Ýš/PõW fk}¶€+ù{_'ŒbË’9éG‚3S)†Qü)ßælÁÚ„QÌM2_;¸rœ™J5Œ"<ßædšGçœ"Í9ëäËçœòyL¾EN-EšZVó"˜Ó‰­ñ_aæ+ó¦%ÓÒ,¢%iíê-©¥%X‡J’«Õ[R“©%øùÖ|Ó’lj Æv•b»Vùä¶¾±Ý„Çq ä§Ò¯yKÂÛ­®;¿æ„w7=ËoOó"¼­ëS>Ž{ÍÇ#œù!?ÛY̧ðlg‚Å|&ɼË9‹ùø>Èòb# èðôíÕÏù©4Vê’ä„Y<±£Èú’t!lH<±'™¯ùJt O¥I„{Ö¡pD^ó!qDhÏKmŸ&¨ŸÏž¡íðT9·cõ@I’ö<mÒž¯¦©gȇ'¯ùè¶›´]B§MdÛ:,Q( ÂÓÁÙm >SÄ:y®)¢”!˜ó@ýNì+{ÍI ®ÓIìò5çú"¿ì5§š¥!´] T,âø´dHœÖÒW Ò¾ÎlE¾˜¯¾×§49'Á¼KOe{ÁýmN>€u7B{^j;ùLH '=/´8 €ü wu-RgbµüÕÁ­H)"Kæ£ ¤4= æ´‰lÕðL§Ig:­ÈÏ Ê´*<+I~Vøšü½[ä÷g…hd ÃÖY ·ÍMÚ6¯Îo‰þÝ÷6!Ñå”ü5å;ÑSç%tx”[Þ†{´&íÑVçù³ÂÖ¾|\ŸRôº›ŸÏÆ.õ[¿‰´‹´‹´nŠ4\’·qi#i#iÃi¸ªmó&Òf,ÒL7"Wvý¹ˆ´þ„"í5¿Š´þX"­ãÊ®ÃE¤uEÚk~i,‘ÖqqÔÓE¤õŠ´n¢t\ ti°jò§„=B­ï ×CMþTú5_¡È#ÁõP“¿N[̧ð:m=Ôä{ðלB‘=x—Ÿÿ-æã{‹H5ÓwÏóC(ÖD\ÝtiuCzží!zù:¢üÈî¯ùzŠDžJÓž—̧ôžô<Ûƒ/æYÚƒù©ôb>¿ŸJ³ãdÁœža±=xÇ¥Y—–fkÏókå^¿:˜¼#™Ê¥ékNzˆìÁ§üÀ¤×Ï&ò4†K³.-ÍÖ]0ÉÛÛç^lݤ …Mñš‰M1µ }îŲpP¶}ãís/ÆH³†]Z®mç§½m¦Hц¡ð^ó!ñHÛ‹d>…K5Úö.8O6iü¡iÇue—Ö•kÛùû‡>¾šX¤$}Ñǧ†}âœóvúüŒó5Ù­qÎ+w¼æ|¬¿ã¼Hæ³JwY‰¡iëËÒñâœ_ ŽçóЀd‚&Ÿ÷ÏGR;c*G!¯ùlR&(ò-àø<¯üs]@~…«Ú†8çÏÖ|5‘T¯ Î7ÁœøÈ¯œ.K‡´,]wü½ÔH_ ìõy&Ùðo¤Ï6Áeé–¥}|›Ó¥óš/:Ï#-°y¾¸4ÒÒlEçÏ2Fù1?ϸðõfkl«iqå0ÚÍ(¶Ø(6Ó(âÜ=úÍ(öØ(â¼8ÆÍ(ŽØ(Ó(â¼8æÍ(ÎØ(NË(Nœ™æs1Šó âĬ?¥¬?ŽÖ„ÏÝYÅwùÙçb>¾ß–Ò}hÌénˆm&NSš4Vçù(ÎôµQ!ï_Wçù”µ˜Ïï§ÒÔyÉœîsØì9qΙҜ³:ÏÐÍüåãúTš Ã‡¹!ÒpΙҜ3‹ü-ÎòµRò-*ògùZ)mß"ÎLSš™zû6§Kõð’ o¡R¿Ö@ü)îÄ™iJ3ÓŠÎ_;ÎöÒÌùçœÙ £ÈW‰³®w›0ŠütxvS?âÌ4‡aùä9¤Ùç(òãÝù¹c+g¦9 £ÈÙ óó•Å0Ž"¼Ê ‚ð|ÙœƒætúËüWXœ[*.LÌ‹`N'¶Æ…U°¥rŸzK²©%XÆZ*Œ©·¤˜Z‚õ¢¥êzKš©%Xt_ªß§·¤›Z‚uë¥"gðÈ54/ðý­ÕÏséó]k;ÔDì.æ‰<à{Ÿ ÃÊ–ÍsÌIˆ.™“Š>}1'tgÑœT:é¶×Æð–ü—J·Ñ!¡ÙÍÿJ(sD‡D6ï‚y’Ïzs©JÙ< ÏQé€d΋,ý|‰h^åG«ðÊHuçHÏó¯+¿‘.«9éº^sÒC}í!òªQ2§U^دPSAª;k&ö2Íÿ*¿Œ…µü ;§[ÌIe‰åQd¹îÈbž…â&@êÂЃÐż<ÂA()0•@2ŸS¡vñ]îb^‡ø®^Õ ©æíù™>Íÿª|¿Œ%=ÏÞå.æ)¿j¤=Ÿ›`ž…Ò*´çyt 9¯ßòóÙó µ½JÃK{^j{Õ@p©" $=Ï–¥hN;8¯“g– »,椇Öå=i{–ÌIûÊzHIŠ`[4§J|L2Su1OvM©ýJõÛ| T€_©~¥ˆ>~uÁ| Ôœõú™"óõ0b5_R„âü¨'¿Â…¬T,‘ö<Áö¨tý–ÄÍßbN"xÞ Ê۾✮ߺ>ø6_?€¶®ßhr–ÌÉgB–Ãâüúý$¶DÅJ Uz¤É™¯"úW“Ã"RB¿£“ús­\?S$É|m₺]R¥GXU*_‰â¦°%Uàž*˜Ój‡ëZ°ˆÐóZ•±ÆM–T(’8Ÿy{·9Ï÷#4ê|“ÌI•‰õq^D¯Mž°Ö"Hµ‰óìšSÉ#4‚^wóóI Ö„‘– i¯ùU¤½æZ¤a½AHé"ÒR EÚk~i¯¹i¸ª• ê‘–c‘–M‘†+»Tn"­Ä"­Ä"­˜" Wv©ÞDZEZEZ5E.ޤ’}z¤µX¤5S¤áA*šGNÐ[¥þu\³ ‘4Ù|=®!æ´~¬dNŽkH ‚ÅœÖ f¿Âõ…T²¶­Q±æHeÂhÛEó\óÒ”8ŸÇ5$Γżfy'ˆA*HÚžë·9mb^ãœ)ÍWù¯°` HÉi{Þ‰ætC±>ï$§=ìqéb^žï'ed+Çžw®æS8˨]|\º˜×!˜`QCŠÒ¶Ó§yhÎ6SËóNÒvö¸t1/ðý®¶½K漎è÷fªHÎW GRIEÒv~šÓWÓLØ}õb^§ø‚°¤"H%×8¾_Ìùk¬+¹™KuÉ|ëß±ùëûÈ¢Šèe ò%Îÿþ»ßæëXo>âÚJ*ûH :ëàò5ÖtÊ’ß2-ækäõî LyIñš×Gšñ†œ©óç¡°©è$m{ÿ6§M¬© ƒ¢9=Ø`¿Âµ•Tt’,q ïˆöµJ$Ój-Ê(¶ÏU"Áµ•Tš’¢osºþ#/ÒjU2AÿZ%nYW7RmI‚Îo¢óø±¾H,ûRÙG}gl§e±ì#”çbËÅ×\E,û.F±@h± #”t1Š%…Fñ5WGçÅ’oF1ÇF1›Fg¦RnF±ÄF³¾TБìÅø*¾Ô¯ýÝ­‚ÅœÔËå¿Â¬/•}$èü8»´¯ E~„Ýl^å–€U#AªIЫ`NAªy1Ÿ)Ÿ—!¯QËøZ…¯ª}&ãk²} ˜õ¥’—týW¾Íé2‚ÜúTY¶y5W@°b&H3 :UŸ/bÅŠù¼‚aù ¬Â÷ž©~bM’9­kÆ~…Y_*÷Icˆ÷PúÜôTa³l¾v0ËX-¤j¡= æ¤Wë(b>¯R>¯òk4§SËÖ˜¶¥Z¥Ä¼ætÒØÂsšT=PoI7µS—TgOoɰ´‹‘A{.Zò–ÓZ‚åÀ@*¦¶¤©%ÛRÍ$ µÙ‘Ç[µh-ÑAž×¬Å”øyÍkNjÑ.%Ë`€|$õš$<¯r¡ÖÕ\*Ô:eÂÿkžH¥ì]"¥œhɲ՜”Äú[Mâüò+AT Š «&o-&Rxd=K$CÒŠ`Nʹ®ÏÞF’OÊ^sR·d¥a¹Öéj.Ô:eC"´==Bmc6$E2ïò³7,cR+Òó­ÞBRè*äç«ëøâè5B±RÚv 6‘í™°ŒHe¬€Ô«áA€ áµ,!ɤŽ4ïMÊEÉh>¤Z 3+¹ͧ <žÈ´ž„¶'R–pÍJî@s`ÊãäW8ßJ%¼HÏo)çÛµ,!MMIhNhò$ET%E ù*5Ì¢¤4—J°žÚžM~M´ç…¶'ÈJŠÀ¥ŠTŒôü–"ÆWÓÑ”1>{ˆ¤ˆ¢¤ˆñÙDž"p“&Õ#)‚ßxaý1¨äÆ«â[ÌIÍ–Ú>SÄïOŸ¾}|Í—@…º¾}\RDìUãk¾jšËÃÍ5EüŽ_Áœj]Í—‘’ä< ÔÉ~…µ×@ª½F“3ûÊÞêgM(æBz>ÑB)‹ùÁy-LRËÁ¯ùç–‹’"òÌ× Ž_õ;E°Œæä3ù£%ð" æôõ;½fÂÂq Ž#=ÏORÞÒmìÔ…ÁoÒ^óµ‡f_{¨ÈÜ"4'MÌO¤Âq°…篔°pô,¼Ršüzã5'ÅÓ–«°DËE æé™ò+%¬;RÝ9â<¥ôOëEx¥4A~~ñšKŒ{꼄ž@yˆ¥Û@*ÝFœç¯”Þúc3}ŸãPôº›ŸOR°|HåËôH«±H«±H«¦HÃ%¹T¾L´‹´‹´fŠ4\ÕJõÇôHë±Hë¦HÕTL´‹´‹´aŠ4\ÙIÄôH›±H›±H›–Hà ` US#í-¢uiÃôškpTƒ‹œ ±BlðÑ"5r×<’9y•¾OÐøk/4§Ç5]:A+I2otG~…ë ©i;'x¾%¼Öó–LÎIEÔ&™Ïï mûÌÉqÍÊN¥m—œ§ç8ìÍÖ©þi;ÏVo±µ‰P„³&~G6ò§×Rý1rÚ³ÅyùÚP8§EE‡`>ÝsrÚ³ÅyùÜPté´§γ ÁÕT#´}‹óú¹™"çaE‰óúyš@â<+q^?7E:o‘œ§‡<Îqq$Uh£»!‚í«‰4΋çíÓG‚«©BÛç¿·Xt3õVh[Ǻç_ŸG¿A$óe¬áw7~Yüýw?ÍÉX¯ò5Îÿþ»ßæëXWî#®­¤*rôЀÊãóp¬ôï8ÿBó5RÏBœÁœž­-%ÄiœwÁyzhôdkØTÃŽ´Ó)Þ"tkK­ßqÎWŸc~lÐ_a ;jØ‘%.íõÖ°ãµæ>—¸üµ×|>W‰×VR¥;Š>¾Íéúo}íEÐùù섯U"í…¥ê@*UGÐùM4‹# æ×^XE¤*rú(æØ(fÓ(âÊAª"§b‰b1"ÎÝR9}klq^”êÃ飨b£ØL£ˆó¢TENÅÅnEœ™¤*rú(ŽØ(bÖ—êѽ_ÝÌùµIduÖ=‚¹L$KXE.IUä:;4@sº¡X (úÍ»8Ö ‹Ð%©Ag»~4§ É8Š—Wÿ…ž$tùäÍé*„Œ"€8Š‹9$e3ú˜%³2ŠùkAF’2Šùs}ÁA úX$‹2Šå Ä>ŠÑ«aÙ Íi?®ì 2Š–fßæ¤ªÍd¿jèc3Œâ*ísÓÂ(¦&™“»¡É~ÕÑÇnEöÍ)H«ÖQˆ>$tù%=šÓ©%ó_M™È_ù¡94Ø+¿„eàÀEK,-ÁBl ÒEK ™Z‚ß5”›–SKðó…zÓ’znÉïT‚u´¥yæ!Çf„FúšÿþIÕ‹„ÆCè M2_»kÙé?¤òâ#¡“Ê‹u5_{~µoóDî1~4OëÞ³ý‚ùê#üêhNØðUB'e ó¯ùš“£È_E0'o54/ä˜ïWú6/äýÒ¯æ„LŸ$tB¦ÿù‹~z6úÏüþïÿøO*…ýóëò+,€.­BHÔýN¿¾ÌÿjAVñ’%êR"ˆùº&¯‹ÎÚu½Iæ@æ¡´5ê2°ñAsR÷ñYÆgº\`¾~y í\iÐ~›gZÎõE'QWØ—ñš“wŸ¿ÒÏgÔU\h^è—ñ†6­6*¡WÚÐ?£.s¬I/­+I<åÂjþ›<Òš“–"t©³°É_ãþ³*K‘*ÀC2'Eqæ‚N†„Ôj\ÍIϯòÙ¤OÉSÏæŸL}Ä‚úÒ¢ø!‹9>å`A}r+·N9ë:«hÛ±œþCÎGûÚöA[õmNêá¯Â­T   æ¤ÀÚOÛNÖux¼óHÇ;¤UXÛßÍ|¢sÑÏg«úÌI¥ûuá\DéáÕ¼°ZæRÛI®ÃS§G:u"­•µ=}9 †º•vóïƒDÁy ykã?Rm|=hs,hs,hs,hq3"äéA[bA[bA[bA‹ëyé€QÚ Ú Z\ÓJÕÚõ m± m± m± Å5­T ]Ú Ú Ú Z\J%Òõ ± ± Å¥‘TüœXS.ìkNÿP^?¬ÿȓ晕XÓב«yfšÏÂu‘ÌǶ²ú:°N‚9=°^ÖóU|›¹šWÆ…5}qXÒý‘JºÓ;„IOÏשÞ•˜ÏÓÜÄÒÅb޿ߥÒ!éz8êì4wHæä4wýÞÉö¿æE ¸³Ó\ ½ÛöŸœdcûGªsO†$³ï=ÁWϯõ™èA«hNºnÝ˱ÐÛj^™˜ÔöIÌqQ*À§‡,Û¤ôyø°f›õð!"˜gA“ŠuJæ¤t1ådõš×gKV†°Á%±TXÿIYùÞóçöýÞɉ KÔ¯y䢨a£dNóú(é"6cÔáŠZª÷O:eûâÊçÑùdÄw9«ye צ +ù?R%ÿGÖùzÍÙ'³ö<©EÌ–F¯yNBØÐó:Éœž×_Âyä|}6ç Ÿ .È%…Ú)üƒmŸ§;$Û$%Û|2§Ú„O&IæôĬ ŸŒè<=1+ÆO×ó’pÍ#Å|ÿj{+Ò'S$óºù1|2¸ —4ÈNªqôñµçXë‡ÔÖöñ¹ç(VçqA.•û'nžmæ×nb•#nm˃ù¹ç²óä uI€¸5ØÓŸü|¡_þ3ÿô‘,œ±ÿ“á":2„¢ã5¿Š,’ÿät9…¢ã5¿‹\ÂHÕóõèȱèȦèÀµB.7ÑQbÑQbÑk…\o¢£Æ¢£Æ¢gk©æ¼-Í8-æn8-á‡l¹ž–ü§%|㹘“]óú”¦Ð£„os²5‡Õœ¼Œ,’ù:¼]8-É% æëÖ|¬/#ImjÐ×­yúW”ècà~èë3,Äÿäa8-á'„y|¾úNK Ó7P‹y1Q©lÉ<ï1÷!Il½˜“gƒß§%¨:•[‡ïÓ’?#úmNN j7¦4\åi8-á§£y~¾:\ß¾±÷„õÛ|íº,œ–”$š/m‡òÝ“¦%'¡‚ÂSÑç¤ò|î…~„3¾MyÍÉ™Êp¦Â“ÊkNöB]8S)Urž”¹†b .vx X6ˆ,+øÜ þg*<¿æY¨uI:…Ö¯yIÂgM*¸ÉùÊ@¤®#oaP•â)ɰAäßeIŸmÏÂ1É|u¾vãdÿÇÜðaárµdˇÅ^‰•üýa '/üèä5ÏI::y踛S…uáä¥=’óõÙ‚Ëðaá*ºˇÅV*¥|XÂÉË–“Ê÷‡%œ¼ð¥ÆkNÎ(ºpò²å¤Ïó¾ü㇅køR-»I-Ÿ¯B¤“˜’ùê|oÖ«š>,\é—fØcñÓ¡ò}Ó Â«7Éœlf¦¼M¡Îã tËÖÎzÍÙUµ´Çª]2/c[|:O®ªQä)ó¦çg¬çg¨çQ4ä©ÏEÏ×'Ôóõ õ<êy<5]ô|M¡žÍïzgšoz>Çz>Çzª$áñµ ÞóoF$ú—sü49¯yKd.y7 DO Áœè ŒÕ<ËÝs2g,;Ç>eŠÁk>ÈòzáÒoôµöbN‚öWFó òê5'µ ×Ôì2Ca1§tD|+TÍ@h;P5ƒ¿oÅÏ|ÂZ-|Š3a•fÂ5ê!´¿æ¿Õ…'cKÔm|Â×¼‘‡ãkt¬{ƒ*™w²Ë鋹Xfš˜WáÁÚuœOøš¯u ŸJ<üšßæ“Þé3É+ÔÅ\Ú5OúeÁœúØ~„¨kŸæ@ê•þYS¨7ôHzC$žJbQ×?†ò ;)&æŽ{[ê:¢œOøšOJK{Ñg–×Ç‹ùü>Šc} ›ùùmj-=’ÖÒ³ªoq¦G}̈Ä×’øˆ>{-ñš¯%Ð Ïd->Ï™¯9‘OX k9NG|ÍI¹•gBê%NÉœÔKL¯9:rMpÊ´m¶/×ÇUZשLö¸Àmk­ •éAªÒ³Ã°Åœè/q’m¶F󾮓VB ÓHßæƒèY¸UdHºd>éåÄ2Ýú‡Os ¬6™šEÆ…ÇIxŒ ŒÂc¤çÉûã>ä÷ǯ9) ¼Å‘Na爯ìÕÅ6†ê¡=’É6<ê|…6) °f›Ò›`N¤.`~gu¯y§k¹ñ™m:cô½æ$ÛŒ%æ§u¯9UÃyÍI¶ÉyÚI&Á’lÓpOØ’!ÛüY˜}™ÓЦÓÄšj—Ì×Þë ag•¾Í×/ƒN<Ámßæƒ%kzØ(8Ï“1êpE-©Ø‘NáÏìûø<ú Ó„Âà}UìˆóÃÈ@}ºGÒ§#ŸÌ6póó“Y™Ûäv€÷üüŒŽõÍãÔn~Ÿ×¥_Âyà<;¯¶OuïI÷Ž^™°Êk¨{GOwH¶aSßæä|~-v0ýÛ|6)Ûˆ²ð‹9;1k¶OåøIŽt _] øj{mÂ'Ãç÷WŽï٪Ο *å=’RÙIqNÐH_{¢G¾î¤8'èUÊ#{³ó¸ —Dìˆ[-á”לœ–¬|BrZò“$srZ²¾Äú`óÛœJ×ïÓÎ_YÌy–Y¿OK²Ðvº5ŸF>!ÊË=’¼{qIogú|Âi ç¾æ¾1ñ—‚9ÙÙÿÀ÷iI’ódË?¿OK6>áb¾^n/|B2$iæìÄ`ÚR*ó=3NK~ØÛ·™?_®oߨ{Âúm¾v]éõó´d㾺€kÛK7ò §‰º€Ï,† "?Š›åsƒø#œ©ð{ƒ×œœ©üg*œ|óš-ZÎT8ñ5$}Ô›1¸p)8«aƒ¸åãú¹AáL…_;¼æä]Àp¦²%Ôúµ•JI8SátÄY?÷X cŒ¼…A­Åg6ÑS fûl»t¦Â)¯TãêüQ –©xJ5>³[>,>¼ýûÃʇÅǧXýûÃJ¢99d¨ýûêYphiûlü°p=‡åÃú¡/fæøŒ¡áäå'`N‚ „“—?SÙ·99Öáä%OÁy›©5㇅kø9-_©|¾ ýóÿóÃÚÖ ŸÏ:Û¿ÇކˀTÏ„ç1ì±Øš³;aöXŒ[õšÓÍŒ‘[(w¢ÜÙÈbâƒçûªZÚc±Ä÷š“]Ž•[¨L¢2‘Úó9Öó9Öó(€,ªþ¨=_b=_b=ÚÄ¢€ŠÚó-Öó-Öó(Z,* ¨=ßc=ßc=zÂ’˜Dú^Í Éäå½4€,Y´š·ï×Ú°V:aï¥sRK|y/ Y–,ZÌI¡¡åµ6”*¾—^ÌKÛÞKÿûC•%‹óš¶×ÚGJÞ_ó#%P/$½ 2pìU5šÿþ|¿ª&ÇÞt¯æýûM78öªz1_ù¸ë«j2pìM÷bN¤ø–7Ýtà†dNª—­æ5‰oºsR}Ù¨(ö’Ø’Jd_sÚóžnÿ|õéŸçÖßæT;sù¬ [<~›ßûIìÖô<'¡Øéè5'QÍÇ"˜“z(kNZ‰ß<'½æk=š“¦œ“^óòH9iÈ9i1ŸRNêrNzÍëØr’!hq% !Ù² ®€ Ù†æÙÍ©tà’mHq`žmМÔÁ]³Í:$[¶AsR…d›©d4'upI¶J¶yͧ-ÛPt\Ûþc“”TiI¥…d›DÞÑœ†v]AI¶)ôœj1_Bû÷䱘“ò•…Mý íŸù >³Më¿Ú·9©¾Ô^d’m~ªhNèËg¶ùC›ý6'¡lôV@…jÖ!NÞÑœ†6&Òò~$só ¾³Mê¿ò·9)E¾NëÔ‡/æë'“ó:ML’çÓ·9*ßÙ¦³i¢}~qÕFo”×I^g’4;ëùþÑóµ¦õ“Y—U2_»n,÷„´S~Ø$Õ?ÛÙ˜m¶}Hm" Íÿj~Ó €èeðµ š%™•Q‹x±˜×ê§Aªó€¤ÎCZÅhhþ{ÜŸomU‚9©øºÒ j¬óÚü4@nH« Í©ó„AÜJ»ù= Pä\m‚PоæWAûš_-м@JA›R(h_ó« }Íï‚×ó’J‹´9´9´¸¦Må&hK,hK,hK,hqM›êMÐÖXÐÖXÐÖXÐâ²PÒIу¶Å‚¶Å‚—F’R 9eÒÑœˆ®/ʳ,«´˜ç"è¨dNDó*Ë*-æô@4cWV’N éö ÍéÁØú t {¿˜“³å9<;l”Ìéaãš.’ø~1§‡6Ò J H*-¤S*»?Ió«íiM¤Pc‘̉óÍÆšTiI¥…ì ù'“ŸÏó:òÉLù“yÍÉyùd†üÉ,æSúdºüɼæuØ>2î(’x éþÉdøÚo‘O†+°Oæ5'Ç>ä“™ò'óšÓ³õ“ò'³˜OÛ'C£—…’t éþÉäôÕvòÉRÕE2'Î%¥¥k@’®!ŸLJ¬çóç¡ÓÚóë'SØÚæ5'Ññ”_¡“h>¿ß¯°C'ÉyzèÔŒŸ ®*%EšGû`Ëç±ÏšmˆÀOŸ'¥éÂ'S$szì3„O¦KÎÓcŸdüdpQ*éùÐ<Âä¹~µ½&á“ùé’9©B•­Ÿ ®*%=²hüƒm_ gÂ|¨²ÝbNÎÅê<®*%¡âVá=ß¿–Ä„ù°ºÅ˜‹9­9lc>ŠÝ€$vCÜbÌ4§èVæÃ_óóÔuI×EŽ‹ŽŠ”\ò\DGyBÑñš_EŠž@‹è(ŠŽ?æçè@u(é":J EÇk~¸V(ù&:r,:r,:p¶.å&:J,:Š):pZ”$2È–Ÿ½„Fsº»]_BC–Us*¶–¿·üì%ôbN„sþÞò'Ñy²»å´(o PzJ3lùÙKh4goa@Øò³wØ‹9Ùòÿ[~öz1_7Çÿõzïö{1¯y{‡mø¬qIPºaËÿç‰ô—9k;Ôï-ÿŸ'ÒßæTÿ®?¬nú°páP†a—³}Xãs—C>¬©|Xãó`€|XCù°Æ×‚ž~X]ù°Æç‚Þ¨S¨¬ev9Û‡5?Ÿ}€p0°}Xóó`àG8Ø>¬ùµ ÖP>¬ù¹Q›â ® ÔǰËáV}>Û¾~Xk«ø‡õš×yñaU Ï÷oFÿ¯&‚åÃbïu*|ÆP^ïï'Ýš›¡d>ù°þŒ»`¾>ŒY͉\À”œ_bR–˜¶ìÃBá¨Ér|ðз 5}ÆÐš“șʔÌipåÏ ¦hNΦHNz;%wÑy›¥?,\ˆÖlø°€½©Ÿïórú~ö‘s’ÌçɪÍ .Wk1l8 ¢~ß9‚°Qà4ˆúyçh¦A 2ÔjØ(pDý¾4”6 œQ?/ Í4Úoz¾Çz¾Çz:uÜôüˆõüõ}”ýš+OOóýéé¿?zE0O¤jð¢x”h9zÁùÄ4»þ8¦þ´l¡þ`i{JÛ“+•®¢ßâòkiâ?1?ŸWA0'RoyÙ¬÷;²Ó·9)ÉÓ–ªCy º˜ïT÷ûßæ‰ D_ÍåGæTöÊ$¤X—¤ºüdH:Û¼•ñ©ÈÞ²ƒ Õ—  æc~¯i§Àø6O7u{ëòƒT—ÖjÑ[NÂC‘Ö…œDeº†`NK¬9©(9 ÍIÕ5'Ѳ²,© ù,ß9)­‹Ì-'5üUr€’“ÐÒ–“ A‹ (I“€ É–mpDD^H¶iJ¶AsR8d›ªd4_ 'l3‹’mМV“XÓEV²MÇ_!Û@R² šC¶e6¸x”ÈlÙf|ö<É6MÉ6ã³ëH¶)J¶ßmO¶Çø(¨’ É6LšÍih¯Òt@kUÁœ”¨]ùjk¶)üƒ_¡½JÓ‘lÄñóI–oB¶aÒt¯9Í6 e›)8OCÛÊŽE1 Ä$ÈpŠç+ç@T¾²m˜0ÞbÞÈg¶áÏ×|[%!Û0a¼Å|2ÏlÃ)žhN?¬,e›.8O¿¸bÌ6¨„’ØnïÕ¢X{¾®»=Rú† /æ´÷² Õ$xÍiÛÁ˜mP $% X•FùƒtT€µˆ"y>ùÝÓkND–鉖 kßæé™ÒQH$! Ò*þ ýUƒXë’é¤UìáÒkNŠ3.Òi«ØªÍ<ÒQ‹$- Ò*þ ýTX_¤S·ÒnxŽz é1èA[cA[cA[cA‹›IAÚ Ú Ú Z\ÏK‚ zÐöXÐöXÐâšV’4ЃvÄ‚vÄ‚vĂ״’"‚´3´3´3´(i’¤´¯*ÀUÐŽÉE@ ¢•U=yUˆZY¥d—R$s›Â¨`ÎDט—뤮æí"æQÒ$IÒ)…½µx5 y²ìãH§0ÆbN^̬1OÒ…`ÎWs¹æjÞmŸ yÏŽ‚ *Né<æógÛ…3Ò*‚9u>©?(¨’ ÙAoŸLùÜA¯ŸÌÌÊ'S>‡`ù¤|2åû¼n1§çu‚óì¼ÎHùBtH§lŸLýÜ¢|³˜Ï*}2Yùdê÷‰ÙbIùdê÷©Ñ0F. %• Ò)Û'Ó>ÛN>™¢|2íÓùd|΋* ©LO†‰„Á«2Aªó6á“ae‹9—svè$}2Spž:Y?\UJâ40¦à«^AD“ðÉ0‰²Å|2áØG0gÇ>Ò'ÓçÙ±õ“ÁE©$½A:%óOf~µ½HŸÌÏ̉ó`ýdPz$é ²àÏ÷_é ßÏ÷Év€?ߟÏçÂÙú|59@Òä nñçû¯°Äº$^Ÿï·øóý Ÿ gëó}Ô¥I—‚¸ÅŸï£¸A7?ßÿc~~‚ I0èÑ‘cÑ‘cÑ (IAދދ\ÂHúztÔXtTStàZAУ£Å¢£Å¢× R‰=:z,:z,:p¶–ŠìëÑ1bÑa¢ b5{˜Ó°åçö·=)޽çÐ-ÿO‘ÌÇv^±oùÛÌéîvQ¾¡[þÞ$s²»&êOÂ*ùIª’O;%‘{çô–¹§Ã¥-ÿO–Ìçvï¼wJÁœlŽÿH˜|oùk—ÌÉk‡aú¬ÖèO¶ü è}™ó¶×ï-ÿ¨‚9u~Ú ÍÖßMÄ51v9ìÃBs¶ËY?,r0@?¬Åœìr~à{—Ã>¬×œî׋ìrºà<ÛOctdìºlØålVþ¼ˆé`€Xùssü#ìr¶+íȇIù°òç.Gù°21/ØuŰËÙ>¬òÝöú½ËÙ>¬òé¼ùÃ*¦«b«åÛõûÃ’NÜRÌi ÇLë5§;å.05®ÅHíŽbü°v]³|XôÐ*½"c¯Šöu 9sIkšt ã¾æôlª SãZÌØ>¬Ž]×-]I¦çû}^Ž˜´ãkNœ¯ý1~XÝôa lâ0l ÍÙíFƒxÍéŠÜHƒH("’DâVfèß—†ÒFÑ ^s²T·Ò *-$QiAëùWëàªçB=R I”JÐzþ­÷Õób=ó¥Xu^íùëùëyœ ŲñjÏ×XÏ×@Ïç×Ç´>~è~EÍËóû¢üÉ]ÊÇÿÌ¿|l@~…Ú¦¢—êcŽù(plõÕEEÑ-ÕÇó±˜úe<¥%›îcùXMýˆz™¢þ—êc‹ù(^ŽD~…‚—¢Ì—êcùØMcÊ’Ò*B÷qÄ|¦±F Gi± û8c>NËX£lÖ#Éf©>¢öÓðXú×-´nÑ}„˜Â9̤ýˆó ÜÌ3›gþ˜»dÍBÌq‚› b˜& \B=p3Al‚b œ€àf‚ØôÇ<83ÁÍ̱™ š)pf‚›™ b3tSàÌ73Äf¦?æ‘ À) ,SVzúç”ÕÁyø0ÿò±×õW(0ò¤çÂÇô„|LÒ”E}Ä)+ÁóQš²ùNY)Ýø˜b>&S?âÌ”ò9æc6õ#ÎL©ÜøXb>~ÎL@Y¿…3Sª7>Ö˜Õ4Ö8¥vãc‹ùØLcPê7>ö˜Ý4Ö8¥qããˆù8L>â<“næ™›gÒ|ìë¯PnáÉ7óLŽÍ3ÙÇ±ØœÇ (ßL@96e°* <ùfʱ ('S?â”o& ›€rŽÎLùffʱ™)›f&¬•ÿä›™)Çf¦\Mýˆ3S¾™™rlfÊ-8eeË”õÃö#ùsʪ’óåÃücZ…_d_‡•ïŸBÌG0õ#NY%Ýø˜b>¦Xà\Vòó9æ|6NY¥ÜøXb>S?â”Uê5æcÎe¥Ý8ßbÎ7“8e•›)«Ä¦¬"ì²2 Tœ²ÊÍ”UbSVùïc>0AÎÄç²r3—•Ø\V¦%°¼øSo¦¬›²¾ëƒó ÀúàO½™²jlÊúc¬ÐýÔ›¹¬Ææ²šLA€SV½™²jlÊú®e½NYõfʪ±)«–XàtPon}jìÖ§6Ë]?–¬~êÍ­OÝúÔn¹™ÂÊÔO½¹õ©±[Ÿ:LýˆY¿Þ¼G¨±÷uZú‹d?íæ=B‹½GhåÍÖÂ~ÚÍ{„{ÐÀ2Ö “{»yÐbïZ25&÷vóì ÅžHµ¥ÙXcro7ÏZìÙA+¦~ÄýH»yvÐbÏZµÜŠc¹ã§ÝÌ3-6Ï´ºÇ’¿O»™€Zlj¦ «Û>ífj± ¨ SàÔn& ›€Ú Vb}úÍÌÔc3S7½”â£O¿™™zlfꦗrXôé73SÍL=öR«{>ýæ:¨Ç®ƒz¶¼Á*œO¿¹õé±[Ÿ^,wýXlóé7·>=vëӫ宋b>ýæÖ§Çn}z3õ#ÎLýæ=B½GèÝÔ83õ›÷=ö¡›Þ#`-ɧ߼Gè±÷}ZÆk>>ãæ=ˆ½Ge¬±´ã3nžŒØ³ƒazv€5Ÿqóì`ÄžŒdòç™q3ÏŒØ<3²åbk>ãfž±yf”Э8V|ÆÍ4bШ¦ À hÜL@#6fêGœ€ÆÍ4bÐè± À™iÜÌL#63 ÓÌ„åžq33ØÌ4L/å°nÜ3of¦›™fì¥Ö{æÍÎŒÝáL°¼=Áòpϼ¹ª™±«¡<÷§¬ysU3cW53‡nű<Ü3oîpfìgËÓ¬÷Ì›g3öì`VS?â”5o^ÌØë‚ÙbA€sÙ¼yv0cÏf7NYóæÙÁŒ=;˜ÃÔ8eÍ›×3öº`†^Ê–[ƒçâÙšß9ÿ×Üà#–:}àÆGˆù†[qÀ ð¤SÌǹ¬ÈO¾q>ǜϦ ÀЦO¹ñ±Ä|,¦ ÀÂ¥O½ñ±Æ|¬± ÀЦO»q¾Åœo¦ ÀÂ¥O¿ñ±Ç|ì¦ Àú¤Ï¸ñqÄ| ½”¬7õ V¤úä®°>ÜÔG€X}ê# ê#N7õ V᯹¡1ëß”A€X0•A,ƒ7e V¤2äÍ`¸)ƒ±2Í cÉý¦ÚĪ€©Ú`µ¸©v±j U;`cÉý¦ÚĪü57ô#Ÿ†yããŒù8 ·â€E ÝÌ3)6Ϥ'r+XíÒÍ”bP2M@XíÒÍ”bTí€N@éfJ± (åXàÌ”nf¦›™R1ÎLéffJ±™)USàÌ”nf¦›™R‹NY7õ VR7¼¬7õ VÒ0ÜõÖG€›ú«iîúë#ÀM}ˆÕGøk~îG,ƒ7e V2˜úg¦›2+ƒÙò° Ü”A€X„¿æ†±Æ è¦ÚĪ@.¦±Æ è¦ÚĪ@®¦±Æ è¦ÚĪü57øˆóL¾™grlžÉÝp± XÔòÍ<“cóL‘[qÀjo& ›€ò´5€r3•ØTK?bQ(7P‰M@BA€Õ ÜÌL%63ÓÌ„E  ÜÌL%63•lêGœ™ÊÍÌTb3S)± À)ë¦ÚĪü5?¾=,j7E VÔ¾‹l>â”uSÔbE þšnűÚÜT;€Xµƒ¿æÇ§€E নÄŠ€©¨`Q¸)j±¢ÍA€Õà¦ÚĪü5?5€›¢+j¦¢€E নÄŠü5Îe7Õ Ví௹ÁGœ²êÍ”UcSV­–[q,¼õfʪ±)«¶Ð­8Vd€z3—ÕØ\V»)pʪ7SVMYu˜‚§¬z3eÕØ”Ug(°T´›¹¬Åæ²fz)‡¥ ÝLY-6e5ÓK9,ÕífÊj±)«Å^Êa}¸©±úÐ,º@€õà¦>Äê#@³èÖG€›ú«ð×ÜИõoÊ @¬ ˜Ê –A€›2+ƒRúfË ÀMˆ•Aøk~k¬v7Õ VíLÕ«ÀMµˆU;©Úk¬v7Õ Ví௹¡q?Òožôس©¨½Ç¢Ðoæ™›gz ÝŠcµè7PM@Ý4aµè7PM@Rµ8õ› ¨Ç& ÞcA€3S¿™™zlfꦗrXúÍÌÔc3S7½”Ã20nf¦›™Fì¥ÖG€›ú«,ïc°>ÜÔG€X}] ÀúpSbõ`Xtë#ÀM}ˆÕGøknèGœ™nÊ @¬ ŒjêGœ™nÊ @¬  Ó{,ƒ7e V᯹a¬qº©v±j0†i¬qº©v±j0LϰÚÜT;€Xµƒ¿æqž™7óÌŒÍ3,ËXÔæÍ<3cóÌL¡[q¬vófš± hfSà4o& ›€f1õ#N@ófš± hÖXàÌ4of¦›™¦if¢0of¦›™¦é¥5€y33ÍØÌ4c/å°ÚÜT;€Xµƒ¿æÇ·' ‹¤›¢)VÔ =ÉG@áÆGˆù‘[ñ„ÕÒMµƒ«vð×üø4"aQƒtSÔ ÅŠ$SQƒ„E ÒMQƒ+jð×<¯7ÎטóÕ }l7>¶˜ÍÔ}ì7>ö˜=7ΘóÃäãDç3æã4ÜŠ',¼àfʂؔOäVCè¸lyÄe‹†þ.[îб–­¸îPÑÁ‹NÆWÜä:ÐrÝ÷Šœ›|ÄŒ7rl|0#ÂMF„̈p“¡ÆÆ§š|ļ 7yby+.=p“7¡ÇÆó&ÜäM±ñ&1»‚)»>ÌÇÏì qfÁ*IOz.ÐÓCÇìšàœè46±€Ñ“Ò zеófÊ7è9ÖvÌ›©Ü 'z¥è˜7S½A¯±žÇŒ˜Ú z‹õbè˜ëÒM®K3„Žåuž|“ë²–ëγA~L>bFÌ71C¬‡0#曌˜S 3b¾Éˆ9ÇÆ'›|ļ™oòfŽåM,vó䛼™k óf¾É›¹ÅƧ™|Äìš-Ùup¿³k]̧x2öÏü<`›'GÌÇaò3už7>Θ^ÅXÆæ)Ï…óå 9_L‰ËØ<n|„˜`ò§ƒ’n|L1S,p6)ùÆùsÞ4›`›§”KÌÇbòçœRo|¬1k,pÊ*íÆùsÞ4ea›§ÜLY%6eaÊjÔGœ²ÊÍ”UbSVñ*0çq.+7sY‰ÍeRXÆæ©7SVMYõ±ô#V«yêÍ”UcSV…P`›§ÞÌe56—IelXà”Uo¦¬›²j6õ#NYõfʪ±)«–XàtPoÎÂk Ýâa—§Þœ…ר"VoyêÍYx1tÌÁõæ±Æî±°ÊÓnî[ìK¦<íæ±A¨ç±ÊÓnî[еSZ»¹l±ÛA¬¥ò´›ÛÁVbè¸rn7·ƒ­†î¾°þÉÓnr]k¡»¯ÖL>bFl7±õØø`Fl7±Øø`Fl7±ÍØøL‹X³äé7y³Çò&V#yúMÞì±·Xgäé7y³ÇÞ^tÓÛ ¬3òô›óžC÷hXAäé7gá½ÄÐ1»ö›³ð^C·xXÜãé7gá½ÅÚŽy³ßÜ!ök;æÍ~s‡ØcwˆXQãé7wˆ=ö^ke<ãæq<¡žÇbϸ¹±ÛA,cñŒ›ÛÁ»ÄϸÉu#ÇÐ1×›\7Jèîk˜Nj±ôÄ3n2âˆÝbQ‰gÜdÄÑbè˜ÇMF=6>Ýä#æÍq“7G,ob!ˆgÜäÍ{{%žy“7gìíÅ4]Éa‰‡gÞœoÎØù¦TâÎXâá™7ǘ3vŒ9“ÉGÌÔóæsÆŽ1gÝa‰‡gÞœoÎØùæ4%z,ñðÌ›+¹»’›Õä#NóææmÆnÞf‹Î&óæJnÆ®ä¦i6Áϼ¹’›±+¹9L>âœ3onÞfìæm†^‘–x€çâJžÐ•<ÉG¬JôÀó —.€„=xÒ)æcŠÜòýàÉ7Îç˜óÙX•è)7>–˜ÅÔX•è©7>Ö˜5X•èi7η˜óÍX•èé7>ö˜ÝÔX•è7>Ž˜¡W$€#w_€¬@H7¹.=‘»¯¿æ1#¦›Œ˜ 4>È„t“SŠfÄt“SŽO6ùˆy3ÝäÍË›È0„t“7SæÍt“7S‹O3ùˆÙõ†‡n"Y‡7žÕéUC·ƒÝy ½<1ô³¢¼Š¡ñ1Qñ,Âñª±¼i„WÑs ý,ö®¢—Øø“gMwíh+Æ’4Ýù `ÐtW}ŒcJd8æãYÓ]õ1vŒéÖtgApÖtWoS¢7hº«>Θ2œEÓ]ó1F†ókº3çÏšîªó±+¹jšM šîª±+9΢é®ú»y«9gMwÕùØ•\5MYMwÕÇØ”%iºÓKƒ¦»êclÊrkº3çÏšîªó±¹¬vSœ5ÝUcS–¤éÎúñ¬é®ú›²ÜšîÔyƒ¦»æ|‹ÍeÍôŠÄ é®ú›²šé‰AÓ]õ16eµØ+ƒ¦»vÜBu›-jí*zìѠúYa]EÝ!´ÓUôØ¢A]EŸ¡ž7èkè1î EÉ\EÝ4ÊUôC?««è9t÷eÐWÑKèî«“gùpÕÇŸ³0¸ŠÞbãs–üVÑ{l|ºÉdz²·êc,o4»UôØÛ ƒ·†>bo/†éí…At[;‘uóéÌbÓVÑS ý,”­¢‡ê6[$°UôkûYÜZE¯±¶Ÿe«UôØ¢AZE½—0HM«è#Öógi=v;h‡ÖÐgìvÐ ü¬¢C ý,鬢§ÐÝ×4Ô”›Uc·ƒMf½ÄÐÏjË*zO5ùxUV}ŒåMƒ\²Š{{aBVÑco/L,9‹Þ±v´cÉ zÇl°è+>¦.Id8æãYïXõb>BäÆÈ¢w¬:ŸbÎ'“g½cÕÇó1›|<ë«>–˜%g½cÕùs¾š|<ë«>¶˜ÍäãYïXõ±Ç|ì± 8ë«Î˜óÃäãYïXõqÆ|œ†K‹Þ±æ#Ħ,·Þ1sþ¬w¬:›ËÀòŠÄ¢w¬ú›²$uBÖg½cÕÇØ”åÖ;fΟõŽUçcsSœõŽUcSTS?žõŽUcSD^‘TƒÞ1¼9øçï¸ù’~U ¿:Êë ÙrT/ÖAŠ ä(R¬ƒTÈQ‹Xi&£ä°ÒM Gead˜@ŽÂ:È´€œu‚UxL G9`L GÕ_ħ›³¡õ|utS*8Ëöê ¦TpVçÕAj¬º»:º)GœåuuSŽ8«èê #ÖG}Ü݇¾æe¡¹*·±ý¬«¢#þý¨«£C ý¨«£§úQWGÏ1ô£>®Ž^bèG}\½ÆÐú¸:z‹¡õquôC?êãêè#†~ÔÇÕÑc¹î¬«¢g-×îJª »ùxÔÇÕ}Œeij>®Žˈg}\=ÇÆÇ´°;ëãê>ÆòæYWGåͳ>®ŽÞbãcZ0žõq©‰ùø]‡µ‡ŽÊ·:úˆ¡5muô© ÆÇ´‹=Kת>–'ÔCgQZbèG¹Y=…Ƨ˜ÊΪ²º9ÖCG½X½ÄÐJ°:zédî,øªûØb=t”rÕѽٵQô£H«Ž>Nãêø “G-VÝÇŸ³ÊªŠ^ŸÐøœõSutO“G™TÝÇŸ£ªŽžcãs”6ÕÑKl|ŠÉÇ£‚©zWM‹Ä³P©b:U<ë‘ê ¦›‡³ì¨bZ³ÕEUfÚøžEDuÓÍÃY+T1-¡Î’ :ˆizVþÔAL gOÄ´¢9ëxê -tú~VèÔÑM©à,Ä©ƒ˜RÁYoS™¡~<+iªèÝ”#΂™:ˆ)Gœu1uØíäYñR=cé±[³â¥Ž;Ý:+^êè±Ó­³â¥Ž»8+^êè±[³â¥Ž»8+^êè±[³â¥Š>b7 gÅK=vÞV¼ÔÑcçýgÅK=–ëΊ—:z fÓì¬x©ûˈgÅK=–ÏŠ—:ziawV¼Ô}Œåͳ⥎Ë›gÅK}ÆnS§iÁxV¼TOGED½ÆÆ§š|< ê>¶Øø% uôŸ£X¡Ž>bãc¹M5hjgq`â<¤u0ud9 ê ÙrÔ ÔAŠ ä( ¨ƒTÈQýOi&£ÈŸÒM G-?d˜@Ž’}:ˆiEsVæSAÒ9}7hîéè¦Tp–ÖÓAL©à¬ §ƒäX?µñttSŽ8Kàé ¦qVºÓAZ¬vÚ ĸ ;}ÄÐv:zètË a§¢ç'†~Ô°ÓÑ!†~Ô°ÓÑS ý¨a§£çúQÃNG/1ô£†Ž^cèG ;½ÅÐv:z,×5ìtô9Í4ì6vº±ŒxÖ°SÑK,#ž5ìttO1-ìÎvº±¼yÖ°ÓÑcyó¬a§£—Øø˜Œg ;õÄ£„Îû êt:zì¬é¬;§£÷Èiö_sƒGy9ÝÇë¡£pœŽz¹o„SÑÕ—ûçñ©¦ƒ²³ò›î#Äzè¨é¦£§úQ­MGϱñ1ÌEÙtK¬‡Žrk:z fŸ…Ôtô:Í–hÌÇ£^šîcÏQ MG±ñ9jœéè36>ÓâãYÊLõ±ÅnSÏ"e:zì6õ,?¦£ÇnS›é6õ¬2¦žÅ™811ÄtªxÖ ÓAL7gi0Ä´f;+€é ¦ïYèK1Ý<œõ¼TƒÁ Û¥ƒ˜ö¡gu.ÄtÁpáÒAL+š³Ö–RB§ïg-Ý” ÎbY:ˆ)œ5±tëÇ£Ú•ŽnÊgQ+Ä”#ÎÚU*ȈÝNžU©Ô3–WÀ J¥£ÇN·ÎªT:zìtë¬J¥£ÇnΪT:zìVà¬J¥£ÇnΪT:zìVà¬J¥£Çn@ϪT:zì¼ÿ¬J¥¢ÏØyÿY•JG庳*•ŽžB§ÙÓ´;«Ré>Æ2âY•JGeij*•Ž^cãcZØU©tcyó¬J¥£ÇòæY•JGݦNÓ‚ñ¬J¥žxÌÐy¿AoJCO±—û%)"§ÙÍ >£tS¬‡ŽRP:zŽ¡EžtôŸbòñ¨å¤ûXc=tTiÒÑ[ ý¨¿¤£÷Øøt“G™%ÝÇë¡£€’Ž>#§Ùi$žÈiv’hÌÇ£’îcè6Õ m¤£§ØøU‹tôŸlòñ(N¤ûXbãs”ÒÑkl|Ž‚B:z‹á6µ9uƒ~æX}|Í™I졜ˆ¹KPhGÏ1t—ÒÐŽ^bè. ¢½ÆÐ]ÚD;z‹¡»D‹vôCw©íè#†î’9ÚÑgݧ´¡ sºÝ%Œ´£C Ý¥˜´£k¹î´ÞügnðÑ¥«´ûˈ>Á¥=–}JL;zO5ùèÒkÚ}ŒåMŸÓŽË›>…§}ÄÆg˜|tê@%æ£wÇDѽ:P ==1t§G‡ºSŠ£§ºSŠ£çºSŠ£—ºSŠ£×ºSŠ£·ºSŠ£÷ºSŠ£ºSŠ£ÇrWŠ¡çÈ[û&ê@1:PÜÇXFôê@qôXFôê@qôŸlòÑ©Å}ŒåM¯GåM¯Go±ñi&:Póñ3»Âcí!§G1t§GŸ ºa|¦ÅG¯óñ›Mjî!¯G‡ºSŠ£§ÐøÓnÞ«Å}̱rê@qôCwê@qôÓnÞ«Å}l±rê@qtov-˜;u 8ú8¨ã3L>:u ¸34>^(†^ŸÐøxu 8:„ÆGÒb>:u ¸)6>N(ŽžcããÔâè%6>Åä£Kj;±«±ÓJŸ@ÔŽ;­ô)Gíè±[Ÿ¤ÔŽ»åñiMmè-vËã¡ÚÑc·<>uª=v£í“­ÚÑc÷7>=«=vãºÚÑc7Ú>¬½…n'ši?íÓÉÚ}ŒeDŸ€ÖŽˈ>e­}ÆÆÇ´Ÿöéom>öXÞô síè±¼éSìÚÑc·ãÝ´Ÿöêz±3³»åñêzqôØi¥W׋£ÇN+½º^=vËãÕõâè±[¯®GÝòxu½8zì–Ç«ëÅÐGìFÛ«ëÅÑc÷7^]/Ž»¿ñêzqôX®óêzqôºt½˜N]/îc,#zu½8z,#zu½8zO7ùèÔõâ>Æò¦W׋£Çò¦W׋¡ÏØíø4ÝŽ{u½Ø ÖŒÝßxu½8zììЫëÅÑsèvbšnǽº^ÜÇØýW׋£×ºS׋£·Øø˜vó^]/îcìvÜ«ëÅÑc·ã^]/Ž»Ÿ–ݼ[׋ú(èzY{È­ëÅÑ!r;áÖõâè)r;!êz1º^Üǧ®G/±ñqêzqôŸjòÑ©ëÅ}l±ñqêzqô§®G±ñ±ÜŽ;u½ø‰ĸ¥´=ÇÆ'›|té©í>Æò¦OhmGåMŸÛŽÞbãÓL>:uÚó1tËãÖiãè#†îÔiãè¡ÓJ·NCÏO Ý©ÓÆÑ!†îÔiãè)†îÔiãè9†îÔiãè%†îÔiãè5†îÔiãè-†îÔiãè±\çÕiãè#r;!ê´1:mÜÇXFôê´1ôˈ^6Ž¡ñ‘tÚ˜N6îc,ozuÚ8z,ozuÚ8z‰O1ùèÔic'X%tãÖiãè±³C¯NGï‘Û Q§ùèÔiã>ŽX9uÚ8zˆYãÖicè*³æ<>Õ´›÷ê´q!ÖCN6ŽžbèN6ŽžcãcÚÍ{uÚ¸%ÖCN6Ž^C·^6ŽÞB·’NóÑ©ÓÆ}ì±ñqê´qô§NGŸ±ñ™½:mÌÇ»÷ê´qôØí¸W§£ÇnÇ›évܧӶØÅ¸É·=vËãÓ‚ÛÑc·<>‘¸=vËãSÛÐcü§¬ÜŽ»¿ñéÍíè±ûŸÝŽ»Ñö)Ôíè%t;ÑMûiŸŽÝîc,#úîvôXFô)ßíè=6>¦ý´Oo÷1–7}Ây;z,oúõ6ô»¦ý´Ww™Å¸c÷7^Ý=ŽËu^Ý=ŽžB·3™|têîqcÑ«»ÇÑcÑ«»ÇÑkl|ªÉG§î÷1–7½º{=–7½º{=v;>M·ã^Ý=v‚5C÷7nÝ=ŠžbÌ·îG‡È턨»Ç|têîqS¬‡œº{=Çк{½ÄƧ˜|têîqk¬‡œº{½Åк{½ÇƧ›|têîqG¬‡œº{}Fn'ܺ{ žÈ턨»Ç|têîqC·ãnÝ=ŽžbããÔÝãè96>Ùä£SwûXbããÔÝãè56>NÝ=ŽÞbãc¸ïݽç}XÀOì^ó²ÂRÎ áWïÄü¨»§£çúQwOG/1ô£îžŽ^cèGÝ=½Åк{:z¡u÷tôC?êîéè3„~ÖÝSÑqN¿D?êîéèàDŸ‰˜u÷tt-×Ö›]ÐÝÛ|<êîé>Æ2âYwOG/±ñ9êîéè56>ÕäãQwO÷1–7Ϻ{:zÏQwOG±ñ&º{ÔG`>~g×iŸ³îžŠžžúQwOG‡úQwOGO1ô£îžŽžè4êκ{:zq¡§_E?êîéè5ÖóGÝ=½Åzþ¨»§£÷XÏu÷tôC?êîéè3„~ÖÝSѳ–ë㤻Ç|<êîé>B¬‡Žº{:zŠ¡u÷tôŸlòñ¨»§ûË›gÝ=½ÆÐº{:z‹O3ùxÔÝ#>ŽÊ|üÌ®P¹ý¬»§£úQwOGŸ ºa|¦e|κ{ªåqõІ~ÔÝÓÑ!†~ÔÝÓÑSh|$Ý=æãQwO÷1Çz註§£—úQwOG¯±ñ©&º{º-ÖCGÝ=½;Ñ¢u÷tôqPÇg˜|<êîé>ÎÐøœu÷Tôú„Æç¬»§£Ch|$Ý=æãQwO÷1ÅÆç¨»§£çØøu÷tôŸbòñ¨»§žØÕØiåYwOGÝòœu÷tôØ-ÏYwOGÝòœu÷Tô»å9ëîéèC?êîéè±í³îžŽ»¿9ëîéè±í³îžŽ^C·gÝ=½…n'¾u÷6º{º±ŒxÖÝÓÑGl|Žº{:úŒÏ´øxÖÝS}ì±¼yÖÝÓÑc·ãgÝ==v;ÞM·ãgÝ=õ̬çÐMÇYwOG/1ô£îžŽ»å9ëîéè-†~ÔÝÓÑ{èŽé¬»§£Çnyκ{:zìFû¬»§¢'ÔógÝ==vsÖÝÓÑc÷7gÝ==Çк{:z ÝNHº{ÌÇ£îžîcìþ欻§£·úQwOGï±ñé&º{º±¼yÖÝÓÑc·ãgÝ=}Ænǧévü¬»§ž`Mݯu÷tôC?êîéè9t;1M·ãgÝ=ÝÇØýÍYwOG¯1ô£îžŽÞbãcº?ëîé>öXu÷tôC?êîéè±Ûñi¹7èîi>¾º{W=dÐÝÓÑ!r;aÐÝÓÑSävBÔÝc>u÷tsl|Žº{:z‰ÏQwOG¯±ñ©&º{º-6>GÝ=½ÇÆç¨»§£ØøXnÇ º{Ú‰ĸ<Ý=bèGÝ==Åк{:zŽ¡u÷tôC?êîéè5†~ÔÝÓÑ[ ý¨»§£÷úQwOG1ô£îžŽ>#·Ý===‘Û Awoóñ¨»§ûˈgÝ==ÅÆç¨»§£çØød“GÝ=ÝÇXÞ<ëîéè56>GÝ=½ÅƧ™|<êîigfzä¦Ã »§£úQwOGÝòt÷TôüÄк{::Dî˜ º{:zè–Ç »§£çXÏu÷tôëù£îžŽ^c=ÔÝÓÑ[ ý¨»§£÷úQwOG‘Û QwùxÔÝÓ} Ýßt÷TôòÄк{::„ÆGÒÝc>u÷tcy󬻧£çúQwOG/±ñ)&º{ê V©‘û5ƒîžŽÞbèGÝ=½Gn'DÝ=6>GÝ=ÝÇÐýAwOG1k º{*ºÊ¬9O}L>u÷t!ÖCGÝ==Åк{:zŽO6ùxÔÝÓ},±:êîéè5t;qÖÝÓÑ[èvBÒÝc>u÷t{l|Žº{:úˆÏQwOGŸ±ñ™Ϻ{ª-v;~ÖÝÓÑc·ãgÝ==v;ÞL·ãgÝ=õÄ.Æå1èîéè±[ž³îžŽ»å9ëîéè±[ž³îžŽ»å9ëîéè!Þ¢AwOEño º{:zìþ欻§£Çn´Ïº{:zÝNœu÷tôºøÖÝÛ|<êîé>Æ2âYwOGo±ñ9êîéè=6>ÝäãQwO÷1–7Ϻ{:zìvü¬»§¢Øíø0ÝŽŸu÷Ô3³ªNiÐÝÓÑS ý¨»§£Çnyκ{:z‰¡u÷tôºc:ëîéè±[ž³îžŽ»Ñ>ëîéè#ÖóGÝ==vsÖÝSÑgìþ欻§£C ý¨»§£§ÐíÄL&º{º±û›³îžŽ^bèGÝ=½ÆÆ§š|<êîé>ÆòæYwOGÝŽŸu÷tôØíø4ÝŽŸu÷Ô¬9#÷kÝ= =9™5úQwOG‡È턨»÷Pº{º¡ûƒîžŽžcèGÝ=½ÄƧ˜|<êîé>ÖXu÷tôC?êîéè=6>ÝäãQwO÷qÄz註§£ÏÈí„AwOE‡'r;!êî1º{º¡ÛqƒîžŽžbãsÔÝÓÑsl|²ÉÇ£îžîc‰ÏQwOG¯±ñ9êîéè-6>†ÛñaÐ݃·€àÏß?pó¤üz€üê(¯§ƒdÈQEO)&£XžRM GM<¤™@ŽÒw:H7îta9 Ùé ÓrÖ«SA¾'³ ä(K§ƒ€ ä¨>§ƒ$iqõcB?êÊéè¦Tp–ÓAL©à¬§ƒÔX?õßttSŽ8Ë¼é ¦qVsÓAF¬:m:º)yœåØTdJgÕ5Ä”<Îâj:ˆi¹pÖPÓAL9â,•¦ƒ˜rÄYM1-ÎÂg:ˆ)œõÍtS*8Ë˜é ¦åÂY­L1}ñgQ2äQ ©åÆttS*8«Šé ¦TpÓAr¬²`:º)GœÕ¿tSŽ8‹|é -ÖGù®ýgV†þß}Ë‹ßÿIÛð ý(ߥ£úQ¾KGŸ úésò]Üdz|—ê#’ ïzè,ߥ£C ý(ߥ£§ÐøS<Ëwé>æXå»tôC?Êwéè56>¦ìz–ïÒ}l±:Êwéè±ìz–ïÒÑÇi|@Ó’ï,ߥû8C=t–ïRÑk,»žå»ttO5-%Ïò]º)ÖCGù.=–]Ïò]:z‰i‰z–ïRWÕ´Ã<«té ¦æYŒK1¥›³æ–bZ³¥µTf:S:+hé ¦¯ÿ,”¥ƒ˜–Pg=,Ät¦t–½ÒALãYÝJ1­hÎ"V:Hl¿x–§ÒÑM©à¬B¥ƒ˜RÁYlJ™¡~<ËH©èÝ”#ÎjQ:ˆ)GœE¡tØ¥ÕYîIG7%³ª“bJgñ&Ä”<ÎM:ˆi¹p–bÒAL9⬸¤ƒ˜rÄYXI1-ÎúI*È0¥‚³L’bJg5$Ä´\8‹é ¦/þ¬m¤ƒ”PR;«éè¦Tp'ÒAL©à¬A¤ƒôX?Õ…ttSŽ8‹é ¦qÖ RAfìÒꬤn„gìø¬¤£ÇŽ Î*@:zrNS¶:«é>ÆŽÏ*@:z¡U€tôS<«é>ÆŽÏ*@:zì’í¬¤£Ç.Ù¦%»T€4_ «2¨éèC?ªéè)rÈ ¦GÊ ÝÇë¡£ Ž^bèG ½ÆÆ§š|<ªé>¶XU€tôC?ªéè#6>–%ªAH[=‚é…´AìGÈQÓG1¥›³t’M G…¤˜@ŽB<:ˆéë?ëíè Ír”ÕÑAº 䨞£ƒØ>Æ£HŽbZÑœµpTÚ/TnttS*8‹Ùè ¦TpÖ¬ÑAr¬j4:º)GœEgtSŽ8kËè -ÖGÕÝ”<Îâ0:ˆ)yœ5`tSò8K½¨ Ù´\8+ºè ¦qnÑAL9â¬Ï¢ƒ˜– gÄ” Îj+:ˆ)œEUtÓrᬢƒ˜¾ø³DŠ¢GÄOttS*8kœ¨ Å” ÎR&:„úñ,R¢£›rÄY‹D1刳äˆRbýxQ7Â%t lÑÑcGg1½G91‘ÍÇ£˜ˆîãˆõÐQLDG½ó5ˆ‰¨èê;ßóøTS<‹‰è>ÆŽÏb":zŠ¡ÅDtôSv=‹‰è>ÆŽÏb":z,»žÅDtô:ä4=R6ˆ‰è>ÆŽÏb":z,»žÅDtôÓRò,&¢úØb—lg1=–]Ïb":zì’Íô Û &¢®M/¤ š!:ˆi‡y–ÑAL鿬¢ƒ˜Ölg¡Ät¦tÖóÐAL_ÿY¶C1½w6¨sè ¦3¥³‡búÏZ:ˆiEs–ÔÐAbûųX†ŽnJgM Ä” ÎÒ:HõãQÔBG7刳v…bÊg‰ dÄ.­Îâ:º)yœ5&tSò8KIè ¦äqVŒÐALË…³0„bÊgýÄ”#Î2:ˆi¹pVsÐAL©à,Ú ƒ˜RÁY›A™¦åÂY‚A1}ñg¥$D2h(èè¦Tp–JÐAL©à¬ˆ ƒÔX?µttSŽ8Kè ¦qV.ÐAb—VgMu#ÖX5 tôC?jèè=6>ÝäãQ“@÷qÄzè¨I £Ç²ëY“@E‡'rÈ™L” šºë¡£&ŽË®gM=ÇÆ'›|–X5 tôXv=kèè-6>‡%êÿÄ?ì¿úíæÿü?þ$Ôçw[PÓãc ô¿þãÏoTsåà«ò+Ïà«ò+”¯à³=ùÊLðù–ü å ø¼H~…¢8|þ"¿BY>ƒ_¡| Ïôë¯^™ž‘ɯpPxN$¿Â¾ÿÈ]ÿ÷ÏÐ%mè^EPåÕeP^íÏÔà Ž(£8Z Œàh}0 ®à0‚2Œ ‡1)Øp“2Œ ‡1)ŸPÂÑJÊh%­¤ŒVÂÑJÊ'”pP’2( %)ƒ’pP’ò %ìû¤ô}ƾÿx }àŒƒ’•AÉ8(Y”ŒƒòñÎØà ŽVVF+ãhee´2ŽÖÇ^ƒ+8ŒYF¬î»&¿Âaüx{v änõuɯp‹2ŒXpö«^­Áߢ|tX³u+ùJ~…ÃXnR$>‡Üª¦’_á0eñéÞVásý>±Û*q’_aWåCÁç`[ÕHò«º+=9Ö"ø¦i+¼H~…]T•.Â×?[éCò+ìȪt$¾“ÙŠ’_a@7% ñÝÉVþü »»)ÝÝ0n›· ¥)é§aß·›ôÓpPš2( ¥)ƒÒpPÚMú鯟2Zý•ÂSF«¿’u7é§hÎ}€¼ªoÊ0öWMÆþª¨)ŸPµ$•Ñꯚ£2ZýU]T>¡ƒ2”A8(C”ƒ2”Oh`ߥïöýÇ•ëy€ÊP啳Ê ¼²ó×™Wp´†2Z¯¾ûPFëÕaŸ7+´WH}*Ãø žOe_Éñy³B{5çòm½ÚÞSÆW]{Þ¤ÈW{*Ý+c=•a|…¤çEŠ\ª«<ò׸TAy@ùža)GKÅåh`©Z¡lú—êʦޓ׃ÛãZÞ£SeŸïᥲχ÷’ò+ìHe;ïqœ²‡÷Ø ªò+ìne׎e (»väù—çO~…ƒ¢lΑi_¾˜öçèÆ];(»väºPvíHV/_duƒ+8ZÊvéâ”í<ò½ËßÛà £²ÏGÆueŸ”éÊ>9Ïeã<“_áh)ÛydP¶óH.m˜ü EÙµ#q·€²kGæmÙ˜·äWØ÷Êæ^é|qð¯vNVåU¯Q6çðªÌ|ÐGÏ®¼21E­W¨EÙœÃ+¨RÊ+8ŒEÆ—«¨lÎNaé7®àøåÛziyÊÞ~¡ÏÕ›ù2Ûªòѽ 4åh`aŠÕ›ù’¸ªò5¾d«ª ãK8RŽbr4°c”MÿBbQ6ý€Ûyø(Ç^‹à>”}>ò@ (û|$r”ÈA~…©lç‘JQ i‰Ý”€Æ];(»vd#PvíH'(€ü EÙœãƒþòõ ÿݸke׎Oê (»v|_¾ÞÄ\ÁÑR¶óø*½€²ÇgååëYùÙ•ñqçÿòÞÍ+Ã8Þ;teÇ{‹­|Bã½mVFk¼·ÂÊh÷mŒò ÷uŠ2(ã}E¢ îÚ·¾äWØ÷ÊæÞ ¿óâà Þ½S”·H®²9‡·˜í¬7®àhMe´Þz°ÊæÞº­óf…ö>µœò0¾O"“²9Ÿ.~½|<ºò¾*Lʵÿûú/){û÷•Þ×#?ƒ+Í«ÒðWMùUÇ_õWšd⯔aÄ£¤ ¼ï’r4ð¾ÁIʦÿ}+“äMнùgþ÷µJ%?ZÞÝüý•øªäG0ÏÄ\|n"™Wb.¾C±¡‹T$óBÌÅ—+’y#æâ“›óâ[›óâ#“óòëÓÀÉÏf$óAÌ#ïiþ™@"¿_ÝØš(>DZ51òN矹¡‰âk[Åg>¶&FÞÿü374Q|%dj¢ü|H2ïÄ\|W$™Ob.>8²¡‹/‘lèâ¥KÏËo—l΋šl΋¯l΋Ϡlæâû(Éœ$çÐéæŸ $´åçU¦&Êï®lMŒ<Èúgnh¢ølËÖDñ=—­‰‘‡^ÿÌ MŸƒ}ûøÛž˜‹ïÄl=y@–^wµ‰ò33“òû3Éœ¬³BÓÒ«„®7Q|¾fk¢ø®ÍÖÄȃ·ôЉëMŸÅý˜ÌÅ÷r’9YkÈéLèò ;ºüôΆ.¾É³¡Gëý3?oå'}¦ÝŒüÖÏ´L“ÚÐÅצ½”ülд—’ßšœ—Úœ_ ÚœŸ&šN~³hÚB„3þ3?gWùÉ£­‰â[H[#$ÿ™Ÿ›(?¥45Q~cijbèñå?sCÅ'š¶&Šo7M»ùQ§i7#¿ö´¡‹Ï@mèâûPÓêD~8jr^~Qjr^~jjr^~ƒj3§š¶¡W«ÿÌÏË ùm«­‰â£W[#¯aÿ™š(¾™µ5Q|Lkjbè•í?óså·¸¦ üH×ÔC¡×»é•êÔ›(¾ñµù(>þ5í’B¯‚Ó«v©7Q|;lk¢ø¨ØÖÄÈkãô FjMTÞ$ÿ˜ÌÅÇÊ–ÍòŠÙ†.>o¶¡‹ïžmèâƒhzä¥ô?óãFPyOmÙÍ(­-Ë4å¶ ]|šmÙK)o¶-{)å1·Íyñ•·Íyñù·Íyñ]¸màÄã–-Dì%ù?ócvUÞ››š(?D·51òBýŸ¹¡‰â;v[Åî¶&F^¾ÿ374Q|ok¢øpÞ²›Q^Ô[v3ÊS{ºü߆.>η¬N”Wû6çÅçü6çÅwþ6çE€Í\dX¶1ÊÀ?óóòB&˜š(3LM Qþ™Ÿ›(lM™ ¶&F(ÿÌ M‰– Â°õP„:‘^9&½‰"ÁÂæ£È¼°ì’b”Œô*©M”‰¦&ÊŒ[#TôŠéM !¦ÍÌ1m†d ‰ ]ä–˜ÐeÒ‰ ]f£ØÐ#4•æç Lf1ífd–‹i™&Ó_lè"/Æ´—’ 3¦½”̤19/SlLÎËÜ“ó2)Ç4p2[Ç´…Ñxþ™Ÿ³«Lö±5QdÙš¡ý374Q$Ùš(²‹LM ÑŽþ™Ÿ›(““LM”YK¦ÝŒLg2ífdž“ ]$@ÙÐEf”iu"S¦l΋\*›ó"ÉÊä¼Ì¾²™‹´,Ó"Ä×úg~^^Ȭ.[Eº—­‰Ø?sCE¶˜­‰"ÌÖĿ쟹¡‰" ͲTèi–ŠñÖRz,Ûy…ÝfóQ¤½YvI1>\z«ÖëMYs¶&Št:[#<»ô~×›(²ñ~Læ"MϲRø{&t™ØgC6t‘ h@Ï~ú^bî¥ï jî¥ï1t/}¡{é{#s/}9ï¥ï1ç½ô=ê¼›¾GÑÝô½IÑ#ô½,Ò÷f!¿òÒ÷X½ô=ÖÄ}/‹ô=ÖD/}5ÑKßcMŒÐ÷²HßcMôÒ÷z]ÍÝô½Aͽô½Ùˆ¹—¾Çнô=†î£ï9ÆÉ~úsÞKßcÎûè{›ó>úÞfî£ïÙŸæ}/ ô½ ÄGßãMtÒ÷6ô}/ ô½ ÄGßÛšè£ïmèú^è{ˆ“¾¿H ÷Ò÷¸y„¾—úüJÄKßûmOÌ}ô½ =BßË}oqÒ÷x}ô½ =BßË}oñÑ÷6s}~eÚCçEXk€ÚÄ!€dò+G7ÑÉäMÄ ß§ÂE+Xšè$"nMô·&bœ×rÓÄbj¢—ˆH÷en""]S»‰ˆ ÝKD¤èn""ݺ‰ˆÔy7‘9ï%"2ç½DD†î%"ÒÍPˆˆ˜E""Ý ¹‰ˆ¬‰^""kb„ˆ˜E""m¢›ˆH›è&"Ò&†ˆˆY$"²&z‰ˆtKë&"Ò}™›ˆH÷en""C÷ºˆÈ7n""uÞMD¤Î;‰ˆÜy'q3÷ù>%DDÌqñ·&úˆˆz„ˆ˜"ââ#"nMô9zˆˆ˜"ââ$"²=©—ˆÈÍ#DÄ,ù:ØKDdû='qC³@DÜ@œDDÞDqC³@Dd ^"âfî#"²Í¼rïOòo†þ7C^¶ãÖDÛqk">äxêM«©‰>JåÖD¥rk">äxÆM-~J%Ù—ù)•ƒš{)• ÝK©dè^J%Ùú)•Ìy/¥’9ï¥T2ç½”J†î¥T’ÍPŒR™EJ%Ù ù)•´‰nJ%kb„R™EJ%k¢—RÉšè¥T²&F(•Y¤T²&z)•dKë§Tjî¥T’}™ŸRIÑÝ”J†î£T² ŸRÉœ÷R*™ó>Jåæ¼R¹™û(•lŸ£TfR¹ø(•¼‰NJ%GQ*³@©Ü@|”Ê­‰>J冡TfR¹8)•tOê¦Tró¥2 ”J¾öR*é~ÏK©äè!Je(•ˆ“RÉšè¤TnèJe(•ˆR¹™û(•|3„WoPÛÅf¨6ËfÈÉÛÜšèãmnMÄ8¯ó¦‰ÓÒD'9”7ÑIåMÄkr(wÞIÝÌ}äP¾O ‘C³@Ý@|äЭ‰>rè†!‡fºøÈ¡[}äÐ =BÍ9tq’CéžÔMåærhÈ¡lì&‡Òýž—º¡GÈ¡Y ‡n Nr(o¢º¡GÈ¡Y ‡n >rèfî#‡²ÍP«·3ô×è¸ò2Py Ô­‰çoš˜MMôÑ\·&úh®[1ΡÝ4Ñp0Q¼\ÚßMìÄÜÇ¥ÝÌ}\ÚÍÜÇ¥…_%s—v3÷qi7ç}\Ú ÝÇ¥åæN.ífîãÒþ6'mqi‹À¥Ý@|\Ú­‰>.í†áÒK»ø¸´[}\Ú =Â¥-—vñqiùWæäÒnæ>.-ï`'—vC÷qi7t/—¶Rs—vsÞǥݜ÷ri™ó^.-3÷ri©yˆK[D.-ñri™¹—KËÌ#\Ú"riˆ—KË̽\ZfáÒ‘KË@|\Zþ™8¹´›y„K[D.-m¢“K»™{¹´Ì<Â¥-"—–ø¸´›¹—KËÌ#\Ú"riˆ—KË̽\ÚFÍ#\Ú"riˆ—KK›èæÒRô—¶ˆ\ZâåÒ²&z¹´ =Â¥-"—–ø¸´|ÝâäÒnæ>.ífîãÒò|îäÒnæ>.-wÞÉ¥ÝÐ}\ÚÍÜÇ¥ÝÌ}\Z¾O qi‹À¥Ý@|\Ú­‰>.í†áÒKËAœ\ZÞD'—vCpi‹À¥Ý@|\Zþ•9¹´›¹K»u°K»¡û¸´º—KK§/'—–;ïäÒrçÝ\Zê¼›KË̽\ZfáÒ‘KË@¼\ZfîåÒ2󗶈\ZâåÒ2s/—–š‡¸´EäÒ2—–&N.ífáÒ‘KËšèãÒnæ^.-3pi‹È¥e >.ífîåÒ2󗶈\ZâçÒ2s/—¶Q󗶈\ZâåÒ²&z¹´ =Â¥-"—–x¹´¬‰^.-Cpi‹È¥¥ N.-[·x¹´›¹K»™û¸´,Ÿ{¹´›¹K»9ïãÒnè>.ífîãÒnæ>.-ۧĸ´EàÒn >.-o¢“K»¡G¸´EàÒn >.íÖD—vCpi‹À¥Ý@|\Zþ•9¹´›¹KË;ØÉ¥åèN.í†îåÒÒéËɥݜ÷qi7ç½\Zæ¼—KË̽\ZfáÒ‘KË@¼\ZjîæÒ2󗶈\ZâåÒ2s/—–™G¸´EäÒ2—–&N.ífáÒ‘KËšèãÒnæ^.-5qi‹È¥e >.ífîåÒ2󗶈\ZâåÒ2s/—–îSB\Ú"riˆ—KËšèåÒ2ô—¶ˆ\Z âæÒÒ&º¹´ =Â¥-"—–ø¸´|ÝâäÒnæ>.ífîãÒò|îäÒnæ>.-wÞÉ¥åèN.ífîãÒnæ>.-ß§„¸´EàÒn >.íÖD—vCpi‹À¥Ý@|\Ú­‰>.-Gqi‹À¥Ý@|\Zþ•9¹´›¹KË;ØÉ¥ÝÐ}\Ú ÝË¥¥Ó—“K»9ïãÒnÎ{¹´Ôy7—–™{¹´Ì<Â¥-"—–x¹´ÌÜË¥eæ.m¹´ ÄË¥eæ^.-3pi‹È¥e >.-ûL¼\ÚÍ<Â¥-"—¶R—v3÷ri™y„K[D.-ñqi7s/—–™G¸´EäÒ2/—–™{¹´dŸãÒ‘KË@¼\ZÚD7—–¡G¸´EäÒ2/—–5ÑË¥eè.m¹´+HõriÓ¯ ÄÜÇ¥ÝÌ}\ÚÍÜÇ¥ÝÌ}\ÚÍÜÇ¥ÝÌ}\ÚÍÜÇ¥åæN.ífîãÒnæ.m¸´ˆK»™û¸´›y„K[.íâãÒnæ>.ífáÒVK»ø¸´ÜÜÉ¥ÝÌ}\ÚÍÜÇ¥ÝÌ}\ÚÍÜÇ¥ÝÌ}\ÚÍÜÇ¥ÝÌ}\ÚÍÜÇ¥ÝÌ}\ZnâÒVK»ø¸´›¹K»™G¸´UàÒn >.ífîãÒnæ.m¸´ˆK»™û¸´›y„K[.-qri7s—v3pi«À¥Ý@|\ÚÍÜÇ¥ÝÌ#\Ú*pi7—v3÷qi)¦Zc\Ú*pi7—–7ÑÉ¥åè!.m¸´ˆK»5ÑÇ¥ÝÐ#\Ú*pi7—vk¢K»™û¸´›¹KËÍ\ÚÍÜÇ¥ÝÌ}\ÚÍÜÇ¥ÝÌ}\ÚÍÜÇ¥ÝÌ#\Ú*pi7—v3÷qi7ó—¶ \ZâäÒnæ>.ífáÒVK»ø¸´›¹K»™û¸´›¹K»™û¸´›¹K»™û¸´ÜÜÉ¥ÝÌ}\ÚÍÜÇ¥ÝÌ}\ÚÍ<Â¥­—vñqi7s—v3pi«À¥Ý@|\ÚÍÜÇ¥åæ!.m¸´ˆK»™û¸´›y„K[.íâãÒnæ>.ífáÒVK»ø¸´›¹K»™G¸´UàÒ2/—v3÷qiÙ>%Æ¥­—vñqi·&ú¸´z„K[.íâãÒnMôqi7ô—¶ \ZâäÒò&:¹´›¹K»™û¸´›¹K»™û¸´›¹K»™û¸´›¹K»™û¸´Ü<Ä¥­—vñqi7s—v3pi«À¥Ý@|\ÚÍÜÇ¥ÝÌ#\Ú*pi7—v3÷qi7s—–›;¹´›¹K»™û¸´›¹K»™û¸´›¹K»™û¸´›¹K»™G¸´UàÒn >.-7wri7ó—¶ \Ú ÄÇ¥ÝÌ}\ÚÍ<Â¥­—vñqi7s—v3pi«À¥Ý@|\ÚÍÜÇ¥åæ!.m¸´ˆK»™û¸´›y„K[.íâãÒnæ>.-ß§„¸´UàÒn >.íÖD—vCpi«À¥å N.-o¢“K»¡G¸´UàÒn >.íÖD—v3÷qi7s—v3÷qi7s—–›;¹´›¹K»™û¸´›¹K»™G¸´UàÒn >.ífîãÒnæ.m¸´ˆK»™û¸´Ü<Ä¥­—vñqi7s—v3÷qi7s—v3÷qi7s—v3÷qi7s—v3÷qi¹¹“K»™û¸´›y„K[.íâãÒnæ>.ífáÒVK»ø¸´›¹K»™G¸´UàÒn >.-3÷ri7ó—¶ \Ú ÄÇ¥ÝÌ}\ÚÍ<Â¥­—vñqi7s—v3pi«À¥Ý@|\ÚÍÜÇ¥eû”—¶ \Ú ÄÇ¥åMtri7ô—¶ \Ú ÄǥݚèãÒnè.m¸´¤ù¹´«vnósi™¹—KË̽\ZfîåÒ2s/—–™{¹´ÌÜË¥¥æn.-3÷ri™y„KÛD.-ñri™¹—KËÌ#\Ú&riˆ—KË̽\ZfáÒ6‘KË@¼\ZjîæÒ2s/—–™{¹´ÌÜË¥eæ^.-3÷ri™¹—KË̽\ZfîåÒ2s/—–š‡¸´MäÒ2/—–™{¹´Ì<Â¥m"—–x¹´ÌÜË¥eæ.m¹´ ÄË¥eæ^.-3pi›È¥¥ n.-3÷ri™y„KÛD.-ñri™¹—KËÌ#\Ú&riˆ—KË̽\ÚÒˆy„KÛD.-ñriiÝ\ZŠâÒ6‘KË@¼\ZÖD/—–¡G¸´MäÒ2/—–5ÑË¥eæ^.-3÷ri©¹›KË̽\ZfîåÒ2s/—–™{¹´ÌÜË¥eæ.m¹´ ÄË¥eæ^.-3pi›È¥¥ n.-3÷ri™y„KÛD.-ñri™¹—KË̽\ZfîåÒ2s/—–™{¹´ÌÜË¥¥æn.-3÷ri™¹—KË̽\ZfáÒ6‘KË@¼\ZfîåÒ2󗶉\ZâåÒ2s/—–š‡¸´MäÒ2/—–™{¹´Ì<Â¥m"—–x¹´ÌÜË¥eæ.m¹´ ÄË¥eæ^.-3pi›È¥% ~.-3÷riÉ>%Æ¥m"—–x¹´¬‰^.-Cpi›È¥e ^.-k¢—KËÐ#\Ú&ri)ˆ›KK›èæÒ2s/—–™{¹´ÌÜË¥eæ^.-3÷ri™¹—KË̽\ZfîåÒR󗶉\ZâåÒ2s/—–™G¸´MäÒ2/—–™{¹´Ì<Â¥m"—–x¹´ÌÜË¥eæ^.-5wsi™¹—KË̽\ZfîåÒ2s/—–™{¹´ÌÜË¥eæ^.-3pi›È¥e ^.-5wsi™y„KÛD.-ñri™¹—KËÌ#\Ú&riˆ—KË̽\ZfáÒ6‘KË@¼\ZfîåÒR󗶉\ZâåÒ2s/—–™G¸´MäÒ2/—–™{¹´tŸâÒ6‘KË@¼\ZÖD/—–¡G¸´MäÒR7—–6ÑÍ¥eè.m¹´ ÄË¥eMôri™¹—KË̽\ZfîåÒ2s/—–𻹴ÌÜË¥eæ^.-3÷ri™y„KÛD.-ñri™¹—KËÌ#\Ú&riˆ—KË̽\ZjâÒ6‘KË@¼\ZfîåÒ2s/—–™{¹´ÌÜË¥eæ^.-3÷ri™¹—KË̽\ZjîæÒ2s/—–™G¸´MäÒ2/—–™{¹´Ì<Â¥m"—–x¹´ÌÜË¥eæ.m¹´ ÄË¥%æ~.-3pi›È¥e ^.-3÷ri™y„KÛD.-ñri™¹—KËÌ#\Ú&riˆ—KË̽\Z²O‰qi›È¥e ^.-m¢›KËÐ#\Ú&riˆ—KËšèåÒ2ô—¶‰\Ú¤{¹´ð«wbîãÒnæ>.ífîãÒnæ>.ífîãÒnæ>.ífîãÒrs'—v3÷qiá×LÄ<Â¥í—vñqi·&ú¸´z„KÛ.íâãÒnMôqi7ô—¶ \Ú ÄÇ¥åMtri7s—v3÷qi7s—–w›KûPs—vsÞǥݜ÷ri™ó^.-3÷ri©yˆKÛE.-ñri™¹—KËÌ#\Ú.riˆ—KË̽\ZfáÒv‘KË@|\Zþ™8¹´›y„KÛE.-m¢›KË̽\ZfáÒv‘KË@¼\ZfîåÒ2ó—¶‹\ZâåÒ2s/—¨y„KÛE.-ñriiÝ\ZŠâÒv‘KË@¼\ZÖD/—–¡G¸´]äÒ2—–¯[œ\ÚÍÜÇ¥ÝÌ}\ZnîäÒnæ>.ífîãÒnæ>.ífîãÒnæ>.-ŸIC\Ú.pi7—vk¢K»¡G¸´]àÒr'—–7ÑÉ¥ÝÐ#\Ú.pi7—vk¢K»™û¸´›¹K»™û¸´[×y¹´túrri¹óN.-wÞÍ¥¥Î»¹´ÌÜË¥eæ.m¹´ ÄË¥eæ^.-3pi»È¥e ^.-3÷ri©yˆKÛE.-ñqiùgâäÒnæ.m¹´¬‰^.-3÷ri™y„KÛE.-ñri™¹—KËÌ#\Ú.ri ˆŸKË̽\Z æ.m¹´ ÄË¥eMôriz„KÛE.-ñriY½\Z†áÒv‘KKAœ\Z¶nñri7s—v3÷qi7s—v3÷qi7s—v3÷qi7s—v3÷qiÙLãÒvK»ø¸´¼‰N.í†áÒvK»ø¸´[}\Ú =Â¥í—vñqi·&ú¸´›¹KËÍ\ÚÍÜÇ¥å]çæÒÒéËɥݜ÷qi7ç½\Zæ¼—KË̽\ZfáÒv‘KË@¼\ZjîæÒ2ó—¶‹\ZâåÒ2s/—–™G¸´]äÒ2—–&N.ífáÒv‘KËšèåÒ2s/—–š‡¸´]äÒ2/—–™{¹´Ì<Â¥í"—–x¹´ÌÜË¥¥û”—¶‹\ZâåÒ²&z¹´ =Â¥í"—–‚¸¹´´‰n.-Cpi»È¥e >.-_·8¹´›¹K»™û¸´›¹K»™û¸´ÜÜÉ¥ÝÌ}\ÚÍÜÇ¥ÝÌ}\Z>“†¸´]àÒn >.íÖD—vCpi»À¥Ý@|\Ú­‰>.-Gqi»À¥Ý@|\ZÞD'—v3÷qi7s—v3÷qi·®óriéôåäÒnÎû¸´›ó^.-uÞÍ¥eæ^.-3pi»È¥e ^.-3÷ri™y„KÛE.-ñri™¹—KËÌ#\Ú.riˆKË>/—v3pi»È¥}(ˆ—KË̽\ZfáÒv‘KË@¼\ZfîåÒ2ó—¶‹\ZâåÒ2s/—–ìSb\Ú.riˆ—KK›èæÒ2ô—¶‹\ZâåÒ²&z¹´ =Â¥í"—v^.mùõ1÷qi7s—v3÷qi7s—v3÷qi7s—v3÷qi¹¹“K»™û¸´›y„K;.íâãÒnæ>.ífáÒK»ø¸´›¹K»™G¸´CàÒn >.-7wri7s—v3÷qi7s—v3÷qi7s—v3÷qi7s—v3÷qi7s—–›‡¸´CàÒn >.ífîãÒnæ.í¸´ˆK»™û¸´›y„K;.íâãÒnæ>.ífáÒKËAœ\ÚÍÜÇ¥ÝÌ#\Ú!pi7—v3÷qi7ó—v\Ú ÄÇ¥ÝÌ}\ÚÍ<Â¥—vñqi¹¹“K»™G¸´CàÒn >.ífîãÒnæ.í¸´ˆK»™û¸´›¹K»™û¸´ÜÜÉ¥ÝÌ}\ÚÍÜÇ¥ÝÌ}\ÚÍÜÇ¥ÝÌ}\ÚÍ<Â¥—vñqi7s—v3pi‡À¥å N.ífîãÒnæ.í¸´ˆK»™û¸´›¹K»™û¸´›¹K»™û¸´›¹KËÍ\ÚÍÜÇ¥ÝÌ}\ÚÍÜÇ¥ÝÌ#\Ú!pi7—v3÷qi7ó—v\Ú ÄÇ¥ÝÌ}\ZnâÒK»ø¸´›¹K»™G¸´CàÒn >.ífîãÒnæ.í¸´ˆK»™û¸´›y„K;.-ñri7s—v3pi‡À¥Ý@|\ÚÍÜÇ¥ÝÌ#\Ú!pi7—v3÷qi7ó—v\ZâäÒnæ>.ífîãÒnæ>.ífîãÒnæ>.ífîãÒnæ>.ífîãÒnæ>.-7qi‡À¥Ý@|\ÚÍÜÇ¥ÝÌ#\Ú!pi7—v3÷qi7ó—v\Ú ÄÇ¥ÝÌ}\ÚÍÜÇ¥åæN.ífîãÒnæ>.ífîãÒnæ>.ífîãÒnæ>.ífîãÒnæ.í¸´ˆKËÍ\ÚÍ<Â¥—vñqi7s—v3pi‡À¥Ý@|\ÚÍÜÇ¥ÝÌ#\Ú!pi7—v3÷qi¹yˆK;.íâãÒnæ>.ífáÒK»ø¸´›¹K»™G¸´CàÒn >.ífîãÒnæ.í¸´ÄÉ¥ÝÌ}\ÚÍ<Â¥—vñqi7s—v3÷qi7s—v3÷qi7s—–›;¹´›¹K»™û¸´›¹K»™G¸´CàÒn >.ífîãÒnæ.í¸´ˆK»™û¸´Ü<Ä¥—vñqi7s—v3÷qi7s—v3÷qi7s—v3÷qi7s—v3÷qi¹¹“K»™û¸´›y„K;.íâãÒnæ>.ífáÒK»ø¸´›¹K»™G¸´CàÒn >.-3÷ri7ó—v\Ú ÄÇ¥ÝÌ}\ÚÍ<Â¥—vñqi7s—v3pi‡À¥Ý@|\ÚÍÜÇ¥åæ!.í¸´ˆK»™û¸´›y„K;.íâãÒnæ>.ífáÒKû‚üOüÃþ«ß8}üÿüÿûÃ_ÿóÿþÿÆïÿñ_ÿ÷þïÿüí*õè¼X¿©_Oý6ö«÷Óbþ^&üýUÂ?”Jÿðmþ!þýÕë|%æ  ·)˜÷lqþ]yQçá±8Ϥ>âÞ 4Íü½ûû«‰(ôðmÞèÀå÷™Ä·ùLß]·LB ú’äýýÇ“Øçñ+mmÿ¿û¯~ÿì¿ÿÀ¦_…›ÿÉäo þß?@û@Ï ä×ßë´ßÿnáæ¥|˜o¿‚üß`ÿnjÎóòëo e–}à¾&Ê¿]÷‘3þÖ úýÿ×ÿøÏÿñÿüüÿàC#!¥œDyLP-1.10.4/Data/Netlib/scagr7.mps.gz0000644000175200017520000000507510430174061015472 0ustar coincoin‹¤K®9scagr7.mps¥œ]’Ü6 „ß]å;èšøÏGçÿ!±«œ¤rÿ›dv ÑÑPÍ쓵3½h‚"ôI"üõË?/ÏŸ?üòë÷úùÓ÷oÿüùùÓòuY~ùöÃvÿ‘ûÑý{÷ߟE8Jp”ïG¿? |Vá³v?úõyÔõ7eƒ#ð"àEÀ‹€Ép^¤ÂQƒ£®}† ŽŽÀKˆðx —PôØx à%@^"ä%B^"x‰à%‚—y‰—^bƒ¿yI—^R€Ï`ŽR‚ϲÎD/ ¼$ÈK‚¼dÈK/¼dð’!/ò’ÁK†s7C^2䥀—çK9*0G%éLðRÀK¼ÈK¼TðRÁK/òR!/¼ÔòR!/¼48_ÌQƒ9jQg¢—^ä¥A^䥗^:xé—yéà¥Ãšî—yéà¥ëóE6=G² |T&ê®@Ý•-ÃQ£ G ŽÀ Ô]º+Pwê®H‚¿’á¨Àx‘Ÿé9¨»ò¨»ÏL@Ý•^ îJ€¼È Ô] àå£îþøí÷¿ÿøúq‘¼ÿÜ—Åq¹—Ô5æÛ2®œ‹ú‘ÈÃLžÓ­_–ï—`üÖgõûõ–ærÁoeøVô=â10xÅc¼ä1ùÓÀ<æ™<Ä[^¦ ^ÏòóHî_ªË}‡5ÀFtÁ¿‹*¾ùDÌß<;Ë{æëÌ|»Õ0ÌW½N¢ßn¾ÕfA:É#å;¾Zg0óØgÑË­¦Ëò‰è’à÷0öo½]‹þ!÷¢g"Ÿ–ÇE²±øòiy á–¯EÖGôFä³¢²æm»Í—õz–ï÷PÞÚ2€>è ŸÖ$iVQ9FÏ~tR“†œzœ”ž5äv‹óÚqôXÞËЬv¬¥5?Dµ£à•eÈ«}Ére~í·Œßê\ŽCÌeÈ/™‰Ìâ´ð-KT"×5iãž×X?‘\dZø–[ìóʵžåû=¶\ÓÃ6žê¼v¬gù~OoE$ºÏ…RˆÜçBO¾?È0̇h3×Çh/€às¡+K`×_ñ/yô¹zô¹¼žå“ú¦Ñ*4ý´Ê­b´Ñ*ø\™?š/¾ùNÌ—÷Ìû\È•?ÔyB6 >Â)xàÂ0Ê£ugC=ú\èÉ÷Ç…WÊ㠣υ,zÜüè¤0zòý}a>Ɔ<{e$#)»i_{Åc¼äÑFêÑFHðz–O Ÿf®TyôÓ*CæÊÁf®äc$W–T|ó„v‡ü5ó>0&r§œê¼@!4%S°1µñÔ:ƒ™G=ùþVõJy<cö‘EÏ›”Çìcbriôh qD'Õ5ûÀ˜HUÈi¼<6p¨t‡²Œ4zö£“e­äÌ£Œ‰”ž\ÞËŒ‰àj®S´æJö%GɳŒjT'`rœ5½8vÆ!¯›a¾²•ác&¬ÛØAa,¬BîF²Œ™àjîcdž½\->0f‚«e;D¬èW‹Œ™Ôãâ£'ß·ÅX'6Œ y{e3)»e_}Åc¼äÑFêÑFHðz–O Ÿf®RxôÓ*Cæªb3Wñ1“+K)¾yB»Jþ’y ¹S.u^ šŠŒEl`,ml³Î`æÑFO¾o>»RÀX}`dÑëæG'å±úÀX˜ÜF=ZCÑIu­>0Rj{ì jÍÆ¡ê#žýèdY+9óèc!¥§–÷2äc!¸Zë­€¹ÈK-%O0ªQ€qÈqÔôâØ•¼æ;[>0ÂÚµ¦ÆÂjän¤úÀX ®Ö>6¶ZÑ ®6+ÁÕ¶´FôNpµùÀXI=n>0zò}÷°•ºÍ†±!2šŒ•”Ý6ˆ¯¼â1^òè#õèc%ÛÚ¼8kæj™G?­2d®¾ÙÌÕ|`¬äÊÒŠožÐ®’¿dÞÆFî”[(„¦æcÛl`lmì§·Î`æÑFO¾ïÑ¿RÀØ}`dÑûæFgå±ûÀؘÜF=ZCÑIuí>06Rz­s½ƒòˆCÝF=ûÑɲ~ʹG)=½¼—!ÁÕ^§hÌE^j)y4€QêŒOùaÆôÆŽÀ¨ämn^Øîøîc#¬ÝÛèÇ™/,aûŸ»Œàjï£ÿÇŠnãªl>0vWò½ßÈŠÞIt{ r=ùÞde•ónÂØãqeÈ…Þ–‰ÇA|ùñ’G©G{"çм8‹^ü‰G?­2`.û¹äBoKÏÄ|ñÍgb¾¼gÞF!Í]²Õyh’ ½-½›À(ÏÞ–G±˜—æÑFW¾·2^)Œâ÷¶ÐèÏÞ”Ç ½-É]`äÑ£5Ä!'ÕÕïmÒ4&ÏÞ‘fàÞAyÀ!ñ{[xôìG'ËzÈ©G±v=–÷2ä#ÂØ1z¢0—ýRKËÃõ¨ŽÀ¨ä8 jzqìŒZ^ ó­ ± ®gùÞ¶l,,²9Xü¦—å{›´ÝÆUñ›^¨q–ïmÙVt‚«~Ó‹VRñ›^\ùÞ‹n˜Çf ¼Z9nŸÆ•á7½à’9zŒ£Cþñ’ÇäOó裦1 ó⬙‹líWrµÊ¹B³™ËozÒs&¡øæ íùkæ}` ‰^ç ¡ÉozÁSðŒa”Çn•æÑFO¾ÿWÊãý¦ýÙôB¢“òè7½ˆ0¹Œ4z´†8䤺úM/¸¬ ËïZárÆYÖ~G’ÊD>áŽã·|îÙüæ‡i¹ß½ ç¶ ï¿ýÿŸ™ÜÿñÿïÏÿéˆÜÓ¼Ìþ ùžÌ¸õp룥ùɬ!—r+Õq–®Ÿa+r’rÿÀ«IjЭÆÅ°æ½4åãâ¶ÞÍ˸V޵´dDWÔ¸JÖ=a›:ïMój †-e#ó÷lÊ&x™tº=rjÈ &x™uùÙæU×@æUCÎcTs¹jœy q9m—§§Ú›§Ú›MN½/Ì«­©dâÔRœ8µ»“LÜsƒ×qâÔ"2qj7NœÞ2qj?NÜó-$8õÊ 'N½ò"§_÷yõÄŸLœz2§šÛ7ž›&N?—±'N?¤‰ƒgR¦y} §oí‰Ó·y0qîØÄi’€‰Ó$aOPÔCüùëO_þúòùÓ¿Z¢Ø¢RDyLP-1.10.4/Data/Netlib/scfxm3.mps.gz0000644000175200017520000011167710430174061015515 0ustar coincoin‹°K®9scfxm3.mps¥}[r#¹®íÿ8sð¤H|åg•«K]a»Ê!»û´Ïür%Ù"@Š’öÏv´rH±À×ïo/=´ÿ½=þüï…ÿçÿíÿüïÛÿü¿‡ßÛÇ?oïß¾ ?Þ§)Àß3üáïgø»Àßõð÷ó×ßsÿïa‚¿An¹ä@nÈýß 7Ôþ7Á¿Oðïüûû¿CðïüûTàoèÍýo†~q€ÿNð7Èeèƒ\}2ÈeË 7Nð7ÈÐßr#ô7&ødEÁv d%Ðm‚>&†¿¡_ ô™À^ ú’áßÏðofø73´?ÿ™áßÌàþý6*Ðþº* «€ 誀Ür È- · r+È­ ·‚*È­ðïWø÷+üû3üû3üû3üû3èm†¾ÌЗ|`˜»¬0Mðw€¿qüBÛÚQÖ¹¿‡¸ào‚¿ñ›Ÿýêå­Ç®ãß3üáoÄfø»Àßþžûß-vÿ¹ä@n¹ä@n¹ré<ƃ\¹r äÈ%K —@.ƒ\†þ2ÈeË —A.çÞf¹ räF¡¿‘áï'ødµ˜vü»Âßsÿ»Å´ãß «Å´ãß 7Aô1Á¿™áßÌðofø73ü›þÍ ÿf]eÐU]ÐU°QÐ[½Ð[]hC„3/%ø&U§0—%ˆi ã3Ä«Ö÷×}Ìÿžûßm ÿð7Áß ÿàßocðøw¿+ü rélÓãßþ&ø›áoK —@.\¹rúËÐ_†þ2ô—co'ø;Ãßþ¹ r#Èðßü÷íIОíI ‡zH ‡zHОr3ÈÍ 7ƒÜ r3ÈE¿Ê 7ƒÜ r3È- ·€Ü6¾öß?ãÏ×ßMŸÇ¿gøf‚¿Ïþsø{¿ þfø;Âß þÎýï·øsüþý ÿf†3ÿ™áßÌþ†~ø÷[l9þ ØØz¨ ‡ íi9Ïñï ø»öïgÔÈšà› t Ítàß Ðžú  Ÿ} 7€Ür äÈ%K —@.\¹r äÈeÐs‹Ç¿A.ƒ\¹ rä2Ø"¿á߉ðïDÀFhs„6Ghs]%ÐUY d%• Í ÇÈM 7ÃøÍІr È-€­ðM…o*´¡Â¿9C¿Îù9ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àݼ›€wðnÞMÀ» x7ï&àÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›w3ðnÞÍÀ»x7ïfàÝ ¼›¿x÷ãŸç^~7Ÿ?7z…_OŸiðƒø_Ø>œ÷ãÞlO¾*á§,YÃûW¿½¯6MÈ\]ø ´1Œ´ñÐÄ“}$|½ dRÄ–N†‘ðU!ôëG’¹x&)&\Û'Y&9 , ®ì“(¹&±àäQ’§øÂ>䙄Mxòf9ÿ„žg=V˜ä<ª]Ýàñ ¦¯2ÛùOÍœüøöô¶ò•9ÿ<<ô<ëñ†f›’ WÜq;ÛYø¦§@C9LpûŽIˆô¡é<û­¤ï϶k{¾©¤<²7CÿªRdU¥ ž=ÊnµçÇñÍñEø-Ò‡¨Xö¨•ôCYúÉÊÉBø }ÿùïw7è‡âý®yWo NÐïOÀUПŠ3wÍ xÕ ÄdLásAr×ô©œ£B˜GT'ÆCh?O·E2Ï\LÕ•8Æl"™}WÌæð•Élœ¾«°K[joÄ•¼šÛ2"ZðR¼ d‰¢¶IywïEx¨#œå4™Xð;&›_Î,—U70g¬ðÞÝ}¼w7Ä{ÿ&›1s£Õõ.þýÛ6ï‘ÖtÑ>×3LŒð: ¿ã„×Ë^õWVÎuê•_Sð«Ÿõœ²I«ïS²à1ŒtQjèÕm#¤¿¢Í{O 2Y3€‚ðYQž¹ÙúÐh°€–›;ÿzü1@IÉ›fÎpÝ“ÓXŒÆôuL1™ð"¿š“=>·Ã-àA¶1ôY*iºgÂggŽTÎx¶à”?'7½@xQÄخëAâp5Ê‚wnÉ`*®áLøÂŠ®áLø¬ÚXÃÅÙ‚•5éKÃYð¥Yª—–Ü›#µá[ðÊNÑkÈp‹S‹1¬£:0ÜÓ}Ãúé¾aýtß°~ºrXŸ„ß2¬ŸÜ¢>åaýtí°Æb ÂW¼cw_ÔÞݵw×Gí@Õ‚/ÿ娽»/jïî‹Ú;?j§¨½‰ÚÏ0§OºØi'Ú]M¸.é°a¸Ïæ[ð’© ·.>ß—™!”×O؆{éO¾ÝwnÜl¹Ü¢ł/ÍëæI#×!nÍb\>Ýžî‹ O÷E…§+£ÂÉmLø-QáÉ‹ …G¢ÂÓ}QáÉ e *¼½;vw&<ÙøÝ}“Éî¾ÉdwÃdÒ7ï!|z.O&»û&“Ý}“Éî†É$š¿a2ùí—wbŸLÜ5e„ÏJúÜìóËÌa¨¼CPÞùãm½8ö¤š«ØF„ÏjçF_áú_ÜÃ%÷NH!¾û¡)Àgß:§ü34ÆÝéëõë_6Ú˜ÙX :ŽÑÚ£«€G1D§ž8$IÄzlðY¶Ðe¹OÝ'aÊÜÌUÿ»<µ }Ž0‰ÔâžÙ÷¤¼ƒNš?5ÑÏkzæ/fße¹dË%”þUµÌ{ u”“iÞ8ÇlÂ¥y ϼlÂg¡jÓךy«cÞ™æl™7lc_ B¸2ohiÙð[Ì[óŠì˜·9€¯™÷Û³·7¬Ï²ï›ÚwÛ"<©Í†•ܾ/à¦".7þÑ~‡6šÃmg~ƒ}>ó ¿¼ACy]êûÅ.ºx0m`­hþ ¿Qóx¬‚¼y͘^ÿüݳ“8Ö÷ xÀEßIe ú+}?Ãoìûkß¹=º§¶|¦X„ËÄá¡m×[,®Ç>¬÷ýëÌÖoKìØyÝÿ´sâÍçm±à*ðõ ðŠæÏð5›’dÓcwôºBŽSYO+_ÿëi%ièxÆ„«™¿n|ó ¿QC°)© úæD\ûæ\MçŠÛÎ×ö÷¥‚ûûRÁý}©àþ¾TáIW–ϵݔ½TPÀ‹¼éì®kïïK÷C©àþ¾Tp_*¸¿/Üß— "\šwÓO%¥ì k¿Å¼w¥‚û¡Tp?” ʾÏ}RF¸T¦‚‹¾/à¦".7þû»Çæ?ÂZöëËJ®J:­þ¬÷öq—U‘Ø6N©Ý~P.A¸ZþéÙ­4!œ“^:>ÿ ÷C†^£ðâÏÙÝЈpµø´ñ¶¡ç^çjðÓ K^Ú²ô¢ëÁgËëD¦/à7 ¿û2ýýP¦¯ƒJ¶à¢‹"Ó÷fú743}·‚åÚeúIý³Å‚‹¾‹Lßï;fú7ô}(YNŠ¢e ®¦H–ýÆc²|Cã1YN|Þ&£¤ à %Ëû¡dYÄ$Š}Íá*7‚dÙ×&Ë×kè-}w¶K`œ%ËÑ‚·–ý–ºÐ4$äàB³_+<$$oãlÁׄ¸GB!›"zò<$äõbQ_Ã7ïïâÕ%Šj|'oî©ÒÕ–ÜáPˆCb¡¡·! ýÛƒRRaÂW„ä¡‘g™åõõx„yÝJÛ¢7•àKð4!}“Q×ÒÛÞÊ5éÝ ²â‘®/‘ ¼xû§‹[ øš§åO“?¤Å‚™šÍ1hhÀ¥} ¬Ç#\ê1m§xYúã7Õï‹‹:Õ/&\8í;üôá£d‡Nœžöþ™ðY 1“Ä#¶àî¸T$N#œôñ,2'O:{þT52ØÔ|UK¦©-*+Í'³ñjƒàgŠaž° §èHˆŠ½½þ4çŸÃíBÈe opª¯X¥Ôá+çê8y®M¸rí=׎&\o2 Žk÷K7ÞÜsupvI«‹}ïë›®.LéÁ;1gÁý¹W•¬³ÙøÑsu©o&xóÏե윫³û.½#lçÒ„¼?Ãî‘^—¨\¹`ÞöëÉþÍ¿î)¤øõ…¿¾‚ð )¿¡"à×R^ëÀ> YHù7¿ø†³¯ÁÛ\iˆÈ1ÛpÕ÷D†{q w€'ÛpÁ–® É1™Ò† †ëðZn0܇o¸t1Ÿðè%$zÄE®úÞnÉY3܇k¸âΖÎzÊIf¬ÃsL®  Ûùç« ÷ß#÷² Gíg—cý÷ ªŠî.ƒÿþDg—øêõÃ[¸Ã¯`yϯÖLp5ØNöqÓ±IÒpkÏ'Yî|ü¡¤>VLæ±×áA%²m0•ZõüZÀeŠ[©–ÔEMdÂý}èîžOwëYúƃ`Á‹Ö´Ñ?'@ä΄/¬è΄ÏÚ æ…~pÆáp£ —²_ZñáÒ–Þ‘s4ûæuÏ „&}ÈpCÇ&K‡õÓ}Ãúé¾aýtß°~ºrX+Õ=¹Ã:åaýtß°~ºoX? k·¨læ)*^QSßEvLxò’Ϭ0á×Uî–èý¢Ê‡ST9Šh%¿¨òqSQ%[ð* Çý€‡[Tù¸¯¨ò1TTùØÝ—ìîK vצrNß9)–5VR‚Ý})Áî¾”`wmJ ˆÂÝØñøøç98Kø_BN¯¬8m<ÂÉÙòÖ×lR\óÅêTWà±Á½kðrX§÷î:Êx o_Áùô“¥ºÓ#6.üà|5œ¾ÿhp{·àé©"ù™py}è&N ®+Ñ‚»ëЇ¯v½y¬>ÖÆC [UDÀWÚ8bEÙÆMH&\µ‘“ÓFjwF øJG\E·q2ჶ†@"à~ÛëK¯Ý´6¿‹/¼ºðs}ôô^؆B¿À]ÀÕeºés/ÃÒŠŸïà-à+V|þèm¤±Ñ€žð(÷:†SÙà’Ÿ÷kßføP6áJCìEj‹Ê¾ÖÆ>bÃP¼Ø„¸e ®­è·1Xð•6þŠP~>oméɆ«¼ÿs_Ѱô4û_õžØ„/m=ÃhøÇÕ#9ñbÓ¯ðµž<÷6ŽÍ °Ï^¹m4ákqÆÌ໩&|La;åhÁ×ÚcfÐÖôø±»r\(! ¸ßÆ4“ÜsЦ€'oûÐá«‘ðšäÆ“¶ !à+Bö]]ÁKÚÜ”1½}ï ÑP)[;£!à+mŠôB±ð5!#¡Z ™Ø‚¯ ‡„ð¶Ý /à+B>À&aÈ&iÛ6" øš‘H¢zRØ‚¯  JHe î É©FMûó9UZ,B&®W$Ï󟮵*®„«;ºJ“®µXM¸ªœž|99·ˆ"à²(´ýä`'GU»cÚ…÷΋;ýM?‡Â<³ßÆëìsZL&ìØ§3ðû@ —ÕVþZö4ç nß#vzÅXý»l£d|mäá«—ÛªßÆW¶ñ‡È„Ë@Rçî*0ƒømÌ~w×·± ×m=>_n#G¿Ï×·‘Š ×Ëû-Ë,·ÄóV–p½{#ñâøÏædÂõ&²ãEJ6|VUÜt1ž—•xÞ‚Ží•!_ÄóàÅsSó~¼(ׯó“}f®ãùìÄóM¸ŠçÕ›o“ ×5èr1ž—•x>d?žÞdÙ§Xpß>stÆO»mi9ßö[ù%<éYy©ùÓºI»ëI•B´Tw~lÁÉËIþ»µšÒI ¿ZšwdòU÷áª.[uýÂU —ª‹©8ª›“ ¯ò+ªߌ#ª;Å].U#]V]]ñºÙñºžê ¸ºƒ­¹ï}ß™„W•å±3`Ûõº¹S„³X·¬yʦê¶¹®x9^Ç6ÜÜõf©®šðªHRPÝÕ^‡“=ÂY.KWŠU÷ígðÖJ¶-X‘>-™,¸»±ïð )¾ÂÞŠÊXOxHH²Ò“8"ä¹o‰^!F£œ»?6ø1It+Rú0R°àIJ­œ­ÎÒÖ‚—Xµç24ºÕ dq|†Ó‚«Í°µ‘JvÙL{SçY¨¡ìÖKù§“Ãl¶ùÃíî3^uáˆ\‹šðì¤Ú¢íñr'/^ZÔ‚g¯þ½´hƒ˜#îxb•êl.Î6\.x†Ë&¼:vj‡ÖdJWÛÀBç§Åq—åJNÑšrŽ…ÞdÁýçV/>h¸c¯,xQïU´qwŸyw÷™wwŸya`ÝE×î&\×¶Šm÷h×Npy\<{Õ¿•xŒp× ~îœì¶Ýø[àþ†ÜˆêØœžú”ó+ö-г+ÝM}|5{ü…yÇhÉ„«Cùý¹²—_¿£“ õäåùñÓ4î5ÎjZ”ðß¾^¼õ÷ÿ ç1=BŽð¢JvsÿjDîõ/^GôèVUÚ­Ê&e2ª5>|”Kžáê mé"—jw¯5Þ}ÉBÀGß/{ð¤wZ§Ëd·(«Í`"F8ËP›[ /~ߣWc½†[|éÑ“^Z™ÚwÚ×Ç×à Áo1À^W/ömFò¬;¼þq‘Fಋyê^'2çyÛ.ôðeí0„Ò÷n´é}Ÿ¼¸_^‘î-r³>z<—kÁ©8¤£¸ë¯H:<éFà‹'q³Y@C²ùú¶¿l÷àX€ûülÁ•Ï]ý¿îóïÏfã ´u?õïnk±àÉÖ#Þ¡fë,¸öŽ­´_IñŽ0_´qv¼£ïtyý€ˆ˜GŠ^§w?,xQïÛ ö0Ý’—Ϩ[ a¶F¸¼ú|-åñ‡¨0ánÍl³*Ocm„ØŽpÕÆØcûJëHaáp}qþ‘mä="Üo#ÌRn¸IÕ‹Ô/î–’=Î&äMFŒ”.’{¯)¢˰bRȽ§±ŒUÂ/ƒ¯Ç¾!@E@ŒÈ~SFbÄ|@—áë1‚oÈ#P=F¸o•¿º#VáЏ _|CŠ€ý¦ŒÄˆ5ø€".Ã×cD¼:FL¥éðcSü¸GbÄ| X^†¯ÇˆxuŒŠè1"ûq;ĈUøeE À×cD¼:FHE@ŒðÉB‰kð¸ _ñê!1Â' q$F¬Áq¾#Òµ1â¢ÚM~tN?n§#Ø[ÓY…_.Áë€ÞAëðKBmú<±6_Déê@§œðcSüÉ!A=Þ[”Y…_.ÔOÞ[~Iˆ«íÂãðõh—®Žvœ8/àǦøL6õhÇ^­m~¹Ò®4ĈR¯´¯ ±µ}|3‹Æáë!5]R¥¶{HÍ>]N=¤²WÐ[…_®b¯i»W±W… hû2|=nç«s;žjZÀMñçÒ<·×àׯmJ±,à—„x™ôçÐAøzÜÎWÇm%-àǦøv‰Ûkð+ãöñs^À/ ñ´Nn8_ÛùújWY2CÜö« y$n¯Á¯ŒÛ‡F¶»i:ü’/’Ðé½AøzÜÎ×—Ô„¶!nû%Œ<·×àWÆm¥mˆÛkB´}¾·ßNˇþ1Þ…t€ïÛSf¸úúÁ}iqOÜ›šößžŸ~áJCéôJÓééÛv#¦€Ë!wˆDéüC‘^ĵ›LÓYz™GàòÛÜ·Lï¿ï¾½¿e‡¿nŸ;ü hø&n-¸œ–75Ÿ,çþMuàâò†:mãù‡¨ÐÉ„‹3d•¶g Þ”¹LðbV0Žªó€€‹÷f§Jûê×ç‘bÃUº "üxMNê]ü ð<ŸÚ¥’ûGþùOƒ³ÓE–—ôÔ–¤î#Àó<œ³Kÿ‚œàÕG/ž x­îW„Ì× )ïÿ]„oîÞ?ÖÓõð?OáöŽÀEß €¼ÅàI_†Î?¨çAÛE\Îâ«PÙ|§Gà³ Wï¾&=í6§ÇM¸]7;þà=Š&ájþÙž¯_tãhÁõsŸŒQ»½Œ"àì µ39jþÍ™¿žâÓ=t^Àµy?op·Æ;¾.áê¾á’¬`u„®î³m¸)$ ®®Üùz)ûhéŽÜŽÙ8éÇ Îs©Æ‡`ÂUã¹I/r²owŸ¸öŽÂ®CXð¢_°Ç6¾_ëI ë÷ÖEåCĶ‚s œ§ /’O Ÿâ|ÿù.’îâ1¨LÉVýþ6 7o©2œ¶§C®/1/ÆTvvãgý•5MÈð Ây8»vPÁ*™×¯è†s߃wI¶„ë×_Ïn¤êp²G¸¼ìë ´¥Ûô'èœy, †R-¸Nƺy<>”ºüþt‹£÷¯ÿÞ[Я^k‚K!¹=}¶ÿI»?¦D>ãR„‹2Ðñ}µóÔàÞ%r€Ã¬Ê7Hïpuµgð¤oz>ó“ìãÞ!³ÿ™Gà<5MŒNÈw#·ë\š—úMö‡¯>ßrXN3ƒmìpÙÆ@Ûb¶1ôSÿ¾ÒÆÇÏÈkL3\¢“wô.àj¯d§•%± W—¹µz‘wT <'P‰C$³ï*‹5؉CˆÑ„ë $9Q0ÍëFõ~òk# –jª®N®=~ÚÎ2/³ÍÒœL¸4/Ík(M¸¾ë?9¬Ax]mÞžþ!\›·dǼ­ú'áÚ¼Ù3/YpiÞ˜39æåÙ‚¯š—]ó&Û¼yb®FopÍ›M¸Ê"RpÌ›‹—³ßv*fò°É„/œ`¶ì~×&|1Æ-»u,øÂ ¢i÷”méÚ 2Ø=zvÏìEí`Â5u [dn>áa ëhÁµÝ\Û=šÒ•Ýy®žÝ‹ Wv/³;Þ-øÂîlwžMømvO^¨—at8'®Ây/Èñžk2áÊî“gwÒ’η•£YÅQñ8yã}"/γ ×vO#vOžÝãl÷þž€/ì^FìžñÞû®ížÙ„Œ÷c³D°Êv]û|U‹a÷H\Û½õ]ÛÍÆëñ^"PjvìN“ç“Ùwµ–ºm,5Þ'‘#f§4µôzÕîÅ‹ó}UJÍï"Á-ÞüÞRm÷©˜p5Þ){vO\Çù–)‡ nƒkïhÉã2˜ðETp°{yð²€8’ý'û+-»Ð š}_õŽêE^͸šp<îÆÑ„«×¨æ¡¨PÚGgO:\)]{GóM.Š)]{Gš /NU}áÁ‚Kï8D4D¾ê³›+8 F9$>HýrM¸ò޹t®-ø‚T«à}$ Õ‚/¸Aò¢‚ ×q(Gœ¯œ3R®={¹B¬vÿ¬:›vg®ìÞ §ì>³ ×v÷¢•_P€èØÓ¬_pƒ2À ®?{³A²àƒ9b„Õ.„k»ÓH®‚gwš“ûàUò(;³AÎÕ„ßd÷àæ ÕKÍÆkïè)¦Î² ×Q!šUfYJÁͼ٠šp(z…@ÌÃP!0¸…Àš<ï ®3Éèå Õ„kæ2É_T ¢ã"&‘ç³/¨E1ášgdZ>\G4á*v·L,ÖP1xuDÊ^™8Ì&\Åræ zØ‹®wLÕ‚/é„Ç ²_ÄŽ0â|µw®bGkü"v ¾àÕöŽ<›†[õ»Úx £Žw ÏÑÍ$½™eŽ&\y‡»õˆLø‚N$—AXpímN_ãä„K×Þá±ÐX,ø‚g$'v¶à«Þ‘¼™¥oPÒ5I6áº&éÔ(2í\ïðb‡˜º“;³8y‡œ×’ÇBcñ¦œb£3)¯•¶BrK[nIÓ”¾ð¡l•XLÍ/ÒÕ!šâ–4Ùs¤h!» ¬L†ìºÍì•lÁµÛDÏmÄ„—m·yøzÌÚŠ6Å„+·É^E4™×,§f;Ú„É”¾Ljíh“3YðEè™Gܦ¸•ðèUD“ ×+žÕ«„g®óXÏmÄlíVDÉYùª"\¸ÑàÕ¼°$ÜŠh'Išö’ _ÔË*¢Á«ˆÒäּ̾¯zG½–刚W¨nP)žw° ×Þáîf‰\;Aߎ¢í>[ðEí#Ô>ªfÏîÙ‚/À°û©øA|áyÄîóµj}ŸÝ¨à®“T®+á^T`SúpTÀµ‚_L&.»5?Ê_ÂlÇ£B°àšÝ²¢_óšÜ¨@^E4›ðѨ€üŸÜŠèìV«_À²·z-ø"*°g÷Ù„k'HQ¦kWO)šð›¢¹{³³zšp¶&·"êímÌ%›ðá“-ø"*xëc“Ùø»µ éGjbÂÕ6r..¡5ášÝz‹îÕTÝ 3á™ÌÆ/RÌ‘ÍDîŠÇLp› ‘·¬êÃ2Ò*òJ¥Ùs›dÁå/‰ÀMuä—JÉ+w˜ÒA%x‘M¸^V]‡°àzKF›H—œÃ‚¯yÇã?ÎWüêO?!á5äE-Ú‚ó ®î‡àmt¶£@>óãW;©h?}°.àê`@Ývcýýã­!¬}HÆT྆üã_QÄÓ_'$|W9‚²â¿Å .ÍÒˆìÿj>ƒ#]9Wê®^ݹ‡¯úùÀNH\Þ̦í9^y2&À)€¯œØÿýجX¯÷4€ë7ÓÚ↾ü.špyê¾Ö~î]H¯NÙ \豦v†D^FUð€Â…Kjg|ä½%ÚÒ‹+ßÿîçk§ëàêz–M?‡¤Ÿ' î;Á×ù‹`zC»øüóŸç+#Á&w="¼,N+µ¯^wfâ!ôèYC¸:†¾íE¤—‹—|èSyBÈŸ¸ûXëþµÆ½“Ñç¾ÇAåê}†puŠ=zšžS#\œÙ Ç:ŒCs:ÏG¸¸ á±ÊÙºF ®îš®-Ø%÷ú„‹ËË7s¿@C\æ½™ÃÖ”žäõ ]2…êH—×wðöÅEZ§kA,xžÜætÖÖ´{Õ}o5gÑ÷Cx»WÏëŠyÿ”éG®¼.;KTS¯*"\{]töÄÎ䮽®Á¥×Åm5¥+¯+ÝmV¼®z^=¯ƒs–ÎÊ7‹åuGÙ}W^;\zÙðQ¯‹}ÝáU÷½Ø^Aÿu&Ïëj¯©zT§à®OÇWÏë²×^׊Úë’Ùxíu ÕUEídW^—·tÙ뮼.{^—¶¦ê”×Å–9+¯Ë<©¯¢íuѶû¨×Á„WÝ÷l{]7'ÓëÉÌäźØ7£ xr²Ý…×Í\yQtfØ^MF¸òº—^W¶™,¸òº4äuÉöºƒêëÖöº‚vOž×åvÉža«-=ióÚ^—·¦ê†¼NV쮼®¶ù]y]…!óí¹ÿ¶•ç-ÀŸn¾¼ á7\Þ†p=‘¶B¯ô§Mé áKç2üi&rà$¾ =³be’jÂ¥sÍíV7éO‡ 8›ð¬&èäú“wォ²ï±×^ÉÕÐ÷ï=±Kàç˜1‰x”N0Ï[Óîð*š„KEP»à'{—* xÑ+›mû§¬>lÉl|qOf¾>~{·«ý¨!ÑÅyÛk \tqÃ47~KÜD¸Ž›dÏÖLxOê«dºv™{ùá~Ü$×¼×ѵ­ò,ªWÑ5Àðï%tÌ{ð˜.͸yðŠy.“±0•­¹(„³øŠ»}¢ø!ƒyž”l˜÷ôï îšW(L®Îpu)›WÀá~}ùóûÁ cÇûvÌØîÁ“ç)À«[}ýým×¾Ê×OðþÕ˜ŽçºíËпŃ;| Dv€ÊP¼øm{ði&­f€šÑƒÛ,ã[Ö4Å‚yð©SdÁ«ŽÁ]Áû¿þuÊzï²-Œ‚ûŽež¼âlò}á<¢! ÿëÙÉß@º[pR±Ù¬ Ö(<˜Ãzƒe=„g%d¶û¾øp5ø7͵ŕµÒ¬áŸ~ç,{w6Wµ™[ß÷uò*$©­óëËNs4áƒwšN},ÂWf«ÚW\µÃå‚AáÙc Yë©k×´,=˜×4ÃꞀ+JÊÛóšfHH\¦V]zq×U®‹¾ö¹k­`ßZÁþ¾µ‚ýÈZôÞ²à£ÞA[Nʇªí• ¸¾Ñ;ÛÞÁèÑñŽÚ¥¯yGt½£€yïªéïï«éïï«éïGjúÒ;Š7û>ê½£zÞÑ×r¤wÜÆ–®‹¨ÁöŽèÀué~ðŽêy”î÷÷ÕÞ÷÷ÕÞ÷÷ÕÞ÷#µwéiÛd!|Ô;2xÂu‰mïà­Ùwå}½)몺 ×%öï¸_bßßW#ßßW#ßßW#ßÔÈ¥w¨ª)}Ô;`yAÀ5cšmï€Zœ€G5ÿ83KÙÚ×¥ð¼à~)|_1z_1ázh÷âø| <U)†áN¥Ö`Â¥gó‘S•šMxòàY/jYp÷‘e™¹Á±Nì1eùüÔ ð\=ä3·œXíƒ:1‹÷üŠISßûz†ÓwcƒRûê‘_›o~‘j» "×éJ¬~‡Âõ¾Åví‘öºÉ„ÅŽ“wNê3ÏëlxTõ\6½®À~U—œ¥ŒÄ€K+Rî÷íîc?Íìí‡ ¦ Ð |,8‹%DWùd[ÁYÂ)œ·ÞÔ]Mø ‰Ýcüc‡]Ouy>0m >ê› ຖM†êNqÓ†GEËlß<21ž•uãˆê^mÕÂ[rÇ»_þËSÀ—ƒßï&|1øÝñnƒßï|pÊ¡@0dr«ü»¯&-¦ñ`Á“±Š3Âåx/³=Þ l‹p½¾æTLÆ.K¥5~ÍiKWÝ<¤ºÌT>¨º‚,á¤ÚN¶ê&ïÅQ]ñ8ðáßµ¯TFTWûùŽiLuÛ¹XðQÕE2—ª#§ô˜ ”•›þ]žµÕÁJ¹·XFzz²àZÁ­0°*a±9èM“öH>übÂõnJç >ÌήWÊ˃ó_¶àk þÓrø03¬U#|4"F—'•ƒd{XÏ8.>è›ìHÏʃy@uï?.T #ðª ü†ƒ*~ýA¿þ Š€Ë¼›xûpéËþÇ_íe@z똯ê°mãìUUŠJi÷í! †ó~ÀáƒC&cæ‹p1d29k ‡ð¨â±DdvàY X+Ù#TwÈÇãîHÂo zs‰¡:¹±FÀ³³±fMu°ievê³~¼¼åL:í®U ~KáÃeÈhÂó¥;EšðÅ|yYó¸aGž’îoúä8ϞϻoAï÷#[q$ÏÎÛ~Ù)ÂÇWР׫ f´9­]™ð¨¼ÃáÙ°“GÀ³³“gÅp{×p¹]À”Ü]2Ïî‰\‘žÝÓ”{ØÑ‘=n JH2 „ëÝ,Ù¶†s„G½ëÄtÚMpàz7K²ö“ˆí(gø©†ê80JcÄSd¨x\u=U'MOí i/‡2ÔÞ„kö4P£ûïgp2•m;óhÎΔ£.,Øö+Þ¾¿·+¦«÷ ¾AvNî619zc¯ï¿=÷½Nîc€þ`„—Åc€í«ßš†â4ÔÅ ¬ìŸá§àšáðU»'ý@?ÌÙon<ÀÛ³‘á©hø©îÅo¯û—–Ô!!‡ù=køIˆ+ßöí..I!"Áûãß;g“'ëÂöÓ’ÏlÂõ¥Ëóƒý¢7ÛÒõî7÷*ÃdÁ]w&ñ..ÕþÂY>’›d›,¸^‰í·¿Ã±ùÁ×qȽ{§îO­<õ/|®×ÿºBì™ùïíçóƒ£/ö´S ô#üzz8»s°†Üñ‡¬ÞO?ïVøãþÏÿ:óâñ«ßÞW›&d®.üÚFÚx\œŒ øz?@È4¤ˆ-CÀW…Я]Hò„ÈqMçÁ%\åiŸ §¢šò~lcòÛ8⤸[pÍM[³ü‘СVÚøÛû jváŸG O_E1ÃÃvêNp.'³‹‡ ]<Ã×»ø®Ç\…C¶àªd›áOKéÚ820UûÀD¸ÌK‰lw>X7/¥¯·ñõ{’æÁ6ÎÑ‚«•·­v ðõ6þóÖ„˜EB«çíæ.Ûœ°pb= øz?ÀÇL»U[µ?úz\Â/´q$†«q]Ø‚«Ðíq K0_mcüþÑ„Ìl‡® s>ÞR×ßþüÓàÓ¬2¸rî»Þ!H\\âwÈ ON?¨p³ &\UO‡³—¼i4KÂÙó¡ªÓZSzuá2­’ ¯ú«ó ð0Mâ«ÊÝ>o¯Ý«Ôâ‰mœ4$ÓˆšÉ‚³Qƒä_ÜÈ ýøþ=°—_Dw^¸R·s³â#õ6N^Ô'çTÓÎßúä+µ”S~ú¡xmDø,<8r<+x·I§ö(„€++rÛÃüêÕ&Çôþì*^ûß;:’ ,ZÂg•z×n†hëñá|Àê‚®ÔÅñÜÆ9 ç>˜®õØÞ-;|õU/2ÿ…–…(‚;õLé _¨ë¸§>[$^±Tpõdu V¡àôˆ ×´Z¡öx¡x1¯Bíç{Ë *ìpY Ù|>‚¹L^\¡˜pµp85ïð¥—d{°Ð¼2I$®ì“‹g’bµ}’e’ÓÀ²àÊ>‰’k NnU—ü‚Ó|aòLÂ&Í1À4W dCŸ¥ôÁa>;s¤r®vœ„«'<ºŸ“›^ ¼¨aBl×õ ñF¸e@Á;·d0×p&|aE×p&|Vm¬ŽáâlÁƒJšô¥á,øÒŠÎ,ÕKËîÍ‘Úp‰-xe§è5d¸E„©ÅÖ‡Qîé¾aýtß°~ºoX?]9¬OaÂoÖOnQŸòÀ°~ºvXc±á+Þ±»/jïî‹Ú»ë£öa¼[ðå࿵w÷EíÝ}Q{çGí4µw#QûæôI;íÄaÓÎ)(¸.é°a¸xçCÂK¤&ܺø|_f†ð8„]aŸg?3£ÒÚørmÖs>¤áÖøÉÕ?ÜKá/NÖsj$[ãG„„Y— æAfSzPƒt`ü¼8YÏ1¼ÕËãá< Ϊ“ÙøE=k¾Ý«·Ó¡Oóº5á óº5á:r±mÑÉ‚]0Ï®E-øP:t\?aî¥C<ùvß¹q³år ‹ ¾4¯›'pŒ\Ç›Ÿ|º/*<Ýžî‹ OWF…“Û˜ð[¢Â“ D…§û¢Â“Ê@T¸ðÔÒb“ßÝ7™ìî›Lv7L&}ó—¡çòd²»o2ÙÝ7™ìn˜L¢Ùø&“ß~y'öÉÄ]SFø¬¤ÏÍ>¿±Ì†Ê;å?ÞÖ‹cOêÃú¾} ŸÕξÂõ'þ¾¸‡KîB|=ö=BSÏ*¾uNùghŒ»Ó×ë׿l´1³±t£µGWbˆN=qH’ˆõØ.à³l¡7ÊrŸºN"”¹)˜«þw-¸º96:¡.dæ­ÙwuiôÁU¾6ÒˆæaÃêQñóy^Ó31û.Ë%[.¡ô¯ªeÞc¨û¼JniÞ8ÇlÂ¥y ϼlÂg¡jÓךy«cÞ™æl™7lc_ B¸2ohÔà°]VÀo1ouÌ[(²cÞNä¾fÞoÏÞÞ°>O¨ûêkßm‹ð¤6Vrû¾€›Š¸ÜøGoøÚh?>´Mø öøÌ74þýò åu©ïG¸|6€·m`­hþ ¿Qóx¬‚¼y͘^ÿüݳ“8Ö÷ xÀEßIe ú+}?Ãoìûkß¹=º§¶|¦X„ÏA×zœÅõ؇õ¥WŒ-Q°cçuÿÓΉW4ߎÎKxÒåËš?ÃoÔ|Ã¥‹ùŒ€G/!Ñ#.špÕ÷vKΚá>\ÃÏp¶tÖSN2cžcpm¸8`8ØÎ?_m¸ÿ¹—=j?»ë¿_PUtwü÷':{¸ÄW¯ÞÂ~Ë{~µf€« ¤Àv²›ŽM’†[{>ÉrçÓ}¶l‹“_/¶ g T"ÛSP©Uϯ\¦¨±•jI]ÔD&Ü߇îîùp·ž¥o<¼h AýsD®áLøÂŠ®áLø¬Íð`^ègŒØ 7Úp)[ð¥.méý9'@³o^÷œ@hÒ‡ 7tlò¸qX?Ý7¬ŸîÖO÷ ë§+‡µRÝ“;¬SÖO÷ ë§û†õÓаv‹*Áfž¢2ðáU0õ]d'Á„'/ùÌú~}Qán‰Þ/ª|8E•ÓƒÝñbQå㦢J¶àU]ßx¸E•ûŠ*CE•Ý})Áî¾”`wmJ çô“`Yc%%ØÝ—ìîK vצ‚!Üžƒ³„ÿ%äøƒ·ô'gË[_³IqΨS]Ç÷®ÁËažÜ»ë({à%¼}ç—7ç ³Ã)»ð€óÕpúþ£ÁíÝ‚‡ôV 2áQ½25¸®F î®C¾Úõ6æ±6nløX-lU_iãˆe7!™pÕFNN©Ý%à+mqÝÆÉ„Ú‰€ûml¯?,½vÓÚXü."¼xðêÂÏõÑÃW<¦¡Ð/ppu™núÜ˰´â«[ð+>ô6ÒØh@Ox”{élpÉÏûˆµïF3|(›p¥!öÆ"µEe_kc±a(^lBܲ×VôÛ,øJÿE(?Ÿ·¶ô‡dÃUÞÿ¹¯hXzšý¯zOì —¶ža4üãꑜx±éW øZOž{Çæ†@ØÆg¯Ü6šðµ¸ cfpŽÝT>¦Çp \Ñ‚¯µÆÌ ­+èñcwå¸PBp¿i(:Ëg‘; ðäm:|5^åC²Û¶ !à+Bö]]ÁKÚÜ”1½}ï ÑP)[;£!à+mŠôB±ð5!#¡Z ™Ø‚¯ ‡„ð¶Ý /à+B>À&aÈ&iÛ6" øš‘H¢zRØ‚¯  JHe î É©FMûó9UZ,B&®W$Ï󟮵*®„«;ºJ“®µXM¸ªœž|99·ˆ"à²(´ýä`'GU»cÚ…÷΋;ýM?‡ÂÜ{¿õøÕÇuö9-H&ž¬],ìóáÚ'[ö9™Ç–®íCgמGú~“}¼ä`vìÓŽ øŠ} †Ëj+-{šsƒ·ï;þ ÿ]6áQ2¾¶ òðÕËm Õoã+ÛxŒCdÂe ©sw˜Aü6f¿»ëÛXÈ„ë6‚Ÿ/·‘£ßÆçëÛHÅ„ëåý–e–[ây+aK¸Þ½Œxqügs2ázÙñ"%>«*nºÏËJ³ ×ñ|vâyŽ&\ÅóêͷɆët¹ÏËJ<²Ï?o ²ìS,¸oŸ9:ã§Ý¶´œoû­üžô¬¼ÔüiݤÝõ$áÊ !Zª;?¶àäeŒ$ÿÝZMéò©ßZšwdòU÷áª.[uýÂU —ª‹©8ª›“ ¯ò+ªߌ#ª;Å].U#]V]]ñºÙñºžê ¸ºƒ­¹ï}ß™„W•å±3`Ûõº¹S„³X·¬yʦê¶¹®x9^Ç6ÜÜõf©®šðªHRPÝÕ^‡“=ÂÕ«Û•âEÕ}û¼µ’m V¤OK& înì;|EBŠ/„†„°·¢2Ö„¬ô$Žyî[D¢WˆQç(çî ~LÝŠ”>Œ,xRÇR+g«³€´µàÅ%Ví¹L#n5™EŸá´àj3lm¤’]6ÓÂÔyj(»õ’Gþéä0›m>ÏRٗίN¸q¥Ãõ©žUXèóø#¿9 ¦m› ¹øm|s„ˆ¯â«“ê;=ù¼pÒ‚gÅÚ~‘—Gd®òêÁ]nôáž- ¸~ЬÆãô®²±ÎI'•#š×WÚ¶iwß )à$…p´+ °×LÂÙÚ­rÔ|pÍ põzro|Y¼”Øá»û ·»Ïp»û …W]8"×¢&<;)…¶h{¼\ÀÉK£—µàÙ«/-Úàæˆ;žX¥:Û†‹³ ׆ žá² ¯ŽÝƒÚ¡5™ÒÕ6°ÐùiqGÂe¹’S´¦œc¡7YpÄ¹Õ „îØ+ ^Ô{mÜÝgÞÝ}æÝÝg^XAwѵ» ×µ­bÛ=Úð¥\—Ï^õo%#Üu‚Ÿ»';m7þ¸¿!7¢:6§§>åüŠ}‹âìJwSß_ÍaÞ1ÚF2áêP~®ìå×ïèd'C=yy~ü4{³š%ü·¯G€/Eý=¤Ç?¨ÇyL…#¼¨’Ýܿѣ{½ÀËŸ×=ºU•v«²I™ŒjåR±oÅ@¸:ÈE[ºÈ¥ÚÁkw_²ðÑÆ÷Ëž<éÖérãÙ-ÊÄjó˜ˆÎ2Ôæè‹ß÷ÇèÕØc¯á_zô¤—V¦ööõñuÀpCð[ ð…×Õˆƒ}›‘¼ëN ¯¿F\¤¸ìbžº×‰ÌyÞ¶ =|ÙE; ¡ô½mzß'ïî—W¤{‹ƬÏåZp*é(îºÅ+’Oz øâIÜlÐl¾¾í/Û=øàã>?[påó_Wÿ¯ûüû³ÙøãEmÝOý»ÛZ,xò‡õLjw¨Ùº ®½#d+íWÒG¼#ŒÀmœïè;]^? "æ‘¢×éÝ ^Tãû6ƒ=L·äå3êh˜­.¯„>_Kyü!êL¸[3ÛìÊÓX!¶#\µ1öØ¾ÒÆ:ÒF˜@8\ßFœdyD÷Û³”nRõ"5‹»¥d³ y“£„¥KžCÕéþ”µ‡È†j¶àIoh¡ËÆB¸ß“¡ðÊÜî‹}y˯—)­¿E÷m§î&Ná"|•K½ý¯÷Ø' q£sƒ¯ y|»œžw÷Ñ?Ï+KÌÑ›‚_ìÅKNÍ 0ûgd˸¾\dž-x^éâÇ}]ü¸¡‹É‚»Ö׺ø1ÒE,ÞÐÅ‘}Ë˾[p¥ˆmÓPšÝ.~üêâî¾.ìš^ëâîrõõ8ØÅÝå.OªæÏ¿‡q¿†òþ»Ú£ó×køþûõó¯z!ú ~øAíÄHÂ÷ ^=xváo®ôGúFÂ=éŽt„ôŠÓxö./pµ/…´6’§!¦! ®6z¢7·'^O‚ —=ÙH!^O¼žH!NOPÈ.„çé/G]Áuçü×ÃÈW{ÿ«ó˜™Vàï¼+b9w[p÷ÊÉÃWÔ‘á›p]éïûÅÊÜ>ò´ŒÈ¢ûn,/Ú…èKßwce_ûn¬86é8p·ð{üjŸn¬•P°w„€±êÜ>3¸œÿ°4kÉo<õX»úÕK#vù!{_ÈåPMkgoÎ⸻ÉéðÕ@¨æ•6öP½úU×c¹EÈÞr9ÒSÕvµéøC‚W_‘žüÐE=Ò«!'œ¾‡j?é‚»ë6ǯ^Ö—>.õäe¨'ûûz22̃™¥g/UR)§hãÀtB+ïÓ‰ŠRȯ‹úÜ­š¿zyp«‰#=yêÉþ¾žŒÌY“Î pàì匊@ßGøØ‹{¼‘;/àÇyÕ¾ïÈ"ÂX‚/áÍ ²)ÄŸg .Iofðg¶÷~°¦êŠ ¿)À"h,Á—ðEÐEøêÔô>ÂÖÑgiŤ=ìOóXV-á—±*} T¿äÞkŠèÁ2¬˜rïi,c•ð˜.ÂW#Ô;]#hEPÉ¥ýÏ#Váž"jSÄ|=FÐÕ1B*¢ÇˆäRH_ÉóˆUø€".Ã×c]#¤"zŒˆþ(…Ô0x©Ò*ü²"àë1‚®ŽR=F$”BFä–eWáq¾#ø†<¢äüØ”ä6…GbÄÜQ§Ï ÁÆàë1‚oÈ#P#²ß”‘±PÄeøzŒàòTDî[åǯ.LjUø€".Ã×cßG " FD¿)#1b > ˆËðõ¯ŽSiÇ_:üØ?nÇ‘±–—áë1"^#¤"zŒÈ~ÜŽ1b~Yðõ¯ŽR#|²GbÄ|À#.Ã×cD¼:FHE@ŒðÉB‰kðE\†¯ÇˆtmŒ8„¨vÓD‡ÓÛ©ÇöÖtVá—Kð: ·GÐ:ü’GÛ>O¬Á×Qº:Å)çüØrHP÷eVá— õ“wÁV‡_âj»ð8|=Ú¥«£'Î ø±)>“M=Ú±Wk[…_®´+ 1¢Ô+í«BlmßÌ¢qøzHMW‡T©íR³O—S©ìôVá—«ØkÚîUìU!Ú¾ _ÛùêÜŽ§šðcSü¹4Äí5øµq›R, ø%!^&ý¹t¾·óÕq›CI ø±)þ„Gâöüʸ}¼ÅœðKBšDº#·c6Núq‚óœAªñ!˜pÕxnÒ‹œìÛÝ'®½£°ë¼èì±ï×zGÃú½uQù±­àœ‚çi è‹äSÂGFƧøß¾‹¤»x *S²ƒU¿¿MÂÍ[ª §íé€ëKÌ‹1•†ÝøYeMr`<¨pήT°Jfãõ+ºáÜ÷à]’-áúõ׳Û©:œì.¯ûºmé6ý zg ¨¡T ®“±nÞÏŸ¥.¿?Ýâèýë¿÷ô«×ƇàRHnOŸíÒîi‘ϸ”ᢠt|_í<5¸w‰à0«ò Ò;\]í<雞Ïüäû¸wÈìæ8ÀEMgc£òÝÃÈíú—æ¥~“ýá«Ï·–ÓÌ`;\¶1ж˜m ýÔ¿€¯´ññ3òÓ —èä=„ ¸šÇ+ÙieIlÂÕenm†^äÕ‚Ï TâÉì»Ê"B vâb4ázINL³ǺÑA½ŸüÚˆ‚¥šª«“ëCŸ¶³ÌËl³†4'.ÍK³Ã E®ïúOkÞAW›·§׿-Ù1o«þI¸6oöÌK\š7æLŽyy¶à«æe×¼É6ožØ„«Ñ\óf®²ˆóæbÁåì·Š™„_ÕbØ=’×vo}×vg³ñz¼W§D†š»ÓäÅùdö]­¥n[K÷IäˆÙ)M-½^µ{ñâ|_•Ró»Hp‹7¿·FÛ}*&\wʞݓ×q¾e@Ê!d‚ÛàÚ;Zò¸ &|œ@ ì^¼, ŽdÅÉþJË.t ˆfßW½£zQƒW3®&\G»q4áê5ªy(*T§öÑÙ“dJ×ÞÑ|S‡‹bJ×Þ‘fÇ;æb‹SU_xG°àÒ;ÍãÑ„¯zÇìæ Î‚QÉ„R¿\g®¼£G.+d ¾ Õ*xICµà n¼¨`Ã5AÊç+猔…kÏ^®ë€Ý?«Î¦ÝÙã„Á„+»wÃ)»Ïlµݽ¨€A¥Ã :vÇ4«ÃÜ  p€ëÁÏÞl,ø`Žaµ áÚî4’+„àÙf'GÄä>x•<ÊÎls5á7Ù=¸¹Bõ’G³ñÚ;zŠ©s…lÂuTˆf•Y–Bpso6ˆ&\EŠ^!óã0T n!°&Ï;È„ëL2z¹B5áš9†L²Ãƒèx‡ˆIäyGãì jQL¸æÙ£Á„×M¸ŠÁ-‹5TG ^‘²W&³ W±ƒœ9C†öb‡ëSµàK:á1ˆlÁ±#Œx_íÁ†«ØÑ¿ˆÁ‚/xFµ½#ϦáV½Ã®6žÂ¨ãÈ3Bt3Iof™£ WÞán="¾ Ée\{G›Ó×xÀyáÀµwx,4 ¾àɉ-øªw$ofé”tM’M¸®I:5ŠŒD;$×;¼Ø!¦îäÎ,NÞ!çµä±ÐX¼)§˜ðèLÊk¥­ÜÒ–[Ò4¥/|(ÛA%Só‹tuˆ¦¸%MöÜ)ZÈnBB+“!»n3{A%[pí6Ñs1áeÛm¾³¶¢M1áÊm²WMfã5˩َ6a2¥/“Z;ÚäL|zæ·)n%p­ Ã“‰ËnÍÆò—0Ûðá¨,¸f·ìF…hÁ×¼ƒ&7*WÍ&|4* ÿ'·":»•ðjÁ°ì­žF ¾ˆ ìÙ}6áÚ Ò@T éÚÕSŠ&ü¦¨@îÞÆì¬ž&œ­É­ˆz{sÉ&|8Åd ¾ˆ ÞúØd6~ÁníBú‘š˜pµœ‹KhM¸f·Þ¢{5U7ÈLx&³ñ‹sd³‘»€â1ÜæBä-«zŰŒ´Š¼R)GöÜ&YðE¹ÃK"pSù¥RòʦôEP žCd®—Ug×!,¸Þ’Ñ&Ò%ç°àkÞñøóÕ¿úÓOHxG yQ‹¶à|ÃÁ€«û!xí(ÏüøÕN*ÚO¬K¸:P·ÝXÿøckkÒƒ1U¸¯!ÿøÀWñô×À ßUFŽ ¬8Àoq€K3„4âû¿šÅàHWΕúk„W÷Dîá«~>ð†—7s„i{ŽEžŒ pŠà+'$ö?6+Öë= àúÍ´¶¸¡/¿‹&\žº¯µŸ{ÒkS6z¬©!‘—Q< „paÅ’ÚyoD‰¶ôâÇÊ÷¿ûùÚéz'¸ºžeÓÏ!égÀÉ‚ûNðuþß"˜ÞPÆ.>ÿüçùÊH°É]/‹ÓJí«×݃™x=ºG֮ޡo{éåâ%úTžògî>Öº­qïdô¹ïqP¹zŸá\b^¦çÔg6ñãМÎó..ABx¬r¶®Ñ‚«»¦k vɽ¾áâòòÍÜ/Зyoæ°5¥'y}H—L¡:Òåõ¼=GAq‘ÖéZ žç·9µ5í^uß[ÍYôýÁîÕóºbÁ?eúÑ„+¯ËÎÕÔ«Š×^ý±39„k¯kpéuq[MéÊëJw›¯«ž×EÏëàœ¥€³òÍbyÝÑpfß•×Å—^G6|Ôëb_÷FxÕ}/¶×AÐÉóºÚëFªÕ)¸€ëÓñÕóºlÁµ×µâ‡öºd6^{]ƒGuUQ{YÀ•×å-]ö:€+¯Ëž×¥­©:åu±eÎÊë²Oê«h{]´í>êupÆáU÷=Û^W`ÄÍÉôºC23y±.öÍhžœlwáu³W^G¶W“®¼®Ã¥×•m& ®¼. y]²½î úºµ½® Ý“çu¹]r£gØjKOÚ¼¶×å­©º!¯“;„+¯«m~W^WaÈ|{nDÁ¿mAåði 𧇇›/oCø —·!\O¤­Ð+ýiS:ÇBøÒ¹ Ú„‰8‰¯BϬX™¤špé\s»ÕMúÓ!Î&<« :¹þdÁÝ{ïªì{ì5$„Wr5ôý{cOìxÁ9fL"¥ÌóÖ´;¼Š&áRÔ.øÉÞ¥Š^ôÊfÛþ)«[2_Ü“™¯ßÞíj?jHtqÞöÃ]Ü0ÄM€ß7®ã&Ù³õ“ú*™®]æ^>@¸7É5/Àutm«<Ë€jÁUt 0ü{ óü¦E€Kón¼b^€Ëd,LekG® á,¾ânŸ(~È`^„'%$æ=ý»Á‚»æU SA€«…3\]Êæ°G¸D_þü~0ÃØñ¾3¶{ðäyGÊ#ðêVA_Ûµ¯òõ¼5¦ãÁ¹nû24ÂoñàߎŸ‘ 2/~Û|šI« fôàß¶Ëø–5M±àC|êYðªcpWðþ¯²ÞÆ»l £à~Àƒc'¯8›|ßD8hHÂßÿzvò7î–†œÔGl6kƒ5 „Gæ°Þ`YáY ™í¾o ¾\ þMsmqeí4kø§ß9ËÞÍUm`æÖ÷}¼ Ijëüú²ÓMøà¦Sß‹pÅU§ÙãªvãWíp¹`DP‡GxöXC–ÃzêÃZÀ5-Kæ5Ͱº'àŠ’òöÁ¼¦—©U—^ÜuU„ë¢/}îZ+Øß·V°¿o­`?²V ½ƒ·…,ø¨wÐÖ†“ò¡j{d¥®oôζw0zGt¼£vékÞ]ï(`Þ»júûûjúûûjúû‘š¾ôŽƒâ;zGD羽wôµé·±¥ë"j°½#:p]ºŸ¼£zÞ¥ûý}µ÷ý}µ÷ý}µ÷ýHí]zGÚöYõŽ Þp]bgÛ;xkö]yG_oʺªnÃu‰}À;î—Ø÷÷ÕÈ÷÷ÕÈ÷÷ÕÈ÷#5réªjJõX^p͘fÛ; 'àQÍ?ÎÌR¶vãu)| ï¸_ ßßWŒÞßWŒF¸žÚ½8þ#ÏAUEŠa¸S©5˜piÅÙ|äãT¥fž?5|WùÌ-'V;À NŒðâ=£bÒÔ÷¾žáüãÝØ Ô¾zä׿›„_¤Ú.Å‚Èuº«ß¡‡p½o±]{¤½n2áC±ãäńӃúÌó:U=—M¯+°_UÀ%g)#±àÒŠ”û}»ûÇØO3{û!…‚)Ã4 Îb QÀÕC>ÙVpEÖ€pE ç­7uW~Cb÷ÿØa×S]žLÛ‚úfF縮e“¡ºSÜ´áQÑ2Û7LÌ„geÝ8¢ºW[u‡ð–ÜñnÁ—ƒÿò”ðåàwÇ» _ ~w¼›ðÅàwÇ»œr( ™Ü*ÿî«I‹iŒEÄ kÕˆÇ%ÀIå ÙÖ3ŽK€ú&;Ò³ò`PÝûχ‡KUÂü†ƒ*¿á Š€_PEÀ¯?¨"à2ï&Þ>\:Á²ÿñW{†ÞÁ:ædÁ«:lÛ8{U•¢ÒCÚß}û@ƒá¼0Gøàɘù"\ ™LÎZABÃ!<ªxl'™xVBÖ FvÆÕòqàø;äÒ€ðH£Þ\b¨Nn¬ðìl¬YSlZ™zÅìß/o9“N{ kÕ‚ßR†Døp2šðÅ|éN‘&|1_^Ö9ŽÀ³çóî[ÐûýÈVɳó¶_vŠðñÕ…bÂõê‚mNkW&<*ïpx6ìäðììäY1ÜÞ5\n0%w— ³{"—F¤g÷4åvtd¨R€ áz7K¶íƒááQï:1v¸ÞÍ’¬ý$b;Ê~ª¡úãŒÒñ*WdOÂIÓS;CEÚ‹ð¡ õ„7áš= ÔèþûœLeÛÎü‚³3å¨ ¶ýÊ€·ïïmÆŠéê=ˆo“»MLŽÞØëûoÏ}¯“û áeñ`ûê÷Ÿ¦¡8 uq+ûgøi¸f8|ÕîÉpoÐsö›ðvçl¤Ax*~j£{±ÀÛëþ¥e'uHÈa~Ï~âÆÊ·ý_»‹ FRH„Hðþø÷ÎÙdÀɺ°ý´ä3›p}éòü`¿èͶt½ûͽÊ0Yp×I¼‹Kµ¿ƒ…p–äfçÙã& ®WbûíÆïpl~ðucrïÞ©ûS+Ï_ý _…ëÇõ¿®{fþ{ûùüàhÅ‹=íÿ¿žÎî¬!wü!«÷ÓÏ»•þ¸ÿó¿Î¼xüê·÷Õ¦ ™« 6†‘6'ã¾ÞÆ2 )bKçÐðU!ôëG’0.óR"ÛÖÍKéëm|ýÞ„¤y°s´àjåÁmc«]|½ÿ¼5!f‘Ðjãy»¹„Ë6',œXÏ¾ÞÆðÇÁ1ÓnÕ–pí¾—ð m‰áj\¶à*tE{\à ÀWÛ¿4!3Û¡+Èœ·ÔÆõ·?ÿ4ø4« ®œû®w’—ø2ÃÓÁ†Ó*Ülƒ WUçÓáì¥oÍ’pö|¨ê´Ö”^]¸Lk§dëþêüÃB§ù G-å”ߟ~(^> ŽÏ žÅmÒ©= !àÊŠÜöð¿zµ‡É1½?»ŠWÁ>Â÷ކŽ$ä‹–ðY¥Þµ›!Úz|8°º G€+uq<·qŽBÁ¹&€k=¶wË_}Õ‹ŒÃ¡e!ŠàN=S:Ãê:î©Ï ‡W,\=YƒU(8½bÂõ­V¨=^(^ÌÆ«PûùžÀ2ˆ û\ÖB6Ÿ`.“×W(&\-NÍ;|é%Ù,4¯LÉ„+ûä♤˜pmŸd™ä4°,¸²O¢äšÄ‚“DÕ%¿à´_؇<“° OÞ çŸÐó¬Ç “œGµ«;<>ÁôUbû!ÿ‰ y€“ßžÞV¾2矾à¿!‡Ù¦d“±`dᛞ=å0Áí;&!dÔÖÖÓ‹Ç÷gÛµ=ßTÒÙ›¡ U)ÔUÍ•,xö|(»ÕžCÄ7{Äá·H¢bÙ£bWÒ7< }ˆded!ü†¾ÿü÷»ôCq‚~×¼€³±KÈ ú=ð ¸>Wœy¸k^À«f &c S‰\Ó§rŽ aQ¾½¥ýò®—m{@ÂKc6‘̾+f©˜ÌÆé» »ÔvóWòjnÌž†^Šôƒ,QÔ6)ïîã½7÷Ú“‰_°cò±ÙøåÌrYusÆ ïÝÝÇ{wC¼÷o²Óé5Ðਮwñïß¶y¬°¦‹öA¸žùcº¨`„×i`øöê'^õWVεéO¾ øš‚_ý¬ç”MZ}Ÿ’a¤‹RC¯n!ýûmÞ{JéÂö Ÿå™›­a h¹¹ó¯Ç””¼iæ ×=9ÅhL_¸6ªàòò“ÏGsŒ0ÍÕ‚ÙÆÐg)}p؆ÏΩœ«Ý'áê îçä¦/j˜Ûu=H¼®FY PðÎ-LÅ5œ _XÑ5œ ŸU«c¸8[ð R &}i8 ¾´¢3KõÒ²€{s¤6\b ^Ù)z naj1†õaT‡†{ºoX?Ý7¬ŸîÖOWë“C˜ð[†õ“[Ô§<0¬Ÿ®ÖX¬AøŠwìî‹Ú»û¢öîú¨}ï|9ø/GíÝ}Q{w_ÔÞùQ; DíÝHÔ~†9}ÒÅN;qØ´s ®K:lîÞùð’© ·.>ß—™!”×O؆{éO¾ÝwnÜl¹Ü¢ł/ÍëæI#×ñæF1.Ÿî‹ O÷E…§û¢ÂÓ•Qáä6&ü–¨ðäE…Â#Qá龨ðäG…2.<µ´˜ðdãw÷M&»û&“Ý “Iß¼‡ðeè¹<™ìî›Lv÷M&»&“h6þ†Éä·_Þ‰}2q×”>+és³Ïo,3‡¡òAyç·õâØ“ú°¾o_Âgµs£¯pý‰¿/îá’{'¤_}ДGೊoSþãîôõúõ/mÌl¬ÇhíÑUÀ£¢SO’$b=¶ ø,[è²Ü§n„“ˆ0en æªÿ] ®ngŽN¨ ™ykö]]}pÕ‡¯ ‚4¢yذzTü|ž×ôÌ_̾ËrÉ–K(ý«j™÷ê>¯’[š7Î1›piÞÂÁ3/›ðYhÚôµfÞê˜w¦9[æ ÛØ×‚®ÌÚu'8l—ð[Ì[óŠì˜·9€¯™÷Û³·7¬Ïê¾úÚwÛ"<©Í†•ܾ/à¦".7þÑ~‡6šÃmg~ƒ}>ó ¿¼ACy]êûÅ.Ÿ àmX+š?ÃoÔ<« o^s'¦×?÷ì$Žõ}^pÑ÷CRÙ‚þJßÏðûþÚwnDî©-Ÿ°)ásеgq=öa}é•cKìØyÝÿ´sâÍ·£óžôƒAù²æÏð5›’d¿î˜3¤£×u¸rœÊzZùú_O+yHCÇã0&\Íüu;à›gøú€MIeÐ7'²àÚ7çj:WÜv¾¶¿/Üß— îïK÷÷¥‚Oº²|®íª×1 ð¢o:;„ëÚûûRÁýP*¸¿/Üß— îïK÷÷¥‚W/¡ôSIê#Ö~‹yïJ÷C©à~(”}Ÿû¤Œp©L}_ÀME\nü÷wÍ:…µì×—•\•tZýYï5ì â.«"±mœR»ý \‚p²n,YäI¢Ò„pNzéøüƒÜzBÀ‹S#àÑKHôˆ‹&\õ½Ý’³f¸×pÅ3œ-õ”“ÌX‡ç˜\.¶óÏWî¿GîeAÚÏ.ÇúïTÝ]ÿý‰Î.ñÕ뇷p‡_Áòž_­™àj)°ìã¦c“¤áÖžO²ÜùtŸ-›ðâä׋­ÂÙ‚•ȶÁTjÕók—)jl¥ZR5‘ ÷÷¡»{>Ü­gé‚/ZCÐFÿœ‘k8¾°¢k8>k3<˜úÁ#„vÂ6\Ê|iŇK[z?FÎ Ðì›×='šô!à ›<.ADÖO÷ ë§û†õÓ}ÃúéÊa­T÷ä딆õÓ}Ãúé¾aý44¬Ý¢J°™§¨ |xEL}ÙI0áÉK>³þÁ„__TA¸[¢÷‹*NQåô`w¼XTù¸©¨’-xUÀ÷nQåã¾¢ÊÇPQåcw_J°»/%Ø]›È9}ç¤XÖXI v÷¥»ûR‚ݵ) FwcÇããŸçà,á 9þàm=ÂÉÙòÖ×lR\óÅêTWà±Á½kðrX§÷î:Êx o_Áùå͹ÂìðCÊ.üà|5œ¾ÿhp{·àὈLxTïL ®+Ñ‚»ëЇ¯v½y¬>ÖÆC [UDÀWÚ8bEÙÆMH&\µ‘“ÓFjwF øJG\E·q2ჶ†@"à~ÛëK¯Ý´6¿‹/¼ºðs}ôði(ô Ü\]¦›>÷2,­xàê|ŊϽ46ÐÓå^Çp*\òó>bí»Ñ Ê&\iˆ½±HmQYÀ×ÚØGlŠ›·lÁµý6 ¾ÒÆ@ÊÏç­-ý!Ùp•÷î+–žfÿ«Þû‚ð¥­g ÿ¸z$'^lú‚¾Ö“çÞÆ±¹!¶ñÙkc ·&|-c7Õ„é1W´àkm„13hë züØ]9®”ÜocŠÎòYä΂/œ´àY1…¶_ä噫|F€zp—}¸gË®_§"«ñx½„«l¬sÒIåˆfãõ•¶mÚÝ7H 8I!íÊì5“p¶v«5\ó\½žÜ_/%vøî>Ãíî3Üî>ÃAáUŽÈµ¨ ÏNJ¡-Ú/pòÒè¥E-xöêßK‹6ø‡9âŽ'V©Î¶áâlõá‚g¸l«c÷ vhM¦tµ ,t~Z܇pY®ä­)çXèMÜqnõ჆;öÊ‚õ^Aw÷™wwŸyw÷™VÐ]tínÂum«Øv6|é—Ç%À³Wý[‰ÇwàçîÁÉN`Û¿îoȨŽÍé©O9¿bߢ8»ÒÝÔ·ÁW³Ç_˜wŒ¶‘L¸:”ߟ+{ùõ;:ÙÉPO^ž?Mã^㬦E ÿíëàÅKQéñêqÓ#dá/ªd7÷¯Fôè^/ðòçuDnU¥ÝªlR&£ZãÃG¹Tì[1®rÑ–.r©vgðZãÝ—,|´ñý²'Oz§uºÜøGv‹2±Úü&b„³ µ¹úâ÷ý1z5öØk¸Å—=饕©}§}}|0ÜüÃ|áuõ²á`ßf$oÀºÈëïi.»˜§îu"sž·íB_vÑC(}ïF›Þ÷É{€ûåéÞ"‡1ë£Çs¹œŠC:Š»nñŠ¤Ã“h¾x7›4$›¯oûËvþ€ø¸ÏÏ\ùü×Õÿë>ÿþl6þxÑ@[÷Sÿî¶ žüaý1âj¶®Á‚kïÙJû•ôï#ðEgÇ;úN—׈ˆy¤èuz÷ÂÕø¾Í`Ó-yùŒºfk„Ë+¡Ï×RˆúîÖÌö0«ò4ÖFˆíWmŒ=¶¯´±Ž´&×·çÙFÑ#Âý6Â,军T½Hðân)ÙãlBÞdÄ(!@éRÀ£çPuDº?eí!ò…a‡š-xÒZè²±î÷d(¼²·ûb_ÞòëeJëoÑ}Ûé»ÉS¸_åRoÿë=ö‰BÜèÜà«BÞß.§'ÅÝ}ôÏóÊsôæ†`Á{ñ’S3èÌþÙ2®/™g žWºøq_?nèb²àî†õµ.~Œt ¤7tqdßò²ï\)bÛ4”f·‹?†º¸»¯‹»¦×º¸»ÜE}=vqw¹‹Ç“ªùó¯Åaܯ¡¼ÿ®ö¨Ãüõ¾ÿ~ýüë‡^ˆþ‚~P;1Ò„ð}ƒWž]ø›+ýÁ‘¾‘pOúƒ#á}§â4ž½ËË\-ÂK!­äiˆiEHƒ«ž(äÍíɃד‡`ÂeO6Rˆ×“¯'RˆÓ² áÇyúËÁQWpÝùÿõ0òÕÞÿêw«æÇ¯^ÜjâHO^†z²¿¯'#sÁ¤3H8{9£âÐÆ÷~ öâoäÎ øq^u‡ï;²ˆ0–àKx3ƒl ñçˆKÒ›ü™í}„¬)‚º"Èo °Kð%|@t¾:5½ðƒ5EôYcZ1iûÓ<–UKøeE¬JÕï#¹÷š"z° +&…Ü{ËX%|À#¦‹ðÕõNWÇš@ÔcDòG)d¿ÁóˆU¸§ˆÚ1_tuŒŠè1"ù£ÒWò ˆËðõAWÇ©ˆ#¢?J!5 ^ª´ ¿¬ˆøzŒ «c„TDÉ¥¹eÙUø€G\†¯Ç¾!(y?6%¹MᑱwÁéóB°1øzŒàòTĈì7e$F¬Áq¾#ø†<Ñc„ûVùñ«Ë1b> ˆËðõÁ7䨈ÑoÊHŒXƒ(â2|=FÄ«cÄTÚñ—?6ÅÛq$F¬Á‚åeøzŒˆWÇ©ˆ#²·ã@ŒX…_VÄ|=FÄ«c„TÄŸ,Ä‘±ðˆËðõ¯ŽR#|²GbÄ|@—áë1"]#!ªÝ4ÑáGçôãvê1‚½5Uøå¼èí´¿$ÄÑv Ïkcðõ@”®DqÊy?6ÅŸÔã½E™UøåBýä]°Õá—„¸Ú.<_véêhljó~lŠÏdSvìÕÚVá—+íJC (õJûª[ÛÇ7³h¾RÓÕ!Uj»‡ÔìÓåÔC*{½Uøå*öš¶{{UÈ€¶/Ã×ãv¾:·ã©¦üØ.Í#q{ ~mܦË~Iˆ—IÇí|uÜæPÒ~lŠ?a瑸½¿2no1çü’OÛá䆃ðõ¸¯¯v˜%3Äm¿ºGâöüʸ}hd»›¦Ã/ ñ" Þ„¯Çí|}IMhâ¶_ÂÈ#q{ ~eÜVÚ†¸½&d@Û—áëqûñí´|èã]Hø¾=Ea†«¯Ü—÷„ðàÁ½©iÿíùé×®4”N¯4~þ¸m7b ¸r‡H”Î?”éE\»É4¥—y.ß±Í}ËôþûîÛÛù+Qvùëö¹ÃІoâÖ‚ËiySóYÁrîßT..o¨Ó6žˆ L¸8CVi{V°ðàM™ÛÁ/fã¨:o¸xoöxÚ©´¯~})6\¥» Â×ä¤ÞÅßÏcð©]*¹äŸÿ48;]dyIOmIêþ1<ÀãÁ9»ô/È ^xôâ¹€×ê~U@È|½òþßExðæîýcíð0]ÿóô×nï\ô=À8À[ žôeØáüƒz´]Ä%á,¾ •Àwz>›põîÛiÒÓnszlЄÛu³ãÞ£h®æŸí¹ñúE7Ž\?øyÁ¸µÛË(ÎÞÈQû0“£æßœiñë)>mуAç\›÷ówk¼ã+á®î.É VGx1áê¾á0Û†›B²àêʯ—²&‘îÈ혀“~œàDl+8§`Áyú"ù”ð‘‘ñ)¾Á÷Ÿï"é.ƒÊ”ì`Õïo“pó–*Ãi{:$àúóbLe§a7~Ö_YÓ„X*œ‡³k¬’ÙxýŠn8÷=x—dK¸~ýõì6Aª'{„ËkÀ¾®@[ºM‚^À™Çj(Õ‚ëd¬›÷ÇóçC©‹ÁïO·8zÿúï½ýêµ±Æ!¸’ÛÓgûŸ´ûcšAä3.åA¸(ßW;O î]"8̪|ƒôWW{Oú¦ç3?yÀ>î2ûŸyÎ#pQÓÙÄØè„|÷0r»þ@À¥y©ßdøêó-‡å43ØÆ—m ´-fC?õ/à+m|üŒ¼Æ4Ã%:yGá®æñJvZY›pu™[›¡yGµàÁs•8D2û®²ˆPƒ8„M¸ž@’ÓlÁ±ntPï'¿6¢`©¦êêäúÐã§í,ó2Û¬!ÍÉ„KóÒì°†BÑ„ë»þ“ÄwÐÕæíéµyKvÌÛª®Í›=ó’—æ9“c^ž-øªyÙ5o²Í›'6ájô×¼Ù„«,"Ǽ¹Xp9ûm§b&!Û™LøÂ fËî§qmÂcܲûQwÁ‚/œ švOÙ–® óˆÝ£g÷Ì^Ô&\SÇà±E6áæÖ°Ž\Û½ÁµÝ£)]ÙçêÙ½˜pe÷2»ãÝ‚/ìÎöxçÙ„ßf÷äzF‡s2á*œ÷b€ï¹&®ì>yv!-Ùá|[9šU“7Þ'òâ<›pm÷4b÷äÙ=Îöxï/ì øÂîeÄîÙï½ïÚî™MøÈx?6K«l×µÏWµvdÁµÝ[ßµÝÙl¼ïÕ)‘¡fÇî4yq>™}Wk©ÛVÁRã}9bvŠ@SK¯Wí^¼8ßW¥Ôü.ÜâÍï-…ÑvŸŠ Wã²g÷dÁuœor™à6¸öŽ–<. _D'»—/ ˆ#Ù_q²¿Ò² ¢Ù÷Uï¨^TààÕŒ« ×QÁãnM¸zjŠ Õ©}tö¤Ã™Òµw4ßÔᢘҵw¤Ùñ޹˜ðâTÕÞ,¸ôŽCDó¸A4á«Þ1»¹‚³`”C2áƒÔ/×Ù„+ïè‘Kç Ù‚/(@µ ÞGÒP-ø‚$/*ØpM‡rÄùÊ9#eáÚ³—+Ä:`÷Ϫ³iwö8a0áÊîÝpÊî3›pmw/*`PéðˆŽÝ1Íêð7(Üàzð³7$ >˜#FXíB¸¶;ä !xv§ÙÉ1¹^%²3ä\MøMvn®P½äÑl¼öŽžbê\!›p¢Ye–¥„Ü\Á› ¢ WQ¢WÄü8 ƒ[¬Éó2á:“Œ^®PM¸fŽa “ìðEÅ :Þ!byÞÑ8û‚Z®yFö¨E0áÃuD®bGpËÄb` ÕƒWG¤ì•‰ÃlÂUì gΡ‡½ØázÇT-ø’Nx "[ðEì#ÞÁW{G°á*v´Æ/bG°à žQmïȳi¸Uï°«§0êxòŒÝLÒ›Yæh•w¸[È„/èDr„×ÞÑæô5žðAžA¸„pí Å‚/xFrbG` ¾êÉ›Yú%]“d®k’N"#ÑÉõ/vˆ©;¹3‹“wÈy-y,4oÊ)&<:“òZi+$·´å–4Mé ÊvP‰ÅÔü"]¢)nI“=·Aв›ÐÀÊdÈ®ÛÌ^PÉ\»MôÜFLxÙv›‡¯Ç¬­hSL¸r›ìUD“ÙxÍrj¶£M˜Léˤ֎69“_„žyÄmŠ[ ^E4™p½âY½Jx6á:õÜFÌÖnE”œ•¯*Â…[ ^Í K2Á­ˆv’¤i/™ðE½| "¼Š(MnÍËìûªwÔkYލy…ê•ây›píîn–hÁµôí(Úî³_Ô>òHí£ºQaöìž-øÒ »ŸŠdÁNGì>_›¡fÑ÷Ù î:I5áºîE6¥G\+èðÅdâ²[³ñ£ü%Ì6|8* ®Ù-»Q!Zð5ï É äUD³  ÈÿÉ­ˆÎn%¼ZðE,{«§Ñ‚/¢{vŸM¸v‚4hºvõ”¢ ¿)*»·1;«§ gkr+¢ÞÞÆ\² N1Ù‚/¢‚·>6™_°[»~¤&&\m#çâZ®Ù­·è^MÕ 2žÉlü"ÅÙlAä. xÌ·¹y˪^1,#­"¯TÊ‘=·I|Qîð’ÜTG~©”¼r‡)}T‚çÙ„ëeÕÙu ®·d´‰tÉ9,øšw<þã|µÁ¯þôÞQC^Ô¢-8ßp0àê~ÞFg; ä3?~µ“ŠöÓëÒ®Ôm7Öß?þØÂÚ‡ô`LÕîkÈ?>ðE<ý5pBÂw•‘#(+Nð[œàÒ !8Áþ¯æC18Ò•s¥~àáÕ=‘{øªŸ¼á„ÀåÍaÚžãE‘'cœâøÊ ‰ýßÍŠõzO¸~3­-nèËï¢ —§îkíçÞ…ôZà” Â…kjgHäeT(!\X±¤vÆGÞQ¢-½ø±òýï~¾vºÞ ®®gÙôsHúp²à¾|ÿ·¦7”±‹Ï?ÿy¾2lr×#ÂËâ´Rûêu÷`&Bî‘5„«cèÛ^Dz¹xɇ>•'„ü»µî_kÜ;}î{T®ÞgxW§Ø£W é95ÂÅ™Íp¬Ã84§ó|„‹K«œ­k´àê®éÚ‚]r¯ï@¸¸¼|3÷ 4ÄeÞ›9lMéI^ßÒ%S¨Žty}oÏQP\¤uºÄ‚çyÀmNgmM»WÝ÷Vs}?„G°{õ¼®˜GðO™~4áÊë²³D5õª"µ×Egÿ@ìLáÚë\z]ÜVSºòºÒÝfÅëªçuÑó:8g)à¬|³X^w4œÙwåu±Ã¥×‘ õºØ×½^uß‹íuô_gò¼®öº‘ªGu .àút|õ¼.[píu­ø¡½.™×^×àQ]UÔApåuyK—½àÊë²çuikªNy]l™³òºìÀ“ú*Ú^m»zœñAxÕ}϶×qs2½îÌL^¬‹}3š€''Û]xÝlÁ•×Eg†íÕd„+¯ëpéue›É‚+¯KC^—l¯;¨¾nm¯+h÷äy]n—Üè¶ÚÒ“6¯íuykªnÈëdÅáÊëj›ß•×U2ßžQðo[P9|ÚüéááæËÛ~Ãåm×i+ôJڔα¾t.ß6a"Nâ«Ð3+V&©&\:×Ünu“þt‚³ Ïj‚N®?Yp÷Þ»*û{ á•\ }ÿÞØ»^pŽ“€Géó¼5í¯¢I¸Tµ ~²w©¢€½²Ù¶ÊêÃ–ÌÆ÷dæëã·w»Ú]œ·ý°ÂE7L#qà·ÄM„ë¸Iöl=Á„‡ð¤¾J¦k—¹—îÇMrÍ p]Û*Ï2 Zp] ÿ^BǼÿ‡iàÒ¼›¯˜à2 SÙÚ‘+A€B8‹¯¸Û'Š2˜áI ɆyOÿn°à®yU€ÂTà*@á W—²yìîÑ—?¿Ì0v¼oÇŒíx§éÔ÷Á"\qÕiö¸ªÝxÅU;\.Ôáž=Öå°žú°pMËÒƒyM3¬î ¸¢¤¼}0¯i†„DÀejÕ¥w]áºèK`Ÿ»Ö ö÷­ìï[+جHïàm! >ê´µá¤|¨ÚÞY©€ë½³íŒÞï¨]úšwD×; ˜÷®šþþ¾šþþ¾šþ~¤¦/½ã x³ï£ÞÑ;ªç}-GzÇÁml麈lïˆ\—îç羽w@é~_í}_í}_í}?R{—Þ‘¶ý@ÂG½#ƒw \—ØÙöÞš}WÞÑ×›²®ªÛp]bð€û%öý}5òý}5òý}5òýH\zǪšÒG½–\3¦Ùö¨Å xTó3³”­Ýx] È;î—Â÷÷£÷÷£®g€v/ŽÿÈÂsPU‘bîTj &\Zq6ù8U©Ù„'žõ¢–wùX–™ëÄS–ÏOÍÀÕC>sˉÕ0¨#¼xÏߨ˜4õ½¯ûG~m^GØðTÛuW“N—]õÛñ®w$¶ ´?M&|(*œì^L8=¨Ï<²áQUjÙô§;Q\²‘2.íC¹ß¤»Œýœ²·ÓQ(˜2<-ƒð±°+\=Ñ“mWäWtoÞz“r5á7¤lñP=ÕåùÀ¡-ø¨oft.€ë*5ª;EDá²}óȱLxVÖ#ª{µUw\Éï|9ø/O&_~w¼›ðÅàwÇ» _ ~w¼[ðÁÉ„ÁÉ­¦ï¾‡´˜ ƒL³*ÎE—ã½Ìöx/°áMÀõÊ™P1ÍB¸,*–Öø5§-]uóê0ø ê ò„“j;Ùª›p¼GuÅc·‡×n¼R]Q]í'7¦1ÕmçbÁGUqÈ\ªŽœ¢b.PTDxTBìäþðïÚ𬅠¨ÖÀ½e0ÒûË“× n”-TÂ2rÐÛ!í‘|øÅ„ë}’Îãz˜w#\¯—çq½lÁ×ü§eça,"fX…FøhDŒ8.N*Éö°žq\|Ð7Ù‘ž•ó€êÞ><\:‚Fà7AAø GPüú#(~ý—y7ñöáÒÙ”ý¿Ú›4ôÂÕ1 ^Õ1ÚÆÆ«ª•ÒþîB çýè8‡LÆÌábÈdrVáQÅc;‰ÈìÀ³2° 0²çE¨îÆ}7„ß@õ¶CurËŒ€ggËÌšê`;ÊìT"fþüxy3™tÚ]«ü–#‡ ŒÑ„/æKwŠ4á‹ùò²æq+Ž<ÿÜ_ëÉqž=Ÿw_yÞïG6ÙHž·ýS„¯®× ÌhsZ•2áQy‡Ã³aŽ€ggΊáö®ár»Z)¹û_žÝ³¶4"=»ç$÷°W#{Ü@•d@×ûT²m çz?‰é´›àÀõ>•díMöpÈ“Æ(¥È=ñˆé /ªàÚ'M<íÜ -‡rÏÞ„k^4P}ûïgprm;§hÎÎd¢.ØöcþoßßÛ\ÓÕûß ï&wk——±×äßžûþ$÷?ÿØ.ÂËâ¿öÕï?MCqêâVãðvk…{N_?“ÙïQ<ÀÛ °‘á½.ýöºi¹B‚fÛ6.ßöí..¹Hx„qùþø÷ÎY¦çd]y~Z4™M¸¾¶x~°ßÄf[ºÞ?æ^˜,¸ë\$^–¥Ú_’B8Ëgf³óëq›€×k™ý~àw8x>ø>0€wïÜú©•ç¯þ…¯Âõ£ì_WH€]'ÿ½ý|v¶º‘àtŽbÿ÷Ûç¿ñ‡ÿM'7 ?ÞÕdëiññ5ó9šH¸ ×\îá dÀ_ÞÔH Ÿ+Ž?è}ÚlÂSÑm<ÃÕSµi ×#õÀ<>á‹ðÒdÂe”J±Áe¡È¦ê”‹lOË“Çä âV‚pQ?9è·i^æG‹Zp9 ÀîÒ©Ž|Ì„KÃqjp1;ÅäH—¢—['½Æ«‰#Ú—p*ŽšlÍǪ…œá2ñr §÷Vsqu¤ñê ·Æ—Ë#îøUvÛž¶Îœ~#.8n£îé}Ÿ“t>ËÓiŸGçO?à¿s²U7W1®æÓBÄéÁæb=§2\¨Ý&!Ã…pGŽÛó6ŸUa1}Á…×Qh{Ð$\&Ü!–³ti©Ø¡RѦCb|†óEÿ’©in¡²¤‹^wüJzG¨ .† Y†;~UuP9þßëíÍV¸8|¥VϾõá‡p9P¿’Qšt•î—dÓÏ}þø•Ly.Si>;pqù ——ß}m<ý€}§cAÍ„ËB÷|ª!œ~ˆÂçgcÄ¿šÕ©$ŒíÆ«d à’¸;vgö಄íIW##6xV{§Š vÏóg¸8þ ã|²½.z>/çrìž<ŸOC>¯Î<Žø¼:G½ñyd¼«¼¤×!éRu¡IW5hÃUæÛ5/C°§yU¹x Vªà R^êð:÷¬,¬xš/¦×鳡°¢r–3YϨ…ê88ù¼ÌAæ.]¨Ž³ÏË{ž¤–õv耴ûÜÙDÔ?Xpu]DhÒÕ1Ób÷]«-ôyiAP !S6‚Õñ« ƒ¥Ï¸“h^ÂéAÑ"Ò²ù43ž~ H6Ã!Û´á¢ïü¹ÍôôCW]šçmÎl“‘“In-ø’é~Á—äÖ‚/™îñc“Ü.à&Óý‚/É­ _0Ý#Ü$· ¸Ét¿àKrkÁ—L÷KuKrk©nÉt¿àKrkÂgƒ’In-ø’éžá rkÂL÷ _[¾`º_ð8Ôø%Ó=ÃäÖ„/˜î~‘„’ÉtÏ#nºT·!“é~ÁËÅHK&Ó=ÃäÖ„/˜î^Fú¾dº_ð%¹5á ¦{†/È­ _0ݯp±$·V¸X2Ý3|An-ø’é~Á—äÖ‚/™î¾ ·&œ-ÙäÖ‚/™î|InMø‚éžáõRÅŒL¦ûðùÃ’ÜZð`j“ÜšðEÖ†§!x¶|Þ$·&|ÁtÏðy¾dº_ð%¹5á ¦{†/È­ _0Ý3|QÝ’é~Á—äÖ„/˜îÎCðÓ=ÃäÖ„/˜î¾ ·&|Át¿àqÈç—L÷ ž†|>y>¿$·&<:>¿$·&<;ã}InMxõ¤/È­_2Ý/ø’Üšpr4¿$·&<:ÁjInM¸§º%¹5áÕƒ Ø%Óý‚—Ë^g2ÝsB¾ ·&|ÁtÏð¹5á ¦{†—‹“”ÉtÏt€/qX2™î|In-ø’éžá rkÁ—L÷ ¾$·&|Át0É­†³ÉtÏð¹5á ¦{†§K)1{˸<´ŒËÞ2.-ã²·ŒËC˸ì-ãòÐ2.{˸<´ŒËÞ2.-ã²·ŒËC˸ì-ãòÐ2.{˸<´ŒËÞ2.-ã²·ŒËC˸ì-ãòÐ2.{˸<´ŒËÞ2.-ã²·ŒËC˸ì-ãòÐ2.{˸<´ŒËÞ2.-ã²·ŒËC˸ì-ãòÐ2.{˸<´ŒËÞ2.-ã²·ŒËC˸ì-ãòÐ2.{˸<´ŒËÞ2.-ã²·ŒËC˸ì-ãòÐ2.{˸<´ŒËÞ2.-ã²·ŒËC˸ì-ãòÐ2.{˸<´ŒËÞ2.-ã²·ŒËC˸ì-ãòÐ2.{˸<´ŒËÞ2.-ã²·ŒËC˸ì-ãòÐ2.{˸<´ŒËÞ2.-ã²·ŒËC˸ì-ãòÐ2.{˸<´ŒËÞ2.-ã²·ŒËC˸ì-ãòÐ2.{˸<´ŒËÞ2.-ã²·ŒËC˸ì-ãòÐ2.{˸<´ŒËÞ2.-ã²·ŒËC˸ì-ãòÐ2.{˸<´ŒËÞ2.;˸ýþñíýÛÿü¿ÿç‡Ð2DyLP-1.10.4/Data/Netlib/standmps.mps.gz0000644000175200017520000003241210430174061016130 0ustar coincoin‹çK®9standmps.mps¥}A“ëÈÍäÝþ}Ü=¬BP%êøÞØŽuÏó„‡ãÏöÿÿ!Û­–ŠU•YàÌ©9"˜˜¨×L–~|ûå¯oí¿ßÖo?þò˯¿½ý¯ûOßÖoÿûÏúç?þç·?ÿéíã´o§ÓåtúíÒŽ$i8²pTÂQ GŸ×”pM ×”pM ×”pÍÇÑ÷_/.Ïï¿J8ºHø,]4|Ž.> G—> G—> G—‹ÏZÂÑEÂgáè¢á³pt±ðY8º”ðY8º„ÊK?×ÐÏ5ôs ý\C?×ÐÏ5ôs ý\C?×ÐÏ5ôs ý\C?×ÐÏ5ôs ý\C?×ÐÏ5ôs ý\C?×ÐÏ5ôs ý\c?5ä©!O yjÈSCžòÔ§†<5ä©!O yjÈÓBžò´§…<-äi!O yZÈÓBžò´çãè§»†Ž¾}~öÿ>Þ?ã~œ>“óGŽôqôóvÿ¾Ž$i8²pTÂQ GÏû·]SÂ5%\SÂ5%\SÂ55\SÃ55\SÃ55\SÃ5-\ÓÂ5-\ÓÂ5-\óqô÷_|?ÿþ#ýâûùñ™†ÏJø¬„Ï\?×”pM ×”pM ×”pM ×ÔpM ×ÔpM ×ÔpM ×´pM ×´pM ×|½ÿç“ãÏN¼ÿäûùzýzýq¦†35œ©áÌÎ,áLô•‹„\$ä"! ¹HÈEB.r‘‹„\$ä¢! ¹hÈEC.rÑ‹†\4ä¢! ¹XÈÅB.r±‹…\,äb! ¹XÈåq´þç¯ßþyyÞ±û‘„#}N™õûéòÛ%mgþÒ>{mŸýŸýhŸ}]EÂ5%\SÂ5%\SÂ5%\SÃ55\SÃ55\SÃ55\ÓÂ5-\ÓÂ5-\ÓÂ5-\³„k–pÍ®YÂ5K¸f ׬áš5\³†kÖpÍ®é?ûbˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†H`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†h`ˆ†X`ˆ†X`ˆ†X`ˆ†X`ˆ†X`ˆ†X`ˆ†X`ˆ†X`ˆ†X`ˆ†X`ˆ†X`ˆ†X`ˆ†X`ˆ†X`ˆ†X`ˆ†X`ˆ†X`ˆ†X`ˆ†X`Èã*ÿ½ÿûý|yI8úü÷»û,}þûÝ}Ž>ÿýî> GŸÿ~wŸ…£Ï¿»ÏÂÑ=O yJÈSBžò”§„<%ä)!O yJÈSBžòÔ§†<5ä©!O yjÈSCžòÔ§†<5ä©!O yZÈÓBžò´§…<-äi!O yZÈÓBž‘Ÿ%äYBž%äYBž%äYBž%äYBž%äYBž%äYBž5äYCž5äYCž5äYCž5äYCž5äYCž5äYCž×ç5äy y^Cž×ç5äy y^Cž×ç5äy y^CžKÈs y.!Ï%乄<—çò\BžKÈs y.!Ï%äy yÞBž·ç-äy yÞBž·ç-äy yÞBž·çÇÑOÿxÿý—ŸhÞ¾¦üûcdoj¶g;oÿçþ§¸çY2u–Ò³Z¶‡.Ëé­þ¶…K —á§“´zT"­ÞÎYoÛ_5Ýr*.\³áoºuHZ‡dT¢€µp9~:ië‚ië>KéY‡hÛã´^ êmár üt²V¯J¬ÕkGa­v„Ö:d£ t¨…ËðÓ©´СÒ:„ÏRzÖãñèö ´—põ¶p9~:ÕVo•ÔVo=ˆÚQ0¢¶ÕQ‰t¨…Ëð¯©!ÛÃx05fÎRzÖãÁ÷ö|$û¦†lÏÌsá_SC6»˜óæ¦F2|?5d3Œd_ÀÔÍ9 ÿš²Y0ÀÔ˜9KéYKÃfnɾ€©!›"þ55d3™€©1vãðçCð×?¼ÿy=Éù*eþô2l÷àrº>Ïú×7–ã;ʱ…¿OæøVOR‹ìÃ_r|“ë©¶n˰Ûíf ¸Y[¸+iŸuÎj @¶p·TQ*o›Å‡?­´Ûooåë/!üég0‚åøŽrláïÓ9ÚÉ.uþ’cd„ »Ýn–›µ…Àˆ2<«²…WpK Jåm3¶àð§á…u[Nõ¶\Ë>üéi0‚åøŽrláï“9~f©V÷á/9FFÔa·ÛͪDÐÅÿÔŸBÃewÖ^Ðû að§éÈ<©y€r|G9¶ð÷É{ó@¦æA¿Ûa˜²Y!Á<èŸæ€y ›Ãú0•mð§míÈ<©y€r|G9¶ð÷é_çL̓~·Ã<0d3À‚yÐ?+Ìó@6_-ôa*Û< áO³â‘y SóåøŽrláï“9öæL̓~·Ã<@‚®þ§þÇè„3Õ »ÒÍq]8ºôgf‡:áLµÈ®tsœAŽ.ý™Y'ÇáÓŠN8Sm²+ÝgÐ…£ @fÖÉqøÇÿNø„jK7•™¹<þþ½ýÄŸCìU[¹j+]ݶùI¢ G€þ̬“ãðÏúp¦Ú dW»9Π G€þ̬“ãðiC'œ©¶ÙÕnŽ3èÂÑ ?3ëä8üã}'œ©¶ÙÕnŽ3èÂÑ ?3ëä8|¦Ð gª­@vµ›ã ºptèÏÌ:9ÿDß ŸPmí¦2"S —ÇŸ©¿·ŸøÓ‚½jWm²kÛ¦gItáèП™urþñ½ÎTÛ€ìZ7ÇtáèП™ur>è„3Õ6 »ÖÍq]8ºôgf‡bï„3Õ6 »ÖÍq]8ºôgf‡ùï„3Õ6 »ÖÍq]8ºôgf‡Hï„O¨¶uS™‘ ¿ÿý¾-Õ¶A•¿Ôù3湫•ÿhž —.£p„7»þsöÑÃ_~y ï¼,ðu_ŸTÔåtÙ‡¿>XÕóWò}ÁpòÏýÂâYoÛvr½§)»pí‡Öß^Bètèž|çí„7y ßwèCd¹½õšr9__Ñ?wø`‡4rɈ\È%\2"— Éõýwmè:BW€® ]Gè ¨­œÚ ¨=~ëaDí7[^Â_Ÿ{jÓärS7uÄMÜÔ>7ß.×ÓEÞzUnjã¦nZc‡Øa€ÖØa#vàfièe„^zièe„^7 çfÜ¿1âæxÙ‡¿>«öÜÔAòÛ›Ÿä*€\e@®Ûé|+o½´¹J#WäªíöÖÑí­àöÖv{ëèöV@®ûF‚Û–‚£™.`¦Ë¶áh¦ ‹²m|:šéfzÿ…é™.|¦“äŸ;<Žfº€™.Û–#Ý0Ó¥÷ºIœéfºü±™.Ûµ`¦Ë¶·äh¦ ˜é²mF9šéfºl»PŽfº€™.Û¶•£™.`,j+ öøÍ•é™.|¦“ärS7uÄMÜÔ>733]º¿~û™.Û~¢£™.`¦Ë¶éh¦ ˜é²í<:šéfºl[•Žfº€™N¸Y7ÇïÐLÏtá3]ÀL—Þ;4q¦ ˜éòÇfºtö3]¶M`G3]ÀL—mרÑL0ÓuÛv4ÓÌtÝvÍtcQ· ÄG3]ÁLï¿´3=Ó•Ït’üsOÞÑLW0ÓuÛÄw¤› fºö^Š3]ÁL×?6ÓuÛëÌtÝvÍt3]·íƒG3]ÁL×mßàÑLW0ÓuÛhx4ÓŒEBmÔ¿}4=Ó•Ït’üQnj㦎¸©€›Úçff¦k÷×o?ÓuÛz4ÓÌtݶŒÍt3]·½¢G3]ÁL×mséÑLW0Ó 7 àæø=¨é™®|¦+˜éÚ{*Ît3]ÿØL×î/À~¦ë¶m÷h¦+˜éºíó=šé fºmÛvfº™nÛ>ߣ™n`,ÚöE£™n`¦÷_¼šžéÆg:Iþ¹‹úh¦˜é¶m»>ÒM3Ýz¯}Å™n`¦Û›é¶}g ˜é¶íß>šéfºm¾fº™nÛNn`¦Û¶5üh¦‹„Ú ¨=~ƒlz¦Ÿé$ù£ÜÔÆMqS7µÏÍÌL·î¯ß~¦Û¶gÿh¦˜é¶mò?šéfºm»ûfº™nÛ׌fº™N¸Y7Çï²MÏtã3ÝÀL·Þ»lq¦˜éöÇfºuö3ݶ/ZÍt3ݶofÍônø¯} ÷«„_3»|tއ˩÷[6®§^'Âÿ¹™¾¿˜¾Â;.&=.üÅ2ð öË»w-Å…KC—ºtiè2ƒ~µGø¯ßXí¯Éëi).'ÿŠþ¾Õ. ]FÐyi—#—–¼Œ:/ óÒ:/G:Ïj'gÉ“ÎkC×Qçt^[çõHçµ%¯£Î+è¼¶Îë‘γÚIçYò¤óÖÐmÔy·Öy;ÒykÉÛ¨ó:o­óv¤ó¬vÒy–<é|ièeÔù:_ZçˑΗ–|u¾€Î—Öùr¤ó¬vÒy–<é|mèuÔù :_[çë‘Î×–|u¾‚Î×Öùz¤ó¬vÒy–<éüÓñýÅÖ6Ö6Ò³N ;ï’ß<ß_<am#`m#=çŽn÷ýkmƒjï´®ž4¬mPòð¾oŽï/ް¶°¶‘ž¯`®óÒ’—Qçt^ZçåHçYí¤ó,yÒymè:꼂Îkë¼é¼¶äuÔy×Öy=ÒyV;é±¶AÉ÷:_ââD·ï_­m¬m´ç¯˜_Ûèö}Ï£µ‚µöìsgµO¬mPò¤óÚÐuÔy×Öy=ÒymÉë¨ó :¯­óz¤ó¬ö‰µ JžtÞº:o óÖ:oG:o-yuÞ@ç­uÞŽtžÕ>±¶AɓΗ†^F/ ó¥u¾é|iÉ—Qç è|i/G:ÏjŸXÛ äIçkC¯£ÎWÐùÚ:_t¾¶äë¨ót¾¶Î×#gµO¬mPò¤óO“Ì÷“LXÛXÛXÏJ3¿¶±¶<°ÑÚÆÀÚÆzNœô¯µ ª}bmƒ’‡÷}s|q„µµõ|&ókkË­m ¬m¬gS™ë<«}bmƒ’'׆®£Î+è¼¶Îë‘ÎkK^GWÐym×#gµO¬mPò¤óÖÐmÔy·Öy;ÒykÉÛ¨ó:o­óv¤ó¬ö‰µ Jžt¾4ô2ê|/­óåHçKK¾Œ:_@çKë|9ÒyVûÄÚ%O:_zu¾‚Î×Öùz¤óµ%_G¯ óµu¾é<«}bmƒ’Gÿﯗ‡Óäñ¥Ê¯´:»M7§ÓÞ±¬Ä³ÄHddlqgI«DF•‘©J¤U"£JÈD%i÷DF÷D@»Æf–x–8ɃŒ,/¾ÞV‰Œ*"S•H«DF•‰J.Úvm.ñ,q ’™a|½­U"D¦*‘V‰Œ*! •\¬ÝÝí`âYâ@$2²Éøz[%2ªDˆLU"­UB@&*¹”vOÊèžЮ±5&ž%Dò #¯·U"£J€ÈT%Ò*‘Q%d¢’Km÷¤ŽîIí›fâYâ@$2²Öøz[%2ªDˆLU"­UB@&*¹<\0lÝ%8¼c§Ù/œ„¯»HxÇt³_8 _w‘p\‰´J𺋄ãJ.Òî \w‘ðŽÑf¿p¾î"á;Î~á$|ÝEÂq%Ò*Áë.Ž+¹h»'pÝEÂ;œýÂIøº‹„wŒ:û…“ðu Ç•H«¯»H8®äbížÀu ï˜sö 'áë.Þ±ðìNÂ×]$W"­¼î"ḒKi÷®»HxǶ³_8 _w‘ð޹g¿p¾î"á¸i•àu Ç•\j»'pÝEÂ;†žýÂIøº‹„wl?û…“ðu Ç•H«¯»H8®äòpè°u—âðŽÕg¿pR¾î"áCÐ~á¤|ÝEÂq%Ò*Áë.Ž+¹H»'pÝEÂ;& ýÂIùº‹„w¬Bû…“òu Ç•H«¯»H8®ä¢ížÀu ïØƒö 'åë.Þ1íNÊ×]$W"­¼î"Ḓ‹µ{×]$¼cÚ/œ”¯»HxÇ^´_8)_w‘p\‰´J𺋄ãJ.¥Ý¸î"áKÑ~á¤|ÝEÂ;Æ£ýÂIùº‹„ãJ¤U‚×]$Wr©ížÀu ï˜ö 'åë.Þ±$íNÊ×]$W"­¼î"ḒËÃ=ÄÖ]†Ã;6¤ýÂÉøº‹„wÌJû…“ñu Ç•H«¯»H8®ä"ížÀu ï”ö 'ãë.Þ±1íNÆ×]$W"­¼î"Ḓ‹¶{×]$¼c]Ú/œŒ¯»HxÇà´_8_w‘p\‰´J𺋄ãJ.Öî \w‘ðŽ©i¿p2¾î"áëÓ~ád|ÝEÂq%Ò*Áë.Ž+¹”vO຋„wìNû…“ñu ö 'ãë.Ž+‘V ^w‘p\É¥¶{×]$¼c„Ú/œŒ¯»HxÇ.µ_8_w‘p\‰´J𺋄ãJ>Ngäïzu—Ér’}øïág`Ð:#×+ˆÚÓ¶…3ÕU2µùÂ[¨ä+üõ •.=ŠîJœy=òc‚JÙ‡¿~õÃ,º:ô©÷ÊiÙ‡¿nR=‹n}Æbx=ÝÊ>üu;Í)ti –# –Æ`Á rF¾>Ì`i Æ ««$Í`á &è®Ä4ƒ…3˜ «CÏ2X8ƒ º9ô,ƒ…3¡þCéŒüœDƒ¥i°@9#?'Ñ`i AVWI^ƒ…k0Fw%æ5X¸ctuèi ®ÁÝzZƒ…k0@—Æ`9Â`i  "gäã%ÜŒAVWI^ƒ9ƒ º+1¯ÁœÁ]zZƒ9ƒ º9ô´s#ôÏ?Œœ‘›h°6 V"gäß&¬Mƒ!Èê*Ék°:K_ƒ1º+1¯Áê,} ÆèêÐÓ¬ŽÁÒ×`Œn=­Áê,} èÒ,G,Á‚AäŒ|ûDƒƒ1Èê*Ék0g0Aw%æ5˜3˜ «COk0g0A7‡žÖ`Î`„þù‡Ð3z_ƒh°5 6"gô¾Ñ`k AVWI^ƒk0Fw%æ5ظctuèi 6®ÁÝzZƒk0@—Æ`9Â`i  "gôžÑàÆ` ²ºJòÌLÐ]‰y æ &èêÐÓÌLÐÍ¡§5˜3¡>ø8£÷³ˆ—¦Á‚ȽŸE4¸4 † ««$¯ÁÅ1XûŒÑ]‰y .ŽÁÚ×`Œ®=­ÁÅ1XûŒÑÍ¡§5¸8k_ƒº4ËKc°`9£÷òˆ7cÕU’×`Î`‚îJÌk0g0AW‡žÖ`Î`‚n=­ÁœÁýóAç½I4¸6 ®DÎè}L¢Áµi0Y]%y ®\ƒ1º+1¯Á•k0FW‡žÖàÊ5£›COkpå Ð¥1XŽ0XƒƒÈ½‡K4¸1ƒ¬®’¼stWb^ƒ9ƒ º:ô´stsèi æ Fèwcƒä|v²}øãÑ5xú,9_„™Y]%SßiqiÛmáÌ!À!)_DÜ~è+œù"ø"$ç‹ÐÓmÎ||’ôE\Ê>œù"À‹ógÉù"ƒ¥1X0ˆœ%ç‹Ð"3 ««$Í`á &è®Ä4ƒ…3˜ «CÏ2X8ƒ º9ô,ƒ…3¡ß ’óEx –¦ÁAä,9_„™Y]%y ®ÁÝ•˜×`áŒÑÕ¡§5X¸ctsèi ®Á]ƒåƒ¥1X0ˆœ%ç‹Ð"3 ««$¯ÁœÁÝ•˜×`Î`‚®=­ÁœÁÝzZƒ9ƒúÝØ 9_„×`m¬DÎ’óEh‘ÕU’×`u ¾¾Iù"‚«c0ðEðEHÎá5Xƒ/B€/B’¾ˆKÙ‡3_Øç,9_„×àÆ`Á r–œ/BˆÌ€¬®’¼stWb^ƒ9ƒ º:ô´stsèi æ Fèwcƒä|^ƒ­i°A9KΡDf@VWI^ƒk0Fw%æ5ظctuèi 6®ÁÝzZƒk0@—Æ`9Â`i  "gÉù"4€È Èê*Ék0g0Aw%æ5˜3˜ «COk0g0A7‡žÖ`Î`„~76HÎá5¸4 .DÎ’óEh‘ÕU’×àâ ||’òE .ŽÁÀ!À!9_„×àâ ||’ôE\Ê>œù"ÀÆwgÉù"¼7 ‘³ä|@ddu•ä5˜3˜ »óÌLÐÕ¡§5˜3˜ ›COk0g0B¿$ç‹ð\›W"gÉù"4€È Èê*ÉkpåŒÑ]‰y ®\ƒ1º:ô´W®ÁÝzZƒ+×`€.Ár„ÁÒ,DÎ’óEh‘ÕU’×`Î`‚îJÌk0g0AW‡žÖ`Î`‚n=­ÁœÁýnlМ/¢ì|Ú]ƒ NÏšñE|¤ì7Sø g ««dÎÙs=Õ}8óE(ðEhÆñé+ºîÙ/B/BS¾ˆå¤eÎ| |šòEœOVöáÌ6¶=kÎQv¾m®ÁƶgÍø"ƒ¥1ƒ¬®’4ƒ…3˜ »Ó Î`‚®=Ë`á &èæÐ³ Î`„~76hÎQv¾m®Á†ÆgÍø"¢KÓ`²ºJò,\ƒ1º+1¯ÁÂ5£«COk°p ÆèæÐÓ,\ƒº4ËKc°`9kÆ5¸1ƒ¬®’¼stWb^ƒ9ƒ º:ô´stsèi æ Fèwcƒæ|eç‹Ðöèl`~ÖŒ/"j°6 † ««$¯Áê | |šñED VÇ`à‹Pà‹Ð”/"h°:_„_„¦|AƒÕ1ø"ÀÆõgÍù"ÊΡíÑ5ظþ¬_DÔàÆ` ²ºJòÌLÐ]‰y æ &èêÐÓÌLÐÍ¡§5˜3¡ß šóE”/BÛ£kð…gÍø"¢[Ó`²ºJòl\ƒ1º+1¯ÁÆ5£«COk°q ÆèæÐÓl\ƒº4ËKc°`9kÆ5¸1ƒ¬®’¼stWb^ƒ9ƒ º:ô´stsèi æ Fèwcƒæ|eç‹Ðöè|AÉY3¾ˆ¨Á¥i0Y]%y .ŽÁÀ¡À¡_DÔàâ | |šòE .ŽÁÀ¡À¡)_DÐàâ |à‹iΚóE”/BÛ£kðÅ4gÍø"¢7cÕU’×`Î`‚îJÌk0g0AW‡žÖ`Î`‚n=­ÁœÁýnlМ/¢ì|Ú]ƒ/$:kÆ5¸6 † ««$¯Á•k0Fw%æ5¸r ÆèêÐÓ\¹ctsèi ®\ƒº4ËKc°`9kÆ5¸1ƒ¬®’¼stWb^ƒ9ƒ º:ô´stsèi æ Fèwcƒ¥|zÞù"¬=º_@v¶Œ/âCË>œ¬®’9PxÎ||–òE|‹öáÌaÀa¹ý"Â]ü g¾¾Ëø"}8óE€/ž;[Êá,Á‚Aäl_D`°4cÕU’f°ptWbšÁÂLÐÕ¡g,œÁÝz–ÁÂŒÐïÆKù"‚KÓ` r¶Œ/"j°4 † ««$¯ÁÂ5£»ó,\ƒ1º:ô´ ×`Œn=­ÁÂ5 Kc°a°4 ‘³e|Qƒƒ1Èê*Ék0g0Aw%æ5˜3˜ «COk0g0A7‡žÖ`Î`„~76XÊ4X›+‘³e|Qƒµi0Y]%y VÇ`à‹0à‹°”/"h°:_„_„åö‹wÑ1ø" ø",㋈¬ŽÁÀ¾Xöl)_DÐàÆ`Á r¶Œ/"jpc0Y]%y æ &è®Ä¼stuèi æ &èæÐÓÌŒÐïÆKù"‚[Ó`ƒ r¶Œ/"j°5 † ««$¯ÁÆ5£»ól\ƒ1º:ô´×`Œn=­ÁÆ5 Kc°a°4 ‘³e|Qƒƒ1Èê*Ék0g0Aw%æ5˜3˜ «COk0g0A7‡žÖ`Î`„~76XÊ4¸4 .DΖñED .Mƒ!Èê*Ékpq ¾¾Kù"‚Ç`à‹0à‹°Ü~á.:_„_„e|Qƒ‹c0ðE€/Ž?[Ê4¸1X0ˆœ-㋈ÜŒAVWI^ƒ9ƒ º+1¯ÁœÁ]zZƒ9ƒ º9ô´s#ô»±ÁR¾ˆ Áµip… â@Ò\›CÕU’×àÊ5£»ó\¹ctuèi ®\ƒ1º9ô´W®Á]ƒåƒ¥1X0ˆ8´7cÕU’×`Î`‚îJÌk0g0AW‡žÖ`Î`‚n=­ÁœÁýnl()_Ä›Ü^® ðE”Ô÷h|ä|݇3ÕU2¹ã‰”}8óEà‹(¹ý"ânâÐ%®}†ÁoõtÙ‡3_D¾ˆ’òEÔø &æÐ-‰.Ár„ÁÒ,DH–ÁÒŒAVWIšÁÂLÐ]‰i g0AW‡že°ptsèY g0B¿JÊ4Xš ’Ö`i AVWI^ƒ…k0Fw%æ5X¸ctuèi ®ÁÝzZƒ…k0@—Æ`9Â`i  "$­ÁÁdu•ä5˜3˜ »óÌLÐÕ¡§5˜3˜ ›COk0g0B¿JÊ4X›+’Ö`m AVWI^ƒÕ1ø" ðE”Ü~q· qè’GW‡žÖ`u ¾ˆ|%勨ñLÌ¡[]ƒåƒ¥1X0ˆ8´7cÕU’×`Î`‚îJÌk0g0AW‡žÖ`Î`‚n=­ÁœÁýnl()_DÐ`klDHZƒ­i0Y]%y 6®ÁÝ•˜×`ãŒÑÕ¡§5ظctsèi 6®Á]ƒåƒ¥1X0ˆ8´7cÕU’×`Î`‚îJÌk0g0AW‡žÖ`Î`‚n=­ÁœÁýnl()_DÐàÒ4¸@q i .Mƒ!Èê*Ékpq ¾ˆ|%·_DÜ­BºäÑÕ¡§5¸8_D¾ˆ’òEÔø &æÐ-‰.Ár„ÁÒ,DHZƒƒ1Èê*Ék0g0Aw%æ5˜3˜ «COk0g0A7‡žÖ`Î`„~76””/"hpm\!ˆ8´צÁdu•ä5¸r Æè®Ä¼W®Á]zZƒ+×`Œn=­Á•k0@—Æ`9Â`i  "$­ÁÁdu•ä5˜3˜ »óÌLÐÕ¡§5˜3˜ ›COk0g0B¿jÒ±¼„?]Wà‹¨)_„žýcû¯p²ºJ&=ËK8óETà‹¨)_D9]Ë>œù"*ðEÔœ/âv*ûp拨ÀQSߣq‰µ›C·$º4ËKc°`q YKc0Y]%i g0Aw%¦,œÁ]z–ÁÂLÐÍ¡g,œÁýnl¨I_Äòþxt]/¢¦|Aƒ¥i0Y]%y ®ÁÝ•˜×`áŒÑÕ¡§5X¸ctsèi ®Á]ƒåƒ¥1X0ˆ8´7cÕU’×`Î`‚îJÌk0g0AW‡žÖ`Î`‚n=­ÁœÁýnl¨I_Äòþxt]/¢¦|Aƒµi0Y]%y VÇ`à‹¨ÀQS¾ˆ Áê |ø"jÎq;•}8óETà‹¨©ïѸÄÚÍ¡[]ƒåƒ¥1X0ˆ8´7cÕU’×`Î`‚îJÌk0g0AW‡žÖ`Î`‚n=­ÁœÁýnl¨I_Äòþxt]/¢¦|Aƒ­i0Y]%y 6®ÁÝ•˜×`ãŒÑÕ¡§5ظctsèi 6®Á]ƒåƒ¥1X0ˆ8´7cÕU’×`Î`‚îJÌk0g0AW‡žÖ`Î`‚n=­ÁœÁýnl¨I_Äòþxt]/¢¦|AƒKÓ`²ºJò\ƒ/¢_DMù"‚Ç`à‹¨ÀQ»¾ˆ· .ŽÁÀQ/¢¦¾Gãk7‡nIti –# –Æ`Á â@ÒÜŒAVWI^ƒ9ƒ º+1¯ÁœÁ]zZƒ9ƒ º9ô´s#ô»±¡&}ËKøãÑu¾ˆšòE ®Mƒ!Èê*ÉkpåŒÑ]‰y ®\ƒ1º:ôô:¸r ÆèæÐÓ\¹ti –# –Æ`Á â@ÒÜŒAVWI^ƒ9ƒ º+1¯ÁœÁ]zZƒ9ƒ º9ô´s#ô»±ášôEÔ—ðÇ£ë+ðE\³ûEØ>œ¬®’üw=™/â |×Ü~þ»ŒáÌq¾ˆkʾËèÎ|Wà‹¸¦|ỌáÌq¾ˆkÒQ_®¯ÀqÍîaûp²ºJòßeÄLÐ]‰ùï2â &èêÐÓßeÄLÐÍ¡§¿Ëˆ3¡ß פ/¢¾„?]_/âšÝ/Âöá du•ä5X¸ctWb^ƒ…k0FW‡žÖ`áŒÑÍ¡§5X¸ti –# –Æ`Á â@ÒÜŒAVWI^ƒ9ƒ º+1¯ÁœÁ]zZƒ9ƒ º9ô´s#ô»±ášôEÔ—ðÇ£ë+ðE\³ûEØ>œ¬®’¼«c0ðE\/âšÛ/Âk°:_Äø"®)_DÐ`u ¾ˆ+ðE\S¾ˆ Áê |Wà‹¸&}õ%üñèú |×ì~¶g ««$¯ÁœÁÝ•˜×`Î`‚®=­ÁœÁÝzZƒ9ƒúÝØpMú"êKøãÑõø"®Ùý"lÎ@VWI^ƒk0Fw%æ5ظctuèi 6®ÁÝzZƒk0@—Æ`9Â`i  "$­ÁÁdu•ä5˜3˜ »óÌLÐÕ¡§5˜3˜ ›COk0g0B¿®I_D} <º¾_Ä5»_„íÃÈê*Ékpq ¾ˆ+ðE\sûEx .ŽÁÀq¾ˆkj¿ˆ ÁÅ1ø"®ÀqMù"‚Ç`à‹¸_Ä5鋨/áG×Wà‹¸f÷‹°}8Y]%y æ &è®Ä¼stuèi æ &èæÐÓÌŒÐïÆ†kÒQ_®¯ÀqÍîaûp²ºJò\¹ctWb^ƒ+×`Œ®=­Á•k0F7‡žÖàÊ5 Kc°a°4 ’ÖàÆ` ²ºJòÌLÐ]‰y æ &èêÐÓÌLÐÍ¡§5˜3¡ß ËÛ/bi®à‹Xr¾ˆå$ûp²ºJæ ÷pæ‹X€/bÉù"n;_ÄÂ} ðE,¹ý"®'݇3_Ä|Kê{4v7‡nIti >¾_ÄÒ]/À±ä|ŽÁÒŒAVWIšÁÂLÐ]‰i g0AW‡že°ptsè–ï¾_ÄÒ]/À±ä|^ƒƒ1Èê*Ék0g0Aw%æ5˜3˜ «COk0g0A7‡nùÎ3#ô»±aùcûE,íÑõ|KÎá5¸6 † ««$¯Á•k0Fw%æ5¸r ÆèêÐÓ\¹ctsè–ï<Õ`€.ÁÇ÷‹XÚ£ëø"–œ/Âkpc0Y]%y æ &è®Ä¼stuèi æ &èæÐ-ßyªÁZ.ç[Êñq9Ù‡?]߀/â–òEìÌ2²ºJæ|Ûù"nÜq¾ˆ[Æq9ï¿GãÆ}7à‹¸å|þ»ŒáÌq¾ˆ[Êqóß"õg¾ˆðEÜR¾Ï`i  "$Ë`i Æ ««$Í`á &è®Ä4ƒ…3˜ «CO—g0A7‡že°p#ô»±á–òE –¦ÁAĤ5XšCÕU’×`áŒÑ]‰y ®Á]zZƒ…k0F7‡žÖ`á Ð¥1XŽ0XƒƒˆIkpc0Y]%y æ &è®Ä¼stuèi æ &èæÐÓÌŒÐïÆ†[Ê4X›+’Ö`m AVWI^ƒÕ1ø"nÀqËø"¢«c0ðEÜ€/â–óEx VÇ`à‹¸_Ä-勬ŽÁÀq¾ˆ[Ê4¸1X0ˆ8´7cÕU’×`Î`‚îJÌk0g0AW‡žÖ`Î`‚n=­ÁœÁýnl¸¥|Aƒ­i°Aq i ¶¦Ádu•ä5ظctWb^ƒk0FW‡žÖ`ãŒÑÍ¡§5ظti –# –Æ`Á â@ÒÜŒAVWI^ƒ9ƒ º+1¯ÁœÁ]zZƒ9ƒ º9ô´s#ô»±á–òE .Mƒ ’ÖàÒ4‚¬®’¼Ç`à‹¸_Ä-㋈\ƒ/â|·œ/Âkpq ¾ˆðEÜR¾ˆ ÁÅ1ø"nÀqKù"‚7 ’ÖàÆ` ²ºJòÌLÐ]‰y æ &èêÐÓÌLÐÍ¡§5˜3¡ß ·”/"hpm\!ˆ8´צÁdu•ä5¸r Æè®Ä¼W®Á]zZƒ+×`Œn=­Á•k0@—Æ`9Â`i  "$­ÁÁdu•ä5˜3˜ »óÌLÐÕ¡§5˜3˜ ›COk0gpýŸÿ÷·¯k|üpþøïãž½ÿç§s÷H¯‚—p…ÿÛÏ?>κ¸{\Îç{îÈîƒ~¸¾†?«ûªNZ÷áG—á,³í‰P —Nøþ¬·SÙþ˜¯{é„¿žµlÿçÉ¿œUʶ„Œ×ÕNx%__ЗNøËYåºuÞÓæ´È ó\§eë|¿Ž:A–­óმ :ï[çã—Aç#HÝ:?¸:k¿mèeÐù¡FóAçÃYWÝ:>ë óá,»nWJÚ—³®uë|D¿ :Ño[ç•’ö嬫ë|P±“:ÂËeë¼Å;:èüðùs _7|Ñ­óDiáçÛÖy à£Î‡pÑ­óñºuÐùnòu~³Açcø²u¾„ûvt¾ôH+û†œgݶΗpãlÐùÒ#­½^wÐùâ:¯+ƒÎ—iëëu vœ¯SjκºÎ‡d¤óµ×:}A¿:ÎZì­ûÑ'±AçÃYÅu¾Òû^^З·î÷ô¤:_{ó}ÿ=ãÎ_G:âüu¤óWª´/›§ŸÜÚæJY·?«‘öe3ÊaçCøâÔæJ×u/g=ïûË@§Qç—^ø~÷ŠþïûËY*oÝ­Úr/è®ó ­ýõ,·ªŒè£µMìP}ë¾kÐ'íëY×¾Mö¤:èü-®|û¯þïûëY×¾9a¼¶¹õ~eìõºƒÎßzS¦¼ Ö6·žTÖ—ëŽÖó·ýïå÷üþã/Ÿÿhüý×·ûÏ÷O¾}ü›íßÿ·Ë׿Î^Ï’ð’28K'Î’ˆøöqOºgEÄËàZñr½öÎÒ©uªFªÑ¦j´©mªÆ2Uc™ª±LÕX§j¬S5Ö©?¹*S\•)®ÊWeŠ«2ÅU™âªLqU¦¸*S\•)®ÊWeŠ«2ÅU™âªLqU¦¸*S\%5þôù·°øÇ¸Îµ~úüÃØÌY:uÖÞñ1m:g•©³êÔYû· Æ5êT:U£NÕ¨S5¾žõ·»³þþý÷ÛÿQu­ûYÒ9+^ëç—×?о\ë_ßúgíó’©¼d"¯ï¿ëÔµ´{­xÖÏ?tªFªÑ¦ò²©ËÔµÊTe"û}+S5Ö©¼êD^_\•)® ­ñÒ}fÐãªL°ð2u–Lœ¥S×Ò©uªFªÑ¦ò²©ËÔµÊTeªÆ2UcÊ«vóêéjø;í¹–г¾¸ªS\Õ)]}EìqU§¸ªS\Õ)®*ÕèÄWuŠ«:¥«¼_eªÆ2Uc™ºu*¯:u?¹jSºjSºjS\µ)]µ)]µ)®ÚWmŠ«6¥«6ÅU›âªMéªMéªMqÕ¦tÕ¦tÕ¦tõ嬿þøË·õÛŸÿôÿ­‘ DyLP-1.10.4/Data/Netlib/tuff.mps.gz0000644000175200017520000004726410430174061015256 0ustar coincoin‹ÜJ®9tuff.mps¤]ÛvÛ }?kðTK\†Ëc’ƱcùÒZN9ýÿ9¨mFÁ`òFä°†¹¢ÓÓñuƒãm»ýï~ž]ÿûŸÍi³yîºî8t]lÅ_=?©Ø~þõÙÒ¤ËÖó~ÙzùNZÒ"ï|!ïܺí+imIkGZ¤÷í;iHk ­#iHëLZdÛ¤u%­‘´n¤Hë¤%HK’Áìô÷F~ùFð|sËÖÙ¢õ²líÉ;÷d{òÎ=Y÷õŒå@F} o9з˜ek +=•ÈJd5²FÃDzu"½ŸHïÂg—7Ò"½_Hï‚م¬û…Œåò{ÙúI¼>‘Ö3i‘»’½r%s¸¯dFW2£+™Ñ•ìœ+Ù9W²;®dw\ òW‚Ëõ'i”®¥‘Ì}$sÉÜG2÷‘Ì}$sÉÜG2÷‘Ì}$sÉÜGÂg#‘#Áe$¸Œ—‘à2\F²ÿF‚ÒHQ"¼4þ"-"_F"_FÂu7²nd?²¬C ëÈ:²¬C ëÈ:²¬C ëÈ:²¬C ëÈ:²¬C ëÈ:²¬C ëÈ:‚| û=‰ˆÄ d]#"1ÿGFö›¬ßo²~¿Éúý&ë÷›¬ßo²~¿Éúý&ë÷›¬ßo²~‚ŒE±2AÆ"H‚ô'H‚öGøE~„_áAøE’QK2jIF-ɨ%µ$£–dÔ’ŒZ’QK2jIF-ɨ%µ"£VdÔŠŒZ‘Q+2jEF­È¨µ"£VdÔŠŒZ‘Q+:j»šè(šÌH“i2#Mf¤ÉŒ4™‘&3ÒdFšÌH“i2#Mf¤ÉŒ4Ùý@fdF@fdF@fdF@fdF@fdF@fdF@fD*™Ÿ!+æHËw+Mõã¼ÔT—-GZ²û5.¹l¹Eëå¼íž°‡—‘¶.ëg×eë…<{[ÏÛnKžmw¤u$-òÎí¸ì}ÙŠÏä²µ#=ìi‹ô·'= ¤u!¿¼\—s¸ˆùÙ iÑgËÖD' õ²õ±þ¥"¿Tä—jÙƒ Kºeëã³õ¶Ù¼‘¯cë[o=i lE‹èMbëx^¶¦_έŸäÙ¯Û²ÕË5"=hÒƒ&¿Ô¤MzФJ¤eHË’ÞéÝ‘_:Ò»#½;Ò;¥óŸÈߺå¿«õ¶[ê(·ÓR/¸ý\j:7¿Ô¥~Íë0µ~’Öõ¶l}\–­y¦– -pËÖ¼Ÿ=hÒƒ&=hÒƒ&=hÒƒ&=8Òƒ#=8Òƒ#=8Òƒ#=üm ›MxùøœÑÔº^–­Òš‘˜Z3ŸoÑä-š¼E“·hòMÞâÈ[y‹#oqä-Z/çávX“²Þß_xÑ9PÞnfýûÀÙÎ)kEBþ÷¹ÜÌŒ:?ðºÓ ù¿E\NÑLsÿäeòùI®:]桳½ÊC¬É)t]/Á'Ðm|ßiáRòºžnÂ.!ÿtß$’B5Ð ]„Hd¡›¬ÉW\§:e•6)×ùNJmTBž@·ÑÐ1Йdð_€NŠîsðÛïŸsÿç‰ýt3y†ëœa¸Î™59….îK¥œq tÖuÆZ%òºd ƒ>üçÙ„#ì=ˆiÝ3˜Êºo:ìä~­øµ ½d$¢—kòoÊ®W"'E×H“§;Xô}2ø`%{XdÈS€µÅ_màm ÀÛÒæwÜæwkr °,œH7¿Uû “§G òl}2øÜæ×wåæv‡Ðíj Û6¿gNëø`Mžl~-•ñ¹Í/]>!Ïl~Á@§u2ø„7Eï<³ù7)t9€çõÙ#Àû€÷mÒuŸXDéwyz¦[%ŸW yÀ{vó÷ ô]éºàwø½à÷6€ß9€{-­J98j{¢Ÿ…ó{Ûñõά­¿ ðûCÇ×>Ô|àŽ{9p|°&_¬:Ýår[¿®àoŠ“®²OŸ¸7 oºtð ÀßäŒÐ€5múÁÀéÑ^r:‘·Á Ÿ×éC›~0<¤àc ÀÇ6€mÛ>² ógû•>>ð >Õ|*Ùü–³ùíš<ØF]Áç4\£$ˆ„<°»ð‰LàØ$ä)À AF€Ï5ŸÛÔ´s^OŽ(k3ZDþ·:!¯Ó"ÎmjÚù!-â‚_j¾9!˜CNˆ59XôÐ ׋ï;)ó y °ì\àhA@Bžà(;­²&Ä7Õaï?º5ÐýhƒîÇסS^§ä9è|ž7]Ÿ þkСéxEè®5Ð]ÛäæµMn^Ûäæ•?˜œówåæõ!¹9"Àc Àc›g`ÌËMÓiZ_6Ú½½S:!¯ó Œ Àa÷×ñ“u$äEÿÁ ¾Õ|k3nÀV{£rËx(û„¼Î8¸±“ÔÖÞ5n5‡ÀV3ÏGwÈK׸u §x¯Á$䀹“_ØdðŽÊ°LÈ‹ XÔ, +Žƒ¬ÉWûÎô\&è"ãù5Ë`ÁüMèNåO~Ý™„<µQ·Ë_ßÄâä—¬N´RŹ^”Y“¯6<¶¥6·ù•î•MÈEF72w/Yqò‹: snk¢¤[ÕÆuêk\71]¨2!ÿ×ÁìvRM\·{ùœû¿lö¯A7“g¸Î2Ö||°&_A':mŒö9èœO¬™<£or¿9J:“§‚Ou"ïíŸç¾G…q_£oîKú&p±y€5ùJßì»ÞŸ:Bâ1.”ñ&!é¾¼¯oÎä‡b%³¦¿GUp_£IîÇ6èMÒuΩ>ÄÓQK2xLìÇ6èF~êNÞ…óö5i ûBZ&­0¸¾×ù ÛÇcÂÉŒ¬‹ÐEÛzϧ5Ù߇NóÞ!!T^…±.%O ¥Â³ö5É{(ð¦äxSš<1#½°}6åÆƒ–*!Op`(̸ß62{†ƒ=|þjÀñP`¶¥Íï¸ÍïÖä«3DcÆü=/“³ì¥MÈ3³œ>³ùõ_çR ]Â'9Fˆ‡šó°kJÌòfó×ñI¡3¾ÓÒiHÈÓÓÚÞ—›ÃŽ·_$·ù5Ú/C!À,gÞÄñP`öm¼™0G Ú9ßg#ø"NÝ$äu¼Y0 %7 ÓBB^ä`Œ¯ 5á¹ahxhÛüCáäW÷æÃsBkÇœ¾ðüQðGADˈc×ä+€u”ã`7¯š%Ì/"¼çNçž ÏY༠2!ÏxAÑxB êT£€J ˜c|HñÁš|¥è.nq“rpTjh§‚&ü]|**`Œ lJž*`½ 'Ô N5 Ø©¤€)&¬ÉW<å<;ñ‚Šhæ{ÔßNLrN:ï“Áçì*àì*L^½`vã¥&9òRJŽü“A–ƒÎø5y±Jdx3n=á¬JÈ3›ÿ¾~py-HWÇl~…Ç×¥ hB\0¾v© Ï]~”¤«á¤«Y“'úŽFVæøÒÕ #(—…ãëþæ¿ü(é®yw‰›t4Ú/56ÿelãÍ‘K*ï{Ñ]'ÞôÏµËØÆ›coŽñ&†.5ѣ˭”˜£¸Äµ&O&'3ÁI©í{ô‚^n€Õ}€oã gÒ„JÉKñÏ êF—ÕêòÑt0]ÕÊLÉ]"«» ÐÞ&äuT+Ïy„LÉ3™OÈÁ#fÖŒ5‰9㹞“\xN®ÉW%;¢×){1eÞâñ5sÄ}1ž É‘šËÝÃàÓx.„ç°“*Ÿ·Ýõ¦KÇ—äŽ/¹&_9UT­D.þé&Ü1»äVÒ]ïs𭤻J`“Î=XH‹6Ú •Ï[îz+é®Àr‚¿AàÈ¿®7&“©;/¥LÈ«œ‡7^w¦…Ïëõƒðô9÷·§| º™<—•ÇÅ?1‚äIòHIß±6½º— y›ìÁ$?¸dðiòƒP½âbó6!ÏDIѶÏðs ÀÏm?s©çq‹K“8J’×ü\®Üñµøù!€1jb©á¥†ö\گɓ0tõX•;¾Àõò4 ­˜ŠSã0 ^ ah-™>]Ö=†š²ÉÐV6¾s)¹ t&–u.#窾ÐV6ÚÊ&ÃCe“MûPãÏ€•\54†¥Â+']£êªDÎ8fvª„‚gÀÞ7\gòLv‰Ég—l¾ÍœBM¼*´D6^å @Æ5%œŸ ¾.í1´D†7„î­º·6‰øö5‰øW&b¢þLž“ˆâ®D|k“ˆ« 5¡¾°k;­wÜimdêœm4óµ@/uصֻ6uh÷Ði±ºPê û¦*À†úzçÁæ¬yrÞÖmµ¤¡TKªïV„‡jIƒ†šZÒÐVKÞ9€•V6ë+ÕÚ¡·%´Õ’†¶ZÒðP-iÀbÐPSKÚjISKÚOÕÐ:[©/¥)yUºxh«% Õ’Œ6‡š`uÚdðÀ ½î³G}1C^'ƒ‡6‹ixHc1h¨©% mµ¤áØt™Gh«% mµ¤á¡ZҀŠ¡¦–4´Õ’¶–´÷ZéÀúÙ©ÒVKÚjIÃCµ¤}ΡÆeJ.kήr³]uæ*J”vùl€8óÞ$ä)ÀÀ¤ž/ƒsɮʣm€– –y†š*Ñp)ØUŽKfsbMþ…RG¡1é?ªD£’œÏÚ—x·Y(U‰Z:ÜG5aèð£ :¶JT;™‘›ÓÕfS¬/!ÏA—¯µv6ÇTA‡ƒÿ‰Ðý¬îgt?9蜧rÐÅ›”<£•2!©L/!Ï)Ÿ–ƒ¥ V,„š‚‡ÐV`®m‡I[mh+° ØÌq5)¡­À60e:î*)3î’)ô,´NÈëZ›}ºù£™o£Ò” >S`k:}ºR­q\¬ 5¶¡T` \bÈ5y¢4rJS’Ágüø’©M^$Ô‡R­²wýø˜3jRn‚.…@qkò´6Y;-sAáHŒÂ] ä¹.îy•çB î.t¡35Й¦„F$O2F§œZ›‹Yš~±aMS¾ÝL^•Ð8“—ôM93¢&åF<5,ž¸ŒQaLõÍ)YÉh-òLPXÜx&Op„î¯w(½çyNɘ #j’iÄsI“4œ&iÖä+è|§z›¹%÷ϰlB¾†.ª‹682¢òº(ò1"‡Ðaž‹¨I“¥4Í)á:é}‹\'3WDÅÄiQðWÈ¿õQ)trö>ˆ—Â9ìg*¸ó\DMšŒøÞämß¹üMã…Ȩ0Sýg´òÇo›²Äòœö—ß°ßæ¯ Ì%5©â­ä¼à [“S®›äQ´­]ÎQ+…ÂÃD°©Ãݲ”uo%Y—OE³·Q`.¨IE…ªãMǸ%6óºï8£Î×g? Ä ŸŠ Lw¹nWuŒ{³à:Ì5Ib_’uÜu~˜1-öÜõ*”Èr(D±ÿú†2}ò t½çÌ5ìãÿ¢&}@¼79jÅ{:¹Îæg ³¥+Jé\xÀÍ\÷^ºIr²‘}Q“ mzÝ¡M¯;´éu‡6½cö¢&ä/†6½nhÓë†6½nhÓë0/j‚ùâØ¦×Ûôºc›^wlÓë0Î.jÂôâÔ¦×ÚôºS›^wjÓë0‚.jð¢-/Úð¢-/ÚðíwYcþ˧R¸Isá&½&_Aç:%]¦žqºI+‘’‹Œ’ß°P§•O×”`6¬G®“h¿Ëó_–ÌÍyõ´[“'\g HŸ-¤ƒµäki6ߘÌ0;ß³,ŸKÐe‰?ÞÂOr´ßeù/Kæ?÷I;‡Ÿ´“/Üf}Ö«÷§ÌBJž:D Ãu‹QYª’Q.Ƥ:‰ö»¬1ÿeÉüז㺤÷tQQFf>½ðG'¶&!O£k\uáâžKù½éžK‰ö»¬1ÿå[évUfÃZtÃË|%‚˜Ê/MŸBçmg”AcDòæÿçÍ %•X–*„âd®;Úï²Æü—»×q1]L+;®*ÛMé®›ì¾0CW¨DðLÈÑΟó“»Ò†e¹ÅÚï²Æü—%óßqÊ ~DRîY½lŸUN 2)yNÖyNÖ%sÏBœ¬Cqö»¬1ÿå{)nÆqÞ/óæ¿è£”V=ä”çœMŸ8•XÏÇÄ{IÖ‰»²íwYcþËC›^whÓëmzÝ¡M¯Cû]Ö˜ÿrhÓë†6½nhÓë†6½íwYcþËc›^wlÓëŽmzݱM¯Cû]Ö˜ÿòÔ¦×ÚôºS›^wjÓëÐ~—5æ¿<7e¦ÈsSfŠ<7e¦ÈsSfŠÆlF]“ ©oM—Áè[Óe0úÖtŒ¾5]£o\è ÿ ”Ò+¸›" ¦‹Â›/m¬dnãó½MÈ€½b>ƒµž¾îKŽSÿä@ ÔøW tW p•w˜ ùôŠéF­ˆœÏ¥9z7¢ xÿJDÿ®¹Ï_vˆNIúŸg ƒjü+Pú¢'-JDxá®ÏTBõÙ Q!ÖÔŸ^áýý QxùzmÈäÎý$G ÔøWà{IqNq†5yrÁ(Ÿ»AOLé¥éà3ɵòèJéÒÝ« t@JéÌŘӃ5y¢8‹^ÛŒ“àoî·MÈ3¹z÷CŽðVÊÈç%Çáª0€¨ñ¯@é¦îë5 Ù`ÇV+ÈÓÅ#àe2ø ×£8/¡Û¸Ø”n”´è ÿ ”îpÐ\6¼Vkòô˜èËÊ:}†¼êNQØ sŠ;aqÝÑA5þ(ÝÎ 8®Iï‰r„Ê)'NY¼ øô Û? ëJéàîe¦:H Æ¿‡6½îЦ×ÚôºC›^‡¨ñ¯ÀÐ¦× mzÝÐ¦× mz:H Æ¿Ç6½îئ×Ûôºc›^‡¨ñ¯À©M¯;µéu§6½îԦסƒjü+pnª7ƒsS½œ›êÍàÜToXï 5åÒpmú\¹ò Þ™œÅ93‹ÊÂ÷á¸Oë-¡»6}H åÒ¿vð¤º7ý¡'¶*MóÏäñWÉ9Œëõƒ5ù€õ²‚*îkô8ëE®^TaðS'3ù0éDÁÌ›äŸÓžfò GM§hðb>úÀà9ü¤:]桳½ÊC¬É)tS§—óÝ‹}§…KÉSèzºÅggò/@7×?B5Ð Ýò\šù’¯¸NuʪùÖ-½ÈÕ“Rc6üLž@·Ñ³³^s;¾œ£éÛïŸsß~¯€n&ÏpÝ|#œfn„Cr ]Ü—J9ãè¬ëŒµ˜!:“§Ð-n„ÓÜÇÓ‘|’ˆš»åU37ÂÍäÞÄK»¶¯ðk À¯‰8ß§¥™û´|Å›«û´4sŸÖLž¼¸OKsß~eV²×y€E†<x¾Ok»E€·5oK›ßq›ß­É)ÀÓ·˜…éæŸ>_æŒ0 y ðâ†Íd›Îä™Í¯ïÊÍí¡ÛÕ@·+l~ÏœÖó}›Hžl~-•ñ¹Í/]?Ü~WØü‚n¾os&_ó¦èg6ÿ&….ð¼>{x_ð¾Mºîó‹é:H€ôLŸnñX42“×¼g7Jß•®û‡~G€ßk~oø¸×r¾ÍX/ìK)úY8¿·_ï<À‹ MY€ß:¾ð¡àðâzÍ\σä+€U§{£\`ëÒõÀ¼¼žG3×óü¿´+ËN]gÖïw­L`³¬Î–CšÄv0Ù:™ÿ@® qɨˆôrïþOôa©T*U¯Çž54µL{žGžuYw@à.‡À]™~ÐqúÁ`/y‹EÄÀÛ®Q-‚çé]™~Ð=¤ìÀûï˼/#ð¾ŒÀ{–Àó†¦,÷ø>äø Ùü gó7)¸t…–Òpk£áåø'ìïøÀ‹ˆYCSËô ‹pLà™ ÿäø£LMû eðèhkEhnàðÐGxžñQ¦¦}<¤EÀÇ…KN)æ’S*…ßµ=µó¶§ºö-‚cë=²I­ŸCpDG½´†4!þÄd¿õ_ ÝßÒý-#ÝßߓδÃ)Òµ4oú Mþw¤Óñ¤;åîT&7OeróT&7OüÅ4ëÝÉÊÍÓCr³÷9îË<=-7ë¥uÎbë«ìÞ*–;Dxžg g|Û»Ó2½;#\ôœÀçŸËŒƒ3GàÆ¶µ¡¬‡K¹Eð<ãàÌ^LóÞ¬qp~È8@àCà 8–X¦w'Àéšôî´LïÎ'ÌÝü±wg„cžõî´LïÎ ¬€À*‡ÀJ °á8½žxl[ç'‚.z¸¿¢ VÇ”rCßü±œ+±¨¥ù[&Í­t:‡tZÐJ çz1u O¿Ë7UC~c+Ó ¸"t£úîõ¥3nþ†^C˜s%]›2®3¿ãº‘éªü\‹KÖ¦ˆë¶ÏÓڷϤ‹p‚ëÆšoà=b€'¤SK[×¶¥Hç›xcE8¡or¿%p,øL|íÝ2k߸ËÑ7w’¾é¸Ø<”sí}³ZVmÝbGÈp+SC㫯oŽuŒ÷l„þÃJ¢¦¿Up—£Iîú2Ò1šä˜b*"ˆgÇþEpMìú2Òõüýy…T$ä%ìrÒvBZƒ«™´Áõ¥l5\^²n kÀ¶Þñi JW÷IgyïR†VaáˆÀÊ€TØAöÂ.'ùaçÞÔoBNÓÎqfd«šŠL¹i…f=;>ùaþ¾5K`'˜q¿Írš"spë¦QDˆ»œs·–¿ç¿OáI€Ù ÆL³t[C¬.ä„ú®¨ $°¡¾Ê·®¡¬yït<Öeµ¤Aª%µw«@ÂCµ¤ŠACN-i(«% o5 é+µÖƒ·%”Õ’†²ZÒðP-i€bÐSKÊjISKZÕЖ¬Ô×Ú* ÏJeµ¤á¡ZÒÑæ¬]™ î8»ÊV$}‘€çÉà®Ìbê’ÁP rjICY-iØ5óeµ¤¡¬–4H¶¦¹ëLJœ™“r¬ñ\ħp\›l½ÕTPxCCØ`¥Íuc¿|§B þ.éj ]Cºº(¡à(c´™?·8÷,×ÕìÀÖEùvž•Ðá’¾© gFå¤Ü¨§"«'.c´ȈõÍ1Y©¶V#8Vw ሎnéj’7uLÉU £r’iÔJÒ$kN“¬SxBºviª†è’{é«]ƒà)éu±¡cF4‚#ÒÍHIþå× ò\TNšŒ’Òd,§„[ôõ„t~à:M´o-HDÅ·Ð×ú(L:½êY¸‡[ÏYà“‚« ÏEå¤É¨—"o£záò7ëV)B…ë?+…&ÿ‹î`c–8‚SÚ}`ÿÄ×䨜Tµ‘œ\á¡÷)ü–ëFy4ØÖžrÔjeà2Ql*¢æz„ÌeÝF’ut*‚ŽÞF¹*'A UÇ‹%ã–XÄ}ßrF][ûŠ|ÀÖ:(>AÕKw—ë¶‚¬c|Ü‹×A–€ÊI2P;IÖqíü cZí¸ö*­3Šä:gZˆ ªÝïì˜é‹à骖3×àëÿW9éê­ÈQ«ÞhÒÕ×5´â¬]´t•”>À…|äº7©’ædL"û*'1@½—éuïezÝ{™^÷^¦×AÌ^å„üUW¦×uez]W¦×uezDãUN0_íËôº}™^·/ÓëöezÄÙUN˜^ÊôºC™^w(ÓëezDÐUN^•àUY^•àUY^ƒý®sÌý$…›,n²)ŠêÍÜGQ½™ƒzg—S.íNEI¹W¾¢]ëkÊ¿â}E¥ð>÷´Þœt§¢‡¤œP.ÝÂkOf¹ñ =±Uiž'p„£Ð= öéRø…À~^A5œkð8ûY®Þ ÂÀS'>øæ#ÆEÞ¼ùCÓž"|¤£¿]b ùnÿPÃ=üdt6‡t–']SštÃRø-éÆ8N¥cïÙª¥UÃ1é*†t³g#ü¤‹5äOHçrHçXÒÍßàòÌ\O¸Î,Mcb×-?ËÕÓÚB6|„#Ò-ltÖ{îĹߓNÇhúúeZûú%ƒtNp]ì癎p¿%Ýp.ñµG¤kü²nÈpLºYG8Ï=žðQ"z®Ë«g:ÂE8Á›Ð´ký ~Í!ð« c?-ÏôÓx›I?-ÏôÓŠpLàY?-Ͻ!üÊØèÊÒV8öÓZ¯À믥Ãï¹ÃïSø-Ç·˜•WøðÏ—ùZÕŽ <ëÐá™lÓ'¿½+7×[ Ý6‡t[áð·Ìmûm~«MÝR‡_û*>n¿¿bHûmFxÊ›ªò-sø˜tãþì€À»ïʤëŽ&°ÛA:‡ïô±{L E#žGà{ø+gì]éº{ˆÀo@à·¿•ø#peuìfìgö¥VUÎoe××OàYCS–Ào]_ï@à÷¿óžµçñL{€'6K[ÕÆSnÚ™t}g —œRÌ%§T ¿!0j{êçmOuí[ÇÖ1zä“Z?‡àˆŽzi iBü‰É~ë¿@º¿9¤û[Fº¿¿'i-†S¤kiÞôšüïH¦ã HwÊ!Ý©LnžÊäæ©Lnžø‹iÖ»“•›§‡äfîsÜ—yzZnÖKëœÅÖW3ؽU,wˆð<Ï@Ïø¶w§gzwF¸è?8Ï9>—gŽÀmkCX—r‹àyÆÁ™½˜æ½;Yãàüq€À!‡ÀA p,ñLïN€'Ò5éÝé™ÞN˜»ùcïÎÇ<ëÝé™Þ.XU•@`Ãq0$zùðœ²×^ñ¤T@p‘À_@௠"¢nQ7)ˆ ãCr †cLƒôÔ!G;H ˜aB 5¼Š{ °fÌyö–ð‚ªÁÌï¸LsNº¶E“§ì*ÇÙU¼z„ìÆcNräQJެ[†tu›Âq¤1ŠàͱlË7Á‰Ã_?8¾ ÒÕ3‡?ö±: É‘Lˆ#Ä׎9á¹ã_IºÖœt­S8Òì`d×—½<ä᜸¾îþã_Iw¥Ý%>:éŽ`´slþc_Æ›=—T^U–Ð]GÞl=ÜkǾŒ7û2ÞìâMÿs¢Gdz”˜c¸Ä“ÂñÅä5ܕڪ/èñ,ØÜ'ðY0*&­!¾%s½ûÄÇæuÃ%?x4yœü Le¸Ø|ƒàD”4>?»¯r¼*#ðŠK=ޏ®)’ÁbxW‚t宯W‚¡!'–ž¥0tË…¡ÛŽÂÐÕ Çêúr¾‚v%á™C¦â´öñÍñg! m5Áï BÝcÈ)› ee“á…KÉuƱÔAçªu¬ê ee“¡¬l2çã²’Ëš³«âÛ|ძ(¹y›Ï3oóÁeí˜Ôó¹qð!ÙUt@pö6_€2ÏS%Ž‚]å¹d6x5)dT‰* IÿA¨5±)ðmÖ~| 3HU¢ K:8G9aèð·Œtl•¨õš›ck³1Ö‡àéè*Ѧ‰æøß,ÒÁä?tŸ9¤û,#Ý'G:¯œ7é†ÿ\c8¡•2!±LÁ)å³áHÒ*BNÁC(+° §²Ë¤¬À6”؆‡ lä8„œ‰PV`˜²;œ*­ wÉzVðŠ](+° e¶á¡Û9!'E"”؆3Û}Ç×'-&ÛF§JYm(+° ب 9¶¡¬À6”؆²ÛPV`*° P!r lƒP`;kVì™fÅAqé½7ÍŠ=Ó¬8°¶7ÍŠY¬„›?6+æªDTȆœÛ Ø*æúþ“ìßÖf…ÿ`æ7ƒÒ„&OØÖK{—tRmí¹\ P!r lƒT`ë¸ÄhÌ §4Ýq£Žp)ÙKaü­-Ì~+Ì~£vÒ(XãNXãf¿;ñ£Žð[Gá·Žð[Gé· ŒbÄê¾WËOňœÅ&–¶øïÎà‹F]|£Š†þðc6Oï? Åyˆ²aÐE<Ö^#øòVü3>¦þsy+…§êÏØéÒ„0Õxåñ× ëG‰=½³".ÂWO é.Y²ocÒ!A8¬qÒUæ,øb∎pLàë»"NØÓn¦7gp–À†¿#|õdR!<Ò×£ÉSžzWD`{—Àî\ÄÁN °¾tÚ%tvèù3ƒ³v]$0zÑãÚ– °ž^…™Á O/oûÓ5AøÚ:†08âŽW2° [&èbJÁ˜ÁÑ»FËæ’ì¶êO<…ú¾lò=;ùÅ5ckÕ÷|^â‚|­iÙåÏe“? “¿”¬z¹fp4ùå•òâä¿Ê&ÿ%Mža›åÔÎjÇs¼Ö8®ú/~íƒÒúL •ËᯆóöæR$Šr•BðDôD8*jJøŠpÂFŸîµÒ +›ÂW§¤㲚Äî:Š“;t?¦pu‰Ý¬žSj¬(Bðg.NJ›áw§˜Ý ¾]Þ¸ªÜ”Qw<=ý¨¼$sÕ”Ðÿuçoƒ¾ôæ%”ê™â0ÁWëÿ ^Ò¾WkÔali[?= Úɪl‰«²%®„%^Š|©%NÉc3øi%,ñ¹l‰ÏeK|†9r¹(ÔÚ‚S„€Q/eK|)[â‹°‹ížš|&¿:½²òøã!<†T×05)++ï”AðõË4Ní} '¼‹×]$\˜Ääñ=>\&×{¢C².¹G—ᆽèÿáU‹¿¾ÅuŒ¶¢·ðƵcxzµ¢%5¹öT‰íK]3ËÊVˆòØ4 tÒúZVuà4y{åÍÝ?š ¾'¬¹¬=}ån$]ƒà< î²ã®ˆµ#<‹µžÇÚÏcíÏbíÙ×sX;ÂYÖ>îxÖŽð,ÖŽð,ÖŽð,ÖŽð,ÖŽp‰µ‡]Y¿\÷-±½”ñû^Mo¼Ìá[Á„ØM£Èߺ°àîxÿNÌqº¥^›è,je®\T-U–¶±~@zÿOP펦S2ù5|ý“ù:¦é°*g5~#¬}S6ù OùÅòjulÒEøšp[-Hº4nvÁ—L~ _ÿ›¼`)ÌànòßüäGaU0y€“”÷ NbøšXûL¤•Ìq/ø:ǽ0Ç=OàÙO?)ò{>ÖÇå~ü¹–š¯vï¢OáDlæZµ{/ÖW4ùžO\ùsé'/Ö7MþŒ \Ók_,çþ,UæEU¿r5]µ…κš’µtíëž“l­ºÔ*[¡µ#Ò²j~ÿööw[O}ð(]öt"á¯?sO½¥\7Ú¤-^{rü–µ«,áãPKݶnp¤±Õ´§J×ÁqP­ºtÙCžªqÛñÚ7(û¡ºt¢!§ŒjÁÚŒpž,k ±[½ÜŸ£+ pBB)}ãK2Gk ç:“7Æ·v „@mîÏQÎGs4þÇç–´‘kÖ¬Að¤™ÿÒšaÓ¨íý9 á2€ühõÕ±·MèèläG€']ó—M£â^ï~Ïhf7ÀÓþgã›Ò—W‹ÒÆóÃ.VøëôëtÓ¨·Œ»à‹ð´Ñؘ^ÉãH;¼wa4Ø"œ|nõþë9^$_ O;¦_Ü‚{I Á“†`·R´û=›¨’fÞG8Ú^ë®*=Ú^WÛÁÑöjWÕäöš¶UŽ·×Bì­úåö^" ‚gm/Àó¶wÏÙ^€¯z®±:²†–5Ä#moóS¹’n¯ªf¾'v{·ôémêQžØÞ*æ¿üz{ç-†çmïKÙö¾ðÍÁ~à·Ûû³ï)œð[MóйÔˆp|HUkä¹4 "qH›kY2¿–^㯣í54ïþõ×Û;pH˜ÏÛÞײí}-ÛÞ Ž¼2£æÈí5ðäæ Ž¶×ÖÙRfÜ`üu¼½º¹–ì ɳŽ·×´|Oݦ¨íUŠº{•iÁoáÔö6ÌöÂÕý-t·›m¯f–8ƒß´ÐK„ó]øê›KðM]ËZkG8b_7¤j¥”ƒk1 &p´pöMHGç¦Nï÷æ÷ÛÛVÐt'Âó¶wS¶½›²íÝÀö²šó6Õœ8 #moý“=ŽŽuÓ‚Úá8/‰Óœµ]#8ÚÞºŠÙfloLQð¼íÝ–mï¶l{·°½¬æœR¾ñMž0ŒTeiÃHƒêáø†n8ÃÈBÌ(‰ím`{w¿ÜÞÑa¯ ¶áyÛ»+ÛÞßßtv÷jæîøê{÷¨j嬶ŽwÑíÜÆƒ4ŸÇ»h®}ªR'ßÀ\Om¯µáþýöëíkΞ·½oeÛûV¶½oìñ³þêÕÎY'äk;¬4y‹¿ž†²–^]\} >Ü5ç—Ÿ>¤æìÉÓ;K˜p®n w“ôR8ÑorÚŸgâ~Ó8 gÚäIá(.¼lÚ«Û 'é 6‚c&¨/¤#³} ‚ãl_«™Œ:žÌ™æüËk´ŽNž·q¯e÷zãÒF`^·:…“Ý*˜Lgs!NìÏußñ–‡á¤eCmܨMM'î]-û§kbâT‚w>…æ]\sðN€€.T©¾[€[.z¾;€;þ!¤­–ýêJyàÏçÚg…g±Jµ¿ööXsù?wêDà…¯ÅZÉ8ßïa+6C˜àœ"º–(?À_ùæ) rZ‹y[” Îfë “ïßÎe^ø;À¹Œ;Lù›¤µ~ÍÔJN¤Ò¡û À¹ üeÙodïÝZšü+À9aÖbº`ÍûÚYŽi…X÷ Fàþ&¶;þã'U÷»%·z¿ãó¾.¤5‡h‚s ÔAÊó<,û79»¸Z{œ>νs܈ÉÉœ[ûQ8qïõ²¿ê6]Fbö¸öwyíÝVÌΟ¾þ•—}oò§O±f‚¯9¸TBs†µs ºÇ¿×u˾»ÓÄ¢›XLp® ÅúUÌëîr^wxóº'8—×¶b^÷çòº×g1¯{‚syÝá,vàèOwZhœÄýéN ~Zö=Y¹ÙFÚ¸à=—n™iÏL)ø—H÷ð/níµpÞŸ–}àÛË^àB‹ Ó àœZ„#sz8ÛUUPÈO/ç.è À!ÞßIøÖ>ñþNhþ[j=ô4ÁÙÐï÷“¬œÜ -~¿Èʉ’•“o燙õ?Þ7vò‚n3u‚sló-ܰY'8Ç6ß‚¬è2ÁYÒ ÍͺLp–tB‡»ïé-˜Ç½zót‡ϨMo) ^½ä±š?xòɃM·>ùûp:c`Á%2 8™Õ°àœÌjXp>GÞƒYJÆÀ·¿ÛÞÛ\´Ϩmï¦l{7üöe\–‚“)g .Ë ÁÉ”³èCðÔ»3Ï—äʯ·w–‹á¹µ¢íÝ–mï–ß^{í¸Cf™!8™r¶à²ÌœL9[p>O½oó|¹AîÿV8ß„\veÛ»+ÛÞÿš^ ¹à}OátÔâ^²R„g%+E8›¬„üž³d¥ÿÞ‰™ßnï»›Q¿¼”øÆwjotúúá“5ÂÇwj“¯;ãs´ú¦?Ëõ5ôÿsú‡ÊbøóWúuåǯ‡ñÛÛ?Xâë*ãŸFýëgûó¯'88œÒÉk{C!K¿^Ûkåíµ÷·× Ûka{g£þxµ4°½VØ^ Ûk¹íµÂöZØ^Ëm¯¶×ÂöZn{­°½¶× Û ûÃo¯¶ž‰f¶×ËÛëïo¯¶×Ãöúùöêå%ÝîpóÊ4±½¶×sÛë…íõ°½žÛ^/l¯‡íõÜöza{=l¯¶—{<~¶½žÞÞx±JžÆûsÕ‘ýs&˜*òÇ×÷V'ê¾›ßú ËU zÁÝŒ4ÕtË·Ù¨áÂÿuX‹³ßlèÙÃóœ|ÿª |Ë,¾¹>ƒq:Èð¯2Fw2œ#}ÝÖw|÷øƒûúNÀéÿ{çëg~&ájÔ?òóËøGùŸ„’¿2\Ëû¾]>Oû–]Z³Ev>qì ¿õo?ÝÄÿ²ñsJSõd\£Ó)ë*‘Ïÿ}ÂG>ñÓ¤p¬êÌ>r:O9é¤Ú‚õÝ þuœà©Bpü‡øu€c…h6ªÒÓGÝL1JGºÙŧô3JÁG÷ 8ÖÍf£œŸ>‚ô¼‰\˜Ë©Ü6±š8ûÈ~Ò#þ!UiÎ76aÎ:…cM+aN ÌùèG¦2íÇŠZœ˜Ó> ë æ´Àœ–cN+0'£Î%Üe9-ÇœwáH³L™ÓsZŽ9­ÀœŒf™0§æ´sZ9-0§˜ÓszŽo|œm Çzbœ˜óÑ•±š™0§æôhjˆ9=0§ç˜Ó ÌÉ(£ wy`NÏ1ç]8Ò‹SæôÀœžcN/0'£'Ìé9=Çœ^`NÌI|äs{úßÿ­>·—áÿ/ÎDZ {ü_ ò¹è…_âQèé\uÙìî#uû|¬¾š7è·’Q-ñ[ø©¹–ø-4JUô“ëÚÑ£n®eùŤÌoаÈQ·W˜6ã¨uHF%^¸žý îç–-eñ(…F¡ÞvŽ ×˧zdÒ†ÉQ¸¡ª‰QßüjÕHŽòjõºBÖÁѯèåacˆQ[iVñÄ+îˆJðÄ+ndMðêkÿA¼ÒžŽÚ`^Uø‹[‚ï/£ÖŸ³Q“õþûQž®6Ø×_O¯E\M³[±özxyêŸþ÷ÿ^ˆwˆ¿JDyLP-1.10.4/Data/Netlib/etamacro.mps.gz0000644000175200017520000003001110430174061016063 0ustar coincoin‹K®9etamacro.mps¥][²ã8®üŸˆÙƒ7P ¾@ÚŸGªêqÇœzLUuÏýoäêØ–È$²ë«Ý`HPR´ñííë—ÓþïËï·¯oËÏïÿüÇÏïÿýõÏœ¾NßüþóëÛû¿ÖOëÈåû¯ß_¾Ÿ¨üdÁfÁæÀæÀæÁæÁÀÀF`#°E°E°%°¥Íööcùë«O;£û'°9°9°y°y°°°Ølll l£ß_~~ýóÛß?¶×ÿ}þ¹¯ßý•Ÿ,Ø,ØØØ<Ø<ØØØl¶¶¶¶}ý~,ßßß3¿Û'°Y°Y°9°9°y°y°°°Ølll lÀï ü®Àï ü®Àï ü®Àï ü®Àï ü®Àï ü®Àï ü®Àï ü®™ßû¾e~·O`³`³`s`s`ó`ó` ` `#°Ø"Ø"ØØ€ß üfà7¿øÍÀo~3ð›ß üfà7¿øÍÀo~3ð›ßüà·¿ø-Ào~ ð[€ßüà·¿ø-Ào~ ð[2¿?æŸÿ—ùÝ>͂͂ÍÍ̓̓-€-€ÀF`‹`‹`K`Ëü~}ÿ’ùÝ>͂͂ÍÍ̓̓-€-€ÀF`‹`‹`K`Ëü~|ùý¯Ìïö lllllllll6[[[[±~ÿûöG±~ŸÀfÁfÁæÀæÀæÁæÁÀÀF`#°E°E°%°ü®oE}¿}››››››[[ÀÁÁ–À–ù}{ûò+ó»}››››››[[ÀÁÁ–ÀVè—÷ÏúåãØ,Ø,ØØØ<Ø<ØØØl¶¶¶¶âþò¯·?‹ûËÇ'°Y°Y°9°9°y°y°°°Ølll l7~ÿ:~þçËû—{}ÏŸÀfÁfÁæÀæÀæÁæÁÀÀF`#°E°E°%°e~ß¾<ê_þ6 6 6666¶¶6-‚-‚--óÛë_þ6 6 6666¶¶6-‚-‚--ó[¾?êCþ6 6 6666¶¶6-‚-‚-­¸>ß~ÿU\ŸŸÀfÁfÁæÀæÀæÁæÁÀÀF`#°E°E°%°Ýø½ŸNoß®H Ÿ|òð)lŸn+½ãnyÁO>ùûÝí××ïýÞî×OT~²`³`s`s`ó`ó` ` `#°Ø"Ø"Øض|.ï¿¿ÿ¾ò'°Y°Y°9°9°y°y°°°Ølll l™ßç÷ïKæwû6 6 6666¶¶6-‚-‚-­à÷õÏo>Œ>>ÍÍ̓̓íƒÑòýý¯¯ß>¶}×ÿ~ûñë÷¿É[¢=âOÓÙ’O§¼3|ÿßÖ„‰B´§~ûg§SÞ\Åyk8:‰f¢hn ßGYÓÌÕ8!ÙɸËtvéL,5sÕNœÂÄ6L,Mt‰t)G9ÓÌÕ8Q˜¸†Éy²)®ÿ`5sÕN¼ÂÄ5LÂ’ œxÓÌÕ8Q˜øvM&oSHFQ3Wí$(L|»&“÷gáê ¦™«q¢0 “)…‹={£¨™«vB “Ð0™‚¿øp&dš¹' ª™¬ƒÜú…'£¨™«v&Ô2±þξŒÑ4s5N&±]“ÎÆÇ3Œ¢f®ÚIR˜ÄŠÉê#ø”ªQÉ4s5N&É4Ns1p[IÔÌ•l?åÿ½NkxåħèÏôåó×û#a~8,||º9iî¯6ž/§ü4Ù_Öø.—m±îpkòãg¦äׯ¹8åçUþq'¢”.¡„;“p;Þ튾XÁ;ÊOÄøZ˜‚§ó¥„{“¡{ÁOq½p÷”Ÿ¹{Þ}rd·ûãL~HïÁ]ô´~ÓNù©¾·L°®„“ÉÛ*üã+ž’5©#Êû=ï&İ^v%<š¼ÑÐóîÒ™‚…ÔEÊ;=¸W ¤.™¼•¡ÁW´Yë %߸Dyï£ëý£öÆû}‹$o–`c¸ïûyŠÀ)ï®tà—8Ù` •pkòvLN«ÐŠ)‚wKyÿ¦÷+ÜÄ|·¹oóä Ÿw7%—üà”wˆ:pÖo|ôyoò–Rã%$€SÞƒêe~ôt!€“7­z™ŸÎ~-Eº@y—«—ºé¼ªp2y[¬Ç}-2*à”÷Ñ:ðõNI.&€G“7ÞzpO7; pÊ;u=¸3Æ™O&oíõàÖºõ²àå½À.<^b:?¼¯êà˯ßÌ“àc•š*³–Çi­Qàü“à'Ï< >æ­áè$¬×¶÷‰ÊQ“ 8!ÙIó$x:9ëÖG¨£ø'ÁÒ‰S˜4O‚§u­&·Ö¶r”ð$N&Í“ài}p¶ç°éÂÇ(þI°tâ&Í“àɯ7;JÖDx' “æIðdÏ«þ g¸º„'ÁÒIP˜øvMÌä×;—-G O‚àDaÒ< žÖûãÙ“=Ã(þI°tB “æIp]”i»[ù»žÁ‰Â¤}´ÓÅDgaá…'ÁÒIT˜P»&“¡ózo)G O‚àDaÒ< ž&ºøËzûƒQü“`é$)LbÃd½q­…-@º„'Ap¢0I-{þлð=žïNÚ'Áœ×ðʉûØ)Û$ý—o/SÞ*Åã5ѲΘ^¥xÀ)¿WÚc ¸Ã­É/¢vàxwÀ)¿¹Úã}ûw&¿êÚãù§ünlŽ÷Ú;Ü›ü2m/x¸‹>à”ß¾íÁáþx‡“_×íÀñÎ÷€S~¿··ppO»ÃÉä‚{ÁÃÝê§üq^Þ‡îðhò+Ç8ÞapÊï(÷àpï¸Ã“É/5÷àpWxÀ)¿݃Ã÷ýÇr™¸ý¾|¹nÊp{ߘ»©ðÇ{ÈÍs(³£TÙÛEí:ðÇ{Ï’wÎÝm*ïÖtà÷¬ï*œ¹YÕÞ©¼×-yWàܽ®òîLþx\ð®Â™[eí:ðÇ{ë’wÎÝi+ïÞtà÷äï*œ¹Q×Þ©¼—/yWàÜ}¾òLþø;Á» gÊDí:ðÇßHÞ8We*ïd:ðÇß9ÞU8S¤jïÔ?þ®Bò®À¹Wy¦ü‡à]…3%²öNøãïF$ï œ«°•÷d:ðÇß©ÞU8S kï¤Ã™ÞbÔÏ?¾ÿÊøÉõëðß^.+†Éò[Y…a•€÷Ç»*…z_ì!F"åWÞ¤I‰‘ò4rŒ‚$(c´J­É/â 1Z%Öä÷z”yá1*y´”_”bTòh)¿m$Ç(È‹2F§äÑ™üÒ¢£SòèL~J‰‘!£’GGùUJ)F%Žò›YrŒ‚T)côJ½É/x 1z%Þä÷Å”yA1*yô”_;•bTòè)¿Å&Ç(Èž2Æ ä1˜ü2¬cPòL~·N‰‘G£’Ç@ù])F%òrŒ‚„*c$%dò‹ÃBŒ¤ä‘L~Q‰‘Z£’G¢ü:³£’G¢üv¤£ ÇÊ£’ÇhòKÖBŒQÉc4ùM%F^´AŒJ#åW¿¥•(© &“qpûoƒ3j¹ >(™ç2¯¤.P>Õãàîágd4¯džWÎ<)©#“!9¸ù¸Á}]OJæyIÁ+©#Êg¦Ü»ÜàŒð†à•ÌóZ‚Jê¢ÉG¼ÜúÜàŒ"/ƒJæyŽÁ+©‹”O¤9¸sºÁ©Á+™çÕ9Ÿ”Ô%“Ð9¸ñºÁ _Ÿ”Ìó²ƒWR'ïÛò²óÞÊvume»MS4ÆØS>mHŒñºËöë3²ýúšl¿¶²½ žï”M:.Û¯¯Éök+Û›àÝ}ÝeûõÙ~}M¶_[ÙÞ¯¤n—í×gdûõ5Ù~me{¼¢»¯»l¿>#Û¯¯Éök+ÛÛà•Ôí²ýúŒl¿¾&Û¯­lo‚Wt÷u—í×gdûõ5Ù~me{¼’º]¶_Ÿ‘í××dûµ•íMðŠî¾î²ýúŒl¿¾&Û¯­loƒWR·Ëöë3²ýúšl¿¶²½ ^ÑÝ×]¶_Ÿ‘í××dûµ•ímðJêvÙ~}F¶__“í×V¶7Á+ºûºËöë3²ýúšl¿¶²½ ^IÝ.Û¯ÏÈöëk²ýÚÊö&xEw_wÙ~}F¶__“í×V¶·Á+©{M¶_û²ý~B&»Û~™Î§|ˆ&ã®yP¶oðí$š žŒ»À(~Sb$Å å#?ªó ¾#Ç(ì—1Z%ÖäƒHŠð ¾Ú£ÄÈo‘CŒJ",åãQjí ¾%$Ç(ì„—1:%ÎäC[Jê ¾p¤ÄÈoxCŒJ"å£d*ç ¾»$Ç(ìk—1z%Þän ä ¾¥ÄÈo_CŒJ"<åcwêà ¾Q%Ç(ìR—1%ÁäÀÊÝ ¾œ¥ÄÈoFCŒJ"å#ŠªÚ ¾ç%Ç(ì9—1’’2ùàäƒâuƒo§Œ)1ò[Ë£’¢|œóAºÁ·³Ïä…ä2ƨ$"š|ÈôA)ºÁ·Ù”ùbˆQID¤|ôõAŹÁ·sâä…ýà2Ƥ$"™| ÷Aa¹Á·Óë”ùm_ˆQIDG?ÞO˽ϭ2tf²»z݆Þç]ÎÏ(ÙS†!ºöãõ øðF2¶Á“âò)êÇ%ãÌIÆ*øJ§Að­–l‚WÄà¼kÉù-9sZ²^É|+2Ûà•Ôí"s~FdΜȬ‚wJæ[õÙ¯ÈÇyWŸó3êsæÔg¼’ùV–¶Á+©ÛeéüŒ,9YZï•Ì·zµ ^œó®WçgôêÌéÕ:x%ó­mƒWR· Ùù!;sB¶ >(™on¼"Qç]áÎÏ(Ü™S¸uðJæ[éÛ¯¤n—¾ó3Òwæ¤o<)™o5q¼"jç]ÏÏhâ™ÓÄuðJæ[±Ü¯¤nËó3byæÄr|T2ߪè&xEÏ»ŠžŸQÑ3§¢ëà•Ì·òº ^IÝ.¯çgäõÌÉë*ø¤d¾ÕÝMðŠpžwÝ=?£»gNw×Á+™oy¼’ºC‚üV_ø­Ú5ÊýrDïË.È—gù"mÕÚ Œb·j1FRœPîîs\w/ÒV-ÆÈoÕBŒŠ>^vy½<#¯i«¶Š‘ݪÅ•Dì*zyFE/ÒV-ÆÈoÕBŒŠÚ]v±¼<#–i«¶Š‘ݪÅ•DìšxyF/ÒV-ÆÈoÕBŒŠv]vé»<#}i«¶Š‘ݪÅ•Dì wyFá.ÒV-ÆÈoÕBŒŠ]v!»<#di«¶Š‘ݪÅ•DìzuyF¯.ÒV-ÆÈoÕBŒŠ®\vYº<#Ki«¶Š‘ݪÅ•DìêsyF}.ÒV-ÆÈoÕBŒŠJ\v‘¹<#2i«¶Š‘ݪÅ•DìZryFK.ÒV-ÆÈoÕBŒŠæ[vɸ<#i«¶Š‘ݪÅ•DÞªÍÞïm›­Z*té6„ó¾Ã*à ÎíÈ’‡QíŽl#)N(÷E<¨ 78·ñŠ12¯uŒVI„5¹[ãAe¸Á¹ýÕ*Ævµ‰QI„¥ÜCò 2ÜàÜ6*ÆÈl£Ö1:%ÎäΖ•áçvK«ÛÝÒ&F%Žr¿ÍƒÊpƒs›¢#³)ZÇè•Dx“»€T†œÛû¬bl÷>›•DxʽI*à ÎmqbŒÌgcPLî˜zPnpn'³Š±ÝÉlbT(÷q=¨ 78·a‰12–uŒ¤$‚Lî.{Pnpn_²Š±Ý—lbTA”{ÞT†œÛ~Ä™íÇ:ƨ$"šÜ‰÷ 2ÜàÜ.cc»ËØÄ¨$"Rî|Pnpn3cd6ë“’ˆdr×âƒÊpƒs{†UŒíža£’ˆþ™[÷>ËÜÖ …Ç›ÛþhÑ|Pn vÓ½Sþh }PÚm v;¼[Ó?ZPm¨Ý¨CïÔ?Z^”c¨Ý‚ïÎtàÛ…Öj7×Ð;uà–Þ%Ôj·ÍÀ»7ø£…øAq´Ú 1ôNø£eùAÙ³Ú­.ðLþh‘~PÐl v ½SþhÉ~Pªl v{ ¼“éÀ-àŠ Ôn<¡wêÀ-çÊ‹ Ôn)÷h:ðG‹ûƒÂaµ›Eè:ðۨÒ`µÛ@à=™ü>êh±ß@íz'®—ñíÄËåG}öåÇiÙ'¦I oÎü £hwB’-FöìËډݙX‰‰U˜ð‡W6Nv&Vbb&ü铵·3q§0álœìLœÄÄ)Løók'~gâ%&^aÂàØ8Ù™x‰‰W˜ð'0ÖNÂÎ$HL‚„?B±q²3 “ 0áÏ@¬Ð΄$&¤0á1lœìLHbB þÂÚIÜ™D‰IT˜ðÇ6Nv&Qb&ü9€µ“´3I“¤0áòkœìL’ÄD«üI|¥“_ÿûö‡ÔQa+Z!lÑÚà÷Q\ÉÔÊÑçÎä˜>&ãÎä˜àBC†2xR¼Ó6Š}ªÔÊÜçÎä(ƒ'9x©ŸC¼URg÷Ì[)ó=8w&G¼U2/µƒ(ƒWRg÷Ì;)ó=8w&G¼’y©›D¼SRçöÌ;)ó=8w&G¼S2/5£(ƒWRçöÌ{)ó=8w&G¼’y©—E¼WRç÷Ì{)ó=8w&G¼W2/µÂ(ƒWRç÷Ì)ó=8w&G¼’y©“F|PRöÌ)ó=8w&G|P2/5â(ƒWRöÌ“”ùœ;“£ ^ɼÔÇ£ž”ÔÑžy’2߃sgrÁ“’y© H¼’:Ú3¥Ì÷àÜ™eðJæ¥."EðQI]Ü3¥Ì÷àÜ™EðQɼԄ¤ ^I]Ü3Ÿ¤Ì÷àÜ™eðJæ¥&EðII]Ú3Ÿ¤Ì÷àÜ™EðIɼÔ¥ ^IÛüö¤œÉÁxgÎä(F]ßÞ¥*áÞ¦eÂÆ¸Áï£ËöˆëRz§ü6ê¸î~€¸®'…wk:ðû¨ÃÂùâú™”Þ©¿:®| ®SIáÝ™ü>ê°t}€¸$¥wêÀo£Žkψë.Rx÷¦¿:, ®oHé:ðÛ¨ãêïâ:‚ÞƒéÀï£Ë·ˆëõQz§ü6ê¸þz€¸.…w2ø}Ôaõqý9JïÔßFW@×y£ðM~uXÂ<@\OÒ;uà·QÇ5ÈÄuË(¼'ÓßG×£ôN:\ߣûööEl„ïN¶!*ü>êhß@\/½S~u¸Œo ®ŒÞ­éÀ–ñ Ä•ñÒ;uà·Q‡ËøâÊxáÝ™ü>êhß@\/½S~u¸Œo ®ŒÞ½éÀ–ñ Ä•ñÒ;uà·Q‡ËøâÊxá=˜ü>êhß@\/½S~u¸Œo ®ŒÞÉtà÷QGËøâÊxé:ðÛ¨Ãe|qe¼ðM~u´Œo ®Œ—Þ©¿:\Æ7WÆ ïÉtà÷QGËøâÊxét¸^Æ—÷ÏIeÜÞlCTø}ÔÑ2¾ÁÛÑpæG´.¨€2xêÀo£«€ Þþˆ†Á+pIDÁ[ÓßG¼ý ‚Wá‚)ƒ§ü6ê°Ùàíh¼—$L¼3ø}ÔQ ³ÁÛÑ x.( 2xêÀo£+  Þþˆ†Á+pI@Á{ÓßGP¼ý ‚Wá‚þ*ƒ§ü6ê°þÚàíh¼—ä[|0ø}ÔQù¶ÁÛÑ x.¨¿2xêÀo£«¿ Þþˆ†Á+pI<Á“éÀŠÇ ÞþˆÁ«pA{–ÁS~uX{nðöG4 ^KÒµ>šü>ê¨tÝàíh¼ ”oê¨pÞ@ÌÙES¼œØy9ømÔa廘S‰¦K:±órðû¨£ÒuµÚÓOî|bçåà·Q‡µçjÅ£Ÿ¢;±órðû¨£âq)?¢5órðÛ¨Ãêoµò-L!s¦¿:*ß6P«¿ÂtÎ먿:¬¿6ó'Q“ÏÞÉtà÷QGÔbþ$jºä» Q~uXm VÂĉ≗ƒßG•0¨Õ iº}K™y9ømÔa ²8qÎ߸d:ðû¨£"bµ*à<ý‰—k»oŸ\ÿ÷ùç½oÿ•c¤;ÅÞ“¨…¿~ÿ¾ðõE»’œâ„v'œüüõÏj÷m %Üî­D1(íN‘ݧúð^ý zß¹[‰{P¸Û»•¸[…»Û¹;‰;)ÜÝÎÝIÜÂÝíÜÄînçî$îNáî {—Þ£ÂÝïܽĽú;/pb/mð®p÷;w/q¯ÿ¬„Ã^Ú¥÷¤p;÷ q¯þ2ÌœØK¼+ÜÃÎÿÓ®ÏûuË\Á'78)÷$"ö¸â=ö*áQñ‰½®xO†]Åžï‰Øe¸àý£añÞKø­·ÞõÂŵÃÛšqªœìí¬ÙšqsBоfœ¤šñiŠ%|oÚûn%ŠA¡(ÔŒ“T3jï;w+q w¡fœ¤šQyßÛæ¾;‰;)Ü…šq’jFí}çî$î¤pjÆIª•÷½qí»—¸G…»P3NRÍø4%€{iƒw…»P3NRÍø4KøÞ:ö=HÜ“Â]¨'©f|š.'öÒï w¡fT7•½GëûXͨáÄ^‚bͨà{ŸÒ÷±šQɽÄšQÁ÷^ïc5£†» bÍ@xÙ^¸¸®J͸öŸ3°O¼T3®J͸}ÎÀ{GÙè]¢¨ÔŒëÑçŒÚ;ñmæKï ÷£Ï•÷¢ÕºÄ]©×£Ïµwâ½—ÞîGŸ3*ïE³s‰»R3®GŸ3°fÝÊ¥šqUjÆõèsÖŒ²Ý¸Ä]©×£ÏX3Š~áR͸*5ãÚΨúz}ÎÀÎÚ‡Ÿ3ªÞÖGŸ3°»ôá猪¿óÑ猽E2Ózà9£j~Ì]\mUjàÍÉû“9›xêlkÌ“¶{*5p¦ÁÞÝ{sØþÍÐxnÏ«êw,¥.(©ËM4 Á^|0rð/l™a#d+e>(™/ºkH™Jæ_Øq«:$K™'%ó¹í†•2OJæ_ذÃÖÉNÊ<)™/úqH™'%ó/ì÷U=•¥ÌG%ó¹Q‡“2•Ì¿°]ˆÍ–½”ù¨d¾èà!e>*™a·±êÂ,e>)™Ï­=¼”ù¤dþ…ÍJlϤÌ'%óEÏ)óIÉ|_ƒTí™Û3ò*'dzJû+3J…édW;¡žž©$KLHaMOõ`‡ã(1‰ “H=mTµ(–˜D…I2=µ·(fú N’Â$Ñ€Î*[ _ßYÑYók:«è,é¬YÑYók:k~Mg•½€¥Ô):k~Mgͯ鬢°¤³fEgͯé¬ù5Uö–2¯è¬ù55¿¦³Š^À’Κ5¿¦³æ×tVÙ Xʼ¢³æ×tÖüšÎ*zK:kVtÖüšÎš_ÓYe/`)óŠÎš_ÓYók:«è,é¬YÑYók:kÒYeËß'tÖ<¤³ŠÖ¼Ïè¬yHg•-tŸÐYóÎ*ZÝ>£³æ!U¶¤}BgÍC:kNÄ÷½ÓYóÎ*;Ä _ßEÑYËk:«èý*é¬EÑYËk:kyMg•Ma¥Ô):kyMg-¯é¬¢[¬¤³Eg-¯é¬å5U¶‘•2¯è¬å5µ¼¦³Šþ²’ÎZµ¼¦³–×tVÙxVʼ¢³–×tÖòšÎ*:ÒJ:kQtÖòšÎZ^ÓYe«Z)óŠÎZ^ÓYËk:«èa+é¬EÑYËk:kÒYeÛ'tÖ2¤³Š&´Ïè¬eHg•]dŸÐYËÎ*ÚÀ>£³–!Uöq}Bg-C:kIÄ7‹ÓYK_gUýV¹¯oÛÖ‘ø£ßª)Þf1ôñ÷uSÉO7Cã]UcØo•Ucm[GjàMOØ*FRb|^UX¥%ÁE#V)ÁAIð j ;´Z)óAÉ|îÐj¥Ì%ó/¨±ªu«”yR2_´n•2OJæ_PcØÓÕI™'%ó¹§«“2OJæ_PcU³W)óQÉ|ÑìUÊ|T2ÿ‚Ã.°^Ê|T2Ÿ»Àz)óQÉü j¬j+e>)™/ÚÃJ™OJæ_PcØ76H™OJæsߨ e>)™ï«±ªol›à¦km㤯ưñ+£Æš¶³­“®«:·JL¢Â¤¯Æ°õj”˜D…I_U½S%&IaÒWc{ïT¦AkéDaÒWcUóSîëÛö‘¤®Ê)ìqÊÊ©¶]$µðçôPÕãT¢Š/ìqj%îAáþ‚"©zœJÜIáþ‚¤À§NâN ÷4AÕãTâî/uìqê%îQáþBU®zœJÜ“Âý…²Š=NƒÄ=)Üûu±jezôÍ_ìEzøÍߪ™èÑ7±èá7«vžGßüÝÛy2Ý@ÞüUu>®Žrw̾ß7?M)ùt>5-?Mt9§ÀÃ]†‡èÝåÔ´‘ü4y:‡ ÷îV÷î3ÜÙÑ;IOlÏÏš;1‘{ÁªåN Eä^°j¹G¸#sÚšweÝ-·pweÝ-·pweÝ­á("weÝ…n«%w§¬»å¹{eÝ-·pÈ=(ën‰£ÜIYw¡ ,pWÖÝq WqWÖÝq WqWÖÝŽ"rWÖ]èM[r÷ʺ;ná{PÖÝq ‡ÜIYwGEà•uZæweÝ=·pweÝ=·pweݽá("weÝ…N¾%÷ ¬»ç¹“²îž[8ä•u÷ÄQîIYw¡Á0pWÖ=p WqWÖ=p WqWÖ=Ž"rWÖ]è{\r'eÝ·pÈ=*븅CîIY÷@Åîå(¡ë2PT–—¸õ©(*ËKÜúT•åº9—ÁGe}ˆK0Ÿ”õ!.Á·àËQB3hˆQIpä2TŨ$Xè]zOJ†"Gñæ½%t‰' E¡ÿsù˜‚˜Ù‡Ø¦¥*!œøÎ%œdxÑ…Xòï¹°•¼Å{щWòNŠ÷Ü ×IÞIñ^t£•¼GÅ{îë%ïQñ^td•¼'Å{î‰$ïIñ^t%­¼Ã(â{—⨢Ϧ2Wnh•¹ŠÎ‘Ê\‰øþ’Å(l’Èf¸é7WÁ‰ï±HRÃ8„m %ïAñžû ZÉ{P¼%ï¤xÏþœäïE«>É{T¼ç^{^òïE³<É{R¼çnwAòžïE»:#_›¹­)WpÑþM™+·i‹Ê\E;5e®D|Óµ<ªê[Æe¸mUÁ‰o{FR'„Ã$ïAñž[YÉ{P¼½»$ï¤xÏÍ·œäïE÷,É{T¼çöW^òïEÿ*É{R¼çTAòžïE)#_›¹Ó)WpÑ‘I™+wNŠÊ\E‡#e®D|¤â<l%ÄfÒô©àÄw""©;‹v:’÷ xÏ m¬ä=(Þ‹–2’wR¼ç¦.NòNŠ÷¢­Šä=*Þsc/yŠ÷¢µˆä=)Þss yOŠ÷¢½†‘¯ÍÜÇ‚”+¸h¡Ì•;3De®¢‚2W"¾QBUöÏe¸=8½‚ß,€¤“Ï^œ·/yŠ÷|`¾•¼Å{qâ½äïùÈz'y'Å{qæ¼ä=*Þó¡ñ^òïÅ©ï’÷¤xÏǶÉ{R¼ç®ùÚÌ磓rç˜+såóÆ£2Wq.¸2W"þôðmÔî¿9im8~þ§ù u?–/Ãßþ¾²\"£„.w¥RœÐˆ©]áÄ*Lì©k\éDab‡˜HÝÝ 'Na↘H]ØJ' 7ÄDê–V8ñ ?ÄDêkQ:Q˜ø!&R÷±ÂIP˜„!&R—°Ò‰Â$ 1‘ºyNHaBCL¤®[¥… 1‘ºcN¢Â$1‘ºX•N&qˆ‰Ô(¢p’&iˆ‰Ôªt¢0I#LœPOÜD#õÄõÄ)NøzNHqB#N„zR:QꉳCL„zN&vˆ‰POJ'J=qnˆ‰POÀ‰ÂÄ 1êIéD©'Î1ê 8Q˜ø!&B=)(õÄ…!&B=' “0ÄD¨'¥¥ž8b"Ôp¢0¡!&B=)(õÄÅ!&B=' “8ÄD¨'¥¥ž¸4ÄD¨'àDa’F˜x¡žø±zâ‹zâ'|=ñcõÄõDq"Ô?VO¼b"Ô?VO¼b"Ô?VO¼b"Ô?VO¼b"Ô?VO¼b"Ô?VO¼b"Ô?VO|b"Ô?VO|b"Ô?VO< 1ꉫ'ž†˜õÄÕ‡˜õÄÕ‡˜õÄÕŸ†˜õÄÕŸF˜i¿‹†ö»BQO‚âDØï¢¡ý®PÔʼn´ßECû]Á1‘ö»hh¿+Ø!&Ò~ íw7ÄDÚý®à†˜Hû]4´ßüi¿‹†ö»‚b"íwÑÐ~WCL¤ý.Úï aˆ‰´ßECû]†˜Hû]4´ßhˆ‰´ßECû]!1‘ö»hh¿+Ä!&Ò~ íw…4ÄDÚý®zL>ú ‹¿ŸLçÓÖ+]¨';üíïÛ(«8êIé„'4âDª'…«0±CL¤zR:Q˜Ø!&R=)œ8…‰b"Õ“Ò‰ÂÄ 1‘êIáÄ+Lü©ž”N&~ˆ‰TO 'Aa†˜Hõ¤t¢0 CL¤zR8!… 1‘êIéDaBCL¤zR8‰ “8ÄDª'¥…Ib"Õ“ÂIR˜¤!&R=)(LRÉý„N¾žD“8êÉûû6JsÂ×pBŠq"Ô“Ò‰U˜Ø!&B=' ;ÄD¨'¥§0qCL„zN&nˆ‰POJ'^a⇘õœ(Lü¡ž”N‚Â$ 1ê 8Q˜„!&B=)„†˜õœ(Lhˆ‰POJ'Qa‡˜õœ(L⡞”N’Â$ 1ê 8Q˜¤&ÂïñÞŒÕWÔ§8aë :!Å 8áë 8QꉳCLøz‚N&vˆ _OÀ‰ROœbÂ×t¢0qCLøzN”zâü¾ž …‰bÂ×p¢Ô†˜ðõ(L¾ž€¥ž8bÂ×t¢0¡!&|='J=qqˆ _OЉÂ$1áë 8Qê‰KCLøz‚N&i„ ÿ{üZ&Æê‰/ê‰Wœpõ¤rBŠqÂÖt¢Ôo‡˜°õ¤r¢0±CLØz‚N”zâݶžTN&nˆ [OЉRO¼bÂ֓ʉÂÄ1aë :Qê‰CLØzR9Q˜„!&l=A'J=ñ4Ä„­'•… 1aë :Qê‰CLØzR9Q˜Ä!&l=A'J=ñiˆ [O*' “Ôa²üÚŽÈoËÿØTû¨AÍ õ§O“½œ;ÇáåM¼†³'ÉWpÅ;{–;Ââ=M½‚+ÞÙóÌîïì‰â\ñΞéð xgOÕ®àŠwö\k„“â 7 áŠw"nÀ£â=nÂQOŠ÷d¸QW¼'âFÝOwýyýuºþÇzŸøØ—hþbÀ>n í«Ÿ´¸ÇQ'î—ÙÀÂq¿ýÃùÞlœ¸)¶ðFÛÉžêûÚ%Nî²þ«áËûïï¿÷Ÿmš­£N»á‘?ç&“V/Åiš¬Ûáø‚§›xxqgñqòq‡Ã=#^Ü‚›Î_ú@¼øn‡8ݾ,ÃÒƒ˜ºâËÎS°;|ûÚ­ÿ÷âDxñí —Éwxñ½Y äxøöõX‡ÄT.\øÇ±Só÷¿¾}þ¸öÿø¿Óý¿?¦ùüõËû8vÜN—CªÞ¿·£hd”šËÍ冿rCsù¡¹üÐ\ah®04 ÍECsÅ¡¹âÐ\ih®ÔÎU]_ß¾à©øf®Û(e‡æ²Cs¹¡¹ÜÐ\~h.?4Wš+ ÍECsÑÐ\qh®84Wš+µsÁõõc¹þïóO¸¾¼!aT9×údÉ•=Ý}äF•s…àøQ•f<âõ…Q €§Ûy›Ü¨r®ä„Qp}­À®¯‹Kü(l›„‚¾'öùQиÄKY…Î#dÐ:$‰£Ê¹.É×Ï?¾ÿ‚&iäIUÎåÒ……ýÀœFÁ:Æ3? ï_Ö £Ê¹E~>aÝÄ7ŠFF…¡¹ÂÐ\44 ͇æŠCs¥¡¹Rw®÷ÿþ|ƒû—%bGÍÆ Ì5›³mçúëG; ®œ3ñ£à.7Qb=.CÑ/CÑ/CÑ/CÑ/ýè›.‹l\MŸCq”šËÍ庙¨{ÑMÆ~({–F•sųãGA²xӅܨbÓnJR\å#ÖŒFå¹Òd.–UV;!úí`Ï«ðF˜k»¸õáËÙÛ7*?F&C¦*4}£ØÕn?‰£ìÐ\vh®þõU7&⯯º}Õ~øë«jÈ#\_Uãáúª:ß×WÕàF¸¾ª>6ÂõU¶«‘¯¯²+|}•Íg”ë«>û™_íúˆgqTÿîÛØ|׾̨òúrëB £Š¹.»Úxʲ {}‡)3s¹‹ë+®…0W¾¾¬ñ·]–&_õéÀ|VëC€ÅQvh.æ»]G_ŸÜ˯P}@ïÉ sÁ»5«ÜFÁ\Q˜«TçÉ]„Qå\VâHð}4B\åÓÉ*ð? ¿ÛIˆ vWÖg ~T‚¹.QqqßíæŒ\öšhŽÂGÙ¡¹ìÐ\ýÚÑSË^…õi´ü}¢>t–¿OTgË ÷‰òYù>Q+Ü'ð¤Øý>QjNd \&êƒWÃtIü¨ri a•ßFùQå:F6÷õ¡¨iòGßm+pÄûÄeâG•÷‰uµƒ0ŠÊ»„”¯ò>á&k…QÅ\~òÂ\å}"¬ï¨ò>'Ï‚§ÌU.£Š¸.Ó™y†iÎ%e¿µÍñ£â(;4—šË Í冿òCsù¡¹ÂÐ\ah.š‹†æŠCsÅ¡¹ÒÐ\©£'>ÿÀ}€ÉP¢ÄŽZú£ªgÑõ¢ÕäŸëNß“5íýësÕR{r†œ0W^ÇuÔ}·“•×qò>ÙÐŽªžt„è«'!z|Ò‘¢Ç')z|Ò£Mþ±³ÝÞÉ?cK”õ1'9Fí™ðkµÉ £(ŠÁ qí™XËžg._•^øÜƒ^ýø% 8aTÎjˆª¸œýZ®„QE}¼XøQÅàrv! £¨ø’¹ûÞGí××:êÛZû•çZï&’Çç²i%)ŒÊs9cå¹ÜZ„LP1WpNÈ},æ¢xâŠÅ\ñ…Q©˜+¥‹‰¬íÇÏ0MV¿|ûx…7__S ©½c>Fu®¯û¨ÞõõÕ¹¾î£z××cTçúºê]_Qëë>ªw}=Fu®¯û¨ÞõõÕ¹¾î£z××cTçúºê]_QÍõõåÛç·ßoÿüÇÿf²RzDyLP-1.10.4/Data/Netlib/configure0000755000175200017520000052452113374041214015060 0ustar coincoin#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for DataNetlib 1.2.7. # # Report bugs to . # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # # # Copyright 2006 International Business Machines and others. # All Rights Reserved. # This file is part of the open source package Coin which is distributed # under the Eclipse Public License. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='DataNetlib' PACKAGE_TARNAME='datanetlib' PACKAGE_VERSION='1.2.7' PACKAGE_STRING='DataNetlib 1.2.7' PACKAGE_BUGREPORT='https://projects.coin-or.org/BuildTools/' ac_unique_file="configure.ac" ac_default_prefix=`pwd` # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS ALWAYS_FALSE_TRUE ALWAYS_FALSE_FALSE have_svnversion DATANETLIB_SVN_REV EGREP LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOLM4 have_autoconf have_automake have_svn BUILDTOOLSDIR AUX_DIR abs_source_dir abs_lib_dir abs_include_dir abs_bin_dir HAVE_EXTERNALS_TRUE HAVE_EXTERNALS_FALSE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP COIN_HAS_ZLIB_TRUE COIN_HAS_ZLIB_FALSE build build_cpu build_vendor build_os EXAMPLE_UNCOMPRESSED_FILES EXAMPLE_FILES EXAMPLE_CLEAN_FILES ABSBUILDDIR LIBEXT VPATH_DISTCLEANFILES LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # 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. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= 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 ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -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 | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$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 ;; -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 ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) 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 ;; -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=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 ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && 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'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac 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 echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 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 # 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 its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | 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 if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # 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 DataNetlib 1.2.7 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 \`..'] _ACEOF cat <<_ACEOF 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] --datadir=DIR read-only architecture-independent data [PREFIX/share] --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] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _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] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of DataNetlib 1.2.7:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-zlib do not compile with compression library zlib --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-msvc Prefer (i)cl/ifort/link over GNU on MinGW/Cygwin. Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP 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 fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style 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 elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF DataNetlib configure 1.2.7 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by DataNetlib $as_me 1.2.7, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { 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` hostinfo = `(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=. echo "PATH: $as_dir" done } >&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_sep= 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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$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 ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >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 # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" 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. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 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 `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 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 { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`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. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } 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 # List one file in the package so that the configure script can test # whether the package is actually there # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. # As backup, we make sure we don't loose an FLIBS if it has been set # by the user save_FLIBS="$FLIBS" # A useful makefile conditional that is always false if false; then ALWAYS_FALSE_TRUE= ALWAYS_FALSE_FALSE='#' else ALWAYS_FALSE_TRUE='#' ALWAYS_FALSE_FALSE= fi # We set the following variable so that we know later in AC_COIN_FINALIZE # that we are in a project main directory coin_projectdir=yes # Set the project's version numbers cat >>confdefs.h <<_ACEOF #define DATANETLIB_VERSION "$PACKAGE_VERSION" _ACEOF coin_majorver=`echo $PACKAGE_VERSION | sed -n -e 's/^\([0-9]*\).*/\1/gp'` coin_minorver=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.\([0-9]*\).*/\1/gp'` coin_releasever=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\).*/\1/gp'` if test "x$coin_majorver" = x ; then coin_majorver=9999 ; fi if test "x$coin_minorver" = x ; then coin_minorver=9999 ; fi if test "x$coin_releasever" = x ; then coin_releasever=9999 ; fi cat >>confdefs.h <<_ACEOF #define DATANETLIB_VERSION_MAJOR $coin_majorver _ACEOF cat >>confdefs.h <<_ACEOF #define DATANETLIB_VERSION_MINOR $coin_minorver _ACEOF cat >>confdefs.h <<_ACEOF #define DATANETLIB_VERSION_RELEASE $coin_releasever _ACEOF # We use the following variable to have a string with the upper case # version of the project name COIN_PRJCT=DATANETLIB # Set the project's SVN revision number. The complicated sed expression # (made worse by quadrigraphs) ensures that things like 4123:4168MS end up # as a single number. # Extract the first word of "svnversion", so it can be a program name with args. set dummy svnversion; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svnversion+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svnversion"; then ac_cv_prog_have_svnversion="$have_svnversion" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svnversion="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svnversion" && ac_cv_prog_have_svnversion="no" fi fi have_svnversion=$ac_cv_prog_have_svnversion if test -n "$have_svnversion"; then echo "$as_me:$LINENO: result: $have_svnversion" >&5 echo "${ECHO_T}$have_svnversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "x$have_svnversion" = xyes; then svn_rev_tmp=`LANG=en_EN svnversion $srcdir 2>/dev/null` if test "x$svn_rev_tmp" != xexported -a "x$svn_rev_tmp" != x -a "x$svn_rev_tmp" != "xUnversioned directory"; then DATANETLIB_SVN_REV=`echo $svn_rev_tmp | sed -n -e 's/^[0-9]*://' -e 's/\([0-9]\)[^0-9]*$/\1/p'` cat >>confdefs.h <<_ACEOF #define DATANETLIB_SVN_REV $DATANETLIB_SVN_REV _ACEOF fi fi # Capture libtool library version, if given. coin_libversion=2:7:1 ############################################################################# # We only need automake to generate Makefiles for the distribution # ############################################################################# # Initialize automake echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi am__api_version="1.9" ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; 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 { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # 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. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_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 ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done 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. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$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' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # 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 ( 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 rm -f conftest.file 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". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 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 $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 # AC_MSG_NOTICE([Beginning automake initialisation.]) # Stuff for automake # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } 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='datanetlib' VERSION='1.2.7' 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"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 # Check whether --enable-maintainer-mode or --disable-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; echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$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 coin_have_externals=no if test "$enable_maintainer_mode" = yes; then # If maintainer mode is chosen, we make sure that the correct versions # of the tools are used, and that we know where libtool.m4 is (to # recreate acinclude.m4) LIBTOOLM4= # Normally, $HOME AUTOTOOLS_DFLT=$HOME echo "$as_me:$LINENO: checking whether we are using the correct autotools" >&5 echo $ECHO_N "checking whether we are using the correct autotools... $ECHO_C" >&6 if test "${ac_cv_use_correct_autotools+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_use_correct_autotools=check fi echo "$as_me:$LINENO: result: $ac_cv_use_correct_autotools" >&5 echo "${ECHO_T}$ac_cv_use_correct_autotools" >&6 if test $ac_cv_use_correct_autotools = check; then ac_cv_use_correct_autotools=yes # Check if we have autoconf # Extract the first word of "autoconf", so it can be a program name with args. set dummy autoconf; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_autoconf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_autoconf"; then ac_cv_prog_have_autoconf="$have_autoconf" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_autoconf="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_autoconf" && ac_cv_prog_have_autoconf="no" fi fi have_autoconf=$ac_cv_prog_have_autoconf if test -n "$have_autoconf"; then echo "$as_me:$LINENO: result: $have_autoconf" >&5 echo "${ECHO_T}$have_autoconf" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_autoconf = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether autoconf is the correct version correct_version='2.59' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of autoconf" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of autoconf... $ECHO_C" >&6 autoconf --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of autoconf as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of autoconf as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable autoconf is picked up from the correct location echo "$as_me:$LINENO: checking whether autoconf is coming from the correct location" >&5 echo $ECHO_N "checking whether autoconf is coming from the correct location... $ECHO_C" >&6 autoconf_dir=`which autoconf | sed -e 's=/autoconf=='` autoconf_dir=`cd $autoconf_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $autoconf_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if we have automake # Extract the first word of "automake", so it can be a program name with args. set dummy automake; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_automake+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_automake"; then ac_cv_prog_have_automake="$have_automake" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_automake="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_automake" && ac_cv_prog_have_automake="no" fi fi have_automake=$ac_cv_prog_have_automake if test -n "$have_automake"; then echo "$as_me:$LINENO: result: $have_automake" >&5 echo "${ECHO_T}$have_automake" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_automake = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether automake is the correct version correct_version='1.9.6' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of automake" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of automake... $ECHO_C" >&6 automake --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of automake as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of automake as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable automake is picked up from the correct location echo "$as_me:$LINENO: checking whether automake is coming from the correct location" >&5 echo $ECHO_N "checking whether automake is coming from the correct location... $ECHO_C" >&6 automake_dir=`which automake | sed -e 's=/automake=='` automake_dir=`cd $automake_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $automake_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if this is the correct version of libtool (with escaped dots) if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi correct_version='1.5.22' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` if test -r $want_dir/libtool/ltmain.sh; then have_ltmain=yes : else have_ltmain=no : fi echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of libtool." >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of libtool.... $ECHO_C" >&6 if test $have_ltmain = yes; then if $EGREP $grep_version $want_dir/libtool/ltmain.sh >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of libtool." >&5 echo "$as_me: error: You don't have the correct version of libtool." >&2;} { (exit 1); exit 1; }; } fi else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: I cannot find the ltmain.sh file." >&5 echo "$as_me: error: I cannot find the ltmain.sh file." >&2;} { (exit 1); exit 1; }; } fi fi # Check if we can find the libtool file if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi if test -r $want_dir/aclocal/libtool.m4; then LIBTOOLM4="$want_dir/aclocal/libtool.m4" : else { { echo "$as_me:$LINENO: error: I cannot find the libtool.m4 file." >&5 echo "$as_me: error: I cannot find the libtool.m4 file." >&2;} { (exit 1); exit 1; }; } : fi # Check if we have an Dependencies file if test -r $srcdir/Dependencies; then coin_have_externals=yes fi # Check if subversion is installed and understands https # Extract the first word of "svn", so it can be a program name with args. set dummy svn; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svn+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svn"; then ac_cv_prog_have_svn="$have_svn" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svn="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svn" && ac_cv_prog_have_svn="no" fi fi have_svn=$ac_cv_prog_have_svn if test -n "$have_svn"; then echo "$as_me:$LINENO: result: $have_svn" >&5 echo "${ECHO_T}$have_svn" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test x$have_svn = xyes; then echo "$as_me:$LINENO: checking whether svn understands https" >&5 echo $ECHO_N "checking whether svn understands https... $ECHO_C" >&6 if test "${ac_cv_svn_understands_https+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else svn --version > confauto.out 2>&1 if $EGREP https confauto.out >/dev/null 2>&1; then ac_cv_svn_understands_https=yes else ac_cv_svn_understands_https=no have_svn=no ac_cv_prog_have_svn=no fi rm -f confauto.out fi echo "$as_me:$LINENO: result: $ac_cv_svn_understands_https" >&5 echo "${ECHO_T}$ac_cv_svn_understands_https" >&6 fi # Find the location of the BuildTools directory BUILDTOOLSDIR= if test -r $srcdir/BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/BuildTools else if test -r $srcdir/../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../BuildTools else if test -r $srcdir/../../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../../BuildTools else { { echo "$as_me:$LINENO: error: Cannot find the BuildTools directory" >&5 echo "$as_me: error: Cannot find the BuildTools directory" >&2;} { (exit better disable maintainer mode.); exit better disable maintainer mode.; }; } fi fi fi # for running automake by make, we need to have Makemain.inc available at the place where it usually can be found during run_autotools if test "$BUILDTOOLSDIR" != "$srcdir/BuildTools" ; then $LN_S `cd $BUILDTOOLSDIR; pwd` "$srcdir/BuildTools" fi # The following variable is set to the name of the directory where # the autotool scripts are located AUX_DIR=$ac_aux_dir fi # helpful variable for the base directory of this package abs_source_dir=`cd $srcdir; pwd` # Stuff for example Makefiles if test x$prefix = xNONE; then full_prefix=$ac_default_prefix else full_prefix=$prefix fi full_prefix=`cd $full_prefix ; pwd` abs_lib_dir=$full_prefix/lib abs_include_dir=$full_prefix/include abs_bin_dir=$full_prefix/bin if test $coin_have_externals = yes && test x$have_svn = xyes; then HAVE_EXTERNALS_TRUE= HAVE_EXTERNALS_FALSE='#' else HAVE_EXTERNALS_TRUE='#' HAVE_EXTERNALS_FALSE= fi # AC_MSG_NOTICE([End automake initialisation.]) # check if ZLIB is available, in which case we do not decompress DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-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='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_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" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done 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 echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out 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. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* 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 -std1 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 -std1. */ int osf4_cc_array ['\x00' == 0 ? 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 # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f 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 depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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'. 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 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 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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 echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$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 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 echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f 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 echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #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)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF 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=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done coin_has_zlib=no # Check whether --enable-zlib or --disable-zlib was given. if test "${enable_zlib+set}" = set; then enableval="$enable_zlib" coin_enable_zlib=$enableval else coin_enable_zlib=yes fi; if test $coin_enable_zlib = yes; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([zlib.h],[coin_has_zlib=yes],[],[$hdr]) for ac_header in zlib.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------------------- ## ## Report this to https://projects.coin-or.org/BuildTools/ ## ## ------------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF coin_has_zlib=yes fi done if test $coin_has_zlib = yes; then echo "$as_me:$LINENO: checking for gzopen in -lz" >&5 echo $ECHO_N "checking for gzopen in -lz... $ECHO_C" >&6 if test "${ac_cv_lib_z_gzopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gzopen (); int main () { gzopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_z_gzopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_z_gzopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_z_gzopen" >&5 echo "${ECHO_T}$ac_cv_lib_z_gzopen" >&6 if test $ac_cv_lib_z_gzopen = yes; then : else coin_has_zlib=no fi fi if test $coin_has_zlib = yes; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_ZLIB 1 _ACEOF fi fi if test x$coin_has_zlib = xyes; then COIN_HAS_ZLIB_TRUE= COIN_HAS_ZLIB_FALSE='#' else COIN_HAS_ZLIB_TRUE='#' COIN_HAS_ZLIB_FALSE= fi ############################################################################# #Find out what the data files are and create links if this is a VPATH config# ############################################################################# echo "$as_me:$LINENO: checking whether this is a VPATH configuration" >&5 echo $ECHO_N "checking whether this is a VPATH configuration... $ECHO_C" >&6 if test `cd $srcdir; pwd` != `pwd`; then coin_vpath_config=yes; else coin_vpath_config=no; fi echo "$as_me:$LINENO: result: $coin_vpath_config" >&5 echo "${ECHO_T}$coin_vpath_config" >&6 # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # for backward compatibility # Check whether --enable-doscompile or --disable-doscompile was given. if test "${enable_doscompile+set}" = set; then enableval="$enable_doscompile" enable_doscompile=$enableval else enable_doscompile=no fi; # Check whether --enable-msvc or --disable-msvc was given. if test "${enable_msvc+set}" = set; then enableval="$enable_msvc" enable_msvc=$enableval else enable_msvc=no if test "$enable_doscompile" = msvc ; then enable_msvc=yes elif test "$enable_doscompile" != no ; then { { echo "$as_me:$LINENO: error: --enable-doscompile=$enable_doscompile not supported anymore." >&5 echo "$as_me: error: --enable-doscompile=$enable_doscompile not supported anymore." >&2;} { (exit 1); exit 1; }; } fi fi; if test "$enable_msvc" = MD; then enable_shared=yes enable_msvc=yes fi if test "$enable_msvc" = yes; then case $build in *-cygwin* | *-mingw*) ;; *) { { echo "$as_me:$LINENO: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&5 echo "$as_me: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&2;} { (exit 1); exit 1; }; } ;; esac fi files=`cd $srcdir; ls *.mps.gz` # We need to do the following loop to make sure that are no newlines # in the variable for file in $files; do EXAMPLE_FILES="$EXAMPLE_FILES $file" done if test $coin_vpath_config = yes; then lnkcmd= if test "$enable_msvc" = yes; then lnkcmd=cp fi case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) lnkcmd=cp ;; esac if test "x$lnkcmd" = xcp; then { echo "$as_me:$LINENO: Copying example files (*.mps.gz)" >&5 echo "$as_me: Copying example files (*.mps.gz)" >&6;} else { echo "$as_me:$LINENO: Creating links to the example files (*.mps.gz)" >&5 echo "$as_me: Creating links to the example files (*.mps.gz)" >&6;} lnkcmd="$LN_S" fi for file in $EXAMPLE_FILES; do rm -f $file $lnkcmd $srcdir/$file $file done EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES *.mps.gz" else EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES" fi # In case there are compressed files, we create a variable with the # uncompressed names EXAMPLE_UNCOMPRESSED_FILES= for file in $EXAMPLE_FILES; do case $file in *.gz) EXAMPLE_UNCOMPRESSED_FILES="$EXAMPLE_UNCOMPRESSED_FILES `echo $file | sed -e s/.gz//`" ;; esac done ############################################################################## # Finishing up by writing all the output # ############################################################################## ABSBUILDDIR="`pwd`" # Here list all the files that configure should create (except for the # configuration header file) ac_config_files="$ac_config_files Makefile coindatanetlib.pc coindatanetlib-uninstalled.pc" # Finally, we let configure write all the output... echo "$as_me:$LINENO: checking which command should be used to link input files" >&5 echo $ECHO_N "checking which command should be used to link input files... $ECHO_C" >&6 coin_link_input_cmd="$LN_S" case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_link_input_cmd=cp ;; esac echo "$as_me:$LINENO: result: $coin_link_input_cmd" >&5 echo "${ECHO_T}$coin_link_input_cmd" >&6 if test x$coin_skip_ac_output != xyes; then # library extension case "$CC" in clang* ) LIBEXT=a ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LIBEXT=lib ;; *) LIBEXT=a ;; esac # Define VPATH_DISTCLEANFILES to be everything that needs to be # cleaned for distclean in a vpath configuration VPATH_DISTCLEANFILES="$coin_vpath_link_files" # Take out subdirectories if their configuration concluded that they # don't need to be compiled if test x"$coin_ac_skip_subdirs" != x; then new_subdirs= for i in $subdirs; do skipme=no for j in $coin_ac_skip_subdirs; do if test $i = $j; then skipme=yes; fi done if test $skipme = no; then new_subdirs="$new_subdirs $i" fi done subdirs="$new_subdirs" fi # need to come before AC_OUTPUT if test x$coin_projectdir != xyes; then # write coin_subdirs to a file so that project configuration knows where to find uninstalled projects echo $coin_subdirs > coin_subdirs.txt else # substitute for OBJDIR, needed to setup .pc file for uninstalled project ABSBUILDDIR="`pwd`" fi 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, don't put newlines in cache variables' values. # 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. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *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 \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" 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}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ 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[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then we branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. cat >confdef2opt.sed <<\_ACEOF t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g t quote s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g t quote d : quote s,[ `~#$^&*(){}\\|;'"<>?],\\&,g s,\[,\\&,g s,\],\\&,g s,\$,$$,g p _ACEOF # We use echo to avoid assuming a particular line-breaking character. # The extra dot is to prevent the shell from consuming trailing # line-breaks from the sub-command output. A line-break within # single-quotes doesn't work because, if this script is created in a # platform that uses two characters for line-breaks (e.g., DOS), tr # would break. ac_LF_and_DOT=`echo; echo .` DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` rm -f confdef2opt.sed ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${ALWAYS_FALSE_TRUE}" && test -z "${ALWAYS_FALSE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${HAVE_EXTERNALS_TRUE}" && test -z "${HAVE_EXTERNALS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_ZLIB_TRUE}" && test -z "${COIN_HAS_ZLIB_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_ZLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_ZLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $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} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by DataNetlib $as_me 1.2.7, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -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 --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ DataNetlib config.status 1.2.7 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. 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=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; 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 if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "coindatanetlib.pc" ) CONFIG_FILES="$CONFIG_FILES coindatanetlib.pc" ;; "coindatanetlib-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES coindatanetlib-uninstalled.pc" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; 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_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 to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@ALWAYS_FALSE_TRUE@,$ALWAYS_FALSE_TRUE,;t t s,@ALWAYS_FALSE_FALSE@,$ALWAYS_FALSE_FALSE,;t t s,@have_svnversion@,$have_svnversion,;t t s,@DATANETLIB_SVN_REV@,$DATANETLIB_SVN_REV,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@mkdir_p@,$mkdir_p,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@AMTAR@,$AMTAR,;t t s,@am__tar@,$am__tar,;t t s,@am__untar@,$am__untar,;t t s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t s,@MAINT@,$MAINT,;t t s,@LIBTOOLM4@,$LIBTOOLM4,;t t s,@have_autoconf@,$have_autoconf,;t t s,@have_automake@,$have_automake,;t t s,@have_svn@,$have_svn,;t t s,@BUILDTOOLSDIR@,$BUILDTOOLSDIR,;t t s,@AUX_DIR@,$AUX_DIR,;t t s,@abs_source_dir@,$abs_source_dir,;t t s,@abs_lib_dir@,$abs_lib_dir,;t t s,@abs_include_dir@,$abs_include_dir,;t t s,@abs_bin_dir@,$abs_bin_dir,;t t s,@HAVE_EXTERNALS_TRUE@,$HAVE_EXTERNALS_TRUE,;t t s,@HAVE_EXTERNALS_FALSE@,$HAVE_EXTERNALS_FALSE,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@CPP@,$CPP,;t t s,@COIN_HAS_ZLIB_TRUE@,$COIN_HAS_ZLIB_TRUE,;t t s,@COIN_HAS_ZLIB_FALSE@,$COIN_HAS_ZLIB_FALSE,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@EXAMPLE_UNCOMPRESSED_FILES@,$EXAMPLE_UNCOMPRESSED_FILES,;t t s,@EXAMPLE_FILES@,$EXAMPLE_FILES,;t t s,@EXAMPLE_CLEAN_FILES@,$EXAMPLE_CLEAN_FILES,;t t s,@ABSBUILDDIR@,$ABSBUILDDIR,;t t s,@LIBEXT@,$LIBEXT,;t t s,@VPATH_DISTCLEANFILES@,$VPATH_DISTCLEANFILES,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # 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. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;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,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; 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. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || 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"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # 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 || { (exit 1); exit 1; } fi if test x"$coin_vpath_link_files" = x; then : ; else lnkcmd="$coin_link_input_cmd" if test "$lnkcmd" = cp; then { echo "$as_me:$LINENO: Copying data files for VPATH configuration" >&5 echo "$as_me: Copying data files for VPATH configuration" >&6;} else { echo "$as_me:$LINENO: Creating VPATH links for data files" >&5 echo "$as_me: Creating VPATH links for data files" >&6;} fi for file in $coin_vpath_link_files; do dir=`(dirname "./$file") 2>/dev/null || $as_expr X"./$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"./$file" : 'X\(//\)[^/]' \| \ X"./$file" : 'X\(//\)$' \| \ X"./$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"./$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test -d $dir; then : ; else { if $as_mkdir_p; then mkdir -p $dir else as_dir=$dir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dir" >&5 echo "$as_me: error: cannot create directory $dir" >&2;} { (exit 1); exit 1; }; }; } fi rm -f $file $lnkcmd $abs_source_dir/$file $file done fi { echo "$as_me:$LINENO: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&5 echo "$as_me: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&6;} if test x$coin_projectdir = xyes; then { echo "$as_me:$LINENO: Configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Configuration of $PACKAGE_NAME successful" >&6;} else { echo "$as_me:$LINENO: Main configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Main configuration of $PACKAGE_NAME successful" >&6;} fi else { echo "$as_me:$LINENO: No configuration of $PACKAGE_NAME necessary" >&5 echo "$as_me: No configuration of $PACKAGE_NAME necessary" >&6;} fi DyLP-1.10.4/Data/Netlib/scorpion.mps.gz0000644000175200017520000001723210430174061016136 0ustar coincoin‹®K®9scorpion.mps¥]ëŽì6süoÀï°/p²yÿi8Fàóq`'HÞÿI2»;âHV“#_ÂŽê´J}¡.Õ­Ÿ¿ýùÇGý÷Ïïýý_ÿù×Ï_ùû¯ÿýç×_>~~|ü^ÿ›ÿþØ4.ÚºBÝôØÁ»ºé6À,`0ó ûã{Ó¾6¥„º™ 6]ÝL ›€EÀ`0˜Ì&€ `0 ˜©0[ 6+Ìæ„Í ³ °Xü„ýëk3$lÚºéMÝt›°&°&°faÍÀš©0S6+Ìä 3©`°X,æó€9À`˜­ÜŒ­§Ä˜„ÍÌZçë¦Ç_½ÔÍÐlfDµ ª#6 ¢Ú#”s€ `˜ÌdDµ ª#6 ¢Ú#”36‹€EÀ`0˜Ì&€YÀ,`0cÕ¡œ±)ˆêˆMÀ¢G(gl ¢ºÙD¬;XXX³°faÍx„rƦ ª#6 ¢°X,ó€9À`˜DµG(gl"Rk5l>¢ÚÕ¿ÖÍÇ_=þŠdØ7`ßZå{ó™ (Å< ‚{Tp˜LÀ,`¨;uGPwuGPwuGPwuGPwuGPwuGPwuGPwÄfÃê$X,V'‹ÕÉbu²X,V'ûµ:=3< ð{d‹Ç_±:Y¬N«“Åêd±:Y¬N«“Áêd°:¬N«“Áêd"`°˜Ì†ÕÉ`u2b‘ €Âo´µˆ=â±^765ÁÔê¦ûÞ|Æ: t³Ôuºîs€ `˜ ÕÈ¡ ª‘  ª‘  ª‘  ª‘  ª‘  ª‘  ª‘`0¬Y‚5ËbͲX³,Ö,‹5ËbͲ_kÖwüF\¸„&À±ƒG^`ͲX³,Ö,‹5ËbͲX³,Ö,ƒ5Ë`Í2X³ Ö,ƒ5ËDÀ`0˜ k–ÁšeDë›X ‚+¢d6: ÒzTZJëÀ0 êƒC}ÔA}ÔA}ÔA}ÔA}ÔA}ÔA}ÔÁÕ«àêU°ŠV‹UÄb±XE,V‹UÄF\bG\v¢ÇՊǾXE,V‹UÄb±XE,V‹UÄ`1XE VƒUÄ`1¸Ç1¸Ç1¸Ç1¸Ç1¸Ç1XE V#¸Ä¶¸Ä¶(ÐÁQåšš¿ÅÑ£8:À`˜ )íÒ)-HiAJ RZÒ‚”¤´ ¥)-HiAJ RZÒ‚ËPÁe¨ ð ¿Eá·(ü…ߢð[~}È%3 ¦úæfÖPø- ¿Eá·(ü…ߢð~ƒÂoPø ¿Aá7¸Y1¸Y1¸Y1¸Y1¸Y1(ü…ß®•-®•-jêg”üþ׿þçÏŸŸÏ/ÿþïóñëéÆïu ÿìññ¼É<ýùÇñWüqo=…>!iÿ*æˆ 1ÇW~ïåj¨¸tÁÈ ÞIöøÊ¿ç^5"ºSŸ¤î‡­‘¡çÃ~<Ÿÿ\¾Ö¿{#Ç“b ç?ß:ôðÜ»ÁçY6<Ì{À½[r÷C<–nC—LÇ—ƒî?Žï[ŠÞsÿ8âš;à׸—%÷îå÷ò¦ß?Ž\fðKÜCXǼã1_á3Š”Õ>qï”ÕÇd€ë£%Up/­+œ§uîý^ò^\w\yþ0œ!ábÂ¾àž–ܵ´ŽiÚ¹¯ÇF&ðŽû#«í÷t‹{rKîZZ'w‹;àÛ~$ö¿È½¬c^Ië„¢2R¤¬&ð‰{§¬>b€ë3»îØKë §i-ÖòÕºÂÅögÈ}G‡HW¿ß'õpéÓÏÇ5÷b—ܵ´.vÚ÷óŠUá=÷‡7¸~{Zr×Òº¤{ÜÓ›~$µÌàW¸[ãÖ1ÏÓðEÊjŸ¸wÊê±Zû¾ XÈ•þVZÎÓÚõ¥Ñ¸øþjJÒó‡ÔŸº8‡¾<† ÷ڰ䮤5à<´]ŸÆŽðžûÇñT î€_â.vÉ]IkÀ¯q¯ð]¿®~¿Æ=­c^Ië ŸQ¤¬&ð‰{§¬ï¸NÑÕÊåÝü~ ØÜÀn]Qöªµ#Ú+Fjíð†ïåk’ÆáQDYñZ’Ö½‚%§ 1±>Ây6„Ò¥xœX—Ø”}^¿¥nq³ƒ—4¬&BB¥ CZr×V€°| Óq$C³ÈUxÏý±ç îé÷è–ܵ º7ý~æ^á»~\ð¥ü÷²ä®­±Üã^nÅ<ài¸&Îkî)ʵ—ïi½òg¥&U¸ä2çîL_PsàE{dPÌvIQKë¼| ÓüG{Œ>c²qð¨I…ý «®øg<ó#\ ¹›Wý“ÓŽJ-=“,[S,îÅ ï™|sï”ÕI“ÍNZgvݱ—ÖNÓZ¬ðÕºÂÅf&’ð\ ¸3»"‰†{‘%w-­‹¬B»ãÞ D„poÄ1 wÀ¯qÏkîJZ—|{~Óï8&ßán_rWÒðEÊjŸ¸wÊê,Žñim­!Wú[i 8Ok×—ž2±.Ã=IdE RáÁïŠ$ZîqÉ]IkÀyh»È"ÞsoÄ1÷x‹»Èš;OkÀ¯q¯ð]¿wâ¹Ç=/¹ki-(*#EÊjŸ¸wÊê,ŽÉ;iíjåò~~?P<éVêÕ”W^ÐùZ;¢\0âñ$P”½j’ÆL^"ªF´$…ÆBÈéj^–gž a Ñt)'Ö%F&E Rá)ïŠ$â1ä%wmËÇ0÷N“ ÷F£qÏ·¸G¿ä®­Ñ¿é÷N âßô{'Žñ·¸'³æ®¬ÉÜâ^á×bð4\ç î‘T®½|Oë•?+5©Â¥˜9wg„‹/R¤â‹æò/Ë’¢–Öyù¦?ø³8Fªøbd²qðµ&MÒ²áÜ?“3?Â¥DöPñOÎ;þ)µôL²lM±ø[+¼g¢ˆcš—ÊÆE¹Çðƒ=Pà¯;ö©âÁÊ^D³àjàüýçëflt\£nñŠð¤žºBþu[£Âÿ¸#Gì×F”ìâŽ/K#¢¸ÁË–‘šÊÆ3#г|Þ1ªK3Kø‰¯ø$g¾fª<…'p¼0#\$^á:“—F¼WŒl9>UÇg’@nrc5ÀÕ;˜×º>IQJLÚr|®UÔ2Ç‹âøLïó!0Rê•’0ŸˆâøB/­\ñµRMÒâÅñ%n0q°dt†;¾ÂUŸ¸¦ßj¬Ï¸ø°ÂeØ‹D|l¥9MÇSfÖ¹v±Âe؋Ȃ?ê#ôM40ÏüðÃë·DÖÅ#BžRÛvf˜çN±žªõ½é)9µ~orF Ìó‡AF¸ô{ÑÙ-¿¿.ÚDÑTmDÝ N%h¢H§6‚ë/ÜWHU#<†Np¯¡B(qŠÀ•ÓÅõNÕˆœ  `™àÏÈØú5ÂwÃΆö•:zS™T·^Þ´žb«Cw(Ó†ªÖQ+µŒ6L¡ƒv6àƒ*Ê5+“iúÝ#s)­þHÍ4ôJ— F‘ÒÚð¨DØ sXSKæ’sÀÇBTUQ¿g<ÙAGòü! Ò‘ <÷nàê!)÷`ù»Æ¦² A ü]#àièŠkî€_âŽþLÎ÷k™¦?ó wÀ7ýÞ©¢ì=îiÉ=ñ^Àg)« |âÞ)«³*Šw+7ц)éBZ7m˜,­‡^µV…Ñ1óÙ/Ÿ3ŽéÈ“¦ð÷²ä®¥uÓ†ÉB{èkUQ…poTQ÷r‹;Ú09w%­S¸Åðm¿ŸTQá÷l—ܵ´Fæ„"e5Âgî²:«¢ìNZgvݱ—ÖM'Ik±Ê€?tq“«:& Ò‘ |˜³ÈÕ1àŽöNÊ]K립“„vǽS9½QE)ܿƽ¬¹+i]Ê=îåM¿wª¨r‡»Ek+室5à3Š”Õ>qï”ÕY6ÒÚ¢ýÖ•÷ÓpžÖnðWF¸ ÷ÐUSéÈ>´]‡ ÷¢w˜rWÒpÚÃÀÕV•÷F¥qO·¸‹[sW†&ˆ»Å½ÂwýÞ©¢Ü=îeÉ]KkAQ)RVøÄ½SVgUTÙIkôŒ{2½x xREÕ«)¯ãAë¾»`Äã°&kªIÙôÕˆ–¤×8rº•„2:&¬³¡› pVEatLb Ç"€§a5aꘈ—øhe§Üµ ,ÃtÜ;UT!ÜU”ƽÜâÃ’»¶Äð¦ß;UTxÓï**ÜâŽÆÎ]›coqOöVÌžFŠÜ©\{ùžÖ+VjRÂH;çîÌðJa<øÉKx‡ëƒ: SÔÒ:/ÃôVEa$ÍÈdãàkMš¤e5¹&g~„ ›…¢ú‡Íx8S¬3fY¶¦XÂ-ŠÞ3QTQ8xÁ×'"›ç¡¼˜´‚›¬ÌÁ÷(¼(C{, ®® íaŽkTQÚ8 Ú!o­]Ã'ʾÆÀ('Ø¥#øì5"мÛ2RSÙ°M¢8Ë—#äŸYÂeNà3ÜŒ`”~aóV‚2'n93멯ÌÀ‰[ŽÇpøÌfà(“F+\½ƒÌA·ÔˆRbÒ–ã1ÈÜ2Ç‹âøLïåˆÃab¸0ŸˆâøBoK; £¹…Ud«8¾¤ &CgéqÇ;³“ñ®i´sL:ÂU§ط…Ú,uM«[!Ö£Q¬Ç—õh¶d .5×¥ÍfáÊó‡ÈÄ&€÷FJ<|#½Êäæ¾1#Doå0ôUM„+Ï5xà¶ß‹ŠMò‘^×'N)mÄÐ NŸL8E·gpÅWBmÄ#à2‹GìEµ|{FÂŽ.·‚ŠÆ¶S{pªÃ<(pªøÛ‚sô]4œ¢øÛ€~}óµ^:jlká۹؎€3è»fòfÕ:–ƒMëéQ‡x•‰3ݳn=*Ö!ªÂ :Dj> t ‡Ç×_12/Û6ÅV]ÖtÓš F‘‰Û˜ýfˆÐ†-ÞNøX8«ð+òWÉ€§ÞHuíÊ'ñ&˜ônà xM¾”{þ:M¾}©…ø)òש€§¡×-np·¸£÷˜s罈€_ãø¦ß;á—Üãž—ÜïS|F‘²šÀ'î²: ¿”NüF?äIÜKë¦Å˜¥õЇ٠¿0i>×èóƒßýš¼˜<…ëÜÑbL¹kicÚC£™Xï¹7Â/…;ZŒ¯qkîJZ§x{|Ûï'áW¼Å=Ë’»–Öè=žP¤¬FøÌ½SVgá—ì¤uf×{iÝt(“´« ¯D‡ò0µ´ €ú ifˆr¸£u™r×Ò­Ë,´;îøÉîðKáøîÏœ»29À˜;ÜßõûIøÕÀ¯qKîJZ>£HYMà÷NY…_q#­-Z˽y?­çií†á•e„Ëð ë% ¦?uqF „ ÷¢/žrWÒpÚÃ0áVø• w¿TîùwñkîJZ‹¿Å½ÂwýÞ ¿ü-î˜H@¹kiíPTFŠ”Õ>qï”ÕIøåÌNZc‚'“¹Š'áW½šòš¨ c)ü#O¹µ½j’&6%íÀg ý'§«‰e,RXgC7ä,üÂX¤<‚Hê7;xÉÃjB@(Œi Üµ .ÃtÜ;ñ“!Üá—ÂðkÜã’»¶Äø¦ß;îñM¿w¯x‹;†ZpîÚH(¹Å=É­˜<×Äyƒ{&•k/ßÓzåÏJMJ·$sîÎ ïýòŸè ¤‘ù%E-­óò1LðgáÆ-LÖ_'ˆÌÒ²áÜ?“3?Â…ÍùQýÃæ—tké ù Åxb$þQ„_8xÁ—U›U£¼˜¼‚›¬Ì8·M(¼(©„W£ÜRR s\×FMa¤ 9xke Ÿˆ',f ác܈r‚]Þ1‚¯bP#¢¸Áû#øü„aÃÇœâ¬`¶ŒT—f–ðA™ïÄ?afR¦‡±YBA™ï·ï1P#ÊÅv…ëFðáƒLgn)ó’߸ƒ|"À2#Êy$o9Cú-s¼(ŽÏÄñ®´sÐ0 _˜ODq|!Ž·¹ùÞ“`ì¼cÙ*Ž/yƒ‰ƒ€%£³ÜñÎìd¼kz ™Â#pam…F¢;šOÂ%¶|Bêb#D''î0‚$åùCfjÀ…•=Ͱ*äV½1’#…:¾ùŠÁ&“ç‰*Oûö¨µ¸ªöŠÜjÃñ^RmÁ¹`p^ZÊ+Ú©=8ÕnÁ¹ÌÂ"î^ƒþhC§*#ܺ¹úvs$¼]Aë2S«ÖQn6­wx¼8Dó0“ëÖ“b¢ÌR¡s˜6à½æ'”#à5`Ó®)Ĉm>ijš†T{Á)$Ö»æ{Ÿ ©B{žxGàCÂCX”ø«JÀ“c“2¨/&ðv&ÒL”JKîÁñW•è“íëÄ5‰¿ª< íbqƒ{ºÅí»œ;oçüwÀ7ýÞ ‹Ü=îeÉ=ñVÀg)« |âÞ)«³°ˆ7³7Ñ¥+åBZ7]º,­‡VÆVX„ÉB‰ L†3$#\LÙ˜4ÜÑ¥K¹ki.]ÚC›`+®±„{#,R¸£K÷÷´æ®¤uJ÷¸§·ý~¥[ܳ[r×Òí»Š”ÕŸ¹wÊê,,r;iÙuÇ^Z7M¾$­Å*óÑä; þ¬“4¨/&ða '˜4ÜÑýK¹kiî_Ú÷NX÷FX¤pü w‹æaÎ]i¾7öwÀwýÞ ‹ì=îiÉ]IkÀg)« |âÞ)«³°(m¤µEw¶·ï§5à<­Ý0ÿ±ŒpžŠT‰ÔøÐ•6Ü‹ÖrÊ]IkÀyhóx[aQ!Üa‘ƽÜâ.aÍ]Ik ·¸Wø®ß;aQ¸ÅMý”»–ÖEe¤HYMà÷NY…Ev'­1RÀ“áÖÅ“°÷•½0R † F<ž»fe¯š¤‰ QhI mN §«‰e²PXgC7`ã,,Âd¡ÂD‹,ÏvW`â›oÍÙ%wmˆËÇ0÷N\c ÷FX¤pü÷´ä®­1½é÷Ž{zÓï°(Ý⎹œ»6UÉÝâžÜ­˜<×Äyƒ{!•k/ßÓzåÏJMJ˜XäæÜ^å>¡ˆU¶Ë൴ÎËÇ0ýÁŸ…E˜X42Y|Â1K?Êj„sÿLÎü6*GõO±;þ©#@fY¶A1Ý£˜ˆ¨°¨=xÁÇI÷¢¼˜²‚›¬Œ ÂçA(¼(3„W£ Rf: s\צ5a* 9xkÝ>øG‡ù2øÞ7¢œ`WvŒàÃÔˆ(nðaǾà`Øü.§8+Ø-#Õ¥™%|PF$>â¯Õü`Ç”IqËñø¤5¢\ÑW¸nßÈtl•2")…;Á”}ËŒ(µ‘¼åx̹·Ìñ¢8>3}I«Ê ”æQ_˜ã­Ã«ÁävÇ*²U_Ê KFg¹ãÙÉx×ôª±ñ) 7+|Â$7ê¥Ì–O(1D1BtXÖ¦ÑüxrƒûÒüLŽW™ÎrÎàŸ3Æ0 ÍAQÈÔ áÈû¦JCG±xE-ëyK¯ñ‚Øè5ª “É U눡]ëdwt2½¡n=+Ö¡Ä@·2Þ²fÀ…öÕzè\¼`„u±ywXðmºØäŠöOÓ¾ØE›ÐF ¯¨EPU"S‹dE-‚q$ž¨²QGwU¦QÊä%÷ൊ0ÅDVÔ"™q¯j•{¾Å=”{4ŠZÄßâø¦ß;µˆ¿Å=”{ÊŠ”ý5™©Eqï”ÕI-ylK1’*¸—Öhí£i=ô?µjŒ#ÉL5àµ&˜]Õ@í}”»–ÖMk í¡·¨ULáÞ¨Eîhí»Æ=/¹kiò=îùm¿ŸÔ"ù÷ì—ܵ´FÏß„"e5Âgî²:«EüNZvݱ—Öè di-V‡ÎÀaZ`U dE1É~W5ÐrKîZZ7-ƒÂÊà´ ÷F-¢qw¸[tRîJZ~‰;à»~ïÔ"r{^rWÒðEÊjŸ¸wÊê¬ÉimÑÒéåý´œ§µ7ŠZãH"S ˆ¢˜À8’¼«h¸£•rWÒpÚÃÏV1a÷F-¢pü÷¸ä®¥µÄ{Üã›~ïÔ"ñw'KîZZ;ÌN2L-µf' S‹dE-";ií0a)3!‡"Ñ@³/Š“â#hc¼wÑÖ>d“ØDÍHÐ’{ErºšˆPÆ‘„u6t]ùgµH çaöE}sµƑȮj yqˆöhÊ][âò1LǽSLáÞ¨Eî€_㞗ܵ æ7ýÞqÏoú½S‹ä[ÜÑLN¹k+@ò·¸Wøµ˜<Ë®Z¤ý”!•k/ßózåÏJMÊsâ™Z$r5B6oÛlí°çµ´ÎËÇ0ýÁŸÕ"swÕ"ÍÁ×ÎýYúQV#œûgræG¸có5TÿÙñOÁ$$s…b¾G1ÿ(j‘æU.¾hØŒåàÅšÜe¶¾)ÀáÊ aÁÕÈ=”A0Â×Àµ/åÀ†àX¿†Oüš 1fiD”ìÍ–‘¸6¢¸ÁÇ#ûnØÐ§8+È– o¡S•”¹*ÊxviÔ"5g ›á”¹*qËñ˜ƒN(Òì _ÁÔ:ëF™«’âÆŒ`4·eF”/aHÞr<†c s¼SŸ™ãS+IÁja>Åñ…oqÍ„|¦…Ud›!‡Ù`â `Éè¬(Fv2Þ5 Hó™“cÄg\ÓÃ#{pi†;´ÁœnJÑ¥@¬ã™svzã¬À}#ÑpèÒ&Ü…‡=ü#gþþ¾ÿþ|ýð)ó°çä2Ϲ4¦«×_Ò îú½äùC~˜Ás¿W|þÐ5ã?®'ðá…qÓa#õ¹R ·ç>ºÇYò/Ý‚?ÿPoJÎðÐ^×_ž×dýœ–Ô)¼§ø}Sòˆ Ó“×Opß9·§õsY¥pwÞëû™ÃGí(<{=3"‘wÃ'øøð*}Ì?”ûz…u‚ íñº%ê£.N¬»!êžÏRÝuyóíÃÚ© î°arð½â±>|:Ãýpùð1ýtd­ügø0½úuð½¶ï˜ZÏÓ;éZRÛÿx¾‘àŸÜ‡g?³>Lb;ÂÇTIy„)œYœòà ýNÏ3nÔ=É‘gð.êìëÔuZÓÇ=Ôìà»kŒCòÓºjÝ,h‡˜§õ¡™Ø”œÌ™Ô¸d˜Áç7u1këØ ž‡½>¦Ÿ°­C÷NðáíÒSÈ2è•ëµå>œºôüÁmY÷ýN/ëaËz¿˜Ä<íøÝgâw_vŠUjÝ3eÂPëf1X­?X?˸qºñ >DݬÖuÃ"5u\`Q7,RŸAûÇÏûí¿ûõ—ÿe­ÏÚðDyLP-1.10.4/Data/Netlib/grow7.mps.gz0000644000175200017520000002764710430174061015362 0ustar coincoin‹XK®9grow7.mps•ÜíŽ$ËqŸñïx}^tÅk÷GÚ"l%ð˜²tÿ7âšÝ33™ñÉ#Aàðtmõdþ+22ë§ýËŸþõϯþç_ÿíÿåÿpÿßßþø‡Ç_¿þù?þü—¿ýùþáþÔ¿ÿõ?¯çõýƒÔ´þ`õ¯?Dý!ë¯úûüp=ëõ\õ\õ\õ\õ\õ\õ\õ\õHý÷H©c u ¤ŽÔ1:RÇ@êH©c u ¤ŽÔ1:RÇ@êH©c u ¤ŽÖ1Ð:ZÇ@ëh­c u ´ŽÖ1Ð:ZÇ@ëh­c u ´ŽÖ1Ð:ZÇ@ëX«c`u ¬ŽÕ1°:VÇÀêX«c`u ¬ŽÕ1°:VÇÀêX«c`u ¬Ž×1ð:^ÇÀëx¯càu ¼Ž×1ð:^ÇÀëx¯càu ¼Ž×1ð:^ÇÀëDƒ¨cu ¢ŽAÔ1ˆ:QÇ êDƒ¨cu ¢ŽAÔ1ˆ:QÇ êDƒ¨cu ¢ŽAÖ1È:YÇ ëdƒ¬cu ²ŽAÖ1È:YÇ ëdƒ¬cu ²ŽAÖ1È:YÇàþáüÛÿùÛ¿þåcżÿùÏŸkäÇú}…ü}iýo?ž÷?¯²ü‹Ëӧ˽}*^úyyÔqÿ÷úž.ϯOýúÔ_KmýZš2]þ®ŸRó×ï—¬ÇõϽ,‡Ë¯õwW}|­Óõwÿ•£íò6B—ÉóõøZ¿ÛŸûïžýòx½_‹|¹¦Ëßý&rý~¹<Ë¿¸.¿ÞÓÝ?ÿãÇ??âýû‚ÿëSòý©>O×÷œŽgætyOGºÉ6ï?c#/Ÿ./ñóö×kšwy¿ž¯áò‚–Ï/]mä5lúòK:îR½§ãókM—·º‹v¼·tü½Ëû½ÞùÚÒññ»çuÙtù†®§Ãäž“i䥤ãu/Löý(L¯Äû•ãô~<™ÓåË3þôqz/y½ÞÃå׳]~×Ók›Þ_éÊñò6?šæ4?¢ÓåýW”Wæ4?Ïׯ.»|™Ÿ;]Ûü|LPªæ4t%‚ïýÎQm¿Bs›¸_O@¹‰Åùçw|É8qþŠ˜.o³è­×4q×Ë®éîý!½Ççk~úo%z½§Ë{å’ë¥Ó¼¿î5æË{q~¾/›¦WózN#¿ç·|¦£?~þ–çôåKu½¿x{©®>–ðŸ¿cØXœ_©6]Þ¬.óÚ«ž×tyHï^ãô¾­,žÓ{ÅëóË—éý½ÀM¿û2½wßÃôÞ+ƒ\Ó—_Wh›æ]Þ÷÷š._*—‡Î‹ò%ÓÈ·ÜuK>W–ú\þx¿ßy}/Êó®úŠkîåî…mºÜ–¡{û¸Z_wì¦Ë{l.õkЍ•u-(6Ï÷×¼÷r~½dº{ÍGãaÐË™N—¯±ùì7{U°»iº¦Ë—Ø\cl$r¼ûò`ÙgA]b#Wøpy¯O½‡­×¾ËÅ]ó{ÞsŠÍǯø’ÏGf•yOŽÍsl2_Óå±l'Þï¹É{{L—·Ê{I‡Ø\¥ &wúöžqé5]n}½|ç{„¼§‘_“ë-1"ÄÆ/ßÓñ±Sq/eù‡®,ã?<ã]²ù¢^Aã«×¶e5(Ëí‹:}uú}„ÞQFèEåãÀÄ·yÿ¹”¸†Ë—Ü@Œåâ‚Ë—>éžÆ©*¼ïcúÝ·ªcUPQ~÷‚ò»/ó¿ÎzÖËתpïÓ÷ëǽÆÖ»|Z>·à5eYýßg¸ç4½wÏô}>S.__W½ž2w’iÓÝ× ¾V–Þ0Þ…/§Ë—x> þòô:¾üúÝÛü轇~_¾|f~9_A{Õçë³µÚ^bgL—/U÷¶lz¬åþÃÆ»¯+¿A_X¶{|ÞOÿ|^îr¿û‚çׇö†þú~Ù\/ï…/ïÿÏ(䚆n Áõõ²y›w~÷þæå×T;îl¼Ês™xFáó~•–-ñ%v¾Ž4u¼»÷æ&to?~¦Ë—×,÷ÏŸ×÷ÉØEŸÏ|ϱ¹Å÷t÷%6ê_¯)×]¨Lw_—†ïË{Q¹ëé{º|Y3^×|nz=Ë^(ñ¼ü}9¼Ý~Mwï©»ûÅÜ÷À÷>#ïÿùŽ ˆÞ«ê犵Å&dº¼ýîvÝÙž÷W)/Ü…úknDïÈÛtù²^æW/×ßÎY>§Ë×sÓç×È/O\”>ö…‡2ÇæcëÓåg‡òz¿{¯Iv‡sêžnù¿ü«§ãUz¹7î3ä«*4r½~Ñ®íò^T̾ªÂ2ï÷:1]¾´_¯–yoÍ|~,óžãåÛÄñíéÇ~¼|ÙJÉg§ÒçÇÞYjÒxryïï¨|ŸâÈ_Žû篸­ß{¡zùú^èeðð‹×Ë}¥G#‹»ëÖküòk«ñùžq™wóïnª^ÞCà×—k{®çÚÓÝ×VÃÞ±úsºûòð›¼æw¬w«2^¾®_µ£]¼¿wàõò­Ä烵ºœë=Íûú&Vž{í¸«Â]u?ŸŒÿ"U÷óϸ~<¾þ_–ñuùÌ®Ž/ttùoË——ú©ÇÏËçßêëòöåáráËÛ—‡Ë•/o;{¸Üøò¶õƒË/z0—_ÞzD¸<ùòW] àò_ÞÞåÀåo¼¼¾+xÂå á.—·C_¸œS×OárN]?u‚Ë9uý\.çÔõm/\Ω»GË9uWc p9§®÷Ip9§®/ãp9§NÚ+¦ùr¡ÔýçWëÅjcïÂì]ör±±waö.Óó¾°waö.û»±waö.û#³±waö.{æ7ö.ÌÞeOÝÆÞ…Ù»ì±ÙØ»0{—aÛÙ»ìkÑÆÞ…Ù;¤£±waö.C9_Ù»0{—¡¯ì]˜½C:{vës::{?¹¼PcïÂì}HÇÆÞ…ÙûPö>OogïÂì}˜Þ½ ³÷az7ö.ÌÞçùéì]˜½Ãü4ö.ÌÞi~*{fï2õˆ{‡ÚÞØ»0{ŸŠóÊÞ…Ùû\œ;{fïò˜ÒÎÞ…Ù»<ÆÞØ»0{‡âÜØ»0{‡âÜØ»0{—¡‡ßÙûTÂWö.ÌÞ‡éÝØ»0{Ÿ§·³waö>OogïÂ즷±waö.y…®ì]˜½Ëc|Æ{fïòB°°waö>Ï{gïÂì}×ÆÞ…Ù;Ħ±waö±iì]˜½Ï±éì]˜½cl {fï›ÊÞ…Ù;Ħ±waö>ÆfaïÂì}ˆÍÆÞ…Ù;Ʀ°waö.i?ÐÙ»0{ŸcÓÙ»0{ÇN¿°waö>ô {fï°˜4ö.ÌÞa1iì]˜½OËøÎÞ¡Whì]˜½C§ßØ»0{Ÿ‹JgïÂìZÁÆÞ…Ù;¤£±waöŽU!ƪ°²÷¹*tö.ÌÞ©*Tö.ÌÞçªÐÙ»0{‡ bcïÂìbSÙ»0{ŸcÓÙ»0{ŸcÓÙ»0{‡Ø4ö.ÌÞç HgïÂìŠJcïÂìŠJcïÂì}¨Ç{§Ã¥ÊÞ…Ù;,9½ ³wZr*{fï°=mì]˜½S§RÙ»0{ÇN¥°waöN5©¾9fïЩ4ö.ÌÞÇš´°waö>>¬ì]˜½CQiì]˜½CƒÛØ»0{‡·±waö>•ÎÞ…Ù;:Uö.ÌÞç¢ÒÙ»0{‡SÆÞ…ÙûðÈ ìŠJeïÂìÒÑØ»0{§íOeïÂì}NGgïÂìvÍ•½ ³÷9½ ³÷9½ ³wZr*{fïÓ1°w\r|ÞÝ.ìÑÆÞ…Ù;LocïÂì}žÞÎÞ…Ùû8½ {fïôB¢²waöNÛ”ÊÞ…Ùû°à ì}nW;{fïÐQ4ö.ÌÞ¡£hì]˜½ÏEgïÂìv9½ ³wXY{fﲿ¢ÝØ»0{‡p5ö.ÌÞ!\½ ³÷i¿³w™ìÃÂÞ…Ù;½Ï¨ì]˜½ÓëªÊÞ…Ù;xWö.ÌÞ錢²waöNo#+{fïC¸ö{ÕÆÞ…Ù;¬ü½ ³w\ù úÂÎÞ祡³waöNÛ‰ÊÞ…Ùû¼òwö.ÌÞa?ÐØ»0{ŸÏ(:{fïtFQÙ»0{§—Ø•½ ³÷96½ ³wzÍRÙ»0{‡Ø4ö.ÌÞ!6½ ³÷¹¨tö.ÌÞiͨì]˜½ÓyyeïÂì}N]gïÂì}î$;{fïsl:{fï´ ­ì]˜½Cl{fï›ÆÞ…Ù;^È›•½ÿ“‡+{Ÿ×¢ÎÞ…Ùûº½Ó>£²waöE¥±waöN­FeïÂì:ÉÆÞ…Ù;,&½ ³wx¬{fïÓ!ÃÎÞéåxeïÂìÖŒÊÞ…ÙûÔI®ì]˜½c«QØ»0{‡‡¿±waöN­†¼cíìþÆÞ…Ù;®…½ ³÷¡ÝØ»0{‡>¶±waö. Çžgeïrœ/·ÊÞä8_®•½—/¯ÄÞ…Ù{ùòJì]˜½—/¯ÄÞ…Ù{ÙÙ+±waö^X%ö.ÌÞËÁ€{fïåyWbïÂ콬Jì]˜½—r¡ÄÞ…Ù{YL”Ø»0{/ÕF‰½ ³÷rª¡ÄÞ…Ù{)VJì]˜½—•P‰½ ³÷Rë”Ø»0{/}’{fï¥T*±waö^–q%ö.ÌÞK¥UbïÂì½4÷Jì]˜½ë^¬6ö®ÌÞu/{Wfï:=ï {Wfïº?°{Wfïº?2{Wfïºg~cïÊì]÷Ômì]™½ë›½+³wÖ¸½ë¾mì]™½C:{Wfï:”ó•½+³wêñÊÞ•Ù;¤£±we·>§£³÷“Ëû5ö®ÌÞ‡tlì]™½Ua`ïóôvö®ÌÞ‡éÝØ»2{¦wcïÊì}žŸÎÞ•Ù;ÌOcïÊìæ§²weö®S¸±w¨í½+³÷©8¯ì]™½Ïʳweö®é!íì]™½ëc,á½+³w(ν+³w(ν+³wzø½O%|eïÊì}˜Þ½+³÷yz;{Wfïóôvö®ÌÞaz{Wfïú˜WèÊÞ•Ù»>Æg¼±weö®! {Wfïó¼wö®ÌÞ‡pmì]™½Cl{Wfï›ÆÞ•Ùû›ÎÞ•Ù;Ʀ°weöN±©ì]™½Cl{Wfïclö®ÌÞ‡Ølì]™½cl {Wfïú˜ö½+³÷96½+³wìô {WfïC¯°±weö‹IcïÊì“ÆÞ•Ùû´Œïìz…ÆÞ•Ù;tú½+³÷¹¨tö®ÌÞ¡lì]™½C:{WfïXb¬ +{Ÿ«BgïÊìªBeïÊì}® ½+³wØ 6ö®ÌÞ)6•½+³÷96½+³÷96½+³wˆMcïÊì}Þ€tö®ÌÞ¡¨4ö®ÌÞ¡¨4ö®ÌÞ‡z<°w:\ªì]™½Ã’ÓØ»2{§%§²weöÛÓÆÞ•Ù;u*•½+³wìT {WfïT“ê›ceöJcïÊì}¬I {WfïÓéÃÊÞ•Ù;•ÆÞ•Ù;4¸½+³whp{WfïsQéì]™½Ó©SeïÊì}.*½+³w8Õhì]™½ÌÀÞ©¨Tö®ÌÞ!½+³wÚþTö®ÌÞçttö®ÌÞi×\Ù»2{ŸÓÑÙ»2{ŸÓÑÙ»2{§%§²weö><{Ç%ÇçÝíÂÞ¡mì]™½Ãô6ö®ÌÞçéíì]™½Ó»°weöN/$*{Wfï´M©ì]™½ ÞÀÞçvµ³weöEcïÊì:ŠÆÞ•ÙûÜQtö®ÌÞa—ÓØ»2{‡•¥±weö®û+Ú½+³wWcïÊìÂÕØ»2{Ÿ6ð;{×É>,ì]™½ÓûŒÊÞ•Ù;½®ªì]™½ÓweïÊìÎ(*{Wfïô6²²weö>„k`ï°Wmì]™½ÃÊߨ»2{Ǖߠ/ìì}^:{Wfï´¨ì]™½Ï+gïÊìö½+³÷ùŒ¢³weöNg•½+³wz‰]Ù»2{ŸcÓÙ»2{§×,•½+³wˆMcïÊìbÓØ»2{Ÿ‹JgïÊìÖŒÊÞ•Ù;—Wö®ÌÞçÔuö®ÌÞçN²³weö>Ǧ³weöN»ÐÊÞ•Ù;Ħ±weö±iì]™½Óá…̱YÙû?yx±²÷y-êì]™½©Ø;í3*{WfïPT{WfïÔjTö®ÌÞ¡“lì]™½ÃbÒØ»2{‡Çº±weö>2ìì^ŽWö®ÌÞiͨì]™½OäÊÞ•Ù;¶…½+³wxø{WfïÔjxÀ;ÖÎÞááoì]™½ãšQØ»2{úؽ+³wèc{Wfï rüðo{WãGjTÐß½Ü+{/_Þˆ½+³÷ò娻2{/_Þˆ½+³÷²³7bïÊì½<°Fì]™½—ƒ#ö®ÌÞËónÄÞ•Ù{Y ŒØ»2{/刽+³÷²˜±weö^ª{WfïåTȽ+³÷R¬ŒØ»2{/+¡{Wfï¥Ö±weö^ú$#ö®ÌÞK©4bïÊì½,ãFì]™½—JkÄÞ•Ù{iîØ»2{·½Xmìݘ½Û^.6önÌÞmzÞönÌÞm`7önÌÞmd6önÌÞmÏüÆÞÙ»í©ÛØ»1{·=6{7fï6¬q;{·}-ÚØ»1{‡t4önÌÞm(ç+{7fï6Ô㕽³wHGcïÆn}NGgï'—÷jìݘ½騨»1{ªÂÀÞçéíìݘ½Ó»±wcö>LïÆÞÙûW…ÎÞÙ;U…ÊÞÙû\:{7fï°Alìݘ½Sl*{7fïsl:{7fïsl:{7fï›ÆÞÙû¼éìݘ½CQiìݘ½CQiìݘ½õx`ït¸TÙ»1{‡%§±wcöNKNeïÆì¶§½³wêT*{7fïØ©önÌÞ©&Õ7ÇÆì:•ÆÞÙûX“önÌÞ§Ó‡•½³w(*½³whp{7fïÐà6önÌÞç¢ÒÙ»1{§S§ÊÞÙû\T:{7fïpªÑØ»1{™½SQ©ìݘ½C:{7fï´ý©ìݘ½Ïéèìݘ½Ó®¹²wcö>§£³wcö>§£³wcöNKNeïÆì}x2öŽKŽÏ»Û…½C#ÚØ»1{‡émìݘ½ÏÓÛÙ»1{§waïÆì^HTönÌÞi›RÙ»1{¼½ÏíjgïÆì:ŠÆÞÙ;t½³÷¹£èìݘ½Ã.§±wcö+KcïÆìÝöW´{7fï®ÆÞÙ;„«±wcö>màwön“}XØ»1{§÷•½³wz]UÙ»1{§ïÊÞÙ;QTönÌÞémdeïÆì}×ÀÞa¯ÚØ»1{‡•¿±wcöŽ+¿A_ØÙû¼4tönÌÞi;QÙ»1{ŸWþÎÞÙ;ì{7fïóEgïÆìÎ(*{7fïô»²wcö>Ǧ³wcöN¯Y*{7fï›ÆÞÙ;Ħ±wcö>•ÎÞÙ;­•½³w:/¯ìݘ½Ï©ëìݘ½ÏdgïÆì}ŽMgïÆìv¡•½³wˆMcïÆìbÓØ»1{§Ã ™c³²÷òðbeïóZÔÙ»1{R7°wÚgTönÌÞ¡¨4önÌÞ©Õ¨ìݘ½C'ÙØ»1{‡Å¤±wcöucïÆì}:dØÙ;½¯ìݘ½ÓšQÙ»1{Ÿ:É•½³wl5 {7fïðð7önÌÞ©Õð€w¬½ÃÃߨ»1{Ç5£°wcö>ô±{7fïÐÇ6önÌÞ äøáßön Çÿ¶w9þïþÛò娻1{/_Þ‰½³÷ò娻1{/;{'önÌÞËëÄÞÙ{9pbïÆì½<ïNìݘ½—ÕÀ‰½³÷R.œØ»1{/‹‰{7fï¥Ú8±wcö^N5œØ»1{/Åʉ½³÷²:±wcö^j{7fï¥OrbïÆì½”J'önÌÞË2îÄÞÙ{©´Nìݘ½—æÞ‰½³wߋկÞÙ»ïåbcïÎìݧç}aïÎìÝ÷vcïÎìÝ÷GfcïÎìÝ÷ÌoìÝ™½ûžº½;³wßc³±wgöî÷³wß×¢½;³wHGcïÎì݇r¾²wgöîC=^Ù»3{‡t4öîìÖçttö~ry¡ÆÞÙû޽;³÷¡* ì}žÞÎÞÙû0½{wfïÃônìÝ™½ÏóÓÙ»3{‡ùiìÝ™½ÓüTöîÌÞ}ê7öµ½±wgö>畽;³÷¹8wöîÌÞý1=¤½;³wŒ%¼±wgöʱwgöʱwgöîC¿³÷©„¯ìÝ™½Ó»±wgö>OogïÎì}žÞÎÞÙ;LocïÎìÝó ]Ù»3{÷ÇøŒ7öîÌÞý1„`aïÎì}ž÷ÎÞÙû®½;³wˆMcïÎìbÓØ»3{ŸcÓÙ»3{ÇØöîÌÞ)6•½;³wˆMcïÎì}ŒÍÂÞÙû›½;³wŒMaïÎìÝÓ~ ³wgö>Ǧ³wgöŽ~aïÎì}è6öîÌÞa1iìÝ™½ÃbÒØ»3{Ÿ–ñ½C¯ÐØ»3{‡N¿±wgö>•ÎÞÙ;´‚½;³wHGcïÎì«BŒUaeïsUèìÝ™½SU¨ìÝ™½ÏU¡³wgöÄÆÞÙ;Ŧ²wgö>Ǧ³wgö>Ǧ³wgö±iìÝ™½ÏÎÞÙ;•ÆÞÙ;•ÆÞÙûPöN‡K•½;³wXr{wfï´äTöîÌÞa{ÚØ»3{§N¥²wgöŽJaïÎìjR}sìÌÞ¡SiìÝ™½5iaïÎì}:}XÙ»3{‡¢ÒØ»3{‡·±wgö ncïÎì}.*½;³w:uªìÝ™½ÏE¥³wgö§½;³÷á‘Ø;•ÊÞÙ;¤£±wgöNÛŸÊÞÙûœŽÎÞÙ;íš+{wfïs::{wfïs::{wfï´äTöîÌÞ‡'c`ï¸äø¼»]Ø;4¢½;³w˜ÞÆÞÙû<½½;³÷qzöîÌÞé…DeïÎì¶)•½;³÷aÁØûÜ®vöîÌÞ¡£hìÝ™½CGÑØ»3{Ÿ;ŠÎÞÙ;ìr{wfï°²4öîÌÞ}E»±wgöájìÝ™½C¸{wfïÓ~gï>Ù‡…½;³wzŸQÙ»3{§×U•½;³w:ð®ìÝ™½ÓEeïÎìÞFVöîÌÞ‡p ìöª½;³wXù{wfï¸òô…½ÏKCgïÎì¶•½;³÷yåïìÝ™½Ã~ ±wgö>ŸQtöîÌÞ錢²wgöN/±+{wfïsl:{wfïôš¥²wgö±iìÝ™½Cl{wfïsQéìÝ™½ÓšQÙ»3{§óòÊÞÙûœºÎÞÙûÜIvöîÌÞçØtöîÌÞiZÙ»3{‡Ø4öîÌÞ!6½;³w:¼96+{ÿ'/Vö>¯E½;³÷!u{§}FeïÎìŠJcïÎìZÊÞÙ;t’½;³wXL{wfïðX7öîÌÞ§C†½ÓËñÊÞÙ;­•½;³÷©“\Ù»3{ÇV£°wgöcïÎìZ xÇÚÙ;<ü½;³w\3 {wfïC»±wgö}lcïÎìÝAŽþmïrüèrPAã¿í½|ù öîÌÞË—bïÎì½|ù öîÌÞËÎ>ˆ½;³÷òÀ±wgö^‚Ø»3{/Ï{{wfïe5bïÎì½”‹ öîÌÞËbÄÞÙ{©6AìÝ™½—S öîÌÞK± bïÎ콬„AìÝ™½—ZÄÞÙ{é“‚Ø»3{/¥2ˆ½;³÷²Œ±wgö^*m{wf凉bïÎì=öbµ±÷`ö{¹ØØ{0{éy_Ø{0{ýÝØ{0{ý‘ÙØ{0{=ó{fï±§ncïÁì=öØlì=˜½Ç°Æíì=öµhcïÁìÒÑØ{0{¡œ¯ì=˜½ÇPWöÌÞ!½»õ9½Ÿ\ÞG¨±÷`ö>¤ccïÁì}¨ {Ÿ§·³÷`ö>LïÆÞƒÙû0½{fïóütöÌÞa~{fï4?•½³÷˜zĽCmoì=˜½OÅyeïÁì}.ν³÷xLigïÁì=c oì=˜½Cqnì=˜½Cqnì=˜½ÇÐÃïì}*á+{fïÃônì=˜½ÏÓÛÙ{0{Ÿ§·³÷`öÓÛØ{0{ǼBWöÌÞã1>ã½³÷x !XØ{0{Ÿç½³÷`ö>„kcïÁìbÓØ{0{‡Ø4öÌÞçØtöÌÞ16…½³wŠMeïÁìbÓØ{0{c³°÷`ö>ÄfcïÁìcSØ{0{Ç´èì=˜½Ï±éì=˜½c§_Ø{0{z…½³wXL{fï°˜4öÌÞ§e|gïÐ+4öÌÞ¡Óoì=˜½ÏE¥³÷`ö­`cïÁìÒÑØ{0{ǪcUXÙû\:{fïT*{fïsUèì=˜½Ã±±÷`öN±©ì=˜½Ï±éì=˜½Ï±éì=˜½Cl{fïó¤³÷`öE¥±÷`öE¥±÷`ö>Ôã½ÓáReïÁì–œÆÞƒÙ;-9•½³wØž6öÌÞ©S©ì=˜½c§RØ{0{§šTß³wèT{fïcMZØ{0{ŸNVöÌÞ¡¨4öÌÞ¡Ámì=˜½CƒÛØ{0{Ÿ‹JgïÁìN*{fïsQéì=˜½Ã©FcïÁì}xdöNE¥²÷`öéhì=˜½Óö§²÷`ö>§£³÷`öN»æÊÞƒÙûœŽÎÞƒÙûœŽÎÞƒÙ;-9•½³÷áÉØ;.9>ïnöhcïÁ즷±÷`ö>OogïÁì}œÞ…½³wz!QÙ{0{§mJeïÁì}Xðö>·«½³wè({fïÐQ4öÌÞ玢³÷`ö»œÆÞƒÙ;¬,½³÷Ø_Ñnì=˜½C¸{fï®ÆÞƒÙû´ßÙ{LöaaïÁìÞgTöÌÞéuUeïÁì¼+{fïtFQÙ{0{§·‘•½³÷!\{‡½jcïÁìVþÆÞƒÙ;®ü}agïóÒÐÙ{0{§íDeïÁì}^ù;{fï°hì=˜½Ïg½³w:£¨ì=˜½ÓKìÊÞƒÙû›ÎÞƒÙ;½f©ì=˜½Cl{fï›ÆÞƒÙû\T:{fï´fTöÌÞé¼¼²÷`ö>§®³÷`ö>w’½³÷96½³wÚ…VöÌÞ!6½³wˆMcïÁì/dŽÍÊÞÿÉË•½ÏkQgïÁì}HÝÀÞiŸQÙ{0{‡¢ÒØ{0{§V£²÷`ödcïÁì“ÆÞƒÙ;<Ö½³÷éagïôr¼²÷`öNkFeïÁì}ê$WöÌÞ±Õ(ì=˜½ÃÃߨ{0{§VÃÞ±vöcïÁì׌ÂÞƒÙûÐÇnì=˜½CÛØ{0{ã‡Û{€?üÛÞä8_®•½—/ŸÄÞƒÙ{ùòIì=˜½—/ŸÄÞƒÙ{ÙÙ'±÷`ö^Ø$öÌÞËÁ@{fïåyObïÁ콬Iì=˜½—r‘ÄÞƒÙ{YL’Ø{0{/Õ&‰½³÷rª‘ÄÞƒÙ{)VIì=˜½—•0‰½³÷Rë’Ø{0{/}R{fï¥T&±÷`ö^–ñ$öÌÞK¥MbïÁì½4÷Iì=˜½ç^¬6öžÌÞs/{Ofï9=ï {Ofï¹?°{Ofï¹?2{Ofï¹g~cïÉì=÷Ômì=™½ç›½'³÷Ö¸½ç¾mì=™½C:{Ofï9”ó•½'³÷êñÊÞ“Ù;¤£±÷d·>§£³÷“Ëû5öžÌÞ‡tlì=™½Ua`ïóôvöžÌÞ‡éÝØ{2{¦wcïÉì}žŸÎÞ“Ù;ÌOcïÉìæ§²÷döžS¸±w¨í½'³÷©8¯ì=™½Ïʳ÷döžé!íì=™½çc,á½'³w(ν'³w(ν'³÷zø½O%|eïÉì}˜Þ½'³÷yz;{OfïóôvöžÌÞaz{Ofïù˜WèÊÞ“Ù{>Æg¼±÷döž! {Ofïó¼wöžÌÞ‡pmì=™½Cl{Ofï›ÆÞ“Ùû›ÎÞ“Ù;Ʀ°÷döN±©ì=™½Cl{OfïclöžÌÞ‡Ølì=™½cl {Ofïù˜ö½'³÷96½'³wìô {OfïC¯°±÷dö‹IcïÉì“ÆÞ“Ùû´Œïìz…ÆÞ“Ù;tú½'³÷¹¨töžÌÞ¡lì=™½C:{OfïXb¬ +{Ÿ«BgïÉìªBeïÉì}® ½'³wØ 6öžÌÞ)6•½'³÷96½'³÷96½'³wˆMcïÉì}Þ€töžÌÞ¡¨4öžÌÞ¡¨4öžÌÞ‡z<°w:\ªì=™½Ã’ÓØ{2{§%§²÷döÛÓÆÞ“Ù;u*•½'³wìT {OfïT“ê›ãdöJcïÉì}¬I {OfïÓéÃÊÞ“Ù;•ÆÞ“Ù;4¸½'³whp{OfïsQéì=™½Ó©SeïÉì}.*½'³w8Õhì=™½ÌÀÞ©¨TöžÌÞ!½'³wÚþTöžÌÞçttöžÌÞi×\Ù{2{ŸÓÑÙ{2{ŸÓÑÙ{2{§%§²÷dö><{Ç%ÇçÝíÂÞ¡mì=™½Ãô6öžÌÞçéíì=™½Ó»°÷döN/$*{Ofï´M©ì=™½ ÞÀÞçvµ³÷döEcïÉì:ŠÆÞ“ÙûÜQtöžÌÞa—ÓØ{2{‡•¥±÷döžû+Ú½'³wWcïÉìÂÕØ{2{Ÿ6ð;{ÏÉ>,ì=™½ÓûŒÊÞ“Ù;½®ªì=™½ÓweïÉìÎ(*{Ofïô6²²÷dö>„k`ï°Wmì=™½ÃÊߨ{2{Ǖߠ/ìì}^:{Ofï´¨ì=™½Ï+gïÉìö½'³÷ùŒ¢³÷döNg•½'³wz‰]Ù{2{ŸcÓÙ{2{§×,•½'³wˆMcïÉìbÓØ{2{Ÿ‹JgïÉìÖŒÊÞ“Ù;—WöžÌÞçÔuöžÌÞçN²³÷dö>Ǧ³÷döN»ÐÊÞ“Ù;Ħ±÷dö±iì=™½Óá…̱YÙû?yx±²÷y-êì=™½©Ø;í3*{OfïPT{OfïÔjTöžÌÞ¡“lì=™½ÃbÒØ{2{‡Çº±÷dö>2ìì^ŽWöžÌÞiͨì=™½OäÊÞ“Ù;¶…½'³wxø{OfïÔjxÀ;ÖÎÞááoì=™½ãšQØ{2{úؽ'³wèc{Ofï rüðo{OãGjTÐÑÝû_¾èö¿ó bÿ;_¥Xõ«ÞIzIïò©ÖU>ú~¾åÇð)/Ÿºù·ùô©¨Ÿº{yOŸÊzLjðœ>õªŸÒY4}êÝþ,y?_çîÜÖ?ËîßyúÔU?õÑk]Ó§¤~JÞöšÆëã]Ö÷HXú8^W{}]ãŸåm†îî}ü^uìØrüTûë=ª½^>ÍãÕÆ^$tú””±¿GØRâǘB9J¡¥PŽR(G)”£ÊQ å(…r”B9J¡¥PŽR(G)”£ÊQ å(…r”B9J¡¥PR¨G)Ô£êQ õ(…z”B=J¡¥PR¨G)Ô£êQ õ(…z”B=J¡¥ÐŽRhG)´£ÚQ í(…v”B;J¡¥ÐŽRhG)´£ÚQ í(…v”B;J¡¥ÐŽRèG)ô£úQ ý(…~”B?J¡¥ÐRèG)ô£úQ ý(…~”B?J¡¥ÐRèG)Œ£ÆQ ã(…q”Â8Ja¥0ŽRG)Œ£ÆQ ã(…q”Â8Ja¥0ŽRG)Œ£æQ ó(…y”ÂñóCã§ÊùÄõÄOÕ½èß»£ÝQŽî¨GwÔ£;êÑíèŽvtG;º£ÝÑîèGwŒ£;ÆÑãèŽytÇ<ºcþ£;þ¶žcš[LŸªgi/¿Ÿ´>|ªž¥ùÛÂÆOÕ³4U•×ø©z–v¹Æ|Çv–¦×ýõ‡oßÏ1?NQ¦‘hç˜wŠÞÏéŽýó.¿vMV=ÇLÍy¼Ú9æÇ«ãŸåýä4æïÕÎ1_÷Ê7~ªýó Ÿjc¯¡ïñSïvj­×ø©zŽùp S(G)”£ÊQ å(…r”B9J¡¥PŽR(G)”£ÊQ å(…r”B9J¡¥PŽR(G)Ô£êQ õ(…z”B=J¡¥PR¨G)Ô£êQ õ(…z”B=J¡¥PR¨G)Ô£ÚQ í(…v”B;J¡¥ÐŽRhG)´£ÚQ í(…v”B;J¡¥ÐŽRhG)´£ÚQ ý(…~”B?J¡¥ÐRèG)ô£úQ ý(…~”B?J¡¥ÐRèG)ô£úQ ý(…q”Â8Ja¥0ŽRG)Œ£ÆQ ã(…q”Â8Ja¥0ŽRG)Œ£ÆQ ã(…q”Âíü­Ÿcþ½;ÊÑåèŽztG=º£ÝÑŽîhGw´£;úÑýèŽ~tÇ8ºcÝ1Žî˜GwÌ£;§þË¿üéÿþéøÿi<±ƒåwDyLP-1.10.4/Data/Netlib/sctap3.mps.gz0000644000175200017520000011603010430174061015473 0ustar coincoin‹ÉK®9sctap3.mps¥ýÝŽ,9Ó¥‰7Ð÷70ƒ ýÐÝC[ ‚&[˜A@Ýÿ…è­¯2-¸Âc™Y _|ÛÒ–ÑŸ¢›/º“ßÏÿýûŠÿýÏ?ÿçóÿ£ÿý¿ýÿãÿ÷?ÿûûúþúúÿ·ÿ×_ÿï??ý?¾¾¾ÿüõ×øÏÿ½~øIá'ƒŸ~šðÓ?ðÓµþ4ðh e€–Zh e€–ZhÐ" E@‹€yiyÂx>a<Ÿ0žOÏ'ŒçÆó ãù„ñ|Âx>a<Ÿ0žOÏ'ŒçÆó ãù„ñ|Âx>a<Ÿ0žOÏ'ŒçÆó ãù|O-Z´hТ EA‹‚- Z´(hQТ EA‹-Z ´h1Ðb Å@‹-Z´8hqÐâ ÅA‹ƒ-Z´LÐ2AËüÑòŸ¹íÏ뿱ŸŸðw ?üäðÓ„Ÿøé„Ÿ®õ§ßÿÆ~~-´ Ð2@Ë-´ Ð2@Ë-Z´hÐ" E@‹€-Z´(hQТ EA‹‚- Z´(hQÐb Å@‹-Z ´h1Ðb Å@‹ƒ-Z´8hqÐâ ÅA‹ƒ-´LÐ2ñÞÿŸß ô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ðô}@_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ð(ô }B_ Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ðô}A_`Ð8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐ8ô}C_àÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á„¾`B_0¡/˜ÐLè &ôú‚ }Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á }Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Á}Áµöã±öëO ?üäðÓ„Ÿøé„Ÿ®õ§ÿü7¶þZh e€–Zh e€–Z´hÐ" E^Zž0žOÏ'ŒçÆó ãù„ñ|Âx>a<Ÿ0žOÏ'ŒçÆó ãù„ñ|Âx>a<Ÿ0žOÏ'ŒçÆó ãù„ñ|Âx>ßÇS@‹€-Z´(hQТ EA‹‚- Z´(hQÐb Å@‹-Z ´h1Ðb Å@‹ƒ-Z´8hqÐâ ÅA‹ƒ-´LÐ2´D_°þ„¿SøÉà'‡Ÿ&ütÀO'üt­?ýþ7}Áúh e€–Zh e€–Z´hÐ" E@‹€-Z´hQТ EA‹‚- Z´(hQТ Å@‹-Z ´h1Ðb Å@‹-Z´8hqÐâ ÅA‹ƒ-Z&h™ å翱?ÿãÿýÿýß¿ÿÞñ?ÿû¯Äþó¯íľ–ÿÿõç_Éïï~·M\ÿÑãýzí’ˆ¿xÞ“üÞËþ»Óëßü/¯$šh¦Qîá4J­QW ¿þÿ;üyÿ÷/>…¿—ÿÊ’ÿ#ås‰/–”á ‘†þWãŸ}è^;Ò±K*5P#JBŠ0 êì÷z(© PT£ÔuÕ8P’ÅK\’¨‘EK„p „S 4€Òä’j Ô•¥!EPuö (­º ¨F©5êªñb@i”¶€Ò¨+Š–á(§@YeÉ%µ½[ž…c@ÕÙïõ"P¶wË£¥Ö¨«Fz˳(^â ”íÝòh‰½[„S <€òä’úÞ å!ÅPuößÍ!P¾7CQRkÔE#Ÿ¡<Š—¸å{3-±7CA8jP3¹¤³jXÔ )“Ug¯f¨Y5,Šj”Z£.‡1 fÔlÍP³jX-Â)PN:¨#¹¤G ”'@!å`@ÕÙ«ê¨ò(ªQjºjtÔ‘u´f¨£Ê h‰N‚p Ô@É%=÷f¨3¤œ ¨:û½^êÜ›¡¨F©5ꪑÎPg/qêÜ›¡h‰½ Â)PWu%—ôÚ›¡®r1 êì¿Ûm3 ®½Šj”Z£®é u%@ñW ®½Š–Ø›¡ œõ_ç¼N* —ôçw)PÉSÞOøóž$€jd/f(®Q˜F¹‡Ð(µF]5²§¼ÿÚò™•”¸ÅK|‘<åñ!œ…á¨pÊGâU±Tx¬ƒ9åìß·n{@QRkÔE#*qÊ“W ÆP´ÄPN §|$^õh8å3*<ÖÁœòFöâ–7NùL€¢¥Ö¨‹Æs_¯ÃPÒ¹å†S> h‰N‚p T8å#ñª‡îë`Ny#û÷ÍóG t(ªQjºj¤@%NyRâ ”îEKìá¨pÊGâU†S. Pá±æ”7²W·¼†S. PT£ÔuÕ( ¨Ä)OJ\j8å’EK„p „S Â)‰W=|¨ðXsÊÙ‹· †ïE5J­QW¨Ä)OJ\ò= h‰=  œNùH¼ê1·Þ6á±æ”7²W·¼¹õ¶×(µF]5²· Fâ”'%®@Í­· x‰­· 0œNùH¼êÁrg‹Ã~ Þ“üÞËþ}³h—ÑÖD£0rÿ Qjºj|o0Ž_ ŽÛ/>…¿—x.—ôØZæ%¶‡1œNùH¼êqÖ@] Pá±¾'yUg¯€:k ®(ªQjºj¼PgÔÙêÜZæ%¶‡1œNùH¼êqíë¸Puö†@]{@QRkÔE#êJ€â%®@]{@Ñ{@A8JÂ)—Ä«–G ÔíùÍoáÏ{’ª‘½Šk¦Qîá4J­QWF€’*)qJ[ky¼ÄÖZ†S Â)—Ä«–±Tx¬ïI^@ÕÙ¿o-5ö€¢¥Ö¨«F ÔH€â%®@= h‰=  œN¹$^µH ”'@…ÇúžäT½Jj <Šj”Z£®% PÒJ¶‡y‰­Åa §@…S.‰W-ºTx¬¢ ¨:û÷ÍóG t(ªQjºj¤@i/qJ÷€¢%ö€‚p T8å’xÕb5P‰m ᱊1 êìPV•Ø\£ÔuÕÈl±(ke[‹Ã¼ÄÖâ0†S Â)—Ä«ß*å%NyRâ Tc÷•ì)–á(§@…S®‰W­ÇPá±êÁ€ª³X9 Ž= ¨F«5ꪑ•8åI‰+PÇP´ÄPN §\¯ZÏ(I€ õ=É ¨:{uË;k $Šj´Z£®™±©‰Sž”¸ÕØ}%16y‰N‚p T8åšxÕzíë{’Puö+§ÔµÕhµF]4r §<)qêÚŠ–Ø ÂPN¹%^µ=jÛàä@Yx¬ö @5²·<®Ñ˜F»‡ÐhµF]4þu ,qÊ“ ¬á”Ÿ(^"„3 0œN¹%^µ5œrO€ Õ˜SÞÈ^ÌPÖpÊ=Šj´Z£®Ù›–8åI‰+P §–‚½“¬±‡w²] ×(µF]4¶] %{x'%®@5\ää~^"„S  œ.²%>®5öð> Â4¶‡w#û½^ª±‡÷‘E5J­QW*ÙÃ;)qªá"'ï ñ!œá (Ù×[ÛzøÎöðnd¿× @ùck»@®Qjºh¤Ûz²‡wRâ”?¶^àç%¶^àÇp T¸Èžø¸^ïá-ɱþ£³=¼Ù‹ý'½ÞÃ[’c+¸F©5ê¢Qرžìáí­Ó.½v‘%yšâ%B8 Â)Pá"{âãz½‡·$›Â{øÎöðnd/z(¯÷ð–dSx®Qjºjd›Â{²‡wRâ Tí"Kò™6/Â)PN Ù×uëpBÿÑÙÞì÷z(Ý:œk”Z£.éᄞìᔸ¥[ûOò[ûOb8*\dO|\·½*üGg{x7²ß6íA lo†¢¥Ö¨«F T²‡wRâ ”íÍP´ÄÞ á¨p‘=q‘½ÞÃ[²¦<¼Lg{x7²‡z½‡·dM9Õ(µF]4 mÊ“=¼“W jGZ²¦œ–á(§@…#í‰#íõÞ’ìáíá‹:Ûû‘½š¡ê=¼%ÙÛk”Z£®ÙÞžìᔸU»Û’¼ËK„p „S ÂÝöÄÝöcëpBÕÙi—ì÷z¨cëpB®Qjºh¤‡zrÚeRâ Ô±µÿ$/±µÿ$†S Â)÷Ä«öÚ)—GTx¬ÎœòFöâøT¯ry$@QRkÔE£<P‰Sž”¸U;å’¬¿ñ!œá¨pÊ=ñª}ï´KÕ™SÞÈ~¯Ú;í’k”Z£.éi—ž8åI‰+P{§]ò[ûOb8j†S>¯z6N»LŽ Ÿá±Næ”7²gÉÍÆi—Éô\£ÔuÕÈŽ Ÿ‰Sž”¸5{x'›Âó!œ…á¨pÊgâUÏÆi—gTx¬“9åì÷z¨Æi—gÕ(µF]5ž ¨Ä)OJ\jìá¼ËK„p „S Â)Ÿ‰W=÷N»œá±Næ”7²ßëE öN»ä¥Ö¨‹Fz8áLœò¤Ä¨½Ó.y‰­í1œžþlîû0Á™Ýÿü®rÊ…õþ¼'y^gÿYèR×(L£ÜÃ?h”Z£®4.'†Û/>…¿—¸žNK¤V7œNK„p%@a¸2 $€’ä’J ÔH€’" ¨:û½^Jj FÕ(µF]5”$@ñW ¤j$@Ñ!œá(  4¹¤Zu%@iHQT½Jk ®(ªQjºj¼Pš¥- ´êJ€¢%B8 Â)P@YrImï–g!ÅPuö{½”íÝò¨F©5ꪑÞò,Š—¸e{· ÂcÌ)od/ny£á”Ï(ªQjºhüð0÷—%[Þh8å3Š–á(§@…S>¯zèPá±æ”7²ß<J÷€¢¥Ö¨«F Tâ”'%®@éP´ÄPN §|$^õh8å’ë`Ny#{uËk8å’E5J­QW€Jœò¤Ä¨†S. P´D§@A8*œò‘xÕÃ÷€ u0§¼‘½xÛ`øPT£ÔuÕHJœò¤Ä(ߊ–Ø Â)Pá”Ä«sëmƒë`Ny#{uË›[opRkÔU#{Û`$NyRâ ÔÜzÛ€—ØzÛÃ)Pá”Ä«Ü)w¶8ì·ðç=INØÈþ}³hápB®Q˜F¹‡Ð(µF]5¾7¿ÛŽãö‹Oáï%.‡Žckq˜—ØZÆp T8å#ñªÇYu%@…ÇúžäT½ꬺ ¨F©5êªñb@ Pg ¨skq˜—ØZÆp T8å#ñªÇµTx¬ãb@ÕÙ¿oŽuíE5J­Q¨+Š—¸uíEKìá ( §\¯Z%P·ç7¿…?ïI^<×Ù  ¸FaåþA£ÔuÕh(yp ’מ[ky¼ÄÖZ†S Â)—Ä«–±Tx¬ïI^@ÕÙ¿o-5ö€¢¥Ö¨«F ÔH€â%®@= h‰=  œN¹$^µH ”'@…ÇúžäT½Jj <Šj”Z£®% PÒJ¶‡y‰­Åa §@…S.‰W-ºTx¬¢ ¨:û÷ÍóG t(ªQjºj¤@i/qJ÷€¢%ö€‚p T8å’xÕb5P‰m ᱊1 êìPV•Ø\£ÔuÕÈl±(ke[‹Ã¼ÄÖâ0†S Â)—Ä«ß*®×{xK²)¼‡ÿèlïFö¢‡òzoI6…ç¥Ö¨«F¶)¼'{x'%®@Õ.²$Ÿió!œá¨p‘=ñq]·'ôðíáÝÈ~¯Ò­Ã ¹F©5ꢑNèÉÞI‰+Pºµÿ$/±µÿ$†S ÂEöÄÇuÛ›¡Ât¶‡w#û÷mÓÊöf(ªQjºj¤@%{x'%®@ÙÞ EKìÍPN ÙÙë=¼%kÊÃËt¶‡w#{q8¡×{xKÖ”SRkÔE£Ð¦<ÙÃ;)qªv¤%kÊi‰N‚p T8Òž8Ò^ïá-ÉÞ¾¨³=¼Ù«ªÞÃ[’=¼¹F©5ꪑíáíÉÞI‰+Pµ»-Éë±¼D§@A8*ÜmOÜm?¶'ôðXvÙÈ~¯:¶'ä¥Ö¨‹Fz8¡'§]&%®@[ûOò[ûOb8*œrO¼j¯ry$@…ÇêÌ)od/ŽOõÚ)—GÕ(µF]4ʃ•8åI‰+PµS.Éú/Â)PN §Ü¯Ú÷N»ôðX9åì÷z¨½Ó.¹F©5ꢑžvé‰Sž”¸µwÚ%/±µÿ$†3 f8å3ñªgã´ËäúëdNy#{q–Ülœv™AÏ5J­QWìú™8åI‰ P³±‡w²) h‰N‚p T8å#ñª‡îë`Ny#û÷ÍóG t(ªQjºj¤@%NyRâ ”îEKìá¨pÊGâU†S. Pá±æ”7²W·¼†S. PT£ÔuÕ( ¨Ä)OJ\j8å’EK„p „S Â)‰W=|¨ðXsÊÙ‹· †ïE5J­QW¨Ä)OJ\ò= h‰=  œNùH¼ê1·Þ6á±æ”7²W·¼¹õ¶×(µF]5²· Fâ”'%®@Í­· x‰­· 0œNùH¼êÁrg‹Ã~ Þ“Äá„ìß7‹'ä…i”{øRkÔUã{ƒñ»]à8n¿øþ^âr8á8¶‡y‰­Åa §@…S>¯zœ5PWTx¬ïI^@ÕÙ+ Î¨+Šj”Z£®/Ô™u¶€:·‡y‰­Åa §@…S>¯z\{@…Ç:.Týûæ¨!P×PT£ÔuÑȺ x‰+P×P´ÄP΀’pÊ%ñªåQu{~ó[øóžäuÀs½Šk¦Qîá4J­QWF€’*)q=àù±µ–ÇKl­åa8*œrI¼j{@…ÇúžäTýûfÑ"Pc(ªQjºj¤@(^â ÔØŠ–Ø Â)Pá”KâU‹Ô@yTx¬ïI^@ÕÙ+ ¤Ê ¨F©5êªÑP’%- dkq˜—ØZÆp T8å’xÕ¢{@…Ç*Ê€ª³ß<J÷€¢¥Ö¨«F ”&@ñW t(Zb(§@…S.‰W-V•Ø«ªÎ^e5P‰mÀ5J­QWÌ6K€²P¶µ8ÌKl-c8*œrI¼jñ= Âcg@ÕÙ¿oov!P¾Õ(µF]4r <Š—¸å{@Ñ{@A8*œrI¼j™µm0 Âc•É€ª³W@ÍÚ6˜ PT£ÔuÕ8P3j¶€š[‹Ã¼ÄÖâ0†S Â)—Ä«–c¨ðX…9åìß·Ï-¨c(ªQjºj¤@%NyRâ Ô±-±„S Â)—Ä«–†S. Pá± sÊÙ+ N¹$@QRkÔU£0 §<)qêÜZæ%¶‡1œN¹$^µ\{@…Ç*Ì)odÿ¾}aˆ@]{@QRkÔU#*qÊ“W ®= h‰=  œ¥á”kâUkí”ÿ58P«2§¼‘½Jk§ü¯Áâ¥Ö¨«ÆA€ÒÄ)OJ\€ÒÇÖÛ¼ÄÖÛN §\¯Z©Eû:œðí¶ '†‡ÇúžäubxýÃhÉáT£1vÿ Ñjºj<P‰Sž”¸žÞØ}åH€¢%B8 Â)Pá”kâU«Ô@YTx¬ïI^@ÕÙ?,ÅPRe PT£ÕuÕÈ–^4qÊ“W ï”'K/¼D§@A8*œrM¼jÕ½*<Ö÷$/ êìVN(Ý›¡¨F«5ꢑÏP‰Sž”¸¥{3-±7CA8*œrM¼jµ¨÷O½¨ðXÕPuöj†²¨wvÿ ÑjºhTâ”'%®@5œòG-Â)PN §\¯Z}¨ðXß“¼€ª³X9 |(ªÑjºj¤@%NyRâ ”ïEKìá¨pÊ5ñªuÖ@¨ðXß“¼€ª³W·¼Y5 ¨F«5ꪑ>å%NyRâ Tc÷•ì)–á(§@…S®‰W­ÇPá±êÁ€ª³X9 Ž= ¨F«5ꪑ•8åI‰+PÇP´ÄPN §\¯ZÏ(I€ õ=É ¨:{uË;k $Šj´Z£®™±©‰Sž”¸ÕØ}%16y‰N‚p T8åšxÕzíë{’Puö+§ÔµÕhµF]4r §<)qêÚŠ–Ø ÂPN¹%^µ=jÛàä@Yx¬ö @5²·<®Ñ˜F»‡ÐhµF]4þu ,qÊ“ ¬á”Ÿ(^"„3 0œN¹%^µ5œrO€ Õ˜SÞÈ^ÌPÖpÊ=Šj´Z£®Ù›–8åI‰+P §–‚½“¬±‡w²] ×(µF]4¶] %{x'%®@5\ää~^"„S  œ.²%>®5öð> Â4¶‡w#û½^ª±‡÷‘E5J­QW*ÙÃ;)qªá"'ï ñ!œá (Ù×[ÛzøÎöðnd¿×‹¯z6N»LŽ Ÿá±Næ”7²gÉÍÆi—Éô\£ÔuÕÈŽ Ÿ‰Sž”¸5{x'›Âó!œ…á¨pÊgâUÏÆi—gTx¬“9åì÷z¨Æi—gÕ(µF]5ž ¨Ä)OJ\jìá¼ËK„p „S Â)Ÿ‰W=÷N»œá±Næ”7²ßëE öN»ä¥Ö¨‹Fz8áLœò¤Ä¨½Ó.y‰­í1œžþlîû0Á™Ýÿü®rÊõþ¼'y^gÿYèr×(L£ÜÃ?h”Z£®4.'†Û/>…¿—¸žNK¤V7œNK„p'@a¸3 $€’ä’J ÔH€’" ¨:û½^Jj FÕ(µF]5”$@ñW ¤j$@Ñ!œá(  4¹¤Zu%@iHQT½Jk ®(ªQjºj¼Pš¥- ´êJ€¢%B8 Â)P@YrImï–g!ÅPuö{½”íÝò¨F©5ꪑÞò,Š—¸e{· ÂcÌ)od/ny£á”Ï(ªQjºhüð0÷—%[Þh8å3Š–á(§@…S>¯zèPá±æ”7²ß<J÷€¢¥Ö¨«F Tâ”'%®@éP´ÄPN §|$^õh8å’ë`Ny#{uËk8å’E5J­QW€Jœò¤Ä¨†S. P´D§@A8*œò‘xÕÃ÷€ u0§¼‘½xÛ`øPT£ÔuÕHJœò¤Ä(ߊ–Ø Â)Pá”Ä«sëmƒë`Ny#{uË›[opRkÔU#{Û`$NyRâ ÔÜzÛ€—ØzÛÃ)Pá”Ä«Ü)w¶8ì·ðç=INØÈþ}³hápB®Q˜F¹‡Ð(µF]5¾7¿ÛŽãö‹Oáï%.‡Žckq˜—ØZÆp T8å#ñªÇYu%@…ÇúžäT½ꬺ ¨F©5êªñb@ Pg ¨skq˜—ØZÆp T8å#ñªÇµTx¬ãb@ÕÙ¿oŽuíE5J­Q¨+Š—¸uíEKìá ( §\¯Z%P·ç7¿…?ïI^<×Ù  ¸FaåþA£ÔuÕh(yp ’מ[ky¼ÄÖZ†S Â)—Ä«–±Tx¬ïI^@ÕÙ¿o-5ö€¢¥Ö¨«F ÔH€â%®@= h‰=  œN¹$^µH ”'@…ÇúžäT½Jj <Šj”Z£®% PÒJ¶‡y‰­Åa §@…S.‰W-ºTx¬¢ ¨:û÷ÍóG t(ªQjºj¤@i/qJ÷€¢%ö€‚p T8å’xÕb5P‰m ᱊1 êìPV•Ø\£ÔuÕÈl±(ke[‹Ã¼ÄÖâ0†S Â)—Ä«ß*®×{xK²)¼‡ÿèlïFö¢‡òzoI6…ç¥Ö¨«F¶)¼'{x'%®@Õ.²$Ÿió!œá¨p‘=ñq]·'ôðíáÝÈ~¯Ò­Ã ¹F©5ꢑNèÉÞI‰+Pºµÿ$/±µÿ$†S ÂEöÄÇuÛ›¡Ât¶‡w#û÷mÓÊöf(ªQjºj¤@%{x'%®@ÙÞ EKìÍPN ÙÙë=¼%kÊÃËt¶‡w#{q8¡×{xKÖ”SRkÔE£Ð¦<ÙÃ;)qªv¤%kÊi‰N‚p T8Òž8Ò^ïá-ÉÞ¾¨³=¼Ù«ªÞÃ[’=¼¹F©5ꪑíáíÉÞI‰+Pµ»-Éë±¼D§@A8*ÜmOÜm?¶'ôðXvÙÈ~¯:¶'ä¥Ö¨‹Fz8¡'§]&%®@[ûOò[ûOb8*œrO¼j¯ry$@…ÇêÌ)od/ŽOõÚ)—GÕ(µF]4ʃ•8åI‰+PµS.Éú/Â)PN §Ü¯Ú÷N»ôðX9åì÷z¨½Ó.¹F©5ꢑžvé‰Sž”¸µwÚ%/±µÿ$†3 f8å3ñªgã´ËäúëdNy#{q–Ülœv™AÏ5J­QWìú™8åI‰ P³±‡w²) P>P@IrI¥j$@IHTý^/%5P#Šj”Z£®J x‰+PR5 h‰N‚p ”Pš\R­º 4¤(ªÎ^¥5PWÕ(µF]5^ (M€ÒPZu%@Ñ!œá(  ,¹¤¶w˳b ¨:û½^ÊönyT£ÔuÕHoy–ÅK\²½[-±w˃p ”Pž\Rß›¡<¤8ªÎþãúQ |o†¢¥Ö¨‹F>Cy/qÊ÷f(Zbo†‚p Ô  frIg Ô°¨R&ªÎ^ÍP³jXÕ(µF]4c@ͨٚ¡f Ô°(Z"„S  œuPGrI(O€:BÊÁ€ª³W3ÔQå PT£ÔuÕè ¨#êhÍPG ”'@Ñ!œá¨3€:“KzîÍPgH9Puö{½Ô¹7CQRkÔU#¡Î(^â Ô¹7CÑ{3„S ®êJ.éµ7C]!åb@ÕÙÖ%(P×Þ E5J­QWt†º x‰+P×Þ EKìÍP΀úù¼óÏýCO8bùQ•<åý„?ïI¨Föb†â…i”{øRkÔU#{ÊûûŸ0 ’ x‰ôì.8à™–á ( §@…S>¯zŒ= ÂcÌ)odÿ¾uƒÔØŠj”Z£.9P‰Sž”¸5ö€¢%ö€‚p T8å#ñªGÃ)Ÿ Pá±æ”7²·¼ÑpÊgÕ(µF]4~x˜ûŠ¿K’Î-o4œò™EK„p „S Â)‰W=t¨ðXsÊÙ¿ož?¥{@QRkÔU#*qÊ“W t(Zb(§@…S>¯z4œrI€ u0§¼‘½ºå5œrI€¢¥Ö¨«Fa@%NyRâ TÃ)—(Z"„S  œNùH¼êá{@…Ç:˜SÞÈ^¼m0|(ªQjºj¤@%NyRâ ”ïEKìá¨pÊGâU¹õ¶Áu0§¼‘½ºåÍ­· ¸F©5ꪑ½m0§<)qjn½mÀKl½m€á¨pÊGâUî”;[ö[øóž$'ldÿ¾Y´p8!×(L£ÜÃ?h”Z£®ßŒßíÇqûŧð÷—à DZµ8ÌKl-c8*œò‘xÕ㬺 Âc}OòªÎ^uÖ@] PT£ÔuÕx1 Î¨³Ô¹µ8ÌKl-c8*œò‘xÕãÚ*<Öq1 êìß7G ºö€¢¥Ö¨‹FÔ•ÅK\ºö€¢%ö€‚p”„S.‰W-¨Ûó›ßŸ÷$¯žëìP\£0rÿ Qjºj4”<8PI‰ëÏ­µ<^bk-Ã)Pá”KâUËØ*<Ö÷$/ êìß7‹{@QRkÔU#j$@ñW ÆP´ÄPN §\¯Z¤Ê Âc}OòªÎ^%5PžE5J­QW΀’(i%[‹Ã¼ÄÖâ0†S Â)—Ä«Ý*¶Þ6à%¶Þ6Àp T8åšxÕJ-Ú×á„o·e81<<Ö÷$¯ÃëìFN §i´{øVkÔUãÁ€Jœò¤ÄõÄðÆî+G-Â)PN §\¯Z¥Ê Âc}OòªÎþa)€’(K€¢­Ö¨«F¶ô¢‰Sž”¸Õx§nᲟÿ"ûç—g¾âï² .Ì÷  â{@8… ÜmKüe›%ï>=@¾è{’‰s̳Ÿ,;@@³Ÿÿ"ûço¿âïRæÖßZâÀp A8Ò–xÂvÔHAx™ïI^$n/Ï~²ìÍ~þ‹ìŸ?–úŠ¿K!8¶<.¾åÑ`8… \dK|\kìálhá?Ûû‘ýûö±ìd=¼“í¹F©5ê¢q°í-ÙÃ;)qªá"'/ðó!œá¨p‘-ñq­±‡÷‘þ£±=¼Ùïõ"P=¼(ªQjºj<PÉÞI‰+P 9yWˆ—á(g@y¸Èžø¸þØÚ.ÐÃt¶‡w#û½^<àù±µ] ×(µF]4Òí=ÙÃ;)q=àù±õ?/±õ?†S ÂEöÄÇõzoIŽ­ððíáÝÈ^ì?éõÞ’[Á5J­QÂŽ­ðdoov鵋,ÉÓ/Â)PN Ù×ë=¼%ÙÞÃt¶‡w#{ÑCy½‡·$›ÂsRkÔU#ÛÞ“=¼“W jY’Ï´y‰N‚p T¸Èžø¸®[‡zøÎöðnd¿×‹@éÖá„\£ÔuÑH'ôdï¤Ä(ÝÚ’—ØÚÃ)Pá"{âãºíÍPá?:Ûû‘ýû¶ie{3Õ(µF]5R ’=¼“W lo†¢%öf(§@…‹ì‰‹ìõÞ’5åáe:Ûû‘½8œÐë=¼%kÊ©F©5ê¢QhSžìᔸU;Ò’5å´D§@A8*iOi¯÷ð–do_ÔÙÞìÕ Uïá-ÉÞ\£ÔuÕÈöðödï¤Ä¨ÚÝ–äõX^"„S  œî¶'î¶[‡zx¬ÎN»ld¿×‹@[‡rRkÔE#=œÐ“Ó.“W Ž­ý'y‰­ý'1œN¹'^µ×N¹< Âcuæ”7²ǧzí”Ë#Šj”Z£.åÁ€Jœò¤Ä¨Ú)—dý—á(§@…Sî‰Wí{§]zx¬ÎœòFö{½ÔÞi—\£ÔuÑHO»ôÄ)OJ\Ú;í’—ØÚÃP3œò™xÕ³qÚerý u2§¼‘½8Kn6N»LŽ ç¥Ö¨«FvýLœò¤Ä¨ÙØÃ;Ùž—á ( §@…S>¯z6N»< ÂcÌ)od¿×‹@5N»< ¨F©5êªñd@%NyRâ TcïäõX^"„S  œNùL¼ê¹wÚå u2§¼‘ý^/µwÚ%×(µF]4Òà gâ”'%®@ívÉKlmˆáôÄð`ûs߇ Îìþçw•S> P?áÏ{’׉áuöŸ…®ƒÅ5 Ó(÷ð¥Ö¨«Fˉáãö‹Oáï%®'†Ó©Õ '†Ó!ü @aøÁ€’J’K*5P#JBŠ0 êì÷z(© PT£ÔuÕ8P’ÅK\’¨‘EK„p „S 4€Òä’j Ô•¥!EPuö (­º ¨F©5êªñb@i”¶€Ò¨+Š–á(§@YeÉ%µ½[ž…c@ÕÙïõ"P¶wË£¥Ö¨«Fz˳(^â ”íÝòh‰½[„S <€òä’úÞ å!ÅPuö×å{3Õ(µF]4òÊ x‰+P¾7CÑ{3„S f5“K:K †%@Í2Puöj†š%Pà¨F©5ê¢qj&@ÍÖ 5K †%@Ñ!œá¨#€:’KzÔ@yÔRT½š¡Ž(O€¢¥Ö¨«Fg@ PGk†:j <Š–á(§@Ô™\Òso†:CÊÉ€ª³ßëE Î½Šj”Z£®é u&@ñW Î½Š–Ø›¡ œuPWrI¯½ê )ªÎþ³.Aºöf(ªQjºj¤3Ô•ÅK\ºöf(Zbo†‚pÔÏçîzÂ˨ä)ï'üyO@5²3×(L£ÜÃ?h”Z£®ÙSÞßÿ„•”¸ÅK¤gwÁÏ´Dg@a8*œò‘xÕcìë`Ny#û÷­D ÆPT£ÔuÑÈJœò¤Ä¨±-±„S Â)‰W=NùL€ u0§¼‘½¸å†S> ¨F©5ê¢ñÃÃÜWü] ”tny£á”Ï(Z"„S  œNùH¼ê¡{@…Ç:˜SÞÈþ}óü(ÝŠj”Z£®)P‰Sž”¸¥{@Ñ{@A8*œò‘xÕ£á”KTx¬ƒ9åìÕ-¯á”KÕ(µF]5 *qÊ“W N¹$@Ñ!œá¨pÊGâUß*<ÖÁœòFöâmƒá{@QRkÔU#*qÊ“W |(Zb(§@…S>¯zÌ­· Fx¬ƒ9åìÕ-on½mÀ5J­QWìmƒ‘8åI‰+Psëm^bëm §@…S>¯zp§ÜÙâ°ßŸ÷$q8a#û÷Í¢…à ¹FaåþA£ÔuÕøÞ`ün8ŽÛ/>…¿—¸N8Ž­Åa^bkqÃ)Pá”Ä«g Ô•ë{’Puö ¨³êJ€¢¥Ö¨«Æ‹u&@- Î­Åa^bkqÃ)Pá”Ä«×Pᱎ‹Ugÿ¾9jÔµÕ(µF]4r ®(^â Ôµ-±„3 $œrI¼jy”@Ýžßüþ¼'yð\g/€â…i”{øRkÔU£ äÁJJ\x~l­åñ[kyN §\¯ZÆPá±¾'yUgÿ¾Y´ÔØŠj”Z£®)P#Š—¸5ö€¢%ö€‚p T8å’xÕ"5Pžë{’Puö (©ò(ªQjºjt”$@I (ÙZæ%¶‡1œN¹$^µèP᱊2 êìß7ÏÒ= ¨F©5ꪑ¥ P¼Ä(ÝŠ–Ø Â)Pá”KâU‹Õ@%¶„Ç*Æ€ª³W@Y TbpRkÔU#³ Ä ¬”m-ó[‹ÃN §\¯Z|¨ðXÅPuöïÛ›]”ïE5J­Q(O€â%®@ùP´ÄPN §\¯Zfm̨ðXe2 êìP³¶ fÕ(µF]5NÔL€š- æÖâ0/±µ8Œá¨pÊ%ñªåØ*®×{xKrl…‡ÿèlïFöbÿI¯÷ð–äØ ®Qjºhvl…'{x{ë´K¯]dIž¦x‰N‚p T¸Èžø¸^ïá-ɦðþ£³=¼Ù‹Êë=¼%Ùžk”Z£®Ù¦ðžìᔸU»È’|¦ÍK„p „S ÂEöÄÇuÝ:œÐÃt¶‡w#û½^J·'ä¥Ö¨‹Fz8¡'{x'%®@éÖþ“¼ÄÖþ“N Ù×mo† ÿÑÙÞìß·M{(Û›¡¨F©5ꪑ•ìᔸe{3-±7CA8*\dO\d¯÷ð–¬)/ÓÙÞìÅá„^ïá-YSN5J­QB›òdï¤Ä¨Ú‘–¬)§%B8 Â)PáH{âH{½‡·${x{ø¢Îöðnd¯f¨zoIöðæ¥Ö¨«F¶‡·'{x'%®@Õî¶$¯Çò!œá¨p·=q·ýØ:œÐÃcuvÚe#û½^êØ:œk”Z£.éᄞœv™”¸ulí?ÉKlí?‰á¨pÊ=ñª½vÊå‘«3§¼‘½8>Õk§\ PT£ÔuÑ(Tâ”'%®@ÕN¹$ëo¼D§@A8*œrO¼jß;íÒÃcuæ”7²ßëE öN»ä¥Ö¨‹FzÚ¥'NyRâ ÔÞi—¼ÄÖþ“΀šá”ÏÄ«žÓ.“#ègx¬“9åìÅYr³qÚer=×(µF]5²#ègâ”'%.@ÍÆÞɦð¼Dg@a8*œò™xÕ³qÚå™ëdNy#û½^ªqÚå™E5J­QW'*qÊ“W {x'¯Çò!œá¨pÊgâUϽÓ.gx¬“9åì÷z¨½Ó.¹F©5ꢑN8§<)qjï´K^bk»@ §'†ÿÛŸû>Lpf÷?¿«œòƒõþ¼'y^gÿYè: P\£0rÿ QjºjTиœ>n¿øþ^âzb8-‘ZÝpb8-ÂO†Ÿ (  $¹¤R5 $¤ªÎ~¯’¨‘E5J­QWƒ% P¼Ä(© P´D§@A8J(M.©Ö@] PR”Ug¯€Ò¨+Šj”Z£®/”&@i (­º h‰N‚p ”P–\RÛ»åYH1Tý^/e{·<ªQjºj¤··@ Ž= ¨F©5ꪑ•8åI‰+PÇP´ÄPN §\¯ZN¹$@…Ç*Ì)od¯€j8å’E5J­QW€Jœò¤Ä¨skq˜—ØZÆp T8å’xÕrí«0§¼‘ýûö…!uíE5J­QW¨Ä)OJ\ºö€¢%ö€‚p”†S®‰W­µSþ×à@ix¬ÊœòFö(­ò¿Šk”Z£®J§<)qJ[oð[o`8*œrM¼j¥íëp·Û2œë{’׉áuö£ '†SÆ4Ú=üƒF«5êªñ`@%NyRâzbxc÷•#Š–á(§@…S®‰W­Re Pá±¾'yUgÿ°@I ”%@QVkÔU#[zÑÄ)OJ\j¼Sž,½ð!œá¨pÊ5ñªU÷f¨ðXß“¼€ª³X9 to†¢­Ö¨‹F>C%NyRâ ”îÍP´ÄÞ á¨pÊ5ñªÕJ Þ?õ ÂcUc@ÕÙ«ÊJ Þ5Ú=üƒF«5ê¢q<P‰Sž”¸ÕpÊ P´D§@A8*œrM¼jõ= Âc}OòªÎþaå€ò= ¨F«5ꪑ•8åI‰+P¾-±„S Â)×Ä«ÖY5 Âc}OòªÎ^Ýòf ÔH€¢­Ö¨«Fú”—8åI‰+PÝW²§®5öðN¶ ´ðíáÝÈþ}ûX öN²ÆÞÉv\£ÔuÑ8Øv–ìᔸÕp‘“øy‰N‚p T¸È–ø¸ÖØÃûH€ ÿÑØÞì÷z¨ÆÞGÕ(µF]5 ¨dï¤Ä¨†‹œ¼+ÄK„p „3 <\dO|\lmèá?:Ûû‘ý^/ðüØÚ.k”Z£.évžìᔸðüØzŸ—ØzÃ)Pá"{âãz½‡·$ÇVxøÎöðnd/öŸôzoIŽ­à¥Ö¨‹FaÇVx²‡··N»ôÚE–äiŠ—á(§@…‹ì‰ëõÞ’l ïá?:Ûû‘½è¡¼ÞÃ[’Má¹F©5ꪑm ïÉÞI‰+Pµ‹,ÉgÚ¼D§@A8*\dO|\×­Ã =üGg{x7²ßëE tëpB®Qjºh¤‡z²‡wRâ ”ní?ÉKlí?‰á¨p‘=ñqÝöf¨ðíáÝÈþ}Û´²½Šj”Z£®)PÉÞI‰+P¶7CÑ{3„S ÂEöÄEözoÉšòð2íáÝÈ^NèõÞ’5åT£ÔuÑ(´)OöðNJ\ªiÉšrZ"„S  œŽ´'Ž´×{xK²‡·‡/êlïFöj†ª÷ð–do®Qjºjd{x{²‡wRâ TínKòz,/Â)PN wÛwÛ­Ã = ¨F©5ê¢ñÃÃÜWü] ”tny£á”Ï(Z"„S  œNùH¼ê¡{@…Ç:˜SÞÈþ}óü(ÝŠj”Z£®)P‰Sž”¸¥{@Ñ{@A8*œò‘xÕ£á”KTx¬ƒ9åìÕ-¯á”KÕ(µF]5 *qÊ“W N¹$@Ñ!œá¨pÊGâUß*<ÖÁœòFöâmƒá{@QRkÔU#*qÊ“W |(Zb(§@…S>¯zÌ­· Fx¬ƒ9åìÕ-on½mÀ5J­QWìmƒ‘8åI‰+Psëm^bëm §@…S>¯zp§ÜÙâ°ßŸ÷$q8a#û÷Í¢…à ¹FaåþA£ÔuÕøÞ`ün8ŽÛ/>…¿—¸N8Ž­Åa^bkqÃ)Pá”Ä«g Ô•ë{’Puö ¨³êJ€¢¥Ö¨«Æ‹u&@- Î­Åa^bkqÃ)Pá”Ä«×Pᱎ‹Ugÿ¾9jÔµÕ(µF]4r ®(^â Ôµ-±„3 $œrI¼jy”@Ýžßüþ¼'yð\g/€â…i”{øRkÔU£ äÁJJ\x~l­åñ[kyN §\¯ZÆPá±¾'yUgÿ¾Y´ÔØŠj”Z£®)P#Š—¸5ö€¢%ö€‚p T8å’xÕ"5Pžë{’Puö (©ò(ªQjºjt”$@I (ÙZæ%¶‡1œN¹$^µèP᱊2 êìß7ÏÒ= ¨F©5ꪑ¥ P¼Ä(ÝŠ–Ø Â)Pá”KâU‹Õ@%¶„Ç*Æ€ª³W@Y TbpRkÔU#³ Ä ¬”m-ó[‹ÃN §\¯Z|¨ðXÅPuöïÛ›]”ïE5J­Q(O€â%®@ùP´ÄPN §\¯Zfm̨ðXe2 êìP³¶ fÕ(µF]5NÔL€š- æÖâ0/±µ8Œá¨pÊ%ñªåØ*®×{xKrl…‡ÿèlïFöbÿI¯÷ð–äØ ®Qjºhvl…'{x{ë´K¯]dIž¦x‰N‚p T¸Èžø¸^ïá-ɦðþ£³=¼Ù‹Êë=¼%Ùžk”Z£®Ù¦ðžìᔸU»È’|¦ÍK„p „S ÂEöÄÇuÝ:œÐÃt¶‡w#û½^J·'ä¥Ö¨‹Fz8¡'{x'%®@éÖþ“¼ÄÖþ“N Ù×mo† ÿÑÙÞìß·M{(Û›¡¨F©5ꪑ•ìᔸe{3-±7CA8*\dO\d¯÷ð–¬)/ÓÙÞìÅá„^ïá-YSN5J­QB›òdï¤Ä¨Ú‘–¬)§%B8 Â)PáH{âH{½‡·${x{ø¢Îöðnd¯f¨zoIöðæ¥Ö¨«F¶‡·'{x'%®@Õî¶$¯Çò!œá¨p·=q·ýØ:œÐÃcuvÚe#û½^êØ:œk”Z£.éᄞœv™”¸ulí?ÉKlí?‰á¨pÊ=ñª½vÊå‘«3§¼‘½8>Õk§\ PT£ÔuÑ(Tâ”'%®@ÕN¹$ëo¼D§@A8*œrO¼jß;íÒÃcuæ”7²ßëE öN»ä¥Ö¨‹FzÚ¥'NyRâ ÔÞi—¼ÄÖþ“΀šá”ÏÄ«žÓ.“#ègx¬“9åìÅYr³qÚer=×(µF]5²#ègâ”'%.@ÍÆÞɦð¼Dg@a8*œò™xÕ³qÚå™ëdNy#û½^ªqÚå™E5J­QW'*qÊ“W {x'¯Çò!œá¨pÊgâUϽÓ.gx¬“9åì÷z¨½Ó.¹F©5ꢑN8§<)qjï´K^bk»@ §'†ÿÛŸû>Lpf÷?¿«œò‹õþ¼'y^gÿg¡k<P\£0rÿ QjºjTиœ>n¿øþ^âzb8-‘ZÝpb8-q G,œü«ñ»¼üç¾Ð —Tj F”„a@ÕÙïõ"PR5 ¨F©5êªq0 $Š—¸%5P#Š–¸†s Öp”Pš\R­º 4¤(ªÎ^¥5PWÕ(µF]5^ (M€ÒPZu%@Ñ×pÔβʒKj{·< )Æ€ª³ßëE lï–G5J­QWô–g P¼Ä(Û»åÑ{·¼5œå”'—Ô÷f()΀ª³ÿãúq |o†¢¥Ö¨‹F>Cy/qÊ÷f(Zbo†ZÃ9P3€šÉ%%PàfH™ ¨:{5Cͨa PT£ÔuÑ8Œ5 fk†š%Pàh‰k8j ç@Ô‘\ңʠŽr0 êìÕ uÔ@yÕ(µF]5:êH€:Z3ÔQå P´Ä5œµ†s ÎêL.é¹7C!åd@ÕÙïõ"PçÞ E5J­QWt†: x‰+PçÞ EKìÍPk8ê  ®ä’^{3ÔR.TýŸu Ôµ7CQRkÔU#¡®(^â Ôµ7CÑ{3ÔNúù¼óÏýCO8bùQ•<åý„?ïI¨Föb†â…i”{øRkÔU#{ÊûÏ?¡@%%.@ñéÙ]pÀ3-q §@A8*œò‘xÕcìë`Ny#û÷­D ÆPT£ÔuÑÈJœò¤Ä¨±-±ÔÎ §|$^õh8å3*<ÖÁœòFöâ–7NùL€¢¥Ö¨‹Æs_¿—%[Þh8å3Š–¸†s ÖpT8å#ñª‡îë`Ny#û÷ÍóG t(ªQjºj¤@%NyRâ ”îEK쵆s Â)‰W=N¹$@…Ç:˜SÞÈ^ÝòN¹$@QRkÔU£0 §<)qªá”K-q ç@­á¨pÊGâUß*<ÖÁœòFöâmƒá{@QRkÔU#*qÊ“W |(Zb¨5œNùH¼ê1·Þ6á±æ”7²W·¼¹õ¶×(µF]5²· Fâ”'%®@Í­· x‰­· œNùH¼êÁrg‹Ã~ Þ“Äá„ìß7‹'ä…i”{øRkÔUã{ƒñ»]à8n¿øþ^âr8á8¶‡y‰­Åaç@…S>¯zœ5PWTx¬ïI^@ÕÙ+ Î¨+Šj”Z£®/Ô™u¶€:·‡y‰­Åaç@…S>¯z\{@…Ç:.Týûæ¨!P×PT£ÔuÑȺ x‰+P×P´ÄPk8JÂ)—Ä«–G ÔíùÍoáÏ{’×Ïuö(®Q˜F¹‡Ð(µF]5J¨¤Äõ€çÇÖZ/±µ–á¨pÊ%ñªeìë{’Puöï›E‹@= ¨F©5ꪑ5 x‰+Pc(Zb¨5œN¹$^µH ”'@…ÇúžäT½Jj <Šj”Z£®% PÒJ¶‡y‰­Åaç@…S.‰W-ºTx¬¢ ¨:û÷ÍóG t(ªQjºj¤@i/qJ÷€¢%ö€ZÃ9Pá”KâU‹Õ@%¶„Ç*Æ€ª³W@Y TbpRkÔU#³ Ä ¬”m-ó[‹ÃÎ §\¯Z|¨ðXÅPuöïÛ›]”ïE5J­Q(O€â%®@ùP´ÄPk8*œrI¼j™µm0 Âc•É€ª³W@ÍÚ6˜ PT£ÔuÕ8P3j¶€š[‹Ã¼ÄÖâ0„s Â)—Ä«–c¨ðX…9åìß·Ï-¨c(ªQjºj¤@%NyRâ Ô±-±ÔÎ §\¯ZN¹$@…Ç*Ì)od¯€j8å’E5J­QW€Jœò¤Ä¨skq˜—ØZ†pT8å’xÕrí«0§¼‘ýûö…!uíE5J­QW¨Ä)OJ\ºö€¢%ö€ZÃ)PN¹&^µÖNù_ƒ¥á±*sÊÙ  ´vÊÿ(®Qjºj(Mœò¤Ä(}l½mÀKl½má¨pÊ5ñª•Z´¯Ã ßnËpbxx¬ïI^'†×Ù?Œ6œN5Óh÷ð­Ö¨«Æƒ•8åI‰ë‰áÝWŽ(ZâÎZÃ9Pá”kâU«Ô@YTx¬ïI^@ÕÙ?,ÅPRe PT£ÕuÕÈ–^4qÊ“W ï”'K/¼Ä5œµ†s Â)×Ä«VÝ›¡Âc}OòªÎþaå€Ò½Šj´Z£.ù •8åI‰+Pº7CÑ{3ÔÎ §\¯Z­êýS/*–‚½“¬±‡w²] ×(µF]4¶] %{x'%®@5\ää~^âÎZÃ9Pá"[âãZcï#*üGc{x7²ßëE {x PT£ÔuÕx0 ’=¼“W .rò®/q ç@­á(Ù×[ÛzøÎöðnd¿×‹®×{xK²)¼‡ÿèlïFö¢‡òzoI6…ç¥Ö¨«F¶)¼'{x'%®@Õ.²$Ÿió×pÔÎ Ù×uëpBÿÑÙÞì÷z(Ý:œk”Z£.éᄞìᔸ¥[ûOò[ûOB8*\dO|\·½*üGg{x7²ß6íA lo†¢¥Ö¨«F T²‡wRâ ”íÍP´ÄÞ µ†s ÂEöÄEözoÉšòð2íáÝÈ^NèõÞ’5åT£ÔuÑ(´)OöðNJ\ªiÉšrZâÎZÃ9PáH{âH{½‡·${x{ø¢Îöðnd¯f¨zoIöðæ¥Ö¨«F¶‡·'{x'%®@Õî¶$¯Çò×pÔÎ wÛwÛ­Ã =êËtJ?áÏ{’×ÉÍ~xvaÙáLfš]êì–d§Ç‚|fIÆïÎ5îÛÁe{—!ž${ŠÉSô{—f—:»%Ù{—f‡ËOÑ#yЧè™\†x’ì)z$OÑ£ñ=“Ë@³KÝ’ìÔSúþÌ’Œß ù'»¤òû»ÿË—!ž${ŠÉSôнË@³KÝ’ì½Ë@³Ãeˆ§è‘I®gMBøÛi¸¿RÆí_}Ù5Én,ûÛ9·$»ÕÙ-ÉNOhüþÌ’Œßã@ÿÜ};ŵ¼ –\†x’|O²ž!Ë/ƒÔ—Á’Ë@³[Ý’ìt£ÞáÏ,Éø=DóÏý8Í·³O·þkˆ'É÷$ëÉ«ü2èÞ 4»ÕÙ-ÉÞû¯fÿÂóJ/Cò­V^†÷·pÞÎ+ý•bì2$OÑ<»±ìo'‘’ìVg·$;ݱøCø3K2~lüs?ºñíœÍ­ËO’ïIÖS>ùeð½Ë@³[Ý’ì½Ë@³áÙ˜¿—!yŠÖY_†‘\†x’|O²žÉ/ì/ÃH.ÍnuvK²Ó?„?³$ã÷pÀ?÷cßÎtܺ ñ$©» ÉS4ÏÞ» 4»ÕÙ-ÉÞ» 4ûžÃø{’§h=ëË Éeˆ'É÷$ë9Œü2œõeä2ÐìVg·$;ÝÈüCø3K2~¢ûs?’îíüÀ­ËO’ïIÖÓ ùe¸ö.ÍnuvK²÷.Íþ…gþý\Kž¢íQ7¬'¿ O’ö —Á’§hžÝXö·ÓüHv«³[’žCõ!ü™%¿‡žý¹övV]y<¹ ñ$iì)Ú’§hkº²x’4ö]´%OÑÖø.:ùèŠg—:»%ÙééMŸY’ñ{ÏŸû‘ØÐÖÐ 6t£5tƒ Ýh Ý`C7ZC7ØÐIkè„ ´†NØÐIkè„ ´†NØÐIkè„ ¶†NÙÐikè” ¶†NÙÐikè” ¶†NÙÐYkèŒ µ†ÎØÐYkèŒ µ†ÎØÐYkèŒ ·†ÎÙÐykèœ ·†ÎÙÐykèœ ·†ÎÙÐÍÖÐM6tSZ­ÑßÕ}º¿ÿ×áre{ð_‡À} ·VøÄµž³…á´1[ÿ•­™–™¼×¾zVZØí_½š­ÛaáÚ §Ù½>YøÑ ?YøÕ ÿ»ú>ZC7ØÐÖÐ 6t£5tƒ Ýh Ý`C7ZC'lè¤5t†NZCG™—ÖÐ :i °¡“ÖÐ):m ²¡ÓÖÐ):m ²¡ÓÖÐ):m ±¡³ÖÐ:k ±¡³ÖÐ:k ±¡³ÖÐ9:o ³¡óÖÐ9:o ³¡óÖÐ9:o ÝdC7[C7?ÝOÓcå‚Úëú1Ün¿ ½}rþ¾EZ«·1ò"üâCoóçC‰«ñb-ãŘñÒw>[á ?[á ÿ»í¨ÃºÑºÁ†n´†n°¡­¡lèFkè:i °¡“ÖÐ :i °¡“ÖÐ :i °¡ÓÖÐ):m ²¡ÓÖÐ):m ²¡ÓÖÐ):k ±¡³ÖÐ:k ±¡³ÖÐ:k ±¡óÖÐ9:o ³¡óÖÐ9:o ³¡óÖÐ9ºÙºÉ†nJ·=ðµ XÛ¯•ÿÕ×rFBþÓ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼Õ8k¼ÕL¶22k÷Àñ_½Î¸oátmb²µ‰F¸±po…O~´ÂO~uÂÿî&[›h„³¡­¡lèFkèºÑºÁ†n´†NØÐIkè„ ´†NØÐIkè„ ´†NØÐIkè” ¶†NÙÐikè” ¶†NÙÐikè” ¶†ÎØÐYkèŒ µ†ÎØÐYkèŒ µ†ÎØÐYkèœ ·†ÎÙÐykèœ ·†ÎÙÐykèœ ·†n²¡›­¡›‡îçÆà²ùÔè`ÿö äñÿ`ÿGëñÿ`ÿpgá³~°ð³~‘ð¿oüuø`C7ZC7ØÐÖÐ 6t£5tƒ Ýh Ý`C'­¡6tÒ:aC'­¡6tÒ:aC'­¡6tÚ:eC§­¡S6tÚ:eC§­¡S6tÚ:eCg­¡36tÖ:cCg­¡36tÖ:cCg­¡36tÞ:gCç­¡s6tÞ:gCç­¡s6tÞ:gC7[C7ÙÐÍzè~º€óöüþs?óöàçþ~²ûûÙº¿Ÿìþ~¶îï'»¿Ÿ­ûûÉîïgëþ~²ûûÙº¿Ÿìþ~¶îï'»¿Ÿ­ûûÉîïgëþ~²ûûÙº¿Ÿìþ~¶îï'»¿Ÿ­ûûÉîïgëþ~²ûûÙº¿Ÿìþ~¶îï'»¿Ÿ­ûûÉîïgëþ~²ûûÙº¿Ÿìþ~¶îï'»¿Ÿ­ûûÉîïgëþ~²ûûÙº¿Ÿìþ~¶îï'»¿Ÿ­ûûÉîïgëþ~²ûûÙº¿Ÿìþ~¶îï'»¿Ÿ­ûûÉîïgëþ~²ûûÙº¿Ÿìþ~¶îï'»¿Ÿ­ûûŞ߯ÜÞÿ¹¿_ìþ~µî_­ûûÅîïWëþ~±ûûÕº¿_ìþ~µî_­ûûÅîïWëþ~±ûûÕº¿_ìþ~µî_­ûûÅîïWëþ~±ûûÕº¿_ìþ~µî_­ûûÅîïWëþ~±ûûÕº¿_ìþ~µî_­ûûÅîïWëþ~±ûûÕº¿_ìþ~µî_­ûûÅîïWëþ~±ûûÕº¿_ìþ~µî_­ûûÅîïWëþ~±ûûÕº¿_ìþ~µî_­ûûÅîï›Ô}ï·¸AÞ³ìýM­î,|¶Â~¶Â/Nχy¿A“ðÖÐ 6t£5tƒ Ýh Ý`C7ZC7ØÐIkè„ ´†NØÐIkè„ ´†NØÐIkè„ ¶†NÙÐikè” ¶†NÙÐikè” ¶†NÙÐYkèŒ µ†ÎØÐYkèŒ µ†ÎØÐYkèŒ ·†ÎÙÐykèœ ·†ÎÙÐykèœ ·†ÎÙÐÍÖÐM6t÷ûüß¾ÿïÏÿóùßÿÛÿâFåWDyLP-1.10.4/Data/Netlib/degen3.mps.gz0000644000175200017520000023174110430174061015452 0ustar coincoin‹K®9degen3.mps¤ýݎ캭 ÞPï/ ë_ºœv4Ш:g¡ ®÷’ŽŒ{(BC¦É}µ¼3¾)Y–eŠ$ÿç¿ÿóÜöÿý¿þÇÿûüÏð¿ÿoÿ×ÿúÿýßÿûÿvûŸ·ÛÿZÿ?¿÷«ûÅÿq»mÿ—[–ðß+ü÷vÿïû?õo˲ä eÁ‹t\8WŽ ß]xø|xÑà"F¼@&y¼@&/xÿ@®pQ°; ~ø§ƒsx7<þ̼À-àÏðNCÄ¿Äî/ØN„޼íà~BÆ À„‚)ÈT¼¹ ÃÚ‚и¼€-âPEªè2^ÀýDLè.°€ÿZÀ ‡*&dpt"Έ“"⤈8•cÁîà¸Å†i/ðæ0 gUÂALKÆ øŽhÂALî'áP¥Ø]D¼€¡JiÁ l§XJøàˆ&Ñ„ëAÂMÿ|çŽ[jð¯åÅá…Ç ø×2ŽNvÝ_ Œoc ^tA&À-äˆLÄ¿à;—s ¼ƒŒ)üYÅ­"ƒó­à€œ;߹⺿@£ÅãÏ<þ'RÁw®à;W"v§XÁ)VpŠ|5 .Ñ¥tøOã·¤Ô‚0nת‚³ªà²^ÜBÅ)V]wñ¢â4Zq᪸úWü´UÞŠŸ‚Šc]qŠUÞ»Ÿ%¼ÀvpZÖˆÅw»âë\SÁ üðùTœ×5#S°8¯+ÎëZñ¶q^W|$ IÃIÞð­oK‹î€¾5‡ÿ>Ó†oI÷¤á²ÑðóÞð7\P¾L Ÿ\ÇÕð]hø.4ø†_¦†‹j÷¤á[Ò vW؆ J«Ø¾? _™Öçs7¼pxð"âE‹î_+xQñ¢Á…Ãvà™Þ/°‡í8lÇa;ÿ5ÿšÇ[ðø¯yì›Ç¾€ÿ@ÀFþ™ˆÝ‰ØˆÿZÄû‰øOGìNÂ:á¿–ð_K8n ï4a; ÛõÀ9|ô½ÃGïðÑ;|ôŸ¶Ã§}¿Â l½Ãìð™:|¦Ÿ©Ãgê|÷`wð»€ÿtÀ:à¿ð_ÃGïþkøL]ġи¯áÓvø´]ÄŽâvø€>S‡ÏÔeüYÆdd22Ç `w v§â“«ØNí~†Òðg »Ó°;`:sÇã[ïþçÇyàañ¾_à?€“Âû‚Ý?ÝÁ%Àã¤ð8<¾ÛçÇGïáSíp{¿À à-àSðû†ÄWü§ñùøŠÿZÅîT|rßú€/-n—ïo þ>àXœ×W±€³7dü§q@Î^ÜúÞ_Fü×pöF|ôWå„ë[Æw»âÆû´†›k8Gþ í‡vˆC;ä~·€vˆC;Ä¡âй_࿆S¹áTn8•Nå†+_Õ¯áw®áŒo8T §Ã/`Ã5±á‹Óýÿ5\Ñ”º_`GqMD#ë~C… $š_®á;×p¾5\:ÑJ»_࿆Kg+xoc@ë) õÐ` h04˜L ¦€S@ƒé~íÀL h0Ý/ð_óØkÿ´ÇÚã¿æ±£ÿˆ?‹ø³ˆ&ìhÂIØÑ„ÿ@ÂÉØÑŒfü× ö­`£ÿŠiÈ4ƒ†í4ìhþÁ×, ½ÐĹ_¼ÈxQðÿ5|Xh4‹ZBŸà6ðŸŽø¯Eü>9—ðg ÅgŠJp–ñæðù r¿ˆxÿZÁû)Ø7|ÑB¹_à¿Vñ_«8ðûV±Šíà q {“Â5ü×p†x\<¾õ_tÓÅãtAG{@«& UЪ >࿆óÀƒ“, ‰.Oh´î/"^Àý ±ÐO~ÿodºì|rî/°œÊèh¿_࿆ó:༠»“ñg¸ 7ü~áñ"àEÆ ø×"H¬ÝÜiÆOAÆ2ãÍ8ùÐ ._ŒÒº *4BƒÕ2â§-â×,â×,â,â,â,â§ â.4â¿ÀŸü×à5‹¸ÂF\a#.ªÕˆ+ßýÿøšE\ùîø¯Á''º‚ÿ@ÁTü ,׃ûük¸D\î/:ž.1ÀRþ,Àt‰ø.Dt%§_ôûE… 0ÙîÇ?ãÛFÚþ/¿,þ^¬pð/ÿ’ñ/ÿRð/ÿRñ/­»€Ÿ9ìŽÃî8ìŽÃ‰øì¨ÃŽ:ì¨ÃŽúå^à_°oûæ±{à±{౾땯ø7ã°×{þÅá_ð~ÞOÀ±8Ö!á_þï4à¼Ó€wð~ÞOÄû‰x?û±oû±oû±oû±oŸBħ±×{°× {pà|ÂOxs o.áÍ%¼¹„7—ðæÞ\›Kx o!ã-d¼…Œ)ãýd¼ŸŒ÷“ñÅÈøbd¼ŸŒ÷“ñ~2ÞOÆûÉx?VƇUð~ ÞOÁû)x?ï§àý|>ŸOÁ^ìuÁ¾•®oø >…н®®»ÀŸaG+v´bG+v´â#©øH*oÅá­x o¡â-T¼…†·Ðpà>ú†¾á 6Ć=h؃†=hЃ—ªf¿À¿8ü‹Ã¿xü‹Ç¿üKÀ¿üKÁ¿Tü ôú¾ ý‡øì~~~~~Kø—„Éø—üýw·îä?¼*ÝUÅ+·tKÝ¿Rº«ºv\ßÞÖqÝUÝ:î¸ /Ûå¸Z»«ã—¹ûe~Y6ÇßÖîoÝUÿ¯„ãªtÿféþ•ÒqµûeíþÖº¿µî_iøKçñ—Îã=ü]ÅîêøWœÇ;zü²»ê[ÝU<®B×^ÀòøÛÚý­» Ý¿rtW]{¾kÞiÿ¶ã{è®|w»«Ô]åîªkÁu-ø¥»êÚó¡»êZ€åÑë­ëuw廫îù¹Ô]åîªkÁu-ø¥»êÚó¡»êÚóÐ^÷æ<®Öîêøe·òùn­óÝêæ»9ï»õÌwóÚwëÙßU讀«ŸÜ_·òùnåóÝÊw_4 …¿«Ø]¥î*wW¥»:æÄã_é®RwUº«¾tW±»JÝU¯Zpø6÷ÚÖ½¯âÒ]%¼J±»êþ–CwÕý2w¿,¹»*xUkwÕõ¬u¿lµ¿‡®B^»{X»{À«¼¬]ÏÖ®/xÕºÞªGë[7‚ÝUÚºÖ»«îo9tWÝ/s÷Ë’»«îÙÖÚ]u=kÝ/ü²û¾‡îûºï{èì³ÐÙg¡û®„Î%:K t¶[èl·Ð­ó¡³Bg3„Îf]:».t«pè,¹ÐYr¡³äBê~™º_¦î—Ýʺ•/t+_èV¾Ð}íC÷µݪøøew»«¾…Ð]Á(uëàßUè®bw•º+èKëúÒº¾´îÙökkëzÖ>{v<¿¸`?c·&?þ¶vë®|÷¯íÅî¹ÇÎÆŒU»Y;«2¦ŽK—º_vs"v–cìfHì,ÇØÍ—ØYޱ›=±›!±›±ûRþ]Åî*uW¥ÿÛÚý­» ] ±»JÝÕñþÅnÖÅn.Ån†¤îI§î뛺¯hêžmê¾Éa «ãoÝÊ—º•/ukVòŸ´ºžu;”¿«Ü]A¯»ýÊã—ÝÕG ÝUꮎ/BêV©Ô­R©[¥R7#S7S7ëR7ÏR7ÏR7ÏR÷lS÷4sg/åÎBú»ªÝUÃ+Øéÿ]ùî*vW¹»êZp] ®kv!W] ¾kÁw÷à»%tý Ý¿º3„îªkæÄßUî®JwU»«¶vcÖ]¹îÊwW±»êþßq°³yŒKwÕõÚwýôÝ¿ºž…®…Ðõ,tíÁœÏ…›; ÷1.ÝUÛºqé®\wÕÍVØs=fVwÕµçºö\מïZ€]Öc»«îþ|ׂïþÍÐÝCèZÝ=„®½í9|Sÿ®BwÏÁá:˜»õóñ·ãª[?sg+fë`î,ÇÜù rçÙËG"w‰Üy$rç‘ÈG"ûn-èü¹³?³ïÞ¸ÎÍŸ!wžÄÜyrçuÈ×!w^‡Üyòû<ðèg×z?Ö©»ÊÝUé®ÚÖõº»rÝ•ï®bwÕµçºö\×¾oíï*vW©»‚yñKùøewºbwýì쳿«Ø]A{©k¯³Ý;®ºïfî,¹Üùs÷MÍ]—;`î¾·¹³òrçÌÝ·8w;†Üír÷ÎÝŽ!w;†Ü}Ãs·cÈÝŽ!wvdîìÈÇßÖîoÝUèþ•ãß,u_:{¾t|éV©Ò­K¥[‰Jgוn]*]W:»®tïXéö¥Û–nWPº9Qº9Qº9ñw•º+ø7»Rºòຫ¾õÐ]ÅîêxJç?+ÝÓ,ÿ¬tO³tÞ´Ò=ÍÒÙ|¥³çKgÖîI×κ¯u_—O.tWÇýU×qÝœxü­» =w\u3¤v¾‹ÚÍ—ÚÍ—ÚÍ—Úí"k·+¨Ý® v»‚Úí j·+¨á³…Ø]¥îêX“kÄïæß•ï®Bw»«ŒW¾ûW|Å«Ðý-t-€'ñïªûeìÙõ%v}äßUëÔý+©ûWRw©tWÝ=¤îßÌÝ¿’»¾äîßÌÝ¿Rº»-Ý¿RºÖK×^í¸Úqµk½vÿJë¸ÖnëÆ¥a?_‡ÏÇœX»9Ñ]Åî*¯Ýœè®êÚ͉îªk!.ÝU÷ËØÿ²ëKìúÝÇœX»9Ñ]uÿJêî!•‡Ôý›¹ûWrÇåŽ+Ýý•Ž+WºjÇÕŽ«W;®u\ëÆ³u#ѰŸ/ÕÁ±Nt«†ï®Bw»«nµñÝ¿âëÖ͉îªküå9Ñ]õ¿ìú»¾€Ÿý1'¶nNtWÝ¿’º{H¥»êî!uÿfîþ•Üõ%wÿJîþ•ÒÝméþ•ÒÝCéþ•Òµ^»¥vÿJí¸Úq­ãZ7Ö­¥†½¾Ï—㪳8kgqþ]¥î*wW0¯;ûóÁuW¹» ]ë±»JÝ<ÍÎÒ©¥S;K§v–Ní,ÚY:µó‰ÿ]åî î¡óf?~¹_µÎ jÔ:»§uvOë<{­ÛÙ´ngów•º«Ü]÷Þº=Pëö@¥»ÊÝ•ïzÖ÷3vW©»‚‘èìäÖÙÉ­³…[g ·ÎÞm½Ûº'ݺgÛº§ÙºóŽÖ=ÛÖw´î„£u'­{î­}¶»«}$þ‚ë§ù¸ ÝÕþŒžë®|÷¯„ãÊuÿŠëþ×q®ãÐã:ÕãªáÕá›y\¹îÊwW¡»ŠÝUê®rwÕõÅu}q]_|×ßµî»Ö}êïhírÝ•ï®Bw»«Ü]•îªvW]ë¾kÝwí>U×iÓ\§M{ÞÑÖÝQwåº+ß]u³àø¾?ŸQw•»«®/®ë‹ëú⻾ø®uߵÐÍdÜI=®Rw•»+xF¸¯zþ²» ]{±»êû÷^º÷¶tý,]ÏJ÷þ•®gøÅ{\åîÊwí…î*uWгÚõ ¿cÎu«ëÖ×­(ºÏuê¾ÇU;êÔ}Ï_vW¡k!vWÇ=¸Ðõ³›.týìž_§ç{\Åî î6výŒÝ¿»ž¥îßLÝ¿’:.w¿|ùf¶ÿõüÿÏÿù—tïþ¿ÿç‘BïßmO¿wdèûÉ¿¾Ýö4{7üŸûýÄ_2ù_ÝöÀüÿ¾ñ÷qodö±þ6'êãv4²±_•e<þwÉ·=ÅàmŽ¿Óã ˆ'þþÎ}áïOÞ¼õ÷§pŒß¿ŠÜ3<ˆðÈð$Â3ËgCçDCçÙÐy/ÂÃg÷>œÚ·Ÿô[E³n;¦ÍƦÍ&Àݲ±i#Â=à O"<3¼ˆp6tN4tž ÷"<0|rïi¼X…ßXöi“ns|°8ï‹Õç*öó¿eáß)Äç­¿•ãäÞ;|Ôú÷‹õñ«|×ZÐvÜâÆnq“àlj÷Ï}ÐùÁ$À_¹ç³û¾Åø›ãmO}Ënñ…¿ Æ_¬Ì¿X/üí¿å°Çƒ¨ÛÑmÏÂý.ïð¼ÜÉ÷7òvTHðÀð(Â3Á½“à¾<ˆðà  ÙÐEÑÐE6tq6t+1٪칯·Ã{ßÏóÛáÈ'/âÉ<ž^Dxe¸¨ó9<‹ZϬõ²HðÂZ/¢ÖK#xµ^YëUÔze­7QëÍ1Ü‹p2ò')sü™Tý6y36b^ø z±¶cAÝØ‚ºIðÀð(ÂóÆT îëÆT üÆT ÙÐEÑÐE6t‘ÏìC÷ÕÓö ŸZ{ØŸo|üÉ¡_™1N?eA„G†'Þž¼OìK˜²/ ¯"œu>‹†.³¡Ë¢Îgf”E‚6t¥ˆpvïUÔze­×(ÂÙƒk¢Ö³¿šhÖ52òã~ÇŸAÛüµfVZ΢EeÝ••-*ëmÞú[èÁ•uÞú[ žDx[Ù¢"ÁS`xá…áU„³ÎgÑÐeÖzµ^Øs/¢Ö k½4 ^YëUÔze­WQëµÞDs¾±9ß$#ÿaˆ¾ñgVþÂŽ=¢Ö§h¹Ø¨™E-«1NÍ· Â#Óo{ß%xbÖ_Ê"¼0¼ŠpÖù,ºÌ†.ÎÌö²Hð†®ˆ\aCWš¯lÒVÑÐUÖzµÞXëMôÊ4öÊ4É´ùvñËs‚úر]~{Âï¿¡ËÅå˜[¥ò-ËKØ»ñ§š}Ž?ËÝ&}\Én¼ÈnqÝoqe·¸Nnq=nqe·¸Îñ3‡CÌá°{ëç·¸}ÜX'sh{÷q›ô±gZú~ïc;Á_ÉÔÈq˜Ì´öœiÏÔ_·x:‡Úx•ߥ‰:¿î_Yç's¨­Gç×qçg³£m¤óY6òÛÑú6n}òÜŸÞ€Aò[ßG´þá™á¯Lžã¡ûØþ|ãƒãv<Àð~ûaÇ žà½¯†áÑ1Ü‹ðÀð(ÂÛOìÞSáìÁõ¾г—DÏlè²hè2ë|®¼,/¢¡+…á¢{¯¬õ*j½F†‹\c­7Ñר¬k’‘ÿpÜÈ>O'Åh­óQ´Ö­ûZ·²µn¬uë±Ö­l­[¸g‡RA„vž Ù¹Nô"œJõ.$Š+Î2לe"®8ËD\q– ¸æ,qÅY&àš³LÄg™€kÎ2Wœe®9ËD\q–ù^mæÆãÓ3ZÒ\-iä4ñ‡&þ¼?Müa§‰ ~ck’Žá^„†GžÞ$xb÷ž‚g®wsQœ=¸$ê|fC—EC— ë/ËÆì/Î\ ]i[Ò$xeCWE­WÖzµÞØ+ÓD¯L#ÓæÃÍ5ÀOw¤ô˜>;Ò|‚¿’Ñ+v¤oÍþ#Q sVþ;õæu¶™×Ùf^gn^ã¯Ø‰gL¢ç³îÏGcE¿Î_žéi$gOC|d8P[aˆÔVãÌý²FøÔp GL÷${>Û1À"oýÏ-ctåâ­í͉pöUmU€Ï–±§¿d0À¿n÷X'Oø‰¿J\_ žøØ7EÝQcœú¼‚gë[L"¼1¿—à‰ù}¾ÜQcœy^Rá¬óY4t™ ]u>3—YY$xaCWŠg÷^E­WÖz"œ=¸&j½1GmͺFF~ö½|¿ïsßÔÓ11²z„‹Êº/*Нê;¨ßgŒSçRá‘áI„³m~ò<1'×ßgŒ3‹"UÎ:ŸEC—YëYÔzaϽˆZ/¬õÒ$xe­WQë[p-‡¸Â–;ðo[Nà÷yú FËEˆ¢åb£êSãÔqDxdxálœ¼OlþåSãÌÀMU„³ÎgÑÐe6t¹ˆpæ÷)‹/lèŠèÁ6t¥IðÊ&m fg¸fg‚¸bgràß;O%5¦#ª‡uÑNðWEJÅ–¥™ÊW”#®8(\sPޏâ qÅA9àšƒrÄå€kÊW”®9(G\áÉ\ãÉC\áÉ;pÕAyjL“ªh¹Ø5yªÍH35#®8kF\qÖ ¸æ¬qÅY3⊳fÀ5g͈+Κל5#®8k\sÖŒ¸â¬pÍY3⊳æ÷ {²çhLÆe«‚é¸qÅq-âŠãZÀ5ǵˆ+ŽkW×®9®E\q\ ¸æ¸qÅq-âŠãZÀ5ǵˆ+Žk××"®8®}âg[‹<Î,vÿM|§/»ÿæ•UÛ ž§X{áffߧU¯óÖßå0y#T7(»Åu¿Å•Ýâz›·þNgÈnq·þÎx88Ï{ÿä­S‘ìÞ·£óëü&Á‡Ù|™…ÏäÈNê¹:*ïâöìÛÞüR«>ëþ :ÿ,4o]­NÏ6uz¶©Ó³MžmêôlS§g›:=ÛÔéÙ¦NÏ6uz¶©Ó³MžmêôlS§g›:=G‰|&GvзxÑš´Ëgœbo_¢Ôg½1¶&­óÖÕ*òlS‘g›Š<ÛTäÙ¦"Ï6y¶©È³MEžm*òlS‘g›Š<ÛTäÙ¦"Ï6y¶©Èsdç„K­6Û±\ll¹ØÎp¥À;ÛÞÙ&ðÎ6w¶ ¼³Màmïlxg›À;ÛÞÙ&ðÎ6w¶ ¼³Màmïlx?ÍÒQv“ßö©|µ©ïýõL÷[õ•°‰%î=±=«Íö¬6Û³ÚlÏ*²=+³=K=Ÿu>Û³®Çó¹.Ý~ãJ¹à¹â ¹ÏO¿Ö•}­[=ŸíàëÒí7®H®H ®Høl*…9„Òþžú³œ'•<³ø §+¼± …C<³d|9Šp–Š9W ^XþÊD8KXD÷^ÑÚNq–ñ ÞXë͉pöaj’‘ÿNWøøCøü`g]ø,¾ññ+öi8\¥Ó7ã4aï0µ>ιwciö†xf©¿ÒìqÖúWš½!^XëEÔza™«¨õÊZ¯¢Ö+k½‰ZoŽá^„“‘ÿN³÷‡O‹äÞ þQ.…}nSÍy²Çº±=Ã3KÊ–£giÑr•à…¥E+A„³(±RD8˦W ^ÙÐUQ땵ÞD­7–źyN¦Í¬ÄÌùÍyjµÈ¢ký¾EkÜ!Ôâ™ä>ê< ZWg3F\‘ÍpM6cÄÙŒ×d3F\‘͸Ñc‡&{îgßw×'µù|î¦Od‹¦Od‹¦Od‹¦Od‹¦Od‹¦Od#`àés7eE\‘9pMæPÄ™C×dE\‘9ôÀ'_ƒ°x¶œ»÷ã záÓ mJt9áÚå¼Ã¯/çˆ+–󿾜#®XÎ;üúr¾ã)M„Ka¡A¥©ˆfÇé¦.¥õ6o]»èwøõEqÅ¢ßá×}Ä‹~‡__ôwü1;Vþ|Øö'Ëf‡åÓÐá×? ˆ+> ~ýÓ€¸âÓÐá×? €“¤ÒçζáYnh¼½Ìá!î·þÄånDNÐþܦ Yþþ@3Htxax=ÁOâ_›ñ¨5¡ýœ¤]w†½ð×1¯ ‡ïðëN‘½óÓX€ð¬|5¡=k÷|„ŽMld›Ø4™Á–=ð ?6—ØYÁžûþ›|š{r˜ùÂÿ»Ãcaó‡hщr<†Àû¸øØ=Á®abøWщ¶ÇßèIߎ'?)MqÿûÀGÙ-îÙv¶1š|àý«èDò“ÚÁ²Žxú¼Û1ŽÇí O~R["xZ= ãyãy‘f7™*Læc2ÿïÇ#®8ŽïðëÇñˆ+Žã;üúq<âŠãø¿~¸â8¾Ã¯ÇNŽã¿Âz>&íJÌÊàE¯Ì©Oæ#0`Ðú¸6Þ•Ãã×ÏéWœÓwøõszÄ5þ(o:„@\ãò¦CÄ5þ(o:„Øñ¯à’¹¹±7#ˆÞ ¢˜¾1Å4ůŸæ#®8Íïðë§ùˆ+Nó;üúi~‡_?ÍG\qšßá×OóWœæwøõÓüÿŠ£èÞŒ@vuá7¼…*!ð]C8?åñ¼rõ ÔbÂ’ãü{ x`xð\Q7»Ã¯×Íîðëu³;üzÝlÄu³;üzÝì¿^7qEÝì¿^7qÍÑd°MÛÑd°MÛÑd°M–ïöcQa¾žEKÚ©ìyÝì>(¹Ô-ië¼õAÉ¥nI“àŠªÝ~½jw‡_¯ÚÝá׫v#®¨ÚÝá׫vwøõªÝˆ+ªv#®¨ÚÝá׫v#®¨ÚÝá׫v#®¨ÚÝá׫v>¬Ú=8íúX.h×"Z¬Ž2IÌÄôܸ<0 …Ž…éž–"z3¶cjoì›±áºø~=>âŠø~=>âŠø~=~‡_O¸"~‡_O¸"~‡+ðOȵ¿2‰ŸN'A¨FåVZò&.â .à.â .à.â îî—}üñà˜ 6˦͹¾®·yëjar² ““M˜œlÂäd&'›09M„Éø+&y922Lg‡É¯€¸Â¯€¸Â¯¸Æ¯€¸Â¯¸Æ¯€¸Â¯ðÆ¿ì¤þí­ì¨úH›’*ŸuÏùâù:žøwøSÊöNIò™ëÆðFp·HpçîEx`xá‰áY„³¡s¢¡slè¼hè¼gxáÃcú¿Ì!<×Ï ?ÉÓ’*Ë^›«hjoÇÜÜØÜÜ$xÛØÜ”àÎ1Ü‹ðÀð(ÂógCçDCçØÐyÑÐyÏð ‡_¬ÇÜÜæ³î,÷M4“ún²e® Ë{š$þØüVºÇI±+îÒÌáõÞQ‡Ýo¬¸ð$;âŠìt90c¹:ÑÈﻨpØå@}Ý$å$w\WNqE9ÉWäÆË¢µ‰Fžä»‰9˜€kˆ+¹+-þîšûÜøÐµý•qÌïò¿yëƒ?,‡Ã×à‘D'Âi%ô ÂÙÐÅ$Â;{Ý{bgOIôà[¨“èÁ%Öù,ºÌ†.‹:ŸÙ±]Y$xaCWŠg÷^E­WÖúì Û¦_سܯߏô[œh¹XåbeË_çÉðÃò#0<0ñ³Ø·ÜÆöWþu^´*lǪ°±UabÂ<?,Ã×à‘‰E'Âi-ò ÂÙÐÅ$™éšD÷žØ‰Z=¸Ä#“èÁ%Öù,ºÌ†.ÎÎqË"Á º"zp… ]i¼²I[EC§(ÉûÂÏBZK`¡Ìi75J8ÁÛiEÕî~ßNªvOlÄL6"â pXl^˜b󛦖ÈÖ˦Íî…Qá¯i#’ÿñ‘EAˆ1Îì¤*j½²Ö«¨u ©Ø\HÅæB*4µ„O¢i³Ï]”Õæg„+¿ˆ+¾€k¾ˆ+¾€+ ´wøõí€Ï¼d¥2§úQ±¬ðŸò>ËüŒ{~‹*).tcÅ…n#\»WÛz\™Œ5ÑЭ·am"áz\IÕ¡«:táJ5$â 5äOW®JV.ÿ+››¤hÑ-âÚ··ÚÞÞ*y{«cooØk+¯ U÷ÊbY¢P_¥Árýˆ‚••LzãÊׯ:öú)“¦÷¾î÷®xýê«è×ãÞ¯—LzãÊozuô˜>‹î};:½dÒWÌÔ,˜´™w>ïu¾2Ëô°L&m~ÕùʤdRþ+ø÷ï ÿûÕð“ó÷/ÂÃã?-*=º½LXfãËdÎçõº• Ýz†?†neC'ÂÃäWìÀ´É&×vÜâÆnq›·þºÅÝ¢ çøçÎu”:çÈ2ÖzïOüQYœÙrq’µþiFŒPš¬õuoå8›$˜~~¢GŽZ/jdŸ¹ï’öiÓÒ þè¼F[òÄÿ»Ãc—Ìã\×’é´qÅi/âŠÓ^ħ½€kN{Wœö"®8í\sÚ‹¸â´p'q…'p'q…'pÍα٪}6šÿ%%Ñj³/•=Õ­6+[mÖyëêÃbćň+‹W®9,F\qXŒ¸â°pÍa1àšÃbćŀk‹W®ñ– ®ð–ølOس|S-*Û±*llUØNpía1âŠÃbćň+‹×#®8,F\qX ¸æ°qÅa1àšãÄÇ€kŽW®q0"®p0øÄW¢¹/‡æ>.ôðè…ÿ$ŽU¤†´þßý7$ÍÞßèÖ¢ÃóeE`\ˆê½þ–,º÷u¿wV³8¬“{_{_Ù½¯<_Îù¢;oÇvz~ïÛÑùu~2ë<_N—JS†·½óõŸ†„Ęý|ãÚZbˆ+j‰uøõZbq©¬JØ^,w>t§aÑ%~¾qmd1âŠÈâ¿Y ø$²8.•eøH²¶ÔYA\Qg¥Ã¯×Y|ƒcê¨=áÿý7·9þ¹(N¤_ø£ÅÂê¡8þþî<ãO Ï"¼2¼Ip¿°Z0¢{÷á¢{÷I”C{øàF¾NêÞãÌ£O o<1l "üz²·¿žì qE²·¿žì qE²·¿žì qE²·¿žì qE²·¿žì ð‰¯óþ+Rûéwi¢å|W-*T2/üµœ³ÚOük ¸ó "<1<‹ðÊð&Áý W‰î݆§S\ç&îðënâ¿î&îðënbÄnâ¿î&îðënbÄnbÄnâ¿î&F\á&îðënbÄnâ¿î&|â&Žn,ú[h=ÞŽ••Š›÷G©8Ïð(Âó¯ oÜ/¬ÎèÞ}`¸èÞ}å8ÿá#?ãླӽÿàyØ.àq!xL˜þûCá‰à%KðqÄóýµJðÊF¾ N’–YTCº]\„äÂÓY·ÓfcÓfàqÙØ´‘à)nlÚHðq¤ÕcÚˆð´±i#ÁKÙØ´‘à•|+œD•™>U²Xý†Ý;”x Õ´§÷ý8x–9TS%'Ò7‘ 6U“ q… q… p qÅ©,àšSYħ²€kNeS5Ê&S¥ÓWœÊ¦Ê ç%‰Þ¸u¬–ùcS%2Š›H㙪I㉸B㉸Bã ¸Fã ¸F㉸Bã ¸F㙪Iã™Ln;\¡ñL’ ·1UV³ÅÉ^,"ñ¹‰äŒ©šäŒˆ+䌈+䌀k䌈+Ý׺#®8t\s螪éÐ=™ #w¸âÐ=I #ǧu3z±Êñb5þb5Sù'þ¸Çl…IÀ4âìØÛ; î™™Dx Af‹×äaG\‘‡qEvÀ5yØWˆ-Wˆ-׈-Wˆ-׈-Wˆ-׈-Wˆ-׈-Wˆ-\%¶xš¥C—±-•¦íOüµT®l©\%8Ójx'Á=SKhìÛ"Á#D/ÂÙÐEÑÐÅÄð&Á»÷D¸Bdƒ¸Bd¸Fdƒ¸Bd¸Fdƒ¸Bd¸Fdƒ¸Bd¸Fdƒ¸Bdó^¬æ‡hÏíÈhEŒ2ãq;–´-iÓõÀ™FÇ; îÙÆ&ˆð@ãó ®É2ޏ"Ë8âŠ,ã€k²Œ#®W!®W®W!®W®W!®W!®W®W!®W®W!®W=ñ3qÕsÛ0¬ÉVß+bŽ'ø#É ÛN§Iàÿïþ›ará37G潎²Î¯{çYêœIàuþzàó•:2¢¨óÛÑúõ À\ÙswÇÐÕü¡˜aÉvâDT—_§9“£¶¿?ð|܈öcž¥´ÎôÐ#ѽïj!–Ô#NÄzùå?~ÜûÊî}·þº÷•ÝûÊ[g³.;ѽoGç7ÖùM‚ÖcþÎ3yàO÷ÃH#íw1KYhçŸøãÁ…ïï‰ß;_ؤ-³I‹x¥°¶®ôƒ ®ðƒ®ñƒ ®ðƒøì,ó¹/ÍŽÒD³c­‹ÂÝñÄ_³ce³c·þš,é7ßö¾qåâŠ9À5rˆ+ä|¶A|¯£¢+ñW4;¶ãñnìñn<² Æm›w^},„¸âXpͱâŠc¡ŸY»…Õ¾ýî;ûÂS*”w2 ç4Ò¡'þßæÒ¡‰‹¼ØJ•[©Òb+UZl¥J‹­Ti•*-Ž•‰Q4;Ö}vh> Ïl!ÏÙÁÖöÉâlËÇUlù¸Š-W±åã*¶|\ET8±Â‰?`OgÇv<^QrûAëjI±Õa+¶:lÅV‡­Øê°[¶B÷ÀGÈeá{¡²ï#K„ó4h}ƒq\Žx™üŠd?ÿñ¿¢[Ü“ ³¬+Å—¾ñA`ÌÆ|´NÞKÄ.L;DNDxÁu܈sÅssçÉ”_;Úëóå?«`AåÐ…H>óÓ1Ä#ÓÏ ¯|¼_‹¿Þ‰†î(Îjh/¼ÆàαÜ^„G†'ž^'8K™’hèŽR¿¬ZîÒ6>ÇòÓp,Ä#ÓÏ çO#sc°‡ 6›ãÓâ›3ÇçWü»±"cœ”€ü.ò‡8U{;ѽŸVÓ›9>Ÿ¸º¶âŠÚ^O3b(Èõ¢{7•áA\Q†§ ëü8ÿëv×Vãù÷›¨A+ã ­ú›“¨ÉyS«ì{yämlõŸ¾~³`þvDK8öú;—•¨?oLýIqVBÕ; ®)Ü ¸¦p/àšÂ½ˆ+ ÷"®(Ü ¸¦p/âŠÂ½ˆ+ ÷®)Ü‹¸¢p/àšÂ½ˆ+ ÷®)Ü‹¸¢p/àšÂ½ˆ+ ÷8)ÜÛ¦§œo¼åYâ…F6ˆÑz|jÌ—´×±eRp³åYÁÍwëóƒöF<›Ýâ¡Úb_þ™µ[‰fìÆ4cgU#½“àšrŸ€kÊ}®)÷‰¸¢Ü'âŠrŸ€kÊ}"®(÷‰¸¢Ü'àšrŸˆ+Ê}®)÷‰¸¢Ü'âŠrŸ€kÊ}"®(÷ ¸jŸQmûŒÞ2)÷Ùò$WIZèÞzÏÇzá ;„‹\L¶ãÓ]NZ<˳W«¨‚]NZª´£‘p‚?Λh)³Ù@¤ÇùHô5m=Ó§˜v<ŸàsɬóÙbªwøuS½Ã¯›êˆ+Lõ¿nª#®0Õ;üº©Ž¸ÂTïðë¦:â S½Ã¯›ê€S=.S=-™jí~¹ùwî—ã:Ö>ˆ÷¹±xŸÃ3˯ o<‚gQ뙵þ‘Ú‚à…µ^D­—¶2KE‚WÖzµ^YëMÔºÂÛá×ݹ;þx±V>µY¼÷¢˲èðë[€¿¾@\±èðë[Ä[€¿¾èðë[Ä[€¿¾@\±èðë[€¼XÜÒV¾ÿKþ°ô ±ŽÂÊ ¹Ý |UoÉÙŽë$g€O$gi)Dyñë“h„Öñ§[$9{áƒåñ&‘]í¸NvøDv•–Âj¯/²"õ&Q¥î¸N• øDa”œ£[©}'æè9ý ìÙVjáÙ7_øwxRQ+9njϔE}ܵ‘Ìøüøü|ã¯>®¼ö/²>nG#tås™f–Ù­pÇ—-§{ˆ+N÷Wœî!®8Ýëðë§{~ýtqËÀÙ\nâ2À_1±Sl¢ÉE²aÜX6 †{¶Í "<°b\$xd;…èE8û–Å(ÂÛ×ìŽmwì&»cü“ƒµ,š\–3&ÄgLˆ+ΘWœ1uøõ3¦¿~Æ„¸fƒélL7Ù`¿òÙ0{&ÃäiÎŒ>u„Ìü|ãj§¤o&§¤o&§¤o&§¤o&§¤oÿÎ5÷_1Màžª{þxO}1/?ßøØOF]cCüËOF]ccœµ^E­·E´É¢8û²´*Àg~2ߘø!:Ñã5ùa|3ùa|3ùa|3ùa|3ùa|3ùaX•f%%^¹4A•fR¸Á¹É²»Wiv“öDjúÞíŽÅ‹ú¸G\»•õqôq=ú¸òF˜m´ Nç}ÜŽFèÊEí¹<ÍñG¾‘¤p‡Å×ÃJ‰GŸòâ;®K!žb Ž®&º÷= KR8ºâk<î]t 1ÄuYÇR Ì…åƒèÞ·£ó¢æg„ëÂßRd©žø³ó‘w>žv9O&müG 0jsqf¶E‚+â0:üzFŠ7îÓÂòé oÑdÜ#®0îW÷€kŒ{À5Æ=àãq…q¸Â¸\cÜ#®0îW÷€kŒ{ÄÆ=àãq…q¸Â¸\cÜ#®0î×÷ˆ+Œûþ\7¶sãždŒGŒûoøJûÖ—Úàpöê&Æý+ÿŸóäÜùï[ð±­à¦RǼd­‰î}Ýï;»É‡ô•ÀÏyrîü¸÷uÞúëÞWvïü;Ì2Öæß º÷íèüÆ:¿Iðq2s7´4K@ÚO?ÀO{–€”b‰ôJ¡—2Kðbñ;®+ßá׋Å#®(ßá ¥G¢éK=¸]é‘JôÊÿ—2Wzðâx;®+Ž×á׋ã!®(Ž×á ™J¢¹«ìÁmÇÈ‹¾ï?#\—bºÃ¯§˜F\‘bºÃ›Ù¡ùr| ¹Þ í›R5kÝK¦R*“œ­uѶÖEÛZmk]´­u‘FÅу[÷§Yë^*—ǃS¬uѶÖEÛZmk]´­u‘† ÊÜvŒ¼b­‹¶µ.ÚÖºh[ë¢m­£©]ã®´M•üQR®^OíºãóìO©²×ºQwÅr½žîpÇOÜg•e¨:n¦}”d¨J4ª'ÑNðGx:S,û‰¼ü]Øü+íýK{Ïpçî¼ O"<3¼ŠðFp¿HpÏîÝÎîÝŸÝûé[ÖX¹=ãæ|rí¹˜$ÜOâÞ•¤¿ ü°Â wne“K„G†'ž^Ex[Ùä’àžÝ»"<]®ˆšHuîǼMRÕà‡U5ø!¸s{î"<2<‰ðÌð*ÂÛÆž»÷ìÞ}áìÞýÙ½Ÿ}±rf¾Î#'ç|®à&úãlKmy³-¯`¶å̶¼‚Ù–W0Ûò f[^ÁlË+˜myóY^AWfy߸+3Gz¦©)›xúbF£¸‰Ü4Û$d[úÀlK˜mé³-}`¶¥̶ôÙ–>0ÛÒf[úÀ7îÊì˜%“¼é×EÑ›a:‘ζüÙ–ÿ/Ûòÿe[þ¿lËÿ—mùÿ²-ÿ_¶åÿ˶üÙ–ÿï»BR€»2;Üˤ¦âýGûQ¯/ÿ§VZ™ø2”ÈašI?ùÜB‰†/Á#³¢áT/D83tbáY¨¢{OÌBý2œÇ8³“èÁ%Öù,ºÌ†.‹:Ÿ™q_ ^ØÐ•"›è‡áš8lÄqØ€kâ°WÄagæ3þXT˜ÏøÙL—´Sû¸L¼Y¹©Û˜äy–ÀÃ—à‘¥¸‰N„ÓÄqA„G†'Î,Ô$º÷Äìã¯-ËgÉ…’èÁ%Öù,ºÌZÏ¢ÖË"*YNqEZ'À5iW¤u\“Ö qEZ§ÿÞ¿Œ}¨Ë=þô¢Åê/3ÛÓO¬~¨Åðà%xd›†èD8OžD8³ú“èÞÛs|í"Ç8Û®%уK¬óY4t™ ]."œítË"Á º"zp… ]i¼²I[ECWYëUÔz[DY°)N3I¦Í÷–rìÒï«BÕQmß,®Õ(ñ´^ÔLUÞ !šE~™åÍ.‘%;+§ßŽÖ7Ö:ùR¨°l?b-ܘöá£uVVíHt7í<9$½±CRÄóBB=ò‘ã9/Tòÿ¹?*K¿Äk/ü?÷·*ùaF“f€²þ^Ex#8—Ì î=ÃO“_«§/‡úmþ|¶c€76ÀÛ¼õ×ol€ExÛØKpïDxâ¿òì‹·gÐϼpc†â’ôü?O^o9ïðëgàˆ+ÎÀ;üú8âŠ3ð¿~8;Ÿ¸Î Z ÇÞ|ÚœŸnsÅç ×úQ:üºq…¥Ã¯ûQWøQ:üºð¡å5mVþà˜7xÑ´±vøõãÏ¿~ü‰¸âø³Ã¯"®8þìðëÇŸ;îf…ŽóYù³åXT"ŸûÆuñc,îɬ©ebMά)·Hð¡øúñ/ÂãO Ï"\cˆF›!m†hä†èíT•—H3È&íztÀI;ùÆõ˜u+›u«ª²Ÿ³N„†Gž^Dxex“à_Úíc>‰ðëªì¼DšÍ%‹¦Ív,V[¬&+í³‰[$øPÔýœ6"<0<ŠðÄð,Â5›ºhÛÔEÛ¦.òMÝíTíIåÄ?Ñ;*óŠÙ™-Êu—Ù go’ ¡;> 1ͼðâžæu~‹{‹r=Äô…7I‰ÏŸcf^·ÑËžâ6–œÝ$5:w|¶˜+ƒpZÉŽ¯oî¼ Â$î…«7Ç>qÄgÇ¿üUt‹§{àI<Ö Woä|âÇÏ.Òb²²§h9|¶·p…Í´z¼ å6ǵô_¸6†¤Ã¯Ç ®ñŸ!®ðŸ®ñŸ!®ðŸ®ñŸ¹b["Šh‰ åªƒÍMKÎñ® Ãèðëaˆ+Â0:üzâŠ0Œ¿†¸" £Ã¯‡a¼ñyJùìh¡pEsÓÑá×!×xWxWx×xWx×xWx_ø<½vöÄzü;_xÏMÏí¿[9_wxáÿÝó(ðùÈ"ÿЬó{6Œ|]ÙüÂ_¿î—ð‘g-EÔùíhýúþ4дê{4òý7'øü4ròÜ$6g&ãö âÌžqY‚+¢lWDÙ ®ˆ²éðëQ6~=ʦïGÙ ®ˆ²éðëQ6~=ÊqE”M‡_²A\eÓá×£lWDÙtøõ(ÄQ6~=ÊfÇ¿ÒÄþ°4±? “_±”3{IÅùz|~Ì?ù”=ñ×z¼²õx·þZž%¸"DqEˆâŠ¡¿"Ôá×C„:üzˆâŠ¡¿"Ôá×C„W„!®‘¶ ®¶®‘¶ ®¶®‘¶ ®ðˆ8“¶øïê߸Û݃¤Ô8;ÜK¨ÎWÚ£¾ó´:¾Fœ ¸,ÁñMˆ+â›WÄ7uøõø¦¿ßÔá×ã›WÄ7uøõø¦¿ß„¸"¾©Ã¯Ç7!®ˆoêðëñMˆ+â›:üz|âŠø¦Wœëø0¾iAÿg„;Ïriø™Ê,ß’?ªËßÃWÚ—sh¤8‡-Rõ•Ê,ÞOS–Ï[ç2>‰w‡œÔýÄß]ýÊ > ¶Xf'uáubóçyôŠG®òo ¢Î¯{çWÖùÉVèu"ðè¼â¹“x¬j£iç·£uÅs§)ŒÛ1çë ®Í1øÂõ®©jsMU›kªÚ\SÕæšª6×Tµ¹¦ªÍ5Um®©jsMU›kªÚ\SÕæšª6×T=t^c×T™º¦ª ¿âýWLçUªhQ±äW|ázÿJµùWªÍ¿Rmþ•jó¯T›¥Úü+Õæ_©6ÿJµùWªÍ¿Rmþ•jó¯Ô3ÿJ™:Hh –ÚDï»m—_m»üjÛåWÛ.¿Úvùն˯¶]~µíò«m—_m»üjÛåWÛ.¿Úvùն˯g»ü2ÝåWKÆÌ—§ÛµÈý©qW4¦ é#’F­ÿw‡I”–'IPr»ý4°m¦_oò)ØùuÒùõèüÊ:¿òÖYÈ~h¢ÎoGëkκX©‚dWGþ™ˆÇ^³)"âÛpnßIAn§Õµ\U]ëŽ3ïŽðÞ·£ó"aØÏWÕ9ÊÏ}äÐI°;‡r âS'ANüÁ=qõnpÍnqÅnpÍnqÅnïi« ³,{p§±œÖɃ3É„×È„WÈ„×È„WÈ„Ÿ6ÛpDÎ$‚\#‚E\!‚\#‚E\!‚}®DÃ0¼ã•I·9þøŒÓú•ãä‰ÿw‡¥Ú>p–áÉ:¿­‹2´õ­76ty·.rã­·ÓhŸ™B4·CâÉVZ7YigŸ E8³.¼“àžùSƒÔ¾HðȆ.І.²¡‹¢¡ûrÖSÿüOìÞSá×Ëuøõ2GˆkBÔW„¨® QC\¢¸&D qEˆàš5Ä!j>NñäþÎÉyRÜXáş®´§±k3íçõñúg&Eïþ‚0D?ôṖ8Ù²”hŠ\¸&6 q…q…q…pq…q…pq…pq…KpKq…KpKq…KòÇ…Pâ2 ”È¢ž¼­u§Í89~)Ñw¸&îpMÜâ ] â ] â ] à] â ] â ] à] à] â ] à] â ] à]L±eb*ñDóXÅÖ³åⱤM~Å‹‚Ì|3ø® ð\àƒ¸Búƒ¸Búƒ¸Bú¸Fúƒ¸Búƒ¸Bú¸Fúƒ¸Bú¸Fúƒ¸Bú¸Fúƒ¸Bú¸FúSl‰ÛJ<‘þ<–´m¾X½–4þ«Êªž¤ÃJãj‡r(=; š(=žø}×Ua@…¨—äœv~71s®N²T–·Ó…Ï߸Âç…?ïr*Ë$sd©œÞâvôqc}ÜNðgùj¬„P:w—ý4Ñe…Z¨4J&S •fR •v‰6½÷=QjV$J}âƒ@6*}â£tª·ó ª¥1¥TÈ¢{'qp2¥Ti&¥T Ìw,|•ë6ê®”ŠŠún/|à´úa±O o³¡Ë¢¡Ë¬ó¹J𲼈†®†‹î½²Ö«¨õ.zpµÞœg³®IFþ{=Ø 50wÔ‘bú¾¯c¯“l¡®‡È,†•½ï«O o<ù•½ï"<3¼ˆðÊpQç3º,j=³ÖË"Á k½ˆZ/àUÔze­WQ땵ÞD­7Çp/ÂÖÅû›Kj`.™"{­ÉAù;(ÿaxbx“àÉoì½á™áE„W†‹:ŸÙÐeÑÐåÂð*Á˲±ï°g®ˆ†®´½Ö¼²¡«¢Ö+k½‰ZoŽá^„«ìîívžì ’ê˸³¯ñŸÇ1Ô‰uM SÄ SÀ5 SÀ5 SÀ5 SÄ SÄ SÀ5 SÄ SÄ SÀ5 SÄ SÀ5 SÄ SÀ5 SÄ SÀ5 Ój«“RãIÑ\gçìoüïW“mod‰wšlA=/ª“íÏq¸çØ™°ã®RÄ3;Ìwܳ A„z¿HðȤÑ‹p6tQ4t_Gþô”ˆ'vï)ˆpöàRáìÁ%Qç5•;WTî\S¹qEHàš<Ä!y€kBòW„ä½ñǺ9Úx>–J¾ñŒ,ÍWŽ¢¥Ò$[G\![\#[\#[\#[G\![G\![\#[G\![G\![\#[G\![\#[G\![G\![\#[G\![\#[G\![ã¹’ü ¥’næ›c'¿u?Dk¼†bs§Ûô0‰#mÎ$Ê\#ÊF\!ÊF\!Ê\#ÊF\!Ê\#ÊF\!Ê\#ÊF\!Ê\#ÊF\!Ê~ãÁ/Ëðä7 ¯ñ:ù5ä,z­O7‹a´ØœI ¸FŒ¸BŒ¸B ¸F ¸FŒ¸B ¸FŒ¸B ¸FŒ¸BÜ܉þøñ®gs>|&0Æ×ºNpš‘Zö6©kרkW¨kW¨kרkW¨kרkW¨kרkW¨kרkW¨k›;Q×>^Ømþƽ^ؽ° /Ï€ª¡úìý…½ÿ†½°/|j8'žÌû…k- ÄP‡_·€Ê3ŠcXMË‹†îÔ8IÑI»?8Ï÷Ù~÷¯,,²þ#`Ðúýcâ–4´úÿþþ ðñ~ëïQ„'‚—,ÁǦûj•ർ >zaO‚UïøJ\°üü¹¯ûsgðn<÷õxî+ypÜ®¼ä•¼oérÎâ;ÎŽBc ÝvÜûÆæüä…ÝŽ9¿±9/ÂÓÆæ¼/ec#/ÁÇß÷Çœ—ࣵî$ä«x’‰&î¿9Áj \Óäí+‹p²Ö×Û°Ì ¶>yãH–—|dÒ˜µΫþÜs‚OËtM¢åîøxèÂQ‡cÞúi­IhÉg…4R“´ž˜‚q{ßs‚Ï ''!™ŽBC¢Ég‚¨óçA=“#ˆ,*ý;N³ÇxQç-Â×è!ÀžW©¾ýÙ’N¸Ã¯+WW(W;üºrµÃ¯+WW(W;|ÖG"¿Nôx-T;üº‚q…‚±Ã¯+;üº‚q…‚ñŽ –óÙƒ³¤™ìðëB8ÄB¸¿.„ëðëB8ÄB¸ç}Œ4` ìËn¤BÅ>7ÁÆ&ðÏm¤ºæ½úñ¼õu¬ÂÖ×IëÌã¼dIë‘~±êŽÇ\-‹¦ìý~={‡+>·Ñ”½qÍç6š²÷w¸âsMÙû;üz âŠ@‘¿(‚¸"P¤Ã2ÉhÊÞßኽÁOS TŒ´ìh-*&1e4¥Éïðëiò;\aäESš|Ä5F^4¥Éïp…‘MiòW„©tøõ0Äa*®PGSšüW(€ãYšü4• ÆÈL˜*³A,)è;üz úWì ¢)=âš½A4¥ ïpÅÞ šRÐwøõ ÄA2~=HqEL‡+äðÑ”‚¾Ãrøx–‚>M…º11—þžœñþ¾\¤ÓÝ^_ÆD, Fhb¤&êãéž°NŽÚâˇúµì~4Â2’$/êã6~XݯÒòïT•–Û$ÈMŠC„'þß&‰iz«;ÎÎ 7þ´ó{vߤ8ƒxâ¯Î¯¬ó+Ç7æ¬l¢ÎoGëk¾¤)Ðç~ ?@IûáQZXˆ‰Kæ‰?ãLFÚÞï(—ŸQëóãôX…Cñ?½Å#f$—û’ùùÆÏŽ?óÂÜ;q÷Œååù}Òçý|ãÿÝ3Œ…9àL_¿EÖù]¯@FŸgþ?ßø«ó×ya.gïEߎ֯{úÜë¾/Ë þxýšB—V^Ënb!TÚÍÿÎðG!g¢ÌwA„³°—%¸w÷U‚†/Á# jˆ¢¡‹lè¢hè"º˜Dxc¡4¢{O,”&‰\bÁ,Iôàë| ]fC—EÏ, é+Âgˆ6t¥ˆpvïUÔze­×(ÂÙƒk¢Ö{ãšhÖiT°ï¥rþ)+ôkpèǦëñv,¨,û|¾ñÇ‚º±U„G†g î™BÛW ¼LZECÙÐEÑÐE6t1‰p¦O¢{OL™ŸD.± †$zp‰u>‹†.³¡ËE„³x²Hð†®ˆ\aCWš¯lÒVÑÐUÖzµÞXëMôÊ4öÊ4É´ùÖ°K,_ª8”ùÅàe%Ûx.“í'~7ÛIôÿãʉ>&TpP‚è÷ ÛMŽ×žøëWv‹«Ï×·U…Ë¢èÞ·£óë<Ÿ›€gÅÜLÿÎ;ŸNð‡?‰*jódn¾<—13gXž9ÃJ¢Î°$êüî £‚Ü<™u/—æ£ó+ë<Ÿu‰Ù_{¢úyç·£õµN§ÍÓªæ¾ÙŸûc_>ný‰ÏœaÓÝø¿ /e9 ³ãÊ0{Äaö>3ŸG¦ÃÔ’^4À»»]Q†í…¿X”}ˆ+ž×<#®„{ÚóoÑtä·cèDY’F¸2vpMì(âŠ0¼J ܱ£µñ¡k[¡6VÌØ7Q#‚ri¥6hrØ\ÓF$®ì¶°ävn®¶œàS¥¢ãY¡_¸¶ âŠZ0~½ à3mW[h ¼"àSÕ–ãùy_¸Z¸Fƒ¸Bsà³Ø”ÆNä~S °éÌ¿-¦3ÿ¶˜ÎüÛ"I×<[Ý1y’ÀvžÀò#%ÜÏ7®-†¸¢LX‡_/Öá×Ë„!®(Öá×Ë„!®(Öá×Ë„!®(ÖášOƒ·}¼íÓàOÊ„}¥AüxeØ7#Ë^ØÓoÆGÃAëÚ2Tˆ+ÊPuøõ2T~½ âŠ2T~½ âŠ2T~½ âŠ2T~½ âŠ2T®p}ã_):?ÞŒÓÆó÷ÒRóqEÍ£¿^ó¨Ã¯×Û¿—‘¸G¸]ãR÷¶‡Ûå¨ð¶wQÏÈ<ÀñÛE8Æeöñ°ueš×Mi^[4¥ymÑ”æµESš×Mi^[4¥ymÑ”æµESš×MþçMþç%þç™ÿù¾Ö{ž—¨ð?·weÊÈÎFâ·czŒË¬èaëÊ<­-šò´¶hÊÓÚ¢)Ok‹¦<­-šò´¶hÊÓÚ¢)Ok‹¦c‹MÇ-šŽ-Z$ö±;2yL_Øíxã6öÆm\f^ÿŒpe¢ÕM‰V[4%ZmÑ”hµES¢ÕM‰V[4%ZmÑ”hµES¢ÕM‡e-šËZ4–5’Y)ü–ÃÑÄ3¸´½¼BÒGi¯ô@)#ô¿?ðLˆgQ¶„aëJm0àm0â m0àm0â m0àm0â mp#Ùÿ#ž¨Í&í.K³ð•3é1iW6i×yë¯I+r0[ךF¶ö͖¾ÙRØ7[ ûfKaßl)ì/ñE“v;fÝÆfÝ&Á³(&üg„+U¿€kT¿ˆ+T¿€kT¿ˆ+T¿€kT¿ˆ+T¿>±êâXX[zÏͺPõç dÔ¢B:~>üÂï}lß:Éýô3¾·>ìÔÅQ¥bÝâvôqc}œ °@ŠScøáíżÿæŸ?nŒ½ðÿî0+VµLŒ±Ï /§¸Îˆ¸ÂØá×ýˆˆ+üˆ~݈¸ÂØá×ýˆˆ+üˆ~ÝøÄ`¼ÿŠ©õv?âüÅÚËE)t¬/üõb­ìÅZç­¿ÞQò¨aë#‡õÑ ñ\.jýË*¥†èg­—&Á+k½ŠZ¯¬õ*j½±Ö›áÌÜ$#?±J«s,ÙBŒ¢7c;¦öƦö&Á3ÃË)®s™!®p™uøu—â —Y‡_w™uøu—â —Y‡_w™!®p™uøu—Yu‘¹Ìªß_™È_™óÔ®a™Xi¦£ˆ+Œvøõ£ˆ+Œvøõ£ˆ+Œvøõ£ˆ+Œvøõ£;þeÃÿÀJË÷XˆOLÁÈürɉތSÕbX&f–)K&âŠ,™ˆ+²dvøõ,™ˆ+²dvøõ ÄA~=Hp’%ó˼N›/óúãWÌ{W’hj[2:"®ÈèØá×3:"®ÈèØá×3:"®ÈèØá×£;WDwtøõèÀIFÇ/óúg„™×?̼îñzš²òb|Š0ª j35ªÍÔ¨6S£ÚLj35ªÍÔ¨6S£þ£…Ĉ¨ÌW’hÖÙŒˆjÑï#®Ðïwøuý>â ý~‡_×ï#®ÐïWZ9T¤ßßñ“ÏxeîŽâE“Ëö!­¶iµ}H«íCZmÒjûVÛ‡´ >¤y›O›ÓïecßËtx™Ÿ\íìøf–ô…OièÁÌŸ|iØ{­¢[ÃóŽm’¼uÞä öžžCns|¯ ?ºgjä;< õ¸ÿн?-‰ú¸Þ†!ÿØÇuÒÇõèãÊa¯‰—õq;á+Ó€²7’osü‘®š=¬%OV~å±ö³%Ñgš̉ú¸î}\Y'ë)7zö‘?¬ÌòÄìÅdç}ÜŽFøÃª4EÈÑ·šŽb¿±\/lþ•ŠÇ©{ÿþ@s¿!®¨‹Ž¸¢.z‡_¯‹Ž¸¢.:⊺èˆ+ê¢WR¥ùþŽ· š6{f³r½.ú t>°Âæ‘»W”UG\QVqEYõJ*TcÆ|ä·ãÛØÐm¼ó–ªìˆ+ª²wøõªìˆ+ª²#®¨Êޏ¢*{ žM†Ýcü >Øh€yΫ‚¼ðÿî¿V‡8[.‚g§G{"Äyç×ñ;¿N:/ÈÈUƒgîžÿÞÇí!Åã ì;÷ï0¯ž^÷ÊñÎ%…>0‹æ¿Ã¯kþ÷Ο̡@smEÑí&[R½B°Ì;üºÀ|ïüÉ 4YVIz¸Bz$ÅYj\¨Ý¾;)âr‚«=Èq¡yµ~$…gÙͶÐáÌÅè¢gaÞIpÏü£A„Z2p‘à‘ ] ]dCEC§È킸"·K‡_ÏíÒá×s» ®ÈíÒá×s» ®ÈíÒá×s»tøõÜ.ˆ+r»tøõÜ.ˆ+r»tøõÜ.;þç×óì|šK  O"\q:ÎÊÓßMÁýCÊ ÄW(O1qåÅ·º×§«ÚÿÀ•ÍïÖç¶B¤â`WE·¸}ÜX',úØö±ß âÝs‚«¥ý1ªÔ?¬*5Å™6?y žX8åWò1Îäí“ÀÄ€k × ®,\X€¸"°pM`âŠÀ‚ÿÞH•Àìã {aÉ7ãÆ¾W, ®8¢ŠÁR¶¨Ã¯—-B\Q¶¨Ã¯—-êðëe‹W”-êðë̈+˜;üz3âŠæ¿ÀŒ¸"€¹Ã¯0>s °ºÐåÈQyÍåzÔ…®Nc$KR…¿žTqER…¿žTqÏ q…ÏëýàN>9¤JM=êÍg‡íåO¶—?Ù^þd{ù“íåO¶—?Yj–Õ˜™¿<[´|‚OÌ“ºP/|PðöÆ ÞÞ¼,ýyt"œ¥?A„³0³˜D8S_'ѽ'¦¾NY„3õu=8M„àš½˜M²ù˜M²ù˜M²ù˜M²ù˜M²ù˜M²ù˜M²ù7þWòl˜!çïÚ‡c‰0z¬uÛ|±z­u[ë8^Ùaä²kç"|ƺkç˜Ô6M¤¶O|P{ú£¦;²ÛMûHjD÷¿¢1XG€Rä1>qÁZÛò—É–ÿDµ|÷Ú'A™Zç$º*CÀõ´óëÞyf—ÉS|EW-ŸºÎóÏ-‰®*èl™u~;ZßXëôHŽºzvÕUâGÕ鈛rä¹ÇÉsOŽÄÜXŒÁàã"_1O/Y‚«ü}Å0¼6‚·"ÁÇ»æX&…òjr´Pžì¹ïÇÿÌñ'¯Lr$HàÆ‚n/ye#/ÁÛ0ò1t+ï<³ËtèˆÊÿÆTþ KƾTþO›ó|lè|©ü>V]}©ü>–M=_ë"[ëŽ ÂÄsѤódyŽ•lY´’-‹V²eÑJ¶,Ziœàê>ò¾‰FþÜ}61³R4¥wHÑ”Þ!ESz‡Mé),s; ¼ÍGÞ¤²LѤ²LѤ²LѤ²|žaŒ†.í>ßTns|pØ%‹yâ¿ôM”ß÷σCžNÉѧì°=§·¸Ž½×²ãÿ'>pGÝDzª7>?é~º2Oñç7Šnqo#o¢ƒØ7>Wa$'ì~—c¦ñ^Úã„›i~~–^Ѫ¾’”¿?ð”wëó£DcZ µé-îª_6Óü$H-½ÂB·x]z—*µøœ¨óÛÑúÆx2;$zÞ¼Ðû«œ—|š M’¨<ñg<ühµ:ÉIäQ€: ÓΟf H“È£'þêüÊ:¿òÖY…„#Åá´óG*Ñ s’cà¹s~à÷¹™¹Fç‰?ÞŸ¢øJ=ñWt‰mt$уK¬òB=¸Ä:ŸEC—ÙÐeQçõËWÔ/ëðëõËWÔ/ëðëõË×Ä2#®ˆe~/VsS#§•Y|I´"®ûЍ0jó!Ìt,²ÅñØÀ=“…ú*Á×à‘HD'ÂY€D "\„¸"(pMP⊠ ÄAA€k‚‚×!® \„¸"(pMP⊠ WåD³DÑZw„­³àÇ#[÷,©¯<0–Ì|iG¥¢Âå4þʉ/­Ø"PŠ-¥Ø"PŠ-¥Ø"PŠ-¥Ø"PŠ-¥Ø"PŠ-¥Ø"PŠ-¥Ø"PŠ-¥Ø"PÊ;+î2SÜ’׃ldº¨œßÛ_oóÖÕAÅÄQlAÅÄQlAÅÄQlAÅÄQlAÅÄQlAÅÄQlAÅÄQN‚8žËÅÊ_Xf'-E´\˜â Š-¢Øâ Š-¢Øâ Š-¢Øâ Š-¢Øâ Š-¢Øâ Š-¢Øâ Š-¢Øâ ÊIÄs¹à[–Ê6ǰ\p‰B9¯9Öf[–j Ù\²¸jÃTm¦jÛ0UÛ†©Ú6LÕ¶aª¶ Sµm˜l•Ò]±Uº+¶JwÅV鮨*Ý[¥»Â$c‹ Û0å*ZÒNEÃm¶aª¦˜{À51÷€«¶kÕ¶]«¶íZµmתm»VmÛµjÛ®UÛv­Ú¶kÕ¶]«¶íZµmתm»Vm۵ʷkø«9q¼hM2ÅÆ®‰\µ'¬¶=aµí «mOXm{ÂjÛVÛž°Úö„¶ê›ÅV}³Øªo[õÍb«¾YlÕ7‹­úf™Wߘö& én‡Ç™G—=¦;'vŒ5)ìW^1Ý9‘Ó¿?L ÜFå?LQþ3êü\*XKy”¥™ŽÐÿ’˜O~’‹¼¼Ç#´²Zç­dë?L¶þ3êü\`TKy‡œŽÐvÜâÆnq;Á¿µñ?LÿóŸé ª§Ñ7{pbõ'øÔuâ'!ðO\½‘\³‘C\±‘«žHmoGpÕtèN·h~EþÄÕö&à{q…½yà3{³z¾Šh€M_?À5_?Ä_¿ŸEiÖHßÞý#Wy€k=›3sÃLRH ž^%xažËD8[;¾|SC¼²Ö«¨õʼwµHðÆZo“¥'²€ÂÒDÏ}¥»yºã•m´ ^XëEÔza>Š*j]_mñðu¿bÕ–*z¼¦ÂJˆ+ +®)¬„¸¢°âŠÂJÕò_m!ÿuòüªñ*ØûËßøáx;OP= ˜nÙ´r!îE‘ýŸYf-Ó ¨*¡sËloݲi‰\“2qEÊŒ–ÏóûL‡Îô®Éyøõœmqìy'¹ÿæ6Çb=šø…£~o,Ðwˆ»HðÈb£á,03FžÞ$xb÷ž‚Ï /"œ=¸$ê|fC—EC—Yçs•à……ÑÐQ[D÷^YëUÔze¡ÐUôàk½‰Þ¸Æf]“ŒüwÔï¹÷®-ŽfH¢Åj÷Þùë¾/|{c1¸C<ÐXÙE‚Gè½gÁ®1ŠðÄð&Á»÷DxfxáìÁ%Qç3º,j=³Ö‹è¹+J&uøõ’Iˆ+J&uøõ’Iˆ+J&uøõ’Iûr1õ—·ÅÑð¦,Z“H!èVú‡àÆ´.<²€ÜèE8‹¬ŒQ„'†7 žØ½§ Â3Ëg.‰:ŸÙÐeÑÐeš«/,,´ˆ†®°WDCWX4qMÚʆ®ŠZ¯¬õ&j½±W¦‰^™F¦Í$qÜ ?9àj‹g›ºèö5ÉŸàó¼§~²©ó$EÔ¥ˆº\!-F\!-F\!-îðëÒâ¿.-îðëÒbÄÒâ¿.-îðëÒbÄÒâ¿.-F\!-îðëÒbÄÒâ¿~"¸âDºÃ¯ŸHïxöË2ÜçÏ?w ÁážáQ„'†gÎîÝMvãžm§÷º?óÏÄy’f?ÙN{’7ëÆòfÝ®k#®k#®kwøu¹v‡_—kwøu¹6â ¹v‡_—kwøu¹6â ¹6â ¹v‡_—k#®kwøuù â ùL‡_—ÏÎJ¤ý}Ö³Õ&Ö|Á¥r‘àÎ1Ü‹ðÈð$Â3ÃE÷îêäWÌ‘d›’YìÆ2‹1\!”G\!”G\!”ïðëBù¿.”ïðëByÄBù¿.”ïðëByÄBù¿.”G\!”ïðëByÄBù¿.D\!ìðëRAÀY¹¿¯Á6_ë^_ƒ} $¸s ÷"<2<‰ðÌpѽ»‰‡0²ŒXñÐDþ5ˆ6RüG]=Ô»3ÄõÂ,<² mô"œíÆcá‰áM‚'vï)ˆp¦oME„³—DWˆs;üº8q…8·Ã¯‹sWˆs;üº8q…ĭïKÜÿvõHœ8ÑæÄ‰6'N´9q¢Í‰Yмw¢…ÚæÄ‰+u¶PÿÊÔ²HðÈœ8Ñ‹pæÈˆQ„'†7 žØ½§ Â3Ëg.‰:¯PÓwøu5=â 5}‡_WÓ#®PÓwøu©,â ©l‡_—Êî¸Ömn”hs£D›%ŠÜ(‘% 2Ãy£îêáâz" ™%zÎöÃ1Šp›OìÞSá™áE„³—DWįtøõøÄñ+~=~¥Ã¯Ç¯ ®ˆ_éðëò}Äòý×È÷£Í‘mŽŒhsdD›##ЉF‡œ‰¯ÇÉàŽÓéÄ66UB"‡Ût_Äp·Ü9îE8»w'ºwÇîÝÕS\’l±!É’l±!É’l±!É’l±!É’l±!É’l±!É’l±!É’ŒÛ2®õvÿ“-ç¶tl;„žH/ oÜ-+[ÎE¸gxáìÞèÞ»wWOqmôL²EÏ$[ôL²EÏ$[ôL²EÏ$[ôL²EÏ$[ôL²EÏ$[ôL²EÏ$[ôL²EÏ$[ôLbùB-ÔÇÆ&±Þ‰*ðÂð&Áݲ±•V„{†GÎî݉îݱ{wõ׆%[HQ²…%[HQ²…%[HQ²…%[HQ²…%[HQ²…%[HQ²…%[HQ²…%[HQfõä—âÎ|¡Î6¥G¶…ëd[¸N¶…ëd[¸N¶…ëd[¸N¶…ëd[¸N¶…ëd[¸N¶…ëd[¸N¶…ëd[¸N¶…ëd[¸N¶I5²Mª‘mRl“jd–Á.7ÑJk“jd[ÄK¶E¼d[ÄK¶E¼d[ÄK¶E¼d[ÄK¶E¼d[ÄK¶E¼d[ÄK¶E¼d[ÄK¶E¼d[ÄK>x™i-²Mk‘mZ‹lÓZd‘Ö‚'nó¢Õ4’mA#Ù4’mA#Ù4’mA#Ù4’mA#Ù4’mA#Ù4’mA#Ù4’mA#Ù4’mA#ùüá´-|A-6±DùG5T1Æ ,Ü1 ºó"<2<‰pvïNtﮊBV†#¯•+›\¡Øä Å&W(6¹B±ÉŠM®Plr…b“+›\¡Øä Å&W(6¹BÉ ‹ÎpY´ Úä e¥ª*DãM´a¸£û/Â#Óg÷îD÷îª(´d8òZÁ@± ŠM0Pl‚b ›` ØÅ&(6Á@± ŠM0Pl‚b 8áEKåFuT 0Æ›hoÀpG·^„G†'Îî݉îÝUQÔÇÏ×ÙÛ‘}±ÙÛ‘}±ÙÛ‘}±ÙÛ‘}±ÙÛ‘}±ÙÛ‘}±ÙÓ‘½óçÉOÕãlù=-ˤ³e™t¶,“ΖeÒÙ²L:[–IgË2élY&-ˤ³e™t¶,“ΖeÒÙò<:[žGgËóèüyŠ€éra:wv¶lƒÎ–mÐÙ² :[¶AgË6èlÙ-Û ³et¶lƒÎ–mÐÙ² :A¶ÁÉᩳåûs¶|N”ïÏùó@õéª`:@t¶¬sΖuÎÙ²Î9[Ö9gË:çlYçœ-뜳es¶¬sΖuÎÙ²Î9AÖ¹É  ³å}s¶¼oN”÷Í‘¼o $ާ¯p¶¼oΖ¼ÌÙ’—9[ò2gK^ælÉËœ-y™³%/s¶äeΖ¼ÌÙ’—9[ò2'H^6ÛØÒ‡9[ú0GÒ‡åߨDï»mo`Ëål9°œ-–³åÀr¶XΖËÙr`9[,gËål9°œ-–³e¡r¶,TN”…Ê‘,Tù·Ê^kS*%gK¥äl©”œ-•’³¥Rr¶TJΖJÉÙR)9[*%gK¥äl©”œ-•’³%3r¶dFN”ÌÈ“ýÐç9TíΓ}˜žƒÖÕ;À5;Ä;Ä;ć{ƒœ—…Kvüþ«‰)H’›Äß"{¼§j¡œ'ÆX2É}×È}WÈ}WÈ}šÇ»žÝßãüj#{ëÅ‹¯I¢¸F¢€¸B¢€¸B¢€øpm<Ÿm>ò¯çÕٱj;Œ&Nâl‘ÐÎëlñ¸Îëlñ¸Îëlñ¸Îëlñ¸Îëlñ¸Îël±.³“IøàÍÞ8›÷Á—élq™Î—élq™Î—élq™Î—élq™Î—é$q™“ý¿-2Ò‰"#]f‡{µŠ^,Ûñš->ÏÙâóœ->ÏÙâóœ->ÏÙâóœ->ÏÙâóœ->ÏIâó&;p[„œEȹÂvàmòóÅâ*eg‹sÅ”ÐqEB_Ä }W$ôu¶@+g ´r¶@+g ´r¶@+g ´r¶@+g ´r¢@+W˜ëDø^š­\1efE\‘™qEfVÄ™Y-^ÇÙâuœ-^ÇÙâuœ-^ÇÙâuœ-^ÇÙâu‰×‰P/vúÆ™Rl"®H±‰¸"Å&⊛ÎöálaÎöálaÎöálaÎöálaÎöáiØÇ²¿qž+6½-ìÃÛ‚¼-øÀÛ‚¼-øÀÛ‚¼-øÀû_š÷,3~©¢Ùaò¥yo’£ ®£®‘£ ®£®‘£ ®£x‘ÚÛ{–Ž»ÉÖ“SÄÛ4ÇÞ¦9ö6ͱ·i޽Msì%šcþ±÷}3ò®ò÷?÷`òWÛ³ûÀNrÍMÓžý‰«7݈+6݈+6Ýo|´»¥Ú!þµ»¥Ú1ÎZ¯¢Ök½9β›´*Àg»[èJÍMÓöqÅöqÅöô+wxˆ+vx€kvxˆ+vx€kvxˆkvx‘ž.„}ÖqÙ®·EßøhÛ¢EÛ-Ú¶hѶE‹¶-ZmÑH°E€SÙéãµmÑl’o“ü{›äßÛ$ÿÞ&ù÷"ѽÌ#ºDÑã5i·½M»ímÚmoÓn{›vÛ‹ÔÓ>ѽÐñúqý¥·•‚õ6ý²·é—}:O:ÛØ*Kz[eIo«,éE•%}b»‘$›¶ÝˆMþìmògŸÎ³ÎöɶH¶ý@²í’h?¶S¥âtv˜ÔÓÞ¦žöé<Á[ ÛüÞdž7µµ‡xcçM͉p–à­U>3¼Ÿ5¢•üïîŽ>Þ'~Ç݇,çxùK埆'þßý7ß1$Ü-ÿìGë̬,YÔùuïüÊ:¿N:¿_Ç_gßN…ÓÎoGëÛ¸õmÒ:­ßv“-¦üoè–Ea<ñÿîðÇs¿‰_G[îh«Ómuº£­Nw´Õ鎶:ÝÑV§;Ú¬©h³¦¢ÍšŠ"k*Ò:ÝG^鋵î/–šzâ¯K”W`„k G[Åäh«˜m“£­br´UL޶ŠÉÑV19Ú*&G[ÅäH+&§$ze¶c΋bö­«áF[íÚh«]mµk£­vm´Õ®¶ÚµÑV»6Új×F[íÚh«]›–±ùæ~Ãþ•I }ežøÔ_î&þò'®.>‹¸¢ø,âŠâ³ˆ+²ø®É⋸"ØqE°+àš`WÄÁ®€k„tˆ+Ni×œÒ ®8¥\sJƒ¸â”æ;?Üg?ÿÀ·,i×o½Á>{ºÚœ߸ÉñÍW`E\Q€qEVÄI€×$F\苸"ÐpM /àš@_ľ€k}Wú® ôE\è{à$Ð÷±Ž¬g/ìcQ™üj#‹J–™0¦"¤ˆ+Š"®(BЏ"‡0àšˆ+‚œW9® rF\ä ¸FÏ‹¸BÏ ¸FÏ‹¸BÏ ¸FÏ‹¸BÏ{àDÏûXT¶ùrñZTø¯skyÂW¯¥]õ5níôRÆeY†›8ðwã#ï5uXñÆËA‚gæ›ÍY„3§ú—ÃzˆæT/E„³{¯¢Ö+k½FÎ\µþ彦ë1NF~æ°N:¬«è•Y÷WFá°N/Qêã•YÙ+³Î[û¥©+zŒ3·i<³Ö³¨õÂŽÿ‹¨u:Ù¤ÐÉ&…N6)t²I¡“H ÆRèGd™èÍØŽ©½±©½á#÷3õ8qæÞÌA‚çÈð"™W¼,¼0×nI"œ ]i¼2¯x F5¸F5‚¸B5ràS÷sýGDAîØ»UþfÔ3÷³[&ª‘'®Îz¸"ëýO=n•‰ê}Åt„Î\f÷š|U«Is ¸FsŒ¸Bsü\ÔFªçDCgÒó®Ñó"®ÐóæHe9û‹•¹’:ïqKVì_òKÌ¿d.Ë™Øð9šløM6|Ž&>G“ Ÿ£É†ÏÑdÃçq|Eg©L§ÍºO… Ÿ_AK梓‰ð"G“ð"G“ð"G“ð"G“ð"G“ð"G“ð"G&¼8jM§ÍvÒû:v`:Iš8û”Mðg5©¼“àž”¨@b‘à‘ ] ]dCECÛ×TBC\Q qE%4À5•ÐWTB\S qE%4À5•ÐWTB\³'D\±'Ua,“"9FÞÐã¶L E¼[ŸÇDäL΄â¯è·ã›±±oÆ&Á™=3É]€8+þä÷ì`3ˆð@´ ÙÐEÑÐE6tQ4t‘ŠM‚kªv!®¨Ú…¸¢jàšª]ˆ+ªv®©Ú…¸¢jâŠÈoÀ5‘߈+€‡É-ŽË6ÞM#º£ðbU¥œnÒDÄQŠ)×à*7q±¹‰‹ÍM\lnâbs››¸ØÜÄÅæ&.67q±¹‰‹ÍMüÂÓôÈ¿bèàùËì½<Ýá¥Éa~)¦¬€«¼ÌÅæe.6/s±y™‹ÍË\l{ëbÛ[ÛÞºØöÖŶ·.'^æ4¦ N¢¹pï6{ãL!û€«œÔÅæ¤.6'u±9©‹ÍI]lNêbsR›“ºØœÔÅæ¤.6'u9qR§øàÀk`Nê¼{1+Ÿ¬G0> fqÜö¬øPoGfãië{\3‰pëIë÷¡sÃäÀÏ?ð#±wëóÝSeª¿.Šnq;ú¸±>Nïv;O4\+S‘ûý¤¢Öüo´©=à>jü|ãÿÝáeŠ‘ÿþÀÍ`ÄG¦à½í™‘WI`ú]’èÞ×ýÞWvï“)ø Ã{ÜûÊî}·þº÷•Ý;ŸÁ$Š/ÁÎ~zïÛÑùu~“à£Oγó|j7¶k†IÛxçÛ^0Ã)ÂðžøÀ .Ç3qîY(š¯<0ˆpvïþìÞO¿,Ž%?_šhr­ãN®É—å•ÖÉÆÂt“kàέlr‰ðÈð$Â3ëo+›\ܳ{÷A„§«RÎ?œåñN4m¶ã¹oì¹óuóÀÛØsá‘áI„g†WÞ6öÜ%¸g÷îƒg÷îÏîýô‹EÏÇ|ÝgG8Áõ_¬@637¶™¹1¼0¼Ip·Ü9îE8»w'ºwÇîÝÕS\û±¶}°}ìƒíclû`ûØö‡ âì³}ÆÙ ÞØñÆðÂð&Áݲ²7N„{†GÎî݉îݱ{wõ×Z@Áf›lP°Y@[@ø+väï¼èÅ"{ëÛ[S¼0¼Ip·lìÍážáQ„³{w¢{wìÞ]=ŵ6b°ÙˆÁf#›l6b°Ùˆ‘±nÇ–2òW&Ú\Ù‘Ø 7fƒÜžDxfxáà~‘àžÝ»"œÝ»?¿÷‘³Ÿú÷‡øØxÌsãðÈð$Â3ËŸ˜˜‘YiÙ‰Þ ›?[áÆl…Ã#ÓÏ ¯"¼­ìÍàžÝ»"<‰,ÔáÈk0¢í#ÚŽ0¢í#2OQ ¢9O>ã7ö§xdxá™áU„·MZ îÙ½û ÂÙ½ûó{ßЛ!>¶¿òÜþ<2<‰ðÌð"Â'VZb†N9–óħv²¹¹’ÍO•l~ªdóS%›Ÿ*ÙüTéõ'QÒgGb®Ip¿0WááQ„OÌ¡DëDÑÔ¶ù“’Í!”l¡ds%›C(ÙBi¥Žê«ãì@Î5 îæ’q"<0|â«IÌÔHA4imΖds¶$›³%Ùœ-ÉælIuŠP?ÈgÇ®Ip¿0…ááQ„O ’ÌŽÄâ± f>7³Í)’mn‰lsKd›["ÛÜÙæWÈ6¿B¶ù²È¯YLÞ"›\6¿B¶íì³mgŸm;û|¾³Ÿmͳmkžm[ólÛšgz¶QEÓÆ¶9ζÍq¶m޳msœm»ÛlÛÝfÛî6‹v·ã 7?é×'_…ÏŽrº»ý´>ÞÄÒ}ëŸäù)@ùG7±tß:Æ3ËÆ‹–À¢¸×–i°wË¿IôàN÷naƒÖÇ[4º+âc'už;© O"<3¼ˆðaØãÁñõx\IãþÜŠìÛè6…îL†øØÓšçžÖ²Ñm Ý™ŒñÌð"‡1:‘çk]¥ž¼ã•©|ä«Í:¯ÿ¨Níî!îf;Ex­´Ã{ך×Õf^W‘y]Ù±]¨¢Ùa3¯ëJ­hj8q¿0û؉ðÀðtŠkíãj³«Í>®´ˆb=÷šÁÔòâ~aªááQ„'Ñ×àg„k Üj3p«ÈÀmÔ%s¼Ö?Þf;¾i6 µÙ,Ôf³PÛ‰…z¢•m6­l³ieó–¸ zî¶³f3p›ÍÀm6·¸'ŠÍfSl6‘b³1¯Fð¢Çk3ƒ›Í n63¸˜Á'ºÁfÓ 6“nйó¨ÇcŠœ-ÎÑ9ӂЏbAE¼Š\äÃÎ+WDçΣ¦#oZ3-iˆ+–4Ä«È<ìü|Mrî\E>`Ó¢‚¸bQA¼Š<­?#\»*xæ† »ÈÆy>t{"õo£lkî^É…¿ÚÖ͉ZÅ&Á‘bÚÇMpïÊ¿S±Ÿã‡e®ØV˜bÒ/#®Ð/¿qív¯PX m*&},â }ì?YÆ õ!UљĘˆ+Ęo\¹áòŽ­‚G&BÏ÷ªÞæ†ñGþŠVMu¢>šf°Ÿ¸ ðW,Qk”õqn‚9Њ‡f ð¬îá¼"DXøÃ ‹)âŠ4Zˆ+âUWÄ«®Y©W¬Ôo<,¤>ã߸1‡xbxáeò+æËA47O¿aYoóÖÕ‰¬W$²B\"ÜpÍ7ñá7ò1ëÖ³‘LÁ•L®$ÂËäWÌqz|ˆ§“Ë”1 qEÆ(ÄA±ˆ+‚b×!ˆ+Œ7þ˜C[¹¶ùsÍ!†gÎå z}ë±rq÷Pؽ¾O™ YÛolm¿1<1<‹ð¾ª“OƒÍilNã`s‡ ñqêY4;ÖñçKf|†°Ž×ànv¬óÖk0âåW&s¶dÎÁ–Ì9ˆ’9ê>dyÓÇKÖ·[ß(žžExa_–Éòhs-›k9Ø\Ë!Hü;¡PýÎñöòSûPlk{á«+þŠ‰ÃŽè”im+LY%+A¡ú$ê#Ÿ¨ð«Ê>Äi—Xîn Õ¶½µ=‡³ ç“íSeŸ™£èÒôÞmÛ'[Hï?1â+[j]Ý¢Iã΢WçFb\˜Ÿ,íÏ'òHÆyu×äÕA\±3A|xïG²ÍGþõ|ø¯hýÍCÚ¹Ÿ+†S#<¦Éºþ—¼E~|‰6Aèà´ó§¦`L“U!7ãÆÞŒÖ·ÛYÒÌiç·ñ$èZç“+³Xù#³MäW1Û¾—ÙöÅʶ/V|±&ߢÌfÝ᎚í[”m_ƒlûäU²èg6µ«l„lËn¶-»Y°ìNTl!¢1rh,§ ê,n,ÿ$ëfa3øˆY›öñtÝœ¥}e•,ij|ïdõq“¬‚áõ‘«³â®r Eã‚z©ÜB!_¿¿?Lž"àQ¤|¶®,bm‰Ù¢-1[lLU“èÁíg#EãzIÿnen·þzp"Yаuåñi´eV‹¢Ìj±1aÎ!PŸ>Ÿíà ð&Á£HYó3•%U£-5Z´¥FK M§±¿‰;åÓbªËžS]ö´˜ê²§Å´¤¥Å´¤¥Å´¤¥×QÐÜû¨œÒÑã5O‹©xZLº‘´˜¾´˜¾´ð…Oà˜NTªd數FuZL5ªÓbªQÓ‚šÓ‚šズ üÏÉ3ÂaR'‚Ï5 …[’éðÁ.Ì<)ð¸FÁ¸BÁ¸BÁ¸BÁ¸FÁ¸BÁÿ~î_‹þÇã¥"/š\ç"²ž´þš\+›\ë¼uµq…q…q…pñÁ¹Ãà“óñਰƉ¦ÍqÊœç“"‡€kÄõˆ+Äõˆ+Äõˆ+Äõ€kÄõˆ+ÄõO|ðÅêgG`¾#0'qÿs &ßG ¶B°m‚m£l…`Û(ÑF!0õèq >}¼&I ¶‚M`žlód˜§`Û(¶QXªèÁÙ,ý`³ôƒÍÒ6K?Ø,ý ²ô#³ôŠ'¸ÞÒ&©àšƒ·dKœÎÒ9¼‡÷þåðþøYø~~«èùØŒåhÒz®9ÝK¶dÅoüË}ýχ«Sd+בu:ò&±àšSÃdK•œÎR%y¬Fø—ǺÿU¢ÇUÇ>§}IÉf²¥ôTŠD}ãZ£)ÙŒ¦DW…$:›9”Vz.D‚¾q­A’$G6‰åcþ9\§#´Ñ“zók¿üÉöåÏô›~|3¸`!eÛ7ÝV3=Ùj¦'[Íô7~òQÎ̃U‚h€me[Ýðd«žÎꆟ|U3óâÀWu6t6O†­vv²ÕÎ~ã'ŸÅBÓß9—Фbû,–’¯«´ {§}´}Ê*ùÌj¿Éú¸ ú¼œoŸ2?Ë‹i©ÍË?z AÏ0ƸBç¸bó¸fó†¸bó†8ݼqeÀmñ¼œïê¦ÓÆôÉËJ*èéÄWÄ ®ØS®ÙS"®ØS¾ñ/­ÔÓJý0ˆ:ÃÏÜÉñÏýWÌÞôMôf¬û›ÁŠÿð¼/ü9µ‡ç7y–¢Ã+Ûw ÁyŒv‡{†GÞîE­£¤s^„'†‹F޳·E‚Çp/ÂÃ哳;¾i°æs~;&íÆ&íä[tà•áM‚»ec“V„{†GÎî݉îݱ{w¢{;ÿ/ƒ O"¼0\ÔùÀ\=¸À\Ý{ˆ—ÃæÝBs–²¿2áÿû´¤1 ^Bˆ–HÌߨç²Ã#Ó—~fßøÈJ£†Ùg& ÏÓáÌötU„3 ˆg€AÜ3ÛÓGž.ùÀF>ˆ:XçCá³[dï=yèüÅZ÷Kc½$(ke/Ö:oýõb1<‰ðq]Ñ]÷Œ> ú2Ì(ÎŒG^7¼Ã+Ûùf O"œ||`¢Î‡ÀðÓwŸ™c¯ëßf^ׯÇ>þàEx`xá‰áY„†WΆ΋†n¸ixü!ˆð‰k7ÒÄ^´¤­có—´‰Ý×±{“Z¾7†·•-i|iõeùR<2¼IpÏZ÷A„³Ö}ál佨óa!xp"Ü3üôÞŸkÒÊÖ¤õdÖ=×$†{Exfxá•áM‚s’>W>ÙVQasr¢EeûéÞ€âmc«‚Çá}í (žE8»w'ºwÇîn#>>ÜþÚP<1¼ˆpÖù zp=¸ zpÝ{8½÷çš´±5i›¿2¯5‰á^„†GžžExaxálè¼hè¼gxá“CD‹å}IK|IÛC bÐ8þ“M»lÚ…dÓ.$›v!Ù´ ɦ]H6íB²i’H»X†w/››ë>75¾ódó'›ÿ8ÙüÇÉæ?N6ÿq²ù“Í,)í–ļÌ)ˆ&—ÍÓšlžÖdó´&›§5Ù<­ÉæiM6Ok²yZ“ÍÓš¡Ån¡aHé3æ\ïÍ6‡j¶9T³Í¡šmÕls¨f›C5ÛªÙæPÍ6‡j¶yD³Í#šmÑlóˆf›G4Û<¢Y䥡wΉ›G4Û\šÙæÒÌ6—f¶¹4³Í¥™m.Ílsif›K3Û|’Ùæ“Ì6Ÿd¶ù$³Í'™E>Iêe¶‚Í©˜mNÅls*f›S1ÛœŠÙæTÌ6§b¶9³Í©˜mNÅló f›W0Û¼‚ÙæÌ6¯`¶y³È+XYUpDT¾¨Ô³ ȇ7j]¿ƒ¨¶Dµí ªmQm;ˆjÛATÛ¢Úv/Ü…¹öÇì 'ûù7‰ææ™ûaiŒZ×¢ÕfˆV›!Zm†hµ¢ÕfˆV›!ú“‹[S¤qþm²Ée3‡ªÍª6s¨ÚÌ¡j3‡ªÍª6s¨ÚÌ¡j3‡^øcnòr£©Årãs³ýëÚn`¶¸|òhÌÉd}\Ç:—®«Ÿ¬Á&Òñ¢>nãsï®›çÊÑrâqwÖ8šÈà…Ï=ÀÌ-& q…†¸Â\c€!®0ÀW`€k 0ÄØ wËÀÛÿÀ¨ŽV¡ÏQ4iÏ=ŒËÌ-+5À¨Í5Æ™ƒ’gGA|œedsñÄð"ÂYçÃ"Á3+ƒáa¸j‡ïðÄÙIl“­u5­¨55ÆYÀŽ+"¼2¼IpÏìžV­Ã™ÁÈÓªu83½¨óaaVáìÁѽ‡¸‘YÇ­©þœ›üW,±ÌíwW 8žJÀÙË<ñ±Í5>,»1<2<‰ðÌð"Â+Û÷Ì\}Æ ?½w­²ÌÙ²â8[VgËŠãlYqœ-+޳eÅq4ßM½°¦|7O|¼ŸcÝžExaxáà~‘àžÝûĹälérœ-]޳¥Ëq¶t9Ζ.ÇMÒåà¯XðÂ5}3ø¾u|CñÈð$Â3˯ oܳ-¿÷"<0üôÞµ9yœ-'³åäq¶œ<Ζ“ÇÙrò8[N7ÉÉ¿ò,øÚï.gçù{éMb?çÿQuâŒq»Íköu8ó–ðL¶ˆ{æ§òQ„'†7 ælu>°Î‡ ©q?±“¼I/‡¸B/‡¸B/¸F/‡øÄ öÔ’Œ¢÷Ò¤—sÞtP¸æ qÅA!⊃BÀ5…ˆ+ _øPYFÅdc¼0¼Špì î=ÃÓ§6bÍyÓù%âŠóKÄç—€kÎ/Wœ_"®8¿\s~‰¸âüò…eWTi5Æ3˯ oÜ/LPåE8Ó¢Í Üq¨ÇOø {Œ›ãòMw걄<±þ²Í|Ë6ó-ÛÌ·l3ß²Í|Ë6ó-ÏÍ·ûc›TQp.ã$"¨é´9A…<1N²í¬,ÛÎʲí¬,ÛÎʲí¬,ÏÏʞϠ‰Ú;þÖ*zî¶/¬M0íl‚igL;›`ÚÙÓÎ&˜~ãÙA?&ÞѸÁÝÅ繋Ï;S_ïLixÏ¢¯Á°ue.YÀ5¹dWä’E|v‹dÑw{e¾ùã5å’õΔ ñ,Ú‘[W´#®h\ÐŽ¸" Ý;&X+MôÜMMÏ"‰ÂÏW:€½Íìm`os{‘ØS°Ûs¯{¾éö6°÷&½â ½à½â ½›÷ÿ¨·‘:Ç8 Yž8½?OQ8}î&£·¹ø¼ÍÅçm.>osñyo ÌD|òÉñçÉâ¦×$íB\!í\#íB\!íBœOBä¼7…È!>ù0+fümÀwW©çYÊý^1Ãigù@B¥n2k×V9ÁÛ*'xQåO*'¤ßRE¼Þ†á\Bk7p¡›ÌÞ´%à÷¶üÞ–€ßåd#O¢Yn2‹/Ø,¾`³ø‚Íâ "‹/±èŽÃéëyî)ŸlûôônÇéüWʽ-ñœ·%žó4¥ÜC5yÛ:­t§L7Ç߸vQ±eeó¶¬lžæ[˲9¿Ñ½*Ýž~ãÚE%Ù•d[T’hQ¡IÃÜ1ÀÜ5ì³)fßÛRWy[ê*oK]åij¤DCg )÷¶ o;ð“ üsAgy6B&ß»·ùÞ½Í÷î«àkÍcÂýy2Œ29¢õ•”—»±òr7†+ô}ˆ+ˆW®9 F\q@ ¸æ€qÅ1âÃW¦ÄoüïWC;éïQ„OÙÀWöÁkM4µIß«âKqEL+⊘VÄ1­€kbZ×8>«ÍñYmŽÏjs|Ö¹ãóùflóIûz36öfˆð‰¦±ãªrøµyúŒ'®‰õH¿oLú}cxí3F­«½ãì('}^4t¦àDßLz/\½ÿg]¹ßûD÷N|ú7æÓ§xí WgýŽí ÕVàøa×å|h9ç^'[óð—Ô@LÁ¿?ðI‹xbx>ÁÏJ=&m ¿^4BëX¶ˆ#´NFh=b%·Èm…wëó‚Å_†ß(ºÅíxŠ{Š“)xà‰áù?Ë[¡lÁŸàj%C°i ‚MKáBÓ{7æo²È“_G‡LoÑäÅ ¶…@ ¹ãùpÿsH&³å‰«“a®I†¸"FH¦ÓbħňO¾R‰½~%‰¯É´zâã 7–Saˆ{–öÎ{žDZœQçµçBÁv.[Tj=8Sd?àšÈ~Ä‘ýÁVÊ&ØJÙ[)›@Ï›Ž´] „ý¼)4ÍÇþuâÚ‡Q»ÇQ´oúO¢ÔH£Ö‡AÒ7=Æ+Û×ÈWÈC¦*ô zÞ4†Îë¸êñÜWöÜ×yë¯ç.ʰ3j]Ü‹¸"¸pMpo gxQöÂnÇÈolä7 žD `WLj"®ˆ\#Џ"F4”D:w_t(üÁ•S÷ÁÔt-¯¥òó¼é&3ߊÈ|+㓤ð›‹èO÷ÿSó­¬·aìÝMf”t¾É:Ob»n"uÈ?ùZs¯í1‡¸û-ؼ¶¡Ùö/Ͷi&ÉY°9}súÞÀµ5yÛΤٶí|k1ÛØ|ÆúŒlèlÆ}³÷ÍfÛ\Î10ë<ïûÈ5¼1œ¾ïfû õq~ÒKI:Æ©užExaxá­6‹לP!žØÆ†n_ø÷öçð4Á™¢ã8¥™N›ÓÅêÃê´>Î’yc‰1Çxfxá 'àš•ñÄ66|©|áßÛŸî¹Op¶78Ä£ÓçN rÝXA.ŠÓ½Aá…áU„7Q´Ã5'“ˆ'¶­ ÛüÁ 6_Ýsçx¤^ñã}ü¹GÓ‰Íd•î\#D\!D\!D\!\#D\!\#D\!Dœ¦>ä(/\[¨qE¡bĉW$^D\‘xpMâEÄ'6H¤G9^´&™NRŸøkMZÙš´Î[W‹RWˆRWˆR׈RWˆRWˆR×#NmOî›}áÚ:Lj+ê#®¨sŒ¸¢Î1àšpzÄ'j¤ç„²Uá¨sÌ4­ ?'\£çE\¡çE\¡çE\¡ç\£çE\¡çE\¡ç\£çE\¡çEœf½_¶ùœW—IF\Q&qE™dÄe’W”I\“ñÉî)±äàdãÚ…¸ÇqW–"Nt1]çé:o O ϧx SwTbI–"¡u,ßÄšØr‰è:oL×yá[ä&ØœàXuz‹D×ycºNŠ'†çS<†©“!³Ã£¸‹«"?9Žç¡ÅÅMæ¹-Qk´%j“D­ø+¶gi²:„s“yžMÙ”WdSŠTWà£èÞm_èlûBçM … øýa|òÞXNvÌB€c9v–°c27‹)ßÇWF’">Ùó–—ci¢>ÍË1‹$åÈËX^ŽÉ¾·˜Òz¼qe<#â“íS!Û'¨¶¦|¤ß,ýÆìý1eïxãʸ6Ä'Æ\%¹!ñ«Ín‹Uô•ªì+uÄ!MoÑæY«¶ÏLe€#"wÚyÛw¢J¾‰À,û§0ñ‰äO7³lþÉ›,úäÏÓ O;j«ÏrÊ'¿ Lòäiíö ê£ÉZN ñÒnå%~Jšl9ÿR Ç]?츋â¬*èäàñÂð*ÂYÖ0ï$¸g1$“äàˆ+’ƒ'[ºÄdK—˜&éoç¡•)ÐÐÊ&š´¦<ŠéHE¸°Ê˜·:àŽUÆœ¸ÕgYÃ'ŽmÀ=k}’³qEÎòdË!™l9$“-‡ä{ÚÌcbS`å,Ž ¼éÜÜÆ¾ûnrm¼ÛØwßM.Î2›Oü£ˆ³”tÿ(âìÞ½“àžÉ }á‰áE„+Ÿ×H+WH+ŸøY,t¢ñ¦þ°TÒ ®\'[ÄgÅ\&sY£èMÊæ4‰zÄ_Ñ]CõѤN¢Ì‰ºW™sâ´tî^ýp; ZWgnL¶ÌÉ–¹ñ¹°>n‘NÔ&àSïì‡Ûiк:U~²9w“͹ûÆ¿\X·È¶eK °éŒ7Ù<ÈÉæANù$gÓ—o«ºL…úq÷Édnå`úNäCm¾4‘”îFpçîE¸"L Û²-L Û²-L ‡óDVb†íxf»ù"Â+Û÷, kÀŒ8ódLô…ˆ+˜®‰&C\M–y€†l¹0Ù\ùRXšH$w#¸s ÷"\’má!Ù’má!9œâM!ÙæÉ6GH¶9B²Í’mŽls„dYsO_ØíxãD 2†;Çp/Âq=Ùדmq=Ùדmq=9œgœ8—²Í¹”mÎ¥ls.e›s)ÛœKÙæ\Ê6çR¶9—2 ÈÂ%™Ëœs<Ý,Ia&¡6ÊÓÖO­‹e"×ËDâí@â=k=17JÝ…x9à1šp'õr™GD:ó#¦l˱–m9Ö²Èß—©¿/Wѯc-›Ðö|©1,Š.â#[šC<0 (x>±¸³Ò‹x;FHT ûg„k×M[6²lËF–‰ÕA6²Ì=P9Ÿ®›3j7äðõû’îQ<2<‰ð|ý€8g¶èÇ,ºÓEæÍà`š×_¢<ŠG†'>œ:;¿Ì™$(qGNßéв¸a]¨/¹ÝÃ#Ó¤Ô:;à*Ž?©"Š;ÁÉ1mÒ$ÃHye¥¾¯H£¬Tƒ9ÿ¯äà9Qç×±=ƒ_OZu~w~už|&â¡è˜v~;Z߯­o“Öi6²¼‹  W’–röÜÝÌB}â÷mU/•?ð¥qÅRYhš²ÃBÞûÙ´q3ûø‰¿î}%÷ÎiÞ­Ï—´R¨$Cv‹ÛÑÇ=Ÿ÷ñÀ5kResó8‘.õŸž¤Î²Š­ÚU±U»*¶jWÅVíªØôËE¤_.•­Ú‡/múxOÏqgÑdÅVñ©Ø*>[ŧb«øTlŸJ•ä—/•-=©ˆ/qZݘӊážîž¢O¢ÍÅ×äÖG\‘[¿.ì »î&A]ns|%Û|=ñAA<,šÄ—Äi¡½tŠ+÷nˆçɯةߑu:À»ç%+¶hO|P–­àuÞú Œ©àS\¹ÃCüN;OÁ»Ö·yëgU„* ±ûM»“®ò|µ…ØU›\mrµȵžç<›Hf^¸6祃K=8Sà`µ™¾ÕfúV›é[ëy^©Ir¤~’©ÒØÈ#ãôù˜l×j³]«Ív­FÛµšÅ >YÛ¿Ó“ÍÊY×fÊÆ\sð‡"jݔԷ6vªœ õè©î>µ[8Ág©¦ßŒˆyþѫ모gÙ ¦Ëc ÄÂýh„åR^ÔGb$ö¿Šô¿%5~‚ßöt²­jÖ+/h«c#ñ¤*O‹¦ª<€kªò ®øB7š4Ó9ÑÈïS°j¦à+yâcäEÒÊ®Í?Ølù›(ÿ`#┿€.ÑoÇ1-?›oÑT¿pMýÄõk …ó¿ÇÜ䲆v„Â…¦©%rR(;òi‰ùÏiç×ñÉŽLÕ9)”O·Ä*Óä ê<9)”Æ´ÆÜ‚éø,¶\mõ´f ï@\ÞÑluÊ[TàJ­~Rì¡5KàDÏÇd¶Fj©ÝX-µÃY(‚_$¸¦ú ×–[h–[¢‘7 £W£›­{k‚‚\èõÂçu üÂ‚ß ¿Ð ñ Ÿ{šxÆB¿TöÍØ}qóÖÏÝ%< _è1ÚžssÖº£ëå}†~ÿÍ >OöÈs½ðqí…+·0ÆYE ^gqÏ‚™y²g%xÔ}‡_ÄF\‰Ýá×#±w|šçïþ+–ç¯dÑä:Ï“ÉsL½pí >âŠü¿îÆìðënLÄnÌ¢C¼‘g†è"[T, Ð;üztÄ Ð;üzô¿¸"8¾Ã¯Çw¸ìd³Ÿ6ä3^§Õý7|ÚÔã¯5œÈ•É·èuæR 9ÚÿûÃd­üºÖÐ;bDÔßE÷¾Žm¼÷ÉRù:¶xÜûÊî}•à×uÕÞ¦é”ç÷¾ßXç'³îÀ¯‹½÷ÔݱÛ_ÞŸàãätC;Æ+ÛWTjõÞ³#ôÅ‹îÝ¢Ýá×C´W„h{ï™Ý£èÞI…kê!¤xex“àŠZ©ÞvÀå9ns\›Åä…êÈý°:r W$Öìðë‰5;üzbÍ¿žXqEbÍ¿žXqEÔc‡_zìðë‰5½§§~Y6ç-©8^øsj³¤K]%øõ¼œˆ+òrvøõtˆ+ÒQtøõt~=âŠt~=Å>ëæö—§‡Å©‰¦ö‘—“eXhö¿žÖqEZÏ¿žy¡Ã¯g^èðë™Wd^èðë™:üz1âŠâ¿AüÂOûHû°¿ñW{G}4yGWxG×xGWxGWxG×xGWxGßø¨VŠÀmê#s›V/šu&·©7UE\ã6õ¦ª¢®p›zSUѧnÓ¸žüܹêÇÒ”?i~Í“sÕ›ªK"®q®zSuÉW8W½©ºd‡+œ«> œ«“^”Åñ>±ÒW»¶ñþ>¹Òil×tgJ-l¹”\ãH6Ç@²9’Í1lŽds $›c ÙÉæH6Ç@bºšæE¯Ìi´ÞÔ1pœÔ}}3ö?äU‚kü ÉæWH6¿B²ù’ͯl~…dó+$›_!Ùü IäWHL÷Ôd“Ã1À¶§Ëdkžln‰dsK$›["ÙÜÉæ–H6·D²¹%’Í-‘ln‰dsK$›["‰Üù4²òþ›\Yùµ™K:üz`&âŠÀÌ¿˜ÙáQtÞ::eÔH‡_¹ã§qóic‰ë|ázÇ@¶9²Í1mŽ|:³T²%ä¥Ã'I>*ÏKB•¿”Úá׃RW¥vøõ Ô7>Œê¹±@ž!®ˆiíð‰c O¸û=Έ ŸÅæ(–¬-;®«@Ñá×+Ptøõ ˆ+*Ptøõ ÞÓRÝ1ˆž»mw[,Édv\»Ã+¶^±íðŠm‡Wl;¼Â¼Ì`bΞ»%ÇÍŽötk1ÆÙîiºÖmtŸA·C<,l àD¸g¸èÞgûŒJëP¦ —\újI üÂÇŸn¬ÆÓ×h&«M3YmšÉj©ÕøÆ‡yÆn§©Åî8Q1ýÀg|öÜ-ÙŸ_ø¸rU‚Žñë1„~=†qE áæ/»¦,»ã4Y¼ìÁ&fdzÑÉz\mjÕjS«V›ZµZªz¾ñaZµÛi&5ïóÕѾñ×lZÙf)š×á×£ª;üzT5⊨êO"ÊhèÔf{³™íÍf¶“$@÷içE³Î¦Vm6a³ û›MØßÎk¯ù‰ˆ£­top;-\Òá× — ®(\ÒᓽAczQ'›\–:a~=¾Ã¯‡Ã#®‡ïð$ò’ F^4ÒlG#Ív4ÒLG#aaÒcËhÒÖ>H#"ªDð™807ÛÃB‹)EQç×Û0dž¨”À 䯸±ü­ÓdHUÔù#‡Cd) ¸ýh†‚½`Íý7·9>-ô5É+óŸ}jKþþÀµ%ˆG†§üL¨å01§#tZ©k’Ùå…¿Fˆ%GáįçVÙ;?W"„ļYÇÉ×t„ŽØFÞØ6òÆp…÷!B–Ïr]óM,â‘áI„g†~=Q7âÉ%â Éeôlkîd³îÜï3‘\>ñÁÖüƶæ7†+ÜFòóx–盇 Ï"¼0¼ŠðÆ$—‹÷ìÞ'Ò¡èYä„—M⯸1Å»¹‰˜Ñ…m~ïCç‡US<3¼ˆðë©×W¤^ïðë©×}¤Õ3ÊnºFžÈ#žçeš¥+xâg–Hóèø&êãé¾uÜþÄÏ´1œo¦}ܺ‚HCm…]ä>ɸûµ?’ŠJ¬½ðAºB¬ÆuD‘fvmQÔùõ6ÌJ(*žöÂù?aYHl€I^Àn„軘ËI}$³L´l÷ Ÿ&³ü¨š2hý>© ÷U5åg)­Õï´ó§Ù(? Zv~h¶|ùÀOË Ì;¿­w¡nöñ|áߥ?º>æ…ÆÙï³#ó#µ¼œ—Ιd,âƒÙ!‹xÎ {ùôÓΟWŸ™$<âƒÙ!K6šve#OfÇ›?ßøÙYN¦{Õ¼²?Á§i‡fêÜì‰i`Sî˜F\¡P}wþd Ò}U®¢:M‘3Ó±fh9Órr'*â )è»ó'óœn!ªl„Õc`ªGîmA\!š|âg¯I‰4 éþ*—x‚«]:%þ¸^Jdænu¢>š%®‚zaÅ® Mÿ´›`WXHrï65/÷þ§d³äÞ¥dñf懬óÜàe’Ų) Gè4Ôj–¼Ô#ÔJ–»êÆðá©Ö<ƒx™dÇ_±œË{‰©ùAIA”A‰âÃó…yžñ2É3¿jlÛöUáÚÊÒN«§•‰aXÞ’é0ö3?þ0Yìn*‹›í:J;/¤3½÷ÓâkebW–·î7Œ½Ï»Zç­¿n‘ÏàF«õÑ-nG7ö|6 >ÜÒ–©ñZé¦Åí߉ÊM纜š¥³%¼.Gv¯B„. Wé ÎJºE‚;/’ÙP\‘ÊqE*OÀ5©<W¤òD\‘ÊpM*OÄ©<ßøßªXU¾B<1^›Ÿ*®Ô%C½0c<2<‰ðÂð&Áss'™›+œßû‰·$R%ìíµíÙmE_ª­èKµ}©¶¢/5 öì“í4Õ˜ÖcgÂ%5Ù¶Ó‰øÎoÌw~c8=tϧ¸2²qEd3àšÈfÄ‘͈+"›×D6#®ˆl®T[|O'­m; Úb꽞xî§:ˆ|Šk·ÓɶN¶ít²m§“m;$ѽ•fi²Éµ]¥ÝìØ$x-çC\»kN¶]s²íš“mלl»ædÛ5'Û®9IBT+-ë±ú ž¿fÛ&)Û¶)Ù¶Mɶm -mQdCgÛ€dÛ Û¶Ù¶È4»W ͼÎ6ó:ÛÌëÌÍkøUcrü#ßa墭ÚlVtûGejq¦<š 5Û±P³ 5Û±P³ µsµ±¥ç¨r66sµ­Ô*¥†èÏ"™Ë°u­½iË•Zm¹R«-WjåJ­…a׎š•Ô’ãL«1)äV›©[µe+­¶l¥Õ–­´š²•†%0ÏËžµ2,ÔÝþ«Bdü›ñÂïÏ=’*g÷?DjË!ý "<1¼IðÄî=ž^Dxe¸¨ó™ ] ]fÏU‚—…àE4t¥0\t^E­×Èpуk¬õæD8›uM2òŸ»ïãµe"3ÞñÀ gÿý!‹ð2ùóË9Ù’¶:‘rCç…¿–´•-ië¼õ×’Æp/ÂãO o<±{OA„g†^.ê|fC—E­gÖz=÷ÂZ/¢ÖK#xµ^YëUÔze­7QëÍù&šóŒüg þ¬\+Y“¨^¡ÃËäWTÇ]DkÒv,*6ý "<1¼IðÄî=ž^Dxe¸¨ó™ ] ]. ¯¼,³“D8{pE4t¥mlM’à• ]µ^YëMÔzc¯L½2L›ûštŠ?Ö¤­IÛ|µyYS §ÚàæGÜS_ÝC+wT°`)*¿½ð{Ý’Æ9$ï ~DÄÇ;“¿?Dž^²o-î¨U‚×FðV$xoêÚ̼v Ó‡ïâ·ùsßs@°lJ•ë_øë¹¯äÁq#ð’W6ò¼-ß™j1¸…&BŒ¢¡ÛŽ{ߨœßøø+ó˜ó"žàêƒ ÿQŸ”=ßæý7üÁåÓµ.ÍÖºlÚ®½ñôWƒ›¿Ö4oI΢[<}­ÓìµÎgeÊÌYYeÁd ¾ñÔ¾ n¿ÊŽùTöÊ`÷ßÐ>fw:U&):^øØuB½%C\óU\óUE\ñU\óU\óU¼UQY¦áƒÓåìðë9Wäìðë9;üzŽ@Ä9;üzŽÀ;ξéʼnÞ÷îÿé–ˆkLÀ5&â “pI¸Æ$¼UQñ™Ÿ®Ë€×á×3à!®È€×á×3àuøõ xˆ+2àuøõ x>y¼¤ðµ‡¬)¼hq8 _ǪˆyW®Ž•Tüú ñy|©\}ob/ð9¿Åu¿EE|Å»ôôãÉN¬ñ­)*ýGË:¿­‹ÖŽŸ>—éçÄLÁpô1ñ>&“L?¿rß–úaöï%6ëw2äo\)UG\qF¸æŒqÅâŠ3"À5gDˆ+Έל!®8#\sF„¸âŒpÍâŠ3¢œØºVÑûn¡çWÖáÇû¾²÷}·®b#®b®b#®b#®b®b®b#®b®b#®b®b#®bø·żN-‹^ëíx/7ö^ng¸RsŒ¸âüpÍù%âŠóKÄç—€kÎ/Wœ_®9¿D\q~ ¸æüqÅù%àšóKÄç—>;¿Ìùôã®èÈ¿Öí\{ê'Öù‘Ñw\RdT\~Œ3oãÒ$¸[˜³Ò‹pV†Êe^^Exå‘f¸÷ "œ=8/ùÀF>ˆ:XçCá£÷WTm™ì‹Ú^µní þþà îý "<1<‹ðÂpÑÐ96t^4tÃäç?>Ù³ÓüáK­ˆç’r?Ù¿Y¬Viž×«épVù`©"œ ÚÝ"Á´;/ÂYá7×$¸¢ì\‡_/;×á×kN ®¨9Ñá×kN¼ñç’¶²%m=™´Ï%á^„†Gž^Dxex“à~!¸Ý»ŸøÚi±Ðùš´‹ÊÆ•M‚³’"Ká,„Ä-ܱçE8«VèD÷îØ½;ѽ»&JøÏpÏâ_|áì¹û"±?¹™br3Åþ¼ð§-·ßËe²w;ða9îçZ'Â=à O"<3¼ˆp6tN4tž ÷"<0œß{¡I=ã®D(\]XN¹îã¸hкZ¤Vh—½Þ¼ógò3÷áûþùÆÏäge¡uîel’Ÿ=Ïl¾…&ñ7쑺¥Üæø $VvšøÄ_…ü)–±&ÿ&YIÔ"þ*úÄ:îǪ÷ßÜæ¸Va÷µó|ǧ¢¢è‰ËùvDÍoÑ2Óv|ªˆ‘éÿÓ[~ÿ íc4éÿ_¸6€qE%âšIébç“hè,ú®ÕÀ#Î×Êi’šPE·h‰C\3†¸âýI‹£I+Þ߉ûons\ëY~ác/(u|ŽqæÛõI„_Ï©€¸"§B‡_Ï©ðÆ‡®<ê½â~aN:/™“{ïÒâÖ³7n>ë,Þ»®uAuøuT‡_wA!®pAuøuÔWºaW¸a:¹6ºç§Ûü1Î<>‰ðë…aW†íðë…a;|tïýê>ܸҽê÷l7ÏuÆN7®9dfÐï…÷ß°ÉõÂBÔr]kûÂÿ»ÃD'ùe#ñ/ƒñG"ÕE¼ÍYé@ì÷¾NFh¥ŠÜãÞ×9>° $RÝ;N]¸²Ç»}E üŒð/‹ïG¢ôEœ+êÂ]/ïåñþv‹/|`Øwbñ½ðurcg‹7‚Ä¿ ЧɝXÔpr¢ZÇFŽÐ:¡uü%íFh·>ø’"ž&8 ÊUtïd ¿±%œáÞ3<ˆpú‰­ŽnyöŠŒ•רçE6f¾Ç u*ÅFWíðëÅF«­BHµU©¶ !ÕV!¤žUqu¬¨&£:{'œu–Úkˆ+j¯uøõÚk~½öâŠÚk~½öâŠÚk~½öÚN.úMoñ49Þý7trµx~œRø’Ö¢%qE 7âŠ@î¿ȸ"qE 7âÃ@î{§¾K#NӣѴ9?È*ëmÞú£óùv#·TWdWA\áYF|˜]å9òëɽ?~•'¿¢9XœèùXâµWÄk#®ˆ×îðëñÚˆ+âµWÄk#>\ôŸ³c›?÷×ì`¿jKe ‰ãûúþ6;^øßÛû!²¾ðÿîð÷!ëþºìî¸.ê±Ã¯G="®ˆzìðëQˆ+¢;üzÔ#⊨Ç¿õˆ¸"ê±Ã¯G=¶§¨v˜fÙ‹^™ue®G=¾ð×+³²Wf·® ìð냈+WvøõÀAă~=pqEà`‡_|8Ø–ÊïB•ù›±S{cS{;Ãu±w~=öqEì]‡_½C\{×á×cïWÄÞuøõØ;ıw~=öðIì]#îÂûoê{“Ը㦠jò~Ø_ƒÖ5 o¬äáÌçƒg;¾³ïðFðä%x Ï"œù:Sá¬óY4t™ ]u>Wæ¨]$xaCÇ%gÎZ¯¬õE8{pMÔzs Í:’rvàþÆ¿öE?l_ôñ¾3 uW¥ÎW›ÓBÒ¦ë õA}Å«¯xc8+åƒ O"¼­lµ‘à)0<‹pVD;UÎ:ŸEC—YëYÔzaϽˆZ/¬õÒ$¸¢|y³•/o¶òåÍV¾¼ÍÊ—7‹Ãökçøñ+fÜg™ C ÞX!Cгúã1ˆðÈð$ÂÙéOò<±³§”E8;¶KU„³ÎgÑÐe6t¹ˆðÊNý ^ØÐу+lèJ“à•MÚ*ºÊZ¯¢Ök½‰^™Æ^™&™6ßG‹ãmúÏÿÚ³÷¿Šl_”v÷³‹|Q‰§û¢Ø&û¢øî è¦aŒ3F*"œYç©IðÌìãEøu â I‡_— ®tøu â I‡_—>–Ügü$í}s‘í J½q§{ƒØ&{ƒ¸R+šÎc<3¼ˆðÊð&Á33õÌZ/‹/¬õ"j½°½Aµ^YëUÔze­7QëÍ1Ü‹p2ò߆ó7þx±¸}™}ÜdŸ²Z’Ôxã™áE„3+-5 ž™•Æé;üº. q….­Ã¯ëÒ:üº. q….­Ã¯ëÒWèÒ:üº.mÇã¬ÀHs<ü9ì/Vâ/Öþüa Ê$ î¿üõU¥û!>:‘¦‡Ð#|v"íHÞÛ¯K¢ZÇŸnÙ‰´Kdy¼‰N&)¥)೓IGSš.^4Bd¢ÞDGLΔÞðéS¦åéŽ[Ìü "’ǽƒŠ2yMbžäQØñ¯ªvBõÃpö–Н§~ïðë©ßW¤~ïp… q… p q… p q… p q… p q…ÊÑêiM¶ÚìŸʽô«ÍÊV›uÞúà„ê‡Pý0œ}±bá×ÏwøõÄóˆ+Ïw¸B?†¸B?¸F?¸F?†¸B?¸F?†¸B?¸F?†¸ÆJË"+-3©úD‹Êv¬ [¶3üë„ê‡Pý0œy1ˆðëiï;üzÚ{Äiï;\!½C\!½\#½C\!½\#½C\!½\#½C\!½\#½C\³/Ê¢}O{ïöE¥ñE¥1ͤwm7³Ó¹‰ŽpvÈã¢g‡<ÞIpÏN¨‚T7¸HðȆ.І.²¡‹¢¡‹‰áM‚«Ž›íh±ÙŽ›íh±ÙŽ›íh±ÙŽ›íh±ÙŽ›íh±ÙŽÛÙÑbž-¶cWÏǯh.À*ZÏ gâÄFvŽ?lçø3jÝ-9Ã>úxš p~‹ÛñÍØØ7c“àìDÁEÎN’¼“àž$¨Îk‘à‘ ] ]dCECÙIRl\uØlG€ÍvØlG€ÍvØlG€ÍvØlG€ÍvØlG€ÍvØlG€ìÙØž½[½?­@Ù<­ŠûÂÿ¾É)ÜþUÒ7¹ÉÉwŽñ‘ëDà-ñž–ék¢{ߎ΋žûÏmÑ»²gjÌoWOøÍû‘¥¼óáÔ Hnòà‚Ié¸F鎸Bé¸F鎸Bé¸F鎸Bé~àDéþõ*~<÷̺ÚD³Îô‘\ó‘B\ñ‘B\ñ‘\ó‘B\ñ‘\ó‘B\ñ‘zã_Ke?¹hþ¤÷ÉÅ`~×2ä)’À{¦&þa[~†gv–™£Ï ¯¼°ãÿD8;I-¢{¯¬õ*j½²#ðZ$xc­OF>šF>rÑ{§ûï6™´Ôþr¢9¿Û_Ic1=ïÓó2<³£Ð\D8k½,¼°Ö‹¨õÂNR«¨õÊZ¯¢Ö+k½‰ZoŽá^„k ç(qâøÈÌë#d:µ7zòE»†xf§J9Špv®“«/ì\§ž^D8;¬‹¯l誨õÊZo¢Ö¿N¾$ÛªhÛV=ðÇÔÞ&S;1K%»æt‚OÄ>L˜Ÿo\}®ƒ¸â\qŹàšsÄç:ˆ+Îu×œë ®8×\s®ƒ¸â\p͹âŠsÀ5ç:>™Îu|šžë Œ¼–eøtQ´\œûjÒzÒú8kÄ%Šã,p)FžÞ$¸&Þ qE¼âŠx7À5ñnˆ+âÝ×Ä»!®ˆw\"Þ pM¼âŠx·÷ ûe¼—§yeç«‚é¤qÅI⊓:À5'uˆ+NêWœÔ®9©C\ãM6'h²9A“Í šlNÐds‚&›4Ùœ ‰l-úUD!a HÏ%¼>Ÿ«íê¿“Öõn¶¸Ùfàf››mn¶¸Ùfàf››Ï„KuY&.XÌâ~CMÚsIR¸Ùffe›™•mfV¶™YÙffe›™•mfV¶™Yï ¦¿¹É•¤˜ØÝÌ’-¨¶}¶}ì³ícŸmûlûØgÛÇ>Û>öÙö±Ï¶ý;”æonroca‘ùñ8ñ,|n–ãoºðijü¯í7ÙÉW‘„Ö?««‹~Ñ-®ã/€ð€«%â&Šºzã'Ç!…Õ^At‹dªÜDAoüį]™Y¹›MžYÜW›YYMÙ\}eæÅ’E·™Õö•ªlv4ÙÈÛÖ¡FŸûfì¹’Ú7Û ÃX~X Ã#‹ÐŽ^„3IFŒ"<1¼IðÄî=Î!©ˆpš¥ÙÔ,ͦfi65K³©YšMÍÒlj–fS³4›š¥ÙÔ,-ÔN¶ÚØ>öm=V–`¢©häœä‡“Pœ Bbá‰áM‚'vï)ˆðÌð"Â5:¢fÓ5›Ž¨ÙtDͦ#j6Q³éˆšMGÔl:"Q0˜oÔ€ª¢E…Dý°€¨‚G&G‰^„3-MŒ"œ b“à‰Ý{ "<3¼ˆp‚«Ù\ͦàj6W³)¸šMÁÕl ®fSp5›‚«Ù\M¢à Sp•ÝR Ë >Wpñòã/\pM^À5ú1Äú1Äú1À5ú1Äú1Äú1À5Çkˆ+Ž×ׯ!®8^\s¼†¸âx pÍñâŠãµWéÇÂÂôcQ¶XëÇÂzÒúk±ZÙbµÎ[ìÊnlWÆpz q…z q…z pz q…z q…z pͱ*âŠcUÀ5Ǫˆ+ŽU׫"®8V\s¬Š¸Âaý^.æêµ°0õZ ¢5É”åpM– À5Ú9ÄÚ9ÄÚ9À5Ú9ÄÚ9ÄÚ9À5Çéˆ+ŽÓ×§#®8NG\qœ¸æ8qÅq:àšãtÄÇXo<…ïdû¸/ñÄpž18²Yt¿ÇZÇ+·…½øìÇÆDvˆœ);vp¦ìØÁ™²cgÊŽœ);vp¦ìØÁ™²cgÊŽœ);vp¦ìØÁ™²cgÊŽý~eæÇMÁ±}Ñáž¾—ëxû#;n ΔG:8SéàLy¤ƒ3å‘ΔG:8SéàLy¤ƒ3å‘ΔG:8SéàLy¤ƒãŠ&ÁYL 5LÙG>ã7ö§xbx>Å•)žƒ3¥xΔâ98SŠçàL)žƒ3¥xΔâ98SŠçàL)žƒ3¥xΔâ98SŠçà$êÀç)ÂÐÀ=Œ<Úÿû^~”®¸þi+,žèPÿþ0q®¸[DNõaëJ­à­â ­à­â ­à­â ­ÒO-IÏÊuâÜéÔ^÷©­±_ S{eS{·þšÚ"ì°u¥0p0q…0p0q…0p0&Ø2SÏ̬”E“v;fÝÆfÝ&ÀÝ"òÑýŒp¥ðpðq…ðq…ðpðq…ðpð"Ø2’†ÀJ‘·=#ià¹!ŸøLRáܤNÄןÛÙx°ÛÙx°ÛÙx°‡yèéý©Ïræ‡À¾ïÙ‹fÝÙÙ¸s“løÁ–7Øòà[Ü`˃lypƒ-n°åÁ ó<¸§§Ÿ} KÍ:Û1–-n°åÁ ¶<¸Á–7Øòà[Ü`˃ûŸKÿÒìrG¸[à‰aÂyv¹mú u½61Ù´‰¶ÜvÁ–Û.ØrÛ[n»`Ëml¹í‚-·]°å¶ ¶ÜvÁ–Û.ØrÛ[n»`Ëml¹íB:Iýñå–._>ºŸw“cFž¯ˆÖºSiã‡ßfк^Ú˜lÒF[b¾`KÌl‰ù‚-1_°%æ ¶Ä|Á–˜/Øó[b¾`KÌl‰ù‚-1_°%æ ¶Ä|oüËûÃܱ?w×!ÍëœhI³)#“MiË*lYƒ-«`°e ¶¬‚Á–U0ز [VÁ`Ë*lYƒ-«`°e ¶¬‚Á–U0ز ¾ñ/_ÿóõÿÜMË™îHC4žC+œ'%t³h¹lÛ‘fÛŽ4Ûv¤Ù¶#Ͷi¶íH³mGšm;R[2Ê`KFlÉ(ƒ-e°%£ ¶d”Á–Œ2Ø’Q†³d”.Ìêã¾ñ¿_¥É¯˜•eKšÍJË6+-Û¬´l³Ò²ÍJË6+-Û¬´l³Òlé ƒ-d°¥ƒ ¶tÁ–2ØÒA[:È`Klé ߸cñ+n™8Éùwʹ/V<Ã`ØóD:UJù7^vq=Nÿæ­ëc8Š-†£Øb8Š-†£Øb8Š-†£Øb8Š-†cœó'þ:'š´ä•¹±WfˆkÏÅ&x.6Ás± ž‹Mð\l‚çb<›àY”5t¨·ß|X<)g¤C𠕸ø+–9÷H¦7íãyÖÓIÕ PW‰C•&7öq“|<õ>b ž,9L5uaÑQÑ1•²›ìFg_?—%¸gK¸¯<0pÕF9zZ1ŠÖ:ÓNpÍNpÍNpÍNqÅNqÅNqÅNpÍNqÅNqÅNpÍNqÅNpÍNqÅNpÍNqÅNpÍNqÅN÷Àu;Ýt®ˆéŸª>¶À?߸º˜jG\þ¦{QçOeÖêÏ7®àЉ¹c¬ó&_ÌÌÑv!Bäšá¸‡AdMš¼øÒ5g¿¸¡¢üï\U3ÛŒä"êüºw^³yÕjt~eçÏ=3ë"9Qç·£õµÎŸûX~ù~—öáJ¶XNß÷ ®IP¸&A!⊅€k"®HP¸&A!⊅>LPøzãV>çÙFùHB2}ãˆSðÆœ‚ O,Ô/e΢$Sá¬ó9Hð¯HÎ Þã,À´,¼°¡+I„³¡+M‚W`ZECWYëUÔzc­7'ÂY`q“L›oÐñÆQÓ5±"a¿a÷¯$^%íEÂ>L™s(9ò¾‰Îò“­ÖT²ÕšJ¶ZSÉVk*Ñ*R^öàÖ± "sŒ¥WAž¯åü&Ê’Ÿœ)K>âŠ,ù€k²ä#®È’ŸMáàDn¿Ö7Qª÷äL©ÞW¤z\“êqEª÷ÄêÅüÖý$ñÃÞämûloJ­’¼)µJò¦Ô*É›R«$oJ­’¼$ò4y¶"–"z¼¶íš·m¼mÓàm›oÛ4xÛ¦ÁK‚v“gëæQ6qúxm&¦·™˜Þfbz›‰ém&¦—Ä;'RHÃÿÆý3ñäò)Ø,É`’2®‘2#®2#®2#®2®‘2#®2#®2®‘2#®2®‘2#®2®ÚþÛö'ض?Á¶ý )s ă~ek’m“LbbÀ5bbÄbbÄbbÄbbÀ5bbÄbbÄbâLbâLbâLbâLbâLbâLbâLbâLbâDÊë„ß$[mLr^À5r^Är^Är^Är^À5r^Är^Är^À5r^Är^À5r^Är^À5r^Är^À5r^ÄrÞWÉySdª‘z¬6ñŸ.œÈûž¸þ>2YçRD?¯7Ѩ=qµœ7EvJyäŸvÞ$çMIpbÃÅÄé-ãþ|¼Â}v2,® X\µËO¶]~²íò“m—Ÿl»üdÛå'Û.?ÙvùɶËO¶]~²íò“m—Ÿl»üdÛå'Û.?ÙvùI´Ë§Õ¸–&Z×ñ7C¸ËO¦€eÀ5Ë€«| ÉæcH6C²ù’ÍÇl>†dó1$›!Ù| ÉæcH6C²ù’ÍÇl>†dó1$›–ér²µÎ° ¸&`p•‡#Ù<ÉæáH6G²y8’ÍÑlŽdóp$›‡#Ù<ÉæáH6G²y8’ÍÑlŽdóp$›‡ƒ¦;/‡RªžàãBY7VkŒÓ\A„3ÁML"\•SmQ9Õ•SmQ9Õ•SyTþJ ŸœM.b8ߘáLqZƒ7ˆðÈð$Â5¡%ÕZRm¡%ÕZRm¡%•Ù_9‰¦ 1anÌ„¡8-ÀD8‹ˆI„kÂ+ª-¼¢ÚÂ+ª-¼¢ÚÂ+*¯8~•æÚ=$T™‡¿äÓ@ÐO?ÊÏ7>ðàÂ-zþ½\SïpM½KÀ5õ.WÔ»D\QïpM½KÄõ.WÔ»\SïqE½KÀ5õ.Wˆ²׈²Wˆ²׈²Wˆ²|\ïò¾ÖÌ‚k_øãWaò+‚ÛŠhE<='\&iò éòÊVÄuÞúÀƒÛ­ˆ³¡Ë¢Ö3k½ˆž{a­Q륉"»^YëUÔze­7QëÍù&šó]À .|Ïðs­[ùjö‡¬`ºÖmcn·Xm\SpMi`À5¥W”F\QpMi`Ä¥W”\SqEi`À5¥W”F\QpMi`Ä¥×”F\¡Bzáϵnckõ çqØùßZwØu<6¿Ãο„"ÓX¨hºNÌvg’!®!®!®®‘!®!®®‘!®®‘!®e[®„lË•m¹²-WB¦¹²­6ëx³(=ñYxcfá uµDq…Dq…Dq…DpDq…Dq…DpDpDq…DpDq…DpDq…DçÀgy<2Íã‘«hQ!ÔP#\«…A\¡…A\¡…A\¡…\£…A\¡…A\¡…\£…A\¡…\£…A\¡…\£…A\¡…\£…A\¡…9ðYŠšˆäåö»K^2!Ìá4EMË“}Q0)fr0)fr0)fr0)fr0)fr0)fr0)fr0)fr0å±ÍÁ”Ç6SÛLyls0å±ÍÁ”Ç6SÝoyY&{7–á7%Ñ¢rš©åÉö'˜”R9˜”R9˜”R9˜”R9˜”R9˜”R9˜”R9˜”R9˜’ðæ`ʧ•ƒ)ŸV¦|Z9˜òiå`ʧ•ÃIÞÇrÁ76…·fÙra’¸å`’¸å`’¸å`’¸å`’¸å`’¸å`’¸å`’¸å`Ê œƒ)ƒp¦ôn9˜Ò»å`Jï–ƒ)½[¦ôn9œd~,|ËÙQ,<>ïy>v&£œH, ª}â£czÒ0Ä3sªç(Â3ë/ìªÎ\úEt^E­WvSE®±Ö›áì ®IF~zì0NrñãC½ëؼ;¼’\|}ì©jˆ\äÔ+>Ä3óÜgQ뙵^ ^XëEÔzaŽÿ*j]“ÝqEvkÀ5Ù­s4e·Î,7Šÿ•} ¶ñ'‡ja~FøÈƒK¶C<3ïhŽ"œù's•à…ù'Ká‰á¢¡+Ì­=É+¸&¯8⊼â€kòŠçhÊ+žiaÕr¬ó<&;ŸVm“¼â9Ùô÷ɦ¿O6ý}²éï“MŸlúûdÓß'›þ>Íõ÷÷I³,-¨ë½hÒž;'ÙÒs²I¤“M"léd“H'›D:Ù$ÒÉ&‘¶UB~ã¹ÉZ/94ÑÜ´IZ“MÒšl’Öd“´&›¤5Ù$­É&iM6I«­NöÌMþ±§Õ´Û^0óšÎy¯¦Ý4iîó«šö×Ú~“ áh5maç×ñÚ.Ü‘fòòßd[ VMûö[E'÷&2ò yîwz?™/¼õ’Ï«iOž{ɦsžûí7ˆ:^zòÜK6}3 ­¢î³¨ó¦U¡.̽™öªÊ•GåÔ#&»0ã¾òç^ßA–…½ï壼úGëÌuœüN;¿?÷ÂŒ¼ºN:¿_YçWÞ:u%Qç·£õµNž{XÇÖùåõ¾ÿýæ6Çša–fõ#þçÿïþ›ûŒü“÷?xæ›íðq„Âß’O‘àI„½âˆ"<¼d >vkßÿP«¯lä[‘à#¥ú<•åÎ>Ð.‰fÝ®Tg©,?Ž?:¿ÑFŽé¸Íñ×ÜÜȬ[$xLOQ‚'†S]f‡u™é(ÁK&8õ¾ux­¯¢‘o…àT›øÆçé¸Â+"j´"ÖcE 'øãcÒ4+b°­ˆÁ¶"ÛŠl+b°­ˆÁ¶"ÛŠl+"¯ÝÍî šu» Ó4+"ÑÂ1Ù'­otݤKå‹üGKåOlIK"||2Z*Ç8[K–à…-iµJðÊF¾ >:8]*[*ߥ(ÿ~s‚öÂ¥2Ù–Êd[*“m©L¶¥2Ù–Êd[*“m©L¶¥21ã>Ðélê„KebÛôÜD­Û–Êd[*“m©L¶¥2Ù–Êd[*“m©L¶¥’øÕüïâ÷i“OðǤMš¥2Û–Êl[*³m©Ì¶¥2Û–Êl[*³m©Ì¶¥23«Ò'ѬۗʤY*óvnÓÎZ·-•Ù¶TfÛR™mKe¶-•Ù¶TfÛR™mKe!G?¿yŸ6å8‡‚f©,¶¥²Ø–Êb[*‹m©,¶¥²Ø–Êb[*‹m©,,y†«¢Y·»$ƒf©,,Ê>8Që¶¥²Ø–Êb[*‹m©,¶¥²Ø–Êb[*‹m©¬lžï{=Á§§vÓ¥²Ú–Êj[*«m©¬¶¥²Ú–Êj[*«m©¬¶¥²®'BГYwzÜ:]*+Ý€{Që¶¥²Ú–Êj[*«m©¬¶¥²Ú–Êj[*«m©lTØrL›v‚ÿÍMÝA÷ÿ¿´7Ù•‡Á4÷ô;œ¸Ö@ Ë´«€Z5]½Ê÷ŠÁ!ËqüK¿É]"O|W²’¢(²ÚDeµ‰Êj•Õ&*«MTV›¨¬6QYm¢²"Q)‰Zuk[uQY‘¨¡Z·‰Êj•Õ&*«MTV›¨¬6QYm¢²šD¥ƒ1A¾Fœ›à¯h¹E!*-&ÈÙb‚œ-&ÈÙb‚œ-&ÈÙb‚œ-&ÈÙb‚Œ …Zuk[u Q錾ŒTë&QÙáQÙáQÙáQÙã QÙáQÙáQÙá*QéQ"3ÿ·-?Á/$â±h¿ryýù_ˆÊ$*~í—¨D¸D€ …_?èû%*!.ωÁ¯_äý•/häkfð«8÷ Qù5ï艀ãVV?HX!ü:óÍ/a…p‰Z6 ~ýêé—°‚¸lhÙ0øuþ•_ á|Í ~ã!¬ÎËD6†Þ®ÃQ^.L…U,ÿLZ× «`VÁ&¬‚MX›° 6alÂ* …Õ¿Yǵ­üù«K‹úù¡ðí }o¾–¶M"›D 6‰l1Ø$b°IÄ`“ˆa(÷µ¹—;67´6)|`bFtœ-bÌE¼6ãLì:· Än´‰Ýh»Ñ&v£MìF›Ø6±mb7ÚlD”¡¦{Ø5\u6‰m1Ú$b´IÄh“ˆÑ&£M"F›˜`fîà ƒc¶\šhÃ?“ÖõÂ*Ù„U² «dVÉ&¬’MX%›°J6a…n{jÕ­×.¾~Õ |ðåµsTë6Q™l¢2ÙDe²‰Êd•É&*“MT¦‰ñ(ah<îøóW—Æ£„¡ñØáï(º¶þëÚ¢ÃWx®NåqÝÅT›<®6y\mò¸ÚäqµÉãj“ÇÕ&«MW˜J?P«n*Ëè.¦î Üï:²í(±÷Ñú¯2f_}„é¿=õ‰6¡_mB¿Ú„~µ ýjúÕ&ô«Mè׉Эº<ÞŽ%å$µ}³¢ý—_æGþÁµ_LR»Ã5R»Ã5R»Ã5R»ÇR»Ã5R»Ã5R»Ã/=­YyZwüõ«+Oëëi€#¡=µhgBÿÑþú3n}ÿÄt ýOëõ=î@x”„ç¯8êÛMÚ Ã5Ú Ã5Ú Ã5Ú ÇÚ Ã5Ú Ã5Ú Ã/µÁ{9äüv¬Í í8Œ;“Ún-<:ñnjÜ㌺\¯&œMM8›šp65áljÂÙÔ„³© 7¹{æþ¨ w$W¼¼eÔ}â(N+VjÑNÏ8£îß?q¨ ‡³2jF‰1jÃo·© gSΦ&œMM8›šp65áljÂM ¯å8óGNÎKOÑ(ë÷0Gß±êp¸Ÿ™¹óÍúUëz5a 2ó¶ 3o 2ó¶ 3o 2ó¶ 3ï'§‰%=f¹š÷ׯ®B™_¨ Ô„¯Ô¢ž&–q+ƒ ÂÓŸ*¿M]»Ã²)[Ÿ·Eñy[Ÿ·Eñy[Ÿ·Eñy?9s¼í@lÇ Þо¤ðÁÉƬÄCåàè?YYÂÈe‹Yñ¶˜o‹Yñ¶˜o‹Yñ¶˜o‹Yñqr2 ~¨r>¸¿V9¯?D „g /ƒ_ÁÇÏ‘ÚÓãOyÉö²UÁ_ëµ÷Э .ž^&øT-ÆùûîáÛÔ¢-pÉÛ—¼-pÉÛ—¼-pÉÛ—|œœ±^k~ ±¶clHvP¸ æ/%™© ^QŽšZ&ø,—LŒ(™kÌÔâZÛâRä’‰7Ùsq­×ŸðíQ‡GYÑâbð´ó>‚rO/†‹«U}ÔÔãzé*6é*6é*&Çgè&ÂYÐcóè¨ù± g± g± g± g± g1¹8:\ãâxãSÕ ÷»9À$Mð‹G}¤jH6Õlª!ÙTC²©†dS ɦ’M5$J5$t1*•Z\­Ê¥¦tÛ׫†dS ɦ’M5$J5$äýÎBÍM5$›jH6Õlª!ÙTC²©†dS ‰R ½Ê;jÔJžà¯l˜šÂLb»ÛŨØ.FÅv1*¶‹Q±]ŒŠíbT¨‹QA£C¤×Ú—F5Ø.FÅv1*¶‹Q±]Œ u1*y›Ì çǦl£b»ÛŨØ.FÅv1*¶‹Q¡.F¥ ‡ÒñþFÊUOj(6ÕPlª¡ØTC±©†bS ŦŠM5J5˜¶R‹«•æj(6ÕPlª¡ØTC±©†B©†sÙfj~lª¡ØTC±©†bS ŦŠM5›j(ŒjHÅÌ¯Ž“›à);8ÕœI5t¸F5t¸F5t¸F5t¸F5t¸F5t¸F5|æ}¬ÈøÇÿjqµÐMëäLª¡Ã5ª¡Ã5ª¡Ã5ªá3tcÕŠ€I…š“jèpjèpjèpjèpjèpjèpjxãSÕá»ßv¦Lq‚_ä UƒíV²=ÂJ¶GXÉö+Ùa%Û#¬d{„•¨GX)B‡R¦×ús™ùT ¶GXÉö+Ùa%Û#¬D=ÂJ(ÑÒŸ#ûôp~lªÁö+Ùa%Û#¬d{„•l°’íV¢a%¡TZ®$\«(‰)Ò>‰)Ò>‰)Ò>‰)Ò>‰)Ò>‰)Ò>‰)Òþƒ+“ uø ÙP”ÓÁUjmš’ %1Åã'1Åã'1Åã'1Åãðe\†;|O) LŒ›©é5Eí'1Eí'1Eí'1Eí'1Eí'1Eí'1Eípeª£¤:Ê ¯ríÈ“qN”ÜR•¨8òä=cN‰‹¿Î?|ñÿrÆø@-vxt÷)\^\зK ð„ðLáhâ„ê|BC—¨¡K¨ó©0x^ž©¡»N2õüõíµ^¨ÖKD85qµ^©WѪ«ÌÈ»ÅQv쥸Pº8:\ãâèp‹£Ã5.Ž׸8:\ãâÈ ”¸ƒÈfÿ<Ìkü>=‡æ…ѼÎáxø‚ç­K\йH(<t¬ŠŽu91xFç¢R¼ ;ûš¼^êfWÊ9ÀSY¦–M;•i^6ç`³Ò‚ÍJ 6+-`+¸,Κo‘y›<6ylò8Øäq°Éã`“ÇËc⸠Õ}›÷â&øðø+óŸß¸:µ±Õ˜.¶ÓÅVcºØjL[é2«1Ë(cÚþ*~…âÖs —)Á|±ÕC.¶zÈÅV¹Øê![=ä2«‡üZÛxÞ÷ÕmD×"P V9¥ÙˆA󤩨lÄb³‹ÍF,6±ØlÄb³‹ÍF,…VG-›¢y¬Tl6b±ÙˆÅf#›X ¸p#o²‹ÍF,6±ØlÄb³‹ÍF,6±^‡Tüñ}{R— þ:•iòµ×Å$¨ëbÔu1 꺘u]L‚º.&A]“ ® ÊâxÔ?.›v˜×db¯¶+—j»r©¶+—º˜uw1áoä6¬IPW›sµÚœ«Õæ\­6çjµ9WëbÔ~ûVýW?÷yãÕJûBˆøDÚ㨠ª[¦¸VMx›šð65ámjÂÛÔ„·© ÿpó¾\¿ôdjmš^ ½ñ‹²?¨€ìÂËŠÖæ×ê"oÓEÞ¦‹WþÉ×·c¡RÑq­DêÛ·£óêüÆà‚ð4Ãߟˆös Ì„öÙß OÜñ‹pFÊRÙñw@T@ÑvpœpAxžâºWÆ=®xeÜãŠWÆ=®xeÜãŠWÆ=®xeìÜ/=¸U·¶UwßÐÙqm޳Wä8ëqE޳öíC{ƹ^;$j€@Å€â¡ä:á‚ð<Åu)Òz\‘"­Ç)Òz\‘"­Ç)Òz\‘"Í9R&‡cÙx¼lÚEymàmòØÛä±·Éco“ÇÞ&½M{"±åãW¨ø’©ÕÑî ‚Fj{›Ôö6©ímRÛSRÛo³€ÂñÛ䦷ÉMo“›Þ&7½Mnz£Ü$RK:û˱ÂURI×`“®Á&]ƒMº›t 6élÒ5PÒÅB­ŽV‡J%]ƒMº›t 6é(é Ãô“£ø-"œæ_ØÄ.OS\+ÛƒM¶›l6Ùl²=Ød;¬Kc[6 /›ÔîrœFj'›ÔN6©lR;Ù¤v²Iíd“Ú‰’Ú°°lKÉ;^íÊÆi¤ö~A\ܵ{ôõèm¸Vè'›ÐO6¡KÆznä·cè64tÛ ×Êãd“ÇÉ&“M'›`peóüÃÀcÝá‰zØÕºòj¾ÇWó'üþÕ|+®æ{\q5ßã#¡Ÿ‘8oEèÇ‹km‹K#ÎßõTß‹kE‹k·¾/®-®uÒºò¿Çø=>úÖ ç6ÿv ð†xcðD%^¸è¼öš¿Ç×ü'üþ5+®ù{\qÍßã#ÕP‘j¨‡ƒ¥âÕñ¹Í߯Æïª†ý>½Vp™ùüÃ@5t¸(TCµ©†jS Õ¦ªM5T›j¨”j¨Ð?S©Åµ¶Å¥Q ïH†÷âZÑâZÇ­ï‹K¡ªM5T›j¨”j¨Èy¾Dj~¶c€74Àƒ‹B5T›j¨6ÕPmª¡ÚTCµ©†Ê¨â\ÜßÐ"<¾÷K ôÊ ÕðÆÿ}ÀßOˆ?¡<ù·Î¸ÆªÁ›R=ô¸F5xSª‡רoJõÐãuÔªË3µ¸ZŒ\V¨†7¾/®-®uÜú¾¸žf¸Ö‡ämÁ4ÞLãTq‰” Û1òùÁái†k]PÞ&ãma2Þ&ãma2Þ&ã:g¤vUç^6-9äWp0©LL¥Á{\s%àM¥Á{\s%àM¥Á{\s%à™Òà_Á0™B­Žõç20šÔÎ&M;›£Ç5Â9˜Êgôx5‚„s«Õ0ž^KŠWËÁöL&PÏdB@ⱕŸÐv¬à ­àm†+T0•£èq€ ¦r=>P0eMh¶kÀq.¡¹9Í+°ÇJ9²æõì  ¶0³` 3 ¶0³` 3 T˜Y@afᯣ¦wmÓ«P{¨•ùvÞÓ»Ž[×Ë·j“o¹†çÓáێoßзo3\+¹l1XÁƒl1XŠÁŠÅ`µ²w.â{»x\ÞzTÙ/ÂB=®¹Ø‰_ìô¿B‘@Â}âz|"8}‹ÑÝ/tå}á0F¨ÎoGçÑÉ&›ïqÍÍLtøf¦ûU@w‹¾)ψ›hª­·ã>ÊuàÄCmoè£í }´½¡¶7ô1À  OMœ¥ºÝŽï6ÖÀ­Måéz| ýb€ÉC5BÛñ‰ÔÍæŸK\çM޶âÑöB<Ú^ˆÇŠ„Êy±Ý«¥ÜŽ?ÎUÈ"/£$’'\ž¦¸Ò 6ƒ>Ú úh3è#eÐÇ %W¢V‡¥ÜÛŽï‹`Ó‹ úh3è£Í ¸"ü‘œr8tÛ±36´36„§)®<DÛy ÚÎÑvˆÔy@Põ÷¿¦W°½)®½äÖÈM±ÅÁŠ-Vlq°b‹ƒ[¬Pq°ÏBG‚†áô¶·ÔÁ'¶@V±² È*ðÀå 5B¦±E¢Š-Ul‘¨b‹D*U@$jüšI-~‚"Q— ÕNüA¦Õ‘¿#'Ï(˜³/ÈYS3ƒ×ËP8—¿ŒÚ¯¡»> ÉßR©‰Û`0'Œß¼Æ‘'#'Ï(β/È S3ƒ×Ë ¤×Èã…rºÃd| •0Ý2_­ë·L°m™`Û2Á¶eÂdËü >½ºïØ£¯_¡@Iÿ—šÞõZu÷Ó;Ðéèúôéô€éXeŽGÖüé{qúgœPCg“IÁ&“‚M&›L ™ô+ÎòÏ%þ˜sþ•ÀJÍ‹#8”Tl‘çÒÅ~G´{ñ½Cg„—9®óâô¸Â‹Óá/N‡k¼8>:òŠ Üê0EˆK£Qˆ÷@r \?Hr]ãÊ£”-Ä[Å£ÄDü±ù#’øÂ¨Ç3ÂË×9z\áêp¨Ã5N œÄ|íw\Ú'lª§ù+-Xì&Û+ÙÎXÉvÆJ¶3Vš±Ò²8ìCúàÏòBîJì>ÿà)<"\(¼<, PçÕù8|À\©5o2“íxšlÇÓd;ž¦Ùñôµh·ñÈï‹v«.PxD¸PxF8Õù°<8 ÷§¾=`•2*I/Íe–p‚Æ”[ƒEaE§=ɧ,à.ôù‡8Ï&§|‡kœò®qʧŒ|^­”áxä·cè64tÛ Wzƒ;\ã îp78/È9*dœ(·"xIS/Ûde[‚¬lK•KÅÛŽB6M8y“}Üáû¸Ã5öq‡+J—ºìà¢mû=» þ\›Yã¯Èû bö ”-ûQF»l»þ̶ëÏl»þÌ-Z‰ÔÈoÇÐmhè¶®”´Ùvï–m÷n9ÂP©vã™#ºØÌÕ¢»y€­Œm´-Úh[´Ñ¶hã¼xÛpä[y!ë«# ;\QÝûÃó–£¾};–͆–Í6õ6Ú6l´mX˜eií{ß²˜êg1øÍ¶œ$Ù–“$Ûr’dA¥º ;ySܼ;m_#¿¢‘_Ç­ë÷»0Ï&ÿ8rGÈT¥6Û`d[ŒlK€‘ zDèŽmßÀçbº¦ÏÅ”¦¬Ã5iÊ:\“¦¬áËò\º="P†lº(Ï(ÂÚ~?¯BÝ}µŽìcç¨o7e9ëpM–³×d9køð®9Ãñ!Øœ«©hÞãÖ…üË0ä?W›V­6­ZmZGãs#oª²™÷xx @«¾F~·®×ªT… ë(A©Ã2Õ¹ÌÕ¦U«M«V“V-Ëøc¯-³×Ämã¡ÛgážÂË5>Ü—ðrðHÀ\ðL©¦RÅo|\kxtà²eä*¶Œ\…ÊÈUê<n8À¦r½o\]o·Øî uXà OÔ™ ÛÛ`±ÝÛ`]Иã=cÅ÷,õxK»·~®Ñ"8¯=ÿ€Ïku1×êb:¯ÕÅt^«×w€â_©‘_ÛÈ+¶uýÜÂEp^{ü:n]½­ëÂlë ^[Ä¿1P#´Ÿ¸¡OÜf¸r[W[Éçj+ù\Q®º¿K»„¨8æ¿¶×I“8¸î’àKˆA~†êL/Œ:\£Ó;\£Ó;|´ù 8Þd ç§m~M~àºg‹{ÍÏ}'jµ%›«u—@ÃoߎÎSωÿ\áÊ7X®ñÁv¸ÆÛá£ÍŸÐæ—cóc?WM¦rq5åâ (çpÞûjóÁV›¶Ú|°5Ár=…yS-µšŽZjeE#¿Ž[×ëtÊ[ö鯡Fè¨fV6ô‰Û ×êt›¶Ú|°5£ƒv=Luì"¬Í[T¦zsc.’€T°¬Ç‘U*ƒ_'>yþ!R8ê|* ž€ç@ááÔ·Ôz¡Z/áÔÄUÔúÙwqO9Ïþå;äÜ;5ÛLÁl33e føô¢PÛº…³¨Îy=¶õжõ:n}ßÖ¯ žÀÕzB­ç…Á3j=S­ç ðBµ^Pë…j½ Ö+Õzu÷Fþ±a§¸ÖÔÈ”©‘a}-Om¬íØÚƒ£;1© ~4é¥ð(<#¼0x^6¤ð(\N ]®ÚX ^ÐЪõ‚Z¯Tëç˘tq°l¾.c.q­kËkSmym**sþçHiZñ`m7¼I“Œ©––$ÍE”_?3ëñŒðBáàÞ1¸÷.¯ €ªóu> W„j€-õÏw\[ÿ¼áZ Ñ;ŠÂ}ûQ<¢ ä²1xRl¿lÛ~™Ù~„VºÎoäaøÚŽ¿²Ø+’»ìø¿Ô ïŸLû§Ãë¨äJ…¡µbÿø=ñ5B÷Ïž‰a|ü ÕÁŽÜ"ØŽ>Þ_ç>™Öy‡Öy†!ı}"–þ¨‹£ñz›ÇÛÜ8ŸÎKxŸQ¨¯ÏԵ̜7¨· úOëcSßçmv?þD“­îmÞš7>©Jâ=98¶r™à£Gånñƒu^,‰ zü21Á£íAMº>­ð;þvK΀¿ tywNo€uÛ£ØÇo`çCsRx¿ãŽÿû€A¬ÈóØîñ„ðBáà~apï(}»Ÿû¯8™?(NæÂQ!EïÜ{„G „W ªÃHu> Î‡@á£O„Ir*µ±¶cglhgl ž^(¼nhg0¸w޾ÝÏ¿ýW$Ä ñáUkt îÂ#… Â3…£Î‡…Áª“<…£oƒoÇ w}Û2Øk‚¥&ðŽ¿© ‹¡4çžà[]apE^œWäÅéqE^œ†_©œŸiIáW”>á÷K Ÿðû%…{\QRø„ß/)ìL##µe¶cÍ£7ÀA}à >!WäêqE®¡Wäjø•2ù™V$îqEEâ~¿"ñ ¿_‘¸Ç‰OøýŠÄ'| L"¬`Öüg!â§Að£iˆ@"Â"ë?¿>Z\ŧ_ã(t´ˆ@"þ ‰ˆð€:¨Î‡€ð8ŽŽÿšäuª‰ZÓ@ð§žßñëxïâ}‰û€ðHá‚ðLá¨óaað€¢Øƒ§ð@½Íÿy¤/¡æ}X†áÎEý$ô!Ž"Ä=Õù° 0gGááÔ·‡H%,8Ï» ?üqÏ»LSy dÒgbŠÍÄ›‰)HTn覹8¾dèEë×)7®¥Í%þKÚüAÒâað«¹8BÛJ¹ÁœÙÅvfË™=, ™Yéãæ ¼ÃÛñ—­pðŒÐRéqA‡n¡ð¨üZçrf"\‘¹ÇñÉ>,(Wwl¹ºÇó³ó³¡ùÙ\ÐQ(<*EÄ…*€pE.èǧÐà@ÞÈÇô| ÑÇo~Æø+Û¼"nÇÿ}Àƒ@è¸i¸î‚88—PþÖH}ûvtž:ÿÿ¹Âu÷¢ÁÁÌ€QZçî¼³”´ßñëÊõó”†Oæ&׋‰úDKíøß?„ à«ù³ã9ªóGñ÷@ÝÊþ¹Â'k^¾¶š›LJ#B—c–Áò—s€â”Ë9ÀqÊåp„x';FC7/´,ƒµé-µãz¼ÊàW0® QŸhñ®!NyWŒ§¼«ÁEOÒÌƸ¶RòŽ_Df¤k¤¤+vAqŸh)I¼ãו‡éŠý(\çjÁI!]#%]¯ß™ýø#¼0¸ŠûXMG“×M:\s4éqÅÑÄUÓÑÄUæhâ*ÔЉšÓѤÃ5G“×Mz\q4épÍÑÄUæhâX‚¬ÍÇæ¹_,…bv\mø)ϩΛÔˆdx¾.ùD2|-ºëøˆv¯àÍo‹d¶H†`‹d¶H†ª5òë1ò+ù•ÀÓB%GøÀzDwþñoá×Å#”ˆ—¸"d ØB‚-d ØB¾S>Äøö(wÊ>)¬ÒÏͦOàÝâØ* ”U /F] [âÚ>Qa•~n÷^Ÿxß* °ª¯óTç·£õûVi ¬ÒëêæC@ îãqU4kèsUtkH¨5$ðm?÷‰ÛÑGÅ45 °¾jn˜€ýâ¡=@sY3 »ïÞeà¾{þa àMÙõ8šŸX¨oߎÎo¨óÛ Wú]|Q•›ã'dÜùl:Õu¸æT×ášS]+NuÁTþ³ÇG|ûZ=5?¦S]‡kNu®9Õõ¸âTLÅG{|dÃÀòŸË¡àËÏÉ7ͽEø<µzè¯ë%xQíäW ¾‚\n%Pßޜƚ ðÉ"ùüö}û:n}jäTiÅ-ÆŸ¸}ÜP·)®”í½ w‡lÇ¡Ð2C%•RÞ½V)ãÄ£ÅUуíN«Ž:ßB ³fqíY—^Çk¨¢×ëãv4ByEN}ŒðÊ4´µñ•\t–zJ;>›¾‘º2ðÊ´=a¢¥pÑŽ‚¥Æ²#Â+Sr~&qLc»=RW¦Qˆ8ìöˆÏQLê+Ê?PK1«Cˆ¨•ê¼IÿDY 5Q0Ûß’©>nPO0Ó ó‚tKMb2i€˜ pz><–EÛ±,¢Œ£ õí&Ó¡@®ƒÊ‡š%2?¿B‹K*õ‰‡þ¹Î´<}M|‘(Ô²1/$[Hz²…¤'[Hz²…¤§jÉ‚Úã×BåW0ÙiÞkD%‰ZÁP±<®KÅ9¥RmíQ>ñ£©Ã¯]=¿äÂá)0xŠÏ ค_+2\÷¸æÆæ3ïc¿B¨šSqÔâZÛâR˜Y5®Çâ®CZ <ÊŠƒ§à™j]‘ž» Ý0=÷ãW(ž~‰ÔülÇoh÷DÇÿƒÂñ.OÁSD¸0¸¢vi+2›÷¸æ>ïO±¼ófXüÜúEüŽ<¶wþ*Õ°ãÿ>àAL‘zçÁ;ÿg¹’J}¢E@íøþ‰·ƒV"xçÿ®K¢:¿­ßZ‰Ô;ÿˆ*Áu5"~Éwþ)޿ËŸ—öW—eð~ìÇÙ§z<¢+è(^ G÷Q(¼¢‹(êÛ]Dýº»ÆÑUP'¨ó‰º„†.QOè// žÑÐåLáèÛ ÕzA­—Háhâ*ÕzE;®R«®‚‘ÿ}?ö[Ú Úˆóotb×Oð·H[‘Hè ¿"mE"m%ð€pœ®Çã²"‘FááÂ#Â…ÂëŠDƒK@x¢ðŒpjâu>QC—Pë‰j=£yÏT뵞+ƒÔz¡Z/¨õBµ^Që•Zó­ùÊŒü—W½»Ù_G Üì»V‡~,¬6x…oÍ/ñ€pœ ±Ç#º$ŽÂáÕ| ðˆp¡ptË)Ô· ºcýuk~£ëi¡&NPç5t ]ÊŽnöóÂà ]¦&.£¡Ë•Á Z´…º‚Z/Tëµ^©-SÑ–©Ì²ù}…Î8`î)MX… þ²¬’æ°ø©G‘P|„À7\üvÂï¿õ¸"øí„ß~ëqEðÛ ¿üÖáCã> WOg¶W3Û“Ælßó›¼׊×:n]o›ýlöW°Ù_Áf›ý°ýÕÿ ¦ßˆÔâÚŽÕ±¡Õ±Íp]0Ù ¿LvÂï“õ¸"˜ì„ß&ëqE0Ù ¿L]B±ñ°Î^6i&6ÈÍ¿ãn®äæúA8ÔúÒ„Ï(H 'Ë:áŸQ­+BäNøý¹W„Èðû!r וýêqEM†~¿&Ct(«{ú©-N&?èdqÁõ%‚žQôZ ϯ ^;(µ^¨Ö+j½: ÷/þ;ÂîgZ\²áºâ’=®(TqÂ愈 ìù·â-Ó^o:Õ±j~éPî¶É@µÝTÛ@E‡Ç ]»Vê ích_âùú«§ð²¢¡›àSÿdÝfágãÞŽÅEɤ?¸Ú[RmÞ’º6"ÈEûãÿJ»AÇé\#‘‹6áj~±ÏE{]Íï» Ã%þüÕuµkÿ•gâá•ÁÝpç(Ü#‰ÊmâJ˜àC5qNÏpî|1Ucîq…Þã #¼ÇFxkTd‡kTä—§$ |¹ÀÇN­˜ÌxÙL5ìù üUëZë¼ÇÖykôûüŠF~ÅߎÌöö†q<ò³½Çf{+ÌöW˜í=®1:\c}ð×¼ohÞ¡œ¯¸î}ÛqÏ{ êZ± ®Á’vµÇiW{\‘võ„ßO»Ú㊴«=®H»ÚãײµÜ( þJ¿Bâ\<µ¸¦â¼ÖõgÜúEºÄÓâZÇ­_ }(ç/ñŒZ/…Áë¥.zÍÏ:ûö×ü ~%ùV¿l-—m-0ß‚ú@¨ïwyÔ?¿ñŸÙüq¢Ç¯P™ÙÒ>îãv4â± aaÎOÖäço~ÆøÐ qРùà¯éVöÈ1wÂïÛC'ü¾=tÂïÛCgü¶=tÂïÛC'ü¾=t¯í¡g&jô”ûÀŸ¿ ƒ_!IP<µ6·cqmhqm~_]Ÿðûêú„ßW×gü¶º>á÷Õõ ¿¯®Oøµº~-®m¼löÅ…%Hð-®-.Á‹k~’“e øÄ&øÄ&øÄ&øÄ&øÄ&øÄ&øÄ&øfÁ‡Ù1i;. >.~¬ÌQ@Ödmڟ؟؟؟؟؟ØßìœòZ\ÛxÙì‹ ÿ*¡$þX\ /®y,(>§|p½àK6Á—l‚/Ù_² ¾d|É&øÒDðùA÷(ƒ†dÐ8ãá•Áýpï(< œúv/ƒ_ÍòwLö¥Mè'›ÐO6¡ŸlB?Ù„~² ýdúi"ôý ùÈ{”|Ä’œñ‚ðÊà~ÙÐÆ¢ð€pêÛ½à_hé ¯à5ÏMe ðŠMá›Â+6…Wl ¯Ø^±)¼bSxe¨ð.Â4¿æÅK¤VMœ›8/6q^lâ¼ØÄy±‰óbçe(Î/‚DÏ˦þØŠ—ͼäsYçÕ&¬ªMXU›°ª6aUmªڄUµ «YÅèì‡þØÏ~輨È[µ6m"­ÚDZµ‰´jiÕ&ÒªM¤U›H›•¥~-®m¼löÅåà\jÎ~‡ýn~UþXg»ˆr¶‹(g»ˆr¶‹(g»ˆr¶‹(g»ˆr³‹¨ºŒß¯C¯­ƒ7±1RkÓ$øœí"ÊÙ.¢œí"ÊÙ.¢œí"ÊÙ.¢Üì"굸¶ñ²Ùü•dñ¹òY\àâ’y´y,øäˆyöhûÅåŸqëÊWE'üþ«¢~ÿUÑ ¿ÿªè„ßUtÂï¿*êpÉ7 0à'R‹kRàÓþ¾/.ÔÐëŸ~ÿíÑ ¿ÿöè„ß{ÔáßÁN_#„Lê,ÔülP@q‰ß¡tÂï¿P:á÷_(ðû/”NøýJ'üþ ¥—‘I0islª!-pu¤y¾ø°jH‹I5t¸F5t¸F5t¸F5t¸F5t¸F5t¸F5|ð~µíøºªÇái€£W“ŸL{“Eki®i®i®i®i®i®i¼„ßÖî±ê¶ñ²ÙWÂñ=V‚îƒÒiÂG´4wd7•Î&*MT:›¨t6Qél¢ÒÙD¥³‰ÊÏntþOðü2µ¸l"ÍÙDš³‰4giÎ&ÒœM¤9›HÛñ×êÀ¢' Ñ#ÇêÀ6| óÔ¥#+Ív€O¶|²à“íŸlød;À'Ûþ3ïãkäPÒÿ¨Å5Ï|ÖIëê|²à“íŸløÏÐý*zö5BH5dOÍM5ØðÉv€O¶|²à“íŸlø7>»ÍÏ%•ÏíÆ4ãÓ\M—ZÙvŸm×ñÙvŸm×ñÙvŸm×ñ¹·RØÞÌ ’búë¸ecº0ʶ›òl»)϶›òl»)϶›ò\‰ #lIÖ ‹´5eR3œ÷šç–äà1fÍ&qÑáqÑáqÑã qÑáqÑáqQóX\8G»š‘Ç­jÙ˜ÄE‡kÄE‡kÄE+ÄE‡kÄE‡kÄEÍcqñžw$.öŠ— %?jÂ9” ôƒ­‹ˆž;®Ýï=®Øï'üþ~ïqÅ~ïqÅ~ïñkó †Á¥nÃcÎy(µ:,ÛºÇÛú„ßßÖ=®ØÖ=®ØÖ=~mÄ0¸õkx [a÷ o?ƒ§w6R–Áæ¶Íl›?Ø6°mþ`Ûü³,ƒenþpä¹¾Ü=-~à°ÐK¥–M*›T6©lR!ؤÂ,?]Y†R!é\®¯×–¡­õ°2ž÷l %Øq½¸È6q‘mâ"ÛÄE¶‰‹<a¸ß³å2ß¹ŒRž-™Z66q‘mâ"ÛÄE¶‰‹ly&.Âx¿[®ÓƒÏÜaΑù⑆êQ\¿e¢mËDÛ–‰¶-g)ÿ†GèQÁ©‰3ÔoúàÚªWÄP5|Tgéù+ä“üT¸šŒM¨D›P‰6¡mB%Î2ùrmˆþ Ý9C°¡#sCtèa±¢b3DÅfˆŠÍÊ`ˆÊß©ù1í ±¢b3DÅfˆ eˆ t‹—c`ÿ¦Ì#nF~.É–ðçW„?÷¸"ü¹ÇáÏÜ=OÊW5X_ÀŽª¯÷ ƒ{ð@á2ø¬’¨Åe ¯íqExm+Âk{\^ûÁß«cC«cü¾:6´:Ü{„ ‡i ]‚ È¥9Lò¼ãc'PÅ¢'‰Ivt¸Fvt¸Fv$Aþg/ÔÐMMêR×ÁЙÈiPª¨ÿÕ6õ ?Ñ´ù;\³ù;\³ù³‡îÑöí;2áÊxgdoÚ®Ù®ÙÙ£Ñ"ÇÇC7Ý1¯ƒ¡3íŒìŒì·éæ~¢igt¸fgt¸jgT~ðúÊ8z'Û‚¾r°íŒ`ÛÁ¶3lqSÄMÅ¿‹§FÞ¶ê‚mÕãª3…(ÎC“IoØâM±Å&΋Mœ›8ÿàãëø…þá?°é:¾Ø„~ñóûôÁMyÚàññ‘úvÓ¾,6mPlÚàƒ/›«Cwm¥éŒŠ}HuîãKQmNºjsÒU›“®Î’K¦å·ûà7þüU¼R9Ï?…W€‡…ÁƒC8Õù8º(Ál‡Žê¼iÕyÓª KFâ"|¶LX`8ÖŽXIí¸vÙ4¼Ê Ö<,0â,ê¼}Dλà`ýñ–.7`É©}@Á&v?ø£‰AêǯV ßJ¤>Ñ’´uÇ'[98Xnº%.÷Ñ´Tvü=Žx©ÀʽíÍKp÷±XôÄŽë—J™†âŒ;oô;>]™.R}4-ôúÀۃ˜žÁÛëƒ`{}l¯‚íõAÙÅfùä0ÝãWe¹Œ¥‰_é` ž¼¢Ö«£pðBàn5‚ž45·ëxi[nÛÃ`{¸l7‚ÌnOŸk¾“lxùdc½Z\ ƒ—€pªõ‚Z¯TëÕ!ÜSx¹Æ‹áÙ 2ýGd;>”ÇËlǵI_z\!ÎOø}qÞã qÞã qÞã×âÜ]dêñœÚMÅxÞ§–ÊÀ\Ýqm:—W„ŸõøuøÙkèVÜytàòŽ:K¢–W¨‰~_Mô¸BMô¸BMôøµšp™¯>¸Ä˜‘ êc{>&îƒ_¿1ÿ>øEpÕ ®új^tÕùµu]¯Á£Åß;¿âF`Íä@õq»:Ðñ‚.$–c„ÊÏP¾}´øà/=ìëç„{p_< þðˆÌëè(™×1P8º(^.Ô·K@85q’NMœ Î'jèºDu>€ç…Á3ºœ)}{¡Z/¨õ)M\¥Z¯hÇUjÕU0òø¬y«_…¤¾D¬í(‰ØtFFo&ã@gìD\‘D\ Ü»IDžÁã²"‰HááÂÑÐE¡ðº"‰ÈàNMœd„S'¨ó‰º„ZOTëÍ{¦ZϨõ\¼ Ö ÕzA­ªõŠZ¯Ôš¯hÍWfä‚ï7~Q”íKXÁGA™’uÛ!¬6$¬ðÑâÀ=râøÂàáÁ3x\6$¬(Ü#E Gu* ž‘E©¡Ë‚pjèî?v8á÷;œñÛNøýÇgüæc‡ÿÚ»¿w=ÇËÂÈÏ?\ë÷o¼¤l=ð‘þ¯)¿½+êãŠéñ²¢>Nð‘ê¿&mö>n¨pz¼l¨|trü¯=Ôý÷™Ñpñ÷Ì¡ÿš©±ã÷|tÿ5±»ã÷޽ÿµÇÞ<]vþý‡€VZ¢VZZûFVÔZ*‰Z*iëÙP#h®5×¹ WÖÌu^{üö\ç­ÇoÏui/šÎ—­Ço·^[ëUÓz]{üöÐÕ­ÇïvÞ5ì<Ø&Ï? mrÆãÝowMÔ:öóxÿœñxwè\¢Îƒå<ÞXg<Þù&]¯r"üŒ_Ÿød€› ~5²¢FÐF@¹&©¯²üŒßød¸b®ˆj,ÔH W\»FÂí·¾ê#ˆH DSl.¡u“PE†Ÿ DSl.¡u“~o¹o|2\M±¹„ÖMB|2\M±¹ŒÖM¬›~_À5½øÂo/¨¦]F *Ô ¿-¡|îëÏ?T0t'Ü9€;OááBá á…Â+ÀýÂà}»޾ÝϾ}¼6}Óžs^Ó»¢FÖ~zW4½.ž^(¼®hzÜ£o÷Âå®TðÍððèð÷š¸ µ¾õ·¡‰£ðˆp¡ð„ðBáuCÇà}»޾ÝϾ}"v›¥ã£â<á› óÂo/®fÃø¨8Oøfø¤é|³;|Òt¾Y>i:ß”½×‚}Sö^söM[{Í!Ø·C°/ÀÐyþªœB録öÜþÄvÒöØ3¯>¢ýS¨ýÓÎã^s÷í<î5çqßÎã^sÿÔ¥ù÷éôº¶î­û3.Ožï]XÖ¾ó+êüŠZïqAxžàãùùÔfyÿ[—K0,x žñˆp¡ð„ð<Á'kȵYtÀv}üÁ#»ý„_¿ïxþA\"À…¯c/~%$‚¸<'¿žø•á|Í ~ç?Ù~n=piÔ>þÚ?=à<-+y/àU&ødó»­ßÚhûõøuèìkè\â†vƒ_ߨþJ[qÙÐü0øu篴E/häkfð«[ˉDlç逼Üaàå>ãáBááe‚O6;SäJWú Ï/|²{Ûé+ }øëÏxD¸PxFx™à“…Ú.‚æÊ54wÐ\¹†æÈš+× ­ó¢é¼¬=~»ó²õøíηƒkÐ\C;¸ÍÁ5´ƒkÐ\C;¸ää'÷¿íäíÜ2=y zNømyhÇæ€|äaà#?ã·}ä¡6CE#_#Â#Âe‚Oæ§hCEóSósÂ#Âe‚Of±›CE³X³xÂ#Âe‚ç:¶Óq\À\ÇÏõOVl‡àW#+jdE0£Û14¢Cp‚#u M—Å€†+ †‹ºàŽMãÅ ¸±MãÅ€" ‚ººŽM/F¹ôéL>±éÅ~û›^|áw\lz1¢8ª8ˆ£ŠÔuslÚ3¢8ª8ˆ£ŠÔusl:6¢8ª8ˆ£ŠÔuslª4j\ȱé¨q!Ǧ̢ƅ› 9à||þù^θ ™¬f:D›;6­5nîØnÔ¸¹¥©RAnn¸¹…R¥ÒT©, ÃRš’”,Yð"JIJs{‰SLƒ4¿È ¿= Í3!È/"¿ˆPž i¾ñ ý%íÜ-èÔ/ƒS¿Pçni¶Š`‡Ë »{Qšój}E­¯¨õO·¸Ù@‚Â÷^ÝB|Âái‚Oæ§™P¢q-H3¡DãZfB‰Æµ Í„kAšq$ׂ4³G4®ih ih ih i:R4:Rš’’KMÉ%t›lñ‚ðÊàn8 ¿;ãá‰Â3 …W€{ÇàÞ#15ZäHrà ÷üÔŽ9È¥vVMxé^ =N…h¤v¢M÷^ árÔpµsoòÀýúg1î3uŸ˜›!›5÷‰¹JÝ'æÁ}b¦îs»Ìš8ÞÜnô²&Ž7·+¹¬‰ãÍMGf¤bó@Åžñˆp™à“jš4#EœŠøŒG„ËŸLCÓ·©ëKS¾ÅãèÕ!ÊõYšŠ.^a_”¦| zfTÏŒ åE*ME¤¢Ë@EJE—¦¢ Ê¿U6ªÏ¸ /`ÍgJÒfd]dÇá`â²gd]ö§¬‹Œ¬‹LY9‚ýžc¤pÔº0k> Ð29Q8².2e]dt‚Î…Ùï¹€5Ÿ)‹:#A+5òh™²0ß^Ð)²¸Háጴ)µNB‹GßîaUùBí¸Áª+‘yt†-”iT"úöH}{‹¶P–U‘ˆðLáhÙPû½ WÕzFCG鸂t\)ŒiTŽ+•Ôf•2Ì*2Ìê"žÎŒ|u`ÇUJÚT¤ +¥ +:þWO §:ïQç)qQ‘†­”†­HÃVaÖ|EÇÿš¨‘G ºR ºf´l¨£P-èÛ õíH¿×J-›ŠZgöûóBôüÁQx@x¤pA8×ùŒðBáàŽúv m ¾Ý¡owÔ·;ôížê¼GgL£Ç¯Pç=5òPáTç‘´qŒãåñ+ÔyJX9$¬\¤Ö¼ e#Ô²AÒÆQÒÆ%4t‰º„ZOTë­:Æ(}ü ­ùB‰‹‚¾½PW°ªÔÄU$i+%i+hÝS’Ö#ÃÌ; G²ÎS²ÎƒË…Ç„ÂÂ3…„3ÒÆ`]ø@uÉ:OYVÉ:©Öì8OY>¡yÏŒ¸ðhÃúL|A#Ï„m<~…†®P/hË”Dá`ÃÊ0 |{ ÎqÁ#œq¼<~v\ t\@y ”TH`цä)\άºQç)%‘]©ƒ˜ {>Q–UA®B-›‚”T¥´LE9å«tÈWé(_åãW`ÇQ¾J‡|•ŽòU:ä«|üê¼Ï§F9*å|¨è8P©ã@E¾‹J©ÈÂ3…„3û½F ã*¥akDT瑨¬Ì¥ÒãW¨óÔi¢ ÚïB}» ‘§¬‹Šä|MTçê|¢:ŸÐÄejÃã$PN怜Ìaa/aŽ—°0—Ja1¥á·ûør>,Œãåñ+ô팚‹Cßî¨Î{4qžš8pzüê<óò‡†%Ró®°Ãˆ‹€\ruäê|ü¡0xB«.Q#ŸPç35ò-ÚB-›‚ðJµ^Ѫ«Ô·W´e*5òÀù(?mpàRéñ‡@á á™ÂQç=ÕyocUäæ Ž±ë‚–U <¥ÁEÔùH<Ž1NruÊÕ«3¸D|ÒÆQûù*ˆŽ:Ÿ©yÏhä Õy$m\¡:_Pç×ÇãWhä õí};%*]EW©ÎWÔyJTzd×yÊ0óàF,xʲòȲò”¨DŽÖ@9Zr´¨Î#YçC¤p°hwÃ-P·Ç¯<Â#…ƒy”’BoÿŸj] †¸¸(޾=R#Qç#Õy¤ã¥ã8AÊÙøøt€Sû¿òžÎt>¢“T¤”TDj"1ÎÆt>QZ&!“837b!£c`f^m„ "Ü`ŽÿÜI…ÊFâœÌ‘r>Dä|ˆTˆZD!j‘ Q‹(\'R3"Ÿéî<£Î3ï"#: Eê(‹ŽÙ°ðΈÊǯPç]t ]¦†® œy'‘]÷øÓyæÝSóîÁã¾è×:ذTŠ@Hj ŽÂÁƒ—HiؘÁ Z"ãòzüªœ üêzˤ8õÿû83,þœßÎÿýüA®³É|ár™žÿñ‡smÔú¹PÇO‡ ƒ—ðs} „× ðZ¦øïê2¾«‘õõ‡Kü«ºŒïjdQ¸Gx ðˆp¡ð pñÓesU]改ÆQå)Žª—¤Àà)"VþßÚzB­3j]PkL[_ µôÚºNþŸçˆóý="Ü#Â=â7—ÖÓããcÚzB­3j]Pë5m=ýNóüŠZ¿PK¡–F-ƒZ jÙ´uQkB­[Úz¾ Â=¿ Ö'jͨõ…ZhÏh/o¨…~óýæ„~sB¿2!J\®ˆGWÄ£+¢õQâ åí;mÝP7Ôà ñýö‚Zj½§­Ï´‡O4Ûõ÷…Vä7¢Ä7¢Ä7Z?èWþE³u”xM×çÏGºzÒÖ”¶ÇÒÖœ¶Üo¦­[ÚzC8Gݤå(‘´ÜXþúŽ%mMiË­Ï´5£–B-¶ÜÒ¹9¤­[ÚzC87‡¤åæ[^_QË V­ßÏÕå1m½~¥­ë;j¡g··´õ1¥­ùŒZ÷9W_sú,i¹‘}£q~7)îŸÏwo½œN·çŸêéoh9ívã³7ÔúI[ŸSÚúQi«iÒ–µi«EÏ|êoBýM¨¿ õ7¡þ&Ôß„úC¿ù<£–B-¶^"•Þ?Ò–KÒšßQ ½éeF¿2£_™Ñ¯ÌèWæ”.×_éo&­·[Úr¿™´¾ÞÓVS£V“¶ÍH·´õ†fôö¶>Aú¿Ñ~ôö£o´Ëüéé[3jE*­Ï–ÖÛéô÷V¤o}}§­3¬ßzùJ[þMÔzžQKAëG§-ÿL£g±5à ÏÞÒÖü“ŽÚ?‹­çWZûÖçcÚrý%­xm›3²‚ÎÈ :#»çŒìž3²{ÎÈîÖ„Z¯¸¥ÒÖ/ôì µÞQK!œÖIk±¬ÎȲ:#ËêŒ,«3²¬ÎȲ:#ËêŒ,«3²¬ÎȲ:#ËêŒ,«3²¬ÎȲ:#ËêŒ,«3²¬ õ7j¡=£-vÖÙYgdg‘uFvÖÙYgdg‘uFv´.¸•òï:¢gϨõ‚ZˆWDÝ+ZW´&ÞÐlKîŒ,¹3²ä uN冿p{FÏÐ8ohÍßÐڽͨõ…~å7zö;Ñí=ûFÏ~г¿P ­Û?¨õ/jÕè7ÑZºYô¬E­õ×£Ö¾ù‘j›§'Ô:£’‡$U‹|FvòÙÉÐBÜœÑ ™Ñ ùB#ûFkþ­ùo¤ ~P?¨¿ŸkÚú­V…p ÉŠBò QkéÏYª/Óó*q¡5¡ÖoÔú;iÝý£3òÎÈ?:#ÿèŒü£3òÎÈ?:#ÿèŒü£3òÎÈ?:#ÿèŒü£3òÎÈ?:#ÿèŒü£3ò’ßLZ‹·”>Sè™FÏtúìåZ‹åFžÔyRgäI‘'uFžÔyRgäI‘'uFžÔyRgäI‘'uFžÔùNgä;‘ïtF¾ÓùNgä;‘ïtF¾ÓùNkk:£Vúì¯HÝèW‘_uF~ÕùUgäW‘_uF~ÕùUgäW‘_uF~ÕùUgäW‘_uF~ÕùUgäW‘_uF~ÕùUgäW‘_5"¿jD~ÕˆüªùU#ò«FäWAëýÊ„ž½â–J[¿Ð³7ÔzG-…pÁ^‘—5"/kD^Öˆ¼¬yY#ò²FäeÈË‘—5"/kD^Öˆ¼¬yY#ò²FäeÈË‘—5"/kD^Öˆ¼¬yY#ò²FäeÈË‘—5"/kD^Öˆ¼¬yY#ò²FäeÈË‘—5"/kD^Öˆ¼¬yY#ò²FäeÈË‘—5"/kD^Öˆ¼¬yY#ò²FäeÈË‚Ö µ>P óö?ôlF­/ÔûoôìwJ‰Å;‘w6"ïlDÞÙˆ¼³yg#òÎFäÈ;‘w6"ïlDÞÙˆ¼³yg#òÎFäÈ;ƒÖ3j!©ú@²¹øj#òÕFä«ÈWƒZ×3Zu3Zu_hÔßH޾‘}#ýòƒzÿA½ÿ Þ¬ü ý¹øx#òñFäãÈÇ‘7"oD>Þˆ|Qké|®ØšPë7jý´/ ZÁËŠ­Ÿ´¼,h/ ZÁË‚Vð² Õ¢gÁËBýM¨¿ õ7¡þ&Ôß„ú›Pè7Ÿçô7“Vð²Ð3…žiôL§Ï^>¡,ÿôͤ¼¬ØBo/ ý gÒ ^ú•9¥àõWú›I+xYéo&­àeEzÖ¨Õ¤­àe¡nië Vä7²¿‘åøìÁodÉ}¤VÂ_‘žàI¡g3z¶´À“‚Vð¤Ð³ ZÁ“Bo¢ÖóŒZ ZÁ“BÏ4z[3¬ð¤Ð³=‹­àIA+øNiIëžÁW"gä;‘ïtFß“œŸÑ›ÏèÍgðÎië µÎ¨uA­µžQëµ^qK¥­+zö†Z逸Î[OÐ ^´‚—[¿PK¡¢Dð²b«A-›¶‚—[jÝÒV•ØB¸àeÅÖ'jͨõ…Z£šÑ3šQÈÕÅêáõ0¡&ô+¢Ë­—+Z/W´^®ÜJùwE«çŠVÏ­ž+âßQ÷ŠÖÄ­‰74ÛàsAë†æpCs>Wl¡9Ÿ+¶Ð8oj¡5û…ZhÍßК¿¡5»¡Öj¡ù?.¶~£7§Tº}£gßèZYÁ‹­Q«F8´oõ`PË"\‹Zz³G­!}3äñbë µÎ¨õŒZHâ>Ü~ ¹/¶tÌhõÌhõÌHf´zf´Zg´Z¿ÐŒ¾‘ü}#ùûFzéåõþƒzÿA÷ƒ$î­ä´’ÐJþA+ù­ä‘l*42…F¦ÐX‹F8pá4µFãÔHŽ‚¿ -ƒ8üÍTÛ¼¿¦zþç#ÕóI+xŸ©6MZÁûLuVÒzC¸à}¦=$­à}¦;BÚR¨¥ÓVð>Ó‘%­à}¦#KZo)nñ>Qëš¶Îghµ j5)îò˜¶Æ j=£ÖOÚzA¸éjÝPkF-•¶^¿ÒÖõµ¾ÒQ¿}§­÷Ó7ogÔzC-ÔßzócJ[Ÿh~3zsFãœÑoÎZÁßLÇù(ÿݤoþsF­ÔúD­¥wð7ckB­ß¨õwÒZüMh3¶~ÒVð7¡üMhZÁß„V‹žõ7¡þ&Ôß„ú›PêoBý¡ß|žÓßLZÁßDÏz¦Ñ3>{ù„VðÒ7“Vð7c ½üMô+hœI+ø›èW攂×_éo&­ào¦¿™´‚¿éY£V“¶‚¿‰z¸¥­7X‘ßȆþF6ô7²Œ—Ì]l¡ghÿ+R¼OôlFÏ–xŸÐ Þ'z6A+xŸèMÔzžQKA+xŸè™FÏbk†õÞ'z6£g±¼Ohï3í/iýÀ38•à‚¼Ï ò>/èü‚ ÊÜ]Pæî3w—´õ„ZgÔº Ö j½â–J[Wôì µÞQK!œ·Ï.(wAy¼ Êã]Pï‚òx”Ç» <Þåñ.(wAy¼ Êã]Pï‚òx”Ç» <Þåñ.(wAy¼ Êã]PZÁü ¬Þeõ.(«wAY½ Êê]bV/åÊ­‰+Z× n¥ü»ŽèÙ3j¡ÕsEü»"ê^Ñš¸¢5ñ†f<ÌKÌê¥=ÜЂ‡[hÁÃŒ-4ÎÛ„ZhÍß~¡Z×74Îà)ÆÖoôæït¶·oôì=C+$xŠ”ñ» ŒßeübK£ jY„kQ«Coö¨5¤ooð‚2~”ñ» Œßeü.(ãw‰¿´¿ñvFÜœÑê™Ñê ßeü.(ãwA¿KÌø¥=ü UþƒVÈZ!?h…ü ­ø/Zó õ Ä)ÔŸBR¥N#œFcÑh}ïìóÔÒXRß_ã>ª¯Ghýõ;mÏí‚ò†”7¼ ¼áå /(oxAyà Ê^PÞð‚ò†”7¼ ¼áå /(oxAyà Ê^PÞð‚ò†”7D­ëe /(SˆZµš Ê^P¦µžQëç‚2…”)D­jͨ¥.(SxA™BÔúº Láe /(SˆZo¨…úû@o~L”)¼ L!j¡qÎè7g}A™Â Ê¢VsA™BÔú@­OÔZzÏí‚2…”)¼ Láe /(SxA™Â Ê^P¦ð‚2…”)¼ L!êoBýM¨¿ õ7¡þ&Ôß„ú›Pè7Ÿç Ê¢g =Sè™FÏôe /(SxA™Â Ê^P¦ýÊŒ~3iÏ ýÊ|A™Â Ê^P¦ð‚2…”)¼ Láe /(Sˆz¸]P¦0mEü,Õod©~#ûsñã.(‹xAYÄ Ê"^P=›Ñ³¥~Üeѳ邲ˆèMÔzžQK]P=ÓèYlͰzÀCÏfô,¶‚wAYÄ Ê"^P<°pžÜˆü¸ùq#:yn|_mL[O¨uF­KÚ ¾´‚ï[¿PK¡–F-ƒZ jÙ´uA£¾´ÂŒ-ôfð–bëµfÔúB-4êg4êô+/èW&ô+ÂMh¶WDù+¢üQþŠ(EÔ ž ´ÞÐÈ‚÷­êï†ú»¡n/¨5¡Ö{Úú@|øDsŸQ3ê/ØÉÐúFTúFTúFkâýæ¿hîÁŽŒoz;ZÁŽL×ÒÏGº–’V°#SÞ&­`G¦”OZoìÈ´‡¤ìÈt ¦-…Z:m;2YÒ vd:²¤õ–â;µ®ië|†V°#QË V“â.ik¼ ÖOÚzAoN·´õú•¶®ï¨…žÝΨõ–¶>г)m}¢±ÌèÍ9ö,¹t¶ßhîßMúæ?Ÿ¡öYlM¨õµþNZ‹}­`ŸÅÖOÚ ö´‚}­`ŸA+ØgÐjѳ`Ÿ¡þ&Ôß„ú›PêoBýM¨?ô›Ï3j)ÔÒiëè¹X]éX’V°ºb ½¬.ô+3ú•ýÊŒ~eNérý•þfÒ VWú›I+X]‘J5j5i+X]¨‡[ÚzC3ŠìíxßhÇûFûØ_‘‚`K¡g3z¶´À–‚V°¥Ð³ ZÁ–Bo¢ÖóŒZ ZÁ–BÏ4z[3¬ °¥Ð³=‹­`KA+ØRiIëžE ÕY¨Îj|FÖÓ3²žž‘õôŒ¬§Xg…ZϨõ‚Z¯¸¥ÒÖ={C­wÔRçcV#ª³QÕˆê¬FTg5¢:«ÕY¨ÎjDuV#ª³QÕˆê¬FTg5¢:«ÕY¨ÎjDuV#ª³QÕˆê¬FTg5¢ÊªUV¨²jD•U#ª¬Ÿ‘•÷Œ¬¼gdå=#+UVÅZ/W´^®h½\Ç®ˆžW´ ®h¼¡Ù.–ã3²Ÿ‘åˆ*«b Í!Ľc s±*cejýB-´Êoh•ßÐ*¿ÝPëµÐüB¼<¶~£7§Tº}£gßèZK!^>¢ÊªUV¨²*¶4êÁ –E¸µ:ôfZCúf¨¬QeÕˆ*«FTY5¢ÊªUV¨zj|F¶þ3²õcõj¡2£9£ù…FýdìÉØ7Ò6?h,?¨÷Ôû’ª$U?hµþ ÕúƒVëZ­?hµþ‹äO¡‘)42…Æ¢ÐX4Âi„ӧѨ5§F²âóc¬—QKcâü*T=5¢ê©UO¨zjDÕS#ªžQõÔˆª§FT=5¢ê©UO¨zjDÕS#ªžQõÔˆª§FT=5¢ê©UO¡ÖuDÕS#ªžB-ƒZ͈ª§FT=…ZϨõ3¢ê©UO¡Ö µfÔR#ªžQõj}¨zjDÕS#ªžB­7ÔBý} 7w†ª§FT=…Zhœ3úÍY¨zjDÕS¨ÕŒ¨z µ>Pëµ–Þ£‡ª§FT=5¢ê©UO¨zjDÕS#ªžQõÔˆª§FT=5¢ê)Ôß„ú›PêoBýM¨¿ õ7¡þÐo>Ï#ªžBÏz¦Ð3žéUO¨zjDÕS#ªžQõú•ý gÒZ¼AT=5¢ê©UO¨zjDÕS#ªžQõÔˆª§FT=…z¸¨zjDÕS#ªžQõÔˆª§FT=5¢ê©UO¨z =›Ñ³¥=ET=…žM#ªžBo¢ÖóŒZjDÕSè™FÏbk†õ=ET=…žÅÖâ)>§§ Œ¨–jDµT#ª¥Â¾ÓëkêA+XÐ >×ë{êÅÖ„Z7ÔRië·tÚ 5<±õ‰ZsÚ Cl¡þÞ.xÐ Vel=¡ÖsÚ u±õ•¶¾Ò_YöÔ´u>§­ËcÚ/¨õ“¶^ЛÓ-m½~¥­êáö–¶>¦´õ‰z˜#.ì9iëŸOß:¼}¿ßüEA§xQPúWü§ªõ­'xë©ðÖÞ:ÞºÀ[—Â[#¼5æßº_P”þ%½¥á-}ëã~…‘H‰Uâ-G"ü~ç‘8”;^‘àà:×Y¸?÷Òß³oTbðõÚ@ª¾é5ƒß/„ÁœâMëÿ¬ê¡W-…¯·“,ï´¦2]=¨S¼bdùÁº«l]·–ÁïW,o©¾r#lúS¼çd™îªº®6øõî‰ûÛªnLÝâå'÷ºjµêzÖûýú˜vÝ5ÖžâM*ë7-k ÷3Pþ¼—ò­,ƒï¦¼š¡¡pBùÁQ¨­Û£i[™¡é:O ì(\im:?wLSí‰Òë–Á1[¶[ÇhÚZÞ;#pcìJà+¬Íë¾¥ízÑ(týƒ¥ÝÔMGá˜ÀvpK»1ÀMBàÓàWíHÇàH´®3 œ?ëGк.ûzÜ„ºÁƒS¨ë¦meþtbpÄÇ«UŸ ÿ´¡z¦²êYà÷Û§dþLÕ3¦œê™ ªgÕ3åTÏTP=¨ž)§z¦‚ê™@õL9Õ3TÏ´¡z¦²ê9Hyªz$ÊÕ3TÏK{Ê©ž© z&XÚSNõLÕ3ÁÒž ªgÚP=SYõ]ÚDõ¦ªg*¨ž TÏ”S=SAõpþ0Õ3TÄ¢z¦‚êøÃU¿%ª¤zî)F{Ábðûåv"–WdÕ³<[ï,cÒ»^’¹ ÷~†ÁŸw­à£ƒ'Ò›¼ëD|Òû+ þu÷àû¨ø^·/ K‚ó1Æ·®ÀÞëþÕ–àáÕ¥7K`׉LàØû ½Ï»ïôæÀà»o›¾í(œÞw">éÝK†ÚKU–Ë~¿fR¼*Èex¶ÞÁºjšS¼V ,ë}KzÕ†ôª²ôœ"•Þ쫇OQê}KÆÕ†Œ«²ŒoL‘ Þ3ˆÂ…™ôaƒß~µ!üª,üG— þ TÕk™?Rï[*Bm¨UV§HUDfЦ:qŠbï[ŠDo(]V$ ü~C­²†›šSˆÙÔsÁ¦Î¯¡QH°©…5$ØÔó†M=—mê#kH°©…5Dmê¹`Sg)mê¹`S lêyæžË6õ 6µ@!jSÏ›Z¢±©ç‚M-QˆÛÔó†M=—mêczˆÙÔ’"6õ\°©e !›z.ØÔ‚lêyæžË6õ! q›Z¢±©ç‚M¡PjSÏ›ZXC‚M=oØÔsÙ¦>H!jSËB6õ\°©3Jmê¹`SKâ6õ¼aSÏe›ú¦æ6µ¤‡ˆM=lêŒJmê¹`S lêyæžË6õ‘Ý^°©%‹‘ØÔsÁ¦Îïe\Ê›ZÚí±MýøøxýUNx-×ÿf‹éîðå‚]©®"Ü¡™-g[žÝoÓ\k²¼e×…Íè~•f\‚Ö¨ÞPøýRÆØ»O«ysê~wã ï«Þ~`ðŸG÷ÊR™\ωKùü~1(/ǹß*ôN|9|¹;””Üà2çǨ`úÚ&‰´•q罌õxGerŽ÷ '~ŒqNøÝÐÁŒ8gœO2ÆôP I–öœaœ“ž®_kñKPñÇüÑnƒÚu÷Ã,IŠôé·D’R¾õ­}‚ÅJù ÖZ&GáD°Ü Öfè¹`uÎÍi{§üYr…\°jG:[+Çü1Άi}‚[p³…„÷Á#ñK 9{QRd¯3ÿÜν”1Öéà§-TZ‡(ÉåZ (Êe;èý ÷´S.ÛÁ?Mà;øîØî÷«|'ß΃EpÎwÇx+ò}Фˆðý|wlçƒg|w[ŽÉð6ûØ;æûÂøN⻪^`½3¾cz‘ïiïQ+œwóÝ™¾ïÞаÙ_Ï2ß[÷–Qã»q꼫#é@#"ö:kdhÛ0w™£¬wÊÞÚù¤ú$pÔÍܰ¹ ìµÁ’ä’Ük«xÎ`4­¶'£Fu`é_³êÜIõêu/_Ýùgñ/ŸõÃ<Ì÷ýZáË_Ü‘—ƒ_ßWøò—÷Ÿéåà··¾ü%Àý79øÇ´Â?¦?è}>¯ð寃½§ðÂ[@àùëO:ùÚì$|àÞ‚¿h'÷o sð>Wø?Ÿ¸ÿhR‚¿n,ÁøVi¥Å·J *y ~ëZø­ÒêŠo•Q|«´V’· ̾¿µÁ­øV‰)Ë[﷗ǧßåpÍÓoAo3¸{‹Ø|íòÝS}O§|(e…OÐûô'½O™ÞCÈDɽ·k4îýç£ÊÀÓÞɰªÕ}ÿëw'c„ÅýþüY=_–š®ÏŒ§>öÏLÑÃÇ ø˜‡Ÿ_«ç—rf)´E³6 fÉu¢ µ»Ý´ ^ìDC'zÿLV:;1ЉÙ߉µ ^ì¤Nš<¼ÔÉóö’Ëש ^êä;}‹8|y¶ë”ï}˜\'¾—æ´ž•ëdO¾›ÂLBHJ´Iðl'NadßJÆKõü)Ï8÷YP3À¥·„Ï]pïÇE \+}mh¥¯ü½'z[Ôþ«ý‡JµÃIˆ-F¾ .ŽàÅ1ºå,w‚¸ˆÙ[AÜÌ/ç,ãrþy||ûoý䂲oßù™D¸{ BÕðñÊòJ™L¦pyÏ!¿‹ï§ðìÿ½U·GÑlr{Fˆ†0×kË༶áT™“˜Òwlä½3Y¼Ãÿ½å·U‡ýüzw»í%…ì k…WdpNG Éÿ,ìÿü`j»¢ìäWÇG•Ãâ '@åÍžçì½/®Ïy;¸Ÿ&ô(„N{ÿtÏ–Â7q³Ü6®‚ú&Ôƒ ÷þÅÞêÕ‰-ÜÔ°fd"œz->["€t=¹¦àli׋‚"Âà&U¯Ë&“UWÕM£:iÍ;ó`ÍF%pb8³»å&,Eç+Iƒ?R¸–EK¾’ªšº]cIæîÄåNJÞ ·T8TCX6 °ŸÎ†YbLÒ² piÙ¬…$)œ-›%lM¢X¡”ÊR8ñÞ|çwû8îg‡µ.“jI§){Ýœx œ_̰h#œ”_øs)¾S³R$usнþ¾PˆÄ/¤‰Ö§•:ÒÜ×dcÇiåS²–RÈ[¸£xrýË+ض g2ž†/ÈfRÕ7лa½+±wÕÍàLõ”zWo ÷fÿÜgšk×Ü¿aîß;çf¯(|9[÷èÜ¿aîßæÎáËY¾Gçî¶¹%N/I\—ÓÚuOá$àWΧ\a,…Sõèµ(>·e.YiŒZeƸÖF8M7xãß2EEáTø½ô‡Zt¹ì†ÁÙ{·ï~¼ŸbKádŠK‰VN·³Þ¥)ÖÃ)WÆà\·«uqvӒŦh#O\ûÎt»†Ë=,…ÄNyíÑw³’X¡  93«Ô9 F´JM#ôNt»ë¤ïe«TV18IúT½íÛî”+®¦pÁ.4•íBµV8¶ õNQܺsìíçìíí‰%ø8{¿ÊUæœïÆ´ Îör¾Gó/Âù"°ê$ò½EKûKÚý\'ý`O<Õè#nŠ þ{[+ÂÑâù{Ë)†%o*Hïrf—À^ ò“Ài”Û§=ïìM2³¡<ÚR8QP÷·NëÊ8"´€:Öÿ¾ÃsaAžó‰±Û?—l0_Úº2’C¾ŠÃY„¿ Õ~îi¾ùÁTqû¸0ø{¨ˆ%«(N¬ˆ´“ÿý|\ãI¥r'ä ÓTÃD8>©4¼Ô4Õ‰žTº 5‡§'•¢xGËà½åðg| ©mªV8Iöa¨l[¯^÷ÿþú}ÍžÒú žÒ‚E]Ò;œ´˜!ÝT&ÝrŒg8 d»:”é¡#±uáø<Æ•À'rc¶wt#øDŽ`lj_(7¬ÅbÉàÑyŒsgQ>ˆgQ"œR(RÿVúŠ(g{OËY‘NCD ‘&ø²6£BÕåM[1ÒyÚC´Óó'["|ß0Qñ¯êœ§ ì@áì› ¯w…ßðdÝo»ýèõ5S"µZ$˽é~;#w…79x“‡ÿ{[á<}t‡ßo‘àÞ„{úG4æ’ÝÄ?{¹åß’kÐ’NF€çÌ)þ ü+ÿ*À/Õ×[fððÖ_ï«Jü‹iÔu ñ'çÕ²vk†Næ\'s¡“yW'ï«Nû‹©Ät&sa&•Hf2ÃLæÜLæÂL6;¹ßq†xË™;*‹~Î}‚w‡/–왤¸X²çôã8r•Ƭøû[ü*3úŽ þn¬ßßâWiœs.ÏîÆú:Fv•ÆŠïøUg¸VàÌ>Á»ß$pÆסû ÎÌÛCyv•Æ!Êó«48åÙU+M¥«4΄ÀÂU÷âUgF`v•Æ9÷ ÝΜ~*÷ ~ÝKàÁš†ÁsƤkÜŽ§LÓS8ZÁþ¤„¾­•¢> Ö-.¨MKà„À¯Be&°Ñ¾°­ã½cßW±Là^€#û³ ô¿ÃTj%°¿BtkU÷ ¾w/p ÇlÐþk³vùÚ S¾¯¬éâ 8fƒ©ì cŽ.m'|ƒÝa|~¼oN"åM¥YïŒ ¦© Ó޾¶¶z×z¥¼¿®uåBmüåµ¢p¢;ºjPKÚ‘­y¥ûžÃ1åÿyu+RÞ6}m(SÞá_7Ëâšg½s讵½NiÕ£[bÎYݤ¼t?ϱý’ÝÏÃ(Ïïç9ÇoÙýxÆ·ŸÀ[`b^w[¨]?«ÿoêU¶PïB+£üaŽC ‡¬D8²¦üA?mj$°µ>`p´[7mÕ5}'ð§©l§…ÁKÖ”wë6úÖŽ÷ ukö 0D¯ûìØ ºÀ…¾þ7;öš±cuÕf~ÄŸÖÐ4ô=ƒcùéü‡‹K·q¤gÇà˜?}5 âžÛÆ 5` œóGUƒÈŸ¾†€"œ¹Ð}ÝÂqrÿÜŸù¿öÉqâ£ü€~;UŠÂ úʸ¥¦(‚¹jëžõŽùcZ·èZ3þ¬<ÕoÖêpŠš•ô›®ÛxÀwóGÕ¶nœðÇ»9p ÔMÔ^þøÂlÿ3þ(™?ÖW8YÎ'ÎŒUŽùSûäZqþÜ08â3Ùl}?&ˆòG5ýÀáûåg0 ¹"ë7go §¨)0jÕ¸×2‹¿'ð#öì'’Æ%§;.?Îp°-"[f÷·¸~ËÁSþ õà„TÜN•? •‘îÚxl„ÓýÇ >‹w\ïŽ~;îjßíÍëFÁ‘¸Zöæý!†¶í¸ý¦êðáIËàÈ>è¼cdáÎÄ~süê†÷žòGûÃÒt‚lÿq5O¨³Þ¼õ^‘?¶îåYœ«s®2L‚ÜzoŒÜmrëº |7LßhÖ;‘S©v©ÃÅüñÊÙh8+ÂZogõßjÇ÷Á¬õo ñÇôU3Ü&¢i‹nè#Î9þ´]×yûZ ½“ýÇÛ¨àèÕsíåO ¥?d_³Þ‰ü(ꇴMå ‡c6øã¥ê¾£ž§v¼v2¤ gbÒÝç|~S±Þ™˜8´æÑ–ºt ±žå2årÞn*çíøR •¡üTÈÛM@ù)—·› y» (?åòvS!o7å§\Þn*äí& ü”ËÛM…¼Ý´‘·›Êy»ƒ”ç÷Psʳ{¨óy» ”Ê”ËÛM…¼ÝJeÊåí¦BÞn¥2òvÓFÞn*çíÊƤòvhí)—·› y;‘À8o7òvIÞn*äí y»i#o7•óvÇV0ËÛ +˜æí¦BÞŽë–·› y;Iw¼ÝTÈÛetGš·› y»i#o7•óvÇ)òv’î y»©·“(OòvS!o'Pžæí¦BÞ.§µ“¼ÝTÈÛMy»©œ·;º_²Ëíåùåöù¼×IÂåöù¼×IÂåöù¼¤“Øåöù¼¬“hÞnÚÈÛMå¼Ý¥/äí&ÈM¹¼ÝTÈÛ ö ÍÛM…¼¤“HÞn*äír’‘äí¦BÞnÚÈÛMå¼Ý!Êó¼Dy’·› y;‰ò$o7òvåIÞn*äí$Ê“¼ÝTÈÛMy»©œ·ûƒ}¸¡p¢“HÞn*äí$DòvS!o'í$o7òv"åqÞn*äí¦¼ÝTÎÛ¥<ÉÛ ”§y»©·(OóvS!oÇvž·› y»œ…šäí¦BÞNrxÞnÚÈÛMå¼Ý°P¯²…JóvS!o'x4o7òvÂnMóvS!o—÷ ´¸[“¼´[ó¼Ý´‘·›Êy»ÿ`Ç^3v,ÉÛM…¼$?$o7òvHÞn*äírüIâÚS!o—q¡IÞnÚÈÛMå¼Ýaý†óvHÞn*äíþмÝTÈÛqýÆòvS!ow?4o'ò‡åí¦¼ÝTÎÛýþ(™?$o7òvHÞn*äíþмÝTÈÛ•’·“ôÏÛMy»©œ·;n ¼!!y»©x“,3’·Û†§üay»©·;Ê’·“÷š·›6òvS9owЛ§y;É~#y»©·ìš·› y;Ζ·› y;Ù›Gy»©·“øÃóvÓFÞn*çíò‡æí$ù!y»©·øCóvS!o'ð‡æí¦BÞNæÊÛM…¼¸ÿ°¼Ý´‘·›Êy»?°¯YïD~HÞn*äퟟæí¦BÞN޶ ¼ÝTÈÛe¢-iÞnÊçížçrÞn9M $ú¬ƒ/G È”_^‘óvË3?øä-œúJàÔôŽÀc<ÃÏ»§ˆ’DG§HdÙ).ÇÆð)âûÕ²SLÆø S|Ý=E”¦Ù˜¢0xŽg²fyNâà¸RëàsÎ5¼On0ø^þÐôOŽ?I%™É @ïlŠéµ^§˜óO9:¸+ÂL1ͳd—`LU Æ¥©ŠØ;çbãdñº_‘ ¨üaE‚…)*iŠ(Ú_P$É_`Š/û¦è¬ßÏEÊ"…“).QÃÉ%±¬wrIÃ#,çënYÄÑšÿ"‹×¼,úN8I(/‹éa9_wË"xüY¼æeÑw"nI åš—ÅdŒ3,çy·,êx£è|\mÓÃ]Ès^}'Û¾oyïlŠéŸ`ŠO»¦Î`†»#|çƒQË{§²X ýЉ›†²‘‹±w"‹xŒ°œç}²øà膕6ÿ‘,‚0ÍYtS´VࢳW;4 Χ˜Ž–ó¼[;pø ‘¹9/‹¾iÓè8h=é-ÔdŒ?°œì‹`_ü—Ŧ†³ä#\ÚM'M±v+°g½ ûbã¦xݽ/ÆÍ7Âws±R1< pa_\®¨e²ØÚv=p;éï‹*‘ÜßÒ»¹ˆ£G¹H<9.úN¤)¢èGž‹éÁÓÐçÝ\DŽþÑ)’I–‹ZKû" œó\LÆø±Jl6ÌÀ÷Å|±?dÝ öÅè©'\Äžzìï‹qŒ¶³o_¼_Êà¦hÁÙ5¹}1Ädù¾xòÕ ªá½Ó‹Äð5LQïbÝrø!.Z ¦8aŠƒÛ4†Z³Þùã}`CmDeT9*³À—³3ST…¨Lxv?‹ñœfl!ä—wÔ9íˆã¨8Ž*Çq6æÎfåYJáÂûn-b‰h/ô¾íQÑUŽöc/‹ödØëщì•z'„¸Ç„N;Â@j# ¤Êa ãsGa üÜ3b-ôÎAvćÔF|H•ãCGU‰e殪^çæÎzgsQ¤ÓŽÀ‘Ú©ràè(ßIàèÐÜï% '*í^:íˆ(©ˆ’*G”þƒ¼_‹ò.«s©wÂ÷{Üé´#Ô¤6BMªjúò~-È»Êè:©w¾•ù€ÔiG JmÄ T9uPÞi *3wS òÜ¥ÞßC¤ê´#8¥6‚Sªœ:4wœÊÌÝVu+Èûµ¢p¶Ç…ÖiGÔJmD­T9ju|Í£¨UnÍ;e-Î݇³(œ¬ù{lë´#œ¥6ÂYªÎ:®çQ8+¿æåý]êíq!èuÚçRq.UŽs”wçÊÎ>¤û;ïÍ=DÃN;`j#¦Ê°ƒ|§°ìÜëNÞß…Þ™¼‡0ÙiGdLmDÆT92vï42vÔ¦•zgsñ³ÓŽ™Ú™©rÈìàÜiÈìÐÜYe޼¿/µÓŽXšÚˆ¥©r,íì:Cᢞ—í:©wÂ÷{Äí´#Ȧ6‚lªd;(îO‘ pL!çxönï…³VïS¼ål.º†¬êÍàû(¤œ&pæfCá˜BÆ9—V7\9ò¨$»pB!œÌ¾S&rʹw^… õUëï¢^ßz =í¤Ñ œcá{õ³´mÏàD)çFvµ@!0a<£àŒBuß6Lœ¦ú¸Á롾®Ú¦‹§ÑœõJ¡³Þ¹†êLßß)eÚñGżÂÉꜲëáèF´†to8\ZCµ°†¬?NVk gRf›ì¬ÛÖÐe¿”Á—"~@Êð)N÷² g–ë!O¢ºfp‰BÁ«¤lëà\ÊG£õ­ ÐËN éÖ‚)á;¥ÌiêÁ±¼'2NZË5µ?JÇmR Î¥¬«ƒÿÃ(¤M G¹S¨nÃQî0Å (4í¥PSÇ3¹¦ÃêŒîYïŒBއZ°½ãk¬¢pN¡V·|/óç4¹'¬wB!·Ûkßz ½ï•²¦c|?F!]»16-ëé!¥Z#îe½mÖ;—2¥:n5>øÄ8¦“pçŒÄÝä 4õ×NM­ëd7ùÒ÷2 Rœâ—¨©O}Õ_ 'òÁ¥F çkȪZXCþ¸Ÿž¬¡Î÷5Á¬¡ŸÇ½ã ,ƒïÔÔÎ/kš®¡p²†j§/úFØËºªïöþä×ÑÜ/ÓN~œµ0P8ÑÔ?iŽÌ½ýúk¯=Ô*HâEøÎ5Ô8SÅ)[ gkHµ­æ{™j*Ûª(ãeõÐЮ©k_©/68¶‡·ßª:î·¯nƒûk…gpö ¾[S7NFœP¨©úÞÖ­ ©Ýè[ãï*»ÛëžÛCÆß[1@Tàx i'eƒŽÛõ?@¡ª½k­yŒBÊqQèÙÔá-ÑJžü'O¡…ÀDÊÜNØv¦§pf¹ ß?ßþ ý»w ©>º6ÿVG¥Ì¹öŠõN-F‡åkhqëàxW€SÏ5\‚Á)äöȺQpì ÀÉ^V»·l´HjµR¨Vû(äöÑØ ÀwKYÝÆÃòÎì¡ð_CCÕ;kLQ8×C¦±Ü/óèv¶as'ñ!Œ^¼lâ¦` ©½R†OH=F!JŽ Uòº¿%­¡ôøP€ šÚX¾—Õ¶r¦DõNv{·ÎM­¦ÖP»s ™aˆcl­!çœ{tCá”BmeûÞH¾}_(‹¸D!Å,Æå"# 4€=äì™®g½v°Ûw{mj¸;h9ƒ¦‡åœØCNÛŠqêà¼R¸¤‡úAò:´?ÀÂÉ^V;“Â@eέ õ{-Fcá& ß­©UßE›­Ììöá-™BnR8§PÝ÷ _Cƒrn;„NâC½sm$+¾!Ðü½7NÝڊξƩý!äm<êÿ»‘suÛÉ`Å(¬Ó=…‹QXn1öÎàt ˜õNâÔÎ¦Ö t¥‚0ªzÜ»†nƒ:…õ¾£² NõÐàϬmê¶i4¼`Õ5§ñÑxýˆ’£°:\§v¿:…Î{£C —UDøî½ÌyŽñ<çs†BË[’¦VnòšÂ…øÐrY‹1úsj-…¯cð&äËÔ÷RŸ·}зwMc §ãò–AK£¸2–ÇkŸeêÓó¶3z¨ñá¥$ï8oä\çrÎu¿Ì Í…œë šs9×¹s…3\ð[iÎu.ä\g Ð\ȹÎ9×¹œs=@!)ç*Pˆæ\çBÎ5K¡˜s 9WN!)ç:oä\çrÎõÈr®œB,ç:r®ù540 9Wa 9×y#ç:—s®GÖsÖ͹΅œk–B1ç:r®…„œë¼‘sË9×#r®…hÎu.ä\% ‘œë\ȹJâ9×y#ç:—s®Çô˹Jzˆä\çBÎU¦ʹ΅œ« ‡„œë¼‘sË9×CRÆs®Ò"9×¹sÍ®¡ZXC<ç*K͹Î9×¹œs=,e8ç*îe8ç:r®Y Åœë\ȹf¤Œä\çœë\ι’2žs•(Dr®s!çš‘²4ç:r®…„œë¼‘sË9׃¢9W™B(ç:r® ¥9×¹s•(Äs®óFÎu.ç\é!žs•õʹ΅œkFÊÒœë\ȹ r®óFÎu.ç\íe,ç*­!’s 9×ÌJs®s!ç*­!žs7r®s9çzHS󜫴†HÎu.ä\sk(ɹ΅œ«¤©yÎuÞȹÎåœë¡5Äs®òB9×¹sͬ¡4ç:r®‚=$ä\çœë\ιÔÔ4ç*Qˆä\çBÎ5·Û'9×¹sÖs7r®s9çzˆB<ç*ÛÔ(ç:r®9 %9×¹s•í!šs7r®s9çzPÊhÎU´qÎu.ä\EÏç\çBÎUÚËxÎuÞȹÎåœëA)£9WÙB9×¹sÍè¡4ç:r®R|ˆç\çœë\ι¢ϹJ"9×¹sÍiê$ç:r®ÒnÏs®óFÎu.ç\íö<ç*Rç\çBÎ5K!Å,F)ç*é!žs7r®s9çzˆB<ç*ÙC$ç:r®Y=Ô’×As®Ò^Æs®óFÎu.ç\jjšs•w{”s 9× …Òœë\ȹJñ!žs7r®s9çz$N-ä\¥\ɹ΅œk> Ë-F!ç*Å©yÎuÞȹÎåœëQ=Dr®¢Â9×¹sÍÙCIÎu.ä\%)ã9×y#ç:—s®÷2šs•÷2”s 9×\|(ɹ΅œ«äuðœë¼‘sË9×c¾=˹Š#ι΅œk.>”ä\çBÎUÖCiÎõñññú«|üÜõ±ûýˆp÷Væ–Ç·jyÅÿ¢óyÜúüïçã[á°"gú ½Ý’>%ØÙŽÂo_ïÉ[~32* þ ãäw—ÓïxïŸ)Üij7Gßûß?î#¤ ~±wkã[ÞÞ´uÝ®(£Y‘³óîp·Ò·âÙyަï¯éI}m“ÓëVÆ÷2®±±ßÅ8Ç9¯z:'ŒÓn‹\â߈qþ¤&eŽçïw¶KÈ3NÅ Lì1Î+ça¹ Ž2Îm^]ß³Þ9âõ©˜%øúÔH:ÄŸÁ1_ÇóãVþäÇaü©UÝ3ønþx¸¢p.XNüþ´Nõ8žÂ1¼¯ëôS#ñ‡½'ñ§iœua‚¯KùXÄH‡ëdz'Ö]׉‚…Oî“+=¹1.œwdâœZ¯ŒËìÃ×Õpot„ïfœmúôÜÀœ`©¦í¸FtD釮§p¢ý)f½Î1.=7Pbœ©}v~çt"ï3Îy±Ú¹à²FDÇŠŒKޤç~4â5îEû¶2¿ÛëA€ïÚÊœ¹ç+ gçsA-gœÛ&´TÔ5³•ùŒmÜ2Ê8z衸•ÕNÛ Œó‰·ñô:èÝM*¾5読ÍrÚãÜzœÓß2¸Ä^u8JnÊÍ(Ô®u^ûúÖ¼õ´sÃs܅ ¾ƒ½Ž»Þ²šÁ {þv›ì}z”ªgp€sö:þòÞ{mšMö>eÙë¸+³×›’ .°nCÄì5Æôå1{;†è5îªçÝìUñÌÑóAöúr þÚõœ•Þ^/Ř½­wùÕ@ᘽƩݮÂŒsÞ¢óq"… w‘‹'qumùà}Œ•Õ®5ŒòŒ‹Fu}'©]'–P¯t½å/{gbÐ8ïaœÏñ¥xï‚Úu–×;7²¥pÂ8¿³ bŒ; þôÇšÁ¥mqÑ ˆq¾Ìmè  $öŽg¼Úµ½Ì¸R N×mmEC§7¹Ž@ùq÷~i¡X1ïaœñ|«ƒ3ÆÙÆöĸº.À 㬰‘!Wûc½¢J2Λ0ñüëØ;fœ­üÊ %x808ö3æ §½ h×g üón‰âš>¦*[ï³+Hœï„¶gbÆÖ騨ŸeÆ9#¯µy×¢a½cöêÊÏЊ>»W¢¬w¬PRqŽIDÑý,'eo8O·? õÒØK”ÇvlkÁоF×o·çص­âð]v¬u‚ÙÖÊR8e¯W©œ½N!W¾ô žxöÞ–këaËs¼fçê+¤‚ã_´“ð ÿçs…ÿó™ÿó)Ã_½l ~#…'o„4¾U’ÅøVIäâ[#Ðnü*¼‹hüÉ¿5ýZßš~ÞRð–Ê¿U’øøVI°“·à·®…ß*IyòVA˜“·`Ž·Â? ÇB%ùo•Ä<¾U’æä­‚8&oÁçÂg oéÌ[²ßúç "x.¼UÔä­/x+3Ç÷ÛËãÓïòghO¿k‡ÁÝ[Ä­mí~úíøÝšúx¿MÐûô'½O™Þç`Jî*€Þ>ª <í «Z“‚ïýNàdŒ ߟ?«çËrPþg¦ðùBœ|Ü€yøùµz~)Ÿºðü‚„ ܽ•eÃYA'jw'z»%ðb':Ñûg²Æ„x±˜ýXËàÅNè¤9À“ÁKL0ßi/¹|qßÀà¥N¾Ó·è€Cfùé[ê]‚ç;1¹N|/áŽoSèdO¾›ÂLBÑ«\Ê+Á³8…‘}+Q/Õó§<_àÜgAaÌ—Þ ð9?“§hP­ôµ¡•¾òcüpS Jùé#;Eú!Yß>§ð‰¾‰”w_xp?Aðž„R’‡ª_§ üzc{K¿TðÝò¼xðxo8™°]ÞoOù1Ö!æÉÎ`x¨Ú5™ÀùL´²'qðf )¤ð[. ÁßüR ð"ý|ð&þ’|£ûÜà ‡|—ìýöÆXЭ¸÷g{Hwß·Oi;q ­]®%Û²£œYÃù üž?6¨`Þøù}f…{B¼‘ÃÓÖ‚G¿gÉcŒ„ ½ûîãnd’1fÙÀz·q3ËS(œC7IO!°à"œS¨§}”)Ô”(dâ’ãpßåèU¯ÅE œÑ„ÈuqŒ/ŽÑ-g¹ÄE¢+¡~Ê/ç,ãrþy||û._ øöŸI„»·0!T Wr/¯¤%fÉ.oläwÑàýžâ¿·êö(ÚfnÏX.É¥†tOvIàüp¡SeNâ™:K{g²x‡ÿ{ËïÝûù!õîvÛK ùÁ3¢ü‘ÁuˆÁÓjtÿÌøÿü`j;| êäWÇG•Ãâr²&…co„söÞ×燼|ø[ÚÃO?.U þ¯ðÞ?¾V¿çqùK€©\\çà: ÿtûçoû&ž¤¿í.T}SÑßå¦9üKxëÄ#z¾<¯¡ðBe.M–V`E¤p€¨Ôúü§Ó‚K°Î$\J7œøàý>±f~"œF ×Vð!|Ê{ý®8‰ð?T¶‡§ôàïú-I'ÿû w×Ï»?Q˜¢=‰üéçS송ᶆU¼wêç<øü’9ñïòý…»¶epò嵿Ww-Js;Ìãù)3EŽ bStjŸÎDÜ(Õ‰‡‹üw1 Î+_pôÛ™ÞtYC yÿfou¡‘jmÇ^m8}Ë[ üq¤Ó«7“ÀÉÆä×Тœ¿éƒfàÓüRüB?ĬԠÖOí8ùÑ'-@¿ÁónŸ;¹gÓ-×5~œÙ£†>û5Éׇï; ÷]¤æEŸ ß܃÷Ѳo}0ülðÝ¿!4¼¢nDxƒá¡xß?ø6ä2hþáM¨ù`Á„°šïðYë¼Ä5V–85p¸ qáq"q^àôzœd„K«náû™Ý«[ pjùïeŒlŒÁ‘)¼áˆ£äð¦þÍàfqMÄÛÁœ,moòâ¼ÑOŸ+]¯ŸM$púù¯¯%Î_&ÍÇnõu„oÀÙµ¯¾l¼gp®*UX6\–ê~`ŒKëuÍSYjD8¬ÅQd©^ ÿ6”½'Q– rÏ|’ð霙‚`©œ`5 .meZ¬¸´NùãèÐëVÞÊšµD9 â7È[Y½~Ñ™ü˜VÞÊô xïl+s{†·2[·|î\©èÅÏà[™måÙV¦ukµ¼• ‡³­LÝog[YcÆe]hM‡e᤬¶2>j$Nµƒ§âH'Hœ^+˜œˆ_/neaAHp"~Ë1RTâ–ռŸ â(LâSœJœ8+Jœ³!z çç4È[Ÿ$q²ñXÛ¶åpú–_¢Ä9ãB18—8µ„Z™Ä™z .%pIâ:Iâê¾i4ƒS‰«‡¥*Y88ø:S‰ÓJkÙx´ýÀçþ“û²P_1Üt¦apaÃëŒ`<>„3D8‘¸Åç$>„!p"qÊÈç¾a8Ýð–oˆ˜Äi8ÈöóçZ’¸Ü&L„‰{ð_Œt²Äµ†Á¹Ä©åkaƒfçîZ¿hnUÖíÀáLâº%²ÌmOT„s‰3Kä_°*MÇà\âîÛãt«5ƒ3w­:Iâü‘“Z18Ûãš.˜oÂ× ”×ïÄ+ëû^gŒÇŽ‘Ž –U!šõä^ÉÚÝN%®2gÅÞ©Ä™!#q•àTâ–ã ˜ÄùÕœx{çÿ 9gö8ÌÂÍÉ9 i2Ê œKœmÚL€D+g’¦îå Ž1œ3¥2µ€¸ Q²UijÃàB€dY´\âbx3Ây€äžÇbgÚ5Å”ÀH´fƒ¬Ê¦kr’V‚³‰ÎHz%ÂI€DéŒUÙˆp YΕ$MjÓžÿ›—•¸Pœ²éÇÉ´•,q¦ãpAâ²~œÖÎ$®Q⌱=ƒó=n_ ×@T<Âøq­ápîÇݵ “¸¡mã?®g Ve«yïûý¸V)Ö;•8/rÁ —ü8;HpæÇe$ΘV„7™ø I:¼’àTâ–È«oò«91JÏÿÍËJœQ{ü¸sÆ3Ëà™ÄùãìœK\ÛªŒ×pfUjÝe¬JäÇsÍ¥Þ‡Iœÿ4Á%‰ëe?ÎôÎý¸åãa.qI "©Ä9uºä˜Äu& ,À÷ûqƒ6lð‚íÙö&#q½’àÌËDNƉ~œÍX•ÚHp$q!Q"ûq‰{-IÜ.?îœñãúÎìñãιXå²lø×Åes-H\-ïquk8—¸NÉ‘“®± Î÷¸%j$H\ê¼–¬ÊAöãà‘Îý¸&,Z)íVóÞÙg–»„=®AŽØYôãµä’W³Ás?®i‹zËËJ\k3ã´×‚Ä5¹È‰î$8Ùãô’/b•°l|Ÿ¿åðþ½Véeú-ä‰ð—éY®É{™þÞŸòU#Žõç—1²²‚6XýlŒÚVë†ÎÆޒƘã1>¬p–7K§ø1Ýá¼8yëõñþY˜P£©0æ!äI8ü‹½Õ«ûðÌoDß.è·ÚdlÓ pžä\ê…R€µš+Â%ù1™8H ZÃiÚ:ô~£¶‚3þøài½›sˆ;©øÚ¹šQwDø#}K b)šW|-‡ÏÞ¸©‘«¹â²ùR¥ecs˦ãp¡žª? ß+ú…Ãàßk©$6sËLi9¤c}x„sS}±µgé€Y¿ý¦~úÚr«ŽÀ+Óð¹_/nÔRÿøJ·W|îÜIJ4—¡DaŒªUCq•déƒ{»<.Ç-IáºÍ8ˆ`M%ð/®W19Ðéa¹ÛžÂÉÁ¾óûWó,Oâ¯`dðó¯ŠmL˪³,Í1É'7†Wݰ\%Á>æO—M„³èw2FöÁ{Î\­UfÏ€â7€“#¯–=Néjô9ã’r.÷b »j„“›(ªaÚä£Çkn Õwo‘¯!þþ%¼uby=¤·™D8=Ü%|*(i®°-*Ç·1¨Ps„“×)\°(îßúq#ÎÔJà4ëk“Þ—ì‡W>·:#ŒÓãÇ9ÇE¥si Eáä,Å;Z¼¾- !.l ÷ÄÁãT“üñ]müÈùí¦¨)\˜bBÂáJΦØÞ#o…)üñN±·I°s9¢Rš¢V§Ü÷ûNϺ\ÂÁ'yO¯…K>åRíºì¼Ã™(÷±œøññãíø[ 'S\¾Œésöë]šâRðóXÐVþÈí·èB<>.GˆJ>@Ö~ƒ¨b‚ë§-É!¥!¬ à4?ÕÍL¿uÒ=P(ÂIì±ê:UâÓ㜓EÛ˜S&&£9œMQ «Bž‘¸ &Âéröè{ñܨ¤,ÂYäF7­4Ð;/îêû6¹º«'Ç’V½í—ÏínO… s… ^¬ir¥KPg‰á4vSœ ìµ]޽-‡3ö.Õ×{-x çìÕõý0 Æ^«Xï{m#æLü†7óÉRÂK$LÍ᜽÷*\÷Jž½s½¶Í|E a' orcüγ·é2;©j¸ ½­ÌÞ¸K\`ï½L€Ç]»"ùβ×y2{“ê¹Î+,9îZÇ "œ²whôRtI#ªˆ½ßyöÖ¹œMÝN W ©sAzÅýg_ßÍ^=¬·àFxþnùIø˜¹ep.ã*sú€CÎKrÅc=üwDåpVþÖ-n(ã{¼O1Âöj«ä†”†“º¸.Ý@¾rÎÍí½ÝÀ᜽ýš¿ {ï—X|—c¯7zLËàœ½f0'ySŽ!Æç;´ÍT\·Èîø’Ù«ûåärR¹?KS±ÁÚ{[+Âiøó­fõ_”³Ï•÷\l–ó3DµKá²>åÔ.‡›\=þ+Ó®uÃá’3H»®sÿCíšÂ™v=å”þ 2Œ[b¹ ƒÓ B§?‰§mdzœ.wu¹â®žÃ ¯ÎÊwE»cÈ0né$®¦)Ÿø)C„ÓG¾:«Š‰àH:¡:«îre0÷g½\­ÀD+ø^€ Ñ¥Õ_K/oÕR8goU‹Î̲0¸À^1 ~Wsø«ÐI¦àÎM‰ðÛ—¦Ç0.ÞЊQ$°+\b¯¿5ç.*ÔuŒÎÓ_îÄj›sf´à,¸«—oEø­qŠ'‡ðÓŸOö»” ÜúÇßs¦ìq 2{3wÝ’úGü:+|Ñ8ˆßC>ĸ8À…+CÄÍÞϪò€ÓÀ)|©"¥ „%ÂùGÖ±÷l¹¦„«]]ñ€Òp¢#‡³2jY‚ü"”È^€ç§È¥7ZSNámʆ¯ãWn ®pÎ,½|í$žÁÙÉ ­êäS5 þ?×Ë’Ù¹Œ ¹¹£•#üæÔÝüôÐ4áì]÷ò@i·–¼µÝÛ2xo9üù-}KÙ¦jCvãïsúàa¨l ljýï¯ßÉÜŃƒý½z¤÷jýP,ô¾DT/SŽtS™tþ÷ËWu™ÐÁ´Ýrç°§é$‡ƒ#<x¢>Ýi:mõé³ÁÅ’d´C –äõ¢€ò{wƒ¾[¿NàdÇœ¸Nõ¨åÊÌ’Sk+ —+%pÄg4uZ/jM… Ž$Ã93¾0´ç’Ñ8uµ \ä¼[[Ó28Û­mÛGŒq·æJ:J†S=}Ü3N$Ão ËUÖD2låΖdÜߢ’a”­ºV)6x® ìr˜nY2FY2–«|¹Ÿq—ÐÚÏ@ùçÝ:ihZ?d'5NöŒÞ{Ê-— g·÷ N5—aÓRÊ·¶ö…Ÿ8Ù­µgÜbf)ÿœ¡|8¬¥—(ïÕ þ(ÿ²×ˇ'ðý”÷‡UP8ñ­…ú¡å»ußVÞuÓ ŽuRã KC)7ÑI÷ ŽøS{« ßš0ah{m8|§Nò,±ŠžñÇ;Pë[à\w{]Û*ÿ#â*{M8~=Twaþtµó ZÛ08²v•êªv9¸ëÇ{F[uMßuâžÑia𒵫å=#&$"œFHt“ìkà(\÷ùAuAÞáúßüŒkÆÏÐU?˜šGHœ1ÖÚ¡ïËÛ”'ÕŸ3˨ÄÇüé«aè:3k°ð!Fçüq®ºÈŸ¾†ðN„³èw_¯—Bø[½ï^î÷Þ!?ƉfðúíT) 'üéý]‹'ÖPwÂÖ=ëóÇ´nÑá.ÌŸõƒ§úÍúøL»”Þ2ý¦ëv­Mà»ù£üe‘ NøãÝPˆ£ÜðGíå?¡‹ÁÿŒ?Jæõ9 Ëùã$ùŠÃ1jäNÍ#XëGüq&›õ§ðIüQ Üž˜À÷ËÏ`@sE8ÖoÎÞ4p„ ¿ÃàN`5îµÌ’¡ÿÄ>€à$‚Õø2gÝqùq†ƒm!áØ2»¿Åõ[žòg¨'¤âþsò‘ËŽ‘îZ(ƒJàtÿ1Æ‚W§!\¢w— 8îjßmÑZ‰pb¿ù ¤í¸ý¦êåŽEGöAç#kŸ²öY†÷žòG;ãKyZiÿq5äít6Úb»å¢fÎ[wŒò,Ù5¤4ä§õÞô¶ÛäÖOønþ˜¾Ñ¬w"?>ƒ²IA|~ŸßÖÚ28âOëí¬~àûOÝù‹÷ ñ¦Ï"L_5Ãr«8è†>òçœãOÛuM#Û×Zèì?ÞF@ƒ£wû? Ž–Nàb2=;µìÿhgAuw¯ó§ ö[ËàT~ša9§ð§wÖ©Õ¢ÿãì‡ÊYѶ“ø3ôvàp¦ß|…ˆ(?M«§òã80ú ü¹î®^è á»å§Ñ $ÈÎìkkêNIüÑNô ŽøsÒC¸x\”Ÿ®…ôi„cýVW½V’Ú9Ïzh8œðÇ™ËYŠÂþÓÆÕqÍí?ƒsþ€?BÔï{ùãv9ÍàGük9i†Êä`yžepüIÔã»3«M¥cÑd­šÊ± ª¾NØÐW}{ß¾Éèé1¹üX†« r£?V×Ñýµwgi!Uá‡"†Â å•Ï5„¯š0åmSyÓˆÃåÛ{Y¢¼“2¯v gà–VŸ‹VšŠõÎ(¯—Ï. åëjÐ-d|­á´Q¦9•Ë4øòÑM†òS¡LsÊO¹2Í©P¦9å§\™æT(Óœ€òS®Ls*”iN@ù)W¦9Ê4§2Í©\¦y”ò¤LS¦<*Óœ eš2åQ™æT(ÓÌQ>)Óœ eš9Ê'ešS¡LsÚ(ÓœÊeš)OË4%Ê“2Í©P¦9ÁF:åÊ4§B™æ锫"œ ešl¤S¡LsÚ(ÓœÊešG—6)Ó” ŒÊ4§B™fŽÀI™æT(ÓÏå2Íå@ò$Eå‹|9\¦üòŠ\¦¹<óƒOÞ•Žé\é½»úa®Çc|‚)>íž"ªH<Å8FŸ|S™CUÎ.ðåÊáÌU!sžÝ¯Fii(¨I(¹÷@Eó‹§)Eµ‘RTå”âѹ“”âá¹ ½ã¹¯‰ÇÓŽ\£ÚÈ5ªr®ñàÜi®1;÷Åýâszç|÷ÉÓŽ$¤ÚHBªrò(ßIòðÜ…ÞßCªò´#;©6²“ªœ<8wšÌÌÝM^ž»Ô;›{Èažv¤-ÕFÚR•Ó–s—fÕP¸È^0­TöÈ‘µ÷­ä¦ÚHnªrró{Yr3Ï^Y¥I½BÜS §YOµ‘õTå¬çQ±&YÏ£K[ê«sŸ=íH‡ªt¨*§Cò¦C‹µÐ;UçKÒô´#Oª6ò¤ªœ'=ÍzÚ‘YU™UUά•w’YÍÌ]U½ÎÍõÎæò¯§)Wµ‘rUå”ëQ¾“”롹ßs±Näýž˜=íÈŪ\¬*çbÿƒ¼_‹òžÑuBïl ÛÓŽ$­ÚHÒªr’ö?Èûµ ï*£ë¤Þ¹ÙîS¹§Ù[µ‘½UåìíQÓ•do3s7Õ Ï]êñ=äxO;Òºj#­«ÊiÝCsçiÝÌÜmuûˆt!ßKál ÉßÓŽ|¯ÚÈ÷ªr¾÷àÜi¾÷èÜ}"˜ÂÉš¿g…O;Áj#¬Ê‰àãòŽÁ9yw•8wŸ!¦p6÷.>íÈ« ±*gˆïq(Cœ—wÙ¶‘zgû{È#Ÿv¤ŽÕFêX•SÇuMg燔RÛ†÷Îæ̧9eµ‘SVåœòÁ¹Óœr~ÍYÏ ½3=2ϧÉfµ‘lVådóÁ¹Óds64ÕËs—zç Ÿ’>íÈB«,´*g¡Æ.H:»æëN¶i…ÞÙrÕ§éiµ‘žVåôôA¾ÓôôQ?NêÍ=$±O;òÖj#o­Êyëƒs§yëCsgßôÊ6í’Ý>íHh«„¶*'´ÇëZß=÷%ÓMáÜóiïÓŽL·ÚÈt«r¦ûèG2݇c•BïLχ|øiG \m¤ÀU9þvë]Òó­Þ§xËùt YÕ5šÁ÷QH9Mà\¬†Â1…Œu¶‰n=äoÀˆa €c 9ò(_SÄ)ä”s_7¬wB¡¾jM ºòözÚI!£H…Fø^=d¼aÆàDy{º«E Õ}ÛôN(ä/WnBbQèä4õÐÇ àXõµ3 »xÛY¯:ëk¨Ž(¾SÊœIjT\Á+œ¬¡Î)»å¦1i ÁE1gkH÷F kÈú[—µ¦p&e¶Àκ]` ]öKTÉDø) ~pº—9³ µlðDyÕ!"HY¬Â8—²ÆB¬çözÙI!ÝÚ¨ ^J™ÓÔƒ…ëdN(dœ4´¶¥¬«#^d)ÓÎè2¡‚‹QH›¶µŽ)T{CCƒ>¿M@¡i/…š:ÞH9¦PgtÏzgr<Ô²j5\Epº†œIb,§¿¥ÐáYï„Bn·×6¾õzß+eMkƒïÔCµcÓ²Þ™Rª5ò^¦äFÎôPoÛ†S¨ñIFõ>Çr¸›|…>öîe]LuGøÎ548_³®YïÄëp®r[×¢¦ö—nj 'j*mcÆö²A;¼‰ZðCÜËmRï}ý\M>÷×N %’GøN µÞÞlœHYç-Fi·_ê …3=äö»Žïöƒ³ÕµÀz'ZòŸ@Ç/Øí¿vîöºnâ½¼_ú =䯤„!À …úª1¦3ⲪfpB!ºo´ázÈ_˜8ðÁ=ÔùÞãnò¤ì÷N)sjü²ß¹ÛwþÚ>8‚àDéªÑÝ0È»}¥<'rfsŒ¸×á|žº·q·ÿ-ïöWµ]¤ ©²C4K¾“BÆ9ž øÍ'kH;ƒ¦2crùï çj›¡•ö2£×Cá„BC582Á¿a }?îô\Mr5ô÷AMÝx11 N-Æðšlõ .Æ8ó:´ó㮇:uep¢‡».ÒñÖÐ÷Î5¤M-Æïck(§kȉò¡P«ZgzÈ9-!jŒ×³«Z6wF!íöBÐV?°†~ö®!;(Ëà;¥¬®LÓÄEð#ë¡Úѱod)SF³Þ …ºªït/H™³ÛøQÀ™2J5 +ÿ ýµ×jUÜoÿ:.e½s (œíeªmµ•í¡Æ08³‡l«›ºö©(CÉRæ|G§í`¡þ öÐß;í¡Æ´ÈŒðÝ^Gãl'jª¾·PkE4uâ´ü-GмÜY¾Û·— dŽ×v»ý £&ø(ôÏ^‹±máäß­‡%ôÎâCá-™B6šäÿT9ß¾¯ÛK™SPÎTé)œùönG‹ä_ Ð¿{×êc˜îßꨔ™¡S¬wº—ÙªW¶mjg028ÛíÝ–Þñè‡ó÷œ5ÕØ¿"…œ¬j {Y½s/sžcì¤VG¥¬nÛ¨Æj•ñíÃ[¢r[aOád UßÔ<úLÆÎ6lî$×á/tî£M­` ©½RV×Ñ Q×ÏuÄZ €³Ý>¼•ó\-…s‹ÑY†Ü¦®mÕ:§ÅP8ñ:Ü:7mŒ´°†ÚkÈ8·¹gðÝ6µG7ÎmjÛ÷&C!¸”àÌbìëåC>¼†œŽqÆ:dƒNô³gº6²¡ƒÝ¾ÛÒ »Ã~™¿ËZS8±‡œ04nÃÎè!¸‰à,±’סmXïd/«±`¢ÅØ…úÝ^‡&yØrNe´ÙúÇÌnÞÊD?âìó2•°†Uµ‰9ÕË¹Ž¾êå½Rè’¦ß{s®­ó~̹ß^u¬wAk¬/¨±¹Œ¢¡pžQtº„ë¡Þ™’n³ÞIÎÕÙÔZ®TT{×PcÀmPG3Š>ª,ƒS=4TÞ…—í¡X ¤s6uÛ4šK™ñ‘üXÁ¦äŒ¢ÖÎ/‹v¿:…Î{#ùC Î_„ïÞˆ^ƒEp¶—…·ä\‡ëžÂ™¦VŽZÊ—u]ßèœxƒ7  öC@¡q/…êøùi„ï1:S¥ïŠN-Æå-Ù·EçÙ §+-ßí}ÅDù3æôP“$T| ͼQ?4—ë‡øË\ Ð\¨šBs®~h.ÔÁ½Øø­´öc.ÔÍ@¡¹P?4oÔÍåú¡’ê‡ Ñú¡¹P?”¡PZû1ê‡8…¤ú¡y£~h.×YCBý§«š õCGÖP?$¬!¡~hÞ¨šËõCGÖP?$¬!Z?4ꇎ¬!¡~H P?4oÔÍåú¡#ê‡ Ñú¡¹P?$PˆÖÍ…ú!‰B¼~hÞ¨šËõCÇô«’ô©š õC…HýÐ\¨ôP?4oÔÍåú¡CRÆë‡¤5Dê‡æBý¼†PýÐ\¨’¥ŒÖÍõCs¹~è°”áú!q/ÃõCs¡~HÒC¤~h.Ôe¤ŒÔÍõCs¹~è”ñú!‰B¤~h.ÔIkˆÔÍ…ú!BBýмQ?4—ë‡RˆÖÉBõCs¡~H\C¸~h.ÔIâõCóFýÐ\®:¤‡xý¬‡PýÐ\¨’õªš õC…„ú¡y£~h.×ZC¼~Hò:HýÐ\¨’(Dê‡æBý°— õCóFýÐ\®:D!^?$I©š õC²BõCs¡~H¢¯š7ê‡ærýÐ1{ˆÕI"õCs¡~H¢©š õC’âõCóFýÐ\®:´Ûóú!I‘ú¡¹P?$QˆÔÍ…ú!i·çõCóFýÐ\®:D!^?$­!R?4ê‡2Jë‡æBýD!^?4oÔÍåú¡CRÆë‡D‹×Í…ú!Ùë@õCs¡~HÒC¼~hÞ¨šËõC‡(”Ó5„ë‡æBý¬‡PýÐ\¨’)Dë‡æú¡¹\?tHÊxý¤‡HýÐ\¨’(Dê‡æBý¬‡hýмQ?4—뇎J©’÷2T?4ê‡d{ÕÍ…ú!i ñú¡y£~h.×ô:hýD!R?4ê‡D¯×Í…ú!a õCóFýÐ\®:¨‡hýBõCs¡~(ãÛ§õCs¡~HöíiýмQ?4—ë‡J­÷2\?4ê‡äÝÕÍ…ú!É/ãõCóFýÐ\®:(e´~HöíQýÐ\¨’Ö©š õCR®ƒ×ÍõCs¹~è…xý¼Û£ú¡¹P?”±Óú¡¹P?$y¼~hÞ¨šËõCmjZ?”±©Óú¡¹P?$[Œ¨~h.ÔIzˆ×ÍõCs¹~è _Fë‡${ˆÔÍ…ú!9„ê‡æBý´—ñú¡y£~h.×ÔÔ´~HÞíQýÐ\¨ÊQ(©š õCR®ƒ×ÍõCs¹~èHÎU¨’"h¤~h.Ôe2ŠiýÐ\¨’r®¼~hÞ¨šËõCGõ©õ®š õC²Mê‡æBý$e¼~hÞ¨šËõC÷2Z?$ïe¨~h.ÔÉšÕÍ…ú!ÉëàõCóFýÐ\®:cdõC¢Åˆë‡æBýP&”ÖÍ…ú!Y¥õC×_åk~®¿ˆÅØÇ(l„»·D ݞߪåÿ‹ÎçqR20øßÏÿÆ·ÂaáÎô z»%|yKg; ¿}½'oùÍȨ`,ø“Ÿ’ß]nâ½>¦p§©Ý}ïÿ<"¸ÏöøÅÞ­oy{ÓÖ‹ÏãÙ‹fEî(ºÃ{Ó·âEަï¯iL§Á­Ç30î¼—qmÌóDø.Æ9ÎyÕÓ18aœvé°—2îÁŸzØÄüÀ1ãœâ&hdÆ¥7åœEÆyå<˜Nbœùõ=ëó§]|]Æ’&æéÇ|ïíXùók·`Y('ˆð=üyhº¾ê˜"8,·†”å‚ÕWn <,g¥¹í'#X¶å½cÁ*§yz+ð'È–a½7MòVãö÷®[´B*q§^ûÓ¥#$~‹qƒØ»^¥"Q>²÷.€:^M²²÷}{=mËáûØÛvÎ>0µ¥p®7­ ‡H—ÙûžÓ›½ó‡¬Ä^r«KFoµ3â7Ùû.³·öÙ«pB&aoíÏŒw‹¼gÙëï~¤w¹-F¢<’^7Áx‰R+{sÇ«3é­80¾[»z¸¢pÎÞz¹Âh×ÖÉe……cöúH•³™½µÐ;b¯cVݘP '°×y‰¬wÄEÓ»M¹ƒ:*Ì8|ï´-¦÷Þ`¹ô·˜xm¡Ö+ãrgÃ3ÆuõÐ2ønÆÙ¦OoÝÉm‹Ê-nI.m?ÄKºV8‘KÈ’Í‘—Þº#1ÎÔ>ë?ÈŒs ï3Î:ϯï•lÏ K{DÆ%—öP‰s¿ öÌ5Z’{ªÖƒßeˆ:7ÌרÎ$ÎW%µœqÎÈÓŠ¢~sZ,aœ™AÊŽú¢Â¶ç½ö. ˜¦­}®¼V ŽÙë+RÚ!D‘¦tÕÖÑ–»Êv¬[uƒ†6ÇwÖ;ã;\XÄìØv0Æ=í´“Û!ŸÀ÷l¤mˆpXÍà„ï ã»M¾?åøî|ØŽó}á<šÅÞßã­È÷AÃ÷¾ŸïŽílîœïÞÌðløg|7ƈòÞuÏk´¢Ï»ù®â_çƒ|÷¥ÆBP×sVÞ{½|¸‚ùÞú„™NønœÈÜ3®ˆïÆi𮎤“ýÕTCÛÁ€ºs”÷NØ[×6—Gá #À^»2ûXucºfÝ'ÕP‘½À[—½ì51•”À÷°×W1¥xï‚:_ÌØÛw ¤óŽÙëåZëp/a¯ßʨJнc÷tð77Õ¹}8j…‹l7nð8{WçF‹pÎÞ¡ë$ö¶C ®¢<6³zÓDƒ{Ùk÷ø.öšÎ'²†–Â9{;Ý7’Ö®;Õ³Þ1{i­eEd·v~«³®Ùܸ´¶ÏßÔ½é\t’˜Ö>µ¶ÒCÇzÇ‹@yOC`šøEÖ0Òq'ɶ¡î‘‰µ3ÞâÜGXãn+-é}<$ÖÆ}[¥œñÝ6Vâ{ëËÉ¢4ævkÛÕKÐ ‹µõÛxT»£¬µkÿm,Šõ(‹µ7¯‡Îr±¶•Wˆ|ð˜½KòJp{Ñî$Ê'ìÕÞù‚‚Èë3¼õ¼[kQo>Û”[ ŽÕ‚çÆ˜­´ ÖÑ$xαWË·„½Î3imt@ž3ÆØbŽq±Ö•Ÿ:ëÇŒýÞÍ1ãciŒ‰ƒ§ºÝõÑFøR±Íátxõ.;_­×ïã»Ã]Û*ßå|Y'×m ‚×L¸#(tÎw·ÛWþË)6x¦ÎU¯–Hq”Ù; m=°ÞÅ ãûú» .©sËøî?ZÛ°Á#§Û'lýeuŽn ðäÖPÊw=Ä*ëk wì‹–7šÃwñ½é«Á™I …suÞ™¥†nãþ‚&Eá˜ï¦uØ[iÚGñk¨&‹½‹1ÆwgÃ×­/(}ÅùÞúã%N ¶„<½5p“æ;¾15—~8¢rzþ×¥|÷•1MoTS=KÖó-PJÖó^Þ%DGƒ¼÷8Ó%Ó»³½Úßõ¡ ÛƒöEº¾ël­3÷/JJz^ËÙÞS[u䤔¿ÌŽõŽØÛ;ó _²~GOMÅzGbíÖ¦rÞ'OJu¦rcZçìµu'™o~Ÿ²åIð;þ5¸æzoLÅ)•Hàc1·0ÜcXBgc*΀±Ûì=çØë$#˜0œ½n;0¬w,½§^­ê\ÊZ(Ö;v¾ÂÇÉ ‹©¸a5UÍ7}γWëŒu^W­DùDzk·´ã! lx=î•^ÕÀ–£9_Ú‡*ûøi´Î:_ε®Í&{Ç{Û~Q'ÁF7ŠÒë¯mÝd¯ì|ùÐV×·œ½­ÿ"XC”Y—œ¯Fe¤·±å‘r®µ~kuþý\=^ý³øáÏòàõó=ÂÏç¾ü%ÀÏç<üò¸Â—¿øå1¿Vøò—/øÀrðŸ<üÿ’üKaðÓm…/ ðé–‡¿ÂÜ_ssýÊïï+|ùK€Lyø ø~ËñýVàûí ào9ø[þ½œÿ`ðÀ§?€²ùÌ-›Ï²™aðóùæžÂ oÁ꘿þ¤“¯ÍN>çê+”øÅ¿h'áAþÏç ÿç3ÿçS†¿zµ4‚æ)É[0Ç[aŽ%U”¼UÐ8ñ­’b‰o•ôGòVA$oÁçÂg oéÌ[Ú ¾õÏ„þ\x« ’·¾à­Ìßo/O¿Ë‡ó<ýLSwo‘ T ©§¿‘õÝ­™­÷Û½OÒû”é=£äÞ¡hîýç£ÊÀÓÞɰªµ@åý¯ß œŒñûógõ|Y®ÂÍ:ò|¡N>nÀÇ<üüZ=¿”Ï¢|~Á’Ó ¸{+ˆ³‚NÔîNôš¢HàÅN4t¢÷ÏdM0&ðb':1û;±–Á‹4ÐIs€'ƒ—:yþ;y‹/ЉôÕ÷>¹¦½Ôö_™ ^ã·ÎÑç2B¤ü[çÇø½¯“%„ë%\þm ìbéwS˜I8{Fþ¦L‚g;qú&ûV¢o^ªçÏ ãWÎ}ôÍ ðÏܺ™ó3‰pzÃ6Uj_Jí+?Æ7Å ÓŸ>²S¤k»‚¨I Ÿè[w}÷5t7ñ\¿ÅI¨Š|¨úµ†._olkê—OIny^­ìI¼YÃG)ü– ^ñÁ÷¿¼H?¼‰ƒ¿äßè>7xÃáß%¦C†½1îw+šÙÞÒÍûíSÚÜBk—2N²«;ÊA:,¿ÑCݬ#ÿ ¿M­pOˆ7rnýúåßòä1FBÞ}÷q33ɳl`½Û¸æ)Žá¥{¬§€Î)T‡“ ËjJ2qÉŽq¸ïrôª×rØÎÇhÂaÊÅ1¼8F·œåN‰®„Š_¿œ³\ŒËùçññí;¼õ“Ët½}çgáî-òÏrE˜â7v5Ö"­0E€Ëù]4x?E€g§øï­º=ЦÛ3B*³Ã«x\nç'6ŸBšpPq¥8œËâþï-¿w;ìç‡Ô»Û l/)äÿñ²fðG×!F?‹ôÀ ˆðϦ¶C­_U‹Ë=Èš޽ÎÙ{_\ŸòvðñúxÿéÇ寊ÁáÞûÇ×ê6=. ð/U€k€ë\gáŸnÿ\„ßÄuF„cüÉ? .¦{²«™Â¿„·N<ùàëÆ /|dB "*°"R8_Tj=‰éÓiÁ%ºIg⇌9:x¿O¬IܧaR§Âµ|ˆ_Ö²páDø*Û*˜’ä.§[á£æNN¡ªüçmÝúVSš¢=‰üo}"œO±B²•ÛVñÞ©ŸóàSÅ‹æú—LÑZÛ289¨ªýqú÷·œú8?e¦¨Ã™_lŠîAÍáÓ™Hƒ¥:ñøöƒÿ@›Á™cåküƒ~#‘ ¿üÿfo-‡oR­íØ –¤púÖý‹ ÊG:½z3 œlL~ -Êù›>h>}ÑÁ×á³z"H¥µžùÀÉ©¾dqz„wsøÜ Þ|1`Ð0Og2,Ý>øìgù¤ô&|ÓQ¸ï"5/‚øýæ¼ÿ‹– |tŽágƒ¦¸„ƒWô Ño0<”Búß›µÿÆð&Ôu±`BXÍwø¬u^â+Kœ8\¸PG$Î œ^JpiÕ-|§±À L NÍ!ÿé§‘1gIrxÃ;GÉiÆ ü›ÁÍâšÌR'ƒ“¥í¿ê_œ7zO¥ás¦NÏ¡ñÅ¢¢Ä9a¬ãžô‡¦„ïõ(’u·–&p®*UX6\–ê~`ŒKëuÍSYjD8¬ÅQd©^ ÿ6”½'Q–à3åëëÏÿ.cd…pmp§Ùµ­ÖóÜ"œ1¼%1Çc|XáL§Sü˜îpþÑJòÖëãýËk¡”S5R)çCÈìsø{«_møäÛno‹ /¸ ßj“1ÂM/ÀyYÎRé.¯­õÇ.ÉÉkÐÚN ­Bï7j„7p·v2xZ¡]©®“>ªC@wDø#ÖÅÓ^ñµ>xã6¦F®?ŽËæK•–Í-›ŽÃ… àþ$ àƒK|¯¥8ƒ–Â%öƪ„f þt³øœÅʪ%WF`tœƒˆA„?²·ô’ ™é­ZÖ»PàðGgød·Ä: b­þ<„K·(\âÏý£††GÉ —ø£mÎ`dð§Û™VœÙ{ñô³¦üOSt6u0WÙ­¾0À08-Ö«šÅ’Jë“*¾§ÇåŒ ©‚^Û\L¥¥prX†·7ëådà鋳DQ8ûˆ×{·‹`)^ÁØ18/:YÀRÍ „%8/¿´ƒì *ˆ#&ð†÷žIôÕ5ï]Ðáþ†§Ûÿ¨BÕén3UçË5fOoô|È“ÀÈMSþžûÅeŸ®VàåDøÇ3/P]”ÊÓãöª,¾…òR|’S^0Ê‹švàÌM×WfËYJÑÄï8€zuÑ’“cî"CáT|Ö®ËDájíÎ\4ëo&¾¿žÙ˜ÂÙ[ÖÈ.ZmŒâƒçæ•c5ù˜À…hã’ÛZ\ œÈx-^·ÖŠSþq"qø~¸g‘Y Öÿx"|×­ÉTwÀ%P.š‚™êÅù. V¦ºóý'gfõ&³æuÏá|Í›µ19‰¯ùŸœk¾l¤B²K· ÎmxeÕIZÍ5\tÂÙÒV÷D^‘ÑðÞ¿…{Ј·+I²ŠÁH\ÁøÛWš'¬™Eøœ‰qK>‡².­ºq£E "œfêLAz­Øª“²?À^\Ãwî#À\óSê/pÁOo¹Íð%çgÔ}ÎŽ©†gvì⢑#¾¼Ø¹\áOùXÏ˾d…Ë#4ƒ ÞíbQpɈîigPëF€ÈŸdð\ø‡å»On ¤1Énñ왥‚bS'¬jP}Ÿ+ª«ÙàEÃAç\´$©»œÈ&¹?:g+ôŠÃ¹ûªäÌ·¥€õN–Mè\çŒpkœŽT-W“ð’¯k8û¦»ª%[!½.…smqnû\Á¶ Î/¯–¹ÓKGªxç|ÏeãÙ² ã¢p¶lÖãà%Ï1­“¥i†V„ÓO*’O^ò‹KÙÍÅõTÐ\Pà.ÅÉ/®6»¸,ƒK‹ËfŸ»TUz/vå H«øà¿2¡¾¸º´Ž(»¸ÚÅÌ4—áp¾¸îU ?ßà|[ô4ÊUl6"œæðVþè¢æj·—~,m‹ZÖ\ñÛ]Ð\êþé©°¸:¾üV™ÈK_õèœæ ßšŒæ‚h½.h.Ýä4—æs4—Í,.kå%͵|ɦ šK5Wæ[2 F¸.j.àOÉæRfsq•l.k3š+ޱ`s­«£ ¹ôù4W7ôÎ×½xAÐ\ðá¸>4×òɾ°¸,‡“ÅåW×¢ø„ÅÕ1ÊK‹kI¾ê‚ͥϤ¹Œ§š ¦8–×°¹¸ÆÒââ½_[Þš¢ðc6WÇàÒâÊ¥C &)s›ë^Î5WÃáBð¯Íi®–Ã¥Åe3‹ RA.,®eO¯O¡pQsµÒâ ºK„³ÏXckú[¬)” ÄÐÖ¬ÔrÒ»£0Rl7,ÎŽÂÙ‘ñÕ°¸ùÓW>Jp!¡·”ÁJû%|§’ÀM.ÓÇTšŽ‡D82,Q‚YºÃÁo¿i ý›º}xe>wzïmeÔRŒùøJ·W|î<¼“l‹†…1N8ú Ï•CB\îvy|Í¥Á–¦Ú?0É‘\.>Öƒl ÀI‚ø!| mOR £6ø§ó¯ŠY=˪³,åB~#åvÝ`—5»äµB„³Â´dŒþ Ý÷œ£]«Ìž|œ\¿N¢Y”>#]ÎÆ[@’Ú½ß W0Ù"üJrbNå·É z×ܪïq.!­d9üKxëÄ.•¸ÏÂi‘AÝKš+l‹ŠÁñó*`1lQÈR;ÊçÛ»þål[€ H<朜wzí(g– 'Yïª3šÁ…(h¾wÐ\þøÙQV»…¹ ÎÔž¹ÃÜ¿wÎ=Ì^Q¸ð¡ü޹ÃÜ¿ÌÃù‡{æUÀÔVx0¾*O(¦É²w¹õ…¨¸ÈÓ_à ß÷œ–«>øãË{!U÷PµqÃKàÈžyX:¾¸Aƒ¿ýïñvÎîX™$¶‚óìNî ñÓ Ì)ói=ƒKj·o¤²´güöÃ*¤{o·ÇÛ%›¦Ìä›âáiçS4íbª ƒ{à’Þ\Ι$©nøW‹ü6—¦Øç¦ØR¸0E+m‹÷\…çKPhÙš"ÀoÑ)Æ0¦ SìrµÐ°¯œOQß=&ÎÅxüÀ%.öÒg°hŠŽoV¡®ì·ÇÇå‚&qŠ9ëªaNnzº‰'ñê„ +œši~¥E#Ѫ[Ö1 å¹¢ef9\¨-^-Üôª‡pŸ6… ÖýýGm»V8-†}âÖÒê^¸;…ä­ÎÆ<åôø‘Ó¨Km‹XÝ«(œÜ±J¬—°_¨pô{„ õ^_û8’müEA<èñí¦¨)\˜bbÎÂø,àÂÛZ,æDSøã;S76I™.W—ISÔ*WÛb)œÞ¶$•sUQ¸<\ªe7R¦wø#å>gñøøñv|Š-…“).Gžõ9_Šõ.Mqù.î± ­"ü‘ûRÑ|üÌ–èe}©X¸áB rͼ}â½*ÀégQÝÌô;Ý…"œd0«®SQ%>=Î9Y´M΀ƒ2¨΋°†U!ÏØ&Ð ë.g¾×¾*v0HY„³(ªnZ9ÿc¡wþ dß·[ÉÅ'×ÕU½í—"Æ[!½p!¢dšÜ~ÑfCð\zÏGyöÚ.ÇÞ–Ã{—Ó?öZ°šÎÙ«ëû©{Œ½V±ÞöÚFÎÀ˜x8kçáʺ“¿$25‡söÞOØ0Kóìµ­Ì^݆9ÏÞdŒßyö6]f'U¤·•Ùw)€ ì½MÃs ] W~gÙëë4åÊXw’Àù—œ`«ãÁ6NÙ;4zñËhv±÷;ÏÞ:WùQ7F„ÓÏ"Àm8¤WÜñåðÝìÕ|Upvj8ì?“pJmËà\ÆUæXi‡8œ¹.ž×î åð†Ÿg±x3”ïµ…C—.°WëÜI"ÛÇpòA—n _9gÈæöÞnàpÎÞ~ ÕÎ_…½÷KüF5ÇÞðYPËàœ½f©6åîp¾CÛÌÁ-²;2_½ø/GNü[Išbƒ?´÷¶V„Ólðç[Íê¿(g%Þ7ì¹ØH!‡»Ú¥pYŸrj—ÃMîØ V¹ÞÔ ‡K:XÌâ!íºÎýµk gÚõ”Sú+|È0n‰Eä‚ N/Š1Õþ$^£/é¸X"ÞåJÄ{7¼Æ;W"íŽ!ø¥“@ºš¦_ã‰Ncùï*eDÒ 5Þu—û:æþ¬—+·ã‚he× p!º´úké¥ÞA£Z çì­jÑ™Y¶Ø+Ö…ßÕþ*t’ù.¾(‰ðÛ—¦÷k-7Ы‘À®p‰½F<ëNœ»¨P×1:O¹+]P¨mΙÑV€³D‹^ŽTá·±Ç)œDÂq? >ÙïPæÖÄïYŠ=æ­)”héïpþíÅ{dæj„»ŸþG<)œ&K-F… 7Ñ‹ƒ÷DiLOáÂÜO™û£ýÝ¥ Îϸgÿ|ÊZ[WF¼¸.ÜôÅá¬â§ZV°ŸûgfuÝi:mõñB5aü¼±-ƒßÞ?è[}êÌ |~go¥ŠSÌÒÑÿÖ²Ò^æ!æ2!f Äœ#Ä\ Ä „Àoõ šÃ=!¼K SÌâýõz }þýüouý…öœa)*¼þªÞ_ó„X@þ-fšÙ;¼DÇî5ônMïð <V¨…3k~oj2x¿îxø8x§ù[§EÙ‘ß­úF"]$°×»=ÔŒz.Æ·ä›’ßnI'ªsÞ‘á^_С„Oÿþydƒ·ƒ³™DµýÛím¯¯²g¦™ðú*Ññ·óšVx“ƒ7yø¿·ÎoÛ¾ÃÃîmÙ§d—6NÑ›¬÷³Øa†[P¢yŸÀ§,|£|DãË-?ưi\²Çby[öEþú5ÂÇü à_9øW~©¾Þ2ƒ‡·þz_•û_loX×9pâp¾7øÃEîoÍÐÉœëd.t2ïêä}ÕÎ1åžÎd.Ì$£ÜÉLf˜Éœ›É\˜Éf'¯þÌŸ§ÊŸfèÿª¤kÖ×Wx'Ë5ëþªr׬çàà:×YøÓã£sž.Ë_î­ ÷¨ƒ7x'm-%OàÁ¡@ðSâPÄ•ÿ溣ðÅ™Zßj{§Ü»P³¸I÷JùÈe·!˜ÀƒÏ´¾¥kŸÁ _/-nÒýÁƒi¼#¨ÙàŸ ÆØU®ï°©ß~Tú@W¶³†÷þü“¾åo;é—·Ï =0Uw¹==>åŸvQÞÞ4ƒï¦¼ÿ–›õÎ(ßu&XvŒò¶‡C£8¥¼aøæ”S~øà9åu³ƒòOYÊ÷ˇE˜òŽð}mâàÏ@ùóNÊ«6YuçÔïºv-׈pLù®®ša¹ˆÓÔÙîoÍü½Dõ Mu[õJóÞ1?·2”Øš†å¼æ’8%°5:Žñ¾ìU*Ζë|ÿÒö¦pF`·ÃÁ¢„Àsá‡õ«ÏŽìéÛ˜†XwáxþÁwØ/Z(|Là”Àný×ÀÅ ðËnkÎ4ï%p(„²Ž lÛª–j©%œ9ç.%ðTÜzgÑë¥*ðgp¾9|œ–À©†éºnè¸8ÕÓt=ïógÑ2ÍIVçŠQž @ü|ïéñ ü¹îæ”Ì%ðÝü $Q8æOã]¦å´ Æ« œÀåSÏ!kIøÓû¯}£v½Šüq\¬ûå˜Ì·³´ªŽâw=ÈÏ ¶S Ž÷^¿9U-¨ðwàÏûÞÀ6qûz?.?ʨ‰ü¨j°*äu1œ×îÌf½ù©½ž1`ÄŸ“ªM5Ôqxøóд­¿)¨G"?~XÆòÞ÷ËOÛ¯Õ Ë®úV[X‚J­üñŸèîâOž}­‡nýô=Â1|YQ³œ¹‹÷Ÿ“Ûœ×ÎáÈ>蜷ËÍ/Ä~ +„?ÂSùÑŽBJ/×û±ý§ZØý"œe írY2çOâÕE8†9߯‡1BªOïÍÖÝΛ>ž)TvLŸsòão£fþÏIõÞ~S¬wÌë/öÔšó§öÙWÓðÞšÁ<$é7gØ ÒÛ:“ht ê–¦9|‚Á1jo$Æ·^?¯{ùÓ·qŒ¯âÿ€‡p"?nŒæ©Åüiª¾ï!.áˆ?Î muÓ üqúÍ-MGü1Nè¥ü€ðÇúøÎô›·?eþĘY„û@%w<>iH”è½y–zˆJT¿ÿTÃà„?n‡nmð@åûªu–/<‰&×þZí ˜òξ¶}«[ gl0N?µ§ å;Ö;ã×á³Ny£Ð\«kâþÚ-à¸Fø!ÏÓP8¡¼ª¬^>Ñ :©ñu#=‡c0•nëžSÞI™RµbsgHkt6Zi*Ö» –×õ84èV7IYдQQ5•+ªxø‚ Gù©PQ5å§\EÕT¨¨š€òS®¢j*TTM@ù)WQ5*ª& ü”«¨š UÓFEÕT®¨:HyZQ%SUTM…Š*™ò¨¢j*TTe(ŸVTM…Šª åÓŠª©PQ5mTTM努ƒ”§UåiEÕT¨¨š`#rUS¡¢j‚tÊüL…Šª 6Ò©PQ5mTTM努£K›TTÉFUS¡¢J 0­¨š U‡Ì+ªdÓŠªi£¢j*WT#0«¨L+ª¦BEÕ–䔫¨š Uœ?¬¢j*TTIü!!S¡¢*#¤¢jÚ¨¨šÊUùC+ªþЊª©PQ%ð‡VTM…Š*?´¢j*TT⯨ø#TTMUS¹¢ê¨üŠ*I~HEÕT¨¨’ä‡TTM…Š*Æ^Q5*ªŽÊ©¨’ä‡WTMUS¹¢ê¸ü Š*?´¢j*TTqÛˆUTM…Š*É6"US¡¢*c¥US¡¢jÚ¨¨šÊUÇ)*ª$«”TTM…Š*‰ò¤¢j*TT ”§US¡¢*ëÄŠª©PQ5mTTM努£F©¨’(O*ª¦BE×I¬¢j*TTqÄ*ª¦BE•¤“HEÕT¨¨’÷tZQ5mTTM努2åiEÕu=S®¢j*TT ’A+ª¦BE•ì¯¡Šª©PQ•‘Œ´¢j*TTMUS¹¢êåyE•DyRQ5*ªDÊ㊪©PQ%QžTTM…Š*‰ò¤¢j*TTMUS¹¢êèn@*ªD+ª¦BE•¤“HEÕT¨¨t­¨š U;)­¨š U²K+ª¦Šª©\Qu|·FU’D*ª¦BE•ÀZQ5*ª8XEÕT¨¨ÊÙ±IÆt*TTeü RQ5mTTM努ÿ`Ç^e;–VTM…Š*ÁÏ US¡¢JðiEÕT¨¨ÊûZö3pE•ìgЊªi£¢j*WTýk÷š±vIEÕT¨¨’ä‡TTM…Š*‰?¤¢j*TT’^Q%ɯ¨š6*ª¦rEÕáýWTÉ1rTQ5*ªþЊª©PQ%è7ZQ5*ªò‡VT‰üaUÓFEÕT®¨ú/üQ2HEÕT¨¨’øC*ª¦BE•ÀZQ5*ªŽÊ©¨’ô¯¨š6*ª¦rEÕØo†Â‰}@*ª¦BI”d¿‘Šªm8öùIEÕT¨¨:ÊRQ%ï?´¢jÚ¨¨šÊUG}~RQ%ð‡VTM…Š*Á> US¡¢ŠË«¨š UHEÕT¨¨’øÃ+ª¦Šª©\Qu?´¢J–TQ5*ªþЊª©PQ%ð‡VTM…Š*Q~pEÕT¨¨’øÃ+ª¦Šª©\Qõö[OáD~HEÕT¨¨øC+ª¦BE•ÀZQ5*ª2ú-­¨š U¢}À*ª¦Šª©\Qu˜?¸¢J⩨š UR4™TTM…Š*)rC*ª¦BEU.ŽŸTTM…Šªi£¢j*WTýçi(œPžTTM…Š*¡º„VTM…Š*9Z‰*ª¦BEU†òiEÕ”¯¨zžËUá T\½%ÝááTÔ å—W䊪å™|ò.JJà¢$èÝÐs8ãLñiï}aƒïž")]ÊM1©þ‰hõÏSvŠéÏ0Åó¾)žHÌÑ)’!qŠ÷biЍþæ,O1°Q'•*ë/»¹ˆ*UsWéd¹¨¬‘¦ˆ*`.y.&c|)¾ì—Å´ØãðuÛj —d1\*Á¹˜‘¼d1Žñ¦øºwŠƒí-ƒç¦È/ÁÉL|rD-_°Á§ð+ þº[ÊP±ÇAþÐ:™¬”µçÏâ¿ÿ{çR–Œñ¦ø¾—?¸^âèI©In úNø$uïÙ%˜ŽQ©uй(7›¢¯E`ð#\L«5rSL ’)’‚èM1£ÖësbA‘Ä’*€™bZ‘W$PY€IZY{I, €­ÿú¸;Wìúx|¡¦õ…íÀÈ›zßYÍz¶“9¬S|Ú­nPÀáí—XdÕëDš"ª?xÊ«›dŒ°i\_vO1†}¯/Ç5ê©J3‚Ù)ºN2UkÖ;Ÿb2FØënuƒ3CÿEÝ\óꦽWRŠ2Nyu“Ž$öº[ÝàäÊQ7×¼ºñˆ>D’´¹æÕM2Æ$vÞ­nœo®|çý—#10>çպ׈S.ZÕ>x6ÅtŒ ±ó>u.^êZß9E])ç¡ §²X Ýý <ÅÚ¹Çp\Ò;‘EYô·øÁåî üÈBaš3²è¦hc]Qò «;4 Χ˜Ž–ó¼[;pø YÀ9/‹Ã½þ‡¹Iƒ(Òœ—ÅdŒ?°œö‡,â7%? ‹¦óä§²PZœ¢sça[ý)„,’1Ž0Åq·uc!Uá»·~eŒb½ Õ¶­hÀ) žzìkÔdŒLqÚ­Q(žðœ| Àê:‘Ìð¡nà“‡Ø;רÉÁåú¹îž¢ß?E­@Ÿÿ\óS´Ã z¦Q .L1ŽQÃrÖ»eçµÛ¨8%˜›¢ïDš"Ê—åe1#„§ôyïqjè°,â¬Znоi_D)§svŠé!¬¢wGepvåO ¸žÂ…)JžÍڼ様Œbzw`Ãg.üÀQn'ëõÇôžbšÉ6Ò1~¬»g6‰"pœÒ?äi —¸hµ´PÓûuÚ‘ðR /UNxmÌÍÊØJá|о“›Õ=ÆzßJ‹©´˜*§Åޱ—¥Å2ìM¾ð%b-ôNÔù=yvÚ‘/Sù2UΗœ;Í—åç®Ä¥-õNÁ=«vÚ‘HS‰4UN¤ç;J¤åçÞ‰s—z's¿§ÛN;2lj#æÊ¶ãsG¶Ck^ɽ3•òp§©7µ‘zSåÔÛÑ5ORo™¹«ªk2[ï›0>AwÚ‘“S99UÎÉÝÊHNîÐÜٗÙ¹‡ÌÝiG²Nm$ëT9YwtÍ“dÝá¹ ½Kz>g¾á,žÚÈâ©rï?èºkQ×eô¼Ð;Óó!×wÚ‘ÞSé=UNïý]w-è:•ÑóRïÜ]óIÀÓŽ¼ŸÚÈû©rÞïÐÜyÞ/3÷&gºJ½3¾‡ìàiGBPm$U9!xhîñ´#…¨6RˆªœB<®çQ 13w·OÉk^껪>ÑxÚ‘[T¹EUÎ-•w’[Ìν•Ýt©w6÷<íH:ª¤£*'Ú64é˜{ce=/ôÎmZŸš<íÈFªl¤*g#Û´8™»’÷w©wæË„œåiGšRm¤)U9Mytî$M)ÏÝ-ÛVæ»Ô;÷ã|2ó´#©6ò—ªœ¿I·êBºUZóÒ­z#ݪËéÖãz¥[3sOÓ­ºn͸ª{Ó­z#ݪËéÖ£òNÒ­Ù¹·²›.õÎæ¾;ݪ7Ò­ºœn=hÛÐtkvî•õ¼Ð;·i÷¦[õFºU—Ó­‡mZœnÍÎ]Éû»Ô;óev§[õFºU—Ó­GçNÒ­òÜQºUÒ­?noºUo¤[u9ÝzÔž'éÖ£~œÔ;›ûît«ÞH·êrºõ¨¼“tëѹK½³ý}wºUo¤[u9Ýú6mOáRH2¦[u!Ý*Ú´ûÓ­z#ݪËéÖÃsÇéÖüÜe]'õÎç¾7ݪ7Ò­ºœný?ÎP¸hש ßyïlÍïN·êt«.§[ϧ[³¾ÌЋ6-I·J|?nÕéV]N·þß-… |OÒ­ºn•æ¾3Ýz~­^>ÃàÝ_òÜ_>É-]Œ‹p÷–<÷ùçþŠÿ?MîÉ`ð¿Þâ['åoKQv=Ø">Ï*¸kàžBø-g>zóà¯ù#é½³•3óAÏü¯÷ô­pOs¶çùPè×> …þ[ßE¡EÜ ‡c •°As µÔp‰B!š‹)äO W–Ã…ÜkÚ[ië >7@¡f…ÜRVp„ï[Cµß‡ŽÁ…”q†N3½¹†šÒ…lï$ë¯!GG·«=s¶@!»WÊl§h­!íãWèv€ã5Ô4>¤Uæ×-P(œ!„)äÜ*3ÄËÔŽ)äIµ†½oOO÷)Þrû]CÆ´à¦DøN)3>¢ïZYáDÊTÕtu30 ©ÆÀB' ÷À™–RÈG[Zç²³¹c)ëý»H¡³^)tÖû(dý­À ¾s éª5Š÷Ž)d:'ÊËS„Bmå/‘dpF!UuÇ×õWŸBi ÀÙ²Í7~Ü.°†.;×ÕQÑGø> ©°›€å pB!믪4-—2®Úk)œSHÕ!÷Ä(4ô=ܺ pB!×»Ö#º½…^žvê!ÝÅk“^JYãïqÔ N¤¬©Úö~…,^CÎÕsƒo)œKY§BðPh¨Z'>…c Õ­£cÇ8…¦kH7ÑiðÝzhP±à„Bî­ÞyoœBn“âùIçj›žSHû{Ýð<N(4T½VQLÞBï{¥¬æn„ïÔCµS$uËà”BÛÌ”°†:§HzÃ/H™n8…üM¤&žö pL!ã¯ÏÑPûpû\·k÷×νLÅóv#|çòwkF“à„Bž@÷›–©” ¾‘ÂénRgŒBþêú¾îyïx/üådl‚Ûìe_;÷2]ÇäS„ﵩ[àQN(ÔWÛp$en·Šþ+·—ÕVÕÜò;i7ðÁ)ë|ïÑ ù Rö{¯”5ºÑ ¾s/뫺iÁ(8ÙË‹ªí¥Ý¾wVÀ@á‚”©†yáªd¯Û8¦¿ÆßÞo) ÚG!Ÿá2 ¾“BƹMo)œ¬!íìžvì!gдñRn€ öÐr ÓÔF¨½8Ùí·›(pnß°†¾÷ÚÔ‰\üþƒÝ¾ï g»}xK²©»¾ìýÎîeCk™Mí½Bmúš žè¡Á_Âobü†5ô½s ¹íÀv ¾“B8]CUÓJÜí±­ v{Õr›Ú[:VE‹ñ[‰rüÑê;nÃ^ö÷ν¬1môŒþ®ŽÚCÓó ÎÖPßÇ3ÏÓ¹;›¼ƒÚb€ R¦{N!ã¼Âaˆ¦Êߢ窦täâ?@¡öîöøÕ£khPBïÌs o‰^GzÉè?y -&zÈ-Á¶3=…=Ô;e×B½Äí_ Ð¿{׊¥¤¾[™¡S¬wA³U¯l+ij§há*_€s{ÈmöœBÞt†¨¥pb1Öî- GIßjÐCõN=¤º!vR«ÃѶ­ g^Gx‹¯!ç4u¼mµÎê!§ì¤ÝÞа¹“£3ˆTß'Wº®R{¥ ߆{ŒB>Ƙ\7¬ªŒ¦o‰»}rU,À…½LÚík[µÎ”4N,ÆÆ‡À Öý¦a·×;wû¦í¡À#ÂwÛCZ™¸Ohq·_ß’bŒLÎbŒa­s 9KǶñ.ký”±©»^E£«)kwJ™†ÈÅö°ÅèÑ …s‹Ñö½àu„§ ØàÒR1*‚ƒ85À‰¦vnCׯ›;XCÝ^¯Ã¨¨j»ƒk¨s»Tcœxަoå5ä'Iá’¦îɦ¶]×38ÙíëªÚ(&=P¨ßkSÛx¯o„ïÞËÔk¼Îì¡ð–L!· )\òíÙ·”eƒ'qêÁG?ÌJÇoHç|ï͵¶†/0¿fƒ|€§—,~7rF±±nì˜ëpz´§p1×aØêÝòŸøQ8ÉuÎ{‹UMêq]êq¯¦vgÏà{-ƦjjËà˜BÎïýí΂Åè¬í¡fpÁbT×Ô¦wþ^Œäœùö½3›àrô3Pè¼WÊjž? ŠnÀÙnïô¹5µÖ O.dƒ”⻽τ5-„nÎ<×Þh¨YP#PhܧƷό ¹1ZÍz§6õò–cL¯f¸§6†ë¡Þ[&9À‰rRÖiT0oT6Ìåʆþ2(4*f Ðœ«l˜ • p²9~+­l˜ • 3Ph.T6Ì• s¹²á…¤ÊB´²a.T6d)+æBe§TÙ0oT6Ìåʆ#kH¨làb• s¡²!¿†F!¡²AXCBeüQÙ0—+ެ!¡²AXC´²a.T6d)+æBeƒ@!¡²aÞ¨l˜Ë• ‡¤ŒW6HRF*æBeƒD!RÙ0*)*æÊ†¹\Ùph ñÊB´²a.T6ÈB• s¡²A^C´²aÞ¨l˜Ë• G($T6H"• s¡²!C¡´²a.T6Hâ• óFeÃ\®l8$e¼²A’2RÙ0*2R–V6Ì…ÊBBeüQÙ0—+ê!ZÙ QˆT6̅ʆ …Òʆ¹PÙ QˆW6Ì• s¹²áâ• "…peÃ\¨lÈIYRÙ0* • óFeÃ\®l8´†xeƒD!RÙ0*ÄÝW6Ì…Êa/*æÊ†¹\Ùp̦f• …HeÃ\¨lÈHYZÙ0*$)ã• óFeÃ\®l8´—ñÊi/#• s¡²!'eIeÃ\¨l($T6Ì• s¹²á…xeƒ´†HeÃ\¨lÈÙCI®c.T6H»=¯l˜7*æreÃáÝW6È»=ªl˜ • )K+æBeƒ¤‡xeüQÙ0—+Q(§kW6̅ʆÜnŸT6̅ʉB¼²aÞ¨l˜Ë• í!ZÙ ¯!TÙ0*rR–T6Ì…ÊIñʆy£²a.W6\C´²Aö\QeÃ\¨lÈQ(©l˜ • ’â• óFeÃ\®l8¨‡heƒAÕ s¡²!c¥• s¡²A²yeüQÙ0—+ŽF?Heƒìu Ê†¹PÙÑCieÃ\¨lbŒ¼²aÞ¨l˜Ë• ‡(Ä+dM*æBeCn/“v{¡²A²yeüQÙ0—+ÚC´²AŠä“ʆ¹PÙ ÇQeÃ\¨lmjZÙ0oT6Ìåʆƒ¢• ‹1­l˜ • Ù5¤cä• ’¦æ• óFeÃ\®l8D!^Ù y¤²a.T6d5u?H65­lv{^Ù0oT6Ìåʆƒ{­lí!TÙ0*²¾}#ûö¤²AŠSóʆy£²a.W6É • ’"• s¡²!Ÿë0l • R6ˆW6Ì• s¹²á˜ÅÈ* Ñʆ¹PÙ³“ʆ¹PÙ ûö´²aÞ¨l˜Ë• ‡³A¸²AÞíQeÃ\¨lÈeƒ’ʆ¹PÙ {®´²aÞ¨l˜Ë• Ç"h¬²A´©qeÃ\¨lÈÆ©ázˆW6HzW6<>=]•‰¿þ¢ŠiËwo‰º=¿UË+þMãó<°þ÷ó¿ñ-ìM½ØCo·äÁC_ ^GPøíë=yËmFmÛôíý´Œäwï'̰Þ?Sxë š…?ÿ<"¸ßcuÃz·6¾Œ…¾î×#ѬÈ÷w¸[ñ­õŒûx"úÊŸË.þ§ßßÅŸÓƒ?ªÓ4=…þèÊí(Kü.åσ›»îÛÚP8æO}×*œ .ð§ëØà1ŒÛ ûåØ)ÊX%Ÿ»ÀeW…†N™‡V¯”ß)ÊÙ0ƒï¡üCÓ¶ÞHŒ|ÏJ†c/IF§[ÃàL2:·ƒh‘òø¼oQ2úªoU+Q>‡a½7MòVS»¶ g^#‘9õÎzT’ðÎ×öP‰‘0î~Žx]³&Aãf(˜3H,„°~sÚ­à®®ï3npI†Þ —ãÑOL#:æ4¸e޹hœçÙ-YåT#úV­[>wlQ8¼¿¯Â^vìz†½áØõõ­3ðç¼—½¦oø.‹¯õ¡^¥çì휃ÊÙëÔc׃¹ pÆ^gt–±×GEÚr}±wÄEçw¸¯ÝÇ{O÷5ct;÷Àöµà°ÅóŽ#œs±¯1έHùhË]ö2nà`»ë!SðAYgE7vÕë%Ç8ÛéemRÆõ] é3NÛÊY>K2Ιà&½Ê¦àipZa©Ù‘ô&œÆ˜ôŽ ’ÖWö„Ð2eÜP 1,xÍ[’ƒíÎ8[ù³t#P~ÜË8ÛÕ‡ïaœÛæ«Ö4àcœ3ÎÖ’Bm½}\38a\ã:éíÀg½ÈÀ¹·±w,quUÛ6dÞÊŒeÆù냚%-Eg¢ïøà‰Ä-E§Œq«°ÂŸòÏ{×Z°áø®ÐI\o“}ø9Ë8·q‰ ¬Óq~–U¥Ûðšzùj3Î)±äþ¸Ø;³gü±Ìl'tF¸ŸºapÊÞ RO\‡†:OFy²ú,€Öý)ÃQçìÖî5Zú»…Îi+ßµZ§ÚD+d…%i¹£ÐT¾Ö·§pÌÞÆ±W†:¾,¢m¡ò#ö.ºŒ½ëï2¸äZÆ^ÿ©ÊÐBìã*û>LíÇ(Ú±øžÑйß3oäXù³ÏÏ–ŽÑ¾‹½M_ CÁÙkÆÏðûår…!³cMj+€©Ž¥·uØÁp;ÖÙð¦†b‚Ø»è0öíO±/(gÅÙÛúìÄnÊUtSB¹}.2608–ÞûU*k|´«Ú­œëhϨcÊy¨§·¢†QYå¬ûz9]K¯óðT f°’•³ªûª®œ•ç{ñ•UÎþhÃ¥×ÉUç6<—¤—»)ÚI¯Ûnéˆr¾¿%»)­a½3é5ΜJΜ¿ó'{`>Sκë8|{µò^hŒ,œ±·³­ÙTÎ'QœÖëàð¥ŒÀ¸Ÿ±wÄEŸFëU0ÙÆšŠõN¶ØJ5ÃR¹‹Ônçã±+Â9­±’Ñnˆ毌Ûë_:ïÌU}>Æ8¯v[^ŽÎú—­×»›Œ;ççÜÓP“+ÄMíÀæNWû:ŒpA†~cs'ŒsÞ­½Ø€×ZЬwqº1"ãü5 üüû¹z¼úgñ/BùåÁë;æh„ŸÏ+|ùK€ŸÏyøåq…/ ðËc>^Vøò—/øÀrðŸ<üÿ’üKaðÓm…/ ðé–‡¿~­ðå/þú•‡_ßWøò—ÿ˜òððý–ãû­À÷ÛÀßrð·<üzÿ8ÿÁà?&€Oÿ„eó™[6Ÿ…e3ÃàçóÌ=…Þ‚Õ1ýI'_›|ÎÕWH1Ç¿h'áAþÏç ÿç3ÿçS†¿zµ4‚æ)à­Â[e”¼õoe(ñþüY=_–û\r9>_è 7àc~~­ž_ÊÇ–<¿àáHwoqS|}KA'jw'ðZ/v¢¡½&ëŸ ¼Ø‰NÌþN¬eðb' tÒàÉÀà¥N&˜ï´—\¡nÁK|§oч\ÜÓ·Ô»Ïwbrø^ÂUTߦÐÉ.ž|7…™„RF¹JW‚g;ùëwþ­ø[îÙó§<_àÜgAaÌ—Þ ð9?“§÷\¯Gyy¨Ú¡cp>‚´ÂàÍêHá·\ …~ u¼»!ç ¼H?¼‰ƒ¿äß„8xÃáG¿n:?U†½1Fu£k3êG'ÊÙÞÒÝ÷íSÚNÜBkCþŽn˾¯að7zÊ špÝÛgaŸYážoäôÁõ¿gÉcŒ„ ½ûîãnd’1fÙÀz·q3ËS(úÑMÒSȶ Î)t¿ž²H¡¦D!wì‡û.G¨zÉ%p>Fλ)ŽàÅ1ºå,w‚¸HtåºÒ-ç,ãrþ÷VÝEÃÅ)Tm…å|ªâÉJ üÆâùNqŸÄ3­*Åá|¡ÞáÿÞ²Û‡¿{5<{\þª…áΆ¯Õ²}\þà_ª××9¸ÎÂ?†\‚ßÄWð×n†š¶oêøK%5‡ oXØäÁçA‡žÂ™¦Žº’&àª~=A"…ÓÔwïÛÁ§[çKD†Î$ÜŽ9œøà½&X«f#œ†vœj+X‰>[º~6ád?T¶ÂWƒô»~'=ƒ2 N¾m¯|Y1L±)MÑžDþ¨5eá|ŠÝ*ºùnbïZ²Ž½2'þÙy5X8w+“‹«ÚŽwëñòt~ÊLQ[qŠîpà$¨öü‰VðZüÕ§ë®áÔGô«<|LÂü÷¤à†rQ…7ªèÝÜk©÷Wú–î´°—¡Õáßô­¦Ó¾^æiú¢³‚CL8ýX®RË!ô1Ÿ¶ZkÞS8®P«ên9‚^åëiªøÜ?ÎôNã!”Ë_¯08Iõ†/•¼øù_}ûFÂ%¿É²qo½ÿ›¼åëóº;ülpÄz´†Ÿ_Ñêh4Àô@Õbïߤ“`¦…ÞŒ#^!ZÚ³ÖyÁj2‚¥Vc;ÂÁÒ!!,,®¸œ_¼ü8Ý”}1½ápfÔ¡Ö[îwÿfèÅþfpÓpøœ«"‹ÖÁ횎NàL°t½ñôãK_D4pøÈv¿ð)»Üýîêd%pz›´Ìph xÊ38—äæI­•GòØ{EN¼ ð†²÷$ˆLrþ†ù1‹s@)éÜÆÂ^àE‘¸$2¡¼NØ‹ºµB-Â…½¨YÌþoö`¨8ß‹Z“Û‹Z§{‘iÂ÷WÒ^´~ûœÀÙ^d­Ê¨ µ”’ÀråÎD–*ív2>xºciÿuøIÚ¤†f­WNàlÇÒCÛœ¤MÊ6kñK×´w'q&³i¾l¸`©`äI²¤Z NkYóâ^$Â÷îEŽ¥lî|/J–öT¬:'XmCá\°œldÁ‚s#\¬»Fä‚Õ[ÃᆽU÷¢`ùeÃá¯ÜŽ•«†Ðeg‚eº ¥}4b„Sùqn¦f"cl-À™ü V6ò IšÀ¹üh“‘ŒZ3ÊÉp|7}4âÏ”·cïú•؈õrÀ” XÑÃC½ÁZ'mR­–àtÇZY°L×±ÁsÁJ–öµ$X9#¯µ.–]Ì,&XJñÞÁºÛðÂŽuÇ5/X÷¥ÍËÔÍÀátÇR«wËËj6wA°ìâúqÁŠþK„3ÁjtÓ‰‚U›÷ΫÂga\°÷Œk^°¥DÁrˆÁ¹`µ6,›'÷J^° wýNËÔݬNìÖrÜ´$XVKp"X¦¶Á²œqL°ÜÒV‰uþoa‰ó¡°D°ò —Â:#X¶7Î}¬%6ÅË–“ÀYX¢_öKn êšž Ö>8Þ KœeÁL› K  È9–è2a eß¹`™nñݶÂç\X¢ÍlxMÇ(¿?,8*ÁiX¢o%Á¢QsN°ÂAù’` =›;÷±âÒöãù¿ùXçC>V Ëh- VÛç>V“¬¦WÎ|¬¡±²`©–žÇûú:»cõ ~ÄÇÒƒ³}͹—­àcy#QqÒqƒ± ‡ôq‰k _6ÜÇòZ;#X–ÁùXV‚Sk°Kuœ VH:2Á V‡Ü”œ`Ù6HGÆò9k f|¬†ž –S }ÆÇê8\ˆ .ÆØ–•Ù±¬Y Qîc)Ýs8—Ÿ®w, ƒ ¦ é2¦ ònÏk9’mÓÇ:Ë>–²:k öRïÔÇ‘ùXgQÁœUÚ”,¼´¯%ÁÚåcúXußi ÏÒùŽÕÅÀÚ5o ®p&X’< œ/–°žàcµÎMÁÅQw,F:.XfX"/Ìt¾±g>VkeËØ–“ŽoL]Æ–Kã±×¬`Ù~è÷øXgÙDz]cs‚e¤Þ©`©œ`ÙN‚SÁ²™¨ – ¬¸´ý³—é·\Hô2=gë3Røß9ø”¯pL=®|O,…ކ薶LàlŒá­“0¬ ña…³S:÷éçÉ[N#/_E ‹¹*ՀݑÀ¿Ø[½>±oT|&(¦.˜õâÄòÍ^÷ü•¿5dR€Ï¸$&ºÏ$¢`kÀð†vrâ5IþÜš‘Ž(y'¶“JICiJÃàô-Õñ{z±^亥p‰?Zrb—…‹âg31 gw5ú;¢–²«gMù# žžïáÝÀ%¼Ch ‰§…UãLz¹(íXÏß¹¢¼ Ò„ ïÄá†ßúy|zÉIïR!.“õÎV‡Z"ËøÀ‡pÓ¤¥ð§‰ÏÕµ¹0+¶ÄØ.À…=£Éì‰á¯|ËidsµÖ-ü Ä¢¢§ŸÇ‚Épz;_ÚÁX~|¡Z»1ƒÓøL5(“ þEÍpQñéœâ3¾|¯))³bh+¹R §ó/BÙ²Yž‘e:×Rù@(Ühœ}Oæ­Ú“ô XRíšÀY¡ðrnÿ.Й¹â[ é襾ü cpzñA¥õÝV  ¢5†1N^›b)›…³e³žú#ÆŒ›¨“¦¿E+:áeå6Ãå›]iÕÿ_,Sî(œ}üûP µ”j@|8[6~Õ4'Ùéÿ2 i-W·Ã­«)œ/›eÍÏÒc Noéó—r„¹³«×*Óð¹_/nÔR*õøJ·W|î\`UŸÍT°Þ%÷4›©€}øvyZ>â–,Ôš—””£$p¦¬Œ^÷¸ä3ñ‡å>c '_J†²—C¥MTN®½÷™-ʼnä.s¯h[6wzKlÕ fÉÎÝ ªg®y2Fÿ1Ú»ó „T'YÏÃVpò!ýC¸Ó7ècFº:y—®ËÒ¾öᧇWÃ0$Ÿ8\sk¨6¹5ŸÀ¿„·Nìx€ûÜ)\ D§yë¡‚8Âñ¼Ê›r¦Ù¢ÿÐk”?òv°â ¶- à|ÏH>&_UPä¿åíöa9)Žõ®:£\Ø×ò½ƒæòŸp²Ú-Ì}`p® öÌýæþ½sîaöŠÂyµÞž¹ÃÜ¿ÌÃyºjÏÜ!ZJm…SÕ ôÓ€*uÞå€Ý v8æ¯X‡ U€Ó°ÞCÕ4¦œ¯‡ª^GöÌÃÒ‰P{|ZŽ÷´MHòHÚâI'ç„„éHª¢páCº;ãðž¡0ܪ[ÖJ»§…mÂr¸Z}ƒô\OÔÁS£î2ªN?Hà4¢çÞÒL£‡ä­Î‚üx~ZÎR‘Ø«UÎé¶Ne Ùéì~iz öËnQ*çBÑ ÀIiËr+ÓúÖãÓGvk›bGá|Šº¾/ð)Æš¤.%Œ–¸ÜcaËpre‘?2±óãÓrÖdVšœ*ÎM‚pN=9Mç!\µÐR8ÚÆ…:“Áë6–ßD8ñ«Î´àòÜžžæsfжÉD‡â… ü‹o kìp>ã42,€Ó3F|‰Ï²XtHÁÍÕ œE‡ô°X=gþ‰C¯9œU èV®0v0 ~ËÝqqÙòª7¶cƒ£¦Î$$bÅ'†çŠoßyö6]FHc%óàßR³ÌÙ —G8g¯¾GWyð¯ƒ"\ª!±rð.Iá<0ÝdrÕ (E8åâÐèa‰,üªï<{ëÞfòMá$H•&7S^£rì8\`osòJ¦hòìmZ™½*~éá\zM=ÈŸF³?órï^f¯nA=F8a¯“RÛ/g˜{Mž½FgØ«xïbXc•qu.±7ggÁ™ÀöZYzc(à{Õý 0&½,®çÒÛksÊMöÎB÷Ë}é‚ôöð±y„3ö®QU0.—f¤ª†1œHoŸî_YöÚ{{ÿÊ„Üð{|ïý*o_|S6ш8—q»|b'lÊ|ð‚Œ7÷¯ ^yÙ¯Ð;Û¡ÍRDu#©•¾ézCáGö^¡wiïŽÆ·šÕÙ{•x¢çâ]»Š»*…Ë[ì)·«r¸´ÅžD¹lê†Ã¥-V F£Ísûnž)œmž§Üž¾Â‡ ã/6çÞ28=¹2„ú“x¢^I7d·°.—»ê9ÜðäS.w”.$í—hrM³ƒbsgÞq>ùä‡ÅH'$ŸäOìÐÜŸõr(c\­ ãz.Ä%þ?kߺ¹ªkû*õñg®6?“ÊÅéêT²NV÷|ÿ9`—Hãî³ÿ¬ìY‘ÐiÀ¡ÊL£IB²Á©z½['^£Às‰pF½’Ëv×\ƒÂ_™A 4 huGøõSâƒx–o="3Ø Î©WɯQ:w6ÚÞÑïô×Ã[‡ºÞÅ~œÅÀI½P®œzÜà¸)7›d7áþŸþÃr–—#~¸³‘Ö,Ù£qÙ—BÑjÄpfî§ÂQ¢Ü÷—Àé÷qùña=Ž—ñÚ²”,+Káïy=×vÃJåaüMº¯¼<ÅR”Œ¤ýŸ³’›]ܾУ¾îéúðrY¦s—âª8K™[P8iÚw«õÒcŒãÜ^ž{ÓËãEÚ6]‚Ÿ¥¬á?KÖ»ÁéB•ëÉYüË8ùšÌŠ?HDÂËÿß÷ûåqí³<>$äø.,®¿zßþ˜M§õrD¢ÿôƒn zêf½WK࣡ðçŸéSÂèn-Fÿ>§?Ü¹ÎØ~»âìÿþ÷+™;=ð´^‡‚F‡Ûû–Ñ×bôãTÝTÝÿýòÙ=NÙ©nÃzvé„ú,ÃOXÀ§›L§½ÑOXÀ§›L·t¸´wÛ1yùsò'`PYÀSAÀÇJ <õ¼Æzöo<¸tðc„‡WyF!¶³ÉSköø,Jƒˆú x ˆo™þp§Ãׂ.¯)г,.ë£K=;Š>8ámt™ŽîÃOâ"^V/øòÁœ{Z¨­óþ{þî^>ò…ª–Eðý“ü` üúöŽŸí²Pgòƒcàóy*•PœbQŽáßZWÚË\Ä\Ä ‚˜K‚˜+‚˜AùS£Aä?8IáA>¤‚€)Öo±"yåz6óª ¶›œ’+}fe—òC~½Õrl—Ú:; <»]n}ru]èvùpZg0]¶»ÀÇ-d¡[¬¸—Ï.«¢&W¼çëزûÅà÷2Â8 §zÿ¸\ÔEoÚºÛââ/7^_ 7#liOøáõ•{ù_~7¶Áu ®Ëðÿ®œžY{ƒ/?ðð'>üá·ÊÑë‡TøöÔ{™´’ÆEœ|9¥EÇ~™Â§"|› O3y¹–grb¯ÇHñðRjF¸Ëæ~-¤Î§Ò9ö™>^žúßÛæ^ÿG¼ó¶Îé' §Þ9|Ær{j†AæÒ se¹i·Í?þ¸×t&se&÷Šf2ÃLæÒLæÊLvy]J]øt*üÕq§AoÐAÖÓ øòWW: º——%¸,ÂîïÏOççõ/ÿÔ3ÝÏ/ûø!ðNÜVIIàKJŸÁOIJð›P«4†¯Û™nÆnØ’jøÁéå8EàË®åö”×›{»×ùgü!D%=¸–àë®F7]xÅåâÒo‘þ ;?u¸Ó:Žþü>%–¯€——ÿ˜²Yù¬(æ÷ ù‡VÉÊjo–|øÌFa8’¼ûí´{"ye\(á¹äÿ”^ØùDòFÇû¢N%?ª¥aU—üCQòƒ\ª»¹ä½Ü…èáºÜû3HþÜ*ym„$ðVɦÍVáŒð\òVt£Ò ! ÉTwÆoM§ 1ŽVœ°L…ë¬up%i„ç7õª¥•ˬfcÉÜ‘€eè¥F³~?¶ ØÈèT Ø+> ø‘° 玌€M'±dt"`×à<¸¡WÞ.àA NV°2žz?7 x4’À›}‡_Rcx.àáYµtGÖ"üÐ{ã{Kà™‡ÃAVvù8†èÇçêVx¢Ÿ;mÇ@ˆ\ŽñBNEvÆÁ±¤ égyRSý¬@áØ¬ßPÁ|ý¼4é'(È)Kà šÒžëÇØp4§D?Òu£î{2:ÒëŒw®#ÕëPx”î¼v£¾~éèúY˜’=;¶¿Qzð Ù¦Ÿ×Fû‘ñ#ü^Ò² ç7ÔF“Ñs+Ú§=ðÉ6ñ¾õÏC¬íÌpÛÎgVÊG¥çlY‰ñ¿òöQʸ8ûþ¾4Àüå/B,œðáH Ö§ÃÂH! |ÒC^¥@}§»OA²)â]óžéGøÌʨ¥ý„H`ê;A_¾ÕA-J8J>ƒÒ0Èèç­9Ò‚ÂèG('¤Œ\éµ í#؉ÅA‘ÔJ9ã©Auº·£>±’W$£5(Ý+º9ðæ×›è¥Ü$rhÛ–%®àG$÷U它 f¹¹IÞtBŽ#…ç’÷¡[ ËJ>df уò~³×½8•b‰Ð SŒeíʶh/°£½´nˆÃIÿIš`Sxá7Ä^Ú~ß»J>óI£ß81#ÂSý¿ïõ{ö¥«œû¤íO}’w:×®”œO„‡áxÛ܇þ Ÿ4Á˜ ù$?ü AÀ°-»´îê<:òx,i²>m‘ÞÞ1…¿9b­8ä’÷AÙ©#çj¸=…,ãNhïë´ÚXŽÔ0t~W¶Ä Æ2N[3(I­–“‹±äu8ÈFÉ?µJÞ§3‚À%ïØ6qq=ñ’×ókËRÉëntý@^Iþö–¼ ™ä0B©àÔô°*®*ù'^ò7Ù3EºeÙÚ‡òå¹y£7E'ð#Ñ@ '¥¢pb;ã“‚½ H".ϼORá.ëžñI·<óI²ï´Z)¤*QRÑ—ÇúY¼¿ÑÆ‘ÀIëó0$:—æ{ÉÃøögû ¿ËñÉîÀn´M(8Ó%ŸÇÂI B¤–°º@:ti˦ŠŽïß²©K!›’Þõ¨u£édžK\\‚ÏìÇkÁï2†‘³%¤Ážëg _– ºôÁÄø ?Sýø ¿Oï#pÓÇÚ×?·ßÖË&[ìÇg-P ðvý„ †#ýŒ~;n{²~ 9_m&ðL?Êvþ {ZHÜ~ ðÔ¿#‹×οÉ>KàÍúá{%Gú ɶݴx ѪŸ¾Wþwú¼~ÌRm¤úñ–Úsžë§G£÷´¿ý@à™~¤ñûµõÄ7¢‘d=Þn?NçŠðÜ¿ù —rÛ"Z‰æÌ̯®À觃ýÀÑ>]ûM¡Y7\¹ýô>¥6}ÏóƒÛSÔ¿•à©~\ï|à$ãßÂwÚPx»~¬rtî8þ( _Î?HèOËæö¶Ð–ÂÛ›¬£Ú.ð\?~Ó.}†kIü9ùÐ0Z0€Ïòë|â­ÕèÃç~¾"<ÕôO iû‹?}¼!ã=¥ñF6²úÑ£ s§Õ83çAB/U¶¶b½€·Ï»x{#KÈ $ߊõ›Âq—Jm®Ÿõp£eÏk2áS ®NÜ÷>7Q?gV?~GÛ¦§Ü“ b€2™<—ô3úü¯CJ+èè¹~¼±)ÁAÉVÿ&¤ƒ$D>×O/$‘´ _WÒFãéä:Ÿ€IÏíÇgájìIØ£}h‰É|âíÇgy>J9Î~D?B‰]>•ôã7®šo ¡A>•ìÇ…;·§ S(_šýÛÝLùò7u|;`8òo¶ÓCoèþ4”KF«%gúärÜÀì¼æà³Øžé§÷»wÕkÉú75Dt8þ7ü›tt¬ÛÑ¿A§P¶6{÷x'ð5MüÊëGº„¡ñ'쬥FÏý›Ïµfòƒ^,Dx¦ï]Ãdú,¦œ³dî4?.Ž÷oŽŠŽèG£ÁAA#K6÷Ázôïú`Ñ~†Nº^Ñ>Kè` ÿíÌVûE§-SY“~k!GãÈèÄLB͘ï³xÉk2:í³¨Qs}Ÿ´Äµù¾mí—+«Û"¿…>K„ªÜ( G’­Øõ+®\òFw*žÀsPϬnk3‹é:Ðbnô. ’·J.µs5MÕ‘Ñ©¬_è’˜î|B’’.§ÊçT§|®ðå#£’ä§ åsÉO%ÊçT¡|N ù©Dùœ*”Ï $?•(ŸS…ò9ä§åsªP>§ÊçT§|”<¦|r’G”Ï©Bùä$(ŸS…òY|Jùœ*”Ï‚äSÊçT¡|N;”Ï©Nù<&yBùd$)ŸS…ò9A J”Ï©Bùœ N%FâT¡|NH§ åsÚ¡|NuÊçAcÊ''`Dùœ*”O^ÀåsªP> Q>9SÊç´Cùœê”σ¾S>cÊçT¡|NIN%ÊçT¡|ýPÊçT¡|²úÉ;S…òɦ|N;”Ï©Nù§ÊçT§|±9å“sPˆò9U(ŸŒ~0åsªP>ý`ÊçT¡|sP„òÉ臡|N;”Ï©Nù<¬ŸœòÉŒò9U(ŸœƒB”Ï©Bùä¢|NÊçQ…(Ÿœ~(åsÚ¡|NuÊçqûÉ(ŸŒ~0åsªP>鿀P>§ å“Û ÊçT¡|6)åsªP>§ÊçT§|—|FùärWDùœ*”ONòˆò9U(ŸŒä1åsªP>KÛ²„ò9U(ŸÓåsªS>'Må“KšåsªP>©O"”Ï©Bù¤>‰P>§ å“óIˆò9U(Ÿ¬O"”Ïi‡ò9Õ)ŸG’&†ò9ñp*Q>§ å“)X`ÊçT¡|r> Q>§ å³`)åsªP>§ÊçT§|’<¥|r’G”Ï©Bùä$(ŸS…òÉIQ>§ å““<¢|NÊç´Cùœê”ÏãÑ £|ò¥¢Œò9U(ŸœOB”Ï©Bùd|¦|NÊ'Ÿ'e”Ï©Bù,䱈ò9íP>§:åóò¤ Ÿ'aÊçT¡|2y,¦|NÊ'³ÏÀ”Ï©Bù,ç±’ÏcsÊ'_Á”Ïi‡ò9Õ)ŸÿM] Ù¢|NÊ'c?˜ò9U(Ÿœ~åsªP>KúI(QS…òYˆéˆò9íP>§:åó¨~å“Ó¢|NÊ'£Lùœ*”OêßåsªP>êS>YýÊç´Cùœê”ÏÑàõƒ(ŸS…òÉéQ>§ å“Ѧ|NÊçQûA”OοQÊç´Cùœê”ÏÃúÉ)ŸÜ>Q>§ g“Ëåsžê‡P>§ åó¨~å“?˜ò9íP>§:åóh“Q>ý`ÊçT¡|2ù¦|NÊ'Õ¡|NÊ'¿§Ì(ŸS…òÉé‡R>§ÊçT§|md!Ê'_çÊ(ŸS…òÉÕñåsªP>ý`ÊçT¡|òúÉ(ŸS…òÉé‡R>§ÊçT§|Õ¢|r$Dùœ*”OÎ~åsªP>9ûA”Ï©Bùäõ“Q>§ å“·Lùœv(ŸSòy¼ŽŸQ>9ÿ†(ŸS…òÉèS>§ å“Ѧ|NÊ'rÊçT¡|òúÁ”Ïi‡ò9Õ)Ÿ‡kš9å“Ó¢|NÊ'çßåsªP>ý`ÊçT¡|òƒ”ò9U(Ÿ¼~0åsÚ¡|NuÊç_ôÁ†#ý ÊçT¡|rÕ~Dùœ*”O¾¦™Q>§ å³ÔgI(ŸS…ò9íP>§:åó/*7 ÑäåsªP>™š&¦|NÊ'/ùŒò9U(Ÿɧ”Ï©Lù|žë”Ïå0÷4© „F_Nv/H~}„§|®¿…—OžÊY“)§˜¾ã¦xnÖbFä;8ELb,jÑXI§ˆ‚粓w|„)>6k1£Ò"¢µèaµ˜RôËZLÞñ¦øÜ6Åb£]¨ˆÈÇNñFyã´˜±Üžù)®j‘‘µMñ¥Y‹¡ë¸-*GFg´8ô†ÓbF{)k1yÇ LñÒ¨ÅSNÙ9n‹Û‰×âÊ·o‰¡ôó}>îQ“MÀ÷¹²%æÊS^V8::³%ŽïµïæÂ†k†À›§è ¸Äïra#  % ¤áßåÂFúŽO0ŧÖ)*äšoÏQE²ÒžŠS ƒp u°½¥£ÓÍTòŽPþø~n¢°ïþ~þ‹-±ì œN1 ÂiqPö‹ßÏÅ)¦ï™ìwsíf4Ð"ø>^» ‡ 8“À™‘q7Ë—„P•ù.×nÒwœ`ŠS³G á6SÊ8ãQËÚâ`ð»âèÔ£&ïžïK³»€Åò}¼<µ\‰áŒ»¸ÐÚ¶›ß—²»R¦Íí)Ùs²Êá"cÎó)M1 Â×nL9.¦ï¡E6üs¾Ça[Ì©2EwcÅÈ¥á¤\ðOßü®l9eâðs¶IiŠaN‹£4Òw§$›=jÎ:8îQý> Ù…Ê&pˆÍPö¨é;¾Â_›jÖ¸?îQ3ÎCq¡º‘ÕbFx-/Ôä¡ ,›«á¡)Nà‡ªáÙìF¬³Î{¹ž¾ãû¶)öç©ã~¨<¥0œÑblqgî&mqÇÑ©ã;*¨ ¨æÂ†OÈQ|{¢Ê… -¸ž†ßöÛª*6²w”0Å6-†¸ •?¤Eƒá¤3Õ9§hOãŽRq½$£ãÎTúŽ vè ¢NgXáËò¥)Š aùm½C>çʬ-Ô0wy¾B`Òéç vx¢Îs88wÌs8:wnô|îâÔ@€;Q'@›;!@çî,¯wft4÷MâÔÀŒ;ÌQgFœ;fF;7:Õ{àOœ(b‡2!ꔉƒkS& s…k:wr|PAï ±âÔÀ¥;\ QçR¶÷œKQԻԼޙщÞÆÅ©d!vH¢N²8lï9É¢¬wfîäTÞϯTŒSûBì°/D}qxî9ûâКüèhî7ŽÆ©–!vh¢NË8®÷Œ–QžûÀέùyãÔÀ×;| QçkŸ{Æ×8´æ?:±÷…Õqj rˆ"‡¨9ŽúyDä(Ì]Dö9òóÌèdî ÝãÔÀð; QgxŽï‚ŽÞ:wÁŽí}在b‡ú!êÔ£kQ?ëóóÊž8!b‡"êœðu—ª¯+øyft’Û,Ì‘SYDìED,ò¾îRñu¢àç¹Ñéš”’S‹Dì°HDErhî”ER˜»^-;7:‰q ×äÔ@/;ôQ§—š;¥—æn:Ååu+ïÃÑÜo$”SïDìðNDwrpî˜wRœ{oÙ¹''´Ìüvc§œ)b‡"ê„”ãöžRJöî7$ìÜSÃÑÜo´•SSEì0UD©r<ÆeL•ÂÜUçø¼Žä6 ŸåÔ@a;Q§°ôu˜ÂRÖ»cçÎNbÜBt95p[Ä·EÔ¹-Gý<â¶÷ï£*Ô.èè4ÆÌ©ô"vH/¢Nz98wLz)ë]ñ1Žĸ…sj`È6Œ¨³aŽæóˆ S´w[ØÃ2£“5¿pfN 4±C“ušÌa?ŸÓdŠsïù¹s£½/dšSFìðgD?st‹ø3å|žÏë¸ÑÑÜo,›S±FìkDXsx›kŠzü^†ê=ÐoN Œ±Ã¸uÆÍѹ#ÆÍÑ5ÏŽýüÊË95PqÄGÔ©8GkÔˆŠs´fÅÎÔë¼e8:b‡£#ê£öŽ8:GçÎNö2 “çÔ@Þ;äQ'ï;"ï;7:ÑûBñ95°zÄ«GÔY=‡ý|Îê9¼æ™ÑÉÜîÏ©î#vè>¢N÷9ìçsºO1§x?ÏN澂N < ±ÃuÐ_ôe†ss·#Ÿ×1£Óœ6°…N !±Cu‚Ð_Ô*†³ù|AïÌèÄ×-4¢SsHì0‡D9t8ŸÏ™CÅzãkR„á¸F½ò‹N ”"±C)uJÑ_èÝ`8£wÍíßo\# Gs¿N \#¹Ã5’u®Ñ ÷O•ç.+\# s—%¾¬p$Ì]þ ×Hîpdktpî˜kttîÜèùÜpä×HÖ¹FÇæN¸FŹG¾¬p¸¹àÉ®‘¬sÎsŽÎ꽕k$w¸F²Î5:¸æ1ר0÷´'+\#^ïÍ\#¹Ã5’u®Ña{ϹFE½G®‘¬px½7sä×HÖ¹F‡í=ç•õÎÌrX?ßÎ5’;\#Yçž{Î5:´æ?:šû®‘ÜáÉ:×è¸Þ3®Qyî;wnt´æpä×HÖ¹FÇçžq­yÁNì½™k$w¸F²Î5:êçר0÷”s"+\#~îÍ\#¹Ã5’u®Ñáø.èè­süèØÞÛ¹Fr‡k$ë\££kqëóóm\#¹Ã5’u®Ñ?øºKÕ×ü<3:Émš¹Fr‡k$ë\£ðu—Н?ÏN×|+×Hîpdkthî”kT˜{Ê5’®ãš¹Fr‡k$ë\£Cs§\£ÂÜS®‘¬p¸¹àÉ®‘¬sÎsŠsï-;wÄ5âÖü®‘ÜáÉ:×踽g\£’½'\#Yáqs?À5’;\#Yçqר0÷”k$+\#>·iæÉ®‘¬sú:Ì5*ëݱsçF'1®™k$w¸F²Î5:êçר¸\#Yáb\+×Hîpdktpî˜kTÖ»âc3:‰qÍ\#¹Ã5’u®ÑÑ|qŠön {Xft²æ›¹Fr‡k$ë\£Ã~>ççÞósçF'zoæÉ®‘¬sŽîaרœÏóy7:šû®‘ÜáÉ:×èð6çõ.ø½ 7:Õ{+×HîpdkttîˆkttÍs£c?ßÎ5’;\#Yç­Q#®ÑÑš7:S¯käÉ®‘¬sŽÚ;â;7:ÙË4sä×HÖ¹FG玸FGçÎNôÞÌ5’;\#Yçöó9×èðšgF'soæÉ®‘¬sûùœkTÌiÞÏs£“¹7sä×HÖ¹FÑ—ÎÍ=rd…kTÈi[¹Fr‡k$ë\£¿¨U* góù‚ޙщ¯kæÉ®‘¬sçó9רX¯s|íqØu;×Hîpdkôz7Îè]sûwÊ5âæÞÈ5:¿v/ËËû¿ø¹¿| «³‡hîŸâç>ßY2í~¹¼šÀÿŒOD¸Â\ÀÕ0ñ‡å·x>Àƒ„ò§óÂÿïÿæ÷dôÁtj€éðÿ½¥OÙÑÏp„û…Ï?@B?Ú$´Œo ¼IB«¹+ Ï% š¶Ó#+!ÛÁUç$´ìòs i×ù=>…gòIÿÔ»Ï$¤›$ä—°‚#¼m õ2\ý;x&!SºQ;%w×®­!G$dÆp;¤#£çkÈËQhûÖ³ ™V+3cœ¢9¶†dèÑ8ðíÏ×Ö¡m­õî2 IA$®.u Žÿx.!!ý;J¸æùúp¾MñZŠ?x )Ñà ÙÞje²s#\£pdeÂKHhº†BÇ¿âäIh¹Fx‰½™„NÞyGGÏ­lð.\ˆ~“ãõ,7 e›„L/"ðÆ5ä.%¢~6x.!5øw‡J(Ü©(œHHônÙÀ£5´JHb8YC>¥u›•]a =6®!ŸõÃ-ÞÞ&!áíGFÞ,À‘„¼-Z9225> ÁpFB~cÄY™%T N$$e/`Š/ ¡—F Ic‡À[­,Ò%Y™7¦QÀ…7‰„¤Ÿ»…FÀ©•ùW¤±LŒÁHÂð\B}PƒŽf2„¦V ©ò¡o”Pð•‘ p"!á|¶L%´¬`¡0œJȸ¥ý™KÈljÞ:hIhôPWöz ]%dô8Rx£•õ ?Ü`x.!é¼-ŽLÆèý w¹c8µ2!–Ël‘„L7ôñ¦q€#+Ó¡J 5³ëOÐÏsc´w¹xórÃhÈèh ~#5À1áY,´ˆÁè'/¡õf\º†ÂuóÃÉÀóXæÂeʽ‚)¾„ÞZ׈„éo\C.ü€‡p䩭ׂcò!¿†„âßÊžzM8QN¶àÂx¾†|œè¥À¼ƒ„Þ[󡡇RF„7®!×g¢‘¾³Zêåv`¬LûEàb˜y/ú!§îPž…åáÆžŒŽÖ÷•R¯íú±%Åþ¯ÖŒq€¤8Â%dCFn œX™Ï¨{ÁÅ2Ÿç ÎYöá¶íÑ›# ù)ö2ïë'dŒŸ£ìõ( ¼5ÚÛPÇŽ$䣲Š7Ûf±¬÷¹¶Âp&–‰žî:B¾:8úò(– atè#_•ýjöC½µÞè‡ÿŽ:&4¿J£ec™w#†ŒÎù!¡¨„üžNöÐ[x.!¹´ cNýK€„DcNm”Ö"¼QBá“ •€£5ä§"­csjaµ³ÎHHZ’:x˜~Äpí]çs®Œ¾` }5G{ ´­o´2Ÿk :%Gº=Åyjo*‚ŒÎxj﫹h/”ŒQê‹õÔ'7=ħ` }‰Öœ:’|"¼QB8^C¶ñ6ŠÌù-­ÔÎì:„¥;×Þ'œ&‰ö_‚õÔ>`JLáëoˆe¿c™V6f$¿»££ö~žÀÉGÓ[Zòf¦’Õï®heëÆ7—PÈtœƒú7À‘òžÚɨÅ? ¡?­ÑÞZ fFxór‚Ô‡–§ ÙÀ’vÎHÈpû2¿í‹[ø šß—ùl œÝ ¡ÿZ×:áÍ~H¹AÑqÚt£0–óÔÞÑÆÊÂÅ|È{*!5t½ß´ G9µß;ê$«íÁõ~ÈGÂ8H/ŽZ™O¢§îEao¿@ˆðæhï”…ÀI´wƒáv®>QR±_p*¡at#×Qô Gû2× !¡ú!ž@BO­ê-(#¼µ‚Ö²§pœSûÄP+ÇÕýÞ6gv®ŠÛÛ{!tOไơ3ZA phæþÐ\ç­ð—¹"¡¹ÂšABs‰?4WøCps\þTÊš+ü¡$4WøCóh®ó‡Hˆã1Âü¡¹Â*J(ò‡æ ˆJˆãÍ;ü¡¹Î:²†þ•áÍþPy 9"!†?Ĭ!†?4ïð‡æ:èÈbøCÌÂü¡¹Â*J(ò‡æ ˆ‘ÚwøCs?tÌʈ³2Äš+ü!NBˆ?4WøCŒ•1ü¡y‡?4×ùC‡Öå1Âü¡¹Ââ%”ñ‡æ ˆ_C˜?4ïð‡æ:舄þ'!Äš+ü¡’„þÐ\áñÂü¡y‡?4×ùCǬŒð‡8+Cü¡¹Â*XYÊš+ü!FB hÞáÍuþÐ! Qþ/¡Œ?4WøC ¥ü¡¹Ââ$DùCóh®ó‡Yå1Âü¡¹Â*XYÊš+ü!ÎÊ(hÞáÍuþÐÁ5„ùCÜBü¡¹Âb£}Κ+ü!&–1ü¡y‡?4×ùC‡Öåqžñ‡æ ¨Ë]C ˆYC hÞáÍuþС5DùCܾ ñ‡æ ¨à‡RþÐ\áqkˆò‡æþÐ\ç’åñV–ñ‡æ ¨he4Úsü!NB”?4ïð‡æ:èX´'ü!NBˆ?4WøC¥X–ð‡æ ˆ‹e”?4ïð‡æ:è¢ü!>cÌøCs…?TôCBQ Qþ#!†?4ïð‡æ:è„(ˆ[Cˆ?4WøC% %ŹÂâ¢=åÍ;ü¡¹Î:de”?ÄIñ‡æ ¨ä©þÐ\á1~ˆáÍ;ü¡¹Î:$¡¯¡œ?4WøC¥]Gš+ü!ÎSSþмÚëü¡ƒ#æñk(ãÍþPÉÊþÐ\áq~ˆò‡æþÐ\ç\C˜?Äׇ2þÐ\á•$d¸}åq~ˆò‡æþÐ\çôC˜?ÄÖ©sþÐ\áò¡”?4WøC\NMùCóh®ó‡Zæñ{ûŒ?4WøC?”ò‡æ ˆ«äSþмÚëü¡C¢ü!ÞSgü¡¹Â*î:˜hÏð‡¸Œ‘ò‡æþÐ\ç·rþ·/Cü¡¹Ââ+ùh®ð‡øœó‡æþÐ\ç”æ2Æ”?4WøCÅ5$ݹRþç©)hÞáÍuþÐÁ]æñ»ŽŒ?4WøCEO=:®ÆˆùC…œñ‡æþÐ\çΩsþP)§NøCs…?TÜÛìÞ󇸜šò‡æþÐ\çé¹2ü!Î!þÐ\á•;Št×Áð‡¸ž+åÍ;ü¡¹Î:è‡0ˆ«S#þÐ\á•üÐÈìíþ¿·Çü¡y‡?4×ùC£=æñÑ>ãÍþPAB)h®ð‡¸}åÍ;ü¡¹Î:VA#ü!6§ÎùCs…?TÚ¹*noOùCŒ„èþá|ùQ¿ïëòçÔq¡F¸Š•Ðõùg·>²ü“2t“,ý÷óÉSábï®–5ôóšÂ}˜‘\-À¯ŸoÉSacåN~JþÝÛucdôûä)zFfÙ´üþ¾Ïà>HXG^þjLò” 'Ü+±š•Í ]VvƒûE¼|rY™—éÛkzzž3ñú GPÜc«âŒ4Þª8orTŽ'÷¨°âîB£ShEàHq>×0nÉòÅe×…±ŠB‰aEaÅyhGàŒ~be;WI¸GŒ]¦ŸÁ P[¾ý<7ë'žá-ú¹Ó6HÓN kн´T?}Nà1éǧ‘ÂIÉê'ÜiFFÏô£ÝbÖŽÑÏÚI'£kÂûЈ^ëY™Å!ªÆZQ„çê½Ý›FÕ{»*“|¦^#—Ü`µ©÷­U½:ñ\oÕîz%S¿é#´ÙUï[I½½×CÔ‹nï*¨W8×»ê}+©·×f¥"åêõ?8a(œXo8™ž¨w»Œ“|®^e up/ĦÞÒUD½½`àÍÞ5À†Sõö½ÓT½¶Sj„Èð\½¡–gz£yõöÌè¹zµ×bÃââ`%=Ó¢òÛ¿ذ˜ßoƆÅä~³LqËɪ*Þ_*妸Ò=4ŸI.åx³â‚ORNâÐë¹øy>ã…2:èb zåìäÕËÁç#f=bõÇ™FCûÔo ÈèH½oáw3'ìiGö£#/Ÿê}ib(k y¬¦ŠÃn7^ÎFòØ!R!.gPܹUïÉ ¼Iï½ßh§Ó‹z÷ÛtEõ>øX¤ãíjç’Þƒz¤zw> v‹âè™z… ,…^J¥£ë<2ƒX®S@í;/8ãNó¤AH.Or~kï8Éçtˆ]“KL–[·)~ÕÞ¢ÞPCò»[à©]Kê5º7Œ?¶Ïಠ€#õêPì\؆¹zU¸ôFD¯ÀoSN¡*ïŒ,øc($£gyRèÈÝÖf®Þ¡“FAçúRÞåŒÎj&OÒeD‡Ôë3•QA̸<ÁSO­êÕ#l¡x‹z½lýâpN½½áÔÛ1Í8Q¯FC­÷¤‚Û†âR«×9!í®zŸxõ†1zk©zu7ºJ¸ެwU0Uï*ÊI>³^7:¨²]â^¨u+}XSÞ䜽ƒÒ>.NÕ80D½‹‚e¼îõ¹äœÇ@¢Öë•cÜGgr.Aƒr¨Þ…Ý3‹@1A9,x«X|ù|¨`~=”×Â)Y¡Æ¢Ød,4GâÅ››âš·?ƒµ‚Â[²è;Š»½0Žô¾~ÏÃìnu¾51<×»öï8Þdù¶7°5lOæÎo’ˆÞ·—À¹=°!zŸJ:¿{ œðŽl2–ߘÊ&áÉ©XïÒ‡¢äÒÑMqm»§Åà•¤ð&½ë1dpïÇ¥°{ …Zù8S£N/\åô®¬ĬÍõ<ó;ÕC¹=ŽÎÞ}°ï}O_ž±wAõnCC/~»qa7_KßÎïzGVïùm±¥$|»-–n¾$TD8jÑìçûØÐÇü¼ ,^Ÿ) 'z—Ã(Ùj–²²4ÁúùðÙ‹t½dì}·ŠÁ—Wâ¹¼ùê—4 Ù»O³DÌDÙÏo׆¤zI¸óò8U_žâí]õä婽±| Aí}ŒßµÊûMqÅ›µˆŸjÜÞ¤wÊ.²ƒN‹ÔÒ9¹çç޲4ÛÙqX:ˆŒFGEà¹zÇÀwpƒâË\'Ý‘Ñ3³üx'’?/¥èËÓ0®GÉ¥oKš“|¦^Ÿûéäú®M½­{ëð­•"ð6õêðѧKãdqomÍúev]½ç’zÏí-߃QBüÞz _Dk窘ž«7|yî7öT½á³òÞôdîŒz¥åÕëwç#'ùD½}8Ùø\rxÙºù2~ 'ŸZ¯Ï[…‚6‹|ª´˜V†DU½O%õÃ` -¦ž=W¯D¸^íª÷©`½®ë•¥=ˆa)™™À©zVüæKt¬äs笠ÅtþõÜÝ_Âoñ/¤Ÿõ‡×·\ï~>oðõ/~>—á÷|ý‹?Þ—áO|ý‹?=Vàßÿ.Á¿Ëðxù—ÒË¿T^~ºnðõ/>]+ppáñ©×Ïí©õ/f×Ïò —· ¾þÅÀß§2ü «ãZZ×Êê¸þøÏügºV$ôïø~þ‹)¾OŸþþKð£´?*Kp†—ŸÏ!¡^y ÖÐüù7ƒ|6 Êš+Êš%<% O}ÌÝçBEŠá^~(¼ŠÿíÏÇÿóQ€ÿùàá¯Á]>G}âßñuÇïÆ§jî5>Uó¢ñ©š³Lžz†§ž+OUUó}ÉSðo]*ÿVÍ&OUü]|ªæ°’§*~)>Us?ñ©š—Ižª¸‰ÛS;¶ŸúsKÉ[\08]°8±eá [\Øi(ÞâàèŽgV×ÚP†ˆŽÉ*U¯ M€Þrp\¸ìGÞâ´Y¸FðÂ>®ÉáØâ ŸU†Õœ^ÎÿV«,ZÜ(Zj•%‹[êa,N÷äå™gKû87 Nbœ3–µ¸xeçÚnŠßÇÁÙò œ‰qkÝf¯Vy.Õ*שUJ8R0…c»tÃÚÓ%%ïFF'véÑ–­UjFïÜ>®/ìã¤fá8ƹ‚Å)¡X8n»•*'Îrp¼[ìk»Ù´^wþ·ZeÉâô² Ü­U,NX- û¸Q8gqš·8à_¦pbqbä-Ns/3µJÍWNäØÉ¨œô±íá´Vy#Õ[²ÊRÑá'´Ñ|Œ‹×L&ðöZåhòò\­RbœFŽ-Î,N(ÉÂq­Ò,.nÀŸK·(˜Ï*­NkVç«Už µJ«›j•%‹e¡gÅHàÄ⼫ µÊ¸‡})g•ëË3µÊ˜˜E8µ8;ð§ÜHçÞ¾³pôe§µJË6ºCéZj'çÜšQc‹Áƒx{­ÒÚ̉qЏV™•:‹ µÌâ– GgǵÄppœU:¾VsRx9ÿ[­ò\¨œ89¶Ô*φB¿.Z†Z»S9Æ[°8ë…“' ¿NR8ÓX}qÎÉ©UZAçN“Ge ý8gèËÓZ¥ìùgFGôÎUNÔÈVN¼·dôÖZe8CÝ:nôæÊ‰“,Yœ)¹¤dçŽ,N²·®æ¤ðrþ·ZeÉâŒZj•¥}œ[kªf•—¿ØÇYc)œXœR…Z%| “À™î@ï pIDÇÆ8ÃZœß¢Ñ—§µÊží„c²¤"pbqzÐ|wÀa0œF›ãk•ÚÒÑ›k•Ú Ur£‹³…'Ž»¢`qJqp’U–8'0÷0æ/žÿxû~åeúUüª Â_¦gþë™—éw|*³ÿ½êÏÿ­ïHèáv¡9’w”¦ƒ àä—§¸w,Àów¼Ûà„ÿ˜Nñ}ºÁéÇzÉSÞ¡¯§àÂ^66g¸z œ~à0lÉ}rÎÁÂb…BÀÿ¶¶„Ï%`K™À_ÉS78“ çìG"V¤çp±–L}oÌÇÑ—¿âôZÜö—Šã‹ð{<ˆß¾,æw&ŽÏnÂE¥üW9qÙ|ŠÂ²¹ÛX¬ì²(œVß'æxŒ°pœ#)÷ÜÇkËÃ9õBÁk”®&? 5\²~?‰Ií„"B„ß“§äÚã™ñRX2:óÙS¢Y3ë¢~F §f=JF?wË)ìÎéçö½M  ÐpN?Pî ¸ž1ÛÜ>)z–X?ÌËã#O—f̉¹IÂë2ŠÇöNËåè~想„Ûþp^Ï{a k%§³ß0Y gö/ÛWé‰2w 8>Pbéf¨˜6²ËÎ[œå›æj5 œ4úÌ­øJ¿"ôåi ÏðÅ–~§á4Õ+r~8ï+îáúо]«%ר‹Høý.ŠŒËáìߤ¯èË¿ßç/¯¼‚dá³*yÎâ”:ºk–ƒ£„qí~2»²ØÊ ðçbqd Œá_Æp| Òº´Oüf^[ 'v„`¿®yAšæ@Šp† Ùª%ÂN-Ãx&"Óû3khx¬ðt#œ‰—ëö­æ¬´áhi‡µ½[îâI_þÕY·~ø˜Šåº1ÿ`|ÝR~¦ÞFø\¸_†]ÍDqœaE¦‡Æ*aá8q…D§Šû.å_ÃX™ä¿Kab¡ÜãÃÂH˜ø.}|¶¶r(±OàLrëCÑÏ=3{ÿ.eýVòY¿RdîL4ËmV×+îCÅþc„£ôZÉq­–Ìè3À- ¼¶êÈfÄ`8»3±…e£4ÿRÌQöœ£ôå)Ó6ª7œ_óUúf~áõ3{öSº5_áÌ>>õ}~)m@ÖÛ.ØQ[s|bg•¡/ÿ}߸'Lë_gM¢P.‡~Äýù¼žÑÍVœå©px™ p²¸„ݵÉ)à!%Ž_°œY6J–vRШˆpêmÖ«ÝØ“£…¿’o{ÞÛ(!˜—ÿ¤__®¥„_˜Ÿ7H:úõ uù…]¼èŽÔpŸçHG¿ÇçQ/â`æ¬Î¾ä ìª8Æ')‘®Íââfoq%pº¸ŒeòIW>”©ÉÆ,.CàÌâ’üÉbp–ÂɇGãzò™RÑ4óòŸ”¹*™Åµ®.§‹ËÜ|]\‘;z_Y\+‹o§HPY\¥zFÉÂ1›+ÙV•W?ì.®ÇÚâ’üâÊveåÅ¥Jéµ&/Ï.®ÂAAC$&?–—µ…Å52£3y’¼çJ(áåÅ¥Ö#èâ’Ú8³¸Ö¾ÁΞ°°¸‚ˆtaqÙ…£ÅÔYó\Rí-.Yó\VðaQABÖ<—+%á œ[\…o)á öNÂâv¸ ‹1(˲çê·ÃµÉâ-³¸ÜzV]\f¤/O—YYï²â¹ä}eq<©.È……£°Ÿªå\7ÖUmqÿ&,B@Ör®›z™Åe œ[\¶°¸„¡pS‹ƒ /O¿´U…œkéèÌâr…Å?'‘•œËq*ݬˆáì⥰8²pÁøŸjžkÜ]\O5ÏŇE?ï8ã¹Äʾ©z®§ÂâZõ[X\p†\§žKúØJ^ž.®uˆ..MáÌâZ·ŒçŠn÷©æ¹ä©t¯#†³‹kà—òAÇž+éž®w5qµ)[¨M‰´¹Á¹%x¢·AáÆóú©%l[]®ú  3ŒþÐÔt·˜Àéá¦{WIÚŒŒM1|I-Ö°H]¥€=ÀÙo 4ó‘@>E€_â)ƃ‘¯×Ú]iІ3S´®0ÅžŽÎn¡G†^›Oà×wË^ü¿'¦¬ •¼¿?¿ÿ<>Eg¦h]i£I œ£ÂÝ>H¬x«¿' ŸãÏ÷çâ%ªÄ9‹E8S×ÛÀHn-ÞJÃ^àøkäènP}§SFƒ'ˆpԓ„\ÎsÉÍí¬F&»1Niun›âŒrxG€3w-Þ¦8‘&4-#œTÏ…ü!Rô†ÂéY–?s_X %pÒšÑ+üŠˆ’ã` l pö<ŠÂW+2¦?jŠ+%4ÀTIàCá§ú‘%­| pª£ùn™·jMá´J×|ÑXõNôcn§dî$œÅm£³Íý«¬¸•¡Ä)N3pFq–Wœþ3ÀÅmÇâzÝ  pæ¾'[¸WfÔtt¦Ú»až—ßF8VœÓ·óŒP)WÜWYqëèü¡/\Õ,N”ç(œQœ¦ŠC/¯ÊŠ+}ï âU˜N-NõŽÿ¤6Vn8=glä—ùáHqÁäVÞiÓpsgËK5ç…«ÂŹ ÞU¿{êMàmê å§Èè\À+uˆáâëÎÜQã ôƒXÔOà¯ô2‹Á|ttb—Ê©õÓJ¾ pÖ.Ç‚]Ži -•ƒ×ëá8Å …SÅ[Kaþ¬¤0ŸGS=À§¬Nɤ0–Âi 38¾‘o>LàÄzoýÏ+âü£‚Ö>À¹6géÌd¡% G‰NÌT¾Ä,þ%^Þà‹E­=•"!†óañTŠ„Î…Åoq½¦p.,²Â,àms?p7QWGçÎBããðwÅ­%R%ƒÀ‘âÖºíÈ(n%a8ûíÄPúvb¤pî’å·±˜æ Š[YD×ã¯dî¤TTþø!¹û9ŠŽÙZðj6÷g9ËÃï‘3E:ØZÈü‚¶˜jlpªÞÐã=ñ[ €3êeùéÙ݃ ü•äTèù[¿~J|ýíø³çò%¾çÔ«äiçð® ï8}vŸ%¶’5ïP¥aङ#×o[>æÛ#ÌŽ 7¡öaWý|×A&é×į™+áÃmÞÌÏ78þ()–pÉ"Âý?ý‡?õ;ÜMÁžˆºd!$ôç¼ÿòKAHÎÌýM<Ü„£ "œú™ÏÞ ^[ªB…^Y Ï›m¶Ö“¾–¹¿—¨1¼ˆ^K„þ‡Ú:_á¿çïîå#_¨jYß?É–À¯oïø©Ñ. u&?8>¿‘§R Å)åþ­u¥½Ì%AÌuAÌ ˆ¹$ˆ¹"ˆ‘?5JDþƒ“àC*˜bQo¯—Ëò%øïçÿºË,渵Uqùѽ½–±‚ÂS$-57xMŽ+!¶k¿TØMKŸŠðm&ü‘vq&/×òL–pðX<ú7d©/W>_øSþ ðÏü³ì>^žúßÛæ¶ÿG¼þ¶Îé' §^?œ“x{j†AæÒ se¹i·Íïþ¸ít&se&·f2ÃLæÒLæÊLvy úzì‰íᯮ#ƒÜÃ#t÷åñ¾üÅÁá..KpY„?Üß?>>=>®ù§©ß]ö9ðƒèÄ8lX_¶ ü”l’:ŸhDøºMÚžò©·jiˆ¬ Û¢÷[ûÁn¶¾ì†¶§|¸ĸ$ëèöô> 7ŽŒ¾î†àm8Óná5\¿Eúƒô[G E$£?§O‰å°¢í¯SòƒÏe´„OÌî@ò­’wvk'ðVɇ Ó£äxÉ›®×koI~è¬áà¹äOtÖr&ùEô|áTòV:µ+ù‡¢ä‡qù°HÞ®‡E{ÉŸ[%ï×!ðFÉ‹Nëa»k8‘ä­ßÙ¬ÜY$Sã%o¶¢YG·²»¸·¢ Ë.®:€ç…›õËwf5C’˜À3 K݃„AÀ­ö+ ¼yi‹ a GBùnùh xX¾Y£p"`å–v ð ¢~ xpÌË“l :õpÿ~iðâ<”%ðv¯Ý GFÏl¬÷0k~-nm?H×>ÜJੇ9>£—ëÙ4Ä©(›¸žN?wJûа~…ô£ýÒF:z®ŸÕËôc&p¬?||ðÓÏk£H š^ÒO.yíÂÜ-çVC§ÔztJ&à“ó’7p~tÇÁsôÈx˜“—=p—8'`Ë ØÉq$ð\ÀºóKK€»€€/­ÆÑÃ\Àòa+†#5˜Îx?ä8ðÖ]Ä…7Ÿ¶娃êƒzµ¥£gúñYÏ8®74æú>þŒ¶§£7À¨äQÏɬì ôóÖì Œ¥ðúë½#<×’]¯†UÀ™~tï%$¢õ¾ñúéCv²œÞƒôã—¿ÓŠŽžèçNûø£Üz!²Ñ93 owPvDtÈ~dèùÇ5$ĦŸðõx“ý„Ï2ü€~ Fá¹~äà#€]È<ÈsQÃ0xîÆ¼vb)t‘Ðí%ï©ÁçI^úÄJÞç7dt¢¥{&ù üö .å&ùp?Q[n÷†%ð#’—ÃInä¼ù9*y®‹)œµžA$oôØ+ GÊG–^/l>fÑi„†Ýpi †uÓå¡Õ'I [ÝË_l¸ÜáHò2ܵ²&û$gºÁòòù¶Lj–ÜrCî“¶<×õÏ©‘õI£ƒ;F8Òw]väcúØCÒáX?£°›¿@ÚiÝ5ÈÑÆ)>K𼏼½BÌ8 6ð…¤$b9†ÁíFx®†ÛS¤!tÈ F2w¤†¡ÓJŠ·ŒÓÖÄHF§©•b|Ò’N¹¨Þ'üSsº:B)"Â%ïØ6°8’¼E»^£JÖüèàF—Ž `y IþÎïÁ:3ŒP 81€AËMãuÉ?ñ’_MÀØ<Éo7ø3Hþ¹Uòf„}`„‰Jb8vXÚÈ'ù-´–qÍ?ó>Étþ  RÉíOõc•ꜹ}†w6>+JàD?þÁÏcGC_ëÇ/ï‰Î¥9O,¤Y—Ë“.|ž¤C vý(0×ÏÐû ÈB±&³˜ Öö$…<ó\Þ#úmàÀn´Í ™—çbºäóØÞɓŔ¨i‡5Õ)Qÿ']ø< S¢¦ %ŠÉc1%jªP¢˜}¦DMJT9•|›S¢ø<S¢¦JÔT§DýC6u)dSˆ5U(QŒý`JÔT¡DqúA”¨©B‰*é'¡ LJT¡ˆ(QÓ%jªS¢ŽêQ¢8ý JÔT¡D1úÁ”¨©B‰¢þP¢¦ %ê ~0%ŠÕ¡DM;”¨©N‰úýˆ®Ô„H)QS…ÅéQ¢¦ %ŠÑ¦DMJÔQûA”(οQJÔ´C‰šê”¨ÃúÉ)QÜ>Q¢¦ §‰Ë%jžê‡P¢¦ %ê¨~%Š?˜5íP¢¦:%êh§Q¢¸:¢DMJ“`JÔT¡D±’œ5U(Q¬~rJÔT¡Dqú¡”¨i‡5Õ)QG%ˆÅéQ¢¦ %ŠÓ¢DMJWÇG”¨©B‰âôƒ(QS…Åé‡R¢¦JÔT§Dndå”(^?%jªP¢¸> ¢DMJõo„5U(Qÿ–R¢¦ %Š×¦DM;”¨©N‰:^ÇÏ(Q|?£DMJW­D”¨©B‰âI %jªP¢ 5™”5U(QÓ%jªS¢þbç©0IQ¢¦ %Š©É`JÔT¡DñÕ°Œ5U(Q%É'”¨©L‰zžë”¨åÑ´Ð?¾œ8ZüúO‰Z /Ÿ<•³Šâ˜U£û7 ¯¹½xþŽ0ŇÖ)f ·NsJSLè;Ù3úÎCqŠé;žaŠçf-fD—cS$$Ÿ¢•¡ZÄšsY‹É;>›µ˜QMŽjÑlŠZtƒdµ˜RXËZLÞñ¦øÒ<ÅŒ­qx¡j »c€3S´ŽµÅŒòRžbòޝ0Å×Ö)æ|‰)Ò—çàh&7ºÅ‰{ùþ/ÿÖî+ÓfõQ_‰úüe_¹6]òY¡&ø[ÅWÆwb›b©L¦Á~`ŠY«¼4ŤۜLu›at2Åô¥Ü¦Xª¢R+´!ð#SL{ÒE+‹mÝ<â%mÝ8:µ²øŽ—戗w0;’¼ù[šb„›bÖ-G¼ôÁ£^šÃAèøGÂÀq`[;¼#Iàà+/Žþ´\SEàíKÐ[ŠÃp4Å0GÍÄ2Ävºýí*­ØÑئØìHò†È¿8’KÙ‘„A8_™5ZÊŽ$}G°ÅK³#É{ ÿâH.eGa“®¤Wq);’ägH°ç¶ÝÁr)äçóÑÝßëJIáx¡z#[¯!'áÀ)^p.ìNù;‚»™Z§¨cça>ê+u¸—²Úù¡8E£9_Ùwr0Ûm<ÉèdŠé;ÂržÛl1L®œOàG*Ó\°Å0E30 uè´I´X°ÅSþްœçf[tÆQxûƒ1b84Ìr¿‰xƒSP™›Ë¶˜¼ã7,çïæºP}ÿ>n‹Â(¨¯~—wêaΣúÝlc¿Ë;õô'˜âÔiân¬p𾳿ׯ†“P¶t‰N !±ÓõÆÐ¡¹ÓÆPyî#;÷Ð1Âp4÷[ûèÔÐ1;#Qï_óYǨ´æUgø¹›Áa8Zó·¾Ò©¡•$vZI¢ÞJ::wÔJ*Ì=|*ÊÚ;7: ãKÃéÔÐc;=&Qï1´wÜc*Î}àw¤ÜèÄÏ/¨SCóIì4ŸD½ùt´…šOŹ >Æq£_·´¨N ])±Ó•õ®Ôѹ£®Tqî=ã¸ÑÉÜ—ÞÕ©¡]%vÚU¢Þ®:Z…Aíª£[nt2÷¥©ujèc‰>–¨÷±Žêõ±ŽÎĸ¥Ûujhp‰—¨7¸Û{Þà*V ,ïë¸ÑÉÜ—6Ø©¡ó%v:_¢Þù:^žÉ:_å¹~îÌèdÍ/ý±SCKLì´ÄD½%ö{…áln# z§£S½‡ÆÙ©¡W&vze¢Þ+;<÷¼WVÌiŸÓªxœâsÚ­£vjh¢‰&š¨7ÑþBïýëޱ÷[w ÃÑÜo­¶SCwMît×d½»¶ÂýSå¹ËJwMÂÜe©Ã$+Ý5 s—Ó]“;Ý5Yï®›;é®;7:™{swMît×d½»vhî´»Vœ{ì0ÉJw™û‘îšÜé®Ézwí ÞqwíèܹѩÞ[»kr§»&ëݵ£ku׊sÝ5Yé®ñsoî®Éw×væNf…ºkJѲÔ]“•îšlê®Éw׺sÜ]+¨7-ÇÊJwSïîšÜé®ÉzwíðÜóîZyî;wnt4÷Ý5¹Ó]“õîÚñ¹gݵòÜ fÍŒNÃxkwMît×d½»vÔ¥¡îZaîiûEVºküÜ›»kr§»&ëݵÃ.-ﮕ\ZÒ]“•îšlê®Éw׎.mÔ];¤^Ú]ã2•Ý5¹Ó]“õîÚ?¸´KÕ¥Ü93:qçÍÝ5¹Ó]“õîÚ?¸´KÅ¥‰‚;çF§jkwMît×d½»vhî´»V˜{Ú]“•îÊš»kr§»&ëݵCs§ÝµòÜGvÆÍý@wMît×d½»v|ÍgݵҚOºk²Ò]ãÖüîšÜé®ÉzwíèÜQw­0÷´»&+Ý5>Œ7w×äNwMÖ»kíw׊sø)7:ñóÍÝ5¹Ó]“õîÚÑ ê®ç.øÇN|]swMît×d½»vtVœ{ÏÇ8nt2÷æîšÜé®Ézwíhu׎nY¸ÑÉÜ›»kr§»&ëݵ£zGݵ£sçF'1®¹»&wºk²Þ];lïyw­X²¼¯ãF'soî®Éw׎—g²îZy;3:YóÍÝ5¹Ó]“õîÚ_ìe†³¹(èŽNõÞÚ]“;Ý5Yﮞ{Þ]+æ´ŽÏiQwËët×äNwMÖ»k¡wƒáŒÞ“t׸¹7v×ίÝËÇòòþ/~î/è\ö!]áþ)~îó÷í‘¥ºÒ/'£øïïŸñ©“çã ³­ùøÃò e0<Ì=jèT¨]üo~OFL¸C.·øÿÞÒ§ìèg8ÂáÕç ¡mZÞÒx“„VsWžKè´Üâ§Ç‚„àÌ%€S Ùµ8”KH»N 3x&!ÿ˜ô  ÒMòKHHXÁÞ¶†zÙ Ê žIH(ÑÚ)YZCÃ×ýÒÔŽŒž¯¡piŒŽý¼³ ™V+óÙ"ð¶5$C Çox¾†´Õk8ÀKÒ!€7®!¿¥TÞ;žKÈo¾Æ^°ׇÇÛ¯¥øƒ×ò¡[x£•©àFà›{€#+2N1ZqÅð\B¡”¦œ kè4ØÐŽçÛoðÜÊÆÞÇxOÀYn:Ë6 ™~ 7®!Ÿp)!É蹄Ônp*¡pÉ‹ÞàHB^£’ÔÊÂéúCÝx€“5d´ƒÒÖõÖÐcã2"žákhyIhIH{?$•+HH8‘ß/§Fäêƒä•–žK¨7óÎ Á Hè¥QBÒz7JàÒ]¯”1YY¸÷ÕiÅI¨Dœâ /!郺\N Ck(œ¯!8’P¸©\À¡× $4µJÈç±–À›ýРc àHBþ))¤d%d,Ž$äC¡pË}²¹ woi—àÄú¡p­ir7àõ $ôÖjeZ oôC}è¹D7ööXðC}¸R‚µ²t¼•¬lð!KÑ|(Vâ9IÏ×2í㽕×-\û¿c™ÏM%7®!rKàh !Ú÷¢Ë` pbeÞ›/',ækÈùÅnbÀð| ¹pMìß\?!–}6Æ2Ùëxßϧ<˜S‡ùáâc€# Vjàý=+ë½³¢k(DÒÁÑ—G~(Ü ˜˜ò/°²_­V&Kámò¹®O7{GVæýí…ä­¬+øWÉÊŒ‘’fŒrôÙ²€Þ"Às y9ªÁÄhòK€„D›„tjÊo”PÈ5ìyŽÖ w~¸B>”\*´Á‘„|Faµ£ùP¸ýSªžÌåC®sBÀ¶áúkè«5§¶±ÅáÍÑ^Šxu7Ài´÷OñVæâÉêGòk°f ùP¸p1ñÁ_l,s£JÇœú ÖÐWã’J›À[3FŽ×ÊNh>Ú KàÄù”|©ø! Ùp­œ1IÈëÇgS ÅßË~7Æ2ŸÏ@!›ó!íý<“54ަ·¼•I(¥í\½™yOB=µ÷o½sq þfw®Ò{j'£ÿ€„þ´Fûüæ¼£kÈ ft²s]žâ%”]>ÇKh½|Žú!¿¸ì F G~Èûskä?ЭkHŒZx³Rndt\A3>+6–͇¼7!p⩽;¨ ™¨ÐO8ÊûÀªˆ µ?Ô7ú!1¸8H/ŽZYomLùzQØu,O±~È»±ÃÑr~ãÛ/'Èâ]‡O#"›àx×1t"^h~°†D«•å÷“P¨1&LŠ®à©—§øX–]!XŠöá Aê©ý~Â'œ ÃQÆè×¹²‘íåck>¤ …7çC½ëã%‹’öÛS\qYÅNjŒ‹˜¨„ÆÎ©ÈÀ8^CasÝÅ«+³V¦œ‹ÎÎÎZc8ÍÍXʇ\µpZcôy%ñÔÁ ûTêÔGžÚo|:‹`€544WÐ\Œ&Ãá]Çà ˆŒNvfl%?xêX¿Šk(ˆ‚Æ2ÿï:·ôœæÔÞŸƒGÐØšSkcÙx8§öù<\p’-Oöö#‘ê··W:‰¤#ke§q쌅^î´s¾Z»AÖôPFý:Ø —0[Å/Íwµñ×™R¯Ca8íuxoK=õ¨ý–VI2:ê ~÷& šˆûmˆûVOíµ;x£•é®—]Ï%$]¸lRêÔ=ONöe~ÛÛ4Úû„HÇËÆŽrj¿»ÖdŒâ :·VaOáíùO†“hïü¶ƒÍ©CŒN<µ_¦RÐ:µÏ"Ƹ/8Ú—9ïÇ>¹0x“ÐS«„òû†w¥}:Gà¤+½„™ üʘ s…ÙÀí\³a®08?D™ ó³a®3®!Ìlàw®³a®0X å̆¹Âlàüe6Ì;̆¹Îl8è‡0³­ å̆¹Âlà=uÆl˜+Ì.c¤Ì†y‡Ù0×™ ­ 3ø]GÆl˜+Ìn !fÃ\a6°»Âl˜w˜ sÙpHB”ÙÀ{êŒÙ0W˜ …hŸ2æ ³Ë)³aÞa6ÌufÃÁ|3¸J>b6Ìf_c̘ s…ÙÀ®!Âl˜w˜ sÙpPB˜ÙPÈSfÃ\a6jŒ)³a®08OM™ ó³a®3î:0³ßud̆¹Âl(¬¡”Ù0W˜ …œ1æfÃ\g6Œe˜ÙÀçC³a®0JJ˜ s…ÙÀXÃl˜w˜ sÙp¤Ä08?„˜ s…ÙPèu¤Ì†¹ÂlàºA”Ù0ï0æ:³á•Qf#!Ìl˜+Ì~_–1æ ³Ë©)³aÞa6ÌufÃÑ|1øhŸ1æ ³÷Ô³a®0¸}e6Ì;̆¹Îl8Ú•F̾+1æ ³¡PÉO™ s…ÙÀõËrfÃýÃãåGýTðË”S; M„û§X ]Ÿvë#á_”¡ª` ü÷óñ©åÐMe—'®?¯ÉwÎ's½5~ý|KžòÁHù¼RÜNËHþÝÛ¡ädôûä)e|ÄÓKeá÷÷}÷iD¬ÇщO…ŒXÃÊ—f +9\:SÜr¦“ŠwDH¹)®t2#5¬’ÏoVœIú†'†Õ mê½PF•D€çŠ“áÚµÚÉ).=Úšõˆ}èŠ9^qÁ'’ÑsÅù¼GÁ{Äìdì‚G„“±±ÅùÕ$‡Ko’o eKW¶Ž—‡ƒцvÃ8`8±8 ¤£Šüv ;û6wïÃÅÁé¯wä‚F!‹£#õ®§wŸ°F}r€âT„çêU‹€þœ7Þøƒ3ÝàÝ1ç‘P†3d]Aï#7w¬w8œê=9¼ø Š;7FB©’“—ÏGô~gÅØÖH'z×þ%Õ»íBiXc8Ñ»ÕÃrtr®wˆ¥ƒ £gêõ–rÕ;«Q:z¦^Ýy½­ƒ\£¡P%à0ÓÏÕ{Ku¸@jTl.f’ÏÔ; F$‡¾oOµ&:r´P½KtîR¢ÉèÔ¬ýFÃpê½iX Gê5ßã¬ÔÝ\½~ûã"ó÷RHt–w,:zª^탽4+Q&W¯_u£ôå‰õ&Þ§?àïYõúý‹ŒÇ0_žà©§Võê6 ¼Åz•ŰAtNÕ«ûžU¯ßÿ÷dt¤ÞÐ~ÍHÔxn.^ÑGÇêu>Õ¶»ê}âÕÆè-c½Á¬û¸¸ž*Ö»^Í“«wµà“|žØã—gxê¹U½f„\;79gޝG§êõ[à‘¨wQ°ÔŽÔëÍOZ+9ëu~ãJæÎå\K¥ymŸ ú©+ç¦A9ôÔd´Þg>(›¾ Nœþ»Aí†Âñ"ð&´ì±ˆY÷º×Éu›âš·?ƒµ‚›¼¶\µKaû³ÞÌeèöGwG;bx®wíßq¼•Øó‚CØÝÚèT`tv“Dô¾ý»N7I·ƒé3½‡Ï@\<ÓÿÂïžB 8¼#›Œå÷X°ÉXr¶wéŒL®‚Ø×¶{Z²1%)¼IïÚçÇnˆ¹Ba÷ú7j”\îS±ô NïÊúAŒ£É˜O‡´ê¡Gg÷XDïJ†zóòŒ½ ªwZ6_vóµTþý®w,$á†(Çôx‡MÂ%{ŽZ4ûùÞÀçC☟w}HÂ¥ £½K¿Q`ì=ÜPµ`ý|hŸj/àÚ»_6FÁîIý|8—±w¿{üª%pÎÞÖ»¡ÈÕSÉ#?{Š·wô7Áûù`ïn´ìæKù ­ŒGÃßW<מøy© ÆEx“Þ¥W‰ô©ÕˆáDïƒvøçç޲4ëáb)80eÈXÁ£gêu'­^hAŒFOº#£gf}Ce%ig܆ú—a^ž†q³Þå@"w 'ùL½bà› [4Ùº·4gMàmê5K Бщz­1´FÔ{.©×ˆAóUæüâV½ás§aÐ¥*¦ £gê ß[ø½—¥ê œØ6Çò\V¯´’Uo¸“€“|¢Þ>xó­‹vþõÜÝ_Âoñ/¤Ÿõ‡×·\ï~>oðõ/~>—á÷|ý‹?Þ—áO|ý‹?=Vàßÿ.Á¿Ëðxù—ÒË¿T^~ºnðõ/>]Ëð×Ï ¾þÅÀ_?ËðËÛ_ÿbàïS~½_Kz¿Vô~ý ðŸ%øÏ2üF?ÿÅË¿OŸþþËæ£´l>*Ëf†—ŸÏ1÷^y VÇüù7ƒ|îò1wŸKW9þ…Y~(Ãÿ|lð?øŸþÜÒx®' Ožªø·øTÍŧjÞ*>UsJÉSÏðÔs婊‡ŠOÕQ|júþæG婊WJžšá©¹ò”€§Dù©š#‹OÕüUòü[—Ê¿Us^ÉS•<s¼VæXsXÉS¿Ÿª¹ŸøTÍË$OUÜDòÌq®Ìq–ð”,<µã3âSÎàΕ§Þá©÷ÊS7“<õ O$ñöüÑ=?®—³”¾X {ß®Ú?•áç×îù¥~ÉóKþCr H÷OÑT|{JÀ ¢y`Í%ðê ‘í3WQ0ˆjį¢a}@'ŽÀkƒL0ß©U\„ç¼6ÈWú~áa)û}q£sðò ª4He©5|©Ê M:ùÒ•™,ÛjžrËÁ‹ƒüïWù©øoùßž?øù‚æ>*c8÷ÔŸË3‰p|iöJŸ;^é³üŽï~Š¿ø{qŠø“¸öØ)|ÂOéíkø·ËýãåÊYq× »Råîñ@ŽHà—k~Q¨®­ŒkY×_vâ×¼_²ýñv}(¿c?.ä|fË] 8‰æÄ¾¼ÚJ)üZ*´Ð—·¬xµ~úò*¾ücùåµK/¯(üÈËo£¿wõÆÕ¯Íè½)G¿K£ïÏ.œø…fÇåjs–½ä ¶ŸÀâ»™œÐËMÉ??*qfƒAüDn”‡˜Å¿cý´ÜRMà??Êj £›ÌÊZÎOÂA2HÈX§ê—Vm]Bº&!#HñÝ-ÊáD¿}A˜Àé;ªå¬ê;¼úŽ~9óƒdZD¾Òm-ï°œ‹ZŒËù¿kw½gïP—† É2»xLR¿’ªÿ©S'ö€ªNP8]¨7ø×r`›?ïëw¦{)|¶Â Ü‹:{ªsë÷ÎA?è³ïó ‡ÏûBTÆÿnúòðfÌ;ÂSï¯Û>â~ý«#S¼-o5Þ?·äý~ý‹Š \\–à²ÿðA`­È|áíÐr7î)üðD~Øhù)ü“yêDj>wK Ya8 F1àe7 Iáøð§ð¥íí)oÊk9 Ïd¹ÍÓèËg·ñ«#×¥¼’†I„ïB£yã´E82Ò»ÎX·|y€Ï!œœ-Jàè[ü.Їí)]›¢9±ú6n„Ó)ni¾Ð€i'ë^£P'ú™¼·Qc,£¡»>æw{Ê[ßù¡0ÅU dŠþ‡íë¢>± ÌÂó@Å»õ Ç»ƒE¾«„Èu芑§Æ5`"ïêÕ+8¸ÂST£fôãÿ»ÛzŸ °†Š V\ 'm©JŸ>éʼn~õç¯ß6 }ùæw‘N'úÁWç­r+S$ptAq}!u>¼ŸñÜ!ÙNàÅOoP3¼ dB2÷0ÄϯÜ~Ë?¼ý—,ǰ;ü¬2Å ±Áϯ¹Feá:‡/¤Îð× ‚ƒåðõ>¼#^Wó >KY¶8mx‹ÛF#c‹ ›)Å[œÜ¸άº5²Š”ÿ…Ÿ‰ÉˆåX4&i‚ÿS¸¦ƒ°Õä<®þEàjͯgŽrEàhi{¸ÑœÅ:Ùo§$pü­iˆ½îÄ}b¾#p|ºdùà˜Ü—Ýõð}BÇ…” ys¢¶6ÝŽ(Ž1¬õ[SΖ4 G†µžÚÀØR¿1-r82,©78²%¥57÷,¡_æ~{êû©Ê–AXÃÒNC™]¾#` Kôdt&”¹Þò¡Ì@,ŠpÊÜBabBY?ÒÑ¿ðSj\ƒ e@aJà$”ùÑ-ÊÜvXb§NE®ªoŽÙNà8àÉÀ§=11NÆoS8xnXHÜ4Æ)-(œ<»~ĉ?þµÑQójQcqŠ.ZÎüª*Ê;zf~Ë?P e‚ƒãPæ ¡ Žñøøž*×Û‚ÅY GwçêÈ'=ìB#œ³8W°¸Q§7 ‚µ8ïÑ4…ã§|´U¬Å  í%pjq+uZœÒŽÎ ãÃÀ&GMàİü.R±É£sŒè¨aõ‹â¨-™ ÎD,'“ 3lÕ¡dôïÒÉ»ò5-%á8È|tdqkÂXœ GÏ,.æ_<³¸ ¼’ÅAêú}©YÜX²¸‘À©ÅéAò§£¯»-NH§Y‹ðAwgbÜm¿E-Î8 '1®7’·8¸ž!S‹Ó–ß®)cèËS‹ÓËÝÔâ”ôåÉvÍIËo×FÃÄ¥dq¢×ƒc-ÎÆÜàœÅYÍZÜ G:wÿWÁâÞpJ<Æ}©Yœ-XÜ(X8²8m 1®7§˜Ë±~ÔâÂjNv{ç+œKYåòMônä\ˆqzù'³]þ¹`qVêB¤WN,î¶h‰Åi=H§¡DÉâ(|"îU¡@§À'p¦@²ï¸‰ ¢£¹JžXœÑû‘ œ á\ViT¡@"5Ï,n‘=oqp¸‚£‰(H$ 'Wˆqð)ý’”žÿmW²¸aéPíîãJ·~ðÈ•$¡háLV¹† fs›§²Å‰RI>ˆHàLIÒ‰BIRÓ—gbÜzlÈÞ>î\ØÇɱ°ãF§¹§YËåÄå˜íeÎü>np«¯#û8ï/ÈèœÅiÇXÜš—rp²3…}œáẰ Ä'FÞ\’´2IJÏÿ¶;²Êaá4íîãJ7,!’±8+(œZœ±¶U Cád'~ç÷ÿšÀ™}œU|Œë©èØ}œ-ìãz::5,·R2˜šH¬ÛLÅç >«4è0œ«â+Q(}@˜ˆ£·ïã”ënt’Ušp¾ ‚ã}\!«”’Ǹ~à-névàüoû¸’Å­gMïîãJç]hŒšÀ™§‡‚Åѹ3g†¡`qо.Ém.E‹†5DÒè%z‹álZ(ù}|ŒÞº ç”d;©²Å©’Å)ÞZ91#Ƿ꩜@Ñ)Œù‹ï›Ý8+/Ó¯"á&Â_¦gžXö2ýn‚OeÖˆWýù¿õ ­À.vIÞQšê+'ï¸<Žcž¿ãÝ'}³tŠïÓ Ny¬ÉSÞ¡¯abÌÝÖÆâ¸#&ðOòÔàNäÓ¤Ü[(!œóo·î'ñ\r(ü•<¥Æë“ÆíàõçìgáˆrÝ5ØÔåpd?kŸQÑ–ä^—Ǽ4/¡¥U€ÙB~CéÀíFø=ÄéµyzÆ.Íö>ãm猪"ÃæŠËæSüÓ²Ià Ÿj<1_´-u çšÛ=Çë\~°Ω·×…æ)…?\M~ŽLøˆ{¥£fWBø=yJ®4•ÿ crp†.—èGô³(¨¨Ÿ‘©Y’ÑOh[G ÉŠ~nTNü½C³h€³æg8ý°prßf8…`µËg‰õü<>.&x®%‡Ç§pzýlÌñŽ©–KÎNÄÃãúñ%ÇG\:AÄd–páø+λHÊï"dƒ“ïzÂ)A«â)®B7$¿|%ò0~^Ò—gH'¸ÏrL2kúT@ \ÎøŽµq}}$/Oç~ýÝùZpx¸ÿIü¼ ’ÿÆpu£_â¯YÂå›’À?¨z×`òþL„uª/Ñ—™Tî}KVSlQާ“Àw€Žý±+øc¨K‡O‰¾ ±H.q˜ÉOi*¸Â™„1>õ}ÿøR xýrËIµNê­ž”*}·x7bøÃ„8¸ g…±Ë 9P„ÓÂM_Ú ö–“4«—šO³ziéË㞸µ¿ï+UL€ãK9—,o1¬œè$í&€£Ri¸sx¢U ögצ,å *Â×/ÛÙµ©K¼ó‘Âi†e“|;O–ÍúZ6±WÆDƒ˜¡F8ùò¶[O¢¤_Ë&¤ùN>©X¹0ô³áxðs §¹Âº¿$wÝt}l;ß÷ÒIy;<Œ°m,Küû¾ìóVNx/ 'Ëf;wKa Gô™ûzÔ³l”2'~A )Ÿ$ìVŽJSɵgpêmÔíãDÆÛ@òáÔÛˆ‡´\b1cocnËžu™:—¼<ñ6zMßÐŬáÊ»Øb8ºz³Ó¥ùÛIïß¿’ªÓºg¿?—}À¹@ê }BCõÎø¤„£v_Y\–— pº¸ ¿¸O*-.±~°Æ-.CàÌâ*uÐá&±Nåƒsìâ’NjúòxqI±vRéâ2–ÎY\ëê`—œ..µvwiyq ,µ1ˆedám¶Å%k‹Kî..Y[\VòžKB&)k‹ëæ;˜Å58SŽÏ5—L–—¹}€rfzOtô‰ÙáI~qÌÜéâWþ$]\FÅ1‹Ë,ŠãSÄpnqÅ4 y®^±pÒ¾‰…õl. ·‚OÂ…ÒÎ-Á==hÝ5c8“4)»X/“fYIàÌšÿÒcñúN¿ÈØ3$–¾*…3%Ë—ÌóòøŽÊЄ[×UáÝmψîþ‚w·úFHÇ{k9ôDqó#ÄÈBŸ|c³Á™]h?ˆR×rpÌX(ì®9î/§ßl¡Ò©ˆÏYˆõ¤*®’w+1;ˆÃÉ‘W~m¯I8ëm0œY´ë­;œ«”†ÂiáFH¾$#ã>N·«;Ÿ¹£¼ _4nŸ\-¾=ܯG:÷Ë#‚+±~ÝtÿŠÿÝQйS¯ JO!Èè\o´…”!½3].ã ô½-Ô+ ˜À?iޏè“ÃÑîÂ…¢@!8ª#†ÁÅê¬H§[9Ð{„Ÿt(à ëggCú:†Â¯¨{êÁkŠy},l„“þeòŽá–·R¡¶…Dr9€£ãã–Ç×µID×Ãe›Î~¬:œJŸš8º—¨sñ&½å©ÒêU©æÆŸÀ?™§NäP¼ÛÜ1œĨ8ÏÞÊP8º‚G,Ž= …ãMžø£Íü v tS€Ó”:9 …ÑAÑ*œ{òÄ—NîÖs×ÉèÞ¬$35Šòèà¹ÂÁ%O¼Û­ÌÝ8ó TÃÜ¿`î_s_f/0œT¬›æþsÿ:0w §Ÿ“´ÌX$8W¸Sáx!æ£R\Ê~ãù 'à+ä\oqñ“V€cVÃ]§µ™Bú]¸œÇPx–ÏÜ­ƒ°ŒÍäå¯÷ë¡–œ·J J¥Ç§c®‘©àPapæø˜›âò˜!r¸×b–Ö뼆™~øVçMOó¼[î¸Àp&Õ¸}ÆM·,±qḡçnqG®¨Há=ïÌú¸ÿùÈž8zûž×wp®b½q{-+¬ü¥n”0“ûóãzÊ)·¥(5y †£ãRoÕÕÂ$†3•K¥tCíðG_8ø)ñC†ûÇ÷ŸÇ§h1œ™â¸<¹)BõàLè¾ÅôûJPŽð{’¶H8Kf¾\O¡åR_vÇ´dl#…3U‚­¾™œs»²§%†cbM4&´[ô»‰øáx„£Rž÷´\íõáq>¦hJô8Ï+…Ón¤ÛÜÍœ©’qs°Á1K`)R¶ÊöéNJ¸Ò*ÇVÙ”¶k§¬Té ýæå¯¥“º®9ý¹MO%ÏlÞÖ"P•s™Ãq…òWY½ëg¡œzáSèΨ×òêµ1}Õ+oZD¢€¿Šêõ™’á›ÍpCy §…*Í·z8—3c-:-×?*æ{¿¯²zû±ðÙÜàøÓHªX¯*•1ãæZÕÔ«OìÛÉUY½Ú¬7PáÔzU_ éÄ­I¥d^½ÒB÷(©‘ކ­C²sç¬WÔ+èèléeóoâ\S¯ÜSogÔkXëõ+[c8£Þõ3 ÆzøgÎj°…þšìéè”*bïœ{¸Ã=ëUz5~QIÎ~fYø¥7š…ëG.¸ðÏÃÖ ç$pªÞœóg%ö~Öà ÊId8cã–?1@ZÉÀ™]:dÃ* §}°[AQyFÛ[2÷#±WÀ×9÷˜ÀÆ¿Ä,þ%ö öj‚ånp‹ª·ØS)ªR8bYý„#}(\¾Å!ó,xnsÿËà™ÂIð<•búwÅ­;ÉÒœÀñKùb<±gÝwQt® ¸Uu%®ÔHáŠöK\)èò$p†W½žôÝãN‡dîd_&;u±iEÇðú¡Ä׆¹?Ëõv¢¸Å´ Š8S;Ùökéý‹G5NÕÛÝN5`4 …øgÔ+¹lwÍ5(ü•¤À”‡Öd„_?%>?öÆY~.ÀpN½J!tîl:´½£ßé–šöÖºÒ0pRÓ”KºÊ\ܧpTq›öÛ©Òäßuñù5ñkæ*kÅp›×4ÇÇ“ãf“ìF"ÜÿÓدR—ã\û1À]¬&œ¹´†}ùå«T5b83÷Sá’ð1ÓCã ^:ëE9Œ×–ªP8U–Âßóš³í†õk æ*ž¤C¼ÁËS$|zaâ!ŽÏy ~t!Ö/M¨ï€»¼?¼\ÖëèÜe§Æ¯wØF&pB,èVë¥ Ź¼<÷¦—Ç‹ ´*lº?K+XÃ;~–¬wƒÓ…*ןù—'prF§÷‰êiùwWøÿ}¿_×^ÐãSABþ‡ïÂâŠð«÷íÙ}pwZ/—øÿA?IáÆ §nÖ{µ> þ™>%Œîìr¯ÀïsúÃëL̵ÿï¿’¹Ó3ûOëE¥hônÛ/£¯ÅèÇ©$º©.ºþûå³{œ²Ãȇ%ŸYd:¡^ÀðEÀðé&ÓioôEÀðé&ÓíŸ?w¢f@òòçä)NÀ ¡²€§‚€Ž%”@xêy?ôVžx]OéJ†¯òŒBl·Üûüý©àáZØêSkòù,Jï(êï(àóŽ¿¿eúÃî¤ØRß_f"ð;žn//*/¿&`ϲôò²þò^>»¢Î»Q³½¼L_Þ?ƒáËËËÒË˲™¼¬.ü價Œæ´þP3Òþ{þî^>r+SË þþI~°~}{ÇOv±²™üàøüFžJ§XTCø·V3y™K‚˜ë‚˜AsIsE3"j” ˆü')<Á‡T0Å¢ Þ^/ìíÖ!`ÞÎlÊîn¦‚ˆ7<“œÚœÈÕÜxz÷ɨÑg•v)½ä¯µ•­¶ò]×=ºûN¬n;¿t;äY¢3žß­½ÂÇ-\£»µ¹—Ï®ÐN“íLt!Œp>]ÐOñZò[´Oï?‰Áoðà Ì'ׇ/GМ؋Áï¶dá—¦¯¯…‹·\0üðúÊÍý—ߢnp]‚ë2ü¿ë§WìÜàË<<$ÏøúA …ap{ê½Ì¶ ™ôí;Mrâ‡{@ ŸŠðm&ü7ªq&/×òLNìmž‰ ž^ÊWéwÙܯ…ýÄ©tí^¦†ÏŸ…—‡§þ÷¶¹íÿ¯¿­súÉ©×Ç/Üžša¹4È\dnämó»ÿ#n;É\™IÁm£™Ì0“¹4“¹2“ÝAÞ_âxê‘ᯎ»Ùi{„²Þì´À—¿ºÒÍN%¸¸,Áeþpÿôøôô°þåŸz ~wÙ¤Áá‘q;†(/ûœ ~Jö9 <|ɧ0|ÝãmOÙp‡ž[8âëîmûÁ¹Ni8*?/[¹ÛS"8÷A+»í4¶î¤O {¹à"|ÝÊÁ;šN b9Äåú-Ò¤ßú)eÉè>}̧hõ²E écüÁç2RŽ['ëáþ$ÿÐ*y×ÇÑJ~¥ík G’—‘ëeN™äEßwJZ¥<—¼[ŽD%’_DïE7`8‘¼–ëÉœuÉ?ð’¢–N‘¼ñy?ÀÏ ùs«äµQšÀ›×¼Õ@Šð\òË¢_H¦Ú¿¼2#wb\sÌ\¦.°Sx.`öàKÕ‹®f38:z.`Ù9ÝÇ¥ý~l°•šÂ[—¶‡ëí£›'K{Tëݲ™€½„m8 D8°”r9……X÷ã@Go°÷htt¼‚ýÚ*§0þK«ïjؾ2MàÍîÕNÿòPòÚƒÑ Ka­Ìm?Œc7Z»Õxæa‚‡p+¿*7€íOôsgUßY»ˆœŠO<ãaÐ {˜@aáõ3©e ëÇ;ž1,ÓNTêQu…/Å­’~¦JT@?S)ªN•¨:oŸJQuªDÕ |ûTŠªS%ªNàÛ§RT*QuÚ‰ªS=ª’<ªœäQT*Q•“<ŠªS%ªò’Ï¢êT‰ªœäQT*QuÚ‰ªS=ª\ó8ª2’ÇQuªDÕ œÊTŠªS%ªNàT¦’ÓŸ*Qu§2U¢ê´U§zT=¶´ITå—vU§JTåœEÕ©U EUNÀ4ªN;QuªGÕƒÆQ•÷ÚYT*Qu‚¨:•¢êT‰ªD?4ªN•¨ÊéEÕ©Uyý ¨ú<×£êÒ§Ib/M›‚~ÖGø¨ºþ¶6m˜ÀôÎB›a~—þ/ÿÐöòˉ£#7¾< LìËGߎ^>¼}2ú^þÜ*ùÜ¿•<òí%ɇAXɧ£?ÂË?¶¾|î;JûÍÒˇAØ—OF¿À¢½Ü·¿¼ ðæ—.I`8÷ò¢ôò"1ëíåZ_>÷ G_9ÔÒË·s÷ÈË'£Ï º¹MòË}.Ó87¾|ȦôÆê‹pl°áH•õ;d°ùè ºù¡õå͸‘ÎxãËëη} áôåõ8B^>ýD÷ݼæÃÑ[Þøò2ÐY¶>X„Óes;ß‹.›dô&ÄNõ µÂ—®}éåE%H-¿­]û.»å ŒµQ£}/”‰P&ê¡ìÐi(;4Å[Œ#£ï<±ðD=àÔ"xÅ):Åj‘}/,а(êañ˜IX<:Evô½à)v‚§¨σSÄÁ³0EÑ-|~nŠÌè{!Vì„XQ±§ˆCìÑ)²£ïb±ˆE=š" Ä…)êÎXÆÝ¬šŒ¾®ÅN¸õp}hŠ4\¦hº…bN§â8}/¨‹ .êAýÐiP/LQuãÈ.Tvô½Ð/wB¿¬‡þ¾pÞJS”•Ð/aвe%ô˦Ð/wB¿¬‡þCS¤¡ÿÐiè—M¡_î„~YýµˆCqŠ1.ÊJè—M¡_î„~YýÇ´HBÿÑ)²£ï…~¹úe=ôœ"ý…)¦qQVB¿l ýr'ôËzè?8EúN‘}/ôËÐ/ë¡ÿÐiè/L1 ý²úeSè—;¡_ÖCÿ¡)ÒÐ_˜búe%ô˦Ð/wB¿¬‡þCS¤¡¿0Å4ôËJè—»¡ÿüÚ½|,O-DOnŠ úΈåX‡0ÅøÃÚÚŽ>ŽðP}ÏŸº¥á»·ÑÓ©q€ÎÀWNâö”ý á¾úpå&¡mZc#7IhU¯¢ð\Ba™ÛN AT8•í–¯›s i×IaÏ$ä“áÎ^Pƒ é& ù%$$4#¼m õ²”<“PÞ™ëØa#kÈaxã2ãrà)=_C^ŽBE=œZºIÈ´Z™ãͱ5$½è‘ž¯!­;þ¯ !)0¼q Õ)§ Ãð\BBúw”àj¯O·)^Kѯ!¥£o´2ÿŽÆAàØÊD§娄–« ¶¯…#<—X¾£kètl7ZM^>·²Ñ¯aŒO=‚„%dä9A„·IH˜ðM¯±žKHép›c%®¿"/$ä}˜6’YC:\  ÉË“5Ô’®ë Hè¥QBr=…·zjÝ)½}Šáh én”ëG0ØÊBî,%†# ùý¡––‘ë×(Gx.¡~ðâSHhj•aá  - …[0FÖʬÑ„;l\ÒÏ%$½äG¥ÈèHB® žúúzkµ2ÛG¿“ì;o£Û)fެlð‹`íü1VßfG8’ÐÎÏæ¢½é¤ê)<— kh„ˆ÷áú«5Ú[‡G$ð¶h¿¼¼€ŒñKó£ŸJ¯Y+[byyËôúé}.¡Ñï—Œ’dtí}¦àó¡4«wr깞S¯ð—¹"¡¹’SÏ ¡¹”SÏ•œz Í¥|h®äÔ3Hh®äÔóNN=×sêârjFB8§ž+9uABi>4Wrj*!.§žwr깞SYCLNM%Drê¹’SYCLNͬ!&§žwr깞SYCLNͬ!œSÏ•œúÈbrjFBLN=ïäÔs=§>de4§f­,Ï©çJNÍHçÔs%§f¬ŒÉ©çœz®çÔG$ÄäÔŒ„pN=WrjNB(§ž+95¿†pN=ïäÔs=§>æ©INÍ­!”SÏ•œš“Ê©çJNÍHˆÉ©çœz®çÔ‡$Dsj^BYN=WrjNB(§ž+95'!šSÏ;9õ\Ï©yjšSsV†rê¹’SsB9õ\É© 19õ¼“SÏõœúH´grj.cD9õ\É© ±,Í©çJNÍEû<§¾xºü¨÷o—#&ÊŸÇÜàË1 Œ„Ö³'’OƒÂ÷) Ã׃(Rw3ªåüÓõ”ø:Àù‰»´ù¼þ¶Döf2Ê%%_o(wo£/'TÀ îýàf9>u=ä!ÂU8!s$£/'T Ox6‘Ï*o>ßà^½ÉËß>¢9m\$¾c4 âøý#(î±UqùÇGße`8R\rÚÅ݉œXA^)Îï%\¿|;B·´ŒÉè¹âl8TsŠó£$™;ÒOd`•¤_…d¢Ëõ㓼äˆí©VÃBߎÐOü.Ñ~ÂÝ-ýúÍ]nXÞkýh1|=ú%ªWuÒ¬ßÜeŠ“CçF­èèH‹kÃø„çÿYíýž#ð\‹*Üì°\m²žSþð…³Ëôâ÷¼]°ËåÓÖ.­Œþ3(îܪ÷V)¼IïÒ„Þ&øc€½k7®_üezG+š¸5x®w/º~‹aåzW² —5k2z¦^թ㩤Q:zªÞ _qûÚ1×hØ– MæÎ˜õ°Ü+I=­ßø*NòQ½A¿\Döp‰Æßêvå ¶+¡Rx‹zC´¶VGËcѬ¥]¿ªÊÍÚ†Ot£„ fíwFVJN½££]òn÷ä:é†åãìvƒ†å@GOÕ볡QkÌÈÕë3×a%pj½ntT½Ú‹nÞÌ%ŸX¯ôùŒÚ?'ß_Âoñ/¤Ÿõ‡×·\ï~>oðõ/~>—á÷|ý‹?Þ—áO|ý‹?=Vàßÿ.Á¿Ëðxù—ÒË¿T^~ºnðõ/>]Ëð×Ï ¾þÅÀ_?ËðËÛ_ÿbàïS~½_Kz¿Vô~ý ðŸ%øÏ2üF?ÿÅË¿OŸþþËæ£´l>*Ëf†—ŸÏ1÷^y VÇüù7ƒ|î²›½<áA–Êð?üÏGþ烇¿·ôžë Ó§*þ->Uscñ©š·ŠOÕ¼J|ªæ<âS5Ÿª¹‚øTÍâ“§àߺTþ­šù'OU¬<>U3æä©ŠÍƧj¦ŸªY`òTÅ„nOíØ@|ª¶Ô×§Þž?ºçÇ•æ÷Q(Þ,'ãUàO;ð§2üüÚ=¿Ô›Ë!Ø|»//'b—0ˆhDnù\¯"aÙ>“Qxuƒ¨öAŒ!ðê Ñtâ¼6ÈóZÅhêŽÀkƒ|¥Oá^ÏøâFçàåATi娕Óv%pi&|éÊLÖ;åÙÚ+/ò¿_å§â¿å{þàç šû¨8ŒàÜSÌWÆùèGÔgâ•>w¼Ògù/÷O—+ÛX»ëÖCWÈç wá<¿\s€w+ãr¿‰ÿ¡¨€/[°kVØ·ÞÇÛõ¡üŽkë„ôMï:»}‹’ÀéLäz&}yµUeSøµ´Ã¦/?ü±"àÕ0éË«øòå—×r,½¼¢ð/¿ÝÈõöýÞÔ‹W¼¸¢ëòVVý. Œ??8OïÚ­n"æ]èÎjÿ‰™¹n-1…Ê!`ƒAüDt¤­ü ÿŽQhô0| *yÇ¢Èè&Æ™²„Ö>Pü 2–À©„ú…FS—®IHEç^|Gw @øÑo·<%púŽjaTßàÕwôË™$Ób®ÞÎmTŸ°œ‹ZŒËù¿kw½gsŠÐ/1Ìr_MmõÀ~%Ÿ²œ:ubI" pºPoðÿ®å˜3?<}Þ³ß y5.ÇË‘/l¼·jd„5|¦»®ÎÝîx÷Bü,lǒѽ¦|‰oO}ÞÂ*†§S„`^žº¹üÀž¬œ¹ÌÎäã}êÎÿ-ƒ¼OEiøaÝæ~¡}Çröz}Ôþ!^ÖÀ?ÉSƒ=‘t¸<^– pœÆ‡+(äêwþAnmþŠŸë}|È–«<éèh‡‹Z{Á¬sï.ÄøÃ†ý¸¶ëí¸oø=†r9è{ÀÎÊÞøz/[fʽŒ÷²å?ˆ…ëü)cøÅ•Ü ÷ø´V!¸eÓ…eã$…“e£–æQãn!S GÛ™0¸X¯EÙr×ë^R8b”†ts ׈&¸\l«QTºÁ)ãN%†£¼?{Ç–¾­BjX®˜?ñ·’ᨮÃPKÏŒŠÎÿ³Ã×ñòo×pÍ~qLà¨Oìó2;¤S,­¡^•Ö\ʘÀ?™§N¤¾u›;†3‚처¹oÝäž·D—ï*×\£&¡ò=ñ•˜ðé+»‚ tì"œØxºŸGùA¼ô/ä‚O|„¡”] ñ:L€×S]\Ãèº}îŽÀ‰çjšûÌý«qîË솇ѿÏý æþu`~xî>Ì­5ZÎ→ÅÅKX78*ö.Îy(9•^`8“Vn]>b[ŠpK×¢0÷òR^~ã×D8ª.ß­'ô^~$£S¯ Ìzù.{’cfSHî7Ÿä÷ŸÇ§h1œ™â0–ôW›œq|n½áê¾âÒ"üž8ý~ÛG~ø”f-Ús‰ƒ S„´%S§/쉴Âu¥.¾xù¨´éè´ÑÁ,£Hg´1ñ ò§µãÀLÑèBJ-@ œLQöâÄô4–‹Ã1¼LäŸp®-\¼âàg|P‘OŽÖÛÛ1\õz pœ·k©¸BŠŸT¼ª5ã¼] Å §»Q"™œX/ô]&'–j`áyN¬ ö†§Ji‹Y¦È¥lb¤p¢^±TI3 «÷ó¨z•PΨw­å1ê•…SõÞ®¢&êíåHáD½f½9¶üΪ·°å~'‚#õ‚õ.—AÔ›^EÛe~5§^tuÁ‰ù`|u^ʯ¢^á¥!mòë~¹¹£Ë†ó´%¿l˜Ÿ{vÙpaîg^>½l8—i~Ù0×)I/^¯¼ÝnáÉ/ÉÞ1Âѽ6't_oöº¯—Ü ’ê'¿µeùïè¾^zk ¹¯7¡–“ûz 7¢Üñ·)‘ûz·£ß ¢›ê¢[/nXn£Íª³é}½(ùž¿ ø„ïû(žà¿ ø„Îìgï륷Np÷õÇ¿ã/Ö ÷õrJt½1w;ù·ØÒ+Õ†#œ¥¾´¬Ò+o·“ ƒˆú x9¢^¸ ‡!F—õÑ%Œž†ü؉œ’”ߘ»Ü»}uNK'ötåí2:9«'»ò6ÿÁø5;àc]¨É•·ÙŽ/÷æOåWÞ>¬GwÖnŸ 1×1ƒ æ’ æŠ fDþTzåm>EIá˵†9<¿ò¶ð5ºò–û¤§³NKCèóT‘¦Kb·¡üê<ûz…^y N)Ô¹¬ž¤OèÊÛ,Ú£+o‚ô ]y»ûò)sË£è‚GõùÌÞY[à–§WÞ&´|rå-÷Ѻò6ÿwó+o |©Ö+o ÔžÖ+o8m—µ^yË&s§ô2Ûplù)ž†®“eËÔ§ì:ÙüàŸ%øg®“-¼<ºN–™”®!úÉ©GÅ×É.ƒÌ¥AæÊ sÓ o›Oûq‰Ùu²•™\"¾Nf2—f2Wf²;ÈíZÑg()=S·°¦áÏ … ßÈú ™ì3Y7·Lö9¡”àYŸ!‹¿=Eod½ýÀÞÈú Éúóí›r#ëóÍ›r7²>C²¾½#¹‘õ˜xôFÖg¸Â/™b~#ë3|Dod}†2]‹äɬ$ÏÝÈJ%Ond½É”½‘•JžÜÈú|Ñ“Y9É£Y ’à%Ond’§7²>C¥¸EòäFÖCkžÞÈJ$OodÝdÊÝÈúLŒod}†/•è¬ÏDÀäÂÐd5“YŸ‰€¹YŸ¡ÈÞ"`r#ë‘¥ÍÜÈÊ-mt#ëöòܬœ€Ñ¬QÀôFÖc&7²>3+8ûJøüܼ‚C–À›,m<เÕr¾Áêvu*`å:g´ /ŸûöÁ?ÕKO @˜xxF„'ú¹ÓÞ|T …ýxßaÌ×3¯ŸõI]08Ä'±È^ X/ Ÿ—&ý,Î=ú·—ã¾ÝOÝ`x®cF ¢é:“{2z®ŸÑo¤wc'Æé+ÛÃÉžÅ^¥»aXïOCúÑÞú†‘ŽÞ®Ÿ¸ œD?÷¼ý¼6Úô¾ƒÂKúÉ%³&Nñ•°²Þ‰:E”}ˆ'DxžÜ„­GCÔÉvªt-+à1ž¡á¹€}”r²3¹€€/m°¸(KàÍ|”Àpä ü VÃr@2€1x®žÂs¼ýØžFè~è©áø¤Ïôã÷è>µ¨ƒËéKQÀ—ƒ°x¨˜™]Xý¬ãŒðÔèç­9€ pC„·;(é¢ý¼•È0öVýèÞGÛ“—Gú G*Ê¥{…ô–ÕHàyQ>MZRûáú¸6ߎ;(߉èHñN,†X!6ýxµµé§pÆY„·ÛO—ÀÏõ#‡p€ɶLå½;çnÌû`'Él:åŒ#p¤†ÙQŸXÉ{“щ”^­7—|¸[ÖÄ­‰”›ä¥lÝ÷p³m„‘|ô\它ß›5wÍ%o:!Ç‘ÂsÉÇ',+y£ÇhX9(Û½^|Ì £Ó=hvC¬µ†Ñv´—‡æ œ_ˆ|0©Å"ó¥ˆìBäèmè…ÈÔ'‘ ‘Éžú$r!r*S|!2ç“Ð…ÈyLÏ/D擦ôBä lË.­»:t:É¡¤)øãÁõdtò>“>¸‚Åö² îlÖ'¼â-ã´õ@’Ñ™Ô Žɲ©ìx‘'üS»eÄcžJ>ÖCÅàHò¡.!×s{Èš÷ù¦&pbá),yüñ/}81€Áï÷ö%ÿT(­²?1yÒ²î78ìÄ./Íy’ÓŠÀÛ£Ÿ˜Äp’'ùP¶žyœû¤P½‹ÅÙ »‘ ûéÐ,c+MËžêÇocü}¶Ëù$ÆG GúYŸÇÆ,úòRÊc—£@·§ ѹ4çIƒµ‚Àÿ*Oºðy’_¸ E÷á4oŸ“—Ïcz¨_{ëç Uëží3´í=ìFÛ ’yy.¦ó1Ãö1ÜœBü· éÐ¥-›Z\W<ëíß²©K!›’=µ*Xn <·Ÿ!|F8Œ\LgºžëgìÜv¢U®Ÿ!|7З§úñ;’BL‡Sx#<·ŽÄ¶pÎêŸÛoá¯6ûQÞ|$اŸ:áH?c§üR#…ªp&›3ýHFÏõ£lçßpÝægúÙ~ ðÌ¿~ÖpþMö6žu ðfýˆÞ@•-‘~B²má¨_ú­úé{Eá§ÁëÇ,ÕFªoÀIá¹~zÿ”[Õ›ëçögú‘Ƨ¾½8ýŸ Rx»ý8ž+ÂsÿN—PKZ‰æÌ¬·P OSçêÉèhŸΑi!Þ¯ýPâ€Ýb„çùÛí)êßJðT?.œ#íÕÀâOSÚÞ®û`ŽãR̔П–ÍííäÌIy¼å»Ãp”¿÷ÓJ“øã3¸pÏHàY~`­ ÎÒ:—ðúñDÅOõ#ûÁçíãÈÆŸ>©sE8iÅ*'yýhÆÇÕ+{° ½TÙÚŠíýŽt ðöFÖ袄ÎÅ:¤¾D›éG¸P'†ã:#ëÇ‹q¹:¤ Gx¦ÿo ^=†«ã'”ªŽ½|_Â×{ <×Oß>_}à d«‘?šÀ4-ôÁ$ïßÔz¬,ÍßüË«ä²ùÄëÇosT/™ü:Š8gÉú7Ò?µ– ¨ýõùT²ŸA…šŒß:'ö3¸ LÙ¼?Ò?ùFeéG…N¡áü›ßÀôz$ðL?§Á§¨NÐüÍGo•ƒ%ðÜ¿)ïaÖ6±ç 3:ÙŸú1ø:¾Ö°u”/%ýè°„·§ S([½ƒÏ|øFpìœèÇ/!C÷§¡ +çÌ÷)C~šÝœóá½'/ŸëG†úA/™>¥ñÛ§ÒsYîSúm€àý[â]_Kú‘}ìDIhdÉ·fýX8TZþMÌŽÎÔwC*k'ÿÿxa)<¯öAŒëQæy‡8Å,aw pœ¦y;éÅpâ%OçÎôYÖod‰ä{%à"ù¾míý_­‘ßBÁ<ÂUn†Éïà)ñЄn†‘ÂI£Ñöã€kšÒ[™} ‹ïlŸ%xG%×ÛÌ™š¦êÈèÔnfcº“V¦¬Éi‡ò9Õ)Ÿ+|ý¶¦ ù©Bùœ@òS‰ò9U(ŸH~*Q>§ åsÉO%ÊçT¡|N ù©Dùœ*”Ïi‡ò9Õ)Ÿ‡$O)ŸœäåsªP>9É#ÊçT¡|ò’Ï(ŸS…òÉIQ>§ åsÚ¡|NuÊçÁ5)ŸŒä1åsªP>'¤S‰ò9U(ŸÒ©ÄHœ*”Ï éT¡|N;”Ï©Nù<¶´ å“_ÚåsªP>yg”Ï©Bù<*`DùäL)ŸÓåsªS> S>cÊçT¡|NIN%ÊçT¡|ýPÊçT¡|rúAŒ©Bùä S>§ÊçT§|õíˆòÉèS>§ å“Ѧ|NÊ'µBùœ*”Ï£úA”OÞ~0åsÚ¡|NuÊg]?¹äÊ'#`Lùœ*”OFÀ˜ò9U(Ÿe[VÀˆòÉ ˜R>§ÊçT§|4Lùä¢|NÊ'gˆò9U(ŸŒ~0åsªP>¥|2úa(ŸÓåsªS>:(DùäHFùœ*”ON?ˆò9U(Ÿ\A”Ï©Bù<ê å“ ˜ò9íP>§:åó¨ý Ê'£Lùœ*”Oº9 ”Ï©Bùä6ˆò9U(Ÿ…mYJùœ*”Ïi‡ò9Õ)ŸÇ%ŸQ>¹ÜQ>§ å““<¢|NÊ'#yLùœ*”Ï‚äSÊçT¡|N;”Ï©Nù<˜ÔbÊ'_ŠÈ(ŸS…òI}¡|NÊ'õI„ò9U(ŸœOB”Ï©Bùä“&Lùœv(ŸSòy$ib(Ÿ§åsªP>™‚¦|NÊ'ç“åsªP> –‘R>§ åsÚ¡|NuÊç!ÉSÊ''yDùœ*”ONòˆò9U(ŸœäåsªP>ÙRQNùœ*”Ïi‡ò9Õ)ŸG£¢|òyRFùœ*”OÆ'aÊçT¡|RŸD(ŸS…òÉæI9åsªP>ù<S>§ÊçT§|þCžtáó$Lùœ*”O&ŔϩBùdö˜ò9U(Ÿå<–ˆòY(„ Êç´Cùœê”ÏȦ.…l Q>§ 哳Dùœ*”ON?ˆò9U(Ÿ%ý$”¨©Bùäì‡R>§ÊçT§|Þ§ç”ON?ˆò9U(ŸŒ~0åsªP>ÿ†)ŸS…òyP?˜òÉê‡P>§ÊçT§|þ‹~¯Dùœ*”ON?ˆò9U(ŸŒ~0åsªP>Ú¢|rþR>§ÊçT§|¯sõdt´OG”Ï©ÂÙäö,ˆò¹OõC(ŸS…òyT?ˆòÉÇLùœv(ŸSòy´…(Ÿ\þ†(ŸS…òÉä˜ò9U(ŸT?„ò9U(Ÿüž2£|NÊ'§Jùœv(ŸSòy´‘…(Ÿ…:dJùœ*”O^?åsªP>ý`ÊçT¡|òÆŒò9U(Ÿœ~(åsÚ¡|NuÊçáFcNùäôƒ(ŸS…òÉéQ>§ å“Ѧ|NÊ'o?åsªP> öƒ(ŸÓåsªS>Öñå“Ó¢|NÊ'£Lùœ*”Oο!ÊçT¡|ö§)åsªP>yý`Êç´Cùœê”ÏÃàœòÉë'£|NÊ'§Dùœ*”OF?˜ò9U(Ÿ…ü ¥|NÊ'¯Lùœv(ŸSòy¸–S>Kõ„ò9U(Ÿ\µQ>§ å“­iæ”Ï©Bù,õYÊçT¡|N;”Ï©Nùü‹ÊÂp"ùŒò9U(ŸLMS>§ å““<¢|NÊgAò)ås*S>Ÿç:ås=ôN1g{ö¨9Q¦4Å07ÅŒEòPœbúŽàw//Í5k^¨yß½èQ×Î7ñ¨YSú¥ìQ“w‹½4»›¼ÿú/îæRv7a6ô§}ݲ»Iß,öÒìnò濸›KÙÝ„A¨óÖè¥ìn’wœÁbç6wî¥ÓÐ¤šº›°UÐК îæÔ¹ÁôŽ BÛíZ¼dt´Pów‹Z§hFi ¼qŠ:4á…2?§¨o;õ\‹¡F?œŠSLßö#ó¹qŠBðÉÃ|t3eºQXøŒq>—¦8ë ¾hŠÆ/A# œL1{G°Ø¹ÍÝg¥Á˜æ¿r7à/æ‚»ñZ4f`lqè´‰Åð¹ànNù;‚ÅÎÍîÆGáGÒpØ/Îewaã¢Sç²»IÞñ,ö»9»é•°Þ8EŸG‹òèïrvá‚F`Ê2:™búްœ¿Û >êý>ö¨~Û+í»RØb`ƒ†ŽŽN·ÄÉ;Bmàû±9hÄo8¿{Tïõ¸òýXÊ1ixÆàn¾ËA#yÇ'˜âS«U?Œ~`¿8BÍàÌfªFn¡Î9::ÝL%ïåïæÚMø‘À›ÓpmOP®Ý„A¸Ð¯„ÎÒw¹v“¾#d²ßíiø=æï—¿ØLi¨9|WÒð‘[¨ºŒ‚Éw% OÞq‚)NÍS„ÛÝxûBíGH2ÎLÑÂi±÷Q•À™)&ïžïKsÐÐQBÇËSvQ‹—rÐм»q¢×tt4â;J-²9.æd•Ã¥âœçSšb„ÓbF‚)ÇÅô!´È渘ó=—ŠsªLiŠaN‹¤Ów¿+ŸÚµ¨)ü@5¯ãF'¹ÍB¦95ðgÄFÔù3‡÷°9¦œÏ[~/ÃŒŽæ~cÙœˆ5b‡X#êÄš£kkŠz…z3:ÑûB¿950nÄãFÔ7GçŽ7üÜý’·üþøº…—sj âˆ*ލSqŽö&çhÍŠè}!ìœ8:b‡£#ꣽ ÄÑ9:wnt¢÷…Ésj ïˆòލ“w÷eròÎq½Óѩއõ€Ö]VØaõˆ:«ç¨ŸG¬žÃsgF§1.HøÔ@÷;tQ§ûöó9ݧ˜Ó¼¯ãF's_HA§Øá‰:èp^—ó€Šs7c!¯££ÓØB§‚Ø!‰:Aè/j• ÃÙ|ž¯Ur£ÓhD§æØa‰:sèp|Ï™CÅz3…š¤FªP³ºñ‹N ”"±C)uJÑ_èÝ`8£wÝqœ“•k„á¤^·N \#¹Ã5’u®Ñ ÷O•ç.+\# s—%¾¬p$Ì]þ ×Hîpdkthî”kthî”kÄϽ™k$w¸F²Î5:¨wÌ5*Î=òmd…kÄÍý×HîpdktLï„kttîÜèDïÍ\#¹Ã5’u®ÑÁ¹c®Qaîi?NV¸F¼Þ›¹Fr‡k$ë\£ƒsÇ\£¢Þ#×HV¸F{oåÉ®‘¬sú:Ì5:¤wÊ5bæ~„k$w¸F²Î5:êç×èèšçF'k¾™k$w¸F²Î5:ªwÄ5*Ï}`çÎŽæ~€k$w¸F²Î5:>÷ŒkTž{ÁޙѩŸoåÉ®‘¬sú:Ì5*Ì=åœÈ ׈Ÿ{3×HîpdktÔÏ#®Ñѹs£“¹7sä×HÖ¹FG×<âš;åñ~¾™k$w¸F²Î5ú_w©úº‚ŸgF§¹M+×Hîpdkô¾îRñu¢àç¹Ñ‘Þpä×HÖ¹F‡æN¹F…¹§\#Yáñ1®™k$w¸F²Î5:4wÊ5*Ì=åÉ ×ˆÓû®‘ÜáÉ:×èÐÜ)ר8÷žÕ;æqs?À5’;\#Yç·÷ŒkT²÷„k$+\#nî¸Fr‡k$ë\£ã{™ŒkT˜{Ê5’®Q!¾·rä×HÖ¹F‡æN¹FŹG®‘¬pø×Ì5’;\#Yçôó˜kTÜ¿…š3:q­\#¹Ã5’u®ÑA?¹Fe{W|ŒË¹FœÞpä×HÖ¹F‡÷ï9ר¸æ-oïÜèdÍ7sä×HÖ¹F÷2˜kTœ{ÏçuÜè$·iæÉ®‘¬sïas®Q9Ÿ·ü^†Íý×HîpdkttÍ#®QQï¢P¯cF'zoæÉ®‘¬sŽÎqø¹g\#Yáñ¾®™k$w¸F²Î5:Ú›@\££5+nt¢÷f®‘ÜáÉ:×èhoqŽÎè½™k$w¸F²Î5:ܗɹFÇõNG§zoåÉ®‘¬sŽúyÄ5:çsÚ÷uÜèdîÍ\#¹Ã5’u®Ñá¼.ççnÆB^GG§1®•k$w¸F²Î5ú‹Z¥Âp6Ÿçk•Üè4Ƶrä×HÖ¹F‡ã{Î5*Öëœ)Ô¬2®·;À5’;\#Yçý…Þ †3zO¸F²Â5âëuM\£ók÷ò±¼¼ÿ‹Ÿû˺:{¬$pÿ?÷ùûöÈ’i÷ËåÕþûûg|ê$Âæ«Á†¹Ç–T(ƒáaîùSC·ÜLû¿ù=}0¥1üoéSvô3á~áóÐ6 ­Ôo’ÐjîŠÂs …¢¤íôXzN%ŒƒHH»N 3x&!ÿ˜ô  ÒMòKHHXÁÞ¶†úp=œ<“P¢ýB–ÖÃðÆ5dF¿4µ#£çkÈËQ$w„ž HÈ´Z™ãͱ5$CÆox¾†´mk­ ‚°ðÆ5$Tç39¨Õ<—þ%ô ®O·)^Kñ¯!¥\¼†àVæßÑ8èÔ[™ÏýZ£ZÊ ñ’ö žKHèNôŽ®¡Ói°Ýh5yùÜÊF¿†1>u–›„βMB¦Xák(ÜÀ,¢~6x.!5xS‡“Ÿ;ÜÒ p$!ë·{JR+  ~y`8YCF;¸Gûúkè±q 9BÓ0ÂÛ$´\Ò.àš €# ùî¤c×=œ— p"!­ý[R ùÅeýN$Ô˜×ÐK£„ä z oeáBKè Y™öÛqY^n~ýÁ /!¿!ôÛ:FB>2¸Ï%Ô^BC|j M­Ò‰•M%\„¶N$$d?ެ²18’蜗\0—ô’•"£# ¹Ð$…Xv½€„.­Væ¥, ¼QB~tá¬Ãp$!é“¶µ¤Ãø¡Ñ N¬¬åo*¡Ðk‹—uY™FÆ‹h{ê'Hègër°"¼9–…‹¬-†# yO=J£Ø54Ä\àHB*´š.sËÜ8n–ŒžÇ2×w£#XÙHè­u ÙHë‰ðÆXÖû0Ó …á$–iÝKÍ{j ¥1€# Þ!\Nm:©z Ï× ~h„¼òúzjÌÕ/Dx³•ÙžíËúβê“[fNò!%å’N¡5¤ºà! †£5¤:mz8šøú±%Åþ¯ÆŒÑï%7JȆŒÜ8±2ŸQ÷‚ecŒ¤]!–ùœiTB~7Ótt$!?E¿€A Ÿ1~6fŒ²×pM`„·F{hPÑ„ÆN+5ð~È '±¬÷ÛOÅzêÁÑ—'ÑÞýÐ/°²_­VfDŒ·¿fŒCgG×ù/Þùu.T/ 9uLæ~•b™—‹‘" ùM‡Œ÷ê<— ÎnqŠ$$ÚÖPà )o”÷JÃq´÷ûë Ñ^G2áãg¹|HyW=b8ŠöΧS"Ì/XC_ÍžZÇ€ùux°ÜÜpä‡FïÆìƒüú¯u ‰>BŒðf?¤Ü È踂ºÆ²ùöN<µwÇKy ­!Ÿ-ûPf0åÔ}ØÖÅ…Úƒêý’pÝ‹£VÖ[S¾ž÷C·§X?äÝØˆáh ùí±î—‹óŒQHÕ F“¹£J¾OˆÄó!kH´ZYßC-=Â%*ùñ^j€O½µzêdŠò`Æ(;¿ü£'ü¾ìöWÉ_V1†“Jþ"&*!¿8Œé®|â×ñ+5Vh,X™m´2å\œ¢=œ1´Æpš1šqT…5$ÈË“êÇèóJºsõ^ا¢qßlE¡>dêkhh­~ôC´²áø®CÙXÃJ»ì¤à©G2:]CAì¾Ìç*dt’S÷ÂÅp0‚„ÆæœZÅX6Ï©UüŠà4§V–«~,{û‘À ©Ž©~Êu=õÈwƒ†n$XÙ4M¿Z{®Öô÷ì¹.Å-EÜ/Í÷íµé¶Û¹Ž¢ÂpÚQôÞ–zêQwÆ(IFG=×ÁïÞ¸Zq¿-qÿÔœÁ"ˆðöëà@ÀÏ%ä³Z#o÷nQ?Éý'û2i4\>dlqàtoo#uDœABçæ:µÔŽÀ›£½#|hpíÝ ‡Rêw§uê^3;Wߤ!™8ڗݨFÈÅHè©UB}tµÞZA[ˆ©ÃqNíS>­ù®´U†¼<©1*%´àöö£pâ‡z¯•phæþÐ\ç­ð—¹"¡¹ÂšABs‰?4WøC3Hh.q?æ h ÍþмÚëü¡âøCŒ„0h®ð‡ J¹s…?D%Äñ‡æþÐ\çYC ˆJˆð‡æ èÈbøCÌbøCóh®ó‡Ž¬!†?Ĭ!Ìš+ü¡#kˆá1bøCóh®ó‡Yå±V–ó‡æ ˆ‘æÍþce hÞáÍuþС5DùCŒ„0h®ð‡8 !þÐ\áñkó‡æþÐ\ç‘Ãâ$„øCs…?ÄK(ãÍþ/!ÌšwøCs?t,–þgeˆ?4WøCœ„h®ð‡ 1ü¡y‡?4×ùC‡$DùC¼„2þÐ\áqBü¡¹Ââ$DùCóh®ó‡Iˆò‡8 !þÐ\áñV–ñ‡æ ˆ³2ÊšwøCs?t0–aþ'!Äš+ü!NBˆ?4WøCL,cøCóh®ó‡Å2ÊâcYÆš+ü!NBˆ?4WøCÌbøCóh®ó‡Zæqû2Äš+ü!>ÊøCs…?Ä­!ÊšwøCs?tHB”?Ä[YÆš+ü!>–eü¡¹Ââ$DùCóh®ó‡ŽE{Ââ$„øCs…?ÄDzŒ?4WøC|´Çü¡y‡?4×ùC‡2FÊâüâÍþË2þÐ\á1bøCóh®ó‡Iˆò‡ØhŸó‡æ ˆ“âÍþí)hÞáÍuþÐÑŒñ‡ cÊš+ü¡ÂÎ5åÍþç‡(hÞáÍuþÐ! àx åü¡¹ÂâýPÆš+ü!NB”?4ïð‡æ:è`ƈùC…}YÊš+ü!®>„øCs…?Äù!ÊšwøCs?tp aþ'!Äš+ü!VB9h®ð‡8?DùCóh®ó‡ú!Ìb+h9h®ð‡xOñ‡æ ˆË©)hÞáÍuþÐA+Ãü!NBˆ?4WøCÜBü¡¹Ââ*ù”?4ïð‡æ:è„(ˆ÷Ôh®ð‡ Ñ>åÍþ—1RþмÚëü¡Cùåqû2Äš+ü!¾’Ÿñ‡æ ˆ]C„?4ïð‡æ:è`ƈùC…Œ1åÍþ_ýÈøCs…?Äׇ0hÞáÍuþÐÑ]âñ»ŽŒ?4WøC…5”ò‡æ ˆÏ©1hÞáÍuþÐÑœñ‡ 9uÊš+ü¡’„þÐ\áqÝ ÊšwøCs?t¤çÊð‡8?„øCs…?Tè(¦ü¡¹Ââz®”?4ïð‡æ:èèÎñ‡ aþÐ\áñû²Œ?4WøC…½=âÍ;ü¡¹Î:í1ˆöh®ð‡ uê”?4WøCܾŒò‡æþÐ\ç« þ›Sçü¡¹ÂâkŒh®ð‡x?”ò‡îž.?ê÷}]~ œÚÅ)F¸Š•Ðõùg·>þÅÔ†ê!†_^ãS§;罈[ÏZû|K~ðafôk@`x8à)>uº]*ôóqŸü BÃŒþ}ŸÁÙÕKËöjLü!XI«Fþ/ƒ‡ûw UÉÈ/+»ÍÝ«7™brY™—éÛkR±sÿŠ{lUœÆáMŠóšë¤”ñ™GNqwá„¿Á.7± ũκޒщâ–{Á¨â¬_´ñ¼GŠ ¹¾ †…Tºè‘ó_>×ÏíR±£’å1Nt¹~\ ÷Ï ŸçVýh9f„·èçNÛÐé!8ÕOØvóú pjXáê2¢N÷yy¬Ÿ­uª^×9£¡¿_>5¿ÓàŸò;1CÕjyz ’§ê ŸQõÞ®Jã$Ÿ©WéXL¸õ¾5«wP’ÀÕŽÕšÀÛÕ;„Þ&†3ê]Ϩ$êU>¹¼M½ºÛÐ^‘—ÏÔ;j©\Ðfª†½E„õ†;¾8õ.·‚q’ÏÔk¬…ÆÅ½›zKWIõö:Þì]\`8R¯õîm\ º™z—›Eú8Å Îx×~émæêõÊêu¼R ©zõ²ÇF±†h~ÇF:~â—ßoƆÅä~³LqË­0*ÞÝ*妸Ò=DqƒÏÜ ¼YqFéíjl>ã%äóe¸Éh„Ž À9ÅIÁå3!‘$/O·ÝD‘+Îø=],F8 žBÛU\~9[!ŸËÙH¼£]^b&ÙšˆJ5Ä»ž%¢wÖ‹Îú\›À‘âŸÏô#µ8¿t£VŽ·Þ‚F'C‹XBEèRHDCI§¨Cý.ÇZ`Å—ÏÒÕk;±´I¯Þ§U~/581X¸m¬ÞóËÙ z‡ËÙˆÞm¤\Π¸s«ÞˆÂ›ô.M¸¼ö/ÏõîìŒ[ªò¹Þ• W‹cà¹zÅJ‹½ó%£gê úõ™ %8×BÓ—ÏÔ+Ã5ë‘hT»xìn„3fm%—ï‚È$ŸûcŸkÀâŠÉrë6E º&—CÛ”»PC²> ÐŽÌÚvãÖ]Çê [h‡á¹zO.ðý–Ö3çiÄGÏÓ!ãÓ™q½Õ8WïÐ…Ý©¡ðÜzuçìÂu¤ªKN­w=€©W‡›${ÉI>±^Ÿ©85‚~žà©§v¯­÷ézUÈÆxWÀ‰zûQôŒõêPI^û©¤ÞÑÙ¥UWï¯^íÓ!¹˜õǽôåsëõ)–6šW¯÷ÇDt¸È°*˜¨wóÉœäsç<˜¸ã^¨u+µƒ¾ùåù`PÜ‹x Áå™wÎAÁRÓ]ŽòÓ“®w¾<—‹ ½¢»œ@D÷ïNFç4(»ÎŽ2®Íg>({ãõcÈãµ}&]Ïs1(û‡F¾¸4Æ¥ýÌå[ CrAÙoðDrñ榸æíÏ`­ ð¦ª _píãª+lt>)aŠK!âXà__ŽnüËB‘¹³»[Cô¾uô›fM^>˵CÆ®N%×{qt´Á[6ËoLe“±äÆT¬wéŒL.Ý×¶{Zü¹’Þ¤w=v.R 'I¸µ¤î<˜Œê@s9º{’¡ÜNGçì]P½ÛБs1ÂËgöo~Û:½_çLôu…ÍWè<+àNà$ÜÅ!{On‹¥›/ ŽZ4ûù^Róó®ÂÞ>P…beß©ÞõŠÚûÐÉäûSQ.Vö~uP{7áZI::kïÄÏ é_ËÆëàDÁÏßžÂzýØ)éÀdDÑÏËaoïÌËS{·R±~^ŽC¼iç~S\ñf-âç“íO„7é]z½+)üoôóá>¡¬Ápjï¡Iô~Cèƒä$©ÞOº#ö~:_#/Ÿ©ÙIÇ©µ„ì"Âi·Ë'§4r‡+Ã8Égêõ¡$½bx»z}â׿¹œ¾É%ÁÍÕ;<@ÿ?¹*&Mß„óa<öEãËgê •pÿŠìÞ:½ZžËêÕ«W ê ·¢q’OÔ»~…5Ä+Æ6õ¶n¾„Œ_?Èc›/¾§÷aXcøë•ËpN½–zíQ/ßWIoToßùXb‰èzý"ʰê ÷TÓ¹SõJëJÖ;p’Ï­×è­¿|þõÜÝ_Âoñ/¤Ÿõ‡×·\ï~>oðõ/~>—á÷|ý‹?Þ—áO|ý‹?=Vàßÿ.Á¿Ëðxù—ÒË¿T^~ºnðõ/>]Ëð×Ï ¾þÅÀ_?ËðËÛ_ÿbàïS~½_Kz¿Vô~ý ðŸ%øÏ2üF?ÿÅË¿OŸþþËæ£´l>*Ëf†—ŸÏ1÷^y VÇüù7ƒ|îò1wŸ å'þ…Y~(Ãÿ|lð?øŸþÜÒx®' Ožªø·øTÍŧjÞ*>UsJÉSÏðÔs婊‡ŠOÕQ|júþæG婊WJžšá©¹ò”€§Dù©š#‹OÕüUòü[—Ê¿Us^ÉS•<s¼VæXsXÉS¿Ÿª¹ŸøTÍË$OUÜDòÌq®Ìq–ð”,<µã3âSÎàΕ§Þá©÷ÊS7“<õ O$ñöüÑ=?®·@–>'~Ä?äð§øS~~íž_êǰ=¿ä?$¡%pÿMÅ·§ "š‘[»0W‘0ˆlŸÉ¶oJàÕA ¢Ú1†À«ƒhDЉ#ðÚ Ï¿“§èòXá> ½Á'×Ô*í@°v^{Ç/YzÇP¶_ŠÂ_²üŽ_mƒ¨¢ õmDUiRé—®Ìdùö…ÿœ‚ƒù߯òSñßò¿=¿iî£âof€”ÖÍ\žI„ãËe±SûÜqjŸåw|÷Sü½Àß‹SÄk;°+(|ÂOÁÇåo—û§Ë•=ôë.|ì°1îñ£~¹æ‡8†JçZ½–u ðe#Í»i[¥äíúP~ÇõX'rêÝ]|ÉNg"…9±/¯¶Ï»SøµT§¡/?ü±"àÕúéË«øòå—_IòìË+ ?ðò[Oçíû½+¨7–¸®xmFÿèM¹8ú]¼~pÑÈ/´Eõ»prœ&ðŸøLl·ÒpÂå0µÁƒ ~¢#›·Zyyü;FA ÑÃð1˜©ä‹j £› ËZó8Æ KàTBýrj]Bº&!#HñÝ-ÊáD¿º8}Gµä«ïðê;úåÌ’iùJ·±’Ãr.j1.çÿ®ÝõžÍ{ †YΧ.4™À¯¤'tZØÝÌŸ pºPoðÿ®åÀvŸü¿^ürt}êýuKÅï׿:"Çû×r¶þþ¹¥Ï÷ë_ üSTàಗEø‡÷£kMä oHîBõø~x"?lĬþɲ2†µ ƒg^q êøåƒ¿ØZsŽ+CÞ”¥arÉ»å#}áhßuƺ¥5‡iñ6æ¶ÏO8:ª¤ ÿa{JצhN¬~ éâ·°¿hÌ1‚ŽŽó]/‰Q¬Fúš¢1Æ8:'¢ë5°'?îŸÎ…)J#¹)ú62|ŸÎXzÉšPIïnùDM`8I°ƒ€^1Ú¡úÿ®¶ˆ—À¿ÈS£^½ "êÝ>‘Iáø)e §Ÿ@õÞ¾¡Hàȯ߱1•ô<”>}’)._Žâ¢}*§¶Óz8ú08$ #Õ¼z@Où—\ÌïýŒç®FúòÅ/Û Ó=}áaˆŸ_(¥¢ ?¼ý—ü6˜†ƒŸU¶l¼ùÞàç×ìµ}à:_uË×+ᇯüßNBÿÊázµK¼©\Vó >KY¶8mx‹ŽÂ±Å…ýˆâ-NntôgVÝYHM(0l(Gþð‰âóŽ~#Ò¤pMa Éq… ü‹ÀÕš¢Î§ÀÑÒöp³,>† “ýh ŠøqîÄ}ÎÌ$pù.ñ Ëy ÞÑý°±ä8u•bY6Ô–âi¡Î–”›Åa[Ò,Öz²gK[/=‡#ÃZiÔŒ-ÁY!ùÜ‘aE¯ðýT eÊr†µXÓPf—O©aõ·G8ÖOк´i(3[M5“P&úÕ3¡l;P8…“PfÖt¨]Ê‹’Ài([¿b`B™Ý>JàL([? û~*fú œ<'–OüIŒ '@: GOô+œÆ8%8õ ÃêÒ$]@Y?™P&aBÙ2uÍÁI(S|(cÇ™ßB âB™q‡²åó lqëjÞàÏ5‹…PMæ¹lq>Õà-ÎÆ5ÿ\´8)ÇZœˆ T„3É£q¬ÅõVŽŸ’àØäQ7S‹[µ8¥¶’h§§Ÿ<ú(®œ$º·šM#™7cÃÃúMM-'ºï‘ÝIXÑqO:>y´ãàÈâÖM±¸eá°pdqRñ'öåqÀSе¸°š7øKm»6–¶k##‹ –U°8)F2:cqkÚÎĸöNcœøíšO¿ ÇOi¥øíšÔÂD8µ8+‡BŒƒÝ^„3·®ybqÎKOàØâ¡ꎵ8Õ+*:lq>}Z>â,ÎRÅ}—î‘/øßíéªãbÜ8,Î)Ž-nIN¸Ù_Gg §;zcŒ «yƒO‹[LN”²ÊÀ±Åù´Û²Jh­D8µ8!¬äc\/Gç $ªãÜ@á4Æ-ûl&Æ PŠpjqæÖ.&1ŽeNàÌVuíÈ‹S’yy’<ú¤r`-Îi) œ&v5XjqJ—ç‚ÔȤ…^ïNÉá™É,.•71XŽLê+$H±£ã %Ñ}O•|D'_QWz©¯P‹ «yƒ_*1®w…¬2úºKÙâÄZÝa,ŽŽÎXœ²†·8×ü¥bq®”U:MáÄâF%x‹3‚̱8eJYeÌm.µ'X‹p c'Y¥O _’tPáˆp’Uj»–ˉŅ/Å1œ³¸A°7À5Š9œ¤…®`qF²pdqK>ÏYܨ88I É_*¢“oÈ×¹õÆâòŠæùßšçRådùŽf· p.TN´ãc\_Y%pjqë \åÄ8 '•“Þñ1Χ\’À‰Åùí;_9QÚhçš|Œ´œiX® °t¨èh@:¾  ¥¦sooˆX 8›UêB@œTN,o°Z8® …—/zûò¤piøÊ \ʱ^ÎÿV«,Zœ-µÊ’ÅÝ5µ88 )S‹Öqðu '1ÎÝê6¤í;Wδ݆BV™Ô¬žÊgÖ¶Û^­ò\¨Uú$„­Uú­Œ£p’{®‡ÃSS”]6L­r\κ¡µJ¿‹0œ³¸¾P9QÚrp"]!D*ÁŽNÚnC!Dº‘ƒc‹[àŒÅ "-6žÿ­VY²¸µ_º[«,Xœ¸éZœ331ny‹3ÎQ8±89j•pWgj•ëVˆXœÇ‘À™¬r(Ô*¥¡£“§ne^㬦’'Y¥’Ï*‡q ’o¯UêA8“”ºÐè†Sßr8ÙbœP# ǵÊRR*Y8²¸õël&«TZl<ÿ[­²`qá"–ZeÉâFUÈ*­œÖ*e_°¸QÓÑiV9(Í×*‡Q8µ¸¡çcœîúòŒÅYQ¨U:Cà´Vin…R«–ŽNj•R¬¤bq#Ü[ÀÛk•&’×ÎÅ8a µÊaäà¤Vi µÊ\ê6¸7(Žk•몣7ª´fuþ·Zå¹P91V´Ô*Ï%2×XÈ*#Á!™' gÍ@á4ÆÉBåÄ KàL­rå‚Ñ7H çj•–¥–••ûÎ…Zåzß “/ KG§µJ%ø~œßÑq•“¾PÞ7tÕ±•“Rr<×*M)H±p¤ÖÒÇ^­òÌ×*µ¦@æŠiá¥ãÚj•E‹ÓcK­²ãzUèÇ9m œ±8W²8;P8±8ÝÛBw WÎÔ*—U.ÛúòLŒ»•÷I­r©èh­òÖ ¤µÊÑQ8É*۶2iw`0dÙp' ¥8D-‡‹J-ì…ã Uà?F^Ç·E¼[«<³µJ%àûq"^Â+ÿâù·¯\^¦_Åo"üez濱y™~7Á§2ûß«þüßúŽ„n—yGi:È|NÞqyŠ{Ç<Ç» Nªéß§œ~Ò—<ååzþÀá.l@܉çÌW/’§ö2:ä!”þÔÎø·ucÃx. |µŽ”·’ñÄgšŒÎ™ß²¥äX’`~9œ xø«œ¥Ý*ÈË_±ë 4aæcÊp•ë@F¸¿'D„5S¹?ê|™á3‚[Ù/ i櫜¸l>EeÙÜÈÏ̲(œù.f<1gƒ„…CàI¹ç>q[~°Ωü&Ö(…?\M~àjgn«ŸÄ®‹Ñ~Ožº8ãdÌÎ|ö”èGô³(¨¨Ÿ‘©Y’ÑÏÝr†sú¹}Õ¦Éþ¥×ÎéGšS)à‘ѯgÌÃ6·OŠž%Öóòø\U¿¹^{¯øºŠåˆKÇöN¯õI想„Ûþð´vÃ)n©–°ß0i ÿ¤°[Òãtî:g p|jE( 8ÁU  >á´Ø²^ÄÇ´ð4¤ œ)Âßïó)ªpãêîgœ³8¥N…îšåà(ßfä? €‹zøs©Ü¡ÆB¹£WŽÏ€Z—ö‰Õ¨NŽõÁ~uV‚|¥¼ñÿ¢p7ò&#Å@áôCÃõàÅ ×íßñôŽÀ™xiÖÃ^Ÿˆ½ÓÑÉÒäµÅUþ$_Ò¨‘À¿1\ëyø0‹.á•EøãëVø3ݳS½Ï…KlØÕLÇVáS˜Üâž‹9ˆ+ä &ûw)ÿJa"óóߥ05ùô¤4&¾ëŒ>J,ÖV8Mîo‹–€`KN³~SÈúሎN£¸}Ž{ʼn³éÜ¿QzíýìZ“ŸÑfÌWÝ÷îªÃ›¡1œÝ™ØÂ²QŠƒcND_X´½äå)Ó6ª7œróUX›k»‰Ù³ŸÒ­ù g6ðñ©ïû§—Òd-Ô²y’¥p’à øHì%Û·öCüòaƒ?LŠ r[‚‚¬àH28³íÕâEoø+Ý5kÞ’oÌâË#+Gí¾R÷øõƒ&÷‹ýÜ¿ioÑ3:ç$ Г—gý¦,íÝ Xy®,›…)Å-›ÈY9W–Ùe#†Ø>óËf-–¨Ýesþ·esþ·es..%ÖV(» œ®ŽÛÕcßçʪ8ê&v£S½Ø]6ç[65o#KÞ†3ÞFñÞ&ù²ñ±²lnŸ¤Ö–Íã¿-›Ç[6åe3®¼ïÇŠÞ{;:*:Dû×F‰}oóøoËæõß–Íëß,ÈÎÎ,¹«Ëæõß–Íë¿-›×â²ñqxßÛ¼½_ã®Þ_ÿÿèýáûµ@}@½ÌÎɸ'ô»¡—bñ®KËFPø'9Y¢ü²é%ãÜF¯/›ÿ¶l~üÛ²ùQ\6ZH·»l~–ÍÒöÛw?þmÙÀèx?—Í{1›yŸ­çQ³y·(å6#…Óšïº#ÍO¼&)ñú“¯ßÏ3U˜¤ pr^nH©¹2Ê)9h+““ÌÖ5Oûí’5á´.½~ávHñNYÇ¡uRšõF'Lm´ÒRø÷}ãžpy/ çšÅRÊå°¥¼??­”3Ëfý—[°'Làdq »}Šœ¾ž¤0œ)%oF Æ8õ6âÆœ µä1áØÛ˜ÞÖÛ¨x’LòòØÛ»~õqý…ùy†ýú…?¯ëgZè"ÖÎÿgKEw+Îãxq_ɨ롮 Üô–…#w擊‹Kì.®N—áòIׂOZGg—&pfq•¾HJÈ!÷ÅÅ¥Á‡29Fá}qqÉõrBnq úòtq­÷T3‹ î¥OàÌâZ·ª;E‚òâ ôK=ŽËCÌ΋‹kMpÙö² pº¸€´…W¶++z.¿-+-.IàÌâ…3ïldY>–—6¼ç’ÉW…Å ªtq)¥ œ,®þvl)Y\z‰ä™Å%‡–=ayq•ˆŠZ[® ßNËšç’zÏsÉšç. ‹‘õ.ïË‹K¬Æ_ ‹²ä¹Ö¸X‹ÐE–÷•°x†EØȲçòùˆæÜäÀÑâ ®kí.PÏe˜¹ÓÅeÖ¦”¬x.Yó\£-…EÁÂqXÜÌOÖr.1ì.®ZÎe žk¿)+9W;þ…Y\–À¹°8¶d9çÒî–ªÏ帗gÎ(+„ÅRYɹÜJblOe%ç2+yGVr.Y͹dð _£ÈJÎ%¡æ%ŸjžËì.®§¿ð\RH g=×nBáÜâr…Å9W§‹kÔÏéäåéâZ×&Z\«ë"pÎsÙÂâRôå9Ï¥N¥Ë#1üˆçÒndáØs% Èõ¢*¶6U軉”â³Á¹ÌìD¯ÂÂçõ7.mY·{LÑ*eÝà”Ñ!ùCSÓ¯µ8=ÜtP<Ó=68ʳ ³U3VÀ¯¿0ÙµW‡ú%ð…3šÎýò(0híÜ¿âwtîtÿ/âe …(Ž;ºÓ kPL¾>>­÷ðq~(ÔcáÓ”þIÃøæ*“›þÂÇ\öXG´¶µS­XŽŽŽÑ?ÿèP6u;ýlèdîWôqÈàÔú©ùµ²Ã‹pB4IÞ1\ôVâ ö¢èÀçrGw!.70¨•7ˆE×Çhðò‘/—Ê>#Â/ˆþïœÒ)–ÖP¯JkŒ?2OÈ ·¹c8#ˆÁrž+¼Õh ü’åÄbyw³'¡pÙÎOŸî`c·»Q"œ¦ÔÉumèf–¶háž'¾£î†àFƒ’ΔîË£ƒç ×è<ñn·2÷ÿWÚm9ª*aøþ¬uÞ!/0Y51—i!L§M¶Nzzöû?ÈAÑB©ú ûì}3ÙËú ü© çTŽïOòý™éû轊q¾Ê,Ç÷'ùþü¾sœ¥Y¾ÓF¾8WøQlwÔé/÷úÅ«×>å-cÚ2¶ÞŽå6Oo,û±-Ë¢ÖÎýØîCÀ[à«|æ‡/d#b½¸ùöjÛ®Ž/ž½·&<ú 옦yéäãBo£üм½&báíëPiõgûÓ¶.És¹ÑÉç.ºÐ«å˜†?„ qô‹ ÚŸ  oo±‹Š^[´mÊE°¥/|߀pîb±÷¯•„°H/ô—&ÿ¦%åmÂEÂÛ{ìb8‰¶=Yÿ)aÉÅ ‹´³’ðè›Äcu@‘?<3.|ukêaÖÉZã•jápbW¢áDÅqa=¿§_~Cyx8 —–®úÅdÂn šœ x¼ù-ø¾w¯•ZqüY»«“µwØ)´’!|NhÆ£ÏDSì~}9o^MÓׄ /Þ îÉ)1 ðS´äìxX¼y¾ý;o¢‹ãJžjDZí.½[ô3lãÆÒEÂOŸÌÅãâ ±ÿú¶ä¢V¯¶²}Æ{Z?DZ«ÞÍW~•ó‹·ãŸ‰8|ã–œìýöÏ]ÜǸàâ¡FýP8trÆ¥h2-Hä×?±ÈŽfT»“}À&-F û›.Ì9ÏÄß_aEçèoSÝM4ñ³-«pL_À£—ÕÛª¬èd²öÍvH‹þ(Añ=KÉñžŸ2ÔWã‹qáS“‹¶›òH+,ΦÕÝH½ØH3éE˜o_àì0þéûü€«‚ö`-p6­~ð¶ÑJǺs[„ ó0¥.åiA]D<š²¦ Ëšpój°Z…ú‰›W5oÞ)Œq©òš×A±Òy+ꪔOH(ª}ÅqÖŠ~ÞUzR*†³VœÏ¥}‘¯Âæ-*ôÁ€ÝAÄщö‰›·ðÒ ü ©4¯oßWÍ»Àóšw ‘‹„ s}ê=ÒX7à\½µ–ÞRô¥î%ÎÕ[ÉóbŽ=àL½E=ÓßdÔ¼ø¼.ÞQÒ´Æã­ýûE„î¡zÑ÷“UÍqÞ¼ôYÚ®O¤Vý?M­Âg.¤Vº©•>pœ§Vê §Vá›/ œEèjççŠâM uÉq1µÒ(ö"ÅÞ9?U§þMìð±Ub7(ªÆ¸b7(ªr¼@_f{PÊ]Éq)ÄŠ¯6WÁsöýÿ žKœÏ Šé3~ ç' Ðã†ó͵Ðpþ¹‹qq³Çmö¨9^ðÕh³GH+ á|!cÕíâwÒGÅ|gSXx·Æ6,¯ U'¬ô _*‘ïgÝi±áæÍ]RÃÕ.LÎûÞ½IÐbH fœ7ïv>¨Ráƒi.4¯–²]Ÿ‘pü*²‹ö oûèãÂÃpf#œ µìŒKÍ[ µ{Üw1išïñÒoût¨û Ll‡¯-pööIûÍ8n2\$<šPògàíó`÷Hù¦{&~uâÎAn×oŸj;áñ.ª0µÌF#wú|h²«£J<ÂuÌBb|¨¡?Íë›*¥,ê|ßÐ[GvŽb8?¥6Òûçzm]€7a²&à÷õÛÁýöà&}¿£µ<3Ž]dñ¨p wÀ×+È\éJ©£Üwhêºzùó}×Û¢/îh¹ÀÙ°­WïàûøN8ö=ëæã‡`x©¼_>‚=z‚KºÇ©wÆùƒª§ÍlâÍ3œû½Wéko›ñïzü¯¯û‡ñoí5ä.|‡+à­ëÛý/2*ËoÝ?Ñ¥9^U‘Õ¤ÞvÏðºâøù¶´RU¹Ý+U¾›å…Çmµ§×ýþµð=ZYàKÿîŸqéÛy 0–îß5˜ ªºKºêFüû½ßšË24ÔþëŽc^¢—¡*ÆÇ ¾Ä¼™êôòªô±‚/qo¦:/¸üy«vÇy€¸¸ùfa%U0Õ®à ¨`ÂãZ `°:ûøsîPÞ ¥Çøp+ç(Än÷ +Ÿ=ž*D¥ QTˆŠ *âK//ü(‡¯œ¸OΕ®Ó¥k*]¯jÛuÂsézYº ?‹.âÝ÷‚ïÖûéFw!õœ{ü»ûÚ¾?Öj1>_7vaÏðöó[ÕûñAíØ…£€wŸÌjYCÁEXÃßòOÚ{‡*¢KWDGÑ¡ŠèÑQE¬­jM±¾pÔ*"ÂËŠ aE|^?>Æ­ëßç¿·?—§»Ñª_!øsûyÅá¡ÁŠ¥¥3žªG=•^µKÌüimÿ¹º-÷˜«mãßÓÚÊ•QÏ!k}A,Ýu¯ÜjÄwìïV _Wݸ€Ó¬qèì"|[—RÕ… úÝ#m¶Z1X‰ýn{k…¨ƒI©êãCßÊ8öýub¾W[†3OB·ýËŶëURj6\¸^¥føåFŒ3^"¼Äøß팻_2>^ñ!—}û#烋Cº>YÝñ6…!±Î}a§Õ—î©@ üñÙù<¿àÉ{‹=C‹çï{+羄ÛÞÞ#¼OàfÛßÀÍ“ÕïÏ9üfdV¿°á8 „ɪ£B:TH—(¤Ë*äsîó°ô¤KxB@äIGžtÈ“.áÉËB¬“¶½âDNË:ÏV%¶rB¬¸dÉj˜;}\?—¿d«¦™­ü/ÙÊœf+ÿK¶²f¶ò¿€ÕY}a«w*ñ=Q⥭ü/ÙêÚÏVþ—lÕRM´‰šhoduÃV÷ËlåÉVª‰G¢&:º¯Ý×8]6ZÑ/ÙêÏc¶ò¿¸•y–t×ÞèïeÌ8|­è—du!«KÂJ‘•ÂVg²:§¬4Yilõ~›­è—dõ «Gª#«[©ßhE¿$«–¬Zlu£ûº%îëö$«'¶b­è—dõFVo «3Y±Õã>[Ñ/ɪ'«[õt÷=¾ûOWãFçk »‰Fùådp:ALøxátq§ çJ SN¿~Aø%·„·o1î¤6ágTuã„kÂ5Â5Æì&œ pÂÇ ïïÞaÜ=ΟŽåcƒpªùT󉚿‘ï7äû-á»ÓüŒ?þĸ“æ„s‘γè÷ÞÞ#¼Ç¸ó„sYOøxàƒ`›Á6P°MŽ`(Ø&G° l“#Ø ¶ÉlÛä¶‚mrÛ@Á69‚m `›Á6P°MŽ`(Ø&G° l“#Ø ¶ÉlÛä¶‚mrÛ@ÁÚÁZ(X›#X ksk¡`mŽ`-¬Í¬…‚µ9‚µP°6G° ÖæÖBÁÚÁZ(X›#X ksk¡`mŽ`eÜ%ÒÎSê / üLøágŒÝ…Íé.,ì.lNwaawasº ‹º‹7“Ñ]¼Ô]Lxº»@ø…ðdwð–ðdwp×Lxº»@¸&<Ù]Üõžî.Þžì.îú‚ Ow§šOw¿‘ïéîáO“ÝÀ'<-X„÷„' p§Æ O àNÍ9C°Í vÂÓ‚Eø…ð¤`Þž,À'<-X„k“‚¸Sã„§‹ðŽð¤`îÔ8áiÁ"œj>-X€ßÈ÷´`þ$<)X€ßO3~G’/ üLx2¾Üõžî.Þžì.Þ“ïéîà®/09ñÝÀønrâ»ñÝäÄwã»É‰ïÆw“ß Œï&'¾ßMN|70¾›œøn`|79ñÝÀønrâ»ñÝäÄwã»É‰ïÆw“ß Œï&'¾ßMN|70¾Û· ÁÚ7$Ø O á“‚¸“Ó„§‡pMxRqwršð´âÞžTÀœ&<­8„·„'ðùžVŸ„'p§‡ OKàNž– ÀÉä¤Ä¦Ä6'%¶0%¶9)±…9­ÍÉi-ÌimNNkaNksrZ sZ›“ÓZ˜ÓÚœœÖÂœÖæä´æ´6'§µ0§µ99­…9­ÍÉi-ÌimNNkaRjs’R “R›“”r¼»ôÿýÏÛýÙ÷ïæùØÔÕøîúé: Ûm J¿º4²z‹¬6…dÕÄVûJ°2k+µÛí+ý-]*nÕ«¸D%Yiv÷Üê~ÞÈÍ÷uîV~-íéÓ~‰áê}žâ^ùp¯¬¦;iÒ5tïU–•–­$¯àU“åU“å•ÍòÊfye³¼²À+›å•}åÕÛzÚ(áÕk+c5ªl1òL”øÚJËVB=6g¹—càr‡êñ•Õ}ìLV=š¬z¬¯Œ‘½Z àÓñÊê~ÒþÄØ7ùNVù¼“WVÓd=56멱YOOÍ*Ha¯^X…u©ôßa[s«2²RÕV1+Z—T%øjTâ’Õz5ê^×âßZ­FÕJˆ½|5ªÚÉ÷­FõÛö˜Õz5ª*Ž¢U´õ —­FUòÝG«Q•\âz5j¥+Ñj½µ(ä׫Q¹ÄõjÔÂoÝY[Å«QÝ3¨’U´UñgÂðq’â>6*…ŒÆðQÏq/X±Á*¸’éO´ášz'XÅã–B Vlx¢„Ö6|¢KnÅ¥à#SH5Á†•ÐGöR\¶ŠÇJ²b3jº|dƒ -ý->v8 OŽmÍé—Ëjÿ5”ÊþøÜ DyLP-1.10.4/Data/Netlib/config.guess0000755000175200017520000012706311405216053015467 0ustar coincoin#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-05-17' # 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 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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 Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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 # 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 tupples: *-*-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 __ELF__ >/dev/null 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 ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-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'` exit ;; 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-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-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-unknown-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 ;; 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:SunOS:5.*:* | ix86xen:SunOS:5.*:*) echo i386-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-unknown-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:*:[45]) 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 __LP64__ >/dev/null 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}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-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-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-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-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu 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 ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${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-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa:Linux:*:*) echo xtensa-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; 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}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-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}-unknown-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 i386. echo i386-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-unknown-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; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-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-unknown-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 ;; 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 case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac 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 ;; 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}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-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-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-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 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 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: DyLP-1.10.4/Data/Netlib/afiro.mps.gz0000644000175200017520000000107510430174061015400 0ustar coincoin‹æJ®9afiro.mps¥–Knã0 †÷r] †H=,-3mŠHÀí`æþ'E5Ç"é “ñã/‘"­óáãhÚïðú>]ö»éòçs¿3ea²y6ÀãdÌ_f– 7/ÁHF"#eÉ™"#EF¢¼§%ŠŒÙ“³2ŒæC;ô‘Œ™öãi?†kÀ³1ϗϯýîùrúýq¾fÁ\Ï s‚Jsÿ\],‰Z-˜'ÖxÉbçccu kÜÜp$uF„WgðëÉÖøàÉ˵#ÆŸˆxƒe¼¸³ßᱩg!Á€J‚cK° £¢>*ê5¢®>n«'E=ýŸz’ÔKuó·ºV¸¬¨cÜTÏŠzªê¨Ô½Ý‰Ò´÷.8¸èùÂÝÔ< ™_à(ã¾æ•IÝw Ž™?û÷r[ÃàùÌ›ïÛú©T޼BÛã(´µ*Òú2€ÔÖNÆÅ¡2@½:“–à†O]ËàrÕEik¼ÕÇKgÏàìÜŒäåÅOÃC"AºCáqsìjí‡I¼TD&ók|BÇ«—ïµ¢ž5õ´©ž·ÕAVwö'ê.¯qE]i,šú(©k\QWúÒ)ƒ2ð…»õ¥SÖëÊd~{÷™OÝ >fþì <ÊSa»øÎÝú¼¬^ò‹‚Úµú¤Í±‹ÚåÚì f¤-øô6?yµÿûÉâŠ+»7gíÐáýË6}ãý‡=1x7àƒµBþ¼ïñÇãùåðuØïþ[gebÿ DyLP-1.10.4/Data/Netlib/recipe.mps.gz0000644000175200017520000000702610430174061015551 0ustar coincoin‹K®9recipe.mps¥œË’Û¸†÷©Ê;h•U¬²Z’—ÝžžaR}áád½ÿ“¹[‚yºÙ«á hü…ϦòúðòÔÑŸºüpO_¿ø·?ÿ~ýÒ­Wžû¾|ÚF—K4²Ñ(²´Ñ5_[ÂÑóïpôj‘›Ã>E#|4ú•øý~ ý‘ßGÿtÝëÛKO4òoáhÀhdÂD#ÃÑuNÍé¢9]4§‹ætÑœ.šÓGsúhNÍé£9}4§ß3ñç…>íuä£Ñ ­z¿æ¢k>ºö1zîºÅÿÞg¹Ž†S8º^sÑ5]óѵÑk×ýýp½·?ûíþ}û>wúáyˆª5ÙhYÚ蚯-CT­CT­CT­áèÛwˆVÑÊ¢‘F‘¥®ÙøÚÑÊ ZD+ƒhe­ £•E#"K]³ñµ£•a´2ŒV†ÑÊL´2­,ÙhYÚ蚯-&Z™‰Vf¢•m£ËÛó/¯WAì>ñZÄ7i¼Égwúî¦7Á…nèS÷}oFsÝMhB÷sæ¾ P®Ñw- ç=æî›F…1ÎW÷}“†óŽ™û.›'öã0OÝMEöÈs?N3lîëÓcKÝö¹/uäž§†~àR7¬kŸS÷§î\ÕÍ…Ôu&‹ž§î<ö'.u×b>¥îqêºùÔŸÏ#SusgØ‹ÖRÕÙÏT-WÝu|Õᔹ3UgŠU7çîwTÝxÊÜ“ ;öçqεú3¬2¸»/”ºå3©[Úªni«ºåîª{/»Ô=©ºõ;˜iäRw:ô§îyÿÄ;UÝ—:rgR7@AëÆÜ©ºqVµîæ~GÕMçÌ=Nݺ/a8BÞœLëí8ŽfL¼î+Ûô¾Ô‘{žº5AȦn0§ÌiNV+­9¹¹ßÑœ@=yL˜NÓlòª›{a }]BÅæd*i]Dyê2šðˆþI¬ðIÈ}?ÎY¤ CÇnÌC,gƒ¬{Sû$ùö=äîûu6Ⱥƒµ ù&?äîû9ø’hAr8äîûñz6È*¿þiŒ÷l‡JÁØ¢+‚¡Qc ¢†DŒ=ˆ,jY0ö ²`hAÁØ‚(‚¡‘c" †¤F0ö ²`hŸDŒ-ˆ"ZE0¶ Š`hAÁØ‚‚ñ¿ßoÃvš.Ç®®tšî»ç§és?±§éÃ1s玿ùÓt‡㞦;ú›)wßÞÄ ÿñÝ`|.ö}^ Ý]E»ÒO‡qê ?†©sBꊿõùŸ“Ô~:<Ï5Å©s”ºdñ'JKs¸û w¥ïIâÔ¾' Sç…Ô¿Ø<òß“$©+|Or(þˆ§ÎSê’ÅÏ”ºdÞý³ÿyÙ‹6yùéö„Ï«yí06¨ýãÉÝ7¹ç;ã&*ïktOÙ‘Ê$ˆ‚pIîuÏK0Y£|Ê~¨M‚x!÷õô½îù½Žº9 üƒR7‡B7:þÐÍá ÝèøB7„B«±BKA¬DO×EH¹ïo®º9Ðñ„nÿ„ ú'±Â'!÷ý=ÛB7:þ A ² ÐÍŽ ts@ø‡B7:þÐÍá ÝèøB7„(àþ}N0tüƒðO ÿDÁ üCÇ?Q0ÿDÁÐñO Â?Q0tüƒðO ÿDÁ üCÇ?Q0ÿDÁÐñO Â?Q0tüƒðO ÿDÁ üCÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿ  ÿðKÝœº9Ôñ…n ÿŒÐÍ¡Ž(tsHø'±z+±Ä Aôt]„t‘ûþϺ9Ôñ…n ÿ„ ú'±Â'!÷ý3*ts¨ãŸd¡ ‹º9Ôñ…n ÿŒÐÍ¡Ž(tsHøg„nuüC¡›CÂ?#àþ}N0tüƒðO ÿDÁ üCÇ?Q0ÿDÁÐñO Â?Q0tüƒðO ÿDÁ üCÇ?Q0ÿDÁÐñO Â?Q0tüƒðO ÿDÁ ü3þaþaþaþaþaþaþaþaþaþaþaþaþaþaþaþaþaþaþaþaþaþaþaþaþÂ?#t]¦ÔX®‡ŽmÇÂ~JuÏ­°SÒÝ­à®/þ",ÞêÑ­ÝêÑ­}ÑÝ#ôª{Þ„„]„êž·a ºçÃ!¬M" ±6 =Ìû9ýŠÚÔÜ•ÚTÝåÚTÝåÚÔÜ•ÚTÝåÚTÝåÚÔÜ•ÚÔÜ•ÚÔÜ…Ú\±¦­©5mM­ikjM[SkÚšZÓÖÔš¶¦Ö´5µ¦­©5mM­ikjM[SkÚšZÓÖÔš¶¦Ö´5µ¦­©5UM­ikjM[SkªšZÓÖÔš¶¦ÖÈM­·ÿ~ýòøößë_×Ýþï¥{ÿïnoáGòVì{qþçB+z׎þÎ[Ñ+uô‡gÆÊ¦VóÄXe™ËÚšÕÛ|.Îj©™‹^^»Í5çVôŽš‘ÞQ£¿é½¤žß’;ôÑ0jw(¶ðÈÞ¡d®÷¿³;”X½C©Õ‰½C‰ÕtbïP²ú ®UzqI»CiDdïPlefþ%ë:™ÜŠÞý!+`î#½£s3ãïcbõñ°ˆç¢Wq3ön'VÈÍekÖ•[M3×sÕº2«Ý‘Üí,bǬÞVe•±šÙúªˆH/ªËg«°"ô>J’‰8"½P"~ÆÜŠW¨R¨R¨P:|{v°j’ZÜ}ÌæâÕ$]ýpâî6T©I¶®‰»P¥&P¥&P¥&P¥&P¥&P¥&PQ«t€SQ“Ô Y5©ZWž îngy5*5©Š¸@•šÔ|FÆŠí: JM JM JM°JM°JM°JM°JM°JM°JMÒÕÙ»Uj‚Uj[™3¯&X¥&˜¨ÉpäÔ«Ô«Ô«Ô«Ô«Ô«Ô¤j]y&X5Á*5Á*5É2Á×W•š`•š`•š`•š`•š`•š˜*5I­€U“*+[eUˆ˜ÖDÍêmÝ\‹©R“š¹è÷ q.úYBœ‹~}H抭è×ÑŠ~d­l•UUD[5—­›k©±¢¯óE+úÖ^´¢/çc«§×¿~=|ýò›,ÔãuDyLP-1.10.4/Data/Netlib/forplan.mps.gz0000644000175200017520000004017510430174061015745 0ustar coincoin‹,K®9forplan.mps¥}ÛrÜ8¬íû®Úÿ ªÙ'•²Kï}qœ›íŽí8qR3ÿÿ§ï"!$…™+Ö²º±€% €ÀÇÕÃÝpýïÓÓóîûêqþßù'õáÿçùé×Ëÿþϰ?íûFÞÿ¸?ái­v¿`<ýb{·}ÒƒzN ;ÒÙ‘ÉŽlvä²#Ÿ…ì(¦GjÌŽ²Ï¢²Ï¢²Ï¢²Ï¢ÒÏb³od³odOßèû0¬Ÿ÷†SƒJŽ`€ìHŸpoOßög>'GéìÈdG6;rÙ‘ÏŽBvÓ#5fGÙgQÙgQÙgQÙgQÙgQÙgQÙgQÙgQÙgÓg¹ß[éóÛýÕbŸß¾¾ü»Nþ]'ÿn’7É¿Ûäßmòï.ùw—ü»OþÝ'ÿ’É¿ÇäßãôïjœþýøóåßUòï*ù÷äûªäûªäûªäûªäûªäûªäûªäûªäûªäûªäûªäûªäûªäûªäûªäûBò}/?¿¼?nßÏJñúò~¡÷ðóæõôï«·»/o—ßÜ=n÷G—ßí¼{ÎQµú¿4ªÎGp=27!ùÝá(ÿÎŽÌé÷»?ãù ÷/‡#•Av¤³#“ÙìÈeG>; ÙQLTöYTöYTöYTöYTöY®šu¿»¹¹I¾ßáHeGéìÈdG6;ºhòó¸W‰‡G•=oӣׇü²#™ìÈfG.=Úes—ýÍ]ö7wÙßÜeswý›Ú§ßa”|‡ýQò©GÓõLHqû£·?J¾ûñ²#™ìȦG»ì¯dWO¾íñèúWlÆŠÍX±+6cÅf¬ØŒ›±tz…ýÑýôWöGÉõ¿{¾þ.>Yzt=sõgk§ŸCòsœ~VãþçÍÓ÷Ÿ‡UÈp]l¨irY¾ÜŽ`œ›NyžV6úÍàÐrQ.¹pph9KÓQ`§S88´œeˆ‹ì¯2úé›-gYò›Œv¿|˜Öz ZÎrôE´ñÓ)ZÎòôE@OßÄsph9+ÐQ6L§pph9+.2NæŠÎR#}‘ñ`‡ëòœCËYªp§S88´œ…‹h=ÂÁ¡å,]¸LæÒZÎ2…‹(;ÂÁ¡å,[•ƒC\Ÿ¨8Ôϲ´Ô+u˜NáàÐrM¼UœNáàÐrVxkÜt þ¬óæô:k¸kž bᦷMpW‚û&x(Ác |rmWM¦S%Ó©&Ó©’éTÍt—äøÕ7´þpk¹dœ§°°û'ß9ü”_¾žÆJ¯éÝ ®¼!à§ítÖèF—œ¬oæO¥{¿ÐAa8ò`ØŸæ,Ìs¡p{øì@Ã5:kž€dá¶wMp_‚‡&x,À'§åàJ•àM¦S%Ó©&Ó)Ât—Nî´~©’ä‹Èšsp[‚»&¸/ÁC<àÉ"‚'+ o2*™N5™NLgUöù+ܦš­±vžh;ÿÃ/õLZÎ_ (çú*ç)<“óôXÎõUÎ 舌ý屡´ ˆ5È1dhø²ÈYd€,2@ ‹ E´G†º5Þƒ§àK#¦Úþ’È€©<^Š `"ê‘®‹ðд× ŒÆðYÏ¢á ܔචîJpß%xl§‹ð ®šL§J¦SM¦S%Ó©šéæ‹ð3|¾7ÜŽáÎ7Ëkµõsø©ßaz0 µ?† _ ‹ EÈ"d‘²È€žÈPûõ¹¥àK#ƒ\„·G¹o hˆ ÓyÏP&: ŸõgªÛ´)2}ÆŠùW4tâ&’ nKp×÷%xh‚Ç<{<-³ÇÓH.tXxÉtªÉtª`º,q³wºÌ¹ qÏз–F¿ÀðÙ=t„8LÝä“ÓHÓ…8ŠŸÑ^ÖI§vð©«ã[Îyu~éîžàHÎÍ”÷yz•ÆG\ß½H7Þz/:‡" _q ‹8EÈ"d²ˆƒöˆS·nôŠä}iÄQ÷"qÀDÈ"޼•åLÄ ââ5Ñ—T{£¬ÚeÕÞ(«öFYµ7ʪ½QVí²jo”U{£¬Ú›ª½X߬U{£¬ÚeÕÞ(«öFYµ7ʪ½QVí²jo”U{£¬ÚeÕÞ¨;œv^í²jo”U{£¬ÚeÕÞ(«öFYµ7ʪ½QVí²jï ~mº„q¼fOG·…­€’Ÿà:‰¥ýÝd§ gñ41:e‰«£Ðñ¬ ®›à†€£Rõ¡ áæpT¶;ž5ÁuÜp¾Ð¯Ù·¸¤e%ð(+GY <ÊJàQV²x”•À£¬e%ð¼&ÀÈÌTa&†‘ ¨Ë0ñ%UJBP€Û’\ïPR…¡$¸í•‹Ã;ªêòFy_À¾´/ ƒ÷÷dðþ¾€ ÞßÂôdðþ¾€ Þßp†/í ¸Â—õ\ál*áð4盕¾€3|i_@ïï Èàý}¼¿/ ƒ÷÷¤ð}¼¿/ ƒ÷÷œáKû®ðe}jÔN;ë 8×ödðþêgï¯~fðþêgï¯~¦ðÕÏ Þ_ýÌàý} |Iõó Ÿ¯¿œ¡Ö_ÇÕ—v>_fí× Éú˦/1q§J¬ÔãšrZp´þR£1 µ×+¼r3¹<5ÆeÞ•p†/íJÈàËâdq ²¸Y\‚,.A—‚®„¾4.¡—š‰K˜…ß,.—PK`âˆÇŸŽ¸„†¸4÷ˬ'â _Ú‘Áû+´¼¿B›Áû+´¼¿B›ÂTh3x…6ƒ÷÷D$ð%Ú3¼ý~9Æ1j ŸÝ/Ǭˆ€m @ÃÓB,(í¦úp’ ½Žxru¥cO®®£!>ü²òòŽïé×â6N£P¼ÏÛ>”O4)ýîÊSðeÕé¼oõƒœáKûA2ø2µ™Ú€Lm@¦6 S© $/U›®UÀ\m¨URǨ P¢’«aÔ(QÉÕÆ1j2µ¡šYÚFm€jyÉÕÆ0jµ±}k›CË`øòµ•­m¬lmcek+[ÛXÙÚÆÊÖ6V¶¶±²µí\Û8ã†kí-¹¶AbeéµrçÄremc kã#¹¶1DÈ,WK®mö_Ñjm£Œ¢L7[ÛXM¯möBâæðåjÓµ¶Qû»„Çðåk+[ÛXÙÚÆÊÖ6V¶¶±²µ•­m¬lmcekÛ¹¶™© ½¶ÉÔÆ1jC®mrµ1ŒÚÐk›Lm£6 SjmƒÔÆ0jC¯m2µ1ŒÚ,]Û<ìíòðH js°»§a‚?o¯ð©˜ÂÁ÷ÿŸÕæuz=NXœu!]à³~ƒdXÛ ~ðV⬠®ËðÃÄk⬠nÊpcɳ2¸-í#ÏÊàŽ‚,ÿú‰x¤Ü t­ÒÃç“toÍa^51ÅôV_œ6‡çƒ"g óûXRvvu<¤ïV…pŒ÷ùø½Cuo?ï¢1]DÅxà¿7ÌM7ŸÅw6Ý|‚]žOvÆgA?†0œç'"Ë{ ž¿<œEòcl˜Ágü€rNð£ÌìÃKø*?‘ƒsª0‹ ‚Ò>}kŽ·FÒòŠ‚çÓMÛ#CwFÆ8ûð—e¦‹€1¡Íòšš?ÙnyÓey´ÅpÖòù<â™Ïjk»Ï›>ŸQÀ™åMÍòŠ…[æV6³¼5X 'f–ßS²¼¢à3µiôyÛçóXmlÉÀ54•2]ƒ]MˆÞb8o`ź¶£f·»¶c\»Á7]ÉŽ5™u÷Ì:i¾Ã‚0|>êþÖh_2¢à3UhôMßç›X|Õ7MÅt ¾Ý?“]j¯œ70°¾¨ÑÑí¾úd—¸ºÄÀš<;+2Kõ™ÁY0|¾ÂíéÑœ4°¢à³àoôàÈxpCðGjttü¬éV]¦³AG çM§Yß\•\p(y†“.¨ÚL·ªšŽ½1­ÉçÀ‚锇1`ø|c[£|ÉtŠ‚ÏºÑëÖ}ºI\½Ö®bºoº ì< ç lXßÜÈ|sCÛŸ±6%;Ô ô|Ûe:0œØåö°±m:…á´ %¯Ãp‰é¶Ô4üvÓÝu™nŒ0œ7e½îNæuw¥üL›écr*ª3çÔh0œÏ©XäQš„£•¤.ÜÆ pÌÏ5ø|óŒýYŽöyefpЏã«ÁðŠ« qtb­wèËuP.áè¼Ï!ÿKÝH püp|„¡˜?9*:7ªcÀVŽ•,§d©8•¤âZˆÓ!D —§éä…/Ü KðHÀ â¼>'Ôq»Å†ˆÓ²ˆÓ Y Õ•°nýÃùT©c lèÀÒ±-° i½ÂÑÒ•€KÕò±n(%1¼B/Tˆk?Û•£Ò.¡×Òá7é¦i‚‡eºiût3OÜœà‹Ó¹êšT\”ÎUI¶±…8½Âp qŽN¬Mºi[à0.ÓMÇè&µl÷~çªÄ±²ë»òðûgJ‹álš8_õÏ,ï鈛Õ4Á=§¥ÃiÝl[©xI_M©R–ÞÐW'Áªdü:°&E´Mð¸L£ˆ ‘$U•äP[ (Ñé€áËG:Ó:Iš«ÁiåJb…á”rÛfùXµ<»VXu•¢ÑÃÙòzƦ[Ñ>?i’m‚‡eš´êÓ$¼ XIª êšæ#cÝÅO°0\ÂÏšŽŒI“\ Æeš´î[¥íÿ.†KøY7ÅϦŸ½.`¸„Ÿ ­Ÿ”Ë×àå*d™á× \› -•d™[ŠG^¡àßVŠGŸqÛÒ‘1)—k‚Çeʵe”«Áò[IÙN%Iê¶Š§ —XþŽöùI“| NKÏPR —øü¤ê§†O}–Ð.±ü'ºþ2©M¨Á%j󉶼j\¡~ªZž½Ü÷Õ[x çË|:êžöùIm| Æejsß·NÒ:bøòrí ^ŒÏ}ü¨`1\ÂÏg:2&M 5¸D“>Ë"㳤ګ†/–?TÊ£Çp‰å¿Ð…³I“b .Ѥ/Lá¬Áò_ª–g+__ûêìV ç‹ÅŠ5ÝWÚç'M 5¸$ÃþUæó_%ez5|ëìp@)Øo2Ë£}~R›XƒKÔæ›Ìç¿Éªüßû,¯Ð3áw™å¿ÓU¥«ÚTªJßejó©*5Xþ{ÉòÙY]UYïÂp¾*‹Ÿ‹< G£*U?Ž#ã Ÿñ3ƒ“šiMÒH“ ‘mEÝYQ÷AÖFñØÅ»‰Æ`¸„÷ÇÂë3P*NðÙ;@÷#‚žÁ á³mo4à‚6ŠGYÅS_@Äp qOtU)„R—†GNݤ×=͉;*§k‹¸'YÄ=5U•v=åZ?Ú 0œ/×zÖÀ;:°&A5-p|Ã;Âi©ÄpZ7‡†ÖNpA¹v'yaM ?ú^tQa¸„¸…—« -°~ÞliTÄ}ŠˆK#?dÄý5H<÷5HX°.!î™®iMŠèZà0.SÄgF©¦fpqϲ‰—¾ ‹Ò›/µ2p`-ÿBGÜ$•¶ î—IåKŸTâ5È‹¬Aâ¥)°^û$@+ —ðóZx¥Úëµð¦T£"¾2ŠØ¯²‰Ÿ} •éÊ,ÿ“.vM’ækpZ¹†’Xa8ùR´Yþ§¬Aâ­¯AB£gö·Z7²¦{£}~Ò$×Ë4é­O“ð*àMV€kŠŒ_}xc†KøùUxIÚ"ãWá=ºFMúÕ·JÓ0\Âϯ¦øùÝ÷þq@9•ß2~~Ó…³I¹B .Q®ß4 ¶1a÷[Ö ñÞ× 1¢¥à{ííZ>—öNGƤ\¾ —)×;£\ –—5Hüé+Ó¥0\bù?…Wx¡Íçÿ”¤g(© †K|þ¬AâoŸåGTþ+³ü_º$6©M¬Á%jó·PklMù+kø·¯Ó\ÿÖÊÀŠ5Ý¿´ÏOjZà0.S›ûÖIõWü+kø·)2þélPÃ%üüSxuÚ"ã™&ý#‹Œd ÿõMè•ÿd–ÿ.‰]5©RûO¦Iÿ1%±Ëÿ'køÐW,6ènð¡V,ÖthŸŸ4)Öà’bä™Ï5HÜt6H ìÌò7…iÐæó72µ¹‘ùü¬AâcŸåG¯1\bùt½¨5{ý±/{ëE«7R¦õº&HFHxÀðŽÒ¶#áè¹(º¡0b@Sp¥ñE ÙëlÎ×ǃ4IœSjöݩ֡cÄU³× ›Ù 3[#ï› áUp.á*¼Ï'Pðü.“òîXÞ¡kŽÁ~Õ®0œj\Rª¥„//ÀÃu…b½£kä«W½Ö õ‘¯Ž¥WÓö"½(¬µŒ^]xO¾1¬u_Xç ` œ…úÀYžwÓ×x#`¸„wSã]±am(ÕNy÷,ï¦ë5ûYX&¬«¯ÙƒlÜ-4Œ»eU¡oÜ­ŠNaxÇËÄ3Þ-—.òŽâÝÊx·…·ÀãÝ2ñÞ@œ•9¡oŒ®Ý?¯y —çjİŽÒ㔸ÀçJq9”BÃÉ7buqNR#…®!¾·zpÃ;^‚G¶(‡"Îˈó…wœ#Î÷Ýa‰¿¼„Ó\ –ÞÐ7£9ŽÃ%ô†½šË@éfJodé ²¸ ’×Ea«±¤£‰=ŒÃ;^éüd‘8äÚQF\,…ßPŠ8 —%e,èŒìpÄ­dÄ­jÄ6âÈ© q0²Ä­d·’¼ c™YAíËìLÄðŽ—!gÄÑã:ÊÄ¡ˆ[ˈ[Ë"n-#n-)Ò@ç¸goГîFFܦFœe#nC)♸†§½MßÓƒáËË—pÂ¥µ¡w¦´õÃ;Þû›ñ³¥ß>+òƒkÛÅÏl¸í[#b~¶²¬ø¶‰Ÿ»ÎR›Õ.áç®ÆcãçŽÒ·öø¹ëŒŸÑaø"~Ž[Åí¦mòv¥mòvåmòvÓ6y»Ò6y»ò6y»i›¼]i›¼]y›¼Ý´MÞ®´MÞ®¼MÞnÚ&oWÚ&oWÜ&o—l“·«'þÕáví1|–ø¿… ® ‡TÎoÕ~FÂCê6Æš@¬Òö!ãÓ°Þ‘»ìeðÔçi85&?Þ·éØìœ™õ~ssÃÜ­wçmògå ¡ÛãæÇ_@1ÞSx²êèÜéêÇ_8”˜ÎàÐÇ»U Ã%¼#Ã÷ÄEKVnóíväî}9<ÔàD!ÖÑmNY §ëym¼ƒŒwñÎiÝì&\0ÃçôBt—›Tžy¼UHx,ìÈ,±w`÷5¸$Þu©ßÆ»&éMyÇŒÒp–^ÓE¯}Äp ½†`1‹KÅÆ%±Aa5¸$¬M©ž×F¯é¢Wg/ɤpDo~–e–ó×:µ à õx½ÝšÌÀ‰¾%éMÂO±ágIÕNà¡—D¯•©¶-‰ó•^Í©¶-9ÁÐÄ»ëâŒö.á˜wžÇ%°qIlΘÁa¬Á%aM•…nÁÕÆ»“ñî ôæ®í™G€yuÁ8¤TñhÏ®T÷ÍÞÀÁSpDo—ÀÆ¥'U;Ç\Ö^¦Úžd1Um–¸ÐAÜíÞ&Þb¸„¸@ð“Å¥f‹Ø˜ò §#ÃéðêSîÎSRü %JfðºnFæáx^•ÍS2;zcÊ=?#Ùÿ²7°Uñ“D†f##’º9Áa¬Á%ET ¼­Kòx¥×pº›ÂoÕEïÒÎü½yf½+‚Å,ü ~+Ù}ß{³ÊÏJÆÏªéidM¦ J5¼Ñ¡e U Ú?¨Hv³,LÁ?Iø6~Ö¤<žàt`a8eC}ƒÏÝyƒOV 'ë&yÜôñÚb¸„Ÿ AC?–Ÿ,~øýA«ñ³)ÑЖ†ÙöX^逼ƒ¬åÜB ûIö¦#G–O"ò‘±•ÝY¶2ËoKÕö ½mâ箃ŸAn—ðsGæµ#=òbw²È¸“åµïdüÜ5ð£:ËéÂðåéë >Ûš…¦×EKÂót–;Ô7JÝÑ¥/B{‡òêó ¹ô}Í™ÙÕ‰w£o¨ÄîÎ¥²÷5U¾¯©©ê-Î…’¨ œu®ÎÚH#†Kœ jÎYz¬ „вëŽÞ5óÍ€ÿ.†S·†Â`e°È;D¥%+­(Yi%Ù̵Ímœ±.q]q›¹CPp”¡¶e3ʽlêu(Ç·ÿ»Nܱ= ŒNÛNðù³jÔ`ÛÜFËÜFKr»ª³d²©;%+ÙLpצ6øVfHçJä‚WCÞ±’[™gµÎ”FŽ·ÝÊLç­ y©ÞÊ€»•™ÚØ.·ñcT.q›¹CPp¤6ÉMŠWKÞ‹¯‹¬ÖYÙMÊJRΪPIj,&pVT\_8Záïp5ïP,?Ž,+%÷"Ëz‡#o9'ç¢ï2Nßr†ú‹'¸D\½¾«¸ÿŠ3øòzà÷mÁïžt‚$zùà÷ä­!¹gVz|éÖ0”î.Y¡zI91/[j„¾ö†KÜ&ÔÜF±ÄR’{¯ ¼5L^üú8ÈîZ¡ð+Ô s›ÐPMIv nk2È6Ußv n÷ŽXó`ù‰dÉ3¹g8Ö;¢ì„ßÀ¸Jo”Ñ›Œ«¾&¯fðåµê Ú‚ß3V¤$÷ >øWä­!¹gð9••ìž±’-W’…dû䦇×3kïëïÀZ~M†u"ú|X¯Im?¹ -çNkûPß}y§jxš[ ®›î雾°¶ˆŸŒÞM^ͪö†¬”'ªíYz72Õæ7o®Æå¦7.sAÝöõ¦Ddù­¤ya‚Ƕ¸Äz¼%éMô˜Ë-)»“Ÿ>ØÊôxK-ÆöÑx·ÞJZ'T±™«ö]‡wœZ—0\âw5ïÐ,?wdX'ªÍ‡õl­}' ë;½mõËO}Á¯LÀp ½ŸjôVµ?‘ÈDµKï'™jó›`Wéý$£÷S½÷}51 _ÞX3m•=¶E/Öö{Ò mç£÷ž”ð“¶7$åïû’òÙNÛ»óNÛKû¦Î;mW×\Ÿ»ºCöŸÞa¸„ÞÏ5z +ΟÉèMÄ™ÞÏ2qþ,‹ÞÏ’¶«d£î¶¸4Úb¸„¸/5â,+»_ÈbY"»‘%î‹Lvù}¾«Ä}‘÷µ«_Î(5ƒ/ïÇšöùVm‡õ+Io¡§bNÜWÙj÷«,â¾JÚ¹8Kï·¾vȈ¾â7½ßjôZVP¿‘q™*—ßd‚úM—ßdô~k¢÷{½ÞÏàz¿×èu¬ì~'ëM“ìržïJž7Ë.¿áy•Þï2z¿7ÑûÐ×øà .i|z(mÒ<¹)å σT5Ô·[ß•¶[W¾°Õ©BÝ;¥iüôb9¢ÅòyˆÇ)gô~ —4c>Èš1šœë±s@‰Á%ÎõXs®ÈÒûH®øT4C}ëé]iO÷Ä7þ»NnŸAo\²7‹ÆpI©ûQÖU÷(kzêœoâ†KÜæ©â6s‡ à莣êÛðîJ;ÊO^‡Ôfÿw1œžS¹Š¸ctÏx¢^¸Ö£jÌ®>ÉÜæIÖ!±ëkÆÔU·“õMíJ»kÔÝÊv´sMrÁ« ½Ñ}r+ó¬ÖíJw¬¡t“ÂðåÓUÎÝ/®’ÀYQùÑ7<Ç£œþ™wü¨xÇœw ŽD%¹ñ¢òƒ¾åLÎYIû!»ý•ÐÈz.4iÇs_Ï¥‰3¸Ä;žkÞ¡X~žÉW’[Žc½ã™¼³œœ‹¾™`8}g)$}CÀpIÏås½/}=—Î —´G½”v)/¿'¯Ž 4®(^è;€/ì!Œ¥çEvkx‘-D_dÝU/²Åk_Ï¥ÕÃ%nóZsÅ÷JªBrÏàUᕾ5\½øeð«ìžñJ¯(¢js›W™Û¼6•ùöõ\:Ô«þSæ?kÞ,??É IrÏð¬wü”=gü,mðÞFïO½?›Œo}½wÞdÍYo¥ýá Áîo´„Æ%Á}kð… ±ô¼Éîo²㛬çòWOSÞyÀp ï¿j¼kù_dX'¢Ï‡õ/ZÛnCË9†ÓÚ>”âÃ%=—¿šîé¿ûÆ~90\BïzUíßd2 QíÀÒû[¦Ú¿KÛ·ÅåoYÏå{gÏ%âý]Övõ^¨ÿ—âéñ;Moh¼Ý¾Ó²ë »`cUx—éñ;9†Ñ·fße][ïMªý§³ç¹ö™wü©y‡fùùC†u¢Ú|Xÿ‘­µÿÈÂúŒÞ?MÁÿ·/øGt‘¿2zÿÖè5¬jÿ%ŸÓÕŽ,½eªý—ÝI½Jï_½›èý·³ç†Kz»þ-4”¢iû¿´„Æ›ò¿´„ûÐVFþ·¯Œ¬íÌt’žË›Ö\ÿôÑk‘ÿ‘ÑûO^Êó?t—À$Î|ôþ#çdÑû¬uï¿>âpCï2âþ«gYÙý|ÔdwÞ¸áÙý¯ÔÅÑFÜ2â>ôõ\Ž~—tm}(ÌB+EŠ÷4½¡ñ~ùA¶Úý ‹¸²®­MôÞtŽ ´3¸„Þ›½–ÔºV]jqÀôÞÈõF—72zošèýØG¯C³>ÊèýX£×±²û‘|¢=ÉnC9ñc_9ÐRãcßz/W?öŒÒ½;rÅ1|yçУ-“ 0fóõž½Ø9ºPØØ)ïµ½ÂÑ˧ʓöØòÜ•öÀ øc‘ðØ48h¿Âœ7ÓŽ½r„0ï›5ûðË›1A6Š“1uvVïdLë1\â› óMr2æè­J³I¸.ù¦e}è$]¤wA9|, '\Pz%iµŸÁéÙU-w, Öz°fk :÷, )¢hϲ îJ^X¯Ó¤×%ЍXEÔ2¯Ó¯S‘UDÝ5Jm¦ˆºC¯rÎx_ÞÖýs9óé›ËéšÁ%^gd^g(çJµX­3ä{m‰×9Öë ´ŠôÎ2ÃpZÒ é(£1\â6¦I“lg7ÌàË7&¸/yGd½ƒ¿™j°šdeÞaï î„X“lIz†’Ú`8íCmwBÑ>pPœÞ™kGÏvoï†KœËÉœ‹œÞ™Jf¥Ç‘ï\&ÎåYçrtz§Uz\§ôèˆá=ÒC|øJ„Õ$ßÙmä-†/oK˜à¡à6¸ò…ÜÆ“n“h’f5ÉËÜÆ÷¹ ^èøž…ÎÜm¼¤i¦© ¬wôíUç,z@ 2ï2¢bXQ 䛾‰wÖ;Tl•Ð)*jf:‰w„&ïèÜ)/ ›²h§¼ KÞ¡Xï ‡¦ÚaXíˆ2ïˆ}Þµ#vjòŽØçć¯ä¢Y·éÛOÙ.q›•ÌmV”w¤¢bYQY‘ƒ·‰¬Û¬d•dîÈöÿƒâþ¹w¬{[2<†//ý^áù%õ`½cMzG"*–•µÌ;Ö²§œµÌ;Ö½•ãÜòû ú`0\ÂûFÆû†¢7UǪ†5<ñ#ËûF¦ ɸèßÕ0·ü¶sJ“¶¾¼æx…碟ò®YÞ·$ïI¼;6Þ·2Þ·²xßÊxí©Å‘¦ùY{*T½“yÇÌ;î('HUÁ³ªpG–OÞÑðq×÷¡æðåm˜Fšv—o´x<´µ+EÛÛqA7eµÞ^áÏÛøþ;Á_?]ᯠi|•ŠNåÒB¤Ÿ[“m|S8ª¿œvi¦¦~MÓ |Æû^yŒ®ò~ßï>~üHó~ø….¨Â~8KÜYÐe`ï]ÄpÞÀ ™ÎSp”¸ÑŽ ”Ž?¿Àç¥Æó(hÊtNÛñb`¥8¸î2Ýh‘é4‘’n÷ºY2¢à(ß웺Ï7“ ¼â›¦bº›CL¶d¼Àyë›ôöt;iß$ß„›Á%6w–í2°m0œØ´Ò€.XQðYð7z°e<¸!øíÅŽ¶ü¬é\—éöw{‹á¼é4ë›®ä‚CÉë0œÞľÍt®j:öÆä{L§\²ùNÕÖ)™Ž„ϺÑë|ŸnW¯„µ«˜®ÁÀ¡ÏÀ#Zw„š ë›Aæ›Ý_¾ê›¡dÇ«o²º»L·kÀpâ)Çh_2ÂpÚ‡’×a¸Ätñb:¿Èt«.Ó¥sD/pÞt–õº•Ìë ùØÓ¼ÂºéVUÓY¾n7Ýþ©5bÓÑ»4ˆ%Ó) —xÝZfºõÅta‘é6]¦ Z+ çMçX¯ÛȼnÃNÍ«šnS2]r–êz„>,Çpö o(î'‘Âñƒ¶ŽCm»Ð î 8ùˆÃpƒUÛ¸’=«¦'pÕù}Fñôæ©oÍ—Á#'"#f èøQ…&íP²xÕù¿×=áËkú!É^²!à„ýñ¥abð¼šxfÏ˪åuÕòÀÁ»žìµ2Á`8ûd?Öt†öyÛ|žîmÖ$Ó§IyæEÉjJ °‘aûR[Î( —ðcéÈ0¶-2,ý„תI–Ñ$~ÛÈ \ÂmŠ×ÇOR¹À%ü8úA{R._ƒK”˱ÄU•Ë•hhI^¨¾ä¤ïÝ^àlÞgˆ¬é<:¶EÝ'Ù¬\žQ®Ë{IÆMõe5@'Ä \bù@û¼±m>JÒ3”ÔÃ%>$ ;Õ—C«†K,éÔɤ6¡—¨Md÷_ªZ>V-ÏÞ V]ÏnÊEƒá|&odM·¢}~R߇q™Ú¬úÖIIWö¾<Óª®>2Ö}™V#†KøYÓ‘al[d¬eš´–EÆZ’¨U=yŸƒå!h —X~C'Ö&MŠ5¸D“6l{`Õò›ªå-ßö¥È-ŠËm-Ï«XÓmiŸŸ4)Ôà´ô %µÁp‰Ïo%öó®Òʼn¨0\bù;Úçmóù;™ÚÜÉ|þN’ ?oøÜnyå,†K,ÿ‰ÎE_ÕÆ\¢6ŸØæÄªå?•,Ÿuß“Æ*‚Æp>¬…îiמD%ÖàQ¹—¹ö½¤€rÞ ¹Ùò£ArþYfùÏ´kÛæÚŸe¢òYæÚŸ›ê/_úŠ{6( —ø ]@ñ….&? b»Ài‰h+ |©.ÂYÓ}í‘]3&/W]à|‚¾8–3…ãÒ•uCmו î 8)à íЭ¥«¯²ÒÕצÒÕ·¾ÒÕÃ%ü|+ôIÂPÛá ƒGNÔÃAÏà„ÂXßX@ù&+]}ïJ è 4†K,ÿNC†0Ôf™_à”jz~ß^o†3[‡T-ÿ]Vºzè+]éΧÞ#kºÚç­kóùºtÕªI}š„KW²ÒÈCSd<ö•FL´.áç±Ðù m‘ñXhNlÔ¤GF“øÝ7.p ?MñóÔ×Ô"`¸„Ÿ':¥ÂP›Ô}K”뉳_U®'Yéj×W@ñ¨è¾«µ,¬évtdLÊå›àq™ríåj°üNVºúÑgy5z —XþG¡/Ú|þGIz†’Ú`¸ÄçÈJWÏ}¥+¾že–¦“•! µ1Ö¸DmžÙ1ÖUË?ËJW/} ú€îÃ/µ½bM÷Bû¼um>ÿB߇[Õæ¥o¤QåëEVºziŠŒ×ÎÒ•V.áçµÐm‘ñ*Ó¤WYd¼ÊJW?;‹º¨œþSfùŸt®3„¡6{ý—hÒOvözÕò?e¥«·ÎÒÕh1œOãkº7Úç­kóù·’ô %µÁp‰Ï¿ÉJW¿:KW¨©î—Ìò¿ ïA@›Ïÿ’©Í/™Ïÿ’•®~÷Y~D-$¿e–ÿMç÷CJ:‚á´¨ µ­.ðÊ”-J½÷¥ê²|¯eî5kºwÚi­ksÚw™\¼Ëœö]V”úÓW”‘Ûü‘YþOáÝŸÆ,ÌŸ¾, vÚ?²šÉß¾r“BŸ¿2Óý¥‹­ñþ·/ÞqÑã¯ÄtÐ7lÄŒ>[¶Cç›R霖 KÃÞñ+:š‚«Òö ª¸½BÇ/òÐ#nœR€áT½µ-'×7¥UC ÷ªˆL2â FÜì  ®J³âU`‰£·–Jº;”Âpf v•8S ó ,åœÅðŽ÷fÄéÒðÚqÈm´Œ8]xM¥1â4qü˜ý |y®¦.,½¦¯J‰¿¢‘Ñkjôj6.MiôôPš6á’¸4’ޏ¾æµ¨T½ƒa"²¼íêøŸgKó_ Ä!×¶2âl)ü†RÄa¸„8+ÉwCçXíFáâ\8ÃFœ+ lJ3š1\qNÒÛ CqXA튑×ù®~öq¾4[µ@Š8/#ÎË"Îˈó’l.ôÛñÚa¸„¸P#βJÓŒ‡R,a8XC©¥××9àúV—J€Þ‰>6 ïhÝžñKãI ü ÀŠ]üÌÖˆ±oˆù‰’ô\ß}ãùéÆk —ð³ªñãØøY•¦·ÅϪ3~F‡á~º¦°èêë®Æä™åé—×Ê–G‘±î²ü,2Ö‘1ÿî’DÓF’X†úÐ"Þò›šå=ëóÙ2kSÊäµÝ­fí’±Á-»ÿYm¬ÁðYBèü´ 6hXµ£àé­{¯­ÖB“c¤ yõ”†jpjœW(¼‘W<Á~¸YäøÂÖrø‚aÕ»dšqïi£ÕŽžfÜÁ;1KiO\´…ù •½#‡!gp´''2ìŽ.ø8e1|¾©çaŸã6ÞAÆ;ÔvÖ;ž¥{èÕÑ{ásÓ ŒmiãŽèMâظ$6çðXƒKÂZ—:´Ûèեͪ†&âLq!ª€áâ ÁO—š ,bôNG†Óá7ÔAï>5ì‡ZÚ?ì ¯ë¦íáBÔÃç4¤»åºÒn¹)ñ“D†f#Ã’º9Á3âH¸$°,µ=¼ÖÀ²‹wrÊálø¹>z5º-:½Ä¸¨<ü ~Nv_ãg]Wùq2~\Ÿü+ú.~ö_^c8AC²c¬/í›Â?Iø6~<)'8XNGÙP¨½ûÔ°ù¦áäÑ7ÉcèãgDŸ1Èø  YüX6~‚,~øyÜÕø ½{Rå>öX^ ÃçN·= ¥mOS8²|–Œ(»³D™åãâ]¡r8ËϪÃ%ü¬²Èpld¬d‘ÁÏ ¯ò³’ñ³jâgÝÎÏí­EO´TŽ/Ûá3–vøLሟ$~?kYü¬eü¬)œ;Áë–ßtYÞŒÊc¸ÄòÂÀYdx626²ÈàçšW-¿‘X^u&ÿŒƒ|yh‚ÏfãQ½C%×Rð¬lq«<Ø¡>/}GÏK?^d 78Üÿ] '"Î{’ˆˆsÙƒ‚’å•,w¨d¹CÕ™;ÔÙv^;%ËNð¢Û(–8 3Œ!´ŒqßÑcÜS¯C©ÇfW§„º0†l¦óŠJ=îŸBáø ykHî‘•#»gIbZMùÍ%‰iÕ•ø<”`¸„w[ãXË[2¬ÑçÃÚ’Ú~rZÎ1œÖö¡>'wž“¿4¯­Š‰Ïü+º¾‚‘VÃ%ôº½šUmG¦GÕö,½N¦Úü˜ýj\ºÞ¸Ì«/# ²¼—d¬'xl‹K¬Çž¤7Ñc>.=)»“ÏÃ%zì©Å˜ ­‹1/É—«b>6ËÐ[® —xG¨y‡fù dX'ªÍ‡u­µƒ,¬ƒŒÞÐü±^Ã%ôƽ†UíH&åÕ,½Q¦ÚüvUz£ŒÞØDïªkÍcP¾¼š2mj0¶E/Öö鉶óÑ»"%ü¤í´jc8-áC}O„ÝyO„¥Å2UL9çŸqÝYÌDñ³–Ñ»®ÑkXq^“Ñ›ˆ3½k™8¯eÑ»–ÔÚTOÆúÈ8 —·©gYÙÝŸDv#KÜF&»üŽ Uâ62â¶}E¸lÆóŽÞ‘¡¹7íÈ Ú" ê–¤7T>â¶²ÕîVq[I /³ôÞuÖÀ½Æp ½w5z-+¨wd\&‚ÊÇåLPïdqy'£÷®‰ÞO}ô0\Bï§½Ž•ÝOd½i’]n~ÿ®´5E³ìò[STéý$£÷S½÷]u`h5u/©O;[@[ôbq¾' g>zïeâ|/‹Þ{Yùs_ëDDéÑÏ2â>׈s¬ì~&ãr’ÝJ\~–ÉîgY\~–÷¥8ƒÂú‹Œ¸/5â<+¨_ÈbÌIPi©ÄpZ7‡ú¥Ýy¿öS2ƒ×ùùÚןa´ÇpI)õki‡ƒ|Qh±ü•¼_ª †ú¦ »Ò¦ Êæ+”ûøJÆe, jD™±¯²þŒ¯²JìWYÆ·¾þ =F —¸Í·šÛ(–¸o¤*¨h†ú¾ »Ò^%“×!9WÑ`89 Úz ‚ᔜGÕæ6ßdnó­©$ð½¯?Ã@Àp‰w|¯y°ü|'ßB‡Q õÙø»Â~*öTB'îÝðøýTªô~—Ñû½éžñÐן’d…܇ÒÞ…à÷äÕ±L÷ >øéM[’{Fd¥çAvÏxõg<Èú3û øÎÌàÞk¼kùG2¬ÑçÃšÞ æä6´œc8­íC}3˜Ýy3˜åýM÷ô§>zÕ¨0\BïS^ͪöÙ‘›¨v`é}’©6¿—L5.Ÿdý»¾þ žrv²í®´ûF!.‘ïhzCãí–ÞŠfÒãyÀb¸Dwä{ú^5ögìdÞ]“jÿè+àT ú!óŽ5ïÐ,??ȰNT›ë²µöYXÿÑû£)øŸûè5Áa¸„Þ罆Uígò9=QíÈÒû,Sm~Ož*½Ï2zŸ›è}é+à{;ƒKêÀ/¥]L Ñ‹´ý…v‚ÐxS¦7þ9i;­ÚNKøPßøgwÞøgyÆKÓšëµ³?iû«ŒÞ×½†çW2zqæ£÷U&ί²è}••ùö§œÁp q?kÄYVv’º“ìr»Yì ÛµË.¿íP•¸Ÿ2âÞ:û3PòâMVá}+mÔRˆ8O^Óï—o²Õî›,âÞdÞ·&zuög¨€ázÕ赬 þ"ãrÔJ\þ’ ê/Y\þ’Ñû«‰Þß}ôj$»¿eôþ®ÑëXÙýM>Ñžd—T §Õu¨oe³;ï¿Ô¾žÁËÕß½£üÿwÕ]Ô Ã%uà÷Ò~9…¸D²ûNÓï—ï2Ù}—Å廬€ÿ§sh( —÷§Fœcõ]á= jCÖöO_ÖGÜYÿO?{qOÐ.áçoÏ*â_ò9°Yÿö)"n°ø+ãço?Ð;CgM_ €ôŒd3€Ù~c‚ç¯<.†¨æý3<ÿŒÊ“}Sø–3ÁCa6rþâÆáca8áC>P)‡ Ù͘*² ²ù œÉíBlGíÈÆd=&£Ý¹È1£·f(MH á¶ä\žu.(í?CK6€áséÙ[Ø´¼üsÚª‹—¨|øJê‘É:Aßü 30|y¥o‚—6(Q#ë6št›D“4«IZæ6ºÏm| §¥§Ím´¤ Åñ¹wtŽß•Âp‰w™wÊ RQ1¬¨²¡7ñŽÀz‡)m±Ó&*¦ST²1e ›N MÓ‰¡s:qÔ.`øòzÓ%ïP¬wC:Rí0¬vX™wØ>ïÀÚa;µyGçŒâÃWÒ;¬ÛôM=Ž£ŸÁ%nãdnCÿHEŲ¢âÈfóÄm"ë6®¤CI.0|ù‹ ›¹ Å™Ë9½^RåÙÌåiÇ´±äÀz‡'½#ËŠŠ—y‡—=åx™wøÞbLÎ{è|ËÙ) —ðd¼ŠÞT« |¹dâF–÷ S… y+ú'Iç¼wN’(§"š$=mä¦J¼k–wr¨HïŽ÷(ã=Êâ=Êxͱ†âL’ü¬Î9Ö}Å•Ì;V2ïXQNª‚gUaEΛ:yGÃĪï BÍáËkD0Í$YòRtÎÇöÞ8 _žÊžöÀƒï†å}Mòž¨‚gUaÝÇ;~6X÷=`Þ×’L8L³NXzû†pï/2ƒKèÝÈèÝP,¦aذޣ†šÃzÓÖû…Nœ™NBï¦F¯ §B‡ Ããâé½¹GnzD3áy{…?o[àûÿÏ~݃^´žàûgðó/R¯»¹Ü×NpÐäY\—áÚgepS†Kž•Á-?˜îõÓÕtÔwŸ¿¸±÷YÀðcü(´Š¦÷?ôûPp¼Qå±+hîÚ:N·Û |^c= ? •k´aÿ¿Ã—ÔtŽŠñôüÂí`yŸv°T¥½C#‡>Ë'oö_à¬åQ®SOCžR8ÊEïÏ¢-ŸÌÖ¿Àg¢¢‚;>úÑ6Åðʶ«ªbºÓ†Ä,?\\ÎN¹€áGòM(¹¶& Í®­;][¹üD$Åesܰ£Áµõ…(m¥ÎÂM—åmÐÃyË+ÖµéDz³kƵÉm|fW—XÞT-ÏF†en&óǼÁðYQ÷+-¼‹}ÞÒ¢Òêó–ñùÓÙ‹éô"Ó¹>ÓY0œ7°NëJ¾9”ÜÙöÚªé\ÕtÀÁ=³™›n1|Võ;¾NV0"á0.ó:ß§´ÄÕ+·2S1]ƒCŸ“& œ7°f}3È|“L.Óæ›¡dÇ«ojÉepáÉÑy"†ÏŠG‡>—X0šÁiJ^‡áÓÅ‹éì"Ó­ºLçìôR÷Λΰ^·’y¿©[Õt«ªéذ^÷˜ÎF¥†Ï‹ÛL‡¼n-óºµÌtë‹éÜ"ÓmÚMw|¤3ÃyÓYÖë62¯#çÇ&«µ™nS5åàÛ¯Ó£†›ÑÓ!¯Ûʼn+3Ýöb:¿Ètw}¦K6A¹ÀyÓ9Öëîd^GOGU¾Ñtw%Ó%‰¦Ý”%Û•²d»r–l7eÉv¥,Ù®œ%ÛMY²])K¶3¥4×.Isí’-NïM‡á³dËá-Šk_j(C³Íu²/ív ÊRð4K–ÃC N GrHåcÖ'8K«Vý.ðSX•ª½¥nÕÞýÊ]¼ƒEÄŒw ècÈÖ¡9qäf~ ƼYTò²Ã>ß?fÔ ûÇ\àÞaq9ðçÔfÞbòy*÷wØvõRË»ÞïcQp5––çHæðXƒKâ]—Œm¼Ó»ü¥¼—ªü9œ¥×tÐ{k¬w Ã%ôŠÅ4¬å‡ÊO^àµüäŽÌO^ËÖò“'xÏÛI£ï^çÇ2wëymcôZa8ñn‰öŽ|·dÜóKÁS~òøáù!²˜¼"»V~V&»vñ«C9¼ôêÐñ,×G¯3¸„^G±˜†Ÿfùq²Û¢[<Èà—ðãšV=ž\[b52°'ßÂÐ#ýÆhÓ²êOùÉÃç‡Hç^át`a8e éÜÝ9»è=ˆ+¼.¡•ÖÇvt:·ƒŸ@ÑÆaù ²øá³ÁÕø ‹Çá±ÇòJ‡à1œx•4Я$ï„§ðÔòydð–²;K”Y~ù–r9œågÕÇ÷Ã%ü{Â¥‘aY~V²Èà3ÖU~V2~VMü¬»øõNÐÊ‘M÷c2p0…§üäñÃó³–ÅÏZÆÏòMÝŽðMŸå†K,¿¡ œF†c-¿‘EŸU¯Z~#³ü¶Ýò·£S^i 'Þ'‰Æ-å£q@ÁSËç>Ï[~+óù­ÌòË·UËá,?w‘qdHa¸„r_´42<ËÏ,2øÌ•Ÿ;?Õ}Ñ,\š{-,hîµpiîÝÃû›{-\š{÷pº¹÷ø‹BÙâ?•-fgep]†ŸÊ³³2¸)ÃOͽ³³2x¡¹wÿt5]C‹é¡]O¾y-¦pš{Í4.…£æ^…¾u˜^ŹÀ‰Jûë: §‡Ø+|Ysï¾°¹÷‡Ë»Ñiƒá¬åQï©ñ‚£>~9ýýçTÌ÷‚éÑÆëã8þÆú9OØ °_aÜbøñ,˜žj ü8ý3ýÅìê{ÿÞ¼feeu„ãtÑ -ÇÏÔ§³N¿07!¯€‚΂ü¬éº næð?û¯;&ß œ!>üþ¬u6Ýá±®Æ|ÏñêñþîBóã=mh&ÆÃÙë§ŸÛÃÙ?wÃúq{s:{{·}Òƒº˜ïà'ëgÁõ,`ÎÒ׳¼-ŸešÎ²×³b(ŸåšÎòMg…¦³bËYjl:K5Mg馳LÓY-¶·“稲OìÏ:^<ýW8ëú•¶å¿Mëj e|ùoéùßúô;9kutöTÏñ9;ksÈĹxà³î·«×ÕÿþÏÿ1 ¬æoDyLP-1.10.4/Data/Netlib/pilot4.mps.gz0000644000175200017520000011466210430174061015522 0ustar coincoin‹|K®9pilot4.mps¥ý[r¹®-Œ¾ïˆÝu@$x”mYS»Ê–~—UªÓÿŽ 3I‚˜’¬ëÁ«¾/¸Þý¸¿iÿ{~üûé·ÿ¿ÿç×Óë?ÿ÷ÿÜü¼¹yúòÿðßÜÜ}Ʋû·ÃãŸùöõéïý›ýß¿žÚ¿==·?ÜýÓþ}ÿ÷}ý÷—_?Ù¿¿²óo¾·?ÿýÒþýûïŽýç¹}óëǯuÌ/¿þû]ÿû_Oß~Õyzlc{úç×—öïßýß_ž~µ1ÿõÀ°ÿ|ïÿ>¿AZOÿž´ðßÿvºOßžÛú<°ÿüõÐÆð×߯¿Ø¿û¯s¡ßÿìß|ÿÒÿýë¹ÿûþëöïWöï¯ÿýûûï}Mþ¹ïß|ïtŸØ¿Ø¿¿>üÍþý¿öïÿýÿ¾õïïüu÷ÐÇöãçCÇþèóû·¾ÎÏl.ÿ|íßÿ¸ïûøûþ¿¾V/}ŽßïØº}ïØßw¯ýß¿ú8¿?þì´þýʾékòã®ÿ÷¯Oíûo¸yÿaüÿ…ñÿÆÿ_*ÿ?à¿ëúпëúпëúпëúпëúпëúìØs}èßu}èßu}ö¿s×ÿf]Ÿýûs}öŸë³®ÏNë\Ÿã›>þº>û˜ûú|yìûûåþ¿g†ýReäo¶/ÏO§\àýõWãÏû‡§Û¿¿öý½ÿýí¾ë\`ú˜þ¦€é`ú˜þ¦€é`ú˜þ¦€é`ú˜þ¦€é`ú˜þ¦€é`ú˜þ¦€é`ú˜þ9¿ÿ›ø˜.¦‹€é"`º˜.¦‹€é"`º˜.¦‹€é"`º˜.¦‹€é"`º˜.¦‹€é"`º˜.¦‹€é"`º˜.¦‹€é"`º˜.¦‹€é"`º˜.¦‹€é"`º˜.¦‹€é"`º˜.¦‹€é"`º˜.¦‹€é"`º˜.¦‹€é"`º˜.¦‹€é"`º˜.¦‹€é"`º˜.¦‹€é"`º˜.¦‹€é"`ºèü;/?žšÌîz ˜^rL/9¦—ÓKŽé%Çô’czÉ1½ä˜^rL/9¦—ÓKŽé%Çô’czÉ1½ä˜^rL/9¦—ÓKŽé%Çô’czÉ1½ä˜^rL/9¦—ÓKŽé%Çô’czÉ1½ä˜^rL/9¦—ÓKŽé%Çô’czÉ1½ä˜^rL/9¦—ÓKŽé%Çô’czÉ1½ä˜^rL/9¦—ÓKŽé%Çô’czÉ1½ä˜^rL/9¦—ÓKŽé%Çô’czÉ1½ä˜^rL/9¦—ÓKŽé%Çô’czÉ1½ä˜^rL/9¦—ÓKŽé%Çô’czÉ1½ä˜^rL/9¦—ÓKŽé%Çô’czÉ1½ä˜^rL/9¦—ÓKŽé%Çô’czÉ1½ä˜^rL/ñxÍ3½ä™^òL/y¦—<ÓKžé%Ïô’gzÉ3½ä™^òL/y¦—<ÓKžé%Ïô’gzÉ3½ä™^òL/y¦—<ÓKžé%Ïô’gzÉ3½ä™^òL/y¦—<ÓKžé%Ïô’gzÉ3½ä™^òL/y¦—<ÓKžé%Ïô’gzÉ3½ä™^òL/y¦—<ÓKžé%Ïô’gzÉ3½ä™^òL/y¦—<ÓKžé%Ïô’gzÉ3½ä™^òL/y¦—<ÓKžé%Ïô’gzÉ3½ä™^òL/y¦—<ÓKžé%Ïô’gzÉ3½ä™^òL/y¦—<ÓKžé%Ïô’gzÉ3½ä™^òL/y¦—<ÓKžé%Ïô’gzÉ3½ä™^òL/y¦—<ÓKžé%ÏôÒùwîٺݳu»gëvÏÖíž­Û=[·{¶n÷lÝîٺݳu»gëvÏÖíž­Û=[·{¶n÷lÝîÙºÝ×u«úÿ,õòã'eÒ(·ö÷닱ô¯#íuÃÿwk·›š~¸ÙÊ ?2b'Ì–c ÙßÔÔ׉k?Ìð#ÁTÿ,DÙ<ýÏÝÔ„Ú<÷~„ºóB¼5÷Ÿ¿ìñÛ<ÅÛÍHÓ¬nnËf ø"à|{évƒPÂMÍr²uÃuqn†¹Áq÷•?õyKÞü×ᇼA´3|¼Ý|(¾1ø¸ec}‰3üOï>²òÇÆ¥âfø‘^îÜa-hƒÏ[̆Þ}fð{Z—þõ«ý«v‘Ù³8l~†ÿ%á'õ=Y³ ¾'ÿ\`|ËêRš™–Æ#˜’gø_í_4jƒÛ†ÿsõè»vü0Ã/årωß(Œz%Ù ¿/œµΙÀ–Í â)0k›sßÌ6Ãÿjÿš÷gO”-ögOâïû³§–Ö†ojΙoý0Ãÿjÿ¼I鸷¨O |R?¿z]‘>³Qã ý0Ãÿz]ñõbŒ¯«1ÔϯöC}Œ{*^ãóyѸ¤0ÿHø9Æö ÿa† ÏÅLöÃuŒ·[ð妞)Œð-Îp9ÆþWûDcûíHÄ.Ƹ{­ EãMcƒÿÕþ5¯ãžú}‹ºØk¾ûáÕµN÷zÔ ®k¾›z<Ö‡ƒÅÿ›áGâºÓ¾zz{Œã.Žc|z{ŒOÓÑ,0Ä:#ÿêáí1îgY‹1>¼=Ƈ‹1¶ßŽDÿbŒû!äÇö:l%Ç~±×¯åºþv@,¸v?ÝÇ8.×¥îÉgø ¯º§~¢ŽñmŒÿ[Žq?´ýs? Áÿjÿâ¢QXIC]òý0ùÏÇØàµctûÿêlŒÇ3ürŒOßO7ü(PܷѰÙ4o¡ÁªN¹kÑïðQ".r"° b]ÜúLÜG‰ω¸‘·T¿ªAü­º¥ÇQïèÒû¶õOËå:áGE÷;ŒëJ¸‚ŽZá+ãHú‚ÑoqAÀ÷c[þQ´ÉÕ¿;üBî&Àtðö«ÎÀX%|”H1œHX)¦IÖÓ÷øA"Ö L—DÂÖmVú(˜>-‰¤ÆôÏOç_{WüM-ZhÑj”9³ÝôÕÝÕW êÞÍpE4J¨Ëõ» å÷ÅP~·¡üþ“¡ü^ņJÄ Dœ$âCÞ1ÍÌ5øð':ñ¡î‰\®þpµ¥U­¼Š~˜¢—Ôƒñ[×1|”Hˆ„ÅtY~¨jåýDâ@$*3qyËö›î¥¦I‘´š‰÷l&ù£Dò@$+3ñiÎvÏç_xXª¾‡ Õ÷ð¼„7'w 7Û2A ®8¹è+*'þQ¾t±EƒÃŸžWjYL‹¨¶‡¥«Á“ «Ág7ÃÅàoé«ÅàsO_>,ƒâ6Æ—aÈ\LßÅ—6L-Óоj‘é5™r~Õ&óEÝ“ó«æ±Qú㫟-s7çðÚþ%{ú䶤ôœ[çðû øw-A<¿/á-»(óŒ¾×.à-í(òÿ ¾—.à-9)Ó”¾W,.ø¦+ )tÈaKÆçýH†ç­û3ü(¿VT×Qwyµ,á¿z[ù ”1¦lÐY/Gš1·¡jÏ&Íðw±ÿÝÎÇ(‰89FlÙ<ÆqŒ6¡ã›CÉÑÍðwŒñ–ýÝÞÇx«ñrŒ€Fbï#”i]t‰’àÕÏëð÷Œ‘ýÝÎ×Q rŒ0±¦¸y¯­-èGZoúÃÆÈþî çë(‰D9Æè-l>gÈv#¤ìÝVè—þž1²¿;ÃÙ‘Ç+{p9 ·ÏG@¦“jxñxe($7„—”Ïu|¼² ï€_™ Ï%—p#Oø•ÍQ¨[Fû„ßÛºbº)½©uôõœ”ŽÞVÁ÷ û täbìþÃ^&ÊÓÊ#ü\pÝDÏÔÙ"„ä³€3"óßÛº-_–Ç%œH2›3%¹,à}Š·€C  ”·©×]ý²L˜Ôãæq… ø°À¾l)‚‹õ™;îmeŠ/Ë4#›*Tô9ÖŠÃÙ'ú¯qÎxfæ7ï²ÛUíHB<ÛŽÜ:|Üúª Æ‡Æ·[ñÉ{ ÿúã¹×YøÍÙ””èq£¤ó¦O®¤(àû]“žXOÅäsåéâI?ÅŽÙÇ,æ~\I©_Ec î¦ÞI©8‡VåÁàŒ ¨!{È>Oû~ ÑŽ„ï—Z*q ÷÷¬ÝqÃ¥N½l S­tàs¿ë_y»™M:;‡*\(bå«-<BýªJö7 @9S¹Eœá’;ÀD‚E?$o²€sî°~#ÎŒûŸùY6“! øÀC¶7Ø<± mú Ùç<„D\@ëå'îØËhJ¿—pÆ{–ÞG[fî@ã\)^νsZ³%›Ã¡;î@£š Is‡£:˜äLÜqëPâP#€ îëª3÷_ÛÔéœxËÖáwRsíìá|4_»† ÖkÜAHAÀ¹†¹E'ä4³ *}Œ SÕ® ¾ßeãѸw©ÌÌ…ZÁF[$àsÁ(ÌÌuœ¦,ásÙàí±t\'í¬Lcm6w΂~+ÎFÈ’ë‚Û‚ u΂v‹(}GŠ…ë$b.4—ÁɹsDµ¼³§â´‚¥,¬²q7I·;¢2k.’w4í´£Ão\¡ª猹 »9´~ÉêšË7ÝÞ;Á›&'¯ª4$%üÇøúíÇOšË‡\¬¤>((<ЍM Û Ëûšˆáðïƒíµ(}¹HîÀø—E,Ýè¶-pJ0q)>ç³^Àî@ß(ÅrxÃöfô x˜ár{C;Uø¯íÝt‹ ŒÒ»ËÏÝÃ/¾t!Å0ÃgÇCüøÆ¡`%29NÀ¹î ]Œ(äNèÜ8C¡‘€sݱ‹‰ Ù)û "s øÄ¡ D¡;hZ®Ô°Œþnâàœ}J—)ÖËÁs×—j[ º°ÒÛÍ›GËdåÊs ƒÖù×î5ŽŒmð¿§Í¥B}Ô0¨výéoŽJ%à†€œ;gÁ€¬²Í qz\Mk·‚å±t™ç¿yér[np^×»€?/áVaÙà­(ôCå¡ ®—HpV")àV~ØÿGõƒ þg¥} >–Í-«î–s*Úô¹ËR·ÿ³Zµ>ø¡Lü÷5×%Z:õ øX=¥]ÀǦEÍÑßp^s´,YZÁÕDΫ‰ÄÜõBŸaî¬Ðg†7ö7e{I0ýOwNÐzÍð¹€uZ8ô¼¾0(—~’=\6¬XÐGDŸ?'Ÿ¼s œ½sn;FžVÂï< s@„~äwcdÅÒÍ– éáÂŒÞ9ZH›³\º!}€*Ææ{nWxç%Äf Ùà™…Ý#´ðÒÂ’çZ™§Î,,eÒ“sGdÏÝvOw|ýufaù | ÇÌo£"PæþkŒÝ"ÆYXX §#šwÉ6Sö!¢÷åíÒ<·$¡OšTž&ô¿ºÀ¥þÜ·KÉ@÷"ÏpáÃ[=ðtÎ'—Ñ­ aâù²û6±•Q2øž¦-bˆd²`mÜŸà{`Óጵ)¹<†~N†AÞÐᯀ¬ è„#we‘ £l!øâ|à`d‚àH I߈\“B’ð!ð¤Ü ¦ɰˆáš7QÂ9{šbFÑœ™%RP6nHŠdd.J‘ .еbé„臡²ãŠiÛnÿ5Ä„—L›zÔÜ@cºýPúFH¡ä³wøT*½[ƒ¨ëùhÄàǰ gŒêö EÎó³ã®•–êaƒïsOÈó(”.”IÏSŽ ]h"ÓáL2ö4±‹1Ë41jD X’\º!MLW¯ÀÄ0 ås4ÙÊÁ’a·”Ê™")gÀZ+©³d2„âÑ#Ý1DRª–œz¢ödz#Ó£¶H³ÈYW@΋L6›Á'#)”™âR’ƒçJ¿à åâ‹ÐóEÑ9+Ùæq §Q¦ýFŽL0¢o’U‘Y V㜿†hüR°ljéŽÒ’Ôº5Àh±¥z:\ʯ‹Ì-Úà ×-ÕãxŸ2":U"ù7ª•òÎæž*ÔlPü¤Œ>LNbéc‚’–¾‘"ßÇULs5:|0&d‹ìÏ~R¦“v9øÑOÔÙfΰïÙkôO­ü ?iKÈØ0g"(? ÅÇzÛ’S3†.vØYd‰LL ÷}ÊDT\‡ƒ;ˆ t ¢¤>Èš[O5”“ÈÜZt¯m°IÀ¥ü³lm£"Óxâ¯! y%2Ö™z¬ÚáRd‚;|ÄYd¬µÂÁ5“ã¥0¸-§Üœˆç’Îu’+"h@'e‘p>÷Dçk¨Š0&v‹.D >äèÕq²§wÎ éÓh@™d܆HˆwN1&tœ—êܘPdB dᥠµiQ?HÆžÿ2V$þér©-èZ øääyÏ'ŠL YB¶qOÃ-èD‡–Aõ¬lJYeÚk·½ûký–¬}x@-3Ü@’µãy®#(|u¸dí\fÖ&¦…”m㎂cÔˆh ŽÌðœq¶´A>(}çPŸÇÃ?f‹‚ãÙ`Ì-©~ÅÖ&ïî¨ç#é:ßböü$ZÛÙýîÕ¬ç¹ýYRÿ>x’]‚#6à¬vß³3W‡‡î™TÏ™Öæ§»§”’d›‘µ)°Ac`•ÐÝëV ÆÏB ›pЍyÄy+ZØ’1lŽ>Ç&fd;õ˜Þ› *Ï/£æº© 6ýR2‹ž*Hæ“p)¬5{WuM2bž%#„Í¢-ðQÀw(¡n· •þY²l%õé`õD¯šØ å“:œ-]¢íE‡$DÅBš\vø ××Ùh5¥ï‘ïäॅ«ÇµƒÒGïŸeÚ‚<‹LJä+#æ>eZѦ›l‚™²¡¸õè¶ÃÇL«ÝJLGø3gZ1¶hæ¶ÃÙʇ7OYfí,7%$¹t“üø pÆ/ܘ]gNÞKê<ÓJê$‘iÅ•/ÄÙ õÇ¡·HÁð#ŠL+Ú"J eîS¦ÕÒ•³LJ}{¹qƒüàq×ÁšDÆcåà…ü ÞÛyþh$»™¶+ ûsiLPÒ —"“¢ ªÈ \)âIä© PDÛ˜¶Ãç ]¼ì”zD[r³€’‘¨üùÌqÆ$SéƒQàCá(fWª;¨ · ¶‰ÎV>Q²Ò¥¸÷g…áfeé&cb]ô^“€ÖY+©’ÉG<ËÚ&aÀP>·óûŸ$ÒѰR¨b4'eð\2"Zk{–åÌé(Zx1x…çËþ “W‰¦º¬ |m&|Ë#6äyälç=¸$àŠ™0BÏG³¡o>G•Â|ì°'AÑ»bîSpl©®,ÊbÊ”‘ob«Víp#Û8 Éãá´Ÿ†dÔùÊ—¶ˆÞ£¨ÔÍy‹è8…:×óv¦päPn¦›TK-©óL+.0ñ>dŠ<†k”—Ô‡L‘Gc‡È %¼È´É÷ó¢Ÿü¤ý,2)AƒE·Û øÄóBp•›—AÃ÷vÔöý½Gm&´ãÀRx>g=¹êº}ïp%¹ZD™×îôS‡=Ÿõ|>ûðÍ%¢Ž’«VÀ'‘ Þd™ÅéÁ5¶éðép¤tô"a"ƒ¾ ª`ô;úIÝ÷µÌ‹Ê,O¿nŠ&Ð!¶ÊÊA·§Òmëçäj ©Ûrî“k„’MRÏ#J/eÔ¹È`l­¢¸=¼ÓåI}º 2­ ó!4UŸ¡cæ¬\ºÙ SZ¤kDU q‰¹Ë ý€R…aMÔûk¨²|CdºSZAÓ½š£ò¢h²ä0N–ps_Y×vàÓá“`åDr­‡))ƒtR¢S3Á8ÈÝ6‚,vø¦ºÁ•ܬ!¸üs`8L[”SïLÓ²>ŸZ8Œ”³,¨E]èèp¶ï8éÍ9:QP²®6Qö@À‡êZtÊiÊ,2h"-àÊÊ3‘!3P¨Ák>C¹qOÃi¢Á!ÇÄK²h¥uéYE»ŸÏL¬D¦®Ë_\©¼!2¦%.HIM¥åžÔÉHǾOÂP,ôB«Ÿ% ´K¢˜8¡gem …:| Àƒ­ð)Çð½»>Iz î8žð0‚m ’Ÿ$ƒü*õ"BÀ¿k”Á©]ÊLÙ¤\’¡J‹"—n¸BEy5›Š(&.©P¹P’ð¡j˜2Æ~.&6{2¸õÙåÔÇÔ.ìÙz!2Zê#+àƒ•AgóY19fXÇ àBdpöÔÇñË*©3þkHk_‹L<Ã5+s„ÓË=ñ.ËfW[pžÙ¢`1‚7ÒÊ>W÷çûà¹`9ºo®›“ÁAðÉÊdÔó©(eƒÎÛ^ÒáSf+¢÷u¤}¦ÂüP‡:Ÿ M÷#¦d]Qï'þúXåsŠÑj²Ñ*ƒ*°pé0WÝ6h÷%õ¡œã0Œ²SVdÉ’×"¹nÊl!ËçCYqóƒ¡Pð(Œ’ú\ChP×éÉ`°Ùª"³<@¬û‹Mñ­(?7­Ð@J9IŽz” €€+^š "³åÈ2-9ÔáÂK£ËÛâüÄÒ回mïð¡ ý$—¢b‹Üæ1 béf[„rhš¨^@RŸlÏkÏŽY°¦] cƒå'fŽ<:ODC~]rrã†rØè>¹å$to)Ût£þ8\¬TùaNƒ!K°=5Ũsù Ôò(÷=§£u4g¹]•íðá˜UZ Y*É`Œƒ’+/ä'ç#Þ:^[ºo÷Í}»¯È˜žŠ® Ed¬ÕE êšÉ9ç!›k¨ÁAkÏàsÌQþ>å‘›Q¡fSLp~hž=jD!)õ )ûåܧCsÔA R‘C#’:cíBe·tßMÄï{ļœûphîÈÑ9Ïö†l®Ý¼…~‡¶Ã‡Có}îÑÍÖ òÞ|bÎã½r4ˆî¤d¢,.¤+„š Óák£ªÃ€Vµ±Ò‘i—ù¯»véêîÝÖÀö4ÊÝÒ¸E¥™²(à ksf Ub[¡Ÿj½Æ$%³µ€Oé.wXƒI2P0B );|Js¡m|~]QˆA¬ü\v© O’Q¶”b1rå¹d$:瀤Ÿ”Ñ N™ûthîлw 2[¨çQÍ·Z˜Ÿ$ƒ®¦Ïî¹1A¦ÁE‘ƒï\‡1߆!8­œ]{hÑx‡O~RF¶;¸²Ð*CI*Ï/ëÙëþª¹ÞˆÙÛqFÉKñ¼.¯'ù¦ø:\JÆY?9Uªû¾;wøp= mz1g®f°t‡£¸ æ.Ü!Ô®nÎSÝF "šú“ÉÈÔõ!)K×%U;ÅìÅ)é~K1õcëç’‘­Ûãôs°ÔyÀææbvøPN‚S\b­yxð^®ü(Ö&ÅùGÁÈC~oäÒM’Q0Âõ°+‚Êó ÉÀŸN¾}úòÿnx傱¨ebàÈl×>~¼@Ìï R3Í›úÔóšÛ(¨)‚ö ¥£ þç 28è]uåæEÍtr,àSàc*gSœ¡†0"ߨšâÔï†êgô½t:©[Ž€OgØ.ŠÀÈ´¸è”%ó)YI5]AÖFÍ sK ò$ÁÖà‹SgºÝSë¶óšÁ‡ß¹®7`p®Û©õ¯Ï‡`OOó}w­šþk㉙;ÚmS™Ñ‰¾Æ/>÷ºBŒ^mõƒž`­\½{þúUgÚ[ pSߤïºÖîŽ8¯ßË^0>d½·õêap[{¿èöªÄ1øçEO}¹ÃÕ˜Ü, .TNž»Y™N˩ǂtpI½€ËÄ€WÒQ%.ȹO±u² (å$¸n&˹Ïé¨ÒzÁÜ=E‹¥tpêÃÑÚ‹­Þ/I4¥5ñað!¶Þ{õ˜"{ì.¦IÉe@/-aôrÞìb¢© ã¢$Ï õÛ°aî¡…Š€ Ýsk¥Éà£:ßK3wdØCO‰»«mPdz²½Ã”wJ !ºÍª—Æàséi¨±âò ÄZ3Ìà\ÓâÈ„xôæJ*è?Ô>¶’¡«œ6gÅ=tÚkäÈ©^tF:ΗonhKŽKêm{q†§ÁlÓwô•ô–åäÊ÷íu>l%ã40ºsŸûŸ7M{ÿõ9¬öý¿GõRÜ ¨/ZåwøßÃÊN-›Õzþ±îìoéDÚû5îA#c[ÏÕ’—G~‰üÛÔ_ç4¤rîmŠì¢îχwQôÑêø£zËøL…#AE]½¬zIÝxh•Rú…Í=Y‰¼E]½ÑwMR©ñ‘_K©£XåôuýrÔ%õèÚyÞ£z¿è˜»/GºãŠ:»„ñõáÔQU'\çl|“ºZäÿÆÊçR3¸j™ýù÷oQW+¡¯©[ô@„OÔ#†_ñ-êjQé5õ\J=×yT«Bë–·ç®—÷]¯< ²ðiîÖ¦ó’òå¾×z\¯¼3õnÈ#¯UšæžÏâƒË}תFFêï‚ÿ­ÂëWì¤ûÛljôs·á¬ù½pv,ôï×?˜â¯{ÕÕÀmÈ ª7}÷-MÌá¿î?N%ÙÝ÷ŒVèþ¨fòÞO%[f°ç]W¡ëè~†€7.ßGýÞV;.ŠÁ,úi^ݶ+.lQ‰Gl “›N½Úñ9ø¢TeNõ˜MoÞÜàÒ °GÌKêÕŽÏ-‹¥ ²Xr¿²s.,¡qþí¹W;>'è‹A5ëúÊ7¸°åxÏöšzµãs—ÊL-èUê¡g|¦î‹=Î .©W;>‡½Ô0YEUýè\È%úiåm®;íø|ÏúIé¹\xµÛÇ%õjÇç’Ùè+o1ä±>ï»ñǹÁ%õjÇçÈW>€:÷D 4<Ÿó‘ȸæùÓŽÏç÷9yïô•‡– `ðÙPS´wìû÷ªmƦ©…Ìøbå›çËàR×¹ø6õú·/ >)y ?‰*öý=ðjÖûþx5ëŠ}ßàïImëUûNW†„O×èèÉ;öý´ËŠ{}ÿK=’RðѾßœi”k+sÚeI½«S‡IÀûNŠ:ÕWÔásö>jß)eÛð9ûµïT±œë)Ø=|ξÃGíû´[Ñ÷ð9ûµïÛÞ”¦-Ýçì;|Ô¾o!¢™¨&>gßá£ö}óɺzîŒló)ûµï[Ú_S©ðÏÙwø¨}ßeßáÃöê÷›¢†kûÞ¾º4ãm!.­u“K£Ü)~ÆöÂGm/¥ñKjìü9Û µ½Ô0Ã…®Â?e{álïÖ_ðú\/ñ—Ïõù\/ñ—Ïõù\/ñ—Ïõù\/ñ—Ïõù\/ñ—Ïõù\/ñ—Ïõù\/ñ—Ïõù\/ñ—Ïõù\/ñ—ÏõYôçð¡áò¬.ô†Ëƒºà­oç¥Ó[ßK÷c½q‹ŸƒºàÍ'ø¢Ù!‡?_¨‹EC9ºnÍK§wÝ–Ž·&šà‹ÖD>´i™Í„Þ¦e0/keµèx1¬üÝ…•Ñ› sÿ¾^ºÅEêaîüRé ×/•ð_k‰[\°æþøsÍ6ú5¢mþýz1xõJÅ8øµ¢^”­+·¦¾¨íöi9÷×æÑ ïS×`—íÞqŒ¿SL Ë0üh;œ×Wì] 3õE£~»çׂ)-²½ò¬n—ž•ßü¹ ~è·Q£ r‰Çç“éñ%Œ¾² ‡^‚s,û›«Ã#Ëûuo Ìðqîô#ÍÚÆ¹ûã¶CœáŠ[x»t ÛÜ›38V¶Pê Ý_lÑÄëèU®ˆ4—q&‚ÑžÛãÅ«ìDFßsE¤9–ófùŽË¹Ã+ÖtÑÊ9\JÎ6+G{E ëšîYÜŸZ ÐáÃ.zO×厸hØEg7CÅ~y†+þñíÒ?nso^ñ°Àt§»Ðû—ºãÜxt¯—»X_Á*ÖE6Š{ÍvqpÂWD^—DL°û;ŠÞ‰Œ®úŠHóÃÇå¢ÿÌÑ‹LqÕ;‘Ñ¡_îÉýw}&ô.Å~EqèÙž nÿŠHóéÇ™Xj·nöëBŠÛ߉ŒÁÁr¹¾k •pqñ¬zä¼mã–Pbjöïõ*„¸]†}Š*u›¶‚$ ýHÏjR}xžáJr»Œ@õºÙJ2G¥ §NUƒ1•X Ó^¯˜ÛeÓW¾†-õDÐÃѪq˜{€­[jaÚëUüs»Œõÿébâ²;º%(“!|Zi±Ñlú“5G;|aúKj÷—_¯‚¬ÛeÕ··†V£ÚN[NÎF©¶÷«-ím»×«ív£5êíO+e¥|`®é0çµv“†AÃÛý‘ %ö»•p-ìB ÿWÒžV"Dæ qä’Ó~<ëº2¹Æi몕×Å«³ƒPCI¡Á˜³/Ú·–DƘtEäùyáê$ÈÇ•“v"‹Žç‘– "ÁfõȵY4ž7¾¯sRºó8´Qâ[¶ñzÞYjˆ;ÏÄ¡üå¨GÁÈ+/ýû—…OP‰îggJ¬Ü‰Œõ’»îžËEOÖ$=¢fÜ5ÄÝË=ù¾Øxo©_¨w³=¢óåžÔÐ[HÒ_z ψ ‘þrOj?/—uUN.T^ÝCfaü÷«î‚…ba÷þº8y³ëåº_DPÔÕÊëY¾\êÍ÷™»î¾.XíínŠ•Üã.ýñ¬êŸ~®bA VŠž`ª^¿9yþûõ áöÇ‚A­O?Üle†cDÏC¾SØ]ÎÿckøàÝgßRT¿”dUØj] à°ù®äºØ êŠzËßü™À6ø —‡#~\5òS8îQ£æ>䑨ÄÞ£¡þàú®?ÌðK¹lÙ£™ƒé‰®½­Ï4ø›£{„€s& °¨xö;~ƒ¶9÷Íl3\Éb±CâÕþ´¬Ô7º<²6„³ÏÀ,ï?Ìp%½ÅΘߤ>-ðIýüêu5Æ£~Cãþ ù W²cì {5Æ×ÕêçW-'öîo«|>/0½ fø _ž–·˜¸Ã÷¯V3i)51Æý!–›³Iâ|Úg¸ã W’v7’úþÕjŒ-#÷MŠ>Æ›6ÆWR{ìÜÿMêb¯ùB´¼ÝZ§{=ê‹×5ŸÈ Zº,œë%þß¿b^ÄðÕÓÛcwqãÓÛc|šÆˆÎ`=Ýéðý+>FþÕÃÛc¤6«1>¼=Ƈ‹1¶ßö¯Vcl™Â÷ïu 7¯føÅ^‹\$“ëúÛþÕŠk[¢ñÛ¸\—º§uÖíð/¾,ø¸‘Ô÷¯VcléÈ?ó|ÌkV¦¯?¬¤¡. yKZþÙ|Ì~¢§²ÿ¯þÀÆxü0Ã/Çøôýtßþýï÷BÁ}ý ú›·Ðà_ž'—r×¢ßá£D\äD`Aĺ¸õ™¸ žq+"1n©~Uÿ‚ø[-×üõNXuÓÆXÿ´\®þôϯ¡ÛËþ®ƒáO¿ÅWf?œ}úö<;WÖ ê;Ç?Švï.°ÿÝá‡r7þ£ œ€/°_-pÆ*á£DŠáDŠH1M²ž¾Ç±f`ú¸$¶n³ÒG‰ÀÀôiI$5¦~:ÿ‚Øxꇽ—–?ýúgÕ>èùŸeÎl7}uwõÕ‚z½¯Òá³hPó‹z¾ùü» å÷ÅP~·¡üþ“¡ü^ eo…‘›%?•ÚÃrçfè!n3üËÃ?“û )ô¯à£D€1zƒs"Žš^•’k¯tüÊ}”ˆˆ8IćýÉ’Ü”Zû âo½K'>Ô=‘Ëu®¶ô¡ª•÷OÑSô’z0~ ã:† ‘°˜b€.ËU­¼ŸHˆDe&.oÃ~Ó½ÔôQ"i ’V3¡&í«üQ"y ’•™xj…ÄØî¹·>,UßÃ…ê{x^›“;†›m™ WœÜm?5žN:‘ð¥‹-2þô¼RûtÙ/-¢Ú–®O}4Ãjðµït‡‹ÁïÇ.Ÿ{úòaÜñwû„ëçVcYC ‘¤9—Nßtx˜–›xÞ‚Ü/«¼Ì%¼-Ø—Õ¾_Â[¸ðeQ\Á¶|âœYlðý§³ÍÏ–*Ÿ3þ~ÿ®¥­Gø÷%¼åÐ~E„:H[·ôB¾°Âzé§ÐëîQÀyåÍþªÝz¿9/Ážò7óM‡_™{üêÜù¥«3ŒÑ™-BH> 8Jßø7©W–XzJõd6gJ«8fð¾B·€c Ú%,‡5ïÇX9jéŽcŒT娒ù >ì¢/[Šàâ4Æ™;üzŒ•!—>_!Ô²ô†IlÝBœ-Wcú7¨ÿ׸{<+¥{5ÙAÃ:_eÎ3|dúªœ# ÅÔN"y/á¬$•.ï8›2ì­~yñ%=$¨Ã´€³êI:PIÅäÞNzõÝó`/5T8/Y¼4ÆÚëÉíïâÊÓ;ÎKøn1 ÷}žØ†Ú'ûÄžÅìpV7G¯/Eª„lMÕÙe°à©û€œ{¯#£§vMˆ¦÷hfÕ=¸(PÄÊï}ýg^¢ï}ý«^ãE âVS’ʨÌâ —Ü&J¹Üߥôíñ&fwX¿gÆÖrŸÃ“íM¶x(Ðö›'¶¡C/¯õNgð¡j–ºP£à'îØË§*/áßÖlþ|žs]Èp¥x9÷Îh1Í–l®/ipî@·%A0’:çGõOɘ¸c¿¸à°®½ÔØ6uªزup¼‘9ª´ãEMì®a‚õwPáYp®aèAHgûKÎ6nïÞßhêp^¨¾ga¼;;ä̵_{òÁIøÀ\°C 3sçÄ)KøÄ\–š³¸Y'gLcm6w΂~£†¾%׺’êœíSëmÏt1ÚäöR#›;gAz€Û;Ûž*á³B‹”•c°¨ÛQ™5É;ŒvÊÕá‚7 ®PUsÆ–ÝšÅduÍå›nàM““WUZ²‚ÃŒ_ н¢¹|ÈÅJꃂÂÁGº¬° ²¼oïÆ1øø·¥'L‹äŒ0qYÄÒ^=}›R‚‰;Hñ9ï\{I³Ãî GÊb"¶7ÓS‹Ð^áip¹½(üõ«¶wÓÑ;5Ôv‡ñä×uèíZz÷-ÌðÙ;!õ?¾q(X‰LŽðá’ ]¢E!wBwÐ^| øp³„ÄÄ„ì”}@=¸|b‚Pà|‰f¼‚±?ÔÝYbƒ¿›88gŸ„R±ô´„õrðÜs¦šfƒ°l“7–ÉÊ•çÆÒ;RhzËÈ6øßÓæõ?“ÔG ƒjןþæ¨Tnȹs @ºlëÐãjZ»ª+åYo¢©¦¥Æ”ÿõÜ øóþg•µ ÞŠ?TÜàziìg¥±þge§}ðT7ÚàVÒÙàc¹ä²Úr9÷¡’QŸ»,qlð?«QìƒêÿôÁ_sÝXš§S¿€UsúQá|,h[Ôšý}çµfËRµ|QEÆá¼ŠLÌ]/ðæÎ ¼fx3`ãÍÓù!ÁÑAë5ÃçÂMÔiáÐó"øÂ  \úIÖ‡ÉÂÆâ¨ˆËIÀ'ïÜ‚ggïÜ£ÛŽ‘§•ðÁ;…¡ùÝd±t³…%Cš@zçh!mÎré†ôz¨›–ÍÞy ±h6xfa÷-¼´°äù†äๅ¥³ŠäÜùv-sÛ=Ý]ñ=ôcÔ™… äƒPð%3¿zRJ™û¯1v‹daa1œŽhÞ%ÛLÙ‡ˆÞ×ñæ×ãèc@šKRyÞ1¡Ÿ­,5^—¾” ê'1Ã…oQ|ôÀÓ¹ö@n‡ËèÖ†0ñ|Ù}›ØÊg|OÓ1D:Zܬû|l:œ±öþ6—ÇÐÀÏÉ0ÈôpUhQs‡¬ =bu´û’a”FßžØìðƒ‘ B€’DÊ™\N!IøxRn Ó‰d5Qð&J8ç`OSÌîxö—3-ÝÅ¥Ç`äÆ I‘ŒÌåCÉ"2ÁE±@,ðò0Tv\1mÛíñúý%Ó¦57Иì?”¾Q#R(¹Åì>•ÈïÖ êz¾½KÆàCX…Ž3FuG“YÆó³ã®•–êaƒïsOÈó(”îh¨Íô<åÈ"u¸Î$cOÓó•2MŒ–$—nHÓ•;01LÂ@ùãM¶rðƒdØ-¥r&A§HÊÑûìVRgÉdÔ+ôge™$ã¾¥ž¨ýñ¬FãÈô¨-Ò,2@ÖÀsç"“ÍæC¨ï‘ÊLq)ÉÁs¥_p…òù„Р犢sV²ÍãN£>LûM,™`Dß$«"³¬Æ9cˉKÁ²©¥;HKRë֣Ŗêép)?àí(2·hƒ7\·þÖ{‡O™ ñhì2&¿ãþú¥—p6÷ìP¡æp¾Ð9úI}˜œÄÒ Æ%#Pwn‘"?ž¿4ÍÕèðÁ˜-²g4>ûIÙ·—YùàG? Pg›9þg¯Ñ?µrðƒü¤-!c܉ ü$ë-[N}ÌDºÐcg‘ $21Ü÷)aö–òBdè©êÞ­ÁùAsëë;Ý|ßѽ¶Á&—òcÌ~zº ÃJdOŒ T®DÆ:SÏn;\ŠLp‡8‹Œõ±½”ÝášÉñRÜ–SnND‡sɈ@ç:çÛOCЀN*Ê"á|î‰Î×P+aLì]ˆ|ÈѪãdOïœÒ§±½ÌàL2nC¤Ä;§:ÎË unL(2¡²ð¿Ò†Ú´(ƒ$cÏ+ÿt©Øt­|ò¿èéYÏÓ«´š%d7t¥ÀïP2‚êYÙ”²Ê´+Ön{7¶íY²öáµÌpI֎繎p XðÕá’µs™Y›˜R¶;:|ŽQ#¢182ÃsÆÙÒ ø ô©WЇÌdz9À˜[Rü$Š­Mv ô<½ÀÝÛ“2øà'yÔÚΫèù@n–Ô¿ždD—À¸™µÃî{væêðáÐ=“ê9ÓÚCò”R’l3²66h ¬Z {ÝêíøàYhaN58o¥ÎxÃæ(àSplbŽ{ÓHyLïM•ç—QsÝÔ±×Ô¥d=UÌ'áRX5jö®êšdrÉÚLz|p‡êöúªóØpl/U·’út0ƒz ¢W Ml ÐòIΖ.Ñö¢C¢â¡ÎNM.;| z2ÜÙh5¥ï‘ïäà¥ôlÃy\;(ýB/‡€B}Pú]¹p´Î•¾A­m±Î%#¢ÎNîܸA2Ù´}øàÇ Û“FsÂʸoÐ:2øAìçyn?é–z×Våù•d´½¤]G1¦®œ —#º;Mìp)îÈu² ›Ü`09€¤>ŸeÚÇ‹ã\dR"_!1÷)ÓŠ6ÝÍ3G‘)½£ÙÔn‡™V»•˜¼Õ2­[4sÛálåCŽ›§,³v–‰›’\ºI~|8ãnL€®±'ï%uži%u’È´âÊâl…úãÐS¦`øE¦m¥Œ2÷)ÓjiŠÊY&¥¾½Ü¸A~,=™t Ö$2.+/ä'лÌUV"Óvel÷wiLL{þµÃ¥È¤£·°ôÁƒ€+E!‰HF$ñ,k›„CùÜÎï;|’ KFÃJa ŠÑœ”ÁsɈh­íY–3§£háÅàž/{ø³só2ÑT—uì>ym&|Ë#6äyälç=¸$àŠ™0BÏG³¡o>G•Â|ì°'AÑ»bîSpl©®,ÊbÊ”‘ob«Víp#Û8 Éãá´Ÿ†dÔùÊ—¶ˆÞ£¨ÔÍy‹è8…:×óv¦Ð_ÊfQ3Ýä(©?½íɈð!Sä7zyÀÉÁ™"Æ‘Jx‘i“ïçE>ùIûYdR‚‹n·ð‰ç)„(g?ß»urµ-ëØ õú:´ãÀRx>g=¹êº}ïp%¹ZD™×îôSgEŸõ|>û/Î%¢Ž’«VÀ'‘ Þd™ÅéÁ5¶éðép¤tô a"ƒ¾ ª`ô;úIÝ÷µÌ‹Ê,O¿nŠ&Ð!¶ÊÊA·§Òmëçäj ©Ûrî“k„’MRÏ#J/eÔ¹È`l­¢¸=¼Ó­I}º 2­ ó!4UŸ¡cÖÞñdðÙ SZ¤kDU q‰¹Ë ý€R…aMÔ[û¾!2Ý)­ éVÏQyQ4Yr'K¸Œ9Îw<•¬k;ðéðI°r"¹ÖÃŒ””Á:)ѩǙ`d‰nDA ;| Ó ÝJnÖ\~Œ90œ@¦-Ê©w¦iYŸO-FÊYÔ¢ÇÇ.tt8Ûwœôæ((YW›({ àCu­:å4e4‘peå™È(ÔÇ#¤³ÏDçPAnÜÓpšhpˆÇ…Ç1ñ’,Z)A]zVÑî'»0,E¦®ËبúZdLK\6’šJË#Kh—D1qBÏÊÚ uø€[áSŽá{w:|’ ô@Üq:=áaÛ$>IùUêE„€×(ƒS»”™²I¹$C•E.Ýp…Šòj6QL\R¡r¡$áCÕ.0eŒý\Llöd0€2÷1µ {¶^ˆ †–ú ø`eÐÆÙ|ÖDLŽÖ1¸\ ã5"údŒÔmׯE¦@žáš•9ÂéZçŽx‚e³+-8ÏlQ°ÁieŸ«ûó}ð\°õ;0×ÍÉà‚Š øde2êùT”²Açm¯éð)³Ñû:Ò>Sa~ ¨C€O‚…&ŽûS2‹šôÿN}¬Àò9Åh5Y‚h•ÁX¸t‰‰«?Èn›´û’úPN‚qFÙ)+²dÉk‘\7e¶å󡬸ùÁP(г#’ú\ChP×éÉ`°Ùª"³<@¬Ÿ¸ŽòsÓ ¤”“ä¨Gù ¸â¥¹ 2[Ž< Ó’C.¼4º`.ÎO,]¾éÙöʱÐOr)*¶ÈÑÃm9ˆ¥›mÊUt ]h¢zI}²EH“”ÌÖ>¤»Üa &É@Á-¤ìð)Í…>´ñAúItE!±òsÙm¤FGQHFÙRŠÅȕ璑èœR~RF*8eîÓ¡¹CïÞÈl¡žG5ßja:|’ Z¸š>»çÆ™E¾sÆ|†dà´rtí¡Eã>ùI5ÚîàÊB« %©<¿¬g¯ßz#foÇ $/aÄ󸼞ä=¸”Œ³~rªT÷|;wîðázÚôbÎ\Í`3èGqAÌ]¸C¨]Ýœ§ºxÆÖ{ŠSçîwÔŸñÈOŽ’AÅ£±¹˜ÎÏL|D4õ'’‘©ëCR–®KªvŠÙ‹S Òý–bêÇÖÎ%#%:Z·Çéç`3öÇ ss1;|('Á©.±Ö<}ù7¼rÁXT21pd¶ë Ÿ~ššR,E׿M}v¡ÔGÈA{ÐÒQÿs œ‡t€Ž®ºróŽ¢f:9ð)ð1•³)ÎPC‘olMqêwCõ3ú‹Þ‰‚:ÎÔ-GÀ§3ì@EænS¶P–̧d%uÖtY53Ì-yP0È“[ƒ/NévOÍñÎLJ~çºÞ4‚Á¹n§–Ï>‚uÿðôï¸ï®UÓm<ñMé÷¤½àA‘TW£ÃçVYôz^MÓ:ªÎ=àwÏ_¿ ¦Eµ t*TöÓª—O_Vk;|ÿjñ(Îþ÷²cŒY¯Úm}\FàÞ/z‚„*— >dƒ1@ïpH&g ¨W•“ƒçÎX¦3ÇrêͱlÞ ¯ù}—aН$­"ÊesŸ"ðd!PŠNpÝL–sŸ“V¥uŒ¹{KK+ûàÔ‡´*[½…4šœhJkõÃàC¾wô1Ev$ÙQ’:“Þ€¾\Âç¼ÿÅ6RFOIž›êÊaÃÜi Õ•ÃçÖÒ”ÁG¥¿pï‚ObÍ%ãë]mG;ž¨í}¨¼S ÑÇP}9Ÿ TC­›Wt ÖÊbçú˜ÄB<:x …ôÆ#jJ ÎÐ…O›³âDºö5¾äÔG_;£§ç+:7´%ŽÐ%õ¶½¸?^hµÛô½EU¾åD™&¹ò}{[FwÊ8ÍŒ'ŒAÄÜEwüªï¿>‡Õ¾ÿ÷¨^ÔùÅC þ÷ô¾ì®·«;ÔZ²æìoéDÚûeoù6öh¯xÜjs¥Æ<ò«æß¦.<§¹•soS|d×y>¼‹: 'WÊÕ»Ègr)iü+êê•ÖKêÆC«§zÔ¯uî)MŒSà-ê꽿kêJÕˆüòÚHÅ*§·¨ëW¨.©G×NýÕ[HÇÜ}9’"WÔÙU¯癩ª: ¸à:gã›ÔÕ«o¬|.5Ïû¨ãŸ_Yû澫õÒ×Ô-ú©NÂ'ꃴøuµôôšz.¥žþ<ªµ£õšËÛs׋¯WÙ ø4wkÓy•ùrß¿k®WÞ™zƒä‘W4MsÏg‰Âå¾kµ%#õwÁÿVáõ+vþíãDúéœ|üpvxôï×?˜â¯{ÕÕÀmÈ j<}÷-™Ìá¿î?N¥ c5‰Ë¥•Ã?ªù¾÷Sg)™Yìy#Vè:ºÅ!àòµð·©ßÛjÇEɘ¥³AÍ  ;yEÀ…-*ñˆ ¤srÓ©W;>_”ÐÌI£³é}¤\zöè¤yI½Úñ¹Ñc±”g–KîWvNÀ…%4ο=÷jÇç4~1è¡f]#B_ùÖ ¯_S¯v|îe™é)•zèyDŸ©ûbÓ…KêÕŽÏa/u LVQ•D?:r‰~Zy›ëN;>_ÅdzÊRú_.D^@í rI½Úñ¹Ð¤@6úÊ[ y¬„Ïûn¼ƒ7©W;>GޏòÔ¹'J³ ¸àùœDÆ5ÏŸv|>åÏÉ{§¯<´\ƒÏÖ€Z§½cß¿Wm3¶V-dÆ+ß<_—ºÎÅ·©×¿­xõÁÑKøIT±ïïW³®Ø÷÷À«YWìûû¯Ì}O}[¯ÚwºXì$|ºlG×LÞ±ï§]VÜë¸Ò#)%í;ñÍ™F¹¶2§]–ÔK°:u(|°ï¤¨ÓYcpE>gßá£öX¶½oŸ³ïðQûNu͹ž•ÝÃçì;|Ô¾o!A»;}Ÿ³ïðQû¾í­kÚÒ}ξÃGíû"š‰j"ásö>jß7Ÿ¬«§ÓÈ6Ÿ²ïðQû¾¥ý]˜ ÿœ}‡Ú÷ÍS=Tc›ÏÙwø¨}ß‚O:Ó~ʾÃGí;õª²õ”7îSö>lߩʿ)j¸¶ïí«K3ÞâÒZ71¹4Êâgl/|ÔöR¿¤ÆÎŸ³½ðQÛKm5\è*üS¶þÀöný%µÏuù\Çñ—Ïuù\Çñ—Ïuù\Çñ—Ïuù\Çñ—Ïuù\Çñ—Ïuù\Çñ—Ïuù\Çñ—Ïuù\Çñ—Ïuù\Çñ—EÇqÚ2ÏêBoË<¨ Þ w^:½Aî°t?Ö·h:¨ Þq‚/Z"røó…ºX´ãð¡7×¼tzo®aéx£ ¾h`ÄáC3—ÙLèÍ\3ñ²VV‹¾ÃÊß]X½ÅÀ0÷ïë¥[\·æÎ¯žÎpýêéÿµ–¸Å5¼aî?×l£_6Øæß¯ƒW/^Œƒ_+êEqû°òwkê‹ àA`Ÿ–smÍð^4õvÙî}Éø{ÑÔÖ ÃÖn°Ãy}ÅÞë0S÷4úá÷·{~©!˜Ò"û×+ÏêvéYù­ÁŸÛà‡®0š —x|ÆšžhÂè+«p× cŽeûvxìz¿Ôàm>Î^m„£¥Û8w܉ˆ3\q o—na›{sÇÊJ}€¢û‹-šx½Ê‘æ2ÎD0Ús{ü¯x•Èè{®ˆ4ÇrÞ,Ãq…wxMœ®c9‡K©ÂÙfåa¯äoŽÓÍ#‹ûSk:|ØEïéRÝ »èìf¨Ø/ÏpÅ?¾]úÇmîÍ+˜n~z%Swœûîõr«ó+XÅú£ÈFq¯Ù.NøŠÈë’ˆ v/]UœðNdtÕWDš>.= hŽŽeŠ«Þ‰ŒýrOî¿ë3¡×+öK+ŠCÏödpûWDšO?ÎÄRSv³_*RÜþNd –Ëõ]ÓP¨„‹‹gÕ#çm·„S³¯W!Äí2„èST©Û´´ YèGz|“ªÈó W"ÛeÒ¨?èÔÍV’9*M8uªŒ©ÄZ˜özÀÜ.˜¾ò5l¨§°%º),ìb€­[jaÚëUüs»Œõÿébâ²;z*(“!|Zi±Ñlú“5GÓ|aúKj·œ_¯‚¬ÛeÕ··†V£ÚN[NÎF©¶÷ 0í¼×«ív£5êíO+e¥|`®é0çµv“†AÃÛý) %ö»•p-ìB ÿWÒžV"Dæ qä’Ó~<ëº2¹Æi몕×ÅÛ³ƒPCI¡Á˜³{Ú·–DƘtEäùyáê$ÈÇ•“v"‹¾è‘– "ÁfõȵY´˜ž7¾¯sRºó8´Qâ[¶ñz·ÞYjˆ;ÏÄ¡üå¨GÁÈ+/ýû—…OP‰î(%VîDƈzÉ]wϋ墇m’Q3îâîåž|_l¼·ÔUT»Ùž ÑùrOjè-$žúµY=:g{2ÄðK"¿¾­Té/=†gD†H¹'5ŒŸ—˺*'*¯‹#³0þûUwÁB±°{]œÇ¼ŽYƒõrÝ/"(ê}åõ¬_.õ~üÌ]w_,Œöv7ÅJnq—~ÕxVõO?W± +EÏ@0U¯ßÚ‰<ÿýz†pû“ÂN­O?Üle†cDÏC¾SØ]ÎÿckøàÝgßRT¿”dUØj]’Àaó3\Éu±Ôõ–¿ù3mðA.Gü¸<ä§pÜ1¢FÍ3|È#Q³‰½“CýÁ÷];~˜á—rÙ²G3ÓC^{óŸið7G çL@bQñìwümsî›Ùf¸’Åb‡Ä«ýiY©ot!ydmg7‚1XÞ˜áJz‹1¿I}Zà“úùÕëjŒGý†6ÆýÙó®dÇØAöjŒ¯«1ÔϯZNìÝßVù|^`z=(Ìð/¾<-o1q‡ï_­fÒRjbŒûs-7g+Åù´#Îp9Æ®$ín$õý«Õ[Fî›:}Œ7mŒ ®¤öعÿ›ÔÅ^ó…hy»µN÷zÔ ®k>‘´tY8×Kü¾żˆá«§·Ç8îâ8Ƨ·Çø4ÁzºÓáûW|Œü«‡·ÇHmVc|x{Œcl¿í_­ÆØ2…ïßë@/cÍð‹½¹H&×õ·ý«×¶Dã·q¹.uOë¿Ûá_$|Yðq#©ï_­ÆØÒ‘æ4ø˜×¬›UXíb]ò–´ü³16ø˜ýDOeÿ_ýñøa†_Žñéûé†?ýûßï…‚û6úô7o¡Á¿<=N .å®E¿ÃG‰¸È‰À‚ˆuqë3q%<'âVDbÜRýªþñ·Z®ùëÝìy˜ÐôXýÓr¹NøÓ?¿†n/ûëv†?ý_™ýpöéÛóì\YœˆxþQ´{wýï?„» ð]à|ýj30V %R 'VDŠi’õô=~ˆ5ÓÇ%‘°u›•>J¦OK"©1ýóÓùÄÆS×ì½´üé×?«öAÏÿÔ(sf»é«»«¯Ôë}•—¢aCsÊ·¡ü¾Êï6”ß2”ß«¡IÀfÉO¥ö°Ü¹‡Y'zˆÛ ÿòðÏä¾B ý+ø(`ŒÞàœˆ£ÖX¥äÚQ¿r%â"NñaØ$›¶\M'>ü‰N|¨{"—ë„?\méCU+¦è%õ`üÆu %"a1Å]–ªZy?‘8‰ÊL\Þ2†ý¦{©é£DÒ@$­fB­<ÛWù£Dò@$+3ñÔ ‰±Ýs=n}Xª¾‡ Õ÷ð¼„7'w 7Û2A ®8¹Û~j<œt #áK[d08üéy¥öé²_ZDµ=,] žrX ¾v§îp1øý‰ÙÅàsO_>,ƒâƒ;þnŸpõÜj,k$’4çÒ)ð›¯ÓroÃ[ûe•—¹„·û²Ú÷Kx ¾¬"Š+øÏ–Oœ3‹ ¾ÿàu¶ùÙRåsÆŸÃï/àßµ´õÿ¾„·œ§Ì~V8ý°‚·d¨8•hpúao)S™<­púa©‡Cb2• ù¼ñlzÿa†¿üZ(Ôýïúóüi ÿÕSëÊW Œ1es¼g¦1¢ŠÞ¢±­«_‡¿kŒýïÎp>FIÄÉ1Rë:ªEs=ŽÑ&tÇs(íÞ]‡¿cŒ·ìïÎð>Æ[…ˆ—c¤K6ð>îÅÀ|]ÜWl§wø{ÆÈþî çë(‰9F…³ÒUæimzËô)†Œ‘ýÝÎ×Q‰rŒÑ[ Gea¯ `c„”==š’!Ïð÷Œ‘ýÝÎÆ(ˆ<^#Ö(ȉ—€L&Uß·ÃUµÝˆ\˜,IO$RR½ðßá—D® Û;ˆ4Ð%‘+ó'‰äDÕåÉÖî—~IäÊH*3 ¶l|íÝáWD¨ƒÄ±uK/ä +Ü¡÷€ ½œWÞìoÿÑ­÷›óì)3ßtø•¹Ç¯Î_º:ÃÙ"„ä³€³¡ô“ze‰¥§4POfs¦´Šcï+t 8ƨ]ÂrX3üzŒ•£–îØ8ÆHUŽ- ÌàÃ.ú²¥.NcœÙ¹Ã¯ÇXréóñB-K/ÄÖ-„ÁÙr5¦ƒú»Ç³RºW“1¬óíæ<ÃG& ¯Êù|ÒP,@í$’÷ÎJRéò޳)ÃÞê—_Òs‰:L 8«ž¤•TL>{бŠÇ[ºlä#{Ï¡ÂyÉâm¤1–ÐÞXnWž^p^Âw‹¹‡ìóÄ6Ô>Ù'öxf‡³º9z£)R%dk½Î.ƒOÝäÜ{=ÈkB4½G3«îÁE"V~ïþïxæ%úÞý¿ê•1^*n5Çëe‚;P™Å.¹Ìш`ËýõJßžxbv‘q‡õqflù9<ÙØ^nëð‡mo°ybÚ8ôòZïtªf© 5ú~⎽|*¡òð><jÍæÏgã9wÐ… WŠ—sïÜÓlÉæúÞçt[#©sîpTÿ”\€‰;öW^P¡€ îëÚ{ŽmS§ú€-[VQiÇS‹>šØ]Ãë5î Â³ à\Ãг'Îö—œmÜÞ;½¿äÔá¼P}ÏÂxw<‰È™k¿ö䃓ð¹`‡fæ:NS–ð‰¹,5gq³N::ΘÆÚlîœýF }!K® t%#(Ô9 Ú-¦ÖÛžé$b.´Éí=G6w΂ôL·w¶=hÂgEÊÆ± XÔ펨̚‹ä F;åêpÁ›W¨ªÇÆ9cËnÍb²ºæòM·wGVð¦ÉÉ«*­?lÁá?ƯÅ^Ñ\>äb%õAAáà#]VØYÞ·×å||´ÛÒC§ErF˜¸,béF¯‡ÈM)ÁĤøœw®½·ÙáwÐSf±@Û›éMhoõ4¸Ü^þúUÛ»éèj»Ãxòë:ôÂ-½føì‡zˆß8¬D&Ç øpÉ….Ñ¢;¡;è™/ >|¸YBbbBvʾ \>1A(p¾W3^ÁØŸónO1±ÁßMœ³OB©XzZÂz9xî9SM³AØ ¶É›GËdåÊs céµ)4½edüïis‰úŸI꣆AµëOsT*7äÜ9  N]6ƒÆuèq5­Ý Õ•‹ò¬7ÑTÓRcÊÿÆzîüy ÿ³ÊÚoÅÀ* np½4v€³ÒXÿ³²Ó>ø?ªmð?+élð±\rYm¹œûPɨÏ]–86øŸÕ(öÁõú࿯¹n,ÍÓ©_ÀǪ9ý¨ð>´-jÍþ¾€óZ³e©Ú ¾¨"ãp^E&æ®x sg^3¼°ñæéüÜà胠õšásá&ê´pèy|aP.ý$ëÃdacqÔÄå$à“wnÁÀñ¶0÷Î=ºíyZ ¼óP(Ìú‘ß‘AK7[X2¤ ¤wŽÒæ,—nH ‡Š±ùñ¬Ùì—›fƒgvÐÂK Kžoh•2œ:³°tV‘œ;_¸en»§»+¾‡~Œ:³°| ¾„cæ·@OJ)sÿ5Ænã,,,†ÓÍ»d›)ûÑû:Þüz]b HsI*Ï{&õ•¥ÆëÒ—’Aý$f¸ðá-Šx:מÑípÝÚ&ž/»o[ù,ƒáiÚ"†HG‹Ûµq‚ïM‡3ÖÞßæòø9™® -jîðµa£G¬ŽvŸC2ŒÒˆàÛCœ>p02AP’H9Ó³Ì)$ OÊMÁq3&艂7QÂ9{šbvÑÍLKwqé1¹qCR$#sùP²ˆLpQ¬K'|D‡< •WLÛv{¼~É´©GÍ 4&û¥oÔˆJn1{‡O%ò»5ˆºžoï’1øV¡ãŒQÝÑd–ñ<Åì¸k¥¥zØàûÜò< ¥;j3=O9²Hn£€3ÉØÓÄôÈ¥L£FÄ€%É¥ÒÄtåL “0Pþ8G“­ü vK©œIÐ)’rôŠ»•ÔY2µÇ ýñY&ɸo©'j<«Ñ82=j‹4‹ 5päܹÈd³ùê;„C$…2S\Jrð\é\¡|>!4èù€¢èœ•ló8†Ó¨Ó~K&Ñ7ɪȬ«qÎØrâR°ljéŽÒ’Ôº5Àh±¥z:\ʯ‹Ì-Úà ×­¿ßáS&ÂB<»ŒÉ︿~é%œÍ=;T¨9œ/tŽ~RF&'±tƒ1AÉÔ[¤Èç/Ms5:|0&d‹ìÏ~RöíýV>øÑOÔÙfΰïÙkôO­ü ?iKÈØ0g"(? ÅÇzË–S3†®‚ØYd‰LL ÷}ÊD˜½¥¼zкwkgðA~ÐÜúúš÷#ßwt¯m°IÀ¥ü³Ÿžî°™Æc•+‘±ÎÔ³Û—"Üá#Î"c}lïiw¸fr¼·å”›Ñá\2"йÎùöÓ4 вH8Ÿ{¢ó5Ô E»E¢rt€ê8ÙÓ;çÆ„ôi4 áL2nC¤Ä;§:ÎË unL(2¡²ð¿Ò†Ú´(ƒ$cÏ+ÿt©Øt­|ò¿èéYÏÓ«´š%d7t¥ÀïP2‚êYÙ”²Ê´+Ön{7¶íY²öáµÌpI֎繎p XðÕá’µs™Y›˜R¶;:|ŽQ#¢182ÃsÆÙÒ ø ô©WЇÌdz9À˜[Rü$Š­Mv ô<½ÓÝÛ“2øà'yÔÚΫèù@n–Ô¿ždD—À¸™µÃî{væêðáÐ=“ê9ÓÚCò”R’l3²66h ¬Z {ÝêíøàYhaN58o¥ÎxÃæ(àSplbŽ{ÓHyLïM•ç—QsÝÔ±×Ô¥d=UÌ'áRX5jö®êšdrÉÚLz|p‡êöúªóØpl/U·’út0ƒz ¢W Ml ÐòIΖ.Ñö¢C¢â¡ÎNM.;| z2ÜÙh5¥ï‘ïäà¥ôlÃy\;(ýB/‡€B}Pú]¹p´Î•¾A­m±Î%#¢ÎNîܸA2Ù´}øàÇ Û“FsÂʸoÐ:2øAìçyn?é–z×Våù•d´½¤]G1¦®œ —#º;Mìp)îÈu² ›Ü`09€¤>ŸeÚÇ‹ã\dR"_!1÷)ÓŠ6ÝÍ3G‘)½£ÙÔn‡™V»•˜ŽðgδblÑÌm‡³•9nž²ÌÚY&nJHré&ùñàŒ_¸1ºÆž¼—Ôy¦•<>ÔI"ÓŠ+_ˆ³êCO™‚áG™V´E”0ÊܧL«¥)*g™”úörãù±ôdÒ)X“ȸ`¬¼Ÿ@ï2WaX‰LÛ•±Ýߥ11íù×—"“ŽÞÂRdЮq„$òT(¢mLÛásÐ.^vJ=¢-.y $#Qù™ãŒI¦Ò£À‡ÂQÌ®TwPÑp¡¾…ÎV>Q²Ò¥¸÷åú25G$aV–n2&ÖEï¥1 haµ’ú ‘|ij¬m ås;¿ïðI2, +…*FsRÏ%#¢µ¶gYÎœŽ¢…ƒWx¾ìáÏÎÍËDS]Ö±ûäµ™ð-Ø@’瑳už÷à’€+fÂ=͆¾¹+’úA8T ó±ÃžEï"ˆ¹OÁ±¥º²(‹)SF¾‰­ZµÃypŒlã088L$‡Ó~’ARç+_RØ"z¢R7ç-¢àê\ÏSØ™B)›EÍ8t“£¤þ8ô¶'#~À‡L‘ßèå'?fŠ<#8Df(áE¦M¾Ÿuøä'íg‘I ,ºÝ^À'ž§¢œý|ïÖÉÕ¶¬c3ÔëCèÐŽHáùœõäªëö½Ã•äje^»ÓO|Öóùì¿8—ˆ:J®ZŸD(x“e^§ר¦Ã§Ã “ÒÑÚž‰ ú&¨‚Ñïè'ußÔ2/*³<ýº)š@‡Ø*+?ÝžJ·­Ÿ“«9$¤n#ȹO®JF4I=(½D”Qç"ƒ±A´>ˆâö@òN·$õ!è.È´6̇ÐT}†ŽY{Ç“Ágk€Ni‘®U%`Ä%æ.ƒnôJ†e4Qllíû†Èt§´‚¦[=GåEÑdÉaœ,á2æ8ßñT²®íÀ§Ã'ÁʉäZ3RR?è¤D§g‚q%º-Xìð)L/tG4*¹YCp9ø1æÀp™¶(§Þ™¦e|>µp)gYP‹»ÐÑálßqÒ›st¢ d]m¢ì€Õµè”Ó”YdÐDZ À••g"Cf< PÎ>C¹qOÃi¢Á!ÇÄK²h¥uéYE»Ÿì°™º.c£êk‘1-qÙ@Jj*-ð¼ ®HF:ö}†b¡Zuø,h ]ÅÄ =+k[(ÔáSl…O8†ïÝ=èðI2ÐqÇéô|„‡lKtø$äW©þ]£ ~LíRfÊ&å’ UZ¹tÃ*Ê«ÙTD1qI…Ê…’„U#¸À”1ös1±Ù“ÁÊÜÇÔ.ìÙz!2Zê,àƒ•AgóY19fXÇ àBdpŽ×ˆè“e0Rg<¶]¿™y†kVæ¦k{8â\–Í6®<¶ à<³EÁbo¤•9|®îÏ÷ÁsÁrÔïÀ\7'ƒ *‚(à“•É¨çSQÊ·½¤Ã§ÌVDïëHûL…ù1 u> š88îGLÉ,jÐOü;õ±Ëç£Õd ¢U?T`áÒa$&®þ »mÐîKêC9 Æae§¬È’%¯ErÝ”ÙB–χ²âæC¡@ÏŽHês ¡A]§'ƒÁf«ŠÌò±Nl|jà:ÊÏM+4RN’£å( àŠ—æ‚Èl9ò€LKu¸ðÒ肹8?±tù¦gÛ;|(ÇB?É¥¨Ø"G·å –n¶E(WÑv¡‰ê$õÉ!ñ|°öì˜kÚÅ06øQ~bváÈ£ó$A4ä×%'7n('.­;QNB÷–b°M'1êÃÅJ@•æ$A1²ÛSSŒ:—Ÿ@­®âqßs:ZGsÖ^Æcðá˜UZ Y*É`Œƒ’+/ä'ç#ÞÚ…aí¾Ý7÷íþ½"cz*º‚‘±V€$¨k&çpœ‡l®¡& í©ŸcŒòÏ—â97£Bͦ˜(àüÐ<{ÔˆBRêARö9ʹO‡æ¨+‚<¤2"‡F$uÆÚ…Êné¾›ˆß÷ˆ'x9÷áÐÜ‘£sží Ù\zÜúÚÍ÷¹G7[ƒÈ{ó‰9÷ÊÑ ºo’‰²¸®fh.L‡O¬½¿ü™Tk»!™v™ÿºk—®îÞm lO£Ü-­[TJ‘)‹®°öQÐ1g¶P%¶êð©†Ðû`LR2[ øTîrp‡5˜$#´²Ã§4úÐÆé'Ñ…ÄÊÏe·‘E!eK)#WžKF¢sHAúI¨à”¹O‡æ½{"³…zÕ|«…éðI2hájúìžd\9øÎuóm’ÓÊIе‡wøä'eÔh»ƒ+ ­2”¤òü²ž½`|c蘽g4¼„Ï[àòz’÷ àR2ÎúÉ©RÝðíܹÇëIhÓ‹9s5ƒÍ ;Å1wá¡vusžê6Rà[ï)N»CÞQÆ#?9JÆæbv8?3ñÑÔŸDHF¦®IYº.¨Ú)f/N)H÷[Š©[w8—Œ”èhݧŸƒÍ؃ÌÍÅì𡜧¸ÄZóðà½\ù!P¬MŠóŽ‚‘ †üÞÈ¥›$£`„ê`W •ç’?|ûôåÿÝðÊcQ=ÊÄÀ‘Ù®7|:üùijþI±]ü6uôÙ…FP SíAKGüÏ5@dpÐ:ºêÊÍ;ŠšéäXÀ§ÀÇTΦ8C aD¾±5!Ä©ß ÕÏè/z' :èt:S·ŸÎ°]‘iqÑ)KæS²’:kº‚¬šæ–<(äI‚­Á§Ît»§æxçãCƒ¿s]oÁà\·SËgŸÁºxúwÜwתé¿6žø¦ô{Ò^ðØ3Õìð/²é+µaFuUß=ýª3-z“~©ðåÇÓ—UÇÚß¿Z< ³ÿ½ìãCÖ«v[G—¸÷‹ž ¡Ê%ƒÙ`ŒÐã;’ÉêUåäà¹3–é̱œzs,[§÷Âk~ŸÁe˜bÀ+I«ˆräܧ8õá­ÊVo!&'šÒZý0øï}L‘IvGÔƒ¤Î¤7 [&ŒqÎû_L`#Õiaô”äà¹É¡®6̶P]P9|n-M|Tú{çñ.ø$Ö\2¾ÞÕv´ã‰ÚÞ‡Ê;¥ÑÝy Õ—cð¹@5ÔºYqEb­,fp®qä B<:x …ôÆ#jJ ÎÐ…O›³âDºö5¾äÔG_;£§ç+:7´%ŽÐ%õ¶½¸?^hµÛô½EU¾åD™&¹ò}{[FwÊ8ÍŒ'ŒAÄÜå[§>¾ÿúVûþߣzunPç)tøßÓû²¤·[Ϋµ dÍÙßÒ‰´1>öËÞòmìÑ^ñ¸ÕæJ-ŒyäWÍ¿M]xNs+çÞ¦øÈ®óþ|xu@O®”?ªw‘ÏäR8ÒøWÔÕ+­—Ô‡VOõ¨_ëÜSš§À[ÔÕ{×Ô!•ªù嵑:ŠUNoQׯP]R®ú=ª·Ž¹ûr$E®¨³«_ÞIUupÁuÎÆ7©«WÞXù\jž÷Q-Æ?¿²öÍ}W륯©[ôS„OÔ#iñ-êjéé5õ\J=ýyTkGë5—·ç®^¯< ²ðiîÖ¦ó*óå¾×:\¯¼3õÉ#¯hšæžÏ…Ë}×jKFêï‚ÿ­ÂëWì<üÛljôÓ9ùø;àìðè߯0Å_÷ª«ÛAÔxûî[2™ÃÝœ:K &(Æj—K+‡Tó}ï§ÎR2³ØóF¬Ðut‹CÀåkáoS¿·ÕŽ‹’1Kgƒš@wòŠ€ [TbpºsrÓ©W;>_”ÐÌI£³é}¤\zöè¤yI½Úñ¹Ñc±”g–KîWvNÀ…%4ο=÷jÇç4~1è¡f]#B_ùÖ ó6õjÇç^–™žP©‡žGdð™º/ö8]¸¤^íøöR·ÀdUIô£p!—è§•·¹î´ãsðU|<«,¥ÿåBpáÔž —Ô«Ÿ M d£¯¼ÅÇJø¼ïƧ —Ô«Ÿ#G\ùêÜ¥Ù\ð|ÎG"ãšçO;>Ÿòçä½ÓWZ.€Ágk@­ÓÞ±ïß«¶[«2ã‹•ož/ƒK]çâÛÔëßV¼€úàè%ü$ªØ÷÷À«YWìû{àÕ¬+öý}ƒ¿Wæ¾§¾­Wí;],v>]¶£k&ïØ÷Ó.+îõY$ õHJIÀGûN|s¦Q®­Ìi—%õ¬N $ì;)êtÖ\Q‡ÏÙwø¨}§–mïÀçì;|Ô¾S]s®ge÷ð9ûµï[HÐîNßÃçì;|Ô¾o{ëš¶tŸ³ïðQû¾…ˆf¢šHøœ}‡Ú÷Í'ëêq²Í§ì;|Ô¾oi¦Â?gßá£ö}óTÕØæsö>jß·àS€Î´Ÿ²ïðQûN½ªl=eÁû”}‡ÛwªòoŠ®í{ûêÒŒ·…¸´ÖML.r§øÛ µ½”Æ/©±óçl/|ÔöR[ º ÿ”í…?°½[IísÇ_>×qüåsÇ_>×qüåsÇ_>×qüåsÇ_>×qüåsÇ_>×qüåsÇ_>×qüåsÇ_>×qüåsÇ_>×qüåsÇ_>×qüeÑqœÃ‡¶Ì³ºÐÛ2ê‚7È—No;,ÝõÆ-ڀꂷDœà‹–ˆþ|¡.mç8|èÍ5/Þ›kX:ÞÀh‚/qøÐÌe6z3—ÁL¼¬•Õ¢/ưòwVFo10Ìýûzé×­‡¹ó«§3\¿z:À­%nq o˜ûãÏ5Ûè—¶ù÷ëÅàÕ‹ãà׊zQÜ>¬üÝšú¢xاåÜ_›G3¼M½…]¶;Š¿MmÍ0ühí;œ×Wì½3uO£~»ç—‚)-²½ò¬n—ž•ßü¹ ~èÊQ£ r‰Çg¬é‰&Œ¾² ÷½P1æXö·o‡Ç®÷K Þ˜áãÜéÕF8Zºs÷Lj8÷ðvé¶¹7gp¬l¡Ô(º¿Ø¢‰×Ñ«\i.ãL£=·ÇÿŠWÙ‰Œ¾çŠHs,çÍò1Wx‡×Äé:–s¸”*œmVŽöŠ@þæ8Ý<²¸?µ Ã‡]ôž.ÕqѰ‹În†Šýò WüãÛ¥ÜæÞ¼âaéæw¡W2uǹ/ðè^/w±:¿‚U¬?Šl÷šíâà„¯ˆ¼.‰˜`÷×>'¼]õ‘æ‡ËEÏš£c™âªw"£C¿Ü“ûïúLèõнWqèÙž nÿŠHóéÇ™XjÊnöKEŠÛ߉ŒÁÁr¹¾k •pqñ¬zä¼mã–Pbjöïõ*„¸]†}Š*u›¶‚$ ýHoRyžáJr»Œ@õºÙJ2G¥ §NUƒ1•X Ó^¯˜ÛeÓW¾†-õ¶D7……] °•bK-L{½Šn—ñ£þ?]L\vGO%0bb2„O+"-6šM²æhš/LIí–óëUu» ²úöÖÐjTÛiËÉÙ(Õö~¦½€÷z£Ý.c´F½ýi¥¬ô€Ì5æ¼¶ÀnÒ0è`x»?¥¡Ä~·®‚~§>ý@¥Æõ’ôk‹ uWÒžVBGæ9 ¦J}úa ÞÂÊY»&×xs]çòºx‚SŸ~¨·¨Tèv0ælÄöíŸ%õ1¼U©O? ÔŸŸîT‚|œƒ)qo§¾è½Î©O? Ô[L,¨›MÔÃæN}ÑßšSŸ~¹®†Ô“ÈPö8JR¢nÆuzáëÆê-"ŸçîP]ä¨íúÚ«Ô§ê- Ÿ©4ûÿ¯Äüú˜P©O?Œ<÷¼Xyz¹'é)ÆóCbAçù»µÄµt‚8KýTõŒÛ÷!/¡ïû÷5×µl„ÐuÔÂÎê ¶ïCZCß÷ñ‡‘ú¯o+3Aº^Ïw0êCVD§>þ0î{Í…Ì+o]•÷‹S©×E£–aßÇFmóïWÝÁ ÅÂîýuqÚõ:ædtm3þ0­üý"p¥–c^OÖð•WÛŒ+¿æù»¯ ‰Cÿgw”\ãyýê÷Àówë¹·< Ú1ª,zªˆYXýzí`aŸ–ûþü÷ë„ïB{µÂHüp³•þã¥/0í9¦° ?þyîaUûa†y#ä:‡á4IÜÏ_\YQDàê·ç–pùÓÁ?·Á³ŒF<ÖõåsŽ"S,›÷g§Ô1#Tg5Ã/§øóבÖ3Ù«qÒ4xÊÚ‚ò*à|ŽÁ@Ø~<Û²ÿ§_kq:\É5ÿ¿‚·Ç8 @ÞZ3™Çh©ç…/EŒ‘^k³¾öûèð7Æè>²Žõ­;7Ãyz7›ZPhcÌ[̆ѽcŒ-µ÷KIò…­ÖsùËÃæg¸’#ìDZzëÏd¦ÁÑ8‘ã¾ö¾Ãáňz,Ïð1Íö^oi³™¡è³½ëÑ4¬›£¹†€óÍ¢¹(ÕûåÆA”Ï…7Û WÒw}[Öí]¸9 ÂÙmaLì?Ìp%}wL+tþÝþº¢~TžhÔ÷Ûg¸’×Ó©÷„·<Ý7ºS®2×¼(ô¢Q˜á_$|y‚ßW¾%ðõýq˜›³qã|¶g¸¤~•a§Þ2{ßT":õ›F½Á•ábåùà[fo-ÖãÊ‚Õàºð‹Ü¡¥ëĹ^ó~z›ú¸¦#õ§·©?Ô 8S«•žÞ¦NÍ VÔÞ¦þpA½eöÞ¿ò^²šá+/r‡ëZÊïÛ8ÅK‰kp;ü‹„/K/:õ–òû3cÒàcî°.ð[Ö ¥üþŒzƒ¹CKÏuúÝ”]Rú~úFOÿþ÷[_º§o£™À8®“ÿòô8‰uÊ]+|‡q‘ëâÖgâ>J$xNÄ­ˆÄ¸U1iAü­–ƒýz7Û5S;ÿ>·?-—ë„?ýók育¿Š`gøÓoñ•Ù-Ÿ¾=ÏFÙº¾Bþ£+”€¯_­P¶×á£DŠáDŠH1韾DZfàÚ¸$6h_¥kÓ’Hj\ûütþ±sÔz¯™~úõϪ/Îó?ÕÛŸùfúêîê«õz£ÃgÞ¦´N=[yþ݆òûb(¿ÛP~ÿÉP~_ ÅÕÓy´…§VzXîÜìÔ<Äm†yøgò” …þ|”0FopNÄQϧRrSU+½Ÿˆˆ8IćýÅŽlšjJíáO”ÚCݹ\'üájKªZyÿý0E/©£Ù¸Žá£DÂ@$,¦ ËòCU+ï'"Q™‰Ë[ưŽñvú(‘4I«™PÊöUþ(‘<ÉÊL<õøal÷\ –ªïáBõ=ÝbK‹0«Gi«ÁSɰ|m»ÜábðûÛ©‹ÁçžFzPs~;þnŸ°¿ ­x°Æ "†?—Nßtx˜¿ oÜ—Up o öeµï—ðæÉY9ûWðŸ-_4gޏdül È9]:}õ]KN_µD”LI±¯Z"JäaùW-+%óSý«—š¬R™©ŠÅç=ŸÍ‹ý‡þòKS]õ+Pˆ¤lŽ7ÂD$·Ec[g·¿&â$ê?F…ŒhšF"6¡ë™Ci—§:üšˆ—DèÙˆ ¼{I&Ÿ‰‹ûwíùê¿&$…ú[ÒÐi&¶½1dúL»ˆDI$z ô¸&ìǦŒ¤ìéñˆ y†_y¼R>¬ã‰?#å€&Õ·Õ:\ÓÚRæJEI"èhГâ©Þ\îðK"WŠìDè’È•º“Dr¢2Ùdk¿¿$r¥•™úµím‡_¡«ðÇÖ-­ÎvªN›zÌ: 8?ýÞ1£ë»7çm¾Sf¾éð+õŽ_;¿4mÃÙ"„ä³€³¡ô“ze‰¥e¨'ƒWi¥“ ÞWèpŒ!нïå°føõ+G-Íï8ÆH5V©Hø°‹¾l)‚‹Ógvîðë1V†\Úx¾B¨?éɆØÚ08[®ÆôoPÿ¯q÷xtB²ƒ"†u>B›gøÈôU9ßNïè^|ò^ÂYAÝBp6eØ{–òz-ꛞ¨U®€³º*Ê4§bòÙL‹•<ÝÒ­ Ycú ç¥I·‘ÆXB»Üí{Up¤¶éÎëkn1ó}žØ†úÀúÄ^ìpV¢BÍDªxjW­Ù­–à鵜{¯³ —EMˆ¦7›egä¸(PÄÊïmÌ=´£ïmÌ«^ã z8s<Ã$¸•Yœá’;À7ª¹ÜŸáóí­fwX¿gÆÖaœÃ“í ªxˆ¬§j‰mhãÐjM |zÞÜô"üÄ{BBåá%|xÏК͟ï_sî ÊrWŠ—sïÜÓlÉæúpçtn#©sîpT^\€‰;öç*P¡€ îëÚÃtmS§£Ç-[Ç“€£J;ÞŒðÑÄî&X¯q•oç†Þo€töñãlãö&ÐýIšçÕ°{ÔíÝñ¶g®ýþ†NÂæ‚  P˜™k?€Ê)KøÄ\–ºL¸Y'­3Lcm6w΂~£Î¤%ת- u΂v‹©5éf:‰˜ mr{˜ŽÍ³ ½7Lo„ßœýø¬Ð"eeãX…êvGTfÍEòŽ£Kt¸àMƒ+TÕcãœ1ga7‡f1Y]sù¦Û»#+xÓœïÇ •Ö;ôsøñ«€£W4—¹XI}PP8øH÷¶A–÷í™,_¶ôbc‘ÜÁ.‹XºÑë¡—>SJ0q)>çkvøÀô&S,PÄöfzYÚ£# .·…¿~Õön:¥ÎÀ.µTl逞¹ 3|öNÈCµnÞ8¬D&Ç øPIO·QÈÐô^E¥>£“˜˜²ï¨™€OL œoŒ¥Öû íM6ø»‰ƒsöI(K=ò­—ƒçž3ô€­`›¼y´LV®<×0–žÍAÓ[F¶Áÿž6—¨‘“¤>jT»þô7G¥pC@γ`j9d3h\‡WÓÚ­^S¹ñÛ²·Gånlÿê]…kÿµÊ¹«ºÿfÓWïªäúïR¬ó«7J¦ªQë–®*˜þkõEW•Fÿ½Q*T)ÖšåÖû[í«§‹¯Zý‹r‹ŽQ¬u*W+ÿµz’«Ê’ÿ¥!ó¸ôŽé«¦þÆ Xó«[£ëoU7Ð\Ä-!\wtéAÀ¥•µ>Lú9G×á]N>ùv OlrßΣӇq‹•ðÁ· …œdymèWÖÜ >égRà ¤oG¥å9Ë¥‚Oôo0²;^÷™}»bSïlðL?ïþ#Ú©ŸÉo !ÈÁsýLYääÜùÐ#sú<û80êL?²`†½”͇@/«(sÿ5zþ½×,ô3cƒd›)vh»§oG‡ ÙÜߣ«Ì2^û»äyº0=Ã…ogQ0ô€Ä9/¨+Q aâæ²Û¼Øßgïð!lI[D×ùèá80-®|ðÝáípÆ´ûã3]F?'I ÓË,¡ES>0-lôJËÑÏnH’Pz |{i®ÃÞÄí J©Hzw4…$áC@B9 9'’$tKØ›(áœ7=M1»èfv¤›UôÚܸ!XÎ(qô½ðXqQ¬K'|Ú 7ÿµM/…^òfêAS¹ÞCk5 ’[ÈÖáSQè®Î£®¨Ûû: >xÕè7¡S4Kd¬M!nNi‘>|Ÿ{BÖFÙsGcX¦¨)E©Scp&{–k“YBTiè¯&¹tC–n:€‰aâyJæhú+î>€ÝR*glr¤½Fl%u–K„@m^BD‘ ,î[êyºÏj0†¼J!Í’¤Î]9w.Ù`¼ê{Zƒ#¢Q\Jrð\k\¡|>…1(ꀇ¡ d›Ç1šBµ—öº|™_Bç¢=_yb¼É|)26µ8¶´ì£®Î1 h1|‡KÉ€Ãua¸Eó¸áŠô7‹;| 1-Ä£õÀ˜ÕŒûûl^ÂÙܳC˜Ãù†ÜèÂdt/rK.w8·ÈóúÇŠÜçñ@›i^@‡Ö€Œ‰=ìمɾ½0È?º0€J×Ì©Ó=-‰®£•ƒ$#a0–›Í„CY*>ÖkKœúbb|“…!0Ärß§ÓìM…0Г«½Ÿ0ƒ’öÒ×÷fù¾£çkC+‹ìp)ÆÔ‡8þk[?Þ²¿’ ëL={ëp)=6=À}l»v¸f3¼äy·å”›±ïp.(/>B2¸íhìQÓ çsOt>‚Â_„5°[t!Zð!ǨO“=ýcn H!FÎà6D ¼sŠ5 ã˜¬PçÖ€bJ ?)ÑKæEü {þÂX‘¸¥K^¶  $à“ŸDo Ú X›žGô`­Ü¸ár-~‡TȦ¦ÎÛ®ŒÍ–L{8'-g×@’iã™q¾ l:\2m.3Ó;Bʶí{‡'ª4ÔæÙi¹@KK/àƒÖ¦–/)F71-Žgs€ñ¬¤>¸0·šó‘ñAQÓS°½ƒ.ŒGµëìñd뤨9ÞYRÿ>8y­uoyÌÓi>u¶éðá8”žºögÂq¸¤ONLêG%>0-…¨Í­âÜ£çÛ*–øà™soNuŠ8 £æKCÒ(àSàibŽ{_2y€êM“÷¶]cKKž,2© ™…ÁIZ5"õ®bt¸ÂóÇ vœçC eÞG<•„ú¸> :v’ÙËA­¤>%ÃQ×@ôÊá¾MZ¦ÃÙÒ%Ú8ôBTœÔ³©I\‡Ÿ ÙÇC´\R"ËZ Üácæ‘ð>zªÂPèéç,vø˜y´[‰éˆ9æÌ#:ôÍDv8[ùãæ)ëª á¦„$—n’ ŸLèNeª/ºsê<óHþj‘yÄ•/ij õÇá.}AŸ?ŠÌ#Ðã˶½"©O™GKSTN†(ìåÆ ’A·2ó)2“0¸`¬¼Œ@ÏuÖ“¡ºøc“¤Kk`Úã.%#%¥d ã\9ùIdw P´(/Zô¾²SЏlqÉKø ‰ÊuÏÔî` 2>¸íŽâaåHœ*- õnp¶ò‰2y.Ž%È—¹A2ž²t“5°.z/­A@鬕Ԉ侵@Ïc˜ÜEgðI,i}+yžÊìrRÏ ¢¹µg-Üġ…ƒWX»´,Y[½±×µÒ÷.YXgm. ¸¢ôÐÚÑlè»"©Ï>¼CŸSï{†½€VNÓácài©æ&ÊB³”‘=b«äëpx"w8tÏC™cÍ´ŸdÔùÊ—¶ˆ^ž¨bÌy‹h¬Bkm éRèÏ¡²ˆ‡nr”Ô‡Æd’ølñµ—vrðc²Å£iC2†òFäÍäû™I‡OþÌ~Ò–·ƒôâ|bmrâû™V[½±½ÛõIjhgZ ¤°vÎzÒu£ÜáJ²ˆJ—ݧNL>kí|ökš«ä¥!­€O’%ÉJ ˆƒkÜÑáS‚Þ¤t´)f’*Ttú¡Ô÷µÒ…*ÍNglrîÑ?µÊÊÑ­§êUëç4d ©Ûrî“?ƒMRsò¥WÉ1ê\2ÐUÖQßH¬©°[R¢Û‚¼iÃ|’J8èMµ7Ù|ÖíèIéÏÐÑ:@bî2ºE«Þœ¦º.cëÁ7$£;Œ4Ý_8ªŠ&2£S —ñÀùôš’Ÿlg>ÉON$¾z’2øAÃ$:8SqƒÈÐÝh!Z‡OÁq¡{cQÉb‚ËÁñºúÈ›E9ÇÍ4-+àsßa|šeé ºi¬t½ÃÙ¾ã¤7ç(Å®ä'm¢˜]À‡:Bt gÊ,hð,†½ÊÊ3É £PvwãfG‡f‚ܸ§áàÌàˆ=5ÙB›#¨Kw(Ú–ëlÓÛb^K†iù¾Rò>iytÕƒ™—Žíx¾Xèµ?> ZU—DudBwÈÚ¦tø[áS Œt·é> º î8o®0ˆìÙ‡Ÿ€œ!µ²:àß5ÊàÇŒ(¥}lRªþ©D È¥î„PÒʦ"ª#K*TÁ’$|(wÀ¦D«Ÿ«#ÍžCPæ>fDaOr Éðô´}hnp‡6-–Íç)ÿäMalƒ€ ÉÀê>WØØ²õZ2 ä®ÙŒÃUŸ®£í¡‚p!?6Û¸r³‚€óÅk¼‘6ãp”º¯ÝÏåÇÑ•ds0לP-(ïbéf›‘Qk§¢¬9o{!C‡O9¤ˆ.Ó‘`™ Šc@è|’4XpÔuOi#ºWÜ´;õ±BÈç£ÕD¢U?TáÒa”$®,ä\6hÅ%õ¡c$ tSVDÆ’"¹nÊ!!gçC'qc‚aJ fí’ú\½fP¥é U°­b» yì3|[ç&Ö ¤ÔAä¨ÇÖÚƒ€+Þ” "mäÈS1-óÒᛢ+¯âtÁÒu€ž‹îð¡Bý—¢bL½‰“[hÞá“1A‰‰´+t.©OƉçƒig*XÓ®ª°Á’³ G.š‡æÑÿ•œÜ¸¡6ºFëDݤˆÁ:+©?W½uv˜Cób0‚¶ç}u.š­ÄãÚtXŒö¨=:ÄàÃñ*«0ÐSª–$#V^HFÎ6t7ë¾¹Y÷ï• Ó³¶¤H†µºdt7ø×ý:4?üØ!#jèöwkÌàs€±õñ\íÀ´¨³)& 8?ÎUš‡”B†”}ŽrîÓ™0ª„ ÏǨÌÅ¡•Iqp¡ºNºh#¢æ= ^Î}8väœ\CF”záC¿¼×áÙð>÷èfužyY>1'ï^9C7 R2Q–µÑÝ¥ ¸næàýí´¤ªóØ-a£9¶N¿fZÛÓwKuîÅ;de¢€+L{T"Ì™"Ôimî>U¯yŒIJ¦hŸj™]îPçÏ#ˇ»uø”6B/Öø ]ª[ÍtøTÊ©ÇI<_¶”b1rå9Ï':€¬rÜ㬔¹OgÂýk"S„Šõ´l3ó<-\MGÝsk€Lƒ‹"ß¹£® ƒ"pZzÝÐÂÞŸ\ øÍî{ÊÚŸ -&lzlØÿF<ì\VæÇóʨ¼â=¸äù³&oªkö|;Víðá6 šÛbÎtÇ ç©°¿¸P|öTP#º9Õs)¨‹­¤Î=ï¨yבÉyž cóþ:œ"øˆhjf x>Óñ¤,]çyTǧ”/{ ÓS?•ípÎó)Ñɱ=Ný=¿?•›÷×áCNp‰µ›ÆàÁ{¹òCª4 ÀšçÂþ‚á†ÓÞÈ¥›x¾`XêmAWL=4DôÉ‘O_þß ?r§á §ìn½ÐÑáÏOSÏ7 M¨/È·©±Ç.e†¬) õ %q þço18÷»éHýcå ¡t*à“ßíc*goŒ¡`-"GØšFáÔï†ZYôÞ¼•tÞš©i†€O§². ÀÈŽ¸è”[ò)YIõ^@¦Em sgdyòëÀÖˆ‡SgúØS÷«óµ€ÁqÞù©ßgp®©Ó§Ï‡ÈÜ?<ý;î»kµ×_O|SÚ¾h]É÷‹ÃÕ§íð¹c‰ÖaaÅí&êgqÀïž¿~Õ™—)ì¯ ½üxú²º´ˆóú½l áCÖ‹?[Ë—­÷‹Kÿ¡JƒÙQô»Ñÿ:܃É5jFãäà¹k”éD­œºn¬k¦—MkZ›Áe8`À+Ùˆäܧ€6Y” \7“åÜçìNi-!îžÇ:ºÒJ8õáÜ-ÁVf"šÒzy0øÐî-;L‘-v·Ðƒ¤Îä2 g•0–8oø0QŒT:„QJ’ƒçf‚®ÝÛ0·ÒAE@õÒ¹u÷cðQïÕ‚Ç ¦“ÀržÿzW›ŽI{£ï”N"ty-TÏŠÁçjÈP‹4ÅU ˆµ@•Á¹¦Å‘'ñhÑ3TÐ[FÐnµqêCG º¹gsV ? £]ã8N}ô|3ú½q¾ªqC[è€XRoÛ‹ûèá4{°MßÑ[TÒ[N”¸‘+߷סžÊè§è„˜»h.]5íý×ç°·¡j'‹Ö4#Åàøð”o9’Áûüe.˜vàQ½[5èù‹ÆÚþ÷ü8½\]= ÖRŒ5cK'Ò»'öë¼òÐÑ~í¸åÚñò#¿LümêÒqÚa9÷6ÅGv­óçû¨:oõxùQ½“z怎©/©«w/©­¦èQ¿÷·'14·¨«×Ç®©C*U¡>ò;P#u”ʜޢ®_ѹ¤];D{To¹s÷åÈp\Qg¾>¼“:jú$à‚ëœoRWËÖßXù\jÖõQ-?¿Âxþ-êjð5u‹¬“ð‰zĸ,¾E]­²¼¦žK©§,j™d½lñöÜõB¸ë•GA¶>ÍÝÚtÞu½Ü÷ïÚ øë•w¦Þvxäå>ÓÜóyâ¹ïZEÆHý]ð¿UxýŠ/û8‘~ &ë|œåüûõ¦øë^õTp2ˆ:Çcß}Ëùrø¯ûSg¹?ÁÅXMâri•ßjòîýÔYf{Þ¸ºŽî%¸|mómê÷¶ÚqQheé¤NóèfXpa‹JS÷ÅG—Ô«Ÿ£fê&–¬¢*‰~t.äý´ò6×v|ŽÝŠgm¢ô¿\ˆ.¼€Ú4â’zµãsAGlô•·1Y Ÿ÷Ýøã¨à’zµãsà‰+@{¢ü›€ žÏüÛ<ÚñùÌ='ï¾òÐR >[jŽõŽ}ÿþ ‡f|±òÍóep©ë\|›zýÛŠP߆»„ŸDûþx5ëŠ}¼šuž¿oð÷ÊÜ÷œ¸õª}§K°N§ëctÕâû~ÚeŽ>Ïò¥I) øh߉oÎ,̵•9í²¤^‚Õ©C$àƒ}'EÎR€+êð9ûµï”ÿ²­ÿ9|ξÃGí;Uçzjß7OeKm>gßá£ö} >èLû)ûµïÔòÈÖCܸOÙwø°}§¢ù¦¨áÚ¾·¯.Íx[ˆKkÝÄäÒ(wŠŸ±½ðQÛK§%5vþœí…Ú^jáBW៲½ð¶wsõnïË»:¿¼«#ñË»:¿¼«#ñË»:¿¼«#ñË»:¿¼«#ñË»:¿¼«#ñË»:¿¼«#ñË»:¿¼«#ñË»:¿¼«#ñË»:¿¼«#ñË¢#ñÌ…z×yôz7Í™ õ‚ÓW‹fjÓW‹îUóèõ~?ÓW‹)³ÔêÝ"æ9êïçqéw˜çqé÷9ç¯ô»mó¸ô{>óªêWEµÌ{ž£^W;sŽ^‰8~õÚ´éðÚ!5¾tùx1úî}¼2õšáŠZ¾eDž‘áözô8Èlޝ(Ò3è¡å>…žn‚£Ç¢î;õ¦äÇãk PÀìnœb:¼iÿŽÞ–ÛýoÅ@tx3 ó} Ç]³ámHºvàœ­ÏÚvø0wïéöÇá2(†§Soæf<],ôB”n‘ØÜ«…Kgýq4¬˜ª]ÂM°{qņux³\ãàés´QŒ›ûýw:uÂÞ«˜«×áÍÖÔ-õt5{ý¸bÙà¿kL nCÿ÷(–Qì$£®ÂmÚJ¿7SP h‡?èp³•dŽ3>Ų²ÁW{:À=) ù\ù‡¿/àÿÓ7Îew\ÏTlq‡7 <« ªŽ²Š‘fs¯¦y™„“³±èֻû_V»ô¯šeŸ˜ËnÖÛ½U³bü5ø…‹ðÚAÄ•´GŠïp«À/<Œ×æWÌb’\Û¬¬Òákåµ¹%BÁ˜½½†â¹Ü*ð ÿæõùy¡©ä#Å¥8>· üÂ=zmN‘ l6Q÷›nø…wõÚ|ª‰)Z:r>ŠÛu«À/œ³×æ’Í3q('9ê^Û­¿ðí^›G7 ¨HöÔ›âôÝ*ð ×ðµ9„b¹¨qzÒ}Æ[~áY¾6R°°¥þ[ºËy«À/Ó×æŽ ‰§^(V÷Xoø…_ûÚ¼Y©áHéï­¿p‹_›3ýkóä ÓC NwöoøEHðÚéÊ¢?XôXáVƒëůÿýs|Šÿxüv¿WR<ýú§W†Öª×½r}úáÖF¿Íð=¬àÛqwowÙí8'áä™_¡e«ÛÊt¿LÀ_§¯n‚Ùbuùô‡„“ƒg‡5Š{¢lwÝÆYùZ¨Ìà⫸_ÆÙ½Ÿñ‡P»Š08yõ«÷KTÅVŸÃËÖ$âƒÿÑ©ºçŸÊá fpº•Xo28ÙÐú•³›ñ¦nÙ=§EÀÉp±¯b¢x©š$þ½#©“µ°ã¶Ÿ:ç®ÏмiÈ%Ë¥#}~eCÙ,½ØUùVx¤–(¸¦^ÀI/vê°?ó UãÙú_ÑG¡Sऌί¼¡Ž·æxÉ`W3mK躅/YYº»A22 ªl×Y¡; 9¹ïû+ñV)}zúWûa†?ü»‚ÿóëˤÂ&ÿô[|ÛyOùïþ:À¸' ö}¿ Ծʨ+kÛµÇãÀ ‚N™Z+¦¬Ɉéß®·?ĈgRAŒÁ»d zEÙ”ÞTñü»ÉÐK¾5gð.··×‚sý‘Ä:,¤î´æ Þ$ã¼è]­ P…‡€ã³órðM2¬u†"½ú®u†[6À…z—ŒÛäßè™ðz(pþ]—©u\l­ã8õ&Ñ£¶ÁÙÄvÍž ——qe£¤^%ÃDzª %ƵV¸'u“ö¦cÅ Eý¥IÆmÊ~Ï/× ökUd ÝŽ/­³Y‡ïÖtÐ6ȳ®Ê¼%2»`"2ÿ¾ N‚5|E½ ª,Í?€2÷¿ûW–Ž\Âδ»,A—¥ˆ37’iI°àäydÚ3ír=tY*ɵn˜œ: œêÔäÍ{ëM¬²Ôþ®£‹°¹H®#Á:‰$GݽÓÙ1d NBò\HN‚UÇHdÍÖPY¢·è¨_‚"2$X'<¤LÍœo—ëᔥDíFBk/Ì©ïcŒöèÈÒ.ÔS¢7,é…ç¿U"Þ;J<œòN²t®iÂaEëÚ%k®mP°".䄼Ò.KçÈï¸t$Krðw_Û©! 5Ÿn—ëxÆí@ApAÚ¸½©çͽMuõë`Pÿ­ ÷ë¾¶•¿-†.Å–Ã-|í?P‚Ù•ŠtÌÈ}c_”ê½¹Ñî±±JqöÒ1{¿2™š÷V †£v¾+¨š"îE(»w±ë‘ ·ûERG±|Åú\º]Û¸wi·Ò6î]ÚføŠv®j7Ùw]Û¸þç‰e÷ÿ×6®{¤ôĦUÛ_£Î 1Uù“ÁÑÂÒÕ=]Û_¡žÈ[F¶=ïPÿ®¡®V®õŸ™´ÍI$QÛaˆìwò+Ú}º-ëtmãšS¸9‡ÒÙŠ[Ü©mðOⶦ¨Úæ„GjˆÂùŒiw²½Ï@ §‚ªm"Ð;@¿(ºV=t>“(‡âd,³k›“H°ÑQoØÞÖà\Ó½A )p§j›ƒ:õ!{Ãõö*ÛùC ‘^Š4Šº mãªB ›óÁ‡Ö¾æ€g´<誒´›\O[µ{—¶q+mãÞ¥mÜJÛ¸wi·Ò6î]ÚÆu¯?ã÷6&»¶–Úû©Úføê\º]Ûøwi¿Ò6þ]ÚÆOá@¬ÚÆ¿MŒ—ë©K¹;^[jÍo¢®mίÀïFÎ¥$*0ÑÏO6.´Íñî+z†Þî‹ñÏ¢K¼ËŒªmjûzÔžq˜š¨Ü``ì“/AÕ6í>±£ÿlÜØÒµÔPˆÚ,§xV,ßéÓ¦ëzŽÔB!5ÔÛzNÚæ è“Ñk‰Ñ·ão‘)’òí=¼IÛœDÐ9 ôlœžH>$*12N÷m"Ô=QyUŸ¸ÝczÕS ‡vUh¶óa–÷B5`(%.“îÛø‘5÷N ó13ié”òUÒ6ÅY¿_0ÎJ÷ö5ô晪mzj/ÓyqÜHÚ¦€ñª¶™ªDçÃøj›Ö©xÒ6¾¦WèåQ{˜ ‘jFec“ªmü¨m(ÞúòôòóåŸÿ¾Ùÿ½ÿ¶w¡õûþû¯¯"exsc6å«çw|Egëoõëù=_‰\¤ú•Ìk*_=ÙöÕË3ÿŠZˆL_%ùµ™¾ ’"õy“"UØ÷½ø˜öDÇüJˆíU~ô´O‘_ ç>˜GÓøé«aøh¾ýñÆäôÕ0|j¦’@pÎ㘷[­*O%¹¸7Šß­öøÕJŠAóÞšnüªç•èo%{T­_±¼R†°Ñ›²^¬êcO2A´öÔÝA|ÅÒ¯!ú-Qç¶ Gß2N¨õÑYD%%Åž‹µ¹"ø GßÓOÈ -I>|ëiŽ,‡’ ¥ÎŽ§Þ§qµÄ,ªuJ”ÃzLãj¹(ÈÞyMEΑ%co¼E#žþzìÉØ€+EnóñàÌD±efmA“LÝnöö—Óè[2ÊyÔõîH‰L<ÁÒ´@å@1Êõ:n‹Ú#¥–:EÄ |ÕÙR‚JŠ}›ÆåòÕÃü•Ó¾¢zR>z—U£P#xWDïŠà]¼/"€¦û1‡ôˆú¶¹¨Ú7>|z(輨¨DýoÙŒr¿ˆ€-u>ºrʈÞœgU€o0š‘ò÷ØÄÀ·ß“ô^êWÎG9úGv:VèYsK›jDpŽ ½.TŒwjDPO±è9 êîÔˆÎÄ úbÁy*TÒÞ¥<)Þr?7Cß½x—Œ5"¨k_¨_.SԈΜݯÓÇUOÔp!0êA é$=öƒ3ús¤°¼KjDp~éez=]êÚzìüR5"€ÓÐeêÎ >X5"¨F¨ƒ<½ïSôˆ žû9jk­ÙCÛÙ0ez!®xÅVØÆ†!»¼¹…ØØÐG€=I—œá õ-GGJ%"8GO/?=ºèlˆ½X•µ926´_lÒ#¨AîFIT zDpnQ´š‹qU6Ä §½A56ô¸ÝBØEDçÉ*Æl¹xãõˆN;M᫾CŒ Stb¶ŠŽ¿eJ9OŒõˆà\ zÂÌ—¨Xs+Uæ""è’FÓ¸½NF F F F F F F F F F F F F F F F F F F F F F Gï9Ú!$ EN5OG´æ¢GÇßBÿ}#Ã_Áñ· ½4ÃÑ™O‰NnÏä-S'u="hEÔçØj~pÓZ¶äˆ>5Úë¢GPxõPW="€jW0¸@¸ˆÎqÊ*`x±ˆÎõ*î¬áÐ#h>Ñe¯hh:í nŸ3JDPgÀ¸¡9J%"€÷Dð®ˆÞÀàyGiW^yqÉuD0|rÖ#‚á+ï­€Hßß½Ë÷wïòýÝ»|÷>ßß5-,á½×}×K™zÆ ûþ®ùþàmÐìÝ0üÞõPäÑçìc EõýÝ»|WOY=ìÁwQ}WO|ér-¤¨ûþ"y‚[Ý÷w'÷zz¢ÌQ>öZGG̨KÀêûך ¾4 úþg‰”a°¡ø­Šúþ Ý)e\½ŠÅ&Ô 8)ÞówV›@ù4 ªïïÎ$2Æ]y?%V}ÿºÖÓ G’êû7V¥‹Ž¨¾tßßét*0:ÅZÓ‚ÓR!®qY? 8Ç•"=çQf![ËéþÓëcV÷ýÝQ*@ÙÚEFº³a ~#_/,|wºÅ­¨v^søþîÈSL9Ý÷¯Õ'ù0(§`‡ï2=Nß(9:ÛØ"寨Y-辿; ²ÝóÖÑÝ÷wçÕŠf×§îd @‹¼WeÃŒ±:½1¡žÄ46 T6ê9Òáû£w´C‹ó‡Æ†TKÛíƒÓ}ÿ&Dô¬ÇÒ÷?)ºXŽÂ,Ý÷?WÂÆ~Æ¢øþî=¾¿ë…Á¨Ç˾^Ò÷wªïïTßß©¾¿S}§úþNõýêû;Õ÷wªïïTßß©¾¿S}§úþNõýêû;Õ÷wªïïTßß©¾¿S}§úþN÷ýÞC¯’ú¡ÍÿìZ+ ¦‰ôøÛÂ÷?e"ÐuIÔ¼N÷ý]«# .Díü¡k-é…ï_Mþ­•ÜÍáû»Óò{j›yáûŸÆ€®æDôÅîûW7"lŽºïïZy± E±d‡ï®Z z:EÉÊ@Ó!¨sa¥Û é`zõµ[Ñ}ÿZ>[hŽÑîû»÷øþî]¾¿ã¾T"—Ý÷ç_Pôä+/õ¼öý‡¯òq©QúþÃW”U}÷.ßß¿Ë÷÷ïòýý»|ÿ>ßß·¿(iZvm¨•CO ù0꾿ïeœFäE%Pÿ[èagtß¿e,˜¨ûþþ]¾­ã¤Êƒ²±ªï~¨ŽKV‰z±(ÊJ8dV¢¿WqãÀ£€^‹\‰þ®Ä ½×¸¡é7F÷ý=cÀý®¼êûû³•.•QŒž÷?GoQO@ŽQžØöwn,:ÔÂ&Y«úþµ„ÐÐK6è{Õ÷÷çÉb2gq­êûוˆè(®‡ž÷¯+A%Ò Tßߟéuzâv¿¨úþçJÝÃÀE9馮гjÑ€2.vÍšÖ>ÐQlÒ}ÿý³²WèÚ·õw¿¡'¾Wõj”Ά9ƒÆCõÒÝÔãr”×}ÿºÝž’.6辿oN*úŸ%Ý÷÷Ç>bäêU§ûþþ¬=-Tq£T‡õ¾ÛÈ^hEÑ•]æý}½ž—ãªlˆQš¾EåTgCÔp¦Ý°P|žŠzµ %R÷ýýa‘CŠº q‘÷?wÛ‚]Õ 56´‘’‰!˜´ÈûŸ¢fÒ¥³Ÿ¢*¾¿ïïßåûóöÂ>yNò<5ÃÔ+_‘W?Ü]ÀEÕ½úa\Tªzõ^zõ÷?¿Ýý¾û¿ÿçÿ7m«vëÛDyLP-1.10.4/Data/Netlib/stocfor2.mps.gz0000644000175200017520000011651610430174061016050 0ustar coincoin‹ïK®9stocfor2.mpsTÜGŽdI’Ð}}‡\ÎìÜTÍL5–Á9çqÿƒLM1äëU= t„e|"žÇ÷ç¿þýßëÛãéÅãKüúŸÿÿ¯«?þóÿûŸ—ÇÏ×ÿþç×ï_WÇ/ü×ݯ_'ïgy¿i¢…6*Ôêñr~yþ0P D-´Q¡ÿ¼ïëó»³ÁgÉC(H$ ‰‚DA¢ Q(H$ ‰þþÓß.î?ÿúó.ÿÖ¿ÞŸiƒÏ™‡&m“¶IÛ¤mÒ6i›´MÚ&m“¶IÛ¤mÒ6i›´MÚ&m’6I›¤MÒ&i“´IÚ$m’6I›¤MÒ&i“´IÚü-­ùòpNÚsÒž“öœ´ç¤='í9iÏI{NÚsÒž“öœ´ç¤='í9iÏI{NÚ#Ò‘öˆ´G¤="íiH{DÚ#Ò‘öˆ´G¤="íiH{DÚ#Ò^ö‚´¤½ íi/H{AÚ Ò^ö‚´¤½ íi/H{AÚ Ò^v’v’v’v’v’v’v’v’v’v’v’v’v’v’v’vþ–ÖDyx$í#iIûHÚGÒ>’ö‘´¤}$í#iIûHÚGÒ>’ö‘´¤}$í%i/I{IÚKÒ^’ö’´—¤½$í%i/I{IÚKÒ^’ö’´—¤½$í%iŸHûDÚ'Ò>‘ö‰´O¤}"íiŸHûDÚ'Ò>‘ö‰´O¤}"íiŸH{LÚcÒ“ö˜´Ç¤=&í1iI{LÚcÒ“ö˜´Ç¤=&í1iI{LÚgÒ>“ö™´Ï¤}&í3iŸIûLÚgÒ>“ö™´Ï¤}&í3iŸIûLÚgÒ^‘öŠ´W¤½"íi¯H{EÚ+Ò^‘öŠ´W¤½"íi¯H{EÚ+Ò^‘ö…´/¤}!í i_HûBÚÒ¾ö…´/¤}!í i_HûBÚÒ¾ö…´‹´‹´‹´‹´‹´‹´‹´‹´‹´‹´‹´‹´‹´‹´‹´ë·´fÈÁÕZh£B=¸º@M´ÐF…zpu1¸º¿_]˜!¯tûJ·¯tûJ·¯tûJ·¯tûJ·¯tûJ·¯tûJ·¯tûJ·¯tûJ·¯tËO2Zh£B=øIFM´ÐF…zð“<øIü$ó9ópM·×t{M·×t{M·×t{M·×t{M·×t{M·×t{M·×t{M·×t{M·›n7ÝnºÝt»évÓí¦ÛM·›n7ÝnºÝt»évÓí¦ÛM·›nßèönßèönßèönßèönßèönßèönßèönßèönßè¶è¶è¶è¶è¶è¶è¶è¶è¶è¶è¶è¶è¶è¶è¶è¶è¶èö„nOèö„nOèö„nOèö„nOèö„nOèö„nOèö„nOèö„nOèö„nyæˆÚ¨Pž9¢@‰&Zh£B=xæ8xæ8šn}æøN·ïtûN·ïtûN·ïtûN·ïtûN·ïtûN·ïtûN·ïtûN·ïtûN·<…C mT¨OáP D-´Q¡<…<…GtëS¸º½¡Ûº½¡Ûº½¡Ûº½¡Ûº½¡Ûº½¡Ûº½¡Ûº½¡Ûºån-´Q¡ÜÍ£@‰&Zh£B=¸›ÜÍcºõnþƒn?èöƒn?èöƒn?èöƒn?èöƒn?èöƒn?èöƒn?èöƒn?è–÷xƒß@h¡ õà7 ”h¢…6*Ôƒß@ƒß@ƒß@|Î(ÑD mT¨w|ƒ;¾ñûŸŸ:Ç)iOI{JÚSÒž’ö”´§¤=%í)iOI{JÚSÒž’ö”´§¤=%í)i¹+@ mT¨w(P¢‰Ú¨Pî wã´Ü>9·ŸœÛOÎí'çö“sûɹýäÜ~rn?9·ŸœÛOÎí'çö“sûɹýäÜ~rn?é–+G´ÐF…zpåˆ%šh¡ õàÊqpå8ÞéÖ+Ç3Òž‘öŒ´g¤=#íiÏH{FÚ3Òž‘öŒ´g¤=#íiÏH{FÚ3ÒruÚ¨P®.P D-´Q¡\] ®.Æi] Ýrno9··œÛ[Îí-çö–s{˹½åÜÞrno9··œÛ[Îí-çö–s{˹½åÜÞÒ-K¡…6*Ôƒ¿¥P D-´Q¡ü-5ø[jð·Ôðo)V&h¡ õ`e‚%šh¡ õ`e2X™ŒsÒ²2_¤ý"íi¿HûEÚ/Ò~‘ö‹´_¤ý"íi¿HûEÚ/Ò~‘ö‹´_œ[Ò¢…6*ÔÒ¢@‰&Zh£B} í´Òò9s|Óí7Ý~Óí7Ý~Óí7Ý~Óí7Ý~Óí7Ý~Óí7Ý~Óí7Ý~Óí7Ý~“–Zh£B=X¡@‰&Zh£B=X Dã‚´,ˆÆiHûCÚÒþö‡´?¤ý!íiHûCÚÒþö‡´?¤ý!íç–{ ´ÐF…úÀ= ”h¢…6*Ôîܸâsf~O‹Ú¨Pÿ©Ó¢@‰&Zh£BýÏŸþWÚ?õoÚþŸ¥åsæ`/…Ú¨PöR(P¢‰Ú¨PöRƒ½Ô¸ä'™½T°/G mT¨ƒ}9 ”h¢…6*Ôÿüéw;èvЭÛs~¡…6*Ô~¡@‰&Zh£B}à7Ðß@~ñ93XÚ£…6*ÔÁÒJ4ÑBê`i,í#è–¥ý`/…Ú¨PöR(P¢‰Ú¨PöRƒ½Ô¸âܲ— –öh¡ u°´GM´ÐF…:XÚKûHºuiǹ½ãÜÞqnï8·wœÛ;ÎíçöŽs{ǹ½ãÜÞqnï8·wœÛ;ÎíçöŽs{G·ì¥ÐBê`/…%šh¡ u°— öR1é–½Ô`SƒÚ¨P65(P¢‰Ú¨P65ƒM͸æÜ²© öRh¡ u°—BM´ÐF…:ØK{©Xtë^Š»´ÐF…úÀ] ”h¢…6*Ôî ܸ+àsfðÖ -´Q¡Þz¡@‰&Zh£B¼õ Þzo½Â·^¼›G mT¨ïæQ D-´Q¡¼›¼›7œ[ÞÍ{)´ÐF…:ØK¡@‰&Zh£B쥂½Tݺ—"-Zh£B} - ”h¢…6*ÔÒH{ø=­Ÿ3ƒï¡…6*ÔÁ÷P D-´Q¡¾|(~ÿ>Ÿ3ƒuZh£B¬ÃP D-´Q¡ÖaÁ:,š´¬Ã‚ï¡…6*ÔÁ÷P D-´Q¡¾|(žHË÷ïÐBêÁ{ (ÑD mT¨ïïÆïïüœ|-´Q¡¾„%šh¡ uð} àû@ñL·|(Xþ¡…6*ÔÁòJ4ÑBê`ù,ÿ∴,ÿ‚ï¡…6*ÔÁ÷P D-´Q¡¾|(^HË÷OXÑBêÁV(ÑD mT¨OXOXÇsËÖ`/…Ú¨P{)(ÑD mT¨ƒ½T°—ŠWºe/¬:ÑBê`Õ‰%šh¡ u°ê VqLZVÁ^ -´Q¡öR(P¢‰Ú¨P{©`/o¤õ[<—B mT¨Ï¥P D-´Q¡<—<—wœ[ŸK±—B mT¨ƒ½ ”h¢…6*ÔÁ^*ØKÅ;ݲ— »h¡ u°ØEM´ÐF…:Xì‹Ý8!-‹Ý`/…Ú¨P{)(ÑD mT¨ƒ½T°—ŠÒº—ºçþöžûÛ{îoﹿ½çþöžûÛ{îoﹿ½çþöžûÛ{îoﹿ½çþöžûÛ{îoﹿ½§[öRh¡ u°—BM´ÐF…:ØK{©ø¤[öRÁ»y´ÐF…:x7%šh¡ uðn>x7§¤õÝ< "´ÐF…:X¡@‰&Zh£B,ˆ‚Q|‘Öç-´Q¡œ[(ÑD mT¨çvpnçvxny[Ú¨Po«Q D-´Q¡ÞVo«ã›n}[Í>-´Q¡öÉ(P¢‰Ú¨Pûä`Ÿg¤eŸ¼A mT¨ƒ7#(P¢‰Ú¨PoF‚7#ñCZÞŒ V&h¡ õ`e‚%šh¡ õ`e2X™ŒÁ¹ee’ÜÍ£…6*ÔÉÝ< ”h¢…6*ÔÉÝ|r7ŸÜͧwóì“ÑBê`ŸŒ%šh¡ u°OöÉqÎO2ûää'-´Q¡N~’Q D-´Q¡N~’“Ÿää'™Ï™ãsûÀ¹}àÜ>pn8·œÛÎíçösûÀ¹}àÜ>pn8·œÛÎíçönÙK¡…6*ÔÉ^ J4ÑBêd/•ì¥2è–½T°OF mT¨ƒ}2 ”h¢…6*ÔÁ>9Ø'Çç–}r²—B mT¨“½ ”h¢…6*ÔÉ^*ÙKeÒ­{)®¥ÐBê×R(P¢‰Ú¨P¸–:p-uàZŠÏ™É^ -´Q¡NöR(P¢‰Ú¨P'{©d/•“nÙKûd´ÐF…:Ø'£@‰&Zh£B쓃}r\rnÙ''{)´ÐF…:ÙK¡@‰&Zh£B쥒½T.ºõ_Jc‰€Ú¨P–(P¢‰Ú¨P–ƒ%Â`‰ÀçÌd/…Ú¨P'{)(ÑD mT¨“½T²—ÊM·ì¥‚}2Zh£Bì“Q D-´Q¡öÉÁ>9®8·ì““Zh£B,ˆP D-´Q¡NDÉ‚(Yñ9spåˆÚ¨P®Q D-´Q¡\9®WŽ|ÎLDh¡ u² BM´ÐF…:Y% ¢dA”.ˆØ'£…6*ÔÁ>J4ÑBê`Ÿì“ãšsË>9Y™ …6*ÔÉÊJ4ÑBêde’¬L’• Ÿ3ë0´ÐF…z°CM´ÐF…z°¬Ãë0>g&K´ÐF…:Y" @‰&Zh£B,’%B²DH—ì“ÑBê`ŸŒ%šh¡ u°OöÉqùeŸœ¼­F mT¨“·Õ(P¢‰Ú¨P'o«“·ÕÉÛêôß—â¹Zh£B}๠”h¢…6*ÔžKx.uà¹ÔÁçR¼ÑD mT¨“7š(P¢‰Ú¨P'o4“7šÉÍô&V´ÐF…:ذ¢@‰&Zh£BlXƒ k°aåsfò¤-´Q¡NžÔ @‰&Zh£B<©IžÔ$OjÒ•‡Å.Zh£B=Xì¢@‰&Zh£B=X컃Å.Ÿ3“7#h¡ uòfJ4ÑBêäÍHòf$y3ÂçÌ` ‡Ú¨P[8(ÑD mT¨ƒ-\°… ¶p|ÎLžž£…6*ÔÉÓs(ÑD mT¨“§çÉÓóäéyú¯{ðô-´Q¡<=Gñ¥i’#9®­ÿ?³·‡Ú€Òäú©yEJ I1hÿ ¹YUÞ“?ÐJmvÍ®:‚ è¤pI>5Á§6øÔŸ\ð©>ù*˜žWÁô¼ ¦çAžMLXƒO]ðÉŸúà“o‚ kð©>5Á§6øÔŸ\ð©>ù&˜°6Á„µ &¬MxD°§&øÔŸ\ð©>ù:ØS|ªƒOMð© >uÁ'|êƒO¾öÔÔÁžš:ØSäÙ4Á.øÔŸ\ð©>ù&˜ÂŸêàS|jƒO]ðÉŸúà“o‚)\Láš` äÙTÁ)ŠàS|rÁ§>øä«àEð©>5Á§6øÔŸ\ð©>ù*8EQ§(ªàEgÓ“šàS|rÁ§>øä›`R|ªƒOMð© >uÁ'|êƒO¾ &5M0©i‚IMž$4Pð© >¹àS|òu ‚Ouð© >µÁ§.øä‚O}ðÉת T¨5P æƒO]ðÉŸúà“o5|ªƒOMð© >uÁ'|êƒO¾ Ô|¨ù&PóZžŽ÷÷ßùóŸåq~½6Óêù"Ø¿Fÿ©~ýõ|»êø¿w¿âåÿ{Cêè·&ÿ,ÿß QÃÿÝxùÿ^x:úöWû×óݧ£ô¿\&ºÿ_ä_ý¬oêgôÿý௉îsÑ}6z+еEÐUÓþW¼œ¡ëºV‡næ~5tÕŸäûLô t@×êÐ…Ñ}6z'ÐuEÐÕU]gCçºN…®šu:tuãÓä:Ðu*tQtŸî:W]ßýŠ—3t=@çTèê¶ÿÕiÐ5ÓúW—‰ž®èœ ]Ýg£÷]_ÝÌÿŠ—3t ëuèœÿU«ÐÕý/Ÿ‰žÎt½]Ýg£{ÎA×Lƒ6á_ƒÎëÐýy²Õ6Ñ4.(Ôþ5è¼]Ýkѯ·ùm]¢§Ðýï}â!(™åÏäÿ¬pþ¹<úV£åµ,¯sш^Ûшžc“qôJûw.WHÄhy’Vfy>Ç\(L>Çg#íþKŽãåùsý2à ùŸËý—ÇËó9æSДó9>[Cÿ_r/Ïç˜ëA÷Ëçø¬Áþ¿ä8^žÏ1WjƒZ™ÏÑ¿–£·r\Ìó+ÙnþñùWøŸIN5L"Ú_KY¨õn–ÄXtÔòMšÜ_l¢£–zÞäh¢ã}kÏèë\ô5ˆŽZªU t‰è0¡ëºV‡.¤ý ˆº kuèÂèkµÑèÑaBçºN….¢ý ˆ:Ðu*tQô5ˆŽZj{t±è0¡ë:§BÑþD‡ ]Ð9º(úDG--§ºXt˜Ðy€®×¡ i¢Ã„Ît½]} ¢£–NX]":^‚ÎëÐ…´¿Ññt^‡.Œ¾ÑQ«‚+ ˆ-ùHt¬AtÔª² DG¢ÃŒÞ@ô»˜ä$O,:j•Dj ¢£NX€&:ô6nÏMŸË•n]˜ãxùD‡Þ/íås¹Ò s/_ƒèГ= |.WúOaŽãåkz°GnÏåJµ*Ìq¼| ¢C/µö€æ¹ü¿çè­ÿÿ”…PtL~¹ºëúÙ_Ú(üYUžËSKa¬Y2s˜óïãíG‰þwÝmuΈ>Ð~/EÉçz™ÉãÇY®^Ì@òxÉq–3<Ï蛜äÙ€äyFßä¢o@òx©•%Ð%’Ç„®èZºPtÌ@ò˜Ðu]«CF߀äñRÂK K$ è:ºHtÌ@ò˜Ð9€®S¡‹¢o@òxé,EÐÅ’Ç„®èœ ]$:f yLèz€Î©ÐEÑ7 y¼4¼"èbÉcBçº^‡.3<&t ëuèÂè<^úp t‰äy :¯CŠŽHž— ó:taô HŸÌ7É3É£%Iž HŸ¸1‰ä™ä1£7=Ç.ÉãAòx•Dôm’Ç',@“\]"y^‚ÎëÐ…¢c ’ç%è¼]ý ’gl(I$Ï$–|$yÎ yÖÉö·DòlAò˜ÑˆžcäYƒäY«$" og<ë„h’Goã…YƒäY«Ýº0Çñò3H½_\a ’g­¶ÅÂÇËÏ yôÆ4å5HžµÚ s/?ƒäÑ;@ÐýÖ yÖjµ*Ìq¼ü ’G/µA­\ƒäy)Goå8h–uêòT}ë›Ñƶ5Hžµvp$”’<HžSrÉA"y® yÌè Dϱ‹@òœ@òœTз$Ï)ašäÑÛx@aN yNj·.Ìq´rÌõË€+œ@òœÔ¶X˜ãh9ä˜kLAS>ä9©ý§0ÇÑrÈ1ׂîwÉsR«UaŽ£åc®Ôµò’祽•ã YNÊÆ¶é¬éG×DŸ@òœ´ëÁBÉsÉ“DÿËýš¶µŸÑÚ¿•¢´Íõ²-Hž­Ôó}®^ìAòl%Ç}NòìAòHôÊå$É#ÑŸ¿K’g+µ²ºDò˜Ðu]«CJž=Hº kuèBÉã@òl¥„—@—H:Ðu*t‘äÙƒä1¡s]§BI’g+¥ºXò˜ÐõS¡‹$Ï$ ]Ð9ºHò8<[ixEÐÅ’Ç„Ît½](yö yLè<@×ëÐ…’ÇäÙJ..‘$ÇÏœäùÉ#Ñ«ENò,@òHô*·­®Z€äùZY]"yLè:€®Õ¡ %Ï'Hº kuèBɳÉó!%¼ºDò˜Ð9€®S¡‹$Ï'H:Ðu*t‘äY€äùÎR],yLèz€Î©ÐE’ç$ ]Ð9ºHò,@ò|HÃ+‚.–<&t ëuèBÉó ’Ç„Ît½](y y>¤—@—Hž— ó:t¡äùÉót^‡.”< <Éû0Éó ’GK>’< <ÉÛ{Éó ’ÇŒÞ@ô»$ÏHž•Dôm’ç#ašäÑÛx@a>@ò|¨Ýº0ÇÑrÈ1×/®ð’çCm‹…9Ž–C޹Æ4å<jÿ)Ìq´rÌu€ û}€äùP«UaŽ£åc®Ôµò$ÏK9z+ÇA³|¤’§®|3íÿÒÞטHží½—¡äùÉó‘^Rý相ª6¢´¿“¢Ôé½,¼o>–<Ôs—«$O'9æîL›:<½ºæ$Ï$D¯rWdWW<ÔÊèÉcB×t­](yHº kuèBÉsÉÓI /.‘<&t ëTè"Éã@ò˜Ð9€®S¡‹$Ï$O'¥ºXò˜ÐõS¡‹$ÉcB×tN….’8b=W¹ ll«žÆ÷*7"YËóÜ3°Ê‰Ž¸<ÏèŸ9Éó .Ï3zî$Qõ .8âEÐ%. ]е:t¡èXËcB×t­]ý\1ê‹ K\:Ðu*t‘èXËcBçºN….Šþ .ì(ƒ.vyLèz€Î©ÐE¢c. ]Ð9º(ú'¸<²­¡ ºØå1¡ó]¯CŠŽ¸<&t ëuèÂèŸàòÈn‹"è—ç%è¼](:Vàò¼ס £‚ËÓ%o=O\ž¸ ll“ŠZW¹mll«:å,óÞ×FôÁéØËfŸßíÁåÙËë-7"y—g/²ì-çò¼Ë#Ñ«¯œäù—G¢W9©ú—g/ã¡è—Ç„®èZºÐåy—Ç„®èZºPò|˳—©U t‰ËcBçºN….ryÞÀå1¡s]§BIž/pyö2L+‚.vyLèz€Î©ÐE.ϸ<&t=@çTè"Éó.Ï^f|EÐÅ. èzºÐåy—Ç„Ît½](y¾ÀåÙË豺Äåy :¯Cº’<ßàò8ù-—syÖàò˜ÑˆžcËãÀåq*‰èÛ7¸<.ašË£·ñ€Â8pyœÚ­ s/ÿ—Gï—Wpàò8µ-æ8^þ .Þ˜‚¦ìÀåqjÿ)Ìq¼ü\½ÝÏËãÔjU˜ãxù7¸úAêò,d˜V]ìò˜ÐõS¡‹\¸¤Ú†®èœ ]}ôƒÔåYÈŒ¯ºØå1¡ó]¯Cº’<-¸< rȹÕn]˜ãh9ä˜ë—Wø—çSm‹…9Ž–C޹Æ4åOpy>ÕþS˜ãh9ä˜ëA÷û—çS­V…9Ž–C޹RÔÊOpy^ÊÑ[96ͧ)yâäãåCÙþ̹<Ÿàò|š’G_>8rd•»}´‚Kª+¹Ä²Ê¹ÂÕ\¹ÿsü[¡Ës—çy…fŸ“<=¸<ÏÛGûœäéÁå‘Û-‹ K\º kuèB—ç. ]е:t¡äéÁå‘K7‹ K\:Ðu*t‘Ës—Ç„Ît ]$yzpyä.Ð2èb—Ç„®èœ ]äòÀå1¡ë:§BIž\¹¢´ ºØå1¡ó]¯Cº<pyLè<@×ëÐ…’§—GnN-‚.qy^‚ÎëÐ….Ï\ž— ó:t¡äéÁåy~÷Ü%ÕÕ\-ùHòôàòÈ%Õ¹è D¯íè Dϱ‹ÀåKª%z›{l’´ôåc®.©– ÝÉq´rÌõË€+À%ÕÄý—GË!Ç\c š2\R-Aúÿ’ãh9ä˜ëA÷ƒKª%ˆÿ/9Ž–C޹RÔJ¸¤úµ½•ã`ÓD×DÿQ@ò<£ä¢€ä¹I­,.‘<&t@×êÐ…¢c’Ç„®èZº0úHž›”ðèÉcBçºN….3<&t ëTè¢è ynÒYŠ ‹% ]Ð9ºHtÌ@ò˜ÐõS¡‹¢€ä¹IÃ+‚.–<&t ëuèBÑ1ÉcBçº^‡.Œþ’ç&}¸ºDò¼ס EÇ $ÏKÐyº0úH‰®@7h–H-ùHò|€ä¹‰ä¹å\žH3zÑsì"<7<7•Dôí$Ï-ašäÑÛx yn ynj·.Ìq¼ü$Þ/ÉsÉsSÛbaŽãå yôÆHžHž›Ú s/ÿÉ£w€@òÜ@òÜÔjU˜ãxùH½Ô’ç’祽•ã YnÊõ³ªnF’ç’ç&’ç–“<7<7å’êi÷Góчó,_²Ûö+·Iû Îò|I=ŸæêÅÎò|IŽÓœË3…³<½¾æ$ÏÎòHôúš“Aò<£æ¢‚ä‘w˜A—Hº kuèBѱÉcB×t­]ý$¼Z­ºDò˜Ð9€®S¡‹DÇ$ è:º(ú'Hyã[t±ä1¡ë:§B‰ŽHº s*tQôO<ò"º2èbÉcBçº^‡. <&t ëuèÂèŸ yäýxEÐ%’ç%è¼](: y^‚ÎëÐ…Ñ?AòHô*÷*Òz’GK>’<Ÿ yäU¤¹è D¯íè Dϱ‹@òÀ«H«O•Dôí$ÏgÂ4É£·ñ@òÀ«H«Oµ[æ8^þ ’Gï—äW‘VŸj[,Ìq¼ü$ޘɯ"­>ÕþS˜ãxù'H½’^EZ}ªÕª0ÇñòOÓ÷òø®mÚÑŸ yäU¤ÕgNò|‚äQ^EÚöÕÌÏŒèÃy–7Ùmû–Û¤ýgyÞd£ò{n#ì;œåy“ÍwïÑü >Ë#Ñ믜äù‚³<½þÊIž/8Ëó&›€K KÎò˜Ðu]«C¾—çÎò˜Ðu]«CJž/8Ëó&{“K KÎò˜Ð9€®S¡‹ÞËógyLè@שÐE’ç Îò¼É–é"èâ³<&t=@çTè¢÷ò¼ÃYº s*t‘äù‚³ËcBçº^‡.ty*8ËcBçº^‡.ˆÞLá,ôá"è’³Ë\º kuèBÉSËó#S«è—Ç„Ît ]䳬Áå1¡s]§BIž \ž¦A»<&t=@çTè"Ÿe . ]Ð9ºHòTàòüÈŒ¯ºØå1¡ó]¯Cú,kpyLè<@×ëÐ…’§—çGF%Ð%.ÏKÐyºÐgYƒËót^‡.”<¸<]n°iÖàòhÉG’§—çGtÕOÎåYƒËcFo zŽ].ϸœgYÊnÛen“öÎò,e£rîú‚)\_ð÷òaó]îú‚)\_ðŒÞ´9ÉÓÂY‰þü­Xò´p–g)›€K KÎò˜Ðu]«C¾—®/°¡ëºV‡.”<-œåYÊÞäè’³<&t ëTè¢÷òÀõ6t ëTè"ÉÓÂYž¥l™.‚.>ËcB×tN….z/\_`C×tN….’<-œåYÊNî"èâ³<&t ëuèÂ÷òÀõ6t ëuèBÉÓÂYž¥l0/.9Ëót^‡.|/\_ðt^‡.”<-œåy~÷eFòLáú5ùHò´p–g)A2ш^ÛшžcÁYž%œåYª$" o-œåY&,@;Ë£·ñ€Â,á,ÏRíÖ…9Ž–C޹~p…%œåYªm±0ÇÑrÈ1ט‚¦¼„³k°ÿ/9Ž–C޹RÔÊ|Žþµ½•㿚åïß2®/ˆ“—e{š‘<úò%O=½¾@_>lîÚŠõ¼ÍíXØÂƶ­¸ö§œ+|‚m[q¢N¹³<'ØØ&Ñ—“<6¶IôçoÅ’ÇÁƶ­8â%Ð%ÛLè:€®Õ¡ Ïòœ`c› ]е:t¡äq°±m+F} tÉÆ6:Ðu*tÑYžll3¡s]§BIÛ¶² ºxc› ]Ð9ºè,Ï 6¶™ÐõS¡‹$ƒm[ÙÖP]¼±Í„Ît½]x–çÛLè<@×ëÐ…’ÇÁƶ­ì¶(.ÙØöt^‡.<Ës‚m/AçuèBÉã`cÛó»osgyN°±MK>’<6¶m%È6w–çÛÌè Dϱ‹`cÛ6¶mUÐ7Û¶ Ð6¶ém< 0[ØØ¶U»uaŽ£åc®_\a Û¶j[,Ìq´rÌ5¦ )oacÛVí?…9Ž–C޹t¿-llÛªÕª0ÇÑrÈ1WjƒZ¹…m/åè­‡i[û½<[ØØ¶•²½ÍmlÛÂÆ¶­ý^ž-¸<•ÌaªÜø®—§’Ö.7"ÙËS‰,Ûå\ž¸<½és’§—G¢?+–<=¸<•Œ‡J K\º kuèB—g. ]е:t¡äéÁå©djU]âò˜Ð9€®S¡‹\ž¸<&t ëTè"ÉÓƒËSÉ0­ºØå1¡ë:§B¹<;pyLèz€Î©ÐE’§—§’_t±ËcBçº^‡.tyvàò˜Ðy€®×¡ %O.O%£Çè—ç%è¼]èòìÀåy :¯CJž\žçw¯r.Ï\-ùHòôàòT¤Ê¹<;pyÌè Dϱ‹Àå©Àå©Tз\ž*ašË£·ñ€ÂTàòTj·.Ìq´rÌõË€+TàòTj[,Ìq´rÌ5¦ )WàòTjÿ)Ìq´rÌu€ ûUàòTjµ*Ìq´r̕ڠVVàò¼”£·rlšÊ¼¾ ®À婤lW9—§—§2¯/ЗçYäÉiîöÑ)\R=}ÞÀYçF$5œå‘û?«ÜiU gyžWhúœäñp–çyû¨ÏIgyävË"è’³<&t@×êÐ….O gyLè:€®Õ¡ %‡³ËcB×tN….ryj8ËcB×tN….’<ÎòÈ¥eÐÅgyLè<@×ëÐ….O gyLè<@×ëÐ…’ÇÃY¹9µºä,ÏKÐyºÐå©á,ÏKÐyºPòx8Ë#ѧ¹KªcPôå£ä#Éãá,\R‹Þ@ôÚŽÞ@ô»ÎòÀ%Õ½Í=6IZúrÈ1ׯƒ³^>”í&çò4àò4æ{yôåÃy–£ì¶=æ6iá,ÏQ6*ÿÎm„ý gy޲ùîwFt?ˆÏòHôf™“ËcBçº^‡.|/Ïo8ËcBçº^‡.”ËcBçº^‡.<Ës³<&t ëuèBɳ†³<{Ù`^]r–ç%è¼]x–çgy^‚ÎëÐ…’g gyžß}Ÿ;Ës³8½ÌaúÜø®—§—Vî’ê.©þ{ù Ër—T×pIõ3zsÈIž¸<½É½¨9€ËÓËx¨ºÄå1¡ëºV‡.tyà’jº kuèBÉs—§—©U t‰ËcBçºN….ryà’j:Ðu*t‘ä9€ËÓË0­ºØå1¡ë:§B¹ˆ…S¾ì'AþTýÚõ}ß>ùö)_öÿþÙÀöO™²¯/ÿ·ì+¾òkûYeD궷˾‡²ï%GeßÛeßCÙWƒ$eßÛeßCÙWƒ$eßÛeßCÙ׃ÄeßÛeßCÙ׃ÄeßÛeßCÙWƒ$eßÛeßCÙ÷vÙ÷Pö½]ö=”}/eßCÙ÷vÙ÷Pö½”}eßÛeßCÙ÷Rö=”}o—}eßKÙ÷Pö½]ö=”}/eßCÙ÷vÙ÷Pö½”}eßÛeßCÙ÷Rö}®ì{(ûÞ.ûÊþ9]þ×ß"µ}þiœ¡ìŸ%Ç3”ý4HûËwMåŸg(ûj¤ì§Aº_­÷nöüÓ8CÙWƒ$e? â~U•sýóOã e_—}åßÄýj\×?ÿ4ÎPöõ qÙ×¾IÛýûþ¼áOã e_ ’”ýsª¶µÎ·í³ìŸ¡ìkËÿÔº®{–ý3”}Ç <Û“tùPöÏPöÓñÙž¤Ë‡²†²ŸÁg{’.ÊþÊ~ŸíIº|(ûg(ûé¿É„žíIº|(ûg(ûÚ7g{’.ÊþÊþYye5û·ß…÷ eÿ,eÿœ+ûg(û)Ž¿œ›úimDN1¼™l¿‚7Hþý³s ~+*ûJ˜AV—}-HĈ H§‰Ë¾$bDÄe‚De_ 1"Òg‚De_0"âõ qÙOƒ$l_2ì~3Ù>,Wží >Û“tù°Ëø vð¾™l‚´¤… „žíIº|Øçû{hßL¶Aœq¤×‚г=I—;mß`ë›Éö!ˆ— ™¿€ëv$eûzçòaë[¦ìëËÿ-ûÊŸoÌöõå]¿ØlÞ¢õ÷φÖt¶±Ù>¼oJ’°ý‹ÍöáÍLz„í_l¶ï0ʉÙþÅfûð¶ŸL˜í_l¶ïÅу$lÿb³ý °ý‹Íö/Àö/6Û¿Û¿Û¿Û¿Ølÿlÿ"lÿlÿb³ý °ý‹°ý °ý‹Íö/Àö/Âö/Àö/6Û¿Û¿Û¿Û¿Ølÿlÿ"lÿlÿb³ý °ý‹°ýKŽí_€í_l¶²?³Ëþ ÊþLrœAÙŸÙee_ ’”ý™]ögPöÕ IÙŸÙee_—ý™]ögPöõ qÙŸÙee_ ’”ý™]ögPögvÙŸAÙŸÙee&eef—ý”ý™”ý”ý™]ögPögRögPögvÙŸAÙŸIÙŸAÙŸÙee&eef—ý”ý™”ý”ý™]ögPögRög¹²?ƒ²?³Ëþ ÊþGªõÍê¾Ù^pÏÆß?rü€²Ÿù«þU9_?ÿ4àF =HRöÓ õßÿÖOÚAN’”}-ȰœþiÀ-™ qÙׂø¶yn×ë!HŸ —}5ˆ¯]óüÓ€“óz¤ì¤jûW×ÎÆ–î”}myÿçïdTö? ìkËáÙž¤Ë‡²ÿe?ÅqBÏö$]>”ý(ûé7Ág{’.Êþ”}-<Û“tùPö? ìkAàÙž¤Ë‡²ÿe_ ’¶'éò¡ì@ÙÿH÷íwMÛŽwÎ@Ùÿ²ÿ‘+ûPö?”£Ê³?OÄ̈> ç§öl ³ý© ¢¦0ÛŸÚ³ý)ÌöÕ ÉljÏö§0ÛWƒ$³ý©=ÛŸÂl_Ïö§öl ³}=H<ÛŸÚ³ý)ÌöÕ ÉljÏö§0ÛŸÚ³ý)Ìö§öl ³ý©Ìö§0ÛŸÚ³ý)Ìö§2ÛŸÂljÏö§0ÛŸÊl ³ý©=ÛŸÂl*³ý)Ìö§öl ³ý©Ìö§0ÛŸÚ³ý)Ìö§2ÛŸÂljÏö§0ÛŸÊlš›íOa¶?µgûS`ûW{Ès¶•Öt¶µ‡é3AâÙþÑdûÄëA’ÙþÑdûza¶4Ù>,WŸí <Û“tù0Û?Âlÿh²}ÒJ‚(ÏöŸíIº|˜ía¶4Ù>qÄAíٞг=I—³ý#Ìö&Û‡ ^‚dþ†áüÑdûzçòa¶ÌÍö0Û?šl__>Ðõ»ÍöïÀöïÒšîÀöï6Û¿ÛWƒ$lÿn³ý;°}5HÂöï6Û¿Û׃Älÿn³ý;°}=HÌöï6Û¿ÛWƒ$lÿn³ý;°ý»ÍöïÀöï6Û¿Û¿ Û¿Û¿Ûlÿlÿ.lÿlÿn³ý;°ý»°ý;°ý»ÍöïÀöïÂöïÀöï6Û¿Û¿ Û¿Û¿Ûlÿlÿ.lÿlÿn³ý;°ý»°ý{Žíßíßm¶‡²¿°ËþÊþBr\@Ù_Øee_ ’”ý…]öPöÕ IÙ_Øee_—ý…]öPöõ qÙ_Øee_ ’”ý…]öPövÙ_@Ù_Øee!eea—ý”ý…”ý”ý…]öPöRöPövÙ_@Ù_HÙ_@Ù_Øee!eea—ý”ý…”ý”ý…]öPöRö¹²¿€²¿°ËþÊþgºÜ»jÚ>/§­?¡ìJŽŸPö• 3ç랟PöÕ IÙÿTØtÖuÕóOãʾ$)ûZºžúîù§ñ e_—}5H?íºçŸÆ'”}=H\öÕ ¾÷íóOãʾ$)ûŸéå´nV×ýìYö?¡ì+Ë{7ëŸ3¢–7Úrz¶'éò¡ìBÙW‚г=I—eÿÊþ§ÒÀàÙž¤Ë‡²ÿ e_ Ïö$]>”ýO(ûjü³=I—eÿʾ$ÿlOÒåCÙÿ„²ÿ™–ýºñÿ^*>ÞO(ûŸRö?seÿʾRR«¦ò³Úˆ>\˜ÿnîÛŸ¾çËþß?.‡~Ï—}%H¼·‚´zä¾ýwsß>éô É}ûïæ¾}â2AâûößÍ}û¤Ï‰ïÛ7÷íC¯IîÛ7÷íëA†ûößÍ}û°\y¶'ølOÒåÃ}ûù ʳ=Ág{’.îÛÏé´ ôlOÒåÃ}ûù N BÏö$]>Ü·ŸÒkAèÙž¤Ë‡ûöóA¼$ÿlOÒåÃ}ûïù²ŸI÷íëAžË‡ûöß3e__>Ü·ÿnîÛ×—týËÞÀùlÿKZÓ°ý/{ç°}5HÂö¿ì œ_ÀöÕ Ûÿ²7p~Û׃ÄlÿËÞÀùl_³ý/{ç°}5HÂö¿ì œ_Àö¿ì œ_Àö¿ì œ_Àö¿„íÛÿ²7p~Ûÿ¶ÿlÿËÞÀùlÿKØþ°ý/{ç°ý/aû_Àö¿ì œ_Àö¿„íÛÿ²7p~Ûÿ¶ÿlÿËÞÀùlÿKØþWŽíÛÿ²7p~AÙ_Úe e)9.¡ì/í²¿„²¯IÊþÒ.ûK(ûj¤ì/í²¿„²¯‰ËþÒ.ûK(ûz¸ì/í²¿„²¯IÊþÒ.ûK(ûK»ì/¡ì/í²¿„²¿”²¿„²¿´ËþÊþRÊþÊþÒ.ûK(ûK)ûK(ûK»ì/¡ì/¥ì/¡ì/í²¿„²¿”²¿„²¿´ËþÊþRÊþÊþÒ.ûK(ûK)ûË\Ù_BÙ_Úe eÿÛ¶t¿¡ìKŽßPö¿mK÷ʾ$)ûß¶¥û e_ ’”ýoÛÒý†²¯‰Ëþ·mé~CÙ׃ÄeÿÛ¶t¿¡ì«A’²ÿm[ºßPö¿mK÷Êþ·mé~CÙÿ–²ÿ eÿÛ¶t¿¡ìKÙÿ†²ÿm[ºßPö¿¥ìCÙÿ¶-Ýo(ûßRö¿¡ìÛ–î7”ýo)ûßPö¿mK÷Êþ·”ýo(ûß¶¥û eÿ[Êþw®ìCÙÿ¶-ÝoØ·ÿnïÛ‡Ù~%#Þ fûJdo3Ìöõ ɾýw{ß>Ìöõ ɾýw{ß>Ìö3Aâ}ûïö¾}˜íg‚Äûößí}û0Û׃$ûößí}û0ÛW—Gûöa¶¯á8g{’.öíÃl_ÉŸíIº|Ø·³}%>Û“tù°ofûJ|¶'éòaß>Ìö•“ =Û“tù°ofûê7g{’.öíÃl¿z·÷íÃl¿’Ù~•›íW0ÛWpLöíÓlÿÇfû?Àö¤5ýÛÿ±Ùþ°}5HÂöl¶ÿl_ ’°ý›íÿÛ׃ÄlÿÇfû?Àöõ 1Ûÿ±Ùþ°}5HÂöl¶ÿlÿÇfû?Àöl¶ÿlÿGØþ°ý›íÿÛÿ¶ÿlÿÇfû?Àö„íÿÛÿ±Ùþ°ýaû?Àöl¶ÿlÿGØþ°ý›íÿÛÿ¶ÿlÿÇfû?Àö„íÿäØþ°ý›íÿ@Ù_Ùee%9® ì¯ì²¿‚²¯IÊþÊ.û+(ûj¤ì¯ì²¿‚²¯‰ËþÊ.û+(ûz¸ì¯ì²¿‚²¯IÊþÊ.û+(û+»ì¯ ì¯ì²¿‚²¿’²¿‚²¿²Ëþ ÊþJÊþ ÊþÊ.û+(û+)û+(û+»ì¯ ì¯¤ì¯ ì¯ì²¿‚²¿’²¿‚²¿²Ëþ ÊþJÊþ ÊþÊ.û+(û+)û«\Ù_AÙ_ÙeeÿaïÛ@ÙHŽ(û{ßþʾ$)û{ßþʾ$)û{ßþʾ$.û{ßþʾ$.û{ßþʾ$)û{ßþÊþÃÞ·ÿ€²ÿ°÷í? ì?¤ì? ì?ì}û(û)û(û{ßþÊþCÊþÊþÃÞ·ÿ€²ÿ²ÿ€²ÿ°÷í? ì?¤ì? ì?ì}û(û)û(û{ßþÊþCÊþ#WöPöö¾ýÌö+{¶_Ál¿’AT³ýÊžíW0ÛWƒ$³ýÊžíW0ÛWƒ$³ýÊžíW0Û׃ijýÊžíW0Û׃ijýÊžíW0ÛWƒ$³ýÊžíW0Û¯ìÙ~³ýÊžíW0Û¯d¶_Ál¿²gûÌö+™íW0Û¯ìÙ~³ýJfûÌö+{¶_Ál¿’Ù~³ýÊžíW0Û¯d¶_Ál¿²gûÌö+™íW0Û¯ìÙ~³ýJfûUn¶_Ál¿²gûU¾ì7SsÈÓÀkVyÛF¯YQ‚ÄCÒêAⲯ‰…0éô qÙWƒ„B‚¸L¨ì«AB! AúL¨ìëA! A¼$.ûÍÔò4ðšuy8ä庞íIºüß²A´g{BÏö$]þoÙ‡ ʳ=Ág{’.ÿ·ìC§g{’.ÿ·ìC^ Ïö$]þoÙ‡ ^’¶'éòË~¯Y‰ƒ(Cž^³ÒÈkVšÜkVxÍŠòØÅCž†^³²¶gûkò¬E‘¬aȳ¶gûkò¨A’!ÏÚží¯aÈ£I†,o´åôlOÒåÛ‡!„žíIº|`û0äQ‚à³=I—l†éô Élÿ·Éö!ˆË‰gû¿M¶AúLx¶ÿÛdûÄëA’Ùþo“íëA†Ùþo“íÃòF]Ïö$]>ÌöÃlÿ·Éö!H+AZ¢<Û|¶'éòa¶ÿfû¿M¶Aœq¤WƒÀ³=I—³ýß0Ûÿm²}â%Hæ/`Îÿ6Ù¾ä¹|˜íÿÎÍöÃlÿ·Éöõå]¯m¶_Û¯¥5ÕÀök›í×ÀöÕ Û¯m¶_ÛWƒ$l¿¶Ù~ l_³ýÚfû5°}=HÌök›í×ÀöÕ Û¯m¶_Û¯m¶_Û¯m¶_Û¯…í×Àök›í×Àökaû5°ýÚfû5°ýZØ~ l¿¶Ù~ l¿¶_Û¯m¶_Û¯…í×Àök›í×Àökaû5°ýÚfû5°ýZØ~cû5°ýÚfû5Ìö7öÎ Ìö72ˆÚÀlcoàÜÀl_ ’Ìö7öÎ ÌöÕ ÉlcoàÜÀl_Ïö7öÎ Ìöõ ñlcoàÜÀl_ ’Ìö7öÎ Ìö7öÎ Ìö7öÎ Ìö72ÛßÀlcoàÜÀl#³ý Ìö7öÎ Ìö72ÛßÀlcoàÜÀl#³ý Ìö7öÎ Ìö72ÛßÀlcoàÜÀl#³ý Ìö7öÎ Ìö72Ûßäfû˜íoì œ`ûMº¼ñ­óÕ“5ÀöiM °ý4È_¿þЛÞ=Ql_ ’°}å›´~ÖÖþɈ`ûj„í+Aº¶kk÷dD °}=HÌöµ ®wÏáDAúL˜íkAú®yÞåë!ˆ×ƒ$l¿Ikb3ÕÿL@¶ßÛOsü³¾müóâeXÞ¨ÑáÙž¤Ë¶ßÛ×r„g{’.Ø~l_ù&ôlOÒåÛo€í+AèÙž¤Ë¶ßÛׂÀ³=I—l¿¶¯g{’.Ø~l¿IË~5unÌö`û°ý&Çö`ûÊŸï´ûSõ[#úpaþʾoNéNå°æNé*A’;Éá”®$¹oeß·§tõ É}û+û¾}8¥› ß·¿²ïÛ‡Sº™ ñ}û+û¾}8¥«IîÛ_Ù÷íÃ)]eyrß>œÒU–ã³=I—÷íÃ)]%>Û“tùpß>œÒՂг=I—÷íÃ)]-=Û“tùpß>œÒՂг=I—÷íÃ)]=HþÙž¤Ë‡ûöá”nD¹oNéNå”î4wJw §t•?ßä¾}8¥Û´æq­¿%Ëö[iM-°ýÖ<®AZ=HÂö[ó¸éô ÛoÍãZÄe‚Äl¿5kA>$fû­y\ ‚x=HÂö[ó¸–d`û­y\ –«ÏöžíIº|`û-°ýÖ<®AZ ÒBåÙžà³=I—l¿¶ßšÇµ ˆ“ ‚hÏö„žíIº|`û-°ýÖ<®A¼Éü t½5kéAžË¶ßæØ~ l¿5kéˇáüÖ¾o ³ý­ ¢¶0ÛßÚ÷íoa¶¯Ifû[û¾ý-ÌöÕ Élkß·¿…Ù¾$žíoíûö·0Û׃ijý­}ßþfûjd¶¿µïÛßÂlkß·¿…ÙþÖ¾o ³ý­Ìö·0ÛßÚ÷íoa¶¿•Ùþfû[û¾ý-Ìö·2ÛßÂlkß·¿…ÙþVfû[˜íoíûö·0ÛßÊl ³ý­}ßþfû[™íoa¶¿µïÛßÂl+³ýmn¶¿…ÙþÖ¾o l¿³OévÀö;iM°ýÎ>¥ÛÛWƒ$l¿³OévÀöÕ ÛïìSº°}=HÌö;û”nl_³ýÎ>¥ÛÛWƒ$l¿³OévÀö;û”nl¿³OévÀö;aû°ýÎ>¥ÛÛï„íwÀö;û”nl¿¶ßÛïìSº°ýNØ~l¿³OévÀö;aû°ýÎ>¥ÛÛï„íwÀö;û”nl¿¶ßåØ~l¿³Oév°oÿdßÉs‚}û'Ùdz‚}û'ûNžìÛWƒ$ûöOö<'Ø·¯IöíŸì;yN°o_ïÛ?Ùwòœ`ß¾$Þ·²ïä9Á¾}5H²oÿdßÉs‚}û'ûNžìÛ?Ùwòœ`ßþIöíŸ`ßþɾ“çûöO²oÿûöOö<'Ø·’}û'Ø·²ïä9Á¾ý“ìÛ?Á¾ý“}'Ï öíŸdßþ öíŸì;yN°oÿ$ûöO°oÿdßÉs‚}û'Ù·ÊíÛ?Á¾ý“}'Ï Ø¾³Ù¾¶ï¤59`ûÎfûؾ$aûÎfûؾ$aûÎfûؾ$fûÎfûؾ$fûÎfûؾ$aûÎfûؾ³Ù¾¶ïl¶ï€í;aûؾ³Ù¾¶ï„í;`ûÎfûؾ¶ï€í;›í;`ûNؾ¶ïl¶ï€í;aûؾ³Ù¾¶ï„í;`ûÎfûؾ¶ïrlßÛw6Ûw0ÛßÙwòì`¶¿“AÔfû;ûNžÌöÕ ÉlgßɳƒÙ¾$™íïì;yv0Û׃ijý}'Ïfûzx¶¿³ïäÙÁl_ ’Ìöwö<;˜íïì;yv0ÛßÙwòì`¶¿“Ùþfû;ûNžÌöw2ÛßÁlgßɳƒÙþNfû;˜íïì;yv0ÛßÉl³ý}'Ïfû;™íï`¶¿³ïäÙÁl'³ýÌöwö<;˜íïd¶¿ËÍöw0ÛßÙwòì€í÷ö)ÝØ~/­©¶ßÛ§t{`ûj„í÷ö)Ýؾ$aû½}J·¶¯‰Ù~oŸÒííëAb¶ßÛ§t{`ûj„í÷ö)ÝØ~oŸÒíí÷ö)ÝØ~/l¿¶ßÛ§t{`û½°ýØ~oŸÒíí÷Âö{`û½}J·¶ß Ûïí÷ö)ÝØ~/l¿¶ßÛ§t{`û½°ýØ~oŸÒíí÷ÂöûÛïí÷ö)Ýfûµ=Û‡Ë*9£_Áå Jdþ —3èA’Ù~mÏöár=H2Û¯íÙ>\Î Ïök{¶—3d‚ijýÚžíÃå zd¶_Û³}¸œA]Íöár Ç <Û“tù0ۇ˔ñÙž¤Ë‡Ù>\ΠÁg{’.fûp9ƒŸíIº|˜íÃå ʿɄžíIº|˜íÃå ê7g{’.fûp9CD™íÃå •\ÎPå.g¨àrÇd¶—34Þží{`û^Z“¶ïíÙ¾¶¯Iؾ·gûؾ$aûÞží{`ûz˜í{{¶ïíëAb¶ïíÙ¾¶¯Iؾ·gûؾ·gûؾ·gûؾ¶ïí{{¶ïí{aûؾ·gûؾ¶ïí{{¶ïí{aûؾ·gûؾ¶ïí{{¶ïí{aûؾ·gûؾ¶ïslßÛ÷ölßÃloÏö÷0ÛßË j³ý½=ÛßÃl_ ’Ìö÷öl³}5H2ÛßÛ³ý=Ìöõ ñloÏö÷0Û׃ijý½=ÛßÃl_ ’Ìö÷öl³ý½=ÛßÃloÏö÷0ÛßËl³ý½=ÛßÃl/³ý=Ìö÷öl³ý½Ìö÷0ÛßÛ³ý=Ìö÷2ÛßÃloÏö÷0ÛßËl³ý½=ÛßÃl/³ý=Ìö÷öl³ý½Ìö÷¹Ùþfû{{¶¿¶?³gû3`û3iM3`û3{¶?¶¯IØþÌžíÏ€í«A¶?³gû3`ûz˜íÏìÙþ ؾ$fû3{¶?¶¯IØþÌžíÏ€íÏìÙþ ØþÌžíÏ€íÏ„íÏ€íÏìÙþ ØþLØþ ØþÌžíÏ€íÏ„íÏ€íÏìÙþ ØþLØþ ØþÌžíÏ€íÏ„íÏ€íÏìÙþ ØþLØþ ØþÌžíÏ€íÏ„íÏrllfÏög0Û?Û÷íŸa¶–AÔfûgû¾ý3ÌöÕ Élÿlß·†Ù¾$™íŸíûöÏ0Û׃ijý³}ßþfûzx¶¶ïÛ?Ãl_ ’ÌöÏö}ûg˜íŸíûöÏ0Û?Û÷íŸa¶–Ùþfûgû¾ý3ÌöÏ2Û?Ãlÿlß·†ÙþYfûg˜íŸíûöÏ0Û?Ëlÿ ³ý³}ßþfûg™íŸa¶¶ïÛ?Ãlÿ,³ý3ÌöÏö}ûg˜íŸe¶ÎÍöÏ0Û?Û÷íŸíÏm¶?¶?—Ö4¶?·Ùþؾ$aûs›íÏí«A¶?·Ùþؾ$fûs›íÏíëAb¶?·Ùþؾ$aûs›íÏíÏm¶?¶?·ÙþØþ\ØþØþÜfûs`ûsaûs`ûs›íÏíÏ…íÏíÏm¶?¶?¶?¶?·ÙþØþ\ØþØþÜfûs`ûsaûs`ûs›íÏíÏ…íÏslln³ý9Ìöö}û˜ídu€ÙþÁ¾oÿ³}5H2Û?Ø÷í`¶¯Ifûû¾ýÌöõ ñlÿ`ß·€Ù¾$žíìûö0ÛWƒ$³ýƒ}ßþfûû¾ýÌöö}û˜íd¶€ÙþÁ¾oÿ³ýƒÌö0Û?Ø÷í`¶Ùþfûû¾ýÌö2Û?Àlÿ`ß·€ÙþAfû˜íìûö0Û?Èlÿ³ýƒ}ßþfû™ír³ýÌöö}û`û û¾ý°ý…´¦°ý…}ßþؾ$aû û¾ý°}5HÂöö}û `ûz˜í/ìûöÀöõ 1Û_Ø÷í/€í«A¶¿°ïÛ_Û_Ø÷í/€í/ìûöÀöÂöÀöö}û `û aû `û û¾ý°ý…°ý°ý…}ßþØþBØþØþ¾ol!llaß·¿¶¿¶¿¶¿°ïÛ_Û_Û_äØþØþ¾o‘/ûÓßæ¾ý)¼Kw*¯T»t• ñÞfÒêA’ûö›ûö!H§IîÛÿmîÛ‡ .$¾oÿ·¹o‚ô™ ñ}û¿Í}ûÄëA’ûö›ûö§ð.]uy¸o–«ÏöžíIº|¸oÞ¥«äˆÏö$]>Ü·ïÒU‚à³=I—÷íût• ølOÒåÃ}ûð.]åßdBÏö$]>Ü·ïÒU¿ <Û“tùpß>¼K7 ’î۟»t§ò.Ýiî]ºSx—®‚c¼oJïÒ]Úûö—Àö—Òš–Àö—ö¾ý%°}5HÂö—ö¾ý%°}5HÂö—ö¾ý%°}=HÌö—ö¾ý%°}=HÌö—ö¾ý%°}5HÂö—ö¾ý%°ý¥½o liïÛ_Û_ Û_Û_Úûö—Àö—Âö—Àö—ö¾ý%°ý¥°ý%°ý¥½o l)l liïÛ_Û_ Û_Û_Úûö—Àö—Âö—Àö—ö¾ý%°ý¥°ýeŽí/í/í}ûK˜í¿Ùûöß`¶ÿ&ƒ¨7˜í¿Ùûöß`¶¯Ifûoö¾ý7˜í«A’Ùþ›½oÿ fûzx¶ÿfïÛƒÙ¾$ží¿Ùûöß`¶¯Ifûoö¾ý7˜í¿Ùûöß`¶ÿfïÛƒÙþ›Ìöß`¶ÿfïÛƒÙþ›Ìöß`¶ÿfïÛƒÙþ›Ìöß`¶ÿfïÛƒÙþ›Ìöß`¶ÿfïÛƒÙþ›Ìöß`¶ÿfïÛƒÙþ›Ìöß`¶ÿfïÛƒÙþ›Ìößr³ý7˜í¿Ùûö߀í¯ì<ðRÅFÞ­×ÀKµ ñnx©¢$aû+{'¼TQ’°ý•½“^ª˜ ³ý•½“^ª˜ ³ý•½“^ª¨IØþÊÞÉ/UÔ–Ç;yॊÚrz¶'éòíÃKµ ôlOÒåÛ‡—**AðÙž¤Ë¶/UTƒÀ³=I—l^ª¨É?Û“tùÀö᥊zü³=I—l^ªÑvòÀKy©b“{©b/UÔJj¼“^ªX]ì}ûØ·‘M¦Ø·±÷í_`ß¾$Ù·±÷í_`ß¾$Ù·±÷í_`ß¾$Þ·±÷í_`ß¾$Þ·±÷í_`ß¾$Ù·±÷í_`ßþÅÞ·}û{ßþöí_dßþöí_ì}ûØ·‘}ûØ·±÷í_`ßþEöí_`ßþÅÞ·}ûÙ·}û{ßþöí_dßþöí_ì}ûØ·‘}ûØ·±÷í_`ßþEöí_rûö/°oÿbïÛ¿Û_Ûl l-­i lm³ý5°}5HÂö×6Û_ÛWƒ$lm³ý5°}=HÌö×6Û_Û׃Älm³ý5°}5HÂö×6Û_Û_Ûl lm³ý5°ýµ°ý5°ýµÍö×Àö×Âö×Àö×6Û_Û_ Û_Û_Ûl l-l lm³ý5°ýµ°ý5°ýµÍö×Àö×Âö×Àö×6Û_Û_ Û_çØþØþÚfûk˜íí}ûG˜íeu„ÙþÑÞ·„Ù¾$™íí}ûG˜í«A’ÙþÑÞ·„Ù¾$žíí}ûG˜íëAâÙþÑÞ·„Ù¾$™íí}ûG˜íí}ûG˜íí}ûG˜íe¶„ÙþÑÞ·„ÙþQfûG˜íí}ûG˜íe¶„ÙþÑÞ·„ÙþQfûG˜íí}ûG˜íe¶„ÙþÑÞ·„ÙþQfûG˜íí}ûG˜íe¶ÌÍö0Û?ÚûöÀö7ö¾ý °ý´¦ °ý½ol_ ’°ý½ol_ ’°ý½ol_³ý½ol_³ý½ol_ ’°ý½olcïÛßÛߨûö7Àö7Âö7Àö7ö¾ý °ý°ý °ý½ol#llcïÛßÛßÛßÛߨûö7Àö7Âö7Àö7ö¾ý °ý°ý °ý½ol#l“cû`û{ßþfû=Ûo`¶ßÈ ªÙ~cÏö˜í«A’Ù~cÏö˜í«A’Ù~cÏö˜íëAâÙ~cÏö˜íëAâÙ~cÏö˜í«A’Ù~cÏö˜í7öl¿Ù~cÏö˜í72Ûo`¶ßسýfûÌö˜í7öl¿Ù~#³ýfû=Ûo`¶ßÈl¿Ù~cÏö˜í72Ûo`¶ßسýfûÌö˜í7öl¿Ù~#³ý&7Ûo`¶ßسýØþÖžíoío¥5míoíÙþؾ$aû[{¶¿¶¯IØþÖžíoíëAb¶¿µgû[`ûz˜íoíÙþؾ$aû[{¶¿¶¿µgû[`û[{¶¿¶¿¶¿¶¿µgû[`û[aû[`û[{¶¿¶¿¶¿¶¿µgû[`û[aû[`û[{¶¿¶¿¶¿¶¿µgû[`û[aû[`û[{¶¿¶¿¶¿Í±ý-°ý­=ÛßÂlÿÝží¿Ãlÿ]Qï0Û·gûï0ÛWƒ$³ýw{¶ÿ³}5H2Û·gûï0Û׃ijýw{¶ÿ³}=H<Û·gûï0ÛWƒ$³ýw{¶ÿ³ýw{¶ÿ³ýw{¶ÿ³ýw™í¿ÃlÿÝží¿Ãlÿ]fûï0Û·gûï0Û—Ùþ;ÌößíÙþ;Ìöße¶ÿ³ýw{¶ÿ³ýw™í¿ÃlÿÝží¿Ãlÿ]fûï0Û·gûï0Û—Ùþ{n¶ÿ³ýw{¶ÿlgÏöáê¼I»W¨+A’Ù>¼B]’°ý=Û‡W¨ëA¶¿³gûð õL˜íïìÙ>¼B=$fû;{¶¯P׃$lgÏöáêJŽÉl^¡®F‡g{’.Ø>¼B]ÍžíIº|`ûð uí›Ð³=I—l^¡®¡g{’.Ø>¼B] Ïö$]>°}x…ºžíIº|`ûð õfgÏöáê¼B½É½B½W¨k¾ñl^¡^}˜lÿï_ÉÎö?dõ³ý“íCV’Ìö?L¶A:=H2Ûÿ0Ù>q™ ñlÿÃdû¤Ï‰gû&Û‡ ^’Ìö?L¶¯fû&ۇ嶜žíIº|˜íÀlÿÃdû¤• -Qží >Û“tù0Ûÿ€Ùþ‡Éö!ˆ“ ‚ôzü³=I—³ý˜í˜l‚x ’ù †ó&Û׃<—³ýÜlÿfû&Û×—t}o³}x©b#ïÖkॊJ„íÃKõ ÛßÛl^ª¨IØþÞfûðRÅL˜íïm¶/ỦÙþÞfûðRE=HÂö÷6Û‡—**9&l^ª¨F‡g{’.Ø>¼TQÍžíIº|`ûðREí›Ð³=I—l^ª¨¡g{’.Ø>¼TQ Ïö$]>°}x©¢žíIº|`ûðRÅfo³}x©b#/Ulr/UlॊڟoÌö᥊õo³ì×pg-1Öp§$.û¤Õƒ$³ýßfÙ‡ $™íÿ6Ë>q™ ñlÿ·Yö!HŸ Ïö›e‚x=H2Ûÿm–ýnàTrŒË>,oÔèðlOÒåÃlnàTs„g{’.fûp§öMèÙž¤Ë‡Ù>ÜÀ©¡g{’.fûp§žíIº|˜íà œjx¶'éòa¶7pÆA”²_à œµÜÀYçnà¬áNíÏ7*û5ÝÀyP*rÕWÞ=¼f¥‘·m4ðš=ȬiÚ'#‚׬èA¶¯¼x þó=žWºv¤Óƒ$l_ Ò6®oŸŒ^³’ ³}-ÈŸ‡v6Úí¯Yɉپ¤Ÿ¶Ý“ÁkVô ÛWÞAR5¾ê»'ۇ׬¨Ë»Æ5îÉöá5+ÊWœÐ³=I—l^³¢É?Û“tùÀöá5+ôlOÒåۇ׬¨AàÙž¤Ë¶¯YQƒÀ³=I—l^³¢É?Û“tùÀöá5+Q¿«þ´í]çG7pÂkVyÍJ“{ÍJ¯YI¿â¯iý§y¶¢ì®ÿþoüù†ÿ~¸ý¼ êY%^ÁªºS—7£ßª~µSÁ¶£ÔðiÕåÝè·f¿úö 7xW£†Òx=zñ•”ÿü«~Íf–¯¯æ·ùÿÿÿâ9‚J$DyLP-1.10.4/Data/Netlib/kb2.mps.gz0000644000175200017520000000373510430174061014763 0ustar coincoin‹XK®9kb2.mpsZ[vã6 ýŸs²mÀ<|?>ópë¶VÂr2N÷¿’B¶DI5?F¸¢pô¼?Ïç)ÿûëE>ýH_?Ÿ~LïÓôÛó§cìO+0zy¾2Æ^¾ÖÕ寮åê†WﯢǫϼRçb‹U*VŸîöqx•¶ÕïÓt™/L÷ÕµXÍx• ËTX¦Âryg*Þ™Šw¦â©xg*Þ™Wï î«X¬Òæß×ü±=[V)¯®ÓôO|aê9¯^oÛ;·gû*τī ËXXÆÂ2;¤— Ü}õúqý5¿/ 7=RlÙxO¶=7§“`Ókô`¬†o¾b+»À7GñMá+»áLM{<þÁBwvLxMðrœi‰XÒû@>žl„`ï˜R2x Ÿ‹M  ‚½gÚZ!)¼°‚£'”ߢíz%xmÜß#8ß‚9…“ B1šÁÀ ÁÖðªKæ„ ´D,qãÌ /òÜ2o­ô5Á‚ f­’‚«<çV«­€Z ^µÐ÷ÎðV‰èe°b–À ÁÒÓ±¸(œâ¡†Wsƕ׺Õä¤PVQxA°`UP‚%d¶žÂ/%ÜJ«·<Q¹¼ÊËïœá­&': Fv§Cf”`ýÇZ[ë}úŒ¤[¶ˆOás¡½w”` %‰@á—®ƒ•ix ÓâX¦ÅLpìÉ´8i12m“Áùô eŒ­á›tÎ9¬¸ÛÇ¡ÇB©ç"Jq ”Ú.nB©r‘C‹´¹Gfx颃:xÀí:H•8–*Ý(ºŽ‹¥TéEñ!U*Ak ¼t:ŒIaPÇ‹b!ŽÅBÏE$â@,´]ÜÄBé"Yç9'ð*ŠÐñœÖ¸çăvÇíºç"j×qЮ;Q\ÛuEÍÔYë(B™7Zá–f7Ìn¢ö¢X6ÌŽ‹kì\ Ì+á| '.Ï%®»ñ eÅqËê–Ñq±lY×–U¸¸´,îŒñ5œ¸¸´nên:hiÜ4Rv1õšF4”]L½Ù>á¹9pjøv¿“ç'áø>¥}80¶gMàØ Ä+œ‘'£4˜íSîÊi0Û§ƒ–•Æ-«G0jYiвÚ³}Bõ\Àh¢kxIðR¥·Ž¼M±T° ¹v„àÆlß ¸1Û§ƒ†™Æ ³›Á®CpÙ0{Œf{ì¢çÞŠ^ yé½§C›ÑÂ+ ŸK†t’fpc¶oܘíÓA»NãvÝ#µë4h×m‚‹Ù>¡{ ˜›©áÁb™Œ¤!{îÚˆ|.7Ñ^OnÌö­ ¦³}: i,z#±b¡“Áx¶Ç)è­w¶†W5NšÁP;œ³†Âçê˜À oj‚[³}«ÓÙ>H•4–*ÝÑËàRªtƳ=vQÉÀM ¯æLJ½çs ‡³k4…Ï%<ZR‚élß"˜Îöé@(¥±Pê69Ñ!¸J‚ñlŸP2^¯JD`Ô”k¨Ë8/†óV‰Á BS‚élß"¸˜íßÖ_ÖöߨCÛÏ‚èÏvëRç¬í*/‡áœJCªìV¹Ë6ú-²ºe«[ß*×»Få›ÚnÁßåϧ¹q®÷MrJ6’³¿‰]á³bL}v¨Ÿò½UùàĶÈax$VÂMû¨øÁv|ÿŽ/îqáS#Ygøö›aË÷^]€Ã!—Bß»gq¡eKË|o…áÅý¬€ æžÛsýÀ8#(üRZI'ô½tÍõå·ª²Ã·ŸL›.Þ>V+Ÿªöœ(œÞ+.'¨y¯xÊ)ˆàä^ñdï»o¿g,w@>“(Â':r±äÜWÃË(‚•rb×çhwÐÎBk ÇV‹‘ÔŽ\K.`:ØÆ/ ¯­¸Qbj>Í xlŸŒ¸8\gºÆ‹ƒÀu¦k8ôàÊg»àAð‘‹K§ãÓ›§7åÓ»[èá¡­æê NQ8îLpø¡w;Õ- 8 £ðb:€Ö¯Uȧ?p†K_ÃOïC9*˜“ “ £p¤At”N‚bnmiœDŸÞ„O† ŽÀË(‚•ä áˆð8­£ðÊêE2›,‚¶šÂ++øBíNï×¼þª¾Ý³Û5:K¸^5]ÐT­¡„§ÑîÎ’®ÿ^ÿî¸ïž.ão\­!x];–Ïòíþ€§oÀ¥C»§ì{ª6´*Ðo¤MÍ|P×Ý] ’ó=xU“*æðtùùôãåã×ûÛòÿ’~Åɹûªø_ èr€ÕVoD¿IN­ÎT!7Þu¦ Y6¬¨B–¦aEò£B•VD!‹Ö×S!¬;6„ðbu~{þ|~úñ/í—Öo€(DyLP-1.10.4/Data/Netlib/scfxm2.mps.gz0000644000175200017520000006136110430174061015506 0ustar coincoin‹ªK®9scfxm2.mps¥ßrÛ:¯·Ï¿™}¾{Dð¯Û´õê$i2Jºöʾÿ ù,'&€‰¶ß“׳¢§$ ’úóíùç®þïíá×Ïô?ÿozùß·ÿù»?»ÝááåíýÛé÷é)÷ã}ü&øíáw€ß~'øáw9ý~úú=¶ÿîø í:h×A»ÚuЮKíßwЮ+í7Á¿OðïüûÚ¿Cðïüû”á7Œ‹ÆöÛø¼ƒÿNðÚõ0.íz§‡v=´ë¡Ý0Àoh7Àx´`¼!Âoh+@[t¡­²0Æèá7Œ+‚<#è+ÂXüû þÍÿf‚þ'ø7ü› l Á¿ŸAGúŸAVÚÊ £ ²ÊÐn†v3´›AnÚ-Ðnv è¨@»þýÿ~„„„¹0–Æ2‚ Œ`ckË üvðç/ô oÛºŒ÷áä—ü&øÏø}±«ç·æ»æß¿=üðÙ¿3ü.ð{l¿«ïšC»ÚuЮƒv´ë ]í:h×A»íÒeŽÏ¿¡]‚v Ú%h— ]‚v Ú%h×C»Æë¡]ízh×C»>µ>{h×C»Ú Ðn€ñ¿üŽðÚª>mþ]à÷Ø~WŸ6ÿ†¶ªO›C»ÆaŒþÍÿf‚3Á¿™àßLðo&ø7È*¬È*ƒ¬2è(ƒŽ2è(ƒÜ2È-ƒÜ2È*Cü›l)Â3±À<…µ,‚O‹èŸÁ_Õ±¿þhsvþ=¶ßuοü&øíá7ü;þý:çß~ø íÒE§óo¿ ~{ø í´KÐ.A»í´ëa¼Æëa¼ÆëCëƒð;Áï ¿¡]íh7Àðß#ô'B"ô'‚"È!‚"È!B"´› Ýí&h7A» ÚE»JÐn‚v´› Ý ífh·Î¯éû§ÿùú]å9ÿá™~_ìçô{Àß¿=üð;ÂïÔ~Wÿsú]ýÏüþýÿf‚3Á¿™àßL~ø2üûÕ·Ì¿ÍÀfC9èOyæß ~gø]Úó#Ê Úà™dâ ÏdâàßqÐòq ctЮƒv´KÐ.A»í´KÐ.A»í´KÐ.A»ä\ýÆüÚõЮ‡v=´ë¡]ºðïøwü;Ø}Ðç}Ž «²ŠÐV„¶"´¡Ïç´¡Ýó7A2´›¡Ý lg ÿ™_‚ïæ‚³ûý¸ûü5§Á;ö?wØ]ÞIâÞζÊñs”,ñöÔë©}md,&þ }t=}¶‰‰8ëãžH7ç“vÓ²õõ>¾~¯Ä±³cÐpÞÇdöñ4øzÿ¾ÕF(uöñx,pÞGg¸…YÄËÖ×ûøöØ9g2 —öhËq‰oô±Ç‡‹y½† ×ôy=ÿeÙújÃ÷ÚÈèu×åÇüæê¼þöò·âÈqÒJ¾Œ=±?|Æ™ œ“yºüA¸›ƒSñȃ‚âU ž—b ÷– nçŸIÊ/&8u¼È§.XÈTÁÝ0°§Šoúy{m&X¸}¹Hˆ‡%‘†{ãºY°?„Úú÷ÿkžÀ[ñE0×EÀE#å0V->Pëã`y}rÒ´+ŗjÎ~¼ü![}D|d|¸xÄÎbФàB‹žJhO½êÓäô\º˜Ê8Ø}œ Œå2ÄzðQ„Þ¥©!èrü|l[Ž€ qùpé㘀S›L€K9úsÉþó©ôi„Ÿ›myOjÂÝah‘Ò_ˆëô”O—?xþ‡XT<ð§ÂE‹CäpNÅ*k®öô‡ÕÎ Wë]Q(Óà„ E5x=å YŃÀ«uØ­ç¨[0“¼PI úIÙRIVq©Ÿ¨©ä<±4\è'R4U¢ád:Qâ £|¡²TâUÞ—÷"îJOÎr^L4|‘“•«_®,Û¢ëX3VòÞã}yï±+ïý‡ôŒiŽœ3D׆øÏ]½sVXâ¦~—+ˆ›F¼ Óo^ðZYƒáE>¥Å\çQ)øš€_í¨çMjc¢†×3D.¡W³þýzÞ{I[X#ˆ"å«®c: h©šóï‡))YËÌ—#9ÏÅ ,_ód QÅ3jŒúøÜ·Àï£k«T”鞊Æ)ŒËùQÃ)vNfxxÓ„¼^׃Àq1Ë€fÉ`ȦâT|¡ESq*>Š>CqaÔp'B ÚúRq¾Ô¢±JµÒ2í5R*.z /Þ(zu)náaJV¦õiV;Š{¼oZ?Þ7­ï›ÖWNë³A¨ø-ÓúÑ,êSê˜Ö×Nk,Ö ¾bÇû¼öñ>¯}¼Þk;*¾œüÛ^ûxŸ×>Þ絶׎^ûØãµŸ`Md±SNiwQqYÒñŠâ>»¯á9u¦&¾ñé¾È ñ0ô¸]¦Ÿ';2£\ûø|mÔsž>$qmþ¤¢ÏßJáÏFÔsî¤×æsˆ;^— jNFµu'&iÇüy6¢žÙ½•íùƒ¸:WÕAíü‰^$_²UÃõpèS½¦FU|¡^S£*.=—×5êi¸“ódjTû¡ùý‰×q+òƒ­÷£é7k,·ÐhÖð¥zÍ8IÁÑsüÖÈæåã}^áñ>¯ðxŸWx¼Ò+œÍFÅoñ –WȾÇ+<Þçm¯;¼ÂÛ»¡wcÁã?Þ·˜ï[LŽ7,&móâK׳½˜ï[LŽ÷-&Ç“ vþ†Åä]Þ m11ß)#>ŠÖǪŸ?Xfv]å‚ò΋µõbIQßN`ÅÎö†ë%üÙÜÃÅ÷NðFl9¶=BCêÁGáßZNùÒ5ÇÍåëõë_Vú˜¼ò.hž£¥yW†6E‡8Džˆ5ßÎð‘÷Кe©-݈ó0y¬öEþ»x }ñ0‘ÄË=uìQX%>jÚ#yذ: ~¼¬kråÏêØy¹äà³Ëí©¢©wvu”¢ªÞ0†¤â\½Ù;K½^ÅG&ªËךz‹¡Þ‘Ƥ©×B{„¸P¯«"IÅ©ø-ê-†z3o¨·%r€¯©÷Û“µ7¬­|ìûÒvÛ"ÅfÃBæØ¸*ˆíÎ?XÓïÔGuúùSß½Šß ÀGCçß·7h«‹m¿8âlˆ'S'ÖŠä/ø’Çcd­kæÂôúòO‹NBߨ÷`u€³±Ÿ‚ÊêôWÆ~ÁoûkÛ¹¬tOlù„M±ˆóÀaW·ë-^®‡6­§Ÿÿ«õÞÚ;v^§_zL¼"ùtÈ._«¯Hþ‚ß(yØ”ÄûxZ ½£Õ5œ52/e-¬|ý¯…•¾KBóq+9tØæ¿QB°))wÚæ@.ms,ªq…CËצûBÁé¾Ppº/œî ²²|©íÆd…‚ ÏbòÆ‹A˜¦=Ý N]¡àt_(8Ý N÷…‚Ó}¡ â\½ûv*)&kZ3üõÞ N]¡àÔ ò±mQFœ CÁÅØ¸*ˆíη²ùO£Ð^ûµ×J %Z–{ Û q†óªH¨§Än?(— .^ÿ´ÆÞ¬4!î£|u|ùßéZ‚áÙ(ž{sC#ââåÓÞÚ†žZ«âç–¬°ez°¼ëÉGÍêX¤Ïð¦ß}‘þÔéK§’4œ ‘EúöÄÂHÿ†Îc¤oV°ÌÃCSW¤Å?›5œEúöØ1Ò¿aì]Ár)ZÒp±4@°lwƒå:Áräðe›Œh)®+Xžº‚eæ“(´wþˆ‹Ø‚e[B,_/¡·øÝØ.5rÏ3±4<›µì·ØŒ€†®FN&4jøZ#ðÒw5’aÔðµFÌ#!F#ûÌFòÔÕÈëfQ_â{Ä[Å;[u‰,:ß’7†›Gªdµ%5*¡KBžIè­KBÿ6§Tº)°Gñ•FRÇÔH#òÚûxÄ3¿n¥nѲ³[ï°4Öú>¡—­×½•k­7#H"l¸¼DÆix¶öOg³@øš¥¥Kã?…YÃ3ÍÆ:$Ôa‚\?ÞÇ#ÎåCØnýáÅ õÛËEêg'NÛ?yø(ªx׉ÓóÞ?e#j8§ÑnÎK‘ÃIcÄIÏ"u±Z÷Ö…?EÌ ¯J¾ˆW¦±¾T’jçÅÁÏC9<¡+N¤#.´Tìíõ—ºþœfhk„ÌLá Nõ•Ϋ¾r®ÎGË´“Š ÓvÉ2í âr“©3L»]ºñfž«ƒ³Kâ\]h{_ßìsunˆ;ëÄœ†Ûk¯(Y'µó½çêbÛLðfŸ«‹É8W§[‡;Œ¹6òþwv˜GzÍDpa‚éЮ'û7ý¾§Âðë ) ¿¾‚ø …Äo(¤0üúB â¥tìÃà…”Ó³­8ý*¼M€áBBD†â¼Ž‹±GêPܳ¡¸uÅ9½u©¸@†âHm}¡8ס¸†—|ƒâ>lÅÅÍx†áÁ HäŒ *.Æ^oÉYS܇©¸l)NoÝË%'ª¾Ï11\*.t(¶óW+î¿ßÊ‚Vj?š9Ö¿¡ªhî2øï%{¸ØS¯Ö‹;| ^ïÙÕš¡ H†íd7›$‰k{>I3çù­ õ±r€`Pà°½¾ˆ;ÈÖÉäDhÕâk†ó5ÔR-‰‹šHÅí}èæžO†›õ,yãÓð,%}´Ï ™ŠSñ…MÅ©ø(Õ°S/ôƒ3Fˆ;o¸©¸˜4|©ÅÝÖ–Þžs4Úê5Ï ¸Úz—⺎Mί NëÇû¦õã}Óúñ¾iýxå´¢{4§uLÓúñ¾iýxß´~ìšÖfQÅé™'« |XE }щSñhŸIþAů/ª n–èí¢Ê‡QT™›¨%»¨òqSQ%ixáŠó퀇YTù¸¯¨òÑUTù8Þï Ž×†|M?!–5VB‚ã}!Áñ¾àxmHÀ#ÄMßñððòäŒWø_œ¿²bôqÆÉØòÖÞÙİ‚ûÍÔ±¬à¡âÖ5xÉ­à±âÖ]GÉÊžÝÛ—s>‡IÝù#6&þ¸¿§ï?*®ï<ªˆÿTœ_ºCÅe%0h¸ùúôÔ±õ1õõq¯ã}}<õ°VE¾ÒÇ-ò>î]TqÑG>R½3Šá+}ì1ÙÇAÅ;u Ž„ávë×–V»¯}ÌöÏ^LüR=/¬KB®]àÎpq™nüÜ˰ÔâçwðøŠŸ>Z©o6 ¥ø^Gw.lÙy›±úÝhŠ %òÖ\¤úR™ák}l3Öuù‹½ ¯áR‹v†¯ôñ/BØùxÐ[ßEqÿç¾¢îÖãh?ÕF¢_¾Ôõ³á¯)G2üž]!Èðµ‘<µ>ö­ ްOV™}Tñ5¿ s¦sÝï“£; )høZaÎt꺀?ŽWÎk%d†Û}Œ]Þ9ò=5Ãdx´¶žêq¯‘o<©¯!¾ÒÈ´kârVÐf†Œñí{ ˆºúx Ùê †¯ô±ËÓ3A„vtžákô¸jÑÈà5|­ð¡«¨7Ã3|¥‘ЉëÒI<Ôˆ _k¤Ç“ˆ‘d¯ákô¸ÑHñn7’b›Œ2íO—Piñ2ª¸|#yYÿdµ¨Vq9.îèʵu¨…¢â¢jpþäËÙ¬—( çE¡Ãgv6T±;¦^xÏp¿¸Ó_µs¸!ŒáÉÛ}ü¸N?ç’QÅ£¶‹eC?¦~’¦Ÿ³zôÖ¥~èbÚcÏØoÒµ‚œôã ýÔcF _Ñøp^mõ_¯=ÕµAÃõ{ÄÎ_1ÿ®WñÀ3¾º òôÔí>ºb÷ñÇ•}œý©8w$el¦+ˆÝÇd÷ñx}3©¸ì#Èñi»>Ø}|º¾”U\¾Þ¯Qf¾ÅŸ×6Çåî §ø‹ùŸMQÅå&ÒýEŒ:>Š*nÜôçyÅŸWg'ýEýÊÃþÜYþ\•¼í/òµþü¬ŸQÅ¥? ž‚Š ^¬õ6긬AçMžWüy—~lþyK¦Ÿ¬á¶~Æ`ÌŸzÛÒr½m·òs<ÊUy)ùó{“z×Ç…\ÐD7O?¯ádEŒÄÿÝRÔÖ‰M¿’«u$²E÷aŠÎ9]tíÂUŽsÑ…˜ ÑQÅ Ê»Ñm†Ñý®ŠsÑ…@Û¢++V7V×B}†‹;توùÞöq¼ˆ(϶žñ`x¯Õ-…@ܳ÷–% Iƒ„m,+VG†ÕyWw½i¢+*^D’;DwµÕáb¸ç¯¥ …MÑ}ûå¬w%‡ê¬Hž–Œnnì;=Ed»êjÄ[oTúFâ» ¬Œ$ô4òÔ¶ˆ«#ÎQŽÍ+>‰fEJFrÅq XËÙâ, 4<›‰Uý\¦Fך"æÏpj¸Ø [jRéÍl¦~SÆY(¡dÖKü/#†ÙÒe•JvëþÕp7fëp}*Óp mðo†€éP—BŸí>¾°§Â«ê#ù¼pRÓÈê~‘çÌ\ùg¨9w¾ÑÇ·h™áòëT¤u/ ç¸ˆÆZN:ˆQí¼¼ÒÖy=ín$N¼ôÊì5ã¸×v«Ì’w¦z_OnÏ‹/%6üxŸâŽ÷)îxŸâ ð* GdjTÅ“RHÖ—3œ¬0z©Q OVý{©ÑЍ3n>±JeÔF—Šs–â’ŠCïNìÐÔÖÅ60×òÓlÎ8Äy¹ÒÇ -9s¡7j¸=ãÌê⊛G¥áY|¯‚ ÇûÔ{¼O½ÇûÔ ËÉ!šzWqYÛʺރŽ/`{^ž¬êߊ?FÜ4‚_ÇÀ¶{ Ü?Qé[Óc[r~‡¶Eq4[7Cߊ¯F¿1îèí#©¸8”ß>WöüûO0¢“®‘–ž>ÂâÝõ}Äõ‡÷Ñ÷Èq»°J™î&ËS#žÍ-%®&d-F[pPºdx° ªô´n/Yx>×mP£†G¹¡…¶•…¸=’.÷ê9\ï‹}~K¯Û)­½E÷m‚Swƒ“ÛÄWs©·ÿµ>ö‰˜Þ¹â«¼?¼m‡'ÙÜ}ô÷iås°Ö§á‹½xѨ´f{¶ŒËËEÆQÃÓÊ?îâÇ CŒnnX_âGϱ@zÃ{ö-/Ç®áB‡*¡8šCüøÑ5Äã}CìØ5½6Äãöåõ88Äãö瓪éó×â0î×Tž¾‹=ê°~½ºï^?ý/¢¿ðÓÄNŒ8 >U¼Xx2ñ7³õÑúžãVë;£uÄ ÆNÙè¼·./g¸x Ï©}$KBžV©¸Øè‰¼™#ÙY#Ù9ç#ÙóF¬‘쬑ðFŒ‘`#Gç~\–¿ä q9ÓœOøï]ÏS“ýÔeÎ +ø»7A,×n 7¯œ<=EMÑD²¡&ˆµ§&û©‹ Ü þnà0ÿ†œ‚-ˆ×*ˆ,Ax»‘/|éÇšÝëïkÝ ›¥üù©é¾F>ñ“N|Yïû¦Ku¹×<-=2ëãÔ”ey;ìÖ§¦¬d bjÊ }‹Ž›…ßù©é¾Fš²V\Áôn4Ê*=¸~fp¹þa©Ã×’Ýyj¾võ©çšØ¥[™ìF¶]5¯­5Ë÷àæ&§ÓS®Ú¯ô±¹êÕ§šó-Lv#Ûžžš«Ö«MóB^l9vxz²]5O/¦3úæªí ¯ 7ßÛÌO=¯¿úØÉs×H¦ûFÒ³œ¬‘¥{+T!'ëcÇrB+oˉð¼‘ß›znVÍç§žwf5±g$Ï]#™îIÏšE°èt¦î­˜QäÐÇ÷žü€íÅoäN |^WÍéûŽY„ë ð9^ÕÀ»Bþó ÄVëU öÊöÞ“¬ ‚š Èî dÔàs¼C´‰¯.Mï=ùÁš Úª1¬¨´¹ýa싪9¾-ˆÕÖ;\õ{Oì½&ˆæ,ÝŠJ!öú"VŽwX݉¯z¨wºÚGЂ æ#¢=K!úu–E¬â– JD¾î#èjÁÑ|D´g)„¯dYÄ*Þ!ˆm|ÝGÐÕ>‚ ¢ùˆ`ÏR *­âÛ‚èÀ×}]í#¸ šˆö,…ˆÈ,ˮⱯûC‘ÓŸ»Í®ø±†‚ðñóB°>|ÝGøâøˆdw¥ÇG¬á‚ØÆ×}„¿!Ž@A4a~«|~jÛG¬â‚ØÆ×}„¿!Ž@A€vWz|ÄÞ!ˆm|ÝG„«}Äëñ—†Ï]±ývèñkx‡³ÜÆ×}D¸ÚGpA4‘l¿:|Ä*¾-ˆ|ÝG„«}ø;Y=>b ï°ˆm|ÝG„«}ø;Y=>b ïÄ6¾î#âµ>âä¢êM ŸÓöÛ±ùo½ÓYÅ·KðÒ¡× 5|«CÚŽ>O¬õáëŽ(^íˆÂÒŸ»b/êñÖK™U|»P?Xl5|«SÚÙ÷ãëÞ.^íí|ôiÏ]±3ÙØ¼·jm«øv¥]Hȃ#Š­Ò¾Úˆ.íù›YÔ¯»ÔxµKåÒn.5Ùérl.Õ[½U|»Š½&íVÅ^m¤CÚÛøºßNWÇv~(qÏ]±×ÒÔã·×ðký6ÅøV#V$ý¹´_÷Ûéj¿í]Ž |`§¿½†_é·ç[ÌýßjÄ’¶;›a'¾î·ÓõÕ® «d¿mWRß^ïôÛ§NÖ»i¾ÕˆåIèü½N|Ýo§ëKjLÚà·íFêñÛkø•~[HüöZ#ÒÞÆ×ýöÃÛùõ¡}ŒwÑ:àSý…ꮾþ`~iq"Ä…[KÓôíéñ÷Šç¯4ÿÀíñPoÄd8Ÿr'O/È=­gví¦§áÒz{pþÛÔ¶LOßßÞ.O±²ƒK_·Ïþ Òð}8h8_–÷%]Ì×þ}1pvyCáò‡ è¨âì Y¡ÃEÀÌ‚÷y¬žÕ Æ,:k0œ}ov>í”ëS¿?+¦ÒLñùšœØ†øðÔ‡õRÉéÁÿú[qo ÑóKzJ R§‡xêÁÃÉ8[ë_È/,ÎðŖ242^ßH~ÿowÖÚ==”†»ázüåñç×w.Æî`œðêƒy¶»üA|´^ÄÅqÏžrÅ+Žïüø¤ââ»oçEOšÍùcƒ*®×Íæ?XEã¸X—ÎË/ºù áòsŸŒ+^»~…áÞšÜkŸVr”ü›±,~}ŠOjô¤ÐqKõ~Þà®ÍwüJ8ÇÅ}Ã9jÎjÆ³Š‹û†Ý¨+npQÃÅ•;__ÊžUÂÍÑ×c6 'ùq‚ËšA¢óΩ¸è¼¯­g¾Ø×»O.­#{Ó 4<Ë/Øc߯µŽÈ¦õ{¢°!òº€StςOŽ÷ÌŒÏæ+>}~Iqv*CÔU»¿ãê-UŠÑ¶pˆáòó¬,e牡w~”OiËŸX€;áÎÝÅ´pVQí¼üŠ®»ŒÝY—ds\~ýõb6Ž‹{Äù5`_W -ͦ}‚žáÞ÷9T—‹†Ë`¬©÷ÇÓç‡R“ß^nqöþüï½:ýbõ±„.œ7’ê§Ï¦_t|QÕÀâ3åAœ•æï«]–ó.‘«ª¿¡õ†‹«=Õú¾Å3¿|‡~Ì;d¦_©÷=8«éìC¨éÿîaðõú†sõR»ÉþôÔç·–ËLgÎûèèÕ>ºvêŸá+}|øô¼Ê2ãs0âŽæÂ.ÖñBzX™£Wqq™[]¡qGÑpg©cQ„+N\*.hxÁ8j8ÖNâý̯/˜‹*º2˜6ôð©;M½ÞëYC£ŠsõÒhd ™‚ŠË»þ£‘50ë «ÕÛÂ?Ä¥zs2Ô[«—êM–zIùzCJd¨×¾ª^oª7êêMƒWq1{©Þ¤â"ŠˆÎPoÊÎW¿ÃÕ dwIÅF0jz?Ïk_ÌqMï³ìœ†/Œ ¨zIo]Aò=z–Þ“·¼¶Sq™::+[ô*®~ÂC›ÖAÃ¥Þ+.õÔÖ…ÞýX,½gzÏ£9ß5|¡w¯Ïw?ªømzV¨•a¤;'î¼ø|O%ª¸Ðû`é¹´¨»óCñA­â­ù>å罊K½Ç½GKïaÔç{ûÂÃzÏ=zOÆ|oc—zO^Å{æûÜ-欒^×¾\Õ¢è=†K½×±K½{µór¾£äX„š ½Ó`ùù¨Ž]¼K=Ô –˜ï‹“Qjx½ª÷lùùöVJ¬ï,ÀÍÖú^C©÷!«¸˜ï”,½G —~¾F@ x€[qi5x\:_xÃ0½ç„žè/Ñ_®Ñ…tAûªuË+xgÕŒ‹ŠK¯`ån>¨¸øÕØåŠQûhÙ“t¤¶.­£Ú¦tYm]ZG 볊g£ª¾°§áÜ:NÍÊ ‚НZÇhÆ Æ £ä¢Šw¦~©Œ*.¬£y.+$ _¤E+xÏICÑðEn-¯ ã2AìŠÇ+׌˜˜iV¬J‡Þ?«ÎªÞ½•:zoŠz½ŠK½[^JÃ)@0ôŽaVùAîÈ —“ß[«AÔðÎ1ÀÛ.Ä¥Þ©'VpÎÒ;FŒˆÁ½³*y”ŒÕ ¥¢â7éÝ™±B±‚GµóÒ:Zˆ)c…¤âÒ+µÊÌK Ι±‚µ^‚UÄøØuY,ѲRqI+V(*.3G×I6|Q1†u0ŸD–uÔœ}‘Zd—yF²R §âÝuD¾Ã™eb6±ºêˆÎª#R²ÊÄnTqá;ÈX3¸ëñ–ï0­c(¾L'¬ "iøÂw¸ëðW[‡Óqá;jç¾Ãiø"Ï(ºu¤QUܪuèÕÆ³5¬ó ÌHÒZYÆ âÂ:Ì­G¤â‹t"š„†Kë¨kúZžxgžAø piV²†/òŒhøç5|Õ:¢µ²´ J²&éU\Ö$EÂDÛEÓ:,ßÁ–îh®,FÜÁ×µhe¡![KNVñ`,Êk¥-ÍÒ–YÒT[_ØPÒJȪäájWšb–4½e6˜¢¹d$ÔñfÒ%ÓlFË©$ —f,³a ^ÒÍf÷õ1kÍÛdf“¬ŠhT;/³œ’toãµõeP«{›”Hîgì1›lVƒU*.ßx«žT\Ʊ–Ù°ÕÚ¬ˆ’ñæ«0waVDUóÂ’Œ3+¢-I’i/©ø¢^ÞQuVE”³æ¥Ž}Õ:ʵY«y¹b:•lY‡Wqiæn– áÒÚv©÷QõÔSû(¦W-½' _¢÷sñƒ4|a©GïãµjbcM¯`¾')*.+á–WðjëÝ^ß4|±˜˜Ù­ÚùÞüÅ:Þ휆ËìÖ›^!høšuÐ`z²*¢IÅ{½æÿdVDG³^4|QKÖÛÓ á ¯à-½*. vx®}{JAÅoò dîmLÆÛÓˆ«5™QkocÊIÅ»CL¯á ¯`½ÔÎ/²[½>§&*.¶‘ûl&´*.³[ë¥{QE×™™ø‘ÔÎ/BÌžÍDæ +3Ám.DÖkU«–0­"«TꃷÌ&jø¢Üa¸©ŽìR)Yåµõ…Sq–A$—¯UGÓ 4\nɨ é2çÐð5ëxøk<µÇ§^Ú ë¨¡_Ô¢5Üßp0pq?„?c; Ä3?~דŠú§Ö[\ (‡¦¬~¼èÂÚ·` Õ·%d|E?;NHئÒseÅ¿Åçjp±Ç¦ŸÕ†‚3ZÆÛkÄ‹y"÷ôT;xà ÀùÍn8\üEæ'cœâ|å„ÄôÏCÕb¹ÞÒ—ßL«/7äåwAÅù©ûRÚ¹wÖzÉpÊq&Çë~UÆJˆ3-æXÏøð{#rÐ[϶¯|ÿ§¯®7ÀÅõ,ûvI~œ4Ü6‚¯óÿZ‚iMeâÓ¯¿OWz‚}jrDµ="Vo+<ÃÅ)ö`hZL8;³éæ:Œ‘æ´<qv â¡ðÕº wM—êì¢y}âìòòýØ.Ð`—yïGwP[üúhg Åh_ßá/È.Ò:_ ¢áiì0›óY[UïEŽ½ÖœÙØOîô^,«Ëêüs¤T\X]2^Q ­ªˆ¸´º`ì-“C\Z]ŹՅCQ[V—›Ù¬X]±¬.XVç,î…mfÍêfÅ©cVέŽt¼×êB{ïx‘cϺÕÓɲºÒêF¢ÕRp†ËÓñŲº¤áÒêjñCZ]T;/­®âA\UT?‚Ìpaué@ÛV¸°ºdY]<¨¢Vjä,¬.xOÝê‚®÷^«ƒ3>ˆ9ö¤[]†7FÕêNÁÌ`ùºÐ6£1<ÑîÂêF VGŒ¶U“V×pnuùHÃ…ÕÅ.«‹ºÕD_ºÕeÔ{´¬.ÕKnä [ôÖ£T¯nué Š®ËêxÅqau¥®ïÂê L™oO5Q°o[1|<þ¸ÛÝ|yâ7\Þ†¸\Hk¡—ÛÓ>· ñ¥q)ö´w8±§\‹¬¼PIQqn\c½ÕÛÓÉ Ž*žÄM{ÒpóÞ»ÂÇZ ñB¦„¾¯Ù“7x–sŒD¸ŒãAÕ;|ã\T/øI֥РÏòÍfÝþÉ«R;ŸÍ“™¯ßÞõj?Jˆ q<´Ãˆ³!î=õøMÀoñ›ˆK¿Iúj=À‚‡xOEÕ´óØÊˆÛ~“Lõ.½k}˳t¨.¼«ƒ `ßKh¨÷dÿ°,ÎÕë|µàõ΃17äƒî¹"8(Ä={Ê7ýö‡êE<ŠF’¢Þó¿ë4ÜT¯pP .®pu©W¯€qÛ‰>¿üÙ©nl¾oGõí-눩/fôõÏ·c}*]¿ÀÛWcœÊ¡½†Fü þcXðÙé*AñânÁç•´¨jD þ£[0÷oI¦)ÞeÁçA‘†郛€§Ÿÿe½½uÙzÁ©Ã‚CîÁ£Uœ¶m"î{$Äñ÷ŸOFü­›¥a†“xÈ«ÝÚcñ p§Në=–õO¢‘Qûüàbòï«i³+kOId Û³Þº³¹ˆ ̾Ž}*ƒU!‰õ=¿¼ì4ï¼Óthû`¹ê0Z¹ªÞy‘«6œ¿0"¨Ã#ž¬¬!ñi=´iÍp™–ÅzM3¼Ýc¸HIýa§^Ó  ÃyhÕZÏæ{UÄeÑ—@?w½+˜î{W0Ý÷®`êyWÀ­Ã2ix¯uÐAÇIØPÑ­¢R†Ë½“n­#ÖQZëkÖLëÈ Þ»júÓ}5ý龚þÔSÓçÖq¼:ö^ëhŲŽö.‡[ÇÉlôÖeÕéÖ \–îÇë(–u@é~º¯ö>ÝW{Ÿî«½O=µwnñÐd!Þk ¬qYb÷ºuøƒ:vaí}S’Uu—%öëÜ.±O÷ÕȧûjäÓ}5ò©§Fέ㔪ª­÷Z¼^`¸Ì˜FÝ: Çð Öceɽó²Þwn—§ûŠÑÓ}ÅhÄå Pïű?òxr¢*’ÅK­NŹGõ#ç*µWñháI¾ÔÒpó#Ë2sűNleÊüóS£Ç¸øÏXcb± êĈgëó7Â' mïë§ïÊ¥úÔƒ­¶IøD,õR,ð\ç+±ÚzˆË}‹õÚ#iuƒŠwù޳ud§x̲:¢žëU«Ë°_•á÷1Ú}ì±¹…×pÍ µ ì‘РVúøÇz j4ñÏ#…ç§‚ïQÃî04£G\†ËQâiÂÂ/øúŸÁTBŸ©x—4\ô‘t5œáaÙúF{&¦èc›˜ˆó¸”H7ç“vÓ²õõ>¾~¯Ä±³cÐpñæÁìc­]¾ÞÇ¿oµµH¨õñ²Ýœã¼Îp ç¬g¯÷ñì±sÎÔ[µ9.íÑ–ãßècó:{ ®+èó^Á¾ÚÇðý£62zÝu9óùÕyýíåoŇQDpù2v¹C4œ]âwŠ ÏÎîæàT\Tχ³—¼¯iǽeCE†µjëÅÄyX;D/ò©Ë2Up7 ì©â›~Þ^› .Ås¶q–#J" ÷†Gu<ÿò59¡ßÿ¯yoÅÁ\”ÃXµø@­ƒåõÉ8ÕtÂý·¶ø2CÍùߟÿ­>">2 >\<²Û¤cý(Ã…}ÝÃ??õªO“9¼¿˜ŠUÁžñÉМ„ldÑEè]š‚.ÇÝå€Õ†âòáÒÇ10§6™—r¬ß-;=õU/Rÿ¹…ˆwh‘Ò_ˆkÞSŸ´$¾b)pñÉêà´BÁù *.?Ъ¹ÚùBñ¬v^¸ÚÏï ,(Ó༲ÿüæ2x=å YÅŋáZ‡ÝzŽº3É •Rq¡Ÿ”-•d—ú‰šJÎKÃ…~"ES%N¦—ü‚ѾÐY*ñ*­€¯?®ÅY9+Õ.æ ððËWîðí§ø'€ä'Û¿=¾­<¥®?m;Á ¿!†9ĨâQy‘ Dáû=tÅ0Î;!¤ÔÖÖˇ÷'Ý´-Û­¼µBÿèªRˆ«š ix²l(™Õž]‰o²_Äoi½+KV*†¸h}ï;ZïJ²’•d!~ÃØýûÝtú.N¿Ižá^Ù%¤9ýæø.OÆecn’gx‘ˆš1¹! —éS¾x7öˆN^Ž^Ã~~×Ë¡~€ã9ôe6Ô±‹Ì&PV3cìÂíRÝQL?ޏ’UsóÞ’â9[NßñE©‹òñ¾¼quï ¾˜hø";&+!V;¿\Y¶E×±f¬ä½ÇûòÞcWÞûéÓùk Î]â?tõÎYa‰›úA\®ü!n ñ2tL¿ó^ý¨âE>¥Å\ûöÉ7†¯ øÕŽzÎѤ6ö!jxp=Cäz5ûáßï ç½ç™6¶Op|)ÏXuý hÔY@KÕœ?üèHIÉZf.¸Éy.eùÂw£ç—Ÿ|~4G™ÃX4Üñ>º¶JɃÃ:>k¤0®zÇÅ'<š“^ žÅ4!¯×õ ðF\Ì2G à£Y2²©8_hÑTœŠ¢ÅP\5܉¨¶¾Tœ†/µh¬R­´Ìpk”Š‹^Ë7Š^]Š[x˜’•i}šÕÎâï›Ö÷MëÇû¦õã•Óúl*~Ë´~4‹ú”:¦õãµÓ‹5ˆ¯XÇñ>¯}¼Ïk¯÷Ú§ù®áËÉ¿íµ÷yíã}^ûh{íØáµ=^û ÖôA;õÀa_Ï)\–t¼¢¸|çƒã9u¦&¾ñé¾È ñ0ô¸]¦Ÿ';2£\ûø|mÔsž>$qmþ¤¢ÏßJáÏFÔsî¤×æsˆ;^— jNFµu'&iÇüy6¢žÙ½•íùƒ¸:WÕAíü‰^$_²UÃõpèS½¦FU|¡^S£*.=—×5êi¸“ódjTû¡ùý‰×q+òƒ­÷£é7k,·ÐhÖð¥zÍ8IÁÑsÍ77²yùxŸWx¼Ï+<Þç¯ô g³Qñ[¼Â£å²ïñ ÷y…GÛ+䯰ñ©¥Å‚Ç;¼o19Þ·˜oXLÚæ=Ä—®g{19Þ·˜ï[LŽ7,&Aíü ‹É»¼Úbb¾SF|­U?°ÌìºÊ;åkëÅ<’²[ß·ÏñQìÜho¸^ŸÍ=\|ïoÄ–cÛ#4¤|þ­å”/]sÜ\¾^¿þe¥É+ï‚æ9Zšwex`SthCä‰Xóí y­Y–ÚÒ81“Ç*`_ä¿«áâvæPÓ q!³?¨c—FŸLu÷µAz$VgÁ—uM®üY;/—|v¹=U4õήîó*¹¥zÃ’Šsõfï,õz™¨._kê-†zG“¦^wí]âB½®nw‚ÃvY†ß¢Þb¨7Sð†z["øšz¿=Y{ÃÚ:!î«/m·-âQl6,dŽ}«‚Øîüƒ5ýN}T§Ÿ?õÝ«ø ú|ô7tþ}{ƒ†°ºØö‹#Î?àub­Hþ‚ß(y£âbå/‡Û¼à7Jè6%åNÛHÃ¥mŽE5®phùÚt_(8Ý N÷…‚Ó}¡ âQV–/µ]ñu žÅäƒ0M{º/œºBÁé¾Ppº/œî §ûBAÄÅ—PÚ©$ñ#˜Ö ¿E½w…‚SW(8u…‚|ìc[”ç‚ÀPp1ö® b»óßß­lþÓ(´×~íµÃEI§ÖŸå^ÃöBœá¼*êÆ)±ÛÊ%ˆ“vcÉ"Nb•&Ä}”¯Ž/àû!]«Q0<ÅsonhD<+ Äj0.ðYïæQ éÁò®'5«c‘>Ão˜~÷EúSW¤/JÒpþ‰.Œô퉅‘þ ÇH߬`™‡‡¦®H_^Æ“5œEúöØ1Ò¿aì]Ár)ZÒp±4@°lwƒå:Áräðe›Œh)®+Xžº‚eæ“(´wþˆ‹Ø‚e[B,_/¡·øÝØ.5rÏ3±4<›µì·ØŒ€†®FbýÌÇ×7¾«‘t£†¯5b 1Ùg6’§®F^7‹úß#Þ*ÞÙªKdÑù–¼1Üq.ÇxÂvë/f¨ß^.ÊP?«¸8qÚvøÉÃGQÅ»Nœž÷þ©ø(QƒÄ9Öps^Š$N#Nòx© ˆÕº·.ü)bfxUòE¼2õ¥²|T;/6~†Êá ]q"q¡¥bo¯¿ÔõçüY®h.±‡S}¥óÀ*ņ¯œ«óÑ2í¤â´]²L;¨¸öM1õ\SqyÕ™Û©çêBÛûúfŸ«sCÜY'æ4Ü^{EÉ:©ï=WÛf‚7û\]Lƹ:}ìÜ:Üa̵‘÷'¸³Ã<Òk&ê€ L‡v=Ù¿é÷=…†__Haøõ…Äo(¤ ~C!…á×R/¥c/¤ü›žmÅéW‰àm "2çu\Œ=R‡âž Åð¨+Îé­KÅ2Gjë ŹÅ5¼ä÷a+.nÆ3 V@"g\Pq1özKΚâ>LÅeKqzë^.9QõuxމáRq¡Cq°¼Zqÿ=øV´RûṈ̃þû UEs—Á/ÁØÃÅžzý°^ÜáSðz쨅 ¸X@2l'û¸éØ$I\ÛóIš9Ÿï³õ*žøz±U8i¸lLN„V-¾f8QC-Õ’¸¨‰TÜÞ‡nîùd¸YÏ’78 ÏRBÐGûœ‘©8_hÑTœŠR ;õB?8c„¸ó†»‘Š‹I×ZÜmméýè9'@£­^󜀫­w)®ëØäü "à´~¼oZ?Þ7­ï›ÖWNk!ºGsZÇÔ1­ï›Ö÷MëÇ®imUœžy²ÊÀ‡UTÁÐw8Vð™äTüú¢ âf‰Þ.ª|E•ó»ÃfQå㦢JÒð".€o<Ì¢ÊÇ}E•®¢ÊÇñ¾àx_Hp¼6$àkúÑ °¬±ï Ž÷…ÇkC–!núއ‡—'g¼ÂÿjdþƒµtÆÉØòÖÞÙİ‚ûÍÔ±¬à¡âÖ5xÉ­à±âÖ]GÉÊžÝÛ—s~~3®0;ý!&ÿÜ_Ó÷×w žþ ·‘Šñ=¡â²4Ü|}zêØú˜úú¸×ñ¾>žzX«" _écy÷.ª¸è£F©ÞÅð•>ö˜Šìã âºGÂp»õëK«Ý×>f{ˆˆg /&~©žžò}ríw†‹Ëtãç^†¥O¹º†¯hñé£õ‘úfZàïutç²Á–·«ß¦ØPRq!!oÍEª/•¾ÖÇ6c]—¿Ø»pð.µh÷ÑiøJÿ‚ „½õ]Ôq÷î+ên=ŽöSm$úáK]0þšr$Ã_ìÛ‚ _ÉSëcßÚàûødõÑ‘ÙG_ó»0g:ר}Qñ>9ºSÂ4|­0g:u]@ŽÇ+絃2Ãí>Æ.ïÌ?‹Ü²`†GkûÐé©÷Ê?${¨¯!¾ÒÈ´kârVÐf†Œñí{ ˆºúx Ùê †¯ô±ËÓ3A„vtžákô¸jÑÈà5|­ð¡«¨7Ã3|¥‘ЉëÒI<Ôˆ _k¤Ç“ˆ‘d¯ákô¸ÑHñn7’b›Œ2íO—Piñ2ª¸|#yYÿdµ¨Vq9.îèʵu¨…¢â¢jpþäËÙ¬—( çE¡Ãgv6T±;¦^xÏp¿¸Ó_µs¸!ŒáÖ÷[ç§>®ÓÏù…dTñ¨íbÙÐχ©Ÿ¤é笽u©º˜öØ3ö›ôc­ 'ýxC?õ˜ÃWô>œW[ý×kOumÐpý±ùòßõ*xÆW·Ažžú±ÝGWì>þ¸²³"玤ŒÍT`±û˜ì>¯ïc&—}9>m÷Ñ»O×÷‘²ŠË×û5ÊÌ·øóZÂæ¸Ü½á1ÿ³)ª¸Ü@º¿ˆQÇGQÅ›þ<¯øóê줿¨_bøÂŸ;ËŸ«’·ýE¾ÖŸŸõ3ª¸ôç£áÏSPqáÏ‹µÞF—5è¼éÏóŠ?ïÒíÏ?o Òô“5ÜÖÏŒùSo[Z®·íV~ŽG¹*/%~oRïzâ¸Pƒ šèæéç5œ¬ˆ‘ø¿[ŠÚ:ÿÔoÉÕ:Ù¢û0Eçœ.ºvá*ǹèBÌ†èÆ¨â…?å]‡èÀ6CèÎ~WŹèB mÑ•« «k¡>ÃÅlÕlÄ|oûÎ8^D”ç [Ïx0¼×êÆ–B îÙ{Ë’†¤ŠÎAÂ6–«#Ã꼎«»Þ4Ñ/"IŠ¢»Úêp±G\|u»PØÝ·_ÎzWr¨ÎŠäiÉ¨áæÆ¾ÓSÔÑH¶¡®F¼õF¥o$¾«‘ÐÑÈÊHBO#Om‹H° 1âåØì±âshV¤äa$§áQеœ-ÎÒAó™XÕÏe*at­ð(bþ §†‹Í°¥&•ÞÌfê‡0eœ…Jf½äÁÿ2b˜ý!]V©d·î_ wc¶×§2< ·ÐÖñÿf˜u)ôÙîã›Ñ{*¼¡¾1’Ï '5<‰L¡îy~ÀÌ•F€šsç}|‹–.¿NEZçñzŽ‹h¬å¤ƒˆÕÎË+m×Óî¶A’áÄñA¯,À^3Ž{m·Ê,ygªpñõäÖù¼øRbÃ÷)îxŸâŽ÷) ¯²pD¦FU<!…Ôhýx9ÃÉ £—ÕðdÕ¿—­ø‡:ãæ«TF]qaÔq©8g).©x1ôîÄ­Am]ls-?ÍæŒCœ—+} Ú’3z£†Û3ά^ Þ©¸yTžÅ÷*úx¼O½ÇûÔ{¼O½0±œ¢©w—µ­¬ë=èøÒ¶ç%àɪþ­øcÄM#øuÜÑ l»±·Àý±•¾5=¶%çwh[G³u3ô­øjôøãŽÞ>’Š‹CùíseÏ¿ÿ#:éÉóÓçjÌkœÅ²Èñ?¶ÏVˆú§KŽ/(DZOŽ…#žEÉnlOõÈѼ^àùåµGŽfU¥Þª¬¦LJµÆÆ{s©Ð¶b .rÑ6s©zgðZçÍ/Y0¼·óí²'†G¹Ó:nwþÁ›E™PôübÄ=wµ©:úlý!X5öÐj¸Ùn=X­çZ¦¶öõáµCq]ø-Š|aue[q°o35aÍäõOÇŒ Ôƒó!¦¡Y‹œÇC½ÐƒáË!ên[ŸLoÓÆ>Xà~~ÅtoèõÑù\®†S6’Žl¾·xŤÃjÝQ¾ø$nR h˜l¾¾MÛzwö„¼ßæG 6ÿuõÿºÍ¿?©Ÿ/¨ïýÄ¿{(Yã=­?z¬C¬ÖÅi¸´—´°_´Þc®_ôq4¬£ítyý˜zŠ^çï~hxoÛ &XnÉŠgÄ-аZ#ί„¾\K9ÿ!È?¨¸Y3›`UõC_Á·#.úšo_écéé#, Þ]ßG\x}·û«”énb±<5âÙÜR2ájBÖbä±¥K†Ë JOëö’5çsÝ5jx”Zh[YˆÛ#ér¯žÃõ¾Øç·ôºÒÚ[tß&8u78¹M|5—zû_ëcŸØˆé+¾ÚÈûÃÛvx’ÍÝGŸV^1kmp¾Ø‹šA;`ö·g˸¼\d5<­ ñã¾!~Ü0Ä¨áæ†õµ!~ô  ¤7 ±gßòrì.q¨Š£9Ä]C<Þ7ÄŽ]ÓkC©š>-ã~Må黨£ë׫ûþçõó×ù"ú ?ýAìĈâSÅ‹…'3[ß­ï9nµ¾3ZGœ`ì”Î{ëòr†‹—ð¼‘ÚG²$äi¥‘Š‹žØÈ›9’5’Sq>’=oÄÉÎ oÄ 6rtîÇeùKΗ3Íù„ÿÞõ<5ÙO]æÌ°‚¿xÄríÖpóÊÉÓSÔ-A$»j‚X{j²Ÿº­àïóoèÁ)Ø‚x­‚ˆÁ„·ù—~̡ٽþ¾Ö ¸YÊŸŸšîkä?éÄ—•ñ¾oºT—{pýÈÓÒ#³>NMY–·sÁn}jÊJ¶ ¦¦¬Ð·è¸YøŸšîk¤)kÅLïF# ¬Òƒëg—ëö‘:|-Ù§ækWŸz®‰]º¥‘ÉndÛUøÚÑZ³|nnr:=ÕáªýJ›«^}ªÉ1ßÒÈd7²í驹j½Ú4ÿ!táÅ–c‡§'ÛuQóôbÊ1£o®Úúºpó½ÍüÔóú«­‘v,'´Òù¶œÁù½¡÷áfÕ|~êygV{FòÜ5’龑ô¬Y‹Ng`àÞŠE~}|ïÉØ^ÜùFî´ÀçuÕœ¾ï˜E¸¾ŸãU ¼+ä?Ï@lµ^Õ`¯lï=ùÁš ¨ ‚ì®@A}>Ç;A›øêÒôÞ“¬ ¢­ÊJ›Ûƾ¨šãÛ‚Xm½ÃU¿÷ÄÞk‚hÎÒ­¨bï¡/båx‡E ›øª‡z§«} j>"Ú³¢_gYÄ*n ¢TAtàë>‚®ö\ÍGD{–BøJ–E¬â‚ØÆ×}]í#¸ šö,…ÐÐY¡Ò*¾-ˆ|ÝGÐÕ>‚ ¢ùˆhÏRˆˆÌ²ì*ÞaÛøºð7Ä9-ð¹+ÑìŠïñk¸!?/ëÃ×}„¿!Ž@A€HvWz|ÄÞ!ˆm|ÝGøâDóæ·Êç§¶}Ä*Þ!ˆm|ÝGøâøˆ`w¥ÇG¬á‚ØÆ×}D¸ÚG ¹iøÜÛo‡±†w8Ëm|ÝG„«}DóÉöÛ¡ÃG¬âÛ‚èÀ×}D¸ÚGpA€°“…Ðã#Öð‹ØÆ×}D¸ÚGpA€°“…Ðã#ÖðAlãë>"^ë#N.ªÞ4ÑðÙ8m¿›ðÖ;U|»/zýZ÷1¤íèóÄZ¾îˆâÕŽ( )-ð¹+öâ¡o½”YÅ· õƒuÁV÷1¥}?¾îíâÕÞÎGŸøÜ;“ÍÛy«Ö¶ŠoWÚ…„<8¢Ø*í«èÒž¿™EýøºKW»T.íæR“.ÇæR½UÐ[Å·«ØkÒnUìÕF:¤½¯ûítulç‡øÜ{-M=~{ ¿ÖoS yo5bEÒŸ;@;ñu¿®öÛÞå¸Àç®Ø vêñÛkø•~{¾ÅÜ/ð­F,i»³vâë~;]_íʰJ&ðÛvu!õøí5üJ¿}êd½›¦á[Xž„ÎßèÄ×ývº¾¤Æ¤ ~Û.a¤¿½†_é·…´Áo¯5Ò!ím|Ýo?¼_ÚÇx­>ÕOQ¨îêëæ—'BÜY¸µ4Mßž_p!¡xþJÓùÜõFL†ó)wòDñò‡ÜÓzf×nz.­ç±çß±MmËôôýøííò+;¸ôuûÜé" ߇ƒ†óey_ÒEÀ|íßg—7”á.‚Ž*ÎÎ:\Ì,xŸÇz0áY­`Ì¢³&ÃÙ÷fçÓN¹>õûóH±b*ÍŸ¯É‰mˆO}øP/•œü¯¿÷Æ=¿¤§Ô uz€§<œŒ³µþ…œñbàÁòç /Å|*C#ãõä÷ÿ6qg­ÝÓCi¸®Ç_^p}Gàbì&À ¯>x—a»ËÄçAëE\÷ì)W¼âøÎO*.¾ûv^ô¤Ùœ?6¨âzÝlþƒõQ4Ž‹õçpé¼ü¢›.?øyÁ¸âµë—Qî­™Á½öi%GÉ¿Ëâ×§ø¤FO ¸Tïç îÚ|ǯ„s\Ü7œ£æ¬f<«¸¸oغâ5\\¹óõ¥ìY%Ü}=fÃp’'¸¬$:‹ÎûÚzæ‹}½û„áÒ:²7 Bóü‚=öñýZëˆlZ¿×! "¯ 8E§á~èpú,øäxÏÌøl¾âÓçw‘äg§2DÝYµûÛ8®ÞR¥m ‡./1ÏÊRvžzçGù”¶Lð‰¸îÜ]LÛ gÕÎ˯èºËØuI6Çå×_/fã¸èp±Gœ_öuÚÒlÚ'èî}ŸCu¹h¸ Æšz<}~(u1ùíågïÏÿÞ«Ó/VKèÂy#©~úlúEÇU ,ž1SÄYhþ¾Úei0ï9á°ªúZo¸¸ÚÓY­ï[<óËwèǼCfú•zp߃³šÎ>„šNðï_¯?`8W/µ›ìOO}~Ëa¹Ìtö±á¼ŽYí£k§þ¾ÒLJOÏ«,3>#îh.œáb/¤‡•9z—¹Õzw w–ˆÀ!:vE¸âôÀÁ… âr‰†Œ£†cÝè$ÞÏüZñ‚¹¨¢+ƒiCŸºÓÔ뽞5Ä1ª8W/FÖ)¨¸¼ë?Y³ºZ½-üC\ª7'C½µúÇq©Þd©—4œ«7¤D†zý¨á«êõ¦z£®Þ4x³×™êM*.¢ˆè õ¦¬á|õ; Y Bv‡‘T|a£¦÷ó¼VñÅ×ô>ËÎiøÂ‚ª÷˜ôÖ¥$ߣ÷`é=yËk;—©£³²E¯âê'<´i4\ê½âRïAm]èÝÅÒ{Vq¡÷<šó]Ãz÷ú|÷£Šß¦÷hZFºsRqáÎ[1€Ï÷T¢Š ½–Þ™K‹º;?Ô*ŽðÇÑšïY~Þ«¸Ô{ìÑ{´ôF}¾·/ì1|¡÷Ü£÷dÌ÷6v©÷äU¼g¾ÏÝbÎ*éuíËU-ŠÞi¸Ô{»Ô»W;/ç{1Š@ŽE¨ÉÐ; –ŸêØÅ»ÔC­`‰ù>°1E ¡†×«zÏ–Ÿoo¥ÄúÎÜl­ï5„‘z²Š‹ùNÉÒ{Ôpéçk$ ‚¸—ÖQƒÇ¥#Pñ…W0Ó{ÞYQ@è‰þ²ýå]HGÔ±¯ZG±¼‚wV͸¨¸ô VîæƒŠ‹¯Q]^¡µ–=IwAjëÒ:ªmJw‘ÕÖ¥uÄѰŽ1«x6ªê ëpέãäÑ¬Ü ¨øªuŒf¬`¼0J.ªxgê—ʨâÂ:šç’±BÒðE P´‚÷œ4 _äÑò :.Ä®q¼r͈‰™öhÅ ¡tèý³ê¬êÝ[9¡Sq¡÷¦8¡÷Ñ«¸Ô»åЩ4|‘Cïf5|‘äŽÜp9ù½µD íB\êzbç,½ÓhĈÜ;«’GÉX R**~“Þ++xT;/­£…˜2VH*.½BP«Ì¼”àœ+X«APqá(X…@Œ]W!Й…À-ë —‘d°b…¢â2st‘dÃ`XóIdYGÍÙ©EVq™g$+µp*Þ]GTqá;œY&f««Žè¬:"%«LìF¾ƒŒ5ƒ»oùÓ:†¢áËtÂÊ ’†/|‡ë±µu8¾£v~á;œ†/òŒ¢[GUÅ­Z‡^m<»QÃ:0ÏpÁŒ$­•e *.¬ÃÜzD*¾H'¢™Ah¸´Žº¦¯å€w愯0—Öae¡!kø"ψ†ïp^ÃW­#Z+KÛ $k’^ÅeMÒ¨Q$L´]4­ÃòléŽæÊbÄ|]‹V²µädÆ¢¼VÚrÑ,m™%Mµõ… %Ý©„¬J~®v¥)fIÓ[fƒ)šKf@Bo&]2Íf´œJÒpi6Á2¶à%Ýlv_³Ö¼MVqa6ɪˆFµó2Ë)I÷6nP[_µº·I‰4|ázƳÉf%^¡&6öÑô æ{’¢â²ny¯¶Þíð]Aˉ™ÝªïÍ_ܨãÝ^Ái¸Ìn½é‚†¯Y ¦W «"šT¼×+`þOfEt4+áEðd½= ¾ð ÞÒû¨âÒb‡W áÚ·§Tü&¯@æÞÆd¼=¸Z“Yµö6¦œT¼;Äô¾ð Öû±Aíü"»Õ ésj¢âb¹ÏfB«â2»µ^ºUt™‰Iíü"ÄìÙlAd¾@±2ÜæBd½VµŠa Ó*²J¥>xËl¢†/ÊV›êÈ.•’UîP[_8gDRqùZu4 BÃå–Œº.s _³Ž‡¿ÆS{|ꥰŽúE-ZÃý ÷CøC0¶£@<óãw=©¨ú`½uÀÅÁ€rhÊúçÇ‹.!¬}p ÆPp[BöñÀWñø³ã„„m*=GPVŒð[Œp®{Œ`úYm(8£ua\±¸F¼˜'rOOµó7œœßÌá†ÃÅ_d~2ÆÁ)ÀWNHLÿýúût¥'ا&GÄóâ´R}êõ¸S&GóÈââú¡‘ž7/ù§òX#/=¸ù±Ö鵄ɈèSÛã bõ¶Â3\œbV¦ÅÔˆ³3›n®ÃiNËóg— ! _­KÐpq×t©Î.š×w Î./ßí v™÷~tµõȯï€Öy¦PŒÖùõþpñ‚ì"­óµ žÆ³9ŸµUõ^äØkÍ™ýäAïŲº¬Á?GúAÅ…Õ%ãÕÐªŠˆK« ÆþÐ29Ä¥ÕUœ[]8µuau¹™ÍŠÕËê‚eupÎ’á^ØfÖ¬nVœ:vau¡áÜêHÇ{­.´÷Þˆ9ö¬[8ýב,«+­n$êQ-g¸<_,«K.­®?¤ÕEµóÒê*ÄUEõ#È V—´mu€ «K–ÕŃ*:au¡FÎÂê’GñTЭ.èzïµ:8ãƒx‘cOºÕe˜qcT­îÌ –¯ m3ãí.¬nÔpauDÁXa[5qau çV—‰4\X]첺¨[ÝIôå []F½GËêR½äF®°Eo=JõêV—ªèº¬ŽWìVWêú.¬®À”ùöTû¶ÃÇà»ÝÍ—·!~ÃåmˆË…´z¹=ís˱_—bO{7{ʵÈÊ •çÆ5Ö[ݸ=œà¨âI,ÐÑ´' 7ï½+|ì¡Õ/dJèû÷š=y3g9LjAàÁ8T½ÃWÑ8ÎAõ‚Ÿd]ªÈð,ßlÖ퟼úp µóÙ<™ùúðí]¯ö£„ØÇC;¬8âÞSßü¿‰¸ô›¤¯Ö,xˆGñTTM;­|€¸í7ÉT/àÒ»Ö·èž+‚ƒBܳ§|ÓO`H ^Ä£h$)ê=ÿ»NÃMõ …¡ àÂAá W—zõ Ø·èóËŸêÆæûvTßnáÑ²Ž˜zðbVA_ÿ|;Ö§Òõ ¼}5¦aÁ©ÚkhÄo±à?†Ÿ‘î /þè|^I‹ê F´à?ºsÿ–dš¢á]|ix‘>¸ xúù¯QÖÛ[—m¡œ:,8äÝW#ŸzjäÜ:N©ªÚz¯uÀë†ËŒiÔ­jq bý1V–|Ð;/Káqàv)|º¯=ÝWŒF\®õ^û#ˆ''ª"YQܹÔêTœkqT?òq®R{žäK- 7?ò±,3WëÄV¦Ì??5:p|€‹ùŒ5&;À NŒx¶>#|ÒÐö¾NþµZaÇc©×]O:_vÕnÇC\îH¬I{T¼Ë+œõžUœvâ1Ëžt<ˆJ­Wí)ÃNT†ól$÷xÀ¹~(µ›t§‡ÐÎ)[;™€)Á§eïs»ìå ÃÅ'z’.à‚ùâ"ÝÖ¢\Tü†í!¼èÕ]O9´†÷ÚfBã\V©IÝÙ#êx —n›sŽ¥âIh7ôˆîUÝÉqEs¾køròo/&€/'¿9ßU|1ùÍù®â‹ÉoÎw ï\LÈL™Tkúæ÷ ´ÓðÎ0«àZ„8ŸïyÔç{† o —oÎ ‡Ša⼨˜kç׌67Ñ]¢Ûa x§è2æ/ˆ“è;é¢p¾gCtÙÊnOÿ®Þy!:×#ºÒNn }¢;ŒYÃ{EpÊÎEGFQ1e(*"D#zpúwu<ÉF:DïÀ­×`$÷—G —®)ÿš«„×ÈNn‡Ôgòé/*.÷I×øqù<ïŒë% _ðKÎ]ŸGLðñ^p^N"Iú´q^Þi›Þh= ö¢{ÿµÛmAq=ø GP¿á ï?‚Âðë 0œÇÝä»­³)ÓŸõ›Ôõ…«9 /âmÍÆ‹¨åæÒþiœëtçíè8âS&aä‹8›2‰Œ·‡xþX"’7ð$éx г煉îC>Œû>nH¿!i@<Èm#Šèø–†'cËÌšè`;ÊhT"FzØÞLÆö”® ¿¥Àˆxw1¨øb½4—H_¬—Û’Ç­8üüsûZO =x²lÞüÊó4õl²áyv:´kLïoU\¾7P½Íù­”ŠaFž {tžŒ=:+Š›LÅ¥zµR4÷¿ žÌ³¶ÔÓz2ÏIN°W#Y¹(!9ˆ€—ûT’®t爹ŸD5Ú½3p¹O%j;EØF“ yR_JÉbOýÁm;êù).ÂýuZ6¿LnU<6¿LnU<ó}™Üªx±Z_$·¾Ìt¿ðer«âdH~™Üªx0œÕ2¹UqKtËäVÅ‹…wMØe¦û…çm«S3ÝK@¾HnU|‘éî´›óçäVÅ™îN;i©.Rj¦»S¯-l"()0©É­†/3ÝrgÔ9¹Õðe¦{Ùã·HnU\ÉtþùñíýÛÿü¿ÿc¾Cþ2ÌDyLP-1.10.4/Data/Netlib/brandy.mps.gz0000644000175200017520000002264010430174061015560 0ustar coincoin‹ïJ®9brandy.mps¥]YÎô¸‘|7à;è%(¹ó±Çn` Øí= fî©r¢’™*©ªá‡Âÿ)œ\"&“äo¿üí×eü÷oÿøå·?ÿïÿð¿ÿÏ?ÿø‡å·e‘íùß/Ïß¿þþ[Ôï ~Gõ;½~ÿõ÷ßEý®ê›¦þ½¿eS¿Eýê·’%J–dõ[É•ª~+¹¢ä%7(¹AÉ QýNGBV¿‹ú­úšúÝßQmTcÕØFÕߨäF%7*¹QÉJnTýMJnRr“’›”ܤä&%7)¹IÉMJnRýÍJnVr³’›•ܬäf%7+¹YÉÍj~³êoQr‹’[”Ü¢ä%·(¹EÉ-JnQý-ª¿UÉ­JnUr«’[•ܪäV%·*¹UÉ­JnSr›’۔ܦä6%·)¹MÉmJnSãܔܮäv%·+¹]ÉíJnWr»’Û•Ü®úÛ¹¢l”(%ÊF‰²Q²%õ;«ßEý®êwS¿•\QrEÉ%WÙ+%W”\QrEÉ%W”Ü ä*{%AÉ JnHê%7õïJ®²W=’¸©ßJ®²W¢ì•({%1«ï•\e¯$6õ謹Ê^‰²W¢ì•({%Ê^‰²W¢ì•({%Ê^‰²W¢ì•({%Ê^‰²W¢ì•({%Ê^‰²W’•\e¯DÙ+)jœKP¿£ú­ä*{%Es©ê·ge¯DÙ+QöJ”½e¯DÙ+QöJ”½’ªäV%·ªþ6Å«¦úÛT›êoS|nŠWMõ·)¹Ê^ISr»’Û•Ü®ä*{%]ÉUöJ”½e¯DÙ+Qö*({”½ Ê^e¯‚²WAÙ« ìUPö*({”½ Ê^e¯‚²WAÙ« ìUPö*({”½ Ê^e¯‚²Wá_öêOÿëýí·W¹ü™2~ý²Lÿɺì>ú÷‡¬ ÞÁŸfŸÿÛá…ÀŸ#jÿàVÈRàOã¤ÿy}†cþ4[óW¥.{Ì5ÿ!·#´þkPmæ?@xI¦ñë7ÒŸî ÁgékL}Ùƒ£²‡‹éû«ê+y7?’ÎæGðüÔuËl~t7?ÈüLÓ;àÕ|•~85ûïVú;òf‡®øÓÍÅJiàÅ·²ì1´a :Ç¡ÁMC›§}@pË¡"7hóòË3<éŠß‘+~G®ø¹âwäŠß‘+2r•p…\‘’«B˵>£wv32ÖU÷¤¬óð7ì?¿zÂäz­38¹ä­c².§®À=3av <3¸e¡ÞìºÜPðé*a]MNÝ¢c]pçìo\/v!xÃVû ¹v¯jÍîL®´àÈì±{Õr²…áU+‹ø¶+pÃà²îÚ{ñ²Ü;¦÷4â;àÕÂ3!m†pç{±ˆ[pñýHÏ–uI·ùÖ¸™MßCp§{ãZ‹¶›îôG°á›Ã¡ ïh³õ3ÚUè’×Îh#î _d´pkø[(À¾Ú¤u¶.#¸£M „6Pº[ÈI†´YÖ‰ur—6¡÷f·]¡MxGKˆ²fì`„HžÜ¢ ¸c ³$¸cG Ì¢Æ;väF‘ÑÐY£C¡„@pkTrbvD<±cÙSò'æ"ç¤òwN*ç¤òwN*ç¤ò['e§$¢¾_t…6y¡¾hÙ·©M¦Á?tRygÝ4t°†¸ì›Zú¯,³‚—ï|\ùÎÇ•ï|\ùÎÇ•ï|\yëãœ.%÷®ì ëÊB]dÝ*Íû‡>®0Öå€Y7m"D¯ûˆœ­5ãFY—‰«ÀSv 6òÑÃÁ©Žò®‹`óÀ½=Τñ=8èɲ—œ °\êbx;‹r&$,,¥‰B¯iðä­+Vë§ 8[tƒ¾køÝtDz¤ÀQ)7œNïùÄí‹î|fÛc"óÓ¨–éœ×€Ÿ5‘œñc­8óòXC÷pÉgLË$-þ´J8sùr’žíWû@û‡„àÕ}EúŽáÀ—zö Áͯ®C«¯vèvݼxïnè€w7t?ìènèÄÃ…U ¼ Ã&ð&Á³û îåà¡{UoQr…±Ÿ.4ì7~<— àÉm÷€¥Šà‰ìÈùR/VHïIxé¤ïuã›Í¼›‚JuSüvÀ›mãžølnˆàÝ òÓ÷ø¢CÁÝü0žÁ¼KÊ$#jmRè+‚[W-D07eJŽ›±ø n ‚'¶a丙Üq3]á¦|ÇMaÜÜ5Ãs³x³ð 7 j¼å怟sS(7b£`='6pØ÷_u¨&ê ^­ÙÍL3€¨Â5cÙ ïLßuã#1ç²2• À¯«L¬~Qe¦5¥‚² æU&ø‡*±Ê¼¸ÍT¦xsíXe½yÀÊìù¹ÊD¬2Ë¥Y•‘µÆ{•*#z= àVeS™"þ¡ÊÄ›*cúžîF@5#øu•™¨Dë±ñ2 ‹à+^&ÝW¯Ôœ«Lb^&Wâe¦è/1•)—T&1/“Y ªÿ”´éR”ïF@U:€_åæ2¯ 2åf`æWb2EË~Èxatè*ñ.çÓÄyZþ¿g"@]‚gRŠãج£þ£?ÒžsþnÞs6Vn©÷ª‰Í ““pKí0BW¡FÞR;vÆ:½ÎõûÑïãBÖåµ!¸Oé'º¤ûžî­5å¹’ÊîƒfiEÜÎбvw䪂ù uˆúÞXͤ‰!Ü–ÞõÌl]pƒ0Öu0òn*¯†SY‚Û,LXÙ*Áݼÿ,ÓQØà>¹¸­ï Q`p’W½Ê—|7=Óõ®ªÜÍh>Éür<Ÿ+‚_϶£ÆÏ¸‹ç÷rS¯KÁ]QØUðî…\ˆç…f4+ÞÓMëÝÍh dP¬Äây@›ãy¹›ÑLëÄùr7=Cð«^æii+‚»v–žÑ+©^Ü_Q™ò—)ÌËì[¾øFÜz™Ê¼Œ^Aøe/#ì|¼bçËwv¾;/UÏO½—ž‘WXà×¹‚'\‡ ¸¼àÃnÖï¸Yi$ÄP$Ýq³ÂM]5à7" ÝZí°¦t%ª$zÚ.šxp¯éŠfÔï4£²HpÖiäofÛ—5ër¡ÙöqË…«7H~ùþ—i•ßîoPEÿp©ÚÈRui+L¼4,ÝçäI¼èbUaÉúØ2Kˆ¢yï,¯æTQoMÖ'¼%ü˜SívQ\(î*|Iû ¡3«ñ×gl{,#é™dõì2=Mû[ã¶d¦q¶ïZe½Õ&Ó±Hº/V³³çUm^ÅyË~«7oÙÕ"/û¬Ævk–ÝAïîô&;›˜AãÅÑ9Âvs¦!”À퇠s¾ã´¶!—Š€Ìô–ÐÜ×"'F®ŒàÙ¥;Xæ±ø‡äF®‘ïN®À¹öƒ¯–\~ƒ\hâ<¹ÊBªŒAßA­Ä –†àÖ &¶"-Hú‡ÔNm¼Ã47>ƒz$qŠ)èÀýÞkeÁ ’î³í…'ÀAp! 3àÕÂyíʼ¹J[bP§$΀_ç|Fwœ/ea¢‡;Îïww‚,LCpËùŒË„§Ûÿø‡œ79Ÿ¦°=¤›AÄÚ¦ "1ÎWfçÂ]ùXfœ~ÃÎ#xe÷‡yÎWwv~¿üÌÙy]"ÒmÎ'ÔxoçéÝv ñŸ².] "òÍ âÉ® à Ôœ®ö<³¤º‹P€ß0¨À¹Æ²*¹\w䊅+¡¾ß „7|'¨/SÑIœo5#¸5¨‘V"éR;ß4¨²NñW»gP_›§À]†PØ}I÷éŽÄöx"€ß0¨ À«‹|á|DðÆ.dtœ4t7‚ˆŽàäžU°™’=üSÖµKµß3¨OrM6©3ƒºWBŸG¨F¨yë àF¨‘«3ƒª·Ú¼eVTêrt¨ï7È…úî j!uZõÛµgw•R»ø‡Ôî· ª³Æ•"— jÖ{¤‘]ü&…q^›óH/~«Ì V¿aPQã}6K0›·Šà~ñUè6 ‚»à¾°Ø3y¸#×nΟܓ납ðìêôWñf„*S¥T$Kþ—íaÞº!x&ŧÞ:~°äÏîìfH„\ºÈlÀ¹b¿B®ø¦r˜J÷;u92S™ÜíÔUf*;€Híøµ#£vd§n"mº—æZÖ"Àý™ù~!µé’_Ø’?"é78Ü¥v Ií½ÕMs±%E}¿DÌÛŒñí’ß)C}§áIsIDp«…( ï1Ý"º¶´ù.ç[Dp¿WÆ8¯ n"ÍD¶¡S=ñ»LD¤™ˆqþ1¹“îç” ç'Ö}‰@Cç½Þޫ޻c¾ÚÕkŽH3ô0}­þ!çïf"ž}פ-79ÿ nÜ×ѱýa½;}À3KÞ•“MÎÿ0¶),¶ÙË.¶éîbiWb›Âb›QTÚÎLeÁ±M^{¢Õ^lЛ;€ûØ&]‰mÊw±M!± «BzŽŠ¢Mb÷¾­{t1¿Çðlº¦MÚX)͸$)Ÿœ³÷&jǰ×Ù+u£^é¦q9VaæâTº`éK¨¸þkÍ:4Jû‚i“¤Ò÷m-Pú²êS·i¬eÒGÒ#‘þ4iPúœcH»¥ÝÂGÒ3–2ë{PïK…¼½íûÉ»‰n5îÙ÷5î•!QpRéq܉›­Êèx> M›æ+Üøö…˜iüs§ÌEo'îT:É1gn›'.½U™Sé‰LÜÆ¤O*SÙ=“=nÃ"6saù¸'UÜ|öv—øc.ïkø*ËÇquZv¯i¼)™|L‘ïw×ÊÀkVYãmeä¨IuEʺJ¬á«,ÕÐÍAy_¹û"_‹\Ü!«½©ñ¯ùà±àsî æ1"¸{z`· ›+™pÏ:Yp)sî&YÙO¦¸ n•IkUfa*³˜‰ûà‰™‚à…Ü6˜ ¿½ÿ€»’c¢2óbñ€'cô±Ê°Æ7§ÖPeFeØ ›DeÈÈû7¢2sMÄ/,AbçYeªÌƒªÌ2«Œ@•yP•Yf•¡—Ë•Yf•‘…TÈ•Yf• ÄËĽ\Áy½mÝð&Íë>ëÂÜOGpç‹*q?úŠ€†7i”¡ö—yG7Šõ\oUè~âÑÐ9_´çWÚÉ#ˆ ^ÈRõô>“—(''®Û‰ …x/½ã¿Ã^>Hzf^åpãʶ½þÞy/Éps˜>­{nÉ©¢€y7zùZR6â½ônz# ¦×a~â½ÐÐY½œ´-WFôÒ”“4ZÒÙæé¤—üýÈJ|ܤ—d‹êåœ.oøˆÓˇÑ˸‡‡õòaô22Oˆõòaô2²àë%›8— ¬ |"×ÝŠØd8VS‰‹œô2B½\˜^.F/#Ô˅饩ri$•ðÊ4‰†Îè¥I4õ±*+ØnzO¨öïVe¯ÊÊ…UY竲ÆVe Ám÷¢£—A?qÀ ¯]jW½mrÀ]j—¯ÊÐÐ9‡· qxÖn™(Ö–Ü8¼ˆÃ“&Î:|Ñyßéãðä¶‚W^ÁíK×]¸”:€7r{ŒœPp×ŰfõU6äà<€_¿.Mð.^»¨R´G °¼½U 'q.÷]¶ à@–·/æðû>j ¼°¾knæÛ}W©¸ÄßÊItÞ;€Ø÷Q–cß6étÞÕÄÉxÐ:}ÂyÙ¾âü€_¤oÀïp^Ùc‘»}Ÿ8/òçüþË}Îë‰ ·û®9ϯz¿Äùÿ°ïá&ç§eUO_íûô~÷ÿóÞ¿„ƒòX j<!¦ @ºc\H±wðsÅJ÷ Áo(VFðÏ8½`«q¤ßà­ø¹öæûÚÛüªöN›† þÙç·ìÔH÷ØûÁOMÄ(rvyøa ÂI°<ª”³|ÏÇËÜì®Ä¸úe¾DËñýŽtæK´Ý ²!énz÷㢹òUÎï™™tO‰5·Å®kþyRj~R Ýéíry¬F®ÎÏtø ó¥T¦W ‚_ŸŸà~~~Vb¥ÍO`ó3®tj ¤Ûrà5ïIÅ-]: ½ú«áà76?rþáüÄïæ‡;ø~e~âwó¿›èÊ7çÇ(iþξåïìs_Oºbßòwö-gß2µoz„Êmÿ³!x W×”[CpR¥ æG<Ûª Ùîžö‚à6û]÷W¨lö»@éôi[Ü›¼˜6Ê™™³Y¯{ØÜn¡gfÛW$½¹Âs!¤4cé+äö™îžl‰îLOùÙ(tœ×å\ žðž‹×Œ I÷1ñÑÅÂb£ã4‹=/ª»²‘ºu¯gp8”qIFT«†²±à\.ÉŠ›.®ä¯3æbuဇ-ñ.V=þܧ"¶h¥¨è~ÀÍ8>»8ÞÙ.HáEP_‘JÖ=>(§B©`)ë¢r±.Ìyº 2Y!Ül›ÇÞþzôK¼â= ‰fS8ª xœu\Ê^4mFh>+À£¯ýÆÄGÕWýý±êÂü€ Ë&»k¬ÂÚ<Û7ÙÈòö¡ö0¼â+%œìò ¸¡%è¯ê›B}÷pGÔ6*g³=¿¼Ø¯á¦tod~r;›ÞJ*¢ÊÊÿž‡<çœ i796$ý‡°t3ŽIÊ5¡2µ±Ç¡Ž9$Ûš‡‚;EÂ!uZÁ)‡N¸SYZ¶¥ÐW|uhn^ñ+1§þrÀÝë™MÅíí$±@z=&!w£ÒWç<ÛØ•”ÕÍä"Q©ªÊ;!•>fÕw#ÔóÙÕ›#”3’þéU:BíÊ‘¨4UMTÙÞF¥'¡ï€ßYÙ$·æÒº‹&3‚WòòÛéÉÆV6j}Ú$¼¡v¦e£0áòmÓ±£¾‰Ø¡×mf^] ëÊ‘ÕñCçš¼½PµÉÙÅ»v¨ϸÄÕ•ÊGÔx¯eWV6î,õ6MÃÛë7[8¡ts„]ÝîÕhýAgk¿ÉÐ ¼ÁRîz3B ŽÐ#Ɖço/k4Ç›ºéíÃ'gÞ¾¬ P(Pº½)¬\²CÄÛËÌó÷ùƒÓº›?61¸Ý·Ô‚àÕÞO®ŒË$-$¼÷egÞ>ÜöeIeéüº¥w÷N\‰÷eJËN^xKx'x!¹íí;„[Ì¡GÕĤ©]Ö7#DÎë½V3꫷޾׳ºííS„ðÏF(ÐêWFˆx{‰Ó,¾õöý,b ·½}Ãð«Þ>hC"¡+Þ>o¿äidžüG™ªãö°ŒÅlHòÂÌÍ¥.Ž=ÓRM\ªæÇ' ¼X#Ún4ÞÅ«“/ ûÂjû(£È^Å#¯u±!xa±F» Ý%O¦üÃqóöI#¦àC„mÇLZe Güj¢xZôùÊG}' …õ}ÁÒ­òš4 ~±ïqZÇñUû$iï‰eZÎÇFÃh¼ÐˆE[®ØèbõJIX7­~q¼ÆÔ?¡~s„ºÞHVpw¹8^h<Š xÅ•boFˆl2õª…ŒBçÀž¤w—L«KÀÜÐÐ+å]ÜÝó¤…ÈÝ6Æà×Û˜§6Ê¥6†»mLÀ¯·qZô§p©ñnsðËmŒSv*ÅKmÄ‹ó—3‚Ç'^B‚Ÿ…¥©P! ™ô:•KB*—ˆP'!õ’ݸÝîmÒ_Å<-{øÜ”GÌkÍW¤÷邏Mø×vÝéùýþx?±ãJpS°´´=t¶5JÓxp»è°Fi^zæï6¼òà9;mzU›ŽÙÜt±}RÓ+™v*øÜÅœ&!ßíXår³‹Ë´ºpÓÅ%ì9,ÛE}\ÁãÉ®Mæ[Ná +¡`ß`n¼lºˆEÁƒ-bØøg׀糄}}¿¾=ëâ€Û.Æ»ø q#‚· Æó3åûëûõíiã nüsuaãßð@ʰlã“vêõýÊõ´ñ„\¯T/¶o““«•6¾áÆÝøö~MzÖøÆh³Æ/]7¾1ÚŒlã§¾·÷‹ÊÓÆÚÄ>†nþÿMÓNrc´9úÝjó€ÛC¹-«+¶Ûq}"«B‰›ÍEŸ»ø#™Ó‰µ7Ü]n|š/7&sqÜ1g_®5>Üm|žî6¾j븴ú·=r>o|¼Ûø25>ÞlüœÊ8.N³};ÜÄiã±¾«Uì2fÕpÀOŽ&´^¨Œ…LF借 ©T´\fÕpÀO…¼]5LÒmÜ>êƒmóˆO¥÷ï¤w™«†3é}TÕ²œ›¿ÇH]úÑùù”ö“”‘íܸÅÇÚv¸;ùØ:€ƒc$–;’=Ïÿƒí]D^=[ à%âËiåäT»lÇ•#ìT¡o|pn¹ÂÆ?Ö=ÜŽÐC]hþâÎÛ6úÀ„‚ß“+mŒWÚ8öuãvmŸÂÜ“ “6fÚk0>‹š'eÿÛ{˜1Qcp×Å01-³.n´‹À[ù¨‹™µsSÜuQå ž_ÒÅ$¤‹2µ±0¿x­‹…u±b]|tw]T‰ñçW#-ß.:Y•+qÛXßžv±‹ú{–ãí,VbQëÔÆ†g1·…wæ¦Læf,á3Û\)îü8‚WW)ý³‚I'‘÷Qá{ÚÅÎSd_ÓàÎil—ˆÚQ…8ØÜ9¦§a1;sƒuñ^ x“Ot1l´‹…t±¸›Å¢g1¼½ ïtƒ|5‹AîÎbBÒÁ,ªè&Ç _¾7Ãí}û5´¾1jðð˪,z=¯à¿EïLmÓï¤@GÈú]•DÎfñ݉oQ7#d÷Ý1~² •¸‘F7vT2‚Û«I~xî?YÔ½–æTQ¯œp¾ u‘ô*øiù¿`]œ¾ GR‡hƒÓ² ’cܾHöŸ}£5Õ<áá®t9žLQpûÀ†ìW3ÚfÉqI¾†» «DŸ5|䄨Pßxžà€w!Õ$qO¢)ø®ã‘§IOg󾯺©¶'ŒÍa—GÙ4|W€È.ôHr&½¾w3qQ¥Ë5=Öñ¬±¸ Fþ8ÖKCr^(zÀíËZi´™ç½µd Gú¢}$½ëÕ÷*W#½©þ'¿6sYzÄÒ—°oÚ§X–¦á sþªôD¤¯-\‘žß.¨O¥g,ýXPÛ7 uÚ* Áò‘ôÂú¾/mß“ÊE©oó%§Ò+‘>ò%ö5¹m’>”óÝ]p;Àe#Öfjüû;¹=_ÌÅ›k¯ÕÃÅÞ"85®*d»LåÌÀÛ7%0éJ­GLLãgëÖ àÎ* µ¶ÍJîÛ8}•Þ™'Dš‡{!ÓWä®[*ÄPe\Éù¼âi(ëxdâ \J?ûjOe ¼ôô䊇¿iÊ8 ’.NV‰Jáãй:×)"x<ûŠêLàùd×3ÄÀœÆž§ö:“=p;3:k8!½ic&Sú ¯=xy‘ôtB•q*Ë^v;"JÎI¬ïb‚séK?b{j{Š Æ™0¶™ôFzcÒ–þH:<Î[±dOg·ûÅžØÀ\®³†‚às‹*5“xÔ\+C™^Wp={CåÓ“÷ nïqŽû¾öêæšܽÍX2^:njùói÷ÊîÝvpkaÖãùÓ¯ÿIÒaz®ÕK~Vâ~ô¤ó«øsÙé^™P_µ‰Û¿ÍÐD¬Á¥Óó™‘^À Ç£u™.iûY#nü2v÷­}Sçð°mgBnãcŸÛÅÇ<ÀcWí´'yÁÜ&Óð0ÓÉ\ïUUAN»XÞ,Ã&gðЧáÁ¦á1OÃØÎ gBÚÂJ·*«)î34•UIÿï¿ü“•¨¯Ž»ÏÍ¡®º6|Áú¤ðÇÝç3<ÄKn'Ný/ÝÆ ¾ G‰âƽžM]ݤàÛž°áž¼þ)ïBÊüíÚ&Ê<~‘ê}ÂÓ[x;ƒ³DsØ—®'º2àÇôÕH£ÊÙW‘$ìç¯Éìé¯8»Tëãö¶,Qêv—7; Rå Þå(k8ƒÇw ÖÏà#&gÛLöMUD£áÌÝ×|&}¼Î@ó³ÞÙ¥àö9¯°ì¨åLz%‹Ç‘Ÿu¯>[ Ü]軦½ïœuiL\kº6ýÕ ÏÒâ™±GÖO„Ä´õk[ZË8jÊôÂ¥«ínº¶áêwÀ¥SéõDzBÁ¡àCQPÁ³Oªþ4KN?à=°Æ·“ÆsUnè~ê A: y8j#Sæ0àïmüÇ¿ÿó÷Oÿïùßö/+ùrà$îרnÆB·q)Ö oøiͪyߎžàÖ‰¥Ý³»-äáîØaÁ)®°g•g¸½kwÍb}v€Ò ©]3ü.Ko¬ï˜žàöÀç‰}—4!¸}×*þ ñ x±r 8HßÝ¡ °7ÞÒfO7OpwÈù'Ýlõf3<¸›9qÀ!ë\v\á®dÇIf¸+:Ì$`HPz³·%$œg©pâì6Ã~¨Î?"¥'w |_YºÄ Àݳò;i]& 5^Ü{?ŠšàÉ•êýœ¶ç©±Nœ3ÞkÛmßGmÓ·•õËOÕ’Ø¢$¯xè¤X‡„4Îo ülÀ¹Eù¨ÓÕp·ªÞÝ„}eêxew†wúŒÂkâ~ýíÏ¿üç/üÃÿ)aÐÌDyLP-1.10.4/Data/Netlib/nesm.mps.gz0000644000175200017520000022241210430174061015242 0ustar coincoin‹vK®9nesm.mps¤ýÝr캲¥ Þ·Y¿Ã|³,è?x©ÎÊÞÕU»”»43­ûýŸ¤#Bätø✋­¹D'Ãá€| êóãÿúïêÿ}þ÷¿ÿ×ÿóÿñõ?þ¿ÿŸÿ?ŸþüýßÿÇ×ÿüø×þëyÔ×ûøÏ¶Íþƒì?ØþCì?Ôþ#ÙdûbþAö:d¯Cö:d¯Cö:d¯Cö:d¯Ãö:l¯Ãö:l¯Ãö:l¯Ãö:l¯#ö:b¯#ö:b¯#ö:b¯#ö:b¯£ö:j¯£ö:j¯£ö:j¯£ö:úºÎ¿ÿüùï_ÿí5þmÿE§ñé_rú—žþ•Nÿʧû/:]N×£Óõèt=:]N×£Óõèt=>]O×ãÓõøt=>]O×ãÓõøt=9]ONדÓõät=9]ONדÓõät==]OO×ÓÓõôt==]OO×ÓÓõôt½mû×i¼œþŧÉé_zúW:ý+ŸþUþu/§®G§ëÑéztº®G§ëÑéz|ºŸ®Ç§ëñéz|ºŸ®Ç§ëñézrºžœ®'§ëÉézrºžœ®'§ëÉézzºžž®§§ëéézzºžž®§§ëéÏõþçó_?£óõ3™ŸÙü,æg5?'ós6?oæüd~f󳘟ÕüœÌÏï»~NŠÿ÷ûªËáûg2?³ùYÌÏj~Næçl~.¿?“9?™ó“9?™ó“9?™ó“9?™ó³9?›ó³9?›ó³9?›ó³9?›ó‹9¿˜ó‹9¿˜ó‹9¿˜ó‹9¿˜ó«9¿šó«9¿šó«9¿šó«9¿þœÿ_ÿþÍïëg2?³ùYÌÏj~Næçl~6ç's~2ç's~2ç's~2ç's~2çgs~6çgs~6çgs~6çgs~6çs~1çs~1çs~1çs~1çWs~5çWs~5çWs~5çWsþšßÿõù›ß×Ïd~f󳘟ÕüœÌÏÙülÎOæüdÎOæüdÎOæüdÎOæüdÎÏæülÎÏæülÎÏæülÎÏæülÎ/æübÎ/æübÎ/æübÎ/æübίæüjίæüjίæüjίæü¿õûaê÷ÃÔßS¿¦~?Lý~˜úý0õûaê÷ÃÔßS¿¦~?Lý~˜úý0õûaê÷ÃÔßS¿¦~?Lý~˜úý0õûaê÷ÃÔßS¿¦~?Lý~˜úý0õûaê÷ÃÔßS¿¦~?Lý~˜úýøÍïÿö÷7¿¯ŸÉüÌæg1?«ù9™Ÿ³ùÙœŸÌùÉœŸÌùÉœŸÌùÉœŸÌùÉœŸÍùÙœŸÍùÙœŸÍùÙœŸÍùÙœ_ÌùÅœ_ÌùÅœ_ÌùÅœ_ÌùÅœ_ÍùÕœ_ÍùÕœ_ÍùÕœ_Íùk~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~¿L~ÿÏÿã7¿¯ŸÉüÌæg1?«ù9™Ÿ³ùÙœŸÌùÉœŸÌùÉœŸÌùÉœŸÌùÉœŸÍùÙœŸÍùÙœŸÍùÙœŸÍùÙœ_ÌùÅœ_ÌùÅœ_ÌùÅœ_ÌùÅœ_ÍùÕœ_ÍùÕœ_ÍùÕœ_Íùk~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~?M~ÿóÿþÍïëg2?³ùYÌÏj~Næçl~6ç's~2ç's~2ç's~2ç's~2çgs~6çgs~6çgs~6çgs~6çs~1çs~1çs~1çs~1çWs~5çWs~5çWs~5çWsþšßÿn÷¿&ó3›ŸÅü¬æçd~Îægs~2ç's~2ç's~2ç's~2ç's~6çgs~6çgs~6çgs~6çgs~1çs~1çs~1çs~1çs~5çWs~5çWs~5çWs~5ç¯ùýÿó7¿¯ŸÉüÌæg1?«ù9™Ÿ³ùÙœŸÌùÉœŸÌùÉœŸÌùÉœŸÌùÉœŸÍùÙœŸÍùÙœŸÍùÙœŸÍùÙœ_ÌùÅœ_ÌùÅœ_ÌùÅœ_ÌùÅœ_ÍùÕœ_ÍùÕœ_ÍùÕœ_Íù8ÍÓ©~ëÿó3™ŸÙü,æg5?'ós6?›ó³9?›ó³9?›ó³9?›ó³9?›ó«9¿šó«9¿šó«9¿šó«9ÿ¯>ô=þ~&ó3›ŸÅü¬æçd~Îægs~6çgs~6çgs~6çgs~6çgs~1çs~1çs~1çs~1ç—z~6ã‡Íøa3~ØŒ6ã‡Íøa3~ØŒ1çs~1çs~1çs~1ç—ÓùÙœŸÍùÙœŸÍùÙœŸÍùÙœÿW5çWs~5çWs~5çWs~5ç×ÓùÅœ_ÌùÅœ_ÌùÅœ_ÌùÅœÿ•ßÿö?þý¿þ¯Ïæþßÿç 2^?ýßõ§ßÿÛþùóû$Àû¿üóx<2•w½ü„S §‘ð¤Ä6œk8ß —.wµ†ë`xN&<Õð4^òNñOx®áùŽò¥†—ÙÏþïðúS/üÏ?ÛþœØ„S §;á\ÃùN¸Ôp¹®5ü:ïGt2ᩆ§;Ṇç;᥆—Ùð7øx‡×ŸúÃf{<’ §>Rï¥lå=õý„s ç;áRÃåN¸Öð‘zϔ݄§>Rï»Ð®lÂs Ïw”/5¼Ì~ö7ù6có|zPÎl©†ä=ííw¶ù¨õþ1–÷&\j¸Ü ×>’wÝ²î» O5|$ïº?gÚbÂs Ïw”/5¼Ì~ö7(y‡×ŸúSåã!¤ïžö'œjøHÞ9±>Ô„s ç;áRÃåN¸Öð‘¼mRÄ„§>’÷gð¶Ù«çžï(_jx™ýì_5ï_û:MyßL8Õp¹ù‡þ–ÌWÍû×ß¡õ½ —.wµ†õu²3ÙÏžjøP_'ú›÷¯š÷¯¿ƒ}W¾Ôð2ûÙß`å^ºZ&h{l6œjøÐú¾Ésà›p®á|'\j¸Ü ×>’÷çú(Ä&<Õð4²@³n{1Ṇç;Ê—^F?ûÏ<ÿYóþ9–w*m«Ÿý³æýs,ïÛ³1Je3á\ÃùN¸Ôp¹®5| ïôÈÞ“ O5| ï¼eIµ-ü¬yÿËû·òbÂK /£Ÿý'ïoó¯?uß^àéªto.Sç­ÐåÔðk龕Ëöæs σ7_+î )Þáõ§¾t‰e§G2áTÃƼÒþ,ØÍ„s ç;áRÃåN¸Öð‘1ŸDõôÙS ™ëÞ‰žkxT¾î]¼IP /£Ÿýg…}Ëwxýéâ³oÏÿN5|h®ÛÓ.Ù„s ç;áRÃåN¸ÖpMÜ›ÝÔð‘¼?;›¼Ù«çžG•·‰+5¼Œ~v³cFu¯’Fz›ç4Ëv»ê^%ÑXøs™5áu¯’øNxÝ«$¹^÷*i¤·yzÀB» ¯{•4äeˆS1[T÷*)ßQ¾îUR™ýì¶¼Fò¾IRz˜­Nª{•#yoÃë^åHÞÛðºW9’÷6¼îUŽäý;ÜluRÝ«É{^÷*Gòކ׽ʑ¼ŸÃßQÿly ä}Ó’ùAل׽ʼáu¯r ïAxÝ«È{^÷*ò¾qz¨(™ðºW9÷ ¼îUäýûæÙ&®îUäÝ}ö÷ÃÕ?[^óy?]Ãö.ˆËcW1áu¯’øNxÝ«$¹^÷*¯óþÓR'^÷*iº!?Ž^çóþ~‚½†_çýøèéwË‹ê^åÈ<ŸwNº± ¯{•#ó¼¦Qí.Þv×p¾^÷*Gæù6¼îUÔ{ ]Ý«œ¯÷÷cê5<ßQ¾îUŽÌóïÏ^ÉÈWÍû×XÞ…iÿå2_5ï_cy?—ÌWÍû×XÞÛðºW9’÷6¼îUŽ¬ï´¿L°Ùl¤ºW9²¾¿-t5b_5ï_cy+ ¯{•#y?¦›ß-/ª{•óõþ~®»†ä=3¥Çéêu¯r$ïmxÝ«É{^÷*GòþFJÕ¿ŸQ¯áéz™ØÞ>Ð^½îUÎ×ûûIø^?{ ?üùcÿGòþeÌÖÕ}›‘¼“>%³kDußf$ïmxÝ·É{^÷mÆúù0;'T÷m†úùGyδ6¼îÛŒäý[y^÷mFòþýÙ÷_ûOußf ïßC>m&¼îÛ ä=¯û6yÂë¾Í@Þƒðºo3÷cž&^÷mFÖ÷sKü~Œ¶†°È÷ݓٷ¡ºoCe6üýeóûÏ#û6D™v³wÁu߆¯ûù÷þA©8ïý•öÎwÂë¾ ËðºoÃCû6’K±ÒÕ}Ù·ayF›]#®û6œï(_÷m¸Ì~ö÷—”làHÞ·ý9ËS1áÕ¿óȾͷ1áÕ¿3ß ¯þåNxõï#yß4=?º1à\ýûHÞ·’²læa!®þGž=xKoo¾úw.³Ÿýýåå8’÷TžSËÕ¿ä©È#ÛðêßGòÞ†Wÿ>’÷6¼ú÷‘¼ŸÑÆû»Û5<Ý ¯þ}¤Þ[å«Éû÷gßm Wÿ>’wÒüênLxõïCõN%ÿð÷W§k8ß ¯þ}¨Þ›ðê߇êý]°æi®þ§ôûkà5<*ov¸ú÷¡z?}ö¯š÷¯Á¼¿ù»ñ°\ýûHÞÛðêßGòÞ†Wÿ>’÷6¼ú÷¡¼?×çÇžMxõï<Ía¿jÞ¿ó~zòá«æýk,ïçð÷— làPÞ™¨Ô5îý½é>²_÷wÊöêÕ¿ä½ ¯þ}$ïmxõï#y?¿^ÃÓðê߇òþVÞøw®þ}$ïߟ}ÿ}lƒë3'#y?:1áTÃGž-d¥Ìb¹†óp©ár'¼>03´¾7ÒÕfæóþþºq σʟÂK YßßÝØ®û6CõN)k6ÏœpÝ·ëç_-±Ùöáºo3ÖÏûðºo3ÖÏûðºo3’÷fç„ë¾ÍÐ<zÊëý5äžï(_÷mÆúykFÞ_¶ý±ÿywpáýýÜ>ÀaZè±^÷mò„×}›¼áu߆xÜy£õý]ã>°Oû(IËÃìqÝ·È{ |Ý·È»ûìï—øýØñï™·Tmàû½5|ú9«÷«k8ß ¯û6"wÂë¾LïÓ¾ßaXÃGê= =ìw¥îÛHU^LxÝ·‘éç¬Þ/÷ûylc$ïŽAÿû'ïõ§Ùðú¼ððú¼Èðú¼ÍHÞÏFìýnÞî„×çmFò~jï7(Öði÷~)Üý—ég‰ßï‘«á×yÿ¾¸}òAê¾Í@Þƒðºo3÷ ¼îÛÈç.¤îÛÈç.¤îÛÈôƒÐï7ïÕð2{óï—¿ýØ™fï÷ÅÕð5îL¾jø×ð÷›X~z›‘ÉêÌaß/o©át'¼6¥ÂwÂkS*r'¼6¥#ƒöñ~jÄpX©MéÈduþæÂûÝ55<Þ¼¥ÀR›R™†Èï7´üô6ó“ÕûÅ,5|ºâÞïþYaõúk•o2²©i´¶F:ôÚ„]öAh­­‘òðÚ©Ü ¯­‘!­‡ùõûõË5|¤%~ÑÊtVZ[#zù©ûÃð8­­‘–ÙÏþ~/ñÏ «³Íù±÷«Œk8Ý ¯­ÑHÞÛðÚä½ ¯­‘êðÚiº^[£‘¼·áµ5Éû9üý¾â"¦C Óëaf^Q¦Òh?oxœV”©|'¼¢L•;áeêÐ×ë(±ˆ ¯(s$ïÏ%æ!bÞº ejUÞP­(SËèg7m¡Ö–x ïmW©µ%Öé­÷Û’k8ß ¯-±ÊðÚä=¯-±N?’ú~ós σÊ൶Ä:½õñ~¿ñOO«#¯Ç9mû¼_‰\ÃGV¦íQ¿þ~‹r ç;áeŽÔ{^í€N£÷ëkxº£|E™šï(_QæH½vƒ2µ¢LÞâþªyÿËûù ì_5ï_cyoÃ+ÊT¹^QæHÞÏ»F_5ï_Cyw/¨ùªyÿú;4Ï·ÊW”©Ó_Ÿ¿ù‡ˆ ­ïïQkÃ+ÊZßõ9ÛÙ—6hE™Cë{^QæÐúÞ„W”9ÔÏûhE™óy¿Aº†ç;ÊW”©C¨½>½yu€Ö×& Õ{)é÷Á‰Ïš÷ϱ¼ŸŸ·ù¬yÿË{^_›0’÷6¼¾6a¨¯ó/.ÐúÚ„‘¼óž %ó ­¯Mª÷·òÅ„××&ŒÔûù³¿ß¯û³ù Ûðºk4”wÿæ­»FCyoÂë®ÑPÞ›ðºk¤Ó¯Ëx¿^¸†ì½7Ì~Ö]#Íw”¯»FCy?½yàýÞÝŸmŸù~þýêÝ>½Wù~[o ŸíiÿN¿ÃMèùÑÞgõwún²éï›ÄþN¿ÃM^¯«øé*ÿN¿ÃMTžŸ~7áSïpI´—bÂ'Þáö¾|®¯„ú;ù·ïž˜žlü;ý7Ùö”~zÚ¿Óïp{.‘»ü¬°gßá¶=ÇÌëA>ó·xV¬˜ð™w¸=ïý±çŸÉêïô;Ü4%N? õïô;ÜtÛRùiþοÃm×g8™ð™w¸m”¶\¹Ìßéw¸½¦ÊòóšÓ¿“ïp{…s*bÃ'Þáö ÏÏa·Ûð‰w¸=Ãõ9âÅ~ö©w¸izïü˜ð©w¸Éþì*ëT9ý·ôw› Ÿx‡ÛóæKN¿WŸ}‡ÛÓ}sJ?.ü}‡åòàòcÿξÃvyü‚•¿³ïpãGÖ-Õy~ön”ö¼×gJÿξßÊi:…ϼÃö}ßr]efßáÆ‡”$?õä;Üžÿéé`¹&nòn¯ðýé Å„O¼ÃíùŸ¸(çÍ„O¼ÃíþB3öæ'Þáö O¤šLøÄ;Üžÿi.Ñ?0ñïä;ÜžÿI‹(Ûð‰w¸½”/¹~7ðïä;Üþð?%ý>~ÿ¯ÏÓä]^/6~V ¯ÏÓäýuõçtco¾>O;wþç9àé§£þ;ùºçÍo[Î?üïä èžáJOk?ûÄ èžáÏŠ©…¾Ãëó´y—ž]Ôzòýu¯Aû\e~ØÄßÉ÷×ý¡çgAt>ñþºçJÏ֨ثO¼¿îuó/?°™ð‰÷×=ÿÓ#tï¯ûó³ÄÛÏžÕßÉ÷×=ÿS.ÏÄÛð‰÷×=•ßè9ä>ûìûëèñ(’ž!ÿ;ûþºm/ü\§’ ŸyÝ–9me·7?óþºíÕÙÐfÃgÞ_÷¼úÎZó>ûþºçgOYë ;ûþ:zŽømÿù:íßÙ÷×mûs‰ÌÖO½×èi‰ÒÏ—¸ÿN¿×èñú^"=ó^£· ¥Çéêï5zm>p~°ýìï5z…?3Gfóaê½FOûN{Êfëcê½F/ûþl ÍÆËÔ{^[9©±À3ï5z¡P}zXcÀ§Þk´‰li¯«Ìì{6ÑgKkôÔ{6zu´d?ûÌ{{2Nü}¯Ñã¹>ïIígŸy¯ÑÆ’žS¥½ù™÷mú²¡?{Ôgßk”ùis1xê½F™^ß ,öê3ï5z.®Ï1ûóeÞ¿³ï5zv6¯ÍBcÿ§Þk$úœ¥÷Ÿ¯Uþ}¯Ñ‹g¥ýçë6gßk”^_ÇÕlv¦ÞkôÚµac§ÞkôtÿÏž´.R³ï5zŽ8Ò‡;õ^£g_’KýbãßÙ÷iN²'ûÙgÞkô̺ên øÌ{þywu¿fdö½Fº¿6N6>ó^£×[òƒŒ‡¥êßæyzMôIƒ¦êßi¨Ÿ<ç«l«xoá«#OMÕ¿¼·k«xoáë³oBöêÕ¿¼ÏŠþy:‘úö¼wxõïï·¡ˆø¬yÿÉû+|d1.’ªÊ;sÙž¯{‡Wÿ>”w~í LÕ¿äý9lž«»Ø«Wÿ>”w)œ7ãß©ú÷¡¼?ËÈÞ|õïyç^ßdf«|õïyç×&·Ô5îýkx ÎuÖN½ÇlMÏ5¾˜ð™÷˜½XâCkÉ̾ÇìùÁËÓ¿g>ó³ç\ó4rlüûÔ{Ì^/£©%3ù³wü˘ð‰÷˜=›M›&«üÌ{Ìò³^YŠqÐSï1Ûxú¸‡q‘Sï1{†?»›bôÔ{Ìž=­<ê±gßcöœ¦wÎ?Oóþ}ÙöºÙÏ>õ³²óãçM¿Çlˤ¼ÙÏ>ñ³§âýµÃþkçÞk´y2 zæ½F¯'_Ï*ˆ<õ^£ç4»ïõÙƒ¿³ï5z:XÖG6þ}ê½FÛ‹A§Íø÷©÷mÏž4Óf¥›y¯ÑS8Þë|ü;û^£íQžVŒ œy¯ÑËèãw§tö½F¯.±>õ^#Ê{É»=õ^#N…õ/>ü}¯‘<Òs¢Þ @Ÿz¯K–ía7¦ÞkÄùÙfûìÁÔ{Xžíü/“š}¯Q¡ç¨S5|æ½F¯-n}NW6|â½F¯pÊõM#'ßkôBZÏåÙ:è™÷=ÿÓÓÿ‚ÔÙ÷½¤>]}æ½FEŸwþP³ù0ó^£·t[}{ÞßÉ÷=ÿÓs‘)d<ìÌ{^^†ö߇…&ßkôJÜ‹§™‡fÞkô¦ÀR¿™øwò½F¯›ORì³3ï5z[¡´=ìÕ'Þkôú쯭³ù0ó^£çzcB¹úwñqy{üî]|Ö¼åýé&”ëëïÞáÕ¿å}×­>Šü¯þG|œ>›“Óg¯þ}¨ÞŸW¯ æ^ýûPÞËþlm @çêßyÄ¿ó›Ì˜ðêßyÄ¿§×Ÿ·16pê}VO3÷‡u‘3ï³z†—=oÉð¹÷YñþêèíÕ'ÞgõZ ŸC¶nû̾ÏêiöM¬ŸzŸ•¤ýñvÆþO½ÏJrÚ³Øg¦Þg%ÏIšÒn<ìÌû¬^~àYðÖÃN½Ïj“²'{õ™÷Y=¨Ç¾³Ù|˜zŸÕ3\s¶ø~ê}V¯¿Yd7»Sï³Ú¶"º‰yö`ê}VÛëQà-Û«O¼Ïêfôõ§ymàÜû¬äéaˆ~ŸÕÓI¼ž1áSï³RÕßïËü~Ÿ•¼,ìfÃ'Þgõ¼úë¹F»{0ó>«§ý¶ãdíÿÜû¬^oÎ߿ɇ¹÷Yéó³«5àsï·y:™´W#6û~Ùžýö0zêý6²QNZìÕgÞoó¬Ößç¨'ßoózTèEôŒŸz¿æçBAvçdîý6IŸ_ ¾Ÿ{¿œ&«×kiª—‘~þñÚ}0Zª—·½Hªñ°Rý» q™gщAØRýû@Þ÷¬ÙíìSïöyve/'eo~æÝ>O+ôL]-ØWPõï2ÒÏ¿)»ù Õ¿ËH?¿eýÍûWÍû×PÞõ…uÄâ{©þ} ïúOzêž D–êßòþ ÎôÅxX©þý:ï¯g ŸÍ‘}z_ªx5?{«-Û݃©—2ñ?úúC#Vºêßeä¹Ê´•MÌóóRý» =W©”ì#èRýû@Þ_Oľø¿ ¯þ]†ž§ÕýÙZ™ðêßeèyZÊ»Ý|ê߇òþlÇé^ý»Œ÷¼ÿSÊïLû ªþý:ïûk¢¦lþ—ê߯ó¾ï¯gòfü»Tÿ~™÷-=çy6›N¯ êßòžõŸíAÅ~öêß/ó¾)=çùg{côÌ«ÿ¾Ÿ€×dÃ'^ý÷Þï“m7zæÕ¯-¯÷s™&|âÕ¯=«¼Ëéæg^ýG¯oJ‘}~~æÕ¯§}žsµÿ3¯þ{=õñšêÌÎÉÌ«ÿžá{fy;õê¿WOË;„-Õ¿ø¸ý9O>ÛJcÿ¥ú÷÷úæ?Ô8h©þ]FþžÔþ¼ËߥúwÙ§Õןê0ÏÏKõïcy­ïöù;ùÖÄ×·´˜4ÛÄUÿ>ðÊÇ=ïªõÛ÷g_ÆõØ_ßhUcÀ§^ÆõØß{öê3/ãz=úœë Ÿz×cßŸÍ „=ù2.~¤Óã÷s/ãz~øç|cþŸz×3úeÄÌæÃÌ˸¾ÅS ‘ç^ÆÅéEÿ @ŸzÓ3ñ…‡z??y’Ý||êe\œ¥5àS/ãâGÎT쫦^ÆÅòœ,t·ÒM¼ŒëEFh'¶Ÿ}æe\ütB¹$c§^ÆÅúžmŒ y×ûú™ì×ç§^ÆÅšŸ^æ>ó2.~.îûïg_ÆE…Ÿ%—ÍóóS/ã¢×ÎÃéɇ©—qñëÏUü~|öe\Ï´ÑÎjlàÔ˸¸”ÇëÙD>ó2®×—¨sbƒï§^Æ%¯!—ŠÙ=˜zïåõ´Á÷S/ãzOtdŸŸŸz׳/Ò½X€>õ2.ayõ&Vù‰—q½wÈ%³yŠ{æe\ïîbßÈø÷™—q½xÐÃ|ÿ}æe\¯pzNóöæ'^ÆõÚd~µ7ƿϼŒë.¯¯óšð‰—q½¿¼ÿ2‚&|âe\¯p¥b·>f^ÆõzæD_ï÷ùµZý»Ž|ÿý9lK1&T«בý:ݼþ®Õ¿ä]^/ Ùf÷@«בï¿o/ fü»Vÿ®CûuÊzºzõï:²_WžK¼}ö@«Èûûûóy·‰«þ]‡öi÷§66pæ%l¯oa?‡l1yæ%l¯‚ͯwÌšð‰—°½¾ÿþl¨É†O¼„í}õDÙð™—°½ÀÊc+Ù^}â%l¯‚}¶ãöÕ3/a{lÊõ¯Ûü| Û+qô4áÆEN½„ò³=(–¿kõïë;½Ÿh%Cÿµúwyž–Dwëaµú÷‘õ}{ú¸b¶Vÿ>Ò×íû³âìÖÇÜ èž=ñ¦§«O½€î‘øQ’ ¯þ}¤¯{úß­þu›¿ÿóÿüo_ÿÙßïÞ¯ï=`~.ãϰأè8ŠºGñÃýMñð(y¸¿`¥÷ÇÚ£þõïï»ýo÷(:Ž¢îQ|ÅÝ£äáþSx”>ÜŸ$hú_ŸßwÿúßîQtEÝ£øáþ®wx”GI÷(}¸ëŸñãÐþ£«ýÇ¡ýGWûCû®ö‡ö]í?í?zwÿzýÛý¿/<Šî-áQüpßE’‡{â!ŽâîQr%Ý£ô8J»G¥ã¨Ô=*GåîQå8ªÀ£ŽžäÔ›ÄGÑquâã(î%ÇQÒ=J£´{T:ŽJÝ£òqTîUŽ£JOUÚ\uŒ/êŽ/:ÆuÇ㋺㋎ñEÝñEÇø¢îø¢c|Qw|Ñ1¾¨;¾hs]m|Ô1¾¨;¾è_Ô_tŒ/êŽ/:ÆuÇ㋺㋎ñEÝñEÇø¢îøâ͹“ø¨c|qw|ñ1¾¸;¾ø_Ü_|Œ/îŽ/>ÆwÇã‹»ã‹ñÅÝñÅ›óCñQÇøâîøâc|qw|ñ1¾¸;¾ø_Ü_|Œ/îŽ/>ÆwÇã‹»ãK6ô—™OGú̧£ýåÓQ‚þœòé(E5ùtTBùtTFùtTAêØª*ú‹Æ§£ýáâÓQŒþ>ñé(A†øt”¢¿6|:*¡?*|:*£¿|:ª ?lUÕ ýyËÓQ„þŠåé(F¬òt” ¿Iy:JÑŸž<•Ð_˜<•Ñ’<UÐß‹´ªê†þ,äé(Býñt£?òx:JÐßr<¥èO6žŽJè/3žŽÊè0žŽ*èï,~õÿ« _ÿí£yõí{#ñ¿ý·×/þ}|$1—ÇÏ\¿áï£ôû¨ÿªGý†ÿëü þ¯óEZêñzVøñ07Oææ Ý<Á›'suB7OðæOáó7ÏææÝ<ÛgsuF7ÏðæOáó7/ææݼÀ›suA7/ðæOáó7¯ææݼ›WsuE7¯ðæOáó7ŸÌÍ'tó Þ|2WOèæ¼ùSøüÍgsóÝ|†7ŸÍÕ3ºù oþ>óÅÜ|A7_àÍsõ‚n¾À›?…Oß<™yžÐqüçNøû¨ÿ< l¯>»Y&-Lð³›yž}v‚Ÿývê|vj>û5á(aø¿nHg)F‹3”ά2ÄH:†ÒÂcé¸#×ÏNH:îHgÂïHg–HFK$ ”άq$H:ÒÂcé¤#ÔÏÎH:éHgÂïHghF 4+”ά°¤H:…ÒÂcé´#ÖÏ.H:íHgÂïHgÚFí'(Yß)!é”îK—:Ò¥úÙI—:Ò™ð;Ò™æ„QsÂJgº ÊHº ¥;…ÇÒåŽt¹~ö„¤ËéLøéLkĨ5â¥3½ $]ÒÂtÿÆÒ•úÙóÏ.¦³ÔYÉÏÚ½ýóúží.>üÔý×ÏQ¿áÿ:ÿ„ÿë|‘›7­‘ ÖHÞ¼ém~¨öæ Þü)|þæMs"¨9†7oº‹Ÿ¦½y†7 Ÿ¿yÓjDàÍ›õý§‰ho^àÍŸÂçoÞ,ЂhQxóf…ýYÆÛ›Wxó§ðù›7K¤ %R¼y³Æý,¤íÍ'xó§ðù›7‹” EJ2¼y³Êü,eíÍgxó§ðù›7Ë„ eB ¼y3Ïÿ,&íÍxó§ðé›W3Ï+šçõÇA =JVÎ>Ü®ÿUr¬ë¿®Âÿu¾ÈÀÍ›y^Ñ<¯oÞLÔBèæ Þü)|þæÍ<¯hžW†7o&jató oþ>ófžW4Ï«À›7µºy7 Ÿ¿y3Ï+šçUáÍ›‰Zݼ›?…Ïß¼™çÍóšàÍ›‰Zºùoþ>ófžW4Ïk†7o&jÉèæ3¼ùSøüÍ›y^Ñ<¯Þ¼™¨¥ ›/ðæOás7|jsÏ,3ýCZoYì#Ïÿ~U©>òÌ(œ~Â~q g÷”s½ÈŸóyA¸¸ÇŸßïQÛ5éŸóyÁÍ«{.ú¾—ýñþÈö¼ÿUÏ{ Oîé&<ý†ÿâžÝ“ÔÍÍçn¸{;¾Çú`1J/uÓ[Ÿ8Fé¥nzë£È(½ÔMo}F¥—ºé­/£ôR7½õ©f”^ꦷ>îŒÒKÝôúç ã{¬Ïõ¢ôr7½õ_”^> ŒÒËÝôÖG„Qz¹›Þúì0J/wÓ[*FéånzëÓÆ(½ÜM¯ 9¾ÇúX-J¯tÓ[Ÿ·Eé•nz냸(½ÒMo}B¥Wºé­î¢ôJ7½õ™^”^馷>ì‹Ò+Ýôú§€ã{¬Oµ¢ôj7½õqW”^í¦·>‹Ò«ÝôÖdQzµ›Þúä,J¯vÓ[©EéÕnzë³¶(½ÚM¯7¸Gû%¨0½æÛQÿ¿›Ü÷žšpœ^ûµ©0½æ¼ \Ü7¥N ™ó‚›W÷ªS~ÌytÉ}·ª Çéµ_Í*èæs7Ü}g+¾Çú$”^ꦷ~9 ¥—ºé­ßZBé¥nzë×™Pz©›Þú='”^ꦷ~ ¥—ºé­ßŒBé¥nzýW¦â{¬_BéånzëwƒPz¹›Þú¥!”^~›¥—»é­_3Béånzë÷Pz¹›ÞúÅ$”^î¦×c)¾Çú ”^馷~5¥Wºé­ßÙAé•nzë—yPz¥›Þú-”^馷~ý¥Wºé­ß Bé•nzý†â{¬_€AéÕnzë7cPzµ›Þú•”^í¦·~—¥W»é­_²AéÕnzë·oPzµ›Þúµ”^í¦×_'¸Çã­1ï·Ç„é5¯•ù¯øå3tÅ(§÷{¦×œ„ËqT˜^s^póz¦×œH—Ž£2 Çé=ÂÞGtó¹^Îáñ=Ò‘^Bé¥nzéH/¡ôR7½t¤—Pz©›^:ÒK(½ÔM/é%”^ꦗŽôJ/uÓKGz ¥—ºé¥rï‘ô2J/wÓËGz¥—»éå#½ŒÒËÝôò‘^FéånzùH/£ôr7½|¤—Qz¹›^>ÒË(½ÜM/—sx|r¤WPz¥›^9Ò+(½ÒM¯é”^é¦WŽô J¯tÓ+Gz¥Wºé•#½‚Ò+ÝôÊ‘^Aé•nz¥œÃã{Ô#½ŠÒ«Ýôê‘^EéÕnzõH¯¢ôj7½z¤WQzµ›^=Ò«(½ÚM¯éU”^í¦Wô*J¯vÓ«åµÇ®ÕÚµúèîZ}»Vh×ꣻkõqìZ} ]«î®ÕDZkõv­>º»VÇ®ÕÚµúèîZ}»Vh×ꣻkõqìZ} ]«î®ÕDZkõÑݵú8v­>ЮÕGw×êãØµú@»VÝ]«c×êíZ}tw­>Ž]«´kõÑݵú8v­>ЮÕGw×êãØµú@»VÝ]«c×êíZ}tw­>Ž]«î®ÕDZkõv­>º»VÇ®ÕÚµúèîZ}»Vh×ꣻkõqìZ} ]«î®ÕDZkõv­>º»VÇ®ÕÚµúèîZ}»Vh×ꣻkõqìZ}tw­>Ž]«´kõÑݵú8v­>ЮÕGw×êãØµú@»VÝ]«c×êíZ}tw­>Ž]«´kõÑݵú8v­>ЮÕGw×êãØµú@»VÝ]«c×ꣻkõqìZ} ]«î®ÕDZkõv­>º»VÇ®ÕÚµúèîZ}»Vh×ꣻkõqìZ} ]«î®ÕDZkõv­>º»VÇ®ÕÚµúèîZ}»V½Öêxßîû½»azÍ yÿ+~m/G1 Çé=ÂÞG…é5çár¦×œܼG…é5çҥ㨌Âqz°÷QÝ|sx|t¤—Pz©›^:ÒK(½ÔM/é%”^ꦗŽôJ/uÓKGz ¥—ºé¥#½„ÒKÝôÒ‘^Bé¥nz©œÃã{ä#½ŒÒËÝôò‘^FéånzùH/£ôr7½|¤—Qz¹›^>ÒË(½ÜM/ée”^ô2J/wÓËåߣlûüH7½B7áÝô »¿ªîÓ+ÝôЏ¿ªî’nzEÝ_U÷ù‘nz%¹¿ªÞ„wÓ+ÙýUõææ»é•rïQ7÷G÷|~´›^%÷G÷šðnz•ÝÝóéÕnzUÜÝó i7½ªîîùüh7½šÜÝk»éÕìþè^sóÝôj9‡÷xü1€÷ÓûÕm­Ž°÷QŒÂqz°÷Qaz¿º­Õö>*LïW·µ:ÂÞG…éýê¶VGØû¨ŒÂqz°÷QÝ|sx|t¤—Pz©›^:ÒK(½ÔM/é%”^ꦗŽôJ/uÓKGz ¥—ºé¥#½„ÒKÝôÒ‘^Bé¥nz©œÃã{ä#½ŒÒËÝôò‘^FéånzùH/£ôr7½|¤—Qz¹›^>ÒË(½ÜM/ée”^ô2J/wÓËåߣé”^é¦WŽô J¯tÓ+Gz¥Wºé•#½‚Ò+ÝôÊ‘^Aé•nzåH¯ ôJ7½r¤WPz¥›^)çðøus×ÖçG»éUr×¶ ï¦WÙý][Ÿ^í¦WÅý][¯vÓ«êþ®­ÏvÓ«Éý]Û&¼›^ÍîïÚ67ßM¯–sxpÇ_*zÿÅ¢0½æOýWüè8ŠQ8Nïö>*L¯9/—ã¨0½æ¼àæõ8*L¯9/.GeŽÓ{„½*èæs7¼œÃã{¤#½„ÒKÝôÒ‘^Bé¥nzéH/¡ôR7½t¤—Pz©›^:ÒK(½ÔM/é%”^ꦗŽôJ/uÓKåß#ée”^ô2J/wÓËGz¥—»éå#½ŒÒËÝôò‘^FéånzùH/£ôr7½|¤—Qz¹›^.çðøåH¯ ôJ7½r¤WPz¥›^9Ò+(½ÒM¯é”^é¦WŽô J¯tÓ+Gz¥Wºé•#½‚Ò+ÝôJ9‡Ç÷¨›ûÓñ>?ÚM¯’ûÓñMx7½ÊîOÇûôj7½*îOÇ{…´›^U÷§ã}~´›^MîOÇ7áÝôjv:¾¹ùnzµœÃƒ{<þŒâûÏ)†éýì¶VGØû(Fá8½GØû¨0½ŸÝÖê{¦÷³ÛZaï£Âô~v[«#ì}TFá8½GØû¨‚n>wÃË9<¾G:ÒK(½ÔM/é%”^ꦗŽôJ/uÓKGz ¥—ºé¥#½„ÒKÝôÒ‘^Bé¥nzéH/¡ôR7½TÎáñ=ò‘^FéånzùH/£ôr7½|¤—Qz¹›^>ÒË(½ÜM/ée”^ô2J/wÓËGz¥—»éårïQŽô J¯tÓ+Gz¥Wºé•#½‚Ò+ÝôÊ‘^Aé•nzåH¯ ôJ7½r¤WPz¥›^9Ò+(½ÒM¯”sx|z¤WQzµ›^=Ò«(½ÚM¯éU”^í¦Wô*J¯vÓ«Gz¥W»éÕ#½ŠÒ«Ýôê‘^EéÕnzµœÃƒ{<þÆóûo=‡é5ú¿â?MÇQŒÂqz°÷QazÍyA¸G…é5ç7¯ÇQazÍyté8*£pœÞ#ì}TA7Ÿ»áåß#é%”^ꦗŽôJ/uÓKGz ¥—ºé¥#½„ÒKÝôÒ‘^Bé¥nzéH/¡ôR7½t¤—Pz©›^*çðøùH/£ôr7½|¤—Qz¹›^>ÒË(½ÜM/ée”^ô2J/wÓËGz¥—»éå#½ŒÒËÝôr9‡Ç÷(Gz¥Wºé•#½‚Ò+ÝôÊ‘^Aé•nzåH¯ ôJ7½r¤WPz¥›^9Ò+(½ÒM¯é”^é¦WÊ9<¾G=Ò«(½ÚM¯éU”^í¦Wô*J¯vÓ«Gz¥W»éÕ#½ŠÒ«Ýôê‘^EéÕnzõH¯¢ôj7½ZÎáÁ=þûûo¤þßÿþh­þýŸ^ku„½bŽÓ{„½ ÓkÎ Âå8*L¯9/¸y=Ž ÓkÎ ¤KÇQ…ãôaï£ ºùÜ /çðøéH/¡ôR7½t¤—Pz©›^:ÒK(½ÔM/é%”^ꦗŽôJ/uÓKGz ¥—ºé¥#½„ÒKÝôR9‡Ç÷ÈGz¥—»éå#½ŒÒËÝôò‘^FéånzùH/£ôr7½|¤—Qz¹›^>ÒË(½ÜM/ée”^Ë9<¾G9Ò+(½ÒM¯é”^é¦WŽô J¯tÓ+Gz¥Wºé•#½‚Ò+ÝôÊ‘^Aé•nzåH¯ ôJ7½RÎáñ=ê‘^EéÕnzõH¯¢ôj7½z¤WQzµ›^=Ò«(½ÚM¯éU”^í¦Wô*J¯vÓ«Gz¥W»éÕrîñüÏïÖêõ¿az€BGØû(Fá8½GØû¨0½æ¼ \Ž£Âôšó‚›×ã¨0½æ¼@ºt•Q8Nïö>ª ›ÏÝðrôJ/uÓKGz ¥—ºé¥#½„ÒKÝôÒ‘^Bé¥nzéH/¡ôR7½t¤—Pz©›^:ÒK(½ÔM/•sx||¤—Qz¹›^>ÒË(½ÜM/ée”^ô2J/wÓËGz¥—»éå#½ŒÒËÝôò‘^Féånz¹œÃã{”#½‚Ò+ÝôÊ‘^Aé•nzåH¯ ôJ7½r¤WPz¥›^9Ò+(½ÒM¯é”^é¦WŽô J¯tÓ+åߣéU”^í¦Wô*J¯vÓ«Gz¥W»éÕ#½ŠÒ«Ýôê‘^EéÕnzõH¯¢ôj7½z¤WQzµ›^-çpÿ¿g×dþ ÙüA3û‡nþüœånß~õçÉeß÷¢îÝ ¯¿Tþúkš%5á_ö¨G~ì¯ÃÜCô?¿¥½ ÿlzˆ£™Ïÿ¶ñë¼m¸Ù˜{Åï«ï®­|ý5PÕs8­IG¡tôúè[ ]~kÚ„Ÿ¥ÓRoÞJ÷T-ïÑ͇ұ—îçmø¿ÿÓÅê¥{*÷¾-ú ç5鸕î¥Ýãç³_HÇ‘té=:´•nKN:ÆÒéÀ¨ã‰Q÷ÏöþP¥ü†ËštºïÏέt*áÕ½tIWÜg—µ‚•9éØå]פÓ@:}¼/ŒºÇ{ؤ&ÜJ÷3áíÒéÚ¨ÓH:Ú‘tÛ{@ü†§5éR4êv©ÃÆJ÷ÔŽÜͧµ‚Ms£\Ý:Òíï\~Ãóšt9œë ý,‘N:.ç›Ïá2‘ÂeâgTP>´L£.‡Òmh…-|/kÒ•hÔ•×g/9X&Þ] 7áNºXa›QWæ ö‡;élr»¯I·‡Ò½ Bt~‘Úç ÖÏuû\Á>âð¡Q÷Ï–’»ùí±Ö?¢ö=¸RP°ßSm>´LÔŠmÂG¥Ó=¼úà¨ûžlÌ\÷ý»ûÒmtß“UjGÝwK»5áçQWÊè\w„ß]&Žp']Ò½£O£ŽÖ¤£h™Ð-n‰¿§ mÂtïÑ‘ÜÄI—‘›h>ûð¨#×Y}·Ô÷¥ãȈq\°?q>4êžÒ5ÇóÒµáƒFŒÕ±ï–ú¾t6'9jNžmÝû¿ç&ÜIÇH:?Ïá‘teD:™uió«kÒi+Ý©‘N£mNŽðH:‘NéDQsB~Û'­I—¢‚Ía_÷j‰ß—oÂt{¸éI— tid®K3ÍIö{ß-õ}ér$Ý÷ÐnGÝ·ÉÙšðñæÄ­°y|…¤Ë3[ÞM©½zY“®DÍÉ{lñ€;ÂÝ\·ÕÞæJº2eÄšæ¤DÒé¨ûn©ïK·ÒÉ·QF]òsÝI·£æ¤Y&ö5éö©Q'®%¦57A‘›xÏ´%ì?éö‚7ØÏn‚æÜ„Wž3ÍÉ{ .6|ÍMPä&¾’¾Ž7±½·û¢Q×,´/£mfÓ©ñ°´æ&ˆéˆÖùî÷¶&ÜI§Èþ7Ʀ ¶Äáƒ«Þ Ñš› ÈM¤’n ¯~^aÿÙà¦SƒuxiƒxfƒýÛš¾ŽÖÜI´KüJ\<,û=j’hÔå.LÔ&|†ˆmm¸“® zX²–€t¥#Ãa qX‚– ‡%Äa rX2–Ш#8êÈpXB£Ž ‡%Z“ŽBéΖà KIç8,Á",{éZ#FÔJ׬°9,ñštÜJ×pØŽtIçv‰ ®°ÄX:u<1êZK²&D£ÎqX‚–$”® éÜI²V°2'ã°¤kÒi ç°9,i+]ãa;ÒéÚ¨ÓH:Ça rXJkÒ¥hÔ9KÃRZ+Ø47êÀÕݨc 簔פËá\wæ°í?åp™Há2ÑÚÊËD0êr(݆VXgÿ©¬IW¢Qç8,AK%”îVØfÔ•¹‚}ÄáN:Bë8,íkÒí¡tgKÃÒ>W°~®Ûç ö‡ºÖÃ’å°wZâG´Âž9,AK†Ã^.íÎ ;"îáÕGç°d9ìé¶@:Ça rX2–ëÌu†ÃÞY& ‡%Äa rX²öŽt-gKÃ’á°„8lÇMK&Ü`'ÃaGF]ãayM:ŽŒÇÛìבᰗ£®å°d8ì°tmø ó–,‡½#„ÍIŽš“&’á°„8,Á v2–‡íI'3£ÎsX²öŽtÚJç9lO:vNd´91–‡íI§tŽÃä°d9ìéRT°9ìëZK†Ãâ°=é”.Ìui¦9ñ–,‡½#]ޤ;sX‚– ‡kNÜ ›ÇWØHºCĶ6ÜIW=,[Ë@:†Ò±á°Œ8,CˆÃ2â° 9,ËhÔ1ul8,£QÇÃ2­IG¡tgËp…eФs–áÎ –޽t­cj¥kVX†–yM:n¥k8lG:ޤs»Ä WXf,Œ:žu-‡eY“N¢Qç8,CËJWtn‰dY+X™“ÎqXÖ5é4ÎsX†–µ•®ñ°étmÔi$ã° 9,§5éR4ê‡eÈa9­lšuàênÔ1ÎsXÎkÒåp®;sX†öŸs¸L¤p™hí?ç‰e"u9”nC+¬³ÿ\Ö¤+Ѩs–!‡åJ÷+l3êÊ\Á>âp'¡‚u–÷5éöPº3‡eÈayŸ+X?×ísûˆÃ‡F]ëaÙrØ;-ñ#ZaÏ–!‡eÃa/—‰vç„ ‡‘N÷ðꃣÎsX¶öŽt[ ã° 9,ˈˆuæ:Ãaï,†Ã2â° 9,[{G:Š–‰3‡eÈaÙpXF¶ã& ‡en°³á°#£®ñ°¼&GFŒã‚möëØpØËQ×rX6vXº6|ЈyË–ÃÞ‘NÂæ$GÍI ÙpXF–á;ˈÃö¤“™Qç9,[{G:m¥ó¶'F;'2ÚœˈÃö¤Ó@:ÇarX¶öŽt)*Øöu-‡eÃaqØžt J—Fæº4ÓœxË–ÃÞ‘.GÒ9,CˆÎ5'n…Íã+l$]ž)XÏaÙrØ;Ò•¨99sØŽ3–‡íIW¦ŒXÓœ”H:5b–ÃÞ‘n¤s–!‡eÃaqØÞ2±¯I·O:Ça™ÖÜEnÂqØÞ.ñ#ÎqØŽ› 97á•§ÇLsâ9,Óš› ÈM8Ûéë(pžÃv– ÚÆ—‰ÀˆÑ6³éÔxXZsDtŽÃ2ä°LI§Èþ7Ʀ ¶Äáƒë9,Óš› ÈM8ËÃ2µn¢á° 9,/m°Ïl°{Ë´æ&H¢]â3‡eÈa™$u¹ µ Ÿ!b[î¤+ƒV,‡ @éÄpXAV ‡ÃaqXV ‡4êŽ:1VШÈa…Ö¤£Pº3‡¸Â EÒ9+pçDKÇ^ºÖˆ µÒ5+¬@+¼&·Ò5¶#GÒ¹]b+¬0–NFOŒº–ʬI'ѨsV ‡ ¥+H:·DЬ¬ÌIç8¬èštHç9¬@+ÚJ×xØŽtº6ê4’ÎqXVÒšt)uŽÃ ä°’Ö 6Í:pu7êHç9¬ä5ér8×9¬@û/9\&R¸L´ö_òÄ2ŒºJ·¡ÖÙ)kÒ•hÔ9+ÃJ ¥{€¶ue®`q¸“ŽPÁ:+ûšt{(ݙà 䰲ϬŸëö¹‚}ÄáC£®õ°b9ì–ø­°g+ÊᰗËD»s"†ÃŽH§{xõÁQç9¬X{Gº-ÎqXV ‡DÄ:sá°w– ÃaqXV,‡½#EËęà ä°b8¬ Ûq†Ã ‚‰7ØÅpØ‘Q×xX^“Ž##ÆqÁ6ûub8ìå¨k9¬;,]>hÄ<‡ËaïH'as’£æ¤…‰b8¬ +pƒ] ‡Äa{ÒĘ́óV,‡½#¶ÒyÛ“N£mN ‡Äa{Òi ã°9¬X{Gºlûº–Êᰂ8lOº¥K#s]šiN<‡ËaïH—#éÎV ‡ÃaÇš·Âæñ6’.Ϭç°b9ìéJÔœœ9lLj+ˆÃö¤+SF¬iNJ$Ž1ËaïH·Ò9+Êᰂ8lo™Ø×¤Û§Fã°Bkn‚"7á8lo—øHç8lÇMМ›ðÊÓc¦9ñVhÍMPä&‡íôu¸ Ïa;ËmãËD`Äh›Ùtj<,­¹ ¢@:ÇarX!ФSdÿ›aCS[âðÁ‚õVhÍMPä&‡Èa…Z7ÑpXVˆ—6؉g6Ø=‡Zs$Ñ.ñ™Ã ä°BºÜ…‰Ú„ϱ­ wÒ•A«–Ã*N¡tj8¬"«Ãªá°Š8¬B«†Ã*u G«hÔ)ä°JkÒQ(Ý™Ã*\a•"é‡U¸s¢„¥c/]kÄ”ZéšV!‡U^“Ž[éÛ‘Ž#éÜ.±ÂVK§£Ž'F]ËaUÖ¤“hÔ9«Ãª„Ò$["UÖ Væ¤sVuM: ¤óV!‡Um¥kâð¡Q×zXµöNKüˆVØ3‡UÈaÕpØËe¢Ý9QÃaG¤Ó=¼úà¨óV-‡½#ÝHç8¬B«†Ã*"b¹ÎpØ;˄ᰊ8¬B«–ÃÞ‘Ž¢eâÌarX5V‡í¸ ÃaÁD…ìj8ìȨk<,¯IÇ‘ã¸`›ý:5örÔµV ‡–® 4bžÃªå°w¤“°9ÉQsÒÂD5V‡U¸Á®†Ã*â°=édfÔy«–ÃÞ‘N[é<‡íI§ÑΉŒ6'†Ã*â°=é4ÎqX…V-‡½#]Š 6‡}]ËaÕpXE¶']‚Ò¥‘¹.Í4'žÃªå°w¤Ë‘tg«Ãªá°c͉[aóø I—g ÖsXµöŽt%jNζcÄ ‡UÄa{Ò•)#Ö4'%’NG˜å°w¤Ûé‡UÈaÕpXE¶·LìkÒíS£ÎqX¥57A‘›p¶·Kü¤s¶ã&hÎMxåé1Óœx«´æ&(rŽÃvú: Ü„ç°e‚¶ñe"0b´Íl:5–ÖÜQ ã° 9¬EÒ)²ÿͰ¡©‚-qø`Áz«´æ&(rŽÃ*ä°J­›h8¬B«ÄKìÄ3ìžÃ*­¹ ’h—øÌarX%‰F]îÂDmÂgˆØÖ†;éÊ ‡M–Ã& ]‚Ò%Ãaâ° rØd8lB6A› ‡MhÔ%8ê’á° º9l¢5é(”îÌa\aEÒ9›àÎI",{éZ#–¨•®Ya䰉פãVº†Ãv¤ãH:·Kœà ›K§£Ž'F]Ëa“¬I'Ѩs6A›$”® éÜ™d­`eN:Ça“®I§tžÃ&Èa“¶Ò5¶#®:¤s6A›Òšt)uŽÃ&ÈaSZ+Ø47êÀÕݨc ç°)¯I—ùîÌa´ÿ)‡ËD —‰Öþ§<±L£.‡Òmh…uö?•5éJ4ê‡MæJ÷+l3êÊ\Á>âp'¡‚u6íkÒí¡tg› ‡Mû\Áú¹nŸ+ØG>4êZ›,‡½Ó?¢öÌaä°ÉpØËe¢Ý9I†ÃŽH§{xõÁQç9l²öŽt[ ã° rØd8lBD¬3×{g™06!› ‡M–ÃÞ‘Ž¢eâÌaä°ÉpØ„8lÇM›LLpƒ=;2êËkÒqdÄ8.Øf¿.{9êZ› ‡–® 4bžÃ&ËaïH'as’£æ¤…‰ÉpØ„8l‚ìÉpØ„8lO:™užÃ&ËaïH§­tžÃö¤ÓhçDF›Ãaâ°=é4ÎqØ9l²öŽt)*Øöu-‡M†Ã&Äa{Ò%(]™ëÒLsâ9l²öŽt9’îÌaä°ÉpرæÄ­°y|…¤Ë3ë9l²öŽt%jNζcÄ ‡MˆÃö¤+SF¬iNJ$Ž1ËaïH·Ò9› ‡M†Ã&Äa{Ëľ&Ý>5ê‡M´æ&(rŽÃöv‰tŽÃvÜ͹ ¯<=fšÏa­¹ ŠÜ„ã°¾Ž7á9lg™ m|™Œm3›N‡¥57AHç8l‚6EÒ)²ÿͰ¡©‚-qø`Áz›hÍMPä&‡MÃ&jÝDÃaä°‰xiƒxfƒÝsØDkn‚$Ú%>sØ9l"‰F]îÂDmÂgˆØÖ†;éÊ ‡Í–Ãf ]†ÒeÃa3â°rØl8lF6C› ‡ÍhÔe8ê²á°º 9l¦5é(”îÌa3\a3EÒ9›áÎI&,{éZ#–©•®Ya3䰙פãVº†Ãv¤ãH:·Kœá ›K§£Ž'F]Ëa³¬I'Ѩs6C›%”® éÜ™e­`eN:Ça³®I§tžÃfÈa³¶Ò5¶#®:¤s6C›Óšt)uŽÃfÈasZ+Ø47êÀÕݨc ç°9¯I—ùîÌa3´ÿ9‡ËD —‰Öþç<±L£.‡Òmh…uö?—5éJ4ê‡ÍÃæJ÷+l3êÊ\Á>âp'¡‚u6ïkÒí¡tg›!‡Íû\Áú¹nŸ+ØG>4êZ›-‡½Ó?¢öÌa3ä°ÙpØËe¢Ý9ɆÎH§{xõÁQç9l¶öŽt[ ã°rØl8lFD¬3×{g™06#›!‡Í–ÃÞ‘Ž¢eâÌa3ä°ÙpØŒ8lÇM›LÌpƒ=;2êËkÒqdÄ8.Øf¿.{9êZ› ‡–® 4bžÃfËaïH'as’£æ¤…‰ÙpØŒ8l†ìÙpØŒ8lO:™užÃfËaïH§­tžÃö¤ÓhçDF›Ãa3â°=é4ÎqØ 9l¶öŽt)*Øöu-‡Í†ÃfÄa{Ò%(]™ëÒLsâ9l¶öŽt9’îÌa3ä°ÙpرæÄ­°y|…¤Ë3ë9l¶öŽt%jNζcÄ ‡ÍˆÃö¤+SF¬iNJ$Ž1ËaïH·Ò9›!‡Í†ÃfÄa{Ëľ&Ý>5ê‡Í´æ&(rŽÃöv‰tŽÃvÜ͹ ¯<=fšÏa3­¹ ŠÜ„ã°¾Ž7á9lg™ m|™Œm3›N‡¥57AHç8l†6EÒ)²ÿͰ¡©‚-qø`Áz›iÍMPä&‡ÍÃfjÝDÃa3ä°™xiƒxfƒÝsØLkn‚$Ú%>sØ 9l&‰F]îÂDmÂgˆØÖ†;éÊ ‡-–à ]ÒÃa â°rØb8lA¶@[ ‡-hÔ8êŠá°º9l¡5é(”îÌa \a EÒ9[àÎI!,{éZ#V¨•®Ya 䰅פãVº†Ãv¤ãH:·K\à [K§£Ž'F]Ëa‹¬I'Ѩs¶@[$”® éÜYd­`eN:Ça‹®I§tžÃÈa‹¶Ò5¶#®:¤s¶@[Òšt)uŽÃÈaKZ+Ø47êÀÕݨc ç°%¯I—ùîÌa ´ÿ%‡ËD —‰Öþ—<±L£.‡Òmh…uö¿”5éJ4ê‡-ÖJ÷+l3êÊ\Á>âp'¡‚u¶ìkÒí¡tg[ ‡-û\Áú¹nŸ+ØG>4êZ[,‡½Ó?¢öÌa ä°ÅpØËe¢Ý9)†ÃŽH§{xõÁQç9l±öŽt[ ã°rØb8lAD¬3×{g™0¶ [ ‡-–ÃÞ‘Ž¢eâÌa ä°ÅpØ‚8lÇM[L,pƒ½;2êËkÒqdÄ8.Øf¿®{9êZ[ ‡–® 4bžÃËaïH'as’£æ¤…‰ÅpØ‚8lìÅpØ‚8lO:™užÃËaïH§­tžÃö¤ÓhçDF›Ãa â°=é4ÎqØ9l±öŽt)*Øöu-‡-†ÃÄa{Ò%(]™ëÒLsâ9l±öŽt9’îÌa ä°ÅpرæÄ­°y|…¤Ë3ë9l±öŽt%jNζcÄ ‡-ˆÃö¤+SF¬iNJ$Ž1ËaïH·Ò9[ ‡-†ÃÄa{Ëľ&Ý>5ê‡-´æ&(rŽÃöv‰tŽÃvÜ͹ ¯<=fšÏa ­¹ ŠÜ„ã°¾Ž7á9lg™ m|™Œm3›N‡¥57AHç8l¶EÒ)²ÿͰ¡©‚-qø`Áz[hÍMPä&‡-ÃjÝDÃa ä°…xiƒxfƒÝsØBkn‚$Ú%>sØ9l!‰F]îÂDmÂgˆØÖ†;éʘ‡¥ÍpØïÒo¥sÿÝH÷þ’î÷¨Tì.±ù}¯‘Mø—9ꟇžÜ„ùŸ+®†žŽÚ~'«§tæßé ÿ÷ìQt*Øß_lßÑ~ÃiM:j¥ûGß­Qíë~AßŸŠ›p+Ý~ÔJ'÷Ù)”NG¥£9éÎûu´ñšt<']9ÙÀ~uòGÝÏo© wÒQ(]ãakø¿ÿÓõ^@NÒ=µ“tV^Ö¤“Hºïí: ö±EWoGÝK¢ `uÃ?[7mGݶÅá£Ò©›mtM:¤ûž«4ut²5ü<êŒrÒñݼuP°tìì÷§*¿áiMº4%CØ5ÜIÇH:?êÒDÁ6F¬†Jçú:Úòšt9,؇%b½Q—'æºÚ­6áwG]ž“ŽÜ2QÖ¤+á¨Ká\÷”.l` wÒÁQ—Ýg/kÒ0×½ V\ÁîkÒís£Î¯°{Ø×íH:ßœì¡tÛ¨tû”tïy¤é ‡½Õ?鍨]b»Âžw‰køYº÷žbµÿ~ñcmƒö1"Ý/‡‘îÛn&|[“n‹¤c(¸›ßPKœ÷é6(]¤óƒö—ÃŽÌuÄn™0ö–tI—í»)X‡ujøyÔ¥}؈ѸtAKüËa¯ûºÈÃòšt¹‰·ýšÒÓã:5ÜÍu H'~…ýå°BeD:ž’ÎwV†ÃÞ’Nf–‰ïZ &|ÈÃFì—Ã^KÙ™ò°»3à†ÃÞ’Né¾÷ëš¹îŸmW·ÂþrØF! 6ùÏ®3+l+ŽKxXÃaoI—¢Q—í~uÅÏuiª%ö}Ý/‡½^a˜XÃGÝØ–ØpØ[ÒåH:±Ï[éÞšæ&ÜIGÃÒå`Ô=öÑ“_;2×5ÖpØ[Ò•H:²ì¶%~œˆX ²ÿQsRæ¥k>û¨tÚ$n_“nŒX¶0ÑJ§§'™køè¦S oþþ¨Ûg VÙ:Zs¹ ÎöÛ:¶9Ùœ—¡Ç”‡õÒÑc~®kÃïî×Ñš› ÐM¼¯H÷ÅŽ:Úfúºf…¥mMºmÊêgkn‚(Â:߬¹•NÙíœPä&Î_¯³ÒyJkn‚hƈ}_ÜÌ´´æ&(r”ÀVç÷¾Msu/Y„Ý[&膛(Møà¨ûžý§57A¡›xçGú:’ÈÃou’,­°$3£Î{X²–€t¥#Ãa qX‚– ‡%Äa .d8,!KÐMá°„VX‚–hM:j¥k`"AKÔJ×xX‚–(”NG¥£9é‡%^“Žç¤s»ÄÄѨsFŒ ý'¥£Pºv™ n¥kš‚–dM:‰¤s– ‡%£Î¶Ä‰I+]Ãa î“ÌIçú:Ò5é4’ÎÁD‚DŒ4uΈä°¤á¨{€‚m¤Ó°` `½‡¥´&]š’ÎsXJ¡tŒ¤ó£.MlËa)MIç9,å5érX°ç­ÎΨËs]ÛœP^uyN:Ça©¬IWÂQ—¹®å°TBéà¨s{TÖ¤+`®³-1AKûštûܨó+ìöu;’Î7'{(Ý6*Ý>%ç°d9ì–øHç8,AK†Ãâ°KÈþw¤3v@:ÏaÉrØ;Òm‘t ¥wój‰ó>"Ý¥Ët~Ð;0×yK–ÃÞ‘Ž"éΖ ‡%Ãa qØž£qé‚–ØpØË¾.ò°¼&GnâÌa rX2–Ð~AK†ÃÚ9éIÇSÒùÎÊrØ;ÒÉÌ2á9,{éa#f8ì¥t‘ý—)ë8,Y{G: ¤s– ‡%Ãa qX‚»Äd8ìÀ ÛJ§ãÒÖrØ;Ò¥hÔ9,Áý:2v¤%ö}á°—+l»_G†ÃŒ:ÏaÉrØ;ÒåHº3‡%ÈaÉpXB¶']FÛêìÍuyf®k<¬å°w¤+‘tgKÃ’á°—ö?jNʼtÍg•N›ÄíkÒí‘;sX‚– ‡Ùt*áÍßuûLÁzK´æ&(rŽÃä°D)륣Çü\׆ßݯ£57A¡›8sX‚–h›éëš–¶5é¶)«žM¬¹ ¢ëœ9,AK¹ Ça rX¢57A4cÄ<‡%Zs¹ Ça rX¢ÈM8ÛY&膛(Møà¨ó–hÍMPè&ζÓבDvx«“di…%™uÞÃ²å° ¤c(ˈÃ2ä°l8,#Ëp™`ÃaqX†n‚ ‡e´Â2ä°LkÒQ+]rX¦VºÆÃ2ä°L¡t:*ÍIç8,óšt<'Û%fŽF3b í?s(…ÒµËs+]Óœ0ô°,kÒI$ã° 9, u¶%fHÄXZéËp—˜eN:××±®I§‘t&2$b¬Ñ¨sFŒ!‡e GÝl#†ûë=,§5éÒ”tžÃr ¥c$ui¢`[ËiJ:Ïa9¯I—Â=ouvF]ž˜ëÚæ„óÚ¨ËsÒ9ËeMºŽºÎu-‡åJGÛ»à²&]sm‰rXÞפÛçF_a÷°¯Û‘t¾9ÙCé¶Qéö)é<‡eËaï´Ä@:ÇarX6–‡ehÄØpXFö¿#á°ÒyË–ÃÞ‘n‹¤c(¸›ßPKœ÷é6(]¤óƒÖpعÎsX¶öŽtIwæ° 9,ˈÃöŒK´Ä†Ã^öu‘‡å5é8rgËòᰌöërX6–ÑÎIO:ž’ÎwV–ÃÞ‘Nf– ÏaÙpØK1Ãa/¥‹ì¿LyXÇaÙrØ;Òi ã° 9,ˈÃ2Ü%fÃaVØV:—.ð°–ÃÞ‘.E£îÌaî×±á°#-±ïë ‡½\aÛý:6v`ÔyË–ÃÞ‘.GÒ9,CˆÃ2â°=ér0êÜVgo®Ë3s]ãa-‡½#]‰¤;sX†– ‡½´ÿQsRæ¥k>û¨tÚ$n_“nŒØ™Ã2ä°l8ìȦS oþþ¨Ûg ÖsX¦57A‘›p–!‡ezLyX/=æçº6üî~­¹ ÝÄ™Ã2ä°LÛL_׬°´­I·MyXõlbÍMEXçÌarX¦ÈM8ËÃ2­¹ ¢#æ9,Óš› ÈM8ËÃ2EnÂqØÎ2A7ÜDiÂGç°Lkn‚B7qæ°¾Ž$ò°Ã[$K+,Ę́óV,‡ @éÄpXAV ‡ÃaqXË„+ˆÃ tb8¬ V ‡Z“ŽZé˜(à µÒ5V ‡ ¥ÓQéhN:Ça…פã9éÜ.±p4êœhÿ…Cé(”®]&„[éšæD ‡Y“N"é‡ÈaEÀ¨³-±@"&ÒJ×pX»Ä"sÒ¹¾NtM:¤s0Q F3b9¬h8ê `é4,Ø(Xïa%­I—¦¤óVR(#éü¨KÛrXISÒy+yMºìy«³3êòÄ\×6'’×F]ž“ÎqX)kÒ•pÔ¥p®k9¬”P:8êÜÞ…”5é ˜ëlK,Ãʾ&Ý>7êü »‡}ÝŽ¤óÍÉJ·J·OIç9¬X{§%~Ò9+Êᰂ8¬@#&†Ã ²ÿé ‡ÎsX±öŽt[$CéÄÝü†Zâ¼H·Aér ´†ÃÌužÃŠå°w¤£Hº3‡ÈaÅpXA¶gÄh\º %6ö²¯‹<,¯IÇ‘›8sXV ‡´_'ÊᰂvNzÒñ”t¾³²öŽt2³Lx+†Ã^zØÀˆ{)]dÿeÊÃ:+–ÃÞ‘Né‡ÈaÅpXAVà.±;°Â¶Òé¸t‡µöŽt)ug+p¿N ‡i‰}_g8ìå Ûî׉á°£ÎsX±öŽt9’îÌarX1V‡íI—ƒQç¶:{s]ž™ëk9ìéJ$ݙà ä°b8ì¥ýš“2/]óÙG¥Ó&qûšt{dÄÎV ‡ÃaG6Jxó÷GÝ>S°žÃ ­¹ ŠÜ„ã°9¬ÐcÊÃzéè1?×µáw÷ëhÍMPè&ÎV ‡Úfúºf…¥mMºmÊêgkn‚(Â:g+à EnÂqXVhÍMÍ1Ïa…ÖÜEnÂqXV(rŽÃv– ºá&J>8ê<‡Zsº‰3‡íôu$‘‡Þê$YZaIfF÷°j9¬éJ§†Ã*â° 9¬«ˆÃ*\&ÔpXEV¡›PÃa­° 9¬ÒštÔJ×ÀD…V©•®ñ° 9¬R(ŽJGsÒ9«¼&ÏIçv‰•£Q猘Bû¯JG¡tí2¡ÜJ×4' =¬ÊštIç8¬B«Fm‰1•Vº†Ã*Ü%V™“ÎõuªkÒi$ƒ‰ ‰˜j4êœSÈaUÃQ÷ÛH§aÁ>@Áz«iMº4%ç°šBéIçG]š(Ø–Ãjš’ÎsXÍkÒå°`Ï[Q—'溶9Ѽ6êòœtŽÃjY“®„£.…s]Ëaµ„ÒÁQçö.´¬IWÀ\g[b…V÷5éö¹QçWØ=ìëv$oNöPºmTº}J:ÏaÕrØ;-ñ#ÎqX…V ‡UÄa15V‘ýïHg8ì€tžÃªå°w¤Û"éJ'îæ7Ôç}Dº J—éü 5v`®óV-‡½#EÒ9¬B«†Ã*â°=#FãÒ-±á°—}]äayM:ŽÜÄ™Ã*ä°j8¬¢ý:…V ‡U´sÒ“Ž§¤ó•å°w¤“™eÂsX5öÒÃFÌpØKé"û/SÖqXµöŽtHç8¬B«†Ã*â° w‰Õpض•NÇ¥ <¬å°w¤KѨ;sX…ûuj8ìHKìû:Ãa/WØv¿N ‡užÃªå°w¤Ë‘tg«Ãªá°Š8lOºŒ:·ÕÙ›ëòÌ\×xXËaïHW"éÎV!‡UÃa/íÔœ”yéšÏ>*6‰ÛפÛ##væ° 9¬;²éT›¿?êö™‚õViÍMPä&‡UÈa•SÖKGù¹® ¿»_Gkn‚B7qæ° 9¬Ò6Ó×5+,mkÒmSV=›XsDÖ9sX…V)rŽÃ*ä°Jkn‚hƈy«´æ&(rŽÃ*ä°J‘›p¶³LÐ 7QšðÁQç9¬Òš› ÐMœ9l§¯#‰<ìðV'ÉÒ K23꼇M–Ã& ]‚Ò%Ãaâ° rØd8lB6Áe"›‡MÐM$ÃaZaä°‰Ö¤£Vº&&ÈaµÒ56A›(”NG¥£9é‡M¼&ÏIçv‰G£Î±íâP: ¥k—‰Ä­tMs’ ‡M²&DÒ9› ‡MFm‰$bIZé›à.q’9é\_—tM:¤s01A"–4uΈ%Èa“†£î ¶‘NÂ}€‚õ6¥5éÒ”tžÃ¦JÇH:?êÒDÁ¶6¥)é<‡MyMºìy«³3êòÄ\×6')¯º<'ã°©¬IWÂQ—¹®å°©„ÒÁQçö.RY“®€¹Î¶Ä rØ´¯I·Ï:¿Âîa_·#é|s²‡Òm£ÒíSÒy›,‡½Ó?é‡MÃ&Ãaâ° ±d8lBö¿#á°Òy›,‡½#ÝIÇP:q7¿¡–8ï#ÒmPºHç­á°sç°ÉrØ;ÒQ$Ý™Ã&Èa“á° qØž£qé‚–ØpØË¾.ò°¼&GnâÌaä°ÉpØ„öëä°ÉpØ„vNzÒñ”t¾³²öŽt2³Lx› ‡½ô°3öRºÈþË”‡u6Y{G: ¤s6A› ‡MˆÃ&¸Kœ ‡Xa[ét\ºÀÃZ{Gºº3‡Mp¿.;Òû¾ÎpØË¶Ý¯K†ÃŒ:Ïa“å°w¤Ë‘tg› ‡M†Ã&Äa{Òå`Ô¹­ÎÞ\—gæºÆÃZ{GºIwæ° rØd8ì¥ýš“2/]óÙG¥Ó&qûšt{dÄÎ6A› ‡Ùt*áÍßuûLÁz›hÍMPä&‡MÃ&zLyX/=æçº6üî~­¹ ÝÄ™Ã&Èam3}]³ÂÒ¶&Ý6åaÕ³‰57Aa3‡MÃ&ŠÜ„ã° rØDkn‚hƈy›hÍMPä&‡MÃ&ŠÜ„ã°e‚n¸‰Ò„Ž:Ïa­¹ ÝÄ™Ãvú:’ÈÃou’,­°$3£Î{Øl9lÒe(]66#›!‡Í†ÃfÄa3\&²á°qØ ÝD66£6C›iM:j¥k`b†6S+]ãa3ä°™BétT:š“ÎqØÌkÒñœtn—8s4êœËÐþg¥£Pºv™ÈÜJ×4'zØ,kÒI$ã°rØ,`ÔÙ–8C"–¥•®á°îg™“ÎõuYפÓH:3$bY£QçŒX†6k8ê `é4,Ø(XïasZ“.MIç9lN¡tŒ¤ó£.MlËasš’Îs؜פËaÁž·:;£.OÌums’óÚ¨ËsÒ9›Ëšt%u)œëZ›K(unï"—5é ˜ëlKœ!‡Íûštûܨó+ìöu;’Î7'{(Ý6*Ý>%ç°ÙrØ;-ñ#ÎqØ 9l66#›¡ˆÃfdÿ;Ò; ç°ÙrØ;Òm‘t ¥wój‰ó>"Ý¥Ët~Ð;0×y›-‡½#EÒ9l†6›‡í1—.h‰ ‡½ìë"ËkÒqä&Î6C› ‡Íh¿.C› ‡Íhç¤'OIç;+ËaïH'3Ë„ç°ÙpØK1Ãa/¥‹ì¿LyXÇa³å°w¤Ó@:Ça3ä°ÙpØŒ8l†»ÄÙpض•NÇ¥ <¬å°w¤KѨ;sØ ÷ë²á°#-±ïë ‡½\aÛýºl8ìÀ¨ó6[{GºIwæ°rØl8lF¶']FÛêìÍuyf®k<¬å°w¤+‘tg›!‡Í†Ã^Úÿ¨9)óÒ5Ÿ}T:m·¯I·GFìÌa3ä°ÙpØ‘M§ÞüýQ·Ï¬ç°™ÖÜEnÂqØ 9l¦Ç”‡õÒÑc~®kÃïî×Ñš› ÐMœ9l†6Ó6Ó×5+,mkÒmSV=›XsDÖ9sØ 9l¦ÈM8›!‡Í´æ&ˆfŒ˜ç°™ÖÜEnÂqØ 9l¦ÈM8ÛY&膛(Møà¨ó6Óš› ÐMœ9l§¯#‰<ìðV'ÉÒ K23꼇-–à ]ÒÃa â°rØb8lA¶Àe¢[‡-ÐMÃa Za ä°…Ö¤£Vº&Èa µÒ5¶@[(”NG¥£9é‡-¼&ÏIçv‰ G£Î±íáP: ¥k—‰Â­tMsR ‡-²&DÒ9[ ‡-Fm‰ $bEZé[à.q‘9é\_WtM:¤s0±@"V4uΈÈa‹†£î ¶‘NÂ}€‚õ¶¤5éÒ”tžÃ–JÇH:?êÒDÁ¶¶¤)é<‡-yMºìy«³3êòÄ\×6'%¯º<'ã°¥¬IWÂQ—¹®å°¥„ÒÁQçö.JY“®€¹Î¶Ärز¯I·Ï:¿Âîa_·#é|s²‡Òm£ÒíSÒy[,‡½Ó?é‡-ÃÃa â°±b8lAö¿#á°Òy[,‡½#ÝIÇP:q7¿¡–8ï#ÒmPºHç­á°sç°ÅrØ;ÒQ$Ý™ÃÈa‹á°qØž£qé‚–ØpØË¾.ò°¼&GnâÌa ä°ÅpØ‚öë ä°ÅpØ‚vNzÒñ”t¾³²öŽt2³Lx[ ‡½ô°3öRºÈþË”‡u¶X{G: ¤s¶@[ ‡-ˆÃ¸K\ ‡Xa[ét\ºÀÃZ{Gºº3‡-p¿®;Òû¾ÎpØË¶Ý¯+†ÃŒ:Ïa‹å°w¤Ë‘tg[ ‡-†ÃÄa{Òå`Ô¹­ÎÞ\—gæºÆÃZ{GºIwæ°rØb8ì¥ýš“2/]óÙG¥Ó&qûšt{dÄζ@[ ‡Ùt*áÍßuûLÁz[hÍMPä&‡-ÃzLyX/=æçº6üî~­¹ ÝÄ™ÃÈa m3}]³ÂÒ¶&Ý6åaÕ³‰57Aa3‡-Ê܄ã°rØBkn‚hƈy[hÍMPä&‡-Ê܄ã°e‚n¸‰Ò„Ž:Ïa ­¹ ÝÄ™Ãvú:’ÈÃou’,­°$3£ÎyXÞ ‡å-–Îýw#ÝOøKºzÔ?ò6u™øý}ïFiþeú©ËC:ó‹ßüK:sÔ÷æÐtærÞŸ¯áÿþ¸úSºß_lr&¡¼ÑštI÷Þp«0ÑH÷þT¿ì5ÜI÷ÒiqŸ¦¤;˜I>*&jÞxM:G]¶ÖŽºóÎI ·ÒýÔ£îá>;‡Ò%4êJ>$ÝK»í.kÒI(]±n¢'Ì:Þ£›–Žâð³t´¬®I§­tuµh¥s0±†Ÿ¥£Œ¤Ëî³k(…ÒÕ ¯ ¿;êÒšt)u;Ù+Ýy¿®†»QGH:?lR(bé^'iÂt4êŠuyMºJ—AÁº“î¤ãQér(Ýct…Í­tuàÒwNx+kÒ•©Q÷] ¹ •ÎöJ·Žº2'Ÿëö5éö°99=®ÓkNv°Âšÿ©´ u8|Hºf—øÙ>ÖZâG Ý÷5'â{ÚG0ê$¡Q盓_k¥ãÑQ÷Ëao¬á°·¤Ûé¾·>R+Ý{ë£ä&ÜI‡–‰t&¡5|¨`ƒ¾î—ÃÆë»“NOöNkÒQ Ýwß-t^=j‰…F¤£¥‚ýå°×}]³_÷ ç5é8*X±ûuv…-~Ôq4êÖgZ⦣þå°#FìûK›8Y“N¢eB-‡5Wß“u­°ÍuÉvïëûËa‡F]³LèštÚJ§ß¦!X&Þ1vN4u:Ú×ýrX_—õØîΉF£ŽÀ¨sûžÖ¤K3Fì{•Úšð¡æ$šçÓÌ2Ñ.Ð ®°‘tÞE{Kº:±ëô<ì/‡)Xñö—Ã.®9ÉS›N⛓²&]‰ÜÄfabÏÃþrØë6Z"ËŒkG]Yk‰÷5éöh™`°Â:[ÃÝ\7ìa9ìuKÕû>ÕûQGkn‚¦ÜD#…n"ï?–ú:zÌÌu› 57A‘›HÉ>sb¥KnšB7Q†¥Û¦ –ãðH:(XZsº öÿûPÔ„Jç» "Ôœ|ãû+éB7¡£[´æ&(rïÏÞ®°Í³Ä5ü, ö}ÃïnuOlCÄÖÜÉ”#Ç&(rç/uöÜ͹‰‡Ú7בå°¤#(KˆÃä°d8,!KÐÃ’á°„`"A7A†ÃêëŽ:¢5é(’ÎqX‚[D¡t 6DSÒyK4'ã°ÄkÒq8êΖ L$n¥k8,AKJ—Ш+qøtí2A²&„Ò9lG:™un‰$™“Žâð³tnç¤S°º&¶Ò5öŸ ‡%¤s– ‡% ¥£Pº–Ã’®º´&]ŠF#b=,¥pԒΛJ§XºSsB)”îF㰔פˡt¬ç°”CéxTºJ÷]as+]ãa 7'eMº25ê<‡¥2'ÿì%”nueN:?×íkÒíasræ°æd+¬Ýê$èßiŸu8|HºÖÃ’å°wZâG Û9!ÈaÉpXB–à†KhÓ©3ê ‡½S°–ÃÞ‘n ¤s– ‡%Ãa qX‚0‘ ‡½,Ø ¯3–#ÈaÉrØ;ÒQ ã°9,Kh—¸'-¬á°—}]ËaÉrØ;ÒqT°gûOÃ’á°„8lÏÃòLKÜtÔ†Ã1ÏaÉrØ;ÒI´Lœ9,AK†ÃÂ:wNÈpØË¾.ð°†ÃŽŒºf™Ð5é´•ÎsX‚– ‡%Äa;}á°„8loçD£QG`ÔyK–ÃÞ‘.Í1ÏaÉpØËæ$šçÓÌ2Ñ.Ð ®°‘tÞEZ{Gºº3‡íxXÃa ÖsX2vl™pÍIžÚtßœ”5éJä&ζãa ‡½\a£%²Ì±vÔ•µ–x_“n– +¬‡‰d8,!Û›ëöñ–8ª÷}ª%ö£ŽÖÜM¹‰F: ÝDÞ%~,õuô˜™ë7Akn‚"7á8,AKº‰2,Ý6U°‡GÒé@ÁÒš› ÐM°ÿžÃÑ”t¾» BÍÉ/‡íIº Ýê¤57A‘›p– ‡%ŠÜ„ ö}ÃïnuOlCÄÖÜÉ”s–(rŽÃvÜ͹‰‡Ú7×±å° ¤c(ˈÃ2ä°l8,#ËÐòᰌ`"C7Á†Ã2êëŽ:¦5é(’ÎqX†[L¡t 6LSÒyË4'ã°ÌkÒq8êΖ!Ldn¥k8,CËJ—Ш+qøtí2Á²&„Ò9lG:™un‰d™“Žâð³tnç¤S°º&¶Ò5öŸ¡‡e¤s–!‡e ¥£Pº–ò®º´&]ŠF#b =,§pԒΛJ§XºSsÂ)”îF㰜פˡt¬ç°œCéxTºJ÷]as+]ãa7'eMº25ê<‡å2'ÿì%”nueN:?×íkÒíasræ°æd+¬ÝêdèßyŸu8|HºÖòå°wZâG Û9aÈaÙpXF–á†ËhÓ©3ê ‡½S°–ÃÞ‘n ¤s–!‡eÃaqX†0‘ ‡½,Ø ¯3–‘cÈaÙrØ;ÒQ ã° 9,Ëh—¸'-¬á°—}]ËaÙrØ;ÒqT°gûÏòᰌ8lÏÃòLKÜtÔ†Ã1ÏaÙrØ;ÒI´Lœ9,CˆÃ2Â: wNØpØË¾.ð°†ÃŽŒºf™Ð5é´•ÎsX†– ‡eÄa;}á°Œ8loçD£QG`ÔyË–ÃÞ‘.Í1ÏaÙpØËæ$šçÓÌ2Ñ.Ð ®°‘tÞEZ{Gºº3‡íxXÃa ÖsX6vl™pÍIžÚtßœ”5éJä&ζãa ‡½\a£%²Ì±vÔ•µ–x_“n– +¬‡‰l8,#Û›ëöñ–8ª÷}ª%ö£ŽÖÜM¹‰F: ÝDÞ%~,õuô˜™ë7Akn‚"7á8,C˺‰2,Ý6U°‡GÒé@ÁÒš› ÐM°ÿžÃ2Ñ”t¾» BÍÉ/‡íIº Ýê¤57A‘›p–!‡eŠÜ„ ö}ÃïnuOlCÄÖÜÉ”s–)rŽÃvÜ͹‰‡Ú7׉å°¤(+ˆÃ ä°b8¬ +ÐÊᰂ`¢@7!†Ã êëŽ:¡5é(’ÎqX[B¡t 6BSÒy+4'ã°ÂkÒq8êÎV Ln¥k8¬@+J—Ш+qøtí2!²&„Ò9lG:™un‰™“Žâð³tnç¤S°º&¶Ò5ö_ ‡¤sV ‡ ¥£Pº–Ê®º´&]ŠF#b=¬¤pԒΛJ§XºSs")”îF㰒פˡt¬ç°’CéxTºJ÷]as+]ãa7'eMº25ê<‡•2'ÿì%”nueN:?×íkÒíasræ°æd+¬ÝêèßeŸu8|HºÖÊå°wZâG Û9ÈaÅpXAVà†›+hÓ©3ê ‡½S°–ÃÞ‘n ¤sV ‡ÃaqX0Q ‡½,Ø ¯3VÈaÅrØ;ÒQ ã°9¬+h—¸'-¬á°—}]ËaÅrØ;ÒqT°gû/Êᰂ8lÏÃòLKÜtÔ†Ã1ÏaÅrØ;ÒI´Lœ9¬@+†Ã Â:wNÄpØË¾.ð°†ÃŽŒºf™Ð5é´•ÎsXV ‡Äa;}á°‚8loçD£QG`Ôy+–ÃÞ‘.Í1ÏaÅpØËæ$šçÓÌ2Ñ.Ð ®°‘tÞEZ{Gºº3‡íxXÃa ÖsX1vl™pÍIžÚtßœ”5éJä&ζãa ‡½\a£%²Ì±vÔ•µ–x_“n– +¬‡‰b8¬ Û›ëöñ–8ª÷}ª%ö£ŽÖÜM¹‰F: ÝDÞ%~,õuô˜™ë7Akn‚"7á8¬@+º‰2,Ý6U°‡GÒé@ÁÒš› ÐM°ÿžÃ Ñ”t¾» BÍÉ/‡íIº Ýê¤57A‘›pV ‡ŠÜ„ ö}ÃïnuOlCÄÖÜÉ”sV(rŽÃvÜ͹‰‡Ú7×©å° ¤S(«ˆÃ*ä°j8¬"«Ðêᰊ`¢B7¡†Ã*êëŽ:¥5é(’ÎqX…[J¡t 6JSÒy«4'ã°ÊkÒq8êÎV!LTn¥k8¬B«J—Ш+qøtí2¡²&„Ò9lG:™un‰T™“Žâð³tnç¤S°º&¶Ò5ö_¡‡U¤sV!‡U ¥£Pº–ꮺ´&]ŠF#b =¬¦pԒΛJ§XºSs¢)”îF㰚פˡt¬ç°šCéxTºJ÷]as+]ãa7'eMº25ê<‡Õ2'ÿì%”nueN:?×íkÒíasræ°æd+¬ÝêTèßuŸu8|HºÖêå°wZâG Û9QÈaÕpXEVᆛ«hÓ©3ê ‡½S°–ÃÞ‘n ¤sV!‡UÃaqX…0Q ‡½,Ø ¯3V‘SÈaÕrØ;ÒQ ã° 9¬«h—¸'-¬á°—}]ËaÕrØ;ÒqT°gû¯Ãªá°Š8lÏÃòLKÜtÔ†Ã1ÏaÕrØ;ÒI´Lœ9¬B«†Ã*Â: wNÔpØË¾.ð°†ÃŽŒºf™Ð5é´•ÎsX…V ‡UÄa;}á°Š8loçD£QG`Ôy«–ÃÞ‘.Í1ÏaÕpØËæ$šçÓÌ2Ñ.Ð ®°‘tÞEZ{Gºº3‡íxXÃa ÖsX5vl™pÍIžÚtßœ”5éJä&ζãa ‡½\a£%²Ì±vÔ•µ–x_“n– +¬‡‰j8¬"Û›ëöñ–8ª÷}ª%ö£ŽÖÜM¹‰F: ÝDÞ%~,õuô˜™ë7Akn‚"7á8¬B«º‰2,Ý6U°‡GÒé@ÁÒš› ÐM°ÿžÃ*Ñ”t¾» BÍÉ/‡íIº Ýê¤57A‘›pV!‡UŠÜ„ ö}ÃïnuOlCÄÖÜÉ”sV)rŽÃvÜ͹‰‡Ú7×%Ëa.Aé’á° qØ9l26!› ‡M†Ã&tÉpØ„úºG]¢5é(’ÎqØ·:…Ò=€t~Ø$š’Î{ØDsÒ9›xM:GÝ™Ã&·Ò56A›8”.¡QWâð!éÚe"ÉštJwæ°édnÔ¹%2Éœt‡Ÿ¥s;'‚Õ5é´•®±ÿ zؤ‘tŽÃ&Èa“†ÒQ(]Ëa“®º´&]ŠF#b zØ”ÂQGH:?lR(béNÍIJ¡t4ê‡MyMºJ—AÁz›r(J—Cé£+ln¥k1êpøt­‡M–ÃÞi‰tnç$A› ‡MˆÃ&¸á– ‡MhÓ©3ê ‡½S°–ÃÞ‘n ¤s6A› ‡MˆÃ&“á°—ôu†Ã&dÄä°ÉrØ;ÒQ ã° rØd8lB»Ä=éh©` ‡½ìëZ›,‡½#G{¶ÿ rØd8lB¶çay¦%n:jÃaŒ˜ç°ÉrØ;ÒI´Lœ9l‚6›ÖIpç${Ù×ÖpØ‘Q×,º&¶Òy› ‡M†Ã&Äa;}á° qØÞΉF£ŽÀ¨ó6Y{Gº4cÄ<‡M†Ã^6'Ñ<Ÿf–‰vNp…¤ó.ÒrØ;ÒåhÔ9lÇÃ;P°žÃ&ÃaÇ– לä©M'ñÍIY“®DnâÌa;ÖpØË6Z"ËŒkG]Yk‰÷5éöh™`°Âz˜˜ ‡MˆÃöæº}¼%Žê}Ÿj‰ý¨£57ASn¢‘ŽB7‘‡w‰K}=fæºÆMК› ÈM8› ‡Mº‰2,Ý6U°‡GÒé@ÁÒš› ÐM°ÿžÃ&¢)é|wA„š“_Û“.t:ºÕIkn‚"7á8l‚6Qä&n°ï{~w«“xª`"¶æ&H¦Œ˜ã°‰"7á8lÇMМ›(qø¨ýws]¶6é2”.›‡ÍÃfÃa3â°zØl8lF01C7‘ ‡Í¨¯ËpÔeZ“Ž"é‡Íp«3S(ÝHç‡M¦)鼇Í4'㰙פãpÔ9l†01s+]Ãa3ä°™Céu%’®]&²¬I'¡tgÛ‘NæF["³ÌIGqøY:·sÒ)X]“N[éûŸ¡‡ÍIç8l†6k(…Òµ6ëÚ¨KkÒ¥hÔ9"–¡‡Í)u„¤óÃ&…Ò)–îÔœäJ÷@£Îq؜פˡt¬ç°9‡Òñ¨t9”î1ºÂæVºÆÃfÜœ”5éÊÔ¨ó6—9éüg/¡tÛè¨+sÒù¹n_“n›“3‡í4';XaíVg†þ=I×zØl9ì–øHçvN2ä°ÙpØŒ8l†nÙpØŒ6:£ÎpØ;k9ìé¶@:Ça3ä°ÙpØŒ8l†01{Y°A_g8lFF,C›-‡½#Ò9›!‡Í†Ãf´Kܓޖ ÖpØË¾®å°ÙrØ;ÒqT°gûŸ!‡Í†ÃfÄa{–gZ⦣6vÀˆy›-‡½#DËÄ™ÃfÈa³á°a wN²á°—}]àa ‡uÍ2¡kÒi+ç°rØl8lF¶Ó×›‡ííœh4êŒ:Ïa³å°w¤K3FÌsØl8ìesÍóif™hèWØH:ï"-‡½#]ŽFÝ™Ãv<¬á°ë9l6vl™pÍIžÚtßœ”5éJä&ζãa ‡½\a£%²Ì±vÔ•µ–x_“n– +¬‡‰ÙpØŒ8lo®ÛÇ[â¨Þ÷©–Ø:Zs4å&é(tyx—ø±Ô×Ñcf®kÜ­¹ ŠÜ„ã°rØL¡›(ÃÒmSËqx$,­¹ Ý„ûï9l&š’ÎwD¨9ùå°=éB7¡£[´æ&(rŽÃfÈa3EnBáû¾‡áw·:‰§ ¶!bkn‚dʈ9›)rŽÃvÜ͹‰‡Ú7×Ëa ®@éŠá°qØ9l1¶ [ ‡-†Ã tÅpØ‚úºG]¡5é(’ÎqØ·: …Ò=€t~Øš’Î{ØBsÒ9[xM:Gݙà ·Ò5¶@[8”.¡QWâð!éÚe¢ÈštJwæ°édnÔ¹%²Èœt‡Ÿ¥s;'‚Õ5é´•®±ÿzØ¢‘tŽÃÈa‹†ÒQ(]Ëa‹®º´&]ŠF#bzØ’ÂQGH:?lR(béNÍII¡t4ê‡-yMºJ—AÁz[r(J—Cé£+ln¥k1êpøt­‡-–ÃÞi‰tnç¤@[ ‡-ˆÃ¸áV ‡-hÓ©3ê ‡½S°–ÃÞ‘n ¤s¶@[ ‡-ˆÃ‹á°—ôu†ÃdÄ ä°ÅrØ;ÒQ ã°rØb8lA»Ä=éh©` ‡½ìëZ[,‡½#G{¶ÿrØb8lA¶çay¦%n:jÃaŒ˜ç°ÅrØ;ÒI´Lœ9l¶[Ö)pç¤{Ù×ÖpØ‘Q×,º&¶Òy[ ‡-†ÃÄa;}á°qØÞΉF£ŽÀ¨ó¶X{Gº4cÄ<‡-†Ã^6'Ñ<Ÿf–‰vNp…¤ó.ÒrØ;ÒåhÔ9lÇÃ;P°žÃÃaÇ– לä©M'ñÍIY“®DnâÌa;ÖpØË6Z"ËŒkG]Yk‰÷5éöh™`°Âz˜X ‡-ˆÃöæº}¼%Žê}Ÿj‰ý¨£57ASn¢‘ŽB7‘‡w‰K}=fæºÆMК› ÈM8[ ‡-º‰2,Ý6U°‡GÒé@ÁÒš› ÐM°ÿžÃ¢)é|wA„š“_Û“.t:ºÕIkn‚"7á8l¶Pä&n°ï{~w«“xª`"¶æ&H¦Œ˜ã°…"7á8lÇMМ›(qø¨ý?Ïu²+[,ûïFºŸð—tõ¨g_·Yé~á9l ÿ²G=Ò¯yJg~Aç¾®†žŽâÓ\w¾ùnÂÿýŸæ¨íg®û=ïöÞ»(F:Z“ŽBéaéÜ\Wít?ú©—®ÖRî¤ÛF¥£VººŽ×¤ã@ºcš×V:ùî•›ðó¨Ó“‡µ£ŽÝ¨ãÒQ>4êšV6Y“N"éÎlÂ\ÞÞº4áͨ{ H·ïÑÍ;é¶2*Lì÷TiÂuM: ¥;±“trþìºó»ÿT¬MøgPÖ4 †« `Óã´ÆÉ–Ö¤Ká\Ƕ%¶ËÄ™MÔð`®«¶7êR8êrwÔmMøà¨ËÛ©9‘-¯I—[éü¦“ëødÄj¸uÔu”›ð³tô-Ø<µL4[Ö¤+á¨;m:Yén‘*¡t-¾9)¡t:*] ¥Û€tŽþ˶¯I·O¬’uûœtä¤Ûñ\— vŸ’ŽóÉ€?ÛÂÇZKüˆ– A͉œÈH ?K—ß=ˆ ‚mÃ?#FÝ/‡’ŽÜDm8ì-é¶©–ø kx°Lä‘Q÷ËaígOÃÒmS-±¸‚5ö–tÔ.OíÞ®a`™øå°vÔ½çù2ÐÿrØñebkÂt Ý[R;Q{K:ŽFÝ aŸúºâ>;GnÍuüØÃð»ËÄ/‡*Ø÷½Û¼Ëšt2î&ž£.{û/‘tŒ¤K^:™o‰·&|¨%Œ˜á°·¤Ó™eâ»·&<˜ë”FvNt­`uf®sÏœ<ÃÓštiFº÷“97á®9)Ý–X›ðÛÒ¥)K¾`óštyª`}KüËaGì?7ËDž_a·&|ÐÃj3æËšte|ÔÕÆ¸ w£N»£ŽšðÛÒ•H:Fö_}K¼¯I·GÒ©ýÞ„uâGÝ-´Ll>ïûZK¼K×<$&­¹ ÝÄé1ì^_G‘›Ð½;êš›¿=×Ñ”›pXç¾æ&hï랣.îáŽMhØËmó}ÝÖ„I÷ÓÛ«¯¹ ¢`Ô¿èÔkN(tŠÜ„o‰‰â¾îuìˆt4ÞœDÒ­¹ ♹î{Úšp'Ý6JĈ—– ŠÜÄcû­©eRkn‚B7ñ¾y æºâö¨)rïï„î:°LÌ/[>èa¿™ÇïÎ YK@:‚Ò‘á°„8,AK†Ãâ°GKˆÃ„‰d8,¡–˜ L$Z“ŽBéΛN9,Q+]Ãa ®°D¡tÛ¨tÔJ×ÌuéxM:¤ó– ‡%ŽFã°7ˆoHGMøÐ¨kí?ÉštIçŒAKF5b‰I$ã°édª`=Ö!]“NCéΖ ‡%Fã°9,i+]³éÔ‘NÂUP°žÃRZ“.…sÝëä°”à\÷Ëa;£.…£.wGÝÖ„Ž:Ïa)¯I—[éKЈQGõFá°”#éè1Z°yj™h ¶¬IWÂQwæ°7¨„Òe´Løæ¤„Òé¨t%”nÒyKûštûTÁzKûœtŽˆÑŽçº8ê<‡•¼&]n¥k8¬@#&9uÔu†ÃJޤ£ÇhÁæ©e¢)ز&] Gݙà Üt’J—Ñ2ᛓJ§£Ò•Pº Hç9¬ìkÒíSë9¬ìsÒ9"&;žëò@ÁîSÒy+–ÃÞi‰Ñ2!¨9qV ‡ÄaÚ1V›èŒ:ÃaG¤#ï&¶5é¶©–ØqX1V‡íŒ:ÃayØžtÛTKì8¬X{G:j— Ïa;˄ᰂ8l§%6vx™Øšp'ÝHç9¬X{G:ŽFÝy¿N ‡ÃaqXV ‡½³L;R°ŽÃŠå°w¤“q7ÑrX1V‡ÈaÅpØá–xk‡ZâÀˆY{G:Y&üV§+ˆÃövNt­`uf®óV,‡½#]š‘ÎsX1V‡í­°iMº4åaÉl^“.O¬o‰ ‡°ÿÜ,y~…ÝšðA«Í˜/kÒ•ñQ×rX1V‡ÈaÅpØ[Ò•H:Fö_}K¼¯I·GÒÙ„@+†Ã â°7ØÅpØ[-ñ>.]Ëa…ÖÜ…nâÌa;}EnÂqØÞ.ñci®£)7á9¬Ðš› m¼¯k9¬Ð± [â`™ m¾¯Ûšð!éZ˜(´æ&ˆ‚Qç8l§9¡ÐM(r¾%&Šû:Ëa{ÒÑxsI·æ&ˆgæ:Ïa…"7á8l§¯#^Z&(rŽÃ ä°Bkn‚B7qæ°9¬Pä&‡í,$óËÄÖ„zXÏaÕrXÒ)”N ‡UÄarX5V‡U8êÔpXEV!LTÃaµÄ a¢ÒštJwÞtRÈa•Zé«p…U ¥ÛF¥£Vºf®ëHÇkÒq ç° 9¬r4ê‡U¸é¤|C:j‡F]kÿUÖ¤“H:gÄrX0ê¬SHÄT"é‡íH'S뱎êštJwæ° 9¬j4ê‡UÈaU[éšM§Žt¬‚‚õVÓšt)œëÎXG!‡Õçº_Ûu)u¹;ê¶&|pÔy«yMºÜJ×pX…FLs8ê¨7ê ‡ÕIGÑ‚ÍSËDS°eMºŽº3‡U¸é¤%”.£eÂ7'%”NG¥+¡tÎsXÝפۧ ÖsXÝç¤sDLw<×å‚ݧ¤óV-‡½Ó?¢eBPsâ8¬«ˆÃ*´ÿj8¬"7Ñu†ÃŽHGÞMlkÒmS-±ã°j8¬"Ûu†Ã*ò°=é¶©–ØqXµöŽtÔ.žÃv– ÃaqØNKl8ìð2±5áNºÎsXµöŽtºó~B«†Ã*â° 9¬{g™0v¤`‡UËaïH'ãn¢å°j8¬"«Ãªá°Ã-ñÖ„µÄ³öŽt:³Lø­N5V‡ííœèZÁêÌ\ç9¬Z{Gº4#ç°j8¬"Û[aÓštiÊÃ’/ؼ&]ž*Xß;`ÿ¹Y&òü »5áƒV›1_Ö¤+㣮å°j8¬"«Ãªá°·¤+‘tŒì¿ú–x_“n¤;³ …V ‡UÄan°«á°·Zâ}\º–Ã*­¹ ÝÄ™Ãvú:ŠÜ„ã°½]âÇÒ\GSnÂsX¥57AÛx_×rX¥-b¶ÄÁ2AÛ|_·5áCÒµ0QiÍM£ÎqØNsB¡›Pä&|KL÷u–Ãö¤£ñæ$’nÍMÏÌužÃ*EnÂqØN_G¼´LPä&‡UÈa•ÖÜ…nâÌarX¥ÈM8ÛY&Hæ—‰­ ô°žÃ&Ëa.Aé’á° qØ9l26!›à¨K†Ã&Äa„‰ÉpØ„Zâab¢5é(”î¼é” ‡MÔJ×pØWØD¡tÛ¨tÔJ×ÌuéxM:¤ó6A›8uŽÃ&¸é”ø†tÔ„ºÖþ'Y“N"éœKÃ&£Î±‰X’H:Ça;ÒÉTÁz¬“tM: ¥;sØ9lÒhÔ9› ‡MÚJ×l:u¤Ó°`¬ç°)­I—¹îŒuä°)Á¹î—ÃvF] G]­ užÃ¦¼&]n¥k8l‚F,åpÔQoÔ›r$=F 6O-MÁ–5éJ8êÎ6ÁM§TBé2Z&|sRBétTºJ·é<‡MûštûTÁz›ö9éK;žëò@ÁîSÒy›,‡½Ó?¢eBPsâ8l26!› ýO†Ã&ä&:£ÎpØéÈ»‰mMºmª%v6›‡íŒ:Ãaò°=é¶©–ØqØd9ìé¨]&<‡í,†Ã&Äa;-±á°ÃËÄÖ„;é@:Ïa“å°w¤ãhÔ÷ëä°ÉpØ„8l‚6{g™0v¤`‡M–ÃÞ‘NÆÝDËa“á° qØ9l2v¸%Þšð¡–80b–ÃÞ‘Ng– ¿Õ™ ‡MˆÃövNt­`uf®ó6Y{Gº4#ç°ÉpØ„8lo…MkÒ¥)K¾`óštyª`}Kl8ì€ýçf™Èó+ìÖ„zXmÆ|Y“®Œº–Ã&Ãaâ° rØd8ì-éJ$#û¯¾%ÞפÛ#éÎl"A› ‡MˆÃ&¸Áž ‡½ÕïãÒµ6Ñš› ÐMœ9l§¯£ÈM8ÛÛ%~,Íu4å&<‡M´æ&hïëZ›h‹Ø„†-q°LÐ6ß×mMøt-LL´æ&ˆ‚Qç8l§9¡ÐM(r¾%&Šû:Ëa{ÒÑxsI·æ&ˆgæ:ÏaEnÂqØN_G¼´LPä&‡MÃ&Zsº‰3‡MÃ&ŠÜ„ã°e‚d~™ØšðAë9l¶6é2”.›‡ÍÃfÃa3â°Žºl8lF6C˜˜ ‡Í¨%Î&fZ“ŽBéΛNrØL­t ‡Íp…ÍJ·JG­tÍ\בŽ×¤ã@:Ïa3ä°™£Qç8l†›N™oHGMøÐ¨kí–5é$’α 9l0ê¬ˈe‰¤s¶#L¬Ç:YפÓPº3‡ÍÃfFã°rج­tͦSG: VAÁz›Óšt)œëÎX'C›œë~9lgÔ¥pÔåî¨ÛšðÁQç9lÎkÒåVº†ÃfhÄrGõFá°9GÒÑc´`óÔ2ÑlY“®„£îÌa3ÜtÊ%”.£eÂ7'%”NG¥+¡tÎsؼ¯I·O¬ç°yŸ“α¼ã¹.ì>%ç°ÙrØ;-ñ#Z&5'ŽÃfÃa3â°Úÿl8lFn¢3ê ‡‘޼›ØÖ¤Û¦ZbÇa³á°qØÎ¨36#Û“n›j‰‡Í–ÃÞ‘ŽÚeÂsØÎ2a8lF¶Ó;¼LlM¸“î¤ó6[{G:ŽFÝy¿.C› ‡ÍˆÃfÈa³á°w– ÃaG ÖqØl9ìédÜM´6›‡ÍÃfÃa‡[â­ j‰#f9ìétf™ð[ÙpØŒ8loçD× Vgæ:Ïa³å°w¤K3Òy› ‡ÍˆÃöVØ´&]šò°ä 6¯I—§ ַĆÃØn–‰<¿ÂnMø ‡ÕfÌ—5éÊø¨k9l66#›!‡Í†ÃÞ’®DÒ1²ÿê[â}Mº=’îÌ&2ä°ÙpØŒ8l†ìÙpØ[-ñ>.]Ëa3­¹ ÝÄ™Ãvú:ŠÜ„ã°½]âÇÒ\GSnÂsØLkn‚¶ñ¾®å°™¶ˆMhØËmó}ÝÖ„I×ÂÄLkn‚(uŽÃvš Ý„"7á[b¢¸¯³¶'7'‘tkn‚xf®ó6Sä&‡íôuÄKËEnÂqØ 9l¦57A¡›8sØ 9l¦ÈM8ÛY&Hæ—‰­ ô°žÃËa ®@éŠá°qØ9l1¶ [à¨+†ÃÄa „‰ÅpØ‚Zâab¡5é(”î¼éT ‡-ÔJ×pØWØB¡tÛ¨tÔJ×ÌuéxM:¤ó¶@[8uŽÃ¸éTø†tÔ„ºÖþY“N"éœ+ãα‰X‘H:Ça;ÒÉTÁz¬StM: ¥;sØ9lÑhÔ9[ ‡-ÚJ×l:u¤Ó°`¬ç°%­I—¹îŒu ä°%Á¹î—ÃvF] G]­ užÃ–¼&]n¥k8lF¬äpÔQoÔ[r$=F 6O-MÁ–5éJ8êζÀM§RBé2Z&|sRBétTºJ·é<‡-ûštûTÁz[ö9é+;žëò@ÁîSÒy[,‡½Ó?¢eBPsâ8l1¶ [ ý/†Ãä&:£ÎpØéÈ»‰mMºmª%v¶[‡íŒ:Ãa ò°=é¶©–ØqØb9ìé¨]&<‡í,†ÃÄa;-±á°ÃËÄÖ„;é@:Ïa‹å°w¤ãhÔ÷ë ä°ÅpØ‚8l¶{g™0v¤`‡-–ÃÞ‘NÆÝDËa‹á°qØ9l1v¸%Þšð¡–80b–ÃÞ‘Ng– ¿ÕY ‡-ˆÃövNt­`uf®ó¶X{Gº4#ç°ÅpØ‚8lo…MkÒ¥)K¾`óštyª`}Kl8ì€ýçf™Èó+ìÖ„zXmÆ|Y“®Œº–ÃÃa â°rØb8ì-éJ$#û¯¾%ÞפÛ#éÎl¢@[ ‡-ˆÃ¸Á^ ‡½ÕïãÒµ¶Ðš› ÐMœ9l§¯£ÈM8ÛÛ%~,Íu4å&<‡-´æ&hïëZ[h‹Ø„†-q°LÐ6ß×mMøt-L,´æ&ˆ‚Qç8l§9¡ÐM(r¾%&Šû:Ëa{ÒÑxsI·æ&ˆgæ:Ïa EnÂqØN_G¼´LPä&‡-ÃZsº‰3‡-Ê܄ã°e‚d~™ØšðAë8ìñG¾¥;þ^j#ûïFºŸð—tõ¨„¾·¢é~±}ï}oMø×é¨RêvßSºß_<ö÷D]šðÏÓQ|šëÎ7ÿ”® ÿ÷l8 ÖÜÖwâòo8­IG¡t§Ö\’“Ž"é×A{–®œ[âî¤+¡tµÙmÂÿýŸF`R/]ãa?jt_:ޤ{ïâ×¹®7ê8’îÝP×eÂŽº‡+¥Ë££ŽÃQ§`Ô9{üQ£ûÒI$Ý7vkF]³HÕð³tß%³Ò]d wÒ%4êÈ:™uÏŽx;mqÔè¾tI÷Þ!¯ÖŽºÍݼ†Ò¥QétbÔÕŽ­ w£ŽÁ¨ûnJtiMºÔJ÷Òîñsu7×m§õ½†JW6W°©•®®t']šZ&Ž)ø7<¯I—ùn·Í‰uê†Mޤû®¸H÷pk\Ò½ö¤Ë¸`s ÝÛ#™¹®¬IW¹n³0ÑŠrÜ- FÝ-šð¡æ$(Ø25êÔOûšt{X°ßkÒí­t¯üæx…-êFÝJGH:ßÛì`Ôýø8·Â²»yÃaoµÄ¨¯û~Œn@º_kŽÚ·Ñ¹î—Ã67²ÂþrX;ê¨%~¸¹ÎpØ[Òmt|Ú%¶W×ðê÷¥Û¢Q÷v[ yÚÇIGþê´&E£îaŸ9i€&ÜI—ëž•kNÄì/‡½uÕR4á£ÒŸê|†óštÍu[6»g9¬•îQ͈“Î7¥¿v¨`ý ûËa›ð`®sö.kÒI4ê°ÿ‡ýå°¶ Øê ½h‰9¬¬öÑeâ—ÃÙÿÝOÔº&ÒI²O°Û¾Žü\§ÑÎIªfÄÍu»´I§ÃÒéštiMº4#]»H¥hÔí¨%öÍÉ/‡MèÕ ›fš“Æˆ{KºÍußN9(ØÝÏ´9îè=GF]FÝVF[â_;bÿ ^Ö¤+Sn¢YaËŒ›(Åö2U°8Ülu†ÃÞ’nŸ)ØïGKî¤+u•qÒÅ7liNö©­Î3‡ÕÖÜEnâ=l¢M§ïG]¥ 5b¾%¦ÇÒ¨£Çø\ìÓš› ÈM|OiQÁúÖˆ¶©Ö,mpÔÑÀ\G¡›@»Äíͯ¹ ŠÜÄ#ÙgNÚRlÂOÒÑ#¿Ÿ‡ vN²[㈦ZâFºÐM”aéÖÜqT°'úo¯~~¼†º‰f¿Žx|®«„µ 5b~ï‚ÖÜEn‚ (Øos››p'ÝÛ,ò@_G¡›àÑæ„dň‘å°¤#(KˆÃ$bd8,!KÃ’á°„¶: îœá°„ÜAN´&…Ò9,AKIç8,AKJWBéZKÔJ×4'WXâ5é8’ÎqØÎ¨ãH:Ça rXâPº<:ê8u Fç°$kÒI$ã°9,I$ã°wNHBéuÎÃ’LŒº–Ã’®I§‘tŽÃä°¤¡tiT:uí2AŽ:£ÎÛJkÒ¥Vº†Ãä°”¦¤ón‚R+]Ãa º JS˄簔פËá\wæ°9,åH:Ça öu”t–Ãv¤Ë¸`s ã°TÖ¤+á\wÞ9!ØUR — £ÎsX*ÍIP°ejÔùÚפÛÂ=sØŽt{+]cÿ ¶Ä´‡Ò’Î÷6;uÖþä°d9ì–øõugÛ‘ÎpXB0±3×KÈÃvVXÃa qX‚[Üd9ìé¶@:Ça rX2ö–t[4êÃnb ¤s– ‡%ËaïHGѨ;sX‚»Äd8,!KÃ’á°—£®Ýê$ÃaG¤s–,‡½#GsÝ™Ãvl á°„vNrX2v¤`ý k8,!ûOû/kÒI4ê°ÿ‡5–‡í´Ä†Ãâ°eÂpØû¿û‰ZפÓ@:Ç&rX2–Ð.1A"F†ÃÚ`ïI§kÒ¥5éÒŒtí"•¢Q·£–Ø7'†Ãâ°½6Í4'³öŽt9šëΖ ‡%Ãa qØÞ¨ËÁ¨ÛÊhKl8ì€ý÷–,‡½#]™rÍ [fÜ„Ç:d8ìHÁ>âpW°yÔMX{Gº}¦`=‡%Ãa qX‚– ‡%Ä&zÍÉ>µÕé8,Ñš› ÈM8KÃ=¦Œ˜o‰é±4êè1>׻Ĵæ&(rŽÃvZ#Ú¦VX_°´ÁQGs…ní·7¿æ&(rŽÃä°D›ð– ‡%¢©–¸‘.teXº57Aì™Ãä°DSn¢Ù¯#ŸëZKÄSFÌï]К› ÈM8KÃEnÂqØN_G¡›àÑæ„dň±å° ¤c(ˈÃ2$bl8,#Ëòᰌ¶:ᰌÜCδ&…Ò9,CËIç8,CËJWBéZËÔJ×4' WXæ5é8’ÎqØÎ¨ãH:ÇarXæPº<:ê8u Fç°,kÒI$ã° 9,K$ã° wNXBéuÎòLŒº–ò®I§‘tŽÃ2ä°¬¡tiT:uí2ÁŽ:£ÎÛNkÒ¥Vº†Ã2ä°œ¦¤ón‚S+]Ãaº NS˄簜פËá\wæ° 9,çH:Çaöuœt–Ãv¤Ë¸`s ã°\Ö¤+á\wÞ9aØUr — £ÎsX.ÍIP°ejÔùÞפÛÂ=sØŽt{+]cÿ¶Ä¼‡Ò’Î÷6;uÖþ3ä°l9ì–øõugÛ‘ÎpXF0±3×ËÈÃvVXÃaqX†[Ül9ìé¶@:ÇarX6ö–t[4êÃnb ¤s–!‡eËaïHGѨ;sX†»Äl8,#Ëòᰗ£®ÝêdÃaG¤s–-‡½#GsÝ™Ãvl á°ŒvNrX6v¤`ý k8,#ûÏû/kÒI4ê°ÿ‡5–‡í´Ä†Ã2â°eÂpØû¿û‰ZפÓ@:Ç&rX6–Ñ.1C"ƆÃ2Ú`ïI§kÒ¥5éÒŒtí"•¢Q·£–Ø7'†Ã2â°½6Í4'³öŽt9šëΖ!‡eÃaqØÞ¨ËÁ¨ÛÊhKl8ì€ý÷–-‡½#]™rÍ [fÜ„Ç:l8ìHÁ>âpW°yÔMX{Gº}¦`=‡eÃaqX†– ‡eÄ&zÍÉ>µÕé8,Óš› ÈM8ËÃ2=¦Œ˜o‰é±4êè1>׻Ĵæ&(rŽÃvZ#Ú¦VX_°´ÁQGs…ní·7¿æ&(rŽÃ2ä°L›ð–!‡e¢©–¸‘.teXº57Aì™Ã2ä°LSn¢Ù¯#ŸëZËÄSFÌï]К› ÈM8ËÃ2EnÂqØN_G¡›àÑæ„dň‰å°¤(+ˆÃ $bb8¬ +Êᰂ¶:ᰂ܄@.´&…Ò9¬@+Iç8¬@+JWBéZ+ÔJ×4'WXá5é8’ÎqØÎ¨ãH:ÇarXáPº<:ê8u Fç°"kÒI$ã°9¬H$ã°wNDBéuÎÊLŒº–Ê®I§‘tŽÃ ä°¢¡tiT:uí2!Ž:£ÎÛIkÒ¥Vº†Ã ä°’¦¤ónBR+]Ãaº IS˄簒פËá\wæ°9¬äH:Çaöu’t–Ãv¤Ë¸`s ã°RÖ¤+á\wÞ9ØUJ — £ÎsX)ÍIP°ejÔùÙפÛÂ=sØŽt{+]cÿ¶Ä²‡Ò’Î÷6;uÖþ ä°b9ì–øõugÛ‘ÎpXA0±3×+ÈÃvVXÃaqX[Üb9ìé¶@:ÇarX1ö–t[4êÃnb ¤sV ‡ËaïHGѨ;sX»Äb8¬ +Êᰗ£®ÝêÃaG¤sV,‡½#GsÝ™Ãvl á°‚vNrX1v¤`ý k8¬ û/û/kÒI4ê°ÿ‡5V‡í´Ä†Ã â°eÂpØû¿û‰ZפÓ@:Ç&rX1VÐ.±@"&†Ã Ú`ïI§kÒ¥5éÒŒtí"•¢Q·£–Ø7'†Ã â°½6Í4'³öŽt9šëÎV ‡ÃaqØÞ¨ËÁ¨ÛÊhKl8ì€ý÷V,‡½#]™rÍ [fÜ„Ç:b8ìHÁ>âpW°yÔMX{Gº}¦`=‡ÃaqXV ‡Ä&zÍÉ>µÕé8¬Ðš› ÈM8+à =¦Œ˜o‰é±4êè1>׻Ĵæ&(rŽÃvZ#Ú¦VX_°´ÁQGs…ní·7¿æ&(rŽÃ ä°B›ðV ‡¢©–¸‘.teXº57Aì™Ã ä°BSn¢Ù¯#ŸëZ+ÄSFÌï]К› ÈM8+à EnÂqØN_G¡›àÑæ„dň©å° ¤S(«ˆÃ*$bj8¬"«Ãªá°Š¶:ᰊ܄B®´&…Ò9¬B«Iç8¬B«JWBéZ«ÔJ×4' WXå5é8’ÎqØÎ¨ãH:ÇarXåPº<:ê8u Fç°*kÒI$ã° 9¬J$ã° wNTBéuÎêLŒº–ê®I§‘tŽÃ*ä°ª¡tiT:uí2¡Ž:£ÎÛMkÒ¥Vº†Ã*ä°š¦¤ónBS+]Ãaº MS˄簚פËá\wæ° 9¬æH:Çaöušt–Ãv¤Ë¸`s ã°ZÖ¤+á\wÞ9QØUj — £ÎsX-ÍIP°ejÔùÝפÛÂ=sØŽt{+]cÿ¶Äº‡Ò’Î÷6;uÖþ+ä°j9ì–øõugÛ‘ÎpXE0±3׫ÈÃvVXÃaqX…[Üj9ìé¶@:ÇarX5ö–t[4êÃnb ¤sV!‡UËaïHGѨ;sX…»Äj8¬"«Ãªá°—£®ÝêTÃaG¤sV-‡½#GsÝ™Ãvl á°ŠvNrX5v¤`ý k8¬"û¯û/kÒI4ê°ÿ‡5V‡í´Ä†Ã*â°eÂpØû¿û‰ZפÓ@:Ç&rX5VÑ.±B"¦†Ã*Ú`ïI§kÒ¥5éÒŒtí"•¢Q·£–Ø7'†Ã*â°½6Í4'³öŽt9šëÎV!‡UÃaqØÞ¨ËÁ¨ÛÊhKl8ì€ý÷V-‡½#]™rÍ [fÜ„Ç:j8ìHÁ>âpW°yÔMX{Gº}¦`=‡UÃaqX…V ‡UÄ&zÍÉ>µÕé8¬Òš› ÈM8«Ã*=¦Œ˜o‰é±4êè1>׻Ĵæ&(rŽÃvZ#Ú¦VX_°´ÁQGs…ní·7¿æ&(rŽÃ*ä°J›ðV!‡U¢©–¸‘.teXº57Aì™Ã*ä°JSn¢Ù¯#ŸëZ«ÄSFÌï]К› ÈM8«Ã*EnÂqØN_G¡›àÑæ„dň%Ëa.Aé’á° q؉X26!› ‡M†Ã&´Õ™àÎI26!7‘ O´&…Ò9l‚6Q$ã° rØD¡t%”®å°‰Zéšæ$Á6ñštIç8lgÔq$ã° rØÄ¡tytÔq8êŒ:Ïa“¬I'‘tŽÃ&Èa“DÒ9›àÎI’Pº„Fó°I&F]Ëa“®I§‘tŽÃ&Èa“†Ò¥QétbÔµËDÒpÔ1uÞþ§´&]j¥k8l‚6¥)é¼›H©•®á° º‰”¦– ÏaS^“.‡sÝ™Ã&ÈaSޤs6Á¾.e å°é2.ØHç8l*kÒ•p®;ïœ$ØU¦. Fç°©L4'AÁ–©QçwNÒ¾&Ýì™Ãv¤Û[éûŸ`KœöP:BÒùÞf£ÎÚÿ9l²öNKüˆúº3‡íHg8lB0±3×›‡í¬°†Ã&ÄaÜâN–ÃÞ‘n ¤s6A› ‡½%ݺǰ›Ø震MÃ&ËaïHGѨ;sØw‰“á° qØ9l2örÔµ[ÉpØé‡M–ÃÞ‘Ž£¹îÌa;6ÐpØ„vNä°ÉpØ‘‚õ+¬á° ÙÿÔ±ÿ²&D£.ûßxXÃaâ°–ØpØ„8lg™0vÄþï~¢Ö5é4α‰9l26¡]â‰X26¡ öžtº&]Z“.ÍH×.R)u;j‰}sb8lB¶·Â¦™æ¤1b–ÃÞ‘.GsÝ™Ã&Èa“á° qØÞ¨ËÁ¨ÛÊhKl8ì€ý÷6Y{Gº2å&š¶Ì¸ u’á°#ûˆÃ]ÁæQ7a9ìéö™‚õ6›‡MÃ&Ãab½ædŸÚêt6Ñš› ÈM8› ‡Mô˜2b¾%¦ÇÒ¨£Çø\ìÓš› ÈM8Ûih›Za}ÁÒG Ìuº ´KÜÞüš› ÈM8› ‡M¸ Ïaä°‰hª%n¤ ÝD–nÍMG{æ° rØDSn¢Ù¯#ŸëZ›ˆ§Œ˜ß» 57A‘›p6A›(rŽÃvú: Ý6'$+F,[›tJ— ‡ÍˆÃfHIJá°qØ 9l66£­Î wN²á°¹‰ x¦5é(”îÌa3ô°™"é‡ÍÃf ¥+¡t-‡ÍÔJ×4'®°™×¤ãH:Ça;£Ž#é‡ÍÃf¥Ë££ŽÃQ§`Ôy›eM:‰¤s6C›%’ÎqØ wN²„Ò%4꜇Í21êZ›uM:¤s6C›5”.J§£®]&²†£ŽÁ¨óö?§5éR+]Ãa3ä°9MIçÝDN­t ‡ÍÐMä4µLx›óšt9œëÎ6C›s$ã°öu9é,‡íH—qÁæ@:ÇasY“®„sÝyç$î2—p™P0ê<‡Íe¢9 ¶L:¿s’÷5éö°`϶#ÝÞJרÿ [⼇Ò’Î÷6;uÖþgÈa³å°wZâGÔ×9lG:Ãa3‚‰¹ÎpØŒâpW°yÔMX{Gº}¦`=‡-†ÃÄa ä°ÅpØ‚ØD¯9Ù§¶:‡-´æ&(rŽÃÈa =¦Œ˜o‰é±4êè1>׻Ĵæ&(rŽÃvZ#Ú¦VX_°´ÁQGs…ní·7¿æ&(rŽÃÈa nÂsØ9l!šj‰éB7Q†¥[sÄQÁž9l¶Ð”›höëˆÇ纖Ãâ)#æ÷.hÍMPä&‡-Ê܄㰾ŽB7Á£Í Ém#öÿú϶ýëßߟýßÿùÞG° ¢Ô_üC塯ZjŸWÿ=JéUYï·þ¾®þû‹mM$EÃÿ×çŸ#?îêGâþ×gp[5œÌͺy‚7Oææ Ý<Á›'só„nžàͳ¹yF7ÏðæÙÜ<£›gxólnžÑÍ3¼y17/èæÞ¼˜›tóo^ÌÍ ºy7¯ææݼ›WsóŠn^áÍ«¹yE7¯ð擹ù„n>Á›Oææºùo>™›Oèæ¼ùln>£›Ïðæ³¹ùŒn>Ã›Ïææ3ºù o¾˜›/èæ ¼ùbn¾ ›/ðæ‹¹ù‚n¾ ›'3Ïšçë/þI¬¯ÛÒ&üyó¿G‘¾ÓÏÍÿž÷ŸgCžê"õ ÿ½yBó<ÁyžÌ.‚ê„r÷"9¬&‘r\Õ •îEJXMî"|Ô ß«“‘õ„Žõ„ðzÒ¯“‘õ„Žõ„ðzÒ¯“‘õ„Žõ„ðzÒ¯“‘õ„Žõ„ðzÒ¯“‘õ„Žõ„ðzÒ¯“‘õ„Žõ„ðzÒ¯“‘õ„Žõ„ðzÒ¯“±õDŽ:‘{u"›{‹L|‘£Nä^¹×ÀÄ9êDîÕ‰°{K|‘£Nä^ˆ¸±Ä9êDîÕ‰¨{“J|‘£Nä^Hr¯B‰/rԉܫÉî]&ñEŽ:‘{u"ŽŒ$¸>ž±çNðçÃÇ3öñLÝ‹ øx>||žs÷">žÏØÇsé^dÀÇËQ'‚ëD:u"Cu"G®¡îEêDŽ:\'ÂÝ‹ Ô‰u"¸NDº¨9êDpˆv/2P'rÔ‰à:‘Ô½È@ÈQ'‚ëDr÷"u"G®)Ý‹ Õ uÂ÷êdÄŸÈáOû“~Œø9ü‰`Ò¯“"‡?ìOúu2âOäð'‚ýI¿NFü‰þD°?é×Ɉ?‘ßö'ý:ñ'røÁþ¤_'#þD:Q\'Ú©ª=êDq(u/2P'zÔ‰â:Qî^d Nô¨Åu¢Ò½È@èQ'ŠëDµ{‘:Ñ£N׉¦îEêD:Q\'š»¨=êDqhé^d¨N䨹W'#>^¯ØÇ÷ëdÄÇëáãûø~Œøx=|¼b߯“¯‡Wìãûu2âãõðñŠ}|¿NF|¼>^±ï×Ɉ×ÃÇ+öñý:¹ôñÿÛßKÿ:ÕI ýÉ÷Q]ÿ:„º¡ã"Ô½H—Ç¿áîEø¸w/Òåñ¯C¤{9."Ý‹tyüëí^D‹h÷"]ÿ:$u/’Ž‹¤îEº<þuHî^$ÉÝ‹tyüëÒ½H9.Ò­“>¿¬Þ‚¿§Ñ^¤Ëã/ë„)ø‹íEº<þ²N˜ƒ¿)Ñ^¤Ëã/ë„%ø«íEº<þ²NXƒ¿«Ð^¤Ëã/ë„Sð— Ú‹tyüepþ¶@{‘.¿¬.ÁÛýÝE®x|»RüiÃjòéòøv¥øÓ†Õä/ÒåñíJñ§ ªÉ_¤ËãÛ•âOT“¿H—Ç·+ÅŸ6<¨&‘.oWŠ?mxPMþ"]ß®Úð šüEº<¾])þ´áA5¹‹ôyüeŒ¬'W<þ²NFÖ“+Y'#ëÉ¿¬“‘õäŠÇ_ÖÉÈzrÅã/ëdd=¹âñ—u2²ž\ñøË:[Oú<þ²Nä¨éÖIŸÇ_Ö‰u"Ý:éóøË:‘£N¤['}Y'rÔ‰të¤Ïã/ëDŽ:‘nôyüeÈQ'Ò­“>¿¬9êDºuÒçñ—u"Gô|üoWŠ?mø•¿âñíJñ§ ¿òñW<¾])þ´áW>þŠÇ·+ÅŸ6üÊÇ_ñøv¥øÓ†_ùø+ß®Úð+ÅãÛ•âO~åã¯x|»Rüiï|üoWŠ?møU\ñøv¥øÓ†_ÕÉoWŠ?møU\ñøv¥øÓ†_ÕÉoWŠ?møU\ñøv¥øÓ†_ÕÉoWŠ?møU\ñøv¥øÓ†_×IŸÇ_ÖɈ?¹âñ—u2âO®xüeŒø“+Y'#þäŠÇ_ÖɈ?¹âñ—u2âO®xüeŒø“+Y'#þäŠÇ¿éÔ‰ÕÉBÝ‹ ÔÉÂÝ‹ ÔÉ"Ý‹ Ôɢ݋ ÔÉ’º¨“+ÿ:$w/2P'W<þuHé^d¨Nú<þ²NF|ü¿¬“Åã/ëdÄÇ_ñøË:ññW<þ²NF|ü¿¬“Åã/ëdÄÇ_ñøË:¹ôñ_~ýü䫳R|Uøõ‘¯ÎðUáÞ×_À<¾:³ûWÅv_ÍøêÌÛ_È}ýœâ«3#UÔöõˆ¯Î\ûU!Ú×_À¾:³èWÅc_5øêÌ_uCÿë/ð¥y§šwº“wªy§;y§šwº“wªy§;y§šwº“wªy§;y§šwº“w­y×;yךw½“w­y×;yךw½“w­y×;yךw½“w­y×;yךwÎûÿù\>Oò:õC5üußGuŸ'yBÝ‹Ðqê^¤û<Éëî^„‹p÷"ÝçI^‡H÷"r\Dºé>Oò:D»Ñã"Ú½H÷y’×!©{‘t\$u/Ò}žäuHî^$ÉÝ‹tŸ'yRº)ÇE:urõ<ÉëNÏ“´Õä/Ò}žäuu/Ba5ù‹tŸ'yÂÝ‹pXMþ"ÝçI^‡H÷"V“¿H÷y’×!Ú½ˆ†Õä/Ò}žäuHê^$…Õä/Ò}žäuHî^$‡Õä/Ò}žäuHé^¤„Õä.Òžä²NFÖ“«çI.ëdd=¹zžä²NFÖ“«çI.ëdd=¹zžä²NFÖ“«çI.ëdd=¹zžä²NFÖ“«çI.ëdl=é?OrY'rÔ‰të¤ÿ<ÉeÈQ'Ò­“þó$—u"GH·NúÏ“\Ö‰u"Ý:é?OrY'rÔ‰të¤ÿ<ÉeÈQ'Ò­“þó$—u"GH·NúÏ“\Ö‰u":¹zž¤])þ´áA5ù‹tŸ'iWŠ?mxPMþ"ÝçIÚ•âOT“¿H÷y’v¥øÓ†Õä/Ò}ž¤])þ´áA5ù‹tŸ'iWŠ?mxPMþ"ÝçIÚ•âOT“¿H÷y’v¥øÓ†ÕtºÈ'oWŠ?møUßuÅÉÛ•âO~Õw]qòv¥øÓ†_õ]Wœ¼])þ´áW}×'oWŠ?møUßuÅÉÛ•âO~Õw]qòv¥øÓ†_õ]Wœ¼])þ´áW}×'Ò©ª“+Nþ:„º¨“+Nþ:„»¨“+Nþ:Dº¨“+Nþ:D»¨“+Nþ:$u/2P'WœüuHî^d N®8ùëÒ½ÈPô9ùeŒø“+N~Y'#þ䊓_ÖɈ?¹âä—u2âO®8ùeŒø“+N~Y'#þ䊓_ÖɈ?¹âä—uréO>ÿËï­vøI ýÉ÷QÝï­vøI _„ºé~oý³ÃOjøû"ܽH÷{ëŸ~RÃß‘îEºß[ÿìð“þ¾ˆv/ÒýÞúg‡ŸÔð÷ER÷"Ýï­vøI _$w/ÒýÞúg‡ŸÔð÷EºuÒ猗uÂGp·Núœñ²Nø¨îÖIŸ3^Ö uÂÝ:ésÆË:á£N¸['}ÎxY'|Ô wë¤Ï/ë„:ánô9ãeðQ'Ü­“>g¼¬>ê„;urÅ?;ûÂ5<¨&‘.güìì ×ð šüEºœñ³³/\ÃjòérÆÏξp ªÉ_¤Ë?;ûÂ5<¨&‘.güìì ×ð šüEºœñ³³/\ÃjòérÆÏξp ªÉ]¤Ï/ëdd=¹âŒ—u2²ž\qÆË:YO®8ãeŒ¬'Wœñ²NFÖ“+ÎxY'#ëÉg¼¬“‘õäŠ3^ÖÉØzÒ猗u"GH·Núœñ²Nä¨éÖIŸ3^Ö‰u"Ý:ésÆË:‘£N¤['}ÎxY'rÔ‰të¤Ï/ëDŽ:‘nô9ãeÈQ'Ò­“>g¼¬9ê¤çã¯8ãg‡3Öð+Å?;œ±†_ùø+ÎøÙáŒ5üÊÇ_qÆÏg¬áW>þŠ3~v8c ¿òñWœñ³Ãkø•¿âŒŸÎXï|ügüìpÆ~åã¯øÉgg_¸†_õ]Wüä³³/\ïú®+~òÙÙ®áW}×?ùìì ×ð«¾ëŠŸ|vö…køUßuÅO>;ûÂ5üªïºâ'Ÿ}á~Õw]ñ“Ïξp ¿ê»®øÉeŒô]Wüä²NFú®+~rY'#}×?¹¬“‘¾ëŠŸ\ÖÉHßuÅO.ëd¤ïºâ'—u2Òw]ñ“Ë:¹ì»þóÿ¾Ü~‚꤆¿Ž‚ëÉ÷QÝ}á×!Ô½¡îEºû¯C¸{>.ÂÝ‹t÷…_‡H÷"r\Dºéî ¿ÑîEô¸ˆv/ÒÝ~’ºIÇER÷"Ý}á×!¹{‘|\$w/ÒÝ~Rº)ÇE:urµßõ:¤S'4T'Wû]¯C¨{‘:¹ÚïzÂÝ‹ ÔÉÕ~×ëé^d N®ö»^‡h÷"urµßõ:$u/2P'Wû]¯Cr÷"urµßõ:¤t/2P'WþäuH§Nt¨N®üÉëê^d N®üÉëî^d N®üÉëé^d N®üÉëí^d N®üÉëÔ½È@\ù“×!¹{‘:¹ò'¯CJ÷"Wuòïÿ\ö]¯CPÔð×Q°N¾êö]¯C¨{:.BÝ‹tû®×!ܽáîEº}×ëé^DŽ‹H÷"ݾëuˆv/¢ÇE´{‘nßõ:$u/’Ž‹¤îEº}×ëܽH>.’»éö]¯CJ÷"å¸H§N®ú®×!:¡¡:¹ê»^‡P÷"urÕw½áîEêäªïz"Ý‹ ÔÉUßõ:D»¨“«¾ëuHê^d N®ú®×!¹{‘:¹ê»^‡”îE®êäüÏËç _‡ :©á¯£ ?ù>ªûäëê^„Ž‹P÷"Ýç _‡p÷"|\„»é>ù:Dº‘ã"Ò½H÷9È×!Ú½ˆÑîEºÏA¾IÝ‹¤ã"©{‘îs¯Cr÷"ù¸Hî^¤ûäëÒ½H9.Ò­“~ßuY'|Ô wë¤ßw]Ö uÂÝ:é÷]—uÂGp·Nú}×eðQ'Ü­“~ßuY'|Ô wë¤ßw]Ö uÂÝ:é÷]—uÂGp·Nú}×eðQ'ýõD:Ñ{u¢Gh·Nô¨½W'zÔ‰vëD:Ñ{u¢Gh·Nô¨½W'zÔ‰vëD:Ñ{u¢Gh·Nô¨½W'zÔ‰vëD:Ñ{u¢Gh·Nô¨½W'zÔ‰vêäêyá¶£úÓ†Õä/Ò}^¸í¨þ´áA5ù‹tŸn;ª?mxPMþ"Ýç…ÛŽêOT“¿H÷yá¶£úÓ†Õä/Ò}^¸í¨þ´áA5ù‹tŸn;ª?mxPMþ"Ýç…ÛŽêOT“»HßÇ_ÖÉHßuåã/ëd¤ïºòñ—u2Òw]ùøË:é»®|üeŒô]W>þ²NFú®+Y'#}ו¿¬“‘¾ëêyáË:‘£N¤['ýç…/ëDŽ:‘nôŸ¾¬9êDºuÒ^ø²Nä¨éÖIÿyáË:‘£N¤['ýç…/ëDŽ:‘nôŸ¾¬9êDºuÒ^ø²Nä¨éÔÉÕûVÚ øÓ†_­'Wï[i+àO~µž\½o¥­€?møÕzrõ¾•¶þ´áWëÉÕûVÚ øÓ†_­'Wï[i+àO~µž\½o¥­€?møÕzrõ¾•¶þ´áWëÉoúŸ6üªN®x|ëÐÿ´áWurÅã[‡þ§ ¿ª“+ß:ô?møU\ñøÖ¡ÿiïêäŠÇ·ýO~U'W<¾uèÚð«:¹âñ­CÿÓ†£:ùúßÿ‡þïþõß>~áû–ôñO–½Ô_ûEÎ(\†Â…§¡ðŒÂËHøOƒÉe“ŠîRAîq8£p Wž†Â3 /#áušÓ\Ò?ò½ß¿ ÷‹8œQ¸ …+ OCá…—‘ð£aÒÿaÝKâú r¿ˆÃ…ËP¸¢ð4žQx ÿY‰û?)ïUºŸ…«þ"g.CáŠÂÓPxFáå"ü¿ý·×\÷o;w>þ©¿ ÷‹8œQ¸ …+ OCá…—‘pBŸ†>;¡ÏNCŸÐg§¡ÏNè³ÓÐggôÙyè³3úì<ôÙ}vúìŒ>;}vAŸ]†>» Ï.CŸ]Ðg—¡Ï.è³ËÐgWôÙuè³+úì:ôÙ}vúìŠ>»}ömûšëþ54סp Wž†Â3 /ÿšëþ…溡pôÙiè³úì4ôÙ }vúìŒ>;}vFŸ‡>;£ÏÎCŸÑgç¡Ï.è³ËÐgôÙeè³ úì2ôÙ}vúìŠ>»}vEŸ]‡>»¢Ï®CŸ]Ñg׫Ïþ?ŸGfùgøý‚š_DáŒÂe(\Qøÿ¿±wK’œGÒ,ßG¤÷à ¡|̪¿;¥«R¢r"*Ejÿ+ÀÌÒÜ´áŠc$¨¸é(2*^VÅ߾粸ü}Q\Qq[wT<¯Š—Åÿ¿¿ÿíÜ *ÇVS–ñ‡±kóyÏ©†ÅuZiÝ4=V?Œ5¨¤ãØv1 ‹5¨´_Ù²ï6þgñ¶ˆÌV<,^æÃ·Wªi¯óU¶ª9üõ)n‰‰oY³?œïîëû×óG|³ºÏâóÝ5ï[2Ѱø|wUÙJµQuSzi+©²ål9,~y÷´•"ó×ëùIl³RÃ7ciOyKå±jüáõîGûí*zÄ5?bµÚväz£æGìáд¹ä¿ûˆ=»méØs™Å_ï^­ySi¯ÿúx÷¶ÄÞ$yN;b‡¤ÍÚg“ð݇X#Ú¾úqìóà ¥}ЭU¨•ð»…¤yÍ&¹}ö4þpú|ÞŠ§zÝ%Ò!ÛÞ*h×ñ‡o+¶Éa)n2C YÊšä¨ç[Úª¾DÅýüîÍëržU7ƒæio¡èÖüŒz·â©}ù}üúŒT§}×Í-öºj>ʾµŸ°ùë¯w?š/ï)9t›ßmÏ(í×}8íŒÉ¶ÇòVyòóáÿ:o·=L·zÔãÑÐx½{mn³ïagõ×y=mm-c¯&Ïšÿë¼xöðæó{Iaññî©äæwvÈøÃhïépÛT§ýërAlÚÍÛï?zŸÇ^ï^š?¹©$о®t×öþŠã¯wχnYJú·yX½Þ=׺µ÷ϧyüáõM»7aq?¿Ï±©Í‡?eæöI­=@‹¿Þ½´§­»xöuן¶N²uÿÙ%|÷Ù×IÑíZ|ÆYµMkd¯%üS/͵r~à®÷Á·ZÛ<µ±"üký¬—cÖüè뤶žÖô8â_í½½¢xw®¯÷›Ï娷£œÖü¦›w”½5¬ñîSLî¿~5…?ÕàÊ-ííǯ¾®}¶Í½Ö:íìëZ?_këÆwŸ²i铯{øá¦îÙ~½µ ¯›Zex÷²küáüüî¶5ß™-nôuÚºªÖQF³‹Ëê’Û¯·)Äì.fœµùü~T­a;N¥‘éR|~÷ÚÞæá»Ï8k›BԣجùgÍi“öèþóׯ7y'ËG¢õëÛÝí}ZÜõ*îdGû™ýÙ×]/ÙNÞº`?R\|Š…©´O$χ¿Þ’-}ÚQå§:ðvvÊ­KÝkž¿>ûùæË­ ZÜå6ëÔÆ‚6{Í*/÷T'-[›Ø «nôu©u•©UÐ|÷Ñ×µ:ÙÚ ã¨÷9ñí-ClÔüèën£}ÊŸzZë.ì8ò,>õ´6ðîuèËÅÍ© e¥õ eŸ}Ýa›·Ñ+ãÞn^>ZÞ^±|}»S9÷¦d{Ž‹ïÞ§…Õò³·¹\Šüx¬63’¸øx÷æÇž\gñzy¬£Í\ÂwnÂIµYIï>ûºTÚ'ñ\ââzZ嶲ᴗyÝÖ½ÖüÜn"}ˆ´}ŸÅç×þÒœÑB§}]û‘ìZÒ¨ùÙ×õ9í!­§ŽŠOM©j_mµ·ÿz¿£»u²›´eV vöu­?n³›ï>û:ï’V­qw1û: Ðgƒ}]ûÏ6H &'—˰Ûú±MÛ³Ï&3ú:ÝÛ§µ3«Ë5»jmút´å”}½_«ÞÞ*÷ BX|Œïm ÚÚå¾ç¯÷ûhµMˆSõ¶‹woSÚ¶`±:}¼{[X·¦ÔV#aññîª[k•þì*/7¯>V‡G£‡ï>ûºöëRÚ¶|½_O×ûoÓíø×g_׬«Ï¾îr'\ë¦Zw¡­1‡ÅÇøÞ¼NŽr<[Üå"¶ÔF¯6ê{ÎañÙ×ÕÍÚRû,^/oÕf«%üps^ל¶´ŠÛGÍŸ[{úÐØð×g_׺4kÓê_ßî/jUw´ß^í½­²Ý_>½4¨ÍV랣•ÔõÖŸ¶¨GªiþúÔÏ«©aq;c­aµ~^¾¾]Ó§Óšj ¿ûìë¤2m¹[†×}]›Q·¯áw?û:íRo–Ñdì\Ë´J9¼„UwíëÙ‹Î_?cmy˜K©QñÙ×µ ynãD¿>ûº6@—Ö ‹¾N{3Òlqg_—úÀßçaq?­ÚÜ*¥ùëS?/=”‚Qær×h[§\d4Ø9¯{­Ð‚yÝ5Õ[sØÞ;¥¯oéù›Ó–6] f•×üúEZ—&åéóלø¥ù|ûÅÇwo½‚m9}Žqmh«” É\3ÉgÝRëhŸóùkö÷Ü–X&m~Ÿñ:ëSGKW~K‘Û—m>퇇Åç~™6˜Ô¶PÏ_ßòÒv·©m¾ÿºŸ¿Þjèx:í5ló§\Ò^ãâãÝÛ Õ~ÄÒ,>ÞÝ´üG ~öuÚÞ½õ5‡~}K{Ú‡ ·¼×°ø|÷6›oS ùÝg_××åž`^wMÚ‹k):j^/ïîZÛÈ/ç+¦ÖY¤ùðãݛϷ©‡iøëç¼îhK‘6ƒÅÏ Ñm…¶·}Xó—ÍmòØ–Ùõë{þȶÎm=¶¸sqoXµÔá´ç¼®÷¡ÇžÃš?÷îöY›\ ¯;÷Ûö/Úæláw?7Ì–î]^FÍû¥½K«ÔØig¼®2­3®³æg¼®-ïöRUÂö~Æë¼ý¸•2Úû¹³w$mXÂâç»ko32Þ}ÆëÚÀß¾úØ¯É Ûü«uÔõÑK¼%pìKëîÌ9,®—âUÒóÃ]³&öŽºÍÎDÂâ~þH„õQo© Û8õðy ‹—SxÙ[sͳøu>ßFª ðrMðg½YûËmÞ’ò=‚aQguͪד½9Ç,>ûº6³jkÛøáϾ.õ°Ïk)tM?§ ¹jøáf_×ú$¯íË×·œom²Û†ß¶ŒŒŠ¾®‡>ú×}Š —j}àßksf‹ñÝÛ&—6?ùzÏ[ÖšÚÖúéhzI<ÖÃ>¥Ïþfñ1¾§öðû~Cä%Û×c\ëOsÍÐÕE¶¼K>üìëzg~”œÇ¯Ï¾®uB¹Íâ7ûº¾Îm åYóg_×Ú{>ª†^wöu=®­³ß}ËíÉÛ6¬ºÙ×µ¾&µÇl2³¯kUÒ|y¯aÕñº£GõŠŒï>ûº=¨–ãëz™ùéðáó³¯{hRÖj%,>ß½Mj½ÍNæ¯ç3.ZÅ1«k.¸Ö+´yÙ~ŒÎÊ/í]“Iðݯ ØúÜso3Wùú–4MÇìb‹Ï~>mÕºzóõ-SY_™»AÄìšjìö³<Ûû%=XûèÛÑ&«5þõ¹Ø{wžÒüõ9·iU—š7–¨¸œš”÷àÒÓç/‰°úÿïÍi‚`ã%“U›Žn{û‘çúý’}*uë­a‹õûcBžü9»¸¤|êÈž-ˆÏ_r6¥Ö׉•6ƒúzϳ”ÚŒMÊn{Xó£¯Ë} [«?GØKz¯öÍÛܦ‹rañ×»—½+–»Ìš}]ÙÛÔ¨-UޏøŒ×Õöó­W˜¿>uØ6øI›öhX¼Œg¬mÐÖúÃiG_—>+ñ¯Ï¾®¹¶÷iÀðºs^§]v؃yÝ?þyöum‘ŸŽ6*ã³½·ž¶õÃ>üìëÚ+¶¥æÙâf_×–m1Ðz’°x9‡Ho#©š?çumk+p }~öuÞ>\NǬºóðR~è¨zÝ9¯kø´•بºÙ×µÒm|-5ôºÙ×õ¸ÍÞšeÈçl³/ßã7ûºÜ¿û.2‹Ÿ{ÿ·Ú…ýŸ¿~I?ÑÆ·­¶Aª¦¯÷”m€ise‘ »¸ä|ðÒz›¢/Uè’§Áû*²‹_÷Q¼M%ûsÓÈ%9‚ïmqÛúªÀë.Ù ¬Ë/Iê1¾Ž¼M7­ ïŸ:lª}!Ö&7_KjÝE Å…Ë)æÒVÒ+Øx9yÜVmbf5YX܇״.­ïÚ?ú:—öXfɪ“óÌGŒv-ùëýŒm>z¶ÏwDÅg_WÛœ¶=¼Žâ³¯kÃOò#s›ËYºÞ©´±<7\οõ®2I¸iär€-kÂ÷©Õ×û¡³œ¬ ‘mÊ?|9­Ú¬,Õñáf_']tX=üèëžJèPÀ/‡zÛ ß·_Õ×ë8܆™áó§»oµµ˜~¸Ù×å^u©Îï~öuµ«À‘z=ÚZÜnmb<¼nôu]ÞkÉþúèëôÝÑzŒšŸ:léâtÙÅõ,Þ29‡}&Y è—ã=ÀÞš[ëk¿Þ$vɤRÓð»OmBÚP”ëþ\„^Îöé4øÏno{?ßæÓµ~}Ëj8ÿ×UqCÅ}U<£âeU¼’âoÇxuo«í¯ SÝãaq]7TÜWÅ3*^VÅ+)~Æm¬ÍmŽçJê=ûØøCX\WÅ ÷UñŒŠ—Uñú¹ø·ìT©úæ_AF©ÇÂâº*n¨¸¯ŠgT¼¬ŠWRüÍçÛ`óùÇÂâº*n¨¸¯ŠgT¼¬ŠWRü[Œ¶Šÿ 3¿´?„ÅuUÜPq_ϨxY¯Ÿ‹¿I0¥Wwñýö¿þ‡°¸®Š*î«â/«âõsq»¬ßåÚ]Øùîóaq]7TÜWÅ3*^VÅ+)~ê2]Æ=ž¡ß²¸Ì?„ÅuUÜPq_ϨxY¯Ÿ‹ÏòѦ•ÛW”™£ÿ!,®«â†ŠûªxFÅ˪x%Åí¯Ë½†Ê×·ÛÙæÂâº*n¨¸¯ŠgT¼¬Š×ŸÅÿí×ßÿ÷ŸÛ¹m›YïÝ:}ŸÛÎ?ÜÎm7TÜWÅ3*^VÅ+)þîûy?¹íãç¶oÅ ÷UñŒŠ—UñJŠŸs[}ö?ç¶ã÷sÛïÅ ÷UñŒŠ—Uñú¹øenëm½½·ú}n;ÿp;·ýQÜPq_ϨxY¯¤øÔå’o¹õÛÜöüÃÝÜögqCÅ}U<£âeU¼’âvjÛÑkèø>·¸Ûþ(n¨¸¯ŠgT¼¬Š×ÏÅܒ틹mÿÃç¹íµ¸¡â¾*žQñ²*^?¿Ìm¿Êbn;ÿp;·ýQÜPq_ϨxY¯¤øyF°lzv—¹íüÃíÜöGqCÅ}U<£âeU¼~.~™Û–üè¢âÛÜvþávnû£¸¡â¾*žQñ²*^Iñsoiz/nòý·sÛÅ ÷UñŒŠ—Uñú³ø¿ý׿~ýÕç¶ÿúç׿ýúëeðÿý÷åüŒ>ö:>Îøüã¿VV¯3Ö?Y³¹¸ÊöŠ–þd b)b)bbbùÉJÛaùê'Ëë\¸wýøX°2b•oß±„¬‚Xõ[}iȪYÿÇÅs|kpþÁz³ºe b b)b)bbbù7–‡,G¬üe!+#VA¬‚X½ãgÿúׯÓsŽÒÏégÛ¾Zݳ†DÙÓÚK– –"–"–!–!–Ïnbs;jÎ!ËklšÚó¶¯Y±ÊûwÜ%dĪoõUƒ¾ðbuç«»æ,}.?Ÿëš]äž5üËìÁ žëšäž¥ˆ¥ˆeˆeˆ5³>ô­ iGÈrÄš‡«ûÙ«ÆuŸ«¼Gß± V}¯¯ë³]r5ÈcsWX_«¬žèÛŽž´"d b)b)bbb½<Çú©¤ãxîëþÉrÄÊó4ŽÏÍý?Y±ÊÛw,ÁœéšÜâžUßêK³‡¬Ïþõv>¾ôöVöÑ¿‘½©ïo÷KKKËËk®ÊúŽ·Ç>£Ÿ,G¬óEÊUâçʈU¾}G Y±ê·úŠßñ³]Î$?¼÷¹ÉOÖÅêkŒÒ÷9µ¥è²±±± ± ±æú1]z |õjuÏžsô£Ïmܶ•«¼}ÇZãïX«¾×WŽëë³]Ï>sXÁóò¯ëÑÑ×n®`Üþ…üëzÀôž¥ˆeˆeˆåçFGéË4 YŽXS`|Œµ‡!+#VyÿŽžBVA¬o»ò$®¯Ïþu={÷%Oôç|âÍê–õyíþfu˺ˆ|)Ž)¼Yݲ zÇÏu=¿“ú–#Š^­îYs>ñØ”{”˜%ˆ¥ˆ¥ˆeˆeˆ5Õû²jÛW«{Ö?eÕ¯V÷¬òí;æÅ|¢¾×WÖõ¹=^¯ììYÄâþ>¸&wÁšýý#Ýa5d b)b)bbbùGŸ®°]°æzè™’I5deÄ*ïßQãïX«¾×WŠëë³ýûï©sÖ½'Ÿ<žGí~ĶéC­ýìY?db! 颈…ôŽ¡¹~`!½c(³Åû\®Öê ‚ôŽ!æÖ½6_m¨Pk¤w É÷õ÷j'‚ôŽ©¿*,ÅïˆôŽé9¹>æA{¼Zݳ±Þ1=çž…ôŽé9÷,¤wLÏy±ö²Þ1=çž…ô)ˆ…ô©ˆ…ôŽÓsòc~Ì1߬nY‚XHï8=ç–…ôŽÓsnYHï¸î,ÑX·z³ºeåo¬P£¤wœžózG YHïú¿#Ò;€½Yݲ.G€Òؤû“…ôQÄBz‡b!½CüÛ:-f!½C>¯ùÞ¬nYŸýëÍê–U¿ÕWìHïøq†"E±mAz‡\¶gÕV_A|õjuÏRÄBz‡b!½CücÝ¿Yݲ>÷_oV·¬oÇIj¨ÃÒ;NÏyUX\_Hï8ï:xîjcî‚ôŽs{ÿ3þÄ1#ÿº$ÛýÀBz‡b!½ãzº Gó…ôŽóB‡½ëµ«çBzÇé9¯G¤wœ'žõå¡v"Hïý×Õêž5='écaÆÉé§çܲÞqzÎ- é§ç¤ýQù1 é§çÔÇ>˜`L{³ºe}î¿®V÷¬ú^]Áþ‰«Õm,í̇毴ØQ,MP|õš.r—_=û¯[НŠ!НNÏééƒâ½QW«{ÖÔÓ䎅â«gÌçw´˜…â«gÿõ¬¯ ÅWOÏI}ÏVÔ߬nY‚X(¾zé¿îX(¾*†X(¾zzÎK;)! ÅW%\§½Yݲʷw c¢‚â«—ù× ÅWÇy{¤¨=,‡{‡ÅWÇ·£·¡ESQ|uTøÀBñÕq¶á ÅWg¶žÒãäõy ÕOНž­ô«Ä–Ï…â«ãhÅë;J cµŠâ«g¦ïg…ÅñUEñ/½œKÔxì¸Zݳf|UóUã&Šâ_g’õ[ŠyÙoY(þ5='Û£mûs®V÷¬©?öŒm¡î~µºg•÷ïïiVÿšžóª¯ }µºuœgÁì±O¡†ûWÅ¿ÎÔmêk¡–yµºg)b¡ø×™sá–…â_çéµ¥ö{µºgeÄBñ¯óXÜë;Æïˆâ_g–ˆg}iÌBñ¯Ós´®cŠâ_ç½òxGY(þuä»e¡ø×yöï–…â_gFögŸ“Âx¡¢ø—~ÞÏtµºg•÷Ïha\NQüë<­ø¬¯=f¡ø×ôœ×þ¯`¿Éoä_׫”îY(þ5=çž…â_ÓsîY(þuŽå_•p/¬¢ø—~ÞŸóù×动ñŽ¿#ŠMÏYï üüëzMONiaÝ_­îY3~ÿ˜cFçß.¹¹e)b¡ø×ynû–…â_êã˜oV·¬ŒX(þu½ª¢G‹ßſΓæÏúÊñs¡ý˜ç–Ïr ÷P*Ú9=GêCï(áJà_—dûXŠX†X†Xþ±î¯V÷¬ÏþõfuË*µ€«Õ=kzΫÂâçBñÕÓszfáð߬nYò¾¶ ÚÐÕꞥˆ…â«×; oX(¾:=ç6Ž©(¾ªß’±J¸VQ|UËûg æ_W«{Vý¸F¾ZÝÆÒ4}ÓX=Š¥)Нžžs<ÖG¸SQ|õráå ÅWOϹe¡øêé9/MGBНžëÇôX+ÚÜÕêžU¾}ÇøQ|õr«ç³¾âwDñÕ3_yìÛö0Æg(¾jŸ÷G_­îYŠX(¾j†X(¾jŸõ¡«Õ=kî/Üñ‰ ÅWÏÔ„Ïï(ñwDñUû¼?úju»Wñ¼«b¹·àjuÏÄBûWM í_5C,´uzÎ:¦pµºgeÄBûW§ç¬÷<\­îY±P|Õ>Ÿ·z³ºeÉ·ýr1 ÅWM ÅWÍ ÅW í/4_5´¿ÐP|Õ úŽ(¾z¹IæîQ|Õ>ëµoV·¬üQ}³º‹ÁÖoĺÞ'´ÞŸófuËÄBkSÄBk3ÄBk˜3ÓZ~ì¿ú¯«Õ=ë’pzqŽõjuÏ*ßö …k+Ckû¼éíΦ»ù*è£ß¬nY±Ðö®øgmî7ò¯ß§çÜäìúüë÷é9XhïŠb¡½+ÓsÖqßßÈ¿~Ÿž3rÌîáG±ÿ¬ÍýFþõûôœ›\b¿‘ý眞sØc*'a¾4G{W¦çd_½ãÕꞥˆ…ö®œ÷"ß²ÐÞ•á9#'\¼¯ÃÑÞà_«¬òök|ÌÑÞ•é9¯úJq}¡\uÓsÚz;Çg·~!ÿúuñœõ>ä_È¿~]<çž…rÕëÇ[ÊUçþ1–ö ùׯ‹çÈ#ÿꊅrÕMÏy}G¿#ÊUwÆ'^õæªs´wÅ?ïM¿Zݳλnò¸9ŠûžþuËBqßÓ¿nY(îëŸs!^­îYóé´:“qµºg}Þ›~µºgÕoõ³Pܬ߬nYŸõŽ7«[ÖçõЛՅõfõej³•£_W.!KkîB´ýØ<ÿœ¥ýA™Ú߬úõ⛦Ÿ»oÿ LíoVÒúËm³åˆ5–ö’[ö=feÄ:¯¿yœcûy"îÊÔþf%Úæ©¦ø¹*bÍ{u´¶¹¨æŸ,”©ýjuX¿ƒ¯’C– ÖÈB×fiû~G”©ýjU÷²íÕäg6ú?(SûÕª Å›ïmþžB–#ÖyGV~¬u$deÄš»ÄZ'¾©H Y±Î ç¬Í«hȪˆõ²*‡ln*é' ej³J–íÈ5f b3Ñ,[ί¢LíoVýè&{à_(Sû›Uré9Rü\ŽX§’Qªo’SÈʈufAIy«ôÑ(Sû›UÊ­íÁê÷ÊÔþç=ëûÞÖsþs†üej¿Zi[áë!ª²±d,Žæ]­Ï÷¥ˆ¥ã¹öm×ô¼:í'Ëëe¥}EQÝ­„,G¬—•–6:Z²÷ÿA™Ú¯V}f¢é؃¾ej¿Z©êfbžcŸ¨ˆUK¶r´7ýÉB™Ú߬JÚl±f¤&o¥´Ê×¥ˆ5OIJó )?O§üA™Ú߬JÞZçe‹çrÄš»\{t¥uÔq}eÄ:o kÝj’Ÿ§7ÿ LíoV¹Í¾Zsü™=öÊÔþfÕw ˜¤Ÿ_ÿ LíoV­mW?j0'ïV‚Xçü~;ܫ祈¥—çjºŸÑ‚‡•!֜ߗ­M'‰ëËËÏw”¾ùÃCVF¬óV”î)Çu_ërÊ(¾)çaUërofë ƒS Pfû7«6j§½?o®úƒ2Û¿YiKkD²±f¤9mÕŠ.X†XvvêDÜþ ÌöoVmî›ÛjÛbVF¬iö6ó-Rãw,ˆUN…¥­ÕRŠY±æ)ÜÒü¾’?Û6Êlµ²£´õã®?okùƒ2Û_­Ú¢½Í™DÏ¥ˆ5²ì”V_EƒláPfû«•÷þ¾ˆåø±|£KÈ*ˆ5²ì´ö(Iê¿cE¬:ºœ6vXr×(Ö!(þufÑ´6å¨_E™{߬Úü²ÍüçíoPæÞ7+ѶL³ºÇÏ…â_ÓªÍpö-™Äõ…â_ÓJ³ßja\NPüëÌ¢){i+"Ë! Å¿äÿjk¾"q}¡ø×´ëûIK ã&‚â_êum%ºŠY Š «|è–¥¤Ÿ;þÿ Ì½W«\ëV÷’SÌBñ¯aUJiýD’#Œ¥ ŠM«´kß Ç™Å¿ä²Ó²Mçr{ÿVÅzÆÄ=þ…2÷^­šÇo= aÌJPükX%õ­µî(2÷^­ú¹Gñ¢a FPükX¥æ÷)g‰ã_‚â_2om=¶žŸíg–Š?(sïÕªa¶¶„‹ëÅ¿†•4¿ß5µ&²PüKæ­­y‘ õÊÜ{µJm¬=öÍ£QæÞ«U*{››´ñ1Œ ŠMÿÊý¿²ˆçŠMÿª¶µ¹Np›ì”¹÷jÕ¾àæU8f%(þ5¬RÕMŽr±m”¹÷j•Ú¨mU=‡1>Añ¯Ó¿êfmz²x.ÿšþÕ}¢i%Œ ŠÉå¬ÖS’…â_×,ÀG{É#~.ÿšV¾oGõ=…±!Añ¯iÕú¯Òfr{üŽ(þ5­ìK;4Œ= ŠM«¾û£­·kü\(þ%—pí-ÅÏ…â_ÓÊÚ<Ç5ةԣ‚â_§IWöƬÅ¿.·|ôI@ô»ŠY¦Û¼p—]âçBñ¯Ó¿Z{lCmgÿ:ý+µ™¯ä >Ñ­Püëô¯Ö†´j0ŸèV(þ5­ÚªÃëa×=ŠY¦[­fv‚2¿Y¥½oK±@·B™Ç¯Vµï58õ÷e¿Z¥ÖOìIuñŽ(þ5ÇÇ£¶9Ó±/X(þ5¬Úm=ÊÌ}Qæñ«Ugeïy€CŠÍñ±ù—XÉGüŽ(þ5ÇGÍmδÛÆ:Å¿æú1Õ6Özõ#d¡ø×°*©=W çÑ(óøÕªôÏ’"e¿Zµ%Gë'¬Æ1+Añ¯a•÷æµ_ ²PükX¹ôÛÌ,-X(þ%g”cË»þÌ„öe¿Zå£ÇøÚ’/Œ3)ŠY€»†®aPæÞ«Õ±—6—Ó#ÞϤ(þ5¬j›ß²PükXµÉÒæ’SÿRÿVÇÞo)Ús‰Ÿ Å¿†Uµº5‡°8ö¨(þ5­ŽÚwòîãSÿVGׇ¼-ÓÂø—¢ø×™å°-®–qEñ¯3Ëtj½–0–¦(þ5¬ÔûÉìœ5ܳ¥(þ5¬¤¤.#›Ç,ÿVÒo“m}E/Tÿ:³ä÷˦4jC(sïÕªÍÛ8´Úã¦(þ5¬ähóÂÖ}Åq&Eñ¯aõ8¹ÑH%Œ›(ŠM«Ö¯zµ(V‹2÷¾[¥o^©áÞ(Eñ¯k–ÃÒ§«ñs¡ø×´êýjµô9(sïÕêQ÷žŠÄÏ…â_Ã*µQèØSuáÊÜûnÕêþØ5Ž )ŠM«6lÏicCŠâ_§UÖšiÏQÿºfÑ´´k c|Šâ_§µº—â‹çBñ¯i¥Í¿vöñ¡Ì½oVm¹]÷¬qSQükZeßê‘jŠY(þuÞòñØÓ,ñÞ(Eñ¯iÕÖ µÕÖîRÿ:ÇÇë°üóö݇ŠM+O}Ýá‹wDñ/½Ü‚¥Þ–Váž-Eñ¯3K~{.-EØ•¢ø—^â_®u¯aŒOQüëše:å6ÉŒ¿#Š·0´uG›{NQfè«•ä}{,cŠ +ñ¾g¾& ãrŠâ_ÃJ¼Í£sÉ%Œ )ŠÍù—ùVÒC(3ôÕJúÊÞÆÏ…â_sþ•´MW÷#КPfè«•ìmùØÚ¶Æ,ÿšó¯¶NÓ’’‡{}Å¿†Uîãc­^ÂŒ¢ø×°Ê=ƒéžv‰Ÿ Å¿†UÙkûŽ»Äû™Å¿†UÙó¦mò{Ä,ÿ:ç_µUØQ5®/ÿ:×mN.¥Ô0–¦(þ5¬r©[²”÷pŸ¢ø×°Ê¾ÐJP_(3ôÕ*×6¦IŠæL(3ôÕ*ÒÖVmÑWCŠ «þŽÍU‹…±4Eñ¯aÕý>I@™¡¯V¹mé^r\_(þ5¬r²6n{ÛF™¡¯V•s›€Å,ÿšþ%µÍ1Ãïˆ2«^­äy2{÷YŠ +éšNØJ—3ÿVÒæ¾’ëÄPfÕ7+i‹«¾P cV†â_Ã*µ6´ç${K3ÿVí6é—øÅÏ…â_êu[Í}RÈBñ¯aÕ}âPYì2ÿšV­¾ÊžŽÆ¿ Å¿¦UçGMa ÆPükZÕÜu¾#Ç,ÿVmÄîsÌšÃx¡¡ø×ô¯½}ÇêVÃý_†â_ÓªôS¿^÷˜…â_ÓªÕ—–í÷íV(þ5­ªo{Ùµ„qCñ¯K†ÜÞ.ÎRŠM«TÚwôhNþù×Õª±rM‘Žüù×ÕJÚ¼°&«alÈPüëÌÛ÷=Ú¾ÇÏ…â_§•ôÁÖïˆâ_Óª½cö6+ã…†â_v=ßqÈQón†â_vîníQîÙ2ÿ²Ëù¡ÖE׳PükZIns&­%~Gÿ:ý«­EÕk|ÆÓPüëô/ÝZŠöœv+ÿ²óüvŸçx‰Y(þuõ¯£-ü4®/ÿ:ý«Í ÷ÜQ¬ÃPüë´:ÚÙ"mîò¯7«ÖG·¹¯‡±!Cñ¯‹UÙ›ÈV(þuZµq;úÕ_ȿެúÏZjxÎÐPüË.·t· ÓžãwDñ/»Ü"³ëí³ú…üëͪÇDw±0Îd(þ5­zD´/‡ÂxŽ¡ø×´j5Ÿ[Ÿï³2ÿšV}¤=v÷3ŠÙõø|T ÷lŠV=džY€V(þ5­¶œRøœ¡ø×´Ú¼¤ýø\¦¡ø×´j#­ïyã&†â_ç-2Çæ‡éžç3ÿºÜòÑ'廇1Cñ¯ó™ž%¬µ¡²Püë¼E¦l*­òãúBñ¯iÕ÷ µ2>/j(þ5­¬Íï}?R¸÷ÎPükZÙcHÔç [Þ­TûDdz†â_Ãê¹ ÏÃt+ÿ²¹¿°öLOÑYðn…â_ÃêyöÔJŽßÅ¿Îõã¾U‰ÏxŠM«Üãr©Æ{¶ Å¿NÿzÜÒågB7:¼Y•¶æ3É9Üãf(þ5¬úz{¯%Ú»‚²_¿Y¥]{Λxߣø×å&ñ-è(þåsÿWé÷rh Ï?:Š +í96Ú;.ž Å¿|îÿª[ê[ÉÂø—£ø——SG®G±8^è(þ5¬¤Ÿo_ÑÃ8“£ø×°’ª=³_m÷Ê~}µ¯[†,Å,ÿšþÕ·û6ßcCŽâ_Ó¿\7õZã¼dŽâ_Ó¿üqŽu‘gËQükX5NÏáRãØ££ø×°Ò6Ÿ0ÏŸËtÿVmÚÏ cŽâ_Ó¿¼lùØS c0Žâ_Ó¿ú9°lA6ç?(ûõÕJÔz^Ÿç³rÿ:ý+õ³ºû‚…â_ê³,·‘-®/ÿšýWÏëS÷T½dŽâ_³ÿzœ;ÉEÂs¬Žâ_³ÿzé÷0žã(þuZ•~ÏK³rÿòKþ/IYâs†Žâ_×Lí^r÷39ŠM«£ÍsJÕ8Æç(þuο¼U—•î%sÿºÜd"ýÐu ciŽâ_§Uß瞢¸/Ê~ýf•kÏÅsìa ÆQüëœ]kZìrÿšV}¿oµçÙrÿr½hmåçsÿòË-·.¶Ç{£Å¿Þn2ñ¶`ˆë Å¿¦U*[Òš=Ìqæ(þ5­¤¯ù|?ÂØ££ø—_ô!mSÌxÿ—£ø×´ê7ÝçtÄû†Å¿N«üX¦Å{£Å¿Îþkos¹#Åy¶ſΛ&t3k=XÌBñ¯iÕó´%w  ìêoV¥ß>â%Þ—æ(þ5­rßÿµG¹‚Qvõ7«6gªýTƒqÿVúÈ…Ø–Vá~&Gñ¯¹~,}/FÙ5~.ÿVý¹ö¶ˆL1 Å¿†•&YÓéV(þ5ç÷ª}^˜S¸ÏÊQüë\?ö}|¾kÌBñ¯9¿—Üæ…m2ÆÅ¿æü¾Í夽è£/ü?ÿsµúïÿü÷ßÿLûØQ÷ý™K?°’}¶Çžº¨ÄVú°J=GXµcõ‹¶OÁ6•ý¡Vþ´²Ö›”—ÂòÝêïÿOÿõˆ“ïá/6«×Ó·™è^Ô¤Àêùô_~ô¼>O]!°z=}Ï[Ò·Ylõzú¯6Ôj‰Ÿþ_¿fÝ·ÕœK«×ÓwÝ½Öø 5«×Ó?«ìðkÔ}~Éò}²zRa ßñoãéÝû™ŸçÍÕëésßü‘ßño³î­÷÷ñ;ö=gû×Up^X§ï“€~×D`Õó«¿ü«+ÄúíÛs5÷Ýê÷|ú¾¯£u÷‡ÄV¯§ÿj½‰/¼ð÷|ú^£’—VÃïóßÚøýöôÍÅcÇw«žúeÕ<§÷9Gl%g}µb[~ß^ÀY«ñôú¸;<|ú¾f½þâs§øw«_óé[oßQGŽ­.OŸZ‡b±•^­JX¿.OÿüÉ[ùK£¾°çµ}±ö¾ï¦[½ž~³š“?sÃVãéÛÏå¶b]X ¿ï×Qô±•_ôC[+Šž«gMÝŒ|•ì§:_kX«}þì kÚsX«]§_[Dm»ÏæF­¶©ï¢'ï99ÇÓ÷ò©zl5úûò˜¨ÆVóéSOg£‹_´Ù´9Øö9}®°ÝEÖnüøŽÿüýWŸ)¤¡§5·)ÉV2¬RD“.¬tX=."_YbùÔùúÝ«§ÎÓŽ£Ga³ «24Ö£fù9xYÕ§U[Iëáa}õ¹I¨©üüÚ/+™Ñ‚Þ:da¥“Õ·ÕÚÂÊ˧ãxª)/¬òÜiiåÈ«_,ó¹º6·bÕóé‹èâ;¾²¸´§'¯ ÿzæg©=2ß÷¸¬¬ôiÕ¿³¡—Õ£¾ÚTµ­j¶ÕsùÓªO'^¹e"«üüEmGëäVVåɪý¹¬,|õ™»¤öÛ€šM®q­>ë«Ç¶Ý­–…>ë«GtSJÏ{Ê"«—=’°s¦—•=Yý”‘îK+Zõ\IÕ/æÞû¥N«w,ƒÕº¸ª+«ú|ø6Ym#-jõuJª'BÜòÒs^矼ì­^Óá +VÝ+J]XÙ°j.]ÒÂ'^§‘<çVù²òœ×9£fÕfs»,|õu‚ȳwõ$•…UVÒÏh\«¯úJšzö]ô&:ó¡î=AËâk¿ê«±rûÅ}eeÕóØâk¿ê«±ŽGFÑ…U¬ÒÏþ/|õU_Õ3dî‹þëU_šhSòŨðÜ…”wÁ|âe%Oñ¡õ9=‰æÂ _;‡ò#YŠ…}t·²§‘=Nn”…ç±|Xµ‰BÜ“w«öœZj4YXå¹Íõ(9­¬ zÇJžKO}¨¦hßãÓê¥Ù–ýHû¢¾T‡•g{Æs"+Vâá-‘O«ŸðÑÕ/æÁêa9_YôŽ•<×k²ú] 5Ú—ö´’á÷ÅüXµŽ×Ÿú½ååZÙ”æS¶cñµmÄWûy÷e{´³=¶ªX>}AïXÉs½¿ž´o¾YY ²;Óêß½ù´²×V¸fTêªm¿™fÕ¯Ó rü?­ò°:R›¬ž« §¯ŸëÔ¯{£Þw‰}³:Ê^Ã/tª”ŸX‚XŠXŠX†X†XŽXŽX±2bÄ*ˆU«Ök|¼îª X/+k++µ(ƒÃÓJKKKËËËË+#VF¬‚X±*bUÂzíe?fÀzYõ›îw‰²½=­±±±± ± ±±±2beÄ*ˆU«"V%¬×ü뺓7` +Í}gW^øêk–ö‰%ˆ¥ˆ¥ˆeˆeˆåˆåˆ•+#VA¬‚X±*a`ÍexÀšV•Žpæ~ª”ŸX‚XŠXŠX†X†XŽXŽX±2bÄ*ˆU«þ`E§f<'ûn¹,¬Æþœ¶”>j^±tIö`ÕËÊæ/¦hgÄËjÆst×RVVyþ¢ïÁЗՌ縥xWp·ª3f•ú5¤‹siž Ð쾨/™û1µ/Yõ5öËí}†ìuõ‹s?æž4Éâ_3¾ÎJ~èêH‡fÚ´=ÉʪŒW”öµÃ½ÖÝjîÇL"»¬N”¼fî]ss“ë5gÒcKí¹|Q¯ÙPÏud·Õ/Ž3^¥QM‹/¤~®~_yN#«z? ÚFwY2×Ûm =lÅšëíþ޹.X2ÞÑ‹-ßqh'{Ï)^–Ï¥ˆ5×ÛmÒ‘dQ_C‡ùÀš·Hl=æ¾øŽ§ZÓúœ#TʺÕk%½·^ÎUWÏõ´ªû&V뎿9À§ïXÐw¬¨¾*©¯±ù¦u:*{YÔ×Ë*·ÞDëá‹úñœV«5?ó)D,¬báZO«Ï‘Òí¢ÿzY}bÙx®cwÍ‹ºY}bù`Õö¹ËŠuzaêG]¬qKo¿¬á9ëˆX¯þ«µZµ£¬ê¾ ïXÐw¬¨¾*©¯1ÿÊÍ£ÓÒW‡Õcÿ}”¹÷i%ç1МE?¬òc?ù’¥ƒÕóF­Úö°úÀ:•Œ¶Xx̶#–!ÖðœÍµM­}ô°êó¯ã8ãã˜=ÖíðâÇêÇðm¿«û‚¾cAß±¢úª¤¾|žçkëm© ŸVÏ­>GZ°džÞ¬{Õ…ß¹oWÁóQó‚5Înm¥­~ë¢/VX6XÞ&Û«~bX}`ù°Úw³ºøŽg.´¾ ZÖ}“mm´¬ž+}î¹;ᢟð‚¾cAß±¢úªë믹¹ÞZj+é°=žV}¬í}´.X2æL}è(Ç‚õ´:z¤æˆnºZͽ+‡îùðKë¥d´¶­þ<ѱ ±||bמÂaÁzyá#»Ôá¾`½fVõqòÿXÕWOôL"‹~â5sÿô úŽÕW%õ5o!Ür{®²xÇ3 ë=3΢ ™»n{keÑmîgz$KZ±Æ^²67IÅßѱF¼Õª[±ËËç;æ½ø¢î¯õmK ÿºD‡}¯¾hC6÷3¥º˜“_n‰ûð úŽÕW%õåseØ<ºØâÇ)ÜÖösÅ’Á:ÔíX´¡qV7?N•.Y/mî©Öä…¯«¬¹tïWý­žËËÏ=§mù¸;†UïöåœÉçú±GWË¢ ù¹çt/kVAß± ïXQ}ÕõõûÏ%L=Â9ÓiÕF…‡«®X2¥ÌôÊï±±tꢭ'瘧Õ'Ö\?Zi®Z,C¬™§¦õ9{]Õ—#ÖËsÚü¾”ýXÕWF¬‚¾cA¬Šê«Öз}ëémñ¯qS[.X3²•Ôs8øý~÷†5³ÌnRJ>,E¬Ù:ÕºbbÍÈV?ûPu=ˆ{ÃÊ3ÆWD—õ•« ïX«¢úª„5oߎöÓ¢¾ÞâÖͬé_EöšW,A¬SYÜ^‘šˆ¥ˆe£î{¼0­X†X>cÈ%Û¾è'Þâ®YÓ¿Žæ_ËúʈUÐw,ˆUQ}UÂ;-ÛRHÊî Ö¼ëk{$Ú;¬×NËÜ73]´Çy××=ëµÓ²ôÙmõŽó®¯{Ök§e.kkm{ÞõuÏzí´t¯næ ÿšwEß³^;-Mó.¹.|bÞE~Ï*è;΍¾*aÍü9ýÖ­çëÌs7ÖŽ™{ÚÔ’­žë’[æŽ5ç÷ýŽKYÔ׈ß` Z›ôíL‹þ~Äï?°æü^³iY=—#ÖT~Ší9ÔùN«O¬‚¾cA¬Šê«~dõ¬¶ó$UÞI^X͘BÙÕtÅ:O?Åwž=­æhµ§EŒ¯[ÍÛ$Ûb!…‘šn5G˜ÖaJ¨wt«‚Þ±’ç:ç«]w—•ÕTbM¤‹š©±æ¬G^<ý9{Ü¥H«íVsÜn¹Fɺե¾t¯+VAïXÉsÍ™Uîyæ…çœ3«l ¬[j³•gÆ×Èjú—{Ïñ½°Bõ5æ&}EqD7Ê?­ zÇJžkžÜè»$-žkžÉè»sj^YÓžŽ~œzaecÕ"ÑÍO«qB¤Ԝ=Ï>hµêeQóTÃý;Vò\>Ûã~”š¾êr~íæ¬‹Àg{´šÒ¾úÅ™j«=ZµËÏødqY|mŸ±ÇÞþÓâ yAïX?>ׯÙß÷\oGIVVãdPle³…ÕË¿ÒQ[›Í«_§yl¯Õ“ÿ¿Îþ¾§ Íñ™ë_³¿ß,õûÑÕ/ôŽ•<—Ì™»ö-ia5çäZåÐÅsÉœm«úîea5çÑ=_]YͲ·‡·ÕsåÓÊK˜Eà×ÙßxÇJžKg}õœj«çšùW·žúXø—ÎújË4YÕªÎúj«9µÕsÍýäÞ¯F<VS1ÈmÂg+«‚Þ±’çšçùöÔ-/|užÔëVšWV:ýÞŠ®W¿U`õ\½c%Ïõêï·?Zµ…Oøˆœ&³ž™aõj¾[[v¤…úhµç ¯+Ö«=Z©‡éªÇœgu­Íö´hi¯þþÓ;ÖÏÕïšI}¢[ ²RdeÈÊ‘UFVYUbuÎïç­;‘• +EV†¬YedUU%VšÎ3ž¯û‡"+AVЬ Y9²ÊȪ «J¬F¹‰)²d¥ÈÊ•#«Œ¬ ²ªÄjô÷—;©"+AVЬ Y9²ÊȪ «úѪßΕæyÍG¨]¬òö8vb Ö<¹Ñã+á¾Ç‹ÕÖÌ5Ð&Lñ~̋Ֆ§–Û¹bbù<“aŸ¼X}`å±&&áY·‹ÕVAß± VEõU KæÉ #¥çGëº?GJ¨•w+¬>M ÷uœVŸX:ö×Ö@Âý_§Õ'ÖÌx‘R5Y± ±æþ/³’–ïèˆ5Ïíý|íê¹2bô bUT_•°ôÜ_¸›ÖEVºÕ_Õ¹¿ÐÔJxFêbõ¥#sI?4ã+–"Öô/ÉIÒê ±¦¥~¼vñÕkfg)žv_|G͈UÐw,ˆUQ}U²©õÖx,Xï‰ò˶`ªîQ$çKëÌ'Zw7Y°±.ùD[ƒ\øÄ{¢ü%kf õúºc)b9bû¿ÚPk‹6ôž(É*è;΍¾*a]ößK)«±vìâ¹Ùës½ëþØŽ]öÅàÜÅsËÒ¹s­ j‹¹Ü¹‹ç–eã±úW¬‹~bìâùÀy­û: ‹64¬>°ò|.Y²2bô bUT_õžõ?mÖÞ¯ðÃJ•"+CVެ2²*Ȫ"«Y½ßǼ´JÈJ•"+CVެ2²*Ȫ"«ù*ª{Au/¨îÕ½ºÔµGAíQP{ÔµGAíQP{ÔµGAíQP{Ô%1Ÿpd•‘UAVYÈWQÝ£ö(¨= j‚Ú£¢ö¨¨=*jŠÚ£¢ö¨¨=*jŠÚ£¢ö¨¨=*jŠÚ£¢ö¨‰ù„#«Œ¬ ²ªÈê@¾ŠêµGEíQQ{TÔ µGCíÑP{4Ô µGCíÑP{4Ô µGCíÑP{4Ô µGKÌ'YedUUEVòUT÷¨=j†Ú£¡öè¨=:jŽÚ££öè¨=:jŽÚ££öè¨=:jŽÚ££öè¨=zb>áÈ*#«‚¬*²:¯¢ºGíÑQ{tԵnjÚcFí1£ö˜Q{̨=fÔ3jµÇŒÚcFí1£ö˜Q{̨=æÄ|‘UFVYUdu _EuÚcFí1£ö˜Q{,¨=Ô jµÇ‚ÚcAí± öXP{,¨=Ô jµÇ‚ÚcIÌ'YedUUEVòUT÷¨=Ô jµÇŠÚcEí±¢öXQ{¬¨=VÔ+jµÇŠÚcEí±¢öXQ{¬¨=ÖÄ|‘UFVYUdu _EuÚcEí±¢öXI{¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(H¤? Òé‚ôGAú£ ýQþ(HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨HT¤?*ÒéŠôGEú£"ýQ‘þ¨H4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhH4¤?Ò é†ôGCú£!ýÑþhHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þèHt¤?:ÒéŽôGGú£#ýÑ‘þè@ü·¦ô¯_ÓàÿM{ûY ²RdeÈÊ‘UFVYUb%¨¾Õ— úT_‚êKP} ª/Aõ¥¨¾Õ—¢úRT_ŠêKQ})ª/Eõe¨¾ Õ—¡ú2T_†êËP}ª/Cõ娾Õ—£úrT_ŽêËQ}9ª/õõûßÿ3ýó5‰må8ŽZ›Õ¿þ¹²zþ3Y±±±±± ± ±±±2beÄ*ˆU«"V%¬—d{ä-5ÖQbÖUØÕt¬X‚X‚XŠXŠX†X†XŽXŽX±2bÄ*ˆU«Ö»ùèåÖ›•o¶` b b)b)bbb9b9beÄʈU« VE¬ú™%ÿ|­’·]¥ûê±N«”óè1#– – –"–"–!–!–#–#VF¬ŒX± bUĪ„õù’îǦKÖe|L¥è¶` b b)b)bbb9b9beÄʈU« VE¬JX—‘OôØã«»/X‚X‚XŠXŠX†X†XŽXŽX±2bÄ*ˆU«~féù¾ŽÇZ!öÕÓªûêîÛŠ%ˆ%ˆ¥ˆ¥ˆeˆeˆåˆåˆ•+#VA¬‚X±*a½"›?HGŽY/++çŠ"b b b)b)bbb9b9beÄʈU« VE¬JXc|´Mn|õe¥iÛ»QZ°±±±± ± ±±±2beÄ*ˆU«"Vý̲÷Èéb-:­¶’?X,A,A,E,E,C,C,G,G¬ŒX± bĪˆU K‘éˆbîϹZ­× O+A,A,E,E,C,C,G,G¬ŒX± bĪˆU?³¦òóå+­éj•äŒèF,A,A,E,E,C,C,G,G¬ŒX± bĪˆU kô_õ9Š.X×^®mÁÄÄRÄRÄ2Ä2ÄrÄrÄʈ•« VA¬ŠXõ3ëŒÌ?=õðˆuFùóéÑKKKKËËËË+#VF¬‚X±*bÕ¬ý:W†â«½ÖW«×ŒÏ·KKKKËËËË+#VF¬‚X±*bÕÏ,ù¿ÿi¥A_ø´ÄÄRÄRÄ2Ä2ÄrÄrÄʈ•« VA¬ŠXõ3k*?[>W?XïúPkË‚%ˆ%ˆ¥ˆ¥ˆeˆeˆåˆåˆ•+#VA¬‚X±êÖßÿö-~/ì…½Z¹¯ö’=­±±±± ± ±±±2beÄ*ˆU«"V%¬ëÉde‹YW«\ò¶` b b)b)bbb9b9beÄʈU« VE¬ú™5Ožû#Ši§U2»ñÕyòìKKKËËËË+#VF¬‚X±*bUÂzöL’öSXO+mVåiÁÄÄRÄRÄ2Ä2ÄrÄrÄʈ•« VA¬ŠX•°Þô¡#k§U:–{1þö]Z³±±± ± ±±±2beÄ*ˆU«"VýÌÒ·ù½iÌšVõXjå»èCX‚XŠXŠX†X†XŽXŽX±2bÄ*ˆU«~f};ß¡[ØN«”^g–,A,A,E,E,C,C,G,G¬ŒX± bĪˆU k¬ Ëi°ôg#b b b)b)bbb9b9beÄʈU« VE¬ú™õmg½Ç}á´r9WKKKKËËËË+#VF¬‚X±*bUÂú¸ÿþjõê1ãXصúÄRÄRÄ2Ä2ÄrÄrÄʈ•« VA¬ŠXõë¯?ß3¦`¯õ›•­´ò§• – –"–"–!–!–#–#VF¬ŒX± bUĪ„õùò~œQŒ€ußïU¾úù>²±±± ± ±±±2beÄ*ˆU«"VýÌšñû>ÌŽUæÖ´2YÅjŸV‚X‚XŠXŠX†X†XŽXŽX±2bÄ*ˆU«ÖÛγ-f=­R^ÆÒžV‚X‚XŠXŠX†X†XŽXŽX±2bÄ*ˆU«–ÍøÄb/ì›Õk/†/X‚X‚XŠXŠX†X†XŽXŽX±2bÄ*ˆU«~f½ÇïC-àj%å¦/|ßß°±±± ± ±±±2beÄ*ˆU«"Vý̺d^Zíµ¾Zˆ®,X‚X‚XŠXŠX†X†XŽXŽX±2bÄ*ˆU«Ö˜¥U.±7+¹Y‹ž‘ù,A,E,E,C,C,G,G¬ŒX± bĪˆU?³¾åÏ©[ÈšVj7s¹oùsÖ,A,E,E,C,C,G,G¬ŒX± bĪˆU ë-2o–ùÃ*ù¶ðÕ·Èüš%ˆ¥ˆ¥ˆeˆeˆåˆåˆ•+#VA¬‚X±êÖïKäTt¥üþóý|ZtÈïKäôKKKËËËË+#VF¬‚X±*bÕϬÿ’´Ú {µ2]õ…¿/ñ¯O,A,E,E,C,C,G,G¬ŒX± bĪˆU?³@þÂV)gÝ~ÿ!ù Xݰ±± ± ±±±2beÄ*ˆU«"VýÀúÏÿ˜#_²¥V~±êYx{­ŸV‚X‚XŠXŠX†X†XŽXŽX±2bÄ*ˆU«~fMeñ+­ö’½Y½"nÇ‚%ˆ%ˆ¥ˆ¥ˆeˆeˆåˆåˆ•+#VA¬‚X±*aé»ç”˜uÆ'¦GG,A,A,E,E,C,C,G,G¬ŒX± bĪˆU ëc~¹«Õ&O‡ÖKKKKËËËË+#VF¬‚X±*bÕÏ,ý|ÇÕjÛu±—ÿi%ˆ%ˆ¥ˆ¥ˆeˆeˆåˆåˆ•+#VA¬‚X±êg–}%b}³JÁ^²§• – –"–"–!–!–#–#VF¬ŒX± bUĪŸY~ÑËr.÷-Š!¾b b b)b)bbb9b9beÄʈU« VE¬JXAæÞ€eŸöO<­±±±± ± ±±±2beÄ*ˆU«"Ö§ý¿þãûùŽh¬ýi•‚µèÓJKKKËËËË+#VF¬‚X±*bUÂ÷+쫽ŠW«¯qâmÁÄÄRÄRÄ2Ä2ÄrÄrÄʈ•« VA¬ŠXõ3ë[ätá«ß­lÅÄÄRÄRÄ2Ä2ÄrÄrÄʈ•« VA¬ŠX•°ù×°ÒÓ£#ò¯aõ…ükX}`!ÿVXÈ¿†Õò¯aõ…ükX}`!ÿV÷,Cþõfå:ÿ…â«?­Ö,ä_oVkò¯7«5 ù×›Õš…üëÍjÍBþõfµf!ÿz³Z°ÍïO+YåJù…â«oVXŠXŠX†X†XŽXŽX±2bÄ*ˆU«~füÑ¿¾Ç¿’Ǿ òGÿúÿºa)b)bbb9b9beÄʈU« VE¬JXã_¿‚ø×Š%ˆ%ˆ¥ˆ¥ˆeˆeˆåˆåˆ•+#VA¬‚X±>å¿ÿçÿùy@+¿Z]3ªD,A,A,E,E,C,C,G,G¬ŒX± bĪˆU?³¾¯Ó±¦UJ«µÂÓJKKKËËËË+#VF¬‚X±*bÕÏ,°?úju=q±±±±± ± ±±±2beÄ*ˆU«"VýÀúÇ?¿ë§U îyZ b b)b)bbb9b9beÄʈU« VE¬ú™%È¿¾YåÍ,A,A,E,E,C,C,G,G¬ŒX± bĪˆU?°þ뿉¾}µº®X#– – –"–"–!–!–#–#VF¬ŒX± bUĪ„õvÿP”+åbÕotð8×ùÓJKKKËËËË+#VF¬‚X±*bUÂòOñÕ«Õ—­bµO+A,A,E,E,C,C,G,G¬ŒX± bĪˆU?³æÎˆW¦”#ôÕsÿ„ܳ±±±± ± ±±±2beÄ*ˆU«"V%¬÷›iÓ³^Ve¬Fƒ\çO+A,A,E,E,C,C,G,G¬ŒX± bĪˆU ËÀüþ<Ÿ¦iqéi%ˆ%ˆ¥ˆ¥ˆeˆeˆåˆåˆ•+#VA¬‚X±êgÖ<tÛZåX‚X‚XŠXŠX†X†XŽXŽX±2bÄ*ˆU«~føý›Õ%£]ÄÄÄRÄRÄ2Ä2ÄrÄrÄʈ•« VA¬ŠX?²þï_ýí¿ÿö¿þŸÿ@&ÉÖþÁ DyLP-1.10.4/Data/Netlib/config.sub0000755000175200017520000007772611405216053015144 0ustar coincoin#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-04-29' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # 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 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # 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. # 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) 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) os= basic_machine=$1 ;; -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*) 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 \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | 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 | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-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-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | 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-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | 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-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # 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 ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; 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 ;; cr16c) basic_machine=cr16c-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 ;; 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'm not sure what "Sysv32" means. Should this be sysv3.2? 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 ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; 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-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; 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 ;; 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 ;; 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) basic_machine=powerpc-unknown ;; ppc-*) 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) 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 ;; 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 ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; 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 ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-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[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. -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* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -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* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -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*) # 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 ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -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 ;; # 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 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) 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 ;; -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: DyLP-1.10.4/Data/Netlib/degen2.mps.gz0000644000175200017520000004036510430174061015451 0ustar coincoin‹K®9degen2.mps¥ÛŽô:sžÏ øt=÷äáH1ñoÃNÀ÷!éî‘Èb7ßb‘\GŸÖèiqÏb±6ÿøý×Ùòÿí_þû¿üCÿó?ýÇ¿ýßÿüçÚþ±mÿvüÏŸçÓóámÛùjßÉ¿òïóùïçOýç¹?ÿ³ôÁÑO}ˆäA)ú éý5E@U?ȃÞéýiMZÓRkúMZÓŸ6”1”1´l†þ€¥Å±ô5GÿâhÙœ¡ô£Ž~ÔU¿F?êh©=ýD?šèwRõýN¢Ý˜èGýh"}ú`èC¤”Q”¡ƒBÑ®W´ƒí`E;XiúQÚÁJW¿F‹cèOúÓ´·•! ¢h+kéeh+Ú§ÊU¯Ñ²ÑnTž~ÇÓ²yúžÖ'ÐÚ ”@Ó†×tfiÚ¼š¶¨¦-ªéð×tøkKZmM« #-A¤?@¬¦ÖÐ!fè¨2ÎÓÒˆ†¶Ž¡­chƒ˜àèýµHjj舷´8–Ž^K›ÊòQKûÔÒ±žÔÔúZHq,mGÄÑiæ4ùGW$g)CËæhƒxº¬{úÓžN&O—NO'“§SÆÓYâé*æé ðt©ñ´á–þt 3+ÐÞ´ÝB ?èG#í¹Hû'ÒÉ#)N¤ëh2äµdI»%2F]-ŸË[õ`èƒ%dˆ)ZSwM }ðô!²<,} Œ¦ßÑÕ_译qð|HäÁÐïAñ| ¥®ê(((CºD%ZêDä•Èö¡R ¯EM,} •K÷4;ÿãÙUæ—>äÁÒ¿XúGÿâè_<ý‹§ ô/þ%Ñ¿$òµÿÒúZjEK­h -¢%P±z ¯Ñâ(ZMDÓÑô£š~TÓjZmMK i 4-¦%0´A m£è_ý‹¦Ñô/´ mDCkjhM»„èï_ö—>¹êÉWO¶âê_ñõožÕ›Õ“/O¶úž­¾÷|ŠÕSªß<ª7«§T=Õß‹åÉ]§<ÕSyÓWoúªÍ|U_ýНÚÌWmæ?¿`«'Òf¡j—PµDx®ÛÕ“®ž\õTýÊßTÊO±úiÝPµçë{Õ“®ž\õTýŠ ÕS¬¾à«Ú¦³ú^õ¤«§ª•Tõ+*TO¤ßSÕ©ê¿Tµuªú/Uý—ªVJUÿ¥ªÿ­ŸÚé÷^O¾zŠôIíÕ“ªÞ,eyÿJõêWª'UsUÉBõÏêWÊSµj¨jexžö2²žO´¾ªƒ¿öòfõ¤ê§òõHgãëÉVO®zòÕS¨žÊL}ÿJõäª'_=…êÉT%³Õ“«ž|õDÚ:Uí’®­1?Ùê)VO‰>éêW´®žªßÔ®ú•2‹ß_¯žbõ”è“Þ«§êW´«8[ÕÖUOé¬~%?éçz]êðz2ÕSùÞûoÕSý+¥tµzëj½ÖÕz­ýWžBõ+Õ*¬«uWWë®®ÖÝ×S¢Oz¯žLõTýŠ®8Sq¦* m¥PÕ/Ч«µ\Wk¹®Öòw©ªœÕSõ¦®Þ4Õ÷ŒªJfêÖ=«rVOºzrÕS:«’UO¾zªÞ4ÕLYmtµÚèjµÑÕª¡«Ù¯«]FW»Œ®v]í2ºÚetµË˜Î‡×“©žtõ¦©ŸrÉŒª~EUœ¢3ÇèêMMkôþÛAŸLõd«§ú7K+C×ä×S¬žRõTÖÝ÷›ÕSªžBõ…ÒÓ¦’#ŸOdwz=™êÉUO¾z ÕS¬žª/ÐR[:ãÞß«ž\õä«§úWbõ”ê/œÕ¯”'Wõ˜ûë•óßþ×ÿù×¼TïÏÿþß[‘þ»e%|VÓ?Ôþãõ–•íýOý|â×!ìã­- éÿ|ã·ðS¿µ9ˆÇÿ. 6¦ŒG³ŠæG{Q\ÅUñ`ªx”*¨ŠÿÝ…0Ut­^|ý’+½è:øuULL/º«ß"I«ŠoéD‚„»Þ®5ž?~‚¨…ò ðh$f¸c+Bj¡C‚»o¼;:<šã±ŒßÁù9î™Ñá¯îõhŽ{vŽ{Q÷z4Ç“U±?Ç=Ó½þ(UµÂ„µ&ˆ†`8ú;ièàó+L8Jÿ€æ)GHð„¨]‚-cpåú®{gÄö0tÄ>¿ŒE0646„G„' ^O€ Mˆ£Â× ó+uln±ôcœ¨ÖÖà&À†&À†ððz ¼žšmœÝ'þÚ¾µÂìy“S 6ðÞÉe;ÀÞÕ7$«oM|n þk–ïºëŸEu?Ú²ºluýÃBü†„ø­‰³« Òíî}nð¥ŠWQ/ÅþðéŠà3 Å'¨Œ³ÇE¥ÛcÈýX/jृàÞ^‡àÒÓÄõŽV-Âh×…o0·Mÿä½Wáã“Z;`*Ž:BlM|réAGGSŽŽlÝ—;åÀÙbCg‹­‰óKOøE3£,=XvUý³…1L÷^âùŸB°Ñ?ºAï‰ç*´¥å”¨ŠÝ^4†éÅK@þÓd¢*<ÞUl÷bøIe ÆÞè,™€¬"èÅ õâÖÂySÅöŒUñhw–LÆTôâ†zqká)/ýIg/KmÂULkR^Ê;é·û_þë÷Ý6Øfv ®ÁŽ´¤¤ ø„’‚à3J ŠÏìR iÀŠú6kr:ʰ9а9ø¯ßÆ hØHð¯­p+—ÞÝÂÏéN(>¡;!øŒîDïèP¨r¿ëöû~Y/úø}ÖZí'ð€ð(ÂóûËýÛByϰ{Æ~ßø¡:ø¯ß—‚¨…D8Þ˜´úšmr áõV}ñÏ2cH•^l.|_ƒ âáA„G„§Þ>5Ð^ØŸ E Ü>-3UÍõíklBÜ#<ˆðˆðÔÁ{¢¯Öð“uZwðùUP/]qÝ_ïŒ!D_DU\[ÆôÒ×ýõN/Úö:ô<¢•uÈvðù^´¿pÏ‘l3i(U~­ì·ÉàPË»|èÐXÇ¡ÝÚàÖ–p·¶„‹ ´CÝ›¼¨…Ö–p·¶»µ5؉foDc(æë ;øôýœ&W\XQ¬þ@QI‡+ãÒ•އà2H'dÌcK;ⓜNks1-éZo|v.¦¶–.þX#ªûÚ,KKºÖŸœeÆ"õËýnðb»sÿcìÒIŽâ'9Š'æ­æìÕû1¢êo±ÌޱK'9ŠOœä(ž˜·N0†¬µÐYjr·šÂÂC«Ÿ˜…mƒ·BãºJn2nICIñ %ÁÛJþ°jÖ$³&阶 óì8§D×Õr««qK:BŠOè ÞÖò‡`³&€™5̸œýÊÙ‚í80­‰ýè‰;-}™ï¡ƒOßH˜ð+0/1E#*ã’úÛ„C`b €ìK±ðiâ’‡Y³Ëøç²û@ËîáYúï\5îVz‡7Åþ]ÖòK–&öm/vfé‰G{y¤-%øŒÂ]wþìgwtf ¹íÞÁ§¯žížÏ,{@ú7<¸>3¸ìÞ^z¨ÜÎÖ}éNÚîG©;RÌáÛ'‚ I¿`DΪ6tðiÖΪìþG+Qá—LBlX:lºš ä–wxÔ9Á½Óòîž2ær›2\É…•D…ï䘖w÷˜7—{ÕØ˜w‰C1 cNwp~çZ^¯µ¼Fr’•¾¿r-¯×ZÞ IÌ:Xg:øgüàù‡OßSR|âèGñ‰£ß]÷Îè0HÁ¢¬¨ÜÀÄ?|úž’âG4ŠOÑîºwF0¸áŠ?¦Œ`ÛÁÙµC3G)g—l¼ >cãMñ‰ˆƒn¼Å€mºîÊ¥™ž³KÖÛŸ±Þ¦8¾8pØ 8 ák \ÑË™‰sºs`c¢U4¿]œµrsÉÚÅLj­âÑÞ¥dÇ|çÀöµ‰Lµ–Ÿ³?[8,oºÐívû þií,ßxg› ÈÐ¥Üà³Uìö»„Nÿ´Ööo¼³ÐGdpW”¨ë\ì ÞÒIãë !êŸ7„{„>a"á€Æÿ(/jº®Øÿ!w<¾ñ†x5ÀÂ=ƒŸ0ÐpàRØ‘«/‡/F]Z[Û‰e42mVÌÚNp‹ð(²ŒVüËüZ²1%¼1IDê„\Åk™í¸µ‹Ø&#ãâ/Y»G„' >ö‚âa/|û>ݤ“[ÞÛ~…HcÀSÆ_Òî_üÈÆ|ÿ %‰¿Þ\*m Ö~láóI é¦t8˜Â¥ð*ü¿Þ¼®²ŠœrØÂŸåë'ú:¼žNm]ôfˆr)aåRÚ»g¬ÑϤ,•Z*7„#)š±£ xBB¸’à_9xvkãŽy«½"âçÌöO÷ ·3*¨´ƒqC+â†ð‰s ÁgÎÇÓ/(£s&¬ÅIEMf'ÎéRTý…ômÍ^Ëù¦5=W2( K9€°uÏë¦8€¤K‡ô¤Õýà¿>­‚JɈ¤ßñ²›úd;×ïvédBñ‰“IZ3ÞN]—;<¶éú'nØØ¥“ Å'N&iÍt<­“þñeÔa•Lrk«[Rʧ5{¬´f•D–çÉ¡„°×–4·¤”OkvSiÍn*‰ דz¹PôrÉwðùuÓƒýòöËGëë1ä‘÷‚ó¢*®­ol‹´->Z_ïô"Ю:b¥–BoH÷2 I K*ŠO¨8>£â ø„Š#; ý£ƒ¨å¶Ü.Sq¤°¤£ øŒŽ‚â:ŠLÃOÊÊä;ø´-Aṳ̀ˆ.ÞJp¶ŒK&Iä3“2­,vï kÙRVê43ù×âN¤µ¸i-îDZ‹;q7]g‰HH¾.Ñ)Øþ9Úw´Â%b-ÀCZ ðÖ<Üug’«õ¿-7üO¼…Äç;œWzaæÂÛ¢Jt\5k>oÝ|áû!,\x[‘´¼A®çº´¼éàWª¨á¥çÂgåŽ —;(>!wT¸›6@דг ßòY¨°ù¿ðY¹ƒârG…»‰AÛ¾ÄÖúÇ–A;8»\˜´KÁpÕZ0\µ WµÃܾš.FQÓu+³3£.®èŸ)>¡®p‡ßJÐÈ­,çiãñÆýšpE¼ä™¿$:*þåÓá¿~çÙiãFuñ9iJí Äš|žÔEMw´o÷„KÚ%©üåõAMwð_¿Sÿ ¦ëâ¬8¤°{7?:.…eÕt˜[Ý Ÿ^z(>±ô(Éj×¢º÷M ñ¥ð…O¯Jrw¥@Œk튧–ÂqžU‰q=sS4Hõ„~¹^á3«ÄãMiUVÔÀ]™‹]“–<Þ*|ür½ÂgV‰Ç›jG|»úfi ÇÍSk±ý”(¶ß󭦽ªVÅb”/ã¹u£¨( EߢrÓ¡ƒÏK=¡ˆ- I=øäIñ¡)¬ MaMh kBSMûo¯ågѰ¶ˆ†µùÃê$'´k"[("R()¬q ¸C¸áHdÓF‚Ï(Ó>£LÓÄ—mGk»9z-ßÚà–ÓÆ£göp‡KÌg…cy*פÒ%G¼ 7w­ðqsW >›.›ðM·&/9âUø¸¹k…›»*õÏÙÈúùÎÆãü¨côÏf)aB…'æ-¤fÎqÊø*öG£f6K*œéE…â¹RE¬Š0ªowÅõ¢Zqò©ðq'ŠO8ùT¸cÞjª–ܲ |–:A A° O'ºªÀ¸C§îlñ¦p¸EUœNºï Ÿ/•Ast¼þÀ´¼ê‘Ÿ¿¢!Fó:6Ó ¶…–ŽÍw4Íw ¨…þë Œ(L€¢±<±tb€Qùs‰É:3ãq ùµ}Âã…þ–wûÛÿN‹tZ„¸Gxá àz—àí+ø¯Ó"ÄÑ×èëf<˜àGΑ9S ?lÖö^7Ïú<úüuÛÁÙ1ħo¼3@€ð¬¨ŒÝAÀ\o¼Ó‹íèÚühY%ÚdëP²ð\Y×ÁYm²ŽLg¹%;‚ÏØØY‡‚L¥$[÷®RRGf¸%½ÁgôzD‚×%Ð2_÷³þD…?¸ÙOTxˆ;˜á^çs>ªJäÔ±)“‰ïÈ©:~ºøÝ…ß®>'VR|B¬$¸QÌ[hfD%jà£=dÒãÝuR‚¢ø„Eð Êé4ÝDMW&–9QÝO\ø³=ýªºKðzúÉv~gѼ,F—8´¦rýŸsºã‚Î9@ç¯ó‚ŠJ‚´óUì œ‹Ñ¿sÎ:½3‚Aî÷cµ¨Šg)ãÄI*™ÙŽÌ©œ )aÆÉêãQR ¬Q%8$Ï%QæÕÉ ‘øº÷óêfp9bCù!6€ƒ8ô\R“'~‚~/FËlÝÏRø>œ<\í6ÏÒ—ŽÃ×Û®3€´·9²™¬^Àf Öê󜡴¨ð]·{vÔÝvÊdsz›€ŽºIVø³|ýD_Çýž~Á×]D±›M‰¦‰cÖpý~çH4S޲툒/´dE…ïǃáúýNrh¦¼e]BË…W¢ÂŸåëã›”ßQ¬¢²Eú½ƒ¿›.Œ§©¹ðçØ ßî÷˜]†àJ#܉pð Â#ʵ‚Ï/žÉ±CßîoþÇŠú'í0žJç¯þ9PÿüׯþA¸ááA„G”NŸž<“ˆ¾uF#›?già5ð)À•F¸ááA„·E ÿQøºéZzö¬]õøBÜ«n¦$ÎcÇ«%?¿æç×üâ¼BI£5]7OçåÕJôŠÏ¸Õy‘[ÖágW¢æd.ñøÆ»{o;NàF’*ï:ølZë o¤ˆƒÛ×pœöë(¼C™ÆŠ<[÷•´ÖÞH·† à8s*V^xw‚íäEu ®ˆŒëË•€|^°‹¿Pƒ2W Žl´µÕ}MhŠn <ÓÆÂ#ƒŸ`k W÷ PVhãáâAÃ|=yЬrz%ì…O[|ÆŠâŽyë@ÓÚˆZh%oë…·Cªl(B×Z”-èo;Y¿L(Eu_2 íâ›& jÀ~qÁ¬äx¿ðÙ$íÇ»56 FbÌ,\Ë¥ ÛB+ÉÔ/|6:ÅñžŽM ƒ‘˜@s‚õ­ìül -évƒEòæžu|_‡„r©¥gV×;ùs[m.Fs—ÍÁ¶!¯¥OTø|]¥g¾;"¸þ°ö£…ÇžO·Ì[ÈB¼lÝlÏRÆ50Zí(FUÖkJGKÂá㸾ã}Yr?ˆ3´%È_gÍE "ÊN¾Š+ õîçË»ªâÁãs¯Vmƒ9µ—]Š­b„ƒ e®gÎM÷µC´<ÒÊú§\£ ê=üëÞ›·ñq]x…ëÂ5Œ¡T5° (³aY  ´»pÖëeÇÞñNy¾…tÖÁ‹ÊØõNÙ± þ…w¼Hžo=õ_F`n^¿án’ÏeŸËLÿt½3*Á™gCgž ááÁÑi&QÝ»Çîѽ˜N3:Íl÷ ŽŒ„œ¬ßÁ9eCçˆ{„ヺ5hЕÅbš5+yÖ/|6•O…ŸÏ…çêÖ kœúo¡•„æ>›6£ÂÇÓfîOñ —øŒ¹=+ÑGË£3K¥È÷{ÿÌ‚]J.|6Ng…Ç餸„??Å'üù3þåFõ@nTM‡4Q6aÏÒò'š2§¯ž7äô ñ„¢ ìÜ(ä†/4nüËS¬~+‚0^ê'Ë\fbß°T[fEŒK:͸d—Záßkû}o‘ÿ`ðš/P±™æ[¾/0ZfMŠKÚʸd[áâê¿[þ@-•ˆ¤]+kù%=d\²É­ð YûÆßMw¢¦ƒËE‚†ÅÜ"áõ8õ wl‡~áÏ*úÿ€/)>î¦óÄÁ„u?IT÷î„ݱú…_u?PÝ >¡HØ1Ήê~–Ÿ¨ð̨+¸×+$¨óÚKáMgoݹóe2+±2Þ:… ž ^ˆÛ(ª{÷Bœ;x&³{!ã­ã©àDš 2( JTwnn“ĬÉ8{n5ûo|î2œÚìý)c¢gö¥i…ŸH)>q"­ðñ)Å'N¤ÿ²†y k˜À±¿¸Ùá¹5_1ñ££Ÿ.[7š}éÜZáãçVŠOœ[)>qnÍø—-ÎÙâ<ŽÝÍ;CY÷®œn)>qº­ðñÓ-ÅÛ§Û¯À8þå<ñ@Î5QÖ¦Ýæ–¸å£à&É LÚ¾¤•ã?"°š4{DÑ8•ì#½©qùšäÔ8ßÁÙ`ߌ]Â…Ïæ©ðñ\"ß1½ÛZ‚£c~vâ›®ðš1—¸ðÙ\">žK$ã_Çü:æ,%ôßtg©»(Æ£…§ë·¸Q(ñJ Ž÷c\?¼öÌÌH+YÏ*|<ëY…g=£øDÖ³ ÏzFñVֳީ¢i©z)³S:ßïý½þè|}6qX…OvŸì>#Ø|F°»[žµt4í0^•? ß½E2CGG¬"¬ð ÁŽà3‚Å';‚·;í cÁ9ñ@~SÅ9Ùà¸Fƒ‰èjÖâa˜µxÆG˜¿]V÷¾_˜µxf-†ñÐ.èâë¾¢{7kñ0 Ї‘~T^TpÄSâaà$ØúÀÜ)^¡Û©Õ B¶ÂórÇ,Û"[Å~ |Ñnîˆï*¨ŠÿõFèÇ·ÐÔNTÅá±9†¾B?Ö¸E¶R9V˜Á^å†xý« y3HbQàÜÿº,H¢2æA &d£ &m°w~N(×Qrl5DWÿ|§ƒóÙeÓ ÿÚ8Ó˜³ÁµARžáId²†pÓö…sŒ/܇Ùý¼¨ãN(åAÁ®#ìK°kâ90(>‘#ãï†ò[ð(Ëh96|´¾ï;ÁÈoÁ烜ì/ÿõÙÀ˜·Ú;©/F | õ=,)/øâ"a‹„=ø¯ÏÆE¨ðÀ¼…òè j¡âHa#…=%øxX… ‡Þ&¶ýÁ6Sâ˜ý˜.œ)ÉÜ\_x;($}ë@dVTÆnìGæ†ùÂÛÁé['Ð_G#*ã¹5#àVo%  Ül6.6 ë Rêš010.|Ö¹¿ÂÇû)ÞVD¶bk4p.ÐÆó-¨ss¢îÚ20!4.|Ö¹¿ÂÇû)Þ¶×k…æhà\œŽç[Hán‚¨WBh\xG¦¶;2á/9-¾3µƒ ÆÍR‹‡q…{…+Ü+|\áNñ …{…+Ü)nÚ¶¾œñ^Æ[Æ{ô­³ÔÄŽ¾¡?>zZjñ0®–·kövÍÞ®Ù[Ø5{‹Œ·¬¡á"ÅÁÊ¥~”¨ßWôõvÍîbØ5C Û5Ä`m33Þ²Í,o)… Ì-€=ßý£J|° AöÂvÃpéÙîD‹~óësÙÂ+|<[8Å'Ò:VøxZGŠc#U«²‘ÈqEøÑq´gÑâ–ղ¬ÞîDj¶æ×ç²zS|"'e…礤8¶ÃµJ! %›üÀx.Pw"eÜ£…-ᤌC¸öO|Â+Ö‚€Wω•ãÍY°Ç–€WzÂnËÞ1£¾¤6ä µµð­›;»nR<2o¥Gç(ä| eqÂ<ËÞQ›¾™6äÈ´µð­-ë6™·)„—µp8ÚÃQÿº˜}HŒ¸*qY£¡ƒHž&^é]8;M8éÄè_(E@Á¡„' ®‘ N}TáH¸Ñ¢¯Ox·ä–gï#­Ñ`Ž›2ÇÙîíÎqN¼0ú€bÜùÛ8Ú¡µ‘à‰:Ið œÜtì]ìó­­ÁQÔ?'ÜÇáÖÝÄ'2[WøxfkŠOd¶¶ áãë¥[çlqÂ:[>Â$Œû¶½“²±þ-HzøêÝ(*c7Ö?ãèlïÄl°~‹ÿ{?¾Œ%z)–DQœ’%Ëâ)Ö÷ƒdsÒØ¨fOÌ=€Ejˆ_Æn˜jNº#Íì‰Q¥[i&þhYÏòÜY¦}C½×+ëÍÆãlêd¶³L‰wbQêd¬g¦¸¥Rm}Nò¦xdÞj_p“`¯|wÓ;³#Í”¸$¥wvÿõvè¶ydûës‚;Å#óÖ‰l,’¨Kü+ ?q/Jfúhâsr?űÜÀ‚lK^{ðBZIf÷ ]µ"?䉷WêP ð…ï+͘m5tµ^\Ž'~‚­0Çõá ßÓépQ,lÛúèõõ½4Ç_ÏÖGÚOÜ!Þö?sa(lÛ0èµûåÁ|á¶¥ìŠë6Í™‹#aÛ6;ï­;Š _œ ò-ÀØów! ¥™/c3à2.a¾ðY¯vŠOxµgü+FýŨ\)$8hîîEø¸§fî¸Îô (’c²¢Ñ±þú§/i >sI{ã_ò(Bþà_Nñ[3æÄ½wFÍ×Yß 9Bv–ÐÁgMw)>aº›ñ¯øüŸÿp¥È¦E¸C¸á᱃÷Ô- ’ÐËŽ0w/Ž(cI$¡8±5äHBS1Û3>¹¶|fm§øÄÚNñ‰µ=IB[,©Ü°ÝÛ·¹fÖö,i*,}Æ'g‚Ï,ΟXœ)>±8ß-Ï/Î ¦(ÒVÔ½+‘÷3>¹º|fu¥øÄêJñ‰Õ5IÒ3¹=ÂÛêûpàp(·Ç~¾pl@}á §r ¸C¸áaøPèvLTýxQÓõ‰cÓè ox‹<·Ä½ÃGR·GdôœÕd|Ó7’r#y Ü!Ü‹ð0|}äö„¼IsdD·§ÎÞH0ßþ–JÛi;u`‚£Q|âÞ¼ÂÇïÍ)>qo^áã÷柸7Ï×YT°¿…Žî]so~á×è@÷æû!À•F¸áãfyŸ0Ë«ðq³<Š5±"&$'y/ê÷³tºßñ’–€óìCb¯WáãözŸ°×£ø„½Þ…÷Vmíѵ…Î;–öœÀ¬Úú§¦U»rÝøäÊ¥¡ö; æëÞ-À¬Iúއ¦½gM“ñ9k§=Êδ{QÝÏRx‘réÑÂ'‡¶ Ð o&jÆ.œ½kcT'ÞÖQô/Ä+|üB¼Âã¸poÚ‡³³<ßtÝ›>F-qáíóÿª»Âǯº+<Žoe6@ãÕ(jºž­û—Ø>~‰]áq\¸·è8]L›œ‘å˜W‚\í ™ À‹(Š+-²`84€ "¼é ýܪñÕüGq_r&{¾åûº3aKˆ­=!ÛxÉCñvؘ SáÐ2&ˆð¦›ô»åñraDeYËŸJD¼¡œM¼÷eçâ¾T¸,`)Ä㉚®6È”Té›@:/p¬Æ™A_r¬®ðqÇê w¬¦ø„cu…;VS8V'Nqy㯷Ú3‰S\ú½›Æˆ6ýûpœ.Õù%ë ÷¸®ðqkŠO\æS|â2?ãïÑq€~ÇrÅ=óR®:-+~Ù>î—Mñ ¿ì ÷˦8ðËNœbùÆß½x¢i ñ=³Ã¶ÃÐ.|6gÎ…·À[×ãºÂÇ=®+|Üãšâ×>îqMq£ÆÏš(d¡.! ù~_ÉähÌA¤ Á—Ð>îjUáã®VŸpµ¢øŒrènyþ<ŒêâiÏwï 5¸PiÛÆÇ=µ(>á©UáãžZŸðÔò»G‰žrŠm¿û>›zøÂþ$äOq?¼¨øÝÃ8¨FT÷•ô»Þpõx Wˆûa ”ß=Êœ—]ðùº/Œ‡$ l…û‰A î‡ãչ𩃳RÀ‡ßáãŸIGq¬hòíKÎ*)_Åî†÷á¶øøÆg£ÂQkt|û>ï±ÚYQKª¥€25Á¨çWPÚõ:¢H—ÙÁk¨¸¹p>1–7/|6q…ç¨ðñ|Ÿ)ŽïÝžo¡ÀjɈú§Ÿ­Ë…>›­¸ÂÇsTøx΂ŒÏ]æS‹Ï·ÐAÛ*Qÿ¬ä4®ðñ¼ >žW!ãs‚Åñý¥×(ÑSñ´÷/¢º$z‚Ɖ‰Y n{Ÿ„|9¯îŒ«ޤ¯?`ñO'äj˜ã‚òuÏò´.LÌä¿­Yr5ä¼Å3þ®"ž? ‰iQÖ½à o€¿©+QžïtðFpsÑø…ÿû;f_ûRË2©= ÎÚ{£}F ¢*æ}b"žÒ…_Uۢ½HØn}ʑ艣ã¢÷¢¦[‰Zqá³Q+*Ü‹äàö×§œtžxûªKؾéVâQT¸‰¨&>åã<ÞíŸÃ⹋+ŽƒÞñ|¾uïDe\ñ~»ðŽ“Ûó-JTç8Ï|Y7|ÜaŽ­¼§¼æûgÅ‹âFX>n„UáÝÚc}}ÜÏþå¼O#Sž ¯‚©¿›pÊÒW§(>á8UáãŽSŸp?ÈMÇßw¥ˆô%9Q ß?Ý”S–¦¸rMñ‰klŠO\cçºó—j)¢ðQÂ^ñ¢ø„Å').¼§jBɨtñò8•/ɨ`ˆ+Æ—Úßùœ4—WÁ£|Nªø{óeìF²bœ–ýIsÑý=N‰”ãaòeÙ¬é[AÃX“ùr%h˜àÂY½ ÓY>ë¹^áãžëAã0JT÷®Â>ëz^áã®çAt1œ¨î+¾ã>î;,<%e'‡€]þ§ˆÏD|áF6ê•dæå ßÕ¢2)ŠÃ­IÔídG½aƒTŒ¶¬›|áÁš$ëw,CíOÈMç\·Ð„*㟅Hy¸ÅÊ9p¸~ Ã5Â'Ü+|ܰÂÇÝŸ8ŒnE—·Û ýÎ…_w Ž;zx+ˆÑ†â5ñ 'Æ wb¬ðq'Æ'ŽœsR;¾ãÎÒò'jùÇè8Žð Ê w¡¬ðqÊô/Ø s8¿ç;œ·JšÀ ÿ»ßnÇGá”i>n´ùÄ‘`¦¨î}‹¬e»ð«îªû!ÁÇ6Ÿ8 ͤٺò¦ ›ÐÁY[_Å ›°âJWáã®t>îJGñ Wº w¥£xÛ•N¥]™ß^˿޲ÀÌß-VxBV:J‚kpQá5³¨$8“UÚ]SnÅ­ aÅݯÂÇÝý*|ÜÝ/¬Åî k±{3þÁ›G¯åßcàz—àZ#œYÎaX]'[PWÜ+|Üân„>îFHñ¶á{±:ù–ÿ{«­cHŒËŵÆoÅ_`PNã!âîDª0Ì~¹j¢ÂÇoL+<2oµ…1O—]®…úWž†Yv—BBTøøe…Gæ­¶ÈæÈé–m¡•[à ¿5¬phç]‚)éJ¾W Qì‹Ñ¼Ä}åÚâ×~>~íGñ‰k¿Ütü‰ Ù%„r-Ë÷O?Ñ£`‰ûʵÅ'®ý(>qí—ëÎËâÞ €Æ7ðʵÅ'®ý(>qíwá…E _!ŸîƒkÄÉZcIø ºœÑ(æ”»ÈKÍ=—ñ·}nk’¾ísñ×A$’ã]ñuï†+58!RÌÉt‘—›Ó.ã_¶Éd›üñupMé²w _w,bCÁ"*¼Øð¥&Ë—¤'䋾ï×À¸‰Æ;±áWJ‘ž+¶3¾ô\9Ý_øî$ã_é)EŠªˆR!ª’:•/<È[)RÆ`À úÉ«M0|öÞúÂÿ)ògÁ« ÅÇÝa2Þºö¦o@*ÍÞß| ­Ün_øìõôGÛNVø•ûå‘ÃÝOÈ‹JLœuR`¤Ý g¼ Xñ‰Ã”ÓZTø®›# ^8cçÏ cOÆ¢Âw,íYA'&‹D˜2*¾Smµ¿þ‡³–K\¿ÿá³Á{*|Ü›âÁ{žx{Ô½îxEM×5¨âFÝ~%çkŽ:ÎÒªàS!Ó+|ÜËšâÌÌHê!¨WÒ|*þM…»ISÏÞd@†¬W€î«…’{Æ…7bËiJÁÙ{áØä¢ùóÄ‘(˜}+ùÂçUÛ!QPLáApqÑnýÄÑnCó…ÑÁE»u²E-Mg}odÌ­ÚÞȘûñ°<–c _Ƽ<Úñåñ‰q?>œŠ!_Æskæ¿­ÞrùÄî$ãs1ÅñFü| è;|ÙfØ^‰WRáãñJ2>·SnÄêÚèZ ‰»„ø×; …nœM¦†57þ' !Uše® Â÷"|XYšŽ“5Ôµ—·Ž·wL¼Nÿt3¶amå7â8E̲ôØ>¿ºZ0±64±6€kdɪµ7w]ÜœQüõÖtEZÔÀkk»kCk¸ÞÑÖ ExóŒön:î—]ãÃ~Ù5>ì—ýÂp€¿CµtZ~!îÞO:VWø¸cu;V×ø°cõ ‡†.²–_ðŒ®ðqÏèöŒ®ñaÏè'nÐáØøÜt¦ƒOf‹¼ñI/Ñö­p£˜·¤¢µ¨…#ÞxÛ%qC^ˆm¹:š]‚C—Ä×[ðO6†üêj|د®ÂÂoytÔõ*WÑo<>?Mü‚/v…OÍ2¿6˼ ­©Ç›²G»ê[©ÓòkÓÏ/¸ Wø¸«p…» œ‹òùz óC50pÆÙ3Â522ÕI‚›]d£ÚĹ0Ï·Ú#÷2ùn¡~ˆÝ2“Ÿbp(Ž3{p÷Û»¿V¸¨´qd~­E_7»Èz»‰9<ˆk@üíµünMFÜÊ”±kÑèè/P–Y VB!ÔøÌúÖÖ·°¶¾…’%¤}è°Œ&£Âón‚¨{bTø”lÖd£^ÌwËŸ|Ó52¤To©å&Ìw‹Ïw`«}iuUû’p£vÉBÁ\/N‹ª¸´D¨}é @pf.*dfd½¸4PÕ.â•…YÒQvãq~¤yf¤Ù%)\ÙµjEÕ¢¨@ʈZ¨?P=3PíÒYWÙµqnEãÜ"ÅöD-´´ž+»6M¬hšx¨A.UÄå»®šÑ «Û,Ü}»l=Ç­‚O™…W¸QÌ[GÏT‹o¡®‰f4½ê>Ö9äŸÅ8X|Ê®»ÂbÞBVÆŠZè,UM“G Ÿ2Ì®pl˜ C4D²›@W}EB4L$W9ÆÂ¤Jˆà3›Å'6#‚•áTBäîÚsäâNË/¤!W9ÂÃ䑉à3G&‚Ï™´ÃIÐé['W“5ð’Jˆà3*!‚Ϩ„´Ã™ÖÉ[©„nÇ ×;¸…üÚä_ÓÈj/‘µGzèEU\›e~I˜Ó^"Ìiö ù*.IcÚK¤1 ”öG•2býƒ(3ÒÂÚH ¢‘c‘&+ªb¤9f¤…µ‘D#- cƒ‰¢*®´ i­iºl«qãñÉ@7ÞPs?šâÃQí*|<ª]Gµ«ðñ¨v¥åyóÑz®£¨{B™Üx#°/íl_BqÕ{OP|<&EO™þudX·èˆlÄSu\‘Æô‰ZK:+9¶*|<Ø^…Û»ñž ŒNÈÅÖ–™‘:ød&”o[ÆAc¸6îîEøpåR÷ÎÒ„é¥D ¼±äÆÛpÐæ­;„{>œl¹Ô½³D$”Y¤¨[Ø>¡4mkãá^„§d¾ñÞ7;ŠB³¶Æìœ•ñ7+Ùxk<2o!­¤“U±¬"L‚C×xdÞB†žÁŠª¸ݹÆ#~KÁlˆ¥ÔÆão7±Ø™Û3È}ÚDv¼7>iÇKñȼ…\òCµÐYª( ñýhá“ö¶Ç‹’Ñ(DQ¹ñ5Ø"ÙèµA —v<ŠOìxŸØñîºó;žÑ(¾RŠÙ^Úñ(>±ãQ|bÇûÃ{;p {¹ïåµ»àÄâ@ó:rR­#1 ›–[_!a6„;„{Exe’hÖ}Ò …KHßBJ3ïDÝÛÍ|É­0Ž„¹n^C|E”ÙîîEx@xái|\J"Xã‘y Yåæ°O|÷‚°5 [ÓÄ'×7è'[ß yesÝ–òBɱO("Ã5jÇŒ2.ìPü³¢Âçy¹O¨ÙÂRiǶ̵}€Á’ʵ[ø³|}4bðWÈ>Ëä%-`¹0¨µ~W¥ß›aZâŸT|F`8‚bŒÀ6ÝÚ¨SeÔ5­áøO¥,©ðñ”%/­´ÙU™oº%'ÁgœxO Ð'8ǯŠAwpöñcÆ=¾ñi[ŠO\A¼mkò5­? t ™Ø¦ëÞM~̸Æ×§-")>qµIp£DÓú£ðHY#uK¦’Ÿ¸2%xÛôýk«ënPD¿bÔ°Kd0k3Î,ùü|Æç‡â>?Ÿñù¹ñ¯mü!›ïÐÛ7QÇ­Íw³d[FðÛ2‚ÏØ–Ýø—ð-YTQÔòKFgŸ1:#øŒÑÙÞØÆi %d˜ЧfÂFµ‰fÇf¿ñv6ž %àiãiØ®;­Ùu'‘]wBvÝ)çžì4p7Ë#E§l×mQP¢Ow¶ áiØ,<­™…'‘YxBfá!GÅï4pq(óÈ ÞÌ$åWDuŠOˆêI+['•pÝSÁÓ—ìéêW€OxWø¸D‘TêÞ‰ñu?JÝ‘“ë~ðvÚ[ͤ½­q´«â“I%tS!ì÷³Ô9î§oçÃÕL>܇»_Ò;ºjÈBÓóÇÙl•ÜÆ¤÷’­Ò¢0Æi…{ÑÌh~}Îðↇ>®u¢ø„Ö)éÝAäˆÊ|¿w3urû¥ÞKx ‹2uâiMq/òœo~}*Mo…Oè¼(>¡ózâÐÙŠ:®„Ͱ(ͨ;%¸ùÄ?ZøTú¬w£8³Ù/¨¬ˆ :¡ï¢ðùÿÂÛ"”Ú8\ƒwM£ø„º°ÂÇÕ…o« ŸG4ìš–ñ×[í0ú;“/…â8Jâó­®²Ÿ\]…Â:Š oË\PÌjããK*|\CBñ Å'4$¡£=:pÀŠ«à8Äã‡ñœ£hØœPÞ„"f„Bñ mp…kƒ)ÞÖ¿{ôä[þï­æ}ø»ß%¸ÂSÔàÖ|Ó?w÷F¨n¿pÖÂ'q¾ñމêó-”,)GÒâËØ5QÅi”o¼ccú| ל•Q`$š¢EæÈùª;E»ñx#âˆìÄ-Ð%<.á®Z>qb"øÌ‰‰â'&‚Ïœ˜îŽcý%žo!uI6sæGGž&~â\-ж<¶áž^>îéEñ O¯ ŸÐ‚F»âéõÄQÔŒ~‡ï÷¢*B£ú¼ö¸BúMl[ááI‚Ïœê¢]:ÕE&)rßÀ"ÅsÜ—}-tðÙÈR>{cúÄ‘wV`È~%èÓ…O‹Ô1 Ï'oD…_¹·K æl‹Y¤NðÎòÂg½Š.|6I Å'’”Tøx’’ OR’q¿EúºÍߨV\¢.|6ËÅ'²ŒTøx–‘ Ï2’ñwÿ¸…Б4iQÿ¬¤ ¡øDš ORáãiB2þnàæ¾ö_ÙÎå/šMSÒý¡íÉð‰û±Œÿ•m=®¯èëú:Åý˜4õ_Yº¾~¢¯Ã¦£¸ þ+7öß•´C±‡=jù O¼Ó?ö   û‰§áþ±'ýú‰¾ŽúçÂ;Ýàr;ºo«¯~ ¹ƒâÃUt'ŇÇÏ…÷ÍÂÿýÁ¢APán¸îþ _?Ð×Ñè¨p7Ütþ¤_?Ñ×Ñè¨p7Üò!7]@‘Ã3ý(>ÓáŒéð‰Æt(xgt„ƒ¶ÐZŠº¨~âƒ.ªŸø ‹jÁ;#8œ´…NÔBhS|ÔEõtáúÄ]¸ Þ™e)Ô„¤“ÄH'>.¤ƒ~ý@_Gƒ ÂÇ¥“tÒ¯Ÿèë¨+|X:¹o ÿ.¸§„ÒI^s~à­å‘ï¸[õx]£¡É_ã]£í\©Ñ~¿kí#xIÔÆã‰ ßÁ;£#‹ýª}jèôO–ÛU[ìï´P[”ùGŸÀƒ‹âƒ+‹-ï¯èëhtP|btd±åOë˜ëÀ¨"kÜ!Ü‹ð0Üòñ …?PáQËW¸C¸áa¸ãâI ¢Â£yYáá^„‡áa“7ÒW¶pra+ƒú½Â-£O(·’àZ#\Tx=|HRY x¾yÛõn:4ê*<"|DSYy÷û D˜O'*|燶Îzm;Øëhth‘EgEÈû#úÈ>"9Nè¬.yäD9ÑGDÍ•7Oí'v~w?TšQÜx§!ò©‘f@3šï4D>CO˜H|à£&Ÿø ‰Ä>j"ñ‰šH|à£&|‚õ²2À#â ÙOCõC;„{>h;þÚŽࣶãïLÒ¬?˜°EøÀGm>ñA[„|Ôá´EøÀÍð@g)\£3€fÎ7Þ™~YZn]ïõGG–W[—Wý*f™M#½‘fôF5>¬7ÒYjÒHo¤½QëLÖLø·œ¯¢É:Ž Wî‚÷jr’ _ŽÜÈW͆èTQîuR|¸ð:^£^Ôx’Þx§Šú 9ÀG`/Vøð7ú¤_?QOôu‰˜f²¦Ê +zý=k< ¡¬èzý@_G \áÃ÷§&_P¿¿~‚¯£MîÆ; œÏOÆ6[¨àñpeîD¸GxáᩃwA>ü½Z¨=,VV¸2w"Ü#<ˆðˆðÔÁ;5Ÿ\¿‚>P0ÂÇ7Þ¨ù¦þ+ð±h2å›ú¯ Âüzþÿã?ÿ~ãù+FØžÏýl·ßæbhÇlüÄ=ƒWJ‚+pQáU@xá àÀ!õ× áZ„£ŽÓ¢ºkÔò úþnÐ×èëµ¼µ¼ÝnE£Î!܉ZÞ„[î.+<ê8'ê8:.‰mBuO¢º'T÷äE86I4l˜°ÏS€«Ý <Špôu%úºR— ¥Á˜WZ‰pp#ÂÂe…c^QÓÔt¢ÅJ°Ç)+úºµ}Ý¡–­6 ­6J´Ú(‡­ÕÝ£–÷¢º{ÔïA²P«€&l4V`Êh‘x Ñþ®ESF£)£¤ã´M§­èë Zí%Ë…Ž¨é¢¨é“¤ðf¸-ÔÆùnD;¬AƒÖˆ­ áN„£ÂGɰ1h‹´¢-Ò¢MÊŠ„RkÀZgE«E«õ’acƒá@8±¢AëÐQÈí’Qç4èw'‰E_µ¼ `±ò»¤é<¼–LX¯n$‹•G§ /Ú =È}”4OO’~ìqA$œ$ÑbИAÒqmQ´\D4ßQôÕ<‚aEg™d@Ë'+ó ì2JtyŠóí¦{þÁˆp p‰âE¡a£â.6Ï· ½—œ¤žoY„‹¾®Qݵ G…—¬u䈟MîG!˜‚ê‡ýD_èëAôu ÏÃH¬5ž€¾ûÀdc¬|àÑ"˜cò-ü˨¾‰YØo];Õ çìTûý>ahú‰š~~ÐДâ_v² lÖ]#w: ó±}âÈž Ü"~àКnÔ}<œÎgáÃé|Õ},œÎgÝÃé|âƒát>p£‘_Ûäõ«å‘Ø~ŠZ~,qú'>˜8ý³éƒ•6Ý`°rŠ_ûktí¯ÛøÇµ¿F×þ÷¼qoo"¸ V¾×7¾*=ßú—ü·ßÿýûÏÿôÿØÖÎ0`DyLP-1.10.4/Data/Netlib/bandm.mps.gz0000644000175200017520000003644310430174061015370 0ustar coincoin‹êJ®9bandm.mps¥½Ér#»-:?ç4z3åMöäP-×)Ùò•l×Þïÿ?ä2¥dƒ.%»j”QæIAß6¯O«úo»yÛ¿þ÷?çÓŸËÿ³z[­†üOåϧۧiŸ¶}ºöéÛghŸ±~ª±}¶ßUº}¶ßUåw/¯µ·Ó0¤úYìÔÚž×Úºî}û í³YªŸº R·‘™67ÓæfÚ/˜ö ¶ý‚mÓ´íÇl£¤m3¶­ ÛºpíÇ\û1çºÏMûn?ÚO„6´TÿW¶}Ö_SjÜ´oµi„o+O‹§A›öÙØ¡;tû1Ý~Ì´3íÇLkk:Öµ¶®‰D,°ÃÊÿÔ8¶ÏÚ@µ‘½nU÷¹ißmƒnDi «ÎŒí³ö<¨NhÆÖ–šÕçŸðÝgãÇØ1/tlêgÚgÇS_GT×ð¡­Ÿü©¶õ»Rvúüjß´®ýF]m™ž¦ûÜtßí§[“!Ô!µ1çÆ®ûüjŒèXåÚ§oŸ¡}Æö™:¶ŽÝw“^³tÚ¢IŸk2àcû¬¿|Þ•¶Oû¡ûlBÒ)ã}[˾)߃o?á›ù¶ª}ûáЄ+´_MGÄö¿±ýn»¥¾íä©“­&×ME*ÝDÇ4i·Mrl“Ûiª¦[†Ø}Ûº Î/—][¬44% ºÏØ©‘¦ªt÷ßM7ض]Ø&¶qÝ·ÿõ×MûaߤÅw¸6 ºÏ¶õ;躭U™ÌŸª}¶º5ЭîTN_³îëÔ`×"ém÷½k«¿Ó íGTclÇîÚgl¿ÖõÝØ­›ˆë¶™nOmRi:­Ú~Á6·í\û×~Áuë¥ýBè6ÄØ _ûlƒŒíwS§€Û";}ßt®n:W·-U·_СS´ÝgãŒj «j;v¸FkÝ~B7˜nhJ´Ù:‡¦†mÃ< ¾qÖ·_ˆ®ûì$¬m#±ýDj?‘ÚÐR“©Ô`Õú˜ô{·G¸m§´» 8õÿ? ìU™oºïm÷]„ú”7äM÷½í¾û6ûöûmU m­Õí2úöÚgÓ5C·­4ý¡šÒM™sí}÷©;³{Ó}o»ï]g„wm\ׯ÷ß]{¿ï¾Ÿ:3xÛÙÁ›î{×}ï;¹k£·ýÚi÷Ðÿÿ®ûÞw ½kŸº]²ß1ã¶ûÞußûÎèÝtßÛníwÿûÿßu¶ï$ißIÉS÷ýÜÙþ›NwÛ§Úu6v·•Ž]¿©ûÿÕ­èüÿ»Óñóõm:‚å¿?ÿl>.Ó×õ0¶ÿÖj˜ÿ`àVj¸Áíît~» WV€Ÿ^†×W<ëúÕlæ’ß½Á/OÇÝ¿¥÷•gƒLh•Æ·¡µ’Äëíò|ªNIZÿ˜(caöëé|8­ÄV«Ù=WìÈÀ§c„0Æ÷ãë?‘¨E1˜$(†ó믷ûp«ø!›•BnÆø±9w­”Ĺݿ»¦“…VùöY·'­ Üæ£ò×Hu¿%µzÞ¶Ñ[¿’C·P¤V¯‡ºœdžýoI2|:ï»V’ ÿÚ]t=×Hôª ëzäA’:Î’J'ªîzøÚšÛYèÚªM ·V3·ék/ å×Îu3q¢¬}¼´V¢|ü©=¸õ?·:µVy…Ýη“ØÊ7ù0ç_OÛÍå©üV ‹¾UZå¿?Št‹kóòñÞæ¨Åß2ç§çò[£¨¡ß½´—µÁæ£ÐËJ=¾|ý;7»:¯%Jÿ[io¥½yVó&&µús~º<ý3sˆ±/gñ„ðõíDŒá‰gmõ±Û ¦ªB‰Ï •“[TÙ›µ] Qm¥âB«j3¨´ÐÊԥѦñøZ•¯Øãöã\•o>Ø¿åRSÑ^âÏзÒò†ZÌŒƒ¼P'[¤ªûè¾¹ê·Ý—Z}úЮJ°¡?•q­•–HûÉ‹ûÀ‹~­{°WÊÛñmô¢ÆAU}ZéÚ*ɔؽ—V¢x~žw¯ÅB”õϧÖcÕ±âèõ¨Ún#ÒKãe×ZmÄV‡SmeåßÚk+·ÐêwmååVÏûÚ*È­Þ»VÉfy{¹µš\âe³+g–Ék,·úÝZi±ÕûKm¥åV§ÖJýÛ¯&Aú-mTi5¹÷%‹ëx³Ç9cyPטê~ŽåjRo7ï¿ÚáOðq³;]>–íöHQ=šœŽ÷á§¥“Í}øä®”Î/çãæÌ™‹í`„w Ã4ÃŸŽ»{½äu–åæåüÊÃ×7ã÷ê`¹(Áó.ï‚bÌÛžtÁ¨#àZÛ!ÑÃCà“ý±¹¯oqm Gkf} ‘ÜZéÖI‡²ßÔVJnõç³µJb«¯÷6®Qluyk­”ØjÛµ÷Ö—ºWJtût&—à²X»!ÙyZÒ€;ø5®Â‹SØã8àiæh*Ü:gfµVâPö›¡ñA´Kþ|>·VÒ8Ÿ;n‰.Úóy[<¼SôHr»]¾~5nI¿õ¡N™ù÷VM|~ñ|Hã#pqm}è®U’¤s¿é‡"-ó?Ÿ}+iÿþzï[I+ðòÔ·JòÏw%]‰"ÑÁ¯±]ÂzÇozîRkYW×ó’îáA&}×ÊȤïZY™ô]+I¸³l÷þiAɘñýý­:r’Øj÷ôÑZm¥V—¢n¯¡I©Õ~>ìÞÂK‚ŠÜ—qÝB›R«2®[ÐSjUÆu ‡ŠÞæ—]k%ë¹Ñk §J­½¦@«ØêãWk%ë¹Ñk »I­¶¿ºVÏR«Æ¡)Ð+86ô¥™HÈÊÇëÆåK~=£oa~Á<Ħ×ÚWøûù´/G$Ñ<4üi¿Ùn8;9k’ ®ÛÝ5u ü¦ñ)8¥dóìê4¹f2 sÚ¿o¾6\ï>“îz”»f˨3ÑQ¸R½¶š{—vÐçÃñTê(²Ð¼”§cm…}™Ð[¼ùõ6ŸpÄ0ãû{ç|%‘T3ó:ja(—×,Ï’9|= ]Ó äÝé÷“ÔûuÐ×…ûð¥áûéíðTz[É2g’'ru]3DÃ^œIÞ§Ò ýF|á`þ¿w·˜• ™«ïû–ëŠ=ƒN}”W&Ý‹qŠ¢r³¨øšƒË!ÒíçÛï§³HÇyý‰ŽòíÛïç“Z†Ó˜Î-ûÂOÔ7~•Ãk–.ž»íàz¹÷u£^Sl œö>D%ô>¦þÏ÷æžÕG4Ž;É6ò5kë©zÝü³â#ÕŃ-§3üëI”à1Ü‹€5øBœ|sÞucôÒƒ WÒ*37K™ã-߯‰×¨•ã…à–AIà¢æ›RPvüõ-þIã ÚîábK>Í-,ø1r»\·à{øR"Âóñ¸‘¨}•Ö[ÆZrŽÂ‰ïí×`Æ{ßÞë]Q.R8ãjPâ°8øâw÷ǸC[ §tTžãj\ã5‡CIc…NnyÊŽ£÷î–Ü1å†,õ®ïõ޹Xõn§c4Nǘ}­„V%eMNɇ›+' Þ;Žgb*Ãj¡w}¯w²LFGጤyqX|qŒ_wµU´U—3šòÙâòþ"Ø»f¸™'r$ À¡=ÄÏVÈ%xÉ&ϧí8¸ÎÄ žÒt¶""̨p½xàP«¬kGÅûU²U%ÂÞÁF™›ï…Fó†5Æà¹Þ5ö„Ê|þò‰< 鯽¹•È™6ãÓLºlzŠ1šÉÂW伇£`êt%–Š·û¸wQ´ôxuFcÃ]M,R ¦é0„ÂwÉuà!¾›g#s·ý¨¾D¡!º4/eìÓ¾]^Áp#%î·GWx Þ0|nÔ†wl0³j}j%]³p‘´²ÛÕ wäb |VÖíÎÃ1ÚÑͽ‹‰F=Ÿ†ÑºbªàY™ÄÁ5M¥Ul­ô7)”-˜â‰p‡*vÞfðÜ+ëÀ¥ŒK2wÓ³W×)*8ö1%~î£ï(dïÎ]ÜäQH¹yñc¢äa:N)ô€tXI:Lò"Q8¸D¡¼Å–s³C«zøÅº;ÖIÙÄŸ—ýçójÙZ>È©L=œ3wY¿qÞ•S¿±jph«‡Á±pè*¶v`½Ãkå¾G¹“?—Ó] -œÁ{øãrC$pJ!s;2ѹ›0°pHÝzGsס¤½üòÜó¯‡G:,Ó¹‡«W˜‘3Ž($JGXø¹—\M~D:ÄԒä#ÿ pB¡¬p,K¡l™YþGï!ºâŽd¨¨Ú—?ûoShð1ZÇé>Ù&©çqé¤Ýà c[?[¤C- ß¡EÊ/¿µÕ|ïÏ’~Ûã@%¹#¤‹ŠØ¼MNÞÆƒ³üMqsg9×åê·”Wl¢Õº[ãNǸn‹ißubVßîdÿ@'óóIrG—N¼˜þùñq~^­¤{ <››ÖWøû¡Æ$’'¿[ØàÔ—>óú¸mêiÁ Ûõ­|„3.óYTè­‘²]¸——7—ßJŠRÙAØ0‹NëàœóßÌðÅÞõ÷{·ÎõîïôžM 3®–{_6§ |Êàe§-d¾+ŽBwuî(Sa]}—ޢ屙w§¸lý`Šª³‡Ä)f–Ø)®o7©)|)Ô¶þ[³å).˜=3ü[\´,|‹õ…oRŒbßKcÜ?ÂE11óüAÔ% '›/?EÕ,;YP×Á6óä‘).˜f?˜¢ëL3yŠIšâzp,NÑ ló67ZÚú‰ åuÒ@oû¿:üÍpöîëŠIfZ«Pv¼ç’™b…£¥ì Gö¹i þîïœÞ¾?E_ä¼Á¹)^‡ÃMÑާØiMQÖV?â¢ÃpfŠöª­˜,´iAp<Ū÷LqA[ý`жYÈ ‚z3ºèUÖ!8>jëfë?0Å¥cR™¢|LÏ=üQ uФÁ)…¦ã¦0÷1²p´Jìz:çì—•ß:Æà?žòœõÔ®èRöRP›…KùS«Í·Ç8rç"Üâà8 }—àâà·?¼£p:xmøÁWËÂÆ8¨£”PóÈ?Ü<°Ðƒë>‰]î]W•xÚìÿ'Á‹D [9ÍCŠà›……yº£UäPŸ®Õ×ÜJºˆÃÂÑþU$M¼®áÒu$%ê8Ö=@ïꦸå3 <|W÷d:¢òˆQV'‚ý}(4ÆXtO‘~ІƒgÞy¾Ø€=¯EPϧNóÑÞ-/CMOæ[hu– Ñî0”¤ªÅ¤,ty}+‰á†W]L}¢â»pÇoÑä ²®‡©§ýëåã÷Šï¤¥­6D §éÚ 1ŽÓë®%UIa Ð;™¢šÓë—w£}üB~e[8I1Z ]9C@8ÊŒHž$+±‡Ó¼#dF˜’”á(3B…â[Ûéݧx)}fƒœÎ à wd=cìŠË(ó¾äîÎg½]‰½kŽò}i¥Nnf´ÌVt!a´,\ã̆X«€µ1:õPnOo_lúNÜ¥ï}(¡°—Ë®ëÝ}·÷Ž{_{¾÷)m ÖJc]ïþ»½—zOÂÜõX{ßýÛzgDð^ïœô%Ê×¹?÷Ç÷/›%”ddu“pTÀlmK±T³lí‹h¸xÁìS‡}a¢úë!Ì«WãÛq:1p‹Íž î?‘fƒ;Y•RºxX,|+Á·ÁwìâŸJ¤ó¤Û~óu¯ƒTkªž¾º G"˜7XU²Þ@òÚÅ[…îÕµ(ÜÿÞ­äà)f´ë68¹ ñHç«£¹ƒ/®;þù«1vp:F5ÛÁxŒ+W£6|±ˆÝ_ñô“1Æ:Æ>Ê…ãþnŒŸ?ãºxK*»!ú8_…wy§tyÇÁïˆY(‡÷ÙI¾‘}»nJ ö¨ÁÇÀñ½m_œ­ŸoEàÎذnatG;éçK{ø²´R5t÷vŸÀ„tù´èœ¥ã=ÒíÿŽt{™t«9…€’NפS ýÝ¿œÇhƒ/7“¤²cœüõãìqG †Tn¾tpv&’lzŽ5cÕ<3xCžôŠ»Q“ªÇÀqùºJMAÉמ«k·bïér=ô­Ç×í]þ,éà§lh¹bˆò?}ï(W¬í·/;IÎc§r®ng)F:×»• @L•Ëç»jt(k¡´t‹N"ø—dÝ ÷¼\]½ƒ“ÒL“?zþ¼ëŒ£®w¦¦ð|ºÞþÕ;8£ÆØ ô. ÔæïÆ¸ùáÓ;ª^ÑÆ8Õä,­8ý(žÀÙ™ðƒWíŠqÇâ|Wqöƒ—'£8£^ï(N0xQqŠ*ô.ª×Ï·™?Á»»üyù>º4Jw˜sï˜B©&euƒ§åòý"óN.½êÀXÕÛ./»¿Z~œRHÝÏ'¡ A曟`z7º™­Ö~‚ÒÉEYêãËZ©¡øq|ΡÚlg-Ee2гŠJÞ‹JèÀ±³è–Ï8‹†rp nÖQ ŽuFLigм©Xd½‡ã“àºÖ@ºãzs90½«´åM \‚S]¥íͻͬÛÂ¥"vv½sq-ü‚@V¢£bàŽë4–0~£a­¹Þ‘[‡9Î#×ïàTÙÝÂã43x´¬‡hKá-Ø•`𚯰H@•?ÚþžGÆQ¾8 !åM¦|dàdaE+-,Ž÷ ;pütÛË2pÄ÷Ü*°|_»ßp‡ïîÛÈò=ÿGË:ÿ\Â*'‹°)ˆëöNÄÆ{]|ÖB¨ ^£dÖN+lkA©èqó\‰²¹ý;ÙÜ.Èæߣ²Yb›þ l򱃾V–Í0—d[’Í­(›“qtW6·'›ÛŸÈ¦bz'²™JÙÙÜþlnÿN6Aï‚l¾nÓ¸}çOˆ-®KBFeÇðÁ 勦V¿Ww;Q üâG­m»¡0æ£WµGÁ$=¶¥Ü …ðüBY­“ý>ï|¸m=— #á¶a,y=§©rfrD ;"kÃÈó"Ó;yf¡ÌÎZœb§‘-©8¶´n!3ÅjaÃÞÑ%ž±À½Fª§¨˜Žl¨uw8Û˜í+\¥^Ã;Xëšpl ªAp°Ö[8N%-ñçaÔÜà5Þg´`¤2pl¤NŽ ×{’¾îDP)A΋! à–”?2¼ƒU×EÚñgb-G¡+ß œšñ£òÂÙ¦x‡Aï†æ€ ¨¢<¬-'üà馶 éôY_»ÕÒ¹Õþí"œ(úVŸï+i1©$¢Tip¼fÖqœéõÚ]ÇOj–ta²˜ªB†ƒçó}_<g\‘ƒ çÕz§aþÔÛfV¼ zË®L—_bà$š4&AÅc5–6>¿R5è à^"×2å œyX°0ΪûpªìjeJ"ó,åIˆm¬«lÿ’FI :%X œÄ‰Ê}+iGš“tyŽ£ 5‡#5õ à”‹ÂÎoJ, À±ÂÈ8 'Jß(#1.r¤sBt’N!\ºÃ#>˼5æóý›ZaZp‘ÿ@+ôðhµBÄZ!qpT÷·žhQÞK»fàû¶\ä‚+ÓµDËÀatdrIÛ°”§ªçŽÐöp(´“h:Çí5èÂõCY½ÐzI©@ø^‚?=_í ùzÊ §ÕÖ꤮°û»¤Õ’`X°eþX6*6è ¸Q˜ÓFöŒ¥½ãàâû¹ÕþÍKbñБwiÍѳ µÛ;8Ae]É‹ïv¿y饯|n(ëó½> àĹï.© eŽ”©iÏÄ“á88Ú±TM`PHq•dG'apï…È;x|ë´ÞéÇ÷IMMïábõ#»;ßDþh%ð§¤=8æ-™Ãtgq œáâ Ǹu»‘àØàeٛĞcöÞžéŠ÷AÒÑ‹$w¶†Ž­ÒÜÈ öLñC¾ã+Í%“–\i¶†…o%øö!¸dI‰Ò‡ÍîER*º<Ã#’üû'p§æ“„Örpr·wIŽ…V'#mààÌQJ<šs¤£çô;BÛùsº ´åüùŽ…68AhøV‚o‚ B+>{|yýXÉB«­´*.ï„Rš€M[NO†Ü 2œ¦—[äÈÍk@©P_kðeœò“?ŠÂÔM‡[4Äú/_›óéuÅæï¬KJœñÓ^ŒpKk”?lè=DAêHuŽr­éc·Ôe%[ ÷58x$‘³òªG{_¹Tà(“h:áqÙ?å4G©@ævŒf;™X5ü¸â ¨¨ëÀšFsoË)Ï?Ó’ ³r¥+Ã?êCjÞñî(”sm³}o8dÜdøz–q~ž[uâw­Ò8bœJR`ÜÚ¤¡Tt‚ƒG—n•Ð0ãÖÊ Á2p’¬áÔŠ¯ö¢Ê“êÇ+‘ïÎqŒór'»óïï±W ¾›bƒG\S©œ {m-| àx]Æb öÚž? ŽØëÍe!®çá±÷öË œ°×¦ûì­ðŸ±·c\;›Á2Y4¯v]}PÀ{›£±7ÔêîŽV¯Š‹Øëm_GìM·2:tõ†ü»ÜàG¬6-¯vÍÀÍ³×ø{+üQöNJë]ÔÚ8uvÍó= 7w2œ¿~w €(^+Œýnmx±é(Hlò‘ƒƒ[¬TÊÑåêêšvàDé'V+$]³áàÉõ‡À‹Í0N´‚y@+ æ›b“‡ 7÷ñ'bc~.6Ï F^¶Å¼ GJJ€rJ³aktÂV^ž`ÒI•:$ÍRy–­´iiX~½«ò`&ìÝHVšt6xõüÔIâR_³žvÉ1pÄWß«%VZÑóÏ z~¬^¨çµbdàˆ?±­w°`u6B7x¸«48Áp¶霰d­hÁް×;#r”c\ÜH+n»°â\:•Ž —ôüôÒðb#èùIQ+~%×óðó‚žwÍ:HžtdàôT–8±±¡Vã}õüZ7uAV2ÛûÏÄÆHbck\RÔϯ¨;¸QµÍnó±«/#ö6WõƒDn ß½æ‹ÀL§:ÃÁ¡éª´àBjïö8v`ù"Ú¯¹ÙJXÝóÖøª± üûW!ûf¥kð¶¸7ç/[Ãò'¯ëÈõN.kwÎ_®'“ÎÝ(ž3_ImÂâ¯è{g¼óÛܸ2Îè,3xæFñJºDÌÀÅâbñÇwHÚ Áɪ÷çf¼ÇíV`À±»0ŒÂUÇê‚íá”?¯¼·ªjô¤ /H‚ï$øC¤ š½ìôënµb¯« ÛbV :R8=t9¹Wà˜Þ©Ùâ†Õr…!Ø»ôŠIÌP¨í,btá|~º”§À¢äevR éN?Åd»?ÏçYS=«Á¢ß©¾2‰ƒ÷ޝð¸ûåAòĪd÷pR%[|…ð–•·îƒhé×›1†8ö¸5£)eÍÀ¾ ®øêõ­n&€cþ¬Ê¾†=5êàôö›Ħ³zÍT· ­ôßXÿõw ¬êUDzYo¸.X‹Þ‡ZaÈì”èTtõ¹Á—ƒ6€'ì;¬%‚´jÀ÷³ PÇxÆù±§ü™W¨“sÖ±+ÎE¹Þ1ã|Zq)åV5­Ðõ̟¶zE.~¼Ì!fýˆî¬– àØ¡‚fý\¦¾³ àØé¥¶¨ÂÚ:îHvÈìXøxy:¿²‚ª'ªò'ÚPl.§…¢àÎ*V)„'BGÖ•B\ïèR¸w«y8Qô³á@ý\%Å’;½nž@ÆÏURó;8ãôÒN𣔸Pß;qEè¨VË•óÀà¿_9Â¥ÊyIrTíµÿ”œ¨C¥šx%€ßÃÉ^ë‹‚Âa‹˜˜ÞéEn¡ÚOÕ .\Vb`‘ʳ⠕qpî]ãò‡Íƒ·’ÒJ~HßIðýCp4Ä*Æ?¿/åÙÉt”S(‘S.‚Þ‰tÄüaé0LïÔWªø;ðëšÏ{ÿ¾tôpEé” „A© [L€ï/÷ùnÓp\Ã|}Ó° ßÝ™Þ ß“¾Ï÷—øŽ–µ+7­ ü'Œks§ª'IòÄÍ”Nx”ï/K|Ÿ«¤±]Á벤"Ê ª¼$ÞÃeBL­jy!z Ö¬tÀNÞëÅt )ú:-€Ãi%Êù'w'k\…ŽÚ­“ôƒN^äNj•‹þÜó‹©{oRzóàsÑuŒN|T~ͪÁé‹íúò¬Ï-¢‡d;úÕòk=<·ÚÀ¼œXRûOǯ‹æC¿?oÿŽb<­àÌó?+éÅgŸÿYI¯q½#7u{Zç¬?.Ò2Y ˤóMp‰ k ]à{û¡ß‚‡E 𺸇㠆$gÀp½OU¸ô½c/CeÃv«›3ot©Ù²ð¼-€BHÕ4S­¿Ññ;¬ÞáÂn¶PîpA8½É-8§Ê o°—m^‹›ãïÞ‘²Â`3Û\¬Y‡3±®&^ÁÁO·GODø–ÑHQ ÜÒtÙùV°{¸Râ=3¬ F×Á5Kº4hžt+_Ý I· c½‚ïpÀV1pH:£ky®C`àhPªô¾L:]H—!ÝdžwÃnêÛF–tÁ11p@ºií–‡c ±z¸Þ!élÊ𤳉ë©DÄïÎÍ5>$uƒ¶©¾=©í¬à|¯®¬Î£3\zº2ø¨7WCy{E,ÅÖÁƒ ÄÃ?ÿ*; €kRvNÇdd¯ðÓquoðÁ˃/ðÃ-9ƒ| BÜ“0ø(IÇv[2ué¦Ùü\RVS²'ÕÐËk{#ÖIQ^¹2xTHµzU=ÜÞž!”žÎDµVʶ·["…t©Ä+R¤Y¸&õây M)g—ŸHºú`ª$S2Z¸3÷Í’tÌo`¹O8ž{¸;÷MÏ^æµ×;s]˜ûtÇâÎÜ_—ç[ŽçïÎýÌ=|wî;·ó"ßÕ]¾C8‘yËÎ}åX¸æ³O—d¾Á‰¹úÀÜ/"ß§W¯Ù¹·|tîkŽç.Éüª¾ÖÁIZÄ#sßm>D]焹ëZ‡Ây+Î]µçh:ø÷wƒNòJ˜û‹<÷Zw…Ê|½®ô²0÷Vͯ÷À¿¡ç³‰ïß™;y[¦¤Ý«Q½‹+#ÑÆª+ÂqFc„•a¸Þ‰•¦E­à¸`+0sW´w&»1pÏ>gÈ÷¤v.­ô»¸üƬ¬£@`=0ðŸXÿµ@à©JM­ï¨zú^ÿÀÀ)k«Q–àøÇ% –lþ÷p½"£8"(œê8'ù,™‚ù)ʦ’H×LÁάqa³çátççÏÀ+vðâ§óÀP‘D—Ý„¨ò/oA¸&„˜ÿ`ÐØKY·äÄ4ÿÁ-œ…*Ü¥Ÿœ…†óg¡áø= M{TñãCø·)á–œ˜X ³P/…’ ¿vN–-ÍÝ—„{îŽwîœ8ª˜ûfae¬R=ôs÷ƒÞqðÇæ~ÍAæà–œïÌ}Ó‹¶|”æ>éMqø`à:*e9¸&; ;wU+0A¸e]ÎÜÜ=‹JÿΞ±¤Tšq#Rh.Î΃“'£¼0wÃöN ñøàjØUø¢a·°³xNw qÔžƒ?,C£âà|íÞEÒï÷wÆd#pÖ~»c²M[·¸å^íN·•"Xõô££H:3ÜS= ÎZ'wds:–Isϧ2Ní®òœJ™'×™’ˆM¹áVp¿Ñ¹+_:’ÊëÒž¿Ë÷|Ì.ÙÁ®%½‰oUXnñíÝ%ÓÁÅ%cG!ÒÁ¹•Q^{|z–±æ˜î(4R|Ñ\þ0…Ê­1ÿ6…:8&Dòõ¬*J€“ç ë#®äq¾ÈÀI:Xy‰tr$ŠËÏWp/‚ÙLÉqð->U£†n‰¯ôžµÛàK^дà ç®Ø¹gÕ£GÍÁ5ñ s/j÷¸ zVJ°ø '° —þîÜ›Ë×E è)ÏG#»ªã~ åü×óÊïŽ_á©÷¹ßªOÇ1Ë)"Jï›…Þ·Bï«j©ŒÂnÝÁ™ˆé Ͻ )B›¯,RŽ?¦ ÝHkYÇ |Q Ü¹¦½¤«ŽXØcªWX."Þ!éò)¥”/Ø|åF_B'ÕMæÔ—L¡q”($¥ TƒÂ…t]ÒmÁN áJ.š»: Í%¸V%‡Ϫ¦98|PÒÜ•'p2øÑºY©ˆ÷Þ7ÏåÉÊÈ£ŸUš³ÀÑŽ•ÙÃ]Ìçúú¶9„'"ÁÌ1erÛ”;ÄÀä9áÎSα¢½“+zë-‰¥2’†égˆÛ’9‹òª½JŽëÝa•ÔœK§êã‹;(g½½§ïà(b:—_?ÜÔogŒ<< …$–¼ið…üÀãŸ.(ŒSEt9ˆS„p\¹ŒQŠpAx€8EORžåñ´8Å$MÑpp|Ë'ò\\µ)ž§˜îM±ƒ“òF­:’;‰SlŽÄè…1B8TÍs±Å§!<‘V÷µÁO8‹°M1¹÷Ó·§8UçàðÚ~¶çx.æ=6rp‚7w¦ØÃI¹“p«ÕzÐÝ2]Í‹¨xÛäNäF–Ötî'dcN^Á¹÷ áï¦R#ùÊ›û”÷寇Ç$QÞsp)ùA¦¼_ |¼ÝÁ'”W5MÂ1å@ùºÍtpJù¹¬¥¼)½/ï"å}Õ®å!?Ï"(çVj“±#k®N*«5å¼;µìBÇò,/sà"ðÇwhíZvÉiA·'Q·+Ž)äïíÐ/ sWµ´XsðEžûugâ¥C·ôqîëRJ„®ËÀÿ½.Ÿo¢R)8–ìP´×õ^„cÓ* ß'yfŠ+—'£8øcS¼IààNð¤‹S„p±®¨óâW5Ì ¦8íÓŽƒb=òSìÌJ/N±³ E.6ø’]˜·ØJúáßàüOIgËÐѨ˜a,H2 ¶Qƒã{€JóÒl£÷¬ãçŽu2œl¼ä þÄR~z•äæ~À”¿¦/ppXˆÎkåyʯ¦w¤‡†Ã=ÊC¸vþ$Å ü1ÊO%æ#Ê_MbÎ"_!»P\ÖŠ×\ª={áFÒíX‹n‡pG¬Ç{šKhVý&Ú…tîºYf@·ÃÂ!&sïíÂŽw)ͯËÞ.ìá^ŠÕé…XÝ·çÞD»ƒã•‘̓yuÞ¥öp¼2œ‘V†åàþ'qÊÓCqÊïS¨Ž±ƒC M…W½ ;… SÈߣ„?F¡k“™ûÏâ”§»qÊ)Ëàû¶}†OàlÅåD£‰ƒc JZ~5}ÂEKnõÏ˾Haœ*1ðæyݘ:ø¼.oƒ¤ è]KêIÝÈpœÙŸ—U¹·àV:ÿ<íOúVxf8½nùòz™Búø0xW*—ó_Ïó;ѹ•âCg—×ä†)îð=M?Qã’à†ö~yűÉ~yÕJ!×Z¼˜¹žáo!0dæÚ%Ës/ð“”+BgÅõžÇÈ_ï= Â2÷Ëë;w5MîϽÀs+’„å9¢LÉYƒ£¸R²3\‘gX<#áÊ'¿¹zbþ]ü YyöN. ©ùØc7pƒGüÔÍOœÿ  ,‡â'pĸ¼0LùÃNËD.³÷tÜñ¢­ç—þ²VH«»pV8¾_ÙŽ„ /ý`Ï85×;º]Ÿ‚b7Õ?äà‘Mã ŒÓ>1pÄE—n¤£Œ³†<®+:—œ¾³.ÿ÷"y+oåÛî¬ËέKͯKå ÇoÄ ”o‘\'/ã œaœ‘g#ŸëŠêÈÅ*ËõŽõ¦óŠӎƒc¾['ìï:2pÌwK†Å‚ÐàšT1~€ï=|+ùs·j|cØ{}ê;:ÆŽ½ ü„3!¦'8C4/¸âÉp ½81Ʋ2P•éjfA8.’£ÓŠ¥œ3Ü!£Ö]_˜þ€RcF¶w˜¡”ûö­÷¶â l|2<³N"pJ`“Càõ4DÍÀµŒ1G¸çà˜B~L…†QUO€# …þd¶Y†t {ËÆôgóÏÓ?¬µ»¢õö;øã6ªX=þ}¸Hà‡æè8e½ûf¶è];† ?F-UdApaŠ>ˆz¨ÂéZ¬×ÜêpºÈcœkËŒ/uä7£Q³Úêš¡¡ÁëãóhŠÓ™ÛppB GU³ÜnðžcùXèçzqºQ7Fý] ±›;8qR”»Kw(Tá:=D¡ë>ÎÀ Ÿ¬Ë®\/½{âßy€têåÛÂåSÒ¹Á>"\/‚pÝÜX„¦ÃU`àTYÒM#z®w"‚ñ©û>éF §¤3‘®Â…¦PR1B¨Ô%Ž_n™SQ©S†ë¾hq‡t/Y9†‘Ÿ{ÉÀs_÷sðˆD¥¥ÁkŽœ5v~è‰n ­Psƒ3º½¤}†ñ}¿â\¢W°\ +ïÐå±pZP*š<…e¸á‹6áñô¼…£€Ó´|nöòÔN¡’ {| 0­/^·èôf<µSåÅõ޲ùè©‹îw?vYw🸬AïF †ÒïÄÀklÁ]|Él}õxR9ôNÑÍÙIלµöy¿¹èÿËö~=K¦HGÏ­¬Ð;V6sTààØù´4xÏÀé!˳þi½3pÈ÷i†óò;wÅÛ(4•q`O×;0šÀ1!¦dšÄø '‘-怃R"S†K‚ngà$ýz]½•š> E{ÏtÜ næ?à÷hŠÞƒ×ä¡'i]tð̳&cãÉê¿áOc\—:¨ËüipÄ3ß-[æOÿ?µ÷Ÿñ§ ^ãW7Ìü©”§•K›o›ÃærZŽ1ü)/iup6f#¸ø];ø?K—T £¤øŠÃüt~Û¼Kf¥QæÎà;¸\|?Ð×e57ø©hsq,ô½Cé˜<³_JGþC­|:_·Ó_̽ÂIÀ©Ü8]œ{ƒãÁÛ ;øü‡rõé÷î|}›–±(Úžî ùr)ÀÉ­¾â0÷ÒÔÖ¿Ž²òƨŠÃæMÃÁaý¨¼q»ðo¿Î¼âKõZ„¨ø:ø ÞžLâêŠIòÓÎõ ÙMyªÊM{G;ô¤¹ÜüÏÙ–<Ñ\ÖpÞ°Éi¸!ÅG˜wÖ¦™«rІ¤“¢&ŸoïÇ—?¡#zÍ6kštÇyfë!FÍ:T¹ñá’['RÔÓ<<6jWƒbÙÛÒ ÜJ‘v=æÃÁ?+Þ}Ç/Òk<1ppx};ëìÞÛ°½³b®›—Áûþü|¼?ø „= Ü9(hV«êëpiŠS«.«;CÉ„¸ßAu%gžŽóÁ¤¼r à^Úä0UQµޏXÏ~xе, „ã›°ÅͰ—ÀÉ!8«JÅ,“I…k®w”ïjœqü¹·†´3|÷ï«”Là4Ï]Ž&œz/\ÙÄû׎‰™o¶õØ ¸Ñ¬uOºÖÃèàøÐ>=ð xÝî’fz÷xŸp‘÷wTOmOyÿQÓDAõ”Èìm6ûË’B›­“Nsup,´†±V½}H‡„VÛäY¡ÍV?G:¤Û'íʨ´5ß;m_í%Ñö’C¶x;8 ”˜¡œêœ“E»Á‰h—+JFª­ àØ17ÞÞ£¢m:8qÌ®yˆh;ËôND»ŸD´%í|pT^ÚU×;mÑî7åND;ÜíF:,Ú^ÐÇ£7šéˆvR÷E»Á±h›±›âæCíêÒÁZÛ)§ZÛ—Õëü‚hW¸&wg%Ñfá†.z¯aÝMΈv”DÛ[¦÷ÇE{Œ”òØã ‡Ò;í¤¹Þ‘hkIkG88mÿ€hWÒaÑ®j‹¶ÓÜà‰h‡´vƒ­žÿÏ“$ÚÊñ¢­´"p,Ú¶¼ž}"Õ†{Ñnp¢µ½’´vdàÔ q¬ÖV&ѹSÑöÚò¢í•cz'¢ã}­])Oœi^¹û¢ÝõE[[I´m'Ú‹v1D—D»‘‰¶rQÐÚfäĆˆ¶ó÷E»Á‰hw›òRþ§`kÞ8í0ÎìS(‰¶ÊÊXí§‰æE[Ù@àß0H¼ÖLïX´U<m:x,ÚjNA´CâzG¢­$ƒÄûÀÁ‰hÛû¢ÝH‡ý(•qX´ugǶÞÑQëbˆ.‰vƒc?J%ðîòz~líòŒ$±µuõdtpj$ÅfÈv¢ àDk[-ˆ¶ãàF³ŽD"Ú®‡éàD´U,¢Md³\cp¤¹òY3òçe3x¬¹\Qúbf€ö– Ñëþã¼?~›½eõvpª¹¢*c”œtØ;=Òë$Í¥98Ù”o뇰×)8 í—û„½í àdõ~õª`3xÌ^[ö ¸âŸpQò?þ9 î7e"ϸÞÑà†&‡Ù3…3¶Ñ|…Ÿúgº¥õŽ[Ù”¸=£{ažl lríëûÓœzq’ä1lïtÿ‰üžÁ3ÎKi©Ø Qß´ÁñÖ0z>1GÙÈ ^I‰zað—?[>@¶bd=/ù0¤¸¥èÎe³œñ0 B«)œíhlâ ¥Ó;ÚTmmÜ{w íÙsõ¼Ëõî¥È̢ǺÁñÕ€À‹Íh×;^cq|b]7:ŽߨZí/ÿH*-²…˜÷ÛÄÀ6‡Z! Ý!¶Á©FL‚p%:xª½Õ‚ Ó;.3W5Åé,jˆÜà=É t‚Ôu+£ƒÿD¸:8ŽJA'E¯8Q»Ec]çY±!9ÓNb·"SœpË$ N/…‰…?˜0×"›ŽD0Žš´äŽEpN¹a<Ë{ œŠ`4ÂANEnîD¸ÊIŒWˆNrªz–¶œ®÷ð` Ðvþ™6wâ6ŠhŽ›;Õy/„êú“د[Í]Fêl¹ª…ƒ¤±ó5¸~l¿œ¤&2pÆÖ–NOŠÀ‰p™z‚ zÖ1pb V;‰xÜ47xbä9V#N?N¬´QŠ”®wFRä˜cœ ´4rlÙÞ±FŒ*ñ ƒI‡‘§1ž_.·¦ÿþ7^«^M•gÐ<õ ùSˆ*Ž}‡™¼* v.‡ ÓÍ ‹=á½{—v®ƒ ó+¯àà(ãIÙŽÒÿtPW¨æ‚-U8IÕÃÂÑ ¼PoƒBäzJ6#p|ózòk–0|9;$ÇÀAïÚ©ÜÊ‚Q|“×Qdà( :hmØpR–P®w號bY†ñkNïnz†ïjŒBs ¶ü‡„8š¨Ô¡ÇtÈÜîÏf…3#"Ã8ò_Uq¿ ·»ý½ÄÏ"€Ã6;ÄTï!åmyWÎ= Nbƒ—Çõ®ö…ÙP$¯Í”P„;8øñ ›7åî¶XQî¿ éû¢Ç”|8ÆõüQa2ÕVÌc(qð*2p§°)\ÞºO>´ª‡ŽI§ ïšíÝb—îÞŸ#éáèÙ5Ø¢*CÚ ÇÉ<|}rJ·šM@ÈwÏ®÷ƒÒÄŸ]Þq=é™{zÝâ»2ó¹ÿuë±§,rp¸©¦åF²Ksð„Çf8Ô•C½G 5­Å+®ÄpTÎsºN#R#ïR¾!€{4ÅcÃ~rMÅætÞ!¡·mâi«N ‰j›Ü ­_åŠZ+vÅM­:ÙTqzîé{ÊgÎrÖ¸íå²FT3Ü@m£ÙýÝã½(•×2fœáàh/Jnî=ÀG<†zIÀƒ»L˜6·¬ NQsR—m4E;Îë=Z¸`•çæžªœËŸdM T¥æŸ·‰ ˜âXü 0 YÉkž°Ôã›–Œ]w€¬dÊ?×ÚDwãT=î8,iòŽ;ðµˆòŠeœ¡Bõq¶ëâU°ñÜþnN-½*«l?ï°š÷Œ¦þäOÐe›@æc-+â -9J·µÌ"€“zõV/^ †…#û+lè"/øÈÁñ™:•¨f\4†S•8…ÚFî0¦KÅì°Y'lfw˜ÔŒËc,åi¡š6΢:I»)!gŤSg»nL ^ŒµS=S³ÇeQÊ£š=j*>9WÉRh-61p¼¬M(U²HÑC:ɧÀVC­c‰ö“¥þßÿ<½í7›ÿþçÿ€Š^kDyLP-1.10.4/Data/Netlib/vtpbase.mps.gz0000644000175200017520000001126410430174061015745 0ustar coincoin‹èK®9vtpbase.mps]ÛvÛ¸}ïZýÿ@¼l’JÜG‰×9§M³šÎœéÿÿȱKÔ¦rž¢7v"¥×ñG<,?ÿü~;Nã{üúå×Ïÿ½ýr¸~–þòÇÛÏ|õ¶¾ú Ÿ½ÁÕ/°|_>{½^¿¯¿ÿçþÙtý=Ÿ«+W®Ü|õýÏÍã|õû¸¾ºûœÀç>'ð9Ï |NàÓƒO>=øôàÓƒO>ø à3€Ï>ø à3‚Ï>#øŒà3‚Ï>øLà3Ï>øLà3ƒÏ >3øÌà3ƒÏ > ø,à³€Ï> øœ?›¾ŸïÚý~½úñv¾ëìvõ WŸŸMðÙýê×>û´ô`9_]Çûñ WÿÎWw/¼ðÀK/¼ðÁK/¼DðÁK/ ¼$ð’ÀK/¼dð’ÁK/·«|Ííûñl>ó7_Y¸rë+ –>sŸŸÕÈ DV`ôji@!b@!b@!²ºº[z° `À2€eË–,X&°L`™Á2ƒeÍŠ® pm\Ë`Ÿ|VK \¯¯ÞáêÓrË ,k,äÁBÖWïë«;Î...............®fÓº6¼ðRÀKÅ9ÈŸƒŒ9Șƒ9È‘ƒ9ÈŠƒ¬8ÈŠƒ<8ȃƒ<8`Þó˜wÀµ®pí€ÝõgŸ–, XV`p`p`p`p`p`p`p`p`p`p`pïWþç÷¿¼Þ–º‡ºÔ]ÿ¶üÑ£ãzûã\#/ nà¸È=4V潿udIÔMuä:©›ê&2F Î ÔѵPçêè>Pçeê¶[56Vd}€{`rQŽ{`OÎÁtá`zµ™ºíŽ™{ðÛ (8Y óA`ž\z#óA`>Sæ£À<]óQ`ž^“óQ¦n»™—àäZ™óä™ó‘œ"0Ÿæé"˜OóôʘO2uÛÝMȼ'WôÈ|˜'—ÑÈ|˜Oäù,0O/õù,0O¯¯ù,S·Ý³…ÌKprÝŽÌgyr±ŒÌgùLN˜/óô‚˜/óô*˜/2uÛh·àÁŠ\„#ÁE ˜\E#ÁE ¸3YbüïŸÏ34äBtøˆq>t³úàù´Ï‡qÖl}Ä8Ÿ#·ž.ðùüÅbâN§ÑçËöt:QpÇÁøÀ üÏo~î‡ 3÷|…sÿT°TT8±å¸%˜^íB~&!?S=Åågò3ÕTÁVin“Ÿ©ÏÀ,ê .|«UߎlŒKµ¸Ýݦ¾Cqa¦àÁ ‚\!zE"ð‚|=ëÆ‰À "ðõ'‚ dÑ׳6œúð¬¶" bÜ!ú–È…!˜‚ƒ:p…èâD„zT‘ADêùENQÈb¨§8ôáXmE@ŸCô=˜ C0'tà Ðu ˆ "ˆõ¤)'‚(ˆ Öã§œ’ÅXOÁq"èðڊ€Šq‡è›>†` N "èÀ" K&ADêAaNIAª§‡9d!‹©iäDЇ`µãÐw™. Áœ DÐ+D@Wo ‚,ˆ ×sÞœ² ‚\s"(Bs=‘ʉ Àj+*Æ" ok]‚)8A0ˆ Wˆ€®0AEA©Gê9A¥žÁ§’õvd­v¤¾“ua¦HÁ‰)B:ðN ÜÛ1sŒF(¢ÍRHš¶^ÔÑ3ü½©•ç)ÒÕ[ ß”Úÿ/r5x…7¥öi]j³ ¾Yš!HϪÔ6l©m›™ÛÈ0‹“Å©>Y‚Ëâ$dqªN ²h:Y¬pωÀËðM¥î¸JÝ2ð¦R‡o‚je©ÔÙü †&NäGU©¶Ro5Dn{C yAC¾>s„Ó4äåoÓA…NCA†o }Çú–7…þFCž˜É ÑÛAC^†ùQú†-ô[ ‘ÛôPCAÐP¨O£á4 ù‹ÄtDPá‘ÓP”á›>ãú–7}‚†1“¢·Q‚†‚ 'ò£ê¶OÐjˆÜVˆŠ‚†b}N§¡(h(Ê_$¦#‚ Oœ†’ ß´×f° ¼i3l4‰™ìнí4e8‘U›Á°m†VCä6HÔP4”ê¬8 %ACIþ"1Txæ4”eø¦Ká¸.…eàM—b£¡DÌd‡†èmª ¡$Éü¨º†íR´"·m¢†² ¡\ŸmÆi( Êò‰éˆ Â §¡"Ã7MÇ59,oš eb&;4Do« eNäGÕä0l“£Õ¹5T •ú,;NCEÐP‘¿HŒÐý0K÷Ã<Òý`çŽù)2œ˜»ªûaØîÇ:?–ÝŒº4¡¬Ðý°KmoÙB`¡ûÑXõ»–Ù`¹î—6° žš!HϪûaÙî‡kfBï‹…,NB§útǽ ,´/&*‹¶“†©‹šk_T¸ãàÒ Í“Ý} –yTÇ$à æU} Ëö5ZuЛzA^P‡¯ÏðÜ»ÁBcÂsêð‚:|ÿÞuÔá¹} ‡îÖ mÿˆ:è3Ž /à æU Ëv,ZuÐAAPG¨OjÝ»5ÁBË!pê‚:Bÿ¦vÔ¸ ‡îž ðˆ:èÓ– Ž à æU½Ëö"ZuЛ£AQPG¬ÏãÝ»gÁB3!rꈂ:bÿnwÔ¹ ‡îf ­Œøˆ:èsŸ Ž(à æU]ËvZuиAIPGªO]Þ»™ÁB› qêH‚:Rÿ6xÔ‘¸-‡î. MŠôˆ:訠Ž$à æUýËöZuЛÌAYPG®ÏÖÞ»ËÁB sêÈ‚:2×& JGËÀ—¶?Xh?äGÔAŸ…udN0¯ê X¶3ЪƒÞ!ê(‚:J}fúÞí:…S×°KgÀ>Ò`çŽù)2œ˜»ª3`ÙÎÀ:?Nz’'tÜR÷ºG:n©ÍÏ\i/ÝQwý}RÍÏÎýðÍÐs‚ù¹«j~ÇÖüC3Eòq3˜ŸIÈÏTß°·æwPu“Ÿ…¢ÝÁnÏñBzû‡ ¸•ÿIY‚Q“ 'V•öŽ-í[Ï·AxA¾¾úaoiï ¸öœ‚ ÏÝ”î×~Nu¸€‹q‡è¼ 'VUðŽ­à[ÔAA¡¾Õcoï †œ¢ ‚ÀÝUî—xNu¸€‹q‡è'‚ 'VêŽ-Ô[OðADA±¾°eo¡î TŽœ’ ‚ÈÝîWrNu¸€‹q‡èG$¢ 'VÕ㎭Ç[ B$A©¾‹go=î "Nœ² ‚ÄÝ×ílNu¸€‹q‡èg2’ 'V•ÝŽ-»[Ï(BdA¹¾fioÙí ðÍœŠ ‚ÌݘíÔe—ªk.Æ" "È2œ XU];¶ºnE@>† EP”ú­½Õµ[Êc'ќՎ4ÐOš‚4NLQUD;¶ˆ^§a¸W‚?æßÖlê‹ÇVpCÀÿˆõ";ÈüÎí O[¸T”ÞC™ê»Ñ¸™LÂL&®ª¤ r”ÊßîRŽ š†&¹b»OÑ×wÂq y!Ï•\Ô}ì-Cž°ÚÁ<2䆼\Îܧê»ð8†‚ÀPàêê^î–¡@Xí`ˆ  CA^ëß§ë;9†¢ÀPäëÔýÌ-C‘°ÚÁ<2†¢¼¾O1Õwr %¡Ä­d©{z[†aµƒ!2xd( %y•xŸb®ï|äÊC™[æQ÷µ¶ eÂjCdðÈPÊòê>ÅRßuÉ1T† ·¢îíl*„Õ†Èà‘¡"0TøÕͯr«çõ—kÔ§3·úè´ˆ+¼÷üòO>À•G9ø@Â¥Öæ&xŦ4)xÅ‘<)xÏTÁ+öLIÁ+΂IÁ.ø¨ ^±¥G ^qI >rÁ'UðŠ'RðŠÓ/Rð‰ >«‚Wlˆ‚W»‚Ï\ðE¼â~½¼b¿¿üN¿uóM»y¶«¹œèGÞ>`à‘ƒ'3VnmõíÓ×÷ŸÛ¸ÆõùÆ np欬ÊÊ©¬à¡uB\“*®IפŠË«âòª¸¼*.¯Š+¨â ª¸‚*® Š+ªâŠª¸¢*®¨Š+©âJª¸’*®¤Š+«âʪ¸²*®¬Š«¨â*ª¸Š*®¾Õß_óËÌáoÇÆjþ&ßúZËͯÛú2*_Vå˪|9•/§òµþ^•øšT|M*¾&_“НIÅפâkRñåU|y_^Å—WñåU|y_^Å—WñT|_AÅWPñT|_AÅWPñU|E_QÅWTñU|E_QÅWTñ•T|%_IÅWRñ•T|%_IÅWRñ•U|e_YÅWVñ•U|e_YÅWVñUT|_EÅWQñUT|_EÅW‘«ßúZ(…Õz-wÙŽX{ßTÒ”Õ¤²ònÁæ¹Ç”¯¨²J*«¬²*]+úÉ‚íŠ/úé`”UPYEU\Iå+«¬JwD«Ò—UñeU|ÑgT©¸¢ÊWRùÊ*_}}9_ôFÿ6.§âË©ôåT|9•¾œŠ/§âkPñ5¨ô5¨øT| *¾_ÉW›íâ+¾†ñ÷øõËÿÚm‹ "œDyLP-1.10.4/Data/Netlib/maros.mps.gz0000644000175200017520000012635110430174061015426 0ustar coincoin‹dK®9maros.mps­ýÝ–9®- ߟ1Î;è¬ü'/U]ruÛ•ÎÜv¶O×~ÿù"$E '”â«‹µ-Î € €äËÛõ´ý÷vùùþëÿý~¾ÿóÿ=ý8~^_ü÷j毹ٯÉL“1ù²ü+Ò/çè—ŸèWf¸lÉ—™‚¡_‘}%úe\¢_Sd¿9ú•è—el ì‹þMèßt™â|"¿Ù™ôË‘/o¬e_¤/ÞR¾xèožÒóÉúÅþfò´e´ìËñ/J!rœg¿…À¨³¾XÚ—œ|ý ³Ž/ãØ—g_Ʊ/K¿¨Üƒ5ü‹Òs”ƒÁÓ±Ϩ{*Íà©.…`ý¢ëõügØáDœL&_–}9ªóÑe¢g‘I%¦BÆs$ôba¥PMŽ¥ßÒdØQ2—,û¬Xì+ѯ0yö•è—c-ÿp);ÊÏr—Øß·¯eªò/K¿ˆ4—IæéÃÝ5dûb¬¥Ó&öÛÍNl_7˰~9¢ƒó'ѺÛ'ýºÉý3¬gæÎëúÙW"ű¿éØßô틟<ýÑó”ƒó—£8Ãp–áûòŒžgÓÓùÀ¿…Èþf,ô+±ßû-;úUØW¦-ÃgÛ£3û*ô+þÙå| ¬%mbôRd…QÏÿ²ì‹Ž/³žeË¿ŽI,{öÅz–Ù2ïãKaü,ôoÚ»'°}eϾhKKl²±Ô˜¿,á ´Ÿ–IÌæéÕ›©†Ì_¬%Õ[&K¨ÊÝù‹ö¥ö[°Œ:ùÍ1+å ‘³ì7Ë~sì7Çóì7ïØ—g_éG.0zÑcsųy6"okyó—Ö/K{=Qœì·È~Ëì·Ì~c+ómÉøée_ŽðÅ3 æ™óžõÓ³~zÖOÏúéY?ëgbýL¬Ÿ‰õ3yþÅp¬g‰õ,±ž%Ö³D{Ø ;«û¢6$²Îü—Ù˜RË™]ŠÌEf‰£>yöEzØž,ÿê`bkxr ç,û¢Dòt ÉÓõ}öm,ûrì‹ö¥Ðõ!ËÿÊD¿8Cæt –þ•@9˜ã``cl ‘®+³JBIeþŠô+dÚ2öeiK:¢l(õÌd›ÿ¢’ƒá_„…ù/%RÏ¿ÌÿÝ¿¾±}ã7¶[úÆö@ߨèÛ}c{ olôí¾±]Ö7¶ëùÆö9ßØÎæÛÙ|c;›olGôís¾±}Î7¶³ùÆv6ßØÎæÛÙ|c{’olOòíI¾±}Ç7¶cøÆ|öoÌûýVýÏõ+Ðßb¦_ɳ¯Ð|YöåØW _™Œhë·ª­ó×Ûd~ÿúýþêo9~~ÈןßZwûúùc"__Ùׇ)ôkÝ ß¾®_YË7úÛÿíï+ùz»Qøk¥þA[þü0ä·ËOúõ}½]é×ûÿêØKøüj·¿¹|9òÛŸßéo?Я7öõõöõ×Úòƒá>ùíò“¶üξ¾þ‹âþüNq~÷ô7ö7ÿüðäëíJÿæûÿ,ѯ?È—ý$œ/öÏïùʽX*÷b¿©Ì¿}ÐßîRYÿÊ£p—ûöeØÑ—b¯Gtbþ›Œ:•{±ßÙ•{±Lî–ÉÝ2¹[&wËä`™,“ƒ½Ë¡òÌ2žYÆ3ËxæØˆ,‘ec·ŒK–ñš¶ü¸E*'èß¼ëYå ý+LC Óù‹pÐÜõåïí‹ðÚ0.Æ%ød— ›U†é™azfèì/†iaZ`¾þ‹~10L'̯?È Èlì™ÍŽÌfGf³#¿±/6†ÌÆÙ\Éׯ”›9™Í•|Ÿ+Û×ûºÍ••ãKf|ÉŒ™q"³Ù‘ÙìÈlvd6;2“{frÏLî™É=³Ù‘ÙìÈlvd6;2›™ÍŽÌfGf³#³Ù‘ÙìÈlvd6;2¿ÿ òû?¯õëë÷û û×ãë×'ùz»=Z¾±–o÷µøñÛ/öÛ/†»ÒßþøúýúÛòUûùóñ۽忿ÿëÿª£ýøã×ÏúW–/K¾þMôeùª¸¿~ü_¢Éý¸óeýíÞÏ¿·/K¾\˜èW¢8:Ú¿~üë“Px§œÿëý•wöWÞÿ/±½³¾¼ßû²þÆè½3zŸŒÞ'£÷Éè}2zŸTî}2Ꟍúç¥þù/Š»|о\X_.¬/—{_Ö–¿ˆNüuá“õóÂzva=»übœøEté¯+“û•õìÊzve\º2zWFïúAûyeR¹2©\i_>œÿ{û²ä‹ÒûüüþÅQ}þà_ìoþ`“éõçú7¿_¾¾Ñ/:ã¾_(…ÿùëÓ’/:ÿýç×·½ß·ߺ§ü}ˤÑ/Ǿ"û ì+³¯B¿ £`Ã(Ì›æËÔ/FÏ0z–Q°Œ‚e,£`Ùˆ,ÿ›l ŽQpŒ‚cÓ³–žÿ–Ú¯:>ϨöW£Øß Œ/QX†G¾ØßŒìo&þÅ($F!±~&Æ¥ÌxÙ_Ɍיõ3?þʬŸÿfô_¹ùsÑÕm{ûŠì+±/9q,îXÎÛ±œ·»ežØW¤_n‹ì9–åv,Ë}ûb¿Õœ·c9oÇrÞËí Ír;–åž¿JÍ„:–Éž¿B |œ ý²ì˱/Ͼb¦_Ù’¯D[Ò̲c™eÇ2ÒŽe¤—¯H[’¬³cYgDzΎå™Ë%;³úµ”DÙüE)¸Éñßù2†¶œ­O"¿ÙB[’ŒßòU3ÎYFÝzöø—§_9°¯éWžØ—e_‰}eöE{– û+tD¶dF½æÿœ£¹—ù+ð/Ë¿(ÎÑ–ÅSîæ@¿‰tÏ¿1Öèä7¦Éߘ&cšüéË7¦­ß˜¶~cÚúië7¦­ß˜¶~cÚú69ër,ÖåX¬Ë±X—c±.·Æº¶¯Ýrkäký"»:Çb]ŽÅº‹u9ër,ÖåX¬Ë±X—c±.Çâ=ŽÅ{‹÷8ïqkÄeý";ZÇ¢?nþ¬¿Ñž±hŒ[£1ë×}Dk_ÞX?)¯×8ÑöExÍ¢Fn=~Ëlì™=³±g6öÌÆžÙØ3{fc§;oÇvÞnÝk¯_oW2öÌÆžÙØ3{fcÏWŽ#šÅö¢nÝ«­_Ä‹uëîlýxþnÝÕ­-‰wïØÎͱ=—c{.Çö\nÝs=(¼3 ïŒÂ;£ðÉ(|2 ŸŒÂ'ÙM¸u?ö ÷Éè}2zŸŒÞ…Ñ»0zFïÂè]½ £waô;·ÇÝW9¶¯rl_åØ¾Ê±}•cû*ÇöUnÝW­ûol'åØNÊ­;©µ%ÙË8¶[rl·äÖÝÒÚrÛÕý¾ùuÕÇtl÷â"õbóbóbÝê·Þ¼JÇüOÇüOÇüOÇüÏD꺖¯Ló´%õMóMóF«Ç ÌW ÌW Ì Ì ÌË ÌË Ìë ¬Ö/0,,>ÿ ôË‘¿òðÏn+úÜÎUÏ#Kª}f6ú•èW¶ì+ÔßÛÖµøïDZЭ̭Ìa]7×/b¡[E[E[7ú¦®ôȪتØÚØÚÖµûZ­ðTm lÿV-¿id`™—š`S¿fŸ6×/êݶw*¬Î¸0m-L[ «.LwË­n‡}%úåÙou—UØ.«°T!;©ÿÍ_Þ¬ZpûÚ4ùöÙo›çxÿòô+ÙL¿Øo[Fzùªžãý‹¶¬Þáã‹þæ-ûbů{™Û×6«î_n¢_‰|¥¼àþõþ÷ß~,¥åó<ŠÉkYy­C?}1çS•5ùádÎ-|­Q¯mÂùV÷°¶² ˆ ømÈÄÛo}ÝÙP"yb¢=ßlì¾Ì™Z{ûØüÀúxÿ ñ±Ú*šZÒ/‰ ‘(IŒH2õ¤ÀÓ²^᥅ó®˜É×Ú"§SæðˆZ¥s¶§jšê±xàÔi+gªaãëT닸}4æìÍ©°Pà©ÑÀ²æ?œzxÏ¡Âæõb‡ëéû¡!’žY·ÅÚÊS =âcûg„ÅSc¶§­Jª§OðHø|$·ß¦º=/FõP˾֚ÀmÄ^Z8ïŠË¦ž• 2oåª+ܧX× Ì¬ÏD#³žÆ nÍ9R¸3õøÎucÝcì—›ñ0¶ouž–ê .@ë*|=ÊPiÏÀžêÉöCBð%½AZ³Â—Ã"„[“(܆S­Ô¦?LÁ—šmÒÊÚÇØoeÑ'JÞ#øR MEsªÕÑô‡ ©/´1já c]7ö5õ´µ:Û;É5Ê_;?÷½ƒ¯Ñ6ýÜ©&ØÂ3'bX+»§\Ò’UáÕŸ‘ïüKεà 2Øc°=Æ`;Ä`o¡{R }7Äàíô³%œ çcÉ-\/f]‡|#¾;>'¾[€¼ƒ3ÎߌG5|ìïúáÍÌÈ›á£_ „/™\Jݬ_δ°`çÝÝN“>žêfµ„;Þ*npç­dv+@ê­ ÚmUí´Á—óFcºé1¼ÑÍu^.¹46öà@O’Öur‡*(YDáC±Ó:wL뜤ufÈ":×¢)ˆZácZ·À=„S­›å(i]BðÞð°>%áá;[·˜ºà¯j;¦uî˜Ö»§uV[‡ƒUÆŽw&¶)'¬ŽÙ ørBš Np îÉïÞ¬ÖÓm(`ÿ2Eá|ÿB•VÞ¿Tx» YÚ¿$wžµ²é66Ý2,ÔÍàòÐ:ì¡u8ØÝŒ{º)Eÿ*\ÕÍÞïpà„Ÿ$Öu}ZG{hZ§}Ö%…ui—uíŒ+Þ²Î7°s¼Ãèf:¦›iH7ó±ýËó·›ÀÁš~’66ÞïrNÒÆÁû]Ž´ØÃÎ÷»i±‡p¶ØS£ÏûN778õPocr1ó±ýK>¶ÉCû—rL7Ë1Ý,Çt³<¥›7gÁ—Ë% x;Ý Þê¦Úþó¤#1|Ƚy¢-ü€n–cºYFtÓL‡tó]7Wø‹º¹Á_ÓÍ þšnVø°n±¿f7+ü%»yƒ¿®›wµyY7+\ÑM'Æ$͈nº52âÚºéŽÅ$‰ˆJª­¬é>¶¦/K:†7ø­óËUäï»±¯‡uˆ|ÊT„`¿KàzípÕYnµ#@¸±v[¢°W‚|Æ-b]á/j‡=±®ð^ N’Ü|¹“F‡–"|f;2‚waw’Ô¦…c:IjáFÕÚÊ3=î˜r¹cÊ匴ú¤Á»Õ/ Êe ‚÷fh^ºc¦Ç3=nÈôøc¦ÇÓL;ü1Óã™/™ž8dzV8snfÓ3¹!íðǴËÚ1døüé‘"ÀÕôð"ÆÆôˆ`Ñë1ÞG€ÁÛÊ´³‘¦åg!Ü›œ@tõ65¼Õ¡­¦).±Å·ð^Šæ®jûÊ%Ä`G•+ØÓ™žxÌôÄc¦'[˜â±…)ózâ1¯'ózâ1¯'™žtL¹Ò1åJÇ”+S®tL¹Ò±u-iëÚ¾r¥cÊ•Ž)WP®P U¨_8ª\Îø8»••Á”ó ã3¤ÞDì«»Ý=A†h $Ô-iÃà gaxËà,1¸‡÷ žãк!î %oìBJÞ#8†-:<Ä`{ŒÁöƒíƒÝ1 vOj0 éTxc"|pC vÇìŽ1Ø 1Ø£àqûš‚0$ºÜ—ÌtÓaêŽYÇÍ»×,Õo2X¬ßc°P|Ú08˜zmî ¦ÞIÍùˆ sbñ-óñ$±®…c>Jþu†ðާÖÅXoù}Áº®pVƒ²x›óÉËN¬wîx¢Þ%agcJ ?Àù~€óüÎÇÉDÁ½XË‚X]u³!¾Ã×Çx2çTßI`ç2†{ƒêko'Hn%…ϳ1§úÚ‚”¨ðå6~”$R«{ïðõš-²£-Öá, ännk:{8c8“ûL†¸ý™p(–±‰e <±£1έ‡åñj“¨_˜k9#æiŽ­ö©œ!¼e„Tuo»Î¯W‘ßbpf·O³ÎA8gÏ›n&®u=u¹ó§-3XR.ჇXçŽi«¬c›Â0¦u<‡>Î…yÚÂ(­;¦´.Ž08D´›\/ ÜGžE¨V{2RÉÚ~€Cᇂȡ!ñÆxàÓíS®«õk¬‹ÇXYDÌ"z<­ËCÑ£i½„”!¹ûcœ÷Ç8ï¦uÙ–[ã›Æ„b|óÎx+†àV_n2Ì»?7Åàëe D¸æ¾IjO÷Æs²õŽÁ_½ž«c°³…ú±/ö&3Œ£cYç×åv¢eAD7žÎÓa8ã‹aÀ –mµîY·µZþ¶àk{Í.óµpØ•|ªoà õ\Þ ³È Jçaæ´óDá©@øò¸O¾þÝî3Î%M=ëÀVÊ ³×ø3„óÙëÜY˜½¤Vjò¾àœ"8¢›†¯{‘@x'Ÿ“$‡œßœÕ´n_pö˜àì1Á¹}ÁyEp na°×SïwKÍH)›ŒààJ…ßß‘jᯠΜ;"8+šÊíºmÆÙu)3¼³iknI¶k¥Þ ÑH!ŸÎÞ qut€HZøËæÂRCý¼¹°º¡Þ3V4•Dp^œ}j»MEóò$ME oçåIšŠÞÏË!­³Ç´ÎjZ‡'…oÖ†Þ`¡:÷Á_2•ö˜©´ÇLå~À\¸c‚sšàð\ªp'˜Jíc_dœ"wWç» %doåƒ$wH½“»x§‡§r§j³¼"H !Ø•uhËÂGö„Þ‰÷+ð§n5ÁõaíÓ™Ú:Gü:"Ÿ÷EyHp¢S„ ç¼è”JvЏó Ë n‘[Ϻ×g nb9Ü*:{‚ó)Aö|ܳ i ˆú$þiåî †[‹çec¨-{ ,û“¥ZA›Zx§&Ÿ#̬ør.ÂÛÌŠ‡ö8;Þù-NåLÆ‘#¯„Þr>DabY©[ÄàXmðŒkáxú ¬„ÞM¿¡¥Ì‹•¶ xb.xAZðÜ€£Cà¯8:´ó’££.xá˜Ý ÇìfíæiDpñ˜§ŸõTB„ðÖðÁyÙl-HçåyÉr1Ù„Þ±nÙ´{0/gyFãZ8²ˆUO{öÑCx¦Dü½¨¢‹ Ÿ ŽÎðtlÆ¥§¶7ÉAx#83&¸$̸ꥩ‚KÇ—Ž .\Ž‚«áÆ ç.ÌzÁÕŽÜó15óP³$÷š#¥Y°ÖÒfÕÖí.¤ùØBšµ…tßÒ–c–¶<½' Þ¹˜C¶H‚s'É«lá¢Û¾ï{–c¾g9ä{®W_ó«lo3Uù/›Åá\îg9 –üµX@…¿ ¨)pƒ¿>aïw–¿vH>þéù“¼“•BúÂ[ûV·UÍÌ-eRƒTNÎ>y¼q¾…c1 l«B=(’qáëòø8eJ¢Ú ŽßmŠ ð^ƒOö\0ë2­Ä B–ÒD>Õ‡ÚëÍÎucïÝ`_¨uÍÄ8Û±V×>Îý‰eY,m´(¨¾üï4[•ÅÚĪ›†`3ƒœrq¼Õ¶ý±9°HÝ,óÃk_ÎÛ!™ÄáÁùþûö/¦Á^xûãÄ›YZYf9BËòÙ@x;ÜþÌ~(“»ÝÆ>9!ÙEå¾D]œËoùùj`-¢Þ„6µqF4iô„"Tmš‹À›{·ëÅ¿TîË|˜u–j‡Ë« ½Ûl„µ™õF2¨çŽz§±ÜÉ Û'¦´®Êݾ w÷´Ü!õÎ%°‚Ü­CpãWÃæÂoäžD¹g̺Fîɽ kç­¬àE¹»cr÷ÏÎw>vLîȹy‚â|ÞÉÝJó=@8—»^&Üd0ë˜ÜíV@Oå¾lH§ÔÂu¹7n*-¼¥ý„ïOŠöœ!<Ë^t=W6l¸xÃÓÚáõÎ*DÉ* êvX+XÇÞZ…\í³®ÑŽ$¬®ƒÐŽpL;¾vX#x’½<ÍZÁG´Êñ—š2ìžì|n•øMCõ¬8“{ŒÁçVT¹îÇý¾5©cŸmnŒ©{/'>3é ἚÞ©šžXm+œ wŽÜÑap㡃Ëxº,sÞ0ØøZ ÖìHK Ç >IúÔÂpÞἕNôÉ{vrk…7–‹¦À©Îû1u¦óÖÌyC¶~–0ðÄ¥µlçè œÕç;ØØœÈÎÄJ‡0NaÂ!c§3„g™ˆ{^>Ä%àpÏl;œ ƒ#‚7 ¶Ñá2IZwnt½Â½­g5äJ+•/Ÿ|~,‹2OýXë×}«õL ¬ÝÖKž9Ñ4½%Õ€k ´ªëÅ-¨ªÙ]q¤0†R÷¹°ˆL,b×y´5÷NÉœ-„sÎ'+cÙØk¬3›}Ö5JKã¼…q(léÚÒ<¼à|šM»P+Ô>¹È‚³Ú2ŽyÚÂ1ƒOO!¼cð©×æY©>ÿæö8Ïyº0Á{ùœ6žZ™óõÂ]Ì2ÆywŒóîçÝ1Îû΃Qx§´.M1ƒM< sÉAê©y5"ý€µñǬM8ÆùÕ^‹}sË ÉtêÒ”éE‚;ßÎK?¤óá˜Î‡c:¿Õ çò çcÕºÂB#°Î…Þ¯ï9$3ĺxŒu1îëfÜßRšî6ÉŽ6 äCÍEÈY€sïÏJÎ}ßyTë÷¸ÈƲ‹ÅNîLò–&=FÒK¿,†7÷bTÓÁßþÕîð¤ÌŠká †ŒÄýøe—‘æ*èH\!³w5c½'7kFÀp–»5ÑVêN&;!¦²f@Z™%èÔQû ‹¾šBï‘zÀßþÅæx&—:|ùÆ2IÖràÛÅ2ƒ«³Ìù˜*ƒ›sÛKób0Ï8#'¸Æl1Ø1xõ “œÚÜšç|¤ï¸µ¬#ÓÎÈ© s’äÞÂ1Oë ¼ããiŸubˆcÓM^ÎÕè¦Cšõ¾6{·À¹|hÉL+R‹Æà…Ýy”Ó€nÚc“»¢ÃYÖ›ÝÄD[Á²žÙ È2˜¾qòu&âÙëlÆÔ…ºhÁÛvïüƒí1[‘Á‹\©§1«@2¼ ΦlOÒ‚'Pw(5¯Ågœ=fì¾UЕÖÅ{TQ¨††3„7"º)f»\º¸·µ õÞƒ2gáÁgK³ÐN<7²ˆÁ§sñÉuðÎçZJ‹i«Ám¡ƒõrÎM„'ëš dpÎàz~ŒO›;êòìݵñ˜íˆC¼LÙ¼Àà„ìD×wòÎ,Œ-’ßál ?ÀàtŒÁi€Á^p/B̘Cܽð¢wOTŸË!w;1È}ª©/–-¶´&ÖIAGzÁ±ÀÂ-s@á$kè„õ‡»M¹x«‚VxnjTG\éã,N>Yš|rB˜ùvß'ûýLÓ÷tW7IcwÒe– îÙÚ[ë\š›‘ÉžÅïÜ3ùûÖ„E­,Ijy#^ú-, 'ºöz)ÕíH%CÏ_z’Øáõ¦çÍal³RÄaôpÆoéD/ÕQôðnˆÉž.#w¤T×{9gùPÏÕ&2ÁÉó½^ªÃ"š€Yøñ͈W¬)pž‘ËÂù Cú„#ç’bA‚[j €³±/Äm„ÄËŸÃÔYó„¦Ì-üìZøïÛ¿ª|Üy¹’Dˆ4‘ò›¼W›GAb§6©œ‹ƒpnm"oe‘xg×*gÌà@J*¼e°s—h»\uš_äSP¤vQá4R»IÈÛ]4;eî¤k¡x¹„Ïb$Ãz©62aêÍ3cyüy,g È=ïlzêƒc¾/Ê=ƒçÍb€ð†Á«7ä¾ÁCu‡x]µVýfÜósSq{¨y3Ì‘¥!lAî@¦ÙüOQxrÙ“ÀºÅG ŽiÝVæŸGïPqÞhÝüØÌKY­ƒx{³Ï’îÎÞqè$1¥…·‚»SöC¬óÇXç7Öñ]ÎvÑ}Ã:Zªû€w7çÇCÅC?ÀyŒóáëÂÆ:òÊå9´.&ÛÂëR‚Öfæ]láXް®¦Cf“dŸf]…{ë-ßc­¹êf™ N^ØÒ!>çÝtí G±XÖH¶®xl°âÂã“ýË q ·<³7κm•1†=³·­°3OÙM)¶ðŽu77|ˆuöëì1Ö¹ííÁ—´n[&l´¼þ k§¶n»øºaÝrxˆuîëÜ1Öyølã0ë|e]` )™°Lù„õÇXç±Îc]@ÞÅ8ë6¸ÍÌÖyº¦"ª…°uáëÂ1ÖEìÓŽ².FÈ!»2üÝÅÛÔц~@ëâ1ÖÅc¬KÈ»g]¬«g½e^K$Q˜°%|ºeœ‡X—ޱ.a] ®¾´LT¸w,6›ÊvE?Àbéz;ê<Ûˆ—ý~|%ˆ—ßÜš Ö‘#XAÊ‚™HÒÁ“½f0/phƒ;ÙV5cºUõ›ÒÞÃcÏC²Ç8d‡8ä‡:Ρ î½åÎØÊ!ÇuÈ¥ÞëÐlíâ‡Ü1¹!äŒshÛ|Yæ8øíù>ïcN <àt(ãP€²!3;ÑÊ?Ρmõ+ì(µ™¶SÎíy¹©{æw¤µ.'4õô4¥<~|ÓóîÃæÝ‡W¼ûpÌ»‚wÏ9”„—GOõB¼ÆÓzÓäÂÁ$Ô(ÐM¥¾”¼VåVÐûûÖ¤1P¡…ã[Eð$¥ïSxsÚo‚§¤—jÈž:xà&“ðègpl1ØV‡l1Øc°b°Ûg°Q4Øcð¶Ì$óŠ»c vÇì†ì÷lûc ÞV©d_a°?Æ`ŒÁ~ˆÁa—ÁÞ+ Ǽ­‘É¿ÂàpŒÁáƒÃƒãƒ18V¿bƒã1Çc ŽC Nû ŽŠ§c Þâd)¾¢ÁéƒÓ1§!ç+œ18W¿¢Áùƒó1ç!—}gEƒË1oÑ´”_ÑàrŒÁåƒËƒñKaœÁm ÀÇ|;¹duŸX¾xÁ8š6Ì`)š6Èà;|—Áf@ƒeaŽíäLÝÉåL„9¶“3Çvrf`'7“ßÞtx¡Ð’À“ üæÇ•Á1{(¶˜ºkޏnðæXwApbÿÒÞï[“:*vžœ¦yÀÑ¡&'›‡“ÅǤ'ëùëé¡$<ÐqÁÛ{ÝëíH!JÏ8“K¹†æ=XÔypô|ì1ùØcò±ò‘^Ô;Õóâ)ˆÑh oœíú¢žkm‚Ô雵·Å«xé£ZËäÔ%'n¿œÓi÷æî$]nñxpç•$Þàì±É¯L[Aej*Î|ˆäq¥€çO'8ÇŒGRz„z;Iëô£ ó×8œKqVÎ-)Ý .·ðò±Çäc‡ä³:J6Fó‚|Ü3òiÞHô2iáså$ï¿rX¼ÖAê³ÛÀ.—-Д֝;"Þ ,_ÑǺ4´»ºŽ ö;\tÞ Îԣ܉^Fà)ç)¼ÐÍõ-´…WÕˆà³ïË•°™]vC&7œx ¼ŽP¼Øv‡;xaYôî áí£«iÏ®Ï#ã¼Û—;}ÂïìIZ øLîâ:;aÉIÁ[& ÷æµ:/¬Ì ¾Zù}W>"8ï=2p½)TÇ:(^)& ¼ïI’h ßoÆ3c9X´9ôô¢æ¹ïäÎAo.}ž¶]‰ìJ¼bêÍÓÎ#I–Ÿ”ðÁîL*“t¡²/ç<`·4Rs“Âã²ï>ƶRõ¢fm%¤×Š8róP…ã;`§3‚÷ÕÑxïþVB3Aêl%\kËÐ:8¼«…r†ðvþ¬ëpág±éƒ|+] Îú¸ùr1Ü]²pÀÁ%.'á©ï'V9 ïù%o¥¸½^5 .³m`ná˜CâµÇÄk5ñî.;ÁÑYÊ(OÒ„máH¼²IóÞú±^š— ÁMñøyVËo,änæìÄžôP&½ƒ/‹¯##eJÇùß·µW¹ÑVÛÄòÒ#HçˆAÚAxD½s·»Í;ÎÃÎçìXŒO:Æë»±?ó@„áº)]±¸n@8gmåöæOgø:øC&{)@Éåã\PÏW¬©ówÝËzŸŸv©Ö:ö×ç;6œ?çX+¿kßxøšÞöø€ß§«»—.‹l§Ÿ?6ý¼$Þ(ˆ×Øyú(ýøôóǦŸ?6ýâÎÊÒM"p㋌íjÇ(ùûiJ½~+õ@ï \f\já&V<6±¢8±N#1¡gnÇW¬tÀ$Ô;ùxaʨ·å£ÎF¬M:&¸tLpi`ÅB‡åoµ ÅgiÅ -¼K­¨+–GðQù”bkâ<¹.;{y+“FŽéd/o¥U+™…4—§™…Û=Îk¾¶ŽÔÇî˜|Ü|ü³{!n¹ü1ùø§öB·'d`çÛ½P²\þ˜åòÇ,—#:p>}T>á©•¿›Aš?ehþÎ[nƆ8ŽÍŸplþ„ùD¼öž”kn©|*¼D>M²Tï@®0ÏQ—˜`ÏBB/œ!¼R¯òao!ÎŒ#áätlìéé±³¥[º¾}ñÿàì †s÷Ï­!ÜL«eOÎI­T®ñçl»™U‰^„<°v;r.OŸºd¬ßXŒBÚ‚{=Û ™¿ðh軹F€3/†>ÕÓßôF±Ûü‡pö åÂÇ“Ä:{ðκŽùx’XáO=ë̬ñëÄú×Ö3ÐÇ/_ý°\ÖMàqƒÇø-zM©§ žÆàÛó9Ý,Æáïžw]Y÷mÙF Ÿ­ð·å_Ÿ_'Ò$Ü Ü~øó{ÍJ™PÎ Âþ ð0OßþÆ~˜V¹7ð¯k«/f^ ÜÍ%¸ÿÝ wþç‡á­Vø÷ŸTi7›t‡{ƒ^ŠfǬ3¾œz¦Ì¿8Î8dü¹€±Ÿ¾8¿—8û½Õ ¿üä1SxXÇŽ êþ؃ 6&@µñ™w>@µYÞFƒj³üá›Úœ¾”âS;U›b3WÚ€ÔæÖJ`ÝĨGƒ2ð싘u÷¢¢žu±pÖE•ëþÐyϺ8-„“½7ˆu_¼uI¢¾±îÑ Í¸y OF ¬í³.aÖ¹[ÅB˺Ó›ÎÂ벫c?ÌS‰Öͦn:¤u6eÎù„´îÖ jÝâ¿Qx6Ê õû¬Ë˜u÷tqÏ:ã†ÿlŒU„Z7û®Âé„] ¢C¬ó%p­Ëˆu·VÒ„eðb”'æ÷YWÖ9¬u³ vδnî|¬›¶*ÀNµ®„„–È/v‘HÀÔ넽·±u··in¬£÷Á ³îG6`ÖÅíq¾ÞNØ 'ì<—<„% vs+¨ufÊlÆêÔ»XZhÙ3ô¾Ý>ëœä]8Á»ˆÞÎKÑ»pÞzNò.ØØ­ÔŽÝ»=6vûÜØÛÎGžˆ{Üõ*©{0›é!œê$xVS`®‘‰ÀÚ¸"ô¬úwž²îÖJZãõÍ=H¯8äFpîW‘öÖÆóõÝ$씆:ß¹>9¶¾›­á ݃ÙoȘ:u–VÂŒ‹”ºÝ µgzƒ¬³“äϼ 4ÌTÚ ³ÎÞÞ@‚¬sNœÒÉXWrʺyïÃì¼…†úÖjijºEdï¬+/ê±ÎeÌ:Çä^áŒu³EÃî“àÔ=˜ÕÆ­›?S˜zuî­àzVh6öÍÎ{û„µV >)ø œ±nÞäc­syVÎX·h-b] ^¢NXwk5|°›{Ì+¬܃» ƒ xä3ÇmL¬»©¦NY·½ƒ¶.Î1ƒ©Ó »´la¶n‹ÛøW¼ +Äm¼µu³Úg¬›°Sºp…+X——uØCçdY?0uêœÐUFsJíöñþÖ aç-tÌr3e‚öÙлøR[ m€c_Z }sÌšzªÁ±ÇçÆžCáØö¬¾ÌkŸ°º“ò‰QOuìþ…±KžUÁ¡Î™kTáom+ì7v>a‡¼Ûÿv}ÏÕÒÆÆž%¹GäUÎ"õÎ]#É\̆6C81aÞZà “‹Ž[9¹µÔ&0Ám‘_1åØú^Ž­ïåØú^­ïn[ßã+ñ:çv­ œðÖáõÝ&¯»{äNXÝ”„E*˜Œál“¥EŠÅ¬Ü¶¾“_`´¾ )­Ùi±ÞNØt6Âé^&OBЩØÂ”Öyœ›(Up­­cÔv~©˜L/°N°óÆÅ“à/fk\#x‰Äº…stÊÜ.ƒÙ©6ÕX玱Îc;Æ:'-aˆuÞ‚+ÇYçyVþ’gEá/xV>æYÑ’I çËD¬ÆŠ-óž#BøKžU…¿äY™dw«M5¹',÷­Ú´•»ÍÂÙ2á·ã_Í2áÎ'¸L082ó^$cø‡ç­ ÜM9ãÎ3¹×ü0]eE°Næ;­ueó½)•¥ðf¾G+È=1xÞä_‘{>&÷|LîùI¹ÇsÂp&÷¸†øZïÂqç$[Éë’{†rd7Áä¾üá­ÜÃÜËfçó+v¾¹ßý~ ÷ûÎäN“;;9Çá^€ Á?8‘ûýÀ&„¿ñVþ ¼Ê< Ô©ÜçÍô*ï?@øw&w? ®Q´t}·Ûv@®ïVän…íÀVßÝÎ÷à2„³õ=¸jëØúÎÊÃ9Ü ð!ø‡çr·ËÝNPî·²s'ë;­.gë{SœNáß¹Kì¤õ=2x˜½² ´Ân"HÛÿP„s¹KÛÿÀ÷ïGÌ‚´ý—áœÛyÃÖw‹#f&¢õýQSáTî¤tŽËWÞQøð|§kœ­ë»Xï©É]Xß·zÏVîÎG§vþVŠì US¹nZ¸é¾]€pj.È n.ø oœˆ³¸ù¢r//&÷7AÚ[K—ÛbYνX? ðS‡ÉSRëÊ<ԥؕ¹˜%ÃT…3ïüä' gÞù)á\Ìéd%ø‡çDw~:¡óoíO¨v'NuVÈã oUV±›½xZŸLÊE2´Ü…1Ãù>ðDÊI®üÍáá|);U{Ì2u'îW8_ðfG©¶ºŸ2Ø©ÇuR1ñ¾±ü¨F­±~Ÿ¤º gç€H݆eg8=ªAáü®Ð²åq-½´©ˆ%prˆÕmXrô§­Û pù®ÐbG.6Öì0ƒ·‹³‹)¼»þ28Э(¼»þ0ø~ã1„w×÷ nïE¦pù†‚¹ÕÀõǃ=fp-“´òõÇ.\ÌÆÞ–¸pýq±òõÇ3|àúcmìAP. r±ë)¼»$*Öø¾=™(×z/2„w—$#åâ·'S¸|qèÜjà’dÁ3¸Ö^sóêgï®Rƺ™,¦Þ]¥ŒÌcSýLàÝUÊÀ<¶ÕÏ®šÇ«”5'Ìàí*eÆàæ*e ï.\† ÎŽ1ß/\|¿c» —‘ó›˜)\>‹9·¸pYcpÆ Þ.\nÌ.\¦ðîZfh"ØÁq ï®eF&âv3„w×2#óûš)\>è;·¸–Ycpì°ó¢aï.o†¼Ü× áÝåÍHƒo÷5Cxwy30ͭήÙà‘Ë›¯÷w&"`³Ë›)¼»âY2»+ž{?nu†ðîŠgèA±»Ÿ)\Ó`cÌîAÁf׃â\x ÖàB†Èü¾ŽW¸è€ nOŠxw!0`p{R„Àå+}æV÷H»8d°\ÔˆáÂ=Ò½‹ê \¸Gzgì÷‡»ø±»ccwÏÝ>Ãë Ÿæ•±ûC›ë Ü\ó­‰Á;›XsÜ{ä‡"ü¥Íu…kÞãÈ%åƒã3–«¹¤œÂ»«Ì±sã»çËUæÀrÝo/‡ð×,W”¼Gf]®2×,¸çµ(‰/ ¼ªˆÀ» ÏñÒøÊ’ðäwhƒÙ•xwá9tÏùñ—/<Ÿ[Õ[=ã+ ÎÇœŸdpãîyœ›–ÁÐ=§uWœÁ¼îŠÀåÛŸæVõîÏüŠ Fî9;.Ñì…Ýsr`¡Y¾$8¿æ2Ô9NÝóæÀ3ï‘XàÞ#?°@àZümäÊ~…Áv’bP8 ›ãvÂN#y–é$"È÷»ü!¼»Ø1˜ßøOáÚ~äbÁ‚{^~4 æk0ƒ ‘Üoü‡ðîú¤ÁÍÑ ï®ÿ^D{ô‚ÀåëÿçV×ÿk ¶Rˆ>H!úáÝ%ÂÁ¼TžÀ»K„!ƒyÍ3w—#75Ï®šˆG4 {€í‘€6LÍÔÞ=%€Ý´Âì° 6ÚàÛëÞ=%M{c€Âå[ÃæVO h 6ÛS ƒ÷³,Þh¸ Øà©±0x£1YäE<Þ€ðîÁäiœ ×B$#h -µHÛÊP¸ðà@3vöà… ìŒ}àâymìY;ô š“DÞ]OøF¹5Àõ§= DàÝõôhö6G\¾ž~n5p=½Æàrlý)ÇÖŸrlý)ÇÖŸ!ÕMf÷hÂ`7Úd¹éé]l†ðÖEÍ#›,7Úd¹id“5òJ€Æ`·kyˆž¯‘Îá}’öòf†Æ`'h°#9*éÍ çbp‚w¿œ¯‚ðîe X€³œ¯‚ðîe Äàæ w/k¬pù1>ð˜†Û#ÎÛ€U›ò!ðîÉŽóëÙ%Ãwó7•¡üÌwOn@Õæ‡„¼{rc…ËiP¸*Ÿ'7ÜíL‘ { „ws`Ÿ‹g®}|.´-»‚ðîaTa§q\sjGæÐ,doë¡κRضÌGhz–V8°=„wÏwÀ¨?öBàÝó°4{!pÍ©y‡Aap2ŽÖþIï0P8cp¶Bí¹•àoø pî^Üh€ðîµhÛ_º“‰»Ž¼Ö 1xs>å׿V¯5hDjL!’+»Ø{ $ÑòÖþá›ÅÊ=P¸ð^ÂüƒøàÁ ·¸óIê<¯T®p¹óâcþZç7/Bx­t Âßð{  [NpÒcŠr\ÁINHYù1 hWhö˜€-z÷tìL! WÚ‚bç“VoŽ ¸ðVD³ç?ñÒè ïž„ÀS¦á|ÆZGàòK3–Ö0Ö±W:rs6`àç”ccv¾lØ*— ¸tÙ°U.fp/À?†àÂeÃVyÆÀ¥g¬òŒK— [å²a—.¶ÊeÃó d÷O³)rwXîä4[{9Y‚ðör²åÞ†ƒrgð!ø‡—ÎÒY–( Î/É´PÙ*géz¹wgéœr–É^NfÛËÉõç;4¹{,wRh©¼E@àÒóVy¾ƒÀ¥÷7l÷®¦Þ>ò!L™ÌšÙý3z ë‚0eê½fʘálÊÐ3zlÊtGüà”apʔܜ `ÊÜ[Á)3:»ß«d`*á A4eš‚N9!(¨Íd¹G6e¶{ÙÝKrOXîäd[s×D1ήü 'ÛØ-ÝÁ8 ÷ίâÇŠ”»qtoM¯ŒŠu&wÓg×&uçêÜ›suN9Wå¾ìý°©L†}»·U9p§È=c¹“wÍm©@8¿!ˆ¸ã—µçõ ÜœÍ÷æ4ZÆóÝÃù~+A±Îç;«²Êq?$÷渟SŽûIó=Kdâgáìþ9@EîE»æûü„·Wü8(÷î!”;ƒ³sxžÀ?ÿàðؙܓ£'!¬r ¸Äí)D§œB|ÊÎ/Wø±úíÞVåx¢SŽ' v>Hv>ç÷w’ã‰üþÎöt#”;?ÝX»•&vÏsCíimŠUN7BŸ–ŸntÊ鯧&ìíŽ8vvoÿ}-MpæO[áÒûZVy_‹Á½tjR|_‹À¥÷µ¬ò¾KïkYå}-—n~T=ê‘÷µ4ÁYIpNœƒpé‘(«<EáÂ#QVy$ŠÀ‡X×<eGÞ×ÒX玱Îc;Æ:'mƒÄ:F=Úý³† ëâ1sÑ>Ž5¤û¸þ¨"ÚÇ5G¹!ðγbð¨â1s%‡< ™‹²4Á 1Rý©\¬NàÒÅêV¹XÁ½—È¢pá,«l癵qvÿ4±"waKN7Öâ œ'Ô" ´‚ÃÈ8¡q õKæ‡Y¬Ãvz†Ùù†ó8=á°8Ë í®6êìàœ‘†‘~FÚñ |03’&Öù-®žV'dÀÉé@å…+ç1j!7Ñ.´²Žžf¬ëÎ^?Ë:ÏÏ^ï?©±.K¬‹ë"„K@ZåH÷\~’Â…G ­ò$KÂYåH—´Ê#Þ½õx Ñ ßR“{9æÛ”c¾M9æÛ”c¾M9æÛ”c¾M±’ s’œvÜzÿHEîn:³rÓ¡˜•›ŬÜôdÌŠ××¹é‰ùŽÎÉŠYUxš:IÁ,v |ÿHMîîÐéN"'!Ù¿ÇIäcí#.<i•G \zÒ*@¸ô¤U$p1V©<Iàš0ò¤¦A*- RiI€péH«<Éà^€3«À³v—©¤ˆ?IàÒ#Vy’À¥G ­ò$+@Zë#/°\”ÖV X[oÞ”“Öv: p/ÀYnÏzÎ*‡¬?c'/óÓÿ}{Óœ°vBb2Y!1ÉXpQ˜ü9 eÇT{àñOMîBb’\œ <þIàÒãŸVyü“Â…Ç?­òø'—€°óÖî_ ³Î“ØŸ“rúJàÒ£¯Vyô•À•G_íÈ£¯švxA;l´£¹AXH¥ÒëöBa!J¯» vWm÷-„wÓÂÓI"uéÑW«<úJàÒ£¯Vyô•À¥G_­òè«yôUSÁ½&=(¾x÷8«T¹m¸àí{¬Þ>Î*mº„wÓ£®™Àî5»fB|ô•À‡ EfsQõG_5¹ }äþ‰î5X—}µÊ£¯ î¸f.⸹è}%péÑW«<úJàÒ£¯Vyô•À¥G_­òè«M«ß­ÝÚ Ë=m®ë•Ƚ¿µÁîßÚ ©Ñk…Hö +àÜ7lðW0üMƒÐÇWà"õ¯,1cÙä¯pmˆÛ¿ö•~íöÀ¯}å_[`ñ§8ÄÛ1{vÆîì%ñžJs·nàí[Uîñ˜­ƒÎ =PnºGq8>n”óè.G7ÊÓ¹þš­‹Â„­N©jëößÔU—°àjg#8VãIàÝ›Ep‘òÍ”Ip‘bpù<:… çÑrÀ¥óèFy ‰À¥}ò¢/w/úJÎ ƒï?õ«Ê=“{>&÷ü¤ÜYm/… µ½F9NàÒyt]îÊÔöå ,ïn³’ûþ ÄªÜ ;«U¢rok•¼{èÊ1¸àr­… µJF9NàÒyt£¼LàÒ*Fy@…À‡nt•x·W“»6#õ\r5¢ç’ ¼{ÝZÙÁb÷\>—Lá¹d£œK&pé\²Q^ &péÕ`£¼LàÝ«ÁRÔˆÁ÷ŸVån¥»-,»G¥»÷\>»CáÂÙ£œÝ!péìŽQ“$pé1I£<&IàÃó®qðªr6bõ|j#wv>•À»§z¡ÜùùT÷œs´œuÚùb¡ÜÛã­.o5ÊÀ.=l”'€ |(èÔo5Ï·ªr/Çæ{96ß˱ù^ŽÍ÷rl¾i¾[i¾cê/Í÷We5¹»é?ï¦Cþ¼›ùó>æÏóDª›¤}\ñçÝtÈŸwÓ!~à±[UîB½žÕk³ÞBx÷$.ΰ³z î¸|VÂ…³zF9«GàÒY=£<µKàÒS»Fyj—ÀE¹ý—\³xÆ¡ý‡dUírÅõ¬^ë¸áÝs³H;š³z î¸|VÂ…³zF9«GàÒY=£¼CKàÝc·Ø 0ÂØ£ÏêW»UÅ+ïê™­6êJÏl¸tfË(g¶(\x+×(oåøpއÚÍ—F5Öyd7ÙÙiÎî¸ôÒ¨Q*ep/Àå³;.œÝ1ÊÙ—ÎîåS—Þ95Ê;§.½sj”w4 ¼µ›Tµ^CUµÃ Úaƒ ,Vã=ÖŽzøÆtϤ p/Àåb| Šñrv‡À¥³;Fy‹•À;%8IjáÒ[¬ºvÔÎ_‡²ŸÚì?Òªª°ÜÖ³;­NOÏx÷”+Îø³³; î¸|v‡Â…³;F9»CàÒÙ£<KàÒ±Fy"–ÀGp¶ýx;V•»ý¬gwZ'œ/e0ûIß°Mwsv‡Á½×ÌE7ýÙ—ÎîååZ—^®5Ê˵Þ½\+m¾¨Ü‹Á‹‰xžÃÓçä—KfùBe°Ã ®ç#rwò»cÁUk8cp˜6"+'\:¡• ÞTi«ýjz•ÁA`ðVMŸ»:yïŠæ!ƒyÄšÀßÚVƒûrx—êÙ³RÏNà]=;mµ_¶®28bײõܤCxW¼Ø‹©s1÷…ã.Žg¥pœÀ51P®1x+rÎR}xî*¿!¼+‡ Î,5OàôÕë/)W®x¸Tà•oïrm´Õ~·Ê`ƒ\ksW¡ á]¹66|’V8Ó`SS+Y)Ä&p©81+ʼnÞéh«ýzk•ÁVb°ÃsÜE çªçèrWI á]YõidìûÓêØý!ªÂ=(V£@àÜ<ÖÝWVJ– ü%ªÂUó¸_™¬28>3{ÛÒbï !ƒ wQ ^¦PWh¥´˜À_›½Q˜½ÜÂìW« N˜Á5󜻜2„w fl·® O~‡<¨.÷KàR oVjx ¼«á¥­öKuUçc ÎO2¸Y¡3fpø–Á2˜$׳’\'ð.®G[í×Ī .€Á¬&6wÕ®Þ•¾âåK‚3jIÚÑV¥¸T•š•ªT×6Yŧƒ­àAÕâÓÜ••BxWc 5xv „3 v,r}ù'KåŸY)ÿÌõ›*ë¬R @xW¶YÇ/Í'pκPg†RQEàReV*( \ÕÍ-Â’^ aY!ÂRpi,üMà<P_`iüƒÂìðä7Nþæ §“Ÿ>¡Â&ó„ 7ÖÕÐåËÖåK|5Bc°°|ÕW#2¯.IÃy©I}ö¡Y¾Û!,_Nþöݧ ¦ï607ï6xÃàÀ¼_ò©2¸3嘉(ÇLD9f"†–¯ÚJÁn:䀹éi7CxëáæÌM‡078`EŒ*ƒd"0ƒy"wµŠ˜Á|ë$ì nË \*#ÌJ!« Þ¯T,D¹k`î*ü ¼+÷Ã&‚Q‡£ÜäŽè¬Tâ¸T‰—•J¼°jšíAá^‘»Çr'yÊæý%zƒK7¢fö(¿Ò”Â?øëá„DÂ/T%ðæé„íFÔ–u™×8Øý §hb]…ó'3H2£­ïS¦­ï/Ú#p颽LÞ>õˆ·É;¥¾ ŽjUpõm¹øAœ?dë*ü%[G᢭ó#ðÖ"b[פe=”;¹-ŽÙº¾ôâ­«ð—lIv¿d@‘{Âr'UåaY—–ÍÊò î¸|é… —ŽeåÒ1—.ËÊòΖå N)X uuºgY:ÞîW2(rÏÇäžÉ=?)÷ÈËd2–{¤µÔâ¥c.]:¦Ë=C¹ó0¾Sê($¹‡!¹×Äó+v¾¹ó‹îåD—HÌʉ îøÇ\¸t,+—ޏtéXæ$NuéĬð|'uÍÃñ.C88žd¾øÃñmÙ\ßüc.\:–•KÇ\ºtŒÉ½¯:ë{[uâäªåN.kç{ä•v¿hE‘»°‡%éFî%@8—;ÉHs¹·5/Xîþ1.!ÊÊ%D.]BÄåÞ•Ì ¹7ùp§”Ì<=ßK§ÛýJEîå˜ÜË1¹—cr/Çä^ŽÉ½Hr·’Ü1õQ¹'–fœì~„S $ùuþ’_Gá/øu>æ×±Ë§\º|Jõë*ü%¿®Â_ò뜳ûuŠÜ–;©ÛhÞ¬ô™ÜiÝ“{WöåÎàòåS.\>••˧\º|ŠÎwP5‚â6MÕˆSªFvåΟ„“×>€Ì‹Nì~щ¢k):áÚÁ.Ÿ"pöÚ!-:aOv5+H;8\¾|ŠÂ…˧²rùK—Oq«Ð•¼@íà%/N.y X¼ìò©ì’Ý/ŒQÄ+qHaLuu¥˧²rù…SÑÂÆ¡®®æé¸'/MÙ8^aGv“×Õ(Ǹôp|VŽgp/À?†àÂåSY¹|ŠÀ¥Ë§²òp¹Ô‘r“û~ç÷ÏÙ…#­³‚ÖÍ?Px¨c…z8­³†q>îž&V©K¶ÎKc÷lì©^f–^ žžûÍØ1Ï•ú+cÏOQŸu>Q;O®! þê‚­³…2ØNÚ}ÈX•Б庥hwûxc+nuz8¸¦½¥©…ã>ž¤nQ¸5÷<ƒ­•Ìy”Ì9Xõ¢ ñ’h•º{Æ ÞâåÔ…)YÄÅÈ ¶œ¯G*’t¤"‰G*>îî­•ÏPîÀ»háoË¿~Ñ›¾f?ƾü`ùþï+=I½ÕÎ-?Xþ…»½Î÷ t GOIè|JÎ:ï·º‚¦óž–%|ÇY,±îFÕÂQç³:Ÿ=„¿Öùý»CÕÎG©óçs‚pÒÇ/>ŸM>õ£ºÿ@á©rÞ¿Ðù$t>:¡óÑAxËy/qž î6ßAOÕPk_Ï@ñÎ/Æ&¢ÎÏÿ» þovRʯ¡ÞùÓr£ðÿú}‹8c±Úî×ÑÎ?àoË¿~ÿ‡P k†êë÷_ŸìäªcÔWÇÙÙ—¨[LÝ'‘z¢ðu•qî%êQÿâ·ã$uâ¾Íp¿q^¸®Z§îÎ[aì†d@fxØ8ÿõ p>@ê3˜ÄágxÜ8ÿõ9ï2æü{ž˜ÜWk“²Ò©'HÝN‚Ü—JP ÏÛØ½zÆÔ“¤u–gøê8§ l×têE»9Œ} Ìû稯A‚–º¨¡‡ñgøjëŠ$ЩÌùm™ègœ£ðÕÖ%óu‹u~»ýl‡ónÓùWlqçƒhm,…¯¶ÎÆøÊØ[ý­Û‚î^-÷,õ€9¿Ý¯Ï¸-H¬ya¾›(ÉÝq~µuù5­Ã¶n¹zWÐ:Ïà«­ËξBÛºåÞa•™¨waª­ ¯P/õ(YºÊlуd_¡n[ç¥õ†gf¸Ù8ÿŠÜ-¶uõ.¿^ç©oc‰­{Aç­`ë¶®zÎ3ê®RÁÖY÷”wq‹•Røjë’{e…µÐÖ-n]”ä(­ŸêØ_ îÏÊÙ¡±{³iÝ+~7Oîe,[e¶`c@éÖ_{Ô Þ¿‹Öfþ‰ÀßF¢…V¤þ¶E ߤháüƒå?@¸S|‰)j}´¸5¦ØôÑ' W"o#‘G­õ‘z*¬_ØS[®Ä'ßFâ“Z½ k+ÉÚb¸²³‰bj} ‚¬ƒ$ë€áJ¬óm$Ö©õ1BY“Ý—µË\Öö‘GDßF"¢Zì#‰ˆò>²sÞô±XÚj r©õ±²6’¬¸e{‰0*}4‚}´’>Ú€áJòm$¨õÛâ·4²Ôc$pe…‰j}lO”Ö™è1\³=#q=­Â¼®q½f^GΡ8ÄÇèŸÖG<¯Iô÷‘½ÈEáJŒðm$F¨õ1ã>Áö˜ÂlO…+‘Ä·‘XžÒÇ-–÷&ÅòZÛc1\‰ø½Dü´> ÆÃÒyÝ„!œs»i5™Óúè­…Ö úÈ,ÔHüNë#´=4~ÇûؾŽÀ•(ßÛH”Oë£à÷lg÷:ßlÂp%"õ6 Ôú…9S¤9S0\‰¾D µ>¦C~¸•ìã™Ùž¸¢ÖÇ,飓ôÑA¸*ëR×ÂWæu9f‹0g õqG"¤J`ã¤,BJàMåãHUë£à?Ö8jËLjáJ´õm$ÚªõÑòÕô‘ZÑ‘˜¬ÖGa™×MlqNZJ"·Z½ÔÇ õ1@¸ß}‰2j}ÌXÖNÚϸ€áª¬b‘Z‹´wÒÞ5B¸æ‡D,•>zÁö8É>:‹á·²å¾+¸'ÖÇ‚m¸¤'v+6…ó>2>þ‰I±{ mA¥_RLêWcù²£ð¨FÝ!êËZõ&÷k$Ö¥Qxì5ÖõK‰bý‰biÔ#;ñÜ)ñ©_#ñ)z‚ÔI|ê—yú5R±§QϘz’äÎv¿Fâ^õ"ÈÝ@¹7­_#{ õ­bï—T±÷K©Øû5OÓ¨ÌùZ±÷K‰”ý©ØÓ¨[¬óµbOçü@œN£î·³4vªó#5sõ€Ç^kæT‰[iÔñ|'q«_JDê×HݘF½`êµnì—R7ök$Ž£P·XçIåÖ/¥rë×Hå–F]Ðùê9ÿR*·~ć4êî©U¦‰üüÙ})Ô,mWØ@á{º{’ól7òkd7¢Q÷õ YÆù::¶6Fò.xɯ‘:z¼JQîžÎ÷‘:ºàÛYîÔÒŽìð4êÝÉ»àÔönõ"ùuqdÙ•)Ô½àÛ8;4v²ßj‰`êl¿õ«`¿ÎŠk}ëîëud7‘ÄéuÛM\»Ým5°iЈDD¤‰ê_Gö‘‰ðõud  ɘHbDF|m…Èæk_;_›¶p+5"N Â?â=jD<›¾×'Q#‚Ïs˜×‘ì¤F ž½\<·p85"E"BìÍuįTˆl~åUI^Gœ…ˆsXð,¾zñ4"X» 7+#˲FD0+d`õÕˆd<é‰s«EV#R$Iµ‹¬fIŠŠ·<àýHf"u2þõc+?´& V؈ÅøÛò¯ÿûÁbŒkÚó¯Íu ä˜8…»Pßž=ãW¸KÍÞ¸‰y£Þ$]3î|ëTØþ¯O#äÈføº¯³^Z%UÖY̺S”X7Y¯¬»?ã’{Ö-?d¢\Î#§[g¿»ÜfMwÏp·›8TYç ë–ë.%Ö9§Z7™íÆS®uÆŸÉIÞ f-7¦pá\HÇºÂÆ¾_Ç¥²Î?É:C®¢£p¢us»Tç;ÕºRèÍãÞX×$LXz/=…wUd„åðu‘³ù%Ö#qè$1Â;$‘@8_Ç¥ ëš ­³’­ãZGöóáÖEÀº[I˜?!+6n¬¢Aó2žC>A}¢{& ïJOS ¼™—\>iS.ɃR9”UùPc5{V%@8åÐìň8ô%ÐÂK ç…+db±xËyÊÂU˵zfÖÚW¦_6’Gq’œï<Š“äÂ@øk®F¦ß†\R½´WXW$Öu)Cxú„-×é”1u®‚^°\ìQ0 o×Ë!Ö­€yû^`ÝèŒ~ŠÐrC2Î,W½Ä©³\SN‚ëê!¼áP…7‚sŒz Þ¿²^#h3ФEnÒ*œ™´2k-î¼s˜z3a‹4a †NX¶älyÎyÿÂÞÀXu!C­sž­—ζK+¼p_ÁX¼WC›ïÆÚVmÑ4ëí ®†që´un^"!œÙºe p’¶kþÒ¶ÊH{ƒ)l«ê,{ál™ î[ú€© ,»õ#aø¨­ã¬K»¹>•uéÐÞÀ¤C{“žÚ,Ö„sYns=ßüŠr ž¯ÉÏˉLÆóÒ×™¡z‚çKœ¹šÂ_[ J5iåÖiÏYË9Yoöì~hÓ`°çë'ɤMܤ=íù2f;a5³î…©•<ß’¡I›Î,´k±ç;/fĉ°Ó¡ […·;û0d+hÆm¬ëC=§0œ¨Í‰?H3·*Ðvœî¦çמ|êµÆÜGmÍ(P7çFOkvІÂù´>“w3þzÉ.éݦ|!ò.mùß•-?K[þweö¸´åW¶ü.¾wÅð½d4ÖYu›/÷®ør.ùrïŠ/Gà’/÷®ør.eÞ_î}$» ±ÎI¬ƒZwË@x—D€¬ãq^— ß»bø\Ê.¼+†ï}$» ±ÎcÖÕù»"'p)D®³Îã [³ ïJvÀ¥ì»’]xÉ.h¬ ÇXޱ.@­sÒ„uÍ„ ‚ÖYÉÖq­È.h¬‹€ulñ®ì \ÚA¼+;—vïJvÀ•ìÂûHvAãP8d-2iMvÀ¥ì»’] p)»ð®d\µ\ÙCù˜«‘¹ù˜«‘…é7…!Wc » ±®H¬+ëR†p)»ð®l\Ê.¼+Ù—öX*ëF² ë¶ý»”]àóÒ°í)KÙ…wegOàÒÎþ]ÙÙx—ƒXÇáÙuÒÞ`Ë.¼+Ù—² ïJvÀ¥ì»’] ðÑ Ë–œ‘ì‚Æ:io2\/yvÀ¥ì‚:a ÞÉÕàÉ i[5’]ÐX'í ¶ì»’] p)» n«Œ;´­2ÒÞ`Ê#Ûª‘ì‚Æ:hGjü¡©ñÇXçŸÔº†uÙuQX&\&šìKÙ…÷.oá]Aà|ÀðQ[ÇY7]ÐX—í L:´70驽A“] p%»ð>’]Ð8$x¾5»ð®d\Ê.è>H>æƒäc«Á@vAc]‘öìuMvÀ¥ì‚ºi0Øó%Ù…w%»@ࣞ/saF² ë¬äù– MÏ.8Ó:S«ŸUÄN‡‚lv’Âa$ÈVÐŒc‘ûw%»@àJv὞èÄ€ås2¼ɉX.Í訛4»ð®d¼É.ë§þúÉ.ˆOZ>à ‘OiËÿ©lù \Úò*³—À¥-ÿ§²å'pÉð}*†Âÿ ‘—Dné˜[ ä 4[Á›Ç÷©x|.y|ŸŠÇGà’Ç÷©x|þÁ¼-LŸòµcÞù…'ÈùìçRçÄy¨ÚM ƒÀ¥ƧL&pɺ~*Ö•À?>á5çMðÎKœgÔ2 ç=æ| ã*a|—Âø:ç=6*5ò©d@œsÞHœ7|ÂzÌùºQh9Ÿç(çÃ1·cœPçdm\cm“œgIï\¶!Îä_4ÎGÀy¶ÇúTöX.í±>•=K{¬Ö‚{ —RWŸJb†ÂƒKdòHßh Nƒ­Eæ¼I߸”¾ùTÒ7.¥oZ¥pç»$ÏI2Ôþ“Of Èþh ÎÇ\Á|ÌÌÇ\Á,hð`Ñ]Á<ä äˆ4‰ÁE`pÊ.åˆ>•íK9¢O%GDà!1¢C‚á°qNôÌäçHŠIáü–¥ù”RLŸÊ—RLŸÊ—°|*X\:À¢šž ïBP'Á¨PÁd¨4ÎKûË-Cõ©d¨\ÊP}**—2TŸJ†ŠÀGJÀðvOSMµ‰¡Öf$Á¥q^Úx† už'¸\Jpõ›n—\ŸJ‚‹ÀkSýÍœWxkÎÈ©Éiœ—6ž[~ìSɸ”ëwãþÒ–¿Â¥üا’ä¡ð†ói$^1’^Ó8ï[Œß ¶¨:ïqÞï[TÎ{#1x$Ø2’Ó8…6DláÙ9—²smçY¬ÆÄ]C­N™(°N´6†K'>•“GŸ#É=óéÐÆÓ¤Ý§¶©3xc³äðF6žÞ%÷F¶½&‰Û^Új 7¨1XØÕÜà§’$p)7ت¶.Ƹ[ÜyÑûSRaWF|O%3ù9’ZÔ8_¤hä|“Z$p)µØ„„K¹A]µ‹‘¶½')NáRbóSIl~Žd&Î[iÃT°ó8MÌ¨Ø ê<ÉLvkQ€p)µ¨rÞJ;ž| ¶ØéPä¾Y¥iù³§Ÿ×ß×ÿ½ò¿[KÇ^ ëzà§ŽŒK«~*iUWÒªŸoæÙ¡-E¹È¡-m}v SH½ËžBí0|f<­—C[p?Ìuó2tšËJc¿l9Ç‹d»(A6—‚l%ÈFàRí¢Ù\Z‹.ÊbBárí2tæKa°¼m.Ê€À¥-ÀEÙ¿¸´¸([—¶%ßJàR¾õ¢l.CGÆÎ;‰óPµ›|+KùÖ‹’{"pÉj_«MàR¾õ¢ä[ \Ê·^”|ëeèÄ™Ây9_³~%ëGàRÖOç¼ÇF¥æ[/J¾•À¥¬ßEÉ·¸”o½(Y¿ËÐ5…óáçÃ1ΨóN²6®±6Á`ÕÞ2j½H \Ê·êœ9ï¦p>γmïEÙö¸´í½(O—ò­ÅC%p‘óJ¾•Âå­ùe踜Âà$0ØZdΛ|+KùÖ‹’o%p)ßzQ’.å[/Ê€Âå|ëeè´Âà|ÌÌÇ\Á|ÌÌ‚o7ÝÌC®àÈ™<…ÁEbpœ2„KùÖ‹’D p)ßzQò­.å[/J¾•À¥|ëEÉ·^†ŽôÉœßrŽ)ßzQŽô¸”o½(åô.­.JЊÀ¥#}åHwê$*¸¡ ç¥ýå–o½(ùV—ò­%ßJàR¾õ¢ä[ |Ô¨ —ò­%ßz:P¨p^Úx† žo%p)ߪZƒ7žAry¾•ÀÅ}—ˆ…ðQkõnä<¢Âyiã¹å[/J¾•À¥|«ºå7îЖ߸g·üS†ðÁ-*‰ÂGŽ3*œ÷‡‚-Æ ¶Œóþ9Îól/¿l: ©p> +l€+l“o%p)ßzQN¶¸”ñ¼(OÖùá]VVà< 4 ¦T8Ÿmæ æc®`>æ fAƒ·Šî æ!Wp +«1¸H .ƒS†p)+{U¶º.ee¯JV–À¥¬ìU 2¸Þ¹*YÙëHVVáü–™¼JYÙ«’•%p)+{Uk.Ö®J`À¥¬¬jz*\:D{U²²×‘¬¬Æyi¹ee¯JV–À¥¬ìUÉʸ”•½*YYJ—o…ð.w+8$†iÝ@VVã¼´ñ :$<+KàRVVµ6o<ƒä ò¬,‹;{%+Kà£Ö†kÝ@VVã¼´ñܲ²W%+KàRV¶ßÌCx·³‰·»åWÎb¸tˆöªde¯#YYóþP°ÅøÝ`‹’ ð—‚-Æãü—NÁªÁ–‘¬¬Æù(¬°®°MV–À¥¬ìUÉ‹¸”•½*YY伟0\:D{U²²×‘¬¬ÆùthãiÒîÆS¹£–À»íéIÚ‘B¸”@¹*YY×6ž#YYÁ¾¨fe¯JV–À¥¬¬nTò1ç1 ¶ç‘}Q…K‡h¯JVö:’•Õ8_¤hä|“•%p)+«nY Þ0‘¬ìUÉÊø jû‚Ç.¢½*YÙëHVVἕ6L%Csγ².ee¯J^”À_ŠWø ç¹×_áÒ!Ú«’•½!«4v öZ, õ ž‚½d¬XÆóªde \ÉÊ^ Þ̳¬¬¢\$+ñ)Ø«’•%Ô›¬¬Ç‘ge œkGœ¼³q.ge?G®ÎµFâÐçv}ìg{Ž{åÐòC³”A¸àˆ~~~ÿk„ºœÜû¹£V¢ƒC\2 pˆ,Õ@ႉøTn‰ý¹æUí¼?Öy:O2TŸÊE«Ÿ#7¥ªBç'©ó† IžOå®ÒÏ‘ËFÕÎG<3¾œg—‚P¸à®îÌŒgsÙ>G®ûT‡˜„!ziˆû|† òÜÚg½{Íû‚| ¶\_¢¤\qÂp®\FT.’·þ¬×—9Tï³ßyÁ&Y©óvÂð¶óu~™ÕŽÂW›äìKlÒv¡P×ùŒá¬óÖcÎÏ´‹'ðúÞ@×GÜy¾b­«ê§tU3aYæ˜Âùì= «{§øóÇÐjí%ÎÿØÖËÒjýCY­ \Z­(6‰À•ÕúÇÐj­ ÑÁ!’ิZÿPVëC«µÒy¬óuž®Ö?”ÕúÇÐj­t>Ÿ¤ÎO.­Ö?”ÕúÇÐj­t>â™ñEà<_­ \Z­õ™áÌà«õ¡ÕZb†è¥!z —Vëò㨟?†Vk¹ó[®/NR.7a¸´ZÿPVëC«µÒyÁ&Y©óvÂpiµþ¡¬Ö?†Vk¥ó‚Mª«õeµ&piµþ¡¬Ö?èjí¥ÕÚ‹+Ö¶Ü6:/Ô¥ä»5OëÓÙ@¸¼¦ýk«‹ž¬UŸ²ùÌðU7'óÜWêþyø!iZÝá¿tøÇÛ6vï„\NœL–á¶Âà ð•uIªÕPá›nö­0œêæûÏ:ö$ÝŠÔgø6öd^»J=<¯c·ÒØ­8ö¿>ÆîŒ¤63|ì*¼ŽÝ¾÷»¬SáaƒÇW¨Ç ž_§ î_€W¹w­0œÊýÏ_DîõT¤µh†Û]Ö©p·Ë:^åÃóðʺ®†SÖýúƒ°.cêóT’7í‘Z6‘™ºÛœNÝïSV¦ö8¯SûÔ³B}›26¿2ö¼KÝf™ó›Ú@8ø»þQßLVØe'ÞúQÓIrTøÖù¾†oÿ1™ÿÔ‹øˆø])ªðM‡|*Ïët­0üÔÇÎÞl­þýç´X5-®`R`.&íãþ¶üë×§åûÿÓã‡ý²¼¶¿¾±VÆÑVÖêáƒ>Z¡Å }´ÂÕ>ºµî¥>:ØG{ž’ÐGo!œöq&Áeí­Ûé£G}¼ª$Y3êa“âKÔƒD=KÔ‡â&Ÿ—¨Gº/õµ<êOuÁèÔ¦nÏx–-yJgÜÉkÃKʰKW¤>ZWûX¶>¾4ËŠd ‹d h+3Y=¤£÷ñGš$k5EoûHç¢yXýi)ó|¡F’µ—d!¼±Vµ¨f³úοÒG+ð1Jú(À}´¬ÕjQ“1¯ôÑK|,#V¿Â5«oV»›Þ?íô1<7¯»[áª>®Ö9“_èc”úh†ú¥>²Vië£}e^'©a¨i¨« Oùn° ÿ²¥yx¿˜­Z°s}̼U©óú},ÒZaÓV.ÛÀIoZ$ÒÊNu^¿ k; ²^+Á[>žmðFÖ‰õÑT>¾°Zó—Tl„pÞÇà‘Õ†§`_˜×Ö>½Îxolø™Ú[=wï^è£{NÍtvÎçÌv^éÞÊ×>Æú(yîÉbYÎ!em·KÙdÝv÷ñÄúXð¼>ìËúĬJÁ¾ÙÜŠÌ™ïÛ†^ÛíŠNÁ÷µºåßßÿõËH›ÚïÛ¶_Û®*D‚@„îJ¿o&m¿©‰ê`|ßÂÎ) ñHBD¾˜BgÀ÷õ¸úü·¼yžÈzd»‰µ¬ÕÒ*Þ¼BÄ@"‹A§­¶Hµy‰ˆÅìb‹Ã÷­D[â"a+ùw³©°²¶(DfKÈ÷í,_~]iHðeÓ®ð ‘"I´•]µ+»WFb@$³VD»ü D¬ Â¼•3û«ÃwÍŠ«×$¼b»œÀ.¶ ÿîÜv FI/q#3¾Tíjÿ&ÂÖ¼ïk×éTøª3¢uÊ¢e7"VY´b¬ ‘ i­ ©B$ DšEËî/Z ‘„ˆô‹–Ý_´œ²há‘´‹–Ý_´"é­­ŽBÄbvµ‹ÖÀ¾T!â0‘vÑØ)Dn-»¿h)DÒà«+^!R"Í¢e÷-§,Z‘fѲû‹–BÄ *ܬ:Q8§ÃwÍŠ3¡g§,Z‘fѲû‹–BÄÌxºQsÒ¢å”E ±dÇú»ÖMȓы ðßµnBÞ”«pgöbL¼.ë^H¿'/¦ß¿“±+ ¶Dýûöê÷Ë×7îß<²=ß/òö“»’ìS_g»$éRAŸlr¤ÕýLõý’3 es¸¡gg–Vñ„nî8O$<÷ÈݾÄ:û,ëˆBá]Aø •(Ï£‚gc_£wc¿1…ÂÝÀ–^»Cc¿e„±ûFáÍ&· t7öYn® ÎSµ9‰j³üb¼c]Xç<…{³ŸÙVXç0±6Ö g38õfbù[i/bеÎ'–Y'l;—"„7˦›5(õ‡‚Ä!+q(#ê ‡lއ"†rÈ!xË!®‚5¢ö‡¢À!ù‚¨·ÆÙCF€7ƹòÁ[ãÙ,Kf¿ŠAáP‚ƹ–6¬cU Îùx/‚Ø7Pé˜JÇ T6ûÅ ëòÓ¬³ÞîË'i^¢Î÷“ô$ÍKï'éid^–h‘º"¹á$MXo]ڪư•š¹k »ï£´t3ǡ  Û²È§ Î3ñ.òõ’xáØùÌøR‡ö®¶3]<×ȼZŠ¢°Î^Ï䤙!Ý»kTŒ9dTŒ9dT Ù$½Â:++Þh]ŒÊ”,ê|ïAÖÎlŸa$_ÛK¬ Ô&Õ[K…Sò;¬sh±_Æ(,ö†-eÆáÅÞåt6_Ãå2'AŸ,{³Ø;63ü@&@á?´©ðv^aê|ËÇÛâ‹Xg‚·|ÌNP®Ìtsõ7µŠ+…uáéÕÀBøàb²Go祇«¤Žûm Ý.ö‘ÍŒÕÕ ÁÖE‰uvˆuQb‘R:?¾Bxç'%!tR˜ÖmÉz¥>Ma]:ƺ$±. i]:¦ué˜Ö场ºŒm]>C“ç-(¼]3ìÐBš-¤ùØBZÌ~5ŸÂº"mê"d«æ£pÂù{5ßûV޹oErߢÄ:ªóÛµ£ZæMf b¶«Ï»™œ„7ÖGVX;Zaíth…µf >Ea1’vœ$…ÀðV;$ÿ+"x¯'i2´p`}2\î´$s†;³_Îc;Æ:wŒuØm_J2OЂÓ*ÌîÍ~¦Â:!L|«8Ø[&¾Í¬“dÁ¼7çB|2uÔÖ™³ÁZG‹CgøæG¹(CaŠßÍMe߈9 ' ^·k0l¼‹pH9­`àØƒk2_çYVÉâÐ{}Þ£Û¿³Ø_Yã+eþºOì¤n.iÎμ4#¬c €óÂk‘ÁÂ^_ð|_œZg ¦Ô)OoÝêàÿžnºÕk]w?t›ÇÅþžÈÍB”§‹@Mná­Ò.yë¥eÛb¥ÝDFJ;+̈́᤼c™›Ò¶œÇÔ)çoÉbÄùE瘿Áœ—CH·<»(?õð_Ðv`£à`þœ=Ž ³SòΨ)¶øã_uÙIšá{—_ìÀÝn· ÷»û"v |5xo× Ã©xÿá|’¨?àoË¿º+ïh+»Ï`ˆ…DìD6ˆ¿ë¥A 5"1‰ÄïÖ0«D<&HàsnöJ#‘ÛC¿´UÜÝW©D"|$³nµ¯;û ‘„ÙU8»òn V%’ñH2×®²[W®)˜Èt.¤•Ë»© ˆËXð®°VÄ`Ĉi2FÒÊO»›ˆŸ„‘XÚŠ˜¾$™¾$›¾Grb5Ì‹…³ûÒ*ÒnD¬b í¾TˆXH¤3vß@*D$ÒH»o "i ¤Ý7 ‘€ˆôÒîH…HÄ‚o ¤Ý7 ‘„ÙÕH»o "¤5vß@*D &ÒH»o ­b ±à[i÷ ¤B¤H“‘H»o ­b …‘4rI²’´Š„Dæ_µë¯Ÿ»×Í;(1hñW½59g^€o¾»³þyø¶„ô­0|ãÐßÓí"_|§o½2pbÅÍçà„³»ßæ­•ÛZ-·‹á‹Æ*ã9ëÖ‰ÙÁåV±^£ &’b‘Í4iÎ÷ý,†\XšÎë6¼]NÖ¸Y ‰L–T‚›Âº@b kAhµíõ +ên÷๚¯ž–Bxû¢ðZ½Äà&Ó?¦ÑËýÖ—&8S‚óöNÙ­••TpËru:ä|Zþ)ˆaùIX¯·òÊž:€ëD¼©ìrìOLä̱§ðŸ÷V9ƒ4’à ‘ )µV»ŽºðžÛFêcdp‹ùh%>Æáu0ª ]Þn£m*lªâµ‚ªTøïõN‘G½-ïÁ£«·³“T÷²OpÙðxnáìºßs؆Èï@Þ’0ø´üSéãzÚk¦"ô‘S'R¬ðî:æµn@¥žcÐns¾Ás”&À¼¨NFº´y…3‰ð°NååŸpþ´×<“ùSáÝuÌTÓJ™6"E¼ó™1xÍy1x{7óÙæ­UšVFLË?%"V07Þ]Ý´²+u·}LúX[ÊTö·²DÄŸ’ ’u^<鵕ÜŽ]À{vÒÊJÜŸ…‘0noð)ñÃ2|$©¶JC#az³Á{ÉULÜøÎƒ@ÄŸ–J# kh´Â“‘i×ïÇËZI×þoeN°2€/}LòH’•Z¤ àÝHØx]d’¼$øàÓòOq$®Ž×½0—ÌÈHŠ4O’4O€/}”Ü…â­´Þ&c[±H&c…O…_¡¾ù?óú9ûè?îJˆ`’¸_‡ÿó üËòä;[û÷cbÀs=õ%ì×Âÿ7•.ÑÚž!2÷q½cñwµî…>º¡>ºž!2 !Xw« zÿ ôÑû3ƒûqøÏq=÷€ÿó õ%$U*|Þãþ ·»2ƒiçïðƒÞ-?Zy©ÕI¢Þ»wµË9ûÈZýóÄH¾·½h^á»#±òx·»5âHnpÄÔ‰·òÒßB#Ió@b É?ÇFòÒ®Y(‰´òuj¸¡©±=ÌXá»#ñ{Ú¨·pЕpv¬Õ?OŒdh6-|w$q@»¼<’µkÑôÀZyéoa™ä>0’ŽäÄT»½wkU̦]á…‘Üà»#)æŸgˆÌ4Šká{DœñÿÀ2I‰H8¯gœøìbüj³”5àì…—¿QÑ–¨Ûñ\8üŸ§àöÉ 4þŸí±š™µôHÑg³.`>ɇNÌóÏSpÎù8mðٻɆt>ZsyP#–Þz¶fÝá7劲{3ÿôëI"¶´ð]"·Ccw"#–~9N’ü‚ºÏΤ¿ÛÂï}tJ7?‡˜FÌ¢¶TX÷1Ó>Ê6í¿÷ÑË}ôµÞ¬ý6Ó>†°)T²^:ßÂo}ÌÉ‹} áŸgˆ4}LfSú&üz²Y¢~‡÷VÅlŠ{«òÏF¤ ùô…(}ªÛ–4´miáùò0 ø¢»C¼ÁákõBd¿åsP£},ì÷X2¯“¯²ö’¬åÙà”[ÌhäDþQˆôp¿Õªßà‰èã ŒH°7W¸¶š§ÓJ„Ï,BD™rw8š¾T¤s«";s©Z~ô±/`*G Ì™y£oÇà£îVøì>ÍXÒÁkçÚÖü@ü€Ã)—H+_‰x‰ˆ—‰øA"^!5­¸]•` ÞˆÁ· ÑŒxsæìJ ßå¶±•ˆ}ž7ønWBù牑4f!˜h6ø`XçÌàöÜn‹d°Â"ÙüÀ8d͈¦Yã/ð•pFÄËDü‘PçL|a$ÄžIÌ#øÍ‘èÉÊ9û€ß[•>1ŽvÆxµ=^²=^ž Þ=I}ÖÏàÿ(Ôë}Îdšø·Î‡(t¾±ó78꣧Jë.mùçØ\Ì-|¯+óŒ¿À²2’®^¦…ƒ‰™Î†´ªK@–€à&‘ˆàÑø³ó´U‰/ CDÊÖMŒ)#DÒlk‘$I8¤å¶„–Vqš¼Â.·Õx,Í_àƒôr„¡ðe$)‹Ê¹¼êþ7|ù]&B¢$ø·&”Àkâ’myÀˆüó–.yÀw‰¬N¹ñTý¢}ÇdZø.‘œ.°*G‰/-|Ht«C‡¢6ž‰Sþ€ïIe]Éû·Ðñ@C¡ø‘¼zDmy’©²çLö«øQOõ¾ß•5‚ÑT E«ð½‘EÑq±Ñ©‡ïu¥„uñoJ’ÆFr‡ïޤ Œ¤È#)#Yj|þå>C#yÀwF²¼øþ7|^$bÉVºÜ·¾ZzÇž£\¨Gç÷»}9?ÞsÜÇnÎ?n¢˜`›¹ú:WœC~í¼¥¥%ËŽ=ð!Þ®Žú¹H”Žj¹ý6µð[«ÀZÝ×øÛü¶ë­®º'ÚjÉ“Íÿï÷­ ý»Ën²ƒ7º¹Ü\‡ì1Ý´»ºÙi‚*—™"‚ó½ú¬\fH¹Vx?†&–=¦›ö˜nÚ]Ýì´®…c'I$ÞÉG²ˆçeµÑ—d*·Hb;·“™ÞÊýÜÏË‚Sñ’gL¸àî? ¸15n{{²© Žî‹J$û— ïµ.cћܑŸóþŒ£pî'MùáàÎMèËP¼÷“¦\h+¯­ÍKcs .D½•bN§^p·=–Á·dƒXl¶Cò±ÇäcÉÇÉgÛ$q1Øà&öìrð&Ø9o¥ž~ ƒE³ë¤õQoÅ;Åx’æ%{a¯‚–[2x_¼î˜xÝ1ñº!ñz(eúqå£$†ý "…»&†”…é7eŸW¿‰ÊçvOwÇ¡™Eѵp,Å“$8Zo‚ëà»ò ¸Ô¢|ºå+á˜|Â1ù„!ùÄ<çqùħåãõN>cö­v¾˜äÉ'“O’OŠÀAVÝ‹àOÈ'#ê|’ Ÿèqç‹ë䳿þ¤çÖŸú6JZ:íHCòÉyÚúã||ýqÞ®?AZpç3¹{Ü?ÈÇüƒ|L>yH>%Â,ö¨P¤ù†ü·rÌ?(uòÛüƒeؾ™û¶Á±}3;ö­ È' ¡<"~!í—3]„0ó¢¤3‹Ÿœ!ú…ZSÁ+€Igçvhš„À¯÷ùýk£ ¨ Y÷³Ïkvï_[Ï@1ü–Èž6xƒ›5ü×2v“ ¬M[_çqâoþ¶üëóëDšÜwž·þüN¯ðçá?¸ טçÞèÆ­uj ü+iå|çþóc"çP¦uei©Þj…_~2¥”ºs–Z²Î9̺û#v=ëâvŒ¥sÖ¥ÇóéœuwÞAxeÝ—8¯–gXwúLÆpº{+‰uÂW­ëËɆX'hqÛØSªGÑÀ™rMîîÇ3Ó:—àØ—VpìMç½Á…|ƒc÷ŒýöLyj3*®J ü'×s™qNÕ¦ÌZ—0ë¦ wž³îni‘ÚLTm¼5°ôo”u±niáŒ3qÂp¦\ÑÀ÷ÅÌVÈB8aÝòJù•‰% Ô? oµÂ¿3ÖyÞùÍX9à@í³Î ZçiÆ%<ãÒÙB8ÝsØIpNB0l…Mz¸í ë £žðQÖm¦òJXçŠçCÌøØÈ(‘ͨ¼)D2Üú-±°Mƒ?øµßl½¬ðë× {io…Uï©ÿ}‡˜-ìüÉêÛUÝó–wþ/A¸Øù·öïBx7ġ΃ýËM‡«—Öu Âß¾ögv9_6¤“”Ái·N)px†»f g"ÉI€3Ï[74{gÙñˆAÉÈÁ=9²µà¬ÛÞnà¦Jk‹ÈySZ•mÎŒÙ{êá ltŽÂöt{©óÝÓyŠx÷t"‹r±#`'™žümù—.öÏð.L¼Â»È0„wA«ÞE†!¼ oÔÛÈ0„Ëaâ¹Õ¦AtÙ4À`´jÌ‚VÞ…¶ƒ8&‡xî¼8M“ïB[ˆÁ<æEáòN¬Ø‘8¼Âà5”Ýjð‡oÌâðÞEë±'âPx­ ¾è!¼‹Ö7a| —£s«h½Æ`ÁDlÑú†C,ZOáB´¾;‹ÖS¸­oÆÞt~$ZïvàÝì%Ñz¦\M´žÂ»˜>ž½F >`a|ïbúP¹"Ÿü.ïêæV1}Áöy¬ðóxöCxù1þ’y¬pÍ<ŽDþ5;Aƒ×ÈË`ù§ð.?¼¤ ¼Ë ßRÞåƒyâ€Â»üÀ —Ó3| %àvàˆókL¿å¼ Þ%:ί¹Ãa2Âù5Wá]âª6Ë(Px—8Xá]®ÂUù $ܹ¾¦@ù°Ä…wéì8Ð@"…wé03îïÒ Ð¶³¼…kŽƒ¯é…T^`p<³œÑâYʹx§‹ç­dðìÝç Æ¶=›â¹åŠhøðÞâö„7Þ ëãHþFapàæ­ÉßPx—åéüHì@x—å‹ç’Øð.Ë7o,ýCáÚâ9’åÑœ$÷ϜྗooÙO¼tÿ–ô„w¹ Àà{ú»\b0OQ¸æþä‚4g¬Á[.¨Ñ`– ¢ð.c„m0_ä*¼Ë!qKAx—1êܦ’(\eð@ÆHcp‘Ü¿€TgŒ(\È5þk&@1ÈYpdhcÉ)c^0&ô³·ÍQxUÁG+¬\†M¿(8`*×=•á]^ Í^žp¢p9¯4ïòJ ƒ“øT ydy% gæ1Ûs’f/†wÙ'´;¾%œ ¼Ë>Á½Eà[Ç$íŽ cð@öIcðfƒåìÓÜj û¤©VP!’+»XþÇÕýÄ[û„w9ª.ç@¼ÍÓœzuCÌw>Içs±Â»ÕPçí±Îo»X!ûÄפ'(\È}éÔ Œð“ôïÖi^èØK†ñ §“Ö¶ ®p&¸B´NÎ>18Î>5rÏ^è¼}jµ¹a]Æœå~b[<’–rRZÊQîß—ìœò´G…wÙ'¼ƒ?OÄ<æ‘´”mRÞR3YJKe%-EàRZ*+i)—â®YIK¸”–ÊJZŠÀ•´TIKi .€Á,îš•¸+Kq׬Ä] \Š»æ®ÈÂ¥¸kVâ®®lóHZJað–šÉRZ*+i)—ÒRYIK¸”–ÊJZŠÀ¥´TVÒR®D—òHZJc°`"jZ*+i)—ÒRYIK¸”–ÊJZ*¤¥ü¼›½4-••´Ki©¬¤¥|ÀKAý¬õ \ êg%¨OàRP?+A}×¼“‘À¶Âàè 6`ìÛÞ…¿1ƒY`›À¥ÀvVÛ.¶³Ø&p%°GÛ ƒ“lp‹lxþ–4Ã¥ÀvVÛ.¶³Ø&p%°GÛƒ·í“ØÎ#mHµ ‘\ÙÅBŒç´±ë­ýÂ…“ %˧2(\ŠÎfùd ·¨óË£¥uþö„ËOePøkw@>,6œ•°:‹ïæ^`ŒQgíSakdÉ0€FáJ`›Àùy˜R#,ü@Kμ #Göñ†ð.Ý˽\…wáo,¸^Û^ l{1°·ÈtÎ[´WzÞ‚Â…óíö‰ž·øú¾SÃlRóì ûþ¶üë÷XøÁs«íÑ ÷‹ˆÌ¦/²V>™3LÄÁ‘؉¬&s«-€ÞÖØ'â!‘yÓRh«`”Ë÷‰Ì.:cçVÑ(¯ì‰p$†ÆÆ¾~ߦFÿ·0‘#²êv3GëŠþú!=vDFbÄ‘<àoË¿þï›fë䯜!cøïÿXÞj…ÿúlÞQð&þ°ÆÕÿú1;@Àp—”VÛ›99¼Â! 9´‡ÂSæ‹/=õžCK+ÉÂ$o,Ìä¡…1™ÛŽ-LÛ*åå–}EÁÂä1 Ÿ´0†s(JêÐͽpªC§/©°VÉ(O¤ìs(aú⹄áœCs«!%Ckr²åPʘ:›eóe­ŠQ.õÞçPtÈJ:0¼Ñ¡9t+9…ð!ZÖŸáš™É(×jïrèGv(Iš0¼áÐ$q(ou(!;ËÙY§v¨8¾–mO޲»ïÇ9dð:Œ°ŽÞ84u1ÒÖñ i7ÕË+¯ŒÝ Ú16Œ}jþ´~°±‡æ±CóÇ™þf÷'8äŽÍ÷Ôü¹=Lá¯Í74¼Q.†ßçö—‡½G|Aó¼/X ü%_Ð ù‚&˜þöù'8Žq(<Ç¡V‡Â1…!m¾ ½ÿ}œCñ·lâÓÞ²ð—¼eG¼å5àȈÐ`kãN 3µÎŒ‹èέ¶Ø‹‘b/FŒ½<àãŠ:ÿïÙ±óFÉJñ}$¦cœ¤Cï[Xä]Ò¡w%¦CàRLç]YË\Šé¼+1Wb:ï#1CrˆÄtÞ•K;®w%¦CàRLç]‰é¸Óy‰éhr3‚rHŒé¸ÓyW|A—|ÁwÅ|‰éhc÷X;jLç]Y¥\Z¥Þ•˜K«Ô»²J¸²J½Ät4…§,L³J¸´J½+1—V©we•"pe•z‰éhŠ‚…Éc&>ia çP4@UèNî]Ù)x·¡­b:‡Ö¡ÓyWb:.Ått%aˆ[Lç]‰é¸Óy‰éh*Â,³’ —ö¤ïJL‡À¥=黲'%pMÓFb: ‡¶°È»´'}Wö¤.íIß•˜w[O0ËÚÝ&w[ZÚj ¦£qÈàuœX%¦CàÝr}’Vhï–kÁQš‡b:ÚØí¡ùcìîüÑÌc…w¾àÈü1vhþ Ät4¹cóÇ=5Z?¸Â¥˜Î»Ó!pu– Ät4a_lU_Ð<ï É4C¾àHLGãP8Æ¡ð‡xL‡À_ãPâÐ@LGãP<ä-›ø´·l ¼áP¶#Þr…kÞò”y—b:ïJL‡À•˜Î;‰é´ÜÆb`1÷RžRÔ&¦CàRLç½é}ŽÄtÄò×|!ò)éЧÓ!p)¦óùÁuÈbxùYá]°»ÈÏ W‚=Ÿ#Áu²Ž{>•­K[1κ/6c¸ä|vQ ïBB€umès$ ¤±Îa­;9‰uûXf]¦†À¥ Ò§D"p)ˆô©‘>G‚Hë<ÖºDúT–E—–ņunÂÔ»P“Àº SïO¬u† n º¤±.kë†w¡ÉÖe—¢VŸÊ^ès$¥±.a­û"Ù:"p)Õ°ÎÔGYç"„wQ+8ay êsÊ+ënžØÓ¬Ë„µ’s2axãœL’s0¼sƒ‡&lÆ6¬'¬ZÖYÞùŸÆºò$ë|Àp)Fñ©Äø¼cðЄ-p™ˆ©*­6aG‚ ë¶øÙ§¼øT‚./>•ಎ†õ\Š~*QÏ‘¨ Æ:ó¤_x;ŸÔXޱ.ì²NÕº`$±.<É:Ï;?¸ÔX´a:I;4ï¶k'i‡á/ùu&Úˆmw^Ѻt(rbҡȉI‡"'&[asµu/DNL>æœä]çDe]6’ 3ĺ|ˆu[ üSŠ£*qtWâèŸ$Žî¥ÚHñÈöÞ‹a —£i}‹C8ƒ™ªUPj#/Cµ‘VR®ËоH±¥‹G'p)Ž~Qâè.ÅÑ/JÀ¥8úE‰£_†Š&ÖYÈ:G¿(±%—bK—&¶d1\Š£_”8:Kqô‹G¿ US*¬sXëªI»(«K«ÁE1i.­Ť¸dÒ.ŠI» c*¬óXëjý¢¸o.¹o%ŽNàRý¢¸o.¹o%Ž~ªÒTXž²uÿEàRý¢ÄÑ \Š£_÷À%÷í¢¸o—¡òM…uQ°uyÌÖÅgmÝ„áR0ø¢ìò \Š£_ø.¿F}¤®Sa]ÂZ÷E²u,ŽNàRý¢ÄÑ |”u4ŽNàRý¢ÄÑ/#qtuY˜°VrN& —âè%ŽNàÒ~KŸ°OØG¿(qôËP­¬Âºò$ë|Àp),wQâè.Å–ô [à2AÂr%,w*¢•Y·…¢/RXå\ Ë]”8:²Ž†å\ Ë]”°Üe¨ºVayÒ¯ \Úª^”8:KqtÕ¯3æ ¿î¾Â2ê#Ź ëì¡ kìS¶‰£øKÖØcv¤jWa;6aÝS¶‰høkÖ=5aS;aGÊyÖya†¡Ý„yr7Áãè.ÅÑÕÝ„y~7Áà#u¾ ëÂ1Ö…]Ö©ZŒÄà!Ö…'YçyçG €ÖÅC1w7bJ0KÇåÔ}œ‰‡6b#qtuéPäĤC‘“ENL:9‰£k¬ËÇœ“¼ëœ¨¬ËFra†X—±n „_¤8úE‰£¸G¿²iÀð‹'pnÒ¢4­YA97ûì›Qùµ§78Ð!뿎DÛ£H京¯’á»*Ñv—¢íWÅÉ#ð.&¿Â•h;ÿúƒ, ç<­ò¹*¸“¿ŽÄä5[È`“¿*q*—âTWåwð˜Á,&OàRLþªÄä ¼‘Of}ˆÜk vXƒ«½*ëKëO§ÁÂ¥ÞU1¢ÞpÈ îNo¸bj¯#ñ}Ákpï_·’À%·òª\¶@à]@`ð„áœÁe²'¨Ú‹×¨çl¸Žd4‡§lpã|¸ä|^•»\*!¹*AE§ ¾©0´ÁÜù$pÅE½Žä 4GÁç1wm°’+ p)à}U"Þш4¸q \‰w\G2 ƒÖà/’ f—2 Wå¦ïòƒiFÀ[ ΘÁ)ãÎ+y‡ëHÞAcpL„•Ü´ Ã¥¼ÃUÙ`¸”wÐMD~ÒD„s„p%;qÉNh .O2˜; \ v^•ìK;ÝD”§LDs‘k&b$‡¡0xK\¥èU ‰¸½*9 e0 ‰øˆ‰hïA p%ÓqÉth 6OúÁA€KÁ„«’é ð—ü`cùÁÆŒøÁ#ùÁö9qâ&ÂØ§LD»U6ö‰0ö‰¨pÕD dM4»c&Â=e"šø5¿f"Ü1á†LÄ@nEc°LDÚÉ™çwrÂ¥º“3ÇvrFÜÉ1"ÁáƒÃs n58cp8Æà€ìùò4ƒã¡­²‰Oo• „¿´U6ñÐVÙÄ‘­òH6Gcp:M3i7š¦¤$\Êæè^D2’³pñ²9ëò1,ï:`*ëðdstÖåC¬ÛÒ1W)›sU²9®ds®äTD+,ž))Âï‹ê8áÒíBÒòH|{´õp¹Õ¦›àÏû=·!ZÓŸÁ¡±þ¶üKˆ€-?Xþ„wq²Þ®ü–Â÷S(ݨZ8ê|”:1|°óTpŸì‚÷Bçì|µ Mç— \¸åùóSNO|Ö+r丞Úy;ÿEêü‡á]ôOR›Láa7o¡v>`µÙò­ÚÐã,Þ¹l#¯Æ MXÐy>aWsñ)‰mxꨣCáòI­Oò2¡V·ÆK Þ÷û”^ÅZ~ Kóò‡bT~ ¥óVè|”:1|°ǫ́Œ¼ç§vÞ Ô#¦Î­Â!« P÷uÄ*üP¬KVAyëëóÇUP:°Ü«Uø¡X—¬‚òàçj¼d¼d¶W+>¥7ZΟ†w¶«Íf.þœ5ΖP— ÐqÁBÿë·[«~!Åwƒûä×7æ—BêS7—ÜîÀ7V»=¸-u¿7!)𰶆ÿ]»cOE ÂiŸâ½Å¢õcÝ53ø´üõñÿÌÚá¢ùç¡.öCüyý}ýñß+}Âù\üŸucúûÞ•ÍœÔý>àÿ<ÿÏÁ† wÁ=:¿üsþe9H]\…Gk.ë Ýv€ºõçØÁÿ7•N죫DÜ‘xv®…߉8™ˆ¯DÀÊr‡ûxߕ̺’*‘$I2‘‰,úà9‘"]ÝÙ¥ªË-·x®Ÿ7Ú®´ðe$ÒST÷VöëG‰Øˆ—‰lzÓ?Çt裃"»biå+/Qúè‰x…Ho#¾”3eW´ÿÀðƒ÷g¢³³û8S9Á‰ñ¿1BØóÜ[ù ô/d ºÃD¼DÄWð’FxY#üfI‚/¥[ú‰9³Ñ3ø? õ>;`DŠ>™ÇB‘ò4H1¬‹Y…ãÎ×VÁM—ÇŠ‰6V7øÜF‡÷#©ùŸû¢c”Eç×dÚ6"ÆÓ¹YVìï•HX~0‘ÙvCÿhŽe‰äV¸Fäûü§çÝæt'rÿW?;o °¸ßá&(¹ï›Æ­N’©fp§¬ûÔQLõ>ÜÅ>îÂýFÝãwûî­ÖJ³~þm­¾4öªwºòŸí7Ðj#r]\½uGñøWk UɘÈõö›Ö}Ç p]ðRóókûW?Ä?æ¹9Ùî³ôþ¯=[{òçÕ¯½Ãó´Âó´÷çBáæ±U_ÿÕ͆ÒþÀ:ÿ­ïãìùÚ*nD¢D$*D¢@$Q"s³‘Û¿þ'rû­'’ÎÙÒVË«*¿¶A".ÉD–ßz"eók—Vö6[ÿµ'RcÍš‡¸ÃÝwð¿Æ~.7nß]°N·åd¶\dÂ9›µó f4måoÔå‡D÷o_Î.DÍ™/çé¶´ý\ºÅ¦Üy²±…ÿ¾ý‹´šùûyš|Èn=œL§[ô,¥[ô…ÁùØmcO†ÿ€¨‡ly«˜O€)7®´pÌ¡`Š=[k;ø.‡œÇŒØ´£û„à=#ü =%D½gÄv8/1b@;,™/h‡•f†qiÇ¢ÞiGÐŽ;¼ãÐÌ ›×öûÖ„M™yaîà­í˜YdY¥ù#j‡ÉÞiÇÍ öc_¨iÇmì-3â42öC3ÛöÉ™ÑÝ{Ì‚n’±ç©j—ŒàãFr-ü÷í_¬ó÷íê|Øj²BŽrœ0ï'`MIƒvþ¶ü«),z< 5ÿðçwRmå}-¹cð?¿Þj…ÿüA>†ZïÄào´•qçúWòƒó!àÎÿü¨­¬›¹’Û†ÿá—ŸÜ&YÒʹÁ“yžÁÎa;ãP…3/­0ƒS­ê`pÂà;‡{‰nJ5Çà„ÁKÅP>߀ð–Á¶Z5¸w>‡,hðúŒkË!S˜8¬‚“#LÇI5ƒ3FÄ\5˜½éüc‡ÀbdìÞ€±/m|Ê5*2í¨p¢\÷V€u÷r-˜½_b±¤ä›Á9ƒ§ +×ò„7Ê5QåòÖÀ}Õ(ƒ-bðÒ(ÂÙkâ„álö.­ nFÃåc!ƒg#ˆl|ÎujM,1øþ„ÿ)Å/­Âfc~ÁAXL vž™Ç g ^ZaóèϹû*^Â`£cæ±Â™{W°/?@¸fCÆ1ŽA‡Œ|.÷“ß¶ÀW83$K+Ì`{Ρç`¬@½2xF/RìüøÂ5ïçΚÈÀ0ƒã$,ðÎA NŽõ±Â™/­  .™Ñ § üÜ,¢>D8ó "]¨ùRá ƒ bJ8"4Èà´-±WÂ`W<[ˆSÆq£Q"UQ"¹.Y”Û&Uuþ°,XêÏþñF[ÙGy b×GÿûÚ…Æz%XºEávþdøò„w}ÜÆnÖQÍj2ÿ— \{7* ß\ɯt6D[M­Ê:ÄKÊÇ›éÇÊ¢¼ë¹{FbùÁòÜšàpÇ[ù ø[”€Ã£D=À¨Ûý€àMçCxÀ­é~pk»>>~ð#·Q¢ž;¦ xXçÌÈØ•à~„º—ÔÆÁƒXìë‚—àCZ7O! _$²RçãPç“”6q¹[áYšqyˆó™kß:ŸS÷‚7Zçýî;b“p×Î÷•ºkG©»,ÀCkŶ O(<´&í~áIWró€ÿñþß.&óëÿNüøóñgþXHYâO.:wÆ­"Á[¡U6}¤¾k5:¶þá¿54êx¥ZµÁ]ô UW6Ð*³1&ЪßàL°U»G@­_>ù,´â¾¼ð·ÚDªÔŠúòÆe¡Ub\u¸Uã ›©Ý˜ûéqЊúWóÚ ´¢.»ØŠiÎì* ­¨ÿn'áoqŸû>Æ¿ßI«ÿŸ[hÅ|nfÚ;Ÿ;D©•Ò¯ÿv>÷£Ø£ïWãs ‹yÓ%«ñÌñßb>÷¼Îy¡¡8‹¾àVvoÖþxæ¸÷Üç~èhEyŸ'"÷¦Ð{æM[…VÔ›6ÅÂVÜ›67¸þøóòyùÿŸÿ­âYhÝDyLP-1.10.4/Data/Netlib/d6cube.mps.gz0000644000175200017520000033705010430174061015455 0ustar coincoin‹K®9d6cube.mps¬ýK²%¹®-†Öe¦>ÌÌ4'A‚dQ¿šte&™ìõ¿'/öÎE:s9À1ò1G8? àÀÿø_þ¯ÿã³þßÿÎÿÛÿ÷¿þÿóÿôÿüßÿ¿ÿ÷þŸ>ÿãóIþçÏòuå¿ÿDÿOùûêßÿ3þþŸtýüïÏoÓϯÒÏÏRÿù×~þ>ÏÿûO?xúù*ý|Œ~ðÄ?ÿûóûòóûòóןÿ»þü»üƒës<×hJóshùç[i~<ÑDÍa¤Ò~þÀó7cÎdN5Ï0'žhósºiÌu˜Ë›çóüñœsž“Î4ÿjN;— /4ÿ0‡Ás`¼þËüyþƒ<ÿAžkólÞæ¿Üæ¿Ó&¼Mx›Óés`sÁóèsg§øÌ•§¹b4ׇæúÐ\ÊS æBQž¢0WŒæŠÑ”&Zâ´äé¨9Œ¹§{ Ù’²)^4šæBÓ\_*ócu¢êPšbøç6·…x~•×_ͯÎ%§¹ÀÔæÇFš‚?áõó›2å·Ìe(óeþ;eüü¡Î%¯sk^ÿ¥Ï?ÌC5WñÏ4êüO6—ªÎ£Q+Í?L1gXÛ„OªcþÕ”¾æ¦.á´þËÏ·xJO=ÂS*xNƒç4xNƒ·iÌMià) Leþaâ§ ð”.5O—ùùÂóKÍÏSÇóÔñÜpžÎóŒqŸßêó¯úü«)ÆÐÏÇÆ\š1Řû9Ò:0SUiÜÆ”ž‘Ö¯þí1Uõ˜iÌÓ9æªyLÇ<¦cžÎ1Uõ˜‡sÌscÆÜ˜1õИ¶qÐúçxæËZ^Sý)Åcnǘr9êú/óš:¦€Ž©ÍÇTµcŠì˜{7æ¹ËÚ^k©¦mþÓs§ÇÜà1uå˜;=¦5SâÇ´»£Ï¿ê󯦌1‡8µÄó_žfaLA· ä%s_Ó²˜iÙµ´Lß?ñúS[êëOËU\Îâ:]i“´ôÏw×7Òú—Óú÷Òú÷òú÷–Wuå5ª¼ÆBë_¡û¿­Ö¿Wß-ðªëku¾®Ñ×µBu¾®±Ô5‚zÿ{ku€×7–¿yñú¯¢õ ^ßàõ/óú—Ûú÷ÚúWÚ¶…mk|mý+mª¯¥¯QÝv_3ïë_îë_îë_îë_îk|}}c¬oŒõq;ñëc}c¬oŒõ±¾1Ö7ƺL#ùçOë20½Ô?¢õ§²þTןxý©­?õõ§û–±¾q_8–Œ§´¾±.J÷}$-iOi}cÉ}ZrŸ–ܧuBS^ßXך´ÎQZ§"åõ%ã)¯oäõ ZßX·£ûztßÒ’ÄDëë¼¥uÞÒ:oi·TÖ7ÊúFYß(ëe}£¬o”õuBSYß(ëëÔ¦z_×7Ö©MëÔ¦ujÓNíÿöÿŸÿßÿõ?þs5þûÿ¥üÏ?þ_úëÏÿWžÿý›þú ¯â¯>óùï>¾þg ¿U~àôMü÷0©þÀ¬ž¹}îy}=‰piV$ÁOñ3þ’g•‹ÿ=źýŠŒ)¦K"aS¤óûaŠiHðßS,Û‹5Å¢N±`S,ç)¶Ó«ÿ=EÚÆX­)>Ïß7?áo¦X$øã,æ“ v þ{”|Ý¿â÷SÜ ÏïÆôŸõP>è¡O–àå¯ ¼½×Cûààÿ p>…Àž{;Ïþ:ж/'éø=÷´IG·ö]|lIðÇÆ HÚ¾>¬ÁgUõŒãƹæ>s¯ܽqùÞ÷i8ÞX–mðóoƒB»¾Ú þ˜{9Íý^º” eµà'e%-ŠY¬ ±Xü±B·éN“Ž|–ÇÉH9p2Š/§R´B2}®¢Î°¹6w:ϽŸæ¾IGÁö½`s/5Øàåt©g…šL/M|Å6®ž?N·XËÿ’õo8ØÜSçgÿ+Ì8mûÞsOxϱ¹7lßÿë:™²mãúû¹ïƒï[$Âé´ï‚àŠ‹™6ÅMqœ§xÿ*_Ðó1'HsåIpNs»Á3¶t[º¬mïaV"¼*¿"l0— ¶?’\1cBI}~ÀÏÊ)×ãëÁmˆ$ûH‚+ Ã2Y³ð0Ƹ°Ÿ`P úÑ%øƒ6#´UݾnÙ2‰±'?à9'yî”Y[:Œ.e(¦í£xÒDÃ2…$¬PzÀ……pI‡RdTÒ±½)ç"#>xŒ©npË]:æ;Þùæ;^$¸;ö…‡eÇ…Yíû±ãE‚?hrÊA´K–à¿·÷Ú~ef@/u{ûÜÞÚ^,:zÀMÛx˜ÛÛµíØöž¨éô\ŠDøƒ‘li®tY>Œ`×î).8åqÐítuûýõnßáê×~¦IWzÆ÷)þà„…pä=á«Ë\`v“çN|ÃÑ€]:~þNÈŽLéHÚÒEüÂ,Áé´tå¨Ûwø9¬˜.Ë/Tý\Z¡|Z¡üüzÈsÞá¤üÊrÿÔ‡_ .ÌÄáÜÜ_¹¾;\àý;€ n–_êöV#h€Š%;BæÅh‡W嘘q˜¬®¥ãã‘ÅýKÙ¢mùoE?½Íð]e™|=hýZÀúe ~¦WJ—åþÑPWè^¯Ïñð;àD’ŽÐ,ÁÝD7iÓàÔ7?àѹG²g ¨½M&WŸZ,²à²ó)/Ê÷ 9Þ;ÜO?ÊüA"{KG„ÑoŸ¢’dÊÅæñõ˜êÑýl®‹¤1úm2q>é/'‚0c…0ç3©AÉõ+‚TÄFÜG‘ 7õI#î;^®ï{U‚^¦¸/4÷9qß)¢ºÃ+¦ëqî—Zãý³¹ï’Âû—N\ yûºå0VÕçZ¼§€’¼(¯C‡Ä.Å×°“1½RªÇAcôœŒ† (m¸àÂÜ]'£c"wNÚÀïÝ÷¡íûü•I(ýW‡’9O²áA!ÈPNа~Ÿð ]Ëñ÷×Iopˆ aÁ£s§€æÊÜÏ´ÍÝògôH`V8‚è$óôüº¾BÒ®ó;rÅd³¾¿ŽoV5cª WByªâcL´1—`#<å0ÔÁ7lß#|Ã$ÁI¼”;¶t۸ËO¸:“\°j™Ü.AO-%hi¹¦¤±:|buÐ᛬ƒjíÑ‚ s÷œ^uÐq[TXÏ·Å ŽyÝwòœ^Â"~¤­¥¢åÐ)R•%¸?IÄ\¹ÙD8¿O¸¼ö.VìôVìôš~‡šB$6½ºi˜ðèÒ±ë@åÌ .ŒÑ¥ ¦ ¦ Ìú¨¢no·ÜJýðwìðw-Jý1^^%XñÎtÖ˜ð¨»ÂúÅï~ôdÑ~|=”,×ûl̶?圯J·¢/,?àB°ÇÃ-Ð+âdRD’o/ºÿ”ˆÅÌ(O¸ÌNfúÄ<09ÇÞ™ «znÂ/õ¥kçgì3ŠÓ•¥k©ÝWdÈäa•ßÿ†ãømE2ú' ƒö|ÂÙ#¢ü±¿. Þ#Ú ê»¹Ã#ïdLrZýj³únê Ìøfw|=x‘kä¹È5̽hX$ãßM jžVYÓ*6÷ê1ž&®aü>ágv1õ¾Ö²k Ë]µHîjƒG|#zÀƒžssùF óšË7¸m<*˜sÓ± JÇ2(ýúwSP6™®j¾ú™>Ç“\ïØ;çxç,Í]­¬1)w«Z ¸QîÊÎìÔ ðˆ…îòE®hÁŽ?&\vâM…Ñ '“ X/½è‹>'»£•ß'<¨øz„}‡%x$ûÚ1çfÁ¯9YÕ*Ÿ:V˜Ókàd ®iW,¾3áòBØÒáŠï˜dÇ*ú‚ ctIpÃ$Xy|tL0opÓ7ÊêÜ»qiz*ŸðèöFRTY‚G\ߎEÃ&<:wWÙð°_Cku¿ã© OÍ‘ ’$øï%â›àÎäŸÖKgG:š/Ïé)pz›PU˜´Ø:MÇÀJcV6<°²a›ðZ 7ÂDûø9S0u þàµÞ¦X°í-Çx»'æŒñZ'Œ×:)¼Ö[™ÀÀ°Åk]#ä¿i`<5#ÂS³-0æZ-^ëŠ9k¼ÖÚK…×:ŸÞÊ—mî ;fÉtÕ‚Æ«þQh±Ï/‹W«&-öÐW¨c+„=û=°B$Á«ò+Ë3@$äV$øc&ÃänÌTb”1^ë¬ñZ÷SYw—àgnç|sŸô€3®êöæ+!Û›^ëUø~.ƒÊ&¯uºÔ¹gãôs‡ò‰;ÜÏS³Á íLã8ÖùŠt2a ç^°¹—ãÜ]ûQYg…Ê:ŸîÓwŸŽ|AœƒÙ¦²åñõÅÊW$˜&«ò+ÓãÓºy,¸ÜÎæ°Bôüº°BÙ¼1ípÿC± =á_ðÜN¡V¦ JGÄã«üÌôŸ¯ŽéŽ~ FN+$Áƒ+ñøš?s…çk`+´\¶S© M†¶B¹5ìðsP%›´Ø‡Ø6Åt™:Xyl˜C´ØY‚û5Ìàõy%]¿‚º/¸¼¦…NPú0ÅäèÂ'À£sÏØÜ36wˆ ;cLØ9Ä„%x D"§‚É|1l¯1÷‚ͽ`s·¹†&ó˜[™ );\¹p%(¸àÂB¸¶ $îp q3xf Q«mYðcÙ¨Áʼ®ßáJ¤)¬ìS4‰ú aneЏ•E‚ŸC­Ù¤ÅÖUi¼_¡ï]!Ì­LŠ[yËPvD+Ï sÆüÂ|ASÌ—GLJð®½Ypa!Â<>º ÍE—'c2¾ qâm{ óøóøÆ÷ãöÒmÓMÆ÷¤Æ‰)Cv2&R|”=ŠÏä…W‹Êüì·æ€GWˆ°óC®ócV7ê+TŽùª¯çøÍTyk‘¨AïNvx UL6éêåY=àAéÀüBrù…&+=µ®M‘±)F’Õ]‚+‘5Œ•~Áå…°%j£—)ÒFo[`G²Zó°° aaAr…=´òš‘Ãâz4ÞKp¿þÐC÷ æåÌË+‘¸Ip%9bÒÊëÑ‹’ èEZýíðHô¢dHA,0WÔ|ïú•SsÒ{|hŒäcÁŽIÁŽIÌu)g®THÙaóYã˜/f»ï®8]…±ÓÀ˜¤±KÒ̈’r0©äÕ‡è;<¤ì¦ì¦ìÌ>9ê}¢tlé°@FQŸ5Šúf>"ÎEý‚kc Ýq”nx » ðmÙì»F>¿ý*½× ü‹Éêv$¾Ø•¡U¡8¹@Å< —ÂÞÅHe[–àþ¶á˜ßOØÜ!æÖâ˜ßàØ{‹›$þT<4›Q1Ç®–ÀÉüq2¶_™Ì®êŽz”—~«˜tTL:0o£swy|Ë!.üàé…:'ïpÿK±Ûï0 òå· ¿áGÛkصH J„+‚‹ ®8µ&¾Ú9,×sišƒÜ,W,„U#¥iU‚+yšWÿç ?rë+ÄXŒÕ<çúödAáÔ÷¨1Æ• §~Ê&CJf̱c,„ÅØ“ŽyáNt÷†Uxf$Á#U±¬¼Eݤ‹™ñÀ¦éËX$øÃöÞ a¶LÐE°A´À;šÐΖÃBëÙb¸¤m\ ,]~^XºrZºMhM§IŸ{?ÞŽÿ>°ò¬_&µWÍúU$#ñ„¿™â¾½Pc»îïÝÇüì=–‘¼æeÑØì†ºEa`K§~Tt~“m¨ YÏëåEy|=v’§/^1Ø„1nœ ¾xE£P;¶fÌüܯ¤€o´OñNµGî=‘VÛ l{ ¶½%  ºW.&³›qHëqäÝ%)E|ØŸ$Â59gL‚—ÖC"1ìpÿõvƒCÑ¥?zÎU£6,©a:ja°ÃëùÑÒ-x ½¿.©cÒ‰mmðŒIwb<()’Þ«üqøOáï|ÃM¼ª*¾|nzð3x"ådä+°tù9ø˜]Ëv7uîV7„ªQ— ½k(Ym°´~åýüô¦ø¾S|‰ßñÉu“àçל#ñ[py!Ìß¡&P;<¢ør €ü€•¾!Š_˜ÿ:Fxäâš¡r¥bRV‘Áéñõàɨ“Ñ%øãdŒûW–èv5*™ õ¨æÍ¼†˜°J†zW–Œ9Œ. Þ¥¦¦ ºÇbÒ=þù‹ªì;TªµÃ,9;\ÉfÌaÜ()kD´#c–àþ$Ä­71ªË²Q]ÖÀÉ Ìã£ÈÞ n:Œ‚·L8‰|šæÉ ÙKJ›±Áž¤’[$,ÿIXþ“”üç¶?Ы¤BVÏlc{ [!ÂVH)Û~U°*ØáDz¯)Ûà›{Åæ^±¹Wlî¦+XTÅǹçç׃JŸ5¥¿~‘—–¼4bÓ)âñU þ£´Á±àuL´±àaÁ?“îT€M¸ÔL;;Ä&â æçàÕÛ¢ÉjºÞt‹S,$ÚÅÃV0öÑ?f'tÛ[0ת¨®ÕúDB¾à•B0ÅiþË?øX˜Ù¦NUOY!CåEy|ýÍönç§`²i•Ç ƒÿ>áÁPQ‰4Æ*\ɨˆ~Á£¢]]Æ‘ÿ¬xÌ=/pÏI‚Ÿ{K•qª,xÐŽ¨;縨¥cÚµcF®cÚõìäS}aÞ6n` j`ûŽÅ£B¤¨7Ü$E•b2é§tŽÉdûëAÿ­zº¶—ŠùFž }¼x ;Õó>±TÌ7ªË7 ¥àkÄ7" .¤#y–;¢Šqª.¸0wÏé­XmX%ìôšMC‡zz‹!Ú‹OE…GŦ¸D«ÚŸðÜòiŠý〟ó”Ãz=!BØü€ SÅr€•!‡¤bÎXmÐ¥6-¶~…¥ú*–ê«Xª¯b©¾êJõU¬¶ÂkzñÞHøzL9c¬³…1ç†]·V9e;ì÷ߎ›¯Ï¸ëúÄITL Zý”1–yã8eE‚+WŒ&·0Av‚ ²L`,§6ᙋ?òù„Í H›$½©kîß„ —7—~«˜~3›BÚàg«¿‘BŠOG­_auL‹e—CO¹¹,æ„0æ„0æ„p¤%_–àJŽŠ1'„±øL=H=†ˆ„óÓo!*_zÀƒ+oSù ê‘pºü®ÕWøºzÆCT¾ô€GW3ž‹Ê7¦ßBT¾ô€5W« `RîêÙ§ÆPô¯aϾZàÙ׿VbT¾ •Mˆ1q‡GÈ"<ÁJÔ·aù"xý Ë[hT¾Ùq~"ç³Wvc^ðc]ƒ~z{¤ÚV|Œú¡CĈEaö8È{ùÞ¡Vr;\yvl²ëO,6¶bÿ‹,Á#g¼{¨þKDzÝ"ÒÏx'L öÅ~f_,&m³^³Ñ6ËB Tw}E¸Û ¾¼>u,9Ò±¢Úi³CÜÿ(}û:Ô²·tÌ3ëì:½˜Õ1 ãœ.£êçnº?sOíE_Oâcš«.®E‚k{ÈÔ­^ †îÀ°>´)~¬GýÌ\´1G˜ôפ&¨ÇeɺB‹^ ¨oX凋™º`ÌÔedHà ¬òCc¦¶YíËpøFŠŠ˜ðZ#MæÊÀÞž%íÁ6ã(Æ9]F1dS^”Ç׃ £ æ‚ßç×£ûî*—ÅH£\£ë\bq£Áعlïõæ>ø†íOsíöfg£û©wÝ$x`çg®•4+áë1×j ‡kU¯åazÀÏu[š~«W¤oF–àBæ~ŽÎÖ *k]ð˜×+!¼ÃÑÙzA%! .˹=÷ŒÍ0ѾS>tíò±áQÑ&-lû1¶;\ÛÞ€sóÍøq…ñ¼½³¬µ–€ý©—§¬µ^‚Š AÅ„j»±ÃÏLõbL¿AŽvx 0a‡We!¦Æ ðP½ G;<Ð8¦^›;T¶R¯ŽI‡Z¶²~e7ýø|lø1ø¡äíð@òª^PílMPÝÉ‚E;A ¬«BYííU½Ô¤T½8¼“”°¹;\«sÐkÁåα« ¢<¬)ByØ%ø9¦YM.ë®e<ÆsSæ¿%(%·Ã«²Ž&1bJÚ H·§‚­PäÅw•àçäUMS5 COxt…ªvX¿Âü·dµMSÛ­ìðhUãÛ¶»…U“o»ä®Ÿö^:xÐ7¨°<ª;&ÚУ¨®\oÓÀÿÀVh`Û õ’Ûን1ï1_Ð e¨kî¬P¾\+”°‚*«kÆ|ÌŒEÿLVn5ü½à]JvHGFr_5¶qç‚.o” mG`®:àÁ¯CÕN5+}!ÎjµÓú•Iõ§Þù1Öç(9¨ÙSÔT3µÊ SΘw’1ï$[Þ‰±ÀݵÀ#fà ˼‘™yÓ¸Æ*Aly•),·R°{o„ƒvÿ:DERKöèŽBØ1 ] ŵ”çë1ÍU ãµ`¶·TL:0Û[°‹k9_\=n(îkaÏÝãw­¿kÅø]ki˜lbVµ`Qù‚YÕA+=àу5áÁk³‹ ´VÌÄÖ ©1ŒÎ³Fè<·¬ýFçI ƒDzø8ɆG_sIGÇÆˆ9Œ³z¨2«û:c×ÅuÉÙ–àÁœGË¥\(§ô$]zçYÙe<1Ìʘõc—õcˆ«¢*4”žü“çÀvÏ^­¨–-¶=´Ì˜d—dÌFrÅD¥ºÆÈmÈO8Ñ' ©5òGº ¼oÜ¿Þ0!p™BŒ²*¬ž Œ²b„#l¬ìŠ¢bÄŠ ô5v]lØuqñ2¦ÜOxðø5Ì6,Ú°üiÃò§ +oØ ±Eêºó~Œ–‹”Ûq‹Ä†Ÿ_7„+ò.ï ÞÑvÁljaöÇÊŸ6%ºýÊq‹U.Y +Ìn®%“¹Rpö]œ:§Ð!ýS‰PSצ¶®X¿‚vÕ 2$¨ÝõT’ Æmv#nX¡ss:cü– N5dˆ;víT’Û¦|©„wæ cÑèEþXÈ}àúùéX*·t~tòÇõ«‚{ë¥ó'®_Õ÷æ@€Ë3‘ýñ[:c§Œ±Æ¢Æ!DzÀƒÎBïØ×;öõÈ-¶<àA±ôõ¡<ÀvnÁcAX¾2¶BY‹K¬_6EB"|ì˜l… vLÎ 7ý"_›bŦXeÇ.6ÆØ<öV’/¨ý0cÜjŒq«1Æ­Æ·_Û¸Hó"á뺊Øv~v~gáV$chŒq 1ÆÆ b§å” LÉ#‚ sôš‡æ¤Œ¤'X¡:Û§ 9&ÁÛOl˜1&.NÖ£ãëŒ}]SÄL¡B'åšbÇd¨Û®sŠ‹Sw­ÐÀÆq†d²ÂväÑC:ÛÑú•©Ï›R7ÉßP~®dŒ®ˆ1º"ÖèŠÈl£ÉÊ4rÆìDŽ4 ' ^ñzÆH<º½VΘ5É‹÷’°¯Cv¸`¶·@ÅV\2´ï%ÎåÇnÇ3Ýzó³Ã#—·Bž83ÆÅÅeù fùKà-}]#fº –r-Pµ.cIŒQ-ø‘—ÎøºÃ0{ÔË%b˜²†rÅ SÅ•»yÖ 2Ê»¸.æ¤vh£©+çŠUKÕŒ ~ZÕgî,VÔ‚ú!J¥ü¼ê8˜”JÂÓ}éœx “Ö¦ç×õ™`æk1'•r”¡s?kƈ—ئTjE[`åqL¶õf­Øà;Ó^²ÿðõUwû.,hR*•ñÑŽ_³rjEÝ8+­[˜ðWsßà˜±_TMíÅ‘y~=:xÌW˜pôë1{‰1=-¸0x±gA?3vWe,]ÌXº˜¡î6ÌXº˜­(µ1wì¦ÌØM™±›2”Èb,|­;½úº~2°D0FîÄ:¹“-˜µf,0ÍX–”¡¾5ÌPßf¬¤—±’^v•ô2Ä`ÈŒ•ô2VÒË®÷? zU{ÃKÈßl—ç6Ò°ÒÛ §‘BcLž8ÆáÄ +½Å8œvx MÉWÜ€†å{›ëâÚ°w:-°à†¨`¯ULT°|oÃJŸš«ô©aAcŒ‘‰]ŒLÜ0ã»™BŒs¬S*™†­aÆ·Yo‚îPlxƒG®# KØ6«Y­ÐÈrŸ»‡{Ÿ1¥^™:¿îXüºcÖ~#a Í»*÷];æEt¬ «c^„‡Ü©Øð`à´¤T6xHh±€y‡ºqwÝ´;–.î;XØM»cOw1Ö§¹Šuö\Å:æQ`ÔR÷׃ûÓ°óƒEÏ;ö¦ªwL:°ZìÅ‹õÌn=Нðuu{æQ Ì£˜G1°§» ¾ˣЭêÀ2â#A®qæÙ§ˆù‹9,vüæw`Äc ~<~zæ #cŒxlÁѯÏ%æQ,Þ²z6°HÆÀb÷ƒ¡äÈp<ÄcÕ®P x=Y‚kª{M=º',ˆñ€ñÀŠ´‡§ÿB» GÓ Kˆ´ ºu/x¬‰t»<1ö†±\µ б7Œåª]½Å¯Ê “! è4áëZì±aTZ ~¬51v±`»X°],®]„Øü\F•š¾h<Ê®</¬ãö+Æ•±£Ì.uÓ°1Îz²Ôüë¸ AÄ.–üh²øÙþx_¡îZ¡)ä¸PàîÚŸ0Ç´%ÌÞ.2«SG8?Â×_¹÷ö&èJ»àBwC³2¶tÐÛ§†q85ŒÃ©…8œÊ+1o©bs‡rÇ÷×õÂt{Ât»‹Aª%L·'‹`Âcs±cg¼ Jk´ä¹Xµ„Y€d,ë+”¡Êß–¡–u-CÜÇ-c7® å9Æ Õr$Ϲ­‚YEiŠiZV¥ÌØj»ÌÍ7ÔÊdž¿!ƒ“¾®3Ù*˜]Ì‚²²s]2f²åÑcôdÂa~ÿ„ \{Öý– _4ïla¶0Ûàb%j+Q#(gÔ3ä2„Ý!0ÆŸFP%F#—>ÇÈmuÈÿ£-0Ô¥‘KScô2­@5 -D/SðX~°L‰bô2Í$xQû"/¸L¡ûŸeº”Š–V"•€Û×1õX0õX*&´ýv+˜ÞœpÍö*Ǻ¸œmŒ”eÁƒQãâRÎ¥ccì˜ YÊ9-ƒ³Q·¸)"¾Â×ÕS†Q¬´ qµŠÅ¿k¾n)gÊOÙÌ8ç±OÓhFèºiü÷ÜÓ©R3mƒ·Lƒ0«M¸j„¼«JðߪükËü×ÓØ~e"-w6áDYVP‹âWÞÞH†š$¸ Ç}à!è÷¯L#'6šÿ 'JÑ72V(Rø•%¸¿#[‘àUùTDzÀ%:®P~~=¸Bj¹ûú•eÇIü‹ßpa&.¬Ô«—ƒL$Áï5•ƒÜI7·W‹ÕÛ? ˆŠè˜Šèçíe³%á×ì„åÃÔ®JÇœr=zy¤,ð8 —ËĪüææÉ0ih†¥ÅÁOøÑ?`U¸8’—*œNþÁoéÈ"ü÷ÎÑuÿ*½—Ž}ŠÓˇ'ýDä€/ûwÒ¡Ñé0–àSÖOضÀfd@\”ßpEõ(y3dY8Ò¼E„+ÙE“tÇ.šªgœ„+yà”O§W]`˜<¦Û$L÷>Åéá>ÕØqŠ<ª J@A±ÿ-Ce[!Ëíú -÷À¢ÉZ×ìÆ[¡Š­ÐÙÃ-Û¯lW‚¸¼¶fè̸ß×ÐóÒ>÷Ûù IGäYIp¿û×%xU~Õ±úÓSUÿÜôê˜íb•àUù•å «fÏçúĺ>ñ™Ÿ™êáüôûë&ë”®]'\¶ãGÃô\ºvAî_»îßí9›dX”µØð"âáV=ß'<¨zZ‚nžMy̺ý {&´QqµˆtDø&I‚»¥#oÒa&îžjs‹LO8Ó‹ºðôüzÌ(7 åÛä˜Ü_)«J¥œMÎÏÉÐêÔZLNS¶Åq2ŠëdXN-‹!ëB{»ÁÍpã3Ó¾~`2ï¢À‰Ô}Ÿp­(½9¾ÓÚã‚´ö¸$¸¦a°Ø.Y±]áü|žð¨T—X¾«q”#ÑÕ Ž>'¼0}""ˆy„yÔWÀ/àÑ1ºüBÆüBv<W.í Ñu†hˆºÒ¾g‹e³#b§X€ ¯9¶BØ3VŸÙ¬_™îŸ½àU_z¬Ë Ñ÷'•ïlÓûCºÏ}>aéäújázÆsljU:«·M­îÁ ð¨lFBnE‚kÛq­òN¥‡¶·bÛ˘ržÏ¯OŽíel{Ѝ²òüzû•Éð¨ïOÃöóaøÜÑeYúQízÜ?î˜Ú…(;cÕs~Œ8è™Bؾ(âÀêîÞ ¦Ó £7ê Ë¥¶ Z¡v¹VË¥6«1¶±B [¡´ö0Û¯°Œ+Ö¦7,ãÚ°ŒkÃ8z½—éë1ãÙ”Œë©Pl{_ØÎ=ycÁV¨ØFÛŸ]o[ W–àóÕn¥6÷ЬHÄ®HpókŒÍ±¹G"v$ÁýQ«mîXÄ®5ûÈh&+ýk‘Ò?’àJù[søÄš]Ãs͘óô)Ê6¬v„%ÒÁúÆt¬oLwõéý‚v±cq=­oŒãê¨ôÙ• £ÜÞ£ò£'HÎ{¤/Kp‰ë&·Rñ°†2½gL:²K:“¬^¯caÁaxlüÜU¨GÚÎìc,Ø ai݉=’׎I ö¸‹`…î§‹=vŒd§»Hv°æ4}kNãÖÁ2<â‰vì sÇ\ÉÞŒ¹ƒÇ˜#±æ4kNÓ±æ4½wlã Úòn6§)Z×ÎÞ­÷!\5R‡ŽqBö'd‘à¸Ä³ÁZã,8ñéí¹ºBXkœ®µÆ±›Ûv­5Î]<1°GÄ./„y~ö x$HwŒH­b~À¥¹gÇܱdõ°³ÍC“M:Þ£øF¤gu—à~Zùmã°pã„Ó© ·d-Q¿šé—®`2_ °ÓÀ W›Jn(À£±Ba'­MÎö+ÆVˆ1ˆ%4âf36÷ùùT¡dØK,(9švÏX¿Â2ícu¹Î¡y„BÜï4e ®ÔÑŒj|˜´Šêã½q¦£q-0Õšé8îªZ3õ«qA^éPºá84Ìuéü!iɤ v7ÍmYðèÜ¡`縠`ç¸"9ôô€Ç¢8ë†3´n86áÈPºáÜ Áq¶B³„²Q 2°n8ã dÚ?M‚Ÿù~ÇU°*H j\ïºÃ÷µqZ<(Õ\ø (èкìØU:ãª.˘eY]vp9Où.Æ„Kq}‹C97L¸¬÷×2M´-]Ö®–ns  î=ãêØÜ¡á;Ü}ŸNÛ×6÷Í"ßáøóHP]é‚箵ÌqÌ=A/Á‡Ý2GU *ùX;šzÑ ¢ñÞá ó‘›{ÀGü<áA1E|D–àç˜þH[¡õ–çð@^ºßðcÌXà‚ õ•õúU$Ÿþ„G5W¤è²Jp!Ös¸ßŽŽÙŽFŽíþ†GçΘÖfÌb™ñÍÜ>6œß¼À¤ç×C A;<›Énð­ô!^ð¨ÍèØ¾Û ³6øaDmõÀ@˜Ò¥ß%¸ÈXPqÂ)ûiÖ?OxP+dÕ—[¿JØÓÌ]ù½øc=:Åäš"æØMxn#b{3TN¹Ã¥p;\¹lf‡û§ÄQ2Aj,Gøo²3Ô {dÇ3›¦ ^õÌÖ¯ RÅ‘1×*Ô%KðH0 36w̵¡ ¬ÊÈ ›;Ë ›{Ãæ!.¸ì€ÙZ»»ÎåÀÆ8æOTãjh8cq®ŒÅ¹´&#ŽXAÌ6 ~^:54L˜kE.׊6E,œEXb”0·ÅluAùú8à±[t«3›XpÕâd5vÓUÖÄbP¤±[—àç&ÃÓÄBq ¢ÄufÛáÃDŒ,Ì!!,¡G‘„Þ+%»3›f±¨aûÞ\j×rô[7a™3‚x[A¼-Ãìn!_bÃc Ìf@¼-;\¹î™=0tݾõÀ8Ö;(c,X™YÁÒså‚_Áü™’ì›òùIî(X•Ö[ch½5˜¡wàX¿*Ø.H»W¨¨`Y¸ ?Þ«tÇ®X-w AÅÊÁ æ™뽪Ë.˜cWØãÜ”†M±a"ذýiE"Â5U‹NÌý+XáT‰47»ãø‹GÌ+ÛÞáÙ^O§ <6Åêp”hMPX£&(¬µ‘Xð V#NE‚»Y±òÉ­X†«b.¬ÃÃÐ:<8œÏŠ•.Õsé’Kæ±Ú£êª=ª˜×S±Ö¢ah-1™jw[ÕBás[*ª‘xÔmðÌ Æà#%ÞY‚G‚5v5X³5Iˆørµcç²C—ÂÚ=—Šù3[‹†HÄëð0*–_«X9cuä ñÆÜ,†ø‰{ø‰cᬠÞ”Ëî1–Ýãll¯.Úœ=wU&L 2LŒù\ uÕŒ…Š{RÈŵ?˜Ó„uOžî ņ•3cu=̘tXnKÑš/ø™ @}LÀXޱ² ÆÊ‚̦ÆÜ•Šëì˜;ö2±ŠÆ< Ð6¬b§­ŠÃ~MiXÅNsUì4Ì%ÀzŒP;zÀ£+DØ×1kݰ'ø K­4,FÑ .”;\Q|­bûS߯ÐWøzp…"õI‚Ÿi¸FÃ*…›™þÉÚs˜†9$uý‚×*wmXb§a‰æJì´Ž€Ž,\brÚ§T?6\èEõ#›Ìx°¤ã´§ý}z;æ^ôsÀb]*±ž —×Ñ<½+ÌéXaNÇÞpMøñ™š,u¿áÑ¥‹Ð•Þ²i’Ý«¿¼æCënaVß'¨ƒ±º«©»ºƒ5‹V¬ }`ÑÊE+‡+Z9°2ô•¡¬ }ô€tlºÃ vªéí1Œ@¼^â=°$ëP»¿•.“n>åóoøñÞKíL:óøû)nƒø0àH–ô†‡ÿöõÈáÿüýáÿ¼*¿BžûÝðèöfl{#Ý·ÁG¨D¸˜ù¯½ÚÁB¼ÇÀßg:þ?Ït]ˆó¹ÁO+$_~ÃùÔÍ®‚ Wî½é²Ùê•î|7\îág¯üjÔD!Ù¬˜lVûfóçW²º}ŠŒIG¤¬.Kð÷ÏßÒeÓÍgU:̲º¬nïjÔt¢$børyÕÿN6<¸‹%yvÑ$:×Þ9ßð£¦N¥)ñçb™XnÅñu]Ÿ›L庾ؘÊsàî·ÁÝSü>á!Ú?ð‚mo Þ!Ã#¾k). ®Øö"T¢Û×cá,“]p5véøËt/¯DÒ?Y‚¿¬û¸±³ Ô»ºBXŽ©4l{•S±3Äjtíøulî.7À¤0×–Þð`(¼ h*vµ¯·AãW±dN½ ãW/Ïñ3 ÔuëWt‡®X b€E >Îðê€ÇD»fÏñ«X˜ ba‚Š… jÁ„«@7¹Z0Ùt´wù󫊉`µEP›bŦX]SŒÄ è:`µa Ù Ú_Þ,ïUÓ‘ÕQDÒ_ž^•4`ýj`Àñ¶¬9¾®nƒÉ½-xáü\d*&-xÄMc,ÂÏ*«ûü0ö¶ìfÕN‘ cþc¶þªÐ%?¿^ß^Ë?(Y{¸¨pz> L:¦…îŸt`%®a Í\ÉU„8½ó´?\=>&36F>:!ή¤GÜzÀ£ëØ19tÉϯëc4 ±ú’bQaÇ.CŒÕ|†¸¬é~=ÒEL€ÇôPÃ^@7× è†]•[ á©ôu}°»nà ÒŸâðHUÃ,iÃL!D˜ý¸&‚ØUb¼þ<4Åêš"fIMÆkC‚±«rÃldse¾[ÇÆˆÃ5WÈ»®´Û› è"2‚]‹zAÜÐÿ€Gêã5nèûíSǦ.rç*¥v>Vâ|Á{ú.Ô=–—%øû&sàØã‹žŒ”„°(<(\]qUNOæÒ%Á­Aÿü »µw‡«¢¨ð W„ë%KðÈó‡Žq½(ÜОhô„G—sÀzÁæ>)_® _—Ÿ=wW)DT.~Ÿp¹@ñ?ƒWù4nrçç“ÓìP=Šÿæ¨téŒi…xQº*˜ŽURtå"Á•+D¼ÖÝW«¤èØkÝŽ½Ö퓎¸,Ív€¦c‰–îJ´t,ÑÒ±Mb îÀ˜ôÊ:‹ËÀÂCÃÅdbÒ ëeå‹9û»zéùõ˜v˜Ï5¬ö¥ºvÉÈíJ\©Õ²I˜ÕJËÕy̹™p¹¥½?Û%º´ýªBæk`/@G…Ì—É=L*OÇÀÜ‹Áï¯eÛm~œÝ‹!B1ü}ÂÏ\}jEþÀ‚Sܘ1áÇ+„@3%}=æE ‡@6<ºÀ–Þd²ô’ú ?Æ„'¶Â×¹Sà~š4–^³;Í?àBˆÄrÒÅ\.8.Êãë!•.ˆ´#i$¿ýþUÆV(cÒ‘v¤+øÙà–w"ÌjŸ{¤Î“$¸¿O‘à°`»U°í-ØöFÚr‘PÉ¥«bsŸŸ#S ~ø+vø=<¹ÉäÉUØüü2UŸ"D”¶ÃIùUÃvÑô ô3Þ°]lÚ.~Œj©~Ž_§«c+9` .¯£­":f6÷a\Á¹m#í?àçgÂèp\v­Kð‚ËëhJG‚²ŽÉäÉ%Vˆn\¼G´S ¸¾M‚ ÝS?zÃÔ?ẖ[<¹'dyQ_ '×Ô›I Nm¿²Ü?õ™é‚Ÿ›C©º#aÞcR¼G6“Ê;ü!CÛ aÞc*†vÕzÜÝð¨î(˜îÀ¼ÇdEÖŒóS1é¨ÐÝBaéÍ› 1v~Ø8?²Ë&ÀC ̘‚мò.\¹À$ÌõMçö´®Â\ß„¹¾©¹T8æú.ÂàæO}žðè õ€ûÇüØÅìϯ Žº” Žº” Žº” Žº”¯÷sß\ß =AKÙ“Mz*¶à±tÊ Ð䳋ê`NÙA³£ >cƒÏçapÊÖscîPÙWÒƒ=«`s‡êîS®Ø×­¸ž±òÕu¬¡šö—Ãw¦ÖΞ×a)7l¦z ™¨ùL¹csïÆéUß`¦Œ9¹{bÃy`S ô/ýŠðñÄÜö(·i ˆG/mì´·‰.H=Ò¥…Õ?Æ›®XŒ7æ¶P¤}}–àïÿG^ÒcÀIõEM„¹-î÷_ I‚+º &›Å8½Æþl ~‰0߈,jcî˜×C–×c|½a_ÇüjؾGJ¹·Áwlî˜?CÓ žRîD˜?CÞbuÁCÒáªô2ù{õ”H¶¬Hðr ×sJÁ$öUù‚<öŒ7•¿’ ‡±@D N¡¦¡©`.AÉÉ)„í;D@ Ô­r‡G"Xs5*`+X° W©Øà+d3 ÄL°Ãý·’àJŒ¯`þLaÛ’÷ýñõà aábq²‰¹C¥a:©c:©¿}H_×WÈáÏT<(ÃãsUˆ0Õ+p„¯Ç¦X±EM~ÃXz“ÉÒ[.­vB¡Ùõ¶Uµ‡€ Äøw¼œ"ô•µÄu%(ôX#6ðXw§ä"ÐM3Ý. Û„Qئj1Ü_ÇnóõÜ‘Æuz›k…,3ÃUUP»ã’s­O˜jSÅÒ|ABÀÐæÄ® >Föš0¶ÖÄØÍ“­7ÈÆ e× a怱T9F·ºàè×õ¶TvŒ]Ål&Ô®ôrL&*䀣ƒÝ#ÙC2’³el]Å8gÅšpym Ž„–é³½_áëÁíííáÊUÌ$‘MC{f°±ÀfïEðû„×qx¥`œìÙ f1 .«ˆÿ^[ºvý;ƒUñ6%U~§‹æL8t»±BÉãȆˆnó~VPCSP-c»˜±]ô0™¤†åͽ_!nì"nÖÍÕØE¬ª¯AÄò©yˆåSÃîÍ./„½?]ÊÄDMš]ÝJ5ÛMóÀ£ÒqÓD¸’D7©€ tÍù>áò:ÚÂ…ÜVÙºé5tæåE¸‡w­€åö;Dÿàѯ›î)[©Ÿ+ñνLî#Ó±ðŸd^?2ÝŠrK‡Å%ºÕÄV¿uw—MïXô¢—³ <Ÿ`ŽO0·2Ím‘†õNµ¹s ûÜà5Ò´˜[ßÌýv+mêÕ¬Ñ.M¸tzÿ»q2ío¸´BÓÎ-…¢1·nS4Ãmhcl˜l.{YC²i§ˆÛdž˺Ý|?þëü(ý'œòu:XªlŽn,'᪚p pH`ð7]h·)¨ í÷_IY‚?жÂÈÍÆ9°àyc4ádž ÆciŒz5mÔ«Å £^Mc·.v‹AØ 9zà*—Íåày²&¿ë‚¿!î¾¢+140Šß5$ç‡Ù¨˜œW—œÛ$²Ú¥}ÂkæHê ã MC¥‘X¿Â*ù6ØÈ=e4LS7(®7š'®7°ç{þ€qÐîðHlk¸rT«ã×_Ò•ž×ù‚^m.x,ÑŸ/¨ãp¾"‡7¸Ã<+ÑÅ ò•\ûcúlM¡û^ð˜ å b‹ÈÕl3‰ˆóåðÆš2xèÙeÖ¨f·_ìüL† Ç Y㊵©€óàÑß_1Ù¬˜îˆ$†¶¹Û$²J4 _ŒÍ]º£a²9Y`9R •1ج±ÀÚ<ŸYc­÷¯º¹‹]ÛÅŽíbwíâÀvq`f`f@ÆÃÃzö <Ös>'Ì;IP KNP°g‡ &JAÅêç*–¡Æ(s%lî„ÍËþV‹BÊm—µÇ(<¨ƒ+v¿­Xö·V—‚Â<’Ê?T]·`ŒõpÁ‹Rç¦ÄkæØ0ѱSö—ÉA?Æ‹¥Œ±)æOb~À£Ç‹@×Y¿áI·1D“9àAm+ĘŪµ~e¹@ºÉÉH‚è>&'H‚ê °Ã#éjŒÇ2s~~¸±BX?cunì*â7Ù. ,ï“Iû.b©`.˜FÞlKDsÅDЕˆḟa†Ì Ƶ™1Ì̘w®?wlŒVçÙ3à¡)ºªðj y`ff`g|@f¦ay„†%ËVÖ.H¿5,?Ѱ$|s%ám"Ê¢p çˆRö ˜›Î U³áíê‘—‡bR9—_£²Iع,ØÜ 6÷â’MË?\«ï.ç±åÁ ð`Eeƒ¸v¸àlïd«ð˜p*‡],Y3ž1!`ì`/[ÃÅNZ?~ýûæë±*o›¾1±¶ï“ÍêÄóÆð¨ÖV+Üç¯lŽHõZÖÏ5~7Š“ÿøzLwt%øq¬Æ®ü¡;î'&¥1E,ÿÓ!>©' éöž±ýÉý)üÜà wì`Tep]uˆ{ÁƒnwyËÓt,OÓ±x°&›ª@®¯P‚®Ê”.èð§Ë5FÌ‹HÉ8ãu(w<ö‰RrM1cÛ \¨³y'%Œ¾Žôdæ$r-°eàÕ†/ ~LßJ+Oø«Þ¾^±V,tv,°b¡·1BÙß?¾ï7NT›¶Ãs†¸9àÁ1F¨ôE¸b²TkUÓ•˜¹Nž 6Špš}Ÿð7u<èòeˆ¦~Áƒ>AvÙÛ •Š-8…úÑS†r¹¤‘‡9nÄyØ­Q1ò°îbví"vkÏÐCzÊØ­ÝCJF6<¨‡²'—K6u™VÕ±àÇjE²û+ÂCz"'%ZsÀƒÒõÞáŠ)Ì ;ã ÛÓk])c†8c÷æ¬Ü›íRe2 ÙŒ¹lîžv3dÒ¶-öRñôNø±¹)w¥Á'…hÛòsðjðž"]eÒÞ€ š,¢l&šVUH!Q¤ý=àGU·~‹Ï-¸ò[y«±ž±òž3‘ãFL6\võå1~…¯¥»*o|nr1·1xÌöšLmº×CíìõäC»™ï~ì;jv§Žm\ÇNFÇ?°ÁÏk3ÕЉGä1Êä2ÊK‰—Àåú+|] ÆG.¢7 ½Ñô 0 7*„}½`_TH}…¯ëcŒtËLéÆVˆ±ýiØÜ±tfÁò‘B5éëú¶?Sc®¼aÅTm…jd©bJtÂ5²˜æøº>FL× íbuÅ1^.ªd\²Œ1º2wÓçÓç.ú-Âè·H¡ßò\Ø0j+ªŒí"»V‹¦Õs뿵¾žÃ¯X0£¶Úá‘23–í¬–É2–®cK‡E+VBS«exÈJgî1±a¬²‡1 ÍÙ±ÃÀ7WÆäEÜ ;4{ˆÓ‰;vÊú{íúá! vÕA1æ1&àéh–àFš~f¤¡†[M¸PÈôu8Þ]µ+ ÆîŠð}mÛÛVW\:öôJ£ s¨ð–*¼ßpÌ3kP›”ûë1Þ0ߨ6x¬ì«a¾Q+JkRiMéÓm±ìpŽhX¤©Õ÷Û»¯PÅVH¥![¿Âžt5‡¥˜î†=éÂxÄvxäÎï¡!Ó´öÌ®Sè©Kk˜t(îåt~X‚ŸbSƒz‰/xÔ¦wÌ®)uužš´éŽ,,˜Ö ^âÔ1W°C|¨CüóÔ¡>Ô=|¨Êý¶ííŠÇçÈËvˆž:ö~®Cí[©c.[Çñw×#þŽ¥ú:öH¯c~a‡bI¡vû©¶­ZÀ¯+~¡Ý›:ö¾¾WLõ`µŠ½bª§ºT–Àìl¬¡z0—­+.›£Ø½Ûo5‡¤7ã\s÷ÖQÇŠfzÇöÇ Ãë¨L¿A-x#¬»áê:bÄr4 xÂ(ãn¸þÌÈ WA FÁF£¥mŒk¢˜ƒ™ƒQ= ‚ÝàC:m`ú|`ú|`ÉŒ´íþº¾‹Xrd`…èË[Lø1*o¬§’¼DÈÕ¾Oø1zÞ.¥‘Å‚ÇbPå‚j/Ї´­(sOØàÓ¿3øP­`ln ËÞ–Ëcä FÇV.¨¼¾\„í!Úµ`øÛ¹q³áÈðVP%vIÕ÷W£ñ „aò»'QR2ôôvÁ…VQ.³ˆ97s[0½’&\#'^ÅÔÅAϧP-ŠÐìæç×µLn!èë Ia™Ž 'nÑþ _• ïpE†sz q]=&T°mp¼xPÜJŠÔ"lp,.APç˜BÕµÀÙQ!ˆì¨Pþް¯›ÅîIs/¨¤cÛÞIÇÀŽŸ‡Æ¨ìÞ[ N¡ÅÅW0Ƹ?ªãëQ)Öc8ãë˜ /VÕ²ñõ‚ÍË6—ŠÉfÅdÓ¥]1*¹R 6š÷×õ16L†v~:¶‹?pí ru|]#¦©MÂ9ýë*~-õ¾Žiך ÆE%W*æ«W‡¯®äÍ«E¥m SáÕ‘6¬ö׃:¸bá;…|ÎAVYLZ9=º4áG²dýrP#4,ù9xõ&gsשõ ?òèË49¿áÇ&¸º©Qß•Ó-öR`œx ~œ»,u¿á¯¶wWM^8Ùþ†Kûn?C¬Iñ7ù°ïI„åW Ì÷ oÏýñë”ǺHp·hïs·üÍD¤É&ZaõWáÇ¿¼¦Á‡ŠÎv¸¢7Mò¹ô<}ß'üèo2iVu£¥&™>NŸë¼•ÛwM;J/à~:›Ò·Ú4Wþë¸(¯Ç¢©›}ôªÉvÇU»,ø5Ns/ÚÒE ]H‚»ç¾›²s[á|_2 œp%À¢­Pˆ,/Kð@ãåš=LÀ5B–÷}™"ïw\^GSõäH€r.ø)_[µƒîpåžá¡)tÀ…™¸ÿÀ¤c¼—Ž»u¥ :tNuÏû¥˜ðàÁ"¨ÍT%,‰=á²i8 Äãë1/š”nŽ4%yºETEcQ¦h½×?AUᕲçð–«Þ( k1 "HwAºƒŠQD˜#wݱFþ‚ͽœç^l§É$žÔÓ!T±¹WLñ)ã±EÝ‡Ê \˜»KæÛwˆ3ºFè4÷}ÿ—r5¨aK‡9¢„…4m.ÐÜ5UÙsÏϯ¿¹[³W"—ÂÑ]#ÞÅ=¢"žd‘à婸1Éûë"Óó+ªº™Fæ^"®`–à~Ѿ—.BºÏý·”“p…VôñƯZº„-R™Í~§µ`yëÝ•Nðîøz,ù"‡M¸ö,µ+bƒ:%s\N7ˆ!Á~Ò] W°BÇÀVÞ^™YP€÷€½,˜‹YJàj¾-#o­ø ûnhî›{…|…«ï.6“”±\·Vx£Z‹6nt¿‡+eÕb*–‘«˜s³xû±˜Y»1U,~VÕ'f„qƒ+¯aLnfš²«+~Ö#q”i­–%xäÖà¡vV ü„ ¹ê¯Í¾»à|$ëÖô 7ÎôZvÁ…¡x|˜Z±í­Pâ­byÕʦâÓ"Œ•±ÃµÝáÊÅÕ¦ŸÖ(½œò‰C™Ÿ¢ðWÂõ„ jÓ®ÍëWXòvq\Ÿü`ÒxVrñk˜'ü•rÞæŽùouØ‘fÖ…1ÏŒ-ÏL·ü.ŠìÊKGe…f#;Ƙ\cÄ<(^µl#´‹‘g $Áý…9w•§Éq-Ç ãs‡ÚÎîðHމ±¸Ñ„ õφúÊŸ¼Ékú|,~À؃®Ç}÷8MŒ~¸Bù5ö¢µ™1™wU“qÃö'À¶õ}~=:ÅHCÙü€ײÔ=¾{XÀ] Y¯_aŽÃbÂîW$‘5á­^¡ý˜Ú…ºÖV“ [¿ŽOxpî «çjdrVÖ’q¬yhO­&<ºt [º„-öâ ­†#~v×ïΣú#Oø«•¿5bˆvœpáëkÝ0/­¦. ¶ï›¼%¯ë+„ySí¸ÃZOxôXc¥V­+š¾ÀìZ`Ëžë ðã³= Ñ †#;<çjÍ犓o—Ø ×Ø~š —+!ìí˜~Œðõ ~ý‚ÇXËk·ƒêº£c%QÚñbÃÉÁµ0Ûá‘sÙ“ç\†XËó~郞 evíX‰Q·êÓõ#ŒÛ¼ÚÜæZ“Ä':¼Æ”å<˜ûíjõÏú•Y^µ—ö½bg+ïX!xǪt&‘–å™p­sw|=–$XèEcÁwø®j[M}‰»ç —§hoV=*¦+r3¹ýõhËFΉ¶ ¬ªh`ÞÔpdκãëúöbÁš±‚5=â Ì.wh`!ù3ÃSÚÌDLÀ—]@£¨ˆØ¾.×ÎÍ9ÑÈ—åܨÁÝš¢ÃïhÊàó¿óu}¡ØÉ‚Çb'|A±¾ .9 sìvxh̤‹øYpmå‹2÷ˆÂUŒ/(ø±à­Fxø‚¨5wxÀsf“¤=åMÇ‚ý7µð}‡—CVK®¦9ÞëWÛÞåÔzì˜t@~Á…¯ß|=(›PΆMžó”*·?æãuáˆÊwx í±Ã•Ó› B—Wüu…wÁc9NPšî̱?3«qˆv<=àAÿ-Ay%NP^‰S$ÆqÛŸäp­´¯Ï¼c`®(KǘlBÇ99B$Ê¥05lß¶ï r+æs%ÌçšpVzÌwÇàƒ6c`êâLz†Hϳd:X!=¿œ¡DÖ‚¿ºÍ?áÁÒIÏׯ,ÏL­®_ðàáÏP_Ä ;ᜱíµY²C/ÀCK%²8C‰,ÎŽ8Ùp9‹mÏ<±¸ å«8Cù*ÎP¾Š3æËM¸Pò÷Ë<5¿á±x;g(_ÅÊWq†t-xô\²K6¶½Íºl^]S= ÛÞ†moÇÔn‡®)¹cÛ ñ-.x«VƘ»Ycîn§×Á·½ô0w+·2dUáÕaÂâ\¤Æ¹Ö¯ &. ¼ÈQ‚¤ƒ YL˜;Dù8xR!èáû°¿±‡“[‰‚Nx=¶7ÖEËÛ™¬Ø*éù‚G7j£Â+¶MæÉT1¡Åb^‹T;x`Ó6+¡× ¯‡È{Y£µ>RMÜÁJ›Ö:)T N§&.B(îó„{ËÊkú|,âFÍs5§ŽIÇüÜrM˜¢ðõ NòôAaŒ½zÁÏUÒoå‚GÏ–t4Ù«I+«[pæöñJðWøz,¸ToêÈäÛ$ø¹ã{8®å\´½ó¦L–iùjþ~Ôo Oøº,öÜ1g¬d(.W ) ÝwÂö¢X\ðèÆlã äE»E‰L.Û8,ƒX"/Ó6ˆgMøñ¡¶ÿ\ðèÒaµ]¥asoF&Img¾àÑ#Ó°#£$ ìSw"ʤµV;óFkOb£mÜâVª!'"â#f h˻õs‰e9Nî¯ã¢PÔ,çü•MªÝµhýFªxaÁ ¬U¬€¬*d÷)3)½ÕæW .sI™»X±,'ÆÉ½àò£ÿ̪h7åšÿÁÇLC…¸Š<˜©¨ôï >–$õ°m+÷—ŠÄׂÍK@VG=½R²a‡tRÅtR=ë¤íW¦Ç§Q/øñXÓ“½m³k•'ã Fm+kQÛõ+³hhU©z|ÇÕóøŽ+–œp.G&8Íw­ÓožÇw\¡nà Î'Ör=½P6E×Û=Æ*µ¢ØáMÍåÀ‚ Nâtn´P8C”;ÜïijDï\Cˆ“;=à|¢5¶wÓ"ü·Ì®—ƒL˜ÓqŒžSÆ™Ž:np‡£tîû²à¯öGøº.ç&€úÈgÁO7JZhl1lE°ºD+œZLØÁ1º §+œšp>õXÏÏãëA]Ù €7OÀƒ±’ö ?[ÖbŒ…„4ºm²óJ| ¥Íæ l…Æ Õê%Xõj[7_¡c‚emºm5ëØ.;ÞØm¸0w•ÒØº¡Z­›OVê®Xh˜›¶è¶cû®Óm¯_9%²áÑý‰¤ ³x ã^Xðqnn¦<ƒZ¬ÚÁíÅ"U-©Ú–ÎtÀŠö”aÂÏÉjÕf4¨y Gè¶¿O¸Bµ§=Ü]tÛÁ}wyf&)·ÌöøÎÇ4«Û¡`ÊÜoÓ‹Wòh&%x»Ô)6l›k-ÏŒÔ\ß"å>2Öš,xT·wL·wL·cY¼ffñtåÊâaÔÝ7áÇK‡¬ø¡­)'Ç׃ÖoƒGîü\yòÖ#Üù?¯úœl£ª§xŒ§Íz~i.P¯¦ u\{ŠØƒH“õ\`wÙ÷‡ ·-`1á¯æ. >ÔМ#tè»h›…þºâÃ~:+tèŸ~ÿ ømtèY¡H½m…°‹'=Ÿjc4žôj.Wn2B‡þà©FB:ã‚4×ÀBnCñ ‹] n’±SÒê'\èòæyÕ7áÇêH=Ø©q¹;NÆP«ëW–_(Õþ†KænðH™ÎWî#òš€ð7…Lû±§ƒ<—ƒQ£ +|'Ý-èÕíkÛ3±Jš _ÔêéÑ» §Ó Î’]_WúmuûëÆ ™îŸú”È$`—ýB.æáûz¤6f@üøJN/C ;½‘VY‚+¥Ñ#Ð^yŸ"Ƈ1°\êFì.ߎýÈþ´ ŠØµ j¶×0Æ÷fr¹ ?ß'<TÙá‡[Cb"Ü¿tÛÆ1vâØÞ÷® ž1¡eä6²Ã«²B ;ÍŠw4Ò´Â ðµËSQß"<ö<öräþzP:â²íð³ËÖEGänÖ%C¯ <ÖÙ e¶W-©Z¿‚ØZÆ‚HÙSÔÔ<,ïdãioM{óдE†¬¼Rc-~Ù‘yk"¶jÙrBäÆ/¿áòLìíÅÜ‹ ?F…a}…¯Tð½àÁÔÌ¢i­¼‡(l¸œB1W#JoÕb7²,¿~.)aƒ·Œ²¥l¸•Æà³Ç­$èÚ‚+õzªt`™“k\ÏnUi¬+ý _OÆÞ9M‹éœ«ÿXo_¯ØÉ¨ç¯Óéë·½4ÉÂ¥˜f~À…¯Ÿ}áëâubýÊa/µýqåB¼Øô€Ç ºÆ‹Ý0ÆëëîðHÄŽ†'bW°ÄCqtM«.xÄo/‘NµùÆèI^Ìú¬à¡d#,Wø=¾ªwmëó‚Ç*ñZÁÌbÁñ¥@ɶR°ÁCT  啊XË,>ûJð`lÑ6×ò‰œw¬bÁæ].Úý²´÷¹áë•ü @¥ÁçnzEsƒâdOô®XMÈêÐBÃ¥c29År" =? =_#î=àA÷ #;njdßjz?ø¯ðõàà1÷#nÕCƒ×*æT‚ iż›ðW{®Ôªu9Ö«V¾`O¨ºÒñ-p«_!KðB"vx€ä ™|Ár¶ßðèÜ#Ù|’à–.­6Ll¬@ºÕà‘kom®“½ÃhÕÑÖT³kXX¢zÚu5ŒH¸aLÀ­FšŸf IWa à cnÃpcÌmaËm‘™Sxdß9AûŽq/¸ÌÏjžKÆ*Y©t´ vø™@ ™ÔÃêÁ5soìªtä‚Ið„Ÿúë~!lK`‹WL,cžW#o§Gq+”d¬P’µ<:x,ŠÃ ³,ŽJG¥£4nìieÚ<œÄšpaáîÛÏrû1¶á΢ n&]°žîUè‚=cSØÚì­]Z jý Ëø´d8vúþ´„íO 8µ÷­®eÈf´ éÍæ*—Àh}<rkXD¨aas/æ^ ¿×ˆ8!ô€¿É¸~…¯Ç ÈÈžÀé lŠØÅ,ÁC»ˆÅNx0ó6°œÍ(Åcà–³ÙØGC‡«¦®Ë`LO¦’‹: Ë„ËA [†0ÈC^ªíæÃ —3:¦afÿëScC‰vìv—Å|˜ù0Gi¿ ¦_s=äÃìð€Ó¯„Èf¿’}ÿ9¿~A>L¿ ~ˆ~A!’ûëA©#Lê,¿ÃX:OIH¿ ’î!­ŠtÌÜ ÕOd ¶?ÛŸŠ¨´ûëú.Ú´åÊ[ì%¯:FÚ¯† W³Ü-kÒ¯†©žæ:?›¢’ÝHíÚ±)ì Ãmq~]]à„™îä WÔÀsýÊa¡ÏÌ®0ež[Gl_‡=eÈ7JÙ%„qòx·ŠnÊ&ˆLÏwjùg¡ÿÛßAئT†ö¤¹rÒÁÛà+¶tÖíØ|Õ¿~hͶ/ð¼Þ ÙœÓïgœ±†è:F’Ø]$‰=ulŒ³iî鑪1ÆîãÀu`zÈeŒL2Cݢ1ÊÐû…ž¡`vÏлɞ3öuG őŘþºÉô')¨'<:x% n¿î»âm~7U= ”¡öó=[ilµ5uÏ;XÕ¥;1\íðGÊëóóëúL¶ Ͱ*U_Ϙ)Ì.S˜¡Pí‚ÍLv™BoŸr+Ì[G—)$¨íÓ‚U"FÏ× *ëåuwxdLz¾,69ý ?Rš·LÙöaº Ú2‚˜ :¶ò®*aö–0{K.{KXèsƒ‘rL‚ˆû\n»n‘]c„’“ •G—Å#,DIÓÔÓÔ;𓃶E8h»ÆÕG§Ì]—à¿?ŸO™»zÃmÀ¤¼_pÊ\zŽæüÕÒ=á1êünRRVJw{I•šðèÜ6wè±ý‚Ëþ£µI» MxðÈ% ëHv›†¤5Ê]ðã3úÖŠþJY‘|¾ÊR–࿵Bª÷¯,÷‚ÕXÄÆ’ؼ+$Àcµ&;\Ë;È÷]Tø‘²C*&JQ;ŸjÞº¯Ê¯lc-%1á­”Ð1á€Ïœž§Á>&æcºÌšÏnÖ=…æÞ° <õ/é8w³N×ý+,Ü_¬¤tÕmo?ã]"-•H‚û9¶6íjù›j¿¡_„¬/…+ Y$¸_õÜçÒ$•¤|)ƒŸpbúÈjWk†½à¯Ä&?ó¹ªRd·ýÊòJ×[NyŠPG¦à1ÚáÝqŸŸˆ.íB°¢Käöß>OøQõ œ¡óS³¦œ×¯1(%.QÏÛžût]µ /r±ù9øà1±œÏ"þÅoø‘,Yp[¾Oø«¹?áÁ«‰ÉÚYõ¹[¬r0í7\˜»ÇªÖH›*’àå$6ŠU5Y;Õ‡¸½*-ͳãÈ0vd;2¦»z©bñ‹/xôÈ4ìÈ`¡ÇÚ®|_šÛ0·E‚k'c`+4Ž>—'þ\&™h7Ù@Õ®/èdð)T¾ …ÊŠ¿I&ïE7¹HU¶ÉÎf±ªÙ"N¥ËÏÁ¿Q¨,Á•Ë cõF.»«faÂ…îsÍÅX¹’ÉEj,ÂÖ\ŽØs'lî;å¿ÞN‰ýŒ7ˆq¾‡HY7x†Œ\³ºø­NâɘðàÉh;g[oV€’‹¤›ðWs£bc¹z´¥•÷GF€GLùwæ<2fM F¶àÇÈ¿|–~Ã_-0øà‘©žôOcì`±anuŸkÂùÄ“+/Ýcð±{UsT:’ ?×dí>=á­ôÐÜ[ /´ —鈪áë —§ø_c¢¹Y <ŠºîaÀ­Ê¦ø\Ol¢Û®¶mD·#`˜0¢ÛÞ#¿vÃ/6ꎞ‰Š]›pc{Øðàñë˜'\pÙ\ƒÇ^,t» Q‹%L¸às¹Ó:ö”¡;Øa†"´åß¼x.?'Bs®(>“W¯wèççõ?¾öÈ>ø¨ÝΘRaC©èÙün¹CúC—ÎG—À%\j ãú•ÃëÑÆ8Ý–z…ÆØ\cÄÂd½"hŒQ “­_™îEQM÷0®eT«.¼l›ù-ݵ}Ýï8äçÜU;aÒìê× §F;1°÷”&OnRŸ$+P¥ïÏ„óÉ¿Ö%x¤gî133’ÇÌ„XzóN©¸³Z<è9LJ¥·Ùð )y÷Üß#eƒ›~–Êt6¬ž×ºw?Î \ç§@òp= ÁH~»IòÛT?k@}v¸¿èHðGáî ˜37ᯚ]<áG2˜1Â8˜&üüb®ªƒ¿c[-2÷†Ùì±Ç⮟оÏàÔ)(i¨]ì±ÇèZØÖ ª ,è5áѹGºJf î(­ÂÃqAü㲨¬JqîÖÇß'~\ “È­WÃTôPy‡?î,Û;¶B‹—ôôØP£²&ù67õøõ€•ÊϹëÛ0°ï#2¼GD0òœùž{„ú{|Z!ÑÓ­®kÛ«P{æž0Õä×E{ÂcW“ûë¡kÙ÷_Mø†CO7FRÞgÛsN[:ˆÿf$Âæny¥ºKZò¸&:iÕ4 ~Ü^¾4"•÷*M€GUšå0®†9òÜ¡8äwÛô›Vd‡ÿ>?yûcZÛ‘VnÝ.¬£ëô2¦øø¬øŽä#·Óä¡’?l/xtî Ó\J›x»út¤Ž)¾éËÑáÁi/~nøI©ç²cZa¼ß÷ýëÈ%ƒ‡z«Œyiù œ^š6ø —§hÊ|¾<¡¢œ°)žé‚?'áàÑýIZ¬çc´qÚ¸†9yíz¬¥¯Ç޵É/T¨ ð<ÎsWV¾%È oÉã„7Ì›jØÛ°†ySÍçÂèÛGsô—¬.x ¦†ù\ s‡š•¢bõÕd+˜»"X ózšÅÐ4–öš¢+‚Õ0ߨñ{ þ& :¤®rä†Å¹Z úgËSNxm~×÷+ >æ·7¬¹Ê‘÷¥ë˜‚ò𕎆ù4ŇÉKŠù0{‘5á=s$Žß#«$›j:¸ÃÙô±k+¤*Ó_¦û7°ðаKŸuOx0¾3(`ù›øFÛ aA¤a•AéÎç Þ‚Þ8½·Ó„Ѭaµ³‘åñõ pU(«¥Ð¬ï¿2}.Òª'¼¶OLØû.)Ñì8½ž¦7cDhˆÒ^éÅú ?²2„Õp¦ÉÐúFVd’¦»è a ,„5¦¦¦GÀ¿žÞ㟉!ÏÜnxH n_Hð?à¤üÊä—TØlnøÑ‹à‘|p·û ƒÄ¯ï½‹no6ƒ»êàïÔî´À›«½?^í1’m'nÅ]Ç‚­cq­cÅä¼bëX]ëhºÊ£Â.߈í1²vY¿BÂ-7z¥Ë8AÊ9¯Fk§&Y¥h+OÕó„‡ò‘àŽ‹â™Mxtß ¶ïJ*Š­.0à29ù\¿cWúßð ÉÉUÛ÷õ+˱+Â_<á²ñ<îûãëoLKðß_I'^ù´ >ÒðN%t.#½.H‚ûJã†wL´'üt¬%™Oø«¥¾Ti–')xSß'üX8ߊæIæ‰ i2y¢‹êL¸ä'ý]´IÅ:: T‘W"&Í´à' py!LѦ¸(°W"vžèMñÑòåjD‚)CŠ_îTŸÚ 'Hñ-žh¥‡†bÓ‰K÷üzPñA,Õ7\¾-f%|=&£Š ~Â37NÓ›gZÆóÜ…¯Ç¢ ähtûçWŒ­[vµ„ú„÷‚¡Ó ‘¶g›Vˆ¸‚ùoOÏáçE¤ÒEù†G*R þÞ1±Q8£ò_Gx|=ètÌ%è.—©cºá5ODw HoF³¿OøY+T-v8áAÑ.Žæh~•°)®Ö|4 ÝþztŠÉ5E3zwi÷ô§c€RSP%t»ðõXô»`á·›²:¥Èþ¤]7¸Ÿ¶ìV=+p*vÛ³”lxTõO`ºTlŠJ”Íá‘—jœ^c…\åU¾m²áÂP<®UaL‚9 ÁÜr­$FzÀéú¸÷ç+|=(ÁM“àþLç¼c¢=]+ö—±øÅ· >àõì_·ÂdòUê ií©Ÿ¦\Zàlk…zy´BMØ­hݦßðJE¼z~*iª‚H¤)Kpwö(ÝnK%èð/¶o>¸l•´0sUʶv­¤7+iªÅ¸SêJ¿"Üÿ€G”~U¸¶_a¹ÅÅ"Îñznòi¨®Üb„Eüû„+ñ¨K;ŒéÓŸ_5läž×æ23Xª¯ö÷Šd߆©w‘àÊ 1Bý½Kšåª¢203£¼+v‘cµa©·ÜŽ V-ƒÏçÚ0™á 23œ 3ÃVÕ—P±#À9cî©÷8Vϵ±rË2OåúØ_^IóÌ«ˆg, ÄÝl‹G1y GʶòÎg÷BSúŒ9`ìŠ1æAq…l/»?)¯Jø‘„¹fvÁCW ÁDì6¸±XYѰz³ –e[à•;±—G·{سÿm¬bês§[Es%G†«˜zdlŠÙºy²ör`EMÃåA ¬øh•¦®Zôot”5ŠnGôO¡èÞüÀJ”…e±y >¸ÀžîÌ)B”.À噩7+æVV—[‰ñ¡/x97‚ÐTD%HETÂT„åê÷ªZŒˆ1÷‚m¯«*¯b¿ZàùõèöVl{-¿XKÓL8ŸÊÅÓ;É"Zqë·Ï,X0)ÐW9» ?êvC9c¹ßÉýV ®dPjÇ_7üƒ?1”ºi>sàRX;rÛà‘,BÅRDZ{ñ,žrà:Q±h%c~7±{hð|aƒÇ^X,jõ “ÝÌì/æþüzðÈXˆpcf/k°1³GÎ;glß3tÞó7föÈyßàã i“RÉÀXå+¹êíWØû.æ ©S,Ø‹6Å£Øp%…ñÂ/xæƒ'©?îâ制ˆ¯ÍžÎ:‰qÈ}90Æ'ÜØk,CÌV†Xüãë±pÆÌ¾àÂÛ á‚÷Ò"—3{²™Ù›vga˵’æþ„GEÐÅaѰڽvAG¹yè¶’IÓ®?òY4íÇG>ê6Lx‡2›®±°¤†½„h˜£t°:SƒÇ8,æªL¸ºœƒ×Òh «‹3 Øõ7(&»nû‰áQ?üÍ•§lX<ªYWòÆý†+1ç®ÉfÅdÓŒG%­\|ÂÏÕæjÍf;¿E8‹v~>VèÒ~‡&› “Íæ’M,"ts£‹#µ€_ëÇkŽK61j “Z½ëçr¯Ò›Øk“’VšÙ/ÓbiƒïPG˜Ô±,\OÇ8¤Glz ËàÇôBRk÷|ø›Ì py…LO²»òksH:a²‰9$bã\p!Ïâ©*ê˜CÒ]IÇâ‹õ<]'W]=~˜GÑ.~/\_áëÁÁ›)*ÕäLøÑU×oó7ú‹€l~^??˜GÑ;6FWÄ¡cÉœ>Ìñ7¼ŸÚ>÷z}_i«âÞNøù5>x(L/Æo9 ¬Å vøðnÜW|pî ›ûl{–O£kØà-ÿ@í ¹àòÛǺ»Ž5ôö|ÁÏ%úC™ƒœ Z„?žŒFJ™ô•– øANCЂŸ_Åj-a\ž¢)›Éå8¤ŒmïÙqø™âU>6Eˆ†"s3%M‹mðˆà暢ÝG»d±mˆÕmè.m…Ù[†8Å7xH[™”–*Ñ‚¿ñt¾O8_GZnM†š«ò£aAŠf)´cÒ0sݰN³Ê+/Àd¹¹¬=F|¹àÁBÀ†™ë :s­`Ò±ãô€—+Ò&7¥3Û÷”ÆØà'©d+!ÝáªéhXMG‹TGJð˜t˜ÆS£¼ÎÍ2žœ³¤˜ð–Rh\¶·a¶· è¦Ð0ÛÛ±Kð„ Ûà9½¢€Ê:wäúvUžpí¢¡œŸŽÙ^“"R÷¯{†üë ÚŸìÚì¦=ár‰…èê‘›öÇÞXôþŽ™îŽ™în3=©ÒQ=ÚÕ$iÔ/íËR5fr<StøŽøÞlÒÎ8fàM’FV“L=¦á~•Ÿƒ×÷3ð fwW0Û¤rÔíÄ„Ëõ½¦Wàþ“ŸƒeÁ1*Ç<Òûóó•à¡»ßP©>V|ƒG²à&‘¤ÊšG†¢¨êV‘=D’ņŸ ìÎ?Ûw,d00¿c`~‡‹‡2,9?áõT¢Ç†Ë;Ø›¹Cu/>VÁt•à¯sÂ׃‡_érºý c_P8=w¿Ñ±câb_˜w2,)9vò„‡®O."Iˆ$ #’$‘$]B—ÕˆBÕtAO4vx g‡Ÿ«qè‚| ºì¬¿r ã¡$Œa’.èéI9®tì”)ÔÖäcqØ[ˆ$邲þtU×:2¶Žó$ÀcÊ®aƒWJæ< Ü\BÐ1!èØwL‘ lð<”- xƒ)Àß?ÞëøDYèd½ÁÔUx2;MU¥}¥äQ=c#%ë:oŒ1»ÆˆYÒdQ*É©(Ú—%Å()ÈJ¥â#fIÓù±£ã56%ˆ°’Ë'(¹O ºœSòÄþ)Ä€Hx,þMÉeoôöRÇöº»öz`cüשB¡µS äºgˆm™¦BGeˆ.™2f|'œFú¼WR†’ð”=tÉ”¡29ʪvé몤a|†”¡ÞK”¡ÞK”1³Šñîðö>ÞO¹¸d³Ê Ÿ¡ë˜Xí)bßÌH>†0¦Br1RnØþLsÍù9? ;?˜ÏݲÂËE5yîù³x5Àö¿ Áb–ãC·Zc±Ëõ„ÓùÕ¨–Û¬fŠ™•¶–T]³F®àå—‡bKf 'œ®Z`ëm—)¬X0{±«µI(Úälº ¹,©I¦¾Í¦-âê&‚S¢=ðõmð˜¬VѵîÌU¨mï§\©öeì®Ë®ZEl8òÔì † Xáª=>·Úà Ì í;'mßׯ0ËÏX5gl"¤°·VÀHß¼—ÈýõàöbQy¶:õêú˜=„«Äc…ô&Wlëùü”“Þ¼}.Æ<Š ¯¹G< >§ÇD9dò¼©.Háy;FÀ¾<¦ô[@©d î oûŽ•«3V>ÇXÚ}ƒkj7âÑ^gÆo8¢x» ýœG´æÏL¸D¦ý߯—K!¨ †=NkÐÓyÂxé#–»¿3ö ¢‘¥±ÜWøz̘lpm0‡¤ÙÏÎÔ)Bý‡w¸ÿžQ$øïýI×ý+3s æºÛ™¥þï1Ö<|ðˆCÒ\ÞL†=cŠ.¤Pl~Ì:µ ó¹0‚¾—Ý {å=…¨aE zG=¸À rjæÜ´Ž̹i=  H‚+Py3×°=à=ø˜…î˜k…ÑRÇž,lpmŠ˜Õ­dŽJŽKêé|>æ=ö ‰vÏЭ®GBEY‚û«68–cêÖ3FýXw¨?À=øà±Æ"M^ó!û*” |Ÿ_^÷:–»ÂH©WL'UÈ¥ÞàŠKݱ@ՄǸä¨c*ŒLqÁƒÞnÇœ±ŽÕtË›2–ÎÓ¦‘06DêJêëï7æ¤%o;öÒrDzÀƒîêp=±˜G1,¢UíF;°ÎÀV7¢ðþÌÓÇóõC2°`Í´ ú&¿"¹D°`S´žB4­ƒÇDÐNU´ µò* ½ßÏÜ[r}=¢ƒKˆ÷¯<àš×ö]ç§a:ز㽨 ܰî˜rî–tTõdtìd lå§…nüñ^Œ„¯Ç®Í%AqüÏ=_ì¯Çn6÷àµÈZI˜å_ô~ÍÏ/ñ}~]¾››ÎM‚èKÊØÜþN(çÿÚåü ~dÑŸ‹u°`¬ƒ ^OÝèÕÛWIßBIäÌ“u0QRü·dUBÈ·¯'<¦a*&‚­BIÕ¥"“¡iàS¤€ó†˜]2d·ó%M~àuôÐQn˜ëØþüÀ…g_Ï9aþAê.ØÇÌn¤™Þ”Œ2Ôd¨dÌÀg¨KPÉP— ‚q –l…ÕÕŒë ž°ÁC¤ƒ%»nÝ!nAzÂuÄŒ\¶;Úhw€Åî÷¢!Î÷ 7¦hÙH™0ø7ü¸×…ÆW‚Ç»g¨“^ɘùZô|OÛëè¤wÃߌlûŽ]o3T¦V0æ¼—YvÌ¥›páã9XäŠLf¾&\cÊ…1óÅãfº'¾ÜÂö‡¼á‚ —ʯg ª³zlî¥ç¬m\ÁÎeqصzUlŠõ} ëû„÷Óëfçàu flŠŒX€z±kŒ Sƒ!*Í¥Æ:¶Ž³ss9ƇT5Ö±£ ÅÕëeíªjl`rîò"t¡^p™èÜ℉‹ì¯bd ®ÔQ ES ìâöõŒ ÞtªB“°à¯öG¼zÊ”^¯Éz0( ^øzLE$ÌÚ'Gz}(ûS°óS\ç³ö© C†0Cœ¬{¾ñu(ä½à±pXM.›0›¬ µ ©Ét®•Ý‚ÇØàjšúïäjÆnÚÙî#óŒFg©ÿ¹¯žq_^QÆh=—7Ƙ\c„ÐÕœÛ Á#å ÷àC¯j&L¡t<&‚äÚ^Ì’æ—ý®[û\±m¨ïÓƒ_ ÁЉà "U›+P#\­ùüZëœ÷xƒñ¬Ü0Ùl˜êi˜h7—hc^Dxû=”?5lŒãýw‚8{*a^A©ëJXÀTÒÁذÃÏoV+ÆzX)aû“ÎSÜ~e9!ê›ÕJPßœûëÁ]Ì]ኢǸ¼]‘W!•[¡‚ ¾@Šž 6xì¢N<ÄÊ_]Ä#¬q`€×{ƒ‡0bÈÛà ã3¬ŸaÈþ4L´¡×tÕ$$ÔýŒjð†_#¤Ò0¿ÃÃXlø+‹%|=¶ï.²¿"û£¼ŸùiûS0¿#û[påN©ó(JÄ£È\ñ 1FÁZÁê‚G_ñTVŒQpÁc©jqeý1JÀ®cu‘1MUÞ_W­‰Iݧ¾ê­uŸ»m¢7ƈÙÛâºÎ̬ì:_<ïÎjÅòãÕ²žú Õ J\TìB­Q¸ÙM*k…Hpwx䲺Á§Ød€úCíÉNÃ(Ü*FζàÁht…ZÐ×JÐe¨bsÂåíµç^°}Çîù·[­ÊEÝ‘¯rÝjr» ý#÷)ZÜnzdµš‹]¦Á¼PwuŠ ;~ ;~ ;~ ŠE`œq ž[ìôþÀ2ŒÓÛ±Ó;°Óëè[   &`œq7œ§«ÆîùlQÒêŤ ½¬«ì¡¤­ŒE‹0æ0 `W4ÀÃ,§ø…l=ò«jš±h»¢Œ97 }§Úƒ#• °U.h,°çñ`e,0á±r•“!—w‚±ßU¶ësê<&CX1cÅìŠ^`äy•­wôú×1^»Ú,>ãë7|m :ãÍÓ`°†ˆéžðW%sY€‡@ÃŒ\„rNúº>FÌJy˜åª Q¢ÍònX½ß"kü‰LÑeË0¹Ú,cd|«Œk–™Ñß 5W0»a·Í B®ÃÔ1M€UηPô7¼cf¦[Ìeõ -]ǬTWŠÚVª»¬Tµç<¨è{v‹3w,ÿŠÑ£Ýƒ×§ˆŸ÷+‹ðuU™4fzu¡f;‹˜•êVb¶-OÓ!&ñÚ1#§Ÿ‘C:\Fc.«½cŠ3r3r}`ƒ‡úÑ×v¥†cð.N²Šq’Õ‘°1&l±›ÜÀläÀnr'Ù q‹ÖAâ˜Ygöoé®;ÚÀâ#ð&KøzT:0³8 7<ö¬£7«ÃÁþ­ K€bôfutL#bör`ör lðçÆŽÁóÝ)35ÜØ²n4ö'C¦¡avmñ™52g_`Âö‡\ûS ã·øÌÎΧ:Å‚íiýHË5»·ÇÕí¯÷çÜ=êQãIÛ³‘‹'Cqf#1š5nÐSû r­Lþ5¡†D€+Ž·v-k®«£I³fŒq˜cÔ.ÍuuìXF¼_fÜU‚~¹ÆˆÕ¡wìY^ÇÜõ Ò®wín-lÓ¬íúÔ¡ß<¶òžßܱð¢Y‹¹¢ åuíàŽU£-þµ˜¢o{~]Ï­Ø$oº[M? æÀú 7v3ÄÝz–gŒêÚ±Ã#oË0й~n»¡¥´»ëŒ1Éq·Þ¿9¿ÜŸíFDÇ#Pìþ•à!'q`)í¥´M~¼çƒm ~Ô\ò£À'<äw˜üxÆà³­v«²,#{,‹É¢—ÔØýMƒwÜŸáƒGÈFF€‘ð-xб;—å|. 6¹_Ñ 81r¿q‡ëõÝÀ ý‡ß™cQsšcÒ¹C‹ÃCO”ÆbdSêÂÕ1½ÙÂ% ^ß,#><=R›Mè§åýÚu!‡´¹ùšÍȧ1acL®1B¥iíRxnmšévyÔ £Ôk—Ù}KK“¶ JP7ŒR¯]‚ü}‹K*6ÆŠ±ºÆÈØã¼Ÿ¾†4Dë/øñMUÑ:–´ËªÕfõ}Âý.ê ~t)Ô¦È ^CÌ“ ./„=w( ¾à±:µ5ø[6”D_p¹·®uƒ_ð£víªrN.Cœ0C<áÚ‹ ?¾Ç4¦è²ãíß‚Ëíƒ?F1‚ËÕRö³kŠÐ»¼–ÌwyªÔÙýÖ¯ 6Æx¬®hÁ£š bƒ?W|= ìrî_ðÊ‘›ë‚÷1"vã×[ðc*ªh½„[²Ý€á€Sì˜5éfÆ)eûë¯ögûúÀ„k—s•wi‡·ÈálbLt-Ûv\‰vÞ_×ÇUܵŒ]¨s¦è²ã»g»ïLrÀƒçã«[ð7ôö¥#lðØE=[u]»f×EÝ&†cÍÄ*Äp+ZCޝ¿É) NÏ_âõÜ´üªõÓãŠcîÊ›,:ÍýöÑ›·;áÁ.¤zŠRIf-i+˜75áíô R¶Ã¿áÁsY0g¬`ù›’߇¶¾Ox//¬õ{¥ÐlÂEÕäL8Ñ™¬E±Ö<ï…°ón¹Y”Õ¹—ã¾³cîÓK;eÝ}‡è[ÁÊNJÅ,æfÅͪ]—68cûÎGäïÁK‹’Ÿ_Ýž6¸r{*˜›¥.NÑÖ7¥a:Ié&•N·'®d æŒM¸pÑžŽ(쯣ê9ÕLºG=*¸ñ5’÷j¾€…Ê€Œ}…Õ¶zA‡9¶‘ã6x³ÁDÖJE‘co ãû„Ãø\1 óåj†_Åœ±š!Å·ÁÅW±Rž›2v;„,ϨpJ:ÞmðPJÀÃ)©Í½bDZƒÅæÒ=*/¾<¶tº,ÁýwëûžQ1glÂ…7…Žvjmc‹ìÞ$Ü÷ ª4Õ—[¿r8cxÍþVŒûöž_æÓ!\¥£i®JmŠÃHÕU­¡Ùù\ó¹<˜J„„/èðó~¾©º ŽÖ&œOÌjóúÆX–“d­Mά–&o œî{† Þcý °°âËm¿Âª¶Øª«6¦HngÒ¦ø±ŠŠ6ø#XsÝ¿Â\6.¶nW\6Æ\6Ær¡låBW“[ž²Û® ƒ×§ˆù…lû…êÙ5ƆÉP3b=¬õ-[p!r&Ë{£*{ÆÝ¼k~;÷÷Χ4x}ŠX¡[®ÕÊ/ÉSØ=Tp c[m7ÛjèÐ\â ótDÞNV"qq²¶†E—ZÀ¡Ù§ü´‹’§ó„‡î&¥«4Þ8YCsŸõéíü8E“`× 2“Ò•4Ú˜Ö”„ ÙºrƒGI+®)bïÌšã¹¹¶ .—¢a.ÅM½ú"Ÿð:Ê'² .ãwmÍ¢•[•hò6(!¡ìØE×k4 ¬–eÝX`Cúb–ž§Ó½™«ëë1]9°íµJÏ E‚•žw¬¨¼_ÐÆõ 2r«IÇèl[·ÍÕïX´cÃmË}u,÷Õ±HÈ„ ¹Éï©Møztå=l¸­c¡Œ^ ¹[¼pÆöºÉu,àÑ«q3ÎOÅ¿‡ô¶uÆTc’Æ.I³Ü‹ª&úÖÚc…“1Ez^ÍGbä´ t{ÇL¬«˜ºc^DwxÝþzTP]Øר(l# ù%–ö$~$HÙ)»‘<Ên\Š}³ZS­ò„ë@ÎdLâçoÃá‘(övP`ðOx0õ6"…2ÛÜ &Ú?p:ݾä÷;¿áLjù*+P¿.¬¼Gsé ¸ëW–§CY‹Ox›¾›÷ÓQÏÂu便Som»9hÏ)ÝùßGæ1xýðcE7.=ùù‰h.а:èȲù|ì.å ºUes¾ú/þÖG›g6z@678æõL¸@÷u°©Mx?í»!›Ý~¼žï~”ͪ‘}õËŠ°¨Sì:ÿ®%›;œ”_A¹¤?ÚUA-xÌ€ô+9 H¿ hM¿2 Øà'B%Íþ,x̹éVa²áo$ø+|=TÙÓMVaYõü†¿¡—áòÜ{ó|=ºq–ד(i_ÿkÏϱᾑËso#ìÁÇ®cAî—ÕÐZÆÔ.kj÷s*oàgËßmªå®Êf³OFQ¦h%Å »Ö°†­íðªlCÇlÆ"z>]Ëhhû3sj|¿Þí¯G­ª'fÖ#tÐß'ü˜¼jºY)æçàUûã!V$-]vš'Ûð IÐ¸Ž±I/¸BU®Ä ûÍ&} Ö5Œ‹Mº{ؤɆ}£U=÷OtzÀ£ƒ‡ê™wxÄF&òØÈT°šî_Aùþüú¸zèôzBc=AÜ .X)ƒ<áBQî”!ív¬SaÛsgl{ÙTÎ Gö?Üêä} >8wËýS+~üÈa®Fn\¨Öý¹¥ëcÃûÈŸÈÒ5GP²'¨Õ‚¿!¹þŠðÉuOV£c…ºËú LwXµÜjÏÑ—U„½½.ÿ-Äö]p嚣鷌…ï0ð®Ñ€“­Ûs ˜¯ü¼¾?X`nÑ€7ŽÄ8òjçQZpØ_®T…µàGó%ÕîÛKw’=UXã_ðc?(C‚gj“jÄ;É;½˜g6á±~C .¼Zû‰9k,â •,|—Â×ßÄÛ¿Oxtî ›{ƒ¬jnUÕÔׯ:6Å;‹¶¶½ý½ãý}£Çz`kØ!r||,pºÁ•À)F”¾àG ù²ù®N•÷0—0—í&J?_I»ãëÁÁ;œ±sæ‚kWr|¼Ó$Ìç"»Y¹º?På{'—ÏEXЋlÞ%M9TùÞÉSùÞ1Úó¾Ñž¸.vøˆh˜Hw™M± Y®•~k ˆªS„J„ -;Ƈ¾à•Íå{Æo¸\Oi‹ –2ÅøÐüxÐÃYÔ1±1™ÎÕPU¾Œæ€·”B7 ó^ >§—Žu6ù¶zÁÜ¡â*@+˜ÓTd±J‚,Vq%mÚsÖªiJ„Ì@„G,VÁò”ó¹ ½w+÷ÁcyÊ‚å)‹+OY0—M!Gw<1_ð‘®H³-dð1^~ô‚ùr~ Ê…»¿áç$¸šÈ*X³`a²‚Ź&üÕ¾opÌ›šp*‡¯+ß0„¹CÞê™·Bq‡&\ž¢½ò®ê,“x\Ž,ÿ†Kg7âñC.]ޝë Q±HS…^4.xðü`ôä½F¨2o“cÒ“ËE/¿áÇ@•¾½ TiôäŽ0æ¯Ê¯ ŽZ.›tøŸð ~ÈÇ<¨ 0âñ®) Û Ç’Žñ¸#B_]¬Š%«åõèʹZ^î0Öêš"æÜ˜$æºsƒ‘˜÷Š%ñ6ð/Ï<7ïsnj‡‚ÜÕJÏ+åתEÄ G°žðÁ€ü¼:E›¢[µ½7E÷ Ï, ðÐÉÀ8¶E…(0ÛÊnX¯^„¹…ÁÇ| ›9iDCiq"þ<ᫎcî<ªD-¦^ê¾óùôzÏØÆaU ñ±kå±J“ø¸ u廡Tä-ù 凉7îû„G¥Î¬­T¯ã.,{î‹9åȺ¤åqÔÇžpÉ“3lÚå¦è¤_mš~Ã×£i…0ÞäþÆý{£SÌ®)6Åéõ3zµ¿þjŠÏ¯‚Z0Aµ^ÄÇ×Cff˜,Ȫª]ðªDÏ« ?¹Wä?LdÕ©×¹9§£µá‚ËS´e“]²i¹@EŸ¢Ec,gµ¸[´¿Âàƒ¢myPjpjÁåŽè²ñü>áÑíí®í˜êFˆ±%uŠ#0Åç×õ]4)‚ÕÈØ(‚‡tØðõ(èékœ ÷½Ã¤VûT/ø›z‰}å“$ו³F\Ns/7ÜòÔûÏHÙm•ˆaÁƒ¢\¾Æ0<™ ÍþÜð‰¿.Ú„‰¶Ãi"~n먾@Žƒ‡¸Úð#‰˜X¸áodS¼>ÅHò*=àrón9œ%À× à—ª‡1Ùlعœ^Oj!›y=©cƒï¶R6\ž¢éõ$—×cëfq†‡ÚA6» .ɦGõ È,šŒ»ú%_@|à‘¬ã0wu›®0î~í,ÂO§·J:rdÏã–a2îê÷é Þ§ó]âz¦H.¸{o›a2îêç2“!›Bªü+Âkd{=ocF†¨DüM§3á뱚Ž¢Ì¥<ºÀÕµÀ–ß¡,6j[÷ã½}Š+&¡wsnÚ¯çð›:S×ÎOsé7‡{A6üMÅO™b×Üþõ+,¨’­ªcŒÃsL0دgb÷”l¸?0§¨‘ÀÞžNˆë•ð7åsûWþgD„ev(ÛžNóÀ™kíö¥SÅ®_¶?d“¡ÉË\–š!«ÆU"í+T°m(®)VLÒl£®JZ=G‚±­blðŒ ¾A¦pñæHè‚ËŒ ‡YåçàUSè¡5U¢@~¼Í¨\ãã¦5}„f“-†K= Â78æP ·"|½Ÿ‚†îpy*‘]ð#së"ì÷§\‰ÅhMGQÚ÷ØEB;|¸s+OxPõ” Ë ?vnQû‹’‹Fɞ˂ùÅ è~Gqù¥`c´²ºâ»G_×6xÌ£(Šq”j,c<äYÃdMj¦p Š*ÂÍëFal{¦ô›q~¨}î«7á±k¥¹Ž–)Ý0 *¡ùx¥¥c¦a`sÆÜ цh.Á0CX¸¾Bb YðssNÕúÕ :½&±¨Ê?µàGfCJÅšsþ8µ%9àçÆ¤êöj´¦Û a¡— új{@µºôÈŠï7—ŸzL!Æ2:–Ñ¿ÅfÕƒˆ¢ÍÙszÙa®•0¶Àf¨>Eò(Q“LT/Âç‚€ ÉÉïNm bûƒåV6.ÒÐþ¸"!ÆR¥`B¡ýÉBècd¯Á˜!f+b¡_Z&ü• m_ï~Â÷ c»K"1zÀcL5‹_LÏUlðH5uƒXÈüxd ­Ý=“ÛSF·åÑæ8tÌqèW S’xèdtŒ£'óz«ôu¼¿®/0fÓ{†<³nU)StAvì g·Š …l?È1E—åïX¼¾l‹áÜS”¯O1òžó çS§Bݹ™ðãÓ˜¢ëžo“‘j’G¼«xÂ+d*»Ô öú¢›… I‹Tõ& Hæ®c% ‹M´´H ¿[|c\üŽEºeÐ¥c`Ö~D¬½Ý¡‡+L0°ÃñbB£Ë'Àè@üU<ø ×=ïõAöµutYå½lÅôÿ~¿1\O>Õ^ÇlÃ器 ÌØ/‹w Žaõî8᯿}Ýa « ?Þ×KÂÝo'œOŽ¡ÐÀTøúÈ!‚—%¥ÇÀÔØ0|¡õcØZ® é‰qÃå]”Çø}µmøó+$0~ÃåV톆¹áòLŒ@ÄþxÃs;0cçÆ~tÉY©Å»á¯æ¾m\ÄÄ–\pwí°}]#bboø›¬Ë¾À%  6x€´Z€‡^ÇÜp>58×nÄ7<:wÆ6Î"­66ΪM3d“]²¹ëÒ~&fÔÇØ\cD¨nø™ùÿ™¾.)(³ö‰.³bµáÅ×ÇÌÉmð“ûgìËÀ§ ÒÁ~<ãºO.Ÿ$çɺҲòÐm‡û²7¦ˆ¹‹è°ç÷®þ çs|U¢#JNW"lí0wû8¾®ofí“£PMÛÅeí[ÄJ“!ËÚkÁ­~<&M“¡ê’!†rR ÕN¤þÂ×_íÏöuÌ\'+4m,°Ë\ÛÄ=k+d1ûcì.!°™ÿ4¯6EòÍY€ûõÐW¼º &ÁŸ|Yý å|AG9_ž]Ì Rµ‹Ç¯8ònxPÕæ ålRó(õÐÛ×õ1:ì­âyOxˆ„ð†s:ôÿÞà¹û/ÛcvÜÁÐw~›}Ã_ ~ƒWlðÛ8ÛŽwíðW—lZv\Ld«­+½ro¸L `?vé·†í¢eíµ7Ô;Ü¿‹Òàõ]ìØûûS¶±O™'ðš¦Â­D´ÌÙóþJEÜKG¤Û鲪<á¯Vþ^:Â,¿Éé§+(JžÓKc ýûüzT:0ËOŽÔµ.ËÐGß¿ÁƒÂ…YþÅÖ7zÄxRyoY¾O¸±½¦Ð4ãIŽ{þ°áýÔG×Ú‹+0æÕ'¤ý†¿’Ííë¦K ^®ÉêÃ$Rқͥ7ÍvKÊ#˜~œ¢~µ'±°¦v;¶½“MÓ£Z˜zqŽc¹†æñ‘+.Qú¹Lµ—ˆß±ÁM¿£hÂ5ÿ’jÄÙŸ0xG*Ê$ûÓ#B7[_ t÷†kïH”ƒU2¶q¬Eö MøÑàéz³¸&W ö†æ†SNÇýI6¼·Ã¹Ô/3Å¢Ó1VHñzîLcÁ¢"©#ÜáWFàŒéM»ÉdÊö×C¯ŒþÀ6x¤¡ÁMoƒ×§ˆU)‡ßá€}bcŠŽ†~5°]ÐŨŒ£uMÑåTÌ;©×{L„‡NÄéwÃ;U¿k•Ÿp…JÙŸš<*Ü$åÓ/5âÃäç×u"L†ÒÔ•0*Øàí÷ùÉ 3ðÕz`¯×‡TÌÀW,.a2áÉŽ÷<–ªðpÜib3ßÌѹu×µNzÀÏÞH»uWWÅ‚‡½®Øð蹜¶÷ÄNcLqx¦èá¸SnÇ~,•ÔX6øÉƒÒ§È—ǃò0á)»È ÚE^´¹WhŠ®´ciΛð£“hLÑeà3ð‹/ïM¥å.»¦è &pÁõçïŽüÎÆ &¨Å%¨–³ÀBaO~À¥H‚•îɳ}ëïû^Êü÷6ä ¯Ï¿XpË×fµ/p¤/2KðßS¤ë/qV)_ü׉·_Y ‰QÔßðÕÄìåö6l{Ûûí¥m»9w-7á|r§äEy|ýt<š,ÿXº~’ŽüÊr§ø9Åq–Ž|Ží¼Á:¸¤ãÏ_L¸It(Ìj“jð£7žþüqÊa{‹¯ga’Nn«=A ­P‚À§§=ì;Kðªü*¿·›O¸´d߸Z>¶ÕãW4A ¸iß'|EÎøF‡9ãÜ}ÆÓ„qv žp>ÆZ·,]ºX:’àåd{«²ò¦_XH;ü›»â¦Óܳ/Ï:Ì}[:,5á\Ï [QÕ.cKÇ¥áå$uJl¸5LÛüÀé~`Ýä4léš¶tëW›bŸS¬¡)N¯´°[¸„ÁGW«ÌiãøõÉÙaL—}[Œ\nû>á|š{+Z`nƒ×/h›4˜LE‘Í Ž1¹Æ˜±1ž;JýlCÕr“=cS´œ1Y+ü†ÏO8c$Á#VµcÅóe{ž²ã–<¾®¯PÅÎx5ÌW+Ñ@¯ØöÖÀönƒ7»x>'µ¬¸ÐŒk†K´uÓH‚ûÃ%E‚?,À}[4)1…Ú§8:ø…Lš_¸(1©„TOî&!§!\Ý8XBY‘WByªlFByY‚Óiå‹ ®8Þ:Ð}…Æt+c+4°ç¢¿ŽR'À´)KÕÓ;áü¬mžö§8à¯VH„Ó ®Èи<2a<Ýdhƒ7› ç’#"8¶À–[)´°àƒJÄt%Híš/§hr}昜ޟŒ}ãȸÙGîØàíºÁµ“ÕƒM8Ÿ¤CR*OxÐòâ¹W™ô²Âø>át.)xÐýÛàþdA—àJ¶l`µç~T²çüÕ0Ð0,ÁËi•<‹Í «k˜óƒ½©a´k³Î kk˜Ð0E‚+éÈ9È.·BþˆïVø8=ÂÕ¡›çÄœMö`ýZ6†!\rÿ7<ºtᜓͬ)礰´ó>(Àý½ >$;Üóì7Ütj‡ºt¶»<&÷àué~óN§1²–¯Zðè³kŠÂG%˜0 &D¿%›9YÓoé* ~~=º½·R€Ÿ#PÕd3âVf ®moÀ/ÜǸ;-0”ïÝá~Ù,7<ÐaŸ{ÃæÞ°¹+1ÍtšûïØÜW&÷pmªK„¯G—n`B; ³é6cü;ƒWmF„‘ùû„Ë–åsJÁÿ†§ˆQ5/¸ðõÇÖ(•„ù3.$Ô¿öþnœËŸIÐ㉒ÕóB¬$SŠ„Ü6xÁ¯dr=ƒ÷drÆá¼àGŸX>X¯¸¢ý"\1_ ªrKéüÒòë¸%ÌëI Sí}¸DøzT»bnKêØÆucãÔ"…ν»ÔãÀ¶w¹-$\‘:3’àîXéfN&eµP޼¬‰õˆð~PÎÍ^¸ò…$sv¸rŸ6 ³ÕÒæ WÆ\«œ ;‹É·-;M¿áѹg(Ž’3GÉûÕ‚ŸËºë¥-aKG½iÒu«‰Æޱ¸ÆhöÒÒT=ŽÑcr…t{V^Ô“Žîð¹§)3¶?X¨(3¦z0—mÂJz¸$7léšK´Í§ZžrÁåx»TY<ÞÁ)º<³ŒyfÛ÷)¨’µ)bŽ]vÅLNp]‰nœàÍ»‹Â׃SÄ8Á<¨])AÚ•R ÕÇ7ÅÓê,™ÄãòKýßpÙEýï‡ ê¨3i*ÖÃEcðÙµÀ²zÀaucŒXZª@l ~Lù´K©`^pyŠöÊWìøÕã׿o¾®/0VèR[!v³ã¥B §JöÁe(˜!.S$Ý¥H0KZ¬0¼À¯ÇIÅL¡Býc UªžVÞÉd¹Îü¼h”¼‰ÝÏ£‡¦:ÕŒ­ã™ó\Ç‘ðQ"t¸Éä¯&c›ðW_ß–Îlc!|ç'<ÄN¶Ãét—z0òu þ{”75a2iªÕi£©>”í“*ÁЃ£xp´Ã•ÒõjóSfmŠÊ‹¡ì8нµÙÉvxQ~yô„ O?Ù¶·5ò&>KðÀ›ødn ¼€~ÜÞI¸]pYl¡œ1鈼7g  ^Mæð}î3ÊÀÇ×Ôšåg–˰’9ÔŽÅ8&|”¹Ÿr ˆM—àïñDÀV6xÅæ^§R¹ÜJE€G•Šâ0)NH‚+2Æ4Î'>gc…[!ÆVˆ]+dù›ºKÍg‚Éïq…òóë1Ÿ‹[àÒ±iíŽIG?ªÝIïBÚÒ-¦®Ó‡Þˆ/øñ²ièMˆ¸2iLçíäŒÝ2ßÇ·Á· š{‹¼þ& ) ±)йhsÇò)¦©Õu÷˜¢ðõØÃ ®´šq< êØSý ïGÞXýü`q½î¢2¹Õõªÿ?I‡î(õÕ¦‡4 æåõ†mï¹)òq{¿Â׃ÛÛ&¶Hp%Ha’£ëAŠ ~ˆ¼q‡Gåv¬P¬C:„*7]:×{2“x\—à9‰#â$V ®¼k˜“8áõ|KRW‹Ò ,J7\QºUOx>‘…éõEO^B¤Ãõ´m`œF®LQKÍ Â¦èz_oò€ í"¿Oø±{ªVöÖ8& & ÌM›p.ÇfŠIÉ>Mxt{]îÃ÷‚çvpÓÔvá7\4YööbnÚÀÜ´ %ô>k`”H£œÛM3É·…c½}VÔóDû4º!Ú£xàÑcmfF՘ɞ-k›‰Í@.®ùº#“¯ó;¿á½´óy_ðØÒåËÓ0_ ›b2Ýóä€G§Q-íðt˜_Qê%üXå¦j…|eÄä âJZpåÒÞ5Ѧgð¡fI;ül3òU°“1«Ü!^Ooé é(ØWlîõèéÿÀiÒQ1­P]бð¯£"€±ýa$o±Ã5ýÖ0!hGgÙÁž½àQ!h.!èØû1÷õñAÇ„ cBÐ]Bàß9à£Dò¹9aþÛ"/åxÝ«6\ImjÒ‘<Œ 9aþ[²ºŸ°êÃÜð”Z0%×36Å|Ì­L7­hcÌÇ3þ=±Ä _ŒFü†çÞÔ¹“°è¸1EÌÏZdãívR ÞcvÜÅUž1®òÓàE„ÇiuMѤ–òÁC9ªh!•æéLx ‘BäÔ°¹GBc"Ï&Ùx×øs‚:/ïpm…6ÅqÔ0ŽÒ~:~†txR9_Ð)¸ØV|õ|vBŸbvEªr¦˜Ž¦ð{ŠÖ|Ÿ_çØu$'×-OGÍ>-¸\lõ1ºhæ›ûûr°Ë9³Îý½~eôkoU\ÞkÓ%Ϥ…ÒׯLnޮޱ`c,G}ñãteÖ„ ¸¦hz$ú«1ENšK‘ωKÒ,_C-è_p)ç“EÓÂ×kyAáy‡M–l5µàB*jžpað?÷½4´SŠ­¶)š.Wí#͵Ê_uÃÙ¶ÚðX¶-gÌ×XôÙ§¨±1xˆ+æELx? }ðtaƒÇ"!‹»FÈ¡3¹ Ö |³#ÈEYù¸@Lê’ºæ‰ÜشϪG±hŸù¤ôÉ/òœ_þf{·ýÁ¬5 ãÞ«–¼-xP6MBg¡ñû„K+O'á¢ç×Õ.Ø¥½Xé ý.T\ù…±X.8§+´‹˜U-d%pÔ›Xq…è f<˹âc—M.¸àõÌ)^Ú]!ú‚…èK5.íÆ×û:ÍŒë똑+ÍøºnäŠõþÇ<¿.füzhu6.²äŒ‘%ç2ÌüOrÀG¦ˆ‚ªX}‘%Óê 4®eÏàMz!g“ðQCQߪ\ mŽÆèx’Mvæ”´pðÆÎLâÊ75³³Ø™ƒKé$I<ÀÜšmnhÕaÁ9Ÿ,]ø1Ž_5T)Á*œ”_A½š¼ I—ì˜"vŸ®Ú™,Á•ĪIM¹jªg>§ÉÇ(¨zü*vü FSÙ$¶î„\¼Ké3¦vbë“î ë†[Þ“–h¬íx§tŒ†þæ:üXÙdí†e‘ÍŸð¨hwL´-_®ª™³ §Á¤l3~ã'ê@•k ñùg,½0áí˜ØQÖâÛŽ‰ »ŠL^lYÿ†KþÁéð…¯¿9ü,ÁÝ]!Ò¶?8ÊPZŒ×u„ös5ÆëmsÚ¾n–5$-åÉf×Ϫ¹êÞéô>±¾=gu…¦»zVªÌ)sÑxý*žý„Ó)ßÔú(®Øéu½ÙáËÎ>ÅYø‘4Sê›"Ôœ=³Í¥¨Eû'œÊ©™HxTEDXvª?s”äý5=à픫ëjõwL:ºëDš³?áçz~] L k¤Æ62k:¨1Í· ÚÅær[¦˜¦¦ö³å}Ÿ_N{sÝ2$ÁNyœsÚõ©}LÏõ©a>fS|L»=zn„-Å&ºí ðó11*íÜ vdÊñÖýÃÄ ñò,xTl qh˜cת©5Ïù†§tÐ6xTÛ˜üÕZÀ—hÞ^Fí¦5å•¶Í}ŸMöléN™páêøs`Y]ºˆÇGÜ=÷tIðG†k›b¬PzÀW9@ùÞŽ¼¤úcOŸZ‡nÝ­{nÝ&¿8©hÎÔO·nþØ_—×ñcÕaüâ¹CíýüxÐ¥cÏs¸C:æðýW¦«¿›úûŠÄd&\ˆÉ¸8Aº½'O¢¤;¼]ÅYžðvŠZé—™ u~žpÝ3ë˜W:áǘ ‘:Å啯Nùìä¹ÑšÌázä¦+ÏÉ~VH£hXÌá*O쑎€,ÁÝ$·”‚Í®Ñj/¸ì Œ&´ =?Xݤ—îÀO8½°?ûÜ#E$Á#®oWж_5L»Îêús>Qsn&<*.‚"“9\ºÿäüè€By Ç<’O´™ÃË¥Ü&\z±ý߯˯*~ÿè"+ ^5 #âc–\Îÿøz,&áÿ>áÇ`´”lËxplºn!Ÿø„Óéµ  \ûܧc—“ŒS{ò­_™ž™Ö£{ÁÆS$þ†ŸcéSt=LXXpÂéT¹NEÁrAk5ŠÇ˜¬ÜRl«>à¯Æ˜Ÿ_×Õ˜Mþ“´Ã4«éó–Vî7”r¿SQSÙß0-8£tã°?MeèZ¬ÜÁ¥‹P‘$4LVn=~0–sspÀ¸fMÃLøñá"{àÁøÁèžøÁ˜~[ñ·S¿o}Š6,ÁÏ×òpl—ã\˜‰C“F’mëŽî~¡‘ú 7«µfåt=¨Ÿë-{à1 Þá¤ü Ê÷’B’íèP¹à1õHW$߻ɦùФ*Ø‚S;((U¿-xôdøÙáîÀÏg;;åZ>Œï»÷îðÀ½—"äÛûàï W9Õ¥«˜ØD‚^$ÁÝe¸··K—Ýî8cr~wr´—ûÊ3¦P¡˜Eèº÷¹7ë:^Š&6 ›†iZŵŸû‘M®%!üاš5‹? ©ë˜Ô©ŽèÇh€H×À”Õ8^æÜI“:ÈCÝáþ¹³?ç0È$!.ÇÛ“Õºf¥„eÁåu4Ïeº už®À¹¼Ø&7׊þœOíÍujÁ¹Ed3EÜë,ÁÅçáF/Êàe¦Xµ‡Ê ®Œ TNI&µz¹Ôí¥£‹é’¤ƒ\ÒQ å<áÇEºžÌn†ú Ao¼w8)¿2ikt´”ξöQ¾Â×cæ+Õ€ùjüa¾¶cb»Ôªù ÈϯÇüB“ØÝÁ†‰`s‰`ÇTø¼œØ0rý¸?¿=uL…wL…;œÏ¦ ~`sØÜ4÷ ÑòÐFÙ^Nð3ãû‚ûjë+C™gÊXÜ4'Ãt³öÔqÁ_‰M~þMY*Kpåj’3&VÓýÒ‘WÝbvK‡JGÖÔîÇ苵ëò+Ë{lE=©ž¬6³6MNV‚³vãK2ùñ³öRrÁ¹Dè\Zºì8~Ðcœ^”_Yn¥~¯Úèõ#±¸\1áò¼Å¦ ,ü>ášýiö×[©! ؆1)~Å—p¹Fèc-/xô¨¡Öõ+Ó+-ªB¢Ÿ'üøjÌØ^ˆÃŸ2D׸àGãi¸VË+yR˜i€:fE²ùOøùºÖ4—è‚ö.OPÅì3@­+9¦Õg ¶½=¿&¬Á‚SDÈ| >KpÿéNzú(&‡(°qùùõ˜ßõ/ ³TCò„G…¶`B[±¹W[7•ùŠÉ|ÕüÍñD°æ ~dß5Ć1±a#êiÑÐÎqjíÍϯ¿9ÖE‚+IVêØ.ö£Uý:ÇBð lðü~[¤³7åq– DY¸àÇó£_äV‹†ØÊ¨#Ò‚+w,¥4™\ͨ`ª’ é`vLx¢âŒ&³ÿ‰ñNĶDUû¤i’e8ë" nÁuüäþ Ž>ã½|éÒMŽ÷&Å诶7Þk‡V©Üæ¡é‹{ôž>7ܺĤZ¢¯.µeáî¹Â›¥°4RpK<¤ñ̓€­ØóƒŽ¥þ†®t]ÐC–œ5nÉ!{~Ä×^ùXÐ_ÑQ`µ éã. jrüÊòv~¡fŽxnê«Z÷þfY±Póàæp{»OwtÇAìºA\~çùúv‰ßn]¢/\ÜTábMopúã:ýq±mFÍèéØƒK·÷àò ˆ-jÚ±à©q}X{VÀÇÙ)¬ÝçLë¾­Ø)ƒ(9'ÏÇhU2Ÿ|bãs¦õüþÀž£gß¾gß¾gß¾ûʺ¡|á{ÃAl]xÝç‹›X`vŠ^ ûïÑm¥ö¸ÉŽ_ù¼a½ æ*¦kìÍw24](R75ðÊ5é© ½ºû*íj‹œ€ƒDb ìÚm$lû£rz‰m$°E1át¿­ÎëŽGã2*¸sŽRöV¢NUh¾Pð}¡ úBQTø…|¦Õˆ*AUÄ‹ gÃÅþ0£Ûî²9×>R<þ€ƒx¼¦£…N|Õ.Z 5Ï\x8½FñI‡ÄšA”kt£tƒt$ LÉ¡Z‚ ò¨>é¨.· h´¡)eÍ·öÆê•tXj$ŽÑ}N¯±ÒÉ,]”Ó°”/ ~Ñ–sïŸtÀ}ij^¸ÚØ!eÁ­ŸÎB§)¸AæóãêA»àl‡xdòî­ñâÓ“7¹ òcsžk‚Ø«"à6/hÆÍ1>\_Î3Kg±·¤ÁË»9†m{£o{“O´ý.W´‰hIónŽaÑ ùqñ¯e±»E!sÃA c(àVÑÎÑ®¼€_ŸtüÀËÅwÃéï(K‡«FöõÀÈrŒ”ÑɧÙsÁ_}ºxOÞä±;áH›O¸@§Œ¨8~Íwüš!¾V(8’!9IîþS¼à@†àr%ÉåÇ•$—åŽ*ç!JGEçgøÎÏ0œŸLÁùm†èë±ÄÝÑ‚y…Žzçà"y;á†~'9¸8UœÏ}mÀ‘˜ƒ+ù.ãž’â„ÝákI±àô‡ïÞ࢘˨§„â½’O:+N:¾7Ü*ÿf¦à|c·²ï ‰¦/þBÙ÷…`O‰@%r øUñ}¡âûBÅ÷…Šï Õª> S…S&\_•UPšÇAp9QO¸!·2‡æ.©tCøt3XÍv À·´œ×¯ºo‰Ýw~ºïütßùéªó#ÒÑ D¤ç-\ü…†ë ùú^äø$8^pãáš ‚ܸ?ÑUT›£ì”ÌÎ>aˆ7ÇøŸ™¼íq 6…€­þœ§ø:8õ…dÙ´ø4#73çè* Yp¶ÕŸp¬'œÈ…‹ ©ƒ0ëW’a—Ÿ†¶·L·)˜³{J¼Ž^}û³ÈV¸ª$”¡”cõ‰¶Åê‰d`‚ÐqŽÍwá5׳,6ͳ,vߕӅ+G8?]u~DÇÊB\pº­ã‡ëUñnZÔ ˆÉÛRXPó†ãW®æ ùhÞPîÁ®ýÝxz-þ¨HÁ o¢&W¿­œ¤zWØokÁ_ÉÐ ·Ú®~[ÙןbÁ‰µkl®ü¸Ö~ÀõÁ¶-6¾ö ÍÜ}H÷] Ã'ÚÃåëÉ>›+[Š2¶ÝQ|6W‘#xÒËã›â3ÙŠÏæ*Aº˜J p–W{A‹¦#Y.>W^‰¢V*¸éd”èÛÞèÒ %ùNFr]x¢E:’J:²o‰’e&þ쓎¬¹Ó-=%Î%ß.ßU–Y©¾3.‘ÿ K¬¾%ª,³âËô*b‘L"Ùp“ßUÕâ!kZ<ð_sé¾9vÕ%C Wã”aðRpSв —´ TìÑ€“f&œêb¡°Â«Ïœª>sªú<`ÕgÕàzÀÔàût>XõyÀªÏV}fZõ™i5úÄÆç@›p:M´aª/M­úJo«¯þ`ÂשçÉÔ,˜¨õY;á¦O'v8¿£ÊDtèeS}†]-¾}/>uásåUÙ•?Ï`¬¾’ƒê+9ðu‹ÈUN¾ƒ—TcOÜGª¨Íwâ|±ß*Õ"š¶ûÄFÓ„,W_ð¶*‚·M·-QC¯—}=%<×ô1¼ÛãZ¢ª§DnrÉJai« ÛO0)àÆ—XÓðãåæ³øZU8ÜEŸÁØ¢j ­#8«npŽ]“"£8©ùrìäžYfGO ú© ¹çøÕ§zféÅ肜‹öÛÙo­–˜.8±Õ!­Ù¼álÇRªOá /­<ýR3êê°ßUš¶ ÀÎjÀÒI\BJ¼àÖýq1Ô-8}Ê>$ÿôç†fiõ—›ÊTû*ÄØüÀ+Ç(Fpן"8 K¼áFf¦böû*Ðkÿ §rr“Ø|Á_¨kˆ„s.9Ÿð«Úçü½G7ʹ¯yà ·°[Ƚàý³z?TÆ> >Ê÷†y“:(r8~%ZP¹ë;(3ˆ"Ùþ‚[@RÉP"hÖÏ9ò†’‚I{Á­ û@öуiyNÝšP| ¨@õIÇ4Ó8¢tHõ¿àDw³÷…ˆÑÉîb'‡‘¯Hìä@ïûo8-òáwuåÊb‹‡Û½K7?mã[U ǯ\<Ä Nñò‡ïôtz?RµkÚjåáËlËU»úH4K‡¢<,ÁÐtÁG³ô?È#úF—½KÈÓ»š7?/okÂ37:ÎêÉ7y_DodYh› §‹ÄÈÎÈ>©ó¥jíŽ |Æ\’G·NÞS¾$¬Q}“}=ÐÕ:@zÕÏ}‰\¸ÁúU÷é¤îòx¯žÆìË0CV¨IÝ6ùòXRãgûÜ DÐUCê OàWÁ°ÄpÁ ,\¢‹µ zþãWÑ·‹ëRî&r1™žpCÓ¢¡ço2üÕÚã=ú›g~¦àüÊÒj)\pš x¢Ë“}l¡"¼€_ßX4ú\+mü…ŠOY2ð꓎ʪpÕÚ«O:\97å‘h>GÅèÎÉ›èh b¸?T¿½çþtÑ~ƒ_¨ûD[ÓF¼<Ãwz‡h„À%߇f‰&z°‹áU8Zbx\rŽ˜è_¹r¼KPäx7N| \9Þ'ÜyXBô}:KÆO¼àÖO}Ÿ.ú>hþ!ZŸ@&ѤœzÀ¹L†OïÉ›‚D'Ø"{pKM8ÛžŒÈ$"àVáÒ‘‰òD— Q4ÐÝ™¸Z9‰É•³ í#ÃA˜¤€[@E`ýÊÂÝ.8o F7 n]bS-Q´òyV †n=¤]uH%+–Ï•ƒÌ çgpʦŸ¬[ºµ”0|—œ…HŸBC£ÏŒíÊ]jG jÂÛÃLž^Õ5yÛã Íã ZÜwá‚¿Úbt›]‰H Î’Ã,g³t¨BL!‘ÖQ"/¸õüd—ꉮZºOu¨­Çï sü¸Ñ6Š®&?'\žÑÕä§Ä*YXAUŸ‚ª*åêC¹à9v“~k¾óÓ|çÇUW¢d™  û@÷€®:®ÂºÇûð%F7~¡áûBCó…DN}H)¾àèঀ.~àä Ò¦ÇÝ©þ‰r¿síÕAu N!Qõ`ªÿõ+1[±¦/¸­…ô‚[—UK”ŒDXµ¹àµ0<¬ØI1ᯖïÉc9ÝlžñÙØ'G‹<áô‡Ïxöq1ü‡eÂS`b𕾗$úߪft«t•tÈÌûP‚¥NÂöú‚´Éâ»á6n§âã¾/2«}„ÚUìÞª ~¯=*Öî3­Ò&‰Kò™V šVóWYî7„<Ÿù‘8|-wɾÈh~\ÖãÖc–M PªR²DeŠ… û<`Yå˲ — æ†_ˆ>š÷"Ò¼ œ|œ|œTœ}_( ·¶&œ(ìÖhÁ óßÖ¯ÄîA¹Asñ©1_Zöe åêÛ^¹Í5\»Ï¸É>ãfÂéíýp9…¿á6B™’UÁE™>> Gð„³Ù‘ÂþøRȲÏÊÃ'\>¨¸™ ``×Èfq2…z)Á¥ÒTèEæ@‡é?% sÐõbâ@ߢ­a!w/`!W´±<à6é{ýÁ/o¸ÓÏO—}“/>ÑöÝÖ¥¨D».¦|ñúò¯‹T&|ˆ¦š£/7¦tñ˜À9vÕfùn© Lµ(ç`Ï64(eh–X}wÙ„³„´X[ô×–%ÖGµDW_áhªUK ì5¦JU]˜ÕW*vÐI›¶!ªæèªò.5ù¾cRÍ1ûæ¨h¯æ¨z“Vß-WËŠ nZ¢ê’¬¾§g],0Í¢w«”< ÉŠ-¹øøŠœeÀ4AóM^ºÔqD°ÊeM:¸Ép¯Ãwø‡ïd¨®kð‚¿‰GpzÄ%¶Gc¶àÚ†\§×Ä|ÀÅ‹€]–w‹ª,^Ä0jyÐôFƒvm¾ªÈ³›”wÜòûLŽ?°¥n9]pcdUfº…~Áæâ59à¶Éûn¿&±õ'XöÜ\tû¥ù’ [÷}ùî;XÒí—"Ô\†ÛJGw„•þȦ/ˆ8uW¯¦Ò}Ž×ÅüÊåÑßo¸Ñ¹ÕUÏÐny†æ Φ• sTÝ~Ýò MÜxʺ/f:á)pe3X,þÕãÓßñó=»êéØ}OÇ^]XW¹g{ó}ÇyKµa:&Mõ]Í œ})_ÈçxíC¸Ién}7ܤè}4–ÅGcyÀm“÷½¾Fx?ybt£vÑ7ùè2ÀFôMÞçÉ'6É'6¾{MdÁ¤›pKD}øÂŽ" &ì>TF®¬*M4–é‚[×î{¯M8‘#>?Êëˆ?êoÂxOàîûÀ.ËnÛñ"MðÁ׃íÍ!·F÷ð°tW[W×=\ŸÇspËÆU™ß9ë#=÷ˆ²1nûò²4£Ñ#/uò[µ>špdõ1LÖÍ0y—hDÑßQW·±ú¸®ÛGM«³ Gä¶C†Û²ïêS|ÇZn#{¯Š‚[ì¤úÀ6²ëWÕ·DÙ… ÏOõíOóÉf›N ¬?—ñ‚[5W÷}ùn®pÁGij{æsÔLÊ\ܿũ>^Æ,wzºào4×1yãb•¹‘1V.ÅøÞX®›KñEÌxOÞ¸q®§y QtÝ˾“#¦È R-­ën8µ?¢J šBç|EPXE†SýKŠ/h§j(¾% nɱ«¡¨–(W¡`8DÅ+»DÕ!­ª%úÌ‹ GÌGE†o¿ÐTKì¾%ÊFHPÀW·/ªÊ ÷DÑÁü…'Üà/<ধ½Èûý… ÎÒfàÉG¾¹ÇôÉÄ n±¯EÚÀŒzÜ-¸qãbpéਠ‚×è³tbtÞ}²™|“Oâþ õ“êgß]·¸í‹F|L¸4jÁÙÃ/ìOQ8Ìkôy/bõñúþŒo¸°‹¢à.þÀK`¬eü ˆ’"ìϼXÜw™wÐdð»OE¨Ì y]ã½þÞðÑ™¨–ròðMš,=¾nø«9Æ{t}Ï ÏàW®Œ¹O5dAº_Ý,q¦]L®Þ'ÜÐ@¡¦èûtQ~%5N|:Í™¢ïÓY";ñ‚³Ä¤´@\£ãóãs·Lxj¬»)¨Å+gí¬RP’¥ƒ}Ir·tCÜüo6TÅiRõíâòºg½ ø”e_r "¯;~%3ó¢'xÛ§â%fß³j‰¾L—ì3rñ‰`1Ø;RŸ-<9Ⴓ ­£ ÇF¼†dxB&œ`0œ"çèjsZEú8¢Þï{é>=ñ¯ K§—(yЛ*‹ šOx¿’L•QÚŸá[â@–ù+™Šõé©…·5¾?}âŠn\byTKé{Pq-’­OY±tzÜÀÁy ø•dªà—vYΞDß´è7œøŽšk¦¸UU‘mà8G—Rs`§©·Ÿ¨dá!˜Q…NŸŒÖ†þjí7ßR"¥õ\Œœ¾ŒX¡½Fcåe .£âê4µàƒë¤'è7W§©Z\=¤œz+Ì´Ò|ʹù”sS)g_Fñ„[%¸û¾¦Ó{•i´"†ðÚ¤­“ßðW÷1y›)Y}EF‹‘ëÑŠ··>®í­®.N'üÚߺåóU_ÎŽŠ?±Šü‰ šÑUÎNFI…€~QWÑ/Výb­®~UE¿X«ÏªŠÌž¢‚›–¨JBÙéRØßp@mUpSöž—±Ö*``,T µÔ÷Eœj“…«ià¶3®J®>[Ñ/jæ¨JÍѰ,fþ¶¯¾ÔÝ:|Û !i¬>’Æß;v±ù ›/é¦ù ›¯ð¸ù‚6Mj€TóåÞ6KÞJ¾áø ‰WlC–ÎÁŸh <à¶/$^ž W1èŽHÀm“÷]ž^Æ¢‚[t{S¥ÅúØëÁÞÈôC (&çco¬"{#ìõT[—uÇ#ÃGÓ—þ~‰ÉãÃïK‹m¾»·ùÊfdòGÄkºàlÎ5ž¼‰üqy‘ü± †“±7Ê´tµtt_Îh ¸M:|ÏÛήh*'|Œhñ…÷¤ñ…k¸#Áõu?>´« ZfÝ—ñгËÕ䣞¬½ˆÛ a·W%›¾L ¥eíõ½sê{í¢]ÿ3k·e™vŸAÒù7¿¢ׂ[ÅÆ—eÚ}Y¦½ûŽLܶ‚¶±Ä-¸Hf ý¹]òÐ;zn›¼ÈŠ]„CÊÅ/ðñ¼¿&¾Ääm×Äx4' I)àî:XF™%ÂÀ÷„¿ÒˆÇäfp€MxçËïO¸Q'¨±TD*ÓPRÆH‚µ+ˆ /ýt¨ÒO‡¯yH©Â}jcr{è28‡¡ ƹÄes%Ó)6Ö­<ƒ_I–Ùª£¿#ï“ùÑCÐ5ªï Ëìø•hAEx”ùReM‚á"x5.6R–Ïxã…àø•ÏÎ]úBÊ/Ác€Äi‚LÁ ø•ha9Ÿù!‰â }o¸õ ij~šÈ5›0Ç_¥•¯tå‚ÓúB’¡=yÓ…ÙDªZ˜'½à¶3¾G7ñžÁ¯Äü·7JŠïOôHð 7œñ^À¯\G n=‰•!…UÛžä“!ɤWõ>øj«G7žŸâí™aÛ²Iõ!Ûžê“:ɃÐ þêË“7ùwNxæ„¶€}— ;îZðW'ŽÝ”uÙdšÞ7®¿×ÇßnK ?áh‰Ã'Úç‡A#& N<ŸhÙ }Áƒ+©¶E5-kAÓU¼…à›£+­µ… š£h¶ ‘¦ ݧnɵj!ª–è³;‚¢kNÓÀm»˜TK̾%fß³o³j‰Å·Äx65ün>jÞ¦¢æm¡úô…‹¯+^SQó65o Š Û¢‚›´~S-±û–øOÕÒ½W3 ¦!ÝåÃ& ζçÄ&_ô]êÑw©GÕ¥.ÒÓ&¸hQJ~¾+§EWóð=:ž£xßÂ'St5?à¦-47|Œb:Ù`Sg ¼5Ñw“FÉ=ðÃÄbøB7üÕ‹8RðÌ9ºø€U‹>g„³º{be?J´}ΑÐF²šÈH;êPÀ­«ûnÉsÿÜ*óÝ·qÝåŠrh4Zp64IÜ*ó¢Ü¦!Êåó-œupB®²7JG ®kÂ)“í'¸X€£+¹zþœp µ“«fgÁ2äãšmÉç~H²û©žEUk®ôŸY»Mõø(pÜ1J’[C8®œ–ä*`ôÎHEºnñä‹ïXÕ±­)â¡píÇÚbE ~IWáü×eà ÖÔ7]ð1ªÅBì´•Y{ áüJ¬–ºÏå÷†ƒŒ…Š€/“@¦þë#¤}µdð£œk†í ÷èÄ'Ú‚Ûˈöž¼HnK‰v¸à#é÷€3!²&»¸eƒÍuÎqæ³ÔÁÙ\H´³ÏæÊÀæÊr²‡†õ­= Ʋ°v_¢Kކµw ^À¯$‹¯¢„Èé~ð$—âCԺǯ$ËL˜£Å6Jüšã`v1=ü÷.ŽãW’6R@»XXþÍœ O÷è/nèãþÉGÕqÿäeZ5Ëý“«Ë™ëûû'“wÎ-8FëŠvó}:KEW¤à–—ÈøSCkŸŒ¿éa¿|—GaPo‹/)”Š\öæêâòM‰»Óáä]mZQx°Š \o^,´åq÷Z=uÙÞÙk¹ã ¾¶@á½ûÞ£¿:ïéž<”M‘¾7Vôš_ü»‰#Íè*[ðܹ˾)àVÑN.u>á% ½NºáÖ“aIN\ídøl'ƒL|·‘=E;Ï“Á¼B‰§ùùå³ë&T±ÿ¶"[i(*5áã^â—ÓÚ_bt›­ØN†â3ò&œR|šµW×Kì€ëÙ2%2÷pƒ,² Õ¡€[@SÑd«ͱóWƒF|^¶Ò]®ˆ¢ð²!«g×ð?\hdÃ,VaÛöŠ´À”Ú¼çhÑ\ˆ˜5–+¯P ¯os\¦U7}`K{ÍHÁõ©"ûîù‚ãmskó)Õ-O)Äü#€ ¢!¾àmhø‚Ñö&ßö&ßöúB“"1avœkÏÒkKGf-ò¯f{!QÓú•‹P©U‰J‘˜ã¹D_ÙW-.óâ€G¯Hv\ỪÖ÷/Oþêü§W²Ç9ú´*ó0¢›¿á”…7•ûR±«ÄoTð7¼[@÷`ZÉ'$ÛŠLÍ -xã ð ß¾/44_H&zFì ^2{ʪ>Ø<”àöhN™LÑ|ñ9çüa¬pdE´ :)P´¹ùlL™Mº¢ìÆy3àÇ1W5ðJôKLÞæ˜kÑpÅðäÒS½J8ü¾7œ½{—WŽN`Yl4lž­Üwçžùk=XèyÛ²ïdÈŽ¹†&Ï;æ~ 䂞· þfîÑ… ç¯A žö[{,&Šo»É|Û0r°³+§]ñýÓ¤ÀVPͧ $ó{X&œð°ü½g(‚Ý ‚éž< ù躠ëžïHT”Ñ|X³`‘‚pwuÚh›ÔÛô…úãúBýq™¨ýј¨ÝBS.8ñ!4Wa·xéH¸ÞsH‡¯²à 4g9Á¯"zd?æŠí¾ÂzùÐG@ÔæC·‰MúϬÝDÝdžu¢¨)^pöÓ5hö4í‰þòe(õì“:Ñ-ØÓkñ¬7®+xî 8!\ÓhBf÷y»ÏâëU¸Lˆ%à£EõÚ©Éãím>­ÐDцsl>­  ™Š´çøå¹xËóh/Шpú)K°Ï-(ÒžcgÍ¢=ç©¥‘³¦Ký] ÖôVkÃçrôfÊyÁyŸ&Ú^9z“iϺ˜6í9oÏ—Á®›E¦=¯ðË/g÷V-Èã0¢AõÜpa$› ßüN=Ió$%FµÄtO>I}´çmÛ臢$>à ùª.‡/æ9$ã«Ç¿—¨¹ýFÑÜ~"#9Ñ;—ø¯kG]PÜošS»(Ÿ2Ñ:†÷âo/®/Î]_‚lªø£d²pâúŠœº¢bºAïÑ-(!”+üÕÓ=:Rc]¤ë†å?þ¦¶+îºL¾@ÍÁ‚çȺ€5pãÉëdˆ¤Þ·dÿcò?8âüüWî ø¨EíbNpQí [W—)ÅÓƒ–çùa|5áã˺#DƒmT)¸Åô©Êáú'îí×SVÀG&áJ×K×p˜'Þ¸J>aò®ÞÅ]d'O±"¡-¡%F7Ñ9ð ~%ŒT‰tÁyJ#DëÛ½¸\¯tÂÑéµ0G¤ÎU<ª§ùT$å¢UO:à†~)§î˜´å-Ñǯµ¬€¿útñ†ïtCÕaí†EÅQÛ"KnK–=y çú1ù §ZEæXp£µ—µA~Ôñ+‘ñ`¨K7œ‹©aÑŽÁ¥ÛcÐèv ­ü÷†³ £"ü=ú›/DÀzì>BY—Ùî#ÈÝpö1ƒÏ‹ìë„ê¯{Ì>±ÙžÀjP|&²üDÁõõ½cÃEc(hß‹ôlMo¥±¦zŸ®øÄ¦ ±Y¿=Œ¡¢%Vþ1ó·_j…JeW¶aúBÕõˆUóR)õóíBúÞðÄÑmµœÐn¾ã×|j·ûtG¼£Âã×}kw1òw‘R¿ªäà‚ß“Wݗç7‡Aon¸ÈµŸck_\ûœWëô¸_z4Š/êÙœðÚw¬‘h§àíäj–Ü-Týçä#ëVt¢[ðQM×b²Ë’ppøSò}¡$õQÙ£ÛtGrñ™uÔ@£;|.ÂÚF†Så{ÃWÍÉKáòyå~éAû>íMŽršˆkt£ÞtõT}GF²$[@ÎÙ gmmüº]“7ž8ئ`ýÊ«žpJíFÙ’Lb¬ Wó Ùs‰\NÄéU×m÷­½ûÖîó\¦í¹LŒã&#±ñ¢IÓœ©‹í¨þñ‚£¸ßO³g OZ¢ààZ”Û 4”m‘·Å× _¶X|™‚_Ƈ‹;ì<$±Ñçæ8?™o@ý“eƒÒ];èFðe¥ã†OoŽ/AN®3žÓÇ1£9ù„ËU§ÙÅ>tÛ² Îõí&Ÿ}'xÉÙP‹pnœØ ‘—îÑû^|ûî³ørÖ.h…êKûƒDÁ ¤Ï]lû5.8«.jïҳŖËÜòPÈ>§bî¬si=’ÐÚ-¥™‘‚( O8WÉ]"JÎÊ‹±­˜¾ÐðIÇp…«4M€)¸š$4†tÛ EÓ^¼‹Í FG¦`Î?Åþ”`°v+‰*b3ƒÑ;ZâªÓäpÔlîê{-Ýp[í„¢™Á]Z/8µv&~íQ±vK¸7Üð7_ž€Û,ŠŒ± »‹Ï+r¸ù¼uö™Òe¸ñ™R4Ý<{ñ™lErÒ _¨²ï@ÅWÑâ.Ãq*O±¤Þðº+!ÝÞ|ǯùŽŸÏ2+R¸WX{ßÀÈÇWºïÓ¹HÚzé…‘‘Í/1º-¨U\,¹'d÷V_b%ŠÓ[]$m½>š°_õ…kà ï Fn²\,63Hˆ´©W)?Kpõ…ektIp* V8é’ gC“u Æ§·—ŽY^“#[9‹½"êwºà¬nO 9,*oV~ßLÞ–ïPYyüJ²é|‡ßpÞ•×Üzø}†Ý„ó а›p"Á\ãà¯Õ k9úŠbóž*ÃëFk…ßpä±CÚÕ}­¾º‘jˆ¾~n¸õðkèJz54s?ç(‘ž Ö‰†ô¬7ŸÕ6Ímâà]1ºí”µGsÊÄ>” /øh| 8+FgÓêà)kÏÚv?È}ÊújÛ‹œ†Umû̆ái.žÚnñ܈}R@×-IŽ…Štû„/RâðnTÎ-i<7Má×C'cæÅ†0‘vª\£¿®còå½r>G/>Ñö…9›Á´"à,]cED¦ NK0ýQ¾ÄämϲV]ϲV5Ï²Ö ¢/x}:k™uÅèFÑöUX4‹Ë-\pÀ –ÔýJP|Ý'\]ã“iç;†èUD>™6\ªÇÔØ ^p䓇ßר ûtUcƒÞ]íG7ܸ?®ÆÝÔ™à†¿9~_btãöú\n]år3õ/¸álæ`(&Ð}.·ž\WƒØ€€Hã8מ£ßkÞFTµßn4j¸…ü­ŸØÌý±ô¸Áú•Ï.œp"9RSEÕ«`Ð Ûë³ 5 À¥<ás( ¢Í›lO†ªA$Ô³pÁùœgè3ë’eFëkòo¾P¼áøŒûB¦}¼·] øÙC†cQ®ÆT N‹ +¿áÈiò‘’€åöÅR‡•„€ƒæÓùXIÄî ·ÔücòRÁX@À#$Âko­)¸åÕpÀeôð¹Ü†/Ëmµ~hÕt.}.·á3Ù&¼æG}2¾ÄèFéŠ@É{BsßK\p…ãCˆ{tÓͲá&oò ×7Ú<à’Å3`œª~E{<Á#ÚCìH‘%ñ‚W®kA÷ó%F'€¼ïÑ·ï.SpÁk傃5£µ¯†WÉ´ïÉ·ïÙ·ö¸ÌfÁ{f2Ÿ¨:bòFu¡p“%žFÐÞn8k+´O\1¬=Þptg ±ƒÌúZðT‡úOÀ_ibò&ÆÜñXJÂg¶¡¡³G7ŠvóiÄæ» »O©táRQ*ö‚¿y»}o¸ÍÌ:áèK–$-6¿áäm‘ï W½ÄKo†GŽÌ€“1á´z×\n½d· “YpÞð7ïËï ·¹%êqüJ´$KEKŒ‚tà“¢ï Eߊª/$Ù›5AÚ®GšºêRpÃ7KH ïÝ>³r·ª¬ápÛs"¸ê%N¸þò¬.Y¥ÌfÁG-¬çØ\7+¿rýô°´é8×^}b3“¹çDD 8œh͹tGá‚p‰feªh{›à׆ÎÙ'ru?š%º )Fpùœv_„½±ûw°ïôG§¿ø š ððµéXp[ýôýÍ 8¼¢+(¼à‘k%R3²âÃ.Qs5ÄGµDѨ1ðNÔ(;w7Ó.Æ Z¢‹yÁùŠ9Ô$~Ái¯¢x”w7›DÕ’¬ø&Þß4Ür°’ÅhŠ7êM¹st&©m,~ûM}ˆç2¹ˆ€‡¯'Ä‚³EôøX'©ÄUŽäºUqK‰õ+ŸÍ•²ïôj²òF*¾9ùŒwÅè6»=ÕÆM’áì"œ2Ÿu’ ÖÉ)‚üT¢!Éoë$ZDPe$_p1uþžø¡ šÑû‹6?BÕØ ²¥cÂ)ReAË(1awLÑrH¡é#ÔŽìó.åG<È–×ÈÏfíoX$xp‰Í„W®b®ôlÞLb“ƒïÓEŸØDéÈ dõÞ¹GG’áV©S¹³,-N郖0Ók·h°-ÑŽÌR-iËM~Ö’r ÄöR“³öãˋRŽ Ùð®špPG‹ÞÓÙEë{ÂAÀÖÒ‰€³‡ bÃ=ºQ´E‹Õ™-8Mòo­ðWZ;Þp[¤=ûLÁÜ…µ ç²ûÖ® f‹-—n¸ñVucÃ`ìÉýÇ‚ÇÆsòÜ N×Âýý¦`íÅÅ2Ä& ±¢ûr 6õ¿¢M“u]£“KE»cL‘y[øv[ç¯&O)¹à¨L m¯Ï¦h’@=O/ø›ý 7ܦv hqªÈ¶ôX à¶Â÷=:iR˟Η¦é±€tR‘C_Hh‹A'E n¨/<áH:|)`E ÒåU×èÆƒ¥áÒÅç¤Û]lì³¹ŠÏæ*åZG­H÷èÆýéªýñùÏv3ÆæÂOÝ2\K¬>X}D›9Àª"9?)&o»Uåy.ë2š˜b6Êšºáè© ¼8Õ—œ_UÉù5ºD»J~.|÷N8_î_Ê5úN†¯Ìô/ø¡7ÆÛ›|Û›TÛëósÕ,]ž°² fßþ¨"µø$¸¸.ÏZ\—ç·”TŸ£jõ¸ ?¾?º=‚àSUå·×æÁ&¸skHå&òVnx̆woõÙFÕBG)8E€ÛÛUÛk±ò'¦¢9~Íçj¾èÞ†¿Žµà›|ðMÞb8¤ nÌÎÚp›Øˆ7E9µ2?> ÿ´$žK@vÀM:©ùL‚ §ƒD)+¯eßÚ³aßµûl…¼-‘Z nZŸ#¤Uù!×e8›J*l\õmœhDÜï86Ý„­inB ÷ü©—}—G· —ÏÅ1á±19º„ò‚Ûî¢îË’žpú5/ª´¾’¬Ù;$\Ýçâè¾$ë *‚Û6NUZÖ}>Š.ub¤Ì5º-n×-nýÀªâüî3 5ú‹ð%F7~àâ›|œ³ÂéÕp› ·9”t)†!Òê2{E.Žõ+9í¹Z'œuµ :¸½êp«î†íM°£gŽžÊE±·Vä '†ÏÉód‘‚Ô±?ªáø KâG¢àDbã¾>¾¼Ïî¾èÄÁZnútªèÄðY'^9†“™¡Fa—¨y_pcø¢‹7¼°oJ¸½Õ·½0sã#e:pKJÔðe„L8ˆ«¢¤ŠÑ|ŸN,(l¾ÁoUöIú½á­ñÕæU1y›5%2‚ k|´+þ‹=É×èÆ›0‚Ï_åçQclTê€[„ë€[n¬ÀßßXàžÍ†³†Îª ¦×êü€[Ôy~OIÔ†³·5Jô:F7Чó?àïÕy~DBñ Úw±m_ËèÓ%‡F<&oшù‘ Å\ûŒ7E†¾0øÿ†#úÏ*ÃM õp¤P%‘ ÿ<ê$xäX –1B/±ø–¢†>?"o8AìyÊPõ)¾ê»3€-W™Ãú†K¶½q¿áËç‡5 â=:ùÌÿpÌœ<_ußÕ`¨»úRpƒó˜]x4ú-øì ¯\ËE…G7Å~ÉÛ¤#DßÚ¥bú{ÃmÛ+ZfùùÈp‚˜p%U 0ùeØ1ɧ(øtLÞf™¹8¹7<åç}PkÃM!Çäm™P|k—3àÆYê®Hø{Ò˜À‘Ö®¾c-Á§ú‘G·ª´êSiÍ'ФcpÙ/Nn®™*C?G·iÄîÛ÷.ÜÖßÖÝ7yÑJ«ÈÖÞtÙE¯Ònxã» ;6XŒ¼x¯*}™m; s9áì"( xäi£Hì1yÛ…wÀÁÕ-¶\ºàFÍ}ÆX Sý˜¼Ï–‹r9Ò\1ú>‚·èϯ<¼“ž@l–G§)Óþ>fºbòÆ Y|(V½á¨™'¸×â¸vƒnYµ½¢3 ô:ÞpvðKì`Ûî V9Ó4lÛhªoªjŽ> *òÛÔá{ÃG*êSFÀæyôyÃ&œæó—U„¢lëϯ †Ò÷†³o?*x{ég³f‰Ã¥ERmüæOr6ÙeÜðW*‚˜<^bp]rÉ“~ŒnÓ0)h4LR˜*E†#Ú×®ݦ"Rr©ˆ _ä¨ïô[J¾ÉûüF) º__Î1˜áËõ˜ä–(h™$ŽDú…HÀ‡A=¦âSÕ§;¦ç&TÓ§›-‚›>’€[µkUiW…qƒ$øço4“âwe8F7jWŸu’ºïôvßéU7ÉgÜ|×ï›mxmÙ$Áð½ñ†C –Y±aRÆÁŠ ^ ü¼×oßnÔo2­õ}©ž£ÏX]â··Ép:qW<9¸®n‘ÖšÊøᴊm®ƒ—Úò:Î*ÿNö™VY*ÎdÓgZeŸi•³lÔÅèÎÉ¿¡Lx(³/p—¥Àª8Fg¹™ñ.šë+û"oYd<„I¦ýô°R_ä-7ßÚånj(s°Wƒi•Ûfí¶$Óì Üe)p‡jŽÑŸN4ÙòLç!kP's¹Èy®ÉÛô¦Hk³ƒ ÏÐø²ARC#Ð@1›òö}K] .u¾h­ùìàÛ‰JŒþF×p[ŠHXjE6œÚ÷¤Ø¸è[{Ô¼3L´Öé‚S›VìÁíÐI&^êtÃmiɆË$Rðë\.i¹l¸dfá¤å wÏÛÅ *â¥f“–iÝÅgf!bé[;>à )ÈÿüÊg_"Ò„ƒ`(ÊÙ¼ÔׇPŸ£J$–Fí§ŽÑÉ]”Õ£/]¼XÒÅ#ç±P6‡F6«/­»>®óSÕ}¹wÉA®¬£¿¹¸Ï¼¨Rúý¦ü g˜ÂÁšƒ%S;CPæE’=BktÛÁ2Q;çn3\ÜÌnb"=F7NÞW+È•—Ò׌n+øn +ƒÈ%õîéø¾á¬Nj½×Öèä’lÖx„D fâIyα²)l¯§áÕ?à‰óKd  ðêÉ¢(~¡mQÐ9"›kÂWk B·yt£+¼5ßø×ÄÜk#£¼«ÖØ Ò\žFZà’AR *„ðZ«iãºïdtÃÉHÄ~-$ÕçšYDZ«ÑŸNÑ5j>°/H$r\ÓB{ÁmÛÛU•S"u‚ؑâGûÜûÞpãõÕƒæú’¹¨¢£™ðD†àå]ô0]þèhº¯@jÂÙSV+‚dØEn£zé€Ð2ÉåsÝ—¾3á%qô`…»zv]_ÝWQoáá>'_DÛ9ÓÖèÆÃ_T‡_²ÌR„¢]ß?M¾7Üzø«êðû °Eãm«ŽœðÊå"´Œí½ù„ ©„@ôÁÔÙ g¿P†AÀ®’¡î“¡®’!Ÿ™6á•3#þsÃG3­ûÌ´ñ¸Ö~P[ìƒá³òÆãzÞð+³àÙ¿òeüLxLud‡÷Ä„¾¸~`_úµÌ“/ 't‡æi?¢¨;£˜üó"Þp,‚É¥]Gò-1ù–˜TK”ŒÄ€—8á1q ià6#qX²’H¸…InøÂ‘‹Mýá+«“bt£t¨lÌQ}K仼}¹ ï '¨‡T÷Ïû7€‰ªàµ:àH†D Ö'ŽU¼÷°2T£eÈçb0Ã|ýÊ—xµøÛ¹ ÿ¨¼qìÈh3ñCÅæ9|&êPðDÙݸDM‰_x<=s6œ6)ØÉ_£›4Ax‚oò|kÜ)‚ –aþf8^bô-1ÎPëÌší;íc¼¥|p“z OQ©GÑ—‡\M Îæ.§! SÙ%~5K¬ª%6ß)ãkéT¦ùNYS2±Õ "ÚXp6VQ ‚Ùj&Tõ)£&oÈÇ/¾à±ÇçÆÉ 8÷þÁºÝGO|ÌáaS³ApòÕ7yŸÑ4áDxâ‡Û)C¥?‰+£éY qåú•d4…„Œ¦ g/&…¡ËÊ®˜ü‚E´atýÊgZ-ñ‡?½E†wÛã-hª÷Bô¹‡"ï¢}ðñ»ô%&—(`D…€³dGôöpZÎ;ª`Û“sCpÑ2Ëpôi™5Fµ¢ófx{£æÊDÞýö3§þ$Cß³]‰f'üºÇ‹mÃE"ï€tð„×Áôë±*à¯>]¼á¦ F¾Shò“áÐó yôÎSK§ ÄÆÅlDêïpïè7^ðƾ)zSnæpÛ‘qQC™Rœ`v¼rïQG5òmø¾š}o®Ç¦…Rüܸ騪}Þ‰Ép[ZÑ ×§ ^À¯,½tÁ;OËâæ{tãÉg§È[^‰¨}ºáä^‹ZgîôV žÁ¯\¼åð–ÿ•s‚†€ﵤò™%ƒÏì{Ã[a8Y:J_Ø£¿n»ºh£,wßÖôóÓÉÔž \}n;ãI6”¹ÕŠ\O8å‹ò%—²OEdƒŠÈ<ƒ_)õÑ„|Dœñ3áûB„?÷üBAvÛ‚„Õ\@l@ðtžk†§c¼G·€ê ׈žO¡!Z[`±I’;øöÜ|ïÑGcS¹¡ØXˆˆÑ-µ7œwÃêÈšY±Ñ\‹Õ— (6-€DªáhÐ-ç¢>áú&š$ ѰƒµKN‡#?ïÿ‚<—Õwc©jg«¯ ¤JfeËȱPÉHSëŽï ·Š`C"¸~Õ}_¨ ‘ƒñ "”Ý?Áv1u•e¦0>“ CFõ%F7.Qe|6W#ðãýðžÔ¦·±žp`¢6I  $ÀÈîa‚¦¢"ûEÐ>ŽßpöBxéC©Eƒ±@Àm/æêSŽv†^œ‚Ùhú{íÒ!‰°ö†Û.bU¿ˆÐ|…´M¢4ŒÏ˜k>cNÕ/"ˆý"èJ—ßp‰ôS ÝC­NoºádæáGJ6Ôô‹àûËnø“†E‚›AõT RâŶ„àÜ@R‘¹uW¯Í'^í?ÆvAT ýa—¨yÎ÷ÇõœïÁ·ö Xáø¡±»J$C_ûСö‘’¸ÅÖ£ïÓ)ƒAâH¾O5¶«Ü­" OÕ„W¶[EGN¾Ý­"š¨Ô­Ba»vWƒòGÆ'¿îv¶í• »Ñ££ƒ¼º$¶†ß£Û´¶ª_DèÕ·?Õ§v«Aí& ž9Ëì¢yïÞ|Û;=`D'ˆô/ö£\£Û*]:ð€¿RxÀ€tÁŸüXD°»ŒÏÞ5ƧØÊv\pÐá5€¼Ç5ú›/”n8 °‰ˆf$Ç'œ¶ >\ŠktV‘k¿àćȲÌ׋aÁ)çGTLÞÒL!RpËÛ Çõû}!óâh¹À¼-jQÀ*BÕr! …,ƒXMýÕ€Ä.QsÉ _ùÃȆµ‡ Îzÿ¬¸Û½²¡Ép–0i¢à†^gAÓ‹$ξ2A¥øŠÁõì{õ)>¾ËÂO„9¡”±z¬&õÚ ¸UoVMxoø £ _g†Êm°tX \v¹A•Ö…¨¶ G7hÄxÃmoÊás¦ àLÓˆöpEô8¿Ä(vF¨ lK„ÞÝt§ÇGÃ=Åþ Ðiž»îÅ]ŒË°;áÃî„ómÈ¢Ø~A‚ÈzT'Ïgá_ {ô7g<ÝpSÔ$úÚ/,8köGÔFiÁG‹†Û/>É£Û㣰ø}¬p±n˜¶G7éöødÕá— òí8]õüêɼ%.|¡âûBEõ…ªï¸šl-8xP€ê;®‚×^À¯$ë‘Èi'àì³-÷èFr5Ù:áüÊà<<—¸Âº–ñé¾%vÕés]†Ó>Bví×覼û\üÈ1<‚g2ÍpKó”\<*'ÜÀ§/€ÓkÁibñ†žðÑ;w}!± ÁãXˆ¾ŽuÄ`K½n8ëT‰ˆw9WW¯Ž„Ë•pƒ”p×sF_(ù–†Ä/Š/ò“ЧI2üÛøÌyôhê탫ø"Š/ 4>Öý!0DÕnºƒÊzôõ·ˆ»¿#Á£Âí­†í½áÖ«¡ùô›ä¤©ÕnxˆÝÞ|úM4ÙPÕÌ‚ÓÍ eåÜ}“†_/j_4>F1ݽõÄèJ’‹GK‹lØŸèêxzÂ-ϲÎÇlb †í œæ‚ûãîˆñBs“'ív)ÜcôIG z¸öôöކ®Å 7)ýèsøM8(ØT1JU ÂÁÒP‘Ę}Û›…›…vÖÜpÛþßä—ÇîUÌ=:mZ‰»X\ö¦ØÒ‚òVÞp>3 ’M>ÇN%›U%›Í·½MV=ÀdÛp›lZUñ‚³|ÛØ$ˆ>«µžÈr(IÓT¢€Ñ‡¸öܘnÛ¸á²ô“šÊ25Nîäs€%‹,RpCÚ}Ôt±@ŸNì^ßÐ#)—ؤà›h827œ}ÿ b]w‘¯½EÔô§à[Ä”|“O¾Ég—®K> µŽ/&ÿ&—­m¸%—-^pºç¡¨çSñ}º¢ñI¦ê“Í*\e„ñHŒnm gGLͧv›äzìý£Û–ØTKì¾%vùRޏMP»ïf鮨T¾ Ùr£"ç_.Ç´¦«°¢'¼sÙJԾߣ7¨«Ãñ+‹o*^pâ¹§yÈe_Ø/ä]ýH‘rMó´½Ñ'\«'Spð”›,ÀJ¢SIDÂ_|¡C6]ìãÑæÀ }ÀMo¡ì3­²Å´*.³ì¢h×Ñ>!k][ßN—Ùˆwzö…52˜üœ(&P{,8ÑóP¥}if¸¯Âú•X%JÔÆ R±ÑKyÃÚùGŒNß­_‰ì½0¢»ïðwßáï.GH¾{m†¹táôúl®âËÛ­ ‚ų\|áÄòhŽ_ ¾%Y9ƒ{mÂY«”®þ¹G7Œ]ʹHŽ*ºú熛^‹Åç¨òµ&ˆ»·Àc¹YŠ/ƒÿ€#ÑÎ.Õ3á-GÞe¸ÑÞ[¹ùçè?”àp\µ•'‰ %ì.8Û¬RXbõ-±ª–(7ùä˜ ^9â}\g6áoÄ\ÐCݧHúû „„›üQÅg•îò9û:Ä£³éî.—uñ…&Ubõ9½ê"=K^— ¯¾T« gkˆ±é[-1ÀxOjÁ*sc 4Ç™¬ÞMùÕÕ)ŠÍjF ?5 ÷]ÛÃMO‘Ý—÷VÞõ²3­úB}Õâ"á–0€Ø@Ø÷YÝÈ×ýf¼ç¢vÄo¸Ñ_‹Æ_}–Y•ÒÛÅ7éh籃Æê 4ªšD_s€X›x÷BÅçËbGìþŠDãŽN™ØÉÖN¸1˜S}Icµ»‚9b×ÚuÁß°j玈2bS˜V`{'œå|"¢¤|4ÓÍß klýÊçÛj²o+¨à&ï_ ª%ŠÐÕ ¹V$ܶĨy`6C§sŽ?p¢àNc…ôüƒùBp‰ªÌõæ3æZ6j$à&cNCÏßdx{“˜îÑ¡ÙÓ|l7h4Oåæ«×þ¦; §5|TN$‘áœÃ=«Æ†n²›Ï3᥾87Ü(\"­|‚Úµ?¢ÞîK+yá±yðÂ7õ±ŽÜ$6ÝÇУ¬“ Ü&6¾<çîs~hXÏ» óú:מ5WN/¾íå³^> önI[9àrw@}ê;MìqÃmÒá{›wP fOÞ¸®ë£kàÖsi‰ÆÄ Ü‚(¤Ð}™*"Õ8Ž–M8KšÑøå‡hD C§¡3|êã‘-}`èŒÇ%\>®ð8‚ðiZ„nºn4ÞÈŠžp:ìþá*£í“O®“1@¨"ÉÞP=b‡¯üikÞ#kÜ%ÃWe=á52ä”Ëú†30áõú•¯˜zø²*†ªzøª¡Gó‰JS‰ŠÈ «Ê‡ô$%:S£?Ér àþÞ.àá{¸Ž!›¨EÜ]•ÒPìbz\%Ì ò¯[Ú<ÑþB£!8à–ë:=®ë:!hy{¸Å7œž ÚÞè[bôxø¸E‚ÓUKL¾%&q‰p“øTìbò AR}!Ñ{Ž¢m Œ#`Sp‹e—žâÛÞâÛ^¹lîOQíOõ-±úôPõ‰`U-±ù–ØÞÛç_bt,i²= cÒ}Û0ãùÑÂKšž®Ú†áÛ†á[âð&•Ad=RváñDJRx\Ê.ø,’XQd£8•I¡¡ïí`‰Q‚ðä¦ù–“L ‹Ü³ Nð°þ¸gQ!î\‰,Ù'’Ÿ›ä†v¸ C–x¼àlZ,õ*¼Gç)Á¢x;&™7Aü¿aø&à‘lO+/Qã¥H>¢ÛˆnœEÝ·AJ„éß{ò¤8ËìêM°à-w½%F£aõh1âó*ºx$œâ-ÿkŒUxüÀÓ>*–84¯ºäÊ HºU`¶$ßÍŸ4ùI¦E…7À„Ó ¯¢L8KbŽi . “|±Š ¯À¤nŠÑ“÷Ù Îi˜‚ž¤”„Û¯¡€m®”}çR2[©ó™-Ég¶$)e¡øå‹ëjHE¥7]ÕŠ ¾^/•ÊäØjͤT|f‹LxÚ¡BÝ>Šhðx'Ÿ“ÁGeš•©Â—í£2M"™(‘$DÀ!Ÿ¤É6LÙUã—6é§…!"e_ú‚‰ 4_pcܳ®_E—g9‡Ýé9ú–UKL¾%&a‰•hpSL-«²Ü¬] Ù’@ ¸)¦–‹ïŒáe#|`•c!»˜ÇÜVƒ™²ÊÛŸ›á;¦ nUv†lCn ëfào×|`M¶aÒ0AE¿á/cD¹Z™Ï6TJ¤ìª²K>"ÉTÙÒe*ª§½H$‰ã%”(7)Ñâ{›9&€tpñÝãE•Gè#|\pcn̆›R%‹ê <ãE*£Ç¦Ê„Ó¾yU™Å÷œ/Åõê(š „$ò:.n zŽ xP¦¦Zpc¢YQåû‰¼Ž´3á7œ/@­ ¸MÙ‰Ïnè3(ò³~`•»_C²°·á÷Ç__Åè¤ßé#Ðgp¾i¹ ë@>Ñ ƒ‰¶…'UN§1>HÀË£Xm[P¦F„ÙC‹1¿päÇ{ô7“'à&æåžÁ¯|É„³Ö2-6×è÷Ò˜»pS¿ùœãlIKDØVÄñ‚ѸóƒTDM×tõ…jv©± M y2¯ÆÂ¿d Þð~U|B0+2s¡…€–àktM\y©Wû g9î.Ò a騚W{µäEÄ 5á›oÑaTHp÷^>/‚íK|®½ûtpWé`_ÅDÝQŒ¡uÊ|‰Ñß\ÄÜD#{ M’L s&œåvÇÙRíy°¾7Üx°š‹ÚzÁ©l©Þ#J4›p╤Q*MÚiÑ·Äi€yEQ>Íb€¥ß)-¹ô[“°±¾F³DŽU2À ½YjYX"Nhûí{ÃÏP™˜±?À:YpÛýÓŠK9p¢¥ ­œÃ1yÉ2j˜••q`ìÆ¥NšVš75_áIãé1–Ôn|54‹Í•(8ßR05…e†®î8qÍLË ùßÚ¶Ì‚ådtßÉM¶€”Ê`'¯±¹šÅæŠÜbsu_­/Ÿ[XWøvc{tÛÉ蚆l©Ë®1¤¹:_#»-Y1:ÙwMÔ]eZ‰Ì—rÌ—4=zÂìb4œ^bò6ïŸHœ‰#„áþÖÀd ܺöä[»¯ò·g!ð œ^Ÿ7¬g×½Ö7¬í_ùÂ{½7ÿŸ«!ÉððäÇrøU¹@ÝÇÒ«o‰Ëå6L7@õɰ)0‹Z43“ßÊÖe“±áÚ}¾¸Þ}ŠïçÄÕðSM]ܺöî[»ÏËv0“Òwz‘ ɲöá“ùaˆ"p^2|v¡Ì‹ ßP%HiØSé»éOÃÃv ì>‚Ëì—ÙS+:½ Η!®Fo'ÜÉW¤KÙä«!ÌD¾ªð%XXY¿üáŸ{Hl²Ë` Ñ[g^‹ñ˜¼hM5Àš›(ÙNÿbÝ×èo>]ºáÐÇ'²½®~f¤E1áƒxSFÆr.±–x.œ^ƒ7ì{Ãÿ¿À?àˆoX¤àzÕ“)x¿2Ä)o妪 Ìo/èù…ºOE¨â”"U-AÐú½áƒH+J !†û'SðÄ©p^òc©âºá”áÀ€ýå÷èH[å'øæXR„»ò2²*wÍÔ †É§ N\ðËzLàGO”ç„'ð+1Ô‡ °|p¹VÄ{ú{Ãé!Ýùq¹Nx¿’ÉiÒG†÷?Œ„ >pf¿"¤°áeû}~$šqSØ|‰Ñß7EMN¸!ðEÛ@¦2ü†úÞ£?œ­þùÈðÁeªŒ lÌ=úÑ&àÈÎÊ2¹mìh‰ý½©OÂm7@W]±Ã·Ä!,‘ÞŸktÛ-%ÒÖ®f >0¨Û£Û´kx4ÚÕGn›7¹-Ÿ+’£›¼t'Üë{•©u+H—]𑘊l„„èÒC!jôÌÌ›@fÁ‚§Èd—4>òèôE,žñ|gÜÞ#àÆCš]öA®&9ß(‹Œ¿#E´ï“ñ—È;a•31ºÉG˜ƒ"$Þ?/­;F,è\nã&¿÷“e™¥—h,/xåŽ mÐÿ†³k‡é{ò÷ÚU2ß õ†×Àµ*DÉ Žb©Y1y¬vÅÐYNhŽÓêáºKWD»¹à=³™Æ¡ËpãöF!`Ž6„)È{ô7çò€‹½yztLøHMÿè à™ Ä·'ÿfãŽ/}7©þ3yaã¢oãä %¸q³¹@æ6•v.8µqñ_ì–\“Çû#f…£Ò³ð”1!ÙÌ® O$"&/EµFÐÀG¬j¥ÿ½áÂedM-&á–ioe…ŽªÍ$Ë5 9ºr¼¼ò¤… øunT²ÝzL.xánÕR\üÝñ%&U„hw Ö9J);‚ ŸvÇà®/|H‡k{e"b¸vñ‚÷1ØGlVL/QtÖ@ËyÂce/¹¡€ÒÔKü“‡,ó ç€æøOé…+â†.ÕKð„®BCøBš6J9ùœ5›•ø¡ß~ÔÚã7Þ¤)©–èóÉ$©Ù’0Ǭ:‹Å7Ç"«Ú¤ÝöFɇé¨Éo8ËB1° ‰!¼? €,s £Ü¿·Íö¾­"Ãm¹'Üû—S÷ɦJ n‘vjM±È¦&µ&'W·¤œøìâõ`+ŠÑmq‹dÉ.ŽÄ-²ÜsÒ §ÊÕå*à=:ùE3 [êÉnø(Ü=Ž ÷èo$˜€Ã3.²0Wðy6©‡?ã>ZaM•"ŽupN.=”“¨‡P`('ƒpÑÑõ §wñC–½œkÏ$à0ö•-6L¾á6EŸ}¹1ÙUkŸEvç‘=áÔñËÿb?Ê5º-ö%Ò>»×Ì7ÝpÎøü3yö•2â?\F#éYaÃ$°Äm„TËáïèüè'OÈfåd³o¸dÜ×Úy³üÀSLt0!Oo†OwNKð‡K(žp‘tzÜ>Žãê^pŽñ÷Ϫþbíé†Cµ[ä SDKœpw¹‡Šœ3Â<^“†»e°çGóª+ÃeˆüâÄÁ:F¯Ûû0ºM,xÏécØ÷êâ§Ì2¿8^{õffåÁ/nÑ›"õ7±#çägà®~Xî³ÔÚg n?‘ú;B¥_yæÉoTWriínÑÚhm sx’á콆³°jvi®š}šËg.Nð;ýg¦ô¢|äê³ kÑX=ÕÅ‚´à¥s÷Œíoæp½Õó½áVQU*B² kFOû*­õ˜ç›A8´ND~qBÑox"kBä]ì>-Ø}Z°k^ð"=9–Š7œøQöA!~qEYys‘-8ýÄûH 8mûߺAµG£Æš!ÉûÁ&ÙY8ƒfÂAv~Ùù*ð,󀧆–8£ƒ™£š­(jó€GŽ›ôM;à/„ Ýpè˳Јo8xÁ£æA#Þ šш¿²°(Å n|C,ä»Ë‚ ·~!ƒ5ö½álI#ý¸þ g×>P˜|˜wƒ!‹IÌׯDr€€êZï¥û¹¥*2æ6W¹MÑ«¼t"%9µÄpÁm}æ¼sÕ<‚¢o*E/RT*lݰDbô7‚JÀñ.Ÿ›î°–8‡û Î6D5wÑ—)f¡ÿÞpjíQlH¸àD9¨F‚»*©½×öÔá´E“Ú7u¸IÕö QµÝÕ/ÔáL7zÒgpnSµ]E!Ð]]YòÁεçD‡tÃy¦$¨ªú;ø‚³ž†Ì.x/å6A<âÇ%«©@ôÁäÍÜ&½:&œvý×è%+F7^F]å³o8íú·¶BIŸÝb5p¬­šïÎiü\`(¶¹èÂIfìW[}Mþ.qW“¦º²ºO:eýøà•Õß[$_bòF‹DtnÁÛ„Ó.0ÆgïÑßœñták@æåŽH .^îšÕ.°C:Æv Ãu=€ L‘áqÀA†Ç°°FÅ N”+~¹´C†Æò ±¬…Ô§Œ`“€ O·q¬¿Äèo¤ãÝã:à>B‘“8ˆÏ‡á5ã#>Ï"sy{à±.âöÂc]\‘¡n‰ pt|Ô±}n\LJ bâsÓPYÃG1Vf\Ñ«ÇÎðÐ'ãš¼Q†`fÜúU÷©žõóåDƒøÜd^¨\vÃR™.8ñ"ž¹¨€a ߇b‰åy¡u5â[ðšõÝʾ7œeº…ÉKå`Z7X'åÑ=ËS}_¨Né(óbn2/N¸ÁD=á|òRyšOñM÷Ý“¹Ì@ǯñ§¨P|÷]i×ÊC\p:†va*¢TDºá¦ô®"ò± êqHž¼½?,ƒ ‰×G†ï5™ÎUÝ,8å¾ã*·>7œ^¢x5Mj[ >“-ð a¬cî\¢œÚ†¶7hRÛJ0XfßþÊÿîÑßì"‡·”ÌÇŽ|ì ε ”š³G'Z3Fnã ‡jÌB»~.qši™í‰’ËöèÆ]ôÙYÎ:ùèÈÎo8ðqÔ¬Ýâ';àÕ·q² ªˆê›|óMÞåœ*4õ“D÷äÉí•…¶©TO÷‰vÞ½Âöº:—0|·ßâM7Y'ah®/=zéÑaŽÄg»&"Ý]Ž%×ñ›ðö˜ö'ºšÍ”è³;&¼…ªVúß{ô7GMÞ¸v…G¨Éó;¶ß7ÞÖ2o:ª*\púá*™ìûò>ScÂ'™‚ktÛ›%jRªJ¬>(w©ƒ'£ª´vómC½ýpf&9Ÿû—ØTKì¾mèï½ýç»Á¸!&%møvq†¥B0mƒÏ{‘|†ƒ‚ß©ðô¸NYRœ’«Ý‚ÓY¦¬Sÿ7œòð+ü;kò6 NÒÐ’,FH¸àFÿâ7ñòüÜpãU˜,{ñ†G&Í¿“¡•24†’Ú}Áßø%HxฬjTLn–ÈàŽý"ƒ;dcÛ£›¥´ê+y«€¥Š£p:×ßïÏ÷† KL>L‚­.,1±Küh–˜T§ÌÅRµà©ñ¹ÉM†SŠD³Ä¬Z¢dÐ`kyÂÙÈÎhÈ™°™ÖmK„Íú•h·`A峬y}~Ã…m »wòù› /Fuì{tRmËšÀgÔºOSûò˜&œŠâM8p‡Õm,°©@IÝèrùÉéÈÛoøÈ|O¡QÚã›¼È #F¿áìKA.Wï½Ò\ÔC CðËgß—Ï*áòžZ‚ »DÖnªlh‘–›Žü†ÓAy‰uªÇú1èöæ+Ïj¾,냯Ûbž·fØ^Ž—(g%!Wmë‚§—öá^£KTD²Z׸j›Ï:9·cZA ¾]š]ì¾\ìÎ7IÑÒþ¸ôPWU’w_.ö„m̃ջX¾Ð‚§¬¾Œ¸Â†i2¼r]œ Eê‚SÏПÑS–á“O‚“h‰¢÷È×MoÜ5:–s±î :ãzv=ñ6ܶĬZ¢dQöj¸àFㆧlÑC¾dž.ÅfÊ@†R.†©¾µû,®°tŠ Þ,FŲÓ}•äN÷å%vßövÁ)|¡®úB"•6´•6õoQ~LÍä©¡0%‡Ï‚šp6“k®ñ¸”óPƒ|$٠ξÇ냸xǶq‰*.žá  Cc“sŽÑ¥ƒ‡¡¨ý}&:†j >e“Yë5 1:Ö0"5v&Œ,Záð I&ÐÈ}¡ì2⇯rþ`£¶\±ÜrÅb2ëõ+›á„£X_–áèŠø‹Ó{À}Ô°øŠ"·MÞg hM¶Ç†ë¯†/1y¼DŸhø¼@c¸ì·¡Ih©Ë†Ypà¦n hËíWerç^Ç Ž&e8+Áô­zÃmk3Š\{ô<›¸åøÕG“éR9£8¡%®ŒâúÑ>¾7<<µp‘,þq°á¦Êß*R@ kŸÅòo*o8›M-loæ?]P|:—ճ૕B'}oø«ÉpSžô 7TþV 7t£¯Ðã…•¿{ôûÓ}5ŸNÓœ£úÈë#ÑÑû~nŠoŸð~Õ}KüÓÕpòàM«÷…¸õ ßÚg§Ü‡}$\Ãpø‰É›RÁkðc‹Ü9˾O8]*žŒ q(U¹ó‚³§—Ú^btÛö†è›|ö¬àêˆQƒÂU„FÿW®ìŸp}n¸ñV Éu«ŠLͰÑû‚Ó¾Q©„ìºCþϬÝTyU}<Ñ Îú(2*ë[pº¾Q>2.Þ¤*òDÃNv ÎRÁD¤=:±DÅ$TôY¿j¾íýS¤z°IGË•ã3Ƃʓ٤Q·‰g1"Äû½á-Óðcaø¤cˆ·5z„á2DÃðþÁK‡\~›˜´o¸ñOøh&ƒ$ºÉ«†I;ËðW¦à |÷¤z|DÜ'ܺnÌ(Ñe¶Äè2[bt™-1ù>ÝŒlÖl¹×bri®èJ¢?á†[5fß§›Ær-&¥’}kW˜«Hæ‹àƒŒ‰ n ©U‹x ›,*4¢+¬Šôâøå`&zÙÇæûòÝ'óÝõ@Œ®L­5ÁÌåL-ô˜™pº°TŒ(D>ÕJ‰Ã¡ŽˆÃåºîn:>Jð“HÂM'#ùlåÉ Ü6yŸ$+€ˆðžûž|b㻇“tãÐ|Ê‚ ƒuRÒä~×$WÁ7t¬W|å–³ §ãÀ¢¥²áµYTZÑøgRõ Ád‹äb¡Øû¶EÁò4ytã#)ù"}©ÉÏ´½¼oê«Y{ó­]4H`jK’Rljɉѓ÷ÅðÒð}yW’š}A¸,õ(¡«ÂÃûàkû› Çj7û‚pyuX–ÇñAžÝ ×bÖ”ð×ì*á_ð7aäs‰Ñp5“ÇKL¾]Tø(¤%•¤eß6H,ÕD7©sŽÙ¥H²Ê†ñqY/8«/°¦Îŧì|æ…È&MG‹o¸m|æ…ŒzÃߨ1bt£é d¶„e‹Á'ó%&oÜ^¹ÊßTË<“v“6—"%ª4Ë­ø²¯Õò ¿ë¹D©°MØ^_ÂOñ%ü,f¾äNÞ繩>£iÂßÔpDþÛe8VPUaZ5ÎÒò@éz3wƒvõ‘3×*UÚC²” È™?Üþ|‰ÉCó¯ú|29³%‚_“aŽÑ}fK5˜-$œ÷G¡ýɪóãËfžð̽)…%.ㆧ]FK,ª%ÊIËÈð®Ux6CF–=úØ‿à}uW_63¢sþÛ¡QQp›†i* £°NЖË™!’×Z¾äT™*>jèZ‡¸DxG×%×|FH{Þ¿¨Ñ“÷ynZp}ù„€6­®É×îKti¾dÛ 7] MC˜X›/fQCÛ2Jš"à„–¨ 85Ÿ ÓVÒÌ‹71ºÍk¾t˜ ¤›(×jSC_]½5ù,M¶;g Uá`‡_ã‹¥TÂÅ羪Öî %5Cîë9ùf˜ü÷¥š4)Õ„ÇnÊðk¾T“6Þ?¸¾€¿øò{tó‚ƒëÙÚ]•+Ò}¹"Ý+rÎÑG’Ó}Y ÝÀrsN^å2ð±×îst_ŽjϾÉç÷Šïœ|véŽîst_¨bÂÙຠ\*g€Ÿ¸v9T,Š^}û#Ç9´‚Ù†€( ó­4 Ј`øÐ0¾üŽEñkÔ®Ý'Áݧ;|Wwâäáþ¨èñdŠ_Åžp6Šiã,rš¸ø‚CôQüÖ\24áD¾«fGPí¢ïi?ä–ghà¦JŠ¡zÚŸ±™|m»h &àÂeJ<ôÀr[Gt¬Ñgq{,Å">"àç=7 ‘÷L8‘-¨aº® ÕǼà‘/Bw䨾ӫé]‡Ï°˜|«)r=¤Ja‰ª¸…H<ˆÉßp‚€pHY£?ÍâÛ iTå¸ ê†‹™¬ýAkß]¸”Ð0ë€ÛÖ8íd"Óf!Þ×6Cð“#žZÕ5ú›l§HÁ·ö¬X;AU1ö¯‚ï ,þ‹=2×è|ýÁõ)¸)¬‰,ÆD Àsxã¿'ƒ Úû£¿9÷èÔ3w2ò†»L¶)Qê¨öbn\; ä“™.Û“}kÿÓÛûrì¼'¶4ʼ‹¢¤ùèœ S­½øö½ød¾úÖ^E!\û0œÂˤúö½ò—Éñ+ɤ÷ý7œ}ÈõµBc¥ã«‘ކ´Âú•h v¸Äi v–µì©`‰Ë¼íËšz4p‹5ÕMûÑf!A>¿ÐlŽÞ˜÷@- _9õÕ ï^¤àà˜ŸY9á92—gEDç{ô'ƒ" .⼞À¯Ä>íÐ.œð!ú o#*௠c^$ ž9»½xô WœÂÅg‰6°öe•>Õ`„è.±é©~ÃÏþÒ÷è¤þû‡ þJêÒ ‡ÊY$“&²ƒ¿ñ‚÷‡ax ØlÎ%fÃýCÀmv»… úœ|Þª‚h×ÍrÀ-¯ùŽt‡háF¸½+ýšm^ÏÏJƒ Áò+ŠÉ'ÃåÆl´æˆ_´Èl Íõ² *Û5tßùôë¯F·[ª»2Oœ3³nÌæcƒ^ðεÖî*k"Óò HÞn8=â³5ˆÑm+B?äú•¥8,^pv‰£æ¢nIöhX|ǯ\%dþ– \_‘g#ä[‚íã}¿˜Ý†šT¸aRáõ+Ÿ_/ºH›;¸EŸc.ò­.…¿\¿vbtïÚñöúÜwQî¶ ·×ç ŠG‡úm™Oçž& ·e˜7‘ 8aålHÒþRpK†y‹évÑ“vG–á¶’ª˜‹U÷ÚøÏ¬ÝDƒßDÞäÔÐk>)ªÑ†<ºñÓ¥Gc$C‰ã9žEg|¡à:)¸¤CCÎ ,>»òÝ9y£hËŽ*@ÐR ú z·sº'Íþ䳦&œ~6‹…ŠÂ¹¥â›£Áê9ŸÏêIÐêù2Zª¾µƒ~ šµûÌ!‘]Y8?m:ª˜¶(Ò&J–µo_O4XS©©ŽŸ+9¿%ÐB®-Û£¿Y"Ç—§Ï¥“¤÷‚ v‰ªûgh–(ò9S)F7œþâ.®Ñßìb¼áð(ûøœÜFY}ÀÙôÄe¸ð!\•| Žü®h]­W[vÕÝ·ÍÔüp¼"M·NÞg„ˆÎ8ª p†çó‰ÜÎøÕ=átº$àD‘ê`¹šŸ65ô‚§Ê§è5Åè¶«!WÕÕ Æ«býÈp6ÖMoÜ5:gQk7ÜRȾ@VîⱆעŸ¹GN¯hÜxz‡xó?ÀDpš¢^þBÃõ…|Ò ú‡ µë#n>égÓß°ê)’=ƒ=B›@Úd·U¬DßZJÝ¢œ'¼W–,*àÖ/䳦ŠdM kO®‹©$ÕöХޔ·’ßU¬Ñ‰$ÍáÏ®‹I$ÆašÍýx„¸É±à£†^ðÌeÞâ+§Tqß›bt£ÁXÙ?À=áD^©Jêšoò>_Oé‚#_ö¥û”ŠÊ×£àv†÷ÚàµBT,à뉊ƒ54»ê"TZðž›Z%V ¡R«>gM•œ5ø˜Ôà²ÌªÏ S%B%aò>7Lõ5‰þ\Pe}À-dR{òPø(œÛAáÌ©1ä•Wq07‘ƒ;d7‰2ÿ,+@ŠoŠêŒûCU õ‚J7ª²àsÃ…%6Ÿ&¨–Ikª9ú|NóÊÿ—©’‘û®ö÷’ö½áÂ}œ G^º"à ]UÃÁÔdFe襛pP‘‚Ò6£²žÐüðÒ5 Sk>›àà]Ά]lÁ¥›*€ã£Wn-Šú½Ú›‹ƒ©µ¨Z¢Ï¾˜p£S¦ù싦²/|ôÊ ŽL¨¦ÛvQež4_p3dÓp‹FmEµD‘ª¹?üE‘ ¯\Ü£n̼ÒP5£Ü ™v_Üp›7Õöú|Mòe`ësÂmŒ~{òx‰>³§YZDDn²ìšÊìÉ¡iGÌo8í•ùÐLtœ²nÄSæcn89dRãæcn"ktHÈîï<)‘ÆO ’NÓ,|7ܶv‹ “.ø›ö2ÇÉð±Q7 u“á€!²cÝUæE÷åËöâ;;¼aúÀ¾ðF—ü°ƒÛ‚ÓÏnyT~n°Î96ÃÍBÁÙ)p‰*û ËµD¨(¤w߻ì‘[P'|´fñ¬ÑMMÐx³X¸Ã—ú1×ön¸I‚‡*†2‚늜Մ…KÂmKÔpV·a)í¹áoÊš¨Ñ߈àO¾ýI>L¾ýQyBd6jø†Ö°Q' œ«D‡oèÍFmÓ0åýöžXbÁ6Ì(>ÙTØ0E†# ´öª.Ù§·ño¿(v€?à)[ΦóE¾ØÌpõ±\p‚¸\µDUlf ß ½©Î%Z¬ˆ5z\©ýy<û³G7N^´PK³.R*Ãã·G'ÉDþ®Š'‚èÆ>è+£?|7lvŽÔèx’O†\­­úÁp\,2$:jD2”y/|Í,8ûÖ…½P÷äkwÅ@Å#› ç»hbÙ,ªóS}K¬¾%JÝ.QUKl¾%69’Õ4pÞ GKlª%ººa/ø*'àC†¿iXLMþÍ!=à–®7½@¢bt²kÎGÈ•<à/Ö¾¯¯àòq,82âlbþÞõ+W dÁY ª´½:µ#%4I=øŒ %uÛ 2B‚Ï™pºCÒ‡,‚9¿£Ï¹f N¾ó /CúùÀLÞUÉqÂø•ÂÖh2œú?GÙYa;ªA‡ê®Yïñ$µ/âKŒNî¢,\ HVæî>¶×.²½V ZpÔã‚O×TºC6/î’‰>Æ=GlvÃö¦Ž©dEÁ ó ýÀW/Þ;Ð’‘‚†%pU9aSÜ=*¬ˆ*ÃmKqÂÊÜE'¼€_¹(e»H) [uìÑmÊY$‹¥d3^ðÁÝüŠ{NðEj¤#*¼¨=ºÒ5:¢”²}ࣔí&²ØtÃßH1ú›Û/Sð ~U|Kä³=~rº#cñ}!™Êþ§þ”ª¾¡ 8âTîÑ)‰7ü Ùù7 ™¡«k®DÍŽH]“XйG¿'¯Ò®®èÆ‚ç‡%i@î‡8 _~ž×¹Lp.WÏ[ròé1|ùcò–ì‡Κl•¨‹„©DÒÌ÷†¿Ú¸î*#YpÚ°í™]GF¤,…•L Î$—_®ˆgpISÀ¡JK¾;}Ââ”}ZÁ•›¹à•«Ä*-ŸV‹:FBÂ%qG ¬ÒÖeÏ!Oú†›.Òä‹tL8õÔUD&|õûÕx n¸U#ŠÙœ¨aWORµ,h9à|”§É£ K¾í]E®É¤ô‡Kég_¨"KN¬T²Ô·ïOVE:ü£èL8jèÙ£sŒ?°í€7‹#úÒ­ ²ÏlYô¥m|´W7ÇHöù²¡ôãœcrÝ~&–Ò|ãK†¬Zpú‹VÏ„w¾ÂJpQI‡"ÒÂ4ÙRµyÌÑk˜púY&Ëf3LþÝwCçïËËY㣀sì`ÉC£]‹ï5_@É‚ÌzÓ‹¦d¡Ëœ–©!(<ÅÙ†ŠrûAJ9 #DJ)w}?áÀW*sZ¦Š–Ê.^‘ ¿<ËP˜â¢¦ê2§eBOûƒÓ’Ž5-@H8OË…Ö=))’].†zòëê¾zq¯ð#¶Ê,¶Ôì"[eðXö?/Â6NuE–7ÎÕO÷„["ôÓ=~¥°;@ˆwSb>\.iêàWƒÞ$à0’+gbšÞ‹Â¸ Á—y,2Ô|ŠÏ9x7™óƒßLШk9n=?Ÿõ+1A#!¬ áŒj˜á3@‚Æþ•†¶ûÔ…h<·ÛAË={› ÎD=„µMd¦lÄï GÇxï6Ól †NSyïDBÙá.Î䡯’ÚÝÞ‡xN,‘åéÜ–ŠLPÌeQņ²š6ß~Ã[ÍÜÚ)¿ö5ù7Û{|:ƒ•vŽ>\®Ç ï\é9~ú­ÉßkW]öšÖɽ⪇lNx*Å¢]»Ïë>ÇÚ„·§« ŸÉÔ¥ÙS™½·hútª¤$‘ç6Fd®.øýÔýFÙ\]ð§pX¸Äˆž)ëW’i•2* ™pj¯¹;òKŒn”àì;~Yðà¸ÐÁ†,"˜]ÏH Mî÷†S7K” úM“kºY,4¹ßÎúôV=Õu5t•ÕÓ›ošËù×› ]ÙôÅ,Eþ\J#† ntþpúX÷ ¥cMõ±¨]U¶H¿Kv¾7¢o{£ Û;Œæo^^“nQµ½²? ùŸ‡Áu~àdXbºá0çLdï­°°zdö*ÚôÍÞ¹¨{òèÆ|»¡¢årbºfF‘/9Ò¾9~{°¨±‚äü#ñ‚ðÌÁ øtÕ§ÃðcEP&|p%®&ÓŒÊ~y•†QY2¿ñ@¯ã!Yi@Ù”ˆ …ãç³8x[è‘Ï/ô¯•©®o¥¡/Ô ŠRá7¼61~à®ñ^hØ•‘œÑAo€aPPkòCî̿OÇó*âud¸M»ŽGaþ%N‹à}yDl¸G£ â G‡thؕѣ aJÏÛ>ÞÛãqÕ"œð~•<ÇoÁY!ˆ¨æsÁ»É›YÚb€íµã3îê•9¾W¦Â‚:àlavUÀ­*Âå¾T‘ZûÈ£óTÑÀ­¦¨4Lõ}¡xImåQ¯¯>¸’xáTs÷„#%Ú|_H4‘û{öëùÓG1ù»*é£ùÀzÊ!²_–s.Ú~»F7½6ÜôF;áú7Ú¾ëk—µvíö~ ¸íüˆì×5# *<¼ƒF!ÚÎÞ½0´¹'ÿFlÒ G>Ž‚k{Ã2Q9ÒgôA¢Èê ©ž\o )÷9:°]20+Z{œOÇò1œŒà³]-dßçèI°Û±Ùu´»=$ŸVHš[5dßú×–?ïS{tÛµ²æZ ®î% Î’ûÁÌG©èŸ$ì}IÀÁåªïÿÀSÈÃË&TÁs©ÆöämfKÐ88‡È^¡y>ál|a‘NÐ_hŸÙPÒ{Àm7tSÝЮÎ- ÎRHŠrÀmšºûiWijŸ‰†xL rš¨Ã§‡†FÉüí¢,xåÒ ð]6áÄYT$¡ìÉÛNYTÙÁÑ©Qj”K´"à4Ëû_=ôhà&T”ùdàöJJh¸ZÃ|‰ÉÛìà}¸šcDŸs7J x!àç« rŽšþ½# O¸-‰ë„³ÎÝ®˜¼ÍC5µÍ#úÌh™»±ïÑŸ-‡¿hÌ´èjß³àÈI`‰Õ·D•%›o›äJÇwd“ýÌèþi.#DïŸd8ë ÈJpgo€F:ºA:â Çg|ø¤cÈj¬ià,ïXE_h¸ÎOróŽ£€¡ätNq{Ó£Ù^¹SÀ™|#Ão8ìÀî`:Iè×ôœ¢ðÈ¢«+o8‡Žòèø¥\ ܇Þ]ªi‰*cNÓu Éðü† ü†y+šK.¹ªˆGò™in $§]ELWÎ H÷ä*\eå%Ÿ•—¤|La{}±r_kƒ·ÞRMØ^¢:™š¼Q…Kö[…Ê gãœ8Š7ás û³EϯçÁ‚óQ¼ ×>Ä}‡kw•ÐŒlÈŽ<&Ÿ¥ìHœ¦h™€n¬ìjë8²«kô‚ƒ')r,ä`°J 8^¢dsn[^3Û—1¯bÉZˆµÇn;Ö¦& á‚£50Ærò‰¶/@} ‘N„ \П›³lªƒ×Èîa;Yu2|¶\ókþÈp"r­QúÙ¹L´N¾òÑ™ÎfN~ñ•«&#w±H(µ&ó¬šWN–2…Ð\‹Ü4ÏñÜ}@Êhć¼Y£E=jj£‡ØP²D;#ØFCpJ gÜgØŸËmÂÓÃwo,2|„Âê·$Ãñö_ĵX\nñ\‰xH‹ÊgV öÛ¹Äi¿u¦:¬¡ ÷çkÓJRŒþê ¥}ñÅOQ;öïÑKLª%*Œ9à.™ÕÔª³èb—ÅBÛ|ÃS–÷iYä4l¿H”ÀV »½š‹¸¨ÊSŠ/Åïh»¡ })8×cÑÒíÉ¿9ÜWxRš ÚØ£ZVÈ´™n)_È´tßÚ¥~ ý'¼6>3´+&o¼ýT!S±a¾s¬ƒ†­ž à¯?‡B éÇ‘d8Nù¹à`ÄG;ÖDUŒn4Q5ý8€¹jð¬ià‘åk¨1Ƶ Õ3á¬Ã¿ § 0Ú1GMþh§Í±”þÎv#ªæ§Ó&eÑöùߪ¯ôcÂsì«§Jþ7aí¾(iõyÖj‘îtX²ú|€Ta¤|žµjhÝú½áà5³btÛUUYnb?ŽZQH¡J|‚D¤ð{ÃãÕ[ì~6ŧª·¨¾z‹Ú³×[lx`}À1W-†Ý>Å7„ÃO´À%àDƒ=•âóbˆý8ˆæ‚ܘ6á(5&Ép£ÒoÁ¥øšTÆ;:*tnÁ%´MK•ûfRX/Fg\IáÈ®˜¼Í“Ñ¢æ½Ö¾8`Ð7É'H°ÏdÛc@&Ô ç p£sexí®Öº£•÷§÷œüô²eKÏ÷=úÓ³Á‰Ú|þ³ /U_"KÀAbuÏ2\PP¾Ì´&Õ¸Ò°ktà%È 8^b÷‰`ïǧF7Š /ƒ¬É¹ý(‹êhP‘ ·_÷E »ÅlI¼„ w®X¿ ¾%ú"…}%ç×AE Ç ¾ìúå@I—ááÉͲDUv½Üa&³õľ-4);=‰Š> ·'—†±4¨8¥ÃÇp×!D´½Yst_¤pÂSKêW÷÷†×Á¥¼ÁPy/¬'ý«QcEuÆ}–N—k(ÑmÂY—õ€,oG¯ Ó-Õ|ÒѦtð¯/´?R QPí½tPkÇÒÑ}*Bv;Á „· 4¾Çî³ º"U ‰¶Å‚ÚŸnø,¨ñ¸¾üX$q3/BáÆ>ú·Õa›p–þ›ýcv±ŒÏ¡éý5FôIGã!È«8¤²Ia‰Q£z†ÂñôÛH¾ YfØã=’ëbÙwf ®1c‡üÕ#û4WqÝC"žÀjwW¸kŸæòYS^›[‰ž£ŠBѧ[ÖT³ødFUi.±ßj€K”š?ç²ùÎ¥Ïݧ7U êÃgõŒ!éÈ]·û2ÄlYâ—XMû…&ÃùpqãÓlŽÑÙT`‰“?¿’M Þ}·átˆKˆ£[ŽIyu²á4»…ð,;à¤MÞ…uRž'ù–¨¨äË2\؆ì›cvx(ÿgNèrLþÍE|Œî1B6ܤ©ÑñþHÆŠnx~ Ωct~‰PEð<¬ª/TQpqýªù}cŸbK  iêNÙù<_uß!Dªìo¸)¾ýø{šÐÀ øB"ÕxÁGÜUeh»qÊëÁ‡ß1XÒgùî‰ÒPjô7KŒ7äq”GCéŸeø®¾s‰]âG³DXX÷ÁÍ–Ê¢K-N~¶ã BÙp@çÉ¿ É¿ùt‡lú ¥Þ{8Ý-ITAeg‰œüD€€€›ºl8+ô±¾&oÉÑûWØYht‰ò`4þµyŒþF6 ¸¥‡Íxõ‰võ‰övö$˾{x­þ·Üü¿æûÀÍ÷)Jè7ßî¾;c‘gÒç6ÜÄlxLþE‘n8´¯5û…Ÿ†!œŸÑ"R=çz†KõÄÇu2" ØŠ²hÇÇ%ÚÜ¢;8Ð1¸ÎO\1ÄAÀxn;1h€Ì_‘Ý¥NQؤŽÑõjˆÑeRpðj0áßpÖKGSÜ_£ÛTDô¹ïGýÜ^> ~ŒnÜ^GýŸ_ß!-üË&þ‹uü\£?½^6ˆ£þø•‡½tÃYÿ¢á?F³DŽõyó-± — é£ßKÔ8hbS-Ñ祋]Xb¿;ÞŸ‚ºÌ©ÊÒyVÅäñ‡¾]Œ¥é_ìþ\£Ûž¡2ü@WáAÏêJ`%åA•G·®Ýgé$P&—e÷ÐAónQ¢)º¤î p·<ñï[ ÐÚ£K»&Ÿk,I¹çtÕæ5ú½o8–MŸ “²o{³°½øfIÙ·½Ys³$_ rÂYVUAsIþ7¬µ“‡ÙàÜç@™Ýû@/ø5:HÔ¬ŠÉãc"§; t1Iý{°gÂYâ A·[L«t᜺ïHPáŒwßïª3î3­Ò¬G@™xŒn3“*‚™})Y™Ï7_oð…òãÔüh5—¶ÊA~怌® g3†šn”óì3Ó²ìjâ)Ñm¦JV üù•%ßü†£ÄǤýÍó %ù~•}‡tFóPûDWìAÁÞ /DÁ~üªø) ŠšŽñ&ÃöÈ¡ž*JLÍU8eÔÆÅ{ô{‰ªSVU§ÌÒË|HO®ÉÚpšTÞ^ëÀŸ_) š"ÃAY 2h6 ú‹SFÀ± J Q0û½áo2h8›œÙ“·¹[Š/ôV—¯ÑWT^;·)(‘½öü‘áÔÆ)L ¢¨¬k2ܘÎY¢áXÇ n¢P;F·k £ùquOøªk»õf¨ŠÑ“Dz)7ð¥]|á²’]—gQ…ˊϸ)|eÝ'*Îϸ)ɉ<öSwº:L%D‚¿ØŸ|á}]|éê›yüE8ó†óáæ§wytl…Ÿ·f1„G†PP¸¶qÓ-ŠÄç‡)CpÆÑ¼À×è JÔp¸Äê³N*û»?5°D‘û§”Ôǰ½{ª/6ီù *o|ǯÍñ«>?L•Ãeèøß–ãW}ñ.‘¼»”?áoÚv|‰É“‡T–M_ ¬f)ÔÑ2:—³Åñ‹lf•êñE²ŽîÌ8ò‘V‹oD×K@/›Z}KÊå0Ëçàè6K‹O&]pC÷ZU9Uª/gÂskzçî §Šò½Ö}÷šèm/› ¯Ã@‡³átQüG Anúìçr WóÙ3íq)‘ÿï{{\:©—BmŠ’9páü×¥Ò|–J‹Ò…cžÎÇt.,1ù–(æï䎖¨8u.,Ñ1j"@Fiynbâ:&϶¯Ç_(k,òæóÉ4)ÎóHtytA|)ÌnLQÚdØ69¯ª%úÂRM2oÓ†ÓtZóɹÊñ#siÃ Û OAß}è{ÃŽ…Ö}ñðIÇðñá;ã*¿‘‰°;^pÄÜåÑiJQ‚5„Ýåé>sj‰îÅ5¶ù¾MIª]ô]]¢…DrŽÑ9ÿõŸ%/ÑÓ›wÃßä°P£ß+Ñä°¸·7¥EÒ³aòÜgé,.íª§+"àìÆµ‚è¤4\ÚH6‹JÃø ¥^åíEs¬¾íõ™@½ 7@Ëé©…öÎöfXûñå}Q-‘æ¿ä6Í5ŸÓ1p¼½’ Óx~@Î —ƒ|~¡ÁGTKuø|E"e6åc÷è¶ã7|ÖÉ„1/«o8½ âù騱÷|DáËã{mÃZ·£ ûcqö¤ º]ÄG1ú›ý9à¾èÓÈ‚µ¸½ÓÓÊDz?Ys÷Ÿu2$?Œ°D‰/Sʾ]cŒ¢R¾j«¡°NÐ!ýÁ J!>ãFdÆÞ‹ OÁ>bZH…:šO9‹ÆMCᣃ´šËJBéÌ£û4—d¶äEFÇιáì”5¶á=^´ˆÍze…Çe¶,xìllÐ íÑŸaó„”NÉ’íðH©@´@\£›’èOx¿rظ&w£€‡Ñý‰\µ?à¥TÐ䋇à3ƒ‚^©Ëðñ°ÔÔèþ Ñ'CÉÐG =áüJ2QÈžc¢–’‘'Á± œü5FÀñ6ˆ†lFŠ~‰°ûWqÉ…,~¡d¸ñu,²£\?2œÖC´êù£ó)e(&ÿF:Ò GUµAäP/Äý/øàGVG1ú UßöV—óCCoÞ}Ð|§·ýg&ÿÆssÀe§$Ô› Ö§¤%·Åw¯&âd~ò„¼Kÿ]ÉïѧwhNote-xÉÓí|à¸H£¸æá9¢Åó¹½"ÁxHÈøŒá½[€÷”9é¸:gpãã-Fß¾O³²šœS›yÜôúò1óxˆ>×e”ÚÞôŠÞ§ž²A¿Å¤ñmùøÉ™AˆÕ·½• K)ºs,øxx÷ÃG7>eFsÂo/8ˆ+!×åf4†iP1š‡Ø} ª‹žÀ·G'wQ>½]uz‡o‰³ð13þQH/6!:〱£Ã? _hŸ^‘=%[9Íé;²ÃgÙ'¬G§7iòùC²dÌå Ž |ln øxσÈ{Žƒ# Þs¸?¾à¯÷|Ácå’qrª$Ñ´‚ÊyÓ¦×fùt*ÓJ¤MÇÁ‘ƒ6=ª*7œ ŽÀL¯=ù7×±v,CÅ'CÅI…u;}n§T º€Ã >ùBÏ©²žiMpñàfg£C†í7‘u=æü‘á¶R¯äZ†d8QΩÒ0> ³®§ö‘á#w‹gz³®³åÈ3ºAä}[>Òö§ý×ÿ†Gà Iç"4¤íA&moèš™p¤"€ÿzÂÇÓÔO¼/1y›ŠÙÜRTƒFùy èØ5g :ã›u=rM"‘zÃM‡‘¶¿ò¹Ù&¼Æ è~¡I‹zû™ç‚»˜ƒfýJ´S@sÌ.?ó„þFEÛ=yÛ;ßÄæž.8HB†l..C6!+r¾cã„Ó‚J;©Ñß,1ßpèI”9ßÉóó>øò¡RÁXöÐ]à˜¸%Ö ÷ùɲä'£¦îÑm/íž8pç3&œuã0Ϧyg³…O§*¾(¾&`sÿÊœ¡{ô{% S†) ?ˆÔOx÷TÀݬëÔf‰6L ȃu:ûJz€æÚœïK0lQóå÷åY ýpεón¶Ÿ‚Jè=ßpî…H™kò¶ÇÁY$"ãühÈ 4á”tüXA3úèW}!Èn&Þ¥øôæô¿5¦KOèåY¤ÆÏøj(Eu5øhE¬Ý€>¨MX¯ß^ Ž/æ[â¼>²æ»ýºýä«ÁgØM8µ‹3 ©ÇnX{&àÈðÖðÝ£Ûo`³½doÂúK¤à¦üD~¨’aGØH8W}•suu„>áà(èò‘q3áDAÿ¼¾Y¹FZ3¨p]~ÐÐåƒC èòÙ9p£RaìGÊ@« ~a?oENþÍ´šx!˜îsL‘8eª0Ÿî€ûJlk,\üöÛ¤úO0Ü~¶}tü&`4d82ÏAü§jxgC­ïO/GÖ~«¬û᣸ýÖäßlï—,³H;ÂæäÃð¶X£ßµÑ+÷<*àoÖ~œKŸeV»á\†{ôEÛÿN´»Æð®>ÏZ>Õ3Ñ–¨ò¬i˜ûÁémp÷âã××ñ©÷ññkA>~Q1:É &îOSÙFÍWÚ¢¸?A7Þ~Í—B6á…ãsÂÖý¦Þg¹j—áÖµgßÁ’Ì–ŠÈ¨|DÎâò©i%DRý«j+>o•Rp–q¾Åäm·Ÿ†m<Ú7]~0鎪ÚÑoT#ˆèmº|Ʊ-èŽ&†páú’ùî?h‰“ïþù|´Ô¹ Û=Õ¾ûctŸyÑ|æÅfœg¸9ðäE*ú‘P~廉gè2œÈïeuû—€¿Ù¸}øMõ႟øŽœ1+F¡¿÷èÂöúL•¡¡9ªlaHÓ9—¸m .Èô€Z•ËÙ>R RÃK@fߺ_nòÜŸ;à–øÜÏùa óÜp6„(\Û•‘ ^Ô Õ>R_$¬§¼@ñ†¿Hú£¿Y{"à(Jæ¥'o¿ßpä©Q¼!Çiàùi*%Ú *^pdF£9vÃ.FnÊ1¾œ!%à<ص+Ro£†—žçfßp“îˆ&bùHÁõ‰¿uÃ-ñŸtÃYºUã­I©œð~¥ÈmF˜w¤Ì9Â%ã¦pK,.Z=p«-8ÕËdN>Ù´X=™‚ª2¢Ì hÏœ>½¡:yN~!é68àP‚VO»-¾ßðQÙ¬¤ÔÁö.×KfÕnVÀM¼KQ¦ŒmïÎzIܱàÓUÃön¹/O¸¡\#ÊŒó!£O7Ëþ ó$mw¯˜/1ú-\*±q1ÎG —|’áDÞý|(ÀÉwVlT—}÷‰dfÕ÷}2m¶Êª‹&N5鎊}×dÓD‘ þ&?—^+üåsBtù{ô§ ƒhûÈà£Hóž2¨€^ð7Y­èXo¢õ¢MÁ)¥ÏZ .Yi±ˆ-x½ûWý:O`ߣá6ˆi.‘B`*;ç˜xÑæl9þJ6#78N8x„lÐíá‚¿²øâ=ºÍâ9ÐS¬H‚g¥ñ+ÍöÃSªRð~U} ê^SIA·\¼Fç÷88(ƒ"WyŠ-qVŠ¥‡["ztl²qÆ $ˆ`Cñ¥ºïø)bu*8Ÿ±Pd¸ð…Ž*$‚‹«œ)tu éX±º4¸X0À6Wù éØW¬HbN¤“Û´¢›ãB‚•=ú›ÉSp‹‹ý„ú/F‘½¦}ºÀºa4bûé4–Y ëD¤:/$-Éox!Þ¦ýtPpÓ»JCbÞd8Ê2šKÅB},ä ŽN/07 9ŸkUpÛÃH¤'O žŸeZ CtbÁÇÔä/1yÛ.Ò“'Ä °àÖµ¯¾3 °ïÕåàŠÌ'ðŸðZ¹¼|.}Žª¨ic÷ëÎëÉ€‹ö(2°ç§¡µOÚL¶ñRM 8_S•](S¨ãíÍ‚í ï%™¶×g¦ŒÀGè|yÂÑ6Ÿž\çËQœ–4V¸®É¿¹¡3G‘Üäê “D …__NW*Ë"X}¦ùÖÞĵÍè6,¹Z#žpCkÄè£f_pÖÛ?Pk=ú›O—8zÀÈÜê *çÁß½ño¼ÚoÃå7JÃåT9à 0$R³cÏZ~„/é]8Ÿ¿Vùœ5ý{bvÕ:.8ðÜ„,Ãi&y‰šZÇ(2°c'EŽràîÑÀyš´Ä¨‰ääÛÅÄï¢\BvÀ“i‰Iµ‹¢‹š’9‹K|šôÁbò䇩dåa3:ßöŸÕöúÌ´\}K¬²7-±ª–è³Ær“o“¡Ý(‚>W`¾¼¨øÀ]õ ñÓs‰R¯g០©2Ðd¦th–¦ô³4jà¯dhßR2:48KÒÁºåÈ,äˆcÁ¶àA#nš¼˜Ý…¿|r¹© (o bôž|xšÁM]²A+„ N{Bþý´Go€’y­ P|› üÅÚuájÐK­{¸ï¼á°ÐM†c¥/„ׄr3‚ðFkD¼½•ÝÕ¹”L‚öÀÉ7aòT6ô %\ÇäE“ ~Ðä» \Dt„ó´v•E!rw§õæ®Û0TpÛùѰ'D‘¢;!†üX%‹çÕm’ìç瘼Ï{Qƒ_À"¸áL€ßk›|›ç8m 8”`™|; ³¥*ˆžš®6‰ÉÛ´kõyEj’£OEçÙçÑÚU^‘ꢡ\p*é™+¶"àløUØÞ캪ϸ©²WðSpöð§,Ã_‰öW¸K’ 7fCVnÍÅT«êbòåWÕ&j.äšðÙ¾¨P´-¦Õï>­Ý]ÎÎ o©X!›|Û¦µ%› §ELxåš"c'P¾k¸TZsQYÅöû^#`ì=ফ=šK$õÆ Þ¸vÇ´÷î7ÜèÇߤÞ/D{?Ç}lß±I>¤½8ÍgŒ5Ÿ1æ# ›íûjuNŒn»n›/¿}Âéã'ÞEmå1ñŽiðÎhÙ·vÉÌ¢Žb¼à ¼•åÉ,â‘P4M“¹(³}ÃÒÁV¥g>ôâL8oj`µ«²¦d²ðŒü\M >Éܪ;ºoò}¿b1 ÏÓ©ÚM/’Ø,$Ué‚#’* Ý «è#epPÁÙÆM“áìGC§ìàïìš.¿Qd§{]ü†¿ }o8½×òa)ÞGJ©ê†6oÜøžÞœà/¶—‚£”^‘R¼B!¢W”,ô$é!‚1>Þ“#ûŽìÙ·½YÜ^d|n²ð“§à¦\R‘„}gþ!Žoèa! ¸áè¥ Š­†ª lø¬ˆ §ã²¢#eþ´lY¢¦mZ>caÈKÐ53Šo‹j}ÆÂ{Â"_ÞÁ > ¦þh>lGd àÁÐÖ.dᦵwQ6cïAnq@o¸Éù~°ˆë×~lÜð íðíû¨ öápÛ¾§ÇÕvÁ_ù¯ã=ºqò’ÝAÇ‚~Ãßð p‹ÐîÉóA "!ÏûW ã¦ÈpÚMý²Â÷èo¶7m¸Ål¹á•?Xp’G©$‘¼"F¾ô€š¤Ž¬¸­“…Çûœã¬/úþb_bôÀ¶B…ÒQÐëKò9§ÇUV”Pýýó®Yûéq¹5N¸Á­q øBsèÜÞ&HGk€ãgþ°êx¼“®;‰tÝ0aÁÇpß+Ýýæsž¦`òè¯VÝp‘®U¨§Í·Í¸tÚ݈€¿š|$àG ®4›øœç^ÔtmNn¯(ó>ï‚oí à›K1úRp>ŨÈðWbsÀ vҡ벓çËhãâfò¦F ¾#ªEØð‡uáB¡uµ¨KÁUõà-'Þe8mè|š›=y›$Rw·Ï9z#3pãŠOÛ— sÀ ø•däÑûþÞ2ãT¤Ïû5z`S/ÐÛ-€f-ǯšOk7ÁŽ…ñ›=úÓ‹åð7Ÿ Yz×ÝðW,FœÍþAO€Ðÿ3kǺ],S Ð ™)Ó¤Å'«ÇEþ ‹t ×Õ}¶\|\Ò1áãaºáµGŸ-wÀ-Úõ€í*Ò‹·LuLø gIԺᶸwŠŠþzH¸¢xøAÐ~n³øDæïM¶Íü}ŸÞÈÆØ«8áo Ôä߬}?›“Ïšpö¾¬÷«î{é÷©œm¾'ÿôn°‰ÓÐX"54VÎù^ [fÁéï(*çM mRÎ>ÎètpFwîfÉŠÑmš qFoÕ“]éâéàŒî·Ó„÷ñXîgt2qFÇ ÎÚí}tt’¬ßÐ.&Õ!Í/8뺈‰dnÓÁYa¡c"ç‘£ËsÂÙ¢tA߆m£†l£ƒ :jµë—„›T5ìû!ur“_x³L‡Qgö7G:ü20š¢BhE£©ÁÉwQ© œ(„UéÍ®R*>Û(÷^yjtÛ›²ø¢eNÇY/Áoxæ ;dR—Çu°dú騑ÒA?£V /£¶øœ@"{5vrOx&#Fÿ¥TºÎ@xmòkÖE÷=ùd>±~”¿–öÚ^£eS'Eo¯…Ÿ(^p>Á)Àýɪ9ŠyL¨›á‚·Ì“ @ã„Á6â‚ÛP4&uñ…»&üͳ™€óžô§þê”p_†R‘|=ô[è7œö&ËÜT,7øÍ?á¥ê‹W¿ÄèÀ¸‰ŠÉã%úŒ›"Éu˜^VìQRjòð: ¯!™TB„×ó.ë2y/€ÔGµDŸƒfÁ[S€{ê!”•´y­Mz¨*<7]†7¶Ý|óO8’`Íä߬}¿¾DÂkê‰ÜøæßŒÕln?ܸìÚiôÊÅCâ£ÝfcŠ\ÔøÑ^W–s54Äjºàoôæ÷† Â%ûdàëôiú ñG+€LÉ5úæ:¢«¡ªRDÊiœpwPNë½¾éýp_–΄§ÀÄ©<¦xÁù'AU–ŽH ;¼º§uÒ_ÜkÄè¶‹ÉÇíœHTþ)„EþƒæË4n¾Lã2·ËÔÐD÷ ïl¶à“*˜ã¶;’áh=qýÊR.¸ rØC —Ñ?R¾«ÈM1ÜðÑXß#*ôor¡?¸(Y2 þD±ý‚f»4tu9tßáç›\ý$a5(›+[ƒO„EKì¾ÛÏå¬Yð”ƒÞåFŒn4n†F·GC§Íï §wñC×¢£ßåœ Žš¬Š}ö[Üö[âà,1¸îŸ4÷LÌ2P¢ NÆxÿý‡ö€/ KÌä‡äèª;Α·³–¤5nË?ÈÑâDJ©ËðWB82nRõ Á.ÀÉ–]¬ª]›{OIû×F¥EÐŽþçaÔ Ægj>%jI‡IœçÖÀ7@÷)Q‹qCÀ9Ú È¸áFãFûÊ>h±Ör5âÑ©çüTD$àh}ä´9Áûi$öèÀ=Ôp¸×ÙBqo¸íºÎQ%ir»IPï·á¬{*_*yÀÛcP$ûŠŽ‘v6ÀAÎBl…È9'¿òwxò`pg•©’-üü7µ„ªö`—í]™}VD–š‚ã—܄ӹ³ôª¾Ääñþ4ŸlÂþTÄã•7íó ·no÷mo¶·ß>(lƒv{©Éãí¾%Ά™+ÆÎ(:á#U“kösqu%ZpÂ[£ ÚXð:ŠE‰MuK.>SeÂkf8[Ùù ÎïâƒvqMžt ˆBPT–ŽH[KðÎ~o8Õ:ŒÕÔñtytüðÙi ^¬sŽÛPbªƒPᦗ {2ñ•š¹øRïl§òØ?B?ö=ú›{â€Ë„´õFŸ¤k©è/9btðPG¦¨ÎÅÒ)7œ”sù+¢ÈÔèºÙZ_L~¯]¤qM®EãJÒΰçòý~†®â2p5 ×-W4ÇyÁgæ‚ Ù›Æ5q¥‡a€%ª.x[ë‚÷ÌZy(™§îtÛbY¢ê‚¯–4Î6P„eôù eQ}i •'–_Ç}`•/¢*| imq¯v&Ûc b«'–GKTÝã"÷*MÕüη®EçËLÑU‹Ú|»È –Íà†¿:&\4`±ã&Oe³©(3­]´ƒáþtÕe¤0’Ê€)nÏ>b02•ËAdh]\j–ðð4Ë}ÛT™¥ÍgRL8íïÛ GM8Ѓæ¾m¾DŽE±Ú¸^ÏågMQÕ®ZbÔèJ‘Iµ"v§§ýCš£û†Ñô‹B|Ô¯öc{å®ÈÈî_«ù±ø7ÅjÚ¸Ô‡‚WÎàDÑEÄк5u+¾ðOÃTÐ ïs“»œìÉ¿‘Ž^}kŸ–Ûß,§ ÏsøaŸø=ù7k?´‚dAÕŒŒ 矋5)àá‰\úP- x`½5pßE oœd€å§éàÌÍúpÖ¾†ZA2òñ¸æƒÇ•¶¯®Í”6´KüÞp,>¾Õg—ˆ¯Å g–H;R®ÉÛ@WvÀ7á¬#%<]3ú›Éï;]dR *ªê;NÖßÎÓ¦ƒk±ÆÇB‰Xj*–"VæéˆZbìÑmWŽH±J¤‚Ÿ£¯ËÅû×Þ%$´)VM†hW˜Yà)5áÖµßä}vÒ„'Òžù½œí62JWï;逋¤¬½ RV=×_ö_bòø\JæP… N´pWíϪQŠlò^’G·n¯ÅÐÉ7üÍU¶¿üx\£GŒ©6W{tãä} )ŽÚ;Î;âáU6,6ÈÝF¨AÅ‚G®¹ç¤+F'O³ª{tìÉuc ©JHÍ•©’›á•3’Æù7| ) Îu¾,9Ö&¼°×âÐÀWƒŠ6_æî‚}âs޳ËÏ`Iá‹j‰¾üÞ §ûŠÑ²±λŠrgGõ©p_âï˜÷ÑÃGá†Ï $“ñfxL7L­×ðMˆ|jSLžâÁ“¡ âù¸|7œU (E/ Í覷jy\Þ¡§Ãœ´ÕCà ÁÁ=yÓÉ(Oð­ý—øÖ{À°[ð:ôY:ß‘ÀÉØkÇ_H2ÿ*Ò ÎÚF0£~ÁÇèË5‰HE&5NP‚'©1ç"„éæ Î¿)GWÀmÆ"s"£D˯\Ü[X{f×þã<Cg¡td•t¸ì§ã,!l¾á<Ù\¢Æ.,"osJ4ÇÊë¡bžˆ>pUÜÐE$^îXTVOÐ2©Ú¶¡©T­d¦E¥K¡¤§v Û»,7©dAu,çƒâåŸ8KUŒþfò[ƒ«¦jÁ‰'žÆ ØÌÉüóWÐÔT õ1gçØ¡™¶¹‹_ìÏ1º+uiÁcÓ§Pp>œ÷'ªöG2B°-’Ã'ÄçÃÐh‰I£ßdòáZ>2üµ.§RF%7Ûžü Þ×WPXŒ^„íít<Ù£Ût{¨ï'ÿ½á6÷÷‚óê‘L ½&o\»ÂoÔd8káb³eñƒÄШ˜¼ñZì¾µwáNã&©Œapºà€ë)¾¤ò¶¤ä“¡$èa’ëð'Ÿy1áÙ´LÙeA%•y!2þÂŒ…§J·yþ"錂¿ÙÞí*JÕ·½UTp{}v¢>~Õ|Küçʨ±ŒÚX,8¸ý@AÊž¼ñú’SÓG†¿J6Œ8”àövå,ÀzZ,|\Áô^„Áz Ž-Q& †qó oOæ4øsßðÃfü %æGµDÑTAÝ.ËAlq×O8Ûçš¶a®ÉÛ®X “0ð¿M8ëÉ=kt6#øfQ&Fÿ³ödð¿)Š+Ú÷™ó0ºDüý®Šýr ¬(ø›µgxŒKö`1}C÷ð ÑžI3\8…^û5y“}ÉÅ·öi™½ñù%àŸñ““7ᑹ6tu/‚ãÊòCÄ Ã‰%j쎬é@U|üÈåàGf}I1ºqºoò|ª\g³Gg5¹qÜx.!ý“‡p°:4©×èwŸªfíÐæúÝOŠyÁK(LXðXÖg$ó*Jä"R"—ÏAf R@îúDµ@âæ46$4Î<~å3Ù HTŽœÉïÑ_btáCøBgž8Ã¥/8/·»ä{Ã_ GZPä]ΈütÁo–Í»ü↎]r";sFMºœh|¦yšlvæØ,r^\—œ‰¶9]ð7Öã—ÝfŸiU$Ó 6A[ðчú–úÞpëÆ‰–êz³ád­°¬z:.£ü(Üpô(,ÃwÿH-@…ûgÁmçÒg€U_ºR}„µAÖ/giz’G7Z'ÕÑ›ð\ÙPhN¸G¿k(5âêê Zª//{ÂéâqÑP£ð^Ã*­ºZ‹–ê !V©‹¹pd’ë*«É·vŸl³_óœÄÀ™ðÑ»å*«>˜Ìª ݣܣ(4Y‹xÞCSÀßX¨™€£›°ú§&œ®™–µ‚ÁÈûÜpëÉðyž*¿vU$’} 'ÃgäU_BÖ„>U¥¥NøÅ↩²È"’}ׂʠê08nø«Ó›8²åD²o¼ð $¸ËpÚÚ%¸=.;¶Yl¹ŽŠuÑäƒKõøø½7œcpÆY› ;råUèfi¾ cãƒŽš„Ÿ¶ƒŽL˧E<Ĭ~Ak÷YS‹¹„ÔÀѤðX'mêík?„Vì5Cj>xv1RÛœÜ|ª<útš%ÅG½½àoŒe®gßý“'?„¼vŸ9Ô\ÍKöèàXܸv…9"rÞ-îY1ú›ÉW™Ï›Õ$C‡V×èpŽÝçuê+&vðRëß1yŸÛ¨/æ¡n‰åtž:èäýéªDðn1Hâgõ±âëÑpŽÑ]Ýɼ·b ³ôä›|öM^2 ðµØ5|‹¥û‰MtêLÀ‘ -QuóËdÒt±;ÙÓp6h‚oþ oÑò…T¬>]¶ ZüàjA¹<>f ðØ—î+¢ï–|o ÎÇ…² î2Ÿ±Ð-¡/ Î.1<òèÆ{|øØ‡ÄžˆÃ?C¢Âg|Xl˜î³a&…š G•*híAsK Ÿ 3áDÙ¤?De#ʾl´DU-Üð²öëfÙ†¤š£ÏE2¤ŒkAÒ%oh‰ª’·á³‡Æ =MPÄÛÅ•WR}¡¢1|ôÕ âJè&ÝôÕãcx2 UA¾¥ºŒæ“óæÓ¨*–Ãá‹ ©¥Xt©£¿×¨Ôäñ.úªó'<ñÕň+lHÉþœñ&Ãm^¯ú¸œ2õyÞGÈö—¯ÏãñzU™ž¼‚ë2h˜d¸uí¢¥ƒL•úHÉ8ÂÚgÃúZ ïñª"z®Ë§³à6·ÈéŽúdßùMD–·G±XñM¾ˆ¯àîߣ'¯0/º gYB{ƒºc¹[:Ûæ áªª`1/â·yd÷èoöç½û&/½ ´?ÛpÈ–ýéªÃï2<®ª¼• ·.qh–(R-CžÛ·¹}œ`.šÔQ1ºQ׿dÁYÞ>¬]ƒÂ_¶7ÕöFß—¿„)œ§)¿á´WE^bT-QaE3 HþA‚†E]ÔìÛE9¥¤íÑI—ÃGÈä;à/iÞp Ss¼àÖíUd¤ í-ªí­> –2RðM–#å1ÒªZ¢Øó+úfˆºÄ{ô`SµMcÌiØ™Ñ.þÀYVî–±¤Þì·Þ¤®ˆS †ˆÓùåyCÕöj²[ªzÁAMð“íÑI—ÃG` <à/¶÷X»«YEAx§ÜAçäƒë¢ w¾Õã §üõñç_ÁäwÚKU‡ô2UäpND.j¼áwúÝWöPn8°ª?Dö‰à$Y|Š:ÓÞ£¿ÙÅHÀ š£Å[sÃm™¥{ô{‰š ‚R¤ãWŸN¼à|5"âÚ£¿Yb"à f¡Ææ»'Ú|2eõƒúïÑŸüXÎ"´täµwßÚû\»%IoÁmuÇõ €ÖŸñcí’ D„ÎÉO’ÅÎÄ*4×èw¼ø«Ù÷ŒxñXû( ¼¶lÙ÷ƒZ¬#GÊYC D{·Ä1 ´™žMÊ9r–‰¢CþÈðÈ1DR²ïÑC¨ZÍõ%&OZ¢%PGäð©¶O´u®=½_;1:¶ |4Õ N„L{t›•T”HS*R¢ øŠ¢B‹O‰ºÈtœˆØþô­EÉÍ{tãþˆþuðïDÅ Ð\†Ý†#ã&ußþtß-ÕU@2B"ÌÚðçÎÉb@ºád63ù•™]egÔâkÁWw Óó÷èw@^óÎrênTÁ‘ Ï>?Ì„ççE+®ŽrµÐU+Óó Gá˜Æ+’5Îìœ|sL‚«§UlFæ–µÛð%àx‰ c<Ô7¥²ž¾”€ÿy°™vQÓH¼f_rÌ„¿y¨pT¢]Xbõ-± ïq"°ô½áÀ AêÁ¯Ü ïq s2p‡M¸ñ=ž›xÆ“bôWk?à¾Ôœ,¥æTÔªsNRù¾ÉK½´pÊB–²u±%º™“Mk÷1'/8ëHÁvÂÙ"Y¬vUÌɵ×¹ÜÔÇÌþ4(›EJº£(௶÷€û<,n´p ˆdM}\“5%H:¢ÆÂ)•)Kºà¨Ž¾ÉpaŽ’mD¹H§òG 5>à&+¼dÕ!•)È]Y¶#% ä"å ’¦Jº¹‹Ûó|d¸±0¢Tƒ"9ÕdŠœJ вuRšO ú¢D¥ _—e”îûò>ëdñ7=™"7š"/p€_~Áy÷ÐmУ“g)ɶ{H$ö r¯nfÞR8ßVç•>bæmûW®^›u3膬ãq.«*_V$ÊMˆ“Ácí\¨£¢%n&•®–àcD¿D¬hòóòäHœÌÈßTµ]¿—X÷¯~ `LxçäC¯îM)û°‰fHUw¯ÈH;ÜÅÕ¸©²š@3úMC¦:eªÒñ,º¥6slH<+F!YvQäRü²÷èñ‚X>Ìa HÎ;«HxÉ1yß=>á%sŠ$BE2 Zp.r¦ÚUn8A·7ïq Æ6©«I…kH]Á¾oRWÊÖE»i¨ÒªÌÝ ý×>2›RÌ€ƒ»Uÿ÷"r·þ±òÀ;“¯¦®uÛ~ 8ßÜ#Åè¶¢ÈÝ`Ñè‚¿X;' £œÇqÀ‡A¥5cÉ‘¡±ÉWöÎ@çêåXeVÖÞ-xŠÌ»Šfù g©Æ£ýÕÆ%ŽòdîÖÐ'•}fJ-éµÿ†³lðÄ"àDÊW#\ª œÖ}àžWìØáæýª%ºúMÖ6|kŸ¥Ê)šÖ.ð®eþêül¸†x6ÉpDŽ;øÉ÷Ç¥ø,ijßÞJ¥VOÈS»F¿MÐvW¿¢*2ÒøV]ð'q ߣ+à·¿p­:]šÑÑn¡½=瘄;½‘Ù‚¼[–˜|'#ûÖž…µgÔ±þ„³Ü]H¸v K²,U˜ÆÂÙ{.±FS­õ#Ãyé ™n¯É“ÚUVúª‚£^}WÃŽòÒGA¸8¾7œhE¬•§Iäì¥í™ßð«%"1áãá)Ðåé+8ê>‹¯óÆj® òC®Ñm_÷Y|}øÿGÂk‘~åü†ÓNîÐÿgOÞv5 U¹“†J8Ép@¾õ€$…ƒJ˜¶Nè;ãš¼Íã r ÓïÀßpÊeð· ÿA¯ÅÍ1üdÃ(ŠwÆð™•Þ¸;]8Ë.¤œ¨®ß×·½”GV ŸY9áo¾5úÃ=˰îXvah†Ky¨˜2õq@þÂQ…§I‚vǨïŸeÄèÆgÙ©|2Zû,p/l©do2Üz-ú ƃí8i¯Åsãf©4,ÆòðŒ" r‚Œ² Î%õQ½Ýâ s§gÊx›Èv\JÛlÇlÓć7Ùöè!=jÙ$&—èª[pÐç”ñîÑß,1p ¨í‘Ý‚¹%.ÛèáüzftžÎDÇø‹/T6܉.8MŠ÷š5ŸpN»¦GÝv³4™ky|>`tÐÆü¯UÚ†þǼàÄ&=àÓ¹Ú˜·Ç’õ•/xäÌJšDöýЦ ¯¾ÉoZŸ¬•ºóËWÏ{ iH˜‹ g¿ümÓÁä›ïËkJ×›†ª¹ÈðX!®e¶ÿ†“†ûßÉ£/´à,}\bCýú•ÏXˆ]RôxŽ]µ ¢MÍÒ8d³4)FsL¶L–†ñ†“v¥¨Æ’ê¶O®V Ÿû—ÁƒxK!JBÀ–·}VÀÉš·¿gÈІw®÷DŠ ¸íqž|Á ”dƒS7zU’ϳ@×)…‚Úð¹× x¤âûòEt‚¼á=:¹?ò‘>ƒãWէߪx°xmn¾á n‘T5n‘Ô|»ØÄÇÈöØ£¿Ð_n<~¾˜Oê¬nW¤QíÑßlo"àÈ%$²Ó… ¿á…«÷ƒ…è ¾ µo²ägœX;üB"¥2ßûÎ7n Uÿó!šáòDœÈÇ%(£ÂÔ g£.¨í€w.Ñô9áÝò…‚æ¥]=@[–B;½ èHÞT´,ÑÚÉ> jÂéR11¤˜ž¿\çÌ/1ù7*â€g—zÌRd]ðBzàöËÙåÉ3j9ײ¡kè÷†ƒnkªvßyïï‡)X»àn,˜‚¼~å+õªÃ·½r©W2Üh06ŸÍÕ|E\N”é|Á²Í;Þ-&[S™l"½8öo¶ D= böØ£¿pR“z¶|!U<°ÉåõèAÜ–É9OàóÈp¢0ˆ·z"GO“æâ7Zp££·IÙÛD—‘ï u_ÈgñµlPÄèFý¦ðG%ÎzAÇÐû%F·='DsìÂm†*,Îgc"Ý¡!›l2 9tô.r›£·ñµöª%6Õ}þ¨M˜jwÒÑ{n3ÿšÏ6:x¼ÕþÜÃü›ðÂå û34æŸÈöMø¼Ž%lßú%&n:eýQ-Qnu†nè\7ô&õæ‹r£þâØWw7Twx{„²áòMþjò€£H»L˜MXPñ‚³Ím!ÇÜl!‹vUi׿“`ž0{Jð&@ŒØòFÕ䱂ê>Aý·2ôK ÷èw_Õ.ºh›È‹ ÷ï ¶¦ý;éí÷†¯·8á8 ŠÉ¯/ /vóñb/xãè –ßž\â„÷›tù†+ ᪤r{vÛô×lÛ ÀÜìÙ𠃆¡à蔉ìÙÄ);4ÌÁž­&RýÞ£ÛˆT÷äm7©Èž]+zO8!ïÈžQBýýilT8+à6óoøÌ¿ '^ˆ,ý(ábxø³Æ?ꣿ^pB þ˜çwsAþf{?Üvy_îøà]X?†4ÿ63u°Ceþ Ÿù·à‰‰¤‚ê&h.xzZ¢|ó[|[á‚7Ž÷'ŠümÚ^äp5Â[pöb¢$ø†[ï^ “cdXäç¸àtg8úþ!௖˜ 8ÈÔï2ËuYIÝÂr}.q™@,U*òè¶*…þ¸¨üÃw¸àãéËÚ]õz]¤¿†·\—Ò‚z,xåÖÞ[SÀé/$]L¼ íu…÷¼¥bx¼íÑùrÙÀÊìR¨Çe¨ø¾Pá]Œ‘c;Ž÷è<û<ŠîáXS Îm/*íÜ“·ëðht{°^¥ ^cT Á—°Åä¡`bâNœ­¿†t {ô7741yhÄä:Êa§g5íæ\âr ñ!ü¢€Û,\‘p; Ô´§5Á¿×ÞÁãmÂߨ±/1yÛË&ø,3÷ §âæS¿U°öâÓoE¥ß|†Ý„Óô£ÿ^{A'ãÞGàÞ~€¯¤‹awL¾ùÖÞ¤Û¯ÁÛ¯IÒO†Ë1×EêïòG†SŽ9™tcÎeUkï>(vÐ×VÒcØu²Óà5: ‚k.è£ïñ5"pÈîÑm6>šË>ß%W^èXO8R%n/f$E;ú\yU9sÙ“…¿á,oÅ㣘üé8DÛE½Õ£hä‘ù×è †Þpž™YúÚˆëW"AÞŸ,¼æ–ŽK –“‘]¯ùX|'ÃBÐuÃQ;´½Eó3ñ¬ç Î*>a\]~»È N&œ_hq\5ÖOœ£ÛÚ1V¸µ— £¤Ð 9¨ÕÕtçÚ»ì@®òè‚rv%Éõ8„W(g¡á–ÕAì^ fKòyÙ&œˆ |”z s'ã{Ñÿ¹jàèbòÑÊ÷$å¯ápÀYN ›Vþ…tì“‘|&[’£¯€Ðâ€ó¡pøSTm¯Â2»²çÒg·GP6­|è ÖÐ^ô”}»˜…àˆ(ÎrÏ›DÐç&KÅ'‚+-p7Ï2üÕÚ¸ÅhJœp€in–ƒ•Þt³4ßä%â ·{N~Ù\õ±¬¦1j“!ƒì„@~“˜¿à({®ÊpAwøN!>ïKß´ò1[vqhn€lÉ »á¼ù׊ Î] % m^øTÕ!ª­]EÂxÊÕ.8ŸâÚЫ;‹=s _"—vÍ>ãf‰ðé / ôª Ÿ^DÌÑ[œp"|ª‰"L8(n© %ÚÇä}VOæ÷}¹úÄsò+7,ZUšËgmbwNõ4”:;áDøT‘Á¼'oÔ\¾à`®ïýßn´²/º—¥è^È"Ÿpl\3lܦ ¯Û.\·øÁ5á¬Úí¨ ß‚0LZ[åÊÃw¬‡ ¹p°`þpOÒ»“#·]Ê>fö~0³ûô~È|HnzÍ‹1¶míâjWÜb÷hxl8× ï)Mݨ‹Ï[ŒïƒJøùí«öè6S£øÌ¬’dÐÇEîŒL¢ ωÄî‚t,s¨rÈ64ðÎÅoàöfÃöîˆÈ ÿgp´?ËÌJ¬“»Êp‚wñZ7 \…Ö¯|ÖT1XSç«ô…BBšKSêØ‹ÏæÒðÂk·lT·,QåR°ÇÃmX™O10z(6<<ղĮÒCr~²ß&œ­‰î žïT%ƒµU_H•7¯a¢sœðÂy)Óê†ÓâïÛbÈ£ÓB” E}“ᑣѧ|qœ-–ŠŠÑ_­}[ÕgA!îz…îÜõÑ®*wVUØYàôN8ýOïf¸Í²D•%SÔÃHå½Vl’Üù—¡ƒv‰$ü^bÝ¿*>õ/¼ ‡‚ZÞ/ñKÁá.VŸª’BÝ&;à«gÝêÔäz¨ùÖÞ„µ ÛÛ¤CJ²I_“7®]2Àp&Q•’¥: %m¸Mw•¾Ó;|×Ìðé`U@ÐÇ+ß^yzˆŠzÞYïìÓ²bòo$xoo ®ímA”`¤¹&|p]Èñö¶ ÚÞèÛ^C:ïƒÝÞÑ“³½ûqÐ|TKÒÍž!Ãֽ̽79 ='|ÄÎnÜPLÞ¸q £ ܪÞ s°:,ÙTòü­:d¸ñVmÕ·ïÀ9õ7&0PL UŸBõ™CM2‡pz³¼§®öÊ_ÞÒ@'^ðžƒÅTo¼=³‚m]† ËlkC¸ì…:øxW•ô½á¯¶wû/ó©ƒÌ§È±ÇSp>½·+&_÷ÜMxá Š,Ü£?•«ô‡Ž—(·°Ai6=ºÂ›$þQçà“pž¹kà(ºÑ-ñ¹tÁ_åŠÎG7º „@auNg?ÈÛëßÖ¯|éJ½ˆn趺hÃàmP9~ŒñÈÆ\Œñ,etLxç}÷è¾p”Ü‚¾PÕÜ·2á|‚_h6ÍáB(>0'œN\üHEÄ›pžÏêëòèØ?Ú}FW—HðR_ RùcQÈ*'RW]À(^¼ò•axèYMkt¢ì’cö F7ÚÔ"á<öÉ»TPÏÎtd"Eûš<© Dõ8|Ö˜ÈãsÎæþaõxPÉë÷}+¾ás;$ñôc¨£ÖÔ Nx/f.vžµƒ$ÞòÐÉuÞI¼"Aj¬<ôd¹7Iü ™?λ/}H^+˜p£ªQç*’ø>|†Ýù àöòTVšBŒ!š•ÐêAó‡øò«&ËþBC|t€œ=yÓ«{—èìñlÎÀ±?áqií࢜Zp~ãPÙþ‚fàÝ“–p×@¼ðuÿJt¦ Àü½à¶Ä„G‰ C†ãÓ«à…G†C;#¶v¼áw1ÏâëŠÑÉ!¾×|¼ðñÂÿûô–ÐÐé;íÍ Ãŧ ŠåA‰ œ?¤|¡¢Z¢Ï›pší[|p…*íâÓpúCÈk÷Ùo¡ ^_übÚììé…ÛÛ4.ƒÐ}ü'ºŸþH0 d-¸Ñ©²iÚ_l‡o{EÓ ßÐCð%ü¹¡³ G97CG7´†ÌHð„³!^|Co.øØ8ã3ÈðW××6>E–wìi:XÞ™P_@Æg\ö[³HÇfyq2¸+Ì9–w]ê 7¤ŒŽƒå]¿ï[+øXÞÇÁòÎF† gÜDŠÞ÷†¿ZûϾóž2 o˜¥ ÞÝ®‹šü™?Î{ñí»ÿÄ®ˆXÄ›0¢}_=¶{5˜‚Qÿ"ý{zAп3‹ˆfzÁéÊÑVˆ>S0úLÁ(õhnÂå‹ËͲ½*SP$‰ÿ£y¢NF ?\¦ÏÅ·MÁbùBÀ·_´2ÇüÓzÜQR}N¼áÍú-¸é5Ÿ|¾¸ô¸ñNTwi¬Ý¤)3ÉÕ¢{¤ 8,ò“pZ†D NAµD…a$xÂ_…’Òç z¼‹QsK%Ÿý–dû Ù®)¹ oËû‚³#aò j[ÎÉç ›p>˜SQ¸+I­;®É×.ÚF0L“ª`=bóoNpBD…ƒåJI‘†æØTú­¶á†×‘ÙWw»Øå¨ ÁhyÑO&ù¼VNs‚‹Ù$‘gAbƒ=ùƒže#é·Ì;”æþd¾ÍûªðìJ_p¢«·ÆPšðAʹ¼Ä ‰jiH×ÁSl±¦&£Ò÷.8`H‰E†¿Áî3/rc€¾jÁßpkP“¿×®qeŸ{hÂi/|zWy#§œQëžü›}ß×—HÓŽ^ãc:ÖEp~ÇZêÓ°±#Ù¬.G®Â±ÆÑ²Mæn;Ö²qƒõ N¼à³?§p5û!ûbuNÔ°wD›¡v•ˆ©¾7Ðú Ü„í —¨!¦ÅçH)p@æ¢ç pàË£±Š/}©͊ÿbŸ9×è6Eï#1_p>§c€æÝ{t›,’˜ã÷Ï„×ÁeœÁjbô`²¯‰ù~ÿˆ$æ±G4ÇÌîÛÌê{Ãÿ¬$lšlâ Em®ò'“ç‡n,ÿ>®Ê”\û5yS›Þ!“˜Ã¬ŠX7t2×èwÒ3»ö/75W2»9‘f/8‘Œ³Ü«èø5ƒh£+¬“.ÃùΨÑÜYéwþ\¿’¬“Ú¡lNƃRÕo€Sõ,ó"<–s9“O\{õ¥Õ• ÄÝ,ˆ³cγ=€.‹þF´÷•S}©Ü^ ÃÆëê&|puÃDýÁ÷†o¬ GšKæ-GŒ× ÞBÕëŽN”k|9éø“¿3º4«ªÂRÕç7Ú¼å} ŽL8/Cð^«Éu§‹|è)„ géÇîX}gØ 4¸öìºÓ«Åo/¸­­Ðœh§Ö^|ºC Šäè]pÂñó#uq(àoL‚LÀïí=~¥Ь— „+<*TOóKŸCiÂKdìMÊÐ!F³?€Ãã'¦ì$x1 AíbÔ†óÇÔ‹o¦s“E.S #–¶¯õÅ¥|˜A‘ÚmË\m>T Â3’ÈE8ö}s˜Çj°(šŠ ¡ùU›ýI†k±E—ê9Ì{BÉRmÙ3Œ‹pU7áÑߨžBÀï%¿òåòL8•õòÃt޼8›ªK¥gÁÒð¾\£?…M,@2ý3ëW²=pê`±ö&õ£µµ©É¿ÙÞ}_Ê|æ0b:á50 •J¬¾áÖƒ%ÇÄïpÂéÈ}‘žÂµí™n‘MUÒ²ÌCž‹ì›ð~ÏžïY†ÿYb4˜l½«ŽŸÏê™p¾4kW)-¿F6Wø‹ã·Í¡aIø¹á o‰àP•>ÉœÞPE …Ù’£Ûl.™”;54ù¸î®,otüÍäwlQdՆĭ Ž¿þçWœp!7Ù{Á夣ëk¸:Æ‘…óƒMêŽÍ÷Ó€KTY'ÃÇð8á-sT"OԌΠANà ©’‹5äÙE†×ÈW£m˜>žA=+àØŒ¾ñƒ#›kûŒ.¹5úݦJÖ²)¶s²è`‘ãÁ½­^û—ý©,SŒbô@ø5@e‰ Ý8‚?‘Ð\±Ã°½Ó©Ï£°aØó³áÔOwÃ1:yH…sùîIßÙpÄèÒ4pƾ&®îï µö}åSÀ×è ¬còx{=‹œM-Ö8 žPÁÙ|ïœ4pÞ‚ªÏ£° Ð’,¨ .¦ C ý½áÖ ™V-ÀÉÁ«@UÒ1:yÿÈÛ«0­þüªúôÛÑþ°?“—‡ç±ƒg¼ª–Ø|Kl¬ _,”]œy¡€¿º{µwßÚåVrù#ÃGà’Ê­Ï1y‹YYŸGÑÖ¤+àlëV’X÷†³§—HpžúžŒ¡Ñí&ŽìpÁ_ÑPp–Ÿµv~‰áqév Åv’á¥0Åe “!2tcÛ(„÷Ž…/±vh¹­p7ÿ‚³¤\PñmŽì‡%Èo8[­Ž.ÏUçG‘—¾ÔTõ¥ßðkE Éw~²Owd^wüûVm™VAJ뀂¡ûϯŠo‰Ë³¸G;T…µ4†Ãfè6Ág¹w z÷†efvíY† ‘ºõS?à·CIî‡vÂYÃÏA9à|ç x2šJñùÌÊÐ}Ò!1 KT¸Üþüjø–8|K‚ãçÏö&Åäm@¤în9~d¸ÉÝxŒþ”`ØÞ¨ ¨ÈÐÝRAKœ4/šz}o8¨KQÝxuGKÌ󆣺†¶—oD¬Ú^•_O$â¶7±ÛËš¾ßNð¬ks1i”Ì· -¨M˜mÛÅ·EÃQÆÜ1ù7 êØ^Ÿe‹¬œ» > WlT9ædÂl²ü7¼pž5Դ𬒓”Å«.`£ÁÓ»›ŸpIðþÙ.·LÆ-¨É÷ WØFèð÷÷á®sò¼ê`‰ã°RVÏOŠøÕæœüf)`³9³<:.‘Œš®Yû §ì·IÂ÷ÈpêCpKüRp¤;D2jT µá´™&Šàf“æ‹ÃÐƒæ’ 4’ç£à¾Ãq‹$Ç&‘sj“Q¿8¤\ávj2|4Ö¸AQÇMrÍVV#Çö&¹~±öm·kH®vMYPPˆBó7¼¡hgíª¡ÂFX²N„%.ëä –%íš<Åý^øVÚð I„ÙTâb¼'ÿF‚ûG2nè~h¿áÇoTþƻգ|Å"&íc‰’ D´_<éòö¢ýébäJ°‚lòϯd÷²1*ìÌ<Ÿø´ãct¾¸.Q ³+ qmÂìÀQºF°‹›0Û$¨YåÒðm£A‚ðŽ$B3çƒË ™´©ÀC¼àƒ¥~ “ù~ÌQµ?É¥+7a¶ÉVÏSåøÀbÛ›Rï}7ÔÈê8@¤àêóó¥F¿—Øö¯|~˜,ûaËrŒr1¸A5”ÕM†³Œ|¨ï†óÕÔdFý5ù{íšw¾HYM§3_pR?tØ=ð̹  Ôù¢O›Œš =£.‹'<$˧ë†;>/,5á4]7ýxûÞp‚Fr)}K‘äõÞpÞ3ªN…'DV­còo¶wÛ\.öë g#o½¡À]áÓÍY·Æ÷†¿ÒÇ['‰äÙ¨iah¼á¦Z­còoöý€'×±.–Æcœmšû }O®{X$妓‹ÃÑæ¢pé•V²ÆŽÕrƒwF‘ì$œ†»H¹ù¶-‹ÏÌ*¾L¢ o|[:«+«ókà^9]GÙ4H:µõ)ͧôÛ¼Ó™Îtû”€‹Ò|JßgËmæoÆ×ƒ:Zl8à¼Û«rŸÉ6álõ*Îp:ÿÁì×Çäm÷šÈü+hdæo>˜¿Ù¶ÂQ³ö홿í'3½>¸eï?àÍà?«[n?ÑdNï€ÒªÔ§¿U‹1¶lõcUJëF­ÊŽÑ'N²¦:Ì|špŠSQ˜Pyƃ)u¸ñõ$òeÓ].8h’ ‚ÂÕg'ɄתÊ*˜Á&ülx°˜ÁµjÌ`‘ð5ºÝð:‚ÅœpÊXŽŠ%6-W}öLå}S?ô¡žÞîÛE•=#Óbã{mW¶±N†¬‚ëk¦‰É¿Ñ0û^SÐb£ýY¼Ö•óQÔ®EéS»µi±sU+¨}z›lÏÀµK-îqÐ~ÃYE®2‹¶H‹]aâû„ÌÔ»Ž¦£.‰loÔxWEòìsÃ0n’R[ÜÛïV“‡:X$ÏNÐܲ¼Ä$ÃéÍ’'_DDîë §%íCÕž`Ù0ah÷ç8A…G(Éð’˜ü5\zÛ$KóÉ´*û «…@4”ê-±Tm¼G#Á\ÌþépòŸ¼¢0¡uAÃàÜñƒ¡Û´vÉ6^ðÓY38Ô£}ùl²IÀá#«+H /Ú] ÏEž­ë=<ê%~(8:~"w„–΄'Žô×^loÖ ˆ ':Ùk®Ø4/9‘®{d¸Äi(qíaéà1:KÍ+ߺn½|ÀeºndAõdÐo7¼²ìáýÓ“Æv‘zo8›e=îHî9ÇlØŸctK°í†#jð‚_tÝ­™öGeA‰¬ÜD{üJSŒN¿¨X¢ÊW¤àîFo©Þ\VD—ø4…[ÊgAõþ^‚ÏÑg“’ÊÈýAžÄ.•×cN¼n± ¸Ø'·Aí:œ³vú\^£“Ô6ì­zÁmk—Ù¾zû-¶ïj*‹»î¾sOǦ€“w¯¨†*a[äOÐ? ¸ÆZ³Åª€‡•òòJ·íÒð±nŽ(,{/ƪÎOŒƒ48&os~ˆ„æš•NŸ_…æÚ”â-iPCU¶/2’§%XáœÆÍ¦ÏͲ?’i5`ªÖX¦U|´øxy"²ðãW’mÔäZlß…í˜h›íûÅ>Fo¾Ãÿgs ˀ秱>v iÚAn.Ok¶ ç0å`q¿˜ü1ºèø©(Kg,ÇO·8~ow,‹i.ã'È<Þ¬ðH½H`*Ђ® \âž<ÚÅð¸êÁ¼qíãàÓq~Û˜ª%ÅýDRo"üCÁÉÎ"ì£ð‚ßF¢BPã© +gÉ7Àlpb¹%’p¸DÑAÓàY”ËàŸ&Ãmº2<Í).ÍâA,ªS&†¸jûÈp>ÿ 1îÑYBâøð7Û{Ȧ¼B9á ÌV; 8ꈶW“åDZí€YNVØ~è®QœÒÆ Žß¶tºÚ½z˜ç]gå{cîqXU¾á|Z³'¯]£¹dÂlD´à4»"FçÏeî8ÈZ>^ì$ jÃù,Ÿ.Ãñ鉭ªÜp¶òýiQ')·Ä/G÷ÈL-,qòÖŽ”=ºÍ=˜©õ‡ô€»‚W Þ¹ôXs°áo² Œ›ÍLýbíûî)«Q÷ú §ùÁ>Bêú‚ƒì®ç‘Gu1k—l.Hì¶àd¾G<ŸPsUÕ±n>å,šVŠö®úÍ¥2­B÷-QòA÷÷‚ N ø«Ó{¬}ø4×¼p¢…Óë³DÒèˆb+ NsæÉ§-()4³'ÿfíÛhŠÁµq¯‚A Õ5?!*ÂR ò§ª‡Eý°}ÄA<~OÞv.£Üg0†løÃöò9ÓNj~„˜ô牚ºftô(Œ>›kÂ'º{7›4zî8Ôo.®£O/^j2õ<w¯Šs:Äê[¢Ä« Ѽ³„dXΫïúR˜VÀnŸðÚ¹f/¨}ÁÁöÆ&Ã/¦¨pgiàÏàâæ*8zcRÁ‡ådt•~SXfhŽ€;‰ ‘ >8ÃNÐoCcx§çý8ÎâÅþ{ø+z[¬ÑŸÖ »ˆx±_ùÌ´ƒ;Ì´MlmzÚ‹Œ×øiŸ¢oòb^PÈQݺöä:~I*ZáùÈp£õ˜dHTÞ¤Ñáá<ÞUç©b¯UEÊbƒHYP²°á|Ì™‰/Z[—'¸ù7<Cõ ¬O`}ëXŸÀúÖ'°>õ ¬O`}ëXŸÀúÖ'°¾ëK°¾ëK°¾ëK°¾ëK°¾ëK°¾ëK°¾ëK°¾ë»ÿú·ãøý½>yø+À_þø«ý¦‡ßôð›~ÓÃozøM¿à7üf€ß ð›~3ÀoFøÍ¿á7#üf„ߌð›¿)ïû£ö™‡Ï<|೟Eø,ÂgŸ |–à³öW‚y&˜g‚y&˜g‚y&˜g‚y&˜g‚y&˜'Jd‚yf˜g†™e˜K†Ñ3Œ—a„¿Yà7 üfß,ð›½ý÷ãøÿòßþí_ÿó÷ÿþç?þõ?þû_ÿãßïëÄëßÿ÷V¨v]ñ¹x|]êËÑ,à¡þ¹—E~g“ù¥ð¾‘û5ù}¨Ñs–£Ý¡'ÿ¬îý¥_Á½ÎŽvɤ§]Oþ18Ç£éÜçw_9_ ydäŸÑ¹×;è×óß3þœíÖ…–çVä1¨‹ää¡È1îè÷–öäöÆÓž¼ß8__âjc]x8_Þ·!Öä5ëR¨{BLΧ†}¿öíòÅs¶Èïœ-r(N8ôI‰âÆõä‡Êë ÂöMéø^¢±ïëLr9‚t„‰tĉf|lsÖ}Ì Á æþˆÁºôJgÞc˜k—\Èä½ôä8ù{Ž.|‘Ìs[Uý¾ø¶F-15±j±Èïœ 08ÛR'9õäGO² 2,ñ^{¥ôäÃþÈË'×ÈÓC^Ï’«5ú6i£‡3Ƕ?êƒÓgo’ ’ûx˜œÿN/ùJ­‘¼îöòoPÔ$=ù`˜Ä×t|O¿L¡2zg¼P“wJ:ù ä—¯T׊åÁ^† {ru„<2““æ£Tzò%¬=?;ô-›ásèö=˜ ®>¬-–s+líq=y=È}&…´ÇºÐ.ûµtø`Y뮣²'·Œ}kWGWûs3¾µ2·šCßkïÉmÃt¶h\b4\ ™Ò™U=FÎO×>J‡åD({©'koï†p‰Éà"Þ2x·í{òÁ^z/%ã´¾~8X£Sƒ§™rÛ˳ôä–¯ ©®É]dôÎ%Ø;eKýR»ÝPËK=LCz™ÂžÜ¶ªm‰%$äͦj<~4yäcÍé`N„E>Útc{¿Oô‡<<6ÃSGôÆ›jsë !÷6yjä7}I„Ü<µýäÐ*@Ìxð%×FWÆDœRk=Yæ6hs{Y[_‡µÿ~þ÷-[רéëL2¤.*W#pG'‰šŸy×~óWrÛ¸ Y’]On˜œZóçCÉ)ûLΟY á±Ö~þ€‘!§×¼¿£JK¼É?ÿûlÜå„ûÃÜ’ëL$£Ë„CÄ^¦d›œ˜«EŽ»øÞ^{í=ùïçÆqã†ý‰=‡>|?T’fÊ-6„u·¡‰vœˆ¶mrš¯€ägñÒ“ÿ~þ÷f;³kãòeŠ5úÑKÌÞ\û™“É។Z«Þ9kòÍ ÁIÜÙÚÞÔ.ÛÛT®s¨ì ’Z.ÿap Õ©S[ýî%¨¹'¹ëx}8Ô±®×ÞÔoïÍ¡ûæ×Ž¿X_ÈÚõ ¥ªÉþ\QÅX˜Îò9ôOLçF›|4 kÎG°XÍ®¥œK^«uÜ0ö'd/ y\;á—½LÁdä$crn8ô/ÿ+'§¼4=0“ÓÙa m†{•+Hª–ÉI^rèÉ©ÅZ¼¸a/Ï.Eîùݬhû á¼xïÍ}w!k·­j›¼ê¢JG)òSП ¸?qÍ¡0áPœph°„ãöFkŽ7#fÊÈèi'<ï{òÎØ7Ùü ›ç¬£žÊ&=Ù¿uߥbŽî| ¹ið,s«ü¤8³XóÌÉCJ3¹¢dSôÒ:¢*)rz‘ž¼s5® Wl ßJÖT\Hj{µŽ*ó‚äU]ÛKMŽIßPóÚ^FšÊÎg9 ;œäò³zrê+, ž<§6¦])§3ÏÍ;EÞ“çÛµôwÞ'Lì%ŽÞbà_/ï¬ „×÷½9ÿkÇS;L²NH˜µÖNÄå%šk‡äý×§J'”­ÈïÈû ƒÍs3~«¬½öž|ÌÖ¤·WýnÑõäÆéšŸ+Ànòý£%C÷©¿·?±î‘C{‡‹Ž[¸œÊÞ‰:]Ï.‡stïROnOÅ>œ}ñÖèxv\Þªq‰ý=ùØ“‰ÏpŸPæöÞ¦…Œ®–/gû°,Ö%lí3LÖü–à!-~JêœÌýñaS¬Ô£¸ôl/ÚŒ%˜“Ç‹Âø€KpãbTù3œ¼N=†HÒ®õtdò-íßUùßßJp¡çð[k5IÛømdÒçÛ½öž|Ì‚^ë#B:“£{v„‡­É¯#¦_Î;kòÝIí”™I`¥´.ž÷æhæ!Cqm'ÒÂÈ·†5uÒ˜%]ŸÁif¥ö„+XÉÎàÏr˜–ÿâ)!w¸PvîýTŽ]b9XLù (›#†¤í»‘¨º~·'·m¤e3F_Y¿4á¼™ Åù½}ëB8Ë޾χÁ! ïö\˜ñ<˜µîɇC¿;g¬kBÊní$ÈojrWÄLPÞ6‡LÞ¶é:ö5|íÉ7ö'­}˜cÐ’´°kcâó¶9¦1ßVuaÓÂ%08b;Tòsœ<7/¯ç.̶œgíÉÿê­D  ^F1$— YÑ|¹£yg‘§ˆzÑŽ“}ÇÉ›˜8Ñ d\û=Yœü£îéõÚ=€5œÃ%F¶’ƒM¾'vQÛŒ„Éš~{“«øWz.{ÌÉ&oZë‚_•ÉÈÉ)+õ±øb2øÔÁŒZû Z× %'ÇÈùï8ÈmÆwöc\û©£‘ü=‘fšn¼¼ž–wÖè)b¶¥Æu7SB=‡Éí ³•KÈå‹'£C6ìÉâ O/Ö²ö™þ˜0 Ïz˜kïœÖÂÕ…tcm{òÈ¿]ÄËeHyð­™!µMdOþwm‘"?SoðŽ‘ó‡"3öÇîÚH ÌxÚb]dû'¢-æÚ›%ÄÐŒIݰÃg¢†Tî»Ôc<˜…µÈGc¿·ïÂÌíÁ,lO¾0ö•ExÊà©7¤ùh׿Vž {¹!\+_¡“í+Ô…¹[kw>gGb)³Ä'ÿ!ƒ$J°ãV×dóCþiŠÑò3—½{ã5òNµ†Ù„Ññx¬UÚäã|òÆ×Y‹Q-ä×£w—p©Ö6zØ`Ç*Ž¢r'½ ú¤çÐ˽ûî¹½‹ö…D¿Äh¶8ˆŸâ¬ƒãD¸Œ;£¹v ¾î¢ã¶v•1%“SšgËÞ¹S…)h¾C´ häQ’ òËñ?•s’±g‘w»˜r4n»¾LË@nª”CH>°›<œ›‚"˜ú•|Ý„Ÿmfð¡'ÿt”4Óåè’ôŽ<íû>0ûl‘ãuÕµ½Ñ äœÈ0:U¿ß±»ï%eGX§ (9´k~§:Bœ¹?HÖçƒ3¸;jv¾™£ ±“CÔ-,Àâ„q`¾ÖèÞï³L¾³RGëÛ–…Œ.“9ÎQÙ»9ÆÖ´±õå6Îà‰hÝ0Œ£vo"³R³kdíÌN´¾ÜÈu(éHÉ)‡Ø!ÚZngåamœœê™qfÀ؇³I.ý|0Ó@&ÏÌŒû³cŒµÜø:臺³½'·OÁõîöÇ>Û{òO'VÓ€ :qÐ^â­íiÌñ-+GëŠG´¬5§È³â!8ßê0º‘]Ê!·ÑÃ|ôÞ|–\¶&O~¨ü¹Aìï*òm³z³ø¡È?­éšý)%½ýk“«¤ÔnZ¿»M€}¶ŸÊ=÷õl8ULßèÞ’Øm\` ÞÛ¸0Pß ´'uÁÜ—Å:ŸRd“;Ecg+®w¤%Ê·ÊÀ·Œú›G±zßVg‡g¶÷½Ä Åñlý4ì¥!ÑÆ>,Œ½mÆ|f±&'€Å¢™ÚΓÑ#;˜¹ D­õÈSð¹$ŠwÉžؘiL0·%•Éé&ïr1ÉOÃàÙv˜wvXë{rÛ(¯Ímø3W#‚ÅêÎö£uy'ûÓºK3ºµ‰5ºi±þBp0ý÷Sò¥íÚÑš…£'“;W :º Oea­ãÂØÿ€^sí3{¹Gn3ø`LéÉγ± ý|Œ­¾B\ØË…¯€kO;û® iœ¹ð­ØzËKÜØŸ™½´-aO>mnð"Af~YÕµÁõÛör´Ãd푉öìLfÛ©ÀÌmd×~·];˜)#äÅ:˜@&o›ÛÑŒ÷ä¶p†8¢±Gòƒ³,3¤„\Ø¡¿1ºinm/À$÷vpœ&Áq$]¸¾lz#g¾‚,Ò¹¶1éÉWÛË ž°.\·aZúš<ÿÜWu.ºLbkYû…¯€“CsÛò0á¼e&ä‰m ean¹h}ÝvÒºÀ¬êçg¹h;Çm’ól½ÝÓä3>˜îÉéönˆöF29Î'o§œ–ã¶ÈÍd²m‡ÉÚ×o2Ò!̲,MÜ“Okbð„Ç—O5ÿ$Q+3ƒ·Î„Ë"•½0öÈ:æÈÂ^."lƒ¼Š(… ‡âúP ͈†wÁ1 Í[#dÝÇÜnÈæ,<5˜"’ ùò#¦,-Bó…±O‹àxClR{Pp¸VµCÊž|·®8¿<‘ux¦E’zá¤EŠÜØw¯¼ý¦,ƒ5ø1*/"GÛÆ‘ÑÃOÔ¼92'"/r܆5Ud.ÌBæóž1IsrÛ¬c7$ìœóÑ©· i „Ü3˜ óuñ§!^uR7 )76n†ŽZ©ÌÂéËFæƒY¯žœÚ÷EH™ÁÂÊh¸ß¸Ù}«®õä–%Ìamã2k¿ù6‘ ;WÙ†ŸŒNÓÏq²ï²%\‰Y¬uP×ÞÔYÐÍòÇ™¤`/‹UÝÁ"Ýž|š½ž´yɘ\וÅô&ÀÈ“S¡¬!>ib ËâÊrR–¼i*‹xø¯§ªf¶ö¿žâ¦Á”¹sR"y`Wb,.¤ˆý+v;ØïöäÃþp¯Ž´²ÐNn<Ÿn0ƒªZ£|’µ%díä¶—G¤8ù™fÄöz÷OMNYã“ÒÄà=í\¬9îq(²Ðo}aŠ£odɾ"]²öÈ wa"\?äbHY6.LÇh¯'ö]§Ÿ'¯¬Ú41öeÐnì»l|Ë+KO3¸eÃà-,Ö,ðÜ›üÀGí+L‚îÂ}NëÛÞº¸ñ\_ua3k¯ ‹e{dòÖ…éÔàÕE̾(ÞÁÉG6yæjÔ tÔ$\Ï6¤=ùŠó,\—Õ7Sc_ç"n­;¦<𬳠ӵ‹Yg¾|k .B´º°XsŒÌ(Ì èÉé…éÂWÀÉ «Šcéçúg·½uçµãV‹| Êdí³ðt[×™Á;˜ïÉm£¼¾®ÅÑe"\õ/,ÓZõ/Š•˜M?XØKF§¾Ë2×»fÙûó±Ž_víÏë>ä_ßÂvÈgJv½hˆÅ"ïŒ}l¢í:““ÌÑ1ˆý´ q“—Ø?ä¿¿Øúí9É©]Ú“@ëdLJ­ÉsGn*.ÝÍœݳ# ̸ çãPÛ÷û^{òßX£sM1ÔOèŒÞ’‰Œn_“‡¨ýIÍmðή-2ŒnìÓb#ëÑ6á>Ÿ×,:kÚÞ9ºé°ÇPLò®ÙOÆAâD¸Þäq²½6š¸> î×Þée\*‡BkSæOÛÜ~3boâ3Çhïšœ^:â#Á‘‰v˜ˆv4õçÚ\ÕK‡ŽJÙO%¸žÜ0&éS“±Aœäqô7ëÄd]êzë‰'äèèI—aô©Ðv§ú¢ȇ‹QÞ/T-ÅFLÍPíùÖDùËùéÝž›åukqRcÚDç;Å2ßðrþÝ[byn¦gp‡ZÚCsi­‘ºÉëoU_ éø6Ä=¹…| ö^÷c'¹[ØË…§âh*;ê¤óTœHÿ¶ª;ë,rê'MžJ笷á+tibíè8ÿògÖŠå6ܬÑ}òÀ’ƒÙážÜvHf‡{r*u¶AFý¤ Öû¢#ä‘6eŽ–7?©Ëk[ä>â†Ì¯=·á©t‰Ú~Ž+O¥K÷ŠÌ:˜A&O ÐÜOrö%n¯§~’[¸ûóŽŽk-?õá݆¯0q5½í@åfÜQ\ZÒ˜›å^ÚÂÍr OÅö¿ÈÚ™7å(~¬Yë.9„œz*a‘.ÁÚÕp¾ÂÄOræ¥=ÚfgÒI=ÿÓ;ûð’ÖT“»Ò›Ï‘†Ïø¦Ö@Ùc.Õò-jó4¾ˆ9Ïò¼~r¨èÉÇîAÈÜÈÃyéæX¹Ìɇf0w‡ÂØÈý„<¬×.srkã™ï6N=)×Nà¥;ç½5:àC×È”“g6O»¥Æ;QR¾B*=¹Õ»®ËË»µÏ„+šS97 rò?ÙÞ6zDF?š|·‹§ÙqfÜŸ‚›‚|6ŽŒ‡ÐÏØ8ïñH³;ÇŸ),ï ¼êÁu.Ã蜓óg*KÄÀ‡|h›â| î`AÈE18ÅxØ<= ™<¸ò[=Eî‡ãòa’kÆÿQÅ™&¿V’k=ì»Õn‰ÉÞÞsÝŽÈñEºêzX¬ÈÔÚÏÉi1ã©ÇÔºÓyÕÂëì,ÖódÙÙYƒöˆË~*SÍÀµëaÒ@ &ÙØ+&!‘É[ß–Ì×,SŠ{kŸµûœ#ìºÑáj¾]"tu«ùò¼+LY¼Uÿ±…1 _áœïdÓáWM´ÎîàK¹½‹{süQ±Ëb5Ðp7y]Øo¯c“'Wݬ*4x…îΔP:dºyÿ1vº…v×­]&~Ò›\&û.Ö;¢o?iÞ¾¬#`€KkW#POÅ9Tþô¬d4x²™Ì%ªw¸¹ ìùÙ3—¸¶—8yØ—ˆµî,Ößo_æu¬@ /®òq_~­ªRs÷ì%3öqa/ß«bÖ:.›NOm5ù»bËܶg»ºÉËO}›!?ì㟙œ¸QÚå5·Š¼“e­kïDôä+_!L„vf­-/ Dkò½p9\b|V™;4cðÌ^nlo4ùøÍà7xÙÛÔ“O}…~{ǵSÙ|“ljt¬Œý$1I€øA¤/Ìm\Xk+j®Ò“Ï­uí )·ËD´Å”ºfn{Î;sò.P— n˜z;Ü“[ƒ´GÝjo‡-òë[£¹µìe{½ÖÇ?‹­ã¢5øB­±‰–irÂD­em/Ã$Æ0öY<˜ГÛv­î·Ön5û4SÝX» hŸ¸²°Ö=}œéèôÐ_‡§«b?½³ªÇª}™—굉¹•…µ^ØË§û™%Ú{B¶¤ãgY€Á{zpYƒ¬-–¬ýj‰3k=o ÖM~Ý^ÎÍÈlú±jÝæeÝ]{Ò]K“fquÔb­“ÉOÿ1²ïó~ÝäGs»ðpòÌ(ËN»ÏÁöäv›±µ¹Ýé?61öO±‰bf¼'·mú:ºMÔbI®ëÛÓ´¸þÌø×ÍdOn›Åõ¡ŸÖ·§3ÍÀÑ»€d÷—ɶÖpñ<¹·ÆÑ×/u~lšú»•íÉí;Öá@®×±Ö_wxëÛÓ­îgqÊùÀ¤cí#¦Ÿ¿}]ê’ÑgÂ5t×V÷Ë k6®~ÇkÕž|*\㥮5º™Î]Üž¦uh¾Ïº` ×p© ä®)÷FŸ…§7»úµ¯”Mrëêw0·_—º„¼»|]ÇÉj÷ù¹ú…oÍî/í{Q‹œt)[28± âõÝmZ\ýfüëFšL~t5æ½J}Þ¹=å—¯Hn‡§ãÅfO¾29ÌØç…µ^X¬¼0·óÖàr/înqôðÓ+ÿ´¿õ×½hO>ÍOò±yqs¼¸ØÌYŒwÂ=ù*< sÖÙ ^_<ç­è6ï\@òëϼx cqIš‘}_Ñ®ÃSÝ ÍÑíââ9ƒ±_7¨6„kÙ/¼©ùØ1è&“'™pn­Ëؼ@e×…¹wÁöuÝ.¬u]˜œEl]©Á :‘΢[ݳÑYh^‰¯¨ìB/žqtùid_M´78&£/ ^ýiíx9÷Õ"ÃÈcõ³Øzro]gÐ⃉#Eà•ÚËêܱjvíëF³ëIp¬Û QèÚ^Öè–ÇÖuÃØO|…úgæVw+üöT&kŸaƒ0ú'kŸ¿Ä±Tka1ð±j3þ!7„6·–¾®³Á«9.âËÉ›¾nôÊOst+™¼ÍëÂZ[·²íâ9œ ÀÎÜÜjrØl½T|O¾Š­ÉÁב§"“õäÿÖ)œæ–ÛËnòòÃè6œ²MΆsñfÅÜb…sžÎƒãŽü§ª^» Ô²1Tdí[ïL^N™|˜Ì1.d“›œp.ÀJš±z;jÄPYä ¬4ñºµo{Ke£G挨T8!@A“NjrR]¿MÎÒjnì;òÑZÏÆÐä¨ÅAPëÒD¸–/LQ°R8Zlq¤U7úOKqôè[öòË`ºž|ªÖiÜúa ™|Hn‚{er&‘¦TßFym/ݽ°—­£–ðŽZ­GgÐb™­[×ÝÊä@u‹—-66nf­&Ç-¢Û½ÉÛÒq¬ú„ëÑÿ޹u{ULÌSÁÉ϶7²o-ki‚[¼«±°Xnçmbn/ÝÂØÏƒcMnÚË Ù\ÀªWµ|‡j0e=ùÔÜN,–[<Œ±±öU«í‰±wæ–—!…Öl%Úi!Ú “3kµ½0·nÊž´ÚÖäÔØóB @zZ}嵫áÿìÐ÷`±»j ·§Ýèf‘L"¼?ëiõ!Ÿ^¾Ž7Òdí´‡=¹úíÈ7Pwð ‹5¿= «¾N ów·“èÖ[/Aõm¡èíi`m¡¾®h—ÀæŽuæÍñìDôÄÑÎJÁo\òûË9½»ÝØŸYc¦%Æ ‡æ¸è9šœn{'ÖÚ“W=® 39l†üðú3ð¦TpS·Fÿiálð Xõ¼áSXµÄB[ÔcŽƒ'¾\O‡U[(ûZ•“ÛSzýù!_»äê7¬šRͯ~ƒ'ÏXAG-ŠÊa#Âã÷—!üÑcJ!ü.:„El=ƪ[{øé±7Ç O%,¬õ¼£VØìëÄB´&G–¾BþjðœÛ\ûÆ#Z,º ®Æ$fáéÁî„|9nˆM\q²öÈnOvYLFë¼Â¸ï«;a~¥ÂNŽ›¶› áÏ"ǰF1Í\˜°¸£~ê_”}ÛK&wlœºoíXÇé«–Kö}kOnß_.ïECX„½‹¸5lÝ“,ó´WÖó-ÞÛÈüØ49øâÎ[L˜—åÅÅ ó7Bäm.DM^æ“·’¾A=—Ó=û`‘X´ÑÃzôñ ‚€ÌëÞƒ˜5Çi¢ü‘÷A,oä«ñôAOþ7_w­)Ub§öäª0i̤_4!oÞ”ÊëŒL^"!×ß’O®s%u³‡¤ö6nC¸H>VÖhró‰ûñžÜ*@ÖïÑ÷Bë*•øÍ>}Ý¡[{0¥£Û8¯®×ptù;еzš¢ËE‹²ªqã)§>U*‰“§œpt¯r‘—!Eu“×B¤Ï’75Cƒöð‚¹öá ’Æ÷¥'Ÿ¿xSªâÔS[äMNßWp½/Lrë%(û儞|Å`ò¾BÀ~^ ²}ÕàÓ@n•`•õãAÀàQÐ=¸jtáEP>«§œºÑé©ÀÎãIG­˜ÖŽŽÙè~>ú`U‹¸leƒ¿‹uæ+X½÷÷ëu‘d“óxSáOb­Õ `AÈ[L%—TÖÆ^À^Òd%˜ñ‘Üò“>!Újß­g¬‚9«÷:ƒü™¯ ´üÌU¿öÒ„7WI¬Ë{Âù8™ãÌ^ûþźž|0 éX˜áÏÏÓít¸ê{òé™4qtdÃÑé“ÔÉ[¬ëÒíò¼Y9ñ“„¿y0ïÈeµvú”SÚ!ÄÙÛ8±oeµ‹Ùy@æèƒ½³SäRLòÑ"Iênã,W£Ôo'oæàœÍ:þÜT?z5R“ëlýWŽ#%X†ÅJÌ£8l/ ãPb.åè„ÈÚ©›ÕíF_¹J6_Oæåÿýº^øœ›Þu¹Ï¡â»×µ?>|G®ŸI¾ß¿üØ vWþöèð ¶ûæü{Z þ¨õ@Öúó¼\÷¬ /çË$ïÞÆ{&ï øºæR-ò óI_ï—5Ö)òX>BÛGšsíæ«"SŠÉë«á³qÁÁªB2yE^â“Íò`/Ósm÷&‡œ÷Jl _á“Eîá¡bqwîñDÌÐÆgŽê[.†|Œ;z3%f“ß^÷ŽH|2áü÷ó?-\ójZñ‰[‡Ñ5ëÚ…v·£§M`ŽE© ÈSrØDK6ëw£â÷è`ãb%£ƒÞlÄìÞ%ä¼<ßüVcLX'ƒKh‡İvy–(¸D{íõã¾uäðD´ ú´‘Éi#¦l¶ü~'ó½Ô‰%6×ä]Ó8A]2ÉAãji¸AØ8×+¬XbsVá°Äñ&0ÉÁ”i…EÛÙë{zÖ®ÉÓc"qUçS­Šä(\¥ˆ’yý»gH¹ƒ4J€}O“}O¦pµ}GeÎù4Êü÷ëàMÌÑÁÊÉ«ãB&ç|›¼Ä=ÚAî|ú$W;rýœ·WŸs^ºÓ¦}×£ËóDg'6]”sK;“<õA\r¶19Å™ä`/]~"<Ï Ž4vX}+œì°sÌrJ„Ü™!ŸÐ…{íp9áä¹]<+sôÎSɟΉýCY^æèxvħ%I€ Î±ƒ3ÉŸ5š>HIg1É{µÏ7“óÑyŸPoÎëBdt0¤Ïc–áþdœ=ÙôëRQjí©BýîœEŽûãCumòàØäÉ‘'Ú뙢Œ‰$Ây,Ml"˜ GȵŸ$Oê݇NêLòN±|ƒ›â–¤RLò¬Çë¢áÂ|iƒ'£GsôÞóíT†y¾Ìmw6ygʲñ\Ñ„½vŒxZ/™ÎŠÊ˜4$hÿÈL¨ÈÃ!±9”1öÑ$ïàâe“\ºRl7«—1íZ¬J6e¢X¶ƒ«ö6î²Þ$ǰªíOðÿ5ŒþûùŸÞŸÃvœO“u;¤NpòЏJÖŽB1ϤA­Å:;Ô‘†ÎcÐá´·Üoí5cÂû´!BÛ©5|ËpDï¹ø>颸j‘£j_œ<ð¢5yçé§t˜Î½øDÖ.ƒ«aºÁ&ë:O2ŠÊhž:çLò.PxRï®C"äx&µ›ôί]Œ&9Dx×A’IøãÍ}ï‚/å¡vNxç#’øEK D¤NÇ¥äæ#&rœ+´ªÇ»Ò"ÇÎmW/€—>â“öø¸`ŽÞ%Ùr¶}DÉÉ$gì:aÜa9®¨ã<ÐТ„nZµô俟ÿ=ÿbx™Nž×é=ºž£ó¡eKºØ@Å­¸qzò!VE‹¼O‚Š¶×š£‡.­Ý iÒLy=øŠnò 9ߪ.¨S'­&ÇÉK –›u•‘ƒî*KªWÂ:ífÕ\Í\sÕ\{€ýq 2fß›<G4¶ïÙmœ™¾„ˆäèÈèÝÚ]}G¤}cåKÌÑy”«3ŒgL™L^/1ät˜ö½t-ΟUÖELŸŽp¾‹žì$Æ:=Çó¹Pðà]Þ[1'1{~^gÔÒümàÍÉwiJ¦Æ9)•p^ âÜõ;…D8¯}D×L¤^Õed’#k×±›'©Ýp¦d’».+æAíj49ïñvºTäZ„³1¸²EŽf\ÏÑãïvÒ!Öß`æ‘CÃet5Á]`sÚk×üµ‹$2 Á"ïn-”f€cvVæè]æ>;_‘ÉÚ»ëçÎýºáL3ðtO¢)t—b®O.‚EŸ¶?ÒäQ~±Ô *ÓŸ öµƒæDxéÉ?ÿ³< ŒtûCE‰}* ð‚iœ6ecÆÚÕЊå|ì–˜XüBªè-òînÃ?ýÒ½)]|Þ-Eò.1P‚;XÐ`Nb7i%ÈàÛy$¬ÓqkÔ^„UÂFÓ;÷]&¢Ú£CØ{…~ÉÔK—R$äêH»á3ÍSIO%=sÔKl°õpâÚ³)6˜ pùñPûTÂYˆØˆíwqvöDh1œf²åvÛMòþòHšØèµûÎOJfÔÜ2„¨ïV©Z˜€QYÌÏ ÏVU‹<⽯7füÝj’ 6á)ˆ±ƒÒstŒš[ T@×õTá´ýìÐBÏèX¦œ˜£c-Lx~÷:ë!wÀàGæ ~lò¤¿åRý(lòøMr„˧Í^ÿF“VXÜw=H3&R Žp>Àè>·µy"upOx¹×Šóúƒ¬ŽJ=z@Ö=täÉZÜ÷øp^PhOo ­ çË“yœÙ8Aœ–‹ÏiƒÓrÁV¨:¼T—,Ñöùõýr"’I.x*< MéîHƒ=zêPÑT,—:Å txp"rÛ^€á±È‹˜äqòbîb·`Ž^»%:óH`Œ&ÇsóÔk‡Ÿ$2yØŸ'nEټ⛼cpPÂ…®«Éº‘}h¨÷€žoHÞ$ÇàøÛ#Ïcj R×]Y@r«×Þ‰ÍÓ1ö÷Ã-Ø¢'"*ƒáO8,q¼§e‘t BR‡UœVñYb4…6@’ ¸êÍÉ×n×ô=Nô=>Ûí,^ÿ‹D“¼¿' MhãDhã#›e³u¥Ù=¡çÛÎ:¡×ËzônŽí î²dÂFK±îñ° €Óh.MއJ;.ÐÊÜg¨IŽ!ezJòÐ~ g]4mÑ©YÐôšB‹¬kOŒ3¬G¡{&îAdÙkã ¾ÅÆÙúÞ1ø¢ýN›hÙ¢áHKù ÷pãœä`’ã5½;Õq9yÉ&9f œ+M6¡õG`“‡\Úc cÂÅ"Ç#ͧf »µw‘É*O:ìBMæèïLÚ=aƵ8‹<ÖníáÊ/¯Ð›äh j -|wÖ™œÇsÓ§9»Š±Ó]:Üy=¬£Ò‰½ïhL\ˆÊ÷„ Ôir>âx|²£±« ª¶ØäŽóÒ&Hõë° œÊD蜼/¦Ê$¦;Bjê>/çV £qH žæèË'‡ NÏoAНá3/’I»[‹”ÌSÁ¹MrÌS%íb VÖ“Ñ“tK—}“j’ý<££Ô]zéLrȺò q|é2Eé‘ .b$Ù$‹9ºœ]~²˜¢í’؇x·ò$þQeB 6yW•‡ jÙw-uî¹l£ë²-6‚pŸèMcrU•ÌëÁ.ÄŒiÓÉÆÁ NÅ„P„ÑyiéÙŸdfÉ$¢@d!œG±)MhµÂjî;ÔZ¸ji>)C*€YéP=kÄŒì@8nGïßÂ8Æš&ù€l9 É$§H)Ž‘°Ç*Éèd„™£  5ÐJ67È‹ì€$Ž9ú€§Z#¥d£6‚˜ÌÑÿVI60j#€‹ŒÞá©Öø¼Ö!ÒÀf‚’ôá`8 “|€å¬Q#²û@Læè ò2âALr6‘8&ù€§ZaÈRŠcV¼­¡NB+ äI£Œ@“|€å EFïÀ`p™äžj 6’¨Ó€¼3…–ƒÁ„Áá5šk³ôä¿7ßRkމ ,ÿˆ…±È9^‡Ã>0+Ñ”Í bFv N5";X¥ c’xª5^G³"6ü’üpã:8Ö«$h¡Äd -ÃëŒð1“œBÜ8BNvRòÎ$çP4Ù>pÀ,@' à…l@^& “Ög%ŽÈ–ƒáAÌÑ\ÍÁ@L&ù€êY£…4ù€-Y£Fd«4B¨È¾w¸šƒÁÇÈÆÙ— ÈLæÕ‚¡"¬»`À™£3¬Ò£&´y@ËŒ*“œìF ÔCž6@'ìBÚA q¸OÚANpÜFÚÀëŒ(“|@¶ ‘a’À‹ƒY,rŠY™ fÒÔi‚YÑ“Mk UÚ€ûLPbȺŽu0ü™| ZCÜ ä:8V˃0¤TÚ@JØ7²ïªç`ð1sßVi‚K3”|+0xƯ“àú?Ø—‘ É$gàƒ Ø(m`VF ¹öÕs0Y» ¼˜`•ùˆê9È$gpŸ Ô)m`VF,ŒI>àjÖ¨‘´×aD„ó6èdÄ™“0EkÌ n\°‘數Oäp¡móŠï`è3“ušë`È;º’´¥ páh•63ÀMäD‡«9˜Å"Á!C☓€1C£˜ä,g ÷I¸ \¸0í …8‰Éù͵†û¤ÐÊNÚ’Ñ£ m 4æè0f×I;h!Ž×I3ÈËâ–âÖáj†Ä1×Îðy¸OÚØMRi%6âþÈäÃäD†¯8–¸€À‹[r°Ì£I>À3ÖØ…¸W³†û¤=äD#"£ÔÇë¤ ÌÊ5’6ÀF#Å$Mk¸OÚÁi ð1“|À’­7iâ6 ÏLò·Æ¨¥¬Ò€2ÉNkÄ™ä§5ÀÇÈè¦h °ÓäÍ•63#˜Å$gˆ™Ìb‘¸š5ÜG‘Ø’5äÉ;DÓ5‚kïÀ!kÌŠ}ÀÕ¬á>iî3èÑ8Ö)•6ÐB¨SÚ™ð1²vò2BiÈè6Èl„™ä ê4ܤ ´ÐˆB2Uf@ñ ÷gŽÎ€V°QÞèp3‚Yzòßâóï:“^Cd˜£³9# É$§ Þ¦%³Æí7¢iÛÈx Ð*ï`•xwŸ¼Ñ–iòXä#¢i ¸ÉH©Io¡¼¸á`£Ì{ÞYüòŸ5ÄÊ;8Ø(³n·ªÅæ•7€“æ@`Á¾À,9oÏû¼äìã÷ƒÍÐçˆIN±JÈ"7#-P#ùϺûdÞwô”5R*oÀ¼&pŸ¼Ñi÷É;­‰8J 'L<È39?àuŽec$”º`ÂI& ³<Á·„aK†È°Èy‡Þ(ï/8V)ïn !ÍÅñ:y£-Ó³’÷pZ N’œV÷v³va8V)OúÍæcÙÝ'ïà´xW§ pŸhŸÇ¼-SÞ™MÀF™6ËmÄÄDdž€8R*oõÊh¡ ÜG‘¨ž5r"ïuyé&9Ã*($sòÌ ä«Ô=h­5ƒƒNòVi¸ÉÖš(ï5…bíyòNw6Ê;=¥’9y´šà´òÛÕÐ*ïô”âý´Pe:0رìh•O¿.@ᕚœ¹×Ө̫˜°sÂwBJ¿l[: «ü2*›6~]=Ãë4ù¤z†ßàè$œžåü²niÒªW“[!å×)öù]ò+U²ïfLˆ'/‘›œÿ;¥?zòCä¸Ìûu4>KdøuáÑéšä³ß¯‹%fq«__¼+­†½¼Þ@“³Z‹IßQM>I;áÿ“"M΂¯I•‹"§=q§§_Æn“B=yZé1 ùý´Ê¦Z/3¼4KN«\f!¿_ñVÊoò÷ÁñàÛIwøu`3 «ü²]í¤~En•A`¸fnܲmééöäo։ɺI»Z=yÚgxNûe8=)¾AÖÙµ;ӘЯëWfñ–_çA†hÏ$‚îƒe8Lò!rÜI£øe4>‡ý:žåAü²Iò¤ÓïM¾ª˜Ô†(ò1¨Û‰·ü2æ˜ÔGhòIqGŒ˜kg1ǤBANCÕYœí—Qþ¿›ä¬ýñ¤­&§Áâ<ÞJ,¤lŽsš8ÎËN²³XÓ¯Ûy²ï#=ãí‡YôüIœ79&H>¶h'ÃáyUÎó­`ü®Hf] P-[=WË^ßÑ®FÀ}(8–EËŸõ\ŵwBDzYnù³FÁe§z†—þ”vµ“£…G]‘ÌÁÊ©LrZ=3ÔC±é „VØbŽN+‡xñMÙiÌ»Ýjò¡8j]=ó&Ÿ ªÂÇ)˜ýPGÖκèølx,¯ž);}Gy)@Y”x =-% ca‹E>–è¬Ë "x×<©*Ðå8˜±6Äœ<­áà cËN¯*;…G¼Û-ŠMW¦²®ž)…G“²Ógx¨Æ"äÁ„ÃOjwÊNåïr\6ÊÝÆJ4“œ•¿L ÎÊFñͤä«lô—ž]•½^»q²qË2^RvZõõ&9­$àUe§U/¯ž);mKyCÒ²S»Ã+‡Ê^£à8‘ùUíΤÏpf¹Ñ>çy§ß²Óé—W ç»Ê®uÍVÙ(<šô›-OS¨ÕœˆIÍVÙ(ºšT•‚3^=S6š$Oêb txf¥Yšåvë²Ó,w(p°Èyõ ¯$(Öõ´lt=kCLrÚ0v¨Ê!œÿq›â²Sþ ÊNñ ¯š*;~y«Þ-[»ê¦u G&É]mÕÁJKÈäIù oW‹¬ëª›Že{êB‘R*°Ê©Ìɳr·I‹æ²S»Ã+ÆptV[U Š¢«µX"”f¹¼ü¥ltúôÚÕäC©Æºô§ìT 5AdòvéϤMqÙi–Ëk8¼+ÑY—A(Âèꋎe³Ü²S¿2T¦˜ä´‚„ ”n·CQ9:­ÝJÉLγš­IÑ•}(O:X=”|ñN¿e£ôgR³u…<*ÑÔ¥£Žeg£79fŠ\„üñ˜À²FçÏiÍR|~Úšèøÿ&¿â….ñ¯Èyzs–öËÄò4ÿå×ùIÞ|FoœÕžgÑWIOž½@7iŒ¤'?y…µ&Òä4©>ËÍú?iˤYG{ ñv\šœ&Wg7~ùþÝ4©îÿìBÁ/ß=œ´¤* )e>†5Sã–M‡fé3¿Ì]ߺ0²þÙëaZ)ÙE¡“^Hu§/Œ¬;­”x-qÝi'Ä{`Õ>P“jÞºñðÚ¤ª³n4r‹MMrÚFŠ××îc¼TÝj¥TwàâÍŒêNO^X¡#Od $d¢ðV…fFcÙìï§,=Ò–m¤x a…†>¤|’¿Wwž>㥣uãé³IÕmÝéÄÄßm«;˜x#§ºÓ̈WWx1Ö½ÊäTX>¸Ç+OëÖÃkuçõ0þvYÝxkR)X¡])8i¥TO`ý~Z©RÅZUÇNž}«-u&õ©u§•¯’¬ý€&eޏö®šñX¶Ðªœ&å­È:»:v¬{µÈy7"Þ‰©n<÷7éÄT7xMj²Qãº*ÖcÙĪÎ:³˶2úÂг<*ûܽ¦±ñÎÁ¢=st+.Bç~èQ¡ÝØx ×ÈÚIsßYTæ×jyGžºÓ‰iùµ]’À"ç‰ Þ™¸n4rš4u®-´¦!åFªY0¯÷½ËËZºPÙyifÒ¼ ¾µ Pu§ÿ×,Wã—A÷4ÝÑT†¶Rš¥;6ºÒð~@Šœu“–:u£#Ï4¨óëöº¼ÉkÝéFÄúTè‰ÓE&Dz’&ÏcÙ ©n´‘št&®Ï¥y{UíD¤m¤f‰Œ^³˜°MžõÀe2:ÉÌ2~™…™te®;­”fÑø¼© ‹¦ï¹Š·¦Ñž_6Ló†>Ë0}Ý ié®9M£|¿î=Ë›ÕYKcÙĪ> }ÒØòh'ÒõëvͼßrÝiäÄ{Whàe‡é“&Vu£}Ø4ǰÑ>l–cX7ðš´Ó£ÓvOîÜx™÷r†þç¯iÈ?$[å“´êCN«}xÙ†& –µFëháDWdNž>O f€œU¼ð:«ŽuäyZk¬£ÏaÓ~@@N[hÑ^ÀyVc6–@™kgm¤xÁ Ó6R´ÖÈY.^íÓ‘“æeC ™¼tÈ'ÍŒH­Ó¢‘¡†É"§m¤ÆR˜žÜÀ*íôêF'qÓZ°ö¡2eY0£Ó—Äi®NæÉ òô!r §Ýˆh¹N·vÒÀ‹V:9í}F[hùPµ¬tê„–s}}kÕZ…÷ÄrÚNˆ¶9{U™¿( äì-o^¤Éy3#ÚF§%E´ÀF§qÓ—Äat«.f^Øä¬]“ÓNL¼VÇ:»:ƒwëè3è´S'óv5¯‡‚µ³&V¼  Èiÿ¯¡\‡l©ƒ£½Ï:…íÊ_lYï<Êê©ö¯o- P(–_“õK,¿&çí„h[¶R¢µ;°öŸ×îÀè´ø†VÀè´øf¨Î0YG_§•C0úP¢³¬žòÉSà¤~¥Ûw»‚„—þtk'µ;´n &Ï*‡x+%•þŒõPDeH(ú|§°vó2Þ… ÈY)^-çΧR¢½x3£¹Ž:XöÍ"§Mö§ÉU¿ÌSñ¶2šœ'Wg9ºž8´S7:ÉŠÏÒÚ~ݧ~–XÞh¡5Ë ¯;1ñnD@ΚXM“«~š}_$‘Z@Θæ¥×ý¿ø ÀyÚk–6ÝèBEÛÜùÞIín4µ¡Y€œæþf©C¿LŸMsëž8cFÓ$§MÜgI[=ù.Áx°Ä˜EÎs´•R7º>›f]×M¬x(`ÕÀ¾•v`tÚž¶Ðú#"¶k¢0½iÐý¿ºôæÎMƒ_'ëgWëfFã„9:KÚNs¾½Ïf×$~}IC›Xu“ïî#ŽU+˜<}áë[9º8ÙÞU¦hš§òÓ,bßLS¶l4?ËÍ®›Mó“~ùBoäÔ­ÝîS?fÛÍч<â±ê£ÿ¼…ŒN»PÍršuÑ<¦7ëFNÓûÝ ©K½«vB0y–“Ÿ&Wý²G?ïÄÔ ­ÙÌ(=–ÌÑYV|¼&!RGÚ‡Ñÿî„Ö*¤ú,…ä—‰Ëiòn£©Í,ãìUî¯Ko«.ßšœgœg9ß–:´#pžö¿§]¨`tšq¦ }`ô!½¹“q6P¡}¨YRpÝÄjš6]·‘šÞ4øõU}uXG“¶´ŒÎ’¶¼T'6v©é=‡…EzMó\ÿFó²Ù=‡_gõfy5¿î«?Ëê5ò!q¹“S\wbš&Æ6ºÒÐé@þó6R0y– ^¤åV }Æ5Ù8û`ÌÓšk§} f—­Ðq>VÍŒ€œ&ƒgÙÜu;¡é%Àºo¥“§ ³;¿~€vàêT¦»ã9XŠû!wžÔŠÄ¦åª²qŠ\°N1ÒñX'D}Qá|»Ì‰r õèè”úS‘ëß­Ê£v xÖ6:øu!¶F`]†PÕ‹ ¸Œ—Éù.`j5¿]vç ¸ÌÑ ¸ÄÞg*{™Xsí]vÇ?Yü€uVª‘°Ó(õá¼t帾Î3£0OS ¬ƒÊàöC·ªZÉÚ1íÛä±X{ ÿ}?+ ¸¿èãJ˜lL¦Ì ¦Œ«~Ò i&ëídð}Všä˜´"vf+Ø «c_AÇsTV,XVa c0Ôˇãä»È‡9 Ç@ ¦}’­°Ý FéN;ÒMŽ¡ÿc¶È1Öôùy·Ó÷âíÑ19xP™j“{,ñlÏ•uÉ!Mò>¿Rl×,r<}3e(·Ô™¬ëy¤C0ó2›<Ü®µG¤1Yß›²hª_I ˆëêØ`FØ ž Ù÷ˆ'W›|œœÇæ¬&[­ƒïÎÞµó8N,¡  ú9ø]oï{èKšÐFô.9hƳï]²Ñ…í&ŸÕ¡'‡Š Öf¼«4öä#L¾¨èƒ –ÐÎæJkMßUïw'pƒ«ß{…!–h_§…7sKg6yWê×Üv¬{ugíÉß'¶Æu©)ÏFÅ¢Î]6ÉqßócH‘ó.ª3MÞU[çbçÕz“ÑH}k–¦û³“:;³Õ"Ý.k¤£=g¿nxŸ*5ÛMï͵÷É¡l?EqçáMÖuÉ»b¿nxYŸB„–Ø^4nã*Y;ô7ÐG¥Žò%˜kïrKñAQt—~gB§(ûŽ<5e¾Ë½ÌÉÄeêÑó(¹ ¼/:…til5ÉOD6'Ã*}§Éó—ú<äПÍ;å¥yZL¯LY‚i…dî» æ±xòú¤vp59~«åèè$2EUe"_Tˆ[s&PÙ*DhÞ×.ÍK'&yëÌÁ“*¤×iíë$Èi*¤¡ ’œ|0óˆ±ÔÃvOo‘ãÆùä\SØ0QX3Åç½N0z}5³IŽ ³æ^㎫¹öÞW3ëZcÄ·gÁQšÃ™ÉèV%€Í”Íɇԥø"AÚ*Xšç•æÊ¥KX‡Ó½CĶf’=²Ú‡ûJ9ì”qMæÚ;¨lË{âEEPÐx”:WÕ d>d²ö€xr ìÑ»Ô{ &L7V‚ó.Ö@[Ÿu˜ÉŽæä» ÄœìëŒÓÞwt"î+ÚÃJE_¾¹öîÌ ZƒhÇOíg}Ë&y—ŸtÍÁÅ,L Ñ$ïÐ5Û¨Ã^¸¢ü’Ž÷'j´N…ûà3ÓÚƒ£ÁeφÎw‘}l1!&W{½´óÒÍuiÓÔRÍ…ÀEŽëZ#kcPÉÚÃ` èi‹ÍR®æ5£ï]×8|˜h«œÞ”™w¢) SFîà*{¸3™kïnlR«tÊÝè•hœú–”§™7*·•!Ç^BãÅ’çÅÊ¥}#“¼@:‹ìtQµ"ï3ìÁ‘ nLæèckqæ½APM^atLVŠ3ƒ+É™äxn^’F_ &yïóÅÆ&žµ’ÉC›ÕvgR(ÄM“#*T¹7È]`#‚XM@í5w{ã:쨮õÄ8›¬ÃDmj·U ó_6y‡ËüÎ9Æ$ød³S| ú€Ç¹wÉTAÀs)äÒÃåDÈ@äÊÊÄÚ—]Y·õƒœ¹ïÝVP]Ÿ$ÈëÁé#¹Óê•|Èùúûùì×óRcG®à`‡»Vò7¨®¾> Ö޼•æGq¯ü\”¸µ’P_õÓ¨#Ïý·>4Ö®¾Š39¯ž{¾÷G=6­½—ÝË&5ú-ŸÏsƒX÷T‡ yhœ—t‘W vΗóUŠ7Éßï½âsM£áéîúãeÞæXK½8¯z¯=£ßÏ\žæèªG­á¾ ~9ækUæ¾·æµ×AT^Y_ ? [ÝëyT­#W8ðååT’ö»y°É¹Xåu»Âçýì^Ø‘+Ät¾¤6•Fž}y=u9H® ôùb°z O³Î½ÎOMxGÞXWr}9ÝãüCž\~[e4„>'ÿŠF—Œ»Sõë4J´¿NŽò:þùà:z^Ž0òªyZ^¶Â¦‡u1~mû‡<5Ö…{UÅܸäõÚS[{zXwé«{…`žuéáÐýû+>ýIïÁ»à/+#æÆµhå®yµŽËçƒô•TòÅ9sò烘η)+ÍÆ} åï×So3aJÝù ‘Sº¬Ayî”ÏúÒŸ/U4×~–Ö Ýßzéšùy<§|)/ó VPj]õ¯f~šã%£M®=iÀ«™Ÿöçmò‡u’å:ëž®õˆ—.Õb©Ô«™Ÿò†”¯×èmß]c]ò—&ÖBŒÔç[åÖW¯ÞF}>Ûü˜ç!Fåq|cd*ó^7W¹¾˜^ÇølüµüËN™ä©‰MI—ªWiýG—ä²Õ¶°Mê.³ôrÜW=ØûÎ~ŽÍô¶µ×WræÆ…¦°þ:P«n ¦¤Î =¶%ÞNikŸ!Hþ²í»*¸äÿš¥Q6âS./ó Vmm®!.½¶šhùzV̾7µ¾m™7ŠRbµncu•éeT™]çyÙ¹. ÷q^Ž¡wú}¤¼|$öý›klU™ûˆ}ï–h+ñµë² ×…@é»BìûgŽ)ŸJlt‡©oU$öýùV¾|˜¬ª½ÖI¾ ?±ïÏau×e”Ì”+H’Dì;!׬»‚¤ê‰}+ÔëDlíá“6ávj‰}WŠu=¯fß?¿nM¶ÝÂô°ÎeŸ®íÉÍð49\†ÿéè;¡áý%wæ×ùô»i HmâÅ”B‚ÐðñÞ’{•far<çû ‰$}~…€—~ ¦Ï žÝ¥pÅÖ÷óƒ/w7–Q™ÈóÇ»K´. ôIm„œWAhh‡•?‰{ 3#—$„¶|ö¾;]ÍâR(* Od{þ˜Hú!wG‘µþî„òƺóŽNí}wŠu©\ÑHl†¿­ª^enœo¬»T앞7¯Ywñ7Ö]žý«A€}„-‰véuŽCÎæ]¤&6éËø™äëümdâÃ:ßXwù³/!äº/`¼T+5ÃßM‹àóé2Ã¥þ pgûóPCå||¤®õOò>g6yÝLé&©ºÎÏè× ëZAÈÅ…/CÇ2ç%©û…kðöއb]!FJדd^O…Öìí:HšäuÎ]–ð©ãÖB×9òr¶sÒXw9ÊÆ©w…glò¹ÿ–Qô½*“¼’µë"(N®kò턨øçƒ»)­tÒ-ûîcMw˜j¿{ùÚö¾«¦:÷¹õ?Ö¹3eþ«2¤Ën‡•ª ›‘kÖ…³…ÿéa]¼Õj‡I›‰ þѸ¤Ïº+¶{ð°.H½Dþ1Ðéa+.2KJaïöå›áhøIøÑ h†?¢á'áD/ þˆ†Ÿ„ÿ½€fø#~þGôšáhøIøÑ h†?¢á'áD/ þˆ†Ÿ„ÿ½€føã†}Oý·šáß!o¬{{Íð?“¿6å¹DÂÿ¶ÄzÅù±þÏ5^çtÌ$üoäñÎ24ÃÿùàÒ‹W´]b¯‹êRhÖë¾LÇ­Š$üÏæ\Âõ)ßXçc¸ ÿcKîÜw#Íð«UeAŸý›á>H—ÐÛ§MxXw¿åðrO@ênÃOÂÿˆ^À1ötû6ü$üè}=âÇð“ð?¢pŒ˾ ? ÿ#zÇX‹91‘uo/àj1߆Ÿ„ÿ½€cxäâmøIømûžûHømߦî¬]=¢{ Y÷eøIøÑ 8ÆæŽß†Ÿ„ÿ½€ch¤ö6ü$ühƱÂôÛð“ðŸkÖ…“œuéa]¼…®>7#I›‰p«, ÿ•b…’TøÑð“ð¿q¾žç㧇u^užËòËÆÔK4ŸÇŒì澸 @"á¿°;è÷×ñY^bßžŸ¾f¾Þ‘”{šÌœO9Öe÷är" ÿ…ÝA¹Nš×S :„ÿÂî ¥nï ÿ…ÝA·| ÂÂawОÞùù ÿžDNý$üvýaÝyßH&á¿ Ð ¿ á'á¿ Ð ¿ á'á¿ Ð ¿ á'ῘÖ?¬û~þ zÍð ~þ zÍðËÚ9 Jê¾½€fø ? ÿ•ÔݾóÑ7ôáÒ8Gà o¹ U?9½¾+\ò¯,¬jßw_Žû®ûäÝ™ðÖ[±î:h™V¬ÃðÆ:—;*Uy¬ó×aa–Ç^çKï7Ö]îEn1l«›½Sz¯`çmÚÃ;Ÿoceñ÷ªHøo¯]—Ýrr]ƒ›S|µžTuï{}þ+ÑN-餋s‹K,½¯X÷}É U»ï‹yþ ^òCµöŒX§nFÒúá'á¿ Ð ¿ á'áÿGeòe‡Ós—ë¾ ? ÿ½€føÓÛÏ÷×îÉúƒžu5뛑óip õ²ð?}Ìø%ŸU…ÿïѳûrÔ# ÿÓç¤s7@NšáO:ù—Ï„ÿ鹯½Nc§Âÿ¼r9Oþ'}{ªð?©­,,üoßòÉ‹ ÿ“ºýgä­ Â¥T—!öÍð§–—Íð'Ìû“ð?á%@3ü óþ$üOæÝDPR÷÷'áÂK€Ãèì<‘ùÖø:ê«êð_M뢑ðÿ]€¼±.ÿ. ÿòS4¹fÝÁòuXâs¬Ë±Ö«÷Ûó­cËç½HÕÝM¾Ž•×Ñ¿>vŃœ¼±.ܪnÿ»Høß-ñÛžðµËIÈX—ÉMhë–sbšuðtÚ*eá¿DÚèu)d¶öÖ–Æ]*®G×=¿ÈÚ #¯¸v[êÒúÏ%@3ü óþ$üOx Ð z°¢éåì8.=¬û\4ß0ïß“ÿÕµ¹NÝo÷W×¢Ü_¹®Ø½ˆFµ*—%³É±~!7òª?H·ñ«#¹;±ü!|Ȭê:’ÌÑZbJ_ƒ„ï qÁeülr]åî‚´ÑSRþþ]ƒ\Þ'õ³vè r<6ëZ»+)—x¼' BÌÆQùW_$ïÒ3º®‚¾7Äk÷]>Ù÷ 2°ïáYúlß?ߺ|ºû[mßÕÕødß?¬ö=¨äß÷ðG·ïჀšîû3ùØíû“È+³}ŸTðµñ°ï-ÕyÍ+±}W)ÉûþÜ÷L÷=jBï{l9À÷=>9†¶q_ûþ\ÖÙ¾ÇÚí{[ûlßßWŽã¾·ôþlߟ{³Xìûûwó—ЖLöý™|¿ï-­0Ûwùìû­ï_(¯¿t×—â}kaI4‰¯8¯š|í'ßwˆ5õ¾·lÔ™ø¾?iŸÐíû“x‘Ù¾?“—nßEáæø¾ËûâhØwi·°“}—§¾¡Û÷÷ï.ö]ž’œnßS}²ïïH7Ê tÿBqÿ¥Áøû”wæèÐÝ#÷ûž”yæû®B`Ü÷ÔnF*ß÷ “Ï{ôÒö½Eæ³}·&ï€u2Û÷ô޵jíöý“úx@öý Uû}ÿîbßS;.Þ¬Ó­â~]ñ`>o¼fO޽Þ~…šÓCÞZ~ýºT­¤töú•r¬o§Tw~ú%ñšã+õqºMЯà]ª/÷U¥¥ûÀüº«¬î´‘Eþiîñë.†*áåÊ›¼uoø•nlÆë¬ùS…ÿKªÄôÊç›<«Ñ³¿K߬Ñuéí/‡¡ñŸÿø·ÿ¿þå?ÿåŸÿøÿGšèƒ‡DyLP-1.10.4/Data/Netlib/greenbea.mps.gz0000644000175200017520000045167410430174061016066 0ustar coincoin‹OK®9greenbea.mps¤}[–ê:ÏíûãïØ|‰/Iüuƒ¡Š „ ýoÈÉ…ÈQ$9…k?ìQY0ñŒìÈ’=åœ6åÛ þûø~{;mß6ÿ÷ÿ¾?oÕÿý¿UûÙfó±îþ¯vèꈮJtuCW?Ó«í]ÑÕ÷ôê}ó_©éÕâòö‰®ªéÕúæÝцp‡ººN¯Ê=ºBŸÞÑjá„lv²Ó«OôÙçizuF–¨ðÕºJ§WÔúµpA–¿"»\W j½yAWÈ‚M=½ºOq‡Ëw¸Í¯6ïýÕÇjµ}í˜mNÃgÛ׺úš^½ã« ºj¦W§7tµGWGt5ýÍ—ËûúuÒzÏ솘ݳbvC\Æ«ãÇôj`vCÌnˆÙ 1»!fãgÿël½Ý<®6/èj‡®ŽèªDWºº¡«tuŸ^mQëÛ-ºB\¶¯èê ]Ðâ¹E<·'tõ‰®¾ÐÕ7ºB÷·½ «+ºªÑ²ÄYbÛ +ƒ®ìôêYéµðŠúèYâÝûº‡÷è Ýû;º÷wŒC÷þŽîïÝÑúÍd¥º£º‡Ý]¡ÞÜ¡;Ú¡ÞÜ!»ì—=Yût…Zߣöö¨…=º£=ê£w@ãó€Z8 K‘%Žˆçñ<"»QÿÏ#ê±#ê±µW¢§ª|GW‡XŸ—ârB–8!›Ð(ÿD\>îÝÑ}óŒ¬tFÖ=#.g4>¿îY÷Ým…Ú«®B}[¡Ö+Ôz…Z¿ [_ÐÝ^и¾ çé+úfZ¯Ñ˜¿¡{øAW Â5èɹ£o&ø Y"Aw›¢o¦Èº)j/E£'E÷—"›)ô› ý¦B¿©Ðo*ô› ý¦A¿iÐ,cPßô<ÔºA­d ƒúÖ 3h\4™3ºBO±E¬-ê‹îÁ¢qfÑYtGÝ‘Ewdk‹X[ÄÚ¢'Ü¢ç(GM¯ºÏ®è³ëØúíµ¿Ù]Õ_Ó«î³+úl¸:®V?/ûõ뮪ëìêqÝ•¿£ñ³ }V¡Ïnè³ú¬AŸM®Ž#ëñêŠc·|UzË¿ý¼­§ýW—Ÿõ×÷x5äo»iná¯ÞÑÕºÚ¡«èꀮŽèªDW_èªBW7tõƒ®îÓ«-º‡>CñWèŽú Å_½¡+Äz‹Xoë>CñWŸè ÝQŸwø«]¡ûë3 ¸zAwôò®Ð¯¼¢~xE÷ð†îá Y÷Ýû;êÛ÷=ºB}ûޏô™†¿BÌÞQ½£ûû@VÚ¡»Ý¡;Ú!.;tG;Ô+;Ô+;dùj}FÈÝûµ¾GííQ {t{d—>º¿²üµw@ýw8£+tGGô›GtGGÔÂÝßÙóˆîèˆFÈõíµ^¢ÖKôT•Èk”¨…=+%úÍb}B£î„ú¡ÏPàêqùDß<£ÏÎÈÖgtgô4~#{~# ~# V¨… ÝC…Ú«P Äó‚zúŠpW4&®wEOÀ qùAW úÍ;ú,AW)¾B÷ž¢_I‘%RÄ3Ew«Ðo*ô› ý¦B¿©Ðo*ô›ý¦A~Þ ~0hDÔºA­4ê ²µA¶6h\[ÄÅ¢Ñc3‹ž‹xZÄÓ"žñ´hìZôYä…-²Y†xfè73ôÍ}3G\r„ËQåèW ô+Âè›}Ó! :dA‡,è² C¬jÝ¡qæP¿;tG‡F;Íæâús:7N¯jtÕL¯ú<`Š»]¦¸éU3¹b}ÕÅúpÕÇúÓo¾£«tõ…®ÎèêÛ_õ±þxuø‚^cö ºªÑUW}<W}›\'\qr‰âäÅÉ%Š“K'—(N.Qœ\¢8¹Dqr‰âäÅÉ%Š“K'—(N.Qœ\¢8¹Dqr‰âäÅÉ%Š“K'—(N.Qœ\¢8¹Dqr‰âäÅÉ%Š“K'—Óy¸zA÷7DÍ%ŠšK5—(j.QÔ\¢¨¹DQs‰¢æEÍ%ŠšK5—ÓÕzuAWˆç;êÍwtïȂȂ;d‰ºÛâ¹Cw»Cý·Cý·Ã- ž;ÄlFÖYi¸ìQë{ÔÞÝßYpˆ¯K_—(¾.Q|]¢øºDñu‰âëÅ×%НK_—(¾.Q|]¢ø®ÐpD£àˆFÁq)—=›%ò=%j¯D함…µpBwtB÷pB#ù„zì„ú脞ÆOÄúáÎè³3ê£3âyFOÿ7ê‡odùoĺB-Tèþ*Ô^…Z¸ žô<\Ðx¹¢_¹¢‘uE¿rE¿R#Ü ñüAW úæ}– «_!»¤èWRd¥±N‘%úM…~S¡ßTè7úM…~Ó ß4hÎ1¨ ×µnPëOƒ,oå z: z: ê[ƒžM‹X[4-º‹žM‹îÈ¢;²èŽ,º#‹X[ÄÚ"Ö==9=áùk‹z%C÷—!.úf޾™£{È.G£ G¿R _)®@ßtè›YÞ!Ë;dy‡,ïåbíPëd‡F–CwäÐ8s¨Çê1‡zÌ¡shÔ94ǹj±´9B‰r‹å%Ê-J”[”(·(QnQ¢Ü¢D¹E‰r‹å%Ê-J”[”(·(QnQ¢Ü¢D¹E‰r‹ñªmïÅöW>Ó(Q¦Q¢L£D™F‰2e%Ê4J”i”(Ó(Q¦Q¢L£D™F‰2e%Ê4J”i”(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-à õJŽ˜å¨…µP ß,Ð7ú¦C½âP¯8Ô+õŠC½âÐ9ÔºC£Ü¡QçÐÝ:t·õ¦C½éPo:Ô›H‡f<‡Æ§›G3m6qGYÈe!w”…ÜQrGYÈe!w”…ÜQrGYÈe!w”…ÜQ2¹Ú¡«/tuFWßþjÈIî('¹£œäŽr’;ÊIî('¹£œäŽr’;ÊIî('¹£œäŽr’;ÊIî('¹£œäŽr’;ÊIî('¹£œä>ÍIþ}M3 õ]ÐÕ]•èê]ÙéÕµ×çþê]½¢«7t…¸l—-âÒçþê]}¡«+ºªÑÕ ]5Ó«>GðW÷ŠìùŠX¿!.ïÈÖïø³3ºBí½#Öïˆç;âùîv‡úa‡xöѽ¿BÖÝ!ëîu÷¨7û˜Ý_¡öè7÷è7÷ø7ë=º÷=YtG4^¨õ²ÙᎈõY∘•W¢o–ø›¨7KÔú õû Ùå„áêµþ‰pgôÙÝ{'û+4^¾Ñ½£;ú®¦Wj¡B-T¨*ÔÂä+z®hü îÈž)ú,E¬SÄ%E÷¢öRÄL¡ßTè7úM…~S¡ßTè7 úMƒ¼›Aã³[ýjÏ bPOd3ƒÆ™A¶6¨ÿ,bfÑskO‹¼°E¬-bm‘Í,º‹xZÔ›±¶hÌ[4Z-zr,ò´YÞ&Ó« Ým†˜eW oè›ú¦CßtÈ‚YÐ! :dA‡,èjÝ¡QçИph :4B²¼C–wÈòYÞ¡ÑãÐ3íªÙWNg®éÕ]5Ó«>rœân—)nzÕL®†X®úXÑÖÅŠÓ«tõ…®ÎèêÛ_õÑáx5D‡pU¾´±Ôôj_öWc<ø‰®Î誫>V„«>Vsˆáªû+ˆáª§WÖǘï}vFŸÑg úlruœp"#ª}<¢êÃ#Ò¬ÃUû|ŸâüÕ×ôªÿ¸pÕ4Rýú˜FªþꈮJtõ3½Ú¢_éãOõ‚®^ÑÕº: +ÔúµÞÇŸþê]}¡«+ºªÑÕ ]5èÊ +;½ê-è¯Ðo¾" ¾¢;zEwôŠxö‘ª¿BwôŽ¿yFWˆK¿~í¯.è Ýßû}zõúáqù@­ >uwhì%úè×_!KìPßîPßîÑXê£_…ZØ£ßÜã_A÷°G½y@÷~@¿y@÷wD÷wD\Žèþލõ#j½D¿R¢NÈò'tG'ô+'4>?Ño~"Ü}vF÷wFOÀ7º£ á*„«îŠFùõæú•]¥ø µž¢öRdݵ—". ý¦B¿©Ðo*ô› ý¦B¿iÐoäÏ =}Äé¯PëµnPOÔcYР±dg0ÈôlZÄÚ¢çÈ¢{°È'[tGÝ‘EwdÑYämjÝ¡öjÁ¡jÁ¡²™C6sÈfÙÌ!›9d3‡lææ¾¼þœúäéÕ]5èê>½ê#²é¯Ü.Ó_™^5“«!"ƒ«>"óŸuÙôê]íÐÕº:£«oÕÇgãÕa3W{¸‚ˆ ]ÑUW}DW}D6þæ‘ÁU‘õW‘ÁU‘M¯­CD†>;£ÏÎè³}†¯îþê8a6DHŠüÕ]ÑU‰®~¦W[ô›}¼T¡x©BñR…⥠ÅKŠ—*/U(^ªP¼T¡x©BñR…⥠ÅKŠ—*U( ªPWo¨õ>î©PÜS¡¸§BqO…âž Å=þ ÝÃ;býŽX Ö?P{èWv¨ÇvèþúئB±M…b› Å6Šm*ÛT(¶©Plã¯Ðoîño¢{Ø#+õq\ÐÐÈ: ÖÈG„;"ÖGd‰#bV"\‰¾Yâo¢QP¢ÖO¨ÇNÈ.'tï}„T¡©BR…"¤ EHþê‚®ÐXúF÷þîèÈ µP¡*ÔGjá‚Æü=GW4 ~P wdÏ}–â+t)b–¢;JQë)â©Ðo*ô› ý¦B¿©Ðo*ô›ý¦A^Ñ ÑÚG]Šº*uU(êªPÔU¡¨«BQW…¢® E]Šº*uU(êªPÔU¡¨«BQW…¢® E]Šº*uÁUZ/Ð7 d]‡¾é3‡¸8ÄÅ!.µàu²®CÖuȺY×!ëºj6¯ÔŸŠÈ*‘U("«P V¡¬B1X…b° Å`ŠÁ*ƒU(«PÔU¡¨«BQW…¢®ñjXùªPœ…®Î誩PœU¡8«BqV…⬠ÅYг*gU(ÎBŸÑggôYƒ>›\'\Çr]\ÒÝ1 /_×É¡ ïŸWt Ãôê䯆AÇ3\Óñj‹®vè꺺¡+5½ê%¥þê]} +ÔµЇþªDW_èªBWˆYFú«ûôj‹˜m³-b¶Ý£+ij*ýbÝŽþ ±î¶ôWWtU£+tG}é¯ º²Ó«Ô·/¯è µðŠîöÝѲî;º‡>¨ôWø›ˆõ;býŽÆËúÍb½C–ß!ëîÍvèŽv¨½=×{d‰=ê÷=²Äµ¾GvÙ#.}Pé¯ÐíQOïQíQýC¿y@¬ˆçÝûÙìˆpG„;¢;:¢‘|D÷pD}{D}Û >ýâR".%²u‰ž¸ýf‰~³D¿yB¬Oˆõ Ùì„îá„úá„,ÿ‰x~¢_ùD¿rFß<#ëžÑx9#fgä³ÎènÏènÏèY9£§ãµ÷zóýJ…xV׋Hýb]!Öb]!ÖâÙ WdÁ ú• z®¨õ+zª®èW®èW®]¡Þ¬ÑoÖèé¿!»ÜÍnè7Ð7ô› ò/wôÍ_!Ë'Ⱥ º£Y7E¿’¢žN—=)²`Šõ˜B-(Ô‚B-(Ô‚B-(ô›ý¦A÷nP$`/0hDÔžAí4‹ôL4² òYY ~7¨7-jÝ¢³ˆ‹EãÓ¢Þ´ÈkXÄÚ"Ö±¶ˆ™EžÏbžÈòÅ6d‹ž‹f™ õX†z,C£ C–ÈPëú•ýJ~¥@¿R È‚nùA‡Ús¨=‡Æ™CãÌ¡qæP¯8Ô+õŠCcÉ¡±äP¯¸Û,–ª?§±Ôäª?Èo/M¯n誙^}|Í~åv™þÊôꆮšÉÕËçûz<‡T ®úTÍÖ¥jÓ«tµCW{tu@W_èꌮ¾ýUŸÔõWmfó±…y¥¿RèJO¯®vzU#\põôé8 ÷°›öí ´€«÷÷‰•yUê3©¯cÕ¦jGÿÍ.¥lã¬×\õù¡« ]ÝÐUW}š W}š:¶>¤©pÕ§©#—!1^½ûÏ<8T}V¡Ïnè³ú¬AŸM®®f S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ SOEÇpµE<·ˆçñòMòMòMòMòMòMòMòMòMòMòMòMòMòMòM=•€ø+ÔÞ+º÷WtoÈòïèŽÞÑo¾ão"Öïhô| _Ù!Ö;dù²î±Þ¡öh\ïѽïQOïÑÝîQ{{tï{Ôúaj”aj”a²ÄõØõØ?ÔÂÝñ> ñrD6;"ÜáŽèþŽh$ÑQoÑ= ù¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F&\¡1ñZÿF½ù~³B¬+„òMòMòMòMòMòM¸BOÜ}º£ Ýѵ~AýpA­_ÐstEOã}sÈE5ÊE5ÊE5ÊE5ÊE5ÊE5ÊE5ÊEÇ«Íx j¡A6k—º£_Iðê±õJ‚î6A-¤èWR4BRÄ,EOUŠì™âßD=­P µ P µ P õ´B-Ô‚A–0ÈÖùƒÆµA­ÔºAs±A~ qfç3È.ƒúÖ¢Ö-ê?‹¸Xd ‹úÖ"Odk‹X[ÄÚ"fyS‹y"Ë[/YôtX=õòy…ž‹ž8‹ž÷ õm†ú6C£'C6ËÏýJ~¥@¿R _)­ dë·€|–Cí9ÔžC#Ò¡éЈt¨ÿê?‡úÏ¡QçШs¨ÿÜm­µ¹¨Fù­Fù­Fù­F­F­F­F­F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬FYëxuœ>UV£V£Ö÷Wºº +Äú±þ@¿ùî}‡xîuwˆçYw‡îvú¶Ï üÂí—=²à?Ôú‚âyD-‘¨½Y©¯ýÂPë'ÔÓŸh$¢ožÑ½ŸÑo~#žúf…¾yA¶®ÑÝÖ¨7dù1KP jÁ oôüdë¾PÂ_¡{0ˆ™Á- »tGõŠAÏfgù+4Ê-bmÑýYtù‹îÈ¢;²èŽ,º#‹ÆKÚ+ÐÝ:ÄÌ!.µîPëµîPë·€ìé=²§CötÈž®šù¥úsêm¦Wºº¡«fzõñ5û•Ûeú+Ó«ºj&WC<W}<á?ëâ‰éÕºúBWgÕÇý̰èªBW7tÕÀU?ßÂU?ߎ- ó-\õóm…pÕϾӫwÿMÏ f_ôY…>»¡Ïnè³}6¹:NxÊ—.LïêN«ÕûæÒ^ýó•vøìåóx-OÝ™í›^R²^Oÿòÿ¥ÝÕáö‚?øo«b„ï¾û5\åzï¾Õ­=zðZgfüÖ9òŒ÷:ùg»ÎçpŽJQ¬øÖ h½„ÖËßßb¡çp®‘8VK·Hi[ñºüökŽ…Öþóû[tÅÎÝ¢éžøë7v4s8kG7~ë œ݈UÀñàß_à_~‹ÖŽCåå4Âûe«9üñ­Whäõ;ª9œµc6~KA#J¦òæÛ1ð­OøÖgà[ðÀ_¿pD:}À?€ÊG€ÊÜÕþ wUØ9œu#•=PÙŸxšÔÎ62ô=˜k_É÷{»çñ[‡ñ[ð×3Χ_ià×'ŒZÌá쀟ò-è ÇoíÇoÁ_Ü·€pù{Â:Ñs8CØÀ·Nïc#ð×/|Œ‚ ¢Óï‘…áq‚IëT>ÑúøøŸÒßx¢“…F¬ü­O òYFL.Ÿåo&—OpðCå ®óü„뫜C®ÓÃ÷¯FjTªÍîn]4qì‚}üÖþWßúÕ¸l~ó^`p_&ºÀÀ¹<1†Í8p.0—_¾åF®`¢ëog„uš¦ãŒp…;¹#à½,®‡Ã_ ÇŒÚlßzo½¾óF˜7úå‡á[µü­;ðº?1†óÇ<ÙUta½ðGB3ù÷ÿÆÖ=|LmØoµîOlD­Ó•¯!gá_騙×*MÙÔce–À|#*¢‘| 'ðP#0×… ÿ­úcò[]-=û­Û‹Dø¿4I–²Ãí}G~ô7ða asšþEgùzX¿~uŸ ë²ÓoµƒÐ®Æå[ü²þ5ûÖ¤‘Ó~}¾uâ¾µW#Ñ`ǯ6å~ÕÝgLòýß~Äðu¢3=‡Ïùo¤¹Z1´Ö©2Ï Ñfèi— ÕÓl6NÌÎtÃäoÀ‘ÜIn ÎBÝ-æNîÄèŒëŵI“ŒÀɨ"׫ߒgÒjÿ­6Uo1³Ž¿EgR ÿ"ê9Ò[ÔÊR8¹E“‹·p&ãõßjS2ñÛ왿Å"I)œÜb¦sþÓ1Ø™Àé-fYºt‹g2Kÿ­Ï·Ð-Úÿ”Á-Nàd êáY¤OYjϽÕ:Íû)`Øî™Þb;Ðõ4DiÊ·h ß‹YšS8éE›Yþ³Ñ£NàÔ«èB­~Kž ˜ý·î[Ì2á]b(œøóv@ó5ד[ÔVÛ¥[8OÁ·¿p›þ%N7P7iú»¦¿L·ÀôwsݤéïÆÞo›·÷{cSd4ýÝÐÜPÌᤑµRÖ®(­ö‰uÚ8±ÐZ%гP·¬›øûüÞ[ß•¯Øþ™Üûîýøë{·c¾ëáÔÀí3—ñ÷^è‚ÀÉ-ê"U+æ®ÖÚ(7‡‡o±„[,}‹©Òs8íÞ45B÷Âbê>ïÞuZØ”í^­Æ,~§Ýk½Ð½žáu·ÝŒÊ†î¯ù½÷›t胅ÛKø[}Ö2ìBIð#´~Œiýh]¯[/¡õ2¦õ2âÞÓµá'hýÓú)âÞ'­_¡õkLë×н+¶õ¼ ÊGx ­×1­×rëjm…Ö“‡OêT&Ö{½É³­œi=]g¼å×´c~3æwLjQç[?¼­÷Š–g[8Óú:µBë©á`ùCŒå»¨ÖÇQ·yY¿õ­÷gp­÷¡uï%þ[kgO;ìªO>PºÈÍ>ì¶OI»)k5 æŒð ÈW1ä+‘¼²BÞ¸¢Èæp†¼éÆûÁ¿ù[ ù›@¾eŸ9G¾ÍÊòbgÈ'yÆ“OrpVÛ±õ^4ø,y'ä §Yòiî‡ À ùöæóœ#ß0Â_ük ù×ùT Ÿ©9œ’ïK¾û`„ùÏòŸù޾bÈw¬ÉæpŽ|®ò9ÜûÿŠ!ÿõ<ùt=¥IþÈÇÿ–X³ÃFå©â¾EòíƒÉz›þƒ¾nã*·•L^嬫L³Ì‘Ö9o£µàm4tøºmŒ«ÜÞBÃ&çǼwÔÛ[`ع0l ºØ6@¾‰!ß±<ào0hßbÆü›´©fÁù,Ï7‡³ä•D~ô6»rl}WF÷ð(?ð8W¹;ùS ùÓÓäÓn‰p$OÜ.æÝ5â°ÉÒ"c3£”™Ã¹a“9aØdã¨ûw[ÿwŒ ïá4ž·–!Ÿ¶Or2 _<œ#ÏfýøÂÂcLTyÜÊÞÆ¦Šµ|²9gCâB ‰GosüäÿÅÿÇ“o›HuÆ„j&Ëçp.<0ZÌ8ÃÁ×c\åQv•©f]eëlœËæpnØ$’ŸOÀò ‰!‘ý¼.Rž¼G pnØdB˜Œ*ƒî˜°GëeL2R¾ðÔ±c>OF¡›‡s–7B`–°)ßü{ ùw|7ès–|î²ÂÎá\žJ x pè÷2fØ”ñÕ.a3½V-÷tgØLz`ÇGæ¦ÈϘöó$›¢ÐœŸ7Y “Ôç)4II± ¤Àßਿcüü·ìç ²3lV$£Ä×ùE'-̰íx1mW9“Ê4;IY—CL[…Bbc¥v󘮊±|%®Ût+ìrŸÍ²qŸÝÃ#É¿ù·òoâ› r2æUâ5‡sæÖ* €ï€ü.†üN6¹c‡M‘ÀŽ˜‡GZ‚“*&¶©þ=MÞäØêßßÈCú_ŬT…Öœ_%.t¦Iëqä/0¿_bƒ‹yn¸1¯“4Kçpn’ÒÒ¢Üû²‰KL2r9ЬÒ)»bf-”ey8ûÀÒ;zÚ dЗ˜üRÊæPÏ›4ÓéÎWýø‰ý`„Ãbã%f­òò-›6ÍfgXk2Xh½|Bbi['m2è:&¯›@Ti ņi>Ê+<œ6V6㘿Áü~‹ nòŠY&ìŒd‰JÝÎ>°Fz`Çi¢Y¦‰™¤š]àe3©u;š`C­ LRÆJñ¼-ßÔ@¾Ž!_3Ç/÷¿©p6$–rØQÕ‡ûhý3lîò°ITaù…V›J÷MhéÃHKã°I¡õ4†|‰µÊø4P¥·Jœ~ùò2yËïf΢À™µÊt-¬U¶ŒpxâÒ˜6 D•† ÌZÃ9 Ã& <°Êæý`„ïü>†ü>0lœ¼Í¨ÂópnØHi` i`zò‡ò‡À7K¾{â $8K^ó0Ç¥Ó¦1!qz meòÃF™ÌÌáì*±‘V‰G¸w¡b¼ x•A81šàáq«Ä Ü…Šñ6*àmŒb3)ÕF›ÙÎYÞJë6vô6 Ü…Šñ6*àm´Îx½1¯B9¬ϧÏ+p*ÆÛ¨€·QìÒG'æ…pµmß;iû~ô6 Ü…Šñ6ê ÏÆóý¸Ã¹1ï¤xv…¸ ãmTÀÛ(%ÏÆò 熒ƼÉ;X5r1‹Nî-Œ(aÖ¯Q»·?=°Ø]Ìú¼{Xž`•IR3‡Çme:Hÿ]Ìê;Ê–×Æð‹NÖë\`õ@IÛ÷ v…¤ÿ.fõÀ•…Vž¼Î PuºòO®ÒÁvž‹Ù t•lù\±™”¶Z]P,$m¨y]åËú½ZP´VaEëïÉ’­U@ÑZùJR´V’¢uäw1äw"ùÂùÖ·nÖÆEZgÈ+¿'E>áG Œ!”-_ø¥j²¡–dÆ’Öò©OFÈ#¼òe ùR$Ÿ9Ç’/¬…àù,ÈÃ:m'E®„ÐUX-Ÿ ¡«€Z"?BW!tµ „®ÂBh–<BW!´D~"„®!ôæÈÿÄÿ-¯ÎòiÛ%)¬œ#_ÃÆg‘ŽºZPqWa·`ù©Š» ¨¸yòHÅ]TÜÕ‚Š» «¸eò©@©¸òSwPqW *î*¬âæÉ#\Pq‹äs%G*îjAÅ]…UÜÏ’Ÿ©¸ÿBþÈÇÿ–½ÍDÅ]TÜù©Š» ¨¸«wVqKä'*î* â½WqWwµ â®Â*nyØäü˜Ç*nqع0lŠ»ZPqWa÷“äç*î?ïtÔÕ‚Š» «¸…Ijªâ®*n1¶ñëóU@Å]-¨¸«°Š[ ?UqW·L^IäAK ¦ÛÅX~'X¾s Cú?#Ÿu§‹8Ò:çmøx~ª1Ûíü>†ü^$¯‡sGHHl³ÄW¤îÿFò]L<¿+ÿ4ÃîÊ?MR‚½ZÐÏWaýü“äçúù¿¯|C¾–Ǽ±œ«lS©bIÀòûàêdy3-»¨Ê.ªpÙ…HÞfl8+»Éó™Ô´ìâ0þôðÞµgÉ{8*sm¸E§T+XŸ8÷À¦Nx`Añr„)ò3ÃåV¥¹VÌ4i[î“p8m¸/9© ^ªpÁ‹˜M ^ª@Á‹¼ôQHKPvóû1&<8Êá*ŒæÂƒ¼0*›ÃÙE'#-:™I½LµP­S…«uòÓj*P­#ORZš¤¦Õ:ÕBµN®Ö‘†fCbR­#z›DŠçQµNµP­S…«u¤x~¢1«Õ:â˜Ï„µÊIµ¸‹2ÆÛ”²·ÑYθJÛ†ÄiJZçÆ|"-´&ÓR£j¡Ô¨ —‰;#©c½Í¬ÔHžaµ4ÃNKª…R£*\jÄ’Ç¥FU ÔH´|*Y•U ¥FU¸ÔH6.a3©y©ÑBâæ÷2&<(¯ò« »Ä)ÙDy =°¹ôÀæ“J¥j¡Nª ×I‰{R…æÈÏë¤äx^Z=€Eæ3¸‹sŒ·9oÄ4pÍîIµ™É-i*­UŽcþ ÁÉ9&¶9‹› Ýk¸1¯S ÁÉyû7ò c2©óîIò­Ÿ×ìEžw#ÁÉ9&¶9ÿ W޳¼S ¤Bç#˼ç˜Uâó-@žs•v]¤ ÄóçÛŸÈàýŽóßrRÌ+«¸%É *æ­Šy«p1¯HžÍaI1¯8æ”âbÞj¡˜· óŠä•@óŠÃFIc ÜrXæÍcV‰ó­œI©„ß“²yJZgÓ@+¥cÇå°Ø˜Ç¬UæµÊ‚óºOC1oX«T’ÞFA&•Ÿü9†üY¶¼ÍYË»Ì*;‡3ä­´ncaÝ&‡ý÷¿Èäe•N&É!›È’“ +f"ê¦È"f†-6ò†ZÊm¨­òuï:óp6ž—Tð¼ðÄ1l±}–¼éÞÿFZgÉgùq‚.`Š,bfØb÷$ù¬+`wQìþfypEŒ·)þ=I^¯ó¤€Ý"´3’JQ%8«f™"f’*nO’/º—Âr_qû“åªðYâB«jFðYˆç(Ü\Œ@ν3>žŸŸõñ‡Ê©‹É¤Üdzû°íë5fî#Ï+IŽ »Bµ‹ñón'›tPuÎÈ·læÀUºÐº$YQ Yqà¨]ŒŸwÿdòZ¬å]fŠ9œ#/éçd‘6R]Ì>¬;Êì䈘*pDŒH^ª ÄGÄT GÄTá#bDÉ O~~DÌpÂH£«t§€åSÍme*ë2=‡³c^*5‚uZåó.¦úÞ}Êcž­“²m «SÒ:»zK«ctá r1™”;ÈÅ¥Y›ƒ¦s8K^ÒC‘—ƒÒS¹à*yØä¬·!' Éì’øßTÒzÚÛÂá<·ðá<¼ý–|8Ï-p8Ï ÈߤÃynÃyn ‡ó܇ó䧇ó܇óHä'‡ó܇óÜç¹…çÈOç¹çÉûÃynÒá¨ä>¨„%¿B•È·ÀA%¨äYò³ƒJþBþäo1äo!ò9oy|\†HÞŸ8q —q[8.ã>.ãIòóã2þ@¾;6á¶phÃ-|hG~vhÃ-phƒ@~Z­s Úp[8´á>´A ?=´á8´á/äÁQïbüü®ü“·Ù•z`»cn ‡6܇6‡säû÷„òÿµ™=l&Žmv=Oà y;¼Áïæ¯9œ’ïÖòíð“É·=Oàܰ2hBžƒ3–oã–|wWxc>‰óÉ߯|ò·1o€¼‰!oDòëÌôïgÈX«4ò«uΓO!(5/@þ%†üK€|/bÈ[p•ç,Ÿ;ž¼‚õyóäßbÈ¿…È –·p;ÀYò°Q ]0ï@þ=†ü{€¼)ò*ŸÃYò™@>øÿˆ!ÿóFó 8K>Ƽ‡ï€ü.†ü.@>·‚«\gs8G¾,ë6æÿCþ_€|"̰áp޼Ƽ†--sòÇòÇygòÖÌá,y#O| äËòe€|!LRl.œ%¯„ao«4Û˜˜ØÆœBc^"KÜæó…ÛÀêùòŸ1ä?Åð ‚·Í À9òVôó?ùs ùsy3‡?Gà¯bÈWÀLš¤Ú‡agcÉUÚ1¶˜Ù˜ÀÌnž‰ÛàÄÍáœåûuJþ?Û-߯ßÈçBl£5i ‰…¨Ò+^,D•6&ª´/!Ë QeêÒ9œµ¼Ò@OþÈ¿Æ Y>•’‘lg-Ÿ ®Ò‰mLHlßdòy"‘7éÎZÞ –oc!$¶1!±}‘·Ò˜ÏæpÖòB2’dc2b!$¶1!±ýýüDZc^Ïá¬å`y p‰mLHlw!ËiÌsøS 8T¤ZÌlL`fËyå¤x^ÍáOyÐQ[ÌlL`fOÏ“ï4­søSÃ3 ™ Ììg€¼–¼Ÿß?£\%XÖ*mÌZ¥ýzžütØ„Ö*µÆ<,uvë´×…Uâkx•ø ä¯ÒŠÙ5°J|òWé½V‰¯ «Ä×ð*±D~²J| ¬‹äý*ñ5°J|]X%¾†W‰%ò“Uâk`•X ?]%¾V‰¯ «Ä×ð*±8l|H|]‚3–Ÿ¬_…UânÁíº°Üw /÷ñäÑrß5°Ü'›\óx¹ïº°Üw /÷‰äM!GË}2ùL ï—ûŽ@þCþ ïø1?[·É;~ÌÏÖm® ë6×ðºH¾\%^·‘É+Áònš_ðk8XiØà\"?IÀ¯üº€_à ø³Þf–€‹–÷ ø5€_ðk8Éç‚·Á ¸<ÃæÂ ‹ðëB~ 'à²åsa†E ¸ly%̰(¿.$à×p.[>•b›lg-Ÿ 3,JÀ¯ ø5œ€Kä' ø5€Ë–·‚åQ~]HÀ¯á\&o¥1ŸÍá¬å0æQ~]HÀ¯á\ ?MÀ¯\¶¼,ðëB~ 'à²å4æ‹9ü©x%à×…üNÀEòÊ Q%JÀŸó(¿.$à×pþ,ùYþü°A øu!¿†p‘¼–¼ JÀ#\å4¿.$à×pþ,ùY.“·Â˜³È—Ö?n{Êþ/Êñåý²~y|kükú­^‰6«ÎëÆæƒãËå}ý:Àá¯üpëæ÷õz*â’ñ ÷Í%Y¯ÿ­Q7äBëcyDwcïp‹ï\ëôw×é8z{‹·ßäƒQ×Á? õ_¶o ÷ öMŸŽâ\¦û÷QóÛÁ¿ õ¯_¶® s­›‰…¾¡‘ï_6’kçé D™[4cùÊËçn]­Ã_¿è^¸E±Ýûàøú:ÎfÛWa^#ü—&Éz„~ˆ—/#àïcʵ}¯bà7€ßbà À›øÇèS·_ðãøhnðÓxÌö´ÿø¿øàÇ8˜îcºÏ1ÙÝ~nž‡ï—ç ï”ÛÅšYö›Yö™%]÷sohfÙGÍ,v\ÑÙÿmfÙÇÌ,)¬¡îÿ6³ìcf–Îösxhfé¾u†FοkĬ-sè •g§/½Î­Ã£¦¯}Ôô•kM_‡úmýUuŸuýòQn3ÚGXnëíq8;“ø¡Gø·åæµ ¼àe ü¸ÞžøI‚ðr½ýäÈwc ?¦hþ»Ã~˜}Ëdv€—ÌþÉ¿uZo¿xŽÊô”c÷…Ï9*Ûï$QŽÝþàx]oëá[µÔ ×@7´ðÿoêÄ0ðÿº¬ŒÂoŽí³Ððجß¡=VJMáM ‘v^2÷Œdˆ—yëyf)|3§šðrÛÎKvø–•y 4âá[¹‘ÃÛúõ „¥FØ_ü×€ñ€·ñÜû¿Á÷üàlÈ7‡Ó£îœ|ë›up¿j¤@—àߎÕúý2À/RëÕÌÀNç–Âos“aD¹;®w»á¤ÓÐÈ.àà:xÉÁ»'KkÞ=YãAjSx)úö§w'cûsÇqºŸÂOr#û¯õ~Ëo¨ÿ7ìMÎÆãýy³ŠÂ·Òpž‘_ÆÃOëýÇ?Å´îá1­·äO|ë#œUÌáLÔÕ†+ŽR]ÛØÈ)ø0‡[œ=3ÿ­3Û— 0YÖ¤{OëÓž»ÅÎuõ+œsZ­·2ð˜x8ÍÅ|#­';ýãt íÓö²r‹ÿùƒ¾&pBEé~›tî+[ŽÅ¸ó0Ÿþ a×§!žÚ[â^‡iêt”áí=à')›ß{êWŠ»¡rúâ»!±IÁvƒËŒ"ðS ZhÈÉpCÅ/ŠÎ¤éº h2ïõ?7Bîù»©e€“©¥íF®è¸ý@­Ç»nŠþ üyüÝ Z©×ßü½wþR‹ð¯K2¦,¼K|SÖtµÔ>ª×©ÒŠ —»bæ‚ÂK’ýY>mÓÅœÀ¹|$[± Íܽ“S€ZÜG²ìvx½ ˜.sœéÚ\l h&pbº$ë@¦¦Krg(œ˜.íëôÓ¥…G™ÎÃééOëþØ.þ(´¼ F_Ó¥ª?w‹Ô…¶̸õ63¦+ ~Ôe£>d /çðáb’ü­“bÜ©ŸÀ燊´ðþÞç‹PíçãÆß´õMÀB/²…L¯e ŧ­… {=œ>—6Í„Áe8±P¡ ™ñØ• |~rI·{ë ¥Ž¶þ°Ð[ÀB4–Ü»NSC$øüÞS8*b ?÷˜(þm–ø\–×݇ÑnþAg|L[ Xè*Z¨u$nÅèêÚDß[è*Ž!í†PŸ1ŸÛQÎðc^¥1»wò­Â0îî\kÚú5`¡¾%ÀGMWŒ Âø¼¢w­2ËÁnMÕÐÖéÚgfWüã“ç>·c6œ°KÎÞéL—Íá¬ó‰·ÒBx¡Òœ}Êã(œ:d3Ì‘ôÌ‘8*Y’±ƒ@­SÚ:)Zî–ÍVÜ?~!sÚú‚§æ-Ôéêx ¥i–8}˜²!¤²‰£pb!å8 µJ2Eà¤2zmúRGrŠP^hÚú‚§–,dÉBF8穹ÇÞÓ§NÝMZž:É|.ã]ÛG¨â­4Q´õO-X(Í„¹L[ߋ׀…CÌe¦0N-dRÞB »œÀçZáîT=yWRZm}ÁSë'=u𩔉·Jra.³~2òp2Ò›­Ø0@#W«9WÛÙ±å’ óξiÝvl½••ÆÒ+nÁ>IÓ‚À©§V¶`—õ¨ð˜Â Ç4ÆU)…Kªçyû:Ë…ÏOÞj#?›¼,”h~.³&%pf¨äÂ\–ä†Âi/ænÑ|^ßI£‡ˆñLî]å´õO-YÈ<2#j¡Ä8ç©…¹,·9…S õ/_c,4É:>—ý¯3׫Ƿ®"S¬£ð§>·#-bj'8U@7xøö$¥ÝäÌe.¾Ê#!ys.ÂÃçç×NeÎ[ñÓìá È €}ž œâ1P9G¢)œ._XÃ4ÖÒÖÅ÷…$Û¹«56%ðù!¹ë´ðݰ[ºcœX¨£"8oà]ÀBÎ.Ž!€‹/% Ž!€ÏOâEcèŸ<†T"8’ "o§cHÙ\CÞBÿR?†Ò±fß|’̃bcòóã~»ã?¡‘Û³c¨cŸNÇP–äÂ2†ÂéújbÇÀÅ׫ÇÀçg OÇÐf·~­¹ÕÐÈLÅò_›uëBÏá›þuÕë5å8[ïÖœs7‡Ï·Mº:U̾G·¸·8£ouãô±¶<[îvŒÆã¶&ðÙžx·„Õ¿òi¾Ú¥{ã uølµ[éC£q¥†’ßÎ-”§…f¶$Úœ?‡ÅÇ ‚µJ+Û»ù:)àÞÏ÷»õ {§ÝÛr6þhŽb† œvïcáu¶“Õ=W‰z8é^5T>ÒÍ G['Ý›%fØùž÷hMà³îí^k8ì¶‘ͬ£¦›wo— ^{3ÿ W5Ýü[&ïÿMÿòõù£8ÂËçû½H!G8Óïjÿh¿ƒ²n?λר<åû][Gàô±Î³‚íwc ÿñpÒï&Ki¿[]8é÷Ô>¤H5™n3zïä±¶…q\¿«v¦­—ó~/†ÅìMÿÞz©ßoO÷{ê ,¥|³¹ýÖÏ›?NGGj2ƒydhëtt¨Ü8ÖÏ[?{øá:šSºtoŸÍ)y<:ºYFœÎ­ˆv=œx…n’[1¹P; Ÿ›ö±ìg™Ûfnyx ê׿'ÂÏ[•ÍáÌ4ž<5yÞĈNº×*Åûùö®r§~ÞöÕ¾äyoã*ãœ<ïùp¾=}ÞÛØQ8é^›<Xâç•£¦›wœJóDqÏ{¢Aw2ÿÌ¿ÕÎdªÞäç}{~ºßµ2VÍá´ß[—èø~×~ë,ö{j†]­ý‰Ù&ðy¿'í¸ÉX?Ÿ$~ó÷,ö»z¬ÔÎû=µNQò¤ßÛ{Tl¿' t™Âçó{6nÉÍ=x›Zç”ü¬­²þÝ»›íùýÎèÂWþ[ß1^œ À7Ûï_GýÆoÉ}˳Áðú&,œ,~‹³-†¥pðINcÄ´_ˆ§³A·¦BàÌl0l*ÓÙÀŽÀñÖy3t/¥*(y2´C»2¾·Ô]Œƒëeó¼W0–¾yÙüºßáÜ g|ÇCQBÜ…*(yÚï¦ÍL¸~oDJáó~oÓ5§…~gZ§ý®]Êö»ÍÇ—¥Là´ß’Þy¿ëÌÁæÆþ2ƒ«6©ëà›ù,£RÐò¼UÏ?ï¹­À™¨ß þ˜y’aÛÂÙloÈò铜Àlàá¤{ÄwäI¶9ìÛy8é^æ|Ôß>±ôÞI÷Vš ¼³šÀçuj[û$ÈMàÕü»H§› Þ*y6ØG¬î˜&€ucx ýžÀ˜÷pší¥B¶×……Nú½H—å÷º+Mà$ °ý@Òï™_¢ðpÒïÚ>t#$ãQmFV>úƒ÷…NÉïI¶×ûºÍ~è÷ˆÕ^;éáŒ;×F QÿøŠž œö».ø~7P¾0Se§ÜżßWþMì8ú‹!×$ýnsCá¤ßfXÚï~Mq/®î´¹ücûsCïÝRÓÍû]¹>8Ùì«;‡kD\—C\p¦ß‡s­¸U=xÞ=œf{zH”éêÔÞNà4ÛK3>êoýˆ!pºº“8þy/ *i§«;ê±U@×iaAt'izQäìêŽ.m}öZéöyt–›ÃUî÷2¢ßƒù½¼æ÷B ~ÖSË@¿+a5Wù}¨Rî÷6øÔl¿; ~¾û½ǧL¿ÙÀiø&?ï =šÀçQ¥6EA2ðu>{#w?u­oÊ@¿ŸÞ#vo¼öàœŸO…,ßÁëáLØî¸,¿ëuN³ü‚뺘''ðy¿·!Ĝи.GíáÔÏÂóÞ:+>çhô£2€8‚ ây/ßIÊÒ¥›Ó{ ß1ýîï}„oNÇ_çq…ï÷£œ¿?ž8nâW~"‹¶F±yœÎÇ3&p::\ÆçqZû1”ó¸GTIów¿ëá4S&gówk©å©B¨Kúj²fUøaSF¬êùª€oNåoû=Ég¼‚*øUüÉbðNÖúbú½Ï mFý…aWñu’Ãþ‰‡¯¦Ÿ¿·1­"pÆ+$›¿'ò¸S†5«†l=ùdäóô|¿§^´pf~Ñ3+2Œx8ÍßU¦ùx^Ãn­‡Óå“ç|þ^€ŠÂÃI\׆o¼Ÿ×V²=œnÆÛ‚[Åž9 #{ ëçÛ'!·ý¾Ìeÿæó$ûù*b½®}ò9|S=±^—8ý áõó6ªÀzR!¦ê²ÈJ\¯ë6XuFšXxâªÐzÝà¬æÏ{šd%Oý¼Q»k§Ó±"w a¬~½®šù ¶Ý.ÏÎïC"—Ïá\÷Za×.ƒµ‹‹œ¿w{Dìó®s¨›ºåõºTóy\;ÉNž÷ÖŸòyœ‚“m&pÏ«Bó»ôpHÕNâùì±éGZaÅlbºdݦ 7—@þðàîÍ%FÑCÊr h8ôcÿÄÒÍ‚ÀiÔŸ ÙžõÒÓ‹¨áè|¶gÜ´ZÔî<–c©Ë*zït6H…ÕÜNZBáóA`òG²HVõP^^æsÆ0m. Àã#boÏø* €3£#M…Ñá%:Nc…ô±I3N¹™À™_—³k¾ÊW x8É už k sï4È´ÖúaÊ™Àç#¸(†¼ˆ®õûœÐÃ/¯Ä¿õ;L›Ë·<:îÏÇ JXmøæþûXÁÂçˆRVÉÙ>°æË»+X“q9a·© –¿Ë±‚+†Õvš*Ø”½b…‡óBÒ•¤¥pNHº’´£Îm5°‹Šv4%pVHº’´£Î Iûççg¶¨hLNà‹JÐgû§ÓxÎá¼às%i<)ü$Äj< œ|®$'s‚Ï|%i< œ|®èLëÌú}Q€óŠÍÕ/Dš ŽoÈÎk1W’ü’ÀY-æJ’_8«ÅäÅ;yJá¬s%É/ œÕb®$ù%½÷íüñ³HθÐ?¬Lrç5“Ò"]Aàœf2[I2Ig5“+I&Ià¬fr%É$ œÓL¦+I&IM7[m±¹×ïwÚ¹§;§²9œ×6®$9#…sÚÆ•$g$pVÛ¸’äŒÎjW’œ‘ÀYmc›-_ëÖr¤õEqâsý3Èçp^ƒ¸’d‡.–¦p²C§ýóØFæd‡9³Ä• ;4Îj{òó”TMî}QDøt`§áD¡} quy&©R ç´‚+IHलÔñýÓÉ œÕ ®$y ³ZÁžü¼¢Ü$)¹÷E±ßÓýãw¸ÎkúV’ŒÂ9MßJ’ñ8«é[I2>g5}+IÆGଦ¯ŸýfpÓvœÃEyÏÏ?…žÃyíÝJ’ÛQ8§½[Ir;gµw+InGà¬ön%ÉíœÕÞuðro'¿ÂÎá‹â¹çý’¯‰þMÙ•$‹£pN#·’dqÎjäV’,ŽÀYÜJ’Å8«‘ëûçuÞ?EAL·(r[ˆ¯OÇ_Ày-ÛJ’¯8«e[Iò5gµl+I¾Fଖm%Éלղ­$ù½÷ù>eá`ùáT.÷O`]à¼æl%É̜՜­$™³š³•$3#pNsÆo8+ƒZIÊ'geP+IùDଠjEßÖ°nÕ8¯cZýBºôtÇ¥°h|ùlUX·’DIÎ)”V’(‰ÀY…ÒJ%8«PZ ¢$Mà¬B©ï¸ïYë™?æà‹£…ë¾ùœW­$ñ³J¢•$"pVI´’ÄCÎ)‰Š•$"pVI´’ÄC~ßÕ1ìH4õúÕ„ŸŸ=ó"…l'/þê^M˜óê¹’BoHД÷ù¦ÿ@oŠ×ïüûVùÐ7·þ§ÖŽÂzOð­2¦?Û~—^žhDSxàÍCm½³£6ÔHº¶~Ñ̇NÙ‰ú’BôðÙ› »7šbE^‡Û½ûª( …‡_ sL3cšøìýÛ-åØ¿5© ô¢ÝÖý ''éÞ»æÕ*üæÉ¯Ö­w¦ïMgé[Ïüîï—|ï…æ‹Ëfý.½-åqô¯ÝÑ ÆÍá³Öû·2«ïKý.½‰D²KKŒRøN>øÖ»{Ï÷¾ÐïRëfXZ³ä|•æ €3­gyþ›~—,ŸÙµ}'–÷ûî_RëÝL\ü¦ßsñMKèû¢­§s8íw›ÌR¿ç⛆{?Ñ7ý™9œ¶®³Ç’êB¿‹­pK^¼RxËŸäÖmò«~ZWüÉ~Òç=ÃËgéâó¾Û¬Ï©Ðïz(ç´$¸YÃÊ‚‡3ÇÅ?^ÕGÃXoôp2«®•ßyžæŒÂwðbWnq(#!·8yƒ“‡“Ī;wœ½ÅµßÏ÷p¬Õãm„ä½ÒßÃwlæ(÷b·5%Ü"x®ã&p‹:ãoÑ‹ =œDyk•s·(?z±¼Dõ¢"pæ3'ô"hv<œDf݀Ћ)m½ d ׃|‹j8 •¹EØzópæY4…ô,:'qáz8Áœ{Áxøõ ßâf·þßZ›ÉöEg²öuïnÒ̼»“oä+Ótˆ6è~s”Éóç³ôU!†Àeò4¬ôÇ&yòÝ;é‹á!Ý–n6e€<»ˆ;ìi¸Lþ@É«9œZ¾“¿21sEd€¼á-¯ Þiÿ‹aó!“ßïDËC:6ûà°)„a“+—Éï)y3‡3ÃæñÖ}`Ø®!Ë cÞêá2ù%oçpÆònxWÑáö6ÒÒ‹2ÂÚV‘9—ÈÓÑl “¸¢>ÉüÊÛ(ÑU /øÖÓŧɷ?k\QŸ”»ßx‘<{u¿g ü—仦Uî\QŸ”ýÊÛˆä0IYämžµ¼JŒ%põ!_ò6"ù4]-¼~Œ°|‚¼Íƒ<õIxÁÛÈÃF oµ&ð',ïÏÑöpE}Ò > y›íy]o…·Ò?6™˜—Oß,ð€Ó×>NbÞ:æ4…“wj=‚²Ð»6†¶žŸç߲ûŽgë´?lÜD0ÂÿýúÞµÍ œÞûx½÷œ¶ÎÜûã ñËüõ¹)TNÈ_¨… ïÖNvëa’"Ge“¬›@îpúæÇ¶‘a{á…¾£-'ðº!¯ó×$/§ýzsê¿uÚó«ßÛÇÑÃß7—d½þ·ž`‡Ã<åËz_òKÎ~¸½à}ÎÎkçã·ŽÀñ(q<8ûµÃ0Ç£Ì1w«/§/àø%qü püú›¿$Ž!GŽïͺ~ë9¾7Çþƒúåp±ýnu#À)ǵýE7"ÃãQàp†ãoúz/sÌñ#bäÇcˆ£ùÅx9ÂÑ8—Îu /†üðÀàq} ð`_×»‘c-ì¼ Çà!ޝÝCûÒq„¿fóiý¿4I¼½îÚÛêá¯rhöÖ>oÑÓ«œoÑGÃëó¸¾êþ[ŸÝ¼jî[Û*á¶Êçn«ýé·{ïy»stûëîm7NñÝ_󹿵Jý‰>XQøOu}ü5 Ú~^öä?BëǘÖÖõz±õZ/cZ/#îT(]´3¶~Šiýqï“Ö¯Ðú5¦õkèÞÛz¾£®NÜ3¶^Ç´^Ë­«µZDëT?Ö{ýϳ­œi=]g¼å×´c~3æwLjQç[?¼­÷²Àg[8Óú öàZ—Ò·°ü!Æò‡]Tëã¨Û¼¬ß/}ëý[…¸Öß/rëÞ~ëvñßZ;kú¯£õ>ý@ébÌs<ü§Þ£oµ-è>Ç;±Œð ÿCþC"_Õ¯ òmÒžÖ ùöîû=ÞûÁÿò_1ä¿DòEÖWµSòÞ”éáŒåU?lNì#¼òU ùJ6Î*ÖòÆÁáèÎŽ9±Œð¿Å¿ ä[öƒþשö–¿Éä‡zšûÁèç·c뽆òYòNÈN³äÓÜ?°çÆ|¿vb?á¯@þ5†ükˆ|*Õ4Nɯ ׉ý`„ùÏòŸù^|Áï·b³9œ#Ÿ+|÷îbãm¶_Ï“oý…žÃ#É÷y`··ùœ·¼wÛ[€|‘ ä!ºØ6@¾‰!ßsÉ(òp޼&©t|õJwêÎH>f†}“gXåú=ZJ>ÏGu°‡³–W’åÇvWŽ­ïÊòå*çmv' Š!zšüDæá‘äÁ]ìb¼Í®‡M–Û5–Ny87l2' ›qº;ƒíÑú1&¶9neocSÅ’/4DVÇm(0+¤Àlô6Ç7 ÿCþM ŸŽoàœ‘OûSô²9œ›6ôe£Êþƒîâãm޲·I5ëm:–#­sÃ&‘ü|–¿ùK ù‹ì*‡—X2äáø7ç†M&øùd<4z{¼ùk ù«èmÖŽŸ¤Z7ïûýJÀ3)á%äeL<_¾VRÇ>°y2žLàáܰéõ('öƒþäßcÈ¿Ëlš³äsgÁ{8—ÃJ ¸ü|ÝwŒ«ü–]e¡SÖÏgœìáܰтŸ×cQEWzõh½Š‰*«˜ešõóÖåV¡¨ÒHÙ(gé^Ï<’ñó•àçûHÍúy•8XtªÞ–/¤³à; ¿‹!¿“-Ÿ;ÖòE¢ÆM)´<äqULXÖmr~ѩЙ&­Ç‘¿@6q‰IF.GqØ(²KÖjXx¹Cæ†ÍøÈ\¡õk ùëQža­cW‰M‘¦ùΆRT ¹Ì ÜÅ-ÆÛÜä6VÌ2/õp.0ëwÍOìxO\óÀ6»À°ac›u–Án¼‡s“”•&©QõØ`ðhýcù»lùÇ[(™Õëu÷M(ž7R…ÖÓòi`’ê˜ðÞááqK)lm¤1;#éG`éƒ_hÍœ…L*•wFºéŒÏaÛF8 Ú4f̧IÊp“Tk8gaؤ1¯Œ0l”a³òûòûÀ°éKf¸v<šÆÃ¹a#fp¬HWñ0’?Ä?–>XòÝQ%ÀYòÒ˜×0æa~Ocƒ4èœ6ÊdfçÈKÞŽñîDéÖUŒ·Qo£R#ìI o[úPà.TŒ·Qo3¼.˜n"ð^wç,o¥µÊQ¦ÜÕ2Œäc¼ x­3~+ÓÀ˜W¡X ÌR̸ ãmTÀÛ(60ëj]Çjçb>0ë?áà.TŒ·Q‡ù,cÉ Á‰ x›Ä ÃÞ¬Þ)êGò1ÞF¼Rùl¬PõpvsAóã™¨Û ÜEãm2ÑÛŒëuÌæ‚…A›ciÝî=ƒ'.‹y`³ÝÓämfa±1Ûý<ô{3l²ÛÓäsV¾‡Ç‘w°jäbÜV^1+2–¼Ñ¶6\`ÑI)ÁUBÍäÖÁb£‹Y«t¯ò ïçµßq¯!ò©D~œ&¬¹˜E'Ø\H•°¡æÝÛŸfX+¥.f¡Õ½\%?Ã*uÜ·'å`Št13¬Û‹–OMÂ.:Y’}ç†M.É´rè8˜"]Ì ë2y­øm›AHì3¬*¤1¡‘ƒU#³èäŽò˜×† ‰M;I©9œÈ)I pØÂv1;à® lëðäuV€ªÓ•Š*;Yf½ ­Ã¢ÐÞ~K…ÖQh äkIZD¡õ‚(´‹ByòHZD¡sŽ%_X k•çÈg©@>K'RäzA]‡…ÐÂ;B×!´8æý>lB× Bè:,„,?B×!´8æµ@ ¡ë!tB³ä±º¡%ò!t-¡7?@þ'†ühyp–OÛ.C´<œ#_cÞ/uv:êzAÅ]‡UÜ‚å§*î: â')¯â®*îzAÅ]‡UÜ2ùT TÜù©Š»¨¸ëwVqó䑺¯¨¸Eò¹È#w½ â®Ã*îgÉÏTÜ!îbãm¶·ùœ·†ü^$¯­bCb›%¾œvÿ7òïbâù]ù§IjWþÉÏw özA?_‡õóO’ŸëçÿBþ ä¯1ä¯â°IÅ$àª6ð&Pç–>r!ªÔˆí`–ÙÅLR»FN'âÿ: þ—Ó@'¥£³ÚÃÚÅ>féc//}䩳œåMá`–Ù‡–>iéc|¡JwØH>f’ÚV†—)ùî5Žs8»z Y~<.j{G}ˆñó‡M`Ødšs•Ú8Ú:;l¤I Ò¬b™¼vš_úаÐz,:¥V²<„F‡3?Ç?‹ÞÆXÍ-´fk›ÀªÀÙIJK“Ôè¬àë1®òp•³\³Ë}ÝK[IëùÔ äA–y„A{ŒóG9¶Qi®……VMZçü¼´zoLï+•ê…:©:\'%Åó“:©:P'%¯ÛҺʹNª^¨“ªÃuR,y\'Uê¤þ˜!,<ÆD•G9ªTà ªÄÛä¼ÍÒÃÙå>#-÷™I™U½PäU‡‹¼¤a£Ùd„y‰®2‘Ò@TäU/yÕá"/)“š¡ë@‘—8æ3! ÄE^õB‘W.òBâi‘W(ò’7Ô2iC мÀו1®²”]¥ÎrÆÏÛî=°À^\å°~b?˜ÔˆÕ ju¸BMÜÊLë*gjr`¦¥ÀlZ¡V/T¨Õá 5ÉUN*Ôê@…šhyigÄ‹FJÈãʘ4°<‰–7Ʊëóy¯¹ôp60“¢J¬”°Ì[Ƭ—Ÿ4°Ðlh-$#åg(<0Rx0úùÜEãmÊ«ì*•a-Ÿ)ty ¹Ê\r•ãÊÉÜÅ9ÆÛœ7WÉme¶Q¥É¡ßÏ¡d$—–û@os†$ô“Þ¥¶byW©3ˆçÏ»¿‘‡)ò3Þ/r<¯µâƼ69ìI/À,‘âyXê<ÃîÀ9fsá| XžKÀíºHMZ³ü7äß1ñü·ÏO‹yë@1¯èm´ÃâbÞz¡˜·óJÃ&Ól22/æ•gXÉò¨˜·^(æ­Ãż’Ÿ7šMFæÅ¼²Ÿ—”N¨˜·^(æ­ÃżbîXËÏ‹yÿbyx⪘¶ hr^81/æýù ¬×]b–û.G9 œóÖb^yØÒ°™ ¬]b.gY²âR. Ôíëu—s€¼,¯¡ää ƒö3æ¯ò*±Î Ã=°ÆX˜e®¡1¯¤¨ôuWXl¼Æ¬U^eœÎ­å&©¼í‘lg—>Œ´ôa&UØõB x®—¢JëXQè¼\^=Z}ÇÁŽØ5fCíZt•Îq±MÑúÐlgp)žËß`мÅ̰·Àú¼ š°‹ÃFKÃ~ õŸò?2y— –Ï|ÅÊL¾#Éï¦ã«×ûú÷z¡ú¾Wß‹~ž]t"Õ÷bn¥Uß× Õ÷u¸ú^°ü´ú¾TßË«ÄFZ%žVß× Õ÷u¸ú^LFTÆ/}àêû?HVRЧ1ôô# Yáróê{yÌ+iÌO«ïë…êû:\}/‘7\TI«ïe º‘$èÓêûz¡ú¾WߋÆ“ Óê{qØH™®¾¯ªïëpõ½(œ`É“ê{™¼4æQõ}½P}_‡«ïEËçü°™UßË ¸¤ŸGÕ÷õBõ}®¾—È«ÔBhT}ÿ‡ 5îBÅxð6“êû:P}ÿ‡…VîBÅxµ -:e¼~Wß‹ä¥L Wß× Õ÷u¸ú^6lHLªïÿ°b¦À]¨o£òYÆ’ŸUß‹cÞ ÃWß× Õ÷u¸ú^$¯ò¸úþi`î"‹ñ6ÙF^«œÔ€×ê{9¶‘ö¤Põ}½P}_‡«ïŸ$?¯¾ÿ yè÷,fØd·§ÉÏ«ïÿ@>‡~Ïc†M˜¤rn[G¯J@¦•‡ÒÀTN€P*‡Y&™¤òÀ$åRVWYh »y`’RZ°¼Ò`y´y̘Ïwò>lÂ…Äf]$:ws8G^*¯SP^—ƒ£Îcü|ðóEÁyÓmÛ9œasi†#Ꞹ<æÍ~Þ)v7°u•°V™ßcž÷óýxO\óÀA?Ï­ÛäëÂB2RüÍÏ0h‹˜1_ìž$ŸuÕ÷Ûóóô{3lŠÛ“䋵J Úâo~ÞA¿»˜aã6²·™œ²‚E¡ fX6“SVj锨‹t1[™nû,yrDÌ_ÈÃÁ.æÜ÷ ŸdìΈ2)i%/ùyD H•\ŒÒɽ>Kžœoóò°‘êböa]@š*¡àŸoó‡ÖÎÊÅÈ´Ü{ ásØùù6(»pY¹˜ÀÌ}<»‰Ü…•þýͰ’*RÌ2.f’rr`6=œÇ·žw/¬‡]` Ì$ÕÇäpHÿ]ÌêÛ?Ižž,ôòÿ€ü¿òÿdò““…ð&rfŠ9œ#/éç'' ALëbBbwx–<9é/äa#ÕÅìú£ì*'Ç"Õc‘äã2W‰EªŽEªÃÇ"‰ê>žüüX¤?,÷9¤ºE«;,Ÿjnû^Y—é9œ}`¥ 5\F묚…“…šðÉB¼ý–|²P8Y¨òt²P8Y¨Y8Y¨ Ÿ,Ä‘Ÿ,ÔN’ÈONj' 5 ' 5á“…ËOOj' Iä'' 5“…š…“…šðÉBùéÉBMàd!‘¼_úh¤“…~€üO ù‘üôˆ˜&pDŒD~rDL#ó9¶.TÒ„*aɯPu8¨„'ʨ›ÀA%ÍÂA%Mø ’gÉÏ*ù ù¿Å¿…Èç¼åñA%"y¿bÖ*i*i•4 'N4á'??=q¢ œ8!ŸÖ6'š…'šð‰ùé‰Màĉ¿G½‹ñó»òOÞfWþéíÎ|hNœhÂ'NÉØ¨r¦h•ÉK®Ò‹Ba–q1“” LR9çç©4Qö6ÒZ%’&6 ÒÄ&,M,?U÷5i¢hy)“Âê¾fAÝׄÕ}ù‰@® ¨ûDòÒZåD K^.fÅÌBi æâù¹LK¶¼´'Z£ÿmÖ_}ëÿ“¼ÍÇ—Là§ïÓã/ôÙPþªæxÓüV;ÕÜþÿöZÌá œ¹AÝ_Ï“8CÞôçÏ3äSÏáùþT%Bþ¿u!ñql³ûëyògÈÛá°B¾ó¢s8%ßí­°–ox„ŸÌH¾ýëyòç†ÍðÖBBžƒ3–og3–|wWxc>‰óÉ߯|ò·1o€¼‰!oDòëÌôË} y«&@~µÎyò>ž7/@þ%†üK€¼ÍyòÖ¦s8gùþ|Z†¼¡”yòo1äßBäË[¨›8K^6 ¶´Ì;!ÿ o ¼Êçp–|&‡Ã¸Ìÿˆ!ÿóFó Ó8K>Ƽ‡ï€ü.†ü.@>·‚«\gs8G¾,zóÈÿ‹!ÿ/@>fØ ÄÿçÈ;aÌkÄš#?Æ?È;+·fgÉ| äK _Æ/ä a’Êàt€³ä•0l`oÂ@lcbbs y‰<}˜ShÌBl9¬…ÖÆÌ°vó|lÓÎ2nçÈ÷i %ÿŸmìÈocÈoäsa’Òš´ÎÆ6Bxà™-„6&<°/!Ë áAêÒ9œµ¼âyOþÈ¿Æ Y>•¢Êlg-Ÿ cÞˆmlLlcßdòy"‘7éÎZÞ –e£…ØÆÆÄ6ö=DÞJc>›ÃYË Q¥U‡…ØÆÆÄ6VŒmÆ€œózg-oËÃΈ…ØÆÆÄ6v²¼‘Æ|1‡?•IA¥’½ùk ùk€|ÎZþ¿®,s§äÿW¬Ÿ¤j _ǯä•0Iù7uœ³¼É%W cþäo1äoWYÃ&ñcþ3lƨò¥u1Ûž²ÿkʱýßáÒÍ^ë5Gþåý²~yÀÇ¿¢àÛ÷™ û¿n7ññ­Ëûúuhþš7R¾ØY#ë1Yô ÃmFE¯m?6ß7—d½þ·F&­s{wÞ¶žˆ­·fýpä™ÖJçp¶uÓ¯át û÷)ü Zÿz¾FÇÑ+žÖ¨PèàghýÓúY¼wýxz_>wëzhþz¦1·˜ö1"×úx~ÄëËøÙöE($ ¿û_š$Ö__ljfûº‹~ˆ€¿»íû%^¼Žÿü'þ1.’o?¾"àÇ1>Ù?"à§1°ÜžÞbàÿþ/~ø1þ9f‚ÛÏM ZÿŒiý,ÿcùÍ{ëà†²ä÷ø?€GXþ­}L_Já§òÖ>oÑ'ë·oÑ ßÚ/ÏÐŒç²c\¸_ž¡ ¼“÷é9<4Cïÿ6Cï#fèn;‘´5Cw~¿ÿÖÀšÀÙy®˜qÞ™.÷ðgãƒtm)<*>Ø/Çœå³b…ûå0€4ÒU°¤sx( è¾õ |ÿ®;EãNéZ±¼ͨ?Þ/!´õn?dŇ¯—õ÷[ÿ˜|½üÒuM6ÇËö§7ïü-Žy õ¨à‡ÊãçzóõVÿµô#mîÿk³§‚Àç.±MûšˆN10¿÷q·k§nÛsÜÖÛãP¾d¾Õ5²å¥ |pÈÛ2~\·Ñ@?Iðc^®·Ÿùn˜÷šÖùïPøaö-“Ù^2PøgÀÀ§õö‹ç¨L_B9vPøœ£²ýþ åØ}@á_Ž×õv8)h[KÝp tC ¿qðvœêÄ0ðÿ:ñPFá·Çz½møFlÖoŸÒFŒ5>Sx#7rx[¿„ìàaˆ^ÿëD¼ãˆh§þ÷·á‰}àlÚ0‡÷R|.@{—ã·êõûÇÐȇÔHhd„“cþ›ÞÉÏú}Ï}«ûR:øžŸ@#Þ`x/¸Þ¾ïånhÝÚû¿QÅú]"vêl x¾Özïß‚síø!ßâ÷2ü;ï8þpÎý¿µÖ 5³²l,·›ÂøÖ‰…Úiq\óðSè[»ãz78÷ÝŽ<×ÇÝ‘<×Àq/ånhzwâ~Židðq~’Ù­÷[^(öß ž˜=×ÿõn( ßJnaF~]?­÷û?Å´îá‘­K"¹| Žóã—{¶ãÑöúf9À[¾ pŽ'Vå–J±þ:ÉG ½‡3܃ü,„ú¯ÓR§¤õùBó´‘ÓÛ"Ç=™¢Ó±ºdŸø¿îõÖjÅ™.Q m}¾ цËýÞYâo£>oàT[CàÔÀÚñV°²7…ŸÈ·úã!hiæÔÀ—Ïå øø+—3p1‚]–85pž;~Û”çƒ{$EŒS\>;4dàò7ÞÿÍEì#\DšSáN œyÁÖj Ÿ¸¤ú€ÔçN ø&ØÃå§xÐÀÛÍú…7p7›¸SZ°6nTÝLàó•½n™»àÖìºãÿ…Ïí˜è¾œ™š.)F‘Þ>¯Žláý[bç»6íçã²ñ´õl·³ÐV´ÒC´L,ÔHát¶×o¡d¬ÀçoDù…|ëÛ€…^d ™^èI*·c–¨¾{Ý5]6‡³vÌ'3ž2bõˆÉÉ|^I¸¶„ÀZi¢hë ³½`¡4â!m}/^rüÒ@j CáÔB&å-•_ø¼\±{[COÞ•”VF[_˜íõ“³}š©”ÂÉpNr!²> ñp2Ò›­X®Ñt­¹éº³c_HŠ%;û¤uw’íxng¼\ˆp‹ªë´'ðí‰Yfàƒ§ÌÃÅC`’7 ùùY­'€¨é¼[¾E²À“Á"»‡ChcSÞÕ&ã!S8Q o[àâI³A |~*²ÐíY uìs §Ê’\°1~¢[‚fÑBO„ Zà󣿦ªBI‘²®VYù<œú •ç¬(+w\MáÄBòSkŒ^IOÙÿ¨…Æó'ðŒyÊÆq^í",dlNàD¿×-ó Ҏ©’’ó‰…^íb,ðl°Ð-ÆBº p:†4»UÒ[ˆÓ1¤ÒE ¼ºÅXàÙM¶Ðæ¸~Ý •>Ã^î¦ß C*óÉVÖÇúµ$òÇ™tø¿µ12¾Ù|00[Á]ÈæwSGø|½µo¦¹mˆ¶ßH»'pô­^d7¬Ïö'º#­%ð™Þ°O £ŠZ§6O)y,ªê+3Àuö»yîÑÃqœÕÁÇHtFË&ÊPò8eêÔÉŰ·™ß{’ÚÉ6ø³ý®2]è9|Óïcÿªß•ÍÝÎô{Ñ¿p”l?u……“~Ͻ.í÷tº‡/ô{ª“aØÌû½Í‹œÀgbºÖ%¥µð•7”üvn¡ü±Á=K‚׉É3CáØw¬U›Àôý¾› “BMÜųýnõTðh>Ö…$N´G3Kà´{ëõûùóžØ—òpÒ½j8o…öh^8Ú:éÞ,1ƒ rÞ£9Ó3“ÇZ¥É°Â27Jf5ݼ{SeSÙfþA›ÒÓÍ¿eò>¹ûùòù~/Ò$ŸÃ™~WC9*í÷Ü{ÚRè÷¶ÛUžòý®­#púXçYÁö»bå œô»ÞËô»…(ÀÃI¿§ö!Š'º,£÷Nk[Çõ»RÊÒÖËy¿ÃȦbHý~{ºßSg¼Öä~þö[?oXï8©yèZOä‘¡­ÓÑ¡rãX?o}Žåá‡7²½§ v~7.§äéü® ÃÎïJƒ&pâ’äñ¼¿‘ÕJˆÎ'ð@õ§¹mo›¹åáÝN_›Ÿ?oakàÌ4ž<5yÞ$ðNº×*Åûùö®r§~Þög ‘ç½Mz#pò¼çÃÁôy7ptÅNº×&–øyå¨éæ§Òà?óoµ3™êŸ÷ùyoúé~7>¥8ÓïÊ)©ß3§ýžô¯Ácü|šÓÖi¿CBKçw“¥Nýü£žf^þÐíSNçw;È·I¿[xýNÅðÀ’ùÝfŽÞûìmèÝâjŸknz¸Ôïß1Ï;¸ €o¶ß¿Žçߣý–ýüp¸3ðù¥ž œ ›bXצ?¼\y§£#íWÕ©ŸoƒMàŒŸOù<ÎÙÂ8ÍãÒ‡i)(yâçUÒo¼m¿·ÔŒÃæåùç][Çß¼l~ÝïpŽž‡sùû S#Ž@”<íw£v~ïž8 'ù»Kúiö»v)Ûï6’ŸÀi¿? ·æý®3;/1WIÿ~âíf>¨äo¯~^k gº·î‰ØÀ]¼ü|¡øx>…C'ð¹|´ë >³ ÚWÙÏ·ϧ© Î'pÒ½íØÎX?Ÿ;pÔ¯ùUC22B´3?¬yøì}fÝ-öÅ-›×€Ÿ«žï÷\h àLç†{g<8ÌqÎäïú õà LÐNkg†ÂÚï9l¾z8y¬ušóy\ë©é½“~/¬Vl¿O&© |îÎSûP°/O4Wó[ìb×®ßÛ¯ˆý¾X¯3¤À'•9]*%ô{¾ÎÃiþž ù{è8é÷"UÜóÞKT5“çÝ>6uI¿g~ÑÉÃI¿k›ñqQmÆóvð64žWŽÞûnOò÷~ŽÛìw~X¯ËÓ¬˜Ã?¯âyp•û£Üïà †™™Š“'pâçÛZqý¾òïäžÀiW «¤ßmn(œô»ÑŽ÷óƯïÅõ:¥ì£HaCïÝRÓÍû]¹>(Ýìëu‡Ãóý®à$zgú=Ë„ù^Ö2Óù=Í2~~Ï|…ÅAÌãÚçU³~¾ð:"§Ï»Køü½ðKÜNó¸$±Â:-l¬LàswîT®ùuZÕ?>{{' ïÏÁßôo˜—úý‘ÇÁ¡DÎö{!¬ÏçŠÀi¿/Wfò÷6;&pš¿?† ]§MaÁÍÙüÝB¿k §ë´cÇÑ—iM“¸àV9»N« G[¿Îó÷bÚoúr#¡ßˈ~7âºòˆë -Ìï°3Rú] û2*k)÷{›lòÏ»Ó0¿—b¿·ÌMÐu«Ä¥ÜïVöó œÀçY¤6å}2ñ˜ã<|ö®Ö>éZß”~?½GìÃzi1À¹ù}Ø dæwx`=œIÓùõº´û]'q]Rðñ|ëæ>ï÷6t‚RÏg0A{8ß áyï2< Ÿs4ÃûÌGAþîáå;Iûddszôû1¦ßý½ðÍéøëu›Â÷ûQ^¯{ž1ÓÑá2~ÝFk?æòºÍ#› ëu~cÅÃéº29»^g-µ<•ª¯ÑÅ…ˆ ?lžß‡ÕÊ|s*ÛïIž8ãTÁïÇM¶u&p²kgÓïýZ˜¡­Ól¯0ì~œNrØ õpâÒ4ã×ëÚ\F8ã’Œ]¯Käï§2 kÔ ÙDöIègÄþ{æKÙ>ƒûïÜ~\ßñŠÀécë6ÊWp}Êûïm#© »`Z'q]k9ËÏï9ìË|ÊûïºÐ†õó태SøÙÖެ!ó»ÎaKËÃËO²WÜWm>ûïçˆuZ•z™ðF^·ÑNˆëüŽØY^§Ícžæqò³¼g\ÁÇóEa)œô»3ƒ£¦ù»M)yÚïpf?渳¸N›¶4¿›é$#ðË™ˆ;úå¾Í9°N[EìË´N0ŸÃ7Õû2sQÿRG`ӂ©\gXú`Î}€U£JÜ—é¶ïY}]šXð´Uh_f˜¤æ"M²Œ’§ó»Q«»Ð)T‰Uòò~{öžvS‘…{Xx¹F¬Ój8…ËÃi÷ꇶéQ½_wòúüc­’úy¯)½îä‹Ü\ë´×ˆxÞä°w ¬Óæ…0¿ûµ‹k`vÄÒ'9£­ÓmöÇIäIÎüîÿU\§MIøu›Ä¯Û\åuZ§¾ßÛ˜‹“}™Q¦õBÖýòGÒï¶Ÿ¤6×À:í=f~7°3ðÍý÷~ÞÁ½ß~>euÔݾî.ûykXý|7"ÀQße?ï ÅëçÛÌÚ8õóyš yœ¥­S?ß²çuYAïì¿wzÜÞÏ߉î"›ŠÿÓ`¿ós8_±’*"œ-XIΖG¬¤ŠgË#VRE³å+©"‚À7³òãƒÇN&¿Ô?wp¾Œa%U.8[ư’*œ+càó-íKÍ=œ-cXI• Ζ1¬¤ÊŸq¸6ΠJ€pÿðs8_n°’* (œ+7XIΖ¬¤ gË VR…³å+zöáÚtË;søb½ÀÓý£ å8_°’*(œ+ XI•NšŒá |ºJgËVR%³e+ztâÚd¹"÷¾¨ë_òo·_ÀYù¾´®ËQÎÊ÷W’bŸÀYù>»o tNá¬|%)ö œú7'ìwÎÀ77²èŸñŸçŸ5©lü‘Ÿ§ùçg"¸™À9™ýJRÖ8·}Ã.ÔvSwJà¬Ì~%)ë œ•Ù÷ÏÏÏl¡Ö˜œÀuòO÷?à¼~%)à)œ“ï¼%pV¿ð³rø•¤€'pVß?½›ùü“ån_Ô³/ø7V©>‡ó²õ•¤T'pV¶¾’”êÎÊÖy½[žR8+[_IJugeë+I©Nï};Ê,R~/ôÏK {ÎËËW’¢œÀ9y¹°Þá«X=œ•—¯$E9³òò•¤('pN^ž®$E95Ýì)³¹÷0¯1þ­@ íT*Ü+ø bë妯²êßrˆ¯_eÿÖÉÀW’ò›ÀYøJR~8+ïÉÏžŒÂ9B~QÇýt|íT6‡ór핤ЦpN®½’ÚÎʵW’B›ÀY¹öJRh8+×îào³zÝZŽ´¾¨·~®%õÎ˪W’’šÂÅúINIMà´ NI8+«^ JjCବzEO6ïÞ!¦É½/ꢟöoNºÛÖ\žI˜”Â9ùóJR<8]VOß?â™ÀYùóJR<8+îÉÏOËi£Grï‹úå§û'ËÒ9œ—)¯e²¥pN¦¼’”ÉÎÊ”W’2™ÀY™òJR&8+S‰Ì¨éuÆýSÌἜx%)ˆ)œ“¯$1³r╤ &pVN¼’ÄÎʉWôÅkcüM_Ô?zçe¿+IéKáœìw%)} œ•ý®$¥/³²ß•¤ô%pVöÛÁ˼ N ;‡/êvŸŸrVœ”]IŠ\ çä¹+I‘Kà¬>0þ샳¼¾S<´Ô¬b”ÀYùèJRŒ8+íàgâ¹üÑ_Ô.ø·ê7p^æ¹’”ÎÊð±ù^Ðïáç€!Î;hd÷ëF¼ÀÃÏq¾=¾ÅýÖ°Bö_Q8ÿšqCe»þº4-giÉ;ŸÖj¼ãø…Ÿ€õ°™´¼vlÿ!·ž ¡Ž%…Î~%àóÖÛ¶Í£på#Ðú)Ðú ·ômßþl¦“tï]óÜ:nýKj½3}o:»¥–ÏæpæÞ Í—ÉÍú]zY×ãzK^7—à ðYëWI‡(~©ß¥aéAäjé[ªýÙL|ëݽç{_èw©u3äO–LýHlδžåùoú]²ü#¾°ïÄò~{ýKj½ó¢ÅR¿ï6ë³ðîíµ í…Œ:P‡y8ó~¡GtCæÈ5¤ÇNßZÙìá7ϳ»Ê(|pÎGù»Åö×)tïQ¼Eÿb›#}‹¤&p2¬‡ã%ç·(?nñz{Q ‡Ê3·«HÎô¢)¤^tNf–õp?׋0†<üzoq³[KoÆ}$4ÖÐ^$p&f[÷5ÝQßNàÝ|#ÿ–¦ƒ‡Ù¦îÍQ&ÏŸQÒ/^—ÉÓ‰É~äÉ·½[iØã]ð6õ†«Rõ룟óåÕ¬˜–Ø>àôe™á^öÐ+ç|v8@ ŒžèÔ°wÂr´*ÉœrLÏÑXGZ§Mcèí¸®Sî[í×òAêõC§g²Ø,á^†Öç 9I¶¨ÆÍ ËënýVößz–Š”Gß\’õúßdAwõ»9‡òe½/ßÖÜ"‡wßzû™«ƒß^f Åë|“^No#ùÓ›@~ø€'p†¼í•HAò†|6Ùv9üQ" ?È÷óZ˜ü1‚<<}ÇÝ3lîâ°¹Käõ›asšü(Bé²Ê×]gÖG~YRßѶP¢ uÿ©®¿fÎùçeO>ðð#´~Œiýh]¯[/¡õ2¦õ2âÞa¯¡Û+[?Å´~Џ÷IëWhýÓú5tïŠm=_ÇSv[8cëuLëµÜºZ[¡õqã»ÛÛy´¾ÛE´p¦õtñ–_Ð:Œù]̘ß#Foýð6¶~x‹hàLëëÔ ­ûñÛXþcùÃ.ªõqÔm^Öï—¾õá9Lëï¹uo¿u»øo­5} ÒÑzŸ~ t1*‰<ü§Þ£oµ-è~¡éÄ~0Â?€üG ù‰|aT¿RDÈ·ÁyBZ'äÛ»ïwNì#ü ÈÅÿÉ·¡vÎ’×ð~Gg,¯úasb?á¯bÈWâ°qV±–7öp†üP#~b?á7 ‹!È·ì“‚µ|›˜xËßdòƒ@ðÄ~0úùíØú°Sþ$y'ä §Yòî×ÌáܘïÓÞûÁò¯1ä_CäSü˜xz8%¿v{Oì#üÈÆÿ”ÈwôC¾Ï{³9œ#Ÿ+|÷îbãm¶_Ï“oý…žÃ#É÷y`··ùœ·¼wÛ[€|‘ ä!ºØ6@¾‰!ßí=Êæp:lÚЗ*ûF8¸‹cŒ·9ÊÞ&Õ¬·éôŽ´Î ›Dòó Xþä/1ä/²«^ÔLJš3ç†M&øùdwp†²‡s9¬”€HÀ¿Á×}ǸÊoÙU:eý|VÀ9ŽÎ -øy=Ê/;ió£õ*&ª¬6r`–iÖÏ[ïDñpvØHÙ¸mݽ‚v$ãç+ÁÏ÷BwÍúy•Àù(ÎY¾VÌ €ï€ü.†üN¶|îXˉ7<=<ÒòÇU1i`X·ÉùE§Bgš´GþÙÄ%&¹Åa£tÊ.}X«aáår ›B6ã#s…Ö¯1ä¯Gy†µŽ]%6E:¾ÕÃÙð@Š*!—¹»¸Åx››œÃfŠYæ…aÎf}EÔ‰ýàoà‰kbØf6ll³Î2xQŸ‡s“”•&©QÝÔÙ=Z¿ÇXþ.[þñÆ5fõÀÀzÝ}ŠçÏ–O¡õ4†|˜¤¥:À)Þ·ô‘ÂÖF³3’~–>ø…ÖÌYȤRyg¤›Îø¶ý`„àMcÆ|˜¤ 7Iµ†s†MóÊÃF6{ ¿!¿ ›^Ï=°ãÓ=œ6R`•¯²y$ˆ!,}°ä»'¢J€³ä¥1¯aÌÃüžÆ„i <Ð9?l”ÉÌΑ—¼ œëÙ‰O­«o£ÞF¥FØ“•œ·ô¡À]¨o£Þfx5&ÝD.àDç,o¥µÊ±`¦Ó,äc¼ x­3~+ÓÀ˜W¡X ÌR̸ ãmTÀÛ(60몡FÕº‡s± ˜õŒpp*ÆÛ¨C€|–±ä†àD¼Íð¡ûÁw¡b¼ x¥òÙX¦åáìæ‚4æÇC¸¶¸‹,ÆÛd¢·×ë˜Í ƒ6 Æ6Òº Ü{O\óÀf»§ÉÛÌÂbc¶ûyè÷,fØd·§Éçþð\#ï`ÕÈÅ,:¹­¼bVd,y£ lm¸À¢“R‚«„Ú¨­ƒÅF³Vé^äÞÏk¿3â^CäS‰ü8M8X5r1‹N.°¹*aCÍ/6º·?ͰVJ]ÌB«{¸J~†Uê5=Ô eu¸ìâIò󲋿¿ùk ù«8l’D1 ¸j‡ ¼±Ìù¥\ˆ*5$b;˜ev1“Ô®‘ÓÀIÍH¨‘Ó@'¥£³ÚÃÚÅ>féc//}䓵ʩåMá`–Ù‡–>ié–ûö0Ëìc&©}`õÀ&9K>·Ix8»z Y~|×|÷¢òGë‡?؆M¦9W©£­³ÃFš¤ 8ÀªÑ!fÑépÉk§ù¥ ëó‡À¢Sj%ËCht8ùs ù³èmŒÕÜBk¶¶ ¬œ¤´4IÎê¾îã*W90Ë5»Ü×½\Ž´Î‘O@Ô¼G´Ç˜1”c•æZXhÕ¤uÎÏK«ðæÝ¾À­^(¯«ÃåuRÒ@\X/ÔÖáÚ@!$žÖÖÚ@yC-“6Ô 6|]ã*KÙUê,gü¼mCâØË€«t'öƒIia½PØX‡ Å­ÌÔ±®rVØ(fZ ̦…õBac.l”\夰±6Š–—vF¼Ö¨„<®ŒIË“hyc»>ŸçÅxn¡‡³™U‚Ò©„eÞ2f•¸ü ¤…fÓ@k!)?CᑃÑÏ—à.ÊoS^eW9¼—X>S 2èòr•¹ä*Ç•“3¸‹sŒ·9o®’ÛÊl£J“C¿ŸCÉH.-÷Lë Iè9&‡=K9lÿÄò®RgÏŸw#Sä9f†=_äx^kÅymrØ“:_Y"Åó°Ôy†ÝsÌæÂù°<—€Ûu‘&š´gùoÈ¿câùo9žŸÖ€×pÑÛh!‡Å5àõB x®—†M¦Ùdd^.ϰ’åQ x½P^‡kÀ%?o4›ŒÌkÀe?/)P x½P^‡kÀÅܱ–Ÿ×€ÿÅòðÄU1lÐä¼pb^þòX¯»Ä,÷]Žr8©¯5àò°)¤a3>2X5ºÄ,:]βdÅ¥\¨Û Öë.çy'X^C¥Òí5fÌ_åUb†{`±0Ë\Cc^IQ%èë®°ØxY«¼Ê9[ËMR¹ƒ×5{8»ôa¤¥3)Þ¯Ž¨ÃGHQ¥u¬(t~t€¼z -´úŽƒ±k̆ڵ è*ãb›¢õ¡ÙÎ&àR<–¿Áy‹™aoõyA,4?÷@6Z6°èô­ÿÄÿ‘É»T°|æ ~dòI~70ßËÚ›P/ÚP‡mý<»èDmp+%àèІzáІ:|hƒ`ùé¡ uàÐy•ØH«ÄÓCê…Cêð¡ b2¢2~éÚðÉJ ò4F‚ž~$+¼@n~hƒ<æ•4槇6Ô ‡6ÔáC$ò†‹*é¡ ²ÝHôé¡ õ¡ uøÐqØptzhƒ8l¤L ÚP/ÚP‡m…,yrhƒL^óèІzáІ:|hƒhùœ6³Cä\ÒÏ£Cê…Cêð¡ y•AmøÃ†šw¡b¼ x›É¡ uàІ?,´*p*ÆÛ¨]hÑ)ãõóøÐ‘¼”IáCê…Cêð¡ â°aCbrhÃV̸ ãmÔ!@>ËXò³CÄ1ï„aƒm¨m¨Ã‡6ˆä•@Úð‡40w‘Åx›l#¯UNލ‡6ȱ´'…m¨m¨Ã‡6¬ ˆBS%¼àc‘þÃ:ÐY¹™–{$#|;?ée"+˜¹g7‘»°Ò?°¡V’ CEªƒYÆÅLRN̦g:ùÖóî}æ° ìB™¤ú˜œéé¿‹Y=pû'ÉÓ©þBþÿCþŸL~r ÞDÎL1‡sä%ýüä@*ˆi]LHìÏ’'§iý…’T£hu§€åSÍmß+ë2=‡³¬T¡»B$©.FÑê>å1Ï–×ÙµÉ|”û ­UæÒZe>9I¬^8ǬŸcöyzŽÙ_ȃ`ÆÅèmÜ9@Þ°ºÊL9›Îá,yiÝÆŸcö ä¿cÈ?IžÂöòP±âb ^\%?°9ëçÉ!lâ·t8Ïä¶6ºhŽkÂG ðö[òQ`Mà(°È7ÒQ`Mà(°fá(°&|G~vX8 L"?9 ¬ Ö,Ö„,?= ¬ &‘ŸÖŽkŽkÂG ä§G5£ÀDò~­²‘Žûò?1äDòÓ3šÀ™NùÉ™Nt¦ÓçØº|²P>Yˆ%¿Bç4“…xòè܃&p²P³p²P>YèYò³“…þBþäo1äo!ò9oy|²HÞ/q7“…š…“…šðÉBO’ŸŸ,ôòÝ!-ÍÂ1MøˆÁÏOˆiGÄä§Å¼Màˆ˜fመ&|DŒ@~zDL8"æ/äÁQïbüü®ü“·Ù•z`»CZš…#bšð1O’ŸóòW !‡Íôˆ˜&pDŒ4IMŽˆi¤#bj _ǯåÖXÎÛ´ñA‘ë9‘fXtâD³pâD>qB´<÷ÀÒ'þ`ùo˜"¿cfØoa†¶2-·n“´Ñ›ÃYo£$o3-!o Ø›p»àm¦ìM €]ôóN°<.`o Ø›p»´Ä=)`oìâ°QÒ ‹ Ø›…ö&\À.MR“ö&PÀ.# 3©ÂnjÀ›p ¸¸¡æçmæ5àâ°‘¶u| øÌ2?1“ÔœÃN˨›@µ´b6)£n„2êZÏcÈç›@&Å…´rAΤ¤ØU.4 • M¸rA"?©\h• ⢓¶2qåB³P¹Ð„+$??©\h• "yi7W.4 • M¸rA²ü¤r¡ T.ˆ®²¢J\¹Ð,T.4áÊqØ(6ªœW.ˆc^I3,ª\h*špå‚Û¤\lC+D˧˜Ǖ ÍBåB®\xŠ<­\ø yè÷"fØ·'ÉÓÊ…?wÐï.fظìm&âÿ&P¹ z/þoâÿfAüß„Åÿ"ù$c£Ê™ø_&/¹J¯Ÿ‡YÆÅLR.0I土§*nÙÛH ­HÅÝ,¨¸›°Š[°üTÝTÜ¢å¥L ¡›!tBKä'Zâ& „ÉK ­-1¬×¹˜å>w ¥š‹ççŠVÙòÒ†R´6 ŠÖ&¬h•,ÏîRE«¼zK«SQh³ m¢P‘¼a—>æ¢P™¼ÃVæÿ6믾õÿI~þãK&ðÓ÷éñ¸›l8&åUÍ?ðƒà·úkö­î úöÿ·×bOàXãýêþzž<Àò¦I C>ÕùΑïþ#äÿ['0êŽc›Ý_Ï“8CÞ'JòÝü5‡SòÝ–kùö‡GøÉŒäÛ¿ž'pnØ ¯Ö%ä98cù6Ž`Éwwõ€'0擘1ŸümÌ'óÈ›òF$¿ÎL¿ÐÊ7°ncäWëœ'ï3)óä_bÈ¿È÷’†¼W pÎòý!ê yâ@óäßbÈ¿…È –· Ÿ8K^6 vBÍ;!ÿ o ¼Êçp–|&‡#Íÿˆ!ÿóFó M8K>Ƽ‡ï€ü.†ü.@>·‚«\gs8G¾,3óÈÿ‹!ÿ/@>fØ *ÔΑwÂ˜× 7G Œ! wV oÍÎ’7ùÈ—@¾Œ!_ÈÂ$•ÁpgÉ+aØÀ®ØÆÄÄ6æóy¨L4§Ð˜/„ØVÌ'ÿŒ!ÿ)†Ýð¼ ,÷œ#oE?ð3?Ç?G‘7søsä^ù*†|̤Iª}æp6¶‘\¥S` ™ Ììæù¸ NÜÎY¾_·¡äÿó!±Ýùm ùm€|.Ä6Z“ÖÙXˆ*ý®…¨ÒÆD•ö%dy!ªL]:‡³–WBèÉ¿ù×ò¯!˧R2’Íá¬å3ÁUúa!± ‰í›L>O$ò&ÃYË[Áòàm,„Ä6&$¶ï!òVóÙÎZ^HFükÈ,„Ä6&$¶²Ÿò8vÌë9œµ¼,[™BbÛ]ÈòFóÅþTE3˜Ù2@^9)žWsøSc4¥3˜ÙÓóä;‰ÜþÔ°ÀÌB`fc3û ¯%oãç÷Ï(W –‡µJ³Vi¿ž'?6¡µJm…1Kö ä¯1ä¯ò9ëmþëŽY™Ã)ùÿÄ…Vë‡M äëòuhÌ Y ÉÀ9Ë›\ `ØÜ€ü-†ü-‚«L¼Ÿ¿Å¸Ê1i§ÕmOÙÿ5åØþïpé"¶õš#ÿò~Y¿<àã_Qðíû¬Ðé¿NòòøÖå}ý:4͹ÍÑk;¦éô¾¹$ëõ¿5²£[ñ­+ë-ôúàZg~רtg1ýZ9^úèþ} ÿ‚Ö¿ž7ðâ8öÙGkÔÁuð3´~Žiý,Þ»Vþ[ßÐÈ÷/ ì;‡“FºV,o`3Ê[_>wëzhþzæÄpLû´Š»÷ñ8¹×—ñ³í‹PéG~÷¿4I­¿¾Ž±Ùöu?üeäÛ÷K ¼xÿøO ¼xÿ#„íÇWü8fÛãG üàŸðÓ˜ nOo1ð=À÷1ðÿ?ü‡Ž;ÅtÜç¸p´ýÜÄÀüg ùo6ß1ÃfóÞN-Ã/ï1ð踷ÖE½”‚³‡úÖú‚Ç·¨WðßjºÇ·èãßÚ/7Œ×¶c¹_n¼“ïë9œnú™å}ýbçv|Àÿõì娧/R[ˆz:Ó½ƒéÞk:Íáìì×OÊóÜ%÷ðgc®tm)<*æÚ/Ç\œM³b…VûåЊ4ÒΦsx(´ÚÇ„V]-ÂZí—C+Úz·Ÿ>‡‡"¨Ã‹]}wŸ…¦Ã×Ëúû­ÿÖ×Ë/]×DüV¶6ï¼!ÆzTðCe;IoþñÞê¿a埸ÄÿÖzLàs—øßãÌaÃüç5“8uÛžãö°Þ‡ƒ‘ŽÌ·ºF¶\8y[ÆÀë6éá' ~ ÀËõö“#ß= }ÍÊüw‡(ü0û–Éì/™(ü3`àÓzûÅsT¦/þ¤»(|ÎQÙ^%@9vPøW€ãu½Î`ÜÖR7\ÝÐÂo¼§:1 ü¿NœQø-À±^o¾›õ"ڈѣ†w o¼¬·fø–‘ ñ2o=Ï,…oæT@­TÞÖ¯!ýz4rÀñù]%Ðoã‹÷·Á-¼ p6/›Ã{Uêe6ƒŒæj=ÎûÇÐȇÔHhd„“S9Q#?ë÷=÷­>"éý#›ã±ðÁÓ¾zgû¾—ûºõïÿ‚™ ÑíþçOÂîµµÞû·0ƒŒvüoñ{þ€·ä½à•Ôú| µè”Âé ðßj ñÃMSí\¦µf¦©ÿº÷9æþÃsäºa<ÿµÜ×»ÝpÔÖN¸Å]`éà%ï\×@~w$® ÈOà¥<ÚŸÞŽíÏ ׊ÂOr#û¯õ~Ë+®ÿTˆ3¯ò_Z›¢ð­ä”fä×…ñðÓz?ø‹ý)¦uÿˆl]R›?àûSð);~péu;Pm/äc–k¼åÛîxbåâ©”ôtG«9œ‰QägQb÷ˆŽ ߤõù6Ä´‘¶S—8î?HH?žâ0ÏFG;|Ë„¼½‡Ï7©Út¢wô̽·™Ýÿxž|–®8!o‡÷2ý£Fyï>ߤꤤv‘üi™ü)@ೡýKò§¿‘ÿzžütØ|‰ä5l¾þ6l¾Ö§7Î'ý×é%ÜŠ¥¥àÁòðÓ[ÀížÖ§=߈͕eiSeKà§@¨ÒƉ§\7t›¬ý6+ñoÿùsH&pBEé^q:D[ŽÅ¨Æ™ÀOHgo×§!‘lÿš¯C|~:råÓ?IyèüÞS¯žè;ë‹ï†Äö/¤÷î2£üH“Ú±z2ÁeØyÍMºn3¹ÌgŸGa˜O.Ð,õR¯¿?øÖ»2…þÉÛL€&9€mvëm*Üûº„Ñb)¿—;“ºE»—ß&0'p’D·nL1YpëßÔ(ôŸÂg×z8€‰žÜ°.Æ"‡ \~I³T•ÍáÌrôÄÀÇ¿øø¼Sm SkÇXÁš÷~"ßêOu£‡’L pù]!eàòo.#F°Ë2§ÎsÇ`›2pbà|páäøŽ©.¿¯ dàò7ÞÿÍEì#\DšZ¢ œ8Ms~ÛQC6…Ï ÜN¤ý@N¦™xB>ÆEìå"×?ØÃŸñÁãI­8ãƒÍ`=f S8Á®|ðM6°‡ËçÄ ð ·›õ oàn6é-4/í\7ÊW'ðùšw·MTp«ÙÝB¾£ð¹ÝäCM—£Ú}ŸŸ Ò…ÔvE÷3ÛÏÇm—ië9 Ønÿf¡­h!¥3ÅZ¨;¯Âél¯ ÞBÉxrÊ>mêï,ä[ß,ô"[Èô¤Â¶µÐX§3 uÓo¡Ü2p2† -Œ!ã-ðùñ,FÜ Jmý%`¡×¿YèUCʘÅ1ô*Y¨DÒ¢­Ï_û; ùÖ_z Xè±gDF‡GïáŒ!pòüÀ‰!S83›(þA<Ï‹±»3”{Ï_?»N`ÛrÚú[ÀBWÑBIþðCïóÑa¼…®âÒnXöeLÇÁIHQ8#Œ¡Q§0Ï_eÛ~«Ÿ ‰ò¤½s­ië×€…jø–¤­¦¦+Fqô>/ì^«Ì²C°[–7´uª¸ÈìŠwP® ð¹³¤¯f G0u¦ËæpÖŽùdÆÓBB­#™Ç£p:©›Œè•X 'C%ë °)yµNië¤v½Û£^qç<­'nÌ·¾0Û?k¡Ô™”À9‡, ‚„3~(]´ÐvÙBû€…|ë ³=o¡®T°PšåN-” Û&ÔB6qNÆrÜj ”dŠÀÉ£J|~ÜV·³ªië ³ýÓ*RKàÜž²Üi çÃE ½.[è°o}a¶—,di MàÜlÏ)Dúh!¥pÆB…0Û'ÏOrXÛGBà­4Q´õ…Ù^°Pš ñ¶¾¯ 9~i 5…¡pj!“ò‚ê |~\D÷†¸ž¼+)­Œ¶¾0Ûë'gû4S)…“áœäB§pj¡,É CáÄB*1‹¸øÊœ …>?}j¡*ô˜¼‡Q~^ópêaTžóѼ~} ?11—`!ØŠòðJzÊþG-4¾paϘ§lçÕ.ÂBœh%>eýn`!í(œú!i wb!€W» <Û,t‹±.œŽ!ÍÆF½…8C*]´À«[Œ…žÝd mŽë×½P&>(†6½`©Oë×Z(%8Î*´:iš†ý.€o6L#Œà¨Ëì½èf„Ïa­}3ÍíV·ý›Láè[]÷Øa«p¶Ý½#ÁZŸÕRô+Œ†Ñ\¯S›§”<–l÷%œà:ûÝ<÷èá8ïàã‚ÅŒ–M”¡äqä܉يAí±™ß{›0MÔRÏö»Êt¡çðM/wúU¿+›»9œé÷"UœJ¡«LÍ(œô{><Ñ~O§R/¡ßS ÃfÞï‰rENà3©~ë’ÒG¹Õ•7”üvn¡ü¡ƒšåB\63Ž}ÇZ¥Ù ÐØÍ?Ð>åéÜųýnõTBöh>Ö…¤¬´G3Kà´{ÛºûùóžX£ðpÒ½j8•öh^8Ú:éÞ,1CżGs8Mw'µJý(éÑÌ:jºy÷v‹CÃT¶™ƒvibºù·LÞ'\a?_>ßïEšäs8ÓïjH¸h¿çÞÓ–B¿·Ý®ò”ïwmÓÇ:Ï ¶ß œ³3“~7Ù°KûÝBàá¤ßSû¨*¬I²™Ñ{'µ-Œãú])eiëå¼ß‹a«|Óëõ¤~¿=Ýï©3^’x?û­Ÿ7 ,‹œŽŽÔ<Å'òÈÐÖéèP¹q¬Ÿ·>ÇòðÃQè‚ßË)y:¿«Â°ó»KlJàÄ+t“3¿w] ÑùþB¨þÐõím3·<¼¹ûkóáç-(`ÎLãÉÃQ“çÝAïá¤{­R¼Ÿoï*'pêçm¦+yÞÛ¤×8'Ï{>¼D‰>ïŽM›ÀI÷ÚäñÀ?¯5ݼãTš'Š{Þ=‘±ügþ­v&Sýóþ#?ïíO?ÝïÆ§”gú]9%õ{Fà´ßÛ¯ñ~>Íië´ß‹!¡¥ó»ÉR§~>¤óâÊNÎR8ßíPÈDú½¸é½o‰.®X2¿ÛÌÑ{ßfßʆ÷Žmz¸Ôïç§û]·É„šÃi¿·S¡ãû]{ÓÅ~Oæú}Ыø¼ßÛ³Œ‡S¯ö›ît~oƒUMàÌüžòù»³…#pš¿§ò|’Ò¦ äÉüÞÚ¡îqK'€qؼ<ï絓=|ó²ùu¿ÃyõÎ­Û *vâTAÉÓ~7:aãºÎÓR8Y·q©ÓB¿3­Ó~×Ãn/øóñ‹8í÷Çqó~×™!ÃËF\·QmšÞ¯ÛÌã•‚:þ5b~ך™î-†{g"up¯ù½P|—Âaûø¼º¤ë >· ÚWy~o86KS=žÔ4S?ÿ(“¦+2&è×üÀª! /ÚˆV =ü{On±¯Ïݼæ÷·êù~ÏhÊÎäïn¸wƃClãá̺Ͱ^G=x󻇓ÇÚ™¡,•ö{Ú,'µnã?6žo=5½wÒï…•æw?IMàswžÚ‡À•$öy¢ ¼šßb—³týþVÉý¾X§5,}œÔýv)´Ðï ø:§ë6©°nÓ%xNú½H÷¼÷,šÀÉónš/Òï™_lôpÒïÚf|ï.á×m ¿µáá4äXÜú¯ÛÄžÀ¯óu›b¨ÃÛôÕÈB¿—ýnÄuå5×Z˜ßaG¬ ô»öãTõ/¥Üïm²É?ïNÃü^ŠýÞ>2C6A×ëì”r¿[ÙÏCYÁ>Ï"µylë‰ßÀçá×’Æ ]ë›2Ðï§÷ˆýw_ypn~O…õ:¬‡3i:¿N›v¿Kàt½®àãù.ÖÍ |Þïmè8¥4žÏ`‚öp:¿ÂóÞex>çh´*Øx¾ ¬2/ßI Ü'#›Ó{ ß1ýîï}„oNÇ_¯Û¾ßòzÝã‰ã>Eá'²ífX½M¢óñ´¬ œŽ—ñë6Zû1”×mÙ]¯ójN×m”ÉÙõ:k©å©R}ýˆ..dõ¹ðæŒXŸ÷ç |s*ÛïIž8ãTÁïÃN¶ó&p²[kÓïýZ˜¡­Ól¯0ì>¬NrØ÷pâÒ4ã×ëÚ\F8ã’Œ]¯Käï§2 kÔ ø$ô3Bw‘ùJ÷Ï î‚Û‡í;^8}¬aÝFùïOYwÑ6’ z¦u×µ–³üüžÃ¦Ò§¬»Ð…6¬ŸoäœÂßÈvÞ£¸c>¿ë¶2=¼ü$¾0yóÐ]œ#ÖiUêåáyÝF;!®ó;¡gy6ŒyšÇYÈÏò>¬qÏ…¥pÒïÎ ŽšæïðzŠ œöûCùÀìÃÂw×iÓv‚æ÷ß3d~!uKY¿Ü·9Öi«ˆ}™Ö æsø¦zb_&#p.êÂBêlZP8•i ḴP°jT‰û2lƒÕU¦‰O[…öe†Ij> Ò$Ë(y:¿•±zB a%/ï·±gïi7Y¸‡…—KŒ¾.‡däðóú±jéuAà4žÏ„<ÎúC.¢ŸïÄ\|g|5ÉEöóÙc*e­¢÷Ne³©°>ßÉþ(|îÎMî2~Ö%¤ã¶åe>Ø^Sº¹üü5b}^ÃÛ-=œö»~h‰™'Š\®;y_æ±FMçw¯!¿îäü]±ë6à Oà4R`&bËÁ×]åõù¬°¹Ð'ó»kÌæ€ñ³ yâTL?l6×Àúü5"39ìÃ^ëóy!Äu~ÍêXŸðÔƒg´u*¯x Fž÷Ì«>®âú|jL¯×%~½î*¯Ï;•ä‚Þ¦`àd?n”e¾ý†ü‘ô»íƒ“Í5°>‰ë ìˆ|sÿýüîàÞïù=eë&ºØ渻<¿[ÃÖËôEúšÀéª^¡øz­@0sÌïyš ù»¥­Óù½eÏëm²‚Þ;Ñ]Œ‡3lîDo“M‹}Ò`¿óPs8_µ’* œ-‡ZIPΖC­¤ (gË¡VR³åP+©ŠÀ7³r(㓆®,f©îà|ÙÒJªT"p¶li%U*8W¶ÄçÙÚŸ@äálÙÒJªT"p¶li%U*øìäëµqUþ„û‡¯(šÃùò¢•TQDá\yÑJª("p¶¼h%U8[^´’*Šœ-/ZÑ#±×¦[Ö›Ã냞îK=çË€VRå…se@+©ò‡Àé£1|A_WùCàlÐJªü!p¶ hEOÔ^›,WäÞëx–üÛíp¶\GZO‚eHgËuVR…³å:ì~‘Ò9…³å:+©B‡À©s‚. sî¾¹‘m`ÿŒÿ<ÿü¨I%óüü8Í??¡ÕΕլ¤Jç¶íØúnêN œ-«YI•4ΖÕôÏÏÏlÞ˜œÀëbžîÿv€óå/+©â…¹ò—•Pñb œ-Y /³å/+©â…ÀÙò—þéÝÌçŸ,wsøbýʳýÓU¦Ìá|™ÊJªL¡ð“p¬:[™Bàl™ÊJªL!p®L%_I•)Ζ©tðzö»™õ€/Ö™,Ì?lÉΗ“¬¤ gËIVR ³å$¼5O)œ-'YI$Ζ“¬¤ zïÛ¹´¨"c¡^Àù²•TéAà\Ù‡°åOðp¶ìc%Uz8[ö±’*=œ+ûHWR¥5ÝÌ ÚÜϯ1óO*'R©ºà…ÖËÀ_åùgL0éü“Cþó*Ï?]yÆJªÈ p¶°’*œ-XIΖ¬¤ŠgËúèä@"3jºEýDÿs8/ó_IÊ~ çdþ+IÙOà¬Ì%)û œ•ù¯$e?³2ÿ}ØÚ€ÀuúÏÇ…žÃy9þJRàS8'Ç_I |gåø+IOà¬%)𠜕ãwðroƒ“ÂÎá‹zúçç¤hçeW’RžÂ9ÙüJRÊ8+›_IJygeó+I)Oà¬l¾ïŸ×yÿ1Ý¢î}!?=çåí+IÑN଼}%)Ú œ•·¯$E;³òö•¤h'pVÞ¾’íôÞç§ÂÁ*Ý©\îŸÀöÀyúJRž8+C_IÊsgeè+IyNàœ ß?í”çÎÊÐW’òœ¶ÞUTÁŸqûsùÎËÅW’BœÂ9¹øJRˆ8+_I qgåâ+I!Nà¬\¼÷oäÍ#†Þû¢ÞûéüT;=‡ó²î•¤ä¦pNÖ½’”ÜÎʺW’’›ÀYY÷JRr8+ëîàgâ¹ü«]¾¨Ë^ðoÕoà¼üz%)® œ•_¯$Å5³òë• ¸N œ•_¯$Å5³ò땤¸¦÷>[2¹5¨KŒóï&¿ôVÈO;e4…s2镤Œ&pV&½’”ÑÎʤW’2šÀY™t_™6ÓØÉÖ&ÀuÎÏöö£khýmx!+«`¦pNμ’ÌÎÊ™W’‚™ÀY9óJR08+gîà×Ý|ý ¡÷¾¨G~:ÿÉáLëëQŽ94«4¦pNv¼”Æ–ÀYÙñJR8+;^IJcgeÇ}ÿÌãBëÏ>ø¢nxaþ¹o~çåÁ+ILଛÙ{/4_^<ëwéÈ×¶Xòïfx€ÏZï¼J:DñKý.½_X"qKŒRø3í>øÖ»{Ï÷¾ÐïRëfÈŸ,™ú ¨œi=Ëóßô»dùG|a߉å½üáKj½ó¢Åoú=ß0?Œº/Úz:‡Ó~·ò£¥~ÏÅ÷d÷NL·ç pÚº~¼Zv©ßÅÖ¸%ïÅ-¼åOrë6ùU¿ ­«Gàn?éóžÎáŒå³tñyßmÖçTèw=ôÛ iT›μ‡ñÕ’Øh ËVN&¼µ²Ùc¾<ÏFsFá»À¤|”o±[ädoqÂc}oÑ¿ðHMà$pX«Ç«ñ- ä[¼ä^TÃñøÌ-Âꮇ3½8¸®“ˆb=¼·ˆëEC~=È·¸Ù­¿S!Æ|$4ÆÔ¾¸àL¬¾îjº£s:wwòž²4f–M dÛeòü™^ý¦‚!p™< HüËRŽ<ù¶w‹Ç?6„mSÈgvů˜Ã<\& äÕN-?¾>zS¼ë.DÞð–WP×·ÿŰùÉïw¢å! ›}pذÉËä÷”¼™Ã™a“?bøÀ°9\C–Ƽ?LÝÃeò7JÞÎáŒåÝppÅáö6RF«ŒÑ™#p‰<ͦ0+ê“̯¼]¥\å´÷iòíÏWÔ'åî7ÞF$Ͼ®dØ%ð_’ïšV¹#pE}Rö+o#’7Â$e‘·yÖò*1–ÀÕ‡@~ÉÛˆäÓ”'ï—W÷ÇË'ÈÛ<ÈSŸôÈž¼é_€| ŸýÆ'=O>å0—ívýõÁmŒzòý_,y€òÝ\f—Èü¹1?NeÛW ÿ*‘ ýù×?‘ocùp$8ëmÜ/" gÉwc~äƒDþ ¿ly€?E~,pïž÷ù°·Èœ!?¼anÉÛüeØ´ÏûH>èm$òM€|námž·¼÷Ç._#ùi’úx“Éœ6Éâ˜øSÃfuôƒ|8<Èœ!ŸfúáA„åÇœ°› GòÁð@"°üðÔ¥ðàé1ßÙþÿ<®¯Ãžð§dùþƒ«–ØúíÏ{ý†s´úMÆ3ÀŸsVÊ?q#ùàó.‘oäûz£¥çýyòp–h·öº{»ÃŽÚ®–´Qý‰>€Ö=ü§º>þš-Gý¼ìÉ~„Ö1­­ëõbë%´^Æ´^FÜ;¨ê:UàØú)¦õSĽOZ¿Bëט֯¡{Wlëùz|M'V[¯cZ¯åÖÕÚ ­‹CŠñÑú g|²u€3­·,oùu­Ã˜ßÅŒùÝ1bÔùÖocëƒ8øÉÖδ¾N­Ðú¨<ßÀò‡ËvQ­£nó²~¿ô­ïÔfZ囹uo¿u»øo­5ýªkGë}úÒÅXÓäá?õ}«Keú­õûÁÿò1ä?$ò…QýÞ8!Ÿ¤6!­òíÝ÷º§ûÁÿò_1ä¿DòEÖ¸CÉë$'­3–Wý°9±Œð ÈW1ä+qØ8«X˯ óp†üpZ݉ý`„߀ü-†üM ß²O Öò:ÕÞò7™üPªxb?ýüvl}Xúx’¼‡ò…Ó,ù®ÙÌáܘï7úNì#üÈ¿Æ ‘Oòãb£‡Sò«A×|b?áŸ@þ3†ü§D¾$2äû¾lçÈçJ ŸÃ½ƒ»ØÆx›í×óä»E‘9<’<IÞÉŸO9sÉ(õp޼&©t|yOw àH>f†}“gXåzõ%ŸÃÖ†‡³–W’åÇvWŽ­ïÊòå*çmv' Š!zšüDíá‘ä¯@þCþÊ“Oû“Ž2J¾M-38ÄËùx¾?(öÄ~0ÂÁ×íb\å®Ç|6¼*ŒfFE¸ÎùÌ c~” vg?Z?ÆfÇ­ì*mªXò…†°ð¸ E•…UŽ®òøäßbÈ¿ äÓþˆQJ>íOÎæp:æÛ¸ ‰ûF8øºcŒ«<Ê®2Õ¬«ìäóŽ´Î ›Dš¤°üÈ_bÈ_d?¯‹”'G÷x87l2a’JÆS+»„äc¼Íñ*ºÊµãgØvŽòýò6&“VFx ÙD“Œ”¯¥Ô±lžŒ'Öx87lz™ð‰ý`„¿ù÷òïò›æ,ùÜÁ«Â<œKÀ¥Õ«ßàë¾c\å·ì* ²~>+àu%Î -øy=VIvÈÖ«˜¸ÚÈQå ú ä­ƒW>{8;l¤¨rTo+pÔUŒŸ¯ÞäðÀhÖÏ«Ž™õpÎò…´ÜW|äw1äw²åsÇZ¾HÔ¸éá‘–‡$´ŠÉa«À¢Sί˜:Ó¤õ8òH….1™Ôå(¥SvÝÆZ «F—chØÒ°™+ôû5fØ\w¢·ÑY° óÆXȤ®¡a£¤Lj<¸±;Wg$cùëQ¬c×çM‘¦ùÎÆ6RH ÷~_w‹q•7yõ Ö*3_„äá\TÙŸºrb?xÀè÷&fØ4»À˜g³N7KÜM`Ø+Ͱc%MwÏ£õ{Œåï²å»3Iùu+¥÷M(1R22Z>…ÖÓòi`†Õ*ãcxÓž‡Ç-:¥°©”ÆìI¥E'~‰;sÒÀTÞ“êæb~õ ý`„àMcÆ|˜a 7Ãv2 Ã& Œye„a£ ›=ßÇ߆3Â;¾¢Êùa#E•pºVWE;’?Ä?XòÝ!1ÀYòÒ˜×0æ!8Icb›4Ûèœ6ÊdfçÈKÞÞíÒ:>ZW1ÞF¼J°8V zxܺw¡b¼ x£ØXpj¤‡s–·Rl3ÎÐÕÇŽäc¼ x­3~ÙÀ˜W¡ÀLŠ*Sˆ*¸ ãmTÀÛ(60ëNÞ+¤=œ‹møÀ¬ÿ`„ƒ»P1ÞF䳌%o4'*àm†W}ŸØF8¸ ãmTÀÛ(%ÏÆ#A<<.žÏÀ]d1Þ&½Í¸ØÈlëX´Y0¶‘àÞ3xⲘ6Û=MÞfVJ³ÝßÈC¿g1Ã&»=M>÷/Pòð8ò9äqyL˜ ­oy¯çöð¸6‡eÞ¸µÊt]hxuˆ‡³9¬$cxà`±ÑŬUº­¼ÐZð–7ÚÀvž ¬U*%LRpÊÖÁµ‹Yâv¯ò ?Ãj¿¡æ^CäS‰ü8A;Xlt1k•.°'•*aÙ¯Q»·?Å6Ø]Ìú¼{LR|l£ œÊäáq[™‚Û¸½hùÔ$ìZ¥59äq.I©\’&æÐqœ¸˜ØÆdòC™; lɈ Ä6ªÆ<¥µ‹ñóî(ymØdÄ´ášÃYQ¨’D¡Ù†‹Q}¸20IñäuV€’Ù•Šç(Ü\Œ@Î}ÉÃ&u–'ï`;Ï}…âù\ŠçÇÅ÷ ä¿cÈÈ^{åÞ]|‡ÈKÛ÷ tì¿»˜í{WÉc>gص¶ö¤\`û>‘´Ä l¬¸È×1äkYÑjrv}>Q~±à¬W’ {)òËú½^ÿ×añÿo¿%‹ÿë€ø¿òµ$þ¯âÿzAü_‡ÅÿÞNÈÖÂÎÀ9òY*ÏÒIÉI½PðR‡ ^„vZðR ^Ä1ï%+u à¥^(x©Ã/‚å§/u àEóZ ^ê…‚—:\ðÂ’Ç/u àE"?)x©…‚—Íÿ‰!ÿ#Z^'œåÓ¶KR¨8G¾ƼßXéêeê…j:\­#X~Z­SªuÄIÊWëÔjz¡Z§WëÈäS<ªÖÈO«uê@µN½P­S‡«uxòHÅ]ªuDò¹È£jz¡Z§Wë†ü^$¯­bCb›%þØ„ýßÈC@¾‹‰çwåŸ&©]ù'?ßU*Õ uRu¸NêIòó:©¿¿ùk ù«8l¦uRu NJ\úÈ…¨×IÕ uRu¸NJJ'uRu NJN”ŽÎjkû˜¥½¼ô‘OZ§–7…ƒYfZúH¤¥X«ÜÃ,³™¤öÕƒám3”|/:õpvõ@²¼-G}ˆñó‡M`Ødšs•Ú8Ú:;l¤I Ò¬b™¼vš_úа¹p,:¥V²<„F‡3?Ç?‹ÞÆXÍ-´fk›ÀªÀÙIJK“Ôè¬àë1®òp•³\³Ë}©†Wðx8G>uyaÐcÆüQŽmTška¡U“Ö9?/­hX=8BúŒY=8nåx~RRZJJåu›BZ·™–”Ö %¥u¸¤”%KJë@Ié³#„…ǘ¨ò(G•jxñ6y/„÷pv¹ÏHË}fR‘Z/ÔÃÖázXiØh6!õ°¢«L¤4ÕÃÖ õ°u¸Vʤ&eu Vó™âzØz¡¶×à !ñ´¶ÔÃÊj™´¡õ°àëÊWYÊ®Rg9ãçm÷Ž;X`/®rœØ&å´õB1o.æ·2SǺÊY1¯˜i)0›óÖ Å¼u¸˜Wr•“bÞ:PÌ+Z^ÚñB©ò¸2& ,O¢åqìú|žã»E<œ ̤¨dZ%,ó–1«Äåg ,4›Z ÉHù ŒŒ~¾wQÆx›ò*»JeXËgJA]^C®2—\å¸rrwqŽñ6çMÀUr[™mTirè÷s(É¥å>И! =Çä°g)‡íŸXÞUê âùóîoäaŠ<Ç̰ç‹Ïk­¸1¯M{RçK 0K¤x–:ϰ;pŽÙ\8ß–çp».ÒD“Öã,ÿ ùwL<ÿ-ÇóÓsêÀ¹¢·ÑB‹Ï=¨Î=¨ÃçHÃ&Ól22?÷@ža%Ë£sê…sêð¹’Ÿ7šMFæçÈ~^R:¡sê…sêð¹bîXËÏÏ=ø‹åቫbØ* =ÈyáÄü܃?¿ÀzÝ%f¹ïr”ÓÀɹuàÜyØÒ°™ ¬]b.gY²âR. Ô݉jçÈ;Áò Ü®0h¯1cþ*¯Om¨‡6È»RTém€ÅÆkÌZåUÈéÜZn’ÊÛÉæpvéÃHKfræC½pâD>qBŠ*­cE¡ó'äÕi¡Õwìˆ]c6Ô®e@WéÛ­Íæp6—ây°ü ¦È[Ì { ¬Ï b¡ùqâ°ÑÒ°E§hý'†üLÞ¥‚å3_÷#“ïHò»í“Ó6êÿOÚ•¦§®#Ñ­°¸­É¶~B&H€Ä! ×oÿ i¸$TƒƒøÓ_úásu\’J¥š¼ÐëãWîõÁêyÒé„z}°pÇ]À¯z}ü.ôúø•{}0’{}ü ½>x/±å¼Äq¯ß…^¿r¯ö2¢+ÚõqÝë㎔9ä*']½ )+t‚\Úëƒ_óš[óq¯ß…^¿r¯޼¥¬JÜëƒOA·\ zÜëãw¡×ǯÜëƒ]6T :îõÁ.î&uÝëãw¡×ǯÜëƒMœ É£^~å^y­,“}Õë㎀šu¡s´´MÔëãWèõq‡£UƒºÐ9ÚFo%§SEçÏ_÷ú`És7©ë^¿ ½>~å^ì²!MbÔëã™u¡s´~ÈWI>éõÁ®yÏ,›ë^¿ ½>~å^,yÍ¿îõqÇ5°uQåh›jÍû*£Ž¿B¯Þ¶ábRW½>~z}üʽ>n$Ÿöú¸‡<Ì{•³lªóÍäÓ^w¯aÞëœeS ‡TM…uLau iZµt T\â$JÕpÊÔ9‡T-R^‘y•q ¬…CJFòý3m³æë-‡-)“ØMijŸÂ)ò\y†òºu£çkAÏ7 µæíw)œ'ˆì7·’G ©î!-#|NÇ ÿ(/+2&¥­B£“ä¹64¤‚$1Ÿ“cæŸn%ºiÝCBØ>'î…t\¥™R£ënZwx'—ØÉ+C%Nhç+“ÂÉ ËÕB<ÎC2°ÏÉ%öüš' ]a«P¡æ?$/qÍy‰ë¨ÝïBû»_¹ýÝMäqû»{ÈCª’ÏÉtò­@Þ’­•öN¥p’<ç1 íï¾€üWù¯ÉãÞ}÷‡Z!ŸSjäOü†­I=z÷±~®-Òuï¾ß…Þ}¿rï>®¿­ÉL§´wßœ‡ë WÇ亅rÜAn‚÷Oñä:¡ƒ\ä;®ƒ\'të:Èur9Š|ÒA®:Èqä£rÐA®[è ×ÉäÉÇä:¡ƒG>ê × 亅rÜAŽ!wë„r,ùàâî¸rÿ€ü¿òÿXòq+°NhÆ‘Zu\+°yt¾!U'7¤"ɯ®ÚetBC*šüU»ŒNhHÕ-4¤êä†T·’ORÝCþ äÏ9äÏùš–üuC*–|ˆŒtBCªn¡!U'7¤º‘|ÚêòCoŸn¡³P'wbô|ÜY¨: 1äãðNè,Ô-têäÎB ù¸³P'tº‡<(êmŽžßîÒ6ÛÃ]vèíÓ-têäÎB7’O; ÝCþÈÿäÿa—MÜY¨: q‡TÔY¨ã: ýùßò¿ü†µŽÒ6½}ÐÔ&…ç­ùØ´»“xÇ›Äqg¡Nè,ÄšÄ%g_uê: urg!ΪŒ: uBg!ÞªôœU =¾€üWù/Þª¬§6¬íÍB“ÂI«ÒqV¥‹u m‘:¹-G>j‹Ô m‘xòš#·EêÚ"ur[$Ž|Ô©Ú"±ä·l®Ú"u m‘:¹-£mâ¶HЉ×6†Ó6qc¢n¡-R'·E¢©«¶HЉ%¯jÚÐ MØe£¹öªiC·Ð´¡“›6p‡TÔ´¡š6ðËÆrË&nÚÐ-4mèä¦ Ü!å¨k nÚÀJ¾ä®WMº…¦ Ü´ ezO©Ê´ios¶ût }:¹ï·aC>é{Àù*£¾Ó÷ †ÑëòõZ¸ÃR¶ .5âï°œavUjÔ-”ur©G>*5ê„R#ÖÝg˜ òu©Q·PjÔÉ¥FÜ!•uB©Kž‹Ã^—u ¥F\jÄI>*5ê„R#VÛ4ŒI|]jÔ-”ur©kWyTjÄÚóž9¤®Kº…R£N.5b7lí©6-5âõ<—{pUjÔ-”ur©»a5yIKXm£9ÃìªÔ¨[(5êäR#Î$V”IŒKXÉ+FÛ\—u ¥F\jty\jty˜÷&gÙ4çÉãR£;È{˜wŸ³lüš×ó ©mP©«çCµN'Tët Õ:\­Ã’/+ò2’Tëðä¹C*¼ÀùîsÌ/˜5uÂâ² ^ÛpÁ…«²‹n¡ì¢“Ë.ÉÇ• PvÁJž»€_W.t • \¹À‘’ÿ;¡r%Ï¢äpóú/±?JÞC]Ót^ò\ù*½[HAïätNòd§ óN§šs:ÅYÜÝBw'gq³ä-é1K³¸yòÜeÂ÷ÿ[¯Ÿãèÿãôüë'Oàǯãå/P7ÕÔQêI§?„E ðóïgòÔðMþÏOM /¡ün ÝNày;~OŠ ¯LÂ)òc—TDþ¡(aÕíç1‡¿n'p‚¼›šï!òÃù•Â1ù! MJ¾ÿ‡gøÑÎäû¿n'pjÙL_!Gä)8!ùÞŽ Éou—°æËœ5_Þ·æËûÖ¼ò6‡¼eÉ•ýóy î>+_5M>Üaí#Ì!ÿ(Ó´òT%À)É·H‚¼†„Xû äŸsÈ?KäÉ;(x8IžY6¢ÿöÈ¿äÈÛ†!¯ëN’¯òà§µ¯@þ5‡ü«´æ-³æÁwp’¼bÖ|€oü6‡üV _;FUU §È7œä!¯Ò¾ù·òoù’9a+()8EÞ3kÞ@áƒÝù}ù½@Þ;†¼³)œ$oò È€ü!‡üA ß0‡TÝ2N’×̲`¢ÛÆæØ6ö(­yŽ<”Û£´æƶïýò9ä?Xó`XŒ¶wÀ)òŽÕóo|›C¾Í"oSømä~ò§ò'Á0ã©~3¤pÒ¶áT¥›¯À 3—c˜¹õí&qoœøNI~ôÛ`òÁ$v ¿É!¿È׌mc 4‰«2ÄãX•.Ǫt’ä«Ry•ÂIÉkæÈ?ù§òO’äw©R8)ùŠQ•aÙ€IìrLb÷Ì“¯K޼U)œ”¼c$ÚÆIìrLb÷"‘wÜš¯R8)yæ2¾ØèÀ$v9&±{åõüt#×¼Iá¤ä-#y";0‰]ŽIì¶’ä-·æ›~Ó ™f.Ç0s¼öœ=¯SøMkR‘f.Ç0sÇÛÉ™•)ü¦e†™ÃÌåfîC o8mÎ÷,U ’_¥ËñUºÏÛÉÇËFòUǬypuº ÿ“CþG _“Úæaè‹”Â1ùÖÑê²ùò¿9ä¥5Ïf .#§$okÎ<€esòçògÁ?Eñ ðÏ|8õŠã]“z«9ÿq€·0z›3zËŠÎèðÔ òõÇùñ¥KáhaGÏs²?¶Åï4:üuË+ˆà¨ÆKõîs÷ɧÇù·Í#S[‹þÝU–—ÑŸžfËpó´Í¿ü=þ2×>l^¾sà¿ÿÍÿø¿xð.þ:Û'›×Ï ø~¾lö¯ðã|‘ÜŸsà;€ïràoËï¾Ïƒä9’ÿ˜ýN›uÈäÿ‚yÿÊ™÷õK´L=’^ràoϘ¸ç^Ç<mñ¹ßÌ—§ð¶Oõ»æòÞ?ðÔnÙ6"Ô®›o¡»eÛÁ‡¢“ÂiÛh<^ŠG—Êñ¿ÏhÚÝg4íx£i¬¬\0šÉ¿€ä_þ*yS¥pòôåt 2­üV“MóL¶Ý²É†F7…¯£w_0Ù¨)©š.Yf»eËŒàX7*…K–Ù.Ç2JXRx–e¶[¶ÌðèC2@ — °÷~k}~»LØÊïŸÅ×óøÔçãg”¹wè ¬_hAÌ÷S¬ÏA öÅúÔ•…3:B~è/žÁS…ü0¤¬è¡PÃñ¡8nÞ‹Í~êd¶'žÙP6fŸŽƒÍ!¾/zKh„9ø^€ŠÍE~Ø c©SúïN?`ø{ò”­Ü??`ø‡ àc±ù¤9j;‹Ý†N˜R(­ò0¶WÔ¾á”RB¾hl€‹Ý¤/vÇœÑü5st.UþßÅ]¶¥.÷ýBuc"áí ’ïm¸ý‘ÌuWÜih¤®S8a£^È'Vâ°Eçûb4zC‰é'u‰ãî™ôsç’ž¬Ž~ùz_1×Â9á.‚§¶þ:áÌŠ|÷þb8Ã_o'_ÕsatGäÝô½Yb~ôœ›ÁÓÛëÉ—ÉòO–öÉï#ÿy;ùxÙ|²äÿ´l>ï[6ŸÅñ™ÒIC²‡_‘´4l¬?> j÷Xwô ®Öޤ¿*;? ¦Jo'ߨi"ÄcŒé·‡Ð{'‚#*ڌ鲩%ÚslæT¢~,+ŽÓErçñ:ÙçǽpW>Îð#wMß]…Ôq²>éi(Ýd ¢w÷•Õ~®IýZ=ZÑ œ ©¢¿ÉUávð±g\Ðôåâê”zü-¾^éч‹þ(˜äý ÆÀ…CàŸëm±QÌ»c6®ô èŽNèíWÔý¶„%ÁÑ%ºWcš¸÷úMÏU 1<áX˜©énøQ4s…Fç¿êA¸ªªN8Ã#ïïðþv+ã,‚cO XƒÇ=†ÑSc'CÜË&0ÀùwHÞÿIÀ‡û|ÈXÁ¾ª xjòA¬`§8p=©pÔõ%0ÀùŒH>üEÀ»ûTÄ.CE¨jN„ŠàXÀjò–âìæ¸ž ¸?HÇ €EŽÈ稈ݟTÄûÏ]ð[tðìOŽà„ãZÄ 6ó $†£ì›IŸy8ߨY0ÀEÿ°+xg {ü‡_Áƒ,(gøpG«<õy÷½§W°‚fu1<piÇ} G ¸Ñݨ·pçÀT4:Ùep~jŸ€÷†n ¸¬™ìæÆ©1 XMû'm^u%!€“Ó°â$à?¼?ës³.÷öÐÈ1­¬.¬Ÿ³Ç#8–c5—aÑ©j®Œ‹á©KS©)ºf.6‰ài[žáRèV8 ñzÆ£¯ mî“І•6•^Ñ‹KWŽíUÓÐ*çÆE<ýÌøß$Fßzä%dÇ‚%TàÞKh.“‹àHBƒACK¨v­¡Æ0kÈ <íŽ4”hxFBÊãÑ =Ý'¡'~ ik×Ð'¡qqkž~0ýo £? z$t‰z¢ÕaÀT pB8Ú?а'†ö¦_Rò#xÚ aè|? 8ý\{¯ÁgwK<ú³ ¡VBe}ÑC/éê°AB?ì2~ \¢£àÈ(n¼eÖМ¨ÁÓO¿‘7Kxxscðè?‚„~á)®´‹®™£‹<í«PèÊ‘Kp ;âÑqÊQåV´‚ò †§r¬¦Óu@DW¥pRŽutâÆ%tÉÁç¸õŽu[ÑwÒRƒEÁÑR©Æþ˜¼.µŽ²,VT›µ"Rcaô…ÓþV )o‚S ™[%'ôZ”ÐfYB;ABaô…Óž–ÐP€ÍHHU5‚c USàKÈ•ÃøÎC­¡^@e¥uð˜Ë$ÒnwCþÁ£/œö7K¨QÁ©5Äì²Ú § ÃE =-Kè]P}á´ç$dKn YƒàÔiOå8Ö‚ÂpBB sÚ—‚[t{»\<¢¥JG_8í ©Š±‡Œ ³ø#Hˆs ØÆb8–U´„ ƒAO»µ %Éû¦UáÑN{sãi¯*­0ü»Ûﱪ1­´ÒU+R…›«ãÚPÇõ DZ¿ê3È·A£û£ Çõ%Ñ•„¡ýwðióŽO{í2“° ´޽5³†œVÎ5IÒUå1<í¡ÙëÊÑ;…ò€¯FßÜ*ºAA•Nl?ãiU†`Ë®,Ý¢èNJhÜ~Ÿ„PðèL÷Yt‚èJZt½RÀpbû1q~ÃZ Ç¢«ý¢nxÚ0hèÜ2ÝäZÞ#þøwÑ•ñEýVÑ©²ÑþçU7X5†ß°êò¼è¾Ñ…ÑŸrD÷Ì‹ÎVŒ§×•Á)‹‚±JkWc8ÝØÔž]äƒxÚ驨üT[êOÈXö¾yþ³èÂèm¯*kÆ±à™“P70q¾9ñúÝ=cÎ~Û¬DîÕθOú͎磬Ý.¿": +È&p$cbtÒœ¿ÃQ®ÉÔY–ÀÙ¨‰xúÕ€+ o•ÐÀ¾Æp,¡ª¬ Y‹áHBº´‹8û¡3QBO?MKè$m“†Ö0:œkNëêš¶¦Hè´æ%Äï2¦ø‰ÛeÿÚ¿4Á+b—Íëü´Í%zbwÙ b$d<†c=Äùp# ü´Í‘À«­ ¡sŽ„Lƒàx Ò6%DÀñÒjQB?s$ðêÌKh½/žvLŸ„)çm=¦ü\UɆKák?Ò¶Ó'ˆx1|D<‚㌇ðÔúµxúeê}'A$…ŒC§ À×ëWâMˆ¼¼Á}rÓfxš7ÙObe¨¤Ž~q@ó¢~õÔ°ÜLÞ}øŠCïž–nLK”&ÊÕ “¿®lë¬/ÇÌOòïÖ5è࿾óðÙ+’Ðr¥¶˜üµy>ä|6SRÔ:}÷þV%Þ:ﺂòÌ_YšwíjŸÂ‰yo”¦–öPÿ]a8š÷zª Äó®âŒHfÞ•)§e“Î{©}S#xRÑÒë=u©JüÁ&¿I%T_Ò“ ×U^Y ¿VP…VÕ”ˆ±M0á^5è¤[çÝ™8Óò2:ÞÖ™2¾ñŒVÁñô^bÇ»t¿—!ަWO­ñŒÖÇ££é­J;•"¥3ZCÇì޶µVSš5šÑÊy,ºtzÔt^®ÓjHñ‹D—>eëñV'&ëÃíóÞ¨²NáļëéV‡ç½šöÀÌ{?íºVô¼çoëºjÈy·Ð +‚£y·ÕïÅóîÀÔp4ïC‚1ïcÚ~w´­]c=5ïZk‡G?¤óÞLñøõ˜ÖÊÍûùæyWÞ†ÌÝ3èùó_õ¼-Á÷p¼:”­y¾WŽW‡®­'õ¼ ¹F©&¦!ÏwëkLŸïº±äùîKH¸ p¤†CŽ8߇)…+@DÔøa…ÍyJÞ@ÂÝú_†žwfpâ//Šíw^‚GÓë´¦õ|ÿV5‚c=ïÆ¾Íh¿÷7këí÷zúPÞïZ#Fp4½®¼lX¤çµÇ¢K'N«ºÔÔ~/MTíðéSýI¦Çýþßïý?}ó¼Ûpo81ïÚknÞ+Çó^Ž_m&ô¼ªñèxÞ›éÖŒÏw[)Çz¾œòÒä!g¦Ap|¾»©ÞÍ{pãwß ä»fÚ°è|w•Çï¾~Ožª¦o ®G87ïíÍónúË„NáxÞû£ÐÓón‚èZvÞ•5Ô¼OI±žÎ{Óô¼—eÈìlÙy×—qºß•ó“GóÞ¿£&罄ʶžÚuÕœM†æÝ…È'ƒ]Ùñ|ߴ¼åèy8&¾Þ|ýùgCžØ¾O_6$ ý(>öÅžï®™bëØà³pÊ8Ö jŒìãó½7V ‚绢ïïÞ5Áñý]]’¡ÓCÊØ“Gç{¿h§òà >æeóx»ž7úøúqýçy‡oR8å·™Rå‘"Ð &çÝš’´ëM‹áÈoã•7̼£ãy7SHüõüÕŽçýÒ5#wSyÈ–x\³~Ý_ÓG¿Mj7h)øOç»1NLo3½;a©ƒºxÎ÷FÓ÷8Ôˆà©Kr˜ úþî*X´OüùÞo8ò§”™šEp¬ç/ݰGÆÃý´æ7¬ž.¡ivGoñ·0À¿vèÇ2öõ“p¾?ŸnŸ÷ZCâ:À‰û»ŸÞÐà`Û8á·™üuXƒ—p¾8ÚÖÞNÕÛxÞkH p´­Moÿ‘ö|¯©ñ»£yow¾‡C*‚§ê\¹K-ºØ×sGÌ~J_q¸³ óþ|âç}—á§µ ¸>ŽÊã‡+43ï%èºÇ~Åøm† ‚£yo”¦öûX&cíwwI,Có^gc€£y7®¢íy«<:¾Ç9mé{œöøÝ·;ä·ϸõn+Ì{†Ÿ¶VU“ =o¬aîq *w{~ÞMCÏ»…ÎPéùþ„ÖÔ¼×Ç÷÷fò¡ywµÅp4ïÖxZÏÛر~Z­Ý%qißÝaÑ¥ó®ýh”®w‚Ÿöýýöy×ð1Ð'潪˜ó¾TÁñù®ªŠ>ß«P§üÎÞßûýjH=ß„\æÇûÝ—´ß¦ ¡Ç÷÷)ç‹òÏC@-‚§êÜëÚÐþy5ôþÞ¦O™ñS¤ë÷waÞ2îq¡¾àä¼7L\¦ÖŽçÝL®Nì·¾Ëûm.Ëûç8ZœðÛø†™wƒáØ??OŽ´ÅXGkÓÔ¤Þô{ÿIý6ÍTì·‹ö™y?dÌ»õ`×~»®1Ìù±ƒ0Çé Šlü¼÷—Mz¿{çû÷~ËL· ì¯Ó8ðóîx=µ <½E{ ë ƒßÂà?lƒ £¯¼_2â àÔù®‡ àÄ5öÓªáßEpì¯kh{~°ukOç½7'£ÛóÐŽÏ÷†Ùïà ÃSŽÖ膴ç{êBðà º—‘õñE˜÷}μ‡wŸáëãþÏ~›&Ìûž÷×]veði ?¢°›%ómJSÏMå"8^¾¢ý6Æ„5¿çý6—Ûö×…€Z€c¿¶5é¯sK§ÃëâyŸ›°lþùмàëãá¯ó^Ö%‚ZA7t6 çEp­µš˜÷Ñfñèø¶×X2kÊ"àŽ´‚Rí¯ëï2Á ­PV¤¿®ôp?ó`òQw(y \B?2ò.ªPNÿ!æ]PqØqâ5‚ãm]2~ªÈ?ø¼‹~ÅäÛ£#»®—œ£Ï÷‚J|Þ…iŒ%õ|¿‘k Fá¼KIz¾›B™~ø@9cõóúCÈ»h3ü´Z…ô5ï·1ž±ëB$´åý´õeÍã{œƒ¼åã°Ö7´=ß4ÃѼ{;)j|‡ÀDp<ï—Ì" g\ËúiU@Óñ÷Ê”‚£â¨jt÷­[ÁO{ʈËôJ°NáëÓ q™ Á)«_yú|wªÁpœ¦5¹>ˆîià5:±q™!mƒÌ«T¥M{’â2Ó!•.UV&Ïw«+2߯(¨S<ñîýÞö5íú„÷àxùÎɯ«á2ò-èys‰„:ì£nÛóss¡³Ò7«ç‡d.úgCÉÊ7¯ç«‹ƒgÊ:ß§Í*Æ??¤ýaxªÎmí+ÚOëK4q›Ãwz¸1§tý-èùŸ ÿ¼/Ø8žwsÉ%&v2TÒülù¸ÌÅGÏ÷Cþ³åïïšôÛL'<‚ãûût&,¶ÚÖŽô|ÕL_"æ]còè|÷s![zØc‘GJÅŽËfý#øç2îq¶†8ìàŸ¯Æ® >«Á??'Àc ^áÑqzÅ¥KÚïUÈúøaýóÊÚ’öוÁ_÷Ãûç½.k&ߦ!à(7§e>¢xA~æÝÆÉúGðÏÿ—c×Yˆˆ|ýßßÏwïþŸp¾+²nb°màŒû?ß%ëeÆNÁ±W¯Ñt½ŒÑ0óŸp¾×J1÷w‡GÇç{Ϟη©üî(ïbî±þåÛTq±简Ját9ÔŠ«€Bp²jÅU@!8Yµâ* œ,‡ZqPN–C­¸ (_¿&åP6\†²˜¥ùÔ9Àé²¥W©„àdÙÒŠ«TBpªl‰¾g›Ðæ(Àɲ¥W©„àdÙÒŠ«TBð¤A|a½½ªü‘燮(JátyÑŠ«(Âpª¼hÅU!8Y^´â*Šœ,/ZqEN–­pçøÂn½¾Xtóühpõœ.Zq•?N•­¸ÊÇFk邾¡òÁÉ2 WùƒàdÐ 7ž/lUkôî‹u°b*†Så+®bÁÉòW1€àdùÀŠ«@p²|`´NÞ‘e†E·˜ÿŸ1?M §ÓüW\f?†Siþ+.³ÁÉ4ÿ—ÙàdšÿŠËìGp2Í…?›WXºô|1Oÿvû 1)œNÇ_qøN¥ã¯¸ |'ÓñW\>‚“éø+.ÁÉtü~Hà½qÒ¸¾˜Oûùs•ÑΞ?Ú­¸Ly §ÒæW\¦<‚“ió+.SÁÉ´ù—)àdÚü8?Oéü4 ÝbÞûÂýô¸ÿœNo_qíN¦·¯¸Œv'ÓÛW\F;‚“éí+.£ÁÉôö—ÑŽß=Mpj¨ïýf‚ÓiÒ+.3é4é—àdšôŠËŒFp2MzÅeF#8™&=V¦%ù. m|1ÏùÖù1Wßçæï?ÓW_É f §Ò™W\3‚“éÌ+.ƒÁÉtæ—ÁŒàd:ó 6¼0¶Äリ|óý§†žÖ?{Þ>¸Ü¡ÉLc §ÒŽWL¦±Cp2íxÅe#8™v¼â2œL;^ᯎÆ…Þ‡_Ì^8þ[ÿN§¯¸Œ`'ÓƒW\F0‚“éÁ+.#Á©ôàfÅe#8™¼â2‚ü¿5*ÿøés?‹FÞ?ø3!@prÿÔLü\ŒœxJ3þkèPà„~#ów†‰ÓèÝ ûº4Š>*°ßç¿]¶ßó~Ó¤ðõ³°6ûâ…þäóêò-Ç—¢x¹úáAÃ÷ÂgðÔ!g?Šßz|á¾ÿ, b0ü—¤ŸÈrËIƒ¨ÂaøVx“uñª™/ÀÌYéŸü‡<ù6ŸìÇæÂñ5Ú×ýMc1|-~á—ç¨*†£ª<ù’ÛÀÑ9̱W>ÞÀÆŒàÂ7v[xüA£0Y¯×ß² 1Þ ‚h·0Èöσ„o…Ñž/OQÿÖäªÂßÛYa8ýí«Y¨ÿÛÍøÔ}œ¼™lI<×ôM€¿|£J¯F_ ‚ãºÊŸ·Ž—1tÉÝp Gp¤Ð*©–9ÓwÙ<Õ=CûQªuÊ”D†àéžþRqYCÛë·6XtÉŽ}(\m¨Ž;ETµ6ÀKzÞ{UÑóåøÏû¥v ŸÝZáщ‹JIÏ{½vŽç½Vž.µ4á{–Gó^] úñ¼›“Oæ½êÒ€“˜wFGÓ Æ9£xô…éUÌôš©ëþÀ¶Rþ÷éU%Ø@ަWÛ’Ê0|Rñèhz+禒֛Nìºw<°ú“€5'`MïŸ!|…à7ìŸ(CàHÀª&[‰¥“ “Ç.°Æ0-%uhÒ>Ã)[óëEï6Å'ck¨f²âúl>z€?¯M³bÊBÙmøcq÷Ê^Nwp‡:…&ÀÓÑû±í¥"ùUý(Œ>ù¹5=4[=rï> Oè®GÿäFD?ŠÎm°ä«N¼{cè¾ñèýÄ1߷חÔhêEŸÂ“ÑsWMygFWfª^rH(Mh¶úJ>¼{}y÷…yçF·“1æÐ¾l v àÄèU]ÿeÞ9É_.¾îI>äå}r£æ}ó—y¯™U§§3Ý}âÑU Çóî.u±Kó^³_‰žÞ‰®€[Àñèæòaõ¥ygGŸà}¾ ’?ò£»òOóÎŒ®/%÷÷»Já„ä+µ¸ß·ë¢U̼›©ÓŒûÆ6¼Epâ+Äw º´O pt+´«.Fx›¬æ ÷ÂmqÏ¿â}#_±P°­÷ì+†Ïßîñ–1Žn´…¾|øþúò{áÞùYÔÓw[ˆW„°c€³8©j=‚£«n1}PšEXCþóοâz[|)ÆùqñJ·ÐPõ p‰TŒ Umñ™ŽàÛ|]í2¥¦“e-øÖ{ž<ÝlrŒv[çÉcƒ$|ÅkO“ìÅ˧¨Ö‚'q}ÈWnE‡ráÓ4ΓÇäu Ç’ _ˆŠä4×^ oiÉk(8ßýaÙ¼òäw[Vò`ˆ Ëf'.›†Y6µFpžü“·)œX6õņ–Íû$yf͇¯|8OþŒÉ»NHÞO•ÞdmùZµe\­Måœ#W³ml…àë$û'm£YUéUwˆ¸™|ÿÏZ×X'Õþ/Ú†%O~GkÊÍAð?’†ÖµGpuRõ'mÃ’·Ì!å®´Í­’×¥u®_òKÚ†%¯M>Äývû É—WÚæBë¤ËíiAÛðˆ!ïŒAð$Ò"\c4%.h›ß5Õv&ø$?ÒxoÕÄ=s.püµÆÊR·Áä<éö5¶ó4QaÃeòMHŽN—‚cŽÊÓ­óhtÌÑÖ°†ž÷ů¢ž\÷Ó]èYXCÇÍ5]UR_3ï 5‚ï±÷nÎNù~ÚëãøÔ»š~X)Žþ²þ.‹â­ˆ°SuËûá±Øž **àïçÇëµ)ª±mùû÷¿â󋃿ùwŽü»@þ#¿*üXù+“È'‹Hþå{&ÿòÍùäÉœüäŸÉœ ïÆÄl™|ä;Ž|'ïò£‚’Éw>ÏOŸ™W`^àxqõ««ZzE€Só3žˆ¯xÜùG~'ßÝG~'ìŒI+ˆä÷@~Ï‘ß ä÷¶v‹ÛàÔ⪗ÉùO޼°­ž)ùOaÙÔ‹ËfÐÇ翜gö483ÛÚÕ8‹§Á™!ߌ‘ØÅÓàü—ÓàÌž4ùlÝ_NšüÀÞüå48ÿå48³§'ù©ÅöâiÀI¾C´‹ õÌ+ÔÕüC~Ðuç¿hÚ8ñî—Ó`IÓ²ïîÌ_4íù/šöÌjÚ{ÈïòuõM{þ‹¦=³š–%_º¿hZŽ|5æ&/jÚó_4í™Õ´÷HþS¼µØï›õÂ~~ج¹ý>Á)M;:€—öû§4mãþ`ýÍäYëïM ß ä+÷ë%ïlý‡3îùð‡3îùÀqœ².tý‡3n‚O=ÿKŸZo¥ èw:(« yYU2äNoª¿¨Ê[É÷B™s†ý>“µ G~Ï’ØÿAÛÜN¾™3P¾7›âó•J© äÇ>_Iò'Ö¼¯— À‰5?5Ú×üæ È?qäŸòO÷‘º‹|¿e.äå Ë8A¾©›?lX†¼-¦¸Á’Q:“RŽü;O~JdX2JyòÐóß3yùbÈ‘×× þpHݳlúcb&/RùN ÿÿJÇ“ŸŠä_?gò¯œmóúÌ“8µl–7,À©e£ü¬Ê yYÏ3äN‘ãEKzž•|S6°*gò¢UÉ‘—$oͬJ~Í/;D?öÅÏ”´õÁI~üáÇpö÷ùûý÷Y†Svÿ‹Kr‚“—Pý‡ý>“÷;G¾ãÉWFýa¿³ä/6­@~HtyÚ¾}Î)/Ã_i8£?ˆ~?®~ àÿN?—¿’xÑ¿Çú!À÷0ú>gô½0º)G?À臜ÑïõXC=Ù<ú1gôcÆ»G£ÿÀè?9£ÿHï®ÉÑëbþôéP˜0þ›3ú/?ºkV¨Ñçâࡪâ2úX_qëè'Fï·,-ù¢ÑaÍosÖüvŸ±êÂèïÏóècjý­£œ½PŽ}.´Ú¼ƒäßs$ÿ¾ÍVݦxù˜V݆ýåCXuïŸ:GO )÷ƒm3Ðz‰àc+›Âÿý¯ªüHþ0߀üSù'‰¼bÈÏ¡õÇäWSÑüa†ùòù1™ Š8E~ŒMÉfø'ÿÌ!ÿy;yUÌiƒžIþ äÏ9äÏùš–¼5.…S䛚!ÊjÓù.‡|w3ù¡<Ö¥ð<òÛÃ<úöA>À³Ö<Àó–Íöä9ä7“òÙ<üD·Ë‘üŽ“|á­Ó„)U9]8"¯†Ï€SäÇ.ðÃüÛð×íä<%ß _¾#É«fîÚàùé«Gò‡ üë4þuÊ àHòª24yå¢N‘]Gò‡ ü´žGKöo%àè„õ yç¡Ú4À òjŒÉføÈosÈoyòµ'É7¥žÎ<“üÿÊ!ÿE“2ã«Ññ‚È[]‚apBÛ¨ÂÒÚ¦ÿa†ÃyÊ9aOgAòcÊ –¼©à„=ï’¼‚E«rÖ¼ÖüT5…È÷«i®Ù pŠü =’?ÌðW ÿšCþ•'ïh“¸òn*8¹l4·lf=¯`Ç©œ «„ k© Û Î;0È•°aµµÌ!5£z(—˜ÉçRj',›±L K¾ªæo+8µlŒg–wòï9äßÛ†$?(¢F¥p’<·æ ¬yP*GÛ(AÛ˜š^6½QiS8E¾f– |”d(„¸Œ®s´´Vä²1C7²N™5#ù²8¨ £m´ m¬&OXÝ@»Ã§$響7‡ú™™|Ž¶Ñ‚¶1´Il½…5¯%ó áÖ|’u¡s´´?eˆ6loÏTŽõüP·Aêùá‡êBçhý.¯*’|ÿv)œZóžY6¥‡eêBçh-h­òÕ\2àÔ²ÑÜšŸ;ˆo*PU޶©Xm3”y‘VeU;X´•hÛζ™ß½‚WålØj{3yW¹²Iá™äaÞ«œeSo&_‡/ÿxyn^Ÿã%öœ—x0*ú2b,ø.üF0Ì4£*¡NwãÁÍës¼ÄþI _ÒzÞè¹)h€“äG~>&ü3Î!ÿÌ“Wšñ˜Yp}<ï„õ/@þ%‡ü‹ *évèaeS8E¾âLâ¹Nwãáˆô9'¬ß±’WS:.Ö6¶†Û„ìy]3wX]ÃÄÁésNXÿΓ7º!)WIì…V7ÜšÓÈïü>‡üž_óÆ’&±í)Â)òŠóU‚¦õà)õ9ŽVÏ»¸{›˜¶ç«Âyþp—Ué!.ãsÂ:þ“_6Ê;š¼·&…“VeÍY•ó؃ËËçxÌü—@Þjš|ÔÅ—D¾âÈÃÄ›×çx‰ý‰_ó5¹a ãl©S8eFÛ”àp[÷¦Q;޾f ³–'àýS×.îÆ=ß¶°¾Šà#ù6qÏ€äÑ3|ä÷9ä÷,yׄxÝ …×NWÁé„~˜á È!`ÉWÓ'gùÆ9ðUœ"_)†|ð@þ_ù,yS/qùm¼WN/†|ðY © íBâD+'Nä¯'Z!q‚&•8Ñ ‰íBâD+'NðäCþ*q‚!'N´BâD»8Ñʉ4ù«8l+$N°äC¶'څĉVNœ¸•|’8qù3?ç?KäkZò׉,ù¦fÈ_%N´ ‰­œ8q#ù4qâòÛõ<úvA>À¯Éqêé—¯ £¸¼ŽÉ«‚>aÇføÈïrÈïXòÆiòrU2w÷‘‡#r›sÂnwi›íá® ;$´ )+­œ²r#ù4eåò;0 w9V厷*ëè2F×…m<Rw’UYrV%Øó;0 w9VåN°*§¾¡˜| ßR pÒªôœUé£tv!Y¨•“…òq²P+$ ±’¯4#y°.ÞA×½ç¨Ê÷5o«ÊPÚÆX¢{_K&±æLb ÿärÈÿ°†™¯¥nRCKt“Â)U©<£*ç¶|CÒËèûÉïùCJ«Ú0×@ƒF'$o8{Þ€=¿‡SfŸsHíùCJOmùв©øx`€ä­a®vþôçæ¢;äHþÀKÞT5±lÜÐ?8$È ’Ÿ\Gò‡(¿®]Èîkåì>zÃ^e÷µBv{ tŒžÙ}8"9'ìáÈ«JëÉ;lÝ«Ê&…SÚÆqÚüó¸ rnR‡vÙ”ec¨CÊ9'ìáCÚ°–Û°°æA×rTåᇕüåS‹Hò•Ö`œ~„eSÕ̲©f£´…׿lØvÍfé·éõ¼­aÞ[骙 « ¸Ð‚eÕæf-g˜A)ZÛ˜ \^íö>òß@þ;‡ü7£©5ol ~€S'lɰ8Ñ ºÍ¹€·gAò”UéŠF•ž'ù!¹]H„nåDhfÃÆ‰Ð­ÍnØÝ ‰ÐíB"t+'Bsˆ!Ÿ&Bóö<'ù«Dèv!º•¡Y«Ò“äÓDè{Èù¯ò_ü!%B·B"4w‡¡[!º]H„nåDhVò”‹'Bß!ùïv½ÿëvòŽ6¬÷Š’¼éu(\…N™ž!o Eíç}ýç=ƒ|€c“¸vŽR•µ‡ï@8ét²œÓi^6?pƒþɹ€ÿ„€Úè`G‡TÓïä*…S’çbRÈÿ]÷/GUþã/à^1䫪ôo-mXÃmX¥ß· Éÿ­œüÏššt}¤Éÿì† Éÿ­üß.$ÿ·rò?GÞÑa4ùŸ—¼æ$'ÿ· Éÿ­œüÏ‘·Ô!…“ÿù ²å‚Èqò»üßÊÉÿì²ñ–”|’üÏ.ùû®’ÿÛ…äÿVNþg½Ä$y”üÏ“çÖüUò»üßÊÉÿ¬äkzÙ$Éÿ¼I̅﯒ÿÛ…äÿVNþçÈkE.›4ùŸ5‰kFò×ÉÿíBò+'ÿ³V“Vešü‡ëCƒºÐ9ÚFo¥k ©çÓä–|íù«äÿv!ù¿•“ÿÙeã µaÓäÿ;î°Ô…ÎÑ6ú] _U$ù$ùŸ]óžY6×ÉÿíBò+'ÿ³ä5Cþ:ùŸ]6š[óWÉÿíBò+'ÿsÞEߤÒäÞ¶1œm'ÿ· Éÿ­œü#ù4ùÿò0ïUβ©Î7“O“ÿï ßÀ¼79˦— •8QÛ¦¹oÙ40ïMβi¶7’¯†\bP•Í}˦yor–Ms¾‘|Sè¾Fàyä=Ì»ÏY6ž[6×5#ÑèÕðM™&…Sö¼fNبfÒó|NvŸßÜJ¼ÜCþÈ?æÈ—é·ÑV¡ÑIòŠ#¯¢z™v¡Z§•«un#ªuî!ÿ äŸsÈ?óä•f’…®«uî0‰‡z™v¡Z§•«uXÛ†6‰Ój>q‚»Ã†ô{¸MøœËˆ½ÕÅm ¢þU0‰éàBœ–éá”ñ9‡”ß²Ë&.5 £×Ã'ßÀÍë%×Ö‰Jà6ás.#~w#y\'uù7 ÿ–Cþ'ÕI]»¸+Û¤pŠ<—²ÕIÁUÈçܤüû­äQ‘×=ä!ÃÍç$Èù=¯*£"¯V(òbÉ+.ÇìªÈ«](òjå"/6|O“O‹¼îðxÈ9ñ9)+þ(H^*2¢¯L '7,—W Nf9'>'eÅðkžL uýýÛ(4:éú¨9×G¸µ åu­\^wy\^wyçùœh oò–Lœ¨´w*…“ä¹,îP^Q`ŸDö_7’ǵ÷‡ÌŸ“8áOü†­I=jY™aNØëÚÀn¡6°“k'xÿ_Ø µï¸ÚÀN¨ ìj;¹6!×vBm G>ª ì„ÚÀn¡6°“kòqm`'Ô²äCm`'Ôv µ\Èk;¡6#Õv\màÇ<:_¡ÖÉj$ù벋N¨P£É_•]tB…Z·P¡ÖÉj·’O*Ôî!òçòg‰|MKþºB%м:¡B­[¨Pëä µɧjw†Eûœ³æŸ¹5?äi5„žw½yPCøþùCÐó £*5änÝBy]'—×Qä“òºN(¯c$W¨uBy]·P^×Éåu ù¸¼®Êëî!§Ì6çÚîR•ÛÃ]Úf(pëÊë:¹¼îFòiyÝäw`Yír ³o˜ÅåuP^ÇnØ’3Ì®Ê뺅òºN.¯ã ³¨¼®ÊëxÃÌs†”×}ù¯ò_¼aV;O-Û[V&…“†™ã 3¸u åu\^Ç‘Êë:¡¼Ž'¯9òqy]·P^×Éåuô†½*¯ë„ò:VU*Ϩʫòºn¡¼®“Ëë=—×uBy'yÙÄ×åuÝBy]'—×qä£òºN(¯ãÈGåuP^×-”×urywÂFåuP^Ç’/™ •×Á)sÈ9¤GvÃÆjP¡ÆnXÇmØ« µn¡B­“+ÔÉÇjP¡Æ¯yË­ù¸B­[¨Pëä 5Fòq…Z'T¨±wتfî°WjÝB…Z'W¨1¶MAzp…»ljPë*Ô:¹B&U¡Ö j÷ÿòß9ä¿ùC*ªPë„ 5ö*¹CêªB­[¨Pëä 5Vò”a†+Ôîüœ2_9‡Ô׎¿Ãå¨k`Ù°>…“7)Íݤâz™n¡Z§“«umWëtBµ«*=#ùëjn¡Z§“«u¸6ªÖé„j^ò–“|\­Ó-TëtrµëâöžÚ°iµ+yÎK|]­Ó-Tëtrµ·lC>©Öáî°QµNÇTëüÆÉ9¶ÍG~ÃVô†ígÔÅÇ»\ ˆ®É‘|³æU¥¢T%ΫdU¥2Œª¼Ê«ìò*;9¯ò&ò8¯òòpÊ49‡Ts¾‘<Ϋ¼ƒ¼‡y÷9ËÆ¯ù5¥&vB^%ë· ©‰šØ-¤&vrj"K¾¬ÈC*IMäÉ+޼в¼º…³NÎ1c½^“ä“3VÛhÃh›«³n!Ǭ“sÌÉÇiZcÆJž3̮Ӵº…4­NNÓâÈG™N¦Å¸e2à”ñ9‡”?JV¥¡l›4߆—<çh½Ê·éòm:9߆“<é%Æù6üe¤æ.#qÊJ·²ÒÉ)+,yKÞ¤Ò”žùÇòyWÓäh€Sk¾ö4y © öÈ?ç–È3’w p’<£m4¸÷í É!ÿ"· C^×)œ$_1äÀ·@~›C~+¯³a‹*…Säލ²¼Œþô4Û›§müàïð—Ù Ù¼|äÀ[€·9ð€ÿäÀÏ?çÀ;€wð×ÙÚ¼~fÀ÷ó¥g³Í€gðæø–ß|Ÿ‡w?æ¼ûÇì^Ú|¬sà@þ#‡üHþ+Gòë·þl˜J§3$ÿÜÏöãš™wÐIÏýnü81û2<Õÿ —§¤«ŸáËSx®£§>á©Oö©Ý²=D(Q?ß@v²‡v÷ÙC»ûì¡Go2¤Ÿ™•léìú³ìNÒ—?Jn Nž9ãQ˜®ÚAtü;k—ag Jžegí–í,bt¸\¸dNí–Í)4ˆ)Œ6)\2§v÷™S» sJ÷÷|Ï2§vËæeÈÂöd5½>_Ïã+~>þQ‹FyS‡ýG±~#߇!=kE˜Sý³7 ‚§êµpéW„Mð0ô³Gp|€®~Rºc¸™ŒßZÀïî+«\ðR {ühEOš½ÝÏÊ‚ÕôX|ìÿÒl³=òæñ·øz¥G²uøã/ïµÀ?7›âQÑp¥ÇŠQ”ü]X?§DðôrÑ/ÁJS׆ÞJ›S…cø>†ÛÐu¤‡ÏÅw<ý.À°GÝ ûú¯1úFÐ/!;æj¡ ó^Bs†`Çš>e&K艓Ð("NBxô´ÿâ ÍMnâÑŸ = º\¬Òwï¯#Á A\àhu@IU OÏñAô+‚-‚§©öCÛ—QÀé×úÀ¬ƒãÑŸ ý°*ëË.{IW‡ úa×ñ“%JˆŽ‚§rÔ·Ìšë¶"xú%‚¡ %<¼¹1xôYF jUÓkÈÏ!ÁNm&G®¡²) 8±†ùŠºP5‚£¢ÁM±¢ºñÑ& £/è!ZBCV,#¡F9§$äi ÕÞ`8¥©]¦{+^#8ªL(ì˜'ºæÙ F_ÐCœ„lÉHHYƒà”¢<£SNH¨aôPY!xZþP¸ËAì-Uj<ú‚b$¤*FSfñGÐe "Mm‹áXBVÑ‚¤éžÖX }SGòþ€iUxô=ä8 ]Î[¼†®‰ã$d<½†Ê°IœPÈŒAã4=-ä(ªj e¡V÷ý/‰Ñô+¡’‘PÙhÿ³„UYcø *+O«E†´ýé´ÿÂWebô=ÄIȎͶ±„úÛŒCpJ5Œ¦v5†c d Ye<-I)*?¥·¤}ï{=ï1\ÒC§uñX3öoh i§}€c éº&]ñ%´báèR9)zBB~ö—DðW÷ò?tejjàéwÇ"üù©m†„,,‚GQ›¡Í!#!ã1üˆ£ÇzQB?ms$ðôã’W:çHhvÝDp¼†Lí9 p¼†´Z”ÀOç <ý‚e,¡Ã®xÚІÂVëÃ.Mt ›t½/žvL¦Úä×XßaààÛâé—I˘^1 ?º2IáëñKé „[dȪ 9tñŒÎeBOïÅ[“xÛs®m‹àhzõTˆ‹g´n<MoUÚ)š“Îh õÛ<™Þ¡)ðäíD3Z9E—N¯Òî¢×éõœ‹.}ÊÖ£Ý!ï÷ÃíóÞ(ð2œ˜w=ÙxÞkç|ŸN¯Õµ¢çÝ8àx[×UCλµ`x8šw[M<ï“Gó®Ü%¢þ‹l® ¿;ÚÖ®±žšw­µÃ£Òyo&Øzüd 7ïÿ2ö»'À u^^6,šwo‚£ywZÓû½_t5‚ãýîÆRX4ﺴÖ#8š÷zj"†çÝBµIGóîÊËÄ¡ý®=]:ïZÕ¥¦æ½4ÿ‰àÿÒ§z¦ÇyÿÇÏ{ÿOß<ï6X¨'æ]{ÍÍ{…àxÞûÇèý®j<:ž÷f²±ž·•Bp¼ßËÉ[™†ó‡5Žõ¼›‚–hÞ|q0†?¢AêŠÔó®òøÝ×ïÉSÕÔwo=™yʘwc bô$Ì{3ù(м+;wŠàxÞMëyµë<ÍŽBú|w\ÍŸøyïeGêy¥Ìœ†ÁѼ÷‹¾"ç½ö0qOkVÏ÷膘÷AÌ…y<é§<¼âm^? ó¾Ë°çmG$ÀQ4s¸³Wô¼—s¿ÅŽÏwÅœïÀàé~nÔ¼R§H€£yw¦¢íº*¥ŽæÝ¸ŠÞïV7xt¬çݴ갞׿ûv‡Î÷1{u½Û óžaÏתjR8±ß5Œž‡-³Ûóó>}èÏ»…$¬Žö{•ÒÔ¼¯ÂJ"8>ß›)¸ŽæÝÕÃѼ[ãéýnÃ-rÇÚó½õvñ´®ñ»;,ºtÞµÝíë`Ï¿ÿdØu5(j€ó>µw¡îq°ßëùécÄùeŸïª¢Ï÷^X'ÎwOï÷¦4Žíy]ZÏ+¸GðGtnjÒž7Ç£ÿ¤ç{3…ã×ã÷v˜y¼F7λíw¬Oá´o‰ôÛ”Ö¹N¬ÝP~›éž€áÈ ¨/Úæ)jˆP8: J?Ý&Ò¡zýÞ=YcÉ×´ßÆÍ™Ñüzu pc§û{²h­öpLDðÇ®›Ë–9¤çG Ëæ±ß­‡T‘¿ß•o s¾_¥°ß5ã·Ñ•Bäñ~7vº ýî œïv¿+m&«ÛórHü~w¼ž‡ØmNq{¹þ£ƒßÂàÉF¤ݼÂ~?º›çÝ s’‰y/=m× ÉYŽæ]ùÒ‘óÞ„€i€ãó]‰„=_V˜<šwÕ0v1Ãñ¼7޶ëúë{ƒáÏX'Ñón*ˆ‚¸+Ó{ÜôõÑñóþ‘ᯫBâӇ诣ü6£ÃN#8¶ëÊÉ0Ãû½QŽö{?ˆbü´Äèè|oœuô~¯áþþÁûëLc,=ïœü]ÿ/!p4ï5¸><ù ×ðQÃ1×iý!øëÚŒû»î…—‰{œñŒžž“–¿¿×eYÑ÷w†YËûm¬oh»®i†£y÷—zlÏ;…Éãy/ëŠñÛ€QÚ²÷wåššö×Ur<ý¤Ðð}”aÇ­[áþ~z¾qÞ‡\óô<À×§ç?ÇãTH?óv3åñ‚0 Ru#ø1uÇú©°  ̃GÞ\{Ñ´èh £qÇvÝœX–.ßX<:¶ë.]6hÑzâÝ‘]×ëÓqÕ¾Ò-sÊTâ¼ÓÖN‡[W\„ÁÉp늋°"8n¥õ¼ i‡N†[W\„ÁÉp늋°"ø:Äz{±”燎„¦p:,ºâ"¡N…EW\$Áɰ芋„"8]q‘P'â|Œ>|8Áãš7Ï|(&Àéð劋Xb8¾\qKÇîMkéD„!b‰àdørÅE,œ _Žó“\YúkFï¾¼u~"Àé0㊋,b8f\q‘E§ÂŒÍЉ,*'ÃŒ+.²ˆàd˜qœŸ×?kk_ŒÞJG¾œ ƒ­¸È‚“a°‘|šœÛkWôî‹q¬›ç§ àt¸jÅE¨0œ W­¸‚“᪡Bp2\µâ"TN†«Æó'[ò¾oZ¸ŸJYʧÃJ+.’„àdXiÅE’œ +­¸H‚“a¥IBp2¬´â"I~HÄ•‚Ö÷cxáæûO•úÎÏÙצÆp*ü³â">N†V\ÄÁÉðÏŠ‹ø 8þà‡nú{³Ká‹ñ››ç'”ŜӬ¸È †Saš™Ap2L³â"3N†iV\dÁÉ0ÍxÿI„bkè|à‹q– ÿAÂépÊŠ‹ `8NYq'Ã)+.‚‚àd8eÅEPœ §ŒûÕk[üî‹ñ›íël¥ûOEßêòÊ©ÏÝ\Më·!ÒàdØcÅE:œ {¬¸H‚“aÞ~'n:ÁøbÜbÁ> #)œO¬¸ˆ‚“ቑ@p2<±â"N†'V\DÁÉðÄŠ‹H ø×)=<+ˆj=OFžŸç~~N”ñ©’²ßÆB£^îK”úAÏ­S#8qJ¹†É8êW6ÔüLu¬‚?£=øºßçf_¼ÐÝ?æ:<Ü;øAÃ÷BÍòž:ä àGa_xêç†A †ó ‘>{¿{FzrÅð­ð&ëâU3«v¾6|òzžTÚ=,m³B ™‡¦X!M-‚¯ŽGU1ƒïàI­ûØgÓaŽCë-Vm€óͯ†#àò®¥“õš4¸k,‚·‚ Ú- ²ýó ¡"1À[aE´çËSÔ¿5%uœø¦ª¾iÏü »MñÉL©j¦ þ¨^¶$ÀqÇì~î¦`’Ðùa÷Ê^Næ2úaÑ€¥ðtô~l;cwB§²^ó£O9¹è;”E’èÜ»ÃS G×£r£Áúù!É"xa?ùwo •—Šæëls©'F–+j(çx2úØjÏÖ™w®kŒ™¢€è›|E’è_éчw¯/ï¾0ïÜèv2bз‹b'F¯êú/óÎI^M.ô1ÅáËp)>hÑæ/ó^³]±¦U÷‰GW)Ï»«§-³4ï5ÛÇdzw$º”3ÀñèæÒfiÞÙÑ'8úaÑÉùÑ]ù§ygF׺™Þýïw• É_ºÊIó¾]­bæÝLv¥ûF£CºS€§ãмtºÖ!Û¨€°V€£¯·^«þÂÔ±Á·Â¡¼ç_q¸%’¯X(ØÖ{öCƒ“=Þ2Á‘áPLu€Ä÷(ò{áÞùYÔSU8ñŠp=pb/Þ]b=‚#‹¢˜ ê©Y„5à?üg†§/ÅÞÞ;Ø@ü(À [½ªÚâ3Á“ïfŒM§“e-˜lë=O¾´šI*„dÒçÉcƒ$äåíiòCëáK òZ¸°­ùŠt¼Ž7_çÉ¿cò:…cÉÏ]¼ÖA»n%òL:§†Ä­Ý–Í+O~·e%†¨°lvâ²i˜eSkçÉï0y›Â‰esi%º–Íû$yfÍkåœ'Æä] '$ï"ŠHÛp7Zm™mSyçÈãÕl[!¸Æ:ÉþIÛhVUzFUÆ™–7“ª»\cTû¿h–¼³Œ¶‰»³ÜF~Z×Á5ÖIÕŸ´ KÞ2‡”»Ò6·J^Ãm#¸~eÈ/i–¼R4y[:¿Aòå•¶¹Ç:ér{ZÐ6ü²aÈ;cüÉ7Psàë¤)xµ m~×Túv ¥ß#,ª&Î=¿Àq—ŽÊR]:ß¿Gp\•aBºžÿe÷Ÿ¿rtº¬sTžæhG£c޶†5ôüQü*î©ÉRyþà§àˆãð-Or¬Bc¨ÿïˆ1çy~oú›ò+Óútîá?üðùJq pâ+dnläó~x,vÚùàèKƒ¶€hÎ÷æ 8>qŸŽO÷q|ú ǧíÌñi+}°„áp‚ãT)#r8ÁÑÍå8ßOïÀ‘û´ÔøÇñ]à8ºÕeŽïÇÙTù~ù˜9’ô\Í?0Np¬Æ §ÈàÔ\Ï;ëû¥Ž-DZ8¶÷qlÿ²_:àØqߎÀ‘þ6hÍc€orý±èM^?gޝÜŠ^ާÖãåpj=Ωßû×™ãžûÓøÃñ¸ŸáìW`Æ–àÄ+š±Ÿ†øŠ'^¾Uö}„i8rÓ0þÀq¦Á4‹Óp¦ÁÎ÷§AÁþ¢^O¬z=½2Ÿ.÷c®×’z=Ñ{’ª îôõzbÕ+ÏÑš?¨×'GÕÔAÁþ¢^O¬z=½²ßüµP¯‚UPp§¿¨×«^ïâØòr,çrìAÁ–Ôk'p쎣›K¨€ä§_R¯§¿¨×«^ùõhÜÔ+¿gŸÐ ¡NÑ'V?ò•ýƒ~d8šÂÏÆþ ¡NÑ'V?òõ_ô#/Ç9rñ46ªÞ¯¹oª¯äRϧ^Á•z€OZtø+¹M‰Ÿzï×ã>.ú[áýR¹ÀÇ…z#|øºûáãIüc¨W|þØÏO+£Ÿ4ýúÌ">gÖgN}€{®.¶ïe,®Xy0ƒœúò³¾ºüáM¤ 3H«ÁË ò›HV&9ÈJó‡æ'CY³û\0™7©æ„Ãá}Ÿÿ ®ßgN\œšøÆ‡÷½ "‹‹àÔÄÏn·á}/ƒÈâb8õ&s‚ò¤o>^îÒ7|êð×- ãéàŸðQ]ðQÚ7ŸÇ5Â¥e7¨‚#óŠWšäHÃ?þÉÁ?yø #ŽÌ+^©˜#¯ÇþBþÌ’?ÿ…ü™×=“<Ì<º¤”þ :~Ù§Ìñ<½ûI~ÅçéOò›¯ºõ¿âeü§§†"Ôè/üèÞ?uþOõWð©Šz õિ¸Â§üßï.~j2K‡‰;’?Ìk~3NÆ€–ÈxB~LŽ®1ù©¸Î¦pD¾û1{$˜áO@þ)‡ü“D^1äç h€cò«)ãüHþ0Ã?€üGùŽü˜*Jc°U §Èñã#ùà ÿòŸ9ä?o'ß_€L Ï$òçòg‰|MKÞ—Â)òMÍM»é€|—C¾»™üP/âRxùía}{È àYkàyËf{òÇòÇ›ÉG™ÇžGþ0ÿÓSUþ­äRZ[òª´Æ£S‡TU3‡ÔÜ*g¨ŸºŒ>VRÝJ>À‘ž÷•¡$_8qœ ¯Æw?’?Ìð-ßæßòä§Ï0!òM©ç•Ï$ºî”£*OgŽŒ´Bd„#EFZ!2Ò.DFZ92B’¿ŽŒ´Bd„&i…ÈH»iåÈO^1ä¯"# ù82Ò ‘‘v!2ÒÊ‘šü•£µ"#,ùàhm…ÈH»iåÈÈ­ä“ÈÈ=äÏ@þœCþ,‘¯iÉ_GFXòMÍ¿ŠŒ´ ‘‘VŽŒÜH>ŒÜA~»žGß®3Èø5ù^¡¹É OÈW…Ñ®BÇäUAŸ°ã3|äw9äw,yã4yH¹ª y»ûÈùÍ9a·‡»´Íöp׆¢BíBLª•cR7’OcRwßY¸Ë±*w¼UY+O˜º°“x'Y•%gUÎåÅCiøL>ÇªÜ VåÔ “/ËùãNZ•ž³*çö}þ§§Òê[É82|m,eÏ+ ŠœÚ°Ê3vîÓ1´%ºŒ¾ÏQ•{^UjnRÉeÄ Ñ ÉΪ„oZ Ÿ+ŸÉç¨Ê=¯*õÔ§©Êº±s I€ä­a.#vN ß@t‡ÉxÉ›ª&–ŠÓé HÞ–Ž!ôí!gÍ~Ø GÀ[!Î^Fªš¹Œ@¼ѵ9’o׬ž/Èk`¿am þºV¼ªÉ«¹ÖÐim&Ÿ£ç[NÏÎJzÙ˜ nÐíö>ò`Ó¶9&q{ÈSzÞ*AÛ´ç»ÈŸ`ÞO9Ëæ´æõ|”8Ñ ‰ü!Å‘¿Jœh'Z9q‚=¤Mœ¸‡<Ìû)gÙœÎyÊõ'î ÿó>þóžA>À±žŸ> ‰Ö|¾Là¤=o9{~ž¸0ÈrìùŸƒà«}È0kúõT¥pÊ<àÜ}Èÿƒ÷/gÃþ[³ä½bÈ÷'¬Iá„=ß³¤íy5÷03^Ú…|›VηáÖ|”oÓ ù6ìšù6­oÓ.äÛ´r¾ GÞѳ4߆—¼æ$çÛ´ ù6­œoÑ·”ªÄù6¼Þrþù8ߦ]È·iå|vÙxKJ>É·a—ánRWù6íB¾M+çÛ°p’<Ê·áÉskþ*ߦ]È·iå|Vò5½l’|Þ¶á"#Wù6íB¾M+çÛpäµ"—MšoÃÚó5#ùë|›v!ߦ•ómØ «IÛ&Í·a%ï4#ù«|›v!ߦ•ómØecH=ŸæÛ°änÍ_åÛ´ ù6­œoÃ.o¨ ›æÛ°¶Mɹ>®òmÚ…|›VηaÉWI>É·a×¼g–Íu¾M»oÓÊù6,yͿηa—æÖ|È·uás´ç´Í Í«† _ ½ ›N°šYóÐSxãücùG|IIÞôÇ»B£“äG^E¹FíB¦S+g:qä•füó×™Nw¨Ê!ר]ÈtjåL'vÍÓª2ÍtâÃ÷œm2à”ñ9‡”½õn ü¿æÉh ë­£Ðè¤aVs†Ù|‹ô-osÈ·y«)¿M¥½S)œ$ÏEÀ!”9d6¶ y•­œWÉ-›šÔ6(¯’µ* £*¯ó*Û…¼ÊVΫä2, Äy•|šVÃ¥iÅy•ÝB^e'çUNðþ)>¯²ò*; ßqy•WÙ-äUvr^%C>Ϋ센JŽ|”WÙ y•ÝB^e'çU2äã¼ÊNÈ«dɇ¼ÊNÈ«ìò*;9¯’!çUvB^%G>ʫ츼Êyt>»¯“³ûHò×)+ÝG“¿JYé„ì¾n!»¯“³ûn%Ÿd÷ÝCþ äÏ9äÏùš–üuvK>$ÈuBv_·Ý×ÉÙ}7’O³ûî ?ä×u Ù}œÝG‘O²û:!»!'ÈuBv_·Ý×ÉÙ} ù8»¯²ûî!Šz›£ç·‡»´Íöp׆ò뺅ì¾NÎ|šÝwù'»ÛfÇÛ6qv_'d÷±¶MÉÙ6WÙ}ÝBv_'g÷q¶M”Ý× Ù}¼mã9Û&Îîë²û:9»^6WÙ}ÝÇnXå™ {•Ý×-d÷urv£mâì¾NÈîã$o8Ûæ:»¯[Èîëäì>Ž|”Ý× Ù}ù(»¯²ûº…ì¾NÎîãô|”Ý× Ù},ùÝ× Ù}ÝBv_'g÷16Îîë„ì>Ö$®jÆ$¾Êîë²û:9»ÑóyÁÙ}¬¶©É_g÷u Ù}œÝG“¿Êîë„ì¾{ȃMÛæ˜ÄíY OéyœÝwù!Qª[HÓêä4-nÃFiZ¦Åf–3Ìâ4­n!M«“Ó´X×GÈtê„4-VÏsÞƒë4­n!M«“Ó´òqšV'¤iq†Y”¦Õ1iZF÷9ä=Gþ:”Ù ¡LÖ0 ¡ÌNev ¡ÌNe²äKÂc†C™‡ü^ ïCÞÙN’· yä@þCþ o˜Cª‚5€“ä5³l 6Ñ‚mcsl{”Ö…S’Ý̘üC0‰ÝÈorÈoò5cÛƒF'Mbƪ,Á•àÀªt9V¥{”$ÏX•Ê«NJ^3wØ@þ È?å’$¯¸ËH•ÂIÉWŒª ËLb—c»gž|]rä­Já¤ä#yÐ6Lb—c»‰¼ãÖ|•ÂIÉ3—‘¼Lb—c»W^ÏO÷8rÍ›NJÞ2’7“Øå˜Än+IÞrk¾Iá7]ÀçøÇ—ïâq¤þŠ9Ž>ůë·|V—U÷øýRŹã§êÛ%ŹËRœà7ÝýIqî2ç GÂ%Ź[PœÔ .Ôdì24ª*t¥R¸¤QwË bûëiÂ%½»Ëл¦hê*…Kzw—¥wkàø'½û¾î‰œ†ß†¿¸oÈ¿ïà©ÿÔaó^ô*ˆþŠûå0#?.ÁÌgØÿß›#óõ¾à‡bóA‘æ}L(NÿÝé Ož²•›àâ ÿ ÈÏO‹Í'ͱ¿ÚX’ãð†§µº˜ãð† ŠÍ/óI÷y~„ièág þP(SZþ0¤U~8þ›ŽÄUc<bÍœÃ;aÇbc§§,'ˆÇtôºr¾N©@`é°y*6nzÊqƒ< ƒø†døØû;c\]I>"ÿ0dSÏðôôIÊ1 1|ì=ýApaÙ½tÅËÛ¤íÞŽ/¿ìŽ3·†Sv~ê£x™¨¼|rƒ`¿ïP‰áØÁZÌ»ôQ/_ô5m¥ ÒÚˆñõzÓO ð¯WAmñrš3àmWO*&!ÿPxp Åð“0YýSßô ª=OxÆkáßòŠø1Êÿ°"¶ûb»r²¶ |»—á >è1cø ÇæÄ ~à_±ÿ§·G†cÿÏ1ç&”1üȲû,v:ÍçaŠ'»ÿa¬IÔ¾á”GB¾hl€‹Ýë?æŒ௙£s)NøîÈ/‚~£í'x²å‹sÔ|{A§õšïøF¥ùôkH)Nhô‡PmÁòý 0c/UȽjfg?¾ «ÃÇ=•G5ÌÃt”÷<¼± üÈ™Œé»UF.,®ã'µ:zmåÊfE½»¯¬Fð㧨Q–šÅàrL2™ú›•²UÐCë邼Î;™&8:™úi¤’Áût1Ç3âcÏ\Ïi+äjôÇßâë•~÷!õd€?þòðý+€?Œ>{ËçQÑp¥Ç²”ÉÔ¿ùì­à齡Wc0݆fjÃ)ÜŒ=?ÐM£¿½ÍÁžVíôðÆ­°Ë£ñzöÇ£¯ =ò²cø ¥Kõšƒ®IH9U‘*kGÀ‘„ÃHÈÎeQ<- þž‘òxôGABÏ‚„.w&ôî¦ôŽQ^àé»+¨Åˆáé9Ñã5ýŠ®ª<ÍJqG+"í±Ø[«ó þ,H臕PY_vYåšzGr4~²tÑQðTŽºñ–^CÐm"‚§ýû§Kxxscðè?‚„~á)®e]3'•Dð4­Ð•#—`~•Ž<ºr+zûùÃS9V¥§×¿bÑU)œ”ci+ÜzŠ-al=†c…lǾ—Ä+êÒa8Z*Õ˜+†ÉëBáÑQšÝà£YQtÁ…¾ ©i ©´„”ªjÇ›©šì`,!Wz GÒž’P/ ²ÒŽrù ;&ç 2½¡Y«Á£/hjNB¶ä$d ‚Sššònš^a8V7ã×(M]Vž& îbªxDK•¾ © ©Š9ËŒ ³ø#Hè²ÑYf‹áXBVÑ‚Lžf%!‚‘¼?`Z}AS›5µª´Âp¤­Êš9Ë\8Œ­´ÒU+Ò 0WªÖPªvã˜Ç…r"ù6htäØk+Ç­!mV”w¸„þ‰kjíÒ‡\BÙM GUͬ!§†s‰riâeQUÃÓÒÖÞÒ §É£ ¡ÒÐg™³ Á‰¥R3gYY[ dzXûE=ð4‰sȦ›,ƽ»®ñè šš“½ÜŒ°„J‡à”¦fβÚÕŽ%4ö'#$Ý:žfŠ•QWÕþ$ô.iêõ¾xÚ1é Óµ{=–߯ç¾-ž~™€õ´Î“˜àCoIšÆ¤ðõXHœBÜÚ{+ _›)<õé váØ‘Õõ6Ð0üê©AÔS˜)qÊ î¬¹è!‚'A…áZVi©9˜0sPO|¢E9ôB¡âO=/ƒÉoR Õª1„¿¤·ck¸PGðkÕ[ÁÕØK+m(Ø[eƒÞˆÆ®®×­«Ã…+-Àñ"èßp4w‰yŸcF/‚‹Ë!qÆ æèàG‹@OÕxÞëÆãÑÑ"¨J;¹¼Óy¯¡(%‚'‹`H¥˜†hÞ+øpR LÉ»fR|ëô‡zΉE—>eëQñÉZaÿ§Õq¸}u4 l€«COꯎÚ9ß§‹ÀêZÑ«Ã8àXEÔUC®kÁ>p´:úk¤¥W‡3 ‚£Õ¡Ü%.ü‹Ž† ¿;R®±žZZk‡G?¤«£™œ=ë±›·:Zÿ2t‡ÓU 'ò²ùÑêðÆ!8ZNkZwôK³Fp¬;ܘnV‡.­õŽVG=µãÁ«Ã–pò8Z®¼L/ÒÚcÑ¥«C«ºÔÔê( „c"ø¿ô©^;êquüVÇ¿¿¬Ž]†ÝaØ~GAÁ+Y‘«£Ÿ^àXw(Fw ËÁÓÕ1X-ÔÉ2z¹ ‚£Õá.·/´:ªp,8ZýÜ‘«ÃêŽW‡Ó–^ÚãwOZþºcüLÕz·åWÀ‰ü®hudصš3¢œÐfl–IéŽ9i.‚ãÕ1uúÄ«ÃBD=‚§¡ÜÁ0ÔÔêoÄŽuG3E²ÐêpµÅp´:¬ñ½:‚M¼cíŽþü¸\I×øÝ]º:´=7ë`w\\ï?' $Ù8±:¦"6Ê*Ýàød1c€°;Ê9É(‚ã“EZ#ìø´aÇvGéiÝÑ”ñݡ/n'|ƒ>‚?"ƒ¾©I»Ã4žt¥ìuÇ![}v˜ÕqȘ÷þ:àS8aoúÆ0gܼkæ6¢+ðÝøy7vü: žwoàÌ8°ó®´Û ¢Ìœq9#8¶(x­Nãþœ öb®¢ÃÄ‚F ð¤¡çx® £¯?²B‰óN{R8íŠXqÞ']+Îû€à”+B­8ï‚“®ˆç}@pұ⼞ô‰>»9š‹îyâhÇ@ §½+Î1€á”—`Å9œô¬8Ç‚“^‚ç@pÒK°Â]õÆ6ñN_óW¸Ùß×N_ŽW¸ß6qÓM7…Ó×ÞwÓÅpÖ[BÝt©Jw¹S7ÝÁÉkéZ'¯½+܇r(±0èÝé{ëêWÕ›wœ\‚pÆùÉ‘A^B1œº‘®¸K(‚£‰«¦nãô%ÁÉ銻„"8y#]½=ûCN¡w§¯”«?Ü"ož¸ N€Ó—Åw?Äp겸âî‡N^WÜýÁÉË⊻"8yY\á~©…ígÔ¥ðÅÛÞÍ6ˆoL §/u+î‡áÔ¥nÅÝ㜼ԭ¸{‚“—ºwCpòR·Â­f Óµ.…‹·²Í¾x¡³1çÀ3®B~Ð…Çð½ÿ?ÂS‡œAü(¦ò¼p©™Â ÃùõÏ~"_È‹œ4ˆ*†oÅ4öWÍ$ØÎA“O>$àI‘ÞPdg›ªùJ$šÆb¸œžÈsTÃQUž”Ž…€s 1 Þ"¸vÒ›œÖüd½^'~(D€·‚ Ú- ²ýó !¸à­°"Úóå)êß3ß7'¾~5ÀéàÌBý¯Øn¨Úš¡È|üd 1ׯ'êÇkÊ!;G¾Ç™ïº¡Š—†Œ`‹àxÙS‘îúUÒÔžîë^§–”cnÈrƒ³0ÀSÝ3ä\:eâxUÌ»a{ýïBå~<úÕîʯ7”ëVñ»—ô¼÷g¬¢ç݃àxÞ•¢F {æ’¬ôU:‡àxÞkåé0±5‚£y¯Ê1œ˜wScò¨þ»¿ë:fÞ5èq1ŽÈÅ£/L¯b¦×L‘(œ?­†ÿ}z{ëÄ#8š^mK* 7”$££é­œk˜(œ7)œØ?Ít/[°ú“€5'`MïŸÞLT~Ãþ©Gp$`U×LÑçõöÓtÅjÑ&Ì _ pJÀÖüEÀzQÀ»MñÉØª™ aÜа€,€ã62½Q19"7ü±¸{åG/§@#êY4°žŽÞm'×ÿN(iìçŽ}Š¢ EÒŽÜ»Ãë•\üÙ¯ fôAô£èpÏ"ø³>ùwo¦R/òSÑÄq—ÌNÔÔ¯?} OF+‚mý—yçŠ'ÌäAFý‹&$¼Ò£ï^_Þ}aÞ¹ÑídŒ¡>˜Eþk€£Wuý—yç$¯&.jdYÔÁ“øÉ>˜÷ÍÒ¼o×E«˜Ugô¨µÝ7¶å,‚Ur—*Sty+ e-À‘E^hW­p§¨‡è£Ê|+Üöü+uŒä+ ¦wϾâXkL¾b_ðàèfSèKÍj†E‘ß ¯øóÎÏ¢žr+‰W„È[€³hn=‚£+O1¥¥R³k(ÀÞ…¬ýmñÅUª’¹¨p¼8áL¿ê²Q[¬ÛtšþJÈÿ{Ü¡|£ïsFß £›bqôŒ~Èýñî$‚\óèÇœÑïþ£ÿäŒþ#½»&G¯‹¹‹Ñà-GÿÍý—]Žtjtøðv;>:}oàÄèjüª !ù¾X·…5¿ÍYóÛ}ƪ £M;§ÑGß­£œ½¿¸2£Ãw”ÞAòï9’ßf«nS¼|œ bJþò!¬:€÷O¿O¯W~Àá˜[®Eð!ùt.ð±cÛÕ …¯áÖè‡þäŸrÈ?IäC¾!pL~59Wä3üÈäÿàÈô5A>ö^8E~ú–ùCô±æ ùÏòŸ·“ïOx“Â3ÉŸü9‡üY"_Ó’·ðK€S䛚!ÊjÓù.‡|w3yúÒxùía}{È àYkàyËføvø…ü1‡üñfò‘s5ÀóÈï@t»Éï8ÉÞªÑgE©Jø’ÑŽ•üðÕ’üøÃü…ðù·á¯ÛÉxJ¾i|¥Iòª™;§8A~jUt$¸À¿Nóè_§ òŽ$¯*C“wÃpŠü˜žq$¸ÀOëyô1èVòŽNXÏwBàNWcŽÁ‘üa†oü6‡ü–'?ÕÀ#òM©çt€g’ÿò_9ä¿hòƒ›¶ãPˆ¼ÕÐZ)À m£ KkUŽÈSÎ {: ’s‹±äM'ìé|—ä,Z•³æ•°æ§"߯&ø°’ÖüØøäHþ0Ã_ükùWž¼£MâÊ»9êàä²Ñܲ™õ¼‚§r6¬6¬¥6l/8kœ:¤¬e©ùk:ƒï~&ŸsH©°lƘ!–|UÍ] œZ6Æ3Ë>lªÞü{ùwÁ¶!ÉЍQ)œ$Ï­yøŒ²u¡r´´©ée£Ã×x•¤mjfÙ@=üà•¿Œ®s´´Vä²1ÊÀW˜µ m¦ÌÕ#ùà u¡s´´Õä «¨ pJòޱ*!“`æÌäs´´¡Mbë-¬y-™ ·æáóšÔ…ÎÑ6ZÐ6ÚjÃööøÎ p¬ç‡ ©ç‡f8¨ £mô»@¾ªHòýýÛ¥pjÍ{fÙ”– ¨ £m´ m´fÈWsþJ€SËFsk>\îŸçÑýsùOÈ $š¹€[¸Ij¸KUz¸Aûœ ¸?ñ’¯5y“2>à”¶1Ìe¤„»Ìº?&Ú4° É·<ùö4>¬ù~°…µÔÀGòmbù‚ëý0Ãßü{ùwšüà ¨‚U“ïWMF'ÈÛàú@?Ìð=ßçß³’wMˆŒ„ÑMQV¼F'È«pA?Ìð?ä?°ä+ïIòsp‡8E~lz|$˜áÿ€ü¿òÿXò¦ Þƒ6ZOÞCwû'È— C>Üe†V»Pkå€Iþ: Ö 5šüU@­jíB@­•j eÞA~6í.Ç$Þñ&q­ ã¶ AäV"3äã r+‘YÉWš‘Øk cô|Èú8ÀyÈ9aG^UZOÞaë>dà”¶qœ¶Gë®B‡œ›Ôáƒ]6eÙêrÎÁ {ø6¬å6,¬yÐu‡Uyøa%¯µ%%_ièàÔ²©jfÙ̇¢ÔËèmΆm׬aV~;|N潕©šÙ°ðí¡hx&Ÿc˜µœa6Fhmc*pyµÛûÈùïòßü kŒ¦Ö¼±5ømN°%wÂB@­…t›soÏ‚ä)«Ò* =OòCŠZ» ×Ê r̆äZ!AŽÝ°œ—ø:A®]Hkå9nÙ0äÓ9Þžç$• ×.$ȵr‚kUz’|š wù/ ÿ•Cþ‹?¤¢¹VHãî°Q‚\+$ȵ r­œ ÇJžrqã¹;$ÿÝΣ·ämXï%yÓëP¸ œ2N m’B[9)”#o©C '…òpËEÀã¤Ðv!)´•“BÙeCEÀqR(»l çî»J m’B[9)”õ“äQR(Ož[óWI¡íBRh+'…²’¯ée“$…ò&1¾¿J m’B[9)”#¯¹lÒ¤PÖ$®É_'…¶ I¡­œÊnXMZ•iRè® êBçh½•®¤žO“BYò ·æ¯’BÛ…¤ÐVN e—7Ô†M“Bï¸ÃjP:GÛèw|U‘䓤PvÍ{fÙ\'…¶ I¡­œÊ’× ùë¤PvÙhnÍC–Wê¢ÉÑ6Íš÷(Ê{°ª‹ÆÁ!Õˆ¶ál›ùÝØqMΆm¶7’¯†¼JXóÍö>ò0ïMβiÎ7’o ]jHhÎw‘÷0ï>gÙxnÙ F@E]«Âé²Iá”a¦U Ä6þÈ?æÈ—y‡ÕV¡ÑIòŠ#¯¢<êv!‹»•³¸9òJ3¹×YÜwœ°Cu»ÅÝÊYܬª¤OØ4‹›Ãr&qÈâãÄçØ6þõV™)l.øWá„¥}•q–—]çsT¥ß²ËFMἄ|=´¹¯‘—nRœ—Xƒ—Ø¿ù·òo'ëÃïù %ÿ·Bò?K^q‰WÉÿíBò+'ÿ³1)š|šü‡Iì!êsâ°þ(H^Êݧ¯L '×<—,žTŸ‡õüš'3\oT…F'íùš³çg냛×çx‰}+·d@­ÒÞ©N’ç²û MËCPÉçĤü‰_65©mPÍ{1Œª¼®éjF:¹fd‚÷Oñ5#P3ÒùŽ«鄚‘n¡f¤“kF(òIÍH'ÔŒp䣚‘N¨éjF:¹f„‘|\3Ò 5#ù¨f¤jFº…š‘N®aÈÇ5#P3Â’5#P3Ò-ÔŒtrÍC>®鄚Ž|T3Òq5#óè|åB'W.ä¯Óq;¡r&•ŽÛ • ÝBåB'W.ÜJ>©\¸‡üÈŸsÈŸ%ò5-ùëÊ–|Hþï„Ê…n¡r¡“+n$ŸV.ÜAþísΚæÖüø™âr½yPCXçùC8¤FUjÈ1 º…²‹N.»`©¸ì¢Ê.ÉÇ• PvÑ-”]trÙC>.»è„²‹{ÈÃ)³Í9¤¶‡»Tåöp—¶ º…²‹N.»¸‘|Zvqù˜…»«rÇ[•qÙE'”]°¶ä¬Ê«²‹n¡ì¢“Ë.8Ã,*»è„² Þ0óœae_@þ+‡üo˜ÕÎSËÆö–•Iá¤aæ8ÃÌE…ÝBÙE'—]p䣲‹N(»àÉkŽ|\vÑ-”]trÙ½a¯Ê.:¡ì‚U•Ê3ªòªì¢[(»èä² î&•]tBÙ'yÙÄ×eÝBÙE'—]p䣲‹N(»`¯†1®Ë.º…²‹N.»àNبì¢Ê.Xò%³a£² 8e9‡ÔáÈnظr¡*Ø ë¸ {U¹Ð-T.trå#ù¸r¡*ø5o¹5W.t • \¹ÀH>®\è„Êö[ÕÌöªr¡[¨\èäÊƶ)Hï®\`—MÍRW• ÝBåB'W.Ðä¯*:¡ráòß@þ;‡ü7HE• P¹ÀR%wH]U.t • \¹ÀJž2ÌpåÂ’ÿ‚Sæ+çúÚñwX£u ,ûÖ§pò&¥¹›TœGÝ-dqwr7£mâ,îNÈâfU¥g$ÅÝ-dqwr7wÂFYÜÅÍKÞr’³¸»…,îNÎâfýóÞS6Íâf%Ïy‰¯³¸»…,îNÎâæ–bÈ'YÜÜ6Êâî˜,îÿÀ8ù/ǶùïÈoØŠÞ°ýŒ€ºøïx—ë£Ñ59’oÖ¼ªT”ªÄiZ¬ªTLdä:M«[HÓêä4­›Èã4­{ÈÃ)ÓäRÍùFò8MëòæÝç,¿æ×|”¦Õ iZ¬ß&¤iuBšV·¦ÕÉiZ,ù²"©$M‹'¯8ò*J×é’…:9YˆõxM’O’…XmC‡2Ód¡n!Y¨““…ÉÇÉB,ÄJž3Ì®“…º…d¡NNâÈGÉB,ĸe’…à”ñ9‡”?JV¥¡l›4e…—<çh½JYéRV:9e…“<é%Æ)+üe¤æ.#qÊJ·²ÒÉ)+,yKÞ¤Ò”ž…¿¬¿Ë¢x+®V‡aF×n&_¯òó_ÉèÄ¿«-‚“ƒØÑ7smjÿ}m ðOýó£ÛªIáÔès¨ùñc[üNƒÀ_˃(€ÈY¼ òô4¯Ûͳ‚Ñ ª,‹þð÷ øËœèµyùÉwï2௳¯uóú™ßÏúj³Í€ç{èæø–ß|Ÿ‡w?æ¼ûÇln>Ö9p ÿ‘A~·¬¹|Ȇ·)\Òo»ûôÛNÒoÍhMIúm׫ˆÐ0/Õ0µIáä+º1êý0SvÚuÈ¡Eð,íºËЮª0óÍq÷'í:<Õ íßlz §pjQù‚A¾þ4ˆ. o#ÀÑ Ã(Ž–£SÜvH¼Mþt€6ïÅf?Uá¡­|±"6ÔÑÁüß›ã?rð½?›Šü0‰cÎpúïN?`ø{ò”­Ü??`øA~~êXl>iŽý Â’‡0<å¨Ýè7Ň0üSàøSl~§§~¹iø¦¡‡Ÿ)øC¡Li øÃ.QaøYàø[l:zWa <ˆ5sVC ïøAÞŸ‹§wƺâýú‚ù0dêÎ+¢7c^Þ¦-÷ÆÀIK'…ãú `ç§>Š—iJ_>¹A°¿pvÄÇp옛;<z{îå‹V]0ˆ°"úÃi þõ*¢-^N”aØ‹¡žöLBþ¡ðàLˆá'~®‡§~èAt3ñð ýàÄAú)=ÓƒTV{r _4ŒáÂÖØî‹ív*ÌÜ2ÒÞ Zt€(ø°}!àÃöK'bøAà¸-¶G†cÿÏ1ç6º1üȲû,v:ãaŠM&Û÷a¬0Õ¾ávB¾hl€‹Ýë?æŒ௙£s9(øî(îØý4z²1û…êÆðqM ’ïÕåñJ"é×sPÐè¡!‚'äû`Æ(Qª{UÕÌ´~|V‡+Ž“©Óÿ•êðé9îyxÿbø‘³”Òwêg\X\ÇOju ¦àر¿»¯¬Fð£p÷sw´Ô,‡V’'ÓÛýÊVAÝ|¬™káßί ŽÎ¯~©Ü½þ]ÌèÃæ±øØ3·ÊÙ yäGü-¾^éwøã/ ÿܬ‹GE ¥ÇÔ~”èÒSŸy<µwû=>Æú%;4æó~Háfìƒ,ä¢lfßO³¤{xãVøªÝ¿x=»ãÑׂ„y Ù1:‚²iz Í1¹Ž$¤œªH •µ#àHBa$dç<òž¦bþ`ÏHHy<ú£ ¡gAB[½»)=‚cA”xúî r_cxªè{¼¦_ÑU‚§iEC}îh¤ý:{£tVáñèÏ‚„~X •õe—%A¡¦Gp$Gã'S…Oå¨oé5Í?"xÚûsèÚb on ýGÐ/<õ˨p,ºfv{Eð4E©Ð•#—àà9²xtìá©ÜŠÞ~¾ÁðTŽU9™»þ‹®Já¤ëH[FÑkU“»¬´ñB¶cUâué0-•jL%Âäu¡ðè( kð-¬¨Š…உG_ÐÔ´„†H=-!¥ªÁñfª&CKȕф´§$Ô ¨¬4‚£T¯Â޹¨,bpû<ú‚¦æ$dKNBÖ 8¥©)¯Ì¨é†cu3VŸRšº¬<Í'+ÜÅTñˆ–*5}AS3Rs–fñGÐe ¢³Ì6ñ„¬¢%‰(enoƒF÷GA޽¶rÜÒfEy5KøðOÇšZ»†ô}–PØÃGU3kÈi…á\Uš—WT•Ç𴔨·tÂiò(H¨4ôYæ¬Bpb©ÔÌYŸ‹áxk¿¨‡žæø ÉVfET" dk<ú‚¦æ$d/7#,¡Ò!8¥©™³¬v5†c íâ E·€§‰„EåÇ|4Ô¡·? =†Kšz½-ž~™Hç´P“R¯LcRøzì·ÇCçužÜ›‡8gíSxêU »±=7ª+êo\ ""øÕSÃN®§øFâJsR{Oüòýj앺d®‰à‰W²(‡† Tà£çe0ùM*¡Z5†ðXô†h 7â~­az3¶;d¥ {ó­làÝ÷·Ï» ·M€ãéí¹–(1£sâWÇÓ{ñ$Ž®áäõàhzõ”Žg´n<MoUÚÉœÎh å<™Þ¡;ØäŒC3ZÁgÕbøcJÞ5“NZ§?Ôsbw,ºô)[:i=6`N·â ?Ü>ïÃàļëI'áy¯Cð}:½V׊žwã<‚ãm]W 9ïÖ¡àhÞíÔ ›˜wgGó®Ü%ˆø‹ôq…ßmk×XOÍ»ÖÚáÑé¼7“‡e=ö®ææý_Æ~wºJá„://Í»7ÁѼ;­éýÞ/ºÁñ~wcr3šw]ZëÍ{=uÀónK8HÍ»+/‡ö»öXté¼kU—šš÷Ò@x"‚ÿKŸê5šçý?ïý?}ó¼[ëêNÌ»öš›÷ Áñ¼—ãgÕˆý®j<:ž÷fLì&ô¼­‚ãý^N¾ž4ž8xÃÇzÞMyThÞ]£ð»oÓ¸©+RÏ»ÊãwO>0Ü~ÆëÎÌûSƼ‰'aÞ¯ÈyWð1¿Žç½Ñ´žWPÁÓpäpÒ绫Àlâç½—©ç•2s‡Žæ½œ¾HGXl&îiÍêùÝó>hðÁxÒXmxÅ1º~æ}—aÏÛŽH€£p×யèy/çÆ+ŸïŠ9߇ÁÓý>ܨyÃ?ÁѼ»‹[éù*¥ŽæÝ¸ŠÞïV7xt¬çݴ갞׿ûv‡Î÷±™àz·æ=Þ¯Õœ•àÄ~7Ö0z¶ÌnÏÏûÔñÏ»…,Žö{•ÒÔ¼¯B«âŽÏ÷fJ?@óîj‹áhÞ­ñô~·á¹cíùÞz»xaÖøÝ]:ïÚÎÊõN°çß2ìº5À‰yŸ ö¨{ì÷Çz~êúJœïèÁñù®*ú|·ð©àNœïžÞïMi0ÛóúâCÅ7s¸GðGtnjÒž7Ç£ÿ¤ç{3…{×cãmfÞ»›çÝö;Ö§ðõa÷W¿Miápbuè†òÛL÷ GV@}Ñ6ŸHQƒ?ÀÑiPúé6‘.ÕëôîÉê“སý6¼×~½:¸±Óý=Y´V{8&"øc×ÍeËÒó£„esÈØïÖC*ÂßïÊ7†9ßÁsrö»fü6ºRˆ<ÞïÆN×´ß½óýÀîw¥ÍdUb{>Áñ=Ž×óùŠàÏé1n/×tð[8ã<é|:Ú Ãè냰ß?2ü6UH°øý6Ôý}tÜhÇç{9ÐxÞC^Áï·éQŒ¿ŽéùÆYGÏ{ ÷¸ÞoccÉy×.¡ü]'çÝÔpð¤-ûð•‹±¾wý!ømÚŒ{œVó霰çgö{¸A·ü=®.ËŠ¾Ç98 [þþn}CŸïMã0Í»¿ä?c»Î)LÏ{YWÌýŒ“–½Ç)×Դߦ2ß ðoƪFçúîq§çç}H‰m ‘àëÓóŸã2 Ü>§¬~gÈóÝ(H ŒàÇÔ-ç§šlè+8&yõlÓq™þÕ5ŸïszFº |cñèø|·—°(Z´žxwt¾÷út\u§¯tË\‡´”8ït¤-…Óa·iCp2ì¶â"mN…Ýh=oBòN€“a·iCp2ì¶â"mž|:´°Þ^E®äù¡#b)œ­¸ˆ†Sá±Cp2<¶â"bN†ÇV\D ÁÉðØ :tü’‚/Æ·nžèàtkÅE®0œ c­¸È‚c7—µt@zˆ\!8ÆZq‘+'ÃX+üuÔ¢7o5z÷Å8Ô­óÝN‡›V\„ épÓŠ‹0!8njVL„I!8nZq&'ÃM+üØáÛ5‚/Æ‹nž Î0€Óa¡ Âp*,´b"AÁɰЊ‰UN†…V\$ÁɰРn(›¯} _ŒëÜ™)UÍd°âvìØ’Ç­6û¹›‚aôW~ôrJDì‹,%€§£÷cÛ)Ø·{F? £O¹è E’uÜ»ÃS -×£r£Áàù ‚"xù>ùwo •ÿ†æë?p©[D-É‹ÚøžŒ>vœ²õ_æ«í7S” us/š¬ûJ>¼{}y÷…yçF·“ƒºø ĸNŒ^Õõ_擼š®ð¨ Qÿê'7ú E›¥yß®‹V1«ÎLö…ûF«Ò*œhâri‚„ÎÈÜçŽ_oÅT+ÜMwjQ‡à[A9ïùWn ä+ ¦wÏ¾âØ ‹|Å¡»‚£¤Ð—’vÔ0˜"¿^ñçŸE=U!¯פ'fÑ6Ü,zG'K1pR³k(ÀÞÅ¢ò/ÅZñŒ=dÀOà„ÍVŒ Um±nGð¤ñòÃøièQì…£{½çÉ—V3ÉK´à—f¸ãŸ$ǧ>_2¾âûá±ØhçE€SßH™{~?½G®[þøÇñ]à8¦ªÈß޳±üýÒÎq»û¹¥qËs8æØR/q8Á¢bß/pì8ŽoÇNâ¸(G€ëÙ¬ü~ýœ9¾ríÅ_OÇAÖÌ /Ÿü Þ?uþOÞÙÚ¼F?hÓÌe>v‰ž¾5^Îä3üÈ¿æåÈ7Ö®D¾7hæ{N€#òÇÀ E~üa†ùÏòŸ,ù¦sC1ySΕ„NH^ÝpŽä3üäO9äOì²ñnÌ-@ä‡þúU 'È[÷°±Ög Î!fÉ÷—è†\ó¾*u 'È—–!7Íí&gÍo¸5?sc '"¯SëN‘sä3|äw9äwùaÕ{‚üÊkàÔ†­³aáó¶› ÿ‘Cþƒ%1{ù!_¤Já˜ü`›‘ä‡f8¨‹M޶Ù|ÞN¾×&…g’‡·ÉÙ°›³D¾¦%ÔÅæ,áGò‡Þù.‡|w3ù!¾íRxùÇõ<úã:ƒ|€ÚF9zÃB [€ÚFIGò‡ üN™çœCê™?¤´¥©*”ï8–üà|!%?üp¿h]gàxÙxG/(ý pJòŽ1Ì p·ÙÂ¢Ýæ¬ùmÇ[•®"­J£‚¢Þvyíò³›`ó¶ŸGÛgpDÞN5s yÕ_ÿ¡V?ÀIÉ+Nòó•t¿™Gßo2È8"ßï+OJ¾†„ä§ÌƒÊ0æÁüÕšÍvÜ>gÃîù «´öœaæS8%ù’[ó`×í¿üwùo^ÛL‘â&åœIá”ä£*áò›ýÿÉ!ÿÃfž<¤Šº.-¼VÜ5p†žæÑOäoئ$¯ýtÎ2 prÙpÚVÝáÈ¿äaÈaþš\6µ¯æàz€S7)îháøqœGÿ8fp¬ç§yGªÒ*(QpJògÌ),›ÔE›£mÚ“°æ}ÍRsòx€SäkFòð•ÄÍ(ê¯=ÿÅëùþ0"¯USÎ…NmXìy3§¬m¾@×}å¨Ê/FU×äŠR•zp}Ì)7NfÖ0†Ù\u6ä²^F?å˜Ä'Á$® u“*œ‡îWN-Î{ À{p‚y?å,›ÓFZó¤a檪T)<“ü3Î!ÿÌ.›ÒÒ†ÙPí¡S8µæÎWÙ| ä·9ä·ü²™šž#É7¥†ËÀ3%ÿäßrÈ¿ÝLÞÖ´ À3É€ü!‡üá¾ {¸<ø.N9®ÓY<}‡mLeÐè™äW9äo7º¡/àк+À)“xü ë‘üáÿ†{ÜwÎ5ð{ÏjmÆ”¼lœ™³ùœÔ6 §m€<,Úïœ5ÿ}`%_WÆR'¬é¯RU §NX­™VϪòD÷“#ùþ®|E.ë´B£“ËFqËfVV¿à»øÍq}üv‚=ïêRªž sœ\6Ž[6ó†=ƒqrαmÎkVò•7¤I\…¼Ã§– \˜á`žs¬Ê3oUª)ç2!o†Èˆ­S8y“j¸›Ô')Ô²’WuCnXã Øóþó®d!ÿä¿rÈñä\0Ö56…çÙóîq>çèO‡üž_6Jäu1wÑ p‚|d˜Ãl}ò‡ò–|åÂüEFêJCdàynÍ«°æ?ügùOvÍÇuR'¡NŠ_6Ž[6qÔi¡Nê$×I1’ë¤NBG>ª“: uR§…:©“\'Åë¤NBG>ª“:1uRë@þ_ù,ùAŸcòªÿJ¤œ"ï8ò..ò:-yä"/’üu‘×I(òbÉFÛ\yмNr‘MþªÈë$y±‡Tå˜CêªÈë´Päu’‹¼òqÔI(òbÈÇuR'¡Èë´Päu’‹¼n%ŸyÝCÔÅ&GÛlÎùš–üu‘K>ÔI„"¯ÓB‘×I.òº‘|Zäuù¡Ìê´Päu’‹¼Xm£½a¯‹¼xÛ¦âl›¸Èë´Päu’‹¼8=oé6-òb$ûçOB‘×i¡Èë$y±ËÆ;zÙ\y±’wœaм`Þ·9ËfË,›áœFOÈW…ÑΣÑ)ÉÛŠ‘-”QŸä2jnÙDeÔ'¡ŒšÝ°%gU^•QŸʨOr5gÏGeÔ'¡Œš÷ÛTœß&.d>-”QŸä2jÎõáÉk *£æƒ \€2jÐu‡UyàU¥©jÂÅíz«R§ô ¨J[r¾J¸Uا…ð“\ΰQ øI¨ç×…g’‡@j›‡m÷­ùÃ}äÁ,ls¬Êöt#yÜ.ãòpÊ´9‡T+X••&Ã÷Úè{ЊVeÃY•°ß!´ÑæDFÚ³°æ©Ö*áÛžï“<ø¨Ûw«o\6ýMªR•Oáyä¿@Qåèù/þwY9 ]VX{Þ0Våu—•ÓB—•“Üe…1Ìâ.+'¡ËÊwØœï§óà$Ĥ¢¦ '¡Ë Ÿ²Â-›«.+§….+'¹Ë ¿æI/qÚeåòÏ@þ9‡ü3\°´¯2í²Â{̸¹«.+§….+'¹Ë ·l¢F%'¡ËÊ=’ãä”cÛœÞn&ŸvY¹‡<'§Ûæt¸oÃî#Gä)ç„=ÉÓAä´ËÊ=äW9äoÛD]VNB—Ö¶i8ÛæªËÊi¡ËÊIî²Ây‰£.+'¡Ë ¯mNÛÄ]VN ]VNr—Fòq—•“Ðe…=a5“ ]V@×ýä¨Ê>¨= g¬ÇË *KÏæÏÍŸ+œÉ¿ççN5ÊtE=dÎ¥pÒ¶±œmc£3§…þ6'¹¿ çtŠúÛœ„þ6ü†U܆‰X´?9kþ‡_ó÷¤UÙô§W•ÂI·å\ܳäaÑþæ¬ùß­”8¡)ïAÙ«º:…S¹Ä\@MC@í’~sr~;ÁKìjæ…xUé8Uw:-t:É…¸ rÔYè$tb7¬á6ìUg¡ÓBg¡“ÜYˆ‹Öžt:¥…xÿ|Ãùçç‰; orÈ!2BZ•zˆW)œLYáÂ÷Súæý_βùÇ/¯mS…²Êü²–WÙÿuU:-ôt:É=XÛ¦!m›´§»l¸ôëžN§…žN'¹§kÏ{Ϊ¼êéÄ.¸÷t:-ôt:É=˜š‘¸§ÓIèéÄ»û8Ûæª§Ói¡§ÓIîéÄIÞ芎^÷tâÓq9É_õt:-ôt:É=8òŽ–|ÚӉ߰šÛ°qO§ÓBO§“ÜÓ‰#o)U‰{:±ægÛ\÷t:-ôt:É=ØeCצ=ØeÃù*¯{:z:äžN|"´¥¡¯{:ñä¹5ÕÓé´ÐÓé$÷tb=fZ‘A䤧k˜yÎ0»êétZèét’{:±Ë¦¦×|ÒÓ‰÷Ïs…W=N =NrO'޼VtÖGÒÓ‰Õó5çú¸êétZèét’{:±ÚF“³´§ÓÉÿtÎQ•ZP•ƇTÚÓ‰%Ïùm®{:z:äžNì²!ýó¨§Ó5#tÎQ•ú] _U$ù¤§ï·áRV®z:z:äžN,yÍ¿îéÄ_F¸5ÕÓé´ÐÓé$÷tââ°Q‹˜“ÐÓ‰7̸›ÔUO§ÓBO§“ÜÓ‰ "פa–ötº£È«uQåh›j{³äÓžN÷Hâ2UNX§zãý6Þ1‰×=îhPÁŽ«r6lu¾YòiO§;$ßÀŽkr6l#nXJòuÑ80‰›û6l;®ÉÙ°ÍæVòvX7hô¼ ÛÀŽkr6l³½‘|UØ:4*iîÛ° ì¸&gÃ6o7’7ýšo œ×Ü·aˆ49Á…fë†E}Ìî‘GÏûÍ­äQï¾{ÈC;,ŸÓMË?òäMCFFj[BR¨”ü6y7<-4<Éo"ÞCò¬|Nš–æoR¾fм®ÞÖñÐ&ÅçtYñ¬äãÆƒW­À¬è€ÿ¸«°ÑC›ŸÓeÅÞHwM¼‡| äÛò-OÞiRòÊ•pÂ<Ïc64]<-´|<É-o"[>ÞCܼ>ÇKìO<ù¨åãIhùÈ“ç–ÍUËÇÓBËÇ“Üò‘Ñ6qËÇ“Ðò‘íéDKþªåc8/4<Ë'xÿßxð,4<ù3×xð,4écvù3?ç?KäkZò×}ÌXò¡ØYècv^ècv–û˜ÝH>ícvù¡ŸÕy¡›ÖYî¦Å’Ý´ÎB7-VÛ8NÛ\uÓ:/tÓ:ËÝ´(òI7­³ÐM‹‘|\F}ºiºiånZ ù¸›ÖYè¦uù ÿ“Cþ‡%wÓ: Ý´¸euÓ: Ý´Î Ý´Îr7-nÙDÝ´ÎB7­;$¿Ëj—c˜í¶‚yà%ù´!K>d:…†Tç…†Tg¹!C>nHuRñä5G>nHu^hHu–Rqä=e˜á†T¼ªTœªŒRRå†Tܲ‰R…†T,ùбç¯RRå†T̆R…†T¬¶i8mR¢Þçèù=¯çãžNg¡§G>êétz:z:åžN ù¸§ÓYèéÄ«JéJµÇ9/4ç9ËÍy¸6jÎsšó°’/™ËHÔœçÈçÿæÉG-bÎB‹˜;©¨‹C޶9ðÚ&nsZİ×@îZÄ´0ïmβi׬IWߟ….+¬ª¬™esÝeå¼Ðeå,wY¡É_5*9 ]Vî!ÆI›cÛ´ÛÉã.+÷]׿¨ÊöM º¬œ….+÷¯Q›ãtj÷­ùÃ}äA×µ9ª²ýæNQ£’³Ð¨„w:5œÓ)nTr^hTr–•°Ë†Òó¸QÉ=’‡ë›ã=hõË7*¹ƒü7,Úïœ5ÿÍ;ZãJä³P‰Ìž°š»Œ\U"Ÿ*‘Ïr%2·æ=íhM+‘Ù5ï{þºù¼P‰|–+‘9Û¦¦î°¸™·m,gÛØ¨œö¼PÌ{–‹y¹ÈHTÌ{ŠyÙˈeìùëbÞóB1ïY.æåý6š:¤Òb^6¬Ã]¯‹yÏ Å¼g¹˜—”üu1ïY(æå¯Ž»º¨"õ¼P{–ëa¹›TíIó ­‡e/#Š9¤®ëaÏ õ°g¹–s}Dõ°g¡–Õóšó\ÕÞêaÏr=,C>®‡= õ°œ>ª‡=sõ°àlìr|•Ý/wÂ^•”ž…’RÞoÓp~›&Êæ=/äŸå\bζQ”mƒs‰ù8,·l®r‰Ï ¹Äg9—ø6ò(—˜'_qäã\âóB.ñYÎ%¾‰<Î%¾GòpjrnRÍÛäq.ñáûÎ÷&ÇÎh턌VŽ|”ÑÚ ­ÝBFk'g´’䯓B;!£•&•Ú ­ÝBFk'g´ÞJ>Éh½‡üÈŸsÈŸ%ò5-ùëŒV–|H 턌Ön!£µ“3Zo$Ÿf´ÞA~È)í2Z;9£•%2Z;!£•Õ6ŽÓ6W­ÝBFk'g´R䓌ÖNÈhe$g}tBFk·ÑÚÉ­ ù8£µ2Zï!ÿärÈÿ°äãŒÖNÈhå–M”ÑÚ ­ÝBFk'g´rË&Êh턌Ö;$¿Ëj—c˜í¶‚yà%ù4£•%"#ÑÚ-d´vrF+C>Îh턌Vž¼æÈÇ­ÝBFk'g´rä=e˜áŒV^U*NUÆ­ÝBFk'g´rË&Êh턌V–|ÅØó×­ÝBFk'g´26Îh턌VVÛ4œ¶¹Êhí2Z;9£•#e´vBF+G>Êh턌Ön!£µ“3ZòqFk'd´òªÒpª2Îhí2Z;9£•;a£ŒÖNÈhe%_2—‘ëŒÖn!£µ“3Z9òQFk'd´ÞqH@]r´Í×6qFk'd´²×@î{ÑÚ-d´vrF+cÇiZÑʪʚY6×­ÝBFk'g´Ò䯒B;!£õò`œ´9¶M»½‘<Îh½‡<èº6GU¶oùÑÚ ­÷¯Q›ãtj÷­ùÃ}äA×µ9ª²ýæNQFk'd´òN§†s:Å­ÝBFk'g´²Ë†Òó8£õÉÃõ¿Íñ´úÆeƒ3Zï ÿ ‹ö;gÍóŽÖ8£µ2ZÙVs—‘«ŒÖn!£µ“3Z¹5ïiGkšÑÊ®yÏØó×­ÝBFk'g´r¶MMÝaqF+oÛXζ‰3Z»…ŒÖNÎhå"#QFk'd´²—ËØó×­ÝBFk'g´ò~MRiF+Öá®×­ÝBFk'g´’’¿Îh턌Vþè¸k`œÑÚ-d´vrF+w“ª=i¤­ìeD1‡ÔuFk·ÑÚÉ­œë#Êh턌VVÏkÎ{p•ÑÚ-d´vrF+C>Îh턌VÎ?e´vBFk·ÑÚÉ­ô {•ÑÚ ­¼ß¦áü6qFk·ÑÚÉ­œm£(Ûg´òqXnÙ\e´v ­œÑzy”ÑÊ“¯8òqFk·ÑÚÉ­7‘Ç­÷H®BMÎMªy»‘<Îh½#|ßÀùÞä˜ÍA"OnØ4£õÉÃm¢É¹Œ4ç%3Zï!·‰&ç2Òè›%Ÿf´ÞAÞƒ®ó9ªÒ¯yÛ&J 턌Vþ&ÅÅa¯2Z»…ŒÖNÎh½<Êh½‡ü#Ì!ÿÈ“’B;!£•%o8òW­ÝBFk'g´ÞDg´ÞCþÈ?çæm›(£µ2Zï°*=dûøœd!ÿÁJ>N 턌VöÎݤ®3Z»…ŒÖNÎh½‰<Îh½‡| äÛò-O>J 턌V–|͹û®2Z»…ŒÖNÎh½‰<Îh½‡ü ÈŸrÈŸxòQFk'd´òä¹eõÿÖÅëç8úÿ¸öõ“'ðã×ñòW¸2MŸŸ{Òé¢À?ÿ~&Oõo9HþüÔ¤ð¼ÿÛùMù@~ ¤bòá„8E~Œþ䃞ÿßË!ÿÆ’Ø3äË*…“’÷ ypïÿOyC^ß·lô]Ëf7ƒ†¿n'p‚¼m*š¼‚àùþ9ŠüCQ†\#ä]y'-šü ‰R8A^Óäcø~søëvò'$?¥iaòÃ÷&S8&?Dºiò«bž¸£É÷ÝNàÔšŸ¾‡%OÀ ÉWEÃI~Öó%èù2GÏ—÷éùò>=_‚ž/sô|yŸž/ïÓó%èù2GÏ—¬žï¹—fIÏ—÷éùòä9ä÷-›Ã}ËæäO9äO÷‘?ÝEÞ†µ9ÖJ¶Ò´¶) þn¥ [1z¾Ð³ª´°amΆµÂ†­kFòT.X~ÃÚbÜ2ˆ¼*<ä]ØG ÿ˜CþQü˜MIîq§$?úm(ÉCj¢}òO9äŸ$ó€\6c"N 'ÈOß'Ö|£ü3Î!ÿ,éyVò.…“’·œäaÍï€ü.‡ü.CÛXÈâ8E~\u„äuü;Ï!ÿΑ‡tJ^Á?pD^éB“‡TU8pûØ ÿ‘CþCR•Š‘¼F£“æ£çUÚ.#6ç2b…ËH­I“øa(Iáˆ|ÿ”¢–MÿßðÈ·9ä[IU6Œä+4:¹æÉk0ÌìÿÊ!ÿ%i–¼Oá·mØÙº°`ÛØÛÆJ¶c¬J ÉBö$Ýa+†|8a¿üwùoIU27©²>NJ¾âl ÿ äsÈÿæ,›ºJáyäR.çrÂ!U—ŒªÔxtŠ¼ÖŒël7)—s“royÆc¦!1Ò‰7)ÃØófÞ°NX—sº÷ ɇ¤P÷.Ižs:Á–q{ ¿Ï!¿Ï‘|X6{IòŒUYBš–ƒ;¬Ë¹ÃºƒtÂzÆoSèNJÞqî>Xuà1s93w¼ü„žÂIò–!¦‘ÃÌåfN0ÌjÃigR8¹l8U ¥F 3—c˜¹ÏÛÉÇËæS"ï8m†™Ë1Ìœ`˜ÕÊ1'¬R)üïËfX7 y0\Žyà$ó@Õ‹’ÿ¾Ùžò|áÝ€üOùÉõA’èÏý*…còýüÐÖ… ¶Ë±mܯ¤mÛFA)±“l‡,›3?ç?Kþyæ Ùû¿ÉÝ̃@þ_ùBLʰö¼Ká”=?ŽN·õá 79äÍí1©¢†ÊD€ß múU¦„u\NXÇYɶaÈ[«R8y“b¬JÝ6D]N4Ð9é2¢im£!—رÑÀ‡KëbÃÖsÙÅãÇK±)‡¿’U÷þ=x`‹‚"@/ëï²(ÞŠ89&Ìl^’‹}O~îõñøò]è$4:ÅQ»ùMŠâõ"ˆù¯åA $;€ÈA컼¾4 ÿ}vd ð-Œ¾½}Šâàï%_»N‘ŸUÄðÔ' ò™Ãñ“^¨«bj>Fnëÿ‚Ñ¿þöŠý?¬S8d´¹èù±³v}üØ¿—M:ÿuÓ&AÄ»«1”CJþ¢"žç Ææ‘ g ÷A•åeô§§9Íó´Í¿ü=þ2ß6/Ÿ9ðÀO9ð3ÀÏ9ðà]üÞý5çÝ÷óšØì¿2àÇÙ¹µ9îràoËï¾ÏƒèŽ9¢û˜ÃÅ›uÈäÿzáð×-ðõK6L_ràoϘ¸ç^I<>3êTÚs¯ æ§Þ‰§Hþp÷ûáÇ;#¤§rX¤Ò+†ËSXEÀS»e; IÅÍ‘pÉœÚ-›ShU4sÂÁîOæÔîæÔ᱌£áˆ›cmÞ?å’§ê1H²Æœx5^®%;+}KéóYEñ§ýË_ š¦Náä±:žöéÆ\ø­¶ *ì| ÞÝg î–mAüî¶p>Àwßý‘¼®ëN[$Œèbò·Z¢ª¨`qýÉÝ-[¢Ôü¸:…KçðT ƒ´Ä>låD b¢÷½Õªºê x–U»[¶j‰]½”\2^ß·ªø<-mø÷­Ÿ¢ÍûþŠ{>_ãq2üõ7ø°è/þýIß_#ü¯&îpµ/õ ×"|zêÐ iýBOÖì¥ÀÇ=œ_‡ýG±~#Ȯþ:êÝô|(ÌìZ‹à/ŸÄùµ"LÜ~+ Ç6EัÅf;µ»å¼H›„ãrf1<İ/«ù)WlvÓSœ·g³ ðWa÷b³ŸžÚÓæÍf#Ìõÿ áƒP=(òŸ·“—Í'KþOËæó®eÓ_q—È“.èpòï¿hgíÃTíA¸ßƒn_?ûÓ4ú‰ÙÖëG~ôõç2\ЈëÓ2ü$Àÿ[†ÿÇÃ÷?‹ð½`¢^á‡aâ6‹ð/ánqz^„Ÿžyø÷~þ-¬ºßnNv2¼ÀÏëEøY¸–uÛEx'Ü«ÔòªSªÛîŠÃ?pð­`©l–áªÛ/¾Fß¿-Ã…;åa½?÷õ½ÿúm»ÿnyøÏaþ#\ˆÏËäÏùË¢û· Ü㎲P8+ú!¶¢[Ñá4xz/ŽoÔY4$NÑ‘Ô>~}‡#8¢¢§¦Ki¸môõX? ^º+Ž{ªyÂÃÐ|ZÓçeäˆ<Îð#çKß]…\îÁÒ_‚Ów¯ª¹J.‚#AhåU°(ŽŸô\3·‘‡ø6àGÁ5vìa™VÓ®6Ç£hw\à\8ýw‡¶«4ÛâcÏ„¨W´¯õÊãð[|MWÒG.ÉÓ*æÊ¡¿f]àÈ*­¦6OÄM,R¢¯<ÜM÷é½p;ò£×÷êQýÇð£_lí#À…Ñ•àüèŸý?½VÓÚ´é6Ñ“Fà(ÍTMºI€{ÚÕÕ ·Ìèãms™<ÀÓ<ÑáÛmnE†×#¸ÞÝÿïõÇ £'zN;.}ðªÏ%²Ÿ›—âQÑWÚ±­JÇšãî<Ÿ¡ÚÑ¢ ÕŽ^qŽ‹59(ŒÃäÓÈA/¹)Ñ35ôW?‹FÇM$/>A) ½Ü1üõWÑÚæõW³ª2†&[äå…H˜Há{ò©1Š—Íæõ¾y½oÞ_ï›÷WnÞW…· Xàôô.J>Œþ*xË Øè†°™ý› øªø±xâšN ØpÔÃ"t_FÇ«ï‰Õ4˜<êÚ“lˆ5è:W#òyk{߯Ú.o¬­0ï»ûæ}wß¼ïî›÷°±&5Nf4…ÓÓ»(ù0úNð/`=ÝDÍõ&h.W-j®7AÀã§ÛÔp÷™î>SãžyßÝ7ï»Ûç]AÿÏœ8 Ÿ6†WÇâ†ÝÝ·awËvÁ„á&®25£ik‡à„¦­8M[7)œš¸±ƒ1q%°AÔd¡¢ÎCEU{D>mŠÝ¿ûèê‘'îí¾‰{[ž8É4úá'nú<0yD6NLÜØæ†ÚqÁÑÄ ‘ãÉöüFVeU¡ÑqšæÔñoÅÒV¾áTåFR•ž¥*ùa~~ßûæç—›ŸÕŸæç—›ŸBÇx³\pGý² u˜Å7qˆü†ÛXó8»±öâô†wÿ¦W1Ó;TªÔÌÕ¯ VÌôŽ….”Þ’öK›Â©í7~f75x¥p¤7GÝNÏOôîšwå)¿ÂXTa¿»»Pﮃ_AKï>ÂÓ¶¢¡gm4:¾»MŸ”G®¸þ,1N¬ÍHB†ßü—‘ WjÇ›_YMŸªªBpjó—ŽNoWAB†YcVQEo?êÝqÑ©½ËÆŸùwÿ7–c6ÖœDÁ‰5ú}¨5‡hœÝXÄ–iJ<ºÅŽ’¹»Ñý KW³±j…àÄÆ"=áÓ)œ|wù;t 'ö®&+úÁ!òÈ£Õq)Ë#̬HtFX6•¥EW‚Ÿ÷×ËftÓ Á {fÜq¸âtØK)œ0/Ñ^K”©¹^Ñ¡ê˪£¶ ¸Jk›Òï¾JÞ½"ßý ]%ï^-¼û/6aæÑÛSñX3šÖUÕÒ9à” ¶¦5­ö6…Sž"¥ÉûK¿šNÜ_ìTŠšv…Êh="ß cLñVÑŽ ð–Ïû<­ïp€g ày8/àô“B±€ùj!à?­o8_hh–vo€¶BÓ0åS8µÇ5#àz®VpBÀÍt䤟=*Œ5‘¯6(†7F¨dü´¼½ooï[ÁÛûVðvyo… ä«mÎ øIpþÞx7´iêù#8!`Ãĵó)œ°n#`à„€ÝØ}ûª°fn/‘¯Ò§”-Ã`~|=§Ã}+øpß >Ü·‚ˇÜAXÁ@>ý*ïßV0ÀOAÀçû|¾OÀçû|^VgAÀ@¾:çà'¾Zöóu_<™CÎÚ†Qp5 püM®brð㲸íë×âI3-Y&s½~MûƒòO“1ûØP¾žÁ<ž‹¾"ø=å¦Û|’é;¬­¹Ú<‚'ï>daLÙ®³hÇ‹M…GO$4|ÂØ¥•C*túOjï 훊*!îOîà¡ðkgÚØ‚b*þY'ÿ®õnîÕò¹Þ.OÜV˜¸-?qsôĈ8š¸Þ0SôÄ5 ÃñÄù)ÁO\=µFp8Á÷¸‰U¤Úu³ŽÏÞK¾a{<:ÚãýÚr¤ÚuuÙ 8V»/Á9;+M>®'îqÍOÀ‰‰«&ƒž˜8…F'voÏgn¡ ¹í^Ý¸Šœ8kJ G»×5ª"ÏK£áàh÷ªr‚£‰ëW£Gp…Sûr*Ù$Î8ÈõØ î_;fzázºãÝýõŸÙ—a[ï8÷Á¸} 9½Þ:LíËþ\‘Ók„l"òØ}0~‡h½Ü»?¹Þ2vožK€SÓÛ0»7¢{‡ÈÝ;l€†€#÷AI¶³:Ý×6À µ[YúšR;…àØ} *zzk]£'pÛ¨i÷Ž?0Ó pqz9Ók rö Mïøí:êT…käáGPÎÞ1·Pؽ~zõÅ’DÓk,˜‚vz•UVÑ×·œ;½CSDúšb”Ãä ¼·‚GßÇú LïáOÓ{|Y´v/ü §¬]2¦<ü *Àñ/§.BkÏÝd"8aíN¥•é¼+mßU/®-4ï¾³Á‘ ïsÑÚ£×”±Åæð”Ì{Ý@@ü¸_ž8A·œ:{knâ@s8¡œ5sQFc8áºoÈû¥r¥Aay–äÄUn9N™Vt°Ì;¸¢8ž¸úøN&N•ÕlsË'8}N:ÿzâø};åõÔDï¸|àhâJ)—@ŽZæý@Oܘ¹jÉû¥jä!8š¸áÈ!w\e¬ApÂ;•Kl»Ô n Ðþã˜u¿¬R8«˜8 H>‚ãûÿt=Åv¬ž¿¼à k—Œ“”.\:Wô5¥EìŽOBPCò\€$‹Ëi7ÆX×ãÌ–¸x¶ëŒéõèh×üôºJ‘Ó«CubÇá Žv\’³"8òÚ^dèXŠ<Ú~ý(d¬¿ãÔޝ)¥fü±¢œÞ¦zÓL¨Ö­àq¸8½§e·ÞIä$ºõµkÀ¡zZó神<‚ãóÒ): fÃEáÄ»õjwq2l>ö ‚£EP_Ì,ì5“'Îˉü>u5Â`'µÉǪ¿d ã%àX9ûɹ„6¬kTƒàX9O_€Æçe _Ãàxâìx¿ÜœT2qý?<þ‘6¢à“7Nn,Úï]¾¾¿ÏÅÈÃù>l…oÞïcêÚ0~Xóß{þ¼œ# 8ß§Âpâæ89­BÕ%¸ü-õû4õxk^ wƒï?ù}¾sÒFBNù÷A0‡j:<Ý›çÜál=:~Ù[C5†#÷A9ÝÝÐôÚÜFßÁkëh·^¿l*G~ßhŸõàêàßIÚˆ«§ê·õ·pƒøþSÚÈOŽS¾¬­Á)ïmíª’1$§¼µ´µ Ÿ'ŠáhhËø}‚AòÃ;åû«¹§ÝzÆa8ަhM9åÇà^ƒà?‰SÞ4ÕhË­§üÏŸœò?ËîƒAEüì…¬ ²rv,†iœp~ŸÉ#„àØª˘CpÿÙóái7%Mâ´UÝ?¬û`pIR§êp*Ïß(ˆàøT5—,ôTkùvøÙäË`cœÊ«¡¶àëñ).©h_¼0½/-7ð—btá1|/vT™Ÿú¹aƒá¿bÇÁWÍT]¾‹]ÃA‰xÒ%M æ‰Y¡ÖŽÍ׫Ã_Ä&kGÃq4ž4†9jÌq$Y6.Ô¶ëù)\û&+DÅ^« \ø|ág»¹<…¾<ücã¾>mÇÜÊG[xßÓöÏobÀ¤ðV×ó&ƒè§–*§7áMÞ`¡Œ°=ðƒ¨ÉºÁEr+ —>«øÙžùA.ÅR§³0È9‹»t[rýU*¦IˆŽÛe_àØÔdŽê”Æ‹àè󽽡F~Eb°ïý÷Ê£Ž“Ñ­Rxúêq§OÅ¢fá( ££¯¬sêù‹,yÍVJ*Zò¾iK¾v´™§êZ!8–¼ÑÌ÷;´"FGH3k¾íò»“^‘2Õ¶BpQÀÇ^-L1µ zç<Þ5(ýþN,ÁE ½3ÈOŸ1¾Ë;$@³ïîè.’C¶BpâÝé;ÄÐϬÆð½»7‹ïÞ.¿{+¼{Ço,¶B6š÷î¾ypÔTÛNŽß½[~wþsYŸ=³ÛG{Š`ºü™ðã" ù®Fß®‹wfte§J"÷þ†Ž>ç ©ti{z8²†¾I+âÓ´EÁ ðíšnŸ3啼ðîmƒß½ö{î݇Óàr”¡w/!vàíK^‘ï®ëÁéWç]°§»Þ=Àñ»_\MÄ»ÃIàí!ãÝοûAêêsß»Ÿøw7övßãä;‹àiç¡?½ûiùÝO»ÿ¼óïn¦Rüî5†8Þï“¿» _üðµ[0Sb~wz>ÀÞ3öûnS|2 UE]N…îöÈg0¦¥£^á'ʈøN¸põ'Ëq.¬ÆÆ=¤Î¸K›67ª4ÇéÛê¾{8¾òKË4¨5î™Õ4†”cS‚?+ÀwB/öÞ‚c9*®‰¾‚RÇÇr¬”]”#Àw‚Å×[ë¼+®ùäѸÛ!9Öš”cí-† ßÎþìï ,ÇškÐJÞܽ¡=ãè¹öÌ‹ß} [–c/-®Mã͵ï³Å¹øN°p‡ÝÏ4ÙQ—Odr„ÜÌwèòVÃÕäóÊüS!×$ÀEÝóÊs4œU˜,€»Ôަaôc(Ypq_Ž #Çýàî€öŒö4ÇújÏÔÚ3 Çþ>ÀéðP¼p‡ûýÔÌ\‡0k€K{æøX|6ÇÒ/Íu€£»ÉC1îxÏ\ß:ZÅtD2š´BÆÁ‰®›“ …}é…®ß:¦O äÛÄYaøV0°·¿Â+NV"zÅ~ +'ÚÎ^àHB¶¾T[½`‡{Â Ž•ŽJ.ƒ|þ>‹ºFpÄQ›Ë—1GÈ85‹u<×_ôÉ2sL?™XØð}×ßàJ›És“^SŠÿ—veë­³¼ú|?Ͻú3<&’4C“ºm–{ÿ²=Ä£Á >ÙÿÚ_ü–BIØÔ xÈñ¹+}ìÕ¶9®îåhs¨¿ãàkì#N݈£®üÝãX´jÐí#Çýýr´‚¯ aA^ã%®ÄÀÉùèÕ19nî–£{†o'Œõ-6€àè—€â9‚îÙ¹±ÞÝ˱H‹ Á‰!Õ”Vyöáݺþ¢Õ6×z÷T †ã™frz¦eÎÊ8æ˜{g¿Mò«‰¯ºÛ;¤+NôEgŒU.*àa±q¯‹׋JªÒZ…áç0©ÑL´ ÍÑÞJ^…ª«/äà¡æKŒ½åŠæ.ÀlW)M{f)Ã1/nÏB†»›Õ<„#޹1C‰Ѫø!Œw×Uî¯kÍÌ=ؾˆcæjpq´U6¬XÉxuðc’’Æ+>Ìȱ4·Ƨ­?÷å{TËôróñ)©²*Ã9øuf«¸Ê}«ìš)ôÍŸδªH«–ªå9êÂfþo–ª)¬oO1k&»UÉÇÚ”©Q!õ¤= »ÜïV 7×LÓÒ*.íU<åäØR,©±Vyåêá~Á¤_ß'Çv°µ3þd¨h£!¨äeÅ®ëî ”â¨[›/ᨠ&;Öe®àÔâà«”Wè×±ää¨n^HŽÊ­k€‡¥ Ž™*s¯ßÂÊØ)Ø;V‡ç­¦Wôšq¯îœ>bR•2*Cðí.¬mµ¿Ýsr¼e°"Í—» I€Ó'I’c«Ó,‚v¡+ëïêÜ|,Jb¬»-$UYç:!ÇTå¶BðÀ—ÞÎG Öë‘åXª[¦6>IfƆð°ˆÏÑîYÿ9†u‰\¸üé]ØgRr¿6Ú½j pÏ”E‘…pbW¿½‘ô-œ<¸yOÚ=ü?¬MQè’ëÒ=î ð°hƒ´fJZ_oÂ<…ʼÂÇ,¯È³‚ÒÚ"xX`€ç˜+ãB¢ÝXã"{©—âÏÚ=cqEt*-*“ì›"/Ë Ã¿ÑË*`Öüòg×[9­Fˆ&x8kU_E„èâswªü·AQù¥—ŽÎÉÑØŒ<+˜îÎ&­óúQ=ïà«¿Py˜Q ׯÛä'ë¿zerno?d”|8&ç6T¿î¡‘=×È^hdO#›óØÈæÌ42ü@7p©‘ï¶¿«ÓâZ¨Fü}õ&ÉGâa³ª[YûïÉËù'‘[ß__¦%º L=~µŽ¢´9Ž{cï¹’9î%ŽÝf¶'iÝàïç‘ü;7Šý y€#ò-¸w´Ò„ð®‹ïŸLßàØpcà xÈ~D»Ø ÂEއÍÈñ°á¥}Ú_vLOú˜žœš*ig­ï/Éî8×:=¡èÁ‚¸QÞ6r:2‚h-c\B|õ°bÅ.îâSZ.vÖ̉[3'aÍœÎËFñ1Šéè˜ôàR;Íw½Gï^Y½{å–\c0«w¯œN±½æ»Þ£w¯¬Þe9ö²³z—åØ;ógõîõ½{eõ.G¾Èsn)«>«Ó®¼N{`8vúâz²›]JiÎ*»ëÃÊ.+|NÙ]ïQvWVÙ±]ÌïRvׇ•Ýøf˜ŸSv×{”Ý•UvKFñ3Šã¹ÁƒK]\›d} Í0LûÖ+²‹Ç6Pbúr±‹d‹1Òƒ·vôï†ë¢….Z®‹Vè¢]ÖE»¬‹öž.¶›Æ­‹ò–ÅtàTûXƒ¹-ëÆõ¤íJá6‘£¸eq÷ÇÁr˜Ù²8Ž-Å{¶¬yyËbÈœ"ßÑQ´¬ áòQ¡Ž5DZ8Ö1a¢\æxŽWŽãUàxå9fŠÜúûpÂ>wä9ŠG.Žc#ȱԳ›{8n`>òˆžã†Ÿ˹Åpr1•OsÛên$/G y€S“ /W=gE(d8¶;¸ØÅèâ×Å¡‹Bû,Äñ8©sgEŽãx†AÝaÀ=< í2)|Æ€»(p\ÏËfÚ9¦‹n¦ïéâçjìâ'S’qøé"À‰.ZÍ8ˆò1´¢³ÀÞŽw˜oGÎ|à”;`þðî«·o„€¥eâàaŸÛ‰ÖŸ‚gŒ®[ße£‹é;À Üöþ‰ëU¿ruw|ÆÙC#yÑãÈïù*¦Ëä÷1äÇê·\´Ù걋²=ÄtàÔé­/¼-vàüäš1BFò¬ò!oòå<ù†'_jó4oÜÈËÖ CàÔäÊf'À›\Ágl˜[e†é"À©.ªòf‰âspBºxš÷üŒ} ®ï¡ïiq‡á°¨ï¾ïE®žæý%o÷lxì†÷Çö½ºgÃû[¶áýq˺ö{vÃû»gÃûc7<®ïÊÚ{6¼¿G—u1–œè÷Œ¿{6¼?vÃcɧù=Þãä'Þß]Þß=Þ»á±s³2÷lx3“knÃû»gÃûc7<ŽüPCxvÃãÈW:»gÃû»gÃûc7<Ž|Zå÷lx+C!¸¤ø›±‹ò…ÓÅnËù»g¿œS*Õ=ûåß²ý’›….ïÙ/ÿîÙ/ÿØý’í{qÏA{Qß²ÎÍì~i“óæçûyÃ9ß8ê»nÏóûåä ¢˜=øÌ¶x뢼-2]8ÑÅ!±~Îù~ãˆ{bÀ«Øn#Gq÷ã8îyŽ©¿ÓÞ áŒóýF^v¾3äN7)s_ %|Îù>r÷^ŽcÃ&*Àçv©Gy—b8n9¦z6  àÔ$0šV$Êßnäåý‡!ߪ±\ÖÁspBW¶ºC?®‡´U>ãì»(:;¹.ž….V÷„æD¨Ú*Cð™Ðœ¤NEìõ/ËPÎÎ1Âþ{Yh©ƒ?ÔzéÅ­ÜZ—µ Ó:À©Ö3æzêáwfl]Ôo\ëuLëc¶fgž­‹Wr\ëMDë›÷½,Ú×Á©Ë6îÂ)Ó8»CûïÛ‡ß7Îã0À >„ðÇnËJŸ‰Ð»(‰\í².Úe]´÷t±U=·.Êš‹é"À©.þö#ñÆ‘¸p*½;‘£¨ß8Ž{£*ï09Ž-Å{"4näeõÈ8A¾àîÁJ­Bøœ‘8r•(DZŽàè&*Àç"4FŽb„ÇñÊs4}­ly“»ÞűŽâvÀql9ö¹22ÇæŽ˜²±ÍpÜœ¥Å”Ýal ‹I?Í;{näec›!ÚpÙÙ3§ú~W¨ÿãú¼4Ág|:cÅó×ÅßE[ÝsžˆØ²üóÄ|»‚¹¯ÛΦ¹•Î ¬›Û–õû9ù€ÿ«nÿòȨñ«4rˆiä 4’ÁW?ÐÈOL#?ROôøÕ/4òÓÈ/߈Nn†p÷Ý­‘áMº8ÑH¢ ‘ 4²‰idsW#-•ýLOörOzøé°»ýË‹Íñ{²ŸéÉ^î ×H»žn_­^’÷sßÈP(…h¤3¸F¼ýêúí¾J*kúj‡OÆ)—•c”ƒÿûÝM¾êŽ6½¦?‘?Œð ßÄßpäKc{§"Ÿ*;–²upD¾í}ÿèʼnüa„Ÿü9†ü™%_×à˜|–Žö”ƒ’×ýyþDþ0Âk _ǯÙiSÙþõkDÞTåX9ÇÁ ò&cÈXX«+¿Æ¿²äoOµâ9_AÑ!'ȧ†!Åd×+ äm yË/Ø¢Ï: ȫĚÌIÞòäU_yêDþ0î°âÖ1 vÍ-Ø–½*sJòªÌ Â)É÷µ¹Nä#|äw1äwùnÉ’Þx+C8¥mrËh›ñý™õúÈÆÿdÉw'Iм÷άƒcòÝé$ßý0ÂA×­cTåúü8ù.X+„G’u±ŽÑ6ë«D¾ %ïtÝú*ïá'ò‡Þù&†|ó0ù.•Ö†ð8ò/«±õ¡†ÜƒäœÐ6ÊÒ ÖŽùºN©Ê>ÝãDþpƒ¿Áù³Ã¾ñ;¬6ô››|¬ŸçàXò]T)ùî‡ü]Cë:‚¼ÇÓ¦²ô´)`“8¹Iin“n “v3ç· ¿ÃÚœ4‰3åõ¶ÈëŠ!?ºû»ÊF·Ö?ä‘7U–SæA™©±êŽƒ“’WœäÇóôa=¶~XGwpD¾]W)ù"_-rpÊ<È3Æ<£ºÚ\#ù˜{à¬Òºâ¬Ê*„S’O¹9FéáÈÇÿæµÍð²q ´6 á”ä-£*Ó±´cW0ðÖúP:ðAòŽç|™’ÇÀö:VSupRòÜ‚…;¾ù÷òï ùî%§‚”|QAÙ6§NRÜ1ÐÀ1ðó4¶>Tø{¼ƒcU™RÛUŒ÷NI>çvØñ5¾îݯ[ë—˜{©y{¾ª Fϧ&„Sä Fòj|7«+½{ký+FU~ñª²rQ±yP¦ã-‚ƒS~›Œ™óÙX¤«ç8’Ñ6_Œ¶éŽÉ9¥mtçú_Uspʶ1cÛŒoã­k0 뫲¬Ê<£#‰­Š±œ›ƒSÓ†ó(ðÔ0îuÌ´©×Òœ'm›çcõ$ÿäßbÈ¿±Ó&5´m£Ó ¶H€Ss¾ä|•%À·@~C~ËO›¢"§M™j°ç)ù ÿCþãaò¦¨@Û<’üÈcÈ—-Øã2òpü¯c¼õU<} ,³†ü^ºÖ1ôµŽs:œ$ÏÍy°.(j£çU-x45ç»ÄsG^ÐóC5¦ùÇsœŠ9*á˜ôœ×&7!œôUÎW9Â5è:£*µ *µ¢ýó ^¡qpJÏÜI â.4è:£*µ *&̓öxö¼Þ,ºÊÔ ëtŒªÔ‚ªÌ²œÓ20çµätâNR NRtŽQ•ZP•šôUv{ÀŠÓ»E7àtŽQ•z/Ïs’¼ÉÀ¦Õ‚ªL+Ϊ¬`Ú€ºÐ1ÚF ÚFk†|§ -iÍÍy8ÃÚtl½ý×ãäŸauªÉ¸Mávàq¡‰9èº.[°Çeäa‹¬cvØú*Hž¾Ê ëÛ,!÷2u̵NÝä32Ò)¬oÃ/XË-X¿¾M=Sߦ–ëÛpN'¯¾M-Ô·aϰ%,4­oSÏÔ·©åú6Îù°¾Í‚ió ºî;FU~oy/1¹Iµö|¦ÀÍû-¨JÃ]ëí—Ç©gŠóÔrq޼Wœ§Šóðs¾äæ¼_œ§ž)ÎSËÅy˜9ïç©…â<¬a¦¹Û@¸úÙ­ÿì#È;8ö˜Ô=¬MŠ.r.„“V¥á¬ÊqÖý€è~b$ÿÃK¾¬*Ò$.Û­7ádü¼áâçGò¿°â~cì/¿`ÓTkÊ{¶ª®áT,1w'¥áNêv™ß˜M근ͤ¬Ê°¦Ó‚Mê §‰kÌaäºâïa½šNµPÓ‰ó7çAÓ^áw9^ùc **Òé¤Ê ®ï¯ß’¾äüóãÀ]3 ŸÅÏ„›Ò$îÞa†¨€“±Ü 8„eþƒqÿ3mþñÓ¦RŒ¶É]Zå?~ÚtÓƒMlðŠqÕ3¥Àj¹çtòJÕB)0>4‘“ü¤X=S ¬–K±æAIša)0vÎsñóÓR`õL)°Z.ÆFqÓÇÀ°k+îZgR ¬ž)VË¥ÀX“¸âìùI)0þZ‡ þŸ”«gJÕr)0&[Ç/V ¥Àøp.êcR ¬ž)VË¥À8É{¥Àj¡¿`9ÉOJÕ3¥Àj¹GÞÒ’KñªRsªÒ/VÏ”«åR`yC-X\ Œ5Ì8«rZ ¬ž)VË¥ÀØiCge†¥ÀØiù¸§¥Àê™R`µ\ Œâ6t÷´Ož›ó“R`õL)°Z.Æ:Zµ"¯ïƒR`¬I\q&ñ¤X=S ¬–K±Ó¦ ç|P Œ¿ÖáRJ'¥Àê™R`µ\ Œ#¯o”cõ|Á9&¥Àê™R`µ\ ŒÕ6š4ÂR` 24è:£*µ *³ŒÜ¤ÂR`,yÎo3-VÏ”«åR`ì´!¯uP)° /tŽQ•z/Ïs’|P ŒógUNJÕ3¥Àj¹K^3ä§¥Àøc 7ç'¥Àê™R`µ\ Œs}蔌ŸK-H£ÎA×å1ª2_ ÇÀ”¶çƒR` Ž9\¤æ1÷°¹éTVeX lAz]º.Q•ùöaɇ¥À–Hî"ó˜«ÌüƒŸó•eâm¦¥ÀTœÈA]ä1Ú&¿>,ù°ØÉ—°âʘ[Š –’|‘”ìùrÙ‚-aÅ•1 ¶\?JÞtóµ·`KXqeÌ‚-·’ÏS8Y¹lÁ–°âʘ[~kç| w‘å²[Âu^sX]°¨üÝÉÃ¥Rs'Uéùò¸Œ<èº2FU–×§M™´&ÜI• U%Ü¿—1×÷¥~XòºªÜ´Ñ‹ÈW ¨«=_­øÖ«šd"C’W%† s&±«šŠºŠÑóÕúQò¨äãòpµQÅÜŒT/<ù¬$/Ô “B,q%ÝŒdù̯WYÏÔ«¬åz•‘Çõ*—‡ØÂ*&4±zãUÁ¤×MëU.¸ ¬ @MSߦúd%ï׫œT3\mTŸ‹RJ+(PSÅÔ·©Î’ÇÅ6—¿ùK ù OÞjRòʦ°Ã<ÎÝ×Õê¬g*…Ör¥Ð‡ÈãJ¡KȃºŠqqW5OÞ«Z •ByòÜ´™T ­g*…Ör¥PFÛø•Bk¡R([M‹–ü¤Rh{hfêU6r½ÊÞ~Å׫l„z• o¸z•P¯²™©WÙÈõ*ò~½ÊF¨WÉ‘÷#P¯²™©WÙÈõ*ò~½ÊF¨WÉ’wY™ W¯òÿCþKÞ/<Ø…9ò^áÁF(<ØÌläƒܴñ 6BáAVò®ð`Ãü[çËß5rù;’üÓ¤‚\#”¿£ÉO*È5Bù»f¦ü]#—¿{”|Pþn ù+¿Æ¿Jä ZòÓòw,yWA®Êß53åï¹ü݃äÃòw ÈweК™"l\„%5B6~ÁrªrR„­™)ÂÖÈEØ(òA¶F(ÂÆHÞ/ÐEØš™"l\„!ïak„"lKÈÿùßò¿¼ä½"lP„mùXV»Ãl·Ìk)Û&¬cÆ’W%C~RǬ™©cÖÈuÌò~³F¨cÆ“×y¿ŽY3SǬ‘ë˜qæ¥6)\ÇŒÕ6º`´Í¤ŽY3SǬ‘ë˜q’¯(«×1ãU¥âT¥_Ǭ™©cÖÈu̸9ïÕ1k„:f,ùœ9ŒLë˜53uÌ¹Ž£mü:fPÇŒ#ïÕ1k¸:f ¨1zþÀëy¿X#”ãÈ{¥À¡X3S ¬‘K1äýR`P Œ×ó§ç3¯$T3Sª‘ Rq;¬Wª R±’O™“”WêÈÇÿæÉ{e‘¡,Ò‚öêâ£m޼¶ñË"5BY$ö ËÀ]Y¤ Œû%fÚ\V¬Iì—Ëh„ÊB¬ª,˜i3­,ÔÌTjäÊB4ùIqžF¨,´„=ŸÆèùt™žO—éùô|£çÓez>]¦çSÐóiŒžOY=ßrO³9=Ÿ.ÓóéÈcÈ—M›ã²iSù:†|½Œ|½ˆ¼kb¬‘l®im“@Ò‡‘lÎèù.‘ ,X³`°`‹‚‘¼{¶Àð Ö$ý’AäURAÜ…yò/1ä_É÷QÜ”äápJò½ß†’<Üþ›W ÿCþU2ÈiÓ‡%„p‚üP¯’˜ó¥òo@þ-†ü›¤çYÉÛNJÞp’‡9¿ò»ò»mc àù~Ö’×Nò{ ¿!¿çÈà :$¯çŸ8"¯t¢ÉM*O,¸}Ì'ÿŒ!ÿ)©JÅH^£ÖIó€Ñó 2p11‡#F†^ùç.þ?„#òíWŠš6í/3€_€ü%†üER•%#ùµNÎyFòîyYóä¿bÈIÚ†%_…ðÇìh]°mLŒmc$ÛÆ2V¥H'SKgØœ!ïvØo ÿCþ[R•ÌI*€“’Ï9ÛÈÿùßò¿1Ó*B<޼…MÊÆlRVØ¤Š”Q•·N‘ךq}€mcá$ecNRöC"ÏxÌ4DuZñ$•1ö|6.X ;¬Ùaí>Bò.¢Õî%ÉsN'X2öä1ä1’wÓæ Iž±*Sˆ1³p†µ1gX{”vØŠñÛ@ v+aû št÷Á¬™ñ˜ÙÓãä» ôN’7 y0,f6Æ0³‚aVdœ¶w¬d˜eœª„T# †™1Ììùqòþ´9Kä-§m`àÀ0³1†™ ³BYf‡U*„ß?mºy’óÀƘV2T1+ùï‡íù.HúþäbÈÿH®’üs÷ÈjÇäŸÅèyë,Ø66ƶ±¿’¶alyÐV²mLÁmR0m®@þCþ*ùç™M*­²þ»Ï™ÿ€ü¿òÿ„;©Œµçm§ìù¾u‚¼¨Ûù&†|ÓÏ,s¡æê<’üÿ‹!ÿ'F,§ml'=fÌåB)¥6òY ùìñÛÀ¤€œP€? ç»G¶F8\¨Ù˜ 5k$«’!oŒ áä–±çÔ9±pkcîa­•ŽšÖó¢¸-{û|«8A¨ÊbÌÖyù|OV=e÷¯`Éì¿;ßw’Päè}õ&ÉGâyõÒ>ªsý¸TZòc••—÷ïäehþõHë"IÇg%^¾ß“סøWØÈ5lÄÕäp šÊÑ÷îö&áGmÇž$Éæ&ˆñ_ód¹ád#¦¿5ž׺ÿ>º:øZß>> I²øþNòft:E~TÝWghäÃñLOÔþz¢Â±·ƒAë_÷v1¯B8j¤·véñ1£v}ùÜ&¿·E:þë¡E:‚ŽªßUIÉßTÄëËx}´~a.’Ðß}VišŒð/€EÀ_ÇüŒõë6¾ø>þ>øÖïçx ð:Þ¼‰€o€ü&†üî3p§Ñ­¸>íbàÿˆ~ˆƒèN1¢û/êן«8ÿŒ!ÿ5>ºµþÚDÀWïíÞ0Ô¨|Ñí>㤃·_Ùà«¢Ž’ %'¶™¡€—dy­o)]9 "IÞa#~¿ÛÖ°!œÜñú8\3€sÔLSÎVß-3ÓvófjÝ´ã«|ðÝä•ÍC8m,0¢óÉ?j$vÅ(l—ŒÄݼ‘HŽ á’-Ø}uF.w5’µ§Í,„SdÞ`=jpꤴ&„Gœ»yƒ“Xev úrpÉ®ÜoUr®çü~«o_†{Ûå§ø9ü¾ÒâWOô±a̼؟_’¯·~~¹ÞN»ñ&÷Ø iõNÖè@À;1ì_ÇÃg²ú ͼçödÓ9Žéüìn3=82qŸ“A%†;q;ŠcÊŒÇÛ½ã¸6Éz;Ôæ<ë€c‡g0<D·.G9®m²Þ _qŽ˜õNhÄÁ7B#ûd}¾:ýíÙ³3­‡’ðV¨yEÁŸÛÝSaø§ íC²>S´¢ì½ïa#ω…ŒO~湬’õeøê‚¬7Â×óðµßÎ÷ücþ!Àóð£¿Îï\Ïõ·óp+ÌàŸdý;À¹ð#ï¼U6YŸ“2¯r ¿ à7Y7t#6ï+WãFLfJ çÏ Ç÷KòþÅù’¾'Ä©?É1ü‹o¤5©¤¯ž¸CÞ þâ'0ÓpÒ©©Íw¼¹8î×ÉnMgQ='}‘´õnÍwÑÁ÷›pF oU¯÷kôÃè`=¶ E­oøÖ‹>‡ ·ž£Ó“ß ­Ÿ¸Ö7rß7Ëú¾¤õ ßú}oÕ»Ùzb‡ˆS4$­<šôœtݾjÿôŽKÑ»Íà݉‡ŸÎ9¦¶¯Z9Vùh{pÒ4rl{b†F¸Xº2{À|ì†a›‚k¦‹{a·ÆÝáD¦Ò)îLÛŽâSåà„ñzk=0»‹¥1ÂÃk=¼k÷iWàÇÝGƘv¾ çcYõUÙ©³çXW̓‡‘ÝÓ,ÙÙwú­eö0ù¼È‚#òvxÚ›=Þxð0£»ƒ´³äOóäOy€ËäNò§eäÏ“÷§Í™%×´9/š6í{Ž<é›v;ÿá‹öâ> 8„_ÞéöÕKrÞö:Ô̲^½ð­¯ÎópA#®êyx-Àÿæá<üø> ?¾ ’_Ï¿„£Iý6 ¯ßx3oxø÷aþ-̺ßùÖ…Ö¯«YøU86ÛYx#œêÔü¬S¬Ûî’ã?rð­`©æá þ1ޤÇÕ,ü(Hþë{þõ-̺í,ü[¸ïË<üÂÃ޳ðá8~ïûUèû¿yÉÿ$oÓY8YÚÒí°§eà>sFø³o„;¸pEv|Ý'§j+ëBIû`Rd^?»2ØQÑC­ðv¾wT? .ÆMNªÆs÷j’¦·[Ï‹zá'ίö]¹èüî 0?…}Ïó1ïу#AhU)gœÎôX3‡™gÿ0ãà'Á¯wja˜âÓeëÓI4[npîò9ü»]`þmòy`®¾ŸhGñÄañ›| 'Ú.lÓJÆG„Ží)íGFm>î"rž ßðp;ÇÂAîÄ·^Ü|Ã'¡õŸŒoýfªÿd\h]™.´þ®}ÊC.ë$Ë xpŽû- ]ø>;x;«“•V† ©´ ÐwŽ‚gÕðÄ :%á†i½?*ω΃‡Ñ¯Ý[€ö‰ŒLðàVè{ÿ³ù±BëÇá«Ãz[ï.$Æ”ëóú=yQô´IM_& ¥+­\!x8>]ö%Eç²[u±»Kí— *šáM×zxéÒJ®¯´‡®iÚs«A­ã¢¤·‡tP´G+w ßü*Z×m~5«¨}xFÃ÷ïïD¬I?_=—mþ´Yo–ûfÙ¸o–û†÷§ñÊUju/ 98=¼³’w­ooygº¤œÎYŽ|»gù1xàÊN ØöpTÅ=EൎVÙ§ «,1yTs¶%Y «Óu¶@äãÖvÙÂÚÎ/¬­0î»eã¾[6î»eã¾Ö`¡B¼Ýˆ†pzxg%ïZß þଇӈ¨¹>ÍeóYÍõ!¸Ó—¼qòx­¶=yT,8IÝný!¸ÈgìZÿÜþ˸ìŸ!%lÇ+^ŽliwÇŸ"„“6d€†/!h)¨Ôôº4n[/ù@À­trcú–¦Irx±Ù#mØe&]f,÷Ͳqß<<î]Æ)‚G+F÷³ã‰QDžÞ'nDCøž¸Sƒ¸B1¶\^•ŽÎXígŠÑˆ¹ áÄÀ™” ‰jÑ…F­S v°å.hHÊ"„ãq×é°c…ºÒ2˜|´©a—™v™©±dÜwËÆ}÷ø¸+xÂÁ#ȇ…ÆûÙ1»`wËìn~ÁΘ0ÜÀåYÁhÚÂ"8¡isNÓe§®Ot&.Å­6ˆ,TTÉ*É‹ ‘‹¬·}ï]=òÀ},¸ù“L£~à†ç¦É-²Dpbàú²IÔŠ³Ž®»ölÏodUæ9jG¸dñRLMnQëkNU®%UéàQªÒ‘ÿÆçwÙøü.Ÿ_n|žîŸ_n|YÆ›e;ê—U¨Ý(>q‡È¯¹…µÎ ë ¯ëû¯0¼ŠÞ.ɧ`Ž~©°b†·Ï¢ôf—ïšN-¿þ±9\$·ã‘Þìu;=>^ß5ßwUQ~…>%CpÜwÝW5!ú®_AK}ïáa™ÚgWÙkŸÝTÿ¶rŵ{I†àÄÜô$”ñ‹ÿvB„ñ¥ÁñâWFÓ»ªÊœZü©¥3”“PÆÌŽ>$*§—Õw\³v(´®®|ßÅ…e™…5F@zpbaõ~jaÄÎ.,bÉ”)nÝ`Ç@ʜݜè~……¥óœYX…Bpba‘žðá‡Nö=ãÜ:„ëGçƒ}Fp¸ùräÑì¸e4f–'ºL˜6¹¡E—‚Ÿ÷7¦Mï&¦'‚öL¿âp²n·–B8a0Þn< ‘ág=xN_”ßfµdÀUêàXÛ¤Ù÷§ ï9Ù÷göê*è{>Ó÷_lÂŒ­_êä¥`4­Íó¹}ØÁ)lAkZ]™NyŠ”&Ï/íZ(C8q~1CoøÊ@bJ8¿8ò%2ÆTß*Ú±~áCÙÎõj‘€_£;¼þ†J0Àëµ àí²¼]6ƒ·Ëfðv~o… äómÌ x-8ÿê^À%íCzr¥<8!àŒ¹gÔ¶ á„€u©WNØöÏ  ·Ô“…<òyø•2éì5˜ƒ×‚¯§>.›ÁÇe3ø¸lç7¹£0ƒ|øÊó}3àõQðu™€¯Ë|]&à뼊¸ òù5FÀ¯¯‚€õ2ëeÖˬç¬ùðµìû ðZ8ÿ¬É뎩68½V«CXØÍÁOóð“ß´ðcÃS2;œ<?á— ÷78e38ŠÕ&yÕL±¢ç[ß7¨ Ë /Ow¼û =þ3ëÒ-ëç>è—oFoe,&Öe{ÎÉá5nä<òØ}Ð?[¶Ú îƒÝ]îƒ]ŒÚÍ!nd'©]]Ñîƒ <$»Zp(͹J Gû¥Ƈp( G«·=d)Ú}`ˆ¾ãáô£†—"ª]«ËaõJj·¾gx÷?Ã[G€SÃ[2ÊÙ3<8vþôðÚ¬$àÈ;”’¥pº"›à”wpbWÍ } -¬BpìR9½z ­pSªA9÷?0à pqx1ÛAÞûQÞþ%SÊh/ÁñGØ{+Ë8@9ùáÕ·ƒÞÌ€¥d‡We} ­à{d‡·«ÇJŸB3e1ùco9½kku†÷x×ðžÞg3Âaà” '#Bº`ÿqp¼ÆÓ!“Ø”ÇJTœ8Ì ‰Ñá¸+)Ü:vEÜ<—hÜ+xuÓƒ#ÞNòJMëŠh8…ödÖÇ×`Ü‹ÂYN³F“x‘ pÊ´*¸Íåà„rÖô•šÊ4†73%é>P6ÍPßq!Þ.Jš¸\Ã!ÖÁ)Ë™¾ ­,œÀ\q»oúN¥ùhRŸŽó'øôNúvKzà¸õMƒI@¬8:îàhàÒê–ì„üðÆû‘¸>îÜîU*ˆ"tp4pÝ–C®¸<ŸQñà„»}HvÚ6á)§„2'³BÖ0À©ñ1Ì5˜³å<8öÇ–ôN¨ æPAG´Ç2nq.–ÐZC†#·Q:œÙÑðšÜ…ßGá2ÆÒÞúvÚäŽü}U©ãÎÞÁ¿ƒh0[ 9Ë«oáäø}W4Ø5‹¹kƒ i€“«—Þ ÆÇƒ—1sc‰ÖÑW·kJ¬PÝí¶ƒcíZå½z3X½Nܵ•\,'\Ñ:ø5 Vo6Ô[õ?0à pqxÿV‹ü}¼9¤Rk˜].ðÿsÈpQ' .rÿxs(¿¥wàem,n_ÙÜœý8Ú(…{à?ÞÒ·³öKagùãÍ!¥†€·¿U`[ªçU'¯F^—xÎ+ð¼—{Üþ…¡9bœX%eLòÞ<,èèÛ-À'ªÄ–ßÁ÷Ñ;õ:Ä}¼"/f‰ûÖïÁŸˆ·»W°äñË¶Ï UH¤{_Ö·¯Â¿Õÿ±^£ÖkÁÕº†F„2è/®EÀö$ƒ»¿Hâú`zÒ‰~(mV=ù€F„tþË‘oDõáUD²ú†K/CŸ/W¾‘[Vk}¹B#BZ÷E ?8Šk¡#À¥W¦Ï;߈±ÐˆõÍ6å*¶åLÙ1í?ÀqƒãH“iC悟ÂgÖUZ‘¯bµ?€ƒÇkýŒ«ïV´EcápdŠvó±·âßQù)wür­c[Ìvz—%¯ÙÒŠ–|U–Ž%_XÚ5 ŠB!8–|¦™÷È´"ZGµÍÊlÔáÛù¾“¦ÏOÚä. xϸ¯þÆ”gQNB{NÀÝ8d´Åé"%=øž˜‚³Ú3êȧÃäÚ }¿ð}·t]ê.($Gp¢ï´ß©;º~A}¯²Ù¾_æû~úÞð ‹-Êà{³lÜ=Óa†§¨Ä¾7ó}ç_=·ÌvìËÃIÃþã÷ €wwÓŠàŠÌŸ´¾]%{¦ue†äUûþàœÙ¾Þ£'‰5ýäMæ^?ppdét•I·ˆw»îàÛ]/ô,L%/ôý¦mpßK((vàúÞí·­ õ=…¸¿¬°äÙw]¤Nw±wÁ>Ö‹úîà¸ïæöîî;ì„~9Fôà|ßRÀe}¯ù¾gærÀ~Lƒàa-ûú^Ï÷½úþ³çû~óéà¾à tp¼Þó‚wãÞsð *à” Á¶¸ïèyÿÙG¬w}X4îŽ ýç)ó¼— 5qð‹Žw€óã®OÈnœ™2Ï*'k lnÑK•EŸ&: Ÿ“ÊK@øN86·»/Ëq¬c‚6Êàà6|£TiF9É[–IäàÈ ð9nxŽ©ažûq)”n‘‰Y–)Ç2…ûß /Û´Ö+ËQqO)¨,ààX޹2³røN°vÛ“ /Çœ+% y nwHŽ…&åXTÃw‚mÔž“XŽWîÔe˜;¸ý@kÆÒc]0­ó8^XŽ­´8}Y!8ëªÝÈgÇ໋¬{˜Šzêöà(!Gˆ•wp‹®ËÎÓW¹0uφçÈÞu(7X·Ÿè:§dô£K!spq]ŸŽ%#G—ãàöˆÖŒ®hŽÅdÍw­†c{ât¸Ë¸Å×b3Ö.ÓÁ¥5szIÎ%Ç1­æÆÚÁѹì9ûÌ3ÛºæZßÏ¥V,Ø@ndÑ­?·[|æŽLÅ´žiÒþë·_'*¨F ¾ItŽàø¼7<#Ù‘¿Îì÷ÂÑfû+tq°ÏQÛ¤œxBàæ#<ð~¿`wXVÑ]Tà^uð­påtàG±+°ÄtÑj'º˜åtµÊÝ´´+ÕE†üÌuIœê¢áºhC8Ý“'êF£ë;j]:‡¿£&ªFpê­‹Š™¨Íãàè(ÑF1UáÖßâQ{É(ÖÂ(‰.º{GGÏÜ3Q|æDÍŽ¢\!DÁ‡åàÔ›%§Q+G—_‰C8Ô¨ ÏüG0ÖÛƒå’Qtpâ£[š)ž¨àš¸°5¿]ëÒùxµM¾8/¬J‹'&SÓ"ø5Òö¥ƒ«->ð!x×ů©u£2ªÆéSP“%?šglçÉ#E_‚àùî P»ÉJ’üQ ŸSîÃñÁyòø¨]éŽ%ß%’<á•OAy<—”è—Æ™%¿áÉﶬä+s».¦ÍNœ6%3mÀ¸»cÚàÃ9T¸Û Ó¦¸E: Ófÿ#Iž™óò’œ'Åäm'$_ %Ðö?²¶áî»´Éiò.ÉÂÁ9òx6›Òä®±N2wiͪʊQ•e…à÷“W®0¢ƒk¬“†{Î9mÃ’·†Ñ6¾ààw’Þ˜¯\c”ߥmXò†Ù¤ìDÛ<*y:€›6†üœ¶aÉ+E“7~‘«Ç%ŸN´Í<á0,îÑ6ü´aÈ[¿ÆÏã’/áÉ7×WÚÛ9§m~WCòù–y·ì­¥<+<ŒÞK²T‘A3íù#ÍB8 >N²Ü+Özkä÷~Ž®Èµƒ£ð’öÔÝ ·®3¯ŒÑ NÊ‘nݽfèàHB¦¸¥™¾ã"„síåNÝù>Þ?Šº@pÄQg·‡Ç1G¼85Š…?Ö_ôÎ2r _øNŒÒ‚¯qŠáàœ Ob‰M ‚‡Ÿ»§¼Zý#ÇÕ½mõ|°ƒcqÔ•¿ûq‹V º}b丿_Ž6Cð5á„-È;âÄ•L89½ºŒ#ÇÍÝrt¯F¾žý’–¼[×_´ÚæZï^¶Æp<ÓLNÏ´ÌYyÇsïì·I~5ñUw]f‡<퉾茱ʯ<嵯ÚÁ¿·a}ÀÜxqÙ5S”Ä|ìšw»GrLU>¤IH§]®4Ú5£ÁÂ>²KuKNŧÝÌØŽ8šÂÞÇ£ÀÑÁŽa±@—/rzö”´)Œvů,m'ãQˆtsðã;Ú Á?±k¦J E®ë–z†àXŽi6«9׋þ}Ëh8sެ³Û åh»g8B8êI¦o:|+Ä÷;x³ +zº×LN–·­&ÇÚ¶{aÂñ¬Ué°fVBJ™ƒÛ4ì¢)¼Zx,Ç[¦k›é2„:üVQêSˆ,rð¯°Öš.2/ ”]×ãktájÈ~a÷ëÌÜ*~]¾ÅÖq>^Âuìy›¢È3ÒÆµÚ½£Y¯¸3—NÕ`’¤èwgSÔ¡3Ø(jÅÊ1½Åì¡Õç¥ áx]w¥éŸp®§ ôÙ ®j\¾¸pÕžØ}¦4Ô>Óùu¶¸±Îõ°ä>„ýÚÁ!¼TÖ÷›1vx™Óë:-‹" á„ut{;ó[8s9x¤‘´FSá•,bíž±š0:••áx¿nMŠ~‚r@OAÕŸñÌõ^ŠS^% úìêùR¦rÔIkÚ™®,ÕõD•Èð *ÔìɹÅ‚²º̆p|R1öæk3±È¼ÖuóËŸîo•›ß;à¡»`ZM)÷çîÄX!øoƒ’bJ¯‚7ÓŒÍÈÓ”I5(÷?Vó©v—ê'êŸpšrðÕ_¨̨^¿›du{áyæÝ}¿n“Õµÿê•Iñ~X])*þ¾únwÜÄö+«ýßýñ%Ùµv¢Üúþû_òr¿êà×°°K»=Œ]|Ýù=G~/ß äûw dòû‡É+—©úý~É¿Ÿòý y€#òº‹›#p‚ãnÙõêý“w“ëÊO®§ñ†üi7ÂO;Þÿ0'./fûðÇÎ xÛȉmä]—â9fÓÁ¥.®M²¾Ý6¦‹ýëÙE€£.öé„s]øê±µiJ?´öÓ†kÄB-×E+tÑ.ë¢]ÖE{OÛmæÖEy“cºp¢‹CÁÿ¹Mîá.¶ûOæ4õ¼¼O0äNO¦ïØ'nä Žéì>ñ^ùš#_ äëeäk–|7‡fÉ7@¾áÈ7ùF ß}Ëä^ò¶š•ü¦Í†›6›žüF˜6Y>kü¡9†ƒ‹ûÏnì¢lE0]8ÙEu‡ÑEߊ¸§‹è¢hEp]<]´åVÄã]„€+>cEŒ]­®‹çe£5QÇ++.u±ÝÞŽwì?oGnÿà”¡”•wì?¼ûêíßÑE²ï ¢;8[·bo]”Õ ÓE€]®ËçÔÍ’.:8ÑÅbl]ÒC·¾Ëzˆé;À©¾gæ=´¤ïNïÓ¼‚û.*(®ï®ï]çõ jQß|ßs£ŸîXÖ÷,ë?vYÿqã®Í=ËúoÙ²þcúnKo#¾uqfYÿ±Ëšë¢é½g—õß²eÍwQÍ ïa3ö]öq0}ïÖß=ZaN‰N÷h…¿eZ]vVø»G+ü±Zí»2÷h…¿eZë{“ö$œhÏ›;ÎÓç wžà„_ϪÙÃ&ÀñŠ˜1âփϜ§o]”ÓE€c¥ßvòÅ÷xíX¿¨sÛŽäE§1G~ÏîÓ½æœÆä+Ïp#/;òÇ’×I>KàÇ>HbÎ0’ùzùš'oú26sçéyy'dÈoδ™÷çü¡ic*ŸÙðn]”7<¦‹­Þ¼Áe¥?'$¤*{‡Ò\B™5>sV»(žU¹.J“ »ç¬1 Tà3ïß·;<Þ¿oœÇ{€ÇñüŽík„?t/2¶¯'n»(îÐ\í².Úe]´÷t±Ý#o]”wh¦‹'ºhËâŽúñ.£yÝ6s#/or y€Sãcï¹½‘'8öæ6¹‘¼¸ÉqäëeäkžüðhÞœÇ{$/z¼9ò@¾˜w×7<ù¼(îØ¡oäåš!¿¦—<Àšóc\¹ŸÙ¡o]”wh¦‹í©î—¤spÂnOìü½‹‘PV!øÌÉsì¢h„p]<“ÀÜc„Dèv£\èbW|æuûc¡ Å!dþœü@ÀÿÕ?·ydÔøÕ9Ä4rÉà«hä'¦‘©'züêùiä—o¤=‘ß¾Ú¯ÇF†ÇlàD#‰‚F6ÐÈ&¦‘Í]´Tö3=ÙË=éá§Ãîö/ÿÊÉ£²ŸéÉ^î ×H»žn_­lò~îBƉFº½žkÄÁÛ¯®ß²E_f²“ã𠸲±¤¨ƒÿûÝù_õVývr"§Ýfl}½‰ ïàù–ý ï"»á¥<'ÈUçNä#|äw1äwù®Ö!ù¡¶wÂù¶ó}hÛ‰üa„ùÏòŸ,ùn¿§È{ï‹88&ß]“ä»FøÈŸcÈŸ'ß…Æ…ðHòW !•È´ä è$€Sä{ø‰üa„7@¾‰!ßÍûÊ&ˆ|W?¡ áÄ«Cï°í#Œ“:ƶ©¯Â´Ñ–œ6Y¶M}]&yØßëó ÖO›¬2• áqä¨ £m” m†|2D¾]ÇcI5§È+îKFÁ9NÅ•p ´ý…"ŸWpUîàäœ×ܜͺNŨJ%¨JC©Ê®¤“­ªNf†9Ãê±8NWòu$c˜©0múd{,ù<Ë885múÚ:'ò‡¾òûò{Éž7´=Ÿ–*„“ä¹9ŸÁœ‡C¨Š9êóÃsÞ¨*ËCxäœE­bô¼ô|VÐs^Ã[;NI¾`æ|ûà ®A×éU©U©9ç3uœ2‰ fÚ¤àöÑ ëtŒªÔ‚ª4šÜ¤t©á4¡7‹Î°tŽQ•ZP•}†5•«%«²ä,œe4è:£*µ *u•‘î>%¬œ:Œ¤s¾»Â”#ùU©÷ù<'É›ÌÚNÍùŠ;€W0m@×éU©ÏÎù®ØK•‡ðÈ9ºNǨJ-¨J­Éçp‚Ö’ªÔù1C©«/sk}¨4ó yÈ«î­]MÀ3›Â àùvvÑä«3EÇèùœÕóý @¤mSXP¹hgœI<ö=]—ǨÊ|û0y›Ã³ñI&m3çóëÃä‹´ߺqð8òåal½òo@þ-†ü¯ç‡ªØ0«ª¬á¤žç¦ \iU°EV1;luf%¯Š’\°™…êUNúç9/qäÁåUÅx̪/ž¼Õ4ycKÂãìù ìUŒ¾ªyòCL>3`UV’¾à$_€äüo ù_vΗ¦ }•©v^#€S7à´äûÆÐ…v«‡À v‡­…À €·_MoFºÚu#ù~0­9ïÌ€÷äë©{ÆéyôÃ?ùC ùKÞ*E×­©l!xàù~"áG Œ!dÉçÖ]ëYRäÚ!œ"o4C~Œ^ëŠ=äÿÅÿÇ’×™»¯=×G¥ PÔ'ȧÖÒäáAœ>\§ž ªå`!nÚxÁBµ,ÄJÞ ÕB°P=,TËÁB$ùi°P- ±’Ϙ9? ªg‚…j9Xˆ&? ª…`!šü$X¨‚…ê™`¡ZbÈûñ6µ,Ä÷ãmj!X¨ž ªå`¡GÉÁBKÈ_ü5†üU"_Ð’Ÿ ±ä]¼M- Õ3ÁBµ,ô ù0Xhù.\§ž ªå`!–¼ ª…`!^Ur›8¶«±õí*‚¼ƒOÉw[ÉÐz@>o¶B­cÉ«Ää¤ä»F8èºmŒªÜîXòÙðF 2lžŽÓ<ŽüÌÂ]ŒU¹Û ¶µ”afÒR¡Ö)òªdȃE½³pcUîx«²{d˜ó:Ñ%ÜËìyÍ‘÷äꙹZãÈ«Œ6‚9֞ϙëäö㟾˼ƒãi“EÍùªÈ4jÒ69sWê»Wln­b´Í×6Z¹c ’2ÆÀ-ðaÅ“Ïúú'ò‡êâ£m¼¶ÑÃëœø0Rš±ªµƒä gU°* ºcŒä¼ä³¼ ޶U• ’(Ž‚äMÊF Îr–YÏ…ÖrP(=ç'A¡µÊÚóÜ‚uA¡GXqǘ{ä¬*RʪTèM§ÈsgØÔø­õLDk-G´rÇ@/¢µ"Zym“sÚf\2˜´—˜9Yñ'©ª*(m£ ¼Ôäàù‚™ój|y|}ýýc\8󠛥l–C´Ïe»Œw3ÿV҂͸›y‰õLÚE-§]psÞK»¨…´ þ–»P›¤]Ô3iµœvÁ‘÷BÐk!í‚—¼æ$ï§]Ô3iµœvÁ‘7Ô‹Ó.Xw7ç§iõLÚE-§]°Ó¦2¤äƒ´ vÚ¸´‹ZH»¨gÒ.j9í‚¿1ôÍÈ4í‚'ÏÍùIÚE=“vQËiÎù0íbÉœ‡ý]ŘJ0¼´‹ZH»àOR\ÔÇ$í¢žI»¨å´ ޼V†>€OÓ.Ø“TÁL›iÚE=“vQËi¬¶Ñ¤m¦],¸ Ô ëtŒªÔ‚ªÌ蛑0í‚%_r v’vQϤ]ÔrÚ;mªŒ œÒ.XÃ,­Ãl’vQϤ]ÔrÚK>ÏIòAÚ;ç+ÎKH>ﮇMª\6mJÛ(c¢>ÊãÓ%¼,!¾‹2ÆõQ-Øò¸Œ<¬¸2fÁ–×§M™´ê"ÜÊ… üueŒ»¯ÔK^W•›6zù ÔE£mª¿ÃzyR^ëYR–õQ‰—Èœyàò¤Ö@~C~ý(y”䵄ü ‰!ÿ“Ϩ@è,)L ÷°'½ùÌÏP«g2Ôj9Cí!ò8Cm ù7 ÿCþ7‰½ µZÈPãMbnÁº 5ˆ!¯bBЫOVò~†Ú$[ÇdyÂÉ`!î6÷Óëê™ôºZN¯{ˆC­‘3ÔHòÓ$¯FÈP£ÉO’¼!C­™ÉPkä µGÉjKÈ_ü5†üU"_Ð’Ÿf¨±ä]’W#d¨53jœ¡ö ù0Cmù.G¬™ÉPkä 5–¼ËPk„ 5~Árªr’¡ÖÌd¨5r†E>ÈPk„ 5Fò~’W#d¨53jœ¡Æ÷3Ô!Cmù'»Ûf·vXk)ó ÌPcÉ«’!?ÉPkf2Ô9C!ïg¨5B†O^säý4«f&É«‘“¼8É{I^äÅ.Øœ±*§I^ÍL’W#'y1sÞOòj„$/޼—äÕI^ÍL’W#'yqä½$¯FHòâÈ{I^äÕÌ$y5r’§m¼$¯FHòbɧŒUé%yÁ¤=ÆÌù#?çý<©FÈ“bMbΞwyRÝ%Fò—»Ãú™ jÄ.Ø‚‘ü4Õ¨™I5jäT#šü$Õ¨R–‡sÜ%æx9.“üqùÈ×1äëÉãT£%äÁ ¿ÄØó—«0mÒ‚š6aªÑò`Ó^bLâ‹~Pò8Õhù.¼™ AoätNÏ”a†CÐy«ÒpV¥‚ÞÌ„ 7r:ç1óBÐ!5 ³ÃNCЛ™ôFAgÈû!è‚νô† AïÂuš™`¡F"ÉOƒ…!Xˆ·m8óÎï%ˆ®Œ‘|¹âµ¢´ Žúà}•œI<‰úhf¢>9êã!ò8êc yXqeÌ‚-ù’Ú¤ÂÀ‰%äa—)c6©òú äqàÄò°Ë”1›T©–|8±€|+®ŠY°ÕŠ×6^ìA#Nð;,çtšN438ñy8±„ü ‰!ÿ“÷b!p‚%Ÿqä'ÍLàD#N€üG ù–|Çž!Ÿæ!œ”|ÅOaà4×1äõ²i£M›Ýêþõ8y€äM_Ú— ¯`‡8A¾ýŽ"ÿœ¤îJËyCÞJÓ†&ßi¢N×4y~Ûìþõ8y€’n1ù.›7„còž&ÿ”Œw2#ùö_“85ç‡ÌD,yNH>OJNò£žOAϧ1z>]¦çÓez>=ŸÆèùt™žO—éùô|£çSVÏ·ÜÓlNϧËô|zòÇòÇeÓæ¸lÚÔ@¾Ž!_/#_/"o`Áš˜k¤;œÄÚ&7#-ØœÑó‰U¥kb¬lQ0’w•… ¿`MÒ/D^%ÜÇ™ ÿCþE¼-ÉÃ9à”ä{¿ %y¸¾7¯@þ5†ü«dÓ¦óÜW!œ ?Tœ æ|©ü‹!ÿ&éyVò6„“’7œäaÎï€ü.†ü.BÛ8E¾Ÿu„䵓üÈïcÈï9òp‚ÉëÄùçŽÈ+hr“Ê nó ä?cÈJªR1’רuÒ<`ô¼*AÛÀaÄÄFŒpа!òÏ­èóŽÈ·_)jÚ´ÿ½„ 3æä/1ä/’ª,Éç¨urÎ3’×`˜™/ ÿCþKÒ6,ù*„?¶`Gë€mcbl#Ù6–±* \ß›Z:Ãæ y·Ã~ùïòß’ªdNR ¤]œ”|ÎÙ6@þÈÿÆÿ™6PÇ àqä-lR6f“²Â&U¤ŒªÔ¸uŠ¼ÖŒël ')s’²yÆc¦!`ÆŠ'©Œ±ç³qÁZØamÌk÷’wÁBv/Ižs:Á’± ˆ!ˆ‘¼›6IòŒU™B·…3¬9ÃÚ£´ÃVŒßª¨Yé ÛoФ»fxÌlŒÇÌž'ß'†p’¼aȃidÁ0³1†™ ³"ã´ÍB89m8U ±Ä 3c˜Ùóãäýis–È[NÛÀÀafc 3+f…²Ì«T¿Útó$æ1¬d¨bVòßÛóIš‚ÇÌþùŸò?’ëƒ$ÿÜîûyÇäŸÛñ¡¬u lcÛØ_IÛ0¶‚Œ+Ù6¦à6)˜6W !•üóÌ&•“LÈÝç̃@þ_ ùÂTÆÚó6„Sö|ß:AÞ@Ô‡m€|C¾áÉg–¹Ps¥ÀIþÈÿÅÿ“#–Ó66„“3ær!ƒô:›ù,†|öøm`R@Æ ÀÐóíz£.ÔlÌ…š5’UÉ7F…pò ËØó ’:-ÜÃÚ˜{Xk¥c ¦õ¼†XbËÞÃ>ßr UYŒ!è/Ÿïɪ§ìþ,™ýwçûNм½¯¾Ó$ùH<¯ÞðPÈú=p©´äǔҗ÷ïäehþõHë"IÇb¨/ßïÉëÐü+lä6â²'ˆ¦òDô½»½ÉC8ÅQÛ±'I²¹ bü×|#Ùø*˜‘˜þÖxz\ëþûèBêà[h}ûø0$Éàû;É›Ñuè@ùQEt_¡‘s Ç3=Qû²ÁôD…coÿ‚Ö¿îíb^…pÔHoíÒãcFíúò¹M~o‹tü×C‹tU¿«’’¿©ˆ×—ñúhýÂ\$¡¿û¬ÒôÖúë똣°~ÝÆÀ÷ßGÀßÇÛúý¯^ÇÀ€7ð ßÄ?Œƒº>|EÀO£_p}ÚÅÀ?þ?üÑbD÷9Þ´¯?W1p ÿCþk¬õ¾þÚDÀWï­r*ê¼ÇÀ?1p»y‹Ám¢ÇT — ‡Ý¼á€QíéÖ„pÉpØÝa8_R_ívÊ|¼Ïsðö+|UôÁF’Ýáà„Ö®2Nk…×ú–Ò\£ ’äöµ÷»·nÂÉ ¤ß×ÂÜ 8wðG­åLßÝ2«g7oõ ÖM;¾ÚÁwßÝI^Ù<„Ó{/#:Ÿü£6—jº6„K6×nÞæ"ÇG…pɴ꾺@#—»ÉÚÃ[©F2o°µßtRZ£ì·Ý¼ýF¬2;ÆP9¸d¦í·*9×s ~¿ÕâW$•N7øù%ùzëáç—;áíŒï,÷¯*ùþêá÷sÝ!6Õ#\‹ðá«c+¤Õ;=Xãyï‹`-ŸÉêƒ4ºž»<Ø'Âmw¦ÑïêÁ‘Áù<B¶`·TŽ7_Çqm’õv¨ÆùKÖÇ.¬Í`x ˆn]Ž=YÛd½¾âüëЈƒo„FöÉú0|u úÛ7"Œuÿ$á­PóŠ‚?·»§ÂðOAÚ‡d}¦i'DÙ;³ÃFž ”>üÌ7rY%ëËðÕ…Y f„oçá[~œ‡øu~àz®¸‡[aý$ëßþËMÁ~¥àírÏú+íþœ”ðÞŒ¿ Sð7Y7t#6ïëÎáFL6>‰ëþ‘÷KòþÅ•ûGD©Sp’cøßHkÔH_=q‡žüÅÏȥᤗ"„S»ÜèŠ?î×ÉnM§='ð[ó]tðý&œÓaëýý0z -hQë¾õ¢OJ­§ÅhFôä7Cë'®õÜ÷Ͳ¾/i}÷~GßO»dw"[OìB‰†¤µDG£Úƒ““ÛWíŸÞq9g·¼;ñðÓà!ÇÔöe0Ç*MQNúEFŽmOÌжC†GRY7 ûÛ\3]Ü k¼5¯'27Lq§ÊvÇ !'lÔ[ë×™cÈ‚×zxyì7Ò®À9Ž» :ŒAÚ|ÎDzê BR§¿ñ5I†t…•³'²ï ô[Ëìaòy‘+GäíðH1>zt†{ð0´ »T³³äOóäOy€ËäNò§eäÏ“÷§Í™%×´9/š6íwŽ<é«u;ÿá‹öj>%„ŸÚéöÝ19 •ù5§7µþš…“·ßઞ…+þØ}Üî’ã?rð­°gæá~\ÍÂÂÙâë{þõÍÿ/³ðï ÿ9΄qÿ7ß÷Bßm: 'ËŸ9uqÚQ»õ3gQ<û…ƒc‹Â­Œ×}rú ÖeèÕ‡z![áÙÕÿóàˆŠŠÜ„Woý¹× øIðXìlr:PÉêÏ]élMëÏ)sá'ÎMö]¹ØÙÎꙃŸÂ¾çù˜•äÁ‘ ´ÝÇ“~´‘©a7Â)_ UN…ŸÎô„bÌ¿gßüsð“à‹8µÒ6L~ûP¢}}:‰Šþ箯¿«£ œ#uò¹¢ïÞn1táyG>$ësÐ]Çs÷ÃxTÞ&Ÿæêî‰v­M˜¿É×pyáâ&±PZ]0ŽáÈɇÊA„áíín‡ãÓA0¼O|ëÅÍ›vZÿÉøÖo¦ÕO&À…Ö•àFw= œæN˜6ç–ÙJ Ë„ŠDšZ ïÁQøRFƒëÐAïå#Ü0­÷g“¹¾{ð0~®{:Á>‘—±Ü }¯º ¤¡u€ã¸A]„­w>Ø1ió¼~O^=î©é !¡t%B+ǧË?°¤è\|¼ƒ£.v×GýœGi÷N]x­‡~æVr}­.ä™n µŽËÞ …£ îVî¾ùUôœßüjVÏûðŒ†ïß߉ëõ~ ¿z"îüi³Þ,÷Ͳqß,÷ 7î]8Yos¡Z®Â»ƒÓÃ;+y×úFð–p¦KZÀÙè óàXÀ7ÇöÁW†pJÀ¶‡£ª I6¢{­ã…UöÉÄÂ*KLU­lI–ÄÂêt-ù¸…µ]¶°¶ó k+ŒûnÙ¸ï–ûnٸ5˜0¨”g7¢!œÞYÉ»Öw‚€?xëáÄ$j®AsÙ|Vs}®z½‰Šf$F#8%`Û“GåF“ÔíÖ‚€‹|VÀ®õAÀí_°Œ€Ëþi1BÀv¼SóàXÀ–pwz*B8)`CÞIû‚Ö‘‚JM¯ÛQIÔ¶õ‘ÜJ'7¦_aq‹$‡®<òÑ&]fØe&Á’qß,÷ÍÃãÞå¬!xäÀù°æl?;ž¸EäÉá}âF4„ïù›15¸+cËåU‰àèŒÕ~¦˜›N œIÉ(]hÔ:µ`[¤,B8w;VX¥+NÉG›v™©a—™KÆ}·lÜw»‚šò9p@>,UÜÏŽÙ»[¶`wó vÆ„á.Ï FÓÁ M›sš¶(C85p}ª$1p)n°AÔ`¡¢Z8I^Tˆ|X¦¹í{ïê‘îcÙÀ}Ìœdýð7<êFn‘%‚×^¡VœEp4pÝ=ã`{~#«2ÏQë8¨o¨A‰—bjr‹Z_sªr-©JR•Žü0>¿ËÆçwÙøürãót×øürã“èÌ2Þ,ëÜQ¿¬BíFñ‰8D~Í-¬uvœ]Xqx]ß…áUÌðvy sôK€3¼}Z¥7»ïÔ„pjùõ&á2›Iê \ÅéÍ^·Óããõ]ó}WåWèCð3Ç}×}]¢ïÚù´Ô÷º|vUT½ÖñÙmx¹âÚ½$CpbnzÊøÅ»!â¦RàxñÏÀ»ªÊœZü©¥ƒ¡•“PÆÌŽ>%§—Õw\õr(8²®®|ßÅ…e™…5†œypbaõ~ja—ØÎ.,bÉ”)nÝ`Ç@ʜݜè~……¥óœYX…Bpba‘žðá‡Nö=ãÜ:„ëGçƒ}Fp¸ùräÑì¸%qf–'ºL˜6¹¡E—‚Ÿ÷7¦Mï&¦'‚öL¿âp~b·–B8a0Þ.‹ ‘Ôd=xNß³ßfµdÀUêàXÛ¤Ù÷§ ï9Ù÷göê*è{>Ó÷_lÂŒ­_êä¥`4­Íó¹}ØÁ)lAkZ]™NyŠ”&Ï/íZ(C8q~1CâbX§<1%œ_ùcª¿oíX¿ðkçzµHÀ%`€Ç ༀÃGn|;òù*BÀ^¯o— x»LÀÛeÞÎ x+ÈçÛ¼|Sõq™€Ë|\&à㼊8 òá+›÷ àõQðu™€¯Ë|]&àëü ¾ òù5FÀ¯¯‚€õ2ëeÖˬç¬ùðµÒû ðZ°7‡äõÄXPÆÐávÞ™ÒÁñ#FÉàÆ9> ܯ¶É«fêK &Ðjµ Ëú8òC »ã°¥NL]·~ ¿RY9D [ôw†}ïîʆkäi„j޽ØbM‘öq.«`õìîÚ{wï½½å\…pÊ‚¢º £ ÜÁ;aï­ Ë /èö¿÷¶{gNoÅt=8¶ ªaóDÃ[‹É£ÕÛî 99¼ÆŽ5½|òxïí‹g¯vÂÞ»»kïÝÿD¬ÞÂN oɬ^“eŽM+rõv  $àhïMÉœÀ®tøÛí½­ dhå\Œ dï½*§‡·Ð)Ñz7¥Voÿ3¼‡÷¸›=w|#'&Ò}0JǺ}`zÈCÂã® 8š:½EÖ M¹ë™yp´Æó²¤ htgö1C܃£IЪvò`¤l+ÃÁ§“ ¿…DwÜ£²„©}ŒY—dE¥uÙ¿”òϺ3O…áxW­,c4Ú=òëRçŠ^—îùuŽvU£ e4uzŒÚ#».»ò(´Ñ”)‹Éxk2åý‘ç(¬Ëã]ëòdc†%N ¯2Ì‘Çyp‹¡‡W•U…ááWå­à"*œÒ®X…àhx;ã†ÜUužâÖÑð¶‡nÚhÒxš|ôÝê´ß±V'Ë/ÀÅáý¥7©)G"8kN¹"nUyÐ9ø<8V»¦ ×¥®Àhòàè¬j 튰•Æ­ã]µ¼ X톣ñé´ó5$®ø¨¯Up˜IMüª“W#/¬WÍ/,€SÁyÆD(%`<8ÞýÒÛº~õó@#†ÿй ͬŸ[•wl·§pSèàAþšê÷/< }á ¼Àðw1ýMà˜q3RvzŽäTé~)1\‡i­ˆÛW8*É VЈòí·\(C|¾™Ã6’Á)ÉÁ/ROŽ·¯hÂOdØÊ†K%Ï—+ßH6œ'ê«ÐÈ<.šid(óD†/ÎAõð)Smr¼gÜïÄ$¤œ„öœ€ûGC)w—¾'¦à¬„öŒ„:òiñ$××?¯/|ß-ßÛ=6ž#8Ñ÷¢búî*]8øõ½Êfû~™ïûEè{Ã/,68Ì÷fÙ¸;8*wbJ;Û÷f¾ï ß÷–ÙŽ­p2øòðë´O¼ÓeV+2øhÒúv•ì™Ö•éµzº›tÁѳ pƒž:2WEÂÁ‘’Üœ a‰ùÄóå9ø–y:Œx²Ç“¼Ð÷›¶Á}/áöéÀõ½Û n[ê{ ž¿¬°äÙw]¤Nw±wÁz<Ö‹úîà¸ïæV¿÷vB¿#úp¾ïG)ßbYßk¾ï™¹¹°ðINIæ„ÜÕ÷z¾ïµÐ÷Ÿ=ß÷áÙg¢ï³98^ïyA»qµØü‚B¹³áÂ÷½=ïà?ûˆõ®‹ÆÝÁqÁ„ ênÑÁµ€cÙybúª Ê|8¸¨{6<ÇŒ“£rƒp‹^7KJF?º(9×õIàX2rtq+nhÍèŠæXLÖLqךa8¶g!N‡»xY€[œæS0cín\Z3§—ä\rÓjn¬˺K rÍø­k®õ±1µbÁrpÛ Œn½»ìÈܑ题Ö3MÚýö‹àD&ú`Äà[ŒDçŽÏ{C9ÎðeÒÎošcøV8Úø.vmÉ.&®8àíbwFšyíŸU‚#ç}kÎUOäã«ù™ÓÛ’.:8ÕEÃuцpº'O”»¿ë;j}涤‹µÐEmè‰êÝó88JÜ¿g|æ,Æ®E=¢‰.‚÷ÃÁ©ª%·+G×&m5³A8ø`æµG’%£èàD%¡[^,ENM€ UóÕµ.¬VÛä‹óß©´ /$3(°çà[ü–BÒOTµÅG^[îßY˨ôÊ0ÿŽ%?nFglRçÉ#-X‚ûàáSÑÏÝa¨Wµ+IòG|N¾!Ø–ΓLJ´J‡p,ù4n-WÂ¥çÊJä¹Y—×gçÉŸò–•|eWÈJ¸‚Üm‘ßÝ1ç7<ùÝv–üN˜ó;qΗ̜ØîŽ9Ϥê¿æ|1d„í„9¿ÿ‘$Ï,X KΓ¿bò6„’¯†\ðý¬*¹kž1Ý‘/ó Á9òx)šÒä®±B5w©JÍêùŠÑóe…à÷“oÿ¬Apêp½7§*YòÖ0ªníüNòC‰ú Á5V¨ù]ª’%o˜ÖNT¥L~­Ï­ŽÇG§ƒçtNU. ¿‹˜ó-×Fòsª’%¯MÞøÉ™O›t¢*oä '_qªäçrÜß/G›!øšp ä­eâÙN޵—-?rÜÜ-GWz'Œõ-‚àèà9ÂÊÚ¹±ÞÝ˱H‹ Á‰!|áÄ(žù7¶~½³õ®f5†ã™frz¦eÎ8æ˜{gÊö7M|Õ=ã:-Í´j•ÄØ’Ô*}¤ ÁcbZ{ÖÃ1/nµ¿EkìÀqÌ2BŽÝ=gŽà0Ét•ûkF3Ò¾¥ÊˆFבãh«lX ˆc¦ÓÁÃçŽÛeíLòœ‹BG±Õ?ã?àøä¤v8‚£IPi…àÁ³Ä‰nñÞi“ëVÑ«YjËqTÊ a}˜£«2ïàÁ£ÕI—å«FŽ*5fÎRÚXŽÆŽÐ$ÈMY"xð2vkUÖ_ýŒU1¼ä%DGS•[j¬ÛÕ”ª Áwe« 4ìrÇËѨa›: /}<äØåLª0ÇÎ (³ Áƒ×ջǵ—øÏp,U:øD‚¬Ma63cY^?Ú!IC:3SQém¬ßÃùXá”̧ –ëÂr¬[u™ð^¡:J®¾¦bå˜Þ"j¡h<Àñš1º Ç:Ë]~™ƒ« 7UUðÖà÷Ú&çáMæµå^Ãî~8o(ŽŽß4×Im²?¾$»výRaľÿþ—¼œÃ¯:øõešy©;DüÐnü¦‘×íØÅW&eiøé"ÀQu{ÖÈçºðGº¡Î߯{ ¿çÈïò{ž|ÖGUÉä÷1äG³Öƒ“äo_½ŸÇ.¾Ÿ¹w½Ï|Nt±èoÂÄ.œšiU·3u}ÿäà5¯9òµ@¾^F¾È÷©“2ùÈ7ùF ßäóÙÅp‚|Öï"ù L› 7m6?<ùÍYÐ\}\’Hà­ŒL!xÛȉkät»xâ^¼ï`ºpb|´™€?ÒE¨péÁÅ.Â(ž¸Q< ‹ÿ$,~ÝGÅË]ŒEx$σK]lw€úžý§f÷ŸšëâPøinÿ©ì¢î®€œ ¯ïÙjvÿaÉn•¹ý'‚ühîzð™ý§¾gÿ©Ùý‡í¢™W$'z2T“›Ûê{öŸšÝ‘¯9ò*©¬¾cÿ©ïÙjvÿáÉÕûK¾è¯ØæöŸúžý§f÷~eÌk.€Ç­ ŸÙê{öŸšÝø.ö÷xsûOý°r.Çs¤ŸÙê{öŸšÝjÖŠH³;öŸÇ»Xn:>³ÿüdwì??§ÂG¸¸0ðv¦Ýàü29óðöˆ÷ûvÇùô÷M†£ñimÌ|v•üþñyJ*S!øÌùôÖEy|˜.œêb_jÎ>x¸‹ ^õëfÇH^œù=O^ßaÜì&ßq·>cܺ(ÛLNtÑXu‡}pãHô$½ç|:’íŽ|½Œ|Í‘ï—ÉöÁH^´8ò@¾(ï°Xò¥ÑwØ7ò²}ÀßÓfxÛgÎ>ˆXJ!¸¸yîÆ.žvÜæ¹ã»pª‹wœOw1]LKŸ1Æ.Š&×ŃÐÅìž#xÄþ3Æ?xp¡‹]ûë¶ã?„»‡=¹í?¿Ÿ“ø¿úçö¯ béßËýààhýÓúAh=Kf[?BëǘÖ}W‰á'hýÓú)¢ï^ë?ÐúOLë?Rß5Ùz‘Œ³]E¸±õߘÖùÖub™ÖLJ²×ÛíØúvÑ:À‰ÖU’Ó’OJhæü6fÎo³Îµ¾[ß¿E´p¢õDY¦õ±Öz’ßÇH~¿jfÝ:y?³nÍ´Þ\ì¬xûÕõÛû*)«ÞYÓÑ>q׆cí~ÿ÷»›|Õ[¥Ar"á¯@þ5†ü«D^1äǸK§È÷'ò‡þ ä?cÈräû›"ßÿ0ÂÏ@þCþü8ùÎ>á‘ä¯@þCþ*‘/hɛ̆pŠ|?‘?ŒðÈ71䛇Éwå*m#¿=Ž­oä%ßï†çÕò:)J“£Ö±äÛcsFJ¾ûá?~­¿#È;8"ŸU)±`³Dçåøø‘ƒ“äsŽü8ëjØßëó f̓vâôQÀh‡µy>¾@âàÔ´é/$Nä#Æ½Ž™6õkTEE-Øî’¥T!<Žü7èºïUù}äÉhÎ×ñN×½›ëDþpƒÿÂ.ó³Iýr›”ê ©PÚFu¥€B8A~x6çDþpƒ7¿cëÍoyÇ’Ï«’š6¹©@לš69c·?ÜàÕÛØzõAÞÁ Ékf‡5cI §È[Í#$ÖÕ;!ÿÎK^g9%ym ”‚ƒ“’¯8ÉW#¶È*f‡­¼ä³>vœÐ6¶Ô!œZ°Š‘¼†ChꢊÑ6ÕQÐó4ù,‡èQ§$_rs¾„9_ù:†|ÍK¾Ðä‚ͬIu'–;Zï\ÏÀkù>ÀÛ¯øx-Àk _sðZ8€×3ðZ>€óäC~rgÉ»x-Àë™x-Àiò{¾à4ù‰=_ ðzæ^ËðGÉð%ä¯@þCþ*‘/hÉOà,yw†­…x=s¯åøƒäÃøòݸž9€×ò|ÁœxÜ´éŽÀõ̼–à’àKÈÿùßò¿4ùî=‹áùí|–”åXLÔÁ1yÿX3ÇÀîü^ÏxjÙ{@J~ê=¨ï§ç=ïA-xêïA-{ÉûÞƒZðð’Ï8ÉûÞƒzÆ{PËÞ†¼ï=¨ïÁ‚isãäcÛ\XÛ¦¯€F‘ϼžêà䴱ܴ5íÆý3m.ù>‘¯t:FJ9xùDWÇH¾f%?ñÛԂ߆%o8ò¿M=ã·©e¿ cUú~›ZðÛ, ÿ [äwÌû}äÉ{~›ZðÛpä=¿MÍùm¶cë¿ÛòŽ´Mjûç¨ÑœWÝò!œ"_1z^W…çö©gœNµìt"%?u:Õ‚Ó‰#ï9jÁéTÏ8jÙéÄMÏéT N'vÎçÌ1Ð9JPeŒ¶)=¯¨MêÉtùPY§È«œ!·ÔE£mÊÉgIážBup’¼áȃÏj5¶^­"È;8žóÃì¡äóþùíN-XÎ{õ×Õ ‰!ÿ"OsÒ$ÖF¡ÖIòœªŸ@ë]õŒ£µ–­¬¶ÑÌIjêhe§ÕÌ´™8ZëGk-;Z9mã9ZkÁÑÊk›ŠÓ6àhÝùM ùÍ£æA– ç8€S&±æìyðœT°EV1;lµe§2)±Ã]}9Ð6•´ÃrV¥«²]WŨÊêƒ'Ÿé’”|•›2„SäKnÁ‚]WÁ!´Š9ÃV~ÁzþùZðϳä³`§þùzÆ?_ËþyÖž§É‡þyvÁ–œyàüóàx©bü6ÕI¼"#¶µh«< áäœÏ¹9}7oã%®>ù9¯(“ضÇçL¡Ö)m“Œ¶¨Îêä/1ä/y£©ÃH®+8Mœ$ÏyÒÜ»X©g®ujùZ‡›6©mе¹`¹Ëë¹÷¯3— Wùra€·_ñ¾Ê«p¹pòWÎWy.®3— WùráQòÁåÂòW !•È´ä§— ,y矿 — י˅«|¹ð ùðraùν¹\¸Ê— æ<Àã¦MçÞ¿Î\.\åË…ɇ— KÈÿùßò¿4ùàrá*\.0ä}/ñU¸\¸Î\.\åËRòÓË…«p¹@“Ÿ\.\…Ë…ëÌåÂU¾\`$ï_.\…Ë^ò'yÿrá:s¹p•/òþåÂU¸\X0m:÷þuærá*_.Ð vr¹p.øic¹iã_.\g.®òåKÞ].\…Ë…ä¿AQÇèùoVÏO\ÜWÁÅÍ‘÷\ÜWÁÅ}qq_e73ç}÷Upq³ä+FÛL]Ü×÷Uvq“’Ÿº¸¯‚‹›#ﹸ¯‚‹û:ãâ¾Ê.nnÚx.î«àâfç¼sq_÷uÆÅ}•]ÜÜ‚U”ªÄ.n–¼Êò÷uÆÅ}•]Ü‘Ç.nž¼áÈû.î댋û*»¸¹9ﹸ¯‚‹›]°š™6S÷uÆÅ}•]Ü,ù4' ³ÀÅÍ“çT¥sqo€ü&†ü†_°ž£õ*8ZYó@s¶ÍÄÑzq´^eG+#yßÑz­¬ä¹vêh½Î8Z¯²£•#ï9Z¯‚£•%_rÓÆ9Zá(TÅœ¤ª?ç=wßUp÷ñ’Ï9Éû·ëŒ»ï*»û8É+Ê<Àî>vΧ3ç'î¾ëŒ»ï*»ûXòFS†YèîãÉsö|êû¬šY#{ÌxûoYäîÞ³fÆcÖȳGɳ%ä¯@þCþ*‘/hÉO=f,yçtjY3ã1kdÙƒäCÙòϪ™ñ˜5²ÇlÁœxÜ´é|V͌Ǭ‘=f’=fKÈÿùßò¿4ùÀcÖ3†¼ïúhY3ã1kd)ù©Ç¬]6çÓesÞyCÞ°ä[»½ – ß.†NJ š¼‚ƒ˜yò/1ä_ò½ÇŒ oAUœ’|ÿ´ A^ƒ“Ù¼ù·òoyFò2VN’g¦Ö0pï@þ=†ü»@Þ” y]„p’|ÎWßùM ù4ç 3çÁW p’¼b漃oü6†üV _XFU&y§È—œä X2@þ#†ü‡@>evØ^N‘¯˜9ŸÏÊ€ü!†üA _Y†üøø¹ƒ“ä C^ù#?Æ? äKf“ÊÁép’¼f¦MÊ lcÛ˜“4ç9òèdNÒœ/Û¼æÈÆÿd̓nz0Ú Rœ"oY=ð ¿Ä¿D‘7!ü1ò¯|C¾ 3n“jC'mNUŽïB¬-f6Æ0³«ÇMâÖ8©B8%ùÞoƒÉ?;“Ø®ü:†üZ _0¶M–¡ÖI“˜±*ÝÅŠ«ÒÆX•öE’gT¥›6`Û“ؾñä‹”#oT'%oɃ¶±`Û“ؾKä-7çóNJž9Œ¤ùx±`Û“Ønx=?œãÈ9Ÿ…pRò†‘|p0‰mŒIl·’ä 7çËþÐ||cååý;yé)»ù{wß×´WÛç¶A¿|¿'¯þÀ÷Ç—túúÐs¢¼ýÊN¾z¾y‰©‡µÆYçàøiÅ$íã.(òãÛn/í:y¿õ}üW@žø»p©ä@¤„º%³þÚ ÒÜÁ7ÐúæÎÖõ8ëˆì¢y¯Nuÿ}¼—éàghý|gëÙx±â@TëÆ“Ð¹ÜÕHç&.C8ÕH6RùÜ&¿C#ð¯;FÑÚNŽâ­'¯ðº"ýÎ"ÕȳJÓd„ï¾~Œ€Ãë}ô;~³ð+À¯1ðàM|3úÂ×›sü0®Àõa‡·éèWêfá€"àŸ£é½þ\ÅÀ¡õψÖwó[±°ª4 áÒ²[¶ì–m ;i)˹ dµd& áQÈ.fq}»eÈ.j)GŸÊî® d±dI³ã® dµØñækw×r\ï“õyÃp|¤˜·‡™Gï’õ‰yEp„ø1YRä;1ö ÿ;ü€áûà+“Û~$~ÀðO‚üøÕ)YŸiŽíË»0<ä¨mïYÆ»0ü,püĨֿ†ã0üÃЯü9QYjøsP’cøUàø›¬º›÷;¸“q>¼yIÖføÊp‚x [/r‹á« ÜpׯÉÚ_Y®‘W¡_ótOîËîÖHð„âsæyƒ·&ÑûÇ <>¸ð|±ƒãp WÖ¿ÿê‹ÔPw5ÒîAsð¯À±NÞ¿ø7×z¸Ê ‹á×PÅäãN|Ü’-÷Xç­‘­ à:ø‘‚w+«ƒ7„w+k ¡÷áG~Ò·z{âMJ†c¢1üÄ7²;'»5Dò<\¬óñ¹O!Ѿæ¦s@>)ƒŸ’Ýf€ŸbZwðMdë\Í ¾;‰óü0´Lçç$·ýÝ$q†ð$JN;ªïVéýw!­V‘˜ÁŽO®‘VÉœ>¨0›v¢ª>JuñÙEÝ{pDEgý=Z¨ÆZŽåècôà§A69 ¦ÎÎ"Í7ì §o;vƒŸ8K)ì{zîFñd¨QtÞ¸ ÈG%­;]ù¹bŽ\÷)äŽr+a*ð°ýA'£û¼ÛØ>̉Þ'­¿ü&_ºï]TFùåáíìfàÂø¹Ý‹_ Wºªžˆ Ÿ¶ç£#Óƒ‡–l«"ú{Nd£v%P+ ?†ð! Ù¾IZŽ÷<Œoá}^Bx n;^ŒnT¿õ• ¡^B¦¿B‘D­„ÆûHŽ$¤¬ÊI ¥…%àHBeÆHȨ ÁÃ0ôÎ^1RnýEЛ ¡›úž¥‚cA¤7xØwq¿><Ü'Z¼¦»hóÁêö£~ñ£ÊÈí‰zTÎ~ëo‚„~X ¥Åm•@]©á Á‘³j°tÑQðPŽº¬ =‡ÒÑçàÁÃ*ËíW¥!Üõ<Ëpë?‚„~á+.G‹®=R< ÏJtnÉ)Øye n{OrûD/¿ªÄðPŽù•‡):Ñå!œ”cái«ŒÙ'´*ÈU–š ñB6}µj¢‹:µަJÞ‡Qaò:Q¸uÖy ž¨l çˆñ[ŸÑÔ´„º(ZBJå‚ãÅ”v0–M+ GÒ%¡V@i®…¹%¦[A)!G6íÏhjNB&å$d2§45åoé5½Âp¬nTÉhê4Gð0–.±7S¥B´Tªqë3šš‘Ê™½,³n ݦ ÚËLi0KÈ(ZBÄâÁÀ½®ÖCO¾:bZ9n}FSgjj•k…áH[¥³—Y·98ši©ÍŸH3 ›¨ÚŒRµû'.ØÉ·D­W'AŽ­¶²ÜÒÙå¯LáÕƒcM­mIz5SHêðሣ*˜9dµÂp.†,ŒILò¼Âð0ªµtÜnò"H(Íè½Ì…àÄT)˜½,- †ãQ,ªY=ð0¾± 4Ëžˆ,¬®Tw[ŸÑÔœ„Ìíd„%”Z§45³—¶Àp,!]ÐòNƒ(“¼êcñP-ôv'¬0\ÒÔ—uòRpsè¶L„ÀìÁ‘„ôm©U–a8ºDQÖл½µ¸u¶†EºõÓHü%h$ÏÍ«°u딨#4’鼯Ñ#N®ïÃãÞ_nŽe/û¸zñ¸çe†àhÜ»ÙEŒ{ûCnGã^©Œ÷"‹nxp4îUš•Ô¸·ª=Ã}Gãnu™ãÞûtpëÁþÓÍlSÝ®vXPžè>‚.–y¯øVßaܯw]pÌ8w• g<î,\Gã®óÁÛ‰ÆÝºmÑÁѸ›t<wSÁŽåàhÜs;,X4î•Õ¸ïá¦ë<½ÞU‘ã¾£á5E•S뽫w•#xPT«KàìïiV}Ù$fÜ;u¡Äq§5x§Õù§Á1üÄxâI Žà¤:â48‚Sê¼xâ48‚“êü ×|JrÛNœ>«ŸNÓ†pZí>qšÃ)µûÄhZ 'Õî§iœT»Oœ¦EpRí>á €­ý”U¨õY½ùèøt1„Óêñ‰ÓˆN©Ç'N#"8©Ÿ8ˆà¤z|â4"‚“êñ |KÚ¿Z!¸¨ßšßäÕÈã³#.pòŽâ-ºˆ0ÊìÙgŽj%EÿÖªÿS·ä¾ 8š´=ÎT~Îü'øêÓˆƒŸD÷Ý;w#4’a8)}nGâöÕöpw#*±¾¯®7š¹TKo¦Êÿ#x*Ö…z™ò …èv ei0\¾’à9s‚£Ê<zëÃÑ,æØ‡aÚöà/¢#eø …$?w­>‘¯¯?a8íÊpçqº‘Nª}=ñJú†ÓÞ€ÛW»urf¤­Êþ*˜ÈpLàÈpÝŠu8* ]ÜmøÖo{,JMJðz3î\ë¦'Æ&%¸‡N´žÅ=ãÎI^ VÊlM ]…pÔz§àʹqßþ&Å̺lpÛoþ>ÒÁѦÞg`Ÿ(ˆqp¤øºûæ'œÑéÓ±ü•ß ;i{”Œé¢Fp¢‹·[ÜE¸ðup¤v;«‹é¢Â­“e¦iö«¨TŽ.„s°ìšß;àø¶ ±·Ðûåa=xXY7Ę́÷‡úãüõÓvøðþž¼$Ý¿|¯[÷ úÁq¼Á3€g“`áÌÁ3nn¹Ö-?äg8ž9ŽÏIï@˜áx8JTΛCúzZÆ8Ñî_.’iðœÎÄøuŒiìþåni3—þü!øÐùÕå÷3}Ý®WcÚh÷/—)×Ýé~øýôp]tð.htøW0Öÿ^vÁÏIé·~[Ç<ù¤!­ŽZïVfNµÞZ÷~ëïç¾õ÷sÐDҞžð>’öì¾ê-IxÍàôý6¼—ë·×úõ›è{ˆÀG‹¾o½à5G¾–É×@¾æÈ×yh'•×úu€_9òW™üÈ_9òÓÀÖ“‡Öyò×é´ÑÞ¬{oxÑodò o8ò@ZçÉ7Ég‰q­o†Y·9£…ÕG¥ xò|(áK(ɵ+(Âÿý‚¯ºP\2‘ñ ri{øÏHžV›¢W!œ"ï•ðÈÿäÛ¶o¢û‘EçZÿáZÿ¹«õ¢uªÄÄïw}-o’jmL×e=އ¤súÝà¿çÞ×ð82ðÖ¸òZÿÖ¸Ö„Ö õ®õºõa“zÛŽ{\÷/ró÷¸î·a—™~åíqÞÝd.¼õþÝ·þþM4òtSßî‡N?_M8vZ¹~StZ!øaô¦Mᾄú|Ëù¾úzò+ôäzò+ôá{2·ÿ½¢àbOšá«FèI3íÉ'àà'üU ©ÇFøž4“ž8M=K=Ùœû¯z}>Ûž>ççöT¢?…“Ü+’̇Ռ ©Ï¥Ç;ÈA)u A)Mà¾Rš´(¥Þ+¥€#ÕÂÔ‘S GA-A-9µpÔÂÔ‘S ÇÉ4!ü|E¨…#¨…#§Ž‚Z8‚Z8 jájáÈ©¾'¿Ð“_¡'Ðß“ ©…#¨…£ Ž ŽœZ˜ö¤á'üU¨Ž ŽœZ8 jájá(¨…#¨…#§Ž‚Z8‚Z8rjá(¨…#¬¿ãCja0uFòä0 f^Ø«N’·÷ÿ!Éßohu ›N;r:í(è´#è´#§ÓŽ‚NûöÇé´?A§ýNûãtÚŸ Óþ@§ýq:mtÚè´?A§ýNûãtÚŸ Óþ@§ý :ítÚ§ÓøžüBO~…ž@#|O&p¤Óþ@§ý :ítÚ§Ó¦=Ñ!ü|Eè´?ÐiœNûtÚè´?A§ýNûãtÚŸ Óþ@-üq:íOÐi°þþbtÚÇÑé´?A§qäí=äHòè´?ÐiœNûtÚè´?N§ýñ:íã<ê´î_¤NóuZ÷Û Ó¦_y:Íÿ¡Kñ@ÿ§×ïŸAëàíù[àý*ó¾zî_)½=<)½•­_¿ÃFÆ…5wl¯õË¿pä/2ù ¿pä/yh'™’Ï}É7¼áÈ72ùÈ7ùéJ[çÉ7òŸ­‡÷Êj:i=eÅ“àÃz÷¾ê”Áz$oCø°°‚©=YÖÝoòžƒ·¬'˺‡÷Ë: ÂÀaY÷çÍx½Ñý îLUêbÐü”19‚÷—¦ôWÃâï¿êu‡÷ÕTwø?„º£ûmÐÓ¯<Ýáÿ0Õ¯‡±uÜHßú Âqë]üЭ¿÷mškÒº¯¹ø¾ðAs¹¯¦~ê>Õ\cë×o¢ïƒæš4׿pä/2ù ¿pä/yh'™’Ÿj®Þpä™|äŽüô‡@s­óä› ù‰æzÿàù?™üÿ É{ ê­o¤×‚ÔÊØ¼¡•11‡zø ½¯¦¶\0¼>(¨`ýx§™ÍÇ Ç™ãÇÑSáÇ»8žGŽ˜ÊG>„mUÜÃñÌs¼ç:§žp- ¸&ÉwÎï!_/#ÿ3CþG&ÿÃÎ`{ù’üý}vþ©è¼Òz°ó÷ð~ç82ðÀ ¯aS®¹M¹6å¶ÅšÛ”ka[¬a[¬¹m±¶Å¶ÅzÃôµ°-Ö°-ÖܶX Ûb ÛbÍm‹ù ¿pä/yh'©…m±†m±æ¶E|äŽüô‡`[¬a[äÈ75»-n>jXï5·ÔÂnPÃz¯¹Ý vƒÖ{-ì5ì5·ÔÂn@rœ*Tã™çx—Bð,àNÀžBÈÿäïW¨5(ÔšS¨µ PkP¨5§PkR¡îuÊìu1s3{ƒBí~ô±ÿÕDÏÁ}´îŸ…öC#{®‘½ÜH?ZݾŸÆ$Z?®èÜ7ÒGtMþ–ÑÅ72À‡ˆ.÷UÑ5m}Ñ5¶~ýˆ®)|Ñ5ÀkŽ|-“¯|Í‘¯òÐ:O>„O"ºø•#•É_ü•#?ý!ˆè[çÉ{pÑ5ÀŽ|#“o€|ÑoòÐ:O¾™H>ð4õðÍ-,Oéóäø 7} Môf°¬mÿ÷ûÀUbïÓ›hЛÓÉuÓ›Áßí“ù|½ÙÃ{½p¤áHo2QÀ}Á) ø¦ø2Л§7gà7½™ z3½™qz3ôfz3ôfz3ãôf&èÍ ôfÆéÍLЛè͌ӛ™ 73Л§73Aof 73Nof‚ÞÌ@ofœÞÌX½Ù ð†#ßÈä ßpä§?„ª'Õ“qª'TOª'ãTO&¨ž TOÆ©žLP=¬ñ,Fõd z2Nõd‚êÉ@õdœêÉÕCf9LM6+è ªÇrªg~S=VP=TåTTÕ3Iäð=ôíʶ z,§z¬ z,¨Ë©+¨ ªÇrªÇ ªÇ‚걜걂걠z,§z¬ z,¨Ë©+¨ ªÇrªÇ ªÇ‚걜걂걠z,§z¬ z,¨Ë©+¨ ªÇrªÇ ªÇ·1ªÇ‚걜걂걠z,§z,ï~£_Š›è:ÍÁݼáÜoÓŒâiÊÏØ:nä‰zB.Lù![Ÿ¦üLKóNS~†hÜ ïg±ï|Ð6ÓL@OÛ}Ÿh›±õë7Ñ÷AÛLáSmü’çk| äkŽ|-‡Öyò!|r@dÞèóˆù+¿rä¯A®ýä€8¶Î“¿N§Íô€(–ÎT¥@¾¡Þ\T¥@ZçÉO× U%ý>áDUòä™×_§wDÓq76„¬ Æ}^Á‘<­.6?D¯B8AÞ×óCpDþ~¯`ÿò-õ¸së¯=O¼‚Ìù¾W0xMØ™˜jWð=ßà±n Ïøä¾4õ ùlùŒÏAö[ç-›ø›s‰¿¹—øk—%þÚ»í²Ä_»,ñ×.KüµËí²Ä_»,ñ×.KüµËí²Ä_»,ñ×.KüµËí²Ä_»,ñ×.KüµËí²Ä_»,ñ×J‰¿ÞW‹ò{-ŸßÛ×$šå¸(¿×òù½®õŸ»ZGù½`QØei¼vY¯]–Æk—¥ñÚei¼vY¯]–ÆkïJãµËÒxí]i¼vY¯½+×.Kãµw¥ñÚei¼ö®4^»,×Þ•Æk—¥ñÚei¼VJãõuÏ’l]»,[×.Ëֵ˲uí²l]{W¶®]–­kïÊֵ˲uí]ÙºvY¶®½+[×.ËÖµweëÚeÙºö®l]»,[×.ËÖµR¶®oŸ,Iʵ|R®g› …¤Ü‰†Z{k—åÞÚe¹·vYî­]–{kïʽµËroí]¹·vYî­½+÷Ö.˽µwåÞÚe¹·ö®Ü[»,÷ÖÞ•{k—åÞÚe¹·Vʽèˆ)¶–O±õ5ÔŸ ¡ØÛ‰†ZIk—eÒÚe™´vY&­]–Ik—eÒÚe™´vY&­]–Ik—eÒÚe™´vY&­]–Ik—eÒÚe™´ö®LZ»,“Ö.ˤµL&mW~¸¿n3i»²¹‚ïÎìWÃâ_’Ik—eÒÚe™´vY&­]–Ik—eÒÚe™´vY&­]–Ik—eÒÚe™´vY&­]–Ik—eÒÚ»2ií²LZ»,“ÖÞ•Ik—eÒÚe™´ö®LZ»,“Ö.ˤµR&­÷Õ¢„Y»,aÖJ ³¾¼$/Öòy±ž.pòbýízIú«]–þj—¥¿Úeé¯vYú«]–þj—¥¿Úeé¯vYú«]–þj—¥¿Úeé¯vYú«]–þj—¥¿Ú»Ò_í²ôW»,ýÕJ鯾‚Z’åjù,WO= …,W_=.IfµË’Yí‚ȯA=.Ifµw%³Úeɬö®dV»,™Õ.KfµË’Yí²dV»,™Õ.KfµË’Yí²dV»,™Õ.KfµË’Yí²dV»,™Õòɬžzd“Y­”Ìê«Ç%9«vYΪ]–³j—å¬Ú»rVí²œU{WΪ]–³j—å¬Úe9«vYΪ]–³j—å¬Úe9«vYΪ]–³j—å¬Z>gÕ×0™ a؜Չ†Yšj—¥¦ÚÁï7± 5ÕÞ•šj—¥¦Ú»RSí²ÔT»,5Õ.KMµËRSí²ÔT»,5Õ.KMµËRSí²ÔT»,5Õò©©¾†±‚†aSS'fAª]–j—e Úe¨vYª]–j—e Úe¨vYª]–j—e Úe¨vYª]–j—e Úe¨vYª]–j—e Úe¨VÊ@õ]cKM-Ÿhêim6ÑÔJ‰¦¾Ö^’Oj#óI¿¶õÿþoýùszmÿ÷éýßSiûÿ¯ýyµêb/V§6Á_m§_©RS_§_éŒüªZ4iJ|u ¾²…&¾ú|UZâoõ¯Þû¼rªÅõ%ø[•%د¿BöºÀ_½->yF|u ¾zz"x½†+WD‹o‡ð+ªoŸÁW*3ÄWh„ª µ æDfMN|uçDF°ßo{E|µþ–¢ú¸ÿ ¾²Ôœ8¾-f%ÑÇãÍ B^GÔ"ÅëôŽæjI|ÈKŠêé®ÚŒúJ…£]R¼lТ-‰¿õ¶˜—ÄêøD3š’ý%œÑ¦ ¾ú G¨¨ˆ¯êào©TãXKe1¿êp>)b´ëúŠâʾU:ø«ïPYEÈþ;\ÛVS %ûïPijNü„ú¾¢VíÏឯúÑgµÜ_( 5¬ŽÃ§÷Õþø’tªý­Ÿ³ÿÕYÁWJWER™,«Ðßú¾ëoýnü¯Zm©lnÐߺ2+øêýŽ_¾ß“W¿¶ÀSžã¯ÎŸoÉkæ¥ò’û[W¯ÁŠøªULëIVn6ì|ÁWßÉËä+UL‹ÞWºÈ,ÙâûäoéÜ_m&_Ýô*úê<åUaÍÔ}õä|ë³=RN[Ô˜ý+*¹ÐñÕ}U_…užñ·p­B^¯()_[M|…²ß ¢(Í\ zuúU±:eOð:í¯2B§”•O°ï÷Çù¿u¾ç«ÏjË~×ΜËT¯íA^/+Y˽µ3g½š~…í·v„‚¯«ã­•jø·°ö}û<$?Ùä+“qì3ìÛ¿õö7ùʦŒ6™¤œ6ñ¿Ò”žèµ‰÷•*™7Ó§'&-ôW—éß"4À '&‹Ò/_A2p+0F›ø_•YÆh“Éß"×öwð•"¤ú$ew‹–Xïÿ³ŠÑþWYž1zbú·¨Uû~UTŒž˜J5côĤ:c4ÀäoB}†«‡hu¼~¡>>#´zoOôSö„$VáWV“Úäå8ûU;ÚÁWñU;ŽÁWO¡ ÃUKéÂóª]«éRø«öœ~ÅÙ&~ʦR¬69úЉ³M¼¯òªdµ‰¯åJV›x_ŠÕ&G¤MÛäíxm2i‘°†n:ç8³#‡Iø*§Öö sŽ>ùŠÓ9þW%«s|^…ætŽÇK›”±`&£­8 Æÿª¬XÍä³Ï-ÞŸ!{b„núËŸ«†³†¦KqZîˆt¥å¼¯2¥kh¶ÅANVZÊéBÿoQ{Ç×µÈêÂÉêÈ9]8‘jÁéBÿoçí›.œûjÐ…3²ß¿Øäü5•WÎé‰͔qºp²:0¯ïv®®N“¯2â«Þ⛲/8½ú‡|0”^ýó»˜qzõÏ;cËéÕ?ß6¡5ævòÕSn9íëñÊJVûþÍY¢½öý“­´›öõ%aY‹ïí|”öu_é*/8íû‡|C”öõ¾*(M¤¹w[ZÎiß?ßÓœqÚן99«}=yYÊ^´¯ßG«8½úç[î§WÿîÒ«“J9½ê÷‘íÓùž½êÏû¢äôªÿ·JÃéÕ¹½ú‡Î|”^õ¥Jøïozuò•åôê² )½êóÊrN¯ú-Z,‰óæ´óÂÿJkNûN¤šsÚ×gOø}ozu2s*Fcú™¾&ã,Qï+ËkLÿo•ŠÓ…þW–ñ¸]¦©ã§ ý¯²’Ó…ÞWJ±§ßI‹¬.œô‘ðvºÐÿª ¬ZT˜ "v¾WT 3”.ü ¾2EÎxܦ£ÍyÜ&-R¶/ÊÏ ÿê 1§s¢`´ÜDöÆ2ZnÒb^1Znžò)ôZÎÿJQ¼>÷ðúÚ ™Ãé¯éŒÆw:o‡Î?ͼ§ìÂÏ䳞|U•äß ¾*)¿Ü!üЏyk¥|U`½z>î’×õDªÃm3¡å&ËŒ–›k±³1ϛɜ NåÃÚ>¬dO`·¶S=ùJru_ÚÏDþ-4B?ÙaÎ ÛkòéßÒL?ßïéãüWç{¾ê%áEÝow»èy3û·ö5:w Ý½ý[þWåg:‡_™’ôZ_=_µš)øJçäê¾Rœo{ÊË0;²ŸÌ«Kî ã}Õª{îÞÊÿ[Š˜9þ=I¶–9éLx土ÉÿʤÜIgÒ¢âv÷ÉW¬oÛÿŠ÷3ù_e–Û·ý¯lIù™ÂÚ%u «0¨œÇW”þ_åÔ¹#üJQ>÷SXÕ€:‹{ÚäoUÄÍõª•|í³¿ÙÓ¯vè+âoušüUù-æŠð¯ïžXÏé$—“°¶‡ÕáUeœçtò·‹o˜Ñ“¯2ÎÛYϬ¡W”‚Ož­úY8ù[”'ð=LÜ}"íÂ0ù[W†™…Ó¿Å~§y´xßfáô+îÄ:•}ÊØr³_õ¶Á‹˜÷Ó¯°ì¿ûf2B¹"¾Ú_Q£ýÝï0“¿U-öûãôo³ðó=YM³+3nïð¿Ê-±á}¥Ê4cV‡ÿ·”åü_^Ì®°Ÿ~UVÌJó¿Ê*nW˜J‚Ûü¯¨SæëËk˜³ªRfÕNäÅžù&-’'°0ÑÔf?áU¤š9Íù_k 0ǔۇ¼¯tFÆO|…‹ÒL½gk:Bܽèä+ÍÝ‹N¾ª8=æÓzbž:ý~¢KÍœù¦-Ƴ5ÿÕGøUnhÏÖñ·‚¯ö÷|Õy¶îø[/múåK«Ã¯4¾‘Ú!ÍDí »P3µêŸ(vX›ÑkCÌ\‹û­j-m§%ž9ûW•|Mx·Hƒo* ƒíœõ¥=×NWá ü>¢¯*æ†eª¿°ýõÝGñLæ}ž_탯(MþÝ®¡à«,#y½ýM¾²)sv'F}õ;«ÔfØ3ßXpûcæ;;¹(÷•j•\Éí™ÈäNM“¯4»?z_†³D½¯´å÷Çl&aØgþÖmôw ìÎVÓô^võZ,¨˜@”ÂoÈ;ü0™ZQ·Í(Ù½$oúìr]±ûcæÙT å!„¢üÑ·ýÑo‘¼wÿ¥š±û£?ïSîF=ÌœgöGÿoiîF}"{ÊžöÇlÆë3ìÙ=7ꓯJÚŸó²š~•3þÕÉWD¦K«|Eœtv¡6¡÷¡@›ÐZn‡4€°§ewíi™oúÑ݇à+:ü ïøêÜÎÂ×ݯÛþ8YÄW§¶ÅÒ_CU©¸o¢Ø}(»k‡Éæâ™úÆO1Î5·ÃXÿV„=YoÖ³ñäþßRücåûŽÛãUin‡±¾ÿ‹Ýa¬|*¿í0Ö¿Ãgw;_ˆj;˜Lq{‡ÿ]„ª+˜Js{‡¹ùÁõ λâ}¥RÒÇ÷þ-[r{‡Ñ˜ÃÞagn2†½ÃÿŠŠŸ8QÕ(˜½c"‰ŒÛ;ìL”ذwØ{¢±¦_±{‡•mò]¸%mïÒÑö.íi€”ðÞÝÎå?RzÕÊ–ûM¯bÍ4Õ…¯µ:!"¶àuÏW›3úŠóèúIÀšòõ#ä}¥ŒI™ûŽIBqÅéÕI‹)§0ù[†»É˜~•1ºÐÿ*³£åü¯Ú“£å&-R·¨¦¹j‰º ãgšðJ¹¨)/.Îj"{Åyš'‹Ò÷½.œ¶Èyš'_)·<ýŠ‹¬ŸÊË`|•2y:“¯ˆ3rç-x]ÏIuГ¯ ÂJÛÒá¡`Ñ–¾ºÞóÕy3kñÙi‹¶ª¸¯®ò ‹{8À]u3çíôºú^ýïÿþv †ËLDyLP-1.10.4/Data/Netlib/wood1p.mps.gz0000644000175200017520000065242610430174061015525 0ustar coincoin‹L®9wood1p.mps¤½]Òä:¯¥wïÏ!'°"H€äeû7Ñ}ŽÃnGÏ&&ßzw%À$*×¹:õíZ%e&AXà£ÿø/ÿíýý¿ÿñŸÿù¿¥ÿûþŸþŸÿüÿïÿü?½ÆùïÿùßÿËý¯þÿÿå¿ü×3g2"ó§lþTÌŸØüIÌŸªùS3êúOé42÷’̽$s/ÉÜK2÷’̽$s/ÉÜK2÷Bæ^ÈÜ ™{!s/dî…̽¹2÷Bæ^ÈÜK6÷’ͽds/ÙÜK6÷’ͽds/ÙÜK6÷’ͽs/ÅÜK1÷R̽s/ÅÜK1÷R̽s/ÅÜ ›{as/lî…ͽ°¹6÷Âæ^ØÜ ›{as/bîE̽ˆ¹1÷"æ^ÄÜ‹˜{s/bîE̽Ts/ÕÜK5÷RͽTs/ÕÜK5÷RͽTs/ÕÜK3÷Ò̽4s/ÍÜK3÷Ò̽4s/ÍÜK3÷Ò̽ts/ÝÜK7÷Òͽts/ÝÜK7÷Òͽts/]ßËØúÌŸ’ù™?eó§bþÄæObþTÍŸšù“¹³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï&³ï’ÙwÉì»dö]2û.™}—̾Kfß%³ï’ÙwÉì»dö]2û.™}—̾Kfß%³ï’ÙwÉì»dö]2û.™}—̾Kfß%³ï’ÙwÉì»dö]2û.™}—̾Kfß%³ï’ÙwÉì»dö]2û.™}—̾Kfß%³ïÒ¿ûîÿúŸÿïÿY-ÿñçÿÿý;ÿûüÿןÿýÿúoÿ×ÌÿÿýÏÿúÿý·ÿ˜EÖ,»~ ›3ý[n½Ìÿ¥ãõ®½þþ¯ÿHiÇ*ÿ·&Sêñ·Þòþþߙ޿ËÓ©äõ ×»2Rÿ(¸zjúæóûêI]=åƒ|9棷׻¾z_»¥C¹úì¹å-_½Ðñ³$yVWç£Êë]ý¨»ªÑÕ³þ줮žßWOçÁ¼œú£—·¼$õ‹œGpóEÿîýxß|Ùº:GWgý»—èêl~wuuîú;‘@.úw?òü7rl0¼åô(dþáÚŸÍÇÈ?B¦ÈQÙ ™Ò@nB†öB&•£Eò¦o]Ø ™ñ‹v_¾„LrB†Z>Îàê*dòøÝÙ ™WÎGöå:dF¸W7dƽ7ŸÍgOÉ ™—"¾¼˜eSý‘¤wŠBFÔnSºÝ}¹™qùæ† )¸y2cOrCf†¢/·!“fÈüyÙPÈŸ?ÜM`å'õŒGAÉ´Ê×ÀÊã“É ¬^ŽÜ¹ ¬vŒDÉ ¬\Ž?Õ¾'oêWèRœÀJíÈ\|¹ ¬tp/°FÈ´Hþ^\tþù}>‹ëу›·Ï¢³x5þÝž¹ ¬Fî³hFõå6°zsk¤=úáT`•CN/°fPš/gýÍ‚Ñ ¬rÔè›×u”ä>‹èà|ó:°ú‰ËÏÀšÿ‡ü&°ÊÃ'–Œ„VùÇ‹êø[Þ«Ÿ&Ñ)ÁË$:ê‰5–ö\Ý>±ÔêÐO¬‘~‰/7O¬ƒËg`„{<.ƒ›Vâñ ½ÀÏjÉÁÍ«ÀÊ#,›X#ÅûÓ õäM}ô³u/°ÆšçìË‹Y\½zuŽç]ðÕ©Àñ“‹X#Ç£æËõëêV>$õ@®kì}îk¬‡êËM`’7«lï–¤¿5Q;êYVù¿xU'µéËßXe¬Ù@^Oµð[^M*¨ÃÚÈM`Ñ{mÖ®âªå@Þô\ÕÒnïÀù­NHŒœÔƒ…Û{qµ¿WÏ#2j ï:°Hå3½êd*å@nÒ!y¯Í®‹jsåcçÓÄ{i'µlÆ®’"¹®¬äºj>z OvK{ËuÕ<ŸeÜVOé-ïæKé¾Ün¨§8ƒÆÎù ¿ñ\äâK6".ýÝÎ…’}ÜŠ¾ù÷vÞõ²Iïíœû( ‹/Ï:WhùïgOj;Ï#ËjÜä êwWÛyùr³§w¢“þnçtŽ%ÊImEË»úRj nÞnçé}ó&O¾y³§wÉŸÔv>ÖlôÍÛí\}ówÚ™s>û{§Ò÷f•DóÔƒÏ^í7ÿþìj§›`´êôN;òœ÷g¯úQö§ÁìÈÍN{nEœWÆ®°qu'âþÝ竌o® ¯ò»ûï@(ó[ÞU¹–ÏæË»þì#2^ï»zFµRySßoæü–wÚW'µÏªè}uúýêFàÎU9Ó».'!~Ëí>Ÿ|¹ÝçÏ¿ÙýÝççWÊ\ý½ÏÏ5÷n4‘ÞçG­\ìª{_ýßvÔ}þ»œÞ?ۼǷÜÄ{#_žÍÕÓ߀¥÷N;œ|WÏê³î}uµÓ)¼zÑ¿»ºúEÄÕ âäÈ;×D\ë³Ã@ú›o^Ä•£´JŸG£É9’¿#î˜û&;WÇãCgý-ˆ¸S§FïˆN>«+·wö¼FÜ4γ7ÿޏÙãJ^ÄL·DŸ]EÜÜg•\gVGî-›}þý˜Ð7â¸W'óÙOþˆ¸Ÿ¤åÏä”''}q#nl¡ÑgÏæê곫Ðxzè좹÷só͸3üêlÄ´q-ˆ¸±<ûFÄõGGÅH×Ï÷î6HÊy$ÕáxïóµEÈ“®ãºrCÞ«nüð]§FÝo¤£fñ$mdÚÁÕÍ>_‹× )óÉßu\:ró\°QÜòܼiH÷\°tާ\pu“Qw*~ƒ„9¸ºÉ¨³ººjé>ºz1u·¥/¦©Þ£–þ¡êw6uœnõ°¥Ÿü–¾­ãzØÒ?ý–þüQ>ä×5£ôAƒd-×~åkƒÄ–kªA"dËÈ«.×t`ýMÛÓlÍ& äjKË­y ’4WMóåÍ$ÊhQ¹fåA¹¦$³%ÏÜ$ÎRšÓ Å@Wqiå:q&]?L$øæ“yŒëjïŒÊ5+ʵ3*”Ê~åNø•?í™›ˆKO$åZJ^ƒd-×(*׌Ê5+Ê5Ý ±åš‘× \S ’¥\³ò \Ó [®y{\®ýÊ݈ۘI•k‰ rÍÈŸ—kVþ¸\Óò/Ê5+\®ùórÍÊ—kFþ¼\³òÇåš‘?/׬üq¹fäÏ˵_¹q¼õŒËOZ’}”U›²){÷šs"*»xgV}I ³ß’;õ;-|G\>55o`åj¯KjÞ@EÜÈꢫ«ˆ›?ûûê#ŽúÈË’^uÙ¸³5q[’uý”É~KrþîNKrnCºTµr½Ï«.¾Š¸ñ•†W'ýÙ½–äøÝý9ÎåÉI_„ýˆñ^}¹¸3{-É1-›ÏþöOTÄÍ-4ºz±Ÿ=oD\Ž"nTÔWžEÜxL$7âòQ›2@LÄI ä&âTÁF\Ñ«®DÇÊ;2]ÝFœºú߈û ¹¬Ì^+'›Â×¹8µllÄé2°„÷.—ˆ‹®n#N]ý=–6BîÏQ/ONæaR¢ˆ äKÄ•(âJ ·'QÄW_"n§Ž+QÄänÏè¦}£›¹Î¡‘U¾Ý-rÍ5ºg˪ørõÍמÑMvôÇÈuK²ÕÀèN‹[K®Ñ]Ä1ºSc;™bä¤ÇÕÄ5ºÇ(ÁÍ«:ŽáÀèN5øæÑ-ÝgôÍ›:.±ktŸG¯Ág3 I®Ñ=Ê>»©ãJ Œn‰V1ºÓÝ5øìÖè&ÕG§ £›ž݇¶ÙëNÄýí×UNvخꛯºXÕ3ºç3R|¹é×uï÷jcÍ~ÞügGõ×èNÑÕm×gÜüÅ;2rRCSÝ‹ÝJ¾Ñ­Ì^e€ržÁÕM¿N›½Ö莮N‘Õü6@ægïÁÕõ3nÊ‘Ñ-þ·Ý*%Öu\þs4Г›:®÷À莮n븼q5ˆ¸Øè6×DœotftftftftftftftftftftftÓ}ç„.ŒnzftëˆKçFĽý¸5«ü•¯~œÍ*•Çc¨¼ê#6…D 0Zw P 7îWqÝdÒƒìFÜq’î”w ººuÔÕ;0ÊÃȵ;PkŽÜòå)˜|XÜjÜtÈ+Eî@põÅh®;PûÙ¹®ã¸§È¾ùÅÀ¨ÈÍg§¹ÁÕw`ç—£ˆ ý8qåYĵñáWȉ¸:ª‰8à”¹‰8Ý`×wšUW‚ˆËg ðèê6âÔÕmÄýAÛyrÒh)AÄÕ@ž‚é¾%âÎÈͪë‘]ÝFœºº‰83²ørYµC|8IYiOÙ;"UŒhêÏg+»pÍÙZ¨?‘\ÿî¦AYl¸.Z®kXÒ\}D@ õÇÈÍ(Ñ'–9¤žq9êUþÊïqZO+×´â´¼À*óoyUK(Ofq‘‹ÓšÏ“È› ŒìÖ¨:š/'»¸È ,*ãâÁÍ“³¸8­!ïÜRÞóP:°æÁ£àæu`{÷©?oàË]sëÅåädÍ'÷ìM:£ož-ÈÌ…“ŒÀˆnÞ–ºyK kÁÕmÖ¹Ýzmq¶D\®3/l«áleŒ³•1ÎVÆ8[ãleŒ³•1ÎVÆ8[ãleŒ³•1ÎV¾àlÝE\"n^çµàzòŒ+cÑ/$¥Œ¸2àÊ€+c®Œ¸2àÊ€+c®Œ¸2àÊ€+_¸î"®`Ç;wIæÊ™+cd®Œ‘¹2FæÊ™+cd®Œ‘¹2FæÊ™+cd®Œ‘¹ò=™+Œ8"nŸÌ•12WÆÈ\#seŒÌ•12WÆÈ\#seŒÌ•12WÆÈ\#seŒÌ•ïÉ\ùb`9cd®Œ‘¹2FæÊ™+cd®Œ‘¹2FæÊ™+cd®Œ‘¹2FæÊ™+cd®|OæÊË#sel`9cËXÎØÀrÆ–36°œ±åŒ ,gl`9cËXÎØÀr¾XÎË#s=蜡㤲Ê2WÆÈ\#seŒÌ•12WÆÈ\#seŒÌ•12WÆÈ\#så 2×]Äõ(âòÎä|Ô9ñ]Cve Ù•1dWÆ]Cve Ù•1dWÆ]Cve Ù•1dW¾Gvå‹#Cve Ù•1dWÆ]Cve Ù•1dWÆ]Cve Ù•1dWÆ]Cvå{dW¾8"1dWÆ]Cve Ù•1dWÆ]Cve Ù•1dWÆ]Cve Ù•1dPÇ¥hædÙ•1dWÆ]Cve Ù•1dWÆ]Cve Ù•1dWÆ]Cve Ù•ï‘]ùâˆ@Æ]Cve Ù•1dWÆ]Cve Ù•1dWÆ]Cve Ù•1dWÆ]ùÙ•/Žd ÙU0dWÁ]Cv ÙU0dWÁ]Cv ÙU0dWÁ]Cv ÙUî‘]åÂ/²«`È®‚!» †ì*²«`È®‚!» †ì*²«`È®‚!» †ì*²«Ü#»Ê…^0dWÁð‚9àsÀ æ€Ì/˜^0¼`xÁð‚9àsÀ 怗ûÎI¹pÀ †ì*²«`È®‚!» †ì*²«`È®‚!» †ì*²«`È®‚!» †ì*÷È®ráÇ ÙU0dWÁ]Cv ÙU0dWÁ]Cv ÙU0dWÁ]Cv ÙUî‘]åÂ+²«`È®‚!» †ì*²«`È®‚!» †ì*²«`È®‚!» †ì*²«Ü#»Ê…W0dWÁ]Cv ÙU0dWÁ]Cv ÙU0dWÁ]Cv ÙU0dW¹Gv• ?®`È®‚!» †ì*²«`È®‚!» †ì*²«`È®‚!» †ì*²«`È®rì*~\Á]üÙ5qÇ*w]Y\dW:y!?±‹ì*‡wv`ü³=”7ó|÷8'ñ‹]êBqÉB/š­›@®>;5ÅS«®Í®/×§q“:­9'yv„yÓ÷ž]ÎÉ'ñ‹½³†ø¥ÉBLÑWgÈBU}uª†¥QÈ_Ev©t6çß{$7gÿOŸ,ôAübÿì€:ôñ“Þº½Ê_ù=²ëQ`e’šåÖˆ«ìÖø©Wl•XsqñF`QXŬ±¸jpu2?¯fn½B?‡µ9é‹òKº!‘Xc ÕêÖøâudPXÓ§ñ+Mb…/·È®Æ^`b•)“ÞÑÈMÈK äl®.~`M¾M ·`‰àPNŽ–ÍÂÂÛ ¬?rÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]|ì #.·ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.¾Gv…W°ˆãˆ»Dv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹ï‘]aÄqqûÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìâ{d_ ,3†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.¾GvñÅÀ2cÈ.Æ–Xfl`™±eÆ–Xfl`™±eÆ–Xfl`™±e¾Xæ‹eÆ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙÅ÷È®0âzqÛÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìâ{d_` ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]|ìâ‹#Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ ¨ãR4s²ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.¾GvñÅÆ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙÅ÷È.¾8"À²K0d—`È.Á]‚!»Cv †ì Ù%²K0d—`È.Á]‚!»äÙ%¸`È.Á]‚!»Cv †ì Ù%²K0d—`È.Á]‚!»Cv †ì’{d—\8à‚!»sÀsÀsÀsÀsÀsÀsÀsÀsÀsÀsÀsÀå¾s"¸`È.Á]‚!»Cv †ì Ù%²K0d—`È.Á]‚!»Cv †ì’{d—\øq‚!»Cv †ì Ù%²K0d—`È.Á]‚!»Cv †ì Ù%²Kî‘]ráÇ †ì Ù%²K0d—`È.Á]‚!»Cv †ì Ù%²K0d—`È.¹GvÉ…'²K0d—`È.Á]‚!»Cv †ì Ù%²K0d—`È.Á]‚!»äÙ%~œ`È.Á]‚!»Cv †ì Ù%²K0d—`È.Á]‚!»Cv †ì’{d—\øq‚!»êýÙ¿ŸýŸ9Ë,«ü÷o©ÜfÖ{ïé}Öwµ¿þÊ“ØV«7ü?M­àêæ0/)D ½›'™#äFþ¾ùbŽguó™@žÅ|ñÍ›ÞO“ÒâË-Û§+êÕ;³ª¼"»Þò¦÷Y5†Íú›oG g1?;¹ã÷Ù…´ÜŽßÿÙiU·0¬º˜ûQ>ä«®Œj†½U—ËJUrW]ÖT%³êúÑ|ù²êÈYuÔg»0¿o>ÓñNÈõª¥XN¾\¯::Ø¥m¤y,ß—ÛU§šjÕ‰]´ä¯ºÉ'ðWݤöør³êÌ™‘®?U ®nWÝÏš÷`OòùÕݬͼµ6ßšy¾AVù‡¦¦-÷ïG̽Y*†–¿ŸÃ? ØãÐpmâ@Þô¯¼ÓTótE nÞŸÔ@“6ƒv0r2kÓc­Q±H-WÏa²ûqÕÛq‰äM‡õéïÇvqå02ÔÒV§©dN>r]g«‚I¦bá|óª«7%–VÕf~F«ÎLgÔÓ=MEó¬/·ä'µêTðI~ªÏ84&âʳˆKãwϲÊ?é†MsæÞ™o_ýB?r"îE¤)wª»Ã§¡Ü?âì):M7ÁÈÉîÇ^ÄÕ2þ÷ÈõnS½ˆK}FLpõwÄÀ(Õc­Íó)¸º™‡ª.kmþ»g 7óPµ{—ØXOVnNS¹¬µ‘Ö•šåEÜøÙ‹{~q,W7—kó#N¢Ugç¡Ôª‹#®`Ç;÷·‹ŸägZåçË‘³G~Ês ¯ùrÕÅϧFµ½»øó {WW]ür¨ZSù¥#b&_Þôï®FGß~éÇqg#×çõáKå—V «ÕrÕcß]óüÒ±[´\½ëˆSÖ“òKS²§ä–üÔ»K~Z‘FNþ#ÒŸÈ”kZž‚rÍŸ²©xŒ¼}dŸä'‹¥ÔrK~J;Ï8".&?™ˆ“ˆ{û¥c³ê&q}ó¤Ÿ÷šO6³*ÜRlݹ×åЭ•›ÙOÕWËšj¹‚£ª?÷šésîõÏÆHNºÌÖrEHG äíϽʡ§­­ÜþÔ©Y¶tCñåvŸWÆ—$]íQpóBfq‘ë—ŽÍ.W[¦»s¯ŸØªê“Ÿ´Ýª½£Uƒ¹×²qDÜÅÜë2¼Y÷ç^åÙŧ|í%¿æ}ü4~Ë/ïfÕǽ™8jÊ)›ìBºç—ÊøNü«“Ùçô=÷šÎñ!ä¤'’ª;÷Jýà@nç^‹ç—–¹DríŠO~š³ÞÜú¥Å™ÂØ9ÈU/yYº~éõªz~©¡^i¿tžP äú³§ì’Ÿ>©WÕñKÍi鋈«AÄ]̽.ˆ"nŽ(d]Ç5?âÆòç4ÕÏ„Úɾ\»7ãq²9÷Z±¹×º=÷úïŒB 7û<wB¡tò?ûâÞÔ͹׊ͽÖý¹×? %“‰ñ'¸ßü2¡÷æ^+6÷Zïç^ëÅÜk}8÷ª#®?꜌~hßìW¾vNF¡I0ªsRèXÀQnç¤ûÌì¶î~çä'yôz•K)Ô£^¥.…Þ«®ñì rRß{î^¯rìHGtuÍReýÚlžï-¸zÖ„þ”‚ÎI*Á7_ôg?Ù%?-u\z•¶ÕÖqÝïœXÛÃ:®“—q®Â:®‡&ÀV×£ˆ ÉO:âæ?ö s²Öq¿òµsbë8Õ9Yê8#¯A§:'<ÉëœXxRê8#oA§:'KgåA§:'Kgä=¨ã43ÛÖqVÔq–™½’ŸüΉO~Zê8+ê¸3ªãŒ,ñÊUï¢éVU5›ÑQ-×ï6<Õ¼³õaI‚¯Îø°úg|Ø_ÔÜjBŸ×>ìy´àæÅ°Ò“ïÃ’ye––Wû×À‡]áIÍçqàîø¢æVf$µ]ø°í¡+ö-4m¿šxq—ÕLlN51V]q}XîÇÙ|¹~L”Ã}ÏxÊ4¡@næ*sóª‰QDW·>lñž2é5q ×ï6̾;“«äË“}ƒ®Gµœ8 ®nª íE&3¬Ýƒ«Sä„ê÷6X®nª }Øæÿp‹ë¾gð5rûΫø°ÑÕKpJþ"âjq>¬XOªa>lÃ|؆ù° óaæÃ6̇m˜Û0¶a>lÃ|؆ù° óaÛ}ýÞ.|ØöЇ]¬öÀZ²Ê_ù‡+d²Jí Ù¬ÒÈkU*WÈAø4DzŸe•FÞ‚¬R»B6«´ò «Ô®Í*¼Y¥u…VOs]!•UZWhå5×òùCKViåQVyFY¥‘§(«LQViåQV™¢¬ÒÈéqVù+ä ‰}'Æ“:nÉ*åŸó´&«¤(«4òe•9Ê*­<Ê*s”Uy‰ÞFR¢¬Òʃ¬Òð‡LViäd•–#›%¸:Yeâ(«4r‰|‰²J+²ÊÅjÁW#öR²J+²ÊÅŠ®Þg•¿òG®Øù£¬2ÏÀ*ÿÈ*ÛlE{í¾:öÐäËM»jmñ‡Æjûü¡Ÿ¬’)›¬RÑÊõ>?þwöå¶[˜6ùC ãµgü!=geå–?DQV|ó9x{ð5¨aü¡vÏj®P{è ‰õeÚƒ;ÏwYÈ?ùC¬Û}¦Á¾Ú:~Äé‰Ó`__èáGœ÷BŸ;qqå @HO°wÝ__l sGÐì)Ûb¤û ö’üo~!5wÍl¾7oy$‰£{ äöæóÆ¢ÍÑ¢]¡…†òdÑN èbë4áSJ¬ÌÕÖ m¬ÌõAóÁ}'Fi]%W¾0x¨E®ÿÙWWH‚EÛZ ·{ÿR ! ®n!:U"W(¸ú²QS´h%·Ç;m‰mì -0•þ€‚óʹe•RpæÄóË£àŒäH|¹æ‘ÌÓ›/G2§|¹i´Ž”þåðH¤®(—îñHDADÄ8#Z®y$ýp'™„O÷΀›YbÍ#‰¯®y$=à‘$Y @Ýã‘&N˜—І¿»ØRÈ{sòÚtú•ß³rž¬Í Gÿ²rÊÁ.+§N­/×k³´ÉÊéOX9Ò݆'mŽ‚´Wom–~v½6YöKVNÂÊáË›îâ+¹fåÌùM_¾Ehú`åô VÎÝÚü#÷‰:¯-ˆNÇ :}¢óœíÈ¿ƒèt ¢Ó1ˆNÇ :ƒèt ¢Ó1ˆNÇ :ƒèt ¢Ó/ :>¬ãC~ÏÊé+§ï³rþ‘±¸¤ùòïX9cåtŒ•Ó1VNÇX9cåtŒ•Ó1VNÇX9cåô VÎ]`•­ÀâÀºDât ‰Ó1$NÇ8Cât ‰Ó1$NÇ8Cât ‰Ó1$NÇ8ý‰æˆäˆûHœŽ!q:†Äé§cHœŽ!q:†Äé§cHœŽ!q:†Äé§cHœ~Ä飘Cât ‰Ó1$NÇ8Cât ‰Ó1$NÇ8Cât ‰Ó1$NÇ8Câô{$N¿Åì§c£˜ÅìØ(fÇF1;6ŠÙ±QÌŽbvl³c£˜ÅìØ(fÇF1ûý(f¿Åì§cHœ¾ÄùGØ.Ú4Hö‘8Cât ‰Ó1$NÇ8Cât ‰Ó1$NÇ8Câô $Ž»ùß“o:F¾éù¦c䛎‘o:F¾éù¦c䛎‘o:F¾éù¦c䛎‘oú=ù¦_Ì8wŒ|Ó1òMÇÈ7#ßtŒ|Ó1òMÇÈ7#ßtŒ|Ó1òMÇÈ7#ßtŒ|ÓïÉ7ýbƹc䛎‘o:F¾éù¦c䛎‘o:F¾éù¦c䛎‘o:F¾éù¦cä \KÑ È>ù¦c䛎‘o:F¾éù¦c䛎‘o:F¾éù¦cä›~O¾é3Î#ßtŒ|Ó1òMÇÈ7#ßtŒ|Ó1òMÇÈ7#ßtŒ|ÓïÉ7ýbƹCä›ù}ä›)È7oùWä%ÿ†|ó–E¾QòoÈ7oùWä%ÿ†|ó–E¾QòoÈ7oùWä%ÿ†|ó–‡ä›÷6ôi·Îÿo6"îŠ|£nþòÍ[þùFÉ¿!ßü•G¾QòoÈ7oùWä%ÿ†|ó–E¾QòoÈ7oùWä%ÿ†|ó–‡ä›8âjqÛä›'çØ­nÄíÛ­nÄíÛ­nÄíÛ­nÄíÛ­nÄíÛ­nÄíÛ­AÄíÚ­nÄíÛ­AÄíÚ­~ÄmÛ­nÄíÛ­nÄÙ¬2ޏDÜ6ùæ>â.É7oþ;òÍ[þùFÉ¿!ß¼å_‘o”üòÍ[þùFÉ¿!ß¼7«¯È7Jþ ùæ-ÿŠ|£äßoT)ô8«ü•ä›GuÜ'ùÆ­ãöÉ7n·O¾që¸}ò[Çí“oÜ:nŸ|ãÖq¯mòMPÇí’oü:n›|ã×qÛ俎Û&ßuÜ.ù&¨ã¶²Ê_9@¾y–U~oܬrŸ|ã×qÛä› «Ü%ßYå.ù&Ê*7É7~·M¾ ³Ê=ò_Çm“o‚¬r—|f•{ä›(«Ü$ß„YåÎ3Ž¢ˆÛ%ß<ˆ8|ãEÜòMq»ä› âvÉ7nÈì“o¢Bl“|ã†Ì>ùÆ]óûäwÍï“oÂJ*o,Ú-Ú]òÍ£EûI¾ñíòM´h7É7Qóa“|ã/ÚmòM´Ïo’o¢E»I¾ í.ù&ܨ÷È7á¢ÝÙiK´hwÉ7)=!ßP?-eÊ?É7sòåÐEÒœôå†|#‡7ï<!ÑÕM£5««+ºH&è0r5môivEéÍG×rEIYGWOX²Ç^µ¼˜ùºÑEÎÈ›iÛ¸ä¹nðÕiºÈ¨…Ä8¶Ž˜–ÛbDõ.RŠšN¿ò[òͳµ™Ë(uW¹³6ÇÏè¯ÍvT_nÖæ(ë^;ä›`múä›±8³v0È_›¯‘ëtom61§É_›?[ßk‡|ã¯Íˆ|3A%7“ý‰·6Z^¾ÜR™NŸÊ´’o¢µ™wÖæ9@¾ÙY´äµhïÈ7c›kÙ2HÔ¢ý†|£äßoÜ5¿O¾QòoÈ7jÍC¾QòoÈ7QÈl’o”üò ™oÈ7Jþ ùƸ_òÍ]Äå âæu^;HœG÷‰Äq#.@âŒUÇ…“x÷‰ãFÜ>ÇÊl#q܈ÛGâx÷‰ãFÜ>Ǹm$ŽqûH7âö‘8AÄí"q‚ˆKzÕ…W°ˆãˆ»b娛ÿ†•ó–ÅÊQòoX9oùW¬%ÿ†•ó–ÅÊQòoX9åß±r”üVÎ[þ+GÉ¿aå¼å!+'Ž8"n›•sq—¬uóß°rÞò¯X9Jþ +ç-ÿŠ•£äß°rÞò¯X9Jþ +ç-ÿŠ•£äß°rÞò¯X9Jþ +ç-Y9qÄIqÛ¬œˆ»b娛ÿ†•ó–ÅÊQòoX9åß±r”üVÎ[þ+GÉ¿aå¼å_±r”üVÎ[þ+GÉ¿aå¼å!+'ޏDÜ6+çIÄyÛ ÞLØðf†76¼™°áÍ„ o&lx3aÛ ÞLØðf†7ÓýðfºÞL+çIçÄaåx“ˆ•óÊ…Ì‘ tN¶Y9nçdŸ•ô*wY9nçdŸ•ãö*÷Y9nçdŸ•ãvNöY9~¯r›•ãvNöY9~çd›•¹[u\".oÎG¢ãuN@tÜÎÉ>DÇíœìCtÜÎÉ>DÇíœìCtÜÎÉ>DÇíœìCt‚ÎÉ.DÇïœlCt‚ÎÉ.DÇïœlCtüÎÉ^÷+ :O:'DÇíœìCtüÎÉ6D'èœìBt‚ÎÉ.DÇëœ<€èø“mˆŽÛ9Ù‡è“]ˆŽÛ9Ù‡èD“MˆŽÛ9Ù‡èD“:îW@t:.TÇùW¤ŽÓòï :Hgä_At:ÎÈ¿‚è uœ‘ÑAê8#^Ç¥hæd¢ó â<ˆŽq :~¯r¢DÜ.DÇ ™}ˆŽ2 :^È<€èøÝÂmˆŽ·æ@t¼5¿@tâEŽmìBt-ÚOˆŽ·h@t¢E» щí&DÇ_´Û¿C¾ Ñ :ä»`ÑîBtÂz¢nÔ;;m<ù° Ñ! ¢CD‡0ˆa :„AtƒèÑ! ¢CD‡0ˆaº‡èÐ…KD‡0ˆa :„AtƒèÑ! ¢CD‡0ˆa :„Atè¢C>,aÂ|XÂ|XÂ|XÂ|XÂ|XÂ|XÂ|XÂ|XÂ|XÂ|XÂ|XÂ|Xº¯ßé‡% ¢CD‡0ˆa :„AtƒèÑ! ¢CD‡0ˆa :tÑ¡ Wˆ0ˆa :„AtƒèÑ! ¢CD‡0ˆa :„AtƒèÐ=D‡.\! :„AtƒèÑ! ¢CD‡0ˆa :„AtƒèÑ! ¢C÷ºp…ƒèÑ! ¢CD‡0ˆa :„AtƒèÑ¡{ˆ]¸B„AtƒèÑ! ¢CD‡0ˆa :„AtƒèÐ=D‡.\! :cÍç'Ðça^¢Uþyý òæ¨G•‘¹øò¤+hîîõxÄrpu=G-šõñ~¾7k¤¹z¾×ƒÔÕóᇣÈMn“Š3G=¤*÷ßÈmŸ¶»Ìb3Šläš²¢G‘ÕóSøÕSÇiLJ2s{-›ŽYvç¨i |9›œ–Ü9jn+°"{sÔ¬§¸YŸ®ÑÕÅÌë©ÎuÌþÈ@/–ùð(âF¡Pd•FÜÈ=æÃ¤îäæËmçDÑuTÄ %’73>INĽ¤šÝ¦øg¡UÄÍQäÈÍnÓ«wraÄ;w_n6êöYyGÜHÊÆš/¼©ÁUR³wÄåzè§Œ‘}ú>Wñ#®·ÈMÄIö#®ëͪD÷'¥X#ŽçW¬:Ö'VJq)+u|§ÜxÐ|îD\Á"Žw"N9àËnÃúæ)ØmþvN2÷I²ðåïÎIN37úìQ§´O äÍniNzb(¸ºêœd=á¦zÔ3³[Ù;¹@ú1ñ7)Mu,›ÈßIišßœÇ|žþ@®™Nší£zu"råºG={ ÍëQÿì7œL»¯x=êñÕ<Ùùy—ù0Š nÜœê>óŒ§åÖƒÞzÆqq̇bgòƒõøåÌ7/úæÉtŠÓ£~åÒòåzŸŸ§¼Y£OêBözÔ†ºõÕ\ÝÒ´Ô¨’ÞçÇvÉÉ|sÍëQ§d¸’ZÎWÒô¨åàà›×™•†2éõ؇$¸ú¯oÖhÖb5ÛˆËnzÔÁÕ«íϋۣ¶¸‘7?dL:=¸z³ýyÙˆ8 "îb֨ء‘¼ß£æ–,|¯ê›×=êÆNó!ô HöåÝä6¹:Í‹.÷@®û´MÒk‹ù·™s“9ù)ñ»w1wùJìËuí7ù0ö \ByÓÝÜ]æCÞg>üõš7rUf5õñÞig£µW7ýºÆ^¿ŽF(´HnšNi“ùï™ùbÖ(?œ5*væd?âZ6*}È׈åwª¼7k”·g&?.Ÿ=’«ùùÚOþŒ8šÉfpuqóŒWçψ+£Šä¦[èN÷9³FùÁ¬ÑÑ ×H®Ïò"n6È£«StrA¹BíèÑW·ÌñÞ¬Q~4k”sËÜvJ«ï …W_\¡¼q-ªãâY£b™:'\ I¬“¢O ¿ù´cÕöÈŸö´¤Ðw—fç=ë:®œ^¯r$•DÁÕI?a{u{•ã¾²rSljӫL-Ú·»“ù>=æƒô£Q äMm´ºͺKL)¸º™ÞgEœ(a׃Ή®ãLçÄÖq=èœè:N÷*—:®½Ê—‡u\:'›u\".f>Ë|xÔ9±uܯü³s¢ë85Ý·ÔqF^ƒ:NO÷}R²Ç|0ÍÆÕqFÞ‚:NwNlgåA§§ûlgä=z?@ê8+ê8=Ýgë8-7Ó}¦Ž;£:ÎÊ£:îŒê8#OQ—¢:ÎÊ£:.Euœ‘Óã:îWþhº¯Ø1­“µŽû•tNlGQgä9ªãrTÇYyTÇ]2ò6óᣎ³ò Ž{wNÖ:ÎÈ9¨ãÞ“µŽ³ò Ž»f>ä}æÃZÇYyPÇ©ÎÉRÇy ê8Õ9Yê8+ê¸kæC¾g>ä‹é¾üpº¯Ø3 Žû•[Çùó:ÎÊ×qZþEgåë8#^ÇYùã:ÎÈŸ×qVþ¸Ž3òçuœ•?®ãŒüy÷+4ÝWì”×~ÄõñÅ·Ì´ÊæƒxÇçç›qR_ÞÍ^'Ît_0¬ÉÕª¿¢3O;R‹¤í<-7wª—e˜9«ðæd„úþh]aç0âÔá>qc -s•~Ä©:NGÜXtÍÿá–ˆS'õ˜¯s•Ù'Nø‡÷êËd£ß«<]>íÜCkðÍ[â„ê”fõÙÇ"~÷b>ûVVΜģ‰Å+žDÜ|ÙÅÂ|ȰBš{.²Í7ó4_nžq‰É¸bV] ".ŸÞ¹Èq”ɕۈ«âã†7¿ð.˜‚ˆ“âËmÄe "îŒäfÕ©“‰6âªÿÃ-§Ûû:âÖ¡Ðà2Jq-øê–i^ "N"¹ù왢ˆ ~÷%âÚFÄÅ3'egæDÎ9øÀµ”¬òOœrà€§¼˜ÈÅ=¥%¾þÉ»(NgyÚOæ½BZng %pÀ)ºyÓ¯«~–Å.žž8pÀÓêÏÝ=Ðø¹¾o¢xu\Òï›0x[ðâ:à)rÀkôÙ«åÓú¸=øìÕtÎȯÁÕ­NêW.ðòÐ_lÜòÀ¯ó-Wòõ7¾ÞšÈsÀ'1X|y×o1“êá±kpuóv›JîÙÿOÚFÙ§müDL•@nNãºgÿç µÅ.îô¾vßϸ1©ErC M›´ò„¶±¼áÅÈ͹Èâf•|0u_nê¸T]$MœC oþTç5m£ÜÓ6Ê…^:àÙ’ æ€Ì/˜^0¼`xÁð‚9àsÀ æ€Ì/˜^0¼ÜwNÊ…^:àÙZZå‘g²Ê_ù§§³JãÇ™¬ÒÈkUj?î“wQ?Îò.j”Uy ²JëÇQtó-È*g²J#ïAViü¸´zRÅóãtViü¸s¥ßÏ3Yåe•Ve•g”UyвÊe•Ve•)Ê*œg•¿òG~Üb*=¨ãÖ¬òW¾ÖqKVIQViä9Ê*s”UZy”U^Ò6Ê>mcÍ*­<È*U·d•FÎAV©ê¸%«´ò «¼¦m”'´å})¨ãÌ{%Ê*¼Y¥®ãlViåAVyMÛ(÷´ráÇ•‡~\¶Ø„u\›'«ܛdÎ5Ñ¡m”}ÚÆÜý9õ@n\àæM2OÓ"¸º¥m¨«“yûIÈõª+>5ñ“¶QžÐ6&*$’›Ìª¹uÜ<ÄÈ):û¯;fã' ¾ºå4nmÑ6Ê#ÚFÎ"Ü|ö\¢¬2¸ú’Uî<ã(Š8ÞzÆå'×ÓÛ;Ë*whä fƒ*ùrSÇU…ÇÑî@Î=’«Z¦ÈÙ\wà4íýÕq¦½Ÿ6n~uøÜƒ£õ"¾ÜÖq\|w`•øuœæÏ[w@ün©ã²ÓæÕÊ,>ëÃÇ&Lw øêw îGr‹¯o;ЂßݺêPgq9ЏØËÖÚxqsx¡m’+ù¸µ°KqÖÂV—̪+AÄI*¾>b±¸rqœ}<¼ù¥srF85_¾tN(ˆ¸3’›ˆë‘Îþ·D\ ðÕÊô#N[™6âjðÕÙˆÓ¶‰¸ÉMÄI䀷àw_"nçW¢ˆ‹ý¸l‘ŒqNãœ0Æ9aŒsÂç„1Î cœÆ8'ŒqNãœ0Æ9aŒsÂ÷œŽz•äç„1Î cœÆ8'ŒqNãœ0Æ9aŒsÂç„1Î cœÆ8'ŒqNøžsF\Á"Žw"î’sÂç„1Î cœÆ8'ŒqNãœ0Æ9aŒsÂç„1Î cœ¾çœ„ÇAÄísNãœ0Æ9aŒsÂç„1Î cœÆ8'ŒqNãœ0Æ9aŒsÂç„ï9'|1åÅç„1Î cœÆ8'ŒqNãœ0Æ9aŒsÂç„1Î cœÆ8'ŒqNøžsÂS^ŒqN›òblÊ‹±)/Ʀ¼›òblÊ‹±)/Ʀ¼›òblÊ‹±)/Ʀ¼ø~Ê‹/¦¼ãœ0Æ9aŒsÂç„1Î cœÆ8'ŒqNãœ0Æ9aŒsÂç„1Î ßsNˆëQÄmsNãœ0Æ9aŒsÂç„1Î cœÆ8'ŒqNãœ0Æ9aŒsÂç„ï9'|1WÉç„1Î cœÆ8'ŒqNãœ0Æ9aŒsÂç„1Î cœÆ8'ŒqNøžsÂs•ŒqNãœ0Æ9aŒsÂç„1Î cœÆ8'ŒqNãœ0Æ9aŒsÂç¨ã~åç„1Î cœÆ8'ŒqNãœ0Æ9aŒsÂç„1Î cœÆ8'ŒqNøžsÂs•ŒqNãœ0Æ9aŒsÂç„1Î cœÆ8'ŒqNãœ0Æ9aŒsÂç„ï9'|1WÉçD0Ή`œÁ8'‚qNãœÆ9Œs"çD0Ή`œÁ8'‚qNäžs"¸`œÁ8'‚qNãœÆ9Œs"çD0Ή`œÁ8'‚qNãœÆ9‘{Ή\8à‚qNsÀsÀsÀsÀsÀsÀsÀsÀsÀsÀsÀsÀå¾s"¸`œÁ8'‚qNãœÆ9Œs"çD0Ή`œÁ8'‚qNãœÆ9‘{Ή\øq‚qNãœÆ9Œs"çD0Ή`œÁ8'‚qNãœÆ9Œs"çDî9'ráÇ Æ9Œs"çD0Ή`œÁ8'‚qNãœÆ9Œs"çD0Ή`œ¹çœÈ…'çD0Ή`œÁ8'‚qNãœÆ9Œs"çD0Ή`œÁ8'‚qNäžs"~œ`œÁ8'‚qNãœÆ9Œs"çD0Ή`œÁ8'‚qNãœÆ9‘{Ή\øq‚qN*Æ9©ç¤îsNþávê‚‘Å9©ç¤bœ“ŠqN*Æ9©ç¤bœ“ŠqN*Æ9©œŸ§ð!¿Ç™T gR1œIÝÇ™üùšÕQüÀz€3©Τb8“ŠáL*†3©Τb8“ŠáL*†3©8“»À*[Å;uI-©µ¤bÔ’ŠQK*F-©µ¤bÔ’ŠQK*F-©µ¤bÔ’ŠQKê=µ¤FîÚ9B-©µ¤bÔ’ŠQK*F-©µ¤bÔ’ŠQK*F-©µ¤bÔ’ŠQK*F-©÷Ô’z1³U1jIŨ%£–TŒZR1jIŨ%£–TŒZR1jIŨ%£–TŒZR1jI½§–Ô‹™­ŠQK*6³U±™­ŠÍlUlf«b3[›ÙªØÌVÅf¶*6³U±™­ŠÍlUlf«ÞÏlÕ‹™­ŠQK*F-©µ¤nSKþi2žg ä_QK*F-©µ¤bÔ’ŠQK*F-©µ¤bÔ’ŠQKêµÄç‘|Èïá$ƒ“T NR18IÅà$ƒ“T NR18IÅà$ƒ“T NR18IÅà$õNR/†!+'©œ¤bp’ŠÁI*'©œ¤bp’ŠÁI*'©œ¤bp’ŠÁI*'©÷p’z1 Y18IÅà$ƒ“T NR18IÅà$ƒ“T NR18IÅà$ƒ“T NR18 P®ýÊ8IÅà$ƒ“T NR18IÅà$ƒ“T NR18IÅà$ƒ“T NR18I½‡“Ô‹aÈŠÁI*'©œ¤bp’ŠÁI*'©œ¤bp’ŠÁI*'©œ¤bp’ŠÁIê=œ¤^ CV NÒ08IÃà$ ƒ“4 NÒ08IÃà$ ƒ“4 NÒ08IÃà$ ƒ“4 NÒîá$íÂènœ¤ap’†ÁI'iœ¤ap’†ÁI'iœ¤ap’†ÁI'iœ¤ÝÃIÚ…ÑÝ08IÃŒî†Ý 3ºft7Ìèn˜ÑÝ0£»aFwÃŒî†Ý 3ºft·ûÎI»0º'iœ¤ap’†ÁI'iœ¤ap’†ÁI'iœ¤ap’†ÁI'i÷p’váÇ5 NÒ08IÃà$ ƒ“4 NÒ08IÃà$ ƒ“4 NÒ08IÃà$ ƒ“4 NÒîá$íÂkœ¤ap’†ÁI'iœ¤ap’†ÁI'iœ¤ap’†ÁI'iœ¤ÝÃIÚ…×08IÃà$ ƒ“4 NÒ08IÃà$ ƒ“4 NÒ08IÃà$ ƒ“4 NÒ08I»‡“´ ?®ap’†ÁI'iœ¤ap’†ÁI'iœ¤ap’†ÁI'iœ¤ap’v'i~\Ãà$ýþˆ€j¸qÍ´Ê? GÊ♉mŽ}´@®ÒƒZÂ?¥Gl äïeSf磽<ÈkÔßâËmnÓ¼!ý9]K o&«t)#)æàêšbPõ(rÑ‹–Îà³ë±LqjÊ>Ä)øáÌX橾ºw8ê÷DÁÕU(£ ×ߣ»kóuXDÆ“µ9®@ iÁ[›3¿öNt§Y0•@®Þ® ·´ “9Õ\ܵùg˜ÞY›ã÷)góåfOªJžU`ÂÁÕuÞÍIaþ®Í¿VåñXv…æé¤@þîƒäjø+ªã<Êi’@®?{R=ߦú1ùrÛ‰("cì\5ºz×G«²×q[®=Ø¥äªãí_ÝNeñ:Îã ÝHnOúu§/óì%ûr“ºŠ7Çû,æ#¹J ätå(áÕMÇYªßqNG£@n;În5ÞŽ&ÁÕíäPöulà-’ëä‘|DÆH¬¢«›Ž³ºúEÄÕ ââÉ!qíIÄ59G5μÊ?'‡Æ6ïxª÷7âd<¢jñå¦ÿ5.îM]ÜüÒÿ"Ïã™<¶Hnú_‰ÜÉ!)áÕMÿ+û“C#· @nú_)šâ³r;9”}§÷àê‹ÇîÇCÜ‚«/“Cî¬ÞœD˾|ñxêFĵ ââÉ!q}«Ç¢b¤«jÂÂy‹çýCâóåÉN8§_Rá£DWWˆ Ònú»}Æm<:†ӢÈ#²ÔI½Ï´#’›:.{Ž™±-„ ¿ûFâußj=JtuƒÈ¨ÙAdŒà9„¹íp¨¡«ÖqFÔqºA²ÔqÝo˜:Î 2l×ý‰©ã4"c©ãºß ù·ŽÛ@dÜ7HfÐû‚ÈpVyŠëìW ä_!2ú="£_Œäõg#y&âÊÈ›¯úD\>\(ÍŒ¸u(Î85wÈè"£ï#2fÈå&œübd‰¸à«["N Å]"2:†Èè3ä$¸yûŒË-Š¸àæ—ˆ“×"£cˆŒ~Èè#yýÙHÞbtÏï{»Ž«.µ¶Ê?ê¸Q0yG«f!Äg Wß|›5‹SÇI7ñnå¿ùrê†è»Ž»”¿¿ùE^ôªËÔ ä¤PNÏèN£Ëœ 3X£ûÕúQ­[«äz¬¦$Çè¾”¿ë¸EnŒn–àæíHQŒî|òj[Ñ®Ñ=!ÐÁÍ«:Žô+´Ñ}!o§/W=êO£{þ·GˆŒdL¿ˆSF÷÷‘UþitÕU<£;ÏÓ¾\÷ëê‘›gt—£r äº.ÅCdPõ»ukt×Ü|£»‘<Àùê±ó2žüìËíKÔ²WÇåÙBäú 'ùˆŒù²@N‘Õln)ÜtN²{Ðc>ξܾPAçTWÆ57c=ˆŒ]Ý"2¨nD\ "î‘‘Œåø â<£Û‹¸F·qûF·qŒn/âÝnÄíÝnÄíÝ^Ä=0º½ˆ{`tû·mtû·mt»·ot»g;'qĵ â.É ëï#NùqKVù+ÿðãLV©ü¸%«4òd•o?nM ­<È*ß~Ü¥¼Y¥X¶Y¥•Y¥òã–¬ÒÈ{Uªå%-´ò «TˆŒ ¹X¶Yåe•Ve•g”UyвÊe•Ve•©ïÈéqVù+„ÈHÆ›xTÇ-Yå¯üÓ3Y%EY¥‘ç(«ÌQViåQV™£¬ÒÈKUÆïô³òwúÙ¬ÒÈ9È*U·d•Vd•‘a³J#—È“(«´ò «4¨C“Uy ²JȰY¥•Y¥Ed´èêíqVù+„Ȱ¤…'u\c™‡âV¹ƒÈÒ:ndfgf_næ.Š|f•óWïÒƒ«D)²Ê{Ÿ—ùÂàîÊ-"C89uÜÅÍ/ˆ q4Ù¾Ü"2ÈGdH‰®nâ#2r‘@n9È*K*Üôi›_ÇÍ´Ò—Û:îLAVYƒ«Û¬’$È*›ør›U¦²qEo=ãò£ˆë§l]!7âæA[rÝ´jQØ_~·Èðë8‘ñãh–QŽ"N2­;|u»öYù7ˆŒ ŽóÓ(9Û)¯¸5¸ùÍûLüD†q "#ޏE\ŒÈHYÿ,⊙8þ•D\=\(͈¸s1Ôüˆ³†Ú"#èœì"2‚ˆs3â{Öl!•¦ë|vó,*Éy£s¦rp•@N:?&ïYÔ’åÅäèY¤y1ïÀßi>ƒUÇú³sñXSó5øæÍ³(o²¦v«< ¬ñÕuË[rk>ëÝÀ’ÉBòå&°Ô ¥t`ý¼h4·à$¦ ,¶¤«(°òç«Òÿá>1ÛÁgWÅG«Þ9ж¼¨½øÅ†&ô¬«oÞ<±šGºúéw÷à›7FŸÞ«Ò©õ#ºº8k:¹WO,±9b žXYçˆlÜèw·O¬ì¿*èw—Ï·Y߃²v‹wK=Í‹›å¾3ÍÙzÇwz3S§åvªMUŽÕTO¹­žßùgÙp ·nˆç;—ÉÜNÈ߯¬Gjžï,rè.™‘wX<ßyÖ?–1¦äfq©6W×UÉ—›W3̽ÃñóÉGð»kߙļÙAýî#®y2/ÅHþ«æáÜ@ÞÌ n{y¯fà#øÝ—W3ï`ý'(kþ·' ,q²qoß9…cZåÎü0çþé;Âq<ÉØ—ëNQÉÊýT5{žøã@ne§ûн¹˜ƒ«7DÍV½}gn#…±o©SrR»yR«NÕìã1¾Œà&Çwž‡÷½ùáQ¤NÜE•¡õÇ_õÕW÷w§?áQzðÕ™ 5õöÇf‘MݪåúU鹑wt}[™‘Û¶»ç@+EW7ç@IWÍéb~8=œnv–2m÷äË,L’å-©›WØê³y/üú3aT}¹öç—ÿr^±÷ó"±@®ýGýÃuóšî_ÝÌëã¿=ù2ßMP£ÏþîÉËÈýZðj†ºÎÐ&Ïw63´÷ù2®ÎÁg7=ùê¿ðkFrtu ¦þöäÇ>Ëáï®zòGÕ¿»ñão>Gß¼êÉsø»Ûž¼úÝíüpŠ®^‚×]D\ "îb~ؾ­ìAÄqÅÄÙx•¾*½÷äDÜ(H Q 7¯J¯Õ™ô˜í'sÈ¥E§¹tÎöõ‚nÄÍa ÇwÎe$ý’9™‡Tõ"nÖ[þg_&=Š7éA“ ¼™Nq'=jÒ%Kó#îð}ç`qnÞœíâŸ-½òÅwöç‡ÇÓš¹™ô8›;é1êÖàw_æ‡i#âZqóÃÍ0‡ž5HúÑ,kÊmŒ”V PV²¤« ARŠÇ™Ÿ1Ó‚«ÛIŠ$ÑÕ)ªãÞ ’¶¼B·» ’ÉÙr;+k½G.˜ßyœd•ܼméKÐ ©ÑÕKPÇéIoGô»« ±f« §#úæÙÔq¥¹-}[Ãö°A’¢Ituù¬ãîAY ’$kÚþ+wóUÚ®$òÉmƒDÉÍÕD¿×ë $Çù~¯—mžy<ÃÉ;ëWƒùrÃ:ÝÉŒéNƒä%ãwäæÝ•GëNƒd¬-" äæMzµy ’9}Ü\¹mœÅi\ýîºAb˵sçw_ó•<íü~wÓ w ÊÒ¿{ø(û•?ÌovHy¿AòQ®¥ä6H–r¢rÍÈsT®å¨\³ò¨\ËQÑ`ä%(þm|–kV”kz0ß–kFÎÑp:Gåš•åšnØrÍÈ%(×þ6H>Ê5+Ê53˜ó5úækT®YyP®ÙÁü]½=.×~åó›!åZ"¨\3òçåš•?.×´ü‹rÍÊ—kFþ¼\³òÇåš‘?/׬üq¹fäÏË5+\®ùóríWþh0¿Ù ëíˆëižÚ3o Î^ÄÑQKó"îõƒÍM¾¼ïk}G\ž{h+¼éÉzåÞ¼#n”ÑÕ-¶Ç}[,ˆ!ªÜ¼»²f/âŽUåFœ}ã(ËoInƒ²¼ˆ‹@YóÅ>gá@NêwëìGÜHpƒ¯ÎFœß’ý“Æm•¯Ï¸<ßIF~Ä rqÙÌŸ§_gå:âJk~ÄEW·§®n"®É2ž|¤” âj OÑq+PVq› ¬(â\PÖ¹tFr2“E\ _"®D|ö%â$ЏàêKÄ•ˆ+QÄŃù‹ÑMŒî<'·Ó*_븑„ˆxF7¬™‚FþþæÓ¨Yšktt•[ 7foñîš{põbP”§gtϹ *ü]öCªktŸÙ·"½åf “kto%S ×-IÅÕÓuÜÅW'gðÕ½;fIŽT‚¯î]ÇJ5³gt§y*Wõ» ×Èè–`ÕY£;ûF·ptuct÷ªŒnº0ºé¡Ñ]-éŠöŸnëkÔÍ“:{b£»øòÅèv`?#„9¸ºé×% nÿê«Ñýyø¬Œí¢ô೿ŸqãoUî"¾ÜÝîÑËÑÎ\]×qãùÝÑÕm¿ŽgÜ(a[ô»«g\úélEFwðÍçè›×uG¿»­ãÔï¾ÝÁÕ£[6"®watWë—ftftftftftftftftftftftftÓ}ç„.ŒnzhtÛ·¯ÜGÜf¿òÕ³Ù…öãæNÈ«!äÀË¥rãIqäÇIòå¶Kœ=?ŽË<2È@å<ºëÇñxLrý|Ÿ¯àõü¸ñÏ òœ×4~¥æÊ­÷gã\ý¸‹ß]ùqKVyîüîÚ3¿»õã¢ßÝúqêw_ü¸àw_ü8õ»‡÷+äÇUKºzPÇ­Yå¯ü£Ž³Y%EY¥‘ç(«ÌQViåQV™£ÜÆÈKÛü­ã>²J+²ÊÅ+âË9È*U·d•Vd•‹]]‚¬ò]Ç­Y¥•YåêÇß|¾ùe•Vd•«\½=Î*åü¸jmuÜx¶9ÕUî`{zËN7ÒÊl_ã×q#‹²Jó†1вJõÒD›UÒçgw²JõúyUæÙì äú…¥º½Ê™V&_¾œMï~Viú´e•j”lÉ*©ùrŠ A ”ÕtÖ@nE~µtÿwßïŽM¥r‹_•(« ~¸tJ/"Ž¢ˆã­g\~qc½̹®ò5âx¾'4ûî@)äËMÇÜ8[9 þx³Ô¦£ÈUV9 þ³WÏú…ÃÚËe(œÑÕÍËW‘wDà“³•½#†³¥¨?™ †ÀÈÕ$3+ె“ð¨ÄÄ—¿kØ U¡³y% •7µàSPøäleálÍ¿â÷*å÷8­üú³ ¥ÜÀšË,‰ä õÇÇiÍiÞ@¾C ›7_¾–3F—Ëy´èæI3ZõpZÒŽÉ õGõW ®†Ÿ= Ûéè~NšŸÝÖIn`Gtó*°²ÕÅi‰î!¹õ“±wö†Ä8–äÖ4Ÿ<ÝlM鸤 °&6{#°þÈ}èÖk‹³•1ÎVÆ8[ãleŒ³•·9[cÑ­2úìßq¶2ÆÙÊg+cœ­Œq¶2ÆÙÊg+_p¶î".7oàµàÊ€+c®Œ¸2àÊÛ®W9yV¡ü+WÆ\pe À•1WÆ\på ×]Ä,âx'â.É\#seŒÌ•12WÆÈ\#seŒÌ•12WÆÈ\#seŒÌ•12W¾'s…ÇAÄ퓹2FæÊ™+cd®Œ‘¹2FæÊ™+cd®Œ‘¹2FæÊ™+cd®Œ‘¹ò=™+_ ,gŒÌ•12WÆÈ\#seŒÌ•12WÆÈ\#seŒÌ•12WÆÈ\#seŒÌ•ïÉ\ùb`9cd®Œ ,gl`9cËXÎØÀrÆ–36°œ±åŒ ,gl`9cËXÎ÷Ëùb`9cd®Œ‘¹2FæÊ™+cd®¼MæO¹jû´Ýw¹2FæÊ™+cd®Œ‘¹2FæÊ™+_¹î"®G—·p&ç£Î‰‡nʲ+cÈ®Œ!»2†ìʲ+cÈ®Œ!»2†ìʲ+cÈ®Œ!»ò=²+_Ȳ+cÈ®Œ!»2†ìʲ+cÈ®Œ!»2†ìʲ+cÈ®Œ!»2†ìʲ+ß#»òÅŒ!»2†ìʲ+cÈ®Œ!»2†ìʲ+cÈ®Œ!»2†ìʲ+cÈ®Œ!»€:.E3'ûÈ®Œ!»2†ìʲ+cÈ®Œ!»2†ìʲ+cÈ®Œ!»2†ìʲ+cÈ®|ìÊG2†ìʲ+cÈ®Œ!»2†ìʲ+cÈ®Œ!»2†ìʲ+cÈ®Œ!»2†ìÊ÷È®|qD cÈ®‚!» †ì*²«`È®‚!» †ì*²«`È®‚!» †ì*²«`È®rì*xÁ]Cv ÙU0dWÁ]Cv ÙU0dWÁ]Cv ÙU0dWÁ]åÙU.ð‚!» æ€Ì/˜^0¼`xÁð‚9àsÀ æ€Ì/˜^0¼ÜwNÊ…^0dWÁ]Cv ÙU0dWÁ]Cv ÙU0dWÁ]Cv ÙU0dW¹Gv• ?®`È®‚!» †ì*²«`È®‚!» †ì*²«`È®‚!» †ì*²«`È®rì*~\Á]Cv ÙU0dWÁ]Cv ÙU0dWÁ]Cv ÙU0dWÁ]åÙU.ü¸‚!» †ì*²«`È®‚!» †ì*²«`È®‚!» †ì*²«`È®‚!»Ê=²«\øqCv ÙU0dWÁ]Cv ÙU0dWÁ]Cv ÙU0dWÁ]Cv•{dW¹ðã †ìâGÈ®tûÈ.u€]wÈ'É—[dWq© Óp‰äÍ/FìÙ•øÅÁÙï}ã×9(øìÙ5*9qÎt™<_®¼È<Ò·âœÈ2a\c«º•¼WCübçì€%~iêÂH™(\Ys¨ iE.ÁÕ²‹çÙçì@™_i$o*«k.uÁ!~±svÀ¿~š¦n¯òW~ìzX½®r7°òËõ¾|aáEÈ®,Üù ËX–>ò«¦ôð³ëÀÊú³«Àšx‚àê*°ÎCNÙ5"+úìº9TôgW5ÖfôÙU`ÑÁê³ëC9cK ®^̦’=€Ð«[§šÜÀšžºw('³¡’X¯¬i“ŸÆVëËÅàÊ oÖ9‚ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.¾Gv…—ƒˆÛGv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dß#»Âˆ+XÄñNÄ]"»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙÅ÷È®0â8ˆ¸}dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cvñ=²‹/–Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dß#»øb`™1dcËŒ ,36°ÌØÀ2cËŒ ,36°ÌØÀ2cËŒ ,36°ÌØÀ2ß,óÅÀ2cÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìâ{dWq=ЏmdcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cvñ=²‹/Ž0†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.¾GvñÅÆ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙÔq)š9ÙGv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dß#»øâˆcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìâ{d_` Ù%²K0d—`È.Á]‚!»Cv †ì Ù%²K0d—`È.Á]rì’ \0d—`È.Á]‚!»Cv †ì Ù%²K0d—`È.Á]‚!»CvÉ=²K.pÁ]‚9à‚9à‚9à‚9à‚9à‚9à‚9à‚9à‚9à‚9à‚9à‚9àrß9‘ \0d—`È.Á]‚!»Cv †ì Ù%²K0d—`È.Á]‚!»CvÉ=²K.ü8Á]‚!»Cv †ì Ù%²K0d—`È.Á]‚!»Cv †ì Ù%÷È.¹ðãCv †ì Ù%²K0d—`È.Á]‚!»Cv †ì Ù%²K0d—Ü#»ä Ù%²K0d—`È.Á]‚!»Cv †ì Ù%²K0d—`È.Á]rì’ ?N0d—`È.Á]‚!»Cv †ì Ù%²K0d—`È.Á]‚!»CvÉ=²K.ü8Á]õþì€>jqÿ‘ÿþ-]I±:ÄØÌgò$~>¿€J>oÞE©ôà÷æÿæC8’ÿ½ù"GWØóûæËyœÁÍgÑÉE H#†8¡å†í£—¿s•çôù(ÿ½ùñU¼Ÿ¬n¾šùy-gÑ-nÒçÔ¢/—óó̈³êIJ}­ºŸ éU¢Ð@zÕR(ëUwœ™ÝU7ûI¾Ü!×­ÎWÝìï›Ã¼ä¯º2™[ΪËéhÑÍ«U—G©ËÞ™‘yB:¸ùb¨JêæË›®Óg÷"+PÜx&oÕåóhÕ—ëU—¡Lë¡T .ƒüU7›óó`OU>ä7k3o­Í¤W]*«Ü!?>Ä0ÏzÀ—[Í@ ùŒäfÆ¿¬µÔ‚›_ÈO‡æUæÚŒäºÎ–ì@ 3g 1Ôò÷sx,¡êB 9)úìbXŠÇZÁÑg7ä'QŸý}šj< ¸R ןÉáÐäB‡œÍ—¿»z4k bØÇÍGrýÙ³{šj=ˆ–ýÀ²ѨFîÍù#ޏò0âúq.ø"?â¸zGc9¶æËMŸ“ËZË ÈuÄQrS˜4¹F¾ÜF\w".‘9K WîÍÈŸŠq?ãTäËßG#°ôĪrˆ\ƒ««ˆË&ÿRtÃØZ¢ˆËÅ#?‚ïˆ~wq#ÿR¿{Q¿»Ñﮉ l ªß=Ñï®Ï/’ÂØ˜GÑïnÏ/êß=Œ¸‚EïDÜ›ü4Š÷|–Uþq~ñ5Á^Ž_úCvl¾¼ÚÇ8ù~i/ÁÕ_J*m¯:âJ%_nºø‰òS‰™.Ó­œÔ9C.ù)ŸÝ°nµ\õH4ëVõѧá\½ëˆcU4¼{ “V|óÚ/Mú)£ÈO#xàw×çg»Ü%?Zþ®®s›9 áú¥ý~wã—’æNé¶ÁïnüÒy}#â8ˆ¸ òÓÂ^ªû~éØëš§}ó¤ge|½;\uîµ:~éøÝý¹×YŒÔ@nüRΞ_úI?ªž_jèGï}>w6i»‘«™ :ÞO™¤÷ù±è¹öKëáÏ½Ž”«7oÈOò~L(¿ÔGUîU£D-›6ž±œÌ²«Ž_Êç±Î½VÇ/9ˆ?÷:òE‰ä–jéû¥à¨êù¥Ú7»ˆ8 "îbîUìaÝ÷K³ô‘Û|È¿TÈŸ{ÈÍÜëøî¿tîUÑÕÍÜ+ä§~4_¾Ì½&þè%çGß¼"‚ŒÜ$ººñK)"?õèêvî5ñFÄÕ â.æ^ÅN Ög CÛüˆ›({ñ&F¼)£ÛÈ»­¤òÞÜkÅæ^듹×<Ù¼Ü̽ºîÍHÈͬw "ÎÌz_νVlîµîϽþ™Pˆää—ÀvB»ÿ»¯ yoîµbs¯õ~îµ^̽ևs¯:âú³ÎÉZÇõ¨s¢ë¸3¬ãzЫ4u\ ë¸vN8蜘:®G]ÇQXÇu·s²ÔqÖqÝíœ,u\ë¸uNt—Ã:®GÝ-,a׃Ή®ã4ùi©ãºß91uœafÛ:®‡ö;'¶Žë¡ °UÇõ(âbò“Ø™ß'“%Ÿÿ•vNt>†ù¼‘GùüæóVäóg˜Ïy˜Ï¿'Í_å¬zh÷t;'?1'NçdìÙGtóÝÔqêæ»!µëi¬ÓïœÌŸ7»“æ3]y²µG~ºúÝMçÄÔqçÎïn'Íu—v~÷”¢:.íüî 3{§Žû•?š4;´û s²Öq)ù[ÇQTÇyŽê¸ÕqVÕq9ª&Œ¼ÕÄßÎÉGgåA§'ÍmgäÔqïÎÉZÇYyPÇéIs[ǹuÜ»s²ÖqVÔqfÒ<þækôÍ׍޳ò Ž³“æ=ºz{\ÇýÊMš‹ùê¸DPgäÏë8+ÿŠüÔqVþ¸Ž3òçuœ•E~ê8+\Çùó:ÎÊ¿"?uܯüѤ¹X„Ï~ĵ>q}™4¯Þ‰áz:“æ”4þ¼« DéÞ‰á2§9ÎH®94¹³;¸:.^\ù‚nrGÅÓœ¦ò¯¾®zG~Þ”–¹]6Ý<•ºÌz»ÝÂQ9z³ÞÙ£`Ù]ó?à(v'OKo‘Ü’`váØF<¬­my¶hÛøá–aíê“NwX{.[®¾|ë1!9•@n¶Ê&΢­£2^¦­«O?ò§­çªõ¯¾ìó§‹¶µ@nOÕ¿h%7oñEþ¸ôϲõåËFÜz®Ú@Þï´ñäCÙ™|Ÿ™Ë}¶Í“-«ü£š˜¹¯ëÃÎDöåæÝ†5>lÉ5/R\ö“ÁÓ\V3x”Ë#·’@®*©¬Þeª}ØQýŸ\Uy”º®['¹0›÷:²ëÃ~⋚SMX|‘îÛÔ¶ø°Íóaç‘p§š˜X‹üîUsâƒ7ðäQGr3eß"vÁ5߇Õ'ÅÛ…Ûú°l=©¶_MŒB.õCþQMŒ/>ða_½¾Üò‡òá<&fÏÁÕmרø>ìk}ÿOs}XÅVÕÕº}>eÆÓ9ù>ì2< åæÜªj:©§Ì‚·rûÎ+ׇ| ®NÑûHýîñg×;­ùì´õÍGÄnýèàw§lç¨}öµ¾ÿ§y>¬æF_D\ "î‡](8 óaæÃ6̇m˜Û0¶a>lÃ|؆ù° óaæÃ6̇m˜Ûîë÷váö‡>,Û{{ä ™ìâWþé éìâ ³ #²‹3Ì.¬<È.Î0»0ò0»P®Pž/gäzŠ»ø®Ð° n^í6óÔ”ë ÝŠj 7^dõ]!:þPó\¡quß wã ™¬òÜùݵ+d³Ê´ó»[WHg•içw_\¡¬òWþÈbÛ!RÇ-Yå¯ü³Ž3Y%EY¥‘ç(«ÌQViåQV™£ÜÆÈKô6’e•Vd•ÚZ¬Ìä×qÖÊä(«´ò «Ô®Í*\¢·‘H”UZyUW(þækôÍ×(«´ò «4uÜk}IPÇíd•¿òG®ÐòVŠ'Ye›<“¶Ê=þ“ŸUêc•FnùCM^[ü¡†ñ‡ÚþÐxJ”È ˆÅÏ*e±6ü¬2íµÅj¨=ãé“âVnùCe•ÁW—£Né%¨aü¡vÏj®P{è -ÖF{Ð`—CZ-«Üá%rê¸Ù_O'ûrMCѶŽm°ÓòB Žs_èQÇ¢=›+·¡¢–ÍÒ`÷¯¾6Ø{Ô`§@n—Ï#‘’‚›· æ®ù¹SúßüÂ#I5Øk ·•ÔÎc"G‹6v…غBOm9šîÓþÊ?>¤N¤ZWè”âË·’–wbø‹Ö'ÆìÛÿê–Á#î>?mó¯¾,ZeëØE»À“‚E¼ÔBˆ‚›·*‘+Üü²QS´hƒ›_íÎN[¢E»BºcögÒ÷ '/›îóHاà-‹/7<’”|hÃó妅±Uó}œgpóŠG27T‚Se¬ˆàæß<’9i^½Iæ9–y7oy$ªÿË#Éóm Éß7ÿ“{¾>y$óyk¾üÍ#™ïùñ_B;¶›è³ëb$äͯM§_ù=+çáÚ”ò!÷Öæ°rŒsEÑÚT ׬œ¾ÍÊ?o³¯ý mžG?=VΔG7¯X9ÕŒK_²rúVÏÇT W3þ]¿éV±rDŽܼfå˜yçKVN¿`åÜ­Í?rŸ¨óÚ‚èt ¢Ó1ˆNÇ :ƒèt ¢Ó·!:ÿÈÄ•ü;ˆNÇ :ƒèt ¢Ó1ˆNÇ :ý¢ãÃ:>ä÷¬œŽ±r:ÆÊé+§c¬œŽ±rú6+ç“,ÁgÿŽ•Ó1VNÇX9cåtŒ•Ó1VN¿`åÜVÙ ,Þ ¬K$NÇ8Cât ‰Ó1$NÇ8Cât ‰Ó1$NÇ8Cât ‰Óï‘8aŽÈAޏÄé§cHœŽ!q:†Äé§cHœŽ!q:†Äé§cHœŽ!q:†Äé÷Hœ~1ŠÙ1$NÇ8Cât ‰Ó1$NÇ8Cât ‰Ó1$NÇ8Cât ‰Ó1$N¿Gâô‹QÌŽ!q:6ŠÙ±QÌŽbvl³c£˜ÅìØ(fÇF1;6ŠÙ±QÌŽbvl³ßbö‹QÌŽ!q:†Äé§cHœŽ!q:†ÄéûHœ¤Ÿ¦IÐÝÉ$NÇ8Cât ‰Ó1$NÇ8ý‰ãÃn>ä÷䛎‘o:F¾éù¦c䛎‘o:F¾éù¦c䛎‘o:F¾éù¦cä›~O¾é3Î#ßtŒ|Ó1òMÇÈ7#ßtŒ|Ó1òMÇÈ7#ßtŒ|Ó1òMÇÈ7#ßô{òM¿˜qîù¦c䛎‘o:F¾éù¦c䛎‘o:F¾éù¦c䛎‘o:F¾éù(×R4(²O¾éù¦c䛎‘o:F¾éù¦c䛎‘o:F¾éù¦ß“oúÅŒsÇÈ7#ßtŒ|Ó1òMÇÈ7#ßtŒ|Ó1òMÇÈ7#ßô{òM¿˜qîùfÞ2@¾™r€|ó–E¾QòoÈ7oùWä%ÿ†|ó–E¾QòoÈ7oùWä%ÿ†|ó–E¾QòoÈ7oyx6ý½?íÖùßòÍFÄ]‘oÔÍC¾yË¿"ß(ù7䛿òïÈ7Jþ ùæ-ÿŠ|£äßoÞò¯È7Jþ ùæ-ÿŠ|£äßoÞò|G\ "n›|ó$â»Õ¸}»Õ¸m»Õ¸}»Õ¸}»Õ‹¸v«qÛv«qûv«qûv«qûv«qÛv«qûv«q6«Œ#®·M¾¹¸KòÍß›ÿŽ|ó–E¾QòoÈ7oùWä%ÿ†|ó–E¾QòoÈ7ïÍê+ò’C¾yË¿"ß(ù7äU =Î*åùæQ÷I¾ñë¸mò[ǽ¶É7~·M¾ñë¸mòWÇ= ߸uÜ>ùÆ­ãöÉ7n·O¾që¸}ò[ǽ¶É7A·K¾‰ê¸¬òWoe•Ÿä7«Ü'ßYå.ù&È*wÉ7AV¹K¾q³Ê}òMUî’o‚¬r—|e•›ä› «Ü%ß„Yåù&Ê*7É7aVY6"Ž¢ˆÛ%ß<ˆ8|ãEÜòqû䛨ŽÛ$߸!³O¾‰ ±MòM2»äwÍï“oÜ5¿O¾ +©ÇDŽí.ùæÑ¢ý$ßx‹öùæácb%ß‹v—|ã/ÚmòM´h7É7Ñ¢Ý$ß‹v—|nÔ{ä›pÑîì´%Z´»ä›œžÐEÈÒþȺHî.ùf6­È—[ò:SmH $ÁÕípJ¨‘Ë…¼©ÄYËÿÒEÒ¬€SpóŠ|ÃéyçwÀ{_ËÕ6t^MÿE£¤ €®®È7¤m7]$ålÏ“k¹"ßLþJq&Ž©}vÑ7ßôgOQÓéW~K¾y¶6_y¨økó¥Çf5ùfÔBÕ—ëµ9ó€×ùÆ_›>ùfü¾-¼yRÓð¬oþM¾ISܼ"ßÌR~íoܵ‘o^ùlGpuE¾åÁ»XTä›±‰"¾\‘oFüÕòÚ!߸kÓ’oâµùGovíùF-ÚoÈ7jÑ~C¾QòoÈ7Ñ~¼I¾Qò;òÍ…Ù_ nþ+ò’C¾qCfŸ|£äßoTÈ|C¾QòoÈ7nÄýK¾¹‹¸DÜÜo^;Hœg÷Ä "n‰ãFÜ>'ˆ¸]$Nq›H7â|$Î+çdsâFÜ$ŽqûHœ âv‘8nÄí#q¼ˆ{€Äq#n‰ã?ã^{ϸ‚EïDÜ+GÝü7¬œ·ü+VŽ’ÃÊyË¿bå(ù7¬œ·ü+VŽ’ÃÊù+ÿŽ•£äß°rÞò¯X9Jþ +ç-Y9qÄqqÛ¬œûˆ»d娛ÿ†•ó–ÅÊQòoX9oùW¬%ÿ†•ó–ÅÊQòoX9oùW¬%ÿ†•ó–ÅÊQòoX9oyxè6Ž8 "n›•³qW¬uóß°rÞò¯X9Jþ +ç¯ü;VŽ’ÃÊyË¿bå(ù7¬œ·ü+VŽ’ÃÊyË¿bå(ù7¬œ·ëœ|ÂTüÎÉ6DÇíœìCt‚ÎÉ.DÇïœlCt¼ÎɈŽÛ9ه踓}ˆŽÛ9Ù‡èø“mˆŽÛ9Ù‡èø“mˆŽß9Ù«ã~åDçIçÄ踓}ˆŽÛ9Ù‡è“]ˆŽß9Ù†èx“¿s² Ñq;'û s² Ñq;'û·s²Ñq;'û¿s²WÇýʈRÇ%‚ê8#ÿ ¢ƒÔqZþD©ãŒü+ˆRÇùW¤Ž3ò¯ :HgäÏë¸ÍœlCtDœÑñ"îDÇ‹¸/â@tÜÙ‡è¸!³Ñ Bf¢ãw ·!:ÞšÑñÖüщm8¶± Ñy´h?!:Þ¢}Ñyø˜X!:Ácb¢ã/ÚmˆN´ÏoBt¢E» Ñ í.D'ܨ÷ :áF½³ÓÆ“» :„AtƒèÑ! ¢CD‡0ˆa :„AtƒèÑ¡{ˆ]ø°„AtƒèÑ! ¢CD‡0ˆa :„AtƒèÑ! ¢CD‡î!:táÃÑ!̇%̇%̇%̇%̇%̇%̇%̇%̇%̇%̇%̇¥ûú.|X :„AtƒèÑ! ¢CD‡0ˆa :„AtƒèÑ! ¢C÷ºp…ƒèÑ! ¢CD‡0ˆa :„AtƒèÑ! ¢CD‡0ˆÝCtèÂ" ¢CD‡0ˆa :„AtƒèÑ! ¢CD‡0ˆa :tÑ¡ Wˆ0ˆa :„AtƒèÑ! ¢CD‡0ˆaº‡èÐ…+DD‡0ˆa :„AtƒèÑ! ¢CD‡0ˆÝCtèÂ"¢36ê|[¿ÿ€7þþ«”Wùïß*&Ÿ¯/Ÿ4BÕ—S˜×ý{õ¸ŽL;ç÷ÕKÕW×®P ¯®«‰¬¯Îù=ÉÖâCÍŠEk•(â4VLE\Çm¹Á™œÞÁgâGœÆ™ü¸2‰ %’7õÈ`ö"NòD…ørqå8³w0åg;øÝuĽôšW­©±ÝD¿»XV¿»Š¸³Ñï®"nT´šÈ¦~w>¢ßÝ>Êô‘ 0â q¼qÚ‚°OÖ7OÁSæÝ#:J äæ`Šêîh ¢Í-87û(ó,ˆ±QŸÁÕ-ÒC‡Rh @N:É+íÓ‚È#¢Èß5Ç캒ƒô˜ 7Cü2òfê9Äœ—IþÕµAsWp-ˆ‰Á ädÙäX£b8‚ßÝLé»HVŽàw7DUñ®-ˆOLö‘}çÇAÄÅH×2”XóàÂfÈž1—kA´r<ŸŸ7¿Z#gZ˜Ù³ ’j ¢j/¸º%#fg”llÔåèœ>c«‘©ÁÍ›}þT‹V[éX˜Ù³ ŠzLh â⫳ÕWZV¾aAÌj/Wó»û£dóôe äÍ,íîY³V ®nvZu®å"â$ˆ¸x”ìµ 4å£d?Œ²Ê?,ˆŸž¨Ó[êy¯óåÝÔ2ä5DóØ)C¹±[w‘yé1ŸRãg/Ü<ãšÓšÛ4¥àæUkj¹%gÊ>ÏPåM·Gv‘yéñY-ÈMn£¦rÞ;m?rô»›vl*äµcóÈŒB¹îlñ.Ò#ß#=òÅ(Y~6Jf"®=Š8n2>¯ro”¬ðÞ(YÞ%»i5rûÍW×ôkÑÕ—Q²ž½ˆ+ãéÓ¹î8jÚ%ËFÉÆßz 䦓­O¨Ï~†W·¦{½äñÃõ“¹%ã½Q²üh”,ç–¹uoªoú…W_L¿¼q-ªãÂQ2qýiçÄÖq=蜘:î ë¸îwNl—Â:®½JSÇ¥°ŽëQçD×qÖq=蜘:ŽÂ:®»“¥ŽËa×ÝÎÉRÇå°Žë~çÄÔq¦sbë¸uNT§a¨K׃^¥®ã4Òc©ãºß91uœ1>@29~ïÔq=ЏéñZ¦ðžtNÖ‘¢Ó|þ óy#òù3Ìç­<ÈçÏ0Ÿ7ò0ŸgÔ£. oÞ oê›W‡3rîG ï¶Žó‡7Gb×y3åyÛ9Ý¿ú2¼©&ÑÎß=Qwîüî†j긴ó»›Î‰©ãÒÎïžèq÷+2¼ùZFŸtN–:îWþ C5uEuœ‘税ËQgåQw‰ôÈÛH:Îʃ:îÝ9Yë8#ç Ž{wNÖ:Îʃ:îé‘÷‘kgåA§:'Kgä5¨ãTçd©ã¬<¨ã®‘ùé‘/†7ó³áMqÕq‰ :ÎÈŸ×qVþ¸ŽÓò/ê8+\Çùó:ÎÊ×qFþ¼Ž³òÇuœ‘?¯ã¬üqgäÏë¸_ù“áMqùIĵ>§ï5!»7ªêÑF‘Ò’d_®‡7Ï–ëgÄÕ£¤*-+°Ñ»Š|GÜ ¸RÈ•«ˆ›‹Ž›;FWt!få†âÂ;j/þW·A܈¯Æ‘\C5üCxÇø"¤ør2H÷Þȇk >»Šøl†OœIöGGÕÜ«ŠT3B˜Ýˆû9DWœˆϮރÏ^ÌgW³`qÄ…3'á䩉¸ò(âæùZ¦/³Ç#™¿qµµâË͸tJâGÜI‘\Gœ>tk"NÓLµÜF\-Ÿ,=’œÉY‚ˆ#ÿ«["®Rqg$7§f½mÄ1ùrqÅÖfIÁg_h(%ˆ¸`Ù¬ÃÚDœDrq™¢ˆ >ûq3')ž9);3'ò3oúàÞÑ3±¸hFöáUS¿¹®ãLýž †v¡¡¯Ž+šè™u£«o:}¼ÔÅ/^Gä;àÔùn^;à¥øx²“NF®&ªštÒuÜÅW§ë8óÕ©ŽMØf ']ÂV×—ÙNòåºc6[S¾.‹^\<û¸ÌåèËM§`ij ÛqÀËC˜ ‘±óÊ#¼ŒÇÜ*ÿtÀÇÖ;]ñêdÞi©åÝN¸yøÒp³ò4Ü.a*e¦ò§¿ß9™kx'ŠM0…/Oº?Ïâqæòy0GrÝ5êe¦RÀTfÓªS '0R?ãÆ¢ ~w[ÇQs$e»U¹ÁŸ›0•rS)xyS!Ë¥(˜^0¼`xÁð‚9àsÀ æ€Ì/˜^0¼`xÁðrß9)xySQ7Í…òijÙůüÃ3ÙÅfFeg˜]Xy]œavaäav¡ü8¦ðæõnCúæµw–#ëݦpàÇQZü¸âùq“¹âúq§žhÕrãÇ=ÑzîüîÚ³Yå¹ó»?Îd•içw·~\öý¸øw·~ÜVVù+SÑ—žÕqKVù+ÿôãLVIQViä9Ê*s”UZy”U^ÂTÊ>LeÍ*­<È*U·d•FÎAV™8Ê*­<È*¯a*åLeÉ*­<È*ug³J#¯AVi¡˜9úÝkU^ÃTÊ=L¥\øqå!L…,“ãIÇmÒVùgÇGë¯-˜JÙ?%?³Ê¼˜JnV™Tjd³Êèê LÅC/poæM,d•Y5®a*åLe¦ó-¸ºÉ*%‘ŸU†W7Y¥¾ºÚiÇ/×R 7xê¯-˜JySÉY$›¬2—(« ®¾d•²qEo=ãò“ˆk­¥äù'L%³Ç¥˜î@&ñåÆZ»uôYàráÇ•‡$²ÞÄ“ˆãCxÁ™3Ò,ß—º+nÄY [E\;K$ozGcß/œÈ•Ûˆ+ÍwÀG†É Hæ ðÆþW·D\ ðÕó#N;b6âÎâËmÄõÀ§|vË¡‘È–ÍqÚÂ6—#¹‰8‰ð|ö%âvžq%Џc£{•ãÉ06“~¼Ê]ŒM~ùɾ|ÁØTÇ‹Ìý ¯®16Y_]e’ëóz@uõ7Æ&×Qˆ/×Ro‰×ì’Ì{!´\WR¢Æ2þŠß1û#÷a7¯-¾ c|Æø6ŒñmãÛ0Æ·aŒoÃ߆1¾ c|Æø6ŒñmãÛð=ß&Œ¸DÜ>߆1¾ c|Æø6ŒñmãÛ0Æ·aŒoÃ߆1¾ c|Æø6ŒñmøžoF\Á"Žw"î’oÃ߆1¾ c|Æø6ŒñmãÛ0Æ·aŒoÃ߆1¾ c|¾çÛ„ÇaV¹Ë·aŒoÃ߆1¾ c|Æø6ŒñmãÛ0Æ·aŒoÃ߆1¾ c|¾çÛðÅtc|Æø6ŒñmãÛ0Æ·aŒoÃ߆1¾ c|Æø6ŒñmãÛ0Æ·á{¾ _L÷1Æ·alº±é>Ʀû›îclº±é>Ʀû›îclº±é>Ʀû›îãûé>¾˜îcŒoÃ߆1¾ c|Æø6ŒñmãÛ0Æ·aŒoÃ߆1¾ c|Æø6|Ï· #®G·Í·aŒoÃ߆1¾ c|Æø6ŒñmãÛ0Æ·aŒoÃ߆1¾ c|¾çÛðÅ<-c|Æø6ŒñmãÛ0Æ·aŒoÃ߆1¾ c|Æø6ŒñmãÛ0Æ·á{¾ _ÌÓ2Æ·aŒoÃ߆1¾ c|Æø6ŒñmãÛ0Æ·aŒoÃ߆1¾ c| ŽKÑÌÉ>߆1¾ c|Æø6ŒñmãÛ0Æ·aŒoÃ߆1¾ c|Æø6ŒñmøžoÃó´ŒñmãÛ0Æ·aŒoÃ߆1¾ c|Æø6ŒñmãÛ0Æ·aŒoÃ߆ïù6|1OËßF0¾`|Áø6‚ñmãÛÆ·Œo#ßF0¾`|Áø6‚ñmäžo#¸`|Áø6‚ñmãÛÆ·Œo#ßF0¾`|Áø6‚ñmãÛÆ·‘{¾\8à‚ñmsÀsÀsÀsÀsÀsÀsÀsÀsÀsÀsÀsÀå¾s"¸`|Áø6‚ñmãÛÆ·Œo#ßF0¾`|Áø6‚ñmãÛÆ·‘{¾\øq‚ñmãÛÆ·Œo#ßF0¾`|Áø6‚ñmãÛÆ·Œo#ßFîù6ráÇ Æ·Œo#ßF0¾`|Áø6‚ñmãÛÆ·Œo#ßF0¾`|¹çÛÈ…'ßF0¾`|Áø6‚ñmãÛÆ·Œo#ßF0¾`|Áø6‚ñmäžo#~œ`|Áø6‚ñmãÛÆ·Œo#ßF0¾`|Áø6‚ñmãÛÆ·‘{¾\øq‚ñmê¾M¶=ê?òO¾Í|½\ÒH/ÜNïŸÎÜ2wÛ)Õò7ß&÷‘Ò²3?ßy<¡ùû›ŸÙŸººâÛ”6>–/W|›‘{¾{•z‚}Ô°šs¢åª’šRûçÙoS1¾MÅø6ãÛTŒoS1¾MÅø6ãÛÔ}¾Í?BÖ‡5ò¯ø6ãÛTŒoS1¾MÅø6õ‚oãs4>ä÷›Šal*†±©Ʀb›Šal*†±©Û›F6vÊàæ¿ÃØT cS1ŒMÅ06ÃØÔ ŒÍ]`•­ÀâÀº¤ÕTŒVS1ZMÅh5£ÕTŒVS1ZMÅh5£ÕTŒVS1ZMÅh5õžVæˆ戻´šŠÑj*F«©­¦b´šŠÑj*F«©­¦b´šŠÑj*F«©­¦b´šzO«©³z£ÕTŒVS1ZMÅh5£ÕTŒVS1ZMÅh5£ÕTŒVS1ZMÅh5£ÕÔ{ZM½˜Õ«­¦b³z›Õ«Ø¬^Åfõ*6«W±Y½ŠÍêUlV¯b³z›Õ«Ø¬^Åfõêý¬^½˜Õ«­¦b´šŠÑj*F«©­¦b´šŠÑjê6­æŸÖÒl¼ò¯h5£ÕTŒVS1ZMÅh5õ‚Vãsh>ä÷PšŠAi*¥©”¦bPšŠAi*¥©”¦bPšŠAi*¥©”¦bPšz¥©C°ƒÒT JS1(MÅ 4ƒÒT JS1(MÅ 4ƒÒT JS1(MÅ 4ƒÒÔ{(M½‚­”¦bPšŠAi*¥©”¦bPšŠAi*¥©”¦bPšŠAi*¥©”(×R4(²¥©”¦bPšŠAi*¥©”¦bPšŠAi*¥©”¦bPšŠAi*¥©÷Pšz1[1(MÅ 4ƒÒT JS1(MÅ 4ƒÒT JS1(MÅ 4ƒÒT JS1(M½‡ÒÔ‹!ØŠAi¥i”¦aPš†Ai¥i”¦aPš†Ai¥i”¦aPš†AiÚ=”¦]Ý ƒÒ4 JÓ0(Mà4 ƒÒ4 JÓ0(Mà4 ƒÒ4 JÓ0(Mà4 ƒÒ´{(M»0º¥i˜ÑÝ0£»aFwÃŒî†Ý 3ºft7Ìèn˜ÑÝ0£»aFwÃŒîvß9iFwà4 ƒÒ4 JÓ0(Mà4 ƒÒ4 JÓ0(Mà4 ƒÒ4 JÓ0(Mà4íJÓ.ü¸†Ai¥i”¦aPš†Ai¥i”¦aPš†Ai¥i”¦aPš†AiÚ=”¦]øq ƒÒ4 JÓ0(Mà4 ƒÒ4 JÓ0(Mà4 ƒÒ4 JÓ0(Mà4 ƒÒ´{(M»ðã¥i”¦aPš†Ai¥i”¦aPš†Ai¥i”¦aPš†Ai¥i÷PšváÇ5 JÓ0(Mà4 ƒÒ4 JÓ0(Mà4 ƒÒ4 JÓ0(Mà4 ƒÒ4 JÓî¡4íÂk”¦ßCiºùgy•NÙÏ4ÂTÿ‡g_À—ëJŠõ4¯.FJI‡/7ÅÈ(6ýYor®î|Cº“w¾¡S§0£¦\å§ ŒÙ«OAŒÕÕ(›*ÄDœÁÕM“ w 2þ÷èæÍq5JÞ¡è ™ˆn^gÒÔÍÿ»:ÆÚ(–°‘ÝÕ1çÁ»w!MÈDñålÆ+ª8çÆÓ@|KwÎ!Œ¿¥ð-׿\˜µW¯Í<Ë*ymP6Öfyº6“9fRµ©3zmöZ%›Â†Š³6³Ì¡__Nº‘¡ÏÈ(É,ƒ«›µ™‹÷Ióh“Ÿ]¯Í¦ý]›¥õ#÷àæÕÚ¤`m¾–>Å_›³×ï­ÍÙоyÓÄÑß<«o¾Ñ7¯öMÊmBD6Ö&ï¬M 9R+«ü"rèÇ¢èº5/ ’îõä #¦ê/8GW7¢–<ˆÉÑ$7³´Õâjý¤óX+7Ø+õóªžü(gI÷zòóxÞgO~ rtu™‡ˆÈÎEëÊUO~DF}†ˆÈÌ„¹íWˆ×“ÿdÏt¯'¯Ï,êž|ÏáÕuO¾é«'õ»·#øÝuO~–³©¸‘þ "b"N6"Nõäç íù!ÿèÉE×Ùª4Š/á@®÷ãҊד¯çѵqläM}ô¤lk[»›#ZþîÉÓÄ-Q ××ßE·êÉ È l­çöÙ“§6Ö,µ@Þtç]9·óK¹Úέü½ÓÊÁ¥?œèßýô "ãAÚVöL÷ÎÈrg«äǨ䆃–½žü•¼¾ü"â$ˆ¸‹ÙªeÊ¥?™­z¥^Uî@DƦæõäK=*ûòTû<ÙYJ#×wº‘4rˆ@nf«ôy@Õ“5°ðWº×“ׯŸýŠ«›·³U§I“®Þü{ŸO?Kû³_1Ö<…W×=y2º'??×@NÁXm}ó9úæuæß¼Î|ÍÍgUV•ðê¦'oÎö‹Ùªþp¶*Ù!™Ç55ÕUîÌVµ–ˆ›ÐÆÂ¾Üº`ìM3¶Ùë ®nf«Ê™ˆ+GNˈNw]0R#:¿ºœó¨Ó%ëÓÇÊP Í»¬‡:'bä6³RçDÞ™Õ¨åY‚«›b‘²×!¤9ÔV|¹uÁHüÙªu,­³UÙwÁz÷÷Õs§ÇÜ‚«/³UÙuÁF¢üî‹ V7"®w1[¥#®oõÂ:®«jâŒê¸3¬ãºß¢°u\ ë¸î·(l—Â:®‡- •ÏSXÇyTÇQXÇu¿Ãaë¸ÖqÝíp,uÜ߇Œ"¥ŸÁg/Ag "¶Ž3ò ŽÓ ’OöŒÛ 1ìë¸4Ht§$k×ÃIšw+Dä¾A2'°ž4H–´ýWþÑ 1ñ3LÛDäÅ£ÚÓØž´$ä>£éû7¿‹4X "ƒˆôG‘Rr qŸÏނϾ‰4¨Ágÿ"Òï!"ýbh±?ZÔ_]yôŒkµ]d•<ãòÁ¹ø·Ž ú§Æ¯!"ƒˆô}ˆÈŒ¸Z)ÛI "îôož¢ù•kˆHÇ "ýDd†œDrûú¡E\ðÙ—ˆ“×D¤c‘~éC‹ýáТ5ºç5·ë8O/þÝ]zÝeDÜÈÛwä&Ý3º%ÛsºFÞÔêàÓ3º¯ä*»°retOÈõnÓ«gt€éËY[͹{F7œ¸µ@ÞÔPœzL(£ûJnfê´ü]ÇñÑ*?œî˜µêADÒÜmj ¯ „ÙØ…Aޝ.¥H®Mþܼ:îJÞN_®ú´ŸF÷üoÏÞ–‘´k·qÖè.Ç*÷ŒnñŒîsfLXËûig‘:.Mv$·ïhq!"ivåËÛ2J`t/o Qò=«óã›7uœ¾ù÷3n¬ ±#yÓíj"’ò¤ ør3?\ÎÐè.ÜvNÜ£0ß|޾ù\wnÞ@DŠI㟠äöme'âjqWoË0v듈sŒn7âön?â¶n7âön7âön7âön?â¶n7âön7âön?â¶n?â¶n7âön7âlç$ޏDÜÕÛ2 á>âÎ0»ø•úq:»8ÃìÂÈ£ìâ ³ +²‹3Ì.Œ<Ì.ÞÏwªs 䤡Ð5Êcû2ò®¯®RÚ“ñµÔ@®žqýH®˵gäÊ»øÝg²ÊsçwO)Ê*ÓÎï®ý8›U¦ß]ûq›Yå¯üÔ?isáQ·d•¿rÏÏ[²J#ÏQV™£¬ÒÊ£¬2G¹‘— ·±~ÜòB·Ž³/4(}çæ9È*ßuÜšUZyU*ˆÈ’˜¹YåêÇ•@d•"rñÍ×蛯uçækUjˆˆÍ*¼=Î*åÏ þÆz–UΗV—Uþ‘UòQE¼:.O’†/ïv¨'9Yåxl×\Ýd•í7«¤n-­ «,¹xYåüá(ëÎI.-È*[ ·Yej~V™s$7µ47«,½4_n²Jbò³Ê…¿d•š¿BœãÿîKw¦ «¬ÁÕmV©Rb›U¶àw·Ye*GQÄñÖ3.?ЏVÛ‘z_åNÄå÷W§Ü‰K¶†šq1Ò`…ˆx÷"âE\™É‰p äzÕeÛC3iño~i°@D¼ˆ{ñ".„ˆLw ä@nê8®;PƒÏ¾‰4àà³ñ"nˆÄ—£ˆ»€ú'm.<‹89Š…I¸WÓÃö̈[ µ ⌡vñ#n"Dœ ™g°=%Š8Û3#îôo~‰¸8à D$ˆ¸]ˆHq.DdFErq¶'/†Zq9rÀsðÙ¿‚ˆ„'W¢ˆ»€ú«ŽÙŸ9ðGF0•Uî½g´»G&¦Q|¹Å³)€ÆpÎú@ÞLrâ¾gt„²r²Ü#ÓNlÜ]@Ç<Ъßô©å fÛ{™ÃO_"¸z6Ÿ]ó= ޹íWú<"ðO)qtóª†íY_ý=Sz’Ù¨\½˜.UÓ¼#…Ì #o:­käàC¢NÕ°y$ÞXØœ5{æaÈ$>>äNȤ÷8®9UóÒØ]#OÛCAÈp ä;!3õørK¦W'KtÛg–‘ܾžÖ=U³Π dæ¶à†L2KOCæeЄÌKPÕ©š¨ú ä‡Ìk¹§jZ‰>»9UÓÕgW!3}>»òCæ•ļR€ü™KÓÇŽ$óBƒ_ùM`åg•úlç®òÀw¢ 4§æ-é,ÀÈͳ¨øÇÕ~^DÈ  –ƒg‘îp¹}5/°r?j ®NºÃ¡²¿Ó¼ò¡çàêæYÔÄ ¬|hLª•7Órkž ~8ó,JòXÿŒjéÐ/ϳò7¬“~qM볈gc+›gQ:½Àâ2þÝ೫À* ê=‹ú(ÿƒÏ. ]vx>y+°Ê³À¢vè’òWîV+n`É< êËM`©Ú@Ír-›ÀÒqi ‹z”äqµG)KXÒ½ÀJ4O·úrXUÜ$¯ŒO|u&°HŠX‰‚¯î6Éû'K>L—X圮¹X™&ÅÍ—›3}öX…Gþ\õ¡©~z ¬ñÍ—3øìƨ¨ÑËäPÖN`ñN`i¤z;R[埠¬¬OÊjP=[7„]PÖ\ÈíKÅ“ã;ÿx4Ý—/Hu”UÅd’FNÚÿ”•ÆC#wû:÷âøÎ:¼Y´~9U2Ù”’';W¦¦Õ9ÐÒÇ—ÈUgXŽR>}çQ>¥C¹ÞPÛ¡Þ«3•nF³Œ¼ùˆ~yE²¹œ–“ýæÉKƒ?@Yó¿=e±y á}Äé—–¡¦Uþá;'Ó!TyÒ<Ñ×|y¶8yr|ç¹ÛècýF®·sÕÚ5/¯8’N1µ¼@÷·ïL42n^ #Ñ/ÞË+(Ì·úrÃ=ÉŸ¾óÜ«ÎÜ<ù±~yEϸäËÅ>Æ»ã;¿>’Ï@®~÷vHw|ç‘Ôe‚79¾ó‰Ùñgö}óf§ÕoP¬zÕ-/Ÿ|Ë›]u¼qDÜ(‹ íi#âþÝçi¤OT,sHÝ<©®‡dšIaùrûJ´äœ‘™ˆ 3ðoäº7[º;?|¤èêË+ÑÒgO>÷Qïá@®^#Ð9³7?<[úÍ—›ÄY;¿Úwf3Ohä†ñªæ õË+$¼úïÌóéÌ9øÝß=ùV]È=•FsÆÓ—[ß9;¯D›_i§àêº'ßÏêÎÓ|7ƒ/·;íûêWƒˆ»e±¥Ü¸ùt§3ó*ÿpÁ&êÓ¸‘v×@Þ­ÿè¾ösì"¹qüÕk‚tÄ ¼¹ò%âNúˆ8æiá%äê lí͉¸T~ؾܸ`•ØŸôHÜü2?ì¿.&qñ¿ºõ%„Þ©´Q>Ëüpò_ûÌ÷£Ÿ}™ô^ûi`QÍ8 ‹2¯ýœ[/_r›²q-ˆ¸ P–ޏþ°¥ŸëA²Ê?[ú#{,nK_ŒÕ£–þÁ.Ë{nÕ)Û¶v ZúºŽëqKßuÁêxÎP 7u\ñPà³NoÍ—gSM¸˜úŸï4¸ºméSs[ú¶ŽëaK?¹.˜ˆÉëºßÒg6Ž€ªãúQ9š» ¬‘\鄼‡-ýÜÜ–¾­ãzØÒ?ƒÉÊÚhÌ)ã' ’¥\û•4HL¹¦$?ž/¯ÁÛ¿tƒdÄ…væO¿A2ϲx$ñù˜Ðƒ<§ß 1ƒ<ïÉZ®YyP®© Ѽ{_nçªÊô®“Ç܃›7o}+gñ$“‘ïuɾõMU{gT®YyT®éŽs2/Ì;ƒIÒ/Ì{o¨cK"¢@nì uÐV7HFZçóöížgÙhüʲØÐž4H>ʵ”ÜÉR®QT®yŽÊµ•kV•k9*׌¼åÚßÉG¹fåA¹¦óm¹fä”kªA²”kV”kz0ß–kF.A¹öoƒä³\³ò \Óƒù¶\3ò”kïÉZ®YyP®é‰-׌¼=.×~å@Yl AH¹–*׌üy¹fåË5-ÿ¢\³òÇåš‘?/׬üq¹fäÏË5+\®ùórÍÊ—kFþ¼\û•?e±°~qýhãz¼Ê?Z’£Ja?âF¢S}¹8}Bºšˆi¼ùÖ*â&'¸ºÅö¨«ÿq}²mÈd/âFIfBæY}²¦‚ˆÓ¬©wÄ壶&\G\Jî˜p¯nÆ„ é*½gd¨¥ÈÉ&¯P–q!(+ñ:˜Ÿ æÇWóÓÅ`~zÊÒWEÜ ¹tÊ*wžq¹—(âùq%ЏÈ›?a½Fœõ5âœÃg3æN½Ï÷7C£dïðÙk*04kÊFÜr(!ˆ8öžq3䢫Ûg\n~Ä­ƒù~Äq8˜üp[ ¬q9øá¶óã«Çƒùéb0?=e-F7=1ºG1Si•Ýe¾~È«ãÆƒbq,É­ãJ Œn3SgäÆì=#£»_n³ òŒî3MI 'õ Í3ºgFNÕ—àq«®Ñ=û¡ÁÍÛüÕÀèN‹SM®ÑÄ3ºGF:b9¿÷9ŠìÝé¨öLo¹ªãæ Î}£›Žè›×FwRSÆÖèÖ‰™‘›:®°2ºéÂ覧 ,K<¢ýgÜähôYDÞ3®¹øÕŸß]Š/ïÁœ¢©ã2)›:NýîÖ设ÔqÙ9î9K™Þs '=²uVßè¦.¾Ü<ãø,nWZ n^?ãæYbßè¯nžqúêÿî´ã›O/äô>ò1;у›·uœxÏ8>š´àêú€õX¨‘Ñ]Ýî´"Wƒˆ»eYÏ0£›0£›0£›0£›0£›0£›0£›0£›0£›0£›0£›0£›î;'tatÓSP–õeè‰g³Ê_ù‡g²JëǥȧHÖÓç5­\¯ºž?NK‹\?NôhQViåAV©ý¸óÃ"ÇËÆÒ~ÜYSpóz·}>Hï6E'¥Zný8”žQViåQV©jX.G äv`9¹~Üøg…¹~qäÀ£à‡³~œjûÄ÷+ʲģuÜšUþÊ?Ç&«¤(«4òe•9Ê*­<Ê*s”Uy ²Êw·f•Vd•ÖÓy‘sU?Îd•Vd•Ö ¯.AVù·ŽûÈ*­<È*?.7_ƒ¬RmViåAV¹øqÑÕÛã¬òWþ ”e­YåL+ÓâËxYåË¼Žºéç{Y|™ Ž;£¬²•@Þü–ךUŠ+_³J§WÉcŸNgäYÄÝ­ãÊxÆùŸœƒŸUÚ~EY¥BÙ¬²_Ý‚_Mâf•cÕFr3IJúÑ}ùr6=YåâEY¥ õÿsŽÍ—/YeÛˆ8Š"Ž·žqùYÄõqïg_åNÇ=Eî@ñå‹; ;°ð–Èw¨Dî€õÕøìœô‘.&2Ù8õVáÀXXS~ÄiÖ”qÌKŠ/_JqÏÞÙÒ(¬×A%8{S‚«/åW¼d ä§uªß½èsG²Ð¸²wö&¿Ð§ÙÏ£ŸÝèă“¼²}Ç=5³…Àú#÷¡[¯-ÎVÆ8[ãleŒ³•1ÎVÆ8[ãleŒ³•1ÎVÞæl½ä¤9KÈ¿âleŒ³•1ÎV¾àlÝE\"nþ ¯-WÆ\pe À•1WÆ\pe À•1WÞ§¬Ê$R—à³àÊ€+c®|຋¸‚EïDÜ%™+cd®Œ‘¹2FæÊ™+cd®Œ‘¹2FæÊ™+cd®Œ‘¹2FæÊ÷d®0â8ˆ¸}2WÆÈ\#seŒÌ•12WÆÈ\#seŒÌ•12WÆÈ\#seŒÌ•12W¾'så‹åŒ‘¹2FæÊ™+cd®Œ‘¹2FæÊ™+cd®Œ‘¹2FæÊ™+cd®Œ‘¹ò=™+_ ,gŒÌ•±åŒ ,gl`9cËXÎØÀrÆ–36°œ±åŒ ,gl`9cËù~`9_ ,gŒÌ•12WÆÈ\#seŒÌ•12WÆÈ\#seŒÌõÄv“œ\ý;2WÆÈ\#så 2×]Äõ(âòÎä|Ö9q]Cve Ù•1dWÆ]Cve Ù•1dWÆ]Cve Ù•1dW¾Gvå‹#Cve Ù•1dWÆ]Cve Ù•1dWÆ]Cve Ù•1dWÆ]Cvå{dW¾8"1dWÆ]Cve Ù•1dWÆ]Cve Ù•1dWÆ]Cve Ù•1dPÇ¥hædÙ•1dWÆ]Cve Ù•1dWÆ]Cve Ù•1dWÆ]Cve Ù•ï‘]ùâˆ@Æ]Cve Ù•1dWÆ]Cve Ù•1dWÆ]Cve Ù•1dWÆ]ùÙ•/Žd ÙU0dWÁ]Cv ÙU0dWÁ]Cv ÙU0dWÁ]Cv ÙUî‘]åÂ/²«`È®‚!» †ì*²«`È®‚!» †ì*²«`È®‚!» †ì*²«Ü#»Ê…^0dWÁð‚9àsÀ æ€Ì/˜^0¼`xÁð‚9àsÀ 怗ûÎI¹pÀ †ì*²«`È®‚!» †ì*²«`È®‚!» †ì*²«`È®‚!» †ì*÷È®ráÇ ÙU0dWÁ]Cv ÙU0dWÁ]Cv ÙU0dWÁ]Cv ÙUî‘]åÂ+²«`È®‚!» †ì*²«`È®‚!» †ì*²«`È®‚!» †ì*²«Ü#»Ê…W0dWÁ]Cv ÙU0dWÁ]Cv ÙU0dWÁ]Cv ÙU0dW¹Gv• ?®`È®‚!» †ì*²«`È®‚!» †ì*²«`È®‚!» †ì*²«`È®rì*~\Á]üˆ,ĵUî!»ÔáýÓdÔ‰|¹=#öX‹ìÒé•·`ÚPVâ?àœÌ=Œ#¹éוâ(Qñ妆U&²Ev­´3ö© ÊÆ5Ô…•øÅûœ“':¢¯NŸÆíÕö·†yؤ·ør…쪇ny½kØ*G‹¾ºw ;~ž¢¾ºw ë¿Ø9;`‰_?yŠÛ«ü•ß#»Ö¨ÿ[[埕4\AÊ™¾ÜÊ)ÊY¸SÊñBsG÷å :°(¯à(7°HÃtÉRM\RX#h‘]Ñ7oåd ôcûòb?»ËÂãfÀi2„jÕjà äÖlT ô’j`väÖÏì„~`xÙ—k“ˆ6ëAv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dß#»ÂˆËAÄí#»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹ï‘]aÄ,âx'â.‘]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìâ{dWqDÜ>²‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»øÙÅËŒ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹ï‘]|1°Ì²‹±eÆ–Xfl`™±eÆ–Xfl`™±eÆ–Xfl`™ï–ùb`™1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cvñ=²+Œ¸EÜ6²‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»øÙÅGCv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dß#»øâˆcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìê¸Íœì#»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹ï‘]|qD€1dcÈ.Æ]Œ!»Cv1†ìb ÙŲ‹1dcÈ.Æ]Œ!»Cvñ=²‹/Ž0†ì Ù%²K0d—`È.Á]‚!»Cv †ì Ù%²K0d—`È.¹GvÉ….²K0d—`È.Á]‚!»Cv †ì Ù%²K0d—`È.Á]‚!»äÙ%¸`È.ÁpÁpÁpÁpÁpÁpÁpÁpÁpÁpÁpÁp¹ïœÈ….²K0d—`È.Á]‚!»Cv †ì Ù%²K0d—`È.Á]‚!»äÙ%~œ`È.Á]‚!»Cv †ì Ù%²K0d—`È.Á]‚!»Cv †ì’{d—\øq‚!»Cv †ì Ù%²K0d—`È.Á]‚!»Cv †ì Ù%²Kî‘]ráÇ †ì Ù%²K0d—`È.Á]‚!»Cv †ì Ù%²K0d—`È.¹GvÉ…'²K0d—`È.Á]‚!»Cv †ì Ù%²K0d—`È.Á]‚!»äÙ%~œ`È®zv ªõÄÒVùïßÒ5¬¾ùÄúâ-' &Ø 6!/ì¥êcôôþ»g .0r}xÿÔàÖ_I äÙÜ<¹Üƒ9£\|¹Ím´¡üÞü?$l™FÞþî²§E…¼o¾ñ}v=e/¸ ŒºWWe`ù—ºà­:Ëöy´êF ¬A%䯺Ÿ­îªKæÀ Å«.:rRƒ«/GN¼U÷š“%7«ó2zÕ‘9±Bñª‹ÎŒ”àêË™‘ÏU7–]©æì?y«n,®¬ p½ê¸›/䯺—ìúÈ£J n^›Èóiôòå;ßüÍÚÌ[kSñÆŽ²€ªwšÊ ôNÝOÕù—‘§Ó8Í.‡&Ï–W X,¦§˜Îàæ)Ú“ÔiªOlUõNSlÕû9\’EøhyÖ½d).‡F¦¯Èõgg?2è 3¸yK~êÞiª:öÓÉõ¹VÇ¡þvõ&Ɔ¢›wõx\„<M+»Gr—¦PVÛy‹6¸yC~êz ¯FîÍù‰¸ò0âú$N¬r'â4ûREÜXO­ùrqœÈ¸Ü‚«§i"ŽÏ@¾q©ÍÜ&ë“d*óÕ7Ïà‰/7§«=qU‚«›ˆ+>Ý0ÏåèËï#nÔT3’9©Ñ©NÄ1¥l•q#2ôV©°¡e"¡¹a­¹tÃñïžÑª3—¶"®`Ç;§ÈO˱WÖ7oœê䓟¨âËM‚«×ˆ©YM¤VË[”)ò±ÉúÜðDÉ%?Í=œ|y·TËöòÈOuåNU—ü¤ÓöÞ7¾º…ü”=òÓ(åWlUõÎ/v…­Ò~i‘|vã—–óhŽ_:9¥\]ï´¬¹Sj§ÍÉÐ¥µ\ï´¤éÒqÄqq1ùÉDœlD\²[j«üÃ/5hlã—~ |ªç—„ÁC›1:#o‘Ýj*ÝUƒ¹×òé—Ž2}r‰9Û¬9~髵c™{­ž_J‡?÷:;ÁÍ›¹WÊÅ›{ýGUîUV;m9ëÉõNK‡8~)å±Ñ²/×;m=ü¹×9Ý|uv§UЬºµêZÄŽ#N‚ˆ»š{µÃ›õÁÜë<{¹0xª×KιºSxóôgòåÝ6 ºë—¶&ÁÕ_š²K~Énpuí—þôœ¹×tT9ëy(ÿ4Õ«X*¾ÜžS'¯—<¡˜)¸yËR}s×½äîÁÕí\ }ö’Ë) |ö÷N+ãâÕ›{Ïú#rKg oÎvptu=™2O³;½äñõèê ½˜7"®w5÷jÉOõé„BYå΄‚*…ì„÷êË— …¼7÷Z±¹×º=÷ú3¡`ðÃ͸º´7¡06ð”}¹uoZÝ›{­ØÜk}4÷JÇ\}™{uÝ›9)å/›uîUöæ^+6÷Zïç^ëÅÜk}:÷j)8:'Ÿø¢ê¿"ùï…°u\÷;'¶ŽKa׃Ή©ãRXÇõ° ŸÜ^åRÇõ Wiê8 ë¸îwNl—Ã:®SÇå¾óÕ• ŽS½ÊµŽë~¯ÒÔqŠü´ÖqÝíœØ:μÂÖqÝ:Θ¶Žë °YÇõ(âò±á\ͱÙG[ÇýÊ?;'æGeÔF^£ŒºFuœ•uœéœ+ùÉíœ.ùi­ã¬<¨ãtçÄÖqFÞƒ:NwNlgåA§;'¶ŽÓrÓ99|òÓRÇYyTÇQgä)ªãRTÇYyTÇ¥U—èq÷+6inÇ¥tNÖ:.%¿sbë8Šê8#ÏQ—£:ÎÊ£:.Guœ‘— ŽS“æKgåAg:'¦Ž3rê8Õ9Yê8+ê8Ý9±uœ‘KPÇýíœ|ÔqVÔqªs²ÔqF^ƒ:îÝ9Yë8+ê8Õ9Yê8#oë¸_ù³Is;. Ôq‰ :ÎÈŸ×qVþù ¨ã¬üqgäÏë8+ÿŠüÔqVþ¸Ž3òçuœ•E~ê¸_ù³Is;q\ͽJ]&ÍÝ^å¨_¼Ió± L]v#n.ùÊîÜké-’[ ŽŠR¤®£âÕ=ò+Ψø4ïk«<©›¯É;ò;_…Å¡\Ýüx^zì¥6rÕeÖ»úì%Öûu¬Ô+wÍë½N¯ù#­Cún·Pé_,ÚplãbXÛ“.ZY†µýE›ýaíŸeëË—ÇDrsÕòv·Ï÷±Q›StÅßçg•îM[Ïe«×| ÷ùî(úY¶)Û½®û‹¶ÿ³/ø"\z.Zñå9Ø*×EKÈÏØâö4³?òO6ëW'Y^x äÖh»š‰Íçqàîø¢æV_¤|ØÌÇÂ^jN51¾!r}Ø:òÂêËõÛDÇgw}X9Spól&Í“ëÃ~⋚[Mè“âú]gÂG$W¿;߇¯ld_®ª‰<>»Ïú°°›çà »n­º¬:5Íëø°íáxȾ…¦=xLм+^åN5!¡ÛÈ—[Ö}Ï,àkäöW5ðaƒ«/>¬óžI]`ó®3#WŸ½þ)º–Žå8Í{ÊÐá¾gá…[yÀ ·>lŠ®NÑûþî´ež\~wõ÷˜]vä,cÃð妚ȇ—YÍgpu;ÙØ]þÐȘ$¸z ¸ÑWƒˆ»xY?®a>lÃ|؆ù° óaæÃ6̇m˜Û0¶a>lÃ|؆ù° óaÛ}ýÞ.|Øöð <Ë«Ú#WÈd•¿rïMªþ<­}¾yžï5Ê*­hÉ*­<Ê*Ï(«4òe•)Ê*­<Ê*ÓΪ[Þ¤º“Uþʽ„ì;1žÔqKVù+ÿ¬ãLVIQViä9Ê*s”UZy”Uæ(«4ò½¤DY¥•Y¥q…LViäd•Ö" nž£·Ðp”U¹Do#‘(«´ò «Ôü!›Uy ²JUÇ-Y¥•Y¥©ãÎõm$ÍŸ§ÝÉ*åÞBÖx˜Už‹;ÐþEYeñå=z{ð%¨aü¡ö„?”ÊÈ HšŸUW·ü¡êsd?øC ãµGü¡rÁÕþP ²Êæ/›%«tßNàð‡Æj÷ü¡vá µ‡ï!‹±iÏìey/DóùC͸ƒÊbë4Ÿ†’8j°×@në¸ì5Øùè5¹ò%d¨†Ì쯟տy‚5¶Ž™J)’›B¬ù®K%_n @в4Ø‹/ÏÁ^·4Ø[ äv¯ÛIÌr´hãWjmï?\´´`üE[«D®PóåËc‚¢E+¼Ýíó=\•ü«[O®äõë(ëÁH#·oRU¶Žu…r»×5wÑ–|ö¢s†Vfpõl•ë¢-¯x$ó%säË5äP¸²…G²°Xúý+p«îË Æ¦;<KœP<’!®®y$£˜w’ùƒÔïßaûïÍK™ÓÁÍ¿WGk[ ÎHùmÓIËß<’9C¨V6•èàæu1¦îQÓéW~ÏÊy´6Ǧ¤áQ°6'ØõåšH÷Ñ)X›ó_[¬œþ„•C]'VnX9þÚü"÷åÙÞ¼¿6?X9}Ÿ•ó’Æ+fÈY›¯*3¤X9‰D‘7\³rRy“7¯Y9ý‚•s·6ÿÈ}¢Îk ¢Ó1ˆNÇ :ƒèt ¢Ó1ˆNÇ :ƒèt ¢Ó1ˆN߆èü“e,f äßAt:ÑéÖñ!¿gåtŒ•Ó1VNÇX9cåtŒ•Ó1VNÇX9cåtŒ•Ó·Y9ÿ”ÚŽ&Á7ÿ+§c¬œ~Áʹ ¬²X¼X—HœŽ!q:†Äé§cHœŽ!q:†Äé§cHœŽ!q:†Äé§ß#q‘Ãq‰Ó1$NÇ8Cât ‰Ó1$NÇ8Cât ‰Ó1$NÇ8Cât ‰Óï‘8ýb³cHœŽ!q:†Äé§cHœŽ!q:†Äé§cHœŽ!q:†Äé§cHœ~Ä飘Câtl³c£˜ÅìØ(fÇF1;6ŠÙ±QÌŽbvl³c£˜ÅìØ(f¿Å죘Cât ‰Ó1$NÇ8Cât ‰Ó1$NÇ8Cât ‰Ó qþá<ž3¾ü;$NÇ8ý‰ãÃn>ä÷䛎‘o:F¾éù¦c䛎‘o:F¾éù¦c䛎‘o:F¾éù¦cä›~O¾é3Î#ßtŒ|Ó1òMÇÈ7#ßtŒ|Ó1òMÇÈ7#ßtŒ|Ó1òMÇÈ7#ßô{òM¿˜qîù¦c䛎‘o:F¾éù¦c䛎‘o:F¾éù¦c䛎‘o:F¾éù(×R4(²O¾éù¦c䛎‘o:F¾éù¦c䛎‘o:F¾éù¦ß“oúÅŒsÇÈ7#ßtŒ|Ó1òMÇÈ7#ßtŒ|Ó1òMÇÈ7#ßô{òM¿˜qîùff²ùfÊòÍ[þùFÉ¿!ß¼å_‘o”üòÍ[þùFÉ¿!ß¼å_‘o”üòÍ[þùFÉ¿!ß¼å!ùæý“|Ú­ó¿䛈»"ߨ›ÿ†|ó–E¾QòoÈ7åß‘o”üòÍ[þùFÉ¿!ß¼å_‘o”üòÍ[þùFÉ¿!ß¼å!ù&ޏDÜ6ùæQÄ}Ú­AÄíÚ­~ÄmÛ­nÄíÛ­nÄíÛ­nÄíÛ­~ÄmÛ­nÄíÛ­nÄíÛ­^Ä=°[ƒˆÛµ[ƒˆÛµ[ýˆ3õ{q-ˆ¸mòÍ}Ä]’oþÞüwä›·ü+ò’C¾yË¿"ß(ù7ä›·ü+ò’C¾yoV_‘o”üòÍ[þùFÉ¿!ߨRèqVù+È7ê¸Oò_Çm“oü:n›|Ôq»ä› ŽÛ%߸uÜ>ùÆ­ãöÉ7n·O¾ ê¸]òWÇ= ߸uÜ>ùƯã¶É7~·—UþÊòÍÓ¬r!ßYå.ù&Ì*÷È7QV¹I¾ ³Ê=ò›Uî“o‚¬r—|d•»ä› «Ü%ßøYå6ù&Ê*7É7QV¹I¾ ³Ê¶qEÜ.ùæQÄ}’o܈Û'߸·O¾ ë¸=òM2›ä7döÉ7Q!¶I¾q×ü>ùÆ_óÛäwÍ[òM¼hs´hwÉ7OíB¾ í.ù&|Lì‘oÂE»G¾qí>ùÆßç·É7A¿n—|ã/ÚmòM¸h÷È7ᢕE[¢E»K¾áô„.2ª³­r‡|S»K¡ fñå†|“³{ üeO5k¹=®fJù&Í®S ×%07—.RŽ]Ýoô™jÝ)ÏŸàêÖ“*·X>°=Jþ÷æ«ÆÅ_ºÈxÒÛóäZþ¦‹äQÊtïHöÌ뢯N#rtõÕqŠšN¿ò[òͳµù3SºÊ?׿¤¼xkóg×—òªö.É7þÚŒÈ7s?’7s yksìœ|@tüÎÉ6D'èœìBtüÎÉ6DÇïœlCtüÎÉ6DÇïœlCtüÎÉ6DÇïœlCtÜÎÉ>DÇïœlCtüÎÉ6DÇïœìÕq¿r¢ó¤sâ@tÜÎÉ>D'êœlBtÜÎÉ>D'êœlBtÜÎÉ>DÇïœlCt‚ÎÉ.D'êœlBt¼ÎɈŽß9ن踓}ˆŽß9Ù«ã~åD©ãAuœ‘ÑAê8-ÿ¢ƒÔqFþD©ãŒü+ˆRÇùW¤Ž3òçu\ŠfN¶!:"î¢ã÷*·!:^Ä=€èx÷¢ã…̈Ž2 :^È<€è¸k~¢ã¯ùmˆŽß-4xцc»§‹vè‹v¢>&ö :ácb¢ãîóûhŸß„èò]ˆN°hw!:á¢Ýƒè„‹¶m,Úxòa¢CD‡0ˆa :„AtƒèÑ! ¢CD‡0ˆa :tÑ¡ –0ˆa :„AtƒèÑ! ¢CD‡0ˆa :„AtƒèÐ=D‡.|X :„ù°„ù°„ù°„ù°„ù°„ù°„ù°„ù°„ù°„ù°„ù°„ù°t_¿Ó…KD‡0ˆa :„AtƒèÑ! ¢CD‡0ˆa :„Atè¢C®a :„AtƒèÑ! ¢CD‡0ˆa :„AtƒèÑ¡{ˆ]¸B„AtƒèÑ! ¢CD‡0ˆa :„AtƒèÑ! ¢CD‡î!:tá Ñ! ¢CD‡0ˆa :„AtƒèÑ! ¢C÷ºp…ƒèÑ! ¢CD‡0ˆa :„AtƒèÑ¡{ˆ]¸B„Atòmýž²JJÏ.«ü÷o=}yºÔ…ñ”9‹/π笲ÊÔɗ碙O—{0Òù$“oOaóïÕÿ¡Tìñy-çòw«¨ó¸³3Í+£ä*Ÿïsš+²ó’a}<úáÆw×i•üp³†mÁúÙ|9ɉúáΉ÷ÃYΉNNHgVFn›Ì ôïÕÿ¡³˜xò~¸Ÿ©[5 ¬6ž¡\büg‚Ý ÅQ ~Èo~Þ¼óójù1êéUî!Îà|ÃÑE|ùÒÍuÏ7í§yóû©zq•£¤àêfWÈêê¤?;ÕHNÁ°¶Î»žÉ—g;èžo(åˆn^çÝ:ë×K»-ººÙ“ªºzÑšÔ‚«ëÇXÙÞù»Í\5›‹w¾A¤Ñ7¯:ÜL\ö¿ýÐüAÁqk¢ÏôÕsÔÉþ#F†H,ñ0âXÊ*÷".{,–9N«÷ãE\R²wÄÍW8çH®»¹]šqœ¹u,ÕÓ@E\2ÙŸ•›Ï^=‹’ñ#NƒdÞ'ã«‹¾yqcqe÷aò Ññ#NCtÔlÙ$¢D§1‚ïˆË³Ã\ÝD\Öį?»ÔñŒ:#ùßÏ^òAÝ{”õ>/¾Ü°ð4Ä0ޏ‚EïDœ$Û¯[åΉ¢—:„§:š4r×@^M7·¸,–Qr äædI÷Y,´ÂT²ÏbqOý,[ äö³»ÞÌ9ëb±èìO‹“ Ü|7Ï÷æ³Xfó•/,–÷>¯½£×Xõ‘œÌ@s¼£RGFÈÕN[’¾ºš ©ýhÈÕNËêü¢öŽŠÍ»µœÌ7î<ã8ˆ¸+K2MùÉ à\uu•;,–—2t¡œú2J–]ïè¥L?{rt©dÏ;Ò!“,²W/K¯¼£—äãä@ng\ï(‘|~óŸÞÑ|Ly3€£æ(Áͳ‰85ÿÈÆ±”àêbý“î̦™×ŸÝÌäzG9÷#—~ì¨î `æ£òfžäyG?i¥/·3€'oDœwÅb±HülÐÔ2Uß¼ÉçÕšïócJ…}¹éd7ö:Ù£Š“Éuk*§MKÞg±P¯c£-\ŸáãìMš‡„œÙ—ºáŸ¼öGvйrãX–ôÚb±ämËX³ý4ɉ‘›ˆëŸ-Éñœ%¬ÿé–äÜ,ªÃb9i§PÞtF¼ËbÉ÷,–|1˜Ÿ²X’hzq ÷ùEœ: p=˜ÍæÜr ·Íà껵ÑÕW·Ö±žFQ?ÈÍ óÞ `~08òªñcrãÖö캵5¼ºTWW¹MF ädVMß›ÌOf'OT¹u0Š;u;v±àê%ðÍ."®EuÜ‹%°Ä³Î‰­ãzÐ91uÜÖq=蜘:.…u\z•¯ W¹Ôq=l„“ß«|­@·sbê8 ë¸tNL—Ã:®½Êô*—:®‡møâö*—:®]Ç©ÎÉZÇu¿sbê8Õ«\ë¸î÷*M§M€¥Žë °YÇõ(â.X,ÉŒ>ìœè:îWîvN²×9±uœ‘× Ž3[SÇYyPÇ-Û\½;­îœØ:Îʃ:NwNlgä=¨ãtçÄÖqVÔqºsbë8-_)¶Ýéœ,uœ•GuÜÕqFž¢:.Euœ•Gu\Šê8#§Çuܯü‹Å"=ò³©[]Ç¥tNLGQgä9ªãrTÇYyTÇ]²Xò>‹e­ã¬<¨ãTçd©ãŒœƒ:NuN–:Îʃ:îšÅ’·Y,uœ•uÜßÎÉGgä5¨ãÞ“µŽ³ò Ž»f±ä{K¾˜ºÍOY,ÉŒu\"¨Ž3òçuœ•?®ã´ü‹:ÎÊ×qFþ¼Ž³òÇuœ‘?¯ã¬üqgäÏë8+\Çùó:îWþŒÅb'Oó£F6SxÙ¸9:Úü©ÛÞ“/·S·.7ú)b•@nX,ê ûޏ ŒX&Oˆ›rõ»¿çOk¤Z¹‰8¯W9žQÅ<ß³qæù®"®Îœ¹Ú¥æF\ë%ûòåôduÇ'©•È Æ…jÌ%}u&·Qƒ*âÆVÕÏHn~÷îž¼X6*âì²¹ˆ¸pæä$cq&#N¿0•(âÔ Ôq­ùòe΂ˆ“Hn¾yõJ%âÈ•¯×¼ˆ›”ºHn84Å;Y2B.7ÿ«[N–¤âGœôHn2ê³·ÌzWÅ8ýîI+726⢯ÎF\i~ĵÉ›Y5-ˆ¸`Ù,—i#â♓²3s"?ŸOð¶8àÅuÀS䀯/µ(®N.Ç‚±)ž®_¸8à5¸ú26ë:à,†Éa䤿 ÿôdš‡v}¹ajŠï€>(¸y]lj6øøE‚«‹¥Zº8ÓAÁgWuÍ”ÚuÀÏrrÝ1ŸÑwÀç©Ý@®÷8àçQ‚«7Ó«dUÇ• ¼<¤àœÖ -OðÓ…V}óæ¼rq³ÊŸsR¾¼Û„.,Æ^¹Éç?ø’‚Sö)8Ôó|éa '=À螪©c¯YLäâ<ãèȽø8§àêÆo^[œ²OÁ¹b¬ #'ÖÍ9I–ÎîËkdŠóŒ;RvðÙ:É%’ëyÚÄ›œrOÁ)xyHÁY06sÀ æ€Ì/˜^0¼`xÁð‚9àsÀ æ€Ì/˜^î;'åÂ/)8§µuÊ3?®-~\qý¸ùq+b¿o•ôý8“UZyU.~\ ®Þ‚¬Rûq6«´ò «4~œÉ*¼Y¥öãlViåAViü8“Uj¹ñãLVyFY¥•GYåe•Fž¢¬2EY¥•GYeвJ#§ÇYå¯ü紾̓:nÉ*åGe•e•Fž£¬2GY¥•GYå%§ìSpÖ¬Òʃ¬Rûq6«4r²JëÇé¬Òʃ¬òš‚Sö)8kViåAVù®ãÖ¬ÒÈkUª:nÉ*­<È*¯)8åž‚S.ü¸ò‚³¼ÜàIV9·‘–VùgV©ø_SpÊ# N΋/d•¹DY¥õ5«tÜ‘Vò¡‰Ýäg•sWI¯- Ny@Á™g2Spó&«ìŠØm²Êðê–‚£®n²J9(“˜i¯- NyBÁî\}Ùi[UFW_vZÚˆ8Š"Ž·žqùYÄõƒ }È= Ž™îùòÅh;À‘ܸ¥îÀ‚r)¾;¾ˆ1|cø"ÆðEŒá‹Ã1†/b _ľˆ1|cø"ÆðEŒá‹ø_ÄÛŒá‹Ã1†/b _ľˆ1|cø"ÆðEŒá‹Ã1†/b _ľˆïñE|1¼É¾ˆ±áMƆ7Þdlx“±áMƆ7Þdlx“±áMƆ7Þdlx“ï‡7ùbx“1|cø"ÆðEŒá‹Ã1†/b _ľˆ1|cø"ÆðEŒá‹Ãñ=¾(Œ¸EÜ6¾ˆ1|cø"ÆðEŒá‹Ã1†/b _ľˆ1|cø"ÆðEŒá‹ø_ÄãÒŒá‹Ã1†/b _ľˆ1|cø"ÆðEŒá‹Ã1†/b _ľˆïñE|1.;ˆ1|cø"ÆðEŒá‹Ã1†/b _ľˆ1|cø"ÆðEŒá‹€:.…3'Ûø"ÆðEŒá‹Ã1†/b _ľˆ1|cø"ÆðEŒá‹Ã1†/â{|_ŒK3†/b _ľˆ1|cø"ÆðEŒá‹Ã1†/b _ľˆ1|cø"¾ÇñŸ4cø"ÁðE‚á‹Ã †/ _$¾H0|‘`ø"ÁðE‚á‹Ã †/’{|‘\8à‚á‹Ã †/ _$¾H0|‘`ø"ÁðE‚á‹Ã †/ _$¾HîñErဠ†/ÌÌÌÌÌÌÌÌÌÌÌÌ—ûΉ\8à‚á‹Ã †/ _$¾H0|‘`ø"ÁðE‚á‹Ã †/ _$¾HîñEráÇ †/ _$¾H0|‘`ø"ÁðE‚á‹Ã †/ _$¾H0|‘`ø"¹ÇÉ…'¾H0|‘`ø"ÁðE‚á‹Ã †/ _$¾H0|‘`ø"ÁðE‚á‹ä_$~œ`ø"ÁðE‚á‹Ã †/ _$¾H0|‘`ø"ÁðE‚á‹Ã †/’{|‘\øq‚á‹Ã †/ _$¾H0|‘`ø"ÁðE‚á‹Ã †/ _$¾HîñEráÇ †/ªOø6#·(m•;ø¢Æîôþ<'K¾Ü’FŠ‹/¢‘Ö‰/7ø¢zºóóã±ÿùÙò€t_4žq'WómÖ™`§2b¦WWR9•ò€‡/ª[ø¢G?ïDÑ*÷ðEìb-FRY›/·‡3 9?ïÏ\Nñå_”\°Äëƒ?TýãÍ{3–ÈHB‚«+|Q-º¯¦ðE£N—àê_4ªƒ²ñóþ‘#ø¢Šá‹*†/ª¾¨bø¢Šá‹*†/ª¾¨bø¢Šá‹*†/ªûø¢r>͈‘…/ªø"“ò!¿§UŒRT1JQÅ(E£UŒRT1JQÅ(E£UŒRT1JQݦý“i. ä_QŠê¥è.°ÊV`ñN`]ˆ*#ªŒ¨b0¢ŠÁˆ*#ªŒ¨b0¢ŠÁˆ*#ªŒ¨b0¢z# sDrÄ}QÅ`DƒU FT1QÅ`DƒU FT1QÅ`DƒU FT1Q½‡Õ‹QÌŠÁˆ*#ªŒ¨b0¢ŠÁˆ*#ªŒ¨b0¢ŠÁˆ*#ªŒ¨b0¢ŠÁˆê=Œ¨^ŒbV FT±QÌŠbVl³b£˜ŬØ(fÅF1+6ŠY±QÌŠbVl³b£˜õ~³^ŒbV FT1QÅ`DƒU FT1QÅ`DƒU FT1QÅ`DuFôO£óP#:VþŒ¨^Àˆ|ÌЇüž9T1æPŘCcUŒ9T1æPŘCcUŒ9T1æPŘCcUŒ9Tï™CõbƹbÌ¡Š1‡*ƪs¨bÌ¡Š1‡*ƪs¨bÌ¡Š1‡*ƪs¨bÌ¡zϪ3ÎcUŒ9T1æPŘCcUŒ9T1æPŘCcUŒ9T1æPŘCcåZ E¶™CcUŒ9T1æPŘCcUŒ9T1æPŘCcUŒ9T1æPŘCõž9T/fœ+ƪs¨bÌ¡Š1‡*ƪs¨bÌ¡Š1‡*ƪs¨bÌ¡Š1‡*ƪ÷Ì¡z1ã\1æPØC c5Œ9Ô0æPØC c5Œ9Ô0æPØC c5Œ9Ô0æP»gµ £»aÌ¡†1‡Æjs¨aÌ¡†1‡Æjs¨aÌ¡†1‡Æjs¨aÌ¡vÏjFwØC 3ºft7Ìèn˜ÑÝ0£»aFwÃŒî†Ý 3ºft7Ìèn˜ÑÝî;'íÂèns¨aÌ¡†1‡Æjs¨aÌ¡†1‡Æjs¨aÌ¡†1‡Æjs¨Ý3‡Ú…×0æPØC c5Œ9Ô0æPØC c5Œ9Ô0æPØC c5Œ9Ô0æP»gµ ?®aÌ¡†1‡Æjs¨aÌ¡†1‡Æjs¨aÌ¡†1‡Æjs¨aÌ¡vÏj~\ØC c5Œ9Ô0æPØC c5Œ9Ô0æPØC c5Œ9Ô0æPØCíž9Ô.ü¸†1‡Æjs¨aÌ¡†1‡Æjs¨aÌ¡†1‡Æjs¨aÌ¡†1‡Ú=s¨]øq cõ'Pš—=ŽþGî0‡4CÁô¨9‹/'3[¨>{ÖW×O#ÏæêŠbu^wVòåÅTR¤öº¿W'>ä ®® 4y¤žô1¨þOª4¾üo%5r–£ÿ 4¡®¿L_a•;Ç#ÆÇwO¼²rÓ`ÿ]uëþ?‰K 7Ç^ûÜ;F­{Ô¿ò›o(ï|C§®9µUþq|Å<‡õñ•£<ˆ‘›äôø4Öf ®Nfm² è˜3¡âËÍ––ÔÙ•¶Ýð=Œ\ß|siOã·={puµ:Ša)tÍ(ÃR WŽcÄÊÇ2WÖ=3eìu^kw¤ec#ñåæëÑúg£)Mddï\[xõôè/“ý]ÝÒ_ÔÕÕN;òª£rk¦dg(Næw|óY'ÎÅ¡¿¤"³EÉÛ[MäÑ_ÆSxõ¢SWuõ‹ˆ«AÄ] ÅÙé¦þl(Ž—Ñ¬ Åeß¾ì}ùb_²k_·àêËPœ;†:¹gW¾Ú—ÕŠõV=#¹ŠL2­ÝÆþg_Ì”n:)¸º=jQ«qeü‡îu¶µKj P¡VKƒhAÄíÂ;jñƒJè¾|!Û%Ͼäéérc_’×ÚsŠM|ùb_îd•-ˆ¸«¡8KéÏè/¦Žëªš8£:î ë¸î·(l)”Â:®û- [Ç¥°ŽëA{ÓÔq”vnž¢:ŽÂ:®û[Çå°Žë~‡ÃÖq9¬ãzЛÕuœ¡¿Ø:Îȃ:N5HÖ:®û SÇ©ãEk×݉­ãÞ!óO¡¾Âc¼Æò¿uÜýå¾A2Gç5Hl¹ö+ÿlèrM7Hl¹fä5(×Tƒd©·¬<(×TƒäJÞ‚rM5H–rÍʃrM5H–rÍÈ{P®½$k½eåA¹ön\ÉuƒÄ–kgT®YyT®Q¹fä)*×RT®YyT®¥¾#§ÇåÚ¯üÙ´©% Ê5+ʵwƒd-׌¼=.×~åϦMí¸(P®%‚Ê5#^®YùãrMË¿(׬üq¹fäÏË5+\®ùórÍÊ—kFþ¼\³òÇåš‘?/×~åϦM-¥?š}+5ñ*wé/î©Á#¯óžý!‹bÁxtŒþÒ·é/m” µrR¿îY½Sƒ¹ë¼gÆ¢Xé/£¿ô}úËåÍóÇ «ª«ó:ïÙŸ±(VúKÇè/ýžþÒ/¦MûÓiSKydŒZåÞ3.·(âŠ/_"N^[ô—ŽÑ_ú>ýeÄÜxJõ@N¦šNAÄÿæ—ˆSÂ%ý¥cô—¾O¹¼yqo‰×yÏ â¤¼¶è/£¿ô{úK¿˜6íO§MÑ=³ø'F7‹¬rÇè¦Ýù 䦎+Ý5ºË¡AYVÞTAÙ5º/äfÚTËU7«Ú9éoˆ\£{Ò–9ëÞ%Çè~õzPôÍ«¹¥ÉuŒîK¹zœ•¿ë8šG9k‚©&"ˆî°ˆ–«:®R\£[ƆQ¹êõ#¹F÷…\ÕqF®z•ŸF÷üo¾Ñ­Í¹À²~¶}£‡ºGÛóu*ÍãóÙ—Û¹%ª^¹6ŸÈuÚN%€¼´àê ä…ªëg“:¹9¨&ÚÏ&óZV-ײùöUÇÏ>G½Ó[ ×-Ér’ïgStuû~Muuãgç£rKzwAfršW/i¹¥Üwò’J™'°ySêâB^’̜ؗ»óF`Õ °¦Ÿ­=¸Gõi[ûµm[ûµm[»µo[»µo[»µo[ûµm[»µo[»µo[ûµm[ûµm[»µo[¥û q`µ °fc\;÷eM4 þÊM¥‚ÖDÓ© ‘× Ô&šÍå¬,œ/°pV¼ÀZ8+q`å(°’íÖ?,ë“DŒòb5D•#KÙú$Q`mâTÂÀ×àâƒZ ']Ãùµ8TA`‡ê§Ö.N% ,ý|qóöeiÀˆ‡*,ãP]àT‚ÀÚÅ©D%Í‹_¹opivÇL¤·›ÿÈHÖÛ*ÿl^0©lê#ÒùŒä戴z‘ŸáÍŽLŸy3÷Þ^ovÎCúrCAL‡wD:ŸÝ¼—ÕÈUOúí“jS¡rXàÌ[ÞM¥Z'ݾT6¸º}ÿcqH¿êBËù+_Þÿø~fè#Ò“ÝÉÉÞãË;"-f°_Ëm¬h«#³Õ\ݾPWUöÉr†ƒ«{/Ôu^ü‘ òåYÈŒLC¿Á‚)ý`7dH¿qÕÈëéO‚ê~ª9¸º‡f5‹©BfüìÈMyÚˆ÷Þ¼~g}óÑÜm1Q2¤e:d&‹/¸yãÎuuó*dе0(™9ï…Ìœ{oœL3™Ü)‡"Ây Þ„lBæ•¢«›yùˆæy<)Ó'<óó)3TþßVÞ ¬¿ò\ç0M[åë1¯¾_‹9zËMC•4æèMä¯a–@®é]<Mš/¡*¾ÜðÃXqp…:ÏhråP‡:Ì¢)ÔõèÁÍçÓošc^ç¡í5#·/ùöèe³QKÕ—Ûw\tï%ß#·èÑgÞ «RLuÌk¦%X6ö­°ì½Ej²Ÿ¢oÞ¾6‰3†4O+Ôà›·j•D¨‡ÉâPý‘û´œGYyq¯2=µUþq°’ªj郕ý4/b*~ÄUW]öSNæíìŸyŽÈã’ý¼@|¹ÝÒÔª¿7ø£qpóïˆKó¥^ÄÍs{9¸yûVñVNàŸ¤@Þ̦ݽˆ›P¨ìËM3ŒÞ†¶Ž¸ó ¾º¢ß˜GîÁÊ™FËÆ J¤º7G1{ 7ÎJN^ÄÍm¤úrq ™q‹8~’<þÃs§ì²Ê×äq”E=&ÞÉcK„c?yƒ ÓHª±ÙQ 7Gn½Õæ£×—›äQAmßÉ#Í)Œ|öwò8Eܼz+OFf ·f±ÚiUò8ò²”¹©9„üä‘jså6yÌêU jÙLs$7­÷ì'lg“GutN'ÉÌäqœ<&7y_J÷åôù>6õ!¿ ,Ù¬·Y,“gWe•¯fñ¨?ÔêPf1÷Qj_žuѲ÷:Æ‘ƒè£•›$Bý¼YÏ€i¹ÙÎÓ齯ã¬ÔÈIí EË»úRj nÞnçêÀI  àÓÈ›™Žòrÿ u}¹ÝÎÕ7¯ÈSs<#øìú5ëo^Ç8Ùö¾ÜaWN·n`5ZuÕŽ7Ç,þyÅEðÙ[ôªªøQ&Á£,&O™ˆ«;÷ïv^e|sÕ›ÔÍ“á ìóu\>›/ïÖ(÷zòm6–k ×G™3{…3µ ®n]duõ{ò#p燪Èéï®—HÈ3»~¶óäË"‰GžW_ðIJÞôšS‡Ì’}Jpu²«î“<5j>ÿÝ@NïŸmÞ£ç"Ïi/ÏÑ‹0uOžø ®nzò¥»¯c£"9©ÞÜ<òÔ¨a ¼G Q•®Ê¨Ïñ” ®žm¯¿ø æàê&£ÎêêE¿ªêˆ®^L¹F>yJŒ»ÖƒÉK¹kºA2ñ)›RÕ=ý¿–k=hèׯ^D\".G¸qs4øAƒd¾x¶Ø×pz [Ç©ÉXqFnI²Å™¦O³™«_ xú ’±ä›× IËœÉé7HFV™Cz­ã¬<¨ãô4ýò&Ë3p×ô›,Uƒ¤,ïž9ýÉHj»ûÔ£Hðͧ3xσFRÙ:ÎÊ£:îŒ*h#OQ­_C ½•@nÀ É5¤S—Fþÿ“v®i’â:ÝJm`ø°eù±ÿ]¨Î[)9`2~ÎtGC‚’B>äÏÁ½»9ù}¥A’Ò“ÉG¹–RÔ ™ËµŒÊ5'T® *×¼•k‚Ê5'/ \ûƒä³\órP®¥‚Ê5'WP®™iú©\órP®%Eåš“WP®ý5H>Ê5/åšmørÍÉúÂlCåš—ƒrÍ6H|¹æäýq¹ö’?!O¹ˆËT¹–2U®9ùórÍË—kVþE¹æåË5'^®yùãrÍÉŸ—k^þ¸\sòçåš—?.לüy¹ö’?!O¹ˆ“'-Éq”Íš²I¢ˆûýbWøÕÅ1e·$ÏÁwNeëÙͺJqç ¹†œîÇ„ÍÑÿ".Ÿ $ äïˆÛO„cÔ’Üò)–ûï8E-Éó1äö‘ hIo"ðèÙ3€þQeg·gKâ–äq#îˆ÷Ë}ę֦%¹ÏÀ2Ð’´'ì˜0>ºÞüì'H yÊE\yqÇk"ù•Fwn34ˆ‹8û)'wgz >âJ-@n#N¥Æ‡Žî#Îý=˜†œ¤äÙ§0 â:'À¹›"N3ƒÝ>SÄ¡£g´Û'Æ_O;¸tîg·ÑMäSÄqÈ;ØQ1E8úq 3[ O”• ’úÛ×X5ºUÛ92Ëg£»‹Ýaî³eUb¹¹òíŒÈèÎ~ôÇÉmK²7`t§É­Í¡Ñ]j`t§®~ÅɳW«¡Ñ}üA'¯vPÝ©+ïŒnó­BotïèÊ{‚°†F÷¾~»#OÕÝG9¢à·{ÌDFwE«ÎÝiGFw¿ÝÝÙ´$ó…Ñ~bix¶P^ß|Ö4ùa»fOþ½êÎÀŠvuž“½©Ær×–Ñ;ϓÿ¬ãrÛkht'tt_Çàwþä9y6³Q îÉnͱѢ]Ç…Ÿ¹J9ÞÕ9ÑŽž‘Õü6@Îß>ÀÑí;î(”‘Ñ]ã7ÝRÃ:N²ÿ.˜‘»:n `t££û:NV"®ˆ»øÄÒðØŸÌÝ™3º3gtgÎèΜÑ9£;sFwæŒîÌÝ™3º3gtgÎèÎ÷“|at營XÞÁÈë›Úæ¬ò%÷çøß8?¹Î%ëñh@%G¶Û¹}dr®ò§í–Îï½Ä¶[¶I©“Û.q2IéÛv›³J/Y¥±ÝR?™ß±|ج²‡ŸÊ=jcíÈ»uŠ°Ý¸òÞv³I鎲J/GYåŽòy'O(Ÿw¶[®ÈmÄ ¶[‹ÖÛnÿ’ÒÛ-ßVzT®ÍÉãK>—kSò˜Qòèä‚’GAÉ£—£äQPòèä$åÚGòèå yœl·Éüɱí–ˆÕœy,q¹¶O\1P®™ê¾[’Gö˜&Ç2Ç0ü!Qòø‹d‹å·SòØÁóÉcØ’üMÁ¥+ !zqEþà‹ÿèɃˆ2¶‘ë‡|Ž8Ýj ™ÝcS7ò% âvm54’Ë$Œ¸m϶!êLtto˜£;à¨[ 5A&@Žå 8L&@î@îá-#}2zh´± ·åšŽ„Lpå'  U ú™Mpô>ôsq‚"ðexãIÄõãÇOæOq'O¡£; »ˆ³}tqû˜ˆTaÄÉހюî#ÎÝG\š°JaÄe©D\ò {SÄíÈÑg†|Ä¡£gð™!qnF  ˆk½£ˆò)â:ˆ¸Ú|ègŽ8pô>ôsqEþàËðÌ!yBù­Û‡< þô-jüþ;êaÚ:PÖOÎw?”ý²>8[@YÁÆíŸÜ´É .àò $ç4 ‘£ɯoWÜþö¼… ¬OΖD·-g˲’Cd8¹¹ïckñÆí±U OîèoÜ>ÛÜ@î7nÇ ¬ΖÄ·m'¨%ù’ßã´žV9îO×YþXåHcœÖÉÙŠå.°ÔиÌuò–’[êO qZ+ ,Oã2ÕêQ1¹ ¬}k>ÿg+–kA`ìtå‡õòk qZŸ4®0°,Ë–zú^U7Õ´ur¶byò0â§%]“Q`!Ý+,C㺬òºõ³ÄÙ޳%gK8Ζpœ-á8[Âq¶„ãl ÇÙ޳%gK8Ζpœ-¹çlÁˆqëœ-á8[Âq¶„ãl ÇÙ޳%gK8Ζpœ-á8[Âq¶„ãl ÇÙ’{ÎŒ¸ÂEœ>Ê*K?J޽Ìr†³%gK8Ζpœ-á8[Âq¶„ãl ÇÙ޳%gK8Ζ\p¶î"NAÄ4®µ¹dá\¸„p àÀ%€K8—p.á\¸„p à’{—\Ì% àÀ%€K8—p.á\¸„p àÀ%€K8—p.¹pÉÅ\²p.áæ’…›Kn.Y¸¹dáæ’…›Kn.Y¸¹dáæ’…›Kn.Y¸¹d¹ŸK–‹¹dá\¸„p àÀ%€K8—p.á\¸„p àÀ%÷.qEÜ2€ëAçd®ã^rÀ%€K8—p.á\¸„p àÀ%€K8—\¸n"î%÷ ü,‘¹„#s GæŽÌ%™K82—pd.áÈ\‘¹„#s GæŽÌ%™KîÉ\r±E@82—pd.áÈ\‘¹„#s GæŽÌ%™K82—pd.áÈ\‘¹„#su\B3'ëd.áÈ\‘¹„#s GæŽÌ%™K82—pd.áÈ\‘¹„#s Gæ’{2—\lŽÌ%™K82—pd.áÈ\‘¹„#s GæŽÌ%™K82—pd.áÈ\rOæ’‹-‘¹ Gæ*™«pd®Â‘¹ Gæ*™«pd®Â‘¹ Gæ*™«pd®Â‘¹Ê=™«\8à…#sŽÌU82WáÈ\…#sŽÌU82WáÈ\…#sŽÌU82WáÈ\…#s•{2W¹pÀ Gæ*œ^8¼pxáðÂ9à…sÀ ç€Î/œ^8¼pxáðrß9)xáÈ\…#s•O?Îg•×d®Â‘¹ Gæ*™«pd®Â‘¹ Gæ*™«pd®Â‘¹ Gæ*d®›ˆ{ÉŸøq3²«pÈ®Â!» ‡ì*²«pÈ®Â!» ‡ì*²«pÈ®Â!» ‡ì*²«Ü#»Ê…W8dWá]…CvÙU8dWá]…CvÙU8dWá]…CvÙU8dW¹Gv• ?®pÈ®Â!» ‡ì*²«pÈ®Â!» ‡ì*²«pÈ®Â!» ‡ì*²«pÈ®rì*~\á]…CvÙU8dWá]…CvÙU8dWá]…CvÙU8dWá]åÙU.ü¸Â!»ô ²ëGdÂi„ì:ÙB?Yè§V wd¡ãÿDÈ®<Ã4Dv‰%~Yd×L½ÒÙe©W=Ù£pòÝþv©ÛODÒ¼õXîÈBÍðmÌðœf`˜F{À³†Yd×Ɉ å²k„{Àñs{Àís{À?`iîO€,¤30Lc²yÒÚŒZ6G÷{ÀMÃí·çö*_ò{d×£À’^ 8ý%Xxya`Õ1a«âÀj[e+—mbn…•·Ùu.®äÝ-®"»NlUrƒréÛ»Ú³UêVs,÷,¼²ðÎ/0€“ "»Ž?F(Ÿ+¥(°ô¸íȲ+‡È®#¯Ú{,÷,¼Xx²£Op…ò³ðÐÉûÀ²[``ý“3È.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìÒ{dŒ8·ŽìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.½GvÁˆ+\Ä飬2Bv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²Kï‘]0âDÜ:²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»ôÙ¥ËÊ!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²Kï‘]z1°¬²K¹eå–•XVn`Y¹eå–•XVn`Y¹eå–•XVn`Yï–õb`Y9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cvé=² FÜ@·ŒìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.½GvéÅå]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥÷È.½Ø" ²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»ˆ:.¡™“ud—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cvé=²K/¶(‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.½GvéÅå]•CvUÙU9dWå]•CvUÙU9dWå]•CvUÙU9dWå]õÙU/ðÊ!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»ê=²«^8à•CvUίœ^9¼rxåðÊ9à•sÀ+ç€Wίœ^9¼rx½ïœÔ ¼rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®zìª~\å]•CvUÙU9dWå]•CvUÙU9dWå]•CvUÙU9dWå]õÙU/ü¸Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»ê=²«^øq•CvUÙU9dWå]•CvUÙU9dWå]•CvUÙU9dWå]•CvÕ{dW½ðã*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª÷È®záÇUÙÕî;'ï÷ûuŸ°UíïoÙ)n-†¹¥f¾zŸ°UòVݹ矹5“ŸZÈÜ2ä§½[hCEGïæä‹XhÖûä󑨗X>ª!—°wq¢j(ŸØ>v–Øîà·ÿÿ}Å4Ô6¯8z²W~ëÎ~û´ZP-3!¡ž¬ºÿ´”‰,®º“ ­ºO U¸êÖTíHõnyíupòfÕ Ÿ­ºO¢T¸êÖ‰Ríž(õ^uµ:LJ«®m¶g¥~CE,w«n Õ.P쩦ùÍÚ”•µi84çþ†:Ë?84ÅzÅïÝT2º§bXùû=,ÅQ1Þïamg›È»©wL½evS»+8yG~2M†ütRÔFòlï¢Á½ßùx¤‡•›÷pvHSkŠnÉ»]æEjÉO'Ý0–@;³»©NN¸òv7Õf &³›Ju®¼éêOƒì2Óý´…€ÜöÚî¦Êç^¡XîÉOfÕ™çñ'ù©=ãиˆ+Ï".÷]ê,ÿˆ¸ãÕ âŽUsÈs,7™o>^xkí|É4pôÔÁ.:óH;þ]ò ²q­ÿ¿¹}Ú´(âÒ8#ýqG`”±ÖÎý ÝÍCµµvþ»;»y¨6¢ˆKê¬'/w»©BÖZ9.éÍŠ"îÌsÂý‹GÀfptqÒzq­:?eVޏÂEœ.å_žaý} Íòý‹e‰ÈOrŽáõXnºøGi`Ëwÿ|Ãîà見_6Skšô-˦šcy·÷ÝŒŽžè¼ÝÙÉíþE»ùÒø¥Í“v­ÜôÎ3òK§EOàèÃFœ±žLö—’8Ùß 1 üÒùéä9~E:òSvˆd+O‘ìÈOGîŽîA½ƒz=–Raò˜VÞq "“Ÿ\ÄÕ…ˆ{û¥ÇÃjl{™å³_zÞŸ÷šO>³*@n»øm ç^§M·^îf?M_M,ÕrGµxîUòçÜë¿-ŒHnéÅö¾¿´‹È­_j“R;÷Z7;míåŽðgvͪ§ÖXîŸó¦Ê7äæì•NžÝâÊ¡_z<쀼y8u8÷ú‰­j1ùÉÚ­Ö;šÁQ ̽–…ˆ« â.æ^§áͶ>÷Z÷#»ø”ϽäŸs~D~:îá¦%–·êJàÞœŠ, È]vQGä—ÖãšÄGÏî9o€ ï¹×³e”²y¶I-œ{ÍcS ÷s¯%òKËù@rëÖ˜ütÎz¹÷KK0…—Ï:ºí%ŸC–¡_úA½j‘_ê¨WÖ/=w¨¹ýíIBòÓ'õª~©Û-}q DÜÅÜë4ø âαu\#îX5ØMõ;¡¶k,·îÍñ:Yœ{mÜÜk[ž{ýÿŒçÎÖç„B9þí“{Óç^7÷ÚÖç^ÿM( Ï.bj<¡ \ùiBAÖæ^7÷Úîç^ÛÅÜk{8÷j#n<ꜤóÓ¶açäÈ!, ÆtNJÞ&pTØ913»¨/GÜ9ùM£^åT Ô«´¥Ð{Õu=û@žm#{D½Ê㉴¡£[–ªÿÄvNNX98ºXBJ s’ ¸òÅþö]CòÓTÇ Ð«ô­NXǸsâ?u£°Ž sbë8G~òuÜ“Å:n ˆƒä'qçØìƒÎÉ\ǽä_bquœéœLuœ“7PÇ™ÎIOŠ:'žÔPçäÔq¦s2Õq^ê8û%_Ç9ùuœefû:ÎËAç™Ù3ù)îœÄä§©ŽórTÇí¨Žsò„긄ê8/Gu\Buœ“çÇuÜKþhÒ|—~Ð9™ë¸”âΉ¯ã2ªãœ\P'¨ŽórTÇ ªãœ¼€:î=i>×q^ê8Û9ñuœ“+¨ãLçdªã¼ÔqIQçäÔqfÒ|ªã¼Ôq¶sòI½Ãj¨ŽórPÇùΉ¢£÷ÇuÜKþhÒ|šw&긔©:ÎÉŸ×q^þù‰¨ã¼üqçäÏë8/ÿŠüDÔq^þ¸Žsòçuœ—E~"긗üѤyóŸõˆ¹oç‡:gù'ù©pÒüÈMæqé°W¹¹ÁUóœoG*(âLjäWÿl¡Ü ®î=ßZiŸ—.Øò›ÃÍG¾æÞ2†Ìï 'Ok›f½ÃnáQ9F³ÞÇSÀÅ»„kþwP]ÃÉÓ2:’{Œ.,Z8¶‡µí•/Ïm;7$åYÀ“r8¬}.Úiâ,ÚQÁ¢Ý;»Eûùm„לÓ4mÝbúQ¬}Ç9vÆõ°š°;Å­»oœ|u¬ôû°Ù}2ËÊ››òêÀ‡áI=æ)ðag|Q« ·S¼_ø°ý¡[ýWhúz5ñ££Îfbª‰cՕЇձí=–Û×DÙÂ/ðo™^3»¹JéQ5q‘àèÞ‡-Ñ[&íGFÈí· %öaÏä*År×5úÙ"ªåÙˆ«à讚°^¤Öàè9¡æ+²g,€£»j¢B¶Ç7nòaÃ/ðœ| ÷ß¼jÀ‡EG/`—üEÄ5q>lõžTç|ØÎù°óa;çÃv·íœÛ9¶s>lç|ØÎù°óa;çÃöûú½_ø°ý¡;Yý+4e•/ù‡+ä²Jë ù¬ÒÉÈ*+ |zà y„OCY¥“wUZWÈg•^²Jë ù¬ÒÉÈ*½+43xzè ®ÐÌê¡+󇦬ÒËQV¹£¬ÒÉÊ*Ê*½e• e•Nžg•/ù#W¨úob<©ã¦¬ò%ÿœ§uYeFY¥“ Ê*e•^޲JAY¥“ô5’‚²J/Y¥ã¹¬ÒÉd•ž#+]AVéøCyöeÂ:Îù2e•^²ÊÉêàÆ5Ä^j(«ôrUN®:zœU¾ä\¡ê;ä²J9_³ü#«ìg+:j÷µãšb¹k÷å6~–øCãõuþÐoV©È]Vihåö9üå¾[˜ùCãõgü!;gååž?”QV ®¼€¯_ó‡:Çê÷ü¡~á õ‡®Põ¾LÐ`×ó[ÖòOþÚvŸk°Ï¶NqvâÅ5ØçzÄ}Ðã·Ážµ„ò d'؇í¯O¶(ÄÂôß{r_ŒŒ¸Á^R|å'P×ü‘ÍwpòžG’5Øû“—…E+hÑbWh¢¡=¨3Z´Èûã'mA‹»BÕ“`Æ Ž¥y™åŸ<’ÒcÉ/V#–; Îq~B ŽǵòŽÆqß<’ÜÕíHur3†ÝÝŽTsòš·Ë-äˆÙUЩ¸þ¼‘O<»#õ}å[rž”“w{áÌ;ÎòH>B#ä‘$ Ѷ2W ÷-n3Oû®&æ¦ÓK~ÏÊy´6Ë‘´Y¬Í#EŽÖ¦–­h,·k³nû"+g<`åä^7é@nÖ¦ípص)u«ËíÚ<–`ûYbåŒG¬œsÑy·—®Ç„¦å¡)^›¬œqÁʹ[›ÿä1Qçg ¢38ˆÎà :ƒƒè ¢38ˆÎà :ƒƒè ¢38ˆÎà :ƒƒè ¢3î!:0âDÜ:DgpÁAtÑDgpÁAtÑDgpÁAtÑDgÜCt`Ä.ât)1»‚èŒuˆÎÇuÏy+ÿ¢38ˆÎà :ƒƒè ¢38ˆÎà :ƒƒè ¢38ˆÎ¸€èÄxœùýŒæàX9ƒcå Ž•38VÎàX9ƒcå Ž•38VÎàX9ƒcå Ž•38Vθg匋ÍÁ±rÇÊ+gp¬œÁ±rÇÊ+gp¬œÁ±rÇÊ+gp¬œÁ±rÆ=+g\ÌhŽ•3¸ÍÁÍhnFsp3šƒ›ÑÜŒæàf47£9¸ÍÁÍhnFsp3šã~Fs\ÌhŽ•38VÎàX9ƒcå Ž•38VÎàX9ƒcå Ž•38VÎàX9ƒcå Ž•3îY90âЏeVÎàX9c•ó_SÝ&bËàX9ƒcå Ž•38VÎàX9ƒcå Ž•38VÎàX9ƒcåŒ VN<ïü!¿Gâ ‰38$Îà8ƒCâ ‰38$Îà8ƒCâ ‰38$Îà8ƒCâŒ{$θ~gpHœÁ!q‡ÄgpHœÁ!q‡ÄgpHœÁ!q‡Ä‡(ך YGâ ‰38$Îà8ƒCâ ‰38$Îà8ƒCâ ‰3î‘8ãbøypHœÁ!q‡ÄgpHœÁ!q‡ÄgpHœÁ!qÆ=g\ ? ‰sfsç”Hœ·ü+$Ž‘ƒÄyË¿Bâù7Hœ·ü+$Ž‘ƒÄyË¿Bâù7Hœ·ü+$Ž‘ƒÄyË!ç}ZŸvëùgg!â®8æä¿Aâ¼å_!qŒü$Οü;$Ž‘ƒÄyË¿Bâù7Hœ·ü+$Ž‘ƒÄyË¿Bâù7Hœ·"qpÄ5qËHœ'Ø­aÄ­Û­aÄ­Û­aÄ­Û­aÄ­Û­aÄ­Û­aÄ­Û­ âVíÖ0âÖíVq«vkqËvkqëvkq>«Ä×AÄ-#qî#î‰ówòß!qÞò¿Ÿøß¨Í”_!qŒü$Î[þÇÈ¿Aâ¼å_!qŒü$ÎûaõÇÈ¿Aâ¼å_!qŒü$Ž)…>³Ê{óçW~K¾yT®}’oÂrm|–këä›°\['ß„åÚ:ù&,×ÖÉ7a¹ö³L¾åÚ*ù&.×–É7q¹¶L¾‰Ëµeò (×VÉ7 \[J_r‚|ó,yü ß„Éã:ù&.×–É7 y\%߀äq•|ƒ’ÇEòM\®-“o`ò¸F¾‰Ëµeò HWÉ70y\#ß äq‘|“Ç…ÉKNoD\D¾‰"îùDÜ*ùDÜ*ù& ™uò ª·É7aȬ“oÂ5¿N¾ ×ü:ùL²°h-ÚUòÍ£EûI¾‰íò Z´‹äÔcX$ßÄ‹v™|ƒžó‹ä´hÉ7`Ñ®’oàƒz|íÊ“¶ E»J¾iéù&ÕíCÐEÄÐ_ ]äPxþÊ[né"çXõOD¾9‡šb¹#ß)ýO@Qq;ýœÜ U;!jè"ý¨ k,7t‘tÖ”Q¡üíù“»BÙmä´tqöÜ\y»aßÒEŽ:;Ç¿ÝÑEœífS£³Ù˳/…ÌpmB½¥—ü–|óhmÊÉú¬Írþ­xm¯âXîÖfÞÒÏ ù&^›ˆ|SFðÛ?ÖæÙZÖhm¶#àj,·ä›~<9VÈ7ñÚDä›_lwß®ÖfòŽrk3¡µ9“oÀÚt½?¸6ÿÉ òÍ¢½"ß¼oÜWä›·ü+ò‘C¾yË¿"ßù7ä›·ü+ò‘C¾yË¿"ßù7ä›·ü+ò‘C¾1OZD¾Á' â–É7"î“|FÜ:ù&Џä›0âÖÉ7aÄ­“oˆ['ßD÷€|FÜ:ù&ޏeòMqëä›0âÖÉ7 âVÉ7 â,ùG\á"N—³ ò9ù[òÍqžó`å_‘oŒüòM˜×­“oŒüòÉë¾!ßù7ä›8-\&ßù7ä“~C¾1òoÈ7(«L+ï8wòqÖf4…Ä1'ÿ ç-ÿ ‰cäß qÞò¯8Fþ ç-ÿ ‰cäß qÞò¯8Fþ ç-ÿ ‰cäß qÞrˆÄÁWAÄ-#q"î ‰cNþ$Î[þÇÈ¿AâüÉ¿Câù7Hœ·ü+$Ž‘ƒÄyË¿Bâù7Hœ·ü+$Ž‘ƒÄyË!G\·ŒÄyqÑŒfâf47£™¸ÍÄÍh&nF3q3š‰›ÑLÜŒfâf47£™¸Ít?£™.f4…ÄyÒ9 8Qçä'îœ,#qÂÎÉ:ô*W‘8açd‰ö*ב8açd‰vNÖ‘8q¯r‰vNÖ‘8qçd‰wNë¸"n‰ó¤s q¢Î BâÌuœ“…Ä ;'ëHœØ[Fâ„“u$NØ9YGâ„“u$蜬"qâÎÉ2tNV‘8qçd‰wNÖ긗üчB=ìæIç$`å„“uVNÜ9Yfå€ÎÉ*+tNVY9Qçä+'îœ,³rÂÎÉ:+tNVY9açd•ƒ:'‹¬œ°s²ÎÊA“•:î%'X9L—2UÇ9ùW¬¦Ž³òïX9Lçä_±r˜:ÎÉ¿bå0uœ“ÅÊaê8'^Ç%4s²ÌÊyq+'Џ¬œ¸W¹ÌÊ·ÊÊ Cf•…ÌVN2X9q·p™•­ù¬œhÍO¬¼háØÆ*+çÑ¢ýdåD‹ö+-ÚEVZ´‹¬œxÑ.³râù2+tÈWY9`Ñ®²ràƒz•Ô+OZ<ù°ÊÊÉ+'s¬œÌ±r2ÇÊÉ+'s¬œÌ±r2ÇÊÉ+'s¬œÌ±r2ÇÊÉ÷¬œ|áÃfŽ•“9VNæX9™cådŽ•“9VNæX9™cådŽ•“9VNæX9™cådŽ•“ïY9ù‡Í+'s>læ|ØÌù°™óa3çÃf·͜›96s>læ|ØÌù°™óaó}ýž/|ØÌ±r2ÇÊÉ+'Gó´6«¼fådŽ•“9VNæX9™cådŽ•“9VNæX9™cådŽ•“/X97÷’?r…&ˆNæ :™ƒèd¢“9ˆNæ :™ƒèd¢“9ˆNæ :™ƒèd¢“9ˆN¾‡èä W(sÌAt2ÑÉD'sÌAt2ÑÉD'sÌAt2ÑÉD's|ÑÉ®Pæ :™ƒèd¢“9ˆNæ :™ƒèd¢“9ˆNæ :™ƒèä{ˆN¾p…2ÑÉD'sÌAt2ÑÉD'sÌAt2ÑÉD'ßCtò…+” ˆÎ±æåÁôs3oγüsú–s4G}T¢%–'[Aëç¨W¬‚£Û9êj² 3Gݽ‘êäæýÞ¶lŽn˜¿ w¹•˜e“ÒfÜ'÷}Ú2²ºQd'7¹M¶£Èæý® ^ºâê8séÌõ9·×ÜuÌ$œ£Î' "–«Ëis8G­}VH4G­vŠ[í^à†Ž^Ý ¹êÔ1û'´½xæÃ£ˆ; …RgùgÄÙcÄ|8–Í&=–ûÎIÍQÄÕ¼$ïn|2÷S›{Ú”8âü ´‰¸sY€Ü=mF‹v.ñ®#–»u¬¼#îHÊŽ5_€¼›ÁÕl:f¶Ù·Œ“»û^Z#nôä.âªÄ7ìê ˆû—Ŗ祫N펕RBÊJ;®);Z÷•ˆ+\ÄéJÄ|zÚ¨=ù ž6Ñq’,bù»s"éÌ>{ÔéíS€¼ûGZУ> 1ÝtNÄN¸™õ™ÙMȉv.dûšøKJS;–MòwRšÎ+1ªž/~ ·L§bêR;7…rÛ£>{ =êQÿ>o€<»v_‰zÔÇ¥Û<ùùùùpÚÜí1ó!;;ÏÊ1I Fœ‚ˆ»`>?k$zÔÇsW¾Ú“Ï®{P‚õ”±åXnŸóç.hÖ蓺 QÚQÄ}à螦eF•ìsþxÜ yvW®G=êt¼€J,w=jÙjØ£®›‚+o3+ e²=êã9TÁÑ}ÚŒ*U»lÆÖ€ÜGœ„=ê£Go€ìèzÔÞwò‡ŒëQ§m€£wߟ¯ WAÄ]Ì?4"ë=jíÉÃ÷š=yÛ£î4ÒI#­ˇËm¤Í= ·}Ú^ÓÏóA–™çc º”ØÉsœ¿{çS¾eå¶áVr4ùp<ƒ¤@y·ÝÜU惬3~‰‚vÍ;¹Í*ÅL}¼Ÿ´g£µ€£»~]ר_—PèHîšNi‘ù ÷̹˜5’‡³FÅÏœ¬G\o§š?äsÄåwjº6k$˳F'?Nöäf~¾]?#.ŸÉ&8º‰¸s×Ðψ+G%T3’»na8ÝÌɃY£­mHn÷”EÜÙ GGÏhç‚q…ú6Ð¥›ftmÖH͉trß)m±+>¹B²qÕqxÖ¨xæÃ£Î‰6G sRìô7ŸöXµ£¹áÓîŽú~Î^ÈmWö¨Wy$•9ƒ£gû†-ìUç%È]Wƒ^eêêѾ#윜ïá=b>Ô±õܼ›­-BÅv‰sGwÓûjˆÖqtNlç:'¾Ž sbë8Û«œê¸z•¶ŽÛÖqtNë¸"3Šg><êœø:î%ÿìœØ:ÎL÷Muœ“7PÇÙé¾Oê‚DÌ×ll¨Žsòê8Û9ñuœ—ƒ:ÎN÷ù:ÎɨãìtŸ¯ã¼ÔqvºÏ×qVîÿ¶ŽÛQç娎ÛQçä Õq Õq^Žê¸„ê8'Ï븗üÑt_ñcZ:'s÷’tN|—Qçä‚ê8Auœ—£:î’ù Ë̇:ÎËA÷îœÌuœ“+¨ãÞ“¹ŽórPÇ]3dù0×q^ê8Ó9™ê8'o Ž3“©ŽórPÇ]3äžù Ó}òpº¯ø3¢Ž{É¿­ãœüyçåë8+ÿ¢ŽóòÇuœ“?¯ã¼üqçäÏë8/\Ç9ùó:ÎË×qNþ¼Ž{ÉM÷?åµqã¸ð]4Ïò€ùP£íóÇs¾%©±|¸g] ¦ûÚ ÃHnVÝqƒyÚ#µHÖγrq»ùX†›³‚'?!#âÝ÷[v [`Ä™Í}&âŽ%4ÍUÆgê8qÇ¢ëñ›"ÎìL´cZ:ÏUJLœˆ7ïoyL“q¯rù´ç3´+S*æ·‹Ü÷â~ûRV gNðhbñÀŠ'w~ìbb>H¬¨=ÜÙÏ/óôXîÞqIsqÅ­º"Nöh_äqYr(÷×j<Ž O~â]hWK,÷'DÜŽänÕ™‰>âZ|㦈³í}qóP¨\F×Á¥›¦y3ˆ¸Šäî·KFîûq}!âðÌIY™9©ûù™øQKÕYþé€gx’ÉD.á.­;àŸ¼‹Ôqžwaðä¾+då~¶°<£“wýºð½L.p‰ð#yŽð4»À%rÀ«íX|Ÿ¿7Q¢:.ÙïM8¼Ox ð„ð†~{ó|ÚØ¯Û¿½¹®ÑŽðŽîðlÞqåÂ/ðÉÆ-ðv~åêC>¿ãŽËÛRŽð“\cù°_1«-Ú3¢Çblàèîë6-‡{ÿ?ie¶ñ1­¹Ûîý?w¨M.p §÷­ ü~Ç“:’;RhZ¤m”'´é /NîöE–0«ÔMóˆå®ŽK-DBåçä=žê¼¦m”{ÚF¹pÀËC\blÂé€K7¹¸Šä_ß;ÐÁ}÷î€ÙÔ‰#NPÄa?N¼µñ$âÎYà‰¶Q"Tˆ´;àÞÂ. â¼…m".¹UW@ÄÕTbüˆÅÊ}Ä©Ä8<ù©s²#<÷X>uN2ˆ¸É]Ä ä€k|㦈+ÀŸ­Ì8⬕é#®Kç#ÎZØ.âÉ]ÄUä€wpß§ˆ[yÇqØŒPŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœ½çœ(êUþ“3œå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9Ñ{Î Œ¸ÂEœ®DÜ%çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'zÏ9§ âÖ9'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢÷œ½˜òRŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'zÏ9Ñ‹)/å8'ÊMy)7å¥Ü”—rS^ÊMy)7å¥Ü”—rS^ÊMy)7å¥Ü”—rS^z?å¥S^ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çDï9'0âЏeΉrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœè=çD/æ*•ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9ΉÞsNôb®R9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœuÜKÎpN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çDï9'z1W©çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqNôžs¢s•ÊqN*Ç9©ç¤rœ“ÊqN*Ç9©ç¤rœ“ÊqN*Ç9©ç¤rœ“ÊqNê=ç¤^8à•ãœTŽsR9ÎIå8'•ãœTŽsR9ÎIå8'•ãœTŽsR9ÎIå8'•ãœÔ{ÎI½pÀ+Ç9©œ^9¼rxåðÊ9à•sÀ+ç€Wίœ^9¼rxåðzß9©xå8'•ãœTŽsR9ÎIå8'•ãœTŽsR9ÎIå8'•ãœTŽsR9ÎIå8'õžsR/ü¸ÊqN*Ç9©ç¤rœ“ÊqN*Ç9©ç¤rœ“ÊqN*Ç9©ç¤rœ“ÊqNê=ç¤^øq•ãœTŽsR9ÎIå8'•ãœTŽsR9ÎIå8'•ãœTŽsR9ÎIå8'•ãœÔ{ÎI½ðã*Ç9©ç¤rœ“ÊqN*Ç9©ç¤rœ“ÊqN*Ç9©ç¤rœ“ÊqN*Ç9©÷œ“záÇUŽsR9ÎIå8'•ãœTŽsR9ÎIå8'•ãœTŽsR9ÎIå8'•ãœTŽsRï9'õ«ç¤qœ“ÆqNÇ9iç¤qœ“ÆqNÇ9iç¤qœ“ÆqNÇ9iç¤ÝsNêUþ“3œ“ÆqNÇ9iç¤qœ“ÆqNÇ9iç¤qœ“ÆqNÇ9iç¤qœ“vÏ9W¸ˆÓ•ˆ»äœ4ŽsÒ–9'ÿõZü£ÒÉ¿âœ4ŽsÒ8ÎIã8'ãœ4ŽsÒ8ÎIã8'㜴 ÎIL0ùßs5gÒ8œIãp&Ù4gÒ8œIãp&Ù4gÒ8œIãp&Ù´{œI»æjΤq8“ÆáL‡3iΤq8“ÆáL‡3iΤq8“ÆáL‡3iΤÝãLÚÅ0Wãp&æjÜ0Wㆹ7ÌÕ¸a®Æ s5n˜«qÃ\æjÜ0Wㆹ7ÌÕÚÅ0Wãp&Ù4gÒ8œIãp&Ù4gÒ8œIãp&Ù4gÒ8œIãp&íg#n ˆ[Æ™4gÒ8œI[Ç™ü×ë>Ï?6gÒ8œIãp&Ù4gÒ8œIãp&Ù4gÒ.p&ñ`ä‡üžZÒ8jIã¨%£–4ŽZÒ8jIã¨%£–4ŽZÒ8jIã¨%£–4ŽZÒî©%íbJ²qÔ’ÆQKG-iµ¤qÔ’ÆQKG-iµ¤qÔ’ÆQKG-iµ¤qÔ¢\{ÉjIã¨%£–4ŽZÒ8jIã¨%£–4ŽZÒ8jIã¨%£–4ŽZÒ8jI»§–´‹)ÉÆQKG-iµ¤qÔ’ÆQKG-iµ¤qÔ’ÆQKG-iµ¤qÔ’ÆQKÚ=µ¤]LI6ŽZÒ9jIç¨%£–tŽZÒ9jIç¨%£–tŽZÒ9jIç¨%£–tŽZÒï©%ýÂèsÔ’ÎQK:G-鵤sÔ’ÎQK:G-鵤sÔ’ÎQK:G-鵤ßSKú…ÑÝ9jIçŒîÎÝ3º;gtwÎèîœÑÝ9£»sFwçŒîÎÝ3º;gt÷ûÎI¿0º;G-鵤sÔ’ÎQKúÇúoô´™ÑÞKjIç¨%£–tŽZÒ9jIç¨%£–tŽZÒ9jI¿ –,Øn} NÒ98Içà$ƒ“tNÒ98Içà$ƒ“tNÒ98Içà$ƒ“tNÒïá$ýÂv뜤sp’ÎÁI:'霤sp’ÎÁI:'霤sp’ÎÁI:'霤ßÃIú…íÖ98Içà$ƒ“tNÒ98Içà$ƒ“tNÒ98Içà$ƒ“tNÒ98I¿‡“ô Û­sp’ÎÁI:'霤sp’ÎÁI:'霤sp’ÎÁI:'霤sp’~'é¶[çà$ã~'€é«i“<Ë?X[Ócx/›~Nwt 7éAkë@OÚ@G/›r68úO€ù9ÊìË}nÓ£YüsÖº ï.« aGR¬àèVÐì`q±‹6ïàÒÙéKqf˜>mYÑ¥sÓ—»¹tï2ð¨ßSG7e`=Êh"<à{Œg´kx–g‹öøGóDZˆí™x—`Ѧ³’*@nïû0Š÷³NÏj¤Çr“ÏÿÎÌ‹ö¸qÉÝ깘ˆÛ«f 7÷]“¡ ü-Z9îZà·¿m[6 ¹[´UÀÑý¢5 »h[B¿Ý/ÚpH•­gpß«íí­,,ÚÂ-Z]Y´Õb Ü¦)µ'ïÀ,fÓ”ëœô‰°1¢Vôqã?Gý¾ŸÁäï=Wr¼È?ÿi;ä*a|¶¢¥90‹iExFrûÛ“iwï]s,÷½‹!2Žg]CGvÏ•D­èã!íw|¹iEUºÙñå[ÑGrä®~ßsØŠþq,#+O¾_#2Ž˜GŸZÑ!"Cd&lŒ¨ÿ=ëã>°êB`™É!9WŸåŸ“C'f%˜ªÇ}/@îv€ìfVïïy|>P%e ïf™ÑLîy å&‰ðrÛŠ>“ G» L+úÈ»Vtí%Ú²ŸkÈ-ñÈÌê½[Ñ—òº¹õö¶VÀÉ»ªé1ØVôïôf,÷­èT‚VtªçEòîžÇ5hE_ÉûË/^e¼Êð䋸¶qïǹd٦ᛴ¢ld[Ñ%‹>–ÛÇùqƒ‚VôQŽž¹ÛU'9lE—ãqÝOIZÑÇ‹xlHî7ô L/çKå.u­ÑƒŒ³ÊGr“@Õ=Dd”­À£»Vtmq+:m=¹oE‡ezßzG÷“C!2ÚñïHn“Ç#2Žü ݵ¢ÍÑ/"®ˆÃ“C.âú“ˆ;·ïjS埓CÇc>0ÊQÆÕä¾1–ƒÉ¡ãÕ—:ºkŒÙ­zWWT+±Ü5ÆŽƒG“C'?5ÆrdþœØ5$w±”ÃÉ¡ZàÑ]cLâÉ¡#·È@îc M9ûÉ!‰ÍŸ1ÀÑ'óGCó'kGŸ&‡ÂY½sMbùdþ´…ˆë¨\ƒ“C.âÆR!¡šc˜¢ÁS{KDíýÜ‹åÉDˆŒ¢[AG7ˆŒlmöw‹¢Ù… ¯:9"Ëì°Ïù#íè@îÊ5‰:gÆ66â¶\®Q[®µ­ £;DF“‘qÏV3û‡élX®99(×lƒd*×FÜ qåšCdørmÄ W®YDÆT®¸Aòÿrí.âŠ8ˆÈø™Ξ4H¦:î%$¦Ž3 ’©Žsòê¸wƒd.ļÔqïIÃÏCíaƒd’wTÇy9¨ãLƒdªãœ|€:îÝ ™ 1/uÜ»Ar%·³z¾ŽÛQç娎ÛQçä Õq Õq^Žê¸4Väù³Ž[˜Õ»o¤ô°Aâ˵—ü³AâʵŒÊ5'T® *×¼•k‚Ê5'/ \ó[«l¹æå \3 ’©\sråÚ»A2—k^Ê53«7•kN^A¹æ$®\órP®Ù‰/ל¼rÍ4H¦rÍËA¹fgõ|¹æäýq¹ö’?™Õs—©rí%ÿ¶\sòçåš—?.׬ü‹rÍË—kNþ¼\óòÇåš“?/×¼üq¹æäÏË5/\®9ùórí%2«ç"Nµ$Ç>Îjb–´$ó‘]³zÒ¼lš–6ì 2‡È%Mt‘#24ÞZ•¸t«ösò¯ã"£´~û„È·Vur'¿¸a¿U ÿ ‘1îãbVo<›ÕsWFÜù]¢ùGÄÉBiΈ›§åâˆ3Ór׈ŒÁ!2Æ:"ã 9éÈs\sL.ÝqfZî‘18DÆx€È8C®‚“÷ï8é(âÀÉOW–ƒCdŒ{DƸ˜ÕÏfõ&£ûÌd—ë¸cÕ¥ÞgùGwLÑž«³ÒÈÍ•ïgÍÔqu¸x÷ò¿+_vÛ}×q—ò÷•ŸäÅ®:ñ #ÏvÎdŒîtTbäê˜Á50ºúØšwkÜNϔݗòw7ÉÑ­œ¼Ÿ`tËäÍ·¢C£û„@ƒ“7u\¶Ÿt²F÷…¼ï±ÜtÌ>îóÏ!2’3ý"ÎÝçTOåŸF÷±ºJdt˹"–Û¶\Û¤GFwÙšv ·ðZ"DF–£~îî&=6ºû†ä€ÚkçÑËñæ×Xî?¢&Q'g§ÉíÏ#2ÎïyFV³7ºkr×9‘pȹùXb¹ÿl¡Î™:®m]wg=DFGG÷ˆŒ÷Ñ/"®ˆ»@d$g9>ˆ¸ÈèŽ"îÑFܺÑEÜ£;ЏFwqëFwqëFwqŒî(âÝqÄ-ÝqÄ-ÝaÄ­ÝaÄùÎ Ž¸"î‘‘™þ>âŒí6e•/ù‡íæ²Jc»MY¥“7U¾m·9-ôrU¾òKùÿ/ðã8G»ÿ¤£¬ÒËAVil·)«tò²J3—<¥…^²JƒÈ¸Û¹dŸUî(«ôr”Uî(«tò„²Ê„²J/GYe+òü™UÞÛn¿ò›ÀJÏʵ)y|É?m7—Ù±Ü#2rŒÈ¨Ý#2jŒÈRÜ#2$% wíØ—kgöË}¹¶'<6ptŸ<æ ’Ç^c¹OSYˆ¸Œ"#2¼ò$âÆ^7õæOqçFÛšiòÍP¹6ìψŒ¸\[FdÄåZŒÈø5,ËHPÄY¦7À¥[ݰ¯È¿Ad€r-Fdœ&@ ÷3[ ˜ œüâ†}Í@þ "#Џ ‘#NPÄaDFrdúgWÜ`ñKþqm ¡4GÄí“oGœ÷Í. A²ŠÈ"2Έ›ð âr¥9#\º)â0º'DЏEDЏ‘qF\'ï#@idòÍPÄ 2º¥ù7ˆ q &ÀKþ‘a[’ÿ:ë·RȬº—<˜KVCñ´ùüL=–7ÿ« Aòš²r‡¼K!CôûGŸwŸ ’ÿj9v$·c§J‰¢ç'Æ2;ÜßœFÓ 9² üvǯ҃ÉÉJWÞÎ%§ÍÐÞ ’r–ïvo­“¿ñ_'š.jˆ¸‰$'OV`\ƒÄ1.œÜþöQB†èÙ–GÏö·¿^AÈXfp~2'ƒAgyðµËíÝGw!s·±Ü—Àáǚα‹ Žî>Îfá6d~çicy¨éwOñ?'"ÈM?Uío·¬ƒ»ßk~»-B¥¢ßnzŠ¿0î dêÖøí6d¶f¿ég–Íñ’ÙÛI󲥨§˜«Û<“ãù%iD!“%ÒË]Ûǘ?&dê‘Ýyö-/ {Ši+!sX²Xö{\€˜Ûë3 îJûñ_¶r_å›-6–k|~Q ÈÝ»(Gàœ30kŠåÙ¿‹Êç®4‘²)úíï (ŸýÕÅï ³r“5·/ìÉ~dà·‹mX×Á¢Òiîßî>Ü\RðáfÉÇooȳÍsÄšêÉÓ_¬\ío·ô—w?õ¸¦²ƒ+¯ö·k‰XS秸òÕþvi‘IóÉš:ÿì ¶ÇE\yqÇ5ž·F\Úz¼´ž,¤Xî"Î|PÊFÜï‡F¼ƒ˜.âÔ“®PÄIð©ô²ë&ÝDœžùqqÓ‡ÚKqê AºòòÝ#ÒÕo#|€+ï Ý£O¥ç~B ÜÜ÷¾™££îºïê^ã=Üš÷ Ýw¿TâO¥ë†î{­¾ˆ¸ÂEœ>K'­zTU˜<æsè>J‹¶SToYWÕÖ[?ö[ç^î>™½ƒzKÈ}½U>÷þwbõ¼ùî`ÛR ézd_Ó&GÀæÈ> .Ï ë­³‘’£z«m-Çr÷͆­¶ Þ:î»nà¾Ûä1W÷És߀òä¾–‘âo6œ›s¼» Þ%¿èXî¿Ùð{ßïAY+Éc]¬·!JÝšÍAª=Çì*ÒñiHéñ&ÓXn[HEŒ-jl9¹È@î^e{ø‰½sÍ‚£;›ÄÌV½ iíGnã¿RgäÙ<Í“Y\ïǹ¯ñi7†ô¹y?šNr6ûÜ‘FQa·õãKç iséþ¨Ç-ÜÊ—ÎMø˜á¨·!}<ÄÕÃVn?•.=Gû@篕9¹ ŽphËèè®7EÝÅ«¬‚WÙÅüp÷³”i¹Y_êñ@Kž·dNÞð¬÷}ðëß„Q‹å¶p^üŸà{¿rÛ±7n¸ÏÐŒøèn~Øvaþ߬?›g½¡ßþnÖ×#÷ëà› mž¡M‘!ífhÿçå8º‚ßîšõ-þà×ÉèèŒAü5ëç¬Âûnšõ[³÷ÝÒøÊ ºò¦Y¯ð¾ûf½¹ï~~8¡£𹱋ˆk â.æ‡ý×ÊDœ=›í:Ë??•>F "î¨TKÎ@î>•ÞZ0rÜ&—Ž"Înr ,þó‚aÄS!-åHú«yv/©EÜYoÅ¿})ÑH>iÈ]×54¤hH¶déqÄm±!ý ,pònè¨ñ>Ð2O†tÞ&@î¾½×BCúœWî¡Ü7HÌ(À»ArußmƒÄ×qûÊ}Ÿ&ö<­ÜwÊ2÷Ý5Hà}÷îÚ¿û¾0±ß IéIƒä£\K)lLåZFåš“ *וk^ŽÊ5AEƒ“P4ü¿AòY®y9(×ìľ/ל\ÑÔº¢rÍËA¹f$¾\sò ʵ¿ÉG¹æå \sûøÊ£qÓ ™Ê5/嚟ØOèèýq¹ö’?šØïÄ”k)Såš“?/×¼üq¹få_”k^þ¸\sòçåš—?.לüy¹æåË5'^®yùãrÍÉŸ—k/ù£‰ýîG¯—#n¤sמû|°D—·Vzq?¿ØÜËøë;âä|†öäÝŽÜ“æqG)Žî±=ágdõˆ˜lf«¼Ü}Ô²IqÛŒª #ÎØñ ”·$—AYQÄ!PÖQ¤ç½(gs߆Æwä±àÒùˆ‹[’ûÌÙ-IÇÙ6)DGŸ°=+ï88A‚'ömÄ•'ï¸qú']û,Ÿßqr~“,ÇW3»ˆ“hbÿŒ8;5åå6âJïqÄ¡£ûˆ3Gw×ë47žb¤A- â'´Oä ”…"n”…".e!—v$ÏîeRPÄùqEøíSÄUqàèSÄ•…ˆÃ$ee‚¤þÖöËF·œái–ÏuÜ‘„ÔÝySËtò÷•OGÍÒC£ûHWµ¹3{Klt7àèÅ¡(÷Èè>Ç#ròw Û·ÚB£{ß²ÿ*Ò[î&5…F÷qU$¹mI®ž­ã..]ÝÁ¥{7ÆRÝR—î]ÇM[Œîß@ÞÌ}¯vøÙݬ:otKltWEGwF÷°cçùÂèÎîæIWy}WZÑ>ÖÈœ|6{6ºK,ŸŒîù;B(àè®-—*4ºã£ÏF÷ç®´r<.Ê¿ýýŽ;þ–™ŸŒîRc¹7ºÃO¥—­ï ÝÖqÇûÝèè¾-§Á;î(a;ºïæ—~;[ÈèW^Е·uœ¢ûîë8sßg£}2ºëBÄ5qFwó~iæŒîÌÝ™3º3gtgÎèΜÑ9£;sFwæŒîÌÝ™3º3gtçûÎI¾0ºóC£Ûdå>âv˜]¼ä³íæ³ k»OZ on„Pí&e¹³žÙn5Årß%–ÀvûÑrnÅòÿÿöÿƱ:߈ k»éñšrû~?¿´Ùnû6jò…} '觇ro»ý{pζÛÅ}7¶Û”Uî+÷ÝÚnî¾{Û Ýwo»™û>Ùnà¾O¶›,Únù>°Ò£rmN_òrÍ'%N.(y”&o“G9{š@n¿[PZØ’<³Ç˧ï±8ytíØŒ’G316%¹ÇòŒ A”5¶´7 wÈ"DY-#¾ïk”Õã¡R€ÜSV+JÁ+ !zqE¶Ý&dQ~`웪´Y>GœžŸ•Ø(%ÇrW®©öȨ£Õäöû4Yrl £Oß§ÑšGT€<Û ¦T`T _û>Í ÊÊ(+?e­}¹-×t$d€£O&@&@¿}éû4øèðû48âE¶Ý&ûåAÄíǪËéCþ¹÷FrÈî'%È}ƒ¤”8âö ×GÜhÀèFGŸ¾OSJque…WZÊ:#N|íû43(+s ¬ü”uD\KHn#®õŽ"ȧˆë â*øíKß§ÁG‡ß§ÁWPÄaÛm"É3P–NÄ# AY¥‡·Ï?rʪhãvÎ@Þã)<ß ™9[@YÁDø è NÞ€²N"B $Ǹí©V>ìNû¤°ƒ“·Èùù» Ap¶$e™þÊ»A"ýLè‘üÛœß'èAƒäøƒÜ€IæÈ¿âl ÇÙ޳%gK8Ζpœ-á8[rÁÙº‹8wÒ¸Öæ’…p àÀ%€K8—p.á\¸„p àÀ%€Kî\r1—,€K8—p.á\¸„p àÀ%€K8—p.á\¸äÀ%sɸ„›Kn.Y¸¹dáæ’…›Kn.Y¸¹dáæ’…›Kn.Y¸¹dáæ’å~.Y.æ’…p àÀ%€K8—p.á\¸„p àÀ%€K8—ܸ`Ä qË.á\¸„p à’u×OÝË&Hþ€K8—p.á\¸„p à’ ×MĽäñ~Ÿ%2—pd.áÈ\‘¹„#s GæŽÌ%™K82—pd.áÈ\‘¹„#sÉ=™K.¶GæŽÌ%™K82—pd.áÈ\‘¹„#s GæŽÌ%™K82—pd.¢ŽKhædÌ%™K82—pd.áÈ\‘¹„#s GæŽÌ%™K82—pd.áÈ\rOæ’‹-‘¹„#s GæŽÌ%™K82—pd.áÈ\‘¹„#s GæŽÌ%™KîÉ\r±E@82WáÈ\…#sŽÌU82WáÈ\…#sŽÌU82WáÈ\…#sŽÌU82W¹'s• ¼pd®Â‘¹ Gæ*™«pd®Â‘¹ Gæ*™«pd®Â‘¹ Gæ*™«pd®rOæ*xáÈ\…sÀ ç€Î/œ^8¼pxáðÂ9à…sÀ ç€Î/œ^î;'åÂ/™«pd®Â‘¹ Gæ*™«pd®øq}ßFèÇ}’¹ Gæ*™«pd®Â‘¹ Gæ*™«\¹n"î%äÇMÈ®Â!» ‡ì*²«pÈ®Â!» ‡ì*²«pÈ®Â!» ‡ì*²«pÈ®rì*~\á]…CvÙU8dWá]…CvÙU8dWá]…CvÙU8dWá]åÙU.ü¸Â!» ‡ì*²«pÈ®Â!» ‡ì*²«pÈ®Â!» ‡ì*²«pÈ®Â!»Ê=²«\øq…CvÙU8dWá]…CvÙU8dWá]…CvÙU8dWá]…Cv•{dW¹ðã ‡ìÒ'd¡_ÒÉ,ÿ$ ¡Ÿ˜,Tk,o ³r{À¸¹›h5Ûç}>ßÀÑ}>Ÿ£oýÈqáÁo3B²PÝ·}¡s’˶gðÛMF-[6Іa9'Žwaä¶s’íödù6Z·äæ¾—¾…{ÀÛ¹ë#–ÛŒúìtNr÷„'·¿½÷høI™ßÁÑó6¼üVÃa¯ò%¿Gv= ,9~ã,Ëtw¦À’X>V5±—@`ÅÈ®“sä /@vk«ÀßnK†ýí6°þvXÍþvXùXtà䇃èDÈ®sH¿‚ßîYxšBd×Y«v 7¿ý$EUÏþL,·U·ÂŽ¿ƒ“OŽX"d×ùãs|å]K2YÈB`ý“3È.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìÒ{dŒ8·ŽìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.½GvÁˆ+\Ä鳬2@v)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²Kï‘]0âDÜ:²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»ôÙ¥ËÊ!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²Kï‘]z1°¬²K¹eå–•XVn`Y¹eå–•XVn`Y¹eå–•XVn`Yï–õb`Y9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cvé=² FÜ@·ŒìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.½GvéÅå]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥÷È.½Ø" ²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»ˆ:.¡™“ud—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cvé=²K/¶(‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.½GvéÅå]•CvUÙU9dWå]•CvUÙU9dWå]•CvUÙU9dWå]õÙU/ðÊ!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»ê=²«^8à•CvUίœ^9¼rxåðÊ9à•sÀ+ç€Wίœ^9¼rx½ïœÔ ¼rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®zìª~\å]•CvUÙU9dWå]•CvUÙU9dWå]•CvUÙU9dWå]õÙU/ü¸Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»ê=²«^øq•CvUÙU9dWå]•CvUÙU9dWå]•CvUÙU9dWå]•CvÕ{dW½ðã*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª÷È®záÇUÙÕî;'ÍHùëoõ¸Ù›Úâv‚'ýÉ[çig4PŽåÈ\ºÿŸüUÆ6¿Þò÷É—#ƒ2»°ÿN>÷3e‹å£š Ôs´ ;}—øä=ÛÇ´>ÒþΨÏ-èÈß'ÿ[h¿»'/òA;û“§jÖŒJ šGenVNžwW­°êªG=[uå¸%³m ývSk–­˜ßnÈO}SôÛù©šßþÞMUŽr¯e ·¿]sÀ¡‘’·º÷Xþîêå³¶ÈÁnªã¥Éío—p7Õ¼ÍÊùÉnDû{¤Eä§öCc#®<Œ¸áá•Eœ¶(âò±{åÉ?CÖšœH( ·—SÈZK'×(–ûˆAÄ¥\7‘ 䯽ÙöZ‚ˆû§Ê±üqù,»ñ½êÚ‰„r‹Î´ÌÓwÄÿî®@î"NJD~: ¾ Ýwq?Ç«û³Ô ÝwKQ·ÑÜwÙÐ}WG74÷ÝöÑW$ûý‹æ¾ãˆ+\ÄéRþ•Lñ.{™åŸ<Ñìø¥¿Y@åͽÆÍ³Îù¥£€£;¿4kê=³ƒË]ú–r@~JeÊ|<›ä^KD~’ý¨&ÀÑM!Ÿk3ðKËix‚£;P¯îÔ;û;ieàÊûìϼe ùéÞ ÜwêífÑZòÓQËoàè6·9'!B¿tlà¾OO(ÈÚÜkãæ^ÛýÜk»˜{mç^mÄg“¹Ž¨sbë¸Öqô*]—`7`çDAçÄÕquNl—a7ÂÎÉTÇeXǰs2Õqë¸:'¶ŽXÇ Ô9±ÝÂë¸:'¶Ž³ä§©ŽqçÄÕqŽ™íë¸;'wN|7@çd±Ž(â0ù©ú™ßöèK,.ŸɃ/±˜|~‡ù¼“£|~‡ù¼—ƒ|~‡ù¼“ã|þýÛËÞìÐîvN~c®“㙽¡“÷_b1'?©ÝNcíqçä÷S7á¤ù‹¡<ùŒ:"?]Ýw×9quܾrßý¤¹­ãÒÊ}O Õqiå¾OÌì•:î%4i^ýÐîƒÎÉ\Ç¥wN|—Qçä‚ê8Auœ—£:NP5áäT“:ÎËAg'Í}çä ê¸wçd®ã¼ÔqvÒÜ×qN^A÷îœÌuœ—ƒ:ÎMšã+ßЕo¨ŽórPÇùIóŽÞ×q/ù£Ióêg~‰:.eªŽsòçuœ—E~"ê8/\Ç9ùó:ÎË¿"?uœ—?®ãœüyçå_‘Ÿˆ:î%4i^=Âg=âú8¿]7Mš·hÇpÛƒIó,ÛñLɡ™@¬#Ú1\ÎiŽÉ-‡F††ƒ«ÇÁK(ŸÐMá¨x:÷'ÄGŸW£-¿¿_JK@î—Í'Ok›f½ÃnáQ9F³Þ[ö[Á$\ó¿à( 'OËèHîI0+¯ 8¶‡µí¢-Ïm?nÜ4¬ÝBxÒkŸËV[,_zMTIÈÝ£²×`Ѷ£2ž¦­[L?Ч­ÏU}zÎï,ÚÞÜïªÉñ¢­ œ¼ÇÅãÒ¿Ë6–Oê>¨ÏU äýñ“O>”•ɇú;s¹îÃöî>‰ùOþQMœ¹oèÞˆËÝ· ›¶HrçEÖЇýdðôЇµ žâ¾¤:*›Jêì-E>ìQýï@nª 9JÝЇm'¹ÈÝw5ôa?ñE=¨&<¾ÈömZŸ|Øù°ç–ð š8± Ü÷f9ñà lç|ØÎù°óa;çÃv·íœÛ9¶s>lç|ØÎù°óaû}ýÞ/|ØþЇUß`ï\!—]¼äŸ®Í.v˜]89Ê.v˜]x9È.v˜]89Î.Ì—ÒÏ3¹â.±+tØ“7O9Ò¿Ð:žV¹¹ó"[ì åmâõÈ:Ž»Bð¾;WÈe•ûÊ}·®Ï*ÓÊ}÷®Í*ÓÊ}Ÿ\¡•¬ò%ä ©ï?©ã¦¬ò%ÿ¬ã\V™QVé䂲JAY¥—£¬RPnãä}¤ ¬ÒËAVi]¡ÉÊLqç­LEY¥—ƒ¬ÒºB>«tòоFRQVéå «t®¾ò ]ù†²J/Y¥«ã~毑€:n%«|ɹBÓW)žd•ýä™ôYñ‡4ÇY¥ÝVéäž?ÔëϨsü¡þ„?t¼%JrÇÒg•u²6â¬2íýg‰?Ô9þPÆÚw$÷ü¡Œ²JpéuJ/ùCãõ{þP¿p…úCWh²6úƒ{Ýjoe–ü¡”ƒ:î쯧]c¹¥¡X[Ç7ØóôAPÇ…ôhÇ¢Ý{(÷¡b–ÍÔ`>7Øj°g ÷Ë&æ‘Ô’ÀÉ{P×üù¤Œ¯üÄ#IŠì È}%µòš´h±+¤Þz²hËÖmŸö%ÿDød³#Õ»B{-±|é5QÓôMŒxÑÆßÄ8ûö%>ºgðÔð9.Ú}Z´ÆÖñ‹v‚'E >jQs'ï!:­"Wœüô ÎhÑ‚“ŸíÊ“¶ E‹]!Û1ûWa®óHdÓ ¦2"Éq{cÉéØÄrË#qóužGÒ€Ü ™]؆šä²I'ÿ¾Àç¸tŽx$?uw¶Ž•É~ç6õdI„r[AŸeöÛúã‘H?» ä'¯y³ßÀ1<’vN ÇrË#9’þ”ÀSnãäÙž¼ýròûa57^ò{VÎxHhêm–‡¬ צã?:¹gåè"+g¬³r~dìðä-+GìÉ¿×fÛ@'oÖ¦±¿ÈÊX9ÒÎ<¹9ùl7žšµYúñÇr»6Õ~tä’•3.X9wkóŸ<&êü,AtÑDgpÁAtÑDgpÁAtÑDgpÁAtÆ=DFœ€ˆ[‡è ¢38ˆÎà :ƒƒè ¢38ˆÎà :ƒƒè ¢38ˆÎà :ƒƒèŒ{ˆŒ¸ÂEœ.%fWÁAtÑDgp±Ñù¯ži!øíßAtÑDgpÁAtÑó!¿ŸÑ+gp¬œÁ±rÇÊ+gp¬œÁ±rÇÊ+gp¬œÁ±rÇÊ÷¬œq1£98VÎàX9ƒcå Ž•38VÎàX9ƒcå Ž•38VÎàX9ƒcå Ž•38Vθg匋ÍÁ±r7£9¸ÍÁÍhnFsp3šƒ›ÑÜŒæàf47£9¸ÍÁÍhnFsÜÏhŽ‹ÍÁ±rÇÊ+gp¬œÁ±rÇÊ+gp¬œÁ±rÇÊ+gp¬œÁ±rÆ=+FÜ@·ÌÊ+gp¬œÁ±rÇÊ+g¬³rþk5oNþ;VÎàX9ƒcå Ž•38VÎàX9ã‚•Ï;Èï‘8ƒCâ ‰38$Îà8ƒCâ ‰38$Îà8ƒCâ ‰38$Îà8ã‰3.†Ÿ‡ÄgpHœÁ!q‡ÄgpHœÁ!q‡ÄgpHœÁ!q‡Ä!ʵ„&HÖ‘8ƒCâ ‰38$Îà8ƒCâ ‰38$Îà8ƒCâŒ{$θ~gpHœÁ!q‡ÄgpHœÁ!q‡ÄgpHœqÄÃσB✋…@âœr‰ó–…Ä1òo8oùWH#ÿ‰ó–…Ä1òo8oùWH#ÿ‰ó–…Ä1òo8o9Ü´þ~†~Ú­çŸHœ…ˆ»B☓ÿ‰ó–…Ä1òo8òï8Fþ ç-ÿ ‰cäß qÞò¯8Fþ ç-ÿ ‰cäß qÞrˆÄÁ×@Ä-#qžD\`·†·n·Æ·l·†·n·†·n·F÷Àn#nÙn #nÝn #nÝn #nÝn#nÙn #nÝn #Îg•8â:ˆ¸e$Î}Ä]"qþNþ;$Î[þÇÈ¿Aâ¼å_!qŒü$Î[þw{ÿµ›>í%ÇÈ¿Aâ¼V_!qŒü$Î[þÇÈ¿Aâ˜Rèó¾ß›?¿ò[òÍ£rí“|—kËä›°\ûY&ßÄåÚ2ù&.×–É7Q¹ö€|–këä›°\['ß„åÚ:ù&,×ÖÉ7a¹ö³L¾åÚ*ù•k+ÉãKNo%Ÿä›0y\'߀äq•|’ÇUò HWÉ7aò¸N¾Éã*ù$«ä”<.’o@ò¸J¾Éãù%‹ä˜<–…ˆË(âVÉ7"."ßD÷€|FÜ:ù•k‹ä›0dÖÉ7¨ÞZ$߀Y%ß„k~|®ùuò ,˜V^‚í*ùæÑ¢ý$ßD‹öùæákb&߀E»J¾‰í2ù-ÚEò Z´‹ä°hWÉ7ðA½F¾‹våI[Т]%ßœ®ìòͱgyD¾³ UÍ?º{|Ë[îè"ÿŠƒÏ:ûœ‹åˆøÿ“?^ú[îàäßtn¿ÿ›.2ò‘σ£¿é"çT´ö¨PÎûñ å®P¶u¶!ßL™•—¿±=Ç«ÐnäÔ¿'Ø‘”ŽËßt‘£Zƹ2©Ññ¸i@n+]1û ÿJÜ[zÉoÉ7Oצk—g´6Å;*Ó±ÜS™RúY!ßÄk3&ßH9Á7Hþ^›íü[ÁÚüž¼!ßU¾9ù+òM¸6!ùæÄ‹ ¹™Ø¯›ÁUÛa°‘‘õùÛYî?+ä›xm:ò ^›ÿäùfaÑ^‘oÞ7î+òÍ[þùÆÈ¿!ß¼å_‘oŒüòÍ[þùÆÈ¿!ß¼å_‘oŒüòÍ[þùÆÈ¿!ߘ'-"ßàˆqËä›g÷A¾·J¾ #n|"n•|ƒ"n‘|FÜ:ù&Џä›0âÖÉ7 âVÉ7aÄ­“o¢ˆ{@¾ #n|Fœ'ßàˆ+\ÄéRbvA¾1'ÿ ùÆ$fßoŒüò ÈëVÉ7F~K¾ùØJiå_‘oŒüò H WÉ7Fþ ùƤ…ßoŒüò Ê*óÊ;NAÄÕâÚŒf¢8æä¿Aâ¼å_!qŒü$Î[þÇÈ¿Aâ¼å_!qŒü$Î[þÇÈ¿Aâ¼å_!qŒü$Î[·Ð∫ â–‘8 w…Ä1'ÿ ç-ÿ ‰cäß qþäß!qŒü$Î[þÇÈ¿Aâ¼å_!qŒü$Î[þÇÈ¿Aâ¼å‰ƒ#®ˆ[Fâ<‰¸hF3q3š‰›ÑLÜŒfâf47£™¸ÍÄÍh&nF3q3š‰›ÑLÜŒfºŸÑL3š‰Bâ<êœ|"q@çd‰÷*—‘8¨s²ˆÄ“U$NÔ9y€Ä‰:'8 s²ŠÄ“U$NÜ9YFâ„“u$êœ,"qâÎÉb7PÄ­"quN>Ñ(qçd‰vNÖ‘8 s²ŠÄní'êœ $ÎQǵ üWHœ°s²ŽÄ‰ÍÞe$NÜ9YFâ„“u$NÜ9YFâÄ“µ:î%ô¡PÏLyÒ9 X9açd•vNÖY9 s²Êʉ;'ˬœ¨sò€•wN–Y9açd•:'«¬œ°s²ÎÊ ;'묜°s²Îʉ;'kuÜKN°r˜:.eªŽsò¯X9Lgåß±r˜:ÎÉ¿bå0uœ“ÅÊaê8'ÿŠ•ÃÔqNþ¼ŽKhæd™•ó â"VNqX9QÄ=`åD÷€•†Ì:+' ™uV™UVNÜ-\fåDkþ+'Zó+/Z8¶±ÊÊy´h?Y9Ñ¢}ÀÊyøš˜Y9à5±Êʉí2+=çY9hÑ.²rÀ¢]eåÀõ+>¨Wž´xòa••“9VNæX9™cådŽ•“9VNæX9™cådŽ•“9VNæX9™cådŽ•“ïY9ù‡Í+'s¬œÌ±r2ÇÊÉ+'s¬œÌ±r2ÇÊÉ+'s¬œÌ±r2ÇÊÉ+'ß³rò…›9VNæ|ØÌù°™óa3çÃf·͜›96s>læ|ØÌù°™óa3çÃæûú=_ø°™cådŽ•“9VNæX9™cådŽ•“9VN\!9Ò¿EVNæX9™cådŽ•“9VNæX9ù‚•sq/ù#Whâ‘d¢“9ˆNæ :™ƒèd¢“9ˆNæ :™ƒèd¢“9ˆNæ :™ƒèä{ˆN¾p…2ÑÉD'sÌAt2ÑÉD'sÌAt2ÑÉD'sÌAt2ÑÉ÷|á e¢“9ˆNæ :™ƒèd¢“9ˆNæ :™ƒèd¢“9ˆN¾‡èä W(sÌAt2ÑÉD'sÌAt2ÑÉD'sÌAtò=D'_¸B™€èäßÞÔMýþ[þÿÍíCþú[Åæ´-® Ïñ¯Xî§}Lý>^GÿOkÇòñwôÒ¶aI#à q7 ·5lÞÔV‘òždîÛòôþí¥¾öE~phò¶yvß”8Úo)ŸòÏÛûcá²r{ÒcÏòéazK»ƒjXûÅʧ°Ž‘' È]±hMéѤÆr°„€d¯/úí.}Ëæ·¿Ÿ ©nýv·ñ´¤é!-ÁßnÇä³ýíïô­OG°òb$¥†€¼ÙÉ/÷©k4&Ÿtk œ¼:¼A‹Æä¥i?8º)”åÐGcò-oöUæäÕþölŽ>5DÿÉŸ\ĕǧµÌòuˆNr““£‚ÉDܹaX¼Ûm-†Ša"®l¶Þrrq¦Þ²×Îí6@îp&{´1%À™Ägq&WN"HAò¿ßžÛñ4"®N8¹G\9q3QÄsØà¾Ûˆû±kÞ´¦ŽÇ ºï~`ÙÜwq{ßÐ}7wT´æ¾›ÖTÑ Ý÷ê^eí#®p§+g-ÿ–Q{ò¼eªM"Jr·1Åtw¬ÑÏG0wÿ*‹¨ãA½ƒ£{¤‡Ùe,=¢!y¶©c >²-éÌþ€ü]sœ]× =ÒÙÙȻߪ¤oç¼LŠîÓ·ú^u΂818@ž]#;ÄQ1lྻ)cÓéÑË š‰÷9yGÏh"Ž8‡‘?ÓL<° Î-€›A" â,-" ¢Ÿ)q,—ýóäg âÈ™&&‡DÄñ¨Ì‘qÔèèn”,«£dǃºlÈógcl¶ $ œ¼{ÎïfÑZ "m“C" ¢˜×„µ ..߀h.´ ¼|Á‚8;$oî¾Ç£dçîËäÝ-íYÍWºVîž´9(UÃQ2y6Jö3 4ɃQ²ß Æ:Ë?,ˆßžhÐ[rn¯‹åÃÕ29jˆJ9Ë wvë*ÒC–‘ç[ê¸íÈÝ;®­©ã18yÓš:·Üæ`Ê^ÎP€ònû#«HYGzœ÷}+È]nc¦rÞOÚ± ºï®›JŽÚ±rdFPn;[ºŠô{¤‡\Œ’ɳQ2qýQÄi¯ÇÏÒY’]%“õQ²ãé_z ÷W¾…¦_GGŸFɆDWŽ·Ïr;ܱµ´6J&FÉŽ ßGr×ɶ; Ìoßáѽé§Q/ùì î ä~”L×FÉäÑ(™H ÷îM‹M?xôÉô“…ˆë¨Žƒ£d.âÆÓΉ¯ã蜸:n‡u܈;'¾ŽK°Ž Wéê¸ë¸:'¶ŽË°Ž sâê¸ ë¸vN¦:N`7ÂÎÉTÇ ¬ãFÜ9quœëœø:n Î‰©ã, uªãèUÚ:Î"=¦:nÄWÇÙÎÉ'HFb¤ÇR7PÄA¤ÇÏ4…÷¤s2íqçÄåó;Ìçåó;Ìç½äó;ÌçæóïŒú¨KàÉ»áM{òfs†ÈØ€|ø:.Þ<»äÝ•9ޱΕ•OÛfm_¹ïiGuܾrß ÕÕqi徻Ή«ãÒÊ}Oùq÷’?Þü™FŸtN¦:î%ÿ„¡º:.£:ÎÉÕq‚ê8/GuÜ%ÒC–‘uœ—ƒ:îÝ9™ë8'WPǽ;'sçå Ž»FzÈ:Òc®ã¼Ôq¦s2ÕqNÞ@g:'Sçå Ž»FzÈ=ÒC.†7åÙ𦋸LÕq)Suœ“?¯ã¼üqgå_Ôq^þ¸Žsòçuœ—?®ãœüyçåë8'^Çyùã:ÎÉŸ×q/ù“áMqò$âú8§ï-Aˆ;ªÑŽ"¥§*±Üoî]Úgĵ­¤V;°DÎï*òqgÀ•’C¹‰¸sÑiÇèŠ-ļÜAâMx[%¾t$Œ¸ãåÕÉ-T#Þ„·¢–XžÒ#Ü„wäÃ-ßî"1›ág"ñ訙{µ@‘æF%Œ¸ßMt%ˆ¸ãÝ5øíÅýö½.Dœ9“§.âÊ£ˆ;÷'äiúR"Éyˆk½—XîÆ¥SªqÄíÉmÄÙM·.â,ÍÔÊ}ĵRˆ“:ÜáLö".Ç—nЏ–AÄíHî"ÎÌzûˆÓË}Ä•xX[k¿}¢¡q`ÙÌÃÚD\Erq’QÄß>EÜÂÌIÂ3'eeæ¤þΛ>Ø„·ÉL,!šQãMxÍÕïNnë8W¿‹ÃÐN4”ÕqÅ=ÅVЂŽî¼iðs ÈMf•sì€ç¡8y뀗;àÉO:9¹™tjfÒÉÖq—ÎÖqîÒ™ŽY>a›@žm ÛB¼ží¤Xn;fckÀ¯“^B\b¼žË1–»:ÎM[— ¼<„©Ø¦¶•ˆ³x9^s³üÓ?^°ÑîŠó‹©Icùðn‘>5ܼ¼ƒ†Û%L¥¬ÃTþõ÷;gwŒhGQÏ'˜"–'7&_#Μì›*’Û®Ñ(‹0•ò¦r6­FòFÚwܱhÀ}÷u\îá†$ñJ'wøá}¦Rîa*åÂ/a*Ùs) ç€Î/œ^8¼pxáðÂ9à…sÀ ç€Î/œ^8¼ÜwNÊ…^ÂTLÄæByâÇùìâ%ÿðã\v±ÃìÂÉQv±ÃìÂËAv±ÃìÂÉavaü8ÍðäíÓ&Û“·~Ü^6 ·O›¢ÀËiòãJäÇÌ•ÐÛíD«•;?®Ø‰Ö}å¾[?Îg•ûÊ}w~œË*ÓÊ}÷~œÄ~¾ïÞ[Ê*_òG0qéY7e•/ù§ç²ÊŒ²J'”U Ê*½e•—0•²S™³J/Y¥©ã¦¬ÒÉd•IQVéå «¼†©”0•)«ôrUÚ:Îg•NÞ@V願‚î{Yå5L¥ÜÃTÊ…WÂT²gr<©ã´Ÿt†YþYÇéÖÇÏL¥¬ï’?³J™L¥0«L&5òY%:úS‰ÐËG¸w÷%– ²J1͇k˜JyS9ÓùŽî²ÊšrœU£»¬ÒÝâKçÝ8âÎ/©$$·ò_tº¹Çrï´˜•®%ƒßîQ.1ã$S€;Ð; HÞµáÝ~»wÌ^`q‚"“`²÷&žDœnU'œI‰H0Gš;àµMÆJqÞÂ6×÷‚äÝ>Ñ4vÀ‹¦Ê}Ä•;àG†Šä$³¼k|馈+ÀŸ±8â¬#æ#n/±ÜGÜxðÛ=‡¦",›)⬅í"NÜE\Ex¿}Џ•w\A‡16¶W™›K뛳8­³ücs~ ê]üÞÅò)£ŽÜ}ëh•hô ˆGw݃jŽn06Ò»A·r‹±9òîÕïš]ƒÝÊmý®nï¿¢ŽÙ?y »ùYâÛ(Ç·QŽo£ßF9¾r|åø6Êñm”ãÛ(Ç·QŽo£ßF9¾Þóm`Ä ˆ¸u¾r|åø6Êñm”ãÛ(Ç·QŽo£ßF9¾r|åø6Êñm”ãÛè=ßF\á"NW"î’o£ßF9¾r|åø6Êñm”ãÛ(Ç·QŽo£ßF9¾r|½çÛÀˆS˜U®òm”ãÛ(Ç·QŽo£ßF9¾r|åø6Êñm”ãÛ(Ç·QŽo£ßFïù6z1ݧßF9¾r|åø6Êñm”ãÛ(Ç·QŽo£ßF9¾r|åø6Êñmôžo£Ó}Êñm”›îSnºO¹é>å¦û”›îSnºO¹é>å¦û”›îSnºO¹é>å¦ûô~ºO/¦û”ãÛ(Ç·QŽo£ßF9¾r|åø6Êñm”ãÛ(Ç·QŽo£ßF9¾Þóm`Ä qË|åø6Êñm”ãÛ(Ç·QŽo£ßF9¾r|åø6Êñm”ãÛ(Ç·Ñ{¾^ÌÓ*Ç·QŽo£ßF9¾r|åø6Êñm”ãÛ(Ç·QŽo£ßF9¾r|½çÛèÅ<­r|åø6Êñm”ãÛ(Ç·QŽo£ßF9¾r|åø6Êñm”ãÛ(Ç·!긄fNÖù6Êñm”ãÛ(Ç·QŽo£ßF9¾r|åø6Êñm”ãÛ(Ç·QŽo£÷|½˜§UŽo£ßF9¾r|åø6Êñm”ãÛ(Ç·QŽo£ßF9¾r|åø6zÏ·Ñ‹yZåø6•ãÛTŽoS9¾Måø6•ãÛTŽoS9¾Måø6•ãÛTŽoS9¾Måø6õžoS/ðÊñm*Ç·©ߦr|›Êñm*Ç·©ߦr|›Êñm*Ç·©ߦr|›Êñmê=ߦ^8à•ãÛTίœ^9¼rxåðÊ9à•sÀ+ç€Wίœ^9¼rx½ïœÔ ¼r|›Êñm*Ç·©ߦr|›Êñm*Ç·©ߦr|›Êñm*Ç·©ߦr|›zÏ·©~\åø6•ãÛTŽoS9¾Måø6•ãÛTŽoS9¾Måø6•ãÛTŽoS9¾Måø6õžoS/ü¸Êñm*Ç·©ߦr|›Êñm*Ç·©ߦr|›Êñm*Ç·©ߦr|›Êñmê=ߦ^øq•ãÛTŽoS9¾Måø6•ãÛTŽoS9¾Måø6•ãÛTŽoS9¾Måø6•ãÛÔ{¾M½ðã*Ç·©ߦr|›Êñm*Ç·©ߦr|›Êñm*Ç·©ߦr|›Êñm*Ç·©÷|›záÇUŽoÓžðmd«vSç?ù'ßf+»F½‹Ÿ£@r?á6‚/¸IíG(ù›oSö³¯túÙ¿å¶{p¬®aê÷7ßæ|Ë¥Xnø62¶ÖïGBÞF,Ï®{ )èœ|›ÆñmÇ·iߦq|›ÆñmÇ·iߦq|›ÆñmÇ·iߦq|›ÆñmÚ=ßFœ€ˆ[çÛ4ŽoÓ8¾Mãø6ãÛ4ŽoÓ8¾Mãø6ãÛ4ŽoÓ8¾Mãø6ãÛ´{¾ Œ¸ÂEœ®DÜ%ߦq|›ÆñmÇ·iߦq|›¶Ì·ù¯÷tF2Å·iߦq|›ÆñmÇ·i|›˜\ó!¿âkƦq›Æal‡±iƦq›Æal‡±iƦq›Æal‡±i÷›v1Ä×8ŒMã06ÃØ4cÓ8ŒMã06ÃØ4cÓ8ŒMã06ÃØ4cÓ8ŒM»ÇØ´‹!¾Æal7Ä׸!¾Æ ñ5nˆ¯qC|âkÜ_ã†ø7Ä׸!¾Æ ñ5nˆ¯Ýñµ‹!¾Æal‡±iƦq›Æal‡±iƦq›Æal‡±iƦq›ÆalÚ=ÆFÜ@·Œ±iƦq›Æal‡±iƦq›öcó_?ªÈ ä_al‡±iƦq›ÆalÚÆ&ˆýßÓjG«i­¦q´šÆÑjG«i­¦q´šÆÑjG«i­¦q´šÆÑjÚ=­¦]LÇ6ŽVÓ8ZMãh5£Õ4ŽVÓ8ZMãh5£Õ4ŽVÓ8ZMãh5£Õ4ŽVC”k M¬ÓjG«i­¦q´šÆÑjG«i­¦q´šÆÑjG«i­¦q´šÆÑjÚ=­¦]LÇ6ŽVÓ8ZMãh5£Õ4ŽVÓ8ZMãh5£Õ4ŽVÓ8ZMãh5£Õ4ŽVÓîi5íb:¶q´šÎÑj:G«é­¦s´šÎÑj:G«é­¦s´šÎÑj:G«é­¦s´š~O«éFwçh5£ÕtŽVÓ9ZMçh5£ÕtŽVÓ9ZMçh5£ÕtŽVÓ9ZMçh5ýžVÓ/ŒîÎÑj:gtwÎèîœÑÝ9£»sFwçŒîÎÝ3º;gtwÎèîœÑÝ9£»ßwNú…ÑÝ9ZMçh5£ÕtŽVÓ9ZMçh5£ÕtŽVÓƒÕ1zÚúÏ­¦s´šÎÑj:G«é­¦_Ðjl·¾¥é”¦sPšÎAi:¥é”¦sPšÎAi:¥é”¦sPšÎAi:¥é÷Pš~a»uJÓ9(Mç 4ƒÒtJÓ9(Mç 4ƒÒtJÓ9(Mç 4ƒÒtJÓï¡4ýÂv딦sPšÎAi:¥é”¦sPšÎAi:¥é”¦sPšÎAi:¥é”¦ßCiú…íÖ9(Mç 4ƒÒtJÓ9(Mç 4ƒÒtJÓ9(Mç 4ƒÒtJÓ9(M¿‡Òô Û­sPšq¥îŸÕYþÙc8Óˆ LÿOÏò?”»2]Íl®­tJI[,wì£ØŒ+Ý=¸B¶a-+Wh·)ÌQSÎòÍÎÓµ›ŽÕeÞ^î(HƒØÁÑ]/@FP9þ?:y·+-G8‡_–:y›ýÕnNþ/2й:ùwdœÓÝ#Únpœ¼æËÕMQ´l78Þu·Œ`»Áñ· ¾å¯P>fëàèïBYβªF‘ñI@Ïx nÑ–§‹69*@‹Ö°g좭U wO.Á¢•zýÆòl;vŒaœU$8º[´RêO:·6UðÛí¢ív{ÑߢճXÜ{,7‹6ƒEû3ñJ¼hÏ^´hϦºò®»c¯¼š+_6tåMw'Ë–û¢-Ü¢Õ•Ek!"[êe–BD6û"­¶Ò•‰A2¢f½ƒÇ4{åÝõ–zŠ "¹n½ywkÞ¬ºnaQ6óõrÊ2÷Ý4ëxbŒ¨YîÛûlÖŸ¨AG7‘sÄ'Dä¿z,§±Ç¿ÝdGÈ´÷Ęƒˆœ¹3ûGšõŸì™5ëífFÛ¬n›õÝ=™ûÞ7pßm s\¢ßû¾YHaêB`™fý9C»È?šõÇÚÁlU:ª²ª@nŸÇ¥—¨YßN¦`òn®C2¶µ¡°]ÈÝ–G+7ëó‰[Ê@nk¼«qÓ¬¯ùøñ@î(lCúg³>÷ciæäݶäUð÷8¿”›Ç¹—¿¨uÓÒÀ«ö¾ïDäx‘ö™=3¢=2%‡³Uõ×ÁrÇA“¨Y%ï{,¿x•Uð*»˜­š¦\Ɠ٪Ÿ4Ú6ˈÈñ슚õ¥mMcù@ÛþÌã<ûYJ'··‡‘tä@îf«ìvOÓ¬ÿ9ÖÀÄ_Q³þ8~ûld\¼Ÿ­ÚˆH:éjðäßóô»´?ÇšÏðè¶YoCÆ6ëÏÍÏ È3KËKW^Е·™/>y›ùº“Soxt׬wØžq1[5ÎV%?$ó â´ÉÖR›åÁlUïDÜ m,˽=¦Ñ4c?›@àèn¶ªìD\Ù$M#:#´Ç²Ñù»t"rðÈí&cã4dË»l›Ù'âä>2ûDÞ TÙªVptW,f‰Z‡ùj+±ÜÛc¹Æ³UóXÚ³UÛccÄ÷}¶ÇÂiÆãÜÁѧÙ* í±#Ñ÷}²ÇÚBÄuT®áÙ*qc©Ç˵aІ•k;,×FÜ¢ðåZ‚åÚˆ[¾\K°\°Eaʵ Ë5'GåZ†åÚˆ;¾\X®°Ã1•k«îžÍ‡X^@¹æ "¾\srP®ÙÉ'{&l8öŒÂrm€‰-×Lƒd.×lÈJWo ˆƒ7ö´?kLùüKþÑ qï÷æóNŽòùæó^òùæóNóùwF==í¨AbÆžLƒ¤ž}t wX¾1¢iÆ<’›ÚÃÉùP²“Cÿ?úm? åÎ&±rÓ ¹¸ïiGuܾrßmƒÄ×qiå¾§„긴rßmƒäÿò…iÆûIJÏ$S¹ö’[®eT®9¹ rMP¹æå¨\T48yEƒÛ|æÊ5/åÚ»Aryò ʵ¿ÉG¹æå \{7HæŠÇÉëŽ:¨\órP®™iÆ«+ßЕomåä(×Lƒd*ל¼?.×^òGÓŒÉÓ ˆr-eª\sòçåš—?.׬ü‹rÍË—kNþ¼\óòÇåš“?/×¼üq¹æäÏË5/\®9ùórí%4Íh#NžD\ïgÄŒyÑ=Ø|&mÛçyÂñ i0CDë‘=ª=‹íÐ’ÜR¸ù,ŸÓñɯ" &ˆÈà "ãD¤´¤@î!"áæ³ã·wðÛ‘ üöï "ã"2.¦ÇÃiF{éÊ£w\ocµÎòwœl*%ޏyž0Ž83Ox Dd¬CDΈk-¹otq{|òͯ\CD "gÈU$÷Ÿê(âÀoŸ"®þ,AD÷‘q1Í8N3:£û·<^®ãêñöÒù§Ñ=ìÞ¨·Ñ]ŽˆÛܰ}ÜdDFw¿O×É»YºGF÷•¼ì@nŒîãÇÛAP'·O›Ñ"£ûØ#0c¹Z«YFdtë‘ÛïF9y7Óræ5aŒî+¹¶³òw§[oÜ8Ûë-‚ˆ¤óiÓ€¼f×y\º”ÜšüÒ£:îJÞw ?‚?Œîß?{öµ cþ´•ˆóFwÙfydt×Èè>bÎÍ[ùØýrPÇ¥“‡äþ-!D$7|cäÓ×2 0ºý—B¬ gíÄ>>yWÇÙ“¿ãŽä¿êäÝ6¢CˆH’“6ËÝ`±ùélt ÷“pÌÅ•t奭œ¼ƒˆ”"’ŽÈý×2ÊJÄ5qW_˰v룈û4ºãˆ[6ºAÄ­ÝqÄ-ÝqÄ-ÝqÄ-Ý âVî8â–î8â–nq«F7ˆ¸U£;ޏe£;Ž8×9¹ˆ¸"îêkÖCXˆ¸f/ù§íf³‹fN޲‹f^²‹fN޲ c»åv>CÜ‚4ìW§ßOõ/)'öèæ%em·z\–äæ7¶ØnWò÷âúoÔã‘ØÛíâ¾;ÛÍe•ûÊ}O e•iå¾[Ûͧ…iå¾[Ûíÿò[ÛíŸü&°Ò³rmJ_òÈv«‘í6%N.(y”n^R–²ús"6B¹›KÞÌkâ¯Aò_.ý¨&<ÿ=ãóù<þlüè‰Oòd[Éýý´ÉêA NnkØ2rÐ 9Òù½£GŠÀ©VÓÑÌCæ'U ßÏqÈü¾ÂIî[¨„ÌIv CæÇÒu½¼»|^Ã9é ±r4­g(ÙzG9™¿MsÈœÁTc¹/B-¬ ¹gÝrÿM̆ÌùEÁPž¼ghjØ÷²ùïxlÈÍoïe Yºo Èmz„F Bæ''7^‘ã9}ˆkJÙ–ÿNžÝ·Pû\Ÿ¯Ÿä¾[ð’ß–¬Ö[žÆÙµå»ÒŽ31”Ýò–làänWZ‰w¥ý~o È VÃO[ÿ¸‰1'ÏèMh¾¡3ü{ØÉm‡Ãd»û²Ãptgõpw~Ù:¸tΔËšn¸q½ ÿú©õxËx\“•¿aÙášÞÛôllßn¾…*[2{âÞ»Ò´ÿ.øí¦ŸZN$h´+må?øíÕ!¡ƒ÷pÀšúý³GØqåYÄå¾ÙZó%"®—0âê¹A4–»ˆ3Eƒ¸|Öq@î"άÃã:XŒ¸p¨6O¾)(âêˆ"îxžî.‹¸V{qåøUàÒ¹ˆËµÄ—2¸t~ Â$ïˆ;+å~û;âÊ~ºæAÄIö¹g #îÈþìØwÄ•#ïà·«Ý45ö”u\ù²ƒßîŒf’Gq…‹8}˜<9„}Ú(HÅn¡µÉ£nÈ}ò¨qòè“EÉ£M |òh“ÅÉcÊju³k^AòXMäê­ã5äÃÎ$y ÷¿=®·Ò&ñ•Ÿ’ǬºÿäxKÙìBãäQëVJ<{«ñowÉãQÕ…Éã‘Z©y÷Y^˜<úìOaòøûSnAYKÉc],ûÂr¨ó,ÿ0¤“kšêÜÑ×c¹xÎ| éóic“{'ïq'Â}ÕbKvuXy¤÷·!ó‘Â(8ycHŸýè«GeQ¤ÅrÇ=¬U> éó‘´pò gûU‹t¼ãR,¯þ5>Cºîç`›û~”n#0¤, M¼)0¤Í!}¦•èÊûjÜ\ùfWÿø¤‘w¿êtáUVÁ«ì”e#®­DÜÿçùHŸ²C”5{òÙüp;$ãÚgÉÒݬÜ-{dNÄ„øwrÛ´-#œÞ:úôI´ôÙ¬—q>Ì«¹ù¾ÀPÑh~øìõ÷Xîgk [CZÝ<¡“;Æ«™'´_µ¨ðèw†´ž/apßßÍú#¬FÍá®´|ÎxÆroHKðI´ó’Ž Žn›õcoáüðÙ€G÷OZ‘…ˆk â.@Yêg)×#î|‰ç]t–Øc'"&Œ¸#ín@>¼1~öóxŠØOö0â~ŽFÜñï¡|Џ=Dœêéí%r³¶D\*¿ˆŒXîì±–5Iœü4?G&i‰/ÝüÂhWÚQ>oÓüpŠ?û æ‡Ç6ÀoŸF@Àg?,ª‡çaQî³Ÿç£ –O¹MYˆ¸ŽÊ5 ʲ7ž5Hέœvj}Ä ’3{,QƒäçÌçc¹<Òå}>ª»ì"•°Aâ˵$®\3¦l;Þ3È]¹V"øY§Ûžâ ’´…üúßk Ž.î·ç5H¦rm€‰sYÞ#žUÎïQ¹)×Ô|+Íâï÷±ptuÐ AYGreò7H~=ÿ A2—k4H^åÚ]Ä q”¥âÆŸ4H¦:î% éºk¿ža,oà{a¶ArŒõò÷¸Arnr éã1mGö¸AâFÞ ’¹ŽórPÇ™I>- wuÛsÐ 9/ü'ï¾Wö5HNx~|é’ÿNœÖ¨A2ÔͧîqƒÄ×q¶Ü'övÐ Iö{ï'íñ¬Ê9¹3@Ì\Û 9ò½øÊûÏ~þ{x,Lìß7HRzÒ ù(×R $S¹–Q¹æä‚Ê5Aåš—£rMP¹æä”k ’rÍËA¹f'ö}¹æä Ê5Ó ™Ê5/åšØ÷åš“WP®ý¿AòY®y9(×ìľ/ל¼ríÝ ™Ë5/åšmørÍÉûãrí%ʲ—©r-eª\sòçåš—?.׬ü‹rÍË—kNþ¼\óòÇåš“?/×¼üq¹æäÏË5/\®9ùórí%ÊR?zý âÆÖónÙr·$*Eãˆ;ò™Ë}ÄÙÒÍELòF¯‡™#…G÷ØsôÿGÜ8YŽ>d$Џ£$s!óN >XS(â,kêq²µÞ+ÛˆK)œøèn~Ø‘®Ò{x&÷Ô<û$âg”Ge%'öÓ£‰}|t<±Ÿ.&öÓCP–¸ò(âÎ;ʯY¼ãdq@>E\AW€¼ƒÑë)ââ£ÏìJ;cn·Ïù¾ãÎÐ(íJ›YSȰ¬)qÓnq½ãÎCG÷ï8éqÄÍûqÄ)œØ7n ”uDœ€·4±Ž'öÓÅÄ~zÊšŒîüÄè>Š™–gù‡Ñ]ÎÏEuÜñ¢˜ËÖq¥£Û Û9¹3{wdt·Ë}v‘#£{O'„ȳ¹B{Œî3#Ï-–;àqo¡Ñ}öCÁÉûü5`t§É©Î¡ÑjdtéË@þ¾ïýX¡Ñ¶V5–›:îüòyltç ]yktŸ¸çØè¶‰™“»:®˜Äìý Œîü”å‰Gyýwr4Æ„,ÊÑ;®‡øÕßû^K,`NÑÕq’÷䮎3÷ÝÝàèS'Á>г”C€<Ûɬ½ÅFw5–»wœî%¬ãJOàäí;îÜdÝðèîgþÿ'íñÿη—y~o":;Àèpò¾Ž«Ñ;N·^;8ºÝy},Tdt££û'­Áàˆk â®@YÞ3ÌœÑ9£;sFwæŒîÌÝ™3º3gtgÎèΜÑ9£;sFwæŒî|ß9ÉFw~ ÊòöK~b»ù¬ò%ÿ°Ý\Vém·$@îl7ƒÈð¶›ÝêåvÕ ¶[œ«ÚnvHGY¥—ƒ¬ÒÚnû‡ù“ÛM^æÏ§ív<\ÁÉÛ§Mµ‡ìӦؤÔʽíf“Òe•^þÿßþß8žÈ†qa7µ•­¹ŸKN¡ív¬ºšÜ~Ÿ¦ °Ý2¸qÞvû÷ÒX°Ýò}`¥GåÚœ<¾äŸ\c—G\ʹ;h—[HXéD\rq­ÆW'Ï0Ž8Ù ˆ8ttq­†·Ï¦_qbM¿KPV~Ê:R›nœ‹¸”‘ÑŽî#Î2‡ò…í–Ÿ‚²°ÆOLD˜h\ˆ¢ÿ¤ÇtpòÑ l©zîÁˆåÃÿö8°ÎûÀêa`}иÂÀ²“é<¶Ý;Ê9 ¬ŸÖÝ.sô^ÀowÇóuÖùAªäŽ Ÿ%ê<~Ò¸¢Àò4.Xÿä1tëg‰³%gK8Ζpœ-á8[Âq¶„ãl ÇÙ޳%gK8Ζpœ-á8[rÏÙ‚' âÖ9[Âq¶„ãl ÇÙ޳%gK8Ζpœ-á8[Âq¶„ãl ÇÙ޳%÷œ-q…‹8}˜U~r¶„ãl ÇÙ޳%gK8Ζpœ-á8[²ÎÙú©el{ò¯8[Âq¶„ãlÉgë.âDÜIãZ›KÀ%€K8—p.á\¸„p àÀ%€K8—p.¹pÉÅ\²p.á\¸„p àÀ%€K8—p.á\¸„p à’{—\Ì% àn.Y¸¹dáæ’…›Kn.Y¸¹dáæ’…›Kn.Y¸¹dáæ’…›K–û¹d¹˜KÀ%€K8—p.á\¸„p àÀ%€K8—p.á\rà‚7PÄ-¸„p àÀ%€K8—p.á\¸dÀ5×q^þ€K8—p.¹pÝDÜKïøY"s GæŽÌ%™K82—pd.áÈ\‘¹„#s GæŽÌ%™K82—Ü“¹äb‹€pd.áÈ\‘¹„#s GæŽÌ%™K82—pd.áÈ\‘¹„#s Gæ"긄fNÖÉ\‘¹„#s GæŽÌ%™K82—pd.áÈ\‘¹„#s GæŽÌ%÷d.¹Ø" ™K82—pd.áÈ\‘¹„#s GæŽÌ%™K82—pd.áÈ\‘¹äžÌ%[„#sŽÌU82WáÈ\…#sŽÌU82WáÈ\…#sŽÌU82WáÈ\…#s•{2W¹pÀ Gæ*™«pd®Â‘¹ Gæ*™«pd®Â‘¹ Gæ*™«pd®Â‘¹ Gæ*÷d®rဎÌU8¼pxáðÂ9à…sÀ ç€Î/œ^8¼pxáðÂ9àå¾sR.𑹠Gæ*™«pd®Â‘¹ Gæ*™«pd®Â‘¹ Gæ*ç³ÊK2WáÈ\…#s• 2×MĽäOü¸ÙU8dWá]…CvÙU8dWá]…CvÙU8dWá]…CvÙUî‘]åÂ+²«pÈ®Â!» ‡ì*²«pÈ®Â!» ‡ì*²«pÈ®Â!» ‡ì*²«Ü#»Ê…W8dWá]…CvÙU8dWá]…CvÙU8dWá]…CvÙU8dW¹Gv• ?®pÈ®Â!» ‡ì*²«pÈ®Â!» ‡ì*²«pÈ®Â!» ‡ì*²«pÈ®rì*~\á]údøïçYþ¹ü¼ÃQçä*ͱÜçó)ìœ|r§4ÚîÐÙåöþ[¹ÏçÍð¿Ù~nŒDòì®\ÿ‰ÈBy«%–?[XƒÎÉ9®àÊçE–°srNHÇGŸ]#êœüÔ²ƒßn;'?½mtNŽHØÐÑÍÓ&O«tNôl}T ïv†Ün!fü>ptó´)ñosjØ«|Éï‘]úÙµ—Y!»4Fve·¯%ÃÀÊq`}p§ô!\AÁɯÀÎÕÑÜ•,)Fv)¼tmHrp…™v¦á àä—à ú+‹«Y¨† ¬ÔÝf¬ ë,Ë‚Àú…á w÷. á Y݆¤Ö9c럜Av)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—Þ#»`Ä ˆ¸ud—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cvé=² F\á"Nf•ŸÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cvé=² Fœ‚ˆ[Gv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—Þ#»ôb`Y9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cvé=²K/–•Cv)7°¬ÜÀ²rËÊ ,+7°¬ÜÀ²rËÊ ,+7°¬ÜÀ²rËÊ ,ëýÀ²^ ,+‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.½GvÁˆ(â–‘]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥÷È.½Ø" ²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»ôÙ¥[”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9dQÇ%4s²ŽìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.½GvéÅå]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥÷È.½Ø" ²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«Þ#»ê…^9dWå]•CvUÙU9dWå]•CvUÙU9dWå]•CvUÙU9dW½GvÕ ¼rÈ®Ê9à•sÀ+ç€Wίœ^9¼rxåðÊ9à•sÀ+ç€Wί÷“zá€WÙU9dWå]•CvUÙU9dWå]•CvUÙU9dWå]•CvUÙUï‘]õ«²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«Þ#»ê…W9dWå]•CvUÙU9dWå]•CvUÙU9dWå]•CvUÙU9dW½GvÕ ?®rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®zìª~\å]•CvUÙU9dWå]•CvUÙU9dWå]•CvUÙU9dWå]õÙU/ü¸Ê!»Ú}礹†Lžå¯¿åœ;Ь6QŸØKòVíª3å¿cnåZbyGØ„nl£ @r7‚n¡‡Ú\ÀoÕYZý'„fͼ±C³š¹ïÿ?ùÿ²œž÷÷c¶l¦õ‘þN^g¥Æ'ÿ/ük]”¨ùõlÉÄò¼ûAu´ê<èѪ;gRë,V]6êŽ>b¹]uë@ªv0)ñ‰šòîvôhÕ}¥ÂU·N”j÷{ÿß«îˆEò÷Éw»_Ƭº ­ºH¨v„жåïŸ7îfmÊÊÚ4ò¼•‰Ô¢ÝT›Ý]±Û~ªÍ¿œÜ2·Ž_rhä|Ö9b±¸žbÚÁÉgò³»©>±U-ÚMå°Uï÷pIácåb*µ„šz>*¼ûÇn´›*oy'ïÉO#ÚMÕŽ¥YÜîkQ³꯫wbl2:ùwWOƒäˆC3Ž•=ÜÄ¥-”Ínªs'X'ïÈO#z*Dä§öŒCã"®<Œ¸q'fyqfËFÜù í±ÜEœ¦Gœtptq©Æ§;/D\:Ñ—àäÄd¾6âÎ=x5–»ˆ³{¹\ĵ Žî"ÎÆ»¸¹˜Èï#|UˆKy«-ˆ8Íé[DÜöQùޏVN$;Öšæ8âv´ê\Ä¥¥ˆ+\ÄéRþ•ìM(ÈÚÜkãæ^ÛòÜëï„‚Ã÷8â~éÒÑ„ÂñO˽{ÓÛÚÜkãæ^Û£¹×ìZ’=Œ¸ß¹×н9'¥âe3Ͻֵ¹×ÆÍ½¶û¹×v1÷ڞνz ΣÎÉ'¾(윸:n‡u܈;'¾ŽK°Ž sâê¸ë¸:'®ŽË°Ž Wéê¸ ë¸wN|'°Ž sâê8+—®€:Îô*ç:nĽJWÇòÓ\ǰsâë8K~šê¸wN\gÉOS7âÎÉj7PÄ žÂóä§G_ǽäÁ'ŽÌÉÛΉϨ¼ŒÚvN¦±ÙtNœ_ÚPçäÔq¦s2Õq^ê8Û9ñuœ“PÇÙΉ¯ã¼Ôq¶sâë8+÷nmL~šê8/GuÜŽê8'O¨ŽK¨ŽórTÇ¥•U—òã:î%6iîÇ¥tNæ:.¥¸sâ브ê8'TÇ ªã¼Õq‚ê8'/ Ž3“æSçå ŽsWÇ9¹‚:ÎtN¦:ÎËAg;'¾Žsò 긿ÎÉGçå Ž3“©Žsòê¸wçd®ã¼Ôq¦s2ÕqNÞ×q/ù³Is?.MÔq)Suœ“?¯ã¼ü+òQÇyùã:ÎÉŸ×q^þù‰¨ã¼üqçäÏë8/ÿŠüDÔq/ù³Is?qÜͽÖ6Mš‡½Ê£~‰&ͧÃÔIqç’oν–Ñ‘ÜshôsTü(EÚ<*ÞÂ-¿5?ÍûÖ'sò-E[~ÏOa)”›“?Þ—{©¹ê4ëÝböR<ëý³ÍÔ«pÍÛg]ó[š‡ôÃn¡Û"€-Û¸Öö𤇋¶NÃÚñ¢•xXûwÙÆòé5‘Â×Ĺj¼ß=çÇñ v»èJüœ?«ôhÚú\¶vÍøœÑŽ¢ße›€Ü?ëF¼hK‰û„/ŠÇ¥ÏE[c¹€Gå¼h3£4^´xò¡¬L>Ôß±Å>ìî:fÿäŸ>¬ýšhò¼ðäÞèÀ‡ÍÄó‡ø°3¾¨‡Õ„ÅVt›ØK=¨&Ž+”C¶ya‹å¦š8²€ú°õÈ™ÀÉ«Ý-½§Ð‡ýÄõ°š°;Åí·ÎªnHn؇=?Ù¨±ÜTrüö˜?ôaa÷ȇuv[Zu­º÷4oàÃö‡_àÉþ+4ýÁk"Ÿg¥³<¨&*ôa{Žå|ܾ&~Nûo^5à£O>l𞓺 î[gNn~ûØâ]t=mÓ7pzô–É[øž‰îå€î}Ø„ŽžÑ÷þž´åXr Üwó’:ÎQBöÈYŽF,wÕ„lQfuðûŽî'GÈ:2¦ Ž^7G\wñžìý¸Îù°óa;çÃv·íœÛ9¶s>lç|ØÎù°óa;çÃv·í÷õ{¿ðaûÃ/ðLŸVè\!—U¾äÑ—TãyZÿ~wòÞïÞš­ºBöká e•NÞAVi]!ŸUz9È*­+ä³J' «´®Ï*½d•ÖòY¥•{W(æMY¥—£¬rGY¥“'”U&”Uz9Ê*Óʪ›¾¤º’U¾ä¾’ý71žÔqSVù’Öq.«Ì(«trAY¥ ¬ÒËQV)(«tò‚¾FRPVéå «t®Ë*\AVé]¡œÁÉ+ú ¢¬ÒÉ+úIEY¥—ƒ¬Òò‡|Véä d•¦Ž›²J/Y¥«ãöùk$=ž§]É*_òGßÉÞx˜Uî“;Ð(£¬²Äò¾|Éê¨?áùâ^îøCµÇYeÎàèž?ÔbŽì¨sü¡þˆ?t„8úÄ* «ìñ²™²Êðë¨sü¡~Ïê®Pø=ì16ýYƒ½Lß…è1¨‡·å2Ù:=¦¡$E ö侎“¨Á®Ûh)”O!“ÇgÈœýõ½Å'ï@°ÎÖ±!ÓrBrWˆõØÒÚr,÷ C™ì%– xÖM öÞÜ?ëV3A‹R#ûöþÃE›'L¼h[«Èê±|zMd´h+÷»çüHG®šã£{´õëŽe«ñѳÿ’ª±u¼+”2ûg]méà·OZ™àè•ó¢-@Ž^ÐxÑ´hñW)²§¡Œ'<’æîûKþÉ#9)Ã?Äop³rÇ#1Õ„/ÀEÜel›Gr,Ú¬Èm <Ì8®å‘ämbðŒG²™™R×!o{,Ÿ(8#°°ë8j‘TüïäÇñ»ÙªïD¿oèè†Gr$`¥%°ñ^€Ü¤FG>­Qý>7^ò{VΣµy¼IKŸå+®Íä~mæx³õ+gWݽùó+¿%ß<*×>É7q¹¶L¾‰Ëµeò (×VÉ7 \[%ß„åÚ:ù&,×ÖÉ7a¹¶N¾åÚ*ù&*×oÂrm|—kË䛸\[K_r‚|ó4yœÈ7 y\%ßÀäq|ƒ’ÇEò L×È7aò¸N¾Éã*ù$«ä<®’oâäq™|ƒ’ÇEò JÉ70yì —QÄ­’oEÜ'ù&Œ¸uòMqëäX®­‘oPÈ,’oÂY'ß zk‘|®ùuòM¼æ—É7áš÷ä¼h-ÚUòÍÓE;‘oÀ¢]%ßÀ×Äù.Ú5òM¸h×É7ñs~™|Úr«ä›xÑ.“oà¢]#ßÀE[mA‹v•|“ÒºH=2®:ËòM7³¹†.’ý®s+·t‘£(‹ëì“ÜËè"ÿv5¹­t›©³ ]¤ømãVné"V0ÜÉ÷X¾@©éLn2ÿ|?’ û‚Ö¿œ´ž„Xþ¦‹ä#ç7“Á¦Ò-Ù U[¹­tÕù' õ–^ò[òͳµù;‹9Ë?׿IˆÖæ<&^›sE¾y´6ÿmòîg¯£µyvår,÷ä›ÞVÈ7OÖæIâ(àÊ[òÍOÛ7ý ¨L½n)>yK¾É»ÝÄzE¾‰×f^[›ÿäùfaÑ^‘oÞ7î+òÍ[þùÆÈ¿!ß¼å_‘oŒüòÍ[þùÆÈ¿!ß¼å_‘oŒüòÍ[þùÆÈ¿!ߘ'-"ßàˆqËä›g÷A¾·J¾·J¾A·H¾yqŸä›0âÖÉ7 âVÉ7 âVÉ7O". ßD÷€|EÜòMqëäqi)â qº”˜]oÌÉC¾1‰Ù7ä#ÿ†|ƒòºEò‘C¾1yÝ7ä#ÿ†|ƒÒÂEò‘ß“oæ­”VþùÆÈ¿!ß ¬²­DœÂ¬RWpu!â.‘8æä¿Aâ¼å_!qŒü$Î[þÇÈ¿Aâ¼å_!qŒü$Î[þÇÈ¿Aâ¼å_!qŒü$Î[‘88â*ˆ¸e$ÎBÄ]!qÌɃÄyË¿Bâù7Hœ?ùwH#ÿ‰ó–…Ä1òo8oùWH#ÿ‰ó–…Ä1òo8o9Dâàˆk â–‘8O".šÑLÜŒfâf47£™¸ÍÄÍh&nF3q3š‰›ÑLÜŒfâf47£™îg4ÓÅŒf¢8Ï:'Hœ¸s²ŒÄ ;'ëHœ¸s²ŒÄ‰;'ËHœ¸W¹ŒÄ ;'ëHœ¸s²ŒÄ‰;'ËHœ°W¹ŽÄ‰:'8açd‰vNVë¸"n‰ó¬sòĉ;'ËHÐ9YEâÄ“e$NÜ9YFâÄ“e$NÜ9YFâÄ“e$NÜ9YF℀ęë8'ÿ ‰wN–‘8qçd­Ž{ÉŸ|(tbå<霬œ°s²ÎÊA“EVNØ9Ygå ÎÉ"+'윬³râÎÉ2+tNVY9¨s²Èʉ:'X9qçd™•vNÖY9qçd­Ž{É VSÇ¥LÕqNþ+‡©ã¬ü;VSÇ9ùW¬¦Žsò¯X9Lçä_±r˜:ÎÉŸ×q Íœ,³rEÜ'+'îU.³r¢ˆ{Àʉ"î+' ™¬œ(d°r¢yÀÊ ×ü:+'^óˬœ¸[èX9xѱUVÎÓE;±rÀ¢]eåÀ×Ä+¾&ÖX9ás~•ƒžó‹¬Ð!_eå€E»ÊÊ‹v•m_X´xòa••“9VNæX9™cådŽ•“9VNæX9™cådŽ•“9VNæX9™cådŽ•“ïY9ù‡Í+'s¬œÌ±r2ÇÊÉ+'s¬œÌ±r2ÇÊÉ+'s¬œÌ±r2ÇÊÉ+'ß³rò…›9VNæ|ØÌù°™óa3çÃf·͜›96s>læ|ØÌù°™óa3çÃæûú=_ø°™cådŽ•“9VNæX9™cådŽ•“9VNæX9™cådŽ•“9VN\!ŸU^²r2ÇÊɬœ›ˆ{ÉŸ¸B3D'sÌAt2ÑÉD'sÌAt2ÑÉD'sÌAt2ÑÉD'ßCtò…+”9ˆNæ :™ƒèd¢“9ˆNæ :™ƒèd¢“9ˆNæ :™ƒèd¢“9ˆN¾‡èä W(sÌAt2ÑÉD'sÌAt2ÑÉD'sÌAtò=D'_¸B™ƒèd¢“9ˆNæ :™ƒèd¢“9ˆNæ :™ƒèd¢“ï!:ùÂÊDGnë÷ߪè/+ :ò÷·Š›£F¤‘‰‚#·¤‘ñ>ú‘V¶ËGq“Ì1*äc#·¨$¾×5²òTÞoñ}ÓõñÉ¡‘+Mdç%ÇúxvãŽÜêCþyãΞW|ãŽUËÝûÙRtã~¤l9–ÛwæFñ;r£Pîoܱ¶?oÜqçN„P,OæèÇý ËÿóÎyöðg¡˜'ÂŒÜß^Y¹½V¾%é³< Cì`Ã6jåS77Üß}?ÕÉ{ÜOµûÊV8ºóOÄ=Ûßž’g0¬móîmHŽåâ'Ãý ¥lèämÞm³~»¿¡oÝåÝͽXMêàè¶Ãq<´£ý ùXñ;8ºZ6ƒ–hC­cCWÞt8´Û%Ž$òAÁ‘Ïý GYd(8.¬?X,ò” ‘XâaÄi-³<Š8‰X,ç8­5 Џd06Ý/›G\:)EqÄirïXæ–‰¸ä²?/w¿½E,–$Gœɼ#®—]yqÇâ2WÞDÜ'D'Ž8 Ñ1³!y+;øí.âÚX,?rv8ÀÑ]ĉ9ú_ÄÕv¤_;’ÿýö"[6wOqŒ“ñËMOñ—”¸q…‹8]‰¸š|¿n–;Š~Ì&<ÓÑÌýÈ*cysÝܲX~ó: w;KFÌbÉ3Ld¾áŽ¢ße›ÜÿöÐ;R©³r[,ÇØ3ï÷äÞqNîÞï=f±œÍ‹P>åÝæ9o—ͱê‘<»!è“s¥µmró¤-ÉÝ̆´±õ äæI«fÿ¢Ëú«£*H˶¯¼ãDÜ‹%¹&y2x®º6ËËIœm¡œÆ4J&¡wôcL?¿st‚©HäÙqÞ‘wé­¼€ZÓxG?U¶]ÜÏ„ÞQÊõóÊzGçk*šÔ}+àäÕEœ™TçXVpôêý“̦3¯¿ÝÍn9ôŽDÆäÎ¥·LMû¤Ý:w÷6È‘wô›VÆr?¸ëBÄUqW,ôg3€®–iöä]>oÖüû9<„RÑXî:Ù]£NöQÅÕŽä¶5%i‘Å"ë,–<Ú‰^r»‡O%š4?^u—Xîè†ÿ~ðÜS<²ƒ¡ÈcYÒÏ‹E–Y,Çš»KNœÜEÜølIoÁ³„oœiIž‹°XäðBy·ñ*‹EîY,r1(OY,É 4=‰¸`ŸóEœÙ p=(fEº¹o·Ø­EGŸÝÚÀz:ŠúãÕ©@îfU×fåÁ à‘W7È[;$tk<ºŸ4G7¹Œä9nˆ^ÏÊ“À“'ZÜ;%œº=žbàèÍàˆë¨Ž»`±$–xÖ9ñuÜWÇí°Ž sâê¸ë¸z•? W9ÕqtN\—a7@çÄÕqÖqtN\'°Ž W™@¯rªãèœØ:Îö*§:n€Î‰­ãLçd®ãFÜ9quœéUÎu܈{•®Ž³,–©ŽqçdµŽ(â.X,þs{;'¶Ž{ÉÃΉD_Ç9yuœ£Øº:ÎËA7Ql8:þ:ªã¼Ôq¶sâë8' Ž³_Çy9¨ãlçÄ×qV>SlGÐ9™ê8/GuÜŽê8'O¨ŽK¨ŽórTÇ%TÇ9y~\ǽäÏX,é!Ϧnm—蜸:.£:ÎÉÕq‚ê8/GuÜ%‹EÖY,sçå Ž3“©ŽsruœéœLuœ—ƒ:îšÅ"Ë,–:ÎËA÷×9ù¨ãœ¼:îÝ9™ë8/uÜ5‹EîY,r1u+OY,Éu\ÊTçäÏë8/\ÇYùuœ—?®ãœüyçåë8'^Çyùã:ÎÉŸ×q^þ¸ŽsòçuÜKþŒÅâ'OåÑ£º)<‰#îíñÔí)–û©Û½)b«@îX,æ ûޏ1MžwÊÍ}Ï?îÞHõrqQ¯òxG÷~—8âÜûÝD\;ŸàÈÝÐnîaÄõQ$–O»'[8>™{é@îH0!Tã\òèÒ¹ÜÆ N˜ˆ;UcGrwßG´{òbÙ˜ˆ›– Ž88sr’ñ8“‡WSå!H¦€ˆë=–OsîD\ErwåÍ'5¦ˆË¡|ޏEÜI©CrÇ¡)ÑÎ’#ä¤Ç—nÚY’Jqu ¹Ë¨÷"nšõ×jq¥"¹Ãؘñ‡.¸Òãˆë É»[5DX6SÄI^ˆ8Ô¢„xxÝ&ŒM‰ðd¿BãðŽîûu9tÀµ:&‡“g{âÝ“éÜ´ËS³ÆxÑ-ƒ“·uÜ™€…øqGÀÑ«§Z†¸æ-ƒßnê¸|¦Ô¡¾— ÈmÇìø±žÓ䀗È?·5‡ø¾pôîz•¦{ð„ðò‚³{'´ùq%ôãòãfÄ~_•Œý8—Uz9È*'?®£wUZ?Îg•^²Jçǹ¬ÒÉÈ*­ç³J/Y¥óã\ViåÎsY厲J/GY厲J'O(«L(«ôr”U&”U:y~œU¾ä(8»÷ežÔqSVù’G“Uf”U:¹ ¬RPVéå(«¼¤à”u ΜUz9È*­ç³J'WUz?Îf•^²Êk NY§àÌY¥—ƒ¬ò]ÇÍY¥“7Uš:nÊ*½d•לrOÁ)~\yHÁ™>nð$«<#=ÍòϬÒnñ¿¦à”G‘É—Y¥”UÆGŸ³ÊÀ8ÒJÝ,±;ÇYåùTI?Kœò€‚sîÉLàä]V9 ±Ûe•ðèž‚cŽî²Êºe Ïn`¦ÿ,QpÊ ÎñâpôéIÛAV‰Ž>=ióBÄeqºôŽ“g76-ùCQpb ÈéäX>¹¸ŠäÎ(¸Ê¥Äî@Š(õû‘Tf$·vNNw XžÀûÝ»Z »:Nãˆë½×X>q§Jè$çMHq[–grRèÒyw eàìHîÜ‘;–ÍäØÝyåÂ+>»7VFœ£qfóþq­ÆrqÖÂv'Hî"®"¼—P>G\耗­íHn @f'²¸ÜâKç#ÎYØ6âd ¹¸º¼Oð$qQ¯òˆ¸}d$·!2>âÐ¥ó7€Þ ’Ûûž9à`ÙLg7´– ?®<ä힤06ÍÞÿÉ#þОAïBr,ï€fêøCÅùqVîùC{¼:oµ„òyš7šöiYÝ×D­Ü`lF·³…fÍŸû&ÀÑÍš?[KæèŠ:f/ù=¥èÑíMê¾t›áím1 9»ý Þ^3inn¯$GhÊàöŠá½ºÛ[ÜâÊðö†8“#¦ÝÒÎñííþk¯fx3¹ÍÜÞd¿Y‚oï?yÌ2úYÂ)‡/R_¤¾H9|‘rø"åðEÊá‹”Ã)‡/R_¤¾H9|‘Þã‹`Ä Š¸e|‘rø"åðEÊá‹”Ã)‡/R_¤¾H9|‘rø"åðEÊá‹”Ãé=¾F\á"NW"î_¤¾H9|‘rø"åðEÊá‹”Ã)‡/R_¤¾H9|‘rø"½ÇÁˆSqëø"åðEÊá‹”Ã)‡/R_¤¾H9|‘rø"åðEÊá‹”Ã)‡/Ò{|‘^ o*‡/R_¤¾H9|‘rø"åðEÊá‹”Ã)‡/R_¤¾H9|‘rø"½ÇéÅð¦rø"å†7•ÞTnxS¹áMå†7•ÞTnxS¹áMå†7•ÞTnxS¹áM½ÞÔ‹áMåðEÊá‹”Ã)‡/R_¤¾H9|‘rø"åðEÊá‹”Ã)‡/R_¤÷ø"qEÜ2¾H9|‘rø"åðEÊá‹”Ã)‡/R_¤¾H9|‘rø"åðEÊá‹ô_¤ãÒÊá‹”Ã)‡/R_¤¾H9|‘rø"åðEÊá‹”Ã)‡/R_¤¾HïñEz1.­¾H9|‘rø"åðEÊá‹”Ã)‡/R_¤¾H9|‘rø"åðEÊወ:.Á™“e|‘rø"åðEÊá‹”Ã)‡/R_¤¾H9|‘rø"åðEÊá‹”Ãé=¾H/Æ¥•Ã)‡/R_¤¾H9|‘rø"åðEÊá‹”Ã)‡/R_¤¾H9|‘Þã‹ôb\Z9|QåðE•ÃU_T9|QåðE•ÃU_T9|QåðE•ÃU_T9|Q½ÇÕ ¼rø¢Êá‹*‡/ª¾¨rø¢Êá‹*‡/ª¾¨rø¢Êá‹*‡/ª¾¨rø¢z/ªxåðE•sÀ+ç€Wίœ^9¼rxåðÊ9à•sÀ+ç€Wίœ^ï;'õ¯¾¨rø¢Êá‹*‡/ª¾¨rø¢Êá‹*‡/ª¾¨rø¢Êá‹*‡/ª¾¨Þã‹ê…W9|QåðE•ÃU_T9|QåðE•ÃU_T9|QåðE•ÃU_T9|Q½ÇÕ ?®rø¢Êá‹*‡/ª¾¨rø¢Êá‹*‡/ª¾¨rø¢Êá‹*‡/ª¾¨rø¢z/ª~\åðE•ÃU_T9|QåðE•ÃU_T9|QåðE•ÃU_T9|QåðEõ_T/ü¸Êá‹*‡/ª¾¨rø¢Êá‹*‡/ª¾¨rø¢Êá‹*‡/ª¾¨rø¢Êá‹ê=¾¨^øq•õ'|›ãýÞê,ÿäÛl#ž%Î~ï¿•» ·lËy´úË ßæŸïQ÷ ?½‡r×=8òóÁ·©Ú\È8ù›oÓÇV- æ¯–Õ› Vþ^óù¼À9èø¢¶„/zt{Sq›32¸½i«ñ&{ÙJŽåSÁÒ©ò˜éG-Æåx›{ÙK-ÖnªvÝr|t‹/:²ëÒ©êîÌÞÞÞ³¶èuáöþ“3ø¢Æá‹‡/j¾¨qø¢Æá‹‡/j¾¨qø¢Æá‹‡/j¾¨qø¢v/‚'(â–ñEÃ5_Ô8|QãðEÃ5_Ô8|QãðEÃ5_Ô8|QãðEí_#®p§+w‰/j¾¨qø¢Æá‹‡/j¾¨qø¢Æá‹‡/j¾¨­ã‹þëyßL3ØË¿Âµ |Q &úßÏh6ŽRÔ8JQã(E£5ŽRÔ8JQã(E£5ŽRÔ8JQã(E£µ{JQ»˜Ñl¥¨q”¢ÆQŠG)j¥¨q”¢ÆQŠG)j¥¨q”¢ÆQŠG)j¥¨ÝSŠÚÅŒfã(E›ÑlÜŒfãf47£Ù¸ÍÆÍh6nF³q3š›ÑlÜŒfãf47£Ùîg4ÛÅŒfã(E£5ŽRÔ8JQã(E£5ŽRÔ8JQã(E£5ŽRÔ8JQã(EížR#n ˆ[¦5ŽRÔ8JQã(E£5ŽRÔ8JQã(E£5ŽRÔ8JQ{@)úïÈæí¼Ú7HPŠÚ¥(žwþßÈ#jŒ¨q0¢ÆÁˆ#jŒ¨q0¢ÆÁˆ#jŒ¨q0¢ÆÁˆÚ=Œ¨] ?7FÔ8Qã`Dƒ5FÔ8Qã`Dƒ5FÔ8Qã`Dƒ5FD”k N,È#jŒ¨q0¢ÆÁˆ#jŒ¨q0¢ÆÁˆ#jŒ¨q0¢ÆÁˆÚ=Œ¨] ?7FÔ8Qã`Dƒ5FÔ8Qã`Dƒ5FÔ8Qã`Dƒ5FÔîaDíbø¹q0¢ÎÁˆ:#ꌨs0¢ÎÁˆ:#ꌨs0¢ÎÁˆ:#ꌨs0¢~#êFwç`DƒuFÔ9Qç`DƒuFÔ9Qç`DƒuFÔ9Qç`DýFÔ/ŒîÎÁˆ:gtwÎèîœÑÝ9£»sFwçŒîÎÝ3º;gtwÎèîœÑÝ9£»ßwNú…ÑÝ9Qç`DƒuFÔ9Qç`DƒuFÔ9Qç`DƒuFÔƒÈ=mýg FÔ/`D ¶[_buŽ9Ô9æPç˜CcuŽ9Ô9æPç˜CcuŽ9Ô9æPç˜Ccõ{æP¿°Ý:Çês¨sÌ¡Î1‡:Çês¨sÌ¡Î1‡:Çês¨sÌ¡Î1‡:Çê÷Ì¡~a»uŽ9Ô9æPç˜CcuŽ9Ô9æPç˜CcuŽ9Ô9æPç˜CcuŽ9Ôï™CýÂvës¨sÌ¡Î1‡:Çês¨sÌ¡Î1‡:Çês¨sÌ¡Î1‡:Çês¨ß3‡ú…íÖ9æÐx¥9Áu–Ì¡=ž î[Í%–w7B2‡Îk?1‡F¥Ùö9tæushM‚|äçJsÈ÷ÝBiòYí}”éÿ¥*çË/–ÿ­ùãúÝ8OZ¸qãÇ™R³Ë?v©¸÷°Ý¥²Gqr—ƒìÆ#7Ïòò Ö¦ÝfrŽ~ÖXîiÉl±1iû6ÆÃÉíÉ÷q8Ž{»pt“¶ÿ¾±‚}"ù(ÛÇv¼YÊç>‘#bŽ$œü»Ã‘Ž¿ÕÆ (èÒ½;-mR"*@€®Ï@nÑ–§‹6é‹Ö@Dì¢!WТ­æqþþíÇ#Á=Ò \´9Üu¼ 'þ X´fc×{Ñžû?Ý.ÚãµÚƒEÛò6 ¸tnÑV³ÑÃÐ_Ž“ïàäý¢5˜®¿E›Ó¦;ºtvÑJ3—î½h÷üÁÝ ­&ËݹX´…[´º²hËrã,\–mÏ¡Ër>kcyóþVL9í9 ÷.KH™á1á‹4Û݈ŽþOÞ·åÌÉw÷Û'É77™MmŽþ"ðèÖeÉöè& ¨m†Ç„Y€šÝˆŽþ"ÛH@î~»i Z²]ÛzüÛËò³ÕhCßQzmÝÒ_š=ú_ÈüWN b‰åæYWƿ݈ ô—…¦.Vr0¯Vê,\–]£ÍMçŒfr£˜ÆeIõ ·½?5Ï$Ã$¸{˜WІâNÐô|½Ümìz÷|Ë’ÅÃ$¬\¼ÏîNúËAö¾tåÕ‚ÌÄ\ù7>ïJ^w 7.Ë~¬-rûÛG‰†âj9^F@ÞlU6Fä²äqüIrsßÇfæLÚX‘Ûª“ãWY¯²«¡8O@\–´Mse¸,aªo}ŽñPœDô—v\¸Žä.Šé/[GG÷.‹Ͳ{Uu›æÊFä²¾¨ç{¤eǃ$–»½ª[Ÿ¨t²$Çrëíµ=¢¿œì?ttO1G7OÚ#¯Ú{—E‚¡¸z^påÅ&Î% ¿¤RÏÞ’÷·:çˆþrœy†G/6u5G¿ˆ¸"îj(ÎO7gCq:f 0'±¯9†ÆòÉ×ÔÐ×ÌÚÁѧ¡¸p õä!¡|ö5[0wÔ[mGr;W 0Éõ|»Æ¿}rY ØÜ´gpt¿Õ¢µ âÊñ#¾t¾ç›Í@ CmÞ×AÄ%ÃtÎÙnÄò‰l—"_SO³ȯ™£žï9§Øk,Ÿ|Í•CGåÚÅPœ§¿ŒgôW® S4ì¨\Ûa¹6â…¯x,×FÜ¢ðåZ‚åÚˆ[¾\Ëiåä3*×2,×FÜáðåšÀrmÄ_® ,×FÜáp嚣¿ørÍÉA¹f$s¹6â‰+×,ýe*×FØ ñåš¡¿èñ¸èà·×Ïrí.âŠ8Á³;~¦îQƒÄ×q/ùgƒÄÖq¶Aâë8'o Ž3 ’©órPǙɕ¼ƒ:Î4H¦:ÎËAg$SçäÔqïÉ\ˆy9¨ãÞ ’+¹mø:nGuœ—£:nGuœ“'TÇ%TÇyy¿+ÄþkÇ·xx¯÷£[kåÑݲ¹«ãÊî²YP–—w“Dd î yÙÜÔqGbÕg{…rhtŸ´e WÛ¢8²–`;áh[FWÞÌ- ÑÀè¾”›ïÄyù»ŽËç^HrK0µD„jš‚Þ±rSÇõ­–Ðè®Ç£¹i-…F÷…ÜÔq^þ~ }ÝçŸÅF·5çËûÙþ‹æ}Ï7ÜÃtnŸ—XîÇ“r‹Êµóþ4 ·i{.òÒÁÑ'ÈKn¡ŸÔÉÉÝ®Aó2±~öYÁÇrû*“­;*Ò~Ô;£¹í<–=Ç~vFG÷Þ4Gw~¶lÈ=é=™ÕÝ}zÉÊ=å~—TÎ#y7êB^R=sâX^üã\«À:ýlëÁ= ¬OÛ:¬eÛ:¬eÛ: ¬uÛ: ¬uÛ: ¬uÛ:¬eÛ: ¬uÛ: ¬uÛ:¬eÛ:¬eÛ: ¬uÛ–íƒàÀê °ÎÆ¸müß–÷Êl*ø’^™I½WfSA'o ´^™Ï弤‚Ö+»w Z¯Ì§‚^RAë•ùTÐÉHÍ0ñ”Ëy9HÍ0ñ…ÜxeS*¸£TÐËQ*¸£TÐÉJJ½¥‚i¬Èÿâç¿q¼UQw^YzZ=¹$ï%\0“äe”ä9¹ $OP’çå(É”ä9yIžsÁ\’çå És.˜Kòœ\A’gÇ„}’çå Éó.XFG¯ Éó.˜Mò¼$y¦zš’<'o É{WOs’çå ÉK %yNÞ'y/yì‚ÙÎýÓ$¯xÓ$y©ÇÕÓ™åÅòisGI^G÷Iž¡Êú$¯×P>%y¦l’¼r6ª€Ü ,ãÒ#¬¥Xî§Äò“¼R 8ºKòš–8É›pÿ É+{ج'zÈ]4Üþ›äù”äeä$wIžfäµ˧j_¬ŒKý žµ%ÆV¼5‚ª§·52uؽ»ÖèÁ[#Q`=@«D…Ð*ýÈ“ö®@îÐ* xZ“)ª'z˜Ð* °VÑ* °B´ÊåÉû>oî Ã¾ƒ“_=Lh•(° U¢Àš– ,A•|þq`y`Éd" Àd{Ö"AV ­+Ýròl«ÓœãÀš¼'XÎ{º ¨€ÀZ%¨ ÀŠ¡Î'ï?ƒ˜E:yO °œ÷tAPµJPAUÚ/yl]Y\Çyõ–k¬ÿ´×­ÌòÏKë:T?Gªžc¹K ,Ô~ŸàUòîä9¬±Î4<–ðùHSc‰ì–!çå¦4WÃsß'Ø7­±ÜO–xy†ÖN^ýçbÃïYš‚+_Á'SmÕt Éð2ÀË]Ppò~o»)Í-A8m \:ôáÎä 1ðÆõþ|Ò#9ÊËÃÉÅ.ÚŒB&oápîù2±| ™·%ŠÝ—AÈl=‡Ã¹¿ÃŸ±ÜeÑvÆÓ„ÌQTðÛMȈÆÃ¹¿%{å~¯E C¦xw!ƒ9§Ó£IÇÁ|ÎÕ(dêpÈqÈ7¨Æ!“ì[܇LB!³ƒ+ïC&e2®|ÿÜÝôù–I›È‡ü&°d!°Þ¸¤c2}–ϸäd,E¸FÙÄ“Þr×*Í–lô†ðžX®@n[ä£FŒ™t~^ªÄòl75¨!Ü𴜟Ærã=ífu¸Ïw·m€“—=nº \ûf3'÷ŸïÎÑ®ó5Ñb¹ÿzň>ß}<(ºqî{¯&Å4¸Î ¤€eã¿÷ªáæ÷„®¼ÿÞk °L¿û¸òíÑ'=övB»<›ÇE±òa.JëàäýsÞÔ.³r°ÏŠÊµTJ\®%tåýsÞ\y›:'2Ào·‹øw_`<9÷±ÜoN7¸-×6G¬¬ \³bW®ù¯SUP®½>kq7][—ʵ¶Xÿœ·z\ æ±Læ³áÈmà:ê8Ù{,Þ(zòýl,7 ·›”E£QÁ3µG÷.²9úÿ{òG|ž?ª)ç¿çYÊ5Gf×ïã<Åò‰51¥Ž£O`$#ïvi™ícÉ3=ûÅõÉ”:j‘ úíïêÙ¥2¿=ûogäX.è—¶'ŸuGw=ù2Â-n ½ ¯WàWY¯2Ì”r×D\gë!7åSÄ•­ô–?#.Ÿ_$GÜv>cŠ[ÙmÖßAÄí6Ö š'‹ãˆ3“Å.Xé¿!T Ϧ_œ¢ˆKç”’'ëÅØ€µ Ô¹ù ÈÝã<œz?ãx€£û \»~º`gn² ’Û­²£†wmzî ³ID#î÷äÃo圃ÉàÒùˆ3/Rq•k)å"nÍ\ûÀ=nK¾G ’4Í™ìqƒäÈ*%€nÏåš—ƒrÍÎÉO¯Üã‰ûx¥i”és3{Ü 9’Ú~Út+\ù´ƒO;X¦”/×¼•k;*”<¡BÙ~` Ž^€Ü!BNý9êmÊhpFÜKOÓ/DÜ“ÿ~»rYt–O ’¹ŽË¨ŽKhÄÕq‚ê¸F@|'¨ŽK`ÄÕqÿo|Öq)™ê8çg»:.%ègïljªãR<âë87â긔`ƒdÿ„M}Ôq)ñuœmø:.¡÷µÙ†ê¸€ø:Î6H|—ÀÈÿ븻ú´Ò I™*×R¦Ê5'^®yùãrÍÊ¿(×¼üq¹æäÏË5/\®9ùórÍË—kNþ¼\óòÇåš“?/×^ò'L)qò¤%9Ž’£YS6Iq¿é ?´8¦ìOâ–ä¹Ã ø´©l=»YW #îœ!×p3àÑý˜°9ú_Äå“í“Düqû gŒZ’[#Årÿ…¦¨%y>†ÜQ-ÉÝ4ëMÄ—={ºO€¹?ªììölIÜ’<¢qÄñÞb¹8³wÚ´$÷EZ’vã„ÆG÷cÂû‚Ÿà dJ¹ˆ+Ï"îxM$ÿmÒ(âÎm†&óuW»ˆ3=q¥ ·§RãˆCG÷gŽþÌ?CNRòì3qÈ ØM§ÈÁnŸ)âÐÑ3Úí“ ½¯§\:÷޳Û覈ò)â Š¸ä쨘"}Џ•r O”• ’ú[e­Ž«¶s6d–ûrí¿qÒ­G´+ZÏ–U‰åæÊ·36"?;ûÑ'·-ÉÞ€Ÿ&S6‡~v©Ÿºú'Ïv\­†~öñœ¼ZŒAUàg§®¼ó³ÍW½Ÿ½£+ïÇ5ô³÷m4ðÛSªÆûG9¢à·{€D~vE«ÎùÙiG~v¿ÝûÙyÑÏÎ1¬mx8P^ßcÖ4ù™ºfÏñ½¸Îø‰6ož¼©Ær×}Ñ«ìd”Ï“ÿ,×rÛkèg'tt_®àUvÄ÷d9y6#P ýìÉUͱŸ¢Í›Ç…ŸÁH9Þ¼9ŸŽž‘£üö9Îß>ÀÑí«ì¨‡‘Ÿ]ã7ùÙRÃrM²ÿ°—‘»rm àg££ûrÍ22ò…Ÿ~#ixnOæüìÌùÙ™ó³3çggÎÏΜŸ9?;s~væüìÌùÙ™ó³3çgçûI¾ð³óÃo$ oTäuwmN_òÙ]ëb÷ÓwMç@r¦,9r×Î]"“A•?ݵt~—%vײÍ=Üö|“É=ßîÚœ²J/Yåä®MOŽÝµ@¬æ¬ÒËAV9¹kèèù[e•^²ÊÉ]«àÆ54üÜPVéå «œÜ5tôþ™U.¸k÷åÚi¬—k½÷s#³Îò¹\ëÇs¯ãÇGö¸§ä¶ó˜$â¦2JÍl•OgWœ<×»óXÎw8y×y,=,׎© yòX ˜Õ}ÂÚÊ=ÜÇÊÖ]ËðÒy¸­ö®xXrÅÃú·hµ$_ò{jÖ“À*ºoEgùG`éÉnëx!´XîË~ÕÙÖÒÀÑm-m‘š%O¨Y»ØO{¹ÁmÈ‘:Guîê±\Ý·ásh[Ÿ+œ¼ú4‹Ô,yDÍR—9¬“^Vqq™a`•Öù¨r>X¤fÉ5ë.°þÉc¶ÖÏNK8œ–p8-ápZÂá´„Ãi ‡Ó§%NK8œ–p8-ápZÂá´ä§#N@Ä­ã´„Ãi ‡Ó§%NK8œ–p8-ápZÂá´„Ãi ‡Ó§%NKîqZ0â qºq—8-ápZÂá´„Ãi ‡Ó§%NK8œ–p8-ápZÂá´„ÃiÉ=N Fœ‚ˆ[Çi=¨ãæýÙ/9ƒÓ§%NK8œ–p8-ápZÂá´„Ãi ‡Ó§%NK.pZwWAÄCÊ?Kœ-á8[Âq¶„ãl ÇÙ޳%gK8Ζpœ-á8[Âq¶„ãl ÇÙ’{Ζ\Ì% ÇÙn.Y¸¹dáæ’…›Kn.Y¸¹dáæ’…›Kn.Y¸¹dáæ’…›K–û¹d¹˜K޳%gK8Ζpœ-á8[Âq¶„ãl ÇÙ޳%gK8Ζpœ-á8[rÏÙ‚7PÄ-s¶„ãl ÇÙ޳%gK8Ζpœ-á8[Âq¶„ãl ÇÙ޳%gKî9[r±@8ÎÖzç䣎KáhÉ#Ζpœ-á8[Âq¶„ãl ÇÙ޳%gK8Ζpœ-á8[rÁÙº‹¸„#nå—©:.eªŽsòï\¸„p àÀ%€K8—p.á\¸ˆ:.¡™“u—p.á\¸„p àÀ%€K8—p.á\¸„pÉ=€K.¶àÀ%€K8—p.á\¸„p àÀ%€K8—p.¹pÉÅá\…p•OÜ3®\…pÀU8Wá\…pÀU8Wá\…pÀU.\¯E[.ðòÌŸÉ\…#sŽÌU82WáÈ\…#sŽÌU82WáÈ\…#sŽÌU82WáÈ\åžÌU.𑹠ç€Î/œ^8¼pxáðÂ9à…sÀ ç€Î/œ^8¼ÜwNÊ…^82WáÈ\…#sŽÌU82WáÈ\…#sŽÌU82WáÈ\…#sŽÌU82W¹'s• ?®pd®Â‘¹‚:nÊ*/É\…#sŽÌU82WáÈ\…#sŽÌU82WáÈ\…#sŽÌU.È\w—pÄÕŸ%dWá]…CvÙU8dWá]…CvÙU8dWá]…CvÙU8dW¹Gv• ?®pÈ®Â!» ‡ì*²«pÈ®Â!» ‡ì*²«pÈ®Â!» ‡ì*²«pÈ®rì*~\á]…CvÙU8dWá]…CvÙU8dWá]…CvÙU8dWá]åÙU.ü¸Â!»ô ²ëGZÙfù'²ëG­Ü‚£ÆDüÒ,¤[TÇýšZHÞÝvÜò"»ú ÓÙ•¶üéÇ17&`˜;RÏ‘w±ÝÖqÅn£V·ÿ}GrOœÈa×¶½Är???"?îté,YèxÌ税;ûxàÒÙ:îdF„~ÜoLcd— ûï6°l±ðÂÀ:WW w‹«†È®ãŸ@î!:!»ò·6sXÿ#ílÓ\Åu ¼•l`xð‡d{ÿ»Ð§oGrT`R§§,TòKÉfg‰c᩺eXÙ.m»1åHܻߞÒ+fá•Ë}`•––™z%1²Ë¤íêšC È=²K /!y‘á‘]-Çò ÙÕ럜Av ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—Ü#»`ÄqëÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ì’{dŒ¸ÊEœ¬DÜ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]rì‚' âÖ‘]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%÷È.¹XÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]rì’‹eá] , 7°,ÜÀ²pË , 7°,ÜÀ²pË , 7°,ÜÀ²pËr?°,ËÂ!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²Kî‘]0âЏed—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„CvÉ=²K.¶‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.¹GvÉÅá]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙEÔq Íœ¬#»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²Kî‘]r±E@8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„CvÉ=²K.¶‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.½Gvé…®²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»ôÙ¥¸rÈ.åpåpåpåpåpåpåpåpåpåpåpåp½ïœè…®²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»ôÙ¥~œrÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìÒ{d—^øqÊ!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²Kï‘]záÇ)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.½Gvé…§²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»ôÙ¥~œrÈ®öÙunОå²ëµ½3êüwéþ“±O䧷ܤF"†zUÄœ”l5–uÛqÓk ÙÕž »ŽwwFrûÛ q"Õwë#7çqò÷o¯ÕÒuäýÛSÞJŽå¢nʾ¿–]í²+Á£kE¨¾ÓÂî1NnŒÔd1©‰ËßÁ•oö¾oÖλBvµ+dW2Í©…L;ÇMgùgÈl¦y‡Ìr<é’¿/äÍÈß!s®$7!“Îÿëµãj`\§ʳSK2ét\€üýÛ‹ü:¡sÈôs 7–Û9òö¸õñãjO`\? ÷!“£yiß*w×!Cæ,¢c¹ ™×‡ÌŒ«]À¸"Ì–Ýìó+¿ ¬²X–tî,ÑYþAªÖ¥ïc+£{‰•¿3 RäI;ô@nâr3•®ÙÇvîkiàäsËŒ’æÖ+wÕpòl_„õ΀rõ0+7Pv0SåW‘¼û§v´íx(upòÕß‘a÷±é9säî¡bö/¾û©Gn1 ¸ò¦ŸZ·n`if.¦Ÿ†ÛîNÛÃ}lùÜ¥Ë=sËÌŘꓹ՞€\ÄÕgw¼W\ Sãˆ;.‘w¬Ù&îTq¯œM c™[²»×x#Îï_4}µ|"cyv«.Ú9z"Kkí@nŸ6-Џ4ΈGGܵE”»sgKGw“h-¤Üÿîän­(⎬ۚ~^îö±…”»z\Ò WEÜqÛk¸sôØ Žî"®´Gœ¢Uç'ÑLâŒ#®r'+÷—D$ýy Íò£õHT"æV9 {,7þIÙ-$ïퟜoØÝø'u3U¾qªs9òºË»½ïfh÷íTl4wr»sÔn{5Nu;ß±ÜtwNXmäTO‹žÀч8cú§ú(e\Ĺgn2·¦W¤“çøé˜[Ù±­­ÜM¢Y¶urˆdGwÌ-KüJ®Þêñ²™˜[iå' â0sËEœ>+×j®PÖ¸\Kì3« äÖ?i[8qܪ«ovìÉêr—]舜j=®I|ôìžóÅúž8Nûv²_€<Ûž^ 'ŽóØÈýÄqœêz>ܺµ3·Î){ ÷Nu æóI GG·]übZSΩþàµÈ©v¼1ëTŸ{ÜþöTBæÖ'o¬Nµß§Ž#®ˆ»˜8žf?DÜ9Rl×ãˆ;–‡ûØ~fw‰åÖ7;^'‹Ç›8nËÇÿŸòüÙ þ˜ ©#Ç¿}òÍÚâÄqã&ŽÛúÄñ¿Ù äÙEŒÆ³!2À•ŸfCÊÚÄqã&ŽÛýÄq»˜8n'ŽmÄG“ã‡oÖ±ü•Ï“#‡° Ó9©y›]açdÄ´ò*¾qçä'yŒz•S)4P¯Ò–BïU×åì y6×½Œ¨Wy<‘6ttK±•­‡“Ž^ì·R“TÁ•¯ö·ï2·¦:n€^¥ouÂ:nÄWÇ9æ–¯ãèœØ:Î1·|7@çd±Ž(â sËFÜ9°ü s2×q¿ò¹sâë8Ó9™ê8'o Ž3“[uN<¶ª¡:ÎÉ;¨ãLçdªã¼Ôq¦s2ÕqN>@gi徎órPÇyZùÌÜŠ;'1skªã¼Õq;ªãœ<¡:.¡:ÎËQ—Pçäùq÷+4ã? ª?èœÌu\³!¾ŽË¨Žsò‚긂ê8/Gu\Au\B³!¶Ž{ÏøÏu\ŠgC|ç¾:åê8'PÇ™ÎÉTÇy9¨ã’ :.¡Ù[Ç™ÿ©ŽK`6ÄÕqÓW§¸q ñƪã¼Ôq¾s"èèýq÷+4ã?Mšu\ÊTçäÏë8/ÿйEÔq^þ¸Žsòçuœ—ÅÜ"ê8/\Ç9ùó:ÎË¿bnuܯüÑŒóð¤õˆ¹k~šños«pÆÿÈMæAõ°W¹¹‘aóœo[PÄ™ÔÈ Ÿ A(w#Ã{‡ô·VÛç¥ 6[çp[Ì‘¯¹·L Cægk‡„3¿Ú¦)û°[xTŽÑ”ýñpñ^Â5ÿ³E@™ß::’{,,Z8¶Çä핯Ïm;·‚åY`«r8&.ÚiÖ,Ú¡`ÑîÈÝ¢ýü*ÅïœÓ4çÞbîT<çþ³lcyBÏ:»g7ÕQ¼ƒÍnÑjНüŽŠÕ–m,/h+˜}PŸ«Èûã'-ž|¨+“ú3®ºìÃÉâ6¹=¨&D]óá½hO¼[R{63K~òÛܽÜvÌ6÷äºF38ªÕ„G6Ëå¦wÑݤù{Ù4?.måö«’»ûº³­ß³‚Kç|XûŽs>ì Žêa5a÷è[vß:8yu”úû°Ù}¬ÌÊýÇ¡;ðaglUÉO|ØÕÃjÂíÑï>lèêÿþO_¯&^2t6{PM«®†>¬Œmï±|¸O’‡ß>:Þ2]3»¹ÊÒ£jâ("Áѽ[£·LÚŒ: Û¯J–؇=“«Ë]×Èl‹±o™zn—r·êJL~ʳÚ#Ö9¡æû½g,€£»jB¡Ûã7ù°á·Î¾ ÷_kÀ‡EG¯ˆO€#®ˆ»ðaÕ{Róa;çÃv·íœÛ9¶s>lç|ØÎù°óa;çÃv·íœÛïë÷~áÃö‡>ìdmô®Ð”UþÊ?\!—UZWÈg•NÞ@Vi\¡žÔWÈÓÊ*¼ƒ¬ÒºB>«ôrUZWÈg•N>@Vé]¡™~ÔCWÈd•ÞšÉO=t…bòÓ”Uz9Ê*w”U:yBYeBY¥—£¬2¡¬ÒÉóã¬òWþÈRÿ5’'uÜ”UþÊ?çi]V™QVéäe•e•^Ž²Ê‚²J'¯è;0e•^²JG~rY¥“ È*=Á·(8º€¬Òm̳/ÓãíÁ—X>²J/Yåä upã¢^5”Uz9È*'W½?Î*å\!õòGYe9_³ü#«ìg+:j÷µãšb¹k÷å6^Kä§Î‘Ÿú:ùé'«” ä.«4œxûœ?þ»Ärß-L‹ä§Î‘Ÿú3ò“³òrO~Ê(«W¾€ï6_“Ÿ:G~ê÷ä§~á õ‡®z_¦?h°Ëùñù'ùIl»Ï5Øg['Ž8;ñâìó§T∋>¥òÓ`ÏRCù„n²ìÃö×'[báúOƒ=¹/FFÜ`¯)¾ò{©‡kþÈæ;8yO‚I‚ì ÈýÉ—…E[ТŮÐÄ¡y²hOëdëôžTëVælë€E;€•94¯‘ô#­k9”Oô£Ü‘+ÿöÙR°h{rÿ¬‹?'¢9ƒ£{|QSä £Oꌭyü¤­hÑbWH=Êe<ãÕ‰4(I=ur;+æè–?T;:ºãéqd† s,ŸøCÁ÷@~ ArÛ˜ÊQL xtóÛënŽn`*¥;d„•[˜Šd„ûÈîvß[¹‚Ý÷¦òr®“¯ÀTŽÛŽäÝ=h+dîûí'L%Ù}‘ÍUR –‡©”ÈÊœ;f¿ò{JѳÀúýÄeA?ïÀªÇª$ï6|†„uN,ÇrXÕìWv`¯±X>V5~@`ÐÏ;°ò8yð@ÞmSðÝ·•Õ­Ž Ëm8÷Yn—Ηé Öúµ‡`/­3ä( ¬fãÒ–8 ƒÀzY&š{Upé:Ü ëŸN¼6=ÇìÞïúÁÚT»:ìÚô["2X›i#gÀ Z›fiãµùONnîí%àæïä¿ܼå_nŒüÀÍ[þàÆÈ¿ܼå_nŒüÀÍ[þàÆÈ¿ܼå_nŒüÀÍ[78â ˆ¸eÀÍ£ˆûÜ„·¸‰"îà&Œ¸uÀMq뀛0âÖ7QÄ=Ü„·¸‰#npFÜ:à&Œ¸uÀ ˆ¸UÀ ˆ8 ¸ÁW¹ˆ“•ˆ»ܘ“ÿpó–¸1òo7oùW€#ÿpó–¸1òo7ïÌê+À‘¸yË¿Üù7€SM<Ï*DÜ2àf¥ºÜ˜“¿ÜÌ;&ü+À‘¸‰+©eÀ‘¸1•Ô7€#ÿpbË€#ÿpc ±o7Fþ à&®ãÜŽIq "îâ»]³qWäsòßoÞò¯È7Fþ ùæOþùÆÈ¿!ß¼å_‘oŒüòÍ[þùÆÈ¿!ß¼å_‘oŒüòÍ[É78∸eòÍ“ˆ‹f47£™¸ÍÄÍh&nF3q3š‰›ÑLÜŒfâf47£™¸ÍÄÍh¦ûÍt1£™(òÍ“ÎI@¾‰:'È7qçd™|vNÖÉ7 W¹J¾ ;'ëä›°W¹N¾ ;'ëä›°s²N¾‰{•Ëä›°s²N¾‰;'Ë䛸s²XÇ q«ä›'“€|uNoÂÎÉ:ù&윬“oÂÎÉ:ù&윬“oÂÎÉ:ù&윬“o@çd•|wN–É7 s²J¾‰;'Ë䛸s²VÇýÊ òÍ“ÎI@¾ ;'€|3×qNþùtNVÉ7 s²J¾‰:'È7qçd™|vNÖÉ7 s²J¾ ;'ëäÔ9Y$ß„“uò ꜬÔq¿òG_bõH¦ŽK™ªãœü+$SÇYùwH¦Žsò¯8Lçä_!q˜:ÎÉ¿Bâ0uœ“?¯ãš9YFâ<ˆ¸‰EÜ$NÜ«\F [Eâ„!³ŽÄ‰Bæ' ™Hœ¸[¸ŒÄ‰Öü$N´æ'$^´plc‰óhÑ~"q¢Eû‰ƒí"-ÚE$N¼h—‘8q‡|‰:ä«H°hW‘8ðA½†Äê•'-ž|XEâd‰“9$Nª ·«ù‰“9$Næ8™Câd‰“9$Næ8™Câd‰“9$N¾@âü.›|áÃæ‡>ìÄÊÉ+'s¬œÌ±r2ÇÊÉ+'s¬œÌ±r2ÇÊÉ+'s¬œÌ±r2ÇÊÉ÷¬œ|áÃfŽ•“96s>læ|ØÌù°™óa3çÃf·͜›96s>læ|ØÌù°ù¾~Ï>læX9™cådŽ•“9VNæX9™cådŽ•“9VNæX9™cådŽ•“9VNæX9ùž•“/\¡Ì±r2ÇÊÉ+'ªã|VyÉÊÉ+'s¬œÌ±r2ÇÊÉ+'s¬œÌ±r2ÇÊÉ+'_°rî".áˆÓ×D'sÌAt2ÑÉD'sÌAt2ÑÉD'sÌAt2ÑÉD'ßCtò…+”9ˆNæ :™ƒèd¢“9ˆNæ :™ƒèd¢“9ˆNæ :ù¢“/\¡ÌAt2ÑÉD'sÌAt2ÑÉD'sÌAt2ÑÉ÷|á e¢s¬ùò`ú¹™7çYþ¹}Ë9š£>ªŒ"5–'[AËç¨W¬€£Û9j ë0sÔÝ©NnÞïmËæè†ùðÃÑr—Û¤ÌQŸ[Rûïä¾O;BæC7Šìä&·ÉvÙ¼ß%ÁKW]g.™£>çö:»ŽY ç¨ó ƒˆåârÚÎQKŸ%š£;Å-v/pCGW7Cn§: ê˜ý“?Ú^=óáQĽÜ åŸwdóáX6[é±ÜwN4G§y«HîØ>fÙdÔÚÜÓ¦Æç¡MÄ£ÈÈÝÓæM²;Žx—Ë݃º¿GVÞw$eÇš¯@ÞÍàj6³wÄ•¶Ù·Œ“W»û¾4#nôä.â´Ä7ìꢈû—RÌ'祫N쎕ZCÊJ;®);Zö•ˆ«\ÄÉJÄ|zÚˆ=ù ž6“"ã$YÄòw礤37úìQ§´OòîiAú$ÄdptÓ9)vÂÍô¨ÏÌnBF”hçB¶¯‰¿¤4µcÙ4 '¥é¼róAå|ñ¹e:Y¶é]´sQ(·=ê³ÇУµ',{yví¾õ¨K·yòóó!óá(2¤¹Û+4bæCvvž•{zé' â.˜ÕÏ•=êãι+¯öä³ëD~•êÐŒVnŸóÍØÀn/ïñKÊÒóÊÙûŽåž¦eF•ìsþxÜ yvW®G=êt¼€j,w=êßM^=jÝ\y›Y%Ç•t9­‚£ûµUR»lÆÖ€ÜG\ {ÔG=ŽÞ|^õwÀ¼ƒñ쾎îÙ}».Dœ‚ˆ»˜5ª~h¤¬÷¨¥'ßköämºKÐ|HGzPµÄòár›Ò‚惋® ·}Ú®éµÄ|(Ë̇ó1 .%vò§ÄïÞÅù”oYb¹m¸ÕM>Ï R¡¼Ûnî*ó¡¬3~ˆ‚vÍ;¹Í*‹™úx?iÏFkGwýº.Q¿.¡Ð‘Ü5Ò"ó¡Ü3ÊŬQy8kTýÌÉzÄõvÚ¨ùC>GÜQ~§&k³FeyÖèäÇ•} ¹™Ÿoc—ψËg² Žn"îÜã5ä3âêQ iFr×- §û‚Y£ò`ÖhëU’Û½5Gw6ÈÑÑ3Ú¹`\¡¾ té¦Y#Y›5*fJéÈ}§´Å®<úä •…ˆë¨ŽÃ³FÕ3uN¤9’Ø“jw ¿ù´ÇªÈ Ÿv·¤Ðwç$^ÈmW÷¨Wy$•9ƒ£gû†-ìUçUÈ]§A¯2uñhßvNÎ÷ð1tl=w ïæAk‹Ðb»Ä9£»é}1ĉ ë¸:'¶Žs_Ç Ð9±uœíUNuܽJ[Çíë¸:'‹uÜ@‡™Õ3uN|÷+ÿìœØ:ÎL÷Muœ“7PÇÙé¾OêB‰˜®ÙØPçäÔq¶sâë8/uœîóuœ“PÇÙé>_Çy9¨ãìtŸ¯ã¬ÜM÷¹:nGuœ—£:nGuœ“'TÇ%TÇy9ªãªãœ”eæÃGçå Ž{wNæ:ÎÉÔqïÎÉ\Çy9¨ã®™eù0×q^ê8Ó9™ê8'o Ž3“©ŽórPÇ]3Ê=ó¡\L÷•‡Ó}ÕϘuܯüÛ:ÎÉŸ×q^þ¸Ž³ò/ê8/\Ç9ùó:ÎË×qNþ¼ŽóòÇuœ“?¯ã¼üqçäÏë¸_ù£é¾ê§¼Ö#n¾ɳ<`>h´}þxηT4–÷¬Ó`º¯0¬äfÕw1˜§=R‹dí<+w·›e¸9+xò2"Þ}¿õaǰ Œ8³¹ÏDܱ„¦¹Ê8âLg#îXt=¾qSÄ™‰vLKæ¹Ê'âÍû[ÓdcÜ«ÜC>íù màÊ{â„é”óÛEî{u¿})«„3'x4±z`Å“ˆ;?v11J¬Ðî‹ìç—yz,wï¸$9Œ¸êV]Wöh_äq¹äPî#®i<Ž O~â]H§5–ûˆ+ "nGr·êÌÎDq-¾qSÄÙö¾¸y(´\F×Á¥›¦y3ˆ8Er÷ÛKFîûq}!âðÌI]™9ÑTê#üü Ú,ÿtÀsx*“‰\Ã]Z;àŸ¼‹Ôqžwaðä¾+då~¶PžÑÉ»~]ø^'¸Fø‘<Çxš]à9àj»ÖßçïMÔøÓˆð>9à5tÀrÀúíÍóic\·~{s]£9à Ý;àÙ¼ãê…^:à“[8àíüÊÕ‡|~Ç—·¥9à'1Xcù°_1Óí‘c16pt÷u›–ýÿŸ´ºNÛø‰˜¦@îvã†{ÿÏj“ \Ãé}ë¿ßqGĤŽäŽšiõ mcú‹“»}‘5Ì*e“×qSV™QVéäe•e•^޲ÊKÚF]§mÌY¥—ƒ¬ÒÔqSVéä²JSÇMY¥—ƒ¬òš¶QŸÐ6¦ïM$Pǹï*Ê*¼¬ÒÖq>«ôrU^Ó6ê=m£^øqõ¡W<6áA×ω•YM2—ˆšÐ6ê:mã|úK@î\àM2Ÿ¦8º§m˜£g÷ö= ÛUWcjâ'm£>¡mœ¨$w™Uë¸s7g´÷ßvÌŽ[ .Ý´w¼–hõm£U w¿½T”U‚£OYåÊ;.£ˆ“¥w\yq#c{{åm#Gà‚³Áž[Žå®ŽkcÝR’›Z¦êÞCw`wíý‚ê8×ÞO '?Á:bîÁÖGÕXîë8©±;0ƒJâ:Îòç½; ñ›ê¸ôe¶2kÌúˆ± §;.Ýätà’{|}î@÷Ý»&1ÃWPÄa?®xkãIijÀm£F¨Òrì€{ »‚ˆó¶‰¸äV]§©Æø‹5”ûˆ“;àðä§ÎÉŽðÜcùÔ9É âv$w7.ñ›"®|¶2㈳V¦¸.8ka»ˆ+Hî"N‘ÞÁ}Ÿ"nåWQÄa?®xd„pœá8'ÂqN„ãœÇ9Žs"çD8Ήpœá8'ÂqN„ãœÈ=çDP¯òŸœáœÇ9Žs"çD8Ήpœá8'ÂqN„ãœÇ9Žs"çD8ΉÜsN`ÄU.âd%â.9'ÂqN„ãœÇ9Žs"çD8Ήpœá8'ÂqN„ãœÇ9‘{Î Œ8·Î9Žs"çD8Ήpœá8'ÂqN„ãœÇ9Žs"çD8Ήpœ¹çœÈÅ”—pœá8'ÂqN„ãœÇ9Žs"çD8Ήpœá8'ÂqN„ãœÇ9‘{Ή\Ly Ç9nÊK¸)/ᦼ„›ònÊK¸)/ᦼ„›ònÊK¸)/ᦼ„›ò’û)/¹˜òŽs"çD8Ήpœá8'ÂqN„ãœÇ9Žs"çD8Ήpœá8'rÏ97PÄ-sN„ãœÇ9Žs"çD8Ήpœá8'ÂqN„ãœÇ9Žs"çDî9'r1W)çD8Ήpœá8'ÂqN„ãœÇ9Žs"çD8Ήpœá8'ÂqNäžs"s•ÂqN„ãœÇ9Žs"çD8Ήpœá8'ÂqN„ãœÇ9Žs"焨ã~å çD8Ήpœá8'ÂqN„ãœÇ9Žs"çD8Ήpœá8'ÂqNäžs"s•ÂqN„ãœÇ9Žs"çD8Ήpœá8'ÂqN„ãœÇ9Žs"çDî9'r1W)çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqNôžs¢¸rœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9Ñ{Ή^8àÊqN”sÀ•sÀ•sÀ•sÀ•sÀ•sÀ•sÀ•sÀ•sÀ•sÀ•sÀ•sÀõ¾s¢¸rœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9Ñ{Ή^øqÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çDï9'záÇ)Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœ½çœè…§çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqNôžs¢~œrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9Ñ{Ή^øqÊqNÇ9iç¤qœ“ÆqNÇ9iç¤qœ“ÆqNÇ9iç¤qœ“ÆqNÚ=礡^å?9Ã9iç¤qœ“ÆqNÇ9iç¤qœ“ÆqNÇ9iç¤qœ“ÆqNÇ9i÷œq•‹8Y‰¸KÎIã8'ãœ4ŽsÒ8ÎIã8'ãœ4ŽsÒ8ÎIã8'ãœ4ŽsÒî9'0âDÜ:ç¤qœ“ÆqNÚ:çä¿®û<¦Õ8ÎIã8'ãœ4ŽsÒ8ÎIã8'ãœ4ŽsÒ8ÎI»àœÄó[ò{œIãp&Ù4gÒ8œIãp&Ù4gÒ8œIãp&Ù4gÒ8œI»Ç™´‹a®ÆáL7ÌÕ¸a®Æ s5n˜«qÃ\æjÜ0Wㆹ7ÌÕ¸a®Æ s5n˜«Ýsµ‹a®ÆáL‡3iΤq8“ÆáL‡3iΤq8“ÆáL‡3iΤq8“ÆáLÚ=ÎFÜ@·Œ3iΤq8“ÆáL‡3iΤq8“ÆáL‡3iΤq8“ÆáL‡3i÷8“v1>Ù8œIãp&Ù´eœÉ£žòä_áL‡3iΤq8“ÆáL‡3iΤq8“ÆáLÚÎ$ŒüßSKG-iµ¤qÔ’ÆQKG-iµ¤qÔ’ÆQKG-iµ¤qÔ’ÆQKˆríWÎPKG-iµ¤qÔ’ÆQKG-iµ¤qÔ’ÆQKG-iµ¤qÔ’ÆQKÚ=µ¤]LI6ŽZÒ8jIã¨%£–4ŽZÒ8jIã¨%£–4ŽZÒ8jIã¨%£–4ŽZÒî©%íbJ²qÔ’ÎQK:G-鵤”kÿ£¦4SÑ—Ô’ÎQK:G-鵤sÔ’ÎQK:G-鵤sÔ’~A-Yð³ûœ¤sp’ÎÁI:'霤sp’ÎÁI:'霤sp’ÎÁI:'霤ßÃIú…ŸÝ98IçüìÎùÙó³;çgwÎÏÝ9?»s~vçüìÎùÙó³;çg÷ûI¿ð³;'霤sp’ÎÁI:'霤sp’ÎÁI:'霤sp’ÎÁI:'é÷p’~á®uNÒ98Içà$ƒ“|”kÿÑ·Ü¢r-€“tNÒ98Içà$ƒ“tNÒ98Içà$ƒ“ô 8É‚»Ö—$ctŽAÒ9Iç$ctŽAÒ9Iç$ctŽAÒ9Iç$ýžAÒ/ܵÎ1H:Ç éƒ¤s ’Î1H:Ç éƒ¤s ’Î1H:Ç éƒ¤s ’Î1Hú=ƒ¤_¸kctŽAÒ9Iç$ctŽAÒ9Iç$ctŽAÒ9Iç$cô{I¿p×:Ç ÷ÿ¦¯&­äYþ4ØR1=†÷²éçGr“´! ä„ $pô÷²©gƒ£¿ Èë(³5–ûܦG#÷çHu«@Þ]V2 ޤXÀÑ-“ ÙùájmÞÁ¥³³”6âÌÌ|Ú² Kçf)wséÞÕÞQ¦§ Žnª==ÊhŸn€ñÏ /ëkÖg‹öøGóTˆí™x×`Ѧ³’ª@nïû0,Š÷³NÎj¤Çr“ÏÿŒÆ‹ö¸qÉÝêy1·«d 7÷]’ üݸrܵ>Ào/Ú4¶¼k¼hµ€£ûEkvѶ„~»_´áF-[Ïྫmí¶9må­¬,Zµ´'·7JìÉ;þŠÙå$}iŒ¨}Üøˆ„!û @þÞZUŽy@¨ùÜäïIiŽ¿bZÑGžÈíoO¦Üm¼wɱÜ÷.jDÂ8žu }Ø­U%jEi¿±ËÈM+ú¨ÒÍÆ.ߊ>’+ wõûžÃVôË!‹¬<ù¶\LÂ8b}jE‡$ŒRfƈZÑÙ‚4pÄ ˆ8LÂxMã/ãÁäP9W]ŸåŸ“C'f%˜ÒcAT w=v3«÷÷ >Ÿ´%e ïf™Ñü»tÿé~:ÃÊMváå¶}f-@Ž6;˜Vô‘$ w­hí5Ú豟Áä–xdfõÞ­èK¹î@nM¿­UpòîIkš¶ý3½Ë}+:Õ ô¼(@Þ݃ZƒVô•¼ïò…É¡qXm%°Þó’Ë6 ߌ ý²mE×|„F,·óã>­è£=s# ·‹«ä°]Çq|t?9T4jE/â±!¹ß·7‚2½ž;)%–»ÔU£9†2Î*ÉM¥{H¨[…Gw­hmq+:m=¹oE‡ezߺ‚£ûÉ¡‘0ÚñœîHn“Ç“0Žü ݵ¢ÍÑ/^e ¼Êð䋸þ$âN¨’4‘Yþ99t<Íó§eœ6 ÷±Lo¸<ÐÑ]cÌn¼û‹8=ÞD­Ær×;M]œüÔË‘ùsÒÕÜ5ÆR'‡´Â£»ÆX‰'‡Ž"¹kŒ%49${r?9Tbóg pôÉü‘ÐüÉÒÁѧɡpVïœD+±|2ÚBÄuT®ÁÉ!qc©ÇPÍ1LÑàá¼5‚óþãêÅòä' "F•­¢£F¶nú»EQ$¢ ¯ºrD–Ù—oŸóGvÑÜ•k%êpœ‰ÙÒˆÛrY£¶\k[EGw$ŒVÆ<›f ÷3tUa¹æä \³ ’©\qƒÄ•kŽ„á˵7H\¹fIS¹6âÉj¹6PÄAÆk8{Ò ™Êµ_yÐ 1åšiLåš“7P®½$s¹æå \{7H.å”k¦A2•k^Ê5Ó ™Ê5' \{7HæzËËA¹ön\Éí¬ž/×vT®y9*×vT®9yBåZBåš—£r-yÞFܯüɬž‹¸ô°Aâë¸_ùgƒÄÕqÕqN^PWPç娎ûkŒv¼aÈ+¨ãüÖ*[Çy9¨ãLƒdªãœ\@÷nÌuœ—ƒ:ÎÌêMuœ“+¨ã\ƒÄÕq^ê8Û ñuœ“7PÇ™ÉTÇy9¨ã쬞¯ãœ¼Öq ³z÷ ’sðˆ(×~åß–kNþ¼\óòÇåš•Q®yùãrÍÉŸ—k^þ¸\sòçåš—?.לüy¹æåË5'^®ýÊŸÌ깈+Z’cg51Ë?Z’ùÈ®ƒY½Ò¼lš–öå0GÂH5M‘“0$ÞZ•¸t«ûòsò¯Hã £¶~ûD·Vur'¿¸/¿)EÂ÷$Œq1«7žÍ깈«#îüüЇü#âʲgΈ›§åâˆ3Ór×$ŒÁ‘0Æ: ã ¹ÒÈs\sL.ÝqfZî’„18Æx@Â8CNÁÉûw\é(âÀÉO§¯%ÆàHãž„1.fõƳY½ÉÏ>¹\®«.yKø””kuËÑÖª³Þ‘ÈÍ•ïgi”k:\¼{ùß•¯»mˆ¾/Ý¥üÿWþ¿qœ£™´åÚ!÷<#ÏvÎdüìt\ÈÅ¡5ð³_ý8-oʹž©)ð³/åïrm’;?[œ¼Ÿ*ÀÏ.;7ߊýì“õ NÞ”kÙ~¹ÉúÙò¾Èïýìy0›œ··XÆÏ>‡wt–úÙÇ"ª‘Ÿ]ÎݱÜvßÚVzäg×cÍw ·ýn­ #—£îýìVzìg÷ Ƀ׎×ã/±Ü­DåZ9¢Hn) 9&aœ_òŒeïgkr×)áFsq‰åþ#„!gʵ¶ui@ÞÃHÝ“0ÞG7±O?ûüÛ#FrÎ⃈‹üì(âøÙaÄ­ûÙQÄ=𳣈{àg‡·îg‡·îgG÷ÀÏŽ"îŸGܲŸGܲŸFܺŸFœoàˆë â.HÉqæï#θkSòø+ÿp×\òhܵ)ytò’Ç·»6g^’Ç·»v)'“¼£äÑËAòhܵ)ytò’G3~«ôrUzFGGïŸYå½»¶P®1ó¤\ë¢çÞ·Y0´Ž \;°½H,wÃU?“Çóæà莄‘ 'åý8×ó+¿#”{†J ʵ‹“ŸH’0ò‰Èˆåž„‘c†VttOÂИ„Qª¹'a<ÖTÜu]{\®Ùc,÷åÚž@òØÀÑ}ò˜$]c¹O͘ ~•eô*“¥WYyqc×M¼ÇFܹŸ6‡½þ4Ùc¨\ûògF\®-“0âr-&aüôú-™¨ ˆ³¼Kßë—nu_¾(CÂåZLÂ8{ýµ¹Íj ×ßÀÉ/îË— äß0¢ˆ›H8â Š8LÂHŽ3ÿ,⪛þ•D\ÛBöÌqûdÅçí± h¬’0@Ä…$Œ3â& ˆ¸²gΈ—nЏü쉄"n‘„".$aœ—ÁÉûˆì™2Ùc(â ò³‹ù7$ q+åZE‡I¶%ù¯YçÌ×Í~ÙáWì 9ó?Óð±¼@0q³°Þž“;€] ¿›~¾þj,¯€òõW®ý§Gµ§Éߤ«v‹žÕ~»ØOª)UÍÐ{?Ñi@nË5CðåÚ¾ƒ“wåšÔÀ]«UýF['ÿûíºŸ#A¹v2‹,›fû¨‘»v¢oÐÉ7WªŽÈ]{U>¸ò®\ûÂBÆ¢óÃùéÐÏòÏ9ª‘†ÌÙçå(!·!ó3Þ ä.!oц¾³ÆÉ@îrã!üu8þ-öË™^nú©Ýþv»OdÀßî;æ·¿CF·žÐo·óÃ-þ’^>_°@n燳ä¨ÃQç…}Tæ0d~¨t8:X6¾Ã1z2GÀ&pò®ÃÑJ8?|üøÈ»‡IÄóÃi«!sXe!°ìæ³âÙå}ŽÓæ³n>{ùo [¹¯òÍN‹/>¿äî]”#>Îù&4_¸tòìß„õsóY)uôÛß•|²ô#&T/~û—•›‡JsÛ¿Þ•²Ù#øíÅ6¬5GL¨tš{à·»Ï0×|†ùx»nÒȳÍs„”êÉC^¬\ìo·—÷C带eW^ìo—!¥Î/ 4påÕþöÒ¢–ñ'RêüÛ:‹¸ú,âŽk:Ãü+ÿ0¤ó9[ÒgæÛÜOµWÕ~ßée¿\îåîØ{`Hÿ¬'ro“D†t=aÜIüýÁ¶¥Òª›í«9ù°×sdHŸõšG‰¹[uf`؈k9–»O3ljžó»¹ï²ûn é¬îËÃf•à¾;Cú¨æãO3œ{p¼»AÝþŠ>Í ¸ïÓ§j_ˆ8‡yX.âôQ¹–ŽJ·ÙäDãríÈAÊø,׎B÷xÅI,·½¥Z,@¥™g`ÈÝ;n;çbGw嚺zw8j:¿®@žÍc>™U÷~ÎËñ~W wŽV¢ùáTNÈiÔ8v[?¾tÞ6—îïI{Ü­péÜ虚z—kÇ•+®ÎÖ¸\;R›m÷œ¿V¦ \sß•°Û=[FGwÛ=s–µùá…r­­ÖÿçUZòX%sŽ[½÷è»^ÿ&ŒZ,·†ôy_Á—ô~¾ä¶bïÏp_›ñÑÝüð™=ÎÍúz~› ¡ßþnÖë‘ûuði†6ÏЦÈv3´óz]ÀowÍú×ë Xtô fhÿšõÇãTà}7Íú­Ùûî i|å ºò¦Y/ð¾ûf½¹ï~~8¡£WðU±‹WY¯²‹ùaÿQ²'ã(&ö.³üóÃçc¤ âŽJµæ äîÃç­# 'Áíeé(âìV˜a ÀÅE0Œ¸³WÒ¥I¿ Ïî]Ô¢ˆ;ë­ø·O# 5ÉçÞòîš;5iÉ–,=ޏ-6¤¸Äœ¼Ûî94ÞîYGòz¾näx)g w罇# GÝ îû4?¼Ò é¨\ÃóÃÝ¡…ž5HÆfmÑ_ùGƒäÈ\Ͱãa%´ ’Z#Îü3Ý7Hj £gT®½$Ç;ʵcGØ 9qZaKrf­¸A¢ %yrR 8ºkˆ‚ICG¯ \³ ’Ñ7tßMƒ$‹¥›‰¤ ]yqåZ€ás©:`ƒ$¡ :º>/׊8ÈòwŽ?hÌiû¯<˜Ø7i»iœ,o$÷ #w_TSûÁ¯4H¶ýýÁ/ß ÉvJr‡ ’wÖo&öu¯-´‡ ’34t ’— ÈÝ·+·>‚ɱ获 »/éµ5HαäÊ}ƒd¯Aƒäê¾Û‰/×ö•û>MìyZ¹ïž‡eî»kÀûîyXæ¾ãˆû•?šØï~zy½AòQÇ¥xdªã2ªãqu\Au\JÈ϶u\AÕDB# ¶šø½òÿÉé厎^Agýl_Ç%0â§ÖÕq)ñuœmø:.Á»RQ—â_Ç9?_ù†®|Cu\ŠG@|ç'ö:zÿ¬ã&öï$)SåZÊT¹æäÏË5/\®Yùåš—?.לüy¹æåË5'^®yùãrÍÉŸ—k^þ¸\sòçåÚ¯üÑÄ~÷£×Ë7Ò¹kÏ} ¸D—·V{q¯:nŠå|¯õqå|Tö äÝŽÜ“æqG)Žîé<á×b刘œ»oW¶EÜ6©Âˆóßo¼âaÅ-ÉeVqˆ‡u~¦g¯äÙÜ·!qÄy,¸t>ââ–ä>ã´@KÒá´†M ÑÑ':ÏBK2Á <±o#®>yÇÓ&éÒgùüŽ+ç§ÇrqšÜE\‰&öψ³SS^n#®öG:º8stq]§¹ñ# ´‚ˆk@žÐ>‘+ЏEЏ‡u„\Ú‘<»—IEäSÄUqà·O§(âÀѧˆ« ‡'HêʉþTË~v9ÊÓ,ŸËµ# Qüì¼I›¬ÁüY®¥£4顟}:Êȧ[c?»•Ž^qrÆåÈÈû#£‰}Ù·ì¿qô–»IAI¡Ÿ}\•’ܶ$ >Ï–k—NwpéÞ±¤[ªàҽ˵³i+‘Ÿý³È›¹ïjg§½Ÿ­`Õy?»Ä~¶ :ºó³G[ô³sXÍ­òúæ³*}þH‘9Çlv>$ìg×X>ùÙÚñgR°€£»î[RègÇGŸýìÏÍgçœHà·¿_eÇÿe'ë'?»j,÷~vøáóºõ=£Ûríx#?Ýwß$x••jG÷ݼÊÒOŸ ùÙàÊtåm¹&è¾ûrÍÜ÷ÙÏGÇ[ ò…ŸúÙÍÛ¢™ó³3çggÎÏΜŸ9?;s~væüìÌùÙ™ó³3çggÎÏΜŸï$ùÂÏÎýlÿÉ”ûˆÛañ+ŸÝ5ŸDXwí|Ò¹Ûö׸k¥ w“ wMS,÷=ß¹kRÏ ›@n*û6BwMŽ×Û÷ûùÝÜÈ];þYÍ@ÞãÝ¢Þ]Ë©‡rï®ý{pÎîÚÅ}7îÚ”<î+÷ݺkî¾{w Ýwï®™û>¹kà¾OîšÉ=aÄýʹkÍ[ʵ9«ü•”k>«Ì(«tò‚²Ê‚²J/GYeA¹“WÛü•kY¥—çßj­·-[«¢¬ÒÉd•¦\›²J/Yå䮡£+È*Íë)«ôrUÎî¸ò ]ù†²J/Yå쮣÷ϬrÁ]»/×N«àA¹v¼Â·’Ú,è<£— \;²Çâ¿÷—kG²’G÷õ¯Œ’Gó¥CŸ<æÏß$æÓð6y,gëÈíWj ;gö˜bùôuõ'®ëšQòhæä1÷XžÈð°Æ–öäŽL„`ªuÄ÷} ¦z<;*{˜ª¢äܸ úž¯²Œ^e²ô*+O"îXï›Hi³|Ž89?îYâ^­9–»rM¤G½~M;Û¯Íä’ã^?:úôµéa¯ÿH€*g›ÁT½~òµ¯ÍÌ<¬Ìñ°òÖØÚØÛrMFB½~pô©×¯ ×ßÀo_úÚ >:üÚ Ž¸‚"»k“Ëò âöcÕåô!ÿÜbSrˆè?". ûI­qÄí•)Ž¸Ñ€ŸŽ>}m¦Ö0âtæa…W[ÈÃ:#N€|ík33+s<¬ü€‡uD\KHn#®õŽ"ȧˆë âüö¥¯Íà£Ã¯Íàˆ«(â°»Ö<™¨<û™UúG<¬xXe‚:•˜‡Uó+äaÍ8­xXýµÄÃ*Ë<¬W‘³Ë ~ûûþÔ~DVä®å~f|±\ìq{Α»ö‰Ó*¡»æpZW<¬ò€‡•ÏCƒ“—kÒÜöîw¹VŠûŸ“›ríÜd•kN«„<,‡Óºâa•+Ö¿WPKòW~OÍ*Ï@sv@ûWV•¸rÎÐÆr´kÐQ³RÊàèÞeɋԬ²Nͪ©œ/# –lCÂ>Hnð·{܆ùíbÐÍEÑÉ›Ï8“8‹Ô¬ò„šµ'»§ÁËÍ\ÿ#êƒduÎbŽë4‰ÂÏ8ŸŒ'ïAsy‘šU.¨YwõO³µ^K8­Âá´ ‡Ó*N«p8­Âá´ ‡Ó*N«p8­Âá´ ‡Ó*N«p8­rÓ‚W@Ä­ã´ ‡Ó*N«p8­Âá´ ‡Ó*N«p8­Âá´ ‡Ó*N«p8­Âá´Ê=N F\å"NV"î§U8œVápZ…Ãi§U8œVápZ…Ãi§U8œVápZ…Ãi•{œŒ8·ŽÓ*N«p8­Âá´ ‡Ó*Ë8­—ôæû+ÖqOpZ…Ãi§U8œVápZ…Ãi§U.pZw§ âÎ!å×g«pœ­Âq¶ ÇÙ*g«pœ­Âq¶ ÇÙ*g«pœ­Âq¶ ÇÙ*g«Üs¶ÊÅ\rá8[…›K.Ü\ráæ’ 7—\¸¹äÂÍ%n.¹psÉ…›K.Ü\ráæ’ 7—\îç’ËÅ\rá8[…ãl޳U8ÎVá8[…ãl޳U8ÎVá8[…ãl޳U8ÎVá8[åž³#n ˆ[æl޳U8ÎVá8[…ãl޳U8ÎVá8[…ãl޳U8ÎVá8[…ãl•{ÎV¹Ø P8ÎVá8[…ãl޳U8ÎVYälu\ GKq¶ ÇÙ*g«pœ­Âq¶ ÇÙ*g«\p¶î".áˆ[yÇeªŽK™ªãœü;Wá\…pÀU8Wá\…pÀU8Wá\D—ÐÌÉ:€«p®Â¸ à*€«p®Â¸ à*€«p®Â¸ à*€«Ü¸ÊŸ à*€«p®Â¸ à*€«p®Â¸ à*€«p®Â¸Ê=€«\l(€«r®Ê¸*઀«r®ú逷¾i ðOWå\•pUÀU9Wå\•pÕ ×ï«x}è€Od®Ê‘¹*G檙«rd®Ê‘¹*G檙«rd®Ê‘¹*G檙«rd®zOæªxåÈ\•sÀ+ç€Wίœ^9¼rxåðÊ9à•sÀ+ç€Wίœ^ï;'õ¯™«rd®Ê‘¹*G檙«rd®Ê‘¹*G檙«rd®Ê‘¹*G檙«Þ“¹ê…W92WåÈ\•#sUŽÌU92WåÈ\ŸuÜ”U^“¹*G檙«rd®Ê‘¹*G檙«^¹î".áˆÓײ«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«Þ#»ê…W9dWå]•CvUÙU9dWå]•CvUÙU9dWå]•CvUÙU9dW½GvÕ ?®rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®zìª~\å]ò„,tÚÐu–’…Žå•^1²kh,/¨šðÈ®†äžsR_1²«÷Xî»Ä)úÜ^©û‘¹™æÕ­¦ Ž+zÒb¹XlÕˆý¸ Xáä–õav Û:®Ÿc‡±Ü±>öøq¯º·ûÞÉM5!f÷½©ãjÞlrâäÍí7ɉ! |ò­Ç;Vl7N–D,ïö·gSŒü4ŒÃ^å¯üÙõ4°†Îò(°jÌÂ;‘±|²_P`rÏÂXÈ+(l`{uت±ðÎÈB¿ÝoLÙÁVoE¿ÝÝ’ÂIÝývÏÂÛ#dWé~SNŽë¨hSÄÂ{Ù27‡3Q`?> w›rj $Ç-I±¼ûM9c!°þÉd—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„CvÉ=² F\·ŽìÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.¹GvÁˆ«\ÄÉJÄ]"»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%÷È.q"nÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]rì’‹eá]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%÷È.¹XÙ%ÜÀ²pË , 7°,ÜÀ²pË , 7°,ÜÀ²pË , 7°,÷Ër1°,²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»äÙ#n ˆ[Fv ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—Ü#»äb‹€pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ì’{d—\lÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]D—ÐÌÉ:²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»äÙ%[„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—Ü#»äb‹€pÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìÒ{d—^8àÊ!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²Kï‘]zá€+‡ìRÎWÎWÎWÎWÎWÎWÎWÎWÎWÎWÎWÎ×ûΉ^8àÊ!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²Kï‘]záÇ)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.½Gvé…§²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»ôÙ¥~œrÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìÒ{d—^øqÊ!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²Kï‘]záÇ)‡ìjÈB~[å?ù'YÈ …æfG]'òÓ[ÞÝŒÿû·qéfåEÝp`z-!»Úd׉ŒØÁo¯ö·÷d ðßßþŸž[È3:z7®]kÆPS¯¯X.j륔^KÈ®öÙuþ2¢'7Éÿ~{m›5RÿB&¥­(’¿C&S9‹0®öÆuüxMHnC¦™Ý÷ú® Óémùû¾Ÿ#Ï…L:7ÖÇòfŒ"À¸ÚŒ+Âl5ýßVY,ËÜ:Q!u–Ì- ÑÙíý:4–{ЀÎûŽänwE­ñ>¶ÔÁÉOÌ­€t¬Ž#²Üv8Ô„þô"çÎpòï ¨ï"óÛÍþ†´%ôÛM•"öj°íXÙ‚~»cn©ùíÕà#7iÈío—€JÍ›î=–¿û©ù¬êr°­/“Žäö·—pÛ¼ÐÊÝ{Ølü{"†Ì­öd#®>Œ¸±í8*Ž8iQÄåc9öË")¤Ü•Æä6âr )wÉgFÜ".eÝJQ Ï6ÍÒDÜÏ [ŽåïˆËG`Ù­ŸÍ¼ãJG7W,¬ÖDÜñïîä.âJ˜[G©½¡ûn3_ÙÌ}¯æ¾ë†î»e±ˆÛúiî{ÙÐ}·;G³٣ǿ‹î»ß9j­0â*q²qï$"íçëg–ì}HµÀ©~åì¶üZys»'ͳÎ9Õ£‚£;§:âW³W[ŽåÎ?I9`n¥Z7Û ñòlvxJ˜[e[G7Ý|®ÍÀ©®§Õ Ž>lĉ!~½»;''\yëT'û–1Ì­#x7pßíÎÑÓ¨™[ù8>8ºÍmÎ”Щ¸ïΩΖøeŸ´u÷Ý9Õ' `!âDÜsk¢^=*×Fwƒl :ÅZŽïÞ’´mž8nS}Ü÷xâ¸o@îœj)Q¹öÉŠË5˲ìdqi»ÆåÚ¹©:b'ç#aì@nê¶ÅÇGÊÕÁÉ;æ–šöŒØÝÒ3²+.×,²Ë”k¯~¼c<»e×§Zömž8nS}ä ñÄñ‘/*’{žh\®} »@¹¶…ˆSqÇê‡7ÛºS]t¹Í‡ŸUèènâ8æÖØz,Ÿ&Ž“|tñKÉ[E¿ÝtñÆüv7ÿ؃+ÿéT§­ó'¯{ £[§:ï1sëÜä.£6‹öÝÅ?’»mŒ‰ýíyéÊtå ‹åÈMÐÑSsk £O½dYˆ¸"îbâXýìg{6âÀ=ޏ¼Y窻úÝŒ8ùð•TY›8nÜÄq{2q\N*2»‰ãÐ7;r7eßAĹ)ûˉãÆM·õ‰ã³!HžãØÏ†Èˆïû<RÖ&Ž7qÜî'ŽÛÅÄq{8ql#n<ëœÌuÜ@[Çí°Ž Wéê¸ë¸;':'®Ž¨sbë¸ ë¸vN¦:.Ã:n„“©Ž+°Ž¨sbë¸ë¸:'¶[Xa7@çÄÖq–¹5Õq#:ÎÑÊ}7`çDâΉ¯ãèœ,ÖqEfn©Ÿ¶~Ò9™òù_ùgçÄæó;Ìçåó;Ìç½äó;ÌçåófÆÿU÷fÇ¥÷°sòstNŽgö†N~¸:ΜüpŒ|;·Ç“óö–pÆÿŒÅPž|F1·®î»ëœ¸:n_¹ï~ÆßÖqiå¾§„긴rß'ZùJ÷+4ã¯~\úAçd®ã˜ ñu\Fuœ“TÇTÇy9ªã ª&š ±ÕÄ_ç䣎Kñlˆ¯ã쌿¯ãœ\@÷îœÌuœ—ƒ:ÎφtttuÜ»s2×q ̆¸:ÎÍøã+ßЕo¨ŽórPÇùÿŽÞ×q¿òG3þê§­‰:.eªŽsòçuœ—ÅÜ"ê8/\Ç9ùó:ÎË¿bnuœ—?®ãœüyçå_1·ˆ:îWþhÆ_=[´ý¸qÓ˜| ±U{8&.[i±|é5¡%U wÊ®Á¢mGe<͹·˜;ϹŸ«6>úôœß,ÚÞÜïgÊñ¢ÕNÞƒ£âAõŸe˧u ÔçªòþøI‹'êÊäƒþŒl®û°½»Cÿ“Tgîú°ç¢Är÷UÉV€[KrçEjèÃ~ÒzèÃZú‘ña¥ºoØ:¹©¤Šý­ñaêrSM”£Ô }Øv2#Ü}QSBöÕÃIs ޲}›Ö'¶G>ì¹?¨&N H÷½YB?øöQ9êo$w:òa'pT}X»G¿_ø°ý¡+Þ“êëÕÄQÈ•­}È?ª‰ãÂö5ÚË=ù©lÁkâ,àÝwjìþæ//õЇ5ÄnSMäöáA÷Ï·ÌñvN±; X¹Û1lšNæ-3Þ½Üm,ôa¾£gôå¥lî;þíöIë~{^ºòˆ•n_RÇ Ü÷ì¿^cö5y©G>¬g¥÷ ¶?ôa'þPç|ØÎù°óa;çÃv·íœÛ9¶s>lç|ØÎù°óa;çÃöûú½_ø°ý¡+¾ÁÞ¹B.»ø•ºB6»Øaváä(»Øaváå »Øaváä(»°®P9?‹ävŠ»Æ®Ð9`NÞ«trEßQ”Uz9È*+„¯|CW¾¡¬ÒËAVéê¸×üPÇ­d•¿òG®Ðô='Ye?I2}–Gä'ÉqVi·U:¹'?u}-‘Ÿ:G~êOÈOÇ[¢V wä'Ñ8«ÔÉÚˆ³Ê´÷×ù©sä§þŒüd·ø{¹'?e”U‚KWP§ô’üÔ9òS¿'?õ W¨?t…&k£?h°ë¦½ÕYŸR긳¿žv‰å–Ccmß`ÏÓ§T@~J¥‹vï¡Ü£›ªY6Sƒ=>úÜ`¨ÁžÜ/›˜£5“÷쥮ùóI_ù‰“5ØûJjå5QТŮxWèÉ¢­[·}Ú_ù'<)›©ÞÚµÆò¥×„¦ék$ñ¢¿Fröík|tO?Òð9.Ú}Z´ÆÖñ‹vÂVE >'¢9ƒ“÷ø¢¦È'?=¨3Z´àä§E»ò¤­hÑbWÈvÌþ廸CµÎò?d\¡f«„†ä®0^ǪÈ=H5¬&ŽGxŽåÓž‘¸B?ß Gwü!ÃØ3v^©ûñ r© ô÷ÛkÅWÞð‡Ô]yã ÔiðÛ+dÀÏÖªG‰äö·«éU˜Ê~AüýÛE6³7ð S‘¼YÖš“˜J³ð¦šHÓ¼•;þШ‘7wÌ~å÷”¢Çõ! PŠöÉý—rBJÑ™_h,·õ²†§7Ìlˆ“O&@ŠKÐo÷µÃu¯ç€¼›ø5 ý«”Áo7u^á–éþv?¤o~»mˆ~€~ÂÀúýÌUÆI·róP)›¦ °^E6‹Ëq`ý³–é}3É£“û2}ô…Àú'YF¯%|ÑàðEƒÃ _48|ÑàðEƒÃ _48|ÑàðEƒÃ _48|ѸÇÁˆ+ âÖñEƒÃ _48|ÑàðEƒÃ _48|ÑàðEƒÃ _48|ÑàðEã_#®r'+w‰/¾hpø¢Á዇/¾hpø¢Á዇/¾hpø¢Áá‹Æ=¾Fœ€ˆ[Ç _48|ÑàðEƒÃ _4ÖñEÿ5="\ºïðEƒÃ _48|ÑàðEƒÃ |Q<û!¿§ ŽR48JÑà(Eƒ£ ŽR48JÑà(Eƒ£ ŽR48JÑà(Eƒ£{JѸ˜Ž¥hpÓ±ƒ›ŽÜtìà¦c7;¸éØÁMÇn:vpÓ±ƒ›ŽÜtìà¦cÇýt츘Ž¥hp”¢ÁQŠG)¥hp”¢ÁQŠG)¥hp”¢ÁQŠG)¥hÜSŠ`Ä qË”¢ÁQŠG)¥hp”¢ÁQŠG)¥hp”¢ÁQŠG)¥hp”¢qO)ó胣 ŽR48JÑà(Eƒ£ ŽR4Ö)Eÿó‹:@þ¥hp”¢ÁQŠG)¥hp”¢qA)Š'Í?ä÷0¢ÁÁˆ#Œhp0¢ÁÁˆ#Œhp0¢ÁÁˆ#Œhp0"¢\Kh‚dF48Ñà`Dƒƒ F48Ñà`Dƒƒ F48Ѹ‡‹±óÁÁˆ#Œhp0¢ÁÁˆ#Œhp0¢ÁÁˆ#÷0¢q1v>(Ñ™°0¢SNÀˆÞò¯`DFþ Œè-ÿ FdäßÀˆÞò¿¢á¿q”evnüFdäßÀˆÞò¯`DFþ Œè-ÿ FdäßÀˆÞòpïªþÈo™C uÅ2çø sè-ÿŠ9däß0‡þäß1‡ŒüæÐ[þsÈÈ¿a½å_1‡ŒüæÐ[þsÈÈ¿a½å9ôn|ºªçßæÐ“ˆ \Õ0âÖ]Õ8â–]Õ0âÖ]Õ0âÖ]Õ(⸪qÄ-»ªaÄ­»ªaÄ­»ªaÄ­»ªqÄ-»ªaÄ­»ªaÄùäG\·Ìº¸KæÐßÉÇzË¿bù7Ì¡·ü+æ‘ÃzË¿bù7Ì¡÷Ãê+æ‘ÃzË¿bù7Ì!Sñ 挸_9ÁzT®}2‡ârm™9–k¯eæP\®-3‡ârm™9•k˜CA¹vÔkÇ*¯æPX®­3‡Ârm9–këÌ¡°\{-3‡@¹¶ÊBåÚÏöÞãY(׎˜y”<~¢…Âäq-’ÇU´HWÑB y\E …Éã:Z$«h!<®¢…Pò¸ˆÉã*Z&kh!”<.¢…`òX^e½ÊVÑB".B E÷-FÜ:Z•k‹h¡0dÖÑB¨ÞZD YE …k~-®ùu´,˜z ¿r-ôhÑ~¢…¢Eû-ôð51£…À¢]E Å‹v-„í"Z-ÚE´X´«h!ø ^C ÁE»ò¤­hÑ®¢…NˆÏ]Ñ` ¦êé<§7ÿ¿>$-+È ƒdµf\=9±Ü¤íg5ý>ù?ˆHiGj$HÞÍÌ£½6‘.› CDŽbOµy÷”Û8y·'/f««$Ô[ú•ßÒyž®M­òhmîÖ¦¹çVuP‘Nˆ™xmz¼ÎßíÕ~$ÎàèfmîÛØ#>N;ÞèäÍÚ쮑qÅÇ ×æÄÇynä|M¹Ì?¼#X›¯VUõyž})¯ÀM¸6=à¯Írps¿h/7'ÿàæ-ÿ pcäßnÞò¯7Fþ àæ-ÿ pcäßnÞò¯7Fþ àæ-ÿ pcäßnÞr¸ÁW@Ä-nžEÜàDÜ*à&Œ¸uÀ ˆ¸UÀ ЏEÀMq뀛(ânˆ[Ü€ˆ[Ü„·¸‰"îà&Œ¸uÀMqpƒ#®r'+w¸1'ÿ àæ-ÿ pcäßnÞò¯7Fþ àæ-ÿ pcäßnÞ™ÕW€#ÿpó–¸1òo7¦š@;&qÄ ˆ¸eÀÍJ)t¸1'ÿ àÆ”BßnŒüÀ ¨òW7F~ ¸9žóÇ¢ò¯7Fþ à&.Ä–7Fþ àÆbßnŒüÀ ªãÌŽIq "î⻞€²qWäsòßoÞò¯È7Fþ ùæOþùÆÈ¿!ß¼å_‘oŒüòÍ[þùÆÈ¿!ß¼å_‘oŒüòÍ[É78∸eòÍ“ˆ‹f47£™¸ÍÄÍh&nF3q3š‰›ÑLÜŒfâf47£™¸ÍÄÍh¦ûÍt1£™(òÍ£ÎÉ'ùtNVÉ7q¯r™|ƒ:'‹äÐ9Y%ßD“䛨sò€|:'«äÐ9Y%ßÄ“eòMØ9Y'ß ÎÉ"ù&îœ,ÖqEÜ*ùæQçä“€wN–É7açd|:'«ä›¸s²L¾‰:'È7açd|vNÖÉ7açd|wN–É7açd|wN–É7qçd­Žû•ä›'“€|vNÖÉ7açd|:'«ääA/’o¢Î "ßÌuœ“E¾ ;'ëäÐ9Y%ß„“uòMØ9Y'ß„“uòMÜ9Y«ã~å¾Äê‘8L—2UÇ9ùWH¦Ž³òï8Lçä_!q˜:ÎÉ¿Bâ0uœ“…Äaê8'^Ç%4s²ŒÄyq'ЏHœ(â q¢ˆ{€Ä Cf‰†Ì:„Ì*'î.#q¢5ÿ‰­ù ‰ƒ-ÛXEâ@â<|MÌHðšXEâÄ‹v‰ƒžó‹H´h‘8`Ñ®"qàƒz ‰Ô+OZ<ù°ŠÄÉ'sHœÌ!q2‡ÄÉ'sHœTå(uCö‰“9$Næ8™Câd‰“9$N¾@âü^º|áÃæ‡>ì„É+'s¬œÌ±r2ÇÊÉ+'s¬œÌ±r2ÇÊÉ+'s¬œÌ±r2ÇÊÉ÷¬œ|áÃfŽ•“96s>læ|ØÌù°™óa3çÃf·͜›96s>læ|ØÌù°ù¾~Ï>læX9™cådŽ•“9VNæX9™cådŽ•“9VNæX9™cådŽ•“9VNæX9ùž•“/\¡Ì±r2ÇÊÉ+'s¬œÌ±r2ÇÊÉ+'ªã¼•yÉÊÉ+'s¬œÌ±r2ÇÊÉ+'_°rî".áˆÓ×D'sÌAt2ÑÉD'sÌAt2ÑÉD'sÌAt2ÑÉD'ßCtò…+”9ˆNæ :™ƒèd¢“9ˆNæ :™ƒèd¢“9ˆNæ :ù¢“/\¡ÌAt2ÑÉD'sÌAt2ÑÉD'sÌAt2ÑÉ÷|á e¢“6²­ƒJŽE×>ä ’ÍÚ¸é}ñžÏ˱¼TW„ãAÁÑ«ONL>ßLy˜ÐÉWsòÍÎÊÿOþ?Ñsÿ|,—÷É×nOþ/Ÿ?¿­¦èäßùü‘¹1­fŠ[MHn3jk¨µ¿+_ç…Ý>oåÍœ|³–V³¦ÒŽN¾[Séß”W´Y´|Ê?׿ËvñËÂÚô<’=È#É;.íŒÿ±º¬wdåÓ3)æ‘øÕáä®Ò-ùòHZÑXîéoìõE¿ÝåžÙüölOýv·k¶¦ˆGRZ‚¿ÝÎøgûÛßaݪG;XyµÝª!!ov¬ÆË}ÞÍø'ÙZ'/ŽÍТÿ¢GÍŽnªür†0ãßòfßÃN®ö·ç–?ŸI¤<£#¸ˆ«#N´ÎòuPrÕž“£jÏDܹ۹ y·{r ÒÃD\Ýl±èä.âL±h#®{…€Ü±XöhWMÀb‰#βXþ"®ž8“Šä¿=·ã]EÜñ&K ä&âêÉʉ"î"÷ÝFÜË®yÓW;7è¾ûiksßMÄí}C÷ÝDÜQŽ›ûnújU6tßm_-o¥#®r'+gýÿ–{ò¼eÞ]½œ·ZÜíª1­)ëŸôó ä> y$ǃzG÷<³—Ëø'rDCòlSÌÚ?ý“’êù åï‚élç€G’ζÜP ï¦R´¸²1ì°OŠný“|>Bÿädøyv]øø'G¹³ûîvÕŒMBI¯¸ïÎ?i&Þ­òIÁ)1d¬¼ãD摼¦¦òÀ?©?9í,ÿôOŽÅú'ý9 /ûçÉÏþÉ‘3M@‘ù'gzLý(UÁÑÝ\ æàŽuÝçÏ®Þ쟔<6pòî9¿›Eký“´M@‘ù'Õ¼&¬rqé&0d¾÷O¼|Á?9;$oî¾ÇspçÖÑäÝ-íù'í\ޱÜ=ií¦q "ÏÁ½¦i¬ò`îgüRgù‡òÓÐ c£œ{cùpµLŽº¹åxRB¹óŠWy$e™Gr¾¥ŽÛ^ܽãzÐW;Ó9“7}µs¿p¶”3 Ü4Hj[å‘”uÉyß·ª@îr3Rô~ÒŽ­ ûîzɩ樗\ŽÌÊmgKVy$åžGR.æàʳ98qýQÄI×ãgÉ,æàª¬ÍÁ•õ9¸ãé_{+@î¯| ËŽŽ>ÍÁE\=Þ>ÈídÊÖÒÚ\y0w\ø>*»6¼Ýa~ûîK‰áÇ»¹Ÿƒ“µ9¸òh®”^€Ü[O-v,áÑ'Dz,D\Guœƒs7žvN|7@çÄÕq;¬ãFÜ9ñu\‚uܽJWÇ%XÇ Ô9±u\†uÜWÇeXǰs2ÕqÖq#ìœLu\u܈;'®Žs_Ç Ô91uœ%¹NuܽJ[ÇYÉTǸsâê8Û9ù¤à”˜G²TÇ qGòšFŸtNæy¨=|~‡ù¼“£|~‡ù¼—ƒ|~‡ù¼“£|ÞtNŽºž¼›<µ'ov–”26 ¾Ž‹'OÄ®ywåDŽ&OKÙF|ôiòÔŒÑí+÷=í¨ŽÛWî»#¹º:.­Üw×9qu\Z¹ï)?®ã~åO&O_Óüã“ÎÉTÇýÊ?I®®ŽË¨Žsò‚긂ê8/GuÜ%¤,óH>ê8/uÜ»s2×qN. Ž{wNæ:ÎËAwÍ#)ë<’¹ŽórPÇ™ÎÉTÇ9yuœéœLuœ—ƒ:îšGRîy$åbò´<›¡\*ˆ8°læIó "N‘ÜE\É(âÀoŸ"naæ$ᙓº2s¢?ãªvnc2kÈ•”xasõ»“Û:ÎÕïÅ1t'”Kê¸jq¤ÅVÐÝñƒÓ;àµMx긜c<ÙÀÉ[¼ÖØO~ÒÉÉͤSÛ4tÀ/.­ãÜ¥3³¼i—ÎÔqG ÛB\ÏvR,·³³5;à:9à5tÀKì€ë¹c¹«ã,éí=Å8àõ! &ggçÕGx=^s³üÓ?^°ÑÖ×Èv§¸“?á9àSÃÍË;h¸]’`ê: æ_¿yvLj¶Cõ|R5byr_{Õ’WöMÉm×hÔEL}@‚9›V#yŽ#í;îX4à¾û:.÷p7UñJ'wìä}‘SïI0õ¯I0ÙC5*ç€Wίœ^9¼rxåðÊ9à•sÀ+ç€Wίœ^9¼ÞwNê…^’`LÄæB}âÇùìâWþáǹìb‡Ù…“£ìb‡Ù…—ƒìb‡Ù…“£ìÂúq’áÉÛ§M¶'oý¸½n@nŸ6U€—ÓäÇÕÈ;1¡·Û‰V+w~\µ­ûÊ}·~œÏ*÷•ûîü8—U¦•ûîý¸ûqø¾{?n)«ü•?"Á؈KÏê¸)«ü•úq.«Ì(«tò‚²Ê‚²J/GYå% ¦®“`æ¬ÒËAViê¸)«trYe”Uz9È*¯I0õ fÊ*½d•¶ŽóY¥“7Uz¢gA÷½¬òšSïI0õ«I0ÙEžÔqÒO´Ä,ÿ¬ãdëãµD‚©ë[üϬ²L¦R˜U&“ù¬}"ÁDÜè#Ü»ûŒLYe1͇kL}@‚9ÓùŽî²JM9Î*áÑ]Vinž´Çë ÈžÆk‰S‘`JQr—U–вJpô)«Ô…ˆË(âdéWžD\ïm«µ|È?I0E"¨Æé”¬±Ü¹ÚjäOº‚ä¦K\ÍFfçTçM”0â¶ÝzÎÈR‘ÜdböÒÖúˆ/wâˆ;?“ÜvÈcöÒéä˽;ÐbÐ»Ô ~»çÐÄHO Nî@î€ yÖ†w:øíÞ°^®~\}ˆ±ÉÞ›xq²©L,–alŽ4+vÀµMÆJqÞÂ6×÷ŠäÝ>Ñ$vÀ«¤Ê}ÄÕ;àG†ŠäŽ‚³¼K|馈«ÀŸ±8â¬#æ#n¯±ÜGÜx.à·{ˆŽ",›)⬅í"® ¹‹8Ex¿}Џ•w\E‡<ÙSpä ƒç‡š8Ë?b¹)ꑺ¦¸hÈÛçÉ·×vÛËÂíµÄŠcq–>Ë?6d8ßÙnÈ8BüʼÜeX±ƒ£»FF!äåøïèäÝι!'~xèämêªÝœüßÒ>–õVÐÉ¿—ö9>¢-ÇÉK®±\ܤGÓ`KÄñ*Ó 13‚-Çÿe3Å|­çëýå¬ 5è”–ñŒám}ºh“ìu–G‹Öðq좭)»r-×`ÑQ][ŽåÙvaì>ÃI9K`pt·hK ÈDéÜ~¥à·ÛEÛí¨¿E+g¥»÷Xnm‹öÄ· +/ÞaŠíÙØBWÞa‘í•så놮¼é@å²å¾°h+·heeÑZÐÉ–z埠“ÍdÖi8Ñ3=–»þ—Ü4{å :ºëõN²n]¼»5oV]·@+›¶{¹ƒy™ûnœ†£zŸ8)#rν…ŸNC:IUèètrnÈ@'‡ô\Í¡Ü8 GÈ´÷T›œ‰?ûöŒFNÃ'gDNƒÝpi†QàÑ­ÓÐíÑ“¹ï}÷Ý: GÄ••ׄ€ˆÃ “yÊe¨k¯‘ÓÐömX;ÜÉ»ùéɘñ!w!wû5­üí4ä“•ÜFÜx÷ŒÓ ùøñ@îr£¹k6w ïÖOhŸƒaÿµtn}GwÈH+?i¬»6pãÔÞ÷=oØ>óqF´§æp0Lì w·9 Wò¾ÈÃІ¶XÝ>ÒFÛfy:9ž]‘ÓPÛÖ$–´5Ñ<γŸ÷trX{:IGän0ÌnM4NÃë¸Õ#fDNÃqüöÙ…¹:y?¶ “tààÉ¿çégvaŽ¥áÑ­Ó`#Ã: çíäÌÔå¥+_Е·™/>y›ùº“/¦ÞªðèÎiÈáÞÂ`0l< K~ÂçAÄI+[Km–ƒa½— âN°d•Xî½=‰F1ûÙÁGwƒaÕLø¼#®n%MóE#ôö²™/ú»t¥”£€W ·¡M’-“³mf/‹“ûÊìey'PuSQptW,æõ=ó9‘Wc¹÷ö²ÆƒaóL݃a%ööƈïûìí…£˜Ç¸ƒ£Oƒa%ôöŽ|Ü÷ÉÛk ×Q¹†ÃlÄ¥,׆)vT®í°\q‹Â—k –k#nQør-ÁrmÀ…)×2,ל•k–k#îpør­Àrm„Ž©\+°\¨ÃaÊ5:ñåš“ƒrÍ6H>ù8aƒÄñq–k4Hl¹f$s¹6`ƒd©\(â èÄfíÏ$SÚþ+ÿh¸÷ûÓv'GiûÓv/iûÓv'Òö¹A2fí¨Ab¿MƒDÏ>:;t ñ9Ì(fÉM7íaƒä|(½ßïfóBîF1­Ü4H.î{ÚQ¹¶¯ÜwÛ ñåZZ¹ï)¡r-­ÜwÛ ñrq¿òG£˜ÓPÜ“ÉTÇýÊЉ­ã2ªãœ¼ :® :ÎËQWP5áä!f*ªã¼ÔqïÉåÉ ¨ãþ$uœ—ƒ:îÿËæ¿Ñõxye ×u8Pçå Ž3£˜WW¾¡+ßPçå Ž3 ’©ŽsòþYÇ-ŒbÞ7HR¦Êµ”©rÍÉŸ—k^þ¸\³ò/Ê5/\®9ùórÍË—kNþ¼\óòÇåš“?/×¼üq¹æäÏ˵_ù£QLqåIÄõ~FÌø ;(òFé·mŸ‡!Ç3ì :èd¬ƒN^rT{-T@KrKáι|NWÄ'¿Š]˜@'ƒŒG “Ú’¹„;çŽßÞÁo_Ä.4ðÛ¿Œ{ÐɸÅG1í¥«Þq½m¨Îòw\Ù¤Ô8âæaÈ8âÌ0ä5èdp “±:9#®µ ä¾AÒAÄíñÉg4¿r :èd<œ!§Hî?‘ÔQÄß>Eœ¾–@'ƒŒ{ÐɸÅG1½9w&ëËåšo/ùúÙÃîûÙõˆ¸È øÈMFägkñ›Œ¼›Õ!{äg_ÉMváåÆÏ>~|Î@nŸ6£E~ö°G`Ær±Žr‘Ÿ-GNÜ;w3-çfæÇŠüÿåÚCÓ6̳î]®ÉÖ[7Î6Æz‹@'é|Ú4 o†ÉÙ%äR—.%$·^~éQ¹v%ïû‡üÞÏþ‘G¡d͹…Àò~vÝfyägkäg¡%›Är[®Ó®A¹–N47’û¯Â„ “tnqåÓ‡;*ð³§–9€ÝÚ]øä]¹fOþý*;ʱì¼Û~s:Iå$"Är7?\wègW ÷}pÏÅ•/èÊ—¶ròtRcÐIò“õVî?ÜaÞïæÐ§Ÿ}þíÙ‡;œ«ú$â?;Œ¸u?;ޏe?;Œ¸u?;Œ¸u?;Œ¸u?;ޏe?;Œ¸u?;Œ¸u?;ޏe?;ޏe?;Œ¸u?;Œ8ß Á×AÄ]}¸Ã1#î#n‡IįüÓ]³IÄ“'GIÄ“/IÄ“'’ˆÙ]Ëí|†¹…}¼Žq×Ä¿¤œ|Ø£›—”u׎Į7 7︱¥Ð]Ãrë®9¹q×.î»s×\ò¸¯Ü÷”Pò˜Vî»u×|ò˜Vî»u×¼FܯüÙg’µ •kSVù+Ü5ܵ)«tò‚²Ê‚²J/GYeA¹“WÛxwmrYÂrÍB¡Ž•“U¾Ëµ9«ôrUš*JÌœü]®sct×*ƒ¬Ò‚N.®|CW¾µ•“o «´ ŸU:yÿÌ*ïݵ…ríD”?JÏÏd×Yþ‘<ÊÖT£r­œ´X>üˆN ’ÇãíÜ8ºKû®aò˜‡7¨@òXK’Çóþd ·}R;H;ûä1õ8y,É]â¬=Lë¨=–»ä1KŽ“Ç‰’Gˈɞáß÷©\ÛH8ºOMæë“Çî»OS]x•eô*“¥WYyq½õ-1˃ˆ+ïKgzý' ÙÛcaÄaì :‰"îè$Š8:9s•ävÕ•-”ÏÜ$>ùEìÂ:‰"îè$Š8:9{ýµ¹+פ^¿}» à·:‰"nàˆ+(â.>#¬Uð,ât«xF\Ûö-tFÜdˆsöØè$ޏeÐ ˆ¸trFœC Uq1Z茸=>ù)âð³'Ð ˆ¸UÐ Š¸trF\Frq-T&{ E\A~v¿ý+Ð Œ8]ˆ¸Š"îâ3¦1ö/'_/׺ÿ<ç?ùG¹v~o/äRÁdG¯­Ü·¦ÌèµÉ.Îé r›¶›G¥ãRž,±|úŠsʵä#Î˳ä ¾úöúù8º§´è3çªpåÀ<ç—_:÷Õ7{éþ_®ýwNÀÚx÷òü÷ŒŽ„ñ.ײx ‚•›r­©oŽÊµv^ ·C°&a˵¾ÙÔÈÉÝØyú°!-Å"fž…Ìqöö¾ç8düwU}BnO>ƒ9o|2'iÈ»“—0dÎ.s,¯ °Žr”éàä«#Nö†ÌË¡,2™×~qåçÆU ÷¿]Ã9‹¤XîQ®{°Áú¿Ô›Û¥’£9^eû–kØáP÷}‡Ì™Gô dΦ¤‚×·¦(dμÄrr­-ìp$÷m…_ùM`•…À2›ÏÒ8»¶³ücóÙq&1³[¬’ÍœÜm>«ñ泟OŸ¹cåJø•í— srgÊî½›ÏÊØZG϶Ãa²¿Ý}}bpt÷îàu~æÕ:¸tî=\,Rj¸àƹ÷pÒà+Ûºç™Êdäo h¶ï¢÷æ³ãÁ±Ùïo9¹ùújÙ’Ùúö~¨ÈI;¿Ýü—åk`Hÿ«'€ÜÿöðË'º0¾òÉœ™ZÓl÷¬ã¸(@nzɺÕúiH•XÚÈí“¶Û¼Ûæ6ÃÍl9y÷Y^`HŸW¾Å—Î}y#…‰sÀÊ#%îC‰Êµ³bñŸëÛS4™Õ¹q¯Çòâ!ù9îp8öŸ>îp$›”*ìp˜Šçï9ŸóÉ¡'oʵóm}y#ÅDi±Üu8T£@Ϫ½‚“QÛr-/¿Ë}‡£Œ \+CÜÃJãr-õMGP®éA›Fp£rí‡/–keCWÞ=iíW›]uÓ2ãrí÷à óà åZ[ ¬ÿ?Îó‘>åêÑBæ³ù}vH¦»¦çXî?Û–‚­0'IÂÍõ;¹mÚZÄò°Æ$:úôÙ¶ôÙ¬/G?ª ›o )ÍŸÇË]âl-akH‹›'tr‡r5ó„öË ~gHËù–îû»YDÏÐn>ËçŒg,÷ý¯|¶í¼¤#ƒ£ÛfýØ[8?œÏKÄrÿ@-eáUÖÀ«ì‚‡%~–r=âΗxÞ‹Ìò{ì$Á„w¤Ý ȇ7&ÃO“”‘ܘæ¸ã9ÝCùq{þˆ8‘ÓÛKäf«k=ˆ¸TH±ÜÙc-K<’œü4?ë&I/Ýü¡ÄhóÙQ>oÓüpŠ?M æ‡Ç6ÀoŸ:ÎàÓ¤Ž ÕÈóL(÷iÒóQ˧¦.D\GåæaÙˆÏ$çŽÍ¬³ü“‡ULÏ×ñ°Î|>–ûÁ# ‘Ýç£:¹K"R $¾\ AâÊ5ãs´ã=“Ü•k5"~Ÿuzï±¼¸¢!ÄÔÿ\Sptïsä5H¦rm€‰-× KËùÍ, 7嚣ÂRîOã ]HBÖ‘\Ù¼{Ä ’Ï?hÌåÚ ’Årm ˆÃ<,qçøñ“ÉT®ýÊ?$®\³ ’Ë1–7ðM3Û 9Æzù{Ü 97¹DÀðóýaGö¸AâFÞ ’¹\órP®™I>" wuÛsÐ 9/ü'ï¾eW÷5HNF~|é’ÿ–©öLƒd?79*×l+:¹Ïî A’ìgßOÚãY•srg€˜¶¶Arä{ñ•÷Ÿ&ÝëBÄýÊñ°ÄA4H>글Lu\Fu\Â# ¦Ž+¨ŽKñÈTÇTÇ%0â긿ÉG—â_ÇÙ‰}_Ç%8b*)Ó ™ê¸F@\g'ö}—Àˆ«ã~Wݵ÷s^9ƒß® Ž³~¶¯ãquÜ»A2×q)ñuœmø:.%Ô ùWÇ-Lìß7HR¦Êµ”©rÍÉŸ—k^þ¸\³ò/Ê5/\®9ùórÍË—kNþ¼\óòÇåš“?/×¼üq¹æäÏ˵_ù#–øÑë7¶ží—ÏR‰[’G•"qÄùL‹å>âìéæ"¦y£×Ã̑£{:9úÿ#nœdF2%Џ£$s!óN >‘R â,Rêqek½+ÛˆK)œøèn~Ø­Ò{x&÷Ô<û\áµÂà #ò°’ÌûéÑÄ>>:žØOûé!ËF\}qgÈ¥]gyðŽ+£¢ˆò)â*Џ äŒ^O}ޏ`WÚs»}Î×ðw†F-Ñ®´¤0,RÊGÜ´[DœDï¸3äÐÑý;®ô8âæ‰ý8âN샷ÄÃ:"®€·4±Ž'öÓÅÄ~zÈÚüìüÄÏ>jÿ™ Sþág×ó[DQ¹v¼(&c2‡åZ­ÀÏvÃvNî<ÝùÙ­ÆrŸ]äÈÏÞÓ !òl®ÐÞ#?ûÌÈs‹å_Ü[ègŸýPpòþ;~ øÙ©¤X®~J2ð³_GFzÄ2ÿÿ·ÿ7Žßh&·Ÿ¶æ¿°ô–›ríü:»€ñctåýøq~¶û$­•»r­Ê¢ŸÁV6Ê믲—1&2QŽ^e=„©þn7ˆåm…±åZÉ{rW®ülpô©\+Ávϳb£y¶X{‹ýì<4–»W™ì5,×jOàäí«ìÜKûÙðèîUfþÿêñßΗ”ùßV9¿ ŠüìNÞ—k½ÊdëÚÁÑíëc¡"?Ý?P àÝGüìü”‡å­ÁÌùÙ™ó³3çggÎÏΜŸ9?;s~væüìÌùÙ™ó³3çggÎÏÎ÷ ’|ágç§<,ï²ä'îšOåîšK½»– ;wÍ0¼»fw‹z¹]u£wM'ƒ*‡îšÝèÑQòèå y´îÚþáñäÀ]+ÖãqîÚùprûår»?È>mªÍ=­Ü»k6÷ÜQòèåïûÞåºkR:?–ûñãºkÇ?«Èí×f´w-ƒçÝ5ÓÝÁ÷+ÆÃò`£åÚœUþÊ?ñÅ.«Ì(«tò• Ö>«ôr”U”U:yYå»\›³J/Y¥w×l^çä²J箹¬ÒËAVéÝ5xtYå_¹ö‘Uzyþ-ÖŽ T÷†ÜµN¾¬Òâ‹}Véå «œÜ5tôþ™U.¸k÷åÚi'AçQŽÇqÚ [2‘Œ°\«Ç«,þí¾\K5N}÷-£äщ|òXÁ¥›`ªIÃäñXœHî· Ö‘=Ær—<š-PSò89‹ y Iüÿv¥Åò)yì ¯²Œ^e²ô*+Ï"nç¾Y”k2êõ×X>õúôú'¬RŽ{ý¹¢^|ô¹×ÿÙ GV˜\È”0âä(«ª€^ÿ„”Š#Î"¥\¯ß}y£Àr-wÐëGGŸÊµöú“rû©Âbâý’‡•Ÿð°Žwònœïõ½~ttßëÏ åÚ¯üË; #®MH©8âZï(â€|Џ"nÂ*ˆ+ÐÏŽ>G\Àù;´—[Xí ".¹¸¦qÄéd ÆWö "ÝG\Ó0âöÙÛ #®Xoï’‡•Ÿð°ŽÔ¦ç"Î0¡¦ˆCG÷WVʵŠ"å¡Nå ܧm½äY¾¾[ôõU*q¹Öc¸ÏN«Ä»EmµwÅÃ*OxXÇë Ýñ°R yXG™Ž. ˆçaÍ8­ó°Z~-ñ°Ê2ëÕdœ_Æò7ëüœOÄÃ:å~{³D„T#¸O€Ó*A¹6á´®xX劇õïä jIþÊï©Yë¨æKŸå5«ÇÔ¬#䀼 í÷žšeýÇ ë¸àŸÔ¬òˆš•·¦@îJ©Yç°k,÷Ô¬\ÃÀ:_G@ ×Ô¬²NÍz¯Ñ­ƒ“7ç~Ôª!5KvxélDì¥3çì9¬s'MØù¤f• jÖ]`ý“Çl­×N«p8­Âá´ ‡Ó*N«p8­Âá´ ‡Ó*N«p8­Âá´ ‡Ó*N«Üã´`Äqë8­Âá´ ‡Ó*N«p8­Âá´ ‡Ó*N«p8­Âá´ ‡Ó*N«p8­rÓ‚W¹ˆ“•ˆ»Äi§U8œVápZ…Ãi§U8œVápZ…Ãi§U8œVápZå§#N@Ä­ã´ ‡Ó*N«p8­Âá´ ‡Ó*N«p8­Âá´Ê:NkÞŸíå_á´ ‡Ó*N«\à´î"NAÄžÿk‰³U8ÎVá8[…ãl޳U8ÎVá8[…ãl޳U8ÎVá8[…ãl޳Uî9[åb.¹pœ­ÂÍ%n.¹psÉ…›K.Ü\ráæ’ 7—\¸¹äÂÍ%n.¹psÉ…›K.÷sÉåb.¹pœ­Âq¶ ÇÙ*g«pœ­Âq¶ ÇÙ*g«pœ­Âq¶ ÇÙ*g«pœ­rÏÙ‚7PÄ-s¶ ÇÙ*g«pœ­Âq¶ ÇÙ*g«pœ­Âq¶ ÇÙ*g«pœ­Âq¶Ê=g«\ì(g«pœ­Âq¶ ÇÙ*g«pœ­Âq¶ ÇÙ*g«,r¶‚:.…£%8[…ãl޳U.8[w—pÄ­¼ã2UÇ¥LÕqNþ€«p®Â¸ à*€«p®Â¸ à*€«p.¢ŽKhædÀU8Wá\…pÀU8Wá\…pÀU8Wá\…pÀUî\åb‹@á\…pÀU8Wá\…pÀU8Wá\…pÀU8Wá\åÀU.¶ÀU9Wå\•pUÀU9Wå\•pUÀU9W&™CáÀU9Wå\õÀõ{òõ¯Ïð™ÌU92WåÈ\•#sUŽÌU92WåÈ\•#sUŽÌU92WåÈ\•#sUŽÌUïÉ\õ¯™«rxåðÊ9à•sÀ+ç€Wίœ^9¼rxåðÊ9à•sÀë}ç¤^8à•#sUŽÌU92WåÈ\•#sUŽÌU92WåÈ\•#sUŽÌU92WåÈ\•#sÕ{2W½ðã*G檙«rd®Ê‘¹*G檙«rd®Ê‘¹*G檙볎›²Êk2WåÈ\•#sÕ 2×]Ä%qúZBvUÙU9dWå]•CvUÙU9dWå]•CvUÙU9dWå]•CvÕ{dW½ðã*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª²«rÈ®Ê!»*‡ìª÷È®záÇUÙU9dWå]•CvUÙU9dWå]•CvUÙU9dWå]•CvUÙUï‘]õ«²Kž…~Ô,ÈB{Lrïw'/`’ÙûqEÜeXQ®°Uü¸ú ÈB©ºMÜNžíû’…ÒfSb'÷s•&%vÈ®š%1²k„~ÜÅ¥ó;R-ëãMÊG² ~»é˜¾ˆ,Ôtëœü»Ž;ÞµEu\9òùŠä–sb˜¦ŽKílÇònÐbLäŸ^{Ø«ü•ß#»ÖQÛÕ‘a`™+ä‘]È'dWØ 9OÉ{¼«fBvMØ*È®ˆ…÷*iS$w%‹DF÷‡ äÙUrX´³0°Á#»ŠÆò Ù}óÕê¨9¬£¨3$>Ó Ñ/m4{é,²KfPœÄÈ®Øè>9)à·{¨†}*ÀÀú'g]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%÷È.qDÜ:²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»äÙ#®r'+w‰ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—Ü#»`Ä ˆ¸ud—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„CvÉ=²K.–…Cv ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—Ü#»äb`Y8d—pË , 7°,ÜÀ²pË , 7°,ÜÀ²pË , 7°,ÜÀ²Ü,ËÅÀ²pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ì’{dŒ¸"nÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]rì’‹-Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²Kî‘]r±E@8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„Cvu\B3'ëÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]Â!»„Cv ‡ì’{d—\lÙ%²K8d—pÈ.á]Â!»„Cv ‡ìÙ%²K8d—pÈ.á]rì’‹-Â!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²Kï‘]zá€+‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.½Gvé…®²K9\9\9\9\9\9\9\9\9\9\9\9\ï;'zá€+‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.½Gvé…§²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»ôÙ¥~œrÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìÒ{d—^øqÊ!»”Cv)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²Kï‘]záÇ)‡ìRÙ¥²K9d—rÈ.å]Ê!»”Cv)‡ìRÙ¥²K9d—rÈ.½Gvé…§²«=Bv¹Öǯü“,ä#s³¥q¯@nKàdÉBbçîöË‹‚‘ÔKdW{‚ìz¹ˆóò ŠÐÚLWœ|µè€lÉBö·k'/î·›mÔ—È®öÙuî{ØÁowì­šRè÷·ÿ—w=‚½ÿ½"º›)m¿=ŸtðÛ›¾ls©¾–]í Ù…Œ‡q= ™cÝ´Yþ2纉Bæ<ýä~ÿûCæì™År2¶K| ãjO`\Ÿ(°0d ¬Úý2uË@ÞÝ®†Ìù¢‰å6dl-s ãj`\gÌ(8ººö~M!s>ç‡~®º)dÎ'êØJ2gç$ûnBæ\ôaëãÆÕ.`\aÿ¼ï7UËîcË[ØK-ÚÇfˆf[>MåiwH*çsÈÇusÓNÞï®á>¶O`X‹ö±9`Ø;ªÉÓ¬¼Ø.¾Ö¤þêäö·K¼íxÇíàä=skDûØšl¥"¹ÝQ$f#Ú_?õetòï~ªˆ8š}lãXÙÉ» “¶›}lç¼NÞ1·†lÈ7û'BrWFÜ8S£YDœ™ƒ³w¬§Þc¹‹8I9ޏÒÁÑ}Ä%#Nv _ˆ¸ÔÏÔÈmdjqçîGå.âì.:qMÁÑ]ÄÙx/n"iòûˆ;ªÙ3’<Û÷] "NÎWQ¿ýqGdØGå;âZ=a\@î(w’ãˆÛѪs—–"®r'+瓈Þgù'sËm8¶Ì­Ü6åÎ?9^¥‘S}¾ÀÑ= Ƭºæö+Û€µò8²–¹•ekàä»C$ç¹u>Ãs,·Ʊpú+bnµ™øÕBæ–%~Yæ¼ts«DÌ­|Ë£r­…PòOxR‹ÙÉñÄñ4>éäÝÎ?™]O:IÒ6ñÆÂr­n†7fØÉ½oÓÄq‹œê¼ÅÇíXtàäÝÄq.a‡ãÙw8ì^mó¤­{ÛÜ>ió¦SËñ •XîÙÉñÄñ9W.Ò\Y[Zu­:q "îjâØÍ¶Çç®×‰~Ô¢.~)-œ<÷ݦX>|™>B§ºwGwNu*!sëHvÁÑ­SýÓí&ŽÓ¾å&@n'Ñâ}l?(ïË=! G]üGšÀÉ{Ší0`»øg¸ƒ£û‰¤üÙů»žHfðÛßOZ=Þ¢‰ã³]X€Ü³X4˜<§jÝΠ‹Ü¸ŽŽ>q£e!∸«‰cÏÜjOgCê,fCìçº_ó-–O³!emâ¸qÇmyâøg6ÄŸ{q?\ïh6äx€§˽oÖÛÚÄqã&ŽÛ£‰ãì¾NÐÈûi%‡¾Ù9£/›yâX×&Ž7qÜî'ŽÛÅÄq{:qìùC:'Ÿà¨°sâê¸Öq#îœø:.Á:n€Î‰«ã¬ã蜸:.Ã:n€^¥«ã2¬ãFÜ9ñu\uÜWÇ•±ré*¨ãL¯r®ãFÜ«tuœanÍuÜ;'¾Ž³Ì­©ŽqçÄÕq–¹5Õq#ÖqE\Áóž¹õ¨sâë¸_ùgçÄÖq¶sâ3j'o £¶“i`yøo¨Žsòê8Ó9™ê8/uœíœø:ÎɨãlçÄ×q^ê8Û9ñuœ•»ÎÉ3·¦:ÎËQ·£:Îɪãªã¼ÕqieÕ¥ü¸Žû•?›ñ÷ƒê:'s—Àlˆ¯ã2ªãœ¼ :® :ÎËQWP—ðlˆ9zEu\³!®ŽsWÇ9¹€:ÎtN¦:ÎËAg;'¾ŽKp6ÄÔq“:.ų!¾Ž3“©Žsòê¸wçd®ã¼Ôqv6Ä×q ̆,Öq¿òg3þ~P¨ãR¦ê8'^ÇyùWÌ-¢ŽóòÇuœ“?¯ã¼ü+æQÇyùã:ÎÉŸ×q^þs‹¨ã~åÏfüý¬w{4q¬mšñ{•GýÍøO!,aÄK¾I8q\GGrO’Ï!ý£ió~ 7[k0¤š÷­7 Oæä[Š6[Ÿ!(7'¼/#êU?rÕiʾÅÔ«xÊþµÍ¼±pÍÛg]ó[š·G„ÝB·9/Z8¶q1&ï±U­Ncòñ¢-ñ˜üϲåÓk"…¯‰sÕy¿{ÎãAíö/Öø9VéÑœû¹l횯ð9?¢½\?Ë6¹ÖxÑÖÿö ªŸ‹VcyÊyÑf G/h¼hñäC]™|П±Å>ìî:fÿäŸ>l±­ò¤öäÞèÀ‡ÍÄ“Ÿø°38ª‡Õ„G¶È6Q¯zPMW(‡>l;òÂËM5qd=ôaõÈ™ÀÉ‹ÒßSèÃ~‚£zXMØ=úö+s*’›û.5öaÏeJ,7ÕD9~{L~ú°°{ü Ûû°xÕu´êÞÓ¼Û~û(ûïÿô¯‰|ž•Ìò šPèÃö˽~ûè,à[rÿµ±|Xpôɇ ¾}tò.Ä}eÎÉÍo[¼±§múúPÞ2y ¿}4‘Ú½Ú½›ÐÑ3úòÒß“¶K.ûn^RÇ9–Ї=r–ãË]5Q¶(³: ø}G÷“#$?“‚£WDìÆ×@Ä]|û({?®s>lç|ØÎù°óa;çÃv·íœÛ9¶s>lç|ØÎù°óaû}ýÞ/|ØþðÛGÓG-ú#WÈe•¿òè¶ñ<­¿;yïwï ÍÖF]!ûö†²J'ï «´®Ï*½d•ÖòY¥“UZWÈg•^²Jë ù¬Òʽ+“Ÿ¦¬ÒËQV¹£¬ÒÉÊ*Ê*½e•ieÕMß°]É*å¾Ä’ý×HžÔqSVù+v +t…zŽåe•e•^Ž²Ê‚²J'¯è;0e•^²Jç ¹¬ÒÉd•ÞÊœ¼ ïÿÊ*\Ñw`e•^²JK~òY¥“7Uš:nÊ*½d•®ŽÛçïÀôxžv%«ü•?úKöîÀìrŸÜÈOe•5–ôÝæKòSçÈOý ù)ÛçÜ‘Ÿ´ÇYeÎàèžüÔb‚ïù©sä§þˆüt„8úD~ª «ìñ²™²Êð»ù©sä§~O~ê®Pø%–ìBýYƒ½N_äè1ù©‡·å:Ù:=æÐ$A ö侎+Qƒ]¶ÑR(ŸB&Ï9ûë{‹OÞ!x­cC¦å„ä®ë±+$Úr,÷ì%Ãb™ì5–ð¬›ì½¹Ö­$f-Zü1“ìÛûmž<ñ¢mM‘+ÔcùôšÈhÑ*÷»çüHG®šã£{úQi9ê×ËVâ£gÿ [cëxW(e ÷Ϻ.ÚÚÁoŸðE;´2ÁÑ xT΋¶9zAãE[Ñ¢ÅßÉžÅ2žñ‡ÜfÞò?d\!7 \‘Ü}ØÁ,ZÇ äŽ?” àÍ¡WGöà‹F̲›ûLZÝ(²“»"ÔrdÅ6£ ;þÙÄíùCn ¹•{þPË‘+t<èÑÑȸÿÆÊlYÜ ´“¿ûè›ùpÓ¦2Ž” ]º7Lå#)¨&Žƒë~{·{ÿ«IÈߥÐÜ1û•ßSŠÆCJÑú€RÖYpe wejMXÉ}S<ƒÀ²; &JÑDê€Rƒ½.äÉMæû» «˜¢;J‘ß’A`¹âžRÔÀ•Ÿ(EØ+ýDõÐÏG`Iv­èV/ÐüþíÚÜîŠÖÏDyø¡cÕ ðÛ'»µ/Ö?yÌ2z-዇/¾hpø¢Á዇/¾hpø¢Á዇/¾hpø¢Áá‹Æ=¾F\·Ž/¾hpø¢Á዇/¾hpø¢Á዇/¾hpø¢Á዇/÷ø"q•‹8Y‰¸K|ÑàðEƒÃ _48|ÑàðEƒÃ _48|ÑàðEƒÃ _4îñE0âf•«ø¢Á዇/¾hpø¢Á዇/¾hpø¢Áá‹Æ:¾è¿¦ÙÁT¬ü;|ÑàðEã_Ä~Èï)Eƒ£ ŽR48JÑà(Eƒ£ ŽR48JÑà(Eƒ£ ŽR48JÑà(EãžR4.¦cG)Ütìà¦c7;¸éØÁMÇn:vpÓ±ƒ›ŽÜtìà¦c7;¸éØq?;.¦cG)¥hp”¢ÁQŠG)¥hp”¢ÁQŠG)¥hp”¢ÁQŠG)÷”"qEÜ2¥hp”¢ÁQŠG)¥hp”¢ÁQŠG)¥hp”¢ÁQŠG)¥hÜSŠÆÅ<úà(Eƒ£ ŽR48JÑà(Eƒ£ ŽR48JÑà(Eƒ£uJÑ}¤ ݸï(Eƒ£ JQ]Uq«®jqË®jqë®jqë®jqë®jqË®jqë®jqë®jq\Uq«®*ˆ¸UW5Ž8W¦ãˆë â–™C÷wÉú;ùï˜CoùWÌ!#ÿ†9ô–Å2òo˜CoùWÌ!#ÿ†9ô~X}Å2òo˜CoùWÌ!#ÿ†9d*T²Àˆû•Ì¡GåÚ's(.×–™Cq¹¶ÌåÚ*s”k«Ì¡°\[g…åÚ:s(,×Ö™C \[eEåÚæPP®õÚ8þ¯× s(.×–™Cq¹ö›UÞ{< åÚ™žìZ$«h!˜<®¡…Pò¸ˆ‚ÉãZ(L×ÑB y\E äq-’ÇU´Pœ<.£…Pò¸ˆBÉã"Z&}áU–Ñ«l-ô(â>ÑBaÄ­£…ˆ[G Árm -„Bf-†Ì:ZÕ[‹h¡pͯ£…â5¿Œ ×¼G áE[Т]E =]´Z,ÚU´|M¬¡…à¢]C …‹v-?ç—ÑB -·ŠŠí2Z.Ú5´\´º°h+Z´«h¡–î‹[,vOç9埓ƒó &i³É‰“;6P“­HŽåþ%UMÖßÌD^óx#·•n7C°†Aâß°Nîà>0H¶¶ƒß®`oú"¢G™Üwpô7DdìçküõIòÃyˆåoˆÈÉË!"åˆ÷ NÞäÝGrmܵ–PoéW~Kçy¶6‡’ôYáu4æV•m×Xîñ:fkâ^'^›ˆ“‡M½Üñqrž:‡òr,÷| KÊ>N¼6=çïäµË–ÁÉÀM;Î1"G¥ZœA•õù:¥þZÜ„kÓnðÚü''7÷‹öpówòßnÞò¯7Fþ àæ-ÿ pcäßnÞò¯7Fþ àæ-ÿ pcäßnÞò¯7Fþ àæ-‡€qDÜ2àæYÄ}n@Ä­n@Ä­nPÄ-nEÜ'à&Œ¸uÀ ˆ¸UÀ ˆ¸UÀÍ“ˆ 7QÄ=ÜD÷pFÜ:àD\ZЏÊEœ¬DÜàÆœü7€›·ü+À‘¸yË¿Üù7€›·ü+À‘¸ygV_nŒüÀÍ[þàÆÈ¿ܘjí˜Ä'0«\ܬ”B€sòßnL)ô àÆÈ¿Ü *pcäßnL%õ àÆÈ¿Ü€&Á*àÆÈo7óŽI'ÿ pcäßnâ:έ:q "r"ß,DÜùÆœü7ä›·ü+ò‘C¾ù“G¾1òoÈ7oùWä#ÿ†|ó–E¾1òoÈ7oùWä#ÿ†|ó–Cò ޏ"n™|ó$â¢ÍÄÍh&nF3q3š‰›ÑLÜŒfâf47£™¸ÍÄÍh&nF3q3šé~F3]Ìh&Š|ó¬sòA¾‰;'Ëä›°s²N¾‰;'Ë䛸s²L¾‰{•Ëä›°s²N¾‰;'Ë䛸s²L¾ {•ë䛨sò€|vNÖÉ7açdµŽ(âVÉ7Ï:'䛸s²L¾“UòMÜ9Y&ßÄ“eòMÜ9Y&ßÄ“eòMÜ9Y&ßÄ“eòMØ9Y'ßÄ“eòMÜ9Y&ßÄ“µ:îWNožtNòMØ9Y'ß ÎÉ"ù&윬“oPçd‘|vNÖÉ7qçd™|:'«äÔ9Y$ßDD¾™ë8'ÿŠ|vNÖÉ7qçd­Žû•?ùë„Äa긔©:ÎÉ¿Bâ0uœ•‡Äaê8'ÿ ‰ÃÔqNþ‡©ãœü+$SÇ9ùó:.¡™“e$ΣˆûDâĽÊe$Nq8QÄ=@âD!ó‰…Ì$N28áš_GâÄk~‰w /Z8¶±ŠÄyºh'$X´«HøšXCâÀ×Ä'|ί#qÐs~‰:ä«H°hW‘8pÑ®!qà¢]˜îKxòa‰“9$Næ8™Câd‰“9$Næ8™Câd‰“9$Næ89¨&ü®æK$Næ8ù‰ó+Ï>l~æÃάœÌ±r2ÇÊÉ+'s¬œÌ±r2ÇÊÉ+'s¬œÌ±r2ÇÊÉ+'s¬œ|ÏÊÉ>læX9™óa3çÃf·͜›96s>læ|ØÌù°™óa3çÃf·͜›ïë÷|áÃfŽ•“9VNæX9™cådŽ•“9VNæX9™cådŽ•“9VNæX9™cådŽ•“ïY9ùÂÊ+'s¬œÌ±r2ÇÊÉ+'s¬œÌ±r2ÇÊÉ+'s¬œÌ±r¢:Îe•׬œÌ±rò+ç.âŽ8}-At2ÑÉD'sÌAt2ÑÉD'sÌAt2ÑÉD'sÌAtò=D'_¸B™ƒèd¢“9ˆNæ :™ƒèd¢“9ˆNæ :™ƒèd¢“ï!:ùÂÊD'sÌAt2ÑÉD'sÌAt2ÑÉD's|ÑÉ®Pæ :å ¨äå7óþ“q?9ÚÿsÚ:dþä?Èï1‚èìàèDç}ôÚ\Þ @ÞÁî<)&§íèèRíõMàè¢Óͧˆš¹tR¼û¹×÷²)ÿ_4½n=åXÞê_rÊ#ˆNGŽî :{ƒ¤‘ä@%ÏVÝ˹B¬º3à£Uw¦•=–›UçÚ}§J,Ÿð8®º#¡¯@Þãn¡Yu'¿H4–›Uç²JÇ9W±Üáq^[ŠVÝ9¦‹äLTÓǪ;—]s;r´ê~ÐO&âLx’ À•ï®/à³xGiþ!¿Y›eamÚ%‡¸ôY09v°³dª±<§‚ÝY’}'ÛÉ{¼´íÎ’zÜ7ptç\sôœ\X"ycò¶âÙFɱ¼øÙÏpgI­:ùÒãȰ;KúÖÑÑÝˤ™£WKJÝö–¶¢ÑÎ’ãZvpt±T ©ÑÎÕ±¡+ozKÒížž¿§Âñlüà•Ï%ÇÛÀð‡ÞaQpÊS&GrH‡'Zgyq%¢àœƒÌÖv«(â’½#®ì~ÙÔ8âÒɇŠ#N{¯ø= f#.¹¼ÛËÝoo'@øÄg>ïˆÓãÒ¡+o"®X„¢¸O|Qq_d¦rò‘<‚ßî"®€‚ó*go ÝE\1Gÿ‹8mýX$ÿûíµÙŸ{¹Æ8é:±Ü¼‡u+,#®r'+§ÉwJgy°—ëe¶?š^rîOhåͽÆkHÁ9Êoé@î¨SpòŒ±)1'ÜËõ³l3ûߺvâé†VnËôjÖµ;3 pòýß{LÁ9ÛF¡|¢à˜ç¼]6ǪGòìÆ3zàÚÕÖ¶ÈÍ“¶&{t3•ÓŽ¢CÜûäéwõÇ«S€ÜM_ЬM_–Ó—G^uÜl w>ù(¡OÞàÑýô¥9ºÉmÊñÀH@žÝªkÓ—åÉôåIrU ÷ÞQ ç§8zEÓ8â:ªã.(8É!=žuN|7@çÄÕq;¬ã蜸:.Á:n€^å ô*§:n€Î‰«ã2¬ã蜸:.Ã:n€Î‰«ã ¬ãèU&Ыœê¸:'¶Ž³½Ê©Ž sbë8Ó9™ë¸wN\gz•s7â^¥«ã,gªãFÜ9Y­ãЏ NrÛ;'¶Žû•‡“uN|çä ÔqŽìê8/uÜÄàèâj#®7$ïnÕtq`ÙLg– Ž8á È]>oÈÍ—ü¡ºÎÊ£œŸ›òlÃýLíxÖL&r Þqy+£Æ¸$ptç€÷ž_Kü¡ºÎ:^rÕYNžmX÷`_ÚpŸ>àSƒwÜñD*~¶NJEr·¯EùCõž?T/ðú?4„*ç€Wίœ^9¼rxåðÊ9à•sÀ+ç€Wίœ^9¼ÞwNê…^ò‡voëÔg~\Ÿü¸úq ùqóÇ *øžgìǹ¬ÒËAV9ùq ½ƒ¬Òúq>«ôrU:?Îe•N>@Viý8ŸUz9È*ç²J+w~œË*w”Uz9Ê*w”U:yBYeBY¥—£¬2¡¬ÒÉóã¬òWþˆ?´{_æI7e•¿òˆ?d²ÊŒ²J'/(«,(«ôr”U^ò‡ê:hÎ*½d•ÖóY¥“ È*½g³J/Yå5¨®ó‡æ¬ÒËAVù®ãæ¬ÒÉÈ*M7e•^²ÊkþP½çÕ ?®>äMŸ•x’Už‘žfùgViá ×ü¡úˆ?TÊäË€¬²T”UÆGŸ³ÊÀ8ÒJÙ,+=ÇYåùTI¯%þP}À:÷d&pò.«†•î²JxtÏ2GwY¥nȳ˜é¯%þP}Â:^Ü}zÒvU¢£OOÚ¼qEœ,½ãʳˆ›Ôü!øC1Êåtr,ŸÜÜArçÔÜ ¢Scw Eßؤ2#¹ÅÕ°srºyÄòÞïÞZÜÕqG\ï]cùDüª¡;œ7QâˆÛr A2g!….wZîÀŽäθ`ÙLî€Ý^/ü¸úž´{cåaÄ9Î\Eg6ïO×4–ûˆ³¶‹¸‚ä.â9ཆò9âB¼nmGrË^2;‘}Äå_:qζW’ÛˆÓ8à}ÂVˆ‹z•GÄí##¹E7Ùñ‡.¸ðV‘ÜÞ÷,ÈËfŠ8‹ð©~\}H~šØK‘Ÿä ùéü¬£ÆrG~Úkh¨³¦@î7:ù%ùIžŸäüÄ^,wä§½‡$×¼%$WÀ|¸&?É2ùéÕjÞ´€£¿ÉOûùiÃþY “‘ÉߥP*–wñó¿Äí¾_ù=Jò¡RŸå!*\›?_1Œå–u>¼€Ù«@^"Ù󡊹?ùhmżÕXnùPÿßßðÁ‡*ÎìÍ`mžç­Í³[N^ýžžh¨çuÔKèä êÕ-Ü”éGÁ“€Ü–éç9.¬Íò˜"õZG Ž%8J8p”pà(áÀQ£„G Ž%8J8p”܃£`ÄqËà(áÀQ£„G Ž%8J8p”pà(áÀQ£„G Ž’{pŒ¸ÊEœ¬DÜ%8J8p”pà(áÀQ£„G Ž%8J8p”pà(áÀQrŽ‚' âÖÁQ£„G Ž%8J8p”pà(áÀQ£„G Ž%÷à(¹›%8J8p”pà(áÀQ£„G Ž%8J8p”pà(áÀQrŽ’‹±YáÀQÂÍ 76+ÜØ¬pc³ÂÍ 76+ÜØ¬pc³ÂÍ 76+ÜØ¬pc³r?6+c³Â£„G Ž%8J8p”pà(áÀQ£„G Ž%8JîÁQ0âЏep”pà(áÀQ£„G Ž%8J8p”pà(áÀQ£„GÉ=8J.Õ…G Ž%8J8p”pà(áÀQ£„G Ž%8J8p”܃£äbP]8p”pà(áÀQ£„G Ž%8J8p”pà(áÀQ£„Gu\‚3'Ëà(áÀQ£„G Ž%8J8p”pà(áÀQ£„G Ž’{p”\ ª Ž%8J8p”pà(áÀQ£„G Ž%8J8p”pà(¹GÉÅ ºpà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽÒ{p”^8àÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8JïÁQzá€+ŽRÎWÎWÎWÎWÎWÎWÎWÎWÎWÎWÎWÎ×ûΉ^8àÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8JïÁQzáÇ)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(½Gé…§8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£ô¥~œrà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽÒ{p”^øqÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8JïÁQzáÇ)Žj·çÈOŽ<ðOþI×Ù†©eÜû][Žå¬:‹nªG™¡±\ª›W®Q-sbµÆrW˘×Ä›o£#yLŠ•¿ù6£žãŸÕÄQî¹ 8ú»šÈ'^JƒZ&`/µ%öÒ£Û{\áQgùçí= a¡\ÜÖ nïB!ý(›{:¹¥õtt{_~sF·÷µiômé¶ç™;ÜÞsñy±Ü-Z5›Q ¡æ8ùNÞ/Zƒû[´9m²£KgmiæÒ½íž?Ø@Á¢•dÙ@‹¶r‹VV­³ˆŽ`œåEd^¤Î"z¹—‰•·=~:BÍé-¹·ˆBBM)3àfDQ¶;&¡ž¼ï)š“ïî·Oœ”nÀ2À£[‹(Û£›ž¢¶p3"‹HÌŽIG¨9²‹äî·›Ž¦¥ïùÊÊâBÍ[G·„šfþ~ÖIÛgÀÍ,¢:6]yMˆ8L¨q§+©«#‘µª³<°ˆv‰6`¦È ˜#5QÒC^Üv4%E´Í+¹'‘¥h¢ï´5M'ÛËÝæ³w'ÛXD¹x†•‹#ÚTÉÉ~äÍèÊ‹¥° ÒöK¹î@n,¢ýXNäÙeíÑDŸÖã-äÍÖšcDQÇ_›û>63=ó.Úñã-ÂDã¢áÿò…‰¾…¢¡­–µˆÒ6 Å `…í³~?š5žMôÉ4W6ÀD_‰MÙ1$–O¦¬„¦l–Ž>Mô…3´G ÊgS¶}G½Õv$·}j N®aÝ%þí“ETÁ¬=ƒ£ûí ­W?ŒøÒù†u6ÓŒf†öÈ¿RrG.èÑvjÈåd/E¦¬œN5;S6G ësȲk,ŸLÙ•ä±£ríb¢ÏjÆ3B+׆)vT®í°\q‹ÂW< –k#nQør-ÁrmÄ- _®å´rò•k–k#îpør­ÀrmÄ_®X®¸ÃáÊ5G¨ñåš“ƒrÍ4HærmÄ W®YBÍT®°AâË5C¨™Ëµ6H–˵"®l Nùž5H|¹ö+ÿlØrÍ6H|¹æä ”k¦A2Õ[^Ê5Ó ¹’wP®™ÉT®y9(×Lƒd*ל|€ríÝ ™ë-/åÚ»Ar%· _®í¨\órT®í¨\sò„ʵ„Ê5/Gåšq0.äy¿«ö¢Úñt†ÖSZž5H\—h¸:.£:ÎÉ ªã ªã¼ÕqÕq XÂ®Ž³ _Çy9¨ãLƒdªãœ\@g$Sçå Ž³†´¯ã0¤]g$Sçå Ž33´Sçä Ôq ’:ÎËA÷ÿùoôr<Ä÷Ï:na†ö¾A’2U®¥L•kNþ¼\óòÇåš•Q®yùãrÍÉŸ—k^þ¸\sòçåš—?.לüy¹æåË5'^®ýÊŸÍÐzFÌx4ÑW[’YjÂ-[™§XÇC^Æ„¡f,júQ2´‘ȳ¹»{‹¶<–¶ÍS¬ã/c&Ô ŽP3Ö 5—'ï<7‚kŽ.óëxÆË˜ 5ƒ#ÔŒ{B͸˜¡Ogh=¡æ‘ p„œæY½ãJGWcùqúZ"Ô ŽP3Ö 5GÌo©äÙÕÉ D\O~Š8ã!\jG¨넚˓÷˜P2O±‚ˆÓúZ"Ô ŽP3î 5ãb†v<¡u~ö™°>ñ³Eu–~v.ÀÏ.;»r­ŽÐÏ®›…yyy7ID.¡Ÿ}!¯;›ríH¬Úòl¯Pýì“ äb[9~ök´-£+oæ–Nœi4†z%7ß²óòw¹–Ïýšä¦jqjš‚Þ±rS®õMkègëñÀh@nšCcKQ‡ãJþW®ý7tß~w~v[ ïTû£ûnn¸µêœ;/±Üåbç•o@nò\{¦ƒ£Oì™ÜB§:;¤”“»ÍŒæ5aê³åÉÍN·`£GÚJft ·=ÅºçØ©Îèèþ³ŸæèΩ.[rÏ™1jÇrÜ%–{ÆþØ3©ÖsÇw£®!{&é™íÆòêÔ¦–Ù±S}þ-vª­»ö(°> é8°– é8°– é0°Ö é0°Ö é0°Ö é8°– é0°Ö é0°Ö é8°– é8°– é0°Ö iX¶Ã«ƒÀ:;Û¶¥XÞ³IÞ¯ÉóräYÌ'yN>@’gÆ„§,ÍËA’gÆ„/䯛’¼%y^Ž’¼%yNžP’—P’çå(ÉKcEn*^ëW»`¶sÿ°zr©à¯<2»L*˜Q*è䥂¥‚^ŽRÁ‚RA'¯ tf—K½¤‚Îìr© “ Hí4°O½¤‚ÞìÊèè RAovÙTÐËA*hª§)tòRÁwõ4§‚^RÁÔP*èäÿŸÿƧ¾`våÇI^õvHòR«§3Ë‹åÓ¶’¼Žî“<ôõI^×P>%y¦3l’¼z¶ €Ü‚),zÓ¡¬¥Xîç¿ò“¼ªÝ%yMjœäMI^Ýßžàw wíÍp›üO’äS’—A’W‘Ü%y’A’×r,Ÿ•}á]”Ñ»Hü÷žµ%ÆV½éª§·é1õνoÖ›Q`= ¾D…ˆ/ýÈ“ö.@îˆ/ ¸U“ݪ'ÈŸ˜ˆ/ °V‰/ °BâËåÉûnî w¾ƒ“_ãOLÄ—(°_¢Àš– ¬‚+ùûãÀòÞ ,€R*“=€« Ø{(°Á.0°44¥dËȳ­NsŽkr•@`9Wéìkì‚+fM_œ¼ÿÖ@)Éä*Àr®ÒØÖ*Ø–.´%~å±)e)"gÔ,ÖÒÊ–gùg`‰EºT°o=–»T0mQ`ý˼»Œ"ŠŒr~4–»¯Š«ùcö[pw ÷¹œyìšYþ#O’ äîÛ—5lewÙ<þå-÷u­q2¶5 /àcµ6û™³rwòÿ^öÁ79Òf&WÝÙQšåÁª3_Þ´«îäöH,w]æžÃ.óÏ#»š½E;KÖ­ÔPî>c£«lW]õ-ò VÝ9<­ºc=(’wW»I´êÚ¾‰Æòì^&­º½Çòäö­ºŸÇùç³.m¥|ÈoÖfYX›ï B¥c}–Ï„ÊÉð‰6ºOÎyË]Ã.[rÎD{~dXÜ6j‡F “t~b©Æòl‡æÅT |¹œŸ‡rã€ì›Ùí`áËmàäË·£Ü¡}³ö“ûOXçhƒP:?ÌËý§Fô k9®)ºqîÓ¦&Ñ1„Òñ­`ÙøO›J@PùÁ ¡+ï?mšìÏÏ8{WÞ×MåhžÇØŸóoO*.â꣈{ÕcÑç>Ë?¶äåfÚvKÞØÝg†jqǪk!5¨$÷íñGœ#™¹Æ{–X#î|ž?žz[pòïˆ;!p5ЏsÇW'ï?¦¢Ñ–¼t$@š€¼»gþˆ"îÄ •XîZ2ùm˜ÚˆÛW¸tÕ~.‡[òÎOS£eãXÚˆ;‡ø», ¤(âÎÇH‹å.â,)G\å"NV"î¯w^{w¬Ð_ùlFÖ#O2¯‰wï¼ urÓ;W›²Ì¢ãa—ÜEœ¡E5·=©¹Û’g ¯o32Ÿ.¿Çþy6¯"é³è¨H÷äÞŒ41[ñ´- wæÀŒ<¿§Þz(wÌ¢“´˜‘?lb$w `Ó±“lÈ}ÁdöVÙ‚)¹™/'ïñ€ý¬ÅyQF,Ïà36' â0³ÈEœ®T<Ïy=iMgùìR¦á^Ðæ£ñãÈ›k,/6»è%ú a:A˜È]vQBØg99–»ç|Ú£ÏZìí$Zy6‹jåÃ\”ÖÁÉûç¼ÙÃá2+“trW0Õ5úƒoåþ9_ÂÆŸsà·ÛÏZXþ½û á å~óó}yó|¢U×ü\M´áç[à·wôÍq "îœ]ˆ¸ö ÇðßÏc>™åSáì®äí: ¼²÷X>üÀMÔÙêgß³¹Ý[$šd;sptorš£ÿ¿Eqîù£šyþ{Ð¥¬YÂÆ˜8VBƒ±=‚GŸˆÜ ¶¥I_¬#¤Û9˜e–OU·Ú[þ ¬|~Ç­ÍÖv>cJXÝmÖßA`í6Ö˜ç[ãÀ2󭽿ھÐ'@žMË5E•Î) $OÖ°qi¨ss»Çy8{}†ëG÷„ö uxæ&{Ar»shXÇ“ývoræè»Ÿç¾#›Dô¸u¸¹]6°vxé|`ý\º›áÏÿËok<êƒTÍç3q–Ï}zSjÐiãXÛË“­ÊFÐD篂£{™ñt•tôìQ%Q¤žo$Ïf´ôMt”ªŽ=PDMAkòãýxg£»üxä÷ADÀÑ]~\ÌÑ«ýBÓ†Ž^]U–c4‘:l€>È˸`¶r¾°{'¨†}_• ÐY¬Êêƒ@4‘¸s¥>èƒÌUÙ¯|îƒøªÌôAŽ€µçäž(Zƒ¡ìtölí'ïö¸r,ùõAÒ4Ô°Ç}#G,»y®Ê¼Tev({úNã÷AÜwM¤NŸ\Ùã>È‘¢Žðóž[UpåÓ¾`ÑD¾*órT•í¨vò„êaË©×Ñ+»õf‹´{7°hSFSb0â~åOÐD.âÒ“>HÓãÖ<Ý'èƒÌUYFU™“T•T•y9ªÊ ªÊœ¼‚ªìÿ}ϪÌËAU–*ªÊœ\@Uf¦µ§ªÌËAU–UeN® *ûëƒ|Te^ª2ÛñU™“7ôaÕ†ª2/U™íƒøªÌÉ;úޏ„#nå—©r-eª\K™*×R¦Êµ”©r-eª\K™*×R¦Ê5'^®¥L•k)SåZÊT¹æäkåšã^IåÉÓÒÎÝn}–ÏCLçœHø±Á1e%n0žãìÁç=ËÖ³¬,a`Ë‚R<ºŸI5Gÿ ¬|"bR Ö~¢ü¢ã–ÇH±Üè'j0žO·±€ãnzò&°ŽK ž=$& ¥Uvv[JÜ`<"q`aÝb¹,³Q×4÷™hŒvJßΤâ£û™Tð?Æ]–«> ¬Ó£œ†½ƒÀ:7¥Ù×–&å.°L+ÁVUptXR4,ttXæèïáÂ3²Jê@ž}B«y¼³)°$9ØA2:zF;H²a½õ´ƒKçÞXvkÖX@>VEU¼ƒ)ý)°ÀѧÀŠGÝ÷ÿå÷&t^7¡åxeÕ¡³|6¡{±ÓôÖ„>P5–› ÜΈLèìçuœÜ6{&tšœÔšÐU:uñS#NžíŒ™†&ôñ‡ N^ìx`B§®¼3¡5zGWÞsa%4¡÷m4ðÛhHshBç㎂ßî٘ЊV3¡ÓŽLè~»7¡ÍvÑ÷k"0¡ó3z8“×Ý›$?!×ìÉÿžã£éÖ$©œã¸Ic¹k²èUvîl¯Ÿ'ÿY|å¶khB'tt_|àUvþdø8y6MMèÉ Í± ¢ Ç…Ÿa;9Þ8 Žž‘ ü¶3Îß>ÀÑí«¬ËŽLhoÜdB ‹¯’ýg ŒÜ_cÝ_E×Lè|XýA`õqοçÉMœë¿ãl’,lú҄Μ 9:s&tæLè̙Й3¡3gBg΄Μ 9:s&ô}`ýý¼n‰Í9â¯|¶Ä|Žh,1Ñócé±ÜA kŽ,±sÇä*åOK,ßäˆ-±lSL'·ÚdRÌ·%6çˆ^rDc‰¥~›cù°9b?gz´Ò+wëâ&`‰%på½%fSÌåˆ^ŽrÄeçNžPvî,±¬Èm`,1‹Ö[b6Å„9â¯üÑ×:†'Ñ<¨ÊæñW>Weù,¾Zd‰ùÑÉ Ê Ê½åˆåˆN^AŽøW•}äˆ^rÄÉ›Œ™[b)Í9¢—ƒq²ÄÐÑ™RŠrD/9âd‰)¸q &7”#z9È'K ½æˆw—pÄéBÄå'UYïýÜÿ+³Üã‘=žÛÂ$ >"qO Èmƒ1<7»Qòh&¥|ò8ÛâäÑÀ›Þ Æz¾¼ÀÉ»cíaUv¼a ’'OT€É£¹Ok\•íy Teæ3©ïã‘=¦ÉMÌ1â|”(yü!³Æòà¦SòØÁóÉcØ`üIÁ¥«ŸíÍKl!y,Ok”±¬ò9°êñèQйw”—k—¦aç>¹, „uDµmoºÎ=:ºïÜ›£»ÎýQì5 ·ûÖ êÜçXžÀŒÁÔ¹ÏÈ]÷ºeÔ¹GŸ:÷=ìÜ·± ·U™Œ„:÷àÊO{û¦@¾Ò2wîÁÑëçWZ,±…ÀªÏëüvødÌ•·Z$Ç• »À²ÍoXû˜Da`•½¯Ý–9º¬4atÂÀÊE+¬ä ŒËMµW GŸ‚ñ…ŽžÁ§`|`9›¾¢Àj½£Àò)°:,í@>Æ28zýüË‚%¶ÐG<–}y{ÿì6˃ HÛ^ÿ(Íø¤øGA`ýŽ$ywò¹w~xÆ'•ˆ Ve I4ɳ`¬Ü³¾Ö0—ûÀ'•˜4"åO ÝÇÇÉXv_€°rO¢‰[äŸø¤“hìŒAA®Ò¯üž’ôhmUŠ]\¬MÉ[4`”òV&ÌQ´6Óù½Â\Ì¥pmn®Px÷“Žd[{(w”$1{ÅíÚìçÌf,wý¤×Ÿ¥pm:È’Y›zT ñ•Ÿ(I>vâ=–¯€R?!KåŠÍu³6ÿÉc–Òk ŸT8|RáðI…Ã'ŸT8|RáðI…Ã'ŸT8|RáðI…Ã'ŸTîñI0â ˆ¸u|RáðI…Ã'ŸT8|RáðI…Ã'ŸT8|RáðI…Ã'ŸT8|R¹Ç'Áˆ«\ÄÉJÄ]â“ ‡O*>©pø¤Âá“ ‡O*>©pø¤Âá“ ‡O*>©pø¤rO‚' âÖñI…Ã'ŸT8|RáðI…Ã'ŸT8|RáðI…Ã'ŸT8|RáðIåŸT.&W ‡OZo>|lÔý•3ø¤Âá“ ‡O*>©pø¤Âá“ ‡O*>©pø¤Âá“ ‡O*ø¤»ˆk âÎùÖ×W©p#­…ã*n¤µp#­…i-ÜHkáFZ 7ÒZ¸‘Ö´n¤µp#­åb¤õ.â:ªãÚ¿Ü— \*p©pÀ¥Â— \*p©pÀ¥Â— \*p©pÀ¥Â—Ê=p FÜ@· \*p©pÀ¥Â— \*p©pÀ¥Â— \*p©pÀ¥Â— \*÷À¥r1]^8àRá€K….¸T8àRá€K….¸T8àRá€K….¸T8àR¹.•‹éò—ˆ:.eªŽK™ªãR¦ê¸”©:.eªŽK™ªãR¦ê8'ÿ¸T8àRá€K….u\B3'ç úk‰Ä´Þ«G-Ò¬›J8(õ„ÄT8SáHL…#1ŽÄT8SáHL…#1ŽÄT8SáHLå‚Ätqpæä(µ_Kˆ¦'wî9œÆš ‡h*¢©pˆ¦Â!š ‡h*¢©pˆ¦Â!š ‡h*¢©pˆ¦rhº‹8š*LJªªr|¨Êñ¡*LJªªr|¨Êñ¡*LJªª^ð¡î"®¢ˆƒ~Ü Ž’Gpž½Nè& á<²ED¶sáæ-–;pÔ]¯õÁŽ BæUެ¶×PnC¦V*qíýÔ&t“„íý¼…à¨Oî”Di¡ãN8Oß&ÅÊÍšOÉ`R<œg†f €óÄà¨î”Äp›Ûj÷ýÊïÁQÏÖ¦ÊVfy°6ÓÖµy¤Î=–{s¸6ÇÒr¿6S´6•½çPîÀQ'ñ%Z›éÜ}Ë'¨YKÝ,T#ƒµyn«‰Ö¦¶™z%18ÊP¯<Ô¬ù5Cà(k5g¸6ÓÊÚü'gÀQ£„G Ž%8J8p”pà(áÀQ£„G Ž%÷à(qDÜ:8J8p”pà(áÀQ£„G Ž%8J8p”pà(áÀQ£ä#®r'+w Ž%8J8p”pà(áÀQ£„G Ž%8J8p”܃£`Ä ˆ¸up”pà(áÀQ£„G Ž%8J8p”pà(áÀQ£„GÉ=8J.Æf…G Ž%8J8p”pà(áÀQ£„G Ž%8J8p”܃£äblV8p”pc³ÂÍ 76+ÜØ¬pc³ÂÍ 76+ÜØ¬pc³ÂÍ 76+ÜØ¬ÜÍÊÅØ¬pà(áÀQ£„G Ž%8J8p”pà(áÀQ£„G Ž’{pŒ¸"n%8J8p”pà(áÀQ£„G Ž%8J8p”pà(áÀQrŽ’‹AuáÀQ£„G Ž%8J8p”pà(áÀQ£„G Ž%÷à(¹T%8J8p”pà(áÀQ£„G Ž%8J8p”pà(áÀQD—ÐÌÉ:8J8p”pà(áÀQ£„G Ž%8J8p”pà(áÀQ£ä%ƒê£„G Ž%8J8p”pà(áÀQ£„G Ž%8JîÁQr1¨.8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£ô¥¸rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽÒ{p”^8àÊ£”sÀ•sÀ•sÀ•sÀ•sÀ•sÀ•sÀ•sÀ•sÀ•sÀ•sÀ•sÀõ¾s¢¸rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽÒ{p”^øqÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8JïÁQzáÇ)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(½Gé…§8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£ô¥~œrà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽÒ{p”^øqÊ£Ú8ÏÏíYþ ç9ò–ÿ]ºÿ¤5(7©‘´Í¼ãdåèCÁÑÇ<©YåËÁ“ì¥GœprûÛ q"ïïÖG9§üýÛ«nfÕ%Y9zRpt›U–MÀÑý>è½ã~ÆÀ‘<k#¿ÓÂ~ö¯Ü©É’…Ь½(8zq{:8ºg¼üsÿƒ±Öü0dÚ9n:Ë?Cfë¶½ßþ"æÄY!ùûÒIÙÌ$³ ™º w!³‰D!“·Úb¹ ™³¥…ÌqðäÙ\¢ù)CüýÛ‹l}„!s\”Ë}È”…LÚTÁÉ»Bìß´D2{òü¹êæÑá¨J9™W3€2/‡ËÈ0dv2Ec¹™Ÿj"Âléç» ¬²X–tî,ÑYþAªÖ¥ïc+£{‰•¿3 R䯨Žä&.7Séš}lç¾–NÞ1·Ì(™an½rwP '7‹+›ªÙÇ–«‡©X¹É€²ƒ©˜*ÿˆ¸Šä݆Ÿ1,s˃⬼:ÊÝ;2ì>6=gN€Ü=TÌþÅw?Ud\yÓO­[7°43ÓOCÈmw§íá>¶|îÒŠåž¹eæbLõÉÜjÏ@.â곈KÇ}/:Ë?"î¸DDܱjd›¸SAÄhQ(w'ú©£§ö/šÇùñï gÏVŒ"®Lí@nŸ6-Џã|D 8ú;âÒùº(wçΖŽî&ÑZH¹;ÿÝÈÝ$ZQÄ%q¦Ÿ—»}l!å®—t•Ew¢IãGÀfptqåÍÔô§hÕùI4;&#®r'+÷çŸ$ýy Íò£õÈs"æV9 {,7þIÙ-$ïퟜoØÝø'u3U¾qªìM$Çònï»Ú};ÕÍÜîµÛ^SÝÎ÷G,7ÝãÚõÈ©>ž=£qÆô3NõQʸˆ3rÏÜ#dnM¯H'Ïñ+Ò1·²«³­1Žs«8¬“{LpŽœê—‚Z¹¯5ÓÊ;N@Äaæ–‹8])×ÞÏùzÔ[{å³S}ÞŸ÷šO>³ª@ný“¶…ÇÓvg/wS·¦£Y,OtFvµxâ¸äωã›G‘<Û’ÒÊ ›!mÈ­Sm“R;q¬›s÷rÇV4ËFv@Þ|%œ8þ†µ˜¹enëÚÍÈ®&ŽëBÄ)ˆ¸‹‰ãilöAƒD÷#»ø”4HN:BÄÜ:îá&5–·êjà›{²:Üeõ“×$>úÔ ©Ÿ=ÅãY|¼d²y¶³`-œ8Îc ÷Ç5rªëù@rëÖjÌÜ:§ìÜ;Õ5h/Øs$ÈMÿo êÞX‹qãfuªÏ½@n{*!së“76HÜ>uq DÜÅÄñ4ûù âÎábë¸Gܱ<4ØÇö3¸K,·¾Ùñ:Yœ8nÜÄq[ž8þÿt»ç|®álH9þí“oÖ'Ž7qÜÖ'Žÿ͆T Ï.b4ž ‘®ü4RÖ&Ž7qÜî'ŽÛÅÄq{8ql#n<êœ?|³Žå¯|îœ9„eð˜ÎIÍÛ„ì ;'#¦•Wñ%ðˆ;'?ÉcÔ«œJ¡z•¶z¯º.g_ȳ¹îeD½Ê㉴ý¯´·I–\çµöúŽðr¥A‚?ÍÏ?vÃnØžÿX,íÚ§`bIT®Þ½ï>«¤” À¡£[Š­n=윜˜xpôl¿蜤®|±¿}×¹5Õqô*}«Öq#:Î1·|7@çÄÖq޹åë¸:'‹uÜ@™[6âΕú s2×q¿ò¹sâë8Ó9™ê8'o Ž3“[uN<¶ª¡:ÎÉ;¨ãLçdªã¼Ôq¦s2ÕqN>@gi徎órPÇyZùÌÜŠ;'1skªã¼Õq;ªãœ<¡:.¡:ÎËQ—Pçäò¸Žû•?šñŸÕtNæ:.¥¸sâë8Auœ“gTÇeTÇy9ªã2ªãœ¼€:î=ã?×q^ê8Û9ñuœ“+¨ãLçdªã¼ÔqIQçäÔqfƪã¼Ôq¶sòÉSI5TÇy9¨ã|çDÑÑûã:îWþhÆš4'ê¸$TçäÏë8/ÿйEÔqI¨:ÎÉŸ×q^þs‹¨ã’Puœ“?¯ã¼ü+æQÇýÊÍø7OZ¸!ýXóÓŒ‹˜[m„3þGn2ª‡½ÊÍ ›ç|s ØŒ"ΤFndøø[(w#Ã{‡ô·VÚç¥ 6[K¸-æÈ×Ü[&‡!ó³µCÙßÚ¦)û°[xTŽÑ”ýñpñžÃ5ÿ³E@Ùß2:’{.,Z8¶Çäí•/Ïm;gød–Ø* ÇäÏE;ÍzƒE;*X´{r·h?¿Jñ;ç4͹·˜;Ϲÿ,ÛXžÐ³ÎîÙMe ï`s†[´5ÅW~GŃê?Ë6–g´Ì>¨ÏU äýñ“O>”•ɇú3®ºìÃÉâ6¹=¨&´ÚæƒñaO¼[R»˜Ž™%?ùmî^n»Ff›{r]£Õƒjƒ£Œ+ºA¹é]t[Új¢e7yjåö«’û6€+\:çÃÚwœóagpT« »Gßú°ûÖÁÉWG©O±+îceVÞÜ”W>쌭ê1ùI;ƒ£zXM¸=úý‡í}Øê¿ÿÓ ªë¨³™ØƒjâXu%ôaul{åö5Q¶ðÛGçG½«¹›«Ì=ª&Ž"Ýû°%zˤýȨEÜ~U2Ç>ì™\¥XžöxcŠ}Ë”s»4»U—cò“ÌNh÷vD<ÑsÊ·£ß }Ø߸ɇ ¿}tð-¹ÿÚX>,:zA|q DÜ…[½'Õ9¶s>lç|ØÎù°óa;çÃv·íœÛ9¶s>lç|ØÎù°ý¾~ï>lèÃNÖFà MYå¯üÃrY¥u…|Véä d•Æ àI=p…<<©¡¬ÒÉ;È*­+ä³J/Y¥u…|Véäd•ÞšéG=t…LVé]¡™üÔCW(&?MY¥—£¬rGY¥“'”U&”Uz9Ê*Ê*\g•¿òG®Põ_#yRÇMYå¯üsžÖe•‚²J'Ï(«Ì(«ôr”Uf”U:yAß)(«ôrU:ò“Ë*\AVé ¾¹‚£+È*ùIf_&¬ãœ/SQVéå «œ\¡n\CÔ«†²J/Yåä ¡£÷ÇYå¯ü‘+T}‡üQV™ÏÀ,ÿÈ*ûÙŠŽÚ}íx†¦X>ü–ßñZ"?uŽüÔ×ÉO?Y¥ »¬Òls·Ïùã×Xî»…i‘üÔ9òSF~²sV^îÉO‚²Jpå3ønó5ù©sä§~O~ê®Pè UïËô v=¿"þ!ÿ$?©m÷¹ûlëÄg'^\ƒ}þ”JqѧT~ì¢%”Oè&;Á>l}²u@!Ž ÿ4ØûbdÄ ö’â+?±—z¸æl¾ƒ“÷$˜¤¨Áހܟ|^X´-Zì Mš'‹öD±N¶NàI¥ `eζX´X™ó×H@ó!üI?Òº&¡|¢IG®PüÛgW¨‚EÛ;ûg]ü9‘*ŽîñE­"W}zP Z´Èûã'mA‹»BÕ³XÆ3þÐŒð€?¤¾Ê^¶ä–?tTʯ?$²ÅrÏÊÛ+äuptÏJ›D¹Í'ÂgÜç6¦Ò ›Í¼Å´>L%Íè¦ÂTÌ(²ËmšÛViå¾G="#õõ‰ðO`*}ß8yϲ_àÑ…Uça*•ÝuG÷0•ð³QsÇìW~O)zXœ 8°,'ÈVÕ-¹ ¬ãJ„uRŽbùð‹KÂÀ‚'ïkS•3»ßn8A&°R>r+ 7»+ÎAˆ(°yrXi ?muuò>°ÌÉûÀjàè>°öìU›{œKXç˜| öòÛ#Ö¢ô®N~¢õ…Àú+YF¯%|ÑàðEƒÃ _48|ÑàðEƒÃ _48|ÑàðEƒÃ _48|ѸÇÁˆË âÖñEƒÃ _48|ÑàðEƒÃ _48|ÑàðEƒÃ _48|ÑàðEã_#®p§+w‰/¾hpø¢Á዇/¾hpø¢Á዇/¾hpø¢Áá‹Æ=¾Fœ‚ˆ[Ç _48|ÑàðEƒÃ _48|ÑàðEƒÃ _48|ÑàðEƒÃ{|Ѹ›¾hpø¢±Ž/úÓsßJåß዇/¾hpø¢Á዇/¾hpø¢Á዇/ø¢x öC~O)ÜtìXŽý3š14–7;¸éØÁMÇn:vpÓ±ƒ›ŽÜtìà¦c7;¸éØq1Ͻ~ÈïaDƒƒ F48Ñà`Dƒƒ F48Ñà`Dƒƒ F48Ñà`DãFsÄú Ë0¢ÁÁˆ#Œhp0¢ÁÁˆ#Œhp0¢ÁÁˆ#Œhp0¢q#c烃 F48Ñà`Dƒƒ F48Ñà`Dƒƒ F48Ñà`Dƒƒ{Ѹ;Œhp0"¢\sòï`Dƒƒ F48Ñà`Dƒƒ F48Ñà`Dƒƒ=,×tKò{æÐà˜Cc™9tDV=iB±ü;æÐà˜Cƒc Ž948æÐà˜Cƒc æP<7þ!¿G -4–ÑB׿4‹<8´ÐàÐBƒC -48´ÐàÐBƒC ´P<þ!¿µBÏ5A„N9AzË¿"ù7¡·ü+‚‘CzË¿"ù7¡·ü+‚‘CzË¿"ù7¡·„ÞÊO+ôüAZˆ¸+‚9ùoBoù¿ŸøçÈUí8ïAÈÈ¿!ý“G2òoBoùW!#ÿ† ô–E2òoBoùW!#ÿ† ô–¡{+ôG~ zXÖ:(è#°Ž°GøìkVhXëVhXëVhXëVhXëV(¬U+4 ¬u+ÖªÖ²ÖºÖººX§S¸S< çøè-ÿŠdäßð€Þò¯x@Fþ è-ÿŠdäßð€ÞϤ¯x@Fþ è-ÿŠdäßð€Laó8Gü•< GUÙ'(¬ÊÖy@aU¶Î «²uPX•­ó€ÂªlVe¯e¨ÊVy@qU¶ÌŠ«²eP\•-ó€@U¶ÊU™åáˆK8âÖx@Ï’ÇP˜<®ó€>«²Ÿì±Iz­ð€@ò¸ÊÉã*%‹< ¸*[æÁäqWeË< <®ò€`ò¸ÆBÉã"&eɘYIó“Àа?Q`=Àþ€Àê šßöÖ*ö'ŒŒuì*«±?ad¬cÂ¥½Žý —ö:öÖEyɘYY›åÙÚü¤ûDkóݭͰ÷I÷AƒEºO¼6—é>詽H÷Aks‘îÖæ*Ý>v×è>pm–%cf¥›uÜÔt¿6Íþû.Û‡<€…¢ð”²ÅrOá©1…'åMBùLá 1:{u¶“›M¥É”ü£“ÝatÊÒ>Ž'‡ÖXŽv[\G«XÞíA ààtpã<®ÃŒ²« *¸t×al¡‘·ñ+¿åà<[›¥/ìYþ¹6ËØ4Z›ÇÊT ·kóäÕ¼V@6`m:M3õᑆ¹E f´6òr¹]›'pæµB¢‰×¦'јd¹Ï ׿ùÒŠQ2ÕíÞ´6M7ë%ƒÖ¦}áÁµùWN dîí%Jæßɇ’yË¿BÉù7(™·ü+”Œ‘ƒ’yË¿BÉù7(™·ü+”Œ‘ƒ’yË¿BÉù7(™·¢dpÄeqË(™G÷‰’ #n%EÜ”Lqë(™0âÖQ2aÄ­£d¢ˆ{€’ #n%GÜ2J&Œ¸u”Lqë(q«(q%ƒ#®p§+w…’1'ÿ Jæ-ÿ %cäß dÞò¯P2Fþ Jæ-ÿ %cäß dÞ)ñW(#ÿ%ó–…’1òoP2o9DÉàˆSqË(™…Rè %cNþ”Ì[þJÆÈ¿Aɼå_¡dŒü”Ì[þJÆÈ¿Aɼå_¡dŒü”Ì[þJÆÈ¿AɘúmZÄWAÄ-£dVš(sò·(™yÓ¢“…’1òoP2qïb%cäß dLï┌‘ƒ’‰[Ë(#ÿ%cZß dŒü”LÜ9q›qÄ5q_`ôŒ™' V&n°2QŒ™0â V&n°2qƒ•‰¬LÜ`eâ+7X™¸ÁÊÄ V¦Û/0âˆë¨ŽÃ_`ôð™'“>uNÀgâÎÉ2|&윬Ãg@¯r>vNÖá3a¯r>vNÖá3açd>÷*—á3açd>wN–á3qçd±Ž(âVá3O:'|&êœ<€Ï„“uøLØ9Y‡Ï„“uøLØ9Y‡Ï„“uøLØ9Y‡Ï€ÎÉ*|&îœ,Ãg@çd>wN–á3qçd­Žû•ð™'“>vNÖá3qçd>:'«ðÐ9Y…ÏD“ð™¸s² Ÿ ;'ëðÐ9Y…Ï„“uø êœ,ÂgÂÎÉ:|uNVê¸_9Ÿaê¸$Tçä_Ág˜:. UÇyù7ð¦Žóòoà3LçåßÀg˜:ÎË¿Ï0u\B3'ß<õh•Qi¢ˆTšŸÜdL³Ó‰¢Ò€ˆ[¥Ò„!³N¥‰Bæ•& ™Tš¸[¸L¥‰Öü*M´æÿQiî-ÛÀß<õ¸šG‹öW-Z€«ù»h§¡êDájТ]ÄÕÄ‹vWwÈ—q5 C¾Š«‹vWÔk¸ø ^yÒâɇ²2ùPî/ñŽc#ÇF8Žpá86Âql„ãØDZŽc#ÇF8ŽÜsl䇎c#ÇF8ŽD¯ ·Gù’c#ÇF8Žpá86Âql„ãØDZŽc#ÇF.86w×@Ä]ø°àF8V8V8V8V8V8V8V8V8V8V8V8Vîëw¹ðaå¡;Y‘o„#ßG¾Ž|#ùF8òpäáÈ7‘o„#ßG¾Ž|#÷ä¹p…„#ßG¾Ž|#ùF8òpäáÈ7‘o„#ßG¾Ž|#ùF8òÜ“oäÂŽ|#ùF8òMXÇmÒÆk‰|#ùF8òpäáÈ7‘o„#ßG¾Ž|#ùF.È7w'(âté—ŸD\ˆÄ‰Gœx¹Dâ‡Ä‰#G8$ŽpHá8rĹ[´-Zì M¬áX9±rÀ¢ÀÊœY9±r„cåÇÊŽ•#+G8VŽ\°rîmA‹»BÕïýÏv Ÿ›yEfùçôM$š£>ªŒ¬%–'[Aëç¨W¬‚£Û9êj² 3Gݽ‘êäæýÞ61G7̇Ž»Ü&•`ŽúÜ’jÜ'÷}Ú2DÝ(²“›ÜFì(²y¿k‚—®¸:Î\:3G}Îíu w³ÎQË ƒˆåêrZ 稵ÏÀŠÍQ«âV»¸¡£W7Cn§:3ê˜ý•?Ú^<óáQĽü—Ú ˆ¸#{Œ˜DzÙrå¾sR%Џ*[AòîÆ'%ˆ¸WmîiSâˆóƒÐ&âÎQä äîi3Z´sáˆw±Ü=¨û{dåqGRv¬ùäÝ ®Šé˜½#.·Í¾eœ¼ØÝ÷¹Õ8âFo@î"®æ8â†}XqSŠ9âô¼t`թݱRJHYiÇ5rçAë¾q…‹8]‰8ã€OOµ'/àió¯s’uœ$‹XþîœätæFŸ=êôƒö)@Þý#-èQŸ„G7“l'ÜLúÌì&dDŽv.ˆ}MüKJS;–MòwRšÎ+1ªž/~ ·L'Ëö1½‹vn" å¶G}özÔ£þyÞ¹¸v_‰zÔÇ¥Û<ùùùùp2ö:»½B#f>ˆ³ó¬Ü{ÐKï8wÁ|(~Ö(?èQwÎ]ùjO^\÷ =êW.c“XnŸóç.hÖ蓺£µ£.d{ôm€£{š–U²Ïùãqƒäâ®\zÔéx•XîzÔ¿›¼>zÔÍèäÝÜ,Zu9mG¯ˆ­Xí²qä@'÷—ÃõQ€£7ߟ¯aÚ;àNÞAÈ4·;o€£wߟ¯ WAÄ]Ì?4’×{ÔÚ“‡ï5{ò¶Gm)Ðïçü‘”šcùp¹Íºhšz,º<€Üöi{M¯%æC^f>œêRb'—8%~÷.Χ|å¶áV$š|8žA¹@y·ÝÜUæC^g>üíšwr›Uf3õñ~ÒžÖŽîúu]£~¡Ð‘Ü5Ò"ó!ß3òŬQ~8kTüÌÉzÄõvÚ¨ò!Ÿ#î(¿SÓµY£¼ÜÌÏ·±„X9“Mptq篡ŸWŽJ¨ ’»na8ÝÌå³F[/ÚÜî(EÜÙ GG´sÁ¸B}èÒM³Fº6k”ÍåÜ3ûNi‹]!xôÉÊ ×Q‡gŠg><êœhs$±:'Åî@óiU; >ínI¡ïÎI: ¼4ÈmWö¨Wy$•"àèbß°£…½Êã¼rrWÇÕ W™ºz´ï;'ç{x˜ul]:wó µEh¶]bIàènz_ q¢À:n€Î‰­ã\çÄ×qtNlg{•S7@¯ÒÖq»Â:n€ÎÉb7PÄaæCñ̇G_ÇýÊ?;'¶Ž3Ó}Sçä Ôqvºï“º#æƒk66TÇ9yuœíœø:ÎËAg§û|çäÔqvºÏ×q^ê8;Ýçë8+O;ªãvTÇy9ªãvTÇ9yBu\Buœ—£:.¡:ÎÉåq÷+4ÝWü˜ÖƒÎÉ\ÇýÊ?:'¾ŽTÇ9yFu\Fuœ—£:î’ù—™uœ—ƒ:îÝ9™ë8'WPǽ;'sçå Ž»f>äuæÃ\Çy9¨ãLçdªãœ¼:ÎtN¦:ÎËAwÍ|È÷̇|1Ý—N÷?cFÔq¿òoë8'^Çyùã:ÎÊ¿¨ã¼üqçäÏë8/\Ç9ùó:ÎË×qNþ¼ŽóòÇuœ“?¯ã~å¦ûŠŸòZ¸q\øžUfyÀ|¨Ñöùã9ßR®±|¸g] ¦ûÚ ÃHnVÝqƒyÚ#µHÖγrq»ùX†›³‚'?!#âÝ÷[v ;È3›ûLÄKhš«Œ#ÎÔq6âŽE×ã7EœÙ™hÇ´tž«Ì1q"Þ¼¿É˜&ã^åòiÏghWÞ'L§4›ß~,pß‹ûíKY%œ9Á£‰Å+žDÜù±‹‰ù#`Eíá¾È~~™§Çr÷ŽK*aÄ·ê ˆ¸¼Gû"ψ“,¡ÜG\«ñ8.<ù‰w¡"®–Xî#.Wq;’»Ugv&úˆkñ›"ζ÷mÄÍC¡à2 ˆ¸.Ý4Í+ â*’»ßžE¸ïSÄõ…ˆÃ3'ee椦Q9àG-Ugù§.8àþë‚VîviÕØÿä]” Žó¼ ë€'÷]!+÷³…8à‚NÞõëpÀ÷2¹À%rÀä9vÀÓì—ȯ¶{ îÓˆ½º®‘¼Ox ð„ð†~{ó|ÚØ¯Û¿½¹®ÑŽðŽîp1ï¸rဗ‡ødã–x;¿rõ!ŸßqÇåmI"ü$×X>ìWÌj‹öŒè±8ºûºM“pïÿ'm£¬Ó6~"¦U w»qýÿçµÉ.áô¾ußï¸#bRGrG M‹´ò„¶1}áÅÉݾÈf•º©ŒXîê¸ÔB$”œ8 ïñTç5m£ÜÓ6Ê…^:àÙ“ ç€Î/œ^8¼pxáðÂ9à…sÀ ç€Î/œ^8¼ÜwNÊ…^:àÙ[Zå‘ç²Ê_ù§g³Jçǹ¬ÒÉÈ*­÷É»(çy e•NÞAVéý8A'ßAVéü8—U:ùY¥óãÒìI•ȳY¥óãö™~_"?Îe•;Ê*½e•;Ê*<¡¬2¡¬ÒËQV™PVéäò8«ü•?òã&SéA7g•¿ò¹Ž›²JAY¥“g”Uf”Uz9Ê*/ie¶1g•^²JSÇMY¥“+È*M7e•^²ÊkÚFyBÛ˜¾7‘@ç¾XQVéä d•¶ŽóY¥—ƒ¬òš¶QîiåÂ+ý¸ì± ê¸~NœTåÑ$sލ‰m£¬Ó6Χ¿¦äÎîÑ$óiZ€£{Ú†9º¸/°ï¢@nW]‰©‰Ÿ´ò„¶q¢BÜeV=¬ãÎMÜ@.hï¿í˜·\ºi7îx-Ñ6Ê#ÚFε¹ûí¹ ¬}Ê*WÞq‚"N—ÞqùIÄtŽííe–´ ‰Àgƒ]šÄrWÇ5ƒÇ±î@ÎÉM-SêÞCw`wíýŒê8×ÞO '?Á:bîÁÖG©±Ü×qZbw`•ÄuœåÏ{w Æ7nªãr ÓÖÙÊ,1ë#Æ&œî¸t“;Ð; Hîñõ¸Üwï˜Ä G\F‡ý¸ì­'wÎO´¡Br“Ø÷vç-lqÉ­º"®¦;àG,–Pî#Nsì€Ã“Ÿ:';rÀ¥Çò©s" âv$w7®ñ›"®|¶2㈳V¦¸.8ka»ˆËHî"®"¼ƒû>EÜÊ;® ˆÃ~\öÈå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9Ñ{Ή¢^å_9Ã9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœ½çœÀˆ+\ÄéJÄ]rN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢÷œq "ns¢çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'zÏ9Ñ‹)/å8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢÷œ½˜òRŽs¢Ü”—rS^ÊMy)7å¥Ü”—rS^ÊMy)7å¥Ü”—rS^ÊMy)7å¥÷S^z1å¥çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqNôžs#n ˆ[æœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9ΉÞsNôb®R9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœè=çD/æ*•ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Î QÇýÊΉrœå8'ÊqN”ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœè=çD/æ*•ãœ(Ç9QŽs¢çD9Ήrœå8'ÊqN”ãœ(Ç9QŽs¢çD9ΉÞsNôb®R9ÎIå8'•ãœTŽsR9ÎIå8'•ãœTŽsR9ÎIå8'•ãœTŽsR9ÎI½çœÔ ¼rœ“ÊqN*Ç9©ç¤rœ“ÊqN*Ç9©ç¤rœ“ÊqN*Ç9©ç¤rœ“zÏ9©xå8'•sÀ+ç€Wίœ^9¼rxåðÊ9à•sÀ+ç€Wίœ^ï;'õ¯ç¤rœ“ÊqN*Ç9©ç¤rœ“ÊqN*Ç9©ç¤rœ“ÊqN*Ç9©ç¤ÞsNê…W9ÎIå8'•ãœTŽsR9ÎIå8'•ãœTŽsR9ÎIå8'•ãœTŽsR9ÎI½çœÔ ?®rœ“ÊqN*Ç9©ç¤rœ“ÊqN*Ç9©ç¤rœ“ÊqN*Ç9©ç¤rœ“zÏ9©~\å8'•ãœTŽsR9ÎIå8'•ãœTŽsR9ÎIå8'•ãœTŽsR9ÎIå8'õžsR/ü¸ÊqN*Ç9©ç¤rœ“ÊqN*Ç9©ç¤rœ“ÊqN*Ç9©ç¤rœ“ÊqNê=ç¤^øq•ãœ4ŽsÒ8ÎIã8'ãœ4ŽsÒ8ÎIã8'ãœ4ŽsÒ8ÎIã8'㜴{ÎIC½Ê¿r†sÒ8ÎIã8'ãœ4ŽsÒ8ÎIã8'ãœ4ŽsÒ8ÎIã8'ãœ4ŽsÒî9'0â qºq—œ“ÆqNÇ9iç¤qœ“ÆqNÇ9iç¤qœ“ÆqNÇ9iç¤ÝsN`Ä)ˆ¸uÎIã8'ãœ4ŽsÒ8ÎIã8'ãœ4ŽsÒ8ÎIã8'ãœ4ŽsÒ8ÎI»çœ´‹)¯ÆqNÇ9iç¤-sNþŒrÊÅ9iç¤qœ“ÆqNÇ9iç¤qœ“ÆqNÇ9iœ“x~ëC~3iÜ0WㆹÚâ0ןÑË&u@ùWÃ\æjÜ0Wㆹ7ÌÕ¸a®Æ s5n˜«qÃ\íb˜+ÓúßSKG-iµ¤qÔ’ÆQKG-iµ¤qÔ’ÆQKG-iµ¤qÔ’ÆQKÚ=µæˆõA–©%£–4ŽZÒ8jIã¨%£–4ŽZÒ8jIã¨%£–4ŽZÒ8jIã¨%ížZÒ.¦$G-iµ¤qÔ’ÆQKG-iµ¤qÔ’ÆQKG-iµ¤qÔ’ÆQKG-i÷Ô’v1%Ù8jIã¨%£–åš—E-iµ¤qÔ’ÆQKG-iµ¤qÔ’ÆQKG-yX®Á‡üNÒ88Iãà$mNògŒã Wò4ŠÙ88Iãà$ƒ“4NÒ88Iãà$ƒ“4NÒ88I»€“ÄcŽò{Iã$c´EÉßÀÒ}š¸lƒ¤q ’Æ1HÇ iƒ¤q ’Æ1HÇ iƒ¤]0HâiÆù½ Ý9ÔHçP#Ct5Ò9ÔHçP#Ct5Ò9ÔHçP#Ct5ÒïQ#ý„îj¤s¨‘ΡF:‡éó:^yý(Íûk 5Ò9ÔHçP#Ct5Ò9ÔHçP#Ct5Ò/P# &t_"ŠtÎ„îœ Ý9¢ÈXGXmÈ>MèΙÐ3¡;gBwÎ„îœ Ý9ºs&tçLèΙÐ} Ò9pHçÀ!‡tÒ9pHçÀ!‡tÒ9pHçÀ!‡tÒïÁ!ýÂë8¤sàÎC:é8¤sàÎC:é8¤sàÎC:é8¤ßƒCú…%Ö9pHçÀ!‡t2We?Ùc/i¼–À!‡tÒ9pHçÀ!‡tÒ9pHçÀ!ý²`‰õ%>Hçø ãƒtŽVešGܹÿàƒtŽÒ9>Hçø ãƒtŽÒ9>Hçø ãƒô >È‚%Ö—0 ÀtÒ9 HXÙm]b@:‡é¤sÎa@:‡é¤sÎa@údÁëK´q?sošaÚ²ÌòxÀ–²é¼WG?ç(:›wzk<@Ïíû ý½:Êٮ诀·ñ:ŠæË}BÒ£©÷sª¹ ï. wÿ™¬‚£ÛÝÿÍŽð»6e—ÎŽ3ÚÀ2cëiE—Î3îæÒ½k·£èNŽnj·zäð…=fŒgÛ÷_ÖŒ,ÏíñÊ„.ˆí™-—`Ѧ³ü)@nïû0Ô‡÷#MÏ¢Çr“„ÿL§‹ö¸qÉÝ3©y6·W 7÷]“Ù¾ÿoÑæã®õ~û{Ѧ±É^ãE[38º_´æqamKè·ûEyëî{µ­ž½•…E[¸E«+‹¶Z®’Ûž¤öäéÄlOríŽ>!+FÔX>n|ÄœÐý  ïnÊÇû:`N97ù»Ý‘›#˜ÆòQ5KrûÛ“iívï]%–û†C‰˜dz®¡£»»)Gåã!í÷V¹i,¥µÙ[åËGä®èÞ%l,¿ÈÊ“o²Å̉#æÀѧÆrÈœÈyFVŒ¨±,ÛXyM(ˆ8ÌœxM3+ãÁ¸O>W]ŸåŸã>'Ð$÷©Ç‚(@îöZìfŽî߃ú|Òæ$@ÞÍ>3&™ÜƒÊMváå¶±|f-@Žö˜Æò‘$ wåÚK´×b?ƒÈ-[ÈÌѽË—òº¹µð¶VÀÉ»'­i%ØÆòÏde,÷åT‚ÆrªçEòîÔ5h,_Éûä8â*ˆ8<îã"®­DÜû9Ÿ%oÓÄÌË/›ÙÆr‘cÑÇrûœ?nPÐX>ÊÑ3ir»ê²|2'þŒ¦[«±Üûä5–7ôØû=u#(Ó˹ËQc¹Ëik4•ÇYå#¹É¬ê2'ÊVàÑ]c¹¶¸±œ¶.@îËa™Þ·^ÁÑý¸OŽ˜íx€w$·Y¥Ä̉#±BGwå¿G_÷÷ÕŸV¯ûQ¦«ÎòÏqŸãi86å(ãjrßÿ’`ÜçxÃÉ@Gw\»÷ío`ýãÈ D€Üõ¿ŽƒGã>'?õ¿$rlNŽ’»þW’pܧxt×ÿÊñ¸Ï‘B»þWBã>º7 ÷ã>9vlÆGŸ ÑŽ>û„stçøXŽå“cÓÖÆ}k,µ*-†© <í¶D´Û¿ ºXž¼ý1'ŠnÝ0'ÄZàïND9r…<€ü½¸ò@f¼}jIDrW•娑qæ_²"î¾Iºo­mÝ1'Z˜GŒlU€Ü72̤TU™“ƒªÌöA¦ªlÄ}W•9愯ÊFÜqU™eNLUÙˆû «UÙ@}ÈœxMSbOú SUö+ú ¦*3}©*sòª²wd.«¼Teï>È¥¼ƒªÌôA¦ªÌËAUfú SUæäTeï>È\Vy9¨ÊÞ}+¹°óUÙŽª2/GUÙŽª2'O¨*K¨*órT•¥±"—ÇUÙ¯üÉ€‹¸ô°⫲_ùgÄUe‚ª2'Ϩ*˨*órT•esôã9 Ž^@Uæ·=ÙªÌËAUfú SUæä ª²wd®Ê¼TefÀnªÊœ¼‚ªÌõA\Uæå *³}_•9yU™éƒLU™—ƒªÌØùªÌÉûgUvq GÜÊ;N¨ríWþm¹æäÏË5/\®Yùåš—?.לüy¹æåË5'^®yùãrÍÉŸ—k^þ¸\sòµrm°»/×R~Ô`û8«‰YþÑ`”#»ìr?ò²iÄm,nÿ;ä'q2¬€9ñ³ÍpïÚbùs¢¤ ×1bæ„ÆÛžÒ—nuk¼t ÿŠ911'JKà·ỎpÛÓQ'wpò‹[ãÑûŽ918æÄB`•‡u~¶çCþXy a.g`Í#nq`™7XežQ‹Ì‰ßÀj5–/0'ÎÈʽ¹Ä¥ÅXàÒMeFÜ.™ƒcNŒ̉3²*8yÿÆÊ8ù)°êk‰918æÄà˜ Æú³¤–‹¯cq%;·ñWþQ|UN´»é¬^trsûYhÅW.¬½üß.»mo¾‹¯KùûOòbWvä+;²G&t:ʧ äêº50¡_}lÍ9©VnG^J LèKù»øšäÎ„Ö NÞûd`BçÈ›o,‡&ôÉH'oŠ/±6²&ô…¼ï±Ü@ŽhFƒ§$ÏËAŽh˜r;ìsÄåˆ^ŽrÄåˆNžPŽ˜PŽèå(GLcE.sÄ_ù#愸ô¬*›rÄ_ù§%ærDA9¢“g”#f”#z9Ê3ÊÜå -/|ŽÎË>GçsD'W#šªlʽ䈖9ásD'¯È”ª(Gôr#: Ë¼Ñ2'|Žèå GôÌ‰ŽŽÞ?sÄ»ˆK8âêBÄÉ£ª¬k=7¬Íò€9Q˪²#Û³Ær7úPêgòxÞõQ8úpfä1'êùÜÊÿ»À¿;€KÈœÀ'?1'jÈœFË=sBbæD-èèž9QcæD.È=s"ƒä±¤䮹ÚãªìÌc¹¯Êö’ÇŽî“G© y´aÉãOgøÖ[Jó£À{ÝÔ3q`{]%ìÜ'ïiÁª lŸ˜ *+u›ŸÌ P•õ^PçÞ2€2 ,ˉô{péV·Ækò/˜¨*‹™gç¾d ÷óT tî8ùÅ­ñ*@þs" ¬uæÄR`•‡UÜlï¯ü#°ÚÂ\ŽÀÚ½§Ë{Z˜9Úfq]1'P`ûXž·KB˜ËXàÒM5€×ì™0°Ö˜0°BæÄXNÞ€¹dïiÁÀÊÈkÎÈ¿`NàÀZbN,õÿ®œåýÙȰ_ãþ+ÿlП„µ üqòá\A`ý} wà·ýs ãO= »/ÓÈMdèÙp?PÐO¶W,OöS‰ûˆ^9çÞö½¹c-Á;ãx û=èVþ^ÚUì×ÇìÒ>M@žíÉ›'¢MÆÎ²\:×"ÿ1V…ÏÊÃU÷CCžåŸ«îl—D«îgÊ2–@ ¶«îHÎÉ}"´Ÿÿ¨–MG(·Ïã2¶m.¬[OàäÝó¸iˆ<–óe€äÝæÚ•%ËfwzH¸ê^¥›ÝvÕÕ#âÀѳow„ýããìw$÷Ew¼½/måcÕݭͼ°6í.¤ì7{ç÷9N»z¸ éå?ßjå¾@4[*,|öü$»'¢D<”óe`?õnåþ{å©|îBʹlŠ~û{uÈ <@=û}@VnVGsû€Þ«#ïGª~{¶MÐ*(¾øíîË·%_¾Írüv»KßÉÅ&c!„zòP+WûÛ-ÔãÝŠ;®iÞÁ•WûÛµD¡ßÀ•¯ö·çYÕ¡Ÿ¿=¡±¸ˆ+Ï"î%ޏ´õxß_=7±ÜEœùT¸Ÿ2y;ï\Ä©ÁˆËÁ·¦Ë®GÕ Žn"N·Þ¢}}úÒu‰#N æqWWÞ—{0úé¡på]ó[÷è[ÓÒO¤›ûÞ7stÓü>2(tßÕí…éá¾?Ù7tßý¾¿kZ7tß+øêïEÄ.ât%â̾¿Ý}ùöWþarÊ9d˜œgòØÜD§Î~„çe?íåî›Ã{`rþ¬'rßzLÎr“í²qò÷ÝÚ‘&E&g­›íÕ8ù°×%29Ïá ‡Ž²r·êŒ½ib°þkläÝÍxöWÖ× Ü÷ ¬ö'?øG â0ÿÈE\]©xþ=çS©[³ÉIµ'oÇ 4O“3•ó§±Ü62J6V›É»óIµr÷ŽÛÃÏ‹ݵÞÍ.¤·É©½ù*ßÉÅ<æ“Yuïç¼ï÷iz3&繋;=Mùì,¹#Kš®¸Ýß/79Í¥û÷¤=náQ‚KçÆIÌÀÍÛä<ÙUºVn¿5»Dûþæ/G9¹ÒŽpß_tt·ïO¢B9=MGO»Ã[ï1”z<é’è,ÿÄï=ú*Óßq–Ëmgë¼øAA¾öä¶Ç`oÜpñÑÿèL+§+ÿçü®}’ŽþnQÔ#)ì¬ßæñ˨EáÇ/ÿ=çË‘«*:ºm·ø«Lg$££ ²Öåß}?2tßM‡ckö¾;“_ùŒ®¼i+¼ï¾elî»=Mèèåó›P £§ ’þ$°tÅÄÞu–~kzŒÖQ© wÍ»6ïÊ6Ü6ˆŽËnƒ–øšÝ§ÞâÀ:Îtœµl97 ÷.jqÇyž›Mñô@‰{½ZÖn½?`r‹>Ù’¥ÇµÅ&ç‡6ƒ“wûþF÷ý•Ñ€|29ãÑÓã¥,@îš¶{§ŽºÜ÷iôTÖFOk<샌ÍZm¿ò>È‘ šÙQÇ?J`„ú ¥Døð34:8ºïƒ$ÔAGT•½û ÇÇu]GØ9ñIaçqFh¸RAçñäbdpt×Ñ ú ½€ªÌöA~vM¹¹ïj!Ö¦¢iCW^]UV"ô\‘ØI¨‚Ž^ŸWeõA ÿÈFܹÔôAæìüW {›ìÜôAND3’û>ˆ‘»Ï^Uûñ¥ôA¶¿Ý‹ "vŽn‡}wro†½ë^Jfû ghÔôA^õX@î>0¸õôAŽEw¼4€Ü}î¬õ¨rN´öPîû { ú W÷ÝöA|U¶¯Ü÷iØÛÈÓÊ}÷ü#sß]ÞwÏ?2÷GܯüѰw÷ƒ¯ë}ª,¥°2Ue‚ª2'Ϩ*˨*órT•eT8yµÁ}r~ï«Áß^@Uæ>ûÞæç¨âžUe^ª2÷ÙwW•9yUÙ¿>ÈGUæå *óŸ}‡W¾¡+ßPUæå *óÃÞ ½£/õâˆK8âVÞqB•kI¨r- U®%¡Êµ$T¹–„*×’PåZª\sòçåZª\KB•kI¨rÍÉ×ʵyØû¾\KùA`tnør_lÍQ`ÉÖJëõCCM±|€og¾+ŸÊ^€Ü<ÒŽÇMDA þÖCúÈ1µ¹3bKlB·<ÀÑ‹ãî‘ }Î4HòwáÙ·ÚBzߤ×XîÆû4…&ôqU²¹û²} Mè‹KWwpéÞm®T·TÀ¥{_g V#úgÈ›¹ïÕL,O&t«Î›Ð96¡«¢£;zX/S.LhyhB70’õA÷¢}ú’Œ=ù÷•?ŽMèË'ºFƒîGí—ÁÑ]“-UhBÇGŸMèÏ·£Ü?*ðÛÿ»?Fo›A&t©±Ü›ÐáG¨ËÖ÷Žn‹¯ó#îÀ„FG÷M6 ^eEÏpG7OÚŸv2¡Á•ÏèÊÛâKÑ}÷Å—¹ï³ Ž^>¿-¿`BË}`õ'šÐ™Ð™Ð™вÜÕxåcuÕšü÷·ÿ 8¥æ5Z8Z8Z8Z8Z8Z8Z8ú>°Îþ¾<°Ä¦\áW>[b>W°–ØùÜòæ†õXb¹ w¶"K¬¦Xîµ9²Ä´È±lÜp1öm„–˜/ ·oëó¦‘%¶ŸûÜæˆ5KLRåÞK=²Ä.Ħq_¹ï)ûî-1tß½%fîûd‰û>YbyÜ爿òG–Xó£UÙœ#þÊ?ª2Ÿ# Ê<£1£ÑËQŽ˜Q¦âäd*ÿª²ÑËå]xÚÍ“%Vj,W#šªlʽ䈓%†Ž^AŽø®ÊæÑËAŽ8[bàÊ7tåʽ䈳%ŽÞ?sÄ»ˆK8âêBÄÉ£ªìx…o9µY`ZFÏAUvd¹h,w›Þ“‚äÑ}»IPòh¾Sç“GùüíAòh¾ßm“Ç|v(ü<žÝ’%gö˜bùô ì'®¹*(y4c^Sò(=– ‚ÄþÑØÒÞ€Ü!j<ÓM¨Ê <óx¨ ÷ðÌŠ’GpãÊg{sÁ[Hó“À:–õ¦šÛ,ŸKÏ/0æ¸s_ŠÄrW•©ö¨s_‡ûô@ëÜ­%îÜ££OŸÑ`’íx‹ PòÿÚclµ(êÜW _û$ÈÌ?Ž$øGckc@n«2 uîÁѧÎ}û~ûÒ'AðÑ¿ù$ÈR`•Gµ‹KÒ‡üs3K–£~–(ûvG)q`í…'¬Ñ€×ŒŽ>}¤”0°êÌ? K¥ ,òµO‚Ìü#áøGò€tVKHn«õŽ ȧÀê °*øíKŸÁGÿæ“ K}ÄãÖç‡$šÔgyD¢y“Û<ÿ(e‰åÿ¨¿bþQG÷ü£aŽ•¹åXnÍb=-¹ 2NŽ{ŠOÞóLÃÁò>ñI9ü€Å'ÍqZÿ(K»¦-äõ°}¨8¹ã¹½>)ɘÇ'ýŒD„®Ò¯üž’ôtmÚÅ%pmFßú»SCcùœ{OIš!K9¦$µhógɼ£$u·/Àx޹‚“7k3£Q“:€,EkÓC–ÌÚ”¼Ù¯ÝH¼6K3Ÿ”¶kóüV48ºgsÅ]æOÈR)I²„׿_yÌRz-á“2‡OÊ>)sø¤Ìá“2‡OÊ>)sø¤Ìá“2‡OÊ>)sø¤Ìá“ò=> F\·ŽOÊ>)sø¤Ìá“2‡OÊ>)sø¤Ìá“2‡OÊ>)sø¤Ìá“2‡OÊ÷ø$q…‹8]‰¸K|RæðI™Ã'eŸ”9|RæðI™Ã'eŸ”9|RæðI™Ã'eŸ”ïñI0âDÜ:>)sø¤Ìá“2‡OÊ>)sø¤Ìá“2‡OÊ>)sø¤Ìá“2‡OÊ>)ßã“òÅäjæðI™Ã'eŸ”9|RæðIyŸlÔõò¯ðI™Ã'eŸ”9|RæðI™Ã'eŸ”/ðIw×@ÄÕßÏiÝs•27Òš¹‘ÖÌ´fn¤5s#­™ã*en¤5s#­™iÍÜHkæFZ37Òš/FZï"®£:®mãµ\Êp)sÀ¥Ì—2\Êp)sÀ¥Ì—2\Êp)sÀ¥Ì—2\Ê÷À%qEÜ2p)sÀ¥Ì—2\Êp)sÀ¥Ì—2\Êp)sÀ¥Ì—2\Êp)ß—òÅtyæ€K™.e¸”9àRæ€K™.e¸”9àRæ€K™.e¸”9àRæ€Kù¸”/¦Ë3\Êp)sÀ¥Ì—2\"ê¸$T—„ªã’Puœ“\Êp)sÀ¥Ì—ˆ:.¡™“³dz-‘˜2Gbʉ)s$¦Ì‘˜ò*‰ég:vˆ4 ÿŠÄ”9SæHL™#1eŽÄ”9SæHLù‚Ätqpæ$í x*OÞq!¢)sˆ¦Ì!š2‡hÊ«ˆ¦Ÿˆëuú*læM™C4eÑ”9DSæM™C4eÑ”/Mw‡gNÊÊÌI•ó( »©pì¦Â±› Çn*»©pì¦Â±› Çn*»©pì¦Â±› Çn*÷ì¦rဎÝT8vSáØM…c7ŽÝT8vSùxÇMûò¯ÙM…c7ŽÝT8vSáØM…c7ŽÝT.ØMw×@Ä]8àÔ©pxáðÂ9à…sÀ ç€Î/œ^8¼pxáðÂ9à…sÀË}ç¤\8àå¡>Ñž G{*í©p´§ÂÑž G{*í©p´§ÂÑž G{*í©p´§ÂÑžÊ=í©\øq…£=ŽöT8ÚSáhO…£=ŽöT8ÚSáhO…£=ŽöT8ÚSáhO…£=•{ÚS¹ðã G{*í©p´§ÂÑž G{*í)Ê*óVZØ«ü¤=ŽöT8ÚSáhO…£=ŽöT8ÚS¹ =ÝEœ ˆÓ¥w\~q!ªp¨Âa  ‡**Џ#µ)õµ„*ªp¨Âa  ‡*ªp¨rº‹¸Œ"ûq“/S8>TáøP…ãCŽU8>Tq¥I-ñ¡ LJ*ªp|¨Âñ¡ LJ*ª\ð¡î"® ˆÃ~ÜŽÒ'pžrÖÏòO8Ï9¤ºÇÊ‘X>Ð|GÍÜ)à¨à%•ëQ„ÖøäMÈœ¾Y‘j²o{|t—•\B&àNi޲ܩwýwoy,¯yç>õhÍKîûg^—7‰<è€;¥!8Êr§~2İÝ÷+¿GéCp”|ÈCpTkÓ2ѯM ׿ùXr¿k6½p”4tòÕÌÉ;ë©£“ŸÖ¦iÇÚMö¼]›'Õ,Ïãr,“ý9¹Ý§^­ù#®ÃQ<»ÿzGG¹ÖÈÝ•}amþ•3à(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽÒ{pŒ¸ "n¥8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQzŽ‚W¸ˆÓ•ˆ»G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8JïÁQ0âDÜ:8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£ô¥c³Ê£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8JïÁQz16«8J¹±YåÆf•›UnlV¹±YåÆf•›UnlV¹±YåÆf•›UnlVïÇfõblV9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”Gé=8 FÜ@· ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(½GéÅ ºrà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽÒ{p”^ ª+ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(¢ŽKhæd¥8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQzŽÒ‹AuåÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥÷à(½TWU9pTåÀQ•GUU9pTåÀQ•GUU9pTåÀQ•GUUïÁQõ¯8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª8ªÞƒ£ê…^9pTåðÊ9à•sÀ+ç€Wίœ^9¼rxåðÊ9à•sÀ+ç€×ûÎI½pÀ+Žª8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª÷à¨záÇUU9pTåÀQ•GUU9pTåÀQ•GUU9pTåÀQ•GUUïÁQõ«8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª8ªÞƒ£ê…W9pTåÀQ•GUU9pTåÀQ•GUU9pTåÀQ•GUU9pT½GÕ ?®rà¨Ê£*Žª8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª8ªrà¨zŽª~\åÀQíœÇo«ü+ÀQf(4õfÎÉ‘œÜbjCFWŽ>*8ºuü–R#—æóÉ´÷½¹ýí=™ü÷·ÿ©GFí¶;ù¿ß®b÷¿KÒ•£§ Žž†2¿Ýuì úqÇCÔm|prûÛ‡MJÿ …jõÛiüßo¯²‰8]9z®àèÙ‘Ýï›øû´ BÆn£–‡!s¬Ùö!ÿ™óA¯qÈäŠä΃6õ»™äSÈ„†ÚÏ6ÝP>µ÷ífÞ÷ðÿ±’›ßî µÿBFõ¨e2’ÿûíå¨Ö¬#¦æÒ)øí>dt 59ä€Üb¢æ·‹}\Ô„ä6dZÖÏùAN´äïû^Ú¦9 ™sNŠå6dÎr/ ™3ÁÉ»‘c%Âlٷ̯ü&°òB`YæÖ‰ )³<`nYˆÎn÷è—Qc¹'í!è\6HÞý+'ÞÇæ8€V>1·Ы¤#²Üv8ªýwô¬çÎpòï (ï[3¿ÝìoH[B¿ÝTùÇ 4¿Ý0·ú¦è·;æ–a š}lå(´›¹ýí*(ÙêÞcù»Ÿ*gU'Á>¶2Ž“GrûÛs¸mÞh厹e¶þ{"†Ì­öd#®<Œ¸±í8*Ž8“¾™ˆ“c9öË¢)¤ÜåÆä6â$…”»t¥b¹¸D\’ºå\ÜøfÇÛ¾÷3È&±üqr–ÝúÙÌc>7ptqy3U¾‰¸ãßÝÈ]Äå1·ŽR{C÷ÝDÜK7sß‹¹ïuC÷ݲXÔmý4÷=oè¾Û£bBvçèñï¢ûîwŽšÑQq…‹8]‰¸7s+íçëg–ì}HµÀ©~‰¸-¿VÞ<’Sb§zptçT‹!~5q¥I,wþI’€¹•Ê«ur1;<µDÌ­¼Ù#8ºéîȹ6§ºœV38ú°§†øõNœON¸òÖ©Nö-c˜[Gðnà¾Û£§Q2·Ž„kG·¹Í9ƒ:Õc÷Ý9Õb‰_öI{\ñ•wNõIXˆ8wÁÜš¨WmÝ©>žuÝ ²U{òæÊgk9¾{KzdíIcyv÷=ž8.ÇÁ;§ZsäTr§ZäT;îÔû9Ÿ‡º´ÝÉÍ4–ºt²Ïùcѹuªj>œ8>R®NÞ1·êû5aœêÙÕâ‰cƒìªfÙôã äâ–] œjÝ·yâ¸Nõ‘ƒÄÇS•ïäž';ÕÈ®9ÕαÄWAÄ]LW?¼ù A’ë8r›yàTW‰'Žˆr7q|\ûÀ©>ŸUèènâXskl=–OÇé³A’³lýv˲?ž5N÷\ùO§:m9˜LçÓÝ:Õ²ÇÌ­sO»Œ:å Ar$…þvÛÅWûÛeéÊgtå ‹åÈMÐÑS-ˆ¹5ÐÑýÄqÒ…ˆk â.&Ž«ŸýlÏfC\¾Ç'›u®º«ß͈“_I嵉ãÆM·'Çù¤"¹›8}³#!wSöDœ›²¿œ8nÜÄq[Ÿ8þ;‚ä—À~6DG|ßçÙ¼6qܸ‰ãv?qÜ.&ŽÛÉcqãYçd®ãêœØ:n‡uܽJWÇ%XÇ Ø9QÐ9quÜ@[Ç ¬ãFØ9™ê8uÜ;'S—a7PçÄÖqÖquNl·°À:n€Î‰­ã,skªãFÜ9quœ£•û:nÀΉÆ_Ç Ð9Y¬ãŠ8Ìܪ~ÚúIçdÊç埛Ïï0Ÿwr”Ïï0Ÿ÷rÏï0Ÿwr”ÏïöóN{³ãÒ{Ø9ù‰¹tNŽgö†N~¸:ΜüpŒ|;·Ç“óöæpÆÿŒÅPž|F1·®î»ëœ¸:n_¹ï~ÆßÖqiå¾§„긴rß'ZùJ÷+4ã_ý¸ôƒÎÉ\Ç¥wN|'¨ŽsòŒê¸Œê8/Gu\FÕ„“PMüëœ|Ôq^ê8;ãïë8'WPǽ;'sçå Ž³3þ¾Žsò ê¸wçd®ã¼ÔqnÆ_ù†®|Cuœ—ƒ:ÎÏøtôþ¸Žû•?šñ¯~Úš¨ã’Puœ“?¯ã¼ü+æQÇ%¡ê8'^ÇyùWÌ-¢ŽKBÕqNþ¼Žóò¯˜[D÷+4ã_=A³Â!ýtî ‰> G›­¾Q—€Ü/›ÎüÖ6MهݣrŒ¦ì7ñ›ðr¸æ]Îü–Ñ‘Ü3xV^plÉÛE[ž-Ú~ܸiL¾…ت=“?—­¶X¾ôš¨9 wÊLÝj;*ãiνÅÜ©xÎý\µñѧçü^Á¢íÈý~&‰mMàä=8*TÿY¶±|zP§ðA}®Z xò¡¬L>ÔŸ‘Íu¶Ÿ{ŠfùG5q澡{ j,w_•lø°%7 w^d }ØOúQ}XK?2>¬¹UrSI½¥È‡=ªÿÈM5‘R7ôaÛÉŒr÷EM }ØOpTª ޲}›Ö'¶G>ì¹?¨&N H÷½YB?øöQ>êo$w:òa'pT}X»G¿_ø°ý¡«Þ“êÕsÍ[ûTÇ…>ìk´-–{òSÞ‚×ÄYÀ+8ºï•؇}Í_^ê¡kˆÝ¦šöáA÷Ï·ÌñvN±; X¹Û1lšNö›âôîåþkc¡{ð ]З—ÄÜwüÛí“ÖývYºòˆ•n_RÇ Üw÷Ùg‡ðÉîsß½Ào^õ ¶?ôa'þPç|ØÎù°óa;çÃv·íœÛ9¶s>lç|ØÎù°óa;çÃöûú½_ø°ý¡«¾ÁÞ¹B.»ø•ºB6»Øaváä(»Øaváå »Øaváä(»°®P>?‹ävлĮÐ9`NÞ¹B+Yå¯ü‘+¤¾Cþ¤Ž›²Ê_ùgç²JAY¥“g”Uf”Uz9Ê*3Êmœ¼ ïÀ”Uz9È*­+4Y™)®ã¼•©(«ôrUZWÈg•N^Ñw`*Ê*½d•ÎÂW¾¡+ßPVéå «tuÜkþ ¨ãV²Ê_ù#WhúÈ“¬²Ÿ$™>Ë#ò“JœUÚm•NîÉO½¾–ÈO#?õ'ä§ã-Q ;ò“Ö8«¬“µg•iï¯%òSçÈOýùiߑܓŸe•àÒeÔ)½$?uŽüÔïÉOýÂê]¡ÉÚèìu«½•YŸ’uÜÙ_O»ÆrË¡±¶Žo°Ëô)PÇ…ŸRiÇ¢Ý{(÷è¦b–ÍÔ`>7Øj° ûe“`jIàä={©‡kþ|RÆW~"Á$E öä¾’ZyMd´h±+¤Þz²hËÖmŸöWþ O³#Õ»B{-±|é5QÓô5’xÑÆ_#9ûö%>º§Õð9.Ú}Z´ÆÖñ‹vÂVE >'REÀÉ{|Q«È'?=¨-ZpòÓ¢]yÒ´h±+d;fïÊ#þЄð€?dž´ÖÖÙKrWˆ™ÔÈÂTÎñ±X>jœNü¡}â¥`ÍGŸò‡cﮬpEGïfþÑ-LEöã Ë-LÅÖï~¯MNœ\¬+´(· >#Ìmª†ýœÈÍÓ6œüýÛ‡%NX˜Êñ°› Y#‚©ä-dì¯èƹrÑÃjî˜ýÊï)EëCVH):É^È}Ý@`™×¸“O% °ÀÉÏ`/K¡ÜÖ wœ¤ðÛM`‡Ò¢À: .ðÛ§ÀÚ#”ÞÕÉ{°×RŠ>9Aa`9N¡ý•äæ·W÷ÙóÛÛVÜV²lÛžÁ'ïÍsò8°þÊc–Ñk _48|ÑàðEƒÃ _48|ÑàðEƒÃ _48|ÑàðEƒÃ _4îñE0â2ˆ¸u|ÑàðEƒÃ _48|ÑàðEƒÃ _48|ÑàðEƒÃ _48|ѸÇÁˆ+\ÄéJÄ]⋇/¾hpø¢Á዇/¾hpø¢Á዇/¾hpø¢q/‚§ âÖñEƒÃ _48|ÑàðEƒÃ _48|ÑàðEƒÃ _48|ÑàðEã_4.Æf‡/¾hpø¢Á዇/¾h¬ã‹þŒtnhåß዇/¾hpø¢Á዇/ø¢x öC~O)Ütìà¦c7;¸éØÁMÇŽåéØ?ãÑøÒ}9;¸éØÁMÇn:vpÓ±ƒ›ŽÓ±ñÜë‡üF48Ñà`Dƒƒ F48Ñà`Dƒƒ F48Ñà`Dƒƒ F4îaD0G¨² #Œhp0¢ÁÁˆ#Œhp0¢ÁÁˆ#Œhp0¢ÁÁˆ#÷0¢q1v>8Ñà`Dƒƒ F48Ñà`Dƒƒ F48Ñà`Dƒƒ F48Ѹ‡‹±óÁÁˆ#Œhp0¢ÁÁˆ#"Ê5'ÿF48Ñà`Dƒƒ F48ÑÃrM·ô!¿g Ž948æÐà˜CƒcUæÐŸq¾„íd—“ÇshpÌ¡Á1‡Æs(žÿߣ…‡Zhph¡Á¡…Æ2ZèwqÆ¿ýK´ÐàÐBƒC -4.ÐBñxø‡üÖ =/+A:åAè-ÿŠ däß„Þò¯BFþ Aè-ÿŠ däß„Þò¯BFþ Aè-ÿŠ däß„ÞrHz?m>­ÐóoAh!â®Bæä¿!½å_„Œü‚Ð?ùw!#ÿ† ô–›Û;Ž ”_+!#ÿ† ô–E2òoBoùW!#ÿ† ô–¡{+ôG~ zXÖºÖ²ÖºÖºÖPÐg`a5Ž7Y]²BÃÀZ·BÃÀZ·BÃÀZ·BãÀZ¶BÃÀZ·BÃÀZ·Bë´úvŠôï¿ã½å_ñ€ŒüÐ[þÈÈ¿á½å_ñ€ŒüÐû™ôÈÈ¿á½å_ñ€Œü)l爿r‚ô¨*ûäÅUÙ2(¬Ê^Ë< ¸*[æÅUÙ2(ªÊð€ÂªlVeë< °*[ç…UÙ:(¬Ê^Ë< P•­ò€PUf^¤8âޏ5Уäñ“&ë< <®ò€@ò¸ÊÉã*(L×y@ yìC^+< <®ò€Pò¸ÈÉã*&k< ”<.ò€`òX–Œ™•ä1? ¬ûÖìOXëØT•-bÂÈXÇþ ²ÊX#Wث؟pi¯cÂ¥½ŽýuQ^2fVÖfy¶6?é>ÑÚ|@÷yøÐŸé>`m®Ò}âµ¹L÷Ak³÷× Ý­ÍEºX›«tøØ]£ûÀµY–Œ™•nÖq]ÒýÚ´åO—>Ë# g½å,¤†}Þã‰*¡|¦ð_µÌå¨Kò'_Ú¦{ˆÑ)û¶Ç'ïhÇ[£)ÁQõî œ¼ÃèÔqpŽ 8ºáàœ©zˆë88ºÅuÔ­D ¡4Í^[¹_¶—–·ñ+¿åà<[›'eéC‚l4\›gõËíÚtuÆÈ­Í˜D³tòŽD£›–P³4’›µùœy­hµ9‘hÌSáH¨›+_~ÛóÚÌǃÈíÚ<‰1¯”L¸6=J¯Í¿r%s¿h/Q2ÿNþ;”Ì[þJÆÈ¿Aɼå_¡dŒü”Ì[þJÆÈ¿Aɼå_¡dŒü”Ì[þJÆÈ¿Aɼå%ƒ#.ƒˆ[FÉ<‹¸” ˆ¸U”Lqë(q«(q‹(™0âÖQ2QÄ=@É„·Ž’·Š’ #n%EÜ”Lqë(™0âƒ:'‹ðÐ9Y…ÏD“ð™¨sò>:'«ðÐ9Y…ÏÄ“eøLØ9Y‡Ï ÎÉ"|&îœ,ÖqEÜ*|æQçäBwN–á3açd>:'«ð™¸s² Ÿ‰:'à3açd>vNÖá3açd>wN–á3açd>wN–á3qçd­Žû•ð™'“>vNÖá3açd>:'«ð™¸s² Ÿ‰:'à3qçd>vNÖá3 s² Ÿ ;'ëð™°s²Ÿ ;'ëð™¸s²VÇýÊ ø SÇ%¡ê8'ÿ >ÃÔqI¨:ÎË×qNþ|†©ã’Puœ—Ÿaê8/ÿ>ÃÔq Íœ\|óÔSiD\D¥‰"î•&ЏTš(âPi ©4¿³Ïý;* ™U*MÜ-\¦ÒDkþ•&Zóÿ¨4w‹Žmàožz\Í£Eû‰«‰í\ÍÃ×ÄŒ«¯‰U\M¼hC\Íïªþ®-ÚE\ X´«¸ø ^ÃÕÀõÊ“O>”•ɇ*ç%b86Âql„ãØDZŽc#ÇF8Žpá86Âql„ãØDZ‘{Ž\ø°Âql„ãØDZŽc#ÇF8Žp‰Þ2¶étͱŽc#ÇF8Žpá86rÁ±¹‹¸"î‡7Âù°Âù°Âù°Âù°Âù°Âù°Âù°Âù°Âù°Âù°Âù°Âù°r_¿Ë…+}؉|#ùF8òpäáÈ7‘o„#ßG¾Ž|#ùF8òpäáÈ7rO¾‘ WH8òpäáÈ7‘o„#ßG¾Ž|#ùF8òpäáÈ7‘o„#ßÈ=ùF.\!áÈ7‘o„#ßG¾Ž|#ùF8òMœU¦½¿–È7‘o„#ßG¾Ž|#ùF.È7w'(âté—ŸD\ˆÄ‰#G8$ŽpHPˆÙ‘•+$ŽpHá8Â!qä‰s·h3Z´ØšX9±r„cåÇÊŽ•#+,Ú$¯%VŽp¬áX9±rä‚•s·h Z´ØRËÈO@%Ç¢kòPÉfmÜôÓýzû:)–ÿx!ï…3¢&óÏQ(ŸZ^JŽò05$7'ßÌláÏò÷ÂëQ˜ëˆåé}òe8XÇ;`<¼Í.D%•/¹„ä6£6†šäW¾dW¿;y6'Î(DéÁqö;8º3Ô¤Ä_…‡+ÿ•®Í—íâç…µéy$»|È#Éû'ÚÿãQi½#+ŸžI1ä¤+¹«t³¼BIË5–{:‚Å${}Ñow¹§˜ßþ~¤¥º úín×lI$·»ñûÛß‹«v°òb»;¥†tñŸvrŸwG3þI·ÖÀÉ«c3´hÆ?×£fG7U~>ôÑŒ“;‡¼Úß.æ=üï™ñHò3:‚‹¸ò8â´–Y¾NJ®ÚsrT홈;w;g$ïvOŽAzxpTrq¦X´×νB@îX,{´«&`±ÄgY,ÿ"®œ8“‚äÿ~»´ã]E\Í'ç$–›ˆ+'+'ЏsˆÜwq/»æM_íxÜ ûî§­Í}7·÷ ÝwqG9nî»é«ÝÐ}·}5Ùl“F\á"NW"Îú'þ-£öä¼eÞ]=‘­ w»jLkÊú'ý|¹ÏABÉ™D€£{‰ÙËeüMŽèäâRÌþéŸä“Ø€ü]0-c x$élË äÝTŠW6†öIñÑ­"çS!ôON†‹ëÂKàŸåÎî»ÛU36 y$½là¾;ÿ¤™x·þÉ''Ç<’±òŽSq˜GòššòÿäÜ¿8%r䟋+ôOúr@ž÷Ï“Ÿý“#gš€"9òO’IÛ­ÒÏ„<–û´]5˜ƒ;ÔÅÂ\>»z³’elàäÝs~7‹Öú'i›€"9òOŠyMXÿäâÒùÝ“æÒAÿÄËü“#±Còæî{<wnM@ÞÝÒ‘ÒÎåËÝ“ÖÂpÄUqxî5Mcåsp?ã—u–ø'? Ý 16ò¹70–WËHÔÍÍÇ“Ê=&x‘G’—y$ç[ê¸íÈÝ;®}µã1- œ¼é«û…%Ø"ÏP€rÓ )m•G’×y$ç}ßJr—Û˜‘¢÷“vlÝw×KNE¢^r>2#(·-]å‘ä{I¾˜ƒËÏæà\ÄõG§½?Kgy4Wtm.¯ÏÁOÿÒ[rå[èXvtô©)8rqåxû ·“)[KkspùÁÜqáû(@îÚð{æÞvxtïXjÔ?nœC/wqçÃÚ\~4—sÏ@î­§;–ðè“c™"®£:ÎÁ¹ˆO;'¾Ž sâê¸Öq#îœø:.Á:n€^¥«ã¬ãêœØ:N`7@çÄÕqë¸vN¦:.Ã:n„“©ŽË°ŽqçÄÕq®sâë¸:'¦Ž³$שŽ Wië8Ë#™ê¸wN\g;'ŸœóH–ê¸"òH^Óá“ÎÉ<µÇ—Ïï0Ÿwr”Ïï0Ÿ÷rÏï0Ÿwr”Ï›ÎÉQ—À“w“§öäÍÎ’œÇäÃ×qñä鑨u ﮜhò4çmÄGŸ&OÍݾrßÓŽê¸}å¾;’««ãÒÊ}wWÇ¥•ûžäq÷+2yúšæŸtN¦:îWþIruuœ :ÎÉ3ªã2ªã¼Õq—<’¼Ì#ù¨ã¼ÔqïÎÉ\Ç9¹‚:îÝ9™ë8/uÜ5$¯óHæ:ÎËAg:'Sçä Ôq¦s2Õq^ê¸kI¾ç‘ä‹ÉÓülòÔEœPu\ªŽsòçuœ—?®ã’Puœ—?®ãœüyçåë¸$Tçåë8'^Çyùã:. UÇýÊŸLžºˆËO"®së€E;ä0âŽj Eh‡£H驿Xn'O÷žÛgĵ­¤V;w;4•å3â΀+EB¹‰¸sÑig‹-ļÜáLâ„[%¾tÎ$Œ¸ãåÕÉ-$ÞA¸_Æ*±\$ÜAxäÃ-ßîi(1Xâ“Å’ã¹W3´ki(ÍÍ?æ0â~v– âŽw×à·÷ÛíÃ*_ŒÍægc³.âÊ£ˆ;7WÈ4:š#˜Êyˆk½—Xîf½SªqÄí‚ä6âìŽaqÅjå>âZ)aÄå:ܱXÌè¨8‰/ÝqM@ÄíHî"Ζÿ.âTb¹¸OškMà·O(—",›yÒ\@ÄU$w—EøíSÄ-Ìœ$ü„[ä€O 7/ï ávI‚)ë$˜¿ýýäâŽm‡êrR5by²ýy­$/ï›*’Û®Ñ(‹$˜ò€s6­†¹Äƒ‘öw,pß}'=ÜM•ý£ÒÉ;y_$Á”{L¹pÀËCŒx¨FáðÂ9à…sÀ ç€Î/œ^8¼pxáðÂ9à…sÀ 瀗ûÎI¹pÀËCŒ‰¸Ó\(Oü8Ÿ]üÊ?ü8—]ì0»pr”]ì0»ðr]ì0»pr”]X?Nž¼}Úˆ=yëÇíerû´) ü8I“W"?îÆ„~Ün'Z­ÜùqÅN´î+÷Ýúq>«ÜWî»óã\V™Vî»÷ãrìÇáûîý¸¥¬òWþˆc#.=«ã¦¬òWþéǹ¬RPVéäe•e•^޲ÊKLY'ÁÌY¥—ƒ¬ÒÔqSVéä ²Ê¤(«ôrU^“`ÊÌ”Uz9È*mç³J'o «ôDÏŒî{Yå5 ¦Ü“`Ê…W’`ÄEžÔqÚO´Ä,ÿ¬ãtëãµD‚)ë[üϬ2O¦R˜U&“ù¬}"ÁDÜè#Ü»ûŒŒ€¬2›æÃ5 ¦< Áœé|GwYeMg•ðè.«´G7OÚãÎõäÎOãµD‚)H09× ä.«Ìe•àèSVY"NPÄéÒ;.?‰¸ÞÛVJþ’`²FPÓÈRc¹sj+‘;p<é2’›.q1™;Pœ7‘ÈÛvëM8w@´ ¹ÉÄ쥭õ_:ïÄw~&!¹íÇì¥Ó˽;Ðbл¿Ýshb¤Ç'§w w@‘¼kûüvï؇U¹ðãÊCŒxoâIÄéVub±”csü!vÀk›Œ•0â¼…m"®ïÉ»}¢iì€MÊ}Ä•;àG†ŠäŽ‚³¼k|馈+ÀŸ±8â¬#æ#n/±ÜGܸdðÛ=D§",›)⬅í".#¹‹¸Šð~ûq+︂"3xl¯ò¸ªú„ÁóCMœå žŸž×+fðØ-fV>1xjØÞßrŠîÚûG>1xζ@Ar7–¹GóuåȬÀÉ;O5'oÖü ÇE'oòº¼i<Ÿø"<_d<»ºïyZ¹eð胟OàE‹å¶>2jS )j÷ý•Ǥž×œG98rpåà<ÊÁy”ƒó(çQΣœG98rpåà<ÊÁyôÎ#.ƒˆ[‡ó(çQΣœG98rpåà<ÊÁy”ƒó(çQΣœG98ÞÃy`Ä.ât%â.á<ÊÁy”ƒó(çQΣœG98rpåà<ÊÁy”ƒó(çÑ{8Œ8…Yå*œG98rpåà<ÊÁy”ƒó(çQΣœG98rpåà<ÊÁyôΣ£‰ÊÁy”ƒó(çQΣœG98rpåà<ÊÁy”ƒó(çQΣœGïáý,íyÙü½//rëر¾Á¹yº¹€A8Yºò]y› ¼t6%v'ŸM!VàÑoð÷è Ó\ ezXÚòÖR›åÁ4Wï9¬áX4–{CN£1É~6ªÀÑÝ4WÙsXeËi ¡!'f(èߥË9|r»Ù˜bé—m3ÛIœÜ'Pf;É;*[Õ ŽîŠEÉå3°Ž§aèä½!'5žæšá˜æÊ±!7F|ßgC.“<ž³}šæ )Çg_Ü÷ÉkkÓ\ 5–Z °*¦6ØQU¶ÃªlÄ_•%X•¸᫲«²;¦*X•99ªÊVe#ndøª,êl„Œ©*˰*¨‘aª2‡ñU™“ƒªÌöA>I4aÄ‘hVeôAlUfú sU6`d©*¨‘"nžjÖ™²ó_ùGĽ­w˜;9ÊÎw˜{9ÈÎw˜;9ÊÎMdž§ÚQÄÌS™>H=Ûå@î{ÆÎ0ó“2’IÚÃ>ÈùPz¿ÆÍüä…ÜÍOZ¹éƒ\Ü÷´£ªl_¹ï¶⫲´rßSBUYZ¹ï¶²X•ýÊÍON“lOú SUö+"¶*T•9yFUYFU™—£ª,£ÚÀÉ ¨ Ü®6W•y9¨ÊÞ}Ë“WP•ýëƒ|Te^ª²wd.lœ¼î¨‘ª2/U™™Ÿ¼ºò ]ùÖVN¾ªÌôA¦ªÌÉûgUvq GÜÊ;N¨r- U®9ùórÍË—kI¨rÍË—kNþ¼\óòÇåZª\óòÇåš“?/×¼üq¹–äq¹6ÏOÞ—k)? ¬ÞÏÀò)bæAÞ•Û¶ÏŒãù`FŠ )2Ö‘"/=ª=ËêÉ Á¸¥pW›œCñÉß‘~ǼܔX+DŠüÌ÷.ùR¤´¤@î‘"á®¶ã·wðÛÉ œüwH‘Á!E«yAÓ(S`íȯ‘"ÿVò¤ÈYüvÿÆÊøíS`Õ×RdpH‘Á!EÆŠ }^Öåâ«ï"ýšÐÃn¡z›Ðå¬È ·÷H(FdB×ì·ó:y7‹@÷È„¾’›”ÀË }üx ·•Ñ"úˆË#þb¹Z8È„Ö#‘íÈ»q3}cB_ÉÝ„œ•¿‹/Ýzpãl›«·)’·JòfX–]CžãqéRBrkÀç_Wò¾Çró´ù4¡Ï¿=û®E²ŽÚBÄyºl³<2¡kdB1§›Ær[|³«Añ•NÖ5’û¯©„óÒéÜ~ʧïZ`BOßô0r@µ[ðÉ»âËžüûUv¬ c="y·måÕì)ŸP‚Xþßâú áЄ.@îÛᛋ+ŸÑ•ÏmåäR¤ÄH‘äçä­Ü×¢¬™Ð?ò›Àê+0¡ÃÀZ7¡ãÀZ6¡ÃÀZ7¡ÃÀZ7¡ÃÀZ7¡ãÀZ6¡ÃÀ »}¾#õå¿õwNoeÉ„ŽkÙ„ŽkÙ„kÝ„kÝ„^¬Ó>ÝXbS®ð+ÿ´Äl®°Ã\ÁÉQ®°Ã\ÁËA®°Ã\ÁÉQ®`,1içÈ-VÃðjŒ%¦þ•ãäÃݼr¬%VËҀܼ±Æ–BK Ë­%æäÆ»¸ïÎs9â¾rßSB9bZ¹ïÖó9bZ¹ïÖ[ÌåÏ(ûÉö÷UeSŽø+,±YbSŽèäåˆåˆ^ŽrÄŒ2'/ Sñ–Øô…°*ó_(cåääˆïªlνäˆ)2¥YNî(û&Íš-±ä G´H‘‹+ßЕomåäÈ-RÄçˆNÞ?sÄ»ˆK8âêBÄÉÃäñüŠt™åÉ£n­Ö¨*Ë'W#–?p“‚äñx‡·Žî’Ǿ×0y”á]%<–\¢äñ¼qä¶’KÉcrŸ<¦'9#¹Kœk“Ç2Jå.ylaƒñ“’GKcщïûT•í $ Ý'ÆÏóÉc÷Ý'?›‘ï-±•ä1? ¬Þú–ƘåA`å÷2û“xì=­0°0ù`FŠDõ)BŠœ9HÕävqåÕ#gnŸü"ù`BŠDu®­Õó‰™ëœ0uîKrW•iû~û"ù@Áoÿ )Ö¤ÈJ`•‡U·âÑa`µmX=g`Mž,çi] EâÀZFŠ€À ‘"g`9VOA³zÎÀÚ㓟k¯yBŠ€À²œû+¤ ¬½€À$wX=yò´P`eä5gðÛ¿BŠÀÀZCЬôÿ^½õ}ßì;ãWþXiK5úðôÏ„{4±¬¿Y^òî "ãÈÅv»ÝÈmd¸Ýÿâ7 (û %Êå.~»¸ ö©ýßÒþ“šw>þíï¥}ä)Ç£+r{¯~{䛌áûn“±÷=0b5[ʳUw~; Ìò€4¿°ù¡TÆòxŽnÕíQ ï ÝÝ×áìŽX‰WÝi¥J¸êÎÏÆÅò©ý\ÃUw¦ç@îO>€ŸËnw¬w‰VÝ_L«„ÆŒØÒÏɳû”e K€³zË@îN¾Ä àä8÷¿ò›µ™Ö¦Ù…”ÆÙ œå»Ž31H‘Ýbtì+ÇÉÝC¥Ä»~¾6äŽtªá‡_ntÈÉÄgï%Ø…”ÇÖ 8ºØâؤ»ûÀÈàèÎ]è5À©üL4upéœm—-Bh¸‰pãœm—jðaãºËLá1ò7R,…ç½ )éÙ¿Ý|ð2oÉìzïBÒ“n~»iÅ•:íBGI ~{ulá°1ð‰:ÿöˆÆb#®<‹8é›­_~åAÄõF\=7Ærq&Cµ'gÑä.âlÀ:Ϊg¡ˆ ÷ýiÛÆŽä6âêˆ"îxï\:q­ö(âÊñ«À¥s'µÄ—\:o”7 "î,Ë øíïˆ+ûi¸—ŧo%Œ¸óKñfÙ¼#®¨ÿŒz‰#îÌ¿"þÑqåË~»k~·! W¸ˆÓ•ˆ³4ïî’µ'ïR³æ-ÿH·ä¾õ®!ÿè\7 äþ“Ò)09 Ë;H ,ÿ¨Õ-W k6Õ”Τ4–ÿ1Sr ÷¿=ün‰ª‹¯|ò#IfÎìû+cÛ+›þdÝJù49_Ç¿´U ·OÚ¾™ˆÚÜf¸©'ï>Ë LÎóÊ·øÒ¹ï&¤0ó øGqÄ]ðÔ}Ín¡â1™U9Ô2Ë?LÎäX&³:wpõXž=É\“ó| ÙRÕÉA©ê¾›°%›”Zy,ñ·É)rrGÁÉ“ó|DßM£˜È-–;Î]­ùÓä<ŸU{'¯ £¶ßMHÇË/Åòêßï#09ë~;¹¹ï}«#09ô Mß)09°ÁÉyæ›èÊ7_oIdræù+†¦L÷«N"®‚ˆ»à©ƒø<è1È‘WIñ(™¨Çpüp;‘Ñ]nÓ%–ûÎV vQœ¬7+ÞÂÃ0†µkGO·„Ž>}t+}¶Œó8jüRÈ Ú~¨Ù"mžógǹÇr—Q‹Jhrª›Qkq‹âüDcëxN÷P>ÖþÙqV=¤¤@nö<¶ÑƒÀJå‰ËÓDãéTÁÉO£§VÒ_ºùkvA“àOMÇêÎ@î›¶ñè騸íÓôøL¤ƒuÐ:ÜÜî¦á ±˧¦¬ž.ÖxÖ9·îIåŸü£#,Qäu¦í±Ü7–5$1ŸÞä.WH%ìƒøªl€>ˆ«ÊŒÑ׎·†¹«ÊJr>ËñÞc¹ïK‡ôñŸk ŽîûÒÒ£>ÈT• бU™áÕ|~¿ÈMU¦æÛZ^¾­€£«cÁhÈ?:R%›^¸òã#}¹* ²X• ÔÁü#q?`þ'ßôUÙ¯ü£âª2ÛÉ'¢ –7ð})Û9ÆúÃ{Ü9·ADèó5a§Fö¸â¦FÞ}¹*órP•™>ˆœF»ü¸íôAÎ ?Àɻ½D}}_ºä¿+fŠºUe^Žª2ÛqNî“l;èƒ$ûI¶÷“öxV‰;ŸÃlÅ´}#Ç‹¯¼ÿ~ä^"îWþˆ¤âó òQ•¥öA¦ªLPUæäUeUe^Žª²Œª2'/ *û×ù¨Ê¼TevØÛWeN® *3}©*órP•Ùao_•9yUÙ}={¦šÑ}¯ *³ÃÞ¾*sòª²wd®Ê¼Te¶â«2'ïŸUÙ]Ä%q+ï8¡Êµ$T¹–„*×’PåZª\KB•kI¨r- U®9ùór- U®%¡Êµ$T¹æäkåÚ<ì}_®¥ü(°ÆÖÅ~Ð*å¸ÁxT)Ö‘Ï´X>>¿¯þÑ`ÜgŒh0Z$Â0³‰ðèÓb¿-ÿ{éÆIâó‘‘£À:J2ïê!Ë"„Þ•·Ö{rX)…3©ÝaZÀ(ýn¯¨ûÖ’ÿdXÛï*¸ç…ùGIçaïôhØý»aï…À*ϦÈJ{åÁ+‚ ȧÀ*(° ÷©Ý0°â£ÏlO:Ck·YZ‰‡ (9.ü@¡‘ÖÜA`Mƒî °4zc‘…ŽîßX¹Ç5}7–Âaopã–øGG`epô¥ao|ôӒ -OLè£i2Ë?Lèr~ñ%*¾ŽÇþä&JX|•Lh7!çäþ#îÈ„n%–û”@"zO'tÈÅ\¡½G&ô™FK‹å>Û[hBŸÝMpòþck ˜Ðir‘%4¡SLè#_9ؘ{9–Sr±ãT{‹Mh5–»W™î%,¾JOàäí«ìÜT›ÐðèîU¦Á¾¥ã;_R äòûÂ;.P±6°7¡38y_|ÕèU¦[¯Ýî´=*2¡ÑÑý“¶Ö5Zî«? ¬È„΄΄΄΄΄΄΄–õ®ÆÏSeâÉÇCÿÏ}ÛÛš -œ -œ -œ }X?»džXb>Gü•Xb.Gô–XÊ@î,18ð–˜Ôävq ,±:¹JZbvFG9¢—ƒÑZbû‡1#%–­1ã,±½%pòö¡RíÞûP)6Å´ro‰ÙsG9¢—£ÑžZŽª=–ûÑàZbÇ?[ÈívÄš%&àÆyK̵dä“§ü#²yP•Í9â¯ü“JërDA9¢“g”#f”#z9Ê3ʼ€ñ]•Í9¢—ƒÑ[b6Ksr9¢³Ä\Žèå Gô–Ueí3°N¦fÍÈÿkwŒcuÔŒ:÷àÆ-ñŽwònœïÜ :÷èè¾s/eÍ[¬ò8°Ú„Š«õŽ ȧÀê °&Œ¬ ½æøès`ü£!}s5a‰ßXGÝ+,rX­ÆU'?/¬¼Xèè>°Z kŸ ¹0°j/è“ àÆ-ñŽD¥ç+ òšÑÑ}`eY³ÄúˆÇÏÏ>Pз‰ƒ“cMü#»6|¥Aÿ‰Ê1ÿH¢åœõÏÄʉF6Ä?Ré±<íûž4ã“rÌ? ™=y•‹)ýöM£¥-z6BbyÞý„v°´|R’1O:ÿ“ØUú•ßS’òCJÒkóý'J’5άÍ×—)Ÿ¥ (I9Z›çl} å%©‡þŸGg,O(×ö”¤ ²”%©†kóœøŒå–’´oR€}“â+/þ+­9ì2B–¢µé!Kxmþ•Ç,¥×>)sø¤Ìá“2‡OÊ>)sø¤Ìá“2‡OÊ>)sø¤Ìá“2‡OÊ>)ßã“`Äeqëø¤Ìá“2‡OÊ>)sø¤Ìá“2‡OÊ>)sø¤Ìá“2‡OÊ>)sø¤|O‚W¸ˆÓ•ˆ»Ä'eŸ”9|RæðI™Ã'eŸ”9|RæðI™Ã'eŸ”9|RæðIùŸ#NAÄ­ã“2‡OÊ>)sø¤Ìá“2‡OÊ>)sø¤Ìá“2‡OÊ>)sø¤Ìá“ò=>)_L®fŸ”9|RæðI™Ã'eŸ”9|RæðI™Ã'eŸ”ñIÁF]/ÿ Ÿ”9|RæðIùŸtq D\ýíÛÜs•27Òš¹‘ÖÌ´fn¤5s#­™iÍÜHkæFZ37Òš9®RæFZ37Òš/FZï"®£:îx½–€K™.e¸”9àRæ€K™.e¸”9àRæ€K™.e¸”9àRæ€Kù¸#n ˆ[.e¸”9àRæ€K™.e¸”9àRæ€K™.e¸”9àRæ€K™.å{àR¾˜.Ïp)sÀ¥Ì—2\Êp)sÀ¥Ì—2\Êp)sÀ¥Ì—2\Êp)ß—òÅtyæ€K™.e¸”9àRæ€K™.e¸”9àRæ€KD—„ªã’Pu\ªŽsòçu\B3'ç úk‰Ä”9SæHL™#1eŽÄ”9SæHL™#1eŽÄ”WIL?ã6ÒSò¯HL™#1eŽÄ”/HLwgNÒ¾à€§òl41@4eÑ”9DSæM™C4eÑ”9DSæMyÑô7âæqöÌ!š2‡hÊ¢)_ šî"Ïœ”•™“*g—€a7ŽÝT8vSáØM…c7ŽÝT8vSáØM…c7ŽÝT8vSáØMåžÝT.ð±› Çn*»©pì¦Â±› Çn*»©pì¦Â±› Çn*Ÿæöûò¯ÙM…c7ŽÝT.ØMw×@Äa|†:Î/œ^8¼pxáðÂ9à…sÀ ç€Î/œ^8¼px¹ïœ” ¼TáøP…ãCŽU8>TáøP…ãC…—­xɇ*ªp|¨rÁ‡º‹¸‚"úq38JŸÀyúÙ†œå—œ#6ÁyJ,`z߃£fî”Æà¨¨½VRib/i2²Éƒ£^nøßÊ¿÷ਙ;¥18ª0m]O‚I,÷ç÷v„FÈD+²Upt›×©±´Ìš¸Säuž;õSÒ…í¾_ù=8êÑÚ<½¯ÍÓµë`m6 ŸÖfÅà¨\ܳ—B¨Y>‘P¡|Gµðq~b‘€|Z›õƒ£ÀoŸÁQQ'» ÝÝ<û ‹ÖæÅo·kÓýv Ž‚÷}GÙÈ€kó¯œG)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”Þƒ£`Äeqëà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽÒ{pŒ¸ÂEœ®DÜ%8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQzŽ‚§ âÖÁQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥÷à(½›U¥8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQzŽÒ‹±YåÀQÊÍ*76«Üجrc³ÊÍ*76«Üجrc³ÊÍ*76«Üجrc³z?6«c³Ê£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8JïÁQ0âЏep”rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”Gé=8J/Õ•G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”Þƒ£ôbP]9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”Gu\B3'ëà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽÒ{p”^ ª+ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(½GéÅ ºrà¨Ê£*Žª8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª8ªrà¨zŽªxåÀQ•GUU9pTåÀQ•GUU9pTåÀQ•GUU9pTåÀQõU/ðÊ£*ç€Wίœ^9¼rxåðÊ9à•sÀ+ç€Wίœ^9¼ÞwNê…^9pTåÀQ•GUU9pTåÀQ•GUU9pTåÀQ•GUU9pT½GÕ ?®rà¨Ê£*Žª8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª8ªrà¨zŽª~\åÀQ•GUU9pTåÀQ•GUU9pTåÀQ•GUU9pTåÀQõU/ü¸Ê£*Žª8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª8ªrà¨Ê£ê=8ª^øq•GUU9pTåÀQ•GUU9pTåÀQ•GUU9pTåÀQ•GÕ{pT½ðã*ŽjOà1·Þr‹p!£+GO=y/ÝOóJ ²ÊsßÃŽîv"·b¶ý·dû¾iAòþ¯>åæ§+GÏÝd•}Ó ~{Ù}…ŒçY= ™ãεYþ2ç‹B&ð ä΋43'6d^ÎÊ2/³oÂ…Ìù’ åâÑ{ CæuÜx —x·Ž ™sãÄ„„ŠBæ¬ez2,¯0dËËo5—N¦­FéígÕVpé|{¿¤9b¦ ·ÙG¢9^ãç¤z2?ZðÛ³ûí£„…X9òÕXî·•óŒ# Âþyßo+/–ÝÇ&[™ØK-ÚǶÙ}-»ídÛÌ×ÉÓî<þ”Ï'-# Žë榜¼pÛ'0¬EûØ0ì•äáIVžm¿–TOG Èío×xÛš1–{æÖˆö±5ÝrAr»£HÍF´ýÔ $èäßýT="h+{ y7ÑgÒv³í܃×ÁÉ;æÖ°ó ùfåO@.âÊÈgz0˃ˆ3sp6âŽõÔ{,w§IâˆËÝG\ªqÄéä —Ž;ZÀÉ» Ȥ®6âÎÝ5–»ˆ³»è\ĵ Žî"ÎÆ{vI;ßGÜQÍzæi #î|ßµ âTÒ0,ˆ¸#2ì£òq­ø¢¡ÄW¶¦GÜŽV‹¸´q…‹8]‰¸ê’ˆÞgù'sËm8¶Ì-i[åÎ?9^¥‘S}¾ÀÑ= Ƭºæö+Û€µòh¦–¹%º5pò6q»OÝ:Ç3\b¹Á–­¿"æV›‰_-dnYâ—Mœá¥›˜[9bnÉñ¸ÈÍÓf˜ÔÕ:Õ¥ðÛS]ö­Nõ«Ê¦àèöI«–øež´9m~»}ÒÊÖV"NAÄaæ–‹¸ºR®™ÌêxKIŸåNõi7tª?àI-rª<ÉBpýø¤“wdt;ÿdBv50q\>êWÒ´M¼±0·NòNõIž&Ž[äTËO·cÑ“wÇ’K4qü‰ìjñı٫mž´eo’Û'­l5pª%ZåöIÛ¶xâøœ«—Î?i ®¬-­ºVÝEÄUqWÇ~löAƒDÎ]¯ý(jl9·pþñÜw›bùü¡SÝ{GwNuÊ÷}ê)¾n&ŽÓ¾IS ·“hñ>¶W?b©ÄrO¨‹âH8yO±}lƒä wpt?‘$Ÿ]ü²×É ~ûûI[ƒ·hâøx×oÈ=‹¥óçT¢£Û™ “#4HŽ×ÑÑ'n´.D\w5qì™[íélH™åQÿ] ùÙ-–O³!ymâ¸qÇmyâøg6ÄŸ{q?\ïh6äx€§˽oÖÛÚÄqã&ŽÛ£‰cÙvpôiâ8ôÍεxÙÌÇumâ¸qÇí~â¸]L·§Çž?ô¨sò Ž ;'®ŽÛa7âΉ¯ã¬ã蜸:.Á:n€Î‰«ãÖqô*]'°ŽqçÄ×qÖqtN\—ÇÊ¥+ Ž3½Ê¹Žq¯ÒÕq†¹5×q#ìœø:Î2·¦:nÄWÇYæÖTǸs²ZÇ qÏ?zæÖ£Î‰¯ã~åŸ[ÇÙΉϨ¼ŒÚvN¦åtNà¿¡:ÎÉ;¨ãLçdªã¼Ôq¶sâë8' Ž³_Çy9¨ãlçÄ×qVî:'[ÌÜšê8/GuÜŽê8'O¨ŽK¨ŽórTÇ¥•U—äq÷+6ãïÕtNæ:.¥¸sâë8Auœ“gTÇeTÇy9ªã2ªãœ¼€:ÎÌøOuœ—ƒ:ÎuN\çä ê8Ó9™ê8/uœíœø:ÎÉ+¨ãþuN>ê8/uœéœLuœ“7Pǽ;'sçå Ž3“©Žsòþ¸Žû•?›ñ÷ƒêD—„ªãœüyçå_1·ˆ:. UÇ9ùó:ÎË¿bnu\ªŽsòçuœ—ÅÜ"ê¸_ù³?ëÝM×6Íø‡½Ê£~‰fü§æ0âÎ%ß4œ8.£#¹'éçþQŠ´yH¿…›­k0¤š÷­7 Oæä[Š6[Ÿ!S(7'¼/#êU?rÕiʾÅÔ«xÊþµÍ¼±pÍÛg]ó[š·G„ÝB·=/Z8¶q1&ï±UmÆäãE›Á5Ïe˧×D _çªò~÷œǃÚí_,ñsþ¬Ò£9÷sÙÚ5_às~D{¹~–mrÿ¬ñ¢-%þí8*T?må=*§E+@^ЋO>”•ɇú3¶øÀ‡Ý]Çì¯üÓ‡Íö£UžÔž€Ü»ø°³™Øcò“vGõ°š°à(ãÃfÝ&êUª‰ã Ièö#/l±ÜTGÐC¶98yµCú{ }ØOpT« »Gß~e®ê†äæ¾k‰}Øóc™ËM5‘ß“Ÿ>,ìù°ÎÂnK«®ƒUg¦y¶?üö‘øïÿô¯ 9ÏJgyPMTèÃv‰åÞ‡Mñ‡—Oû¯5à£Ï{;‚ÝT¯¼«ûÊœ“›ß>¶xÿbOÛôõ¡½ed ¿}4‘Ú½Ú½›ÐÑ}yéß“¶K.ûn^RÇ9æÐ‡=r–ãË]5‘·(³: ø}G÷“#$?SG/èËK8∸‹o‰÷ã:çÃv·íœÛ9¶s>lç|ØÎù°óa;çÃv·íœÛ9¶ß×ïý‡í¿}4}Ô¢?r…\Vù+¾aÏÓú÷»“7ð~÷®Ðlmôвßio(«tò²Jë ù¬ÒËAVi]!ŸU:ùY¥u…|Véå «´®Ï*­Ü»B1ùiÊ*½e•;Ê*<¡¬2¡¬ÒËQV™VVÝô Û•¬òWþèK,â¿Fò¤Ž›²Ê_ùgç²JAY¥“g”Uf”Uz9Ê*3Ê*¼ ïÀ”Uz9È*+ä²J'WUzWHœ¼¢ïÿ(Ê*¼¢ïÀT”Uz9È*-ùÉg•NÞ@Viê¸)«ôrUº:nŸ¿ÓãyÚ•¬òWþèK,â݇Yå>¹Ÿe•%–ôÝæKòSçÈOý ù)m’Èù©ö8«G÷ä§|?ÈO#?õGä§#äÀÑ'òSYe—Í”U†ß…ÈO#?õ{òS¿p…úÃ/±ˆõg ö2}‘£Çä§FÜ&e²uzÌ¡IŠì È}—£»n£¥P>…ŒŒÏ9ûë{‹OÞ!x­cC¦IBrWˆõØÒÚ$–{ö’a±L öË3xÖM öÞÜ?ëV³Œ-þ˜‰øöþÃE+ƒ'^´­Uä õX>½&-Ú äýî9?Ò‘«J|tO?Êf4ÑôëŽe«ñÑÅÃÖØ:ÞJäþY×ÃE[:øí¾h‡V&8zFÊiÑ /è‹E[ТÅßðÏøC3ÂgþyÒZþÐ>1xFÌÚLeÂØ S©qzfðŒ¸G-Áš¿– ’Û”8 rË’ÁTÀ•Ÿ`*)üϱœ}úšhÔ1 >#ä9÷ÿ¿ßÞºž3j@þ?´·sq½˜J7n妢¶Ï6«t¸ +/vzü’š;f¿ò{JÑxH)š`7PŠÂÀ:V×Dê1¥ÈŒøÀj@>V ö‚'?SŠb°×'hJQX'a  w”"‹ÒS{Q Oƒ½ðÉO”¢ìp‚¢Àòœ ÷Œ@º 8yC)ê}3T2X—Ζ»t¶hÀ'ïÍŸQë¯ð¡¿F÷ksî®ÍuºOüÔ^¦û€^Ú*Ý'^›Ët¸6åµB÷k³.3+ݬãŸN÷kÓÎäU­³< ðìQx<‰æ-€Dãû¼RK(Ÿú¼Ya0:(#·‹’ñ´ÿö‰ö!QJðJËý.ð蓜íäØdpò†ƒsNv…œ“£NÞà:ŽÄÁä3ïwºèñÒ'_ì&òb—vBÞÆ¯ü–ƒólmþ qÍòOÍY\‡kóøí@>­Í5M¼6=ÈÆŽÖËV€¼9¬Í<Á\ÐÚÌk$šxmzy*Ô„NÞ d^Ý´dìÚluK@nQ2'1浂’ צGÉàµùWN dîí%Jæßɇ’yË¿BÉù7(™·ü+”Œ‘ƒ’yË¿BÉù7(™·ü+”Œ‘ƒ’yË¿BÉù7(™·¢dpÄeqË(™g÷’·Š’·Š’A·ˆ’yqŸ(™0âÖQ2 âVQ2 âVQ2O".@ÉD÷%EÜ”Lqë(qi)â qºqW(sòß dÞò¯P2Fþ Jæ-ÿ %cäß dÞò¯P2Fþ Jæ…’1òoP2oùW(#ÿ%ó–C” Ž8…Yå"Jf¡ºBɘ“ÿ%ó–…’1òoP2oùW(#ÿ%ó–…’1òoP2oùW(#ÿ%ó–…’1òoP2¦~G›qÄUqË(™•æÃJÆœü7(Ó|ø%cäß dP_m%cäß dLï┌‘ƒ’m¹U”Œ‘ߢdæM‹NþJÆÈ¿AÉÄ·iG\‡¿À81fžD\4X™¸ÁÊÄ V&n°2qƒ•‰¬LÜ`eâ+7X™¸ÁÊD1fˆ{0X™n¿Àˆ#®£:~q‚Ï<ëœ|ÀgâÎÉ2|&윬ÃgâÎÉ2|&îœ,Ãgâ^å2|&윬ÃgâÎÉ2|&îœ,ÃgÂ^å:|&êœ<€Ï„“uøLØ9Y­ãЏUøÌ³ÎÉ|&îœ,Ãg@çd>wN–á3qçd>wN–á3qçd>wN–á3qçd>vNÖá3qçd>wN–á3qçd­Žû•ð™'“>vNÖá3¨s²Ÿ ;'ëðÔ9Y„Ï„“uøLÜ9Y†Ï€ÎÉ*|uNá3Qçä|&îœ,ÃgÂÎÉ:|&Õq¿r>ÃÔqI¨:ÎÉ¿‚Ï0u\ªŽóòoà3LçåßÀg˜:ÎË×qNþ|†©ã’Pu\B3'ø›§•æQÄ}Riâ^å2•&ЏTš(âPi¢y@¥‰Bæ•& ™TšpÍÇTšßÓË¿¢ÒÄÝÂÝ}2.Z8¶¿y:ájž.Ú Wí*®¾&Öp5ð5±†« Ÿóë¸ôœ_ÄÕ€ù*®,ÚWó»hk,ÿ Wm_X´xò¡¬L>ÔŸW!ñŽc#ÇF8Žpá86Âql„ãØDZŽc#ÇF8ŽÜsl䇎c#ÇF8Žpá86Âql„ãØDZŽc#ÇF8Ž„Õ„Ù£|ͱŽc#›»ˆk â°;n„óa…óa…óa…óa…óa…óa…óa…óa…óa…óa…óa…óaå¾~— Vžù°3ùF8òpäáÈ7‘o„#ßG¾Ž|#ùF8òpäáÈ7‘oäž|#®päáÈ7‘o„#ßG¾Ž|#ùF8òpäáÈ7‘o„#ßG¾‘{ò\¸B‘o„#ßG¾Ž|#ùF8òpäáÈ7‘o„#ßG¾Ye’×ùF8ò\oî"NPÄéÒ;.?‹¸‰#G8$ŽpHá8Â!q„Câ‡ÄÐ`¯¯%$Ž\ qîmF‹ºB3+G8VŽp¬áX9±r„cåÇÊŽ•#+-ÚþZbåÈ+çnÑ´h¡+4Ctò#P‰ßÌûWþ *ÙvKÁÉ&§Õ åòOþC¸0Ûq“9µX>5™ ÆÆ‚J.äÈS6ɉ£.Xy*¦°Ï:ÑÉ ä~ÿ{1‹¶-\: *q—îç?ù»hšøèVžË¿ D¶aíXùíeÿüí‘™¨äÙª{9WHÀª;>ZuÇÙ×Ëͪ;Û}aJüÓå3'…«îHè wÐ-|¯ºWV7.ñª;Ò¿!¯“€\ÛǬºsLüv‹Ç9 åô±êÎe·oCby~Ÿü—Óû “˽¹PÎ3‚Giþ!¿Y›yamÚ%‡8÷Y09v°³äXt5–O}ôpg‰øN¶“÷¸“mw–”ã¾£»gR6G—äÂÉŒÉÛŠgYbyö³ŸáÎ’R6tò¶â±õ–ÝYÒ·ŽŽî*žfŽ^,(uptÛ[Úrv–ÈØòŽ®öª%ÚYRëØÐ•7½%ívOÏ¿ÞRÊùƒ?”?w–üÕúgXGœü”É‘ÒãaÄi-³<ЏQpÎAfûL*(â’½#.ï~Ù”8âÎwI#N{¯ø= f#.¹¼ÛËÝoo'@øÄg>ǥCWÞDܱ¸Ì•7÷‰/Š#Îâ‹ÌTŽle¿ÝE\ç•ÏÞ8º‹¸lŽþ/âjëGÀ"ù¿ß^ò&_ôîæŽáù%Œ¸Óç6”;q…‹8]‰¸š|§t–{¹^fû£é%‹ûئ“7×G/!ç(¿µ¹K FLÁ‘c“c N¸—ëgÙ ûߺvZ·ä¶L/†gm]»“ÝN~¸÷{)8gÛ(”Oœ÷sÞºv¯cÕ#¹¸ñŒ¸v¥U›'mIöèf*§­W 7OZ5;G­kWªË=­\Ü•ßWÞq "“Ü(Y~2}y®º6Ë ÎËØ/¶E‘Æ4Ä—C×îeìV¿gwÂØäȵ³!ã\;?aåÌG×îUó¶+ûéŒÐµKR?¯ü§kw¾¦¢éKÝ·N^]Ä™ÉSu^qG¯Þ¹Áôe:ó:ðÛÝôå&¡k—óØ€ÜÍGOÔpúò(6;w÷6ȵûI+c¹Ÿ¾Üu!â*ˆ¸+ އ©ägÓ—®–iöä]>oÖüû9<„RÑXî<„®‘‡pTqµ#¹m æ´HÁÉëíxÐ ·»'5G3þÇK¢î9–;®äßÞ‚g ß8Ó >- à9é(ï6#^¥àä{ N¾˜¾ÌO)8É’=‰¸Í`ŸóEœÙr=}™M_æÜ3û6|‹}rtôÙ'L¿£¨?^ änúRumú2?˜¾<òªãf¹óÉG}òî§/ÍÑMn“Frq«f¬M_æ'Ó—'ɵ¹÷ŽJ8ï|<ÅÀÑ t,óÅôe~JÁIéñ¬sâë¸:'®ŽÛa7@çÄÕq Öqô*_ W9ÕqtN\'°Ž sâê8uÜWÇeXÇ Ð«L W9ÕqtNlg{•S7@çÄÖq¦s2×q#:Îô*ç:nĽJWÇY ÎTǸs²ZÇ qœä†7vNl÷+;'9êœø:Îɨã?ØÕq^급<ÀÑ;xÒÚΉ¯ã¼Ôq¶sâë8' Ž³_Çy9¨ãlçÄ×qV>óƒGÐ9™ê8/GuÜŽê8'O¨ŽK¨ŽórTÇ%TÇ9¹<®ã~åÏ(8¦’ŸÍ;Û:.%Ð9quœ :ÎÉ3ªã2ªã¼Õq—œ¼NÁ™ë8/uœéœLuœ“+¨ãLçdªã¼Ôqל¼LÁù¨ã¼Ôqÿ:'uœ“7Pǽ;'sçå Ž»¦àä{ N¾˜wÎO)8þ³…D—„ªãœüyçåë¸$Tçåë8'^Çyùã:. UÇyùã:ÎÉŸ×q^þ¸ŽKBÕq¿òg?󛎪›ÌqÄC»=žw#År?ï»·#ElÈG¢!¾Õ1ÍüwÊÍ•OžîÞHõrqQ¯òxG÷~ÏqĹ÷»‰¸v>ÁÈݸt8x”w£äX>í[máàªôÒÜ1xBœÉ¹äÑ¥s¹ýá;âŽGÕØ‘ÜÝ÷í[½X6&âü²¹ˆ88srðñ ™‡WSå!§€ˆë=–O; D\Erwå³ ˆ“P>G\"®»ÁU/w íé9B.÷øÒM{zR‰#®$wõ^@ÄMSö âZ#®T$w!2>âÐ¥óWzq½!yw«¦ƒˆËfŠ8»%(_Lšç§ü!ï„–gxŸð:à 9àóçDJè€ pÀë6„Jä€'ûýï€7pt߯“Ð×êh(N.öÅûVÓ¹]:–;ši𢛀“·uÜ™€…øqGÀѫ牆¸Ê&à·›:NΔ:tÀ÷²¹í˜¿1vÀÏýÒ@nï{ø¾pôîz•&»xBxyÈÚ½Zž8à» möäÝNñf•?;Ôbùð{7CLðä.Ÿ7äæKþPYçÉÈçÎ ;Àîgjdzf2‘KðŽ“-;àšÀÑÞ»¼–øCe?t¼äг6œ\lX÷`ßùÝæ<}À§ï¸ã‰”ülä‚än_‹.ò‡Ê=¨\8àå!hÎ/œ^8¼pxáðÂ9à…sÀ ç€Î/œ^8¼px¹ïœ” ¼<äíÞÖ)Ïü¸>ùq%ôãòãæð=ÏØsY¥—ƒ¬ròã8zY¥õã|Véå «t~œË*|€¬Òúq>«ôrU:?Îe•Vîü8—Uî(«ôr”Uî(«tò„²Ê„²J/GYeBY¥“Ëã¬òWþˆ?´{_æI7e•¿òˆ?d²JAY¥“g”Uf”Uz9Ê*/ùCe?4g•^²JëÇù¬ÒÉd•Þ³Y¥—ƒ¬òš?TÖùCsVéå «|×qsVéä d•¦Ž›²J/Yå5¨Üó‡Ê…Wò‡¦ÏJ<É*ÏÇHO³ü3«´p…kþPyÄÊyòe@V™ Ê*ã£ÏYeài¥n–•.qVy>UÒk‰?Tð‡Î=™ œ¼Ë*‡a¥»¬Ýó‡ÌÑ]VY7rq3ýµÄ*OøCÇ‹;ƒ£OOÚ²JtôéI+ '(âté—ŸEÜØ´È‡<âÅ(—ÓX>¹¸ŠäÎ(¸D§Äî@о°I¥ ¹Å•°srº2byïwïh)@îê8#®÷^cùDü*¡;œ7‘ãˆÛ$‡ ™³B—λM€;°#¹s†w,›É°ÞD¹ðãÊCxÒç8sEœÙ¼?E\«±ÜGœµ°]Äe$wW‘ÞK(Ÿ#.tÀËÖv$·ì%³ÙGœ´øÒùˆs¶¸<ÜF\ÝÞ'lˆ¸¨WyDÜ>É-ºÉ†Œ8té|Ä à€·‚äö¾‹",›)â,§\øqå!ùÉö*Z9ò“>!?ý‰åžÁÃÎ=žÐÊ}{?Y ûŠü¤ÈOçlz/±Ü2xÄ|€×öçÓ¦H.€ºpM~ÒeòÓqÝkwvž•¿W:Ÿ*Ñ¢=rÊŽäïE{<ä‹•+j÷ýÊïùPú5AŽð¡Âµ™ªûL¯ÀµÙc*ÙùYÈP>ñ¡RL%{¹$ X›¯m×fÎν°6³ùÖ¬ø]5 äÓ®šJvv ÁÉ‹ßӮ͓ªŽnøP½n%,t8˜„kó,MÌgðÚü+)R¯%p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”Gé=8 F\F· ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(½GÁˆ+\ÄéJÄ]‚£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥÷à(q "n¥8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQzŽÒ‹±YåÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥÷à(½›U¥Üجrc³ÊÍ*76«Üجrc³ÊÍ*76«Üجrc³ÊÍ*76«÷c³z16«8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£ô#n ˆ[G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”Þƒ£ôbP]9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”Gé=8J/Õ•G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8J9pQÇ%8s² ŽR¥8J9p”rà(åÀQÊ£”G)ŽR¥8J9p”rà(½GéÅ ºrà(åÀQÊ£”G)ŽR¥8J9p”rà(åÀQÊ£”G)ŽÒ{p”^ ª+Žª8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª÷à¨zá€WU9pTåÀQ•GUU9pTåÀQ•GUU9pTåÀQ•GUUïÁQõ¯8ªrxåðÊ9à•sÀ+ç€Wίœ^9¼rxåðÊ9à•sÀë}ç¤^8à•GUU9pTåÀQ•GUU9pTåÀQ•GUU9pTåÀQ•GÕ{pT½ðã*Žª8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª÷à¨záÇUU9pTåÀQ•GUU9pTåÀQ•GUU9pTåÀQ•GUUïÁQõ«8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª8ªrà¨Ê£*Žª8ªÞƒ£ê…W9pTåÀQ•GUU9pTåÀQ•GUU9pTåÀQ•GUU9pT½GÕ ?®rà¨vqžüTú,ÉOòŠé:YBùL×1ËÆ°}Šóã¬Ü£›Bø§!Sb¹ß;£ÏÄ5QG²r÷ÝáqÞ«îÜ7Žnr›³µ­º€½Ô–ØKnï9~_gyt{[ O:ªÐʧÛk6áYúQšB-¦•˜~tR=–ûÛ«Ñ’Z®nƒÄ··¿½‡›ðÆ6ÀÑíí•Mdáöþ•3ø¢Æá‹‡/j¾¨qø¢Æá‹‡/j¾¨qø¢Æá‹‡/j¾¨qø¢v/‚—QÄ-㋇/j¾¨qø¢Æá‹‡/j¾¨qø¢Æá‹‡/j¾¨qø¢Æá‹Ú=¾F\á"NW"î_Ô8|QãðEÃ5_Ô8|QãðEÃ5_Ô8|QãðEõ{|Œ8·Ž/j¾¨qø¢Æá‹‡/j¾¨qø¢Æá‹‡/j¾¨qø¢Æá‹‡/j÷ø¢v1¼Ù8|QãðEÃ5_Ô8|QãðEÃ5_Ô8|QãðEõU|ÑŸQûÞ’…/jø¢x,óC~O)jÜŒfãf47£Ù¸ÍÆÍh6nF³q3š›ÑlÜŒfãf4ÛòŒæŸ1ŽB,#ùW3šíbF3ž¾üßÈ#jŒ¨q0¢ÆÁˆ#jŒ¨q0¢ÆÁˆ#jŒ¨q0¢ÆÁˆÚ=ŒæˆõA–aDƒ5FÔ8Qã`Dƒ5FÔ8Qã`Dƒ5FÔ8Qã`DíFÔ.†Ÿ#jŒ¨q0¢ÆÁˆ#jŒ¨q0¢ÆÁˆ#jŒ¨q0¢ÆÁˆ#j÷0¢v1üÜ8Qã`Dƒ5FÔ8Qã`Dƒ5FÔ8Qã`Dƒåš—#zX®iðÛï™Cc5Ž9Ô8æPã˜Cc5Ž9Ô8æPã˜Cc5Ž9Ô™CGX­ö}T ÿŠ9Ô.˜Cñôò‡ü-Ô8´PãÐBC 5-Ô8´PãÐBC 5-Ô8´PãÐBm-ôXI:…jh¡xHùC~oBwŽ Ô9‚PçB#uŽ Ô9‚PçB#uŽ Ô9‚PçB#õ{‚P¿0¡;GêA¨s¡Î„:GêA¨s¡Î„:GêA¨s¡Î„úÇ+¯o½,„úAhÁ„îK  Î™Ð3¡;gBwÎ„îœ Ý9ºs&tçLèΙÐ3¡; Škœ[@ÖLèΙÐ}‰Ô9Pçx@ãuŽÔ9Pçx@ãuŽÔ9Pçx@ãuŽÔïy@ýÂë¨s< Îñ€:Çê¨s< Îñ€:Çê¨s< Îñ€:Çê¨ßó€ú…%Ö9Pçx@ãuŽÔ9Pçx@ãuŽÔ9Pçx@ãuŽ’Ç,¯%P¿à-Xb} ûÓ9ìOç°?ÃþtûÓ9ìOç°?ÃþtûÓ9ìOç°?ÃþLõ7¬FßQç,›û³`‰õ%ºOçè>£ûtŽîÓ9ºOçè>£ûtŽîÓ9ºOçè>£ûtŽîV+åµD÷étŸK¬/A|Æ#ˆÏ¡þR^|.gK€6qpFŒýô}^åål²õXžÊÇ;ýcq5ϰrqåé2¿)/ç|iGÏÅWx·÷ÏQ`mÉÿÝÞ£^:RíŽrxçyvãN0Ò,ÿ¼q/@_:®]—P.¾[2BúÒ$–'ô¾”ÕÑ—$¾qçìtD_úé@£gwôˆ¾ôç¨.¡Üd’GmÚ²Ùæ÷¯üæöæ…Ûk7³!}–lfq)ÝÌrüÀ!@îÒ¡=‚zH;þŽîKC*Ç9Zc¹{ì&³Ç G`¡NnO¾§ˆÊ¡e³BNnnïÏ[5ØN"Ç3%¹é©lÇÛ¯|n'IÇ3% 8ùwO%ÿU °]ÎF8ú»§ÒÒ–ÃWN²ϰnÑ–§‹öx(–Y-Zƒ±‹v4»…ª E[Í~÷¢Íõ,-b¹_´n¡:’ˆ‰Æ­Ùÿõ^´ç6G·‹öxÄô`Ñ69žUàÒ¹E[Í~Â9N¾ƒ“÷‹Ö@»þ-ZI›îèÒÙE››¹tïE»Ë…'X´š,…çbÑnÑêÊ¢u†ÏŒ³<0|Ì‹Ô>/÷2±ò¶ÇoBÇ‚9 A ÷†OÈ‚ÉyFÉŒÈð»iѱ`àÉûF 9ùî~ûD$á(³÷ͱ`2<º5|,ÂÑ>µÍ(™>j6-:Ì‘]$ w¿Ý´!-çÎ'PVžÜo¯! æ¨ 8ºeÁ4{ô÷³NÛ>£dF`ø”±Õ•ׄ‚ˆÃ,qu%uu̯Vê, Ÿ]£=Pçðgò f<á“ê!/@nMM50|®äžù•¢1¼Ó¤4íg/wû¿ÞígcøHöh +WÇø³›˜þ%'û‘7£+¯–w–Í•Sö®äurcøìÇrR —µGcxµo) o¶Ö#2|di@nîûØÌÈK+rû¤µò‹ˆ« â®Æð<e<2|Ò6M² `ø„í³~vÌîuÕmšd‘á#k 9nIŠån¯ëÖÇgû,ÈÉ1€ÜÚŒmX0'"ݳ`ÌÑÍ“öH¸¶äÞðÉÁ^=¯ ¸òÙfÔå“sTBõl<"y«E>Y0FÏÇC¬y±9íߣ/Œá-”éýY`¥~fγ<Ã˱“:†ÆòÉIÕÐIíàèÓ^8ßzÄëÈ¡|vR[0†wÔ[mGr;†W %Éõ¥»Æ¿}2| ص 8ºßªÑZXåøÃˆ/ïK‹yœ›ùÖ#ÿJÈ< G[5~À #–O8»9©zÚË@îfVä³Þú3F; 1 ŸœÔ²6†·Xc©•«²ajƒUe;¬ÊF܉ð…M‚UÙˆ;¾*K°*q'ÂWe’VN^PU&°*q#ÃWeVe#ndøª,êlÄ W•9Œ¯ÊœTe¦2We#ªÌ²`¦ªl„}_•Ì\•°²\• ÔÉx(È@>êƒøªìWþÙ±U™íƒøªÌɨÊLd*«¼Te¦r%ï *3}©*órP•™>ÈT•9ùUÙ»2—U^ª²wäJnû ¾*ÛQUæå¨*ÛQUæä Ue Ue^Žª²4Väò¸*û•?|õ<”g}W•¥ú ®*T•9yFUYFU™—£ª,£ªÌÉ ¨ÊlÄWe^ª2Ó™ª2'WP•™>ÈT•y9¨ÊÌàëT•9yU™éƒLU™—ƒªÌ ¾NU™“7P•ýëƒ|Te^ª²wä8sGïŸUÙ]Ä%q+ï8¡Êµ$T¹æäÏË5/\®%¡Ê5/\®9ùórÍË—kI¨rÍË—kNþ¼\óòÇåZ’ÇåÚ<øz_®¥ü,°Ž´¹%å! &ÜŽ¸åyôtÿé'&´Ö:ËZ20¡ó䮸*#4¡ÏW ï&“šÐò²¹)¾Žl¨ {…$4¡O’2«m8H LèיϠ+o†N h`B_Êͧ޼ü]|ɹeRÜBH-8¡šŸw-¬Ü_}«%4¡ëñ\h@nZ=cK¡ }!7Å—“›ˆû4¡Ï¿Å&´5ÎË{ÍþÛæ}7ÜuŽ”çXîgФE5ÖyÛ\[ @¾tpô ù"-ôšÅ!žœÜm.4ï ë5Ÿew,On,º[5~¾:::Û>bÙ%öšÝ;ÓÝyÍy+@î)î!½¬îî#IVî ö#@¾¤Rέ]@ÞºhøÝ‘zf¸±ü¿øùy³é¾â5÷g!óé"Ç!³ì"Ç!³ì"‡!³î"‡!³î"‡!³î"Ç!³ì"‡!³î"‡!³î"Ç!³ì"Ç!³ì"‡!·%þV´½Ær2·2߸Èi_ïVÙôíW¸U&}ón•Mßœ¼ôͺU>ÿòr¾Y·êBÞAúfÝ*Ÿ¾y9H߬[åÓ7' }3S»Sþåå }3S»rãVMéÛŽÒ7/GéÛŽÒ7'O(}K(}ór”¾¥±"—ÇéÛ¯Ék+Еü°•0¶âÍ T½Í‰©ùím¡0d®¨ÞœˆBæN% „SéGž´wr‡SIÀUšl!PAêÄS!³ŠS!âT.OÞ÷f¥ƒæ÷N~ú0áT¢9u# ™‹eó2¿Ðˆ¡²à*•ç!ãm2€@”'Ã…LFF¬·PÈ,‚R`ÈÔÐ/ÒM:‹­;Eâ™ 2Îð¹¥€Y¥ ‰Ë'ï¿+D:> dœásJ!#Š>Ê–Í2¹ÞøEÿë¿?ÿÕŸŸ9ÿðzͱôWþ¿üSvÓ_ùÿòýŸÿ÷|ôSþÿüÿïßãø?~ÿgµŸÿÆv>ìÿ÷ÿûûÿßÿøŸÿ§ÿ u>™Ö!DyLP-1.10.4/Data/Netlib/coindatanetlib.pc.in0000644000175200017520000000026711507632744017070 0ustar coincoinprefix=@prefix@ datadir=@datadir@/coin/Data/Netlib Name: Netlib Description: Netlib models URL: https://projects.coin-or.org/svn/Data/Netlib Version: @PACKAGE_VERSION@ Libs: Cflags: DyLP-1.10.4/Data/Netlib/pilotnov.mps.gz0000644000175200017520000021577310430174061016166 0ustar coincoin‹¤K®9pilotnov.mps¤ýËv#+³6 ÷÷ûÜÜÃÉ™l–U.͹ì²ü•\Ëó»ÿù!GI©œïjhù˜ ‚‚‡¿_ŸÚŸÿ¾Ÿ¿>ÎÿûôÿM¿.ÿ¿òoÿ~|½žþüøzýùôûüóõýéùù©|òúûåõÏ“Óøÿþ?Îß—ÿ÷ÿyúxz:¿üOùQþâÏãù}0ëï?çöûÏù³ý>ý¸´ß¯ï¯ëïßÿ|€ßGð~ó«ýþ|ÿÛ~½wìç¥óü~é¿ÿüþ=ÿý÷§§¿þûZÿýíüóÏúûåüo“ù|ùóÒ~õß/ç?­-o'€=õº^NË7¥®óÿ.u•ß§ÿíõž~6½Àï·ŸÚï?§YžSé±Uoåï¼üxí2¼ÿ¿›üok{ëï×&çÛ¯—þûÏgÿýzüÝ~ƒßÇ÷ÿÓ¿ýÕõvyíßüêõžÁïø}<½ƒßÿ´ßÿüߟýû×f?o—÷à÷ øÝÛõãÔåÿýqêmù÷7h{ÿýõã»ÿþÓëýý£ýÍ`Ï/Àž_€=¿{~YûåTûe‘§þ^å©¿Wy¦ßý÷*Ïô{‘gÂyþýÝë}ýï|ÿ²ÚÃ;h×çy±¥òÍ÷Ÿ·Ö_¯Ç ûõúÚt{\×ÿÿ¾þ®í‹ù÷ øÝÆTi—¿-øíÁïÐÚ²ŽýúwÖßE†óéÔìüß÷cëßׯŸ¯Ý‡tûüùý}ì¿á¿¿¶=¶~ü½þ.ÿüûû7øæ|þýåòùO÷_ý÷ãÏþûïø}¿»]}œ»¯8ö±ürüh~ã²þýúÔ;ù[ ü­þÖk¿µÀßZào-ð·ø[ ü­þÖk¿µÀßZào-ð·ø[ ü­þÖk¿µÀßZào-ð·ø[ ü­þÖk¿µ‹íý¹´z'ßkïµÀ÷Zà{-ð½ø^ |¯¾×ßkïµÀ÷Zà{-ð½ø^ |¯¾×ßkïµÀ÷Zà{-ð½ø^ |¯¾×ßkïµÀ÷Zà{-ð½ø^ |¯¾×ßkïµÀ÷Zà{-ð½ø^ |¯¾×ßkïµÀ÷Zà{-ð½ø^ |¯¾×ß»üûëéü¿íwõÃË7ŸÛß)¿ë¿OþÙÿl¶À?[àŸ-ðÏøg ü³þÙÿl¶À?[àŸ-ðÏøg ü³þÙÿl^ÿ~õ«øj |µ¾Ú_m¯¶ÀW[à«›ýüjz~?þj}4ùp |¸>Ün·À‡[àÃ-ðáøp |¸>Üî€wÀ‡;àÃðáøp|¸>Üî€wÀ‡;àÃðáøp|¸>Üî€wÀ‡;àÃðáøp|¸>Üî€wÀ‡;àÃðáøp|¸>Üî€wÀ‡;àÃðáøp|¸>Üî€wÀ‡;àÃðáøp|¸>Üî€wÀ‡;àÃðáøp|¸>Üî€wÀ‡;àÃðáøp|¸>Üî€wÀ‡;àÃðáøp|¸>Üî€wÀ‡;àÃðáøp|¸>Üî€wÀ‡;àÃðáøp|¸>Üî€wÀ‡;àÃðáøp|¸>Üî€wÀ‡;àÃðáøp|¸>Üî€wÀ‡;àÃðáøp|¸>Üî€wÀ‡;àÃðáøp|¸>Üî€wÀ‡;àÃ=ðáøp|¸>Üî÷À‡{àÃ=ðáøp|¸>Üî÷À‡{àÃ=ðáøp|¸>Üî÷À‡{àÃ=ðáøp|¸>Üî÷À‡{àÃ=ðáøp|¸>Üî÷À‡{àÃ=ðáøp|¸>Üî÷À‡{àÃ=ðáøp|¸>Üî÷À‡{àÃ=ðáøp|¸>Üî÷À‡{àÃ=ðáøp|¸>Üî÷À‡{àÃ=ðáøp|¸>Üî÷À‡{àÃ=ðáøp|¸>Üî÷À‡{àÃ=ðáøp|¸>Üî÷À‡{àÃ=ðáøp|¸>Üî÷À‡{àÃ=ðáøp|¸>Üî÷À‡{àÃ=ðáøp|¸>Üî÷À‡{àÃ=ðáøp|x><€À‡àÃðáøð|x><€À‡àÃðáøð|x><€À‡àÃðáøð|x><€À‡àÃðáøð|x><€À‡àÃðáøð|x><€À‡àÃðáøð|x><€À‡àÃðáøð|x><€À‡àÃðáøð|x><€À‡àÃðáøð|x><€À‡àÃðáøð|x><€À‡àÃðáøð|x><€À‡àÃðáøð|x><€À‡àÃðáøð|x><€À‡àÃðáøð|x><€À‡àÃðáøð|x><€À‡GàÃ#ðáøð|x><À‡GàÃ#ðáøð|x><À‡GàÃ#ðáøð|x><À‡GàÃ#ðáøð|x><À‡GàÃ#ðáøð|x><À‡GàÃ#ðáøð|x><À‡GàÃ#ðáøð|x><À‡GàÃ#ðáøð|x><À‡GàÃ#ðáøð|x><À‡GàÃ#ðáøð|x><À‡GàÃ#ðáøð|x><À‡GàÃ#ðáøð|x><À‡GàÃ#ðáøð|x><À‡GàÃ#ðáøð|x><À‡GàÃ#ðáøð|x><À‡GàÃ#ðá øð|x><ž€OÀ‡'àÃðá øð|x><ž€OÀ‡'àÃðá øð|x><ž€OÀ‡'àÃðá øð|x><ž€OÀ‡'àÃðá øð|x><ž€OÀ‡'àÃðá øð|x><ž€OÀ‡'àÃðá øð|x><ž€OÀ‡'àÃðá øð|x><ž€OÀ‡'àÃðá øð|x><ž€OÀ‡'àÃðá øð|x><ž€OÀ‡'àÃðá øð|x><ž€OÀ‡'àÃðá øð|x><ž€OÀ‡'àÃðá øð|x><ž€OÀ‡'àÃðá øð|x><ž€OÀ‡'àÃðá øð|x><ž€OÀ‡'àÃðá øð|x><žÏÀ‡gàÃ3ðáøð |x><žÏÀ‡gàÃ3ðáøð |x><žÏÀ‡gàÃ3ðáøð |x><žÏÀ‡gàÃ3ðáøð |x><žÏÀ‡gàÃ3ðáøð |x><žÏÀ‡gàÃ3ðáøð |x><žÏÀ‡gàÃ3ðáøð |x><žÏÀ‡gàÃ3ðáøð |x><žÏÀ‡gàÃ3ðáøð |x><žÏÀ‡gàÃ3ðáøð |x><žÏÀogà«3ðÕøê |u¾:_¯ÎÀWgà«3ðÕøê |u¾:_¯ÎÀWgà«3ðÕøê |u¾:_¯ÎÀWgà«3ðÕøê |u¾:_¯ÎÀWgà«3ðÕøê |u¾ºü.¦ü÷÷GÍâ®iàSòpý5§e?ÁÿžáiÍoEO‡‘ÂçŒíg‡Ãàò˜ãÓšŽ½àZ…¿µ_oÙÔÿ­v­w- ð9Oº n†ƒ UøO&üóÁ ŸSNñWC…Ïy¯:ýGásFlÿÊMÿ=­é±X§æÐàŸû4ÿÙ4ÿÑ4oò!%3æü´&ËÃ?šÐöþ)õÏÓšK¾bíÁÖÿ …ÏYkëWj—P¸Ü?j—P¸Ü?j—p½>þ˜¹ŒvCd°‰h¾þ{<¸ØÜàpd,Flbýÿç 뿆ƒ?F ŸS÷©ŒkÅÖ„··…ïm/¢›!ÂÚ­,¼9¸!&|ùÏÒ˜)üQáÝÍá³u~L>ßA5øàÍ»T4Ÿ)ü1á§[õןö«ÃC…ÏÐ_ Oáo|®}Ê-VjŸîv<îTœøŽçÚï†ö{õ6&ÍyNÅŒ‡qýd6oí“Ù% õ?Gásšô _¿âNeú+#kûcN¥Ás*®;•?Ÿ}¾D_ùt½¼vég‡_~‘–„a²ŽéFÏ­ÚçÜsņþ|þàéÉÕé—Žï6…>ü:üå1Ý%ã§"cれábð9søc2~Þ!ãtGe‹Ó"dt6T_HÁÓT@áÔèügûPøù ¸±šŒM<Á:|kÂ×ZL”„ªÎFì ÿù-‰Eáoßšðß÷?ß‚ÓÇ0ÄUCÓ½¶©‰ÓÍ.T‡=8ÞÄR³·-vmð¯Fð´ÞœSšØÊæ;|¾Põ„¥7¬öéz•òÕt]Olb™ üø´Þp#óD¤pÞÄþÖ>‘†ÉkÊõêÊÍ&β7‡ÜkGM$_M·gC%-)Ú:¹‰ÝTü­ý¢–6ݵQÆxI3S«dºy}Vfƒ©Ìk‰Âå¹ûi½ÙÅ.ûh(|¾)ÔÛ0%N˜O‡(ü±URƒ?¶J:ßV½ã!P¸®º3V]Î1–Âç‹U`:}uKug]u¥ò›ª;ïSÝé¶ê¦k¬ŠêN·Uwº¢ºV6ßCÛªºÓ>Õö©nºª¼mÀ>ç2ž(üÊ€=½ëv-›¯ím°+üÁ»ÂUÝ?‹ê¸q™CT77ŸÂ¹m¶YuýäZíó-Gyʱú¬ÚjŸ.*+_MÖ_d5ø[ûµŒŸ`Êÿ­pÈLΧœº¢ºe þ˜u4øƒ>éõ¬©îÙßV]ƒ¿µ_Ëêt­}¾Å ¶+à­S]ƒ?¦ºLuíO?fu þÖe,žד?ž/ý®‹îµ€Â7lµÕ5øª#aV+{Tu/ûT÷ÒT÷¢©îåŠê^T«ñ¶ê^n«îåŠê^nok\SÝqŸêŽMuGMuÇ+ª;îSÝñ¶êŽWTwܳ#4ñRLªk¿n¯{í}Å“úÕÓÊpAÿn —•ÕÌ?#M¤ñ ü×\ôOá3%§-à™Œ:µ¤ÂÛWn«Œn€•8MF“V’Q‡#+|ýj€‰².bgòÏøÈàõãv-èµL5sOá3“ŒVÉÚ|nP‹Œ3áÜN\‹zh¦bB_ ®†Ô3ŸÞŽr×^™BÈîjXk·ƒõbí>„hW¸C•ϧÝŽ¿ ¶¯ýVKóšŠ×,ÍòhÐáÈÒ*¼}¶ÊÐ šŒÁÊ2êp$c…·¯âVc„•DUÆñà%u8–qlÇ<ç_i£Œ& ·4c:d.ãó8’±Â—¯>Ï‹ld»ý:˜´È¡ÁÙ[›8³íwÓ"‡õ„ºì/´¹ËŸ·àB«¼£pUxâQ«·ƒ¥pâñW_­‰_šŒ_WšøÕšøõH¿h¢ í|áKo"øê´Æ'ÕÎO4 ñ6(|&׃`›Bƒco¥ÁQRáí+»UF Sƒ3]ŒS„ÌdÔá(¨ðö•Û*£C•8EFYFŽf _¿jaÄé‘(ä´/ 9Ý…œšÑ3ƒZd<]3.™¦.¿µ³<Ò¶×:+§eã•Nä*}Uáí«°UÆ€* \Æ0øCǼ$£·ë+¼}·ÊQ%QÑØâ‚5uø*cƒ·¯ÒVª$)}jRˆ$£GÚ9%§_y£Œf@•dUFÑŸ¯À±ŒÝ?O‹'5Ø8] 6Vøõù©V²Œ~~Vx0-3¨Á…½éCríÏÕNO*KÕ¥qËn®p–°Â¯nmwá¯mmŸ?µ˜¯Lë1)§©ý´NÓP ¦]Bl<r_¥]ÓPv’†žk…KšàXCËI²eÂ# ‘¯ÊßVO|›"ÞÚôE¢£fi3ÅÙ6ó~äðVÉßvŽÂO»Ýümª”ŽúÛWíUÈfè_5í¿\±Ô¿mKNØl_}´(š ÕT43”Êÿh‰‰,¿À_¯À)I‚þK…·¬#ž®µÂ'êTÞr“XeƒOl«Zí—_ZúR«ý¢ ßrÇxYkûxKëâ ^+üE‡ÿ][àeÞËú}Hy:Ý™“&Æz:8º!QøÌá-ðMd•Ë„Þþ.…ÿii”ÏB%–Ëh\ö‡Xñ“2ÖÈRÌš^ÖáwÈø þ.……Jœ cŠãÁ:óˆeÌCm¢·c)ü.ûߥp £P‰ç2º¹OÆl<–± kÐbæÛ×~ŒàïR8Q¨$öø”J¸CNeò†ŒñÝœÃ{,ÑÛúw)üLë}Æ•üÛ$#)ç³@S%Køº5l>ºvO¢Ãßx›¼¯}U¦Yª!ÞÜqåÚœµ¨ ´$eIàJÏ®-¹6™QxYÖl1[(|&—ñïµ¹W’Ç|J(»îy¸˜Àw#g¯Ã¯Êxm&¾C.ÆŒ7ÂįÍðbí¶xÁ/îºLïp)nmûÿÜaC-žžåØCÌa#ƒO¬ü=åÓÌø´Rô¯û ñ})áÂO¤û+:b½xcŸV&ÿåß]8—”½eð‰ãÑPê£óB €ù.UÈ.-šÿŸn\©îÓ¾¦:`Ú¨®ÃR]‡?¤ºnó©îŽwMu`Ä=¢ºHuþˆê^ÍjµòJƒŠ•kíeŽ Þe¬<Ø<fö6ÿµÚ©Ó/ðÅmË+Z»цä3ƒ÷J˜G|5«uÉ ZIj¬‘\fpÔ Eað#­Î¯fí yaÅjo‡–l àHÁ~<¤h]¼ÙöÕ‹Ë 6ҪѥCr\wE!U‚œþëǯ©y°öç‚önÝ|p<«¢iñõãŠ賓Áñ´ˆ+9olÉ>ù‡¤’-¡•€–µ’ß·[re¡ÿ_Žx¿ÆòhËà´]÷×È»ÃqíÓ-¿a:Uǵׂä×SuꞯiÿÑzâjŸíxða‡w¿;'@»ÁEC†Üœéæ£x›ê2i˜n uW[Ūw“[Ïþ:œ]Q©óÁ²‚ù¯é…Üß8ä2¾ŒãF0iØ18vÛõ#Œ—løÞÒp¨`ëòÅËæ²2Äâëƒ#‡ƒ‰v™s°‚ËÂ(˜uÂpàÓžóœÒi©‚ëlR,kÈ–Âù 4¬i%ÿµæãÅRI.žË<ÉwP×Ë'Î<ääEÓ.ÕGG .“º‹ûd 6EóeùÈ„G ®ihÉæd¹‚Ö—vq8T°O‡\»'‹ª íôú¿¦’X&6ïÒd›?NP’®FÃà¨íÅì8ælhÛk~½³v½+ àȸl1oçóØö‚6Åó´Õá`ô–1QTW'VÁ¸Æ!DÃàLC&šÜ\Äjø?”^pvÝ£±ÝAµ•³¡1ºÄÌf8$—’· ½ /Ã$Û¸]]u5jr¦ŠÅàPC¶ ñ`íÈü[ûEACZM»_~D×aÛ{ÿ<‡˜ÐÑ_‡cÏy›mø)–b%%ÜM³quøš>‰‡É¸EÇ3,׿»À›u¿;oé¡‚W°ëiE‡“¹·‘£8ûUdp>Å–ÀŸ ¿8 .3FN ŽlÈÒSŠØlŠm…ËóâµÃá—‹ †™}Å«f<Øä\³ŽGñj™ÔÊzf:šÅÃ/Š…ŒÎ28\´Ô|äOqÇü8˜/ëkǵ¿Á›ø·:®Í ÄÆ¥ñiJFçg¼÷ .t\ˆÌoÚâ÷r·ùÂɼO6²Ž+áPŒe-yí}µibY2el` Ìpp1DÏáÈoºC©ÜMwWpÇÙx0¶OxN:.Þš$9T—s;NëÞÖü72yêÝ[\¦p¼Ú\.¢?Ω ¬§FP×B6¡vìTÊÊn¾± lYÉ…ì³cm‡N?Õàsˆel0§_þªµ=æêpd©LžŸh¿—)'ÇFËàpj0ÅoEHÏvâat¹1ot8‰ƒ›4?¿-§õûGë÷ß÷ëv¯ªÃy÷š8¬]\.ŒÔOJ11 Ž|R8 y°ÉÐaŠCs txí½íÅ“–€z,± óÇîPbåÐg뇡à8–Á[\Rb‹_"É:®ÁQ÷–XÁ¥0…Á¬GËJj°bÇiÝÛäCÝõîõë&R‡ ÃÚÌÁ2YWçc8œûöìåXnhÇŽ‡uu|©Lê ëX4d‹ßgp´¢-^ÛûÁ²a]ïd庽Çà@uc1Açêm\Úï5ŽÙ¦yd%LÆäùŠ=è÷g“JAò++L‡3#(ÑLÊkªý¾Jö†c…kýnŸ)\rçYvç~h‘~‡³~÷Ãèä~Oë Gî<ÊœS–~!Ø+t8êww¨úcDäÎK”–J¬– ~H6¤yè4—ɾƒ5 çô§å®³Æû20ÚÎú½ÌDί=ªFi?Œ(Ô~_»žÂ…Í%„ÛïSI[€t¸äÎsÔù`ÃØ·wc5yГhü5˜èÄ̅Ǿ® xgfoƒuù÷XÖÖLu°ãRYÙ—ÑÍýNâ¯qË„çÁ˜uó€ÞH•;î³1öÍ/“säveæ>18Ìßᔂ¶¥bsJÁ© 1>ƒËóóƒ}«ݽo ùù_˜Óï¹Zr8(|~%Õï¹Z¥”‚SÙ;¸PÊï¹Z%E°qñ=ªùϦùž±À(-JÞÔ‚ö‰&1JAÖ%>?ÂIûGí —ûGí —ûGí®÷O%õ³OB7`b;ÐDF)ÈFÆ¢$@)h{Ò£´K˜õ‡Ë¸8%=¤’úݤ°”‚¢ð˜RŠE)w ï¶h^¢´ORR ¢šg”‚;„o™A8õ DYµ„Rp®]€wJA­öÆÅ÷˜Sipâ;¥ ð6ŒRÐ>ÑœBF)h»K`”‚sÛ§W{[z;¡$­YÛs* þ˜SpÝ©TR?û$¤ËbJA'”‚öIÌù„Tx7kŸŸBVl¨’úIF@(׉RÁÝ%ã§"#¢l2 ”‚|öÛ ãç26ƾéD»1@)ˆ/(cN@)¸!”‚¬€Âæ@@)H„G¬|¢ð˜R*¦…Çt š‚[ÙÛ·&ü÷=ÂO1±%»‚RжóZl€RyAB)hÛšEº’)bJÁ¹‰Ó“ãÒi~å'µ×Ê~ʰ°ZÞ"™<× ÜvÄ5H'Há¼íkP?¯mŒ×'ÖÅt Ø*kpm»§_È5h[¾n"àÔh)\ \ƒÚào iÊB\ƒ7¦k6Ê× (Í“úa”¸ü%ñ|&%\ƒs툪ôâÕù¶›o!\ŸoÏ·Ì?f$¼¡`È5H‰×[Ùô•ë)7xýª‚œëÒêiëÓ3ÐÐëÓÓmÕÕ=Mu§Ûª;]Q]+›¾Ú¬ºÓ>Õö©®1Þ?¬)#á­a ¸%FÂeX—_Û‡u«Ï?S¾Foëþà°ðk ^ør¼…ˆj€ðÚ'Ñ‚!oáÍÚ§¯î˜ºëÜÝòQ@í5oN_n×ó€ ìÐ2é>ÝàcK¼G¼…ŒÐ˜ #4Tæ5ÈʧWƒ?¶åÖິ•n«jªkpÄ[È ê¡áÕ5øcªkðÇT×þôcV×à€·P 4të’_ 4ܺÑK ·¨ŽÄr­ìQÕ½ìSÝKSÝ‹¦º—+ª{Q­°òéª{¹­º+Ì>kÙµÙàšêŽûTwlª;jª;^QÝqŸêŽ·Uw¼¢ºãž‰´&ÙÙ–nwç ® :•áeþk«Dú[kR«Îª\â«¢iq¦=´WéÕJM‹¤’óÆ–H¬‰Vp%["±&Z6“J~ßnÉ•…þm8âÊšˆ/!`ÖDa2¢¬‰¨€°&.>­ß䬉ÍW ¬‰k2eM´0ް&. xÆšØÄXå[8”5Qº‰BXIŒé»mÊšˆj'¬‰\ÁŒ5±»Κ((˜²&öÚ9k"U°ÀšfÆš¨\sª¬‰,yk&YišozÁ[‘”NQ9€êp®yH§ˆ 0¢ yJ§”)"×<£S„^Ò)rÍ3:E¼ÁÚé;œ+ØFÈš(e/ÒE˜HLI¹†éb¯“. ¶IImG3ÒE6ø9é"°MFº(ÛæDºX—àÇ_ˆG¦^í6ÐP¸~HÙñxÇlŒŠÛ…lŒà"2ccd,gcÑccäªclŒ¶ûÆÆ¸˜ Lª¤D‰ë£)Exǘ2…cÍ lŒBz¨Xɳñ%³cl{:ÿµ¬Nð• ~(A—w1°ÄOq>!'ÓÅ… åî5.fÃçôÙqf–y^b‰lŒ‚ç¢lŒ-ÝX`cÆ%eclW`cdž‹³1rÆÆ8Ãábˆ±1‚ÜÄóÓáÜñµÄéÿš^õß­îE¼…J÷z?óâ± ÉxœGf&p·+p6²îåœk÷Jœ´{ÎÆ² œ‚Û¥œ]xÎÙ(v/ælD»a„³±w3¥ß3¤\îœã©[ï÷:`G Ç‹àåÚvÝyŽõ­Ã©u”NŠòœ1Äû$BæØ:N sds'sls†@æ(l~P2ÇÕ $2G²ù!‘9¯ÀÈ•P’9j^¡×άÃÄÙ¸«ü¾×+dç)œIVº:“>2877ï^€~)™Wà”¶§Ñ2ÊGæô9åc«] |äá*£| DFùȽ£|„J¡”½ãîô }¶n CÌ7úÝgCá‚W01KQ·d2ƒó9#+DöžÁI1å‚´Ý3.HI2.Hˆ2.Hæ8dƒ \Ü+0.ȸ e¯€¸ 5¯Ðk§DSÏâÁÅ:PéPv$fŸtO4‰‹±O².¡ðé+Ö?j—P¸Ü?j—P¸Ü?j—p½*ÿ£{ºs ‚&2öI62%öIדWû¤["¾?\ƵÀ+i6•ÿñ¦ð H`Ÿ…Çì“P,Ê>¹Kx·Eóû¤{’’+û$ÐÉ`ƒŒ¿î’ñS‘±O6öI>ûmñó¹ãt‚‚Ý`ŸÄ÷Ä1}¤ÜöIV@áÉ$`Ÿ$Â#GQxÌ>‰ ³OŠÂcî MÁ­ìí[þûá§ÈÙ‘mLHàèÚ¹76À>‰¼ aŸtme#Ýyx%1ûäÜÄúËKY5nµ3öI×ò?asCZ?œr7§±>²¶#öI:D çm‡ì“êøymc¼üÛN[åSZ7zAí´‰Æ”FþG×òFpû¤Æ`ÚàÉ$`ŸÔISbŸ¼1]³QFØ'Å@ižÔŸ¯¤Ä>¹˜à/9ˆç3)aŸœkGä• ¯Î· ôØ| áú|{¾­`>ø1ûä C^Éâ6rHÆ[ Ÿ¾ò uiúê–‚œëR(jëÓ3ÐÐëÓÓmÕÕMu§Ûª;]Q]+›¾Ú¬ºÓ>Õö©®±>Þ?¬)ûä­a x%%öÉeX—_Û‡u«Ï?„}RÖ+üÁa à×¼°>þä&Ø'—aŸtO¢CöÉ›µO_Ý1usöI×®EHšÒ)á¼l\Ñ>7äcK¼G$“5¹+Ç43²Õ`6s…óy R(jÆÕàm¹5øƒ.må†äªƒì“šê‘L2öI :Æ>¹Cu þ˜êü1Õµ?ý˜Õ58 ™Ø'ýºäØ'·nôöÉ-ª#±\+{Tu/ûT÷ÒT÷¢©îåŠê^T«Šºê^n«î uÒZvm6¸¦ºã>՛ꎚêŽWTwܧºãmÕ¯¨î¸g"­I…®¥Þ¹Çì“bÀØ'—J¤¿µ&!²Úÿ㬡J&"ÎÄD±OÎ2RúHÄ>é¡e©p8SöÉ2RúHYFÄ> eÔá¨%„}r£Œ”>R‘²OÂÚu8’‘°O.k¡Ÿò¶úÄèäHÆ(‡câ¦%³|-èµsöÉ tÄ$¤’µùÜ ž8Æ>9wÃû °Oâ ?Ì>¹Ôþç‚ì±O"bHÂ>ÙkGpÈ>På˜}²ÃñW˜}r£¥QúHÅÒ û$´!Ž,°On”‘ÒG*2BöIX»G2öÉ2RúHMFÀ> k×áXFÌ>¹MFF©ÈÙ'=¬\…# ûä,#Yˆ}R‹/œ ¹'È>©M’½öú•'N ²OÎ_q’IàU´ÄÊÿx.´±O^o"ñ»ÓaYÛgnpâ8ñW_­‰_šŒ_WšøÕšøõH¿67qš3…Aøê´F 'u4œh¬Bè#—-zâÙ'±OÓà(V!ì“e¤ô‘²Œˆ}Å**E „}r£Œ”>R–±Oj± †£y†°O. ýGb•Ó¾XåtW¬rjFÏ ²OjcÀ¥1ø7v¥T: ²O¢nPáè+Â>¹QFJÉdäì“hºWá~ý@`ŸÜ(#¥ä22öI4Ý«ðUF‰}r£Œ”>RîkÄ> eÔáHÛ„}r›ŒŒ>R“Q´Çç+p,#fŸœeTC’Óµd…_˜Ÿj%}׎Ù'µ pÀ>éiö…Ó£UÌ>©nîp–Ù€Ø'ÕÌ&üµmòó§"öIõõ@MC˜}ÍÄ„}RÕPgŸ$b!öIUC}Ÿî[ËÚÎ44Œ!€}R;¢Æì“SÙ—Èù$ñJöɧ ^ŒºûärÆ|~× êoÓ±”´€Ø'µ„ Ì>© Ì>©ÑaöI1Ûë ±O*ƒü£å^ $“€}R‡ÿRò û¤o‰UÉ$`ŸÔà-ýJ ™ì“jí—_Z†dŸTÛÞà5øß+ð–¹&LöIþwÍÝE¬|œ}Ò-«a}r.šØþÄ×íêß]&r‰}rÆüi™¢2û$“Q`Ÿœ DöÉ»e”Ù'™Œ"û$—‘³OÎ"ûä%öI&£È>ÉdØ'ݲÏ$°OÞ/£È>ÉdÙ'¹=röÉžÍØ'ï·G‘}’Êø$³O²û M Æö·â¸PjpaÍXïðwŽØ'µ¯û¤Æº}CFÀ>©ÍY€·pi‰È>©Mf®°ONe³£¢ˆ¯Í…¼‘}òñìÿ*ãµ™øEtø#iÿ^›áÅÚ9ûä ¯<€\J Dì“7l¨Ý"PØ'áÁ¥qÆèÖ }r†ƒÛ¥œp‹ì“3¼ÝO“x»Xœ}r‡êî0íkª¦ýˆê:ü!ÕuøCªë6ÿêîq×TFÜ#ªëð‡T×á¨n¦têJƒŠ%²O:,£À>¹Èì“N]ÁÐÚEöI‡+QØ'º¢•ˆì“ŽueŸ\j—Ù'º°bµKì“\Á”}RmûêÅåi•Ì>)(X`ŸtW]ª]bŸtlVÅÓâLé®Ò«•48šI%ç-‘Ø' h%["±O:6“J~ßnÉ•…þm8âÊ>‰ï˜`öIa2¢ì“¨€°O.>­ßäì“ÍW ì“k2eŸt0ްO. xÆ>ÙÄØ'å[8”}Rº‰BØ'É1ˆcpì¶)û$ª°Or3öÉîn8û¤ `Ê>Ùkçì“TÁû$˜Mû¤rÍ ²ObÛÄì“B5eŸ$÷oû¤¢yÈ>‰ 0û¤ yÊ> ”)û$×É5ÄØ'{íœ}R°MÊ>é:š±O²ÁÏÙ'm2öIÙ6û$T eŸ®RöI<Þ1û¤âv!û$¸ˆÌØ'Y ËÙ'A4ÆØ'¹êû¤ë>…±O.f“*)1äúøL°Eø1t®(ùò£À>)¤‡Š•”nO•MË›F.Ò²:ÁW¥ûÒÁû<¦À?öÉù„œ L*CÖ«w8ëÞðò¬:Çj¦n3ÓG±DöIÁsQöÉ–n,°O ã’²O¶¿+°O2ÏÅÙ'9cŸœáp1ÄØ'AncŸ”Ò‚úI@b¸ªƒ[ÝÛ8·ˆwoYq‰széø\&ìvöIÖ½œ}²mD ì“´{öɲ ì“‚Û¥ì“]xÎ>)v/fŸ„ª£ì“½ã˜hýI —;çxêVú}±†Âñ"x¹¶Ewž½‹ N­Ã83Ox|¼Çàû$Â>Ù:N`ŸdsgŸls†À>)l~PöÉÕ $öI²ù!±O¯ÀØ'•P²Oj^¡×ÎÂ!ïä@\‰U~ßër‹µˆ,ä¦Ñ?“‹2¯àZv5€s#p™c"û$ó œ}Òõ4ZÆ>Éœ>gŸlµ ì“<\eì“`ÈØ'¹W`ì“è¾=aŸìwÛ+,³µ,„3Å›×ûÝ'Cá‚W01H^¡¨>DçsFJA6ˆæ18"e¦ì“®»cÆ>É#IÆ> QÆ>ɼgŸlp}’{Æ>Ùàû¤ìû¤æzíÜ: ¢P\¬Å3׬£úD —æŒ,Ï.ÇàÜwŒÊ:£,b=ƒ£9ƒ²O‚Õ-cŸ¬ƒ²O¶a-°Oò9ƒ±O."û$³Ž%ì“ Kû¤lˆ}RµŽV;·×¼v“ QÞðcð.l¿¹Å~¯û Î`ñÚh6Ø'i÷ ì“m¡ °O²îåì“m6Ø'Y÷röIÐ*Æ>)w/bŸÔº·×.tï:§6rÇi‡„^ hΙ¦ó 8û¤o¹îœ}r*C$“Œ}2ô1Æ>é[þJ…—’=I2>]%_õKÉ^É‚lðwpû—_JöJf£m|TóŸMó=óƒ±Oz”‰Ù'ýMâb쓬K(|úŠõÚ%.÷Ú%.÷Ú%\ïŸÊÿ蟄nÀˆ ‰Œ}’ŒEI€}Ò÷äÆ>é—ˆï—q-JšMå¼)韤äJÄ> 4ÏØ'wß2¬þp–HÀ>‰Ò– ûä\»ïì“Zí¶ñ1§ÒàÄwöIàmû¤¢¹™Œ}Rs*­lúê§²œ¥QøcN¥Ás*®;•Êÿ蟄´cÌ>‰à„}Ò?‰¹³5ñfíÓWš UþGÉûäZ ±Or#Ø ã¯»düTdDì“MF}’Ï~dü¼CÆFî8 `7Ø'ñ=qL)7„}’P¸@2 Ø'‰ðˆÀQ³ObCÅì“¢ð˜ûBSp+{ûÖ„ÿ¾Gø)röd8úvî°O"/HØ'}[ÙHw^^IÌ>97±þ RVDÛAíŒ}Ò·üO/çVzÔvx7§±>²¶#öI:D çm‡ì“êøymc¼üÛŽZ5Ëßæ‰^;m¢-ËŸø}ËÁ °Oj ¦ .LöImð74e!öÉÓ5e„}R ”æIý‰ðJJì“‹ þ’ƒx>“öɹvD^ zñê|Û@Í·®Ï·çÛ æƒ³OÞPð™µýÙ³Ú§¯ˆ©øÃ-78×#¤PÔÖ§g ¡Ö§§Ûª«;7šêN·Uwº¢ºV6}µYu§}ª;íS]c}¼XSöÉ[ÃðJJì“˰.¿¶ëV;žû¤:¬WøƒÃÀ¯)xa}üÉM°O".Â>éŸD †ì“7kŸ¾ºcêæì“¾]‹Š°õůqM§ôôN``ܱÄkpD2Y7Z7LÇœS0›¹€Âù¼)5ãjðǶÜüA—¶rCrÕAöIMu ŽH&§+ÓƒOa-ª› (ü1Õ5øcªkðÇT×þôcV×à€dR`Ÿ\T'²OnÝè%ì“[TGb¹Vö¨ê^ö©î¥©îESÝËÕ½¨V(uÕ½ÜVÝꤵìÚlpMuÇ}ª;6Õ5Õ¯¨î¸OuÇÛª;^QÝqÏDZ“ }K/¼sŽÙ'Å(€±O.•HkMBdµþÇYC•LDœ‡ ‰cŸœe¤ô‘ˆ}2@ËRáp§ì“e¤ô‘²Œˆ}ʨÃQKûäF)}¤"#dŸ„µëp$#aŸ\ÖB?åmõ‰ÑÉ“TwÏà˜¸i‰œÖ‚^;gŸœ@GL‚A*Y›Ï Já‰cì“s7|±¯û$ÞðÃì“Kí.Èû$"†$쓽v‡ì“UŽÙ';…Ù'7Z¥T, ²OBÒáÈÒûäF)}¤"#dŸ„µëp$#aŸÜ(#¥Ôdì“°vŽeÄì“Ûddô‘ŠŒ}2ÀÊU8’‘°OÎ2Ò‘…Ø'µø¢ÁÙ{‚ì“Ú$Ùk¯_â” ûäü'™^EÛI¬ü7àBÛûäõ&¿;…‰Á”=~õÕšø¥Éøu¥‰_­‰_4ñë‘&º5¹²Ã…&ö¯Nk´pRGÉÆ*„>rÙr 'N}û4 ŽbÂ>¹QFJ)ˈØ'Q¬¢ÂQ´@Ø'7ÊHé#eû¤«`8šgûä²Ð$V9í‹UNwÅ*§fôÌ  û¤6f\3€ÿqcgQúH¥³ û$ê޾"ì“e¤ô‘LFÎ>‰¦{ÖöÉ2RúH.#cŸDÓ½ _e”Ø'7ÊHé#å¾Fì“PFŽ´MØ'·ÉÈè#5E{|¾Ç2böÉYF5$9] IVøõù©VÙ'qí˜}RÛì“f/Q8=ZÅì“ê6ì g™ ˆ}’íŒ3á¯m“Ÿ?µÈ±Oª¯jÂì“h&&쓪†:û$ ±Oªêì“°í.ÙÄÚÎ4dB»X1±OjGÔ˜}r*ûY"Ÿ$^IÂ>Ùá4aÃKQ×aŸ\ΘÏïšAým:–’û¤–°Ù'µ¡Ù'µ#:Ì>)f{=!öIe´ÜKd°Oêð_J$bŸÔà-±J ™ì“¼¥_ $“€}R­ýòKËЂì“jÛü¯ÿ{Þ2×’IÀ>©Àÿ®¹»ˆ•³Oúe5,°OÎEÛŸøº]ý»ËD.±OΘ?-STfŸd2 ì“sÈ>y·Œ2û$“QdŸä2röɹ@dŸÜ £Ä>ÉdÙ'™Œû¤_ö™öÉûeÙ'™Œ"û$·GÎ>Ù3¢ûäýö(²ORŸdöIvŸ¡ ÔØþ|Û*ª— ýz¬Ãß8bŸÔ¾ì“ëö û¤6gÞÂ¥%¹2X !È>©Mf^ÆuQ„õqXï¹vøÄì¨(âßks!«ÄÚ1EÌ>ùxöa‡_•ñÚL|‡":ü‘4‹¯ÍðbíöjÿŸn•P‚K‰ˆ}ò† µ[ ûä"<¸4ÎxýºA"°OÎpp»”ó.p‘}r†·ûi`‹³OîPݦ}MuÀ´Q]‡?¤ºHuÝæRÝ#îšêÀˆ{Duþê:üÕÍô‘^]iP±DöIeØ'—êôgúH¯®`hí"û¤Ç•08ÓGzuD+Ù'=ëÊ>9°9c¦ôêŠÕ.±OrSöIµí«—l¤U2û¤ `äôgúHÕõ Ú%öIÿ$d¿?QöIu^­¤ÁÑ´H*9ol‰Ä>éY@+ÙØ‰}Ò³yœTòûvK®,ôÿkÃoäPöI|dzO “eŸD„}rñiýÎ gŸl¾R`Ÿ\C à)û¤‡ét„}rqÈ`À3öÉ&–À>)ß¡ì“ÒMÂ>IŽAƒc·MÙ'Qí„}’+˜±OvwÃÙ'SöÉ^;gŸ¤ Ø'ÁlÂØ'•kN}Û&fŸ’¨)û$¹‹Ø'ÍCöI\€Ù'ÍSöIeËØ'¹æû$ô‚”}’kž±O"á û¤'°OJÙ‹„}4‘±Or 1öÉ^;gŸl“²OúŽfì“lðsöI`›Œ}R¶MÄ> •BÙ'…뇔}wÌ>©¸]È>é»Ûcì“,åì“ cì“\uŒ}ÒwŸÂØ'³I•”r}|FbŸ4/°O é¡b% û$‰Õ%öIöw‰á|BN&•¡+R8ë^㌕gÕ!ØÄà|ê6l\Šì“‚ç¢ì“-ÝX`ŸÆ%eŸlW`Ÿdž‹³OrÆ>9Ãábˆ±O‚ÜÆ>©9¾!g@b¸ªƒ[Ýë"… Ý›ý(vo_G¸Ð½>2·+°O²îåì“k÷Jì“´{öɲ ì“‚Û¥ì“]xÎ>)v/fŸD‡„}²w3¥ß$1\îœã©[é÷eÄ: Ç‹àåÚ¶ÃOô“628µcG#ÏCDô‘ËÞ òI„}²uœÀ>Éæ Î>Ùæ }RØü ì“«AHì“dóCbŸ^±O*¡:dŸÔ¼B¯Y‡w8®Ä*wYÇKR8ŸÓËJ<ˆ^Á qdpn.Òï"û$ó œ}Ò÷4ZÆ>Éœ>gŸlµ ì“<\eì“`ÈØ'¹W`ì“P)”}²wÜ^¡ÏÖ­aˆ«ðÆlЮ³v¸àf"%feá<ƒó9c—Ì ò028"e¦ì“¾»cÆ>É#IÆ> QÆ>ɼgŸlp}’{Æ>Ùàû¤ìû¤æzíÜ: â\¬Å3W­c\/Yu¸4gdyZb1V»à;²W¶w"¢Pæ Ê> V·Œ}R°Ê>Ù†µÀ>Éç Æ>¹î9Kì“Ì:–X°O‚.a쓲u öIÕ:ZíÜ:z%M2DuxË:œ§paûÍÍ‹XÖï¶GúÎÀÎ+p4ì“´{öɶPØ'Y÷röÉ6쓬{9û$hcŸ”»±OjÝÛkºQ(†¶CB/P´û4ml¤p˜ÅÙ'CËuçì“S"™d쓱ïŒ1öÉÐòçPÒ(¼”H’A ðéz(ùª_JôpÂßÁí_~)9(9˜¶ñQÍ6Í÷ÌÆ>Pv$fŸ O4‰‹±O².¡ðé+Ö?j—P¸Ü?j—P¸Ü?j—p½*ÿcxºs ‚&2öI62%öÉГWûdX"¾?\Ƶ *i6•ÿñ¦ð H`Ÿ…Çì“P,Ê>¹Kx·Eóûdx’’+û$ÐÉ`ƒŒ¿î’ñS‘±O6öI>ûmñó¹ãt‚‚Ý`ŸÄ÷Ä1}¤ÜöIV@áÉ$`Ÿ$Â#GQxÌ>‰ ³OŠÂcî MÁ­ìí[þûá§È9mLHàÚ¹76À>‰¼ aŸ me#Ýyx%1ûäÜÄú+JY5nµ3öÉÐò?¡·rÑÅ–ø”»9õ‘µ±OÒ $R8o;dŸTÇÏkãå—ØvÒª¡,Ç£gµÓ&ú”ÖíàÏÆ ù“¶±Oj ¦ .LöImð74e!öÉÓ5e„}R ”æIý‰ðJJì“‹ þ’ƒx>“öɹöã/y\oè±ùÂõùö|[Á|ðcöÉ †¼’%õ¿DáÓWMÁëW·Üà\BQ[Ÿž†XŸžn«®îÜhª;ÝVÝéŠêZÙôÕfÕö©î´OuõñþaMÙ'o kÀ+)±O.úüÚ>¬[íxþ!ì“ê°^ák¿¦à…õñ'7AÀ>‰¸ûdx-²OÞ¬}úꎩ›³O†v-B2®)R³ÍÆ ùدÁÉ$cŸfÃØ'•y R(jÆÕàm¹5øƒ.må†äªƒì“šê“Lֽ𧣊© žZ@á©®ÁS]ƒ?¦ºö§³º$“ûä¢:‘}rëF/aŸÜ¢:˵²GU÷²Ou/Mu/šê^®¨îEµ:@¡¨«îå¶ê®P'­e×fƒkª;îSݱ©î¨©îxEuÇ}ª;ÞVÝñŠêŽ{&ÒšTZzá+pÌ>)FŒ}r©Dú[k"«ð?Ϊd"âR‘²OFX¹ G2öÉYF:²û¤_48rO}R›${íõ«HœdŸœ¿â$“À«h;‰•ÿñ\h;bŸ¼ÞDâwk„1¶¥rƒlj¿újMüÒdüºÒįÖįGšøµ¹‰5Xj´k_ZÑW§5Z8©£áDcB¹l9Ð'È>‰}šG± aŸÜ(#¥”eDì“(VQá(Z ì“e¤ô‘²Œˆ}R‹U0Í3„}rYè?«œöÅ*§»b•S3zfP}R3.Àÿ¸±³(}¤ÒY}uƒ G_öÉ2RúH&#gŸDÓ½ ëûäF)}$—‘±O¢é^…¯2Jì“e¤ô‘r_#öI(£GÚ&ì“Ûddô‘šŒ¢=>_c1ûä,£’œ®…$+üúÀüT+쓸vÌ>©m€öÉH³—(œ­böIuv…³ÌÄ>©íltá¯m“Ÿ?µÈ±Oª¯jÂì“h&&쓪†:û$ ±Oªêì“ðè;àÜQÓÐ`»æOì“Ú5fŸœÊ¾D–È'‰W’°Ov8MØðRÔõDØ'—3æó»fP›Ž¥¤Ä>©%l`öImh`öI툳OŠÙ^Oˆ}Rä-÷R ™ì“:ü—’‰Ø'5xK¬H&û¤oéWÉ$`ŸTk¿üÒ2´ û¤Úöÿ«Áÿ^·Ì5d°O*ð¿kî.båãì“aY ì“sÑÄö'¾nWÿî2‘Kì“3æOË•Ù'™Œûä\ ²OÞ-£Ì>ÉdÙ'¹Œœ}r.Ù'7È(±O2EöI&£À>–}&}ò~EöI&£È>É푳OöŒhÆ>y¿=Šì“TÆ'™}’Ýgh5¶¿õ'†CtÞ¬Ùxþ.Àû¤ö`ŸÔX·oÈØ'µ9 ð.-É1â8ô–\›Ì(¼¬¿S¬tŠÎ3øÄì¨(âßks!¯$Ù‰AÁ®ÛÀþHöa‡_•ñÚL|‡":ü‘4‹¯Íðbí¶Þ;!ã ¯<€\J Dì“7l¨Ý"PØ'áÁ¥qÆÖ }r†ƒÛ¥œp‹ì“3¼ÝO“x»Xœ}r‡êî0íkª¦ýˆê:ü!ÕuøCªë6ÿêîq×TFÜ#ªëð‡T×á¨n¦ êJƒŠ%²O,£À>¹P§?ÓGuCkÙ'®„yÄ™>2¨ Z‰È>X7PöÉ¥v:gÌô‘A]X±Ú%öI®`Ê>©¶}õâò‚´JfŸŒœþL®ºT»Ä>Ø¬Š§Å™>2\¤W+ip4-’JÎ["±OÐJ6¶DbŸ l'•ü¾Ý’+ ýÿÚpÄ9”}ß1Áì“ÂdDÙ'QaŸ\|Z¿3ÈÙ'›¯Ø'×8dÊ>`:aŸ\2ðŒ}²‰%°OÊ·p(û¤t…°O’cÇàØmSöIT;aŸä fì“ÝÝpöIAÁ”}²×ÎÙ'©‚öI0›0öIåšdŸÄ¶‰Ù'…$jÊ>Iîß"öIEó}`öIAó”}$(3öI®yÆ> ½ eŸäšgì“HxÂ>)dÇ ì“Rö"aŸMdì“\CŒ}²×ÎÙ'ۤ쓡£û$üœ}Ø&cŸ”m±OB¥PöIáú!eŸÄã³O*n²O†îöû$ d9û$ˆÆû$WcŸ ݧ0öÉÅl`R%%†\Ÿ‘Ø'Í ì“Bz¨X‰Â>Ibu‰}’ý]@b8Ÿ“€IeˆÓ·‘ÂY÷›§[Ô|V-‘ÃùÔm&®58.EöIÁsQöÉ–n,°O ã’²O¶¿+°O2ÏÅÙ'Á½*Æ>9Ãábˆ±O‚ÜÆ>©9¾!CÄ…ÄPèÝ»°O çÝëBçôRb3ƒ Ýë¹ÛØ'Y÷röɵ{%öIÚ½ûd ÙöIÁíRöÉ.‰°O¶ŽØ'ÙœÁÙ'Ûœ!°O ›”}r5‰}’l~Hì“À+0öI%T‡ì“šWèµ3ëð6AÕXå÷½^!eGád!7ÓOÊK)7 žÁ¹¸9ô»È>ɼgŸ =–±O2§ÏÙ'[íû$Wû$X 2öIîû$ºIOØ'{ÇÝö d¶n C\…7úÝ·X»¯`f êlކÃùœ‘#DÛvpDÊLÙ'CwÇŒ}’G’Œ}¢Œ}’yÎ>Ùàû$÷ Œ}²ÁöIÙ+ öIÍ+ôÚë0>r±Ï\µŽ1z —æŒyÓ˜Íõ•Á¹ïH1(sFbÂã9ƒ²O‚Õ-cŸ¬ƒ²O¶a-°Oò9ƒ±O®{Îû$³Ž%ì“ Kû¤lˆ}RµŽV;(œ… ŒK@£žÖÑŒ«„í·…‚‡õ»u½Á¹XÖ½"û$í^}²-öIÖ½œ}²Íû$ë^Î> ZÅØ'åîEì“Z÷öÚ…î]'åÏFî8íÐ møÑ´±‘ÂagŸŒ-׳ONeˆd’±O¦¾3ÆØ'cËŸCI£ðRr$I§ë¡ä«~)9*ù þnÿòKÉQÉÁl´jþ³i¾g~0öɈ²#1ûd|¢I\Œ}’u …O_±þQ»„ÂåþQ»„ÂåþQ»D€ëýSùã“Ð ˜4‘±O²‘±( °OÆž¼ÂØ'ãñýá2®II³©ü7…©@û¤(æTœøÂ> ¼ cŸŒO47“±OjN¥•M_ÝáT–³4 Ì©4øcNÂu§Rùã“vŒÙ'œ°OÆ'1w²&Þ¬}úJ³¡Êÿ(aŸ\ $öIndüu—ŒŸŠŒˆ}²É(°OòÙoƒŒŸwÈØÈ§ìÆû$¾'Žé#¥à†°O² H&û$8ŠÂcöIl¨˜}Rs_h neoßšðß÷?EΑlcBÇØÎ½±öIä ûdl+éΫÀ+‰Ù'ç&Ö_IÊŠ¨q;¨±OÆ–ÿ ½Uå;j¯k±kc}dmGì“t‰ÎÛÙ'ÕñóÚÆxù%¶´jc^OÝAí¨‰Ë-øcËÁ_öIÁ´Á’IÀ>© þ’¦,Ä>ycºf£Œ°OŠÒ<©?^I‰}r1Á_rÏgRÂ>9׎È+A/^oè±ùÂõùö|[Á|ðcöÉ >³¶?gVûô1•|¸¥àçz„ŠÚ? =°>=ÝV]ݹÑTwº­ºÓÕµ²é«Íª;íSÝiŸêëãýÚ²OÞÖ€WRbŸ\†uùµ}X·ÚñüCØ'Õa½ÂÖ~MÁ ëãOn‚€}q9öÉø$Z0dŸ¼YûôÕS7gŸŒíZDÄóû:u>§ÆK¼G$“•}2i:§œ €ÙÌÎç5H¡¨Wƒ?¶åÖິ•’«²OjªkpL2IÙ'Üé!ì“;T×à©®ÁS]ûÓY]ƒC’ÉébBýϬ©g÷ξa£—°OnQ‰åZÙ£ª{Ù§º—¦ºy¼h{ä $X PÔU÷r[uW¨“Ö²k³Á5Õ÷©îØTwÔTw¼¢ºã>Õo«îxEuÇ=iM*Œ-½ðÎ8fŸ£Æ>¹T"ý­5 ‘Õøg U2q&$jŒ}r–‘ÒG"öÉ-K…Ãiœ²On”‘ÒGÊ2"öI(£G-!ì“e¤ô‘ŠŒ}֮ÑŒ„}rY ý”·Õ'F§HRÝ3ƒcâ¦%³|-èµsöÉ tÄ$œ}R1(…'ޱOÎÝðžì“xóO.µÿ¹ {D쓈’°OöÚ²OfT9fŸìpüfŸÜhi”>R±4È> mH‡#K#ì“e¤ô‘ŠŒ}֮ÑŒ„}r£Œ”>R“°OÂÚu8–³On“‘ÑG*2BöÉ+WáHFÂ>9ËHGbŸÔâ‹gCî ²Oj“d¯½~•ˆS‚ì“óWœdxm'±ò?Þ€ mGì“×›HüîäO¥ð#e‚_}µ&~i2~]iâWkâ×#Müz¤‰í>f‡ Mì_Öhᤎ†U}ä²å@Oœ û$öiÅ*„}r£Œ”>R–±O¢XE…£h°On”‘ÒGÊ2"öI-VÁp4ÏöÉe¡ÿH¬rÚ«œîŠUNÍè™AAöIm̸4fÿãÆÎ¢ô‘JgAöIÔ *}EØ'7ÊHé#™Œœ}M÷*<­ì“e¤ô‘\FÆ>‰¦{¾Ê(±On”‘ÒGÊ}Ø'¡Œ:i›°On“‘ÑGj2Šöø|ŽeÄ쓳ŒjHrº’¬ðëóS­²OâÚ1û¤¶Ø'Í^¢pz´ŠÙ'ÕmØÎ2û$ÛgÂ_Û&?j‘!bŸT_Ô4„Ù'ÑLLØ'U uöI"bŸT5ÔÙ'ɾJÊLx¢¡š×m2`ŸÔލ1ûäTö%²D>I¼’„}²Ãi†—¢®'Â>¹œ1Ÿß5ƒúÛt,%- öI-a³OjC³OjGt˜}RÌözBì“Ê ÿh¹—É$`ŸÔá¿”©Á[b•@2 Ø'5xK¿H&û¤Zûå—–¡Ù'Õ¶7ø_ þ÷ ¼e® $“€}Rÿ]sw+gŸŒËjX`Ÿœ‹&¶?ñu»úw—‰\bŸœ1Z¦¨Ì>ÉdØ'ç‘}òneöI&£È>Éeäì“sÈ>¹AF‰}’É(²O2öɸì3 ì“÷Ë(²O2EöInœ}²gD3öÉûíQdŸ¤2>Éì“ì>C¨±ýÅußFc†õž^‡¿ pÄ>©}Ø'5Öí2öImμ…KKò¦ËfkÅ¿×&3 ¶±„ñÖvÍjìð‰ÙQQÄ¿×æBV‰sÆ—þóŸø#Ù‡~UÆk3ñŠèðGÒ,þ½6˵ÛC©Ý@þÇ^y%¸”ˆØ'oØP»E °O.ƒKãŒ0®$ûä ·K9àÙ'gx»Ÿ&ñv±8ûäÕÝaÚ×TLûÕuøCªëð‡T×mþ!ÕÝ1⮩Œ¸GT×á©®ÃQÝLÕ•KdŸŒXF}r) N¦Œê †Ö.²OF\ óˆ3}dT@´‘}2²n ì“KD猙>2ª +V»Ä>ÉLÙ'Õ¶¯^\^°‘VÉì“B%ÈéÏô‘ñªëAµK쓑ͪxZœé#ãÕAzµ’§;O”}rCK$öÉø$dè?QöÉ -‘Ø'#›ÇI%¿o·äÊBÿ¿6ñFeŸÄwL0û¤0QöIT@Ø'ŸÖï röÉæ+öÉ5™²OF˜NGØ'‡ )ÝD!ì“äÄ18vÛ”}ÕNØ'¹‚ûdw7œ}RP0eŸìµsöIª`}Ì&Œ}R¹æÙ'±mböI!‰š²O’û·ˆ}RÑÉ?gŸ¶ÉØ'eÛDì“P)”}R¸~HÙ'ñxÇ쓊ۅ쓱»=Æ>ÉYÎ> ¢1Æ>ÉUÇØ'c÷)Œ}r1˜TI‰!×Çg$öIAóû¤*V¢°O’X]bŸdÎ'äd`R2°šm6ëÞbQtúh{‡ó©ÛÌ”C@,‘}Rð\”}ríw‰}R—”}²ý]}’y.Î> Èûä ‡‹!Æ> rû¤æø† @up«{m¤p²Mô“V gþI‡9$@V'°O²îåì“k÷Jì“´{öɲ ì“‚Û¥ì“]xÎ>)v/fŸDG‚„}²w3¥ß$p\îœã©[ïwcÛÁn‡ãEðrmÛŠîÙ:N`ŸdsgŸls†À>)l~PöÉÕ $öI²ù!±O¯ÀØ'•P²Oj^¡×άÛ4ÕXå÷½^!ÅHáÜLȲӷ£cµ FàÂHú]dŸd^³OÆžFËØ'™Óçì“­v}’‡«Œ},û$÷ Œ}*…²OöŽ»Ó+ضÆj C\…7úÝ{Ká‚W0A¼Â=P28³£— "%&<ò Œ}2vwÌØ'y$ÉØ'A ÊØ'™Wàì“ .°Or¯ÀØ'\`Ÿ”½bŸÔ¼B¯[‡ñBq±Ï\µŽqݘëp²qºD$¢»p€›´Á™u¸˜µÝ‡æ“:Í”}¬nû¤`”}² k}’ÏŒ}rÝs–Ø'™u,±(`Ÿ]ÂØ'eë@쓪u´Ú¹u¸¶Œl’!ªÃÖ‘Ç@áÂö›Fyΰ928w6Žl6Ø'i÷ ì“m¡ °O²îåì“m6Ø'Y÷röIÐ*Æ>)w/bŸÔº·×.L +ª‘;N;$ôE»ßIÓÆF ‡yPœ}2µ\wÎ>9•!’IÆ>™ûÎcŸL-%ÂKɉ$ Ÿ®‡’¯ú¥ä$Ÿ¡wø;ºýK/%'%³Ñ6>ªùϦùžùÁØ'ÊŽÄì“é‰&q1öIÖ%>}ÅúGí —ûGí —ûGí®÷OåLOB7`DÐDÆ>ÉFÆ¢$À>™zò cŸLKÄ÷‡Ë¸d%ͦò?Þ¤ ì“¢ð˜}ŠEÙ'w ï¶h^bŸLORr%bŸšgì“;„oV8K$`ŸDiË„}r®]€wöI­öFÛø˜Sipâ;û$ð6Œ}2=ÑÜLÆ>©9•V6}u‡SYÎÒ(ü1§Òà9×JåLOBÚ1fŸDpÂ>™žÄÜYÈšx³öé+͆*ÿ£d„}r-Ø'¹lñ×]2~*2"öÉ&£À>Ég¿ 2~Þ!c#wœNP°ì“øž8¦”‚Â>É (\ ™ì“DxDà( Ù'±¡böIQxÌ}¡)¸•½}kÂß#ü9'² S;÷ÆFØ'‘$ì“©­l¤;¯¯$fŸœ›Xe)+¢Æí vÆ>™Zþ'ñi¶=;š”»9õ‘µ±OÒ $R8o;dŸTÇÏkãå—Øvܪú¨zj½vÒDÄQÙ¸!Ò– öIÁ´Á’IÀ>© þ’¦,Ä>ycºf£Œ°OŠÒ<©?^I‰}r1Á_rÏgRÂ>9×~ü%€«óm=6ßB¸>ßžo+˜~Ì>yCÁœW³O.6¼ìn)¸Á¹!…¢¶>= =°>=ÝV]ݹÑTwº­ºÓÕµ²é«Íª;íSÝiŸêëãýÚ²OÞÖ€WRbŸ\†uùµ}X·ÚñüCØ'Õa½ÂÖ~MÁ ëãOn‚€}q9öÉô$Z0dŸ¼YûôÕS7gŸLíZPDëŸ)’Íé€qǯÁÉ$cŸfÃØ'•y R(jÆÕàm¹5øƒ.må†äªƒì“šê“LRöÉ wzûäÕ5øcªkðÇT×þôcV×àˆd’±OæžÝËØ'·nôöÉ-ª#±\+{Tu/ûT÷ÒT÷"ï‘×m¼«Šºê^n«î uÒZvm6¸¦ºã>՛ꎚêŽWTwܧºãmÕ¯¨î¸g"­I…©¥Þ¹Çì“bÀØ'—J¤¿µ&!²Úÿ㬡J&"ÎÄD±OÎ2RúHÄ>™¡e©p8SöÉ2RúHYFÄ> eÔá¨%„}r£Œ”>R‘²OÂÚu8’‘°O.k¡Ÿò¶úÄèDvû‡Èà˜¸i ŽÖ‚^;gŸœ@GB‚+Y›Ï Já‰cì“s7|±¯û$ÞðÃì“Kí.Èû$"†$쓽v¯ì“€Àq£©PþGÅT }$4ŽL…ÐGn”‘ò?*2BúHX»G2úÈ2RþGMF@ k×áXFL¹MFÆÿ¨Èé#3¬\…# }ä,#ˆ>R œ™'H©Ír½öúU&^ÒGÎ_q–Hà´­ÀJàx.´ÑG^o"uœÕ!®IBN=úê«5ñK“ñëJ¿Z¿iâ×#Mlù‰.4±uZ§û“:N4Ø üËž=2‚ô‘اiplúÈ2RþGYFD‰‚ ަ{B¹QFÊÿ(ˈè#µ`ÃÑR}þOÓ¦D31¡T5Ôé#‰Xˆ>RÕP§$#cf Õ{!!úHíŒÓGNe_"Íã“D Iè#åàꉰD.gÁçwÍnþ6UJɈ%RK¬À,‘ÚÀ,‘ÚQf‰³²žK¤2–?Zޤ@ X"uø/%_±Djð–%A–H ÞÒ¤2HÀ©Ö~ù¥eRA–Hµí þWƒÿ½of$`‰Tà×[ÄžÇY"Ó²èX"碉•O|…®þÝe¾–X"gÌŸ–Ñ)³D2–ȹ@d‰¼[F™%’É(²Dr9Kä\ ²DnQb‰d2Š,‘LF%2-ÛIKäý2Š,‘LF‘%’Û#g‰ì™ËŒ%ò~{Y"©ŒO2K$»wÐj¬|i]^šŽŒy½ÉØáï±Dj_–Hû†Œ€%R›³¿àšì–Ù›Â'FEÿ^› Y%Î…20ÇÝ$$K°Ã¯Êxm&¾CþH:Ä¿×fx±v_9’VŽ–ÿéFPùú$¸”À‡X"oØPËöWX"áÁånÆ×—Ö}%r†ƒ[ œ¯o‹Kä o÷È$¾¾.g‰Ü¡º;Lûšê€i?¢ºHuþêºÍ?¤º;FÜ5Õ÷ˆê:ü!Õuø#ª›i“ºÒ b‰,‘ Ë(°D®ÄéÏ4I]ÁÐÚE–È„+aq¦yLêˆV"²D&Ö ”%r èœ1Ó<&uaÅj—X"¹‚)K¤ÚöÕ‹Ë 6Ò*™%RP0rú3ÍcºêzPíKdgUÊ™®Ò«•48Ý(x¢,‘Z"±D&ÐJ6¶Db‰Lâ̹ J‚[Ý‹X"¥Ùàúd2B^0R00ø;º¡Lïa‚B6Øá4… “AîRðgSpOð`då:b2ÈüDsµ$Ó<…ËÝ jžÂånP5Oár7ÜÒ|%ZÌO‚‚1Ù h£yd¦½ìÏšÇܳOÍc^B¶?Wd´·e);›£(#fs„µS6Ç{dt[ô(‘6æ')ב6=2ÒÆÛ2¶¼¦?œCp3¢œ`ÂÍ8W"À㎡ÜàdÄ F0Æc~¢‰Œ‚QÊ­Œ åå<êÖPnðdžrƒ?6”+½a~²u1¹"‚rÅü$¦œBR@½ö_bÇÚĵ@¢Mä·¡öO¥vDˆØjù pwíIp:ÀƒPâKɘ«P´:LuÈ (\`4Äœ‚¢Œ˜Ñ[f4”GâS¸Yû›øÕ¿e²™éþr;}Åý¸ ‘» \…¹Å×ÒK…sæ$‚JfJÂ5B :¼fdå¾G£dMD”„Ô¡F çM„”„êøipÔ’õZS6*ÀŸTFD6¨V6¸À)øÜóÁ´¶7ú>}Êa¦MhÅ©{ž˜žA D#¨Ä×ë]¤ã¯Oõ&T+{lÎhðÇæŒómÕñ‡ o¨ŽSÿa‚ÀëªãJ©üuþØÒÂu nk¨®Í5 nkètEC§}:íÓÐé. 5š½û‡¥û»5ü‘ŸD÷wcøa¯½ùQøƒÃo…?6üÞOnC€Èݪ'D~ùI4AHäw³v¦¡‰¯oM¾­Šõ¿Äà5±M›×›ÞcëG´|¯O uáMáÆØühðÇÆ„_ñ0+iפåÓ4Ôà˜}Ðò]ÕP=¦¡Ðø®¡ö§³¡G${}ïêZ=¦¡Çƒôª† üš†^öiè¥ièåž-Æy’‹þ¨†^$'Š5¤û`¿¦¡ã> ›†Žhè¸OCGµ‰wièxm–œw¹åZݹÄÔyâlÂ(ó–J¤¿µfd±ÚiÝ<]WqÆ#ÄQŒ2o–‘rÞ=λ•PÒ:¹JZ·±Ê:§TBXç–…ÕÏ?âÂj"‚ÉäÜÃ1ßË2Å?-·âUø*×¶BÅøäf }±¯ŸÞU|r¿üVS®6EÁ„«mc%”lM©„­m¬„²¥i•`¶´m•0º3¥Bw6WB{Ñi>¼Ã9_$[6úZ²gDKvå+EFDK6•‘4§pG>4–@8&Ú6’ñ«ÉøõˆŒ_Wdœ³­[^ÅÄÙ5•T‹8Q_K(¿–Å ÝS%”_+¡œ]r%”³kc%”tK®„’n-qø#¾ö´Ïמ־æÚ†tZš©œVow¿†(Ó•¢!Âtµ±JUÅ*©ª6VB¹¦x%×ÔÆJ(Y”¬.Jµ­Æö¤U‚ÙžæJT|ºâ‘OŸ*ò8á¿‹yœ´ Œ9,¦Ê3Å…óíeßX†ËÛ·v6ΟÚd†šÔ'r´¶7†&©íˆbInûºc/µÃiÛ5óÆm;ã^ÒJ1÷ÒTö%’'IÐaUšedÛ÷„U)?)ç#ˆUI;¬Jš=bV%mdz*‰Ç±ä«W%õKI€_µ£Oñè1Í_qb£gDl¤œˆB¹ÚW¯|ÕNt6¢gÈF4A–ÎF”— R`#š‹&ö•òÈòJ:¡¹@¤º§'TÂù€æ‘èžJ<¯D ôÉËšC ô¹§’ ô gäéi)Œ‘çv%ÿ¶?M2–D—5pᑲÖFÝzÐáïQêh_J1ð†Œ€RGsX€ŒeM^ë}ß‚°¯y2 ¶ãë•«q½Ôá]¦íkŽUâ’KÅ JÀ\<ò¾qÊÝáWe¼æ†ïPD‡?2¯ÿ{ͽ‹µ×›yM8þŸn•ÜD‚K‡ÙˆRç† µ$-…R'·d^¸×ÈM–Á$Rêä–ÌÛRU)¹É:%JÜ’yWV5FnÒÅâ”:;Tw‡i_S0íGT×á©®ÃR]·ù‡TwLj»¦:0âQ]‡?¤ºDu3'NVÃL*–H©“±Œ¥ÎZ@œþ̉“Õð•Ö.Rêd\ óˆ3'NV£_Z‰H©“Y7PJ%¡sÆÌ‰“Õ¨šÕ.QêpSJµí«—£uÒ*™RGP0rú3'N¾êzPí¥N–Ò¯ž(¥N¾:H¯VÒàhZ$•œ7¶D¢ÔÉb@)u6´D¢ÔÉâ­ðÞDç‹O*Q’O¤UUu)”©Ð18jbÝyÉ!Òªérs]¹sxoâÓsYÙÑç¾Û¸ü]_" ^˜pÜÄò'iÚq›2[’öñúc.ûj¿ÈÌT`ÉÍOáGo•ü×$£2öÍþšCm”Íþz‡z\ÆoÛr®'@K7ü÷)¶D¨¤§54³'Êk¯Éx®Ëzq~81Ùää¶·&þÛ ˜àµÚç3—Õ‚œÖî̪_«½Y7¶ó+mê¶‘apTûóè½ZûÇo6~nÔnÆ–öà´íÕó„[µ·?MŒJnÂßEøúÕ*ÑЕ´ñÏbÈ¢Õf½ àÐ=Þ[û«YmŒçÊ“Ã(Œ2-­ À©ŒiŒÁɶšÕ¶ÉÈ(Õ‡Á%q\Ú1:§µÛ–nt­öÕ¶é 0š²4âÈðàIž§µ—y1™Ûµ¬µàÚ‡h×üdÉ Î4³7k_ÿ¶02‡z¾T*Øü=ðÕV¹ÍûÁq¼—XÙ18²ùº/WÖ§7Ûn÷Ù¼Ýjó?ÓÒì>›·[m¾$m‘ôj÷Ù¼Ýjó‡Xwzí»lÞnµùzðk“_á×m¾}uÕ´[7ì²`»Õ‚õ°jM ú[¹§²·ö‹ ¿©À*ÉÅ•¹p…jðO^gxûEáµ@ƒW¢<³l|þ‘áµ@ƒW®¶Þ~Qx-Ðà•Ml†·_^ Tá¿Wá¿áKÿnðo þ}^ ­fxûEáµ@mû믵íë/ÖöR Á+EÔ o¿(¼¨ÂÿZ­®ýbÂÿÒ­îÜàg ~¾?5øIƒŸ®À+ÝÌ"üé]¾èðü þ ¯t&3¼ý¢ðZ ¶ýõ¼¶}ýÅÚ^ 4x%8˜áí…×þÒà/üå üØàG ®{›z§s†·_^ ü¨vþ¶á¯x- KèÕQ·)þ/ýVWY 4x›£ßøÚmõ6ÿþÖá þ¡Á?tx›ÙÞ´q*Páëü÷¦ÅˆSªºm–ù¡Í2?Žü»MŒÓÅ-Û÷g›£ k[÷¢ã¡Äha=³ïp¸ÁR¿Š%œ‚¼é+`𯟯}Ï+¢«;§7&èo<¿;ü•oó»’@ Û¯}­mo_}6 }t åƒ>M;cÓm6 ò¼bÕ‘ozœ8GǙܷÂ]—Î{²¥p¬àš´bKż08R°/¡º)Þa¾q¤(øóЂ׶^Qp‹Žð&Ý´1=Lù>°‰½€Â¥hʵ0‹o"<â–t8yײÁ[lF…·Ö»)Ò§ÂÏ>År¢‚kWú§…vÔCŽ)4VY0¬ÇP“þE¸¹)> ÓBa‚;WàB\Ox;µ}:¯*C<Ѷ·'¶Ç1M¾ãZ„ú\QuI™Úfo;"bÁ‡¸¦N|·à7±žøÄÜY4X…OÁ²(c-к·E¯Ä¸ÂÁi:²!ƵP¸íUv½,øÝ‚_jÚ¾¸® ™ö\@áR°Z­ÕÞbg¬ù\ó$óÈjo.ÅÚ¡áZí-ôFn·à!yê“zƒCÓ®¼G1ÍÙ`R ïXíÓWÌs=Â׿¬Ö¶‹Â›ñ’I‰ŽË^ÀàHxw¨KîÉæ¥„gµO_9a§U¢\mð“,üħœa¯ „Ÿò“ý±´~áµO_‰ÂŸ®ß=Høhkn4ÌlZƒCÍ{wˆ5MÓ*«§ÀjG|¤Ì´×•Xc½4–¦€¬µ€Â¥•XÐ(=[íma†4Ì!·é©Kë 5TÂÊÒ¹ãľ/­ðx투“ÊØVÄñypatÜñ- Žd¬yÆO9ÖÒ2’׎é2‰Œm‰‰--Jô7ºÈ,m-`p2Æ}¬¤ÊZÕ±Ú§¯DŹ$Ÿü… ÿlB,µ‡9ý œ(ØŽÎLt™ÒJ™×>}¥ÿrEø£ ü8†TêOTøVÀàHø\wDÃtV-­ÓyíÓWŠðGUx¼Ì—F/?)/!k¤p<ÈWmËïýõÈöQ”J@dÖà¼ðUÛ|ÿ~¤’ï»*i]$ÿ­ûáp2¢Q^Û1!îÆŒ7³CF‰k…¿i‡öÒÖK›²Ú† [ÀŒCšP¤ö¥€Âß´C{iç¦ÕÞökˆ‚Ÿk¤Ðöµ€Âß´C{iã§×þñ[‰p­ ù¥€Âß´C{iߨÕÞv‹X¿{¦KT¬ß§ Óí¥m§^ûŸŸJíC½<.Õ>Pø›vš/íZu«û¡¬ù‹z­TûR@áoÚi¾´éåÛs(ee2¡¸ƒÊi¢Ú P–Z- ðßn'6¸µÀ‚íH×àÜ=v>˜ºf’e´%æu‚ŒÏS…Sã È,£½KF§èÑS%\µ€Â‰Œfp¢ŒÏK…ß’ÑË2æ1ˆ2>OŽe4V–ñy- ð«2~7{äs™æ²©Àâ-¨Àà¿ Ü·¾ÆðgûºÁ?¾¯ËhË2&H2ÖõM p*cÒdLDF{—ŒN‘±fkŠ2šœÈh¬,ãóR@á·dô²Œ.Ï•PŸ]F•xAFceŸ× ¿&ãÏ×ãº7¦pÒéíšùó»ÁµÐL:½m´’¯†%UëòùœªU üÐr/Ü#oÓLLP <ÈüHer1"<ÀüÁäà,˜qÝù!ðR,ʲj~ã¹€ËÅÁ¾½qÖá$Q¹¬ †~1Á¢°{l4ìîÀG>.8k‡»Ñ19ÀWC6¾ÕAÎÍhÚ=o•–1æ‰ÂÔûB¼ß?ÎèØ½^°÷½{hõ9Ç%7YG [bòÞˆp`c—‡$Œwç|»1Jà`¼»¡,ý¤ùÝæb³\óŽw»o¼Û}ãÝîïBä[Y:Ü=8Þ§=”è¢ Ù§±ôúL4Ç{}G°ÌpiáœP•à`Jñx¯‚ÆFžúGv¨ì¼|¼›‰°½mõº+žÇðÍñ<†oŽç1|s<ßá”Ê çlÄÕ^Yˆl~¨Ü.A°ù2ÒEx€_Õ!+ØüPbž¶ÀphóÁ™ òíøœÚkÑŽlÞ²©/.6måyá0ã:§9×ÚüÄ’6Šp`ó•Ǫ™l6 ¹¹ 6?Ô:¼0Çeý»êvÅ´¾9¦ÅðÍ1-†oŽi;ü¡}O ß¼ï‰á›÷=1|ó¾g‡?8Þ;ñnöw³o¼i¼Wþ3gí(Œ÷dk‘ã=”%C²Âx÷e5aŒð8¢1Qï¶Ôe8ïfÚX£ã½:ga¿ïŠi1|sL‹á›cZ ßÓvøC»¹¾y7Ã7ïæbøæÝÜp¼Û}ãÝîïvßx—bÚz#Äúlïõ-©²š0"\g1&Œ6 ã}ôÖ[+ÂÁüž²3Þ ã½R°ZYx0ÞC¥KÂxwiô+Yãç¯Ó®˜Ã7Ç´¾9¦ÅðÍ1m‡CÞ®ªà鿵€°†ãºâé\#…ýnóØ—Bàš£Ì"4ÂD¸ØòðØ|ñ“>Kï(Œ&ÄÌkGû6õýšÑ¸(ìÛX_|páðô¦>­!íÛÔˆØÈp¸†ÍÙŽAØ·1Éæ ÃáéM¨¼wBLk|ˆ±›Í®˜Ã7Ç´¾9¦ÅðÍ1m‡?Óbøæ˜Ã7Ç´¾9¦íðÇ»Ù7Þ;ñnöwqŸÖ¼çÁDÇ»¯û>I„ƒñîRÌ(Œwç½2Œwgâà²0Þí8kEx‚Ê+³ ï•ötì·+¦ÅðÍ1-†oŽi1|sLÛáÅ´¾9¦ÅðÍ1-†oŽi;üÁñn÷w»o¼Û}ãÝÊkØ9fqŸ¶> $ô;YÃZS¦ñ,Ä´er÷I†ƒ˜v°~„}ÚWúuÚžc‰²0ÞË06=žßÓ^öÅ´—}1íe_LÛà­í—»Ú~ÑÚ~¹«í­í—»Ú~ÑÚ~¹«í”‡w>ºÇ{õÕ"Ìq5´é/“y4Ë縆ÑÒñ^ l“ápŽ+¡—^ ¨¡ÍwWßj°YܳüœwÐFï¼´gåâƒðô%»!I{Vf°ƒ ‡{VÅÏÇQÚ³2c޽ãöíQï‹ç/ûâù˾x¾Á/ZÛ/wµý¢µýrWÛ/ZÛ/wµý¢µýrWÛÜŸß·–¹ì[Ë\ö­e.âZfƒ¯3û|ÙçëÌ>_'îχýY¥3èZå,Âát¬RIgÐu»N®Æu®J/ùºìÃ`E8ôu©˜¼“|]¶=²ºì[Ë\ö­e.ûÖ2—}k™¿hm¿ÜÕö‹ÖöË]m¿hm¿ÜÕö‹ÖöË]mðlbß:î²owÙ·Ž»ˆë¸ ¾ÎîóuvŸ¯³û|x6Jµ>—CÏ&r‰•³‡g5sŸEÚú²XvI„˜Ô“R–|]£²ððl¢2ÿXÁ×Õw8s[€Ÿ÷Mœ÷Mœ÷Mœ÷M48|y¤jÞÔÿ­àRh™¾Æaáð ÚÙ…™¿Àx¾DóY®朔 Ð·—laÎI®%`8Ì9ÉÙÄ&Ål¥³JÀçœß¥OýF÷·ÙgfŸu˜}ÖaöY‡Æ´ÖDujÑ™–…‡á0±¬H}’¬#ĤԎ¬Ã…A´3ö‹hެÃÄèDëˆ9sá©uøš"Ѿ²û¬Ãî³»Ï:ì>ëÐØÊê)‰ù©¦Œ~#‘uxÅüÔzÕÏ‹pd6g'[‡äÚ±uxŸdëHÀõXÕ:Bç$øvû¬Ãí³·Ï:Ü>ëpŠu”A–Eßrìì<Ž¬Ã…1ËÖa­áØ:B¿Ð‡­Cƒcëp^žYJ,È…çÖãj§}qÇi_ÜqÚwœöÅNò€R.Ÿ§ûÇS$èÂúX눶¸˜Äö+idL-\Åp¸ŸTæ¯,í›2ã GöË"ÐM¬Ãìéiï½ãš8|r—Ñì³³Ï:Ì>ë0û¬CÉ õ%쟉hÐéBÍB*IáÀ:BY-+YG W³‡™Ð)›1IÖ1Óhp0ZG\1aÖQ³¼¸ðÄ:*cÇÐl÷Y‡ÝgvŸuØ}Ö¡äz[‡dS‰‡{ScZ^'ÖQÖBnÌ"Y‡3C­Ãö˜Ñu 6$Ñ:B.X‡ï vû¬Ãí³·Ï:Ü>ëpÒÉä´Ý²\{¢Öá†Q#ë(Bò6ýx Ñu”!‹Ö1Ķ ÆptkªÄ®Y¶ŽX‡w„Cìç—ûâŽË¾¸ã²/î¸ì‹;ü¢µýrWÛ/ZÛ/wµý¢µýrWÛ/ZÛ/wµqd¸žX!"Òèz"©¼×3‡7QŒÈKÐd¬‡¹‰v4RD>ŒŽŒºg`Ĉ¼ÞÍep:2b‰ÈÛÑü¾˜ë²/æºì‹¹.ûb®td˜}#ÃìfßÈ÷¹&ïìFitˆeJE¸CIòÈ(c.ˆp42lù>×¼éG#û,Þ´-‘†Ðv:2R ·ûȰûF†Ý72쾑a÷ »odØ}#ÃîvßÈÐî Ça9£#£æ`%îð>¾ÙÈX÷îEx ûøâ.N±ùÁŠð„€y•†ú.ƒÓ‘1r£ÉûqTY5בANL'ë"[Ç`ƒtb£K2fHŒ& ‘Ÿ˜ÖÄ ×–ºŽ2$Òrk—fH˜`-o;(†¦7E™uÇÓn0b8ò›ÖºQò›&õ“ GÖ1¦ [GpQ>!ïº\xæÖÛa‡óXÛë0û¬Ãì³³Ï:Ì>ëÐøjÆÅÓ£ê÷@÷j³jéàDëˆ6ȵÔ½yô²ïmª³ªMƒW|GæpnyèM´û¬Ãî³»Ï:ì>ëPÙMŠdÉ:|,±¾GÖœ3¢u”PΊp<³€ÃAlíÕ!ÇÖáŒ2³XAó<æ\¯Äí³·Ï:Ü>ëpû¬C9=ŠƒøgûœGÖaMôJÜÑz ø p¢u¸~›ñu,LÙÜ::G‡SëÈpYéG›ºÿ^ëø{AlŸÑùžFŽàÝ×ø´ðmþ½ ÌÌq Í61Z‡/kö¼@ë(Kž$×­£Ô2ŸßÔh5¯Ô08ÌÔšG¯™Ï~q¦Ö´ÐHb1Ü¡nÞÑL­© üá ‘u ‹ë™Zs ^„#ëªR’©5L˜Á©uÔÀ_b÷­¤)ŠpÔö8¿GL33ë„—“Ø¿Œi_®·Ý&ísR]ë¸w`6ïšÍ¿«6áŠÍ¿«6áŠÍ¿«6áŠÍ¿«6ÿ®Ú¼Yžræ6|K¡×mÞ†ùTŠÙ|ùÃV„c›CÛ¼ 2÷»1I±ùÀ5Ïm~4Q´y׳Ð߯ؼ÷N¶ù~$ð~Åæ]–ì«Å{#‰͚ͯ·>ο”Ÿfóä½Íé¤qdpò.æ´ 5Ï„´À¬{SNž–œT< O^}¬§¬‘×N^g¬,5«W8¾_Ú:ãïºdPÀ‰ã½Ö/À/ô«ql_Yµ’¼TI=öüB¾Ê©å´JЇÈJK¬g-•xµ’<_Íç-q"œ¶$Q‚V‰uÞÈ>øù Á/W¾Šj%ažMxK ŒQm loR+ñÖ+}"Â/Wz.«}R–[í&«-68ª&¼<°#´Œ€QoIMç׋tûaŠ­ÜœÒ‹¶A'7˜²ep´h™\êâé‘ð‹³t ~|•£ÚÏó'n¢évø… _Åg{¸sÁz=ñxþX=ÉñCÐ(PpƒŸ_þâ}ËN)_Y¥’©¯¥J ©48«¤Ø©kÝðáô–È•@£opRI~i]¤•¯¼Ú’åÁÞ’>|œWÆØÕ´–¬7¹©tÓà´òUT[µ>q‰ÁYŸ”(dÍ._%½O’Ö'@]I©ÄÖ—xÚWYmIÖúÄ€J²RI½¨Ó }Ô[2ŽJKº‹Yᬒ¡¿CR¾Z]Á¿¿?ñ#ãaº tÝ48ÝA˜c“#"¯¤?m÷Àatõœ†2ÌÆåH°TÏÆäzOzƒ¼ÕþÑ¿²©©ó=*P=»X:q³gð]=Gç£ÇÙ ³ç®ë<çc¦½íúã󸼋=é±ÏÖÚƒ µÿþ>¿ÐÇY9|úÊá‘5¹êRp¼ ~Äðzohþêtþ߯ù«—ãù/nÌ’¬ÅV=uËà„`ÚÏ7ë%€ÀàÕT:<Ê:^ñõ'í§÷ƒBൃ§çŸm>ÔËpËí˜ö*ü³Æ2BK÷Ž ^o¯ÈC°q^é÷‡ÕŸƒÖ³î`8|½¾^ž†4_Ù® ¾Mnq͘èð×ò“\èÏóþ~¹ª®=Ayüñùk­½k¨¬Åk–÷š_ÿïoôèXù€# ¹ú”_È(¥ŽÜT⬑ÃÁÓóÏi<ŒÑç¥ãšRž}ð‡äLÌ#ƒc ÕýÙ4‘$LÕ+¦ÝáLuõÉÃÅ:Þê«öSÙzß„:_í˜Å&Âñð{:Tÿvdð.ã­a´‰}Yùõ‡þg‡Ý°Þ­;&ÿ½þ·VÒ~!TÒdü· :2ü Œ°ö:‘¹ö¤€#XΟì|?…·½5ñßf·À‚¯Õ>O’ëøpZ»3nò®Wkoƒ“+m\nÉZŽjŸ3 gßqµößløÝ¨ÝŒfÝpÚöê÷­ÚÛŸ¦ îµßáëW«dDCwVÒÜWDˆ3&³ºÑ¬Q-€Cç|oí¯fµm<2êÅÖœgã¢#£žNŽ NeLc\ŽVÿSýÛ«Ym›ŒŒúDܰl ÑqiÇèœÖncŒéfí«mÓ d45%F¾QÐ8­½ÌÊËÉÒÕÚ?ÖÚ?píÃJ‚­nJZp#ƒ3ͯ´ÉWk_ÿ¶02‡z¾T*Øü=ðÕV¹Íû…Ù€÷Ü®ë8²ùzK; ÃͶÛ}6o·ÚüÁ׫€«ðvŸÍÛ­6_ã™auç¯vŸÍÛ­6ˆ%”s½ö]6o·Ú|YÝ»²u½Úë6ß¾ºjÚ­vY°ÝjÁõÕʸnåÿ}ÿþ;—½µ_døMNþÙàŸüS…ÿþ½ˆüÖ~Qx-Ðà¯Ë {k¿(¼hð_/+¼ý¢ðZ Áÿ|®ðö‹Âk*üñ÷*üñ·"|)Ðàß þ­Á¿¯Àïÿg·_^ Ô¶¿þZÛþúKiûë/~¾, Ü·ö‹Âk*ü¯ÕêÚ/&ü/ÝêÎ ~Öàç+ðSƒŸ4øé üxz_…?½+ŸޯÀÿið4ø?*üŸÿ»¸’·ö‹ÂkÚö×óÚö׳ÒöR Á/ïËêï­ý¢ðZ Ã_üEƒ¿\ü¨ÁuoóóÏÚqí…ן^XÂë¿-Bxã+Ç^ èªyuÔmŠãK¿ÕU– Þæè7¾v[½Í¿¿uøGƒhðÞf¶7-Fœ Tø:ÿ½i1âT ªîG›e~h³Ì£ÿnãï¿‘ÐXâ¤øàÓ´3öûóý/zÐ%šv"OàM®†Áã´36Á!Í”÷![ Çòõ•g?¡°†ÖGòõ’kLñF òCMC->Á»lS^ø|ƒÊØ (\Šg\ tHíö ¶àϸ Á[tD…·Ö»)Ö¦ÂÏ>ESLCkAPÜ‚+jC!Ç4mKüþzÿ€k y\OfPÐ:_ϘVx³ºñ]ˆk>s‡£¶?»p°e%ÚöVÀàĸâ8¦iô^‹¿qˆ©W‹±Œ¶’剩˸PøoŠýS ´þi ±ŽPSŸòˆu,.Œ¡5q © úâ#‚d‚s…Kae«¤“X¹¦³å‘UÒ (\ >[%-äDÞÊÆÒ'!yê zƒCƒ2ùP|Õœì(Å®ŽÕ>}¥ù‹³(c=£LKb’±08’ÑÒÊœ/ÈžÕ>}å³;É2šÃë{œLƵ€ÁŒS:r²³O“¢pÏjŸ¾Òdl:’1Úú`I4¬¯[ƒC=zwˆÖÍ®K õ»¥­>6çâ³OÓ´ŠÍy- piAÐ*iËÔÄ`©xOG/`pØÄzvìÒh‚²žhµ·Uq Þ\w Kƒ£Ú+3O½4§,GZím‚»7Jx1ºÈºw-`p2L|,•{e5ãXíÓWÚPn+ ã³ ±Tb& N4dGg&^ iÉäXíÓWºŒGAÆq8Ô+‘tŽ ŽdÌSÒçt´)­Ë«}úJ“¯Þ˜EHç§•G#Q8¶GòUÛÉy=²å±\ Ø ìpV üªí÷¼?RÉ÷]•´žÿÖýpè©{m a2úMÍì™:/^ (üM;‹•VÔ=¤_×Ñ,*‡4ýÿ¤ö¥€Âß´³XiAÞjoËp¢àçC,Þ•·}- ð7í,VZÏ÷Ú?~+áØàæä2Úö¹€Âß´³Xi; ÕÞ6X¿{¦‹X¬ß§ ÓÎb¥Ý„^ûŸŸJíCöÆKµOþ¦ÒJ›Ýê~( É¢^+Õ¾Pø›vH+íe¬µ–àÙL(î rš2§¯Ù9¸­Ôû‡µÀ5hèùoþÁÝcó õ++ËhK蟧 §2ÆA‘q. ð[2:Enœ*áz¬Nd4åŸ%Ÿ— ¿%£—eÌce|ž (Ëh¬,ãóZ@áWeünöÈç2;ÍeSNųÁ¸o}áÏöuƒ|_—Ñ*2–€?H2Ö•@ p*cÒdLDF{—ŒN‘±¦Š2Ö '2–>e|^ (ü–Œ^–Ñå¹*ãóT@áXFceŸ× ¿&ãÏ×ãºÙ¤pÒ¡Üš÷ó»ÁµÐL:”[áŸÇ_¯kfé/5€+_}_ûªê±}rÎd¬)‹ëðý3,_±·“à£J¨%àQ% ‡ïÈ G•àsIðQ% 0>ªŸŽ*a8|;©=ªDRlgjyǬb•'x$hë㘳G/Å䤛ÚvÈ-«ƒÀáË@£’ÄR²xÇ¡ë‡Ës\]F#v/y?¼‚ÞÂpнøý ø2|?ÃA÷â÷ƒ 3|?Ãá3Aíý úÐô2ƒ³€ê3AOÂ@ÓË@"=TŸ zH¦—D8ÜÊŸž z’ª/1¸hÁªÑŠpfÁªÑŠpfÁªÑŠpfÁ’ѺCËß.p+-}-zÃÁ[7øœÐ Ð#8ÁAà€çmÐ#8Þºéà°Wlêó6 N˜3æ·n£Ÿ·á±kzëF0ÚùyŽ^±©oÝp£]ž·aðÖî3Z»Ïhí6£-‘G½°ÀÿùÜ5‘bøæ‰Ã7O¤.N¤Œî¥–38}ziÌëÕcb´^cx@&où©5Ó¹0|Wü…á›ã/ ßaøæ±hc Ã7oŒaøæ±pÄÙ}#Îîqvˈ«9ÓÖgÃ5Fœ-j ]ùû̶¨4ŒV†ƒ7z»™9.eg¼á`Ä•Øo´Aqa°±½ˆöë´+þÂðÍñ†oŽ¿0\Œ¿ÈC‡qúÁÑsT‹–ÜyŽjz媸ÁQ„ÃGÅóè¤ç¨ê«â"ÃÑ£âq΢ÏQä³ep´·‡˜G㢰·¾¸± ÂáV´u¾ÃáVt‰ÞŒ ‡+žœ~²7Éæ ÃáVt(áA·Ž]ñ†oŽ¿0|sü…á›ã¯(þÂðÍñ†oŽ¿:\~êˆálø©#N„³á§Ž8Άqþà} /8œ ??ä`’0â\ ƒE8~Î{+î9—ExBŸÆJû_6Vž€ßaøæø Ã7Ç_¾9þêð‡â/ ßaøæø«Ãqv߈³ûFœÝ0âꊧ6yô NV<ÎÖ·_…5e*Ë"4±Ìv^Üÿ¬/f'ÂÁˆËGÞ#.Ç2C¶Ðu_üuÙ]öÅ_—›ñ×El…_Ä&®¬U"œ5q-`­ᬉkkk;a?|jÔ©lÄUw'ÂÁlPgñh鈛=0Î! £}âœ:ÆäE8œ Ê,îùƒ+Ž Z¡ítað30™ãŠ«‰Þy÷\bFœ+~¤¿{v”=†2÷ ÒŠÇW»ðûvõöE•—}QååfTy[E᱉ˆ›[%ÂY…7·J„³& #nnk»8«±²g³+‹p8«±²g³êG\t*ªáÌ©¨~D„3§¢úGN%Ôç™ç[¸ìäªÄ9‹pxŒUßþ® <¹ª'Q„ÃàÄU!%?’}¬‡N%ÓìÆµoãr_à|Ù8_nαU~›ÈœÊÚ*ΚÈÊÒ*ΚȜÊÚ*Övqm .D8[¨ËÎÖêr@„³µÁm§b÷9»Ï©Ø}NÅ Nņ”žsÒvl.á[ápo¶ž^ZæTl¥OÏ.‰ðÏÜSÊ’S‰cì/Ùc8Ü›­ômA{Þ·7{Þ·7{Þ·7{¾¹7 ÉÅ«êLýƒã'•ª×ö¤Ò´˜µÖCÌ`fö¤Ruú%ÌiÆ…áð9‡%:‡O*M Úl"žìÍŽCÈ!H{³eQ˜½‡{³æƒÀ½ÙâTBá0M¸>Å%íÍÚú´š\;Ü›Í1ún›ûöfÏûöfÏûöfÏûöfÏûöfÏûöfÏûöf\~êˆálø©#N„³á§Ž8ΆŸ°7cHBÛéÞl0~r½ñn4"îÍæÁ gãuÓv´mý‚áh–º7;úžæõë¼ooö¼ooö¼ooö¼ooö¼ooö¼ooö¼oo¶Áqv߈³ûFœÝ0â¦E·QžîÍ–é¥ÜD¼‡{³¡L3^ZÔ %‚’k‡{³i˜_.Â#n"7¾×™°¾k%Æ_µ_‚=ôËé\Š_˜û½ÀäôúF· G¶iÌ×øÖe2^ÚfŒòÓ­«£ßbnâtŽ;éùøºùf­GyƒÅ' ëçE8ÌÛ°ÃØ3#aªFÈ‘×Îoáõ7Ð_¿Í¾î5ûº×ìë^³µ{HmìpÚ½Ñù…ï²~é·ðvoˆi~9ˆu¯ ƒ\;ì^3.Iþ¬{ëûÙ N»××ÓÐö•Ý×½v_÷Ú}Ýk7w¯qÉ18ͺ2eüÉÝë}K ÇpÔ½!9/v¯ÍY®wïü*н—U»7ØnCn_÷º}Ýëöu¯ÛÚ½1çÌÛNGoÈÑËÝëB˲ÄpܽÖÊÎÙ6–[ÇÝ à¸{çpÞ½±eGöͽ§}sïißÜ{º=÷’cú”KØÂÛ÷å¦ØÆ…d„}¹h˸N".SbY‚ yiõRœËV„à ®2ƒDi_®,2ÚãH.Ü€oÛo§}sïißÜ{Ú7÷žnϽ¤{}‰7…¶£mךP¦è$to(ë cE8ìÞ€IÝkR6cáèJR0.HÝ;ÿ3€“î­Wo‡.£Ý×½v_÷Ú}Ýk·v¯­Ã—Ái÷NŸI»êc²íAt (uc¸‡Çƒ=ÉPBcE8ŒM´£‘Ʋ¨TàЂë¢ÒHF}d\öE—}Åe_Dq¹QÜ0Z³ÏhÍ>£5ûŒV¼¬7ù47:Éhc™ÉF—<.š$mA„#£µÅs2£ì15Ž3 GFë]ö’Ѧ ö¶Û}Fk÷­Ýg´vŸÑÚ}Fk÷­Ýg´Ú}·8,{úÔhkòCáïoú‘íºÁ)Â#2M;ZÑÓz7XŽŒÖ—%£¹íÞý8rÊL7ZrJ3õhá¸{‡ù<ƒ±$ÅNSáðt4aˆü”¦žÝºÆ+ƒáè4ÅÞqè¡ËRdpÚ½!G“D7dm;úÅpè“LJΊ=:¦`E8êÞ°äÙ£»täªãÑŸÝköu¯Ù×½f_÷šÝ[ôGÞvÖ½ô°ch×(0<à(ð}Ó©²R;½£Iò€MBÇñîÍC·!»¯{í¾îµûº×níÞ\:ŽÃi÷ú8„(vopëK-Žº·*òèMýØÃq÷΄éB÷:Ã…çÅຸ}Ýëöu¯Û×½nk÷–Q™ ƒãS©ƒ‘OÅZ½'so?òDÝÓD8ê^;¹#îÞAh;íÞ|iä?Úôõ÷¢tïß boŠÎ÷´E‡äiƧ9â«0'i;!†Ãîõe—×ؽ%ÖNrí°{K-3%̘ÇiÇJŽÓ%ª‚e)S ^†ÃÑ[k 4Cb.èƒÃQ÷ I̘ †Äá´{kÄi…œ¤Ê•¢GMŒóc[4'©N 9‰pÔD³Œ(Cb_®7Ñ‚î5ûlÓì³M³Ï6ÍfÛ cŽ ÎlÓ.ÂsÛ´ Ûf£l›6Épb›sÛÛìËÈF·M›oÛ¦Ùg›fŸmš;ló¸žwÍ6ßUÛÄpÅ6ßUÛÄpÅ6ßUÛÄð»lÓôGðœÙfð!‹¶iC;ñy×ýf©ÅʶÙÝîû¿Yj‘mÓ.<·ÍÑDÑ6]¿ôõ~ÅozïdÛìÃúýŠßt<ͱ̖åü~Ío޽‰fŸmš}¶iöÙ¦Ùj›Ã˜È»î7ý’ÈmÓ´óŒ÷+~sLI¶MœÇ{|ƒ5Šß:N°Í~‹V·M³Ï6Í>Û4·móãüñK9l¶I ›Î‹G'{M»°ó’烴瘜¼5irê^òtU=+¼vòÄTåÜX'ãû¥[ðÊù¯~̉ã²Ö/À/ô«ql_Yµ’¼TIM¸üB¾Ê©å´JÌÊRÎ[b%8k ¨Ä«•ä8Ê-q"œ¶$Q‚V‰us‚÷•íb‚_®|ÕJÂxð–@£ÚØÞ¤Vâ­WúD„_®ô\Vû$¤,·ÚMV[mpTMxy}@h £Þ’6šÎ¯é’ôt3 :S˜¼]ZO×í~̳Ær± ¿øDÇàÇWyóyþÄM4ýe¦=ÿ—êqä÷hgË„¿°&Ö]Âõ«Õß?=ŠÂƒnhðóËÿ`“õc¶MV©d²©hP N+ ~ CÿÊé-‘+C£ÁY%¶?)^¾òjK\RZÒyƒÓJ|Lí•òUÐZ²rpƒêލÁYŸŒ&ÅþUT[µ>q‰ÁY%Cho–¯’Þ'Ië ®$WR/å®Õ嫬¶$k}b@%Y®Ä˜!ëõ–Œ£Ò’îˆV8­¤æ, ݺV‡ñïïOüFÕx˜îo_w N·5Ûž}öyl›µc°ç4R ¾»žK¼Ç5ÏÖþÑ¿²©&…Œón8»¦§°KAö Þc°çèÜa4ã8»jö²g½iG᪳S;=þñy\Þ ßétö0Å:ŸÙsÐ>}…ŸZžŸž+Ç»àø¥æz7iñ¢¥]_óW/Çó;^ÜÔ½qÕSwLœ\ÏŸVGY:Æ(øõa]Ço§ƒsË®?ë;½¡hŠ+¼vðüî³Í‡z±nîÞþ2î³Æ2tK¿ ^°­Ô©CqÏó~g\ö9øá`}hË~‡ÀÖ\ÓæÔuÄÁ~·‡¸zýŸŒ _Ïó9~rZ®{ñÇŸ¿ÖÚ»†Ê’»æ×û9C½I\]c PiÈÕÇ”Âô"2TÊôXa ÓFÏï>§ñ0FŸ—ŽkJy.ËäCr&¶¡Ã±†ê9Qšök¦{Óîp¦ºi\Î_½Õ—}§²¯öxö)}µO`"¥'/ÚÛÁŠŒÿµ†Ñ&öUé×:øŸ9ü¼®<]SZdüïõ¿µ’ö‹¸¡’&ã¿mнOw/pX{áܸf 8zƒy:¯¶3Åo{kâ¿Ín_„§»…Úç1Öñà´vgÜ|ßöZímp¼Ow‹m\nyˆŽßŸž’YgßqµößløÝ¨ÝŒfMÏpÚöê÷­ÚÛŸ~žîžk¿ þ.ÂׯVÉ^„ºoWÒÜWDˆóŽ0³ºÑÄÄà Ý7k5«mã‘ñ\ïCçÙ¸èÈ(“âêßœÊ˜Æ¸Ü ýOõo¯fµm22ê;Dò§DÇ¥mK8­ÝƸ\]¼VûjÛtMMOG†o”.Nk/³òòÌÍÕÚ?ÖÚ?píÃJÚ­nJLr#ƒ3ÍWÙ›µ¯[‹C½_*lþøj«ÜæýÂÀÆ{ƒcpdóõÂx†›m·ûlÞnµùƒ¯W*Wáí>›·[m¾Æ3ÃêÎ_í>›·[mþK(çzí»lÞnµù²ì ííÅW{ÝæÛWWM»uÃ. ¶[-¸>×Ü©¿ïßç²·ö‹ ¿©ÀË À?üSƒªðß¿‘ßÚ/ ¯üõctoí…× þëe…·_^ 4øŸÏÞ~Qx-P…_Z^l_…/¼½Ó.¼Ø¾À¿¯Àïÿg·_^ Ô¶¿þZÛþúKiûë/~¾, Ü·ö‹Âk*ü¯ÕêÚ/&ü/ÝêÎ ~Öàç+ðSƒŸ4øé üxz_…?½+ŸޯÀÿið4ø?*üŸÿ»¸’·ö‹ÂkÚö×óÚö׳ÒöR Á/ïËêï­ý¢ðZ Ã_üEƒ¿\ü¨ÁuoóóÏÚqí…ןhÚ—ðúo‹ÞøÊq׺j^u›âßøÒou•¥@ƒ·9ú¯ÝVoóïoþÑàüC‡·™íM‹§¾ÎoZŒ8¨ªûÑf™Ú,óã¨Á¿ÛÄøûïÀi4–8)ÏoÚM¡o¨–­"t8ÜŸ©_Å NAÞñµoŠôÿúùÚwÜÂ!ºJ,wc‚þÆó{À_ùþÕgkâGob>øàÓ´3öûóý/zÝ"šv OàM®†Áã´36Á!—•÷y¢Ã±†|}‰ÔO•b ­ Ž4äëÝè˜âä‡0š†Z|‚wÙ¦‹ Ô¥ eì.Å3®:¤v{á[°[¿jA•ÑZ連Ê8Pø41E¬QÑc‹¡¨©„Ó´ûðûëýŽŸ1äq=™!p@Ðê|}»{…7ãÙ…¸žpu8jû³ [ÆR¢mo Nl(ŽcšéµPðG’š µ0Ëh+ Sž³±Œk…Oa¥Ø?µ@ëŸçëõ)ß)›€XÇR@áR\Z×hš /® H&8P¸=¶JZ̈õ˜§´‘UÒ (\Š1[%-²DNÉÆÒ'!y:à{ƒCƒ2ùP\Òœ=+…¨ŽÕ>}¥¹…³(c=£L5Q”ÊØ Éèi%p—â`ÏjŸ¾ ŠÙdÍaŒõ>&ãZÀà@ÆéòD²³O“‚mÏjŸ¾Òdl8’1Úú@E4¬¯[ƒC=zwˆÖÍ®KŠè»¥­q<6çâ³OÓì‰Íy- p)îo•´h51˜C*ÆÓÑß 6±ž»4N·,¤eC«½-ˆ[ðþàÂè¸[X Õ^™“ŒŸÈS¤UG«½­5p÷¦C‰"FY÷® N†‰¥r¯,Z«}úJÊmAd|6!–JBÌDC €Á‰†ìèÌ”ò*­Œ«}úJ—ñ(È8õ:ÁHçXPÀàHÆ<¥†N'˜Òò˱ڧ¯4ñ"Y„tLZse…c{$_µ ›÷×#[Ë•€¿g•À¯Ú¶Îû÷#•|ßUIë ùo݇ޙº×¶Þ%£ßT¢ÞÙÁ¡cáµ€Âß´#WiáÜ#÷u¹Ì¢âq˜ÓšHíK…¿iG®Òº»ÕÞVÛDÁχX¼+oûZ@áoÚ‘«´lïµüV±ÁÍÉe´ís…¿iG®Òª¿ÕÞÖú¬ß½™™±Y¿Oþ¦¹J›½ö??•Ú‡ì—jŸ (üM;‹•öºÕýPÖ‹E½Vª}) ð7í,VÚ²Xkÿ,Á³™PÜAå4e.N(éPøo·•/ÿ°x¦zþ[‡p÷؉BÊWV–Ñ– Ð 2>ONeŒƒ"ã\@á·dtŠÝ8UÂõX (œÈX´#Êø¼Pø-½,cƒ(ãóT@áXFceŸ× ¿*ãw³G>—Ùi.› 9×=. ÿMà¾õ5†?{Ø× þñ}]F«ÈXþ ÉXW©ŒI“1í]2:EÆšé'ÊX (œÈXúT”ñy) ð[2zYF—çJ¨ŒÏS…c•e|^ (üšŒ?_ëf“ÀIgokžÛÏï×B3éìm…½® ¤¿Ô®|õ}í«ªÇöÉU8“±f&®Ã÷ϰ|Åž‚o¡–€·ˆ0>ë‚Þ"‚¯ Á·ˆ0<ÁDø|ɾEÔá$av¦¼bŒw•oylÌŽžÝ‰cgv@/íÄäd8zv'/g1„M¸£ÃÑeÂ嵩®`#öy¼ûÞãÁpÐ?ø=øÒ|ÃAÿà÷x ›|§Ãéƒ:èeGô xÙÃáEWô²#zP¼ìˆáð¢+zÙn¦Ã—;üAã2ûŒËì3.£—;´|èò••Œ‹>=Œ ==ƒáà…üôLìèé OÀ´ÑÓ3àQôôL‡³·cà ð4¾ð‡áø½ðyæà Œ ¿ð‡ÞŽ/üuøƒÆe÷—Ýg\V4®2×Tøå«>wÍ,¾yfÁðÍ3K‡3V¥Êª.x.3f›³È4.oj\±fE8z ¬X§çÆUlsÈBÛÙ3aHÒ3Æ[׸¢0—qCÌV±ì±½ˆáÊØTâɸJt>rÕ¡—…B½£úŽ@øT\J#KÃp |=CÌíò}„»-!š Âða,¨]¾ÂïûÈøçs×lá›gk ß<[w¸À$Ö:Ôòwæ•Ùº˜Ö`óe E#ÃXYr¨“›÷‘Á´y³ÏæÍ>›—fëçXÝá|O•Ú|ÝÔ·Q„˜ìsŒ‚ͧ2íyI„OvðŠ_º­¿ûñÏç® Ã7¾9ˆèpD³\#&~Þ§2”e8°yïìÂ÷JlÞ©ª8°yýò¤±yç|»KàÚ¼ÝgóvŸÍ AijIECÁŽþ‰¿ —}tQ†ƒÄ¢XôÃÁ7G™FÉ+Á±›_±Å6_ìɘN×÷º+¶Áðͱ †oŽm:œ^3Í91ö,aa#×ÁpÈb“|ž,¥SŒ9 Y„C›è†$²e–É«s¿’ÙØCžxÌ&Ú!4Ú) ‡ùh9Í©|Ôl\ QP}Z>Ô‡Ÿ„×äÃûóЯ»Â ß`øæð ÃZÌcøæÅ<†o^Ìwøƒ6oöÙ¼ÙgóF²y_ç(kGÁæ“­E"Ø|È.&+ؼ/K`cDx‚ÛTe6Š‚ÍÛR{ìð]á†o0|sxÐáí1`øæ= ß¼ÇÐáÚ¼ÝgóvŸÍKáAÍÇ´>ÏŒ?ÈæíÁ %42"$“SVrI°ùÑ[oåÚŸOÙo›/¡ÉØ_©?í 0|sx€á›Ãƒ'¯ÔÅé¿'úÒâKœG¯·2>‘‡ª»Ècë0<ÁŒìø+uÓ™}l)ŽVRöóhœô¸õÅ÷Õ¬óNZIÕàÂÈpçlÇ ¬¤L²9tø®ðÃ7‡¾9<èð‡Â ß`øæð Ã´y³ÏæÍ>›wüÁû2GÁæý{HŒáðÝÁ3 6ï¼·Q†›w&ýÑ‘Œ²«Ló´¿N»Â ß`øæð Ã 0|sx€á›ÃƒÐæí>›·ûlÞÊ!q™„³¸{àlYÉ"oMqçYŠ“÷I†ƒð`°¾˜‡`ócù÷¾ŽÛ\ö…—}áAƒ_4á/w Ñ„¿Ü%üEþr—ð”zë©ú1›¯C„WYç¨h©ÍO^°LRF„CWÂ0Ú'þÈ£³aìO[Ä­WF\´Y\¾±Wx€c:zç¥e ‹C{;ürR¶>\°C’–f°C‡ïÛúØÛ\öÅ6 ~Ñ„¿Ü%üEþr—ðMøË]Â?¸o³/0»ì Ì.b`¶aÀš}Öì°â¾M¨ºZ¥-î2Éå,Âáw ¬’´† u E8œaKhc½4`˲¾/À÷f—}Ùe_`ÖàMøË]Â_4á/w Ñ„¿Ü%üƒ›Nû¢Ê˾¨ò"F•¬Ý7`í¾+n:…‰æÖ:iÓ)g¬¶éT&øF«­ï­äþPŽU–^KY°qŒ¶.ü:ïÛt:ïÛt:ïÛtjpÈœZÛnòòî&~/¢zÁqáp‹ÛÙ…Û¾1­RÊj‰px¬S¦gÏÞ€š)¡4žÁɦÓ8„‚´é”KÄæE8Üt* YÚt*6d“¹êC!Ò¦“­Ï_õÚ÷m:÷m:÷m:÷m:÷m:÷m:5øƒ6oöÙ¼ÙgóʦSŒ!Yi£Õã‡(¡Ÿ7ÞFÚtÊemD8ôó~´& 6_¦w°{pÞ·étÞ·étÞ·étÞ·étÞ·étÞ·éÔàÚ¼ÝgóvŸÍ[%ž÷6Ò¼&ø,Âá¦SðžÛü”ø$9†#³O’Ãw¦à“ä~_ºôt°2šQ„ÃL§úR§øÀkÌèD8<ʬ~^<Ê´C#hpž‹ŸzBù·Ù×?f_ÿ˜}ý£Ý•HÑ^êŸèŒ3"5—×'©BLíÅ, Gýã ö{þc‡Óþñõ£}e÷õÝ×?v_ÿh× ’qIL0eŽúÇû(¦„ÚStŽúÇæìäþñ¯÷O°½·¯ܾþqûúÇ)ýsÎâø ¹¿ù†á¨\³Ü?Ö:Žû'ôDPÜ?œ÷Ol¯0ŸöÍ?§}óÏißüÓáä¬,å2÷zº«1ÍÉ.´G‚1ôOY?ÇyïíjT.€²ÈÊ"®ðŠÍÒ®†)~Wмp,÷J̾þ1ûúÇìëåüÞ—h¾…vž%Ðë‹9ú'”ØÕX©àßÓ>R6c’úg¦ÝÆ:ióO½õ2ô&Ú}ýc÷õÝ×?ÊY³·uIý3•ˆp¸ZÓòà韺1‹pÔ?Î QìÛ£““6ÿÔþñ½‰n_ÿ¸}ýãöõ“vm§õÓ’ëGûÇ ýÉR GýSF‰4~lûÎ%†£þbÌbÿ ±…ç'uþ ‡Øß“Þ7ÿ\öÍ?—}óOƒ_4á/w Ñ„¿Ü%üEþr—ð욊óÞ[!¸Òèú‘¿¼x›¾óQ nÊìgäÚapSÖÖ£‘‚›²êàÔ¸b nÚÎÿ¾Éó²oò¼ì›<üQã2ûŒËì3.qå9ù7J;C,®}á0rvÑ$Ù¸ŠÙŽŒË†‘¯<çOÛêuå™JäÒËî3.»Ï¸ì>ã²ûŒËî3.»Ï¸´ ú²8ÎÒ»º#4$ðö™qÍvã¢Gï}';ŠË²Á» Ok<´7;?Õ‹îí‘úãOÖ?A„ãþlv“cl—8³1šÙ„±¿í±ê’áØlÀóÓØlÂE86›¢b6Í'u¸`66ß6³ÏlÌ>³±ûÌÆî3»Ïl¬f6e±8ÊfÓÝ9†c³Y8©¸Ùx¥vb6Vó6}5òCÛDÂÛfc÷™Ýg6nŸÙ¸}fãö™SÍÆ ^4˜Ð‹àHóCž÷v³FŽÍÆt£Åf3ô”ÚîŠÙŒ·ÍÆí3·ËlV~ïÍÁ·› ‚o7›'±§rÆ'‘\¤R#x€ ŠÑFimà†4ȵ£µú¬{Æ0g“”1"‰\ív¡ã¨ÙÅå(šM“á W”®ÄNì¶¿ƒ ô]3›wÕl0\1›wÕl0\1›wÕlÞÕØ,/qo|Kf~×Cbì(z›ò‡­ÇÞDÔØÛ”?Ìà<¶M½ëéÄïWBbïìmú)Úû•Øe/šÍГ@ÞAPúÙ˜}fcö™ÙÑl|O­|×Cbk%¶•Ú±ÙøÀÍf±®yÁl¼¿m6fŸÙ˜}fc÷™Ýg6vŸÙ¨!qZH#ù<6½÷+!qÔVR)NàÑ*!qÌ Î'©á³±ûÌÆî3·ÏlÜ>³qûÌF ‰c²òJÊ3Špl6Þ³,ôUwríx_zP÷mHðË•¯¢ZI˜7xK ŒQm loR+ñÖ+}"Â/Wz.«}R–[í&«-68ª&¼¼] ´Œ€QoIMç׋tApŠ+Ý|a¥³Lî*­žÀѡ㼙¯'"á—IÒ1øñUÞ7ú<â&šþR‡¿žÎÿKõ86ŽGâÕHáÖÄ¡1$Ï«¿9~z…ÝÐàç—ÿÁÆ”|»êX¾²J%“EH•@ƒjpZ‰wCX“¿ËWNo‰\  Î*16­K?¼Ú’…gœ·¤òÇ•Ì\WWÐZ²r/pƒêލÁiKÜÇпŠjK¢Ö'.18ëøÊûÝÕ•ô>IZŸu%¹S÷»º²Ú’¬õ‰•d¹’!Ç亡zKÆQiIwD+œU2¤`» ¯ãßߟø)©ñ0-ƒ¯;Œ§iÓyñä®ÈëÏãXÄ ‡1Øs©D߇]Ïerðv=¾Ç`ÏeìÔ,àq¾Ï ®éÉéR°^Âðƒ=Gç£ÇÙU³4ëet W¥0˜Ú;r?>Ëœ“‚çàùÙzW´^MÕ†þþ>³g—9|ú ?iwz«Ðïxíà™Ûg›õ¶úru·½@ûl†± ÝÒï#ƒƒ—b+ðlœ“ú#®ÏÁëƒYsÀ>¶Z_JMeü…uÄÁwPí!®‹¦ŸŒ‹¾8µ?·8ϱËÑñÇ篵ö®¡²®—ÿür-¾ý[]ãÐßiÈÕ7šÂd›P)Ó£€%L9Ø#Õs¤ôÕ>—ZD8yQüÐÞèUdü¯5Œ6±¯J¿þÐÁÿÌáïäãéâò"ã¯ÿ­•´_ÄE•4ÿmƒîEx"{ÃÚë çÚ#ŽÞ:ž28í|q˜·½5ñßf·/ÂÙBíó1â:~œÖîŒ ã­ÚÛàxžÈÛ>¸Ü.ž8~ç¹îË,·¯Öþñ› ¿µ›Ñ¬'ßNÛ^ý^¸U{ûÓ/ÂÙsíwÁßEøúÕ*Ù‹ðöíJšûàŠ1dÑêF³î£¸ðöÍÚ_ÍjÛxdÚ4,{Jt\Ú1:§µÛcºYûjÛtM½!Ž ß¸ÂœÖ^få%/õjíkí¸öa¥œÂV7%Þ»‘Á™æKÜgoÖ¾þmad,õ:|©T°ù{à«­r›÷ wï¹q‰8²ùb5c†›m·ûlÞnµùƒŒY÷5^í>›·[m¾Æ3í”öÕî³y»Õæq¨©* ¾ËæíV›/ ²>ô+üºÍ·¯®švë†]l·ZpÑciãÒ ß¿ÿÎeoí~SA@6ø§ÿTá¿/"¿µ_^ 4øëÇ2èÞÚ/ ¯ü×Ë o¿(¼hð?Ÿ+¼ý¢ðZ  ¿>h.¼Œ¾ _ 4x{]x}_ßÿÏo¿(¼¨mýµ¶ýõ—Òö×_*ü|Y¸oí…×Uø_«Õµ_Lø_ºÕü¬ÁÏWà§?iðÓøñô¾ zW„?½_ÿÓàÿhðTø?ÿwq%oí…×µí¯çµí¯g¥í¥@ƒ_Þ—Õß[ûEáµ@‡¿4ø‹¹?6øQƒëÞæçŸµãÚ/ ¯>=ý°„×[„ðÆWŽ ¼ÐUóê¨ÛÿÆ—~««,¼ÍÑo|í¶z›ëðÿÐà:¼ÍloZŒ8¨ðuþ{ÓbÄ©@UÝ6ËüÐf™G þÝ&ÆßÿžÁ±ÄIy~ãp*ˆ}CµÄha=Eèp¸?S¿Š%œ‚¼ãkßé þõóµï¸…Ct•<õÆýç÷ˆ¿òý«ÏÖÄÞÄ|ðÁ§igì÷çû_ô˜M4í@ŸÀ›"\ ƒç]Û i$½ÙR8Ö¯¯¾úéÿÇZ iÈWÖ™˜âä‡0š†Z|‚wÙ¦»ÍÔâeì.Å3®:¤v»ÖÞÂZ»µÞMÁ2­}. ð)bM\ ’¢¡Q#9¦i_á÷×ûcÈãzæBà€­Ûùúˆø of3² qM´épÔög¶Œ’DÛÞ œXGÇ4 ¿kAÞ7Ž5ëh –ÑVÂÅ<½L€e\ (| Åþ©Zÿ´ŽXG¨¯#OyÄ:– —"¾Ðš¸ÆyÔ}äA2Á¹€Â¥¸°UÒ¢A¬Ç<¥-¬’V@áRôØ*i1#r76–> ÉÓ¡Ü ”ɇâlæ;0RðéXíÓWÚ€?‹2ÖÓÇ´¤ý#[ƒ#Ý!­/eH®gµO_EÅìN²Œæ0Æš¿Çd\ È8]fNvöiRíYíÓWšŒ-ÄF2F[_Ù‰†õu+`p¨GïѺÙuI±z·´5BÇæ\ücöiš±9¯.Eô­’Ç£&sHÅÃx:ú{ƒÃ&ÖSa—Æ)QZ´ÚÛ2€¸ï.ŒŽ»…¥€ÁQí•ïÑø‰iSZO´ÚÛ*wo:”ø`t‘uïZÀàd˜øX*÷Êrıڧ¯´¡Ü–*@Ægb©$ÄL4 œhÈŽÎL÷D¥5cµO_é2Ç¡^Aé ɘ§¤ÏélRZX9Vûô•&#^~1‹@룉ŽÂ±=’¯ÚVÌûë‘­oåJÀ^^‡³JàWmÃæýû‘J¾ïª¤õ„ü·î‡CïLÝk[É’Ño*ÉýìàÐïZ@áoÚaª´$î1ùºfQñ8¤ië“Ô¾Pø›v˜*­¨[ímMü|ˆÅ»ò¶¯þ¦¦J ò^ûÇo%«WeÍ/þ¦¦JëùV{[ų~÷&LD^¬ß§ ÓS¥í€^ûŸŸJíCöÆKµOþ¦²J» Ýê~(+Á¢^+Õ¾Pø›vÊ*mF¬µ–ày¾dÎTNSNâTá5½&Pøo·õ—ÃZîÏþÁÝcó õ++ËhK蟧 §2ÆA‘q. ð[2:Enœ*áz¬Nd4åŸ%Ÿ— ¿%£—eÌce|ž (Ëh¬,ãóZ@áWeünöÈç2;ÍeS2çº{Eá¿ Ü·¾ÆðgûºÁ?¾¯ËhKÀ$ëJ P8•1i2&"£½KF§ÈXsøDk…KŸŠ2>/~KF/Ëèò\ •ñy* p,£±²ŒÏk…_“ñçëqÝlÒ8éTmÍ`ûùÝàZh&ª­ðÏã¯×55ô—À•¯¾¯}UõØ>¹ g2ÖœÃuøþ–¯Ø+uðù:Ôð|†ÃçÆÐóuða:ø|†g˜B°>_G¯öM/Ï08e»°q¤2¬cÎ"=á““˜Öì[^€£|ËÛ½#*˜<ôž³B½a8P0~è >ázÃp àþÐ}©mzÂÁÙKmaì½Á‹ŸÓn"½ÔVßs{xø¦'Ü\4µßE83µßE83©ßÝ¡e¸•ú>vú=v†áàM3üØYêè±3 ÏÀêÚcgìµ²úŒƒþÅùM3¡ßçgÌD8äÿÞ4ú}~ÆŒÁìw»¯ßí¶~/3PÍí^àÿ|îr¨¾Ù¡b¸èPïf}Ï„Áé+uc^ï’~ÏàE OÈjÌ ¿Ìhú=ñg¯î„¡ónÂ+ÜÞºFŠá ßbO>t`Æ1F_=0•vŠö{™æËRµß8¹©Ê¨$ΫzªÕ¦2 Op3 D#ÝÔc±Ú®º]³ †ože0üŽYf6»ÌàÔÛøà«+½Þ «3›¬.V_áËàÄêꮯ•(³rðY¨X]*Îß\tCZ¸*¼©ÿcpL‚^Ç8°—:¦èÔZD8œnËd›Ù“ 5F,Žçª#‹îq9iÑK¬ Ãᢻ|Ô_£‚‹î22Báðd¾ò÷&î[tŸ÷-ºÏûÝç}‹îó¾Ewƒ‹&¨Zg&¨Zg&(,ºc ©M‹NÝÁøA: õƻшp¸è΃öëj|´mñ×yߢû¼oÑ}Þ·è>ï[tŸ÷-ºüA«³û¬În°º)Èó6 µÓEw1N/…ÚàýhD8\t‡â­¼ä !µ¢×ïÕ#ò×ÜÁõ8µ?óŽáðFz£¦TÀgÞ1uïúFýÕìÍoñ(ôù`Rѽô¸ì`­GǃÅwŒ«¯ó γøú[دßfŸ‚Í>›­ NÑžÁ©‚£3òCÑc1º$¡‚CL9Š vaàµSûº_Ù¾²ûl÷)ØnV°qÉ18=à2Åe{ßNº1)8$'¾”îlμv®à`{7¸} vûì¶*¸¬“3žZpÈÑË vaÌ"+ØZÙEØF8à\Á±DöùàÓ>|ºíƒÉVvÊeáÂÃÕâ4˸Œ°Z,+™Ø¶ß0M±ÄÔÂ^ÍÉsMÁ§+>¸/ Oû|ðiŸ>ÝöÁDÁ>•Å-ÇŸ%,ŒófQp0¦ïña8Tp %›”͘œ(¸¦¯½»OÁvŸ‚íVÛj N<}&íwŒÉ¶‡µ0<¡PŲ‚8\P°ï vûìö)ØmQð!÷”³§ vÃòl:Sp1M+¡‚óhû‘Rðcfpê"Â!ö—c÷ùàË>|¹éƒ/¢X~e\ ˜X"œÉ¸0±˜ð4Õyï­0÷itÖˆðw¥Ëõ1Þ~†ñ­$Ýeù3©ßã¡[ÇeßÔpÙ75\nN 7úÝìëw³¯ßÅ\Ái•åF'õ{,‹†Q„£÷¤£Ir¿‹ "õ» £—ú=•‰µ÷»Ý×ïv_¿Û}ýn÷õ»Ý×ïZ¶^Y²d)ñ¼.›ûë·–­gËÚfdý>w©‹"½;˜ìh¥~¹­)ùd¦÷;ÙÁštD8Vð`ƒxq)ö7QGé!Ê(„œ*¸,fæ¬ 6–Ê*eáèmö”œu:¦öÈv‡ó‰Ô›} 6ûl6*¸´0Ž\x¦`4„Œv -{Þ‹_ŽÏm µs÷÷@í>Û} ¶[œ‹ê2ƒSû8„(*8¸•ÊÀ‘‚ËŒ#[pŠÑ18Ÿ×»ÁíS°Û§`·UÁÅ2“ap¼¡4©xo‡Ø²¢ö"œø`#¾U;Ä4pá©‚óÁõôƒÍ þ½( þ{Aªà[Âïô·„/èì ¾%ŒáPÁí-aöªV2mϬÃÙÒÎYv|:¿Ö¼ ÇO'žÄ7¤ûèpªàbÆ>IÏüÚ1EŽdŒ3¥$æ×¦œD8~ó×öüf_÷š}Ýk6woèÏdw8ë^»Ôλ×*pܽaŒr÷ÚÄáB÷Ú|»{;î5wu¯Ý×½v_÷ÚÍÝ[¢þ‘Áy÷.þwo¿žŽá¸{ýœw%to_êþÐöz¦yòv÷Ú}Ýkïê^·¯{ݾîuÛ»× κ׌3}ëÞ!g+ÂI÷öÔܽ—»Ò½ãíîuûº×ÝÕ½~_÷ú}Ýë7uï<­z.<ïÞåaDÞ½—ÃQpSkQº7dgÎÙ Ùßî^¿¯{ý]ÝöuoØ×½a[÷.Ìà¼{]Nr÷F/ÃñèµcVº×eçÝëüÎ9ìëÞpO÷®|v/‚oï^»—,MÜC¿ßÑàœ—`ì'¹ÚFŒ}Õ€àPnHCwû;^λ\h›9Q„Gd9G±{جÏØÚfô;Xš¼kÝû®v/†+Ýû®v/†ß5÷šNàlô²8zmh—·ßõ…Q©ÅÊ£·¯«Þ¯,ŒFÅÑëú]„÷+ #ß)›ðèí«†÷+ #—»‚;î5ûº×líÞaÌí¾ê»¾0òKšï^3dŽó¨EÎ>8º×ûÛÝköu¯¹«{í¾îµûº×nîÞÔ9ŒÞõ…‘‹NYE !}a”z&ÙÖhwÞµ…Q ­îé^»¯{í]Ýëöu¯Û×½ns÷Ƽ«º0rF[÷zD8‰œ#½KÿæÞ|G÷º}Ýëîê^¿¯{ý¾îõ›»7Dà]Å…Ñ¢Š¨ìZ ^„“]« DÎ6Œ λ×{»{ý¾îõwuoØ×½a_÷†ÍÝëÇ×.ìZi›’%8ád[#kÝk#ƒóîÍöŽÑöuo¸§{ÁÒä‘îEðíÝ‹à÷,ŒB}Ÿ(28YYçM¶b{mSò]]…¢H1ËÚ:×–eïWFQ½ÞXE8ZƱ{ë“Õ"<“}½eþù8üÒvÖÖî%OkÔµã:û8ycÊ)á;/‹G^;yEb²ôùùküÀCÍÁŒ¼vòC%íX˜Ç÷KÏ¿Ðí®ê„hÚµ~~¡_cûʪ•Äà¥Jê[ÞA€_ÈW9õ¯œV‰Y)`yK¬g-•xµ’G¹%N„Ó–D JÐ*©CSv7í"-‚_®|ÕJœÐÂ[eŒjK`{“Z‰·^é~¹ÒsY퓲Üh7Ym ´ÁQ5á…\Yh £Þ’6šÎ¯é.Þ´fr3)ÊÏšf£´ž#8Ê ˜—ÄsžodøñUÞåû<â&šþ~A‡¿žÎÿËÌ® a­‚aµ_XËR̯_}¬þæø!èQtCƒŸ_þ‹W&ÜØºáÃ*•L!U ªÁi%Î%ç»(No‰\  Î*©4`¹}åÕ–¸¤´¤ògêÊi_­%+ 7¨îˆW2Ý¡B¶$j}›¢Ü“S_%½O’Ö'–ÁY%nhOå–¯²Ú’¬õ‰•d¹’² nÔÒå«QoÉ8*-éŽh…³J†×Kå«Õaüûû¿#1&‡ë£ÁifÑ”º2¹+òlÚóØžÆ`Ïi8¤%;v=—ÿÁÛqô\øƒ=›j–ø8§„°kz0²dÏà={ŽÎF3޳«fï_ÕÝ®:Ka0µLÜŸÇå­IÁè5+;êßßgõ¡øŸ¾Âδ”‚ã]pôžá̹5UÚõ5õr<¿“c5›£¸¬¬GV Nè@¦=K¹|Ÿyíø…½T¼ð²6êßM/ •A¯~WŸô)aÚÈáà‘ºç4ÆèóÒqM)Ï>øC*KÚ5À±†j®ešÎs¦gíÓîp¦º‰Gsþê­¾7•}}°'&çHé«}Ɔáä=ÐC{aO‘ñ¿Ö0Úľ*ýúCÿ3‡¿“7§kЋŒÿ½þ·VÒ~!TÒdü· ºáËk¯3œ×”qG/NiÓvæfãmoMü·Ùí‹ðÀ¥Pû¼e¸Ž§µ;ãfV‰kµ·Áñ"œ¶½ú½p«öö§_„.çÚï‚¿‹ðõ«U²áËÛ•4÷Áâ¼í̬n411¸ðŽåÍÚ_ÍjÛxdWxûEáµ@~}ŽTx×t¾hðöš©ð®éÿ¾?¾ÿŸÞ~Qx-PÛþúkmûë/¥í¯¿Tøù²,pßÚ/ ¯ªð¿V«k¿˜ð¿t«;7øYƒŸ¯ÀO ~Òà§+ðãé}þô®z¿ÿ§ÁÿÑàÿ¨ðþïâJÞÚ/ ¯jÛ_ÏkÛ_ÏJÛK¿¼/«¿·ö‹Âkið þr~lð£×½ÍÏ?kǵ_^ |"©_Âë¿-Bxã+Ç^ èªyuÔmŠãK¿ÕU– Þæè7¾v[½Í¿¿uøGƒhðÞf¶7-Fœ Tø:ÿ½i1âT ªîG›e~h³Ì£ÿnãï¿oàXâ¤<¿±5¤¾¡Zb´ö e‡Ãý™úU,‘àä_û¦H/`𯟯}Ç-¢«¢7&èo<¿'ü•ï_}¶&~ô&æƒ>M;c¿?ßÿ¢ç1¢iúÞájzßX½:kÈ×çýæs¬¡µ€Á‘†|%'Œ)ÞˆA¾q£i¨Å'x—mb¦kªPÆ^@áR<ãZ Cj·kí-¼¡µ[ëÝ,ÓÚç ŸÂ!Öĵ +jÑ5‚cšö~½À‘1†<®g.˜¢¯®®ðf6ã!»×ûùŽÚþìÂÁ–Q’hÛ[ƒëˆã˜¦áw-ÈûÆ1¢f-Ä2ÚJߘ'úy,ãZ@áSÀ(öO-Ðú§EpÄ:B}ùrÊ Ö±P¸ñ…ÖÄ5Σ&èË ’ Î.Å…­’ b=æ)u~d•´ —¢ÇVI‹‘»±±ôIHžå^ÀàРL>g3_L’‚OÇjŸ¾ÒüY”±ž>¦zE„ÊØ Éèi}AŠp=«}ú*)fw’e4‡1Öl<&ãZÀà@Æ‰Ø ÙÙ§Ia´gµO_i2¶Ém}³$Ö×­€Á¡½;Dëf×%ÅêÝÒÖ›sñÙ§i^Äæ¼P¸Ñ·JZšÌ!ãéèï ›XO…]§|CiAÐjoËâ¼?¸0:î–GµW¶Kã§;†Òz¢ÕÞV¸{Ó¡Ä£‹¬{×'ÃÄÇR¹W–#ŽÕ>}¥ å¶T2>›K%!f¢!PÀàDC¶>(m”5cµO_é2Ç¡²$ŒtŽ ŽdÌSÒçt6)-¬«}úJ“/¿˜EH 5ih¤plä«¶óþzdë[¹°—×á¬øUÛ°yÿ~¤’ï»*i=!ÿ­ûáÐ;S÷ÚV²dô›J4?;8tà»Pø›v˜*-‰{L¾.„YT<iÚú$µ/þ¦¦J+êV{[G?bñ®¼ík…¿i‡©Ò‚¼×þñ[ Çê50AóK…¿i‡©Òz¾ÕÞVñ¬ß½ Óõ4ÖïS…¿i‡©Òv@¯ýÏO¥ö!{ã¥Ú§ ÓNY¥Ý„nu?”•`Q¯•j_ (üM;e•6#ÖÚ?Kðl&wP9Z„×ôš@á¿ ÜÖ7OkA„‰W=³­Ã?¸{ìtŠå++ËhK蟧 §2ÆA‘q. ð[2:Enœ*áz¬Nd4åŸ%Ÿ— ¿%£—eÌce|ž (Ëh¬,ãóZ@áWeünöÈç2;ÍeS2çº{Eá¿ Ü·¾ÆðgûºÁ?¾¯ËhKÀ$ëJ P8•1i2&"£½KF§ÈXsøDk…KŸŠ2>/~KF/Ëèò\ •ñy* p,£±²ŒÏk…_“ñçëqÝlÒ8éTmÍ`ûùÝàZh&ª­ðÏã¯×55ô—À•¯¾¯}UõØ>¹ g2ÖœÃuøþ–¯ØÓiðM5Ôð¦†Ã·µÐ›jðµ4ø¦Z‡Ó+xÓ{3O7‰cã=ÄpôúXsË‘EŽÅNLÔáè¦Ýòð\o¢5Dž%O?¡gÉ0h?KƒÏ’u8}W =ö‰Þ}b8¼H‰ûDïŠÇ>;üÁþ1ûúÇ(ýã-]·|e¥þ¡xþAxa8x§ ?à•{zÀ«ÃÙ \ðÉIxÚŸœÄpHNŠžœ„œÐðÉɰì¾þ±bÿ—\“—¯þùÜåa0|³‡épF[Ÿ4ƳÍY„'Ô»Ë3´b24¸ÃÙ38aHÒ38•;©qÚb8è㆘%Þ]cÆbœ Žž8 5‘=tî%P{*†Ýè 0Ô^cr»AžáÂ5DÓ…ßå71|³ßìp4¸w—6$ÐvÅo–Þ£ú½S4þ`¿›}ý.ùÍçXG•¤~¯{„V†'˜.èsŒB¿§âªÖ†ßå1|³?îpêƒYnü‘ñîS±G+ÂA¿{g–|ÒïnLm—Àìw»¯ß\Âÿ"c°ým†£œèbáà>––‹/º‡2Þúã ¯»ü<†oöóNoEåœ8Ù4¢+ ‡¬ ÉçÙê(™CÌiàÂ#ÍÛCžÞ?4‹®Má0ÿ!§9u„jÞÅ}×ü.O‹á›=m‡?¡bøæµÃìw³¯ßÔï¾:kG¡ß“­E">Ÿ]LVèw_ÂBÓ;n—§ÅðÍž¶ÃŠ|1|säÛáö»Ý×ï’§­Ù"Öç™i€¼ƒî?:#ÂAª‹1a´Iè÷Ñ[ß&©_§]žÃ7{Ú'/Æé¿'ú¬ØbÑN„£Ç}‹q·gîá{¾yì“T‡“çèc“‹¶Þ•ùO„ÃO¥ b›ê§M‡ïò´¾ÙÓvøCžÃ7{Ú°ß;~cZð¾x+#ô»rŸa1>ǘÂ`Æ'é‘poc‡ïò´¾ÙÓvøCžÃ7{Ú°ßí¾~·ò ;ÚŘÖÙ"ÔnMÖYð´e°ûÓîó´—}ž¶Á/Zí—»j¿hµ_îª<5ZÖïÕnE8qÕÙDKû}rÅÛðÚQ¿»ú|1)²|»„Oà fôÎK‘•‹C{àù²ÏÏ_öùù¿hµ_îªý¢Õ~¹«öãù}³ÌEœe6XÙgub<fMˆd+è¡À³‡+è8¸$Åu¡†uì|ß,sÙ7Ë4øE«ýrWí­öË]µ?¸šØ7Ç]Ä9nƒÕÙ}V'®&B™¤Jã´šÈÙ«ÓVuï¯"íDžßH8÷­&ÎûV ÉpêÀ2Ùtkp"]ÓØX41® ËúÛ²w½¦°#†öªX‡“ÕÄ8„‚´šÈeúñ"®&ÊGC–VÅêBWݾÕÄyßjâ¼o5qÞ·šhðûÝìëwe5cHVZEú`|{•Ãáx7ÞõÇáj"ÞôŽÛ·š8ï[Mœ÷­&ÎûV þ`¿Û}ýn•ù½,ö)ªtÅ"|áp5Ê2ÔH«‰P†r;Mÿ^Ý?<~Œ³FúãÇóŸÑãÇðL >~Üá÷×÷Üíhd8<›ì`Å7@cYY;çgù©Ÿg›}2û4¤e;¤èG/i(:Óvõ0î)ŽÅÄ—rBLq»Ã©†ü¡“V¿~Û}²û4¤å$ã’¸ëjŠŽ4ä}w]CHÎ38×P£ÌíÓÛ§!§h¨,²hC!Çž-„àHC.ŒYÖµŽÁ¹†b{mö´Ïöù¡'ûI)‡4³‚ÃX»feÚK»4TbÊ8¿G…bíšW]¢¦ÌàBNQî_™}2û4¤ì´úTÂÒÌV#χ7ĕٓÀ†‚1K\H5T]8o;ÑPÍi™-§}~è´Ïu8Õ­F$ih*á0~ÓBÍI4TæH7f4仆Ü> ¹}rÒŠv ˆ–.ª!7ôç0i¨XŠdC6—Õ&‡ÓQ±?î¶Ï]öù¡¿hµ_îªý¢Õ~¹«v–)â¼÷â“÷it}sVŽÆ–'ÝÅy¢1Æ28íŸX扶±°Ï ^öyÁ´̾þcÁ)Þu£ø {,¡  G¯&F“äþ)=œöO*“@ﻯì¾þ±ûúÇîëíü¿Ä›YÊ´\ÍÁá°ì°äy¡þ™_œt‘ÁiÿŒ‡Ü’ÕÜÓö:Îñ'ÓPáXCƒ bîil”ïN=LY§(i¨D¢íÄÑ—xs”,ؤ¾’ëp>X !³OCfŸ†´Ü¡1Eq½W-4Qãv Á‰Š6ð¶s å¡Wb÷iÈîÓšeS‘% ùXVµ"i(8gD çÊÛνààºÝ> ¹}RÖ{õÅ!ãsÖQÛEÅp¤¡²œñŠjÓL‡S åƒëçJ?š#ù{Q4„&&¯SC8Ì…FÏÃ^ü:µ´Ã??êbæ}'öŠškWí ?P¼{_QK&08ÕPé!#åB“祕~ü¼4yY<÷mÍÛ}šwû4ïöiÞ©šŸß>ÞlÛt‹áøÍÆœ•ç°}ký‡»¢ùñ¶æÝ>Íû}š÷û4ï%ÍÏþÜ[Yó!Nž2vìdg}ë–×μ²¿­y¿OóaŸæÃ>ÍQó‹îeÍ;Ax®ù¨Í°¶í†u8×¼ówx›°Kó+‡ÆƒšGðíšopý¹!‡a”ïûŒI†£÷c´â¢nHžkÞˆ÷ûªæúö‚'Ô?9GQóaLýñð¾kšW5áŠæßUÍ¿«Q¥Y˜ï¸Í²Çà;Š6_þ0o;mFE›GoóêQ%x›Û<|›×ìÓ¼Ù§y5ª³ ¢æ}?C×£Jk%¶^м÷·5oöiÞîӼݧy5ªL3·¦°’Šná8ªŒZ<Ÿ²apa†½GóvŸæÝ>Í»}šW£Ê˜¬Ï;cFŽ5ï½ÛD.¼àçóšwû4ï÷iÞïÓ¼W×°±» ¼¿2Ø(Âɶ/ÈLzT都­y¿OóaŸæÃ>Íu%5IYÃ&NÖ°AÑ|?ÿÿ—ömÉqãL³ï'âì¡7 â>Ž=CÉ1mšý¯äÇ…ëªF‹~p8 TPŠIÈüñªÌvb·S‘°ð3‘GæG^C•]¾^@•]±^4G'µª|½x†¤*Ö3sù(Ïy*L¯ J(L"Ó7Õvå JÎã?–œµç°ä<.À’ó¢|–œGDr^”Fc’óûìø…Þ"Éyº{`ó­…$ç5'@r¿,bÉyÙ •œWœ@ÉyÒF+™³ž ÍxÍ œ'T­¢9í –œWœ@Éyv3@0¿}P+ªN€ä¼ÞƨöKÎkN€ä¼í¤ ’œ×ÆHÎëó&«=Á’óÚ’óú Xõž Éyá,6•œÇò½Xr^øøD%çÝTaæ_¿É»Dà˜KΠÖz¡wyº÷°Róëââcšñ[_…8Š'’ó­ŒÉ›——›€f¼ìIÎkj˜s õl 4ãÕžÈN¨ä¼à¤š:o ÐŒ×z$çµE>ÌyOìPlšñJO ä¼–ˆ†9WƒÏÞCÍx­'Q,9/;ñi2äI“¤ ’œ—”‡C6@3^ëIÖÆK΋NÊÓÚ¨¯öäœWÑnÎ%ç}³ë¦È;#Éy5a s®$çQ ˆä<×f’ó;ÿ»$9Ï•±™ä< ’óTöVœ'ö¬ñj²}o˜·xC¿O6.eʧÖwAL^0oµ0y=œŸ1GÜ÷Lr>ö)øöƒì÷[åƒ/‘œ— ¿ìˆ%ç#~œdî³±Éù¸µ[’œºSÉùÝ\’œºs*9¿™‹’óq@÷CÚŠHÎCÆk*9Çä"gMúU>L¬Ë%çã…DˆKÎC¦>*9/,BTr(/1ÉùxÁ$ç·ß%çã…GˆHÎ+Sû0ç¡+ ÓÍøVöK”†¿HbòDrþ0'Ú‡ä¼ÒÆÿFÇh·Òª鲦æ?_=“œßFñ¿Ÿü·d'Xr^Z~°Ð» 9Ï&—œWºø}ÌÛ/‚‚à]œ—½#ÉyÍûX_1±ïLr^ðN%çUï¯ÿ°åwÇ;•œ—ûŽ$ç5ïã§¿b‡û]ó¢9œ—"4éd¤(9f‘œçÉyÖ{׌lePùíˆÐ#‘œR‘ü¶º®ùÊ òÛh]RÉyÑ;’ßV½ïs›>@°ü6ZTr^ôŽä·uﯻ÷WìÉo£G%çåÈCùmÕûþÛÂÊšñºùæT˜ó3æû\ås v£õN%ç#›óT°[ónÏÍyûèœ$ç??çí£s^œÿüœ·ÎyArþósÞ>:çÉy}ÎCÉy}jCÍøÏÏ`ûè æ’ó­L®’óФßï¡å*¨ºÉyÍ|è¯ J¬@r^3zò‚²<œ×̇Ԩ : $ç5ó¡'/(ËÉyµñ»t… $ç5ó¡|!h`ÉyÍ|¨‹ :£@r^íû®*(ˆÉyÍ|(‚ Ú @r^mü.E)ˆ{ÉyÕû0ÓÌ?Úü=„0IL 9¯6~רÔ*ä¼nþ÷0ÿ[3ÿ[5ò‘‚$œWû¾ë? J@r^3Ž‚”#œ×Í¿ ó/šù—Ì¿󯚹žm†Ò¡ y$ç9“œïæüÍHÎÓ·f(9¿¥Jöê$ç5óñŒ„ì€ä¼jþ:Ì_5óWÝ|<Ù^4ŒØ Tóýù÷¢aÄV †îñ”ùC{ÊüñU3F¨,Ï%çó±¡Ê$çûÎ ØŸá’󬀙WíDZãF%ç5Í]ü|'¢ÕHr~ïâëÑE*9]©äüa>A%ç!_•œ"D%çY3G¢’óz„ „Ñ"4ð Þe£’󬀚Kxæœ'Þ‘ä¼èKγj.)Ë{¨®ÞG‘Œ5V– €)Ëæ€+ËÙ!(Ëó.2eyVÀÌÉ$ÀÊòÚ$ÀPP‹ÐÀy¸TYžPsI@ÞCyi¬‰€<+ æ~Còâ„Âò¬€šK( È á¢ò¬€šKX ÈóäÁäY3‡ó† ȳKÍ[-mù¾‰mdò¬€™£6Rù¤L( w³²žå6RyVÀÌA¹€¼ÖFŒ©µ6ÀŒÚÈäY3‡qdòêLÛñ6žÎT@žPs Ÿ#yÞE& Ï ˜9ì"×¼POÒgÌy§òš÷ñN€‡— ȳfN– ×–2~7Ñ–òxñmäY3'Âòzá ÞÆ¯B™€<+`æ¨T@^o#|ËÒÚˆ_¦ØŒ>gÐ9Ú8Ìñ|$µÆÆ “FÚîÊÎÜaΜPøîäý3NÞ§œŒ‘kÞfgš^Ç{)YýD@žPóíÓ¨ô‚‹äeŒ‹äY5Ñ>JïÇH@^ 0gÔüEû4*½^#yŽ!yV@Í_´O£ÒÛ9—Ç ȳjþ¢}•^î‘€¼ì ȳjþ¢}3•ö€¼y, Ï ¨ù‹öÍTÚZÀòQLPP@š3ùjE4؉€<¸òÊä«Õ+OD@^l#‡§¥˜€¼ÔF, ÚÈägÚè”8ByG* /´‘È . ?ÓF/· ÈÃ82yÞF* Ð% òwÛø>æ#–y4©€|k#1Çò`¬¹€|kãûÇm´J¡€<k* /µ1imäò3mtJ¡€ùC.–™S4Õ´c%4Õäb2j7çrI@Å  ª°‡9<Ô4Tœ>ü€ò.î¼ìâ¯ÒvTÓ{eæü+–u=ÕEóh›`+3§]lê­Ò»uleæ´‹T—õTíÃ]¬Š«Ìœî%4ùU±‹Uq•™ó.baÕS]tv±I¦2s:ŠM?Uìb•Le漋XõDŸï¯Eòº×5O™9Ä0CUÀ0]ó”™ _ä´é©.š»ØEK™9Ñ•ì ¦B»h)3']dÚ¤§ºhíbSeæ´‹­š„D›ê(3ºˆÄEOuÑ=ÒÅ!ÊÌi›†¨ØÅ*ÊÌéD¥ê 'ºx»»oâïRó›èäÂä ·ßeÞé· $ï éq©¼§°ë å=iè¨pç©Ð™s¡3çB'~ª Ê›0tTySÞ0Ê›4tTSóTèì¹ÐÙs¡Ó¾5 QL$æHD1åÐ QL:*w)n¡£{TîRÚB|t-5!KfN»ØT-Å Q…,™9ÏIX¯òT̓]ìJ”Ìœu±ÊRŠW•(™9ï"œ<ÕEûh›”$3§]lº’b«”$3çk+Fžê¢{´‹M ’™ ÒÍ‹ø­»iA2sÚE*ù¸µñ÷Mé"fÎï­IVh®â}ÌœG}BÊÏD£OŽPÓèzr{hú¡F›Oå!ss6‡ªâž8‡ªÈ3çÏ2 ¥‡æÑÒÓæ÷P÷íT„Ì£jbxÌœEÈo_x„Ì’™¹!ïïGÈLEÈž‹}8BiÐvsŽ£Sžöéò©™z&Bv*Bî\„ÜêârÌœGÈhxhˆ9s!剹©ùsòG¨ŠÀ1s¡]NÁÔ‹gæÌY¸R½Ö4Δž@‰4- sÞŸ"Ô8Ózµ1ÁirOLL.MãL“¤ ’H,iÍHãLëIÖÆÄpsæÄ›dÐ8S{rH¤©‰h7gcRß-Ðù’åˆDšš0†9׺i(D"ëà0‰´áL’HãJNL" ÒçQ‰4*Ó"H¤‘{Öx5Y ‹ ‹”5hÛœ¶Â1]cÝÓiéžy«…éÙ€DÚŒ9bwci©OÁ·TüHKò^$0'Ç̱DZ³̽c¾1"‘¶…N”HKº§ý6•HÛÍ%‰´4 û0§i›¹(‘–t?¨˜‰Dät¢iiL.òqõHáÃiéB"Ä%Òàe*‘–.,BT" P3‰´tÁ$Ò¶ß%ÒÒ…GˆH¤)Sû0ç¡#i­ì—(ev‘ÄψDZ+û*H¤!)3±'ÇËg)c‡Ôü!^cJhÛ`ý÷SKœ`%4i•Á6Bï‚k®„¦tñû˜ž_V?Á» „&{GJhš÷±¾¬~bß™šà*¡©Þ_ÿa«ìŽwª„&÷)¡iÞÇOXý™°»æ?Ds „&EhÒÉÈ<P Í:¢„Æsð¬÷.e–ØÊ ªPpe0%´$µ©B)¡ëRf‰¯ ¢ …Ö%UB½#U(Õû>·és«B¡•A•ÐDïHJ÷þº{ÅÞ‘*ZqT MŽç¡ŽZïT -±9Ou¤4ïöÜœ·ÎyA íósÞ>:ç%´ÏÏyû蜔Ð>?çí£s^PBÓçžÑ#;PBSÍ_‡ù«fþª›'Û‹†[j¾?ÿ^4ŒØ ÔÐý1ž2hO™?¾jæïãÁÏÜ`¥ÌúÞÇ·cï)¡5y‚±e¶kœQóžÃïãé µÈ¸”ä;¢Rf}õ„j‘±fŽzBµÈ´Æg?Þ¨¢*c¬€šKXÁA11Ñ c@*«˜ÄË„ÙÁd¸w¦óÅ ˜9 0ÖùÒ<ð öN¼X×’BG´¹X5—ÒæÇks±j.á¤Í%‚js±j.¡¤ÍÅÓæbÌŽ5ÓæÒæù›è©n±f޼SÕ-MÆíYöNõ´X3Þ¹ž–*"·*ä)e±fûΔ²Ôqßñž\T)‹Ps ¿!¥,ÞE¦”Å ˜9ì"SÊÒ¼ÐG)QÊbÌy§JYš÷ñðR¥,VÀÌÉÔÆJYÚÂx4°X3'}ÇXº÷¯‚w¦nÅ ˜9òNÕ­4ïú²ñ‘¾1„1àÅ0dzƒÔ¯ÁLµIJ)û(‡9sB…§º“÷Ï8yŸr2b,ÿÖ¼9Ì‚ô¡>Þ"ÈZ$ºU¬€š¿h²¤×¤[%Ã)¤[Å ¨ù‹ö!Kz›AºUR€‰n+ æ/Ú‡,éeéVÉPéV±jþ¢}È’Þ¥n•<îH·ŠPóíC–ô*†t«dïH·ŠPóí —ô&‡t«ÄÈcÝ*V@Í_´/\Ò‹ Ö­Jb‚‚ºUМéVµW1bŽu«Àm/®[U­^yz$ºUb‘n<ÂÂt«¤6bÝ*ÐF®[5ÓF§ÄêV¡8RÝ*¡D· ðœrݪ™6z¹H· Æ‘éVñ6Rݪƒ·MЭºÛÆ÷1ù³ èV¡éLu«Z‰9Ö­cÍu«Zß?n£UÚu«ÐXSÝ*©Ik#×­ši£SÚu«P©n•ÐF¢[æ#×­ši£—Ûˆt«à|dºU¼T· ÌG®[u¯M·ªï‘hNú¢t«º¹ͤ/H·j;}÷— àšðÔµ.›nÕ}s®‡u«z-ƹ ÉXQOˆnUºçý°6¼ŒµvstHž’ÚHèPÝ&žÚÎA>SD¸ŒøLáòaþÉ.¥‹T Jè"å]dQR é0ÜÇù'»hÅ.r!§3í0g¤4U¯IÅ.ÑÄÌo"T¥7Ú¨ïâ\ºRJMc è˜Á‡¹@Èc³4¼M$‰™²ïÒ ’GBß»ÊPä91µs:µ›f‘0î]¦ˆ™²ïÂÔ>D‡.œÔ¶ë Isþ0§§©‘h "]@¢)‹ÔxªiرЩI{˜*íæŸì»‘ú¾+ò}ï"<@0æÄ¤=Ì?•óOö]š´CçÂùÙ» P|91isBߊ5=0D…šb¦¥r5HGÉÕœš´‡ù§&íaþɾ‹™vŒúÞ5b€žÉ‰I{˜jÒæŸì»•l—llWiŠ"g2ín~ÓÌoSæLv©© ¾5¡ï»hŠ”¬šN PÕ8“¨wó›f~›2ÿdž—Ì¡ó<$h,Hr.Ïïæ7Íü6eþÉÇ„¸âø˜ bð1Å>ª”Å™ÇÄ0‡͘X”ÂbÊcëpÀÇÖá8÷˜x;÷˜æŸì»ò˜èJÒc¢‰_¡†3‰·s‰aþɾ[e½7- é1Ñä'€PC7çÌ€×oÜ`•‰G^”wýfÎ÷°LÄ©6jûM Bjc€`æ´TçáTµ ‡&ç ܦàÀÌy±Pé6:¥MAŠc“``æ¼XiáDs‚¹º Â…+ãu f.ìM!±‚SmT0qWD¸p–ü.‚ÀÌI™ÖÁ©6*صKHml%Ì\h#+8ÕF'=íwM©M†€™Ó±¦j'Ú8ÌošùmÊœmÖ ¹$ÿJää.RU€S]4çº(fgJë»Hiýå.RöþS]´çº¨í^ ú}DAOè÷å.R–}mK—Ó6fNgZ#Ó—ÚØøó™9_L˜&ÿTµ°Æ†/¶Ñ0â0çmÄ<÷§Ú¨îTU:{©Áž™ó錉êOµQyw>ú‹,/²8fNÛH™æ·6þ¾)mļ»Œiž£âA(‘( +‡<3§mDTñ˜8¡Ÿj¼ÑÖ,3NVzwf.4Þæû·çoµÆWv¹ñ̜֬>úÁºÞxw®ñNm¼Y&Ëu±Ì\jüz¿ñþ\ã½Ôø¼\n|È™³iiÉõƇsbã·æËw™›óÆ;Úì'Ç>ÙøaN2b§ü–?Š­É3sÞx#~ EdÞ?@ªü¡5þ‡Úøjª4Û­ùJÀÍÌy¶<Û(ò„EúTãÕTY‰²ÅÆûcûâÇ©P`ë·ç¯¦ÊÔゥèVf.,ؙƻsWSe¥—–oÌÊÌ…9Ÿ'ïÏ5Þ«Oظpæôì™™óÆNg½ñá\ãƒúZ—¤o²ÚÌq¬MaÀq¬¯€Uï â8> QŽc̉9Ž…uÊqLh!Çñvàõ›Œj£æ~s@ȾÒ6ïk`¿±..Á@R¼µñUˆ£ØxÂqÜÊÕmy_< )– ŽcmB sæ$Z‹8ŽÕžÈN(DZट¬ÛÑv#)Öz8޵E>Ì9%tyŸð€¤Xé ä8ÖÑ0ç=1!®€¤XëIÔÆs‹=YÊëx‚$Åê˜$mL,3gNJ ¹nV{’µ1ÁDzgãjI±Ú“ƒãXMD»9s²Øì M°Ì'Š8ŽÕ„1Ì9Y-à8Nøä<â8æ —Œãx¿ç*qs*VÆq />SŽcJÀ(p“{Öx5Y ‹ ³ 7ÐÚœ·Ã)\ók¬æ{±`NIŠa­F•›ûzûÁE ÅBRœ/Â)LRLDÝIq7Ç—K IqÞ $Åy`?O¡$Å»¹DRœöÎÇNLR¼™‹$Åy`ïƒd…à |”¤8ÙA6Ö’b:LRœ/$Bœ¤ž–§$ÅùÂ"DIŠ #)Î!¤xû]‘¤8_x„I±2is:BRÜÊ~‰,×ív¨âä¿Ñ2ÚÆã½°23òpjþƒÜŸeôÃÛ0ü÷S$"œ`úaiýÀ6Bïý0EN?¬tñû˜x_„ËÙ‚w~XöŽè‡5ïcv.g‹}gôÂwJ?¬zý‡­Ÿ;Þ)ý°ÜwD?¬y?ýE¸œ}póÞ5ÿ!šúa)B“NÆúç€ôÃhÖúaž]g½wþàÌV¥bEêZ”~Xl#¢bUB×ùƒ3_„Š­KJ?,zGT¬ª÷}nÓ'¦bE+ƒÒ‹Þ«îýu÷þн#*V´â(ý°yHŪzß[X€?X7ßœ s~Æ|Ÿ«|ÎCòV´Þ)ýpfsž’·jÞí¹9oóýðçç¼}tÎ ôߟóöÑ9/Ð~ÎÛGç¼@?¬ÏyH?¬OmÈüùlÁœ~¸• ì†Oˆex¯¥>~ö?ð q÷Zœø Q÷ZœWï 1÷Zœè÷ ýnÙõõ'ÄçÛk½Pk0è \zOˆwk#Ã{B$¼½g³{B\»›Ç¿ôØN8î 1çöZÏÔkÛÚâÁÝký­Ödf­ÙbµÝÚÅèÇžym¯ÅižGí^ë˵¾ŽZú\d[íÖQkä~° ¬Ž=G ÄJ`®~sõû?¬¡QëU¯5òÉËYê÷H./d©ß#¹=O€uË!ðeQ­6Þ-VÀÌ+ïÖØ`„¬?%'”+•0sädçJœ¦Ì §De€ìT4Çd§¬ÐrsÆVÊ ˜9ébg+¤¤‚JJÊ «¨ÔEBJÊ _¨!L7Ê ¨ÐxJ$Ê Ç'ŸCŒ"”0sàA ¨<¹ÆÊ ˜9r²3ÆNÁ %üdÌ89?1'wÂx=Y3‡=¼ž€SRJßÉ ³&o##æd̶qsMiÖþMVÀÌ‘“ðd Ѧ4›¬€™“yÓi6&u"°i²fNzÒÙ4ë%wÂH3Y3GNvÒL@n)ŒIÿTø˜ì€¶²oÍPÎ3DH©=ò†9sBi+»“÷Ï8yŸr2‚$ÿÖ¼9Lä•÷}@²ë%+ æ/âþ)`§”ŸˆÜ’Póq›PJá"–¬€š¿ˆ»¡€kR~Ì!ªJV@Í_ÄMO@)) b¤dÔüåƒÍÉ÷™D<É ¨ù‹¸· "Åpa~IV@Í_Ä-LHä˜Å¿ÑHŽÅ 笅¯j³˜9jãÎúŽ>Ÿ›XÀÌÅQ¼ßF+´qÐ+£;Ëžq<9Ìœ,“NƒƒÎ,“a.6EX&ˆPöœY&Ã|ÆûA8wº9ç,˜Á0”=:id<Ìœ:¡œ;:©l:Ìœ;Á¤9:it8Ìœ;Á¬7wœ”Øùl˜¹€ìmÍcN:! 3'Nï̃N£ 3œ ☜ JfNÃE™_>vr ˜9…cƒº…z§¤,§¼‹H ²ªPï”/å”w ) ÂêR™ˆÏuÉu’f·s‘<椳Œ0s<è¤Ñ„0s>X˜ äA'烙S'”Îcsòûvÿ±<ˆ:˜9uÒø8ñÅ£NÂÁèt˜ NÆ[Z%¨xÔI%¾`æ4CµÑD;9èÑsÉÉ q²I0s®Êˆr²¹aæÜ‰ó(ÜqB¦p'f`æÜÉAaýLáscbŽoªÀœÏ®ÕD@Hð “FtÀÌ'Þâ€G¤ñ˜ œ¸‡Tâf.ŒIöà"þ£NêfÎø`Á…ùGÔ‹øÌœ;É'þSøÇÔîæ™9w÷ž´äJ^€×ßñ¼Á×ßÅSøøú;.À×ßŃìøú;* ×ßÅCâìúûÇ_è ]§9Ñæ7Z ]ל€ëï8©áëï²zý]q¯¿Ó1’9ë º¿®9×ßÉlÑœö_WœÀëïÊ‹?2¿}P+ªNÀõw½Qí ¾þ®9×ßõh'}LÐõwmLÀõw}Þdµ'øú»6…Áõw}¬zOÐõwa§‚^Ç7ñõw™ÒëïäÂ!ºþ¾}Òù&£pÙrÿH‰¯¿pñŒívõk”Ç…ÐÝüƺ¸oÁýõ­¯BÅÆ“ëï­Œ^ë 1†ìÀýuÙ ºþ®M¨aNîsog½Áýuµ'²zý]ìIý¾²Fp]ë ¸þ®-òaÎn¦§¬÷וžÀëïZ"æ´'ÑyÈ{ÕžDmLðõwщ_ƒ±Ü_WÇ$ic‚®¿‹NœwèµûëZO²6&øú»èĤաûëjOŽëïj"ÚÍÙõwL®pSnª¢ëïjÂæü4¸þžñ·atýß°d×ß÷kÒõw~É—]‡Ç éõwzP¸þNìYãÕd),¦¶ãóïß·þåßÿüÖwþ½µÜ7~ÂÆkÿ†A LÌWjÞNÌãZ>5 ÁzÊÛà¶í¯wÀ¼ÀƵŒÛ¤yÿ%¿›®†™×cy¨VìÇ"Úål>9y=Œ½ßÌ빃¾ùGÃÿ†kµÃËMãû™ Q/`^Ï¢âZ¡ ´3sfÌZMiè#ÁЕ™köØØ’'Œm3·T3ûÌËUÐ,ïÇÙ`è^G„žlö×°ö¤ÞN‡ ï)ÖËh›×™»9YËÌ­Ûèízz;’µØ%–DlBd×._ƒ¾ãûÀýþ÷¿_xH޽ÊÃüíR­ò×óÿ¦ÌoØ{Û ¬yíí+°×•5¾2:˜ãç}¥¿ô‡£ D>Ƹï›óºß=jµk ö`m6àC’]ÖýK0?f‡u%ÀÖW`¿§2ÓGÍ®¥Ý~T¯Àü˜-£•WÛ´ñZï¢ä;KA}–Ü>;žb ¶zNãöÚf¾ø’H+agæÇì¸øäëYe×Þÿ}KñiÍíÐö¼·ã‚p|ê”qôûueK¦*ĵÊ´˜~C¹®½À²IÛN¶I³®¯º;ë¾ÿøŠSZ}  ©sL¸”ìØ€ãþ¦‹’MÍ6póø„^—Ä#_Ñ»AÛ&Om}©Øl ©<@’å颽 ˜#GׇÌÎ^`ëtôRãëÉÀ‡Dy"æI€ „2£,¸ŒP9[Ûíœê{·•gÚ–T¬0p-Ø{÷ü?ͼæTðä¯l½·¤BkÙ=XGBY|½×¤bø”÷ƒížGF»z¿x!ÓÖ¤baR)ï*y?< ¼K«°`¿þû†_?Û= Ù- ­ky¶‡(­÷’“lÏI!§¶¼±¿—4ÔÍ]eªºÚ(e›š“ì–“’µ×òv’Ç%Úíwë¯kÍ^xÊü¹›/yuå—úÙ”š†Ž^ùRMÁ ì»­GÐvÜ jªgÞˆ¶UHÈî¸,¹¾Ì2óg\Ë,%ÄvO•vG¦© ‡[9^‹¿çP8ë–8nùƒL‹ú~ißÓÖ´çP7ÌœÌÜ0CµjºÙs¨#ˆÍŠÀÌ?Ê›ó2¨Ý±ŒW»$gD`j•åš]Øs¨KÑ™Õpó:iAk>ï|75‡:‚6ˆëÜv¾2ncw¨9Ôõ\WzÁLË겈뺹³1Ôoô5EÍ¡n{²%¯",¬ usâb}­l2{ÝÌ/ïæ%¦qqÝÖŲ$ÊÃ$.-t-‡:šCÅ1GêžC͡⋘£ uÏ¡ŽæPjÞªÛ‘ÍZ¤ùàÊr$²<ß*™Ú×q‡ÅÑÊr]M¨¨V{EåáEPê4Pê¦@)®e×JÝ‘C}Á…>‰ FÞ”÷äuÏ¡(ò‹ôXªÃ_ï]Øs¨ÛWK®Ïýqó‘€Ò½V½òê CÀLcZ£J\•Éš±½‚’êÆLA)êûÌ¥°ÀºìœJ½Jý(õ(õä6Š Ô ¯À-‡úãc“;A©kz-Ø´çPPêC&ˆ ÔÄšÖþ['-((ÏÎqœ‘€ROœ ~¿½Š”y\^Ç6-¡ú~lÆXTàïŸßjíæÎ›`Ú¡”ú-¡f¿VU ”ö‚”Ê«q1I™¶$ÔÍܬ~¹Æµ_àn9tëUðU´ÓXþ|o Õã„Ún ´ JÃLA©‡ µ< ýžC=Ê¡ãŒ'¥%ÔœüžCý¾Oèê„vZBõ8šJñl¾”z ”zœC…—šP=NÓ©åP?J½Jqs2(õÇ’´%¡†q|Ù£šcA)Š| nÏ¡Ÿ‡FD•þ€ìÆÙ¥ ’×$èa‚^B¿âЭõ=r JØ÷ºËïET »XÞöÚ£–ê ª S¨2Œhö$ˆ âÕ‹¨2€ŒXðWšáX‡KY 6‰¨Ô*™e=TBQ_’QQ%¨å×lûtM‚¤y'¢Ê^˦’Si»¨2ô$]i|òÚnáæÄïcÝ&{ dr®ü¿7Þˆ¨2lÐu­s¾@Ó*7óJœYZn³Qåæ½ ‡kÈÁ.UšEThFÜ“` IPD•fÄ= šET¶Œ˜c•Zݺ'Áp¶\´\‡ äqÿvõ®=ò-×…©\´\‡ œòŽyYÀß&VWsŒiÉKs ðjö£+`½·fÆ­b®+.Çâc| ×Å(¼€E¡3õ ¾=&n°W-‹à°Š¹Õ*ïaaÏuq*×E-×Å©\ñµ#×aó'aàj®‹ÇÏ'cÌ¡r Ö5 ШæºåRRÃø´a®K>˹Ô 5µŒ7hÖ+1×õZ%™T#Ó÷.Z®‹=×å’†JÑÞ »¹‹¡àB[ùr÷\·\—\y7­¯#b®ÛœXW¯é†m¾æº¸"ŽeÒ¥ÁWKrÝÖÅbx %rí5°åº8•뢖ëâT®‹Z®‹S¹.n«½¼ˆ•lnŽ7è8•뢖ëH4îßn¤VI‰{®‹S¹.j¹”¥˜ëâ1- ôÏfl6˜š<.\l¬ß_Ázo¹Îr@ÞrXq!9Ó¥™j®;~·n$º˜Å\j•¡Ë œÜ`¯Z ¸ßpãK5·´-î–ëÒT®KZ®»kÞ’U9©¬ë<’(U’[ÞîµrY±ËÐi"5åMPÚh­ÓÔ*O¸M|·&+*]àÅd•¶dµ.õc¯‹æžÖºå*R7b²ÚœDVfiûÈV~´´Þ ³n¨3H©$«2³ý:’UBÉ*(É ¸žèÉ Kûy/¿„¦cj”WÈ¥D†reÒlà²üi#Á”¶q+ai¤š…Œç/bD¼ª¸˜å©d•µd•§’U†5ò²r‘[S×»^ÀÑ%É2p¡¼Í%vþ­&«‚6åd…Ø(¼ÍŸ’+¿W©ú²IògܼŸGZúuú€Oɹ\°ô5[oå³¼å¤`s+è{ã”ÜSNK¼º–†Ä³ÍÜ…¥N­]µœ’‹¦2ý•wsy{¨¼Økò1dE C[ïYXïm%ã‚õÄýù¬íÏß6mY£ZeyDzÊ»¬d[0ëâÅýùŒvg6ÕJ|'´ÞóÉ«|h_è +ø5õƾ1YÜ`Ï e·xáü¨ñ×d…o‘øÂÿu)S«;¹ÐZ3¸©™öËÛï×?ë Ç¿þ»´·â&ÏÝÔciµ­¿‚ZMû-ò}ÛÕjâ?ûé)_O=¬¦Í8äñ^,ÚÉU\«ò·Þ¯Uù[ïתt·wkýœòøóߟ¿§jý5Uk¦]S­ÿ=ÕúßSñú=åñ;:èj¡9ñúÛŸm´ÖÏÛ¿ôìÙ%òZ¿x­À=¢„ûµ'TúøÍT¸jîÖâ”jñ†IµxÄZ¯S_§<¾MýÖÛÔoý3ó[ßã±Íp”Óô=Ô¼Vë8èk 8( gu™×:ÎubÛk¼Ö8õ[žÔõÈ™ë·p­ãpI¸Kyˆýn-i×8Ë „>Î`¡Z]ñ¥U ¡<»êÍüy­£“«-¿&©Öè¤1«­gûÍZkïdòÙogÎx­ÑIR¨œÙ¾m£ÒZû@šX0Oý ž³Ðú=åmËĶÁÄ=Ú c–úªÂ ^ëˆDæ×¥Œ¥I¼ÖˆDÐáZ~ʶ+Ö´Ö SúVeé¶ËN=î­¶ •å턞÷–Oi>£Ò3íõñÌ¢ú³$KÇmñSáíO’ÉKù³ã™Ör†gÌŸ•Æ\òHj=ÿ˜ªõ÷D­ÊÏOy|žòø<åñ× "–³SXÎNa9;…åì–³SXÎNa9;…åì–³SXÎNa9;…åì–³w±Ük—ɼÖóT­Š í.´S¸Pj=Ç…vÚ)\h§p¡Â…÷ká¬Û¾ uèÑN¡G;…íz´SèÑΠG;…·ø¶* &¿´Or=nµ¼-Фª†=Ú휸]üµ}:Ñc¯•Cò –û>Îæ—wäªö‹ YD[ ^-X. H´£Ç^-&·—NB|£“¦Þ´~µ1Ëè±×*¸w§»ôØj­ÆºöPj×è¤w!÷3\ zì×ÖkrÞ)è±×ÊÁ—K+"ÿ‡§}½¯•1fÿ-W/w…dì*cÌ-ªe°cvf 2Æ´ãŽÄ’®Rì툗u©nïVc¶Z±jéL›9Æ´3Ób„É[ß0¦½™þ$9:d)“ÓZåMMƘv cÚ)Œi§0¦Â˜v cÚ)Œy¿V½}‹âe£¯o´VÌÂhW¼JF›ç¯†W-i^Ä«3µÌT­)ÏSŸ§<>Oy|·ôÙq5"^uSxÕMáU7…WÝ^uSxÕMáU7…WÝ^uSxÕMáU7…WÝ^uSxßcˆ× âU7…WÝ^uSx•\>Pö1Ý^uSxÕMáU7…WÝ^u¯®MÀ«n ¯º)¼ê¦ðª›Â«n¯º)¼º]prõp¾Û8µ9^ݯAUí°%»5‹xÕísyÍñ*áÂïãêÓ%¯9]ó~òŠãÕí·Ü²æû¥ŽWÝê9ØvUÆ«­Z6åiV?TŠˆoï¤qi©xUÝíìµR¿W“BÊ2^uÛ®b^1µ•ñªë{|k»O#´M`$È;º#¶ QÛKZœˆWÁœäC¿Ð/àÕÞúX¿*Ì´2^Ý~,¹P UM–ñjïãÃÕŒ¿D¯öÖç®Á¯ÙOÀ«­VJÆ4NƆï¼êfðª#[¢FÄ«=Ü-}ëè·rô2^Eµ¢Ï2^Å÷ËþÅ áU7…WÉoe+âUÜÇ…Ïœ†WÝ^uSxÕMáUÔzo¼Šco¼Šú"ÿÐð*¹Ûçd¼:SËLÕšòø<åñyÊãó”ÇwKW‡‘÷Wý^õSxÕOáU?…Wý^õSxÕOáU?…Wý^õSxÕOáU?…Wý^%÷¼’¼¿ê§ðªŸÂ«~ ¯’‹^W+âU?‡Wý^õSxÕOáU?…W=<ÀÙñ„€Wý^õSxÕOáU?…Wý ^õSxu»Lê]l|;Ɉxu¿rÖzºláùþûq³Ô¤TUè ~”÷W{­Õ5 j5¼ºÝRµ®^éʸ…ãU¿sW—̲*_ç[µu­šÃûÕ¯úŽÒârõ«¾¿êÇ15_^2µ¯ó~Û¡¬—)’pN¡ãÕ­ùõ³o÷}Ç@ÚÊ?ÖašŒW{­äÚ–®†Wýq3h©í22^í­_sÕÒ¨‡ e¼ê·åš\••–ñj«•¬Í×¼ôðj«åêy€”œYŒWû8º*F¼¶€Wý ^õ®Êû«øâg4òþ*ºðkã*ãUäq VÆ«¸]–ŸØhx·Ëò7ІW=ù îE¼Šk±òþªŸÂ«~ ¯"fµYÄ«øº³¶¿ŠjemyÌÁK_çÙóñ*ïÂ’fNEµ3µÌT­)ÏSŸ§<>Oy|·ô>»•Qm˜Bµa Õ†)T¦Pm˜Bµa Õ†)T¦Pm˜Bµa Õ†)T¦Pm˜BµäFï*£Ú0…jê S¨–\éUvaê S¨6L¡Ú0…jê `t\rQFµa Õ†)T¦Pm˜BµaÕ†)T»Ô«©Þ‚É"ªÝi â‹.®üYû°˜Ü1²•wa{­5…z¶SEµ½–s ¯9+gN{­Êð]/ˆ3™£“t,+DGµÞ °á*£Ú¿d ë±£Zà±Þ_ºÊ¨^@ÏNj×HLÝ÷•ûÈZМåà?4íËh›Õ¯QFµa;#Rðj¬q•Qm«e–¯í~³“QmèpÄk”÷툗·Ño4²2ªí[Ã5d»(»°aÕ² kETÈñyQm@ZÛ…Eµê;ˆjI»V+¢Ú@>ýFÕ’ßRvaño o Õ†)T¦Pm€—Çß^ ø-@Á«ø·|”ñ*‰Dwa1I†ãgÉJ‹S(-N¡´8…ÒâJ‹S(-N¡´8…ÒâJ‹S(-N¡´8…ÒâJ‹S(Mb,à(-’ Ê,¢´8…ÒâJ‹S(-Ρ´8…ÒâJ‹S(-N¡4Ìu”oåq ¥Å)”§PZœBiq¥Å)”¶Q™Ä%4Ic/+ß O¼»®Á¬‹¼÷·çTeaJÒ­™ïƒä¤Ò’ûµ2„ñ½´ïƒääâ|yæ-Ù,!ˆ(­×Š¡ ÂzJT;ÛûyÌ´¬×‚Leï1vl]½Œ•QZì×?RŠ×¼úàd”Ö=®««ü€"²\ƒ½Y^Fi±#˜´úÎ(£´^«<±yß÷?8íÍRoódáK¿ñ²kþ•³KFi½Fã‚UÎvöZK*°7I{¢¥µZ¡@ö«“÷Wíè£qEkåþPœAiq ¥Eôl_ùù‰†ÒP2INÙ{DµÊ„–QZÄÉW@0¥¡v—ADi”Ô&Š( ýÖ’’ŒÒâJ‹S(-Âf¿Ê( ¶Ë,.È(-ÂÖãÝ"JÃOÑ«“Qªuí'Œ9JKS(-M¡´4…ÒÒJKS(-M¡´4…ÒÒJKS(-M¡´4…ÒÒJKS(-M¡´DPZQZšBii ¥¥)”–æPZšBii ¥¥)”–¦PZ‚Ó„|ÿ:ծשv½MýÖÛÔoý3ó[ß Ò]”–ö}¡”®Î¹äE”¶1=­¶Òú䣈ÒÒ¶+\pÜ(-íy×&ùëé÷Áîtq!.W»,QùBœ¶«5f#eQöÒR_”\Í«êº_<YW£+@¡B+YõZq5¶i›™UFV¹–K±$_}ÿ+wÞˆ¬Z-Ÿ–âÒéû_ÝãªBŪîå¾/·ħ´k dtr´ƒ2²ÊýNÆZr=`(ïåñ±¶4Þ.^ùJÙûèBÒN4Ú/SoŸÛèVé~LjW1W–ÒœedÕ–b ×ìÕ¯”yÛ;ª¼ÓÛŸ€¬ò ²ÊSÈ ¥‰‚Ýå»"ð·Âj”¯”°–¯ßñEd…ÚeÜ5ˆÈ*£/™IÀ&YeœíS‘ú­2DIDVËtYDV÷kUd•§R¥6k’‘Nä]‚c&2ÚuÕ~{ýó_üÿÿ÷9âשDyLP-1.10.4/Data/Netlib/lotfi.mps.gz0000644000175200017520000001011010430174061015403 0ustar coincoin‹ZK®9lotfi.mps­]Û®ã8|`þ!?À")Ù~ìÙÌî60}ÁœìbÿÿCÖIDÙ±$Ûîóâà$Å¢)R¡J¶óõÓ—ß/åïoýóó¯¿üùí?¿þrùz¹„å°¼O¯¿ò:Ä×!½ãë0½óë†|ÌvB6²¥M…l+dc![ Ù\Èö(Û#õ+Û£l²=Êö(Û£l²=Êö8ÛãlõD³=Îö8Ûãl³=Îö8Û“lO²=ÉöD#—íI¶'Ùžd{’íI¶³½˜íÅl/f{Q‡"Û‹Ù^Ìöb¶³½”í¥l/e{)ÛKÙ^Ò±ÍöR¶—²½”íÙÞ˜íÙÞ˜íÙÞ˜íš,ÙÞ˜í{ÿZ²gÈÇ”œ’1S>Žù8åc¶7g{s¶7g{s¶7g{óÃÞË1åã˜S>ίc}ôé Ö¢/¢¾HúbÔ“¾PËA-µÔrPËA-µÔrPËA-µLj™Ô2©eRˤ–I-“Z&µLj™Ô2«eVˬ–Y-³ZfµÌjY«(h­£ …´’‚–R2wèä¡Õ´œ‚ÖSЂ ZQAK*hM-ª Ueõoüýåëc\þþ÷=ä2\ª¿k¸]žîþ¿$Ë-ÿðK~ÝÀË[\od8;à©|êÃ#†Ç¡O8õá£ÞÝ—j|©éâ€/)¾^Žë§$2IÈ"yŽ7’¶À±O&;Ÿ`ÿø-¨Ï¾”wßyÒó¡ñ¡îø\®óðÊŽ`°d-v2Ù‹HÌì nv”S´²c…Û€>²ˆ“>2bŸÌñOa‚>Îf„Îø¸TYN>Te¬‰*‡òœ 13XŒ ΧhåÐ ·}Œf NúÈ€ÝÌ`12øGØA„ ÁŒÐ—*Ë)UYÔDM‡ò<yÎø»,FÄž¬á-ð6{ñ‘I4O‘Ð)Z9´Âí@@“ˆ“>2`738ü#ì BÐG2#tÆÇ¥ÊrФCU–4QÇCyž¬<Çë²” »5¼Þf/>"Iæ):E+‡V¸èãh⤠ØÍ NVÿ;ˆô‘Íñq©²œ"ã¡* !¯ë¦£êÔ hè°Ù °#ÙŠ<Ú# NÑ)mLû(&»œ`ÿø-W_Ÿic/öù¨6¦ÙœÙñ.[)(hÈG  ó‘;’Öè”zÙhFõ ÐÆÐ)mÌ•ÐG óQ»YãÔ­ñc‚>F3Bg|\æ¡\óQõ0³ÕC­qr×øVØóÌC˺ù4Æs>`Gâ#ÒW!;É£¯2"ê!:E º’ùˆÔÃs> bf„äç°Û‚>&3Bg|\æ¡üf—é«™=ÔWµÆÙ]ã[éÓ3‰@ {ÎGìHž¥S 4dÂ+yh$H_E§ôUW@¾zÎGAìÉŒüv;BÐÇьЗy(WA—)ÐZ¤h…‹»Æ·â°gŠùˆtês>b6Òè!;¦É£Ñ3 A 4:E @»’úès> bÍÉÏa·#}œÌñq™‡rtÙ‘F¯ì5z=÷è¯ñ¡†%ù”üs>b?ÚÅ€ì@¼'Ï.¤Ñ£S½+  @£?ç£ öÉŒüv;BÐÇٌЗy(WA—ìbäÅJƒûNéÐ.#v°ÁÀž] $hÏì#ä=ª>;ØGÐǃ*¹ŽÏxL£g@ }Zú9±‘Oí#@v Ÿ³gA RÉÑ)•Ü•ÐG ’Ÿðq©²\]v ’k ¦ƒ°fðtLv˜ú”âs>2b2ŸRÉ;‡Ù£’ "0:E »’ú4à>.U¦p:¦k ŽNÍàù˜¾êð²òD>ôœ Ø‘@ʧ4`ȤOöhÀ‚H€Â‰N(œ®$€>…ó„K•©Â9S85§ƒú:?¸3øM=t8Fè#PùÎùÈ€É|Já„ì@ØcÂ)ˆèwè~çJè#ÐïNø¸T™êwÓ1ýNSp>¨N©óþk§Þ´1G€S‚> ëœ Ø‘¸Å§ô;Èd+öèw‚H€:…N¨S®$€>uê„K•©:5S§òw! õ!ÉÎ{¯ Ú G€ GÕ©ßDïÁ>t]•…ƒê‡úè¿fáM{4}É9°#ñDNéCÈ"õ¡%‡rzÓ¡=q.ãC×öꣿùMYpäв²>"àœ‚Ø4 §ÔÈýÕ%‡rqÑ¡ýL)ãÃW®ê£¯ðmÝìÈ¡¥+E>‚õí9±ƒ…¯œZÛCv°¤¸¶_r(Ú‹Še|äàºL}Lîñy[:rhY~!Áê휂ØÁ²NN­\!;X° \¹.9”3„í—¥2>ñàªC}ôïE½­y9´,.`mrÎGAì`Ñ"§Öe,G®Ë–ÊÅEGvƒ~/WROæn,'ðúÉZ×04oýºR*øœjô+À<ïO}¼E…«kÔS]ôÆy…·qhÞ/r¥²šYáSo53{«jçëS¤¸~JO€zÒM£ÉÛœ¢ÂcõÔ·éöìãv—¢/³Óã=|Š×Ûæ‡ÉÉXO¬ð¹rþ:¶‡wqŒ2üÓwÅ7Î]Ÿ…ª*x±¡O_ ’K$ <Èl ƒF‰zÒ@£ÍjÀc-?Pl^È{•1Vp×(.ÿœ˜æùù(Êwx/Bs}êóP±oÆú:݆Ãü|Æâk°¤¡îX‡ÍX‹k¬ Cƒ„‡ nµŽ$÷¦…F;Ô€×O |äö¥q±ä2ÖC?8Ö±1Ö×Û㎣ǧcMVÁ+|™½;Â& Ò-î“ vC×K‚Ë5ÞöpŒO+Ób·“@‡˜{*E£ŸiÀcì%A°’ K‚t ®ëWV*IP;÷IoüL‚ç‚_£˜º¡ë'ÁæK#¹’ ñi‘¤ n&AQ¨¸'3ðtqÀ»½Uu9ܶ·*ð0ÐÞªH#Ü[ßòl9{«ê*£moUàSw|î÷Väê­ÊÊ{Ë/¬S„½Õî÷ÞªÀ÷§¸©¡³­ð0È‘ÞJñíööVäê­ OoEžÞª¬¹·’pqÀ»½Uu Á¶·*p×(VSí ïv$Cì÷Väë­ôcí&öVäê­ OoEžÞª¬q¹·ZkµJ¸·JÆ×jëØë÷¯U¶ ~í­Ò‘ÞJñíîöVäê­ OoEžÞª(Ü[õ‹µê'Ü[V¤sI$ÁÚ[ÑÚ[Gz+Å·»OØ[‘«·2H<½yz«Ò·qoQ*–.¸·šŒÞŠ×Þj:Ð[•~{³¾XrãÞj6z«Ÿº»_ÃÜï­ØÕ[•®Qz«,±VÁ {«ÝÛ{oUàûS\‹ÔØZá¡z„«·R¼ø—±ÛÞŠ]½•Aâé­ØÓ[•¾Mzm¸XËX†½ÕŒÞªÀ]£XMµ>w#TÝW¿é­Ø×[éÇÄ¿ZÝöVìê­ OoÅžÞªômÒ›ÄZ­2쭪ͨí×jëØë÷¯UK¨.ðPÝáìê­ßî>aoÅ®ÞÊ ñôVìé­Jß&½U¿X«~†½UµÛ÷–é\¤I°öVé­ßî>aoÅ®ÞÊ ñôVìé­Šé-ÛÛ]Ó^]köl¡ž–F×´‡›-T)é-7ÛÍÑ^]Ëôì”™f­Å <ìîÁ{uJ¨9*ƒ'½eR»íÙÃwÑä¨áü«~öð©ÛŸW÷<]×"-p»Ò‰¹¹íÄÕ$žH<=P)é…«ÝÝìáãØjuà`Ic°Ö™ï1§+QKSÝ`Óøb«»Å‹½¸ínÄÕÝ$žîF<ÝM™&¤·^l÷-{ø8µ¾¿à(ÆÅõ+kŸ»ÚZè_2»Âí&F?&Ó|­MŒ¸šƒÄÓĈ§‰)³ô–×íödçCcÎuêõõõÕæF{²‡Û½Š~LæëÍäîêU O¯"Ž^ån\€äxöô ÜzäÄ1ܸ¾ì.n]®ÿñÂCd#t}Éñ¸Ü;A¸õ;cøl…­«Ô?¾C¸ºž<µ†Îw‚pëæð;C¸uýù]0Z¡ƒp;t}‰Åñµ;a¸5U2„[WßÃ'+tn‡®/L8ïv' ·¦J†pë"è»`øl…­Ð}[¿a{+¹ÙH›Ï\ÙƒÁ^&êÞ d-vîa/s]¯'ž'‹Ý€{ØËtÑëÒfcÜWxX·®D7—VðùæO šS©»×1 †±ác˜nKÏ7Ï<«‰ÇGͼÔÕè‡`ø˜Z>Êm’çúI}4H>–F4u%ä¡ÿëÓŸ-¸‡]Q©«]l°p»¢R÷Z¤A vîaWTê^3Ä~v«Ê,¥ºjÚ ]Uf‘x|,ÐÕŠ†ÑðÑUe‰ÃDz^K]cèÿÂüg îa/eÒ]u³ÁnÀ=ìE5îÎÔa0Ø ¸‡½È Ý98s0»ªÌ"ñøXD¾îÈðÑUe‰ÇÇ"NugêÀ†®*³H>ö7€VùÜ‚{Ø»[;+{4Ø ¸‡½³7³eO»÷°w7VvcW•Y$»Rúêãdøèª2‹ÄãcW^}œ ]Uf‘`?þþÒûñÐ¥ãÎO«!Nm¼¢Îö'»œ÷§ÙßàùÞV ‡Øõ÷B÷ûà+»Xç®?¦¹ß=^áÉ‚KèÉßêüdÁcè Û:îƒOŸ-ÎGsÜG…ï'w½t1¶C÷ç¿?^6–ùÿ!bzÞR½!¢Êþ ¯xh秸#ržšŸº4~ätÂ\Áë™ãÓùjT– iªàU³ô¸çÿ55ìÐB±v~ßI¼>u©ŸmNK}K ¯cGyôöoŒÂ5|»%r¯K\ö±›æ²Ÿ»O­O]êG_æ+xýø§0>Ͻ~¦Oœës¯žÚBãø¸êQc zઇ-g²Ï™ÐÍ•®Q•®Qšü»!ÿnÉ¿;òÛ“ßüŽäw"¿ ]­ÈoBWò›ÐÕ„®&t‰/0Äâ ñ†ØC|!¾À_`ˆ/0†Ð%¾ÀB—øC|!¾ÀXB—øCì•!öÊ{eˆ½2Ä^b¯ ±W†Ø+Cì•!öÊ{eˆ½2Ä^â ±W†Ø+Cì•ñU ±W†Ø+Cì•!öÊ_`ˆ/0Ä^b¯ ±W†Ø+ªÏ5Ä^b¯L t¡Kl”!¶ËÜíÕŒ%t‰½2Ä^b¯ ±W†Ø+Cì•!öÊ{e"¡Kì•I„.±W†Ø+“]b¯ ±W&‘5&²öDè{e2¡{·WŸ¶‚Ø+“É>{eˆ½2w{5c ÝLè{eI•Eû·ZÕŒfU×BýõÇÛÏ¢~Fغ1^žÁùËñ‡ï_~’Ú¨{úÛ?/cv<õÞñ¿üþß™?ÉH¯òíë×y#rÃÅAÏD®ƒrEýþTýñšk_0óŒ¨ün%8{­!ÝC¥ÎÕO¬üÖß#ƒ;\½ÿúŸ¢IRÅ×~ì:xcÂGòkúÃáôgÒ~­fËõíöGý¼€%úÑDät™£eÉK¸Ñþ¼¼<™ù™3ºNÑÊüÓþÂ÷üÑ?}ý]$Xð‘c‚%(‡;JcÌNÝüOÿ›Ó <O½?½¼U ™p®äœy¿ñÿ¦YPŸ~½ýS¬•¦5kïgk•D.ºßÏEÒ$CŸ“´#õ[ U$7C÷qôÏþžóÜ%í•HšdèÇFÔWAÎÝà\žwè7óãa¯ÿö ™´ÉºY™ŒÙBÉa¾é÷*P¹Ýí™ z j¢B}wäÿ%3;_+­ä·ä»?|ö9®8?/o v˜Ô¦eAœGËŸeï»U¹})VE[i­’3xdïB$Oá)¢HƒðÔϯú[±=šìŠŸ2óY1™¨ÄÁg àÍv‘MýùÕ@"Ú1Ý£»GýCüG¯…ËDþó[¿?•x×íW  o³!F¤ª™HDd<‡‡Æ˜ ï()¹W!”§!"Y§E"î·äLcÚKÀ:ú¯«ú³ìJ ܨfƒMñ…z¼µÑ–°Öæ²ìP”v(H1…»¸MÒ8ó…4$ù35qZzGÃþU•¢‡;fÆŠ^/H…sK?Òd%ZІkÕÉöpø¡}Ô«ûøþôøåýÒ':W­?㕃"ecà€k/屉…ŒÞ&7$GÔjZ1õY«1î²ÏZq¿½?¿>•×qÓãŒXŽðÆîÈð:!RǤɨ™ ot¢)ŠIáËîdᩎºözHNy7¤þ¡Í`­¢+ù¶J„D1z4Â6F7Ä’ŒOé#ÞùUv1c¸œ³pC _ÉïG÷.2>„ù¾)—‹Uþ½ˆG›1’Jhc#†àí«\êSo•UYGónD-ðþUæ0$„ ðŽYÃlx¿Þž‹ûÔܨ¥áž}hK!6ƒgöˆKv~Gbö¯y.8_âuêà€üÙÚÑÂÛšÇÇ!Þ\U­ïØÖ^ \ûdñ\*ÊÊK¤ð¶t›«s|éÅgQ8ßúÔGTISòV™J.Háf•§no$3R6&©…·)Ÿ.6âëíéë MŠÅhÁËôOÏ_–"†mC,g ÎÊŒ£+VéõT(fÁÕ*e[¬VT‰eú/ïOßËËG›h0 ¸‰ >Ф…µ£)σðÌM’uö‹Î¾ç­{´ôŒ!Já¶Ä8—j¤Fm·)A.)ÁïoïOk¬d)œ³á:æ‰îüPÏ8œ³ÁÍ9W·óÅý=Ú_ßkYŠÍ¢”0r¸Ùv„á lxÐÏzuƒ}Úoä|4üpƒ'c <5bž„ 6‘ÀíúËç…—·ÂËÇù|¥‘ŽK2„7/Ÿ£ðò®GoúçÑ–^žÂÛ—óðòW£HXüòéÞˆñ ß"6J~yQlÌú—¿ŽÁo(UO \zùlܬ¿¼^xy#¼¼"ûÙ«ØÃ“´öÖœSø™7 /oÅ—‡ ;¦YÖCxjàZ’ùºófƒÌ{+¾¼e^c…½ê0xo6:IæÉË?oxy'¿üó“¸ó¿ü<„'.5QK2?;ÒÛûÛí¡8/E¥’ÂRxã­GWÚM¾*â­½•FÁcQx4]j8ÄvÈŒRá {vÈÍüöûíŸbTèFL 6¡?áã;ÄávCísüº‹&¸Y§n¨›ãÔퟚt(³1gñÕ™Ø-šáEͰÏ;ÕzÊë2„7š¡%¾—Têt)é Èéå)¼ÑŒðÑ@þ™g V7¸F’.–[ßžÂZÁ±]â•)þÀ ‡K¥í§Ç÷o¿O¢VNjh}gúƒŠžø;Γì©ÕÅgR±5 Y7…·jò1ñ‘›«RþÓI8¡µË»ü–óÅÛZDÚ&dƒoŠæBf¯u¥ðÖºêšÌH֕Ó”ê6Zf )ÖsHŠ5òGd „wüYáœ?! Šå3„3þ\“*‰vÏH=sËaìªbQøÅ¢p)Zb\8ǸpŽqAf\’— ¼cœYg\熼î±(üãܧýŒËJb\M'šP£:ÎßÑŒ»:òòÞ„Y 52„s‹xqÅrÆIpnãàÒ:ãüãÜûŒ;§qùœÆeY㢤q˜:׸˜‹“Zи,i\ŒÞÀ¸sGà>ïeÜ£ÿ&N Ãá¾5iXãbÄðÝÁ=ƒ7Ò¸«Öi0zæÇÖy5xdðýŒ£p¹wB¬Ã3êb#üÏÇ—ƒê%ƒê!ÜKü ‚IãpÎ^+x«KÎÙëOxw‘:Ó 3äUƒÊàûÙËàRw—I{)¼ï“×o¨î3†Ð9F¡¢5€³W™žò¹os»ÿÁf7ÍS”¦—/eqoêg*㲑Âã–²Ñt‰¨wÕÕbŸ}y•*c: oRX#ðÔpѰÁwãì Ü\šÇ„ Ö›ºœ54a¢B9á᯸¨øyJÎXÙÚ*õ¦vX2ˆvST€ðf‡”›2ý»õÞ2Ny¸)Ÿ·³|ÀÕ ¬÷Ýß±ù» ½DÿÉÕû1xÃÅrÓ¨ì(ü€ÿ¡p¿a°릖g$ƹÂϳ8˜ˆá ã¢Ä8 çŒËƒÁŒsšˆM§70.œc{·ŸqJ !±ˆmoB¶ …ÂÛÀ Va¸mü¾hºÛ ¾üþ€QÏG,âë&‹¸¿€YD©¡…“þ«Õž‹Ø2.@8ç¢ BDa#³ÇBD1j_\(|DAáÇ,¢È8#1ŽYD‘qAb\Àð,XÄ–qÂ9ãœ-‰6gœWÌ"ŠŒ+—,0.œcï·ˆOêõI:ÓÞ0ÆKáí]p—˜Ý±4y¡vóAH´GþàÒ= t(œËP !Ó$‚óÒý˜EâÒý…Ïû‰…°Á_øIàÒ¤åò¼ß)ÆÙsŒ³"ã‚pæÒÌûÉŒ3댳ãü¶D¨çGàÇæýN1.œc\—$Æ%H½a\Ò:ã‚ĸ1q´"ÔsŒ#ðcó~ã¬pÊ9Ê£‡ðÀkçÊ 5I:6&§Ò)'ØÃŒÁÚ5c"6YJ-Üà60.ŸK-üؼß)Ëç4.Ë%‹z§qn]㲤q©ž¢-1îœÆøþy¿ÉEŠÇŸQ]yp"U1k×&9©{ª˜Q8þl‚é-Ü@"Ô¤pVLVµõv!t¥ð¡+ NN1Ξcœ„ãÏ&8ÁŒ›ÎðÂ:ã¬Ä¸-çÖ~$Y$Œ;œœb\8Ǹ 3.IŒKÞ1ά3.HŒsC£ZJÏ1ŽÀ'ã¬ÐpÐ'R–_Olš,ß¹³œ´Y~†pn*½Ã7Y`á»;E8üãüXprJãò9˲ÆEIã"„7§py†k\–5.o¨«åsGà‚“7KÚ7wwV28무c ;ëå³Ü¹7}̇®nÀpÚYiG“ûTð$—‘ÎÙŸ¥Î½ë¨Õ5ã‘bÏçM­w<òe6CêMcf¹èO ]\ütæ³Ü GøÓh/礽Vrx|ƒ¥Ób’6¤g¹ÃnËAù󦻯ôè„·.K]y u‘??_äÔ/I©_ÀðÀÏK½úéÒ™ÌáIàéŽ3œéϘeh\Þ­«‡ðæs8Ù¬©ƒïOý\úpg7½ZúÖ'¸è“äÙÖIŠå’ ›&ax–K-0Np‹! ”¹6Pr¸æAíx¶ ;Â-2ø~ÆMW½ˆðA:€O„‡Æîá^óQ„ïî¬dpÞ¹72UÉÆl<Ôe0¸’º$cðýGáï詵²öiö6½Ÿþ4™\k<´7Ù ¼7|(ÃÅÎ.AºšÏÛƒÏi˜2üÍá‰õñè€>ê0¾º._¦ð–?¶ ÒM7¯ooÌ.¿kBè*z*.Ò¼„wà ¢W…p) ç]¥QÕÏÜPxs¥Õ½êÈ ©ïî*epÙÅZʳ‰?Í]˜?W]ïáü™ê(Îø“•ÄŸ¨0uΟ„ùÇ`×!8\.îÃ`¤¾Ÿ?vF.¾®ê?¯Ná÷#}ÑAhVâðnxá"Í+@xb×~^Á™mÓcxÎÕ[Ë®z’?¤ÕV)ßíý&ö¾®*–8ÎÅàœq“ú!ÆÝ5Ây5Lá"êut`ž[õÃŒKÎr¬/O7*\ ì!l!]¿2ãì)ƽ=¾½¾C§<ÝþòýVGOâg…ÅÏÑ0¸t[=»Ee¤3€³Ï OQ‡/„áWJZ‡^žÍˆŽðXnª˜B`½·²Ý!­€·w¦R  ŸUœ®i+Ÿ®cðf%>•O˜±uÖÎ^Þ)?»œ´4Ƈ{ǰÜåöç幇Kú L’oÑ“­v½Î¹-E oJEÒ JU~oNP¤.ám—€ÖJEN­vð¤­G¾í”òÿy1õAÛÜ€6OxëökCJ#x«³úéD¾xÎ,è}ew ¶“ðÖDØÙnZæ‹&ÕHÎ猯äËžßýþ­à4ß/ÙÙÍ2Àà­¯=Å¢ð¦ÿÿZ{H<ÿï: áý>â­3åÎ o:Ч¬´CóáíòÙs;T¾3èm#AX¢G/ß.Ñ”Ë?XÆd85¢. êôT8®e .kÓñ!ø༉ýúyAf×°0¹?ƒà[eÈj´önƒ-åb>·Cy×éQÌMpÞpýôGÝó¤}¾y‡²ðv‡¬ªÆÎÊvÈÅ5-cpYËäk> ¼×Ed Æ­SÀ[kåË. †žÀ›õÊ%*mMÆ%Mà‚ ƒ¶ëNΊŠ×ÒÖÙõ­³ 6ÞÚ!o6m|dívë¼¶¤­‹yËÖ…s[„­ËåZ©Ö¤à­}sqÓÖië’ uÞU¸öž ë ‚7[SQØ$n; °:x§°¥!ka뜠°×Ïȯ(¬“¶ˆM·uÁ›­KAoÙºý kÑËw «Ì–­“VÏÞzIa¤°±|¦Û:¶óøJ:ýY]Ý:Aa½*ƒç­ÂZD½SX·iëD…5~]aÍ™HŸÁe»” íTØ{à Ø’JI kæƒÑ%…5gR?¶u»vÌ Dú[¶Nô°>¯+¬9“0ø± +ì=ƒ“Ä–­ k ü’ÂZ!i¸N×Ù R§!¼Ù:3Ï„/'ùS mK³y›M©³$çà©…+é‹ÁI–¶Îjaë"u‘âÖÍe½›Þº‰ùSVËn"c…M1e´uw?à]VV¾9¸è&¤­31¯o9“ª2ø1…¤nJhÅÀAB»EaE©Ë~më^ÆTW eâÚ}Ð|¾=•ÞOMʬï‰_¦¤J¡–Áé‡A¦ûAàËÛ1M(ÇŸÜà4]ÇùãJ`UÞ~Nã:_`Ñ~ÃBo>wbÔ€VåÂè¢ËáÞÓŸ—Õ}óZÁ ÎÞQ—ÛÄ´ø… OÂé\û™ôJýïÛ×ïoóÎ^ /ÆJ‰:‡Kmþ±¹©K%ç;4f>@q´C)Ÿ18]ûÕ6ôk¿Nã¸Á™ÔMð@Z6EöŠŠ¥ýá©Õ±!Á™L_ pkzÉ቟¾˜rî»¶å“9NºC¥ýFé;äðmB05o•4 ëemffpÊkÇ@Ça»©‰ËQo{µ·ÚMg/Oí&?Ý‚ApÞN|­Á}¯ÖžxCÆlvu¶Mì ©g×>uY¹Æwtö»5c²ÇÞçùòÁ¦“ ß«=¹Ûç½|7ƒpÞ´R_ž¿–1¤ÎG.hX2f\Á³oŸÂΕ…×»×® áÍÝF ¯}Êœ¯=•±+Í¿ï5x á|íÓS8µ k×ûõ] p.´Ù Hß§"AFp¦ï×ÁÏ}DKú®}¿7ñâ­‹Î xc¢[Õ÷G÷þfÎ:.:ÒÚ¼gÖú (Üh¡—¦ýM,ŸPéþµ³(@\»Rëk÷ÒÚïn|uíþÔÚGk³íÌTJkßh*…µSS¹ÐÿbέÝàû€áGL¥´vb*ÖnÏ­Ýí_û…ú÷Ý|¿ÒÖ!'­=”ùØ¥µ»skWû×ÎÃB³.Åuf5®[X»:·výútÊE¸è"|\…K>δ5 ˆ^Þ„&4"O™ýKd&MZ"íÎX!xoø¤%:ï—HlÇ.RË%.q›å¸H,W¿Dàý‰–í_"SRi‰•TX"QÒ~‰Àû%¶èµ%šÈǹÔà!< ASŒ!øþ⇠wHåB¶nÿj¹*£Š—´ Þ’2p ÄiW_Ž õn-cqayGÎÅíÅ€Q߯Z÷áðýüñ"êçÁ9hñÃþ¨uþø-ü™R}Ê—½éS¾ìM¯æk ~\“’n•îvÞBxˆ€wÞEL]šXãB;}¾ À—s }ÊKüÙš[ès¹Å^þL;á±å"äÏ•6lj?Ó55ˆ?W]?³NáËù>EˆüÙ˜ÿèsùÏNþLìÉödÌŸ:7ÅáÝÝú˜?®}9GÛÍž£íÕŸ&GÓçr´ýüIÂþxAêgÊ8¼»E[âOðå{§R$OEaƒ´Ážmp<·Áq÷G gl¢ ~ãþ&o7¸tA-npÜ´ÁIØ`/mp`œÎmpÚ½Á à ÎX‚}ý ƒ·ì– N«üçåI¼³I—/µ6JØÛXÐà¯]é,À]¯5h., ò“pgÓt‰d™fNÎjâž„;›FO˜Vïlbðý—úPøVáÒ n]#\.HÚ‹·®sžsø' ×óËío¹sFKß71z¼¹Œ¦N'¶]„6oÛ~³{:õž–6'<ò&ç :ª¦^äœ!¼nð”~ø¨2jÖðƒ.nZ½,÷é7çªÜ&ÃओnzFktÌ9ʲ.­¯ß_n/•qv/ã(ü㜵YÍ3 =ã ¼cœ‚7Œ³É¬1ŽÂ{ƹ5Æ1øVÆÙ2Žÿ ý-]„Zº›OK Ëà¼owÐó8—vMûga…릫[{Øö{oZFpÊw=¸T¬MÃwU†ŠœóÝiƒ:éF•Ê= ÎùKß§K¿b.=rÞò]—^õŽïèå[¾{å ßs½·ëýåýoé?Ó±9™# ~kø¸yÎöúy³à»*m¿ Þô雹©B7ýÀÊ%ï¤^€1%&ðå¹thSõ=r;â„'š$irï"§ëìêý N­Â4¥¢`p½‚÷®AôÞ»Ñ8p ¢7@ðÞ5¬yƒ/þ×ßrcØ8Å/g‚w¡íK2ˆr§…ëfÌLiéBˆâðœñ}°Ö æ"±að&sÔEê(ßÇÂEoÌ…5(ƒ°CŽÙ¸i;­h.Ðη÷À)qæK;Øã»ÞË÷‡%¾kÈ÷ûe ÞñÝx‰ïÁ9ß•vRÅ D |Ï& |/îæû” Ž|÷€ïnH5Ä|ø~Ïíjæ(ð}9s,9û»ß’96×Þ 5µ ð>¿ÄnB• o ßè&î)%‚÷ù媛 ðn‚¸ ?à&üû)7AáûÝĻߒR.ˆ ÷‰çºØ<¼O<Å\ÁÛijÜb² 6çÄæáœØ<œ›‡sbóóœµ!ð>t£UµZÈ ð>t£U?Pæ¢ð… ß_È ð… ÿóT!ƒò]®ýëåLCámñ[ ¡«UÀ»³RåÁ‰÷½<¨q‹emïjÜbYÁû·XÖp©¬2ØÎw‘ÊÌŸÿþA' W;‰)-]mÁàZ*s™Æå§ðV´..Ç6tÁÛ£‘rLßZ…RÅdðF†H!£Il<|ù&À5ÉÃ#1c„SÆø8Fàúú!D ïdÈxIl2‚·‰IXlr½?vAlL¶â!'‚o›û5ÀÞ§?Y›©|_›,ÕAJZõ]=ø$œ¨éàœ‹×‰Ít^€/OMÏd’ =Ÿõγd¿z’úC>QOR]‘ºÿ¼ÜßýÞ“T ïªdòý~É ‚·|R>\ŽB¼á{LØ\è uÎw=6i|o²²ä@˜ÁúŒv¾ñE>Æ ÕSÑË÷Òá°@ƒ^¾•S M FEW_$}ŒéË£2 €ƒšŠ`T<„ûöJ³fT¾üé½Î‚/2RoŒJ0…0aP¥NõEòEyˆåR·Æ¨ØX¤ãË’QQiµÈ¶dTBŠl9”’~"E6á,¦‹PËÖQ¸|Rg›ÿîukgPõÎjPxwbc#• ¢ÞšW‹lL Æ´ÎNlÆ kC'­¼e@;Ö”Ù‹à]Sn˜^8ÊI»kt!—ŠÁµQs "Èx|ó°hmœ`mzùΕ¥¸Ú´¸ä$Wf¼ueõD€]‘3z¸ö&{Ê1`'eJ+ÚÃRäãji÷Ç©¦ ¯¿^̪¹  µÓ}¨åZ( —•18iÎg¬ô¤!×›‚´h¬¬Ë—$sM˜´˜4LAt‘*jÈ÷>È[5VúTøö}ÁXmšQ»›Q[0VâhcŒ~dFívnFívnFívnFívnFívfFmº!ꌱzÙ”k.]í%YUÒtÙÚ¼œ³6/¬3hëÀÐÉEš3ðnèä"Í™ x?t"Õ.4âû±{ãݽ´á}qçZx)ܲn;gælœßÉ>ŠV£ð¦ÜQ&'Zxݹ^'6iŽÜƧ,Æ—ó-çEõ¤5<7sµÁà´‘›•t«`éñ¤ð#Ín©…·öƒÜÎ @ÞÎ @ÊÓµZ #Iš´“ÜÎ @Jk’"sY€¼í€œî©÷¾qÒ»„whòvfòaAl6M²ÝÎM²ÉÊÈÞíÜ$Ûm÷õÖ:—F‘‡ CÙõ$ˆy¬1K‡ÔùQN*_¢iëžÞ"x”VrÄfÃ$Ûƒ;70 û"›çÂÖ…:Å·ä‹‚Ðᣊ©¤ð~LR˜70¥iñÁ›7\+%°C=LB8¢“C=ÃS ÈBxèd8˯ùj?2oà–æ êG2Ïõý¹ {­ÔÕwdðFë…Z­Ô9ôò}ÅÀ­µ3xß\(ö"xlÍy†'€1”R‡³æBŸ5Š¢ãÔJ<1ÙTZl9.Q4ãûþ¶Á©Ðtjò&6[g·íº+“Ž\|Ó$Ký¼«#¡t˜!uèøÏ¯÷|·RoëˆÒ!Ú8?4)Ž©Èé)·[:lFðcÒáöIÇt\e¼ ƒ#îBr!!ø‘ñX ça°ƒ¹u3KàGÆc+ü t¸Uéøâε¢Qø±ÜÚ®æÖ]ÝÇx×Ñäüj'›ÛßÉ6%ÝÞgàbÒà}.&Ý2ðÕìÉêd£ÙÓ™N¶—S“¯ÅìÉî5*õ2ýÑåÜÃp\’Q½ZLpí¥Ã“wN:Ü9épëÒ¡ÙŽ€à}ËŒØ%à}Dy&»€àM[B½Jc±›ÅŠÝ,aK7‹=×ÍbÏu³¸®ÂåNw}Îvè-¶c±ÓÊ­vZµ¶C?`;´h;&ÅÂ;ÂbS»N¼—¡ËZ§»>g;ô’í ÝÛ‘\”Ž>*EÔÁ…¨éTo‹\ `KQ©=•ÚsQ©=•ÚsQ©wòÔÛñ²Áv,K‡“ù:Y®×ç·Gÿïþ¿i¼¦Ý¦‘EZÉ3]ɇà¼{C~þ õ+C¸ãLRη©|\¶G)û¤àë%W œšÅ8yhUë.s¸ÑÍ;–»Slc“=„;öT*W¯XE)[ç-‚[ºCƒ3ó1¢²‰½TºkFt‡™ºKœ#î<¿˜gÈóõbÊ7ŒËpç}lºçŽ2Ï¢fŸËáMSc¤jÜ¡‚R§éÅôê7où!Ìø·ál‰:Ì[÷á™6@8ßàz_õ¦Sk®Òs8cÜôòóÚ“§P.­mà‘1=–ÞwÆ÷©KR÷ªi¢Ì Pw¯7Ü*–~)èÁð´)¹U+ýR>ñž_¾©EÖ0µ™fÐÈÖ}|=­ÊV¨wŸ–¸Á&¼óÔ£L¼/½bžÊd<¦èS¶^kG•5píIݨå¥úŸÙb„/y:Ô(Š[ðòíùî¹EŒèhé2½ ˆŒJéº0Oª…©ó%º\fyˆæNO›Jš‰J¼vb²*0(Þ Ôs»CsÄtöpë²f¯hËš<¼|ÜÇ­èÌ©?‚p/ÁCSJkgÑÎý©ž7Pg16¿æ€»^­"„3¡½øœ²llê9…pÜç¸>áÔËèÑA:Ä8Ó\}§‡ù#|Ì ™!Bg¨Mºø0äòeGƒß‘C Â7^®• ¡Uo¬M¹ '*îü`Ti"ï‹-vÞPC0Æ”+C­Âß§¹'ØpCàË)8<)ž­–Iô¤yF©'®Î̱{cG,Œ. SØÑÌÍö¦QX3À­Ë<öÔó÷0ø¼ ™äÂéÝ¿cü·üÒs£§àäÛË×/ï_þý¯ÿf7] oDyLP-1.10.4/Data/Netlib/israel.mps.gz0000644000175200017520000002234410430174061015561 0ustar coincoin‹[K®9israel.mps¥}ÝŽõ¸‘使Ãy*ˆÿäe·ÇÀ.à±{ûþo2çG¢TŠ2KꛯQ:AŠ!f2’L’ÿüã¿ÿþèÿýßÿüû¿ÿã¯ù÷¿þÿþú—Ç?¿ýë?ÿóü¿<ºõ_¿þÖãúoZÿÍë¿eý·®ÿ¶­œeûŸ­D·é¶2ÝV¨ÛJu[±n+×m»­d¿•ìû»n%û­d¿•ì·’ýV²ßJö[É~+9l%‡­äÐiØJ[Éa+9l%‡­ä°•¶’ãVrÜJŽ[ɱ3¼•·’ãVrÜJŽ[Éq+9m%§­ä´•œ¶’Sÿx[Éi+9m%§­ä´•œ·’óVrÞJÎ[Éy+9÷~±•œ·’óVrÞJ.[Ée+¹l%—­ä²•\¶’Kïr[Ée+¹l%׭井\·’ëVrÝJ®[Éu+¹öÞ¼•\·’ÛVrÛJn[Ém+¹m%·­ä¶•ܶ’[7”ÝRº©,ÝV–n,K·–¥›ËÒíeé³t‹YºÉ,½Žƒ9ö:vƒÜ-r7ÉÝ&w£Ü­r7Ën—®¦ó»Í÷:ºmºnœ®[§ëæéº}ºn ®[¨ë&꺺°;–^G7S×íÔuCuÝR]7U×mÕucuÝZ]7WwïÕëèëºÉºn³®­ëVëºÙºn·®®ë–ëÒî"{Ýx]·^×Í×uûuÝ€]·`×MØuv݈]Þýp¯£Û±ë†ìº%»nʮ۲ëÆìº5»—9ÿí_ÿøÿýÏ×óüï°¸Ïpô|‡ÿ¾ž¤|?ÞþqþÏ}ŸáOïþÑwIïõ'Ô‡·=žàí\ÃÂã=NÁ½ <šàIÁ³ ^¼šàŠºh¢.:ò}ÞLÔEE]4QuÑD]TÔEu‘P÷jõs<·À“êuÉD]RÔåp¶7¿ ÅåH~õ~Lð3Á¾|¿ 6òáõ\IHŸÚyð²xq&¸Wð`‚+êÊ™ºG&Ô•L~õ~PLð3uye¾4òàõLÝ£|Ú^y€p¯àÁ žLpE]=S÷å¼’_½4 ¼¨ûòþÃ|säÂÏÔ}…ÏË·`‚Gñò-™^>+¸‰º¦¨k@]$ð§>Æ_}8CíO)Ík*k<*x2Á3ÿpO½Ž¼*x;ýìSö êÜÙb)óÎã¯>‚ üDí´Ï¸ãôòmm»+ø€À«‚7 Ü+êΪ”¸³*íÎ<*x2ÁU¯ó¦^çU¯;‹e?+ç&ê‚¢î,–¿2…GüÕçA²x›³rîßý,–¼*x³À£êuÑ™à^ÁMÔEE]aGkÏø«Ïƒb‚WoxZü,–yÛÏʹ·=™¨KŠºtîu…¾|Æ_}¼*x³Àó"^>›¨ËŠºl¢‰ÍÞ!œ }þNôQæNxUðfÿôŸ¹‹þ+Ïg8ž*­Öo>wñåþ§d„Ìp<ÿš3^Ìp<¾Ÿáx?øÙiïpo‚&xRðl‚¯&¸¢.š¨‹Ž|6Ã!àŠºh¢.*ꢉº¨¨‹&ꢢ.™¨Kª×%uIQ3ÐâÀ%½~Eg88<+x1Á«‚7 f868Ìpp¸WpuEQ‡qvˆÇ8{ 0Î>ŠG/âì=Pv&¸5Îð¨àÉÏ ^LpEÆÙßŸpŒ³¿ßɳ9Ü+x0Á£‚'<+x1Á«‚7 Ü)ê †=J×^ÄİÞbX g-‹aÎ-íðÀg¶Î1¬‚'Ï&xQðj‚7?i#?i£ÜD]*Ò5QuÁD]PÔuAQMÔEE]4QU¯‹&ê’ª=™jOªöd«=‰ïž²ÁÏcLØáÕož—ÁC‡cL¾E<x‰#uxP‘Ttk$GkÅa …ªä4F8 ˜dŒ„p¯àÁ žLð¬àů n¢.*êhŒ„pE]4QuÑD]TÔEuQQMÔ%E]2õº¤¨K&ê `Ú|ÄH?|]‡'Ï&xQðj‚7‡‰Â!`êpo‚+ꊉºsÀÔG™sŒôÅáM-9.8]˜d1’€&xRðl‚+ꚉ:0É à4`’1&xRðl‚¯&xS¡‰:¯„Ù0 ÷‚‘p/ ÷‚‘p/ ÷‚‘ ‚‘ÜDݵ`$Ü F½`$Ü F½`$ˆpàM˜¨KŠºd¢.)겉º¬¨Ë&겢~‡G„e‰†…•¸…i4$]Iù©_ÿÓçQ%YW’¿ùâϱ’¢áEÄEþ§/£w¬¢’dzï|b·‡þ§ˆe¬`ƒƒâû~[=‰Ý|JÇØÍ¿'ç0*{|/byÉbkÉŽqÆ»bTöz/„CœÞšDe¡‘Ú¡ø&Deþÿ`£2Æ<†h+ó|Qæ1øZ™Çà‹1O‚¯ó|Qæ1øZ™Çà‹1Á×Ê<_ŒùKãùãPwœÚípè\k¶i‚&ZÓ 2¬0çj6x†„ÚeM‹‹äå!ðü*+–IÒBà°f²f%@äøUB€¶æùœz ð©‰köY艽|èir d#O‚:H¦ÔA6ðF$Sê x£®z u5êj´PW“ ®f u0ûH ÏÄù‘a½ÃÏ ×…gâ<éó0ë‚ÈÄqÕ~¶,ŸD&΋øy,ç‹¿|ÆÏû ™8_âå+~ÞÉÄùâ/6—8é¿jJÂøÕ'%L›I*NΔŠ'§JEŠ„3¥"Š™R‘âáL©HqpªT¤8A¸ÌSq‚ð$˜§âáE0OŠ›`žŠ€S¥"Ѓ`ÄI;ŽÔÅUƒ@¢pH u+¦vƒRÙìÄÉëÂa·ÏúòTœ œ))NΔŠ'§JEŠ„3¥"Š™R‘âáUPGÅ À©R‘âá^PGŠ£ ŽŠ„gA'§JEŠ'JEŠ„3¥"Å ¥"Å '®=©8!ðµ''Þ¸öqrô6ÛÄ8Š“Gôsq²Á!N¾«K‡qxyœ¬a¯ã;Y{õG 3_¶ö_5ÈòžDy@ÛŽò`m;ÊÖv²>üi;[ƶði;®³¶§E´£ü‚½ŽDùA RWÙá8Hµ¨)R;R™ROcÊ®ÂtZD8 ªfòò°qõõŽÜ3êЯÔLjG¬¶m<uèP·ÚчÒÚ3ÿp°ï‚~8ðˆ/_×å¤G,è~ëÝwzŸ*s‚czÆÛ Ñ#>Ÿ ’‚z¸†qÜ48u4Ä«áPïN‚:áP?g•œàèPŸq~ùJ€ÇELÎÂãL™OA´Â5ôIN†k9‰pí €vx}ðé3e"ãÌðêÁW¹…Á“Š· ‹¤í8àm'K@¶cµC¶SSÆ ŽÞv²D¶´N€èSµ´ÒÀRþòÕ‰¶ã@JáAÔ©²´×a\ÅöÉGH ^ùŒÃÎ18ŒÃNôöSßþÚá 9%ð¬à9E8ŒÃå0{=WÃ8ì?ç¥ ýæ;ŽÃK8‡“ZùuŽÍ¢Æá”N¦³˜O]£²ÏéVdBÔ!u8Üæ¥ˆ¶V„“Á¤‰–´d×®û3áá…LGXJ™6ý0óžKÁÚɼç{ŸH±Wé6‰ƒi#pÐà>¨¡Ì'‡EK«ŸÕ£AâCÙûÀK/c{ùÒÄË×ÅòòÔ%>ñ—‡!Ç«ÝOáçS¬¶9 ÐFìå1ôKböíA_>«ƒC CqxæÔ‘ab_ñwjwFïóãa"üz+~—ˆp8&âûãmÈ0qpVAO‹Ä'‘I¦ÃÄã;$„ã0!vg<x„Wk޲\\ÐáZ(lüðߟc4OpürßI…kŽ 9¯–ݰí$\û¤Ç2 ˜äîŒù´X˜O*ÊOÞÂ< ×eÂÑ]®¥Å®õý¢SUŠ…7Lv¾ÔçÀÏ»cw8¬å'.£ô65¼M¼âm*¯y›xÏÛÄ{Þ&Di¢4D„3Ÿ$ÝÂÕz6uC'+þ®H7„pEuCg>Iº!„3Ÿ¤4-~w¢iß_|â¬â=gí¬â‚{ÕYE9·TÄZ¾«N]Ñ´¯‰l?†÷ùÕƒìÞppiõ ¿Tª¹-=É¥{.-ÝsiéžKK÷\ZºàÒ©í2…¹KK÷\ZºçÒÒ=—–î¹´tÏ¥%íÒœÒ_ á]Zú½K;†ééžKKÒ¥55]^ü¢|K|Æù•±°ó=?~>d‡³²ôuÎ"ßò¯}]:öº|Ï×å{¾.ßóuùž¯ËÚ×Å(|ÝžK¹Ã¯ùº¬}]ôs_—ïùº|Ï×å{¾._ðu1œøºÏFœ±¯Ë¿öu™ìU_—í뎧Æw8î9Éõ—§êÏŸ`!ðÓYÆŸ_=ÈáKñ¸”S¤G õW.xăW(÷x®ëaR½*¯ðj¢0kV»\{]FN¥j³v<‰éÇ̰ܸÚסÎs=±8Yì:ŒÖr+ÙÃ4ýüû­dßñö¶{}SoæÚFkÒë «3ÈHxršì›1úf›öÍFZpÖ‹šJ p/†Ûq^€ÜдéXì´ £Ó_,]»É®}˜†ôË­®í¿á)g<Â/um¿ ü¦Zœð áMôÔr‡ÎÕá‘$ùi×Þáªk³N‹pÒƒ½š ÛÍz‡á†]»Ãeߤ' Ü Ëvm¿˜º¶›uí8ìÚ=%ûК>Zªîðknw‡_r»Þé¾¹fUWËËSï**À©w•ᬠJ‡Šð¦úæ2ê›{š$é‚ó^çïõ:¯{]’9„à=¢¿çýÀ#f¥NŸôu÷j°–——½nÜm¼œ —G d¿Øë¬ץa¯ º×eᬞ pÚ¹d8í\¢?eðDànÞm½nîu›p¯Û„{ÝFæÕ/í´§=XvZ„ÑvÚi^EÛi§8íÁ²Óœöày§Í÷:í¶öTXßœ;Ô|Ï¡æ{5ßs¨ùžCÍ÷j¾çPó=‡šï9Ôlr¨jÉòk; gÜ7ˇúî¼q¢)|{±ö†h/ºö¾Ï×ËÏïPª˜§r®&[p_™Ož°—?0ãàPåŠç³ ª‹ñjB8ÙÊìâždžì2ßÀÉŠ§{Ìr@|Ñ“lN®xbÛÙŠ§Ü–Fà|Ÿßø]ÀÉ¥Ux…ç'A8¹ô!Ò%'ÙôŠgS+žžÁͧyQ8ÄEÛYbxN×Bàr=DÂÚÛ‹u¸\Œ|]`7÷u#siÇ/ðqøÙ›3ÀÉ8ìÔaw18þXF±oCõúøãEL`½ÞAxQ+©8.¤v² Àoñ<& x½’š‹8þxapB]ò`_Iõr!¶kl‚ò}„IØm¢:ŠLˑډ„Y§QÈjH@x}—3,™VÞÆ%w¡ò[7Yú6sã9ß&çAg×$€_´¸vÏâÚ=‹Óëé¤y§m÷:m»×iåy™[2ظӶ{¶Ýê´A®üö»¼G6\8‚.îazXnq~mŒ Ë­1.,·,.,·,.,¿¶¸çk!œddø<ãvø¥1.,·Æ¸~iŒÛá—ÜEXn¹‹°è1.•©»Øá—ÜE‹æÇÓTƒ›y…áPÜo‡²Ÿ^ÁÝó îžWp÷¼‚»çÜ=¯àîy…Q€Ÿ{wÏ+¸{^ÁÝó îžWp÷¼‚»çÜ=¯àL^A&5|YNû2©á»|&2ˆ½ïÇ2u81þuþk4¥ü¯Íú˜•§:9•‘±ï7:#c›ûl‡B­ÆâìÛ‚µy½Gï-̳^óA¢…yj½j^ ™gùÇót’0J'i‘ž„Ìëý0OæÕóhX‡ôå /9vÎpÚZ˜£ã‚ ñåçRl:€»Ìê’ŠÃh­/9^²J°Û§vƒ¾ä8¬f=ì\ƒœuÉñ²ïB ƒKŽ“SH¾ œŒªâ’ãÃMW! +‹‘0“ÚqXÌQŒ„k'³×N%Ü8¬VK¬ONɸö  7 -ŽLn QÚe(»Œ÷ì²g8Dó„PôkojÀ[F†5HŒYÄÝåG§µY–\Ø2p@8ŽªÑ ³>Q–ãÔÝ3‡sƒLËéçãáò _žªòt,džŒª«†Ïæ™ öÂÞ ólT­s<8pÆ©Õ*Â|Rg`ãjÕaÁg‡Cï(j¹©8úލ֋žŽ Ã“tÙpxyH÷ÜEºà.jÁÚÕ&æ."ÀƒÊœ`*À#\àÍÒì+³L˜»7«€còg‡G%1qÕÛ5÷‚yæ.ù_Eͤö"˜g‹ÛÈ|TÙBÌ] ó,9—ÙJ™Oê¸Z<Ìå°¼¼Ãíî"8º yBA pt*y?‰9déTª%6È÷œJþ½S9ëò=§’ï9•|Ï©äß;•CÎJȧ’æN%ÿÞ©ø™¿èTò=§’ï9•¬§âÖØÀÔm˜S‰s§’íTÒáHÝnv*Çã݃<öįœJ% NåpSoY|¦cçÂ4‹ÏA·ùbðS'(O-&½«d§G¢!Ëó­Â=þ*S§òRJø+ÇʃÁÉíV•:•§Y{„ã9Ÿë¥1° ‡™¼"ç+|¡N%|ÇýrëîÉ÷áNåhXE6¯iîmäÃE²—’ß ÎáULÁ²K·°×át‡ÛÒ^Ÿáž|>Ýá ÃÛ¥špêü1.Ò¨[Z~¬.èƒG’:Éz"þëxrH¨zvÔ†¦ix®˜àhqŸ“‚ÈüÊaНJgµž–CæW"“Å£*ОϾãP8 ³_4·ÃÙ„ƒš\%ðªÚn¢..jzÓ‘O‚p’4¯®”Z<’ïó;ö+Â3ù>J9„Wò}„4òÈ|R·q ¯”Úኺ4œÒ¯rnv=Ö ¤Ñ¸¨ê¹ÙCâ’ζËÎàö›;/y…&½‚ouîÚ=¯Ðîy…vÁ+zÇà^ðÅϽB»çÚï½Âó“ üšWh÷¼B»çšö Kœ/…¶{^¡Ýó ò$š—Án¿Š:1¶¹YÇå÷fýµ+Ô¿fÖ~ͬwø%³Þá—Ìz‡_2ë~ɬ;üšYÇå–YïðKf—[f—[f—[f½Ã/™uÔ …Oƒí¿Ò …Ñ0ZG75ë:˜pˆN›uPû„C‡³´Ã" vcqP(ï“;|ŸABá’Ôü$“;ÕxæÑ1Ã! }Qó“àÄzƒJ($̳„Be—„yf—ê^WÂ<³K% ó$A"‰ƼÝ.)óÄ.–¡Sú,g²Ç~qÛƒ˜ßëA}ŒìRg†\źÁž\ýÔ.ÉpëN:Wv¹Ï2G¯ír=Bï:<|^¯íÒGa—¬ö&Fë±]êŒÀ•y¶™×v-̳E„*ì’´Ç"q‰1Oìr]p–ÚÙIA~n—:#ð° åINý~Ü¡]†™]R‹85?iq§æ'-áÌü¤Å!œ™Ÿ´8„WUûPŒ .Ö[œ´8„{Á<µ8„GÁ<µ8„Ñvjqo‚yjq§æ'-áA0O6Â,N‚õå ‡®lpmqm8F­P“a$Œ÷F¨O—æg¼xrý§¤kBxUÎjh°ñBà™*¯lœ,9²Û~1ðŒWO„3+Oì´öôGà){lÿUÒ§a¥;¦™Y»edÖò°-alÖéžY§{óIéžY§_›õù¤¤Çao‡Ó¯ÍúõI~ͬÓ³>Ì'¥{fî™uúõ|Òa<Ý3ë¤ãÖ}(æ{qëôˆ4çFfµYòEÙ|’83ëöP9÷bmç}Ÿc̃¸u~¶pÜ%¶È{É˫Ђì~ñN”w‰mÌGoažYo{¨œ{„gµ*[,Ì3=ßÉÖáI9nóÀ.ƒ°KÂü8n-÷æyË`ýENÔ&€_Û"Ë…ñ’ÕÕJÍ×+ë/á¿‘Áj²’­¿x„›·¼·­Ç¢ÇËõ¬ÑáxYóIó¦Qg†}[Ö_Ê=»,ì2aíãy^}¯Òš’á‡áiOÉðdõôÁ²ÈŸè„ð¨†Ûf©Ý/rQwíp}oS·“k—ïô—‡ÚÝOË­Ú“^R6ÕîîÕ.Ò°ÕîïÕî•?¶ÕîÕ”̲ÕïÕ®çTLµ§{µë»µMµç{µË¶Ú˽ÚõÕ¦Úë½ÚuΤ©ö{¾.ÉcÜLµç{¾.Ë[íÒ×=û÷ •èöÍ×µfe^åv¸ŸÖGµ÷e¡e¹R{˜Ö>Ú‘‘ûvøÅ]©=NkÏ£ÚûLÞâ¯Ôž¦µ—Qí}Âa WjÏÓÚ‡}¾‡UK¼R{™Ö>RV¹‹Ç%]©½Îj/£ÙÑÜeá’¯ÔÞ¦µ&qrÏG\Ê…ÚË2­Ýj/=mj©WjŸúº2òu¥'‡,íJíS_WF¾®t_ç®øº¢uݺÈ“yOw†ÓÛÅ -ƒ³kýÜt”éð¢”UåunÉã¸Õ©Ä{ V- E=ɶ24ì}%U©¿ZG ECéCIÅE6†Ë+C£ÑºÃ‹R¨µJ&†ò=†ò`.ÍÀÜÜ)Š/JE·eÄP61Tî1Tô4¾…¡Áœ×ÊÐHõtxQJ¿¹CÅÄP½ÇܽfchpúÊÐH™uxUÑHó#†ª‰¡v¡Á¡ß†FûIÜT=vxU³Cmt¶Di†êr‹¡*w5˜ªƒ£‚?ð¡Âíðªf°Z0TCîCƒq Cƒ,ç•¡‘ ïðªfÙZ1äL ù{ y5'cc¨'Œ*±0Œ:¼ª™À–G yC÷4u jÞÈÆÐà,À•¡‘¦îðª4uiêjÒÔõž¦®£› .KtÓˆ«Ã«ÒÔm¤©ë~a04Hvª*‡q¿ý¬Ê 78ÉÅ!ðŒ× |V¸N×çÀÝIŽu¸û)Eü4üüUž1D6š˜§  nâ\ÕŽœ›«ÚhËÈhÚìðqç²tÔÓÜ\–& \†6ÃØÄySçºrØÓæº2[à26.˜š8†Ãž6†Å—ÁÅ0:pÑÔĹ²ö´yBµÀetà~ž*ñÅ_Þ¹|!:ØáC†æÊnØQçÍ—Ñû¹Áø‹¿¼såBt°Ã‡ ͕ݰŸÏ•ÝbËèÀýÜiýÅ_Þ¹z!:ØáC†æ³¥C3™+;gËèÀ¹8`¨K3×.D;|ÈÐ|¶th&Se7Œ:\FÎ¥Cûlér!:p&aè§Âpø©0F.£ƒ¡¼÷&aè§Âp(ïý\z üš¼÷»0ýj. ‡_q. ƒ~MÞ{oj¢<Ë´¿ãÈ[yy çÏ£H½ÃuFÙðåç’o؇æ’/Yàׄ»¦ï3—|Ã>4—|Ù¿&Ü}25q®ÙFÂÝÏ5[±À¯ wŸMMœ‹®aO›/QW \ ÷‘òöÅÔĹjö´ùs³ÀµòIg_MMœËžaO›ËžÅ×Òy¤}}³41Ì'´F=-Ìu‹³Àµö‰×°˜š8ŸÐõ´0Õ-CñÚáZ¼FËË›8Õ-Cõ¦ºe¨>;üšú &Ý䆞íÎEv$­?Ùìñ^´À‰ìñ~*{:Ü%µ@qÞîâüïµ]ž†mk{WMIµ}´ôÐá.ù+mO÷ÚÞ7¶‡Km—×ö¶—QÛ»JáJÛó½¶® ·´}pçµ÷RAÜ¥x¥íz3ºŸð×á¿9àï;„«=Š~°ßþ‡]lÇ& ó)ëAwÙ+én±ÝN—ÊyòâP{xà®Êíµ bä?Ô>ØH×âyU{ÀÅ |¨== p—ƒª½ àb¼<ÔÎ7ÀþûÿüçSÆóú+œ~W[âæB7ÎOˆrkòØ©]~aðzn½[mûÜüÃÈÇ—_àAèiÕ_‘¡i oN¢m?Û¶ë·7§óË{τ໑ÑõÃÈð3wÞ,ÔÿI+ÜŸ{„O‰ÀÑì>WÍûsð‘ÕÇÖ•µv°›Ààп·N[Lðu­”Ïéç H·08Ìá=mæ›jÃÊÚ*ªÆ~¦®Â< Æmýp0#ЃŸ©km…Ÿ©{9„Ÿ½b«+ül±-“Ú!ŒhkÛÏJ¢9ÏàgêÚzX/Ì‹–Æàê®xP¦%2ø™º²^=§2‹ƒ)—ºžÌõ:ˆõ·¶C„ÌáŠ:Í8<þü:eaéuîéEXÛS>+¸…]|-áõ§Ì‹þƒ:W3…ÿÔ7~¯ý§ôðKåpÿ³öÔáÁâ¨áp/·_gZ¹~ öžñWñÁŽ3rý¶#¼â¯òƒdó|PÒòù«JUßóAC89¿’Ÿ_ñü;R‡§›~»ÏqzHCê R÷¹7« u©+HÝ禔‚Ô9¤®"uŸ»ü*RçºJ¨óTV?ÿŽÔU¤îtU¤Î#u©û\2S‘:ÔU¤î=fãAlÏH]CêÞc6žÁõ|€Ô5BÝûD’†Ô¤®!uŸ«YRº†Ô½ÇlØI¶ÏÀ=Ôì0Øç߉(=ÚúüÕ'Z>Ÿ§ú|<ïÖÚ Ô9 .~¨s@]$Ô9¤.=0CåýwB„ߟ{&œê¡ÎuéCê¡ÎuéCê¡ÎuŸ[úλ_u©ûÔîºL¨ó@]þPçºL¨ó@]þPçºL¨ó@]^_¨Ë„ºÔ}.œ='£¿êRW$áõwB]êÊ:½ÔB]êJd˼¯„ºÔ•ÌÖ_u¨+•-l½ê"RWÙŠÊëÔÕu¨«„ºÔÕu¨«„ºÔÕu¨«„ºÔ}VjÎ+ ¯„º„Ô56Qýú;¡.uŸÛŒ\ê¡.uíC]ê¡.uíC]ê¡.u­Ò™ÌçBÝyÆÑm·±æ€qG x„É'N ðŒAm}Å ^1h –¯8áeÁ áAö…¼51{ ØÊß;N ðÈ‚†¿ÿó¿þøŸ?þú—ÿ]ð§@DyLP-1.10.4/Data/Netlib/agg2.mps.gz0000644000175200017520000005642210430174061015126 0ustar coincoin‹éJ®9agg2.mps¥½Û’$»ŽøÞfýþæ$^zŽiR&uI]ÒÌÿÿȸgf8¹H,’YµŸ*v‚$.€ÿþÿñÏãùïÿõ¿úý—ÿùÿçýë¿ÿý8þíÿÏyºÓ5Ÿ<| ðIà“§Ÿ|Êð©´ŸÜ Ÿ`.æâ`.æâ`.æâ`.æâatãyøM¿`žf`fæðW`.sA`fã Œ'0kÑFvEa. sQ˜‹Â\æ¢0…¹(ÌEa. s‰0—s‰0—s‰(Ÿîô å¤Üƒ”{rRîAÊ=H¹)÷ å¤Üƒ”{rRîAÊ=H¹)÷ åí'˜‹‡¹x˜‹‡¹x˜‹‡¹x˜‹‡¹x˜‹‡¹x˜K€¹˜K€¹˜K€¹˜K€¹˜K€¹˜‹À\æ"0¹ÌE`.s˜‹À\æ¢0…¹(ÌEa. sQ˜‹Â\æ¢0…¹D˜K„¹D˜K„¹D˜KD=rgm  ´1€6ÐÆÚ@hcm  ´1€6ÐÆÚ@hcm  ´1€6ÐÆÚ@hcm  ´1€6ÐÆÚ@hcm  ´1€6ÐÆÚ@hcm  ´1€6ÐÆÚ@hcm  ´1€6ÐÆÚ@hcm  ´1€6ÐÆÚ@hcmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmTÐFmŒ ´1‚6FÐÆÚA#hcmŒ ´1‚6FÐÆÚA#hcmŒ ´1‚6FÐÆÚA#hcmŒ ´1‚6FÐÆÚA#hcmŒ ´1‚6FÐÆÚA#hcmŒ ´1‚6FÐÆÚA#hcmŒ ´1‚6FÐÆÚA#hcmŒ ´1‚6FÐÆÚA#hcmüþôû3SùŽ"f*›O>)|Jð)çÒ~r'|‚ñŒç`¼;Ù|‚Ñïld3ž«±ï÷¬¡~ø¤ð)§Ÿ2|*í'wÂ'˜‹ƒ¹8˜‹ƒ¹8˜‹Ã¹¸M|¯O`}ëXŸÀúÖ'°>õ ¬O`}ëXŸÀúÖ'°>õ)¬Oa} ëSXŸÂúÖ§°>…õ)¬Oa} ëSXŸÂúÖ§°>…õEX_„õEX_„õEX_„õEX_„õEX_„õEX_„õEX_„õEXßýéŸÇññµ>Ÿ<| ðIà“§ú›~ÓÃozøM¿éá7=üf€ß ð›~3ÀoøÍ¿)ð›¿)ð›¿)𛿩𛠿©ð› ¿©ð› ¿á7#üf„ߌð›~÷=Áo&øÍ¿™à7üf‚ßÌð›~3ÃoføÍ ¿™á7 üfß,ð›~³Ào–ö7ÝÙþæcãê§Ÿ>)|ºóßã?þËûç¿ýçÇÿþ×ù·ÿøï¿ÿÇ¿ß׉×ÿß·BÕëŠ÷ÅãëR_ÉGµ€GóŸ{Yäw6¹’_ ï+¹_“߇@3zJzÔ›CøCèÉß«ûþÒ¯à^g G½dj§%®' œãQuîý»¯³/„\ù{ô_îõtkàü׌ßgû„u¡æ¹r ÍÆÉ¹yÈzŒ;úµ¥=¹=ǃñ´'ï7Η—ºRYÎçïÛkò-ëb({BLÎLJ}¿öíòÅS²Èïœ-rH&z§DqãzòCùua{ S:¾–hìûÅ:“\aŽ a"2ÑŒw‚mκ·YC!¤ÃÜ5X_ñL{¬Ssíš2™¼×ž'ÏÑ…Oò·y®«*_ßÖèÚJ‡Ä*6ð‡’-ò;g N¶ÔiŠ=ùÆÑíA‚K¼×^$çž|Ø}ùè*y|ÈË™S±F¿Ó&uôp&©ûÓüáôÉ›äŠä^“ó_ée _©5’×ÑýÂ^¾á ÍJÔž|0LêK¼¾Ž§Ÿ¦Ð)½3‹G^4“wt4ä'ûSËZ±<ØË°a/C*Ž 39q>úAÕN>‡µ§âg‡¾e3| ݾ“ÁҵÅò`n•­]Ö“o¹Ï¤÷Xêe+>XÖ:†ë¨ìÉ-cŸÂÚÕÀÑ›ý¹™ßZ™Û–C_kïÉmÃt¶h\¢˜ .‡LéfU‘óÓµÒa9½l'kÿÞÞ áR“ÁY½eðn'Ú÷䃽ô^s:Æi}þp°F§¯eÊm/ÏÜ“[¾‚Æ:zKîŠÑ;—`ïDÔ-õ‹õv£±X^ËaÒËöä¶U­Kì,!!¯6=øPäøÑä‘%Ń9ùhÓíý:ÑòðØ OÑoÚš[Ÿ ¹·Éc%¿és$äæ©í'‡~hÄ„_tuôƘ¨kÔG–¹ ­¹½¬­/ÃÚ?ž}ÉÖ5vü<“ ©“ÆÕÜщj‡ægGƵßüÕT7.´,I®'7LN)ió¡âÄ{ &çÏÔœ á±Ö~þ€#!§W½¿ Ò¤%¾É?ž½7îrÂýanÉu&’ÑuÂ!b/c´Mޤb‘ã.~o¯½öžüãù—±Dܸa¤çЛÇîÚç‡Jl™r‹ a]Àm¨¢-ѶMNõüÌ^{òç_߬sgÒlm\ºìA¶F¿Q"í“7×~¦¨dòpèÇF­›?|cä¬ÉWg,§²'6ºµ½±^¶×©\çPÞ$Ö\þÃ` Å5§vó»— ¦ž|ä®ãõáPǺ^{c¿½7‡î›_#8þd}&koÉ¥™<üÁדKš Ó¹¢ïCÿÄt®Øä£iXs^ÀbU»SÊi­Ö²aìOÈ6^ rY;á—½ŒÁdä$%:7ú—ÿ•¢k¼4=0“ÓÙa m†{å+H*–ɉ^SèÉ©ÅZ<Ù°—g—"wŒüÇn–ؾB8/Þ{sß]aí¶U­“oƒ:iÒQ ù©èÏÜYs(L8$ –pÜ^±æx3â`¦ŒŒwÂSõ¾'ïŒ}•Í7²yÎ:ꩼaÒ“ýÑñ[÷ýXÌæèΗ`‘›Ï2·Ÿ$3‹u0/Àœ<¤4£Ëlj»ôÈF§Žh“9½jOÞ¹ׯ…+¶†oEk*.Äf{[;,MæÉ;«º¶—-9&}CIk{)4•Î|v8êågõäÔWX<}NmL=ºœOgž›wм'Ï·kéßyŸ0±—8z½¼³B€^_(2 ÿ kÇS;L²NH˜µnˆËK4×É÷§w!U›ph¼è†ü.ð€¼2Ø<7åKeíµ÷äcî°Äv{›ß A\Onœ®é¹ì&ß/Q,ºOý½ý‘ ºGí — ·p¹&{§Íézv9¤p˜£{{r{*öáì³·FdzãòVKì¯ÉKO>$>Ã}B™Û{›2z³D¹œíòX—t°µÏD0Zgð·iñScÇàhî› `¥ÕÅg{Ñf„¤Áœ<^Ê.Áiòg8ù6õ„¤]ËéÈäkÚU¾«ò¿¾áBÏá·Öj·?ðÛÈØžo÷Ú{ò1 z ßíñØf2ptÏŽð°5ùuÄÒËygM¾;©]cf"X©VO•½9šyÈ‚¬íD\¹ñÖ°ÄN:³¤ë38άԞp+Ùü™Óò_<%äîÊνŸcYSE`¾Êæˆ!©ûn$ª®ßíÉmigÙŒÑWÖ/N8o¦GCv~oßÅb]gÞÛ÷™ã08$á»ýD%Wf<f­{òáÐïNÄëÔÚŸ“[»ò›-¹Ëj&(o›C&oÛô6ö9|éÉ7ö'®}˜ch1$qaׯÄçm ,rLc~[Õ…YŒ —ÀàPz¨¤÷qîN<7/¯ç.̶œgéÉ÷Ö¢/£’K†¬h>ßѼ³È£à…Þ[´e²ï8y#Í@ÖÁµß“ÅéÁ?Í=}»v` çp‰ÂVr°É÷äÃ.¶6#b²¦ß^ãäÊþŸKÇs²É[ÖÚxðEm2émrZÙ¼ÃaÉ>› >Û`¦YûÝ`£M(9=FÎÅ@nÃ0¾²ãÚÏ6IÏÑ#4Ótwh§å5z̶Xw3%”s˜üÐÞÀ$Y¹„”_’=²aOyz±.µÏôÇ„a89Ëa®½gp\ W âµíÉß ÿz —Ëxô¬»CÍb4'ïQœ3áQ×ál’G¥NWœ²iS¸8z˺ð Ùn»’\A!(O® ÎM0ƒÇXJß>—NN×üD#Ê­j 9kô¨ˆe{#ÀÞ |÷hòw½SvŠ{_ˆëäÜÄÉ{6yy.Â:Iîdí¼Îæî ×}uòa2ùPûœç¼=yßWCÞîûxõ¨=ƒZüXòdtظsòöþ˜ˆÜWÖLÈÍ›‡73Ù5z$§B î kdSJ)(bLåó[Gm‰דŒˆ±Ñ ™,QÆ•| ÁžfTrAFTé‰tÈ(›½tè|ôùþ8øÝKh\äQ;/:ôäÆutå5¬†¼ÛÞÓÛ`óW›?ÃÉSÑ®û.Ù…Ò“ ‚ò×+ÝÎvm… EÅŠµô³©ÁÊ.Úä>¸žüÝÅ¡½A‘Fæ½IŽ1V¬a nÜIGWp“Íùp:²öÊ:u_ kËÓC^À˜ËæØ[XBnfgjÙ³„{“W6ùÎÆõäVø¹ï KˆäÞ¾VܲöÎW8˜…ò•5hÝàΔ…-²MdOn¼ƒÙ÷žüÝ'Ïãci¤pòa)´ÝI[ÀvæÖ¾Z¤Ì¼øÖÌÚ&²'ÿS[ÔŸ±7xÇÈyƒCÂŒý±»v#3·X'ld"Új®½ZB -À˜” ;|FjHÛÑ}—z”ƒYX‹|4ö{û®ÌÜÌÂöä c_X„×¼3ö†Ô"ÍâÚܶ£GÃ^n×ÊW褣õÊÂÜέõ;/òûIÿŽö2òÉ¿ÉÇ É…ì¸ÕUÙ|“¿›bÔüÌeï¾q‡-òNµ† Ù„Ññx,Eëäe>yã‚ë,ÙÆ(„ò·£w—p±”:zØ`Ç*Ž ¢z§UŒ©| Òsèå¾ûî¹½‹ö…D¿D1[È»8kÅ`™—±q§˜kÇàë.:®ko2¢"1šä˜ÒÙÌàCOþî(i&¦1ÊiKÒ;ò¶WíûÀä“EŽ×U×öŠÈ9Õatª~±»ï5&GX×@PR¨×ü®éq¦þ YŸCÎàî¨=ØùfŽ®ÄLQ·°‹ÆùZ£{¿Îv2ùÎJµo?Z2ºNæ8;D d³ts”Ú´±õå6Îà‰¨Ý0Œ£vo„Y©ƒÙ5²vf'jßnä:”´PrÊ!vˆÖ–ÆYyX×®é™q&À؇³I®ý|0Ó@&ÏÌŒû»cŒµÜø<è+‡º³½'·OÁõîöÇ>Û{òw'VÓ€ :qÐ^âÝÚ Ò˜ãKVŽÚhYmN‘fÅCp¾•at#»”Bª£‡ùè½ø:,+¹nMž$üPùS…Ø9ÞUäËfõfñB?¿[ÓUû“süö¯N®c7ºiýî6öÙ~6ŸbélúF÷–H·q1xoãÂx@})ОÔs\rë|ŒÂ&/;Ecg-®w¤%Ê—ÊÀ·Œú›G±zßnÎÏlï÷78$ãÙþ0x”޶»Ä›|ŽO>V Š Y{4Ãæ¼9y4ž_gí†Z“JáÓ›Fùlºý´äh¿+ø÷GGËr›‹u^ctdòº›;¯Ò“ÛÒQGo»pe'æäÑf\ƒoÅÉ F׊Öï¨5L·SI÷™I—Ò“ v)[Kô)uK4Ìâ—e"…S§'£G¨ö¶Qvµ˜ {æ–iF‹EÝ8'§&Ç6ãÖä»ÜIzòg‡~K~ÖÚÊØƺÑÜ.ìeà®Æ³ïÎSkf‡þa¦ŠZs åÌóxbrì¾_V9ïq~fð6Ä&0«z0'Â\ûix*‹5ÐTkÓÂÕæÓ%Α1™¶ë–ðC‡D&ú‰¯p» Ç£Ÿ†½40$­± co›q ŸY¬…É `±h¦¶³Ãdta§3·’¨£µy ¾B —Dr—,쉙ÆsX"±19Ýä]Ê&ùi<Ûòήk¤'·òÚ܆¿s5jkŒ8š†£v±'û# ‹õûÁÎÈ?È”FîÓY£›ï÷ƒ³ZMÞt5ÞýËÑ 0×>˜Åµµ–µ¯'KÖ6cµö0áüF÷F|¹ýpt'ö²6%‰¦¹]ø ²ðžŠÌ<ø–0Ãt0CÚ“S{i[žœ2ض„=ù° oÛbCÈeH,Ì­¬ƒã•h«1ú§][[,™™œ½µ×Ñ;›~0KhŽn™ÛóX™Kp0/À"=øVdVµj/³—B;7>·º+Gf׿VÖzØ8 ŽeÇÕœˆ‡\Áàvì²µ+k£u[–µf´ä‰X¬1MLÈ©ÅòóÑ©«a›ñžœfÂm3NF7#û™bé"¡ºÁù™¹]<ý»T¶ægÆzm­qòTh÷X÷ãÈ^gƾ539‹d². žiíÉm!8X’º'·SÎëøR7RÙ_A¾ÂÆ™¤ WcÌóöävBuÎÕTöÄ”éÂZ/2áºájŒ)rºƒgöran•ôüÌ»£ÛfqÎÕE.ÚÎ2“µ+»AììðC^‰vr•É©‰É‰×¹ù ¦IBG÷;»DÉ#›¼Î'?‹nÓ$º{Ñ-ó"$FOeaìks–Īib/#o½øŽ ÊDæ#ÄÖÁº^+“à¸öv);Ý£nyjO…¸‘ C~Bnz*+™_ßÝFÝê+k¨û#“ý6•uxÙàA:ÐWˆ{±u˜È¦L¶wÝÆu"}%›Ê‚Øu6¸6)Û}#»µk}Mo°—þc29î%“Yž'¿‘.Ô—*J]¬ÿ תvPדOmÑ$ô‹‹Às‘¨ÄŒëe‰ãal Æ­µ5Láõ¦=c,Sv°h¯'ß>ç;ûžzoícÐ}ùi ®ÂµÛùãI8fba¤ÒâºvýIgaëÞùmßmÓk’[à*ËD¦@È™‘þâ“6lÑÄ&0ãcDj™Èâ¬É›fÜv̵3tÔé>äyyaêΉ5È‹KÃ÷SÆÄ”Õf2™ÜöB¯ 2úohH4z¾ìÆ3/-!´‚š¬ÜöB{-BNƒù¼éi¨2_;3&y‘.n3Éà~Fއ±£ñàä­ã|ÉùÙ]óf†ûh/ÿÝe1N~¦‚¯=Ñ6È:&¬p²i±û³ŠH'—Å8ùøÓp:/‚ù…¯Pû±dšCÜ·æ¿‹ óâÆsØ4öO/²ï‹2/ÒÏö–r0xxú©É™EŽ‹¸5¯ÓÏyxÖ–3Ù º78´qßÊ\²Œž¦6£€½/ ao{ùãc·l˜ÛÉg¡O]X»e§x‡_—…«±¨ý©mW²·.Žs$vÁÃÞ²¸í]X¬²L?Oe¾°—žôóRlf÷­‹¨¹l™Û²¨@±-!!kíeY¼L>™)Ø¥pÍ*¾BùqÝÓ5¹2»v0;ܓϣ[~][þÎà•…¹]ž¬åŒ6FO®kËVñNù»è¶€ÁÃSÛöäÓC_–Ÿ¢£08. c?¿®õ'5·âžÛxlt|Ö® oòßOq¹½vxº§ž 9yê®k¾Vó oò¯´DûxÖm®³„ÑZ{Ä0òÌÁðî¿h&£û:xúz-î÷S¯l)V·všë„÷rëƒDorC:DKÝOF“ûÀðµ¨PŠôäÆèOìæ¸Áó§Žúj—`ï{óÊyK1ø)ǰ%¿^½D“¼íwNeòÒw7y|ð6V©cÍÉw¶(žÉöPCíáÕmÜL¸d"\˜&¶¶WL_Ûp0±1É»FÔõáÓŽC^Š!‚Ÿ»X¥Cpß­Ñ;à Û0ðò4+=»ž}!›££]û’ŽÓgíM#7Mg"ÇyN=ùüPA[;k öƽ}D BFßir†Î˜è³½ÐÀO=¹@ ®'76.VPŠMó„^·vhoœ,qØ8Ég‰=¹á©ßœ\ÕÕðmgò–­µvö-À—G±¶—nÃÍêÒøRýãní/·6x8:EÅ1'Ïíy*q2º íú>PÆÞ-…µv WÃH‘·ÆÄÙyxptºüñe¤zrÛÛ›¿ptpí~ðlïp~¶½bw·o]AfìÍcߥ²³F‹üO·pt6l_"ïŽ]ÖÙ¾ÜÚÍr 7Ëö€€œÚ˵¹uvÏ$µ3á¹q1;Æœ¼åj,·ðÒ66ξ@‰®Ì…!äÌr OÅözrÛ¦ïYëÈÜ!¹W|!£wþŒ}ºý‰Ì›²ï .ĽkÅÙ8:ƒÿõc¬¦ä·D͑ԾéÁår÷­²¼Dð¬×Ý¥ïÛføIbài æ<¿™”î©ÇÔ“µ úôï»V…ÆÄ‘Ñ-ø¿ó“S¡e>t£¯ä2!&ù™X÷犖ðO.kƒñ”‡"÷:rrÎȱcÆ-³Þ©«ûžJÌ&ëºí=×kÝèMgË<~Ë~~Æ×GPº%ž¹'§º…˜£Ó[€oÉ„Cbòñ¬ˆÜÙKOF·J¬—¢-}ëf{7dSŸÉƒÅbšÑ¼¥ñ&—8Ÿƒ["ìüÓl.Ú2Ù÷ÕJ·qgÌdòÚ°.ŠÔÑu²qºÅ`ëÊß¿J«?:áP|VÒ¦Êan\ëŒ=ÝÏÈ¡?´:¹ß³Kæè¹!oó =‡ê‹~Õî]ýÎ,ÖÌZ–ïnãÎÝíp¥l’÷ËkW#-în§vÚhP=Þ‹öäö-ç:•– ª§6#-ìåâæ8mø ã­,!—ŸºiãA‡ñb³'ŸÇ“›É^º³ÛÓ´a/'ÏHN³³}Ÿy*óÎâoòÅõtZÜžnÌQØíúØMëdòÌØ§×(&éÜ´Ó|¸•%kv5/áZ$TWœWvIº¾»Ýj…6ÜÊöä+Å’ ëfÁñ"²O4²oox7ÚÍÌmâæVe}w›W¿ó×(€œÜÝ®¤cYíÍoŽk;0ù“ø22ÙÛF¢Õ^fÉŒ­?ɘkGrØ,“L8®ýÇÀæ¼@e[Ïe“u¬“šLLš‚¾C€Ååkž…hë±öófðdb œº,žé[ç»_Tƒn2ú^ì–lÖ ¡9|K&KÜàÕ:´ÝÞI|™×Á±L•¼Ž­‡´ÉËr¼®¿€UçExºÁùUx:÷ÖfdÓC…Çù§/#_‘IBn>™&qk¶Zƒ¿ƒcø–ý…¤r]=1¾Üj…Æ‘Éù‰neÖ–û¼ƒ‹̸InEö‹Ð¼:· äŽUj_ˆÁkâË™h—u÷Í™É) {iœÇ¡I ”tî$4/ h±1 “÷ì<–ÉÚ‹÷X·ÈEÏÎãK™Ì³±P{é\ùÑÚyhÎ#û2ƒ¬¯9!g|Y´›6«â!ÿq€XÖÑíJ/gÈäEt[Ö¡ùJ¸dáŒa/Û!Zra_–Et;oôíËžÁcñeÙ°Ö“è¶üïíû²u¨/á•E|9t—¿jµý&·n½îÉæŸÃªÃ¹ÆOÌm8÷lÙÞvtŠÎå±u7zø¡ÅêÈZÅÎ…«aƒ zrëɾà—H«p.â˹Á çmdƒ Èè?}1#œÜÜžëóøM>}۵Ï\ >‡J… Å$#Jñ>-ùØËp‚ÅÚ*ÔÊEÈè48–ùèÓ—-Fü!l{e"›3hñë–Ùà¬uK>¢HxZROnÛô¥µîÖNÍmÜZ»L´wîå`¥–œZkŽLç"ºµAP=¹"T·4öoòéëZüî6¸E«íßÏs™æþÔ®RÊÊ7óÄZ»¸P`ñe7:å<³XnÃàMì%ŽÂŽÜÝväþ‡iüàØ`Û”õäSÖñ:¢vtZõ;1·nÑf|þ²E7yëé\K­ÉÿAR7z˜ 23·óNÝ-93·«% ëç½ OÛѬZ'§¶{Œ½òVÜ^ºEÔÂWp “3‡·ñ®ÆÄܺ k=1eކæ—Q>Vïj¼ÉWš1Û¸%29¸E«í “3ÃÏ;u·ä<¶æÆÞmø cïÖzÁ`‡þO.O¬õûöt~wÛþãøÒ/ Þüö4øÅųm ÉÚ ¨›^ý†Í†\ÌÜ®ºJ ¦ àµÁÏlÆÚÍòÖšÃvÛÉ3lpæ—¯áïÚBuä&*{%óôæ¾õCtnsýÙ’ShñÄ^b[(±Ša2oJ¼õŒUùJoŽƒsÿäPY€ºW²©ì’tmðü´X'Â¥+Í W¿Á“W=ÚžV¼)՛ܾáÝfÒþî6Ô¾NÓS[' ž½eß òî‚xyõüNlM»JÿWÀæ°ê*5¿þ «ÆLógCø»àx£1Ó, ë›ã™¹ ‹kï…£ÖP©™f„ ƒ719aq{:LJ°¸þÜ›VIÙx_?Ïjg¥8{ÆŠ<„7ÙðåX½CxS*¯ŽÜ ªòö[ú¾àZÉüâu‡•Æ&uð-Ò×éÝ\Õx=À"7ßW˜¿C„º¡}.LK&Òa¿Û@ÖLéè6Î7¹]ÿäDöþÅafZµq‡dãy†>Y©‘/A£ûîL"•<µîvxxÁ½Ë´jÚÔ e >V¯;ÀÚ‡,È-€Ï=¹ý8|+š)çìšç3È-9}ÊÉõ.[0É­÷æÏX…ÚÓjÊ`òŒU ¹z‹ÕUÁ•›W°È;TAÁÜÒŒ(ø ÍèʳÁ>¬=ŽNOv+/Yn߯#¯`u£ ÝÏG¬jV×VK`Ì-Ö™®Fï@ýz]$Éä“É(Á2,Öì)'Ë è84{Æj`]‘¬ºYÝþøaô•«ÑÈæëɼü¿Ÿ©û÷¹éÏîzúÍyß½®ýöá‘<´i‰ÏDzÞäð´{¼4$wåx÷˜[Wü-Ú•üãù×û?ŸÏ÷Úƒƒ<|(j®½} ù~æ2Ôµ7Ó’ì•°®µ,åiíâ»÷ß9ÉŽ S”ç+ßeØßGÚÀù†<ËsñøÜº‡½Ýè®K†=“‡“Ö9A±kã\}&ÉÃËÈú¼Ûˆä_æsÒ¬½ýC:‡Ñ?žûîñ}ë§ÙÕ0º7oýŒ.Þ^{·?úœÇŸ-’,òvã>'éLÎG×É|å¼´*óݨq×_½$×gë<<9î,@·vÐŒò•eþž|3-'×®Öèßçã(6%“¼cpm:éñ5=÷öP‡Ñ··JN¤N-]ƒ8SlrH&ߊvyÜkÜQ× ­>ßR{ßóƒØÔÉ·ƒ„ç!ÏNãÔ;“lѽ½uãt¢ïú(¬2…žvGe|FoÌxŠUeÚ·®ºb’‡Ö»p>>kw ¡;*£%\—ÇÊ:xéÑÛ“Ç7©5hÚö.”žüãù—Å:íÎÐLÖ¦Ïg'óÚ m´¤î¶Ã¦Â^?[ÈÚ[òøø62<>y+\×Br#󊶓¬½ùVÎZ·×ƒÐú gÕ ¼Ì÷g4É#º0Ú̱ua’÷9žˆá:‘MkpÈ?ž=ÿ%m< g!„ºÉ£—æ¢#Þ_dò­ “« v8G{ôI‘oY1]Æù–¼æ+:ß&E›¼÷|KÝ÷–)ªŽƒ/ÙvßD Y{knÑîlœ=zç§Úm3)(6¦5‰íý=˜¯Ž&ïCi< ÌÑ©EÞªD\•½ïŠ·Èùm Àå.°9¬ó²% S\0Å&ÀÆ]“ÖL¹49ÖAvô‰LDA|cÊZÖáÚõñA´SÅh®=`Ô,)÷‚%Ú.>׺‹òh‘K¿C3¾² æè ºA/‚j¶GGµ®5¸âºê5É1ô«“pt¼ª=ºöaJUëöé´É;K=#žuÑ$Çíõ)4*l\qæèݾ?££Ð^z"&y·½ *„mgr>Àö† Qè^‡è 9¤;ôÍyE±9s1¥®Ë+<}&ñ >“-uŠnp|2yx":ç#‘:ÝÕC¥¼æ`’Ç.ñ/‡uÎû$&yèR2Uãsõdß!Õ#©Ú¢0±EÁ:ôo”óaÙ¸Šœø&K±Z™?Q»ã\,á ¡²NûXÓ"—nßø 29¬ä.AÙ—‘òäµóP£uðùZY,ŠéÍbŽ.ÒÉ|®ŽNœ¤z¢ujû,M&°%ÎÜ^O¶Ä^»çÅ¥æ8‡U%% ÛÚ Mv´|{WÖTzôåò ê®BK²Ééüi—6vä¾o¬t<ªñ €1h‘-ŽD&øÉI¶°)…Á>.…͇©¸œ{s탺fíi½¾o³s5–Ó]ìŸ ôTnÃ5mi:Ôn“FÁkæxÇï} ¶d"6ð­ºv]‹½ï˜`¬†5rù ŽCªçɵwã_GQHÞErìÛÐB8^'7k‡8»SXûú?·¼à698PáLÙ¼¡½¾Ø“Ûá}ørÌÑ1œNņ_Â-XKŽ^Z.ÔWÙÜ!9$NúÍÁ$ï° Ï9‡Õµ¡Ñ‘ 6†Ï‘"Ù$Om®ÆÕbÈÎCªç© °0É"‡4&X£MŽIœ$ê䊹ö/Ý 7±¬FìÑ{ÀM‹X† ªd -D5ÕÀ<ßV±:籓¯À³‰Û0ÔÚÄöÞŒ¨‡Š¢ÆYä=•V€ˆŒþT0q·ö¸ãTPÙâµ±Ã:±ÃÓò5‚£K£Wõ¡G<½TëLÂCBU²q(¨ßôÁ¢9ù«T}³ÒŸ -ÔˆàqAÄFØ© “SÁDÌà© ¨ïDãdrìF†«15cp5ô¡ÖtÉ»h“Cðu¹«BP#g6ÉÛo9)¡˜z98:ÑRëÛ³á>bºÈñIÃYç¼tŠUG°QR†zW2º¢]9ßþ®?Ù¾Ûˆ™£–Ã@þñX†£8ºW-™FGÀMc­)MrZ…Ìû؃ñ 9¤ÞcÃy€P%o‘÷O澃PÅ(„¼mÿ¤¹|ér utÝ€ûLð:º÷™ töÁ‘ºuâX¥Ú8AF\ÍÁ 4Öè#¶ä`8 sòö1€YLr ¸á0/ÝZq¼NK>€‚Ö`#ÝZMRºƒ×á0/ÝÁëp¸.pZ6úŒì{‡d[Ct§5A ¡Â2$›n/&ˆ…ëÿÙr00‹IÎÀF#œÄ$§À‹Ra’ðŒƒÁˆLÖ À˜ƒ!qÌÑxƧ¥;ŽÓÒÈ Çiéèdp‘}÷&ø`uj'?€‚Öˆ$÷&ðb„Ιä â6:éÈl„™œÐ\CâôäO¾Ì²„`§(±FDĦ­vºƒ]ฆ|ÄW b’SÜǬàè¦h×ÑÌ Çm´ä¦hYQ€¼tèŽ5ÐJ7ð:#”Æ"Á`Ã@™ä§5 °zò'ce©Ì3G Iþ™2Ï n,Œ.76þË$0EC!‘ÉÛh¡>f²nÀÑ­Af(óab ”AÖàƒ†|ÄÕذ$›î`•8vA·ÑÁr†Ä1É@ÔÁæÚ\ͯ£;pŸÈc’3¬Òä±ÈGHÒÁà$&ù;–pÝ@ Mð:º2p@&ùE[Ct£6:éÀnD!™R7¢†}#BÛ!šÖ;Aà[‘áj+°ÈGˆÂx¡€ê kÀnà6F(9úÏXãutt2BiÈè6ìc‚UÒ œÖh¥x>fŽÎÀF´P»öW³†û( Ä:LÑê¤;`£>fŽ>À±Ö9Ý@Èè3²v‚PHæ¾3ŒÚ7 /#Ç"7‘v´gŽ>`KÖ¨‘¸€ûØx“œ‚N@‡I> zä!k'h¡eŽ>`K†Ä!g£Ä&P§h÷×ùÒ5È,ÒF)Í}‡yEuP´5Z(n ¥&µ¸që TDl:LÑæ7 /#¤Â$@AtÑm¼ÎòòÒÁ3†F1É)RŠãu"ë¯sßa BeŽ>àj†2ÉRj÷‰¹€ Ô)^§Cs­ñ:q)5ÁiEÖݧ“Œ(sôt,8n#î …<ˆENa#Ç$À!Ùä¦hȈ÷éðTÇN÷pZŒˆ¬ÝFJM€V‘6l€púŒ°ÎÜŒ($²ï%&“ã\¢i”B¡íMk˜WœƒáÅ9y³ÃÐa’ÿZ(î`•8b&Z¨ƒå b‘sØÅ1#13€˜ÌÉO / «ys ä×h¡–|ƒ­ÑB‘öjbƒ…D8o#fF—EΑRúŒÛ0¯ F-îÀ¼8Ü'Ú}•¾ðTk¤TÚˆ F·Ý"}øƒ‹„œ8÷<2IaÕ$*KaÕ¤!-Ê >ž{Ð÷×Aý2ÉYH9 êÒN0ÏÚ´SEÁ38yoêû˜¢ ¬³s“x8mTÏL"Ò´Qú3)ºJ™ˆIH™vÊž†/ëx!BÚ¨$cstZAÂëÒNõ ¯$H;‘ÉsÉ“úN§ŽI\”  í"Çu@›vj8†0ÝVñ2Í¢²zÖÉä¬[E¤“²§´‘F™„”(6Áö|y"#ÑwÚ˜=íÄ„¼!mÄEcÄc’³ê™IIÚ(™"¤" Z¤ ^„‘v‚y'H%ˆ]ÙÅ+‡Ò,.ZG¤i'&äátzºIto7ßêw°™¼]|3Fº„ó$œæiZÔ--âá4ËÁ·–¡ÊZò!üY‡Ui#*›D&‰÷›Õ& íe“œu< mÈÇØm¥ò^„£wÑÓ±ìô›žpº{J¼ÑŒIH™6Ú1Ê'b£v3σàè]è·Nd¤’ߤx˜×-¥¢«1LÈóSáXÃáo›wÊ x H†¾£]‘ÌÁª3ÌчRcÙs5CFWå².@iɇzƒƒ8Xä´cRÑ¡UoWkq°2ù®ÒãXv|Í…Gcmˆ9:+<š”=¡ÔuÕMëÒŸ¼S=ËoòNɯ É%_“òœ|W¦r°z(sò¼<)oTLZwæö•c}„E>ÂÖ×å/y£]í¤çj†Ž¯]‰ÎÁjCÌÉÓJ^ 7ZõNj8òSˆÐ'àUä.ÇC…aÝ,wR=“w*‡”>t‚œ&,zR’w PxÕTÞé7ËÆfèrÌ:†I«Þ¼S9ÄkwòFíΤj*ï”» ¥ddòvýʤÃsÞèø:©cÈÍr'¥y§€—¿äâ› ?CÇ×`žu”~†V½bŸu¼’ ïÔ¯ðÊ¡¼Qú38˜ä´ðh(ê1Éÿ v'ïß𺥼S·ÄKò¢Ç²‘!lay£×î¤ÇrÞ©žáõ+y£rhÒk7o”þLŠoò¬ì ¾µ,áu y£†cRþ’7Ê &ýfóN¿Y^E‘5Fþ«®UÇ×IõL†R€®Êe]=“¡£«ðY—¿äê™IŸáüw$ùïŠ0òNÉPB„Ö®á˜T Ðv•ëú•¼Óí–÷—Î¥?“â› g]ÐÁJÉÌÑyGÞ¼Ów”"äf¹c€ENk8&u ªgº*—ƒ•WrR|3T¦˜k EÖ(y¯Q0kššwºÝò*мQ2©cÈE“ ’ }†»ê¦cÙ¦8ïTðŽüwuKy£IòXZbî;m–ËëWòNÉ×P™B¤Îîv;)º*³—‰Že{ž²‘æš4ÂÑ»4ä:½YžÄr¤‰åI~²ì¼ƒÆ“le#½9É•æ@“ÌpÙHoNò“e§«Oñ•GÜ&©Ý²Óšˆ§vËß½@WvZ YW“uôBwu*)ýÉuFÙÉÉóÄr™¥vá[Ë !O²•½&1ždKÊß½ Uþ.ÍÕ’é¨uš«ì$yv´lt÷™¼ÊT Á츕'WËN‡Þ–©ldÅ'íyÊNS(Þ–©läf'Ϩ•†X“~ZeãBa¼ç œ'=¥xs Ý}‚™%“¶æäYC¬1ëJÖ>¾÷ñTí™Á|Ùx}o’/Ð_'˜‡Õ¤¿NÙxJlÒc¦,Ò\O]û*½9ÉO–./“$[ÙH,O’leö¨ÓÁ’w9}mÒ_§lôs¾æäiK*ÞÕ©l<£6É —Ä2À®l¼7yF­%òÇëÌpî> ´L,ìò 9þ|^ÙÉŠó¤zÙê-T ÁØet–÷´ÈùÃF<ÕSv²d<¹Z as¨ëìhÙË ³7e#;:y‰¬l<)5iMTvšñcÙë¯ÃZ•§Äxn¶ìô×RƦذgÔ&ÙѲ‘Ú)Å´rú&í-äCáÞ±êîä¬ËËX`J&?–#iSÝÔ±Ž4È¡ïau“'hƒœ–|¬:\ÖR9kŒ4Ö)rR†:Ôæ’µ;3}Æ»ûùÏßëÈÉûw´†¶ZÒ‹Áºs£Ã ¯¥ìÈI=!­jòŸw6rÚ_‡V3¾ÉtÔ-‘ÖD0ú¤¯©'ìÈ»zÏcõŒÓ*VÚ[Èþ]Çyò­àíöô”¢%¸-ùX y¬z Á謂—7ÄjÉÇbÕep§2¤P÷ó[«bȱÐÐ$§ÕŒ´Èi›ÚÙÈ^ äCÑâ²²%çíyh5#³bH^†Ú±î§¸9­äjs ëÄy Œ …Zr^ IQ#0:Ŭ ($stö/‚r 6¢/‘uäv1$‰¬›¼]OÈóê„–€(N«ãüOËœU±rÈ -+†äåÇ@>Á*‘Òk˜<{JŒ£aã¼—àÂè -Ä1jŸäKÌÊ€…±È)؈£…ZrZ–ÆŸÓ‚ÑY)&GÌÀÚ)ä…¾‡äôM(Z “g… -Ôm:Ñb; MK¤lƒ¼pÌ ¬ýçu¤@N‹`,ŒIÎÐB¼~øMþñ4N³œG ¥ÖQ¤ÅiÁäTÏêäêDV¹LΤUI™Èi!(-ùjÉ)r‚¿x£ÓjFŠÛòŸ¿DÖ­½ƒå,‹`;Îw€¨eI^Ç:R’G«atöGÀèÌëãi‰F]WeÈ–%F ÈéCfîÓ’Ó\^ ädFa^ÐÚ8-u‚Ñi+EÈÁ謂wDŸ™ä öù­ÈàKÈKK΋!)fFgyq¼NKΔÆ"f(nÈé#nô1/˜ü¤´Ã˜œg€› ìÃí`•(ÜÖNÑBô1¯nt§Åa^À:ú™Áäi)…¸9}ÖRùÇZb•`í £ÆëH;±!ð>Z;íü_õÿnÉùCfúàoBY˜ö2ÅïÀ}hÿïŽüÇ€¿¸á=ï[rŠÓš …üFïsÞ>ÈÌk‚˜ñ;O‰q˜—ßAJÑ'ä€ó6ò¯ LR~ç;úXA·öS´†¸y@t¸šcõ"³'¥xwë–œ?æÅ!/~§u:Gø ¼ïÿ £Óž÷)å÷ÚÆw(¤žÜˆ‡›‹}Ú¸F0+kœ–_4nŸ÷}ïö<%Æ7~ç·…d’Ó~ÿ«äwpZxˆ Ã’ù ÔÈf±ÈÍ׸À ¿¸™@*ü_u^ïF'/‘qÀßqÄŒßÜL /~ç%2ŽUò;ÍËé#n9yF¶Nï¤nlÜnäzj…ã™ùIZÃ}üNÃ~Žó3˜|kÕû|‚Yñ;oqЉßè=Üø¿øÔG ùVéãéñM…k‰U€a§Q GÌ„Æí´AΛüãéGmÁ8b&l fx›–nò¤¿m¬›ô>g¸°Ñcfó ;]çio¡–|Ä«æ@ÝÚíæ@# É5ÄâM¡`töXÁ%và>´§T§q6Jlľ™ä^g 6BòSt0 ”Éù«ßZu÷á­J€œ!f&ȉ°Ñ¸}„“˜£3¸oà ä´ÏÊ¥±È9fe@£˜kP=kÜFØAÐö<°v†YáÛœ¢…(IÎúýORa£ïûp6šÖè3“|À’«ÎF°q êXµ&ê¤Îî-4y¡Êt0¼5ÀNvÚóð6--ù€pXã6d§·Ðä±ÈGtÇÁ&9ƒûŒ@sò®æ`,ºt,; @^:DÓÁp@dßÇ7F*¡½ ’Ìk˜‘Ä Ç¨ÉJŒcÔdlÄ¡N²›à´d)5iÇ%¨‘ bFxÑ¡zŽ%&Bv`1#;¸ Ž’Ì oM$ r&-jät°œcÙÙHv€V³";½…8J 9ߢ†2ÉØhòôäF¤AJ ø/sô?€¸áä;LÑ)…£3@”üðB60+“ÖDòwpÙépÃaòwP'Y@^Íäï:ÉNg#ŽU’9”˜ì´&âX%™õ×Yã´PêĆžr$Žì ¥xg#´ª‘[ê}]±dúÀñ:²÷0&9…ûpÔˆlô˜™n@'¦h”BÖ©í' XÂ:´âíyÚ2uØ’cÙW ×Þ¢Ö—oòça-Ëbq”˜ì ¥8ÔIþ®!–ìtuð_æ¾³ÞB#úŒpÞ†:M#)ÜClð€†UÒ8÷J¯ÖC!/4·q‘ÂÅ~ Œi&~’äæÎ¤!WtDý™MàÅG1GpîkJ_Ñmöä»ëÿÚc¦Ã妆ò“ªŒ˜•Òää•vP)õ:ÃCdÒ¼D¬ëF—d\±~ªœ½v‡A·#Ï5©S )åIª «Ú†±-y·z»ƒÊåY©É:0eAž°J FºªdtŒ‹ ´rÙÛûA®£ƒ<‘Ñ» x±¯Ë*x6q S(DhíWØ´y!úÞjœWGà$Å,ûqÍÊ&ÇC%©šWx÷•€IÞeÉjwkÜ’›\ºÛÏdCi$ äÏ>í¡bbaÎ"öÆEôyíÉ{[h1\Á*µu¤JŸ,Òúd·vÓ²GG˜WMQtç^ßM4Нx<Å\›}S†Ä¹œ‹l>;“óÚ¥øjÓ!Ì-9{tÅ8;IÓM"h—Ⱦ‹ è°0¥‹öªÆÐv>H´3ªÕƉ%´ûxäÒ˜qD…F“¼ƒ“<íjC—òæä‘Á—! utLd$2ù6c yíI£˜ä]–¬ŽŽÙö æÚ;ØG Äó=ÉÚ=²õâѧïLrýòÅŠp"škïLY-¾é°-¬@mTÂWÔ`Rï"ÚfT2ycìtæ¾w`–¦¯xÂi¥D6®m #ûŸóØîÛÓAt¼SsôN6Û÷à• °”6\J­ÂÂäs&“ŸÉ„]~R"úRW‹;2Biœ-´®»ÎH ̉ÂRJiHïxÀd&¥é«yi–|u[ûlÞTô>¾,rŪÃü¤z0‘q¶ðË–’-W’í^·"Tô9PKo”f}Ý7Yä]iVZtµzM¿³–<#y+ÚP<™Dsí}I^Mõ`Æ“ó¡Ã*¥¦M1bVÄœ|Áê¦âÌzÂKf=!o'_ÚJ‚æÑ{[lpŽÕu¥˜¾9Îqãà üýj±aœïŠkÝ`•¼k\ä¼½ô‡]`Zl¡ík]±AqD}Ö¾W¼Ü%‡Ä$Ù¼„#Õã"LŽ Ò_ú¹# ±K!Ù£w¥YÕ¹ï2ÃÍmHäõj‰ÜGœ%™ä˜æ’ê@uéòMr¬fÌ%Û‰ŒØí{x„ XÞN!9§Îä¼ëOó6Ä{Q“9/Ù.~^<¢§ç\4DÞѽ؅G—¹·7³â1Rlg«LWŽXû¨áau¼‰Ì# Oërá4'?TôR\[ìÉ—›h7I>[(²”¾Ï¥9Ú÷r&“ÇzÂB.‚­°©ãçbæÒ¤ -d"v^ºáPçfÞ"Ç“«9PûÊ®äLòеžˆ29å9vÝÃÎùv. ÉŽ9H‘¥ÍùÜÁåÒaœE!ðì°«ÚÎ`’£òköÙ¼¸…ÖÜwý6†ý™$fæ¾*xΚ!æuS¨èvT1»Ú´¶Áí.*:K(fv´š²¡NÑÜwÌŽ¶¦ É{[$ƒÅ6e¨q½%$­Ó«ïà—Å–:œ|ðÙé¨ó©$ó§šä]Æ-8;ÜFŽÑNÅ}Y¦ÃLñ©7Go3}?½;PY9b±+úR'›¤(.‘öág±GϬ¥t·!6ëºÂ°Zt…˜Ô@Èâ½ýý]¬gN>`-¥·ªX¿!dãðª-š¦LcV‘l­qŽ˜ÖæÚ‡¢Å`*–ó:¬ýãyèвE]=¡c‰ÿÖCÅ"X“uŠàÏÜ6d€ãB…è{Ë!_+ÀòVuLßá§‹IyR+›-2ÒuÇ®]O˜j©lÄë@LòÔáÜaæ¥S—«±óǵaY_³Õ…½ñAæ`¦!} ‰¬=š56XÕ6d HM] }€¤z0'ß×¾¹|¬¸7'â·\£X±-{êh\—w’ë¨tAM±*9½aÊn™Oj’ƒØ\ëmÒ0ºØœÇLkHþ°3ÃjsípŠá°«c ë:àëc‹Ñ›¹Øä˜ã® »ÌpÊ&ëÐ^úPÁFe~ú¬||¢(îÐèû_m öp/øÊóß/÷êÉÿã¿ü·þÛ~üï‡ô<_o„Cýiû[‡9z?ˆþpŽð­`~ëW»™“o¬DÖ+ÑÉ bN¥_¯>ÿŠÃžlÌQÍ©ôƒDs_;ƒøÙÆ×¯xÂÿˆŸH—6Þobo¬$<ÿ6H˜ ¶‘5»tÂ.1çØOEŸýXn\'ƒÄõJ"!ÏÆ‡qã×sDr&]a}Þ„‰Ü„GìÂä¼ ³?Lò_#ù÷¿d2ˆ˜ßÚfW%×É º^‰NV¢Ï¿âdh~kk%òl¼˜róý&²e§äÙxaçLäF¶ÎYËL$B¹‘‰tÕúOù¹ArLEÍoÁžÄ9ùÆTâš]ì¼ÑGnôOÎ$gҥܨ)7ƒxs~%Áäá¶NäF·ì”®í”N$B¹Ñ‰ªà?5í”1ˆA¾±’¸^ “›øl|4ýâÅèHî&ƒxs_»ƒTrf§â#7Ñôo6 æ ýJr'ró\1 sìÑç_ñOV¢æTúA¢9ÈÖž¤gãÓŸœ7HÎΛÊ›v*MN’´e§ÒÚN¥‰D¤GnÒäTJìE—z¨¥‰Ü¤™ØÁ·Ô굿'7H®“õÆ5»Øy“ŸÏrÞ ¹› ²ð‹óDnò#vyrÞägãóŸœ7H&S1û[T¹É¹É[r“×~qžHD††q2•¸„ÉMYÇáer’”GnÊDnʳñåOì’‡ÉTÌÒ¼º¥er’”-ÿ¦¯n×xþôåõ4DòP9¯N_P;ôž¼ååì}¯Oçxó«”Vúˆæ×óRGž@6C-멬sE¯?˜äÍÛ*^«)2¨«Jrñ4™k¯¯Ï\§e¡Ô—6èëiíÒ‘Wá —hK}þBëï^£—÷ÕdG^…ë.¢x=ÈÌú¶Ê]qòrïKû޼bà“^’]š—]ª2$Ÿ^æÆ58ýä¤9md áÚ8›¼²._ŠOaMóÌ‘–ë¸È6¹4“¿8_!\•u)úW±Å¦¢Å¯óô|¹\F$v)þu&“uÚèe./ÿ Œp|º4ùyOÉãÃ:¹ö穌•uáž}6G­ZÇøzzeŇu×Qç^!˜RµjÜyíÏSþøÞ…Kßõ}%ÝÔì÷®Á{•çNù|¹sze{ò烉M·)ËÕÆ½$ܽ¢n3až´çƒ]ñR™üÜ)Ÿo¼é¥1·Èfsí烉½4ãR¬…~6XÛý¥MæAÝÀ‰½¸K@ªù©.•ªˆMÞ ¦/+{™“j~êœ:o“?¬Ó¤å•j÷ÀÚ[BÒe?²m¤bÿ­j~vÈ+œ¸\£×}oÚ}^&òRGŒÔû[9^&²b§K—Ô>.š.¾A.ר©Ê:MTæ›~ªz³.5Oa6¾ðu$šœ¯Ý/±É-ùÃ:ïÜm½L•©]|ï†ß¯h=I-¹:ÛD6R'—)¬eÕ®Y•¼Šmeš·7 ïuŽzwIÐ¥°Žè÷/·ì+Hº²îök“}TÖ¢•Kú/µ®“oâ>¦Ë›ä•u—»|£•“/×hK]ûÐP¸v.4íÏâåw8fßߣ_2ðŠ:+Ý/—1+Óàÿƒ¦Ë4oC4¬ó//ľ?b.ߦmeÞýØwß®°>½Vº?Dbß«f|~o¬:‰—Wù¼š2Ø÷÷cº¢ž§#vÓÊIï_UOìûs*\ç¤TH`Ã:Mþ%̾?‡Õ¥ÓêŒfJù:ä½÷ľ?äé–š¦X©²îòسïßß Åû—Jcß+O¯­³O›Øš‰kw3Ö…às ãÃ:—n¡}^¦ˆë®C3°Ãê Üýu¼¤W}“í|°õþÚÄ׃­‚Ðïo]‘€»3W xb‘;º„~~…€—~@¸çÍOîÚ¸l‹Íù†æ»'ؘÈó©+p—h]ÞE!Aè“´%8ß¡¡V×Aø"AhÍy\B› ´þÁ§`ï»këI\ ¹ BÃÙ^ÖK" BÈÝQd©†¿û B yeÝyG§ö¾·Œc¾T£yз®ª\en\Ó?ùR±WÓ(²eÝÅB^Ywyö—-ŠÇØúúÓ§¸IVéù$j?n§—?ˆ}Xço##©i*ý&¿üÙ—ò¶3Ÿ\ªeõãþš À+ç¯Cé©¥©ÝÀÝ5‘ë¤5G‡*&ç呺ÚvËûëœ'“oÛcÝä¯<”…ºk†ŒuµèâÂ'‡Ž¡Wœó—sc›È¶ÿX¸NÚöi¯ w|išÈ†uɇWÛÝá=ywýgO¾)‚º<«+ܳÞâ»Î‘—³ã÷ʺˋЗõx¦»Â36ùÔëK»¾Ve’²ö¶‚‹“·%XévB¼Q‚u?ò²½‹Vê®cM¬åRŽdß›Ž@÷¹õz¢È¦‚Ëñ2_6ySÁUR¨‡US~6#oY¾Ê߆?¼ÝùËá+Å\{lÍDPÿh\lϺ+¶{ð°.h‘&kÖ¹ì„i\löŽa_¾~AÃOÂA/ ~AÃOÂA/ ~AÃOÂA/ ~AÃOÂA/ ~AÃOÂA/ ~AÃOÂA/ ~AÃOÂA/ ~Ù°ï±ÿV5ü;ä•uß^À1öõ¿6åe‡Bm/å£\ѦCÇþ+~½ÂKþWr¹|j©†ÿý‡K/®ðÒ“ð¿ÙŸP-lÛ‚ûZ¾Ï,ü—gs.á*M†\júø6$ü—šÜ¹ïF£1¿$µ}›öí¯9ã«ñzû´©õï×à^ÎYEÎ_†Ÿ„ÿ‚^À1¶Eû2ü$üô†ª¸·á'á¿ pŒ­æ¾ ? ÿ½€c,Ö›˜Èʺo/àJ¿ ? ÿ½€cxòÛð“ð_lûžú?ð_lߦ쬽-éC÷ eݧá'á¿ pŒí¿ ? ÿ½€chöömøIø/hƱDôËð“🷬 '9ëâÃ:¹…®^¬ÄÖL„[eIøß(Vȱ ÿ ? ÿ+çËy>y|Xç5P÷๿lL¹Dóéšz>•l÷õÀe" ÿ•ÝAÿá:>óK³'áÿ÷è厤ÜSØ>µd—ÝÓËmþ+»ƒÖ÷\.Û騴²;h­†Û»ÈÂewÐõ>eῲ;è7Oïü| ™„ÿj_"Çþ$üWvýfÝyßh"á¿¢pŒÏW|~þ+zÇøöÆ—á'á¿¢pŒH|~þ«iaë+oÃOÂE/à_¿ø2ü$üWôŽñÙO |yGÿFÆÛð“𿑺Ûw>úv>\çhøä5wѺ;Óɮ￿.ùo,lÓõñ¾#ö½íxgÂëvúë eºa]R×XØÊ:#;*›òXç¯ÃÂ,½Î–Þ¯¬»Ü‹TcØZ7{§ô^ÁÎÛÔ÷qßß:ÆÊâ¯U‘ðß^{[vËÉÛòØåõäëjÁ³Ë×qAĦmæzk¹ ÿŸ?dYz¿a]º¶÷lŠs+OOŒ4Õôw½æ+7ÝgvÈu÷ÝQ5üІŸ„ÿŠ^@5üІŸ„ÿo•I—ŽÏ]dlX÷eøIø¯èTÿý|àž\ ?Ý\IrYƒR |£6î` ) ÿãÛŒŸ÷UdþžÜ§£.$üï“ÎÝ9­†?¾ýéè_Þ¾‹<Ÿ’p'ù:]þ?à½òy²ð?¶·÷gþW쟦¤,ü¯ßòÑkþÇæöŸ‘×>—R]†ØWÃkò ¾ìÔ‡‹ý·ªáß!oªéÃeG Û>¥ô•÷'áÄK€cxWì;ïOÂÿˆ—ÕðGÌû“ð?â%À1>àÅìõñ²÷%ÀÑ¿ìõÎû“ð?â%À1¾¼ö•÷'á4ï&Ú×­¾òþ$üx p‘'2_û_‡B¹ï £yóMÿ"áÿ3ºye]úú]þ?ä§¶ä-ë–¯`Ý9Æ–"_^ ÿcëù–ñAkç½Hm|+¯£FýŠ9ye](®=õ á·ÄcldÃ×®'!W`]"7¡µ)Ž»qpuòð€ý*eá;ˆÖÑ+ëbHlíµE‡»T¼½íº}”@ÖžyÁµÛRÖ½/ªá˜÷'áÄK€jøã[’/Ž8;Ž‹ëÞ—ÕðGÌû÷ä¿»Î!שûeã~w­!òÝQñe·%·×QÉ¡‚î²d69ÖK¥J•2ñ6~e$ï ›ÜÁª®#ÉÝ5KŒñsðõhop?›¼-fwAëè Sbúú]ƒ¼-Z½OêgíЀå:ylÖÕ®W(’/ñøž<¶M’Œ£òw_þîâ3z[}oˆ=:V³*î{3údßC“ù€}ÏÒgûþþÖåÓÝߪûÞ\OöýͺaßC“<àû*Š÷=¼PÓ}&/ݾ?‰¼<Ûwy§‚¯‡}¯©Îk^‘í{“’Ø÷ç¾gºïÒúí¾KÍi¾ïòäêÆA=Y*³}+änßëÚgûþ}å8î{MïÏöý¹7“aß¿7} íˆ`ÿýtµüæ{·ï5­0Ûw}ïû­ïŸ(¯ßmså¾µ°¤zL¨o8ßô øÜO¾ïk¶û^³Qgäûþ¤}B·ïOâEgû®Í‹û® nŽï»~_ û®õv²ïú”†tûþý»‹}“K¿ï±Ž>Ù÷ïHWôº¢¸·`ü}Ê;stèî‘ú}yæûÞ„À¸ï±ÞŒ¾ïo&÷è¹î{ÌgûnMÞët¶ïñ;Ö*¥Û÷wêãûdߟPµß÷ïß]ì{¬ÇÅ7ëÚŽp¿®x07^³'Ç–n¿BIñ!¯-¿~Ýo¶[I'èìõ+&)ßNiÛ8ê—Ê5ÇWëãÚ6A¿‚ww-Wøz;úÀür.¾’EÞº…¿RÔgòM?kUjFº~¿®½{ÈŸ®¿®HÈ_gàˆ³Âî ×÷Â%-MQû{ô”Rxù`?NéŹpã#Þkм¯?¤x_ïZk/íèÙ6%®OϯËôÞáÿ?ÿýÿúÇþã_ÿåÿÐG0<†DyLP-1.10.4/Data/Netlib/grow22.mps.gz0000644000175200017520000010765610430174061015436 0ustar coincoin‹XK®9grow22.mps•ÜÝ®¥¹’çsº‡yÞÈà?e«a°ZBo·Üºÿñʪ]¹Æ ã­Íj POåbÎ/?ƒAÆSë_ÿËû—ϯÿù?ÿí¿ÿ¥üçÿôõÿüý?ÿ§Ï¿~>ÿö/ÿó_þõßÿåëÃ×ýû¿ÄøþPôCÕM?tý0ôÃÔK?lù?ôƒ>Aè„>Aè„>Aè„>Aè„>AÑ'øzEßAÑwPô}EßAÑwPô}EßAÑwPô}EßAÑwPô}EßAÑwPô}UßAÕwPõT}UßAÕwPõT}UßAÕwPõT}UßAÕwPõT}UßAÕwPõT}MßAÓwÐô4}MßAÓwÐô4}MßAÓwÐô4}MßAÓwÐô4}MßAÓwÐô4}]ßA×wÐõt}]ßA×wÐõt}]ßA×wÐõt}]ßA×wÐõt}]ßA×wÐõt}CßÁÐw0ô }CßÁÐw0ô }CßÁÐw0ô }CßÁÐw0ô }CßÁÐw0ô }SßÁÔw0õL}SßÁÔw0õL}SßÁÔw0õL}SßÁÔw0õL}SßÁÔw0õL}KßÁÒw°ô,}KßÁÒw°ô,}KßÁÒw°ô,}KßÁÒw°ô,}KßÁÒw°ô,}[ßÁÖw°õl}[ßÁÖw°õl}[ßÁÖw°õl}[ßÁÖw°õl}[ßÁÖw°õȳ}=‚¼ýPõCÓ]? ý0õÃÒ[>|UEòAŸ ô BŸ ô BŸ ô BŸ ô BŸ è|½­õCÕM?tý0ôÃÔK?ìÐ:Q?è„>Aè„>Aè„>Aè„>Aè}‚¯ÿ]ëDýPõCÓ]? ý0õÃÒ;´NÔú¡Oú¡Oú¡Oú¡OúEŸàëh¨ª~hú¡ë‡¡¦~Xúa‡Ö‰úAŸ ô BŸ ô BŸ ô BŸ ô BŸ è|½­õCÕM?tý0ôÃÔK?ìÐ:Q?è„>Aè„>Aè„>Aè„>Aè}‚¯w u¢~¨ú¡é‡®†~˜úaé‡Z'ê}‚Ð'}‚Ð'}‚Ð'}‚Ð'}‚¢Oðõ´NÔU?4ýÐõÃÐS?,ý°CëDý Oú¡Oú¡Oú¡Oú¡OPô ¾ÞÖ‰ú¡ê‡¦º~úaꇥvh¨ô BŸ ô BŸ ô BŸ ô BŸ ô Š>Á×;Ð:Q?TýÐôC×C?Lý°ôíõƒ>Aè„>Aè„>Aè„>Aè„>AÑ'øzZ'ꇪš~èúa臩–~Ø¡u¢~Ð'}‚Ð'}‚Ð'}‚Ð'}‚Ð'(ú_û¤Ö‰ú¡ê‡¦º~úaꇥvÑ:Q?è„>Aè„>Aè„>Aè„>Aè}‚¯w u¢~¨ú¡é‡®†~˜úaé‡]´NÔú¡Oú¡Oú¡Oú¡OúEŸàëh¨ª~hú¡ë‡¡¦~Xúa­õƒ>Aè„>Aè„>Aè„>Aè„>Aùí þÿþÿüûûן·Í_ÿó¿Ý/ÿüßþq»ü{éÿío?¾þgŒÏ¯Ëeùƒè³gûýÔXõáCÿàëÿ¿îløüõS¿ÿµ~]SëcÕY²á[ª¶¾þ1üç]¶þ½Ñf2<Î{­Ÿ_wÜúoÿýænoèçò]Ÿ_wßö÷®ôÛ§k~]ÛKù-НáÛ¿ä+·~~Ý¢ÿúƒø™L³oÿãýù?û—å¿ÿTùþ)?zÝytü˜3îÑ1{+×¼ÿ6eõl¸¼ˆß¾>V6ïeÿ~kr× øù†Ëao¾Ž–=üõëEÇ• ·74ô±¯èø³áþ†ÖžëŠŽŸÿöùû¡ã¾áÕyt´ò5'Ù›/«ýèí{T˜Þ2öšéôþ\™ÙðcÿèéôFYk'Ã㇠/_åÉ5½¿G×L‡ÛüÔÙ:ÍO©Ùpÿ'–5g6??Öï²kø1?_ÑuÍÏÏ šµÎìÕI~þ¶g©ß1Ô(·Ç¨óš¸ßW€|IK“óoϸJ:q}‘ ·Yì?ÛÙÄÅúý p÷Eúõ~~Íÿ«Êïuä5Ü3×Wõ]³y__{Fˆ{rþyèϦ·Îø‘½ù#9ïòGtøòëû÷›ÓëÕ5]~cwÉ®=Má¿ýGK“óšµeÃ=‚k/ùÞ[ûŒl¸/ÒŸ‡tzw“ͳÃôÆX<¼Lï?\öo?¦÷+w2½_;ÃïW’×ðc‡î¥eó^ö×seÃÌÕGÍ7å(Ù›· øÊ[åE×åßöÞ¿_þ>|À¼×ºFäµÜׯ– oÇ«Û=Ý­ã+ì²á6Q{daSj“}mPØüØ¿æÝÓùWE›}»‡ÍÏ£A-×j6ü ›?êMÏ í«hŠlø6ÑG6eÌôÛ…ÕþH¨GØ”=î¹ãçMN½jí¯tñ•ç÷¼Ï,l~þWùcÉœaÓdÞ'‡MŒŽÑ[ÞÏøÝ¹_ý*]õÜ~ô±VmÙð#†jÙ3 ›¾o-^Ã}gù:夹#ôâF‡÷cóü1îûòßÏÖ3>ÏžKÏK¹Óû>š1%-WKÙ%›8=Àÿm~}ã÷µ^ôlkøãr Ú”²ûuìgô>³éý)hZ2ülW­%¯$g˾ýÜƯŠƯÄ7³áÇ |þh°øeõvìFþú·ÛüÔ¯3ôNÞ/>çü¾rŽAgÕëÒêjbÏ‘ ?.ª¾ŽeÙ².ÿà¥×ðsçoPÊq/èâókõç÷å½Dúo?ƒàǯ+Žê}|7›u¸'¾ùõó;Šß¹Ú5üø'þj6_ó^³»/Òù»%¹ã+6–¬Ë‰w½Á¼‡”l›ØsU¸Ò¬é·w/nF½ Æ?.~²áG›åë çŸñ}3tñùcî3æ×ÿùºýÚUÿر®°%nÿö_±Ÿ3BÒÅÂSh_y!úò-~ì—óW-çݹ6dÃÏ{Ó¿Þü±â†Ô± //J6?n#þvyQÖJÿíž“ÚWpfµÂÞæJ~yt,©å6ž3ʯ¬`:$ÖïÿYÔ5Ü“Jk¿²Â1ï_ûD6ü(5~µŽy·bŒ.>næ}¦Ã¯bÚ=ýy€O‡G©òG¥âóÓö”œ”Þ\~¿Båû§üÀæxÿãŸxíßg!~ö…VƒÅÿ}-®ÃûIR÷•·Vúðg©ñGŸñ˜÷Ö¿«)îAÐã—kûqÞkgß~–}@µÿȾýXü­¬¼ÇZ{¤ÃÏ=ãWîðW7ö÷ \‡heü±°N—;›÷³[~ܹã++|eÝ?VÆÿ"U÷ÛßûüúÏû?ø5?ÎÞ ³w˜cï…Ù;Ͳ÷Âì½d5âÅÞ!·{/ÌÞ³ä|²÷Âì=OÎÎÞ ³÷òÉ©³÷Âì½|Ònì½0{‡älì½0{‡älì½0{/I ³÷,…Ÿì½0{O¦÷bï…Ù{>½ÎÞ ³÷|z½fï0½ÆÞ ³÷òÉwheï…Ù{ù¤kÜØ{aö^>Iì½0{ÏçÝÙ{aöž×ÅÞ ³wcï…Ù;„±÷Âì=gï…Ù;†°÷ÂìÂFÙ{aöacì½0{OÃæ`ï…Ù{6{/ÌÞ1l„½fï哜½fïyØ8{/ÌÞ±Òö^˜½'µÂÅÞ ³wØLŒ½fï°™{/ÌÞ³müfïP+{/ÌÞ¡Ò7ö^˜½çIÅÙ{aö¥ ±÷Âì¢ÃØ{aöŽYa¤YádïyVpö^˜½SVPö^˜½çYÁÙ{aöDcï…Ù;…²÷Âì=gï…Ù{6ÎÞ ³wcï…Ù{~qö^˜½CR1ö^˜½CR1ö^˜½'ù8aït¹¤ì½0{‡-ÇØ{aöN[޲÷ÂìާÆÞ ³wªT”½fïX©{/ÌÞ)'iç¸0{‡JÅØ{aöžæ¤ƒ½fïÙíÃÉÞ ³wH*ÆÞ ³w(p½fïPà{/ÌÞó¤âì½0{§['eï…Ù{žTœ½fïp«aì½0{O–LÂÞ)©({/ÌÞ!:Œ½fïtüQö^˜½çÑáì½0{§S³²÷Âì=gï…Ù{ÎÞ ³wÚr”½fïÉÊHØ;n9=?Ýì Qcï…Ù;L¯±÷Âì=Ÿ^gï…Ù{:½{/ÌÞ©!¡ì½0{§cв÷Âì=Ùðöž—«ÎÞ ³w¨(Œ½fïPQ{/ÌÞóŠÂÙ{aö§cï…Ù;ì,ÆÞ ³÷r·h/ö^˜½Cp{/ÌÞ!¸Œ½fïÙþfï%³{/ÌÞ©Ÿ¡ì½0{§v•²÷Âì.¼•½fïtG¡ì½0{§n¤²÷Âì= ®„½ÃYÕØ{aö;¿±÷Âìwþu¡³÷|kpö^˜½ÓqBÙ{aöžïüÎÞ ³w8{/ÌÞó; gï…Ù;ÝQ({/ÌÞ©‰­ì½0{ÏÃÆÙ{aöNmeï…Ù;„±÷ÂìÂÆØ{aöž'gï…Ù;íÊÞ ³wº/Wö^˜½çQçì½0{Ï+Igï…Ù{6ÎÞ ³w:…*{/ÌÞ!lŒ½fï6ÆÞ ³wº¼(yØœìý/^^œì=ß‹œ½fïIÔ%ìÎÊÞ ³wH*ÆÞ ³w*5”½fïPI{/ÌÞa31ö^˜½Ã²6ö^˜½g— 7{§æ¸²÷Âìö eï…Ù{VIžì½0{ÇRCØ{aö‹ßØ{aöN¥FÐcuö‹ßØ{aöŽ{†°÷Âì=©c/ö^˜½Ckì½0{/ ÇžOeïä8oÊÞ Èq^•½ËÃWbï…Ù»<|%ö^˜½ËÃWbï…Ù»œì+±÷Âì]l%ö^˜½ËÅ@%ö^˜½Ëz¯ÄÞ ³wÙ *±÷Âì]ÒE%ö^˜½ËfR‰½fï’m*±÷Âì]n5*±÷Âì]’U%ö^˜½ËNX‰½fï’ë*±÷Âì]ê¤Jì½0{—TY‰½fï²Wbï…Ù»dÚJì½0{—â¾{/ÌÞë¬.ö^™½×;]\ì½2{¯Ùz?Ø{eö^ï{±÷Êì½ÞKæbï•Ù{½cþbï•Ù{½£îbï•Ù{½Ãæbï•Ù{Mö¸›½×{/ºØ{eöÑaì½2{¯I:?Ù{eö^“||²÷Êì¢ÃØ{e·žG‡³÷—áþ†Œ½WfïIt\ì½2{O²BÂÞóéuö^™½'Ó{±÷Êì=™Þ‹½Wfïùü8{¯ÌÞa~Œ½Wfï4?ÊÞ+³÷šÕˆ{‡Ünì½2{Ï’óÉÞ+³÷<9;{¯ÌÞë'[¤ÎÞ+³÷úIS¸±÷Êì’³±÷Êì’³±÷Êì½&5üÍÞ³~²÷Êì=™Þ‹½Wfïùô:{¯ÌÞóéuö^™½Ãô{¯ÌÞë'ß¡•½Wfïõ“®qcï•Ù{ý$Ap°÷Êì=Ÿwgï•Ù{\{¯ÌÞ!lŒ½Wfï6ÆÞ+³÷ì½2{§~†²÷ÊìÚUÊÞ+³wºðVö^™½Ó…²÷Ê캑ÊÞ+³÷$¸ögUcï•Ù;ìüÆÞ+³wÜùÔ…ÎÞó­ÁÙ{eöNÇ eï•Ù{¾ó;{¯ÌÞá<`ì½2{Ïï(œ½WfïtG¡ì½2{§&¶²÷Êì=gï•Ù;µY”½Wfï6ÆÞ+³wcï•Ù{žTœ½Wfï´g({¯ÌÞé¾\Ù{eöžG³÷Êì=¯$½WfïyØ8{¯ÌÞéªì½2{‡°1ö^™½CØ{¯ÌÞéò¢äas²÷¿xyq²÷|/rö^™½'Q—°w:g({¯ÌÞ!©{¯ÌÞ©ÔPö^™½C%iì½2{‡ÍÄØ{eöËÚØ{eöž]2ÜìšãÊÞ+³wÚ3”½WfïY%y²÷ÊìK aï•Ù;,~cï•Ù;•}@ÕÙ;,~cï•Ù;îÂÞ+³÷¤Ž½Ø{eöu¬±÷Ê콂ümïäø“šô§Ã»²wyøFì½2{—‡oÄÞ+³wyøFì½2{—“}#ö^™½Ë‚mÄÞ+³w¹hÄÞ+³wYïØ{eö.»A#ö^™½KºhÄÞ+³wÙL±÷Êì]²M#ö^™½Ë­F#ö^™½K²jÄÞ+³wÙ ±÷Êì]r]#ö^™½KÔˆ½Wfï’*±÷Êì]¶ñFì½2{—LÛˆ½WfïRÜ7bï•Ù{»“ÕÅÞ³÷v§‹‹½7fï-[ï{oÌÞÛ½`/öÞ˜½·{É\ì½1{owÌ_ì½1{owÔ]ì½1{owØ\ì½1{oÉw³÷vïE{oÌÞ!:Œ½7fï-Iç'{oÌÞ[’OöÞ˜½Ct{oìÖóèpöþ2Üß±÷Æì=‰Ž‹½7fïIVHØ{>½ÎÞ³÷dz/öÞ˜½'Ó{±÷Æì=ŸgïÙ;̱÷ÆìæGÙ{cöÞ²ñbïÛ½7fïYr>Ù{cöž'ggïÙ{ûd‹ÔÙ{cöÞ>i 7öÞ˜½Cr6öÞ˜½Cr6öÞ˜½·¤†¿Ù{–ÂOöÞ˜½'Ó{±÷Æì=Ÿ^gïÙ{>½ÎÞ³w˜^cïÙ{ûä;´²÷Æì½}Ò5nì½1{oŸ$öÞ˜½çóîì½1{O‚ëbïÙ;„±÷ÆìÂÆØ{cöž‡³÷ÆìÃFØ{cöNa£ì½1{‡°1öÞ˜½§as°÷Æì= ›‹½7fï6ÂÞ³÷öÉÎÎÞ³÷œì½3{‡¤bì½3{‡ר{gö®±÷Îì=O*ÎÞ;³wºuRöÞ™½çIÅÙ{gö·ÆÞ;³÷dÉ$ì’Š²÷Îì¢ÃØ{göNÇeïÙ{ÎÞ;³w:5+{ïÌÞóèpöÞ™½çÑáì½3{§-GÙ{göž¬Œ„½ã–ÓóÓíÁÞ¡5öÞ™½Ãô{ïÌÞóéuöÞ™½§Ó{°÷ÎìÊÞ;³w:¦({ïÌÞ“ /aïy¹êì½3{‡ŠÂØ{gö…±÷Îì=¯(œ½wfïpÊ1öÞ™½ÃÎbì½3{ïw‹öbïÙ;—±÷Îì‚ËØ{göžàoöÞ3ûp°÷ÎìúÊÞ;³wjW){ïÌÞéÂ[Ù{göNwÊÞ;³wêF*{ïÌÞ“àJØ;œU½wfï°ó{ïÌÞqçoP:{Ï·gïÙ;'”½wfïùÎïì½3{‡ó€±÷Îì=¿£pöÞ™½Ó…²÷ÎìšØÊÞ;³÷˜½;æ/ö>˜½;ê.ö>˜½;l.ö>˜½d»Ùû¸÷¢‹½fïÆÞ³÷‘¤ó“½fï#ÉÇ'{ÌÞ!:Œ½vëyt8{îoÈØû`öžDÇÅÞ³÷$+$ì=Ÿ^gïƒÙ{2½{ÌÞ“é½Øû`öžÏ³÷ÁìæÇØû`öNó£ì}0{Yx±wÈíÆÞ³÷,9Ÿì}0{Ï“³³÷Áì}|²Eêì}0{Ÿ4…{ÌÞ!9{ÌÞ!9{ÌÞGRÃßì=Ká'{ÌÞ“é½Øû`öžO¯³÷Áì=Ÿ^gïƒÙ;L¯±÷Áì}|òZÙû`ö>>é7ö>˜½O{ÌÞóywö>˜½'Áu±÷ÁìÂÆØû`öacì}0{ÏÃÆÙû`öŽa#ì}0{§°Qö>˜½CØ{ÌÞÓ°9Øû`öž„ÍÅÞ³w aïƒÙûødçgïƒÙ{6ÎÞ³w¬ô…½fïI­p±÷Áì6cïƒÙ;l&ÆÞ³÷l¿Ù;Ô ÆÞ³w¨ô½fïyRqö>˜½C)hì}0{‡è0ö>˜½cViV8Ù{žœ½fï””½fïyVpö>˜½ÃÑØû`öNa£ì}0{ÏÃÆÙû`öž‡³÷ÁìÂÆØû`öž@œ½fïTŒ½fïTŒ½fïI>NØ;].){ÌÞaË1ö>˜½Ó–£ì}0{‡ã©±÷Áì*eïƒÙ;V*ÂÞ³wÊIÚ9ÌÞ¡R1ö>˜½§9é`ïƒÙ{vûp²÷Áì’б÷Áì \cïƒÙ;¸ÆÞ³÷<©8{ÌÞéÖIÙû`öž'gïƒÙ;Üj{ÌÞ“%“°wJ*ÊÞ³wˆcïƒÙ;”½fïyt8{ÌÞéÔ¬ì}0{Ï£ÃÙû`öžG‡³÷Áì¶eïƒÙ{²2öŽ[NÏO·{‡BÔØû`öÓkì}0{ϧ×Ùû`öžNïÁÞ³wjH({ÌÞ阢ì}0{O6¼„½ç媳÷Áì* cïƒÙ;TÆÞ³÷¼¢pö>˜½Ã)ÇØû`ö;‹±÷Áì}Ü-Ú‹½fï\ÆÞ³w.cïƒÙ{v€¿ÙûÈìÃÁÞ³wêg({ÌÞ©]¥ì}0{§ oeïƒÙ;ÝQ({ÌÞ©©ì}0{O‚+aïpV5ö>˜½ÃÎoì}0{Ç¿A]èì=ßœ½fïtœPö>˜½ç;¿³÷ÁìÎÆÞ³÷üŽÂÙû`öNwÊÞ³wjb+{ÌÞó°qö>˜½S›EÙû`öacì}0{‡°1ö>˜½çIÅÙû`öN{†²÷ÁìîË•½fïyÔ9{ÌÞóJÒÙû`öž‡³÷ÁìN¡ÊÞ³wcïƒÙ;„±÷Áì./J6'{ÿ‹—'{Ï÷"gïƒÙ{u {§s†²÷Áì’б÷ÁìJ eïƒÙ;T’ÆÞ³wØLŒ½fï°¬½fïÙ%ÃÍÞ©9®ì}0{§=CÙû`öžU’'{ÌÞ±Ôö>˜½Ãâ7ö>˜½S©ÑôX½Ãâ7ö>˜½ãž!ì}0{OêØ‹½fïPÇ{ÌÞÈñÇßö>@Ž?þ¶÷rœ‡Weïòð“Øû`ö.?‰½fïòð“Øû`ö.'ûIì}0{—;‰½fïr10‰½fï²Þ'±÷Áì]vƒIì}0{—t1‰½fï²™LbïƒÙ»d›Iì}0{—[Iì}0{—d5‰½fï²NbïƒÙ»äºIì}0{—:i{ÌÞ%UNbïƒÙ»lã“Øû`ö.™v{ÌÞ¥¸ŸÄÞ³÷y'«‹½OfïóN{ŸÌÞg¶Þö>™½Ï{Á^ì}2{Ÿ÷’¹Øûdö>Øûdö>層Øûdö>ï°¹Øûdö>“=îfïóÞ‹.ö>™½Ct{ŸÌÞg’ÎOö>™½Ï$Ÿì}2{‡è0ö>Ù­çÑáìýe¸¿!cï“Ù{{ŸÌÞ“¬°÷|z½OfïÉô^ì}2{O¦÷bï“Ù{>?ÎÞ'³w˜cï“Ù;Ͳ÷Éì}f5âÅÞ!·{ŸÌÞ³ä|²÷Éì=OÎÎÞ'³÷ùÉ©³÷Éì}~Ònì}2{‡älì}2{‡älì}2{ŸI ³÷,…Ÿì}2{O¦÷bï“Ù{>½ÎÞ'³÷|z½Ofï0½ÆÞ'³÷ùÉwheï“Ùûü¤kÜØûdö>?Iì}2{ÏçÝÙûdöž×ÅÞ'³wcï“Ù;„±÷Éì=gï“Ù;†°÷ÉìÂFÙûdöacì}2{OÃæ`ï“Ù{6{ŸÌÞ1l„½Ofï󓜽OfïyØ8{ŸÌÞ±Òö>™½'µÂÅÞ'³wØLŒ½Ofï°™{ŸÌÞ³müfïP+{ŸÌÞ¡Ò7ö>™½çIÅÙûdö¥ ±÷Éì¢ÃØûdöŽYa¤YádïyVpö>™½SVPö>™½çYÁÙûdöDcï“Ù;…²÷Éì=gï“Ù{6ÎÞ'³wcï“Ù{~qö>™½CR1ö>™½CR1ö>™½'ù8aït¹¤ì}2{‡-ÇØûdöN[޲÷ÉìާÆÞ'³wªT”½OfïX©{ŸÌÞ)'içx2{‡JÅØûdöžæ¤ƒ½OfïÙíÃÉÞ'³wH*ÆÞ'³w(p½OfïPà{ŸÌÞó¤âì}2{§['eï“Ù{žTœ½Ofïp«aì}2{O–LÂÞ)©({ŸÌÞ!:Œ½OfïtüQö>™½çÑáì}2{§S³²÷Éì=gï“Ù{ÎÞ'³wÚr”½OfïÉÊHØ;n9=?Ýì Qcï“Ù;L¯±÷Éì=Ÿ^gï“Ù{:½{ŸÌÞ©!¡ì}2{§cв÷Éì=Ùðöž—«ÎÞ'³w¨(Œ½OfïPQ{ŸÌÞóŠÂÙûdö§cï“Ù;ì,ÆÞ'³÷y·h/ö>™½Cp{ŸÌÞ!¸Œ½OfïÙþfï3³{ŸÌÞ©Ÿ¡ì}2{§v•²÷Éì.¼•½OfïtG¡ì}2{§n¤²÷Éì= ®„½ÃYÕØûdö;¿±÷Éìwþu¡³÷|kpö>™½ÓqBÙûdöžïüÎÞ'³w8{ŸÌÞó; gï“Ù;ÝQ({ŸÌÞ©‰­ì}2{ÏÃÆÙûdöNmeï“Ù;„±÷ÉìÂÆØûdöž'gï“Ù;íÊÞ'³wº/Wö>™½çQçì}2{Ï+Igï“Ù{6ÎÞ'³w:…*{ŸÌÞ!lŒ½Ofï6ÆÞ'³wº¼(yØœìý/^^œì=ß‹œ½OfïIÔ%ìÎÊÞ'³wH*ÆÞ'³w*5”½OfïPI{ŸÌÞa31ö>™½Ã²6ö>™½g— 7{§æ¸²÷Éìö eï“Ù{VIžì}2{ÇRCØûdö‹ßØûdöN¥FÐcuö‹ßØûdöŽ{†°÷Éì=©c/ö>™½Ckì}2{Ÿ ÇÛû9þ¤æA=}û߇_ÄÞ'³wyøEì}2{—‡_ÄÞ'³w9Ù/bï“Ù»,ØEì}2{—‹Eì}2{—õ¾ˆ½Ofï²,bï“Ù»¤‹Eì}2{—Íd{ŸÌÞ%Û,bï“Ù»Üj,bï“Ù»$«Eì}2{—p{ŸÌÞ%×-bï“Ù»ÔI‹Øûdö.©r{ŸÌÞe_ÄÞ'³wÉ´‹Øûdö.Åý"ö>™½¯;Y]ì}1{_wº¸Øûbö¾²õ~°÷Åì}Ý öbï‹Ùûº—ÌÅÞ³÷uÇüÅÞ³÷uGÝÅÞ³÷u‡ÍÅÞ³÷•ìq7{_÷^t±÷Åì¢ÃØûbö¾’t~²÷Åì}%ùødï‹Ù;D‡±÷Ån=gï/Ãý {_ÌÞ“è¸Øûböžd…„½çÓëì}1{O¦÷bï‹Ù{2½{_ÌÞóùqö¾˜½Ãü{_ÌÞi~”½/fï+«/ö¹ÝØûböž%瓽/fïyrvö¾˜½¯O¶H½/fï듦pcï‹Ù;$gcï‹Ù;$gcï‹ÙûJjø›½g)üdï‹Ù{2½{_ÌÞóéuö¾˜½çÓëì}1{‡é5ö¾˜½¯O¾C+{_ÌÞ×']ãÆÞ³÷õI‚à`ï‹Ù{>ïÎÞ³÷$¸.ö¾˜½CØ{_ÌÞ!lŒ½/fïyØ8{_ÌÞ1l„½/fï6ÊÞ³wcï‹Ù{6{_ÌÞ“°¹ØûböŽa#ì}1{_Ÿì<àì}1{ÏÃÆÙûböŽ•¾°÷Åì=©.ö¾˜½Ãfbì}1{‡ÍÄØûböžmã7{‡ZÁØûbö•¾±÷Åì=O*ÎÞ³w(½/fïÆÞ³wÌ #Í '{ϳ‚³÷Å첂²÷Åì=Ï ÎÞ³w8 {_ÌÞ)l”½/fïyØ8{_ÌÞó°qö¾˜½CØ{_ÌÞóˆ³÷Åì’б÷Åì’б÷Åì=ÉÇ {§Ë%eï‹Ù;l9ÆÞ³wÚr”½/fïp<5ö¾˜½S¥¢ì}1{ÇJEØûböN9I;Ç‹Ù;T*ÆÞ³÷4'ì}1{ÏnNö¾˜½CR1ö¾˜½Ckì}1{‡רûböž'gï‹Ù;Ý:){_ÌÞó¤âì}1{‡[ cï‹Ù{²döNIEÙûböÑaì}1{§ã²÷Åì=gï‹Ù;š•½/fïyt8{_ÌÞóèpö¾˜½Ó–£ì}1{OVFÂÞqËéùéö`ïPˆ{_ÌÞaz½/fïùô:{_ÌÞÓé=ØûböN eï‹Ù;S”½/fïɆ—°÷¼\uö¾˜½CEaì}1{‡ŠÂØûböžWÎÞ³w8å{_ÌÞag1ö¾˜½¯»E{±÷Åì‚ËØûböÁeì}1{Ïð7{_™}8ØûböNý eï‹Ù;µ«”½/fïtá­ì}1{§; eï‹Ù;u#•½/fïIp%ìΪÆÞ³wØù½/fï¸ó7¨ ½ç[ƒ³÷ÅìŽÊÞ³÷|çwö¾˜½ÃyÀØûböžßQ8{_ÌÞéŽBÙûböNMleï‹Ù{6ÎÞ³wj³({_ÌÞ!lŒ½/fï6ÆÞ³÷<©8{_ÌÞiÏPö¾˜½Ó}¹²÷Åì=:gï‹Ù{^I:{_ÌÞó°qö¾˜½Ó)TÙûböacì}1{‡°1ö¾˜½ÓåEÉÃædïñòâdïù^äì}1{O¢.aïtÎPö¾˜½CR1ö¾˜½S©¡ì}1{‡JÒØûbö›‰±÷Åì–µ±÷Åì=»d¸Ù;5Ç•½/fï´g({_ÌÞ³Jòdï‹Ù;–ÂÞ³wXüÆÞ³w*5ú€«³wXüÆÞ³wÜ3„½/fïI{±÷ÅìêXcï‹Ùû9þøÛÞÈñÇßö¾@Ž?þ¶wyøMì}1{—‡ßÄÞ³wyøMì}1{—“ý&ö¾˜½Ë‚ÝÄÞ³w¹ØÄÞ³wYï›Øûbö.»Á&ö¾˜½KºØÄÞ³wÙL6±÷Åì]²Í&ö¾˜½Ë­Æ&ö¾˜½K²ÚÄÞ³wÙ 7±÷Åì]rÝ&ö¾˜½K´‰½/fï’*7±÷Åì]¶ñMì}1{—L»‰½/fïRÜobï‹Ùû¾“ÕÅÞ7³÷}§‹‹½ofï;[ï{ßÌÞ÷½`/ö¾™½ï{É\ì}3{ßwÌ_ì}3{ßwÔ]ì}3{ßwØ\ì}3{ßÉw³÷}ïE{ßÌÞ!:Œ½ofï;Iç'{ßÌÞw’Oö¾™½Ct{ßìÖóèpöþ2Üß±÷Íì=‰Ž‹½ofïIVHØ{>½ÎÞ7³÷dz/ö¾™½'Ó{±÷Íì=Ÿgï›Ù;̱÷ÍìæGÙûfö¾³ñbïÛ½ofïYr>Ùûföž'ggï›Ùûþd‹ÔÙûfö¾?i 7ö¾™½Cr6ö¾™½Cr6ö¾™½ï¤†¿Ù{–ÂOö¾™½'Ó{±÷Íì=Ÿ^gï›Ù{>½ÎÞ7³w˜^cï›Ùûþä;´²÷Íì}Ò5nì}3{ߟ$ö¾™½çóîì}3{O‚ëbï›Ù;„±÷ÍìÂÆØûföž‡³÷ÍìÃFØûföNa£ì}3{‡°1ö¾™½§as°÷Íì= ›‹½ofï6ÂÞ7³÷ýÉÎÎÞ7³÷Ø»ý½ÎÞ!9{·éuöþý†l‘{÷7oìý{¸g.eïú{§ä¬ìÝÃÆØ;%geïºüöþýêš.¿ƒ½§)ü`ï‚ÆÞ³é=ÙûñÊÞaz½Û8{‡é5önÿ*gï4½ÊÞåNöþ=üØ¡…½ûÎbìý{ø‘¹„½û{ÿ5Ü‚ÀÙ»ÌûÉÞaÞ½iWÙ{\'{÷taìÂFÙ»½:gï6ÊÞýï5öacìýøW){ç°ùfïú{ǰönÿvgï6ÊÞd¥ì=gïš.öž…ÍÉÞý_eìÃæ›½ûÄ{ÿ>ŽãÄ7{÷,fìÂÆØ»ÿ½ÆÞ¹ÒÿfïÇŒ*{Ïj…“½EøÎÞü±™({?Êà–>¼G‡²wßÊŒ½§ÛøÅÞ©VPö~ìÊÞ©ÒWöî;¡±wH*ÆÞíÍ;{§RPÙ»¿:~ÔIÂÞõöÎYa¤Yá`gke½Ë¼Ÿì²‚±÷£ºPöNDeï~º5öŽa#ìÝOŽÆÞ!lŒ½û{‡°1önßîìÂFÙ»§scïp1ö~lã;û·IEÙ»Ÿn½SRQöî×ÆÞ³||³w¼\ö.p²wÚr”½{>6öŽ[ް÷³*Ùð#9 {÷ ÕØ;V*ÂÞÏt>²áõzÆôÖÉÙ;æ$é[Ì;{§JEÙ»—o+ývߘŒ½k{°÷ôöá`ï¾dŒ½SRQö~¼eïTà*{?ï¼Ò‡÷7¤ìÝ“Š±wH*ÆÞ}JŒ½ã­“°÷3k6ÜþíÆÞýÌnìn5”½Û­†³÷lÉÜì“аw»rvöNÑ¡ìÝÿ^cïxüö®÷ð{‡è0öî¹ÎØ;žš…½[ÎÎÞ£ÃØû‘¨•½Ct{·ÇröŽ[ްwÝröž­Œ›½ó–ÓóÓ­³w*D•½Õ½Óô*{÷áÆÞaz½¯²÷|z½[޲wlH{÷%cì)ÂÞ­Švöžmx7{‡rÕØûqˆUöN…²wÿcïTQ({÷ZÁØ;TÆÞ-é;{§S޲w[ÖÎÞigQöî…±÷ïáýØ<¿Ù»LÜÉÞ)¸”½û¾fì‚KÙ»ÆüÁÞÓüÅÞ³­ádï×dÃÏ[Áoöî‰ÏØ;¶«„½^˾ýÜ„½{7ÅØ;ÞQ{?b^Ù;v#…½Ëœì= ®›½ÓYUÙû›ÊÞiçWöîûš±wÞùÔ…ÆÞak0ön«×Ù;'„½{Aoìv~cï~GaìÎÊÞÏqöo÷Ejì]çý`ïxG!ìý¸yQöŽMlaïç!)ýöîŰ÷³Çš?Ú,ÂÞ}¸±w eïÞ3öNa£ìý( JöíçÖ ìÝÓ…±wÜ3„½G)eïx_.ìýxó+ûv:cïzÎ8Ø;T’ÆÞO2S²áöo7ö~öˆj6ü8… {?®Û•~SØ({÷"ÏØ;…²÷ã¤ì//J6{ÿ«—{‡½Èػͨ³÷,ênöŽç aïvÔuöNIEÙûñ÷*{ÇRCØûÙèȾý¨$•½#ë º¹4ö~„öJ‡G)aï6qÎÞÓK†‹½cs\ØûÙA,Ùð³/´,~eïi%y°÷ƒõ¬ôáÏR㛽û’±wZüÊÞÏ{íìÛÏR£è±{§Å¯ìݦ×Ù;ïßìÝÏXÆÞ³:ödïG¾³y?;±ÂÞ5+ì=º?‡çúÛÞÓ‹Ï?®¿í=WAOßþ÷ãáØûõ÷~³w}x^x¸=< ¯<ÜNö0¼ñp;úÁðÎÇ^ ÀðÁíF„ᓇ/Ý `øâáÖËá‡k¯à ?=¼±wÍ60œ£Îoa8Gß:ÁpŽ:¿W€áu~ì…áua†sÔ…±ÎQçu ç¨óm†sÔk1°wþ¿œ'«‹½³÷¸ÓÅÅÞƒÙ{dëý`ïÁì=î{±÷`ö÷’¹Ø{0{;æ/öÌÞ㎺‹½³÷¸ÃæbïÁì=’=îfïqïE{fïÆÞƒÙ{$éüdïÁì=’||²÷`öÑaì=Ø­çÑáìýe¸¿!cïÁì=‰Ž‹½³÷$+$ì=Ÿ^gïÁì=™Þ‹½³÷dz/öÌÞóùqöÌÞa~Œ½³wšeïÁì=²ñbïÛ½³÷,9Ÿì=˜½çÉÙÙ{0{O¶H½³÷ø¤)ÜØ{0{‡älì=˜½Cr6öÌÞ#©áoöž¥ð“½³÷dz/öÌÞóéuöÌÞóéuöÌÞaz½³÷øä;´²÷`öŸt{fïñI‚à`ïÁì=ŸwgïÁì= ®‹½³wcïÁìÂÆØ{0{ÏÃÆÙ{0{ǰöÌÞ)l”½³wcïÁì= ›ƒ½³÷$l.öÌÞ1l„½³÷ødçgïÁì=gïÁì+}aïÁì=©.öÌÞa31öÌÞa31öÌÞ³müfïP+{fïPé{fïyRqöÌÞ¡4öÌÞ!:Œ½³wÌ #Í '{ϳ‚³÷`öNYAÙ{0{ϳ‚³÷`öDcïÁìÂFÙ{0{ÏÃÆÙ{0{ÏÃÆÙ{0{‡°1öÌÞóˆ³÷`öIÅØ{0{‡¤bì=˜½'ù8aït¹¤ì=˜½Ã–cì=˜½Ó–£ì=˜½ÃñÔØ{0{§JEÙ{0{ÇJEØ{0{§œ¤ã`ö•б÷`öžæ¤ƒ½³÷ìöádïÁì’б÷`ö®±÷`ö®±÷`öž'gïÁìn”½³÷<©8{fïp«aì=˜½'K&aï”T”½³wˆcïÁìŽ?ÊÞƒÙ{ÎÞƒÙ;𕽳÷<:œ½³÷<:œ½³wÚr”½³÷de$ì·œžŸnö…¨±÷`öÓkì=˜½çÓëì=˜½§Ó{°÷`öN eïÁìŽ)ÊÞƒÙ{²á%ì=/W½³w¨(Œ½³w¨(Œ½³÷¼¢pöÌÞá”cì=˜½ÃÎbì=˜½ÇÝ¢½Ø{0{‡à2öÌÞ!¸Œ½³÷ì³÷ÈìÃÁÞƒÙ;õ3”½³wjW){fïtá­ì=˜½Ó…²÷`öNÝHeïÁì= ®„½ÃYÕØ{0{‡ßØ{0{Ç¿A]èì=ßœ½³w:N({fïùÎïì=˜½ÃyÀØ{0{Ïï(œ½³wº£PöÌÞ©‰­ì=˜½çaãì=˜½S›EÙ{0{‡°1öÌÞ!lŒ½³÷<©8{fï´g({fït_®ì=˜½çQçì=˜½ç•¤³÷`öž‡³÷`öN§PeïÁìÂÆØ{0{‡°1öÌÞéò¢äas²÷¿xyq²÷|/röÌÞ“¨KØ;3”½³wH*ÆÞƒÙ;•ÊÞƒÙ;T’ÆÞƒÙ;l&ÆÞƒÙ;,kcïÁì=»d¸Ù;5Ç•½³wÚ3”½³÷¬’<Ù{0{ÇRCØ{0{‡Åoì=˜½S©ÑôX½Ãâ7öÌÞqÏöÌÞ“:öbïÁìêXcïÁì=@Ž¿ý¶÷ôâóY̓ ú¼þ¶w}øBì=˜½ËÃbïÁì]¾{fïr²/ÄÞƒÙ»,ØBì=˜½ËÅ@!öÌÞe½bïÁì]vƒBì=˜½Kº(ÄÞƒÙ»l&…Ø{0{—lSˆ½³w¹Õ(ÄÞƒÙ»$«Bì=˜½ËNXˆ½³wÉu…Ø{0{—:©{fï’* ±÷`ö.Ûx!öÌÞ%ÓbïÁì]ŠûBì=˜½—;Y]ì½0{/wº¸Ø{aö^²õ~°÷Âì½Ü öbï…Ù{¹—ÌÅÞ ³÷rÇüÅÞ ³÷rGÝÅÞ ³÷r‡ÍÅÞ ³÷’ìq7{/÷^t±÷Âì¢ÃØ{aö^’t~²÷Âì½$ùødï…Ù;D‡±÷Ân=gï/Ãý {/ÌÞ“è¸Ø{aöžd…„½çÓëì½0{O¦÷bï…Ù{2½{/ÌÞóùqö^˜½Ãü{/ÌÞi~”½fï%«/ö¹ÝØ{aöž%瓽fïyrvö^˜½—O¶H½fï哦pcï…Ù;$gcï…Ù;$gcï…Ù{Ijø›½g)üdï…Ù{2½{/ÌÞóéuö^˜½çÓëì½0{‡é5ö^˜½—O¾C+{/ÌÞË']ãÆÞ ³÷òI‚à`ï…Ù{>ïÎÞ ³÷$¸.ö^˜½CØ{/ÌÞ!lŒ½fïyØ8{/ÌÞ1l„½fï6ÊÞ ³wcï…Ù{6{/ÌÞ“°¹Ø{aöŽa#ì½0{/Ÿì<àì½0{ÏÃÆÙ{aöŽ•¾°÷Âì=©.ö^˜½Ãfbì½0{‡ÍÄØ{aöžmã7{‡ZÁØ{aö•¾±÷Âì=O*ÎÞ ³w(½fïÆÞ ³wÌ #Í '{ϳ‚³÷Â첂²÷Âì=Ï ÎÞ ³w8 {/ÌÞ)l”½fïyØ8{/ÌÞó°qö^˜½CØ{/ÌÞóˆ³÷Âì’б÷Âì’б÷Âì=ÉÇ {§Ë%eï…Ù;l9ÆÞ ³wÚr”½fïp<5ö^˜½S¥¢ì½0{ÇJEØ{aöN9I;Ç…Ù;T*ÆÞ ³÷4'ì½0{ÏnNö^˜½CR1ö^˜½Ckì½0{‡ר{aöž'gï…Ù;Ý:){/ÌÞó¤âì½0{‡[ cï…Ù{²döNIEÙ{aöÑaì½0{§ã²÷Âì=gï…Ù;š•½fïyt8{/ÌÞóèpö^˜½Ó–£ì½0{OVFÂÞqËéùéö`ïPˆ{/ÌÞaz½fïùô:{/ÌÞÓé=Ø{aöN eï…Ù;S”½fïɆ—°÷¼\uö^˜½CEaì½0{‡ŠÂØ{aöžWÎÞ ³w8å{/ÌÞag1ö^˜½—»E{±÷Âì‚ËØ{aöÁeì½0{Ïð7{/™}8Ø{aöNý eï…Ù;µ«”½fïtá­ì½0{§; eï…Ù;u#•½fïIp%ìΪÆÞ ³wØù½fï¸ó7¨ ½ç[ƒ³÷ÂìŽÊÞ ³÷|çwö^˜½ÃyÀØ{aöžßQ8{/ÌÞéŽBÙ{aöNMleï…Ù{6ÎÞ ³wj³({/ÌÞ!lŒ½fï6ÆÞ ³÷<©8{/ÌÞiÏPö^˜½Ó}¹²÷Âì=:gï…Ù{^I:{/ÌÞó°qö^˜½Ó)TÙ{aöacì½0{‡°1ö^˜½ÓåEÉÃædïñòâdïù^äì½0{O¢.aïtÎPö^˜½CR1ö^˜½S©¡ì½0{‡JÒØ{aö›‰±÷Âì–µ±÷Âì=»d¸Ù;5Ç•½fï´g({/ÌÞ³Jòdï…Ù;–ÂÞ ³wXüÆÞ ³w*5ú€«³wXüÆÞ ³wÜ3„½fïI{±÷ÂìêXcï…Ù{9þøÛÞ ÈñÇßö^@Žóðªì]¾{/ÌÞåá+±÷Âì]¾{/ÌÞåd_‰½fï²`+±÷Âì].*±÷Âì]Ö{%ö^˜½ËnP‰½fï’.*±÷Âì]6“Jì½0{—lS‰½fïr«Q‰½fï’¬*±÷Âì]vÂJì½0{—\W‰½fïR'Ubï…Ù»¤ÊJì½0{—m¼{/ÌÞ%ÓVbï…Ù»÷•Ø{aö^ïdu±÷Êì½Þéâbï•Ù{ÍÖûÁÞ+³÷z/Ø‹½Wfïõ^2{¯ÌÞëó{¯ÌÞëu{¯ÌÞë6{¯ÌÞk²ÇÝì½Þ{ÑÅÞ+³wˆcï•Ù{MÒùÉÞ+³÷šä㓽WfïÆÞ+»õ<:œ½¿ ÷7dì½2{O¢ãbï•Ù{’öžO¯³÷Êì=™Þ‹½WfïÉô^ì½2{ÏçÇÙ{eöócì½2{§ùQö^™½×¬F¼Ø;ävcï•Ù{–œOö^™½çÉÙÙ{eö^?Ù"uö^™½×OšÂ½WfWfWfï5©áoöž¥ð“½WfïÉô^ì½2{ϧ×Ù{eöžO¯³÷Êì¦×Ø{eö^?ù­ì½2{¯Ÿt{¯ÌÞë' ‚ƒ½Wfïù¼;{¯ÌÞ“àºØ{eöacì½2{‡°1ö^™½çaãì½2{ǰö^™½SØ({¯ÌÞ!lŒ½WfïiØì½2{OÂæbï•Ù;†°÷Êì½~²ó€³÷Êì=gï•Ù;VúÂÞ+³÷¤V¸Ø{eö›‰±÷Êì6cï•Ù{¶ßìjcï•Ù;TúÆÞ+³÷<©8{¯ÌÞ¡4ö^™½Ct{¯ÌÞ1+Œ4+œì=Ï ÎÞ+³wÊ ÊÞ+³÷<+8{¯ÌÞá€hì½2{§°Qö^™½çaãì½2{ÏÃÆÙ{eöacì½2{Ï ÎÞ+³wH*ÆÞ+³wH*ÆÞ+³÷$'ì.—”½Wfï°å{¯ÌÞiËQö^™½ÃñÔØ{eöN•в÷Êì+aï•Ù;å$íWfïP©{¯ÌÞÓœt°÷Êì=»}8Ù{eöIÅØ{eö®±÷Êì \cï•Ù{žTœ½Wfïtë¤ì½2{Ï“Š³÷Êìn5Œ½WfïÉ’IØ;%eï•Ù;D‡±÷ÊìŽ?ÊÞ+³÷<:œ½WfïtjVö^™½çÑáì½2{Ï£ÃÙ{eöN[޲÷Êì=Y {Ç-§ç§Ûƒ½C!jì½2{‡é5ö^™½çÓëì½2{O§÷`ï•Ù;5$”½WfïtLQö^™½'^ÂÞórÕÙ{eö…±÷Êì* cï•Ù{^Q8{¯ÌÞá”cì½2{‡ÅØ{eö^ïíÅÞ+³w.cï•Ù;—±÷Êì=;Àßì½föá`ï•Ù;õ3”½WfïÔ®Rö^™½Ó…·²÷Êìî(”½WfïÔTö^™½'Á•°w8«{¯ÌÞaç7ö^™½ãÎß .töžo ÎÞ+³w:N({¯ÌÞóßÙ{eöçcï•Ù{~Gáì½2{§; eï•Ù;5±•½WfïyØ8{¯ÌÞ©Í¢ì½2{‡°1ö^™½CØ{¯ÌÞó¤âì½2{§=CÙ{eöN÷åÊÞ+³÷<ꜽWfïy%éì½2{ÏÃÆÙ{eöN§Peï•Ù;„±÷ÊìÂÆØ{eöN—%›“½ÿÅË‹“½ç{‘³÷Êì=‰º„½Ó9CÙ{eöIÅØ{eöN¥†²÷Êì*Icï•Ù;l&ÆÞ+³wXÖÆÞ+³÷ì’áfïÔWö^™½Óž¡ì½2{Ï*É“½WfïXj{¯ÌÞañ{¯ÌÞ©Ôèz¬ÎÞañ{¯ÌÞqÏö^™½'uìÅÞ+³w¨c½Wfïäøão{¯ ÇŸ†ƒ zþ÷ãá±÷Êì]¾{¯ÌÞåá±÷Êì]NöØ{eö. ¶{¯ÌÞåb {¯ÌÞe½7bï•Ù»ìØ{eö.é¢{¯ÌÞe3iÄÞ+³wÉ6Ø{eö.·Ø{eö.ɪ{¯ÌÞe'lÄÞ+³wÉuØ{eö.uR#ö^™½KªlÄÞ+³wÙÆ±÷Êì]2m#ö^™½Kq߈½WfïíNV{oÌÞÛ..öÞ˜½·l½ì½1{o÷‚½Ø{cöÞî%s±÷Æì½Ý1±÷Æì½ÝQw±÷Æì½Ýas±÷Æì½%{ÜÍÞÛ½]ì½1{‡è0öÞ˜½·$Ÿì½1{oI>>Ù{cöÑaì½±[Ï£ÃÙûËpCÆÞ³÷$:.öÞ˜½'Y!aïùô:{oÌÞ“é½Ø{cöžLïÅÞ³÷|~œ½7fï0?ÆÞ³wšeïÙ{ËjÄ‹½Cn7öÞ˜½gÉùdïÙ{žœ½7fïí“-RgïÙ{û¤)ÜØ{cöÉÙØ{cöÉÙØ{cöÞ’þfïY ?Ù{cöžLïÅÞ³÷|z½7fïùô:{oÌÞaz½7fïí“ïÐÊÞ³÷öI׸±÷Æì½}’ 8Ø{cöžÏ»³÷Æì= ®‹½7fï6ÆÞ³wcïÙ{6ÎÞ³w aïÙ;…²÷ÆìÂÆØ{cöž†ÍÁÞ³÷$l.öÞ˜½cØ{oÌÞÛ';8{oÌÞó°qöÞ˜½c¥/ì½1{Oj…‹½7fï°™{oÌÞa31öÞ˜½gÛøÍÞ¡V0öÞ˜½C¥oì½1{Ï“Š³÷ÆìJAcïÙ;D‡±÷Æì³ÂH³ÂÉÞó¬àì½1{§¬ ì½1{ϳ‚³÷ÆìˆÆÞ³w eïÙ{6ÎÞ³÷½ÎÞ³÷tzöÞ˜½SCBÙ{cöNÇeïÙ{²á%ì=/W½7fïPQ{oÌÞ¡¢0öÞ˜½ç…³÷ÆìN9ÆÞ³wØYŒ½7fïínÑ^ì½1{‡à2öÞ˜½Cp{oÌÞ³üÍÞ[föÞ˜½S?CÙ{cöNí*eïÙ;]x+{oÌÞéŽBÙ{cöNÝHeïÙ{\ {‡³ª±÷Æìv~cïÙ;îü êBgïùÖàì½1{§ã„²÷Æì=ßù½7fïp0öÞ˜½çwÎÞ³wº£PöÞ˜½S[Ù{cöž‡³÷ÆìÚ,ÊÞ³wcïÙ;„±÷Æì=O*ÎÞ³wÚ3”½7fït_®ì½1{Ï£ÎÙ{cöžW’ÎÞ³÷ Çê쿱÷Æì÷ aïÙ{RÇ^ì½1{‡:ÖØ{cöÞ@Ž?þ¶÷rüñ·½7ã¿í]¾{oÌÞåá;±÷Æì]¾{oÌÞåd߉½7fï²`;±÷Æì].:±÷Æì]Ö{'öÞ˜½ËnЉ½7fï’.:±÷Æì]6“Nì½1{—lÓ‰½7fïr«Ñ‰½7fï’¬:±÷Æì]vÂNì½1{—\׉½7fïR'ubïÙ»¤ÊNì½1{—m¼{oÌÞ%ÓvbïÙ»÷Ø{cöÞïdu±÷Îì½ßéâbïÙ{ÏÖûÁÞ;³÷~/Ø‹½wfïý^2{ïÌÞûó{ïÌÞûu{ïÌÞû6{ïÌÞ{²ÇÝì½ß{ÑÅÞ;³wˆcïÙ{OÒùÉÞ;³÷žä㓽wfïÆÞ;»õ<:œ½¿ ÷7dì½3{O¢ãbïÙ{’öžO¯³÷Îì=™Þ‹½wfïÉô^ì½3{ÏçÇÙ{göócì½3{§ùQöÞ™½÷¬F¼Ø;ävcïÙ{–œOöÞ™½çÉÙÙ{göÞ?Ù"uöÞ™½÷OšÂ½wfwfwfï=©áoöž¥ð“½wfïÉô^ì½3{ϧ×Ù{göžO¯³÷Îì¦×Ø{göÞ?ù­ì½3{ïŸt{ïÌÞû' ‚ƒ½wfïù¼;{ïÌÞ“àºØ{göacì½3{‡°1öÞ™½çaãì½3{ǰöÞ™½SØ({ïÌÞ!lŒ½wfïiØì½3{OÂæbïÙ;†°÷Îì½²ó€³÷Îì=gïÙ;VúÂÞ;³÷¤V¸Ø{gö›‰±÷Îì6cïÙ{¶ßìjcïÙ;TúÆÞ;³÷<©8{ïÌÞ¡4öÞ™½Ct{ïÌÞ1+Œ4+œì=Ï ÎÞ;³wÊ ÊÞ;³÷<+8{ïÌÞá€hì½3{§°QöÞ™½çaãì½3{ÏÃÆÙ{göacì½3{Ï ÎÞ;³wH*ÆÞ;³wH*ÆÞ;³÷$'ì.—”½wfï°å{ïÌÞiËQöÞ™½ÃñÔØ{göN•в÷Îì+aïÙ;å$íwfïP©{ïÌÞÓœt°÷Îì=»}8Ù{göIÅØ{gö®±÷Îì \cïÙ{žTœ½wfïtë¤ì½3{Ï“Š³÷Îìn5Œ½wfïÉ’IØ;%eïÙ;D‡±÷ÎìŽ?ÊÞ;³÷<:œ½wfïtjVöÞ™½çÑáì½3{Ï£ÃÙ{göN[޲÷Îì=Y {Ç-§ç§Ûƒ½C!jì½3{‡é5öÞ™½çÓëì½3{O§÷`ïÙ;5$”½wfïtLQöÞ™½'^ÂÞórÕÙ{gö…±÷Îì* cïÙ{^Q8{ïÌÞá”cì½3{‡ÅØ{göÞïíÅÞ;³w.cïÙ;—±÷Îì=;Àßì½göá`ïÙ;õ3”½wfïÔ®RöÞ™½Ó…·²÷Îìî(”½wfïÔTöÞ™½'Á•°w8«{ïÌÞaç7öÞ™½ãÎß .töžo ÎÞ;³w:N({ïÌÞóßÙ{göçcïÙ{~Gáì½3{§; eïÙ;5±•½wfïyØ8{ïÌÞ©Í¢ì½3{‡°1öÞ™½CØ{ïÌÞó¤âì½3{§=CÙ{göN÷åÊÞ;³÷<ꜽwfïy%éì½3{ÏÃÆÙ{göN§PeïÙ;„±÷ÎìÂÆØ{göN—%›“½ÿÅË‹“½ç{‘³÷Îì=‰º„½Ó9CÙ{göIÅØ{göN¥†²÷Îì*IcïÙ;l&ÆÞ;³wXÖÆÞ;³÷ì’áfïÔWöÞ™½Óž¡ì½3{Ï*É“½wfïXj{ïÌÞañ{ïÌÞ©Ôèz¬ÎÞañ{ïÌÞqÏöÞ™½'uìÅÞ;³w¨c½wfïäøão{ï ÇŸÔ<¨ ?Þ•½ËÃbïÙ»<ü öÞ™½ËÃbïÙ»œì±÷Îì]ì öÞ™½ËÅÀ öÞ™½ËzÄÞ;³wÙ ±÷Îì]ÒÅ öÞ™½Ëf2ˆ½wfï’m±÷Îì]n5±÷Îì]’Õ öÞ™½ËN8ˆ½wfï’ë±÷Îì]ê¤Aì½3{—T9ˆ½wfï²bïÙ»dÚAì½3{—â~{ïÌÞǬ.ö>˜½;]\ì}0{Ùz?Øû`ö>î{±÷Áì}ÜKæbïƒÙû¸cþbïƒÙû¸£îbïƒÙû¸ÃæbïƒÙûHö¸›½{/ºØû`öÑaì}0{I:?Ùû`ö>’||²÷Áì¢ÃØû`·žG‡³÷—áþ†Œ½fïIt\ì}0{O²BÂÞóéuö>˜½'Ó{±÷Áì=™Þ‹½fïùü8{ÌÞa~Œ½fï4?ÊÞ³÷‘Õˆ{‡Ünì}0{Ï’óÉÞ³÷<9;{ÌÞÇ'[¤ÎÞ³÷ñIS¸±÷Áì’³±÷Áì’³±÷Áì}$5üÍÞ³~²÷Áì=™Þ‹½fïùô:{ÌÞóéuö>˜½Ãô{ÌÞÇ'ß¡•½fïã“®qcïƒÙûø$Ap°÷Áì=ŸwgïƒÙ{\{ÌÞ!lŒ½fï6ÆÞ³÷˜½Ovpö>˜½çaãì}0{ÇJ_Øû`öžÔ {ÌÞa31ö>˜½Ãfbì}0{϶ñ›½C­`ì}0{‡Jߨû`öž'gïƒÙ;”‚ÆÞ³wˆcïƒÙ;f…‘f…“½çYÁÙû`öNYAÙû`öžggïƒÙ;½fï6ÊÞ³÷˜½c¥"ì}0{§œ¤ãÁì*cïƒÙ{š“ö>˜½g·'{ÌÞ!©{ÌÞ¡À5ö>˜½Ckì}0{Ï“Š³÷Áìn”½fïyRqö>˜½Ã­†±÷Áì=Y2 {§¤¢ì}0{‡è0ö>˜½ÓñGÙû`öžG‡³÷ÁìNÍÊÞ³÷<:œ½fïyt8{ÌÞiËQö>˜½'+#aï¸åôüt{°w(D½fï0½ÆÞ³÷|z½fïéôì}0{§†„²÷ÁìŽ)ÊÞ³÷dÃKØ{^®:{ÌÞ¡¢0ö>˜½CEaì}0{Ï+ gïƒÙ;œrŒ½fï°³{ÌÞÇÝ¢½Øû`öÁeì}0{‡à2ö>˜½gø›½Ì>ì}0{§~†²÷ÁìÚUÊÞ³wºðVö>˜½Ó…²÷Á캑ÊÞ³÷$¸ögUcïƒÙ;ìüÆÞ³wÜùÔ…ÎÞó­ÁÙû`öNÇ eïƒÙ{¾ó;{ÌÞá<`ì}0{Ïï(œ½fïtG¡ì}0{§&¶²÷Áì=gïƒÙ;µY”½fï6ÆÞ³wcïƒÙ{žTœ½fï´g({ÌÞé¾\Ùû`öžG³÷Áì=¯$½fïyØ8{ÌÞéªì}0{‡°1ö>˜½CØ{ÌÞéò¢äas²÷¿xyq²÷|/rö>˜½'Q—°w:g({ÌÞ!©{ÌÞ©ÔPö>˜½C%iì}0{‡ÍÄØû`öËÚØû`öž]2ÜìšãÊÞ³wÚ3”½fïY%y²÷ÁìK aïƒÙ;,~cïƒÙ;•}@ÕÙ;,~cïƒÙ;îÂÞ³÷¤Ž½Øû`öu¬±÷Áì}€ümïäøão{ Çÿù·ÿýxøIì}0{—‡ŸÄÞ³wyøIì}0{—“ý$ö>˜½Ë‚ÄÞ³w¹˜ÄÞ³wYï“Øû`ö.»Á$ö>˜½Kº˜ÄÞ³wÙL&±÷Áì]²Í$ö>˜½Ë­Æ$ö>˜½K²šÄÞ³wÙ '±÷Áì]rÝ$ö>˜½K4‰½fï’*'±÷Áì]¶ñIì}0{—L;‰½fïRÜObïƒÙû¼“ÕÅÞ'³÷y§‹‹½Ofï3[ï{ŸÌÞç½`/ö>™½Ï{É\ì}2{ŸwÌ_ì}2{ŸwÔ]ì}2{ŸwØ\ì}2{ŸÉw³÷yïE{ŸÌÞ!:Œ½Ofï3Iç'{ŸÌÞg’Oö>™½Ct{ŸìÖóèpöþ2Üß±÷Éì=‰Ž‹½OfïIVHØ{>½ÎÞ'³÷dz/ö>™½'Ó{±÷Éì=Ÿgï“Ù;̱÷ÉìæGÙûdö>³ñbïÛ½OfïYr>Ùûdöž'ggï“Ùûüd‹ÔÙûdö>?i 7ö>™½Cr6ö>™½Cr6ö>™½Ï¤†¿Ù{–ÂOö>™½'Ó{±÷Éì=Ÿ^gï“Ù{>½ÎÞ'³w˜^cï“Ùûüä;´²÷Éì}~Ò5nì}2{ŸŸ$ö>™½çóîì}2{O‚ëbï“Ù;„±÷ÉìÂÆØûdöž‡³÷ÉìÃFØûdöNa£ì}2{‡°1ö>™½§as°÷Éì= ›‹½Ofï6ÂÞ'³÷ùÉÎÎÞ'³÷™½Ã–cì}2{§-GÙûdöÇScï“Ù;U*ÊÞ'³w¬T„½Of´s<™½C¥bì}2{OsÒÁÞ'³÷ìöádï“Ù;$cï“Ù;¸ÆÞ'³w(p½OfïyRqö>™½Ó­“²÷Éì=O*ÎÞ'³w¸Õ0ö>™½'K&aï”T”½OfïÆÞ'³w:þ({ŸÌÞóèpö>™½Ó©YÙûdöžG‡³÷Éì=gï“Ù;m9ÊÞ'³÷de$ì·œžŸnö…¨±÷Éì¦×ØûdöžO¯³÷Éì=Þƒ½OfïÔPö>™½Ó1EÙûdöžlx {ÏËUgï“Ù;TÆÞ'³w¨(Œ½OfïyEáì}2{‡Sޱ÷Éìvcï“Ùû¼[´{ŸÌÞ!¸Œ½Ofï\ÆÞ'³÷ì³÷™Ù‡ƒ½OfïÔÏPö>™½S»JÙûdöNÞÊÞ'³wº£Pö>™½S7RÙûdöžWÂÞá¬jì}2{‡ßØûdöŽ;ƒºÐÙ{¾58{ŸÌÞé8¡ì}2{Ïw~gï“Ù;œŒ½Ofïù…³÷Éìî(”½OfïÔÄVö>™½çaãì}2{§6‹²÷ÉìÂÆØûdöacì}2{Ï“Š³÷Éìö eï“Ù;Ý—+{ŸÌÞó¨sö>™½ç•¤³÷Éì=gï“Ù;B•½Ofï6ÆÞ'³wcï“Ù;]^”™½c©!ì}2{‡Åoì}2{§R£è±:{‡Åoì}2{Ç=CØûdöžÔ±{ŸÌÞ¡Ž5ö>™½Oã¿í}‚*èóüÛÞåá±÷Éì]~{ŸÌÞåá±÷Éì]Nö‹Øûdö. v{ŸÌÞåb`{ŸÌÞe½/bï“Ù»ì‹Øûdö.éb{ŸÌÞe3YÄÞ'³wÉ6‹Øûdö.·‹Øûdö.Éj{ŸÌÞe'\ÄÞ'³wÉu‹Øûdö.uÒ"ö>™½Kª\ÄÞ'³wÙÆ±÷Éì]2í"ö>™½Kq¿ˆ½OfïëNV{_ÌÞ×..ö¾˜½¯l½ì}1{_÷‚½Øûbö¾î%s±÷Åì}Ý1±÷Åì}ÝQw±÷Åì}Ýas±÷Åì}%{ÜÍÞ×½]ì}1{‡è0ö¾˜½¯$Ÿì}1{_I>>ÙûböÑaì}±[Ï£ÃÙûËpCÆÞ³÷$:.ö¾˜½'Y!aïùô:{_ÌÞ“é½ØûböžLïÅÞ³÷|~œ½/fï0?ÆÞ³wšeï‹ÙûÊjÄ‹½Cn7ö¾˜½gÉùdï‹Ù{žœ½/fïë“-Rgï‹Ùûú¤)ÜØûböÉÙØûböÉÙØûbö¾’þfïY ?ÙûböžLïÅÞ³÷|z½/fïùô:{_ÌÞaz½/fïë“ïÐÊÞ³÷õI׸±÷Åì}}’ 8ØûböžÏ»³÷Åì= ®‹½/fï6ÆÞ³wcï‹Ù{6ÎÞ³w aï‹Ù;…²÷ÅìÂÆØûböž†ÍÁÞ³÷$l.ö¾˜½cØ{_ÌÞ×';8{_ÌÞó°qö¾˜½c¥/ì}1{Oj…‹½/fï°™{_ÌÞa31ö¾˜½gÛøÍÞ¡V0ö¾˜½C¥oì}1{Ï“Š³÷ÅìJAcï‹Ù;D‡±÷Åì³ÂH³ÂÉÞó¬àì}1{§¬ ì}1{ϳ‚³÷ÅìˆÆÞ³w eï‹Ù{6ÎÞ³÷½ÎÞ³÷tzö¾˜½SCBÙûböNÇeï‹Ù{²á%ì=/W½/fïPQ{_ÌÞ¡¢0ö¾˜½ç…³÷ÅìN9ÆÞ³wØYŒ½/fïënÑ^ì}1{‡à2ö¾˜½Cp{_ÌÞ³üÍÞWfö¾˜½S?CÙûböNí*eï‹Ù;]x+{_ÌÞéŽBÙûböNÝHeï‹Ù{\ {‡³ª±÷Åìv~cï‹Ù;îü êBgïùÖàì}1{§ã„²÷Åì=ßù½/fïp0ö¾˜½çwÎÞ³wº£Pö¾˜½S[Ùûböž‡³÷ÅìÚ,ÊÞ³wcï‹Ù;„±÷Åì=O*ÎÞ³wÚ3”½/fït_®ì}1{Ï£ÎÙûböžW’ÎÞ³÷ Çê쿱÷Åì÷ aï‹Ù{RÇ^ì}1{‡:ÖØûbö¾@Ž?þ¶÷rüñ·½/ã<¼*{—‡ßÄÞ³wyøMì}1{—‡ßÄÞ³w9Ùobï‹Ù»,ØMì}1{—‹Mì}1{—õ¾‰½/fï²lbï‹Ù»¤‹Mì}1{—Íd{_ÌÞ%Ûlbï‹Ù»Üjlbï‹Ù»$«Mì}1{—p{_ÌÞ%×mbï‹Ù»ÔI›Øûbö.©r{_ÌÞeßÄÞ³wÉ´›Øûbö.Åý&ö¾˜½ï;Y]ì}3{ßwº¸Øûfö¾³õ~°÷Íì}ß öbï›Ùû¾—ÌÅÞ7³÷}ÇüÅÞ7³÷}GÝÅÞ7³÷}‡ÍÅÞ7³÷ìq7{ß÷^t±÷Íì¢ÃØûfö¾“t~²÷Íì}'ùødï›Ù;D‡±÷Ín=gï/Ãý {ßÌÞ“è¸Øûföžd…„½çÓëì}3{O¦÷bï›Ù{2½{ßÌÞóùqö¾™½Ãü{ßÌÞi~”½ofï;«/ö¹ÝØûföž%瓽ofïyrvö¾™½ïO¶H½ofïû“¦pcï›Ù;$gcï›Ù;$gcï›ÙûNjø›½g)üdï›Ù{2½{ßÌÞóéuö¾™½çÓëì}3{‡é5ö¾™½ïO¾C+{ßÌÞ÷']ãÆÞ7³÷ýI‚à`ï›Ù{>ïÎÞ7³÷$¸.ö¾™½CØ{ßÌÞ!lŒ½ofïyØ8{ßÌÞ1l„½ofï6ÊÞ7³wcï›Ù{6{ßÌÞ“°¹ØûföŽa#ì}3{ߟì<àì}3{ÏÃÆÙûföŽ•¾°÷Íì=©.ö¾™½Ãfbì}3{‡ÍÄØûföžmã7{‡ZÁØûfö•¾±÷Íì=O*ÎÞ7³w(½ofïÆÞ7³wÌ #Í '{ϳ‚³÷Í첂²÷Íì=Ï ÎÞ7³w8 {ßÌÞ)l”½ofïyØ8{ßÌÞó°qö¾™½CØ{ßÌÞóˆ³÷Íì’б÷Íì’б÷Íì=ÉÇ {§Ë%eï›Ù;l9ÆÞ7³wÚr”½ofïp<5ö¾™½S¥¢ì}3{ÇJEØûföN9I;Ç›Ù;T*ÆÞ7³÷4'ì}3{ÏnNö¾™½CR1ö¾™½Ckì}3{‡רûföž'gï›Ù;Ý:){ßÌÞó¤âì}3{‡[ cï›Ù{²döNIEÙûföÑaì}3{§ã²÷Íì=gï›Ù;š•½ofïyt8{ßÌÞóèpö¾™½Ó–£ì}3{OVFÂÞqËéùéö`ïPˆ{ßÌÞaz½ofïùô:{ßÌÞÓé=ØûföN eï›Ù;S”½ofïɆ—°÷¼\uö¾™½CEaì}3{‡ŠÂØûföžWÎÞ7³w8å{ßÌÞag1ö¾™½ï»E{±÷Íì‚ËØûföÁeì}3{Ïð7{ß™}8ØûföNý eï›Ù;µ«”½ofïtá­ì}3{§; eï›Ù;u#•½ofïIp%ìΪÆÞ7³wØù½ofï¸ó7¨ ½ç[ƒ³÷ÍìŽÊÞ7³÷|çwö¾™½ÃyÀØûföžßQ8{ßÌÞéŽBÙûföNMleï›Ù{6ÎÞ7³wj³({ßÌÞ!lŒ½ofï6ÆÞ7³÷<©8{ßÌÞiÏPö¾™½Ó}¹²÷Íì=:gï›Ù{^I:{ßÌÞó°qö¾™½Ó)TÙûföacì}3{‡°1ö¾™½ÓåEÉÃædïñòâdïù^äì}3{O¢.aïtÎPö¾™½CR1ö¾™½S©¡ì}3{‡JÒØûfö›‰±÷Íì–µ±÷Íì=»d¸Ù;5Ç•½ofï´g({ßÌÞ³Jòdï›Ù;–ÂÞ7³wXüÆÞ7³w*5ú€«³wXüÆÞ7³wÜ3„½ofïI{±÷ÍìêXcï›Ùû9þøÛÞ7Èñ'5*èéÛÿî_~{ßÌÞ¿ž†®OÃ+ד= o<\~4¼óp)î <\kD>y¸lö‹†/®½¾q¸ö ~ÀðÓÃ;{ÿÎ64œ£Îni8GÝ:ÑpŽ:»W áuvì¥áuz*£¨ Ž:-¯)ê‚£Îê$ÎQgÛ8 ç¨+Úb‚á…¢î?~%8OV'{·?pöþ=¼ÛO){×?8Øû÷p}óÎÞý±Œ½ßúSÆÞýï5öþkxœÿöoöîÿvcïßÃí {?þÞ•~ûôáÂÞ—¢ìý{øö/ö.p²÷ïW'Ùæbïß?å/BÙûñ†”½St({÷°1öþ=\^ÄÁÞuøÁÞ¿ßЮìÝÞ¼³wŠeï×ceÃí {îoHÙ»ýÛ½gÑq²wŽƒ½gYáfï0½ÆÞÕ«ì=›Þ“½Ûü8{Ϧ÷dïþo7öócìýxuÊÞi~”½ûÄ{Çùö®p°÷l]Þìr»²w_ÆÞÓä|°wû{½Cr6önÓëìýû Ù"5öîoÞØû÷pÏ\ÊÞõöNÉYÙ»‡±wJÎÊÞuùìýûÕ5]~{OSøÁÞ=½gÓ{²÷㔽Ãô{·?pöÓkìÝþUÎÞiz•½Ëœìý{ø±C {÷ÅØû÷ð#s {÷?0öþk¸³w™÷“½Ã¼{?Ò®²÷,¸NöîéÂØ;…²w{uÎÞ)l”½ûßkìÂÆØûñ¯RöÎaóÍÞõöŽa#ìÝþíÎÞ)l”½ÉJÙ{6ÎÞ5]ì= ›“½û¿ÊØ;‡Í7{÷‰3öþ=|ljoöîYÌØ;„±wÿ{½s¥ÿÍÞUöžÕ '{?Šð½ùc3Qö~”Á-}xeユ{O·ñ‹½S­ ìýØ ”½S¥¯ìÝwBcïTŒ½Û›wöN¥ ²wu0ü¨“„½ëì³ÂH³ÂÁÞ!+{?ÎÖÊÞ1+{—y?Ù;dcïGu¡ìˆÊÞýtkìÃFØ»Ÿ½CØ{÷?0öacìݾÝÙ;…²wOçÆÞábìýØÆwöo?’вw?Ý{§¤¢ìݯŒ½gùøfïx¹$ì]þàdï´å({÷|lì·aïgT²áGröw¬T„½Ÿé|dÃëõŒé­“³wÌIÒ9¶˜wöN•вw/ßVúí¾1{×÷`ïéíÃÁÞ}É{§¤¢ìýx)ÊÞ©ÀUö~Þy¥ïoHÙ»'cïTŒ½û”{Ç['aïg8Öl¸ýÛ½û™ÝØ;Ýj({·[ gïÙ’¹Ù;&aïvåìì¢CÙ»ÿ½ÆÞñø#ì]ïáöÑaìÝs±w<5 {?¶œ=¼G‡±÷#Q+{‡è0önåì·aïºåì=[7{ç-§ç§[gïTˆ*{?†+{§éUöîýÃô{?þ^eïùô:{?¶eïØöîKÆØ;S„½[íì=Ûðnö媱÷ã«ì* eïþÆÞ©¢Pö±w¨(Œ½[ÒwöN§eﶬ½Ó΢ìÝ+ cïßÃû±y~³w™¸“½Sp){÷}ÍØ;—²wùƒ½§ø‹½g[ÃÉÞ¯?ȆŸ·‚ßìÝŸ±wlW {?6¼–}û¹{÷nбw¼£ö~ļ²wìF {—?8Ù{\7{§³ª²÷#6•½ÓίìÝ÷5cï¼ó7¨ ½ÃÖ`ìÝV¯³w\Û{®‚>¯¿í]>€½_ï7{ׇ‡á…‡ÛÃÃðÊÃíd÷£ ï<|èÅ <ÜjD>yøÒ݆/n½¾q¸ö ~ÀðÓÃ{×lÃ9êüV†sÔù­ ç¨ó{ÎQçÇ^ÎQÆQ`8G]K€áu^'ÁpŽ:߯a8G]±S{‡áÿñ+Áy²ºØ{0{;]\ì=˜½G¶ÞöÌÞã^°{fïq/™‹½³÷¸cþbïÁì=Ø{0{;l.öÌÞ#Ùãnö÷^t±÷`öÑaì=˜½G’ÎOöÌÞ#ÉÇ'{fïÆÞƒÝzÎÞ_†û2öÌÞ“è¸Ø{0{O²BÂÞóéuöÌÞ“é½Ø{0{O¦÷bïÁì=ŸgïÁìæÇØ{0{§ùQöÌÞ#«/ö¹ÝØ{0{Ï’óÉÞƒÙ{žœ½³÷ød‹ÔÙ{0{OšÂ½³wHÎÆÞƒÙ;$gcïÁì=’þfïY ?Ù{0{O¦÷bïÁì=Ÿ^gïÁì=Ÿ^gïÁì¦×Ø{0{O¾C+{fïñI׸±÷`öŸ$öÌÞóywöÌÞ“àºØ{0{‡°1öÌÞ!lŒ½³÷½ÎÞƒÙ{:½{fïÔPöÌÞ阢ì=˜½'^ÂÞórÕÙ{0{‡ŠÂØ{0{‡ŠÂØ{0{Ï+ gïÁìN9ÆÞƒÙ;ì,ÆÞƒÙ{Ü-Ú‹½³w.cïÁì‚ËØ{0{Ïð7{Ì>ì=˜½S?CÙ{0{§v•²÷`öNÞÊÞƒÙ;ÝQ({fïÔTöÌÞ“àJØ;œU½³wØù½³wÜùÔ…ÎÞó­ÁÙ{0{§ã„²÷`öžïüÎÞƒÙ;œŒ½³÷üŽÂÙ{0{§; eïÁìšØÊÞƒÙ{6ÎÞƒÙ;µY”½³wcïÁìÂÆØ{0{Ï“Š³÷`öN{†²÷`öN÷åÊÞƒÙ{uÎÞƒÙ{^I:{fïyØ8{fït UöÌÞ!lŒ½³wcïÁì./J6'{ÿ‹—'{Ï÷"gïÁì=‰º„½Ó9CÙ{0{‡¤bì=˜½S©¡ì=˜½C%iì=˜½Ãfbì=˜½Ã²6öÌÞ³K†›½Ss\Ù{0{§=CÙ{0{Ï*É“½³w,5„½³wXüÆÞƒÙ;•}@ÕÙ;,~cïÁì÷ aïÁì=©c/öÌÞ¡Ž5öÌÞäøÛo{O/>Ÿ‡ƒ úÓá]Ù»<|!öÌÞåá ±÷`ö._ˆ½³w9ÙbïÁì]l!öÌÞåb {fï²Þ ±÷`ö.»A!öÌÞ%]bïÁì]6“Bì=˜½K¶)ÄÞƒÙ»ÜjbïÁì]’U!öÌÞe',ÄÞƒÙ»äºBì=˜½KTˆ½³wI•…Ø{0{—m¼{fï’i ±÷`ö.Å}!öÌÞˬ.ö^˜½—;]\ì½0{/Ùz?Ø{aö^î{±÷Âì½ÜKæbï…Ù{¹cþbï…Ù{¹£îbï…Ù{¹Ãæbï…Ù{Iö¸›½—{/ºØ{aöÑaì½0{/I:?Ù{aö^’||²÷Âì¢ÃØ{a·žG‡³÷—áþ†Œ½fïIt\ì½0{O²BÂÞóéuö^˜½'Ó{±÷Âì=™Þ‹½fïùü8{/ÌÞa~Œ½fï4?ÊÞ ³÷’Õˆ{‡Ünì½0{Ï’óÉÞ ³÷<9;{/ÌÞË'[¤ÎÞ ³÷òIS¸±÷Âì’³±÷Âì’³±÷Âì½$5üÍÞ³~²÷Âì=™Þ‹½fïùô:{/ÌÞóéuö^˜½Ãô{/ÌÞË'ß¡•½fïå“®qcï…Ù{ù$Ap°÷Âì=Ÿwgï…Ù{\{/ÌÞ!lŒ½fï6ÆÞ ³÷ì½0{§~†²÷ÂìÚUÊÞ ³wºðVö^˜½Ó…²÷Â캑ÊÞ ³÷$¸ögUcï…Ù;ìüÆÞ ³wÜùÔ…ÎÞó­ÁÙ{aöNÇ eï…Ù{¾ó;{/ÌÞá<`ì½0{Ïï(œ½fïtG¡ì½0{§&¶²÷Âì=gï…Ù;µY”½fï6ÆÞ ³wcï…Ù{žTœ½fï´g({/ÌÞé¾\Ù{aöžG³÷Âì=¯$½fïyØ8{/ÌÞéªì½0{‡°1ö^˜½CØ{/ÌÞéò¢äas²÷¿xyq²÷|/rö^˜½'Q—°w:g({/ÌÞ!©{/ÌÞ©ÔPö^˜½C%iì½0{‡ÍÄØ{aöËÚØ{aöž]2ÜìšãÊÞ ³wÚ3”½fïY%y²÷ÂìK aï…Ù;,~cï…Ù;•}@ÕÙ;,~cï…Ù;îÂÞ ³÷¤Ž½Ø{aöu¬±÷Âì½€ümïäøão{/ Çÿù·ÿýŸ<¼èö?yFAìò(bÕ Xu'éHºËóòÜy`€#w.^€‹» / ÂÀßn¼ o§Ü(·‹íbÛav˜íþº€¿vf]€Y»¦. ©M@Ón£ Øèß~êßþ¯¿ÿþ£_ÿË?þÿ“%òùñõ£ÿûÿ÷ý¯?úßÿÇçýý·Oÿ Z?”Vï¯Hø[òS]~êë@½[Ï~jèO}Õ*eg?5õÇ}f?µô§êOY”ýÔ¶¿«ì+ù©øaWûú7g?úS?k­È~ªèO•ÝVö¾~ö²¾ßD›=}_¡ï¾®(#ý»ºÍÐWõž>—¾ûÏOl™þ”¿ûØùOù»¯Ñ³y {÷¥ŒšýT‘wÿõ†Û,ãoi–§(,OQXž¢°Ea}ŠÂú…õ) ëSÖ§(¬OQXŸ¢°>Ea}ŠÂú…õ) ëSÖ§(¬OQØž¢°=Ea{ŠÂö…í) ÛS¶§(lOQØž¢°=Ea{ŠÂö…í) ÛS¶§(lOQØž¢°?EaŠÂþ…ý) ûSö§(ìOQØŸ¢°?EaŠÂþ…ý) ûSö§(ìOQØŸ¢°?EáxŠÂñ…ã) ÇSާ(OQ8ž¢pEá|ŠÂù…ó) çSΧ(œOQ8Ÿ¢p>Eá|ŠÂù…ë) ×S®§(\OQ¸ž¢p=EázŠÂõ…ë) ×S®§(\OQ¸ž¢p=EázŠÂõ…ë) ÷Sî§(ÜOQ¸Ÿ¢p?Eá~ŠÂý…û) ÷Sî§(ÜOQ¸Ÿ¢p?Eá~ŠÂý…û) ÷KÆ—(”Ÿú“(ÔŸâ(Ôoä(ÔŸâ(´¿ £Ðþ.ŒBý)ŽBý)ŽB}…òS…6C…úS…ö¾0 í}aÚ›À(üþ©?§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIyê”§ÞIù§½“ŸÿÕ­ü—T³ÿüO±³ŸÒÿòì·JJþ˳ø?¥ÿ•ÑŸ}cyúÆòôõéëÓ7Ö§olOߨž¾±=}cúÆþôýéÇÓ7ާoOß8Ÿ¾q>}ã|úÆõôëé×Ó7î§oÜO߸_¾QTÊŸ|£üÔŸ|£Ø•?ûƧœO9'žrN<åœxÊ9ñ”sâ)çÄSΉ§œO9'žrN<åœxÊ9ñ”sâ)çÄSΉ§œO9'žrN<åœxÊ9ñ”sâ)çÄSΉ§œO9'žrNyÊ9å)ç”§œSžrNyÊ9å)ç”§œSžrNù§9çïçïSh½ì§ô¿é_ý«.ü[O~Jÿ›þ¾ÛhéOéÓ_k-+ý)ýoú£×‘£ý7ý_ ¨·äéý÷)üü¯¹³7a¿Oá«æÙ?²oôß§ðuXh‘ý]úûfùû²ß§ðó?ªéßÕý78Œü¹ì÷)¬¯sZúSöîlø){÷_'¾þÔ¶ßžñµ†³ŸÒß§ðé½ÔQó(,OQXž¢°Ea}ŠÂú…õ) ëSÖ§(¬OQXŸ¢°>Ea}ŠÂú…õ) ëSÖ§(¬OQXŸ¢°=Ea{ŠÂö…í) ÛS¶§(lOQØž¢°=Ea{ŠÂö…í) ÛS¶§(lOQØž¢°=EaŠÂþ…ý) ûSö§(ìOQØŸ¢°?EaŠÂþ…ý) ûSö§(ìOQØŸ¢°?EaŠÂñ…ã) ÇSާ(OQ8ž¢pEá|ŠÂù…ó) çSΧ(œOQ8Ÿ¢p>Eá|ŠÂù…ó) ×S®§(\OQ¸ž¢p=EázŠÂõ…ë) ×S®§(\OQ¸ž¢p=EázŠÂõ…ë) ×Sî§(ÜOQ¸Ÿ¢p?Eá~ŠÂý…û) ÷Sî§(ÜOQ¸Ÿ¢p?Eá~ŠÂý…û) ÷Sî—(´ÿZ£P~êO¢P»”…ú[8 õ7pÚùQè¿k€¢P~êO¢Ðþ.ŒBíêrê¿‘£ÐƒE¡þG¡¾{ŽB}.ŽBûí……O½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“xêÄSï$žz'ñÔ;‰§ÞI<õNâ©wO½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÔ;)O½“òÒ;Ñÿò¬þöŸýe?¥ÿåYéôßóÕþ[þî¿OáϾ±<}cyúÆúôõéëÓ7¶§olOߨž¾±?}cúÆþôãéÇÓ7ާoœOß8Ÿ¾q>}ãzúÆõôëé÷Ó7î§oÜ/ߨ…¿Q­ã?ÿ­ ÷ß§ðgßø”sâ)çÄSΉ§œO9'žrN<åœxÊ9ñ”sâ)çÄSΉ§œO9'žrN<åœxÊ9ñ”sâ)çÄSΉ§œO9'žrN<åœxÊ9ñ”sâ)ç”§œSžrNyÊ9å)ç”§œSžrNyÊ9å)çd¿uá_þõ¿þ—ÿ÷¿üçÿôÿK„9« DyLP-1.10.4/Data/Netlib/ship04l.mps.gz0000644000175200017520000007143110430174061015566 0ustar coincoin‹ÏK®9ship04l.mps¥½[’$½r¤ùNî!7@ˆf†Ëã™ »Exi9dszÿ+DVý™MUËÊîÖ©²ÿ ¸Cqq5þýoÿöÏoÿï?ÿçÿúß—ÿë?þÃßÿãÿûÏü‡·{ûÿñŸÿµÿ¯y{ûû?ÿË¿ý¯ßÿ÷¿þú¿ÿöýïÿñßÿøßÿ÷_ÿû¯Õ§?µý§þø“=ý?ý]<ý©?ýi<ýiž¿é÷ù§öô'?ñ_¿ì÷Ÿ~ÿ²ß²§¿ó§¿‹§?õ§?§?Íó©üõË~ÿ©=ýÉýé¿þþ·ý»þú—¿ÿÔžþdOzŽ‹§?õ§?§?ÍãOí‰×žxí‰×žxí‰×žxí‰×žxöij'ž=ñì‰gO<{âÙÏžxþÄó'ž?ñü‰çO<âùÏßyû½ÿ?û×߯ïãíüƒðóqþ¡Ÿçž8ëøC½Î?œ¿ ž¿ ž¿ ž¿ ž¿ ž¿ ž¿ ž¿ ž¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ ¿ÀÎ_`ç/°óØù ìüvþ;¿ÀÎ_`ç/ðóøù üü~þ?Ÿ¿ÀÏ_àç/ðóøù âüqþ‚8Aœ¿ Î_ç/ˆóÄù âüqþ‚~þ‚~þ‚~þ‚~þ‚~þ‚~þ‚~þ‚~þ‚~þ‚~þ‚qþ‚qþ‚qþ‚qþ‚qþ‚qþ‚qþ‚qþ‚qþ‚qþ‚yþ‚yþ‚yþ‚yþ‚yþ‚yþ‚yü‚vŽ.í]Ú9º´stiçèÒ®§ÿÚ8ÿ0Ï?íiçèÒÎÑ¥£K;G—vŽ.í]Ú9º´stiçèÒÎÑ¥£K;G—vŽ.í]Ú9º´stiçèÒÎÑ¥£K;G—vŽ.í]Ú9º´stiçèÒÎÑ¥£K;G—vŽ.í]Ú9º´stiçèÒÎÑ¥£K;G—vŽ.í]Ú9º´stiçèÒÎÑ¥£K;G—vŽ.í]Ú9º´stiçèÒÎÑ¥£K;G—vŽ.í]Ú9º´stiçèÒÎÑ¥£K;G—vŽ.í]Ú9º´stiçèÒÎÑ¥£K;G—vŽ.í]Ú9º´stiçèÒÎÑ¥£K;G—vŽ.vŽ.vŽ.vŽ.vŽ.vŽ.v=ýׯù‡yþáh£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹£‹Ÿ£‹Ÿ£‹Ÿ£‹Ÿ£‹Ÿ£‹_Oÿµqþaž8ÚãçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâçèâÑåüÇ¿þŸû÷ÇçÊýÿþ÷ßÿù__`~}¸|;ÿßîVÞþújø×ÿZÛùùÞ¬§ð__ ïÿêíó³f&üþ¯Þ>¿ð?ìŸj¹‡ÿþŽôôûoÿªá&F²‰ígMlª‰6±}lf¿nbÃoqTüWûµZ| iâû¿úlbË„ßÿÕç[l_6±}¾ÅÆšßâ¬-ÙÄö³&6ÕÄF›øñIý -Î+ÕQ=£EÏ„ßÿÕç[ô/›èŸoÑY 4qï{¡Ûò__:ŸÂïMüõ¯@Yøý_½}~F'M´=k¢£·ØGM¾EÿÙ[tõ6Ñ?–¸‰ÿñßÿbÒèW{oâ/Cç|½åׇ§§ð_fÎý_½}:N™ðû¿R“ÆG84~ý«†›hÉ&¶Ÿ5±©&6ÚD5i<þž4Fë6ÑÊõ¾ny iâû¿úlbË„ßÿ•š4>Âé¤ñë_¡·8ön3ÙÄö³&6ÕÄF›¨&ǿ“Fô¹RÕ3ZôLøý_©Iã#œN¿þš4lï_`½Œ÷½ïSøKßÿj" ¿ÿ+5i|„ÓIã׿B“FŒ_Sâ-úÏÞ¢«·è´‰bÒøÏÿù)è¨Ö½ÔöÅ*„ÁÿÓûœÃÆó÷pôj«ŒîŸtãá¿}é? #‘¶ˆr]Ë„™$éèë*Ñ'<ü·óþôŽž|xÙ[âOzçá¿MÙ? ODQ¬O~òðßþãÐÑ*"fÝ}ÞñR„ÈIo¬Ïz­¥yËõù&û|c}þ•>â*O»Bçá¢Ï7Öç_éëšÅ{Ïõù&û|c}þ•îÝŠ·™ëóMöùÆúü+½Û,Ã{®Ï7Ùçëó`¶¶k¿ø‘ëó&û¼±YƴⳌ±>ÿJw_ey²Ï›ìóÆúü+Ýö"©NÏõy“}ÞXŸï½ÖýÞ=×çMöyc}õºÚJ·\Ÿ7Ùçõù×å[«V,;λìóteõJïµ—>f®Ï»ìóÎfÐö5Ê:gXãáb–qÖç_é¶j¹V²Ï»ìóÎú¼ë±®ópÑç } ¶·½¦=Û>xøï”²? OÔö±GÚ+¹²r©8gŠ ðäm¿ø–S\HÅS\€v6µçRqÁzœ7.lŽCO~Or^ss\È9.˜â@Û×Úc]r7RqÁ÷J÷k7}&RqÁÚ¾{]Ë®ëB*.˜âúë8ïVÖHÎq]*®3Åu½—i<\(®3Ŷ÷=ÖYrŽëRq)Ñ÷^æç‡ Åu6þÒmï¤V$¿t9Ãv¦wÐöh%"©÷.õÞ™Þ;²«^ÛÞâyYy¸Ðû`z¥[ìUåJê}H½¦÷¾Yµ½¸HΰCê}0½Ðç­Œ™ÜE©÷Áôèó*#’+ê!õ>˜ÞA¯«»ñ-rzRïƒéµÝ‹[RïCê}0½£¶¯«\É=ìzLïó•¾ßûªI½O©÷Éô>Á³MÉõ”zŸLï|%než_ ‡ ½O¦÷ fØMoI½O©÷ÉôþJoÍöÚ&9¿O©÷Éôè—•¨Éù}J½O¦8ÔöUÚéŒL.7™âÖk¯ëkïãfNqK*n1Å- ¸µWVɯFK*n1Å-ðÞ£¬ž\Q/©¸Å÷J·z•:’~Ü’Š[Lq íËÊU“3ì’Š[lŽt¿J[=7Ç-9Ç-¦8@·Q¦{NqK*ŽÐk½ôH[y8WÜã_|)@¯û½+§¸Ozûºúîv^’kÚOºýÝÝw¯«–ÛÃ~ÒýèÚî{‚¿jJqŸôøz‡O~D™¹5í=þä½OD·aeåV•ôù'ï½Và¿ïvEnUY«T\eŠÉQýêeŽœâdÎ £ ÛååòÜWeÎ £;zòã*^“Š“9'Œ€îu–+é¿W™sÂèÐ_æ¸ÎÃ…âXÎ ìóQ®È­*«Ì9aôZ_Ýÿ=m—™\UV™sRSÈ|¨QzÍùïŸôötCm³¬•ÛÇU™ñÂè^›þZè<\(Že¼ºµQÌsû¸*3^½£¶×1ÊÈ9¡Uf¼0ú̼÷ÉÃ…âXÆKu@ßãüJ®*¥û_™ûè³Mµæ¾”Véþ3ºúËHk<\(Ιâ\{RÎÃ…âXî »Õ½ƒN*Næ0zGm·=¿Ï\ŽY•¹Œ>QŸ¿guN.ÇÜÿ œÐQ7=9ÇI÷¿2÷ÐëÞH-KÎqÒýgtô6÷’6éþWéþ3ºzL+q¾wçáBqÁü÷9Ê:WÔÁÃ…âXîzòßQœÌ=`ô‰Úc´¹|›*ÝF¯µëo•‡ Å1÷Ðßlô-ùåDºÿŒn€Þöê®\u•î?£; [Ô2{rU)ÝFDÿF~]•î?£wÔëúUú•ÜÇI÷ŸÑ'êum?zK~9‘þ;£×:´û_y¸Póßý­×Uªå'ýwF7@7‹²²ß*¥ÿÎèÛ¾ö ›Tœôß=PÛ{ì}\rŽ“þ;£Ôvëµô‘rªtÀ}Bº•z%¿œHœÑkøÞí}NqÒ¯Ìt÷Vbæð*pF7Ôö{>­ñp¡8æ€z³¼' g'pFôä×,k&÷qÒgôŽè÷]dçábŽc8zò­—6’«Jé€3z­K!¯<\(Ž9à€>·âžÜÿÆÃ…☎ھû|OžÎ«Ògtô—=¬óp¡8æ€úËyØàáBq‹)n7°µ²’ß*—TsÀÑ“o{Q9rx•8£×vé5måá\q9à€>mKæœ4é€3ºúË tãá\qŒî€^m–°\ÎI“8£j{ô2’~\“8£OÔöo|-lÒƒfô­.0¿ïY&ùµ°Iº1Ñ·àjOöyéA3ºzø~ïÉïóMzÐŒî€þf«Ëí¤šô =,S4¼X®ÏKšÑg¦í“‡‹>Ï\àÖ~´²jÒnÌôqíµMò{]“.0£j{ï%FîëA“.0£; ·ÝçzË­¬št=½®âÉìý&]`FµWI~¯kÒfôÙšÎx™<\(޹ÀÍ´/Sy¸P«{è½ÛÞËä¾4Y÷€Ñ Ð_¾QŠcUГßcÝHV]h²ê£¤ß2؃‡ űº€þ­>/ë0ú{áÄûÚfuÞs™Mú°ù°€¾g‰+·oÒ‡etôÞzñ™\YI–Ñ=ùMïžÜMH–ѵ}ÙóY¡àá¢Ï3µý¾žï<\Ì2̇mñ£|Ú&}XFwÔù÷ÊÅ☠èo1gñäºNú°Œn°í[ïžTœôaÝQÛï_ȇ Å1Ðã%zr]'}XFŸ€Þê(WÒ—iÒ eôÚÆÏVVÒ mÌ ô—j‡‹>ÏœPD½ƒ­É½ŒtBÝýÍëUF®ÖG“N(£ ¿TQ .ú<;‰Œž|›[qÉYFžDfô‰è÷ª “‡ Å1'´M]Ó©òp¡8æ„zßôXIÅI'”Ñ Ð­·2³_̤ÊèÞ¦ö߇ Å1'´M}r!x¸PsBÑ“¯«¬™üz PF¨í{z¯3wöÿƒÞÿäÉOØöZüJîã¤Ëèµ?n/im%õ.}ØÆ|X@ߣl™=©wéÃ2º¡¶¯x®j<\èù°ˆþ ö&}XF@ß[èQjr†•>,£÷¶~¦wéÃ2úô:úÞM$'}XF¯öêˆÅ¨Å’Õ6Lú°Æ|XD7/a¹¯…&}XF7@ï¾GÚ•;iÒ‡ett­Œd®‘I–Ñ=ù»<œ+ŽÑ' ûi-éI™ôa}Ϧ`†íåšÉ>/}Xc>, ï—Y¬%û¼ôaÝ}7ÞKòk¡I–ÑпSï¤Ëèè{¤µd~I–Ñ;ìuã¹yçá|–aô è/+«ÉÅ☠l '´òp¡8æª~¿õžtMºÀŒnˆ^÷þ=;ËH˜ÑÐëjÅ“9ä&]`F@÷yí¶'']`FŸ€þÖÚUz²ÏK–Ñ«'ôòâÉo&}Xc>¬¡»j|]%·—1éÃ2º¡¶÷(#Y‹Û¤ËèŽÚþ¸Ú-rß.Lú°Œ€>öHûtV(x¸èó̇tï{#uå2ÜLú°Œþ^EçҵÒ,¹²’'Ð@ô·yÙSÝÂÆÃEŸg'Ð-QýÞx¸èóì: ·˜{¨Ë‡5yÑÐÃ÷@›Ìê4yѧ¡úó{޳ä8/Ï€3z5àþï±®fw2÷ÀXî ¿Œu‡‹>ÏrÝ{+-yZÇdî£; W_»éɵÌ=`ô@ï½ÍâÙq^æ0úDï½ÍYjÍõyéþ3zµþ£ì}“î¿1÷Ðc¿÷–tÿMºÿŒn€þRIÌx¸èóÌýGOÞc//’}^ºÿŒ€îÍKÍ~5’î?£wÔöû·‹ÎÃÅšåX"ëcòp¡8–{`àvme$kû˜Ì=0–{è^·â’UÐMæ0º¡¶ßk>Šc¹€þ­ï´2÷€ÑпSÙdî£wD¿WIí<\(ŽåØÏrLæ0úû/5zÙ½ŒÌ=0–{`(óa•êÉý»Ì=`tô=Üôâ#§8™{Àèè6FéÉ[JMæ0z úÞËÌd¶ÉÜFïèÉûV\M*Næ0ú@½®ï ¶æj2›Ì=`ô ûüí~ØÉÃ…ÞYî-tãÃ*–ü^'sŒåúwêUšÌ=`tƒm_½ÔäšVæ0º:}¥%sLæ0zz´Ø³L.£Õdî£wC'ЯR¯¤Þeî£OKT¿Ÿ<\(Žå8:~µòž° ç2÷ÀYî_:«³ñp®8F7@©wa<œ+ŽÑÝ'ЇsÅ1zzWYžÛEºÌ=`ôŽžü7jy¹¬‚Îè=ù{E©Éùâ½z¢uåáBq,óÁÑ9hë{u“SœÌ|`tƒôýËÊ)Nf>0ºº­QZò4®ËÌFOœý.Ç2ð“o­$'3}¢'Ï=˜<\(Že>xÓ·QW.Ç2ýå´NãáBq,ó¶=¿ªt™ùÀèŽè{\®œ ì2óÑÐ_ª¨Šcçße}Œ½•I*Nžgô‰è³K~·q™wÁèÕMW”ª<\(Žå]ú›O/-çǹ̻`tCô½—*=rŠ“yŒî€þrbÅy¸PË»@ôº{]²–—˼ FïðÉcŽ3©8B€þrv`ðpþ݆Ñ'zò߸ÚeÎ £¿ý‰ÞeΉ³œ@÷½“ꑜaeÎ £j{ô½›Hî"eÎ £; ÛÜs\Mî"eÎ £ ¿Ôx .ôÎn=@OþZ¥&¿Óº¼õ€Ñ'zò÷Ú¼“‡ űŒõç÷’vŽœé2ãÅYÆ  ç̈ˌF7½²2.Ç2^ýå6jçáBq,ãÅ7>ŠcÕ6}¿÷Ú“3¬¬¶Áèѽ–h¹S™ôþ'O~úÏj}¸Ìöaôê¨âĵ÷°#§w™íã,ÛÐm¿÷¾’_d¶£›wý­Òx¸Ð;Ëöq”é4Ë•ýN+³}=Ð{ÿÆ©L—Ù>ŒÞÑ{¯Q®™;/ã2ۇѧ'rÌ&ŠcÙ>>t¦SåáBq,ÛÐ_nxi<\(ŽeûøÐëyãáBq,ÛÇ7>8ŠcÙ>Ž*ÌÄÞM$'³}½Ã^—¿;Ïe¶£OÔö{ÆËäáBq,ÛÇ/•‡ űl@ÿŽûï2Û‡ÑÍQ¦Ó^U&«&ºÌöatGO¾ÍZV.ÛÇe¶£ ¿ÜÄ<\(ŽeûÀ^ç{y±rŠ“Ù>Œ>á“¿}!Ÿ<\(ŽåÛ8Èx¹¬X$¿ÛÈ|gY€þò:x¸xï,ó!.ý½®òpÞö`™€>âz>‰Üx8mÝÝ®½“JÖ5 ™ùÀèèvÅWj´ ™ùÀèè÷SÁÃy¯cô—çç{XFŸ€îk/."÷•8dæ£×ø5Êe¹oV!3‚ùn+·® é¿3úûì *T.ÚÎ<èh?ÊúéA3º¡¶_W Ë­mBzÐŒî€n{/3’'ÔBzÐŒèÉßk¸½Ž¹À¨í÷Z“‡ ½38À9è½°ªIW(¤ Ìt|=Ÿh<\ôyæúîv³xÎé3ºúË=àÎÃEŸg.0 ·%’ߨCºÀŒÞ3½®óp¾žgô¦oŸ<\ÌïÌFm¿WÞ<\è¹Àá¨ÖG/³æô.]à`.0¢ãvH˜Ñ Ð[ïåJÞàÒftto{†­¹ý{H˜Ñ¶½–jÉ••t½#ºÏ2“àCºÀŒ>Ñ“_­ÌdžUH˜Ñk„>'Uy¸PsÝÿ>JKæ]„tÝ`۽ĕÜÃJ˜ÑÑûUÜsߨCºÀŒ€þrGjðp¡8ærBc´ÉVºÀŒ>PÛ¿Q›7¤ Ìè3óÞ'zg.p Ê{yQ“+jés}\«Ì¬Þ¥ Ìè†Ú~÷߇ ½3>ùo|³’.0£ ¿œƒ.ôÎ\`@qF:zïLï]W˜<\èyШí6JŸÉù]zÐŒ^cèªÈ•‡ ½3Ðßún|$¿QKšÑ Ñﳌñp¡wæAGâžçáBï̃Fôû™ÐàáBï̃F½nÕr­¤Þ¥ÍèÐë¬ÅϬÁÅޙ߻•–¬ÝÒgôS¯.*zg8 w›exò‹™tÀÝ"QóÁx¸Ð;sÀý[;hé€3zrãùÉzg8zò÷{Ä:zgõ.PÛ·â¬'õ.ë]0úŒŸÝµÒgô¨ò@+Éù]úïÁê]z¯»Ï'k¸…¬wÁè†Ú¾g™1“z—õ.Ý!ý–éä<\èe>úK~]ðp¡wVïÐ_*t.ô¾˜ÞQ“¶§Ëé}I½³jˆnµ•žËâYmƒÑk¿~´žï2礳œ@¹½ñp®wF7ÔvïeENï]æœ0º#ú7ÎIu™sÂèž|í{/“Ë9é2ç„Ñ;jûÚ»‰•ûBÞeµ F€¾ÿ×½“ÊÍï]f¼0úDmÿFå.3^½vp*³õR“7ûté€wæ€wTý>JOÖ¯ëÒgtë?»¼KœÑÐ}¯¬låæ÷.pF@ÿNfc—8£÷Žr6¾æ2Z»tÀ} ¶ï'Ùûƒ‡ ½3¼'î\˜<\è9àÝõ n•‡ ½3зÖ˹ý{—8£jûývãáBïÌtßû¸e¹º]:àŒ€þ6j©Éº]:àŒÞ;:>K÷Üz¾KœÑ'jû›]{ŽÍ)N:àŒ^;ª¿ör>—WÙ¥Þ™è/·Y5.Çp@ßø½‰Í9b]:àŒî€îc¯.fî‹Y—8£ ¿J$ð.pFŸèÉǵ÷°+×ç¥ Ìèï§­_Þûžß“_ºt;s;::JXrU)]`F·Ž<è=Ö%¿wé3ºzŸµôHÎ2Òfô@ï}޽´É}%îÒfô™éu“‡‹>ÏœÐ>Ð9èZ®Èõyé„væ„vä yqKŽóÒ etô—[ÌŒ‡‹>ÏœP@~•–¼½®K'”Ñп5ÎK'”Ñ'l{Ýô\>m—n £¿W†¼·½ÍÒ’n`—n`gn  çöº.Ý@F7D¿6ÆÃEŸgn  ÏG}ÚHöyé2ztx:VIî&¤ÈèÐW»ÊhÉq^:bŒ^;ð¤ö“ŸÉ ·.±Î1@©4Òx¸èóÌô·Þ¢´dŸ—Ž£; ÞÒ7yuéˆ1z úªÏç&‚‡‹>Ï\!@Ÿ{;²ã¼t…½P›7l•ä8?ä¹ÈÁj2z÷V¼åò¬†¬ÉÌèŽè÷œçá¼×1zú¨­X²~ÝgB½ºU,YMkȚ̌>}v{¾õ`ðpþ–Ñ'zïaÅ#§¸!+B3z ¼÷UzÏ}5ò4î`§qýåfÞÆÃù,Ãè†Ú½xò¤Ò§qÝý­¯Y’»‰!Oã2zú²x¾¥4x¸Ð;;›iûäá¢Ï³Ó¸Ã~tv`H/r0/Òoùó‡‹>ϼH@÷êÅ’¹FCz‘Œî€þô^$£ ÷½²òžÛAéE2zGïý~j£óp1Ç17µ½Ž²’Ù}CºŒ^ðãF-Ós§ó†ts:£$÷2CºŒnˆ~댇 Å17ÐǼž«¬8Šcn  ÏÝôl¹!Ý@FŸ¨í±üJöyéÇ1zàtÞõ0#s÷I éÇ æÇzß+êvå¾Y éÇ1ºú£~—ÜCúqŒîèÉ×ÇçºÈõyéÇ1z º·‘­>¤Çè÷º(WÍÍ2òD*£Øv«eÜNJžHeô:@•Ô¾×óÉÊBCºƒ¹€î{uÑ[r–‘n £¤ßê]Šcn  ¿Ñžn«t.ÇÜÀ =x¸P;Šž|¥&opòL(£O@_ÑJ¿’;)éE2zÈ‹4+–«s2¤9˜9Pu\+>r^ä^$£Û@ŽX”š¬½?¤Éèè/£óp¡8æE¢÷~÷¤‚‡ Å1/Ñmm½'û¼ô"ý½bØË—“–>¹0¤9˜ èá{'µ’}^z‘Œn¨í±Ò'†ô"Ý<·žª*9}žy‘€þX²<Ýf<\ôyæEÂ^·žóç'}žy‘c¡|›­÷ä^Fz‘ƒy‘€nm•±’{éE2ºúôñ|Ó‡ñpÑç™ Ÿül%éEéE2úDmÖIf: éÒ¶OP£uïß#Yý~Ê“J“X™È±çZ•‡ó>?™3è/õ¨ç}žÑ ÐßæÆ_¹|Ú)Fw@éuÎÃÅ{gΠW¿zIÖ`ŸÒaô è/3ìäá\qŒþõr—Ö(וìóÒ™ÌôïTY™Òat›¦wÆÃEŸgÎjûc kɱN:#Œ€î-Šgû¼tF½£'y¹Ñ{¿ŸX™<\Ì2_ÒÛþÿUU]h_öùßáHûªÏ·«~M7@¯{'5>û|û²Ïÿÿ±? ; ·ˆ=ÃÎOºóð_ÿz úºJôãÉÿ‰? wôäËžÊl_öùßáïø“÷>}÷y«Ç“Ÿ<ü2ÿ使Ï/bëîóG¯«<@Nzc}Ðk-Í[®Ï7ÙçëóMÝðÂû|“}¾±>VÔ×ßXŸû¸¾W•mæú|“}¾±>ßTN)ïóMöùÆú¼©›:yŸ7ÙçÍ2¦×x¸˜eŒõyT{ïã<ÙçMöyc}¬¨}–:=×çMöyc}Þû¿ß»çú¼É>o¬Ï›ªkÄû¼É>o¬Ïƒõ|µbÙqÞeŸ§++gU{écæú¼Ë>ïl–m_£¬s†5.fg}ÞU­NÞç]öyg}ÞõX×y¸èó„>PÛŸ¿·/ó.~‡¿Cºÿ}^²æWœKÅ9SªÁnûÅ·œâB*.˜â@ž•íÁ¦öœâB*.˜âBóÆÃ…â‚ÍqèÉïIÎknŽ 9ÇS\¨Z\q!Lq æÃµ›>“Š ©¸`Šmß½®e×u!Lq]ÕöáŠëRq)®ë½LãáBq)®«^¸âºT\gŠCô½—9ÇyçáBqͰ ÞÅÞI­H~=èr†íLï]UˆåzïRïéä˜í^¥åôÞ¥Þ;Ó;¨ü?cïe’zïRïé}¨šÌ\ïCê}0½ƒ,¯Ø«Ê•ÔûzLïCÕpãzRïƒéTÛ+c&w‘Cê}0½£ZW‘\Q©÷ÁôŽîßo‘ÓûzLï²Î ×ûzLï¨íë:üw®÷!õ>˜ÞQžÕµ÷qI½O©÷ÉôêÏ÷MÉõ”zŸLï Ëk´2ϯ…ÆÃ…Þ'Ó»¼ÿë}J½O¦÷ n«´½¶IÎïSê}2½úe%jr~ŸRï“)µ}•v:#“‡ ÅM¦8P½¯½›9Å-©¸Å·€âV‰H~5ZRq‹)n©^¸â–TÜbŠ[ê^`®¸%·˜âPí}+WMΰK*n±9Ðý*mõÜ·ä·˜âÝF™î9Å-©8B¯õÒ#måá\qõ"Šôºßû¸rŠû¤·?  ïnç%¹¦ý¤ÛÐÐo·SÅ}ÒýèÚî{‚¿jJqŸôøz‡O~D™¹5í=þä½ODÎ9¡Šû Ï?yïµÿ½=2s«ÊZ¥â*S\EÙ>½Ì‘SœÌ9atô[†WœÌ9atGOþQ,³&'sN=Ýë,WÒ¯2ç„Ñ; ¿Ìq‡ űœØç£\‘[UV™sÂèïwÜóû&¸âdÎImLqMÝ•ÉפâXÆ jûóíó\q2ã…ÑÐ_¾:Šc/€nmóÜ>®ÊŒFï¨íuŒ2rNh•/Œ>3ï}òp¡8–ñRÐ÷8¿’«JéþWæþzìT­¹/¥UºÿŒnÕõHk<\(Ιâ\{RÎÃ…âXî ?ÊDÒ©2÷€Ñ;j»íù}ær̪Ì=`ô‰úü=«sòp¡8æþWtï@->’sœtÿ+sÿýv{WœtÿÝýv3/WœtÿÝ=¦•8ß»óp¡¸`Šþûe+êàáBq,÷=ùï(Næ0úDm±GÚ\¾M•î?£¿Ÿ8Vß.*Šcî? ¿Ùè[òˉtÿݽíÕ…]¹<ê*ÝFw@¿Ý#Æ'ÝFDÿF~]•î?£wÔëuȯä>NºÿŒ>Q¯kûÑ[òˉôß½Ö¡ÝÿÊÃ…â˜ÿ^‡º[‡+NúïŒnÕx‰²²ß*¥ÿÎèÛ¾ÊLúïUúí=ö>.9ÇIÿÑj»õZúH¹U:àŒ>!ýQ“9ùåD:àŒ^+º…¼ú^Ðç'ðÊp@wo%fίÒgtCm¿çÓŠc8 ×9˼’û8é€3z '¿fY3¹“8£wD¿ï";ssÀÑ“o½´‘\UJœÑk]ú yåáBq̯¨ÆK{vÿŠc8jûó­…\qÒgt¯Kïa‡ Å1Ð_ÎÊ[Lq ºŽ·vÔ«äŠ[RqÌGO¾íEåÈ9àU:àŒ^Û¥×´•‡sÅ5æ€ú´Q,™sÒ¤ÎèÖ.}Ýx8W£; W›%,—sÒ¤ÎèÚ½Œ¤פÎèµý_ ›ô }«KUIå}^zÐyЈ¾W{²ÏKšÑ ÐÃ÷{O~ŸoÒƒftô[ÍFÞç¥Íèèo}x±\Ÿ—4£ÏLÛ'}ž¹À­ýheÕ¤ ܘ è·[JyŸ—.0£j{ï%FîëA“.0£; ·ÝçzË­¬št=½®âÉìý&]`FµWI~¯kÒfôÙšÎx™<\(޹ÀÍ´/Sy¸P«{è½[i=÷õ ÉºŒn€þòÚx¸P«º€žüëF²êB“U= ý–Á<\(ŽÕ=ôoõyY÷€ÑkCw ïu]Ïe>4éÃ6æÃú~œ%®Üþ½I–Ñ Ð{ëÅgre%}XFwôä7½{r7!}XFÔöeÏg…‚‡‹>Ï|XÔöûz¾óp1Ë0¶Åòi›ôaýÝýQçß+Šc>, ¿ÅœÅ“ë:éÃ2ºÁ¶o½{RqÒ‡etGm¿!w.Ç|X@k”èÉuôa}ú­B,ïóÒ eôÚÆÏVVÒ mÌ ô—j‡‹>ÏœPD½ƒ­É½ŒtBÝýÍëUF®ÖG“N(£ ¿TQ .ú<;‰Œž|›%zr–‘'‘}"ú½êÂäáBqÌ mS×tª<\(Ž9¡€Þ7=VRqÒ ettë­Ìì3é„2º·©ýwçáBqÌ mSŸ\.ÇœPôäë:ïXናN(£Ôö=½×™;ûÿAïòä'l{-~%÷qÒ‡eôÚ€·—´¶’z—>lc>, ïQ¶ÌžÔ»ôaÝPÛW,£ ï-ô(59ÃJ–Ñ{[?Ó»ôa}z}\n“<‰Ü¤ËèÕ^±µX²Ú†IÖ˜‹èæ%,÷µÐ¤ËèèÝ÷H»rç"Mú°Œî€~«üOgÒ‡eô@OþîÇçŠcô è¾GZKzR&}XF¯†j°÷rÍdŸ—>¬1Ð÷Ë,Ö’}^ú°Œn€¾ï%ùµÐ¤Ëèèß©waÒ‡eô@ô=ÒZ2¿Î¤Ëèöºñ\‡¼óp>Ë0úô—•ÕäáBq̶„Zy¸Ps U¿ßzOºÀ&]`F7D¯{ÿže¤ ÌèèuµâÉr“.0£ û¼vÛ“Š“.0£O@kí*=Ùç¥ËèÕ€zyñä· “>¬1ÐîÄUr{“>,£j{2’µ¸Mú°Œî¨í᱇›\Ÿ—>,£ =Ò> .ú<óaýv4ïóÒ‡eô÷*:/>¬•fÉ••Ñ{os–Zs}^ºÿŒ^­ÿ({ߤûoÌýôØï½%Ý“î?£ ¿T3.ú&s½£'ï[q5©8™{Àèõº¾'Øš«Él2÷€Ñ'ìó·ûa'zg¹¶Ð«Xò{Ì=0–{èß©Wi2÷€Ñ ¶}õR“kZ™{Àènèô}”–Ì=0™{ÀèèÑbÏ2¹ŒV“¹ŒÞ @¿J½’z—¹Œ>-Qý~òp¡8–{àè øÕÊ{‚VœËÜg¹~é¬ÎÆÃ¹âÝý¥Þ…ñp®8FwOœ@wÎÇèèm\eyné2÷€Ñ;zòߨåå² :£Oôäï¥&çŠcôê‰zÔ•‡ űÌGç ­ïÕMNq2óÑ Òë´²rŠ“™Œî€nk”–<ë2óÑÃgÿƒ‡ űÌüä[+IÅÉÌFŸèÉßs&Šc™ÞômÔ•‡ űÌ@9­Óx¸PË|€mϯ*]f>0º#ú^”+ç»Ì|`ôô—*jÁÃ…âØùwGYcoe’Š“çß}"úìÅ’ßm\æ]0zuÓ¥*Šcy€þæÓKËùq.ó.Ý}ï¥JœâdÞ£; ¿œXq.Çò.½î^—¬åå2ï‚Ñ;|òߘãL*ŽÐ ¿œ<œ·aô‰žü7îƒv™sÂèï_D¢w™sâ,çÐ}ï¤z$gX™sÂè†Ú}ï&’»H™sÂèè6÷W“»H™sÂèè/5^‚‡ ½³[Г¿V©Éï´.o=`ô‰žü½6ïäáBq,ãÅAýù½¤#çEºÌxq–ñèß93â2ã…ÑÍC¯¬Œ‡ űŒ@¹Úy¸PËxñÄÁÃ…âXµ Dßï½öä +«m0ú@t¯%ZîTæ½ÿÉ“Ÿþ³Z.³}½:ª8qí=ìÈé]fû8ËötÛッäW#™íÃèæ]«4.ôβ}e:Íre¿ÓÊlFôÞ¿q*Óe¶£wôÞk”kæÎ˸Ìöaô鉳ÉÃ…âX¶éTy¸PËöô—^ŠcÙ>>ôzÞx¸PËöñÄÎÃ…âX¶£ 3±wIÅÉlFï°×åïÎs™íÃèµýžñ2y¸PËöñDÆKåáBq,Ûпãþ»Ìöats”é´W•ɪ‰.³}ÝÑ“o³–•Ëöq™íÃèè/7qŠcÙ>°×ù^^¬œâd¶£Oøäo_È'Šcù62^.+Éï62߯YÖ ¿|£.Þ;Ë|ˆK¯«<œ·=Xæ ¸žO"7ÎGF7@·k裸uBf>0ººÝGñ•mBf>0z úýÔFðpÞë}Ä¥ÇùÁÃù–Ñ' ûÚ‹‹È}%™ùÀè5€~rYî›UÈ̇`þ; o—±rëºþ;£×hºò@åá¢í̃Žö£¬4£jûu•°ÜÚ&¤Íèè¶÷2#yB-¤Íèžü½†[ðpÑë˜ ŒÚ~¯õ1y¸Ð;sœƒÞ «št…BºÀÁ\à@gÀ×óÙÆÃEŸg.0 ïn7‹ç\à.0£; ¿Üî<\ôyæzkQ"ù:¤ Ìè=Óë:çëyFaúöùÁÃÅüÎ\`Ôö{5ìÉÃ…Þ™ Žj}ô2kNïÒæ#ú7Na‡tݽõ^®ä n!]`Fw@÷¶gØšÛ¿‡t=`Ûk©–\YI˜Ñ;¢û,3Y>¤ Ìè=ùÕÊLæY…t½FèsR•‡ Å18ÐýdÞEH˜Ñ ¶ÝK\É=¬tݽ_Å=÷:¤ Ìèè/w¤Šc.p '4öH›œa¥ ÌèµýµyCºÀŒ>3ï}òp¡wæª<°—5¹¢–.p0ÐǵÊÌê]ºÀŒn¨íwÿÝx¸Ð;sá“ÿÆ7+é3zúË9èàáBïÌôg¤óp¡÷ÎôÞu…™ÁÃ…Þ™Ún£ô™œß¥Íè5†®Š\y¸Ð;ó ý­ïÆGòµô Ýý>Ëzgt$îq.ôνÎZüÌú<\è9àð½[iÉÚ}!pF¯1õê¢òp¡wæ€z·Y†'¿˜IœÑ-5Œ‡ ½3пµƒ–8£G 8žŸ|ðp¡w怣'¿G¬óp¡wVïµ}+ÎzRï²Þ£ÏøÙ]!ýwF¯*´‘œß¥ÿ¬Þ ÷ºû|²†[ÈzŒn¨í{–3©wYï‚ÑÒo™NÎÃ…ÞYæ ¿ä×zgõ.ý¥ò@çáBï‹éÕ9i{š±œÞ—Ô;«¶èV[é¹,îÕ6½öëGëù.sN:Ë9ô—;ÐçzgtCm÷^VäôÞeÎ £;¢ãœT—9'ŒèÉ×¾÷2¹œ“.sN½£¶¯½›X¹/ä]VÛ`ôèõ{'•›ß»Ìxaô‰ÚþÊ]f¼0zíàTfë¥&oöéÒïÌï¨ú}”ž¬_×¥ÎèÖvx—8£; û^YÙÊÍï]:àŒ€þÌÆ.pFïål|Íe´vé€3ú@mßOþ:³÷zgxOܹ0y¸Ð;sÀ»ëÜ*zg8 o­—9rû÷.pF7Ôöûí6ÆÃ…Þ™è¾÷qËruºtÀ=ýmÔR“uºtÀ½wt|–î¹õ|—8£OÔö7»ö›SœtÀ½vT~íå|.¯²K¼3Ð_n³j<\(Ž9à€¾7ð{›sĺtÀÝÝÇ^]Ìܳ.pF@~•H:à]:àŒ>Ñ“kïaW®ÏK˜ÑßO[¿¼÷=¿'¿uéwæwt&t”°äªRºÀŒnyÐ{¬K~%îÒftô>k鑜e¤ ÌèÞû{i“ûJÜ¥ Ìè3Óë&}ž9¡} sе\‘ëóÒ íÌ íÈòâ–ç¥Êèè/·˜}ž9¡€ý*-y{]—N(£ kœ—N(£OØöºé¹|Ú.Ý@F¯ yo{›¥%ÝÀ.ÝÀÎÜ@@ÿÎíu]ºŒnˆ~mŒ‡‹>ÏÜ@@Ÿú´‘ìóÒ dôèðt¬’ÜMH7Ñ' ¯v•Ñ’ã¼tĽvàIí'?“n]:b9b€þRi¤ñpÑç™#èo½EiÉ>/1Fw@½¥oòêÒcô@ôUŸÏM}ž¹B€>÷vdÇyé 1z 6oØ*Éq~Ès‘ƒÕdôî­xËåY Y“™ÑÑï9'ÎÃy¯côôQ[±dýº!Ï„2zt«X²šÖ5™}úìö|ëÁàáü;-£OôÞÊGNqCV„fô:xï«ôžûj4äiÜÁNãúËͼ‡óY†Ñ µ=zñäI¥!Oã2ºú[_³$wCžÆeôôeñ|Kiðp¡wv7ÓöÉÃEŸg§q‡ýèìÀ^ä`^$¤ßòç}žy‘€îÕ‹%s†ô"Ýý;;è!½HF@ï{eå=·ƒÒ‹dôŽÞûýÔFçábŽcn j{e%³û†t½àÇZ¦çNç éæt7FIîe†tÝý>ÖŠcn  y=WYq.ÇÜ@@Ÿ»éÙ rCºŒ>QÛc?ø•ìóÒcô:Àé¼ëaFæî“ÒÌô¾WÔíÊ}³ÒctôGý:/¹‡ôãÝÑ“¯Ïu‘ëóÒcô@to#[ |H?ŽÑ;îuQ®š›eä‰TF°íV˹”<‘Êèu€*©}¯ç“•…†tsÝ÷ꢷä,#Ý@F7H¿Õ»0.ÇÜ@@£=ÝVé<\(޹zðp¡8v&=ù>JMÞà6ä™PFŸ€¾¢•~%wRÒ‹dô:iV,WçdH/r0/r ê¸V|ä¼È!½HF·±(5Y{H/’ÑÐ_FçáBqÌ‹DïýîIŠc^$¢ÛÚzOöyéE2ú{Ű—/'-}raH/r0/ÐÃ÷Nj%û¼ô"ÝPÛc¥O. éE2ºx>n=UUr.ú<ó"½^‹À#×ç¥Éèöºõœ??y¸èóÌ‹ åÛl½'÷2Ò‹Ì‹tk«Œ•ÜËH/’Ñ Ð§ç›>Œ‡‹>ϼHøäg+I/rH/’Ñ'jûã°N2ÓiH7¶}‚­{ÿÉê÷SžTšìÄÊDΈ=×ê¬<œ÷ùÉœ@©GÝx8ïóŒn€þ67þÊåÓNéŒ0ºúK¯s.Þ;sF½úÕK²û”ΣO@™a'çŠcô:A½Ê:Êu%û¼tF&sFý;UV¦tFݦéÝ„ñpÑç™3‚ÚþØÂZr¬“Σ {‹âÙ>/FïèÉ_^.ÏÊœÒaô:Á™‘ýäÇ•s§ô&&ó&½YK®ç§ô&ÝÝ}u=—ñ2¥7Áèè{‚·’ô&¦ô&=½_W97pJo‚Ñ;¢à œò¤£OôÞï'V&³Ì—tû¥”—3¡[>Þ»}Ùç‡? öUŸ·«~M7@œP³Ï>o_öùßá¿ ötGm·«´Ïü:û²Ïÿÿñ? ¢ûÜm?ž|ðð_øz‡O~ž§2íË>ÿ;üòÞ'¢ÏuÖ5²/ûüïðwÈü“÷^¯ª¬ô½;z]åárÒëó Ö%>j2ó>ßdŸo¬ÏƒÚûÓÎì¼Ï7Ùçëó`'Õ­ÌÞs}¾É>ßXŸOÞúyJ‹÷ù&û|c}¾áª Þs}¾É>ßXŸkÚºç÷Ï›:yŸ7ÙçÍ2¦×x¸˜eŒõyTùíÅE²Ï›ìóÆú<ª½?ʘžëó&û¼±>*D/æ¹>o²Ïëó°×­£®ïó&û¼±>nâžç¼Ï»ìóteö2ÕÏ ð¼Ï»ìóÎf‡õ.ê9óŒ³>èÚ}+Ùç]öyg}ÞõX×y¸èó„>PÛûQÛ÷gWreåRq·rú*WË).¤â‚)Ô=hV®ÚsŠ ©¸`Š =Ί 6Ç¡'¿ô^ss\È9.˜âÀè¯FÙÝDHÅS¢ïN7“Š ©¸`Šï}wùž]×…T\0Å:äÍÏJb\q]*®3Åu½—i<\(®3Ŷ?^,9Çu©¸Î×áÝy×9Î;Šël†ôxÜ™˜üzÐå Û™ÞQ¯Û+«Hê½K½w¦wc¶ùQZNï]ê½3½úÚŠkI½w©÷ÎôïÞEV.ô>˜ÞQôVÆJê}H½¦÷r ÷þ=9é÷ÁôÚ¾w‘1“»È!õ>˜ÞÊæ==h®÷!õ>˜ÞÁ“|.l‘ÓûzLï¨í[í–ÔûzLï¨íkþ;×ûzLï ÏÊk±šÔû”zŸLï;b#¹¢žRï“éå˜íNw~-4.ô>™ÞAŽYøm’zŸRï“éÐëÃ’JÎïSê}2½£üºM¯Éù}J½O¦8ÔöÇ¡–SܔЛLq(Ë«Ÿ§2¹â–TÜbе>l•ɯFK*n1Å ðZ{rE½¤âS Ç,6’~Ü’Š[Lq ÞètÜ'Å·¤â›ã½µÒWÏÍqKÎq‹)Ñëyà WÜ’Š#ôZ/=ÒVÎW/¢8@[{/så÷Io@7D\Ÿ\Ó~Òíèè­y–ÛÃ~ÒýèÚÞöâæª)Å}Òãè>ùÇÕ>¹5í=þä½OH_בsB÷AŸòÞkþ{TÏ­*k•Š«Lq€n+GNq2ç„Ñ ÐkìÝ„çæ¸*sNÝQÛç^ÛÔ¤âdÎ £ ·½ªô¤ÿ^eÎ £wôäïs\çáBq,çöy;ïD抓9'Œþž_ñr:/Ê•\UV™sRSÈ|¨­´šóß?éíè†Ú¾övåöqUf¼0º#úýk¡óp¡8–ñèõq"Õsû¸*3^½Ã¶ïYfäœÐ*3^}fÞûäáBq,ã¥:üz0WrU)ÝÿÊÜ@”9Y5÷¥´J÷ŸÑ Ð_FZãáBqÎçÚ“r.ÇrГo×yË WœÌ=`ôŽÚ^Ç™ÍË's}¢>Ïêœ<\(޹ÿÝÿþ¸±19ÇI÷¿2÷ÐßÖ:+ÀsÅI÷ŸÑ µÝ{ñ¤û_¥ûÏèèmíÑæ|ïÎÃ…â‚)ÐýqkáÌ).¤âXîzòßQœÌ=`ô‰Úþ8©´rù6UºÿŒþ~âX}»¨<\(޹ÿˆ^Ç^X%¿œH÷ŸÑ­¢Ø[©W.ºJ÷ŸÑÑÇS­N®8éþ3z ú7òëªtÿ½£÷>[¹®ä>NºÿŒ>a¯k³Xòˉôß},Úý¯<\(Žùïq·WœôßݽŽzž犓þ;£;lûãœTRqÒgô@mYÉÎqÒgôÚ^§—>Rî@•8£OHï{–I~9‘8£¿g,¿Ð¯½°‹œâ¤^™è­ÅYa†+N:àŒn°í·|ZãáBqÌGôÕÏ[ȹâ¤Îèž|x3¹“8£wøÞo»ÈÎÃÅÇpôä»ÉU¥tÀ½Ö¥¿W.Çp@w»žÝÿÆÃ…☎ھWÔžÿ^y¸PóaýÍöšÖ“ë:éÃ2ºÁ¶?ÝNË'}XFwÔöûrçáBq̇Em½ëÉuôa}z­W™I_¦I'”Ñk?[YI'´1'ÑïÕ6}ž9¡ˆþ¸É«&÷2Ò etô÷‚#Wë£I'”ÑÐ_ª¨}žDFO~¯.FOÎ2ò$2£OD¿W]˜<\(Ž9¡mêšN•‡ Å1'Ð-z©+©8é„2º¡¶Ï(-ûÅL:¡ŒîmjÿÝy¸PsBý~r!x¸PsBÑ“ßt›É¯Ò eôÛÞËš¹³ÿôþ'O~BÅíÅÅ•ÜÇI–ÑkC~Ü*±’z—>lc>, ·ÇÅ}=©wéÃ2º¡¶Çõ\)Ôx¸Ð;óaýìMú°Œ 9¡{M[“3¬ôa½£¶GïÒ‡eô‰Ú¾{]MžDnÒ‡eôjà<ìª{a•ÛÇ™ôaù°ˆ>ÚÞÂæ¾šôaÝ}/GЭܹH“>,£; ?¶ï–Ì52éÃ2zÀ'óょsÅ1úDôÇ}RIOʤËèÕйȵ÷qÉ>/}Xc>¬¡©{+Ó’}^ú°Œn¨ío}–ä×B“>,£»ÕÕ»0éÃ2z úÚ»‰d~I–Ñ;zòãz®CÞy8Ÿe}¢¶ßWV“‡ Å1ØNhåáBqÌ6Tý~•–tMºÀŒnˆþ¸‹:;ËH˜ÑÝQÛ&tOöyéÃ2z5t¯Ð,=ùí¤k̇5T½íýDn/cÒ‡etCmߣÍJÖâ6éÃ2º£¶·1÷f&×ç¥ËèÚ¾âù¬PðpÑç™ èÍvÓ¯\†›I–Ñ«“È^K·äÊJž@7vÝÐNõzª[Øx¸èóìº%ªß}ž@ô=m–kæÎÚ<ÎèÞûèåJfuš<Îèµ}ϰݒã¼<ÎèÕ€ <·â²» ™{`,÷Ð_ƺÆÃEŸg¹¨íÖÏyŸ—¹Œî¨í»×ÙH®mdî£jûÞEÎì8/s}¢¶×ÇÅÀ5×ç¥ûÏèÕú²÷MºÿÆÜ@os¯l’î¿I÷ŸÑ µý^IÌx¸èóÌýGôfµ$Oa›tÿ=Г¯‹¸“}^ºÿŒÞQÛïß.:;h–{`‰¬ÉÃ…âXî<Æ~ò¹ 7“¹Ær½íµÍ•¬‚n2÷€Ñ µý^óÁx¸PË=ôo}§•¹ŒˆþªÈ&s½#ú½JjçáBq,÷À~–{`2÷€Ñ«¡ZÜQjv/#sŒåÎ|žÜ¿ËÜF7Ôö·XÅGNq2÷€Ñµ}µ2“·”šÌ=`ô@ô±Çºd¶ÉÜFïèÉ7/^“Š“¹Œ>PÛ-J«¹šÌ&s}"úý~ØÉÃ…ÞYîömÖbÉïu2÷ÀXî §^¥ÉÜF7Ôöº75¹¦•¹Œî†OßÏdîÉÜFôä÷¢2’'•Læ0zGmoã¼ÿë]æ0ú´DõûÉÃ…âXî£3à—•÷„­8—¹ÎrüÒY‡sÅ1º¡¶ßë]çŠct÷Ä tçá\qŒˆn{œ÷Ü.Òeî£wôä¿QËËetFŸ¨í÷ŠR“‡sÅ1zõD=êÊÃ…âX惣܃‡œTœÌ|`tƒô·µ÷R9ÅÉÌFw@o×^Ó&OãºÌ|`ôðÄÙÿàáBq,ó?ù¾û]Nq2óÑ'êó÷܃ÉÃ…âXæƒ7}uåáBq,óÐ_Në4.Ç2PÛ¿±ªt™ùÀèé{°»r.°ËÌFôäïUÔ‚‡ űóï€þxð#ù¥ÔåùwFŸèɯ½ªL~·q™wÁèÕMW”ª<\(Žå] zóQZÎs™wÁè†è{/Uzä'ó.ÝýåÄŠóp¡8–wè}¯¬’µ¼\æ]0z‡OþsœIÅú@m¿Ÿ<œ·aô Ÿ|þ>h—9'Œþž'ÿ½Ëœg9'€ÞlË=’3¬Ì9atCmŸ{‚mÉ]¤Ì9atôºÇy«É]¤Ì9aô@m¿×x .ôÎn=@ôˆ2’ßi]ÞzÀè=ù{mÞÉÃ…âXÆ‹ƒúó×(}ä¼H—/Î2^ý;gF\f¼0ºÁ¶ßVVÆÃ…âXÆ ¢ßo£v.Ç2^Œþ~Óúë»ñ#§w™íã,ÛÇѽ{m³’_d¶£¢ß¿UzgÙ>€þ8¥5³ßie¶£zïß8•é2Û‡Ñ;zò}¿÷™;/ã2ۇѧ'rÌ&ŠcÙ>>t¦SåáBq,ÛLJ¾á¥ñp¡8–íƒÚ~_ÏŠcÙ>ž¸ñÁy¸PËöAt2#©8™íÃèöºüÝy.³}}¢¶ß3^&ŠcÙ>žÈx©<\(ŽeûúwÜ—Ù>ŒnŽ3F²j¢ËlFwD¯neå²}\fû0zøÔ7qŠcÙ>°×íáf­œâd¶£Oøäo_È'Šcù6ò.®(+’ßmd¾³¬_úuðpñÞYæC\ú{]åá¼íÁ2}¿Ãç“ȇóÑ†Ñ ¶}Ë=Y×(dæ£{ ØÛ,¾R£MÈÌF¸ô©àá¼×1ú@ôû8?x8ßÃ2úôÇí65r_‰Cf>0z ä¿2-÷Í*dæC0ÿ=*<©´Vn]Ògô÷1MU¨<\´yÐÑ~”õÒƒftCô¨Å,·¶ éA3ºz»ön"yB-¤ÍèÚ~¯á<\ô:æGÓµ>&zg.p€sÐÍËHºB!]à`.p 3àóùì@ãá¢Ï38}í |Îé3º£'¿Üy¸èóÌôZ÷º.ù:¤ Ìè=Óë:çëyFè½ßoŸ<\Ìï̆ïýV {òp¡wær÷‹Ÿ5§wésý§°CºÀŒnáðÔÆLÞàÒftôÇÙÀQsû÷.0£l»³äÊJºÀŒÞ½½ÎÕæ é3úDO~¯mz2Ï*¤ Ìè5BŸ“ª<\(޹À°¦ÓLæ]„tÝ`Û£¬+¹‡•.0£;¢ïeÝå¹oÔ!]`F@¹#5x¸Ps½Î½¤NΰÒfôèߨÍÒfô™y ½38è{Ÿ\QK8˜ èÖ[ñ¬Þ¥ Ìè†Ú~÷߇ ½3>ùo|³’.0£¢ßÏAzg.ptíŒt.ôÞ™Þ»®03x¸Ð;ó QÛÛÞÆÍäü.=hF¯1tUäÊÃ…Þ™ èoÖ¢Dòµô ÝbèYÆx¸Ð;ó #qψóp¡wæA#úýLhðp¡wæA#ú^×õ•Ô»ô } ÷¾ZégÖÇàáBï̇ïÝKOÖî é€3z©W•‡ ½3ЭõR=ùÅL:àŒn‘¨ù`<\è9à1¶ƒ–8£G ØžŸ|ðp¡w怣¶ßïë<\èÕ»@m÷V¢'õ.ë]0úŒŸÝµÒgôMß.fY‘œß¥ÿ¬Þ [­e$k¸…¬wÁè†Úî»í3©wYï‚ÑÑï™NÎÃ…ÞYæC,_<\èÕ»@m¿Wè<\è}1½£/=ʰœÞ—Ô;«¶èÁ÷\wÈjŒ^ûõ£õ|—9'åœúËè‡s½3º¡¶QjäôÞeÎ £;¢ãœT—9'ŒðÉï…]ärNºÌ9aôèºuå¾wYmƒÑj{D¹fn~ï2ã…Ñ'zïߨ<ÐeÆ £×ŽNeöýÚ“z—xgxGÕïWiÉúu]:àŒnýg÷€wé€3ºwƒÕ6ÖÊÍï]:àŒÝ~”ÙØ¥ÎèÑëÚ>—ÑÚ¥ÎèÑ÷8ßÏìýÁÃ…Þ™Þw.L.ôÎðîú·ÊÃ…Þ™èÖ¶ÞGnÿÞ¥Îè†Ú~¿ÝÆx¸Ð;sÀ;rÀ¯b–«{Ð¥ÎèèoÖ‹%ëté€3zGO~Íâž[Ïwé€3úDmßKê=Ëå'pF¯DÞjOæ”vé€wæ€úËmV‡ Å1Ð÷¾—šsĺtÀÝÑ“÷VæÌ}1ëÒgôt³Ô¤Þ¥Îè=ùGQ§±r}^ºÀŒ^;pÄlOqɯF]ºÀ¹À Ý}Þ’«Jé3ºuäA×2“_‰»tÝÝg¹"9ËH˜Ñ½wßÛ÷äWâ.]`FŸ™^7y¸èóÌ íèöù½•º"×ç¥Ú™Úñ™ÐfÉq^:¡Œn€þr‹™ñpÑç™ èm½®K'”ѵý;ã¼tB}~Ñöqåòi»týÝí}iûë’n`—n`gn`Ÿ?º½®K7Ñ Ñï£ñpÑç™è¾÷2É>/Ý@F@Ǫ2yÃK—n £OÔöÇI¥–ç¥#ÆèµOÊÆsíýÊÃEŸgŽ ¿Ti<\ôyæˆú^Ïï |²ÏKGŒÑ=ù¹Ò7yuéˆ1zº_þ|n"x¸èóÌBôZŸo·™<\ôyæ ŠN.DIŽóCž‹¬&3 [Ûkږ˳²&3£;¤ßrNœ‡ó^ÇèèÝöüžëuCž eôèdÞ‘¬¦5dMfF€î~=ßz0x8ÿNËè=y³Ò#§¸!+B3z ¼÷=ËôÜW£!OãvÑï7ó6ÎgF7DßkÚ–<©4äi\Fw@ßëº^’»‰!Oã2zº?¼‰äI¥!Oã2úÌ´}òpÑçÙiÜa?:;0¤9˜ é·üùÆÃEŸg^$ ·=¿G2×hH/’ÑÑ¿±ƒÒ‹dôt +WÏí ‡ô"½Ó§6:ssQÛk”Hf÷ é2ú{ŽÁË×Âýä=w:oH7p07p Ó¸VKr/3¤Èè†è÷±Îx¸PsÑ“_ó¹ÊŠóp¡8æºÇLWÒ dô‰Ú>÷Úf%û¼ô㽎Wg$÷ˆÍdŸ—~Ü`~ ï½{™Wî›Õ~£ ?¾Üì}®ÏK?ŽÑÐû£ºNv'%ý8F@{zïÙYFúqŒÞÑ“ðrÕÜ,#O¤2ú@mßmMf°y"•Ñë@URWiÉÊBCºƒ¹ˆµ\-9ËH7Ñ Òoõ.Œ‡ Å17p GlËÝrøn £G†<\(Ž EOÞæ^Y%¿]È3¡Œ>Ýçãü{r'%½HF¯y‘£ËÕ9Ò‹Ì‹Öân#çEéE2º äˆí÷ž¬½?¤ÉèŽè÷ÑÆy¸Pó"Ñ{¿{RÁÅ☠{ÝuKöyéE2zÈêé“ Cz‘ƒy‘€¾§ŽÒW²ÏK/’Ñ µ}oa³'†ô"Ý<7Ÿª*9}žy‘€»Ë·äͼCz‘Œ>a¯[Ïù󓇋>ϼȱP¾Í(‘»wH/r0/Ð÷вØJîe¤Éèèníù¦ãá¢Ï3/>ùÝí’^ä^$£OÔv¯Ï§2'½Žµ}¢;‘½Ôdõû)O*Mvbe"gÄŸkuVÎûüdÎÈlºuãá¼Ï3ºú›×«\¹|Ú)Fw@éuÎÃÅ{gΠúps'V¦tF}¢¶ßgØÉùâ½NT¯ò*óJöyéŒLæŒúwª¬LéŒ0º¡¶ßwÆÃEŸgÎl{/Ë’ctF=&r…FiÙ>/FïèÉG”æ¹S™S:#Œþ^‹õåäÂÞL\97pJob2oÑÛÖ{r=?¥7Áèè­2{.ãeJo‚Ñ}¢:¥VKÒ›˜Ò›`ô@ôÝ›ÊÈ­ç§ô&½Oÿ‘8åI%FŸè½ßO¬L.f™/é~µ«Â•UýmüË>ÿ;üñ¯ú¼_õkºúãtÞøìóþeŸÿþ b@w@o3àŸùuþeŸÿþ â@D_Ï6Ç“þ @ïèɇÿ<•é_öùßáïø“÷>}<êO~òðwÈü“÷^¯×u]ÌzîeüËYæw8€œôÆú< ×zf:ñ>ßdŸo¬ÏƒõÞÂ'xŸo²Ï7Öç_éëšÅ{Ïõù&û|c}¬ç»o3×ç›ìóõùWz·¹§¸žëóMöùÆú¾ÓŽ\Ÿ7ÙçÍ2¦×x¸˜eŒõy{ØU–'û¼É>o¬Ïo¬Ï£L§ÇtÏõy“}ÞXŸG½®¶£®ïó&û¼±>Nß?næMŽó.û<]Y½Ò{í¥™ëó.û¼³Y´}3›—Ï2.gg}e:Õr­dŸwÙçõy×c]çá¢Ïú¸p½‹q¶}ððwH÷? OÔö±GÚ+¹²r©8gŠCgÿía…æRqÁrl6µçRqÁzœ7.lŽCO~Or^ss\È9.˜â@Ûµy³»‰Š ¦¸§´ÖY™+.¤â‚)´}÷º–]×…T\0ÅŒ—Ç©#9Çu©¸Î×õ^¦ñp¡¸ÎÚÞ÷XgÉ9®KÅu¦8DŸgF+W\—Šël†íðôýŠä׃.gØÎôŽ3Ü"’zïRïé½£3àÊ9½w©÷ÎôÞaÒã$2×{—zïLï(ß&žw‘•‡ ½¦wP÷àqƒÛJê}H½¦w|øÕ’3ìzLï(ËËʘÉ]äzLï(Ãí*#’+ê!õ>˜ÞÑ­»ñ-rzRïƒéµÝÏjZ\ïCê}0½ì\É=ìzLïèökïã’zŸRï“éd:õMÉõ”zŸLï¨ö~;ïÂæzŸRï“éÔ9¹6½%õ>¥Þ'Óû„7¼TKÎïSê}2½£Úûvf¸q½O©÷ɇÚþ(8ÑrŠ›Rq“)e¸­½›9Å-©¸Å²¼6="ùÕhIÅ-¦¸…3zrE½¤âSªü•:’~Ü’Š[Lq íËÊU“3ì’Š[lŽt¿J[=7Ç-9Ç-¦8@·qÖtâŠ[Rq„^ë¥GÚÊùâêEWQ v;«iQÅ}ÒÛÐ Ðw·ó’\Ó~ÒíèèjÕr{ØOºÿ=PÛ}OðWM)î“@ïðÉ(3·¦ý ÇŸ¼÷‰è6ìÈ9¡Šû Ï?yïµÿ}ϰ+r«ÊZ¥â*S¨,Ô¯^æÈ)Næœ0ºº=îòÜWeÎ £;zòÊÀ5©8™sÂèèþȧMúïUæœ0z¯UÏq‡ űœØç£\‘[UV™sÂèµ6pwÞ8³¼¸âdÎImLq ó¡Fé5ç¿ÒÛÐ µ}̲VnWeÆ £; ¿|-t.Ç2^ÝÚ(æ¹}\•/ŒÞQÛ×ÛŒœZeÆ £ÏÌ{Ÿ<\(Že¼TÇ7÷­äªRºÿ•¹ÿ€»2kîKi•î?£[u=ÒŠs¦8מ”óp¡8–{ènuï “Š“¹ŒÞQÛmÏï3—cVeî£OÔçïY“‡ Å1÷¿¬ ì#9ÇI÷¿2÷¿¢[ü<µÁ'ÝF7@TÓšI÷¿J÷ŸÑÐcZ‰ó½;Š ¦8à¿ÏQÖ¹¢.ÇrГÿŽâdî£OÔö{¤ÍåÛTéþ3z­]»¨<\(޹ÿÕúØ}K~9‘î?£ ·½º°+—G]¥ûÏèèµÌž\UJ÷ŸÑÑ¿‘_W¥ûÏèõº~·QsÅI÷ŸÑ'êur–ür"ýwF¯uh÷¿òp¡8æ¿ú[¯ë¸[‡+NúïŒn€nö¸¡59ÇIÿѶ}•™ôß«ôß=PÛ{ì}\rŽ“þ;£ÔöÇ3}¤Ü*pFŸn¥^É/'ÒgôZþ¸="§8é€W怺?îŸ9¼JœÑ µýžOk<\(Ž9à€^ç<ërÅIœÑ=ùõ¸‰;¹“8£wD¿ï";ssÀÑ“oý¬ Ç'pF¯ué/䕇 Å1ÐçVÜ“ûßx¸PsÀQÛwŸïÉÓyU:àŒî€þ²‡u.Çp@9<\(n1Å¡ê:­••üV¹¤â˜Žž|Û‹Ê‘sÀ«tÀ½¶K¯i+çŠkÌôi£X2ç¤IœÑ Ð_N çŠctôÇÝ:a¹œ“&pFÔöèç]TqM:àŒ>QÛ¿ñµ°IšÑ·ºÀü¾g™ä×Â&=èÆ/}ØÆ|X@߳ĕۿ7éÃ2ºzo½øL®¬¤Ë莞ü¦wOî&¤ËèÚ¾ìù¬PðpÑ癋Ú~_Ïw.fæÃ¶øQ>m“>,£¿»?êü{åáBq̇ô·˜³xr]'}XF7Øö­wO*Nú°Œî¨í÷/äÎÅ☠èq=¹®“>,£O@T ½’¾L“N(£×6~¶²’NhcN( ¿TÛh<\ôyæ„"zìlMîe¤Êèèï¡G®ÖG“N(£ ¿TQ .ú<;‰Œž|›%zr–‘'‘}"ú½êÂäáBqÌ mS×tª<\(Ž9¡€Þ×ãÚ¤â¤ÊèèÖ[™Ù/fÒ etoSûïÎÃ…â˜Ú¦>¹<\(Ž9¡èÉ×UÖL~=N(£ÔöÇ-f3wöÿƒÞÿäÉOØöZüJîã¤Ëèµ?n/im%õ.}ØÆ|X@ߣìYšë]ú°Œn¨í+ž+…zg>,¢#ƒ½I–ÑÐ÷z”šœa¥Ëè½­Ÿé]ú°Œ>½Ž¾wIÅI–Ñ«½:b1j±dµ “>¬1ÑÍKXîk¡I–Ñ Ð»ï‘våÎEšôaÝÝF+#™kdÒ‡eô@OþîÇçŠcô èþ¸S)éI™ôa½ªÁþ¸<Ùç¥k̇ôýs‹µdŸ—>,£ ïÆ{I~-4éÃ2ºúwê]˜ôa=ýýî¼ÜªÒ¤Ëèöºñ\‡¼óp>Ë0úô—•ÕäáBq̶„Zy¸Ps U¿ßzOºÀ&]`F7D¯{ÿže¤ ÌèèuµâÉr“.0£ û¼vÛ“Š“.0£O@kí*=Ùç¥ËèÕ€zyñä· “>¬1ÐÝå•Û˘ôaÝPÛ{”‘¬ÅmÒ‡etGm=Üäú¼ôa=}ì‘öé¬PðpÑç™ èÞ÷FêÊe¸™ôaý½ŠÎ‹k¥Yre%O ;èo󲧺…‡‹>ÏN [¢ú½ñpÑçÙ t@o1÷P—;kò:£ ‡ï6™Õiò:£OCõç÷gÉq^žgôjÀýßc]Íî&dî±Ü@ë}žåº÷VZò´ŽÉÜFw@¯¾vÓ“k™{ÀèÞ{›Å³ã¼Ì=`ô‰ÞûãøZs}^ºÿŒ^­ÿ({ߤûoÌýôØï½%Ý“î?£ ¿T3.úÑ“¿çL.Ç2¼éÛ¨+Šc™€þrZ§ñp¡8–ùÛž_UºÌ|`tGô½N.WÎv™ùÀèè/UÔ‚‡ űó>ÆÞÊ$'Ï¿3úDôÙ‹%¿Û¸Ì»`ôê¦+JU.Çò.ýͧ—–óã\æ]0º!úÞK•9Åɼ Fw@9±â<\(Žå] zݽ.YËËeÞ£wøä¿1Ç™T¡@9;0x8ÿnÃè=ùoÜí2ç„Ñß¿ˆþDï2çÄYÎ  ï§¸—œaeÎ £j{ô½›Hî"eÎ £; ÛÜs\Mî"eÎ £ ¿Ôx .ôÎn=@OþZ¥&¿Óº¼õ€Ñ'zò÷Ú¼“‡ űŒõç÷’vŽœé2ãÅYÆ  ç̈ˌF7½²2.Ç2^ýå6jçáBq,ãÅ7>ŠcÕ6}¿÷Ú“3¬¬¶Áèѽ–h¹S™ôþ'O~úÏj}¸Ìöaôê¨âĵ÷°#§w™íã,ÛÐm¿÷¾’_d¶£›wý­Òx¸Ð;Ëöq”é4Ë•ýN+³}=Ð{ÿÆ©L—Ù>ŒÞÑ{¯Q®™;/ã2ۇѧ'rÌ&ŠcÙ>>t¦SåáBq,ÛÐ_nxi<\(ŽeûøÐëyãáBq,ÛÇ7>8ŠcÙ>Ž*ÌÄÞM$'³}½Ã^—¿;Ïe¶£OÔö{ÆËäáBq,ÛÇ/•‡ űl@ÿŽûï2Û‡ÑÍQ¦Ó^U&«&ºÌöatGO¾ÍZV.ÛÇe¶£ ¿ÜÄ<\(ŽeûÀ^ç{y±rŠ“Ù>Œ>á“¿}!Ÿ<\(ŽåÛ8Èx¹¬X$¿ÛÈ|gY€þò:x¸xï,ó!.ý½®òpÞö`™€>âz>‰Üx8mÝÝ®½“JÖ5 ™ùÀèèvÅWj´ ™ùÀèè÷SÁÃy¯cô—çç{XFŸ€îk/."÷•8dæ£×ø5Êe¹oV!3‚ùE\ÆÊ­ëBúïŒ^£éÊ•‡‹¶3:Ú²>BzÐŒn¨í×UÂrk›4£; ÛÞËŒä µ4£zò÷nÁÃE¯c.0jû½ÖÇäáBïÌpz/¬jÒ és_Ïg}ž¹À€¾»Ý,žsCºÀŒî€þr¸ópÑç™ è­E‰ä7ê.0£÷L¯ë<œ¯ç}„éÛçó;sQÛïÕ°'zg.p8ªõÑˬ9½K8˜ Œèß8…ÒftôÖ{¹’7¸…tÝÝÛžaknÿÒfô€m¯¥Zre%]`Fïˆî³Ìdø.0£OôäW+3™gÒfô¡ÏIU.Ç\à@÷¿Ò’y!]`F7Øv/q%÷°ÒftGô~÷Ü7ê.0£ ¿Ü‘<\(޹ÀœÐØ#mr†•.0£ÔöoÔæ é3ú̼÷ÉÃ…Þ™ ¨òÀ^^ÔäŠZºÀÁ\`@×*3«wé3º¡¶ßýwãáBï̆Oþ߬¤ Ìèè/ç ƒ‡ ½3Ð_œ‘ÎÃ…Þ;Ó{×fzg4j»Ògr~—4£×º*råáBï̃ô·¾ÉoÔÒƒftCôû,c<\èyБ¸gÄy¸Ð;ó ý~&4x¸Ð;ó Q¯[µ\+©wéA3úô:kñ3ëcðp¡wæ€Ã÷n¥%k÷…tÀ½ÆÔ«‹ÊÃ…Þ™èÝfžüb&pF·HÔ|0.ôÎp@ÿÖZ:àŒ\àx~òÁÃ…Þ™Žžüý±ÎÃ…ÞY½ Ôö­8ëI½ËzŒ>ãgwm„ôß½ª<ÐJDr~—þ{°z€ÞëîóÉn!ë]0º¡¶ïYf̤Þe½ FwH¿e:9zg™€þ’_<\èÕ»ô—ʇ ½/¦wTç¤íiÆrz_Rï¬Ú¢[m¥ç²¸CVÛ`ôÚ¯­ç»Ì9é,çÐ_î@o<œëÑ µÝ{Y‘Ó{—9'ŒîˆþsR]æœ0z '_ûÞËärNºÌ9aôŽÚ¾önbå¾wYmƒÑ ×kìTn~ï2ã…Ñ'jû7*t™ñÂ赃S™­—š¼Ù§K¼3¼£ê÷Qz²~]—8£[ÿÙ=à]:àŒî€¾ûo±•›ß»tÀ=ý;™]:àŒÞ;Ê=ØøšËhíÒgôÚ¾Ÿüufï.ôÎðž¸saòp¡wæ€w×7¸U.ôÎp@ßZ/säöï]:àŒn¨í÷ÛmŒ‡ ½3Ð}ïã–åêté€3zúÛ¨¥&ëté€3zïè ø,Ýsëù.pFŸ¨íoví96§8é€3zí¨üÚËù\^e—xg8 ¿ÜfÕx¸PsÀ}oà÷&6çˆué€3ºº½º˜¹/f]:àŒ€>ü*‘tÀ»tÀ}¢'×Þî\Ÿ—.0£¿Ÿ¶~yï{~O~5êÒîÌîèLè(aÉU¥tÝ:ò ÷X—üJÜ¥ Ìèè}ÖÒ#9ËH˜Ñ½÷9öÒ&÷•¸K˜Ñg¦×M.úÚ}ž¹€>õi#Ùç¥ÈèÑá9èX%¹›n £O@_í*£%Çyéˆ1zíÀ“ÚO~&3ܺtÄ:sÄý¥ÒHãá¢Ï3G Ðßz‹Ò’}^:bŒî€>zKßäÕ¥#Æèè«>Ÿ›.úV±d5­!k23úôÙíùÖƒÁÃùwZFŸè½‡œâ†¬Íèu4ðÞWé=÷ÕhÈÓ¸ƒÆô—›yç³ £j{ôâÉ“JCžÆetô·¾fIî&†<ËèèËâù–ÒàáBïì4n¦í“‡‹>ÏNãûÑÙ!½ÈÁ¼HH¿åÏ7.ú<ó"Ý«Kæ éE2ºúwvÐCz‘Œ€Þ÷ÊÊ{n=¤Éè½÷û©ÎÃÅÇÜ@Ôö:ÊJf÷ é2zÀµLÏÎÒ Ì è4nŒ’ÜË é2º!ú}¬3.ÇÜ@@óz®²â<\(޹€>wÓ³ä†t}¢¶Ç~ð+Ùç¥Çèu€Óy×ÃŒÌÝ'5¤7˜è}¯¨Û•ûf5¤Çèèúu^r76éÇ1º£'_Ÿë"×ç¥ÇèèÞF¶ø~£wÜë¢\57ËÈ©Œ>`Û­–5r;)y"•ÑëURû^Ï'+ éæºïÕEoÉYFºŒn~«wa<\(޹€þ6F{º­Òy¸Ps3ôàáBqìL(zò}”š¼ÁmÈ3¡Œ>}E+ýJÉèu /Ò¬X®ÎÉ^ä`^ä@Õq­øÈy‘Cz‘Œn9bQj²öþ^$£; ¿Œ6ÎÅ☉ÞûÝ“ .ǼHD·µõžìóÒ‹dô÷Ša/_NZúäÂ^ä`^$ ‡ïÔJöyéE2º¡¶ÇJŸ\Ò‹dtð|Üzªªä<\ôyæEz½G®ÏK/’Ñ'ìuë9~òpÑç™9Ê·ÙzOîe¤9˜ èÖV+¹—‘^$£ OÏ7}}žy‘ðÉÏV’^ä^$£OÔöÇad¦Ón mû5Z÷þ=’Õï§<©4Ù‰•‰œ{®ÕYy8ïó“9#€þRºñpÞçÝýmnü•˧Òatô—^ç<\¼wæŒzÝëô’¬Á>¥3ÂèÐ_fØÉùâ½NP¯²Žr]É>/‘Éœ@ÿN••)F·iz7a<\ôy挠¶?¶°–ë¤3ÂèèÞ¢x¶ÏKg„Ñ;zò——Ës§2§tF½Npfd?ùqåÜÀ)½‰É¼ @oÅ’ëù)½ F7@wßC]Ïe¼LéM0ºúžà­$½‰)½ FDï×UFÎ œÒ›`ôŽèßp§<©Äè½÷û‰•ÉÃÅ,ƒéÿõ÷ý¨ºýý~›¿èõILÿt o*¼Ñpt.òQ¯ó#Üh¸+º“ð–i{#ቶ³ðDÛYx¢í_‡[¦íFÂmgቶ³ðDÛ¿÷LÛ„'ÚÎÂmgቶ™¶ O´…'ÚÎÂmÿ:¼gÚÞIx¢í,<Ñvžhû×á#ÓöAÂmgቶ³ðDÛ¿Ÿ™¶Ožh; O´…'Úþþ÷ÿùŸ¿þûÿøý¿ÿýŸÿåßþöŸÿ+ïÿÿøï¿ßþ¢¶^pøóºÚÊç_´ç¿ø"Ü_ÂÑŸþ»>_Âÿ«öü¯>ÿŸ¶+/áeÐ1¤×âök”ûõ²y\£1qøGÛ›p÷ÕÙ¯¿øxú£ÔˆÖqøçǵYìzoðû_Ôë“Þ–U^ôWf诿hŸ]âQÒq¸ß~ãÇ_ÄçK/~ŒÃûg™}}>ºúñPvôã†M>?z÷/пÿbe~|»n¿¨Ÿ?ëñ~oŸÿª­÷:"¿ÿÂn¯‡>¡2êø|t­þEýúÇÏî^÷½}üżýwqøúâÉÛuëÍ0Üê磛½Õ^g-n_…{æ½ÛÇ£+3f·Ïðži»OeÄXöñÞíèO£yÃ/ÎÖgŸmôÉø•yq^oºüø‹G÷¸¶§~!X·/ú¼.FÌ…Ãã³Û¸ýºàä×_ôÛ_àðñE§õÔ£û¼¡ðqÐÊÛÇ‹‹Ô£û¼r¬´§nóyO {ïŸwKܺMÄMK8¼ÑöH VŸ•1oÃÅg =öâúõÅ,ÓSmÿ¬°Ðö³[Ÿ¶§$ÓÇ‚ý<ÝøûâðõÅ“53EŽvëa™'?ü«ðÈüøÏä˜ûŸ‚ݯwàNûé¹Þê±2ôOûêÖç?¿ñ³¶~£±­ËküÕöϯ'åò݇*|òŸßʵy·þñŸeOî»ãð£Û˜ÕÕű®-á{¾5~<¡Ù¦ÿÕçÛçÚ¦ôæ>`Û[­·ßøñGºfsLÿ\ÛÞçGÛ?×6Q®±ðÚ¦}¬mîîcÕBŸüÇæÞŽVù v›ö±ù òñã³U¶7ÅŽÃ×á–¢›}ñã?'èR›Ï8üó7¶µçEûø‹Ï1|OÜp nóðýÇ{½ýwqøGï(k­ú1P·Ï©÷m/ÔÇ?þsþÝÄ¿ømö¨ wZ?öÚeösêeîs¾=ºÉöºÏ™ð&™ÏIŠé½Õë>§ÖëιhÏXýƒþ9ý”qá¸×õcåëk~ŽuŸÓO}¼¸ŠÃDZ¦]køýsúa?þœ‹j÷ùñÞÏé'† ¿?¡¿8JÛ uüäÇøâÑ)?ïý ‡¯Ûoüë/>g™GÅä½R‚៳LÙCÂuýõãí˜?ÚÜ#-|òÇgɲ7Žm¿è‡âÖ;);g™ýâFýø‹£Cì±Ã‡Ÿópÿew¼ÿÅ1Ë´Ç2>:;g™ýÞÖgx{ꎳãðãÑù~÷ì￈ó½ë zÿŠ~ þ˜bqø¼5ñã/އRç4üèÚçHûüèÚý¡àðs^ñ±4²Ïték¯³pÛ?vÐu®¿™×>çáÙ}´Nû¹7ÞZô/ävÌ„{º>'fÇpQÇÕ‡Û}Þ<óâ¬Ñö¹ó¯Váðy{½±n݆3ìó£;gدŸ¼·[×þø K…ûWôH…%·ÞŒÃç­wüõ‡KK«c†}~ò‘¢î"Ëû½¹óã/Ö­?Áðc~nûçÔ[¼×úÅ`uÌ÷ðcùzœ?¶Ï?þœz­ÞÚ1ïõˆ×ÉÇR‰`?çáÒ¯ø5küú‹žé6Ÿ3l™×^…ô¿˜·¿Àáë&ë¿þâs†-}ëÇð£;fØ§ÑÆvµ½D…‚=œ»²GÝõã/>Û±ŸÝÂáÇê¢ïUeÿø‹£;Ö¸–ãðcûo{Oú—dü˜aw¯kø“—3l¬óãÇ?íãêÞ¢áp?R®~Í¿ø´ôUƒñ“÷c†½ýøc†µixœ÷c†Ý*YÃ>þâ\rµ†‡ o÷'ôñŸ¥ï5í…ßûç [Æ|Dúø »=þ9ÃÞèÇ>nºãáÂϽæSÛÛ̼÷Ïyø± ˜ã¼Ûuš=Ž¿ø9A¿ÿÆ¿8ê½¼_„Û’9&h"‹›.?þ¢g{loáÇšvíÍõ?~}Ñç™›Ðiü¹íçÌ]÷Šõ~n”ßðÇ_x¦ÛÓøê3>¶Bî©GwLãÏöœ¹¿~ï¾¾øñŸß¨K\Ãð>ÎoÔÏôóuï×Wáþ=nÃïoçÒª~<ºÏoÔl þ\]ìTüúty»æå1ñ5\ôÃPë#>¾QUäËØ3¡ã÷~T~n{ï)úø*|Þ:__t›qŸ~`ø±8ù5¼½ÔÌ`Óı8¹…GæÇþÕ™)rÌ/:íXú¼¾ëfË´ýXÛüõzÿùßÿß¿ý×ßþñþ†ñ¢VEDyLP-1.10.4/Data/Netlib/sierra.mps.gz0000644000175200017520000012157110430174061015571 0ustar coincoin‹çK®9sierra.mps¥}[rã:Ïíû©úç l—Å‹/-ɺ¤l·c'N:óÈŠdl‚\Ñ{³b€X!ˆK"ÈóŸÓáÅý»‡ëõÏÿý¿ëßÏÛÿý¿—ãË˺®ë¦ Ú"hË ­‚¶^ÚM}®‚¶Ú2h« ítOõ[´EЖA[m§{®ß« -‚¶ Ú*h;ÝK}«‚¶Ú2h« ítßêK´EЖA[m§{ 0ßÌ·ó-À| 0¿×ŸUÐA[m´îG`÷#°ûØýì~v?ê{ {tïî=нº_îW ûè~º_N÷^TA[m´UÐöºÍŸ*h‹ -ƒ¶ ÚN÷³þWm´eÐVAÛé~ÕßUÐA[m´î¿›¿§¶Ú2h« ít¿Ìßæïów€ùÛcnþ´ÎW¦-‚¶ Ú*h;ÝÚûÙ´EЖA[í@· t›@· t›@·ñºíg´EЖA[m§Û4u´EЖA[í@· tÛ@· tÛ@·uº·¦«‚¶Ú2h« ítï‹+ÓA[m´½nûVm´eÐVAÛé~7îÞ7m´eÐVAÛëv_UÐA[m´Ýö¿L[m´UÐvºµgÓA[m´Ý!ÐÝ!ÐÝÁé¶­‹+ÓA[m´Ýc { tî1Ð=:ÝCëbÒ´EЖA[í@÷èÝc { t½Ý>ðsø¹üÜ~î?m_m´eÐVAÛé¾côŒÑk0F¯Á½ct |u |u |u |u |ulî!Ð=º‡@÷èžÝS { tOîÉéžÚ×*h‹ -ƒ¶ ÚN÷Ø=vÏÝs`÷ؽ´n^gÚ"hË ­‚¶Ó}kÝÉ´EЖA[m§{ âêÄÕ5ˆ«kW× ®®í-нº·@÷èÞ¼nØí»]`· ìvÞî­½VA[m´UÐvºŸþydÚ"hË ­‚¶× bò3ˆÉÏ &?ƒ˜ü bò3ßÏ`|?ƒñý Æ÷Óo÷Ç_¯i‹ -ƒ¶ Ú^·;TA[m´UÐvºµ#ÓA[m´îÁϯL[m´UÐvº_þùkÚ"hË ­‚ö¢{kn« -‚¶ Ú*h{Ýç*h‹ -ƒ¶ ÚFwb{—‰£§fÿòr5MÛMõØA[m´uЕA?âñï2h« öcedÐ ú‘2*h‡ýØ¿« ô£‚~Ô£|Øu¹úÑA?:èGýè@÷RëÓÒåÔtn~h‹ -ƒ¶ Ú:èǹÖ÷#ÿ.ƒ¶ Úa?ξô#eTÐûq.ôý¨ ô£åÃ~œË}?:èGýè ½èÎQ~®ÿ.]NMçæ‡¶Ú2h« ­ƒ~œk}?âñï2h« öãÜéû‘A?òQFí°çBß úQA?êQÞEçßú²tù׽èÛ"hË ­‚¶úq.ñýˆÇ¿Ë ­‚vØsƒïGýÈG´Ã~Ü¥û~TÐ úQò.ª.õuérj:÷<´EЖA[môã\âû—A[í°çß ú‘2*h‡ý¸K÷ý¨ ô£å]T½5‡¥Ë©éÜóÐA[m´uÐs‰ïG<þ]m´Ã~œ|?2èG>ʨ öã.Ý÷£‚~TÐz”wQu­ïK—W÷R­zl‹ -ƒ¶ Ú:èǹÄ÷#ÿ.ƒ¶ Úa?Î ¾ô#eTÐûq—îûQA?*èG=Ê»¨º6­ëÒ½s©Û"hË ­‚¶úñ.qýˆÇ¿Ë ­‚vØwƒëGýÈG´Ã~ü¥»~TÐ úQòKT5­»MsqÏc[m´UÐÖA?‹K‚~ÄãßeÐVA;ìgqCÐ ú‘2*h‡ý,—ô£‚~TÐz”_¢ª94ÝÒåÁ½«Û"hË ­‚¶úq.ñýˆÇ¿Ë ­‚vØsƒïGýÈG´Ã~Ü¥û~TÐ úQò.ªníÇÒåÔtîyh‹ -ƒ¶ Ú:èǹÄ÷#ÿ.ƒ¶ Úa?Î ¾ô#eTÐûq—îûQA?*èG=Ê/QÕíh»4ÍÅ=m´eÐVA[ý,. ú—A[í°ŸÅ A?2èG>ʨ ö³\zÐ úQA?êQ~‰ª¶ooK—½{US=¶EЖA[môã\âû—A[í°çß ú‘2*h‡ý¸K÷ý¨ ô£å]®ºûðÜtm´eÐVA[ý¸íÜ€—A[í°ws݃ðÜ€2*h‡ý¸êÜ€÷à¼7àƒ¼‹ª[×,ÞŸš.’Ú"hË ­‚¶úqÑãû—A[í°1¾ô#eTÐûqQâûQA?*èG=Ê/QÕÕÎU¦¹¸ç±-‚¶ Ú*hë ŸÅ%A?âñï2h« ö³¸!èGýÈG´Ã~–KúQA?*èG=ÊÛ¨ºÕui ×’®¥\K»Võî4\Kº–r-m[õçb£þ®%]K¹–v­Êé ×’®¥\k±ÑÝA¸–t-åZÚµ*§+\Kº–r­ÅÆí¯óÕ_ç«¿ÎW¯þ:_ýu¾úë|õ×ùê¯óÕßÅÆ¿óbãßY¸–t-åZÚµ*§+\Kº–r­ÅFûg±Ñþ®%]K¹–v­Êé ×’®¥\Ëù·óo7æßn̿ݘ»1ÿvcþíÆüÛù·óog£v6jg£v6jg£v6jg£v6jg£v6jg£q6g£q6g£q6g£q6g£q6gÃyíÆ¼vc^»1¯Ý˜×nÌk7æµóÚyíÆ¼>9'gãälœœ“³qr6NÎÆÉÙ89'gãÍÙxs6Þœ7gãÍÙxs6Þœ7gãÍÙxs6ÞwgãÝÙxw6ÞwgãÝÙxw6Þwgãâl\œ‹³qq6.ÎÆÅÙ¸8gãâl\œ›³qs6nÎÆÍÙ¸97gãælÜœ›³qs6>œgãÃÙøp6>œgãÃÙøp6>œgãîlÜ»³qw6îÎÆÝÙ¸;wgãîlÜ/gãËÙør6¾œ/gãËÙør6¾œ/gãk±Ñ¸œØ¸œØ¸œØ¸œØ¸œØ¸œØ¸œØ¸œØ¸œØøœøÏ]Ç?wÿÜuüs×ñÏ]Ç?wÿÜuüs×ñÏ]Ç?÷ŒrùêæòÕÍå«›ËW7—¯n._Ý\¾º¹|usùêæòUãònãònãònãònãònãònãònãònãònãòn㮣q×ѸëhÜu4î:w»ŽÆ]G㮣q×ѺyIëæ%­›—´n^ÒºyIëæ%­›—´n^ÒºyIëæ%M뮣u×ѺëhÝu´î:Zw­»ŽÖ]G뮣u6\.i\.i\.i\.i\.i\.i\.i\.i\.i\.i:g£s6:g£s6:g£s6:g£s6:g£s6\.i\.i\.i\.i\.i\.i\.i\.i\.i\.iܼ¤qó’ÆÍK7/iܼ¤qó’ÆÍK7/iܼ¤qó’Ö=[÷lÝs°uÏÁÖ=[÷lÝs°uÏÁÖ=[÷ì\Nì\Nì\Nì\Nì\Nì\Nì\Nì\Nì\Nì\NlÝ}Þºû¼u÷yëîóÖÝç­»Ï[wŸ·î>oÝ}Þºû¼œÁÙœÁÙœÁÙœÁÙœÁÙp÷`ëîÁÖ݃­»[w¶îlÝ=غ{°u÷`ëîÁöèl£³qt6ŽÎÆÑÙ8:Ggãèl ÇqZÇqZÇqZÇqZÇqZÇqZÇqZÇqZÇqZÇqÚÞÙèÞÙèÞÙèÞÙèÞÙèWgãÕÙxu6^WgãÕÙxu6^WgãÕÙpóÝÖÍw[7ßmÝ|·uóÝÖÍw[7ßmÝ|·uóÝÖÍw[7ooݼ½uóöÖÍÛ[7ooݼ½uóöÖÍÛ[7oo=WssÑÖÍE[7mÝ\´usÑÖÍE[7mÝ\´usÑÖÍEÛ«³qu6®ÎÆÕÙ¸:Wgãêl\«³qu6Ü3ªuϨÖ=£Z÷ŒjÝ3ªuϨÖ=£Z÷ŒjÝ3ªuϨÎÍá:7‡ëÜ®ss¸ÎÍá:7‡ëÜ®ss¸ÎÍá:7‡ë\Nì\Nì\Nì\Nì\Nì\Nì\Nì\Nì\Nì<çt¹¤v¹¤v¹¤v¹¤v¹¤v¹¤v¹¤v¹¤v¹¤v¹¤vï2j÷.£vï2j÷.£vï2j÷.£vï2j÷.£vï2j÷.£vqU»¸ª]\Õ.®jWµ‹«ÚÅUíâªvqU»¸j\Nl\Nl\Nl\Nl\Nl\Nl\Nl\Nl\Nl|Nt<ªu<ªu<ªu<ªu<ªu<ªu<ªu<ªu<ªu<ªuïáZ÷®uïáZ÷®uïáZ÷®uïáZ÷®uïáZ÷®ssêÎÍ©;7§îÜœºssêÎÍ©;7§îÜœºssêîgN}~yù[¿þßÿkþ?Ngó äż£3o Z?ÿÿU«—ŸWŠÿ¯ZêW«~¥Ô¯)ua­ ʺHZÖº ¬‹¤ui­KʺLZ—Öº¤¬Ë¤ue­+ʺJZWÖº¢¬«¤um­kʺNZ×Öº¦¬kÒzwX‚ʼçýŸ£nV¿Zõÿ=ꌺ°Ö ¢nV·Ö ¢Î¨Kk½ êfuk½ ꌺ²Ö ¢nV·Ö ¢Î¨kk½ êfuk½ ên— 2oþÿ稛կVý:£.¬õ‚¨›Õ­õ‚¨3êÒZ/ˆºYÝZ/ˆ:£®¬õ‚¨›Õ­õ‚¨3êÚZ/ˆºYÝZ/ˆºç%¨Ì· ÿ9êfõ«UÿߣΨ k½ êfuk½ ꌺ´Ö ¢nV·Ö ¢Î¨+k½ êfuk½ ꌺ¶Ö ¢nV·Ö ¢®ý³D…ùžø?‡QV½`ܺ´êgÔ•U/ð¼Q×V½ÔuïÖuÿû ;»ÎªÜq³ë¬zÁ-3»ÎªÄüì:«^2-üvl⻄M|;:ð]B¾Ý|þ»d>ÿí&äß%òo7£þ.uÝÕº®€I};*ô]B…¾—ù.á2ߎŒ|—‘oÇ&¾ nØyãõšpÝ"VŸèñ/©¶«õþeÙ›ä±_¯n=_ ʺHZQë•”«X¬ Úº¸ZRÖeÒºŒZÑÕJ»k—´u;îµ¢¬«¤u·^íW;g]ÑÖmØÔš²ž·þ²]m¶‹uM[·¹®&rÝ"@FÝ{̺ÕfµE¢ÎZ”u‘´.¢Öw{¹ª¶HÔYë’².“Öå{üŽS+¹A¢ÎZW”u•´®ÞãwœXm7HÔYëš²®“Öõ;uÇUû\Ô™Ž~b¾¡rÝ9‘ëœú“uQÉÕϵÚºÍu •ëÎ"i=žë^vb%õb]ÐÖm®k¨\w–IëD®“Õjë¬KÚºÍu •ëÎ*iÊub%Ôb]ÑÖm®k¨\wÖIëT®S«­X¬§¢îý%žÒ\Ô½'£.~Ç)¡±¨³Ö©\wIëñ\§Õ~µQHÔYëT®;ˤõx®UµÚWHÔYëT®;«¤õx®›n¹Ê>e2Qg­S¹î¬“Ö‰\gn9‹:³1ÛOÌŸ¨\÷–ÈuNý)ê„Ø­~bÞÈÐÖm®;Q¹îM$­ÇsÚÊ•vÖmÝæº•ëÞdÒz<×US¦Õ›Åº¤­Û\w¢rÝ›JZ'rÝv½’ûꢭÛ\w¢rÝ›NZ'rØ®*µXOEÝ»ºw*êÞ“QŸYUûíJ!Qg­S¹îM$­ÇsÝ4©\Û;.uÖ:•ëÞdÒz<×U¢Úy멨³Ö©\÷¦’Öã¹Nmö«í‰:kÊuo:i=žëª)ÑV"uf#ÉŸ˜§^ó.QëNýiܧl³ý¹ãŒ mÝæ:ê5ï"@Y'8ì4Ÿ¯ªÅº ­Û\G½æ](ë‡ÕK®32´u›ë¨×¼‹e]Q3ê•‹uE[·¹ŽzÍ»PÖ©yÝôˆs×žŠº÷—øôÍEÝ{2êâsµW+(ê¬u*×½‹¤õx®ÛoªÕn‡DµNåºw™´NpØé·ÓHÔYëT®{WI늚Q¯ö;$ê¬u*×½ë¤uŠÃê%×%¢Îl|ûó*×ݹΩG2íÂ&Œ mÝæº •ën"i=žë6ûýây#C[·¹îB庛LZç:1=ãvÛź¤­Û\w¡rÝM%­Çs]µV«µ^¬+ÚºÍu*×ÝtÒ:‘ëÔz‰:#“ˆºwuïTÔ½'£ŽšÛL“$ê¬u*×ÝDÒz<×M“›­X!Qg­S¹î&“Ö‰yÝn]­uÖ:•ën*i=žë6ÓCFm¨³Ö©\wÓIëñ\'6ÛÕVå¢îmÉqªj­_¹Î©?±‰õzµÿyÂÚºÍuoT®»ˆ¤õx®“ëÝòmÂÈÐÖm®{£rÝE&­¶Ú¯Ö›Åº¤­Û\÷F庋JZWÔ3½ržW´u›ëÞ¨\wÑIëÔ¼®ÚÚ÷6F&uï/qªê¢î=uñ7fRmVuÖ:•ë."i=žëÄz³d›LÔYëT®»È¤õx®ÛNÙf³E¢ÎZ§rÝE%­Çs\oVr‡DµN庋NZ'8ìô„«D.ênŽÃÞJ8ìâ°bÊu–ÇÝh6qsöVÂao‡}ÙnWR,ÖmÝæº[ ‡½‘VLóºj±.ië6×ÝJ8ìä°ÕÄa÷‹uE[·¹îVÂao4‡žïr±žŠº÷—øô à°7ŠÃV›½^UHÔYë%öFqØ–+­¨³ÖK8ìâ°BW«ý‰:k½„ÃÞ(û²ß®*Dµ^Âao$‡•Û•Ò¹¨{_ ")ÍZÿLä:§þô„Ó¼îǺ‘¡­Û\÷NåºO‘´.ÈL»sÖmÝæºw*×}ʤuIfZ¥ë’¶nsÝ;•ë>UÒº¢3íf±®hë6×½S¹îS'­k2Óêj±žŠº÷—xJsQ÷žŒ:bÝÅV¯$uÖ:•ë>EÒº Ö]ȽQg¢ÎZ§rݧLZç:]mVz‡DµNåºO•´N¼¯ÛïWuÖ:•ë>uÒ:‘ë¶›åë@"ê>ܼî£d^÷AÍë”rÙæƒ~Â~¸yÝGɼîƒü6±Ù/ϸú ûáæu%óºr^·Ñ+-ë’¶nsÝGɼîƒþ6¡WÂ]»¢­Û\÷Q2¯û çuûåÍÉý„ýpóº’yÝùmb?…݉:k½d^÷AÍëªyY'uÖzɼשinc¿Çe¢ÎZ/™×}ß&6» æSQg­—Ìë>ÈyÝF÷;u÷\®»'sÝø»Þ.+ m=—ëîÉ\wÔìbùþndhë¹\wOæº;‘ë”^mö‹u:êî¹\wOæº;Åa·«Íów:êî¹\wOæº;•ëÜÖÈ$¢.“ëîÉ\w'rÝZí]®KF]&×Ý“¹î.ˆ7fë•HÔerÝ=™ëîÄwص{_—‰ºL®»'sÝÈuSÔ© u™\wOæº;‘ë¦;NQ÷•Ëu_É\÷EpØÝvYåedhë¹\÷•Ìu_‡ïù/:ê¾r¹î+™ë¾ˆ\g®}É6_tÔ}årÝW2×}¹nš\lܵÓQ÷•Ëu_É\÷¥É•Ìûen󕊺L®ûJæ:ûk6¸2)í+™Òì¯ÙÊd®¯d沿fC%“ ¾’ ÊþšˆLúJæ!ûkràïKš‰Ì ¬‘Dºqꉩ•‘¡­Ûts§Ò͇HZÏN­Œ mݦ›;•n>dÒzvjedhë6ÝÜ©tó¡’Ö³S+#C[·éæN¥›´žZ™DÔ½¿ÄgP.êÞ“Q—›Ze¢ÎZ§òЇHZÏN­2Qg­S êC&­g§V™¨³Ö©Ìõ¡’Ö³S«LÔYëTJûÐIëÙ©U*êš?™\×üIåºå×çðrYöadhë™\×üIëÔç½,¬42´õL®kþȤuêóÀ~ùndhë™\×üQIëÔ²¹¶‹ m=“ëš?:i\öQ­Üµ§¢.ëš?©\·üút¿ë²ŸB3Q—ÎuÍ‘´N}ØÖSQ—ÎuÍ™´N|®x ué\×üQIëŠzʬ„F¢.ëš?:iú<°[ #Q÷i¶Î~yIì·D­;õçBèíÆ~”22´õÌp‹e=žëöÕfùmdhë™=àÊz<×I-WB,Ö%m=³Ü"@Y'–óÊéÚw‹uE[Ïì·PÖ©\§ÅÊy>ué 2êâÙFï6ëué 2êâË>ªJ­vHÔ¥7.\Ȩ#¶Ð[ïùTÔ¥7.\Ȩ‹—m¬w«½@¢.½qá"@FñŒ[/‹Q÷µìÎy3f­'rSšÏï¶Ë²#C[·¹î‹Êuß"iZÎëŠÄŒ mÝæº/*×}ˤuj9ïvY\hdhë6×}Q¹î[%­+’AÛðF†¶nsÝ•ë¾uÒº&´ª멨{‰¿sQ÷žŒ:ûz&\Ö•Ò¾EÒˆðFR1dP™ë[&Ho$*Ö• ¾UÒˆòFRaPyè['ho„ø·eg£Ô¦P©œzä–[3F†¶nÓÍ?jO©ÔÎFNýé+ôô|ßËź ­ÛtóÚ’*µ³‘SºöéÒ7b±.ië6Ýü£v´JíläÔŸ¿BoWÒ]»¢­ÛtóÚ+µ³‘S­ûØo멨{‰Ï \Ô½'£Ž¢ªZ!Qg­S›À¥v6rêÏßFÖB®¨³Ö©=äR;9õç;Î,øA¢ÎZ§¶ KíläÔŸWZí—W䙨³Ö©ìR;9õç;N.$6uߎF~—ÐÈoŠFVbWÙ7ßô„þÛÑÈïùMÑHSmWÜ|ÓúoG#¿Khä7E#_ªý²ëÃ7=¡ÿv4ò»„F~S4òewå¬+Úzfó¿$ü&i¤Ø-ußô„þÛÑÈïùMÒÈõnºç¨Kox™¤‘ßTf›—-uéý2“4ò›¢‘Õ¦þŽKE]z»Í$ü¦häFT«­D¢.½[g’F~S4râÐ{ïy"êš?Ë®¼ µ;o›ø<àÕc±?{ÈÍ2´ua­ ʺHZ'>Ls›Ÿý´fÚº´Ö%e]&­óº‰Äúk—´ue­+ʺJZ§V^,¯‰gÚº¶Ö5e]'­S4R¯¤ó|*êÞ_â_\Ô½'£ŽØ_GÊŸµ¹¨³Öe]$­Ÿ¶»·žŠ:k]RÖeÒz<×mv»Õ¶B¢ÎZW”u•´N|p«ÈsQg­kʺNZ'æuk±’Û\ÔÕKŽkê‚O¡^ýÉóRÛôY†¶ns]]ð)Ô«?ïp£í^b³ mÝæººàS¨W®S¶Zh–¡­Û\W| õêϹncë´fÚºÍuuÁ§P¯þœë–½Ff™DÔ½Û¨ûß?…zõçôBüÔ*å¢ÎZ/øêÕŸgV›ÍÏÌ*uÖzÁ§P¯þtÇ©eïÀ\ÔYëŸB½úó·ì·‘‹:k½àS¨W¾ãtpÇÑQ×är]“ÌuÔû:5™_r]CG]“ËuM2×ïëôvYQ;ËÐÖs¹®Iæ:â}˜n8±Üï uM.×5É\G½¯Û- ìfÚz.×5É\G½¯›&Vë%æ›TÔer]“Ìu Åa«íÏûº\Ôer]“ÌuÄû:¹•ùTÔer]“ÌuÔû:½,¸ÉE]&×5É\G¼¯Ó}ÿÙÍ+u™\×$sñ¾NˆeOèdÔµŸ™\×~¦r]ûIíöQí–g\ûYÑÖ3¹®ýIëñ\·Ý.û&Î2´õL®k?eÒ:±ìc½vs›öSÒÖ3¹®ýTIëIJ³}Þn±®hë™\×~ê¤ur·åÇ=ué\×~¦r]KTÀWr+×+$êÒ¹®ýIë‚Zd&W[$êÒ¹®ý”Ië’Zd¶^æ´é¨KçºöS%­Çs¡ï»-ué\×~ê¤ubÙÇZ.6uÍ’ãêÔ…HüïY=1¯32´u›ë¨S"Ið¿gõļÎÈÐÖm®£N]ˆ$ÁÿžÕó:#C[·¹Ž:u!’ÿ{VOÌëŒ mÝæ:êÔ…HüïY=1¯32‰¨{‰Oß\Ô½'£.7¯ËDµNÍëj‘´ž×e¢ÎZ§æuµLZÏÎë2Qg­SóºZ%­gçu™¨³Ö©y]­“Ö³óºdÔµ¹\×&s]Käºýzã<ßÒQ׿r]›Ìu-1¯“Úžk4ËÐÖs¹®M準Èu;¹¼132´õ\®k“¹®¥vçݯ„ó<um.×µÉ\×R»óŠU%멨Ëäº6™ëZjwÞýf·B¢.“ëÚd®k‰ï°û½ý˜‹ºL®k“¹®%rÝ^lW$ê2¹®M準˜×)Üq©¨Ëäº6™ëZ"×M³Jº[ÓÙ\GíX¹D­;uú„™Y†¶nsµcå"@YÏ03ËÐÖm®£v¬\(ë¹ffÚºÍuÔŽ•‹e=wÂÌ,C[·¹ŽÚ±r ¬çN˜™eQ÷n£îŠº÷dÔeN˜ÉEµNåºN$­çN˜ÉEµNåºN&­çN˜ÉEµNåºN%­çN˜ÉEµNåºN'­çN˜IEݽ±ëê²$5QºàÕŸ¿ ­mñÀ,C[·¹Ž,IM”.xõØW!ûÆÌÈÐÖm®#KR¥ ^=öUH8ë’¶nsY’š(]ðê±ï°v>odhë6ב%©‰Ò¯ûûS81Ë$¢îÝFÝ;uïɨ‹ßqb»YAQg­S¹.QÓàÕŸ¿Ãª·žŠ:kÊu‰b¯[ùð³Â-uÖ:•ëU^ýù§ì¾È¹¨³Ö©\—(ðꑽÕJg£®}Ëäºö-•ëZêäÀý²éÃ,C[ÏäºöM$­VWË;+#C[ÏäºöM&­SvÙ‰|–¡­gr]û¦’Ö©o•‹ùöMÑÖ3¹®}ÓI뇕«õn±žŠºt®kßR¹®}£¾M¬×?k‰sQ—Îuí›HZ'¾M¬+½Üqé¨KçºöM&­SVJÇ¥¢.ëÚ7•´NqX½0©LÔ¥s]û¦“Ö)»µ%©©¨û^r\CÕM4‰+½zb^gdhë6×QuMbÇJ¯ž˜×ÚºÍuTÝD“رҫ'æuF†¶nsU7Ñ$v¬ôê‰y‘¡­Û\GÕM4‰+½zb^gdQ÷þŸ¾¹¨{OF]n^—‰:kš×%v¬ôê‰y]&ê¬uj^—رҫ'æu™¨³Ö©y]bÇJ¯ž˜×e¢ÎZ§æu‰+½zb^—Šºî+“뺯T®ëˆ+«ÍR/3ËÐÖ3¹®ûIëÄÉjÙfe–¡­gr]÷%“Ö‰y^NÏ›ehë™\×}©¤u"×í7Ë3ÎÈÐÖ3¹®ûÒIëÔwØ­Ýèd–ID]:×u_©\·üú<§Uêçì¾\Ô¥s]÷%’Ö‰oªªVPÔ¥s]÷%“Ö‰yÝÖ5‚D]:×u_*i¨ÓzYKœ‰ºt®ë¾tÒ:1¯Ób©\ £®ý³ÔÁ¶ ¶ñꑳ>Vëù7ËÐÖ…µ^°ÕˆWœõa¯}–¡­Kk½`«¯þ|>íòîÚ%m]Yë[xõH5îjç¬+Úº¶Ö ¶ñêÏOØ­Ý´q–IDÝ»ºÿ}«¯þ|ê‚´_ÄrQg­ìAâÕ#§.ˆŸl“‹:k½`s¯þ\3²±Ù&uÖzÁ®%^=vê‚Ü!Qg­lgâÕ£§.ˆ\ÔÕKŽkë‚zX¯þó¦&u¶^“•‰æ'›ëê‚zX¯«Û«Åº ­Û\WÔÃzõXEêÏÛÂY†¶ns]]PëÕ#VÚ¥fÚºÍuuA=¬W¶þbÏheQ÷n£î¯‡õê‘è×6×e¢ÎZ/¨‡õêO_·•ýž‹:k½ Ö«?Í.ä²ÃL.ê¬õ‚zX¯YícW}ä¢ÎZ/¨‡õêÏo‰÷ÁýNGÝËuC2× ‡Õûmb–¡­çrÝÌuÁa×Ú2©Y†¶žËuC2× ‡5èË7ÐQ7ärÝÌuµ–xïc~ £nÈåº!™ëŠÃ*[µ1Ë$¢.“ë†d®¨µÄ›í~…D]&× É\7PûœT[÷”IF]&× É\7Pk‰wv½M.ê2¹nHæºà°•X­+$ê2¹nHæºAS[…1OE]»ä¸¶¥r]¢n«?{~ºá®ÝÈÐÖm®k©\—¨›ðêO_Äö•=~–¡­Û\×R¹.Q7áÕŸg[» û,C[·¹®¥r]¢n«ÇηٹkW´u›ëZ*×%ê&¼z¬nâgýü,“ˆºwuïTÔ½'£ŽÈuJèuÖ:•ëu^ý)×­«½Í6™¨³Ö©\—¨›ðêÏwÜ4¹Ù Qg­S¹.Q7áÕŸï¸åȇ\ÔYëT®KÔMxõç\·^Iºc.ד¹îHÔÃjsîµ~¤£î˜ËuÇd®;Û ï—3ØgÚz.ד¹îHqXS8±X§£î˜ËuÇd®;kNÔvyWidhë¹\wLæº#‘ëôÆõ1Ë$¢.“ëŽÉ\w$rÝV+—ë’Q—ÉuÇd®;Û o7jE]&ד¹îHÔÃnÖÛÕ‰ºL®;&sÝ‘à°ëµ]o“‹ºL®;&sÝ‘¨‡žï‹ºÃ’ãÚ•ë5b^ý)Û˜*­Ÿy‘¡­Û\w r]¢FÌ«?]»YÀ.ë‚¶nsÝÊu‰1¯yc&-“22´u›ëT®KÔˆyõçl#—/#F†¶nsÝÊu‰1¯þ¼ö`mÏ-œeQ÷n£îŠº÷dÔï¨Í¹HÔYëT®KÔˆyõÈNb¶ú>uÖ:•ë5b^ýéŽSÊîÅ‹:kÊu‰1¯þ|Ç){Zf.ê¬u*×%jļúóó}½Ì*“QwÌåºc2×ó:¹«ì1'³ m=—ëŽÉ\GÌë*S²²DÝ‘Žºc.ד¹Žš×éÍÆ¾«<ÐO؃›×Jæuj^gJ…”»v:ꎹ\wLæ:j^·S+¡멨Ëäºc2×ó:¡Í3‰ºL®;&s1¯Û›zXD]&ד¹Ž˜×ɶ+ÜrQ—ÉuÇd®£æujÙ§4u™\wLæ:b^§·ËŽ©¨ëÝwؾä;lO}‡­ängy\OëÝwؾä;lO}‡ÕSÄÿÔ¿Ï2´u›ëú’ï°=õV¬7v‡™Y†¶ns]_ò¶'¿Ãn÷+í¬+ÚºÍu}ÉwØžükÎLtžOEÝ»º‚ï°=õv/–Ý2sQg­—|‡í©ï°ÓœÒ®)ÍEµ^ò¶§¾ÃVr»õw\*ê¬õ’ï°=õVK÷†<uÖzÉwØžúkMüYO›ŠºaÉq‘Ï­ÖzŸÈuNýéûû®²;BÏ2´u›ë*×õ"ià°Ò}ƒ62´u›ë*×õ2i¨ý÷ãndhë6× T®ëUÒ:Åa×Ë×#C[·¹n r]¯“Ö5¹ºOí멨{‰nuQ÷žŒ:bg¡ÝÚf›LÔYëT®ëEÒº V¼,ßa3Qg­S¹®—Ië’Xñ¢ì® ¹¨³Ö©\׫¤u‚ÃÊíj-¨³Ö©\×ë¤uM®xÙË\Ô½º5'¯%kN^©5'ûMeÏ\˜ehë6×½–¬9y¥ÖœÈít¿ïë‚¶nsÝkÉš“WjÍI¥–½¼fÚºÍu¯%kN^É5'•Y»kW´u›ë^KÖœ¼’kNÌnj±žŠºwukN^©5'Ué•B¢ÎZ/YsòJ­9f{…Dµ^²æä•Zsò²×ÒÎi3Qg­—¬9y¥ÖœÈû:‰:k½dÍÉ+µæ¤RÕ2¯KDÝÑ}›8–|›8Rß&‚ï°Gú-ñÑ}›8–|›8Rß&‚ï°Gú-ñÑ}›8–|›8’ß&üwØ#ý–øè¾MK¾M©oÁwØ#ý–øè¾MK¾MÉoþ;ì‘~K|tß&Ž%ß&ŽÔ·‰à;l&ê¬õ’oGêÛDð6uÖzÉ·‰#õm"ø›‰:k½äÛÄ‘ú6|‡ÍDµ^òmâH}›¾Ã&£îËu‡d®;d¿MÚz.×’¹îý6adhë¹\wHæºCöÛ„‘¡­çrÝ!™ëÙoF†¶žËu‡d®;d¿M™DÔerÝ!™ëÙo™¨ËäºC2ײß&2Q—Éu‡d®;d¿Md¢.“ëÉ\wÈ~›ÈD]&×’¹îý6‘ŒºS.×’¹îD…½×.Ûœè¨;årÝ)™ëNÄ^ƒ^/ÙæDGÝ)—ëNÉ\w¢ÎÂÞ®¶›Å:u§\®;%s݉: {·Ò˸Ÿè¨;årÝ)™ëN‡Ý¬Ôr¿ŸRQ—Éu§d®;Q{uÊåÛD&ê2¹î”Ìu'ê,ìJnWHÔerÝ)™ëNÔ^ë½cɨËäºS2ר½:7+±G¢.“ëNÉ\w¢ÎÂ^v MEÝiyOIiÖúk"×9õÈNàKU¦‘¡­Û\w¢rÝ«HZ'r9ña¿X´u›ëNT®{•IëD®Û»Ý,C[·¹îDåºW•´Nå:±Ún늶ns݉Êu¯:iª‡ÊÎmŒL"êÞ_â)ÍEÝ{2ê⻨ÉõÆÞ³Ö©\÷*’Ö‰÷u»Êî(•‹:kÊu¯2ix_W­§©uÖ:•ë^UÒº¢Î·;‰å¢ÎZ§rÝ«NZ×Ô9àË;«DÔݼî\2¯;“ó:¿æäL?aÏn^w.™×©y]°æäL?aÏn^w.™×©y]°æäL?aÏn^w.™×Éy_sr¦Ÿ°g7¯;—ÌëÎä¼Î¯99ÓOس›×Kæugj^¬9ÉDµ^2¯;Sóº`ÍI&ê¬õ’yÝ™œ×ù5'™¨³ÖKæugj^¬9ÉDµ^2¯;Sóº`ÍI"ê.KŽk/T®;'rSŠºõÖîÕ9ËÐÖm®»P¹î,’Ö‰ï°fßg]ÐÖm®»P¹î,“Ö©5'jYñbdhë6×]¨\wVIëÔwX±|ý72´u›ë.T®;ë¤uºnÂÆ¼‘IDÝ»ºw*êÞ“Qÿ:°Öv·Ì\ÔYëT®;‹¤u‚à )íÌ*uÖ:•ëÎ2i¨›XOODµN庳JZ'¾ÃªíJH$ê¬u*×uÒ:1¯óU؉¨{[r\d«uký’ÈuNýù}¨ìSÆÈÐÖm®{£rÝE$­VŠ•tÖmÝæº7*×]dÒ:Åa7ËžNF†¶nsÝ•ë.*iâ°‰Ü.ÖmÝæº7*×]tÒ:•ëÔòæÄÈ$¢îÝFÝ;uïɨ#vßÙÓisQg­S¹î"’Ö)kŽ«D¢ÎZ§rÝE&­óºÊ} ÌDµN庋JZ'8¬Ø-+Ü2Qg­S¹î¢“Ö)«&•ˆº««›¸–ÔM\©º‰ÝfgwAŸehë6×]Kê&®TÝ„4; më‚¶nsݵ¤nâJÕM˜•k¹X—´u›ë®%uW²nÂôá<¯hë6×]Kê&®dÝDµ_vÓºÒ+د®nâZR7q¥ê&¶R-+2Qg­—ÔM\©º sXæÏ®È¹¨³ÖKê&®dÝÄz_Ù9m&ê¬õ’º‰+U7¡¦ù¼ÝU)uÖzIÝĕܿμ"—ù¨»årÝ-™ën@®»ÑQwËåº[2×Ý€\w££î–Ëu·d®»¹îFGÝ-—ënÉ\wrÝŽº[.×Ý’¹îäº[*ê2¹î–Ìu7â}š&µ[$ê2¹î–Ìu7AÕ¿ïíªLÔerÝ-™ën’ª߸\—ŒºL®»%sÝx_§ÄJUHÔerÝ-™ënÔûº½=õ u]n^×%çu1¯Û›]Ô¬ç;ú Ûåæu]r^×QóºÝzáïF†¶žÉu]r^×Qó:µYíÔb]ÒÖ3¹®KÎë:j^§']-Öm=“ëºä¼®ûC×Mìäb=ué\×%çu1¯ÛèýR;‰ºt®ë’óºŽ˜× sÃWHÔ¥s]—œ×uļn?ÅüzD]:×uÉy]GÌë̇Ç¥¢.ëºä¼®ûCÕMèå‹X"ênKŽk©³°#Ið¿gõļÎÈÐÖm®£ÎÂŽ$ÁÿžÕó:#C[·¹Ž: ;’ÿ{VOÌëŒ mÝæ:ê,ìHüïY=1¯32´u›ë¨³°#Ið¿gõļÎÈ$¢îý%>}sQ÷žŒºÜ¼.uÖ:5¯»Š¤õì¼.uÖ:5¯»Ê¤õì¼.uÖ:5¯»ª¤õì¼.uÖ:5¯»ê¤õì¼.uŸÍ²/ñ'ufbj_b§þl½ÚÙ'¬‘¡­Û\÷I™˜Ú—Ø©?½·ÙîVÂY´u›ë>©3Sû;õ§˜_¯—©õuÕZ/oN>é•NŸn}ÝgÉúºOj}šB~³Œû™Žºs.ד¹ŽX_WéÍršÕ'½ÒéÓ­¯û,Y_÷I®¯{Ù¬í±Oz¥Ó§[_÷Y²¾î“Z_WíôF¬¨Ëäºs2×ëë¶Æõ ‰ºL®;'s±¾NlõÞÇ|*ê2¹îœÌugªö#íy‘™¨Ëäºs2×ëëTµœÈœˆºîÏò­ûSð¾Î«Óß&fÚº°Ö Þ×yuúÛÄ,C[—ÖzÁû:¯N›˜ehëÊZ/x_çÕéo³ m][ëïë¼:ýmb–IDÝûKüDþ}W§¿Mä¢ÎZ/x_çÕéo¹¨³Ö Þ×yuúÛD.ê¬õ‚÷u^þ6‘‹:k½à}W§¿M$£®;dr]wH庎à°SÌ»¨ëm=“뺃HZÄnž+4ËÐÖ3¹®;ȤujO§e7­Y†¶žÉuÝA%­Sga »ÓÈ,C[Ïäºî “ÖÉ÷u¶.r–ID]:×u‡T®ë(kŽƒ¢.뺃HZ'Þ×™ƒ¼ué\×dÒ:1¯«ªÕ¾B¢.뺃JZç:³ïÂj‹D]:×u´N¬¯3·œÎE]½ä¸®.XsâÕ¹®&¿þ›Ÿl®« ÖœxõD®«É¯ÿæ'›ëê‚5'^=‘ëjòë¿ùÉæºº`͉WO亚üúo~²¹®.XsâÕ¹®&¿þÏ!ñn£î_sâÕŸ9ìzggV™¨³Ö ÖœxõçwV[{žT.ê¬õ‚5'^ýùÕÎîù‹:k½`͉Wæ°ÒV¨å¢ÎZ/XsâÕco‰÷:u‡[csu¶Î"µîÔ#ï.ì{ÚY†¶nsu¶Î"@YÄÛB½ûy{0ËÐÖm®£ÎÖY(ë‡5ï.6‹uI[·¹Ž:[g ¬Çsywñ³ŸÕ,C[·¹Ž:[g ¬SkNô’mŒL"êÞ_âÓ7uïɨ#¾˜—VHÔY낲.’Ö‘iÕô€G¢ÎZ—”u™´Nìs²]ïýµ§¢ÎZW”u•´NÌëÄÖîg•‹:k]SÖuÒ:Áa×S¶¹¨ûj¾m®û¢Öœ|'rS®PÛÙ=fÚºÍu_Ôš“o‘´N|‡U»efedhë6×}QkN¾eÒ:ñV/oJgÚºÍu_Ôš“o•´NÌëö»¿Í,C[·¹î‹Zsò­“Ö©ï°[»¾n–IDÝ»ºw*êÞ“QGÔ„*õóm"uÖ:µæä[$­ßaUµ0©LÔYëÔš“o™´N|‡Ý®×«uÖ:µæä[%­ßa§dó³ö uÖ:µæä['­ßaµ°{q'¢îÖÜþþ$«ÈôÍfÚ¿t®óê‘û}ÿãùY†¶.¬uj^÷W$­{°›ÝïÅb]ÐÖ¥µNÍëþʤub}Ù%u³X—´ue­Sóº¿*iÚƒ]Ú¯³ m][ëÔ¼î¯NZ×äiJ/ÖSQ÷þŸ¾¹¨{OFQ¾Õ³z6ê¬uj^÷W$­VMsZ‰DµNÍëþʤub^'Ô~½B¢ÎZ§æuUÒz<×íõ²³P.ê¬uj^÷W'­ëë¶Ëì"uÿΙ\÷ïœÊuÿÎôûºõü¿sE[Ïäºg‘´Ïu;!WºZ¬ Úz&×ý;ˤuò}Ýv¥ë’¶žÉuÿÎ*iÈubYÁ>ËÐÖ3¹îßY'­¹Nmí™J³L"êÒ¹îß9•ëþéoXÔ¥sÝ¿³HZ'¿MØ5'¹¨Kçºg™´N~›°kNrQ—ÎuÿÎ*i];BoWk(êÒ¹îßY'­¹®R.Ó’QW×õñ¿9&®¦Y Øü3Ö/懗œúÓ3NVS¾ñRÕŸŸ‘PëÄÛ^½úÑ«_Ÿˆ¨?¿_1¬ÔqÂöƒ‘ÚŒ¾Nxõ2ŒN=‰ÑtÐY?¾S~|Oú±ãù±‹gW5=Õƒ+é^âPœß“~ìx~Ìcœ:6"µ(𣈎µ^«ÕFù+±©ã êDI‘W/ÃèÔ“MÏ6"¢ãù1:ÖRšMÕ‚+±ñHaLÉxõr?æ1NH’ŠG™ŒGéÇZøQÆs) üh1RVÔ‰"3¯^†Ñ©'1šžmÖ ï<:ÄÀèÔ³ ï^ytè•çÇèX‹Í4Ô¡_ytè•çGãiÙâajÆ·x˜~ èS*aÞ磻rÛ'œ’„ä´lŸð c舧"ê‘C$÷«å=ÅÉmCq*!v'¿ E ƹ EˆÑtÙ>á”$$§eû„R?FËß¶»p‹ˆNnŠS ±;ùm(Jý˜Ç8uÛ>á”$$'áÇZø1¾}‚¬¦¡ÖþJ,ÆS ±;ùm(J0ž¨m(~a4=g¶O8% ÉIt!Gšlù[j"­rêYÒÔòHã‰Ú†â‰4<Ò4òü8B¤i䑦‘çÇ!G‡lù[jЬsêY:tàÑ!Ƶ ÅzåÑ¡Wž_!:ôÊ£C¯áL’¿*ʵ*ð#±}Â4)qß¹¦+±ÿRÏ*ŒN=‰Ñôlã‘"$U2UÇóct¬7;µÚíƒ+±ñHa<«dá‘45<ÒÄÀèÔ³¤ià‘¦çÇ"M4 ˜?ZŒÅthäùÁx]ª•¦f¼Ziú¢CNýiR°7Ó}/•«º& Éu©ú…1tÄÓõç²Vsº¦•ººŠªk ±»úŠªŒW²¢*Äh:ÈT]“„äºT•ú‘8·h³ß„WҽġÄîê+ªJý˜Ç8u«º& ÉUø±~$Î-ÚˆÕnç¯Äb¼–»«¯¨*Áx¥*ª~a4=g*®IBrÏñs‹ôzï*ü®®¢êZB쮾¢ªÔyŒS¹J k’\¥kYàG¢Èì.³õWb1^KˆÝÕWT•`¼’U!FÓs¦èš$$WÙñüHœ[4’Mp%6KˆÝÕWT•ú1qê W tM’«òc­ üHT™Ï\ÁóÚb¼–»«¯¨*Áx%+ªBŒ¦çL%Ð5IH®ªãù1:Ö/›í:œ÷XŒ×bwõU¥~Ìcœ:ÈU]“„äªýXë?R•@ÛÕ~ï¯Äb¼–»«¯¨*Áx¥+ªŒ¦çL%Ð5IH®ºãù1^ ¤w+Ä£Åx-!vW_QUêǼ’‘G‡Fž³ëk}_ª•¦f¼Ziú¢CNý9 oTPöÏ[tOnŸp_*~a ñôCDýyû„]åvù¹»óŸî%ÛPÜýùO%ïäùO!FÓAæÜ¢{rû„ûR TêÇèJÎÖÒ=pïîü§{É6wþS©ó§rçÝ“Û'Ü…kQàÇx%Ú+ßÝÿt/Ù†âîÏ*Áx§Îú…Ñôœ9·èžÜ>á.:žã•@b¿uïÃïîü§{É6wþS©ó§rçÝ“Û'Ü¥kYàÇx%ÐKµ_»6wwþÓ½dŠ»?ÿ©ã:ÿéFÓsæÜ¢{rû„»ìx~ŒW‰mõË6K¶¡¸ûóŸJý˜Ç8u;·èžÜ>á®üX«?•@[¹R-Æ{É6wþS Æ;yþSˆÑôœ9·èžÜ>á®:žãçºM·Œž3ã½dŠ»?ÿ©ÔyŒS¹s‹îÉíîÚµ.ð#Q $v+)ü•XŒ÷’m(îþü§Œwòü§£é9snÑ=¹}Â]w¼%ÛPÜýùO¥~Ìc4¬G8Ò$JH“ˆ¿‘ÖûpR;·(GšìJÎÔDZäÔŸì}åÅÝÿTLšïäùO!FÓsÏ#M=ÏÑ•œûéŸÛSéîÎ*&M=ÏyŒ¦ƒšGšüX‹?Æ+žHSÍ#M Œwêü§'ÒÔóHSÏóc‘¦žGšzžóÍô·æ‘&?Ö²ÀñJ 'ÒTóHã:ÿé‰4õ<ÒÔóüØC¤©ç‘¦žçÇ¥žMp%#_‰GŠ4Ýd2½z £éÀVÝ*ʵ*ð#Q ´Ù¹2ks%ÊÆ#Ešn* Œ^=…qîÙÆ£¢âQ%ãQuÁ©—û1¾²Xh± ¯ÄÆ#…±Éxä`têIŒS¶¨§Ijû§>c”~”deÚ:È#¹ E/“ñÈÁèÔ“MÏ6)B’Ú>Á©—û1:Ö{“ÃwÁ•Øx¤0ö2ŒN=‰qêÀVõ!ImŸàÔgŒªÀЬL“[%#¹ E¯’ñÈÁèÔ“MÏ6)B’Ú>Á©—û1^™¶Õ« ®ÄÆ#…±WÉxä`têIŒS¶¨§Ijû§>cÔ~ÔteZå¯Äb$·¡èu29z£éÙÆ#EHRÛ'8õr?Æ+Ó¦{fÌ{,FrŠ^'㑃ѩ'1Ö#i%¤)^­4Í®ÂI­*&Mv%gj"-rêYÒTóH£SÏ’¦žGšzžã•z£WA¶‹ISÏóc£é æ‘&?Ö¢ÀñJ 'ÒTóH£SÏ’¦žGšzž{ˆ4õ<ÒÔóü˜Çh¦¿54ù±–~”5Dšjib`têYÒÔóHSÏóc‘¦žGšzžóÍô·æ‘&?ÖªÀª†HSÍ#M ŒN=Kšziêy~ì!ÒÔóHSÏóc£™þÖ<ÒäÇZøQ×iªy¤‰Ñ©gISÏ#M=Ï=Dšziêy~Ìc4¬G:Ò$KHS¼Zi½Þ¬ÂÉ~Ã#Mv%gj"-sêYÒÔðH£SÏ’¦Gšžˆ4 <Ò4ðü˜ÇhGšüX‹?Æ+žHSÃ#M ŒN=Kšix~â«Í*˜¤ZŒÅ¤iàù1ÑtÐðH“kYàGâÜ¢GÒÔðH£SÏ’¦Gšžˆ4 <Ò4ðü˜Çh¦¿ 4ù±V~T Dšib`têYÒ4ðHÓÀó㑦GšžóÍô·á‘&?ÖºÀºHSÃ#M ŒN=Kšix~ Ò4ðHÓÀóc£a=Ê‘&U@šl%P1²+9SSd•SÏÒ¡–G‡z–<:4òü8BthäÑ¡‘çÇc”~$Î-ªöëà`ß»­V"¤½'¤½30zõƹg%Ò:õr?ÆWº‹mõË6©iïÉiï Œ^=…Ñt l<–HëÔgŒªÀD%ÐV®TàG[­DH{OH{g`ôê)ŒsÏ6K¤uêå~ìâ9|½ÁsÆV+‘ÒÞ“ÒÞ½z £é@Ûx,9Ö©Ïu‰J ±[IêÝV+‘ÒÞ“ÒÞ½z ãܳǒiz¹ã•»/Õn^‰Gê@Ú{ò@Ú;£WOaœYp¤I”¦hµ’XWëÐÈO-N9iúYÉ™œH‹œúóÉå{>ÌlµR1i*ÇèÕSçž{iêy~Œ¯äb­Ã+éy¤©çù1‹qî æ‘&?Ö¢ÀñJ 'ÒTóHS9F¯ž%M=4õ5‘–9õ,ijx¤©£WÏ’¦Gšžˆ4 <Ò4ðü˜Å8ß5 4ù±~$Î-z$M 4•côêYÒ4ðHÓÀóc|e±Ôk^ÉÀ#MÏYŒs 4ù±–~$Î-z$M 4•côêYÒ4ðHÓÀó㑦Gšž³çéoÃ#M~¬U‰J GÒÔðHS9F¯ž%M4 c~$Î-Û•¬ü•dª•"à9‚ƒÑ©'1ÖK½Ð$ý¿“&¯^îÇøJ÷Þûwö¶tµRüoGtc”~$*6jµÕþJ2ÕJð¿ÁÁèÔ“ë¥^h’þßI“W/÷c<÷l÷›UèÇtµRüoGtcT~$*6Ò†m®$S­ÿËŒN=‰±^ê…&éÿ4yõr?FÇz³« ®$]­ÿÛÏyŒõR/ÔդɫÏu©s‹ÔJíý•dª•"à9‚ƒÑ©'1ÖK½Ð$ý¿“&¯^îÇxåîf¼ ™°¥«•"à;¢ãù1±vÕJ¿'ÿiiª6Át»æ‘¦Ÿ•œÉ‰´È©gISÍ#M ŒN=Kšziêy~Œ¯äTJÿ"M=4õN f©ù ©+J]#ꟿ1 99XÎ?ˆÈÏê’RWº¦ÔGT¯vÏãþ)"R?° uE©k@ýùþI•OoÊÍw«Õ³úã »^ÔUä‡guM©?¸n¿^íöÏê""{H¨+J]#ê_Oóºêü×Ó¼ND®ýëi^'­º‘Ý—ŽHýÀz B*´ƈÔ,H]QêP¿¿0þWM·õ¾š‘žÕ%¥® uM©‡#ú_µ›îä]|8¼ÿ ¥ŒÔ¬ð©u\]ý’Ú §®ý°1õu]×á7¾jùš<ÿ ˆªKJ]Aê:ªÞÔç*¯>I J]BêŠR×yõSýVýž;ZõéñøCT]Rê R×Qõsý¸n’Š»núABêŠR\w©oq×M?®›¤$¥® õ¸ëÞêK•WŸ¤¥.!uE©ë¼úí×ðê·_#šP—”º‚Ôã®{¯?¨›¤âQ7ý !uE©Q÷¹3–¤.)u©kBý^!êwA©KH]Qê뾪ßoDõ¢þ%ˆªKJ]Aê:ª~¯?×MRq×M?HH]Qê€ëîÍŸxÔM?H]Rê RGÝgýpÝ$%(u ©+JpÝWýÏuÓ@®›¤$¥® õx®ûwk×MRq×M?HH]Qê€ë¾#ûü uI©+H=uÍŸöOÞuFJPêRW”zÞuMýë†õÙÆüÏuFJRê RׄzS!ê Ô%¤®(u ¨·Ÿ„ëÚO©KJ]Aêq×5M ¸n’”º„Ô¥®õ¶"Ô[©KJ]Aêq×Ýš.?%6RÑ)±ùABêŠRÏO‰›{L˜¤.)u©ë¸zû¸n’”º„Ô¥¸î»¹Ç]7ý uI©+H=îºïî ¸a'©ø ;ý !uE©çoØö191?ä]g¤$¥® õ¨ëÚú×–R¯=a«KH]QêQ¢¹ÎüÏuFJRê R溶mÇ„‘”º„Ô¥®õcE¨¤.)u©Ç]wh[Àu“” Ô%¤®(u¨®;@®;P®;@®;P®ë¡¶§nغa{ê†í¡vhûx®›~º¤Ô¤Ïu¯¿ó¡þú;©üR—º¢Ô×Ûø¼ÎüDݱÏëÌ Rׄú¡BÔ‚R—º¢Ô5¢~¢\w‚\w¢\w‚\wŠ»îÔ¾Q7IÅ£núABêŠR¢îüÛu^ýüÛu´º¤Ô¤¿a/ípÝ$%(u ©+JpÝ[{‰»núA@ê’RWzÜuWè1q¥Wè1q¥Wè1qmoñvú¸a')I©+H=~Ã^;Èuåºr]G¹®C\wk¯q×M?®›¤$¥® õ¸ë>‘7'FJPêRW”:ð˜øŒ<Ê–¤.)u©®ûëHõ³ Ô%¤®(õ¼ëº?¿£Î­ù!ŸëŒ”¤Ô¤®ãêÝ!ÿ–ØHEß›$¤®(õü[⮎$•åÀuu$©,?(H=îºòmÂHÅ]w@¾M)E©®ûúý¾Î­ù!Ã)I©+H=zÃÞšÛß¼ëŒTÔuæ ©+J]êÿÎU\ýßY@ê’RWzì³Î¥®ëãoÙ—çR£ÊHÅÆ}þ!{ËÌR±[fþAAê±[FDa=ª‹GŒ x…UW”õìô@>a|ѳºŒÂŠªÇnù‹VÝ2* ëQ]=a´àUVT]QÖ³Ï8M¹NGaEÕ%¥® uQ¿ÔÇúÜ2“Tü–™~n™I*~ËL?(H=~ËÄ`=ÇüFËÄ`EÕe¸e1º[&+ª¿e`Ñêñ[&ë9æ1º[&+ª®(ëÀ-C¸NGaEÕ%¥® õø-s®ÿ·Ì$¿e¦²ã>KIJ]Aê:ó°b×.¢—dþŽ‹a\~Ðù a\~ÈŽ»¤\'!×IÊu rŠb\~º¢ÔuNýRÿ­/O±9ÄßßkJ‰°ùû{M©º¿¿×”ÒêŠR×ù°yÄh¯]DaEÕe4êb°¢ê:61XÏaóˆÑ-â:I¹NB®S”ëTVT]Rê R§ÊK}Rå$O•Ó@ªœ¤$¥® õxª|„O•1ŒË@ªŒa\~Re ãò* ×IÈu’r‚\§¢—$¤®(u U¾5‡xªœ~Ⱦ§¥DtN;ý !uE©gg•⣛¬¨ºŒÎic°¢ê± ¹ŒÂz›Œ>ê×IÊur¢\§¢°¢ê’RWzì–™B¶¾©òZGJÍ?DìZß%¥® õ8{€EäºÆå€ˆÅ0.?D,†qù b„ë$ä:I¹NA®SQŒËRW”zö)3ÅfÓÆSåõ÷jQ*l~/ ¢î÷jQZ]Qê@ª¼ÆW´Š(¬¨zЧÊ(Æå‡|ªŒb\~ȧÊ(Æå‡|ª¤\'!×IÊu rŠb\~º¢Ôó©²94]4Ušò©ÒHES¥ùABêŠRϧÊGŒ.UFaEÕ£©2 +ªM•QXÏaó€Ñ-â:I¹NB®S”ëTVT]Rê R§Ê[û¤ÊI*ž*§€T9IIJ]AêñTù‹H•1ŒË@ªŒa\~Re ãò* ×IÈu’r‚\§¢—$¤®(õ|ªl‡vŒ¦JóCþ]¥‘о«4?HH]Qêùw•O—w•QXQõè»Ê(¬¨zô]eÖSØUF1.?äS%å: ¹NR®SëTãòƒ„Ô¥Ì*ï‘Çøüì¼GžÜÏOØ{ü9ÿ !uE©³Ê{ü)¢°¢êñYåxDŠ(ÆùÙy‘ò£¾#®“”ë$ä:E¹NEaEÕ%¥® õ謲½‘Gü„ÉêÖ5ÑÏ:æ‡üg#%)u©G?ë<ÁŠ~Ö‰b\~ÈÖ‰b\~ÈÖ‰b\~ÈÖ¡\'!×IÊu rŠb\~º¢ÔóŸu¢ÇO™ÿ<# ›§Ã]–¨{:eƒTW”z~Vù|Ô‘UFaEÕ£³Ê(¬¨ztV…õ6ÏçâØ …\')×IÈuŠrŠÂŠªKJ]Aê‘Ø¬ÿ~œ[sNÀG¸*£þüµU =;-*uE¤Ô—€ú’P_êKA})¨/ õ¥³}uÄ÷³Ô—€úP_êKB})¨/õ¥¡¾ò¾¿ýE|?KA} ¨/õ%¡¾$Ô—‚úRP_ê+ïûgÄ÷³Ô—€úP_êKB})¨/õ¥¡¾ò¾oÿüÞƒÕü‹K HJBR ’ÒT>rfô”„¤$<¾¶å^£‘”„¤$¥!)`ð =Ý¿¡çö7ôDþFâ~ÞÔ7ˆ¯Š””„¤$¥!©0rè!) I)HJç¥ÌÎÅWDJ@R’R”†¤*è$%!)I¾7;2_#/wž¤$%!)IiHêWƤÑCR’R”ÎK™m§óñe¶†¤$$¥ ) IqoÐCR’R÷f;í||™½µ!) I)HJCR@Üô”„¤$ĽÙ3üŠH HJBR ’ÒT]£€¤$$¥ )À÷·ß9‡–”„¤$¥!© ºFIIHJAR€ï͆ïù¼j6|‡¤$$¥ ) IùÞ ‡¤$$¥ ) ß@ÏÚèYû=k? gíô¬ý€žµгözÖ~@ÏÚèYûñûðJZ òýòýòýòýòýòýòýòýòýÃ)Iö‹Ä“”€¤$$¥ ) IoD zHJBR ’Þˆ˜£òñeŽZ€¤$$¥ ) IqoÐCR’R÷÷ß§¾ÒR’’”‚¤4$UA×( ) I)H ð½9'ãŠH HJBR ’ÒT]£€¤$$¥ )À÷æüü<ÚIIHJAR’ò½AIIHJAR@¾7‡œäãËrIIHJAR’âÞ ‡¤$$¥ ) î¿¡œó åœo(ç|C9çÊ9ßPÎù†rÎ7”s¾¡œóäœù„š+"% ) I)HJCRt’’”‚¤ß×§ÛÇæÑó1<”„¤$¥!©ßùžDIIHJAR‘j ß7ïÈ÷ äûò}ù¾|ß@¾o ß7ˆïÏœ¦¤$%!)IiHª‚®Q@R’Rà{s6Ô‘”„¤$¥!© ºFIIHJARï[È÷-äûò} ù¾…|ßB¾o!ß·ï[È÷-à{s°W–ÃÌ{AR’R”†¤òßNfô”„¤$•ÿv2XvE¤$%!)IiHª‚®Q@R’Râûö ñ}û& ) I)HJCRt’’”‚¤ß›Ó殈”€¤$$¥ ) IUÐ5 HJBR ’B|ßßNæ#õ ) I)HJCRÀ³Ö ‡¤$$¥ ©ü³v>*0_󹔄¤$¥!©|ÜÏè!) I)H*÷óyˆWDJ@R’R”†¤*è$%!)IA¾ò9g>ô’’”‚¤4$•Ï93zHJBR ’rŽ9ÌòŠH HJBR ’ÒT]£€¤$$¥ )È÷GÈ÷GÈ÷GÈ÷GÈ÷GÈ÷GÈ÷GÈ÷GÈ÷GÈ÷GÀ÷æ$Ò+"% ) I)HJCRt’’”‚¤ ß!ß!ß!ß!ß!ß!ß!ß!ß!ß#qßCóœšçôÐ<§‡æ9=4Ïé¡yNÍszhžÓCóœšç˜ãq¯ˆ”€¤$$¥ ) IUÐ5 HJBR ’|ÿú0Ç$¥$%!)IiHª‚®Q@R’Ràû#ô¬=BÏÚ#ô¬=BÏÚ#ô¬=BÏÚ#ô¬=BÏÚ#ô¬=BÏZs€3rÈ÷È÷È÷È÷È÷È÷È÷È÷È÷'È÷'È÷'È÷'È÷'È÷'È÷'È÷'È÷'È÷'À÷æôí|^5§oCR’R”†¤€|oÐCR’RïÏqOJ HJBR ’ÒT]£€¤$$¥ )À÷æèô+"% ) I)HJCRt’’”‚¤ß›#ᯈ”€¤$$¥ ) IUÐ5 HJBR ’|…xíâµWˆ×^!^{…xíâµWˆ×^!^{…xíâµ×öÌs&)IIHJAR’æ9=$%!)IóœkÅ}Å}Å}Å}Å}Å}Å}Å}Å}‡Äý­½q?I HJBR ’Ò÷=$%!)Iqÿ‰¬Ç4R’’”‚¤4$UA×( ) I)H ñ=ôNáz§ð ½Sø„Þ)|Bï>¡w ŸÐ;…OèÂ'ôNáz§ðù0¿'¥ ߟ!ߟ!ߟ!ߟ!ߟ!ߟ!ߟ!ߟó¾ïþ<äûèSÁH HJBR ’ÒTþY;£‡¤$$¥ ) Hu‡|½•‘”„¤$¥!©|½ÕŒ’’”‚¤òõV]Ì1”€¤$$¥ ) Iq_#sÌ=$¥ ) îH}­‘”„¤$¥!) îH}팒R÷_ëïãO…¯‡õ÷¤”„¤$¥!©ü³vFIIHJARùgí­¹ýÍǽ‘”„¤$¥!©|ÜÏè!) I)HJRÿΈïÿ$%!)IiHª‚®Q@R’R”Fv=þ÷ûœ„Ÿ³[ž¤ª?¹{¨>Ö5 eúê ¾:¤/ñ'÷L3}R¦¯ê«Cú’. á’. áR.áR.áÒ. áÒ. áúO@wG Et Ý=ÔWÝ.á.á’5Ñ5twôP_=Ñ.áR.áÒ. áÒ. áúOBwÇï#˜tÜ" eú ¾¤/Ñ@Ý@wÇõ5@w„KB¸$„KB¸„KA¸„KA¸4„KC¸4„KC¸þSÐÝÑBÝBwÇõ5Bw„K@¸„K@¸d Et Ý#Ô×E4„KA¸„KA¸4„KC¸4„KC¸þÓÐÝq€"úݯP_¯PDC¸„K@¸„KB¸$„KB¸$„KA¸„KA¸„KC¸4„KC¸ ©ÀÊ')€oŸ@î~øö äî'€oŸ@î~øö äî' ႸûIB¸ î~R.ˆ»Ÿ„ âî' ႸûIC¸ î~X¹‰èŠèº;z¨¯º; \w? ÄÝOß>ÜýðíÈÝO Âq÷“‚pAÜý¤!\w?iÄÝO+7çÛ'»Ÿ¾}¹û àÛ'»Ÿ¾}¹ûIB¸ î~’.ˆ»Ÿ„ âî'ႸûIC¸ î~Ò.ˆ»ŸVn"º…"º…îŽêk„îÄÝOÂq÷À·O w?|ûr÷“‚pAÜý¤ \w?iÄÝOÂq÷ÀÊMD ˆ>@wÇ+ÔÄš„ âî'ႸûIB¸ î~’.ˆ»Ÿ„ âî'ႸûIC¸ î~Ò.@ê\ÿXù$ðí¿õ2}uP_Ò—€p —€p —„pI—„pI—‚p)—‚p)—†pi—†piÀÊMD×Ù;ÍDtÜ¿ù6ÙWôðmÑ5twôP_=Ñ. á’. áR.áR.áÒ. áÒ. áX¹‰èŠèº;¨¯º; \Â% \ÂðmÑ tw P_Ñ.áR.áÒ. áÒ. áX¹‰èŠèº;F¨¯Šh—€p —€pI—„pI—„p)—‚p)—‚pi—†pi$uxÇ$0Š ÈN.£¸€ìä" \;¹ÄN.±“‹„pAìä¢ \;¹(ÄN.±“‹†pAìäðÑyFqÙÉ`\FqÙÉ`\$„ b' á‚ØÉEA¸ vrQ.ˆ\4„ b' á‚ØÉà&¢(¢èî ¾èî€pAìä" \;¹Œâ²“ À(. ;¹(ÄN. ±“‹†pAìä¢!\;¹¼ÃDt Et Ý#Ô4/.ˆ\„ b' á‚ØÉEB¸ vrQ.ˆ\„ b' á‚ØÉEC¸ ©+À;&)€Q\AvrÅd'Wá‚ØÉU@¸ vr•.ˆ\%„ b'Wá‚ØÉUA¸ vrÕ.ˆ\5„ b'W€w˜ˆÎ3Š+ÈN®£¸‚ìä 0Š+ÈN®£¸‚ìä*!\;¹JÄN® ±“«‚pAìäª!\;¹jÄN®ï0Ý@Ý@wÇõ5@w„ b'Wá‚ØÉ`W\FqÙÉUA¸ vrU.ˆ\5„ b'W á‚ØÉà&¢[(¢[è y¡€pAìä* \;¹JÄN®Â±“«‚pAìäª \;¹jÄN®ÂH½5€wLRU¶î¤9Ôoy©¹¯ê«Cú.á.á’. á’. áR.áR.áÒ. áÒ. áx‡‰èìŒoŽèü¼ÐôÕC}õH_¢†"º†îŽ꫇"Â%!\Â%!\ Â¥ \ Â¥ \Â¥!\Â¥!\ï0Ý@Ý@wÇõ5@w„K@¸„K@¸~1 :¢èî ¾(¢!\ Â¥ \ Â¥!\Â¥!\ÂðÑ-Ñ-twŒP_#Ñ.á.á’. á’. áR.áR.áÒ. áÒ. úéZßÞ1IŒâþðU$.eúê ¾:¤/á.á. á’. á’.áR.áR. áÒ. áÒ.€w˜ˆÎ3ŠûãWê~Åýñ«ÕÀ(î_E軣‡úꡈ†pI—„pI—‚p)—‚p)—†pi—†piÀ;LD7PD7ÐÝ1@} ÐÝá.á.€QܾŠÐwÇõ5@ áR.áR. áÒ. áÒ.€w˜ˆn¡ˆn¡»c„ú‚æ…Â% \Â% \Â%!\Â%!\ Â¥ \ Â¥ \Â¥!\Â…ðަExGÓß;ZŒwL}uP_Ò—€p —€p —„pI—„pI—‚p)—‚p)—†pi—†piÂ;¦ˆÎïh1Þ1õÕC}õH_À÷ŽãS_=ÔWE4„KB¸$„KB¸„KA¸„KA¸4„KC¸4„KC¸Þ1EtEtÝÔ×Ý.á.á¾w´ï˜ú ¾(¢!\ Â¥ \ Â¥!\Â¥!\Â…ðŽ)¢[(¢[è y¡€p —€p —„pI—„pI—‚p)—‚p)—†pi—†p!RÈ:+#…¬³ÂØ ¶Î c'Ø:+Œ`ë¬0v‚­³ÂØ ¶Î c'Ø:+Œ`ë¬0v‚­³ÂØ ¶Î c'È:«9¢uV;ÁÖYaì[g…±lÆN°uV;ÁÖYaì[g…±lÆN°uV;ÁÖYaìYg5GtEtÝÔ×Ý.á.áBÖYaì[g…±lÆN°uV;ÁÖYaì[g…±dÕÑ-Ñ-twŒP_мP@¸„K@¸„KB¸$„KB¸$„KA¸„KA¸„KC¸4„KC¸ ©à“À(:t£è@vÒ ÄN:á‚ØI'!\;é$„ b'‚pAì¤S.ˆt±“NC¸ vÒ¼ÃDtžQt ;éFÑì¤E²“`ÈN: á‚ØI'!\;é„ b'‚pAì¤Ó.ˆt±“à&¢(¢èî ¾èî€pAì¤.ˆt£è@vÒŒ¢ÙI§ \;é„ b'†pAì¤Ó.ˆtï0ÝBÝBwÇõÍ „ b'€pA줓.ˆt±“NA¸ vÒ)ÄN: á‚ØI§!\€Ô­ýxÇ$•gíGsx‡é«ƒú꾄K@¸„K@¸$„KB¸$„KB¸„KA¸„KA¸4„KC¸4„KC¸Þa":Ë(戮‘û1Ï(æ¾z¤¯<£˜#º†îŽ꫇"Â%!\Â%!\ Â¥ \ Â¥ \Â¥!\Â¥!\ï0Ý@Ý@wÇõ5@w„K@¸„K@¸òŒbŽèº;¨¯Šh—‚p)—‚pi—†pi—†p¼ÃDt Et Ý#Ô4/.á.á’. á’. áR.áR.áÒ. áÒ.@jhÇ<ï0RùrÛ±)ÓWõÕ!} —€p —€pI—„pI—„p)—‚p)—‚pi—†pi—†påyÇÑÙrçˆÎK™¾z¨¯é+¿CîÑ5twôP_=Ñ. á’. áR.áR.áÒ. áÒ. áÊóŽ9¢(¢èî ¾èî€p —€p W~‡Ü9¢èî ¾(¢!\ Â¥ \ Â¥!\Â¥!\•çsD·PD·ÐÝ1B}PDC¸„K@¸„KB¸$„KB¸$„KA¸„KA¸„KC¸4„KC¸©¾½¼c’¾wÜÚ2}uP_Ò—€p —€p —„pI—„pI—‚p)—‚p)—†pi—†piÀ;LDçg|&¢óR¦¯ê«Gú¾w˜ˆ®¡»£‡úꡈ†pI—„pI—‚p)—‚p)—†pi—†piÀ;LD7PD7ÐÝ1@} ÐÝá.á.à{‡‰èº;¨¯Šh—‚p)—‚pi—†pi—†p¼ÃDt Et Ý#Ô×E4„K@¸„K@¸$„KB¸$„KB¸„KA¸„KA¸4„KC¸4„ Xgu‡ÖYÝÁuVÀn»s_ÔW‡ô­³vÛû‚p ´Î Ømwî Â%!\Ð:+`·Ý¹/—‚pA묀Ývç¾ \¬³ºƒë¬€Ývç¾z¨¯é Zgì¶;÷ÕC}õPDC¸$„ Zgì¶;G4„KA¸ uVÀn»sDC¸4„ Zgì¶;ߺ;(¢èî ¾èî€p ´Î ØmwŽèŠèº;¨¯Šh—‚pA묀Ýv爆pi´Î Ømw¾;tw´PD·ÐÝ1B}AóBh°ÛîÜ„K@¸ uVÀn»s_. á‚ÖY»íÎ}A¸„ Zgì¶;÷áBØI×ß;&©ü ª®yø*BZ̯ šû꾄K@¸„K@¸$„KB¸$„KB¸„KA¸„KA¸4„KC¸4„KC¸€ï&¢³+¨æˆÎ¯³2}õP_=ÒW~ÕÑ5twôP_=Ñ. á’. áR.áR.áÒ. áÒ. á¾w˜ˆn ˆn »c€ú »Â% \Â% \ùTsD7ÐÝ1@} PDC¸„KA¸„KC¸4„KC¸4„ øÞa"º…"º…îŽêk„"Â% \Â% \Â%!\Â%!\ Â¥ \ Â¥ \Â¥!\ÂHÕï0Rïèj@ªÆxÇÔW‡ô% \Â% \Â%!\Â%!\Â¥ \ Â¥ \ Â¥!\Â¥!\•çsD¼cŠè¹Þ1õÕ#}!¼cŠèº;z¨¯Šh—„pI—„p)—‚p)—‚pi—†pi—†påyÇÑ Ñ tw P_tw@¸„K@¸„ áSD7ÐÝ1@} PDC¸„KA¸„KC¸4„KC¸4„+Ï;æˆn¡ˆn¡»c„ú‚æ…Â% \Â% \Â%!\Â%!\ Â¥ \ Â¥ \Â¥!\“:œÛ?ïþïÿýÇ&£wYDyLP-1.10.4/Data/Netlib/perold.mps.gz0000644000175200017520000010614710430174061015573 0ustar coincoin‹nK®9perold.mps¥½Ë’与®;o³~ž=p7I‘Ò0¯±²++2wTDg÷‘­+ àÿ!w([ƒX)Á^@ð&|ÏŸþþvªÿýþöòëç×éÿï÷Ÿ¿^»ÿóßÿõòëÏ?ÿý_§é¥¯_~ý¼vûß/¿êß/¿~׿Ÿ>ýSÿþöóÛþ÷ßo/Ïâï/âoùÎ÷ú÷ïŸoõïןMöŸßõ—¿ÿ^ççéôöòïëþïýúú²ÿýù×jÛ¯^>׿_Ûߟ½T›ÿz²Oÿ|ooïLº~ýï¦kúûé›Þ__×úy?¿‹¾÷yï{OÓß»móß»móß»mËßÏíïݶåïͶE¶ÙöùÇßMï·‹÷?ï}ã§(ãï_[˜þýÏË_µ]¾}ùTçË·oŸêßÏíïo¯_¿5¿›ê! ƒðÁ |0 ƒðÁ |0 ƒðÁ |0 ƒðÁ |0 ƒðÁ |0 ƒðÁ |0 ÂÃÚF¿E,þ„?áAøcþ„?áAøcþ„?áAøcþ„?áAøcþ„?áAøcþ„?áAøcþ„?áAøcþ„?áAøcþ„?áAøcþ„?áAøcþ„?áAøcþ¸É¾ýýëóþ÷ëì›AøéþïÏâßÅß‹Ïá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…ÏFá³Qøl>…Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>›„Ï&á³Iøl>Û Ÿí…ÏöÂg{á³½ðÙ^øl/|¶>Û Ÿí…ÏöÂg{á³½ðÙ^øl/|¶>Û Ÿí…ÏöÂg{á³½ðÙ^øl/|¶>Û Ÿí…ÏöÂg{á³½ðÙ^øl/|¶>Û Ÿí…ÏöÂg{á³½ðÙ^øl/|¶>Û Ÿí…ÏöÂg{á³½ðÙ^øl/|¶>Û Ÿí…ÏöÂg{á³½ðÙ^øl/|¶>Û Ÿí…ÏöÂg{á³½ðÙ^øl/|¶>Û Ÿí…ÏöÂg{á³½ðÙ^øl/|¶>Û Ÿí…ÏöÂg{á³½ðÙ^øl/|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ,|6 ŸÍÂg³ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg‹ðÙ"|¶Ÿ-Âg᳃ðÙAøì |v>;Ÿ„ÏÂg᳃ðÙAøì |v>;Ÿ„ÏÂg᳃ðÙAøì |v>;Ÿ„ÏÂg᳃ðÙAøì |v>;Ÿ„ÏÂg᳃ðÙAøì |v>;Ÿ„ÏÂg᳃ðÙAøì |v>;Ÿ„ÏÂg᳃ðÙAøì |v>;Ÿ„ÏÂg᳃ðÙAøì |v>;Ÿ„ÏÂg᳃ðÙAøì |v>;Ÿ„ÏÂg᳃ðÓAøæü÷óÔß>ÿÏÿ×To?ϧ«óÑëÏ?o×nþk=7=ÉÿÎÝå´j©§ËhÅ×#ÕM.\/C.ýNûÙé&WXñõ„rÿùp óÝþ ìí¬øzØ) ¿^bß×·~¬ˆ¿kŸ[ËeìR‰K—cãö‹}óˆâª"ÆKšÿ‹§ýDÖ–ÝŠ¯çD¶"n•ýù¥[ŸÙ"ž/×k(¦T§óxéÆF—Í;ÿ×]B?ö§ý˜\ÔÛT/1ZñõpYWðRóë)—m’*nÿE=.!wV\ß]R?¦qãóe¸viÌVü½ÆÇGj~m¸2F+¾ÞOh½£ë3~¸äá*1~¹0ÿõRÿjoõ‹Ë,GÚJ¸¿$+þŠoÚ—“NGûrûàý[Å•_.¢±Ûig»s×q°âÕ¿f«¯S³MÿÅýAh­¶>°â‡~¹\ª8‘<+¥ëÑø¥âºÄe'èÆËuxÆ`G›­Ý®+þWý˶ÏrÊì´Ïr diŸå~„êÚ¡NûÅ Ù8ó+þWý úæ|–}K»©àMûöÖÏÆùµ.3Oó+þ×ÏÆ?6þñl\µoo-·f—û$¬ŸÛ ž‚Ké­øgßl¬¯ÈV|½-à”d¹ÍCm<_ú4žö‹1Zü’­8Ú¸‰ÿU_!6Ögë-ÇÆå–ÑÚÖÌnã©ÚXÅÿªÙz\îMÜÒm-+b¹ýt<¦é¶ÖãEç#ßi¿_ÕÌúnúŸ_o}4½ê­_·mÔ­¨müuÛÆ_ÆÆi28+¾ÞF6Ê·žnÛ¸\Èrl|ºmãÓõÙzKƱq¹ÅöX[÷—qÈVü ­Ÿ~ú~½?[oï8½v¹]·Ø¨«ëpìB¶âŸQ|{öW¨ÿ©6þǵq¹õ÷þy@ÿ«þ%]càyC: äËmÄ÷ÛXÅÿª­6Æå¿ý°q}`Åmüõ}›†¯wHé÷UϺáZg U|½Ö*…˰ ¯ë½;YpW\¶õy¯o…GmŒY* Ž]Ì—žÙè‹«’Ìâõ­ø¨}’J¢gcΗÂlôÅ•³øþÖn˜²÷Çõò§^¤lÅ×k¡jr$ÞÚíDZ)Yo=+éØâÌ.´Þ‡Vo]ã<À­—šõÔ,ö¨}¾š)ߊÓ[»ö ¥ûkî©võVºöyJyw¨¸~«­«¤G»J ²­“×U†À]Î׎„ËõÚ8^¥’Þ³q¼náÞØè‹+gñúV~ÐÆ©¥¤’ìÚØ_Úx>×6Nâõ­ò¨A=ŵ±°¡ë| ®m,uèúýk3Xq2òµ·^k_=_ŠøZ‹øúž"¾¾£ˆ]_×į~Å[O{¼~r»ó“-¤/V|ýE ‡ÒWqÕQ]q5[˜Åë[áQƒ{ª¸´1NQô:ŽCŸ˜¾xا»x}+>jcTJ"Ú˜úáR&%מÙè‹o66ñý­:[xzÏláé®ÙÂSíµÐ#6%OG^ˆŒ=O{È»¿¶“ª®„6ö×téÝ዇}¿m¯oõÚØ+%½S}Ø…µÑWo…(žöw¿Y)ɤãpÆq\”‚¾ø^U¼¾Uµ±(%ūǔx=úâz¶žD=Ú8(%©ÇT.Áõ~_|¯Ç*¾Gõ§Í€'wRðt4)ØÅ󷫤n4ØÍ¹KWwã«8Ùh˜Öë\û¹ívkpR=)q÷?¬8ì5wÂÆ_¿½ÉÕ~sqöÛ¢WÄ9*÷= ÷çËЖCGE"+ây~`ÅY‡võänrÖ’üU£Àúá’ÙóX µýV7œpk^¾µ—’m<×·êFågº·¾½U+æóA/x«8ŸéÏúÖs=ȱG:µ£¯Ÿ?òº{®g”ö¨UŠ;ÿÎÎ µøwW¼6á±Ó.¾|—éˆ×S(8®â˧œŽx=«ÂS«]|ùú“‹¿í§ÌêD5¤p‰×2ÄÎc¶V|ýœ› Õë7¬ÛDÐigšä­@l̹»LÑmèccöVü.ÛïZqi#*‰hc†á’rèzccׇx¹–’c±âwØx¿kÅ›g¢$Ç~9„KÑ6Æë.¹+Ý0Xñ»ll¿kÅ…DI6ÆçòÆ¢©Çk×Mò¡»ŽVüÅïZqY¨$£}Z~ë:FÓÖ!æE|;+~âw­¸°”ü8Š«’õƒx9X´IУ@aŧž6 ^ÃX†-®þ8Š wˆ…¦µí5–Ú>?ŽbÑÞÇp¦%×&þ?·«ŽVî#j‡å_¼¬ÇÈ—»øÍš?Ö¾ ½Oûí†;Ô^…Þ§ýv»j¯BïÒþ­Û[ŽO¡N{ž‰}Í0Ÿ;¦n_ª ñ%ES=yå4„œö´²HÍã&ñ­åøÔÌj×ÉÝû’oJÀ±¾u{}voMH%å:â±ÄÄ[§±çzé§õúx[ûÞ@ŸÝsS¥=_R¸Ö£a!®*8—2àÙh·£Â·n >»§¢Tc,—|rŠ(.ŠhÆŽkÏÑWgÒeÆcAû¼%ÔÕ›7M\·ÏüÖ8Åqswl¹õKIÄ—D){ÅK?„¼uÁç¿eŠÝlˆ‹f˜ï) i05Ô…î’ûF4~I»²kï.×>_ËÜ>k¹Q•Ó~ìóoíöz-6Õï¦NH«n>›²âXuášôºùAI×ÄeÇt‰S× ÉÖé|µ¿Ž=Š‹ ž¯„öñ:Åf[§K .+”KˆÓôc°uç{˜%öÁŠC‡.î[hÿÖz1ב.C§÷Ð3–Ž ®‡Ç¥÷]b<ßsíA\õà|™5uÁTðÒoò4¦WÜ_ºiÖs%ÜO½¾ëGcÇyX¯[Áó¨=õ¬ë¬8Tðµ\÷³Ùkñõ¦Á¤d"JÇ{pÚo;7q¬àëPíÚ“ú ⪂‡)NŒÓ’ *¸›j¾ë#¯*xRKJÀ ¾„iL»¢¸¬àT.ÃÜ<­º¾ž ý[ëÅ\™ÆŽËÒ7?=½HãÃÊ~.ÝÄUÙû0率زÏcZ—bDqÕ¹Âìã}èm`š*Sé@\iÒ¦&‘Î5„®ôÅŠC u¹öÞQ‹ÿ—¬ˆåbëüï6±‹VÜ^C›ÞS¡Ãã4lÇÜ¥Þ´Oãeœ†”¡€¸ê›Ý¥Œ¹”¬Ûgûià›‚7Š«ö¦è×Ã`Û§/¡ÄX2ˆ«‰Ã4ê]ré±}ò¥ÏeŒXvµb:_¦!xXÓš»Il0Îÿí WKü—ºö}Üp¡ Vœ¿Ë1d2›ZFä â¤áBÇ SÀú}›[ˆ ãÇ2yF*!CÃMñ2Oëé‘hnoåiî:$æXý%æ>'—Ž5ì“ò¸ÜBÓ òärmDlâ¦á†1MÈ<.CÏÎkÞZü¿ÔsÔ¼“Ã¥bÅõ´iŸuÒD¦‚¥Cqë½SL^öèÙ¤i_òñÖ &·œ¦-Ã4oÖaCšæ31(»]Ë4;™FqùZ@Ï7§™z¦âfe3–”‡lÛ}š2嘮D»œuÓ”­LÓÝÁ¶ûäÖcR®Vqœ4õSÞ[Ôm÷çÚîÏßëÖcŠV›·ûŽŽÇÓDrqlÞ¸NÆ„[Ï•2­T‡@\ŽIÓljªÝiÚcݺŸÔÒ·ˆÕ´‹²OCé´ì–ïsôx/S -ØWq9WÇK7-¸œí¦yª1 ‰ ®šwš/N}n™'‘uFw ´á¼æ­öÿ¥f=ÇÍ;ùµ7«ùuÜY»Ç4­†@:A¸&¾Œ¼æ/›¸š+LE,“‘=¸užj(Lã>ˆ«%Ïä~)]×ɲtëù¾ì´„Hˆ‹ªg¿ŒóUoÛîÓ@5…ƒÐAÍ«N0-6K× Ë°l÷s7ôSÒU Ï]öuÛ}·ì/9W8n÷®ËgÃùHÛýšZ4hâÐ3œ×‰NW1½¿L‹”2tàïÓâ OcA\µûä½¥ ‡ói––'‡@\9š*øšûhÚ}˜‚}*óÎ6ˆ«˜>™»¼ŽˆÆß¯S”  Ú}Š9˧¦k–Lo–ö©~v'´ßj÷ºü©B8½ž.¾û†.86oˆ=4Üp ýÐ]‰¸œŒ…©ì!\{;ÿºNUbª“û&®îz)Ãu=_Óõ<”Pç M\T]™–~e/™-R@;NÆB\vIÊî˯ç­Z}þµ¡7ÇÑëH:¦ùMgÅ×|¿vsö´'5VÓë.ƒv=Ò®M´Î¿äH;ßsK¥n qµü‰Óºh~Ë6\7yÜIÇâjÕ_æ Ì`FÚóäj—ëØM? âvÃ.Åq?IúR‹o+¢¦˜ÍäóÔ?"ˆã2%äD·õ¦)üÞ;>ýþò…·ÏâráhMúÊž~ýï«»i•Ö †ñ8{,âà½S¬wvtú½s qÕ;Ê¥ŸÆŽåº¼èS$›f@Óúc¿8"ÄÍÖc7ŽåZp¯¦ë¦…Ùþ‘Wk¬i‰6E¢u zG߇Éa§QaqÙ;†y?}DÇ:‡i=½¯Ý¾|Úo#È"ÆÔ_¦•_¹FÜ’¹LÌq„B\\é2h1ý¾É®±# qµßw½ôcwÍfÉ¿Üí ãœyÄíØ1jËpn˜Ô]žçz—çÙ»Ëóìßåù·ê´Ú›ÇÑ+ÐVü§ª¡u’Y·së)œJ‰ãÏ^´M3ð õvaâGWÓ¬ùVy %ò²×"þ ÛÇÚSê÷Öl_a«Ÿ.öã-ítÙ{¨ý:Ÿþt ®´Ï¯M½3ÜÔN_‡Ú»æ?èâkyk˜fý-ítrx¯€‹ÿ¤âû[m&©jèN%t>³mŠä~ ½nìrq5¼Sû·nïÛ°øš÷‘õÍ) #ˆ[§¥ù:ì¢Ãžšö½oϘÔ÷×X¨_N_q«=伮ݵï}ÛŽí㚺ŽzF»Ä­ö>¥»­ýy×®0Ækk~é%Ž 5Ÿc 7µï¿M?ÍÁ{êïC]ú qÕçç­Òr½Þ,{øXŸöùùü¥«Góác}><Úçç,#×}8ÿ>Öçã}~š¾¥›öõùðhŸŸUCI»øqŸ¯ovíÚ êÁáÑ|™/%Ô[u5‡–Φ%¿9Ù´ì5gjÊÿíŠ,éÏ[ÍSô®ŒEo”íÃ?RVÃ…<²4âΑ¥ò¸ûâüäK6¾¸s²"ÅÕ½çôJüå«_u|ŸWUݧ/žøŸÔ!çñ2Äy?vÛ‰gìCÚ·J›¸Ü>8Çù‚Þ¼oo¨Ö ¾ÆÚ}‡å¸ö(HýÑ1.ê·RqŸäýÑÉCÛèCW–<ýËùÊ4W¨xl›•yÈãr8±¢šÙS…vûíÏ&®«n¾YÖ]f]uûWU—&%!/çìGúŽïNÕýv«®Fu½m4OÃu¹jn&o¬8›Ä:=0f… ÏÚÆ&^ôƒ*^çÖøR\f¨Öøõ_ O¬êŒŒSó:#¡è\)÷9ÖdŽAœaÇXO{¸è\Cý²»B·Ú!g7u›ýúLW½.M+ a„†«@\öºØ-_»/½åhfõGOÌhÕ-YŠ^W§cªá¦~qó24ÜþÀН.¦}áü8Æ×Ùôù.õ9±>¿<°âlö—ê´0ÞÒ¾rt 5ñâTÝ×økß-À`üòÀг¹g_'¥Æ¬ýËÛ?u*ª._º|ÍW§ýgS×¾ÎiG{ÉÚ²§aËýe˾>°âlæÛ×)±§½N„uÙ—;׌qì¬8›8÷uFíi¯óhåïS„cÎè2õˆKïò|¶±Š³ yí+¬ÎçûƒÁŽà{Ù©ñ]¹ŒÓd«@\.}Îeù¬-h_ézdkMyn]qâÆÏ—Á®c‚‘¶>qaü|\“˘sr#¨}Å2㟌¯+e|™/^„¶>qYó}¸Œc7ö£³êAûš;ÞëÚû2É*qˆ×a$ƒÊúÀгeU_×[žöºÊ²3ßÒ]óÉÌw}âvæ;NSÏè,×PûšEß±±.åt°/—¡Ä.c°ß€¸ öów]èzgMˆÚ×ìþŽõ§ÉäÚQIš€ך¸tûV]”š0MÉS·$Ž0ç—Û+NV·gwu[©®ia¾9^Ë"e´o¬8YŸÝÅqÕ^—Ħ‚çK ‰•ý´>°âdm}v×ÖMû³3ïHטѾ=°âdi~v—æU{]C»§®_–hÐîË+þ—wÂVöMûËWGûuþÎ’i_Xñ¿¼¶1ÐzÝ'g‰6Uo`Ú·Vœì+œÝ}…]ûBcXž­øozú4J"lkëú¢$vq†’'Ø>XR¤ÜÙƒóþÀНÌnaø’Iõ´¼ùTýw]w¿·ì¿kÙŸ[Ù-cB¤ÆÄ*®jÈ2& R¬¸Ú8‹ªã•bÅkhfA„©ÍCÛQ@¢€Þ±–E’(¤vK¢'~ˆ N¢k|¸müŽÉ(ˆñ–DÚ´H2>>RóŒD`»Hõ!Q|ÀøºYôB¶‰B%G2$Šàì:‰C)O{ÝØxŸ[Wq“<Ç(B³Hád7X€D[«‰âCZ=ï²][#*‚®Q…¨XÅeïDEÐ zíäÜMÈy W÷[–oØuŸˆ •<Ø *‚³q#Îónj75ˆ j£FT(íQœýqhèÙøÇ³«óSê¶‚-¢"Ô+åᾓI¨uÈ+IÝ¢¢Â‡d+Ž6JD…gc}¶¼åÙX7r¾RS¸Qœ!qÆzS;´µETÜìt[#¢‚†™uH„}#‚¨°otÙúÉh%’èÝ6^7/²+nÿËoÙö»â†ómÏÆ§Û6>ØXŸ©í!Æ®x°XvÅ­N»@š]ê.×ëæÍW]]‡ƒ’fW¬6¢¸{ê~BíË[žu'ç}3‡*®·„,»ÜÄŠNÜëNÎûl¬âzKȲ+„À®¸mãLXž-ÉÕùȧ¡»bmk ŸPìŠ( îŠË¶¶ìŠm´ð n£bWH}qUîxÐF Ÿpl”ì ©ÝW6vÅ6Š~}¡ýqÙ×0s•šÎ¶ }ì£ò­Ý~ìN’z`W¬õôÉ®ÐKͮش¿ü£:”bW(¬„aW4íê-É®HJ¹fW4qý–fW<ØU,|Âé*’]!;/®S³+´ÑÂ'%»Bj÷Å•†]ñ˜ŸðlìŠ(NW\Û¨ÙÚháž… ]çqm£fW¬6ZÏRì o[ÅÁåN†]±*AD…|ñO·Ä‰ñŠ]q`#ùæûß5Ã~‡‘O¾õZ‹øêÙøzPÄ×ZÄ×÷ñõá"Χ%×ÁŠ“Á½½õ´Çë'·;?ÙÙ‚Ol3CŸPì ÕQ]q5[0ìŠm´ð °ÙÒF_<îÓ Â®xÐF Ÿ‘]¡f4®øf#eWlÓÏ÷Ìžîš-<Õ^ =B²+¼N/ÄÆž§=äÝ_Û>6"»BÖ¶/÷8®xÐF Ÿàõ¨Øjþ芫· »âA-|ëØR»/¾×#cW,óMKÔi KÀ|ÁÕ,–Àù&€%„[X™4I°„Ûîϵݟÿ¾×­ÇêXU›wŠ,Ü­c*ıyãµ3nMÁàÖ–¨GÀ8X¢j'` œ+XBLÂ,n ` ½ÎÐ`‰Öp^óVûõ·¢ÇÍÛ×léUˆ¸õz2ícËSßÄqlsq¦êÅ-ñH%b6,ËHKˆU(€%À­,Ñ>B°º5€%ª8Kp·V` ·ÝwËôWº‡í>ý{oÅÙp>öÔßSÈ Û=Å>:ù"C`»X¢¹ ‚%H»[°DõK–ÀáÀÛ –€vG°„ðwKðvW` w–ö©~i'¿>n÷k_¬8Ù}Øv^ E§™JâØ¼!dh8–° GÀuzMÀ¤á,X¢Ô, ‡` Q*Kð†S` §á:Âzà,¡: X"n§ñ?qsö´ñÔô-‡¬øg“JBƒ%öªc` l8KÔK ”KÄý¶Kð ; –X—æª"äiŠÙL>_r—@ü3^…=݉Ó$Á´}¦q)]fq‚ŒÐ`‰åÙò–óµËBGð¶¶XB=0` gÔ–` ;jw ®úKì€%ȨmÁbëÀ؇,±i§` ìC–3K؉(Kˆª°®/,ÑÄ,Av-X"¶+œ– ëK –púæ¿UÈŠ7Ç¢W•­øO“͘[ ýëø¼¸þó£í}`ªœÙPæî¼óÁ)âºûp¬Ý2¸vÅ|ð´ÓÕí¡v`>í–ùàj§k¬Cí–ùÀË®˜žv:‡?¼>ÀÅRqÁ|`5t§:mAæƒêu†ù€óÍ{µ¯Ð†ÈÖX*ÿ½ì›À|ˆÌF•ÿÞ©ºÚÑ3Lþ{å—–ù@µ«ü÷®ö½oÛÁYç¿Wža™T»ÊïkÞµë“ ÿ^o†æ¯y™ÿÞÕ¾ÿ6ñ mðÅ7¥¤Ïß#¾÷Uìó2c¾òwË|ˆÐçmÆ|O{øXŸöyÂ|xŸöyÂ|xŸöyÂ|xŸöyÂ|ðû¼d>ø][BÞ߃ã=™$Í–ü6€$ÊV̇–jÊw“b¾},Ï[Í@ô®\Do<'YŠóáý)mÞ>–“æícébÞt*7“‹[v•%…—ÝOŸòö±ü'o:·7ÞOÅú¦³{píâ:ñÿœæ@\çÄpÒUü<—é*Ülž¸“ˆBŠËDPvž#B•]䈰âΙ½W'ÇûP&˜ääX òdÒˆ;'“Êã~üí‹ó.=ÚøâΊWûðVœïÃ+ñ—¯~Õñí\UuŸ¾xâjpP~ó¡o›À|€‹¨È|ØÍḃU|ÎŽ+öá5óÁK½¬cœIû®˜-gcjÛ–šù ¶]ùÐÄû¶õ¨™½ø¢É2H YæC­!Â| 5d™~ É0îÕPÑzÇ2ô޵f>´`oLiУ=\¨¸É%ÚÚ¨ÑÂF@;´TÄþ ;õ¨Š®¢ÑIœ/[´C]E£úv hìC€vØËÎÐ؇ín•}yËëCuª¤ÚÐâ¶+ Úœ‹¶ÏüÀkŸ:Ó‚¬ÐêÊ™A;´)Lú[ÚÁ!I‚·QôÅAMphóBøu`´+‚iKp©MààføSZDMpë^KppSô)‚)‰%8ˆ“M 8´)ª§¤Î?•ËÁ¡¦ð%t9 8ÀXiÅ—·¼óµ5¥'!8-ÁÁc¹èɶçOÜFKp9Sà6"ÁÁ³QÏè=ët]Ù‡vû X@pp{Ú>Û·Ž© Â1ààf¹S:OÓ1O‚Ÿ§)‚ƒ§½.)tü²‡¿ÁÄ/Kpð´W!rFuörµk‚vAûV]ö˜‘Ï¢´oýtv×OŠàÀ'GŠà 'G–àà-¿ÎîòKX‚ƒL:` Þêíì®ÞÁÇEpP{­†àà-þÎîâOx»+‚ƒlwKpðÖŽgwí¨\»"8Hí–àà-=ÏîÒShÍk‚ƒ¨y 8x+׳»rU‡å‚$ÁAúšàÐÄÙºù  4Áaö´?h×âTû³¯} ¤úI¢g+ð@Ò¶¤ý&ršà°‹3‚C:ÁâÜÄ2‹Ðò‰«J‹'Óûeÿý±²ÿ®e0=KppKpXÅU Y‚TŠWëq 8@¥XñÚ éD*BsÄf w¬e‘©ÝÒ‰oÑ‹½ûÞ5>Ü6þ‹NJdÄxKpHm6‡©yFpH°‡ú€>`|ݼy!Û8à R‚CrvÄ‘§½î@¼Ï­«¸É@c©Ù ‡t‚9¤ÉÍ;¤U¡÷ iõ4ÉvmMpHºFÁa—½:Hi‚C:ñS-qÜå5\Ý1Y>×}^T ]CpHÎÖ‹8-»©ÝÔ<¨šà ´‚Cr¶^Ä‘œgãÏF 8¬6Î70©Ø ¶‡Tïe§ûÎý4Á!Õý¯$u[lT{Ø­8Ú( žõÙò–gcÝÕùJMá6j‚Cr¶‡Ä æMíÐÖ–àpc°ÓmfÖ!v—Á!Áî¼føuÛxݼHp¸aü/müâµ+®¶Îæ­§Û6Î7˜=ŸnÛøt`c}¦¶¬uSèþN` ·:l;i‚Cª§Õ^w®{J_uuJšà°Úˆâî™ö µ/oy6Ö§÷ͪ¸ÞÂÚkàµb:œ¸×ý©÷ÙXÅõFלòšJÝ“gË+~hãÌPXž-)ÆùȧÓÁamk‹`P‡^Ü—mm Úh ÜFEp6úâª$†àð ÁàØ( R»/®l4‡mýúBûã²§cV05Ép‚=õÖn?ö'U;Öz†‚$8híšà°iùGu(EpPpCphÚÕ[’à•rMphâú-Mpx°«XƒÓU$ÁAv_\;¦&8–àP— o"Á¡> ‡U\­˜,Á¡;„–à°Ýá–7½Ý†[Û­/Vœu¯Üº[òŽ N®CÇ"h8$8ì ǶáÁ¡:!8 cÁ¡Úpšà =ÎZÃyÍ[‹¯?¨;jÞnšN VÜLû7„ô‡‘ˆ[ïíÒuKLBNñÖ Á¡¶!8À| uÚB0ßD‚C5‹p¾ áÖ@pp&M’àà¶ûsm÷ç¿ïuë¡+ŽÍÛ W:›šó²'S¶0·¦pk$8T#àPµ‚΀à &á@p@·‚ƒ^gh‚Ck8¯y«ýú[Ñãæí¯ÑŠk·^‡Ý5àÙvŸ–b´c'˜j²çn÷+ÂBÜ¢…Á!µa¸Œ‚ƒX…ÁÜ í³!$8 [Á¡Š‚wkEppÛ}·L¥{Øîݵ$+NÚýºî€¿§)ƒ8´{êÆä¬#Š«˜n Íeà@Úݪ_‚ç@pØP‚´;„¿Á·»"8¸³´OõK;ù}ôvï@œì>ôëÇPТ!×ᢉcó®3Ýp„à`ŽêôšHÃY‚C¨ Á ¢T@pà §NÃ-‚õÀ!ÁAt‚CÚNãâæìièywÞ×Mü³I%¡ {Õ1‚6ê ˆÈÊvê<#8ð ;KpX—æª"äiŠÙL>Ï)LF+n7}ç „ÔÓ)LÛ[ ´}¦Éhßεˆ&¾¼å|í²`¼­-ApP ÁÁµ%ÁÁŒÚŠà@ú%8ì€Ȩm bë؇€à°i§ìC@pÍ ;%Qu@pÀõ%š8È® %8¤v…d}i Nßü· YñæXôª²ÿi²™Áa«¡½Ÿ×~´½L•s‚#JpÀ 88EüAw޵[‚×®žvºº=Ô¢Ý\ítu¨ÝxÙÁÁÓNçð‡×¸øO*.¬†îTB§-HpP½Îp¾y¯öÁØKe³—}‰Ù¨²Ù;U·"z†Éf¯üÒ¨v•ÍÞÕ¾÷m;8ëlöÊ3,ÁjWÙì}íÏ»v}R¡³Ùë=nCpà5/³Ù»Ú÷ß&ž! ¾ø¦”ôù{Ä÷¾Š}^æ¿Wþn °á ùï=íác}><Úç Ááý}><Úç Ááý}><Úç Ááý}><Úç ÁÁïó’ààwm‰`xö`$84[òÛ’öZZª)GÜMŠùö±t>o5Ñ»r½9ùx¤8IF¬ïOióö±œ4oKó¦S±¸™\ܲ«,)¼ì~ú”·å?yÓ¹E¸ñ~*Ö7݃k?׉7øç4â:'†“®âç¸LWáf»ðÄDR\&¢€²óªì"G„wÎ쥸:9Þ‡2Ap 'Çj¸'“FÜ9™T÷ão_œpéÑÆwP¤¸Ú‡·â|^‰¿|õ«Žo窪ûôÅÿSƒƒúð¹lÁ.¢"Áa7‹Vñ9;®Ø‡×/õ²Žq&»»"8´œ}Û¶Ô±í ‡&žÛÖ£&8äfH Y‚C­!Bp 5d ~ É0îÕPÑzÇô޵&8´`oLi£=H6Õ®Ù B;°Ú\Џ?(N éÔ¢h6C/NŽ-›¡‰‹N Ù ¹-›{°ö²36ö`3ô·Ê¾¼åõŽ: RílqØ m6EÛg~àµOCAßTlu™Ì°ÚdŒ“;¦â«]Qôe?M]hs9çûÑ?u¢¦+ØÂDÖQ€+¸É÷\–DÃä’ÔÂÜìy ®@Jbá âÐà möèV×w6¢\¡f×%pô€+À0fÅ—·¼1íµà 5Û&+-\Á£©èy°×·Ÿ¸®Pm$p°á žz²íÙXgÒÊF€+´‹9WÀz¸‚ÛÓö‰¸uL WŽ p7‚+Ð)”†+ˆ)ÀøJÁ<íu¶¯…+ÔDà $Y¸‚§½ ‘㣳—F]ð Ú·êŠÄŒ|®„¤…+xK›³»´Qp>»Qp9»±poetvWF ®À*ØÀd> WðVgwa¥à <æ(¸‚Ú5po]vv×e ®ÀÛ]Ád»[¸‚·¬;»Ë:WàÚ\Aj·poUxvW… ®@k^ÃDÍ\Á[TžÝE¥‚+,Ï¡ á zÐ×p…&Ζ´_Í á «ø³§ýù@»§ÚŸ}í Ÿ ¯ßwôôØh¸B¿­6¿I¤›†+ì⠮П`Ýlá bp…EhùúTe¬“™Èý²ÿþXÙײ œ…+È4ê®°Š«²p¨+®–ÊW€J±â‡54ã ú©â_ìÃ\zÇZ WÚ-\¡?ñÝs±­ž]ãÃmã¿è|A®@Œ·p…¾Í¦®ð!ãã#5Ïà =ì“\¡> p…_÷U^ÈKƒ+¨ì=®Ð;4â4ÆÓ^·ÞçÖUÜ$‡1p…¾Ù p…þ[®à iUè}CZ=è±][Ãz]£ ®°ŠËÞp¤4\¡?ñ'qå5\ÝòX¾ÑÖ}^ÀTv[Wè½quS»©y„+P5\Ai7p…ÞÙa§ež<®°Ú8_ޤ`+ØÂúzeº¿ïHNÃúº¿ã•¤nË€ ®`ϲG%\Á³±>[Þòl¬»:_©)ÜF Wèí!q¸xS;´µ…+Üìt[#\†™uH„Ý%Wèaw à ^3üºm¼n^„+Ü0·N´³m§pxƒ6Η‹=ŸnÛøt`c}ƶ‚Ä<Ø ,\áV'€m' WèëA²×ëžÒW]]‡ƒ’†+¬6¢¸{Ü|BíË[žuçé}3‡*®·°,\A¸ ÀB¿À|ÀÆ*n6º¦I@ÉËéâò Ëm§ù?´qÆ,Ï–ìß|äÓ™:®°¶µ¥#(¸B–wÅe[[¸Âƒ6Z:·QÁ¤¾¸*‰+B¸º5Àª8+p·Vp·ÝwËôWºÇnÝÕipbÃùÀ‡óiHíÄùÇÔ{k`Ô®bº…+4—A¸iw W¨~Ià 8œ\a{@á ÐîWþpÞî ®àÎÒ>Õ/íä÷ÑÇþÞÖÿUˆì>Äœi‹†”Pœ ç-¡¨¨€+؆#p…:½&pÒp®PjW€†C¸‚(ÀxÃ)¸‚Óp !`½pWP®Ðo§ñ?qsö´1ô¼»ìTŒ&þÙ¤’Ðp…½ê\à uDà deá ;žÁø†…+¬KsUò4Ål&O+£aŸ„7q»é{žÖx…nëõ1ìcÒBG í3-ÖC› á ˳å-çk—…àmm ¸‚z`à Ψ-á fÔVpÒ‡,\aï ®@Fm W[WÀ>p…M;…+`¸‚ˆ—W°QWUp\_\¡‰#\ì Z¸Bß®p\¬/-\Áé›ÿV!+Þ‹^U¶â?M6€+l5ô¯wâóâú϶÷©rNpdCá ¸óp§ˆ?èîñv WàÚ\ÁÓNW·‡Ú®@´[¸‚«®±µ[¸/»‚+xÚéþðúÿIÅ\ÕÐJè´á ª×¸Î7ïÕ¾Òz¶ÆR‰æe߸BÏlT‰æª[é=z†I4¯üÒ¨v•hÞÕ¾÷m;8ëDóÊ3,\jW‰æ}íÏÛIí Í+³p^ó2Ѽ«}ÿm₎à‹oJIŸ¿G|ï«Øçejzåï®ÐCŸ·©é=íác}><Úç \áý}><Úç \áý}><Úç \áý}><Úç \Áïó®àwmIGxö`„+4[òÛ’‘ZÁZª)GÜMŠùö±t>o5Ñ»r½9ùx¤8É&¬à ïOióö±œ4oKó¦S±¸™\ܲ«,)¼ì~ú”·å?yÓ¹E¸ñ~*Ö7݃k?׉7øç4â:'†“®âç¸LWáf»ðÄDR\&¢€²;9"dÙeŽ#îœÙKqur¼e®@NŽÕp!O&¸s2©<îÇß¾8?àÒ£/î HqµoÅù>¼ùêWßÎUU÷é‹'þ§õáÀJ;ظ\DE¸Ânƒ+¬âsv\±¯á ^êeãLzvWh9sÛ¶Ôp±í p…&^ÚÖ£†+ñE“…+²p…ZC®@jÈÂü’aÜ«¡£õ.Ž…+èk WhÁÞ˜Òà F»‚+Pí® ´\¡Í ˆûƒÁ©!úOt WÈâäØÂš¸è®PÚÑ"À°w\a/;ƒ+`ï¸B¾Uöå-¯wÔIj€+ˆ{¬Wh³)Ú>ó¯}ê ú¦‚+¨Ëd®Ð&c½1=ðÐ\í ® /ûi¸B›Ë9ßþ©5]Á® ²Ž\ÁM¾§à ´$® —¤®àfÏSpR W‡ŽWh³G·º¾³à 5».+ Ï\†1+¾¼åi¿¨W¨Ù6 \Øhá Eσ½¾ýÄm´p…j#+€WðlÔ“mÏÆ:“V6\¡]ÌA¸Ö#ÀÜž¶OÄ­cj¸‚pL€+¸ è\N¡4\AL¡®À§P ®ài¯³}€,\¡ W ÈÂ<íUˆ½4ꮀ]оUW$fä3p•ÏÀ¼¥ÍÙ]Ú(¸ŸÝ(¸‚œÝX¸‚·2:»+#W`là 2€…+x «³»°Rps\Amƒ¸‚·.;»ë2Wàí®à ²Ý-\Á[ÖÝe‚+pí ® µ[¸‚·*<»«BW 5¯á ¢æ®à-*Ïî¢RÁ–gÈPp=èk¸BgKÚ/ÈfÐp…UüÙÓþ| ]‹SíϾö…Oë÷™{À WÈÛjó›d²i¸Â.Îà ùëf Wë€+,BË×§*cÌDî—ý÷ÇÊþ»–]ðè,\A¦Q·p…U\Õ…+@¥XqµT¸TŠ?¬¡oO¤"tбpèkY$\Aj·p…|â»çb[½¸Æ‡ÛÆÑù‚ \oá ¹Í¦®ð!ãã#5Ïà öÉ®P¸ÂŒ¯û*/d‡¥ÁTöWÈÎ8ñ´×-„÷¹u7Éa \!7»®O°•aá ÞV…Þ7¤ÕƒÛµ5\!ëUp…U\ö€+è ¥á ùÄœÄI”×puËcùF[÷yWPÙm \!;{'â ë¦vSóW 6j¸‚Ònà ÙÙa§ež<®°Ú8_ޤ`+ØÂr½2ï;’Óp…\÷w¼’Ôm°QÁì9@¶âh£„+x6ÖgË[žuWç+5…Û¨á ÙÙ‡‹7µC[[¸ÂÁN·5Âh˜Y‡DØ]"p… »KWðšá×mãuó"\á†ñ¸í¤á ÙÛvRxƒ6Η‹=ŸnÛøt`c}ƶ\áÁN`á ·:l;i¸B®É^w®{J_uuJ®°Úˆâîqó µ/oy6Ö§÷ͪ¸ÞÂê.c¾–e1´<n²>°â‡÷º?õ>«¸Ùè2p…"· \á¶3Þ`y¶dÿæ#ŸÎÔ p…µ­-AÁŠ,¸+.ÛÚ´ÑÒ¸ ® môÅUI \áA-Á±Q¤v_\Ùhà Û(úõ…öÇeOǬ`\ay{$®àô'‹:ÀÖz¼„+hí®°iùGu(WPÜWhÚÕ[®0(å®ÐÄõ[®ð`W±t§«H¸‚쾸vL WxÐFKGpl”p©ÝW6¸Âc6Á³QÀŠ8]qm£†+ p…m´t°á jFãŠo6R¸Â6ý|Ïláé®ÙÂSíµÐ#$\ÁëôBü`ìyÚCÞýµmé`#Âdmûâe߈#p…m´t^ ® æ®¸zËÀ´ÑÒ°® µûâ{=2¸Âƒ6Z:‚S® &W®¸ž­k¸Âƒ6Z:Ö#À¤v_|¯GWXmt'OG“‚]üØ1»J$\Ak×po£AÀ ¿"ÒÄíž¡†+xE¬â° má |r¥à î¶›WD WP±ÐÀÜ"6¸‚1KÁÜ"*¸‚·û©á kI`ÓÝÀ¶·^üoêNãgºk.à ^÷ÐpoGMÃèaÍIÁœŽþ\% CAÀ|ñïìˆP‹wÅë1a(¸‚'^Ï—CAÀ<ñz E ®àˆ¿íËêá ðÀŠ/‰âÙX+.ߟ}ñ—vŒIá h#Âö®ð€ ®€62¸ØHà ÛW¸ÛFW°6r¸Úˆp…¼Mˆ \á\l¤p°‘À6ã\á~)\ë‘ÁÀFWÈÛ-fW¸ßF W9\Á‹"u€ :®à +îÀŽNÅB ŠS¸‚{ŠƒÚ\á¸êØ9¤‚+ä[¿©ÿjñià Ç5¬}zŸöÛ w¨½ ½Oûív?Ô^…Þ¥}¥#dw uÚ¾߯»P¸BÍš›j WP›7®Ý©™ÕNá Y+qà ÙÙY%®`ŠHà ®ö½>»ŸJ;ƒ+`[¸Â¦Ã²;5¥âp¨`W —b,\!Ë=W îgá Y\t³p…màk—»® úÀVqy?à yß 'p…U\\1F¸B–;M®@S® *ÅÀœª“põÀÀ6ãE\¡Þm%p…­æÅÅv€+dyJlà [Í Ç¸B5‹À–gPÁ®À.¸BVŽ®@¢…+duYLð‚®ÐÜá ¤‚-\¡iG¸‚­`W£6Àx[¸¹Øaá ºk¸‚SÁ® h¸©` W—°®€ pù±µ…+`\AU+°»® Œ¸–à Y\o¶pÒ¹,\A:¿…+€÷"\At.€+ðÎeá ëyúhÉfÕ½#ô‡>Ô…X2§¾Y@{p×eÓ>®@ú¦…+ìUÇà ¤},\¡þ.+@ßD¸B}@à «¸Z1Y¸B;„®°Ýá–7½o4ܾ$mâØpÓ¢¿#·î–)ÅâØp×5û«r,W€†C¸ÂÞp ®`ŽÀªc¸:ÀšñW  §á Òã,\¡5œ×¼µøúƒº£æ<®9ÿ.¤§ý\¡£ƒ~)%¸õÞnÛvb!' öÖ \¡¶+À|á uÚBà 0ßD¸B5‹Àp¾ páÖWp&M®à¶ûsm÷ç¿ïuëÒ'+ŽÍÛõÄ­—yì0¢86oX=C¸5…+€[#\¡z+àx p…ªÀp®p1 ¸º5Àô:CÃZÃyÍ[í×ߊ7oª3Š*Dܺëk÷0ß8t‚nÍmÂÖB Å-õGÁr6®€ËH€+ˆU(ÀÀ­®Ð>B¸º5Àª8+p·Vp·ÝwËôWºÇí>gÃùšü=öýâÐîÓ*ÔÎsâ*¦[¸Bs„+v·p…ê—®€Ã9À¶®íŽpáïWàí®à î,íSýÒN~}ÜîÃþÍy'»3½mvÞÄÉôz á\Á6+Ôé5+†³p…:P¸4ÂD©®ÀNÁœ†[ë €C¸‚:è0p…¼ÆÿÄÍÙÓÆPÓë®î¼4ñÏ&•„†+ìUÇà ØpW¨3 W ( WØð ®À7ì,\a]šëЧ)f3yZå­¸Ýôá l?vªà|݇´…Ž@ÛgŠZ¡ÁœkM|yËùÚe!x[[® ¸‚3jK¸‚‰Ö ®@ú…+ì€ÁȨmá bëà Ø‡®°i§pìCWÍ p;%pQuWÀõ%Àš8ÂÈ® …+äv…à d}iá Nßü· YñæXôª²ÿi²™\a«¡½Ÿ×~´½L•s‚# WÀ€+8EüAw޵[¸×®à žvºº=Ôp¢ÝÂ\ítu¨ÝÂxÙ\ÁÓNçð‡×¸øO*.à ¬†îTB§-WP½ÎÀp¾y¯ö•ŽÙK%š—}à ™Ù¨Í;U·Ò2z†I4¯üÒ¨v•hÞÕ¾÷m;8ëDóÊ3,\jW‰æ}íÏ»v}R¡Íë)›+ðš—‰æ]íûoÏt_|SJúü=â{_Å>/SÓ+·p… }Þ¦¦÷´‡õùðhŸ'p…÷÷ùðhŸ'p…÷÷ùðhŸ'p…÷÷ùðhŸ'p¿ÏK¸‚ßµ%áý=8<Úƒ®@ÒlÉoHFjWh©¦q7)æÛÇÒù¼Õ DïÊEôæäã‘â$›°‚+¼?¥ÍÛÇrÒ¼},]Ì›NÅâfrqË®²¤ð²ûéSÞ>–ÿäMçáÆû©Xßtv®ý@\'ÞàŸÓˆëœNºŠŸâ2]…›íÂwQHq™ˆÊîäˆe—9"Œ¸sf/ÅÕÉñ>” ¸99VÃ…<™4âÎɤò¸ûâü€K6¾¸s€"ÅÕ>¼çûðJüå«_u|;WUݧ/žøŸÔ‡WÚÁ&Àà"*Âv³\aŸ³ãŠ}x WðR/ëgÒ³+¸BËÙXÚ¶¥†+ˆmW€+4ñ¡m=j¸Â ¾h²pRC®PkˆÀH Y¸‚_C2Œ{5Tc´Þűp½c­á -ØS\ÁhWpª]Äv€+´¹‚WDáO´µf(q@l M\´µf( í Ø €¡°‘1°CÁëz:äÕPë¨f†‚¸® …6iò”Ôô4…JPWà *¡M­8Hczàþ¸Ú*A_ÝÓ¨„63s¾ýS§]º-*AäT‚›JO¡hI4*A.0-*ÁÍ…§P ¤$• Ž•Ðæ‚nu}gã# j®\‚J@×T JV|yË¡~Q•PsgT±Ñ¢<¸‰žÕz}û‰ÛhQ ÕF‚J•àÙ¨§Îžu^¬lTB»fƒ¨¬G@%¸=mŸV[ÇÔ¨ᘀJpÓÉ)TiT‚˜*Oˆ*ÁÓ^çî:ÎXTB3•@âŒE%xÚ«9 :{IÑ5*» }«®/ÌÈgP *ËA%x •³»PQ¨>WQ¨9W±¨osv×9 •À*Ø ä×ý•à-“Îî2I¡xÌQ¨µ©iP Þ*ë쮲*·»B%Èv·¨o‘vvi •Àµ+T‚ÔnQ Þïì®ñ*Ö¼F%ˆšT‚·D<»KD…JXž!A¢‡mâ_¨ ‰«’gOÉó’*ôåÙW²°Jýö¢Ð# x Áe[ ~“¼4 >ØÅø œ`MkÁbqàƒEhù2Te““YÂý²ÿþXÙײ VœÈç|°Š«²à¨+®–±>€J±â‡54£ʉT„N¿/öH|½c-‹Hí|PN|g[ly®ñá¶ñ_t.> Æ[ðAis#|ÈøøHÍ3ðA=,Ô|ðãëžÇ Ùýhà•YÇ€гy"NJ<íuÝÿ>·®â&q‹”f7€Ê ö,øÀÒªÐû†´zc»¶]£ |°ŠËÞà‹4ø œøa8%ò®n`,ßOë>/À*ó¬g'D2ÝÔnjÁÔF >PÚ ø 8û%â$˳ñg#€Vç‹‹Ôl[ðA©×™Ë}Çe|PênW’ºÉ6*ðÝ£ÏVm”àÏÆúly˳±îÑ|¥¦p5ø 8›=âàï¦vhk >¸1Øé¶Fð 3ë{E|P`¯À^3üºm¼n^Ü07‘4ø x›H =pÃÆùâ¯gãÓmŸl¬ÏØ&’<Ø ,øàV'€M$ >(õ×ëÎu‡è«®®ÃAIƒÊ kûð(ø„Ú—·<ë>ÒûfU\oHYðp„~ø€UÜl[ðÁ 7‘ øà¶3z`y¶dææ#ŸÎ¢ àƒµ­-¹@YpW\¶µì€ÛÚ¢œ¶–äÙŠ¾¸ö,M.xÐF‹pl”ä©ÝW6rÁc6zÀ³Q 9ò¹âÚFM.xÐF‹ðl,lì9ˆk5¹`µÑº†"x Ñ*>s2ä‚U  „_ûâŸn‰ã¹àÀF>t…ýë§&N†®öÖk-â«gãëA_k_ßSÄ×÷1¥`ÅIÛ[O{À}r»ó“ ÷=°Mí z@‘ TGuÅU¸7ä‚m´è°ÉÒF_|Øç„\ð =6"¹@MI\ñÍFJ.Øæï ÷Ow…û§Úk¡GHr×é…øÁØó´‡¼ûkÛ¢ÀF$ÈÚöŇ}' ´Ñ¢x=*ršºâê-C.xÐF‹ÀzrÔî‹ïõÈÈÚhÑN=Jrš\¹âzº­ÉÚhÑX@.Ú}ñ½¹`µÑ<M vñcÇüí*‘ä­]“ ¼A.ø&n7ý4¹À+b‡]dK.à“+E.p÷ͼ"jrÁ ¯7+r[ÄF.0f)r[DE.ð¶/5¹`- ìšrÁöÖ‹á¾n~¦ÛÞ‚\àuM.ð¶Ä4¹€ž¶œ¹ÀéèÏõ\‘ ¹ÀÿÎÎø´øwW¼ž@ xâõ€ˆ ¹À¯ÇHP ÈŽøÛ~2¬NA‘\¬ø’…µâfûÙiç”\€6"¹`@ÈØÈÈh##€„\°=`ä‚»määk#' H.(Û„˜ °‘‘ ÀFJ. ¹`3ž‘ î·‘’ °¹l$䂲]*&ä‚ûm¤ä°‘“ ¼x ¾ËWAÇ ¼@aÅrÁñÉç¡øQhAqJ.paP;#W;HTä‚r"ë7?_-> ¹à¸æµïBïÓ~»áµW¡÷i¿Ýî‡Ú«Ð»´¯èâN¡NÛÇÖû}J.¨Ù¢JS­ÉjóÆ’ Š;5³Ú)¹ h%¹ ¸3;«„’ L ¹ÀÕ¾7Ðg÷äRigä¬`K.Ø´srAqg¢¦Tœ\ÌÈäV‹%¹¥cÈÄý,¹ ˆ›j–\° |í®5’ DrÁ*.¯+¹ ì[á„\°Š‹¿H.(r§É ÈbÊ’ T¥rSu’\ rÁf¼¨` ÔË©„\°Õ¼¸gä‚"y ¹`«yáX@.¨frÁò *Ø’ ØM!C.(j¿Q“ HX´ä‚¢n{irV0 š[#¹€T°%4íH.°LÈbÔr¯`K. 73,¹@÷`M.p*X’ ôM. lÉâ5 °‚\ ¿d¶ä¬` ¨ª3ävà „ñ@.À²¹ ˆûÉ–\@:—%Hç·äð^$ˆÎäÞ¹,¹`=/PßÙÔªºw•~ŸÓêfÛÍí«5).ˆc^×ð²}(¹€ôMK.Ø«Ž‘ HûXrAý]B.€¾‰ä‚ú€ Vqµb²ä‚AìZrÁv [^Õ¾Ñp*ý¾Ópa h\뺚ȹ‰cÃ]Ç‹  á\°7#؆#ä‚êX„\€Žä‚f<’ hÃirô8K.h ç5o-¾þ¾ÍmÞÍå¢×Óþµ}úLýÒˆÛN0Ÿy»Ç±ñÖ ¹ ¶!À|ÉuÚBÈ0ßDrA5‹ p¾ äáÖ@.p&M’\à¶ûsm÷ç¿ïuëÜ´ïBؼÓxLgSsRŽâؼaME&Üš’ À­‘\P=Ž p<rAÕNÈ8Wr˜„¹ÝÈz¡É­á¼æ­öëO7›7]£'nÝ¥Žµ{˜Ñ(Žc{ßeo-Ô¸Eê(rAiÃ& p ä± r¸5’ Úw?H.@·rA'äîÖŠ\à¶ûn™þhö¸Ý[̨Bl8_ç±àïÓ¼qh÷i¶ê´{Ñ4qÓ-¹ ¹ ’ H»[rAõKB.ÀáÈÛJ.€vGrðw ðvWäw–ö©~*'?W¾Ñî]oÅÙîú¶Æá¼­/›8™^¯K?Õp„\`Ž êôš HÃYrA¨ ¹É¢T@.à §ÈNÃ-é÷ׇäuÐaÈe;ÿ‰›³§-a¿žw×]§&þÙdvÐ䂽ê¹ÈuDÈdeÉ;m‘ ø†%¬KsUò4Ål&ÏžíÜ&n7}ç 1²>Ÿ‡iò*ж}ÎaÞ˜Þo5&&,Ï–·œÏU–ôûÞÖ– ¨†\àŒÚ’\`¢µ">dÉ{'`ä2j[rØzrö! lÚ)¹û ÄòÈv"JÈ¢ê€\€ëK 4q$]AK.(í ' ÈúÒ’ œ¾ùo²âͱèUe+þÓ$rÁVCÿz'>/®ÿüh{˜¹æG6”\€;/@.pŠøƒî>k·ä®]‘ <ítu{¨ÈD»%¸ÚéëP»%ð²+r§Îá¯pñŸT\ X Ý©„N[\ z!à|ó^í+z °5–Êâ.û& ³QeqwªnEô “Å]ù¥%Pí*‹»«}ïÛvpÖYÜ•gXrÕ®²¸ûÚŸÿfqÍdq×;n†\Àk^fqwµï¿MÖçã}ž Þßçã}ž Þßçã}ž Þßçã}ž ü>/É~×–è÷÷àðhFrÉ“%¿ éž¹ åŠrÄÝ•oËÇóVS½+™Ð›“PGŠ“¾Š\ðþœ4oK*óö±|/o:—Š›ŠÅ-»JsÂËîç?yûX“7„ïgF}Óé9¸öq9ƒNs ®“Z8ù&~ˆË|nº OÜÉ$!Åe& (»“äA–]&y0âΙ½W'ÇûP&ÈääX òdÒˆ;'“Êã~üí‹ó.=ÚøâΊWûðVœïÃ+ñ—¯~Õñí\UuŸ¾xâjpP~Hr\ÙŸz?Δä‚% ­Øa_™Vü(ýÑY‡¶ï¨ÑbßÐpYÙÕxÂXÅUI,;À3¾Æ?½Cb©z7XSZ 5J¢LþO•èäÿB‰Jþ¯ó׉zÔiýqzjÓúcC^þ];ËË yù½ ®1Z•2î‹k–*ã~ÑÐ>*—¾º¬dré·`ï%ìÿã*Q)óõ12¿M œÏÿÔx¯+¦ÌÙ'!e¾›„M¥Ì§%Ñ)óåÊÆ¦Ìw³¨©”ù¤$6e¾8»‚”ùmâV×w6,@Êüše•¤ÌÇ^ )ó=ýEµC2üšO‘$Ã'Úm2|¯?>qí6Í}ÕNÒ܃vLsïi¯Ó#¥Ø·Û˜ÀË ìÝvßgWÖMt{á&ÀÞM ¦Ø“˜cØ‹€ ìI̱ ì=íu §d›À¾È$=m{O{"g"½³õ"Äeç²oÕi¦‡L{•­Ì$°÷æ«gw¾ªØóx«ØËxkØ{Óݳ;ÝU ìY›öò#o›ÀÞ›-ŸÝÙ²J`Ï#€J`¯ö¶L{o²}v'Û*=ow•À^¶»M`ïÍÕÏî\]%°çÚU{©Ý&°÷¦úgwª¯ØÓš× ìEÍC{o¥pvW *ýòì•zïîÖÎ4mÉ-¿Š?{âϾø’·}¨×溛 tÒùa[B|“€)t~gIç\§ØÌé*Å—Êœ¾‰ÿ¦Æ‹üê*âïZDÁв¹åei›[~WasËCÙ­8¯ˆ[eŸó¶'RD»\¬O!k<4ïj¥Ì/µÛ¬ñÉï*žTrø›6~ÑéRLrxb£M?´y$‡¿ÇÆøH=²ðì@øú€ä€¿mc]Ⱦ%mKõ®R‘˜T">©Œîp¦*nZ˜ŒîC32º'X¹Þ;^T¡CŸ©{жÛéÄ탮•¸}—M ‰ÛݧÚuæuõ»&óúà,»¹vÈ©¾jŸ¯TÑ.h+ÅæTêEËá¾|¯œkWÙÒí¾`¶â¨]fK÷´×…÷Wª„k×yÐgïÔ¼Íp~ÃùuÍc†s:ˆ®C,íI†sÏ{u"ó6êšÇDæ7lÄ $ü†öù†Ÿ§ýé¶ö§íuy~ûØäã·Ú6tbïU».â¡_ê´âà kèðœæ¤† 0Uq½ †F–ºnŸö*n6Z*ðCísšíåÙ’Ä–VÉæ I¾×š·YºO&K÷ƒJlšm®Ä¦Ù~P‰Í“í(1y²·Qðë m¬e!hfy9XqX—©·v°R|º'{­ÈT-ódkí"Oö÷ôh=ÚÔN=šÔ*±I¤%&‰ôcJ ´§Dg~P‰Mãì)ÑiœW%¶åTgoZúϾ¾ y˜Ï*óÁ[Žv•‡y8X¾ÖÏt3b~ 2,Ó^«l|­6¾¾ÇÆ×Å¿¯[üK’âåÙ“ÛÖOv°49Ž·0erŸLŽã•Ø$Å „&)~P‰Í2 Jh–á-4½g°|ºk°|Ú›+UfözÄÓ>\Ý_60h§ €Tb3øò"Ú ¾*±)x±$,ïƒJl]§$&‡îƒJl\, K‚»*q‡Ô§ƒ!õé·+.ÓÛêßÕém½ëšÞÖ®ÒTæÙ*îΗan×òp¢׺ë$Ïøš¸–¯2ÏrãÏ[âZf¼JI˶5•ou¹€Û &%íöÖ‹“ª.ú>Ó]‘’ÖkR’Ö[(é”´tɼõo±š·¾³ DóVÝ–"ébÏ*],nPÙ·êIþz–É_×Grû“¿Â+¾$²t3Ì¢³·îHöÖ{”DTBÒ¯nXúÕ{”$¢ó§[¬&ùSïQÒ£’uÓΠޣ$£’ÁtØîx ¦·•ü8òñdL Ro`°âN ÒãÂCñ£¡Åi Rw3µ³¤ÇUÇvúT R:ÇÖ‰0ÕÔÒ¤ =®ùcí»Ðû´ßn¸CíUè}Úo·û¡ö*ô.íkÑÁ ™§í«‰ý€…¦ ­¾ MµNAªG6éà†b«¦ ´'éàFr«„¦ 5E$)H]í{}vw9•v–‚+ئ Ý´ó¤ƒ;ó0¥â)H¡‚Y Rr¼cSrÁgR÷³)HqPjSn_»-ƒ)HE‚¤«¸¼p)H‡ýfIAºŠ‹;˜‚tËP“‚”œÏؤªRL R§êd RõÀ¤ ÝŒ )Hë’‚t«yqSRrÚ¤ Ýj^8¤ ÚEdHA:œXÛ¤ìøÍ¤ Ôn„NAJ¢MA:¨cO‚+R6·Æ¤¤‚m Ò¦SÚ &)HŨ )HyÛ¤dagSê¬S:,Sê:)©`›‚Tâm R¬`HA*¿h°)H±‚!©ª:“‚”™¤ÂxHAŠe‡¤ƒ¸cS’ÎeSJç·)HÁ{1©è\‚”w.›‚t8Á-P›#I÷Ž–Ø« AšÖ‘k`‚áñšj 5qìÁݵ3íCS’¾iSîUÇR’ö±)Hëï’¤Ð71éÐî]C ÒU\­˜ö¤"aåp‚{²ÇíÓ½ÇöéR “¦5ÕhqlŸëšÍQùÉ4 탙F÷öa™FmûL£ÕH¦QôÈ4ÚŒÇL£´}t¦QéX2Óh-˜¾b|Ôp“ËtÑŠëyû–C4ÒQ;-!b·î×]×ïœH‹N#"ˆ·æ%9DkÍ“¢0aÄ¢uÞArˆÂ„sˆV³HQœ0BQá—CÔ™õÌ)¸DÆÉáw¸ÝæÝr…f+Ž­ØÅ5-Œ›“úâØŠÓàlü’¦ ¿ÄT¡ÕeHªP7!UhÕNR…bL‡T¡b² ©BÑ/!U¨^´T¡Õ2}ýýx@Cgʼn_v‘úe˜æ¡=ˆCóN3‡äÌåJq›Z%ÚˆI@q!I@Å:’€‚_bÐvU“€¢_BÐ*N’€r¿\’€Š”‘à ¾/8nÞ6ìV!6ì.ß¡ÃÆŽˆCóÆ-ç#iÞ+Š«¨js}¶>¹>IóÚ\ŸÕ±H®Ov!×çö€æú„æÅ\ŸÂa!×'oÞ%×§H,¹M‡äÇÍ[ꔺ ‘aw¼&g:4'ÓÕÜCû”ž¶}HJÏ:]%)=IûØ”žu@%)=¡}0¥§(¤ôäí³¤ôé'×#ÐÃÌš«®3wÛiæOÜÓ¹³Î;HæN2m±™;wÚ ËÜÉ÷¹læÎuE«+BB˜=ØiAöÍš&n÷J§uw×t³¦ôûVë’zÓ¶Ï9AÑ&99O*'§·×#rršI­ÊÉ錮2'§ÙÊS99Iï°99÷æe99Éèjsrн8Èɉ½rrîpa–“{ää 99íŒääU99q%99›8æä$Ûd6'§ÀªCNN²³99^÷o²âÍeîÆ5ñŸæ{IÈɹÕпÞÈ‹ë?Úf~Œ{‚3 š“·" '§SÄt~¬ÝæääÚUNNO;]-j‡œœD»ÍÉéj§‹™Cí6''/»ÊÉéi§SêÃót.þ“Š‹œœ¬†îTB瘓Sõ:““ç…÷j_“jlÉ£òʾ 99©*?¡SukRÍ=Ãä'T~isrRí*?¡«}ïÛvpÖù •gØœœT»ÊOèkÞµë­{ŸPOÆLNN^ó2?¡«}ÿmâ"©¦/¾)%}þñ½¯bŸ— •¿Ûœœpü =íác}><ÚçINÎ÷÷ùðhŸ'99ßßçã}žää|Ÿöy’“Óïó2'§ßµeRÍ÷÷àðhÆœœ$€¹²V?¥'yÅN*ÃæÍÏ ßêwØG_d¿9Ÿ+Û«t÷|ñûvã“]‘äòàÓZ‘Ër}ëàK×·úêÑ©o7>) (7ßýº¯_V²o,U:Éí‹„ƒ·ê—ŠGß,¾Õ/ ¾-|s>´v9ñé·œ#PÛ ùAœíüÔú*=<0o9;Õö-¾ái­çûfú­?ÕWåzê,sª›n˜"ñ7·é«¸I?X½[¯ælþ@½õÔòV··â:3 ‡Ì€h<¤öÛÅmj¿:P(í›OÜ?‚Ü|¼ì*7Ÿ:Źùþ¸â*ëž¾&ѲîÕ1Goó鉄*Ÿ^Œ¬v)OÎ7d¦¼:Jií6žØìU9ðêð¥²ÛÕÙöi³~ÐEŸã§zkêº}v+ˆo …øóÖ©¿.ÙO–©ª|†KAñyï”›çeïn™wªß‚Gñ'xkj}z¨ôû–¼©º _šÖHY½œ—T\åy;o5osúÏqÅmóùÄ&ï#Ónüç[‡õ HˆÏCK+b×çK^Žš—á Û‡îþÇiÂH»×·Âü©q˜óí>¸ÿnž/&÷õ¬KˆÏNTmœÚvœ?lÝ;þö ¦¡?åq€v_6ÅEûtÃTÁ—ý+¤ŽýM|IБ-ŧÿ½Kü­}9k_29¼Âƒ°ç?ÆÏ§X¸;Y¿œÃ.gsõÁœ-•zÝçÖ¼a «—2ny$>×=—!Ž—~úç+Š·æ C—Ë|˜Ÿã¾uÑmGPi¾.Wúý€VÖüÞ¼ç2ÍÁ/óÍÑõŠAmÑóÔ}š³êíµyÏ!äùÆcú°ïe‡ù‹í²ß¸lâ˨ªü}ªß:áÐ5Ù'M|{õ[ÓìÝ&ÜÕm‚×mÂ]ÝF½uN—aï6öA Ý&ˆnSú>ö{· ­ÛL+«#í6aë6sçîë݃°Ý@¦‰æ0„¡£Ýfã8Ùö«˜ÏÛƒù¦_?^†qH‰v›õ­RÂ4ÔŒãválî6›xÊSwœˆ"í6a›¡çîbêb·ß·‘Uwž&›8XÍ¡,(¯\O­— Ú͇8äº#i‚Thwâ8®9— %\甋…© 怓c5H¹“6~CƒT{¶14—ÙtS„ˆeN:O]fïrK^·¸LÐŒk¡.£ûf××oßÔVó‹cEâ2‹/Å[.óô¿žøìKêÁÜðàq¯ðV »/E1›L}]“7ñűšø0÷ÚõêìKq[Nk³SŠAjv¬¸v©¿¬b=3_ŧUÕÐÏ·í°Û,Ž·AªÏyÎ|ëÎìö»Ý|—kúõHêɱ6ñ>uÝ|ªº,ξ·yâìï“]=?;V4!®Û})Z_ÂéÁ—½ˆÂ±v_ŠÖ—@|v¬hk÷¥h} Äé·VÇÚ})Z_²â‹cÅ}Ê;Òr]?_|Iõ§–vS¸ÌìXºÓN˥ݗ¢õ%+¾8–zk«ùÅ—Ò]A*yA*ݤ’™ÂäÝ—’ôÐ •Äï÷ÝzÑcñ¥Ô\©”œúBƒÔúVHóÇBS×¼Ö{ãi»¼2NA&¤zCÔ©U<†óeš\t5H¥íâÜ<ÕsÝ‹1A*ínù`4‡z䱉çnšwtj4;VÚ?*˜óEåíú×ìKI×\hJÚ±J]I¥æKcìÒ0Ð •šËL×-w×_Jê[£z±Ø©$k Ëÿ_|))_Jd>ÿ¤ßškh—ªÓ}âü G?d¤’ö«å[‰Å—t¯»tì·Ûè“+uÓJ¦$¤z3VÅÝ—zëK4HõÖ±v_ê­/Ñ Õ[ÇÚ}©·¾DƒTok÷¥Þú R}[(OËï²ò¤f_ÒÝ‘D™ÅezÏeÔƒ¹N©ËdÏeò].“=—ÉfÛ‹»Œ?§š—4‹Í yÿP—ÉÍeºiEÓîMäÍeæYË*H¯›]&¯fÎÆRbý:ir™¼RåØ]æÏu™¼/”çn7æku™íwçëÃiþ÷D]fŸÏóGLa¨_¥åýjm7õTsž— Þ]&ßå2Ùs™|—ËdÏeò].“=—Éw¹ÌöVèâ¼½{ë¼.ßå2Ùs#Žvq™â¹L¹Ëe(šzîó’ô”Çtåk™&^.%õ-L¬¦ýp åZpJÜ8»çiõ8\†ë´è¨yVñ8;ËäLÃØÑ>_ö/Cú©ÚêÌj§ŒÌ9.Ê%Íó2ÞçËÖç眠yZ³Ô>߈fCî§Gíóf£5¥²Wú|ñú|¹«Ï¯Ï—»ú|ñú|¹«ÏooÍY»ÂعÞ}.wõùâõy-~Á†ãI¡N^zVÚç¯Ï‹“ݺyŸ—öû4s?.”~òÕyƒœ÷ù--Ó5Ä2§G½ŽúŠYÌe—i~Dêzâuž)Ób)E}<ÅÜÓö¿Í!þeö+è“ ²¡“7ÜæOá­9k¼R¸Á ÌoÙ·"{k¾½%íš5vä­ÿÜñ–‰pÎ[ó]¹›oý»“ù`ý{-$lI 1Â…»"\¸+Â…»"Óøó—]„ýJ_š?@‡ÇÁPGiâúžÇÁÐn Mñ$C‹ƒC£Ã]q0ÜÃ]qp;Ð aœÖó¢ŠÆÁí­´N¯kÊŒƒaÛã sþ†-×-ÆÁõ­i@ŸÖq;·Â8¸4çi=™Âú¹$ÆÁZÆ~ú¡KdQ©2—©3_GúV-d×Ínš(³YO-ä´‚Âøµ[oÂ’8¸¼5­(â4Žëf;‰ƒË[)öó¹b;'®‡ié²ÀƒGÃ=q°Õ×¥‹eMÚq0Ð8h 4ƒÆÁ@ã` q0Ð8h <®uÓ¼D,]yÜúÑ5]ò»kÏãà^Éi¼Ú'Cí!ÓšrN¾Ö§8ò8¸¼•ãœ23ö뜑ÄÁpO òz_×9q0¨‘Ñú%*…ý0ð8¨ÞJ©#qðçÿµãÔ¥§ÑR]²»Æh´¼ý[s´ wEËpW´ wEË WéG-ã]Ñ2Þ-ã]Ñ2Þ-£.âè¬÷׿¥×ÄÖ$Òüne»5]*‰–Q|k1¤”y´ŒwEËxO´ŒwEËXç áBç¸?êÓ4_˜„Å!òh·»²×i´'-Àh¹¾5Í”ÓeI~Ô» §8çOeXS^a´Œ›»–2gС«³ZÈå"ذÆñh׳\çhé®×·Êzë‰9‰–q[… c=0!Ñ2®k‚qNòé ´2„…/r-×È£e¼'ZÆæc1MóžŽFËH£e¤Ñ2Òhi´Œ4ZF-#–‘FËH£e¤Ñ2òh·³üárƒ\àÑr«¾çÄשx´\[uÞ ýv[•D˵Uç›R}c—y´\Þ*e¾êt-kn.-ã=Ñ2Êh‡\h´”o]CÇz…ã`¿EÂ% Þª±ß®vN#Ó0ÐsËzó4MöGw/³ruÚùNƒ¢ÂÂ|RÄã`{kÆÄ …ÆÅ:…Æ2Dj×'yStæotû{â`/>Lë¦2{{{{{{{{{{{ûíÒuæ#åÑ9kì×9Ä0ùJ¿­áH\Þ†®Ÿ‘?ìü;Ô’´âŠ|jÛw]û™KtuVý=q°Wq0ã­‚%ö2Fô½³j”¿Õ¹«FõVU£|+¤ ]ÚHÒ] ƒ·kŽƒý]qÐÜ2vâ`WÌwÅÁ|WÌwÅÁ|WÜÞê¯yNøê®s»—™‡0Œ<æjQ˜VJ¹çq0· yÝv—“ÄÁ|WÌ÷ÄÁ|WÜîUOÎ?¥+îõü¨÷ªOa˜¿¡+ƒë[ÝØÍG6ófƒÛ[×.Î_¿‘Ý¥õÆõ<_žz`7-…ƒë[y¾>­ÇVzµ“U×q½¾Íã`^½g â%M]"ð8˜×]ÝRòÌé#ƒ«Æqœ/¥ž¬ ºZÈi¢œÛ­róºuѧiÕ¸}’Hâ`¾'æv·°”.¯÷ü f3ƒ™ÆÁLã`¦q0Ó8˜iÌ4f3ƒ™ÇÁµí§¦º„|-ÉÙ=][už‹Ìß›ç¬q}ëZœߧ°ýÚÚCúnضNœ;7›Æ9ÔìYó=q0«88”Lã`–1"—ŽÇAù[¡Dg=¨Þš‚*ƒÚøäÜÌÉú´.ò8xû·æ8˜ož[Îq0믨8˜ïŠƒå®8Xå®8XåÖ™ñK]a§i JΛҚgù¶™ÇÁÒâà8æÞY–»â`¹'–»âàö­E¹ö ï²ç§ˆÛ[ãÌêòÏ<~´/º±„9”xó£}xÑÍ5笱~…qŠó‡«iùRÆÁ²]¦™GzËgƒeÛ¯ã¼ùË¢R-d˜ç²Lœ8¸¼5 L}Z¿uâq°lë‹ÉùKG÷Êk!»nî€q¤»ºµóIÓŒ6ZI$–{â`©søËÔ˜]Î4 ƒ…ÆÁBã`¡q°Ð8Xh,4 ƒ…ÇÁµU§%×¥ÌðÄŽÇÁµ½¦@yÉS ,ξèúV¼N³Á.'ï±¶WŽ]w ÎzpÓ8J´0x,÷ÄÁ¢¿Ž¹4#ôô%mÈÞɋг,ú¬ñÂ׃J#µ~Žƒ·kŽƒåæ‰äÍø™/4–»âàpWÃ]qp¸+îLÊþx=8ì_ÉÌ'Y‹pÒüùð&(#qph›Ûײ~„MâàpWÃ]qpÿþj/Ó0É­Ò–üprí™­¯ƒÛo]眉­opaž/çë¥ëJÇãà¦q^ÂMÃõÊ4Ç8¸¾5ñ®Ÿ…9çƒÃz Wr·~æËãà°~J6~—·¦¥e7-Týõà°Í®W/òÖBΟG×®½K&®åxÓY÷ÄÁšGu†¸_S×Ó88Ð88Ð88Ð88Ð88Ð88Ð88Ð88Ð88Ð88Ð88ð88l·€K;‡#qpm¯±ŸWqd7`j™&7y˜¿cצ(¹Ìw_tØÖRSo»Ò½€pOÛÿ¶y¶çôÇü|P½Õ]q5»ÄAùV?CiÔÕÓ˜yÔ °Hwx&xŽðÌðœà9ÃsçÚŸ=pyÏÀëׯñþóç3ðzàõ~SûsÞ¼!Ào€7oÞàxŒ7//////ž ÆKÀKÀK ç¼Ñw®¼‘àx#ðFàÀ7//Ãxxx9Â3ð2ð2ð2ð2ð&àMÀ›À®è9Áxð&àMÀ›€7ov]þ ¼x3Œ7o»ÊÀ›7ƒ=gà-0Þï·€ž Œ·oÞ¼x ðà­À[a¼Æ[·o=Wà­¹sUà­}yðQÞyxðLðá™á9Ás†ç\Àë</ø+þʃ¿òxÁ_yðWþå¯~ÿ÷?ÿû¯?_ùüï÷ß?ÿùõôÃý=ð¿§?Þ`ñ‡‡?Tx¿q®Á3þ;¹ƒUxÜ®±'¥ŠÈÞðO(£>*)|P…?Ù“*üÓ‡¤ÃQøQmðú†Æ˜þaro85áyGxÒ…¯þˆªðµ¤Â…ðB ½_ëÔ›ðeGø¨ ÿ¥ø¤k>pɞʧæé´%Ï_ü ç÷;³!|°„¯N‡Ká}øÔ|-|$Ò…—3ã5ãàWéaŽÄÒ|Páb$!ò¡ ÿH:û{$þ5¥O÷^ïÅr¢àÜ†è ŸÖà$ŽüþC>I޽ÃÙòIYJ½\ú¤à'ÂUø“½i^ÿôÒ#UxôI!µ™QóqÚW½ôISá«.|©ºæO§”u8>) ¯;ÇTÁ¥ywé“fÂw8 ÿ¥ø kž¢gÃ'ð_3éksý†ûKŸ4Þ[f ³á¢ÃÙðIMøS!tTfðlû$æH,ÍG.F|W0Û> à`Cçɵ×;óI¾¯ÖNú¤Î^Fg¥ÁC5ÆNNh.IƒªÎŸ› zÿ!ŒÎ àñÚ'•ÉØ\Èx’äCëœ<>‰¨½Í’…qñµOš Ϻð5¬ÿ|ÙlVáÁðIFëS>¾Î*oxºöI3á“&ü—⣮ù˜tx0|®cçj¾öI3á³!|8ª*|p¤Ãƒá“šð>œóÅKŸÔW²0ã¾v@¬Á¹­ÃƒXÒÛt8ÁFãTp oSï Î >X“!|b•h ù9e¼'[øàtWùŒÍÓR´]e‡“5ßIœ5Ï¡³ —»´s^>Þ«öøáÒÞª{²ÓáRCÜÎÃQŽ]œ B[HåO›ŸŸ¬2!pî/n¦y};~®¸?â~xÔß»?JÕßûC‡Káù(¬¿ÑâT¸xq"òÅÉÍ À‡ ”þâž|T°ÇCw`CCÄ剆úZ—fÆ#â àâPw¦ºÓ+èìqXÆÛB*U—±êQW{?R:ü…”VŒ+=, U)TpÐ჆‚a\çþ@e—^áô*ºq•ˆkQƒÏ5t½ZÓ|Ðг/x2@¸²¡¡¾ZOçO^b[U}ØbчXŽÔ!Æ †Xô!zϺœ«mPábš$jËbÇIþÓàŒõ®‹†ZuÊáõ±ç¤Â¥"2·Y&Ç^X¸ˆzå"\š¹ÇjhH¼rÖA.¶·Èö"×á1 ŽYl )° ïs_øÖûv–ǽØ4ÄdïNÝ ³½;!¹ÀÇI® Ã£\Çs·Žb/ð.ÆŽ ¼»ô0·Œ‹ÙvP îe¢C.ðÔdYÇLCAÕ?÷ݬk(.4ô€‰ÔÐC„ß.4TK[à§ Kê{̸£!ÒmÈ÷Ø®œX§wÍ\jÈg¯k¨d>xjZ²!24$‡Ø·ÑiGCQ×й'UC,"M>h(U]CU›>h¨,i(š6„$}]w4Ć ¹T‘ÊE, ¬kèu†Ög™tcü= ñ’ »eW××PÛ¯¦j䘲[goœär°óÞ'#Ç”åû‰¬³§ñ<¿jN¶Iª“!uˆ˜ÏrBN‡‹wM±Ã#î¾¢ˆ»|6ÚŽ‘ËΫ>ÄZÛŠ7 Ñ`—C|¥ä>‡ø §‰Y…3nzÊQÁ!Ǿg«Cìpi¨¯œœ6įÀ¸ —3–‚ö_IBáÛ¦+ùáý]ŒY‡KáSþþIŽ.X p–( â̱íšRØb°†õ!a‚§1=±¥àÞ649[^páx52íÅÙ™ö/Þð‚eˆ—öxéßò䏨Ṋ'Mø§N… áÑ¿•Ð3íîHÓ‘/=×TxV5ÿÚDxMøs¾“ /Þð\%€Í…xX¾bºœÖSá“©yÖ5OY…oLk!üé2ìNb¾œ°Sá³!RˆÝIº¬vU'5u õd¨ÔаÀ¼è ü0öÁ†zžÅtP~b‚ží>õ‡1Içb]CÁY'e€ËÅ(û% ñ÷4ÄKêq·£¡¤kèå T qUÙ ùÊKJßÓP25GÇ”¯v:s e]Cç!)©’;€}§3hè‘Ê.Ýͳ+xª¡lhH±è›…žê›k¨èÊé³,V¡¡bhÈWÆX¼Þ¢ÛP¨mŽK U+i1mU¥°M“q)”ªSúô{f.WÔo;½ý¢œežf2öKÛ+­è~¼þ1øX‡WÌ知¼°‘ õròOÚr<ŒTè¡÷«:œÉß»¹E:nM®:[“&<Ù ÑH=[¦]ÎÆäg _çî/gÆTxÿ°NIºð[. œÉ/ZÑ=©$•}6ùá¶ðÖƒ1ľIËépYò]Œ>‡ròwølò]ÏŸ²:uøØáÈépëÊxï.ÛIy¸M7ÑP¿·X~'Ê€^†¥L/¿eÀ:9½üN–#Ü,¿ cŸkÈ«C'¡¼~%Ì„‹ê½püøªØ\VÙùþEš);Ýc?Où>kpÉzñì”=ÞcGqIƒKvêª);ßc?Ï‘4¸dçÞÖaÊž,v^2›| ̆BÕà{fSî±ÇãÇ'Ú>à{fSï±ócÕà[f“Ý=ösIF³éð-³É–·IKÞ&‡Kø`6ÉG ¾e6™î±ÇWç$ ¾e69Þc?ùг à{fÃ÷ØóA¹jð=³±¼MZò69_Âe‰yñØü=o“Ë=v>_ið=³©÷Ø_íw¼ß2›ânj¾¾jð-³)–·ÉKÞ¦„Kø°»¸»(ßó6…ë;f¡Ë÷¼M‰÷Øó‘8kð=³á{ìõÑkð=³I—©ßYýf‡õ›Õêý˜t8©ßÞûñ³n à“ÓSÉ—CœUy«•\¶:ŠðAÑ[Éá{ÂÏ긖dE¦ÂMø¡±‡Ú0³ úàõ+s²ž;pëZ®ërf%ªEm%'ê ʤnªè­ä„æ«]WP¯[ºÎ„¯N¾ô®µc+9^,ÍW<‹‡ÃÃBZ{yûäÔÜot Çzî¶NŽÓ•®áQ‚1 ðár‹_b7ÙÓ z8‡%v¾Í^“ Ê®h‰=Ýd—g#5eÏ{O˜M.*|ËlêMöp”ªÂ7Ì&8w“8#|ÃlB¿ªµÌÕß0›à,oy N×ðáÅyRáf\¼É~Î8Vá[fÃ7Ùãᢠß2›t›J=¾e6–·a·/×p{™@ø–ÙÔ›ìt”¨ÂwÌÆ»›ìñ€€5ÂwÌÆû›ì¢Ná;fã-oÃKÞÆÓ5|0X¤¾c6>ÞdÂÛøïyÏ7Ùwýß2›t›½¾e6=þµÑ³àâÆE«™€h‡†pÁÞÛ¡Ín¬!|ãÆZð+aCÿh®Ùèyª!ýª<ù~k¸Ž×Ѓ ÏF2èhɬ±oõü ý›»Ö™pv[¯Ã?nëE½œèG‹ðÅFg5ªì;·õnB¿­—6Ú v¸ÔÐ3°Ñ NôüD¸œ&­çç !ñiC€ûñ+äeACÁêE…ײCûzðp3ûmÏ®ál&¡žô@íœî±Ë$4“¨³Ç{ì2 ð¤jçì|]&¡žô@íœ=Yì¼d6ùÎfá[fSî±Ë$4·̦Þc—Ih„ï˜ ¹{ì2 ð³!ËÛ¤%oCáÎfá;fCt]&¡¾c6ï±Ë$4·̆ï±Ë$4Â·ÌÆò6iÉÛP¾†³™„Fø–Ù”{ì2 ð-³©÷Øeá;fÝMÍ‹$4ÂwÌ&ZÞ&/y›®ál&¡¾c6‘î±Ë$4ÂwÌ&Æ{ìùà”Uø–Ùð=v™„FøŽÙ°ñµoüȈRYü×?þþñÿ8~þógóVï[Ôal‚û> p©€ØÂrÞøöUæždÀ¥]ñ í{ \ÞVìq‡>,­5©„·s˹g:ÏŽµuòÃÍÖáÃìÞ‚C6wÏU‡7 ÑQj}ßlE¹ÇëTxõPZGØðjÀƒ[‹Kü.ož„wåü' —ØÙ‚/©.XªMõ^w›£'gÀɯ°‹«ÕNKp±ƒ¤ÞÖ„–ÆNÖØiÉlÈ2›¸d6Ñ2›–à–ÙÄ%³i7&B%>¸Ï¸˜—àÅb¯+p¶Ì†—̆-³á%³áhÁy >ìzuåpI«¾N¶ë Ü¿ >|k@_ed?´Ø¿¹-¿¦•‹î¨eèÕs‡KGM»Ì¯÷¯ØÊî§ÞŽª §9Ô˜_r:»üdwéò’ÙdËlò’ÙdËlò’ÙädÁE‘Q,º§Í–·)KÞ¦XÞ¦,y›by›Þ?¦xP}B pkìeÉÛËÛ”%oÓ.ø†WLðuuiìÕ{]ò´ÕZ ëÒ"U­Eª.-RÕ0ïVÌF´°õÉ…~"¡%x´Øy ž,x^‚ ¾b62”pï—àòËŽ¹Fž&Zg©>|9ãåPÿøóûÏo¿þòÿdòѤŒ¥DyLP-1.10.4/Data/Netlib/finnis.mps.gz0000644000175200017520000003476410430174061015601 0ustar coincoin‹K®9finnis.mps¤]Ë–œ:²÷Zý "ô–«Ü.úd¥k¸Oÿÿ‡\eR)6!á{ìIÊÄŽÚ¤¾>½}ëÊŸ×ë8åÿó>?}½|›øÿùNÿüGwíº÷ñùÛGþý½ëÌ×§ËëóµñüãµñcÜ4.kãû—mãÀóýélLk#ÓB8½¬ŸWh¼¼¯÷Ëϵñöô¼}ÿÀð\Þþ…Ï#„j@¨¡„j@¨¡„j@¨¡„j@¨¡„j@¨¡Œ0jÀ¨£Œ0jÀ¨£Œ0jÀ¨£Œ0jÀ¨£Œ0jÀ¨ òð1Ïïó·g†Æ»†±Ð Âb1Óà±±‘ AˆA×}b% ”0PÂ@ % ti8h88R¢&Œš0j¨ £&Œš1jƨ£fŒš1jƨ£¾7:ð4`¦aÓ°Øð؈ØHÐ t€±mz:bâ-œË’Æñßqm|Ѐ ƒ ÆFÀÆÆÁ 6.ИÑõŒ®gt=£ë];tàÐC¸ƒWl`lîmiJE(¡T„RJE(¡T„R-'l|ÅÆ36^°qÆŒÌÁŒÌÁŒÌH:#©C×];tíеC×;÷žPxBá…gžQxFá…gžQxFá…gžQxFá…gžQxFá…gžQxFá…gžQxFá…g~il\¿bûS²ðýãy™ßnùÉù1‡piÜ ™—oo£ß#üþ÷úûú×úûƒà÷ ¿ü~Yßåzüþïgñ¼¼¼¼¼¼¼¼¼¼ ¼ ¼ ¼ ¼ ¼ ¼ ¼ ¼ ¼üà½MM?ç˲@”FÄF‚F™«ï ÆÆcX¢7Bo„Þ½z#ôÆwŒÁ†Å†ÇÆ“ Aè ŒÞ!¦œ…¹ñíÙ`ƒ ñŽGÜy¾/ý): t@è€Ñ£FŒ˜¯×—lVŠxlÝ®¾ýù‚ ¸*ù6â‘Lxd‚*¾x#ôFèС7BoŒÞ½1zcôÆèÑ›ùöþGéhþ](áß þáßùñï·³=‡´¤£4 w43„B #¦Ô¹·@:"鈤#’ŽH:"鈤#’ŽH:!鄤’NH:!鄤’NH:­¤„òÊK(/¡¼„òÊK(/¡¼KÃAc`ÄFŒ`ÄFŒ`ÄFŒ`ÄFŒ`ÄFŒ`Â&Œ`Â&Œ`Â&Œ`Â&Œ` ŒY`Ìc³À˜Æ,0f1 ŒY¸7:ð4ÖØFŒmÄØFŒmÄØFŒmÄØFŒmÄØFŒmÄØFŒmÄØ&ŒmÂØ&ŒmÂØ&ŒmÂØ&ŒmÂØ&ŒmÂØ&ŒmÂáüç'®+N\Wœ¸®8q]qâºâLÞFô6¢·½èmDoz›ÐÛ„Þ&ô6¡·éŠcûŠsÈç+Î!WœC®8‡ì¼Á8E×#ºÑõˆ®Gt=¢ë]OèzB׺žÐõ„®7LWYWÎWÎWÎWÎWÎW´;× Í`` 鈤#’ŽH:"鈤#’ŽH:"鄤’NH:!鄤’nDœtZIs 4ý¹þןÓg2VZ h5àÕ€Wþ4xÜm}ý#6à`1c4c4£×\Û|þûúÓ|<ÍÃð¨G±ÁØXÌÍÍÍÍÍCúÞxœÁØ`l,fÍš94óhæÑÌ£Y@³€f›#D<’ðH×f³Gƒ±±˜43h¶9Bx„У£Yn<ÿ¸ü|»ÞRžÿ˜·ñúúüÃ<ž‘|>O1CÏ<ø!våI‡L¿‡^1|ÿÒYU—ºrõ°; ÂÇ <ºÐ•K <`½áÂ)²íÊuHGÌ]«-ü^Ôwhõü½ÂßXà$K×¥Þ„!¹›tT‘n…“&U¤ÛÁ%é¨"Ý.IGé®IGéX‘® }b©+gDéV8kÒqEº\’Ž+Òíà’t\‘àšt\‘ÎŒoïÒ€õ½ñcj XRàܳsƒ±“–eøm¾È‰³©‘8óí¿üK#ø/%x^¾ÀY„çãÕà ü¦üñ²‡S>g“KÖt塱ª¼§ÛÉ1ðcºÐà,ÃMèÉÆ!qWUªÊá_Áo”—àõà7Ê ðFð«òÓüÇñSÑïºØ•…S¾ÀI…Hð +ÖH¨Bð ɯÉÌõËôjÊî5¥‹U¬¸XqÅja¼ÆK…ñR/ÆKa¼¨ƒñûÓt©Ñ[óXú³ ÂûäÖÁ(ÁcOɹû I8+pßG}Wžô‹ð›\Gø—Fð%x=øÀ¼üf0~z ÆüKŒƒ:š8©ðã ^!ábÅ UH^!ùU#Ùœ¨??®ÇR§wLzL¼ÙD]5d¸Í QW6̨«† §”’”:ü–ë^±XÉ¡È]ܨ½ÀYƒSþ«ßœµ?_ÞMÙV¥÷änE¢U'·=¹ÃYƒSþ«ßôäýòÓ”=ajO+­:¾éÉg Nø¯|Ó“§ï“)ÛÖÔž,V$Zu"|ӓΜ*ð_5ø¦'—·GOò/µ'‹‰Vßôd³§ üW +ù3×ÿtÛ ƒÈæÙw›o>75à$ZueS”²² ì†|ê26ZÕï^#a±‹ÎR(åz´7ßÞ ‰±&וt 8‰V]Ù)¦tQ`7Ä©·œ¬cÕï^#a±‹Ž‡~ÁshÀÍ7c1†Èýà(,·e–ýo 8‰V]Ù>§tQb†”ÓãC ªß=¼FÂIgÙô‘‡x¯Þ¹ÚE"é<úb¾ êʞ˜D«®ì)Tº(°w!_F'?Øûu0‚×HX$áÁõlÙ ¾Ï]igJ=¶ÌCÄ 8‰V…]›HHœ£é»hËšó±BMï=íáÿ/vÙSp}Ì_teÉ’ÙW8WbaŒßKÃ!ÿ1]ÙÜÛ€“hÕ•Í«ŠÀMv:¯‘p›¤£;£kÀ¹bÅm’:< óçÓ“a.kYÒ¦1?3™Þ¥™º²·X9 œ$p4¶ØPY iÀI´êÊffE`‰ÝæI4Ž!¨~÷ð ‹$&…ÞØ@«B|ÄSzÉø4¨p+ÃçŠÃ¸²ÌLƒ_àŸ»ñ“x`çŠ+ÒHjp>E’C‰²Þ˜Ä\ºp­ {ÔºåAjz’Qýîá5ÖHzÏäîu%×»˜$¸ï)ä²`N÷â¢'Ѫ°'­‹";÷ÎPô¤úÝÃk$¬äÙj ö®7‰c1/«ÃÈwåm”œD«®¼,¡tQf瞢ޫ~÷ð +$ù4lt¾Ï]dY¡\¶sŒE!nÀI´*ì¬u‘•É.ŸA–T¿{x„“»Œ¥4๋FŽqpl“+ ™œD«Ân´.¥tÉ2«~÷ð +$¹$yªv x;΃4 É…¸'Ѫ°³ÖE‰‡žò"gœêw¯‘°LbrACÃ:Ê*]”¦1N=‡|•»Ž²Ð€“hU؃ÖE‰¨§(êw¯‘°LÒ¥\,øa UÙ5á5–I•ÞÅS•Ýlp­ »VšÍ§*»&¼F ɾ²Ó»xª²›¹'Ѫ°k¥Ù|ª²kÂk$,“*;½‹§*»94à$Zv­4›OUvMx„e’Ce§wñTe7ÇœD«Â®UMó©Ê® ¯‘°Lr¨ìt’SUÓüµçŠ·I¸NrªjšŸp®X±F²«šf­jrâšz"Ïá±#[5à$ZuåË*JEö¿ ,ù(Áñµ çûÍüý{w_ò Y‚ã[V_ò‚}ýjùÄ]'¾D°…oÞ}6vÙ%±}ãþ~ÄÜ?˜p„ã»ÏÆç™¾“Þ¸÷&’ÇwŸmLCyaº¢¢dÒmÞ}ÎúäØïöoÜç†ÇÇÃÍœ„ÄùÇÆØmâ\–^‚ïG†ºã«™Ÿ'Á·‰Ë ØýÔ®$n ß%.”Ïìg­ß$îóÕéãûþÞÞ?mq„câÜàCoè(Ý!qÁßíß÷¿%.ÄòÆ}³¸ôxe~›8o¼—à»Ä™ºãÛ©ù€¿…ïî‰ãJâ¶ðmâyÓí¿6°$î1ÞwðmâRùÖÁ.qžœß$ŽìP>V°Iœ5é(Ý>q9ö¾O\ž…‚ ØQ* ¦Êû` |›8Z^“&AçÜ~ÿðå>?Ò$ȉ]”Ø·ùÉ£ÚH“ Í×üN„c~L–‰z—’¼x˜õC 8懽¿Ï6ûIð{8ÂwùacóŒú—£:#g“8#l¢ßåÇ›$ÎudàZ~蘃ľÏÏ}`Ñ1?Ždø6?ËV>:æÇ$·ù ÷­ÙtÈ>à‡ü8vö1üFuâ3Ñ‘0ñ݈|ŸŸ¥X>æg°G¸–Ÿí”¶$h0û>?d¥)ͺäßäÇ'øN 懓g¾ÍÝ7£ò!?ðN|#L|Ûüä‘A놿Åj[,»þv߆h_Ëå2šÛß=\ØUø9AÝ?Ó«•"ûíaRŒ‘¾ Ù±¯pÒØ©ÂÎ {¾R‘=ïWÕû g+ì·„"ûí¦Ðr»d³4|¹m ë§Ÿ \Ø­xJy‰R®g¬v?ñíØW8iì åEvs{ýÏ»Ãvì+œ5ö†òQ:çïO0ƒ ü:À…]§”—ØóI—Ë‘C'ÇpÒØÊ‹ìþvœ“ïäOÑÎ{Uùë_xé·ÎCrâ•c®åH„o&}–bìþ!pEù§û½sâå¥G9´ƒo—œå½gª°só±ïÉ8±†·ùÚO„oÙýšâ ûmË©”÷ÐS.§HÙ±*À—¯É«…èºHÙHDt€ïVB¶¹ØuBH‘óŸuǪ¼ëm0žå ¯nx]«41xªp-xªÏJð·Wã`¼¼‘¶Ã}¸k #Ï•à®Ï•àoûpåé"×±¼î±Û㊧9uÚ¬G·^þ¬ðý×ì’÷>×/nD8Ö_>—I¸~!RáX¹;Ö__¸¿Çð]ý• xs/¯?¿ñ ’Üj³u²|ÎçqyŽ*ʯðÆ9/+pMyª(¿ƒKÊSEù\Rž*Ê\Sž$åíº¯[R>“°70`6`Í©++pMy®(¿ƒKÊsEù\Rž+Ê\Sž%å×Çòň5Þ–oô•ËÀ}I\àÂÆùµ0;¦ä_>«K–‹GGƒÒþV¾p.pÒb¤JŒ—b\Ï`–KL?Dgâþrz_^8k1r%F€K1®¹–.LºïÓ,ßÝU/ \xàT®æÚk¹c´½³QøÎÜ1×s~;×síµ\‹1} ÆEn]J8k16r0×^˵xÑÁ¦Od\ó‚«À…—Nå:b®ƒ–k)FºMpù¢Ðµ.Ë œ´¹Ž˜ë åZ¼p }$›œi]¼8k16r1×AÌõí ¹bL6ødå.Pˆ§ß¬[Œµ.ò~¼cçÉê–~(w¼wp\=)sð¡nYŽE¾ùþ1-ŸÙÖ-¦¿Ç~ ~ÿD"¿ìþ^>¶®OJŘÌòÕ)®(¿ÂO×-¨<À5å¹¢ü.)ÏåwpIy®(pMy–”_Ïù¯rMn0ß#ýÒ߯±x^ó95w|Ź#igÇW¹&ˆ>€æpc!ÇH¹è {8k16掯8w$MÇg)ÆÔ“g—ÖkžgMˆçsÇËëŸkYê9ÿ=À—ÿ b½ ÎWêËÇ–ÿ,b-ÜóòQž‡¬ðÛ³ïý¦q¹ê0¤åçY™7‰Ø(ï>¡ÀÏ'F¯Öw€k}çJß®õ¥¾¯õÁ .ð/¿½À¿àOÛ=/ëUá Ž²—ße/8Êd.V¬‘4†É ™äö–\–†¯c'¾Å…r]~ë¦Ìçí¢p€o'úeB>Þ”ù|fšDø¸…{:Ü”y<ÒáÓ¾<ÒÞþ¯÷‹T!øÝDoC¾ÀLâ9´9 .Ê“NÆ”Í]Šò+üdq³UàšòTQ~—”§Šò;¸¤¯[…ñöN³·ÙfâÖ,ZNzÁ~Ï^9…ŒiàEöCä~!³^XB>`§®F™?ï4ÞÀ;¿0!OÈò åCîêXx¡¼ ¥ØƒþźÆ;¿0±Ä-×™ìqZx­|ä>1 KîÆ¹«Á/‡õ;Ë÷ÃqùίX€YÜè¸ÁÞùq2,¼P>~ËÇôsÇ©ò“…‘;”‡|ä;s+0ܹ³b± ŽyO!ÁÕ>Iîm>hoóq¸·ù8×Û|œëm>Îõ6çz›ÚÛàáÞæƒö6‡{›s½ÍÇ¹Þæã\oóq®·ù ½ îm>hoóq¸·ù8×Û|œëm>Îõ6çz›ÚÛàÑÞæ›°78:¿ïnä¶b^äçeáàô$+bè0fk³oà±y¿uœ4“ÓõS…õ²yã!W¦3¡r–…ÓæE\øêœ3±pÚ¼“dŽõžÍ{k½>XL¤[ÚR)hÚģÊöY|þ$ñ{C]<ó Ëâ™Ã“ 9Vk]jŸö{J?¥k/ ëeûà˜®‰*ÚBŸ8³ð¢}¦Ç½•ÍšŠ?z^¶ÏãÒôæ{ÊÀ}iáMûXÌ«ßøêbá¦ýAÕ>K^>øÆßPûž‡BØ´Oèu¡KíÓìYpùøÂ·…•7yï˜ÑΞ­{Õ>.×P´Oˆ~`áÅYÅñ±nZïݹÛ^·Z“n¾¹}ßüǯ¯·ýÝÛxò!Œ©÷Î9v=Õ¡¤<›Jðæs¥{uØÃñ¾U¥ö#J©J òõ¼#W‘­ ÷ÅáHàlM¸OvyäÉ×C·$0K£"p8†f@ák‚Å>Þ§¨/X-ÆÈ×\#Sœ_O¦¹Ú£ž|&8èr!¶y´ËãmTŒd8êNÿÏÚe¿Ãü… ¥íðUü‹¿é,Áuòÿˆwæúå1¡‰ðzàåÕžcÞ\,¿P?°pºdfú#›>…aÜÎ,œÞV&¬üa‘?a ¯¾èŠ£ÑØ¤O釽áþ¯³õi4(Ò•ðJ:ãáÂ]«0¦ëù*x)Ý”NVÒaºà»„—ÒŸÿŒaŽÚÂ[éžä[éyLðö¦Ù0îã$éJx-]>õ_I—ÎW•ðJ:»°{#Yx)öŽì iáŒtòŒt‰ü6þ&Óødøœ^¼…Ï5ßÞËR_†tÃÃ6NürX?údd’ŒLÔÈÄ1ÛH®³ÝFî:Û;¼Üëö g‚ƒŽ Žx ï(y'‘wyGÉ;‰¼“È;JÞIäDÞSò^"ïù±7ÁA‚ƒÇG Ž Ül@Ž7n`òÒsã 8&8JpTà½l[ ŽPa9‚Â1ÃQáˆG_‡†ôÒ†Ä #,GÔuäocÖ½K÷ PÚ} 8Ãc©Ï÷ßt¦b½á[qi­3:iEžãe˜f4Ž Ê #,GP8f8*QÔ§ýãY…#FXލë¸ô´"ñŽ{V7×ð¶aœìëV\ºZqéiE#FXŽ/ZqéjÅ¥§ŽXa9¾hÅ·ã­8-s o[ÑîòûÇ_t`¼­áÀ”J¯QIÕVL¡0Âr…c†£ÂEµVL±0ÂrDUG;ñëYKìÎ=ÓŠ 飷¯Z1Ôï)ð£7anÅ[ÇÁZ3¦¯:$ë’u`¬çl†’oJ¥ÎŽçÃlѦÅ8‰c†£ÄŽXTQâšÁö´"5…ISºñ*Á«VŒ‡+‡©G[Ñö´¢`=ÃA²Œõtg[A¾)•›Áö´¢À1ÃQ∠G,ª(q4Ûü“ºâ±ûöí¿ß„fØá ÁAc‚£Gn¶ÅˆËÉy“÷í]xÆ<ÁA‚ƒÇG Ž <ºœü“'ÿmû%‘º¤ú“'/Á1ÁQ‚£ä=u›ÿ0 ùl‹6ðû ºµ¢# …{)Œ€b„À#˜J¡d#® õ%¿WA®¿WáfÄ ¿1’\dæÀÅ+F0•BÉ*F\5â„¢Á˜iÜÏ®o¶e†ß—)ÊRtaм}½1FœYLÊ*ëWèêðÞºG¨ˆe—Ëu_Þºu3ÎÓkëS¶^u1aÇ®'S‡gÞúæê(}üÔ›7&ïµç¢?>$kx»lLü‘ç?‹7¥ŸZ8HAáHà G”8Ư¦i~ÝŠsnE–#* \á—ßϵµÛz˜'¶§gAx»ÊNÛÚkk'¶õƒ#( \áˆÇî¶vb[óÄw$‰#+ãnʶöçÚÚÓ¶öR[ûsmíϵµ§mí¥¶öçÚÚŸkkOÛÚ m &7V5à’)X9/ÌÌÁ«c?ý¦Þîá\èRn,–#(K8ËŽ®pÄT %ލp,á,GT8¸Â1î…‰u¬D –‡ÿb\¥ÝÌ¢­ˆb3<¬ƒb½†3ÖA±Ž Ž’uT¬×pÆ:*ÖãF^–®v‚tÅ‹xÀ+ÃÛ 7*0¿X#ê¯ WŒ`*…’õ€W†ëF¼lÄu¡=xq~Ï÷Î8[“Þn.W †ôAB†3éwåP½ª“àÜñAN îç÷¯æ¿÷¯¢G„ÿaÒþïÿýVÿB9ÃA­ÔúÊÈZæêW—BRj{ed£F†Å+q3žÅ}žë*³€xÂÓ¤ ›¼ø: ¦ γ¿T_'¥Z8ɾ@è7'c]l§Z8Éz¾`ü¨t—:Ž÷yïÓÍžó™/Æ ó2:g›9T}6áïæ¼‘ÎÌC<¾ûxœU‘.ÃA’é(\é(\é(\é•ÎÌ÷'Ó—ûv*Òe8JÒ¡"… Ò¡"… Ò¡"… Ò¡"]Ì»ö9L|±÷Oã‰Ïù€°Š/Mú:!O?´p’éf3N³­SíxwÚ4~ná9ç‰Òù)^±V'ÑA¹%°Oz· c}Kð/æþiíóÛÚ(]‚ÛøJ¦Ç?¬t6¸àlöçÏ$é2üÇô ¤E: ¤E: ¤E:䥛Æ009ë÷+Ý%é2üÇô ¤CE: ¤CE: ¤CEº¸¬Í 9ñCfãî'Åï«¬Š“1}/õeâÃq_Žé=c:äì)ž§¡;$`ëR¶Z“ÿÚÑ[ÌNËÖ}ï,ÞW @©{†ƒTw}¸èn…ºS¸PwPêŽ|ÝCÐØÁ.f¿#F[“'#!Ww}$è …ºS¸PwTê×䙺/Ó€n|¼tÿðyyIŸú<öyìòy”|ž&žu)[m(0>ÏÕ݆VwÆ.˜|^Þ >‡}»|%Ÿ§™#WwPêŽ|Ý/S|ë]öyyCú<öyìòy”|ž¦~\ÝQ©»ùŽäÞð?Ü>”æ´Ø•|ažUïÉò&Òä«)µ{s¢õeXÐÙqjáë•–Â8DλÏcžO,éæ\ß ¸ŸãE‚»s!¹ZˆUHwmìÊž…(\P…(\P…(\VS)”Ò»ÒA! BE! BE! W}ˆû¼âå¦~œÓ­Ð»îðx½hYê BÚíM?|\|£Æ×ð‡Õ¥’Ù,Ýä–¼ï–ákŸãÓDÙ‡lš¡0à°…oWJ>Þ특8…Œîßšä\Vèƒe…è–² K ¡¢… ¡¢…k y.™™Í°z›Ö(¼”Ìx6™‰Cšñ™æÓðÛháAGb$Væ&Aºæ‡¾Rø—i0#¸]:òC¼t?Ý,Ià[‚1æ¤ñ¢ï]:?£_à瑟ØM¡ä£t³ð‘n‚ÿ¡t¤Û4k»Í-|-àåÚî< k»¾x½¶›~¨—Åœ>ouÿ)LÒ–åÖÏ–à¾ÎØÁ^¿ô0ÎÅ+ÚÅç<Þ`g¾l 'ŒÖs׎«Ìñ o?Œ(8nç8n7™ã^~WÑp||õçm}íhë«ÜÖWéë§ý›×í¿ô»«e™Gú]Ó9òkùU&ÿ„·ß½dò«B~;G~ë ¿ÉäŸðò{š’ü&¡‹˜†1Þµ±ßš%‘ÏpȃÒE¸ÒE€ÐEà¸vp\eŽO¸ÒE€ÐEà¸upÜdŽO¸ÒE€ÐEiëkG[_å¶¾J_üퟜ‹]]Ä'è ¿ÊäŸp©‹¥‹¡‹8âä7™ü.u t(t8ŒË݈CÉg8JäQé"\é"Pè"p\;8®2Ç'\é"Pè"pÜ:8n2Ç'\é"Pè"Ž´õµ£­¯r[_/þ+×ýp±‹@¡‹8âäW™ü.u¨t(tG¼£ƒü&“Â¥.•.âþ½-;úMv±3´S ¸ý»ƒú $v²é_%ÑšhH›´_a=Çqíà('@ ™ãvŽãÖÁQN4€&2G~ÑßÖ׎¶¾ÊmM 8œhÀzŽüÚA^N4€&p8Ñ€íù­ƒ¼œhM4àp¢ü,qôéz(‰|†ƒDþE¢4ÑÎ2ð]ÄŽkG9ÑšhÈ·s·Žr¢4Ñ9ò³ˆþ¶¾v´õUnk’hÀáDÖsä×òr¢4рÉlçÈoäåDh¢‡ ¶‹€ar~ôÌÅŸù G‰ü‹Dh¢!ùỈ׎r¢4Ñ9nç8nåDh¢!s予#m}íhë«ÜÖ$рÉÛEq‚òr¢4рÉÛEñŽòr¢4рÉr]„ ™}\îÛN–ôàz†·wÃÅ ¼N4&ò'Yë9ŽkG9Ñ@šhÈ·s·Žr¢4Ñ9r]Ä‘¶¾v´õUnk’hàáD×sä×òr¢4ÑÀÉnçÈoäåDi¢‡ ä×"À˜Ç¾.(ä3$ò/ ¤‰†üéázŽãÚÁQN4&2ÇíÇ­ƒ£œh M4dŽüZD[_;Úú*·5I4ðp¢ë9òky9Ñ@šhàáD·sä·òr¢4ÑÀÉòkfšýÄO2ù G‰ü‹Di¢!b»žã¸vp” ¤‰†Ìq;Çqëà('H ™#¿ÑßÖ׎¶¾ÊmM <œhàzŽüÚA^N4&x8ÑÀíù­ƒ¼œh M4ðh¢ñÉmz è`±æÒ\ìý%®±W&>'È×ø5é;7‡QOztJù”|=Çqíà¸ÊI¢¡pÜÎqÜ:8n2G’h(™.âP[_;Úú*·uN4>úä6=9AùU&OÏÃG§>¹MÏCÞÑA~“É“DãóðÑ)¶‹0sèÄìb§Ksû~A>ÃA"¯'Ÿôè”rÂzŽãÚÁq•9’DCá¸ã¸upÜdŽ$ÑP82]Ä¡¶¾v´õUnëœh|>:Åv‡œ ƒü*“'‰Æçá£SlqÈ;:Èo2y’h|>:Åw0LÞMžy"£ Ÿá|>qá¯Æ¥u¬ç¬ç¢ñ {gna};g='mô^šËtë\ÀQþzg÷þºáÖº>»çãòHûdŽ+ËqU9&¸2‰çÃïH+fŽËqS9&¸2W7¿âg:?· ‘÷Ï~SÃeÅE*ÍìÑLë9ëy¹Ÿ²âÆúvÎz^Èg£Œ^ãÂYç×ßú•¿^Ä ò¥º©F´®OƒÀç8æ•x6ÊŠëp8ïHW…ãvŽc^pg£¬¸s‡ó¡ÄQžîòQ¿îœ§Ûµ¼‚c†ƒe DQvÀz^1g£ ”(!ÊXÏkál”e DÙå¯qŽy©.5­ësL>ÊŽ´O渲W•c‚+SI>ÊŽ´b渱7•c‚+3F>ÊBFŒ38Ó.‡3\Ÿ1*w@­ç¬÷ÌëÛ9ë=3FÅ:"¥_ùŽãKëúŒ‘²#íÓ1cÔ¼£cÆÈGÙ‘Vì˜1j>Ô1cö¤™ܸ<>‘#éçûïdz4ó K ¥>Þ~ì6´x¶nþ²€Kèd8x¤ÃdgödÂý‡Î>7Ñ·†qvÓBà빺¯çêÎOwƒ {‚z@ãmCž¥¤g ã´xò|ɹºoçêÎN¶xBÃ|é9€u³ÃÎ>ôÑÎ߆¼½ÂÖíèïwŽ€R÷ ©î¨Ô½„³>ŠÏ¸äó ø<ˆ>ß]÷õ\ÝùÉgòyP|žÀ%ŸÅçAôùîºoçêÎN}³Ïƒâó.ù<(>¢Ï£·›n•ºg8juo½™ƒ·®}yý`P‚‹®¢kwWqí¨bã´¼õàËëG\ô`=¸»Š[Gßäà­£^ô‡— ¸è¨÷ç™Ø*œqÞ¦·¿vîñ›Ÿ| ”ÚüQJœjppÖQ_=•àÚ¼×sU\;ª(8j gõÕV ®M/p;WÅ­£Š‚£–pÖQúÔk³ÖQ/ƒ›¼I9´TÅ ©Š 8j gõÕC` ®MXG=Pŵ£Š‚£–pÖQ_=V–àÚœ€uÔUÜ:ª(8j g^¼—àÚÐ/8ê´žæg.U1ÃQªâ‹¡»†~å͸ž¡_pÔî*®U”‡~ìú•wíz†~ÁQ»«¸uTQú±kèWÞÞëúÑôl?¡tx MÏþ‘ïÙRà=;8=peMÏŒ¦PÇ šž=MÇŽ=4=› (BAÓ³‹¡À{¶!xÏ>B\ÙG@Ó³ )Ô±€¦g%_Ó±c%»o ´õ]§/xÏb¸ïYÍî+«ÙØu€AS¨c9»N h:¾\OŽ·þvŵ|ãqW\Ë𮸖á]qÝ×âÚvŵ¢PO\Û®¸Vtì‰kÛ×òÝÍ]q-ûâZ†wÅu\‹kÛ׊B=qm»âZÑñe\Ç›˜™$b2ÃbG0û¥L?ÞȈ_14ðÖUè=ÝÊ%Öë9ë’§Ñ—£ëÛ9ë’£Ò‡§ëÌnì!å?ÏÊ__[¯üüî Ž |Ž£&¹}TŽl˜4·s¥(Ë­¨rd£¬â8üÉ"‹ó¾¾K¯>+9îp=Ê”ûÎÉ×|?ËÖRj=DZ'Žäk¾Ÿ«Èq;DZ'bŽäk¾Ÿ›È‘?ËÔßÖq­µµ×=NpŽ|OÀkN |wœ#ßÓhÞ¡ô/Ü&ÞZÿj‘„:Ä3à8a~ÖÜÒï锋ù_-¥Ð†cŒ³ Š‘W .T`Æ9 Ü¿ÿ*©än\¸"¤úÊYK%Wm„lk+F^å6•\µ²¬ÜåÿjJ_Ëå zÛÀ¹0ÕWžø×rUFÈÙŠ‘WéA-We„|RÍùõs{ýõ}»=ÿ¹z+ÖÀ€ µúµI&·°pºyŠñ#à ÿúÜÞTpš¼›avóE‚£„o÷ê÷ÿ¬µÃþø4:ÇÃ Ž ¸ wä‡i²,|ýßl&7€I?,DÓyØ?Œ®áÄÈl2üžݰ·q ÿE«Ó°øô©Õ„L<)†ütpàNûÏ×…^Î[ïgþ¿»»Îƒ ³‹ûY×øÃõß}b1ãÿ.ÿiþ¢üãiµøÃÞ§,¡ÉÃ?[¾×\'“ò)üiï9ø³u‰OðãÚ¼øÃ?EþvÓ×Qé Î(½<ÙVH·Ü§\“aáOéÐ/Ãx¯âó‡$]PÞM\ÝH7s ߥ{öŽ'¿Kɉ»Ïë€H7… |ˆÂÁ‹À00>úùFº0FµK¤ož í?ìÒ… f¿,<|—.Ì;“Ó"•.L }|­8ø.ðP÷i‡'¯›'¡îH¥ ¥ ëYºPmÖç‘xŒæéÚû…t6¤ÓÒû‚õ9â/ÛT/ħðùÿùû÷õ[Ì&ÿúçŠlßï¥ùX¯?¿þ}×|tÓÓ}B©ßŸ¤t•Â\j_ðÞÇ¥ÌvûÏßëR)pþÑ•¼¾ÿóùmûI;MošRЖšÛRØUêañ–,¥ÓÆ"SªT"”úñ¶Ã`í»JaW©¨ý·¬}p<ëØúýëÚñ·~ûì(õùþ»PâÞ4¥Þ~öÃ8ŽìßzÿxUê±wýÿ.z)ì,7}^—Š+Å/Km®,‹ÅRïÓ:†¹Ûã¥IºDQ—‚ªÔ#­ªKaSê” Z*­}Ô—êo-¬Åº²]Q꾎ÂXt+LV‹RûÒKù·êR{ºX²oKÖ¢)JÝ—q‹¦þ[ÀY¬K=&ÕµE,JíëCµE¬ëÈZ¬KÃY,Úñ±ÖÄX¬Z;æÇŒÅÚ'3ÿÚbÕÚÏE¬Úbí0sëR³ì'~Á[Uj¸d-£–)u¿›½;~Á¿…^aä0M)¨Kµ&ߌu©Ñ3´oÙWÓr^«×­ñhËèÕ”z$WµESG-rÍë¨Å¶ÔƒWm±ôœ}i±¶Øô9œ6¥Œç,–žc‹µ]X‹M©‰³øoUj°õœ¦Ô40žÃ”b<ÇŽ,¯ªŽm)®7iK13«Öf_%‹´µÅ¦gZ8‹u)Çùª-Ç´û‚/c±ö ÇùjSŠ›¯†Ü»ž+ɵE¾gª-ºÆ'lÛÙ¦g™þ«-ÕöLææªvtS꯽ÔbCÊ×ú*-Òa¾ÒR#¥Ì6V3˜¸]ÔXlJÅ%îÆbSÊXdæ¾£«Ç4ÛŽM)tÓÐÎøêRÓc¶]ÕqñeŸ3Ù…±X—r/¬,V¥`œGÎbé83 êR“ŸÎbU <—Í}-û{?XœÛܪ*5 è¡Í­ªR—à<ÀXZ*L`À9ÆbY*dñËÄXÌ¥0¾i½››¨ýþµì™Lø[mÏRór¶wo[^U©À‹™}7SÙŽƒ}k *µÜ¿Õ­,ö”ºÔ}a±ˆìØQ[,K…)¦aZ»*סͤÑTÚÏ÷ª3ÃŽRØû·lå…ãh¹,“›ü±.…L ÙfÎtŸ)T¼l͹Œ•/õýúííööÿÏÿ wRt¼ŽDyLP-1.10.4/Data/Netlib/share2b.mps.gz0000644000175200017520000000641510430174061015631 0ustar coincoin‹ÈK®9share2b.mpsœÍŽ9„ïøô](2ù{ôî˜ÃŒðìbßÿMVÒº«‚Y­ö¥`éë,†’d³Ôß¿þùívüüýû×ßâ?¾üöã¯ÿþýå·Û÷Ûmþܯÿøyà:Ãuë × ®ûyàw†×ñ~ýíçµÁÿCÜqÄ 7@Üq#Ä7BÜq#Ä7BÜq#Ä× ®A\ƒ¸q âÄ5ˆk× ®AÜqÄM7AÜqÄM7AÜqÄÍ7CÜ q3ÄÍ7CÜ q3ÄÍ7CÜq Ä-·@Üq Ä-·@Üq Ä­·BÜáâVˆ[!n…¸âVˆ[!nƒ¸-œcl0Þfpà:ÃukˆÛ nƒ¸âvo‡ñvo‡ñvo‡ñvˆÛÛy?ý÷ŸýñŸ?¿?¥ûÏ}õ¸ÿ{^=óî†?%oŸ/äá…[Ø(^†7}„¯þŠ7|O¯[ú|¡/ô­3<ìø®f[ý|! Á[¦ÑƒM†…ByË\¡í™ÝW|PècëeE¡Hº$mT¡Ö¶ÀðQ¡Ú…ÒEŠ_º}Îü‰t&¤»mŽýc«âCv´ºu>ö8d‡‰±§­ð±ï[¡¸ûlf$1ö$Óæ¹^qŸ6u%m’œXLº°ï›1|îΫ‚›X½ÑèRºÖ&Òe!]Ò…Hq'‘uÏ¥ôŠÒ•ýH›1ëj¤Ë<ëJYwÇÅeÖ•‰tå¸ù}Tè™Îl*Ž{»Ò4SÜ Ü:OÇ4ŒýÄÇE¿œÒùužânZ—cµ™®óîÂZ¥À… lCvT%ð^…À±S¼ªUá2ß)~™ür¾3ü:ùW®R`œ½Mn·M$[¦¸Ó±D%]£xs)˜ynŽÛmÉ~¦à˜›ß¼žüU w™›oð~s»2ÏŽˆ©}âcv@)¢¾y üæ?ìüÜÓøkžÝÍg^¡i¸xãÒ=æ Å»•îÖ9î¤ë»î® ÅM(ßfÊG©|åøÇÛdò›É y%È7]oF(è•™ y Wf&èš qef‚63€Gef¢63ˆÛdˆQ(tš§Ð–+ÅßR(R…ÐÌmfÊÌDmfÃÌDðÊÌ·åìâ—ý‡¦M«CvœøÅòpQ˜ÀãÅò¬¤Í—ÙüIB¡ “+DŠ«º=èºqU·]·UÝuÝŽøu{Ó±»ä \Ó¸U†_6¡il÷v¼SM똛Yäf8ç嘛û›ùÆ×·z¬ ÓÜ<ðÒ'ï*rákBºT(îËʺ²ð±5œeeÐe%àQ••Q—•ˆ¿QVÆ…²Ò-ç†Ñ¡.ìN ºr=ðÄp—á».n¢*+QhB e%àA••A—•ˆ«²r”îÖ:Þý»¨t·ûvÀðQºÇ»¸tXV".Ëʼ¢|ëné92([ÆyYÒ7ê ˆ«‚$êy‰¸/ÙŽä2ZÀm÷ÇŸ/Wñ5ŠÛdˆQ(Ôô ÁÖ€¸[¹š­(¹B÷ D¡Ç#ÅG…êY›/HÅåÊÕ&Ò™.ž%õe¿¤øeó¤Ò=öKŠ_6O&Ýs¿d¸]6O&Ýs¿¤¸”®O¤K\º[Ž“®WŠ¿5/“ȺóèÞI×7ݼ•*<ëú |z)]Ý'Òe‘uAMX,ƒWepÔe0âª Žº ÜTlº F\J&Ò•—§«NÓ²E†Gu|õñ5âêøÚmyëïn3)<óuîróÜ‹¦ÛÄ;àP}Ùˆº?ø{×_8 ÉU…ÀE l7Õ˜ \¥À¸cµ—F.^ú —æ xXvÛM®®ªÐéWýÓýÀMõ¦x›íéýW΃À] \š¸P|Iàç–EñË9ßìÇ©‹ ¶-®|à“s. û¯ \Pà÷'%p.W®x±Ð÷k0øn…"Ã/Û‚À'>ñÓ¶à§]œ¤‘ñ)Ÿ¤s(ò!¸öÓ6iÓTšƒŸ<*?µŸF\ùé¨Û4ˆ«6é6 à¦Ú4fº¨<Š£ˆIÅV:(³è+”–TÙqËK¸*ûM—ýˆ+;nÚŽž”OÚŽ#n“!F¡ÐiÇM?†xQÓo¦Pä 7mÇOÊŽ'mÇÃŽ'°¤ÊŽ{éöNq_cV*Ý]ÒHqeÇMÛqÀ“²ãIÛqÄß°ã ,©²ã^ºnk^&‘u§7mÇOÊŽ'mÇÃŽ'ÙZ9-iO ¸8d‘Ž)S\µýL{JÄ•§LÚSž”§œ®uyÁò$iÚÏ‚ÑtÁ¸8)‹Q\Uä¦ FÄUÁ˜tÁxRãTà²P0&0®ê@Éôâê@Éôâê@ÉôàI(%} „øJiÁŽ›v‹€›r‹¦Ý"âK¹9ºEÄ•[LÚ-ž”[œæf[p‹iÁ̘ov†›o&6ı·xòÍÁcúi3“¤™9ª0mf7efL›Ä•™1ÝD\5“nžTs0éæ â²9X&ÊG©|{Ý[¼©zfl:Þ¶z*Ÿ¡Òw“¿c×ÑWÑ“®¦oÎ9?Ì÷»{£xÞݾöYç0ÐxŒ¸M†…Bg×}:Äȇß܇Ø<ø8DXør.q¹gÄÉØMŽ=ѱߧ{¢xsÇÌ‘ý~ó;žÇ™ÑŽCÔœtFq9öÙçžøØ¸ín÷Íæº’6IÎ –6σéÄð¬“Éþ1™Jq)]šH—EÚÄc7ðiS2޳/jÊT†g_;>û¸ûlE,"mÎ Õ§M­÷Õ”­¤MáÒÕóHf”în’Ã/i¹teXPËkéÊDº*W%]ˆWÅ}ÒÅ=⪸Oº¸<«â>ëâq)]H×^:ûä{m‘á^ཉý}û‰{ƒZÅ2Å»Xë\:Öa‹ic¥xG¥(ð³ÐIïî]Yì°}c¸ÛnaU˜ Ü¥À‚ î)ùVPaxò­ F‡ø¨¯žƒÂ'uÒ¤”ivܵ§xRî)i÷„¸rOɵ‚øÍ§îßÅ¥ëwÒõ×î qéžt©Q †Wþ%ç%\ù—¬·[Ä}—æ0 ¾J+ /¾Kóù¹—àžÈ·É#WêX§Ðfâo)…Bí\;ºB‚á£BõÜU‹k5tŽ¿QÇpªŽÍþéJqeý²ïËïPšÙâoÔ±,€ÿ¯J›X)þVÚ$.Ýýso\:üàNº,¤»¸™âRº6‘.‹Û­·Fñ"ú$Sé²”.®H—©tOžKgƒtùµte"]Yw;Žâ¼(Ö(®N™GQJÙ:ÅÇJÿ<îó©Ôa9?[ã¼<¿·;]¨ÏÇûä]U$WRóRáoÍË*’+Ñ ï¹&5†_–4ãËy3]&WÛ'co"¹Êy–æwB£¸oÂåéšnWÒå!7—®t¾>pzóZº0‘®¿ô—YûKÀ½À{RÓºP\uŽ/õW£¸olfªéÐ9¼ø³[™Ö}Á_–û“}óÈž}ó¨ðå|ø|N¼øæÑgnmʤyTiv Í#À³²?YÛÄ•ýɺy„¸jÝ<¼¨æQÑöqiêDùøRùIóðV½yTäsx}²ÙÃsxzݬ§Ëé»px]¯\ˆG1ÄnKÑ“px=K‡‡x¯Wéðï“!ŸâÕÌPéÂxîtܬKé(®2ØI×`éA<{H¥{X?ŠWïW¤;Rðê…xÖÅáó1>vhòŒcþ’âÙû@>ö {âÕûÀ•±.çjføØmP>©´9¾Ÿ1M›ô‹ió°~ÏÞÌpéò ]âÒ=|àŠtçÓ`emÆ…!m²’®•nøËLˆ/K)¾$Ý“§xõ>pEº‰ËáYw‹÷ Y[YÎ _Î>ŠRñ ñâ} ŸŠ6$mYZΗs53<¹Ò0/ëMn‹+ó²þjr%8>@<{¨–4£xõ>pEº×m°I¸KÁtø »'ŠGÑ€ôÛÄ0­›,5Õôá_(^¼™á¶ Ê·¥ÜÔ>°¾nò~Ø”À•âÑ7ËDÒÛmgÿ¿YÆk¹qÕî7¾<žFÁÕr»ûDàØ“ô€»jêôîæÑ"^…ìúà³.øÀñsÚ`€÷ | [¹Ð"nÂv÷==ûwQénx6…xõïâÒ}¼_ç¿ÿü;Õ÷‹ŸÿÏžF­ê¯ñÖâEáãbà¸ËSßÞ0Šû/*˜zˆ™ß¼{líþûÇÇÿöoÿãÿºÿ_ÿåããßÿóùoÿÇ¿ÿßÿõ÷ÿû?ý¿ÿçÿöÿüûŸÿùóÿþÿùï¶í¿úý_ÿùÏÙö¿óíÛåö_cû¯¹þM¿xÿ«oÿåë_üÙ?ÿõÏ_öÏÙö¿óíÛåö_cû¯¹^•ÿøËþù¯¾ý—ÿþ¯ÿëßÿÓýwýÇ¿üç¿úö_¶ý×^Ûåö_cû¯¹üWßx}ãõ×7^ßx}ãõ×7žm<Ûx¶ñlãÙÆ³gÏ6žo<ßx¾ñ|ãùÆóçÏ7^l¼Øx±ñbãÅÆ‹/6^n¼Üx¹ñrãåÆË—/7ÞØxcã76ÞØxcã76ÞÜxsãÍ77ÞÜxsãÍ7ñnÝþ¯ÿé¿þ#¿?ÿÑ×ÿ°õ?|ýXÿ#×ÿëlœkùv®ÿ±þmý Úú´õ/hë_ÐÖ¿ ­A[ÿ‚¶þ}ý úúôõ/èë_Ð׿ ¯A_ÿ‚¾þ}ý úúØúØúØúØúØúØúØúØúØúØúøúøúøúøúøúøúøúøúøúøúÄúÄúÄúÄúÄúÄúÄúÄúÄúÄúäúäúäúäúäúäúäúäúäúäúŒõ/ë_0Ö¿`¬ÁXÿ‚±þcý ÆúŒõ/ë_0׿`®Á\ÿ‚¹þsý æúÌå/èëêÒ×Õ¥¯«K_W—¾®.ýÜþ¯õ?æúËxúººôuuéëêÒ×Õ¥¯«K_W—¾®.}]]úººôuuéëêÒ×Õ¥¯«K_W—¾®.}]]úººôuuéëêÒ×Õ¥¯«K_W—¾®.}]]úººôuuéëêÒ×Õ¥¯«K_W—¾®.}]]úººôuuéëêÒ×Õ¥¯«K_W—¾®.}]]úººôuuéëêÒ×Õ¥¯«K_W—¾®.}]]úººôuuéëêÒ×Õ¥¯«K_W—¾®.}]]úººôuuéëêÒ×Õ¥¯«K_W—¾®.}]]úººôuuéëêÒ×Õ¥¯«K_W—¾®.}]]úººôuuéëêÒ×Õ¥¯«‹­«‹­«‹­«‹­«‹­«‹Ûÿµ±þÇ\ÿc­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹­«‹¯«‹¯«‹¯«‹¯«‹¯«‹ŸÛÿµ±þÇ\ÿc¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«‹¯«K¬«K¬«K¬«K¬«K¬«KœÛÿµ±þÇ\ÿcO¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K¬«K®«K®«K®«K®«K®«KžÛÿµ±þÇ\ÿcO®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«K®«ËXW—±®.c]]ƺºŒuuçöm¬ÿ1×ÿXÆ3ÖÕe¬«ËXW—±®.c]]ƺºŒuuëê2ÖÕe¬«ËXW—±®.c]]ƺºŒuuëê2ÖÕe¬«ËXW—±®.c]]ƺºŒuuëê2ÖÕe¬«ËXW—±®.c]]ƺºŒuuëê2ÖÕe¬«ËXW—±®.c]]ƺºŒuuëê2ÖÕe¬«ËXW—±®.c]]ƺºŒuuëê2ÖÕe¬«ËXW—±®.c]]ƺºŒuuëê2ÖÕe¬«ËXW—±®.c]]ƺºŒuuëê2ÖÕe¬«ËXW—±®.c]]ƺºŒuuëê2ÖÕe¬«ËXW—±®.c]]溺Ìuu™ëê2×Õe®«Ë<·ÿkcý¹þÇ2ž¹®.s]]溺Ìuu™ëê2×Õe®«Ë\W—¹®.s]]溺Ìuu™ëê2×Õe®«Ë\W—¹®.s]]溺Ìuu™ëê2×Õe®«Ë\W—¹®.s]]溺Ìuu™ëê2×Õe®«Ë\W—¹®.s]]溺Ìuu™ëê2×Õe®«Ë\W—¹®.s]]溺Ìuu™ëê2×Õe®«Ë\W—¹®.s]]溺Ìuu™ëê2×Õe®«Ë\W—¹®.s]]溺Ìuu™ëê2×Õe®«Ë\W—¹®.s]]溺Ìuu™ëê2×Õe®«Ë\W—¹®.s]]溺Ìuu™Ïêò¿ýÛý¿ÿÛb~÷ÿ÷þûþ/Oòåwàïcýÿü¾ÊÇǤíþãz<¦òïŸv+ÿ´{ÿ«¿qÀJùû_}üMÆ-ØÿÒŽwù?ùíïý«Ž†˜s¢!¶û6ùk¾måï!þþW`ˆ¬üý¯>þ†ñÈûŸ¢Á_qôâígC45D£C´?N&bÀ_1¢8ÄøÙC 1èãÏÏχØñDmWÂ!Þ‹Åö7v8Qý«¿Cì•ò÷¿ú;Qû§Cì'jgC„Õ jÑú¼~ݱ¶ò÷ÿ+0DVþþW'*⟉J‡'jŸÅÖ ·òùý+ô+’ò÷¿ú;QÙÿLT:Ä'jà‰jí÷¿­ü_†øë_¡!’ò÷¿úøP%CÞÙ?¢ãûb^­´Ü8º/¾—¯”¿ÿÕßû¢:Dÿ{_t6D|_Ì /7í÷÷†­ü_—›ç_¡!’ò÷¿ú»Ü°!þYnè 1Gwøt“ö;#¹•ÿËÓͯ†ÈÊßÿêãoúœ Ñÿ˜ëlˆø¾Ø¢ø+ÆÏ~ÅP¿bÐ!þYnè.7>‹CÌŸ 1Õ“1ÿØ lˆMTop¹évõ×ß8ÁDýõ¯ÐD%åïõñ7fO†8ÿ|ÀCü·ÿçß?yÓ¸Ÿß~=£þÞ=³ü/ìènlÊïœyÿ«¿Û{*åï¥Þ4þ”Ó7ßÿ ­¨iÑàûñû;úVþ/Cüõ¯ÐIùû_©7?åôMã÷¿2ü+zqˆö³!š¢Ñ!ª7ßÿ*à¯Ø£8ÄøÙC 1èÕ›Æó¯ð›FŒßp`ˆ¿?Ûlå`ˆ÷¿ú;Ä^)ÿ+õ¦ñ§œ¾iüþWp¢Ž1àŸáÿKù¿ ñ׿BC$åï¥Þ4þ”Ó7ßÿ MÔ˜ŽµØŽß^ÔVþ/Cüõ¯ÐIùû_©7?åôMã÷¿Bo‘Ã>ûû¿”£_±ö+~VþþWêMãO9}Óxþ~Ó¸_fj+ªÃûâk¹ñJùû_©7?åôMã÷¿ÂËÍŸ ñ·…´•ƒ!Þÿ ñÓò÷¿RoÊ雯ï…Þ4fkí³‰êÿRŽ&ê2 vügåï¥Þ4þ”Ó7ßÿ .7£·â¯?ûCýŠA‡¨Þ4~ÿ+ô¦vZqˆù³!¦bÒ!Š7ÿñ¿?yh¹±nǰ¿‚ï¼üŸ]²ûŸòÁŸ•¢·ûu¼ç_ºñò¶å~ƒ—ÚÞó/v ,vEz@zÌÖ+¼üŸÇß '¼ò6ó¿ôäåÿìIý}BzÄ1—ÛÌäåÿl¿ü¾—EËû.‡_þ@9€¬ôÎæ< ûýÂV›ó]ÎùÎæ< ßw÷㜵9ßåœïlÎú<Ç‘WmÎw9ç;›óèÊ·~œ½6络óÍy4ëî+?¯ÚœïrÎw6çÁûO~÷¨Íy“sÞØ]Æ´â:/wcsÐý<ÓjsÞäœ76çÝÎ눬Íy“sÞØœGï½׎ÑjsÞåœw6ç]¯uÉËÅœ'ôé—}ûàåÿtÔø}b‹ë¦÷šâ\*ΙâÐ;a¿ü°šâB*.˜âÝaûá^S\HÅS\èuÞx¹P\°{¢·óȨÝãBÞã‚)ÑïçùêÛDHÅS¢ßkÝ™5Å…T\0ÅÒû=öâs]HÅSøDÑï'««Õ—RqÉ—ú]¦ór¡¸dŠCc·~´â=.¥â’)Òçvs^.—ì‹èܵ;lÊ;l2½#z¿÷¢ÞSê=™ÞÑg¹{ÖÏ£¦÷”zO¦w@¿ÿOQÔ{J½'Ó;r@zßÞ"/zLïÝeîgÚYÓûzLï}³Š£ï°Cê}0½4çãÈâ[äzLïˆî÷»Lñ‰zH½¦wxåóèÅ'ê!õ>˜ÞÑØãžó³¦÷!õ>˜ÞÑØs–ßa‡Ôû`zGI ÑŽËkzŸRï“é}¢/'×1‹OÔSê}2½Oô•ض¯…ÆË…Þ'ÓûDo‘×Ñ‹zŸRï“éýš‡ïïSê}2½#ú<·Y—¼\è}2Å¡+Ú1­¦¸)7™â.4ëÎÃ{Mq—TÜÅw¡oÔãðâW£K*îbŠCcŸv´^SÜ%w1Å]è™6Ž1jŠ»¤â.¦8DÏóˆâö’Š»Ø=ÑÛ½ÖyíwÉ{ÜÅéíð¬)î’Š#ôÖN½Ò6^Î÷ü‹O%ƒèmôí‹Yçå\qŒnˆ~¾µgÚ¿tûÝÝ®vXíö/Ý¿AD÷vm߬‚—sÅ1zÂYçQ}¦ýCïüî^yë‡×ž*ÿÐçw~÷ÖÿÞb{o¼\(®1ÅzØu¬Û<;/Šc™Dïã<¬vk2sÂè¯|´í.ã¼\(ŽeNÝî·‰¢ÿÞdæ„Ñ^ù×=.y¹PËœà9ߎ6kŠ“™Fo e¯8®ÚSe“™“Ö™â:úB~m³®ór¡8–xAô×Ѽ¦8™xat‡WþõµÐy¹PK¼ z¿ï°g-åÕdâ…Ñ_ùYuB›L¼0ú¬üî“— űÄKCîø1fMqÒýoÌýGt÷kËYu^.ÇÜD¯´ÆË…âœ)ε'å¼\(ŽeÝîwØ¢3Òdö€ÑŽýômO^.ÇÜ8ç_©ÎÉË…â˜ûßkç–xi¼\(޹ÿˆÞ†mï2— Å1÷Ñ{ÄæA/Šcî?¢Ç}‡[¿Ó:/Š ¦8@w³cöšâB*Žeà•ÿ‚âdö€Ñ'û™GÔ’ÌMºÿŒÞZêo— Å1÷Ñ?ì¼_¡kŠ“î?£¢w‡×rÔMºÿŒîˆ~?©nߨ— Å1÷Òëùº&ÝFO8ë¼ãª)NºÿŒ>áïÞ­üåDúïŒÞÚÐîãåBqÌGôx¼‰â—é¿3º!z¿æ–§5^.ÇüwDÿÈ~´¢â¤ÿÎèèÖ½|“þ;£LoÛ³Á˹;Àè^ù~m+íäåBqÌoÐ =Q۹ФÞ˜ŽèvÝ«ÍUSœtÀÝý§5^.ÇpxåŸ+YSœtÀ=Ýݶ¼Mðr¡8æ€Ãßýõ™¼\Ü㘯üýtÑ‹O•ÒgôÖ.ý…¼ñr¡8æ€#úð¹=Yu^.ÇpD7êî¼&pFwD¿Ã:/Šc8üÝ_ûaƒ— Å]LqèÊ,«¼¤â˜¯ü9¶oV“— Å1¼Ÿú™¶ñr®¸ÎpDîÕÌI—8£¢¿w /çŠctGôvÓ[-sÒ¥ÎèÇÞÆÑj~\—8£O8öú×Â.=hFo½¡¯FWõka—tg4¤ŸmK:u^.æ<ó !}fÕëÒƒftGôû&wßbks^zÐŒ×uÔR]zÐŒ>+cŸ¼\Ìyæ÷þ£'«.]àÎ\`DO;·ýï—‹9Ï\`Dº¨­wXãåbÎ3^ùû×jï2]ºÀŒˆÞ®8Zí{]—.0£'¢ؽÐ×¾×ué3ú„c%^&/Šc.p7íË4^.Çú z<;Ðk_ºì{Àè†èïoÔÆË…âX×Do³W».tÙuÑÓ÷{ðr¡8Ö÷Ò¿0çeßFoý_]àG¯¥ûºL>tæwäˆõ¶ÍºÆË¹À~Ýk_ºtÝ="«¶c¥K˜ÑÑm\ÛÓ…ór¡8æ#z>©¢â¤ Ìè ÷×ÛDòrqc.0¼òõ4o—.0ÿÝS%v^.~wæˆõñ³;¬tÄ:sÄýÝu¡ór¡wæˆAz»Ç^|¦•Ž£;¤ßk]«õ|èÒcô@ôw7­àåBïlG*œuWßÞß“— ½3G Ò_»ï'/zgŽXŸº·OãåBqÌCôìçÖߦór¡8æˆ!úýnXM6véˆ1ºcúîÃ:/ŠcŽXŸ:Á¼\(Ž9bpÖMßœÐäåBq„>ðØss/ç8£O8ö‘›:y¹Ð;óã:òeÜŽ³¨wéÇuæÇ!zœqŒâVúqŒnpìÙ«{À»ôãÝ!½ždîÒcô@ô示cÔô.ý8FO8ö/è]úqŒ>;Ü…}_ù¢â¤ÇèÍN4çGµë‚I?Θ‡è>ö÷÷Î˹âÝàØÇ¹­6ÆË¹âÝ î‹l‡Õ¾Óšôã=à•ù2Á˹â}Bú½ÚXí©Ò¤ÇèÍ`/îsûvÑx¹˜óÌCt›}ËUv^.æ<óãý~¼¸ŽÚ]ƤÇèníG}LúqŒðÊ›WsV&ý8FO<ëú¶O*y9¿Ë0ú„Wþõd5y¹Ps­àˆ5^.ÇÜ@Dû]¦èštÝݳ•ï2Ò dtGô6Z5KlÒ dô€cïc뢼\(Žùqˆþñœ*[ëkÒcôfÈ{2'µw“~œ1?Î`7l·&³Œžˆ~¿BoyÚäåBq,{gÝ}å½Ö›×dö€Ñ'¤¿Î ¼\èe yÐÍÛQü^'³Ʋˆþ…¾…&³Œnxì÷R[|¦•ÙFwƒ»°ï»L-{`2{Àè螣zÞ„Éì£'{ïÛÓEòr¡w–=°BôÉË…âXöÀa?êû‰ºöé2{à,{à§Nuv^ÎÇèÇþê{`¼œ+ŽÑÝ ;‘—sÅ1z8ìG}noRÁ˹â=ᕯ÷trÙ ›Ñ'û«³Ðäå\qŒÞ¼Ð—¸ñr¡8–|@ôgÞš'å2ùÀèé-í¨=ÓºL>0º#º…UweºL>0zxaxðr¡8–|À¿{;¯£¦8™|`ô ¯ü+{0y¹PK>x×§7^.Ç’O`oG¯½EºL>0ºÁ±×Ÿ*]&ݽßwØb‚ÝeòÑÑßÝ´‚— ű}ÐSQM´ºÜÍèÒ3ªßm\æ.½¹éÎB— űÜ¢»Õ\æ.ÝýãÉÛïq2wÁèŽèï+ÎË…âXîÑûlÛWâàåBqìôyxå¿p“§Ï3ú€cí¼œ·aô éõs]fN½¹ÿLï2sâ,s‚è~?Q·Úw—™F78öç|™š3â2sÂèŽè÷›é–hu^.ôÎ2'ˆþîõ¼\èu¿‡ôklûa“— ½³Ä ¼ò¯­“— űċ£ÜŇ׼H—‰g‰Dÿž—‰F78öד•ñr¡8–xAô÷©ÄÎË…âXâÅ ÿƒ— ű¾~έƒ\òr¡¸`wXDo¾}1¼\ÜaYÚÇÖuÁeڇћ£´OŽ-cÖx¹Ð;Kû@ú½ÒF­g£Ë´£¤¿¾U/zgi‡I§Q=™×eÚ‡ÑÃóG»2]¦}=ᕟç¶s!y¹Ð;Kûx!c6y¹PKûøÐI§ÆË…âXÚÑß'}t^.ÇÒ>>ôó¼ñr¡8–öñBççåBq,íéaÇUTœLû0zÂ+_?CÍeÚ‡Ñ'û+ñ2y¹PKûx!ñÒx¹PKû úÜ—iF78v¿¶Ü…ñr¡8–öqØù?Σ¶'ÔeÚ‡Ñç>‘9x¹PKûÀ+ßã°¢âdÚ‡Ñ'ûë ùäåBq,oã(ñr¯6Yün#ó6Îò6ˆOò¡øVæmÝàØ³sÖ'ó6ŒîˆþÞ#æ¼\(Žåmýí/Šcy|åçáµnZ.ó6Œ>àØ=·7èÁËÅ[$KûÀßÝ}ËUN^.ôÎÒ>qêoÔ—s½Kû z>ï°µ{È´£û¬vA™öatGt»ß gÍ ™öaô€cíT ^ÎõÎè#Nýl3x9W£OD÷'Í[;w dÚ‡Ñ[4}—i¼\(Ž¥}¢Ðý¾ór¡8–ö‰ÂùïÆË…âXÚ_ùý.ã¼\(Ž¥}½™o'‚— Å5¦¸¦Ï—¼\(Ž¥}Ý37Glòr¡8–ö‰®{¼4^.ÇÒ>Ñ”¯ ™öatƒôym;•Œ— ű´¢ß÷Íê^àiFHuË ^.Çò6ÑuW¥ÉËÅœgy›@©«Uý÷y›`yDÏ˪n`ȼ £{x5o2oÃèŽè÷ÛYÕ™·aô@ô~ž[?êàåbγ¼MeÖ%/çïqŒ>žzpmÏóƒ—‹{ËÛÀßýÕ~òr¡w–· Ôm㼟¬j_JCæm‚åmÂÔï"dÞ†Ñ ŽÝ²zfbȼ £;¢Û°­«’ór¡w–·ÁcïÛùqÁË…ÞYÞÒï;lñÔƒyFŸpÖÙÜúQO^.Çò6zGjãåBq,oƒèq?Ón!ó6Œnxì¹}«4^.Çò6ÞÏmÿ»ór¡8–·Aô÷©ÄÁË…âXÞÑ?¬åQ¼Ãʼ £8özôyFŸ•ß}òr¡w–· ˜»èQÜ32o,oƒèi­¬w™·atCôwÒÉx¹Ð;ËÛ@ú¾”ʼ £¢¿;N/zgy8ö—¼\è=™ÞS÷ò¼\è¥}àØçµe&/zgiŸºÿ|ãåBï,íƒè‘y™öatƒô×]Æx¹Ð;KûDáD'çåBï,íƒèïÝ÷ÁË…ÞYÚÑÍÇ1Šz—iFpìÙ¶|ÝàåBï,k„÷¶íŸ¼\èebê§‹ÆË…ÞYÖÑãyª¬õŸ™5bt‹BwãåBï,ké_xƒ–Y#F€I§^í{2kÄè Ç~¯uëèÉË…ÞYg!8öáÛZ7x¹Ð;K:ÅÏN5 ™tbô°Ç‹o.pãåBï,é„èá}Û+Ôy¹Ð;K:Á±Çµ9¡ÆË…ÞYÒ Ò_™RçåBï,é„èï$sðr¡w–tBôw—äåBï,éÇÞ|{¼\è%àï>ÆÖ |òr¡w–tÊóGÏó)“NÉ’Nˆþ…ÜEʤ£¢Û9¯õ5J™tbt‡ôúŽÔ”I'F„Y£QM:¥L:1z±GßRÉ˹Þ}ÀYwÝ+míþž2gÅè޽Þã%eΊÑ[ÂÎWõ µ”x2<á9#s{›è¼\è9àˆn­og /zg8¢ûÙ·Z— ½3Ñ¿dNé€3zÂ+ïVÝ;ÒgôÇn±õ³¼\è9àY8Ýfòr¡w性ë³2/zg8¢ÇóTYK¼¤tÀÝàØ_çˆ/zg8¢[æö…Üy¹Ð;sÀý#­Úa&¥Îè Çî±e’— ½3޽~Ôž¨S:àŒÞö|8«Iæ”x2áØï'j+Îyé3zKäg;âS¥t“¹À wß÷íÛEçåbÎ38¡}V¿§tÝ!ýÌã,Þe¤ Ìè÷qßàk_‰SºÀŒ>+³nòr1癚¨óÀs‡­e S:¡ÉœÐ„®Pßî2—‹9ÏœPDŸi¼\Ìyæ„Â+ÿ´)­uIé„2z úWÖyé„2úÄc¿¶çºÉËÅœgn`o"}TÝÀ”n`27Ñ¿pNhJ7Ñ Ò_«ñr1癈èã~oů…Ò dôô{­z–VJ7Ñ'ûls;…|òr1ç™#–p÷ýزF—‹9Ï1D÷tê¼\Ìyæˆ!úý@ÅØS:bŒîˆž3RœóÒcô@ôqzyÎKGŒÑ'¤·Q^ç¥+Äèm ý°>®£¶Î¹w°ý°ˆÏ9àYšuCî‡et‡ôWæÄy9ŸuŒˆžf[†áï>Ï­ŸÕäå\qŒÞFG¿ûµy— űݸˆþ>½ór~—atƒc>×Õ|™!wã2º#úGöV<¥tÈݸŒˆ>ï'«¬íTr7.£ÏÊØ'/sžíÆö£½Cz‘ƒy‘Ãt~¾ór1ç™ 鯮 ÆËÅœg^$¢á zH/’ÑÑóéO[{ƒÒ‹dô„Wþµk#y¹¸Ç17ÑãéñRK÷ é2zÈ»ç¼Õvç éæèËôyÔÞe†tÝ ýµÖ/Šcn ¢çå[oçåBqÌ Dôqë½Ø«sH7Ñ'ûð-½?y¹˜ótÖ!_æ´-OÛy¹˜uÌàu<½:knàÎÈ`΢»ã,*N:#Œn˜~UÏ ÒatИYìÕ9¤3ÂèQ¡/Šcûãà•uML^.îqÌ—Aôéy\ŧJéË0zè ù“Þ¯ù2Cú2ƒù2ödÎí¼‰ÎË…â˜/ƒèqöê‰Cú2ŒîðÊ¿VçåBqÌ—Aô÷÷ùàåBqÌ—tóyÔº. éË0zè y¿ª)î!}™Á|D÷ÙŽQœóÒ—atƒc«¦¸‡ôeÝ}Ük]ÖvaéË0z úsÛÿ¼\ÌyæËÀ+o¾e‰'/sžù2}!×–xi¼\ÌyæË zzyÕ2'Cú2ŒnpìÏ ­Åu^ú2Œîˆþ1¦5_fH_†Ñ'û³÷¿8ë¤3Âèmž:ÙØx9Ÿu“í—Aô/œØ8å~F7HYí½?å~FwH?Gõ´‹)÷Ë0z ú;Ù¼œ¯´Œ>ý£g;j_¦Ü3ÂèmBo·n™—‹9ϼ‰ÙuïýÎËÅœgÞ¢fÛî<ãåbÎ3oÒ_kór1ç™7èí9ì¢xÞĔޣO4ö÷sÝäåbÎ3ob¢=#WßÞa/sžyˆþ…>'SzŒnÓô;¬ñr1ç™7Çž¾¥y—‹9ϼ D¿ßÊs^zŒžðÊsû>Ÿ¼œ·aô6Ñ® k›7Ñx¹˜óì;턽:¯í¼ÈÎËÅœgîû=çG-s2¥;ÀèŽè÷Ã=è)ÝFHû_{‹œÒ`ôij®ìÇM¹WˆÑ'¢¿÷ŒL^.î2ŸÒûýÿÒ{ÿïœïŸÎùÊHÿlÎ÷³}N7Do¾ê½:çÿ)ÿ ±oÐÑ{ŒåÊ÷Oçü?å¿!þ z@úýþ>—+¼ü7$¾AOxåcÝØ?óÿ”ÿ‚Äw~÷ écuû§sþŸò_ùßý×úŒò´c™u—ÈJïlÎ#z[ÏÖás¾Ë9ßÙœGÏó÷»Ì:뜗‹9ßÙœô«Ýt¯Íù.ç|gs¾£ý2s9щÏù.ç|gs½ÃúºOŠÏù.ç|gs=Ó>­ÄfmΛœóÆî2¦×y¹¸Ë›ó(kôô-,Îy“sÞØœ7Üi¤emΛœóÆæ¼Á³q—ï6|ΛœóÆæ¼}Ò¯²¸Î›œóÆæ<ì<åuÞ圧OV(sòt”êµ9ïrÎ;»Ë gÚ³mwXãåâ.ãlÎÃw™XN»àsÞåœw6ç]¯uÉËÅœ'ôÇn¶}ðò_ôoÐ'ûhÛ3íäåBqλ ›Wï2!LqñI‚ÝkŠ ©¸`Š ½Î/Š vƒWþùXY»Ç…¼ÇSÚûzùm"¤â‚)Ñ›oW~ðr¡¸`Šƒý.êÏu!Lq¨ó€gù—RqÉ—ú]¦ór¡¸dŠCcϵK*W\JÅ%S¢ß+íºÎ;/ŠKv‡MÜIÌ‹_RÞa“é=q'p/ê=¥Þ“é%ïY?šÞSê=™ÞQïýû]¦õžRïÉô> »­6— ½¦wÔ={YïCê}0½£.è÷-nï°Cê}0½|2oß"‡Ôû`z‡§ØÒ›—ë}H½¦w4ëîkGMïCê}0½Ã±íÊ^.ô>˜ÞÑØ#¶øD=¤ÞÓ;êù0ÛöLÛx¹ÐûdzŸø|Ø^|¢žRï“é}¢¯Ä¾Ýx¹ÐûdzŸŸœ¥UÔû”zŸLï¨{mÎ/zŸLïˆ~Ævå“— ½O¦8D·¶}£ž¼\(n2ÅÁ>äm{ªl¼\(îbŠ»ðÞ«øÕè’Š»˜âP¦ôœå¯F—TÜŇz°·ý‹™ór¡¸‹)î™+Þa/©¸‹Ýã®O:…zíwÉ{ÜÅ÷I—õ]fòr¡8BoíÔ+mãå\qí$ŠCô¶õ⦊ûKïß [ƒ¹ÊkµgÚ¿tûÝÝ=¶/'Î˹â=àØ}Œ£æþ¥Ç7è é÷üU{¦ýCïüîÒżJŠûCŸßùÝ[Cþû}‡õÚSekRq)®Á}RÛ÷ùÎË…âXæÑïwÃ#j÷¸&3'ŒîðʾÝeœ— űÌIk8kTôߛ̜0z"úû—¼\(ŽeNà•ï¹}1›¼\(ŽeNpÿïgÅêSe“™“Ö™âPò¡ŸÛ¬ë¼\(Ž%^àØïwسö×dâ…ÑÑß_ — Å±Ä ¢?‰Ö³ö×dâ…ÑŽ½Ý·¸šÚdâ…ÑgåwŸ¼\(Ž%^š£•6·+ßx¹Psÿý~bÙÞa;/Šcîs½Ò/Šs¦8מ”ór¡8–=hðôù¬:#Mf=áØÍ¶u>y¹Psÿᜥ:'/ŠcîCNèˆíý½ñr¡8æþ#z»_¤Zñ'ÝF7Dï×Yuÿ›tÿÝ=nz¯¹ÿMºÿŒˆî—mOÔÁË…âXö^ù/(Nf}±g߯>y¹Psÿ[êo— Å1÷ÑŠ\ür"ÝF·Ï\hÛ:o¼\(޹ÿˆþœ[ÌQ7éþ3z@z=_פûÏè gÝ=ç‹î“î?£O8ëzxõˉôß½µ¡ÝÿÆË…â˜ÿÞ`‡™žUÅIÿÑ ÑÍ®ªÿÞ¤ÿÎèÇ>ΪÿÞ¤ÿÎèÇþìƒ.Þã¤ÿÎèŽÝ2ŽšÞ¤ÎèÓ­üåD:àŒÞºtÄ=úÐÝ´‚— ½³©ðÊ[ßÞß“— ½3G Ò_»ï'/zgŽXŸº·OãåBqÌCôqîÙƒÎË…â˜#Çž£üåD:bŒî}jÖy¹PsÄúÔ öàåBq̃W¾ïÏ6ÉË…â}À±ßz/îÿCÏï\ù ÇÞ|{Ÿ¼\èùqù2#Ë_¤×™‡è1¢ºw K?ŽÑ ŽýšÕ=à]úqŒî^O2wéÇ1z úGýýd5y¹Ps­àˆ5^.ÇÜ@D«WÝ@“n £¤w/ße¤ÈèŽèíòj–ؤÈèè>³º'Ô¤ÈèÑ?z·â·J“~£7CŽX+»0éÇóãýùNœGmÎK?ŽÑ Žý¾¿»ë˜ôãÝáØã VÖæ¼ôã=}Ì}ÏHðr1癇è>vúäåbÎ3?ÎÐŽÔû]¦úd%ý8c;‘ýc¶^Ü3br'2£›º /sžíDFô_‡Ö¾›Ü‰ÌèèáYuÄLîDfô‰èÖsK6N^.æUºL>0ºá±—Ÿ*]&Ý!ýþ±Š_J]&=ýÝM+x¹PÛí0õqU­.÷A3ú„ô9«ßm\æ.½¹éÎB— űÜ¢ßïïWÑs™»`tƒôç£Yñ'sŒîˆþÞ±â¼\(Žå. ½]ÕžN.sŒžøÊ×ïqòôyFnzïÀàåü» £Oxåëç»Ìœ0zsÿ™ÞeæÄYæÑ=¯íý½ór¡w–9cY~‹”™FwD·ûyºØØeæ„ÑÑß½>‚— ½³î÷ðÊ·³úÖe÷{FŸðÊ¿z´N^.Ç/ŽúßO•ÅSÌ\&^œ%^ý {F\&^Ý<ô“•ñr¡8–xAô÷©ÄÎË…âXâÅ ÿƒ— ű¾nY=©ÓeßFî¾ÍùÁËÅ–¥}üg]\¦}½9ìºpn§˜5^.ôÎÒ>ˆn6«i—iF7D«4^.ôÎÒ>“N^þN+Ó>Œðw¯ïÊt™öaô„¿{›[ò!y¹Ð;Kûx!c6y¹PKûøÐI§ÆË…âXÚLJ>é£ór¡8–öñ¡Ÿç— ű´:ÿ;/Šci‡ç¿Ïò;¬Lû0zâYW>CÍeÚ‡Ñ'¼ò¯ÄËäåBq,íã…ÄKãåBq,íƒè_pÿ]¦}Ý&®j÷<—iFwxåûŒ£–öq™öaôð©Od^.ÇÒ>xÖy?Šo‘2íÃè_ùý ùäåBq,oã(ñrŽíËIãåBq,oƒè™vß"eÞ†Ñ Žý1…ŠŠ“yFwHís^.Çò6ˆþv‚— ű¼ ¾òWõ 5—yFpì™Û³Íàåâ-’¥}=Î=G=y¹Ð;KûÄ©¿Q7^Îõ,íƒè#fõ¬iF7D·ûÊß"C¦}Ýž>Û]Æy9×;£¤¿v*/çzgô§~¶¼œ+ŽÑ'¢ÇiÕݸ!Ó>ŒÞ¢é»LãåBq,í…î÷— ű´OÎ7^.ÇÒ>øÊ_Õ³6B¦}=½E¯žà2íÃèÒ_çË ^.ÇÒ>ˆvVÏ“ ™öaô]÷xi¼\(Ž¥}¢ÿ(_2íÃèÇ~–ŸiC¦}ÝÝ®«ú¥4dÚ‡Ñ^ùW·ÌàåBq,oÇþêª4y¹˜ó,o¨ã„GÕ™· –· ØmcVÝÀyF·À]Vî;|mÎ˼ £;¢G;«þ{ȼ £¢÷>«n`ȼ £geÖ%/çïqŒ>½Í¶=Ï^.îq,oÇþê?y¹Ð;ËۄîJWÑ›™· –·ôz¿‹yF·€]V®ê™‰!ó6Œîˆî=¶·ór¡w–·Ác÷í™6x¹Ð;ËÛ@úý³O=™·aô ¯üUN´†ÌÛ0z‹Ð;R/ŠcyD˪ ·yF7<öYí¶2oÃèé÷œâ—™·aôˆÐ§/Šcy›€™“¸ŠÞDȼ £8özôyFŸ•ß}òr¡w–· ØãeZqÏHȼM°¼ ¢6Êz—yF78öWÒÉx¹Ð;ËÛà+_ÿR*ó6Œˆþî8¼\èåm"µ¼\è=™ÞS÷ò¼\è¥}àØ½WûQ‡Lû0z‹¡ûÏ7^.ôÎÒ>ˆþ‘îÕ'j™öatƒô×]Æx¹Ð;KûDáD'çåBï,íé¯Ý÷ÁË…ÞYÚκ+ª½}B¦}} z»oqë7êÁË…ÞYÖ^ù™e_Ff½ÅÔO— ½³¬¢§ï»u:/zgY£(t×1^.ôβF1ö-³FŒó6Yí{2kÄè Ç~úvî@òr¡wÖYŽ}úvå/zgI§øÙ©F!“NŒÞöx‰mµi¼\è%=Û¨¦yC&ÝàØï»L+ê]&ÝãÒ™RçåBï,é„èï$sðr¡w–t‚cõxI^.ôÎ’N;JÙyõ.“NŒ>!ÝZ÷Ë„L:1zËóGÏó)“NÉ’Nˆþ…ÜEʤ£{œÕ^)“NŒî^ß‘š2éÄè¯|{Úa—ôž2éÄè‰è~žÛ:Ÿ¼œëÑ¢·sO¼ ^ÎõÎèþîõ/)sVŒÞíïW5Ù˜ÒOæ€'àØÃª)¯”8£Ï,œn3y¹Ð;sÀÓõY™— ½3Ñ3zõü¸”8£ûë1ãåBïÌGt¿늧œ¤tÀ=ýc´êî¼”8£'¢Ûe[ö y¹Ð;sÀáØïG골8é€3zKxÖFT“Ì)ðd8¢¿Ï ì¼\(Ž9àˆþ‘=‹ŽXJœÑÑ}¶j’9¥ÎèèÃgÕOé€3ú„W>ÚÖŸvòr1ç™ œÈ‹ÌË‹9«”.p2Ñ­·íÛEçåbÎ38¡Õ¯Ä)]`FwDÏyU÷Ç¥t=àï>ï妸)]`FŸ•Y7y¹˜óÌ Mä~DGmÎK'4™šÐåu^:¡Œnˆþ>/Òx¹˜óÌ Eô{.UÏ Mé„2z úWÖyé„2úÄcÕ}‘)Ý@Fo ¼‰aYuSºÉÜ@DÿÂ9¡)Ý@F7H­6ÆËÅœgn ¢ÏqnïïÎËÅœgn  ·6Ê'°§t}¢±_Ö¶·ÈÉËÅœgŽX"O*÷SN/sž9bˆþîéÔy¹˜óÌKØyÀzuÎKGŒÑÑÇ(Ÿ™˜Òcô@ôy¶òœ—Ž£OHoåýï)]!Foí‡ bªsÈݸƒí‡Eôô½¯‘ñr>ëÝ1=«‡ÜËè裟Փ:‡ÜËè‰è>½Ú·pÈî÷Œ>}Žý|™ÁËùwZFŸðwϳª¸!wã2zýwÈݸƒíÆEô÷è—ó» £{Fu§Ò»qÝýcœYì½?än\FD¿<«;•†ÜËè³2öÉËÅœg»q‡ýhïÀ^ä`^$¦ïùùÎËÅœg^$¢¿»./sžy‘ˆþ…7è!½HFDÏëÚž¨ƒ—‹9ϼHø»¿vm$/÷8æ±÷rºoH7ÑÛ@~ÜØ{q7^.ÇÜÀwãæYìc6¤Èè鯵Îx¹Ps}Ì«šöÒ dô@ôë,÷êÒ dô Çž£ºCmH?ŽÏº@_ȳºGlHGl0gd Þ¼÷3mõ¹N:#ƒ9#ˆîרúïC:#Œn˜~U‘!FwD¿%׊½:‡tF=*ôàåBql¼ò£|nàûã}"úõ´«,>UJ_†ÑÛ°xµçþÌ`¾Ì€=™Çöͪór¡8æË zŒV=ñaH_†ÑÑß«ór¡8æËÀßýõ}>x¹Póe Ý®ò›”ôe½ ô…ÜË)î!}™Á|DŸÛû{çåbÎ3_Ž}”SÜCú2ŒîïÚVçåbÎ3_ÐÛ9¯ª9¤/ÃèϺ=KáØGT÷ÃéŒ0z›§N66^ÎgÝdûeæù£§Ü/Ãè†èñ´`¯½AO¹_†Ñ}Â3ЭzÚÅ”ûe=à•%ƒ—ó•–ÑçÄ}‰G1Ý7åžFozåÞ¼Sz“yˆþî½ßy¹˜óÌ›@ôÙz1Ñ:¥7ÁèŽèïµÎy¹˜óÌ›ôöô%.ž71¥7Áèýý\7y¹˜óÌ›˜¨cd»¶wØÆËÅœgÞ¢¡ÏɔޣÛ4ýk¼\ÌyæMÀ±«ö9™Ò›`ô@t¶ç¼ô&=á•?Gu_ä”Þ£·‰vmŒ¬žr2¥;0ÙwZDïV~‹œÒ`tCt¶yRÆËÅœgî¢ßøY|¢žÒ`ô€ô<·§‹àåbγ½B^÷ã¦Ü+Äèþî¯=#“—‹»Ì§tû­Þ÷À>óÿ”?ûlÎÛÙ>§¢7_ç¼}:çÿ)ÿ ±oÐÑ{¬IfûtÎÿSþâß ¤ßïqs¹òÁËCâô„Wþ~ÿû¥Ô>óÿ”ÿ‚Äw~÷ éc,iûtÎÿSþ 2¿ó»·<×ÅË{œ}z—ù§@VzgsÑÛXî2|Îw9ç;›ó]ìÃç|—s¾³9ž¨ÛzªŸó]ÎùÎæç»œóÍù®R|Îw9ç;›ó¦N%æsÞäœ7v—1­¸ÎËÅ]ÆØœ‡}bSœór1çÍyØó¡/o|ΛœóÆæ¼Á“:Û‘µ9orΛó¦: ñ9orΛóèy¾Eyw9çé“J:uÛV›ÎËÅœwv—AoRgÛî°ÆËÅ]ÆÙœwÕ-“Ïy—sÞÙœw½Ö%/sžÐûæËاòÊAÒ¿AŸ§ìºÀçRqλ ›Wï2!Lq(ge×ötÑy¹P\0Å…^ç— Å»ÇáþóË ­üòLq¡ºerÅ…T\0Å!zóíÊ^.Lqèw·ús]HÅS\ªî:\q)—Lq©ße:/ŠK¦¸Tg¬pÅ¥T\2Å!ú½Ò®ë¼ór¡¸dwXÔq¢õÅàwØ”wØdzOÕ£•ë=¥Þ“é%ïY?šÞSê=™ÞQïý9¶µnòr¡÷dzª+2×ûzLï([˜½¬÷!õ>˜Þ‡ê¢Æõ>¤ÞÓ;êw뎮÷!õ>˜Þa·õ\!®÷!õ>˜Þa§‘v+¾¦÷!õ>˜Þe§®÷!õ>˜ÞÑØÛÕ«ï°Cê}0½Ãt_Ûži/zŸLï¨ zî_‰;/zŸLï}%ömìÆË…Þ'Ó;ê‚~ææŒ8/zŸLïÛœ^.ô>™ÞýŒíÊ'/zŸLqˆnmûF=y¹PÜdŠC}ÈGÛž*/Š»˜â.´o·÷÷ÎË…â.¦¸K±ÂwIÅ]Lq—:™—+î’Š»˜â`ïýܼÈàåBq»Ç!ºÛö\7x¹¸Ç]Lq~nï2“— Åzk§^i/çŠk'Q¢·+ªŠûKïß [“¹Jª¸¿tûÝ}?˜*î/Ý¿A8v㨹éñ zBúýÕžiÿÐã;¿û„ô-sB÷‡>¿ó»·†ü÷ûëµ§ÊÖ¤âSêí“mû>ßy¹PËœ úžp㊓™FwxåGßî2ÎË…âXæÑŸy¹˜óÌîýGOV]ºÀ¹Àˆ¾ŸÊç¼tÝàØï÷÷â׃.]`FwDïcT=©.]`FHï­šÞïÒfôDô›~Ô¾×ué3úDôwâeòr¡8æwÓ¾LãåBq¬ï¢ç8«;R»ì{ÀèÖM£6^.Ǻ.À+Žj×….».0z`z”Ÿ¬d×FŸˆþ•9/û0zëÿê·ñœÀ^ûFÝeò¡3¸#Gl\Û¬k¼\Й Œèѯí»MçåBqÌîpºmWÞx¹Psá•·¶=]8/Šc.0¢³•']`FO8ö×ÛDòrqc.p¥y»tùïžú+±órñ»3G¬ŸÝa¥#Ö™#†èï® — ½3G Ógµ]—Ž£;¢x‹bχ.1FDwÓ ^.ôÎv¤Â+o}{O^.ôÎ1Hí¾Ÿ¼\è9b}êÞ>— Å1G Ñǹg:/ŠcŽ{Žò—éˆ1º÷©}XçåBqÌëS'؃— Å1G ^ù¾?Û$/Š#ôÇ~뽸ü=¿så'{óíý}òr¡wæÇux{–¿I?®3?ÑcDuï@—~£û5«{À»ôãÝ!½ždîÒcô@ô¸_'ŠwXéÇ1z"úWô.ý8FŸîžÕ©]úqŒÞ 32Fµë‚I?Θé~V3'&ý8F7DOŸÕýq&ý8FwDß;ÀSÅ™ôã=à•ù2Á˹â}"ºÛîq“—ó9ÏèÍàžÐQýjdÒ3æÇ!º[T;˜ôãÝý|µ»ŒI?ŽÑÑ¿Ð÷À¤Çèé󬿬LúqŒžxÖíý¨“—ó» £OD?YM^.ÇÜ@+8b— Å17ÑãêU7ФÈèéÝËwé2º#z»¼š%6é2z ºÏ¬î 5é2úDôÞ­ø­Ò¤ÇèÍ#ÖÊß.LúqÆü8D¾çQ›óÒctƒc¿ïïÅî:&ý8Fw8öx‚•µ9/ý8FDsß3¼\ÌyæÇ!ú~5ŸóÒcôfhGêý.S}²’~œ±Èˆ¾ŸÇç¼Ü‰Ìèf….èÆËÅœg;‘½gÛ®¼ór1çÙNdDϪ#fr'2£OD·ž[²qòr1ç™ l¡Îçs^ºÀÆ\`D¯u—‹9Ï\`ƒ{BGug¢I˜ÑÑÛ=ôbßB“.0£üÝÍËë¼t}Âß½_í(®óÒ‡eôfù£·ÉݸÆvã"zDlOÔ—‹9Ïvã"ú»£”ñr1çÙn\xå·Óëøœ—8£¢{¿Ê_än\FO8ö×·‹äåâ šíÆ5¸yV{¼˜ÜËèÍÐnÜæÕ/&³ƲˆîݫݰMfÝàØ_{ÿ— űì¢å;­Ì0z úºãšÌ0zBú«[fòr¡8–=°ŸeLf½òa³þ.#³Ʋ“½š=0™=`tCô{¹Åݸ&³Œîpì³UO«4™=`ô€t÷jÚÇdö€Ñ^yßsVÉË…âXöÑ{înààå<{ÀèÒ_ç„N^.ôβ†<èv¿BŸieöÀXöѿзÐdö€Ñ ý~¸)>ÓÊ죻Á]سš=0™=`ô@ô°òŽ“ÙFOƒ;‘ûFO^.ôβVè‚>y¹PË8Ü ü4>()ÎeöÀYöÑß©ÎÎ˹âÝýÝ÷Àx9W£»v";/çŠcô@ô>¼úé2{Àè ¯|½§“ËnØŒ>á•uš¼œ+ŽÑ›ú7^.Ç’÷ÃÚè5OÊeòÑ ÓÛ\1ãåBq,ù€è~¶ê=ÎeòÑà {Àƒ— űäÃ'W¾{­ÿ¼Ëä£ODg&/ŠcÉïúTâÆË…âXòÁá ìV}ªt™|`tÃc/?UºL>0ºCú½ˆ¿”ºL>0z ú»›Vðr¡8¶Úaêãª&Z]îƒfô ésV¿Û¸Ì]0zsÓ…/Šc¹ D¿ß߯¢ç2wÁèéÏG³â=Næ.Ýý½cÅy¹PË]@z»ª=\æ.=ñ•¯ßãäéóŒ>ÜôÞÁËùwFŸðÊ×Ïv™9aôæþ3½Ë̉³Ì ¢{^Ûû{çåBï,sdzü)3'Œîˆn÷ót±3°ËÌ £¢¿{}/zgÝïá•ogõ;­Ëî÷Œ>á•õh¼\(Ž%^õ!¿Ÿ*‹§˜¹L¼8K¼ úöŒ¸L¼0ºyè'+ãåBq,ñ‚èïS‰— űċ:ÿ/Šc} ݲzR§Ë¾Œ> Ý}›óƒ—‹;,KûøÏº.¸Lû0zsØuáÜN1k¼\è¥}ÝlVÓ>.Ó>ŒnˆþþVi¼\è¥}&¼üV¦}=àï^ß•é2íÃè ÷6·äCòr¡w–öñBÆlòr¡8–öñ¡“N— ű´}ÒGçåBq,íãC?Ï/Šci/tþw^.ÇÒ>ÏŸåwX™öaôij®|†šË´£Oxå_‰—ÉË…âXÚÇ ‰—ÆË…âXÚÑ¿àþ»Lû0º9L:]Õîy.Ó>ŒîðÊ÷G-íã2íÃèáSŸÈ¼\(Ž¥}ð¬ó~ß"eÚ‡Ñ'¾òûòÉË…âXÞÆQâåÛ—“ÆË…âXÞÑ?2í(¾Eʼ £ûc 'ó6ŒîþÚ#æ¼\(Žåmýí/Šcy|å¯êj.ó6Œ>àØ3·g›ÁËÅ[$Kû zœ{Žzòr¡w–ö‰S£n¼œë=XÚÑGÌêY!Ó>Œnˆ~Oàê[dÈ´£{ÀÓçc»Ë8/çzgô€ô×N¥àå\ïŒ>âÔÏ6ƒ—sÅ1úDô8­º7dÚ‡Ñ[4}—i¼\(Ž¥}¢Ðý¾ór¡8–ö‰ÂùïÆË…âXÚ_ù«zÖFÈ´£¢·èÕÜB¦}}@úë|™ÁË…âXÚÑÃÎêyR!Ó>ŒÞ¢ë/— ű´OôåëB¦}ÝàØÏò3mÈ´£;¢ÛuU¿”†Lû0zÀ+ÿê–¼\(ŽåmàØ_]•&/sžåmuœð¨úï!ó6Áò6»m̪2oÃè¸ËÊ}‡¯Íy™·atGôhgÕ™·aô@ôÞgÕ ™·aô¬Ìºäåü=ŽÑ¢·Ù¶çùÁËÅ=ŽåmàØ_à'/zgy›pØUé*z!ó6Áò6^ïw2oÃè°ËÊU=31dÞ†Ñѽǖâv^.ôÎò6xì¾=Ó/zgyH¿öâ©!ó6Œ>ᕿʉÖyFozGjãåBq,oƒèqY5á2oÃè†Ç>«Ý6BæmÝ!ýžóQür"ó6ŒúTâàåBq,o0sWÑ›™·aôÇ^ï‚2oÃè³ò»O^.ôÎò6{¼L+î ™· –·AôÑFYï2oÃèÇþJ:/zgy|åë_JeÞ†ÑÑß'‚— ½³¼M¤ö “— ½'Ó{ê^^ƒ— ½³´»÷j?êiFo1tÿùÆË…ÞYÚÑ?Ò½úD-Ó>ŒnþºË/zgiŸ(œèä¼\è¥} ýµû>x¹Ð;KûÀYwEµ·OÈ´£Do÷-nýF=x¹Ð;ËÁ+?³ìËȬ£·˜úé¢ñr¡w–5Bôô}·NçåBï,k…î:ÆË…ÞYÖ(æÏÞ eÖˆÑ#`Þ&«}Bf=áØOßÎH^.ôÎ: Á±Oß®üàåBï,é?;Õ(dÒ‰Ñ[À/±­6— ½³¤¢gÕ4oȤ£û}—iE½Ë¤£{\:Sê¼\è%ýd^.ôÎ’Npì¯/ÉË…ÞYÒ)`G);¢ÞeÒ‰Ñ'¤[Ëâ~™I'Foyþèy>eÒ)YÒ Ñ¿»H™tbtƒc³Ú«3eÒ‰ÑÒë;RS&=à•oO;ì’ÞS&=ÝÏs[ç“—s½3ú@ôvÁ˹Þ}Âß½Þã%eΊÑ[¢ýïýª&S:àÉð„猔;…¦tÀÝàØïg›âÞ”8£;¢ßoåÕû{JœÑ#íGIæ”8£'¢ß/ðgñû|JœÑ{X5å•Ògô™…Óm&/zgxº>+³ñr¡wæ€#zF¯ž—Ògtƒc#f¼\è9àˆî÷c]ñ”“”8£¢ŒVÝ—ÒgôDt»lË$/zg8ûýH}'pFo ÏÚˆj’9¥žÌGô÷¹— Å1Ñ?²gÑKé€3º#ºÏVM2§tÀ=}ø¬:à)pFŸðÊGÛúÓN^.æÏVžóÒcô é­¼ÿ=¥+Äèm ý°áQLu¹w°ý°ˆž¾÷52^Îg£;¦gµ3ðûa=}ô³zRçûa=ݧWûÙýžÑ¢Ï±Ÿ/3x9ÿNËèþîyV7än\Fo££ß}Twã¹w°Ý¸ˆþ>½ór~—atƒcϨîTr7.£;¢Œ3‹½÷‡ÜËèè—gu§Ò»q}VÆ>y¹˜ól7î°íÒ‹Ì‹Äô=?ßy¹˜óÌ‹Dôw×ãåbÎ3/Ñ¿ð=¤Éèèy]Ûuðr1ç™ ÷×®äåâÇÜ@8ö^N÷ é2zÈ{/îÆË…â˜8ànÜ<‹}̆tÝ ýµÖ/Šcn ¢yUÓ>CºŒˆ~å^CºŒ>áØsTw¨ éÇñYè yV÷ˆ éˆ æŒ Ô›÷~¦­>×Igd0gÑýUÿ}Hg„Ñ Ó¯ª32¤3ÂèŽè·äZ±WçΣG…¼\(ŽíƒW~”Ï r£OD¿žv•ŧJéË0zv¯ö|Ò—Ì—°'óؾYu^.Ç|DѪ'> éË0º#ú{µq^.Ç|ø»¿¾Ï/Šc¾ ¤ÛU~“’¾ £·¾{9Å=¤/3˜/ƒèás{ï¼\ÌyæËÀ±rŠ{H_†Ñ}à½BÛjã¼\ÌyæËz;çUõ"‡ôe}âY·g‰'/sžù2ã‚Ùƒ¬~=¾Ì`¾ ¢›Y5É<¤/Ãè†è3²Ú1rH_†Ñ_ù«W¿˜I_†Ñ'ûˆê~Ø!FoóÔÉÆÆËù¬›l¿Ì<tbã”ûeÝ=žìµ7è)÷Ë0ºOxºUO»˜r¿ £¼ò¯dcðr¾Ò2úœ¸/ñ(¦û¦Ü3ÂèmBo¢Ü›wJob2oÑß½÷;/sžyˆþ1[/&Z§ô&Ýý½Ö9/sžy€Þž¾ÄÅó&¦ô&}¢±¿Ÿë&/sžyuŒl×öÛx¹˜óÌ›@ô/ô9™Ò›`t›¦ßa—‹9ϼ 8öaÕ>'SzŒˆîÏVà✗Þ£'¼òç¨î‹œÒ›`ô6Ñ®‘ÕSN¦t&ûN‹èÝÊo‘SºŒnˆîÑ6OÊx¹˜óÌ@ô?‹OÔSºŒžçöt¼\Ìy¶WÒë~Ü”{…}Âßýµgdòrq—ù”îg?ê8q¿¿ÿ û§sþŸòâŸÍy?ÛçtCôÖâhþ—n¼ü7ľAw8öv.z÷Oçü?å¿!þ z@º]‡-W>xùoH|ƒžðÊ÷û›éÉËAâ;¿û„ôûáâ×ÑåÿÐ'/ÿ™ßùÝÛ‰žço¹eÖ5^ +½³9èÏ^¡Q›ó]ÎùÎæ<ÊYµ¹¬6|Îw9ç;›óï\ðV›ó]ÎùÎæ<êü¯´cÖæ|—s¾³9èñ¼¾·ÚœïrÎw6çÑÛ„ã×QÆ…9orλ˘V\çåâ.clÎîw‘£6çMÎycsÞp÷¼éµ9orΛópïÿÓ¹6çMÎycsýé8µ9orΛóàɪ(¯ó.ç<}²rtšÕý6aµ9ïrÎ;»ËÀ® ±Ýa—‹»Œ³9Þãz?ÚU›ó.ç¼³9ïz­K^.æ<¡Hðe샗ÿ‚¤ƒ>OxâÃ×…T\0Å%êŠ|ßÞ¯šâR*.™âR¿Ët^.—LqhìÏ׃â=.¥â’)ÑŸ±_5Å¥T\²;,¢‡/ßiù6å6™Þ÷â>‹zO©÷dzGÉÆ›ÿ·g#×{J½'Ó{~r^dQï)õžLï(åuϺõ-²ñr¡÷Áô;Àûâˆq½©÷ÁôŽº ÷XÒ}\ïCê}0½Ãþó×qß"‡Ôû`zGôgzñ‰zH½¦wxåóèÅ'ê!õ>˜ÞáØ×nØ\ïCê}0½£±G–ßa‡Ôû`z‡=òȬé}J½O¦wÔ |¬û ¹Þ§ÔûdzŸè+qß¾/zŸLï½E^‡õ>¥Þ'ÓûÄ'>Ìâý}J½O¦wDϱͺäåBï“)nâN¡sÔ7¥â&SêCþø2³¦¸K*îbŠ»>éÉ\üjtIÅ]Lq>ÿ=gMq—TÜÅ÷Içÿ°šâ.©¸‹)ѽV¼Ã^Rq»Ç}ÒýþÊÚ=î’÷¸‹)Ò㸼¦¸K*ŽÐ[;õJÛx9W\;‰â½Åµ}1뼜+ŽÑ­Á\¥/ým¨âþÒítGtËû]¦öû—îß ¤?ë|”÷—ß 'œu^{¦ýCïüîŽýyƒ®=Uþ¡Ïïüî­!ÿýÛû{ãåBq)®á]™WÔ'3'ŒnˆÞcícÆ'3'ŒîðÊû¹Ýeœ— Å±Ì ¢?çIý÷&3'Œžpì¯{\òr¡8–9ÁsÞŽ³×'3'ŒÞLqÏeçWœÌœ´Î‡’÷Mfu— Å±Ä ¢·ÇËšâdâ…Ñ^ù××BçåBq,ñ‚èÏèYKy5™xaôÄW>«Nh“‰FŸ•ß}òr¡8–xiÈýw;¼×'ÝÿÆÜÿöIïýVûRÚ¤ûÏèÇþZi— Å9SœkOÊy¹PË úsÆJÑi2{Àè ¯üÖe…+Nf}Bú+Õ9y¹PsÿòaÏÜ/— Å1÷Ñ[žÛ»LçåBqÌýGôn¹yÐÆË…â˜ûßà¹çöÖy¹P\0Å!úÙŽkÖRq,{÷/(Nf}Â9?òµ$s“î?£·–úÛEãåBqÌýGô>—]Ø\qÒýgtkпŽ^ËQ7éþ3ºCú3ëjî@“î?£GËåëštÿ=ᬳûm¢Õ'ÝFŸðÊ?ß.Š_N¤ÿÎè­ íþ7^.ÇüwDgÇJñˉôßÝý9ÍjïqÒgto°«Ò8¢¨8é¿3z º=Ï´Å{œôß}À+ÿ<ÏGÉhÒgô ¯üóTYóãštÀ½5ä>³®¶s¡I¼1¼}rú|¶šâ¤ÎèÖ¦ÎÓ/Šc8¼òÏ›”×'pFD÷Ö¶¼Mðr¡8æ€Ãßýõ™¼\Ü㘯üéÛ›ÔäåBqÌo—þBÞx¹PsÀ=/Ûž¬:/Šc8¢[?«»óštÀÝÛ¥ßa— Å1þî¯ý°ÁË…â.¦8t埽Åo•—TsÀýãñ¤®šâ¤Îè­Ÿú™¶ñr®¸ÎpDNp+fNºtÀÝàØ_;ЗsÅ1º#zk¾eÈ—sÅ1zà±ÛqÕü¸.pFŸpìõ¯…]zÐŒÞzÃ]•Š_ »ô ;ó ÝFÛ’N—‹9ÏߥÍèŽè÷MÎŽÚð.=hFHçѪ6ç¥Íè³2öÉËÅœg.pï?z²êÒîÌFô˜¶íï¼\Ìyæ#º=_‰¯Úœ—.0£;¼òO‚½ö.Ó¥ Ìèèíù>_û^×¥ Ìè‰èÖì¨}¯ëÒfô ÇþJ¼L^.Ç\ànÚ—i¼\(Žõ=@ôxü÷Ú׃.û0ºÁ±¿¾Q/Šc]½å¬v]è²ë£¦ï öàåBq¬ï¤aÎ˾ŒÞºƒ®‰÷]Æjé¾.“¹À9b׹ͺÆË¹ÀˆîÏ>©Ú׃.]`F7D'õQÛ±Ò¥ Ìè¯|´íéÂy¹PsáØŸ'ê¢â¤ Ìè ÷×ÛDòrqc.0¼òõ4o—.0ÿÝS%v^.~wæˆõñ³;¬tÄ:sÄ ýÕu¡ór¡wæˆAúÕŽY|¦•Ž£{‡'}ÌÃj=ºtÄ= ýÕM+x¹Ð;Û‘ ¯üÓÓ©–úèrG*£OHí¾Ÿ¼\è9b}êÞ>— Å1G ÑcøÖߦór¡8æˆÁ±_³šlìÒctÇô݇u^.DZ>u‚=x¹PsÄàØÓ6'4y¹P¡<ö¹¹ƒ—sœÑ'û³¼¶?®K?ŽÑ[G¾ÌÓ÷ ¨wéÇuæÇ!º?ïqÅ;¬ôãÝàØŸwñ‰ZúqŒî^O2wéÇ1z úý2ã‡Õô.ý8FO8ö/è]úqŒ>½ùzîWœôã½:éãyº¨½A›ôãŒùqîûû{çå\qŒnˆ~ß;¶ÕÆx9W£»¸ÿüYûNkÒcô€WþåË/çŠcô Ç>cëù0y9ŸóŒÞ öâîÛ·‹ÆËÅœg~¢ÛóD]ûRjÒctCô{ðí¨ÝeLúqŒîÖ~Ô÷À¤Çè¯ü“ú¨å¬LúqŒžxÖÙ¶O*y9¿Ë0ú„Wþõd5y¹Ps­àˆ5^.ÇÜ@D÷Ù«n I7Ñ ÒŸìAñ.#Ý@FwDoO—ÔÚ3“n £üÝŸnµ÷8“n £ODÿh³µ±&ý8Fofø„Ö«ö.cÒ3æÇì†}ÿŒGmÎK?ŽÑÍ ŸRZìÉlÒct‡Wþé²RûvaÒcô@ô|z´Ö’N&ý8FŸˆnÓYëÙhÒcôfhGêãÃß&¤gl'2¢g¶­]çåbγÈVè‚n¼\Ìy¶ÑûótÑjs^îDfô@tÞa‹s^îDfô ÇžqdñÙFîfôfÈ{èÅ· és!ýµÖu^.æ“.0£¼òåu^ºÀŒ> î›#6y¹˜ól7®åRÜ&wãÛ‹è÷kÑæþw^.æ<Û‹èïŽRÆËÅœg»qýÞ&ìµ9/pFD·gµ)~5’»q=áØ_ß.’—‹7h¶޽{õT#“»q½Ú™xõíMªñr¡8–=@t{îïµ/&³Œn6ôÞãåBq,{Çþ…ï´2{ÀèÇ^ïŽk2{Àè é¯n™ÉË…âXöÀ~–=0™=`ôfȇ}î°Åw™=0–=0˜|ÈÍê¼\(ŽeýãùÝ£¦8™=`tGt{öÃÖÒ}&³ŒðÊ?Ï´µ´Éì£'¼òOOæÚ)f&³Œ>àØŸ3k½yMf}BúëœÐÉË…ÞYöÀݬÅïu2{`,{`×úšÌ0ºá±g;ŠÏ´2{Àènpv;¼–=0™=`ô@t7«ž7a2{Àè Çþt+Þaeö€Ñ§º O^.DzŽve>'>ÔÞ"]fœeüÔ©ÎÎ˹âÝàØ_}Œ—sÅ1º{a'²ór®8FH¾ÛÔ¾œ¸Ì0zÂ+_ïéä²6£O8öWg¡É˹â½y¡/qãåBq,ù€èÏ»”Õ<)—ÉF7Ho÷m¦öLë2ùÀèŽèö¸Àµ·H—ÉF/ì^.Ç’øwog;jŠ“ÉFŸpì¯ìÁäåBq,ùà]ŸJÜx¹PK> º?Ïóµ·H—ÉF78öúS¥Ëä£;¢·+« v—ÉFDwÓ ^.ÇöAñg¯&Z]îƒfô éaÕï6.sŒÞÜtg¡ÆË…âXîÑíÙµQóã\æ.ÝýãIyïq2wÁèŽèï+ÎË…âXîÒŸß½x“¹ FOxå¿p“§Ï3ú€cí¼œ·aô éõs]fN½¹ÿLï2sâ,sâ0ñÒ·~— ½³Ì ûӸ挸̜0ºÃ±?§×üw—™FD÷ú^.ôκßCú“tª}§uÙýžÑ'¼ò¯­“— űċ£ÜÅ£÷šé2ñâ,ñâñ£=#./Œnpì¯'+ãåBq,ñ‚èïS‰— űċ:ÿ/Šc}à•ðâ3­ì{ÀèÓçöÅlðrq‡eiÿY×—iFoŽÒ>Ïé6Åï´2íã,íé#¶s:/zgiH}«4^.ôÎÒ>“N­z2¯Ë´£¢aW¦Ë´£'¼òOêcÔô.Ó>Œ>½1›¼\(Ž¥}|è¤SãåBq,íƒèï“>:/ŠciD?Ï/Šci/tþw^.ÇÒ>þdJ‹Š“iFOxåëg¨¹Lû0ú„c%^&/Šci/$^/ŠciDÿ‚ûï2íÃèæ0é4·Ü…ñr¡8–öW¾?†\Mq2íÃèáSŸÈ¼\(Ž¥}à•º¨'Ó>Œ>!ýõ…|òr¡8–·q”x¹ö^ün#ó6Îò6ˆÏ[dñ;­ÌÛ0ºá±ßë|¯)NæmÝ!ýµGÌy¹PËÛ úÛ^.Çò6pìÞ«uÓr™·aôÇþüî^{‹¼ä[$Kû º·¾å*'/zgiŸ8õ7êÆË¹Þƒ¥}='´–`™öatÃcŸÕ.è!Ó>ŒîˆnO_£š2íÃèÇþÚ©¼œëÑGœúÙfðr®8FŸˆîOljڹ!Ó>ŒÞ¢é»LãåBq,í…î÷— ű´OÎ7^.ÇÒ>˜¾ßeœ— ű´¢·g§Rí-2dÚ‡ÑüÝ_çË ^.ÇÒ>ˆîÏSeí2íÃè-ºîñÒx¹PKûDÿQ¾.dÚ‡Ñ ÒŸ#RkÏ´!Ó>ŒîˆnOò¡æŒ„Lû0z ú»[fðr¡8–·ôWW¥ÉËÅœgy›@‰—ìUÿ=dÞ&XÞÑóùrRsCæmÝàØŸrµ¼Mȼ £;¢ûóõ 8çeÞ†ÑÑÛÓíæ†ÌÛ0zVf]òrþÇèŽýqÄjû¤Bæm}ÂßýÕ~òr¡w–· ”9yú×¾”†ÌÛËÛ„ÿ¨ßEȼ £[À.+WõÌÄyFwD·ç yíKiȼ £{lçÇ/zgyH?£zêAȼ £O8ëž]ZµDkȼ £·½#µñr¡8–·AtÎÒªy!ó6Œnxì¶}«4^.Çò6þ|!¯¹!ó6Œˆþ>•8x¹PËÛ ú=ø~ï°2oÃè޽Þ=dÞ†ÑgåwŸ¼\èåmöxyˬé]æm‚åm=¦—õ.ó6ŒnˆþN:/zgyHÿ—R™·aô@ôwljàåBï,oÇþò “— ½'Ó{ê^^ƒ— ½³´þÝÏ-k4y¹Ð;KûÄÐýç/zgiDÿˆçÓIMï2íÃè鯻Œñr¡w–ö‰Â‰NÎË…ÞYÚ'†Þ}¼\è¥}Ýz?ZQï2íÃèŽýy›5½©w–5¿»m{À'/zgY£˜úé¢ñr¡w–5Bôx·­õŸ™5bt‹BwãåBï,kógoÐ2kÄè0éÔª}Bf=áØŸ½BYÓ»Ì1ú€cž¬Šz—…}ÆÏN5 ™tbô°ÇËÜ\àÆË…ÞYÒ ÑãìÛ^¡ÎË…ÞYÒ ŽýÉYõ.“NŒî˜¾gJ— ½³¤S\:ɼ\è%àØ_=^’— ½³¤ûóÅ,jz—I'FŸpì1¶Nà“— ½³¤Sž?zžO™tJ–tBô/ä.R&ÝàØW¨Ö×(eÒ‰ÑÑ¿°#5eÒ‰Ñ#aÖ(«I§”I'FO8öç¹®ö…èš#–ÒgtGt};¡Õy¹Ð;sÀý Iæ”8£'û“h­íHé€3ú€c>Õ’Ì)pFŸY8Ýfòr¡w性ë³2/zg8¢‡µí=®ór¡wæ€Ã±¿Î3^.ôÎpD·§Cl­ÃLJœÑÑ?ž³´jßëR:àŒžpìýܲÉË…Þ™ÇÞ£µ'ê”8£·„gmd5ÉœÒOæ€#úûÜÀÎ˅☎èñÐkŽXJœÑŽýjÛsór¡8æ€#z>c¯9à)pFŸpÖ=iŸâœ—.0£·D.p< Õæ¼t“¹ÀˆÞŸ³´j.pJ˜Ñ-¡mÕ¯Ä)]`FwHÆ^¼ËH˜Ñþî£b_£”.0£Ïʬ›¼\Ìyæ„æ@ge^[ž¶ñr1癚Ðòí.Óy¹˜óÌ …ci¼\Ìyæ„Bú3çkFR:¡Œˆþ•u^:¡Œ>ñØûö\7y¹˜óÌ LäÇ=ßikn`J70™ˆè_8'4¥Èèé¯ÕÆx¹˜óÌ Dôq^[ªÓy¹˜óÌ Dô+¢z–VJ7Ñ'ûó.SsÀS:bŒÞî¾÷-kÔx¹˜óÌCôwO§ÎËÅœgŽ¢ßôQ<=¥#ÆèŽèùìX)Îyéˆ1z@úÓU©8ç¥#ÆèÒÓËë¼t…½ ´/ÒŸ-©¥9?änÜÁöÃ"zždcñ.#Ý@FŸpì=¶ôþäåbÎÓY‡<©§7o-s2¤#6˜32PoÞçÜÀš8¤32˜3éÏNä¢â¤3Âè†é£znàΣ;¢äcÄÖ'F =x¹PÛ‡èﮉÉËÅ=Žù2ˆ>ž]™Å§JéË0zè ù“»¨ù2Cú2ƒù2ödöí¼‰ÎË…â˜/Çþ|¢®}¯Ò—at‡ô×jã¼\(Žù2cèïóÁË…â˜/éö|¨­ÍyéË0zè ùó.SKqéË æË º?;Šs^ú2Œnpì×YMqéË0º#z>™“Ú.ì!}FDŸslû߃—‹9Ï|xå‡mYâÉËÅœg¾Ì_Èdz'´¸ÎK_f0_ÑûsJi-s2¤/Ãè†èùøïÅu^ú2Œîˆ~_úqÔ|™!}FŸðwoVíS:¤3Âèmž:ÙØx9Ÿu“í—ôú‰Sî—atCt¾YÕÞ §Ü/ÃèÇ>Fõ´‹)÷Ë0z ú;Ù¼œ¯´Œ>ý£{?j_¦Ü3Âèm"wà¾ËÌÚ;ì”ÞÄdÞ¢¿{ïw^.æ<ó&=Ÿ/¥µDë”Þ£;¢¿×:çåbÎ3oÐ[‹Y=obJo‚Ñ'ûë¹nòr1ç™71Ñž‘1·wØÆËÅœgÞ¢¡ÏɔޣÛ4ýk¼\ÌyæMà±_[š×y¹˜óÌ›@t‹³<ç¥7Áè ¯üC¯ø0¥7Áèm“:ÇæM4^.æ<ûN‹èí1‹s^ºŒnpì96OÊx¹˜ó̘ð|Øç˜ÒÚœ—ûû¨Íyé0zâYWöã¦Ü+ÄèÒ_{F&/w™Oéqöu€¿Ö§ÊøtÎÿSþ@â³9gûœnˆþÑæüëÇŧsþŸòßûÝ!Ý|ùbŸÎùÊCüô8þÝ×+¼ü7$¾AO8ö~/µ×_zòò_øÎï>ý9¹ïZÆ>yù/ÈüÎïÞN”9³¯³®ñrYéÍyôçMÎycsÝk¤6çMÎycsÑ›Ï#jsÞäœ76çѬëç1ŠsÞäœ76çaÚgŽê:ïrÎÓ'+@ŸýÚîq—‹9ïì.{°ŸÝx¹¸Ë8›óŽìV\ç]ÎygsÞõZ—¼\ÌyB~?TÎ…>xù/Hú7èÎùçhÞQSœKÅ9S\À]qï2!Lqˆ>ŸàkŠ ©¸`Š ½Î/Š vC»ïǹÍyçåâLqhìa巉Р¦8H¶®óƒ— ÅSºò>˜+.¤â‚).ñ™JVT\JÅ%S\êw™ÎË…â’)ý‘{ñ—RqÉ» ·íÊ;/ŠKv‡Eé>o±¾Ç/wØdz‡g.ØUÕ{J½'Ó{“ûì˜Þa÷ûûÁ®x‡Rïƒé}àý2Õ·È!õ>˜ÞÎÌâõzLï(Szfù‰zH½¦w8çŸÃ2kzRïƒé}àó"«ï°Cê}0½£žÏÑ>WMïSê}2½Ã>ä÷ |ñ‰zJ½O¦wÔ‡Üö¯…ÆË…Þ'ÓûÄ{ªzŸRï“é]y»_à­¦÷)õ>™ÞaïýaÕûû”zŸLqûqQTܔЛLq([ØûXß /Š»˜âP®ÒZù«Ñ%w1ÅÁ±±:bÆË…â.¦¸ uÛó¼ór¡¸‹)îª߬.©¸‹Ýã®OÒû^»Ç]òw1Åaú¹¾AO^.Gè­z¥m¼œ+®Dq &ó\õÞy9W£¤ßó.’âþÒítGô§çCñö/Ý¿ADO‹í©2x9W£gƒiÞV}¦ýCïüî^ùÓ6úäå\qŒÞÌ] />U¶&טâ}¶Üž¨;/Šc™8öûæQ¼Ç5™9atGôÞ¯²âdæ„ÑÑ#Ëþ{“™FOxå_÷¸äåBq,s‚ç|Îõ‰zòr¡8–9iú°±ÎºÆË…â:S\Ç;Э¨¸.Ç/pìϱFWMq2ñÂè鯯…ÎË…âXâÑýz'/ŒžˆÞí*ßãdâ…ÑgåwŸ¼\(Ž%^tÿŸµ5ÅI÷¿1÷Òs\Å/¥MºÿŒnþZi— Å9SœkOÊy¹PË4|îÀYtFšÌ0zâ+ßÎuO^.ÇÜ<ç÷TçäåBqÌýoÈ ½öÄKãåBqÌýGôž½|“î?£¢ØÌb’¹I÷ŸÑÒÇŒUïÎË…â‚)Ñ3r}ƒ^.DzøÊ×'³Œ>_¦øµ°Kº3Ñ?òÜ’N—‹9ϵ9/=hFŸ•±O^.æºÜ‘ÊèÓ÷Ý÷“— ½3G¬OÝÛ§ñr¡8æˆ!úußßgñ+1F·±9‹ÉÆ.1Fwxå_>¬ór¡8æˆÁ±¿ìÁË…â˜#Çnçö.“¼\(ŽÐ¢·{¥šþ‡žß¹òϺv÷ÇuéÇ1zëî \Õ»ôã:óã:‹n I7Ñ ÑWTœtݽÇUÍ›t=à•OÏâ5“n £OHÿè÷µ¯ÍyéÇ1z3äˆ5ÛÖºÆËÅœg~¢?߉ÏÚŽ“~£ûå9/ý8FwDæÕ±&ý8F@o§·jÒɤÇè=ï÷¸bï}“~£7óONâ.¾MH?ÎØNd@oç<«Ý6LîDft³BtãåbγȈn>·Yç¼\Ìy¶ÑŸCJ‹Ý6LîDfô‰èþØqÅ9/÷3z3äÃæYíSjÒ6æCúk­ë¼\Ìyæ#zö^M´štÝý£ßoÐV›óÒfô€W¾Õ×yé3úDt{N£.ÎyéÃ2z³üQŠÛän\c»qýžôW1Ñjr7.£¤¿:J/sžíÆ…ôlgÑ7é€3z@zŒ³úÕHîÆeôÄW~VÓ}&wã2ú4¸¹|ª‘ÉݸŒÞ ù°-¶~Ô— űì¤Gnf:/ŠcÙHíý7^.Dzxìõï´2{Àèéõî¸&³Œž˜¾wËL^.Dzö³ìÉì£7ƒ{B»³…&³Ʋîg/z‘&³ŒnˆÞbwÿ— űìûýƒÓ}&³ŒøÊÇ,¦}Lf=!=÷Þ¼ÉË…âXöÒíþák½yMf}"úûœÐÉË…ÞYöÀ Û¼x¢“Éì±ì¢¡o¡Éì£û}‹õZo^“ÙFwƒÝ°Ï-gå¼\èe}œåó&Lf=á•¿_Öu>y¹Ð;ËX¡ úäåBq,{à'Ú7Ñ«o‘.³β~êTgçå\qŒnˆþî{`¼œ+ŽÑÝ ;‘—sÅ1z º¥W¿ºÌ0zÂYWïéä²6£O8ë^…&/çŠcô慾ė űä¤ßó.jž”Ë䣤wÅäƒËä£;¤‡yñ-ÒeòÑà {Àƒ— űäþÝ[®¿{òr¡8–|@ôwö`òr¡8–|ð®O%n¼\(Ž% =Ÿ¨SMq2ùÀèæýGO•.“Œîˆn½Uì.“Œˆþ\(ŽíƒFôžQM´ºÜÍèþî=Îâw—¹ Fonº³PãåBq,wè­êA»Ì]0º9<}?éÃx¹PË]`ú¾cÅy¹PË]`zâw—¹ FOHÿÂ=Nž>ÏèÑß{/çßm}"úÎv™9aôæþ3½Ë̉³Ì ¢gêw—™F7‡]Ð[+žðâ2sÂèéѶD«ór¡w–9ù„ÞŠ{F\fN=½ù¾6y¹Ð;K¼À±¿z´N^.Ç/s÷SeÍ‹t™xq–xôúž—‰F7ýde¼\(Ž%^àØ_§;/Šc‰/tþ^.Çú ºµ(·‘}}@ú½ÎŸÅ;lÈ;,KûøÏº.¸Lû0ú½¬¡]Ø^þN+Ó>ÎÒ>~¿Lxñ+Ó>ŒnˆþþVi¼\è¥}}Xùd^—iFÏíÊt™öaô„¿{ß» '/zgi/dÌ&/Šci:éÔx¹PKû úû¤ÎË…âXÚÑßÏóÆË…âXÚÇ ÿ— ű´¢ÛôíÊ/Šcixåëg¨¹Lû0úÄW~O¼L^.ÇÒ>^H¼4^.ÇÒ>ˆþ÷ßeÚ‡Ñ Ñ{ÏjŠÛeÚ‡ÑÝaæd\ÅD«Ë´£‡O}"sðr¡8–ö³n^Û¬K^.Çò6ˆþþB>y¹PËÛ8J¼xßÞ /ŠcyDŸ³—¿Óʼ £¢ßƒë{œñr¡8–·Aô÷1çåBq,oÇþr‚— ű¼ ¾ò1Ö/'ÉË…â.ö Ç~K®ÕÞ"/ùÉÒ>žÃªÏ´2íÃè-Nýºñr®÷`iDoçY=¥4dÚ‡Ñ-`êã¬vA™öatGô<{u?lÈ´£üÝ_;•‚—s½3ú@ô÷³Íàå\qŒ>áïžOÌ«¤¸iFoÑô]¦ñr¡8–ö‰B÷ûÎË…âXÚ' ç¿/Šci|å÷»Œór¡8–öAô~î}‚— Å5¦¸¦Ï—¼\(Ž¥}à•gïq!Ó>ŒÞ¢ë/— ű´¤×óu!Ó>ŒnxìëN%ãåBq,íéaÕ½À!Ó>Œˆþî–¼\(Žåm ýÕUiòr1çYÞ& %Êþ{ȼM°¼ ¢·Ó«n`ȼ £»e5o2oÃèŽè÷óüUtCæm= ÝN[¿×/sžåm*³.y9côÇÞ}Û=x¹¸Ç±¼ ¢¿;ÀO^.ôÎò6:ܯ2E70dÞ&XÞÑ¿Ðï"dÞ†Ñ Ž=fõKiȼ £;¢Gî]•œ— ½³¼ {«z!ó6ŒžnåSBæm}ìkô<ÔÖ'ó6ŒÞ"ôŽÔÆË…âXÞÑÇuV½‰yF7D÷ûÂWßãdÞ†Ñ_ùE70dÞ†ÑÒ_§/Šcy<ö1‹Ý6Bæm} úº ‡ÌÛ0ú¬üî“— ½³¼MÀ/nE÷?dÞ&XÞѯ('ZCæmÝýt2^.ôÎò6ˆþ•/¥2oÃè÷WljàåBï,o¯ü˃N^.ôžLï©{y ^.ôÎÒ>pìóªv™öaôC÷Ÿo¼\è¥}ýãcÆ,~5’iF7HÝeŒ— ½³´ONtr^.ôÎÒ>þÚ}¼\è¥}=z–õ.Ó>Œ>ðØ};Ámðr¡w–5 ˜³jÕ+!³FŒÞbê§‹ÆË…ÞYÖÑg\Õ“:CfÝ¢Ð]Çx¹Ð;Ë!úWÞ eֈюÝÊ}Bf=!=l;=y¹Ð;ë,é­õªÞeg!FŸñ³SB&½îñr»"‡L:K:Aúì­Øç$dÒ‰Ñ ýêU½Ë¤£;¤¿2¥ÎË…ÞYÒ ÑßIæàåBï,é„èï/ÉË…ÞYÒ ÑÛØßã/zgI'8ö~V“!“NŒÞòüÑó|ʤS²¤¢!w‘2éÄèÇžYík”2éÄèÇ^ß‘š2éÄè‘0kÔ«.pʤ£'¢‡õêò”}}À+ß<Š÷÷”9+FŸpÖÕ{¼¤ÌY1zKØyÀªg¨¥tÀ“9à>[{¼¤tÀÝÝïu>Šz—8£;¢ç9«S:àŒðÊדÌ)pFODVÞ;ÒgôÇ~ný¬/zgxN·™¼\è9àéú¬ÌÆË…Þ™Žè3·÷¸Î˅ޙǞåÓ¬R:àŒîpì^ì0“Ògô€ô«Úa&¥Îè‰èÑ­ú<ŸÒgô Çî÷û{ñ+pFo‰{>ôb®2¥žÌÏÐçv^.ÇpDŸVvÄR:àŒîðʧŸÅ^Ü)pFH¿®,fÌR:àŒ>=§Wß"SºÀŒÞ2ájÓ×îy—‹9Ï\à„»ïGÕNé3ºÁ±_aůF)]`FwLµµ9/]`FDomTû¥t}VfÝäåbÎ3'4êÅݪÙ”Nh2'4±Ø‹{ÄR:¡Œnˆþ>/Òx¹˜óÌ …W>¼Ú:¥Êè¯üÖyé„2ú„ôQì¦•Ò dô–È›¸æYtSºÉÜ@H¯ŸšÒ dtÃô}µ1^.æë=ýŠYÍ] ¹–ÑÑÓË} ‡ì~ÏèÑ[ËVüN;än\FŸðwWugâ»q½ °/òʹ}·i¼\(ŽíÆEô÷è—ó» £ ·³•w* ¹—Ñýãòê)¥CîÆeô@cï·Þ‹û߇ÜËè³2öÉËÅœg»q‡ýhïÀ^ä`^ä0Ÿï¼\ÌyæE±¿º./sžy‘ˆþ…7è!½HF8öë Ôæ¼ô"=ý½k#y¹¸Ç17Ž}Z+vÒ dô6æm¶$sãåBqÌ „tó,¦}†tÝðØ÷µÎx¹Ps½ÑÊŠ“n £¢÷óªî‡Ò dô ÇÞ[5ñ2¤Çgôeš3'C:bƒ9#öæ}‚•5ÅIgd0gÑóy .*N:#Œn˜îUÿ}Hg„ÑÑÛiÕ^C:#Œzðr¡8¶?^ùW×ÄäåâÇ|@o}öêµ!}Fo¹mT»ãéË æË ¸GÌgÑ—Ò—atƒcϳº}H_†ÑÑß«ór¡8æËÀ+ÿú>¼\(Žù2˜}Ö¼È!}Fo}!¨¦¸‡ôeóerFF¿Ö{\çåbÎ3_Žýj廌ôeݽݯ2Å]ØCú2Œˆþœ7Qܵ1¤/Ãèýî­§;FéË0z¸òã*¯óÒ—Ì—h׆ۖæí¼\ÌyæËÀ±ß¯2­8ç¥/ÃèŽÆ~óçºÖ9/sž9#ˆÞÚóXY›uÒaô6Oll¼œÏºÉöË úNlœr¿ £¢Þªßi§Ü/Ãè>aÚûÁ®¶ÿ}Êý2ŒˆþN6/ç+-£O8ö»²öt1åžFo~%¾+kï°Sz“yˆþî½ßy¹˜óÌ›˜È›˜ûî<ãåbÎ3oý½Ö9/sžyhìóêÕó&¦ô&}"úû¹nòr1ç™71ÑɼW/¯óÒ›˜Ì›˜ö£>'SzŒnþz‡5^.æ<ó& ýÚÓ¼ÎËÅœgޢǨÏyéM0zâ+n'y%/çßm½M¸cåܼ‰ÆËÅœgßi!ÝZ¿œLé0ºAzžg1s2¥;ÀèŽé­êAOé0z@úÛ‘Å'ê!õ>˜ÞᕷŃæzRïƒéŽ=ËšÞ‡Ôû`zGc¿Îò;ìzLïö«<Ú¬é}J½O¦÷‰¾˜õËOÔSê}2½OÜyýZh¼\è}2½Ot‡µcõ>¥Þ'ÓûDÝqozñþ>¥Þ'Ó;¢Ÿ¾ÍºäåBï“)Ñï7è³Õ7¥â&SJ÷ÝÏuÃkŠ»¤â.¦8”ê¼ßßÏâW£K*îbŠC=ØÏ<ÒkŠ»¤â.¦8Ôi¤ÝkÝUSÜ%w1Å¡±_v\Å;ì%w±{¢ûý»ÏÚ=î’÷¸‹)ÑmÙkŠ»¤â½µS¯´—sŵ“(ÑÛåÛ³Î˹âÝýžvK'pª¸¿tûÝÝŸæ:µwØ¿tÿ= }ë†M÷—ß '¢÷‘ÕgÚ?ôøÎï>áœkŸª¸?ôùß½5ä¿ßwX«=U¶&טâšêCÎ'3'ŒnˆþœÈ|ÖîqMfNÝá•çv—q^.Ç2'ˆþìSôߛ̜0z"úû—¼\(ŽeNà•ïqxÖ'3'ŒÞZ‡Ý´Ž^{ªl2sÒ:SJ>´Üf]çåBq,ñÇ>®#fMq2ñÂèŽè﯅ÎË…âXâÑŸî÷^Ky5™xaôÄW~VÐ&/Œ>+¿ûäåBq,ñÒÑýȬ)Nºÿ¹ÿÍqôQûRÚ¤ûÏè†èï•Öx¹Pœ3Źö¤œ— űì¢ûs²OíËI“ÙFO8vkÛ:Ÿ¼\(޹ÿpοR“— Å1÷¿!'tô-ñÒx¹Psÿ½Ý/RQ¼ÇI÷ŸÑ Ñû›m¼\(޹ÿˆ3¶ï´ÎË…â‚)ùïó^罦¸ŠcÙxå¿ 8™=`ô ÇþÐZK27éþ3zk©¿]4^.ÇÜDÿ0_Ηናî?£¢÷ûé¢×rÔMºÿŒîˆnaÛ7jçåBqÌý‡ôz¾®I÷ŸÑκlG³šâ¤ûÏèþîÑË_N¤ÿÎè­ íþ7^.ÇüwDÏÞ¶±w^.ÇüwD7[žÖx¹Póß=¶'«ÎË…â˜Ç~Ïùâî¼&pFwD¿Ã:/Šc8¢¿÷Ã/Š»˜âà)ä^þVyIÅ1^ùûÉjýf5y¹PsÀû©Ÿi/çŠëÌGôég5sÒ¥Îè†èïèÆË¹âݽ=‡Q×2']:àŒpì1Ž«æÇué€3ú„c¯-ìÒƒfôÖ‘y¯uů…]zÐyÐ~+.kß.ºô Ý=|V±.=hFwDÿ°ËŽÚð.=hFHϱô`çs^zÐŒ>+cŸ¼\Ìyæ÷þ£'«.]àÎ\`DíÜö¿w^.ætæwäˆÝ·÷³–æíÒîÌFôè±}«ì¼\(޹Àˆþœzµ+]ºÀŒîðÊßô³ÖϪK˜ÑŽýʲ⤠Ìè Çþz›H^.îqÌîñ£4o—.0ÿÝS%v^.~wæˆõñ³;¬tÄ:sÄýÝu¡ór¡wæˆAzÜ÷¸â3­tÄÝÝÛÚ!–ÿîÒcô€ôW7­àåBïlG*¼òýÚÞß“— ½3G Ò_»ï'/zgŽXŸº·OãåBqÌCô¼®­¿MçåBqÌCôç4êb²±KGŒÑÓwÖy¹PsÄúÔ öàåBq̃czïß"¥#ÆèŽý9´°•ð?ôüΕŸpì÷Jëµýq]úqŒÞ:òe†½¨wéÇuæÇ!zÜï2£x‡•~£ûýTYÜÞ¥Çèéõ$s—~£¢ÿ:Ðéªé]úqŒžˆþ½K?ŽÑ'¢·1ŽVTœôã½:ceXµë‚I?Θé¶¿¿w^ÎÇè†èϑȽÖUɤÇènp_¤Wí;­I?ŽÑ^ù—/¼œ+ŽÑ'¢{^[χÉËùœgôfpOhnß./sžùqˆî÷ý}Ô¾”šôãÝý|µ»ŒI?ŽÑÑ¿Ð÷À¤Çèé÷J[ÌY™ôã=ñ¬Û>©äåü.ÃèÑßOV“— Å17Ð ŽXãåBqÌ 4Ø}TÝ@“n £¤÷³|—‘n £;¢·ËªYb“n £¢ûì[µàåBqÌCô~?ØÕ:Äšôã½rÄÎ<¬ö.cÒ3æÇ<Õȯ~Ôæ¼ôãÝàØo½{2›ôãÝ=|lù:çåbÎ3?ÑÇÈmÏHðr1癇èžóÈZÏF“~£7C;Rï»Ì(¾MH?ÎØNdDŸglýë:/sžíD¶BtãåbγȈÞãÚži—‹9Ïv"#úsn`±Û†ÉÈŒ>ݺ^|¶‘{½òaïµî,¾MHؘ 鯵®ór1ç™ ŒèžvŒZî¤ ÌèŽè-Î㬥ûLºÀŒðÊÛY^ç¥ ÌèÓà.ìksÄ&/sžíƵüQŠÛän\c»q=¢mîçåbγݸˆþî(e¼\Ìy¶Ñ?<¢è€›tÀ=Ý{”¿ÉݸŒžpì¯oÉËÅ4Ûkp'²WO52¹—Ñ›¡Ý¸Í¶7©ÆË…âXöÑý~‡ÍZ“ÙF78ö×ÞãåBq,{€è_ùN+³Œˆþ…î¸&³Œžþê–™¼\(ŽeìgÙ“ÙFo†|Øû¹®˜-4™=0–=0Ø“ùÜ\¡ÎË…âXöŽý96jŠ“ÙFw8ö1«§UšÌ0z@º·jÚÇdö€ÑÑïWè-O›¼\(Že½glç ^γŒ>!ýuNèäåBï,{`ȃn÷+tñ{ÌË úúšÌ0ºá±_ËyÐ\ï2{Àènpv½–=0™=`ô@ôè£zÞ„É죧ÁÈçöt‘¼\èe¬Ð}òr¡8–=p´øìÇU{‹t™=p–=ðS§:;/çŠctCôwßãå\qŒî^؉켜+ŽÑþî£moRÁ˹â=ᕯ÷trÙ ›Ñ'¼ò¯ÎB“—sÅ1zóB_âÆË…âXòÑŸywÕ<)—ÉF7HoÓÚ3­Ëä£;¢Û5«»2]&=¼°àß½Ýo±5ÅÉä£Oxå_ÙƒÉË…âXòÁ»>•¸ñr¡8–|@ô¸ß {í-ÒeòÑ ½üTé2ùÀèŽè÷sr5Áî2ùÀèèïnZÁË…âØ>h‡©YM´ºÜÍèÒgV¿Û¸Ì]0zsÓ…/Šc¹ D÷Õ\æ.Ýý~•ÚNú0^.ÇrˆþÞ±â¼\(Žå. ½í+qðr¡8vú<¼ò_¸ÇÉÓç} ú{ïÀàåü» £Oxåëç»Ìœ0zsÿ™ÞeæÄYæÑ=sëwÑy¹Ð;ËœÀ±Ç8¼æŒ¸Ìœ0º#ºMÛ­ÎË…ÞYæÑß½>‚— ½³î÷ðÊßOV^ûNë²û=£Oxå_=Z'/Šc‰GÙƒÖŽ¨y‘./Î/?Ú3â2ñÂèæ¡Ÿ¬Œ— Å±Ä ¢¿O%v^.Ç/^èü¼\(Žõ=€tó­ƒ\òr¡¸`wXD÷¾}1¼\ÜaYÚÇÖuÁeڇћÃØÛ–1k¼\è¥} Ýb;w ór¡w–öñÔß*— ½³´¢‡_Õ“y]¦}=ý »2]¦}=áïÞrÛ¹¼\è¥}¼1›¼\(Ž¥}|è¤SãåBq,íƒèï“>:/ŠciúyÞx¹PKûx¡ó¿ór¡8–öqØaæ~®+*N¦}=ᕯŸ¡æ2íÃè^ùWâeòr¡8–öñBâ¥ñr¡8–öAô/¸ÿ.Ó>Œnpì9·Ü…ñr¡8–öAô{Ò÷£¶'ÔeÚ‡Ñç>‘9x¹PKûÀ+ïíð¢âdڇѧOý…|òr¡8–·q”x9}Ë]4^.Çò6ˆž÷=î,~§•yF7<ö{¥ÍšâdÞ†ÑÒ_{Äœ— ű¼ ¢¿ÝàåBq,oÇÞî·‰Z7-—yFpìéÛôàåâ-’¥}=î÷¸Y|¦•iFoqêoÔ—s½Kû úˆ^=¥4dÚ‡Ñ ÑíìÕ.è!Ó>Œîˆ~ß7·œ•ór®wFø»¿v*/çzgô§~¶¼œ+ŽÑ'¼ò׵횼œ+ŽÑ[4}—i¼\(Ž¥}¢Ðý¾ór¡8–ö‰ÂùïÆË…âXÚÓ÷»Œór¡8–öAôû×Ü:N/ŠkLqMŸ/3x¹PKû zôܱÉË…âXÚ'ºîñÒx¹PKûDÿQ¾.dÚ‡Ñ Žý~ŸµgÚiFwD·û颸8dÚ‡ÑÒ_Ý2ƒ— ű¼ ¤¿º*M^.æ<ËÛJ¼Üï°Eÿ=dÞ&XÞÑÇìU70dÞ†Ñ Ñí¾¿ó6!ó6ŒîˆgVý÷yFDï÷Jk570dކѳ2ë’—ó÷8FO=¸¶çùÁËÅ=ŽåmàØ_à'/zgy›@Fú8¢ö¥4dÞ&XÞ&üGý.BæmÝàØ3«g&†ÌÛ0º#ºßOV³ö¥4dކѽmçÇ/zgyH÷«zêAȼ £Oxå/ßúQO^.Çò6zGjãåBq,oƒèq¿¿n!ó6Œnxì±}«4^.Çò6~Ïù¬¹!ó6Œˆþ>•8x¹PËÛ ú‡EÅ;¬ÌÛ0ú€c¯wA™·aôYùÝ'/zgy›€=^îÇ‹âµÌÛËÛ úh½¬w™·atCôwÒÉx¹Ð;ËÛ úW¾”ʼ £¢¿;N/zgy8ö—¼\è=™ÞS÷ò¼\è¥}àØíÚ²F“— ½³´O ݾñr¡w–öAô¼_tFdÚ‡Ñ Ò_wãåBï,í…œ— ½³´¤¿vß/zgi8ë®~XQï2íÃèÑÛì[¾nðr¡w–5¿»o{À'/zgY£˜úé¢ñr¡w–5BôôsK´v^.ôβFQè®c¼\èeý+oÐ2kÄè0éÕ¾!³FŒžpì繞¼\èu‚cŸ¶­uƒ— ½³¤SüìT£I'Fo{¼Øæ7^.ôÎ’Nˆž÷Ø£Öç$dÒ‰Ñ Žý¾ËŒ¢ÞeÒ‰Ñ=.)u^.ôÎ’NˆþN2/zgI'8öW—äåBï,éÇÞ¯í=nðr¡w–t‚co¶uŸ¼\è%òüÑó|ʤS²¤¢!w‘2éÄèÇ~¿AŸµ¾F)“NŒî^ß‘š2éÄè‘0k”Õ¤Sʤ£'û5¶ÔGòr®wFpìçUJ8™ œp÷ýܾ]t^.æ‡û¥t}VfÝäåbÎ3'4Jï÷-OÛx¹˜óÌ Mè Åv—é¼\Ìyæ„"úû¼HãåbÎ3'^ùìÕsBS:¡Œˆþ•u^:¡Œ>ñØm{®›¼\Ìyæ&ð&†U70¥˜Ì Dô/œšÒ dtƒô×jc¼\Ìyæ"úýn¸¥:—‹9ÏÜ@@oí¦ÏÒJé2úDc¿ºm§O^.æšoòàå|Ö1z"ºÏ³Ú·pÈî÷Œ>ý~3Ýž¬/çßi}Âß=bëg5y9W£·öEŽûmbõ&/Šc»qý}zçåü.ÃèdzºSiÈݸŒîˆþ1ÎV<¥tÈݸŒˆ~ÙÜ΃^.ôÎvãVÆ>y¹˜ól7î°íÒ‹Ì‹¦óó—‹9ϼHHu]0^.æ<ó"ý oÐCz‘Œˆž×ý<_{ƒÒ‹dôDô÷®äåâÇÜ@8övm÷¸ÉË…â˜87|K27^.ÇÜ@Dÿè÷B_{—Ò dtƒô×Zg¼\(޹ˆ>¦m½}œ— Å17ѯ{èÅ^CºŒ>áØ³méýÉËÅœ§³yR³myÚÎËŬcÎÈ@½ys½æéŒ æŒ ºß+m/*N:#Œn˜Õs‡tFÝýcÜ‹]-??¤3ÂèQ¡/Šcûãà•uML^.îqÌ—Aôë~“ŧJéË0zè ¹Å–ll¼\(Žù2ödöí¼‰ÎË…â˜/Ç~¿ÇO|Ò—atGô÷jã¼\(Žù2cèïóÁË…â˜/év¾ÖuaH_†ÑÛ@_È-«)î!}™Á|D¿‡^œóÒ—atƒcO«¦¸‡ôeÝ}zß:Ì8/sžù2€ÞÎûÙ¦Õvm éË0ú„Wþ{«ùïCú2ŒÞúB>®-ñÒx¹˜óÌ—At³sKóv^.æ<óeàØýÚ¾Ó/sžù2ˆþ1g5_fH_†Ñ'ûýlSìS:¤3Âèmž:ÙØx9Ÿu“í—Aô/œØ8å~F7DÕÞûSî—at‡cϳzÚÅ”ûe=ýl ^ÎWZFŸˆþÑïW©ÚW£)÷Œ0z›èû|‹­[fãåbÎ3oÑß½÷;/sžyˆ>ÏØvç/sžyþZ뜗‹9ϼ @oÞÎêySzŒ>ÑØßÏu“—‹9ϼ‰‰:F¶±½Ã6^.æ<ó&ý }N¦ô&ݦéwXãåbÎ3oŽ}ô-Íë¼\ÌyæM º÷,ÏyéM0zÂ+¯6gíć)½ FoíÚ¶y—‹9ϾÓ"z¿ßa[qÎKw€Ñ ÑÝÇæI/sž¹ˆþáEzJw€ÑÒïëxÔÞ"§t=ñ¬+ûqSîbô ÷מ‘ÉËÅ]æSú8ûÙÐnÜ5Ù8>óÿ”?ñÙœgûœn'ì~ï‹71>óÿ”ÿ†Ø7èŽèOO濊ŸÎùÊCüô€ôÇŠ\®|ðòßø=á•·õü÷ñéœÿ§ü$¾ó»OH¿›¿ß.ƧsþŸò_ùß½íTÊåkáøô.óO9€¬ôÎæç»œóÍytå[_ÞßùœïrÎw6ç;vFæU›ó]ÎùÎæ×ñ9orΛóhÖÝÏ6WÔæ¼É9olÎ;î]]ç]Îyúd{ïÏ£Úœw9çÝe`ÿyßî°ÆËÅ]ÆÙœGOÔ¾~»àsÞåœw6ç]¯uÉËÅœ'ô齌}ðò_ôoÐç ߤnz¯)Î¥âœ).àWb?¬¦¸Š ¦¸À™R÷šâB*.˜âB¯óÆË…â‚Ýã½ËWb~ y ¦8D¿Ÿç«o!Lq°ÿ¼/»´¸âB*.˜âé=–È\q!Lq‰¾¯g¬pÅ¥T\2Å¥~—é¼\(.™âÐØmí½Ï—RqÉés»Ç9/ŠKv‡MÜY(gí›ò›LïˆÞ}é’ÊõžRïÉôŽ’÷¬ŸGMï)õžLï‰O%Ž¢ÞSê=™ÞQÊ«÷í-²ñr¡÷Áô>pŸ“>kzRïƒéuA·X¾Ïs½©÷ÁôŽú]ôõl®÷!õ>˜ÞÇ'':Ÿ¨‡Ôû`z‡W>^|¢Rïƒé=úÒa†ë}H½¦÷ÏD®¾Ã©÷Áô>qµËkzŸRï“évA¿–3йާÔûdzŸè+±m_ — ½O¦÷‰Þ"¯%KÌõ>¥Þ'Ó;ûµæ.¸Þ§ÔûdzGôyn³.y¹ÐûdŠCWþ´eÿ;WܔЛLq>[Ç{Mq—TÜÅw¡oÔãðâW£K*îbŠCcŸ¶t€çŠ»¤â.¦8Øi$–N¡\q—TÜŇèy.ÙB®¸K*îb÷8Doë‰üwÉ{ÜÅéméíÃwIÅzk§^i/çŠk'Q¢·Ñ·/f—sÅ1º5˜«|Ž·))î/ݾA÷» ·åÔª¸¿tÿ=ÝÛµ}³ ^ÎÇè gGõ™ö=¾ó»Oxå­/{¨âþÐçw~÷ÖÿÞb{o¼\(®1Å5”â¾–+\q2sÂè†è}œËIÜ\q2sÂè¯|´í.ã¼\(ŽeNÝî·‰¢ÿÞdæ„Ñ^ù×=.y¹PËœà9ß–½B\q2sÂè­¡>'×ÚYˆ+NfNZgŠëè ùµÍºÎË…âXâÑ[\Góšâdâ…Ñ^ù××BçåBq,ñ‚èýj[ö x¹PK¼à+?«Nh“‰FŸ•ß}òr¡8–xiÈý?Ƭ)Nºÿ¹ÿ ¦y¯-gÕy¹Psÿý½Ò/Šs¦8מ”ór¡8–=hŽO5*:#Mf=áØOßÖùäåBqÌý‡sþ•Ꜽ\(޹ÿ-ðŽÔ5ñÒx¹Psÿ½=À‹÷8éþ3º!zØ·'«Î˅☎èæQÝפÎèŽèïwXçåBq̇¿ûk?lðr¡¸‹)]ù‘åo•—TsÀá•?ÇöÍjòr¡8æ€÷S?Ó6^Î×™Žèýš9éÒgtë§Þn¼œ+ŽÑÑÛMoµÌI—8£{G«ùq]:àŒ>áØë_ »ô ½utÒ‡]Õ¯…]zÐyÐþ´â®}»èÒƒftƒô™UG¬KšÑÑï›ÜÒ§”ÏyéA3z@z\×QK}téA3ú¬Œ}òr1ç™ Üûž¬ºt;s=íÜö¿w^.æ~v‡•ŽXgŽ¢¿».t^.ôÎ1Ho±œ™Èõ.1FwHϵo!ÿÝ¥#ÆèèïnZÁË…ÞÙŽT8뮾½¿'/zgޤ¿vßO^.ôα>uoŸÆË…â˜#†èÙÏ­¿MçåBqÌCôûݰšlìÒctÇô݇u^.DZ>u‚=x¹PsÄଛ¾9¡ÉË…â}à±çæ^ÎpFŸpì#7'tòr¡wæÇuä˸gQïÒëÌCô8ãÅ;¬ôãÝàØ³W÷€wéÇ1ºCz=ÉÜ¥Çèè¿Q5½K?ŽÑŽý z—~£ÏwaßW¾¨8éÇ1z3tÎÈãÖÞ MúqÆü8D÷±¿¿w^ÎÇèÇ>Îmµ1^ÎÇènp_d;¬öÖ¤Çè¯üË— ^ÎÇèÒïÕÆjO•&ý8Fo{qŸÛ·‹ÆËÅœg~¢Ûì[®²ór1癇è÷ãÅuÔî2&ý8Fwk?ê{`Òcô€WÞ¼š³2éÇ1zâY×·}RÉËù]†Ñ'¼ò¯'«ÉË…â˜hG¬ñr¡8æ"zÜï2E7ФÈè†èž­|—‘n £;¢·ÑªYb“n £{[µàåBqÌCôvåQëkÒcôf†Op³Ú»ŒI?Θg°¶[µ9/ý8F78ö«U{2›ôãÝý9¹ï¬}»0éÇ1z zαí ^.æ<óãàØÛýD]ëÙhÒcôfh/ðýd5ŠoÒ3¶ÑG³­]çåbγÈVè‚n¼\Ìy¶Ñ{¿¶gZçåbγÈðwŸgµÛ†ÉÈŒ>áØïw™,>ÛȽÀŒÞ 9¡gß¾4^.æ8<½½öé2ùÀèÇ^ªt™|`tGô~ßa‹ v—ÉFDwÓ ^.ÇöA;L}D5Ñêr4£OHϨ~·q™»`ôæ¦; 5^.ÇrˆîvVO|p™»`tCô'oS¼ÇÉÜ£;¢¿w¬8/Šc¹ Dï³m_‰ƒ— űÓçá•ÿÂ=Nž>ÏèŽýµw`ðrþ݆Ñ'¤×Ïv™9aôæþ3½Ë̉³Ì ¢ûýDÝjßm\fNÝàØŸóejΈËÌ £;¢ßo¦[¢Õy¹Ð;Ëœ ú»×Gðr¡wÖýÒ¯±í‡M^.ôÎ/ðÊ¿z´N^.Ç/Žrs^ó"]&^œ%^ý {F\&^ÝàØ_OVÆË…âXâÑß§;/Šc‰/tþ^.Çú@ú9·rÉË…â‚Ýa½ùöÅlðrq‡eiÿY×—iFoŽÒ>9¶ŒYãåBï,íé÷Jµž.Ó>ŒnþúVi¼\è¥}&Fõd^—iFÏíÊt™öaô„W~žÛÎ…äåBï,íã…ŒÙäåBq,íãC'/ŠciDŸôÑy¹PKûøÐÏóÆË…âXÚÇ ÿ— ű´¤‡WQq2íÃè ¯|ý 5—iFŸpì¯ÄËäåBq,íã…ÄKãåBq,íƒè_pÿ]¦}ÝàØýÚrÆË…âXÚÇaçÿ8ÚžP—iFŸúDæàåBq,í¯|ÃŠŠ“iFŸpì¯/ä“— ű¼£Ä˽Údñ»ÌÛ8ËÛ z<ɇâwZ™·atƒcÏvÌYSœÌÛ0º#ú{˜ór¡8–·Aô·;¼\(Žåm𕟇׺i¹ÌÛ0ú€c÷ÜÞ /o‘,íw÷-W9y¹Ð;KûÄ©¿Q7^Îõ,íƒèù¼ÃÖì!Ó>Œnxì³Ú=dÚ‡ÑÑí~ƒž5'4dڇюýµS)x9×;£8õ³Íàå\qŒ>ÝŸ4oíÜiFoÑô]¦ñr¡8–ö‰B÷ûÎË…âXÚ' ç¿/Šci|å÷»Œór¡8–öAôf¾uœ^.טâš>_fðr¡8–öAtÏܱÉË…âXÚ'ºîñÒx¹PKûDÿQ¾.dÚ‡Ñ ÒçµíT2^.ÇÒ>ˆ~ß7«{C¦}= ýÕ-3x¹PËÛD×]•&/sžåm¥>®VõßCæm‚åm=/«º!ó6ŒnpìáÕ¼Mȼ £;¢ßogUÿ=dÞ†ÑÑûyný¨ƒ—‹9Ïò6•Y—¼œ¿Ç1úxêÁµ=Ï^.îq,o÷WøÉË…ÞYÞ&P·ó~²ª}) ™· –· ÿQ¿‹yF78vËꙉ!ó6Œîˆnö®JÎË…ÞYÞ½oçÇ/zgyH¿ï°ÅSBæm}ÂYgsëG=y¹PËÛDè©— ű¼ ¢ÇýL[L¸…ÌÛ0ºá±çö­Òx¹PËÛ@z?·ýïÎË…âXÞÑß§/ŠcyDÿ°–Gñ+ó6Œ>àØë]ÐCæm}V~÷ÉË…ÞYÞ&`î¢GqÏHȼM°¼ ¢§µ²ÞeÞ†Ñ ÑßI'ãåBï,oé_øR*ó6Œˆþî8¼\èåmàØ_tòr¡÷dzOÝËkðr¡w–öcŸ×–5š¼\è¥}bèþó— ½³´¢DæQtFdÚ‡Ñ Ò_wãåBï,í…œ— ½³´¢¿wß/zgiD7Ç(ê]¦}}À±gÛòuƒ— ½³¬þÝÛ¶|òr¡w–5Š©Ÿ./zgY#D穲Ö>dÖˆÑ- ÝuŒ— ½³¬¤á Zf=&zµïAȬ£'û½Ö­g '/zg…àØ‡okÝàåBï,é?;Õ(dÒ‰Ñ[À/¾¹À— ½³¤¢‡÷m¯PçåBï,éÇ׿„/zgI'HeJ— ½³¤¢¿“ÌÁË…ÞYÒ Ñß=^’— ½³¤{óí=nðr¡w–t‚¿û['ðÉË…ÞYÒ)Ï=ϧL:%K:!úr)“NŒnˆnç<¼Ö×(eÒ‰ÑÒë;RS&=fF5é”2éÄè Ç}K}$/çzgôgÝu¯´µû{Êœ£O8öz—”9+Fo ;\Õ3ÔR:àÉð„çŒÌím¢ór¡wæ€#ºµ¾n¼\è9àˆîgßNhu^.ôÎpDÿB’9¥Îè ¯¼[uï@JœÑ»ÅÖÏjðr¡wæ€gát›ÉË…Þ™ž®ÏÊl¼\è9àˆÏSe-ñ’Ògtƒc#f¼\è9àˆn™ÛrçåBïÌGô´j‡™”8£'»Ç–=H^.ôÎp8ö>úQ{¢Né€3zKØóá¬&™S:àÉð }n`çåBqÌGôˆ³êˆ¥tÀÝá•ï}{®s^.ÇpDϧ#tÍOé€3ú„c¿Ÿ¨­8ç¥ Ìè-‘ œí<ŠO•ÒNæ'Ü}ß·o—‹9Ï\à„ôYýJœÒft‡ô3³x—‘.0£üÝÇ}ƒ¯}%Né3ú¬ÌºÉËÅœgNh¢Î϶–-Lé„&sBºB}»Ët^.æÛÜN!Ÿ¼\Ìyæˆ%Ü}?¶¬QãåbÎ3G Ñß=:/sž9bˆ~?ÐGñö”Ž£;¢çãŒç¼tÄ=ýþ?UžóÒcô ém”×yé 1zh?¬ë¨­óCîÆl?,¢Çsx–fÝûaÝ!ý•9q^Îg£¢§Ù–!^Îg£'¢{ÏjßÂ!»ß3ú@ôûyd{²¼œ§eô ÷yný¬&/çŠcô6:úݯ͛h¼\(ŽíÆEô÷è—ó» £ûó¹®æË ¹—ÑÑ?²·â)¥CîÆeô@ôy?Yem§Ò»q}VÆ>y¹˜ól7î°íÒ‹Ì‹¦óó—‹9ϼHHu]0^.æ<ó"ý oÐCz‘ŒˆžOÚÚô^$£'¼ò¯]ÉËÅ=޹ˆO—ZºoH7ÑÛ@~Ü=ç­¶;oH7p07p@_¦Ï£ö.3¤Èè鯵Îx¹Ps=/ßzû8/Šcn ¢[ïÅ^CºŒ>áØ‡oéýÉËÅœ§³ù2§myÚÎËŬcÎÈߨãéÕYs‡tFsFÝmgQqÒatÃô«znàΣû€îÀÌb¯Î!F =x¹PÛ¯ü«kbòrqc¾ ¢OÏã*>UJ_†ÑÛ@_ÈŸô~Í—Ò—Ì—°'snçMt^.Ç|D³WO|Ò—at‡WþµÚ8/Šc¾ ¢¿¿Ï/Šc¾ ¤›Ï£ÖuaH_†ÑÛ@_ÈûUMqéË æË ºÏvŒâœ—¾ £{X5Å=¤/ÃèŽèã^ë²¶ {H_†Ñѯ˜Ûþ÷àåbÎ3_^yó-KáØŸ½ÿÅY'FoóÔÉÆÆËù¬›l¿ ¢áÄÆ)÷Ë0ºAúÈjïý)÷Ë0ºCú9ª§]L¹_†ÑÑßÉÆàå|¥eô‰è=ÛQûj4åžFoz¾uËl¼\ÌyæMÌ®{ïw^.æ<ó&}4Ûvç/sžyþZ뜗‹9ϼ @oÏaÅó&¦ô&}¢±¿Ÿë&/sžyí¹úöÛx¹˜óÌ›@ô/ô9™Ò›`t›¦ßa—‹9ϼ 8öô-Íë¼\ÌyæM úýŽPžóÒ›`ô„W~œÛ÷ùäåü» £·‰vmXÛ¼‰ÆËÅœgßi'ìÕymçEv^.æý½gdòrq—ù”>Ï~¢ÌÉýt1ÿ\ùùéœÿ§üÌÏæü<ÛçtCôv­³ùéœÿ§ü7ľAwD·¸ŽééÎËCüô@toçr&òütÎÿSþß '¢÷¶&ç§sþŸò_øÎï>!ÝÇrúütÎÿSþ 2¿ó»·=×õu¿Ìüô.óO9€¬ôÎæçMÎycs=×ÝŠ«®ó.ç<}²ôy¿Iµ«6ç]ÎygwøTynwXãåâ.ãlΣ”W¬i^>ç]ÎygsÞõZ—¼\ÌyBž±ìLœŸfÈÿ)ÿIÿ}"z;Ï¥ßWœKÅ9S\À3ÐÇÑjŠ ©¸`Šôyõ¥Ã W\HÅS\èuÞx¹P\°{¤ÛrÒ¿Ç…¼ÇSêºV~›©¸`ŠCô1–ž\q!LqèÊç\öMpÅ…T\0Å¡^ÜîKÂ+.¥â’).õ»LçåBqÉ—Ÿ$Ø‹÷¸”ŠK¦¸Äßi×{œór¡¸dwX˜l\{uò;lÊ;l2½£±G.~×{J½'Ó{“ûüï.l®÷”zO¦wÔë#Ûò}žë=¥Þ“馼r{‹l¼\è}0½ÃtßÚÇŒë}H½¦w”ll¾œVÉõ>¤ÞÓûÀ.p+¾E©÷Áô>°;ЊOÔCê}0½Üퟨ‡Ôû`zG©Îsu…¸Þ‡Ôû`zŸœF]|‡Rïƒé}âÎÀmÖô>¥Þ'Ó;ê¶ñdNŠOÔSê}2½OÜ=oýZh¼\è}2½£Li‹ Ìõ>¥Þ'Ó;ê?ÿî³xŸRï“é]ù9¶Y—¼\è}2ÅMÜ‹;ZMqS*n2Å¡\¥ÍcxMq—TÜŇ:Nd_:pÅ]RqSÌ”žGzMq—TÜÅwáô~^5Å]RqS¢·5íÃwIÅ]ì‡úÏÛz:-¿Ç]òw1ÅAzÙkŠ»¤â½µS¯´—sŵ“(ÑûÖ!–*î/½ƒnˆþ{£TIqéö º#ú³!õ¬½Ãþ¥û7èé™Û7«àå\qŒžˆþœbV|¦ýCïüîÑãžóY{ªüCŸßùÝ[kø,-«=U¶&טâÊUæ²o‚+NfNÝì0s-ý*¹âdæ„ѽ5ÜMË‹Š“™F;Ì\Uÿ½ÉÌ £'¢¿ïqÉË…âXæÎù‘Kç@®8™9aôÖ::½/½¸¹âdæ¤u¦8Ô]gæ6ë:/Šc‰D:…Ƭ)N&^ÝýýµÐy¹PK¼ ºgÛ²ÁË…âXâ_ù³ê„6™xaôYùÝ'/Šc‰—{ïDz[‡+Nºÿ¹ÿˆ>ZßrV— Å1÷¿¹^i— Å9SœkOÊy¹PË zž³êŒ4™=`ô„cï±­óÉË…â˜ûçü+Õ9y¹Psÿòa»o‰—ÆË…â˜ûè}Äö.Óy¹PsÿÝOßáï^þr"ýwFomh÷¿ñr¡8æ¿#ú¼õžÅ/'ÒgtkŸô5:‹÷8é¿3º#úǵîÂæŠ“þ;£¢ßw®ò=NúïŒ>0ýܾ˜ ^ÎÝFŸðÊßïÏ£æÇ5é€3zkð ô{¯í\hÒoÌGô|N£¶šâ¤Îè†èï<­ñr¡8æ€#zÏ\:ÄrÅIœÑÑu¿/~9‘8£'üÝ_o‘ÉËÅ=Ž9àˆÞÆÜÞ¤&/Šcx»ôòÆË…â˜è·ˆçödÕy¹PsÀ<ÿ}Vwç5é€3º·K¿Ã:/Šc8¢¿÷Ã/Š»˜âЕ¿Ÿ¨«ß*/©8æ€7xú|Û¾YM^.Çð~êgÚÆË¹â:sÀýV\«fNºtÀÝÐØß;ЗsÅ1º#z»bË;/çŠcô€c?íðš×¥ÎèÑ¿ðµ°KšÑ[GçŒ\£úµ°Kº3Ò-·¤SçåbÎ3ÑǽÚ±.=hFwDÿˆ°£¶¼KšÑÒ¯hG-õÑ¥Íè³2öÉËÅœg.pï?z²êÒîÌFô뺶ýï—‹9Ï\`Dç<©Q›óÒftGt{ÎP«½Ëté3z@úy-g¬ð9/]`FODÿˆgÓHéɪK˜Ñ'¢¿/“— Å1¸›öe/Šc}ýzviÕ¾tÙ÷€Ñ ŽýõÚx¹P뺀èý~+v]è²ë£¦ï öàåBq¬ï¤aÎ˾ŒÞú¿ºÀý±ez-Ý×eò¡3¸#GìéYKóvéwæ#úxÒûµ¯]ºÀŒnˆ>ï+Öv¬té3ºÃ+öíéÂy¹PsýWYqÒfô„c½M$/÷8æ÷øQš·K˜ÿî©¿;/¿;sÄúøÙV:b9bþêºÐy¹Ð;sÄú'ga_ÅgZéˆ1º#zÜŠ‹Zχ.1F>t7­àåBïlG*¼òiÛû{òr¡wæˆAúk÷ýäåBïÌëS÷öi¼\(Ž9bˆ~Ý÷8«å¬ºtÄÝ=Z¯&»tÄÝ1}÷a— Å1G¬O`^.Ç18ëžÏ6Å·Héˆ1ú€cŸ±¹ƒ—sœÑ'»]›:y¹Ð;óã:òeî±¢Þ¥×™‡èóñß‹wXéÇ1ºu¸+3«{À»ôãÝᕯ'™»ôã=:<åäÙ_Ó»ôã=á•ÿ‚Þ¥ÇèÑ»ßoEÅI?ŽÑ›hÎgµë‚I?Θ‡è#ö÷÷Î˹âÝýºŸçG­«’I?ŽÑÝà¾ÈXºaSÅ™ôã=à•ù2Á˹â}Ü{n=&/çsžÑ›5|ÞÄYK6šôãŒùqˆžçØr•—‹9Ïü8D¿µ»ŒI?ŽÑÑ¿Ð÷À¤Çèè÷ÿ°š³2éÇ1zâYgÛ>©äåü.ÃèÑßOV“— Å17Ð ŽXãåBqÌ 4Ø=«n I7Ñ ÑÇ=ëªwé2º#z¿×ùb–ؤÈèèù¤ûjïq&Ý@FŸˆþa­µ±&ý8Fo†:G?fí]ƤgÌCôç;q?js^úqŒnÝÀ«Ú“Ù¤ÇèŽèÏI^³öí¤Çèèí¼Ú¶g$x¹˜óÌCcϸß&j=MúqŒÞ íHͱœNËç¼ôãŒíDôvëhë_×y¹˜ól'²º /sžíDFtËØži—‹9Ïv"#úÈ^í¶ar'2£OD÷û-ò*>ÛȽÀŒÞ ù°×ؾ4^.æ“.0£¼òOׅ✗.0£Oƒ»°ssÄ&/sžíƵüQŠÛän\c»q}<{ŠÏór7.£¢¿;J/sžíÆEôô³è€›tÀ==®Yþj$wã2z±¿¾]$/oÐl7.{DõT#“»q½Ù@]•®íMªñr¡8–=@ôxžik=^LfÝý½÷ßx¹PËÀ±á;­Ì0z úºãšÌ0zBú«[fòr¡8–=°ŸeLf½ÚzÓ‹ÙB“ÙcÙ›ø¬ÌVó"Mfݽ=çGMq2{ÀèŽèa½zZ¥É주òó¬¦}Lf=ýã~ƒöÚ)f&³Œ>Ýž® µÞ¼&³Œ>á•:y¹Ð;Ëò {÷£ø½NfŒeý } MfÝðØÇr:×»Ì0ºì†}£–=0™=`ô@ôá½zÞ„É죧ÁÈ}{ºH^.ôβVè‚>y¹PË8Ú•9c9š*ÎeöÀYöÑß©ÎÎ˹âÝýÝ÷Àx9W£»v";/çŠcôpغooRÁ˹â=ᬫ÷trÙ ›Ñ'¢¿; M^ÎÇèÍ }‰/ŠcÉDæÝUó¤\&Ý ½ß¯ÐµgZ—ÉFwD<«»2]&=¼°àß½ÝÏ•5ÅÉä£Oxå_ÙƒÉË…âXòÁ»>•¸ñr¡8–|@ôñœfU{‹t™|`tƒc¯?UºL>0º#ºÙ¨&Ø]&=ýÝM+x¹PÛí0õ1«‰V—û }BúãÖ¾Û¸Ì]0zsÓ…/Šc¹ DÏǨùq.sŒnˆ~¿Jm'}/Šc¹ DïXq^.ÇrO`Ïí+qðr¡8vú<¼ò_¸ÇÉÓç}À±¿ö ^οÛ0ú„ôú¹À.3'ŒÞܦw™9q–9Aô¼oïYûnã2sÂèÇþœJ\sF\fNÝ=î·‰Qóß]fN=ýÝë#x¹Ð;ë~èíùzPûNë²û=£Oxå_=Z'/Šc‰G¹‹'ñRó"]&^œ%^ý {F\&^ÝàØ_OVÆË…âXâÑß§;/Šc‰/tþ^.Çú ºÙ¹uK^.ì‹è~n_Ì/wX–öñŸu]p™öaôæ¨|·-cÖx¹Ð;Kû@úèÛ¹— ½³´¢¿¿U/zgi‡I'«žÌë2íÃèè_Ø•é2íÃè w÷mçBòr¡w–öñBÆlòr¡8–öñ¡“N— ű´¢¿Oúè¼\(Ž¥}|èçyãåBq,íã…ÎÿÎË…âþÿÒ®mײկ¾Gê¨è¥ÉÅ6<)Qç%‰t:jõÿI˜{­bÊ {«ÞJÅkL|ƒ  j“ý*¯+èqnµbgSòñ7Ôª[íƒØ›Ù÷­â¥a¸ãq¨Ú§*^†;‡ª},öodÿ«[íƒØK5+d©»(îxªö±Ø”±œˆ ­nµb§Úü™ ÃCÕ>¦ÕõöêAs«}{³Ø÷ò†áŽÇ¡z›jU¼p_ê.†;‡êm,öži©ŸÏîxª·1û>f™Â1sëm{µØ÷3bÃCõ6ûž w<ÕÛ˜’oõ%±Û´ª[oƒØÅì{IË Z0ÜYE¢j‹].Zê*†;þŽª}èò÷¨†c'Tíc°§‹Zô•Rr«}{1û~6±L(¹Õ>ˆ½Zì<¬®Æ2¡äVû v2û¾T" ÇþŽØÅbßcÁpìqˆ½Yìråå¬PÃpìqˆ=Qòg™„áŽÇ¡j Ü~Ÿ1Üñ8TíC÷ß †;‡ª}löu–©îxªö±Øóý"slInµbJþû2‚áŽÇ¡j‹]îû¨cs¹Õ>ˆ=QöïxIîxªö¡ü[õuäVû öbö½¦å¤RÁpÇãPµÅN$ѳÀäVû v2Ù·Û2 ÃCõ6û~«RÃpÇæQ½ Y/9EóïäÖÛª·1ØSº®h6ÜzÄ^¬¾ÓXËëmÈ­·AìÕb—{œÚ¼[oƒØÉb/©-÷Q†;6êm"VÇŽ×qˆ],ö1~.ñ¼`¸3Ç¡z³ïÛ ð ÃGõ6dÝ4’¯×Û)%·Þ†P½ Õߺï‚ÜzÄ^̾ EßL$·Þ±W‹FtQb;¥äÖÛ v2ûÎmy?Ž0ÜñwToc²ÅDðÕrëm{³Øù~;/VÑJn½ bODþ‰Ô„áŽÇ¡z‹½å­p#·Þ±»ï¼ìU w<ÕÛYoÓ–óïÃCõ6ûþ*1a¸ãq¨ÞÆbO¯à ëÖÛ v±Ø¿q :¹õ6ˆ½EôÞ0ÜñwToCæ/RƒgFÈ­·!Toc°€:…ýÝ­·AìÅêû^éT0ÜñwToc±g§Ô­·Aìd±ï7N†;þŽêmLÉo9hÆpÇßù;ûwy †;þŽª}L½'Yj†;þŽª}Hüûç†;þŽª},ö­÷W03âVû öb²o³LÁpÇßQµ^tªîø;ªö±Ø÷Ó÷„Ꮏ£j‹†Õµ ¿»Õ>ˆ]̾/õu‚Ꮏ£Z#‹½Ü&;±Bn­bOÔüè"a¸ãï¨ÖÈbïÃáJìþyrk{¡Àí:ÃGµF¦ä¿±‚vk;‘YéÄÑ{È­5BìlöËò:c¸ãïèf!‹=Ý3lÐßÝ›…{£ß{ÕˆÜJ'Ğȼㅗ,pÂpÇßQ¥“ÅÞ8-g…2†;þŽ*È|Õ(-™Ð‚Ꮏ£J'“}«)­îø;ªt²Ø÷JfÂpÇßQ¥“žßñÂîø;ªt²ØSKË:N0ÜñwTéd꽦å&ð†áŽ¿£J'¾~+žg·Ò‰Q¥“Åþº v+{1ûÞú‹b÷±[鄨«Åþ©ìV:!vb³Ö¨D+Ø­tBìlöý®p‹í³{¯b‹=Ý7Çæwvë¬{3û¿ã…Ý:+ÄžØ<ÿ~EßPc7Î(Îæ;#uYMd wüeÀ;w^Þ@/îø;Ê€[ì\ÚòBkÅpÇßQÜbÿF%3»pÄÎ;Õ=;Àn±‹Ù÷T—û¬ÃGp¼nÓ0Üñw”çê¿•™0Üñw”·ØûÕ—u\ÆpÇßQÜìûöŽXÁpÇßQÜb§UæØ 3ìfÀ;Yìw­Qð†v3àˆÍ¾×¶Ô0†;þŽ2àûXBçW,¢f7ŽØ›omH´’™Ý 8£ ¸Å¾¿˜1Üñ8”·ØÛ}'s,#Æn±W‹ïjÞX%3»pÄN{ºî9.–g7ŽØ›iu#ªìA›w³Àˆ=±•î÷µJ1›w³ÀŒ²Àlž¾oËÞEÆpÇæQØbï½Gw‰ÙÍ#öj²szµà,ãf;Yì)ç¼×ˆÝ,0bo«kîØ<Ê„²XoeÒRO›0ܱy” e3˜–Y&c¸có(j±ïïE wleBMÉß¹ÈØM#ìfB;ìßçÝL(bovßó×5 wle¹}¿+^bÙ@v³Œ²Ü~ëPv³ˆ½˜ìÛhS0ܱy” ´$¯akp·ÐÍ"v²Øï;™ƒoi±› DìÍìû˜as,ÎnF ±'¶NßÅD ® ÝŒ£Œ˜Å¾ßé”1ܱy”³Ø´›>fónF ±Wƒ=]ÂÑsRìfÄ;Yìw8jónF ±7“ýÞ- ŽónV±'±ÎÃÊ+c㼸§q‡µØû} ;‡¬NÜ󰈽ÚìkÍIÅpluˆ ötÝ·&Æ"jqÏÃ"v¶úÎÃã‚÷Š{û=b«ïù^ÃÆöiÅ=‹Ø›©÷œ—û¬†cCìI²¡÷û–Ôó8÷4® Ó¸û/o g dz b/fßïwÄbyqOã"öjõýG¿mÄüÝ=‹ØÉê{I}yš0Üñwt7Ò÷†áŽÍ£Ó¸R~ë쀸¹HA¹H)~ý|ÆpÇæQ.Òbßo](îØ<ÊEZìßXA‹›‹Dìd±w¡—ÄVÐâæ";›’ßNm0†;sÊZìcfX渆áŽÇ¡l Xù¸{§4v:OÜl  l Åþ£pyÅÖ2âf{1Ù·±®`¸ãq(h°§tåånŸŠáŽÇ¡l Åž¹Eïê7ˆØ›Å~ɵTï7 wlZ‘éÔ–zÚŒáŽÕ¡ÌˆXwóÞ{±l ¸™A™‹ï;^‚çfF{±Ù%ún ¸™Ä^-ötÝ×*Å<ÎÍŒ vа†;‡ÎÇ™’ßnMd wæ8”—1ØÓWÍI0ªtó2ˆ=‰µC~ßwËˈ›—”—óNækyo"c¸ãq(/cöý~í"¶_'n^±W‹}m*†;‡ò2û¾?OîxÊ˘ìDå»uAܼ bOÒ¬U$G«¸ÅÍËÊËì?„닃6ïæe{1ûN5ZÅ-n^±W‹ý>ûÅNa‹›—Aìd±S¾–óï„áŽÍ£¼Œ)ùLK-qÃpÇæQ^FŒò\x©xIîØ<Êˈujƒi©æÍîØ<ÊËX}O÷/ÁqÞÍË öjõ=åJ¯X^Fܼ bo¦ÞsŠÞS*nf±§vù• ñÕ5t^ÆbÿÆ‹Í=/ƒØ‹Å.÷9èØ º¹çe{5û^%úÚEsÏË v²Ø÷ÊFÂp<Ò"öf±ÿ¨‰^±]£æžAì©Yûó/·e& wlå&ZöïÞÏîØ<ÊMX}O¥,§ó †;6rû>ÖU wlå&,öÞjô½‰ææ&{³Ø÷¸®a¸có(7Ѭ#‡Íçà8ïæ&ÊMXì߸礹¹ Ä^,ö} [0ܱy”›°Ø¿vJc礚››@ìd±ó}n"hónn±³)ùÜ—ýyÆp¼oƒØS³NmŒx¾Çª>š›hhŸÖb/%/ïEf wle,v’—XÍIs³ˆ½Zì#¸¹‚9èæf;™ìm„V±Uds³ˆm« çãš{V±7SïÛ™‘†áÎ,c³ÿûÏñé²ê¬FPÝfEkZœé¿7xöà‹/n™ÍøÞç˜U…pòØ ÂÙƒ3„‹o^߀çˆÞ3€ôŽà½#x@ïÐ;‚ôŽà½#x@ïgx‰è½x@ïÐ;‚ôŽà½#x@ïÐ;‚ô~†×ˆÞ+€ôŽà½#x@ïÐ;‚ôŽà½#x@ïg8EôNÐ;‚ôŽà½#x@ïÐ;‚ôŽà½ŸáÑ;x@ïÐ;‚ôŽà½#x@ïÐ;‚ô~†KDïà½#x@ïÐ;‚ôŽà½#x@ïÐûÞ"zoÐ;‚ôŽà½#x@ïÐ;‚ôŽà½ÿÿóïÿûþñÏÿÿù·ÿùÇÿ¿}Ãý ÿú¿?·†”ùeÃ×}³òzòÚp€×_àoöåwkûþù«¼þÕÓP—=ð_à÷6‡Z®¾FHS¾Š+ß ý*iÌllÃç úÊ\¾žÂø4ȳs’¨É>uôêõ> 4f.÷Us*ÜLxz²_/’þ•]y7Lɽ¸ŒX+Ùð§ï”Y¾8ß 5ÄNOóÀ”ÙÀ[¯l¸’Ð"ùÔB세UÉž¯ˆäsR5\uö=çíwmx9H>ÿÝèÓ—Lm8>^ÙSº7 m¸l¶9ѵN#ܱáʸd¬²æÇ—ë×,…LxI‡¾—¬4z]r€—M?³¡naÃi3íÙðˆnØ wÛꊲºaœmJ¾´§AúÕl—)}#ùÙP¯ÍžLx}üRŠ”>]¦æm±áJt”¥NÑÕÑ{U[¸Þ ‚ËAòÏô/`óõ$ºç}]ÞýŒ ³¡D¬Žê NÅ=oKÜÆqñId¸PWWçñ‘iNÏ·Ÿ1Ô„óuiŸ+ôèž+>ƒÊlàˆÕ=7kìð¶Í6üÑûÕæÇ?çJÑ4!ùÀþúü® ¯‡ù](2ÒΊíŸÃùlˆÕIÛÔÙÐ#¢{ª[¶èâ)@ÁI«ö4¡’+¯1æ÷dJ^mÅöÔJ ÏïJ#º’ gåXÒ2Íyb=éL݆·Çc¤vï:+Eb³?¡Ñ}úëîœOƒšø;[q9©©¬•<­.'5IesÏ6|ã,Ólò}>ˆËéã[¨ïýð$Nö'4ú4˜ðœt4ž¦Ëä'4ʯœé ¸'4úüÕl¨«Ëz’ºÿj6°ë D—å`u9$ºÜìåŠÀUhôþ«Ù#VWÊÁæŸÐ™M9‰N…FL•ì±.å—ÌôX]i›AØð~è»Î.SÓAq5o½²áStõ•Z«Z·ßµát0Úrت¬®Öëñ¸ª¢Êûüq±á}ÓÏÏ‘V…FoϘ %â°*4ÚØim8ôNQÜ•W–Üçh£®ÿϯBl+N‡FË@­B# :õÄ5µÙÀ[ƒ —d6´mî´á'½?¡ÑG(&\…F¥g™y–±:­f£B#0Ò ŸØÕ82B›ÃX'í0Ç©Ðèý»&\…F«èZŽô½U{¨T¯ûÌ<›ŠSÛÑc=Öm6¨½‹kXÍ®¢¿! <áIYsmÙ6Ú¢vwÞß8Bÿ'rÞfƒZÜq–iu%§ÃÇ«]‰&$å?õý™;‡ËôJfL[ž)òóW³#ìeÿÆÙжϲ᧯j'n|J³ÙÕòŸJëi²×âž9nΟj“wƒ²fª½ˆ §Í6g«°°¤b÷]-ÿ7x‹|¼šeV£}f$yj8‡à¬#‹âX"ËzsˆÒÜx)¬âÅÖ8™3ly†óû²êóãÕ53¯³èä¤wQzïT.£Wº‹Ëˆ eþ]Ç6©>’×#øˆúƒ•¨ÅHbN?§‰¢ê!;b¾ ÔJq¤7î‡ud®*4†c¨ð@¥r? 6\T Bïê»AÏ^CAög¸hIÅó¤W§ÆÊÈ„ë¥ê}‘µÌ5ÇUYé6\‹î–Ðl eŽW­Í†«Q!5À”¼Þ¸¯½^ņ·{|¼ÞÅ_àÏôïwÛÛû¤vñûÐâtXÊe“© WËá_ž ¬†‹ñ³vßõ"´v>ß ÊlÒ°š\IHÔBŒÊ]I›~fƒ2ν‘ W£MéD³ïË"ôhój~µù^„®ìmsEÞ.S•Çõv‚דèÔÍÒÓe;¬^„~uq6ÔM(6œÔ2{LÏÇóó»c¶Î¶ÑVÙô3ÚfŽ6¼†Jº"p½?¿ôBµÞÅÿ2íÙP7O¶á'Ñ©{—ƒÞõêt,„ÒÞÓ_ç²ùål m´á¼Ùæl¼§W§g›b›û¢”«Î—˨]üu V«SW±Í2PKh´yb›:" A3Bó»Zª®¢S«S]´|°yôê§|ôu¿ª's§êÌîÍgê͆?‘ïýôôÙ ö.zjöj‚õ¶Õ2wNø‰mÆÊZ’‡eµ†}“̆üÄù©–^l¸JçÕ!âÙ÷'¶ùÊ2¶á¼‘Ì%”¡ÚK!V «èTQè{ViDOþ³ÞÈQmxÞÔ;_*­ôn÷]Õ¼ÿj6ðfO6\¢Sµ@òzù¿ˆnÆ6Pï3¶óë¦ÃrÉ›W»e„C³ö€ŸØf•cT±7c›ÝãÊ#: wµù@­|ÝÈøi‰nÆ6{ßŸØæ#S^O¢«yk°áå`´µFÌFo>ôô^›¼tú¾¨Ü†Ëa´Q›ïÞ7·þÙ 6ØÓ5Vö¶èTl³²“Ê¿s+ÉvXª—Q[#Lêt€+ ×Y$ƪöؼÚ9y“Ì5{÷„0¯ÕæÕ;*õöÌ—€gG¬ŽO£ÍŒZàpÁýWµ5Ý[¸&\òáãgÔ?^ê6*̆PßEF+¡ Zúa°jWÄa[>ˆNU$nL½‹ŽAò§x6¨Úµr¥Öm¸vëÆsšv|ý® W1H‘ï\€‹;¾l¸Ò{Mt=p5M\õ°õ!*¦Ås‚µÁžd¸âáãe#™ -ôñ:R®Yá&*ì¨÷Í)¦ÞEÅ eÄI3²v|©Ä†«i"êß ÏÜ9´–ì­NQ1Èû¯fÃ3ôZŠÛHÖi·!á‡]!´§êWÑéÜÄW¯lx>­NZœÍFÅ oë˜ úxÞ$4$¢wƒ }o&¼úæ &\Ç ÷%;ÓhUÎ|¼Ú_Y‡ v´1^ØëÁßëîŠ6œF«ÃŽóh£ce¸ÐaÇÙeè4X©°#Ó-<^Š£mT 2â—¯Ç$? j=bb;±"t¬H—"5˽$¯ÂѦY ŸF6*Ë—>wÌD‡_ 6ü‰AÖq^…o™špI‡•aW1ÈÂàq*Y?^$":9Ù¼„ú®c…]…€]Ç Ÿ.þíŸýãßü×_þµ­êÚ‘DyLP-1.10.4/Data/Netlib/modszk1.mps.gz0000644000175200017520000004611110430174061015670 0ustar coincoin‹hK®9modszk1.mps¥½í®å:r,øß€ß¡^ 1?øñÓ÷ú^ fÆmÀc€yÿ©ª¬ RɤxN tõÞ±ƒ©¥L2“ÁüË¿ý¯Ïþíßÿõ?ÿ¿ÿ+ýó?ýÇ¿ÿ¿ÿùÏÿôã?~üûÿø?ÿý_ÿøŸ×¿®_¼þÿó< ÿÁøÁ(þ#ã? þ£â?ü#ø„ÿÀ$AÂ$AÂ$AÂ$áG@8ÂŽ€p„# áGÀ8Æ0Ž€qŒ#`ãGÀ8ÆŽ@p‚#àG 8ÁŽ@pŠ#PâG 8Å(Ž@qŠ#PAÆdAÆdAÆdAÆdAÆdAÁAÁAÁAÁAÁAÅTAÅTAÅTAÅTAÅTAÃ4AÃ4AÃ4AÃ4AÃ4A:OüGÂþƒñ‚ÿPüGÆüGÅàPjbBML¨‰ 51¡&&ÔÄ„š˜PjbBML¨‰ 51¡&&ÔÄ„š˜PjbBML¨‰ 51¡&&ÔÄ„š˜PjbBML¨‰ 51¡&&ÔÄ„š˜PjbBML¨‰ 51¡&&ÔÄ„š˜PjbBML¨‰ 51¡&&ÔÄ„š˜PjbBML¨‰ 51¡&&ÔÄ„š˜PjbBML¨‰ 51¡&&ÔÄ„š˜PjbBML¨‰ 51¡&&ÔÄ„š˜PjbBML¨‰ 51¡&&ÔÄ„š˜PjbBML¨‰ 51¡&&ÔÄ„š˜Pj"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"¡&j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j"£&2j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢ & j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*j¢¢&*jbFM̨‰51£&fÔÄŒš˜Q3jbFM̨‰51£&fÔÄŒš˜Q3jbFM̨‰51£&fÔÄŒš˜Q3jbFM̨‰51£&fÔÄŒš˜Q3jbFM̨‰51£&fÔÄŒš˜Q3jbFM̨‰51£&fÔÄŒš˜Q3jbFM̨‰51£&fÔÄŒš˜Q3jbFM̨‰51£&fÔÄŒš˜Q3jbFM̨‰51£&fÔÄŒš˜Q3jbFM̨‰51£&fÔÄŒš˜Q3jbFM̨‰51£&fÔÄŒš˜Q3jb¾5ñþûÿý_ÿö»óåúÏõó<ÓëùÓ%“Jg•O;ÌüO:N›ðŸ=œßðGc¢úÀ9`—MøÀ®üzÒ™¸ìy>°~­UJ~à°×MøÀÞüÁ_êÏsötnÂ{ö”<ø•áT{t%`§MøÀÎîK{ïŒ<ð°Ë&|`÷Þºë­M¹=ð°çMøÀ^¼Á—{òÇÓ–°×MøÀÞ<ø•èóÚüz5&ìtnÂ{vrß:®¬åZG´ Ø]­ã+i³GhÉ&|`wµîZ¶êó•IÖQÞ„ì®ÖºÒÂhÕMøÀÞ¦SÙÄêçqפ« O~+ƒÎ§Šðú+tàm ùñ´aÂRù•í¿á”~¥eÏ~pÎØ‰ñ·8\ðïþ^?:p…ßbªÏ[GøèRû•:pxt©åfp|tùw Õã£Ó³=OžáÑñŸ]‡7œñÑ%iÏÉÝ£û÷:p|tÜlŽãè+cp¼ulSäAåw‡›fÂ_áoðHÌEç`Îà·n*I‹æ);Âi>°óûë7†Ø¾À%˜˜ø­®©wa¸LÙ®›ð=¿…d'Ä.ÁìÇo ºR¶"d=\7ợ‚;!>p ¦X9×oZZIÚ„ìôÖó .Á<.ï,¢¤ã.‚¥);Âe>°ë{2Ú ñK,ˆ“kˆ™Kš²#¼lÂöúžVwB|àd$ò΃“Èq-Þæì×sÞ³[¶LüB4¸²­oÕg–ãO–ê³#œ7Ỽ³›¸²­oÕ—r$)¶   Aм ØË;5Û ñK ÛúV}ÎGÕ°#¼mÂ{ö|¾“Ì .Ño9«ÂœŽ¦'MÙN›ðßòNˆ\ÕÏÎÚ1_oZ…1ÙMÖMø0Æì§Ë?Ýõhʼ¼sýñ _“ì¬ùhYj›þ]„·MxÏ^Î÷dcðåýnÖóh©‘Lÿ.Âi>°ó{™´3x{7Óäs×`’+ï—–Ï£–fYGpÝ„ƒÏïÅßNì\y{05”w“ª2(&ÏR7áÃà›#=—¢ Ù'ª†¼»Çñ [OዱsFMï­áɇì\s·j?Ÿ¨ö"rû]uà¸1Ñ*=Z§ ÇGýÝQû†ç@T*yËE*\Ê4v„ó&¼ÿx­4£³YUÛx¤§:¹QãëAÚl Á¬Zó&|cyÖ;!>ð(L}˨\+âjËE fÕÚ6áýÛù~Q7B4x„¤%çMË1(Að¢6Ú„cä÷›öóάڳÌɈ6yï³ý< ÕêÁïŸüªö¿á9P+ØÈlA­ žQ­$ÛKqÓ¹ü>íÀA­XŠ)AÆSþÝÒ÷†—³;ûAꆕª‡mTªÅÒ‹Â0ð<úßJ@|\Z­‚=V6áÃ+XߟÏðñþ/Ñ;ôVMçõ>Zq%ϵ2ç&ügOï7í{ˆ/ѽ݀|”ßõyŸá¼ Æ(ï¯ÉNˆö:Gc|Ïx¹\’í]æÀó&|£ó…ß ñ—hŒÕãyeVÉ-€·Mx?Æt¾Õj#D€ct:Hè¸ÏÔOÙN›ðaŒüÖÝxÆèìh’KŸçì×Mø0Æüž4vB|à5ã[õ+¥&™³#¼n‡1¶·ê_y Uy„¤ìt.ó– ó­ÐïÛ7¼r@âöBÔkæÏNuò §Mxÿ„,ÿ›.«ì2íûP4xÕ®rN Ö®¨ýÛúÀcjv}±Ÿù¶Ö®¬œÅ‡cjvûñÁtýÂ.¼ajv%ËÏ“oXÔÖß'f8w= §Á± ýîdvàðè.mµî£†NÛ¯–HŽîšžG׺GwÿѵÉ$÷;Z}î¿“–§gî÷ñ‘ç·tZ9¿6‰>$D8ý4×Üq¯þê'’² Øë´&þþ8ìõSˆïÙ¾Ôkõ–,-HøÜ„÷윦5ñ÷·×aO_Bt:®ÿ﨧%4! oÂv™Œß:ä°Ë§½¾±$ç!éIÞ„ìeZ‡{‹¨Ã^>…èTˆÏzYC’¶ ïÙåœÖáÞÓÁ›ý‡!: wkƒ4ûš„$´ ØyZ‡{Ïe; ñÕ¶vhN¶‹’è&|`ÏÓ:Ü{VvØó§Õ/÷ o_“¤nÂöæO¾?aòÅÝž+AÇ´TÏwæ0>¡àk¢Î\¯Ü—¬ÒÒ‚ ÓéFˆá;¿³›Á;Ýezä?=³þßE¸nÂöüwêpoå¯Äî¼´×*á +•´`ŽtbøÀÞþNà­þ…Øó;‡a9Hj£éßExÚ„ìäˆÊµFkÕf~­i9»<8³ŸSã÷=xtY¦•°÷ $€¿ÇøüV ¬¥S€Ãr„+±ÁË\¨Ð^á·ÒïVŽ?®•ðLÛïãèÜ©=óq‰m–†±çMøð¹—÷WIí <8’œ¶Š»>G ëŸ@¶ŠÞÑÚ*2ÍB µœ_„×|‘¯Ï:Ÿå mÂvv^ÔÁƒ5Éé±ÈT+«,Sv„ë&|cžÖ ¯ß›=zïù‡‰ÊBŸHê&|`oÏÇ›2íúÏóž‡~’µRäéW9@éog<Gƒ’ͤeÖ+Ù¡¯i©Ô w”jWx=Ïl˧ÔΩ¿õxw8§Vû@sY-¿m ¸s6¡LͶjÃØy>‹ðÙ Àó á°â"Mý¦UÑ&j ž$zƒÜrT‘§—(&‘MøÀ®Î6Û"ìú)D§.%GQ;v“”MøÀnu)š…({ý¢söª–ƒò³Ù’8Î1¼gOV—’Yˆ°§/!:](©^ƒrûD›ðÝêR: 1ìò)DgOô¤6˜®#’¼ Ø­.•g!–€½| ÑYzžé¶·áO$mÞ³[ɬô–‚uƒ‡!:](­t⤑Ð&|`çUé-­¥Côº­ŽRÅæîD7áû².•‚ÓOÝ„!oŒWbïyHR7á{sšŽV~[‚8‰G,Òì O OÞ¤ž•j›þ]„Ó&|`çw·3x·.%×ã.Ó¿‹pÝ„ì˺Tâ`–²Åy¢“‘œçQOÛâIê&|`_–ŸRÐegð0DÇõ Ÿíš¯súBâôÄðÝK¯Y¦Úütàü:ñûJ¬Îþ"ž¤`ðË*Sâ/ð÷ŸÀÂJÓï»!x·°ªjÉ6.¬ø÷ÕÜÞ¡ãZ•¥Žäý-#ºíb } 1o‡×úÊg;?¬y¤8!¾Io>r®¶Â IÚ&¼g×u1I ×óKˆ^ÿB’v4+x…$´ Øùý>Ž!ê'x $N—CÎrü)sùì×Mø0Fû­ c4ßiA…a‡¦Hí6¡´®J%)8“lð@nl•v² Wlæö´æ$팮~_±éÀ{ð§ñ8Á,uÔKÆ:öæ¥*'Ð…±;½1¼ÿxm2’Yë¯òxÐîAž—ƒ×ÌD4eG8o‡1ʲT˜<<~NÎvÒQa:Iò&|`Ÿ3z¿Á{ù¢³n.—T²mw†$mÞ³—y9çýõ{³< ÑiMÐSog<ýDB›ðý/älÁ*²,•D\Ä'Æ8ñ»„nR¾Ê%oÂö2Íjñ·Ì¥x6õ‚^Ohhp—…í¹b-êñ&Ñ ½?Ÿ]EOï°Ó² ø7< ñz­êø‰lÂvý±8è“ÿƒÇ!:Z™šÉÓ!‡¤lÂv«Ív‘4úZ?…èñ8$gÛ€‹HÚ¹ ïÙÍ›qZ Üf †ètˆT¹¾Lé9©“ð&|`_žeJÛŒÁ㜠Üß&ë2 Iò&|`_žeJÛŒÁã«“ÙwïFúDÒ6á;ŸË³L)p›1x";7VP=ôlÏÁÀ˜„6áûò,S ¸Š ß?Wª:pêvÔ~€å¶Ö¤ùðîØÁo»Ïß?€…o© ‹rL¾_¬ÂJ!|tmÞ¿6v!ôܸ<öìô,ðõñ2¾´ mÂvkŸ½›{ÀÃÅkD¬œmc"$ÑMøÀž—ÅÀ½ÈàqˆÎÁ¦r­¸N›ýB’º Øí`ÓìE <Ž…(ÞùÙt(Ûr$"‘´ Øé-7cˆú dyâz¹Ö¤! oÂvïlø•`4Kï¶[A§Ék”·XSVà0Ã~—— ¤Ñ*›ð½N÷Hð·ìòÏ©l·®}¢KŽ8x@Séy‡èìzîX&ðn/£&ûA×ÿиúðîlk}IºàÜgRŠïüLm‹Nìȵ Ž}$…ÅbïîådM.<õ~¦O%xt×:!gŽg[Ŭ”)1Â[šÀ'95¥èÝ48ä•Bò”)8ŒÎfÜ1-¼·öNÁyvú8’²u;†$´ ØyUx§ÀŒÕàqˆî™Y©å”O$º ØóªðNÁy{ƒÇ!¾UPÓõ-3ûþ˜¤nÂö¶*¼Ódcµ} Ñéàk"Ì%ÓÇû"†ìV “YˆA6öÀã ô¸–§O:“È&|`·>Ÿ< 1ÈÆš~ 1{-×dò$ 1IÙ„ìuÕ>Aá˜Áã½3³G¦cœ“ˆsG ÿÙÃÓ´rþžÇöô!Dqú$_ùŸm¬Ç$¼ ØeUx§ÀpÌàqˆê5¨I?‘äMøÀ^œIãÊÛ '?#àõ5yKwÞàz”jë lýÄéYˆá={JïÌncðÉ[q¥£•œ§á¼ ØeUx‡LÔa—iˆÏZw^ÚkìÙŽÐÅìy>Ä^Vy |ê >¢·®þpQжOìmÞÇN^²}´?<þ<×b&Axò×{ðÒZ/Dž*býñù.Ÿ8c=Âa-¥ÅŽÓQçªDWˆï\•ØqåY´Nàx‚A³-®©ÿHpï_¼v\3‘ÖON6áÃk£«:6n@'ŠHÜ[¡¤ÚU1IÙ„ìuUǦÀ ÈàqˆŽO>øÏ)«%‰sOD ïÙmRž]à¶{ÊG²+r)°æMø0F;fžg!I-¨`ô œS굚l¿$$ɛ𽬺(p2x¢gE~ßIj3@HÒ6á=»]ôPË,Ä ©}àaˆÞ=)Ë¡•>‘Ð&|`ç·Üü<î¼ûù|Y•ê dµh7›‘è&|`Ïo¹ùyH±>` ŽØK^:&‡ÓµÑ, sw™Ÿd×1™î$FO¨mÂû'TÎåÖ€ u9Ì®€ˆj'éNè›ß IW”.xÍ%Â1¥hÅD´3·¢>U8ÞÉòt7“tæg®>¼3\6¿f’ÚÁñT„·nŒ¶¯:I*{¼3Ô©j;‰‡Ž¶ì³k—%ÛUé çÉtÚ]² ;Èè !ídÿƒÓÙkœÇF8.SnÝ—†Ëø¶œ‚SÁâ´Ð”óÞ¡±[H"›ð}yxžW2ƒÇ!:wý¤£³ÞŒIÊ&|`_ž§À•ÌàqˆŽˆê•·Ÿ&á‰cÃ{öº<°/ÏGEx$Ñ¿»çøŽ¤rÒôï"›{s·ážð ›¦ì¯ŒàÑÎ@š–ÇíI¿Àßc|~ÐÝŒDhÕ†pî+ý‡Õ¦ä‚ý ZÉ-õíêMÕ‡ãB]¤Ùp¡Þjª>êW:óü à'Z™:vg'ùTÉŸž|Û„÷o]r1mÜ– Nˆ:^J‡^uúDB›ð—-Û’Áã½/ÿ•:Ãt’è&|`Ïï¯Éb8ø8¦(¹7#%.öž–Nê¸RÄðaŒmÚ¦ðþò;ìí˃p:1¨åãaÄ’Äq¥ˆá;-»·%ƒÇ!:§õs9þlЮId>°ë²Ë!°&1x¢W¥½[|í4CHR6á»uÍ2çà ¶Áãߪ} TÌ<6$ñîÛá=»"N9k,ƒ‡!:‰åvh*ŸHx>°‹#‰w'‡mŸÖKj=ÓF´,.…ÑÜ×à„.ºå>\Š¿•—1/s¶ÒecI« /š¥bGS Ž>þ<¸5öáx8ôúeM]Ù„¹ùðÎåXmC·tÙ˜ŸMpŽ–ñè£zýízB$zÀu>¼‚ËÓúT‚”âSàó£^¿Ýw’Ú#Ç•"†ìËÓúø@<Ñ9­ÿë,º5,…$² ØÕù6ô!†ƒà’:ýÄ—^$ÛÔ N1«–Mø0ƺìh)AJa½Êáƒp¶¦ œlg!"q\)bxÏn+ ž†¤Btú5.ãƒlK5$áMøÀ.ËŽ–À¯ÏàqˆÎ 9çQ5×ü‰$oÂö²ìh \ã ‡èlMŸåþê'’¶ ïÙ­_ý ùÌÖ1ø)¸Rð_È[lê¯ÔMýhH ®+Å!\īۿÇÈ›ðá É´qeºƒ†ð'³;ë~G‹Á©ö¦ ö£çã•Ðàa„ãNWI––Ön§‹ûð.·ªðííZRêY|xë~ëqu!ôßJ¹»!à [RWûuÛt%ùð¡›çù^6éJ›À»n¶„³á}¹&?ö6KU3„CKJÒ>§.yÙ¯XéœKu.ò]Ÿ kIê&|`oË~ÀJÏàaˆ^ÃÅrXzF$5mÂöõiýdc<ÑÛÇéO1‡$² Ø­±hÖXF<Ñi,Ê‹&þDR6á{]63–‘Ct²Z¾Öˆl마¤›ðžnå˜UúcIƒ‡!6×k7s²>Æ„7á»5µYˆA®ñÀãÕã%í6µ„$y>°—e3Cà)hð8Dg/£Üg­@’´MxÇžáVݚ듯þ¬<ÀÓ;sŸP÷΄ѥ$ftxáeÇo"†ìòÎnv¯žÐÓ»Ë]vœ$bøÀ^þN3ƒÁ©é_‰Ý}iÓõêôï"¼mÂ{ötþfƒSË!v¯£Ý5qø2ä€6á;;¢r§cËߺûc;ϹlmÒÌÀ¡TNºlfh_àï1>?@C‚¬ØWŽðnÒà¡À:åZmRòáݯˆ u·ÄËx¥" ,Á)³%$·¼Ï³!Üù¾ÓQ¯?–>=º² ^›ºêFàÀeËà¸d¯c¢\“‘e!‰{ïHïÙŸ£ÒÓn\¶ †ètL$ºóBNŸHx>°ËªTÏË–Áã¢Ú‘[‚¬4"É›ð½¬Jõ¸l<Ñé˜ÈzäTê'’¶ ïÙí"ŽY©ž—-ƒ‡!z÷xô¾1 mÂv^•ê9pÙ2x¢sZ½0¦ƒˆD7á{~ʉm. 0^^6Oh=[¥vó8—7ÉÏ£ÔëÕÆßZ^IO6Nl³é:uå45ž°ÒÏv9£{+ÑõíõáÝlŸŸ&dNÝ%>Êv¸Ñ§–†çá2»¦~LpN5zBrnÂûwHÒªÍ!›Á9rã´{ÐYjИ„7áûòâzlÛ ‡øþ*·û¬2Ùt’äMøÀ¾¼¸žSô•O!V·ëæLOeLÒ6á=».ås`Âfð0Dõ®žº¦U;X“Ð&|`_Êç¤=ÊŸBô¬\õH‰ó'Ý„ìùý¢^SÖµ~2­ r]ʦ,-o’_”)ãoUïœÃ}”>9už÷Û&¼Bæ1-až÷fŽ}žm¿„ipNXDLZl¾Å""x4á ¿¬Ù„ ÍÖKÅ&À©3­Ï–òQg Ðyª#¼«¿Òã®Ë蘮ÕyóáÚýÖÓ™Ê[àµ^ócïÜk³D‰ºúkÆú+ÂñÑ%k`4~9Åt<ÓŽÀ÷áp¢Œ´”î Ѫ„ÉáËõ¼CûJö.`© CÒ‘È&|`×U “S ØõSˆÎUMqDR6á{]•09Ú·}àqˆÍë¬#m0O$Î,1¼g·V—Y “£íÙ’¾„è´º¤tÖÖ>‘ð&|`—U “_WƒÇ!zVSGMô˜¬Ä$y>°/¯¤çÀ]ÔàqˆÎµ[åÊrmŸHÚ&¼g‡‹8Ú,Ä á|àaˆNËC¹»:’ð'Ú„ì¼*arà.jð8DïBïƒ*Ã#Ý„ìÙ‘›{÷Ývãc¼\Ë;sçîîžI¾´ÒØWÌìµ)„ðžý1v`ªaðͳAÓCÈ6à(˜ mÂvþ[%ÌÆNζ»{‡÷µø³.!ŠØu>°ç¿UÂlNZº»süBï{òD§áu>°7GTŽZ­CŠ÷¼{¿Qóàrž~N ªx÷•3­J˜L_àï1>?È]›)žÇF8®SȜϘqm.׿}xw¹–UYÎn…ˆ¾kï\ߊ<çTYº{Z Úê!/8ã©íâ5uÜU<;ô?`Þ„ÿìá²,t¶‡çÀ7ª8­WÞqß‚Ú>‘äMøÀ^–U@.{ù¢søy×ùIÛ„÷ìé|†£Áº¶ ï_.>—EÞÀ9Ðài.^»GÊwñ+}"¡MøÀÎË hàhð8Ä÷w<+݇iõ‰nÂvç=B ÿÀw¶âdµYÃE`OXœKHbø0Æçfå4Ë+ç@ƒ‡Â阸OÒJ HœKHbøÀNË:vàhð8Dç`En×Z®¥O$² ØuYÇ\¯ ‡è‹×#“Õ'B’² ØëûËtÍ&ÕnæÀF°˜ýìŽN×ÒÞ$W®NÅéZ½ƒrG®§í¾÷DM›ðþ ™ƒœŸ ’üÑóù=“ÔZ/„v7¿™÷%kî Ü͇w¹†‚fj¹Õ‡wgiù¹7swç8cÛÀ3攬œ»;ÇsfŽeðJ¶}†{÷+L>¼{tòØl1î]Cš ïnÇ4Ü*Åty&åüò¹ƒµÏÁ× »1ʲÈaœKôûÍTsùD’7áûÒ‘š¿KƒÇ!z•‡rÍö5}"i›ðžÝ®i™y5ˆ†˜=Û·£r¥ú‰„6á;/‹¼Á] Co/ðR›š>‘è&|`ÏË"o`að8Dçûó¸dÓú’B’º ØÛ²È›M3’(D§c"Q=8ƒê$%mÂög‡fæ+ÎC­Áãû6ÊÑø´UpH"›ð]—uìÀèÔàqˆÙk É©Âì‘”MøÀî‹?êµzkþ¬<ÀÛ;sŸPwŒîc;_Á`ÂtºbøÀNïìfgðnÍ¨ŠØöE`½Yüþ…>°ëß©cœsù+±;žœ|´ m>'gq¼bøÀ^ÿNÛàœë_‰Ýß™#²î£À¬³x&!¼g·õ8ˆÊ}ÂÄ-<}÷^kRìt.üœT;0,Ö=1­cç/ð÷Ÿtž?¤äÃû³´°èî­ÝBà¸ÄÓÓ6ã°Eý>×§>—xõ´’‰Ý­ÔÁ;ÎC™­ú>:Ý„¯M^V¨×Dƒsà•V¼[@*ÿr‡ÿDR7á»UÅfGq×DƒG!VçÊr‰Ö$Õ¹$†ì4-1¿¿;} Ñ»û)-ù!‰lÂv]V¨×DƒÇ!:+íóhÂ,ŸHÊ&|`¯Ë uàšhð8D§‚®EiúBâ\Ã{ö´´”æÀ5ÑàaˆN/i>’˜qZH›ðݹÄþžLN{BÇkMKKiØÏúyä+[eÎh ©µ¥„¿µ´”æÀãßàóéº3†¼ãÂ;sÄÊ–ªÔnW²âYZ„ãáùíÒòû¹ÛV<Ù‡ã®d&ˆ ÓuK-#¼x›qDͦÂðÑÕMøðr-Í¢9ðý48fZ•¼ýƒ¬÷7_H(mÂö¥Y4¾…CtN•zœæ“È&|`Ÿ»=¿¿»~ ѳx¹tÌ c’² Øë´Äüþö:ìõSˆÎ\Æå`|ÏçÞ³?.)ó uà[hð0DöNѯœâ oÂvY–oßBƒÇ!zÍë­>†ˆ$oÂöòþ©´C‚©_5S‹iù6š®Í­vU¨•ÝsÄIÕjÏÁ>UÎMxÿ„Ì uZ¾ .ø¨Öå0½ &(ßœÁ9ðW ôQA´NU°Q áÔuŠ™Ât6éhòá}Ô¶A[wYBg„wmøœì˜„œ‰'ðÚWi;Øîã¤\ή ¿°Ëß©ZVxÀôWbwëG-ÛP lR«Ó¥ÃöâˆÊQ¯o¬ý À#Þ\KõsÌŸ{°¶°K*¦UËöþãóìoA“!„cOü”r ¯ô"Wžpý£ùYÕ ÞË@ñá¸þ!˜ÊR O±T§Cãzç[…¾ÖèÑ91¼mžiÕRΠˆñÀ%0(«N_c¤Bõ‰lÂv]U-%pô4x¢w…*Õ£µö‰¤lÂöÇvtX/HƒÇ!:{„Ò.‰Ñô…Äéʈá={K«’ž^” Ñs¾H'ݨŸHx>°?Ó×ìЩ^CtÎþ¶óH–ñÅ$y>°—·VŽ!Ê'xÝ;]zePdûoNVçêÞ±Ž ôm l59 ÜøXèr³ç¶îN \б”Œ›¥í¤eÕ2¸›Ëàóéé¶qáh{HÂd?Àyüš‰³ ïl³u u›q-Ž“ºší®€óÒmˆ+ áì­Ž¯ÁëÂG'›ðáåÒUÕR‚-`ƒ Eo°w…I:òÉéIÙ„ìuUµ”=àú)D¯PëAOŸ[H’ÎMxÏ—MMç²°§/!:½ÜôJ?-k Ix>°?WÌœ>$XŠ<ÑsË·é'’¼ Øíäþ,é |ü ‡è9éñ!°¡’´MxÏNç[+Çù|¾ßØœ.‡z7ØÿÎû}v„Ó&|#¿_Ôk2*OHvYU-ÃéÚ&L´Ç¥|MØø[ê•©hf§ôcÞ„O¨¬ª–Üüѽ8ÓôêŽ>2:T\:àT²ÍãÝ…ö{‚Ž-Ÿæa¬†’âªgL)’>¯0f7‡3Âé9ö)ŒÎ$g„ÏrÁÀ á°‡›’µ¨K`„Ôž1¦s²›&”?À%ðjìVÔKSøö$Ž?F Ø—Þ˸<<Ñ邼ÆXÌc%&‘MøÀn§: 1x l* Cô:GŽ b/AHR6á{uB<šš¡ÀðýàÍùŽß²îõ„С©>¶üï¿‹ð´ Øé­C;ƒwV3é`åÇMN‡óæTýcøÀ¾°/ýE¢ïOû¢×¥pßGgg8CÇe!†ìK@ Ìó ‡è]VÑç@ZL"›ðý9 Õs(jûdõXËK@A7àZ m $?V³à /ý%ðt6x VØy_ÞìÃñ  –l›M»fÒ»6ÞüµÓÄ®3økܽ4HZ‚L{Û„÷oG1ƒ¿ÙǸ¶\Ç­æXD”+½÷>‡„6áûcVK³©0pm3x¢xC.b³IH¢›ð=¯ÎHàÚfð8DÏx=Éј?‘ÔMøÀþ,ÔÛL©×6ƒ‡!zm ùn|´é:"ñÚBøÀNï/¥®úœT“À€±ÙuÓ]ºH©­ûéÚ•ƒà^žg7ñã`¶ÃXk7ﺌ><¡¼LŠó¼ötÆÓÂl´WTM豉_Z³G×]óÕÙÐ"¼ó73+cé¬ánKMÞmòeëÀAk¸Ä„§(ŽÖp·3Ü#¢¹·ÏGׄ£ma‚i¦³†K2cǼ¿%köÍÝ‘‡œÄ‡Ï¾üùÓ†_9_÷€ërŸ,°]3¸Ç[Zõzz"3È IÚ¹ ïÙ[Zî“¶kCôúKôTRýD›ð]VÙØ®<QÝ­†¹`D’7á{yëÅðmÿÀƒc\­¹'Û•È”ámŽìé´þ’™+˜Ìm×<ˆt:.÷%cÝt‘Ð&|`_Þn%sÛ5€Ç!º•d7€Ç$º سó]¼^‚lKϹ?Ówæœñ Eðê}ˈØÊZs§œtžmÞ³?×xH–¿0øä-™¾ÖümúwN›ð}y»U°é p™î„±»/-§ÓöƒçvnéLº Ø—·[›Î—™\»×#ûë~©2ý»¯›ð½y¢r4»õ^ ì°œ÷õË·Vˆ¼[T`‡´?— {¯gì ^λЇ“=Ûûö•î·ÈݤPxmÂχ7áý»iM(yVÁ,œ[ÊÜMäú-çxË}3^³ãR!IÞ„ìf.0«)”@ôx¢#ù(l0×$mÞ³³5Ͼã%Ðö†è4L´rßoEHB›ð—•¡H¸m‡…!ºÖË—$Ù>$ÑMøÀþì7ÎÜÕdn|ð8DǰÐ!æ"“ÔMøÀÞ~¬ŽbÌφè´UЩ·³pýBâ´UÄð–õ½¬¬+# ‘ݶ-š>‘È&|`×÷¼8„Þàê;=©¶ƒÉZýk-;=1|c}Ïð;!¼\yY­ÁLj›=-"qú¨Úõùd[„$u>°·e´3©5rD!:t·K±÷n¾I¼ë2BøÀ¾´”̤ÖȆèÙM”K ì$GH"›ð]—Ð̤<ñ=—åv$¨¤lÂv;5«c·`&ÍõSˆÎ ¦]z‘¬Ì‘xÖ!¼g7ëŠétÝ‚™Ô¬+¢މrÜ‚¦Ä„7Ỽ?Å_ݶ/Ø‚tʮ˘ֱ£éÚª©èÔvÍX‰ð·²Wˆ¦+±ÌN­ð=Ʋ žP–«§;hóÒ ÞûϵZ=¸´ÞÿÞZý;ÿ¹šKòḡ…cÑ.åœÕ‡wftúT ô캭¸Û({àzb»ÉóréÙY÷ÉI>ëØl_,=¥«¢ë>Iô æq€ƒ„ßçyäùA0ÔsYÛlò®gðnV÷fñóO‡äš„6á;O‹“ï—ÖaçO!Š¿‡[½!‰nÂöüþ–ïPû×L3Õ=mRJ±­¼¨µnÂö¶,ß¶ ¬í˃hn³ÖíÒ˜¾´´ ØiY¾mÁWùÇ!²Û(ì²Ð˜D6á»:ßÅ£ý9Pã¨àÏo¥ßóîVÂJ¦§ÑFÏ ‡iu>°·÷lò}ðÉ»ß#ZócC«s›¬ ž6á;­Ê·:·bø;ÄGzRw_Ú–¬ˆ³Ë&|ˆ]Wå[=%`×uìÑç_h•sMŸØË&|ˆ½:¢r4Îçó6'¼NLì’ýÖ™g±ÜÓñ0/ßÎý þãóLj¯· ùðÎaÙ6Š5u†mÇæLáç…¢‹Ê™“Ç'­ì þVòvª+èqô„hÞ¿iY—Ò¼›–_§ˆD¼ÚÙ5c¤ö‰D7á{^mtî©ð8Dg¿¾´CÎÇû(&©›ð}y(KçÎKCt®ôàÛ¦‘µ}!qÌ.bøÀNÓªËûKê°Ó§CYrpÉ&¢!‰lÂvóJ›­#çÖ<CÌÞNU¢ðˆ¤lÂöúþÞgŸzŠÎ}k.x[mp ýó¨\Ñ?ë’óŠ¿Åçªh£g0F^OY„f›wÿ ïLºàjb%î&#¸æ¡ƒãàOƒ¢¢ß ç —½wðîÊÖ®3(±»Jj’kþô„hÞ¿CÖJ1ÛÕW 2Qf'Ä7‰w¤å×õ5ßHt>°ÿ÷ƒ˜zH) 'çO!:­”è`[i‡$u>°·Õ®¾RWrû¢ÓJqÍÔGÍ0Æ€Äi¥ˆáû³âšõ(iЧmy¾÷¿SúD"›ðÝüÂfZIAÚóÀã]WÿVÈvNC’² ØëûS¼«èæ¬äv{Å4o‰¦,io’k¥AŠ›÷És¥¸t[ìFy=ƒ1:·WÄðþ ÙÜ=]"RRX“Ä4í9¿Àµó¹ elåÊìÂÛHŸ¾>EŸ«;UÏ>¼»(=ue,bÝáè‚FR ާK×[p¬º\Óõ3 ·Û•„ÔæÃ;÷pzÞy|tW’W\¸ÌVB_>8ð›øUPì°Ý:g/W°<~à*ŒyÝ"©̶#’äMøÀ^Vå ²Íˆ0Dg…Yz&K C’¶ ïÙó¹ªà(éÔCôºEêQDí%Ih>°ó´ó‡?…è©DìâјD7á{^Up”ƒtÊD) Ñé‘K” ñ'’º ØÛª‚£¤S6aF!º…Õ¶Ó"Ç9#†ì佨G-6aJðžgÎU?‚;op=$ÌxAªâyb„ðÝ™w_¼ ©Í¤*ŽÛE ØÛ²‚•`,Ýåöb¯î)óR%ëôï"¼óÇ0»rUôǨMÄ…ã7îZ;bÛXªþ™â?Ýxë'Ô6áýÛÑÎeG‚mù®|œ¾iwÕÓ“Ð&|`çeyC‚9£ñ§½F܃¤QþD¢›ð=/÷þ%˜Y¬­" ±x|Í>–8„$u>°Û¹ŒÙ^‘ˆ5_!ÒéÞ;½k¶'Й6áûÒ9PçnXCdwûüÊmÒ'Ù„ìN‘êî¤5³tU ؗΊ¢å®€zp ùy»^ã¤AçÒ9PçîáŸOYè†u}õÉeWEŸS†2kg¥ n›îà} ¦þVõêp÷¬~ ±mÂû—Àº:¦›÷sS2€«F$Μ“¯)ú´|($¡MøÀÎËí¹«Àãï¢Tóã8“è&|`Ï«S:·x¢w#iº²×¦ŸHê&|`oïOñç}³Q²'4ŸÔéñ®˜oÞGjE§Cr›ì©óõ[Þîû}mlìï¹gÀÂû'uáúiw€ÛsÄæëkf2ÖmËwå €£Mݙ؄>wÛò —6ïÚû«½èLwßbJ>\:’ç̃vÎt\°ê‚p\Á0Zȸ-&ƒï.Ëá—â‘–ûX½?øÒ=ºúøvhé+ö2[6”è­38*Ì5K6ü­§ï2Ø”±ë(E¿eÆú5ø­ê׌†ßjË¢ÂÜÇ àX>sÁG©G…kmC§É"†ìvÁÇl³(ð13x¢{‰‚¶Âò‰D6áûòJy |Ì ‡èœã?¯Tɬc’² Ø—WÊkà®cð8Äw2˜õ¨Ë#§É"†÷ìv²bZ z< QÜ ˆë;Öê'Þ„ì², ¦sC|'ƒ¬Ç=ÕO$y>°—ei(°¦3x¢SÛÉGØ) IÚ&¼g×sY è †è´b¤ó`Î¥|"¡MøÀÎΧxßìb›X%xÏÕÉhÆœ"‚«[×*^Á`Âôªð!|`w²®ÁW¯I]²Zm'8;LN}=†÷ìù\–†J0KY}= ñÙ :5ú-z²¹hÀv›K0ýÙéžÌ NU[óq×ÒÒ§àó&|`/ËÊT fOKöÃGow& õTŸ‰‚Ûõ AÉ‹à€M0®‰§€Œ ø‰§À>°{ãQY_ácXöëšæ3áF]Q¥ƒŸ\°‡Vò²0–¿Àßc|~€»©;tŽp\xçf»Œh´¤bŸ8À»®Fþ}”ì÷R·r®É‡wÍqùq&Rlð?/€øp¼òZ`;|¢í¼òe„;çmiÉ`øäë&|xëÌnö¹tÐuZƒ™Ø©¶3É‘‹.#§ÚÃvZÖ :ƒÇ!¾¿üZË¡P Id>°?Æ9ÓSaÁã½Û!Ëm-ŸHÊ&|`¯Ë²i`Ag¢ÃÆÀBG³›¤Bï¼~ïÙÁmb0ÿ€Z!:ÕëÖ® !Ùɵ„7á»,+Ã5Xº6ù¢³x¼oS2—½˜$oÂö²¬ V‹Ct* RÎCá=HÚ&¼cg»»`Z¬ …ȧw£ê}u½ÖO$´ Øùý)Þ&‘ð&|`ÿïߢiY;p+4x¢×îu'.ÖE’äMøÀþß_¹ùùÐÀ­Ðàqˆ^[c.ù°ÍÚ¤mÂ{ö§v>5¶ÔÀ­ÐàaˆäðÌtK CÚ„ì¼ì¢i°ó§eR:Bvj/$ÑMøÀn-&³µràúhð8Ä·êëµ ¿þ«ŸHê&|`oμ8„˜?ÁÕwjÉ?êõ¦yÎŽð´ ïÇhµä©¢Öx„SKnõ<¸™uGH"›ð]ßÃ}âQ²Áƒ)‹ó²Q(J^­¤ß:?¡†{vÌ®ùÙõ%±ÿ½u><¡6Ý-…ßë˜ þÖ³ECÁî?Û]ý­IÓð[ò.Þý:)ËŽõî¯p3ÀSíîëÒ­;`p §Ͻ‹izrç|vì;JÞy‚ÐÓ­™Ñ¸ôRo€K7Ƨƒ/ŸÚýÝs2xls:ÏfƒïФæÃ»£ÈöÒç\Ÿ» OÝ%Fù9‡–S÷èrÀ»G§lpxtz+#ܘ&—Wi`ÎÅâ^ýÃÚÉCxÙ„ïüòîÒØ´°S.ÿ¡ÃÑö®ç&¼¼]ï0ë_ÊÓ#;…ðõJÌÌ9>†ó&|¼Z§Ùàƒ¤Ë+„S>Ry48†çMø0x;ŽÎ³Áé”wÐ<tiUýo›ð~ðVÀ}‹à›Ý¿pàRʧE$†Ó&|ü³  >HœÃᬇÔßk¸n‡ÁÛ½žy6ø`ûÏ9ö]ô¸Oä´Oðº ßV­„90PáâU1®YÊ'xÚ„÷ƒ/ÖêYgƒr×2ñ–Ɵಠ¯«Ç|S¤gÙŸî:g–Oð² _W½‹9Sdi^·V=³¥…Ü©Çð~ðÖÞ2ëJÌÁqr®n«Y.ç“QÇpÞ„ƒ—U¿a΃³ãÖžø¸ÏË'xÞ„ƒ/ïÜÓ!qÖk?~Õä¼mÂû1¶óo-˜Ú¹Z0åθ÷î ñà¹3îMY£jÀ;v}Râ .•¿\x·¨ƒ„úUÅ=S–UϺÅHíªDïZhìØA&éJñáçq¶åå®|T&ì¥û|’ÁñÑQUÜÉxv>§ ¦Xý²SjOõ¾läYˆÅpÞ„ïüÒk*&¾ì×£(µö ž7áÃàËrÁØórso€=ÿDµ†·Mx7x9Ïå‚)0Þ§ð-×BYì–²N›ðað¼\0–ºâȾVk­šiI ×Mø0ø¼\0¥°;[íB°ñÁë&||[.˜;aqj©tåÝ×Ì+ŸàiÞ>ÑrÁXÌJònξ²Ø¢á² ¿<{•óXqêŸ×KK’žÃ‹1¼l‡Á×å‚)°…•ä¦íòǨt §sÞžÒrÁ¾ŠW³¼f™¤¶Ây> ^– ¦ÀÊUÈuÿʧ5‹áy> ¾,L”öê-Îbu o›ð~ðvÇútÁØØŠgùÝîú¡¤OpÚ„ƒg'÷|“xžÝG±Šáº Ƙÿ΂ÉàóSçoK ÏÜŸVù™vñá¸2I¹¼«0­>W&ÕN¹fî#'Ö·Þ-ê`ç±ó·½bɇãƒwÿþVY&÷Ç«pu…¯{À!¼mÂû—ËʪÓä>poïNxºO”p\ñZøåhgΟàu> ¾-“ûÀKUœž^äIàkÁÓ&¼¼®·µ—TñJxr\/ªUB¸l‡Á¯·µO@qJxtJ¥ÕOð² ¿ÞÖÌ¥Ä)áq9’*×/pçÎðÞþé œ':Á¬8%¼Ê•¬Ÿà¼ /ï©Ì!Q¯äÒD[þÏ›ðaŒåo%:|žè€ìoÓzž;kú”­Ä*©k±9Ù‡c¢sýÒóä¥Ktꌽk‚gË¥k¥ÉèÙƒðÎÕŸ¨û­ußFà´+ÎUæ÷½3Í®? á^-3„÷o‡]e>r«\)ÞòTŽ¢ÏVO çMø0xYî'Ij8æÔt¦ãOÿÚž7áÃàËr¾ ®cçTlÍw¿ÎY>ÁÛ&¼üú똠Éä¼ëi‡Ac8m‡Á/ï§Î¤ÎIÖÊÇ]ÍOpÝ„ƒ_šúçÀZœ3ªÜôÐl“I¯›ðaðí-¨oç)çãZA }‚§Mx?FïRèù²Ñr¾”®R—Zöà}²¯ ±¿7§± ïÚ¹Ò¬Ýt›ð~„÷«–iß¹z’Ç}…ë­yRÁÎJ5¹úðn_ÁÎýfíݵXôáu¨ö>?€GG×ôÞ ž—¥ÐÀPZšÛÍÅ­>ç>b¸n‡—öQ…s¶ì ¬¢Å½§ûÔb{Ü!¼n‡Á/íýr`­§»AŸO±*rO›ðŸ=œ–»%½³zîÐ"ÇŸöÿ5\6áÃàu™ýi ؽ•É•EèÓ“ÃË&||]fµµžÞ_;ÔÎ?‡p§ÃûÁÛÁÎiA.pKVïér^ù›m®†pÞ„ƒ—eêø kòËBÙÎÅð¼ ¿¼¾+Çš¼ è¸È­–ÂÛ&¼<-/æÊ:OÔ;@)‡ªÙ ÇpÚ„ƒ_^¹•wguŽFR;ø¬LŸàº ¿Î»{Xõ.b–v[%Ñ'xÝ„ƒw2 7‰wj1%e*ŸàiÞ‘ÿVÞmðyÞÝyV_™sñà¹3°þcEúûguÂkÎ}Þmìýa.žÀ»í¨öØdäγúL*>¼‹ö€r—_K`Þ•,ms(—¾r2øÎÀš¡A¢ôwc7ð•ë¯áo­³óÀ×WZs®·çÅcyÃu>¼ÚëìÁÛ&¼<œfœNRA•݈F¿/,^Ãi> ž—ë¢À–W½ÓŒtP…cç!\7áÃàór]ÛªsšñZRꕨÐ'xÝ„ƒoË¥E ¦H§È|´vÚ陞6áýà‹“¾9$ì5ëµ¢Vôá² ƨkiñÀçK‹Ò%÷„„ žK·ùÝì|Qé“ûÜ|øp8Êbï’û„Ž ïG¥ç$A®]r/ä¾{B)Ûù¢Ú%÷Ňw‡£NÛâ«Ýá¨V'ðΫî´BÚ’VtÒP³|ž.uN›69®Ð­ØÂë&|xi×yw 2 ïþßtÑŸ¶¤ áiÞ¾®óîÀ«[½ |ïÝU»[7†Ë&|ü:ïÌœÕ9m*í>0`{!¼l‡Á¯wÅ›f­®oêQˆU÷üCx?x;Ž8M]fuŽ#’ÒQªi]çMø0xY¦®µ²:ÀÌw°„ð¼ ¿îF L“ÕsëÍGNÐ~ÂÛ&¼|>×Ý(rv*€T¾=1œ6áÃà×Ý(Ñqö*€|Üw§ÔOpÝ„ƒÏË-ýÀÂ8;À‹]6HBxÝ„ƒ_çÝu>Ef§È÷îÎïŠòž6áýà­>piÎî©Ã»kžP—Mø0Æg"Å­÷+›ç‰yôž‹Ül×¢ìñÔüœŒ<£7ØLÕ“ZËvOX*æÀ8§ú)’'ãSž‘ÌçÞüÔ½HþãÿøÏß¿zý?ÿÿ/&s–’Ûúþx¦íT+gNGõáöÈ '9çÏçšn—D=|øóòjå<ž×Âüsjå\Žäë ^éZ´>?x¦•k‘wˆ 7ɺ"—K²Ÿ<Ÿ1_‹D™ÁÿûÑÝ=Ë×o=)ïãÓq—´:ytælв\Æ»¹ävý#ÿó?ýÿ¯üëýþïÿøñëÿ€WËý¿éüçú_ÿø×ùþåŸÿéÿ4@Ö:g.DyLP-1.10.4/Data/Netlib/sc105.mps.gz0000644000175200017520000000273610430174061015140 0ustar coincoin‹žK®9sc105.mpsš]nÜHƒß øº@]ýßFb Äg±{ÿ“dâ]¸‹ ‹Ð<¥}"«)Jö̼>½<¯·Ï–ÚãÃïÿ¼=>¯Çñòôï_/÷~;ŽûÓýe°Ê°*÷ÕóǪªÁªÃjÀY&¬–_Y‚x1ðbàÅÀ‹/6`^ ¼dð’ÁK/¹À ¼dð’ÁK/y ¼ðRÀK/¼” +ðRÀK/¼”åW¼TðRÁK/¼Ô+ðRÁK/¼´+ðÒÀK/ ¼4ðÒ:¬ÀK/ ¼tðÒ Vृ—^:xéà¥C:xéàe€—^F†xàe€—^xУ^&x™àe‚— žàe‚— ^&x™àeBxYàe—^tz—^xYàey/–¬¼ƒû®¥« «»—Ïß¿ýýòúûŽ~Ýï·ñ}C?Ü+ߎ}o÷ÿa·oî O§£2±H$Gx"…ŠØ­q‘ûø"õÿGá¯O~’*¶«îdpT£çò"V„HÛÏ7qT§ÉA&SlDßMqÔ ÉȺ‚›ÊdÒ伈¥+¸©yݱÿm€Ì x¸ÑIŽèŠ8ã™zô%7Qr‡‹¬­p‘hÄSÉ.²¶JE|ÉM”Üá"kk´¥Ð?Ѭç—Ü:=—ÉâN²ñÜÅQƒ&™ˆþm<«L&M΋ätÏ*“E“»‚g1oNtW@D´4pÑÒœé$GtEœñB=ú’gñÔp¸È:W.x*¹ÃEÖ¹Q_r9•Üá*ëN[ ýÍÚxéqÉó çò"EÜI6^†8jÒä|&EôoãEe²hr bWð"2)‰&"ù ^żÅ讀ˆhiÉt^ÀEKK¡“ÑqÆ+õèK^ÄSÃá"ëÒ¸H4â©äWYw*âK^j\òˬm)ôO4kãuÄ%/“žË‹Tq'Ùxâ¨E“ó™TÑ¿W‘IM49ÉWð&2©F“‘robޚ鮀ˆhi-t^ÀEKk¥“ÑqÆõèK^ÅSÃá*ëÎE¢O%߸ÌzP_òÚâ’o\f=iK¡¢Yo3.y]ô\^¤‰;ÉÆÛŠj‰&ç3i¢ï"“f49)Wð.2i™&"õ ÞÕ¼…î ˆˆ–¶Jç\´´5:É]g¼S¾äM<56.³\$ñTòˬ'ñ%o=.ùÆeÖ‹¶ú§šµöûßqÉ{¢çò"]ÜI6>’8Êhr>“.ú·ñ!2é™&"õ >D&½Ðä@¤]Á‡š·Ò]ÑÒÞè¼€‹–öN'9¢+âŒêÑ—¼‹§ÆÆeÖ“‹D#žJ¾q™õ¢"¾ä}Ä%߸Êz$ÚRß?լϗ|=ˆˆ;ÉÆ§‰£2MÎg2Dÿ6>E&£Ðä@¤]Á§Ê¤Òä@¤_Á§š·Ñ]ÑÒÑé¼€‹–ŽA'9¢+âŒOêÑ—|ˆ§ÆÆeÖ‹‹D#žJ¾q•õLTÄ—|̸äWYO£-õýSÍÚø²¸ä3Ósy‘%î$_âs‘Yhr>“)ú·ñ¥2©49éWð¥2i49Wð¥æítW@D´t:/ࢥsÒIŽèŠ8ã‹zô%Ÿâ©±q•õJ\$ñTò«¬—Q_ò¹â’o\e½2m)ôO4ë·ÓGöPòU蹜ˆ%q'Y•fW„hÖjt·Yî#ࢠkP€‹6¬I=~ëDÖ¢hç?5ñèÊ„êG€[‚2ÝæÆ!¸llge­+³cË6Žêw®~·x¦ê®~¨ŽõÛ8ªß¬qõ›ExùZ?(Öo@þøúñÅ¢×·Ÿï?þóë89%þŸûÐ7Ž[„Û%Ü„¸ÿ1Æý‡€û'bÜ¿í ¸Û3Æý*€û7TbÜÿ©¸ÿS-Æý/€û_cÜ?^÷—÷õð8Ôã?üùõËÓϧLJ_r‘§ÑÄ,DyLP-1.10.4/Data/Netlib/sctap2.mps.gz0000644000175200017520000007227610430174061015507 0ustar coincoin‹ÆK®9sctap2.mps¥½ÑŽ%K¯œw/à¼Ãz $3«ê²ÝlÖ:†$ÃÀ¼ÿƒøŸ³»9Y$Gùã\hÔ›Ã`Õ·#÷ŠZ]|þ·ÿúòÿý¯ÿùùÿÈ¿ý§ÿþïÿßÿø·ÿôz¿^ÿþ¿ý_¿~ÿï_ú?^¯÷ׯ_í_ÿ÷çORø“ÁŸ:üiÀŸøÓ ºæ?µøhi ¥–ZÚ-Ÿ0Ñ'Lô }ÂDŸ0Ñ'Lô }ÂDŸ0Ñ'Lô }ÂDŸ0Ñ'Lô¹NÔ@K- ´4Ð" E@‹€-Z´hÐ" E@‹‚- Z´(hQТ EA‹‚-Z ´h1Ðb Å@‹ûÖò¯¿þùý'?)üÉàOþ4àOØá„?]óŸ~ˆüþhi ¥–Zhi ¥–ZhÐ" E@‹€-Z´hÐ" EA‹‚- Z´(hQТ EA‹‚-Z ´h1Ðb Å@‹¡'ÿ«ƒ€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë ¸¾€ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾‚ë+¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ë¸¾ëwpý®ßÁõ;¸~×ïàú\¿ƒëwpý®ßÁõ;¸~×ïàú\¿ƒëwpý®ßÁõ;¸~×ïàú\¿ƒëwpý®ßÁõ;¸~×ïàú\¿ƒëwpý®ßÁõ;¸~×ïàú\¿ƒëwpý®ßÁõ;¸~×ïàú\¿ƒëwpý®ßÁõ;¸~×ïàú\¿ƒëwpý®ßÁõ;¸~×ïàú\¿ƒëwpý®ßÁõ;¸~×ïàú\¿ƒëwpý®ßÁõ;¸~×ïàú\¿ƒëwpý®ßÁõ;¸~×ïàú\¿ƒëwpý®ßÁõ;¸~×ïàú\¿ƒëwpý®ßÁõ;¸~×ïàú\¿ƒëwpý®ßÁõ;¸~×àú\€ëpý®?Àõ¸þ×àú\€ëpý®?Àõ¸þ×àú\€ëpý®?Àõ¸þ×àú\€ëpý®?Àõ¸þ×àú\€ëpý®?Àõ¸þ×àú\€ëpý®?Àõ¸þ×àú\€ëpý®?Àõ¸þ×àú\€ëpý®?Àõ¸þ×àú\€ëpý®?Àõ¸þ×àú\€ëpý®?Àõ¸þ×àú\€ëpý®?Àõ¸þ×àú\€ëpý®?Àõ¸þ×àú\€ëpý®?Àõ¸þ×àú\€ëpý®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëàú¸þ®€ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú'¸þ ®‚ëŸàú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú¸þ®ë_àú×ìúícvýùO 2øS‡? øÓ:áO×ü§9ÿ ´4ÐÒ@K-í–O˜è&ú„‰>a¢O˜è&ú„‰>a¢O˜è&ú„‰>a¢O˜è&ú\'j ¥–ZhÐ" E@‹€-Z´hÐ" EA‹‚- Z´(hQТ EA‹‚-Z ´h1Ðb Å@‹}kqןÿ$ð'…?ü©ÃŸü ;œð§kþÓ‘îúóŸ@K- ´4ÐÒ@K- ´4Ð" E@‹€-Z´hÐ" E@‹‚- Z´(hQТ EA‹‚-Z ´h1Ðb Å@‹–o"¿þýÿþÿÛû÷¯ìþëÿñÛƒÿú¿?¿Jøšþ×þË÷?%??ûùßùúø/¯?¿Ñ‹?XË?ïMþ)¯uÿùå²?ÿÌþÓDÂ4ʽüA£äuÖ¨ ñõŸûïòÏ›øß?x*_GôÊ‚ÿ%åyÄ?-ÊA#-þ§Ú?¿ƒúç·QÙ-•¨%.EPy÷û¼”ä@µ(ªQr:kl ( €â#Î@IT €¢#B9 Ê)Pê@ipK5ê €R—¢ ¨¼{”æ@]PT£äuÖx1 4JK@iÔEG„r ”S Ì²à–ÚÞ‘g.ÅPy÷û¼”íyT£äuÖH< €â#Î@ÙÞ‘GG¬yPNêTnißs¨îR:*ïþó«î ¨¾çPT£äuÒȪ@ñg úžCÑkå¨á@à–Ž¨fPÃ¥ TÞ=s¨‘Õ,Šj”\£N›1 FÔ(9ÔHjEG„r ”S êné‘Õ —r0 òî™C9P=Šj”\£Î;ê€:Juä@õ(:"”S  œu:PgpKÏ=‡:]ÊɀʻßçE Î=‡¢%ר³FêPgqêÜs(:bÍ¡ œu9PWpK¯=‡º\Êŀʻÿ¼<ˆuí9Õ(¹F5R‡º øˆ3PמCÑkå ¨ÿx7ÙŸ·”‘[úý³¨àSÞwù罉Uèž8×(L£ÜË4J®QgìSÞ¼ˆŒ8ÅGüCDð)å (,§@yRÞ‚¬ºµ=  èˆPN‚r ”'å-Ȫ›îåkcIy¡ûû–ù#PºÕ(¹F5R ‚¤<qJ÷€¢#Ö€‚r ”'å-Ȫ[!)—(ÏXKÊ Ý³#¯”KÕ(¹F5 *Hʃg  I¹@Ñ¡œå(OÊ[U·¾”g¬%å…îÉ· Zߊj”\£Î)PARŒ8Õ÷€¢#Ö€‚r ”'å-ÈªÛØú¶A󌵱¤¼Ð=;òÆÖ· ¸FÉ5ꬑ}Û Iy0â ÔØú¶±ôm,§@yRÞ‚¬ºñ¤¼³‡ÃýVþyoòOy­ûûÑNW[Â4ʽüA£äuÖ¸þÆñÔqûÁSù:â9ÝÒcëá0±ôpË)Pž”· «ngÔåëÚäPy÷ ¨3ê €¢%ר³Æ‹u@% Î­‡Ã|ÄÒÃa,§@yRÞ‚¬º]{@yÆÚ.TÞý}KÔ¨k(ªQr:iä@]P|Ĩk(:b ((g@‰'ådÕò‘uûüÖoåŸ÷&T¡{×(L£ÜË4J®QgF€’T0â”|l=Ëã#–žåa9Ê“r ²ji{@yƺ6ùTÞý}‹h¨¶Õ(¹F5R ZqªíEG¬å(OÊ%ȪEr z”g¬k“?@åÝ3 $ª@Q’kÔYcg@I””€’­‡Ã|ÄÒÃa,§@yR.AV-º”g¬¢ ¨¼ûû–ù#PºÕ(¹F5R 4Š8¥{@Ñk@A9Ê“r ²j±¨ 6ÏXÅPy÷ (Ë b®Qr:kd±X”•€²­‡Ã|ÄÒÃa,§@yR.AV-}(ÏX¥3 òîïÛ7»¨¾Õ(¹F4r zqªïEG¬å(OÊ%Ȫeä±Á€òŒU*ïž5òØ`@Q’kÔYã`@¨Qjl=æ#–c9Ê“r ²j9ö€òŒUXR^èþ¾ýºuìE5J®Qg¨ )Fœ:ö€¢#Ö€‚r ”'ådÕRHÊ%Ê3VaIy¡{T!)—(ªQr:kT”#Î@[‡ùˆ¥‡ÃXNò¤\‚¬Z®= béY–S <)· «6Ñvv³úÇ­üóÞ¤ûÍ RhÞýdÝÏ[ùC÷ó/º?yæå/{Á…õ=¨øPN!ðtÛ‚|ÙF ÁšÓž‹®Mþ@$Ǽûɺ´ûùÝŸ×øå/…`l=âàâK8°œBà‰´™°9@àYæÚäAÚË»Ÿ¬;@@»ŸÑýù—¥^þ÷RŽ­Œ†‹/e4XN_¹üϧ£¯ûÙÖå[’ïAüÁZþ°4 V%Ý¿¿l§ó Ëî.É÷ þ`-Ð(¹F5*hÄÕ_ËžÊ×—Õ_’¿êFP|D(W–+J( n©ä@µ(q)€ʻßç½­þ’üe\(ªQr:kl ( €â#.«¿$ÿz,ŠŽå((§@©¥Á-Õ¨+J]Š2 òîPšu@Q’kÔYãÅ€Ò(-¥9PWÊ)PPN2Ê‚[j{Gž¹c@åÝïóÞVíyT£äuÖH< €â#.«¿vŽ<:bíȃr Tw zpKûžCu—ÒPy÷ï7±P úžCQ’kÔI#w¨ÅG\Ví8±æPPNÔnéHj5\Ê`@åÝ3‡)PÍ ¨FÉ5ꤱj@’C¨fPtD(§@A9êp Žà–9P=êp)*ïž9Ô‘Õ ¨FÉ5ꬱ3 Ž¨£äPGT€¢#B9 Ê)P§u·ôÜs¨Ó¥œ ¨¼û}ÞÛꯇ¢%ר³FêPgqYýµãPtÄšCA9êr ®à–^{u¹”‹•wÿ~ êÚs(ªQr:k¤u@ñ—Õ_;EG¬9”3 ¾óñ¯{R¾.ß’|Sê»üai¬þJº'Å5 Ó(÷ò’kÔY#û”÷ûa@#.«¿$wŠå (,§@yRÞ‚¬ºµ=  ¨FÉ5ê¤ñáÃÜËÿ^ ”T޼VHÊGÊ)PPNò¤¼YuÓ= béY–S <)— «–¶”g¬kXý•tß"ÚÛꯠ¨FÉ5ꬑÕ øˆËꯠèˆ5  œåI¹YµHT€òŒum«¿’îP’Õ ¨FÉ5ꬱ3 $JJ@ÉÖÃa>béá0–S <)— «ÝÊ3VQTÞý}Ëüo«¿v€¢%ר³F ”@ñ—Õ_;@Ñk@A9Ê“r ²j±¨ 6ÏXÅPy÷ (Ë b®Qr:kd±X”•€²­‡Ã|ÄÒÃa,§@yR.AV-}(ÏX¥3 òîïÛ7»n«¿v€¢%ר“FT€â#.«¿v€¢#Ö€‚r ”'ådÕ2òØ`@yÆ*ƒ•wÏ€yl0 ¨FÉ5ê¬q0 FÔ(5¶óK‡±œåI¹Yµ{@yÆ*,)/tß~Ýâ¶úk(ªQr:k¤@Iy0â²úk(:b ((§@yR.AV-…¤\ P…îÉ‘Ç5Óh÷ò–kÔI㯓eARŒ¸¬þ’|±Šå (,§@yRnAVm…¤¼@yÆj,)/tOÊ Iy€¢-ר³FöM ’ò`Äeõ—ä‹u(PtD(§@A9Ê“r ²j“=‡òŒÕXR^èþð(~]ýµãPT£åuÖH*Hʃ—Õ_;EG¬9”S <)· «6Ýs(ÏX%å…îɳ<Ó=‡¢-ר³FêPARŒ¸¬þÚq(:bÍ¡ œåI¹YµÙÖ³<óŒÕXR^èž9”m=Ëã-ר³Fö,Ï‚¤<qYýµñ,Xz–‡å(OÊ-ȪF´Ý¬uõ—<. ‚Õ_ôfÑî'ë¾®þzî~þE÷ç/ϼüïe/¸°¾_ƒÊ)žn[/ÛH!Xsúuõ—<. ‚Õ_ô6Œ‚µûºúë¹ûùÝŸ×øå/…`l=âàâK8°œBà‰´™°9@àYæÚVÑÛpäHí~þE÷ç_–zùßK!8¶2.¾”Ñ`9}åò?ŸŽ¾î_d[—oi¾EñkùÃÒ(Xý•tÿþ²Íƒ,»»4߃¢øƒµüA£äuÖ¨ W-?x*_G\Viþª%@ñ¡ÜPXn (q $¸¥’ՠĥ*ï~Ÿ÷¶úKó—qQ ¨FÉ5ꬱ1 $Џ¬þÒüë±(:"”S  œ¥”·Ts ®(u)ʀʻg@iÔE5J®QgJ ´”æ@]PtD(§@A9Ê( n©íyæRŒ•w¿Ï{[ýµsäQ’kÔY#=ò,Џ¬þÚ9ò舵#Ê)PÝêÁ-í{Õ]Jg@åÝ¿ßÄBê{E5J®Q'Ü¡zqYýµãPtÄšCA9j8P#¸¥#ªYÔp)ƒ•wÏj¤@5 €¢%ר“Æf ¨5J5R š@Ñ¡œå¨Ã:‚[zä@õ¨Ã¥ ¨¼{æPGT€¢%ר³ÆÎ€: Ž’C9P=ŠŽå((§@ÔÜÒsÏ¡N—r2 òî÷yo«¿vŠj”\£Î©CP|Äeõ׎CÑkå¨Ëº‚[zí9ÔåR.TÞýûM,¨kÏ¡¨FÉ5ꬑ:ÔÅG\Ví8±æPP΀úÎÇ¿îIùº|KóMM ¨ïò‡¥Q°ú+éž8×(L£ÜË4J®QgìSÞ¸¬þÒüÝI (>"”3 °œåIy ²êÖö€òŒµ±¤¼Ðý}û¯ÁÛꯠ¨FÉ5ꤑ$åÁˆËꯠèˆ5  œåIy ²êVHÊG”g¬%å…îÉ‘× Iù€¢%ר“Ƈs/ÿ{)PR9òZ!)PtD(§@A9Ê“òdÕM÷€òŒµ±¤¼Ðý}Ëüo«¿v€¢%ר³F T”#.«¿v€¢#Ö€‚r ”'å-Ȫ[!)—(ÏXKÊ Ý³#¯”KÕ(¹F5 *Hʃ—Õ_š¿;‰EG„r ”S <)oAVÝúPž±6–”º'ß6h}(ªQr:k¤@Iy0â²úk(:b ((§@yRÞ‚¬º­o4ÏXKÊ Ý³#ol}Û€k”\£ÎÙ· Z”#.«¿6¾mÀG,}ÛË)Pž”· «n<)ïìáp¿•?,‚Õ_I÷÷-¢½­þÒ|õ—âÖò’kÔYãúóê/#ß·F\Vm<æ#–c9Ê“òdÕí̺ béá0–S <)oAVÝ®= béÛXNò¤\ƒ¬ZiD ‹u°–?,‚Õ_I÷‡«½®þÒ|±ŽâÖò–kÔYãÁ€ ’ò`Äeõ—æ‹u(PtD(§@A9Ê“r ²j•( €òŒum«¿’îâ×Õ_š¿.E5Z®QgìÑ‹Iy0â²úKó7ÅQ èˆPN‚r ”'ådÕª{åëÚV%Ýžœ®«¿vŠj´\£N¹CIy0â²úkÇ¡èˆ5‡‚r ”'ådÕj)Pë¯z­«¿ôqi¬þJºge)P«F»—?h´\£NÛ*Hʃ—Õ_š¿ÆEG„r ”S <)× «Ö¾”g¬kXý•txrº®þÚŠj´\£Î)PARŒ¸¬þÚŠŽX Ê)Pž”kUëÈjPž±®M`õWÒ=;òFT €¢-ר³Fú)/Hʃ—Õ_šoj¢@Ñ¡œå(OÊ5ȪõØÊ3V=Py÷‡'§ëꯠ¨FË5ꬑ$åÁˆËꯠèˆ5  œåI¹Yµž9PåëÚV%ݳ#ïÌ’(ªÑr:kdÁ¦Iy0â²úKó·S èˆPN‚r ”'ådÕzíåëÚV%Ýžœ®«¿v€¢-ר“FT”#.«¿v€¢#Ö€‚r”yRnAVmylpr Ì3Vû @º'G×hL£ÝË4Z®Q'¿N”Iy0â²úKóÅ: (>"”3 °œåI¹Yµ’ò嫱¤¼Ð=q(+$å=Šj´\£ÎÙ76-Hʃ—Õ_š/Ö¡@Ñ¡œå(OÊ-ȪMöÊ3VcIy¡ûãøuõ׎CQ–kÔY#u¨ )F\Ví8±æPPNò¤Ü‚¬ÚtÏ¡béY–S <)· «6Ñvv³ÖÕ_ú¸€ VÑ›E»Ÿ¬ûºúë¹ûùÝŸ¿<óò¿—½àÂúT| (§xºmA¾l#…`Íé×Õ_ú¸€ VÑÛ0RÖîëê¯çîç_tþ]ã—ÿ½‚±õˆƒ‹/=âÀr 'ÒdÂväHg™kXýEoÑC ´ûùÝŸYêå/…àØÊh¸øRFƒåô•Ëÿ|:úº‘m]¾eùìåK£`õWÒýûËv}dÙÝeùìå%ר³F¸úkùÁSù:â²úËòWÝŠå…å%”·Tr Z”¸a@åÝïóÞVYþ2. Õ(¹F56”@ñ—Õ_–=–EG„r ”S ÔÒà–jÔ¥.EPy÷ (ͺ ¨FÉ5ê¬ñb@i”–€Ò¨+ŠŽå((§@™eÁ-µ½#Ï\Š1 òî÷yo«¿vŽ<ªQr:k¤Gž@ñ—Õ_;G±väA9ª;P=¸¥}Ï¡ºKé ¨¼û÷›X(P}Ï¡¨FÉ5ꤑ;T€â#.«¿vŠŽXs((§@ j·t¤@5 €.e0 òî™C¨fPT£äuÒØŒ5 FÉ¡F T³(:"”S  œu8PGpK¨u¸”ƒ•wÏêÈêPT£äuÖØPGÔQr¨#ª@Ñ¡œå¨Ó:ƒ[zî9ÔéRNTÞý>ïmõ׎CQ’kÔY#u¨3Џ¬þÚq(:bÍ¡ œu9PWpK¯=‡º\Êŀʻ¿‰…uí9Õ(¹F5R‡º øˆËꯇ¢#Ö ÊPßùø×=)_—oY¾©‰õ]þ°4 V%݇â…i”{ùƒFÉ5ꬑ}Êûý0 ‚—Õ_–¿;‰ÅG„r–S <)oAVÝÚPž±6–”º¿oÿ5x[ýµÕ(¹F4r ‚¤<qYýµ±”S <)oAVÝ Iù€òŒµ±¤¼Ð=9òZ!)PT£äuÒøðaîå/J*G^+$å#ŠŽå((§@yRÞ‚¬ºéPž±6–”º¿o™ÿmõ×PT£äuÖH ’ò`Äeõ×PtÄPPNò¤¼Yu+$ååkcIy¡{vä’r €¢%ר³Fa@Iy0â²úËòw'Q èˆPN‚r ”'å-Ȫ[ßÊ3ÖÆ’òB÷äÛ­ïE5J®Qg¨ )F\VíEG¬å(OÊ[U·±õmƒækcIy¡{vä­op’kÔY#û¶A ’ò`Äeõׯ· øˆ¥o`9Ê“òdÕ'å=î·ò‡¥Q°ú+éþ¾E´·Õ_–¯þ2üÁZþ Qr:k\ÿc^ýÕÉ÷­ƒ—Õ_‡ùˆ¥‡ÃXNò¤¼Yu;s ®(ÏX×&°ú+éžuæ@]PT£äuÖx1 Î¨³Ô¹õp˜Xz8Œå(OÊ[U·k(ÏXÛŀʻ¿o‰Úmõ×PT£äuÒȺ øˆËꯠèˆ5  œ%ž”KUËG Ôíó[¿•?,‚Õ_I÷(®Q˜F¹—?h”\£Î%¨`Äeõׯ³<>béY–S <)— «–¶”g¬kXý•tß"ÚÛꯠ¨FÉ5ꬑÕ øˆËꯠèˆ5  œåI¹YµHT€òŒum«¿’îP’Õ ¨FÉ5ꬱ3 $JJ@ÉÖÃa>béá0–S <)— «ÝÊ3VQTÞý}Ëüo«¿v€¢%ר³F ”@ñ—Õ_;@Ñk@A9Ê“r ²j±¨ 6ÏXÅPy÷ (Ë b®Qr:kd±X”•€²­‡Ã|ÄÒÃa,§@yR.AV-}(ÏX¥3 òîïÛ7»n«¿v€¢%ר“FT€â#.«¿v€¢#Ö€‚r ”'ådÕ2òØ`@yÆ*ƒ•wÏ€yl0 ¨FÉ5ê¬q0 FÔ(5¶óK‡±œåI¹Yµ{@yÆ*,)/tß~Ýâ¶úk(ªQr:k¤@Iy0â²úk(:b ((§@yR.AV-…¤\ P…îÉ‘Ç5Óh÷ò–kÔI㯓eARŒ¸¬þ²|±Šå (,§@yRnAVm…¤¼@yÆj,)/tOÊ Iy€¢-ר³FöM ’ò`Äeõ—å‹u(PtD(§@A9Ê“r ²j“=‡òŒÕXR^èþð(~]ýµãPT£åuÖH*Hʃ—Õ_;EG¬9”S <)· «6Ýs(ÏX%å…îɳ<Ó=‡¢-ר³FêPARŒ¸¬þÚq(:bÍ¡ œåI¹YµÙÖ³<óŒÕXR^èž9”m=Ëã-ר³Fö,Ï‚¤<qYýµñ,Xz–‡å(OÊ-ȪF´Ý¬uõ—=. ‚Õ_ôfÑî'ë¾®þzî~þE÷ç/ϼüïe/¸°¾_ƒÊ)žn[/ÛH!Xsúuõ—=. ‚Õ_ô6Œ‚µûºúë¹ûùÝŸ×øå/…`l=âàâK8°œBà‰´™°9@àYæÚVÑÛpäHí~þE÷ç_–zùßK!8¶2.¾”Ñ`9}åò?ŸŽ¾î_d[—oõ|JǬåK£`õWÒýûËvcdÙÝÕó=(°–?h”\£Î4âê¯åOåëˆËꯞ¿ê¦ øˆP>PX>Pâ@IpK%ª@‰KTÞý>ïmõWÏ_ÆE¢%ר³ÆÆ€’(>â²ú«ç_¥@Ñ¡œå(u 4¸¥šu@©KQTÞ=Js ®(ªQr:k¼P¥% 4ê €¢#B9 Ê)Pæ@YpKmïÈ3—b ¨¼û}ÞÛê¯#j”\£Îé‘gP|Äeõ×ΑGG¬yPNêTnißs¨îR:*ïþý& Tßs(ªQr:iäÕ øˆËꯇ¢#Ö Ê)PÃÁ-)PÍ †K ¨¼{æP#ªYÕ(¹F46c@¨Qr¨‘Õ,ŠŽå((§@ÔÜÒ#ª@.å`@åÝ3‡:r zÕ(¹F5vÔu”êÈêPtD(§@A9êt Îà–ž{uº”“•w¿Ï{[ýµãPT£äuÖHê €â#.«¿vŠŽXs((§@]ÔÜÒkÏ¡.—r1 òîßob¡@]{E5J®QgÔ¡®(>â²úkÇ¡èˆ5‡‚rÔw>þuOÊ×å[=ßÔÄ€ú.X«¿’î‰CqÂ4ʽüA£äuÖÈ>åýþGPÁˆËꯞ¿;‰ÅG„r–S <)oAVÝÚPž±6–”º¿oÿ5x[ýµÕ(¹F4r ‚¤<qYýµ±”S <)oAVÝ Iù€òŒµ±¤¼Ð=9òZ!)PT£äuÒøðaîå/J*G^+$å#ŠŽå((§@yRÞ‚¬ºéPž±6–”º¿o™ÿmõ×PT£äuÖH ’ò`Äeõ×PtÄPPNò¤¼Yu+$ååkcIy¡{vä’r €¢%ר³Fa@Iy0â²ú«çïN¢@Ñ¡œå(OÊ[U·¾”g¬%å…îÉ· Zߊj”\£Î)PARŒ¸¬þÚŠŽX Ê)Pž”· «ncëÛÍ3ÖÆ’òB÷ìÈ[ß6à%ר³Fömƒ$åÁˆËê¯oðKß6Àr ”'å-ȪOÊ;{8ÜoåK£`õWÒý}‹ho«¿z¾ú«ãÖò’kÔYãúóê¯A¾oŒ¸¬þÚx8ÌG,=Ær ”'å-Ȫۙu@yƺ6Õ_I÷ ¨3ê €¢%ר³Æ‹u@% Î­‡Ã|ÄÒÃa,§@yRÞ‚¬º]{@yÆÚ.TÞý}KÔn«¿v€¢%ר“FÔÅG\VíEG¬å (ñ¤\‚¬Z>R nŸßú­üai¬þJº'@qÂ4ʽüA£äuÖh(ùà@#.«¿6žåñKÏò°œåI¹Yµ´= }ݿȶ.ßù”?XË–FÁꯤû÷—íŽyew×È÷  üÁZþ Qr:kTЈ«¿–<•¯#.«¿Fþª›A€â#BùA€Âòƒ%”·Tr Z”¸a@åÝïóÞVüe\(ªQr:kl ( €â#.«¿FþõX Ê)PPNRJƒ[ª9PW”ºe@åÝ3 4ê €¢%ר³Æ‹¥PZJs ®(:"”S  œe”·ÔöŽâ²úkÇ¡èˆ5‡‚r Ôå@]Á-½öêr)*ïþý& ÔµçPT£äuÖHê €â#.«¿vŠŽXs((g@}çã_÷¤|]¾5òMM ¨ïò‡¥Q°ú+éž8×(L£ÜË4J®QgìSÞ¸¬þù»“P|D(g@a9Ê“òdÕ­íåkcIy¡ûûö_ƒ·Õ_;@Q’kÔI#*Hʃ—Õ_;@Ñk@A9Ê“òdÕ­”(ÏXKÊ Ý“#¯’òE5J®Q'æ^þ÷R ¤räµBR> èˆPN‚r ”'å-Ȫ›îåkcIy¡ûû–ùßVíE5J®Qg¨ )F\VíEG¬å(OÊ[U·BR.Pž±6–”ºgG^!)—(ªQr:kT”#.«¿Fþî$ Ê)PPNò¤¼Yuë{@yÆÚXR^èž|Û õ= ¨FÉ5ꬑ$åÁˆËꯠèˆ5  œåIy ²ê6¶¾mÐbéY–S <)— «–¶”g¬kXý•tß"ÚÛꯠ¨FÉ5ꬑÕ øˆËꯠèˆ5  œåI¹YµHT€òŒum«¿’îP’Õ ¨FÉ5ꬱ3 $JJ@ÉÖÃa>béá0–S <)— «ÝÊ3VQTÞý}Ëüo«¿v€¢%ר³F ”@ñ—Õ_;@Ñk@A9Ê“r ²j±¨ 6ÏXÅPy÷ (Ë b®Qr:kd±X”•€²­‡Ã|ÄÒÃa,§@yR.AV-}(ÏX¥3 òîïÛ7»n«¿v€¢%ר“FT€â#.«¿v€¢#Ö€‚r ”'ådÕ2òØ`@yÆ*ƒ•wÏ€yl0 ¨FÉ5ê¬q0 FÔ(5¶óK‡±œåI¹Yµ{@yÆ*,)/tß~Ýâ¶úk(ªQr:k¤@Iy0â²úk(:b ((§@yR.AV-…¤\ â²úëÈ¿K¢#B9 Ê)Pê@ipK5ê €R—¢ ¨¼{”æ@]PT£äuÖx1 4JK@iÔEG„r ”S Ì²à–ÚÞ‘g.ÅPy÷û¼·Õ_;GÕ(¹F5Ò#Ï øˆËê¯#ŽX;ò œÕ¨ÜÒ¾çPÝ¥tTÞýûM,¨¾çPT£äuÒȪ@ñ—Õ_;EG¬9”S †5‚[:R š@ —2Py÷Ì¡F T³(ªQr:ilÆ€P£äP#ªYÊ)PPN:¨#¸¥GT€:\ÊÁ€Ê»guä@õ(ªQr:kì ¨#ê(9Ô‘Õ èˆPN‚r Ôé@Á-=÷êt)'*ï~Ÿ÷¶úkÇ¡¨FÉ5ꬑ:ÔÅG\Ví8±æPPNº¨+¸¥×žC].åb@åÝ¿ßÄBºöŠj”\£Î©C]P|Äeõ׎CÑkå ¨ï|üëž”¯Ë·Ž|Sê»üai¬þJº'Å5 Ó(÷ò’kÔY#û”÷ûa@#.«¿ŽüÝI (>"”3 °œåIy ²êÖö€òŒµ±¤¼Ðý}û¯ÁÛꯠ¨FÉ5ꤑ$åÁˆËꯠèˆ5  œåIy ²êVHÊG”g¬%å…îÉ‘× Iù€¢%ר“Ƈs/ÿ{)PR9òZ!)PtD(§@A9Ê“òdÕM÷€òŒµ±¤¼Ðý}Ëüo«¿v€¢%ר³F T”#.«¿v€¢#Ö€‚r ”'å-Ȫ[!)—(ÏXKÊ Ý³#¯”KÕ(¹F5 *Hʃ—Õ_Gþî$ Ê)PPNò¤¼Yuë{@yÆÚXR^èž|Û õ= ¨FÉ5ꬑ$åÁˆËꯠèˆ5  œåIy ²ê6¶¾mÐbéá0–S <)oAVÝ®= béÛXNò¤\ƒ¬ZiD ‹uüÁZþ°4 V%Ý®öºúëÈëøƒµüA£åuÖx0 ‚¤<qYýuä‹u(PtD(§@A9Ê“r ²j•( €òŒum«¿’îâ×Õ_Gþº@ Õh¹F5²G/$åÁˆËê¯#SŠŽå((§@yR®AV­ºçPž±®M`õWÒýáÉéºúkÇ¡¨FË5ꤑ;T”#.«¿vŠŽXs((§@yR®AV­–µþª×ºúëx\«¿’î™CY ÔªÑîå-ר“ÆöÁ€ ’ò`Äeõב¿ÆEG„r ”S <)× «Ö¾”g¬kXý•txrº®þÚŠj´\£Î)PARŒ¸¬þÚŠŽX Ê)Pž”kUëÈjPž±®M`õWÒ=;òFT €¢-ר³Fú)/Hʃ—Õ_G¾©‰EG„r ”S <)× «Öc(ÏXõ`@åÝžœ®«¿v€¢-ר³F T”#.«¿v€¢#Ö€‚r ”'ådÕzæ@I”g¬kXý•tÏŽ¼3J ¨FË5ꬑ›$åÁˆËê¯# 0ŠŽå((§@yR®AV­×Pž±®M`õWÒýáÉéºúk(ªÑr:iä@Iy0â²úk(:b ((g@™'ådÕö‘Ç'ÊbéY–S <)· «6Ñvv³ÖÕ_Çã*XýEoí~²îëê¯çîç_tþòÌËÿ^ö‚ ë{Pñ5 œBàé¶ù²‚5§_W ¨`õ½ #…`í¾®þzî~þE÷çß5~ùßK![8¸øÒ#,§x"mA&lGx–¹6Õ_ô69@@»ŸÑýù—¥^þ÷RŽ­Œ†‹/e4XN_¹üϧ£¯ûÙÖå[g¾åĬåK£`õWÒýûËv×<Ȳ»ëÌ÷ œøƒµüA£äuÖ¨ W-?x*_G\Vù«nNÊ/–_ (q $¸¥’ՠĥ*ï~Ÿ÷¶úëÌ_ÆE¢%ר³ÆÆ€’(>â²úëÌ¿K¢#B9 Ê)Pê@ipK5ê €R—¢ ¨¼{”æ@]PT£äuÖx1 4JK@iÔEG„r ”S Ì²à–ÚÞ‘g.ÅPy÷û¼·Õ_;GÕ(¹F5Ò#Ï øˆËê¯#ŽX;ò œÕ¨ÜÒ¾çPÝ¥tTÞýûM,¨¾çPT£äuÒȪ@ñ—Õ_;EG¬9”S †5‚[:R š@ —2Py÷Ì¡F T³(ªQr:ilÆ€P£äP#ªYÊ)PPN:¨#¸¥GT€:\ÊÁ€Ê»guä@õ(ªQr:kì ¨#ê(9Ô‘Õ èˆPN‚r Ôé@Á-=÷êt)'*ï~Ÿ÷¶úkÇ¡¨FÉ5ꬑ:ÔÅG\Ví8±æPPNº¨+¸¥×žC].åb@åÝ¿ßÄBºöŠj”\£Î©C]P|Äeõ׎CÑkå ¨ï|üëž”¯Ë·Î|Sê»üai¬þJº'Å5 Ó(÷ò’kÔY#û”÷ûa@#.«¿ÎüÝI (>"”3 °œåIy ²êÖö€òŒµ±¤¼Ðý}û¯ÁÛꯠ¨FÉ5ꤑ$åÁˆËꯠèˆ5  œåIy ²êVHÊG”g¬%å…îÉ‘× Iù€¢%ר“Ƈs/ÿ{)PR9òZ!)PtD(§@A9Ê“òdÕM÷€òŒµ±¤¼Ðý}Ëüo«¿v€¢%ר³F T”#.«¿v€¢#Ö€‚r ”'å-Ȫ[!)—(ÏXKÊ Ý³#¯”KÕ(¹F5 *Hʃ—Õ_gþî$ Ê)PPNò¤¼Yuë{@yÆÚXR^èž|Û õ= ¨FÉ5ꬑ$åÁˆËꯠèˆ5  œåIy ²ê6¶¾mÐbéá0–S <)oAVÝ®= béÛXNò¤\ƒ¬ZiD ‹uNüÁZþ°4 V%Ý®öºúëÌëœøƒµüA£åuÖx0 ‚¤<qYýuæ‹u(PtD(§@A9Ê“r ²j•( €òŒum«¿’îâ×Õ_gþº@ Õh¹F5²G/$åÁˆËê¯3SŠŽå((§@yR®AV­ºçPž±®M`õWÒýáÉéºúkÇ¡¨FË5ꤑ;T”#.«¿vŠŽXs((§@yR®AV­–µþª×ºúë|\«¿’î™CY ÔªÑîå-ר“ÆöÁ€ ’ò`Äeõ×™¿ÆEG„r ”S <)× «Ö¾”g¬kXý•txrº®þÚŠj´\£Î)PARŒ¸¬þÚŠŽX Ê)Pž”kUëÈjPž±®M`õWÒ=;òFT €¢-ר³Fú)/Hʃ—Õ_g¾©‰EG„r ”S <)× «Öc(ÏXõ`@åÝžœ®«¿v€¢-ר³F T”#.«¿v€¢#Ö€‚r ”'ådÕzæ@I”g¬kXý•tÏŽ¼3J ¨FË5ꬑ›$åÁˆËê¯3 0ŠŽå((§@yR®AV­×Pž±®M`õWÒýáÉéºúk(ªÑr:iä@Iy0â²úk(:b ((g@™'ådÕö‘Ç'ÊbéY–S <)· «6Ñvv³ÖÕ_çã*XýEoí~²îëê¯çîç_tþòÌËÿ^ö‚ ë{Pñ5 œBàé¶ù²‚5§_W ¨`õ½ #…`í¾®þzî~þE÷çß5~ùßK![8¸øÒ#,§x"mA&lGx–¹6Õ_ô69@@»ŸÑýù—¥^þ÷RŽ­Œ†‹/e4XN_¹üϧ£¯ûÙÖå[W¾å¬åK£`õWÒýŸ/ÛµyewוïA¹ðkùƒFÉ5ê¬QA#¬þZðT¾Ž¸¬þºòWÝ\(>â\ŽY9ù§ÚÏl¿î_µ]—o]ù˸(PâR„•w¿Ï{[ýuå/ã¢@Q’kÔYcc@IqYýuå_¥@ÑçrÔ\ÎRJƒ[ª9PW”ºe@åÝ3 4ê €¢%ר³Æ‹¥PZJs ®(:â\ΚË9Pæ@YpKmïÈ3—b ¨¼û}ÞÛê¯#j”\£Îé‘gP|Äeõ×ΑGG¬ys9ª;P=¸¥}Ï¡ºKé ¨¼û?obá@õ=‡¢%ר“FîP=Џ¬þÚq(:bÍ¡ærÔp FpKG T³¨áR*ïž9ÔHjE5J®Q'ÍP#j”j¤@5 €¢#Î娹œu8PGpK¨u¸”ƒ•wÏêÈêPT£äuÖØPGÔQr¨#ª@ÑçrÔ\Î:¨3¸¥çžC.åd@åÝïóÞVí8Õ(¹F5R‡: øˆËꯇ¢#Öj.ç@]ÔÜÒkÏ¡.—r1 òîÿ¼‰…uí9Õ(¹F5R‡º øˆËꯇ¢#Öj.§@}çã_÷¤|]¾u囚PßåK£`õWÒ=q(®Q˜F¹—?h”\£ÎÙ§¼ý#¨`Äeõו¿;‰ÅGœË)PPÎò¤¼Yuk{@yÆÚXR^èþ¾ý×àmõ×PT£äuÒÈ ’ò`Äeõ×PtÄPs9Ê“òdÕ­”(ÏXKÊ Ý“#¯’òE5J®Q'æ^?/J*G^+$å#ŠŽ8—s ær”'å-Ȫ›îåkcIy¡ûû–ùßVíE5J®Qg¨ )F\VíEG¬5—s <)oAVÝ I¹@yÆÚXR^èžy…¤\ ¨FÉ5ê¬QPARŒ¸¬þºòw'Q èˆs9j.ç@yRÞ‚¬ºõ= béÛPÎò¤¼YuãIyg‡û­üai¬þJº¿oímõו¯þºðkùƒFÉ5ê¬qýŒiõ×úƒ§òuÄeõׯÃa>béá0”s <)oAVÝΨ+Ê3Öµ ¬þJºg@9PWÕ(¹F5^ ¨3ê,un=æ#–C9Ê“òdÕíÚÊ3Öv1 òîï[¢v[ýµÕ(¹F4r ®(>â²úk(:b ¨¹œ%ž”KUËG Ôíó[¿•?,‚Õ_I÷(®Q˜F¹—?h”\£Î%¨`Äeõׯ³<>béY”s <)— «–¶”g¬kXý•tß"ÚÛꯠ¨FÉ5ꬑÕ øˆËꯠèˆ5 ær”'ådÕ"9P=Ê3Öµ ¬þJºg@IT€¢%ר³ÆÎ€’()%[‡ùˆ¥‡ÃPÎò¤\‚¬Zt(ÏXEPy÷÷-ó¿­þÚŠj”\£Î)PÅG\VíEG¬5—s <)— «Ë bñŒUŒ•wÏ€²¨ 6à%ר³Fˆ@Y (Ûz8ÌG,=†r”'ådÕÒ÷€òŒU:*ïþ¾}³ë¶úk(ªQr:iä@õ(>â²úk(:b ¨¹œåI¹YµŒ<6Pž±Ê`@åÝ3 FŒ(ªQr:k ¨5J@­‡Ã|ÄÒÃa(ç@yR.AV-ÇPž± KÊ Ýß·_·¸­þÚŠj”\£Î)PARŒ¸¬þÚŠŽXj.ç@yR.AV-…¤\ béÛPÎò¤\ƒ¬ZiD ‹u.üÁZþ°4 V%Ý®öºúëÊë\øƒµüA£åuÖx0 ‚¤<qYýuå‹u(PtĹœ5—s <)× «Vɲ(ÏX×&°ú+éþð(~]ýuå¯ ¤@Q–kÔY#{ô¢ARŒ¸¬þºò7ÅQ èˆs9j.ç@yR®AV­ºçPž±®M`õWÒýáÉéºúkÇ¡¨FË5ꤑ;T”#.«¿vŠŽXs¨¹œåI¹YµZ Ôú«^ëê¯ëqi¬þJºge)P«F»—?h´\£NÛ*Hʃ—Õ_WþC q.ç@Íå(OÊ5ȪµïåëÚV%Ýžœ®«¿v€¢-ר³F T”#.«¿v€¢#Ö€šË9Pž”kUëÈjPž±®M`õWÒ=;òFT €¢-ר³Fú)/Hʃ—Õ_W¾©‰EGœË9Ps9Ê“r ²j=ö€òŒUTÞýáÉéºúk(ªÑr:k¤@Iy0â²úk(:b ¨¹œåI¹Yµž9PåëÚV%ݳ#ïÌ’(ªÑr:kdÁ¦Iy0â²úëÊßL¢#Î娹œåI¹Yµ^{@yƺ6Õ_I÷‡'§ëꯠ¨FË5ꤑ$åÁˆËꯠèˆ5 ær ”yRnAVmylpr Ì3Vû @º'G×hL£ÝË4Z®Q'¿N”Iy0â²úëÊë0 øˆs9 Ê9Pž”[U[!)ïPž±KÊ Ý‡²BRÞ ¨FË5ꬑ}cÓ‚¤<qYýuå‹u(PtĹœ5—s <)· «6Ùs(ÏX%å…îâ×Õ_;E5Z®QgÔ¡‚¤<qYýµãPtÄšCÍå(OÊ-ȪM÷Ê3VcIy¡{ò,ÏtÏ¡¨FË5ꬑ:T”#.«¿vŠŽXs¨¹œåI¹YµÙÖ³<óŒÕXR^èž9”m=Ëã-ר³Fö,Ï‚¤<qYýµñ,Xz–å(OÊ-ȪF´Ý¬uõ×õ¸€ VÑ›E»Ÿ¬ûºúë¹ûùÝŸ¿<óúù{é .¬ïA@Å× ˜Ë9žn[/ÛH!Xsúuõ×õ¸€ VÑÛ0RÖîëê¯çîç_tþ]ã×ÏßË![8¸øÒ#(çx"mA&lGx–¹6Õ_ô69@@»ŸÑýù—¥^?/‡àØÊh¸øRFåü•Ëÿ|:úº‘mY¾õûgÉ(_VýþÙÃÒ¨yõé®AwaÝ—¥^¤»äÝ-èN_óPþ5i?_KýºAuYY•Þ†Üq)Ânƒ·AòÛЂÛ@»KÞÝ‚îô«˜åŸQ“ös#¿¢[*??K–¸ðÛ .EÙmÐà6h~®à6Ðî’w· ;}ÉCùgÔ¤ýüÎ×ý?u–õH[¦d.ÅØm°à6Øž)Ñî’w· {Í”h÷®4ú¹ =¸ }ï߆îR:» =¸ }ïßÚ]òît¯ýÛ@»¿pÐÏmÁmémh܆áR» #¸ #½ Í‚Û@»KÞÝ‚îôý#åŸQ“öó¹¯û÷—6émèÁm8\ÊÁnÃ܆#¿ =¸ ´»äÝ-èN_²ðPþ5i?í×=­]Ö¾lýÛpº”“݆3¸ çÞ¿ ´»äÝ-è^û·v᪖ŸÛp·áÚû·ár)» Wp®½hwÉ»[нöoíþÂ'ß·aÍ–#émþKé»üa5Ƽà„ÞÞ]X÷eu é.yw ºÓ÷*<”FMÚÏW¾îßëZslÝÿ$ÙØ§è|Šnmï6Ðî’w· {í6Ðî/\¦ñs‚OÑ­ð)z·Á?I6ö)ºŸ¢[áSôní.yw ºÓßá(ÿŒš´ŸùÝRùùÙÿòmðO’}ŠnÁ§è¦{·v—¼»Ýk·vá↟Û|Šn…OÑÜÿ$ÙØ§è|Šn…OÑÜÚ]òît§¿/þPþ5i?‡üWtÜËÏÏþ—oƒ’lìSt >E·¾whwÉ»[нvh÷. ø¹ Á§è6¶ÖæŸ$ûÝ‚OÑml%¬¼»äÝ-è^JXy÷¾Zÿç6Ÿ¢ÿÝY´×oå/eŸ_­Ïoÿͺ//Í'Ý%ïnA÷R´Ç»¿ð…ô?·!øÝÎü6\ÁmðO’k“ù…ôü6œùm¸‚Û@»KÞÝ‚î¥hwákÜnCð)º]{·Á?I¶‹Ý†àS4ï^» ´»äÝ-è^» ´û _~þ}$ø-ém¸ý7P¿•?¼6{~ù9½ ¼»°îËkÍIwÉ»[н”)ñî/|eøÏm>EKÛ» þIrm2¿2œß†¶whwÉ»[нvh÷¾hûç6Ÿ¢EòÛЃÛàŸ$×&ó‹¶ùmü6ôà6Ðî’w· {)ÚãÝ_øzêŸÛ|ŠÝ» þIR”݆àS4ï^» ´»äÝ-è^» ´û _êüs‚OÑbùmþƒUü“¤» Á§hÞ]X÷åuͤ»äÝ-è^Šöx÷¾ ùç6Ÿ¢¥ïÝÿ$)݆àS4ï^» ´»äÝ-è^» ´û _ üs‚OÑ2òÿ`ÁmðO’2Øm>Eóîº/¯&Ý%ïnA÷R´Ç»¿ðµ»?·!ø-ÇÞmðO’Â>EKð)Z޽Û@»KÞÝ‚îµÛ@»¿ðeµ?·!ø-…OÑÜÿ$)ìS´Ÿ¢¥ð)Z‚Û@»KÞÝ‚î¥hwá+^nCð)Z®½ÛàŸ$…}Š–àS´\{·v—¼»Ýk·vá‹Q¿oƒŸ¢5ÿý«ñÛ þIRÙ§h >Ekþ)úWã·w—¼»ÝK +ïþÂ׉þ܆àS´ÒO’óËú |yè”vû§^Iw ºë¾¼(”t·¼»Ýé+îÊ?£&íç}Š_÷7+.¯ÁLoƒ·Á?I®Mæ—pòÛ ùm°à6Ðî–w· ;ýM§‡òϨIûy á×ý}„ËË#·þmðO’k“ùÕ•ü6èÞ¿ ´»åÝ-è^û·vá nCð)Z-½ ë·p–>þH1v‚OѼ»±îË«IwË»[ÐþÊ×CùgÔ¤ý¼ñîëþî»åE…[·Á?I®Mæ×$òÛÐ÷nínyw º×níþ— þ܆àS´Žü6´à6ø'ɵÉürA~F~ZphwË»[оAí¡ü3jÒ~Þ®öuÏÚòR¼­ÛàŸ$õ`·!øÍ»×nínyw º×níþÂÙý܆àS´žùmà6ø'ɵÉü";~Îü6HphwË»[Ðþ&èCùgÔ¤ý¼ÉëëþN¯ål[·Á?I®Mæ×¿ñÛpíÝÚÝòît¯ÝÚý…/Mû¾ |жü?XO~Ì?IÚ¹ |ŠæÝu_^‡Fº[ÞÝ‚îôE>åŸQ“öóÖ¨¯ûû£–—}¥·¡·Á?IûmÁ§h+|ŠîÁm Ý-ïnAwúú›‡òϨIûy×Ò×ý­KË+²¶þmðO’Æ>E[ð)ÚdïßÚÝòît¯ýÛ@»¿ðµV?·!ømº÷oƒ’4ö)Ú‚OѦ{ÿ6Ðî–w· {íßÚý…/ƒú¹ Á§h³­LÉü“¤±OÑ|Š6ÛÊ”xwË»[н”)ñî/|…ÒÏm>Eý$ÙÙ…X^¡ô#¥ßþ©WÒ]ƒî'ë¾¼B‰t?óît¯ÝÚý…/1ú¹ Á§hémX?Ð//1ú‘2Øm>Eóî'뾼Ĉt?óît/…¼û _#ôs‚OÑvä·A‚ÛàŸ$×&ók„øm8òÛ Ám Ýϼ»ÝKŸx÷ÿø§þûÿù?þùGÿõÿøþÿþÞj׿t^¹üà©ü"å¿WXÏ?ðß~€òÖoÿÔëçE;ø÷¶[ù׃ÆöçÍ$•rcå½T>XùQ*?YùU)ÿýZ°ÇòVºt]ºVºt]ºVºt]ºVºt]ºVºtÂ.”.°K'¥K'ìÒIéÒ »tRºtÂ.”.²K§¥K§ìÒiéÒ)»tZºtÊ.–.²K§¥KgìÒYéÒ»tVºtÆ.•.±Kgù¥û>eäæóß§Œä§ŒÞþ)ÿjÖú÷’CJØ!%Oon‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”°CJJ‡”’¯{â>Ø!¥gÜÀ=¤”Rú”‚Ý)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)e‡”–)ÃÃäÏ!e¥Cê¹|à”RÆ)Kϸߖfì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!eì²Ò!ÕÙ!ÕK‡Tü:ÂÀtzHõ§bmù{ŸÃÆß–ÖÙ!ÕK‡Tg‡T/RR½tHuvHõÒ!ÕÙ!ÕK‡Tg‡T/RR½tHuvHõÒ!ÕÙ!ÕK‡Tg‡T/RR½tHuvHõÒ!ÕÙ!ÕK‡Tg‡T/RR½tHuvHõÒ!ÕÙ!ÕK‡Tg‡T/RR½tHuvHõÒ!ÕÙ!ÕK‡Tg‡T/RR½tHuvHõÒ!5Ø!50$‡Ô`qß(Å}ãñ“T¿ý½OF½ˆÿcÔrûÁS¹²r+•wV>Jå+?Kå)ÿ}üäå]ºVºt]ºVºt]ºVºt]ºVºt]:)]:a—NJ—NØ¥“Ò¥vé¤té„]:)]:a—NK—NÙ¥ÓÒ¥Své´té”]:-]:e—NK—NÙ¥³Ò¥3vé¬téŒ]:+]:c—ÎJ—Î/Ý÷ñsä…äöOý9~Žü‹ÿ)vÊ›Õq;"¿îâùG¡ƒ}*”+ï¥òÁÊRùÉʯJùï³è`… åìÒµÒ¥kìÒµÒ¥kìÒµÒ¥kìÒµÒ¥vé¤té„]:)]:a—NJ—NØ¥“Ò¥vé¤té”]:-]:e—NK—NÙ¥ÓÒ¥Své´té”]:-]:c—ÎJ—ÎØ¥³Ò¥3vé¬téŒ]:Ë/Ý÷Yt>ž2‚?à§Ìcùo·9ã‡J_÷îðYæ,}–9Ùg™Bygå£T~°ò³T~‘òßçG^ÞØ¥k¥Kר¥k¥Kר¥k¥Kר¥k¥Kר¥“Ò¥vé¤té„]:)]:a—NJ—NØ¥“Ò¥vé´té”]:-]:e—NK—NÙ¥ÓÒ¥Své´té”]:+]:c—ÎJ—ÎØ¥³Ò¥3vé¬téìñÒ}WéÓÄu‹¼¾€«ôiâbŸ& åÆÊ{©|°ò£T~²ò«Rþû4¸Ø§‰B9»t­té»t­té»t­té»t­té„]:)]:a—NJ—NØ¥“Ò¥vé¤té„]:)]:e—NK—NÙ¥ÓÒ¥Své´té”]:-]:e—NK—ÎØ¥³Ò¥3vé¬téŒ]:+]:c—Îj^wO‡;øó/¯®ÿ=OÊ­TÞYù(•¬ü,•_¤œþþôúßó¤¼té»t­té»t­té»t­té»tRºtÂ.”.°K'¥K'ìÒIéÒ »tRºtÂ.–.²K§¥K§ìÒiéÒ)»tZºtÊ.–.²Kg¥KgìÒYéÒ»tVºtÆ.•.ÝãkþëûÿüŸŸÿöŸþñߣišDyLP-1.10.4/Data/Netlib/ship12s.mps.gz0000644000175200017520000011415010430174061015570 0ustar coincoin‹ãK®9ship12s.mps¥½]²åÓ×åüëçåû=ËÏ¿òå¯bGóõ_9»þWúå¯qùkÚ÷ðëYþ×?þiÇþB?ÿÊ—¿Ê寫]»üÕ/Ë_Óü•/xù‚—/xù‚—/xù‚—/xù‚W.xå‚W.xå‚W.xå‚W.xå‚W/xõ‚W/xõ‚W/xõ‚W/xõ‚×.xí‚×.xí‚×.xí‚×.xí‚×/xý‚×/xý‚×/xý‚×/xý‚7.xã‚7.xã‚7.xã‚7.xã‚7/xó‚7/xó‚7/xó‚7/xó‚·.xë‚·.xë‚·.xë‚·.xË⥗ÅÛÿÊ—¿Êå¯zù«]þê—¿Æå/‹w‰/é_Ò%¾¤K|I—ø’.ñ%]âKºÄ—t‰/é_Ò%¾¤K|I—ø’.ñ%]âKúŽ/{lý¿þéþ Ÿï?²ý£Ø?ªý£Ù?ºýcØ?.8Ëü‘^öûÉ>A²Oì$ûÉ>A²Oì$ûÙ>A¶OídûÙ>A¶OídûÙ>A¶OPìûÅ>A±OPìûÅ>A±OPìûÕ>AµOPíTûÕ>AµOPíTûÕ>AµOÐì4ûÍ>A³OÐì4ûÍ>A³OÐì4ûÝ>A·OÐítûÝ>A·OÐítûÝ>A·O0ì ûÃ>Á°O0ì ûÃ>Á°O0ì ûÓ>Á´O0íLûÓ>Á´O0Íd]².ÙF—l£K¶Ñ%¿.ÿµaÿ˜ö3žl£K¶Ñ%Ûè’mtÉ6ºd]².ÙF—l£K¶Ñ%Ûè’mtÉ6ºd]².ÙF—l£K¶Ñ%Ûè’mtÉ6ºd]².ÙF—l£K¶Ñ%Ûè’mtÉ6ºd]².ÙF—l£K¶Ñ%Ûè’mtÉ6ºd]².ÙF—l£K¶Ñ%Ûè’mtÉ6ºd]².ÙF—l£K¶Ñ%Ûè’mtÉ6ºd]².ÙF—l£K¶Ñ%Ûè’mtÉ6ºd]².ÙF—l£K¶Ñ%Ûè’mtÉ6ºd]².ÙF—l£K¶Ñ%Ûè’mtÉ6º]Š.ÅF—b£K±Ñ¥¼.ÿµaÿ˜ö3žb£K±Ñ¥ØèRlt)6º]Š.ÅF—b£K±Ñ¥ØèRlt)6º]Š.ÅF—b£K±Ñ¥ØèRlt)6º]Š.ÅF—b£K±Ñ¥ØèRlt)6º]Š.ÅF—b£K±Ñ¥ØèRlt)6º]Š.ÅF—b£K±Ñ¥ØèRlt)6º]Š.ÅF—b£K±Ñ¥ØèRlt)6º]Š.ÅF—b£K±Ñ¥ØèRlt)6º]Š.ÅF—b£K±Ñ¥ØèRlt)6º]Š.ÅF—b£K±Ñ¥ØèRlt)6ºT]ª.ÕF—j£KµÑ¥¾.ÿµaÿ˜ö3žj£KµÑ¥ÚèRmt©6ºT]ª.ÕF—j£KµÑ¥ÚèRmt©6ºT]ª.ÕF—j£KµÑ¥ÚèRmt©6ºT]ª.ÕF—j£KµÑ¥ÚèRmt©6ºT]ª.ÕF—j£KµÑ¥ÚèRmt©6ºT]ª.ÕF—j£KµÑ¥ÚèRmt©6ºT]ª.ÕF—j£KµÑ¥ÚèRmt©6ºT]ª.ÕF—j£KµÑ¥ÚèRmt©6ºT]ª.ÕF—j£KµÑ¥ÚèRmt©6ºT]ª.ÕF—j£KµÑ¥ÚèRmt©6º4]š.ÍF—f£K³Ñ¥½.ÿµaÿ˜ö3žf£K³Ñ¥ÙèÒlti6º4]š.ÍF—f£K³Ñ¥ÙèÒlti6º4]š.ÍF—f£K³Ñ¥ÙèÒlti6º4]š.ÍF—f£K³Ñ¥ÙèÒlti6º4]š.ÍF—f£K³Ñ¥ÙèÒlti6º4]š.ÍF—f£K³Ñ¥ÙèÒlti6º4]š.ÍF—f£K³Ñ¥ÙèÒlti6º4]š.ÍF—f£K³Ñ¥ÙèÒlti6º4]š.ÍF—f£K³Ñ¥ÙèÒlti6º4]š.ÍF—f£K³Ñ¥ÙèÒlti6ºt]º.ÝF—n£K·Ñ¥¿.ÿµaÿ˜ö3žn£K·Ñ¥ÛèÒmté6ºt]º.ÝF—n£K·Ñ¥ÛèÒmté6ºt]º.ÝF—n£K·Ñ¥ÛèÒmté6ºt]º.ÝF—n£K·Ñ¥ÛèÒmté6ºt]º.ÝF—n£K·Ñ¥ÛèÒmté6ºt]º.ÝF—n£K·Ñ¥ÛèÒmté6ºt]º.ÝF—n£K·Ñ¥ÛèÒmté6ºt]º.ÝF—n£K·Ñ¥ÛèÒmté6ºt]º.ÝF—n£K·Ñ¥ÛèÒmté6ºt]º.ÝF—n£K·Ñ¥ÛèÒmté6º ]†.ÃF—a£Ë°Ñe¼.ÿµaÿ˜ö3ža£Ë°ÑeØè2lt6º ]†.ÃF—a£Ë°ÑeØè2lt6º ]†.ÃF—a£Ë°ÑeØè2lt6º ]†.ÃF—a£Ë°ÑeØè2lt6º ]†.ÃF—a£Ë°ÑeØè2lt6º ]†.ÃF—a£Ë°ÑeØè2lt6º ]†.ÃF—a£Ë°ÑeØè2lt6º ]†.ÃF—a£Ë°ÑeØè2lt6º ]†.ÃF—a£Ë°ÑeØè2lt6º ]†.ÃF—a£Ë°ÑeØè2lt6ºL]¦.ÓF—i£Ë´Ñe¾.ÿµaÿ˜ö3ži£Ë´ÑeÚè2mt™6ºL]¦.ÓF—i£Ë´ÑeÚè2mt™6ºL]¦.ÓF—i£Ë´ÑeÚè2mt™6ºL]¦.ÓF—i£Ë´ÑeÚè2mt™6ºL]¦.ÓF—i£Ë´ÑeÚè2mt™6ºL]¦.ÓF—i£Ë´ÑeÚè2mt™6ºL]¦.ÓF—i£Ë´ÑeÚè2mt™6ºL]¦.ÓF—i£Ë´ÑeÚè2mt™6ºL]¦.ÓF—i£Ë´ÑeÚè2mt™6ºL]¦.ÓF—i£Ë´ÑeÚè2mt™6º,]–.ËF—e£Ë²Ñe½.ÿµaÿ˜ö3že£Ë²ÑeÙè²ltY6º,]–.ËF—e£Ë²ÑeÙè²ltY6º,]–.ËF—e£Ë²ÑeÙè²ltY6º,]–.ËF—e£Ë²ÑeÙè²ltY6º,]–.ËF—e£Ë²ÑeÙè²ltY6º,]–.ËF—e£Ë²ÑeÙè²ltY6º,]–.ËF—e£Ë²ÑeÙè²ltY6º,]–.ËF—e£Ë²ÑeÙè²ltY6º,]–.ËF—e£Ë²ÑeÙè²ltY6º,]–.ËF—e£Ë²ÑeÙè²ltY&ºülN|ÿ‘íÅþQíÍþqù¯ ûÇ´,ó‡‰.ûö ’}‚dŸ Ù'Hö ’}‚dŸ Ù'Hö ²}‚lŸ Û'Èö ²}‚lŸ Û'Èö ²}‚lŸ Ø'(ö Š}‚bŸ Ø'(ö Š}‚bŸ Ø'(ö ª}‚jŸ Ú'¨ö ª}‚jŸ Ú'¨ö ª}‚jŸ Ù'hö š}‚fŸ Ù'hö š}‚fŸ Ù'hö º}‚nŸ Û'èö º}‚nŸ Û'èö º}‚nŸ`Ø'ö †}‚aŸ`Ø'ö †}‚aŸ`Ø'ö ¦}‚iŸ`Ú'˜ö ¦}‚iŸÀFÛ«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«{9ql¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯n²½ºÉöê&Û«›l¯núêÕýïÿñ?ÿßû÷ãÐëþÿþŸüó¿­tßÇ_Øÿ—æ,Û_gOý_·×±ûöå`óïS¨ŸÿêÇyä5bþù¯~œç6̓ý·´}šÿ<²p}þë¿*îWtˆåï†XÔ ±¼û¦iˆÕâzµàëß ±ª!Vb}7oÒ»OÔbÿ»!v5ÄŽCìïâp¿bý¨;øØÓËÑ>Í/C|ÿ«Ï! óÏõã< Cïfâô†¸¿Èß¿â÷+þø óó+þúW¿}E6ÿüW?Îc¸0ÄùÞí¢!.—¨¯î}Å}äóã3¬ß¿â÷¿r¾"™þ«çÉ_âz—Üaˆ)9CÜ'¼—÷¿ž!}š~Åïå|E2ÿüW?Îÿ÷C<Ì®ÌiˆÙbÁ!æ¿bVCÄy1å÷òà~ˆíå~ÅWs‰:KIgú2ÿ$ê÷¿:‡Ø"æŸÿêÇy)Äí¿Ì¦!º_ñUZpˆùÕ3ñÝàÝìfÍbù»!5Ä‚C|g78ÄêÅbý»!V5ÄŠC|g78Äæ~Åñ ±ýÝ›bÃ!¶wK< ±û_1:ÄþwCìjˆ‡øNàpˆ^—Ó+‡8þnˆC qàß ÑMàf}…¸IàZÄüó_  ñÀáÝnùóâoytó¸Ï4¼EÌ?ÿÕ™ÀÑß  1½œ!¶ž—·˜Ê¯Ÿ§i/柋©ïõÛWdóÏõã¼æ~ˆ‡ùϽZˆÿñ¿ÿqSØÈ¥}­¿/²ºØ~op]Ì¿/¸úüW?Îû³"æŸÿJ6ÞæXØøþWÅbOÁ!–¿bQC,8DUØøþWîÔ_F ±þÝ«bÅ!ªÂÆ÷¿ê>Q£_±ÿÝ»bÇ!ªÂÆ÷¿rçÅ}%v3Äﳋ¹3Äý_ùC¼5ÿüWª°ñ6ÇÂÆ÷¿šîÔŸ§;D×ü·!~ý+oˆ`þù¯TaãmŽ…¯å®úË«n†˜¶þiî qÿWþoÍ?ÿ•Zõ¿ÍqÕÿý¯²?Äbþ»!f5Dœ4Ôªÿ?ÿõ¸SÌYõïkè-•y®»3›ÿ¼ìÇõQ~¼ï0»G/^ÍaÏKë'zaóŸ×¡=@¯ú>•ô’OôÊæ?ï_{€îÖ[fÙæš~ÅÃ1w*Aôî¾ùº}î_×n²ùÏ»À O½½¶žÍ›ŸlþóÚ«èÉÉSÛX†u‰Í‹ž‰óz[O3Æù,9Ÿ‰ó¿£çÔ·^gŒóYr>çôž·’jŒóYr>ç7_vK9Æù,9Ÿ‰óú¬[-5Æù,9Ÿ‰óÞâ`öm”ç‹ä|¡Y¦hËl.f™BœwÐ÷µíJAÎÉùBœwÐ_¯­•ã|‘œ/Äyï»—´Íã|‘œ/Äy}½¶·lßü`óŸ·÷>@ŸÞ›ß)¿¢™U“×È㜂Ýxmµg™.=®ºWK׬2±¹@„rÙJ¢O‰> ÝÙ™©s›-ÇЗD_àqî¦ÉX[o!û¹mwü‹Û‡÷ªoel-ÇÞ|Jjì‰VÐ^alO*SðÍ'¹‚N´–IÕ­ä›ã’Ìëezï[k±Ud’Ù¡ï1Ý™ãÆ>öà›—ó{¢ùÝAÿÑú–gl—äüNèÅCß³‹œß“œß ½zo¾Ï­Ù¶²9Ïï„Þ<ôz$9”QŸèíz÷ÞüŸp^f„>½±—¼½j,£Nr~'ô”œù½ÙEÐãäüž:yœ·¸Ö–b«È=?@/ú<êó±Zå‰^ Wýhži+V·9Ñëôæ¡ÿÁöDoл÷ækßʈåóoôöä»O—u#o-V·y£Ï'ß=%'§me«-˜ÛÈœ6 »—Q¯=ÖÍØØ‡û Î;u«Û"œŸ’ó“Зžß+› tȨk~¹»¯Wl?.¿z¦Œ:;;¡õ¨]Äâ|–u†Œ:{èå(”Æâ|–û°„^<ô6¶9k(Îg¹KèÕAßCmÙiûîr–Л‡~³ÙF(Îg¹Kè32öÉæmøÍ;ë¸} ›WÌß³Ü Ì´™Ý¶§6Á}™,÷e2íIe'«lÇ6ÖùåZ&Ój"w]§­l.ÆNÙEvæ¸ñsÄòù<ôÑ·j{›sFMèÓåüG÷þdsáïÔùP¼3©õXBÇü]v>ȨSu‹´ ¡×—B¯QwývFªì»`t¯Zø£´-ˆ.ÏMT껨Ywó&6ožú.jÑ»‰Í:u2{èòæe'3£W·ã¥c]•]•º>ª·ÿþÚæŒeÔUv}Têú¨^¥´n¥Æº:«¬”z©~ÏÉZ±ŠY•]„^½±¿Ž·Ø:®Êu¡·èxilÎó;¡w—uÇj"èq²ëƒÐ‡‹¾¶Qb³*{J }V·›wl+¶^eÏ ¡§Úÿê´N•='•zN<ôuœ‹íEVÙsBèÅCG/qÐßeÏ ¡W=µ=èïr_†Ð›7öÝ}¶Ëç«ì9!ôî~÷×NùówY5"ôyóæÛŠuyUÙsBè©]1Kl.<ŽÖï5°†Ml.Ði5Q—Óét¬¤‚y\MÔEœ_n·Ï î èízjÎjb¶ë‰ÔÄæ<öF»Íé»HGw,¯krw QçCKnºÕX´i²óп¢„³3r9‰œØ\Œö&š{Ññk_Í„æ¸=?@/z^ûò=ÖWÙäpB¯úÑr²‚{Mî zóÆþ¹ÝØ\°ŽNa{èsm­Çf™&OazjÞIä±½‚+è&WÐ:^ôœÛµJœÙ\p¾ç‹×éÔ¶W‹q¾HÎÓn ÷ækÛfðÞƒ&{½ycïÇ-+±u\“gÀ ½GX×Ùœó:BÞØ[ÚúŒÕißèýÉ›Ÿîwÿèêœl.üN 7ï$òþáëŠù»<©Ô¨jÔšÞHl.ЩjÔ¼ó2G¤í 5Y5"ôâŽ}muÄV‘MV½zcß§¸×ˆíÃ6Y5"ôæý³‡¼±¹ˆ6T5jnåäp¹X´‘U#BúôY5Y5"ôùî“ÍE´¡ªQóªå¸r"æï²jÔ¨jä ç}ì+êï²jDèÅûG½®°¹ðwª¹è{BŸSÌßeՈЛ‡þ¹ûߨ\ø;Uô”SA—U#BîØ?ú¬› §š•;öc/2¶ ÜdÍŠÐSº£5±¹ðwêöñÐÛ1ë²Û‡Ð¿ºôU¤Ml.ÆN/úç]^™ÍE¬£Ž—èú(l.bu¼xcÏGÿ|¬ã¥ÉŽBoÞØ?ï»hl.XG/ÞØÿà–•&;^}xcÏçs,ÖÉŽBŸíïzÈ›ìx!ôÔ¼òã4n0ÖÉu[äïN…|ô-¯`µpI_äïÎØ÷h“[Ðß—ôwêŸwÑ?ºû*› §Ý8‘ÚØ\ø;Ýñâ}÷ÏÛq;› _äï^—×¾˜I#æïKúû"_uwß}>a]꯿ÊmºÜ—é°/“=ôÏ3¡™ÍÙß ½ô—{Yš1?ÑËôê¡§ã´N¬RÚåyBoÇU¡!?ÑÛôîŽýètŠ‹ì²·Ð‡7öÏ[•›³¿útYwTÈcóû}>a]êÅ=‘š‚7‰u¹3Ò©>ï¡ÿÁt—õyBÿã_Ü ×e•¸Ó=¥zÚç÷üŠ­eº¼§”Ћ;ö£í"ëä=¥„^½±§=vF¬Ë3b„Þzà¦ÐÆæ‚utY÷ïhÍ)–ÛtÙÑJèÓûžWέŢ¼%•9ïÕi³B±3b]îMtÚé^ŸÕ±#«”vY)íT§íÃí)M98vy>®Óé¼>ÿêLh—•“Nu›¾toafsN«‰áÝñrÔmbÕƒ!Ï ºaf8]ëh-Œ­a‡ìxt÷þ(º>ßÙ\Œ:†mÆ‘ØÅÆ.ç¸AÑf8Ñfõ-¥燌6ƒ¢ÍpjÔ»¿­»Œ6ƒjÔcx­e[±ð!kÔƒ¢ÍpêuíèlŒÅº!£Í h3–{/qÞ42d´T·™/÷ÖļÛgÊuܤô̺§4³9}RŸÕôúmòÖƒ· O¹š˜m<ôc{àcÝ”}V„^<ôuTÌb½…SöYzõÐóqR)È:ÙgEèmzNÇy™Ø:nÊu¡woìó(]ĪSÎq̺êžÖYÁX7å7oç¸ÑË·èùÔËwèù^Ñ)GtÄò-çó©#–ï8è±|Ëù|êˆå;Î#z@G,ßr>Ÿ:bùŽóˆÐË·œÏ§ŽXnO¾{@G,ß®"ó©#–ç“ïÐË·³L>uÄòÝ,“ïrDGŒ9Ÿ%ç3q^êˆ1ç³ä|&ÎK1æ|–œÏÄy©#Ɯϒó™8/uĘóYr>祎s¾HΚeŠö¸Ìæb–)Äy©#Æœ/’ó…8/uĘóEr¾祎s¾HÎâ¼ÔcÎÉùBœ—:bÌù*9™•ÔcÎWÉùJ³ŒÔãY¦ÊY¦祎s¾JÎWâ|Õ±®³¹à|%ÎËÝæ|•œ¯Äy©#Æœo’ó8/uĘóMr¾盎´…ÍçÍ2RGŒg™&g™Fœ—:bÌù&9è±|»žO±ÜŸŒ= #ÆפÇ5ò8©#Æ×¥ÇuB—:bŒ>$ú t©#ÆèS¢OB—:bŒ¾$úÓ:bèq¿tÄî=î^G,GtÄpì)©±'ZAk1F—+èDk­#Æè2¯K”]h1þî2» ô€Ž]Îï‰æw­#†ó{’ó;¡tÄp~Or~'ô€ŽÎïIÎï„ÐÃŒúDoÐ:bÌy™]z@G ç÷$çwB舱ÇÉù=uò8©#Æ×¥Çuò8©#Æ×¥Çuò8©#Æ×¥Çuò¸þWkؽ=@舱ÇuéqˆóRGŒ9?%ç'¡/=¿W6èQtÄý—ŽØ=z¦ŒZëˆ!ë²Ì¨3dÔ1ŒóYîÃz@G ã|–û°„Ðãï.÷a = #†q>Ë}XBŸ‘±O6çhÃo^êˆñ›—»™ö"µŽ£Ë}™L{RZGŒ=N®e2­&´Ž]æ6™² ­#†ÙÅ/±ûì"SÕHëˆq¤•U£<é»K1þîS~÷I‘Vêˆq¤2ÒÒü®uĘu2» ô€ŽGÚ)#í$ÎK1æü”œô€ŽVÈßèýÉ›èˆñ,3å,ƒ¬[ºB^Ù\°Ž²J­#†èEf•…²J­#†±®È¬²Ðü®uÄxìr~/0¿tÄ0ÒÙõQ¨ëCëˆñØ«{%t©#Æè²ZX¨^§uÄ0ÖY=(´~×:bÌy¹~/ƒX'uĘuC²Ð:b8¿Ÿèåz@GŒY7$ë= #†óû‰Þ tĘó2§%ô€ŽΰEV= #Æ'3êBµÖc“5¡tÄØãdFMè1ö8™Qz@GŒ=NfÔ„Ðc“5¡tÄ0£.2£&ô€Žû»Ì¨ = #Æþ.; dÔ1D¯/…^!£èˆ!ëªì»`t©#ÆèòÜD¥¾ ­#Æo^ö]Tê»Ð:bŒ.{È+u2k1~󲓙ѥŽ£Ë®J]ZGŒß¼ìú¨Ôõ¡uÄp~¯²RJè1œß«ìú ô€ŽÎïU®ã= #†ó{•]„ÐcÎË®Bèˆáü^eO)¡tÄp~¯²ç„Ð:bìï²ç¤RωÖc—='„Ðc—='„Ðc—û2„Ðc—='„Ðc—U#B舱ÇÉžB舱ÇÉšU¥õ{ ¬a› tZMh1F—«‰ºˆóRGŒ9¿$çi-£uÄpìM®eíh1F—»:´Ž¾ù&;= #Æc—k™F{ZG ç¸=?@èˆá×äpBèˆá×䮡tĘuò 8¡tÄp–iò6¡tĘórݨãEëˆ1çå~¡tĘóEržvµŽs^öz@GŒ9/Ï€z°®³9çu„ÐÃuܽ?yó1öwyÐ:bìïò¤R£ª‘ÖctY5jT5Ò:bmdÕˆÐ:bmdÕˆÐ:bmdÕˆÐ:bmdÕˆÐ:bmdÕˆÐ:bmdÕˆÐgä»O6цªFZGŒý]VU´Žû»¬z@GŒý]V= #Æþ.«F„Ðc—U#B舱¿Ëª¡tÄØß»ôwªYi1öwY³"ô€Žû»¬Y5êöÑ:bÌ:ÙíCè1»¬˜5êxÑ:bëdÇ ¡tÄ8ÖÉŽBèˆq¬“/„ÐcÖÉŽBèˆq¬“/„ÐãX';^= #ƱNv¼z@GŒý]Ö¨Û"—:bìïKúû"—:bìïKú;õÏk1öwÙ½Oè1öw¹;@è1ö÷%ý}‘¿K1ö÷%ý}‘¿¯¿º»ï>Ÿ°. #†þÞå¾L‡}™€Žúû‰ž tÄÐßOôò= #†þÞåyB舡¿Ÿèíz@G ý½ËÞBB舡¿¿Ñû“7ÐC£Ï'¬ 舱¿Ë‘Nõy­#Ƭ“õyBèˆñØe•¸Ó=¥ZGŒc¼§”Ð:bëä=¥„ÐãX'ψz@GŒY'oI%ô€ŽÇ:ÙÑJè1Ž6ò–Tæ¼ÔcÎ˽‰N;#ZGŒÑe¥´SVëˆ1º<×étžÖctY9éT·Ñ:bŒ.×qVZG =nȳƒn˜Ñ:b8ö!;^ݽ¯uÄxìrzPçƒÖã±Ë9nP´Ñ:bŒ.£Í h£uÄ]F›A5j­#†¹Í5êAÑFëˆñØe´m´Ž£Ëh3¨n£uÄ0·™r7i­uÄpìSF›I}VZG Y7åjbR´Ñ:bùî±r;Ë”SG¬ÜÍ2å^Ñ©DtĘóYr>祎s>KÎgâ¼ÔcÎgÉùLœ—:bÌù,9Ÿ‰óRGŒ9Ÿ%ç3q^êˆ1ç‹ä|¡Y¦hËl.f™Bœ—:bÌù"9_ˆóRGŒ9_$ç q^êˆ1ç‹ä|!ÎK1æ|‘œ/Äy©#Æœ¯’ó˜YI1æ|•œ¯4ËH1žeªœe*q^êˆ1ç«ä|%ÎWë:› ÎWâ¼Ü`ÎWÉùJœ—:bÌù&9߈óRGŒ9ß$çq¾éH[Ø\p¾Ñ,#uÄx–ir–iÄy©#Æœo’ó€Ð+·;àåÔ+ýÉØ:bìqMz\#“:bìq]z\'t©#ÆèC¢B—:bŒ>%ú$t©#ÆèK¢/ð8­#†÷KGìÞãîuÄJDG Çž’{¢´Öct¹‚N´–Ñ:bŒ.óºDÙ…Öãï.³ BèˆñØåüžh~×:b8¿'9¿z@G ç÷$çwBèˆáüžäüNè1̨Oôö= #Æœ—Ù¡tÄp~Or~'ô€Ž{œœßS'“:bìq]z\'“:bìq]z\'“:bìq]z\'뵆=ÑÛô€Ž{\—×É㤎{\—G9­Öc“9m4v©#Æcrìƒ8/uĘóSr~úÒó{esu@G ÑéˆÝ£gʨµŽ².ËŒ:CFÐÃ8Ÿå>,¡tÄ0Îg¹Kè1þîr–Ð:bç³Ü‡%ôûdsŽ6ü楎¿y¹˜i/Rëˆ1ºÜ—É´'¥uÄØãäZ&ÓjBëˆñØen“)»Ð:b˜]üÒ»Ï.2U´ŽGZY5Ê“¾»Ôãï>åwŸi¥ŽGÚ)#-ÍïZGŒY'³ Bèˆq¤2ÒNâ¼ÔcÎOÉy@èˆa…üÞŸ¼ù€ŽÏ2SÎ2Ⱥ¥+ä•Íë(«Ô:bˆ^dVY(«Ô:bëŠÌ* ÍïZGŒÇ.ç÷ó{@G #m‘]…º>´Ž½Ê±WB—:bŒ.«……êuZG c]‘ÕƒBëw­#Æœ—ë÷2ˆuRGŒY7$ë= #†óû‰^ tĘuC²Ð:b8¿Ÿèíz@GŒ9/sZBèˆá [dÕˆÐ:bìq2£.”Qk1ö8™Qz@GŒ=NfÔ„Ðc“5¡tÄØãdFMè1ö8™Qz@G 3ê"3jB舱¿ËŒšÐ:bìï²ó¡@FÐCôúRè2ꀎ²®Ê¾ F—:bŒ.ÏMTê»Ð:büæeßE¥¾ ­#Æè²‡¼R'³Öã7/;™]êˆ1ºìú¨Ôõ¡uÄøÍË®J]ZG ç÷*+¥„ÐÃù½Ê®Bèˆáü^å:ŽÐ:b8¿WÙõAè1æ¼ìú ô€ŽÎïUö”z@G ç÷*{N= #Æþ.{N*õœh1öwÙsBè1öwÙsBè1öw¹/Cè1öwÙsBè1öwY5"ô€Ž{œì9!ô€Ž{œ¬YUZ¿×À6±¹@§Õ„Öct¹š¨‹8/uĘóKržÖ2ZG ÇÞäZ¦Ñî€Öct¹;ШóAëˆá›o²óÐ:b„Ðã±ËŠY£Ž­#ƱNv¼z@GŒcìx!ô€ŽÇ:ÙñBè1fìx!ô€ŽÇ:ÙñBè1Žu²ã…Ð:bëdÇ ¡tÄØßeº-òw©#Æþ¾¤¿/òw©#Æþ¾¤¿Sÿ¼Öc—Ýû„Ðc—»„Ðc_Òßù»Ôc_Òßùûú«»ûÞèó ë:bèï]îËtØ— 舡¿Ÿèùz@G ýýD/Ð:bèï]ž—!ô€Žúû‰Þ tÄÐß»ì-$ô€Žúû½?yó1ô÷7ú|º€Žû»ÜéTŸ×:bÌ:YŸ'ô€Ž]V‰;ÝSªuÄ8ÖÉ{J = #ƱNÞSJè1ŽuòŒ¡tĘuò–TBèˆq¬“­„Ðãh#oIeÎK1æ¼Ü›è´3¢uÄ]VJ;ÕiµŽ£ËóqNçi1F—•“Nu­#Æèr×i5¡uÄÐã†<;0膭#†c²ãeÐÝûZGŒÇ.÷ u>h1»œãE­#Æè2Ú Š6ZGŒÑe´T£Ö:b˜Û Y£m´Ž]F›AÑFëˆ1ºŒ6ƒê6ZG s›)×q“VÐZG Ç>e´™Ôg¥uÄuS®&&E­#Æc—}V„ÐÃŒzÊ>+Bèˆ1ëdŸ¡tÄ0£žrGè1œã¦œã˜uRGŒY'ç¸{±Ñ«·èõÔ«wèõ^Ñ©FtÄê-çë©#Vï8è±zËùzêˆÕ;Î#z@G¬Þr¾ž:bõŽóˆÐ«·œ¯§ŽXmO¾{@G¬Þ®"ë©#Vç“ïЫ·³L=uÄêÝ,SïjDGŒ9Ÿ%ç3q^êˆ1ç³ä|&ÎK1æ|–œÏÄy©#Ɯϒó™8/uĘóYr>祎s¾HΚeŠö¸Ìæb–)Äy©#Æœ/’ó…8/uĘóEr¾祎s¾HÎâ¼ÔcÎÉùBœ—:bÌù*9™•ÔcÎWÉùJ³ŒÔãY¦ÊY¦祎s¾JÎWâ|Õ±®³¹à|%ÎËÝæ|•œ¯Äy©#Æœo’ó8/uĘóMr¾盎´…ÍçÍ2RGŒg™&g™Fœ—:bÌù&9è±z»^O±ÚŸŒ= #ÆפÇ5ò8©#Æ×¥ÇuB—:bŒ>$ú t©#ÆèS¢OB—:bŒ¾$úÓ:bèq¿tÄî=î^G¬FtÄpì)©±'ZAk1F—+èDk­#Æè2¯K”]h1þî2» ô€Ž]Îï‰æw­#†ó{’ó;¡tÄp~Or~'ô€ŽÎïIÎï„ÐÃŒúDoÐ:bÌy™]z@G ç÷$çwB舱ÇÉù=uò8©#Æ×¥Çuò8©#Æ×¥Çuò8©#Æ×¥Çuò¸þWkؽ=@舱ÇuéqˆóRGŒ9?%ç'¡/=¿W6èQtÄý—ŽØ=z¦ŒZëˆ!ë²Ì¨3dÔ1ŒóYîÃz@G ã|–û°„Ðãï.÷a = #†q>Ë}XBŸ‘±O6çhÃo^êˆñ›—»™ö"µŽ£Ë}™L{RZGŒ=N®e2­&´Ž]æ6™² ­#†ÙÅ/±ûì"SÕHëˆq¤•U£<é»K1þîS~÷I‘Vêˆq¤2ÒÒü®uĘu2» ô€ŽGÚ)#í$ÎK1æü”œô€ŽVÈßèýÉ›èˆñ,3å,ƒ¬[ºB^Ù\°Ž²J­#†èEf•…²J­#†±®È¬²Ðü®uÄxìr~/0¿tÄ0ÒÙõQ¨ëCëˆñØ«{%t©#Æè²ZX¨^§uÄ0ÖY=(´~×:bÌy¹~/ƒX'uĘuC²Ð:b8¿Ÿèåz@GŒY7$ë= #†óû‰Þ tĘó2§%ô€ŽΰEV= #Æ'3êBµÖc“5¡tÄØãdFMè1ö8™Qz@GŒ=NfÔ„Ðc“5¡tÄ0£.2£&ô€Žû»Ì¨ = #Æþ.; dÔ1D¯/…^!£èˆ!ëªì»`t©#ÆèòÜD¥¾ ­#Æo^ö]Tê»Ð:bŒ.{È+u2k1~󲓙ѥŽ£Ë®J]ZGŒß¼ìú¨Ôõ¡uÄp~¯²RJè1œß«ìú ô€ŽÎïU®ã= #†ó{•]„ÐcÎË®Bèˆáü^eO)¡tÄp~¯²ç„Ð:bìï²ç¤RωÖc—='„Ðc—='„Ðc—û2„Ðc—='„Ðc—U#B舱ÇÉžB舱ÇÉšU¥õ{ ¬a› tZMh1F—«‰ºˆóRGŒ9¿$çi-£uÄpìM®eíh1F—»:´Ž¾ù&;= #Æc—k™F{ZG ç¸=?@èˆá×äpBèˆá×䮡tĘuò 8¡tÄp–iò6¡tĘórݨãEëˆ1çå~¡tĘóEržvµŽs^öz@GŒ9/Ï€z°®³9çu„ÐÃuܽ?yó1öwyÐ:bìïò¤R£ª‘ÖctY5jT5Ò:bmdÕˆÐ:bmdÕˆÐ:bmdÕˆÐ:bmdÕˆÐ:bmdÕˆÐ:bmdÕˆÐgä»O6цªFZGŒý]VU´Žû»¬z@GŒý]V= #Æþ.«F„Ðc—U#B舱¿Ëª¡tÄØß»ôwªYi1öwY³"ô€Žû»¬Y5êöÑ:bÌ:ÙíCè1»¬˜5êxÑ:bëdÇ ¡tÄ8ÖÉŽBèˆq¬“/„ÐcÖÉŽBèˆq¬“/„ÐãX';^= #ƱNv¼z@GŒý]Ö¨Û"—:bìïKúû"—:bìïKú;õÏk1öwÙ½Oè1öw¹;@è1ö÷%ý}‘¿K1ö÷%ý}‘¿¯¿º»ï>Ÿ°. #†þÞå¾L‡}™€Žúû‰ž tÄÐßOôò= #†þÞåyB舡¿Ÿèíz@G ý½ËÞBB舡¿¿Ñû“7ÐC£Ï'¬ 舱¿Ë‘Nõy­#Ƭ“õyBèˆñØe•¸Ó=¥ZGŒc¼§”Ð:bëä=¥„ÐãX'ψz@GŒY'oI%ô€ŽÇ:ÙÑJè1Ž6ò–Tæ¼ÔcÎ˽‰N;#ZGŒÑe¥´SVëˆ1º<×étžÖctY9éT·Ñ:bŒ.×qVZG =nȳƒn˜Ñ:b8ö!;^ݽ¯uÄxìrzPçƒÖã±Ë9nP´Ñ:bŒ.£Í h£uÄ]F›A5j­#†¹Í5êAÑFëˆñØe´m´Ž£Ëh3¨n£uÄ0·™r7i­uÄpìSF›I}VZG Y7åjbR´Ñ:bùî±v;Ë´SG¬ÝÍ2í^Ñ©EtĘóYr>祎s>KÎgâ¼ÔcÎgÉùLœ—:bÌù,9Ÿ‰óRGŒ9Ÿ%ç3q^êˆ1ç‹ä|¡Y¦hËl.f™Bœ—:bÌù"9_ˆóRGŒ9_$ç q^êˆ1ç‹ä|!ÎK1æ|‘œ/Äy©#Æœ¯’ó˜YI1æ|•œ¯4ËH1žeªœe*q^êˆ1ç«ä|%ÎWë:› ÎWâ¼Ü`ÎWÉùJœ—:bÌù&9߈óRGŒ9ß$çq¾éH[Ø\p¾Ñ,#uÄx–ir–iÄy©#Æœo’ó€Ðk·;àíÔkýÉØ:bìqMz\#“:bìq]z\'t©#ÆèC¢B—:bŒ>%ú$t©#ÆèK¢/ð8­#†÷KGìÞãîuÄZDG Çž’{¢´Öct¹‚N´–Ñ:bŒ.óºDÙ…Öãï.³ BèˆñØåüžh~×:b8¿'9¿z@G ç÷$çwBèˆáüžäüNè1̨Oôö= #Æœ—Ù¡tÄp~Or~'ô€Ž{œœßS'“:bìq]z\'“:bìq]z\'“:bìq]z\'뵆=ÑÛô€Ž{\—×É㤎{\—G9­Öc“9m4v©#Æcrìƒ8/uĘóSr~úÒó{esu@G ÑéˆÝ£gʨµŽ².ËŒ:CFÐÃ8Ÿå>,¡tÄ0Îg¹Kè1þîr–Ð:bç³Ü‡%ôûdsŽ6ü楎¿y¹˜i/Rëˆ1ºÜ—É´'¥uÄØãäZ&ÓjBëˆñØen“)»Ð:b˜]üÒ»Ï.2U´ŽGZY5Ê“¾»Ôãï>åwŸi¥ŽGÚ)#-ÍïZGŒY'³ Bèˆq¤2ÒNâ¼ÔcÎOÉy@èˆa…üÞŸ¼ù€ŽÏ2SÎ2Ⱥ¥+ä•Íë(«Ô:bˆ^dVY(«Ô:bëŠÌ* ÍïZGŒÇ.ç÷ó{@G #m‘]…º>´Ž½Ê±WB—:bŒ.«……êuZG c]‘ÕƒBëw­#Æœ—ë÷2ˆuRGŒY7$ë= #†óû‰^ tĘuC²Ð:b8¿Ÿèíz@GŒ9/sZBèˆá [dÕˆÐ:bìq2£.”Qk1ö8™Qz@GŒ=NfÔ„Ðc“5¡tÄØãdFMè1ö8™Qz@G 3ê"3jB舱¿ËŒšÐ:bìï²ó¡@FÐCôúRè2ꀎ²®Ê¾ F—:bŒ.ÏMTê»Ð:büæeßE¥¾ ­#Æè²‡¼R'³Öã7/;™]êˆ1ºìú¨Ôõ¡uÄøÍË®J]ZG ç÷*+¥„ÐÃù½Ê®Bèˆáü^å:ŽÐ:b8¿WÙõAè1æ¼ìú ô€ŽÎïUö”z@G ç÷*{N= #Æþ.{N*õœh1öwÙsBè1öwÙsBè1öw¹/Cè1öwÙsBè1öwY5"ô€Ž{œì9!ô€Ž{œ¬YUZ¿×À6±¹@§Õ„Öct¹š¨‹8/uĘóKržÖ2ZG ÇÞäZ¦Ñî€Öct¹;ШóAëˆá›o²óÐ:b„Ðã±ËŠY£Ž­#ƱNv¼z@GŒcìx!ô€ŽÇ:ÙñBè1fìx!ô€ŽÇ:ÙñBè1Žu²ã…Ð:bëdÇ ¡tÄØßeº-òw©#Æþ¾¤¿/òw©#Æþ¾¤¿Sÿ¼Öc—Ýû„Ðc—»„Ðc_Òßù»Ôc_Òßùûú«»ûÞèó ë:bèï]îËtØ— 舡¿Ÿèùz@G ýýD/Ð:bèï]ž—!ô€Žúû‰Þ tÄÐß»ì-$ô€Žúû½?yó1ô÷7ú|º€Žû»ÜéTŸ×:bÌ:YŸ'ô€Ž]V‰;ÝSªuÄ8ÖÉ{J = #ƱNÞSJè1ŽuòŒ¡tĘuò–TBèˆq¬“­„Ðãh#oIeÎK1æ¼Ü›è´3¢uÄ]VJ;ÕiµŽ£ËóqNçi1F—•“Nu­#Æèr×i5¡uÄÐã†<;0膭#†c²ãeÐÝûZGŒÇ.÷ u>h1»œãE­#Æè2Ú Š6ZGŒÑe´T£Ö:b˜Û Y£m´Ž]F›AÑFëˆ1ºŒ6ƒê6ZG s›)×q“VÐZG Ç>e´™Ôg¥uÄuS®&&E­#Æc—}V„ÐÃŒzÊ>+Bèˆ1ëdŸ¡tÄ0£žrGè1œã¦œã˜uRGŒY'ç¸{±Ñë·èýÔëwèý^Ñ©GtÄú-çû©#Öï8è±~Ëù~êˆõ;Î#z@G¬ßr¾Ÿ:býŽóˆÐ뷜硫XoO¾{@G¬ß®"û©#Öç“ïÐë·³L?uÄúÝ,ÓïzDGŒ9Ÿ%ç3q^êˆ1ç³ä|&ÎK1æ|–œÏÄy©#Ɯϒó™8/uĘóYr>祎s¾HΚeŠö¸Ìæb–)Äy©#Æœ/’ó…8/uĘóEr¾祎s¾HÎâ¼ÔcÎÉùBœ—:bÌù*9™•ÔcÎWÉùJ³ŒÔãY¦ÊY¦祎s¾JÎWâ|Õ±®³¹à|%ÎËÝæ|•œ¯Äy©#Æœo’ó8/uĘóMr¾盎´…ÍçÍ2RGŒg™&g™Fœ—:bÌù&9è±~»ÞO±ÞŸŒ= #ÆפÇ5ò8©#Æ×¥ÇuB—:bŒ>$ú t©#ÆèS¢OB—:bŒ¾$úÓ:bèq¿tÄî=î^G¬GtÄpì)©±'ZAk1F—+èDk­#Æè2¯K”]h1þî2» ô€Ž]Îï‰æw­#†ó{’ó;¡tÄp~Or~'ô€ŽÎïIÎï„ÐÃŒúDoÐ:bÌy™]z@G ç÷$çwB舱ÇÉù=uò8©#Æ×¥Çuò8©#Æ×¥Çuò8©#Æ×¥Çuò¸þWkؽ=@舱ÇuéqˆóRGŒ9?%ç'¡/=¿W6èQtÄý—ŽØ=z¦ŒZëˆ!ë²Ì¨3dÔ1ŒóYîÃz@G ã|–û°„Ðãï.÷a = #†q>Ë}XBŸ‘±O6çhÃo^êˆñ›—»™ö"µŽ£Ë}™L{RZGŒ=N®e2­&´Ž]æ6™² ­#†ÙÅ/±ûì"SÕHëˆq¤•U£<é»K1þîS~÷I‘Vêˆq¤2ÒÒü®uĘu2» ô€ŽGÚ)#í$ÎK1æü”œô€ŽVÈßèýÉ›èˆñ,3å,ƒ¬[ºB^Ù\°Ž²J­#†èEf•…²J­#†±®È¬²Ðü®uÄxìr~/0¿tÄ0ÒÙõQ¨ëCëˆñØ«{%t©#Æè²ZX¨^§uÄ0ÖY=(´~×:bÌy¹~/ƒX'uĘuC²Ð:b8¿Ÿèåz@GŒY7$ë= #†óû‰Þ tĘó2§%ô€ŽΰEV= #Æ'3êBµÖc“5¡tÄØãdFMè1ö8™Qz@GŒ=NfÔ„Ðc“5¡tÄ0£.2£&ô€Žû»Ì¨ = #Æþ.; dÔ1D¯/…^!£èˆ!ëªì»`t©#ÆèòÜD¥¾ ­#Æo^ö]Tê»Ð:bŒ.{È+u2k1~󲓙ѥŽ£Ë®J]ZGŒß¼ìú¨Ôõ¡uÄp~¯²RJè1œß«ìú ô€ŽÎïU®ã= #†ó{•]„ÐcÎË®Bèˆáü^eO)¡tÄp~¯²ç„Ð:bìï²ç¤RωÖc—='„Ðc—='„Ðc—û2„Ðc—='„Ðc—U#B舱ÇÉžB舱ÇÉšU¥õ{ ¬a› tZMh1F—«‰ºˆóRGŒ9¿$çi-£uÄpìM®eíh1F—»:´Ž¾ù&;= #Æc—k™F{ZG ç¸=?@èˆá×äpBèˆá×䮡tĘuò 8¡tÄp–iò6¡tĘórݨãEëˆ1çå~¡tĘóEržvµŽs^öz@GŒ9/Ï€z°®³9çu„ÐÃuܽ?yó1öwyÐ:bìïò¤R£ª‘ÖctY5jT5Ò:bmdÕˆÐ:bmdÕˆÐ:bmdÕˆÐ:bmdÕˆÐ:bmdÕˆÐ:bmdÕˆÐgä»O6цªFZGŒý]VU´Žû»¬z@GŒý]V= #Æþ.«F„Ðc—U#B舱¿Ëª¡tÄØß»ôwªYi1öwY³"ô€Žû»¬Y5êöÑ:bÌ:ÙíCè1»¬˜5êxÑ:bëdÇ ¡tÄ8ÖÉŽBèˆq¬“/„ÐcÖÉŽBèˆq¬“/„ÐãX';^= #ƱNv¼z@GŒý]Ö¨Û"—:bìïKúû"—:bìïKú;õÏk1öwÙ½Oè1öw¹;@è1ö÷%ý}‘¿K1ö÷%ý}‘¿¯¿º»ï>Ÿ°. #†þÞå¾L‡}™€Žúû‰ž tÄÐßOôò= #†þÞåyB舡¿Ÿèíz@G ý½ËÞBB舡¿¿Ñû“7ÐC£Ï'¬ 舱¿Ë‘Nõy­#Ƭ“õyBèˆñØe•¸Ó=¥ZGŒc¼§”Ð:bëä=¥„ÐãX'ψz@GŒY'oI%ô€ŽÇ:ÙÑJè1Ž6ò–Tæ¼ÔcÎ˽‰N;#ZGŒÑe¥´SVëˆ1º<×étžÖctY9éT·Ñ:bŒ.×qVZG =nȳƒn˜Ñ:b8ö!;^ݽ¯uÄxìrzPçƒÖã±Ë9nP´Ñ:bŒ.£Í h£uÄ]F›A5j­#†¹Í5êAÑFëˆñØe´m´Ž£Ëh3¨n£uÄ0·™r7i­uÄpìSF›I}VZG Y7åjbR´Ñ:bN±q‡>#öcŸäÎ5ì¸åü8uÄÆçÝÕ;²‹ÓãÆ-çÇ©#6î8讎ØW »yóÍ¿AÚôî¿ù½ŸèÍ¿@Ú“ïîêˆÍ…Õ¼ùÉæ_ óÉw÷tÄ~¤ñÚºa]bsÄ¢g⼇Þ^æf`æ|–œÏÄy¯ƒ}ô–u•Íç3qÞCï}=Æù,9Ÿ‰óÞ›/ÝÌïÌù,9Ÿ‰óú>Í´ã|–œÏÄùrS·É1ÎÉùB³LÑ—Ù\Ì2…8ï¡—|ñ¸Êæ‚ó…8_ü¾Ê\cœ/’ó…8Ï[q¾HÎ⼋¾ÒŒóEr¾çÝ.îŽóUr3«êù{ºD›Ìæ‚ó•fWKk\fØÂæb–©ÄyoìiϬ‚œ¯’ó•8_u¬ël.8_‰óú×R*Æù*9_‰óÍõ¸óMr¾ç½ò=§µó{fsÁùFœo:Ò6œo4Ë4÷dbÞzl–ir–iÄyoìi„óù&9èÃEß9oßü`ó/þdìÓ×΋gVMz\#s5Rx–éÒã:¡{çß\ÇžØ\ B÷v…r¹ø{bs> ݽMkm}ÆÐ—D_àq®ŽØ>Í|™kû¥#vïq÷:bÃ×;î=H±7Ÿ’{¢tº¹Ï*øæ“\A'ZËxJ^Gõ Åæ¸$óºDÙ…‹~\¯[E&™]º§#ö}qaðÍËù=Ñüî¡ÿhãç3›óüN讎ØWCml~Or~'ôê¾ù=ΗØüžäüNèÍE¯Vo3ê½=@wuÄþ„ó2» ô鎽ÔËØ'›óüN讎ØÑÊ<ƒ'ç÷ÔÉ㺛U¾¶Ø*òDÏÐ]±c†±Zå‰^ {:bß—¸Åê6'z}€Þ\ôøöDoÐ]±£Ÿ6Åòù7z{òÝ}±£ë6oôùä»»:bÇAèÌmdN›Ýׅͨó“ÍÅØqÞ˨[Ûjq~JÎOB_z~¯l.Ð!£vuÄ!±Ûû¥#vž)£vj‹fVYfÔ2êì¢eÚXœÏr–Ћ‹Þ_—UdasŽó„^}%¯Ô¶XœÏr–Ð}±iÍ-ç³Ü‡%ôûdsŽ6üæ½uܼîËT6ožö"=±ãzÜà¾L–û2™ö¤ró;ÜF¬ó!˵L¦Õ„«#öQ§­l.ÆNÙEvµ2û%Út6çì"SÕÈS5úÜ›Hl."í¤ïîÆ}]óºÌæâ»OŠ´Óï·‰FÚ)#-ÍïܞǬ“Ù¡»:b‡Øˆu¼œèíº«#öc•mÅ2ê7z{ò݇?ö¹µª¿Ñû“7?ý±§KV9Ù\Ì2Ⱥ¥+ä•Íë(«ttľ*fÁŒºÈ¬²PVYÜ:íº°.±9ǺBó»§#vÔ.ZÌß‹œß Ìホ؞S×-i‹ìú(ÔõQܳíòæ+›‹±WB÷*fµ\ú*+› tª×¹:b_·´†b]‘ÕƒBë÷2ü[‘ƒõù"×ïe뼓 ùŠžÙ\°Ð]±Ïjaasžß ½ºcÿƒX7$ëÝÕ;nMl±ùýDoл¾.y]gsÁyª¹èë­Y5"tWGì¸J,:ËÈŒºPF]nòù`F]dFM辎Øc{ æq2£&ôêji¥W´‡¼ÈŒšÐ]±csàÛ*2£&tWGlŸÞ/ÝûÍ…ÇQFí¢qé=lÎ5¡OŸó×îýÉæÂß©óÁÕ;Ô´b+è"; dÔ¾ŽØ×r!ôúRè2jWGìvFªì»`t·Zx¬bcèòÜD¥¾ WG죛7±¹xóÔwá*y}ì$6èÔÉìëˆÅß¼ìdfto5±¿ø`¬«²ë£R×Gu÷ßÓe5‘Ø\¼yêúp5•)¯XWg••RBwuÄÖ­XŬʮB¯¾žT‹Ö¨«\Ǻ«#öÙñÒØœçwBï>ëæe†íl.8O=¥.úx]8?ØœçwBwuľ–R±ð*{NÝ׋ŸÖ©²ç¤Rω‹¾æ¥ß&³¹ðwê9qÑÇŠVÈ«ì9!ôê*yõW´nSå¾ ¡»:b_š±|¾ÊžBïþwÏ—õ{gsáïÔsâ¿ùíòª²ç„Ð}±ŠYbsáq´~¯5lbsN« OÉë¸N«ó:¹š¨‹8¿ünŸà®Ð‰Þ »:b_бïÞäZ¦Ñä•Òºx\bsNÍ=^£=¥Mv>º«#vtû”àØåZ¦ÑÞ„‹þu™XhŽ;ÑótWGìk±šU“gÀ ½ºJ^©Eç¸&w…½i7f<N讎رúŠÍ2MžÂ&ôäjiz±HÛä ºQÇ‹‡žóŒ®ãšÜ#tWGìûŒZŒóEržvÝ7_g´—¸É^#BwuÄ~ô]Ç5yœÐ{„uÍ9¯#tWGìGË—|~°9¯ã}úß½…ý]ž@'t_GìøðÁìBžTjT5ò^ÑŽÖ&«FªF.úÈ—¬2³¹ˆ6T5òÇž.UâÂæ"ÚPÕ¨ÝTfl¶Éª¡»:bŸ=äÍE´¡ªQó+'5xãD“U#BwuÄþ ÏªÉª¡ÏÈwŸl.¢ Uš[=ØSê`v!«FªFz~Ͱ¿Ëª¡ì×z]asáïT5òÑKÚ‚þ.«F„îêˆ}îþ76þNU#_C-¼3ÒdՈЇ?ö­¿Ñû“7?ý±_£ÍdsáïT³jCw´&6þNÝ>.z]º¸› ÖQŬMi›‹±SÇ‹‹þq—Wfsë¨ã¥º> ›‹XG/.z.—ï^Ù\Ä:êxquÄ>î»hl.XG/îØã·¬4ÙñB讎Ø!$fßü`së¨ã¥ý]y“/„îêˆwuï»h²FÝù»W!+º#v¢ç讎ØÑkÔƒþ¾¤¿Sÿ¼>ÂkÙ½O讎ØgÏIcsáïtÇ‹ûÝ?nÇíl.ü}‘¿»]^‡*rÌß—ô÷Eþ¾þêî¾7ú|Â:WGìr›.÷e:ìËø:bgB3›³¿º§#öU»öŸèåzuÑSŽVJ»ö6xÃÌ/ƒîÞ÷tÄ>ëóÍÅØ©óÁÕ;ǾûsÜ h3¼h³VtgdÈh3(Ú ¯F]kt~2Ú ªQ{:b_‡byÝ5êAÑfxõº¶¢g‡Œ6ƒ¢ÍXþ-+Ás‘CF›Au›ùòoM Þº0å:nÒ zfÝSšÙœÇ>©Ïjºý6×»}›3ë&Eý؈±nÊ>+BwuÄŽ‹…V¬·pÊ>+BwuÄ~ä½AnÊ>+Bo®‚[®—±76猚Ð]±sE«SÎq̺êŸƺ)ç¸{±éêˆ}“:Üæ-úçGÏiÏêêŒq>KÎg⼃ÞóVRq>KÎgâ¼óæËîq)Ç8Ÿ%ç3qÞAŸu«¥Æ8Ÿ%ç3q¾Üœ—)1ÎÉùB³LÑ—Ù\Ì2…8ï©”®m¥ ç‹ä|!Î;è¯×ÖJq¾HÎâ|ñ÷&fq¾HÎâ|ño×É#Æù"9_ˆóžBkÚZ4ÎWÉy̬~GOcn¯žcœ¯’ó•fgì»»¿ì [Ø\Ì2•8ïŒ=å=r¾JÎWâ|Õ±®³¹à|%ÎWW‘¹•`nS%ç+q¾ùûqmÆ8ß$çq¾9s\Þz¯1Î7ÉùFœo:Ò6œo4Ëܜژ+6Ë49Ë4â¼3öÔ¶Íç›ä< }nÙ¾ùÁæ_ ýÉØ]±ò+šY5éq<Ωӎ×öu¥@Äãºô¸Nè^v\³ÊÄæ}ºw'sÙJ¢O‰> Ý©Óֹ͖cèK¢/ð8WGl¬ík Q{Ü/±{»×›¾ŽX[˱7Ÿ’{¢´§#¶'•)øæ“\A'ZËxJ^mO*{lŽK2¯K”]xè½o­ÅV‘If„îéˆÍ>¹ß¼œßÍS;Ú¬bë¸$çwBwuÄöìbç÷$çwB÷tÄRŸ[³3lesžß ÝÓ;¶ çÊ¡ŒúDoÐ]±?á¼Ì.ÝÓK_W¸Å2ê$çwBwuÄÚ‘]=NÎ禎ǹ='vw€=®Këäqú<êó±Zå‰^ {:bG;m[±ºÍ‰^ {:b²†=ÑÛtWG¬ö­ŒX>ÿFoO¾»¯#6òÖbu›7ú|òÝ]±V¶Ú‚¹ÌiÓ ±»§ó¶f9?Ù\Œ}猺խ¥ãü”œŸ„¾ôü^Ù\ CFíêˆísÜëÛû¥#vž)£vR=j±8ŸeF!£ötÄR9 ¥±8Ÿå>,¡{:b©mΊóYîú«#–’ÕHåï.÷a Ý×K«n#ç³Ü‡%ôûdsŽ6üæuÜq¸:bõXBÇü]v>Ȩ}±vÐ.„^_ ½BFíêˆýÁÎH•}Œîꈕ¶Ñ幉J}®ŽØG7obsñæ©ïÂSòúÜHl.Щ“Ù׋¿yÙÉÌèÕíxiÁXWe×G¥®OÕ¨NÄ2ê*»>*u}T¯RZ·Rc]UVJ ÝÕ;DÌV¬bVeס{:béut¸ÅÖqU®ãÝÕûìxilÎó;¡»:býXM=Nv}º«#Ö×6J¬bVeO)¡O_?nl+¶^eÏ ¡û:bñÓ:UöœTê9ñÐ×qF,¶YeÏ ¡»:bãè%ú»ì9!tOG,µ=èïr_†Ð]±Ôò–cù|•='„îꈭ×NùówY5"ôyóæÛŠuyUÙsB辎ØGÅ,±¹ð8Z¿×À6±¹@§Õ„£äu\žW{0¯“«‰ºˆóËíö™Á]¡½=@wuÄ9èûîM®eí8J^ǵÄ-Çòº&wu>x:bµl­Æ¢M“„îꈺ}58v¹–i´7¡Õ¬pŽ;ÑótWG,¯}ùë«lò 8¡{:bGËÉ îM4¹+D讎ØçtcsÁ::…í¡Ïã"±Ø,Óä)lB÷tÄRÛ+¸‚nrݨãÅAϹ]«Ä™Íç q¾øêu¯ã|‘œ§Ý@ïÍ×Cv ÈyÙkD讎X?nY‰­ãš<Nè=ÂºÎæœ×º«#ÖŽËqcuÚ7zòæ§ûÝ?º:'› §讎ØþáëŠù»<©Ô¨jä©}î$6èT5jÞy™#ÒÆv…š¬º«#v\Ý7b«È&«F„îéˆSÜkÄöa›¬º«#öÙCÞØ\DªùZZ‡ËÅ¢¬º«#ö}VMV}F¾ûdsm¨j䪕ãʉ˜¿ËªQ£ª‘ƒž÷±¯¨¿Ëª¡»:bŸõºÂæÂß©jäëI­-§˜¿Ëª¡»:bŸ»ÿÍ…¿SÕÈA?®â~wFš¬º«#öÙg5Ø\ø;լܱ{‘±]à&kV„îêˆ}v´&6þNÝ>z;fØ`õ@vûº§#ö[¤Ml.ÆN/úç]^™ÍE¬£Ž—èú(l.bu¼xcÏGÿ|¬ã¥ÉŽB÷uÄ>î»hl.XG/ÞØÿà–•&;^ÝÕËçs,ÖÉŽBwuÄþ ‡¼ÉŽBwuÄÆq7ëdº-òw§B>ú–W°Z¸¤¿/òwgì{´É-èïKú;õÏ»èÝ}•Í…¿Óî@ œHml.üîxñ¾ûçí¸Í…¿/òw¯Ëk_̤ó÷%ý}‘¿¯¿º»ï>Ÿ°ÎÕûƒÜ¦Ë}™û2¾ŽØÇ™ÐÌæìï„î鈉¥ó÷½<@÷tĉ•¬”vy^†Ð}±z\ò÷½=@ïîØN§Ø¹È.{ ÝÕû¼Ui°9û;¡O—uG…<6¿¿ÑçÖ¹:bë ú»ÜéTŸ÷Ðÿ`ºËú<¡»:bpƒ\—UâN÷”:èiŸßó+¶–éòžRBwuÄÆÑvŒuòžRB÷tÄŽ{ WëòŒ¡»:bŸ7…66¬£{̺GkN±Ü¦ËŽVB¿Ñ›sk±h#oIeÎ{uÚã¬PìŒX—{vF<±uìˆÅ*¥]VJ;Õi=±™·”ƒc—çã:ÎsuÄâgB»¬œtªÛx:bŸ½…™Í:­&†wÇËQ·‰U†<;0è†GG,­£µ0¶†²ãeÐÝûžŽØg}¾³¹;u>¸:bãHìbc—sÜ hã舥շ”bœ2Ú Š6ŽŽØáo«Ç.£Í µ§#–öÔjÅvÀ‡¬QŠ6ŽŽØ¡aVƒg‡Œ6ƒ¢§#¶ÚîqÁï.£Í º£#vÜšX‚wûL¹Ž›´‚žY÷”f6ç±Oê³òzÞzðô)W“¢«f5ëöбnÊ>+BwuÄÖQ1‹õNÙgE讎ؗ4nu²ÏŠÐ=±”ó2±uÜ”ë8BwuÄæQºˆU¦œã˜uÕ=­³‚±nÊ9î^Glù:bÇ ðç.ðºE_§ŽØºC_÷ŠNëFG¬måÜY·œ_§ŽØºã<¢»:b{FmîtZ·œ_§ŽØºã<¢»:bkOm²yóÍ¿AÚô~£ä•Îjáºåü:uÄV{òÝ}±¾­dÞüdó/ùä»»:bû ¶7ÃºÄæˆEÏÄyOŬÙ~æ|–œÏÄyGÉë8;0zŒóYr>çôóFщ9Ÿ%ç3qÞyóí¨×Õç³ä|&Î;cßRæNfæ|–œÏÄù•Ò–bœ/’ó…f™¢=.³¹˜e qÞë%îÛ«9_$ç q¾¸§6ÌM#Ìù"9_ˆó®ŽXÛfŽq¾HÎâ¼[=H¦š9_$ç q¾º'‘s4ÎWÉy̬ªãïû »jŒóUr¾Ò,SÝÕİ3las1ËTâ|uûëVr¾JÎWâ|Õ±®³¹à|%ÎWW[ç5ƒ¹M•œ¯Äù›óïµÇ8ß$çq¾9œoöÖæ|“œoÄù¦#masÁùF³Lóo„>ÏÇñ,Óä,ÓˆóÍÕÊÑ|¾Iκ«#V²½=oÝSGlõ'cŸ/_[gF3«&=®‘Çuÿ.îWp–éÒã:¡{çßç5«Ll.С{Ý*:1ú”è“З{^Æô2ú’è <ÎÕ;ޤ¶ÇýÒ»÷¸{±åëˆÕlûçqì)©±'ZA»:bm{ß|’+èDkWG¬ÛsRŒ.óºDÙEòï§9¶ŠL2» tWGìè=XÁ7/ç÷Dó»«'uˆÄÖqIÎï„îꈭ²¥àüžäüN讎ØîîÕΰ•Íy~'tWG츺ïUCõ‰Þ »:bÂy™]º«#V§ÕÂù=ÉùÐ]±ž­Æ {œœßS'óN¨¥}[Ežèùº«#¶^[©±Zå‰^ »:b©Ú}Xö¸.=®“Çõ¿ZÞèíº«#Ö²í`gëÒã:yœ{Ù!áó¸.=ŽrZOÉ«¿¶× æ62§MƒÆîu>¼ö•T}ȱ⼓Q÷dO¬0ç§äü$ô¥ç÷Êæ2j_GlÏçGl?î—ŽØ=z¦ŒÚÓÒÚYW‚™U–u†ŒÚÕ«—[‘1Îg¹K讎Ø[{ÍPœÏr–Ð}±<¶‹óYîú¯#–nâPœÏr–Ðgdì“Í9Úð›÷oUJ-æïYîfÚ‹ôtÄú¥×ˆÑå¾L¦=©ìßs²j¬ó!˵L¦ÕDîºN[Ù\Œ²‹ìéMô­÷X>ÿKGì>»ÈT5r>ö&›‹H;é»;:bù`]l {¢ç讎XöÄ GÚ)#-ÍﮎØ_SŒu2» tWG¬µ‹XÇˉÞ wWÁ­Øf˜óSrÐ]±š·6{¨BþFïOÞütÇžöŒ:Çf™)gdÝÒòÊæ‚u”Uz:bùµ­`F]dVY(«ôtÄöœ6ØZ¦È¬²Ðüîéˆõ¼Õ›eŠœß Ìï7:bmm±H[d×G¡®OGl{+2½Ê±WBoîÝ>_—öDÐeµ°P½ÎÕ«e ƺ"«…ÖﮎX·jVÌy¹~/ƒXçä6årjƒY7$ëÝÕû¬6çùÐ]±?‰uC²Ð]±±G››ßOôöÝÕÛ×°9Å:ŠÌi }º n/«ÈŒ3l‘U#BwuÄZµgÙãdF](£vլƖR0ÎËŒšÐotÄö”:Å<-­Q¬ÚÎïUVJ ÝÕëÇíy±ŠY•]„îꈥ¾å[ÇU¹Ž#tWGì³ã¥±9Ïï„îꈾ½RÐãdס»:bãèx‰U̪ì)%t_G,§­ÄvÀ«ì9!t_G,~Z§Êž“J='ž¢ÓqËJ‹íEVÙsB讎ØÛjA—='„îêˆí«Èõ ú»Ü—!t_Gl¤-Åòù*{N½»ß=Û;ÙßeÕˆÐ]±ÝßË+ÖåUeÏ ¡û:b³ÄæÂãhý^kØÄæVžŽXyÙ»¼]®&ê"Î/·Û§w…NôöÝÕ[íz"5±9½Ñ#V²Õ—at¹;ШóÁÕ›ö†|óMv>º«#Vëõ$rbs1vÚ›ðuÄÒÚbs܉ž »:bûwï%ÖWÙäpBwuÄòÜRpo¢É]!B÷uÄ>ö › ÖÑ)loì¯×ÖWl–iò6¡§U£\A7¹‚nÔñâ鈵r­g6œ/Äùâkm”ã|‘œ§Ý@ïÍ÷c70ÈyÙkD讎ؾ‚ÎÁu\“gÀ ½GX×Ùœó:B÷uÄöhóŠÕißèýÉ›wuÄ>»:'› §讎ذú°ìïò¤R£ª‘§jô¹;Ø\ SÕÈC_/«FÍÑFV½¸cOöF)Ž6²jD讎Ø>ŽRl¶Éª¡»:bŸ=äÍE´¡ª‘«#vˆm£¬º«#ö}VMV}F¾ûdsm¨jäªYµ¶å`v!«FªFžŽX9n× ú»¬º¯#öQ¯+l.üªF.zmFsý]VÝÕûÜýol.üªFž–V9Naý]V}Üh¨]ú¬› §š•7ö=Ú¼fl¸Éš¡{:b¿u´&6þNÝ>žŽXïÛìÁêìö!tWGì3Ò&6c§Žý·»¼2›‹XG/-ÐõQØ\Ä:êxñÐËqú>ÖñÒdÇ ¡û:b÷]46¬£ŽWC-~ËJ“/„îëˆíœ·7Ø\Ä:êxi×CÞdÇ ¡»:b3m+xßE“5ê¶Èß ùšVkƒý}I_äïËí59èïKú;õÏ»èÝ}•Í…¿Óî@ œHml.üîxñ¾ûçí¸Í…¿/òw¯Ë«&£©Äþ¾¤¿/ò÷õWw÷½ÑçÖ%WÕ(žÛt¹/Óa_Æ×û8šÙœýÐ]±tìÄüýD/Ð]±|œX‰UJ»ïéˆýÁt—õyB÷uÄâ7ÈuY%îtOi÷î)][©±µL—÷”º«#6ç6Z0ÖÉ{J ÝÕ+{°É±3b]ž#t_Gìã¦ÐÆæ‚utY÷ïhM=–ÛtÙÑJè7:bkm-mä-©ÌùæžÚH3vF¬Ë½‰N;#½»¹Í+x‹Z—•ÒNuÚ~£>_‚c—çã:ÎóuÄÂgB»¬œtªÛx:bŸ½…™Í:­&<±Ö¶ì§òìÀ f±œŽs‘±5ì/ƒîÞwuÄ>êóÍÅØ©óÁÕ›e ~÷!ç¸AÑÆÑËùÈ.bœ2Ú Š6žŽØîomÇ.£Í µ«#6ŽöPn3dzP´ñtÄÆÑÝ‹uCF›AÑf,÷^âWð¦‘!£Í º§#Vç6ƒwûL¹Ž›´‚ötÄ>{J3›óØ'õYyŠNWe^dÝ”«‰IÑÆ×Ò:®Œ]öYº§#vtïçë-œ²ÏŠÐ}±²Õà rSöYº«#VŽ^£Ø:nÊu¡»:bk_˼bÕƒ)ç8f]uOëÔ`¬›rŽ»ÕK/WG¬äµ½ÞU£ôºCÿe¾ƒ|þ£7úþCºG÷tÄŽµLyרÄæß åº§#öÕùðÞ—9þ›ƒÔ螎XîÙܪtü#6ÿiÐ=±TÖÖßÝ}Ç?bó/öä»{:b_·"Wóæ'›Ì'ßÝÓk¹miÖ%6w@,z&ÎÿŽ^÷ïþ*=Æù,9Ÿ‰ó¿£÷1·—e]esÁùLœÿ}Wž1ÎgÉùLœwÞ|šæ6lÁù,9Ÿ‰óëŽ{NúŒq>KÎgâ¼7¿tÞ[(8_$ç Í2E{\fs1Ëâüïèõ¸5±9_$ç qþwô’êÖGŽq¾HÎ⼫·6‹ÞÙ\p¾ç=ÖÍ}’ Æù"9_ˆóÕU`Ñ8_%ç1³ú½µ±m2› ÎWšeœÝCCÍΰ…ÍÅ,S‰ó¿£—¶¯&ZóUr¾竎uÍç+q¾º÷ää|•œ¯Äy§:ïþž‚q¾IÎ7â|sæ¸döeç›ä|#Î7i › Î7šeœ7_R;O"‹Y¦ÉY¦ç±g¢ù|“œtOG¬Œ×¾Š4o~°ùH2vOG¬w¸E3«&=®‘ÇuQ%×¥ÇuBnÝæ2öÄæ}útÏÇ¥DŸ}ºS§my[¯C_}ǹ:b¹®­„<î§ŽxÜ­ŽØñÄ)¹}Ô§ª=%5öD+hOGì¸æ$øæ“\A'ZË8J^éȬJlŽK2¯K”]$¯ïÂÞw!¾»Ì.ÝÓ+¥™žR1v9¿'šß=E§Ñ·4bë¸$çwB÷tÄò±œß“œß ÝÓky÷¸Wl~Or~'tOG¬Ö×¶f eÔ'z{€îéˆýçevA螎XMG/q,£Nr~'tOGìØ‹|õ ÇÉù=uò¸îe•{r[Ežèùº§#–[2ŠÂãºô¸N×|~l+X«<ÑëtOGìOÖ°'z{€îéˆSåóoôöä»»:byv)èq]zå´Ž’Wêûüþ æ62§MƒÆîeÔËôˆ±9öAœ÷:^[/9Æù)9? }éù½²¹@‡ŒÚÓK¹™Ó:Œž_ =SFí(:ÕÚ·̬²Ì¨3dÔžŽX}mÔXœÏr–Ð=±ºê–ì*²°9ÇyBwuÄJ«[‹Åù,÷a Ý×ë¯óF)ŽóYîÃúŒŒ}²9G~óNoa×}™ÊæâÍÓ^¤£#–f»î„V6è´'åèˆÕ£v‘bY®e2­&<±Ï:mes1vÊ.±¼ú¶j,ŸÏCe™ªFž’×çÞDbsi'}÷ßÑûÑõÑbkØ=?@÷tÄÊžX­h¤2ÒÒüî©Y•|þ±Nf„Þ\ µ²½R¬ãåDoÐ=±|h&ÎXFýFoO¾ûpÇnï»à ù½?yóÓ{ÚªÍ*'›‹YY·t…¼²¹`e•ŽŽX);åƒu‘Ye¡¬²$÷ÄÊš±µL‘Ye¡ùÝÑ;š¸W0³*r~/0¿û:bµ–-i‹ìú(ÔõáèˆåãŒØŒÕëJ•c¯„îTJK3§qº¬ª×•›[•‚±®ÈêA¡õ»«©”¶¬Ï¹~/ƒX7œ½ÈyEÏl.X螎ØoÕÂÂæ<¿º§#öG±nHÖº§#–÷ïÞ[l~?ÑÛtOG,§º­ët*2§%tOG,gƒU£"«F„î鈥öÚzt–‘u¡ŒÚAÏ㵕`F]dFM讎Øq=ÇjÔEfÔ„î鈕š®Ý>•Í…ÇQFí¡¿¦¹y@xœÌ¨ ÝÕ;f÷ô8™Qº§#–ËÚŠí=lÎ5¡{:b¿uïO6þNžŽXªu î¿ÙùP £vuÄÒ̧š£×—B¯Q{:b²3Reߣ'÷þù×D—ç&*õ]¸:bݼ‰ÍÅ›§¾ GÉë·ÝÄæ:™]±?x󲓙ѫ{F¬c]•]•º>ª's±ŒºÊ®J]zǽ±®Î*+¥„^\³¹•«˜UÙõA螎XÉekÁu•ë8B÷tÄ~ëxilÎó;¡{:b9íù|zœìú ôá¢Ï-XŬʞRBwuÄöÕÙ¶b;àUöœº«#ö§uªì9©Ôs⠗ס>Û‹¬²ç„Ð=±¼§63X!¯²ç„Ð=±ºÚ•u•Í…¿Sω÷Ýëq8–ÏWÙsB螎Xžu-vn¢Êª¡O÷Í÷=Î=Nöœº«#öY1Kl.<ŽÖï5°†Ml.Ði5á(y•^÷9.˜×ÉÕD]Äy§çäÐH î èíº§#–û¸žHMlÎco´;à(y•}¶Øworw Q烫bÖ¯}•ÍùÍzrÕ¬êõ$rbs1vÚ›puÄJÉ[lŽ;ÑótWGlÏç/ß½°9Ïq„î鈕ַœãšÜ"ôæk¨]÷ › ÖÑ)l=Ï×õTædsžeÝÓ+kìo>i›\A7êxqÐÇ«^«Ä™Íç qÞ[¿—þÚRŒóEržvôºs¾{‰›ì5"tOG,ÝŠ[Ç5yœÐ{„uÍ9¯#ôá*y¥môXöÞŸ¼yOGì·®ÎÉæÂß麧#–w—[ÁìBžTjT5jMï$6èT5rÐ[ym£Äv…š¬º§#VR2·ãŠh#«F„î鈕Üö•Tl¶Éª¡{:b¿õ76цªFž’W9nŒ FY5"ôá*yÅû¬š¬úŒ|÷Éæ"ÚPÕÈÕT:d‰ƒÙ…¬5ª9车ë*2³¹ðwªycÿ¬×6þNU#÷Íïq¾ý]VÝÓûm÷¿±¹ðwª9èe´ðÎH“U#B®ŠÙGŸÕ`sáïT³òƾÚ5ÚL6þN5+GÉë·ŽÖÄæÂß©ÛÇS1›}KÁZe“Ý>„îéˆýi›‹±SÇ‹ƒþÛ]^™ÍE¬£Ž—èú(l.bu¼xèû úUc/Mv¼º«#öyßEcsÁ:êxñÆþ·¬4ÙñB讎Øi‹}óƒÍE¬£Ž—öw=äMv¼º§#–óÜrð¾‹&kÔm‘¿/ç.¯} Ü;ÑótOG,÷bî§þ¾¤¿Sÿ¼‡þÙÝWÙ\ø;í´À‰ÔÆæÂßéŽý·Ûq;› _äï^—Wê[ úû’þ¾Èß×_ÝÝ÷FŸOXçéˆýInÓå¾L‡}_GìãLhfsöwB÷tÄJ*[ öŸè座#VêžÏ+¥]ž—!tWG,Õu*>°¿Ÿèíº§#VÚØæŒ‹ì²·Ð]±Ï[•›³¿º§#VŠUŸg£Ï'¬ótÄò—VfÐßåÎH§ú¼§bö{Ð]Öç ÝÓû“京wº§ÔAoG3ï+¶–éòžRB÷tÄrFKKÄ:yO)¡{:beä-ψuyFŒÐ]±Ï›B› ÖÑ=fÞØ÷œ6—XnÓeG+¡ßèˆå}‹6ò–Tæ¼S§­¯-µØ±.÷&:íŒt¯Ïªo+x‹Z—•ÒNuZGG,ïsÜ+:vy>®Óé+B÷tÄÊçˈõNÙgE讎Xo;zu²ÏŠÐ=±2ëVGl7å:ŽÐ=±}ê¸V‰;›óǬsVR)‡cÝ”sܽŽXruÄE§×Y»H·èéÔKwèé^Ñ)¹:b‡x?wÒ-çÓ©#–î8螎Øq.ÑÜ{n9ŸN±tÇyDo7jfn9ŸN±tÇyDïî›ßWgœO·œO§ŽXjO¾»§#vhç™ú|º]E¦SG,Í'ßÝÓË-Û[Óí,“N±t7ˤ{E§äêˆåãÀJ­1ÎgÉùLœÏîþ{³¬«l.8Ÿ‰óúªöææ|–œÏÄùìÞsbN.0ç³ä|&Î;ècØ1æ|–œÏÄyOº¼Ìžs¾HΚeŠö¸Ìæb–)Äy/«löÞBæ|‘œ/Äy½%{ ›9_$ç qÞ½Ëkl½³¹à|!λ¬k[Æù"9_ˆóÞÙÿ¼µhœ¯’ó˜YU÷„Z³Ñ&³¹à|¥YÆÑÚÈËž‡åY¦ÊY¦çô¾¯ß_AÎWÉùJœ¯:Öu6œ¯Äy½\Έ1ç«ä|%Î7o¶l=ç›ä|#Î7w%ÕìüžÙ\p¾盎´…ÍçÍ2Þ›oǵ ±Y¦ÉY¦ç›{cdæóMrЇ‹>l'sºÝO§ŽXêOÆî鈗*…3«&=®‘Ç9̯f÷&Øãºô¸NèÞù÷t{bs>Ý»—¸m)ѧDŸ„¾\3³ûÏèK¢/ð8WG,¥}– yÜ/±{»×K®ŽØÖm•Çž’{¢´§#Vû6ƒo>Ét¢µŒ£äuôÓ¶›ã’ÌëežŠÙëeoÃæï.³ B÷tÄŽS™iß¼œßÍïú¹Ïï3¶ŽKr~'tOGì¸y ç÷$çwB¯®ŠYÙr‰ÍïIÎï„îéˆw:™*1fÔ'z{€îéˆýçevA螎XZsÏmbu’ó;¡{:bç_-èqr~O<λºÎ-¸Š<ÑótOG,å×6z¬Vy¢—螎ءÚƒµÊ½>@÷tÄþd {¢·螎ؽ¯X>ÿFoO¾»«#¶gCÛ+èq]zå´ž’×q×G æ62§MƒÆîeÔu+–ó“ÍÅØqÞɨ¶‹ËŒ:CFíéˆ5ê1bq>Ë}XB÷tÄrö¾JŒóYîú«#v\|cq>Ë}XB÷uÄòÚç™PœÏr–Ðgdì“Í9Úð›wîòJëº/SÙ\¼yÚ‹ttÄ~ÌyÝ ­l.ÐiOÊÑû’Êì±Î‡,×2™V¹ë:mes1vÊ.±T³½—³‹_:b÷ÙE¦ª‘§©ô¹7‘Ø\DÚIß}º·¤^òºÌæâ»OŠ´ÓÕ@¯ÑH;e¤¥ùÝÓK­›n^fÌ.ÝÓûÑ.ç&8ÒNi'qÞyóe6-–Q¿ÑÛ“ï>ܱï/ÞÆùÁæ\!'ô鎽mÉf•“ÍÅ,ƒ¬[ºB^Ù\°Ž²JGGìë³`F]dVY(«,^vÙ^bŒuEf•…æwGGìÇ,ö5»œß ÌホØÑÛ‹´Ev}êúptÄv¦l¹Åêu¥Ê±WBoî±õ ¾yY-,T¯ótÄ~´¹c]‘ÕƒBë÷âž°*¥Ìy¹~/ƒXçÝo“®è™ÍëÝÓû­ZXØœçwB÷tÄþ(Ö É:@÷tÄ~¬¾Í›ßOôö½»êuÅÞñœ—9-¡{:b{€°úq8ÃY5"tOGìÇÈö®ö8™Qʨ‹ŸÏÏ`F]dFM讎Øö2÷]°ÇÉŒšÐ=±Ô˵ۧ²¹ð8ʨ=ô£¹oÅjEfÔ„îꈻ5èq2£&tOG,º¶÷`°9gÔ„>]ÎtïO6þNžŽØ±=Ü/²ó¡@Fíêˆý˜c±Ž—úRè2jOGìOvFªì»`t¯Zø£™sÐŒ.ÏMTê»puÄ>ºy›‹7O}ž’×çî@bsNÌ®ŽØ¼yÙÉÌèÕSx±÷3ºìú¨Ôõá©­do˜á7/»>*u}xŠN%Y…Vœß«¬”º§#öc¶­·XŬʮB÷tÄR»Ü݇ó{•ë8B÷tÄ~ëxilÎó;¡{:b‡tOA“]„>\ôºÍW¬bVeO)¡»:b©g£ìƒó{•='„îêˆýÁi*{N*õœ8è‡Rg.±½È*{NÝÓKil-X!¯²ç„Ð=±c'të6Uî˺«#v\—9bù|•='„î鈺B#ÇÎMTY5"ôé¾ù¹•`—W•='„îêˆ}VÌ› £õ{ ¬a› tZMxJ^£Y--F—«‰ºˆóËíö™Á]¡½=@÷tÄÒq?m°ƒ½ÉµL£ÝOÉkô­çØworw QçCKî5ØSÚdç¡{:bÇÎÈå$rbs1vÚ›puÄÒŽ›ãNôüÝÕ;6ÿs¬fÕäpB÷tÄÒH[ ÎqMî º«#ö¹ÝØ\°ŽNa{c/õz*s²9Ï2„îéˆzÐ+¸‚nrݨãÅÓ“:fØà:®Éý8B÷uÄÒÈÛŠq¾HÎÓn §äut:{‰›ì5"tOGì¸!v×qMž'ôa]gsÎëÝÓûqœ ±:í½?yóÓýî]“Í…¿Ó tOG쟯ÁìBžTjT5ò4•>w› tª5ï¼Ì¾~ϱ]¡&«F„^ܱ/{7/GY5"tOGì˜âê+¶ÛdÕˆÐ=±ßzÈ›‹hCU£æžƒ®[FY5"tOGìOú¬š¬úŒ|÷Éæ"ÚPÕÈS³Ê¯±Õ`v!«FªFž¦Ò—ºMÐßeÕˆÐ]±Ïz]asáïT5rÑWÝRÐßeÕˆÐ=±ßvÿ› §ª‘§äuœÖ îŒ4Y5"tOGì·>«ÁæÂß©fåŽ}]£ÍdsáïT³ò”¼>;Z› §nŸæu:-{_%³Nvûº§#ö[¤Ml.ÆN/ž¦Òç]^™ÍE¬£Ž—èú(l.bu¼xè3Û»:9ÖÉŽBwuÄ>ï»hl.XG/ÞØÿà–•&;^ÝÕ+Ýj&r¬“/„îéˆýIy“/„îéˆR[ð¾‹&kÔm‘¿{J^û,Ü;ÑótOGìè5ê)èïKú;õÏ»èÝ}•Í…¿Óî@ œHml.üîxñÆþy;ngsáï‹üÝëòjÇÁ‰˜¿/éï‹ü}ýÕÝ}oôù„užŽØŸä6]îËtØ—ñuÄ>΄f6g'tOGìÐnÁò½<@÷tÄRoÛ VJ»«”vY)íT§utÄRÞװѱËóqNç¹:bñ3¡]VN:Õm±ßz 3› tZM8:bù¨ûi‡<;0è†GG,·mo˜²ãeÐÝûžŽØg}¾³¹;u>x:bé¸>/ö݇œãEGGìC#•Ñe´m±œÊõ6­ÌæjÔžŽØqx ¸>dzP´qtÄòQ³ ž2Ú Š6ŽŽØqÅK ž‹2Ú ªÛ8:bÇ­‰+xë”ë¸I+è™uOifsû¤>+OÍêØŽ Þ‚>åjbR´ñÐóÑÖcÝ”}V„î鈷aW¬·pÊ>+BwuÄvw/Áä¦ì³"tOG,ͺõWl7å:ŽÐ=±tœ“ V¦œã˜uÞ*2‡cÝ”sܽŽXŽèˆå[ô|êˆå;ô|¯è”#:bù–óùÔËwœGô€ŽX¾å|>uÄòç= #–o9ŸO±|ÇyDèˆå[ÎçSG,·'ß= #–oW‘ùÔËóÉwèˆåÛY&Ÿ:bùn–É÷ŠN9¢#Ɯϒó™8/uĘóYr>祎s>KÎgâ¼ÔcÎgÉùLœ—:bÌù,9Ÿ‰óRGŒ9_$ç Í2E{\fs1Ëâ¼ÔcÎÉùBœ—:bÌù"9_ˆóRGŒ9_$ç q^êˆ1ç‹ä|!ÎK1æ|•œÇÌJêˆ1ç«ä|¥YFêˆñ,Så,S‰óRGŒ9_%ç+q¾êX×Ù\p¾çåîs¾JÎWâ¼ÔcÎ7ÉùFœ—:bÌù&9߈óMGÚÂæ‚óf©#ƳL“³L#ÎK1æ|“œô€ŽX¾ÝϧŽXîOÆÐckÒãyœÔcëÒã:¡K1F}ºÔcô)Ñ'¡K1F_}Çi1ô¸_:b÷w¯#–#:b8ö”ÔØ­ µŽ£Ët¢µŒÖct™×%Ê.´Žw™]z@GŒÇ.ç÷Dó»ÖÃù=ÉùÐ:b8¿'9¿z@G ç÷$çwBèˆaF}¢·è1æ¼Ì.= #†ó{’ó;¡tÄØãäüž:yœÔcëÒã:yœÔcëÒã:yœÔcëÒã:y\ÿ«5ì‰Þ tÄØãºô¸N'uÄØãºô8ÊiµŽ{œÌiÓ ±K1ûcÄy©#ÆœŸ’ó“Зžß+› tȨ:bˆþKGì=SF­uÄuYfÔ2ꀎÆù,÷a = #†q>Ë}XBèˆñw—û°„ÐÃ8Ÿå>,¡ÏÈØ'›s´á7/uÄøÍËÝÀL{‘ZGŒÑå¾L¦=)­#Æ'×2™VZGŒÇ.s›LÙ…ÖÃìâ—ŽØ}v‘©j¤uÄ8ÒʪQžôÝ¥Ž÷)¿û¤H+uÄ8ÒNii~×:bÌ:™]z@GŒ#픑v祎s~JÎz@G +äoôþäÍtÄx–™r–AÖ-]!¯l.XGY¥ÖCô"³ÊBY¥ÖÃXWdVYh~×:b+­#†¬›r51)Úh1»ì³"ô€ŽfÔSöYz@GŒY'û¬= #†õ”ë8Bèˆá7åǬ“:bÌ:9ÇÝèˆý¯ü翾Ò˽Emœ7F¾®¢|ÿíÃ<+óŒæE™4¯Ê¼¢ySæ Í»2ïh>”ù@ó©Ì'š/e¾ÈܽD}½¶üN^hî±®LS£FÖyט_͉u9Âù æΓy€ódà<™8OæΓy€ódà<™8æΓy€ódàü½y‰p¾€y€ódà<™8OæΓy€ódà<™8Oæ΃y„ódà<™8o^#œ¯`à<™8OæΓy€ódà<™8OæΓy€ó`á<™8OæÎß›·ç˜8OæΓy€ódà<™8OæΓy€ódà<˜G8OæΓy€ó÷æ=ÂùæΓy€ódà<™8OæΓy€ódà<™8æΓy€ódàü½ùˆp~€y€ódà<™8OæΓy€ódà<™8Oæ΃y„ódà<™8o>#œŸ`à<™8OæΓy€ódà<™8OæΓy€ó`á<™8OæÎÿfþýÏïÿÆþ?~þßÿñÏÿòoÿô®m7í¨ñÿÇÿþÇçåµùæ×Ý™¯žŸ?\6Nòoæß óä{‡ÁTK·W®ûËìŸæßÿêtíãùWßÊ÷óm>Ž®û᚟WÕzß“ã×çMê[N{èöÍÍÍ×ÇÝD_½ß?Œsgd_™•å›Ïó_õöÕ!þýƒ¹÷ñÐ_yùc?ï(î\æìÉ¥Pi’ˆk¨¡ùýl?ý4ï!óqCÚr™³ ò#»8û }æ›w¶;ýœ½ûÁÊT®¡Ò\z±§•uøßýÌm~‚üúáÌmêvè ú¯®—›W×C“T¿›¤ÌI/à¼Ém®ÁÊä6€>Œg\ÌMnóýßõÍËÇç}ÿPCèíæÃB73옑8or›ë«3g/àÍ›3ßÿêýCd‚®—²Ïúžp¿8ë´}O"üŠ™m+ÚjM£¾èÿ]ßܾº1úi>ÍâöFõÍÍ«kù\IÕ3éÙ]é kn2 ”ûwèû‡ü1*ßÜNãöÕ%“÷±šë°õÌ.~þ«÷ùã±|óróðF’Þ${’Öòzÿ`ÓÍ–üja}'¿ØñëS992ýé÷KÑÛ;!¯ÅL~cöâ?ü™DüüWïjdì&=m|/¿¾s§onkK½­sìëãºægz°]_]5s\Zëåw“\¶^·«ø.cÓƒ¯ÏûþÁL~eÍWöÍM½ïîÛÞ?ØôàµúÍØç‡_¾X—±éÁ×zÿzugzP²ÏÌïªÝÙ˜ÕÿîÍøûþæÞkØj7ÊÜs&ß|Ü«3=(Û1Iùo¾-?¯«vsaOœýô öróæ{‹Äy“\£)}@œ7éÁ‡ùgwÍGúxÁïB“”96|¤Lz@èíμGü}Œ›h3fý.ÒÎyó& ¸„Êfæ÷=A]~¨4}¿û:yÕ9Þ?˜Ô(µ›2¯i­Ù#å:kV¦ÿàç¾¹Mgüõƒ™ßÁ<ÙíÖZÞû°Í5ÚQUðÇnç÷»ô÷çØûîL~°jv~ÝÎܯÑ}o¹ÝŒÝÌÜððÙ’ëçIÚïN>㓺¤mv‚.¥¼=®™©w ½ß¼Þ¼y3õ–ƒNþØí<üõ†Þ?ÌÈ›·óðȯÎv›__Ô573ìõÕÕËëŽuf—¾'S³jÕðéøn7æýfìÕÄ‘ûgfر¿®z¢‡¾»Ý¾?^Ñ›u-}ß¼|<ãû3ÃOåw;Ã^ÆÞú‡/ùæã&XÙíû£Åÿîfûþ;¤ýúáœaiìf†½ú»¹'æÛ|ó~óð}|ÐÑ7Ÿwæ¦f•çð+'íœa:Öû‡ Vvþõyß?ÔÈ4agدg|ÿp¾”}e1ü¬²ÙöBZ3ÃÂgnX¸+;ÃÞ÷Y?âñϺ;ËkN÷á»ÝCX¹÷ñþ¡üà›Û ùú^;~ÿ0íÒúugnòî£úð+\t»m°/l†K›nfدJú|ÿ`¶qç>iß¼~ü«÷í²‰ìïödËrû¢á|xóRF7c·_ßçýÃú•kn÷ÆÏ£ïÌFÝþTwæfc%õ|~¸\Bèí=D›D\¾»]þ¯~÷álãÄ‘žÿ ý\þ—Ý—Ò¹Í..c·_löÍËÍØMÚ´1WÒšä¤ïÓx­¾¹!×Î4cn¶ êwc_ ¿~°Û÷oÞ ¾ÜúýCŽ|÷K‘À† [ôvãqµG<Î ¾‚Êû‡á|½c]ûtE×Ü*Õ}±ãýC9›öùõæáM s ÔvÛàž´í.XÙ–ˆûiÂ^œ]·ñnIíö†Ý£~à“ÖöG›ÈíýC‰ ÛþˆK¸è!—1)Ì•óvÛàË—|óuóæí¶Á=ëF¾3/£òÍï¾ûh‘Wg÷.áâ²mp;AÛþˆœÛÉy»mpÿêlÄåÃÍP¸0¹ÍåÃÙ¹{r³üuœ=ϵ³n½Ûu†ÍZöÿpŸ¾¹Maʹ—·ã¿ëšÛfÿ ïÄlØvϼ§¨>ºí|óUÓû‡úñƒon¶[_ã{7æû‡þñƒo>L¬Ú“ÏÓ|†~™xz|Ÿ_?dÛŠ¼Âÿp¶÷s_ ¼7Ô†ÉZf™%ûc¿ô~ÏøþÁ™Gó[•F6´Évì6kisÎôù1Ä÷fê]³ûUâaS˜Ò¾û(¾ÑæLa¾¦ƒvš—:úæÕ6®Öwœ¥…Ðû i‹i°#×ôigÂaÌC¯Î¦03õwÅlØÎ‡¯Qùæùãó¾(‘pa{?/ßÝv>¬”oÂEí7k /àïuÞpÞf-_QÌ5·½Ÿ-ÕwyØ­ 0¿¡yìa¿{ȇÉZÀaÛçzÿÐMÖqim “ö¹è47|jûlß|óuçϬ¥§AºonS˜ ëláå~šèwÑÆv>|ýà›Ï;óÐ$eS˜/j¿È‘Ö¦0—1—•ÂÃ_ /öáÍ}Ÿ„>nf™1?~ðÍ×ȯ.·¯îÒù`³ ›µÜ«÷­ Çvešß›D_?˜Òù¬uù]ó=MlGsìwÑøë‡jNÂäÙü–Ôiʱiîœÿ•ÏVlNÛý]¡i:«ì÷9©iv›íæ”Ö´[ޝºÊin>Éžbúiá´ѯ!þüÁ\•²Oïéå/F–­1´µÞ3ì2ït®ÖücVËDË}¾]f™ÖöíÛ.ë–}uk®w°ZæÕåC\®øæãÜ7Û#êùðç;="e÷3«Õm]­Í_ 1sÞöúR™ðÐÍ¥a¿þÕûSl<º7“oÞïÌGý<|Y^ëûkÿ°>~pÍÓùyW^ï5lz¥sTððÉ:VYý4?GÕÓòÏMìÿjÝ Ÿ)ñÑiT’n¶óR­=Ÿæ9‚þN‰|ºoŒ~ÿð9*ßüü>»¿¿6¦×eŸoææ8³éwýîå󓏿%Ý|wÓ®³S>Ýì~ ›p‘sO¾yû`Çû‡a]žñþÁl&–ãÔ®o¾nÐë+BÚšn>\-‘ïþÎi?icfpØÚoH[GèáçÝØÍyŒTzñÞl&¦}f©ot³™¤5›‰uÏçËûÕµúñN}sãX{4ž'zÿx,ß|ܸL3;¬kŸ÷ýWg6ÛžüZA§—Öq€kn6S©y½Þ´ëÀwï§gÌÜkz¸>#þÞ×ù}8Ó•såü(‘P9êM´Ÿ£òÍÇÝÛP™Gî7çïv7ðË—\óyóðÉL½ie?)µ7¢l9¥ÙÓû»¿[J½1_ ¿~H¯ˆù¥a&½«…)™ ºíɽÛ¸ÿ«z‡nR®ÌóÆÜì\Õ}±xš›Þª|~ÿW†Ú{<;l2§€àÍ›,àúæÍÄŸ÷5èͫ˟oèýC±‹œz3öÜîÌÇǨ|ssßE~½òinº>ÆqϤk^^/øýCŠ<¼Í¾Èõþ¡|ðÉ7¯7ÎLüôð†6û£ŸÎLü½ì«ã›‡7«½}Õ‘Ot“ÓÎý­úß½ÞѦÚPù*7¤­ùäýC‰¸Œé5ª3µ“6µ}Â7·ÐéÝ ¼ÿ¯ëêÇÕq“\?œIz«ÓŸ “]í­úÝ÷ýCÖ.sù®xÿ`ÕQ«?öK¯‘å|›¶:µôõÁÍ_?ØôàµÆÍÛôà›\ïZd–1éÁ•u}D8o’ˆkœ7yL&‰¸Æy“7ÀÛ$âÊ:“7@¸wc7Å, ©l]§Èzx“\â¼½e%ïÏèvóÚ[þ¶ã¬_§6ìUhû;M~û½½@Þ?TÛsøºùîf¾¾:3õÂØM‘ù››¿~h¦ì³öÌÁøVnHkàÀùfN–̲ÊÛßÛˆ<¼]g©Í›ó-ÄùþúøW?>eZÙ¼„´ŸêHZ3ÇÕ1Ç{šÈ#.ÌTv´fö‚pa–À×ï>fÄÜLe¿ØñÏÿþÿÓÿú§ÿú_þ\“¢pÎDyLP-1.10.4/Data/Netlib/Makefile.am0000644000175200017520000000350412053222533015174 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 329 2012-11-21 19:02:51Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # List files that should be distributed # ######################################################################## EXTRA_DIST = $(EXAMPLE_FILES) datacoindir = $(datadir)/coin/Data/Netlib ######################################################################## # Extra targets for uncompressing the .gz files # ######################################################################## # If configure has been run with --enable-gnu-packages, we assume that # compressed files can be read and that we don't have to uncompress. # Otherwise, we uncompress the files if COIN_HAS_ZLIB uncompress: skipunzip datacoin_DATA = $(EXAMPLE_FILES) else uncompress: unzip datacoin_DATA = $(EXAMPLE_UNCOMPRESSED_FILES) endif # This target still leaves the original compressed files around unzip: $(EXAMPLE_UNCOMPRESSED_FILES) $(EXAMPLE_UNCOMPRESSED_FILES): gzip -d -c $@.gz > $@ skipunzip: echo "Skipping decompression (package compiled with --enable-gnu-packages)" pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = coindatanetlib.pc .PHONY: uncompress unzip skipunzip test: @echo "No test available." ######################################################################## # List files that should be cleaned # ######################################################################## CLEANFILES = $(EXAMPLE_UNCOMPRESSED_FILES) DISTCLEANFILES = $(EXAMPLE_CLEAN_FILES) include BuildTools/Makemain.inc DyLP-1.10.4/Data/Netlib/missing0000755000175200017520000002540611405216053014544 0ustar coincoin#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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 run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] 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 # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: DyLP-1.10.4/Data/Netlib/capri.mps.gz0000644000175200017520000002616010430174061015400 0ustar coincoin‹ðJ®9capri.mps¥]Ûr䨲}ßûôVˆ;†Vüéÿ/|ûí×{þÑ¥Éÿñúg¿~±X6|tñ£€oEüöOs¨˜geyþ1„J0ÿ1ÂàÛ_¿Š¦d‚ù–«ó©€ÎzçlñÕ;©m,öƒo[üè”Êò¬,O„J„‚*P2¸ì}Zßêô­·Œ%ËÀÃ"Òps(˳²<ð–±dP©€·Œ%ËÀ^ ßꬣòÚ²ÿ›ý‡ vUññ–bÉÇû)(¼ÿÈ?ºô1ñíýGügýsð_ðÏü3—¾0ÿm´÷íõÇÀ’9¾Àõß>^ÿ¼ ì`äUìðwø”Ý ìe7(û€²(û€²(»BÙÊ®Pv…²¯WÙ@ÿ=õäëóß¾¾~œß†f¾}IJ¯¯øößðíß®ðí ßîðm ñ¯¯|»å–¹dY ƒÁ2–9°Ìe,s`™ËXæÀ2–9°Ìe.Y;õõêÔ§eÉwÞ>ÀÞ|û€oøö€oWøv…owø6M(Þ2øvKs LÁæ00‡9 Ìa`s˜ÃÀæ00‡9×Ç÷÷äFác ¤ÿ¾}D'8ÀËÏ”=²ocãÃÇTÛ eW(»BÙÊîPvËŒLáÊéÀH—,ƒ¶C >¦^÷ÿÊ>⸗Ã<ÿØ²Š¡À#/Ë ìÕëlg’þöןÿüç²uÿ÷ó5dîç§øþ^Ø<] }öí,¹\ܾ?BŠ~Šjø™ù—?Ll®á碠)5]K þóõ²ö 5>‡û|êñD‹Ìøs)r 'ÛŽ·ê ÷©Öñüñ\ä Â_~¼EøïuÀû6ÉÆcdxýw\- ¯áxKp_ ƒéÚçŪã~.QãÃ’‘¨ýÛ_Ñ4ÜÆëÊ;^U"çÅÿ™Œ"ú :Xôø#ˆ&N·6žü¡jÇù3»ÅEòŸNàìñ§ßv¼UDäÏ(¼äˆüŸ^€÷m<’ÇÈð"ü]Fl,ùCÔžñGôø“j—D?b"m¼~=þˆ©­¤åŒ>$©–=þH¢‰Ó­'¨Ú þX®¥Ì 'œ&ÀÕãO¿íx«2þÈÈŸQxÉù#?;¼ïÛx$‘áEø#»ŒØXò‡¨=ãìñ'Õ®(þÈäDÚxý zü‘S[IË}HQ¬züQD§[OþPµü1Š –@M8M€?ºÇŸ~ÛñVeüQ‘?£ð’?*òG}vxÞ·ñH6#ËðGu=±±äQ{ÆÕãOª]SüQ=þ¨‰´ñúA÷ø£¦¶’–?:ú¦:X÷ø£‰&N·6žü¡j'ø£­Xrþè § ðÇôøÓo;ÞªŒ?:òg^òGGþèÏ/Àû6ÉÆcdxþè®#6–ü!jÏø£{üIµŠ?ºÇ=‘6^?˜ôÔVÒòÇD2T› ÑÄéÖÆ“?TíøâxF3á4þØúmÇ[•ñÇDþŒÂKþ˜ÈóÙáx߯#ÙxŒ /ÂÓõ`ÄÆ’?DíL?©vKñÇôøc&ÒÆëÛã™ÚJZþØèC–ê`Ûã%š8ÝÚxò‡ªàòË“ÀN8M€?®ÇŸ~ÛñVeü±‘?£ð’?6òÇ~vxÞ·ñH6#ËðÇv=±±äQ{ÆÛãOªÝQü±=þ؉´ñúÁõøc§¶’–?.ú£:Øõøãˆ&N·6žü¡j§øã—?*#€›pš$þإǟ~ÛñVeüq‘?£ð’?.òÇ}vxÞ·ñH6#ËðÇu=±±äQ{Æ×ãO¬½EàëñÇM¤Óuâ¤Ç7µ•4üyþ‹=~@:˜¬àH§[ÈÚ‰ýŸYjñç‰BhüaþÜ´oðçùãy˜g^ð'Âßpx¯ëÞ·ñH6#ÃÛò‡¬„´±àU;ð§ßòÚÁ²ö@€ç¸×¬ÃŸ'ªª¤å‹>Ĩf=þ0¢‰Ó­'¨Ú§ÛÍß“lÂiò4oU ÇÏhÂ"MEÖ£ ‹4aŸE€÷m<’ÇÈ("4a]GEl|ik¯¶ðÝ윳"cacF&Ö#‹îÌzœaip /Øðöw8<>ý?Ôðó¤!a#Àwþ,õëW§ÔÓéÏÈ·ðóœ"dRœÃ9w¿ýÍcGpª#x¯#"j罎蔊-áðóŒåç;‚uD8žyvDüÐtD8IvDDí(<šÒ)E¶#-‰pÕ逫NG„§gGÄMG„ÓždGDԎ£)RdK8Ò’Ü[¢©–èøŽÂ“)t©¡–è‘–Ä`„D¥®Èüà;£p ª„«{øyÞ˜òm× W\©ÒoÜ„G¥®:Q;ïuD§„«{øy˜úóÁ‡:"#$*¥pÕ鈈څ괤SŠl GZÔp½puÁU§#b0B¢R WŽˆ¨…gñ†*E¶#-)ã›ð¨”ÂÕ|GáY¼¡J µD´$#$*A¸b·ðÑ ƒ,•ÂÕü¼„@ø6ÙÄ.È,5Ä›«#8Õ¼×µó^GtJ¥p5?oX|¾#øPGÄ`„D%W¬®®& ÕiI§ÙŽ´$Q£ÓWŽˆÁ‰J®X'\]MDáoÈRdK8Ò’"ÞÄ–hª%z¾£pˆ7d©¡–è‘–Ä`„D¥K]`´oŸ¡€Mx)D÷pÜí²PÀ&<`\6òžñÇ“6òx߯Ha„Ë—Bu*‰?îh(¸ 1¿ñÚ‹]Í.Ñ2j° /þØa¿ŽµkªvÝ«]ÇÚõçkÿö®IžŸâDE#—*¯o×.ÛyM •\ªMº™1É4G3óv×míçů¬Ä³’éº6Pðc~Pðu¾Rð}¾Sðm¾!ðÌ;\ôGy‡ëUâˆáïp=ïˆp<П7ìnk?/ßQÞ1Pðc~Pðu¾Rð}¾Sðm¾!pðŽk"~Àø¥SÉóGdx“w?ÔÞpFxÇ@íçHÂ;†à ~ Á ¾ÁW ¾Áw ¾ Á7žy‹Þñéý™³F /xëyÇî–¢ð·â‡ þ à!8µ%óv ÁW ¾Á©}·}¾Qð„¿ÿx¿Î7j1^VÅË,Ô¼Úü{™¹åüº¼²—ê±Jæ…K!®ŠÈµpµØ'üãýq;ïécM<ïÜ #À‘&&þx{½R¢*7úx£˜ü:×d=ÎÚ¸­—Áëäæ,…¥-|¥àû|#Ký÷ÙÕ€*˳³Ñ Sm‹úïÿr>é™ Îná‡Kï*N›[¸Äál6Š/âþþ±ÿ}G“p÷<ï:“Ñ$Á2ùB±”wÔ÷^©›üàx}“ çð•‚ïCð ‡ã]WÃ{ä‘õA‘ôÑ!é㞤çcà_šyY, ¼&©UÏñiHjÁ 4I¾Á7²”'éu‚œ¤IqxNÒ\àðœ¤=¸Äá9IiøûHúøI$IôNx MÒ³ÔÍ*ö‘Ñä X¶Áw ¾ Àñz–:’§ËŽËŽ–åm9}+ÀÏÇruÏRØézHGñ=×Ü"ð"òy÷¢–¤—4Æ¿ÕËEŸ”˜v ðüA´ð©¤]!^ÿ#•´!‚4~§Œß‡Œß(ã·!ã7² ”y€:z ‡çª8<P=¸Äáy€¢áïÇž¹öçÔ¨5/ZŠ8 D€Š¥nÒ€ã÷Ò€c$  {hM>´R¡g턞u$ô¬ä¿Ò3´I34Â^…À)öÖ+İÒiá;Uû>TûNÆŽ¡Ú7ªöm¨öª}#k÷QaE½. k/*àð<*ôà‡çQ¡—8< 4ü}…¨°~!*¬dT ‹÷§V:*œ¥nòŽõ÷òŽ5Ë;èŽØ“íù÷ù÷òçÆ¿ð™¹e‘ ]*߯Žw´‡rÞ{ŒÃsîÁÏ=¸—8<÷àÎݾßóŽ=óŽ}ˆEí[¸r›­ã6ÛˆÛäÆ¿¿—‹nàw,Kæ:-æÞ±õ¼‡çÞу ž{G.qxî4|ÃCÏ Óóâ„”7Þ±eÞAWr ‘nj•ÄRÇt=ÓáòƒÒÊe:&ZI®c–{­cº —+“ŽIO8ÒÄRÇt.W&“®$Áߨ[ŠÍþ\­$âÛp¹Ž9_)ø>ßÈR§Žé¦v?²Ô1]OÇÄॎéz:&/uL×Ó11x©cºžŽyC“ðxÊžŽ‰]muÌN©›`€ã¾7[¹9|¥àû|Ãáx×Õð^ y$G}P$}tHú¸'éùdÑžŽ‰“4×1]OˆÄIjñu ßÈR§Ž‰9A©cºžŽ‰úP¡cºžŽ‰ÁKÓõtL ^꘮§cº©ÅQ’>H’úR\eR`§ÔÍy‹GF“ƒbÙ:ß)ø6Ç{(¤Ü„Ë•IÇ$YvŒ°,o;¢cº ‘+ “õtLG ‘—‡‘·ËnAH…’èH)ÃPR†há;eü>düN¿ ¿QÆo¤ñ§B‰¹v©PºžB‰2£P(]O¡Äà¥Béz %/J×S(*¾…ž=/jfZii„R7üñ{ü12Á}‰ÑM¸™J2¨¬#Ae%§î•ž{3…²õy…À)bíäð®/ÛJH¶ð2~2¾ËÞõŽRIt=%u®BIt=%ƒ—J¢ë)‰¼T]OItSãC£ì]IöªÅI—iyR73ÿú{3ÿšÍük_ t.&%‘~VÈIsã%?Ι+‰®§$b=T*‰®§$¢\(‰®§$bðRIt=%ƒ—J¢ë)‰_÷Ž=óŽ}ˆ­è&\0LJ"é6ÛˆÛäÆ#J"¡^TJ"6}•J¢ë)‰èìW(‰®§$bðRIt=%ƒ—J¢ë)‰Xèaz–L‰ïØ2ï + Ràsˆ+-¯PK‘¯RŸ?¶€\ƒ’ˆWR(‰ŒP~¾§ƒ–2.5‘Aod½‘ìˆBo¼*¡Î…¼ÑFøõT§æÄw¥ø»3½q¾Rð}¾‘¥‚Þx}/O¸z#U‚ވ ½±8¼Ð;p‰Ã ½‘„ÁðŽLáe6½}lV£7öJMý»ǯLýË9|¥àû|Ãáx×Õð^¸y$G}P$}tHú¸'éù¢ŽÞH4Ó‘ZøJÁ÷!øF– z#ê…ÞØ#)/ôÆIqx¡7öHŠÃ ½‘&éHúøI$I2&Ó{¥¦þ žGF“ƒbÙ:ß)ø6Ç{t§ë!rËŽËŽ–åmoõÆhc¥øE½ sÑ î81Jñ¯|‚ï|‚#Ò€aõ¡BØëq‡Â^ã8¼özÇá…°GsüØ3ïø<Çœã~Ñϵu™°×+u3“¿7“#3éÑUæž?®{×{×ö®ä¹Ò“\.챎6FÜÌÎÁ7 ¾‘𠹡Whn=báðBsë ‡š[X8¼ÐÜhb­@¬õ ÄZIbiæ´Õ«Wêfö[oö[³ÙoíŠf—ööþ䯷šA€Lsë­Ñv´‡ Í­çÁ8¼ÐÜzŒÃ Í­çÁ8¼ÐÜèû=ïØ3ïØ‡ЈfÏ7Êm¶ŽÛl#n“ßjnÔ ¾ÔÜЙ¥ÐÜzÞà ͭç8¼ÐÜzÞà Í<ôÉÍH¡Üwl™wЕœ¢›ZÕ«ÔÜXOscø"˜ñs_ª|Ü­7/ÓN5 ­=‰qˆÌVêdlÂÕ4XÁ³ž€Æ&\'ïÎ7Úóa»õ y|ä‡~Pðu¾Sð„ŸÒvï¿”ÆXOCPHc¬'aðRc=i ƒ—ÒëIc7>^ØÜ“ưçqƒèU=âùå||²Ët£>C 'Ÿ¸€?K¡…¯|‚oÃŒ›Zø`¸(»î‘|þñÂü| w³À[ËY8a-¾P á;ßHø)“aã^Êd¬'“¡nSÈd¬'“aðR&c=™ ƒ—2ëÉdÈÀöAÖhuÎ2•×ÙYY+u&Aõá8k8ùŒœŠ-|§àÛœìº^Ûä´ÇWwdŒËÛõ3Bó*Ä%FI[†:õ‚Á7²Ô©MaãSjS¬§M¡Ã[hS¬§MaðR›b=m ƒ—ÚëiS U.‡ˆuàÄò‹cáSTÙ8—öÎÅs™lÔ‡÷¦²ã÷¦²cd*£»à½&®ÉׯðgÍø³R3ÖJŽÏJO9†šrL1å¬h—âë‰Kèøâë‰K¼—XO\ÂॸÄzâÒó£ÌXIføLã6FÌ‹õ9P¦ûôá½9cý½9cÍæŒudÎ(ß“×í_ñù=óùÜø¨:‘+ž~³üÙÑ*U'ÖSÐ.T'ÖS0x©:±žê„ÁKÕ‰õT§¯{ÇžyÇ>ÄŒV6b..Ý{Ç–yGnc—Ðq¯ô$,è—zëéIèœQèI¬§'aðROb== ƒ—zëéImPya~21Vª›qß²qߢ÷ÿ×HiYt›×û;Ó#éqïÜTþq½¾0ÝÅி´´÷cÏÐlà,ÂG6Áß·8ôzèõê½JI¨ÞÁÍg®”°5¼~Õö¼8æÔÔ¼‚˜ÍÊ0ç0xþ"Ü™KãÂ/õû_ç…iÛÔ^?yæ‚©zýh\ÿƒQ—§ò¸ÏíÔ>Óÿà”‰pêMLT׉YX±4ð¦ë‹UxÛu|–FÄ R‹®FŸ·*Ú®ã.xÓuʸó±1M×)'¬Bà¥Ïz±ë:Í…K^G¼»‰Ê o»nò•3UÃ[¯Ï·óÔ/¾f3Kùq /ºŽ1kÚu>ZÙÞtOún±‚I^µŠs¬ë|ŠÔvêmOƒ„¨/6‡°Þv]`,Úu±¼=F«Ð®óŒM>ßy½”o@ÛujÖÂJYÛ®ãÜYxŸ•tƒ]§´8çá¶ë´ŸckxÓurQJc]'™Ò—]'¹^ÖuÒ[•‡Jô}V…×ÁJø¼ÙÖð¦í‹‰°E Ћƒ—q^q'§ö5ÇÞë ç5Ÿ È ·³APÑ]Q=$f©Ãkx“|†‰ô÷-Î¥ÁàEyfí!ï´ª†ãAŸŒó¼ô±7`•A¿h»ãKµ ò£È0bBaï!æW‘í¡Å. íd8GàýØŽ¾keõE–åð/°,ÂñNFmÞáÔ+· „›<„{ßଆ·Ó—Rc,ÓËRQ¼‡”‘çäÙöŸül Ç#5œx7Rã¯ò*|¨h¢ZºÞ4qqÏ˺õ;ݽ ¥0xõ^s®®ü rŸ©ëþ¹Œ<‹ÁøÛ»¨¶ûZƒ¶],^p¢íÃ)5ú®2ºYÏìc»®áí¸ Ë‘q÷ÑUiË1xùÎ.´CÚ~†×þåœG× ÏGÔ}>‡Áç#üËI-ùV/ˆˆ6ˆV{Ç©ámÐ÷¾¥¶û¨¸ÁàåŒeµThÛMz* À¿œ•âï+ƽ ¬pBòÞ¿8£Ì^rI{—g¼ VZ°+£¨Ž×ÀoCú1ª‰>¤¹…‰ÞòRúUGÛD?ºÞë,/›(œ3 m¢`‹ªá·‘ { Y¹ ã2ÂÔðv…;Êfý(8…À«÷ÙpMŒ¢Oùt ¿ PèKÌ5¢¾è¨ü+Žá·qˆzSÄ!—Ç!g…’5¼i¢wG'0G5‹2 W3€³Ì M4L7Æ÷ÂÍ_ÿ<®à^ô¶ò àe_Ãq>_Ãë§> 05Ï>½|¾†ʵCàõĤÏûgk;ŸÝØ~çÚ1Ã-|Ó»¶[¬Â|Ó7‘) ®Ê½[ÍMë›aÿF1ƒÁÁ¹ô$õ‹ÊÖ7Ù¬¤äƒçª ª—m}S†-*‹.¨Ìl™sª]5ØY,ÆX Ã+”§Ÿ]X;Ù36‹´Mðz áÛ‹Â^Ô†µµë¤¶ˆÚèÓ4ЍÝõMØûeMpn}ÓzÂÛ \Ï7ß^¼a)AX,Jb)AØ[ ƒƒ 2áók,æ›ÆYë08¸ ³AØ^æ›Îɸ8(á&¯}ñ6òÖ7EHÙ¢k¼Ù5‘>'XJ –´y ð&< ®‰Ê0~V¼^¿8ãfû^¹9½Ø àõ+î|ÖóŒ›mJä–ÞÆÍP õM¦„AàõÊÆœü~ýÆ—Ìüš…ûœâ*ÒuZd¶öë¥Òñº°Xåƒg^ççäE1mÏY±X…ÁómN?Û[‹ÌÖï) .á6wZ¥^(ŒÌû¼©áN,5ã†tÇŽû&éŽ5¼}VxÞv¶¾Ü±†Êëâf¯QuÆãàu®çuõ:ižÇ%î¼›Hýøø…®Tè1 is㱉Ô{ñk7Ží(X-‹Ámáuî¹y[¹ êªÑÜåµ³…1ÕN¤Â» ³¢†7Zœô™$ˆuÄDšÅºJz,,UëºnCM¤!¤=Ýf öÆm´Öޏ CÂ…ïa'C÷k}¦1x.”_¿H®0ÙÕ:«‡áåËl”°HŃZ²žõw­s­Z¶¤¥a5¼‘N¤_À°hC]t„hSýß2Úà§ßŠqg½qgè¸[f¹¸÷×?ÑÌÊ÷°Ó)q.3+¿Zä¼È¬¿¦Shf%TÜ(áÙNà?O5™•õS§Áà&o»ã*-YŠ9ÎZu¯3« ÇÃUf%YÜEx;•ùÄÝF¦X—Ã+çrü\#™KãžàÈ˃gæÐÌj±)³JðvŽ ¥Ð`å“ †ÀëÌJœ &$³BŒoœ–ëå Ô¡H×iñÌÊ/ʚχ ƒçÎå3³ϬŒ–’ap“;­ö|­×ùå·–cð"³òé·H¨äa9ÑßfVLâ'ËNw¬á¸o’îXÑ̊¡™ÕÓkøç¼ƒ7;’ã™UéuDfu©ow^GdVÌ,X…º¼È¬˜°Â`3¬ñÃn0¸Í¡B0ë°ÌjY ·)à.÷:ç½ͬØâœ®ámf%ib•YA¬«s›bàÈ~¦X×u*³ ! ϬÚ·QRŸ±îÖm°ÌêL] :îL,Œcp[ä6N‹fV\å“–Yù||ZK,³Z,—Xíž› × Ë¬¸X]ÃÛÌJÉ¢ ™Y14³ª£ •YeãÎzãŽgV>y{Þïëûwb©§zÐn¢Iµ( .råÐZ§,²ÓTÁ,Ú|G7Ñ´Üš6¯ áBs´ö|†µ3_¬À6Ñ„1xí:ß*àÆ |Í¥w„”ðlMûÊŸ—ÔšM4¿†Ô²†×yósd\–”Ñl‘ñÍDª©S´~™á$¯Î¸çá·ú5³…‡¶¼½Éã™iѹÓ*%x}ÀH0†’AsÃkx¾=mÄÔ\·h¦38¾=Æüj‚£ÛcR[…Áe!¸ùuº=¦Œƒ«|7D„wÿ´Nb^PãÁ7…› ã 2¿KO¸E1 nò=á§Xn9£Ïu5Žîµó»Þ¬¬áíö˜áN‘Þ\Ãq×&½¹†×ï%Hnƒ8­a¼·N+Ï­Óo®áuöG8íÄÏøò`El|…Ýø’Ö pU,À•3[Œøï³5ìw4« û$ÊêÖëøÌ´ËË*¥7Þ(!°/#–|àP½N¹Ù/ 5ºñåóB†Á‹¼ÛO))u¹Ó*x•UúRbIÂK/ÒYeiKxiñ[‹!*œÙâuÞkxÿ²è)c’%Ïk×>…I y%yq+l o¤îÓv;àóäƒ<’Ï7]'T o²ëL:‡ýÐáx«]0íS™r^&f<&f%\äëwŸÑ*äpTLÜD.áwk?I-ZŠ6!×áEkÏ(c|öé÷x‡¶&R£g¶<¯/—3lxb,'ŒÏâ±–³_é¶3,_|ŸòxïàÕ kü ZId†óÂÄÒ´½ŽÇakDˆ–ï"ÜᢀçnsJÜçáG­]hȨÞl=qÇÐe`ØÉŒ·k xuCA…ΰL±Èw€ÿúÅ!ÏÍœ±|Üí"lë,,ò*´ ?žRcp™¯ƒéÒú½Ü,Ku ßÔ~(¸A´ žXø<¢]Ø%ø&k¨±pÚÇÆ›]%|Ó¸p1 É.X5¸¶z^ûpa\’ûàž©Ã\¯² 3KË„%½¹†ã®Mzs ¯ßYžÜqZkY oœ–s-p§õ×´=8­»uZ&XXþÛ,\`ÚEØZCFfÁU.y…gahL1s>q0< •ÁÆç™“Fæõ!”£µƒsÙpä„[Dæå³Ò‹a<—(x8!׿´¾SüúÝ¢Æg‹Ð°†C¡Ùa”pÿD´m¯2+3cˆ´hfUDÚJú(#-‘Yq«ðÅç2Ÿ¤bfÅJZ¯!‚]‡h禜h-O}HU ¢]Ȱ3"±+6âÜq< V2lxrô‚ψ¥ÄààÖø®Ó¶ÝP gY4gƒƒwX^F”à.÷:»HÕžõ¼ 8xni•Ye¸ÛáWÖMÏWYepmãÔ@¬ÃñœÇº:[åÜÖðà6lÀmT8‚Ýæ0 M OmI¢[ZAâN ðžë´!ýÓ‹u–Á‹ç xëØ,O—ÚŠX§}^Ç18ø¦^<3,Gø¥µO.7yz t÷ß…óqwàµð"æPÛ´Ðϰ:åó¯&Ræ}óyH¿ VáœÛ:¼T̬_±„ÿ·Öiaö¸N€7i¡Ï'’´3¬HW¯ x½†}ž£nVèèóÿõ‹#66i¡ö€/68ìÊV¸Y/ º'µøP©0¸Ê¨0E¢¡ÒÏQV`ðlOê|\‡eØî€éºg çÒnõ‚œæÕžŠéNO ·¹Ð%SinösŸ²5¼ÊëΫ”qS qÇŽû&éŽ5¼~¡}÷F5’\»¦í×ù5$Cw|žny ^ç¼Îž÷¤²qGoSñ0Ë(ô\¥ÏÔÇàŹÊp*Sc»Örm0x¬Äyh×¢ç*ez-—RǶ'8WÞ#|,áXÛUå´§æÚ® éj¶"­‡Ê¶CT}9OÏ8_žTÄÚ® ßC)¶Ä¶'8;W¸Üi¬íÂÚ­Ž>Ÿ'B‡Öcm×õÀ™«í:ïã°ÏÎZ§ m7Ô¸'¸O.Âò¼u›bBJAåj{‚³έÂÚn íêôlvµ]ƒv£Ü¹¹ƒµÝPm7©í6Ô¾µæ³qÂE5¾pø*´íÐ'üÊ΀3àé'eÛ-ìbøñæ<öÚn@l•2ì;¬íñêj»M_;ŸbøÃÚî0Ê䳿UËÉW…µÝBåg¬SÑçávÎÜ`m‡ÚuœË8î6W˜bÈ4ÚžÏOãåÕv—Ü›S}QHÛËw/æsœƒX~ ã Ïç?©8Ç\ã®0¾Cíì¼8¿Úî@[‚ÜÚFZßöÜxxúTþ&Ä?¿ÍN¦ý²íÕËRÒ¸œœ ‹$¬÷ .Ïa—hÛ„ùðˆ+y]Åþ–uŠ ]Ï­ÅÚΨ¶³ÔvÏwé‡LÐ?¡?§²çÓC«XÓª¯¼yaâ ig^ŒÏ[ÅflÜË'×g„-7¼^Â}¡eiœ¶Þaoo` ?‘2ͬ…7Ç<~ªŸ chc<'à¥,ó"Î7J˜¶vŽ?µ|°úÓoáªÒ~®Ü¦|¸8i|ñí¬çë§³æ¯Ã(z¾| «¼j¯WyÏV!Æ7/Oˆ]×>¬¸â¡OèÏ ÓCqsðÅù8¢]ëu¥h÷r>‰w‘|òŸ‡óxõvãž*šj8þX©«àø ©=ƒÿü^'ƒ—H–Ûà1ŽÔð×.”z^)^ÆnI+dŽ{mïØ-âziY{5 áûÛÛŠ”:؇à/¦Þ ¾kÄø`csZêz1òC ß)ø6/Þ7R#o£}öis—º¸ò}#ÌÍa# ÔúþþQÊà¬]¨wœð£:™ÀY›Ï‡Rµ~2.¼2­|z;Ÿ›¿þõÏã |Û§ÕzþŸýçëçÅŽö[~+Ñoú­F¿5è·ýÖaßÚý–Õß¾¾}íÿ=¿uØ·íÿ=¿ ÿ÷Ÿ¿³o·<Úñs­)Ï,¢(Þï›o†“[ç¤Q•ây©ð-~îBV¥DYJ™çÃ{ªR²*Åžµ¯íz Ùõ²ë1d×cÈ®cÈ®cÈ®cÈ®cÈ®uÈ®uÈ®uÈ®uÈ®}È®}È®}È®µëÛ¯Ò® µ«*Å7Ô®ª”ØP»ªRr»ï¯-OEú¬ÍvìgÃÔùlÄ–µÙô6;!Œ@Y›—2ËótEËÚ¼”îÜ›kY;b×cÈ®Ç]!»Ž!»Ž!»Ž!»Ž!»Ö!»Ö!»Ö!»Ö!»ö!»ö!»ö!»vÔ®–µ˜]-k1»ZÖbvµ¬½í¯-_tY›%=áæÞsƒºam~j漋²6O ƒ`†E_Y–2Ú ƒ±vÈ®Ç]!»CvCvCvCvCv­Cv­Cv­Cv­CvíCvíCvíCví¨] kQ»Ö¢v5¬EíjX{ß_[¾nï³–å;ôaûe-+Î-Ì¢¬eyd²Üá¬-J…ë(kGìz Ùõ²ë1d×1d×1d×1d×1d×:d×:d×:d×:d×>d×>d×>d׎ÚÕ²³«e-fWËZÌ®–µ·ý¯ÍÏ?´¥øP©ò]–T©êµT)=RŠÕâ1e½²Þ Yw#ÖWú-aýH)¡FJU¯"­)Åêd”õlÈz6d=²þ¶<Ö¿R‰ÛRn¤T­Ã·¥à©Á·¥ÜH©±ëm¤TzæÞm)7RjÀ®ô¥›R߇ìú>d×÷!»¾ßÛ¶{þ·ƒïJÝ3 .möJÁ5·üZÊ”ªû‹(ÅîJÁ9ëÛRn¤Ô½]ph®,õþøãõxý÷¿þFÃZn°DyLP-1.10.4/Data/Netlib/czprob.mps.gz0000644000175200017520000013710010430174061015576 0ustar coincoin‹üJ®9czprob.mps¥½Í’#»’¤¹o‘~‡|¤8þåsòÖ,º³ŽtWËŒôû?Ȥô€égI¯UÜ:Dª›¹™º ~ÿëþú±ÿß_ÿ÷ŸÿõŸÿý¿ý¯ÿüÿ÷ÿo?®ÿåòÏ_ÿù¿ÿëú÷ïëß—ûßÿãö÷õ¥éï<ý]¦¿ëôw›þîÓßOÿzþýO|þý1ÿ=ýûÓ¿ÿ1ýûÿ Ï¿OÏù{zÎOÿÿßþÿÿñõ÷„»í¥þÇ?¿óôw™þ®Óßmú»Oÿ=ýýëù÷?ñù÷Çü÷ôïLÿþÇôïÿ+<ÿþ==çïé9ÿ=ýÿÿ=ýÿÿcû¿®‡éï8ý¦¿óôw™þ®Óßmú»Oçßa›þžpÄ&Ü0ᆠ7L¸a n˜pã„'Ü8áÆ 7N¸qÂnœpã„'Ü4ᦠ7M¸iÂMnšpÓ„›&Ü4ᦠ7O¸yÂÍnžpó„›'Ü<áæ 7O¸yÂ-n™pË„[&Ü2á– ·L¸eÂ-n™pë„['Ü:áÖ ·N¸u­npë„['Ü6á¶ ·M¸mÂmn›pÛ„Û&Ü6á¶ ·O¸}ÂínŸpû„Û'Ü>áö ·O¸}Âî˜pÇ„;&Ü1ᎠwL¸cÂîxâ†m›þÓßqú;Mçéï2ý]§¿ÛôwŸþžp'¾ _…‰¯ÂÄWaâ«0ñU˜ø*L|&¾ _…‰¯ÂÄWaâ«0ñU˜ø*L|&¾ _…‰¯ÂÄWaâ«0ñU˜ø*L|&¾ _…‰¯ÂÄWaâ«0ñU˜ø*L|&¾ _…‰¯ÂÄWaâ«0ñU˜ø*L|&¾ _…‰¯ÂÄWaâ«0ñU˜ø*L|&¾ _…‰¯ÂÄWaâ«0ñU˜ø*L|&¾ _…‰¯ÂÄWaâ«0ñU˜ø*L|&¾ _…‰¯ÂÄWaâ«0ñU˜ø*L|&¾ _…‰¯ÂÄWaâ«0ñU˜ø*L|&¾ _…‰¯ÂÄWaâ«0ñU˜ø*L|&¾ _ʼn¯âÄWqâ«8ñUœø*N|'¾Š_ʼn¯âÄWqâ«8ñUœø*N|'¾Š_ʼn¯âÄWqâ«8ñUœø*N|'¾Š_ʼn¯âÄWqâ«8ñUœø*N|'¾Š_ʼn¯âÄWqâ«8ñUœø*N|'¾Š_ʼn¯âÄWqâ«8ñUœø*N|'¾Š_ʼn¯âÄWqâ«8ñUœø*N|'¾Š_ʼn¯âÄWqâ«8ñUœø*N|'¾Š_ʼn¯âÄWqâ«8ñUœø*N|'¾Š_ʼn¯âÄWqâ«8ñUœø*N|'¾Š_ʼn¯âÄWqâ«8ñUœø*N|'¾Š_ʼn¯âÄWqâ«8ñUœø*N|'¾Š_ʼn¯âÄWqâ«8ñUšø*M|•&¾J_¥‰¯ÒÄWiâ«4ñUšø*M|•&¾J_¥‰¯ÒÄWiâ«4ñUšø*M|•&¾J_¥‰¯ÒÄWiâ«4ñUšø*M|•&¾J_¥‰¯ÒÄWiâ«4ñUšø*M|•&¾J_¥‰¯ÒÄWiâ«4ñUšø*M|•&¾J_¥‰¯ÒÄWiâ«4ñUšø*M|•&¾J_¥‰¯ÒÄWiâ«4ñUšø*M|•&¾J_¥‰¯ÒÄWiâ«4ñUšø*M|•&¾J_¥‰¯ÒÄWiâ«4ñUšø*M|•&¾J_¥‰¯ÒÄWiâ«4ñUšø*M|•&¾J_¥‰¯ÒÄWiâ«4ñUšø*M|•&¾J_¥‰¯ÒÄWiâ«4ñUšø*M|•&¾J_副òÄWyâ«<ñUžø*O|•'¾Ê_副òÄWyâ«<ñUžø*O|•'¾Ê_副òÄWyâ«<ñUžø*O|•'¾Ê_副òÄWyâ«<ñUžø*O|•'¾Ê_副òÄWyâ«<ñUžø*O|•'¾Ê_副òÄWyâ«<ñUžø*O|•'¾Ê_副òÄWyâ«<ñUžø*O|•'¾Ê_副òÄWyâ«<ñUžø*O|•'¾Ê_副òÄWyâ«<ñUžø*O|•'¾Ê_副òÄWyâ«<ñUžø*O|•'¾Ê_副òÄWyâ«<ñUžø*O|•'¾Ê_副òÄWyâ«<ñUžø*O|•'¾Ê_副òÄWyâ«<ñU™øªL|U&¾*_•‰¯ÊÄWeâ«2ñU™øªL|U&¾*_•‰¯ÊÄWeâ«2ñU™øªL|U&¾*_•‰¯ÊÄWeâ«2ñU™øªL|U&¾*_•‰¯ÊÄWeâ«2ñU™øªL|U&¾*_•‰¯ÊÄWeâ«2ñU™øªL|U&¾*_•‰¯ÊÄWeâ«2ñU™øªL|U&¾*_•‰¯ÊÄWeâ«2ñU™øªL|U&¾*_•‰¯ÊÄWeâ«2ñU™øªL|U&¾*_•‰¯ÊÄWeâ«2ñU™øªL|U&¾*_•‰¯ÊÄWeâ«2ñU™øªL|U&¾*_•‰¯ÊÄWeâ«2ñU™øªL|U&¾*_•‰¯ÊÄWeâ«2ñU™øªL|U&¾*_Õ‰¯êÄWuâ«:ñUøªN|U'¾ª_Õ‰¯êÄWuâ«:ñUøªN|U'¾ª_Õ‰¯êÄWuâ«:ñUøªN|U'¾ª_Õ‰¯êÄWuâ«:ñUøªN|U'¾ª_Õ‰¯êÄWuâ«:ñUøªN|U'¾ª_Õ‰¯êÄWuâ«:ñUøªN|U'¾ª_Õ‰¯êÄWuâ«:ñUøªN|U'¾ª_Õ‰¯êÄWuâ«:ñUøªN|U'¾ª_Õ‰¯êÄWuâ«:ñUøªN|U'¾ª_Õ‰¯êÄWuâ«:ñUøªN|U'¾ª_Õ‰¯êÄWuâ«:ñUøªN|U'¾ª_Õ‰¯êÄWuâ«:ñUøªN|U'¾ª_Õ‰¯êÄWuâ«:ñU›øªM|Õ&¾j_µ‰¯ÚÄWmâ«6ñU›øªM|Õ&¾j_µ‰¯ÚÄWmâ«6ñU›øªM|Õ&¾j_µ‰¯ÚÄWmâ«6ñU›øªM|Õ&¾j_µ‰¯ÚÄWmâ«6ñU›øªM|Õ&¾j_µ‰¯ÚÄWmâ«6ñU›øªM|Õ&¾j_µ‰¯ÚÄWmâ«6ñU›øªM|Õ&¾j_µ‰¯ÚÄWmâ«6ñU›øªM|Õ&¾j_µ‰¯ÚÄWmâ«6ñU›øªM|Õ&¾j_µ‰¯ÚÄWmâ«6ñU›øªM|Õ&¾j_µ‰¯ÚÄWmâ«6ñU›øªM|Õ&¾j_µ‰¯ÚÄWmâ«6ñU›øªM|Õ&¾j_µ‰¯ÚÄWmâ«6ñU›øªM|Õ&¾j_õ‰¯úÄW}â«>ñUŸøªO|Õ'¾ê_õ‰¯úÄW}â«>ñUŸøªO|Õ'¾ê_õ‰¯úÄW}â«>ñUŸøªO|Õ'¾ê_õ‰¯úÄW}â«>ñUŸøªO|Õ'¾ê_õ‰¯úÄW}â«>ñUŸøªO|Õ'¾ê_õ‰¯úÄW}â«>ñUŸøªO|Õ'¾ê_õ‰¯úÄW}â«>ñUŸøªO|Õ'¾ê_õ‰¯úÄW}â«>ñUŸøªO|Õ'¾êõ¡·¼ý§¿ËôwþnÓß}ú{<ÿþä«Çßaú;NO¸mÂmn›pÛ„Û&Ü6áö ·O¸}ÂøªO|Õ'¾ê_õ‰¯úÄW}â«~ã«¿þóüŸÿùû&нþßýóþÇ?ýïÿzÈsÌÿ÷3\~<4¼Çÿð5üòQ.—ðù×qøÏrIáÇCŽú2üÇjøM˜;ýä²…Ø~<¦ÖðÊèU ×½¾€‡^ý¯ëÃÇúÏœ/¡þxH}yøMô<£o×à=ZÃ;£wÞgô>£Çñ´ÝDÿÅè¿ú¯ý׫í#úíÅ­ÑC¾¤áyï‘ß»…þ;›¶ÇK.?2j~”¿Ø^Ú~ ›´Žù~Ù\Q—8ê’B‡¨KuI„ ¡CÔ%Žº$Âf‰þ³l—슺ÄQ—DجÑC¸$WÔ%Žº$Â&¯ÑÓ%¹¢.sÔe6„Q—9ê²B‡¨ËuY„ͽ\™Öu™£.‹°Éç¢.sÔ™ž¿/ë|o×ÂæÇcc ¿m1z­.R ´åÓ#ækΈÞb¾1ß¶Šè¿b¾pÌ6å\Ô#êr„~K™jå{IžŒ«VÆ•Ýö*‚¶­ÐCo—âŠùfÅ|ßmoÖðÊèÂöiømóÞ øö¬çMôÆèM ·½½Ä|®‰Ðÿ‰&z¿´üã±åއß6¾r]aÛ ÚþGÂö9Éð:| BdõÛŽº|)ÕÈ¥Q¾  ýÃô|Û.Û×7.º†ß¶z¾x¨$ŒùÂèÐöUû‰ŽQ÷QئlS;GÝõÅõ%zi—ÍÅ6Ù¦ º t`›ÎlÓ]:°Mg¶é‚. ô~É.¶éÌ6]° ØNlÓ˜ ¶1Ðó½º ¶tU|˜žïõÒ\lÓ™mº  B¶éÌ6]СÛtf›.èb,Ñëv‰.¶Ì6CÐ¡Û f›!è‚Ðm³Íta ‡Ku±Í`¶‚mÀvb›ñÃñ°Í°¸.ºØЉmÖè=>ú÷è®Øfº t`›Ál3]Œsl3˜m†Ma[ÏÓ–KŒ¶y lóõ“5] ºf› Ýb½Yèi\Zt°Í„n±‰~¥ ËötéÕÁ6Ot“mlÛ zØæ>| â` ½_bv° ¡Û¬Ñü¼þ—à`›§çM¶1=ÿQ]³Í„n±^]³Í„n±uù ãÛf› è"œc›Àl]„sl˜m‚ ‹pŽm³X&ÏÛ„&ˆ‡m²̈́þn¢Û„sl˜m‚ ‹pŽm³Ð :°M`¶ ‚.¢5{P=TˆÌ6QСÛDf›(6ZÝÄæéežèv¾‹õw²ò=þ0A<ùn —Kõô2„Nù¾Fï›oæäéy;ߣHXB‡|œïBs‚èï‘ó=Š„]®þÇ-\²+ßç{ Kèï‰ó=‰ò€Ð¡ºH\]$Aúæ[z¢Ûl#td;±Múa‚xØf‰F¹ Û:±M:µ*ôô¼Í6IСÛ$f¡5Bt`›Äl“]äum“.ÕÕËdf›,è‚Ðm2³MtAèÀ6™Ù& ºÈ–â%ºz™Ìl“Û€íÄ6ù‡ âaSkT]3'€Nl³FO×NÊÕËdf›,è‚Ðm2³Ð˜!:°Mf¶*¯`j|lS˜mŠ  B¶)Ì6EСÛf›"è¢X=¬m ³ÐבíÄ6å‡ âa›rŽmØfžÃe¸Ø¦0ÛA„lS˜m„¾Ñm ³Mt±T÷…<.ÁÕIÕÛÜп¦:?ÏtAèÀ6uÅ6·àürDoŒlS ¶I£ú.–è?ÂM@ïa›j°M®m/hûwîצ¶×áKÛè÷Wºb›Ï-`¯ÃMtb›5zÚw.D×ðol·Fžÿ(ŒlS ¶I™Ñ+£Û˜jÞŽ1£‹µº/5Ÿâ%4f¡æEt`›Æl#Ô¼ˆlÓ˜m„šw~…d›Æl#Ô¼d;±Í®§ ï¨y-ôl+^^ØЉmÖèµ^†‹m³Pó":°Mc¶j^D¶iÌ6BÍú9¶éÌ6BÍ‹èÀ6ÙF¨yئ3Û5ïÝÏ6ÙF¨yÉvb›]OÞQóZè^¶tb›~Žm:³Pó":°Mg¶j^D¶éÌ6BÍÖê¾›îÂÅ6ƒÙF¨yØf0Û=íý _>w–a¾Îw¡§%Û)ßwEkxGOk¡ow½ å; S¾Zâxé®|œïBO‹èïƒó]èiò}p¾ =m<§§æ{zÚxNO7Ì÷(ô´ˆ®«‹¸au…ž6ÊÆkÂ{æiã†l…ž6þ©žö•mâ®hïèiãŸëig¶!t`›xNO7d›(ô´ñœž6nÈ6Qèiã9=mÜm¢ÐÓÆ°®*Ó¥yª‹˜m„žÑm³ÐÓ":°M`¶zÚ5ú¾¸æic`¶zZ²ØfW´Æwô´úvižÚ†Ð‰mÖèåPžÚ&f¡§Et`›Àl#ô´ˆlÃgyE¡§ñÛDf¡§Et`›Èl]Äsl™m„šwîg›Èl#Ô¼d;±Í®§ï¨y-t/Û:±M<Ç6‘ÙF¨yØ&2Û5/¢Ûð rQ¨yãZÝ—ºoæ$&f¡æEt`›Äl#Ô¼ˆl“˜m„šwþ9yá™·‰‰ÙF¨yÉvb›]OßQóZèÅ7oCèÄ6kôºùæicb¶j^D¶IÌ6BÍ‹èÀ6|r`jÞh¨:«sÞ&3Û5/¢Ûdf¡§5Ð?µž|ÏœïBOK¶S¾ïŠÖøŽž6zÚxß'Eùè”ïçô´1s¾ =m<§§™ó]èiã9=mä3eÆk–Ø×MŠÖ­¥ÇùuQhJ-ô|É®¹JKSšvu_šR²}qi(߆/A<·F/ÃYÏ:eÜý6OëúšҭGôüGatÈ8KSº•Žè•Ñ!ã,MéóÌÆ(4äq­1«Áwjb¬œqBWi£WWÆUÎ8¡«$Û)ãvec|GWi ßvãº2Ð)ã까«œqBW‰èq•3Nè*2ŽOIBG Uº WÆ5Î8¡-´Ð‹ó×8ã„¶l§ŒÛÕ}ñm¡…¾Ù{B_2Ð)ãÚ¹ŒkœqB[ˆèq3Nh 2®qÆ -q\k¼;bçŒú:½lÎo\çŒú:²2nW¸Åwôuºsï¡SÆukŽÚµw vÎ8¡¯CtȸÎ'ôuˆ×9ㄞ6šj×)+qpÆ …›^\78ã„Âl§ŒÛ5fñ…›~íã|U% SÆ ‹ç]'FÆÁ'nˆ78ã„ Ñ!ãgœÐ”¦mïÑ÷Kf\*/ ýq*2d\Ú0ã’Py‘íqi×Y¥wT^z¾o¡CÆè¥øNIf\*/D×—6̸$T^ˆ®3.™*¯ÂQW¿îi{_Õ™gœP:%óäÀäѤÀ'”NéOOº7ã"gœPûí”q»Þ&½£ö!Û)ã2.žË¸È'Ô>ˆ9ã„ÚÑ!ã"gœP÷¥t.ãgœP¼XèÞŒKœqBñB¶SÆíš“ôŽâ…l§Œtʸt.ãgœP¼ :d\⌊D‡ŒKœqBá–òº›è¾Õ”9ã„æÄ@O›ï<ê”9ã„æ„l§ŒÛUé͉…^|«„N·F/ÁÙÇeÎ8¡9AtȸÌ'4'ˆ—9ã„æ$­×ß[õiNkN’МØè®õ¸Äš“$4'd;eÜ®úHïhN,ôIÁ.3Ð)ãÎiNkN’М¤sš“Äš“$4'éœæ$±æ$ ÍI²Ï5rekN’МXè÷ÿ‚Çš“$4'd;eÜ®úHïhN ôØžè2ã2®Z<Ÿ\Çš“$4'ˆÇš“$4'ˆÇš“$4'©Ë8Öœ$¡9±Ð½Çš“$4'd;eÜ®úHïhN twÆ:e\;—q¬9IBs‚èq¬9IBs‚èq¬9IBs’Ö§*yOO¬9IBsb¡WßÉÿ‰5'IhNÈvʸ]õ‘ÞÑœ¬Ñ?OÇžŒtʸ5ºwï@bÍIšD‡ŒcÍIšD‡ŒcÍIš“´>×È{vbÍIš =83Ž5'IhNÈvʸ]õ‘ÞÑœ¬Ñýè”qktïyÔ‰5'IhN2Ž5'IhN2Ž5'IhNò¹s²¥9©ã±C- ÍI6oêüm#FßÉÀ9rÆ Í‰…~_àÅŒ‹œqBsB¶SÆíªüŽæÄ@ã‰.3Ð)ã¢5Cîš9É‘3NhN2.rÆ Í ¢CÆEÎ8¡9ÉÉzï›+ãgœÐœè1|Ý:‡—8ã„æ„l§ŒÛUù͉…^ï*nÊ8@§Œ[£_{×Þœ8ã„æÑ!ãgœÐœ :d\⌚“|œ9ã„æÄF/®ª2sÆ ÍÉýgÜ.ÅUUîªüŽæÄBOOôo¾ 7Ñ)ãÎs’3gœÐœäsçœäÌ'4'ùÜ9'9sÆ ÍI.§Vrጚ Ý›q…3NhNÈvʸ]õ‘ßÑœä?¿;ïåè”qå\ÆÎ8¡9AtȸÂ'4'ˆW8ã„æ$×S«¹rÆ Í‰…œW9ã„æ„l§ŒÛUùÍÉÝŸq€NWO­äÊ'4'ˆW9ã„æÑ!ã*gœÐœävn®ÒÒœÔþ8»/ ͉…ž.ݳ—MÍɾ˜…æ„l_d\߆/A<g ;ï t™q–íþÙÂfÅü×våùÊèó†êck£á{Ï_šžE×ê}}^e¶n1Ûžò}p¾ Õ¢C¾Î÷!Ö¸?.µ‹+ßç»P:QÌS¾ïZ£<ÞÈ÷²Yß8× ìeÃ|/bõÑu¾— ó½½~åy×÷½l˜ï&ú‡‰îý¾— ó½Í ¢ë|/æ{šD×ù^6Ìwý·ó%\Š'ߟèf¾¡³¢˜‡|/»Ò©lïä;ém²k¸Êw¡=(çÔ>%p¾ µO±OY ž|œïA$ì9ÅK œïBñRÎ)^Jà|Š—rNñRç{ k¼÷xßNù8ß…Ê«ü¹Êë%ßwU ïä{<—ï‘ó](ʹómJä|Z£Ïå{ä|"aÏñR"ç»ÐÛ”sg¼”Èù.ô6åÜ/%r¾G‘°ñ\¾GÎw¡1+ñ\¾ï*¯ßÉ÷ʇì®ò]è.ò=q¾ ¥“ž]õ|â|O"aÓ©•Ð’8ß…ÚÑ!ßç»Pû :ä{â|O"aÍ÷^]ùž8ß…Âbžò}ט•ôN¾'8ïÊ,™ó]¨>ò=s¾ U1OYñõï™ó=‹„Íçú÷Ìù.´Fˆùž9ß…ÖÑ!ß3ç{ k¼÷z ®þ=s¾ }Å<åû®p+ù|'Uv Wù.4'åœÊ«Îw¡ò*åÜ÷½p¾‘°ç”N¥p¾ ¥S9§t*…ó](Ê9¥S)œïE$¬ùÞ£ëû^8ß…º¯ü¹ºï%ßw}])ïä;©¼²k¸Êw¡x)ç4f¥r¾ Y15f¾|¯œïU$ì9U©œïBgUÎé¬Jå|:«rNgU*ç{ [Ïå{å|ÚÂòçÚ—|ßÕ}åµ…ÝõÊ máø:Õ3®qÆ ™…Þ¾È 3ÎÔ˜íjŸ"4fz¼x¼òü¿ _‚84fäùU<µoÃMtPuèîêÂ:רð{ÿ(Œlà ·"nˆl³T¸}Ò ¢ßR¦[\çË8Ö˜¡13ÐÓ¸WÆ™³ Ño)¶SÆíZ£òιFz^Ÿý-ã2Îd;eÜ®ö)ïœkd¡{3Ð)ãÆ¹ŒœqBá†èq¬p+Bá†èqƒ3Nè*ë¹s*묪ÐYUól—®²n˜qUèm꟟k4g\Ýõ6õs,ôþDWGèqõܹFuÃŒ«BcVÏkTYcV…Ƭž;רn˜qU(ë9¥Se¥SJ§Îe\àŒŠ—ÎeÜ®x©ïœkd¡{3Ð)ãΩ¼jàŒ*¯zNåUYåU…Ê«žSyÕÀ'´…u}ÆK­—îY‹¬¬5ªBkd¡gÆEÎ8¡9!Û)ãvÍI}ç\# =Ýõ6”q€N·FïõÒ<ë°5rÆ ¢CƱΪ ¢CÆEÎ8¡î«çÔ>•Õ>U¨}ê9µOMœqBõQÿ\õñ’q»ê£¾s®‘…>œß8@§Œ;§tª‰3N(ê9¥Se¥SJ§zNéTgœÐ×Õ|j=®²Þ¦ ½…î\«™3Nè.Èvʸ]wQß9×hnžý-ã2.ŸZ‹¬™3Nh2޵FUh2.sÆ …[=§x©¬x©Bñb¡{3ÎT¼ÄDè·”)ç2nW>ÔwÎ5ªåÏ3®~n¢ÿÖ‰º¾Ý&Gß¹ÕÒ]ä'× åƒ…ž}ÊÆj*j&ôÛ‹Ûé½ï+àõÓu ô4Ö·~{ï€NLkÜ'U|ªÎjž®“ð½TF®3u­á{¿ºŽÎ·˜oóB{PÛ¹9«Æ1/´õÏÏ·y‰ù}õ¿¾£= Û)æbžN˜‰®á*æÅê=w¾Mmóâ|›º>mãy6Ä|瘫ÿzv~ß;ǼXý'Û)æ÷õ÷úÎê¿~; ÛÅó€N1oœ²â< »vŽy±þŽèóc¾‹ ¥{… æǼX¯ã\M;8æÅú{ýã{…^c~_¯ï¬¿Wû^¡ì‰y@§˜?w¯Pób¼ž»Ù§ŽùamÛNÅ|Û0æ›X·Ð1ßì›}*¡_ƒ–l‡˜oût{g|îŽyB‡>®-פn{…\ß÷fwÛã”ÔÄðõ^à8îóó„=Šá˹ʴ5§íÖ^à–vt1OÛŒ³ÇIà0kÔÌØ÷ó*›˜³jå:Ÿ ÜļM34ä%^\ùnöï»~¾‰½­ž³÷Hôf­Œ¸f ›uGjî]Mt‘m}Sg(ùâ9ó¡™uÞ£NTVm]]\áûÅ“qVe·=êÄ9fkôPÚeļo¢-Ï1ûÜß ý¯zé ·™ÒnhÌBª˜ïÖ7î_áÒ—<CüŠ–ëOlôiøåú?¶?¢®1|Éóq‹—áBzj»íQ Okôû•¿ˆž=‰áëý°#|+‹è™Ñ³^Ö=l½l.ôb¡ïÝD/b¸qúpÚ^-ô¾Û^Åðfé.‚ ½1zÃ×=lmΘïŒ.4ä}Xóu.µO_jÈ?/ }ÔóÝäºf¢o_÷ù^"ÐÛŒÞ^ÐcJˆÞÙö.ÐûŒÞgð"Ûþ‹Ñ ô_3ú¯×ê" B¿6¡}Xëq_kÐÃv£‡ ) ç?*£ë¶[·ÓÖ˜Ñóå26ð¼ÚZø~ìö¶¿÷!­ˆ®3nXò¾ïÊ´Ñ;£ë˜ŸÐ_b>Tý£ë˜ŸÐ_c¾'ôü5hÇv*懥âƒÑ+£ë˜ÆY!ö|þê”çuE=¬þ½n;ºP2#:d\XgÜÖcGôÊèq–†¼ŒèÑ!ã‚‘q¹&Dÿ›ÑÿèÏè¿Æ|ˆþ‹Ñ!߃‘ïÏß6œË÷Àù.T܈ùnœÕBÇŒû­ò½zÎöæYuxòÝÐÓ¶¯þ ó=ùÞân»ÐÓ":以`oO¶‰"a ò=ù·Šè¿2.rƉ³:‡Ñ¿§Ë×ô>eœ¡![BÏTF‡Œ³TÜakèùkЦs1Ÿ8æ…¢Ñ!æÇ|A›ÎÅ|â˜O"hÓ¹˜Oóâ¼Ê‘ÎÅ|â˜:jD‡˜OóI”…뵉²ÝïD¦ªryjâ ½ï_™l·ÿˆ®g&ôö:y°¯ØèÑ!æ3ÎØèwýâýgÈݧ«Åòü3êŠxxBÛËÚöØžù^ÄïW…nµžÕÀajJŸ5­Pu":ð|µx>D¯V7ñœ=¨¢ tè&ªÕMllû/Fž¯æìA"ôßVÔ}î+žŠº«Bô[ЮW?™Þó–¦´”]¨:b¾­bþKt‚èÑ!æwÐM-¡CÌ·u̇+Û!ú/F‡˜o†ù>8߇Èw°ý¸åÇmîÛð%ˆ'ßMÛ›ÕM´ôm¸‰Nù>¬ùùàš%œïC$,¡C¾+ßç ôÊèïƒó]h‰Ã¦õuïÁÒ﷜ܲNXD×ùÌ“…£7F×sº5w„š×Do_j`›`©ysFô ݽðd!^]g\0î‡ )7D¯Œ®3.ØçeB¿6àzÜîgóBÿþD?ôïé±] gF×*î`©¸kFÛÿ*˜q‹ó’Jÿ6| B߸Y­¯#® ÌuBCŽèÀu¹NhȸŽ5äAhȃ­âvq]`® ‚¬Îé¨C`®:êpNGsÐQ‡s:ê˜ë„ŽÚ@á’]\˜ë‚ +B® Ìubçeqݾw „w¸.j}q]d®rD®‹ÌuBCŽèÀu¬!BCn¡ÿ¬—îáºÈ\YÓQ‡È\'tÔᜎ:Dæ:¡£çtÔ!2× µñÞoûã\\™ë¢ +B®‹Ìubçeqݾw Äw¸îœ†<$æ:¡!ç4ä!1× y8§!¬!BCn¡{¹.1×%AVçtÔ!1× u8§£‰¹Nè¨Ã9uHÌuBGÒ9®KÌuIU:Çu‰¹Nì\é×í{Bz‡ëÎiÈCf®òpNC2sЇsòÀò 4äúÏàãºÌ\—YÓQ‡Ì\'tÔᜎ:dæ:¡£çtÔ!3× µñÞÝ\—™ë² «|Žë2sعþtçÂëö½!¿Ãu¦¦4¸Ö& sÐ#:p]a®rD®c yr½xt•¡0×AVúCÁN\W˜ë„ŽÑë sÐQ#:p]a®:j =]ŠG[ s]dEèÀu…¹Nì\ Œ#®Û÷„ò×­O ½]ïÑ]„Ê\'4äˆ\W™ë„†ÑëXC„†Ü@ÿ¼IÌÃu•¹® ²2Ô¼ñòu$q]e®:jD®«ÌuBGèÀu•¹Nè¨ ô˜ïç×Uæº*ÈŠÐë*sع`¡‡Kª®Û÷„ú×­­^MihÌuBCŽèÀu¹NhÈ ôP._tAlÓ˜mš  Ãv§®24f¡£Ft`›Æl#tÔˆlÓ˜mšHX}+ž|oœïbïÅ<åû®Þ¼wà´}Ý¿§ûÞ@Šyótܶ3mAÛA_1oh‰·ž#¢F‡˜_j‰?ëlˆ^bÞÒ‡Ç /6úíi¼÷íR]3'ÝøÂæÇ /=›èõòùÑÂŒ³NE®mÿË~÷S?_¾ _‚x2nœË¸Á7DÊœSó†Á'Լ᜚7 Î8¡æ çÔ¼apÆ ‘2ã\Æ Î¸!RfœË¸Á'ôóaœË¸]ÁÆ·S7̸(Ô¼q;•qqÃŒ‹BÍ‹è:ãↅšÑuÆÅ 3. 5¯õÞ7̸(Ô¼º3ãↅš×ò¼3ãâ®æ¬æý×õõXúºû}‘úò}ø·[Èó¾S)Š3Zã¹ó¨£¥%.ûž‘(´ÄñÜyÔq©%þ|AŒÞ]ŸÁñ~XýF•p6/1m0™¶ú‡‰žÆ%ÓZZâ0ênTIèÀ´––øJôˆ^˜ÖÒo£ú* 5¯sßD4µÄ£îwft`ZKK\2¢ÿU0ãLÚ·áKÓÚÂkƹ˜62ÓŠbã¹Ó°cd¦Jæxî4ì™i£ JB¦Ì´BÉ“»“i#3­P2èn¦Ì´BÉŒèÀ´‘™V(™˜62Ó %³îݵ#3­P2#:0md¦Jæø§g°˜vW2ÇøÓ®µ…£\Jõ0mb¦çÓè?F¾xÎlŒ‰™V記61Ó&A•„L›˜i…ŽÚ~ïÙsò@LÌ´BG½F¡Þщi3­ÐQ#:0mb¦:jD¦MÌ´BGm½÷x©ž5蘘i…ŽÑi3­ÐQSÆÓî:ê˜ÞaÚ¥²1Ô|Ÿ¯#¦ÍÌ´âtÜ5úÐ|jŸ˜™i…ŠÑi33mTIèÀ´™™V¨¸÷޲˜™i…ŠÛ@Ïñ~‡1mf¦*nD¦ÍÌ´BÅèÀ´™™V¨¸­÷~­*]L›™i…ŠÑi33­PqSÆÓî*î˜ßaÚbÍ×%×ìAa¦gó®Ñx÷ÆÂL+4äˆL[˜i‹ JB¦-Ì´BCn ïw¤ÓfZ¡!7¢Î={P˜i…†Ñi 3­Ð#:0ma¦rë½;÷ËÄÂL+4äˆL[˜i…†œ2Ž˜v×ÇòÓÖ5Ó^mw1me¦'ÇjÙîÚ™+3­P°#:0me¦­‚* ˜¶2Ó »þ38™¶2Ó »u9Ýï!¦­Ì´BÁŽèÀ´•™V(ؘ¶2Ó »õÞ½L[™i…‚Ñi+3­P°SÆÓî öXßaZãLæ~×ÓÓ6fZq&³…Þî·Ó6fZ¡ŸGt`ÚÆLÛU:0mc¦ê}û½Ïðؘi…z?Ú''Ó6fZ¡ÞGt`ÚÆL+ÔûˆLÛ˜i…zßB¯»´€ësPïSÌ×íêýØÞá:ã<êqùÄÎ\'vm :p]g®»6¸®3׉}Ñ<þKWI\×™ëľ Šyâº}ßDìïpݰпfNˆës8‹ÛBwƒ¹Nœ½èÀuƒ¹n²"tàºÁ\'Nþ7Ðo»2³‡ësØ/cÙž/ó<šûeFݬ¸n0׉ý2ˆ\7˜ëÄŽ ݹ+3æ:±c…bž¸nß±Ç\—6Ëv—Ö(m×¥úر’6›¬ÖèWøâÒ%ëÞœ½2ºæºdÝ;P¢_éBxÞ3_—–{…¾\Oè&z|èçm’µW¨mhû•.]³M2÷ mÑ+£k¶IÆ^¡­ï<ŸÄ^!ë½'ŸÚ'™'ÿÇ€è™Ñ5×%s¯PDÛÿ*˜qÇÛm>·¶¾ñp]°æi£ge$æ:±W(ê}çJ)0׉½Bˆ\˜ëÄnáyÞ&æ:±[Dz=úNML¹NìÖAtàºÀ\'vë :p]`®»u¬÷îÜ™sØ­c¡×Kð¬M¤À\'vëXžOãÖu]ÍõÛð%ˆ‡ëâ9®‹Ìub·NŠç¸.2׉Ý:ˆ\™ëÄ~áy×Eæ:±_ƲÝËu‘¹Nì—AtàºÈ\'öË :p]d®ûe¬÷îåºÈ\'öËXè^®‹Ìub¿Œåy/×íûeÒ;ûeR:Çu‰¹Nì—Ié×%æ:±_Ñësر"<ïâºÄ\'v¬X¶{¹.1׉+ˆ\—˜ëÄŽD®KÌubÇŠõÞ½\—˜ëÄŽ ÝËu‰¹NìX±<ïåº}ÇJzgÇJZŸ‚îÕQ'{ÇÊžqbÇJ2Ow験µcåvˆ^¸Îºwàybd{F ôŸõ®t"®3÷Œ¤Dèúí¦¯õwâºÌ\'öŒ :p]¶¸n?51‰=#ˆ\—-®ËèùßfÌ{nÉÚµ‘{Á˜Ÿ]w •Ò»ø’TÌ\šèÂØµáÔ§Âl#vm$SGíÒ§Âl#vm :°Ma¶û& ôŸÁÉ6…ÙFì›0Þ{—æb›Âl#öM :°Ma¶û&ئ0Ûˆ éÜÎ…T˜mÄΊù% }¾ñÔ6¦‚Ýu–W²v.¤¼W•b炉î;Ë+Uf±sÑm¬³÷kFô]T«ª¬.¶1÷„Nè&º»¶±öÔV½0:°M5û8ŒºÊèÀ6•ÙF¨÷ tïyVÉRïçQ0æ Æü‚mZü6| âa›vnÖ¨1ÛõþÝ?kÔ˜m„zÑm³ÐÏÛž.¶iÌ6B?oÙîê}b›Æl#ôóˆlÓ˜m„~Ñm³ÐÏ[ïÝ;oÓ˜m„~žbžØf×ϧwôó©Ÿc›Îl#ôó©Ÿc›Îl#ôóˆlÓ™m„‚Ýö¼m:³P°[¶{Ù¦3Û;¢Ûtf¡`Gt`›Îl#쩟c›Îl#쩟c›]ÁžÞQ°§qŽm³P°§qŽm³P°#:°Í`¶rÛó>¶Ì6BCnÙîe›Ál#4äˆl3˜m„†Ñm³Ð§qŽm³Ð§qŽmv yzGCž·SkRyC¶ÉBC¾Fw¯Iå Ù& 9¢k¶É²MrÝ»&•7d›,4äÆ{÷ÎÛä Ù& 9¢k¶É²MrD×l“7d›,TÜÖ{wÎç Ù& 7Å<°MÞUÜùw§Ö¤r`¶*î5º{M*f¡âFt`›Àl#TÜ9œZ“ÊÙF¨¸÷î]“ÊÙF¨¸Ø&0Û7¢Ûf¡£¶Þ»—m³ÐQSÌÛì:êüŽŽ:ÇSkRÙÒQDZǼÐQ›è¾5©l騷Ìè•Ñm"³ÐQçh®IyNȦŽ:Bÿ0ѯß÷îbKG]è…ÑmŒ{®™€è•Ñm–:ê/|Bÿmż{M*[Jæ¼ë*³P2SÌ/Ø&µo× ¶1´…Î;Vrb¶Jf ÝyÇJNÌ6BÉŒèÀ6‰ÙF(™×è·×îc›Äl#”̺›m³P2#:°Mb¶JfD¶IÌ6BKl {ïɉÙFh‰)æ‰mv-q~GKœ×ÊÆî÷Ûdf¡%6дqé¶ÉÌ6BKŒèÀ6™ÙFh‰mÏIЉm2³Ð¯ÑÃö¸ñØ&3Û-1¢Ûdf¡%Ft`›Ìl#´ÄÆ{osˆm2³SÌÛì'ÀçwN€ÏçN€Ï…ÙFh‰ó¹àsa¶Zâ|îø\˜m„–8›g°WmS˜m„–ØxïîÚ¦0Û-1¢Ûf¡%Ft`›Âl#´Äùœ–8f¡%Î| ú+ÛìZâüŽ–8Ÿ;=Wf¡%ÎçNAÏ•ÙFh‰ó¹SÐ3k‰³ÐgSÅíc›Êl#´ÄÆ{¿Ý/ãb›Êl#´ÄˆlS™m„–Ñm*³Ðçs'çÊl#´ÄùOe›]KœßÑçvn–¸™l³GЛèÎYbSK¢WF¶a-qZâ5úç,qõ°¥%ŽÏµ ¡%6Ðݵ¥%. =£‹v®¶iÌ6BKŒèÀ6––¸ |ï¿­˜÷Ï[Zâ4Æ|Á˜_°Mè߆/A§%΃ÙFh‰ó9-qÌ6BKœÏi‰3k‰³ÐÛž÷±Í`¶ZbËv/Û f¡%Ft`›Ál#´Äˆl3˜m„–8ŸÓçÁl#´Ä–í^¶ÙµÄù-qÙN±MÙmŠÐ—íÛ” Ù¦-1¢k¶)¬%.BKl{ÞÅ6eC¶)BKlÙîd›²!Û¡%FtÍ6eC¶)BKŒèšmʆlS„–ØzïN¶)²MZbËv'Û”]K\ÞÑ—pjMªf¡%.áÔšT Ì6BKŒèÀ6¬%.BKl ÿ|Ü;@l˜m„–ØxïÞy›˜m„–Ñm³Ð#:°M`¶ZârNK\³ÐSÌÛìZâòŽ–¸Äsl™m„–xîg›Èl#´ÄˆlÃZâ"´Äº›m"³Ð—sZâ™m„–¸œÓÖ¡%.ç´Ä%2Û-±õÞ½l™m„–˜bžØf×—w´Ä%Z/‰ÙFh‰×èîð’˜m„–ÑmXK\„–¸$sÜÅ6‰ÙFh‰÷î]/‰ÙFh‰؆µÄEh‰Ø&1Û-±õÞ½l“˜m„–˜bžØf×—w´Äe­«¬õR=w&–Ìl#´Äz—æ¹3±df¡%Ft`Ö¡%¶Ñ“GK\2³Ðè9_>€D¶ÉÌ6BKŒèÀ6¬%.BKŒèÀ6™ÙFh‰­÷ޯýM±´Ä)uD¯ŒlÃZâ"´ÄÅTqÏÅ:—8î÷„¡%6ÐÓõ ëÙ¹P,-q)Ñ £Û˜Zâ ßûGet`ó\âˆïý·ón½M1µÄûô"´Äó+¶ ߆/A•Õ>U¨}ê9µOeµOjŸÚÏU•£N¨>j?W×íªÚßáySñÒ]<èÄó†Úǹû¾vÎ8¡5BtȸΧbÞXý/—áªm ÍIØê^U ½M³n§­—âÈ÷¶\¿Á÷ǬQ3W;£wÞgô>ƒ§°ÛÞÄ*p3îD¾~âªcÀ!9l¿ºn¹6q}Y—=žìù \GèàùÀž+búh—¯‰ò|`Ï+ôxî½G }{|eš˜!GtÍ6-lRDôëóÄù’Çöå|Ý=îs•M̶|ÝØ rÌ4±¹•sèÆÞÀ°íúº&ö":¼÷b½÷gÔ‰}‘­ž³½Z¶ï_Ø&z™ÖÎ}eÌÓï÷»6šYÓ6ýgÝ._“N5Þfôöòû¼ÞÙv`Úf0m®‰Ðo/®{ïÍzï){лõ•Ù\LkhÈCI»íBÁÞL=í'K ú`tQYu£ºˆ—æ™1놶ðJ´¦í›´ˆ®c~BùgÔuQ×!ºŽùnÔu¹”Jè×g çrïãà½÷ ¿2]ÔuÝÖ˜y¸®[*¯–µM*/D×ÝDV71"¢wF‡÷nT•9:ЯÏÙniNzÛc^èmz:÷Þ­ðœ÷÷.VÀl·VÀ[ìˆ~}xs50yNÛ虹. ²"tàºÌ\—EÐ:Ä|6b>8l¿ºÎº7p\²Çó…=/ªÊn×´.¦-Ì´¢¢Ft]Qwã´PvíAg¼ôº®mâ¥{îÂîÖšTʪ‹5) ½Þ×ßa®²›7¸åBè··^ 9\¬9êV¢ÿbô_ý׌þëÕô}¶pˆ^f¬çiË•ë\ï=ð{ê}D‡÷ø½‹^Ñá½~ïA¼8B‡÷ø½‹J#®£.ß÷Ò{·öÔ¶£‹Nj¤5zr¢'F½Ì0Îl,—èBÏŒ.êù±¬i¯e§í…ÑÅ©‰ÃPû<ôu„^]Ìue5êu˜Ýš%ŽmÏ8¡|ë¹Ê^.Í…Îʇ!Îúæ*ð}UH×6êmÂþ}¢º@t]]ŒÔ°«‹¸{BkñœÕ¹·WBï?Y~& ôPó#æåWfF?(ØCAôÊ貞ŸÑsV•Þ]ΜÌ臕‘½ó{—_Øýð…­Ñ±íò ;£ÿúSÏD ýÊó_‹‰:ß'ôo½ FÝGet™ï3úk¾§Ç™Ì6úïdz>Þ™öwR¥4¡ÿN‡.’Ñ3£K÷Œþª‡j™ˆºëð`­MlÃÃuVEŸ¶AV„\ ®ëµ!zetà:kzÑ;£Û,ëùÏ(ˆþ‹ÑmÌz~CÏßè"˜³æakÿûu•Ñm‚¥|ˆƒÐÛWï3f”ïÖmV-pÌç/Ỷ|œïQ$l<—ï‘ó=Š„çò=r¾G‘°ñ\¾GÎ÷(6žË÷ÈùEÂÆsù9ߣHØx.ß#ç{ Ïå{ä|"aÓ¹|·ç.öª2‰„Mçò=ùÞrAôÊèïæt­ˆÞò=-óýSh…è¿ò=™ùŽïý–°é\¾'³›Hˆ^ò=Yëq=ÿÛÎ8o¾[7:•޶ß6ŸË÷L³F÷Ÿ ›Ïå{6ò½Öè•Ñ!ß3iNzgtÈwCwñÔUÚè·”Éç2κS©¥ˆè•Ñ!ãŒ[Bˆ…ÐÛ1ïÍ8sÿ{GÏßRÆR¼83®pÆ‘2„W8ãŠHB‡Œ+œqE¤ ¡CÆθ"Rf­öÉñ²¹2®pÆ‘2„W8ãŠHCé´]’+ã g\)cìƒN—ìʸÊWEÊ:d\匫"e2®rÆU‘2„W9ãªH™z.ã*g\)SÏe\匫"eª¥³®Œ«œqU¤L;WUâ~™ûOŒ”!tȸfé. £WF‡ŒkœqM¤ ¡CÆ5θ&R¦«*­“j«ˆ^2κáe´ý·óÞªÒ¼áÅu×áÆ+Ù¥Þ߇Wïo;×u6„Q×9êºxxcõ¿=­`»u箳ºÿÄxxBÛÇÚö8zAôÃz¯Pò)ÜöáÂö Öß]¯¿cý}zïA¬E†`U•Åó!°íb=Ñõ{–¾nß©$Я¿œ%Ž×Œ+Éc»µ.3öÚ&ˆ•D×߸`¬Œ„§î"ˆ•DÏǵçsÚççƒXAt=S¬•‘ýú‰4Ðo 7‡†|B·tV½2ºþ†H:+áùÃZW9Æý>h¨ë‚µ:0žèbuÑ!æ­Õþ8qB wF‡˜OÛŒ„è·°Y¢ÇX\7°Oè¯u]Øö:ˆùyD‡¨K¨ö b†<¬õ´c»l.¦ÍXY1CŽèóÖ yß»‰ fÈbÞœ!Ñ;£CÌgó [ý£ÏgkE,á{¿¥L^eꥹ2ΚŸï™Ñ+£CÆ™óó…ßû5eʹŒ+œqb†Ñ!ã gœ˜!GtȸÂ'fÈ2®pÆ‘2å\ÆÎ81?¿F¿6ž—êʸÂ'æç2®pÆ©˜¯çb¾âŒY³ÄˆQdzÄ6ú/F‡¨««¨ûL9´ý6õÏ›sÔ9#zetˆ:ëöÑ zþÚþ·5ú5æ»göÀ:×hzïb¦Ñ!êWÔM<¼9cöå:²½³íb¾ÑÁöζwñðÆ ­ûY`û`ÛÅ|¢ƒíƒmóuÑ:1Òµ;onŸwqÿÉÚuˆ®=­ý2ißµÅ~Dמ֩JÁaûÕuëùºèÛºÿ¾xWóF1[ˆè`{ÀYâ(f cž³Ý˜¯‹½WD¿>üzö ×Kõì΋‰3NÌÛ :Øž8æ…ªÑumMUçãD)~uݺƒníÒ\ž·fNÊãtûOÖE)¢ëš6fœ-ŒbîÑá½güÊD1wèðÞ­¹‹gEÿ×½Lz(è½~Atxï…ß»è Þ{á÷.:hD‡÷^ø½ UüÞMÜØT‡k6Vþ ¢Ã{gU=,¢Ã{ç6ŠÑá½W~ïBíÛ¹÷Þø½ µ¢Ã{oüÞE›5o“\ù¾ì"_vmØè¿Øvxï߻Мľ^—‰—èâùÎkGèðÞ;¿wÑA#:¼÷ÎkGèðÞ;¿weû°ªÊ¯5²Ýè kè;úOè`ûXÛRNˆžcÚÖ_Øp?³b>Yý{ˆÚ&‰ѵçwÐIœ8èÚóÉ:qb F¿º.X:+—¦4ö¼èß<Øób÷=¢ƒç{^Ì$ã4­z¿ÍŠ ­¢Ã{7waï:ê$fNÒzgbé÷»óè½'ü¾'1{Ö=lÞçÓzftÑæõŽ•žï;V½0ºè¤’¹w ¹Ð¹“J¢žOíœç¹žO¢ªL뵉Öï7y:W•Ih‰ÓúœÒ6.Õ£§Mµɪ.þb^Ÿí³=î Ô·ÓîÿÝN›wíA_X =>nòÒ¶ç mÏâ$1D×ʇ¼xB?Þ·×´YœáF¶/N4ˆùÛð%}"?LôT.ÉqËÉdûádมç?*£ë5è¼<Ëk¾WÈFÿ×ýš×=˜–2.pƉÊÊ@¿VÔ›+ãgœ8Ï Ñ!ãg\)³®iCJ_÷ QÆÎ8q’ÙN~˜ žŒ[£‡|É®Œ œqâ<+D‡Œ œqA¤ŒqºNº÷2”q‘3NÔ´Ù¸ceÜO¤Œ‹œqbߢCÆEθ(RÆð|h¾o\äŒ}ÙN˜ žŒ[£§ö81Ò7\eœØ7èq‘3.Š”I–î"»2.qƉ>.§s—8ãÄ® D‡ŒKœqI¤L:—q‰3Nœ¦E¶SÆ¥&ˆ'ãÒ¹ŒKœqbÏ¢CÆ%θ$R&ŸË¸Ì'æ.r>—q¼c%‹=#ˆ—9ã²H™|.ã2gœÐœí”qù‡ âɸ|.ã2gœØ3‚èq™3.‹”YïñR]}\áŒóuz¸WÇ;V²Ø3‚èq…3®ˆ”YŸªtk'¢'ã g\A[ÎÍ]Žy±kÑ!æ Ç|A»Þ¹Ò}=Žb¾rÌ‹Yb =:ç.*Ǽ8×Ñ!æ+Ç|A[͘ož˜¯óBéD¶ÓW¦þ0A<_™jÅ|we\åŒ;V2®rÆU‘2í\Æ5Î8±2b¡{3®qƉs2®qÆ5‘2í\Æ5θ&‚¶‹ùÆ1/Î5BtˆùÆ1ßDЮïÚúý\#ŠùÎ1/Öã,ô‡íó|®‘^b¾sÌw´ÝX“ê¾òÎ1/ôud;}eúÄó•éçêºÎ×EÊôsu]çŒë"eÖ;Ôòc¿ eÜàŒ 7 ½\škö€WÀmôÊèqƒ3nˆ”1ÎòÊ×¼'ãgܶSÆ&ˆ'ã ÛÃýÃ7\eÜ)Cèqƒ3Nè.Êf}ã\u]aÝEº ½ùêºÂº‹"tˆ®3®°î¢ÝE±tÃU×Ö]¡» Û!ãÊ®»(ïè. ô8îè¾á"ãŠÐ] ºÎ¸Âº‹"tÅXƒ®wm!eë.ŠÐ]Xèí\Ǻ‹"tˆǺ‹"tÅÐ]Ü&©=Ǻ‹"td;eÜ®»(ïè.è!åK.÷ý2¾á*ã„îÑ!ãXwQ„µÄ¡Üu•”q¬»(Bwa¡×»æ„2ŽuEè.2ŽuEè.ÖèŸç©* ë.ŠÐ]í”q»î¢¼£»0ÐSº4×7ŽuEè.2ŽuEè.J:—q¬»(Bwa¡{3ŽuEè.2ŽuEè.ÖèþŒcÝEº ²2n×]”wtº;ãXwQ„îÑ!ãXwQ„î¢dkŽÚWU²î¢Ý……î³F”q¬»(Bwèq¬»(Bw±Fÿš ÷dë.ŠÐ]í”q»î¢¼£»0нs•…uEè.2ŽuEè.J9×DZî¢Ý……^œǺ‹"tˆǺ‹"tkô~weë.ŠÐ]¶§áŒyÖ]¡»@tˆyÖ]¡»(ëÝy·õ8Ïü|aÝEº ½ún|(¬»(Bwèó¬»(BwQ¬û¤ò%ybžu&ú-h×¶_« × yaåCÊD‡˜gåCʇb¬þ{gÈYùP„òÁB÷γò¡å¢C̳ò¡åCif/ãš!gåC§ëíTYµ&ˆ§²j‹³âŸ¯cÝEº D‡ŒcÝEº‹b¬¿ûtÊ8Ö]¡»°Ð륺2ŽuEè.2ŽuEè.J7פ\_Ö]¡» Û)ãvÝEyGwQÎé. ë.ŠÐ]”sº‹Âº‹"te½þ~­*ƒ«®cÝEº =o—èªëXwQ„îÑ!ãXwQ„ÿÉ·k£°î¢ÝÙN·ë.Ê;º =„{Eýá®2Nè.2ŽuEè.êfÍ×¹ªÊʺ‹*tºs÷}eÝEº D×WYwQ…‹\UeeÝEº ²2®îº‹úŽîÂ@ONÝEeÝEº D×WYwQ…sǺ‹*tº7ãXwQ…îÑ!ãXwQ…sǺ‹*td;eÜ®»¨ïè. toUYYwQ…îÑ!ãXwQ…î¢kÐÁ™q¬»¨Bwa¡;gN*ë.ªÐ] :dë.ªÐ]¬Ño§ûÏ yeÝEº ²2n×]Ôwtº÷„™Êº‹*tˆǺ‹*tÕ8÷ _𧫬»¨BwQ3ò%xú¸Êº‹*tˆǺ‹*túíàÏŽ•ʺ‹*td;eÜ®»¨ïè.ê¹ó.*ë.ªÐ]Ôsç]TÖ]T¡»¨ë½ÿq»ßNǺ‹*tÕ8óa83ŽuUè.2ŽuUè. ôÛÆ WÆ±î¢ ÝÙN·ë.ê;º #êòÕtWÆ±î¢ Ý¢CÆ±î¢ ÝE]¯€Çx)®ŒcÝEº }seë.ªÐ] :dë.ªÐ]XèéÒ=úùʺ‹*n·!Û)ãÊÄ“q†îb»Ïø†«ŒªD‡ŒcÕGªjœùpÛ$æÉ8V}T¡úX£ßv*¹Î%®¬ú¨Bõèq¬ú¨Bõa¡Kve«>ª8mƒl§ŒÛOۨQͳ>¾vßø†«ŒšD‡ŒcÍIš“j(¶øµ*DÇš“*4'kôøV<Çš“*4'ˆÇš“*4'z÷›:)ãXsR…æ„l§ŒÛ5'õ͉Š'ãXsR…æÑ!ãXsR…椮•#;ç*—š“Ï¿¿w¡9±Ð“s®ÒÒœ¤Ô½2:dÜRsr»Oj B¿¥Œ^.óc¥šš“˜Ðö‚¶ϸ2â·áKOÆ­U±8ç*—š“ϘdûGetÈ8Ks²í·ÓV¡9©ëû&Rôí«ƒ3NhN ôî5eÜàŒšD‡ŒœqBsb¡§»ç)ãgœÐœí”q»æ¤¾£91з|?1òÃ7\eœÐœ :dÜàŒš“¶Ê¸¶aÆ5¡91ÐoïÝókf\šD××6̸&4'º3ãÚ†ׄæ„l‡Œk»æ¤½£9iÛ©Œkf\šD××6̸&4'ÍX¯>%s œqBsb ÇèÛ#ÖgœÐœ :d\àŒš =;3.pÆ Í ÙN·kNÚ;šÝq3NhN2.pÆ ÍI;wÇJ‹œqBsÒÎݱÒ"gœÐœ´sw¬´È'4'z»$ÏÌI‹œqBsÒþøŽ•׌Û5'íÍI;wÇJ‹œqBsÒÎݱÒ"gœÐœ´sw¬´Ä'4'íÜ+-qÆ ÍI;wÇJKœqBsb¡{3.qÆ ÍIKç2nל´w4'íœæ¤%Î8¡9iç4'-qÆ ÍI;wÇJËœqBsÒÎݱÒ2gœÐœ´sw¬´Ì'4'º7ã2gœÐœ´|.ãvÍI{GsÒÎݱÒ2gœÐœ´sw¬´Ì'4'­Xk®»2[ጚ =øv¤¶Â'4'ˆW8ã„æÄBÏ÷uXʸÂ'Îú0нóó­pÌ Õ¢CÌŽy¡úhÆêºDWÌWŽy¡ú°Ð£s¶°rÌ Õ¢CÌWŽy¡ú°ÐËý.lŠùÊ1/Td;}evÕG{Gõa _c~¸2®rÆ Õ¢CÆUÎ8¡úhí\Æ5Î8¡úhí\Æ5Î8¡ú@tȸÆ'Tº7ãgœ¸cÅ@wÇ|㘺 D‡˜oóBwÑŒõ÷®±î¢ ÝE³µ®˜gÝEº D‡˜gÝEº Ûó¾rÖ]4¡» Ûé+³ë.Ú;º‹vNwÑXwÑ„î¢Ó]4Ö]4¡»hçîXi¬»hBwÑÎݱÒXwфc¥±î¢ Ý……ï§çQÆ±î¢ ÝEûã³>^3n×]´wtíÜ+uMè.Ú¹;Vë.šÐ]ôíTÆuÖ]t¡»°Ð×YwÑ…îÑuÆuÖ]t¡»°Ð×YwÑ…îÂBwf\ßuýÝÅÝqu]è.]g\gÝEº‹¬ÚÆÕIuÖ]t¡»°Ðw¬tÖ]t¡»@tÈ8Ö]t¡»èÆêÿæë¤:ë.ºÐ]í”q»î¢¿£»0l¿½ï©*;ë.ºÐ] :dë.ºÐ]ôõ¹Þ{Ä:ë.ºÐ]Xèγ>:ë.ºÐ] :dë.ºÐ]XèçŸï¬»èBwA¶SÆíº‹þŽîÂ@÷öqu]è.2Žu]è.úZw1†ïüùκ‹.tz½ßvAǺ‹.tˆǺ‹.t¶ç«+ãXwÑ…î‚l§ŒÛuýÝÅÝŸq¬»èBwèq¬»èBwÑó©ùùκ‹.tºs~¾³î¢ Ý¢CÆ±î¢ Ý……כּèBwA¶SÆíº‹þŽîÂ@O×.Ò•q¬»èBwèq¬»èBwÑMÝ…/ãXwхÊ_Æ±î¢ Ý¢CÆ±î¢ ÝE7u¾ŒcÝEg}í”qûYý³> ôèíãXõÑ…êÑ!ãXõÑ…ê£×sǪ.Tº7ãXõÑ…êÑ!ãXõÑ…êÃB÷f«>º¸á¥×suë.ºÐ] :Ä<ë.ºÐ]tc<8cžu]è.,tïl!ë.ºÐ] :Ä<ë.ºÐ]è·ói]1Ϻ‹.NÛ Ûé+³Ÿ¶Ñß9mÃ@÷îÒê¬úèBõèq¬úèBõÑð䜻`ÕGªnÞµ]Ǫ.TˆǪ.T6ºKõÑYõÑ…êƒl§ŒÛUýÕ‡îÎ8V}t¡ú@tÈ8V}t¡úèÆmΓ;«>ºP}tcýÝy2pgÕGªD‡ŒcÕGª ½úN”ê¬úèBõA¶SÆíªþŽêÈ:Ϊ.TˆǪ.Tc½úï=x°êcÕÇ0Öß'V} ¡ú@tqƒUC¨>†©=peÜ`ÕǪ²2nìªñŽêÈ:ïÉÀƒUC¨>]gÜ`ÕǪa¬€7Ÿ–x°êcÕ‡îZƒ¬úBõèq¬úBõa¡wßô`ÕǪ²2nW}ŒwTz,÷Ùƒßp•qBõèq¬úBõ1Ö§mxOMÖ /)ìï]¨>,t穉ÃR}l¹#zetÈ8SõÑ"¡ßRÆ@wžš8LÕGh{AÛã·áKOÆS} ㆗mt|ï•Ñ!ã–ªz˜¿¥ÌzÜ{†ÛHœqBõa {Ïp‰3N¨>2.qÆ Õ‡…î<Ãm$Î8¡ú Û)ãvÕÇxGõa {gNF〉D‡ŒKœqBõ1ò¹ŒËœqBõa »3.sÆ Õ¢CÆeÎ8¡ú°Ð½—9ã„êƒl§ŒÛUãÕ‡îθÌ'Tˆ—9ã„êc”uí<ÃmÎ8¡úX£»Ï·…3N¨>2®pÆ Õ‡…î<ßfÎ8¡ú Û)ãvÕÇxGõa {ç*GጪD‡Œ+œqBõ1ª5Gí:QjTÎ8¡úX£û3®rÆ Õ¢CÆUÎ8¡ú°Ð½W9ãÄYd;eÜ~ÖÇxç¬Ýq•3NhN2®rÆ ÍÉ0Ï»p(5gœÐœXèÎ¥F㌚D‡ŒkœqBs2l僫ªlœqâ¬ÑÎÍ]4Žy¡ú@tˆùÆ1/TÃXwêçG瘪 Ý©Ÿc^¨>b¾sÌ Õ‡…îÔÏÎ1/Td;}evÕÇxGõ1ÌÓ6\§ëŒÎ'Tˆ×9ã„êcœ;ëc Î8¡úçÎúƒ3N¨>ƹ³>ÆàŒªqî¬18ã„êcüùY/·«>Æ;ªqî¬18ã„êcœ;ëc Î8[õ‘¶õê¿óä}¸q÷Ÿ,SÆD÷i‰'t+ãzet™q3º‘q6ú?Ñ@÷ž<0¡['l/h»Î¸Çð%gœe»óäÉv+ãlÛ?*£ËŒ›ÑŒ³Ño)cœùàÛ½WDÊè¾}кqA¤ ¡CÆθ RÆô|ue\àŒ "ãÀvʸðÃñd\8ÓÇM¶ÛDÊ:d\àŒ "e¢UÏû¾q‘3.Š”‰Öìï9ã¢HB‡Œ‹œqQ¤L´æ.|߸ÈEÆí”qñ‡ âÉ8CwáýÆEθ(R†Ð!ãLÕG.„~Ksõß—q‰3.‰”1нUeâŒK"e2.qÆ%‘2†ÞÆ·CmB·3.‰ŒÛ)ãÒÄ“q§T“ívÆ%‘2§T3ºùK"eŒ»6|ûeöá*ã²Hã†ß~™ Ýθ,R†Ð!ã2g\)cÞnãQïOèvÆe‘q`;e\þa‚x2îÔ+“ívÆe‘2§îX™ÑÍŒË"eÖ+àÎý2ûp•qE¤Œ¡9ÎŒ+œqE¤ ¡CÆθ"R¦X3f¾Œ+œqEdØNW~˜ žŒ[Gs¿Ìd»qE¤ ¡CÆθ"Rf}ê‚SÙ¸ÿžqq¯i«H™ªõu”q–ê£ÄŠè•Ñ!ã*g\)c §K‰žŒ3U%¡ím_dÜÖ¾ _‚x2®ž«* ÕG!í•Ñ!ã,ÕGÏèù[Êç]„Ëç™<˜q3®‰”iç2®qÆ5‘2í\Æ5θ&R¦Y7\×8ãšÈ¸v.ãÚÄ“qí\Æ5θ&R¦Ë¸Æ×Dʬïqj‰÷á*ãºH™®õu”q3®‹”!tȸÎ×EÊèí»'ã:g\¶SÆõ&ˆ'ãú¹>®sÆu‘2„×9ãºH™qn®rpÆ ‘2ºw=npÆ ‘2„78ã†H™aÍUf×7npÆ ‘q`;eÜøa‚x2nœûÆ Î¸!RfœûÆ Î8¡9 ëõ÷è\ f\š ÝYU† 3.Í ¢ëŒ ¬9 Bsb{>x2.l˜qAhNÈvȸ°kNÂ;šÝ›qaÃŒ Bs‚è:ㆄæ$«›piNBàŒšý¶&åʸÀ'4'ˆÇš“ 4'6º« 3NhNÈvʸ]sÞÑœèîŒ œqBs‚èq3NhNB<—q‘3NhN twÆEÎ8¡9AtÈ8Öœ¡9±<ß9ã„æ„l§ŒÛ5'áÍIˆç2.rÆ Í ¢CÆEÎ8¡9 éÔ xHœqBs²Fw¯€‡Ä'4'ˆÇš“ 4'z½ÏÌIHœqBsB¶SÆíš“ðŽæÄˆ:ïÌIHœqBs‚èq‰3NhNÂúÔ…/-y2ÎÔœŒ=ê„æÄ@Oá>SJgiNZˆ^2n©9¹ß¡ßRÆ@O÷}R”q–æ¤ÄŒ¶´ýqŸÿpø6| âɸ5zH÷J¾áßWÀ?§å¥í•Ñ!ã2gœÐœó®¯ê‚2ξ_fÏ8¡9±ÐÓ%4OÆYš“òäy¡9AtÈ8SsR¡ßRÆ@¿ÖuÉ“qKÍÉ|V§°½ íúÄÈÇð%ˆ'ãŒÛmÊ¥º¾q†æ$8l¿­qæC½äì‰ùÊ1/Tzl÷oÅ|嘪D‡˜¯óBõa¡_ß{óÄ|嘪²b~W}„wTz®÷3>|ÃUÌ ÝEhëº.Þ÷ÃRÌ7Žy¡»0ÐC¾TWÌ7Žy¡»@tˆùÆ1/t6zqÅ|㘺 ²b~×]„wtº;æ-ÝÅ–Ñö[ЮO¸õï®Ú¦sÌ åCèçj›Î1/”ˆ1ß9æ…òÁF¯®Ú¦sÌ åÙN1¿+Â;ʇÐÏÕ6y^hÂz64gÌŽy¡=0Ðo{Ä\1?8æ…öÑ!æǼÐè©^†+æ-íAÞÚ^ÐvŠù]{ÞÑèî˜óbõ?nVm<µMÜ0æ£Xý7ÐC¼lžÚ&nóQ¬þ#ºŽù¸aÌG±úo¡;k›¸!ÏG±úO¶CÌÇ}õ?¾³úo {k›¸aÌG±þÃ:æó%¹b>pÌ‹õwývß„+æǼXGtˆùÀ1/Öß×è·Ý:¾˜óbýl§˜ß×ßã;ëïzÙî³…¾á*æÅ xŒ§æmb4cþñ…bÜ@÷ÎÛDóÔ…Çí6½2:Ä<¯€G±n¡—Kñ¬ÄhÖ6m/h;ì‹û x|gÜ@Ïíò9Lj1oºÐ Ú~ Úõz\é—Íó‰c^¬A[èÉ7oǼXƒFtˆy^ƒŽb ÚB¬IQÌ'Žy±M¶SÌïkÐñ5h=\mwÅ|☫À1Ÿš·‰™c^¬Ç|jÞ&fŽy± Œèó|ò@«À6zóœõ3ǼX&Û)æ÷UàøÎ*°~ía}<Ÿ9æÅ:l\Ñuþü>|¡|Ø+j±k ß¸.zb~¹ûyu_GôÊèóæ:ì„~ Zý¡9¡˜·öþçÀ¶ =—û>hªç÷uØøÎ:¬Ê]áöá®êy±÷ѵò!{ÿ§Õ(V£qú}½×´”qæÞÿòÐ×E± «ÕEfWÆá½2:dïýb8šëïÁ•qæÞÿÐö‚¶ÓWf_Žï¬¶_¹Î¥5м÷?нÿˆgÞøðœ·kÐÑXƒvêicãŒkÐÑ\ õe\ãŒkЈÇ{ÿ£Xƒ¶Ðƒ3ãgœXƒ&Û)ãö5èøÎ´^s¾á*ãÄÞD‡Œkœqb<š÷xîXÙ‡Û÷Aßb­yÛÅ× ­ó¼û>Š5h ýu®˜7wß§Jè·°1o=èÉuæ*pGÏTF‡¨Ã;lô[Ø ë½»vãÆÁQ'V£¹9»¢Žw G± l£»VãਫÀd;uû*p|g8šûß“+æǼ؎èóƒc^¬A§íŢ c>‰Uà´ŠùÄ{À“X¶Ñ]1Ÿ6Œyý6º7êÒ†Q—Ä.lD×Q—øäÿ$V“±#µÞoò¢¨ ubÖBo÷ê‚¢Ž÷A'±k¡÷KtE]à¨ë°d;0mÚ×aÓ;ë°º;æǼØèó|ö~«À)ž‹ùÈ1/Öa-toÌó:lë°º7æ#Ç|aÏE]ä¨{¢.rÔ‰uØ”ÎE]â¨+¡ú¸£SÔñJh+¡zØîšŠºÄQ—DØ'À?ª ŠºÄQ'öÃ":DŸÁžÄJhZŸÅí½Ù'eŽ:±i ÷íòueE¯E&±™Œõ8çœUÊub-ÒBßî7ûÐ÷}_‹Lï¬Eèa8c>sÌ‹©ˆ1ϧ '±šÌ½Ãó…c^¬EZèý~"4Å<ŸCžÄZ¤…>|{BSá˜/"lŠÅuÑu…£N¬":DŸžÄj`ªç¢®rÔ‰õ8 Ýu¼—Äzœ…îºÊQWEØÔsQW9êÄŠ¢CÔUŽ:±"–Ì;Ð}ß÷ÆQ'Ö¤,ôtÿÆQÔñšTkRÉ<Ù÷}ouM„M;5?ŸGXBtˆºÆQ'V…R·zX_/ëBI¬ Ù辚W…’X²Ð½4¯ %±*d ÇáŒ:^JbUÑ!êxU(‰U¡tnU(ñªP«BéܪPâU¡$V…Ò¹U¡Ä«BI¬ ¥s«Bi_Jï¬ èi»+™?|ÃUÌ‹U!D‡˜çU¡$V…òvjý=ó]ØY¬ åíÔú{6W…r#ôkÐæíÔú{¶O„~ Ýû}ÏËU¡Ï°côÊè:ê2¯ e±*”Ã)¦Í|t«B9œbÚ8êĪîbÚ8ê‚›së29pÔ‰u™|n]&óºLë29žê 3߉œÅºLާ:è9êĺŒ…îì sä¨ë2º·ƒÎ‘£N¬Ë :D¯Ëd±.“Ó©òÌ÷g±.c£o®¨Kub]ÆF/®¨Kub‡ÙªÎ¼ïPËïìPËéÜ÷=qÌ‹U!D‡˜çU¡,V…²¹OÊó|3o«Bzj¾µÈœ9æÅª…^|»ur昫Bd;Åü¾*”ßY2Ð7çJhÎóbUÑ!æyU(‹U¡lž{³¹?î‰.V…,ô|iž•Ðl­ µ}ö ‹U! =^†çĉlîPÛÚ^Ðv8 ;ï;Ôò;;Ô²y3ïç 'Æ<ïPËbM Ñ!æÍ5©‚Qw Zsm"»bÞÞ¡öØ‘šÅš”žÇ¥{v"g^“ÊbMÊB/¾ó¨³¹&U;Ú^Ðvâù}Xþã=bå”›•qÙs×F¶v*åm÷¼XBtxïæªÐ¾7‹U¡5ú>]<;Ð3Ÿ–™ÅN¥lîPÆ]-æo× ®kÛ4Ï)j¹Yß÷ÐÈöÊèÀuÆšÔµ ®èùkÐös1ß9æÅš¢CÌwŽy±&•û¹˜çÓ2³8-Ó°Ýóûi™Y,|Y&zC»sh‹…/D‡ÐîÚâ Ø<Öèé~°…6_șŢChóÂWKO„¾ø†ümø„õZ•õ4|¾C5йüÒTË/zq;]Œå—kÔEB¿=üú¨¶Û•˜ž«TJ`ÛÅ"@1ÉscSÛ®Ð×GvuçfëbL‡ÔWÄTtYO¥|‰žII–íe·]LI–|=3º˜*ƑΠ·KatѦ—uÙ~;ÞÀe{etÑ0•fMQ¸– JctQ¶—µ¸£ç{ïŒ. ¨²^f/ÉW@•ÁèâW žo¾+pë†èUð|µ¹Îó50ºàºOå{µ¸.ìGvUÁuõ×ÕÄè‚ëj>Å653ºàºjNI6zatÁuµž‹ºÊè‚ëj;÷Þ£ ®«ýzgtÁuÕàºxž‹Úê`t!)j›Å´_“ÁP×5®i›àºfVÔÅÓM4®i›¨i[°l.Û¹¦m‚i t·í\Ó6!¯hѲ=¹ll»àyÝm{dÛÅ"[eÊv?r›l7ùëc‚¤‰¯Œž7_mÓ¸žob±·ås¶g¶]|ã t·íÜM4±è×Ê9®+l»øÂèî˜ç^¦‰ÅŸVÏq]eÛÅ÷Ý@wÛÎTÛbšµpŸ9!ÛÛ.ª‹Ö¬ªrxæ.÷qMlÎhÆ\e¿o¶&Û;Û.j›5ºßvî"›Ø"ÐÆz*ºÝ%Ãdû`ÛEÙŒ¹Êê´{Ø&꺾®¬Bôñ|ßÐö.ê:=yò½sÝE]×וÕ5ê\µMl»¨ë ôt­ç=Tçþ½‹º®›••‹ç{dÛE]g ßæ¨=3¥=²í¢®ëçêºnÖuýQÓvQ×õsu]OXÓvQ×õsu]Ïl»¨ëú¹º®g¶]Ôu½XòŠè²½°í¢®3ÐÓ½{l/l»¨ëú¹º®W¶]Ôuý\]×+Û.êº~®®ëmu]?W×õƶ‹º®¯ç¬²÷½[u]މAužÒý²½³í¢®ëÃB¯.ÛÛ.êº5úçò€ë7ØvQ×í”ícCÛ‡¨ëÖènÛÏ× Q× c z»o‹!Ûæû—Ô ãº°þíjÝŰ.ìªã!—âÒ*DWÀ2£„«Ñ;£wÞgô>£§1:¢ç¯;GNx>±çÅÆDÏ'ö|®Kç<ŸØóâ®±¬ëbê—0<žÏ¨5b{¢ƒçóKpV½3:x>ž¯[Cô«ëÖUe5)ð|1<Ÿžž"}DÏÃóÏ+1‡¨¨¾2æöˆØ ýÃDoÛ½®uß°®‘ %úoû½—û&¼ßâ½ÿžßûïüêùÀïý:|]ÏÇ…œu•£NÈ䢮rÔ‰^Ñ!ê*G88Ê@wG]娫"lÖè½Þ;)ŠºÊQ'./ËN*nÉu£Nˆô¢®qÔ‰.Ñ!êGé¯ÑýQ×8êš›5ú¨÷m¯u£NlÆÊÈ>O QgmHûuaCÈ䢮sÔ‰þÑ!ê:GÐÏs‹€ë`‰Ñ9êºcM*Ü;hŠºÎQ'ÔûÃXjΨÌuB?èuƒ£NÌœ :DÝà¨G7­ÑoÛ^7WÔ Žº!Âfœ‹ºÁQgz>çm=kÔöƒ%dÔíÃí¨»ÿd6Œ.£nF7¢N WF—Q7£Qg£D ½\{™øõuqBÿxÝxÚ:+^]ÆüŒn\‰)< ›õ|]Î÷ë)êG]aCèu£.ˆ°!tˆºÀQDØked램 uA„ ¡CÔŽº Â&®ÑÓ%º¢.rÔE6„Q9ê¢B‡¨‹uQ„Íz–8o—àŠºÈQEØ:D]䨋"l’¥³òE]â¨K"l¢.qÔ%6„Q—8ê’›õ yN—ÄQ—DØ:D]â¨K"lŒ+¾nbn_´~ÿ‰6„Q‡óó½2:DupT+Ñ£7Þfôöâù˜"¢wF—k3úëÚD~_d£Xžÿ¤Úá‰ùåÑM_Kb„þÛŒù\³FúïÛ¡ç¯ÃËz¾îZÛTOÆθ"R†Ð!ã g\)Cèq…3®ˆ”!tȸÂWDÊ:d\áŒ+"eÖG…Ú/Ù“q…3®ˆ”Y¯Iv×ÓRÆθ"R¦š_X×7ÎZ“Úún{)CèqÖšTÉ Ñ+£CÆU®¬ªH™jÍÓ~üLWWwõüÑ;ÛW9ãª( ×ûaoM¬«ª¬FUÙžu] KèïÖ52}ôü5eŒU¡x?“2®ñ7®‰”!tÈ8\è•Ñ!ãÌõ¸‘ ýÃDï㮟§÷Þ˜ç›xqÝZ‹Œ®÷Þù½wñâÞ{ç÷ÞÅ‹#txïß{/®[ë°ÉõÞ;¿÷.^œ±6ï5½÷Á_Ø!^¡Ã{ü…âÅ:¼÷Á_X±.¶5úv žu™`®Ëìĺ ¢kχ »‰ Öe]{>lØM±6Ö»´F¿$—çr]kˆžìy±6èàùÀžóóÁ˜£÷£XÉó‘=/æç<Ùób~ÑÁó‘=/æ¨CZã6—Žz.x>ˆ9jDÏ[sÔå±3Q WFÏ'ö¼B_k‰·~i݃Žûãî?1†—sè…ÑŬQ¨çÐÍ“…ÒþÞEÌSÔFô 7FÝDø^×ÅÐ/½áÊ÷Î袦 ÆN¥+Ñ7úà÷.*«¸Þ+Cp¡GÜ+tÿ‰1<ô¸xò=F_Ø×1ÿÐ]ºyŠÚÎuQ|eb:‡ž]p]\s]®Ó2÷á ]p]4OQ˶‰…Ñ×Å5×Åk7á²½2ºàºøëb Ÿn¶‰Ñ×Ånñ|pÙÞ]p]Öµï½F\—Ö½L|ô6DO‚ëRXgÜÝc{ Œ.¸.EKíS]¶3×%û̇¯ÉÜõÅŽË‹öáöåE÷Ÿ,†ÿ ôÏ|×JLèÖµ6úíá‹›†ëbÆ}ø7ÛcyÔó)‹‡_¯‡+ÙíæÕI}‘6ú‡…~» ïKÕ óóOôÃü|Ðo®3.r‰®“À÷áÊóE¸ÎºF&]šÇó…=_„ëÖ_ØØ/ix<_ØóE¸®ZZ£ÍåùÊž¯Âuzh_ë°äùÊžkRkt¿ç+{¾ ×—Ì·û¬yÞ:m#>ì95áºõYáÚM¹˜¶Yžˆþa¡ûÙ¦Yž/Ðo®ëçØ¦³ç»p]?Ç6=ß…ëú¹˜ïìù.\7Îy~°ç‡pÝ8çùÁžÂuãœç{Þ>ç$¯¯¼vó¼yÕùÓóâ²qÝÉóöeãÑ?,t·çó†ž×}gëÚçÍuh6¯ûûWF\ûœ³ÑMTç{Œ.º ã"ÖÛkwÙž]ÔóÆ•˜×OœçRÊl^Äçœdq%f¶.'Ì—èB/Œ.êºlž?ß]è•ÑEmc^ç´½1ºø¾góŒÖàBïŒ.¾qÖJ^ϛ߸]Ý—Ï—Íò|ñdœy§Ò3ãÄ­F¹„sèÌuEpq¯Ð¾NèÌuEp]1wm¸¸®0×ÁuÅäºäáùbÎ]ÄǬQ\Wʹ÷^]pÝú^!ÿ{¯Œ.¸®´sï½1ºàºbîý®÷Þ±/¢—)Ó¦ö¥«„º®˜½Ìãêcýßɲýó_³'}~¹þ׺n×ÑIY¶?:h¨*‹ÙIíû¤ŠøÊ”a½÷ázïƒß»è¤Šuo൴ò¼÷Áï}ˆghÌò]cFï}ð{}œe{(÷½ðÞ¿wñ}_ߥõ3…»âÞ{Ýð½WÑÇU£º¸Â'Ç{¯¾wýúâ ÛC¼Ÿ?ïý‰n¾÷*ºHËö›´ÑñÞë†ï½ŠÊªgu6ß÷½~ïA¼8kõÿŠïyïß{/nmû-á\ï=ð{{ÿMÛC½xÞ{à÷.jÚõýq?ãp¾÷Èï=Š­÷>\ï=ò{âÅsí\ï=ò{»ïMÛÓÅsÒHüÞE7±¾¹ïg,NžOüÞÅ:l5z™+¼‹ç¿÷$^œqFkr¾÷Äï]ì·l¿Â»x>ñ{}œqgbrÎ×U^ƒ®b º;‘SqÍ×Ìï=‹gì®÷½BôÞ3¿w±nÙ~…/ž÷žù½‹Ú¸­ÒýÞy¼ŠðZν÷ÂhW¬|wÕóOtû½‹õwËök;á©çká÷.æ.jµ¾ïÑõÞyý½Šõwë–Òè[®•ß»X·Ð¯µë [ÙóbÞf}Gêçn\—çyý½Šõw ½ÝWÀÉóæúûãfý–2kôî§"SÆ5#ãRj„þaÙþuׇ罛«ÿ=ÿÑ,ÛÃ#ã>Ä.ìiøýäöæ ý6ý\Ô±ö Šù: Ýu£NÌ×èî¨ëub¾nîºÎQ×EØôsQ×9êÄla=7[XYwQÅla5ï l®¨ub¶°ž›-¬ƒ£NÌÖs³…upÔ 6Ú9©®¨ub®²m§æ¬kNš˜«´Ðë}U¢®muMÌUèÞ9«¶aÔ51W¹FwÏYµ £ÎFoŒ®£nB·¢NÜBžÛ¹™Róò)êÄL©…îºÀQ'fJÛ¹™Ò8êÄLi;7SÚG]aÎE]à¨ó´íÜ<­yÿûubžÖBïΨ‹ubž¶™ó´®uØ9êÄ\QÇkM¬M´n}a»+êxm¢‰µ ½úÖ&¯M4±:Ð,5ïö¥h¥÷ΫM¬ :¼w^hbu  ³¶q½w^hbuÀB÷Θñê@«ͼGÌ÷ãÕ&Vš½#Õ³:Ðxu ‰ÕËöä[h¼:ÐÄê@ßNE]çÕ.Vú¹ÕΫ]¬è!øÖ¤:¯t±:Ð-%spÕóWºX@tuWºXèá\Ôñê@«ýÜê@çÕ.V twÔñê@«=œ‹:^èbuÑ!êxu ‹ÕÏE¯t±:`¡{£ŽWºX0Ð÷¡)êxu ‹Õn¬M„ìš§í¼:ÐÅê¢CÔñê@«=‹:^èbuÀB÷F¯t±:` »£ŽWºXèé\Ôñê@«ˆQÇ«]¬tSÁîê";¯t±:`¡?ί£¨ãÕ.Vº©`¯®¨ãÕ.Vº5?ß\ÝDçÕ.æçûúV#ï9'Ý>ïâ¡âîb–Ø@ßÂ%OÌ/g‰oè-úíá—³…á6oã9ó¡ói]Ü/c oÅw£S_Þèt;2²"úÍuëyÚñØÿNž¯–çw{3¥}}’ؕ狋mx÷}óukt¿ímóu}}ËI(¾ÕÿÞÙv1gµF÷ÛÞÙv1gÕÍ9«äʸÁl#æ.Æúð-ùЇ}ÊÊcßÄôýÇØî甂çÇfy¾"úíá.²ßOþ'ÛÛ.ú8=‡ûyd{`ÛE7⩨‘mÝ„î¶=²í¢›F=}§iĶ‹šÖ@wÛžØvQÓŽõé:%ÜïÂ&ÛÍšv?—xÝ…ž¶Çi™`{6l)úíáͳy¿Î`'Û Û.*«ažO›]è•ÑEu1¾ßCÊ×v¸öMŒeuñõ‰} ‹êbµM¾ï› ÷nVµúíá×ÕÅm¯ËómÕ…î¶½³í¢ºëÓï¯=ìpÙ>Øv±.c »ml»]Û”ÍRﯵHmû>Ü®¬î?1†Ûó´.ôÀèA ·Ô¼a»xÐ#£G1ܘ·É®“÷á‹z¾=Ðí/¬þóú•)Ž/ì„~ŒºŽè·‡ÏÏ7—í™mÏâáó9Û3ÛnÏÛ”ÍúÂFÏIbe[êë>¯êŒtû>èbÜ Ó¥5ž=(æ}Ð_ÇT~¢Û·3º¼•¸¬o%¾]Kü¸•X _¾™ëïÕc{³lßvÏ7ñð„¶·•í·™kò /îÒªÛÕíÛm½¯ÑkèùnÞ/ó‹Ñ ô_3ú¯Ï÷0ýúðë/lë—=¶Ãó­î¶ñð„¶µíÏ»qz/ë{BC—ä±}º'Բݾ'ô£kÛ'tËv‰nÜÔÙ.¡yЃÞÛ#ãì›:¯Ã—ÕÅõq.ôÈèQ 7n1 —âBOŒžÄðu{»#Õ…ž=‹áÆé:áq5 F/b¸qccºl.Û+£W1¼³½1zÃû9Û»…^Ë]|eÂ8gû`tÁóq;…-®ëåÞÇ•(¸nqcãÏ’® l‰¦&×¥Gm×-nlüY¯u=2ºàºxŽëbbtÁuѼÖõ•‰™Ñ×EóvÚ­{Ð £ ®‹õœí•Ñ×Ås\£ ®[ÜØø3÷KôÆ|gtÁuñ×ÅÁè&ו²¾±1^;èþÕËÈÛ¨ËtcãëmÔµ=êyûÆÆÎ躦MVM;RAô_Œ®=Ÿ˜çmô«ëŒõ¸qù*‰Éó=„ë<Øóâ+ƒèàùÀžÂuÆj`{Ü žìù(\GèàùÈžâá×s•1¥¯bÉvëöùþ8³±˜7uÞžÐÁödØ^·†è¿¢Î¬.¶èW×åsžÏìù,\—Ïy>³çEmƒèàùÌžÏÂuëyÚÚ%x<_ØóE¸ŽÐÁó…=/ê:DÏö|®³÷»b¾²çÅ5¢ƒç+{^Ô´ˆž¯ìù*\×αM³¾q}ÿʈ9jDÏ7þƉzÑÁó«‹&\×Ïy¾³çÅ 9¢ƒç;{^ô2ˆžïìù.\7 ôüuòy~°çÅü<¢ƒç{^ÌY!:x~°çEiÜêýÂæ =ŸE‰èÚó™»È,ºHDמÏÜEfÑEæpê ›{^t‘ˆžç.2‹.ÑÁóÜEfÑE®oh½Q]tyž»È,ºHDÏs™Å<-¢ƒçÍYâýêºõ,ñ•ê²Ëó‰=/zXDÏ'ö¼èa<¿ìa¿\èW×™û¤î«àùÌž=,¢ƒç3{^ô°ˆžÏó¢‡]ßJC¸k‰ÉóÜÃfÑÃ":xž{Ø,zXDÏs›E»¾‘9Þ.»pyž{Ø,zXDÏs›E‹èàyîa³èa×·QûcÞìaÇþ}=,¢ƒç{^ô°ˆž7{ØÜýêº~.æ;{^ô°ˆžïìyÑÃ":x¾³çE›ýqý~¶y~°çE‹èàùÁž=,¢ƒç{^ô°ëØÝlS¸‡-¢‡EtíùÂ=l=,¢kÏîa‹èa×·Ïû=Ï=l=,¢ƒç¹‡-¢‡Etð<÷°Eô°%žó|dÏ‹ÑÁóÜÃÑÃ":x>²çE[Ò©/lIìyÑÃ":xž{Ø"zXDÏ'ö¼èaK>õ…-™=/zXDÏs[D‹èàùÌž=l9×Ö‚³Eô°å\[ {^ô°å\[Š9oÃè×ÿTÏy¾²çE‹èàùÊž=,¢ƒç+{^ô°¥ãùÆž=,¢ƒçy¶ˆ¶´slÓØó¢‡-ëÈãq6y¾³çE‹èày^‡-¢‡Etð|gÏ‹¶œëaË`Ï‹¶œëa ¯ÃÑÖs=lìyÑÃÖs=l]ö°_û´îèUô°õ\[¹‡­¢‡­çzغ™žgÛ¯®3v¨Ï×Àž=,¢ƒç¹‡­¢‡Etð|`Ï‹¶ÆS_ØÙó¢‡Etð<÷°Uô°ˆžìyÑÃÖs=lMìyÑÃÖs=lå¶Š¶žëakbÏ‹¶žëakfÏ‹¶žëa+÷°Uô°õ\[3{^ô°ÕØ‘šœž/ìyÑÃ":xž{Ø*zXDÏö¼èak=UÏW³‡}œ$vÿ‰á:BÏ=lN‘Ñ1:xÞÞ×ýêºvŽm{^ô°ˆžoìyÑÃÖs=lmìyÑîoŸåŠîÑÛÔŽÚƒ*zXDÏó:l=,¢ƒç;jªèa×7°û=¿ìa?i~·]ô°ˆžçsNªèaÑÁó¬§m¢“2n)1ºöIµÆ¶‹N ÑÁvV´6ÑË´~Žmx_d½ ¢ƒí¼×D7!î‹ôtÐw&6ÑM :ØÎ+bMÔóë{Cuîé2mõ<¢kÛû†1ßE=躶éf=ŸÙö«ëÂ9Ï›õü®%Gtð|`Ïû#…èú7¡¿~ãz`Û1:¼÷Àï]tëÛënëqÅõÞ#¿wÑM :¼÷Èï=ŠGèðÞ#¿wÑË :¼÷Èï]ô2ÖÍ}Í·/²'~AtxïÜËØè3:¼÷Äï]¬":¼÷Äï]ôqëûãBÍóiá½³¢µ‹>Ñá½ój þ7£Ã{ÏÆ{¯Ûmú/F‡÷ÎzZéys=Î¥·éWFºèa»y¼WĺèãŒûã®L[=õ|·V…¶ýÔDó·ßÙDO—¯„ý-ΟŸ†_®ÿã5êb ôÛÃwËóÁe{gÛ»xxýZÛDím}Üúþ8ÿ{·{™ý+3ÄÃsï}X¶ï+¡]ôqëûãÜï}lh»yÜõá-tç{¢›¶ÑËŒ`y>xfN¯M ÑË :x>°çƒp]8uOô߯÷„n»´„íW×­kÚÚ.ÁsBìˆÖœÕ®ú¢¢Ftý…W‡¨¨­»óÆã†V°=±í¢ªDt°Ï«¢ª4n¯«å’]ïݪ*[|ÔuCTVˆ¶g¬¨‡XXßçù¶ ¢ƒí…móóÃØ/S/_Óûd;Ÿw1„Ò ÑÁv>qbˆùùa¨}Ê¥yNmZ#DÛÛn¢_?ƹý’·Q—çÍ}¯w*ÅPö˜u¢Ã¶£âÅF¿>ü8gû`ÛU]7ÎÙÎj=×m;c{}ÞhÙ^7{~žÑ¥í3ºa»@¿>|8g{`ÛƒxøpÎöÀ¶ñðÆÞq©.Û#ÛÅÃ:ØnjNB@ôëçsï=±íI<|:÷Þ¿÷$>Ÿ³=³íY<|>g{fÛ³xørÎö¶ñðåœí…m/âáë¹|¯l{_Ïå{eÛ«xøõ>è·×ímoâá lol»‰þwÝÖóu!=î’3äuº±ñu†|¿¹¯Ú76^‡ZâkM=èÃB/é>ìáë[ ݶO·Zèö­…×áẵÝÝDµo-¼çЭ•Ðïݾµð:|=w¶K«ôĶ'1<Ÿ³=3ºøÊK_wi¶ ÆW&¤Ç\eµo-¬Œ^zÑëz¦T _Þ^ªÛ—_™›ñ›ûªygâo ý~ðLé„~˜£Î£úíáþ=<î“ÛÛÞÄ÷ÇxiÛÛÞÄïõu·{À]¶w¶½‹‡7ÐC¼dímïâáÇ9ÛÛ>ÄÃs¶[kR¹'B¿>üú®L·íqCÛ£½&e¢;m¸&e£ß~ý}Ïãòµéƒl–í}G³ˆ®«Êˆûeúõá×ÕE*÷Õ@²=²íböÑÁöȶ‹Ùƒõ-¥?S» —íÉú¾—Ýv1{€è`;ê¬z®ë;Rýï=³íböÑÁö̶‹ºn}CëÏ\k`»U×}]ú‰.*«õ ­?s¼zetQÛ,nhe»Ý ó%”"t®m¢¨m¢±sáJvžÚ&ZµÍd»¨m⺃Îé’]¶wö|AKèóÖÊHÜýúðëó¬òvé.ÛÛ>ÄÃ:Ø>ØvQÛ$£ºÈ—¯+ÔÁödÕ6q{Ä|µþYÜ8b>™µM΄~{xãná´ÝªmbŒt[sÂèr¶®ïƽ…]ȈÞ]Gßk£ÿ¶<Ûœ7¢ç½ë½ï•UuÝúvZÿ{7뺺¿÷(^\<÷Þm­£wF‡÷nU•¹&BÿmyÞÿÞ£¥ò*m¿_¯IméòµµÞ{²Þû>k$îÆetxï¦ÎªvDïŒï=ñ{OâÅèù~4½÷dÕ6ûJhõ¼q3¯;ß3¿÷,^\>—ï™ß»è&Þ{æ÷žÅ‹Ëçò=ó{Ïö4¯q/ðÏkUY³Äɘ%yÛß»ÙË4Fo½Íèí¥¸h= úÕuÕêã¾ 3ŠùŠsöͼ•ÑÁóuåùú–½Yè·mÐ.ÏWÃóiBÿ'š¶§Ëç-ןØèÓðËõ¾qÐ?,ô?ã=ß?úÇŒþs Ñ £ ®›†_ÑËka•+¾÷kÐZ«—<1ß8æ›ÚvŽmÇ|AÛαMã˜o"h ôz÷<Å|ã˜o"h×kR©_º+æÇ|AKèóc^E]?Ç´ÝZ {Ìw6ýÓöUÔ}†]"ô[ØØ³FÝuÝŠºgÛEØt‹m¾ŠŠº¾Žº­¥ˆè…Ñ!êú*ê>Ù& zetusÔ}¹m¿í8Ç´ƒc~ˆ ç˜vpÌ´ÃbÚîŠùÁ1?DЋë¢+æÇüAKèóƒc~ˆ %tˆùÁ1/ÞûúöO®«Ž÷þ¼ýŸxxí˜7o`ÿ°ÐÝ\÷D?¼÷úØ#&Ð £ë÷>¡¿~a·”½2º~ïú+ÛŒ½º0Ño/.œ{ïß{/.œ{ïß{/.œ{ïß{/.œ{ïß{°?RÙ8ee?‡\ã¦Ûç_ç.Â㜓jÞ> =ßÏ= ¨‹FÔ}]y/Ño¿>1ògyÜ;¶'¶=‰‡OævxlOl»˜«ÌÆžÐ~ižµÈljÒc¶0‹3DÏg£²ÚwçÙè7×èãòµ FžÏ× —íæ|]ñhJ³5[˜òžïBѺ¾…<ÔxùZD&ôÊ1/fNÖ7qÿlÛåka…¢ÎØ;rÞß»}jb͆z¿¸ÎÞ¯ÖMÜ¡¥]h]Ï[7q?Ïxè¿]ټÅlWuJÛ³>¶KðìÚȸ+³Š»°lÇ»°z¯ëû o߸豽ð®Lq5£kÛÍÛ¨Ÿ;VŠÐ]waoñ~Ê ¬ËSwÑ Ú~uqÖGñí+¼'TÜFÍèàùÀžÊã.ì-]’Ëó=/T%žó|dÏGáºxÎó‘=/´Æ]ØnÏGö¼Ð]÷Aoá2\žçý°â6jFÏ'ö¼Xý·Ðû}ÆŒ<ŸØóBù`Üú¥Vçy7®¸šÑÁó™=Ÿí¼«ÿµ\º£¢WFB"ôÛ‹3lß.ÍõÞ3¿w¡|XßFÊæä:Þ‰,îÂftxïæù6û\¥‰~s^/Ãåùby>6´ýêºzî+Ãû Å]ØŒž¯ìy±;ϸ‰Ûý•±vçõ}u@ÜB^K;çyÞ…-îÂftð|cÏ ý¼q¸Ûó=/ö¿[·QûN¯|vwa3:x¾c'%î¯eœ³}°í¢‹Dt°»Hqw­F×\'W¾ºŠû ]Û^ñì}~}øpÎvÖ‹™ll»è¤ª¡d®—âÑUòÈU܉Ìè`{dÛE/cÜ ¼m®[‰«u+qû¾ q+1£ƒí‰mÝÄúfÞ0†ë”ÔjÝ <Û.º DÛ3Û.*êõݸ·.2»l/l»¨¨l/l»¨ik=g{eÛEM‹è`{eÛEUYÛ9ÛÛ.ªJDÛÛ.Ö&ŒZkx¬Œèµ óvÚÜUe' !º>ã¥ZçåÇ]Z6ú¿“…ÞúåkAíßÉFŸ†_®ÿãOÑo®[×umÜ•NäùÁž§*!:x~°ç‡pݽ¶;:y~°çíÛ¬ªqC«×óæí´OÏ7q¢¢kÏ· =o¢_]g {=ÿD7=/n§­Æ ­nÏö¼8M ÑÁó=„ëÂ9Ïö¼ØkÜÐêö|dÏ‹“Ä<ÙóQ¸.žó|dÏ‹ý°ëûaýžOìyqŠ¢ƒç{> ×¥sžOìy±#u};­ßó™=Ÿ…ëò9Ïgö|®Ëç<ŸÙóbOèúvZ¿ç {¾וsž/ìù"\WÎy¾°ç‹pÝzu ?öŒç+{¾ ×:x¾²ç«p]=çùÊž¯Âuíœç{^œ‹èàùÆžoÂuíœç{^ô°ë{ýžç¶‰ÑÁóÜÃ6ÑÃènÏs+îD®ë[‰ýžç¶‰ÑÁóÜÃ6Ñös=lãVÜÈ\[‰½žïÜÃvÑÃ"ºö|ç¶‹¶Ÿëa;÷°âFæjÜ ÜÚ%º<Ï=¬¸™ÑÁóÜÃvÑÃZèå~&3yž{Xq'r5næ-ýq"4xž{Xq+1£ƒç¹‡í¢‡5Ð[½T—繇·×õݸ~Ïs+îftð<÷°]ô°zë÷³}ÈóÜÊ{«u;ívŸ£&Ïs+næetð<÷°]ô°ú5æ}lÃ=l=l7ú¸âäyîa»èa<Ï=l=¬Þ7'ÛpÛEÛ>nøÖ¤:÷°]ô°ˆžç¶‹Ö@¿~ß}žç¶‹Ö¸¹z«Jîa»èa<Ï=l=¬Þ‚“ç¹‡í¢‡íF黵°vîa»èa<Ï=l=¬>Âý½“ç¹‡í¢‡5îƒv³ ÷°]ô°ˆžç¶‹Ö@ïÕÙIqÛE»¾úV×¹f‰÷°Cô°ˆ®=?¸‡¢‡5Ð[¼ç÷°â&îjÜF}EwñüàvˆÑÁóÜÃÑó‡.Ïs+nâ®Æ]ØnÏs;D‹èàyîa‡èa-t¯ç¹‡÷€×‘Îyž{Ø!zXDÏs;Dk¡{=Ï=¬¸…¼÷€_++W'5¸‡¢‡Etð<÷°Cô°VÉóÜÊ;Ыq ¹ÛóÜÃÑÃ":xž{Ø!zØQÎyž{Xq{õÛp;D‹èàyîa‡èa-ôê«ç÷°âþ÷:Ú9Ïs;D‹èàyîa‡èa-t¯ç¹‡¢‡]ßÿî¯ç¹‡¢‡Etð<÷°Cô°zËN¶ávˆvŒsžçvˆÑÁóÜÃÑÃèWÏ»f‰÷°¶í¥mFY]ó6ûpÛó÷Ÿ,]ÇèÒó3ºáyýßÉB¯ãŽ®=?¡[ž¶_]¬òìò|`Ïá:BÏö|® gÖ¤&tÛóA¸.žó|dÏGáºxÎó‘=…ëâ™ùù Ýö|®Kgæ*÷áÊóI¸ŽÐÁó‰=Ÿ„ëÒ™z~B·=Ÿ„ë̳>¾6y‘ç3{> ×:x>³ç³pqcc¿ßZHžÏìù,\WÎy¾°ç‹p]9çùž/Âuåœç {¾×Uk=.ºØ¦²ç«p¡ƒç+{¾ ×UkÆÌÇó•=_…ëÚ9žoìù&\×Îñ|cÏ7á:SÉ\žoìù&\×Ïy¾³ç»p]?çùΞïÂuýœç;{¾ ×sžìù!\7Îy~°ç‡p±ë[ŸÐmÏ‹6l§<¸‡ ¢‡EtíùÀ=l=¬îõ|à6ˆ6Kgµ¹<Ï=l=,¢ƒç¹‡ ¢‡ §öÃNè¶çE⹘ç6ˆÑÁóÜÃÑó‡Ý\žç6ˆ6$Kkä‹yîaƒèa<Ï=l=¬^«ï ¸‡ ¢‡ ùœç¹‡ ¢‡Etð<÷°Aô°ºÛóÜÃÑÆs=là6ˆ6œëa÷°Aô°zî—àéa÷°Aô°¡žó<÷°Aô°ˆžç6ˆÖ@w{ž{Ø zØÐάIíÕçEi {û÷À]d]d0ú¸xéÙc;w‘At‘ˆQÇ]d]¤^òýl^òX×]¶s]—D]g »ml»¨ëRÛ¹¶É¢¶Éí\Ìsm“Em“û¹˜çÚ&‹9«Ü­9jÏw¶]TVyœ{ï\Ye1ge ÷íR\¶¶]Ôue;e{Ắˆº®˜ŠV×ÜEẮˆº®˜;]µMẮˆºÎ@¿öï®¶ðœUuÝúö[MëZƒ.\×Q×èùú•ñôq…ëº"êºÅèÂu…ëº"êºbÔuÕó\×Q×cÖ(]6WÌs]WD]g _mÏ.Û¹®+¢®[ßÄíy®ëЍë twÌs]'Ñ«õ•qU•…+«"*+ë6êxi­QáʪˆÚƸ‘¹Œû–й¶)¢¶Y£^èY“*\ÛQÛ72÷r‰žõ¸ÂµMµM1Ï»ø¼‘mçÚ¦ˆÚf}#óm50yl¯\ÛTQÛ÷A÷~Wû€í•k›*j›õÌ~Û¹¶©¢¶©áœí\ÛTQÛ¬odöÛεMµMçlçÚ¦ŠÚ¦&«ªté¬*×6UÔ6Õ\ L.Û¹¶©¢¶1nd¾)\¶smSEmcÝÝîʲk›*j›j¬Ç5ŸŽºrmSEua ï_²k›*欪±7.ÕS]Tž³ªbÎÊ@Ïך֣d®\YUQYÕvÎv®¬ª˜³2ÐݶóœUuu#s÷i*×uâ>èfÜ |í¤ª§›¨\Y‰;‘ÛúnÜÏ£…<«kq3¯ž.ž|o\Ûˆ[‰›u;m¸$OÌ7®mÄݸúµ›pÅ|ãÚFÜ Üš¹"æ9¿®5®mÄí´zi¾uØÆµ¸™·Y÷Ã:OYi\Ûˆûa-toݸ¶wã¶fÞ/\¶sm#nhµÐo'¸lçÚFÜNÛš1o3|k‘kqGª…^ú%{æm×6â~ØfÜêŽy®mÄ-¥zÏÎ|çÚFÜÐÚÖ7uúß;×6âžP ýZ]¸´FkqGj3îÊ,é¾[‡lçÚFÜÔi ÿyø¾ïÛ+£ žïí\Ô5F7™¶·õN7MéýÞÀ.Пïÿ@ŸÑËöyÁÇ'zÃÇ9ô±B¿Âç¯ô }ØÃ×7û¸Ñ§{…^lÏ!>l·oöÉm}»M õ±/2 ôçðë?gôP¾6°ßÐÅ©Jˆ®÷€¯ïú"zDkϧgÔÙè×ÏŸÁóûJhèÏá× Íè1Ýö(žÐÁöhD])Ñ1ú/þkFÿõu[‰ˆ~ ›å7îgz¨y)ꬥz~p}»Mgtð|2¢®nÐg ýZÏòóõ'6ú4ürý/¶×¯”´ýêºå÷=Æ|¯çÉóÙÌ÷=‹°!tˆº¼Žº­§Hè7×èå^]ç³áùÒ+Ú~uq¦Óc·y¾°ç‹p¡ƒç {¾×èå®ö!Ïö| k¬ŒÔljïÕ`Ú¯?ÑÅ©J£:¼wëT¥=¬yÃËÍuúc4y¾1ÛˆS•Öw¬Ä­_¾Ê²½³í¢ªDtxïFM{_¥Ôèׇæ{wÙ>¬|ï»íC¼¸5ú•i¿>ÐôÞ‡õÞ{#ô¿Jß¶3¶÷õ+3×uóž‘ßÙBwÚ>¡‹ùLè·‡7­Wt—ífE=Ò=ˆ‡7Ñ»Ëö°²ý“j¡ßÞ¨*Ãý$1²Ý8£5¤ÇÉݾk£3ºÌ÷ýÐEFÿÅèò ;£*ê0ýúâ’ó»È>ÝôñÚEŽÇ÷½ÛwmtFÏ'ê ú/Fϧ•ç?3®!úÕuöM.Ïgö|®#tð|fÏgá:BÏgö¼‰žºqׯõ½ßwa‹ùùiøõxÙsÝ™¶×:x¾lSž\W„뺲šî\xíeBÞÑEE½>ùÿjz½dz¢u™DEèðÞqŽZ _~=Sšêý¶J²ÝªiÛcU¨QÓ":ØnÔ´©§æA_VV?bl—èA/FE⣠¢®Ctȸ‚u5íúüùë7îZÜxl¯l»¨¬l¯l»¨¬‚QÛ„æú†ƶ‹Ê ÑÁöƶ‹Ê*µMȾ¯LgÛEe…è`{gÛ» «aõ°_ÍqÝXs]ÜöÚ>ƒ=÷hT7m£}:ý•ik{ ›çÿûú$ðkÆÝ­ÿD}~¹þÇçiÍ“ÀoÃã½ßµÄ„-ôýûÅ|Ýú4ì´mÕ‡Žº˜ŒÚ&?Öß{sVѼ¡uxx>fFó6±œC/Œ.¾që3™–|©.tî £øÊ¬OEöÛÞ]ðüâ\âØêm—Ët«‹,ûlaL»88–tÙ¼èƒÑE¹8›7–vÉNô´!z}ÜâtÜx ¹èEŒ.:©õù´·Ò&z¾ï)2ºàºÅ ±±\Þk»Åu»Îª'Áu)Ÿ³=3ºà:ã”Ôñ8Ð-åÃØ×e’àºõ9¥a<Öß ½2ºà:ã¤P·ç£ ®[ŸêGïŒ.¸.+àÝ:„>Œª2ì߸$¸n}Vgñ=—ÍY£‡z¿gÁuëÓ2c¯—îBŒ.¸.ÇSžÏ‘Ñ×åt=1ºàºõ™±î v@·VĶ£ ®Ëåœí…Ñ×­Ï-¼UVÉ…^]p]6¸.?tV€n®Mäþ@·¸îãÆ^¡Ø/ýë'6ú4ürý¯š“ö`óì¾ßÙ@9¸”úAñ’·@è·‡ƪP¾ íƒmâá ôGÌ“íƒmöïÏîsÛþ<»Ï´½¥“…^ïg:íeCÛ‹˜=0Îî»-Gÿ^¬Ùƒ”ù^ÄìÁúô¼â}·¡GF·¾2ÿ Ý8¿.>NÓúW°Ñ§á—ëÿxAûŒ™y~Ýíá ôt¿šlO–íû̉‰~{øõ±Øœ¶gËöºÇ|¶§¼ŠQÏ_¹®8f̦óë¬3󹿣Ë=#3úëž‘m+ˆ~}øj͘u—í•m¯âá l¯l{¿ü¾Çm×”‚í çiíÓó£ƒíͰ½ô€èׇ_+™Sq¾÷ζwñð„¶w¶]ÌÏ/NÏ»•Ó#=æ.ÀvžŸ·OÏkŒ¶ÃöP ¢ç^Í]Ø_§¬€íuCÛíÓó£kÛ'tËvýúð‹ùºÛÆ@ç{¯¹Î>=¯1:ØØv¡|¨ñÜ{l{Ͻ÷ȶ›èµ×´œ%níáù*Пïÿ@5ú8ûô¼Òç×Åœ/ÛþÞµ‚½.÷ÇÝ6.ìõ¼}~Ý>üŸo«©MË­øŒzµ¶úˆ8zÁgì®gü›ŸQîfïæ)„#|Æ¿]Ïø‹ŸQÏTk7â×6@ýŒ¿<ÏøQ—ÏXóµÐ¾?ã‡È†iøµ¿|͆Àïú9\=ãµ\ú±ÜNÜžÙ‡jî« èÇçpù®¯™UÖóréq"(äuá¼.8œòšžòºp^NyMÏy]8¯ §¼¦g„¼.œ×‡S^¯Ÿñš6_‹Z”×…óºàpÊkÃù¾’òºp^.ßõõWËžô¶¸ùµ0J•Ò²#þ\Îß«…ŠÃ‰{Ìg .î©÷Ôœñ‹ë;?#p¡ü‹ûiñŒÝõŒó3÷˜çó<ÎeÏø·ëñ3÷T枊Ã)¯ë¢Â·ynß÷ºZ³Æûî\óûræú«µòvI†+¯y¶§6þý·mn5è¡SiF§²…‚ÏX]ÏØø¡—³æ­ž;µjÃáêÿ‰Æ3ÞqxfòŸÏx˜Í.û¾]óŸÃ¿=ã‘ö/f±ž±öûzþ‡àðiøõ{ýº³¹æJÏø®üø;™~l—¯åœßbWÞ4üš×‡{ß¾ëçp×ÌZ¯“Æ-]‚'¯y&³vNyMÏyÝ9¯;§¼6Ö›¯/;{òºs^wNymÜg7î§ýP^wÎëŽÃ)¯û¹¼îœ×‡S^¯Ÿ±÷ûÙ=”×óºãpùŒÙ|×-÷·l¸V4ãÛðå£PIrËëq®Zà5‚:p8±Ê8W- f•ÉUƹja0« N¬2ÎU ƒYeàpb•qŽU³ÊÀáÄ*ã\µ0˜U‡jÁ¼a¡^<ë wÇ´ ‡C^ã3꼞žñ•÷“ÕÄ3V×36~F×mün‡¼6Ÿ±}=#äõóÍÝ@mÃá×ëg ¹ß5G×Ïg<äuÊžñ9òÚxÆZîw[B^?ŸñשzÆçp¨ðõ D3OèÚgÄچÉ{‚ñ-Læ¢ñús 8œ¸‡ž¸'0÷NÜ̼îî Ì=‡÷ÏØÆ×TâžÀÜp8qO8Ç=¹'àpâãN¢kùèâžÀÜp8qqßuõØsOÀáÄ=ñ\ÝÃúq8qO÷ÉüÉ8œ¾3ùÜw&ów&ãpúÎäsß™Ìß™ŒÃé;“Ï}g2g2§ïL>÷ÉüÉ8œ¾3ùÜw&ów&ãpúÎäsß™Ìß™ŒÃé;³Þ±YoGÿx¾3…¿3‡Ów¦óýâ9ƒ®þÎNßzFøÎþÎNßzFøÎþÎNß™u<¶|©®ïLáïLÁáô)ç¾3…¿3‡Ów¦œûÎþÎNß™rî;Sø;Sp8}gŒx cà;Sø;Sp8}gèá;Sø;Sp8}gÖ'}•t®ïL5¾3qìó‡Ówf½ƒÿõe³ÎØöÓÄ[Åáô¡g„ïL5Öês®¹âpâðõ»Îéòuxqx58<>nµŸñ9œ8|ýŒ·3B¢‡Ã«Áá%á»þˆ?ÞX”ž8¼®9|럱¸ž±ò3‡×5‡om`<~¸âñw6ãqs®iZ;:Ò~çX«8œø±ãÇÆüØp8ñc;Çù±ápâÇvŽócÃáÄí?6æÇ†Ã‰Û9~lÌ ‡?¶süؘ'~lçø±1?6NüØÎñcc~l8œøÑ8ÃïÚºø±3?vNühì:)Ý7Þ™;'~¤g~ì̇?®ßu)—èâÇÎüØq8ñc?Çù±ãpâÇ~Ž;ócÇáÄý?væÇŽÃ‰xŒÝðcg~ì8œøqœ«‡Åû¾6p8ñã8W?ûBÚO#h‡?Ò3?æÇɇU?ºNmÖŸçÎmàpâÇõ3Æxéž›uêm)žñ#züxc(zFàÇañã†ñøNüHÏü8 ~üº†C?£+g3½õ£yÆðsþqàpàǾâǾ!?ö ‡?öí?ö ù±o8øŸQócßû†ÃwíåǾ!?ö ‡?ÏèåǾ!?šÏø=~¼2>£æÇ¾!?ö ‡?â3j~œžÑâGû]ñø;›ñèäǾ!?ö ‡?†Sýu̇?†Sýu̇?Ò3?æÇ€Ã‰ƒÕ_'?æÇ€Ã‰Ã9~ ̇?†sü˜'~ çø10?NüNõ×=0?.óúêíï{S¸](p¿*N©ëϽR¯ï:ï§«õˆÃḾÞ?Ó¯uÏ×^R}ÜôŒž±á3þíyÆ'ëk»|Îs\b?ã4ürý¯y;=ãs8œHØ—:ûx»'¨zÞu2Þu>cÂáô®éá]§õ»Û3¯‡“ô¬gÌ—¯ §¼¶töµzÆçpéÇô_ÿùûþ×ñQ~NßþýWYüªì¿*âWuÿU¿jû¯šøUßÕůþÞõ·øÕ¯ýW¿ì_ý¿ú^"üœ¾Ÿ_}¨_íþúþúØýõ!üõ±ûëCøë_áñ«ïÅìÏIuõøÕo¿÷˜ø-bâßû¿õoñoý{ÿ·þ-þ­ÿØŸþ?‚ò}ï†RÿqºÎ¡&ú,€Ã·á·äú&.ÆÂ«¸ÐË+zÍ߆ÛèE—+ôz@߆ÛèU7Æ>ŽÇùPßÏÑ[ü6ÜD—íMq¡´œ9|n£ݸ8О߷á6zÕŸŠõ{ßOk:|C¾ˆ¾ 7ÑÕ‡ê3ãö3·ÒWòmø[è·„5T´Ýçßó}ÛÏ–{¿¡—wòÝ~È÷”¿ ·Ñ!ß臨Ûcþ9ÜF‡|7ôôóçf×öm¸‰Nùî@?ÔŸ¥n£C¾;Ð;zú6ÜF¯:ã,ô¶£3.çoÃMt5òÛzïÏs l³ã~ó{Wù~›+[«÷¡‡9¸¯Í8߆ßÐë ]MôÝèÂÐR>4û ¶éáÛpØÆ~`›­n£Û8Ð߸ñm¸lc(¿»DlóÌ÷ŒèÄ6ôÃÝ¡}n£Û8пí›ú6ÜF¯rã“…þ˜Ó=ìˆúÚõm¸Þ5×­£nßy»àºÔ¾ 7щë ôí,®+ùÛp¸ÎPE÷K·¸n¯.žÃoèí®3´›ã>/¹àºýûþn¢×9ЋQQ?‡ÛèÀuôã÷=n£×­UÜW®mƒë¶þm¸‰N\ç@åºÒâ·á6:p½ÕÅsø’ÒÌÇšè¢YõþÞ¿±Mø6Ü´ØÆ@/—l±M߆›èÄ6ýÙ&ŽoÃoèý¶1”ýiû7¶‰ß†›èÄ6ôrÈ÷öm¸lã@ù~Üà¿ ·ÑmúŸ³Mþ6ÜD'¶éÌ6©}n£ÛôslCèÐÇu“mšÁ6{ÆýÃ1OlÓÿŒm>éæÛpØ»+¶)߆ßÐÇ;lºÂÛìsVÏá&:±½Xù^ØÆ~¬mâ·á6:° (ŒW·­¥oÃMtbúmBø6ÜF¶q +¶!t`ÐM¯Ø¦n¢Û€JvUÛäoÃMt`›±ý9ÛŒoïècûS¶¹†ÍØþ8ê¶ôm¸‰®¢îú↩­Ë÷þYÔ~n¢Ã{ÛŸ½÷ÃW†Ð÷þ¿þŸÿýõoüßëÿmÛmäúo\.¯B˜þè .—Äöо†¿¬··Pöá¯+©¯‡¿pz­mþ:9`¡Šú¼?|ÓzøkÞÄÝöðêØZ—Ãëë®5Êcø«àäúY•*„'z>Zµ^^5 u^_EKÆÃ\·¿¸ppÝúÅ…W×¥ñ_]×/.¾º.îãñ?,‡¿º.>Ñã¯Ã³ìq^=a_]÷ŒùØ]èÃ@O‡tËá)èéÕu£¬‡¿º®ížOÙc{:¸î9ü°ë˜OÍxq©ÿÝåðñ;]äW×åõÃçW×¥ÝuùÕuaýð93ã1ÜuùÕu)íÃ_6®_\>¸î9üÕuaqùu»ëÊvü«áåÕuOÏ—WוuЖ×íD]\®+e=qõµÀ5ÅüÚörHØÝu¥)x9|1_·×·¶½¢nø=/®¦#¡>†ç#,‡¿~&žas¸s6¬£îpƒeÚ_\u}a_¯´º hïÃÛÁukÛ¿ß ñ=tqüÕu=®‡çuÿu1¼®§:ã¡®[ÏÇC]·s]<Ôuiùââa6wï¤âa7äõð¸®.bðD]<ÎæŽ}xq|eâ¡x χoºˆÁH؆£,Œq[ßãawÍóñ0›û|ï19ˆ:F#aãa7_×]dŒÍ1Ác_O÷ÅCQš–_Øx˜Í}¾¸Ãîš*ã¡(Í{Æ¥ähã¡(Ýžèåµ,\»î0›[v×'pá}=½_kZ+ãò¶nÀãa7¬]w˜Ím»íÇ Ü5UfsÞ°ù[*.‡÷u¿×Ê«áÇÂùñ™ˆ‡‰Ö¸F?L´ÖçðìqÝa¦4=‡¿ZU×/®«BñPQçuؼVÔ±ìïý0Sjð|Më)¯x˜)­k×ÕçìùðõõÙ×as˜)-;UfJ³ñðãøzïÕz^SåkÙöö?¾Vêa=[eû“i•úº ŒÇ‚|Ï÷Ö=)s¨»÷ɇØ7G;S{ÿuYG]ÏëYâØSçkÛ{3ÈêP+¯§¸ã÷Âù>|xÖ ã¡p.ûÃÏ’V<ÎO¢žiŸ8íÚnû±V6¾¥ÑqrÉ6iÛÖL›%ñ:eÒ¥ëcxr”éPïï=JâõÜEÚŒ”I‡’x=Í›%ñþÞÓ6åA:”Ä{/“Ž%q_ëŠ:Jâ´~øCIÜŸÃ==l:”Äy·=4GM›%ñóÅ5 ëᇒx_@O‡’x]Ó¦CI¼7àé¨i(ëáy½´‘Žš†µç%ñ¾œ—¢+êŽÓ±o\:Ô´ë60%+ee¡~(ßö:*¶ºF?¬¿ïŸ‰t¨ëÖ5mʇ9ű§Q×ÃÇz]& ¾¾¶ý°þ¾¥éP®ç¨SùVù>†gGQšJYu*ÁL:T•uÏ÷CUi¡uûŸªGºŽó´ÏáÑ1o“ª!ÓJ‡ªr-H‡ªr_KÕuµ­çiSu¹îXUîQw¨*×S^©}›Ñ| Žn"½V•ϵ‰ôZU^;£õðb|ßåæz9/5CºŽEéš.ëïûŒYê›c~>õ`|ßó¿ëv 'ƒ÷âäP­–µç»!ÓJÇùßuÌ[ëï©wQjÚ}z?jÚ²þDjÚ¶³Í¡¦]7#éPÓ–'z>vhËᯮ;] `&&ƒŸL{œÿ]W•c¬›‘¼yTùPùÖçðè¨iófÈ´ò–sVùPùî=lÞ»É@k¶É‡bwýË1¬§:ó¡Ø]ÓEކL+µë¨;T¾{i”cu¡[®‹ž„ÍÑr]Ú3äùP8ï•U>Ìÿ†õÿNç]–™“§$Î5ï3æó¿Ùxø×’xì®;ªy×®;ö…•œ=³…ùu2ø¹¤•ó¿ë•‘üÚM„½ɇn¢¬óýØM<ÞSç×n"ï“ù8}ÜÖÃÇëÃþÞ‹GCžK0bþ¥›y=w‘KZÏQçC7±– çC7ÑÓ>¼ëÅåpë3qè&Ö­P.c½:Ý„ñ•9ªyŸÃ_'Z×¹\%ñþâŽsÔk×»‰çðæuÔº‰]ùj’õ¶‹|ì&ö°i®„=HKú^]´ƒ`fÍ6‡9ê]g•_»‰°. ók7wU~í&ÒºÉ5ïx•ç­ÅùÐMì³Fùµ›ˆÆÃ¤%{û7IÄrxZÏåC7Ñ×ÿÚMÄ}q!¿v%Ã_¹norÿ&}[]¼vq½¬“_»‰˜ŸÃ=;òk7¶Ýöc7±~øal5ʇnb=[˜ÝD¢÷ãbÕrøXßËæ©ëÊk7Q÷F¬»‰²žÖ³Äå¨&1†—W=‡WGXÝÄ>WYŽÝD]Ýj´‹KðÔuå¸7°îã£.V7QÝÄš¨Ëk7w¦-‡n¢ŽõpcÒ©„î²ÝhÿË¡›X³M‰Æ|]9vë÷~ì&žÃ=ÝD9JKö˜ž’¸¼váó‡n"¦õð±nÀËqoà’ëÊ¡›Øðrè&Ö-p9HKvEkqí ,ǽ»çSõ¼¸£´dùc7±¦‹£´dž7G3R²Q—슺ÃÚÄÞM”ì™`/‡nâéùìéaK6v¤–Ü=t‘ n¥x6}”ãÚÄn{ñL°—ãÞÀ=hÝÄz¼º‰'Û×&Œ‡7¶—â™%.Ř¯+. y©a=[Xªë []Z¥z¶—Z¬áÕ5¼­ç.JõÌœ”j,&–æÙ;PZ0¨Òµ6Q¬½¥e×ðb ÷lp+­YÃ=ÜÊñö»Ýöî*Nº±˜XŽ{×)Ó“…ž+.ËáÅ ‹ÃÚ„Á6¯ÝDÜ;©òÚMT9t»Ò© Ïòrܸ§ÌQo³NØÃÚÄ3eFö¤Ì0Ëk7Ö­P× Ï>èrè&ö²°»‰¥çëambùºy&Øëf,a×c7Ñ×ÃËÚöºy¸®nÍB÷L°×ÍàºñRkëŒÝ÷õµ›ˆkåC=tû*p=tk¶©Ç“Fö÷£ƒ¨kLÖðì^¬ážYâzì&žÃ=%qÆžÐzÜ0¹F?t¥ïÃ=ì5‰š<‹‰õØM<Ñ«cê£Ö&vª¬É#ˬGEÒŽž=ìõÐM<=è&Ö]dÍFI\ÝÄúYÝDÞÙæÐM¬±57ëá»C W³ÑÃÖ×n"®¿qõÐMìÍH-žã2j1„õµ›Æg¢íu)ê¡›˜Ð»£<¨Å˜`¯õÛ®€ÕðjœoSÝ„6‡nâÉ´‡nb={PÝDÝy¾~ÛÕ¿ÞŒŒ«ž¶¶½>]w8id­%®‡nâùð‡nÂH™C7ÑöŒ;êç×/®X}í&B[³Í¡›¨{ʺ‰õê@mF[kk‘XíÆÑ@Õ¥tªÖÚD=tc]UDúû’V}í&BY¿÷ƒÒ©Ü3ÁÞÝÄ“.ÝD6Þr]ñ,&¶²<úúª+a«1_תg–¸Yk͵6Ñj1l¯‡„]‡Íq7îþâªg‚½U+a›+a‡èìQ×<=lkÆTgk.®{í&Ò¾¹¹Ö&Z3±­u—íÆá{íxnΚ绱"Öºçð½ÖÓ2[÷Ȱ[7æëÚñÜB½åÇðo'˜,‡Zâ66ÇwÆTgßÎ’XOëô6<{ÀÛ8,±gœkßD;tûzs[ØŽJ§ýj£Í3sÒ‡è”}x<ŠÏ–ÃÓú+ÓkÛzø·Ãëkx[“Uß<®ë›±˜Øçæ,æ‡` ŽÙÂ~<½íÃ=S=‹‰ý¸6a 7Jâ<³ÄýÐM<Ñ_»‰¸žtêÑ8{¿¿vq‹ëáé8þîQ°wëô«c5°Gcõ¿Çƒ ¶¯‡»uºKéÔ_»‰¸«¸û¡›0l?t;Q÷C7±žŸïÉr]òlêìÉëôC7±n…úQé´?|öÔu=XÏž/l·”N={¾°=%qÏž##z6±=wç_»‰ø$ê⊺C7ñüʸ”NýÐMì{ú¡›X‹û¡›Øç.zñèëz1ôu½xT½|;õê>üp úZOÛ_»‰ç¬Q¯ž¶[§ ÷C7aõáôí9Ü3_×_›†°4Ú_ ý´­Ñ_ òúD­¨«1üµ$ž†¿”ÄWpcørYçvÁÎ˸lËB§á/WO]su+_E¾ÞÏsí?Çõk4–Ãë4<ä¯S’?ÿCs¡÷—î{|òóçø{®“Ã~‡üaø¯©ü¸Küý2ðë¿Ç~!öëðç…g×Ê †/aÛë]d×4*-nKôça׌5í—J}¸l^¿tu]Ž_‡kÞäzqÏ;„nèùkãùí?ü;Íž«q,þßÇ+ˆÂå­CëƒÈŽwR¬^[¡`|aÔ4üu–¸Ã_ó½ï\÷Úãà‚d´À¡6‡*z™ý8ë|¨ëÖÃS]ËuB<òu«*?þóÿüþûv³Ó¿ÿ¿Ÿ½®¿Ê·Ë‘>=õýWÝõ«áùÕQÌdü*¸~]¿J®_eׯŠëWÕõ+—ïƒË÷Áåûèò}tù>º|]¾.ßG—ï£Ë÷Ñåûèò}tù>¹|Ÿ\¾O.ß'—ï“Ë÷Éåûäò}rù>¹|Ÿ\¾Ï.ßg—ï³Ë÷Ùåûìò}vù>»|Ÿ]¾Ï.ßg—ï‹Ë÷Ååûâò}qù¾¸|_\¾/.ß—ï‹Ë÷Ååûêò}uù¾º|_]¾¯.ßW—ï«Ë÷Õåûêò}uù¾y|¶àúUtý*¹~•]¿*®_UׯšëWÝõ+ïƒ«Æ ®3¸jÌàª1ƒ«Æ ®3¸jÌàª1ƒ«Æ ®3¸jÌàª1ƒ«Æ ®3¸jÌàª1ƒ«Æ ®3¸jÌàª1ƒ«Æ ®3¸jÌàª1ƒ«Æ ®3¸jÌàª1ƒ«Æ ®3¸jÌàª1ƒ«Æ ®3¸jÌàª1ƒ«Æ ®3¸jÌàª1ƒ«Æ ®3¸jÌàª1ƒ«Æ ®3¸jÌàª1ƒ«Æ ®3¸jÌàª1ƒ«Æ ®3¸jÌàª1ƒ«Æ ®ê1ºx"ºx"ºx"ºx"ºx"º fŸ'<ñ]¹]¹]¹]¹]¹]ù]ù]ù]ù]ù]ù]ù]ù]ù]ù]=_ôe­«ç‹®ž/6—ï›Ë÷Íåûæò}syµ¹üÕ\þê.u—¿ºË_Ýå¯îòWwÅjwEawyµ»¼:\^.¯—W‡Ë«ÃåÕáòêpÅêpyux¼z¼HÄúUpý*º~•\¿Ê®_ׯªëWÍõ«îú•Ë÷®ùœäšÏI®ùœäšÏI®ùœäšÏI®ùœäšÏI®ùœäšÏI®ùœäšÏI®ùœäšÏI®ùœäšÏI®ùœäšÏI®™šäšƒI®y“䚟H®. ¹º€äš-H®^!¹f ’«£H®Ž¢»¾îÝõuコ~Õ\¿ê®_¹l\Õ¿~ÿý¯ÿú×ÿoÿ? íQœª‹DyLP-1.10.4/Data/Netlib/standata.mps.gz0000644000175200017520000002566510430174061016112 0ustar coincoin‹åK®9standata.mps¥Ñ–ã6ކïçœy‡zõ)ý)û²«'s6›J''Qfgöýd«\6DÈ$À¹jÇ¢B_ÿ`û§¤ß~ýéEþûsûöãß¶oÿÛ¿ýïŸÿÛËÇwßN§åtús‘OPŸH}bõ©¨OU}ú<'Ô9¡Î uN¨sBóöéí÷¥Éóíw¨O ÔwêÓBê;õiaõú´õú´Tõú´,mÖPŸ¨ïÔ§…ÔwêÓÂê;õi)ê;õiQÄC=7UÏMÕsSõÜT=7UÏMÕsSõÜT=7UÏMÕsSõÜT=7UÏMÕsSõÜT=7UÏMÕsSõÜT=7UÏMÕsSõÜt=IåI*ORy’Ê“Tž¤ò$•'©õ©ªO =·sBêœPç„:'Ô9I“Ô9I“Ô9I“Ô9Y“Õ9Y“Õ9YóöéŸß?>üwûô³úôÛÖ~Úþ¸úññéÛçwÿóùéýsÜÓgrí'¨Otûôó~ý¾>A}"õ‰Õ§¢>Uõé~ýösBêœPç„:'Ô9I“Ô9I“Ô9I“Ô9Y“Õ9Y“Õ9Yóöé—_ÛzþòC}úµ­çÇw¤¾+껢¾kêy;'Ô9¡Î uN¨sB“Ô9I“Ô9I“Ô9I“Õ9Y“Õ9Y“Õ9oŸÞÿóÉø½ïßÛz¾«Z¿«ZIêHRG’:²¨#‹:²ýô• T.P¹@å• T.P¹@å• T.P¹Ê…T.¤r!• ©\HåB*R¹Ê…T.¬ra• «\XåÂ*V¹°Ê…U.¬r¹}ÚþóÓ·?–û»~‚úD÷.³½–?õi?òWùîþiÿî‡úî‡|÷u¨sBêœPç„:'Ô9I“Ô9I“Ô9I“Ô9Y“Õ9Y“Õ9Y“Õ9‹:gQç,êœE³¨suΪÎYÕ9«:gUç¬êœíw_„@E!P„@E!P„@E!P„@E!P„@E!P„@E!P„@E!P„@E!P„@E!P„@E!¤!E)BHBŠR„"„!¤!E)BHBŠR„"„!¤!E)BHBŠR„"„!¤!E)BHBŠR„"„!¤!E)BHBŠR„"„!¬aE+BXŠV„°"„!¬aE+BXŠV„°"„!¬aE+BXŠV„°"„!¬aE+BXŠV„°"„!¬aE+BXŠOß{ÿëן?ܽ|ýÈöïK¹ÿ„·ÿÐ÷ò_ע݂ë(šuû nÿ1®9êe9½t‡¿ìÃ!ÑþñÏ(™/Œ™@æÛ9êeÿ×nóN¥NÑá/´WR!Œ¦£B2‰áÿ´” ‘Q!’ ÙGÑô¨Û«ûϬ½„ɘ¯ GbøÇ?že¾lÌ„e¾œ!‚¥œ!‚¥B<š"’áH ?ŠT¨*R!û(šuûÙ|ÿ½—p1æ+Ñ~:U™o5fRe¾5CD•BÔ U*TGS¬F…d8ÿºv“Æèž£hzÔÍÙ­‘‘ìÃèؽ”Øð¯®Ý†2ºÆð(_×?v ìÑHöat ìŽRløW×ÀnÍ]ÃsMºY]»é5’}]»KþÕ5°›F×åëÁáÇ®ÝúÉ>Œ®Ý+Œ ÿêØ Y£kxŽ¢éQ7s·3G²£k`÷?cÿºvËÙèã|]#8üØ5°›º#Ù‡Ñ5°»À¡áw3®ýÓ!ùŸ»_t†ãpÔäçã _9ÞM{øÝy,ðÍ»ýÏõ„×å8üîqí×`9­÷£þõm–㻕£ wæøRO¨Çá9¾`=U©6†Õ–‹ãbíÃi8ù®s”!#È>œKJV*/»õe¿[bÓj¿¼”Óëù8üîsˆ˜åønå(ÃßÝ9ò‰—zþ£&‚‡Õ–‹ÅÆÅÚ‡ƒˆ2¼—´X©¼ì†§=ün„ΪS½œ×r~÷ºDÌr|·r”áïÎ?³$®Çá9j"ê°Úr±êDÐÑþ©ß0ŽÃQGAïQý`2ünlgú\ýÀÊñÝÊQ†¿;sìõ¸úA¿ÚªÀèØ·Èý ”ê0úö7† SÙûÁdø};C¦Àլ߭eø»;ÇÇ~W?èW[õýûÆ(£ôRýF?À¾ßÊôa*{?˜ ¿obÉô¸ú•㻕£ wæØëpõƒ~µU?°Ú?õûM‡ãpÔQÐûAT?˜ ¿oJÊôrõ+Çw+Gþî̱×ÈÕúÕVý€Œ~@ûöF£ôRý€Œ~@û®ICЇ©ìý`2ü¾-ÓÈլ߭eø»;ÇÇ~@®~Я¶êdôÚ7µý ”êdôÚ÷Ê‚>Leï“á÷ ˆ™~@®~`åønå(Ãß9öú¹úA¿ÚªX‚ÎíŸúý€§Ãq8ê(èý ªL†ß7”fú»ú•㻕£ wæØëìêýj«~ÀF?à}kºÑúG©~ÀF?à}Ç»!èÃTö~0~ßFœéìêVŽïVŽ2üÝãc?`W?èW[õ6úï7$ý ”êlôÞïs0}˜ÊÞ&Ãï›Ç3ý€]ýÀÊñÝÊQ†¿;sìõvõƒ~µU?è^¬=Ç¿@÷o÷™ô¦x¿[¥ýSd¸ø*‡Å1üv?Lû§ÀðŸo7Úí·Üy¼“ÎðÎÜ_®Wë~»^8$:2Ñ1#ú=³NŽC+¢3Üš;ÉKtd¢cFô{f‡Ig¸5w6’—èÈDÇ<:Œè÷Ì:9 ‡ÎpkîÅH^¢#óè0¢ß3ëä8ôA:í¹W#y‰ŽLṭÈ~Ϭ“ãÐVè ïG—%2Aà ²Ü~Z“?ÍŽ£jc®Ú0dû ÏÁè˜G‡ýžY'Ç¡aÐ>Sm²‹nŽžè˜G‡ýžY'Ç¡Ñ>Sm²‹nŽžè˜G‡ýžY'Ç¡-Ð>Sm²‹nŽžè˜G‡ýžY'Ç¡[Ñ>Sm²‹nŽžè˜G‡ýžY'ÇáÿáÕF7O¸‚,·ÀßäOsâ¨Ú4Wm2d—öÇ?£cFô{f‡?ëw†ÏT› Ù¥nŽžè˜G‡ýžY'Ç¡ÛÐ>Sm2d—º9z¢cFô{f‡?Þw†ÏT› Ù¥nŽžè˜G‡ýžY'Ç¡§Ð>Sm2d—º9z¢cFô{f‡?Ñw†;T›º©x‚Àd¹ýLý&š»GÕæ¹j³!»¼? 'óè0¢ß3ëä8üñ½3|¦ÚlÈ.wsôDÇ<:Œè÷Ì:9=Îð™j³!»ÜÍÑóè0¢ß3ëä8ü‰½3|¦ÚlÈ.wsôDÇ<:Œè÷Ì:9ùï Ÿ©6²ËÝ=Ñ1#ú=³NŽÃÒ;êÍÝT›‘žŽî_¿cOÇþœ¹QO‡ÑÓ±?˜nÔÓaôtìO¤õt=û#ìF=FOŸ°Y 6Ç÷и{:æ=FOGïÝÓaôt<×ÓÑý pìéØ8êé0z:ö§ Žz:ŒžNûÃG=ŒžNûÓG=Œ¶HûƒeG=ŒžÞ¿iÇÝÓiÞÓ'ÉߟÕ8êédôtÚî8ÒM2z:õnÒ=ŒžNÏõtÚŸlôtÚŸ9êédôtÚ+9êédôtÚŸ'9êédôtÚ@9êéd´Å Úd =¾ûÈÝÓiÞÓ'ÉgÙ$a“Fl’Á&õÙŒôtêþõ;ötÚŸ :êédôtÚ%:êédôtÚŸ!:êédôtÚ::êédôô ›Å`s|”»§Ó¼§“ÑÓ©w”îédôtz®§S÷/À±§Óþ8×QO'£§Óþü×QO'£§óþ8×QOg£§óþü×QOg£-òþ€öQOg£§÷o¼r÷tž÷ôIò÷§ëŽz:=÷ÇñŽt“žÎ½Û¾tOg£§ós=÷gé=÷çúŽz:=÷z:=÷'z:=÷Gz:mq‚6hï s÷tž÷ôIòY6Iؤ›d°I}6#=»ýŽ=÷g9z:=÷‡?z:=÷§>z:=÷ÇDz:=}Âf1ØßËæîé<ïélôtîÝ˦{:=ŸëéÜý pìé¼?€{ÔÓÙèé¼?±{ÔÓ»Ãÿé.Ü>¼Ílù¨|;§Þß2÷p:õêèþǾàía3À×ðÎ.‘žføÃ–Ú÷Þ}T´”f8$:FÑaD‡D‡'úUÔnÃÿ6›ûcòt:—f¸ücôàûÜ!Ñ1ª<ŒÊC*Lå!ÉcTy•‡T™ÊÏæ>©ü,ùIåI¢Ó¨òdTž¤ò”©©ü,ùIå«D¯£ÊW£òU*_3•¯’|U¾•¯Rùš©ülî“ÊÏ’ŸTþ¾)âíaS„ZÛÀXÛ ·ubXù&ù}OÅÛÞ µ¶±¶AoçÅ0zݯû×ÚÆš{§tõDjmc%o^÷}ÇÀÛÃŽµ¶±¶Ao_¯òä1ª<ŒÊC*LågsŸT~–ü¤ò$ÑiTy2*ORyÊTž$yUžŒÊ“Tž2•ŸÍ}RùYò“ʳDçQåÙ¨N<_wM†Û3ÌÄ^wM†Û3YŠ\sÝ5ÞÙît\8ñ|Ý5ÞÙu\8ñ|Ý5nÏ2{Ý5nÏd©rMÌu×dxg#ÔqáÄóu×dxg»ÔqáÄóu×d¸=ÈLìu×d¸=“Ï…Ó«µ¿ëqwÎ'´K¢WkçÖãpâûæ´Ïá[ÝõÀ„ýkøãKô·&GÏ‹Í å8üñ­ ‡ ÔqÝPNçãðÇÇD‚pij—o=]Êqøãs+ ÐWkŸœM„dˆ€ p!"à"B2DÀE„dˆ€‹ˆÏ…ü«µßp¢@F#°5Ñã—F`krŒk\Ñd4.€h2—FÈ!" D C\D@ˆ@†¸ˆ€ p!"à"âó–¯Öþ׉Fhe4‚¶&z\#¨!ÂØâ»59Æ5‚"Œý,¢”Ñjˆ0ÌÑÊh5D˜ÿ¾µöO4Bˆ@†È"!." D C\D@ˆ@†¸ˆøü¡ãÕÚ=ÑàŒFðÖDk»4‚·&ǸF°K#X4‚3Á.`ÑÎh»4Bˆ@†È!"à"B2DÀE„dˆ€‹ÈŸ?¼½Z÷L4¢ˆF”ŒF”­‰׈ÒAãÛ ¶&ǸF”†ï¥(( 46ŽE#JF#JCY?`¾Z÷YL4Bˆ@†È"!." D C\D@ˆ@†¸ˆøü!øÕº_e¢U4¢f4¢nMô¸FT—FÔ­É1®Õ¥U4¢f4¢º4¢ŠFÔŒFT—FÈ!" D C\D@ˆ@†¸ˆ€ p!"à"âêk ækð‰•¯˜¯Aíð­‰îzŽô"·üïþB¾†¾³ÿk¸Ã×@Ì× Óå8Üák èk,å8Üák æk4D@ˆ@†È"!." D C\D@ˆ@†¸ˆ¸úˆù­F@4ÀÖDk\­É1®piD#Ѹ4¢Èh\!D C„dˆ€ p!"à"B2DÀE„dˆ€‹ˆ«¯˜¯Ñj‰FPF#hk¢Ç5‚"l_!_Ci5Dؾb¾F«ÔaûúK9wøˆù­FÈ!"à"B2DÀE„dˆ€‹ÈW_1_£ÕàŒFðÖDk»4‚·&ǸF°K#X4‚3Á.`ÑÎh»4Bˆ@†È!"à"B2DÀE„dˆ€‹ÈW_1_£Õˆ"Q2Q¶&z\#JC„ík äk(( ¶¯˜¯ÑjDiˆ°} }¥‡;| Ä|V#„dˆ€ p!"à"B2DÀE„dˆ€‹ˆ«¯˜¯ÑjD¨¨[=®Õ¥ukrŒkDuiD¨¨.¨¢5£Õ¥B2D@ˆ@†È"!." D C\D@ˆ@†¸ˆ¸úó5ÊÁ× ˆ¯ñ1hc‚b÷k¬§zîð5(âk|Úiëq¸Ã× ¯q>Q9wøò5^O\ŽÃ¾Å|rð5(âk(" D C\D@ˆ@†¸ˆ€ p!"à"âêkPÌ×(_ƒ"¾†ÖlMô¸FÀ¥Øšã—F@4€K# ŒFÀ¥B2D@ˆ@†È"!." D C\D@ˆ@†¸ˆ¸úó5ÊÁ× ˆ¯¡5‚¶&z\#¨!Âö5(âkh †Û× ¯¡4‚"l_ƒB¾†Òjˆ°} ŠùåàkPÄ×Ð!D C\D@ˆ@†¸ˆ€ p!"à"âêkPÌ×(_ƒ"¾†ÖÞšèq`—FðÖä×vi‹FpF#Ø¥,Á`—FÈ!" D C\D@ˆ@†¸ˆ€ p!"à"âêkPÌ×(_ƒ"¾†Öˆ²5ÑãQ"l_ƒ"¾†ÖˆÒaûò5”F”†Û× ¯¡4¢4DؾÅ|rð5(âkh"!." D C\D@ˆ@†¸ˆ€ pqõ5(æk”ƒ¯A_CkDÝšèq¨.¨[“c\#ªK#ªhDÍhDuiD¨¨."!B2D@ˆ@†¸ˆ€ p!"à"B2DÀEÄÕ×à¯A¯_ƒ#¾ÆÇhÒ¾Ç|$ŽÃ¾‡|O?í8Üákpì~ Uǯá_ƒ#¾ÆÕ´;wøò5Z" D C„dˆ€‹È"!." D C\D\} ùJ# ŒF`k¢Ç5.ÀÖä׸4¢Èh\Ñd4."!B2D@ˆ@†¸ˆ€ p!"à"B2DÀEÄÕ×௡4‚D#(£´5ÑãA ¶¯Á!_Ci5DؾÇî×Pulˆ°} ŽøZ#¨!Âö58äk("!B2DÀE„dˆ€‹È"!."®¾‡| ¥,Áà­‰×vioMŽq`—F°hg4‚]Á¢œÑvi„ "!B2DÀE„dˆ€‹È"!."®¾‡| ¥E4¢d4¢lMô¸F”†Û×௡4¢4DؾÇî×Pulˆ°} ŽøZ#JC„íkpÈ×P!D C„dˆ€‹È"!." D C\D\} ùJ#ªhDÍhDÝšèq¨.¨[“c\#ªK#ªhDÍhDuiD¨¨."!B2D@ˆ@†¸ˆ€ p!"à"B2DÀEÄÕ×(!_ãõʱf¸§Ú“Y•1Q‚Ï¡:ÜîQ\¾F‰Ý¯¡o AÄò5JÈ×x©§å8Üák”¯Qõc»¸ bù%äk´D@ˆ@†È"!." D C\D@ˆ@†¸ˆ¸ú%äk(€h2­‰×¸4[“c\#àÒˆF £piD#Ѹ4Bˆ@†È!"à"B2DÀE„dˆ€‹ÈW_£„| ¥$A ­‰×jˆ°}»_Cß‚&ˆåk”¯¡4‚"l_£„|ªÛÅMË×(!_Ci„ "!." D C\D@ˆ@†¸ˆ€ pqõ5JÈ×PÁ¢œÑÞšèq`—FðÖä×vi‹FpF#Ø¥,Á`—FÈ!" D C\D@ˆ@†¸ˆ€ p!"à"âêk”¯¡4¢ˆF”ŒF”­‰׈Òaû%v¿†¾)MË×(!_CiDiˆ°}ò5ª~l7A,_£„| ¥B2D@ˆ@†¸ˆ€ p!"à"B2DÀEÄÕ×(!_CiD¨¨[=®Õ¥ukrŒkDuiD¨¨.¨¢5£Õ¥B2D@ˆ@†È"!." D C\D@ˆ@†¸ˆ¸ú5èkœµ¯Qcï×xU?ç7ÑN×ùtîð5jÈ×(§µ‡;|ó5.§rîð5jè9T‹ž 7A,_£}³ö5jìý¯êçü&z˜¸ˆ€ p!"à"B2DÀEÄÕרA_ã¬}{¿Æ«ú9¿‰×¸4[“c\#àÒˆF £piD#Ѹ4Bˆ@†È!"à"B2DÀE„dˆ€‹ÈW_£}³ö5jìý¯êçü&z\#¨!Âö5jÈ×PA ¶¯Qc¾ÆåTŽÃ¾F =‡jÑ3á&ˆåkÔ ¯qÖ¾F½_ãUýœßDk„‹È"!." D C\D\}ô5ÎÚר±÷k¼ªŸó›èq`—FðÖä×vi‹FpF#Ø¥,Á`—FÈ!" D C\D@ˆ@†¸ˆ€ p!"à"âêkÔ ¯qÖ¾F½_ãUýœßDkDiˆ°}ò5”F”†Ûר1_ãr*Çá_£†žCµè™pÄò5jÐ×8k_£ÆÞ¯ñª~Îo¢Ç5ÂE„dˆ€‹È"!."®¾F úgíkÔØû5^ÕÏùMô¸FT—FÔ­É1®Õ¥U4¢f4¢º4¢ŠFÔŒFT—FÈ!" D C\D@ˆ@†¸ˆ€ p!"à"âêk¬A_£j_cÞ¯¡ß¾>÷~Õåk¬Ï½_cuùësï×X]¾ÆúÜû5V—¯±}ª}5z¿†~oøúÜû5V—¯±>÷~Õåk¬Ï½_cuùësï×X]¾Æô5ªö5Öèýú½áësï×X]¾ÆúÜû5V—¯±>÷~Õåk¬Ï½_cuùkÐרÚ×X£÷kè÷†¯Ï½_cuùësï×X]¾ÆúÜû5V—¯±>÷~Õåk¬A_£j_cÞ¯¡ß¾>÷~Õåk¬Ï½_cuùësï×X]¾ÆúÜû5V—¯±}ª}5z¿†~oøúÜû5V—¯±>÷~Õåk¬Ï½_cuùësï×X]¾Æô5ªö5Öèýú½áësï×X]¾ÆúÜû5V—¯±>÷~Õåk¬Ï½_cuùkÐרÚ×X£÷kè÷†¯Ï½_cuùësï×X]¾ÆúÜû5V—¯±>÷~Õåk¬A_£j_cÞ¯¡ß¾>÷~Õåk¬Ï½_cuùësï×X]¾ÆúÜû5V—¯±}ª}5z¿†~oøúÜû5V—¯±>÷~Õåk¬Ï½_cuùësï×X]¾Æô5ªö5Öèýú½áësï×X]¾ÆúÜû5V—¯±>÷~Õåk¬Ï½_cuùkÐרÚ×X£÷kè÷†¯Ï½_cuùësï×X]¾ÆúÜû5V—¯±>÷~ÕåkœŸ»_ãó5Î'(câó5·ÇX]¾Æ9æk\¾ÆÙåkœc÷k¬':wøçÐs¨åâ&ˆåkœŸ»_ãó5" D C\D@ˆ@†¸ˆ€ p!"à"âêkœŸ»_ãó5ZÀÖDk\­É1®piD#Ѹ4¢Èh\!Däï×8Ç|V#„dˆ€‹È"!." D C\D\}ós÷kœc¾F«´5ÑãA ¶¯qŽù—ƒ¯qvùçØý­FPC„íkœCÏ¡:”‹› –¯q~î~sÌ×h5Bˆ@†¸ˆ€ p!"à"B2DÀEÄÕ×8?w¿Æ9æk´Á[=®ìÒÞšãÁ.`ÑÎh»4‚E#8£ìÒ!"¿Æ9æk´!D C\D@ˆ@†¸ˆ€ p!"à"âêkœŸ»_ãó5Z([=®¥!Âö5Î1_ãrð5Î._ã»_£ÕˆÒaûçÐs¨åâ&ˆåkœŸ»_ãó5Z"!." D C\D@ˆ@†¸ˆ€ pqõ5ÎÏݯqŽù­FÔ­‰׈êÒˆº59Æ5¢º4¢ŠFÔŒFT—FTшšÑˆêÒ!"¿Æ9æk´!D C\D@ˆ@†¸ˆ€ p!"à"âêk\B¾Æç»à•¯q ùÚÙšè>"._ãâò5._cy=>‡êâò5.Ͻ_ãâò5.!_ã¢_GÂMË׸„|–È!"à"B2DÀE„ˆüû5.._ãò5.úu$"®¾Æ%äk(€h2­‰×¸4[“c\#àÒˆF¤ß¯qqù—¯qѯ#ñh„ "!B2DÀE„dˆ€‹ù÷k\\¾Æ%äk\ôëH<A¢”Ñ ŒFÐÖDk5DؾÆ%âkh †Û׸<÷~‹Ë׸„|‹~ 7A,_ãò5”FÈ!"à"B2DÀE„ˆüû5.._ãò5.úu$"®¾Æ%äk(`ÑÎhoMô¸F°K#xkrŒk»4‚E#Òï׸¸|KÈ׸èבx4Bˆ@†È!"à"B2DÀE„ˆüû5.._ãò5.úu$(¢%£E4¢d4¢lMô¸F”†Û׸D| ­¥!Âö5.Ͻ_ãâò5.!_ã¢_GÂMË׸„| ¥B2D@ˆ@†¸ˆ€ p!"ÿ~‹Ë׸„|‹~‰ƒˆ«¯q ùJ#ªhDÍhDÝšèq¨.¨[“c\#ªK#ªhDúý—¯q ùý:FÈ!" D C\D@ˆ@†¸ˆ€‘¿ÆÅåk\B¾ÆE¿ŽÄ$âÿþóëÐ?¼~ü÷QÏ÷ÿ|žîXÙù¢[‡á4Îöðþüã㨥¹0åõõ:Ïë8|ÑNG½ýö×|Nõ¯ß_®¾~ùí#Ò¿—öoÀòuÎÇ£ þž”ÁQä8 :âËBý£tÄep.qY×ÞQäš#¹æH®9²kŽìš#»æX\s,®9׫kŽÕ5Çêšã'«p± «p± «p± «p± «p± «p± «p± «p± «p±:™ã÷O×-¤s®ïŸrî9Š\G•øøWVç¨â:ªºŽ::•ã9’kŽäš#¹æH®9>õÏ7GýòöׇÆuYê\×£z?éèsýücy\V<œë_ßúGó‚+/8òzû‹\ç¢î¹ôQ?ÿ ×É5GvåÅ®9×¹ŠkŽÅ‘ý¿¾×«+¯êÈë‹U¸XÅtŽKw¥Ûc ×QpE®s‘kŽäš#¹æÈ®¼Ø5Çâ:Wqͱ¸æX\s¬®¼j7¯ž®ª#½öÂô¨/VÉÅ*¹tõ1bUr±J.VÉÅ*M5‡•øb•\¬’KWçõ*®9׋ë:VW^Õu?Ye—®²KWÙÅ*»t•]ºÊ.VÙÅ*»Xe—®²‹Uv±Ê.]e—®²‹Uvé*»t•]ºúpÔO?þñmûö÷¿ý?¦úWÓ¬DyLP-1.10.4/Data/Netlib/stocfor1.mps.gz0000644000175200017520000000436110430174061016041 0ustar coincoin‹æK®9stocfor1.mps¥›Írã6„ï[µïÀcrK03ÐÑÙu²©rì”íM*ïÿ"‘iY`ƒmëd®Œê¯½âðîoþº®¯§ç‡o¿?<.Ó//?ý8ÿøë×/ÿ>}ý2ÝOÓ›ÇÎ?ÝMÓo?ï¿Çã²ÙJ°%°¥°e°•×­3Äãí·÷ lØŠ°•`K`KaË`ëš÷ߟ·wß`‰Ç4 Ð(@£4 Ð(@£4 Ð(@£.éÏ¿ß=üûš÷Çeëš·¶ ÀÚFh¡m„¶ÚFh¡m„¶ÚFh¡m„¶ÚFh¡mÜ´Å~ñ˜ m‚¶ Ú&h› m‚¶ Ú&h› m‚¶ Ú&h› m‚¶ Ú¦M[lmÚ ´h+ÐV ­@[¶mÚ ´h+ÐV ­@[Ù´Åñ¨ÐV¡­B[…¶ mÚ*´Uh«ÐV¡­B[…¶ mÚ*´ÕM[¤ŽGƒ¶m Ú´5hkÐÖ ­A[ƒ¶m Ú´5hkÐÖ ­mÚ®ë¾=ÜýüëþåÀs~}»»yz:ÿrà™6¯ežÊ4ßþ»Îõò·‰|ùÃ|Š–^¶ÞðÛÚ×7êåov“‘æ4•Y»yÃfÝ,OWø´ þü÷™ëå^|òáO:G~9ÃÛf¹\áe|X^ÆðJàÅ…_Nâǘ^¯ðºÞd®—sx#ðê‡d³xðg!˜e³Ü®ð¶þ”çz9‡ÏÞ|xÍspáƒÍy³<_áó.øóTëå‡Ï>üù×ÝacÔ·öéùæùvÙ¤·ð ÖQƒdwy¨á7¿6¿õ²<’ÞÜ<”f ÖË}”vn¶é½Á·IO$=Ó…¤÷&×&]HºŒÓ•¤÷FÏ&]IºŽÓ¤÷fÇ&ÝHºÓ3Iïíü›ôLÒó‡Ó»¹»yÝg_¾®Nø:ô\á° +„òП\p°oT#”¯C=ÕˆD5BùvÓSHT#”/°;àÕ O><ªF$ªÊ÷íðj á•À‹ _©F$ªÊé=ðµj áÀ« _©F$ªÊÙŒ=ðµj á37U#ÕåäËøF5>Ÿ}xTHT#4³®±€HT#”Ó-D5B#$ï)Ë# éÍMP@T#ôPڹ驆?ø@5QaºôÞäÕD5†éJÒ{£T#Õ¦IïÍP@Tc˜žIzoçÕD5>š¾ªÆºg jœé(G½3–«^Þž>ØšJð—ÿ}÷üŸ“¾¾ä8Ò/ªËÉ`nâµèÄr&´':‰ˆN,'6{¢“ˆèÄrîz|#:Cx!ðɇGÑIDtb9Õ¾¾!¼xqá+ÑIDtb¹2°¾!¼xuá+ÑIDtb¹±¾!|&ðæÃ£è$":±\wÙ߈Χà³¢“ˆèÄfÒ6’ˆèÄr¥…ˆNltè!ey$!½¹ ¢‰èÄJ;7=ÑñˆN$¢3L’Þ›\ :‘ˆÎ0]Izoô€èD":Ãt#é½Ù¢‰è Ó3Iïíü :‘ˆÎGÓWSY?´µèäå´ÄÓä}å¯D§ìƒï¨ŠŽ“~~%™ƒ Ò/ª‘Êu`n&x£T.‚öDGˆè¤rM³':BD'•ËÖ;àÑ O><ŠŽÑIå*ûøFt†ðJàÅ…¯DGˆè¤rSÀøZt†ðFàÕ…¯DGˆè¤rÃøZt†ð™À›¢#DtR¹åb|#:Ÿ‚Ï><ŠŽÑIͤmDˆè¤r“ÔèÐ;BÊòHBzsD'ÑI=”vnz¢ã>DDg˜.$½7¹@taº’ôÞèÑIDt†éFÒ{³D'Ѧg’ÞÛùAt¦¯¦²~ljѱ´D “÷•¿r¼ ¼£(:Nú‹èç“Ò/ª!å0n ¼Q‹Ž”ûŸz¢£Dt¤ÜÎÔ%¢#厵ðè á…À'EG‰èH¹Án|#:Cx%ðâÂW¢£Dt¤Ü¸¾!¼xuá+ÑQ":Rn_Ü_‹Î>xóáQt”ˆŽ”»-wÀ7¢ó)øìãè(i&mã JDGÊý•Dt¤Ñ¡w„”å‘„ôæ&ˆŽÑ‘J;7=ÑñˆŽÑ¦ IïM.!¢3LW’Þ= :BDg˜n$½7;@t„ˆÎ0=“ôÞ΢#Dt>š¾šÊúW‹ŽÚñ”7gt¤+:åxG5Ptœô— cóÑéÕÐr÷·?7Þ¨EGË­Ï=Ñ1":ZîdÑÑr³úøFt†ðBà“¢cDt´Ü[¿¾!¼xqá+Ñ1":ZØ_‹ÎÞ¼ºð•è-O.ì¯EgŸ ¼ùð(:FDG˃;àÑù|öáQtŒˆŽ6“¶q#¢£åÑ ":ÚèÐ;BÊòHBzsDG‰èh¥›žèøƒDG‰è Ó…¤÷&ˆŽÑ¦+Iï%¢3L7’Þ› :JDg˜žIzoçÑQ":M_MeýÓ5¢s´7ª¡]Ñ)S;8ðŽj è8éë„™EéÕ°fùr쯗ÑÞžóþteùÛsU]JNHa>™LåA³nHòC*m/D¼ص‰ñC*½P/$/ó1\›( ÑNj€y!§0'µ©êh@®¹äZkA®¹äZkA®¹äZkA®ƒv®~c~¹ä:ë@®¹tááw<üއßñÀz(³‡2{(s€¶ ÐVd@V€2ì 7€Üý7BÈM 7›á ïd(C†ß,P¯9>x}úûü2OÆwóÀgþ<îÎOó4xGþ3‡Ýen„ÿ¼?œl•àç(™ãí­í­}R²Š?CMO§"žôCð2~‚¡«!ö¤‚¯ ±~4!AbIMìIã <:B§C¸üÁ“浇Èñó4F/cEX,¢sÎI8-ãÞ ±Œñpr6ß*ã‹öTQñ§‡ZFïzÔ°; ÍègjرŠfÀ*~áU|Sñ}¦âL”pVF+«a·ŸþÀñ­2ötLVÆÖ1'eÜ[+›ó¤Ý¸¾QÆ·ïUH(e,^Âi£ZÆ©/r|£Œß«;Ëx <8-£QÜÂÜÄ éeü{ìì3Éz çö¨·ãß*cgý:9 g®ËËýzþËBúzý÷Ï*¤8Ùu™Á¿y°µ_{ý[ñ¡ ALZI—ºGò‡sœ¹À­!í`½ü¹›ƒñ@ƒ‚ìD ž‡b wš ejççIÊÏ*î)d<ó·.X´©€›a oe×ôóþÖL0ÓVtùÒB4ŒÈÑJ¸S<ªˆ»ƒ¯Ò¿ÿ_óN‹/¼:.΄äC©Z|°­Œƒæõ­á¦]q÷­ ¾ÄPSråò‡¤•ñB,Ø;ià‚…?„¬€3-:›}{ëMî&Ó{ñb*eÐË8*-4Ë¥ŠƒíÁ ½sSƒ—ÛñüÚv;ΚËùK‹' [gœ·£;¥ìÏoųžýhIjBÝah‘Ò_4×ô–‹—?8ú‡EÜÓ·üE‹C 0FÄ#}+I®vúƒObᙫu&‹N”èpo™ 1xæ IÄ=ëuèÒS-˜´}J¯`JOÓÑ€qrí—á6Ñ™gLbÓ%ß7³ñV¬;›ÙLo‰3¥îÌíÚƒ­ŽïW«åÜ–QÂSÒœ¾¡)Š\åã}ó^ÄMœ _ÌŽ­6! ¿Y¶›®cÌX™÷ï›÷»æ½¿­¯ð¨{…ÔáÞ?½+-üñ¾Áäxß`r¼a0i›÷_ºžíÁäxß`r¼o09Þ0˜x±ð7 &/zzÇ·ÁD]SF¼0é¥êçÓ̦+½c!½óªm½˜k’ÅÕ ,#â…íÜh+\¯þesÝ;A…èíØö ±/Ì¿µ9åkWW‡¯·¯_ʰ4÷Ñܼ+Á=é¢C ˆ5ßNðBK¨õ²Ø†nÄ-ñ0©Ôv™ÿ®„ÃV¡/&X¶¸'Ö=0ë°sËŸšö´ò'±î4]rpɤöV–Ô;»:ƒ¨^_|qªÞ䌦^'â…´‚­Ãךz³¢ÞbK”Ôk¾­!ÎÔkê€`¹âDüõfE½Éz§¨·Mä_Sï·'moX'hÝ÷¹í¶E<°Í†Ùªuç¸ÜÛ…кßTF±û¹©ìNÄoÐàÅÝPøí ÌêBÛ/Ž8©âä`jÇZiù/üÖ–ÇcV×Ôéíõw‹N|_Ý÷`u€“ºOAeuú+uÿÂo­û[Û¹áµéÛò ›b§Ã®n×[,®ûÖ­ÇŸÿ(£õ^Û;vÞÆ_rL¼Òòñ$œ9¾–^iù/üÖ–‡MI´ŒÓp è­®áDÈ<”µ°òíßVº®šÃˆ8ùó¡Ã6¿ð[[è6%¥NÛ¬„sÛ,Y4.hóµñ¾Pp¼/ï ÇûBAÄÏ,_r»!j¡ Áë¼ábªi÷…‚cW(8Þ Ž÷…‚ã}¡àx_(ˆ8Uï¾J QëÖ¿E½w…‚cW(8v…‚´î¥ ʈӆÀPpQwŽË ±]øïÚlþlÒ²_[V"8KéÔü3ßkØÄ N³"¾nœb»ý ]‚8[þišiBܾt|ùÝiZŽ‚àIIž;uC#âlñi¯mC-ÏuÁÏ7,iaËø y×É‹du$Ò'ø Ýï¾HìŠô¹S‰NªH"}½ca¤Cá1ÒW3Xêᡱ+Òìg“„“º“H_¯;Fú7Ô½+XlŠ%œ ,ë…Ç`ù†Âc°(|Ù&äÅuËcW°L|’õmÍqA°¬·Ë×·Ð{ø®l—À¹£3±è%<©¹ì÷ÐŒÀ]B&*¾&V ]—xðEÂׄ¨GB!ûDjòÔ%äm3©Ïñ=â-ã´¼Db…o“7‚«Gªx¶%62¾«…i¡÷®ú§9¥Ü%$Ã!ÄW„ÄŽ® òÚz<â‰^·R·è ÉèÒ;,HßGlGÀ¹ôº·rMz3‚Èæ‘ ç—È OÚþé¤&h_³´Øai´ðSH‘$<ÑЬøØÑB&Hõ“`=qÚŽá0ømé¯j¨ßy¨ŸDœ8m;üøá£ â]'NO{ÿD¼p!b8O£%\í—l '·üx–MºÓ.üɬg8±å3[2 uQ™µ| Ï6žC áð„¬861¾MÅÞß~‰ãÏÔC›«ÎÞáT_î<°jCÃWÎÕ¹ ™vqfÚ&j¦íEœo25Ši·K7ÞÕsupv‰«ómïë»~®Î a§˜“p}ìe)ë(¾÷\]h› Þõsu!*çêäºSë0‡’ª'¸³C=Ò«NÔg&íz²âŸ{)¿>‘Bðë)ˆßHAü†D Á¯O¤ žsÇ> šHù'>늓¯ÁÛÎZÈZEqNÆY݃íPܳ¢¸ ²âŒ,+Î[EqV”¾PœéP\ÃsºAqŸºâÂf©‚¸š¢×“*ŸJReQJzRåó¦¤J”ðLçÚ5©òy_Rå³+©òy¼/$8Þ¯ è˜~TBLk¬„ÇûB‚ã}!ÁñÚ€LŒ×|ÇûÃÃë“Q–ðÏBÎ_Y‘Ëx­²å­­Ù¿‚»ÍêWp_qí¼hVðPqí®£¨ÍžÍû—s>}‡IÒÏé#6*þ ¸»·ßT\Þ-xúTýƒqz}èÞç™@/áê:ôôÖ±•1ö•q/ã}eœJX³"_)ci÷&ˆ8+£ Jm½3Šà+eì1^ÆAÄ;u Ž„àz/_¬v_˘ô*"ž4<«ø%?zú^XW ™v;ÁÙeºá¼—a©ÅówðøŠŸ>[m_o@KÜӽ޿”6زóÖcå»ÑŠ"ÎZÈi}ÑÖEe‚¯•±õXÓå/öÆœ„s-êe4¾RÆ¿ÐÌÎËA–¾ 2Îâþó¾¢né¡èoµšÈ„/u] 7üUÛÑ*þbß®$øZMžZûÆc±ŒOZUË(âk~úLç»Ï"Þ׎æ0D/áke„>Ó©ë íøy¼²_H!\/cèòÎî9¨3L‚mûÐôV{ tãI]† øŠqךËhA›2†÷ï- ê*ã²Õ3_)c—§' áÛÑy‚¯ éqÕLÈà$|Møß%ÄêÍð_ò :1]: ‡º‘àkBz< «Ir¾&¤Ç0!ÙI¸.$†Öù´?^B¥Å"dq¾"yÿx¶¨fq)ÎîèJU: Ô|q–58}òåü-\­û"N“B‡óìü[6gJîwú‹v7„<:½ŒŸ×éç´ D•à‘¹…6Ž?¸w¥í¡….ée|W„·ü›ê+59_8)á‘Íê~‘眹ÒÏØæÜéF×¢e‚ó¯SY©ðx=ÅY4Öæ¤‹ÅÂó+m“§Ýmƒ$Á-⼜Y€½fwÒn•¹åª^ÀÙד[áÓâK‰ ?Þ§¸ã}Š;Þ§8H¼òÄ‘U5*âQ )¸FëÇË nµ0z©Q Zþ{©ÑŠŠ=n>±js‘狌sÅMqQij¢wÃvh ¢t¶ Ì´ùiR{â4]é‚—†œ9Ñ$\ïqjöñNÅ͵’ðľWa¡ŒÇûÔ{¼O½ÇûÔ Ëð*ªzqžÛJ²Þ½Œ/`»_µìߊ?F\5‚_ÇÀ¶} ÜoˆlîÓCrþø¶E±¨ÒÕзâ«ÑãŒ;zËhEœÊoŸ+{þóâ•褫&ÏOgÕ¨×8³a‘â/z;ž´õ¥«_±K_;BŽxb)»ÒÞêiGõzç×·žvT³*õVeqÊ$dkt¼w.åÛV ÄÙA.{°›s©zgðZáÕ/Y¼·ðí²'‚¾Ó:lþÁ©IŸåù Ĉ;êjcuôI¯ûƒ×rì¾åp“.ÝkÒSMSëFûöðÖ¡¸.üž°º¼­8Ø·é­ÖaÕäí¥£ÇyÛƒÓ*Æ¡Y‰œË¡^èAðee7„ÒGÕÛ´ºÚ¸Ÿßpº·ˆaÄüè|.WÂmR&I]·xÃI‡&ÝØ|ñIÜ(&Ðp²ùö>nëÝèð~›/Îlþëêÿu›ÿx ?_4P×ýØïr’ð wëÏë`£u6έÃD)ìgÒ{¬Ãôà‹2Å:ÚN—·Oðˆ±'éuú'Vø¶Í`„áÖjñ »FkÄé•Ð_×RžþàùD\Í™0ªº¡¯ŒàÛgeôÍ·¯”1÷”g®/#Ž?´Œ®§×Ë£”ênBÖ<5âIÝR2âhbµÁÈ¡©K‚{Í rt}ÈÁó™nƒ*ø†»­,Äõšt¹WGáz_ìó{|ÛžÒê[tßG8u7(¸5›øê\êýÚÇ>Qˆê+¾*äãá};ò´ôȤŒcS–æíŒ×¥MYQoˆ±)Ë÷ : ®&~ç·Æû„4e­¸‚ñCÊÊ=¸|fp9þam‡¯µzámóµ«o=׉]¼EȨ ÙvÕ|mÑÆ,׃«›œ¦·:\µ[)csÕ«oµvL·u!ÛžÞ6W-g›æ?ø.<ëíØáé­îºlóô¬Ë£o®ZúºpuÝf~ëy}éc«&Ï]5ï«IÏpba<èŒ,Üi¡ 9I;†»Rø6œ0A…üÙŒÐûp5k>¿õ¼S³‰=5yîªÉx_MzÆ, ƒNç4@Á3²ù”ñ£g~@öâÎ7rÇ>«j÷ýÀY„é ð)^Õ@‹bÝù Ä–ôª}dû虬5„m aõ¢À,Âöøïh»‰¯M=󃵆h£Æ°¢Òæö‡ÒUS|»!V¥w¸êžØ{­!š³4+*…Ø{è‹X)ÞaÃ&¾ê¡>ìÕ>Âжùˆ ÷Rˆ~f«¸Ö¹6D¾î#ìÕ>‚6DóA量ZÍ"VñŽ†ØÆ×}„½ÚGІh>Âë½BC£…J«øvCtàë>Â^í#hC4ô^ ‘š–]Å;,b_÷î†8"Å>%¨Eq=>b WÂ…ó…`}øºp7ÄØà#¢^”±†w4Ä6¾î#Ü q6Dóê·Êç·¶}Ä*ÞÑÛøºp7ÄØà#¼^”±†w4Ä6¾î#üÕ>bHõøKÃç¢è~Û÷øˆ5¼ÃYnãë>Â_í#hC4u¿í;|Ä*¾ÝøºðWûÚà#ôÉ‚ïñkx‡Elãë>Â_í#hC€Ð' ¾ÇG¬á ±¯ûˆp­˜\T½i¢á³qê~;4á´5U|;ÏzýZ÷„(­mìùÄZ¾îˆÂÕŽÈ1.ð¹(úà ¯-ʬâÛ‰úA»`«á[BÔÖN®_÷vájoç‚‹ |.Š>“ ÍÛ9-×¶ŠogÚY 9pD¡eÚW…È­=3Ëöãë.5\íRik7—õérh.Õi ½U|;‹½ÖÚ-‹½*¤£µ·ñu¿¯ŽíÜß‹¢¥±Ço¯á×úm|Zà[B´Hú¼´_÷Ûñj¿íL |.Š>`Ç¿½†_é·ç[ÌÝߢµ¶9™a'¾î·ãõÙ®£d¿­gbß^ïôÛS!ëÝ4 ߢy{úÞ@'¾î·ãõ)5ÒÚà·õFìñÛkø•~›µ6øí5!­½¯ûí‡÷Óò¡~Œw!ð±~ŠBtW_P¿´8ZĆkCÓøíéñÏg-N_i:ýÚã¡ÞˆIpÚå&O.H=Ò¹vÓÙá"=•œ~Ç6¶-Óã÷ã·÷Ë[$í`â×ísÓØ4|ïN‡å}Ž—¦cÿ>+8¹¼!ùƒgtqr†,ÛÃ¥‰ïS©žÄ ÆÜtZ 8ùÞì|Ú)Õ·þœ ¦ÒLñùšœÐªøxìÇz©äøà~ý­¸Sªèè%=¹©ãƒ<öà~2Î&ý 9áYÁ½æÏ ž³úV!åz!éãßMÜhc÷øn†ëñ×ÇŸ\Þ¸¨»0áÕü2lsùûŠFq6þ.…ç_ts^ÂùçÏŒ ^»~…àNëÔkO#9¶ü»2,~}ŠktRhYà\½çÜ¥þŽ_ §8»o8ÉYÍxqvß°)²â$œ]¹óõ¥ìY%Ô]=fCpË?Np3,+¼1"Î ïªôDûz÷ Á¹u$§„„'þ{,ãǵÖH·þ¨Ud6dÜÀ1 wC‡Ó'Á'Å{zÆY|ÅÇów‘xg§2ÙYµûÛ(.ÞR%m ‡Î/1OÂPvêrá K&hÇÜ0wn.¦m˜³ báùWtÍ¥îF»$›âü믳1´ép°Gœ^öuÚÒlÚ'è î\ŸC5)K8ÆšzÙ㫨ϨSÄIhþ¾ÚehPï™pUÝ Òήö4šô}‹g~¹ý¨wÈŒ¿bîzp’ÓÙ{_§ô»‡ÞÕëNÕkÛMöÓ[ço9,‡™Î26œ–ÑØCËhÚ©‚¯”ñáìy…aÆ%¯ÄÍ…œãÙÊae NÄÙenu„^ÄYÂf,pðV¬;‹"L6rà`¼q>€Å †"á˜7šš÷<¿¼`ÊbÓåAµ¡‡³î$õ:'ÏB "NÕk‹2kHÖ‹8¿ë?(³böjõ¶ðq®ÞõÖìŹz£¦^+áT½>F«¨× _U¯SÕdõÆÁ‰8ë½FUoqE£¨7& §£ßaHb²;+â #(’ÞOýZÄ}\ÒûÜvFÂFàE½‡(KçF]Þ½¦÷è4¯mDœO6[t".~ÂCêÖ^¹Þ+ÎõîEéLï®dMïIÄ™ÞSQû»„/ôîäþߦ÷ %Z†»s+âÌ·díï1gz4½—dw~È΋YæƒÖß«ùy'â\ï¡GïAÓ»/ro_Ø#øBï©GïQéï­î\ïщxOŸ‹EœU”óÚ—«Z½{+á\ïµî\ïN,<ïïYI¡FEïvÐü|ëÎÖR5ƒÅúû@bĨ$†^¯ê=i~¾­J±ñ¸IßkÃõ>$gýÝFMïA¹Ÿ¯3àVœ[G —Ž@Ä^AqDïi§E¾'úKJô—jtÁë¾jYó Îh9ã,âÜ+hs7çEœ}ªty…¬ä>Ú쉻 +JçÖQm“»‹$JçÖŠb%‰xR²ê ë0N­còhÚÜÀ‹øªu5VPŒ¢ "Þ9õ‹¹ˆ8³Žæ¹x¬%|1ÈRÂ{ž4d _Ì ‚ædœO»bÄrå˜"1í¢Å >wèýœuõî´9¡q¦÷¦8¦÷âDœë]ó èT¾˜xEïf5|17HsÀyçwÚh$¼3Fô°Ú…8׻퉌Ñôn‹#bpo´LžÊhcñ›ônÔX!kÁ£Xxn-Ää±Bqe¦©cÔXA ¼ˆ3¯`½–ÄøØt%šÌA³+â<’ôZ¬EœÏMG$ÙðEÆÀ+ÖA|’Õ¬£ÎÙS‹$â|žµ©…ñî<¢ˆ3ßaÔ41éX]yD£åmÔÒĦˆ8óV3¨ëqšïP­cȾœNh3ˆ(á ßaz¬Ã]mFƙ洞_ø#á‹yF–­#Qq«Ö!gOnT±œg¯F’ÚÈR¼ˆ3ëP·Y_L'‚:ƒpnuL_›gÞ9ϰ¸„8·mê“„/æAñÆIøªumdi”xNÒ‰8ÏI*9ŠˆmTëÐ|ºƒ:²(qׂ6 õIr’ˆ{eP^Km™ ¦¶Ô”¦(}aCQv*>‰-¿W»¦)jJÓifƒS4Õ€Äv¬Lš¨šMÑœJ”pn6^32àEÙlv_³–¼Mqf6Qˈ±ð|–“£ìmÌ J_µ²·‰ÑJøÂõ”³Ij&ÜkÑ â|Å3k™ð(â<ŽÕ̆ŒÖjFÔ*+_™¸ 5#j´œ¦dŒšm“$>íµ"¾È—wdD–µƒšóë¾jùÚYÉy™¬:•¤Y‡qnên/áÜÚv®÷"á‹ÜGìÉ}dÕ+MïQ—F èý”ü°¾0‚Ø£÷rm„IÝ‹êÔu’,â<®y'Jïö ¸VÐðÅ`¢ÎnÅÂ÷Î_L‘ñn¯`$œÏn꼄¯Y‡T¯`µŒhñ^¯€ó«fD‹š ϾH€EmõÔKøÂ+8MïEĹ„¯`‡kWO­ñ›¼‚U÷6Feõ4àhmÕŒ¨¶·1¦(âÝ!¦“ð…WÐÖDZð‹Ù­œHŸ§&"ζ‘»¤NhEœÏnµE÷,6]çÌÄ+~böl¶°V]@Ñf&¸ÍÅZmYUK†EœVY-Uê¼ÓÌ&Hø"Ý¡¸©Îê©R«¥;Dé §b4ƒˆ"ΗU‹jηdÔt9çð5ëxø«¼µÇ·^Û í¨¡[ä¢%ÜÝp0pv?„;xe; Ä3?þÔ“Šò§Ö¥ÎäCSÖï¯r aîƒZ0†ê€ë-¤|¥!vœÐM¥çÊŠ~‹NÕ`BŒ?« y£HgÆÚkijz"wz«¼á„àôf3.þ"Ñ“1Nq¾rBbüýPµ˜¯·4Àù7Óêâ¿ü΋8=uŸs;÷N¤ç§l'í˜C=CB/£Jx@ q¢ÅêzoDò²ô¤ûÊßí|íp½ήgÙ·sHü3àVÂu#ø:ÿ/M0µ®ŒU|úõ÷éJO°­O‹ÓJõ­·ãN ÓÑ:{ gwMçêì‚z}âäòò}ih˼÷ÅDé^ßÒéL!+Òéõîpñ‚ä"­Óµ K‡ÙœÎÚŠzϼî5çLê>¹GÐ{Ö¬.‰GðO‘¾qfuQY¢ZVqnu^Ù?àÛLqnu§VçY”ά.5³Y±º¬Y׬ÎYÜ1ÛL’ÕÍŠëάÎ7œZ•ñ^«ómÝñÌëžd«§ÿV¬fu¹åX>ªMÁ ÎOÇgÍꢄs««ÉnuA,<·ºŠ{vUQý2Á™ÕŃݶ:À™ÕEÍêÂAl:fu¾FÎÌꢂö–—­ÎËzïµ:8ãƒxæu²Õ%èq%ˆV73ƒæë|ÛŒFð D» «+άÎZ¯Œ°-›Œ8³º†S«K‡h%œY]貺 [ÝÔôù []B½Íêb½ä†°Y–¸ze«‹±éº¬ŽfìgV—ëøÎ¬.C—ùöT' úm ,†Àw»›/oCü†ËÛçiMôR{Ú§6ÇB|i\‚=íÍ`Ü’·L‹¬SIqj\¥ÞêFíir‚EÄ# ƒjO®Þ{—iÝ}Ë!!ž­ÚBß¿×Ù“S'ðdÎQ0ˆÜS#(å 꾊FqÚ¶^ðµK žøÊfÝþI³+>©'3ß¾}ÈÙ~l!RÅrh‡5'UÜ;Ûã7¿Åo"Îý¦•Gë<Ä{+ˆ¦JK ®ûM«ªpî]ë*ÏÒ¡J8ó®:€~/¡¢ÞÉþaXœª×¸jÁ+êœcfHÙspPˆ;ò–kúñäÔ‹x`B¢ ÞÓï WÕˆ‚€3…#\]êÄ+`g\w¢Ï¯/;ÑÍ÷툾]Ãf!öàYÍ‚¾½|;Ö·âõ¼~5¦bÁ1Ú24â·Xð‹bÁ'G$;¨É‹Ù‚O#iTA ~‘-˜ú·È§)ÞeÁ§JY ÏÜ·þ£¤õöÚe[èÇ ö©Zr6趉¸ëi!Šü|Râ7®¦† nÙKN,Ösˆ{†±[ï1­‡xdBŠ\÷=ø7ÀYçßWÓ&WÖN“˜5ümwÎ:íÎæÌ60»Z÷1Z†$Ôu~~Ùiô"Þy§éÐöÁ"ÎæªCÑæªráÙ\µátÁÈBñ¨Í"íÖCëÖçÓ²°¯i†Õ=‚³)©;ìÄkš! !8 ­šô¤®«"Γ¾ôs×ZÁxßZÁxßZÁسV@­Ã’•ð^밷̆²l•œßèeëph^±ŽÜ¤¯Y‡W­#zïÊé÷åôÇûrúcONŸZÇÔðbÝ{­Ã£udÍ:ÚZµŽÉldé<‰jdëð ÎS÷¥Ã:²fºï˽÷åÞÇûrïcOîZG8´Yˆ÷ZGë@œ§Ølî ÖYG[oŠ<«.ã<ÅÞa€ë)öñ¾ùx_Ž|¼/G>öäÈ©uLSUQz¯uÀòÁùŒ©ÈÖ¹8‚{6þ(#K:È…ç©ðޏp=>Þ—ŒïKF#ÎG€z/Žþ‘Ä£aY‘$(î”j5"NµXÄ|œ²ÔNă†G¾¨%áêG>–iæŠcžX›)ÓÏOŽpö!ŸRcb¶ òĈ'íó7Ì' mïëøàÞªÕY,xÈõº+ðI§Ë®Úíxˆó‰õB#nOƒˆwy…“Þ“ˆÛ{M³'÷,SëD{J°•àt6’z¼àT?6¶›tÇßÎ)k;IÛŸ–A¼Ïí’ÅA‚³OôD¹3ÎgÓ½rÐå,â7„lþUv¨ZÓÅ2Í¡%¼×6#àIåãzw#Î×ÀÓNù¸^”ðµ~­Ñ¹éóˆV¡ïõˆû%à–Å QîÖû%à¶éé‘Y°ëhº_»ÝÖÓƒßpñŽ üú#(¿þ ÁiÜmÝa·u6eüñ³~óÏv}ájެ„gvŒ¶ÎÆ3Ë¥æÒ~·ÆtºóvtñÎ.1òEœt™h•U€€ŠCÜ3,Ñ)xdB:Vzö¼¦›âq˜ã¾& ˆß0i@Üóm#BÓÑ-3Ê–™µ¦ƒí(EÉDzØÞLFvš®e ¿%Áˆxw‚Ñ‹øb¼T‡H_Œ—Û-[qèùçöµžè{ð¨Ù¼ú•çqìÙdCçÙñЮ1E¼Ý ‰8_7½ÍiUJÄ=³ež {t•=:+ŠUÅÅzµRP÷¿ Õ³¶¶GzTÏIްW#js–B2!Î÷©DY?èÎ÷|?‰h´{£à|ŸJvŠ&#ò´}SJ{âÓÎyQÓFÜò‰§{â„ñ®ØóÄ‹8Ÿudßþýe”äPÏéÛ…;e0a— Ú1ÿ÷ïu,òáê}ƒïw[ukí—¾åäߟÚþ$õ~ú±]ÄÓâ~õ­—×ÚB~èªâVã'¼ÞZ¡žÓçŸÉl÷(Nx½ÖÛN¼å¥ß߯ç+ä.|mk¿|7—\(î¡_~<ü>*Ëô.HWžŸMŠˆók‹ËNþ&¶“¥óýcêe€AÂUã²ä˲6·/I!îègf£ò Öy›€„óµÌv?ð<ïü>0v€íÜú©”—·þ·Ìõ½ìUˆ]'ÿ¾ÿzR¶ªžàtŽbüý~þÿ›þNff~|°ÁÜçó6âélüvoBqê®­©8ÝÃi¬€?¿³žj¾6VLàû´ˆ‡ÄËxÁÙ§jÃç=ušy òU(& "N½Tð§Äz'63‘ÃyyrúíD®¦ (Nò'SûÖ–§qÁ¬Q §½ôNjž‰8Uœ '£“ŠtÚB¶át+à ã^+<8¼\x:‡Ôplyc¬Üò>s!œ^ŠâøÞjW{\î)<;ƒãjáÓv›ß Do‡óëæ?g³a÷´º—@ÍFÆ =öut~þþ®Anº’I¿*ç…ˆùd6çó%¬ î‚í61áâ.ˆ9:¸lacxa‰Åð…«³¦îA£8 ¸OéÔÓÚ$»J6mšã î67¿ECÓX]e ›V7¿E­Ã䊓.c%ÅÍoeîTæÿ½ýàÖ,¹‹é-¶zö娧?˜mG=¿E½‚­ÒY¸Ÿ‚Œ ›6?¿EC^Ài(­áEÁÉåw*N/¿»lœÿ€u·sBMÄi¢»œsó<±ù"ô¸ù­¢4 œ\x,N'îŠÞÓpšÂÖ¤³žá+ÙÞ©$âDﱜÝÅüêçƒlu^³y:~XEïA³ùÐeóìüà¾ÇæÙù;Û {ú;‹ë@zî’N›ÎTé,çáeœE¾­å© ÖZže®÷=Ί%<¡ð]MÇ׆ž»p­ÃÒÄŠÖòI´:~c6$VX@îèHÖ"jÒtÎ(ñ¾ý÷?ÿ»|-¡‡eDyLP-1.10.4/Data/Netlib/install-sh0000755000175200017520000002202111405216053015137 0ustar coincoin#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # 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. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= 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: -c (ignored) -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. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; 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 for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi 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 "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # 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: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # 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 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $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 "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: DyLP-1.10.4/Data/Netlib/adlittle.mps.gz0000644000175200017520000000460010430174061016077 0ustar coincoin‹åJ®9adlittle.mps¥[[Žä8üo ïà Øz}6v3 ôô³½X`îUfUZ¤LÊ®r~•Ž *$Q!JùóÛŸß—ýóí·ÿþõëÇ÷¯_þþëÿùúeù¹,Û?[û´çí¹}´çïïÏ(þNâ™ÅsÏIx:G¡s¼QðFÁï¿þúñß?>íòü#„ð|zß>ÄW¶å5–ñiá¤ü9šõ Zð¨ß"oÁGcLÏ>Ôðë1.oÓñŸÆˆVŒ 81.+lNf¡ÔàÅXñN§‰\yÝ¢(_j‚áë Ò_$2ᣎ²xQuÃV0¾¾†JŽœ½&F-0$)p\\÷ÿZpNNð;*x:ïÞ4aOìÞ…¶dÁ?×½ÙÚk t)ø¼_&o•Åý_¯uÛ×M®jƸ0á N 'ÒþLæzË· œ“ O{²cI^MœèpÎNö=1†vNû ȧð±†,t¤gAœð=’žÆhB’Ø'üd6@´åZ·ͺª% Ò=ödë(Ùižï±g[`ÉÎöâ±×½NØ‹§|®ŽòOïû‚×{ìÕS¾³“ÏŽá;OùÎÎv/A•}˜°ƒ§ü¾JÊG± ÞcGOùÎNvºÇNžò'ìNJ‹aŸq€vö”^¶©bÆa¼Ç=僗m{ºÇž<僗m»—ëjïwš°gOùg\–ò™¼Üc/žò&ìõ{õ”ïìì³S8µÔÀ>;…î˜hC þ)KMpj©§ÁÃKMèÍŒÝè@>…-›36~Sl:hOiÀŸ0ôÄ÷‚gÇ :C{ >ÞcŽGt†öÈ¸³Ç {ò:¼ŽÉžï±gOyð”Wìå{ñ”OyÅÝ@Ád“DÕKçà¥ó"R‡[ì¼t^:Wìp¼t^:Wì{¶ào«xO*½RÞÐï¹Zð„ò Ž*¡¶5€-øPÁŠáÕÄØ¿À 3£„ó‡ƒdÁ‡àÙ-øPÁŠÏÍØü#úDîeDØ«0Y‹8z9)¡““’dO÷Ø“—“:9I±ç{ìÙËI œ¤ØŒ˜ÃV­ÊróOÏS  kmýÚ×"¹@¯²6Zp ª}¹5ê6Î,¸\웪hŒ:Ø8öš|Lu+vÛ!æüÐD¤Z­V·Ã‡&b&»U”À‚«&bà ²B ·šƒÓÄ\®4±Ã‡&¦t¥‰®{‘¸ /•ßdÞÎ'1‚ã#uEÓI®oGcxŒ¨¬‘GtH|»ªbD‡¤©N•àñ–¹¬o™þ¤M¶„í0B¹DÒwÄ“Ý[r.Ž\¬c¦´8›ó‚v1AYç§Ñ,ìð‰uð<–E,Û®_:Æ”½à3»aYpòîtŒaÉ‚G‡*ÉøvUñ/öè DçÚŠ2‰©xý¾Áë‹Yn/žË+²‰õ4FšÙÔ—X׉M$²à1ú;£ÎcdŸ$wç :æp)Fû†`ÿ»£lZÂx€³>ô«iÚ‰‚ ç+û²¶Hyu0;Ôu“Ž1£Óļ7‘'n,£=™†·œ *pß"¢+!œ¬¿n–ŽÐœ7Øp9TZJ*—îèu¸V›’wG¯™ Îbµj¶]Vã2ßSˆÏ:´Ý‚»— E÷æ+$÷<®*¤bŒÛu´(åî:Gg.æ=ë«Dò0MÙ‚3^I‰9^,øàÀÞŽ«-Ó%ëa9Ú»@YÍN5û±íp¼¯ÊÉó¾±^89Þ7;c3U ~ìó”i˜¤iq»ÁQ^Zç¿è}åªÊ#\Q>Ÿ*?Ûutøç”ÏçÊ_bÿœòùžòŽˉÜ Àþü%ŵšÛÛOaðáR`Çeá5©îÛgµqÚ{qR»,äÖ.ùBu·ØDýûؽø!ðÛ¯«^o96@\qš’Dg¨ ê¬äèØ}ÿl{\¼íñ"·ðÅ^4º\3[Zzâ~!Âò-»šÝ8‚ymM¬æL1GíJý æðq $5Üš¾µg(½-¬û¾û81-øq–:IÅî”%+îìa¨ÙÉôZ{~ô ƒƒ« hÂUêZßï³–èUÿš®šéu}wt–Ånß”—g× «—ùô[Î3—-_Ÿ—üfżʗbtRÄ-Yƒ šðç¯\¯‚jÁÇAÀÙ`Âuv~o¼Y‘µ¦Å­jN¤ûû÷ß”þÓ>-€µˆEìú©éÑüU6Ẽ'e²>ñ+› ×#AüüDg ®–P¤”ì›ü‚ WmÇíKÑäÁµÊÎ%¼äÀµBÄÎM%b®bèkvÐ_¼~FªáÃ=ˆvëˆ7Àièžhí¶—I`ï8½íÂêÀ‹t¦m•®öq?½œˆ†‹[_¶'Âö¨ÓN¤u›¹÷‘‹L¸Šê~˜­- ·VY𡄘öàõvöËð¼ cíd‚ö°Q©Íê}ŠTÖr}û¿fÛõï!ä&ð÷Ÿ¿}ûõíë—ÿËoTÃADyLP-1.10.4/Data/Netlib/ganges.mps.gz0000644000175200017520000006744710430174061015563 0ustar coincoin‹0K®9ganges.mps¥½Ûr,1Žúîÿƒ~`… oí±ÃŽq÷„ݶO÷ÿÈ)Iµ• ©\U °v(ƒ\`Ö˜ &ó¯ùŸÿííûßÿË_ÿûûßÿù?ý¯¿ý¿ûÿo}{ûÛùkÝÿ¼wú׿ýõï7¹I¸ÒpeáÊÃU W=\p5ÃU]ná*Ü‹à½h¸O½Å6 W®Z¸êáj„«®ð>5ܧ†ûÔpŸîÓn±Í•‡«®z¸áj†+¼O ÷iá>-ܧ‡ûô[l³på᪅«®F¸šá ïÓÃ}z¸O÷ÙÂ}¶[l³på᪅«®F¸šá ï³…ûlá>[¸Ïî³ßb›…+W-\õp5ÂÕ WxŸ=Üg÷ÙÃ}ŽpŸãÛ,\y¸j᪇«®f¸Âûá>G¸Ïîs†ûœ·ØfáÊÃU W=\p5ÃÞç ÷9Ã}ÎpŸ+ÜçºÅ6 W®Z¸êáj„«®ð>W¸Ïîsá}Ê ïó~Û,\y¸j᪇«®f¸Zx…÷y¿ ÷î3ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’à$ø# þH‚?’ÃÉ_ÿ®‡?ÒpõÕ¦¡-â,´YhóÐæ¡­…¶Úzhë¡m„¶Úfh›¡m…¶…mß,i¸új ¼HàE/¨w ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~SƒßÔà75øM ~Ó‚ß´à7-øM ~Ó‚ß´à7-øM ~Ó‚ß´à7-øM ~Ó‚ß´à7-øM ~Ó‚ß´à7-øM ~Ó‚ß´à7-øM ~Ó‚ß´à7-øM ~Ó‚ß´à7-øM ~Ó‚ß´à7-øM ~Ó‚ß´à7-øM ~Ó‚ß´à7-øM ~Ó‚ß´à7-øM ~Ó‚ß´à7-øM ~Ó‚ß´à7-øM ~Ó‚ß´à7ÍÂ<ò0<Ì#óÈog¡ÍB›‡6m-´µÐÖC[m#´Ð6CÛ m+´á<ò0<Ì#óÈÃ<ò0‚·àß-øw þÝ‚·àß-øw þÝ‚·àß-øw þÝ‚·àß-øw þÝ‚·àß-øw þÝ‚·àß-øw þÝz°ÏìsûÁ>Ç-â,´YhóÐæ¡­…¶Úzhë¡m„¶Úfh›¡m…6´ÏìsûÁ>G°Ïì3¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,¬C,ä“=ä“=ä“=ä“=ä“=ä“=ä“=ä“=ä“=ä“=ä“=ä“ý†óÈç\}µih‹8 mÚ<´yhk¡­…¶Úzh¡m„¶Úfh[¡maÎ#¸új ¼HàE/O |jàSŸz‹8 mÚ<´yhk¡­…¶Úzh¡m„¶Úfh[¡ ùÔÀ§>5ð©O |jàÓŸø´À§Ý"ÎB›…6mÚZhk¡­‡¶ÚFh¡m†¶ÚVhC>-ðiO |ZàÓŸ!â!â!â!â!â!â!â!â!â!â!â!âa½äa½äa½äa½äa½äa½äa½äa½äa½äa½äa½äa½äa½äa½äa½äa½äa½äa½äa½äa½äa½äa½äa½äa½ä!â!â!â!â!â!â!â!â!â!â!â!âaâaâaâaâaâaâaâaâaâaâaâaâaâaâaâaâaâaâaâaâaâaâaâaâßëû‡üë±/èqÛ,\y¸j᪇«®f¸Zxõç>Wá^Â}Z¸O»Å6 W®Z¸êáj„«®ð>-ܧ…û´pŸîÓo±Í•‡«®z¸áj†+¼O÷éá>=Üg ÷Ùn±Í•‡«®z¸áj†+¼Ïî³…ûlá>{¸Ï~‹m®<\µpÕÃÕW3\á}öpŸ=Üg÷9Â}Ž[l³på᪅«®F¸šá ïs„ûá>Þ§„ù.a¾K˜ï滄ù.a¾K˜ï滄ù.a¾K˜ï滄ù.a¾K˜ï滄ù.a¾K˜ï滄ù.a¾K˜ï滄y$aI˜Gæ‘„y$aI˜Gæ‘„y$aI˜Gæ‘„y$aI˜Gæ‘„y$aI˜Gæ‘„y$aI˜Gæ‘„y$aI˜Gæ‘„y$aI˜Gæ‘„y$aI˜GçÑ ÷¹n±Í•‡«®z¸áj†+¼Ïîs…û þ]ƒ?Òà4ø# þHƒ?Òà4ø# þHƒ?Òà4ø# þHƒ}j°O ö©Á>5اûÔ`ŸìSƒ}j°O ö©Á>zÜã*¶Y¸òpÕÂUW#\Íp…÷9Ã}ÎpŸ3Üg°O ö©Á>5اûÔ`ŸìSƒ}j°O ö©Á>5اdÁYðGü‘dÁYðGü‘dÁYðGü‘dÁYðGü‘dÁYðGü‘dÁYðGü‘dÁYðGü‘dÁYðGü‘dÁYðGü‘…ùna¾[˜ïæ»…ùna¾[˜ïæ»…ùna¾[˜ïæ»…ùna¾[˜ïæ»…ùna¾[˜ïæ»…ùna¾[˜ïæû‘O~\Å6 W®Z¸êáj„«®^á}ùäÇÞKðGü‘äÁyðGü‘äÁyðGü‘äÁy˜G摇yäay˜G摇yäay˜G摇yäayxÎ{xÎ{xÎ{xÎ{xÎ{xÎ{xÎ{xÎ{xÎ{xÎ{xÎcžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžACžAÿäþýííïÿ÷üiÇŸ~üÙŽ?ûñçøþ„É!A˜0ØúþSÑôè«óøóèkÇhv aG_;îÁa~;þÕùsrÎü“÷£—b/e½ {ëåØËY¯†½ëÕ±Wg½ö¬×Ä^“õZØk‘^rƒ^‹‹^Ƚ0î¹½¢õ¬Çkÿ ÂáÊàÊà†pcpcpG¸3¸3xCxcðÆàáÁ;ƒ„ >>|2øBøbðEàh¨z6Ôk p´:aV'ÌêдU˜Õ ±:C›7fóÊlÞÐæÙ¼Þèè†pcpcpG¸3¸3xCxcðÆàáÁ;ƒ„ >>|2øBøbpbó†6oÌæ•Ù¼¡Í³ye6ohóÆl^™Í;Ú¼3›7fóŽ6ïÌæíFG7„ƒƒ;ÂÁÁƒ7ïï Þ| |0ø`ð‰ðÉà“Áƒ›w´yg6oÌæmޙͳyG›wfóÆl¾¡Í7fóÎl¾¡Í7fó~££ÂÁÁáÎàÎà áÁƒw„wï >>|0øDødðÉà á‹Á‰Í7´ùÆlÞ™Í7´ùÆlÞ™Í7´ùÆlÞ™Íw´ùÎl¾1›ïhóÙ|»ÑÑ áÆàÆàŽpgpgð†ðÆàÁ;Â;ƒw >|"|2ødð…ðÅàÄæ;Ú|g6ߘÍw´ùÎl¾1›ïhóÙ|c6?Ðæ³ùÎl~ ÍfóýFG7„ƒƒ;ÂÁÁƒ7ïï Þ| |0ø`ð‰ðÉà“Áƒ›hóƒÙ|g6?Ðæ³ùÎl~ ÍfóÙüD›ŸÌæ³ù‰6?™ÍÝn n îwwoo Þ¼#¼3xgððÁàƒÁ'Â'ƒO__ Nl~¢ÍOfóƒÙüD›ŸÌæ³ù‰6?™Ífó m~1›ŸÌæÚüb6?ottC¸1¸1¸#Üܼ!¼1xcðŽðÎàÁƒŸŸ >|!|18±ù…6¿˜ÍOfó m~1›ŸÌæÚüb6?‰ÍVý ÿ¾ø_Äæ?N·F¸28Ýn n îwwoo Þ¼#¼3xgððÁàƒÁ'Â'ƒO__ ¾lþûâ'œØüDZägV'Ìê­ŽÙüb6µEbó§ÉàŠpep:º!ÜÜÜî î ÞÞ¼1xGxgðÎàáƒÁƒO„OŸ ¾¾œØ<OEˆÍŸ&C€£Õ ³:fóXnfuÌæ±+¬+¬+X‡V‡V‡¬Ã «Ã «Ã Öa…Õa…Õaë°Âê°Âê°‚uXauXauXÁ:¬°:¬°:¬`VXVXV°+¬+¬+X‡V‡V‡¬Ã «Ã «Ã Öa…Õa…Õaë°Âê°Âê°‚uXauXauXÁ:¬°:¬°:¬`VXVXV°+¬+¬+X‡V‡V‡¬Ã «Ã «Ã Öa…Õa…Õaë°Âê°Âê°‚uXauXauXÁ:¬°:¬°:¬`VXVXV°+¬+¬+X‡V‡V‡¬Ã «Ã «Ã Öa…Õa…Õaë°Âê°Âê°‚uXauXauXÁ:¬°:¬°:¬`VXVXV°+¬+¬+X‡V‡V‡¬Ã «Ã «Ã Öa…Õa…Õaë°²]‡¬ÃÊvV°+ÛuXÁ:¬l×aë°²]‡¬ÃÊvV°+ÛuXÁ:¬l×aë°²]‡¬ÃÊvV°+ÛuXÁ:¬l×aë°ÒwkR‚uXé»5)Á:¬ôÝš”`VúnMJ°+}·&%X‡•¾[“¬ÃJß­I Öa¥ïÖ¤ë°ÒwkR‚uXé»5)Á:¬ôÝš”`VúnMJ°+c·&%X‡•±[“¬ÃÊØ­I ÖaeìÖ¤ë°2vkR‚uX»5)Á:¬ŒÝš”`VÆnMJ°+c·&%X‡•±[“¬ÃÊØ­I ÖaeìÖ¤ë°Âê°Bmë°Âê°Bmë°Âê°Bmë°Âê°Bmë°Âê°Bmë°Âê°Bmë°Âê°Bmë°Âê°Bmë°Âê°Bmë°Âê°Bmë°Âê°Bmë°Âê°Bmë°²v÷ Öaeíî%¬ÃÊÚÝK,X‡•µ»—X°+kw/±`VÖî^bÁ:¬¬Ý½Ä‚uXY»{‰ë°²v÷ Öaeíî%¬ÃÊÚÝK,X‡•µ»—X¿ë°/6^O¶÷à€ëüè¥8ˆ²Aè=*¢lÃAŒ blÃAŒ â8ˆ³Aœ â8ˆ³AÒØ ÒpÆé8Hgƒt6HÇA:dà ƒ 2Ø l‰ƒL6ÈdƒLd²A²Ø ‹ ²pEùó$y|B” Bž$\¯àG/œñÌDz}\¯àG/œñÌOúTœñäOÅzºÊî¾)ÅzºÊî¾)ÅzºÊî¾)ÅzºÊî¾)ÅzºÊî¾)ÅzºÊî¾)ÅzºÊî¾)ÅzºÊî¾)ÅzºÊî¾)ÅzºÊî¾)ÅzºÊî¾)ÅzºÊî¾)Åzº²zº²zºb=]Y=]Y=]±ž®¬ž®¬ž®XOWVOWVOW¬§+«§+«§+ÖÓ•ÕÓ•ÕÓëéÊêéÊêéŠõteõteõtÅzº²zº²zºb=]Y=]Y=]±ž®¬ž®¬ž®XOWVOWVOW¬§+«§+«§+ÖÓ•ÕÓ•ÕÓëéÊêéÊêéŠõteõteõtÅzº²zº²zºb=]Y=]Y=]±ž®¬ž®¬ž®XOWVOWVOW¬§+«§+«§+ÖÓ•ÕÓ•ÕÓëéÊêéÊêéŠõteõteõtÅzºúösëéêÛÏy¬§«o?籞®¾ýœÇzºúösëéêÛÏy¬§«o?籞®¾ýœÇzºúösëéêÛÏy¬§«o?籞®¾ýœÇzº²zº²zºb=]Y=]Y=]±ž®¬ž®¬ž®XOWVOWVOW¬§+«§+«§+ÖÓ•ÕÓ•ÕÓëéÊêéÊêéŠõteõteõtÅzº²zº²zºb=]Y=]Y=]±ž®¬ž®¬ž®XOWVOWVOW¬§+«§+{¯Y±ž®¬ž®ì½fÅzº²zº²÷šëéÊêéÊÞkV¬§+«§+{¯Y±ž®¬ž®ì½fÅzº²zº²÷šëéÊêéÊÞkV¬§+«§+{¯Y±ž®¬ž®ì½fÅzº²zº²÷šëéÊêéÊÞkV¬§+«§+ÛC¢XOWVOW¶‡D±ž®¬ž®l‰b=]Y=]ÙÅzº²zº²=$Šõteõte{HëéÊêéÊö(ÖÓ•ÕÓ•í!Q¬§+«§+ÛC¢XOWVOW¶‡D±ž®¬ž®l‰b=]Y=]ÙÅzºÎÝ÷Ýëé:wßwS¬§ëÜ}ßM±ž®s÷}7ÅzºÎÝ÷Ýëé:wßwS¬§ëÜ}ßM±ž®s÷}7ÅzºÎÝ÷Ýëé:wßwS¬§ëÜ}ßM±ž®s÷}7Åzº®ÝwëéºvßýQ¬§ëÚ}÷G±ž®k÷ÝÅzº®ÝwëéºvßýQ¬§ëÚ}÷G±ž®k÷ÝÅzº®ÝwëéºvßýQ¬§ëÚ}÷G±ž®k÷ÝÃzº±zº²ç¼a=ÝX=ݰžn¬ž®ÌÖÓÕÓ ëéÆêéÊ|†a=ÝX=ݰžn¬ž®Ì³ÖÓÕÓ ëéÆêéÊüa=ÝX=ݰžn¬ž®ÌKÖÓÕÓ ëéÆêéÊ|™a=ÝX=ݰžn¬ž®ÌãÖÓÕÓ ëéÆêéÊü¢a=ÝX=ݰžn¬ž®Ì{ÖÓÕÓ ëéÆêéÊ|¬a=ÝX=ݰžn¬ž®‹>•g<©§ÖÓÕÓÕÓ ëéÆêéÆêé†õtcõtcõtÃzº±zº±zºa=ÝX=ÝX=ݰžn¬žn¬žnXO7VO7VO7¬§«§«§ÖÓÕÓÕÓ ëéÆêéÆêé†õtcõtcõtÃzº±zº±zºa=Ýt÷LÃzºéî™ †õtÓÝ3 ë馻g2ÖÓMwÏd0¬§›îžÉ`XO7Ý=“Á°žnº{&ƒa=Ýt÷LÃzºéî™ †õtÓÝ3 ë馻g2ÖÓÕÓÕÓ ëéÆêéÆêé†õtcõtcõtÃzº±zº±zºa=ÝX=ÝX=ݰžn¬žn¬žnXO7VO7VO7¬§«§«§ÖÓÕÓÕÓ ëéÆêéÆêé†õtcõtcõtÃzº±zº±zº9Æe¬žnloÿ×+øÑKqeƒÐ{TDÙ †ƒÄØ †ƒÄqgƒ8Äqgƒ4¤±A¤á ÒqÎélŽƒt6ÈÀAd°A2Ø ™lÉ™8Èdƒ,d±Adá $.sŒËØ.coLp½‚½pƳç {¯â€ëüè…3ž=•Œ>•0.s—á¾kÛþ÷EXÛö׸/ÂÚ¶¿Æ}Ö¶ý5î‹°¶í¯q_„µmû"¬mûkÜamÛ_ã¾kÛþ÷EXÛö׸/ÂÚ¶¿Æ}Ö¶ý5î‹0¶/ÂØ¾Ã}ÆöEÛa¸/ÂØ¾cû" ÷EÛal_„á¾cû"Œí‹0Üal_„±}†û"Œí‹0¶/Âp_„±}ÆöEî‹0¶/ÂØ¾Ã}ÆöEÛa¸/ÂØ¾cû" ÷EÛal_„ \£²}ÆöEp½‚½Q6½GÅA” b8ˆ±AŒ b8ˆ±Aq6ˆ³Aq6HÃA¤±AÒØ élÎé8Hgƒ d°Adà ƒ 2qÉ™l‰ƒL6ÈÂAd±ABÖ¨רl·‰±Ý&\¯àG/œñìyÃö¤p½‚½pƳ§R§O%\£¶FÅý-6·ý5îo±¹í¯q‹Ímû[lnûkÜßbsÛ_ãþ›Ûþ÷·ØÜö׸¿Åæ¶¿Æý-6·ý5îo±¹í¯q‹Ímû[lnûkÜßbk»^†û[lm×Ëp‹­ízîo±µ]/Ãý-¶¶ëe¸¿ÅÖv½ ÷·ØÚ®—áþ[Ûõ2Üßbk»^†û[lm×Ëp‹­ízîo±µ[/s<·ßÙþcû[Ïíw¶sÅØÎÇsûíI1¶'ÅñÜ~g»MŒí6q<·ßÙ>cûHÏíw¶CÄØÇsûíý0¶÷ÃñÜ~g»:Œíêp<·ßÙ~ cû5Ïíw¶ÃØN Çsûí±0¶ÇÂñÜ~g»'Œížp¸ÌÙ¾g5â®Wð£—â Ê¡÷¨8ˆ²A 16ˆ±A 16ˆã Îq6ˆã Îi8Hcƒ46HÃA¤ã ÒÙ élƒ 6È`ƒ d°A&2Ù “ 2qÉY8Èbƒ,6ÈÂAâ2g»MœUÞ¸^Á^8ã…Íxö¼Á/lÆ Îxa3ž>•g<‰Ë\ñÙu¹¿åçSé_.àz?z)¢leƒ(B‰á Æ16ˆá ÆqÄÙ ÎqÄÙ ilÆi8Hcƒt¤³A:¤ã 2pÁlƒ 6ÈÄA&d²A&2Ù YlÅY8yv)>».w ý|*ýË\¯àG/œñÂf<{v)>»”=»Ÿ]—;~>•þå®Wð?½ Ÿ]Æž]¬îyÀõ ~ôRDÙ ÊQ„þÃAŒ blÃAŒ â8ˆ³Aœ â8ˆ³AÒØ ÒpÆé8Hgƒt6HÇA:dà ƒ 2Ø l‰ƒL6ÈdƒLd²A²Ø ‹ ²pòì2|v{v±jò×+øÑ g<{v±šó×+øÑ g<{v±Êô×+øŸ^x~‹ûvžÏoqßΓàù-îÛy<¿Å};O‚ç·¸oçIðü÷í< žßâ¾'Áó[Ü·ó$x~‹ûvžÏoqßΓàù-îÛy<¿Å};O‚û”œíSrv~‹ã>%gû”œßâ¸OÉÙ>%gç·8îSr¶OÉÙù-Žû”œíSrv~‹ã>%gû”œßâ¸OÉÙ>%gç·8îSr¶OÉÙù-Žû”œíSrv~‹ã>%gû”œßâ¸OÉÙ>%gç·8îSr¶OÉÙù-Žû”œíSrV÷tܧälŸ’³º§ã>%gû”œÕ=÷)9Û§ä¬îé¸OÉÙ>%guOÇ}JÎö)9«{:îSr¶OÉYÝÓqŸ’³}JÎꞎû”œíSrV÷tܧälŸ’³º§ã>%gû”œÕ=÷)9Û§ä¬îéx~‹³}JÎö)9žßâl’³HŽç·8Û[älo‘ãù-Îv 9Û5äx~‹³ý@Îö9žßâl§³>Žç·8ÛÃãlãù-Îvç8Ûãx~‹³}7ÎöÝ8žßâlG³5Žç·8Û+ãl¯Œãù-ÎvÁ8Û㸿Åç¶ÍãþŸÛ6û[|nÛ<îoñ¹mó¸¿Åç¶ÍãþŸÛ6û[|nÛ<îoñ¹mó¸¿Åç¶ÍãþŸÛ6û[|nÛ<îoñ¹mó¸¿Åé÷PèÚ÷·8ý ]Ûàþ§ßC¡kÜßâô{(tmƒû[œ~…®mp‹Óï¡Ðµ îoqú=º¶Áý-N¿‡B×6¸¿Åé÷PèÚ÷·8ý ]Ûàþ§ßC¡kÜßâô{(dmó¾~#¯^н”õ2ìe¬—c/g½öj¬WÇ^õØk°^{MÖka¯EzIÜHåâ£r/Œ{Aî¯óoÿxö]›Á^ôÃ4¡ý²LèE? zÑo»„^ôã,¡ýºJèE?zÑï›`/þ’Ћ~a$ô¢Ÿ^¹ï4¦àÜ÷ÚŽžùÞAc&‘ûÞAc¶’ûÞAcF”ûÞAcÖ•ûÞAcf—ûÞAcö˜ûÞAc†šûÞAcœûÞAc¦ûÞóAÉsó”Ù|îÜ<½ÑÑ3çæ)³ùܹyÊl>wnž2›Ï›§Ìæsçæ)³ùܹyÊl>wnž2›Ï›§Ìæsçæ)³ùܹy¤ªögçæ…^ôà»Ð‹ž\zÑ£çB/zv\èE ½èém¡=~-ô¢ç§a/~ZèEO0 ½èdÐëÉ9¡=(#ô¢']„^ô¨ŠÐ‹ž5zÑÃ"B/zÚCèEk½èy Ø‹˜zÑB/zdôzò.jèE_& ½èÛ ¡}3ô¢ïc†^ô…ÊЋ¾zÑWC/úN"öâ/†^ô­ÀЋ¾Öwôz¶w=ô¢›ÏC/º{<ô¢Û¿C/º;ô¢°C/ºƒ:ô¢[ C/º‡{ñMÈ¡ÝEzÑmÀÐëÉ>ÞЋnÄ ½èNÚЋn… ½è^ÖЋnF ½ènÒЋn ½è~NìÅ7d†^tGeèE·DB¯'{C/º)1ô¢» C/º-0ô¢ûúB/º1/ô¢;ëB/º5.ô¢{Û°ßœzÑÝe¡ÝöÝ럂y ¹ÊKüÛ?ä_…$ÿ)˜—«¼Ä® n77w„;ƒ;ƒ7„7o ÞÞ¼3ø@ø`ðÁàá“Á'ƒ/„/_Žß ¿ÊK|Á¯3¤ÿÌKÈU^âgV‡ß ¿ÊK<àÄêðÜH1fóÆlÏc6o7:º!ÜÜÜî î ÞÞ¼1xGxgðÎàáƒÁƒO„OŸ ¾¾œØ<ž)ÆlÞ˜Í㹑bÌæÙ<ž)ÆlÞ˜ÍãžFiÌæ³yÜÓ(Ù|»ÑÑ áÆàÆàŽpgpgð†ðÆàÁ;Â;ƒw >|"|2ødð…ðÅàÄæqO£4fóÙ<îi”Æl¾1›Ç=Ò˜Í7fó¸§Q:³ùÎl÷4Jg6ßottC¸1¸1¸#Üܼ!¼1xcðŽðÎàÁƒŸŸ >|!|18±yÜÓ(Ù|g6{¥3›ïÌæqO£tfóÙ<îi”Ál~0›Ç=2˜ÍÝn n îwwoo Þ¼#¼3xgððÁàƒÁ'Â'ƒO__ Nl÷4Ê`6?˜ÍãžFÌæ³yÜÓ(ƒÙü`6uFYÌæ³y¬3Êb6¿nttC¸1¸1¸#Üܼ!¼1xcðŽðÎàÁƒŸŸ >|!|18±y¬3Êb6¿˜ÍcQ³ùÅl댲˜Í/b󯿫þWrÂû?_Wý§£¿ø®ún þâ»ê¸3ø‹ïª?àÁ_|Wýï þâ»êø`ðßUÀ'ƒ¿ø®ú¾üÕwÕ¿àÄæ_WýgV÷ê»ê8±º—ߘþ„³õüëoL?àtôߘ~ÀÁ_|cúwñé¼1ø‹oL?àÁ_|cú þâÓødðߘ~À‰Í¿üÆôœÙüËoL?àÌê^}cú'V÷ò{»ŸðÉlþå÷vp:ú‹ïí>àÆà/¾·û€;ƒ¿øÞîÞüÅ÷vðÎà/¾·û€ñ½Ý|2ø‹ïí>àÄæ_~o÷ Îlþå÷vpfu¯¾·û€«{¹oðÎÖó¯÷ >àtôûpcðûpgðûðÆà/ö >àÁ_ì|Àƒ¿Ø7ø€O±oð'6ÿrßàœÙüË}ƒ8³ºWûðk«{ý-³¸±šÔëo™=àtôß2{ÀÁ_|Ëìwñ-³¼1ø‹o™=àÁ_|Ëì þâ[fødðß2{À¿ú–ÙœØüëo™=àÌê^}Ëì'V÷òÛ(Ÿp¶žým”œŽþâÛ(¸1ø‹o£<àÎà/¾ò€7ñm”¼3ø‹o£<àƒÁ_|åŸ þâÛ(8±ù—ßFù‚3›ùm”œYÝ«o£<à×V÷úÜ鸓/¦ÿóõ¹Ó8ýŹÓ¸1ø‹s§pgðçN?àÁ_œ;ý€wqîô>üŹÓødðçN?à‹À_;ý'6ÿúÜéœYÝ«s§pbu/Ïû„³\åë3Äp:ú‹3Äpcðgˆ=àÎà/Î{Àƒ¿8Cìï þâ ±|0ø‹3ÄðÉà/Î{À‰Í¿gã§£¿8gã7qÎÆî þ✼1ø‹s6ðÎà/ÎÙxÀƒ¿8g㟠þ✜ØüËs6¾àÌæ_ž³ñ€3«{uÎÆ~iuÿñâ|†ûÿû/ÿc…~oxogøüýßã´x—îöh[÷ßoâ—p;õ²ùhðØp[~o'¸ø£¡ŸG×+øøq†™ºùõvê6¾â+ï7Õ«›¯@ÜÑs=ÎÔÙ8àÏŽÌH(N/÷yïWŠûÐè+ø¯§5ÅiMqZSœÖ÷ì“„âlOqçßn—ŠûToFqVSœÕg5ÅYMqÏ–I(ÎkŠó½w×èP½‚ÿJq^Sœ×ç5Å=;ë'¡¸VS\«=*Û¥â>Ôû9ê+ŵšâZMq­¦¸gÇ/%×kŠë5Åõ½÷ù¾„ÿJq½¦¸^Sܳ±Š5ÅšâFíQ9.÷µ€J(nÔ7jŠ{vHYBq³¦¸YSܬ)nî͸ó’xÖ7kŠ{vn\Bq«¦¸USܪ)nÕ•ëZq1lO(n•÷ô(¿×Š{ ~«8€ÿFqÿâþÅ<5ãîmëjôß)îÙéŠ ÅIMqµÌ‰Ô2'RËœH-s"×™“ «#¡¸g^&§5ÅÕ2'RËœH-s"µÌ‰lfN>=ìzÀ_œM÷JqÆs•zkLqS®àÆôîg•Œ+øYqß™Ò³âÆ¼‚÷Hw}ó뤱«GåGËÕègÅ©u2ãŒþì¸À„âèŒÓ?VwÊUêm®+ø¯§5ÅiMqZSœÖ÷ìÇ„âlOqçßÎr•z[#¡8«)Îjгšâ¬¦¸g‡j&ç5ÅùÞŒ»kTš]Á¥8¯)ÎkŠóšâžsšP\«)®Õ•,W©ògaöTq­¦¸VS\«)îÙѳ ÅõšâzMq}oÆ}>‚õ þ+ÅõšâzMqÏNN(nÔ7jеG%ËU~, Š5ÅšâžМPܬ)nÖ7kŠ›{3î¼$ž5ÅÍšâž™Pܪ)nÕ·jŠ[µG%ËUÞcØ‘PÜ*)îé1æ¯Çs•)Å=ÉUf÷$W™QÜ“\eFq$WÉgÜÛ»¬uÿâž,ŸPœÔWËœH-s"µÌ‰Ô2'4W©7ó„âžöŸPœÖWËœH-s"µÌ‰Ô2'²™9ù\OØçß_x©8§¹ÊÛ׎ÿ Åݬ_ÁíÜ«‘$³Ú¼{­kÅ‘ÑÇ^׊#ð“ânn×Iæ[»‚ŸwsR¸OÅþì“ ÅÑwóë}•wÎ+ø¯§5ÅiMqZSœÖ÷ì+% ÅÙžâοå*ïê] ÅYMqVSœÕg5Å=ûpLBq^Sœï͸š\Á¥8¯)ÎkŠóšâž}Ë'¡¸VS\«=*Y®òæÚŠk5ŵšâZMqÏ>¯”P\¯)®××÷fÜÙÃöšâzMq½¦¸g_¼J(nÔ7jеG%ËU~¨7¡¸QSܨ)îÙGÈŠ›5ÅÍšâfMqsoÆ'ì¬)nÖ÷ì»p Å­šâVMq«¦¸U{T²\åÃ>UÜ*)îé§ú^+Žç*SŠã¹Ê”âx®2¥8ž«L)Žç*¯gÜ]£¶æüwŠ{öõĄ⤦¸ZæDj™©eN¤–9¡¹ÊÛ—û{¥¸g´L(NkŠ«eN¤–9‘ZæDj™ÙÌœ|E9àÏ¿1úRq£–«µ\å¨å*G-W9j¹ÊQËU>ÿìkBq¥\å¨å*G-W9j¹ÊQËUŽZ®òù—xŠ+å*G-W9j¹ÊQËUŽZ®rÔr•Ï?ŽœPœ×WÊUŽZ®rÔr•£–«µ\åóïU'×jŠkµGe)W9j¹ÊQËUŽZ®òù'ÄŠë5ÅõšâJ¹ÊQËUŽZ®rÔr•Ï¿êžPܨ)nÔ7jÊR®rÔr•£–«˜«Û¹ÊQËUŽZ®rÔr•£–«µ\å¨å*æ*Çv®rÔr•£–«µ\å¨å*G-W9j¹Ê¹Ê±«µ\å¨å*G-W9j¹ÊQËUŽZ®r`®rlç*G-W9j¹ÊQËUŽZ®rÔr•£–«˜«Û¹ÊQËUŽZ®rÔr•£–«µ\å(å*] Wù}‘VÜ7â"W©Îúø¡8Õ+øYq*DqâWð³â„¼w—{?î‘(îúæÏŠSrÎÉ1eþCq:¯÷ÙrÀ§ÛŠã3N¯÷©ÒKø¯§5ÅiMqZSœÖg¨8ÛVœí)îüÛi®R[FqVSœÕg5ÅYMqŽŠómÅyMq¾7ã>5:¯à¿Rœ×ç5ÅyMq ×¶×jŠkµG%ÍUjk ŵšâZMq­¦¸ŽŠëÛŠë5ÅõšâúÞŒûz_Á¥¸^S\¯)n âƶâFMq£¦¸Q{T’\å§~Š5Åšâ&*nn+nÖ7kŠ›5Åͽw^ÏšâfMq ·¶·jŠ[5Å­šâVíQIs•êÅ­’â Wù}±¡¸'¹ÊŒâžä*3Š{’«Ì(îI®2£¸'¹ÊË÷¡Q›ðß)3'²9y’«L)®–9‘ZæDj™©eNx®RÝŠÃ̉lgNDkŠ«eN¤–9‘ZæDj™ÙÍœ|8ØïÑs•º«Tž«œÊöU½‚Ÿ×Ù./Wð³âSÜ÷Á>~Ü#QÜõÍŸ7ÛµâîÚº€ÿPÜ"§.Üú<àŠŠÓmÅñ7¯Ï«¼Íï{€ÿJqZSœÖ§5ÅiMq†Š³mÅÙžâοæ*§eg5ÅYMqVSœÕç¨8ßVœ×ç{3îC£]®à¿Rœ×ç5ÅyMq ×¶×jŠkµG%ÍUÎïâÂ3ŵšâZMq­¦¸ŽŠëÛŠë5ÅõšâúÞŒû|_Â¥¸^S\¯)n âƶâFMq£¦¸Q{TÒ}•“n]¸¾ù_)nÔ7Qqs[q³¦¸YSܬ)nî͸ó’xÖ7kŠ[¨¸µ­¸USܪ)nÕ·jJš«œj Å­’â0W©Û¹J}’«Ì(îI®2£¸'¹ÊŒâžä*3Š{’«¼œqwŽÕ/à¿SfN¶s•ú$W™R\-s"µÌ‰Ô2'RËœð\唌â0s²«TÑšâj™©eN¤–9‘ZæD63'Ÿ*ýNuæ*m;WiÇGC0m ¦Ý¾{¥Öo–çÎðG/Z<‚~Ú ð ×£¡…Ù«Þýhذçϸù®áQ?k ¨Ÿþ瘢ðøèù3I%µ>¶>trÂÖÂÖgøõóMØúà ¿~¾ [œá×Ï7a냜<ß„­Îpò|K­„­œ°õ°õÁNôÃÖg8Ñ[œáD?l}p‚3ý°õÁNô“ZH\ ýô ƒt;ìú~‚£~æ­ ¨Ÿ5ƒ~DÜ<êG´øÄNÇ*¬>®áø|Ço‡ŒÐÇ}#uëö=ÈJég±ù³pÅæÏbóç'óg±ùs‚“ù³Øü9ÁÉüYlþD8›?‹ÍŸüzþh* , +Ë(Ëœá×úQ–?8ïõ£,p†_ëGYþà'úQ–?8É~RþG™ÿQ|ˆ*ó?ÊüÏNôÃüÏNôÃüÏNôÃüÏ ÎôÃüÏNô3Sú™A?Þì ô ú;‚~nÀQ?_‹ÁGê§ ƒ£~†ÃÍãúzLŸÁû­£aņkxX_uüö Ÿñšœá¢¤oLù]$>U|ˆê"ñ©.Ÿžá×ñ©.Ÿžá×ñ©.Ÿžá×ñ©.Ÿžà$>ÕEâÓ3ü:>µTþÀbþÀeœá^Š¿ÄæÑô3ŒÀƒ~º íÒ¸ÎðŸÎ~4„ù£lôy9ý,Öî ×ðø|û^¿YÌt_æÏŸÓrÿb©üÓÁfL?Æôs‚ýÓÏ NôcL?'8Ñ1ýD8Ó1ýœàD?©ü5¦ ‚­1ý4¦Ÿœè§1ýœàD?éç'úiL?ÎôÓ˜~Np¢ŸÔúÍ:Ó.B¬3ýt¦Ÿœè§3ýœàD?éç'úéL?ÎôÓ™~Np¢ŸÔúÍ&Ó.Bl2ýL¦Ÿœèg2ýœàD?“éç'ú™L?Îô3™~Nðkýø-£¿‘øçþèuÿøÄ?gøuüã7ÿœá×ñßHüs†_Ç?~#ñÏ Nâ¿‘øç ¿Ž<•?p'óÇ1v'óÇÌŸ3üzþ¸“ùs†_Ïw2ÎðëùãNæÏ Næ;™?g8™?©õ³õ£“s¶>p¶>8É~Øúà 'úaëƒ3œè‡­Np¦¶>8É~Rñ©³ü¨cå,?ê,?z†“çËžáäùÆò£g8y¾±üè Ξo,?z†_>ßþþ½óð¼ ñ{{ãß|cö£á'\#ü]¾¾óhPh°¹Ü WïãhphXî~lª}WUýnêÞozõÛ5ì#¼÷jò«†­ƒŸôÚ×˽™iê´FÖ¨ÓuZ£Î:Û¦ÎjÔY:«Qg5êürKoš:¯Qç5ê¼FרkH]Û¦®Õ¨k5êZºV£®_îOS×kÔõu½F]¯Q7º±MݨQ7jÔu£FÝDêæ6u³FݬQ7kÔÍu ©[ÛÔ­u«FݪQ·JÔ=äþxï$IÝ7üwÔEø6u¾M]€ÿ‚:Œ&d;šZ4!µhBjфԢ ÁhB¶£ ©ER‹&¤MH)š0ŒaİF©3 QgŒºœPgŒºœPgŒºgÔ§N‘:ݦNkÔi:­Q§5ê ©³mê¬FÕ¨³uV£Î‘:ߦÎkÔy:¯Qç5êR×¶©k5êZºV£®Õ¨ëH]ߦ®×¨ë5êzº^£n uc›ºQ£nÔ¨5êFº‰ÔÍmêfºY£nÖ¨›5êR·¶©[5êVºU£n•¨ÃÖH û„: A]„oSáÛÔø/¨ÃhB¶£ ©ER‹&¤MH-šÀÖd;šZ4!µhBjÑ„”¢ ÇÖI ë”:Ç0ÐuΨ;Á uΨ;Á uΨ‹pFsê©Ómê´FÖ¨ÓuZ£Î:Û¦ÎjÔY:«Qg5ê©ómê¼Fרóu^£®!um›ºV£®Õ¨k5êZºŽÔõmêzº^£®×¨ë5êR7¶©5êFºQ£nÔ¨›HÝܦnÖ¨›5êfºY£n!uk›ºU£nÕ¨[5êV‰:ŒaİO¨Ã0ðÔEø6u¾M]€ÿ‚:Œ&d;šZ4!µhBjфԢ Œa]¶£ ©ER‹&¤MH)šhÃ6Ã6J]Ã0°1ê£î'Ô5FÝ N¨kŒºgÔ5N"uºMÖ¨ÓuZ£NkÔRgÛÔY:«Qg5ê¬F#u¾Mרóu^£ÎkÔ5¤®mS×jÔµu­F]«Qבº¾M]¯Q×kÔõu½FÝ@êÆ6u£FݨQ7jÔu©›ÛÔÍu³FݬQ7kÔ-¤nmS·jÔ­u«FÝ*Q‡1l#1ìê0 üu¾M]„oSà¿ £ ÙŽ&¤MH-šZ4!µhcØ&ÛфԢ ©ER‹&¤MtŒa;‰a;¥®cØuQw‚ê:£î'ÔuF]„3ê:§N‘:ݦNkÔi:­Q§5ê ©³mê¬FÕ¨³uV£Î‘:ߦÎkÔy:¯Qç5êR×¶©k5êZºV£®Õ¨ëH]ߦ®×¨ë5êzº^£n uc›ºQ£nÔ¨5êFº‰ÔÍmêfºY£nÖ¨›5êR·¶©[5êVºU£n•¨Ã¶“ö uþ‚ºߦ.·© ð_P‡Ñ„lGR‹&¤MH-šZ41l—íhBjфԢ ©ERŠ&ưƒÄ°ƒR70 ŒºÁ¨;Á uƒQw‚ê£.ÂuƒS§HnS§5ê´FÖ¨Óu†ÔÙ6uV£ÎjÔY:«QçHoSç5ê¼Fרóu ©kÛÔµu­F]«Q×jÔu¤®oS×kÔõu½F]¯Q7º±MݨQ7jÔu£FÝDêæ6u³FݬQ7kÔÍu ©[ÛÔ­u«FݪQ·JÔa ;H û„: A]„oSáÛÔø/¨ÃhB¶£ ©ER‹&¤MH-šÀvÈv4!µhBjфԢ ©D‚ç 9—XèqX‚Gû ;KØqXgø5uÂŽÃ:ï©vÖ N¨åÔ)R§ÛÔi:­Q§5ê´F!u¶MÕ¨³uV£ÎjÔ9RçÛÔy:¯Qç5ê¼F]CêÚ6u­F]«Q×jÔµu©ëÛÔõu½F]¯Q×kÔ ¤nlS7jÔu£FݨQ7‘º¹MݬQ7kÔÍu³FÝBêÖ6u«FݪQ·jÔ­uà 9—øuþ†ºߦ.·© ð_P‡Ñ„lGR‹&¤MH-šZ4!MÈv4!µhBjфԢ )Ex.±s‰…‡%x´¯°ã°„‡u†êØqXg8¡Ž‡u‚3êŒS§HnS§5ê´FÖ¨Óu†ÔÙ6uV£ÎjÔY:«QçHoSç5ê¼Fרóu ©kÛÔµu­F]«Q×jÔu¤®oS×kÔõu½F]¯Q7º±MݨQ7jÔu£FÝDêæ6u³FݬQ7kÔÍu ©[ÛÔ­u«FݪQ·JÔa KÎ%~F†¿ .·©‹ðmêüÔa4!ÛфԢ ©ER‹&¤M` KÎ%~J]-šZ4!µhBJÑžé$äL'¡¯ ‹$ìUba¯Ÿá„:ö*ñN¨c¯ŸàŒºÆ©S¤N·©ÓuZ£NkÔi:Cêl›:«Qg5ê¬FÕ¨s¤Î·©óu^£ÎkÔyº†ÔµmêZºV£®Õ¨k5ê:R×·©ë5êzº^£®×¨HÝØ¦nÔ¨5êFºQ£n"us›ºY£nÖ¨›5êfº…Ô­mêVºU£nÕ¨[%ê0†%g:=£ÃÀ_PáÛÔEø6uþ ê0šíhBjфԢ ©ER‹&0†%g:=¥®MH-šZ4!¥hÏtr¦“ÐW‰Eö*±°W‰ÏpB{•ø 'Ô±W‰OpF]çÔ)R§ÛÔi:­Q§5ê´F!u¶MÕ¨³uV£ÎjÔ9RçÛÔy:¯Qç5ê¼F]CêÚ6u­F]«Q×jÔµu©ëÛÔõu½F]¯Q×kÔ ¤nlS7jÔu£FݨQ7‘º¹MݬQ7kÔÍu³FÝBêÖ6u«FݪQ·jÔ­uÃ’3žQ‡aà/¨‹ðmê"|›ºÿuMÈv4!µhBjфԢ ©EÃ’3žRW‹&¤MH-šR4g: 9ÓIè«Ä‚Ç" {•XØ«Äg8¡Ž½J|†êØ«Ä'8£npê©Ómê´FÖ¨ÓuZ£Î:Û¦ÎjÔY:«Qg5ê©ómê¼Fרóu^£®!um›ºV£®Õ¨k5êZºŽÔõmêzº^£®×¨ë5êR7¶©5êFºQ£nÔ¨›HÝܦnÖ¨›5êfºY£n!uk›ºU£nÕ¨[5êV‰:ŒaÉ™NϨÃ0ðÔEø6u¾M]€ÿ‚:Œ&d;šZ4!µhBjфԢ ŒaÉ™NO©«ER‹&¤MH)šXÃ.Ã.JÝÂ0p1ê£î'Ô-FÝ N¨[ŒºgÔ-N"uºMÖ¨ÓuZ£NkÔRgÛÔY:«Qg5ê¬F#u¾Mרóu^£ÎkÔ5¤®mS×jÔµu­F]«Qבº¾M]¯Q×kÔõu½FÝ@êÆ6u£FݨQ7jÔu©›ÛÔÍu³FݬQ7kÔ-¤nmS·jÔ­u«FÝ*Q‡1ì"1ìê0 üu¾M]„oSà¿ £ ÙŽ&¤MH-šZ4!µhcØ%ÛфԢ ©ER‹&¤M¨C û}q¢NQpp¤îÞpMÝ~Mݽᚺ3üš:uBÝ N¨»7Pê©Ómê´FÖ¨ÓuZ£Î:Û¦ÎjÔY:«Qg5ê©ómê¼Fרóu^£®!um›ºV£®Õ¨k5êZºŽÔõmêzº^£®×¨ë5êR7¶©5êFºQ£nÔ¨›HÝܦnÖ¨›5êfºY£n!uk›ºU£nÕ¨[5êV‰:ˆaà Iê ü u¾M]„oSà¿ £ ÙŽ&¤MH-šZ4!µhB0šíhBjфԢ ©ERŠ&ð}X%ïÃ*݆­øJ©²mØÊ¶aŸá„:¶ û 'Ô±mØ'8£®sê©Ómê´FÖ¨ÓuZ£Î:Û¦ÎjÔY:«Qg5ê©ómê¼Fרóu^£®!um›ºV£®Õ¨k5êZºŽÔõmêzº^£®×¨ë5êR7¶©5êFºQ£nÔ¨›HÝܦnÖ¨›5êfºY£n!uk›ºU£nÕ¨[5êV‰:ŒaÉû°Ï¨Ã0ðÔEø6u¾M]€ÿ‚:Œ&d;šZ4!µhBjфԢ ŒaÉû°O©«ER‹&¤MH)š˜ÃNÃNJÝÄ0p2ê&£î'ÔMFÝ N¨›ŒºgÔMN"uºMÖ¨ÓuZ£NkÔRgÛÔY:«Qg5ê¬F#u¾Mרóu^£ÎkÔ5¤®mS×jÔµu­F]«Qבº¾M]¯Q×kÔõu½FÝ@êÆ6u£FݨQ7jÔu©›ÛÔÍu³FݬQ7kÔ-¤nmS·jÔ­u«FÝ*Q‡1ì$1ìê0 üu¾M]„oSà¿ £ ÙŽ&¤MH-šZ4!µhcØ)ÛфԢ ©ER‹&¤Màû°JÞ‡Uº [ñ•ReÛ°•mÃ>à ulöN¨cÛ°OpFÝâÔ)R§ÛÔi:­Q§5ê´F!u¶MÕ¨³uV£ÎjÔ9RçÛÔy:¯Qç5ê¼F]CêÚ6u­F]«Q×jÔµu©ëÛÔõu½F]¯Q×kÔ ¤nlS7jÔu£FݨQ7‘º¹MݬQ7kÔÍu³FÝBêÖ6u«FݪQ·jÔ­uÃ’÷aŸQ‡aà/¨‹ðmê"|›ºÿuMÈv4!µhBjфԢ ©EÃ’÷aŸRW‹&¤MH-šJ4a 1ì÷ʼn:SFÀ5‘º{Ã5ugø5u÷†kêÎðkêL u'8¡îÞ@©S¤N·©ÓuZ£NkÔi:Cêl›:«Qg5ê¬FÕ¨s¤Î·©óu^£ÎkÔyº†ÔµmêZºV£®Õ¨k5ê:R×·©ë5êzº^£®×¨HÝØ¦nÔ¨5êFºQ£n"us›ºY£nÖ¨›5êfº…Ô­mêVºU£nÕ¨[%ê † ƒ$©ƒ0ð7ÔEø6u¾M]€ÿ‚:Œ&d;šZ4!µhBjфԢ ÁhB¶£ ©ER‹&¤MH)š0ŒaİF©3 QgŒºœPgŒºœPgŒºgÔ§N‘:ݦNkÔi:­Q§5ê ©³mê¬FÕ¨³uV£Î‘:ߦÎkÔy:¯Qç5êR×¶©k5êZºV£®Õ¨ëH]ߦ®×¨ë5êzº^£n uc›ºQ£nÔ¨5êFº‰ÔÍmêfºY£nÖ¨›5êR·¶©[5êVºU£n•¨ÃÖH û„: A]„oSáÛÔø/¨ÃhB¶£ ©ER‹&¤MH-šÀÖd;šZ4!µhBjÑ„”¢‰†1l#1l£Ô5 £®1êNpB]cÔà„ºÆ¨‹pF]ãÔ)R§ÛÔi:­Q§5ê´F!u¶MÕ¨³uV£ÎjÔ9RçÛÔy:¯Qç5ê¼F]CêÚ6u­F]«Q×jÔµu©ëÛÔõu½F]¯Q×kÔ ¤nlS7jÔu£FݨQ7‘º¹MݬQ7kÔÍu³FÝBêÖ6u«FݪQ·jÔ­uÃ6Ã>¡ÃÀ_PáÛÔEø6uþ ê0šíhBjфԢ ©ER‹&0†m²MH-šZ4!µhBJÑžKlä\b£Çaíkì8,cÇaá„:vÖN¨cÇaàŒºÎ©S¤N·©ÓuZ£NkÔi:Cêl›:«Qg5ê¬FÕ¨s¤Î·©óu^£ÎkÔyº†ÔµmêZºV£®Õ¨k5ê:R×·©ë5êzº^£®×¨HÝØ¦nÔ¨5êFºQ£n"us›ºY£nÖ¨›5êfº…Ô­mêVºU£nÕ¨[%ê0†%ç?£ÃÀ_PáÛÔEø6uþ ê0šíhBjфԢ ©ER‹&0†%ç?¥®MH-šZ4!¥hÏ%6r.±Ñã° ö5v–±ã°ÎpB;ë 'Ô±ã°NpFÝäÔ)R§ÛÔi:­Q§5ê´F!u¶MÕ¨³uV£ÎjÔ9RçÛÔy:¯Qç5ê¼F]CêÚ6u­F]«Q×jÔµu©ëÛÔõu½F]¯Q×kÔ ¤nlS7jÔu£FݨQ7‘º¹MݬQ7kÔÍu³FÝBêÖ6u«FݪQ·jÔ­uÃ’s‰ŸQ‡aà/¨‹ðmê"|›ºÿuMÈv4!µhBjфԢ ©EÃ’s‰ŸRW‹&¤MH-šJ4á7ˆa¿/NÔùQpp¤îÞpMÝ~Mݽᚺ3üš:¿êNpBݽR§HnS§5ê´FÖ¨Óu†ÔÙ6uV£ÎjÔY:«QçHoSç5ê¼Fרóu ©kÛÔµu­F]«Q×jÔu¤®oS×kÔõu½F]¯Q7º±MݨQ7jÔu£FÝDêæ6u³FݬQ7kÔÍu ©[ÛÔ­u«FݪQ·JÔA IRaào¨‹ðmê"|›ºÿuMÈv4!µhBjфԢ ©E‚Ñ„lGR‹&¤MH-šR4áÃ:‰aRç:£Îu'8¡Îu'8¡ÎuΨsN"uºMÖ¨ÓuZ£NkÔRgÛÔY:«Qg5ê¬F#u¾Mרóu^£ÎkÔ5¤®mS×jÔµu­F]«Qבº¾M]¯Q×kÔõu½FÝ@êÆ6u£FݨQ7jÔu©›ÛÔÍu³FݬQ7kÔ-¤nmS·jÔ­u«FÝ*Q‡1¬“ö uþ‚ºߦ.·© ð_P‡Ñ„lGR‹&¤MH-šZ41¬Ëv4!µhBjфԢ )Ex¦““3œ¾Jìx,’³W‰½J|†êØ«Äg8¡Ž½J|‚3ê§N‘:ݦNkÔi:­Q§5ê ©³mê¬FÕ¨³uV£Î‘:ߦÎkÔy:¯Qç5êR×¶©k5êZºV£®Õ¨ëH]ߦ®×¨ë5êzº^£n uc›ºQ£nÔ¨5êFº‰ÔÍmêfºY£nÖ¨›5êR·¶©[5êVºU£n•¨Ã–œéôŒ: A]„oSáÛÔø/¨ÃhB¶£ ©ER‹&¤MH-šÀ–œéô”ºZ4!µhBjÑ„”¢‰…1ì"1,ý´.À5ÂuìÓºg8¡Ž}Z÷ 'Ô±OëžàŒºÅ©S¤N·©ÓuZ£NkÔi:Cêl›:«Qg5ê¬FÕ¨s¤Î·©óu^£ÎkÔyº†ÔµmêZºV£®Õ¨k5ê:R×·©ë5êzº^£®×¨HÝØ¦nÔ¨5êFºQ£n"us›ºY£nÖ¨›5êfº…Ô­mêVºU£nÕ¨[%ê0†]$†}B†¿ .·©‹ðmêüÔa4!ÛфԢ ©ER‹&¤M` »d;šZ4!µhBjÑ„¢‰ÿzûó9ÜýÛ_ÿ~“ÃþË'u𛞃Û®WW7„ƒƒ;ÂÁÁƒ7ïï Þ| |0ø`ð‰ðÉà“Áƒ/˜ã<<ç~v­N˜Õ ³:A«fuB¬ÎÐæ•Ù¼1›7´ye6o7:º!ÜÜÜî î ÞÞ¼1xGxgðÎàáƒÁƒO„OŸ ¾¾œØ¼¡Í+³yc6ohóÊlÞ˜ÍÚ¼2›7fóŽ6oÌæÙ¼£Í³y¿ÑÑ áÆàÆàŽpgpgð†ðÆàÁ;Â;ƒw >|"|2ødð…ðÅàÄæmÞ˜Í;³yG›7fóÎlÞÑæÙ¼3›ohóÎl¾1›ohóÎl¾Ýèè†pcpcpG¸3¸3xCxcðÆàáÁ;ƒ„ >>|2øBøbpbó mÞ™Í7fó mÞ™Í7fó mÞ™Í7fóm¾1›ïÌæ;Ú|c6ßottC¸1¸1¸#Üܼ!¼1xcðŽðÎàÁƒŸŸ >|!|18±ùŽ6ߘÍwfóm¾1›ïÌæ;Ú|c6ߙʹùÎl~0›hóÙü¸ÑÑ áÆàÆàŽpgpgð†ðÆàÁ;Â;ƒw >|"|2ødð…ðÅàÄæÚ|g6?˜Í´ùÎl~0›hóÙü 6/˜·–·–·ÌÛËÛËÛæm„åm„åmó6Âò6Âò6‚yayayÁ¼°¼°¼`ÞFXÞFXÞF0o#,o#,o#˜·–·–·ÌÛËÛËÛæm„åm„åmó6Âò6Âò6‚yayayÁ¼°¼°¼`ÞFXÞFXÞF0o#,o#,o#˜·–·–·ÌÛËÛËÛæm„åm„åmó6Âò6Âò6‚yayayÁ¼°¼°¼`ÞFXÞFXÞF0o#,o#,o#©VX +©VX +©VX +©VX +©VX +©VX +©VX +©VX +©VX +©VX +©VX +©VX +=³žÃJϬç…ŰÒ3ëya1¬ôÌz^X +=³žÃJϬç…ŰÒ3ëya1¬ôÌz^X +=³žÃJϬç…ŰÒ3ëya1¬ôÌz^X +!†ÌæY +!†ÌæY +!†ÌæY +!†ÌæY +!†ÌæY +!†ÌæY +!†ÌæY +!†ÌæY +!†ÌæY +!†ÌæY +!†ÌæY +!†Ìæi »25)YÌæW¦&%ëFGOÔ¤d1›_™š”,fó+S“’Ål~ejR²˜Í¯LMJ³ù•©IÉb6¿25)YÌæW¦&%‹ÙüÊÔ¤d1›_™š”,bóŠuXeyeuXÅ:¬²¼²:¬bVYÞFYV±«,o£¬«X‡U–·QV‡U¬Ã*ËÛ(«Ã*Öa•åm”Õaë°Êò6Êê°ŠuXeyeuXÅ:¬²¼²:¬bVYÞFYV±«,o£¬«¸žWV“R¶žW\Ï+«I)[Ï+®ç•Õ¤”­ç×óÊjRÊÖóŠëye5)eëyÅõ¼²š”²õ¼âz^YMJÙz^q=¯¬&¥l=¯¸žWV“R¶žW\Ï+«I)[Ï+®ç•Õ¤”­ç×óÊjRÊÖó:qm³˜ÍOfó×6‹Ùü¼ÑÑ áÆàÆàŽpgpgð†ðÆàÁ;Â;ƒw >|"|2ødð…ðÅàÄæ'®m³ùÉl~âÚf1›ŸÌæ'®m³ùÉl~ejRÊÖóº25)eëy]™š”²õ¼®LMJÙz^W¦&¥l=¯+S“R¶ž×•©I)[ÏëÊÔ¤”­çuejRÊÖóº25)eëy]™š”²õ¼®LMJÙzÞBöFlÞXÖBöFlÞXÖBöFlÞXÖBöFlÞXÖBöFlÞXÖBöFlÞXÖBöFlÞXÖBöFlÞXÖBöFlÞXÖBöFlÞXÖBö&Ìê„YÚüM˜Õ1›Ç:¬±:¬±:¬aÖXÖXÖ°k¬k¬kX‡5V‡5V‡5¬Ã«Ã«ÃÖaÕaÕa ë°Æê°Æê°†uXcuXcuXÃ:¬±:¬±:¬aÖXÖXÖ°k¬k¬kX‡5V‡5V‡µ–²yV‡µ–²yV‡µ–²yV‡µ–²yV‡µ–²yV‡µ–²yV‡µ–²yV‡µ–²yV‡µ–²yV‡µ–²yV‡µ–²yV‡µ–²yV‡5ÌÛËÛËÛæmŒåmŒåm ó6Æò6Æò6†ycycyü±¼±¼aÞÆXÞÆXÞÆ0oc,oc,oc˜·1–·1–·1ÌÛËÛËÛæmŒåmŒåm ó6Æò6Æò6†ycycy›)›gy›)›gy›)›gy›)›gy›)›gy›)›gy›)›gy›)›gy›)›gy›)›gy›)›gy›)›gy›ïÏg}ÂY®òçÇ’¸"\œŽn77w„;ƒ;ƒ7„7o ÞÞ¼3ø@ø`ðÁàá“Á'ƒ/„/_Ž6Ïr•??(xÀÑê„Y0«C›g¹ÊŸ–û÷”ͳ:¬{ÊæYÖ=eó¬ëž²yV‡uOÙ<«Ãº§lžÕaÝS6Ïê°î)›guX÷”ͳ:¬{ÊæYÖ=eó¬ëž²yV‡uŒaí%vÃ:ưÎö;‹acXg{‰Å°Ž1¬³½ÄÎbXÇÖÙ^bg1¬c ël/±³Ö1†u¶—ØY ëÃ:ÛKì,†uŒaí%vÃ:ưÎö;‹acXg{‰Å°Ž1¬³½ÄÎbX_™÷aÕ¤|eÞ‡uV“ò•yÖYMÊWæ}Xg5)_™÷aÕ¤|eÞ‡uV“ò•yÖYMÊWæ}Xg5)_™÷aÕ¤|eÞ‡uV“ò•yÖYMÊWæ}X¿¨Iý¯ûß_2îôp2Ó÷HbmŽ÷·ŸG6ÉÍÄÞ üÛ@Eµ À¿MOî‘™2ø·…¹õ£ÛÎTq ÿ6‘õñà36ø·Žç8ú¡½6n6üP’öå7€Ô ·kx˜7}pœ:Tü°o]߯Lú³áŽŠ£‡ÝÐc½ã¦g»-øq[ÍÅ|Å^oW•éè˜) pÌ m“Áça´ã&_±á÷Ffp nÌct\ùÜm€Ü|XàÌ9̯vcp‡Aáó[£ü`þþt¼|b— ƒÃ|ïG?˜_FÜDxînÚóè¾UÌü N¼fƒåq#7U»·E¸AƒP¸Gý À|³ƒwp&ÇÓßô’n²ü`~N5€Ã“V•P‡•€ûñŽÌOâ Ã+UzƒÑC’^=äâïþà¸*_7ÇÅwG8.«Ù͇l¸zøHX¦³[_ pxÚ4e7>ÎŽ+Sscp N×1ãb8Å~{Œšl™×Æàȼ,€·Ø@àÁ!"6eBà¡C!…]äýê€#óÂæ{\ú?&¬þõï’ôÖüþÕ á/óՀ̷ÅàÈücÂ~5 óWóý«0Ÿ¾‡5“- Ÿ`4zøÁüGq“À‘ù5ÚGæ•Þ<2/ë{i¤a»s‘v5-€£‡%˜Zð°7žóJ¥ŠûŠ´µðƒù©ƒÂ'Ì‹ãA­¸ågzŸÌÛÝGp\ÛtaÔ¡‡ÿ~\èH1?ó#Åü`Ìóƒ1?RÌÆüH1?ó#Åü`ÌÇ28 BOo)«‹ÓûÄMœ^3Ðð𜧣ãs~v€Ãs~4 Ÿ0ݶðË¢7O›õ×ÑÔÆàHÝú~Î[|Î[¿|XÙ-®m àöbô¯^9€yÞqÑÏùûœaðù3ûjæ…8) Ïy7=àñ9ÏFÏùþ­8 ï5ÜC©KÅY|}¡w€[œ î—K#‹o§…ð_ GGæ§38xXiààaoÝ™ŸÇ“ÖÂæ|™ì·Gæ¿Wæ/™ÿêuÁüWÃ+æ¿z]0ÿÕðŠù¯^ýzÊøKæ¿z]0ÿÕðŠùÏ^WÌ5¼bþ«×ó?6óÜC¼kŵø@E8ÌdE†M7Ÿ½.·Ó\ŽþqóãlGÃÉ Ü.WÔ6ÎAà'ë8zâA=ÎÖq4œ ‚ÀOÖñÝp6ˆkøÙ:ކ“A\*nž­ãh8Ïk½Ï³A\ÃÏÖq¹3íbF»RF»˜Ñ®ŒÑzÀIyˆ.—…_½Ð¯pôÜNGo?—F_ @]scðY#ÃÑ1×:ƒcrè=Ä v€õ’¸|;ôu’9ÖðýˆßCuþ®7 ‡y©k¼_•×?®áaq£·óm]ÂÛù†™½ïñ»á|[—ðø¤=–Fž´ ŽF{Ì8OZ!9jOZ½!¼Ç¹Dà@ßðæ¡.£·Éà+fs¿Î ýkxX{„kÌ]Â'c~¦˜ŸŒù™b~2ægŠùɘŸ)æ'c~¦˜ŸŒù™bþGFóhÐ×1¬ÿÈh þ:Wé?2šGCOÁOÍ£a¾ð2_½NÍï†só~Îh ú|A~þô”¶Û{³·Ÿ•úظ Jàv(§½/yûùU(·ùnƒÀÛQ’’÷[»ø´Q×÷¾®áÇo—»Öm¾ýü6‘Ìñ>ýnì·[ê·ûí–úíÆ~»¥~»±ßn©ßŽÑÞýæUÞ.>2³üýÆà)†÷Ùß~~%æ¾`{ïBàíxPÞÞý›yÛÞç5óoÝŸ Ýß.¾Ur_Ù5uýö–úíýö–úíýö–úíýö–úíP/•»“8~;”H?ìIÜðæ­¿ýüj„Ü9µFàíðp÷ß®oŸ>¸~›×pøí÷Ñ¥½]|»à>º\+WV}¾¯õvññû:];Ôß›¾ýüz€èí}(z¿+FG½::êÝáa…k›&ïîàxž÷ÔõÞæÛCèåc“– ·ï_èþ>ÚÛSäå¾¾½Ë%ðö½zjë>ÈÛÏ£Ðõ6(üøí.-À1¹H6ž,·û¼üž°xùÇþ©¹Ü/zWœ½ýÁ›¸VìPœ:)Ã…-.)ë®÷ï%1¨÷Pä¶®áðœ_ó]æÛϳ‡wöÛÃ|wOøöóðÂ'¡ n8ÈÔ·Ÿ§Îññ«¼]3æ;e>Ì÷†Þ~žgÃî¤\Â1wawio‡Ø}lúP7È5Âè»h« !ð;Rïþíê(µq_s]ÃÁǵ»âŽÑÁÇY÷ëÑ!{ðéÆÛÛÏÃÌÚÇs¾¸¡uŠƒìÁ¸/J¯—xèØÇʪß<Ì÷õâ$7z¿¯€º¼ý<ë¾ Ë<+%¬mð¾¶ÁÃNÂÚ1ák<­$¬mÂYtmƒGn„µ ¦Á×6á¤îïfo‡Í0ƒÀ¬ÑêÇzO'úðZ'ðc=¯ÆõvuÄŽôw¹†ãz^ï®ìí⌜çwé ñ섨÷–Ò{czo)½7¦÷–Ò{czo)½ãžßûÍGÐbXápØó{ÐëÛÏÓJî+˜w_Þp×ë÷ê"¹qÎ_¯.ÂÉ÷Ÿ8úÛÅ™àˇõ>SzŸLï3¥÷Éô>SzŸLï3£w8"A»·÷Õß~~ðqºÎ8°uW¯ØÛÓ ü㵇iþç··û³ùXÛà+ø½+É]À›öò¹òo?Þ¡—u§n^2ï½ã›Â\ïøBpÐ;¾êËõŽoô½‡JÕ;¾–ôŽ/œ>Ñ;{ÖyêYçìYç©g³g§žuΞužzÖAeDä€÷þöã¥Xñ¡ïæþ½ž}¼ßôíÇ[­zë7€CeD­Ý•Öó÷‡`¿¶yXÛ´{lÇÍ¿}N}_?àÿû¿Ç—~U¿Þ“úh° WððÖîÛã½È†ö£á ^»ýx×è|DøÅV¥{¯øîè=œø3ºÄ›_órt ÷ؽÿ]Âm¹_Ôß?zá=ÊgÊíѰBƒ^ÿv ÔÍõU ýh8>o—ððΰN›àámà{0syó¦?z4êÞÚX—ðÆàQ£óú·Û$pÇw‘õî±úÜÁ[FïôsŸ˜ÿ—¿ýŸ¿þ×ÿýooŸNªÜN§ÞêúÚþô£—¦zYª—§zµL/Iݽ$î^OLÜÿ}æÿùg½>3@W²4%KS²,%ËR²<%ËS²ZJVKÉê)Y=%k¤d”¬™’5S²VJÖÊÈŠ‡0Y±••²{IÙ½¤ì^2v¿Róñ|*ˆË{¿’¥)Yš’e)Y–’å)Yž’ÕR²ZJVOÉê)Y#%k¤dÍ”¬™’µR²VFVj>ž"a²Rv/)»OÍÇó!%W²þ)ÿø£—Ü×ÕãJ–¦diJ–¥dYJ–§dyJVKÉj)Y=%«§d”¬‘’5S²fJÖJÉZY‰ùø£••²{IÙ½¤ì^2vo©ùhçõýø,þ¥)Yš’e)Y–’å)Yž’ÕR²ZJVOÉê)Y#%k¤dÍ”¬™’µR²VFVj>žzQY)»—”ݧæ£IÆî[j>žzé´ÏbêYš’¥)Y–’e)Yž’å)Y-%«¥dõ”¬ž’5R²FJÖLÉš)Y+%ked¥æã©••²{IÙ}j>žzY=5O½>ŠäíJ–¦diJ–¥dYJ–§dyJVKÉj)Y=%«§d”¬‘’5S²fJÖJÉZY©ùxêEe¥ì^RvŸš§^DÖHÍÇ‘ò#5GÊ?ŽÔ|)ÿ8Róq¤üãHÍÇ‘ò#5GÊ?ŽÔ|)ÿ8Róq¤üãHÍÇ‘ò#5GÊ?ŽÔ|)ÿ8Róq¤üãJÍÇs/?sµÿ”•šç^L–¥dYJ–§dyJVKÉj)Y=%«§d”¬‘’5S²fJÖJÉZY©ùxîÅd¥ì^RvŸšç^—²Ô3óñÜëzn«gæã¹•e)Y–’å)Yž’ÕR²ZJVOÉê)Y#%k¤dÍ”¬™’µR²VFVf>ž{QY)»—”ÝKÊî3þQSñã¹—­þîW²4%KS²,%ËR²<%ËS²ZJVKÉê)Y=%k¤d”¬™’5S²VJÖÊÈJÍÇsüÈd¥ì^RvŸšçøñZÖLÍÇ™Y¯žŽ;ä²4%ËR²,%ËS²<%«¥dµ”¬ž’ÕS²FJÖHÉš)Y3%k¥d­Œ¬Ô|œ™õªÎÔ|œ’²ûÔ|œ©õj*~üÙ몖™ÚŸsыȲ”,KÉò”,OÉj)Y-%«§dõ”¬‘’5R²fJÖLÉZ)Y+#+5ô"²Rv/)»OÍǽ®dYj?À^­_ìõ±Ô~€½˜,Kɲ”,OÉò”¬–’ÕR²zJVOÉ)Y#%k¦dÍ”¬•’µ2²2óñG/&+e÷’²{IÙ½dì>?þì5Ûû•,MÉÒ”,Kɲ”,OÉò”¬–’ÕR²zJVOÉ)Y#%k¦dÍ”¬•’µ2²RóñG/"+e÷’²ûÔ|üÑëJÖùÛØ×²Î½îñ÷E-óü¡l*KS²,%ËR²<%ËS²ZJVKÉê)Y=%k¤d”¬™’5S²VJÖÊÈÊÌÇs/*+e÷’²{IÙ½dì>UïøÑëã  +Yš’¥)Y–’e)Yž’å)Y-%«¥dõ”¬ž’5R²FJÖLÉš)Y+%ked¥æã¹“•²{IÙ}j>ž{]ËJí_=÷rõ÷y%KS²4%ËR²,%ËS²<%«¥dµ”¬ž’ÕS²FJÖHÉš)Y3%k¥d­Œ¬Ô|<õ¢²Rv/)»OÍÇS/"+•_õÔþOåW=µ?ÇSùUOíÏñT~ÕSûs<•_õÔþOåW=µ?ÇSùUOíÏñT~ÕSûs<•_õÔþOåW=µ?ÇSùUOíÏñT~Õ3ûsþC3ñcìõùßñy ÌYš’¥)Y–’e)Yž’å)Y-%«¥dõ”¬ž’5R²FJÖLÉš)Y+%ked%æcìõLVÊî%e÷’²{Iؽ¥æcìÕ†¾÷9®diJ–¦dYJ–¥dyJ–§dµ”¬–’ÕS²zJÖHÉ)Y3%k¦d­”¬•‘•™±×Y)»—”ÝKÊî%c÷žš¡—ÎþnîW²4%KS²,%ËR²<%ËS²ZJVKÉê)Y=%k¤d”¬™’5S²VJÖÊÈJÍÇÐ뉬”ÝKÊîSó1ô¢²Fj>ŽÔ|©ù8n¹û²”,KÉò”,OÉj)Y-%«§dõ”¬‘’5R²fJÖLÉZ)Y™ù8Róq¤æãHÍÇ‘š#5Gf>ºdæcè¥Öô}}žWþC–¦diJ–¥dYJ–§dyJVKÉj)Y=%«§d”¬‘’5S²fJÖJÉZY™ùz=“•²{IÙ½¤ì^2v¯©ùˆ½D?OöW²4%KS²,%ËR²<%ËS²ZJVKÉê)Y=%k¤d”¬™’5S²VJÖÊÈJÍGìõLVÊî%e÷©ùˆ½¸,KÍÇЫÏù~v%KS²4%ËR²,%ËS²<%«¥dµ”¬ž’ÕS²FJÖHÉš)Y3%k¥d­Œ¬Ô| ½žÈJÙ½¤ì>5ã×·¯eýßT½ãÜëã´éù~%KS²4%ËR²,%ËS²<%«¥dµ”¬ž’ÕS²FJÖHÉš)Y3%k¥d­Œ¬Ä|<÷â²Rv/)»—”ÝKÂîSõ޽îÞöv)KS²4%ËR²,%ËS²<%«¥dµ”¬ž’ÕS²FJÖHÉš)Y3%k¥d­Œ¬Ì|<÷¢²Rv/)»—”ÝKÆî=5ôêײ4%KS²,%ËR²<%ËS²ZJVKÉê)Y=%k¤d”¬™’5S²VJÖÊÈJÍǽˆ¬”ÝKÊîSóñG¯KY#5ϽD¯eiJ–¦dYJ–¥dyJ–§dµ”¬–’ÕS²zJÖHÉ)Y3%k¦d­”¬•‘•šç^LVÊî%e÷©ùxîu)+•_ýÑKZ—²4%KS²,%ËR²<%ËS²ZJVKÉê)Y=%k¤d”¬™’5S²VJÖÊÈÊÌGÿñ½"+e÷’²{IÙ½dìÞRóñÔ«¯Ë¹m©ùxêEeYJ–¥dyJ–§dµ”¬–’ÕS²zJÖHÉ)Y3%k¦d­”¬•‘•š§^TVÊî%e÷©ùxêu)ë/?fЕ¬½ú××üβ,%ËR²<%ëÔKÖ¥¬–’ÕR²zJÖ©—^ÿÆ‘’52²$¥Çó‰·Û¥¬”O½”ÈJqêõAý•¬÷§^LVŠûS/!¿q¥dÞ`±KYš²ûS/¿¾/Mñuêe}^Êš)Y3ý¦ø:õº¯Æ®dYÊîO½ˆ­ZÊîϽîÿ+Y)»?õb÷•Òã¹—KY)=žz‘ûò[FÖ©™Cž²ûS/òüò÷§^LVÊVý<·¿žÑÿí¯ÿõ/ÿËþOÿ?*»H°/`DyLP-1.10.4/Data/Netlib/25fv47.mps.gz0000644000175200017520000015021210430174061015233 0ustar coincoin‹ðK®925fv47.mps¥ýÛ’9Ίޯˆõze$Ïä¥Ë.»¢ºÝk¶§gþi¿ÿƒìL)I€8)©/:–¾"q ‚ ø×—Ÿï—öŸ ßÿëÓÿûÿüúÿþïßÿïÿsùërùµnÿm·}7ÿ[Žößßíóš ü»=>»õgEn‹‡¦~üò÷õã¿~´?\ƒý0©}ôí/ü°¶~ü†>ÌØ6Ä÷Ð~ðÝgøÁññ×ÛZ‡°ûçãŸÍþ¹À¿ÛãOÿúºþûïíãŸûÇ_ßÿ>þõç¿ßÿw|üó[ûø¯?ÚÇ_ðñÇÚ>~oÿø?óëëñ¯_ÖÕÀG['Ÿ÷>V1 ÏûÇ|Ìð±´f…0´áŒƒ0²Ñ Œf`4£­òÒ ÏûGÎÂp†³0†…1,ŒQÏ ÏÛG$9ÃÁή~¶èóþHuñÿö¦á`†ö@ž‡Yxãy˜†‡á< çjŸ†ö0´‡¡ŒuŸaìàQ!Ü?ôyÿd‡3úsþ¹´q½´è³CŸ÷>Zøèà#Ì.ÂŒ"Ì(ÂŒ"Ì"Â,Œ–`ˆ„HMð‡SDÿ ƒ$$eô 0ôÏ0x6ðÏhÍ0‘ ´f 5Ô2L#Ã42 a¸´­ÀhF+0ZÑ è\A:WÚ¦öÍ4VceÐçý£…ýÂÁ?{ôÏþ9 `‚›m{k¶Í ÏûÇ„þõfÿÞšý3è³EŸú¼,à%€bT Ò * Pi€2ƒ(3ˆ2”D™Ê:·„<LŒ*ù sµý3þ “µH$&nÑÄ-š¸…‰[˜¬v#/ka®ͯ~¶èóþ)•LÕÁôLÃÁ4LÃ!ö9˜’ƒ)y4%¦äaJ¦á÷<»‡9yIJúÙ×ÏÞsõH[ëg‡>ï‘¶z˜x@0Ù€øW?[ôyÿª X6 - ͼ5ëoÐçýci›Å‹ÿÿínñïc4‹ÿÿ ,þÛÝâ¿…Ñ"Œ–`´£% :9øW-Áh FK@g‚ÑŒ–a´ £e -ÃhFË0Z†Ñª…7èóþFÎ0rµö}Þ?Â,ªå7èóþÑ¡†Ù˜]Ù˜]˜Qó owßp|4ðÑÂG=| 𱮌¯~«z÷õ{[æ_¿çªéßÞ~þ»~„ß~û£YÆo?B…}ƒ¿ðžê<ÕûÚ¦óîæÂ;8„wpïàÞÁ!¼ƒx'ðÆþ ü;Íï`ßßÁ¾¿ƒ‡@ùlô;Øâw°Åï`€ßÁº¾¯ˆ~ë`öó0š‡¿àá/xø öðÇü±…f+ßïaæñÏð×üµfEÞ›1è³EŸ÷>:øbn&åìÈ;Ø‘w°#ï`GÞ!ˆ|;òväìÈ;¬÷wXïï°Þßa¿Ã‡5þëúÖõ;¬åwXˆï°ßa!¾ÃB|7 î°ßa!~ €>[ôyÿhᣃ>ô7üsDÿáŸ|Ìèþ¹´mÝ}Àºû€u÷ëîÖݬ»XwmÝôÙ¢ÏûG4#“ÑOZÈŸ÷ýfmaÖñ×’Ág‹>;ôÙ£ÏûG‡~ÔC4Ÿ÷H6ÍÁçý#’SýlÑçý#âœnYÄ-‹¸eCqȇ *ü@Q!|vè³GŸ÷ÀE‡¸è[°Å!¶8`‹ClqÀ ‡Xá€|‡ètˆNtº‚þèô0YÄìAœÍÛü=Œîш顇Ѱ' … hA˜I@3 HáR¸3 h†õ³«ŸïV¤f ú¼ ð1ÂÇ3|,íc\á¯5ð–þãnéﳋ0‹#G9Fô×€«faf‘`ä¼k¾à|Áø‚ð'~@œøqâĉà7>Ào|€ßø¿ñ~ã£ù ƒ>[ôÙ¡ÏÛÇ‚8[Vøy™˜)ðyÿ˨ÀÒ)0Õæ•>Àé|@È÷qùî¸}¶èóþ1¡Ÿ$ô“?iúoÖ‚~]Яa&àI ø c<üæg`Æ3i>À€{4à ÊwÀçýc@ÿÜ(7à JlÀçý#±QkÀWð•¤iÀAp¤GhVD 89ø¼}„Ä|Þ?ôÏÍþÀg‡>ïa¦fja¦fja¦1ɬÁ!äà³CŸ÷@ ÌÎÁ윃? ¾>;ôyÿ8 ÀfíЬšµƒ™:$r³ö0k_×­ïbÀ£ˆâ 8Q¼'bÀYȘºïÌ' ?3Žð×"üµh¼ÓŒˆ¹17Âô#ZPæaN¨Šˆ£Í©45ënZ¤oÐg‹>ï-|tð¦Ñ¬¾L‚L‚¹gŽßÂ,2Ì"ÃhFËðÇ2ü±æ wFÜ€7°q0`à lü lü Øpû –ÝÀ~ÃÀ~ô¿AŸ÷>zøàc„ >fø#ÙÀÈF30šÑšÉûD›ø¼´ðÑÁGÑŸˆèODøç„þ9Á?gôÏþ¹´Íx¶ŽAŸ÷0;³30;D ÎÀp†³0„…?fáYøcH²ðw-ü]×Áßu0uWeó &òLä' ÁÉç|‚íüù vñex?!ÿÃø †ñ³F‹>ï#úg`OŸáciC‹±àóþ¦,ü+°#;ZÜü qó'ÄÍŸ BÒãBáO…?!þ„üÇ'„¿Ÿþ~‚üù †ð ág3„}Þ?zôÏ0‹³€7ø¼„%˜Q‚eЭ ÌÌ Ó 2Í c3¨H?Q€¨Ó, ó‚VuÝ+hU˜r3’Ÿ`$?Á~‚5ükø ÖðÅÇ?Á>ýDå?›²èóþÑÃÇ#FŒí'†i†æ¯f Ìö¹Yš_`¬~õøõÃtÿç?¿}¿üø÷¿n)ÛÛÇ_ðýà^²}üëß?j°ýñïugøñoÈÿþ 4ýÝæîÐg>ÿú/°î¿`Úÿ Üúß—¿ÔßÛYÁ?È;Àçý#úE•Ú?0£ßðÛßðÛß ‘ßÝocûhà·ýkim;â}ûöQÏj|~9þõÇ—¯uò—ùq|üÃü:Jl~ýñŸÿ«U,š·Ž?á·?ÿóëíøøÿûò÷¯ããßfâëÿ÷ç~þµ nûo¯|ù×­tèV(téþ».ærTÇ/ÌRáæ§_¶(B†_*|/¶Qà×e30—£ GýÏoƒÑ7C$ÃÛè{}ÏŒöý7ÊèÿúcN;‡·Ñ©£o¤ç;í¿ôÑé£oð¬ÀÛèf/cºáoMÊ Û¯ŽQ„_ÁßúÞþÖ÷ÁßúÞþÖwýo…½@K“Ée±—£†K$Žà‹ ø×½&LU¨»HÛOø¯ÿ|{—áv±w‘îKWÙ­ß~Üê.µŒl oŸ8ƒ?´A6 Kt7ïÉ}eާù âbN—#àVù<5ˆù²›L™]Þ9jñ4}xý ò¦ ²ÿdÛ\Žm·3ƒ¼·ï8%ÆÝÙõNåƒ øˆ’•’¥dWÁkƒ øh£ ²qkÛñ]ŽLš6ˆ95ȧN‰+±Ú¥Ròyf/»Vdb}¬Ú¥Q‚àíäM¤×.§ òvj÷%[¨bíÒ(y?5ˆQ)éTGsfO]XðÚ Ÿçd²‡\Ê 9Þ]È›Î.oŸ+<$ÆäŨQòqj3¤xwÈ$©+þÌ o{XªÉäÂn!¯~/î"! ½[ú}¯¶ºÈð@LÁr‹Õ{xû$k@¢·¾ZNm•"ø~(ÎñC'±ƒû,Áï'}2‰§H4C)†º|U“ ð=§,’¸g• Rú3€G;…ßrÃLÖÚ¿´L°ôkt‡¥×Ö"‚óØ-e›}4þ°*ƒßN ò®r]J*æ°ôZ°ò~ju=ŽÈñR+O´Õpf3d×=¶3ú’3§ùPâWçw¢±ëóœà÷ º ßtÝpàí“ }mªL¢"“Sƒ˜%1ßv÷3PE&§yû9õ¾†»ß«ÿ9ð¾?§Þ×p÷{àƒAÌÏ©÷5<¾ ðá ÿùõ¦®“Rê I¤ÁÛ'a¨ƒìë¤ÜÙõ© þóÔ _ö<•b…c0å°ÂšDðöI DäFÉ}ÿ©ÇvŸ§ùòïýñ…—í.xËÊU€ÿÃŒÏb”$Âr+1¹Üò³òè`žíÈ7ÆÒãŽ[j!0ø7,«KŠà‚à†žŒ'Êg¹—µ18“OVäs;igp2y_•‹ºô– êàL>&)òápI>øWN“ÏÆ!´çøs`pA Έëg¹×?Q8[?N“OŠœêy©£§Áê8™|ðQY?Öð³ë§·\ ž,9Å_Ñ ~lßè“Ú7¯Ê§X;%Îí[–åÓ­^¯¬ŸíWN^?÷j- ·4?‚"çøyû†YuË%¥QËç ‰¡ª¶`Ò$8œOŠIáÔÿ€åòΜÉÇiž¥ðçVFT,Wÿ«¬ÈdžzÔM¬K° þ…&éûAÊ|ŽÄ-è·‰Á¿Üƒye³ªE15‰ä´‚‹ûS{dg’ÄÑèu4”\DxU(kòÆŸRÊaDc›|ÙbÊuûTŨñ›/áí-†ñ«F{/Ÿ¼”(À#9ÁI®Š7hxQhOë€v56jñYü=íö1Ú/Î-©pJ{(¥§ýÚ/k–à…ü*eJûþE\2¦]‹;6»´;ݾ~ÍZj7‹§fÌVïÓ×ί!8™ãÖ…ØËïþ5ùxM>ÆXY>÷l '+cIF‘Á±Á#9hªM—Œ7^‚_’—Œ[¬4ù~ýøÅ'ˆ €WX?Ç™ÀD>a.Øy8“OÝW1ù ðÁIp㲑äsYòj8[?ÖËëÇ'Á{Ó⬸~væKð~ýØÅ"ÕèÑe{B>ñ5ùDM>«wrdPØpº~|Ñäƒ=KT×O°òú±I½_?&Õ°dýÜ";/ÀÓJäƒýOR×ON'ä“^³oI]?ňò9n½18õ?5*¥öÍú ÀÉúÙâ§øŸ%¸ëÙ[Ä×­ŸkÆ»n'ljnA$jÑýZl>!Ÿüš|òkòÉZdvN>Y^?×´yyý¸h$xÖäSòÉòú!ò)ZíÆšÎøŸòš}+ª}ËŠ}K«'þÇžW8Y?v Yñ?ÙKðŽDc–$úŸ-t.F‚‡Þ¼Å:¤KÕecùØõ%ùü)ùœùŸ3ò8Y?ÛÌ(þÇ‹ð¬É§èòx¿ùhû^“¬¸÷ÛbOÏá4 ´Q‚*8N­ ȇnŒPZÐÊ'»ž×ÉsÇT8Û%ÕÜ ìDÚ™—JE ì¶M”àÔK5ñü­hòV5|1œœ}MpöaÁ­±p¾}ÊòŠË6 p*¸ûR‘"¾,Á#-«mrïV\^²“h'ËÏ®‹•V\Xîwx¸¶£5Þ¤‚ó¯ rÙôWVÉeã<¾õꊫÛ=êÊâ*ÁÙ¾7Z-‘8+hn.×ÌÄ,ÑNV\YŒÕRÔÜ Á…×ÜŠ}QPW\µ6tÅEìL‚,¸½xN[qIš< ³s¶,Y‚’DEÎQà¶U÷XÆeMp‰ÁéÕ.8wBpI1•µ*OXqèdà<•W$8‹ô[ŽÖ4¡$À™ËAòqn‰N¢½[q×-„±Q 7Á¡¸Õ7_ñŒàòk‚˯ .OÇWœ×Iܼç+.J+Ž.++ÇV\Q³Î\yMpå5ÁUpNñqNœ¼g· ²*QÞ¯Ë-n_“²©³"sh³”!q)Z¼é¶Ê¦nÛrר’Øy‹Ï±lQ#+k$­»¦ÅŠp’X[ê]"š À'IN=¿,éDdåÖ—4ÀÏ;h”œîHKÔì¼—F'Z=|ݼgv¾ù÷Ž*ë–%8U®ZaDõ)a¸zøší‰Èʽ¶ øs‚3SÁ1;ï¥ÑuÁÑì:ÂpF]q.H+ŽÎ(v×Ûy"8«¯¸xBp¯mBþœà´º¶½ÑœbçQÙ•³ª·F•¨'vÞ,YKÞiòlÇce;¿.EâÎI“×Iæ}uœù¸UŒ*‰à²º— J–¸œZI`L>!¸òšàÊk‚䬜²—‰I€³½L̪D8ËYm/ã¤ÑI!BY¢U–"¶´JÎÊoƒË{‡o†¹¢i­9ËYeNNÛœîe2Z2^ÏY­qî ýú’ƒöë£ú‚Ï ½œ³º‡V­0Y€ŸÏY¡{5^ÏYÕ;ytoìD;;›0EÎYytŒëÕœUŠþ„àÌk‚3¯ ÎLÇ*Æ‚?Ÿ³2F€³ÈJ\qTpF=›0Eެ:Áé9«õDöÀÛ×g_œž³2ÊÙ„Ei¯æ¬l½å2ÊYy=g¥lš5Kpr6Q’–³Z%ÎÓuéŒUrV«D;Õºvƒ‘å¬d8³ó^¶óUûx'‡ívú½wAOP¶æi{Ú7'e%x¢é¾ê¤úÓÀm7R$8éÁ·ífŽvHígCµ ø7”ÆJ¢a4‰ž)%õ‹"Oþk›Ùpò£•Ñà]o‰ýJE9" ÜÇ6+Þ¦#¸¿“¿½ˆ}!X„sÞZÆdÚÆÊ‹“' ÀàA´Ðf.E»¹[•Äàì¢ïÝ×À´¨;{í¢Ôò«½Y:xb¹¿€t(g âk*¾f â9§$ T|Í@Å— TžËgd òk*¿f òk*Ÿ2P°· ‡Œˆ7¬Êâ7õ,[½Þ3¸°zkå„Ñ;€a™!)uÓaÜ¡«¦êQuK°°tÍàĘÅ9qeøuÉШ¥_&{'­Œ=€s"¼ôa?ª@ VñçÌÀ­½®¬Ds èF ‚ÓÖÐv‘Ì!ѪfÌ¢9º9‰Kð¾ Ö^$Kp ª CpÏ(‘,6yj 6c7·NÚ9›‚~åçÊA<Ôm0m\êÅ¥Ò¿P±­x!a€­JPˆ!‰xòa:ù0ˆt^œ6y?˜<ÀɱÒZq!‚‹+=Î ”¨ø¸B§œb n ‹ªYB” Ôþ”„— ÔµK$bx§7ýádÆ?c ’l nwÊ%µç`£Odñ&1ÎÚI”&Ÿ—¶Bž“82PY1PZ¨r»î-Á=£D Un·´Pe¯q8a ²j úU™shd Šl 6¸ŠêÖ D€—¾1MjuSÔ@£Çu:ù‘xo ðä½>y﯆¦ÁÔ@y$Ÿx"‚ôy‰GP»…à½Ú»™Ñ@mn¢pA]ªˆð^o”àŒA…' À‰Ú rlQàÔµÂsa¸›O~`z¢ùvÑ„™ä@¢SMO|fåvÒäilªï™ž¨ÇFhýœCÓ•ØèÖÏH1=È8G%6ºmÓƒI ÓÉMáÉûÁ䕨vÔô £åØh³kM‘˜80=PL£º8’|_Ñ…€;ÚpÍjµ8¨î0æ¹ÝM>?Ø¡­#À©ÝÌN´›ûfÄQ8ìÜ’‚b7ƒáÝðvÅ«|z|Æn%°óm[–˜UˆœX×,'Ðn•¾œvÍ1­sÖà™&Rj-[o]w»Y$¸g”(;O$§ÄÓ‰ÀÁ‰y¼¢Í[2s ¬+À3-aq²u5¸YÀ©u5šuuhó–ìtò#ë pb]Ñäý`òVµ®«b];Ýtsëšt•ÜKÖàOY׿Öu4ùð¸u^€Ÿµ®q‰ŽÂ¹uÝö”I±®¨xÃñð[@.¦%8žHOX×_²®I;žØ,„¶mFõ)ªÖEf)ÍIY×ôšuMjìÄ ÿλ ÁÉ[l4´®Iµ®˜CyΡ‘uÍŠuÝÉ‹Öu]Rà4¯4ëjQø—ÊtòCëZëŠ&ï“/šuÝÄ [W¼kÈj™ÚZwÝ&ë*C5µšÙÒîĨpÁ{Ö-¾u`ѧæq­ç²aÐ7ƒOÏOh]–}ú~rཤuÛfå;²âÓo<µî‚3MÙN'?Òº,ûônò~0yͧï·ÕE­»Xd²›kÝ ™ªuµª•jG NÛæ·–À#­sjÝRÐ=± ûôòŒà¼"¸ÐZ¿ÚÜ U3#xP¶Tp¸mDSÁÙu ¸  ®õkgæOà´æ¹6Ö N¦Ö ïg ©¨ix•vþLzTàí5–£jÛ«Ü0â—f¦²ý<íØPCŽb}ÆTFÅT^}«ºà§M¥µ˜ó­@ƒËg2y€óÉ›V Xh#P8¼–Û×"О¦œš‹¤˜‹«]Χ‡í¼ëX—fœ£Ê§;œOqÞ8Ÿ´Éeò&ëŠ^^û}X«Ûº' çºæÛ‚»üµ /¬%ÖÕ¬Û^?ëQ„&tyS¸¼®E*‚¿UäÂαèãk1ôöG;ÇïUI€³[è‘õqh*z í]E/¥] NR3ÔƒZœâ”»¸¿OQ/rûHv\“ßœ~Ámï‹v‘Ûo›~Aî{t¼¨¹½=C»Pî[PˆE½ YÏ ‰vù.4¦½¿?€hßÍE Z¢©ž/[­ÄÁI49/ÀY¢Éh=/Ð`‰Jdu.R´4J\j`–èÅ%8I£D=b%xØã4'qF)ZÅ´›ò$p £2H£X9‚?‹šF1îD¥¨i”ŽÄ<çÐ)8KR-I2EM£¨G€mhK™N~蔢&©ƒ–¤Æ“×Ó(Ú Jñ™UM£„©Xý­Á¿ÐdᎩ£·Gaùa8ë—ã£5ÚnØÏŽŽ³VøÎððèì­†ÚŒ<±Aé=dM¼F†1Xs‚ÁFc°©¯%p ~–ÁúTô’!“C:Á`£1¸u¦œ[ ¯Ë­í•@Öç"Q¸0ù¶.ÙÅ6ŸÙè|Ž]Ð8~&lb¡ÀÏy]¼jÈfÚú¡$ •Aí‘ v¹ÕäÛs£ Œhï(ÒòçìínHûlt%dÛ¢â4—fÐxL5“œ’1ÅIp’Ksõ¦òkàLµWå¤uqÆŠà$.D«×ë«×¬j.¡…VÔ÷´~ÌúÒêmpU¼CãÜàêê%LéWoƒ¯­^V)ï$85Î-?³ÎV¯J¢íqÚêõƒÕ pZi©"‡×.ÞS«÷ñº±x‹È”~õêâm«—Å›Y‚ëŸF}ºwµ¡‹3úŽÖ†'šçJòi±E,kæ´RV»Ò”µ»êø:>‚Ÿ.º÷n§“íð¬v¥)kwÕûÉ«WšÔ¢{WÐè-FôZ©ˆ×‹îœhݶM1‚Öíú½'ÊeZÏ&z”jÅÑI^;ÕÉS­CŒÕN|Ðqb.Ìᬛ?œÜ‡s> ‚xöN°ˆ²›á¼8åq¼ý!¶z^;ÞÚQj&·‚CÇhÿŒE,²nêí÷â= λŽ)ºéÅÑ“².Ùz‡×®¼zÉs ›N½kZ%úw£OZ‰]X8Ès«,÷kÛš{öv[ p#ЈI„+3´œ¸ÚMÃO$8;^¨Â‚ÓGwÊq/2úörÞ§8öhJÌû\p‰†&E%i…³NÎ 'o„Ù‹p6y+rÛVÿßÞüM;¼&w‰âDƒû2È˵_­ìÉY¯¸:Èþ£æ@VíÜάxœÃÁ²SžœEÄ üz≋Ü^è…Q9¯½g+ÁOêÐ%¢#5õˆ;W ÓêS dy¡Š—àç¯Jðó…*Ö pZ¨bÚ1:º‘à$9»¸$ªl;ð,ÂÍîx¥PE|úS¾¾›:¸ôe¼~G4ÊŸ ¯@ 8/ŒvªH$8ëˆo”%ƒ¶hè)Zà×îIÒ ”ð°9‚óB¢$¯%»ˆpVHûÔz^«4q¬> ÒüÚú\ÍX·+ë 2zT¯t]Ö,^˜¸pãó2»ˆàÜåDÚÎ䉮 NNLýí?$ è­Gç×âÊE¾YæÐèq:ù‘38»ˆjäS´~òQÛB§Úôeh“ÒTi‡œO2ç÷*)y±ß™‡ œÏ¥úù$N~‹‚KRÎW'ÀŸ+žóZu•‰b}†—e;8áo—³(SÒ’$¸Õ7rÐz}¦xÎkÕUA–©xÕ@g3+J°ŒËo|~M¼¯UWù</a ¯R]…ÄK£?|þï•êªÝ.4­fùrwÊ{ÉóÚ]O쪆¡ïJßD© õIx½¬ðd‚ZóoåfÛ{¡½§qG’m£ N&ïë~~ÑK¢z,W¢È3Ým‹nØÏú_%æ:g]CPRÃÛ~ZëÇ‚\CÐüÚÕk7¦¯X¹âtò#Û¢’F“÷ƒÉ«~­eq  4âU'ïé7èRë´Â§þ%»Äì89‰5P½3H€EõŒõª\ûÝŒ‚àäý§m—#¾ÿ´Í ÝâˆÐ¦¹}Žóº]=Ú}[ë]œö Y¨{ë­·\»Ùö†ÇÄÆ; J¼ö5ñÚÇÅ{“®8úÃâÅ´O¤*‡ìS±kP­«G@¸(R\­"8„Ñ™­·Ym'Î¥xü]z¥£s_áqë*±N¶®\pD¼Ï ÎÎ'îB…K[Ò&‚³¯ ξ&8ûšàìÁ ›ÍÄá’xµÍf‚˜8¶ÝH8-w#Á™ÙõŠ¥µ^‚S§šœ…"ÀÙ¹P®pZŠP¢'Õ0KX‹,{ .ä¹TK+ÀÏf°L»Gaþ)Áõð‡×Ã\\pœ .†rf›_ tât›¢ Îvð5ç–î¿$w7—»h¨\2Ô÷súÜÝkrw¯Éݽ&wwFî‚¡8/i‡f¨‘¹H÷ñg#ß Âé²bZ5,l.ÞËQF.íH“4zŸ—8ò FÈ8ø$Œþ@ZÏðÇ7ž>I¥§åp+¸Q[qŽÂŸ’O?ù‡åÓþ¸|:ø“iפl<+ígÇ7ž×öê‘…AXÌ~;Q6ç}x•ú™´„‰Ñ¿Á‹’Ó¿6Ñ.^Ûo0üþµÕ,¿.Ö&Ùèûh¸!Ú‘Z¬@¼Apè¨îþ¥ÀºKZdª:í0J>»Û4ƒKY 9¼FŲÃ5úF^wç­"­•ÏrD¸°.ã!8Vk‹Ýmƒ÷]öG¸Áõ]ö—Éïú(¤u©rï‹K|hF¥‡ëwÕk¼ 0l—;’WTû~£Œ©öu‰Ö pªÚö^ ý&\»Ê¾« ­¿é¤è%¸×öL•ÀO• Ž”ÀO• ³Í&µî*=¼(J@:Œ%¨ðD&Q|P[y¼iŧo¬D¨³owøh)›ö3iE>Oß¿à.?eHÂkІŠÊ3$DQÃLQo$Æ©¸ pÖù¤DUx"¬¸zžúúÀuñQ‚“«ýíuVÛ~eµÍÛÌ“¦ËcÚiD)\“´Ñ£ÄK¡ð‘ÃüÚrË’¹¹]s0¯\²*E´~Aû€“ŽDÖ5)özî E/†S{2:å¹ÿL\Ê^!q‰üñ¥üµåÕÑùà0z|tÓðêèfF{y…öcß.ë¶ø …³5~]\5‰¢úïjj_"²Ô÷ŸIb8eÆœS’e3E81c¶íä‰-÷pbÆ<®ž³ëE‘õ”Dû‰d;¢‘è–b'$ÚS$î?2º˪xü¡¨) pAÖ’´f "œ¶ Q°‚{/M”™8³‚9ÌûÏDU;üuðè”cÆ¡,Â)‡’Æ¡œ8‹+WäoD±<Þ ßtzn[¾q}¾£Ëå1;„‚Óðç×8‰5îp{½òwøÑÜBP®ÅfoÆàBÒ,he6¶HpuôŽjŠA€ÓÇGîvÅ|–4z\VЩ˯x…CÞ3¸À¡ÎpÈ 9d‹–d¤ÑÏsÈJp•C»;«êPV8dƒ ²~Â!€BªC×ò8û ‡®])Cƒ÷2›жNãÎSŠ .éPÒN …›8”Viôó:䜧j}n|tê*Ó8d#ƒ ò§tÈ uÈHJd„ÑOrèÚ 4øX‡œ–_…’7¡œsȬ挹¡IŠÒèçu×D©‚^ -GÊ‹PF›–$Àɦŵ“¡DKQ³—àžä% Ú´8-IhoyÑßz§RÜÔÜ„‹Rxe(ü`a=Q¸\(#å©—Tl&ßKqÛ9š å©÷F’à¡?]HRžzÏ+ÂM­¡-“&Ÿ=•¯Ù¡Ìà’/“ã¡Ë‚Y€gr£r´ã¼¤¨Ø¡ÎÂ48µu΋aÀ¶QpœHq¿/ ®,ÑK¬ë¥¸o'²$¸[:‰Wëór8³°Âk +Ìm£âBFïÍ,ÞÕ ‘Ei>Z—ŠCœÇo·×t>¼¦óu”ÁÉK<½z pî˜Â™%.“•q“OÔŒþÍ!1ï  ƒ ŽþŒnÆ×Œ¾\³K7Èæ"qøi£¿›c#ÑÞÛŽ°ÄvØÐµkÈK^‚S£±åRåãµ€ËZ5ù@]êxÄ×@|Ì裢ŽN¥XÌ£e£¿gÙ[¯k’àÄuÝÅßøKåe—\Rw ùÌÂJ¯-¬ô˜Ñß䖤ѩÑ/%h6)Røh]Ž~žVOu>½¦óé5OŠÑ?žõeF ]Ö*=fôé’I—3+#kFe•Üß"qYÕM3ÑM€³ýÚu‰Ia°³ÒègÊÎ; NJ0gRnY‹$ƒ—½A.Y‚w®¡,¦%õ©7@×Â]Ëçšõ™mdQ¶‘a©…l™œn#ËlŽjCåžéewÀI—iür†÷µe©_¦/îv¡zƒ‡þä8Ô\ßÎyÛx¬\E WË™…U^[Xåµ…U´pÕEÙrùÎjÕrÅ3ë²Ìò¹_[éÈH¹XY¸ó\¶®BqJwbäשj‡j7xbý?ë¡%­½("<)ªò@µ^4Õ¦GL+2|~U7 jŽÏ2¸ Ú­zh¤Ú~}Iµýúp êE8Í#Ö;CŸÑàäE¤=Ò—|†_n²ð¾ƒ`\ê…oæ3ÐI®WûGÝ{f ¬ƒÊnèÅùºIb5¹«÷–daõƒ¬rF¹ÌkÊe^S.#ÛÍK[—ÌnâžüÌK£í¦“óϸþšWV pzàR-/ÛOÜS:àÑ&ï_›|ƒËcöØ-œç=h“ìñÞÍÖJp¶³‚=¾½$¸jœ¿6žæPƒ{­Í Æ<ª˜8Ì¢ŒÜ+"Öô8Y~õróñ55¸üzÏí~‰^‡pòj“µK­“鿱fñ¼ß’ÚR+ûî½aß) ðBtȆ:ùÂ*"ž^c\2Šru=ün…H¼ïÔg§Æ„~ðAwŒC©‡ŸKø`ǧ§i¸Ôˆ®Ýó´D Qt’³©V¹±æq)-²î-˜[Ķ#À™”ÜâvN}$:È aH¢ìý8œ»Bï—Œç®Pò~ˆÄÎ\!R•8—¢H0Oõ±HNnûwS$8óx~âän$&qóv]r “Í[§~Âå€õ/#î_pæ@,J‘„ôh^ÏâfºA½=^[ꑼ޶ƒðnØÏö_‰“7KFF4k»ãsÞ/kÞö§ZZ°‡3ïgNx¿,{¿=T±'¼_™Ó>ò~Eó~æè‚,x?#ÁBûÐûÙûaÚ{Χ–íÿÚ.CÚÞï€?ëýü¬÷ËèL>kry?4úÀûE3åÐÈûü)ï̓ÞïF»ï½_Ä·Ù¢’8ó~Ѽäý¢yÌû!{8ñ~«ŠKqàýN½_R¼_ÂÞÁ‰÷‹5»4ÚâEÏÝÆàÄ8_]õ½Ä8» Î:Ù8ÛӼ߂û–|W³ix¡[ä¹óªèÚm»HKì[êV†“iß¿ŸÐÞÃ)íkš;¦èçr8&€Ç´¿ž"9¦ýÏ& î¹SÇÔÉÝËŽ Ë=–Ìy?•ûè>z…vÓö”–æswŠÜUÚ{xÐä®Ñþµ¤ å>rÊá1§|{$«Hðþg¦™ úµ‹0ùLuÞ›N9hNÙZ,Þ0ÕŽ8ÒŽð4‡zø9]­Ã§Ø1<Í¡~tC_Û9+o%wÒgDÍg@DN›'®uxàçüV‚—Þ_•p"Óœö‘ÝLšÝ r:k?JŠ\[½¼|ÇJð ÑNÅAÎ9æ9í#Û‘ è·Pau¼ûÙ~YÄ)¶Ã-Âä³&÷¡íÈší0è8%Âv/<³2ж2švÐhÊ£4 ‚Óˆ¯Áµ ˜^h(7«€1 /äQL-çgš:§\DåÚ~Tï 0žâ,ÀÙ›Æù2ïÌ[m˜tUH¬O¾K=~j ˜ÓIĵ"‰®›£¡ïj‡ ‰î‰_Û•þ¡ìÀ³üN!ø2RAçUˆbÔãða(‚S3†A¦V,eÂaRÊÔ®¹§°AQ‚³²ˆ,/R#Ã^¤öíšx-Š7·„’¥ÁM”àN¡ÊÝÈð Ñéžœg2sÕ¸¯dw_¨7‚S÷•¼vS„ÉS÷j[à‘ûB£S÷•±jß~fŸ^FËÔ*)Ø„œ¹¯¤ej³×BßL“ç«öœöáÊ0J¦ö¢l /a Ü)´óLm–àA£ª6ÚŽ';]£<$Àû<ä&Ý”¤<äÅàTk²Z2x)y×yîð¯Jë.kÚÏTgyÈdÅ<äFâj¤<äÚ(Á‰£—ò˜ÄI²EŒps)òï_¹¶[|¤<äF{–F§yÈVHó í«ä£â3q‡p_e6²¬§òʾêŠÃ-åZ3©q@âåÀîd>*)ù¨}C-Ò¾‰$HpB{Qœ2¼¡ÙÃÏÑ~KëÂTîCÓ^3=j€³ŠéÉA†;껇ÂL¼ƒÇë+\"±dõsß(\­4úÃ$¸£'Èÿ„¡GÖß°®=œ¾k뚃§âñhï7‘âˆD7 1ר•’—˜%øÃ$º‰ÝQùœ‰× ´F è%Tsi[pA;¸¥7Ö×’Ç ª¸£ÒÕÝq0.Ý&ÈI\¤Ýë 0z$ð}½¸HVï¦ÀE€ku¹×xóÕ{qØ}œf¢ô÷>:¾·•âÃrw–Á¥kyY]2üq¹œ·6)&º9r~®‚#KàÑèdÁï)Æ ¯ñ«á|ÁËÁ§Å»ãk|}b¹ÄhûMmÖsíO{x¤),¥ÀÖàCåT†j3µÁE´Á 6Ô_[CóNh¯+ƒ‰$ãÇÆN僜׹|ž4¯²'Ý›Ÿdiñß´N‡ââ7Kq"Üɹ{Ó~¦’8“b^e)6¤ ËuÏ>ܳ Œ(E ±‡³4(D$òñP6j<äµxȲÑ"(*;=ßÛ]n“ŸpÄÙh$Ö`›y)¼Ñ€Ñ «šHàN6µÏєˎX!ñö訲qÛfĽâ G¬“¸ 7{€ÄühT‹á<ªõF±¨ÎKð“kHìá4àÜ(êÌ]ë$:«XC>? q·‰ýˆDƒí…››SÏZݰYê½N¡ÆÙjNýb—N=Û©!q#CbµÉÛ¢Lo»N¬Ä‚P d1\7£×5”Éßú'Šál|í`ò¦Ô³ 6ù„WïxòÓÅoeGÜ&Oñæ¾²÷,:³ø­¼2ŒÇUŒÙM¿¥=§‹ï_—ÞvL5!eÉó'ÞJð.£´'޼’QÂÍs-Ìö4Ÿå‚âpΠÁCÿì¼ÿK|ïÞ.U€ú°vT2J祌R(¢cÚbm”Jop]7©àp¯]p&‰‚ÛTÓKp*¸ÚHˆ Î “?+¸eÍV€sÁEp& p&¸ÖƘ¥ƒg‚‹’à6C‹s¸9<¾â’§‚[å·?'%Áyb¯¾ÈÄW<…K‚« èŠk![g‚sÊŠ V‚SÁ¹Ö•ާ$8œ½qÌH×°°Ò†ÇWœ¡pAp69eÅᣳàÒDpv(¸âägº%ó°à|pœ ÎDEp8á÷°àºj´çƒRáüP½Ùß_Ãvgµˆ¾<¤¬3yr½dò.Râ%qòägÑÈGi[‹‡Êú(‡ÂŠïË9Ó²ÊÚ— …?Ë¡¢Ý¾t%eí_†W”Êú ‡Ò½ï9TZiÊ¡„CÌ6ùÇ9ÔN9„ù¨¾ˆ¾ÖîävÕk $ÓXÔS»TSŸuHo*äë“H¾ôpêýZ¿’›rKvœd ¼Òl¯TNœú5çÅ<±o¯Ú}mYfð‰Õk]½·œBpü³ÛKÄI¶oµ ‚ÉŸÕÍ®ÊN~†L‹›rh”fxa=!ä¥]ÐKÞ\HPÚ3if wäùÈâ†$Î *œæ(Ú ­ü°?êp’£pÓEgÁ R?—â {p’C‚GhÙ‘\Jœ,&WïÙÐRs±{ìZÒÃ?Ö0¸Tñ#›Çþ¥õg?®(?IVzÙ¤]õÂOùõ…ú¢Ÿ`v-~÷¢Ïõk´KtœœÓoâ åg$Úé"õkTŒsA[ž’_“{~Mîù5¹çÇä¾?g)ü¹·NXÝèçä¾g pr©ÁéfÓ§¥wŠ4ybv—€²«ð+kžH —,™Ýý†kM6¯–“§5ªI©Qõ«—àÄì†K±<¬ÁÎ0¸Ô ÛžÑà"kð¥ÝàdŒ[•7¸›ÄO-W‘5&ÏÒ%øMñ6:«U¬]À¨å28YÓà¤Ü|)Åkì$8±\NNPî7³aÓnÖõqËå\zí¸¨KF€óUMî¨Fõ€ 5ª®h Õ¨b8•û‰˜üieС=À Æ’,÷€êFœn'²¼° z/è¹£õ>û™õ®ÊýÜzøÉõ~“(…?²ÞñÛÚܵõ¾/Etž¡Ê}q¶Èr·K”&O=ºrÁöAñFמèž.k£$Zé9ê?}À¥eíâ™emñ5 II˜|ä¯Ä_ÄÒó˜½gEI¡Ì œ.k“•:$taõ¹[Ïà’9âyYÖæ•@T—û© ˆ.÷E6 ºÜ(ÀŸÚ€èr×6 nI-3VKÙìNsN,WiWŒÈÜÓR …K$:ñ.œ]‚/"\/±;~&«àeZbwÀ9‰yñV!Ñiô‡I$pB¢ÅëǾ¶zík«×¾¶zíc«·ßFbøÉÕ‹·‘0ù§¶‘H;žÙFÄ[׸ëüpÏN §µwY«½‹KHœ>)îÄm$Òà>(/œ-ÒIy¡Jâ¶S–kÒC³Cþ5ýˆÄ‹ÃËÄ=Z—ns¦3‹Ô½9;m‘žÙ)c8œó|§ “j§ p¾S.ó2‚ŸÞ)¯xû×äî_“»Mîþ1¹Ó“TîýŽÉ¿¶cò¯í˜¼bœ—„ãv¨Øy¢=%‚Ÿ;_3ÝE ïÏ×|íÇÌÎ~-]8_3)\¦í)Ñèô|-á_ŇÆXTÎ×|»íDŸ‡ I^(ÊùšIA„“ª/hfhL;£µO´zApV}åÒq¸ãÐÃI«—P hèM¼Ñè-ˆÔ¾Õ¶åÁ&NˆûççcBY+>ôkÉxyt‹že8೩¸±Œ€ÇðûWã‹q^WTãEÏÀmƒ ~ÂÏ_m1û 5fª±s^ dûç<}oj¼ÛsOö×7»wå7ŒîÉ 8yÛÓ¡w3¢+¬=%Ç$Vkå¢Fbîçh­à±($¦uDb…'º!ÀÏ´î ZOVú\±÷Y‚ÓW׃ör%t“6æh ¼zÛÞöÌj™MƒsZJthߥ$/À‘]ÓfÄRƒw´‡¸D'Á‰yƒ¶‹&©Ë¤æ¯­èPzl™\—\’ï—ÉÞÈÁJ$î§ËÊ•ÌQe'FŒé„[ ºL@Šx™Øuû»Y€£eÒK1­)Â-DQcÀ|T¾s8#Åü˜%H›¢‹"ÅžD*ŬYådtOˆ‘wŸ 7ÊÙä~Æ¥,R|JÔà½:›åÞ—iðů¨`Á±Õwv‹ Œ¢Á[Áv2Ê¥([Ag-… V0ª ]d I¹jkO•ó>â|T8ßÁ{tK¬ð^ëç;xçŒ0ç™Ö­h¯kÕwÏ­9ß/,»>f÷KrF€7åºÆ²Ä¢°y±k”àÌ ™‹º°Ê ñšËƒ$î©xNÖOh?àÒ$8óhXý8&Ÿ‘¢yÄ<î ¿½oŠJ¥Ø™G&E£yä'Žœ…èÜ )ÚËc 쥜¬E"ñ½­ìäöň6-÷ŸYþœûE±‚½°-·\$ÿóÇŸß¾” eµ -._ôíÈ>dÿ‘Ólå™[3žÈݵ>[C:[¿8 NŸžÈò­ܧà ™zµ•´CqY±|”œè¹[3\¸5S”Ç,îÿà=íûû Ú{øÃ´[ ו«Œ”«Žs2û"õõÊëÕ!ä,ÁiAq@Êå纙º©¶°-ò[;ç£wŠnf?ÐM­…-’q3‹Cµ ÖOu3tS{R)·gíI‚;E7UÚ{øIÚc«{´®ë&I'”M³a®6q 6¾È´ë6–»ö"SYje{U….çmåTퟕÛ0U›Q2Û†‡i·Q‚÷´çÖŒ]†ã£?EûŽŽS¹J!Nª|¶àH,…Ø÷¤†Â…4µ÷‹| á:_g‚æØm”'Ÿ–$÷4Þ"F+~vò¶s&qÈùI·âçeÒA+“NI‚gZo­á¢›s~v8¯O~uÊäm–à'',ìh=_¸u“ÄàíéíÙVÊ,ÛæH€Göl`’¶R:Üc8ÝJ%#êÉ´z¶âFæ<ÏIìöûV* ðXû}!QM¦”wuj¾#/¦m z‚°Á){F8m×½„bä仉†ÁÙŽ©Äiƒ¸z—ÛÒHmËœÿdš"©²4A:ðâè^Lêïw0œÍqWHyZí¾Ewƒ^G£9$®d5¬¸ØJŸc0Êq¥Ø|Žû‚–a,œSã‘<’µšå†AFꜥ,Ý-’Ñ Ðàl(ÙU;å…°Õ7zHDjµiÔ©ã½¹W»XÚEîxEm(+\:ù^Ñ MS[ß¹¬ŠÁ·DŠ´Â7"œm²¬¼ÉÚÎIpzhƒúO?Sçèsìàü%¢tߌO‹4úã$öpÄýGÍp®…hD¬O¶Ûìà†¶¡<* é}= á¬`¼ÈOá·‡ô§óÞi$&«ˆ¯ 58#±^dç$2¸ô ¡“{ò_Û¡Z÷zýÂñ•_T5˜Â¥wk”„ǵ2Ápö޲¼éï|7‚¶I«‘IdÍøºI3½¬-°¤-ùƒ§ƒôÂײžr-û(0ÇïBÚÓp`DP:bÜ"ô©ª|GQ1‰BŠsr@³Òl¹+Ä®D.íçƒV³ 4:«ÙvrŸ©½ÞWv©‡Øw[D7ÛšY£Z«Î6ûë©rË‘kk?ßΛÔg‰Ä½›AF/´l:\äf•6óÑyOWÅÝêeAí"œZ}è×õ¢DÊ`çkA™U—_… Ž!ÊQjMFg 6â-ÊÝfç 5¬˜²Ø:{ îIð¢Äº½ë@3¢ß¡½¹>A—¦›œÑî¬6­ÁÞ—oßÞ¿È{¼½-ÃNÍÿg~}ÕLÏ{5û¿Þ©0ÇÛTÛ¹·)«É¼7»Û¯îjóNüöW[+ Þ·ç[ý]µßi ³-Ø"ÁùÕ½±üöE¢¾N‚Ó›6÷lÂ;½]¹¬µ×E'ÛØ-š ÷/"éÓi³D»|UÆðoÁY÷XÛ¿[š„B‚³Mîö´ÜƒgrwY‘{óœÊýž¦{§oHïmB%¸ø$“ wNkõÝ¡u´ýÕê“'u©[xme¹»Ýcøsr·Êýmø7¸or÷§åî8“»Õänƒgr÷ŠÜWÎäF‚jT¬"÷,ÁéAØ‘ìäŽWœMîþµõšÜYãËr|¡0wp^/ˆCQ¤Í‘n 2çyƒ9 Þ8dVÝß áfWºfÍçáïR.ï ¼Ÿ—5ÀQbÜD¿ ^—5)ÀÙ¾F§‰qÁð½ÆÈ—$6Ã'dÑÉ•‡” ਖè$œ4GKñQ͘ïå½KDIÑé ð^Ö..%1ñÞwA‚7Y_sZr)G¡™ ^ ¶ý°¼¢xý ÚýT¼CÚ¼WW·ÐÜ9í÷íìi*ð,&ÈŽ ™70µÖ~熩¶z¨v¿ƒÃmRϘ¬çå^ÌÄ×¥wí$Љ(Š8!ñzÔ÷NäžeßýRuþ 5kžV±.è×"—sç]Q8o3ƒ œÏQá¼Mü4çCàq¥Œ'8_4ÎFÎùÎ…ó{·JÙÚ˜¬Ó«ÊMŠ çÑæË®*ç‹Q8/ÃOsÞÎuÞÉœ7ˆuž‰fG#sÞ.E€3Gô+5 ¹GQƒ×’\`p 2ƒ¸Ê`ª'o8SmÁÐ ÃIDá–ÕŠÎdïÞ ÁIDa—$;“VQo~'1Î'Çà<\]V¯p>Šð³œÏÐJÁ¹j› ç;x¢m\|’8¿—xˆpúþÎbÎ'´.gUðcGjíKŽÁÏr;R€?åHNt>.ÎÉ:)‚{Í‘Òt2çNaTkc\²6V³6^‚û“æ<iôç8¯„íW]©9KàÔ‘zÍ‘ÚÑ®†í&Eç¸dm4—á§9À*„Apº9N^æ|À~Økœ7‹W<,Öº ‡0I³6.Y-xD©8?Ëùˆtx-„ çCó°UB€Gw*+ŽªFzx¡¶Î¨Ž_€â/§Å_{ë/ù@çþœ×£¯Å_E‚?%¯Ê§FB`&ÀOÊgïÖ*NÓÚ׸(Y½E¢}”âsj”v\á—R|žÁ‘0ú³ò š|bÝÐ á›b9%…¬6‚Ínùà-%Ày,‡Ñc¹¤fK"ƒKû-O•’J>Q9ôØ"¾¤y\ˆ;D‡gˆœæT`ÿÂb9”êqj,Wig– cN嬲s\½“às¾ƒÓã¦%g5Èà'9ɨ±;‚S·ÆyR_Ñ’NI H¼I?Rö'<zÍó§×VFRWÆ)ÏŸ¦ž…Ègsí<Ïk´ ÜKp"Û¡Û¹tÂrå',—÷Ta‘XÇó›`½y<2‹†Á¥,›Ñα¬J>Fó?¹n›G‘ÀÏÆÝú8¢|Ì‚#g§þ' («çŒQ³o®0¸¿iòq^‚?,ŸNåSÖx"~kð³òIè½-§ò)J|p)‹4y*Ÿ€j.½}<~CÞÛ—âjýX}gs">øÉøm¡; p–Ënñ×ã¯ûí í@ŽËœ,E‰¹¨'æ¡‚'*—šÊ *è– Á› ƼW›–«T0¹ùäGòq/© Àå>ƒ‚ :qô¡ †)‰C ¯©`ÐTðê”XÐJ£U0kבDú  Gg±§ù§äW+½ÎÇl§siZ–C¾û®_Ò4ôÈv/Ì$YÓÚÃK=œêÚÚd?%q¤iYùn´¼¨i›'N5ÍÖÊuÖEåš >"±]ÊóL)FEŠûU"1OIJ1+R ­F¯—â&”ýhpî²¢l/ÐóY|@b¯Ÿ"À3í‹åµè—$Τè)âÁG$Ú)‰#)œH1-Ñ RÜG\áp.ŬH±5öèá:‰õ2 } M½oaI–/GáûÝó5FÔæ)l±÷kôò ©uílðÙ ^¥$e…¨$¯ðÙ A¥$k”˜Há³A`?òDbÁInmS» æÖ<Ê !xQOüå¿(^Fj× œ?yÓ¿#]—»u½Ó^G›ƒ‡Ñµ+‹MÅ ‡g{‹ykü}Ð<õÝhÕý‹ µ|"YÂ^ˆ ªpƒA¢rŠˆJKã8»yâÄ‹„{æV¿[•?RÔNRù¾9rš½‡w¼‰Á«aÄ€v¨.Óáé œî¬. ý*NõÜ—Á Z¨–âÅ¥|EÇ´ÎV%M~±xô4|‰W±C›¹1V‰Ó |ÁŸ›|V²÷×v©Š¾Ó‹rkNlãa°øá)hGCA}3à ]—YÞ/ZhƆà|¿´È!£ÑvðÑ®öxÖ:Ò ðÎѾîü£õ7úXW¥Ï ýfo=$ÁS¶yßPí_ÐEm×à†þl‡Û;œv.jow£÷'{s|AF·^„ÓÎRë·dôbÙäíþ3ò„õýÄ÷ƒD'K„~fxtòpírW„_fU-"fýÙa.>L_ ¸7ykÕ/U#TÚWm_†à¼Ã>ôë†_1º?Û;R®þ°rüåòÎ £3å23åêáL¹œ¨\[xÏ&ÿrE'ŒN;šßy)j]äpIU­ઠº¡vØ(jÇÞÉ^‚“¦ƒ¡rˆ©MmìÖÙEmªÇêàFîÀÕ¦•Ñ÷pªCÙIj£Á©Ý-—¬6œ>D¹ «ï¿EÑuÏâ^S.§+’»ª\n¨\5 ÷ºrñkþ5ÓãŸ2=ͯù¡é™ú5?6=3¿æŸ3=Õ¯u£«~Mµ _Ûbw”Z~H=0%ø9ÁÝ$Gáââ/²àl(Âè}Ò~ɨÊ=Ñt½—àD¼÷78,ýfïOäxr·Å‘·Ëq#«ÐÁ;Áír»ßàÞî˜cÖHà¶oÅQð’>]ðÓ νÁ øŽöÅ·cØßíµÎ«ZçŠf.,…KZWí1‹TrF§æâè-èSñœ¸›ÄHe·#‰Â‡æ‚è|{˜¾›‹ ¨Í‘Úø§×ÃÀŸ\7úã‚ëáDpn*8€?%¸ntUp«þÊ"bÝysÑn#|´§‚Üc•»,Ø .X¹ûBá¢Ü7ýÌðèÄM¬ñvòo¨ŸX¢Ïí, ®Â uü¼?óÜ/ÒžqáÁ}ëM$.Dx]†§ÅÛÃ/ÀŸo7úYñº˜½X¼üqñö´ÛžvsïÖýAž¦Þ÷I‚w‡‹ ¶ÒÞ5,6¯V˜ƒmˈ'Ò{LL Ç*X_9ÐàÝÛóNQ?ˆ7ÞÕ_^Ó’kDÞ_éÝöB(žApb;òr,zG®Htð®‚ß.É¢¬­µSÝà@¢Ás§f]ÖÃ8“§¡ý’³·‰N!±‡{…D{ŽÄÑ!iƒwÏízz<ÜJ9ZƒV€[ú«ÛÎ÷Øpá/¶˜‡-zëûµŽ»Á­mqG_ȶ°2 ÖuY‚sS«XWx 3vÿ™°-»TéÂH½äb7 ô)Û ç–`ŠïÅ“Ž"\æbc«ÓïàI~Tx@û×¶Ÿ—%žÀÔ"¨â¥¸°.?çG¬ R`gööB`ÇYh`GYG;º v>–¬Ó»àe£/ÁOîæw‹VBà˜Ci3[®žvuL¹úØ _ïÅëüe¦¸ŒF×#³NОݧ‡ÅyŽVO{О.RàÐhÖ’Íhtµ%¥«ÅJú~?Å ‹-^€#¹_cÙßS–äî=ê7×Áû~2ñþv´ÄчA“žÅiE¸#=˜Å¹=ã8Ò¡2àPµ£qH²´Ñ ð‡Üª{Õ4ç{4‹³îWxç{½Y¬?±³qj'†;gÔ,¨9|†ðƒŸÖ·À«ÚÞm:ü¶Êj¨·a]rà½í°á¸÷!m:Œå¹Ü쉭 ‡ìcÚ±_ªC'gï´ãÜâÍ í°šv„èNЮ$éö%.¦K®¨•<À?XG¾T]ƒ3z¸ ð@ßȶb4µ¿˜8#+RÇh5-ƒs}M¢:; Ñë$Z™DJ¸œ^ùçÀˆê¸Z° ¿Çð‘ôý¿ztÇÇñ„ßÝ ú–©¥\w¬$ünÅÀ¯ôðo=Cb|0r› w¼ÏÜ!™±í<­Ú¾Š:¹€ ~Ô®ö¡)†Ùo(ÜrÀRcL$õ2Þ:º$çÉ y:¹¼í"ƒ n èM²ww/÷U)å1mZ<*o8¶çW—àÝ {^TooNœÙøUÉcnAuißLuàB¶s’àÜávœEµÂæp#ܘ;5ºSG_’"÷ÅQ¸›£žß©ijæðÓº6G8ÕMëó\7œêæz"Öða®›a ›á5ÝŒsí툯iG<¥zÅB]ü¼N¦0¸p}§šž‘á8Q®Úÿýƒ^ŸÞ¶ùN€÷&‡â5¯‰WÛiŸ¯™‹7õòYQî>ÈõN¼e ^e£^Å+D¸8 Ìkâ5§Ä«n!ŒušuåpA¼ÎÌC« ™"ïGÍnF®àÌ×m(3»Y½·ÁasÝV6»Þd ÎÞ*÷ªÙåp*ÅVÏ*‰ð¡XHúº+‰P9?‚KnÑŸ\š ŽN>I£SÁ•l¥ÍÛ¶óD0€Ÿ4»ûQ¬4:Ýú…[«XéàÁJ´Ÿ÷ªxY'Õ«â_©›BëÜ ñæ×Ä›çâ ñæ¹xË9 ð“f—ˆ7k‰…»x¥³—øsâÍgÄÕôª-anv£Z…¸´«@l×à8o”£©”¢gâ­éUºz [Þ¯Þ\»d«7,èÔÁ#9q5AY½^bóªGñª ´ 11¬ŸèôÓ§rB¼î5ñº¹xÃ@¼n.^ò…A;Z€÷«‹· Äë”Õ›Ú=3¶zƒ4úsâu§Ä¦ÇGÜ8{—ĵí¸à¼[ÔÄãâ¼…n˜†—VN‹»˜wøö¤è&]áßhΛ:Ú;89o:h—ÊÐ Zø¤ë§v½d:U;å.­ tV £³€›[Þ&¹¯º£uÌ*X ÉGÝupÛë.µÊF½zîðä£%S\ëiWwwÜmkßP8¿zîÓ²‹—\=ßßœ |òb[Q-l1¨¥=p¾\¤Ýë´×†¡ìÚ}ÜÝ-…sÚ¯Æ-í~±Ešüã´ïè–œ}œöÎZ¬Y¢Ý/µ/<àíå–b´»%Û$Œþ8í¦áYÃÝ3´\l·àdÚ{‹XÚÃdÚn.žÊÓ´[ ·ë£r·*í»Îg‘v³äd(œÑ~»4#ÐnÂÞ˜PýqÚ]G»¹±í¦­^óŒm7šO·b<³·H.í_Ä8vÛÕ$œÎm£?§›Úݔ݄_Ä—®X; ÔÐÒÝqe½Îá¿>Ø äʳT;Uè$)Geôs-írídÝ·´+í¤¯oi·ß­ÏQ‚“A|9FïšÕmñºL—éäå\¹e³ú–ƒqsk‡UÀ-÷®:åûÛtpêLb½Âl(j½ˆàĠƺåü‡÷$)Ñ•tuèdøVÒEö&X™Ä„Ë(ÎbDytDÛ~ÅMÄ m7ˆ¹PR4‡ç$¸£R “Éïè¤=‘ò$Ÿ(\ =¯ùí^¦} *ëã CÚ½¶âÒ¢=âj‘àâE«9cëlÔήڛϭÛD²Æ ÁÉ’ÉŠ/ºàˆÂ*Åî !yxüÌpOeøÙã¹cöœvj‰‹LâvIpD;$±>ÏÂëz<…ŸNlo  GÑ1#BÞoT)´§E‚SF1±½y¼e€¼¦É=A{Üv<^€S%° ÞÓ^Ú d7 =´ÆuÔÙ—€|Fž¯ÞA˜pfeÝô•V®É`¸ÕV¯¬Þ,Ëtõæéêu£Õ›ª ¸S)Á­¶zÝhõæ3$Þ ÿCw´­epá"kõüäÚeuI€“çs¶ÁkOmv•´púιmçJý7‹'oµÌt4ñ:µžËËMI7ÿƒ'oç|fp‰óEá¼/œq¾¦Kç;Ö•óòÛóðØC?ÇyYü<çеŸà<º¼=à|}.‹¾Í¼¬Q€3Î×v–œóœs>+œ7"ü,çÛ¿öIÎC¸ ¯ÑØð„ÏpâÖ|?°11Ë –\¢§)ö T¿"Ÿàƒ <¸ð€F7ˆR%}fަáGÖµ îsܸ“ðF˜|Kz«®K«ÓÔ*[M Tè‚2÷öl a ÚÛ×`ôàuEDðÇG7 /,,x7Ü(ï†Û·Ü àn>º\;Ñ.Ìàò¡}cÜiZiÌÕ®ÆÐoàýA O$­Ô­äVö ¯»V¸‘~&¾®wé²80:i…ƒv¼‹ƒg![Måþ¦#… 1WKA‘Lø~ 'ŒÎtÓÑÔš˜HÖ‘Ÿ5sÁÏ,Qÿ&Óî£<.÷þ°Üþ”ܻї{XîJîÝèªÜUÁíh'/Ø›èŽ/ÂE_°N]°F*EÈN^°ûes§ÎatÒeßቂƒŒA'»[sÛ·ðƒÍmCË&/ î¶o1Lr‹÷ëN.ØÞA넟IrßyŠhÏŠ©T×{çß³rOŸb”áØM”u÷¸ú~úµ9)úä |)G»ÄÁói¦¨/˜£Ñà 8í²™|˜ŽnWõýg4úx²$‘íÌttp9¦õÂ7.ܽkoÏrçÍÖ¹£°æ‘d‹ñ þP‚±pú>w·æg£v¿ØÖŒ‰¥a’/§¹œ^“äÕW2Ù:§d"ôýV…~!þÞª[ºj˜Ü §GàÊîÏ¢I >9G/ÏqWÍ,Îñâ<ƒîíî¿ ÀÇüă6Ç%…‘ÁÇ} Üç²vƒ9Få0f¿/TؽªU‚“š—ÒÊF謲8:9©ðPÉí+1$1H”o:âW„2{XÐI𤑘$&í´“hÖùjhV™ÄkZJœæ1üd‘õ~Ç[‚ÓÜ¡Cƒ˜9‰E5J‘õþ˜´™f€1Üj$º‰z‘5&ÑÏíÅHŠ^‘âf8Í´¬Ãùe6EQ“8ºvæ¿ý**—÷bÙ döxp Á;¸.Á•ÚǤï¶ùŒHáVÐÄÇhžcöV€ËsœnÕÑ[7 üÍöw½÷¼ï%°m#oÇs§G÷dô{¼*Tázx§CW '‰@EIN{S«Òî&´»×hw¯Ñî^¡Ý¯ŠÖ¡ÅtûpcúúZ»'\†ä;œY¬§WrÝ!’Åï2Ý🕀~åç$ډн»Æáâ’œ¸Ñ¸Zqt²ëØ)¹ð^—íïÂ3¨~Ó”¡|¢,Ÿm†mÜÉÇú%f NåcDùÜžV&ÏĈ9”g$šµ H̤(„Ķ×-}œ’_ËœÁ#í(²vØrwð‚vlkC‚÷Õ\}Ï’h‡Í›ñip£Þ®‡É}òZ¶÷ÝËòá`„>Œ^ À`t€]¬4zYÉn"ÔæeÕ6né¯ ”ƒ£F¸0ºY•¦ †&­ÜŠàfÎùÁºD‘ÙSœ7¯q^±Úv]œlµ7Î NoE(VêÄ>± ÆM,°N€ |TY'Á9ç6É8Å& ¶ ß3ØÏ•k`“´ˆü¬rù×”Kñ—›gñŠ¿ N„iei÷û,JÂüäº âʸÕ@qe¤%: N¸V%ž1+}¶2Ҝđv$Y>ÆÝCA>&ˆp¯‘Ø×æoñ*R®ù•›¡|Š,ŸMƒ—äsõ Úc8Uí¨X®ëÂ&?‘ºœŸX½§RX‚Qî%’|ö»QXØÌ¤'äc"Ÿý@Q”EÇÛž§ÌöH>Ö’O˜“8’Oåsë<©‘[ç$äãVeýlu’ås‰"Ü3JäõЖÇAå™õ㬺~rTÖ’‚Ÿ]?8¤vö”|üœÄ‘|¼"ŸÍÿ”ùúqj|`⢬Ÿ€ä§ªr vLPpZˆ䥈{–KÇà îYn—Ç•= º£?·gqiFû0¨8ùY¸7 åA-45ÙáyÎù‘ÚdÅìîïK*iî骒Úì}¸aaEz–;õSËÚ[=lIZØ$8YqÎ+i˜°0ødY{?'q ïÕ°¥õx'’³E„³DHÐÂpXÖOÉG ûm}B‰»Å$8‘OHgäs*ì÷iNâH>I‘O\VE>ÁŠð“ò ‹GòÅoŸ[|ÖÃJ%l¹ZNä3Hc&aò#ù„uNâ@>aUÝb·Í—E¸g”ha%l›¡ŽÜ­O$Þ;?“–de·xq ÎÝbYVÙ-î»~>úsn1Ø9íÝ ŠmßöÓEÔÍ};í%8maQ”-©qlô™nú9‰#ÝTlû¥h!õ•­`¸g”º¹‡C(É ¢„Ìþœn*!Û6¶u¢ÖmA”àto®îÄècŒsGƒDÅ<–úÎY¯‚·wÒŒ'*謖ñlô™ –9‰#,Š †{FURÁ$Â=£D ÿ"ÀÐ þ3*WEãâ²kàp®¨©½ÐÈÌãùèÏ™Çhæ´t3Å<¶v%T7·Ð·Hpjµ-j]áÝŒ~Nâ@7£f󔌪"Ü3JDÝ,¨ ÊG}ŸÒMÍ<æÅÅu[—\÷Ñ«uhã)óÓŒÄáÆ5*×MÓbOˆc+ªÝáyÎà‘v(×½¤vBDø©|ûž †‡¥}‚qÎ=¾z“U=KV‚³8 N7FZàíQ2- n’Ÿ“8OòªgIJ¾ÐGî%Šgâ!Ÿ`ý<%e㺗ÚË£k^²§ò)ª|…Ï䓿$Žä£l\· „Uä¼gò‘?{§f€ßéòOz¿¤l\÷ ‹èýl{_µ‡ŸÛ¸ö¶#Ú¸•©þIû–•ëeïü5߸f5ßî‚™%œøA¯L‘îÅyuË#ÀÉ%¡e­-0ËÀ³Œ^Z‚,[m޾>b1œcƒ?ð¾fů¥V8óãû+ÓQrÝqqÑ£÷1æÞçÖ«¬“àE >£ŠÃI|°×–œw çÏ­Þ¬fæÅÑû•¥$ NcW9m»›…@á³Õæ$ŽV¯všéï•ØµˆpÏ(Wo@M<~HË «WÞ-RøÓ«7žZ½I›ã}ùÍæ˜[½[ØaŠ“Fïùr¯~e«7lÖÑ £÷«×-¹¶M®ÞôÚêM¯­Þ¬pþäêÍ/ÅF9?š˜Ûf•„ÉVo1s«·˜Gc£.1WŒº·“Æ}lTС˜´zíxeûÒê-öÌê-N›ã}ùÍæèö½1°ÑÙêËšŒì{#܈D£÷«×n‘Už¯^fõ6øs«·x…óçVoñêÎsµJNeìœÆh«gå‹?µzÓœÄÑêMªïU´½÷ŒÅ÷¢#íã©§­^3YùµÕ›O­Þ¢Íñ¾üfs,¯ÞÄF?ï{·Õk“0:ÉÎÂÖd¸zËk«·¼²zÃjΟJ¹t3§ÿÙ¶zå”>ò Çûî¹…àù–ÒYÝÔ-b8=,K÷…•›Žòø¦à´!ÜÞκÄNRZq>. ë™MG@χ”ËòQ6·Ä¶’rs"üd XF'z]©Òº 壶í'Fr­ˆGµ"A½Ru)ZJ4-Òä‡òÉsGò‘SÖ7«ÔŠä(Â=¥D®E(¨V$À(Úõz5]‚àTŠKÒ‚¦¸jvYŽÕs8×[äÕ{ ‹Oä7Ö ÚqK·3Ö1í¸úÅ óƒÚsL—5dì‚QßF_ê“,Úž±k;ÚcBw—¨ *ï&uâ5hËãÖÉ+ŽÂŸÕMc_ÒM£æl^-‰—'.ðbUïuÓÕ7½ˆÒ¹½õ …ÏtÓ¿Æ`ÿ˜nîùvÙ*\ªULRï J¢M7½¬›Ûh—©Gâ -ÿĆ+hWŸöÚä$n¸¶i N7\Z ºVN]} ÇŸöOÆ…FÛpÅÅX9.D½&‚zõ©5+æG}©¼¹ÅÕH«× ûVb8ë_xl'X¼ÂF—ÚàY±áÍ@ 4zo"so`"5Oð"œ¶Á«MB,½X6ùGúºâ%ÚmO»©ÏÕõ6eɓ‘ 4áë”Ù»m9ÞY…ýM!{,ë5 ”Ýo?Õ5sh&_d­;×-ßè–àÆÜ3ÝRÑèÏtKÅð'º¥V¸¨uÒ;O›Ò­¦H´S­«e[DëŒñÒä©ÖÝá‚Öù" Ži›÷jE“¼Wë·jÞ{qôþ…»¨Zgõ½µk9·u–ÂÅ–Ÿ^¶u>atjë\}ü—Ú:lm¬Ò£wƒ×‡A©Ö¡—#+|hëz¦Ø‚ì<¢hUlÝæÖ³0y¢uk^ƒ¬uÖJ´«Ï’R­C/«¡ÉŸ·uÐ,%ÀÝW½Ñlh‘µ+¦uÉR¸¨uAñ°) £S­ó¥u`Jç#fÚ>ÊߎùYKïý}itÚÖ†¤ª£D;µuEÑ:‹B# ÙÆNí63Ý3¢u88±F·uþ2ks‹&ÿ€­C /êéZgZgŒënÆŽÂ%­;*Œ˜ÖÙP„Ñû¨·¨:hbm²—hg1Ô#@ªuI‚S­sÎÐ:«k]–µÎá%›yªu­n—zØ, %Zg·ué¼ka]µ{­óªÖ©¶ûw¯Û:§h‹Âèì>×z"®Cp×Õk´–n”-cêaÙÈÍÒ¢¸Ñn ‹Œ˜¢ØƒJ‘u]9䦛!i¶NÜs¶Î?áaÑŠ s[¶.¨Zw¢•{…?ÙÊþL+w ¢•{…Ÿoå¾Xtˆi§Zg£¨uÆãÀL«3ÞßxS´ŽOþi­ šÖi$ÿ^? âSîFøvÐήp9hüýݶ÷”ùߺhýÈ)܈}Aä¬Jü‡ÆrÓs7lzŽà¬¨¾«{jt^ï†ï»ÏZöÍQmtù]¿…{uJ†Ï1OÚÂÛ1‡Ô:ã~;&ÑŽIÌZ†ÝÔ‹¬¬±*÷ÆpÊ¡0Í¡šeþ2R¼y|‘5ÛŽáô¡¿Ã8›•.Ò”Dx“-†%qÖv®ÓÁÙ+’ñø‚¾Þ¼j§ÆÙ´Óâë5H£Óöø÷¶Û®Ð mà‰¥;î¦ô›¥´0¸Á-ûR.S&¿Œ”:QÄkƒg>òî<%¹ NýÇÍzp¹oßx N•ÀZMîV‚S%h“§ro†3%¸gt ÿ¦5ÉÅðN v¨+#©Wì܈â=!wßä»—å~û•(÷ „lœ=«É=[ µeÍ×»§r·Çºd¹4/Mž&†*w2ºÇJëU¹û¤¬w¬u^‘û¾øOÈ=4¹‡³r7Q€s¹Ûë=ÈrßWµÕä.Âiã”U]ïA‚S¹ !ò«6 p¾Þ­£o:.AšüÙõ¾@ ¶ÁŸZï¦á¹Ü—¼VgÒ§1·‚¥p+þJS›$ŒÎÝ„¨6›ÖÀ#mNÕÆImö "Kpf.ÌDmzx&^¢Ü“ ¦ß¢íéÍ(À-ñq÷zUÃìŦ5Òè\mœb.8ë¨Úì?röŒÚÄ g)vÍ\¸@á’¹Xƒb.Ö$Á©¥I6F†ËÕĂܓàtY›TGNÑBàÜM4xÏ;%ÖwÁJ‚cV%œp©¹‰tÊMܼçâõŠD½—àÔ§­ä$ÁË÷)À³Éº¬÷·É¸Õž´ïF'%E‹»ç‰F‰võ{ÅñKá3ñæFbþoÖ£~£ÉÝJpÇ2cŠÜ}–à'£€Ë"ž¥„år·1 p¦Ç;tlY{'Á%P¢¼©ËjôWN™ó,Ëýlü¼ÚÜœ”§Ž´•@7ã^‚ŸŒ'Q€«£S­q1 pò†Þ~\+©ÍâCàLm‚¨6KiǽܻŸmZó sQäÐ’B ’Ú,6฻\Dµ¹ýJK!atDœÉ1-ÇL”Õ&»,Á#QŽ"î5w‘ˆðLÀƒ<º8 ƒo±g¯6ÑX΃ˆ,¨Í­pÂQ¸ 6ÙÍÔÆ6<Ë-Q€?¤6õp¢oU£¶çpœ¦¦Œ²çˆ^„Sµ±YQ›Z9ÑÃéžã¶ùÔÆä ÀùžÃ‰j|=”êà綪ûn"2Úô3?·62ÎòC4mºŸ ¹0Ñ,ÂMÃó§Zë= ñïR¸~†Iï–ZŠPúÞÛ7A‚÷/¯G¯{cÈúéi¯pCn^xxoûUœ“8ҡ؉d1¬ñø¢£Ý¸äÙÁ #ò½k˜¡Í%zœ>Ù·õÌêÒœÄ< 1µAºW}÷÷üñE§Áncpà¤ÑD#ÑŒ4à¤hõhŽZzõZU…=µ² ì,À{17~}it€ †D²—¼E\0$Ší@§ãÞ‰aO2ªíàCâÍkjðè4õÆ,É pÁÜ(fNÌ phha¼}öA¦]2=.Ù!ÕôHð¢Ð>2=Þ½F{ƒGeG,Ù$— ”j“$¸×h×l’iø§hïà,=îÿKÁ§E¢Þ«òQŠ’¶/¼gE +$ݳx( IÿUÐNF·€UÝ ð ¾7]9—½.&iô=á8ÍJšrlØ=¨OQ€§Á¶Ûg…C×ÅȺÂK—µýD¦µº% pöJn1ûWr¯aIY‚÷Ú¼÷;Œó:ð?å5ÚË£¾×ASy /V‹¯1®1Ip¯ÑÎÐ>ò½a}‰C?é{÷F€Úl«æD{ßk¼é€à4Ôo"¾wï«ò ö5Úö½ë‚j6ƒâ{m9Þ€5ì±ì<ƒâ{í$}-ÁÝk´?ê{7ª’'¾×Ö—¬¨ïÅÏÔtp¯ÑNž|†Æ[-Œ—\CÛò¬ºA81|Û¬hëöއœ¾ºïÍôº:~øÈð…8'q—8±o¶E't;Ñ‘żÄÍÀYѤõ$Æ—ò!Íiä%^ho±ZÁO7 Ӟ伄GCIf¬zÚ“œ—¸¤¥ _å9‰ƒ ÁMWý°ïýjgÿ]»ÅpÒv5/5­1/ÀÉ"õXƒËœÄAê¥Á‰ Þ,ŒS/6C‹ªžé‘iÍnOb‘S/È›ö³‰<º‡Aâ:çÐ sÓàÔRoB37›ï-A‚;šé¢qî8„àš¥6ígüÚ ÏÒæÌb¸5œ|ƒ÷?òå ?ðL¬ÕR«ë3ÛZX žI~´Öúfr ]Ç1œù‰€l*‡V•Cë€ÁfÈ`;a°3xà¥N_ƒ^êo±[ÙKíµƒ^òR„ÁVõRè²atsÎàÄÕöÄ/’qN^Šq‹9a+£j+šcš“8²VI±Vûd䘺#1éÖʰVIµV˜Ä<'qd­²b­ÐÙ+”A‚Skåì k•kuYdUb™“8²VE±V~qI´Vg,œ½XNX«rÆZ¥ZóÄZ8Y‹¾ùEº3²VÞÇ-ÍØ ×"ÀéZ¼`kuÿ™ã‹ ‰—B3“”t¥ §¡™w;øh ŸÌ\ŠsðÞÜì¥[íDÐIpfnìÜÜ xIÑL¥hGR4jü”Ä« g$† ‰=|…Mv.ÅEx¡i:9þÛO-§Õ†¹EMVµ¨(GŸüœÄÁN=ye§¾Ÿ#ˆ;õ-ˆœT:i§NHôÚN=¡”RŠJüw]r½(mÙD€ ®Eô&Û"MÎ]‹­æ†>q²¿ÞÃG§®ÅUcǽ Ö`-&Øh?ŠŒÈuÐv+ÀÏÒîñ!o{›“»UçeOŠkS~‰ö 6Ø>aƒ³fƒ[q 3P íÞ2·Áf§ûV9,¨Íÿ$ >X~ÙÎItgà½ÚVY«¸öÍc–àuamY|(¥dÑ@õ$*jûº€šÝœÄ‡œl 6E©%Nä&y\²“à™†÷V4P=‰N3PøD$û9‰ƒ jöòu#qµÒõ¶9—àd-6ÍHQ½¶Aµ¸bâþ³‰|ƒ ~"C¯ ÷ÌR/eª¦ü©¥Ô¥l1‡Â”D7§üôR¾.E‚?¼”1œ.倯:ç8—âHÏ£¢çAÉyoÎ弜èyXÊ =S=ÿÚ6CGÖ*)Ö**&àƒgïK”Ö*²VÚó“k1ky_¿([›„j~lnxu-F#Áµ­Í×¶ÿ’8r«Eq«f© hÜo1‰Ep«›ÉN몮ELbQܪÁÇ€e“8PÔ²*ŠZ ²ë5/ÑIðLã7¯(*"à#E-fNâÀÜ4857¹n¢©¹É‹qÜÑ)zÅÜ`Í)·Z`ž·J3)K ðý ‡4L ­7)[K¦p©®u°Ä§¯èVð|òª Z4ºY•GÖý·ÙÊN²Î«RŸ¿ï™8»[@Ý95tÝ t _I4tçZ=^'{¼¢Ôç‰=œˆoP‹ÖURWÁ%Xî¨Ó¨% .éT?¯‚h‘ºéä‡VPÞ\ÜÆ×T0 N®%ÎU°ƒS+hPö£ø9‰#+(o..·Ö’ îYØ Á³CìáT èà£Àî žSÁ-ê)œ¨àfU+˜$ø9$ ŽÓÉU0**h+:âí¯¢ ¸DMÍ)Œš Z¬‚iNâH“¢‚fI² Z—¤© 9¥‚ISÁ+N†ßÆ›ç T0z wÜÇbd4!PøS*hOM~숓¦‚ɉ*¸ÉÇKpÚ÷YÎSGœ4Gl‘Á¦%4!%îH‹°à¢" æ'¼½L'?4E1ÅD (¢‡gfƒO˜ˆrÂKÕ ÍDÝDœ{©¤y)0îX>yj"0\÷Ru7&´eÕMÜxBpª‚©Y0ÌQ‚ŸVAF·ÓÉTàT-”2%šâ<ÓXÛMUÁ‡*èæ$ŽTÐ)*hÛIQA‡bA wôH0PA7UAÓ~fÎo·): N¼”óIU. —4­nì©9ŽœQ„hÚ]ŠL$Ó½Ï4;ubWp挔3kÑ‹$ÞZî!užÎq¼½²=6íðŒ–šù"ÁI’ðäZôÊZlEsî‰Ãµèe«=ž³24µsm'I“kÑkk;¶0]LCßdß½™›U–¢ƒ·ì;8»ŒaNøî øîKÀ$Æ9‰#ßß}uM –ƒ ÎnS˜¾[;YºD>*è6çY¾>nv(0¸ÐìÖÕÆD´ki‘àN+¼tôE%8ivÛ:õ’,ßbáˆÚ 6ÃŽ¾F'ÙóÛƒ I=ñ 2‰ùqGç}—Õk Nœ×"‘ó×ÖŠ¥ƒ;Ú¾¹ÆyNÅ`‹Êy NÅã„ó_Ûúˆó–ÃÕ6ç±·/ªö¶·7œ>ß]4Õ¶‰ÂÛzψò4@úžôÉjÕb0ÜeopÉvD…ÁÐÅÁÏ3m=œ28É'ç\`°©Ï"1;+ŒžèƒTH Œ}œÁ¾0¸À`«1ú"#øÆY„S×RZ¦Á+›¼Äà\ÄÒž]……ÑÓ ¼åøÙc N .18i Žü9ãÜàLÏkûVÎù,Á™œÂùb$83$é„ípª6zÆà’[Ô^h Ü™³¶c5œ3øø‚¾º€¢žnãœÂS¼2Ü)ã·&1¸äý´vôð‚Ÿfðš¥ÑÍ-›"3Ø¢}þì¬Ó" 'Œ>4Îéò´í@pÉvh‘s6ü¼›"Á™Eƒ›¼¤ÁVó~6 £szœÁ™Á%¡ip¶œ”ù\Ûu G÷æÙ p.†¤q^„31XóI‚³ Äœ°Ol Cfp)°ÓÞÃ*ü¬jï\‘àlk’Ûa,… ^½b;\‘Fg¶#bùä§ŒàDÎ¥ð'U[ÝFmShŒç&\ã¼—àÔ„›8á¼mp~$~2÷XG§¹GWŸ”â'NÉJp’7R Iî±ÁÙ‰SAÉCD{&÷ƒÐ>fA<Ø+l­''NVëÒåNë""2PE©­9uaàýý¡=½i޼D÷ÍÞÍåŒraw/Õ¬õÐtaáèD»°»Ë§ý ÞvpOÜÞøRìáŽf€Ë<÷hÕN.;x»NI ƒø ÂŸX‹=¼ç£[åªvDb§k1xd/Ϛ›H´Õfѽ¹QIlgrî‰#sƒ±v¯¡ž‘øðkÛ^7 pö¾U}-žXHäO¬I$*‡õt–ñØ+‘ƒ³“–ËR‰ñ p"k[#sñ¢J'½k놜ˆwš\}¡mmÇx#Úý”ö°h‡š¹B-µ‘å §4‚“ª€vò&UO»út›‰A>ŸèT;<¼zqHp&^S4‰z Þ‹×gdè]ÔÅkO^½¯Þ¨­ÞPëK¸à¼·“¦‚gZŸ!xîï$o¡oUÁþïn᪓à™düV¹e«C½nœöóÈÃsD:‰v@¢|yþv¼Þ~·¥ËóGDR›Dø‰êåùŽÄ2'qp¤á´Ëóe©µD¤‘…±˜D~y¾†Î±^É\$*—ç/ÝF^FÒI¤ü*¦vS©4Mõ¨i*†Ó6ûJÂŽD§7Ë‘Mƒ‡•Ü3r¼ry~ï ¦4M5HŠ^»ÎI™›øš¹‰úüŒ¹‰§ÌÝ´ÌiTÓð¼Øë‡Î»™xå©Ç=j ü¼Aöœ6ì[QÊïþ+û ‰ö5í€Ä‘x >¸åµJvµ‘bžqH…ïè¢n“j‹g¿Îáç·IWô¢‚³mRdIޏí>ÊþŸ'­ <¼àbê«RR’ÃÌI„7­Îm“öŒ7´’@p–ä0,ÉÁIDp; QOU…#Böf@⣩ª=%8•¢«Y$²ÙèåE '¹ lƒžªJù‰öQ)æ%Î6»VÞìö$*©*B¢×SUŠƒmRðJÑ/. ðD;×x+I±ëÛ‹á½7E…]PSÎk9UxâÃÀKRlÅÖNqŒCx™|ÁcL^ëMâÓ8±|›¨’¨ê#¼f>Pg€“Çß/q­E•W+M©mŽWjœ…³Wu¶uê]Ú)ž@£³K¯5=ÍÀ±E§LÞǬLÞ &oªké'¿·ðqÂèlòµR¼NÞ/rõ­§w‘$ —8g£;}ôo.Ò+@×v?àV¸ÇìòdôÝö&Q, ²Â7"¼Ðf…µ¥íÌŠÞÕÀpÖ5!_fïûx:$Š…FøÆHðBÏ0ƒœªê‚Ä(çšö3ÐÝ“ûÏÔ9ÚÁ;8ë «¼êÑwŒxQŠ!ÔÉïè¤y€P£1æ¥<‡3/Õ‹!Ï)tÓbœzûnïV턎TÅÏá¬4$|‡“€¨î‚õðà¼Q–Übï–%8™#l€ôþ6ßá%)yòFøÆpºS¿Ô;VÒ´$¸:ÇÏu­—·±ŸÈ½aûwrÇjmÙžžú_ÝþÜí R+Ý|dƒo?bÕàwù|òjð(ÂI {ÂsÿÂÓÉ‹pvåÉ_°[¶Y€“ZôÍM”û®÷^›ËõÜ÷¯®,¶Cl¿²õW,ý®ËÇSøòA×0ñè\>F‘÷܉[O&ŸKëÑÃiµþý®À'}É}ã°4:éó¸„[ü+Ég•8ïõKý™aÉljp*Ÿ È'y äsÏKòqE‚;ñUX?«g·8­&+À©||Õ&Ÿz«ƒùl ékëÇ^”ÀUùHæ­Ý”ëF'†äž`Þÿ.ñLÐäéî…\’åŠ^‚33–ÎùÀ]B w´O/µ\­mÕ÷vwšó‰ÂEÎ'ee„"ŒÎ,×½‘³°2‚‘àÔ³T¹sÏ"ÑÎV†/',Wƒ“ÞÛ ++ÃÎäã‘xC“?+<Ǡ˧h–+ £3ËUu“{þ ÁécWÆiò‘à–ŽžÕ¶tYZN–Ÿ á„çªçwhØäN¯åãNX®¨Y®£4N0\8pˆªåZ“b¹d8³\Çä-{¯ÚpîàÝħ›†ŠóŠóýè"ç¹ÏÎwðÇ9ßÃæ|ç>ãÎz¹Ôc¿–šnÆÓò±.ÊÇ‹òé÷,Iµ\«ºg1œz5Ë%Ñ~Ör¡æÎ:«š¬:{N-—ñèW¹ÉG®”¡ƒìøˆ” ËòQáèì¶j„ä‡ Fƒòöûuô`I~Çúü[‰Ëá‚Gg~ÓšU‚R>Ð F=Òk:4"±Â?Ùm" 1t™±ˆuà!R õ’N"À 9.KÈGØ÷fiŽBb¡#Ñ©J`Šüw%¸¦ûèôàB„÷ªr©M ;íØk»cÇ!€w–À¹£î’k‡O®Ÿ£­gh÷cí˜ÑÞàíO€KÔf§&¡=–$ŒN±t¼gƒÆàl‹²ÓNžÂ%›3 ¯18hY ¢ÄàËRÖ"M^d°a^R”F2X=©¿‡;r4Æà4躕øJA×µ,(‰à‰ýJ º¢¥pΈ~‘ê%¶Å©›,g{©ëq}‰ï´;‹¼—Â$Ò½<ʲ߶㫶LОç€Kˤ¹þÁ2qëå¢nmæËàg—I'4yºj:l´´[æ{#X…uÆF —XÓ Ö™×Xg4á·*HØ V1á. ð!ƒµFÌÇ ä3«&Ÿa°}Áöaé}àO°npw¾Ì-—S²@ûÃ;^´\Ÿ\;% ´¿2á˵f^©ÀÁù3þÇÉÉž½Ø°žsÚå!NNöìÎË[Íÿ8 ¿™=èÔ&Õfœ‘wú9gñ'€ÃìÞK<ÍÙ·´N€óB¯ZmN#¼f1¸Ù§%ÑN¼¤rbý¨}œóª˜è’ßà’éqáçãkœqþn“85Pë­ÒÆùgŒ¯Ù´!çáÉ(~c©À;^… e+ÝŠ+ÚèÍèë7Ž0œ•YçNꧯe¼³\..ëM‘²Tô4k§!µ;FOƒpȯsÚÝ8i ´wÀ:¾HtVA‚gv¢6n•FO|¶1ê~-±Û(ÂG2s…3pòN×ÕUíèšèîää(ÜПy³ÔšÏäëD8ÙO4G;'1HlpzyHìNÞ\YÐ ³‡­ûÙ®¥ýM&B"ŒNœj±ÈDx;%Ñ’qN½m u¬²¾,“ØÃ{a5ÉõqDb ‰_Û:7®fþy-üóKÿ‹í¤(‡×Úy“…·«/ƒ³>ï_Ú›{¯ìÍ¡ ‹Ø…îµðíÍ…OÂ?ô¡ÓRX‘ÂÅ–›!^)s«AsÄ}â_ ÿ¼þmñ_Y·¤(M~kø¨n0“¶ÁDÕ^òü‰øÚÇ×üZ”çÕ(ÏÔüu Urkà4Ê‹uo¡rÞ4¼¤Ú¾L8p1ý=Sm4ú3œïá«vgœ¯¥ëOøPµ!Œ¦¹Çª›´#î‚—[y% w£b¸Úß‚úØ£üùѳ¶h•¬Ãk”à4˜«%0ÎOG¿%aò–Ñ}Ø8-íäu¿´ ¾¾nÅàðºUgµtN¡ÏìàÌjyû„•àÊUº¯Úo–fN/©¶³Xz¹úÓvp¡ãþ)ÛW] '&†Ó-DG¢yM>æ5ù˜¹|Ü™Éëò¡])Qù)ÀcRÎÊéÂÉ!81|¡ë&ÒS‡l'ÁÚ£k 8Óð’àb–×e——hð³‚3K<³_i‚sü¤àPQì‰ç( Î,ÉHpºƒ_Š"8+Á‰àüRC .8ˆ“‚}mÅÙ×Vœ¯¸0XqvºâÍЋ´÷¯ó\ã=+Âr —€kËܳu)åöÞ+XpöiÎwðÇ9ßÃUÎÛÑz·ΓýÿÕ¶þHN{É…£‘8Ýÿï¬÷tÞÍu> t¾ÁIO£ƒó,¹„8ßÓÌyÚ&8oþy7á^snê&âÈM¸9oç8á¼»÷&äœw‹·œr¾f€iZÏXT¿öçíkœ·ç8oÎÛ3œgÙÆ߆®pjmÎskœïáAæ<Ë6”m ^ËDœ:48=4¸›Ð±­óò¡É¾`Ï'ŽþÌ¡IsÚÝ8{M!.ò¡‰Á´ùÐÓ^X’Z€“ø+/õ’öèÐÁGŠs…3pvhÅC·.(O¢|hbËb³ÛÞ:)vF?ÎHt´ÃBF;“4çÐàÌàìÌ%Šg.› çíW5ËÌ=¡‘FïÝbr‡Ò”ÄÑ™K…ó3#ž¹ {x7:(„YF‚G…ÄýG­"Ñ„g¬`V¬àõx4g5p3§`•­à¾’àtòyfMÃhg^µ [*ÜŸËûܘ"ÀYÛ²º³˜"Á9‡T¦ðT4×=’{™«;§äºxyÏ~µ"<ÕÅO›T]£O4­ç²â@ÄÉH\ç gàÔØ$:»mä…sbÚI_òŒu"¼ÿYpH‡âúØú¹t‰µhæ8€Sê»âx’½Á™1ùhûGáÑíÛ3‚¦ýlHâÈT8s ÆŠ‘ØÃ;!‰Ä {xTHüÚŒïrpΜÚJ-ŒÞ· ü´IâèÅê'Ö¸›ÓîÎÀiÓ4çIRÎ~)ü´tÒè½ÜßdknïJð‡üœCá œä ·@Ø‹Vp]P½jô²Ü–I>c½jñsGf,Èf “iâÆP87cqÉgÌXÐ̘OØ…)‰C3D3v«;ÍXêZœ¼7cĉ ŠóØ´ ›]Ÿ1cQƒ“fÆœ&FpþTè‰Ešæ´»3pÌÍŒ% N͘Ió`à‰^H.Z å*ÂGÊs…3pnƬbÆŠ£pÌ­P%êëD¸Ì}m<’82cE7cV1c(ù‹bÆRSfÆ0‰e}m 2$qP|×à‚³ŠC$"xoƉ܌!|%ð·ñ 3–´¤æ5iÛy#Ãg‚lÆpf.ù—ÌX sÚÝ8Æ‚¶'½Dž5ÚéÕ4N¢±ñŠ3^„8ç gàČխ©Û†£p9mOjpO‰53æðŽ+ʼn,©‰è¦4çÐÀ &%©‰9I^íI“’Ô4«¶'í9”4+hq0—Ò”ÄQ0—´¤æñô³‚¦Û“&9© $R+$öð¨øµ‘Ï{ê´‚jR3kÁ\@;£”¶‚.‹£–;±ÆËœvwN­`T‚¹®­I*[A›¥Ñ‰,Ê}˜þ`)ÊÌåuΡpÎ2s^ÌÌ™î>LV2sF»Ó¯ñ¬fæ âc6sf,ë©5¿ˆgåÝ}˜¬¤Ö.Ú}B¢šZ3èÊO¶sÁ\ƒS3¶Ó"J÷$Z9˜»h÷a‰V æ:aOú̵¾¬îIcíZÃö¤Y„?cƲº'½œ9¡ÎiN»;çÁœQ̘áϘ±¬ìIwª˜1‹ÌX>µ'ÍyΡpN÷¤F æNeeOº¿txÆŒåSf¬ÌI™1uOj”hÌâ~YÛ“nè3f¬œ1ce“80cEÙ“‚»¦ÑXGbÑö¤Ä¡+ë3V@ŠÏœ„<±Gœ$E½ÜzŽR¸áúÜz~ Ü Šp¢¨°í®G¥CuEEð4iWX‹nø5UÍßbñè4»‹¶ Çφ$¶ NÕÈŠŠIìá4Ó¥ø[ ±‡G…įmfü•†SŠŠà40ÜVƒ¨¨Wxä¸Áyqóåx@x¨¨Ük'瞘°ñEuZ`$ÒáíÂ犺žñ„¢:MQ{MsSí ¸a¯h8+ª Á—œë£¬‚ƒá¡ƒôŒ Ml+;{nÐTë ê¡ †S¶2ÎIq(j*è[¹¿ãGá\mk€8TÁ8µ•û¯ÒœD; 1)N½¾t-è&&1ÉNHÔmeÙJˆ>ó3ŠšU[)n¢÷ °qÎÕÕE:VT-ú¼tŠZæ$޵¨¶RÙDtϺ…ºÿÅqêZôy1»2%qh+‹²‰¾ymp ‚ÓbVwÊ©EQQ¥t}‡PxF㔢µû‰1²Sß%…KÑg4sE5æŒS‡Öýö‰l‚3E5‹}KáÜ¢ú%œpêÆNúþ+7'Ñž€sEõ‹}bbQ‰C‹Šà#1À3ë3ŠêTÔýMuKáÜ¢Ú¥œQTJQÜÄ‡Â£Šºß¢¡pnQ¡eýPQéèÓ„)‰öü´¢‰=œ^”[ý ‹jÂE…Î?£¨êÕkeE \;¨péèO(jT]?ŠnLš“8âz·HŒdŽ)P8WÔs1ªÑŽ/¨ðÅÀ Ö?cQ³š?O²ëïIÌJþü\ŒŠàQ!qWçÖ¢Ÿ]mo ÒŽN8ç`•ŒÇµÉû¤sÈjrÁÁ àZ§v¸]àµNí¦á‡ð¨Àw´Öè½onÑç ÌbCfpÞÌô*>x´wâ‚fŒžG‡ÉUqôM¼A€“–Y—vu…ôËš$8k·Ïeºû[+ÁóÈÜ5OjÖH´#%¨Îˆ´ K’Û…AYa§­¼kqvùÈ}ªö[d÷b¢Cð4¶7É~Ä:¹WÓ6ü½•ê`tçGl×Ö‘3{•vhíµ$Mõ¢b"g¹ ë” ZJœ²®ž½eýdɨm˜—µ5Îsø'{Í[hEìµ|2KëC[ã´xõºÔ[ËÀv >½êèt] žh"¦De¿—=…KAH{Jbà{ƒú]¬îuëýš÷Ûà Îúöƒ˜ù ¡OGœ6”îùwqõUæÍ 8=ÈFǩߑ¬Åµh…o`g+4â;T…È e…oŒÔNIÉBÓøïjU:ÕþYßKçN=Çtûü'}ôæðŸôeïÅÜa÷oè=…ß鸽„{¯_¾~ÐLJ`£ÿñŸÿû[ù•Ùv#ŸMåºEᘼþàX…³9î}FÐT‚ÊÇœNð1(|¼ÜÛœp>nž‰.ññN¢À!9&ïÃdò=üáÉmcòÉo›G/MžÀÝn|ƒÿnœÿÍ~t„¿Ùz7­ƒO§ûñ{µÖoΔöo§-ÑîÏîü¦urû&¸ÁkŠò·`“¢6-#ÁÙ‹8- b8-I^V'Nµ¤ýÝž0åðËýb‡CŽí¯þþ0Z[ã-ð¾õ=¥û‰-i[ZÿùoåÁ¾i£ÎàRfNÖºÿø©M~ߊYq+f7‹èœOþ¢Mþ*ŒþSzÝà Q£]Ü=OÂæè–X»ýž 2áÐÆ`íE)³ÄûN{,Þ ‰×ÎG‰×êâuëKâÕ'Ñ&FÿÉž¸ÀâUæh{ߤ âõÙ1¸8ÈŒCoo?ÿ­$ÎÜë‡èèÛ6§>–‹àoêS½´ÏVãÐÛ7}tåLȪxÓ²ií'íƒÑM-×Εº]Dpq ífÄù{ýÝ×£7€Ëƒìp£6|¼ýk$wñ™Õ]ì–Áߤ§zë´‚Lû§>ºÙlš².W—\5*oú Âγt ›:‡lNAÖÍí"ø›ôn¨Ì¡‹0ú‡~âdô9hpM‡\žÊùÑ K÷ƒ¬Õ9šÝ¾)ÙÎ\í‚k²ññsÂlj|˜½¶H †Eª”|uÛvMs_Æ2¸ºLÎ>âÐÛ¯× É/´L’jH¢fH~½fH~1$*‡ÎÏ*!ùõš!pèªqè"Œ>\Ê¿^3$¿°žÇ‡ É/0$Á¨†ä×k†ä×)C5CòëŒ!QcAóë5C2`p[Êê™é§ùõš!ùuœ}Ä¡¿~®ÚÓµ¶ÜêÙÜúSm¼†àœá¾ÊÄ žÁY4û”Øw¢Ø–¯¡ð]>ä^UM]r½i{€·ŸÙ)òÉÞ+òIõ)™1mù!ø¹Ôå—{Í«¤@{4mòû1yò!xíOŒþAö²Ø<1=>"ñS%q‰9‹&|)¡mÁþ©ì’ø«Ùa©G®œœ¨_s½¯ˆkh/Ytpö„é½áþ€ö÷/?sRtÓäÛIëÿg~}Âͯ/ô›ƒöwéˆëÿò®¾íļ<ºF¿j£c«P4›äïn³Iêa*‚?i“ ؤ¨¬Œ^ç7­©Q:89ŸÛL’ŸØ$3 =ä[ÒcD»Ñžn•ª#ÚܰÚÍåÐ; ­Õ@Ï+£ýpL*‰›áZ§$~ê$ÚÅßI˜ÊtB¾Èe:Õ¨tpöx_-õ'Õ)¡=Ë×Ãi%Eí¯ÎÊtj@bvíòZf-Ô•¡¡ü™•àô]°ëqwñƒ?HUóîà†ž ÜŸÒûà/¶§(|´~ìk²¯qÈv$® ‰ŒC5¯×Á#nº9¢ý³¢Ç Ë_¦ðg–^ÿV;I°…U£©ΞŒl+Ã7Чg6m]Ò÷’jè”ðR4UN§ ¡ ï=Ë~9ÚܾšDSþ[/&ØÄ%å¨l6K#àâ‹ ¹ªÏgèEªú {ð4š œ?zê&´oáPy-šªð-œÓ%[<ã´âWçíœiASy-æ‚9:ùJÊ»®‚_Þþüö]ÝoÛü5MÎlüÏoÊø²Z-…à_¤.ß·Hò•]6&ïŽ'Hùä]=-{ŸOþäèï*çÙ…2t& MþäYP…Ës¨g1ígOÍÁŸ™#ÀGE3oº¬O%«áª­Eiô·ÿXj£;[ ¸j©ßu{à¢M›ø~ŠD£‹á\^‘¦r~ô‘éúЗܩ¼ø\ >~Nø8±iÿ &ïóª¬E_Scÿ¼6ùNL~hH>TCrbòþÌä\›üÈÂ|1ƒP¥¬qª øSq–™ÆY‚΃2ƒ`!Ê:¿¿”(\7ƒÑ߬óŠ#Fr7¯>37|ƒÉ˜Q”wâ$j`Òæ¬û4ƒõ~æ$jκs£â,30úÉÙ :ü™9"ø(Î2ƒx5f%MsfðgæˆàCóhóxjŽþÌ>´‚_ÿüæ•¥œŒèà÷TÍ!øSVàªl?¬ :ù}Á&¥€-ÔÅp»YAù"î`ô÷ë²ÉrehôÕ¿Ÿ`ݹџÚëXRrŠ©ÉwçxÏÒy¡û§úèÎ;¥h&dÏàÚèûÊÐÞFýTGß–eÉJ†ÅVÁ}¾&8€ß®gqûÄ_MmKæ›®u®(Z·éeð§ì·ù‚ý6X°ßt¹ÛXDß»Eµ‡Àõ;ý}ÀºpïÄÂYç l9Áºs£?µ`¬3QNNݲ• þí™;\rêè™Á¿=³`¿é Öš¨\ÙÎõÊéçk‚øS öíóÿœvåÍÙ`´®Âà\å—{0öÆÏëÍ)ÿ”rÎÛÿþóG f¤¤dÅ?5y×&oØìѵ/€?3ùTΛ%¸¤ìðÚä\U›O=àƒñí¯/ÿÐüpÔ,¹Æ_Îçxi•OÚV ÁÿZW5ö?}Ž>Z«Õ8jŽoŸ¤ÜýÇ=®'s÷ þÆn•·dšWK3õÑÏeÏü_¨õk^­Ãøç€ßtºk2àP5¢˜¢º/}ôSwM\d"3¢]q_ûè‘ÁÕÑM}qXr_Úè'Ý×\;œGð‘v| 8t&ß>׎]ƒ|˜Vçx. ƒ¨küÔè#Y d}&=—õ€Ÿ>N”àÃŒŒè‰ÔØ€ÁWm™ ä”κS©±9ëÎ>Z&é öVRãÖýøCõö .:uyòüM7vƒ9ºx;HÍñc4Ç£ðj0GäÝ­8h4G3šãQ\9˜#‚–ò_º>†0ã§>ÇsE\gôñóË—¿ÿ渷u«’ªm)Fÿ¢™D¾Ï—F;qÕ’eŽ—¸˜”ç- þë5c¡j‚«‹7½á§:ù“‘Ý|òçF0ø·:G³¤àæ·'^š#‚ÿÖoyù(_Ü î2ƒ?¥S%سÞN'?X±o*‰'C¨çÜnb(y:ºLÉ4ºQ'.¶šnØ 5é|*jšjÇH¼ŸñΖßÇÀDœ©X}iò¿OL~´.¾.]ÌóSð×Ö¥™g®6è\_q§NÁ_[qÌñÓèª}*ª3øÜè ~û,~ÅÉí—-ƒÿúCMðx;]äöeÜÏó÷§ÎàW© Ë,ÅÕðÁÅA&ëgÏ ý1Îß¹µþdW7¿F‚—4øc0ù¶SÐ'ÿ1šü±Sø5Ú) |Ú) \w úÍhŽÇNá×h§0Xãh§0ðáÆþÑ?õ9žÛ)œŠÂÿúaädxX¬9v®õ'‚Ÿ¸JÞÛˆ}aÏ.J£a½2÷ä¾Ð†¶×v§¤‡“s„ãmŸ/üEÄ(žéSÙaQýƒÂ?•Á{ŠÄ” ƒßt7KðcX‚ÓúÖ¾ñ–¿°õÉ;«Mþc4ùà &à’Ý¿Èta­Q€wâÝ_ªeIf@b01OH4#C2 Á7Òîsæþ Ì£;YÚä÷£¬éä?G«÷Œ…ùxííŠH£¼% pú.l[¤?uùl ÌHü©“¸Eá·¾#.t?mËä/uŽ×Á2‘àtŽW}™póë/ún,¦/?¬x©w3”ÛVJÙ†¶×\TçÃЫe GÇ'ýÉ×Õ2ømܼܫ÷¸Cù÷ÎS¸%¿ºWyìò¡_d€yWX·çzÌí:àøâÐÎ8—íÕ;Á_>/3ÑÝæâ,€à_4#*:Oþ¸DðÁËÓoõG’›¹7gäe$¶´ ÀUÝ|Ó;q!øíò7a?¾`/> Þ÷‘H‹·—qçÿŸÚmòÚd=¡¸<ÈÄrý3ݯZ©dn÷ .Š÷2~’ÁÿÑ{1š´`—UÙÎï/Áf W94ý÷€CáÌ­Ü—8„àB«Z‰*sÄA¼µsø“A|…¢pÁvp¸–ìÇ׺·øÚÚ9üÉø¿OJ|-.ØŽÈêæ±…*‰#OEáþÁñ@ûñÁ2ia´:G3šã©0ºÂ {Ø¡…Ñ¥¿Õ^ÚÝ÷Ouò8ŒV'ÿ9Z?§ÂhÝDƒþ¥XAë 8ËzEfý nGÞdÀÇ\ûésüGçã£ÞSvƒ9"øÀž˜6½RÌÐàÚC=†íyP<ôëÇý9Jn©×{©}¿#Åà£`.®†¤ƒ§¤ÁiÑh)œµ¬šz ?oèáy5€×ƒß4ï§m¶(V°†’þL(‰àoì!²ëý0æ.i±œ?³u|áµP¿ƒ³·ðŠèfÜ’"ƒü¡2ø²¡­è14gð‡k 8ÍüØú`DŸìÙ;´Äšêáâ³9ûtô Žîû ºûa#Ö]7ݽ˜Cb] õ\eèýÜЇ®®Çãn†?"åE8{Î>_uœ¾ÀxçüˆuŸ*ëöbÉ$çwJÓ:€ ÆÖ—)SêóáΆܻC]¤‡!á­άëÑ9‰=WaŒwä)•ÕÚÉùٽ[íçíkœ·¯qÞ>ÃùkkÙÓÃÙC!^‰Oœ='’‘8 žäú`.’%røheüíåMÓVFƒËÝdômó¦¼Ò€wžnßÜyºõ¥ã#ç§Dó«[_Ú¸ºuºqUY÷¦³î䯵ÂGC‰¹HžäÇ6ßÌ +±N;ìhÝ ø“;ÚözÊsçJΕÔèB‚ÓÑìhUÁ~ZåqèÔ~Ú­óc)M;:¸zxµ…›Ú³¡‹UîÛÞžþcð§²¾&Tïá<7< Õ{øÉP}3©ŽÁÑ6–HÏG ^µË5¾¥N0xª#øéP}݇"Áébr³P½‡+¡ºÎ:3`³FÉúúêºÍ ÖBu€ÓP}ßÍ'9To'=œvê¼õ±~Û%‰ð n’ÄžÁ þÔ|&¬DðÑѳơé£óÁ)gÒn‘à2‡´ÛŸ/¥ ¢“tÆÕV¨„lÕÞ÷3ßëýþŒï¸åÆíUõ9‚÷Óçhs<áý>ò~쵉 À)¹Å=ì7õFe{¤˜[í 8á ™îydW¯þÐÛ F?u!³ÁÅAŽ“vŸ¹h?s!s:ºåv]ÈÔF?y!³ÁÅj ç.*%ñk=°ýùÚ>:xûPçØ…Þx˜j° CaôáņÑO\l¨py*§GêãÇ@Ï\˜ÊzÄÇÏ gŠú1PT•®¬¦&â¾6ùŸóÉ5Øè“÷Á+ÚnL5X;>¢RG?wD¥ëæ|ôO£kÝ©› SÁ}¨\f°zÏ´¢{iކ~ùfÄw½÷Óh]0×êMü ;hTËV–\œ=  ©å߃9n^UiUk,‡«sh® ^k®!Å—÷oÇ_ªïV¥5<ª¾«ðý©/6‡z×_ûûùñͪYº,^#éÍXƒ_õ[\6LGWoqýäÏl7Ú?µÉ»-lñb@³„VW‡à_´³î/do¾çw¢'õMtåø‚þݲHp"cëè4÷9ü“%)ÀÜüWoIb°gÛc3ÿ rpè¿z—ŸÔÑ÷€3+ S׺DpqI%ÄïÑèIìS}»í\}P³öö×7½n+ÞÞ vë·AÝÖ·AÝÖm{ÇÛ9ÂdŽfÄÇt#qœ(†9’IA­y·µ5;tï*(sˆÁß5;4X㛬õƒ–¦iƒƒ–oƒƒ–3šæjíùPÓô‘¦iƒ}Žç4Í­g4M›#Ò´Á‘Ä€§4ÍÕ§$uMûò÷÷U®î²Kqæð9ê[ªþ…– º¥ÂéMÛ7<0Ït|•3ÿ{ðTŽJâ^$wÏî¾ë…šþN½§9ŽÄßé‰-¢ñœ>gò2™ü§:ùmlãŽy¯öôøçšhH±†cÛÐs]ЧðÛ¯z13›ü?ƒÉ?S8g^y¹Û5«C%ù®eªÚªÜü ïö#{è&-FÈF€Óê![kÿÔê!ÿ{ð¦¦JbSm³©]ˆºjÏùTéTÐT°6à1¬¹«Eô5$¸§§ŽåøB+héáQ,YÐþ{@»9ÂÝsðß«ÕÑwkÔô…¿'ï5Júàný,û•zòÀFÿ®ŸZ½KVƒpû§ó:‰Ç®P$±0¸z>ñ}ä Üðâ¥ûSz†?äg…ö³ëqøeø±Vurxtª‚û{}ÇIÙô÷p:ù;íÛ…N^>àè—Ö·ó»ÍêÉ·SÚ˜{Ëáo¬ï¥½‰Œ–ÿŒn•YœÿŒ~ÕF¿£ªŒ:ÇËÞ0|šá<1GÃNP!éshÛ`*k<ÖÓ_€Ëb˜þöÝ…—´£ÂßÖ`µ3® eõÕÑ÷¼‘WãZ‡5¸–Q’§Eáv÷rŠ'ý9àOrùƒÙ¯3ø3sDðŸ,œ‚UöUŸ£KVëA ¯< ¤XÛõwê9é`toò,z(¡ÁÅAf:ôU×!­ÃQ÷TÁ\>Ú>Ô¡‡6mVô¼µÕÿùÚ| C¿|ÌÙ)=Û Ûï׿ˆà<ÿGhZ‘{9.1µ.Lßæzþm çúèû‹ánZÐàßžÐs3 Ý«ø (Ú¾» µ‹æ·¥¶!MëæÚ1à<À‡«l¨ÎNë^š#‚VÙ€®ø,&š7Càü™9"øh•} b‚S1Ûl• z.>¬¬E[”µjE%À婜}´f>FÑ-Óš…©¬G|üœðq¶˜Jpê°ï¥ÉÿœO~¸ÊœßÜ­WY0ÕVþ~mò¿OL~´üÌ@µOmG¦NŽ+-ÞŽènæÔvD_XóÑ?Í@pfõÓ‚‹¹y<5úpe 8“Ü'¤+¸xiŽ>Z>†Tä^©œ¿_›#‚ôüççÀÍ9(Þ›½XÿÔ .úçs`œem¶¹@·—ùèBIJ½Ë‡àBIJ>–òÇGrʶ®IÁµôß(àDðÿê'çŸÿÕù¸šU)Ì ­xý¿ã%7ýŸÁè6Ø4­“8“âÏHñ÷hŽgj æs¬²MÓ|ÔìyôÊEkÔÕ¨ÁùYôì±óÑÙ!Õu¹%®¤Cªà(œR]¯}o×ùè\>XƒU)u/Dƒuë'òß}Ö·´÷‚ï>ÏáB!üÝŒ}ÈWøþÈXïO¼Ñ£·¸ÌF#ç<û±9¾ ¹G»Hp²ö:Q9ÔÎPt} 8T/i|ÕTøÍVj—4FR¬‡ úÍhާA*\ÜŽ'†žG7}ç Óñ]ü¶õìÑhß‹dÃŒöOösƒ*\w ŸôÞóF»£pC¶Óq­Þêm´ÿÐMNÚhwÝœ.në'Ø©ívÒv;8÷hëG#¬Þ ×és<·zƒœŽ´ ó±­Þ × æxjõ¶9²ƒˆè?¿µWS.ò{À¶´ÿd]?çQÄû—ïA=,ÏI)<–à_V/þ®?3„àï¤UûÞ?Î_²Dk3 ׺~¼Z¶Ù.qnð¸¾D{lµ»Á(´ûíÎj”übÚ{‰^íÀ pZÑrIÇèôpßBŸNû©‚óí­à<¬Öù×8ïÛèöÎ{…ó{ä®ð4JpV=±B²G!ñl²§Â߃¯KºY.Øí•Q€Ó9.ëqñŸV2-õôàû } _îÝxXôØ%ºÚè¼J¨X1z´‹4yì7¸c5¨YMtEÿR¢+Ö‡¶µD×½q¾oJÙè¤vcoö<›ü§ÑWƹǓ»¯ W“#Kð×KðÏ€ÄnWHüG'ñ\+ÕJ•o—¥Re ʯEP¹Æ0†0ÈÞ^Vß¿(„sÑ3ø»x¿úß÷$ïö÷Š’sµyÀ÷k…r©ýDÓF£—¨åæêËü]‹1£›·ïI?ïÒzš‡hœåÏPY…v à†·¼×Á ¤ÍŒ½}ÏÚU™sÕ{îãð"JÕº¶ú¹¬nŒNUïåé}Ð7µ¶óM^ BZýœÊ¡sÕ{¯ÌÁ²Rr\½§Îñ\õž.ÅVy¥&É?£Ÿ«Þ«pq™}Õuè\õÞL>#Ú?¿žÒ¡‡ÎUï½2GéÐÇÀœªÙ™é×ìäÑÝìV‘2°gêaò‰ûãƒz˜¼ž¨‡ j=L~éòûK“ÿ9ŸüP;þLöR¶¨û‰¼¾´—Ê+2õ@>kmæN=¿Òàâ‰àý‹bô£Â ¢<«Eyè¦MV”7·»ƒYâífòìAùñf(·å•’Ÿñfè€ö³«‰î•!}¸—R9{)•CfÄ¡S{©Üž³A9!cX°N£±ëâê=šI„†ßéûÇ/™v“Œ¨Ú{›xËà첉—Ï-Ös¸a¯… §¹aò¿V«>æ°ýê÷/e›3¯¸CpqÉñÄ6ûï_þ–F?uÁ¿p1½Ð p'Üă¼ÿ­lsæw•\8pò9€i9NsÖF;0‘>#ñóoY N\'Epvkt³Vî"\½ÒJpñ>èlò¿•É÷AOÂ'¶›‹ýþñöô† àf¸aÓÎ97øçÛÓ6׳Æúfà£8kÿÕÛÇÓ,ÀÍ0Ìñ}Tþ½ýÊ|(‡6'ŠÏ\žÊùÑyо—õÇÓÁ6‚ãÕ‘¬?ž¶?þª±è0·lÕpªÁŸ §\ §jîR›c—xÕæø©Ïñ\âµÁG‰W­ñúσS i2ùŸúäϽ$ÛàƒMË?£´¯6ÇÔ9Þ²¾všömðAíàÇu>žªÐmðÑ}M|PaøÏu>žª‘2áЗ¿{© MƒÓ.4ûdz¬w­½íárwjÞ…æRØè~àúßUqd§W·œ±l«1‹u+×VA€á¬ˆÅ”e2ùOuò8fãÏÍ8ÿd­û®7ùŒFÿçË÷?¿I£o2´IKÿ¡Æ þe])ëò¡´ý7ÔocxsNøF˜¼úó?¤ÜþsWžÓîS‘*I<V %í ¹·"‰ÚÑè”Ä›âzWÄ{'+É»ÂXw…wÚ·%c,=aðýWŽ„÷Âîwú`Ò^X$ÀÉà×å~³á5Fí@p³úSÚXgž±n[.OåÓàïR¦ ë:øã¬ëà±~u÷yÞÙËvÉ\½–¡j݇¦u—Méòñ(¡q{-™CðÚ³q‰ñx¬ƒøŒÍ&e7 çGqÀ‡Úñ¡hÇE­¡n‹;üÏoÊ‘ÄÇÊŽÛCYß~E›÷¯ùÈ$ºLyGá·¢\¯D=‰üsëÙƒG/´éŽ™vnˆj_ܰ6Á–Áÿt3ýÔUð\2û€ïuŒÃÇ›Ìè×ç€ÐèŸt_ŽGO>y¨Qû›!ø@?¿üû×›âº]ÔúNÇœœ;9³ÞÏÒlgíƒÙÁwÝ®¹nÎ`Ø\7üS´#ø3´wðÇiÇpöU½Õþ®Ë}E;±m§þ >ôéj“bý§ŒášSÊý]•û Ú>¤]}ÊF†v ×iWåþö¡Èýæ;O¼dÑàoÌ¢5—Ã1 ‡K¾7Hîv)¾v»Äðkh?{ŠD€N#Ñèψá:‰ö5ü!) <ÿRfI/÷ÚäÝ“ò)þÄä?Õõs²ú¡Á!›ª\Ÿ¯­ŸÏÉú™ÚMMpç’ÑÑ®Ùja}ŽÖÔn~ÿúë»Yá»ÒZ/º°XW½(£Ÿ|7§Áþ[;ò95ú€u%éjsà¥fIÖÌզµÉïsª¿lð5&’^¹¿xüA`Ò’½“àœ6g}ÀÓÚÃK}0¹ƒ'ÓçÞl˜Yÿ$Wæƒík ¶¯1Øê Þß©÷ƒ·]¤w¼ô¹Ñâ¢ÄàK\Dx"7<Ü!Ÿ#íL5xñÇÞ­$9†w¯qÞ½Æy§sÞ-6ÎTÛ½¦Úî5ÕvCÕÎg™ó¿1{¯Äð¡¶ÿ=·ˆ#Î#8åüž»Èç7K­ï8ï·Mçç:?;·Cðßú‰ÏïOÝá¥ä”ŠúÖÛÁ?WgŸAë‰}õ—œKmváHOS¬ïŒ6Õº¿76 ýÃ|¨´Ÿz®ìäcˆ|‚?´ƒM+p¸Ñ#~ûøóë¿_ H|‹GÔ-€z7 àÃ{ÿþzQ*,¼Öì=IØàâZ”—_ªZ:8¬ÅX6çSòé÷6®¦@¼‰á°óæÔÀéò³Åp¸4ú.DªxéF±VϬøÆº¨°®+,Ø;ñÔMRï.tÝ9t|A³a‘àDÏô*ÁGúøs \aÊ!€ŸV®Û;Û¼7ô×è/(×ŦöêAï ýÕù¥šˆdèq­çðr­:ƒÿԕ˧¹rýù°rÅöàJïo Þ84W®?UåŠ÷2ܱrý Ê¥÷,øã] /Nõ,hð/RôHj;¦÷mt¿dõ^¸­"¸ú$î¹Ñy†±‰W톃àk}TZü±2ð#yW›—”£'qw\Ž•‘iÚÇ‹£÷˯žU´ãýË—?¼"÷ÿ"e€Î•óÚè'åÞà#¹Ÿý9¹78‘û~œ²FAî[ÀfjEgŠYî-`ìá¥=M]ζ`_“ûHîê9}ÖWÜkrÿãŒÜOŒþäz×ä¾_Ÿ³\îwÁg NżGúüQÌ"ŽNå^ÂDî?ÿóÇùJÕþÆV–¶‘×½ ¬¥p#¾›{;OBf쟷?ïx©¿«WÎÿ#b7øýQ õ!X[³é u¸WH¼‘ÇPw7ì%8õqwÁm_°’³"Á©wGo ò–ª]LdðÁƒ ö5Ûs ŽÓÑÐ[­Â{¿Eálô7²®ÖÞß7{£wEvÖ prWäjC­ó/äªWæ¬0ؽÆ`wŠÁÁÌG'ýYvÝŸ3 ýYŒ[êÑuòév þܤx·Krë]>Ö™ß:ë’RtlÑîö÷k‹ÿ·ºø÷Çœ¼øÝ’%8³{^[üA‚?¾ø>x×¾Æ`ûûµÅÿûµÅÿ{°ø·8z¶ø¿¶øO1ؽÆ`÷ûµÅÿûµÅÿûµÅÿ{°øÍ]>ÖýóñçµaBžVþ!¸ÊºuþÑëÀ¾O¿Ý_3ô›W)ܲ_í7N/ÂSƒ7ÅG7ÊU„ai%†“ýÀfwgf·áŸâ<‚8btrGûjýbjÍ%Q»(ÃýEr9ã¢É'w¼7›rS—ëük¬ó§X§î3<¦½ßFº½ÕŸ¼ƒ¸V­ëá4}°.RÆà–Næp-ã6`ÝŽþñÚzŸíð&KæG[2bãVC¾Ù}un)~3%Lhÿ­Úºû°éQÝK¶î÷S¶Î$ÄÖ¹êÆ¿fë~Ÿ°u/c~k öçü)[÷û[¢'¶îð°#[÷{n놱ÍK¬s¿_²uÓNsiÞ'!§²'Gk‚¾‡³\ZQr*Q[ÄÙÉ>À ~ÿòåãµLëdÜ¢’q³Zæåý˯þ=i£uôÿûöÊè þeµ*íê»éŸ_{ì÷NˆJÑŠ¯·õü }’¹ª6¯H¿£Jç/÷/úKE»NœI§ §XÔš—Nsõ)ÚZÆÖl£iø§X‡à*ë>Ù‘?˜4€osdmäã ªŽV„gơ㋢X…žV¶³?¾Ðzüüøõ®Õ+œê¼ÕàߟðEÎ{ µî9zšÁÙÝÇÛƒ;ð¦áŸ¢ÁŸ¡Á™·u÷{^2S8\‹|Sl+VBðÁ;^ö5Ù×8dŸ!q&ŽÂ ׂF¢{D÷‰î5n$þ£®q³¸æ»œ—Ö8ÀyX¹ÛGEÏ—ÀF?Ï¡kã‚ú(üp(8ã¦{¡—8ô»³‚Žœ¤Þ§Äº Âi {˜oft#º?Fuwûý©;à²r$6øù'ЮÍ}uðDYçïþé7nÛ)HpÚûj=|¯Ú=ÁGýÓÚÏžâ‚«!~’ŠÄ¡Þ¿Ôt;2½3íã' ž±'œœ4ºÒ8rÀ:ûëlÇ:­ÚU/†›UîüH{©Ýx*Á©é¹ï×>É͘+<žÕÃ#cð‰uù¿×Öåÿ^[—ÿ{m]þo¼.ù›…»3àªÖé}äþùû¿×ìÿ^[°ÿ{tÁ^½4ú㬳¯±Îv¬{nÁþïµû¿×ìÿ”{õ3Ö}üû_?Gz+¬9¢§uukpø$ òk0HnƒDm_m_ƒAþüö]¤F|N+x8|’ùò÷cJöÔ°×ÞßmpøÄùëß?Œò.ܾ¿GfÑ’Â+‡Ã'‰’!«”ÄFIÖ(©pø$ ¢6©¾e//ãNò‡OÂúûúvœ7üz£ù·%/–Ò¦Kªµ†¿]!î–éâ«ÿFv«ËÚÖ}¥7Q×ãlž÷]áä^ÜÝšð›ÍËjEx!cø£l‹<º˜Ú|´gé tOœíÍã ¡½nç{8¥Ý§î–·ÞàŽÜ¸ç2 ûfã©à‚ Öj‹#Ý€Ä&J¢m×hÝ€D³NIt¯±ª`Óa£}B;x¡éÕ -þì%x¤ËÄÉ*ä3²Ÿ®3X?¹9ev[,0¿±˜Ây¹]Ûâwù x_>g°|ÂX>#Äp¢‚ V·Øjj{8QÁjÛuìá‘æ!òaèF$š‘!9Òç•màÄ”ÅNH4#CÒÚ¯7QW™ÑWYVž©Þ¯ÞQQM3$<´Ó¥˜•W®÷:OĈì§Q„DÊZÜiG…ĵP8'ÑT)ê$šÁZ4aAN~¥ÆfkèææÞlx@¢‘h¦æÆŽHlæÆ¿¶…ð¯m!ü| a¥´F¦piÊd á_ÛBø×¶þµ-„m áÏl!x+jÎyy£!m\÷ÙgX~÷zE.Ÿë=«ÈEr…—ó0ÜÐPÒ‹ßÅ8œËç}ÿB{·üë‡?øåö³(1/eP¸a?+÷¢MË®n¬KíB´ÁZXûäèœnök¼âè¾Ù¤¯oæ8çáJ ±ÓÆý”Ó8€»æY¬=7¾©9¯fŽ—û†ýYhSƒáÊóFðEÒè4H´Ë1:} E=Nn?,÷sÃ"g(ÚÜáù€ÓÈw¹Ú›ü íñ1ü,í{kt^˜Ü’HûFº?M{­kØÐõÒÐüër{ΰ¬ÍÚtð³´‡%KpJ{Z¬B{ͶôpJûmÒí—Ô¬9®|ïëÝq½ó—’`ËóaîÊ~8o˃ð¯Ḏ°÷¾Zå,(ûʤ¿~fXzïÞ}ÔžàZËÁ½ž%h õ1œ–Pz[;ö…DëÒuìà¾Û©Â¦Ýž"QíBl_#ѾF¢=EâΈû²Ù…%wüä‘JüäýܘÃéê½:í~H{‘¥ƒ{¶Ê.Òý½@C€§"O^¿clþþ×_w®÷"ëÜj¬¥•õË¿|gmï]nðê(çÏ»tt`òƒÑ‹2úþ¦Ðñx¶áF…Á£ëõí_kà?ÞZøÁáFRK:¢r:Ñl&ít"zå<=atv¸~»‘cø¦ÁšLá|k18úr"œøŒÅµXC¢9HŸN|jø¼Üý\îÒYh,n¥r 7‘»ŸË]h“»Mîþ5¹û×äîÏÈŸ…Fu’v(g¡±yëwGío_¸õ&D¯èá®Nó ëÑ‹€Úù¤ 7ÂÏÖ£eZ¯6Ëê½Fgb/Çí`R=°ú$xŸÃ1æH£|ô›ƒmŸÛ¥6ÖÈðLÐYҧņj*îid1Îzq˲íå³@;ÓM›Tu'親Ž|t]7Ý€Á°w³êå¡mëw—êþ«(Ÿ$}Ð[å ² N¬¶?^  ¨Å'CáÂñ"o!g%Ÿ`¹Ü}ýõýï>åaïÃüåËKMÅ 8óbWÛÉ5#»ÔÞº¼¿'dl{ÛÁµ.s=Ç3VšÄ öÝ—2§ÿ¬Á©â†zÿU`â=¾HÌHpšÌX+íä›`E8]°±öš]鿉vò3s;s²ÒF½·’êèô ÓŠœ§¶n©…ÄØî&„côp³´žáœÄ:j*ï‚s¼²[Ex¦æ¸ÞX¢FÔKpzìÒrÀû¢Ÿ-tá–…0±¼2‹JK-­Í­4ÎÓ/$8­_¨-p‰ -±^ïá¹Z)»Ivó%©Ô^Îææer–à•¿&ÛeÝ}ÑQÕÑl ÙVQØ¿(¼™Ûq‚[ÊÒ ÁÝE0V{ú‘®d‘u´îåpR—4.ÅÅl³Š‘GV~£Qåó_¿;.g—dËÝÎ{£×¦  }c£›{lóíÚð!öÛ wløÆ&Ÿg ¡b:º×­,bsœ-Ë|ÿ°Mxà†6+«pú¨QˆÒä©=6uòÞ+Çó=<Šœgq¤uï<® œš¡d%8ÜamÞéz¿qòô ÿ¸ŠñNOf½בŸ]ÍÝP[†·BlÃ_G7v=&éSA„{)0Û¿ˆ´$Ås8ïãê—>#lÊÆó(¯wš¸Ý#b/¦táK/r¢é¼´—ù`:ß&O*Û6c#Nô/GtA3ŽWÉÚ|иÌûúÀ -f0R\·ýÌ [!¡[…·2ù]ºR{'#i±ö~&WµÉf¾“úd¯›Y_Õ&û™©ÜT$[·¿Wo˜H8½RR›×Óêbã¤,ñOb/ìz*²ý¡¬ÍOø»­û‹íN¥ÜÅ/]ç2¿Ø“ Q‚ÿ E,ù¶æí×ñ~‚æn*…€A‚³3èûäyã=ytÚ9¯Nyü×ß,c–ï–öov!ÒH‡Jügåž`g_HÑÅ©—©Jû_öúd¬þ»*™“ÿ}ùûÇ$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__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) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(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 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { 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-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(datacoindir)" "$(DESTDIR)$(pkgconfiglibdir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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 mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-datacoinDATA install-pkgconfiglibDATA install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -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-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-datacoinDATA uninstall-info-am \ uninstall-pkgconfiglibDATA .PHONY: all all-am am--refresh check check-am clean clean-generic dist \ dist-all dist-bzip2 dist-gzip dist-shar dist-tarZ dist-zip \ distcheck distclean distclean-generic distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-datacoinDATA install-exec install-exec-am install-info \ install-info-am install-man install-pkgconfiglibDATA \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-datacoinDATA uninstall-info-am \ uninstall-pkgconfiglibDATA ######################################################################## # Extra targets for uncompressing the .gz files # ######################################################################## # If configure has been run with --enable-gnu-packages, we assume that # compressed files can be read and that we don't have to uncompress. # Otherwise, we uncompress the files @COIN_HAS_ZLIB_TRUE@uncompress: skipunzip @COIN_HAS_ZLIB_FALSE@uncompress: unzip # This target still leaves the original compressed files around unzip: $(EXAMPLE_UNCOMPRESSED_FILES) $(EXAMPLE_UNCOMPRESSED_FILES): gzip -d -c $@.gz > $@ skipunzip: echo "Skipping decompression (package compiled with --enable-gnu-packages)" .PHONY: uncompress unzip skipunzip test: @echo "No test available." doxygen-docs: if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ doxygen doxydoc/doxygen.conf;\ fi;\ fi pdf-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/latex"; then \ if test "$(COIN_HAS_LATEX)" = TRUE; then \ cd doxydoc/latex;\ $(MAKE) pdf;\ cd -;\ fi;\ fi;\ fi clean-doxygen-docs: if test -d "doxydoc/"; then \ cd doxydoc ;\ rm -rf html latex *.log *.tag;\ fi install-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc"; \ $(INSTALL_DATA) @coin_doxy_tagname@ "$(DESTDIR)$(DocInstallDir)/@coin_doxy_tagname@";\ if test -f "doxydoc/latex/refman.pdf"; then \ $(INSTALL_DATA) doxydoc/latex/refman.pdf "$(DESTDIR)$(DocInstallDir)";\ fi;\ if test -d "doxydoc/html"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/search/" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc/search/"; \ $(INSTALL_DATA) doxydoc/html/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc";\ $(INSTALL_DATA) doxydoc/html/search/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc/search";\ fi;\ fi;\ fi uninstall-doxygen-docs: if test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/"; then \ rm -rf "$(DESTDIR)$(DocInstallDir)/doxydoc/"; \ fi if test -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; then \ rm -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; \ fi all-doxygen-docs: for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) doxygen-docs) \ fi ; \ done ; clean-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) clean-doxygen-docs) \ fi ; \ done ; install-all-doxygen-docs: all-doxygen-docs for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) install-doxygen-docs) \ fi ; \ done ; uninstall-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) uninstall-doxygen-docs) \ fi ; \ done ; install-doc: $(DocFiles) test -z "$(DocInstallDir)" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)" for file in $(DocFiles); do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ if test -f "$$dir$$file"; then $(INSTALL_DATA) "$$dir$$file" "$(DESTDIR)$(DocInstallDir)/$$file"; fi; \ done uninstall-doc: for file in $(DocFiles); do \ rm -f "$(DESTDIR)$(DocInstallDir)/$$file"; \ done ######################################################################## # Maintainer Stuff # ######################################################################## # Make sure acinclude is using most recent coin.m4 @MAINTAINER_MODE_TRUE@$(srcdir)/acinclude.m4: $(BUILDTOOLSDIR)/coin.m4 @MAINTAINER_MODE_TRUE@ cat $(LIBTOOLM4) $< > $@ # Make sure the autotools scripts are up to date @MAINTAINER_MODE_TRUE@$(AUX_DIR)/install-sh: $(BUILDTOOLSDIR)/install-sh @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/missing: $(BUILDTOOLSDIR)/missing @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.guess: $(BUILDTOOLSDIR)/config.guess @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.sub: $(BUILDTOOLSDIR)/config.sub @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/depcomp: $(BUILDTOOLSDIR)/depcomp @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/ltmain.sh: $(BUILDTOOLSDIR)/ltmain.sh @MAINTAINER_MODE_TRUE@ cp $< $@ # Take care of updating externals (if Dependencies file exists) @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@$(top_builddir)/Makefile: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@.Dependencies-stamp: $(srcdir)/Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); BuildTools/set_externals Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ touch .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@update-externals: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); svn update .PHONY: install-doc uninstall-doc update-externals # 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: DyLP-1.10.4/Data/Netlib/fit1d.mps.gz0000644000175200017520000012706610430174061015320 0ustar coincoin‹(K®9fit1d.mps¥½íŽu;ö€¹Ý@,‘úü9ö8ˆýŽ1#ÉýßHžnäxKj–VIŽß§zí½JÜ’ÈbñÿòßþKø_ÿ÷¿ýŸÿÿõŸÿéßÿíÿþÿüOá!ü÷ÿòù¯ÿñÿþù?ÿê?ÿÛ?þÇüË?þãÏý×þŸççÿâô_òç¿þ÷ÿõ_:ýWšþ+OÿU¦¿R§ÿjÓõŸé¿âô_Óg‰:þ•8}–˜§ÿmú,qú,±M¸>þoòLÿ5}‘éûóYþó¿ý×ÿùßþñý–ÿüß¿ÿÿ½ÏKýP¾Ò_áóFÇÿ!þàyüW2ÀËðÿþ×Ï+±àuDOoÃÿP=½ƒŸñPqø‚Úxb¾{ló¿ z¸È/øß«~ÿÿeøGú<ÿë_ELo@ô†ˆà#½Ðz#¤7 zÃ@oÄôDoPè ˜^øÝ'z¢Â'z¢×€ÿ¦÷+åyˆ½‘ŒÞ< Ïø³†@ôJð1zÇü4êéüvÌÑ‹¾û½5v2z?ð ^]¤>ü]ôŠEo’%zmzC$£×¢7@zÃ@o„ôH/~z¿sôf£Ó Ÿ>ѽ~½&½_eÙÔ¢÷+62zÕŠ^‘Lî½jGo6éý’'¡§sÑ+>í½2¬ÍH}÷Xn¢WQ‹8‰K\šÄHܺ:,â$î×®ªv\ÚÄ…‘¸ˆ‰Ãq)>íª8øÝ'âè¸T~q_ÿÊïÉŒ¸é@2DŸ¿|<•¦†Ö|ðuià•‚£ófì{øÁšeYóæ« èÕðñÃÃW·òžÐâ²_†£³Üôê 8¿ê~ÖÓôæ³¹êJ^lˆËÖï¼ ÚÆÿüÐxCþcõ†žÞç«÷;Ÿ­ßy}"ù;Ÿ_ç·w¬|¶æÓ²hMâ$n]6q>ÄEH\@Ä…¸ˆ‰ JþÎ[ÄLüîðw~{{ʇ·ð^Þçw«® ÝÀ}|ý9ç'ýœ^]ÜÃOÖ|]Ö|yÿßñ^Ðn`/ZEO_ιãAA?çö«3à§‹?¶ùtQW÷UÈßùjýÎÇ'ÁÛ¸ø¸hzó_=½Ï—nð;_|üO‰½××Ûøöw¾nnãç?÷ðƒÑ¼,Z‹÷€y_WÅ{€¼‡÷y÷PÐÓû|ÛDðq›À¼Ãï¯éÛm¢n®éïü Þ³,ñÞÌ]¦%2Þ›yÏ#§¹¢}™Çð1ÍG~úæbÓQ‰)X;¡ÔÁa. l ûÒÏŠ›Ÿ`óF~"ä' ~†Ù,ÈÏzé¨Fdñ¤¢ïŽeÝ—?îLü|1cÿs*»ýg€£3×XÀ§ófûÏ’à7çÍ|Œ²3·}}àë±2 Àð›íën„_Ÿ— Mo€ô.kÐ"Ì2ŸŽ•€Þ =ýæXiÒ0½ð»¯§Ç€âÀov?“Þ/ióé1Fó¶8Ý”wK0Ú§GX»}Àë|Ä·EAO¿©þD³4ÿ•ÙèïµÛJÁÛÅmñ~’`iKX›’ Ìûº¸¢}*…EÝG||C÷eW¼³Å#›÷Ù°ŽïEÝJÁÛÅmðŽs’ËŽ%ï9É)`58•“\·[AqiW5#xº‰8q•®¾áŽ4¾ýæƒÀ‹F§RšëN((2샨fO7k^\•/ðæÙ<|TW>š *Ý™‚/:ˆ€d‡ÞЇïX]øGtÄœ">_óÝ.qBUæ‚hÓK× Lz¦ÃµD@²CoèÃw¬.ô†Â>ß/óÝ.qBUê~™|'ÔÊÝ¿ Ÿ~~é(?“úðxÃkÌw¿»_&ßý2QÑä;ˆ&P°é 9#øUø¥£ôÎHoÄôÒá—|÷Ëä»_&ê¼i‰~d|\ôšª“8v–]µøãPuRÐÓauâa>ü´Å>¤²?¾«N¶§Ýì»_fWßä=`Þ×ÅeŠV ïaà=BÞC†¢•‚ž«óá§½÷!%ÿñ]´²=kgßý2»Ô±¸´|Q Š6ï—™‚ßHf>p‰7ûe¡N»Å¥€/8ÀzFp¼ce ~#¬/˜Þ± uÞ¬ïzøÝŽeêgDa‚%fŸÂDè« §sÑàÓŽÅêg¢OÏ0¿"£¾ëáw[Ž)€Ä…¸‰ ˆ¸ =Ki&Ÿ¶V} –XÏò3kÄÙ }ÈüL³kÊÏ‚Oq™ìXðé }øÝ±ÙqÙí bQôt¸áíkøU?š YÔ”6½Ò».®f Ó½k²¿ÙÑ è ŸÞЇß]mzƒMoé˜^V˜è¥÷Ëfv³¤åÄ×]ú³žf¡ ½t€èÕ†à ]O;óá×]ÕŒ^­ÁÓ…ü&vßvÛ]­86ï´®Íä=`Þ×°î y„µ6oèzÚ™¿nÊfX¼GÌ;+ë‰Ý·[wW‘ØzŸ’¹Ýz€ª:!«)|Öä€I|Ú­•Û­?p¦~ù祂ߤsåqUSÄÔûä¥LiÓ ½Ëâ2é ˜^ Ÿå9 vSŸvkåvk@/*’†"~“ΕÇUM±éýZ* ßó3›ÝZL½OšôXs™¥8áÕð#ƒpîv‹àSÍ¥v® p€—‹jŠD×íÖ&.¹ÝšÄH\ˆ‹8èÂ01qøv‹àS5¿;î|yuŽÛ­Š›Å9Ào7â“̈O2ó_eDE¨È „5‹Ã€ßkħŒŸ2¼`zÏjÛ‹/²£PLýLIyâÓÃ^Eð¥Ò˜ Ñ£¾æ‚à77¼Þn¶uðÅÔgä5üìÕȾCsu¼:0œ»V_êiï«ÕÿÇÕñê`ï`uÐûšºêÿöêøZR’|çÍdývä)«¾É ÿ€æ,¾¡RPg><¥vÕÚü¦˜)>õŽ˜òYºC$ùN¥½Ó»†ÿ€Þ®uç·Å?^øá©ÛâHoÄô²¥Tñ©wLz¿’ι]±=cb$£×Tïä‚»C*€/”öÉl)fJ>¼-*€OÞ`Y¹Zè¿qöûÀ¯r»r¨ÞYJ66ïò¾..S½yïò ïK-ðŽ/› à“µä~÷+Ë?À;›Û•3õNìK¼Sk›H3€N%gSEð†ž¾KΖ³älM~uT/.^9óËÑu6UA˜¸uÙ”³´kªÞÐÓwi×r–v­ Á¯NÑÅå°+gn=yé¿”ú~·ÞýΛj#ÅÞ¹s÷´µrï¨ EÙØ„»=¡6—¾\šoÃóyïˆ-=Z<±ÀêìõÔ’áÕ†ÕáêÀ*ôÖÐÓo¬ÍÕðê€ßýJ….Í·«úœÄV.Õå·£›½)…ýíèfð—Ìàý&üº¯´Òù†~C+ æ è ­“À¢—`÷ÕF:£†Q[ £xQ_ò”Ü[Wƒ’šþ&_£¹Ñnà7íßpGAÜ~óAñ³ø’"¤ôÚàͳ-Bö›ðÍcøMxólE[m I$ëœrLKÁÒ›n²8%Ù¿É|àW¹üæÐ¤‘É%Øô†Hôlz±áZêÞ¬t“Kô"eæHoÄô²¹@/[‘ô²;–I﯌ƒÊ{ônô(œók{ÐÓ©þ¦Å/TåpÃSŸ6¼&ä†'¾ Ï7­G…©ÈÙô@ï/5  ûµÍW•³.¨ÅnЋwUðiW…ô®ñ#¾]Õ7­Ç¤÷WEN—ÍCF¯Eï:ÅAõÄí÷Ϲ!¡§sÑ+~U‘Sß´=›Ö³ú(*p©yȸԳ¸\¦8¨ÙÄELŽKð«’šú¦õèÙ´žÕ!QmKeO»¦‚E Ùï É¥~ÓäêoÒ„fàÙ øô»ÃrrÕÀõlÔÐÚaó*{ 6¥-˜w ¿Ñµ™¼óýM€÷´>ýî\5p=œ“´tHhöÝnmÍKUx>nNh^~ÍÃÓìÛamÍK'íø•˜“¤{øI |±¶Ðì»·Ú¢D\ˆ‹8(ZYçáiöí°¶h¥“>ýJÌIÒ=ü$âÖK]qéËøqšÉ,³¤àFš=ýƃøŸn¤Jzkq™<é™êD–ò Ž•~›ÄHܯ .òˆ YÑÓoL„mâ‚’&ÂZ\.MZÎ"n™:¡Õ·ÇU´•Ù‡ÒŸÞP;3O§T'16¿‘Ukuµd|àwÜʘ¯iõí„mxöÙ3vo¨èÞ™§S¢•‘ÞˆéeeÕZ]=€^:T5µýr"ٯ͞ä‰÷ËàÓ õ9 ÅáM›¯dij^&7˜í~éÓ¼èNóBD¯)ZÑE|mÓ"ÙoÒÏu~ €OçXÐ~ø«º¨)ZÁôbøhEw¢"zMÕIZ4ÖêS(š7öÞÅ‚B;Ò¦p{o?³èéWvâÚ}ŠŸšEÑ$)°-.îö›ðÍçsNß=ýÊé[»K1l­Æxd›ªI|Þ˜R@w7o(‹¹Ùr’­’iÊÙF ð›F Þ/¶œô0ý>€Ÿ  8‘ÁçÅæ'ˆ"xCÙÆÍžaó ?~Ó°øa÷ “Ÿ_}9)º&X¤ˆjƒT "Åà Á‘…þ6üL×–XÉœdŠ®&ƒtèÚ²StͦHÕ©"BЇ³)2‚#süm\š®-˜8 ¿é>Hñ¬ê·LÕMòîIº9¥ ðÑ“´w2âDØð–Ñï|Zóó¼Hr’`ùQ<øM‚%‰«ê—Ä5EÛæ=(9ŽÂä=`Þ1|X°‘*üðSÈ4ÎÍðŽ2/¡d¿É¼$qUý’¸¦h'5;_s!ãÝô¸™ÇÄnt5 èj”«ú%u¹~'EaÍí°êÊ©|àwñ~(ËYò&ïó¾®:Ó½ó¾Èrå(W4¼³¦á6ï¡%Œ¤®d àŽw=¼‘ÎU€d«;¦A»UgªzbËœ³ÅgT°ßvà6œÉÂüùR‚_mÐÉw#MŒi8à'òàlªo ?«…Í–±†žNåjBAßýn#M¾ib\¿S~Ÿ’±‹0× ï—àDßúW|=ýÆ&Ùs{#õÍuJÙ¥"ÿ†¿OeKù}–Æ.üÀø&¼- €3mï#½ÓËÀ${|Scï­¾ñM)»Tä6½ëT¶7‘Œ^Sq“°ëÄœèšÿs .èé7Š›d+n„¬ ðr~Ô'ÀOˆdø™Âš„]'žàLߺ.­‘É'¬±ù B–?tüP3¢R}¯gìn‹¦kKc'Ö¤Šî”vv(A87cMœÒ„K-~uø¬®Êä“ߤÊ4P‚Õ”¼Sšž1xVGø õ_B87 NœRŽ«#âÕA}««ÿ2ùÔ;©2ý—©¹<“©Þ)™Ý{›Ëp :Ö ?°{osõ_~àø·C÷ð“~’õHÝ\žŠ&ïòþkOo.»ƒtêEƒ>ülwÀîéÍÕ˜ x§3Mí°Ÿd9kw_¦Éž…Ï ŠàK>*0ÓíRG¿ ”\(õ3©® Ww5/'ußMÙ4€Ñ¥M ÐK'ªì1Xx³W_ÒY™ngÓ”œ è…R]©~3/'ußMÙö÷Éó"ÈËŸ1›Ó®¤‘³òƒ¦œ”@pTÞÝ”óc蕜›}§ì>å‡éÊô²öŽ&½Ó‹áË0ó€òώʽ»‹¶IoÀôÂ¥›Ê>Ý”Iï¯ÞíߣwÊ?Ï›g>>-]69šÅÛ’8FŽgîª Âoš¯stõ¹äè2 Äàb2!qXø¤Á ot€8h»Ú ü¦{:GWKŽ.ñ,ï§Ýݲ‘ÃÞ”X¼ÎÙï€r^ÞÁ‡ßÝn³ØøÌ …x¾¨ eqù±æ3ÝTKÀÊû1x·êä°i%VŸöKÄû2_ð w»5y˜w Ï£,.§Õ|¢›úŠOYâ]]ó}²¢–³Àt³d}•Ï‘œœIeÿê[Ïêš­—Õ°>ÝT>ÓMµ¥B•Õ5øÇæ= Þ×^›÷y_„O€w”¤^]ʲºFþeõ¬O7•ÏÜÖöÍœÞ;Çw«ÎÖME%ïÃéL½Þ‡Ók6k»¿'3i5ZSnïÃÉ•½Î>ÙUNŒÒ¦7Dö>lË® ½NÉŸ×ûpzÍfm·ñd&­ ½~“¤Î>Õ–MïªzÌÙT9wÒ÷!Û²«R8óΜߋG‰yú]üä÷êO¤à7•ãœ݇ÉOÀü¬‹ÀÖM!~~íkù½È“˜§ß@~¯ÒD ~S»µùYu¹ø²Á`>–ÛW9<í"85ŽRÒƒà7Ř|8àj½__¢ ¸rg)‡çM§\IBßýªN’Ï&T¥õ†g{5ö†gO¨šÊÞ“XIœ[óèéœR>>~µæ}j£L™ýØü„ÆÞÄì UˆŸ°fZëad §sJùˆ¾û]døô>™rëɶÞg†¹Û3û¡„ øtåQ?À)±_Z£·½ÆÏ6ÅÑ\üÜ;›ŸùYAr;TjŸî,ˆŸœÊd¤5zÛkülSÍU·ùùUE뾌ƒ©Ÿ‰¬÷Aú™ÄyäSýŒ8UÔ†><´ÛÙ†ŸO?“;uå龌ƒ©Ÿ‰¬CBú™Ä9$äSýŒ8U(é˜^:z}ú›ÞõÆTˆùX›ð+ϙӤ@8ršÜ%üŠíüSÉùXÅ'€)>Ly˜Ý¯S´6ñSž3«Hpd¹ËØÙü„JNÑ*>Kñ)Xl~ÖݯD×í«Ä÷ùÀ›N“r8ªK!œÕ…àTÂ"=è»_ `JtY+—3ÌjióNßêLÞƒ²=$åp†—B87à Á©tÉÈ{ļ³ú™]ÎÌåL?³ºCqÝ‹o:W×HÓ".o×bOçʤ~¦ˆËœµ˜ãµt9®ÚüзÅâ¯eóCT-â2gµù ™Ô¹q¹«Úü|¥å¼©ïñ“ƽÂ)ÅgŸê`¤»jÑ3Åg¬~“­,êºî}Ãóæ’­´ù ˆŸÐ2‚SÂÎ,>ÕÁHVÀvÆŠà7ÙÊ¢®ûšÉÏŸCÓ²ÿ¤w=טGY¼ßJ:lXxüÆ*²Ø eïkÉeY’ËØ~ó¼ù÷µ’{ àÓo¼‹­Pö&–\^%¹Ü‰K~ÏQì’ ù}ÑîVOÖ0Àû…¬¡d—}šýêzu¿îÿù}Õí–Oq^«8(Ùå@V–ÝÍÞô`)–àÓÒsÆâz³/¾“~A>e\È×$Ïüª,[L‹´Faá²»À›.ecá’| ?0,®øâ»(dsÆ…uqÍûôÒç$ۦ̕™R}{FuõU—êRžb†QÜÃ=êÛ3ª«g¹T—x»óâî9©´÷U·Û3N'ÿDp¦»ê;Ï à7®{Åžü#d7ri¾=£¹º-Jó…L{™Ýfr:(*€SÝU-¡§ßØñ{$mÊ¥ù6“æê¶(Íï@ûÀÆ»©}H‘t(ý¬ú#~µÇõ3¹êƒ^Ý]2¬ûΈ¶öa‘¯ }`ÃÚÔ>`z1œ*ò„_íÃýLûd¿Ê¥uß±›½R‹r¶>f·E¹4Yê—<ñÂn·àÄœ¾ï‰*èé7“¤«é3™©«ú~°Ý¦ÅªË$. â‚,H@\HÜvk'ð…%Ë ˆc'I›ÄL\@ßýª™÷Ë¥Y£kŠC5Õi*,^QõgÌ©tøá¹óqð1â*›Sàpv;õê®öËo8—Ñ5¬Á¤7@zÃ@o„ô@oé˜^| .>Æees*€^ÖÐËî—6½¿¢×Ö>DrÊY5½C¤Rà f. (]-3—ª ¼)u»­¦wˆ²·Û~ã)?ÀûMð‹Këdó"9$Íä=`Þ1|~P8Ã~I¨R·[“÷ ìíðNo·ò^‘=Ü¡uªöÌ¥§Zób¬Y‘Vx‡„·¹Jïªh´Ðj4¿±ÁàõBÙ_}RjK=ÖÝÚ­è #½Ò½A |:,7Î"Ð’z4¿ñ±ô²ÊþêSŠØô®6ò5™Ñ+ä„Äšl=V‡õKðé¬ fHHkèéW·ÛdÏ`wëäÊEàwgíĵLz¦w]CÉ–suX¿ŸÎÚ`ÅHoÄôÒwàd `7åäJ9zéèMŒÎ«Úš—J:Ts~“2³\m#Ñûyp½‰y:¾êF~~”ˆÍO¨¤ˆÉOÀü`øtôá7ò1?œ Tß'(íj¬ÕçR)'Z\N:Õž T*7/´‚ JÍŽŸô4ôtnŠCðÙ6q:ýêSï|àW`ê™IY㲸zª=™ ò¾Ì ­`2“Í{y˜w<Å¡øl_›8ýõÉzïô]µœe–û’Þ!\Pvk¾¾ûÀ/ ®^çMÝ®åàuÚ­¶¬š=íV_¼ûÔF•°GÙ-Úúîð¾t¾øtŽEµœ?üÕ9¶Úªlö[}ëÓ:UŸÖ©6;ÌžPÈ瀎®ÞP!ª3Oç|JGð›Î×ê³T}R©ê“JUŸTÊ\6AèƒsÉäЉÀ*puæéœŸDé~Ó8[}SšªOiU}J«Úß+Çc.úyüêçH¥òçâL*¥Š¾;´‰Ùº«ï¶ÚR©ÅÏä' ~~ÿ*t_\­ÓCÆå™Öiä'b~è"OwõÝÚü¬b¿ö¼ß‡7?úíy÷©ØÜ‡Ûƒæ±´8w>VŸîÙLG ðåE;Ó:­æ’íy¿Ðn~vMâ&n¹Ð¶Íc h'pî|¬>]h3™§ı7Òv¨uZFq6Ÿ3LÖ.œ•–l‹¯ÎJ»«Å#_Á¢èéWÕÓüê„Úά]òq>k—¼YqaÉÍâiØ ˆC†ƒ#qÇÖEqì±ÅÃIž ïò®WØ­º³áD߇6ünÍËû¥®3p‰‡¼&LÍÑ|Á¿à•ÞÃ)@QünmÊûõ§3p‰§4óÿªú5àŽ’ÉSššU‹‡Ì©4 ØIÂm9¶`§“^šíÄ\åOT zúUN忪Z´³i=º¸ü5ຒÉCžšU‹‡LŠ4 ä¼ÿÚ±l%O'M6Û‘iËÄ{ļ³IÀ;}FÔ³+/‹6¹æ4sZÔLÞÊšjôΆ3Y_VNüj¿ô™Á´C3˜¥3 ÇŽ;0‰ ˜¸õV–ÐP„€Du6œJw¬O€8zöyÉ´t6kéùjùhޟͯ¸ŽÿJÅLCÊb7=À—¸’Ø„à7Ã>p* ˃à7iÈ~“†l”,Ǧ½èÞè ²ØMzÃ_¨c3!øÍ¬@/ ëXЫ»Êbzéó1¥êiÅî@‰ä~YÝ7cðŠÂoã¾Ùçû,rúæ›ï3Àoܪ[¡’•¶©äg]åÐ}36¯(~6î›íp Т‡o¾)@€:~ •“¬.O«fªd*¾_*‚ÏQ†Šp>iOa}÷U;g‡_ª~u¿¬®šý~w=õ :jæ #]Ä0`q±ŽZæâ xq­×È ~"PÂÛ\å hö´ _zöoGª~u‰­®Ê>X\ôØ7¥É\\ßRÙùÜÞ\SfZ;ª_~ýõ(€S©áe°f;uVŸ§]“s9øÕÁÛžÒ”—ào®11­•)~"äg–—ÁšíÔI|žJMÎåüÐñcñó¥u‰Ÿîê'iÝŽŸDf–ü&“ÅÌŽºN¸Ìr?’;‚ëÍÎß}[wwÉílÞé>“÷€yÇð)z3Y í¨›…Ë,÷³ák±#¸ÞlÊÝ·«v—^®s¦œqDpò¦\œò6Z2Mýqí—ýAór©ý²?®ˆëÄĦ)霼W§Ì‰ üð7;aм\j'ìoÍÛŠ›Ô¸=®G;…[ÑšWp±ù§.jÃ)¿]’KÝ7Li€ß¨ºO°Óg1-Y'›÷y_W]´s»¨çkà=BÞ¡•sè<22Ð%iÕ}Ôïl1¦ûô>ýPï“—e#®”.¶›vÛÍNeƒ{†.¾=Nlÿ>!÷8q¥£>ð«|R7ÕFkA¦—î1é Þ0Ð!½8™œ=ýj#ÛåOÈT\ !@/{#µé]‹™]ßwëM)µëYG‡(‚Orôa?œµ4xp½Ð>tõE¯Ï]¨+3öÞ¦7z•R»ž5„ˆ"ø$„ 'öÃARK7 —UHtõE¯Ï]Ȥ÷{nö¼û™îBÓI»÷&4…JukÒ—N¿íyzD)™uÂ!€_µ“kpiO.©¡I\ÀÄ­«#¡ñ&TFÇ$.`âàÓ#Ê©¬£üê°œ\“G{ri;¡\Ú-›ŒvUªvÛ3RH$"ðiÍW.ƒÛÏ”KZÑw¿’vß°ÜHÛ­©ŒIëvKŸvk3£M™*¾Ú«# ÕD| ¬Êåyû™ðI+úîWzÆîrV½[[«ã«.}Ì2«äoG±½2WýàóQ›S1ÀÑœŠ5efÃgu9tr€ßèŒ?𻳶)ëÑ¥ø è • þb{*d®ÈcÓ½ëœ ›Þé]Œ@;0="'[zéXñµ‹©}%zë»öa#^è¶9Qì\_[¯g‡e)~µ÷útSüFõØ+Ó `ó¢p⛟€øYÛâ?ðL,Á¯v?ŸôðCÇOe4ÿ½¹TÝÔ5¬šç¼t[;¤hêDièé7Þ`½½ûÖ—ýw?i¥^,¦Á›g%æ› «‚æA-ö›ŠB”†ž~cîe¾ù€ß¼ñÝz¡g¹j÷é}º©÷ɺ?Gð)‹“9½ÜïH°³ñûøÀçé‡×}‚î›LÖ;%2ðÉzLz¤7 ôFHo@ô®r;@oÈœ+ˆIoÀôÂï~¥Ëé¾Éd6½‹’áÏ?ô¨]Gøè‰¥\ø_Ž•Ü0§“Y£’³œ~qÞáçÍøý¤À;«¢µy˜w _Ž«˜è€xÊí"Þñ9½º›s,â<Ç"ÞÉI+ñ‰ïñ.›UÑAÔXm~!Eà³ý,'Oáù&â\ƒÍ~àÆv».®ø—²YWíÀÒ†àZ›Ÿ€ùO l üf¿ü,VñÏiw„ùÍɶ{ŠŸŒà¨¸± ñ1,2ð»ø⸠øa«6?òfFÄO¨dˆ/ˆ^‘ßÅPçM[¬1ÙvçMÓwH:{ÞÔ³íK ™³nn‹|Þ¾½êÍ÷?›×%°lâB#Œ¦q&é}M ¹¶nî6q?üÍl=D:ñ-ú™ø¤õ[øêË+#2¥ xCûeß„L:j¥ÎOBptEÛ Çà7%µ¸ÑÏ—ÀJGòµÐ+‚ÏN 2JAð†ö˾‰ŒtÔ<ò1?ät;Ľc™ó±4.ñsæãókj˜9÷ž¾hL™üæ¿ÈéðYûÉ+ûN|™ øÁF<ë" ô(sŽ"ø"e”ˆ2óoó"i[Œø¡ã'³œã!<ñ™ŠœÈç!ÞÐæ‰GÃð9ÊÕj5¯¶¯âÛ¾ uáŠNž ME¦wÝN!ÞÐÞ‹GÃ"zC£:ª½ôîW|»_¡îk¶"¤r÷3}|RfïkÀÇ'èM‚`c¡Z/8qøüŠþ=‚_ˆ·øM§ãü¤>°žJm¥I/ä®jZì`Þ1|ö‰aà‡GÃBÞ×]õÈbgâ=bÞIí7âÔ~#Þa} ,§Ýö÷vxÚ|ïF8ÑÙü'ä*zúUyÁT°H/äi·½OïÐ=ü `Ó°íÝ'v°íð<ââ`kòH\ÄÄÑuSƒ‰ƒßOïÐ=ü âÊz¿ì¾ |·çIfr‡~9?o ÅÁ9Å´øÜØɈë¾z÷H6àFzg½žv_¡½ÛS'3¹‘[@ï¯Rw?TL €Ï=Œ™ŒËî«”wâл4×ÇhëgzçöËhêg¾MûPv(øbgI]Oã¡&¢%€àíâvû_%—¾áFô.·[›Þé]ÖIo€ô†Þé Þåzu.}ø+  —½ÝzÙèµéýÒyûŠÑ•Û¶OíIœÊíôá)Ÿ¼Üì#áãÓ™ï~u=‡FФN%} úð”ÏH\ÄÄ‘Dˆ8ö´œtÖ£å=âæ ¯ør* h` '7¼Šà0dêfÍ‹§Áï~RÀ_Ÿö›è͇áÍGøæzóËÄôæñ^T®ùºY´âé½CoNY4—Ñ’N,–À»]F5Ö‚às`Eð†><öBàsÄUTÀÏ~“Cïö5Û#¦úö¸CÅÍ’Å4—MÀËf]´z(ÑŸuÀ~£(‚7ôá±Ë9Z6¡"]AFð›l|·ÅÙ]Õ·ÃNúZDjÑôËI‰=Ó"¿`¿QÁÇD­<\É%NúZô±1ù~.\~9?ð“x_…¦·.ä—œ1Š x›åéTÍ$NúZ„³1ùÖå—ƒˆÃ·œ*ó{×ïnÙä÷$ÎK=–vIÐ~#êþ†ŸT-Ö=.¿·íîˆËï ’q5×à0ñ¿K0‚WÇê­Á«ƒ«nQVÆâ[u¶®†íÜ‹§ºšŠàÜÐpp*õ!OGð«Äeq•¢O–MÝFZ7“â ,[–Ãö÷ÅSYNEpn2¹8•_WGÄ«ƒÎ{WÕ"úT=öêø*KÔw?ãMD¬¯U¿]ßm¬¾4J}?¥Å=ü`Ç’5°ê»Wð¦Á~u¾º€àwyú~NŠ{øÉŽ¥Ëªkž™ã#îXó^$NMŠX }í$uø#2p½Ù3š«TÍÉJqMª7Ïlp›Ÿù ?òƒçI$O§Œ#?óCÿj7W­ÙäçÛÙrÎ#ú”"±N&‹ àSüTj&é¿ÑfE[)’9§•ÞnâÇÔèÒ"}RØ'“Eð)~*5“ñÃJ°¢-õÈœU ⇎ŸnÖž–N8ñyˆ©ÕPVi%ÏÙi6¢ácžœÈ=À)ùÔ2‚Cm£ìŸ~ræZTâ3+1‰ Êj¨ä9»ÌÌFÔ6qAÉYÛˆ8d?1qlï©ÎIZô]jb‰‡jbÉ>]fرrEOçv,ðy6©&–èJ2ˆOž!>yà#K<#Kðé&x¹¢§s;¡ø<™Œ#Kt¥ħCÀœ$²Ò-öœ¤ÉFqSéàó9¶Û;¬Â§·¹ ˜Vu‘£JwéÁor’ø•à¿SŠíͲH¡ŒY" ÚbY‚«c9¡Ú«# Õ>½ÍuëÀ4ÊƒÕ Úãêˆxu°9I°:èS€ÏFÀ”¦e»Õ÷³ÂnÇÒ÷Ûm¦à³JF@F4#x›K6ÔíVLg}H_§~#,uÕ­q=ëûµ7SðY§" ›|Rl’&q?ü•.MÔU·–têö^œq{ÿµê’Ëšâ_=:¹IïVh•‚ßä“Ät†‰} ¬têö^œr{_WrYSØüyÈÈHïVh•‚ßä“L~¾/Žói×§ûÓFæcŸà”Z x:'…î‚àéæzš]õ 1GdŸ¸Ää'@~ÂÀO„ü`Á´ðtN0ÝÁÓÍ52»ê&?.rKü”÷ýgwÝC”ÐÆà =}wh*GƒÂ¤£wÝóIP¾á÷ƒçq!²71¤±‰ ±#xCOߚʑRQ:úðw71Ÿ:GέR=“ýFøØ‰0¹zlÌ”¤¾š)mlÕ·æ«Kè(Õ2Õ35Ï~ó¾ùÕçÈ~ó¾yøô»E[]:I©¾5o«Nb#s’¶ê¤ ™Wh‡9ÉŠàœ}&z:Wõ« ÁoD+ø•ÐQX¶hÒ»..[´éÅp.©XœsßDOçjƒµ!øæÐKŸ½Ý3ýy„/&›vøåŽàmT†‘Ý,8uFŒ‹Â{€ßt³Hwu³|Ã=^÷LÄD\ÈÁÛ(#»YqèŒS]@ÛÍ"ÝÕ͈c÷K}\gD}ÚÁ9?¢Žàœ2= ØŽ^Þ/ëþÕ9"Î&Ž>bêsèÐ.Î9 uçtÑèé\ÀöŒàz‘mÔÇq@%£dÄ™*MXœs!QôtN%“|:ˆfR%£ÑuÄTsæ‹,.X€Ÿ d`™jÈOø‰ŸÙˆ¢§sj–àÓI2“j®3¢ÍÏwkäÄ¢­+øbw,±+ÇPe¦ À§‹\Be0AOïH6²èIlø?-’íꛤ>Õ‰ŠËòðØ OìÂ3T™ið醇x_w,›÷€xÀǸļÃï~5iH}z—c¦ê{FgwÄTÔ.ËKµ¥±‘GL=ì#‚𛺪+‡ªê;¡ê{®fwÄTÔG3K›¸‰ƒO'Œ ü¦n êJÁªúN¨É55R‘§Hä.u§3„ÀIÓ¯„à7•îüJY©‰ ¬äš©È:$rw·ÓBà¤5XBð›J7à‡>¡&*~ò¡ë*€SW´¥ CóaV£#øM»ö¿'jöm9ùÐõNÀ©Ë—¢§“i‰Žà7ÝÞàͳêB;=£¼{ ìneÅvF&õ¼ Ä!Oç¶œbZï<Â+ë™?I\´YZ\‰ÿüîVv(YoeåÝ aw++¶e2)V -¼ÿÚÊLm æ}Í–œ9ÄEó¥ÅU7¼Ó·²rær¹LÑêÒïkué÷µžÕÙ—æµ¥)ýáÄÈøtw+¤²e€—›-Òçhˆcõû&q¼~_ëY}± ²‰ ¸õìYÍ»[!…1€8z‡õù©(ðS!åXÚËx`úÝ>ð»cas¹ÿào®Uq`U`ˆBª®ìà ~wúk.ÿ}ð‚é{Qc¼Jµ¿Ï&ÞTlK’„œ×LaI’˜§ã_íJÁol¬>ð»¼B§nOý}6ñîDa[’$dÏ(ðé°t•˜§ãçJÁo¼²?tüt掕ž÷LøæÌ•žw…LÁË~ꎕl­FNèÌ…ž>]¥²,=®´D:t4YZSÒóž ßœ¹Òón)øâøO]’lâ$>}º =dgXz\YôœÍG\zVR|Ï„O±4_ø2\›ñç, "€s™ðeœjŠ®ÚÓ¿é™L‘q±ù €Ÿ0ò!?ñ³v~éîø™ð„¾ûU‰ ðÃîX&?¿B’¼g7µÛ,>]ó#‚£JÒÎÒ'™b‹XÉã¿)¾ð~‘ÖK‡ãcÖÀ’÷´Þ¦v›€û† k~DpTbÚyò˜ÄL\@O¿*¾âؼ\:SK¬®‘I»ü¥øXi3à7]þIíÄ)oJêÛr”Š =lÓ—àK¦O¼`¶Mß|Á¿àumªoÏPjÛêƒÉÙr÷׎\ä¾#À§NØgŸÑÓoô±)™[N#a>ð+¸t6ÑD—ò§M\€Ä­«#ÙÀ…¿À§NØ€ŸÑÓo„³&q¿û•[Jg·œebYò9[¤lϤ&k9|®åp½Þæì·ådûGÖr’Oî²K›|–&q‡ás-‡èÙÄHܺ•eûGÖr’O-‘²KÓšŠk"C*®‰ ©¸j9ü&•|n©¸&2Ø¯ŽžÈŠ«J^›eN>?ˆT]ºÎdÖì3¾ZÄ à©âkç® À'ϽñéÛßùúÚ9!Ô«»*ß|ÃßùlziY¨IoÈøb3€W$½[ \œ»Ø$Ÿœù ½ð»Ã ¡^ÝUõǦwõïKvý¿¥¿¸d²]ÿïìžA˜C ~µg´³úËz3±+ûèÕýÊóÚ•ýÎî„ñB¡àW{F;:©hZN*ý½Ûn<õç…¸Žò¼)6¼Î).Õ}é(s ÉŸÿgrÏðM!IfM8¯W€þÞ7îsDðŒÔ`‹²À§ø2›Õ}Ù,s æ' ï~—Í2§ÔE'™—Q¶§d…ñ“œš‰°ÄÏçâ}øÕ[’ŠŸü¸M²Ï_!?.§¡lO!AÄ…¸‰ÃC –ÀÄáÀB~5¤+?.G“ìóWÈvÍ~LÅí²YÙžB]ïÖ‰v:*sǬü^tß“rtUýìWà«[‰³y@ÛºuÑÚåtøêàÓáÕ|wNÊÑUwËòžCÝýΛ®‚ŽÁ§ŸÊq'TæéWöØü& ú_‰{³=b¹~B$ÎM÷ÁÚà‚àÓ/"â>ýÊðÃæ:?ì9ÉäçÛžwŽuùPesDÄÚÆŠàsc&jY_3Ó²œI@±ûDzBøM:÷¿2ÕÉJ¦ÔåVeÒ0½‹}FVŠ:žÁ—îÏÀt<zƒMoé˜^:øÕåÉcÓûëÌ•\ÄœlO+½Šà”h%5¿jùà7NÃ9¹Æ±€7Ï–Í7ð›_”Vö›Çj–Ôüª™¼yúÄ—\óTr~¯áÍåàÌ¢ýµlŽ:|ÅE§’³KÜ;Ào´Ù7"gê2“ß …s=£8µ´×Åu6Ð!.r”œ]â^ÀX¾y&?¿oLV!÷«Òëw€£;Ë¢óŠ>†_ÍdR zúMfùŸ‚”õAàå&üŠ«ù ï¦4é ˜Þu $AAj°àczÃHoÄô²‰i“ÞYE@/½ÅU´é]%(¹º\Ls=œõ;€O¹¸Ž´èéÜæY2‚ëÍæé›l‘«oó´µËp{@/k‚jÒ»é;€OùB4Ë,¢§s{oÉ®7{¯o|F®¾½·š{o^öÞæòÙÏí̶»$·Ø ív €ÏÑ›AôVôá¯ìvøUô6—[ϿںÍ>}Y·îæ2óÏí̼$wh¸:Bð9ø3þŠ>ü•)Xtð7—§Xôo‡íâ°V¸Ì1%ò·£Û•¼ó¯³¤Ý>··žÎÍqK Á¯~;ºï·£¿gštwˆ¨LÞæ}]\Ý® à#AðÉ\ FÞ#æŽK Á¯~ºïW¡¿ç¹tw(ÀÊcÆûx™ÙÅ{¶ zx³"ømQyŽÎ µ‡åø‡ùîWýXåLÁ’—mÜ$.`â–eS€m .dEð;$@ÚÆGâ"&޵CıW,máÝV°ä‡M–ˆôÀöåxi¨*Ñ•Ú*æˆÈ íx¾8à{ÄÇR´_pȧz,©†íë©À§ß$—Ì"+u/˜=#0£cYCòÞi²ûỚ 8U\ ;E\ªÇbºLÑ» q©†‹0åx›ŸIH“Ÿ7³²+€S¥Ièé7âF›ŸIC¢".Õ°ÍÏZO/–\â+òŽU€œ%«®*εŠ§Î\)u¿¹c}àW –~“`)¦\¢.ÙU“Þ€é]׳zCçÚY €S'³‘Þˆée¯R€^6C襣נ÷+Æ%»ZÒ¡2ài~ãÁR’oûJȌ۾’+ÅQ’K´_ÒaÍÿi~cÎÞ<½1%dûÅmLÉ•d(É¥º/ÄÌ‹„«ä³É½ë%£ƒ¥º/G#3~9åßÈŒ’}'¾LE1c#ô*ùl@¯À§7ôô¹œ ÖXòŠo°Fɾ_¦âÇTÃD%{óË™æWÊ œX+ÿ>ñ•C×#ðÙö‹ì³à7S ‹O S ~¦Ó»®¡C5Ìš°(GÎÌ¿N|åÐI|6#Û4½ô¾æSÃØôþŠÞúîl¾Ëw˜j˜X®Ë³TdÀl[BO_†ÜÆY£T»Ë“MøU—–í¿»î ÓÐÅØÙæ=$ÒØÙä=@Þ×&ÑR‘³Ö-¡§/Cnc¹aó:›‡¬.‘à¾ÍâøÊm¹áµ÷ÓîÒÇàsM Yž ‚7ðk3÷ÑÓ§4̘½Û5 ðcÚrfåÛqíý»tèø\ÔBže‚à Äû2=}ÊÀ7¿.Úær–-í°ßaî‘+ýÝÉ áŽƒ¾Œ§ÌøšÎÕ#€s9IEß×eÿôåÅš.ìïV ÷Øo> 7¿Îµ±ßü¦œKjEðt³æÏ´.ŽÓï|}\u¬jºwÄŽÏuàË0³€‚ÀoÕvï28ÀoõpâÆÒüSWË$.@âÂ@\„ÄD\(ðÃßämâ‚yD@{0«g7þ„ûqÑåQXM÷ŽôÀˆ“àS_é7U#Ò$Q7©‘‘‹¸èº ð›í~dKzÕÃÝ/ø\`Ï›úîÐû0ð+”ªÔ©Ôç‚bÒË®D|ÚýÈŽv@/Þý2€ÏUöTªï½¿rA1éý}vM¾³«é‚òíù˜ŽöjËFM.YD_5¹jxÕž\ÂÎÄþÀïv¿ÄŒ¾¶ù៦W ægiI·ù ˆŸUµU“«Wí%ìèkÀ?‰™p]³©z|HÕc’L¼Ö³kFS„¹t‰9HDræ²êüêðé›CRÏæ¬ £&q·® .ÄýJ—d4^˜K—˜ƒD0q~u*õÍ!©ùp¦ü’°(.wâNº8$'ò›_ñièé7³¶ª­:‰¤K}÷`êÕÝmx…)ØôÒÆ&½[‡àLt¤7bzÙ‰\ÕVDÒƒ¥¾{°õêîöËBU'ªËu¯šª™(1ÀÑ–³3½üÀ¯ȪÏDå¿òœ­•ʶT—7ŸÉO€ü¬S+?!r®•€Ö¥ú\P?tüT*Ûbk F×äÙ|9®6»l_º´™ ð«lesé¦>ð»0­"â"û/8t4œ¢#øÔh 6]úÄÀ ¦ÓÍ%P/˜^Á¶G\Ž@¶&c2UØí¶Çóp¢ýÚÑDUJÆTmaÁd!Ö7ç·~fâÕ ‚ߘxÕþžíöpGŸ‹Í{€¼¯‹Ëö‼/Í€÷ð'¢¼Äûz°ëgî^½ ø»WíïU„gwtÙ4Ó‹#ò¾Öž³.›\|¼–%²Ë¦='û«-{€ßL k;=Êû†÷ W'šüÌϲ:ÚsÖe“+‚÷ªDvÙ~P`­mÙ€¶±³íd'ïû¥ÍϪalñݵr?¶ºd\o2ôÍV—$¤çZv¬vª.QŸÕ%Ê%(x¹Øð>ð«úZ‹Œå3 7(~¶ºÒ»$ømz¢7,S;U—(€ÏêåÒ˜€^v_ôÒÑÇèf»Š°ê’&‡Ùʹ-»ÙâÍ\}­‰«¾ÖÄ<Ô6RÖ|ê’f«K–n›ŸÀªKš¦çæm›Ÿ€øYëkM\õ5“Ÿ€ùßý*_hòó=æoŽ}Ÿå¹‹S]Rö˜Jð:ÑílièéW»Ÿ©.ÑÉøQßî§.#¸o¸ã¶xdyÎä=@ÞÃÀ{„¼Ee€ÒÐÓ¯¶ESv‚y‡ßýn[T—à¾-=ÊÃe‡xF‡åÅ^À)ºu¿<Õ£(€O§]eã=½§wdwX­6 Ty¸ô .ÀÙ£±8eo·n¤§Bðé«lÀ¦÷üŒìá¯Ô–ßg´ï–M¶ó±‘ëjÍŠ¤*r-æg2‚ß$T›Ï¥e*?“ßÁïVG¶ó¦‘k jÍŠ¤*r-æg2‚ß$>›ÏÅæçW~ÆtA$$úú+×ñ_ݽËÕÀ§üL⼆?ð»(®ŠÂ~UÐk”‰ÉO€ü„Ÿù €Ÿ ë 6&‰³üÐP\™À?”I«®¹ÍT|5¬çŠ^gÙŠ}ÃË<*è©t¿ñlÕe®ßÎŒDââ `Çܰ‰ +µ"€O¤É#q‡6¦‘¸ˆ‰£ ÕåŽßΜ@bYN|Í¥Á࣋ƒÕÚ¡ÕwBO¿Ê©4ûŽUÈŠBómxÍWQhŒ„ ÐËJ¸Lzƒ²s°lz7Fã =ý*uÒì›X!+ Í·_6_E¡1 °Ö}÷µn×2#jϲÉÈ¢ §_Eo7‡‹³F¯ü*#Ú}Ñ3ýŒ.Â4›wþØíBáCfDíY6€÷0ò1ïtXwsê8k3 x§Ãºû2¢‡ú™eÔw\zÝôsÉ١ן³ÝziPêÏÙìªe³ïï³lv-BøU±›úŒ´ägúãêÐ3ù ˜Ÿ¥€ßŸ³í¶ Ï͘Zvëþ>²f× øa÷K›Ÿ5)ßãûiw?¦~¦*>í €×ùPkÇÏ2”¤ûÛt[?Éýr€·‹ ï~RQXî—€¸ÉÀ2•1¸0!q~ø›9ÝVÆDrÃı; Vâ|Bíâº_v[óî~Ùyóˆ«àé䎥w¬Æ|÷«AÉ]˜AÉ€ö‚ØmÍ ì)_.ˆ]ƒ¬ žNîXŠàpÇjÌw¿štÜ…™tÜõ}Çâ¹ àsáMÚ‹œqjýµÞ¸-G]=rü*~”ñd°ù €Ÿ1|.¼i@[€S~®ëTTxãvuõÈ~èøQÆ“¡§wÍØnÿIïs &5˜"øäûU¸ŠÜ~UèÉ• üÀ¯*r=19ÀO -…?ðT|òý*\EðÃfþ{re?tü$¦"׳KƒÕMEˆ>X³|ªÈ¡QRK†q€sFôá#úîÛí+¿Ïõ¨ü*z³KsióNK¸LÞä= ¼GÈ{@¼‡%ÃxÇFôá#úîÛm1¿ü¨üêW!»4—½øîk¦£Š*ìÈ…ðùV‡Ž«Þf‘ïÅö# ôâò0ú†lZ“ Åw‘3½R0q>_÷Ð9§z`%¶Øæ`ä\‚^\F€8”!)‹æ²›š—ÈöÄprr–8å½$ªo‡­¾ "1¢†àH'ùù ýsZ|¯ó>l«Ì0Vv!ã³]é>Û•Þ¨³g;ì÷iŽt’Ã7ñ!?ð³ûð0Ù¿‹ ŸkK÷¹¶ôFmõÁ¬B'_„;#v4Ò>#®wÂî²ýêiSl‘g©~ã6ÀQFt×ÖÓ}®-€÷«Û Á—ð㎘Š´˜ë°»ìÄïAF´T¿q#¼³]AÝåÚòçÿó¨NFøØw‹gšÄàK¦5}x#œ«š+€OóµŠRÛí¿‘‰ýÀOvö“ır›¸Pð´’Ø|IÁ¢‡«æ àÓx.Hüî7:/Dº.Nò:•ÉÙïù À©ªŸ ‚7ïx‹àÜ4rEþf‹á}x?pãê×–À"ä(“1 „SU?o(¬ñV†øÓÈ}ø›­ ñCžP?_iY‚¶ÓÊÔ©¸Û±Ä>ˆ Ì©d§t’éAO¿pZàS”5Î'i„_ņ뀟ùYÍO˜:ÉNé$ñ‡¿pZü„Æ!~èøÂW]õTFøXÈ?¶ÓŠ4Tõkèé܉/ø?¹“'>õTýFø…qÃü¤ˆ°nLê)"ؼÈû¯¸´Vï!6ôtîÀ˜|ŠKÈ;üî7U?Ä;yÃC¼ÃD]Λ@%SÉxOGUþïF"¿pZàTßí˜Æ_àé&`“§ê÷?©A¬Q Ÿ©dÀ¦³2}øKüÂi‡ún—ú "ŽŽ¸ä©ú!âp'ϲhó{uq¶®f2PΜ™Ìüëˆé²JáW!“=5ˆøkC;â'X¶þòƒáÔæõˆé²JAüБ‘=5›Ÿµo] S)düØ:•Ä9EŒð)Ò¨A¯#ü*'iëT´‘'T×äŸøIëêš>:•B–­SIœS .âVÿ%D“´u*ÚÈ#¦k¦"S_"®¾Ïvs’}¹RV;°´äúàK‹i ¼Ûøzõ³Ëvz:<#nCæÐ\e=èÔ÷±«c¶q6fo> 7—æÑ@¸²£7(œ=èéð·]ó‡J‘5•ÐÞ瓌Ý7óÀ>$ mâ‡ÛÄnkž‘Œ#übøüÞP¼ùÞ|ˆó(ðæCF¿ó 8üßmRÍ3S½yrÒ7zó¤#<ÝœbZ™;GòŒdÿΗŒàË•?3œ«=IEp½ ×Pø½<Ã&.`âÖeƒô6q¡d_®üh¥AÄÁ¢”T×›ˆsMÅAıúŠh—é¿2qÑvõè¨GmYóñA­ÐÔm⿺Ìà/ñP ±\FÀ›™ ™hûu 7¿.ZûÍøæáÓ¯®éàͳ ‡x¦pXœ«$Æ÷¾fì”:Â/œRGør˨ôà |øê}€O{Q/dÄEO[ô¿h‹þ¿ïE6½Ñ»­zY£U@o@ôiÞÀ‡ßh㽡2¬£§«ÑËfßlzíXr½¿Ö •½Ž‚Æ3¢+t€_ ŒøUøÉ»Okdà76V?p£ª´F¯œEﺆ‰ ¨äw4…1ÍŸˆ^6ù è¥ÃOÞÝ\#¿qÁô® »¨¾èµÕëyÀëœn´“"?üÅ\>åûr"÷^õ´Ï ð+9pÞÒÊ¡úYÀ)õ󢆌>mI,¶f2“çãâjðÓ ø JJHb9T)‹8¥R^DÑ'!1ù B/ ~è«sZ%V—¶1V{¦ÈCy†ðÅ*(Ž&#¼#¥ÈÃ|øˆT2Ûø©® b<šä²Vu‰Mâ‚ⱓé . âGD\HdÖ8š°Äêª ÆCJ[®)¶NeÒ‹î®)Íö’ÅBÀ™ŒŽøá¹ˆSŸ/r™2ÉáW×|^#Æ}z¤w]\Ͷ¢ÅNCÀ™ÄÍHoÄôâ¸TŸ/r™òØDôÒqÙ|ûe#¦zH´§øÄFFoŸê±»áõà zúÉù¿«ÿû$3ö›±‘Õßçuì®hý0÷ž~c_ŽÞ<“ôi^äyWo’Š|1· „QäGüu/²áܤáˆ>üUÇ™<®KWÇ™M\€Ä- ;›¸€ˆ[Œ"q·ôxâàâˆ>üUÇ™<®½HWÇ™Oåv1gßäHÖì%žÉBù¿ØŠ›^¸MJâYÀ¦Œà>ì#übtÎü$`—l à=(·Ç™¼Ì;†SªÒ¥ùÀæ=@ÞáÓ¹xOÁ/üÝïì+g“w’ÎY(ï¦FgòOÚ̆áܬ¸†ž~“Å1]»„snàWeúoÐAÀ–åP*Àå!ÖTß@â–ᎀ¸Í¹†ž~“Þ4‰ ˜8øÝ¯êì€8¸ÃöYš"¶®¦³gêj$)åä<¡O^gžNºv ‚ßTêD}[ä¡0f‘ÛÄ…ÎFœ)ŒÄ-N΀¸‰ƒO'í¼Áo*u¢¾=îÌ·DÓ²Ç%Ïüã>FÜ4þeÊh¿‘¦¡-‰Ì‡¿Ò–ˆ=žg©Ø/˜4l¿à_pHÁoÄ!B¨;"óá¯Ôö ^&¬‰ä÷ÞŸÝŸé"¥·2 ‰Hò øô«Ý¹Z™dÓÇ ‘>BÌ×iü¦B2µ³ä÷£ÝÏ£i#‚éÅðY˜‰$$ðÃO¿í«¨™ôL/†ç‹ô& —ŽÞLí?Å3Ox„w¬‡ôÉ“r2»ã+AO¿ñ™”bûLF2z‹KIýßí~…±Ã“â™:lÓÒCÚáI9šð1Ò1½¬M¥Moh‘ŒÞâLzéè-ŒëÔ÷ºÛnïµu*z‰ø’ø ŒË¥T_†¤š’ÄfHªoï­®ªù7ü]iÓ ½ë²Õ,: ‰ø’ß Œ™% —Σ˜jL/üîw{ouUÍMz©4¥ùêíp*Áƒž>í½™S™I;œ›%>{Ô ½>ÍË~·÷2C€½tÙ¢Î.Xö^[ó¢™Ó¢zñt-ðÙŠVÈèõi^½tô6ªþßßëÿ»dgG÷S°y*z:wô>—ùÉþ~c-ÝåÐþ ÷³ù ˆŸ_9ÍŽ.˜`÷Sôtîì|®æ“ø€ºÌß]í6?ëñOŸ÷v›Ä>‡åø„àË&Ge>õ9kÊ«‚ßHÎôq>¿á†”zéµü„Äenô9,›'_v)*q ø]u}÷+aš>®Ó£ÍÏw^bb1¾÷Änî~Qï~H üg–b›¾èÙm_jûÏyzàpûê{ø‰dsÑŸÙÄ…Hö(˜ÄL†/ ™Ü£ï“{vûšM\ò\ˆc £4žUDZʡâ3"8uâ[w,qi.U\.gø•e¹ scR9TfF§Žlë–#.m¤ŠËÌ ¼`zÏæÎ¢êÒ,𥙆*¶ p®Úœœq@þI–øUü¨+ã ê;²)Së¶é¥•Í6½Ñ»Ûlz7µîà”Ír˜ç“"zéèUWÆAÕwâS¦Ò®ÉÕe£é(á÷=;Àûü¯¸3Wz=smã'¹ºl4¹\65¹ºlì7sq¡"xŸÿwhJ¯‡¦íÒN®.M.—MÍï9òïùð–#NYþÇŽà …ÌÃ|øÉÉ ’sÜ4»’tê›q£gÖ#º”¾ïAÉKR>¼$ ‚SbGð†öa>üäÉ9nš]É?õÍÎÑ3ç’´x·ky?¡îö8[PR„³ùÀïòrÅ匩>EˆêŒXÞψ»­Ì–t ¼z‡€L'ÖŠË›R}š ûÿ:¥U—WššŒ8™³Ì{Qpf.Ú×2ãFëI^û+ÇŠà7mfÆõêîâ§RñS]^u&½Òz#¤U[ézQZ|¤7bzÙn2@/ëU襣·RÑÛÞ÷ŸÝy³½Ÿ77EamgÑ»Ødjs…ÕÖdLÎLÔw¿òªÓ³q;²Ûû¾¶;0¶÷ã¦Zl‡ãR zúMµØ&.@â0üÆ«NϦõ袂ÒîR «é’´“Iy0ìç;#c†¢"8§‚Ê>y9wr>–v—†ñ—çf»=s.‘µÆÚ]Òd“÷€yÇðy»UëTçäQÀ'/çNNçÒî7Þé}¸ŸÝðž9ÞÓóï›5ŸÌYA)“ÞzÍ=Ým‘xD)Ø]Jf€ßì¿iøIS„ü„Èm¤&?!eÒBÏæ'@~àÓ#JÔîR'€6°?ì Õæg­á%[÷QÉûe²u•,b§xf[´è>’-ø"[¼SðÃs÷K¿rfà7S¿“oîPæPkÓY(4é Þ0Ð!½ÐFz#¦ßBüÊØÐËžJ“oîIïﳫ%°øÒBú£$¤Ÿ—Íœ|lŠUá4ËI5Ëèéwáwfp¢k`™ÒüæWz‘´\÷rFð±_¾ù¥œÞ¯ù仯%{ÖVæ¼]“íPI‡’”|'¾äJi¦äM&ÓC—oÀ}_KöL¬Ì9ÀÚü„Hœ¤ä;²%Wæ2%—æÒäç»…qŽŸìÒé'CÉðÿ|_8«=r±[Ê!œëÑF~öGé\~3ù¦ß¤ì²V¶‰£uúqâ"$»Ø-bf@î¾F~v>é\‚2ù¦ß¤ìrfN–ÄáK"9ý&™ž&gcðå,GUàSqÕð’=ýæQòŽåó4ù†;:cLâ&n]6¦[Iĩǘ|9 RµõT\5¼dÅÄaø[ ŽíŒIÕ55™š—Rɶ„>Ç%ÊI¯UíAGLðµÒìâ^GðÉÌ~UÃK>ÉL25²¦4«kj«¹:^볂àG)Í‚àmþå ¨hÃ×z`°K€Áo7`uÐ7GŸâÆ^"`^CÍåa”Ú¡ÙìòœŽ\P¾bôtî|Œàó,gÒl€_íևЛõ|Ü\îD&q;o±Ùå9ù›ŒÄEL>#ø<Œ™ôÄÑ»u;œ¦<÷á%Û¹dÊ¥í"ÎTܜֳ–ûÑä’¯ˆ>|T´æ+óá¯ÚøR÷etlç’ÅyÁæ'@~ÖÕa*c ?¿jxýl@ID>êE÷Aê®>¼Ô}Û¹d™½“³ Àö( p$YαÀëœv²kxéAO¿Éèd[ÓI×½^.¢7?.“õü¸B&ïAÙÖ À{€Cìbðéz :/$Á“²y´ã¼³¿ ùqy´çÇ•OÊÑåûd&qÕ9º¦Ûåx6¿|¸ð›í6G—ÓW65q© Úüжh^ç1móCÏÀËgšY„¨€:°¢ËéËä绸0Õ ²­yQ²jžmÍËÆç²ø´_"Û•å°œåPá­>ï—d×ü~•ÞÉ>ÍK65/iÉÚÚô%KóÙÖ¼l|.+€OÛ"2}Qøá9!·ø¼-’­ù€^6?“}š›Þµ'6›š©dn7ëûm1SðÅËÖÞ<„ßLÝËG#…þœ:‚ëEn7«ï¸jJf0qëêÐ÷kd¦à‹K­½«&¿›—ÏF ÄEL›vÍê;o¦÷jÊî–c*nbÇûeðeþl`z?prP%„ßtàð›‰L²ù J–)M~ä' üDÈO@ü¬õ À( á7 ü€zÇ¢&eK¸ñÙ¹‘9¿wHÌ… àÓÆT9 Š 77+€Sg1?ð»ófö7͉Di ?S—Ùé’9¿wHÌu‡ àÓöU9 @o@ô.VP&½¡³þ™€^ú¼™}çM“Þ¯²šÊûmq·û{"ék;À§“Ù_h,{Fð†J+y:³yþùV Áo,øU²¦P§Òò~[ÜmžÅžÇGºßzÃ_hx{Fð†*3y:µ÷ŽôFL/ë)¾\O¡Î®¶¨³·E{"Ñ$´Ï|Þ¡)ü2`>×WWêuS¶áŒAéŸèU¿Ñªð±lö ‰²OH”m!Ñšjµ…D½ÑÚóàâÂðù|í“ 8rÎ^6œ²GWÄ‹‹ÚƒÅEû}:¤ìÓ!e CZÂè yìogÃЖqJùtœRðé¦Ö=ø]🠉Òz$B¢BžÈÛÙœ²eÒQ>t”| ¿Bzï€7OGÆ¡¨,ÅîêFÎý}Y¦à”¸&_îÓÜY»ŸµC6¿JTõ8¡d8ôÞéKÄuW›²É{(tj¸ŸùŒkBðå¢ÍÂûY3fƒð«Xß…J†Cï+±ÅT.ÅLf– ˜¹¤¨Sœë_®>7ÏŒ¾U+~SŒ)K8X|#›Ši S–̘IoÀô.‹«€‘MŠJ6Á¹&é àS\zC+~S²)KwX|Ÿlz¿–V‘ÍJl&Šéü£ÝîrV(ñÕÌ|׉]|Þ;üævû_(¾‰O&q·®ÓÓ |:r#ßµhŸ« ŽÝ/qì~Y|Ÿ 1ñi#ÝàHº·»•}àwk^\näßð“5¿äj 1Ëi£ª³_]€¯nå]|«N\>ãàÕáúÿœ (¦â&&R_>À9}ù<z€×9[b_§ñÓ¹þeðy.ôC†Œºf^”CÅÍÒû`0që²ÑCø<ñÙ&.@âðÓ¹þeðyâóC¬º†V”3›¸L(¶â¦@“šeÑÚ&5‰4©ùÀñÕb÷C}6Û(/ Hû»‡ `Á§$i¾;ýK{6]¨.Ó…JvyOS)’ÆA-ó²éÞÀOåvÙd߉:ûVOêQ23ðÃzD›üÈOŽà ü"n—vöœ³/2|Z “Ÿ_Óz ˜ÖÃæ“Ê©²_|в†N*‚ž~Ó WŠ=-tZàù&~ 3¡€a?lB¨œJóÀ§(Cü¬ñS\k6?AHCÀ?…™}PˆYAs¦5ør: Œ¹W©gêöþ øÚh€ßÌ—û†ŸøI.5ÇBŒñ™“ À—³Q`ܹÀ›‡òôŽ>ü•¼yvÂxóðv›f•LiïgíÝžaû}tè>P|1:¦Š†ø•[Ï¿:s5ßõ´½Ÿôw»mØÑ¡¯@AðŃ˜*Û7Oç÷›ï4Õ|÷Ëîêè(¶ã†’šÖ‚êì„̃àãfÒØÛm?kôô»²]wiZ‹i!k~¿»BŠmØ¡¤¦µ rzq ?üø†{ïgý$‚ž~W¶ë.M«Mï* ­¾‰5õy¿åd N¹ÛICp.z3€SšÖ¸”üøÍ~ù_éÒê™ß‡,‘Q}“pLÞƒ²*™úœùÖICp.¬3€SrÓ¸hïlXÞYU\}Î&Ò¥y·®Ñ5²šuöÙª>SpªeÙ­k4E6‰<àÖC»eây¾x÷Ù…ÔÈØkÕèšiÒ0½Nu (ü𠕘:ótÎmdl^£/¬}n#6½«;W%&ìlj9•¨Ùo²øUVã¿ò—«¦£Ãš>¨ÄšMŧ¥ùMö¼!6ûÞ½†Ì9/öÎyÐ÷`ÔP-Úàªà' MÎ ›À©#[ÊèéWÂæüîȦ.¥•M\Ä…¸ˆ{qá/44!8§LV§Î\#qÇj^qô™K]J«š\S2ª=e¦fγ¿¦³)KÏþç*I àÓÑŠõTüÀ¯¤ÅÕôTHë¡)¹†aT{ÊLÍœ5MgÃ0–¦{À®$)€Og#ÖûðCïX¶çEY.ÚÄ”™ÝÏ®­dhÆøt5é ~Ö-'»4cL™iœf¬î¦Ìñ“©‰&³ûuµ• ˆŸ0ð!?ñÖ%»¤a “iœ4¬î†Éñ“©ý§¸4—Õv`§Ð×,BÁqñô­¶-ÁWá2ôµKW¿Ñ!Õò^£Þü•©¦rf®^ØYmÓ vV½½:Z!Á?ÿ —à«JÇÕñê`UPµ¼×í¨7¥‚2Wǯê^µµ_À–àOX×é²(æeSË™ZüÚ¾?€Ã½wwø¬®‰öø]¾ÃììkÎÌæ' ÛˆŸù €Ÿ ‹gL­g~m¡ 8Ü{w‡Ïêšhø¡ã§šñ³¨pk3÷Þ‡ìB¯¦"D ž£^g©V03éK}ºúŒªiÜ"9¦¾O€Ùu¥~àW]èµ¹ JMÞæ}]\¦òÞ#ä=Þõ7UŸm„É{À¼ÃïŽG? üª ½6—¿ií.¨j«aâÃõ7 pâ®úÓžà7~àøtW}:ïÝ5ñé¿KÎvßY»3še{uÐ&OÕÓćk¢²W¼)ÇexX¬¸¹:^ð»_•«ƒ>kwßY»3Šéö¼W÷6;V3µ8ß%ÐY!ø2áŠÊsµÇõÛÑsZÜS¸ßŽ~ÓNÜ|Zœv8{g9ÃÛ¼‡D›3y÷0ð!ïñ¾æÏï쯂É{À¼Ãï~Õ Ý|Zœv¦ÅYïÍÖâ4R‹Óâû,çLÁ—êQ`Fݵˆ¬ß(-N‹Gy9} <Ýì™ç….çc›¸ÐH•M‹ï³œ3_ÊJ™g qðéTÊl$.bâèˆ;ô¼Xœ›˜.3™ à”Ø< ‚OiF!“œ›/Ã%øMKS#¦õèî¸N›ÄLܺläLFžÁ§·Ü‡qPFÑw¿êˆjÄÝÃ÷á¦ïó 6ãÏ›µÁ®j£¦ï‡ÒÝ©R}§JB.÷pOÈèû(ÍhqûÍã×E.Þ| ;TÁ›§Ïu„Þ'îáž5Ÿ\z…fê}J+Ü â–EÒ~¥rn>¿ü* ÓÉ¥W0ù Ÿ_ç¯t¨rFð+™róy’~Ø<ˆÍϯø±õ>•{ÆMz¹§ø"KÈAÀ9½‚Oz9%k&<ߜҲK¡j*Xöôš…tOðE1;=€sB:Ÿ„tJ=qô)-»ªÍö:)äT©VÉf@#clød~«¤F´W[Â~U'ü†Ÿ„Ì"`±ß|(äÀ'ûÍôæWûLûÍ%ÕŸ­¸ÚÀ›§×|9\ó q`𠻿«Ý-AŽTh¹hÙ!³ø“4 l)h—)>î29±÷¢êªÌàww掲ŽXk`Ð qÕn¶ :´ŠÜ¹ì€íðÃw ÷™7©àã&…y‡ßýª2x§ãýЛe™½ÖÀ 6Ûn*q4g2‘ÑÀ¯7{­5×최̶£—m?“Ò¬EóF¨°ÙvSJƒ‰[Ïu „57UÍ&ŽžªˆÃÙvôáï²ígÎ0¿êÙÝw3µ0Ú¡×oDO_­ØZ˜˜ÐÓ¯îq¦FX-L{×Âl·È³*ßµâ‰÷î»Ç™2H\ˆ‹¸ˆ #qGßãL™Š°2•ö.SÙîqg3PþüØLk¾7²Ó°Ûn.‘Üãúƒ4©éNïÏkEyqÝT¤’¸ˆëëÙWæÈÄnÛ±Dr땦iÞ&.@âàÓ'¹($~÷«Kh\™“]þI=žºÄFŸKQyìAO¿q‰ýÀçº39˜o€ß´WôèÚãq¬R§ö±À§ÀB~ö?ü}¬M\ˆä\?@[œëÑ·ÇŽ¯ìŸŽ…¨~ñØàœÌQ|’HçJ†ÌûÔ”]â¥ûDal|eí7Л_=6Á›ÇBCðI~ ßüºh߇®ìRݧ¢èêê*àÓäiì Qœè"ú0Úprð{Að›‚ô¿:ש« ý 'Nêj 0é Þ0Ð!½°Y(,“Û½xð{Að›z6 —>ý©«žmÓû댘Þ{h—nŸ—€êpÑ@õôÚ@¿=ä™.±Å¹~uÈK›9_Dø%Æ3 ðl~~å'?ð³*¥?8¥|Ú× YÂüÐg¹´&FÄObËz>êAÿµl=H"¦8¥“_2÷=»&9àÌ$ç?Çà†à7™ûî„ÓM{YJà€ÞÀî~¶j$‘Ó6½XM¿ä÷mzéÍ€^4°y¤7bzÙü~÷Íѱéýuc*ïþð›ö^Ð&îkzúM {/¶}™ÆïÅ5X¹—ûY/ÔîWÞ Þ7­æ½ MÜêàÓoZÍM~æg]ÁÅ5¹—û™ÉÏïÝ8°uënêTä!ø|©µdÍàÈqv'Fîõèê÷¦î›âÓÏ„&¿ö5`ÍBÖ­Mâ&nÍwTTk ȳÀ‘îN¥ ˆC—¸+uß ~¨Yw¬öÞ—¹;4ÙS|´q~½¹ü:{;˶”Šàzs_k¾ûZ3\ë…«½·_îN=ö¬ÄÏê×ióCûu~`ºdà'b~èûZóÝ×,~¾Ê¢ûè¶î#±UhS÷1Ýhçò^ØEœØÚF6âõÒ6*‚7Ô|Й§s§‚_¸Xð‹ÉU?pb#•÷*À..ÅV@²q‰ BR|:ù²qyh¢èÕÝØP#zÉ;! ÷×~iú€H-äùØT°D,úz€O=ÝÅ>ëÜÓ=Â/f8 ð›ú¿èøì—Y–ÅejS0qëê0µ)kÆžàSO·M\й§Gw°‰£këˆ8²O¨µÍ¼§÷ºÛ¤:pòFª~!³áœ29ø\¶KdÄ¥w™¥ìá'uƒ²D\z/ÈMr”†àä•RüB¥‰ˆÃÊäàs=/‘—ÞUš²‡Õ –kUöÝ ß’¼Ùe2ry'ÔÁ§j£*u|ŽË :LKCð«jöÌYùßû·"Þé+%a{’7›TF.¯àè ?üttmT¡ñ2hP- Á¯Ž®Ù3AñNú·êc+'Æ´éöJ # Jâ‚7t¦Ýl9†¬± xº¹êNh¿à ä¥Ì”loè칋Œr4Žx|Á¿`úVV¨[Y}Ÿ ¶[Áõ,)²¦%ªíTW¨Y°œYÁëTÁ~abò?ICÆei×÷©[»¥]Ïò Ÿ>yÐj˜+zóhi‡RüÂF½y˜G,˯¶=‘§±•:`äñ öÁ/äÀœ‘ÿ¾V¹Œ<øøn¨;Ö‰=9§±5à×ñ ôÁ/ô¼ˆ¤çýu{rùu ~è=£Ù>:ËÏnŸ¾»åt4ø- 6Ÿ2y¨Ò]z:—ÉCß}•r•nÂÕCöð“-g=Mõ÷ùá»kJGáêð)“‡JÕ%¡§s™<ðUvÈ•ª WÙÃ\ëç=#Úsabåv¬hÏ…é¸û383ƒñ[¿ à>:|nsáæÂŒðv‘;>qˆM\€Ä-Ë&Úƒ]:îëŒN g”†ž~á£c„삈csçѧîˆñ=w¾[6®É,#|>bVpÄ,¾øSGÌÏ®UíAð›LÞ¿°Üÿß›‚Þƒ’Eèèìxˆ÷õðhó"yt¼ÃK]C¯î*“xgµ%Ñå)¢QÞÏ´i³æå°Vö™`¿À—=Øa=ýj‡ÖÜ+ïzéJÁo´%Q¨°–÷“oÚ,m9¬¨}èÞ€è]Ó€^z½Ü>,ï¢ìJÁo´%&½¿£Wß]ïvçc}¿‘f >ß[…Jãð-fÔ³þðÔ<ÝD¯ºênÑe®ò'áún­·;„ëûµ7Sðùr,T Â^´à¬Ø^ž:‚§›àWWu.º¼YÀêøuÒOï5ûéW¡"xžå(ð¨áT¯_ŒèéÜί>Uú$’;ÿ»µË6ø“ÇÆPÉHEð<ËQáQ ˆÃM€1¢§s{ºøTA”Hîéïž/Û¸LvÙ¬¿dR m•Ì4—,SðeŽz F8ŽðE/J•,c>*º[Ù¿°BáWwëì™ù?Ñ¡æ%ÞM‘ ^6뢵E6pÙ`ø2`=$íeð²Yã=]Í€²Çb -újž=ó'ѲA7û&ËÝ€pŸÙý\p¸G¢:oèéN,G‡ûX;‚_î‹ïp_@À/±qAØ,YõX â`özÝãÚû¼ÙÝgÎÄN ¼àw àæñçàoRH¦ä%.’¤ØÞÆîö"Û1½àe0%zÁônÐ<¹èÓY[S´þìǘö—Cí¯Ï,'vß î¾Ü}+¸S§)` ^ð¯4d--îä3±ûVp÷­àî[Á9õÈóî–°,T—’ZìÑ9TRà\É?¡§_¥%äñ˜dþÀOò KdØÄDܪ•Ç%͉ bâ`Í>¡§_%äñ¸g"âЩ§.:n‰fGyá\úFøÔQ^8UœØ“wj¤Fpn~«ø—Üä~“üÀ¯—$ºDu&ïó¾®:[£óNTgóïËÀeÄ;6{WŸÃš܃xg¯)€w6¯ Ñ¥ÉñL“áÓ¼fR“'Èÿ%;‚£ù­Ûx·5:‰³¡á7'Ôüf^óü$¸n‘âFió0ï¾ØTÆ°Éæ=@Þ×x·Å;‰³·F¼³gÀ;›¹9Ë#¦e×MÞW¬KÈèYÀjCð±7±rÆÕœ3lZOÔê;Q«KT'¦rBUœÍÕüDÈ,m>v0VΟñ—úîwgu©âl~¾ýu'“éH:]ùwû¥-M)…³ MIä NïG̸‡{Ž˜¦¶¿º•[^Ý/WNðêB"Wz?¥Å=ÜsJËï§´ÉuÂ3’rbïôÎLª _=ýÆ÷Ÿª²c*a×ú Ùw­:ÓWèz3ÉïǬÉu(#xF*KlªˆÃ3èBGO¿1²5‰ ˜¸5d²ï^”Ï"./«®˜zªÎÞ‹ŠÝ«D™˜ =„Ç,%õTÅHäŽ^v¢-Ìw¿ ØCĺI™ ÌûºêŠÝ«DÖ´y« A„Ç7%Q€÷`óòbd x§oÅïåÐel9YU—Å'}ý€O;l'wØzØŸ|jjș̃T—bù¿jWø†¿ûSKuÙ_z7î À§}¸“ûp=ìÒÏ>u%äL¦;ªK× è¥oe•q±[J0…ßÒ3 àŒ¼éWZ¢¹šsøUÝ yf£üÀO.uë×~ó!‚|E†pJŸ´&š«=¼y:sß<³QЛ‡;–,ǬnîXÊžPû¡â_œ*­'Eð†ÊŒ»j?3ljÁ¯ÝWZï¾Äÿ™_MZ+ó¦f/›uÑöCÅ¿ 8UØOŠà U)wÜ~æ#Õ2‚_å'»¯°ß}uƒ#·œuúØŸóÔ»rÜaÓ¼hõ91˜úUØWÂîfsBýÀ¯vØüJKö Oüëó®†7Òœ1‚Z+èJØÒlΈà³)xÁìÑ~Ákæ^ãûq³_ª¡pøŠ‘-¤ñ°pV|ÌèLn‹äņsr }ø«YbºS¶ñ™ê 7Dn_³è z1œ«»Uo³`: e‹ ç:ÙúðW#Ãt'`!¢72×iWåÝb#4QqÙIèá ¡ø øÍh/—Á¡ùæù£ùæ|ó«ÔÃ~ó´UƒΊè»_ÍæRq9ªº&¨íÀ²q(T¿éùR=Ûr:úîxÍgæ»_i³ôlº.Y @;º@ms”C¡øMÏ n&=#¸^¤dT]â*=šîóíC0ßrÒ{ÇÌ2œ ™õ„šŽ†ŒGÉCfÓp3À¯BÆ'±ß|Hp|¸F§Ö|ðtj›ß|ÄožíÄož^ó>m‰æ÷›ÝÉÊtÑÄÞ‹Ð|îE Á‘x'(ÔŒ(Á.‰U¿±øÀ¯š}—ß[tvç:ÓúóŽáË$fpaJŽÀ;¡"à=$àà•+‚ß8 ÞÙLžf_¼ÛÞhý:sUm‡/²Xü_u…jñmRŗɳç묗Ûc½àuê)xÁ,ׂL¯ÍâÛ‹Š/“WÌ QKšÖ÷©§c.Z–dØ©Vcžzª¶V#¡µŸ~3õT+*p¦GMwãyˆ0Åq‘ÚšüÄOù‰˜,¶˜‡›ÚüÄOèðé7ÃMm~B#{Ét7ćˆŸjW޳©aàã‰ïÁZ'ði›©dü4× Ó|’0F¶’Ô|™ðæ;ñi5d1lV`¸A ðMÞä= ¼GÈ{@¼ÿŠËæjò0ïð»ß¥È›ïÄ×Îfs=Ë~é›-¤¶R¤‘NÎÚ‘[{@mÎ¥ÞÀÉœJEðq¢vÆH]}#„Ô–d4ÒKY;²[¨{À¹½8™y©~£.4ùù儞ž³žÉ¥ik€ßÌ1HÏპN€"øMŠ#=®ûZòM ²‰ÃÍ” Âo&¤çpBAO'#Cü&G‘×=0ù&¥ø^ùÚœP“éB’zçv¬];VŠg—!üFM<À¯".ºÔøÉÖj,Z'@o ¢&½Ó‹á7 Æe†ðÉ2 —ŽËèRãÛô~-‡¦$ïJ«Íy3™ZÂNI§ž"ð÷YPE7“¸¼ÈøUðûæþ$sî®Ñ+ïJ«ÍqÕ¤7vôG:µ©ÞfAu\ô²žá€^:ø}slz¿–¢VRÓိ&ßÜŸ¤gƒ —Nž¤®AÐIÏ,ûÂo„ZéLu—7“¸ lA/ùFò$=›ᇿ™ÎD+¿ötué¼Ò™ê$.Ýk LËQ2â’yÚ¼_v¿ÉǦäªg$sZŽ4Òƒk€ßäc?ð»Ón2Ó®ë5ÌÔQ2.“yÚEô†Þé¥Ó®€^¶bÒ0½ð»_¥]½ô~™ìÎñ%²«s<Ù“wŠÂjJði[l¶¡Ð÷dN `´¢ÕH7Àaë*õêî¢7[ôÖõÈ–]ãÉžƒè ½Ò½a¤7bz‘Îe¤7bzÙ†7@/Û9襣7›{ï³dšŠk&u2}^2;“:Ÿ—ŸµwƒêTk# àÔ]5-rÕä„“Š«‹6_j¸¸fR›¼‡ÌΤNÀçð¾ú[Û¼oj. àÔa9-bÙ䛣“Š« 6_fÙöyv·®h~e`ü/8jãÛžvëûi·Rð«Ôp݈çÞÅ élŽÎÚ›la÷áŠæWÆÓ$.Dv’MªïçØJÁ¯’¾u#Ê{W¤zØÅ´l¶ÚHr‡möù˜ÝaÈ'}ùÒS1ÀÇ6“øUã_j¾¶ù²ÁÚHmQ¤w]\Í>³iY' #_7lzC&» ½lwaj¾´ù²ÁÚ/û{nj½Ýö_ªPk[œÑ>¬mïœÓ €ÏZ[v·ö @JݽªÄö÷ÜÔ.z»mòT¡T·8¥XÚÞ½X(>KuÙ=Ý7~)u_ôv¦›S)É©ÐùT¹ôdG®†»±øT1M… ¿~3öq€÷‹Ónö)—Lâ&nYùT¹ôdG~…»±&q‡á7cqìi7û”K9¾ß/wËÆžŸÔÉZN¶ç'¥ÆÕrò™MŒä†à ²Y#ï_Õà7µœÞ/öË ½IoÀô®‹Ë“ÔÉZŽMo@ô®µœ|f3Ò!½Ñz#¦—ë¸ ë÷ýÒ¤÷—R>Ë‘Ï~lsBu€“>ûÀ©Jì2íp€s>ûèÃOIßÚÈíV\¶ÝùФf9Çf9òÙ‰‹˜¸Ï~pªÆºL;ÄaŸ}ô᧬-$n qùnçC›Em”íyD‘Ý/ÕîE#ÕFYÏ”¾á ìF+˜õÄÅô+®ñNŒ3jÌw7zшýR'›ÞÙýRí–3R“”õLé+ÞPXo´‚€^ä6×_bRc¾»ÑrFì—ÊøåäôžÛ:±—lKùåHð«ôè¿1ÎÎ>ÃûÕðê~YÎØ¯. W¤øUê¼:Öù:ûk²íXƒé¾þJÀ§kŠJ@ÒU'Û¹À¹Cž€§sW´E_ž³oÏȾ;VfFSÚôh88Ð!½Ðd ¬|Úô¥Î<»¢=èÕÝíÙwÇÊÌÊl+/¾Øœ¤©¸) º>àSøTQPôtîŽ%>UØI+¹øRšÄd%ÝÃOŒç×Ô‰Í{`Sš¦âòÞ#ä=@Þ×;V9¼¢ €O¥vK.¾Œ(1YI÷ð“‰òkNÅTÜh!7Ù¶Û)¨ý¹ €ßmxÕwFôÍ6Êöl£¥Œl¾à€_ðJ¯í—ƒ^p¨àw[Nõ$}Ó…²=]hñ›Ê„_ή Ö]A—[N;ìI*~uIj.ÍX>œ.Ô—¥M8ÖìêX‡Ó…RO'›Š ‚_ݱšKô•ÏnÝíášØK9’)ëüÅ·u61²‡ŸdšÖ}Í­âÂH\„Äá)g© ø¸«Bâz:%@Ö5¬‹oW%|^d?Èí–µžQß'yf\àKÃN@Å|oó}€;,×£rˆ.}xŧyùÀ¯Æµ—ʈu/³RêÙ #Y~ª¸ÚªO'cÓûí)7-}¯–íNzÚâ%?ÖD<€/9Bpz,>åÇÕ±Ë ð®üÊh€ßTÚ«2òQ{u!+í`ul:Ä3€£ÌÍšíð%C ήÀ§ %\ð»_™xÕÁÖÀê ;”ѨÖô~óœ"cNœV0NI¹ÄOMGG_iÁ¯öÞäÈR-Q–B°ýæ|óᯠàÓæ©\N¼yt¨ß|ÄožÞ“kVJ=uTYnLÙ¥L«Ùv­Läi7ŸMAYækð6fZÉb[â” ".Bøéå¿éðßm·ù$`ÿ¬‡%`³K²f.›€— †SCTð‡oc—¬‚e2ø¹ˆ~c¦ – ýk“}ûp>ë»ŠË µ¼ŸÎǬmM>ý\$å.ÇöФÉËq9š˜–*úîpƒÞ왜eõªåýä;æckBð)âÀ›ÿµÃÚc‹à›_W]9f6¾ùˆß<½æç-£ºªé‚’Ø)¸ tpªl ÁaçSbž~·I½ÏÚ™¨TŸ‰J5õ(q1Q1ù ‰óW‰ à'´„à°ó)1O¿Û ÞÇ íøœX#'Œð;þünÿ1]Eò’×¶ùÁûÏÀO„üÄÏê. øÁBûàsþŒ$ ø¡ã'ùöÓ×£.yíf*/$£‰ƒyÎ,·Óa4ÚMè4˦Îu©%Ÿ*¦1’á—]JÅæ“N´|vcZd|&ïñFÞ#ækµ8ð;‰"–éQ€wܾ–|ª×BÞ×ÀÊ. bóiZ>̪ÏFV L¿iäyÓœ~£›®ÔàŒMó¯óf9ÜnчŸ 4Éé7Í7ý¦I'âbXˆ <ˆšãktÓoœry^¢åpF~vÖ$Ç×4ßøšvæòçl2ï°¦òâû•ª7[yQ¢JCp¸E&æéWÊ‹V}’º¹á½»<ÃO"n=ºš’ LܺllI .ŒÄEL\PrÍû$­úR'usõ{wyÄÁˆ[Ï´¶VcªTÌ›TpÊ:a½ÎËYÔÄ­¹šGøUNÅg=ÒLg YË–d ~ÂÀO„ü`ïƒõNx8U'¡Õ< ø¡÷"Ÿs‰ÉÏ—Æ%~º¹cu!w¬þÞ{:‡_ðÉÖn£øÒe\UëGuà1_¾ÀoÜâøÍ(üJjØ(ç“Þ€é]×Pï=£·øäç ºdt™‰èEeä_åߌ@/;/ÐKG/å\Ò×T‘n:—ÔöpÃæús4Ud•æ÷Ç5U¤›Î%qTëíN»üfªH?Ä“—”ŒI?UÄ$.@âÖYu6qpªÈH\ÄıSELâ&~÷«©"ý9Ë©´9§Òã»6xãõØãÙT‘¥Ÿ¤Çw©ánÑútøU®GFød¿à_ð"ʳ_0 ²´€Hm÷É;À f÷ŒåR·U%sYÁ.hp}`ú/» k™]ÄÖŒà À®ˆÝåì¾Ö üæ¾ö wdmâ$n]‚FÒ¦² º¯ÙÕmÍÞ@`íªÛýÌG$4¿¹ÈâØ¬`·B*yÇêzè\¼¡§ïBFÏLÂ…Lb¾û•#w÷Y|ter‡6½¡’w¬®‡öÂÁzú.°ổ@ \P`%æ»_ùvwŸG‡Iï¯ cOïÆÝ~iNÒÑD í;˜¤#`V‚ðJþ»ªy7E+y¼gDa¾;ÖŒ ~ãÒÏBÒzMï™ËÝvkÎÈÁ¼¯q fäÞC‚ðJþ»ª¹É{À¼Ãh…‚ßø“ôC’e†DÏ.•f϶ç%{>ÎgÓÈÂÑ~¹›FÞ‡ç,“³øÕfŸ]E÷ž]VÐ=S×ÓìÒˆš«#àÕáÔÌr…p´Ýîf–÷ÃÙ;Ëä,°:è³BvUö{v9IÛ«ã×ݺøÎ Åö6ʰÁ"8eܰ˜‘õr舾û<3³‘g…âjÊûÀ¯v½¸v6ïüY¡ØæD6nD§ !“MÀ;vùSŸ‡i6ò¬P\Í~€wú¬P\ »NLþÙÅ{5si™½Ô³\ZN>ŠŠžF&êY.­£ï~wVð‰•zuõðöÊ_;1wh÷«PÍ„]foõ,a—‚Ê%¸:àÓ¹„]Gßýî¬àSDõêê ¶WǯÚms)/xy¹E¯NLø%5ìíð¬|ò Žl^¡¹„ݧ›úÀïŽÍ—“lÔ5¥¹t`q…’pfdÆ*‡‹ H€O¶Ã‘M^4—l¤ûD_`qÑç™æËˆ6ê–C¸õÈøÓ“ €O.¦:¤¶–ë€Ï§]o9ÝWég§žÅšo€_zºïØÒ™6òNxúŒ~ 7Bz 7ŒôFHo@ôþºÌt_9¤Ÿ[½º»cK÷;ú[úŸ•ÛYfêŸÂoúŠ#|.H€åÜÎ5ÂÇð+„óÏ çÆ…<Šà§ÓJÿ†d B_Þ|¼Î-ðŒ´ÅþÙ]à?ýÝWpŸ¶?Ïð©ÿ²ýX üôº7ÃÛŸÿ†ôŠy ŸnLÓ¶8õIŽðy[LÁv*^KNçˆ_ìÏ_…i üt†ä Ÿµœ‘\÷æ,Ã=a­¾°6m=¢Â‚QBpÊÐ^àÓ9A•8gÊÁOU3üø&ö7ÜÃ{zßHw¼'döZ(\àó> œÉU¼!åxŸ¿• Ÿyo`jx„ðSaÀ ¿ã=ùxÏ×öÀ |Ýëóîb²À™¶ê/-èéܵø´ËCþPgßuÞlã{ÍþßpïÅ÷;o÷dÝ÷´Îß~W®MjgøÖc'O¤¾ûqe†ßß Eo}wÚ}E»–Só{-g/7¯"ϾXó¿f5f8—Õ¨èéw§óûbÌßp‚ÞöNïîW» ©ÕŽàÓµ÷!¯½íìÚ›+‚§~Úû¯¶îសÝþ¾ÝîžÞßk¬ £Nm·ë÷°Cµd¿úÝì×ÞÃßù‰D>iXÑžž>%ì2ŸYä®?ñy5ÒÝÅe|Ž®?:«4Gxº8Ç~àÇ•¤¿á½v?ÖWåÂo€“ÉêóÞ/·À©m1vŸÂ$s·Ûx4üÏ’Gßýêv;ÀoËÑ—óŠTÎ+ŠëLíf²žÉà—ÃCSAði:1Ìo†3Áÿç0Öü&ý_Ý£/çÕuŽfΫvèÚ#€×¹LImÊQÏNS ¯ÂZ¯m#føÝ¾Rô¦³©y:Ÿ78Ô¦TœLŽ ±ÈmÊÉÇOºž ö7ÜXù]Q8¦ ç^´kD›ê\4âóÓ7×ȘßÓz»Ÿ´|Ý_þ7œxÁv'‘÷ÀhfqêÓ¹k~,g;V‚ð«ãj9”lvO÷ÀX|‘Qß»hw¿Iõ°zú §WtÐé)¡§sé7ð‰ŸLVOc½v¯ýî!ζû"kѧ§ù!7“öÚ©§_ÝÀc»•ò7Üóæ}©“xš:™T€#|9„‡·9¢ œ(€Ï†Ï‰+1}àw·'*u"¶}“’{ÑçJþ­8WQ¨èéÜOZð‘Ÿ>º½ï~Òx¾¸þˆ/u"TêDâ» drÍ[ÞÈ}hïHÞ.$b v¤’Œ~ó»)Ñ•¹*y!Ä<£Í‰B@öA…ÊM‰¼Þrâ&½#¶d&³üÜCZà7—Xñe ÒQn_µÍ —u=´0R_ävÔ^ÎüXâ“ü´ub·›Ÿ]ŸâF’ë<#¦âFð`æ(Îxã§s¥ õç<]Ï_ZàWëËjˆÕ˜ÊÓ‹½ €×YÙL‰%ÚÄ¿©žJö½yŸhEÊ{>i°g¢•¯¿ŠøDœpb%9­ øHo}H±’—ÚH|驇F“Ëñ éI€~óK«ël£¾~*×¾š |ú=Æó­€OY8:¤¡§ß¤75¢ TÀª/=£Ñu4Òèã]Ž:×V‘j¤‚_Ú†àÜÝàÜý}9˜©¸vXWZ[…âLJdr'T_ÑJ|ÔίR= gMº±U]’>õ%H4¹d9j&HR, Ô¶9ÕÖm(û›”\§?M®RÛ~UÐDñcçA"yW³u(¥X À H@?i~ÓB¢Ù–ª³«#ûv,_ëú²0z?‰sGL…S–DœËýÞrŠK» ÅÕ5’÷âºZ¨/ £ÕU"ÒzÖ¤¹\æµ¾kvo¾š;ÖC6m 𫈫®žR]=Ú®Íz8Ô–ì~P›ËRA›ËRAm­ÑKvWÊùÀ⧻º´6ÕA8U©[ôázo4ù«yÏ~£W_R$=®æöd&EbƒmÁ¹‘‚à“ŒU9âÒƒ,@^ü¦^”W‰5ùr*)ºJëÉÌ©hÏ\·]ЍÙ5 ¯RçšÛ3€ÏÞ‰Û/StT>𫆎äË©$9,7-O9•ÈÝÙÐÂTîΞä°ËòAð›œÊ¿¹·&Ÿ&©KC˜ôý‡zDà„è¯PÒ³-²Aø˜e€ß”’/W“ÒûÕb‰%_Df•nm8÷æ5#øMÝ ùR=)¹®‰Êդ쒭§|Øo°ì„ùÈë×&»Ä¹)Û’¤NÒ›]W‹D5ò¤r´c}éò£:qJ¢©Ø4t{ÇÂð‘†iè$[¯~~Å~ÅwRñ¥dRu)šRµËµ™ëKÕÕN’|9•T]9îäS¶¤æª.$3ÙR3é“j: ŒKjæ 7{gŸ7«°%'¿1aLêæ³°g&qÒ#œÁaêg‡‹†0õCÞчçÆ_.ÅâÔ}'ÔîªZ$_(?.AT¶s@µrWÊüœÅûòCŸÃ2½8gl¹$ï²OW“}9 ìËåèŠ÷|êS¬èéÓðšÂU«r<œL‘|:%²f’}>ÅÙ—ʾP“ÁîÆ“M32YŸQ _—R[¶SH‰”}d94¿IÖg_(Û‚›HöÅdb‰Sä_I%ë³zN §Sô÷rð›dý~uÓÍ”Köµ=åô>‘t™¤àT‘siãà7†³9Ùé¨Â©øMN>ûŒ†³¯k*g—eeÎöùKIÞó‘0y=wçÃQ²éAðeqöéuryÏým®ª¹œu „ßôpär¶•%Eð›jHöå–²/9”ëqÕ·Ùú²êÎLbVæ\ÏÚÝROç¶2MžnB¦ú¶2J¯“›K—Í’è#Þn6_{RöyÁd_'wW9#wd?ÏÜ»Ú2‚ß8Âå~(è¿úEì¯Ëf{ˆð%qÊãtÛžWàá1*€‚ŽŸ»¦ ç ûYüæp_|ÝMÅ—…)Ñ•m/ñ°s»+€OÄ)I\<ÛÊô᯶²âkO*¾4J×u­2Bé³àÔdQâ9Ô¤ €Oô²c¾Š¸&ª=©ØÙ’N¶=³5ËÀ¯NÅ':)é=Å·ÙÊÊáÐ!Q‡ç¯‡yú´[ y|+> ”â»Ì—ì/Rò¡ âƒàÈ8t»únãÅgìZ(=H±îìÞ»_û€‹çiGi( T-–öýR\ÝÀÅÏ3vøl#ã½ÇF¨WwÕ:W¨ñ<…¸Ùï ú ú ú€º[p·fÏ &s¹¥úzúMsaivótçÊvÅçòZ|­4…j¥)¶ £“Ùàb_àñع¹‡°Øf® ôÊ’Î-ýÞàSUö!íIŠÏž¤øTÅw¯« PmFÁ¼£§s^zú;V{ŒÉû~E\õ]à+q_FhxÑÝ`GU€ou€ßøƒÖèÚ/«ï^}7ðjÞÀS†GÁ|±±‚KSC=¥\|¤·))Pàð(ø0ð«°Røª®«TÕSæàŒ‹ÂÚò2À¹_Dôág—WÒEa€ßì„Õ—}¨§-/Op®åe."ÔÖ—%qS}ceª¯å¥úZ^*ÕòRíÅtFÜ5ÌEßÐ[üÆåµžN6FðÕ – ¬ìRŠ ð›+t¥2$µ¼û¥í~7m/Ø]HðE¦OåMk9lX{üF 7À¯ÂJqÔêrªfgK½׳™E­g¥ºu_;!ü¥}x¼1õýw÷lLÍw`l.›ŠÚ½z!œP*€sµ´¢ÕwË×íѧj¨fRD•>[ûa‘T*€SÝÏ‹D®ö³ƒõ'­»Š¤Õ—Õ¨¾¬F{\]|í9Õ´¢§/’rj/jË«™YÉ"ióÍ®iÔìšfö€H!«)ÍVà;–'ºŸº¹üÆ7¾Ù= Oá®ÐÍ×Ò|s{5ú¦‰™LΨþÌW©NÓKNÍo]NúM\Wè&®azͧQhTŠ£é‘ÅíwÀ¹É`KøÎ×-ðé7’¦HíÊñ£>~¨–Œ2d«T³[2° Cœz¯ÞÀ‡ßµÈµdw<³ñ“Þ3ËßýœZ/ε,ç_å¹Zvµ®6_ãF#ÆÝìâÒ6Z­Ø¾¬øÔºšÀïfôt®uµø”ùï<¶”wâ~—T†¤Õ÷9Rc\.Uèv˜âXîk­ºrHÍgÞÑ|)ŽÖÞ“K»ÕA¤86òf«Côáš[ó(LuˆTp ÿÖfŠã{ÖU`Lš/ÅÑúÑ^¤mNï4䊬4+‚#Éæv/:³Ïˆ¥ ø›~óå(ºÏµƒa2gBf½ÄvBy‘˜§_)¢>ð+Á[§rÝÎQdRÓ£}–’Ÿx¦…^üˆz<ؤ¾:[rôúr=¾oeÔ›¿Ê`u*ÅÑÅ¥èò~ÌœËég¿±žîgnq™ Õwn?TŠ£ë{Cân ™*Ž\ÎUª+ùw¡®È‹†:tµgaÃÏ»ºŠeø]øQ’žÞÏ›ãiª-K¤8~Þ×{Š£'4ƒ‹JvÛu¢W’_Š£û:Mzv9÷ìoݳ-r{È_®|òËõSkðŸ½~#Òé¾äE/®a½¼·ÞtHôòîl™™§_)>?ð»#•>è>ëÐ^'þ €_%Öº¯¥ïZPÞ˽ݗ}èÍe%ØÍìCÂ]èÚœR–Õ†ž~#bïfö!"vyùîž7o*$æJìîéýlGoã˜Ô¦ô~&*ªÁoÜ7øMFô¿;fu‚Þü<ž¨#|Ü3—£á³-8¥IGð‹´ÞŸ/3\Â{„çs~~à?ñ}Oßüì<Â3( ¬C2œqqX*}œ ¿Ú+‚_˜ Žð~ÃO¤ø‘Ã&ÔœkÒYàppI«~õ‚]ƒKFø?Bñz=:ˆŸÙRk„sB•˜œ¡w™ñ<Â/æ ð9KÀIÒGx¾¡W=Šöøý±%?é̤c6ráÜÆT¼:ãvc²ÓEIâ\¦•#ü*.Å+É0Â9ámŽNy’jO'!üÂVj„_Œú{«xz|Fø˜vê»IAÙ»€ì›œûA->[r#ã²ø~]6?p‚ÞêqAá“® ;;€3S‹Ì¿háàó¡IÉû@õÑ[}qÙÞ7¼ÝÓAIYÛ”œ+ó£§s÷ôu·ÞMG!"£Q/ØL„äÂFF7ËO5Ÿü2Õq0À©‹‚äÁõæDÑ}' *“O½v„O¶yœ¤v„s,‚£zÓ¦ê1À9Éæá7÷Àèš6òwüðEÛ&£?|ÑTq”Qõ¸åÝRqüyš2“2‚#[©-ïñ`ªÔw™}÷«ƒhtÙdþÀ=¼Ë{1f·h™¨€2eFðåg—Úð¢nxÁ/”¤?pÏ›W%ð‡¿´¸Ïx„W2›3bÔ³°e¿ õá~àâÒQWPœ5#œyóëí)žùglàéf“J¾7Ÿ|o>ŽÇÖ¿|N& SšáÓéBÉ«|hÆÜüЏì±?ÿ{ˆ+Gç û'óÇÀ—½(˜®yOBO¿(<𹑎kÔá7iÈèjùôVD{„Oó$25ïc„só>=ý¦üë{y€úî7}’?p‚;«‘;—Æà°«hG8Ú3¶¿›Íw­r à7Ѝ8ÁO÷ŸŒð ‘ô_ שá_º‘¹øéös2»ï@âêMÉòY©­¿\òY©-R¶~³1Éónb·Yuòx¼)GøMºC|éqõácý%“‚‰gi.g¦Þ¯m‰G†7Z*‚ßD%zä\ü*["¾l‰ˆKç%bŸvÉì¨ÈáuBð©[‚L¶Èa7˃>ü p€_•í„’¹ˆºª?b§dz£†Œp8Òd“Å”³¬²ÔžÄ§S×Ö8Á17eÇO²[ ±5_pÊrvAI:‹ŸÜü&Y)É%w_âF€¥)yA{ìJÌäïæ¡ˆÂ§·ù÷‹Ë|4öN%!øÕïfö³|y)ï»Úœ¶¾ºr–¤–Šà‹-A@N~s3‘â{óõÝiÇ;p1-ä·"2*Ó*Ę˜‡yúl-Æueð+âªï¤Bet¤½—íæ£Fp*e¶äc¥ ¦ûƒàW7_FGšKF!TFGúû†—7ÐAú jÎ jýŠèé#½“~l¬‡·á7 ;é>z»K?&¾„>ç«~1çu„_x·ð GÇ>ïª\;ý¿É„+Õ¤ÑuUÛ¬¤²üÄ3Áôìè8Â/¦s ðˆz#õݯnxJ5©¼7jÉ´¯5×y÷ ÄPÑž‘$c>Ï€3uƸÚU<~Æ|:õŒ¶j»‹‚úÔ,ª®„ªê{'B¦à”çrÒW}õnßþðÙÓ`*yÞTŸšE]>"?p‚Þäªðjz7EÀÃ~F83Õpm4ÑÑ3 Âod»êkRªHÍF Lö—ðÉ :kðIV­œ¬Zóá=]üFL¦¾F õeHÔœ—û»iÏË­ÂeÆø|lA.3Áúðy:•û„8*mÏ3®q»?pï>ÉŒÖ÷AÔxdƧ,X—Žg­gR¶®~E\õ¸æð«í¶úŽÁTzGÛ»^n·6ÁaRÔ­ •«²ÞðéGŸlÛUÓ¨¥ÄN}÷›y,üî4Ee‡Ôž—ó°»5ìàgq³ÐÃ.¦y&鿊Þîª3ª¯ J©&¨ô¸6åd7Aõ‡šÀ7Âë,[ Äçεo¢UAÔw¿*W¥Ç¥I®¡s^\*±)vg‘S †u¢ž~S‘K™â§¸4—Éž„ÏÚ³æ2•³³öÒ– \bVÐYìµ¢¸×›³¶ÏH'ù`É´ÈÑHJ©S=³ÓÁ¹Æó à”„>ÆŽà‚Â:1ßýJ!‘|;ɧoJT,µ÷ÆšÝg´Š¡ ÷z…><ì~é(¥æ™Põ÷Ä%t”Q«îý´U785x±zLgNÅ#‚_í—Ýw öI²kNÒŸ4ÖdKSÎ=²zToHÓ™§sÞEð6Àoxà7ñž}­l9¾k¬§i|sJ&ÇwÍËŽ¸ˆ®§ÔOeŽöÕbè„›¯Yü&™œ£ë—6ûòIY\]¿YlzaSDFð‚¤R‹6À‘Ät§EËbWöÉv€ßüÒ~àW ‡Lå“21YiG¯™OR!›º³þ ‚·9™LUö³þ£÷{ìó÷ÉÉuöÌ S„èéT—Ùb̔ӡˆ0ø4%cœ9©ï~3)r€_]-2%•ÊvB(“¾[9¿›•l<ˆr>ký^nŽ9#(îg7ÛF†,½ÙÕòŸ³KyñßýjSé¨l§£$’«£¸¬8r9›W¸Xqäbg5„šó2ÀÉ©_‚_ýjïÒQ½”SQmqì™Ëv*ê™w8Â9{ÓŠàÓ°R%ƒ¿"k>.ø«+Ÿ«gXéܳ§7û0ÖIÞÛ»~yÇ{;ì¬w, ¨ê$ïÍ6 ë$ïÍ%¯ÍÍÇ»/›•ûá`™¹a'÷“éÏ¿ŠGœ+Û%Ÿ‹<ì%É5wk€ßm·”Òª<®ÃXƒ³È¶‘ò þÿÀø/_Ú¨¸†{ð›äEñeŠ-‚šfò숋‚Ïç$ÔÛ|Ê6f®œ^¢Ý_^¸¸,Ñu .¾¬S_ÄÉá H|i¤£ÊéEÞ 3óá±1€Pp½!Î×aW|æDå0!´ôP;!Ô ùæÕÎûg¢.ýXñuØ_>©$ó§2’jâÝ77­%!zA>©£§ß O+f>)RÌ_ˆ|ÒÃÀ¯ÌâŠOyT²Ë­ª˜‰¦\È‚\AÄ‘Ç „/ÙF*\ÎÌ®eIsŸp©dï¾–¾R\#TJ9›|±ÿLóN)‡#ˆÀ)aŒT¿âÝgv]¨R©®TB³½Ø“o=Ó#*„OF¤±œéžtÉ–ê£××zW(åQiï›?í¬£v½™´×cÖ–Ÿvè5WüF>ÀoÚ3Š/ÕSúûHÅ݇ïG)¾UBRú¡ãYGpä@±å½m·ñQ¿ŠK_¦¨P™¢ äMd澞:+IpÊ0MÑÓÉã„ßÄe}\ןüŠÞJ5ÕÕè:,W3Ÿ”pÑýQŸ6ÏÆµ,×h«~ɼBõ9j×è2°¨¾|R•£iH«íp•S½¨øM·ÊÙïæbÈUÅõ»Y}*¦êS1UJÅTÕ%R«¶ŠééÜ€„ªg†vK»iU×€„jú:åTɰöµµUª­­¦#£É_¿\ DY¢*Ò5!»êØRÓáÀÍ‚àWÛbrW«/;Tóûø¿%VÍïfñmÃûY~&.^æ•ÈÏìv,Ÿ¨ú„@•Õâj®¶(Ãk~CpN)"Þæ; wž1ûÒ„íàWçŸqvõõ¥U[!”+y­öXÎÂõ¿Ôún!¹QpÕþ´%ûP}ù™ž/²õµº²¶Õ§ª ã¬q}Oµ!Ñ=â=8uÐ)<2SêT®v$âN@ qS€oÃ2Z¯ú7üêäkXkÏûÑuóôf»,Eáú_Ús&!Y¬Ûc³ÈŒA{Ìzx%%$íqÝ›OûÓÀð´ÂIàïd¤É>]ý·E¶ˆ:ó͈«‹Gz{w0ÚíqÍg¢Ý(í&G–Òçͤº`'ðÉ„¥d|zG[Ù3×Ýlø8¢à6°|SÊ>ð«ÖúæS5}ŸN·©7¤B¥+oèµûMҳ惬~³6uu¶4ŸB¨¥C•ò|ªÐ5ÀoÌ…ZB-Ö\Ä%ß›O.šFµŒµìRt4{|™’%å–Å®ŠàËHMz©àj¾±õ-»œß•êiå}¿Ü¸Ÿ·rhݶ„ß™dæ»oÀoRq¼Þœ$}Š›F)nšÏ+»Utç~]ëÑЖ5“×êY+ôÒBÒ|^Ù­ºz Zõ…¥¸iDæe÷Û{£ü¦‚ØG¡-™ðv¦¸‘Þ\nøñe^š/óÒº+EÞºm`¡\;u×pÈÖ‡‚<~uÞô­o¾ÌK'º®6{F©]Ê‹¸·?GÓéÖI?ÓÒDEþЏî›zß}Sï»/qÓíÄMï\Æ­ÛÓÏôáÆcõw‘Í.`{< ØÅøºGᆭ­üÊÙ¢SyŸ..‹Û.‡ç¤y#írÖh’<¬HC8´T\¦<œänîâÚ‡»/ïÓÕÕ‹Ùõݘ|SéúZÙ™˜~àW&¦ü¦ ¶û7ÝlíR¶„ÑÊËfPD·ó>©€îôåâÙÒÇ„à0â óݯ®JÜt;q“ØÈ8;¯>—¸jñ¨ívâ¦ÁLxðÉ\¸ —Ù—Ù÷‹èkÁêÅ5`g€3-—«j±Û ¡ŒvÂe®Y/‡-—à³Ô£“¼WËå~wСB½N?¯Ào®üœ³XK>Wö ÉOuÙ±t_U§2:½¹½jç‚ß´ÈõfnžKo³ád’Þ÷ªí=£ùè¥Æ—us|ÙÈs´ËÓÏòûi?|ð:ßFìCÓ2ý¬÷CÇÿàÓp»Q¼°]>KŸüª<Ý]Y§ò<žùI#œóà‚pª~¾_Žð‹¾èNÍÜ‹‚>üÍÀ€~Q$ýôÆ÷³¶lb&—æ Æyó‚4#87§=tNDOÇô¶ý«óÄ%ð¡~ȸ”Cåë4i„YÁ/™}i8w‰Í Á¯K<»õÜCœ™÷ùžQÃEœ™÷I3šáKŸ qúúƒºQ ð¹EA©t„§âÔsËùô&êd„ô*ûƒšÎ:PÂÇÓT‡Ežà”("? Á¯Âšè {øÍ!üN¬Ð?V©Cøgáq.Žpî>ÕnG8Ó½¶˜œp®”чǫcüÙ÷«]íÂË1„_L á9ɸ‡÷ú>Ó}–U €sBËv[“ŠÀ§¬FŒ$qõ5™¼ýA­¾ÔJñÓ<*³Ç>ìâYDgn»µ“V“¢£3~^l·=}]LZb€ßÑÛ(z»§T7—!Í6?¹#x6ÉÏY›XI Á!?‰zz¹ùÝì¾Ã2cT¢kúÙwU|Rç Þ‚£Ö‰5.mø<Â;q?Î\ÏÄ#üfW.IS‰ñ÷ÝÓͬS#ÝÞF8eŸ±$c´Ä™Ë:Åx¤=ͳçØ¿ùUˆï³×„zóW¿ 1R«CŽ.I¿b*¢ÛË'Ÿu’(åÜ|Ø34j¸ðAëüUOý„_ý*ø2cQßÝÄv»zt*‚S©“e·Ž¶ ªÊry€Ï™1–w—Õö¿â]}¼'W‰)Ú£Ûjæ²1)Ò×x?Ý&Ñšßòž<º‚~SbŠTÎ+f3áìQ§~æ—‡=–"käŠàHµ;ÃÇ|fõп¹cE—gҜৼ÷±î‚¿¼OíÞ\¡#òLR*µ‹-šdé-g@µ øÕa¬ø~µ‹ÇzçîùÕ®ï~Ø›u„CϤ6§JübHÓŸ¯af ÂÓÍ1Ë—‹Tf,6W!*¶ÃY?‚à”³²*‚/®\X7Hz„ ªc%êéå†^*3»Þþž:™K À»€’"6œs<‚àŸÌ|÷»Ó®OP%¾œ—<§}ÑÀíz=•CKìž\ïÔw¿1PàW?»B ª$É,=ıöTªk„Oq™À®º”äHõg¯/éMÌw¿Òåˆ/7%TnJ\ƒØF87^œô xCEìÎ<4ûé~ü;ßm‚^¡èU½ú>Hz0àÄàÒÕ}„ßœ‰Eí31ge¿É,‹/‡$é¸ñuѵÉñ¸6ôtÊLf‘CÊ©—‚OÄ5x™ðtC\òg7ûI%#.Ûs·¸ÁL#œüSœ“C"ø|ÚU’8W·ÞÜC\y7€ÙHÙ8ÕO—€-®Ú­{'$•r80MЇŸé­ÜýEÞÝŸ¶¼ûò>R]J8©ï}ë›êœÔCÞ ‚#“‘ÑÅõk€O ܥÙüÂVm„_ÅûÕö¿ÿÿãŸÿé?ýÛÿüÇ¿þùÿ‡ÿùßÃúÇ¿þ§ÿ¿þû|ÿUYAøyâò¯"õ¯d½á¿%ÔßRêo)õ·õ·õ·2õ·2õ· õ· õ·*õ·*õ·õ·õ·:õ·:ó·¦kø·Þÿ•,7ÍߢÖ}¤Ö}¤Ö}¤Ö}¤Ö}¤Ö}¤Ö}¤Ö}¤Ö}¤Ö}¤Ö}¤Ö}¤Ö}¤Ö}¤Ö}¤Ö}¤Ö½Pë^¨u/ÔºjÝ µî…Z÷B­{¡Ö½Pë^¨u/ÔºjÝ µî…Z÷B­{¡Ö½Pë^¨u/ÔºjÝ+µî•Z÷J­{¥Ö½Rë^©u¯ÔºWjÝ+µî•Z÷J­{¥Ö½Rë^©u¯ÔºWjÝ+µî•Z÷J­{¥Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¢Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¦Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¡Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}¥Ö}£Ö}£Ö}£Ö}£Ö}£Ö}£Ö}£Ö}£Ö}£Ö}£Ö}£Ö}£Ö}£Ö}£Ö}£Ö}£Ö}£Ö}£Ö}£Ö}£Ö}§Ö}§Ö}§Ö}§Ö}§Ö}§Ö}§Ö}§Ö}§Ö}§Ö}§Ö}§Ö}§Ö}§Ö}§Ö}§Ö}§Ö}§Ö}§Ö}gÖ}|˜uOü«Ÿ¿©¿©¿%Ôßêo)õ·”ú[‰ú[‰ú[™ú[™ú[…ú[…ú[•ú[•ú[ú[ú[ú[Ôº§êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©zm¤êµ‘ª×Fª^©z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­PõZ¡êµBÕk…ª× U¯ª^+T½V¨z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½V©z­RõZ¥êµJÕk•ª×*U¯Uª^«T½–ûWi®Ä*úW‘úWBý+¥þU¢þU¦þU¡þU¥þU£þUgþU¤Þ}¤Þ}¤Þ}¤Þ}¤Þ}¤Þ}¤Þ}¤Þ}¤Þ}¤Þ½Pï^¨w/Ô»êÝ õî…z÷B½{¡Þ½Pï^¨w¯Ô»WêÝ+õî•z÷J½{¥Þ½Rï^©w¯Ô»WêÝ'êÝ'êÝ'êÝ'êÝ'êÝ'êÝ'êÝ'êÝ'êÝ'êÝgêÝgêÝgêÝgêÝgêÝgêÝgêÝgêÝgêÝgêÝêÝêÝêÝêÝêÝêÝêÝêÝêÝêÝWêÝWêÝWêÝWêÝWêÝWêÝWêÝWêÝWêÝWêÝ7êÝ7êÝ7êÝ7êÝ7êÝ7êÝ7êÝ7êÝ7êÝ7êÝwêÝwêÝwêÝwêÝwêÝwêÝwêÝwêÝwêÝwæÝgê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×fê^›©{m¦îµ™º×ê^[¨{m¡îµ…º×ê^[¨{m¡îµ…º×ê^[¨{m¡îµ…º×ê^[¨{m¡îµ…º×ê^[¨{m¡îµ…º×ê^[¨{m¡îµ…º×ê^[¨{m¡îµå÷½ö¿üã_ÿå?þåŸÿéÿ{’fñ2–DyLP-1.10.4/Data/Netlib/shell.mps.gz0000644000175200017520000005175210430174061015416 0ustar coincoin‹ÍK®9shell.mps¥½]®%=r$ø.@{¸˜FÐùÿ¨Q«! «UƒÖ=û_Éœ¬Ì°ëI3çÇ̧ $y,Hº‘NÒèþÿò¿þí ÿþóßÿíoûçúßÿ?ÿùÏÿôõ·¯¯|] Ùç¯ûÇ_üUñWÃ_ ü5ï¿Ò…¿þFFFFFFF†ÀaÀ0`0  †À‘‘‘‘‘‘‘‘‘‘Q€Q€Q€Q€Q€Q€Q€Q€Q€Q€QQQQQQQQQQррррррррррÑÑÑÑÑÑÑÑÑÑ1€1€1€1€1€1€1€1€1€1€1111111111oŒt]ø+á/Ã_üUñWÃ_ ü ð<ç «¹Ë&qdŸ• çk $d|QS}¦Œ¯—+2ÞTweÛ ŸÔÀç¼Õ]!ã‹¡ŒÏ¾%!ã‹òV2e|ö- _Õ´’)㽓œCÆWÙ]Nõn‚Ì!ã«ì.ºÆw·håñU’qî8%^ãUwºÆ7w•ñMuWIÄ™p ßÔ´Rl $ÿcü§ž+2¾ª5¾0ÆÛtÞJ‰¯ÜÔRiw9¯¾Äk¼lIÛ™ KÈø¢¦•Ò·@Àxv0”¤ Ó5>ùîãËÉÖ¡Ð5ÞÜÜU¯?©ŒñŸ¦¸R)¹ÔÀWÆø¯áv¿Õþ Äv4*_º+Ó“7 W0¾1ëRS}eŒÿš~àÁø~r4S+m‰“èîj[cÆ“Ýo¥§mæÇd„ rLÆÈ AdwQÆwWª]ˆ© ²];‡“ ŒŸG ”ñ~îj7ãí:9fmÔ«nn7ã-L+2þ˃”Dªµ²ã­´‚Èî¢^½?¹k-Q[ìF×øË-¿­‡ jùm”ñÓ‘±?¡Œ÷{Æ6#yÐÙ(ãýAg¿oG[‡N÷ñÉ‘±§Dm:?¹snj·¤Ë–õVÜÀw0ž9w¦L¸SÆWß0¾œ,¿½ì,¿½F r=éugùí`|=9²íŒñŸ-˜+Õ#yVß;Ýiù1aK¤uÑ}¼¹í\Ÿ!ˆZO:c|ö÷µãŠ@ä‘í ûx€3R¢­Aoç̃X¢È8l«%9Q&<òVKJ¢LxÐ5Þ3~ÔD™ð`ŒÏÙ­ñ#d¼<²Ô«/¾TÈxyd;(ã³[´FÈx¹2Æøæ%#d¼<²”ñÞ«Ÿ!ã‹"㤌oneœ!ãå¹ðä÷ñn‚œ!ã‹øÉOîOfÈxyø<)ã« _O&e¼¿ š!ã¥ß5ã»?ïš!ãå ÷dŒo榕2^>OÆøVãgÈxyø<)ã§/2^ž OÆø:¾Ç$]!ãÕ¹0ªÿÞç¥+füP Œñ­wWÊþ¬%T3Í•Ê2&颌ï—+Uþ¬»v8骓Ätr_ÅÍ]éj2­¤‹zõÓ—êBÆDureø1ù£5ÕI¾»æŸL‰ªéŠ;ïJéÏŸ®–¤ôG<¡š»‡u%û#žPÍ]q'w)å?â ×Ü?&åxÂ5wÃwWý#žPÍ]™Í•ú£5>QÍ]¹ü˜ô?3áNWF7A¦ñg&<¨zÐ-Ziþ™ Ó5ÞmL“]dÂTsW‹/•þÈ„©æ®:Y2û#¦š»šÝÀ[þ£©žjîª÷V¬üO¨æ®:U²x¯xB5wþ° Y¼¿HÛ8,HÐÜ»Ì4S ô¬¾ W Œg÷Œ¦ÈÈ5wÉ›0Ï.Άì®Il]wAsgó¤%Ts÷åöñ š»Ì.Î²š ¹æÎ<ÈÍøLïO” ç³úÍ]¶£–äë‚æ.³ ¬O5wÏ1¹ŸËHÝ1ahîr=“¶eÂ7ã3c|–&Ü·¬ëf|îG ckàoÆçq2ÕSÍÝ翾KAsGAÔVâš;w! ¹ã ª»¨æîAFhî8ˆ"#×Üe·2BsÇAÔzB5wÉ]•'hîøÀ+—ˆjîRwË/4wdÈîâš;?ð`ü<xÊx'€MÐÜ•ë¤oÜŒ/éÄ‘àš;?­@sW¨z°(¹Í]É' \sçç.hî [O†2áºÅxhî õ ÕÜE5wÏ–ÜŒ/í$oÉÍøÂÖ“!Ǥlu×ÍøÂ_Ôò»¥¹KÐÜÆø¡xR·Öxhî*c|• [^=4w5l1š»J%%Ṁæ®2ÆWe]Bsçš»ZNZ5]¥ûZYýfim'n p•ñ¯ª%Ú¶zäß@µVgÚµQ=Ÿ›3í:q¾¡GkŒ Í6ªßx³¡ÙÉ·míq¡GkŒ M±¡o±z´VN&t(Í=¯jÕƒo¼9ÓÚÉÍ•fÞ¾™Õ³.Ù’›Y1ë’ýx3«1f]j ÝWgœ¹Ô¬EW§òJ‰~³¡S6¨®ƒ «3;ê㡯êÔ‚ÕœåTg<ÔtMTg¶9ÕLµSgV7Õæ:¦Î¬nªÉ ¥Î¬n*bA{4˜ÕMeóP fuSYôBƒYÝTV%Ð`V7•ÕAã3˜ÕMeuPï\´º²:èr.b´¿.1YuÄ©iGÕ¦³êÊh¡’ìãUl™ýË`/Ï2¡lì㕈1A³2«.ΠF„qIÝ%t&“0.)Æ$3±êUU¿­n«>TõÛê&aœ]²í·Õͪ§ê‹½Ôt¥nÛœ•˜¹ms6V]ŽÏm›³³êMU¿msV]t“ú YUOAõ¤6F_îêÒ ˆ  êLȨ"Â?ö4("(H• ¯ò½·3»[† @ÔâÏU ~[Levå}Þ]=“¶D­TÅ`ÉwW‹@ä>GrQì–!p¹Ï«|]vîþ-CàÆ)÷yTÅàcêYXª÷yTÅÝã £2„ìÆ>ï®®­«¥pàUKhä |ùR7ãWÛ¹o´é¹åpà覾[7±ÜÎm´„¾?r!­ÅŒWnL«;ü2^îóàxÒBÆË}^ë[Ö1^ÞUj$ï$·ˆñzŸÇ•ÓMý ATKxä ?ð=f¼òúhä ÇyÈ-ÈXîcžP=Gò³p×x¹q¡zŽÇ¶¸—pL”·Ò¹6Ù·äf|=ë.ºÆûƒ°2^n&;_ãÝ¢ÕCÆË}dî1 õˆñúØñ®®wƒ=\ã¥sG#÷ºÍFÄx½Ï㑃¼ ßÊ–åv.¶.9èò-±¿:&5Õån†þù,z[°‘w\"úgìl&Ç–W+n¬Q—(©êàrÚìí/†ñ]]-¿£ÿe[Voë&^Ú¶G€~é¿«¯6.dëVÉ1ÿrÛ¿ÊïÕõ 4¯¿>Š«êò8s¦¿ ’Ò¢ºö ¦ ñw<íOßø]*ÿÕ–<¦ÁIÙÿø”ò—ÇĽ2Bu½–Îú—[â]¸»º^Àæ_ž#rÏ‹êr™›Ñ¡o h!ó‹ÃŒ¦íƒÍ±‘OÂfÄx}J£¥ñíèåë AÄú—i!ïMÞ鿳ûŽS‘/þér¥,1%Ó¹ßB«oÌÕÿÆâKËD)–’¡¯Œ¾š+U#¥ÕºŸ',J¡zݨ¾,ÿ`i=êú~è«»R#Q¡›3üóÙ#»R“9é dîØvºyŸøGu­c£º|㔓 Á7‚ãÄì³]©€ßf± •3sÕ™·ÚÔ"I_ª:{‚ô$èø²l—¨œ³œx4|·jÜ‚0"éKõdR· Œ‚莸¥^‰%*Lê´:S¥Ø—Ë›’o©—Qfw‹¸ˈb–7ª/âYWª A?ÞÌJta,Õõ,z˳Ë’Ôž [Ûˆïœoy‘Ôàñn\ÐÏl#1“ C(|—šH•cB#\¹+¸œ¯DeÒÉ\Ýåî^sN!ˆ"Ww¹M9[8ð²%ü-¼/•M³ –²W*¨ræ‘l²ï퀤$Av^¹çÜ #ÀR浩;9óœ1nÞÎ# ¾üc&T•\® zRi rIì¸ =47ªkç¹X¢{¨€ TùtmT׫F)Hð7ŒžÚ§ê‹~tëAiˆ¬¶‘Å+ߢ$¢Ô™gV˾%# zûæ ˧’T˜\æNG@ÓÄA”Ù M“3;hšxÞ!ÕÐ4±L)Úìxdw&¡ib ¦¿1ïÌô%Q*Aèše¤†Ý%A¶Ö,hš8ˆš‘yd–âǤ‡ Š¥<2‹ ­›¡i¢c¢06ž_ehšxKÔ¤F5Mæô3¢$;Ú·@­Är%•h%óÖKñ؉Jœ¡ â jHGÚéÈz8ˆšÔëäYmk!Øa1 “J¬–©\(»·6yÔ$øÆ›™Š6e?ö°zÙ¨¾Hê‡a ÕîÜÒgèrò‰æ3¹‘c1CX“OTy™g÷z€¤¨%JB’iv/3_ÊBµJrYÏt$‡°†v—(åÉßÀº‡.‡‚()y¦Ù½’¿M€.‡ƒ(–Òì^Ÿ5Þ• ¹,ïEhv/í8C—“Ó ¡¸áÕÇFu)-ËPÜP9ñRÅÍg—‰RŠ"§¾Â7.ªHↂ¨Y©PÅÏ2Z ¸¡ jÂ("o×p¥rÒè>@J4ðjÂ(T—“ÍI@.9&ukLZh]„¾nMÞ„{8&UðW4~L"ÆK!_¹xnN_*d|‘Ý57BÖ—t… b/ùD6Y¨ÆçË…¿)Ðøä“x.…j|ª{EZ ñÉ'ñ\ àôØ…@ ”Obì”\6b^(òIИÂsZ=@ZÔI3ÁÉ?é.Ð å“0Q…Gpz€ŒDÍî4‚“ªS *Ê'±¨ àääý¥„\–®à4¼ëQBÆKß*”Ìå-ÅBµÐÐNþ|Ž©\'s×19qŽ©\G-¡PÝQRÚ‰ƒÈ1©[ -ì. B½gó =ÑÓ U;Yõ?"¹æ•¸¬š¨rrÖ^¨&ªz2BUNÎÚ ÕD=΂ ‰*'gí¥¦‡rªœœP ÊïhjAÔTO•S–ü˜„Œ—S=UNùPÊ©Bς䘴¨º’K¨hõ$ûü³£ŸQuùñЕ£m-´Gåè ª¢BÅ4c£º¼ -Е£ý.TE¥}c ª§Ò6ª/¤ƒÎ×^ˆ¥§K*=]áq‹ü¹TE ĪڰRU‘ù=TE´%—4g¾—ô¥À¶+Važ W¹—õª"¢ì†Ç-ò§àPQ•ž®PUѳ%€hA/Ä2šdÏ0åíz¡2޾,¥;’k£ºÔè…Ê<úÆ›õ:9äJ é¿q Á7Þ̪t)­Õ™Ü7B TOdé–m1Õêz¬¡ña ¦÷®ññ§ëÐøPs´ ž•Ôƒ”°%Êì¨è«z€Cz3‹å¶´¼S]ÎC/T|®ò:ôB5uøG/êFuù,¤|‡Ø9r¨ ñaI>“JòY¨Æç±@ãÃRê}ÕøøÐ„ŸztõN¥‹÷ب|c @‚o³¨VQ-ŒPÜÔ£« çià MÄ£f(®ËñG¼Ðå°Ì©ÈܸI©Ðå´“Õ·BqÃÒ³¦¶S}±²MWÊàoΰì®Iåè­TK“ºïÇ›Y,»kRÙ]+q“|GÔ$舛Y,9lju£úâÀõr¥z|ãÍ,–Ö”­òè5.hK…þ…$•æ¶BÙÒN®Š+4+,ÿ­©g«•Ç¥iΡYa ©)£§š•/§·«Ð¬p¡@òŽAA³Â2ùšzlVSÙ˜Ð+”-DZ Ù\©€vf±•­Íêzв¥£o³hˆk£ºŒgT¡Yi'»Ú 5 Ë®œzÚ¨.#OVhVúѺ 5 K᜺mT—á*4+ýh]…¥Ó½ mT×þ 4+D3V¡YñÕÔÕâÍ5+.ZA…f¥ÛQoßÌbiµ‹ ç.kz……%ß–}+Kó5}©t5×rÍŠ“!UhV8ˆòu FaiĵEP5Ê—Ë‘Q¡FéG~t&,W¹ökyÄ·™«Ð™ôvô`V?ëVÕeäÈ m˺.MW¨>hõqmT×S5TýhɃžcœdc©Åv|(è9Í2¡ÖU(5ø7Êê7Xúù`(ªc,4 $hbÛêÇ€c}sfPµzߨ.›+ÔD~ãΩ_…ºb­˜ÐM zzjÕ§§Î" ›TÓ.¿ÑèË_*G E‚ä-u×”ÝÅÏÝ‘-ÙÑFV¨+(ˆd@ÝygP¡Áà-‘ Ôgt‚™ ¥‘KSåïÿœ«=·.9ðsCº^¡úà ¯üõF•@ÉÅZoVB5­ðè5~Z±˜ñ„úëÃIÄx™v¶‰lW¾%ã¯)ž¾Kt÷ ÍBÆ«ÇƸÉnSÐ,d|–-¡q1¦3á2¾¨Õ;_;n[Nᢥ¬‹«Š¦ ×xéQÑH8¹ Ú£ÙOœ¼µÆC{4OÎb´G““Jð7Þ!ƒöhŽ“5ƸyL}P(Qé"ähç :&ÞÅå—Ö5vîóúŒÆD.ZTÑõ8v!ãå¢5ø9šÛ˜ñ$mÄüm#büâ²yU].m#‡-¹6ª/¢Wùî*!ˆâÉ(;d54a Â÷Þ¾TÈx¹h­½÷­4[_ý‰¾ }W—éC]uÙL•fÕËK¸œ¾‘Ç}wƼ‚–è+„ymhæÚLQwÉËžÛÌŸN‹@$K¹jÍ; 3 2n£ª5s‰vÛ,ˆ ~ܨjÍüaݬ!ˆ2aªZ3<[4&JÙÚ¨jí㈹R=´.9&}kL"ÆËXpªÖ²¿÷¾egËÇ1ãçÜè®~EŒ—™:U­·zw!;«q$rT—ííWÈx¥÷í"šoIf³ðNFé~å €ý*ˆ¼ë¸Ì¤bWݨ.¨‡]js¤‰oü.ÕÅ©I¸R úïŸò¢T¸æuªG3w¤×¯€ÈkóÎs›gœé ATK¨Í\蓞”„4¼6Gu=&É‚–È›ºïêÊ•î)ÿew0ô]Ýd§–¿ âÎѾ««=TO5øºS]ªÖzjˆÜ÷´sïÝ…ììŠ7ø¨XWÄx¹qé\µÖ¼yÌDMâ\µæNº]!ˆbW­ù–ܲ³åyWÜÛTµfNIØ ”-G ü|}¸R|ó\âÃIT>…çø ÕñE‚TñߥSãìIÛ+ve)HS }C©ÝoÙÙr®Þ¡dìyñɚèAò%JÅ~×£M7aä€h?$§«=["[bÉËû-([º½7Þ*ô\‚–H‘Âwué‡äu—\üyĬî¾E ÒEવË|@´‹ÀUkÅwêˆ@¤‹ÀUk.AWÏ3‘.BžÇG½\!ˆrʵq§ÜK A”qRÕZr–^bÆ«SªZûەʈºõëTµöب•‚(æ™ÙÜ h/1ã•uqÕÚcàCÆK¡´-ñS|ßxlÐË[¢æ®Âõ0Þ„Áx&(SÚ{½¢êr~­)¨.YwÌɰzKçÁÁ{§QÁÌiKû·mž¸1<›šy€h7¦òü‰¤† ²%ôL¼ºuù[µÆ@äq æ®uú·jmÜ9v¡Zó #‘%\µæO’¿UkóÄWÚR­õoÕÚY4QvduP;Ù‘ÕAÇdGV…’Y´GvduÐÙ‘ÕAUdGV½Y”@vduÐøä#«ƒz'Yt9ùÈê ¸ÉGV-M>²:¨dò‘ÕAÿ’¬î[Ùrbuš•<Žªã>kU§—Ë{ÕqnŽªãHÙŽªßVWòQõÆnéöªwvf¿Wý¶ºÒŽªßVw”¾w@]q”Yw@øp”ôv@Òp”v@¬p”*v@†p”–t@Ÿp”Ìs@yp”gs@P¬j£ä–:€£¼“7üõÈêpw_¬·òGyÇ}a~Q%šÊ9î«ð‹^r7SÕë]½UowuvêÜdÛYÝEc@«¸Àã¾±¾h|å)»nÞÕÙÇ«3™q_&_,Þ°©CÜq__,’pVÍã¾¾XüݬNHÆ}µ{±ºY©ŽûÒöbag³Ú¦û:öbÁZs•m¿­ŽEÇËJR>è=í—»P÷EëÅbÊe•#mÜW¨‹7“«ŸÛ6Y—¬â#ûÚób/ÿ³ºi¸=JÛ:pÓɪç´S}Ú=»R9QöQx>óêJ•¤+²qD8pÓÉA”¥‰øÝ•já˜(ÂóüGÓwW@ºl 舉›N¢&Ÿ£{4Ù]T‹ìb ܇R¬@h|sŠGMaw)2Ò[Óìr_Œ2^@zkšÝ•Ó¨!ãUÕAoMó£»"Æk‡ˆÇúp1SF ¯Rü~kÚ¼uEŒ·!»‹1¾]¾%=ì.i]ŒñÙüÀGŒ·©ÖÒÊßúR!ã³x¥Þ]ž2^åDôÖ4»·Ù·¦íh#ŠûPV=§²Q}‘µÄ'îC9ˆêmÜtÒê}§º^2qÓÉAÔBÃãsTçÆà¦“‚È…¦µG…7D.4ô¦Óº7»v—4;úÞ¯xÈ…¦m±7 DoÉûµ³ô¼š èMgò«Y¹,—LŸ#g_*â²^hh|ŽêÞ>Œ^Â1QÖEãsXóÝ1^/44>G©ÞºBÆË…†ÆçðÑaG/ŸÃ¿¸Íml¯rüÜæ²êÖÊFu+ràΗƒ¨oä¹”~½µºä.ó¾2¾V;8úY¿U·NždÈäè7Ît|$û‡m¨Àî¥y+s¦±:ÄÄí5‘S ÕQ\¬Ž;nÞ]Š3E„ 7XÐZÑÜ¥ê½ú¤Z«‡c ­Õì'¾-mÜFL(²(ÈTÓ³PdùîKÇÁåÍlyãjB·EAÔUÙ¤º­/ó `é<áÙŠ=H‹@ä¤Fu[åò¥zØE3¡ÂÉÜ&t[DNjÓÁ³¬¸R\fê;òŒIÞ8¸|òêu ªç«mT—yˆçÈHS³#o¨äæKÛÉÌ9v²ŸÍ–²ó¹K¹1£îÜä °”8©…s´Üzs€Ëìíf’cÒ·þæ2‹R¤oiƤ'ÈÍå”Nn×n¯ÞwªëÀ[_•ÓɃ„9wr—Î[F•YX¥„¿Yt+î-£Ê,øRNj˜<“¡ÛÓß2ªÌB4嬌sò7‹¾%7—Y §œÔ².TX¾%7—Y¸§¬N®ÂòkÀ-£Ê,(TNj˜#¨®— þ±™Ä®ê*]ׂp–~WWýø)u³Ô¨£×Ȇ¾ãSÊB©@8K›+•5¤Ÿê7ÿX ®,Ò}WWÔø”ªHð7³X4°l;ÕLÙ•º™Åb†e+ dCßø)uóEËV×7vWj º·oTfáËr/Õ•ºäS*E "IÙwu%}ú”²$è0« UN¥ìf»þ±U£ÈŽ ü›¾T@LMDiC…ü)–Ž£!mq´àO)°tþuwá»ú¢»Ü¼FÒÔœÈõUæAn–²PwzLn鯞ÓFuõVàS*E ²#¸rÊ|©›¥ùà)ó§z«çêzJ½EMù$2à§úÍ?0g5¥Þr%^½Ë±î!zݨ®}[ˆ”YôÂ`(gªc¿ÍDwÄÜiI³èŽD“gí¹¥jRdKj|*õ)ÕBµþ‰|<Î¥É=‘“%ÏÇc¾»Àeæ.tiœ|ýs`—Çɘ”+ªÞûFuM –2G (o£¤µå–åBWò¡@lgwsKŒ8HQ3gÉ[ 7—K:ꮲã7Ý ¥\è[q5aÐøSŸä"qm]->Äû”ꈞžo‰Q.ùèoþº–^ÕÕéž]·xˆƒ4åzPíÑ×pýx‹‡8ˆœxy¦s®pµDN¼\{ôëS*‡ ²»rœãSª„Ý%[BWÜáKÕк”mÓ˜Q.ÛÚ§T‹@L­S<ÓÎpô –2O­H¿ƒù”ˆ©5€ÆŒz¶d z¾iàò‘ëÁJÝuDKˆ4N‘CÇq¹Y"“çÐñëTËaw).s…Òtî`+ˆœ_yd©âvZ @bškQ]®'­ &xd©êKõDyA"²”›Ä¸ÜO¸LJî‘Ö§Ô @4—¡=*ÔùžÕõ|íQ9òð¹öèr\†öˆ‚HšuÛ9uìYìÍâ Ò¥Õ7~—*aKdwmh‚?¥j8&ÊWâÚ£é& hˆJ=êªË¹ %Ú9ßôè­ŸRôTë‹ñä1¤`é<2N®=rÝíÑj÷µ Oí¿q¨D“1K!JÒ ”fŸ™3îH—4H¥¾‚Ìz®ºd´Gõ:aéØ:¯‚ö¨Õ£!¥Þóô M¬Ë_AD@W] ]2[ߘ9!]Ò Ôýµ…Ò¥U&ïRS”ú Ä{®º4t(”öAüNÕ¥ B¡TÓÉÀJÍ9(Tbô#¯|<»Cà$Ç ¥íî2³Eu¹R@¡TBRWWoh?¥*ú[6n!pZesù.ÕD¾ÁŸÕeKÚH¥¾‚‡dßÕµ'Sµ“Ý•ý¦j§zð컺œ…ÔNm²©^ôv¢j'ûÛû)•X¿=D÷=¾ÔMÙ•D~„N­¸Rô©lµPúû]=ø0žFÀÈ „Çœº\)P–¦© ¤nœ+¥‹Foýb Žàñ}©.¢:‡\FõàS†x¼N⨀LQê+ÈÔꪫ¥-%µH‡Ç)ßÕeK ¯Ún‰?ˆþ®žeKèAØÇ) WFTZ’E>ôйCõ¤üåîÊ«êÊqJPaU:A6õ[ŒO-Ü:HN}£úbÍsËôUµÃ%ª¯2wÈ› ¯ªýà| ñøU~õ† ‹‚(O©­V+GÕsiöªc_ÚŽªg¶­Ý«~[pGÕ+;Ø«NÏx÷ªßV׬ ¥~duP(õ#«ƒö¨YTEýÈê êGV%P?²:h|ú‘ÕÕdùÍ]y7µY~óPËõ-™¡Y~ƒê#Èò›‡òHê ²ü–K-ží ²ü–¤Ð[ ²ü–¤î–¦Ð,¿%©»E'4Ëo1Õó­Y~‹z9–Z ²ü–.{¾Y~‹}þ©Þƒ,¿EZ]A–ß"­Ž«>²óTÚ ²ü–¡Ü¡~Y~ËPãs 2h–ß2Ô¦¥[å· 5>Qô£•ê V½(mr¢ê —å÷SªF &;¸ÆY~?¥Z’%H‹³ü~Jõ°%Š‹}#–Ó§ÔÇDšóŽR*AƒÁ@ªzNž¨ÃKV4$©-ÿ2\wAjAA.Å?*ôpyX?¥,ì.e]Tèaþ |D\.Svå4Ü͈_%O¨RÃ¥¶4BÆweÂT©‘Ö2^ä žƒÏmµGÈx¹Ÿ§Bü0áñS¶„ÞÛß’¶DMõ4WWö‡kó ÇDyZ4–LvzŽ4CÆ'eÂT©Qý¡ìŒ¯º‹ =Š{’fAÔz2y„d2>)c–2Έñzw2w´Yi¶°%jÑšmçèvöD­'“«¡ý˜ŒpÑ’Ïχ}©pOjZ¡J —1Øì /bö~WWÙiÍ®NI$Jq¸R!ãSU 4Ï®{ÿ`WÌxÙ]™†ö 1ã³á™6‹+®ñJsbT©QŠ/®ñ"Üwõß@šÛ:ØÕùKZWß“p7 2èzâÇ$\ãMü¤ñÆH ¯^XZºâôÝf)d¼ºI4 '»˜Z©Å896ˆ(Xõ¢^›È!æŒ" ’eGÔ ºÜçUW$§N4¨+(H’A÷ÞÕ[D@Ô>ϨÃ\Ø0ƒƒw—šÔ¸Ã/4Ð`Ð!²»èº\]K Á -Qû<3ÎRgœÐ`Ж¨-˜Q † ×]±Tn&j0rõ¥B.«}žQ †KÑñ)ryÊ–”8±Å§T [r)º3sZ ^ÍJT©‘«[h,d|’&Ì_ºoIÌxÙ]ccƒo6CåZÏ;äZ’CÆ«}žQ¥ÆÃºrÄxyf\©áöy–-l‰Z´¸RÃûJ9‡ j=áJ oÂ9f¼lIÙ8±®ñj3i\©áy’Ã5^n\h¿-¶3^M4Ž]ÞºFèQÉ–Ð5¾¹å7‡Œ—›ÉÌ×x·2–˜ñjÑ*<‡‘[ãK¸ÆË}öã'­„k¼ÜçÑh?Õ“±DŒ×û<íçaÂ%d¼t¸i´ŸÇk¼ÜçÑh?¥û1 ×x¹ÏãYË<KÄx½Ï£Y˲‹RcPÜ ú NMõPÜÐ4Îê~ÙhL 'Í Ëá êyL |ýÚÊ*³»e=×ÅîC¼8Dõ¼Êaô…½5¨‚èøÈµ¥ÚFÔNƒvˆèi¿æ7þ…‘ë="ä3¢Ñî’Ó>"T1EˆÛ£ò‹ëÖz(B¼%j•äQ„¼_\G8&j£Q„ü3?«Ñ¡0š ­8!…µhŽÐŽ5d~mA¬!>&j¶ã±†ºãI‹¯WÉfqÖÎO©ñr•¤±†\ÊîO)0ÞNœ ž -ù–ÔD/`ˆ"Ä¿1oT_äð¥ÀexoJ¾3‰#ŠQZ-C| – =ºQ]åÇûqìpƒÔ“Žè;18 Q„(ˆz…m=Åé?¥ÀR*9UK&"äï‘ `'’`ƒ‚& Wú9ã 6óßXàÁ¿qbv½m$Q0hÓÆ8úF0‹]‚Ík£úâÝÚÕ‘ôå‘\äXƒêì$ÿö§:|Y¶K”.ÜàÑÝÝÎz2 "éË=Jå$舛Y4C²<­¦J1—îñSª† Êì cêæ*·=н¹ÈjŠÉ×Ξ-C5ÇQ TùtmT¾± Á7þ2çrÑSû´Q]¦«ºŸMq`°fœžòǵdÔ•m SMSr—æù%QÝÛ·Z©\ôˆÉ6ª‘CevBÓäÌîÖ4Q #ê]ÝNÌNäíÊ®T‹@†üƶ1Óç[”DAªŠo—ÓNõœFØ]²%c«%3Q32+ãtfÙ®D±”g÷rO²¥D.M<»—{~•Í–¨qežÌ=Î- zVjü­óoZ‰@ä„Au9¥9ãl5QÆÙ¨_ìiÖZ4&r êìWŠÖ=‰SõÎsLFh]„¾}X× ÇD’‘¾µq—”¹GŒ—J¼L5>ÝE‡È=d¼ÉeªñÉþ¨‡Œ—“xçÊ{_ ŒgÇ]ê`‰ÆÜêÝK¢æ®­La¹×D»–½Eß(¥Ê»1\¦w²#FT]²´Ï º>õWP]ODœ!Þ—¿û[õEF·p†ÕeùôEêåAWf-)ª%…uÄŽ $sõŽ_ÿF ¿±ªovSh>ñ¾««õoôD3v ²#PÊB½ãV_*¿ùàþêGåÛ)¾¥&˜EUˆjîáê÷L0Ï€ìU—:À<Á¿až<»¥³®™= RaMû•éK{Ò³ôïR5øÆE—±¨.ÙD ˆØ]Ÿm«%ý¯¶ÄG @u½8ÌÈ=ÏUœ×6ç_mÉã Q—”—Zx‚«¾±ñ@u9&…'¸ªT@g®±»€êHÈeåIuÉ"”[´t˜7¾‘GåÏ®TªÚpêCõß#?>¥‰Ráž \<²bs¥nÆIÐ|#}ë=}w %rÂ(<½–ËzR 1¢>§n ÕÞº—… ¥IºK0ý®.? ¥YNZB£.U·°è˜ìää»P“?™)Ð1ÙÉÉwáéµüÀCÇd'çŨ¾8Ê®T A©ÚÉ\X’BÆË©>íDV,‰2‡&CŒ°ºZ) P2;A‡öˆWWèPÝ“WUÝÂêjÚ‡ÈNtJ c{I•—©p%“ä(Œ]HKÆò¸EnS] b U·„Úyó =‘ñ × u_ l`WëJ:XŒ¯l¾%3‘œ™2™UQÉŸ U=ZU‘ˆ ôBƶµfÕ§)þs|#XJ#±^Õ‡¬þëŸÔ-€qó/_Çs%ólþG|ãͬL³ê2OXÆ'Ÿè¬ Ô;™Vçêz¬¡Þ¡ êEM)¶\¥@ã“éûyµúRO2R–(³+;ù‘ 4>ÙŽ†ôfVf‡óJÓ[JÛ8/Ðøä#g…j|«4>9uøGðëFuùΡ@㓙ߤÂ6ÓÇ“Ÿ|òZ¬@½“Û‰ç_m‡äPïdºÄ+?¢æ-€fQõœ¢7ùät½Ô¶ñ:§@q“ij5ÅPÅMòÛ4(nÊu2Ä]Æw©€èÁ‚⦰[ë²S}aPnç ÅMazUÔØŠ„S ¸)l²,j²lüU—oÉÍ¿Âf»¢f;ª¸ùò.67åh“ -M¡ïwçFõEGtWª Ÿ%Nô zÐD0‹Íµ¥oT_xîä ú¢æZãÆ5ô/¥³ÁR-ÙŠqS ¡ òä‹Ç¸q¿ ô/åhÕ€²¥°U£Ìêš¾P¶”£!4+…ÆÒ¿6ª/¤þnÕ€²¥íÙ Y©4dÚ¨.Cä([êÑ¢eKe‹Nµê2zMþ¥íÙ ©ôE騍®oè_*]Õš%¢×¸ë´[ÿ"Z";"o¼ò-PÉÔ£íÔ­ùx¨'Aóœ%§€.¹T¶x«8¬…Ǹ™¾T@ªZiž3/s)ÐÒpå†@æRë‘Ùñ8¬n®…J¦-ñпÔvâ3NþzØ-ŒÐ¿Ôvô`V?kHSxõ±Q]ú+¦T¶®ª¸À¢Z½]ÕõT ÍJ=Zò Fi'É3Ê܉ U Fá b]­Š´tЕǒq™]*„"ídÉ«€4ªûíÕåáB…‚„ƒÈo܉‹Q¡ ivÔ7g=w³ê‹s7?X-™òÕðwWª U%ì®WßQKºì.zƒæ–¼Šè5Dv×ÜÈ¿T!î  ’4z¹Ó mo‰š ¨6äkø–XØ5ð<ÆÍ¨®T­k(Êåê[RBžÈ1)”šBÆ«•GÂy´$d|—-¡òÑäA"ÆËõ¾¦¾áI×4Â/ „2>{žDŒ— …jš;ÝeW"<éJ#á$s$4+¹ëM‚ðH¨¾%€è5Ê–Fcl¤ê2Ø]…þ…‚¨¸'UDÂi®T @‚ŽKÛÉô ÍJ£O1l£ºöo YilçÐÔÄËcÜ|y«ˆîG¨QÝ9´êò°¬BÂAÔlÇcÜ<@À¬yÒÛ\³â.½+4+mõöͬNs̤ê‹oô¥j¢mj”~5ñfVOGè#¬.Ño6t;ñ¤©Î¤x#€Î¤ÛÉž€Æ’)N/^¡FéG›#èLúÑ–¢ØÆ³à I?ÚQ‰Ï½X¡3éù¨#À†râ˜BAB«×¼QýwÏcø&öD&”­BAâœg(H(ˆ —ƒêòY…΄‚¨„²•ëL\ää Q¹^+%ã» :“~r ]i,™”}) ­K±”«Qª/•#uðVëÎÛ€ 5 §™)Ik ¹,>ž Êåß­5d¼tVx,™éKÅŒ—&L_ùl /·f[±dj¯vM4”9Cm!ãå׿xëj1ã• ý‹;Œi!ãå83¡éìæ¨«©žë_²oI‰@ÔíV¥g+#T2ýh—ýKo'ó+ÏõøÆÈ©¯íè?+´4ýh¿Kµ4Éï ¥¡ rê£ZšäO ¥a zê£Zšä2PWhi(ˆœú¨–Æg;®ÐÒpÅKÆ‹Ú+7D:;<–LñcRBVÎ%ã²jTèrxwÉ–põ€s@{Äxí劈3~Lzh²»(ã«oÉAÔš×ÇδÒcÆ«¹‹j|Òå¬kDŒ—¹5Q}ñ Í—Š/3µWª2¿½!ãU¦öÊ#ḈÐu„ŒW¡l*Uet·Ž’Q¶¤ì¸m£†‹–².®òw#\ã¥GEõB¹ z¡ÞOœ®šd ÚÙ^¨³SVÍ€¹ãA/ÔÇÉš7¯©ª" "]ª*Jî‘T…ªˆ·DÍJ4ªŽO+\¡=âc"AòÎ$…R?:^Ÿe#Tf…B‰ƒ(.óœX.~E…Ž©ŸÈ *Ýãg%è˜ø˜¨Õ›gΚn[ µµ.é¶QµÓcŸ7CÆK·mòÈéß-iWÌxÑ’F5Q©yñÊmkg|v¥BÆ+·­];Ñ^Û•C¡@øÛ/_*d¼Úr6{Ç…ÊlÐWuz¡–H «ÛFõÅÛKßÛ7—Çu0õ5h¢hu5=7®‰rKfƒ&j\«Yãš('ÃhÐDQµš5žÑ˹Z š(RHÚPÜ5h¢è˜HÛæš(÷f·A5NĨk¢º›Ô ‰â֥殉2?&5QKf£š(¯¸kÐDÑW«Yãñr.?ð!—§ì®¾qºßÒMX¶„2Þ%©i)d¼\ͨ&ʧ»j2^®f\5»+2^®f–v¦ ¯¶‰gs‘Œ›…ŒWÛÄF•SæåÔH'³0WN=@j"×9èkøoaKÔTo;‘TX D/¿Æßw;*, "]9È|wÍD.ZÍ‚(?„êÑ{¨ÙÂî’c²uŽ6{Ø5AR=š]~LBÆK?„êÑlø–„Œ—~Õ£ù-g¿®Dø!§’+¾T §S ;;ô~Y8&CØHÈxå‡t®Gsg6ý*á˜Âï½»+Æ3Ñ› 9Þ¡G'ŠÌþ­4£ÒÔ¼Q]JÅú·møJêÑ,{tÙ”¥nÃÛ¿õhóÀWêT–Ý¡gÿÖ£Í_©S=š9U~ÿÖ£Í_©'ÎRgÛßz´yà+už¿Íü˜”ä’ÝÅU£Ù•ªˆtÈ:Ñånêú·møJÇèò<ùÖ£X»ˆÑåÇ$b¼ô•:×£5ß’‚¨¹‹ÇèjÎ„í »K ×£¹·QÝRØ5Ar=šï. ¯|¥ÎõhN°Û-d¼É–ä !b·ñÒW¢z´4}KbÆ+¦z´ÔO¬…c¢|%ªG{‚ô°»äÀ÷hÆÝbÆ« ’ëÑ’çÉÍøyÄ©gš}u¯:òªÚQõ›3UÏ,«ë^õ›3³U¿Ù0ÛQõÛÎg?ª~[ðGÕoÛœó¨ú½P\GV¹ÒuduHÀvY„HבÕAbtYÄCבÕAtY?בÕAÊsYD:בÕA~“ެštdṳ#«ƒ&Yd.éÈê `IGViJ:²:ˆNÒ‘ÕAN’ެáÒ‘ÕA(bGV‡Dvdu€Ø‘ÕAÜaGVÙÆQ~åA†Y¤vduQ¥ÆíGe­í>åzíß’†#«û+YÝ· áÈê¾GV÷-8²ºoQÀ‘Õ}_÷ÿ5«ûßÿþŸ?ã?ÿýßþö·ŸgX×ÓÁù‘rêúõŽý‘ìùÇÎáÿþûýÇÿñ3ÿõÿ|ýýïÿó×ÿþkº.·äýÈ>ñ3…Ão¥ü5>;ž¹,åR¦«%RÊç’úGÎÎU)ÿÈ*Ñïz¸‰%ÿ Eõ[)¿¬&®ŸÒÊßJ=¦áñëdâ·Ryë»Ü‚ñRc«ÔÜAlþX7ÿG­JuÛø­d}«ÔØ*µóõ)_[¥ÒV©­6æ¼Uªl•ª[¥ÚV©­¾Ï[}ÿÈ¿:h©­^-{ˆ[£]·F»n}WÝí-Ö¦º5Úuk´ëÖh×­ÑÞšRÛêÕ¶õ]mk´ÛÖwõ­ïÚ›™úrÿö÷g©égòRÛÏ“ÙßJy¨Öñó‘Ùqút»ùÇ Èåoù5í³ «uÈ+øø?þ¿g©ô8úø‘hUêy,—ÛÏ[š7âc}̶îU{n{(ZV¥Æ±­+_Kûz}}~¶1õŸ‘~+õX‘Ó¯¿•z&Dþùû·RSý–æÑßUòOÛo¥ˆ–ÊcÞ¥òÃÁ¶’×¥éÀ>æV–¥ž—¶sXžÉ9–_ÿJ Ýê²'žÜËU–½ú´œ4—>Sö~ÎOGgõ[íiW]—²';z[–zöjùsóý]ÍÛÄ?Ȳ,5¥)õ`Çìë6öG©R*ûߥÆÃrÒ¸–}?^9YÓÊÛÎó9OÔåw•‡J_µ±¤gÉoÙÃ&ÌòºÔsûÙRY–z¶±Õ¼Z¼_øãEòú»ÚÑ–ì(ýuccYêÙ_é§Èä·R¯Te.K½ËàÎrûmÒËßzÙDn¶,õDüpñ]j>çz„æ³W³µe©úäv_ýÖüˆ¹-K½F(¥e©b[ÿVÙ×j´ësµÊ—-Ós´gYÿÖ£ï³õÕ8Öç:ô™šÖ¥žsá5®e©‡­~œ¶åwÙx®VK‹®ùù[×tYêÑŸ a‰XóÄgñZÚÄÃù,0kÄ'k?ûu©çª0–kÚbBž´´œÑŸ#”—mœ/?§¯æè:w|ß;ŠWP*]þW{Žã×(«u»míkÛÖ>­mí­Úsfú|应_‡ÌÖmì×ËKûÊçõ[ýÚÙõ­‘¾î‰÷w½V˜´œï{úÕÖ¥mÌk»¿AÈ‘–¥žó—•¾,Õ_«è\–zÎ&y®{â)-(ËN®|?<ùe©§'úKý[){ørW^#>×´š—}?žsá5׿õZ‡lýõϾuýõ/eRËRãÙe]êÙ÷¿ÞνKÍ×Ê·\Eû|z|y¹Zõùœ£ÇXöÄÓŸÈ¿^üVê9õlËRO»OyÝÆçªp‘ßzÎ÷}¹Šöù´{›ëžxö}»V;°ñò†ÊrÇõ¼²K‹OŸ)§¥/7®üB\ÿÖs^­³/K½æœ¼nc{ù9iYêÑ÷Ÿ-ÍñåÕš-KÍçÎpéŒôêû¥_8Ò³ïמÕxžbüpù–¥}_{¯ËR¯9géûŽô²û¥_8^þj©ëïzyÈyý[Ïu{”õwÍ5m<}߯ޗ½úÜe~­W…ñömu8{Ñ›ô¾,U»ÌºôåÆcÇú åyá0ß÷)­ÏÆÃfç…£¼E+«9g´ôXùÒµüúçéJKëïzî¤Óú¼p¬½Ú×wÍÇ,gŸ{5OÌ—E—åYí´¼ƒø:SÈcur:óà ë¯Ó¨ßJ¥ uæ—®¿«<ýœšVg³³šõÁÚ9׈u¼v¿yõ[­nœúÌñ²Â¥0ŸëãW_Í_ŸþɱŸc×k…髳ŽO©—Ÿ³:y°ë5G—Õyôgöx’Õe©×h÷Õìk×[en‹ÝÉÇ‰ÝØØµs‹dÛfÆ»žç˜_9·ÕoíÜé|JÍR#í”zùre®K=ØññªW¥Òµ±¯µ”¶JÙÆ}‡¥üÚ[­îìq÷ûýкÔÓÇL+ŸéSêyîkmù]å%³]yC–^+Œ•åw½nÊÕ—¥ÞÜ^ÿVyÝwäe©ú:Ç\·±Åw:ŸR/>®Îå,½Bÿ–6–¥æë»–¿õ’8[_~×K’jmÙo a]Žc}ÝH­N¶ìq þbåwÆ·à?äŸãø[©Gß×ÑûŠCÏժΕÏô)õ¸‡©}¥p±ÇÍ5ó™,½NWlµû5{Ý?Žkq‹ô)õܱÖt-K½NN—³‰½Æ±öe©õ½ûûëûëd~É4{ }­ö|f¯SŸ¯Õi§Ù뎢¬öiŸRÏïJ«]À§Ôk.\ú6_Þ-¿þµß^ž }|Ç´áuä—×ñÕú²ÔÎl’_ûǼ:y°÷ý¶••§û!rÇú)õêûõ׿<äõl’íåYÕ¹ú®§ýcÊ^–zí¤¯u©ç)F[·ñµå´Ç—½„YŽvyË=ò[ÅS–g¢/ÏÙÀ²ÔËîmø¾ïøa…ÿöÿý_þßùçúÿÃ’¤d)ÊDyLP-1.10.4/Data/Netlib/fit2d.mps.gz0000644000175200017520000116011110430174061015306 0ustar coincoin‹›K®9fit2d.mps¤ýYŽîH׬‰Ý Ð8ØxÍ{^ÔA@éHJ4ÿ‰(cCª×éÛ4.ûqnòdÚÇ{ÈÞ¬æüOÿ—ÿÃñ¿þßÿñÿü¿¤ÿýÿöóÿ¿þ¿þÿÛÿÍñ?ŽãÿöøÿÓÿü¿üþû‡ÿþ«ÿÝÿõü?þ—ÿéü/ÿýÓÿ|ÿïÏßÿÃåŸÒÿôú_ÿ)_þ©\þ©^tíòïúåŸÆåŸÎY‡Ïüï€Ë?]~\~”ËÿJ½ü»vùwýòO—Ÿ—Ÿ%]~–tñ%]~–”/ÿå÷ýŸÿŸÿ—ÿñëùÿ÷ÿä¿ÿë_‹¿€~ÚçÏñõ÷˜þ þy½þW_y›þÿs#r|fyÿÊù_T&OÓ³‘&yU~xœä‡OÒïžÊ?òÿÿK|/ÿÿ½÷Ó”>Ÿÿõ¿J”ÏAù`òzý¯¶|މOâ|Æç¨Lž¦gS>ô‡¿ð9*¿ð9Ÿü_>?åËx|àñÇx|Àù¤å+KÛø–Êdp¹ùHÓÃO#Lú†{a0$9 P¸—ïãÐ!…ž­uµný~öÖMüø÷ÖÌ:.§ï&îåûWð¢BÜ:xÖÁ³žuX·~°yûÁÎ1évA’·ëŽ>ËOE~]¶ )L>/HjÃEöÂEþ.#ë™ì­g²T¶xŠwý.·xŠ—Ê¯/Þ£0ùü÷’âåO…´=^y9”½åP–_/<¼ððÂà /<¼ðð‚ã]ƒsÙç ŸvÝFyg»ÅK|KDßp·*;¼?é#F×ò]˽ÜYŒm?˜óG£òÎö—w39Ø»‰»ÕÔÖùƒ:OåüË(÷rg-wžóðœ‡ç<<çp~6uëü%\Ü­gênoýógœÚÙT}Ž6Uyzl-WŸ·~å^îD›½óÄUÚÖùƒ9ÿÏ©S}~ç«òôØ2«>oʽ܉6qçá9ÏyxÎÃsç×hÓžOŠ–3 "×Ö6ìé±µMÛn<[äM’öôS‘ÇvŽm“Î%&µç3•崄ȵ¿Ã òØ ¨m·”—öôS‘Ƕ~[>?u\?¿8x|àñÇx|@øüäÏŸR/_Y߯¦š¸šêÛEÓegßyl9Ô½“ðî¨.-šöM\4m >¨ÁT[õtï¼¼{¦Kk£¸Áð †g0<ƒá nðºûqŠ!b<†ˆuq³—ƒm÷Öƒ"g©·K á-†a†aö|ŽSŒ0ãñXÿxîå`[“õÈÙU÷íhxK á¨!¨8x|àñÇx|Àù¬ñíô’Î}²;ýî‰È¯Q0‰[¼s¡¦"œÞñõé(^ÓÞùƒÁöDä×ï'‰›·­óÔL†Ó;¾>½¥ÓKPŠ;ÏyxÎÃsç—hóûo¢Mž—«‰q“\H­üo•õ!òk´É,Ú$&¿¬¹ªm&9Ûî¥"O)É0É#‹±_ùsHÛã=(Þå³&xYæ{úõÃbx— ½=Þƒâ¥?<Ý ¥"O)É@ðªk¹=Þ5nxáá…‡^xxáá…‡ïœwy»?%'18¿Ì{_!&yä²x¹’ÌLžHºòôPš¼´yHió[¼Ç»†ˆ—iÙ>=r×@ðòESfòDЕ§‡ÒÌàeÝCʺ7ðÂà /<¼ððÂà /8Þ58ïÒ§RbpÞ¦Oÿ”!F×Ä2…–¼—¯ëëý1fcOçǘ]ùáé1f’¬[C¸tJ€—u‰›Û´yÎ}û´yÊËÙ ýšVº—¯+³ýñ[cOçÇo]ùáéñ[’¬[?~éŒ/sþëPãÜáq‡ÇwxÜáq‡Ço¹ÿ¤ö']®¤Aj=ÄóØI^”E8>LÞF_yèÂè+Oˆ,ƒ¥j t|ñØ•L×I Oïb°zãC –¢R½ƒa0<ƒá Ï`xƒ¼.‹U6É+9½Ëžäƒ­å>ÊÓµ¥`­L¹Ñžä‘òö¯<¶O/R€*V9Á{d­¼à=Ä q‚—þ寕É#⯼O/Þ>½Há±Xå`^xxáá…‡^xxÁñ®Áy›¬þ3ÄâúIÞ˜¼+òØ)hݦLš¸Ñ®Ïí"ßl´…èZ¥èº/&bÿžÏAùPyì³nSr)þô¹¢ª7#!ðøÀãÎgoÍJ™žä¬yÈí9¤W‚mJûï+ø•IIØžä‘úµ_¹‘nDÀ©©ØÜÑăD¯Vdî à¸<’NÀÉ'ÍÊV2ÀÁªÒú»“¦¥“1XÞ«vï(¯{GyRu‰a0<ƒá Ï`xƒ¼†ˆñœ}}9®/L>"Ë¡±]eu9䕇|å ‘åÐð–Cã9ørÌ\˜|DÖ3[笮g¼Ââ¼¼žÞz&î<<çá9ÏyxÎ#àümÎm Ô½Ûù*û:µBäb¹Ìä—Æ¶§¬Nv‚¥M^ˆW*²wppë{¾ÊíšÁ%Ž·ËL~é¨zбîdG'Ú¡Õéeqx•&8xààƒ8xà·„ÊôyNÃX z÷r­n7˜<²w›ä‘…ÙWZ˜ýÊX·wþ]$"×*>3{zhSGœWfÄy5XçÕ`e8ÏyxÎÃsžó8¿F<÷YºY˜Mò%qC:TO°Õž{HVI9TO°ÕåN°ÂsƒŸ›…ÙÜ‘ÅCuNÝ„îÁ—GÕ¬CuNŽuqpðÀÁ¼a I*Øò9(Ÿ#&”Á>òŠ/ïoã«–?–¼êƒäM[HRõÁx|àñÇp>k|+VóIÞØÆP䱃µb%¸~屃5o\q^m`¾uþàÎSyì`­X©«Äyy³éK0œ‡ç<<çá9Ïyœ_£M}î7uwŒ_ŸË!ï¾÷ú®Ö©T&í«Uëô•ÇVSR6þžÏÁøüsØ_Ÿ‹ýî¢B}WÍR*“‡v‹Õ*V"|äÕ””oðÇx|àñÇœÏßÚsþØMk‹I.•‚.Ý;¿rºšº]µçåôÃÇT“T{NVºé!A ¦ÕzK“Nb°¼êiÏ{¥>ašaâÃ3žÁð †g0¸ÁkˆèÞÝbÙÀ<¹–±ô£H^{ò’Ø“7"!IIì{>úbÙ ;¹viöÃÇvu^|ò&,$)Þà<>ðøÀã8Ÿ5¾íSèOu‹ç¥Ð§} =ÄžÀ“¼G¶xûô4¤mƒù¼Æ·}º÷©nñ¼Dû=ŸbS_ÂGÞâ ïBÐаçó³tn4øÀã<>ðøÀãÆç'ãÏ¥!X:­|“|HGX‰Èµ#¬“ÊCë·Ó[¿yIûÉKÚ߃“‡ópüì$¹vvrRyhawz ;/i?yIû8xààƒ8xà·,óÇše“?VóI®EZöt”ÀaZöæ;di¾ÃÞ`ydMþX-ĉÁêi?1X=LËÞ„…,MX0 †g0<ƒá Ï`pƒ×çôª›3ç¼Ïû½dŸE.¦W%&¿´HǯOòÈf3 ™ö’u¡ÅX~—¨¿îB·ÜÎ}ýz÷ܤ%?ä·ùÞ‰É/ÍõÄáï„»º‰ÍB¾·d]h-—_¦‹¯!-ÎwxÜáq‡ÇwxÜñšû?»æœ¬ÄI®¥Ñ2¹²kþ™{þ/òHâGöʲ7ï 'k×¼'g„p<“É¥Í×:¬!{õÙ«ÈÞÀ‚œ¬]³8xààƒ8À­Kâü\Qu·®Ëû]sÑrH&9Û5Nåéb¡}eòÈùäWÎÇ~A’§H¤Í^¤ÍÏ•@wëº=÷£h©-„ûÁ¸Ó§‹Åæ•É#Ç›„»¨óó0Àr/wuœ;<îð¸Ãã;<îð¸#À}ó»,ôÿÎjœßV^ ñè£X³w'ù%œñè£xGå9ÎKÖÅVÔÅš ¶å~pîk´ÙVpîTÊ»ç~Pîüé¡£òü½KÖÅäÅš fp‡ÇwxÜáq‡Çw¼åþï±\·]þZã|ݯ瓸ž¯/oÁ2‘kù©3ydRäW‹óÕ‹óÕ[Ïok58÷5Úì¹I\Ï×—wG™Èµ[ï‰{âÜÕI‘„»ç«ç«·žs‡ÇwxÜáq‡Çw¸¯ëù}íÄJêÜÞe;,­§'y$o6ï'qÌY‡wt²0‰ãTä¡BììMâØƒ; bp|@baòHBíÜAÁqy $†åfÕqgo‡8xààƒ8À­¡²?-ºÄ‘Aä±Sb¯ )w/Xõw‰K…±î`ÖƒÈc­^Pî^¸è/s–¥QÜ:xÖÁ³žuxkÝONêu»/êÁ×6ƒõÊ:”¤÷¯\º¾ÇçÃä%.¼±_ylêÕØƒ;(¸õ‹¬IÓ¡$½pl7úÃÓÆÛ`åMå àä`åMå0ÀÁþJä×I!‡-™ÊC ’dí_ŠW+Q¼Z‰"¤Üß…žm/n™LÀ…ìÙ3•‡Ö3ÉÚ=¯V¢xµ8xààƒ8xà·†Êì…Êün5µT¥a:CUž[MyãŠ4^ao°Òò»?öKõXÚ÷Wåé±Õ”7¡Hó ƒá Ï`xÃ3Üà5D”w\JbòÈ`,ź<*Þ„‚âM(ØZw3»£$&ï$ÀR¬ë›â(ÞˆÃ:xÖÁ³žuX·~°Õš(7É‹’G—2‘‡Z‚Lòež°¶$ðF oÄ@ñž 8uÔGÓ±R&òPO=¸#‹—GÅ›=P¼ÙÅËX6ÀÁÈ&ä~å±{öî«}â+·~°ÝªD#àäX÷²ã~f¿{(‡€“c]÷b]÷kLÚó‘ó êˆû™>=R‹_½”pÂGíbX½{>?ýz >ðøÀã<>ðø€ðùí·7.…ºÖåiÝ&çþü§t¡0ÉCñÌSèZ’ ëò´Â ^r{Ý'·/E'¯zźÇ{0¼ë­Á+‡GÒ>¿k­J*¬+Ö /ºz©õ•¤Ö_·‘^xxáá…‡^xxááÁû“ÒŸÏ58ïÓŒÄ ”I®d¶üþïy䥦—“3“‡Ö®ÉÚh×»º!8'e?Mðâ5 ÁK×FGgòÈ5KM/ÇÜe&-}“µ›¯wIèBpNʦÝÀ /<¼ððÂà /<¼àxד2vAlß7ÉÛõ¸ñP&ÔÔÌj³¤´ÃI¾Ä`é³fo圭´Ãê2ÔmxY·ö¤Ë¾Øäà=²6džà=ª–œ¸Ç{P¼ô‡­œ³•œX½2Š=ÞŸqòjà…‡^xxáá…‡^¼?¥þÁuå\¬þcµ°ÓÙC™•P‹•^˾K™Xt?ÉCÁ¹xÁ¹xÁ¹H+çbu)Ûã=(^*eŽoñ/z(8/8/8iå\¬^f^xxáá…‡^xxÁñ®+çí€TšìÔˆ\œDÞ~í“$áNòÈ$šZ­,ôêUÜl?¸óG#rq&˜üÒ­G¬Î%Î˯ZYèÕ+™1œ‡ç<<çá9Ïyœ_£MÛF›±¯¬ü[èKäÚ$Yöt±æ%1y(Ú4k¾á$­åÚ6&-Å%[>ãsÌ|çÃ玂ÈÅúŒÄ䡘Ԭ9„„¼kûÈumcmðÇx|àñÇŒÏOªÒå+ë/ó!—Ó­ªºIºï^„éÒª§¿ÌžKDª~#Éßx÷¾ñ.­NâÁsžCðwh]E køfÛµÆP”ÆsF\¯ˆüRÆÑÅ-Ïð!ÃÊV½úŽêÕwl¹ëÃ7·ÜÎÊyóB\‰üRLÐÅ ×ð7ÃÊV½òꕇÜáq‡ÇwxÜáq‡ÇîkœªK–LG"gƒK>7ÝŸêùòâ€Ê/ù1PŸÞÙ”W]R…‡%KÈÙ‹ÏMó(⼜ª¸/‘ ÎsyèlÊ«.1œ‡ç<<çá9Ïyœ_¢MûX«Êöyœýñ9y(ÚLò9Úôª­*'ydUÙ>Öª²yÅ)m[üÎkHÛâÕ{¼ÅKå¡¶Ç{P¼\Y<¶µxl^mËïO½žŒxáá…‡^xxáá…‡ïorG¹ä4Lé·Óžk[î†V|å±ð(§ì >¨ÁëGº7ø >=Ò§=—Ü — ËJ*1 †g0<ƒá Ï`pƒ×‘½õÛ.Åûº7¿+ûʵÄ%íd’G®e¿òØîØ«°hÒ¨ˆ=}¶MÁç|¨\K,Hì‡] >òöÖ+‘hÒ¤ ƒ<>ðøÀã<>à|Öø¶¯q8ë-Ó˜<Ò{¡m‹~¿qíô¯x§ÅJ;i^‘BÛ¦9ç%±mÏç`|ŽuV¬æ [>çÃå¡ã»b%½4¯Ê`Ïç§-Çwq>ðøÀã<>ðø€ñùÉõO¿|eõyòéM€IŠou_„%– 4o0G«^|«^|«Òú­>Ïõ¼)á'|äøV÷e6b1Aóæo´êÅ·êÅ·*­ßâ|àñÇx|àñç³®ßÚs|»I5™äË*OJ5iµ8”Õ¯üûGkÏ2É#íY¾r>æ,KòPxlRxlÏŸßM>ËïAñ®!¢±:ôC©QÝâ=8^úôP{‚W¾_ðÊ"Z“¢k/<¼ððÂà /<¼ðð‚ã]ƒs¹øìL®EWötžÈW%yhñéÕt4¯¦£móñó]ûËÅMgríû‘ó¤³*ÉC‹O¯¢¤y%{>?ëýBœ<>ðøÀã<>`|~2þ\“[öG v¯šäZkÁÂä,<Þ&.’r˜Î¢+{ú5qQ®Ã‹®Ãê¯ÒÞÕ³ä5%q?öb[+Â7¥+LÎ>ëÛŒFRÁ¸Ó§_SÞÔ¨=¼¨=¬Æ+íe]C_;ãÜáq‡ÇwxÜáq‡Ço¹ÿnRÎkœ?Ÿ×±75M¨gŠ<Ô«û;¦&2xÃVÚiõ€ý•oâñÒfpÏç |Ö¨ Ô^ Eêdµåsp>üé¡S‚ÓjâºçóÓ–[ž8x|àñÇx|@øüäò§]â[ÿ<çÞ$ºLrºŽ­’<»W€Ó÷8ûva¼ËƒuF¹ßÜAÁ-_/w0p\‰›Ý+­Ùƒ; vìÂ\‘ëŒjAö»‡ sº7·¥K…9x|àñÇx|Àù¬ëØü<’õn›_]]­#Y'y$­´ï¯@¼{êÞà•ž­›ý¯|³Ž£T´Ç{P¼ë7žßÝTdúôHVêïñŠ©{ƒWz¶^9ºJUE^xxáá…‡^xxááÇ»çâç²_c’M:ï“Y•§óèz*r¾Í/÷rç@µxqsï<Ûî‰ÉyǪ<§"ç®r/wND‹ÒâÎÃsžóðœGÀùõ{¯ÏÑæn«[ß,0]åbW^öôk!xÑn·'yèLÒ›$²w^šëž¸óìÏøì|âΫé›{çê<—‡N½I"†óðœ‡ç<<çá9€ók´iVC‰I®Ý5'&§Í‡"§&&¿\³ˆ-Ä{³úQLòйœT°³Ç+÷£ xùÅfbrÚ p(rq@PaòË©ºØ)¼7«Á+o<¥‚/<¼ððÂà /<¼ðð‚ã]ƒó¾`çÒŒón)Øßtküï¶19[Œ]Ú‘‹+ÉÎäSpnuˆÁù¹\èv%Ù­ ¿rg!º/4¡ÜרÑ_õù›¹'Îý`ÜרÝ_®¦:“OŸçNwºõ»]Çvk@á./ƒãÜáq‡ÇwxÜáq‡Çîkœß2üœbœÏUóC‘Ç26÷ƒx²Ø2½{•G}XóúËÊ£¥cwœb ÏÓC‘Ç26÷U²Ø ½{¥C}Xã!úËÒ¡¶,ãààƒ8xààÃkp?9ÿi—ö|^ßmºÏýyEe Ì“‡.Ê·µ?€*O/TžÞEùé]”ŸÒÊ÷|^Ýmº÷xÊ:\&]”oKS8^.ÔÓ»(?½‹òSZàÆñÂà /<¼ððÂà /8Þe;>Vpƒ%þ+_ë/÷i–ãÃä4¾)?|¨0ó+¥ÓoôÏø(ÁyWÎ{¼Å»œ+¼Á{ öÃóìé¦üð¡ºN‚WÍšÞèŸ=Þ58xáá…‡^xxáá…‡ïœ÷¥?b©Ôx9úgI1¤T*k)ôìÌøØöôXl‡UUú•‡“¬ÃdÂýK¥ÆË¡1™>}°Kž›Ô|ÂýØs?Ú`O}XE©„»zÄ1`&Üáq‡ÇwxÜáq‡ÇîkœOÏ%±w+Éô¦$öoj‘)%#ùµ"J§iR¼ëæúm•'²óDQ~÷Pâ-Á+‡Çýt¢qM0ðÂà /<¼ððÂà /ÞŸòßîò7«Nxµlc_ËV>âò¯YY¸c[Ë–ªzpÚ¬._y(7lHµl{¼r3€áÕ²íñ/}z(Ww‹÷àx¹<ÒŠ€à•ƒ³TËfà…‡^xxáá…‡^p¼ëÊy_Û2ßàßž|vïä³[‰»c?»ª«ÑÕ›]5¼ÙUÃ+F#àŽ.živïL³[)¹{pGWã¦7ÔjxC­†WMf€ƒ8xààƒpk¨Þ9äx—©Õ‘‡úMám󇬆wÂ8Þ%½ôD䡆Qcx[èá…‹áÆ­ƒg<ë°ný`÷EI]¬ÓçËç`òÆ~ºôtíR8¹r)üƒõRø|n¢ò`.öõ(],´'àøžc0yc¹]zºv˜ˆ\ºDeÖñþÖ9Á*8xààƒ8À-¡òÜ—ÍsëîBå¹/jY;d;?/o@2“χl]\«»ÝWJ#??V©ûÜAÁ-ßûÜAÁQ¹xø™|>_éâÂìüXÍñ85üüX¥î8xààƒ8xàðÜ?¥î')ØÇŸï vÖuÝé•Ìœ°Î¬¾òP=ã¯üyõG >ĹÁçË ‰eýuzµ)'¬³%b°z¤¿7x]¥Ã3žÁð †g0¸Áëj*y!b?×F¶ø•‡ŽµO¯Úâ+…©Ú‚,‡ˆýàu("1X=~>½zb°"¤zÃ`xÃ3žÁð 7x »œåT±ø$¯×ÑÁbÇ^j'~ “eŠ$st¯<a¤Ñ0[>ç³~e{>Gf-Q‘‡šŽŸÂì"É{ -ð‘”4ÛÅà<>ðøÀã8Ÿ5¾íSžij÷I^¤ø6˜œE˜»ŒÜ³x+¨â­ ¼á,ÄùC<<'Îó/c09{7ï’eÏâ-­Š·´ò†³ÎÃsžóðœ‡ç<ίѦZÅõç>ÿLÚUÝYŸçhòÐùsõ–CU *Õ*o?÷9ÖÔ`*ç-é5y蜸zë™*ÅŽj˜Ã3žÁð 7x í9 ÜÜ1µÇ3™Û!¤‘I~F¾q)‘{ïÐAZ/sÚãžÿöRu‡$?#©” m8Ï!xÁsÜ¡õ+ÛÆ¸Ì¹©õ8û».7íÃä]Ê™)DûCü.¡·ôåóÛç…RëÖ7¸¿k1ÒèÓ»”üPˆ<ö'öefæ¹Ü¥Æ­ƒg<ëàY‡·Öý”óO¾ןûª/o3™þ±o59˜¼\~Ƽåþó§ "EZx‘ÖÊ}ý+ßÄã¶Äãmj&;Ö ²{;úvÓÛ‘øÛ!±·ãȬ•á`òrù÷oÇ1½‰¿r8‡έÄ]òvüÔ%nÆßxo¼·ÞÛïí€÷vÀ{;à½`oÇOêò%¤甛»¿,ée¹+•Ó¤åÏÍ"<½kb\N&œÌòÀ$‘Ii‚÷W.,ÕÓsvÉÝŸ†ô²¶’ÊiFïçf©žÞu¹ð&ŽW<£`xÅ! ¯Û“´ ã…‡^xxáá…‡^p¼ë²ߣú’Ðxaòã ÉmtÍ^xÌÎÅè$çCôʽÜ9âØ;d1næÇòmàË^äÊν*s^,qeÎËgqçá9ÏyxÎÃsç×hSž'~^¾÷Fä±paõ<Ÿä ‘pQ¼pQžÇ-^^›Fä±ïÝêfά“¿÷â}ïqëàYÏ:xÖ!`ÝúÁîÒ?Ò§ˆËƒúØkEο÷.ÉC˃ê-ê»ïË÷¾M¼åίŸL}ì9ƒ"çï|—ä¡åAõ–õe¸Xþ@LJç<<çá9Ïy¼uþ'¥?ŸzùdÚóÌÙ»“ð}ëÏ)^×Z-µgùåºV›w0˵]³üŒ«æ-NÚóðлCê=¸ã¯k­fÙÜ‘´I œ|¾ßž žî,âààƒ8xààCܺ0ëÏà î¾÷ÎÊUµPÙ_†ÊÄäs¨<ÕÌ–î…J¡?v¾—;¡²?÷­¿ûÞ;«¹ÔBeùÅ%&Ÿ¿¸SÍlé^¨Ú,ç{¹*ãààƒ8xààCÜ*…þØw{Ø—ý±ó‡ÈcI€c¿ªLb¨Π–IηÀY’‡RS†P…FÔwå\Ÿ8^9Upì—0I ¨ÃÔÂðÊux¹%C »q¼ððÂà /<¼ððÂà Žw ΧœßöB/L®O2¹˜R™ðøÀã<>ðø€óYã›ÐÿæÊ&¶³‘Òí’×Z?y­õ“×Z?y©ÅIèse³wþ ÎSylÇäuæO^gþäåÎÃsžóðœ‡ç<ίѦzѦ¾¬ƒ¨L¾œÚjÁªZíg'ù¼æêY< ®V»ƒ¯<¶«RH«^H«/“î+“/”ZD¬V“Ú-ÞƒãåO4E xåµ\•âfõâf/<¼ððÂà /<¼àx×àܬ©+“¼°Ë²›¦ˆ©yÁY£P%yè®í.Zˆ®R2sjÖlÂçHZWCÂGŽ®BÓý*ÉC7rwÙ®Bx”²‘ >ðøÀã<>ðø€óYã[÷®çºw×ßÅõÂ䡲—Ìü•‡še%/™9uïr°{‡týÝ!P/LÚh{©Ôœ¼ÑöR© pðÀÁýÒ‰ 1y$33—Uu•Éi¤ÒÓ#ý ÒðBå>¹«;ðñ¼E»´7&d|p¼ ª29ý`‡ôôH¿‚4¼Pß]·“k‹ÒDä4ÖÝ•å±ÓÓ‹uû6ðÔùõƒ=ß]-6útmq’ˆœ¾ówÕ¹Äyy]wzÁ*î<<çá9ÏyxÎ#àümòÇ\’?ï¢ÍR2“?l§+²MòÈFöÚ³—оw^ž)Bœ§ïüRKCœ?ÄÛ⼺‹Ì^B{öÚ çá9ÏyxÎÃsç×hƒçIwáVÏä ë¾5ïÛËç®e¯e/>{íå3¬VN{p÷O´Õ‹™€SoR÷à Ž?=rb–½öòV'(G[Hæüîs¹è#|Ôãçü.Û{ÉKøÈë/?KÙøx|àñÇx|Àù¬ñ­X) “<Òñ,{éôÙK§Ï^:ýÞ:9I€X§^Óg/>{ùðÙˇ7¬ƒg<ëàY‡€uë[½óØj5öÏu;ºêCGÆ$&?#ë™ú.£i¹åŸä‘Œ¦¯<4‡:{ùðy›Q›—½ýÛ¡ŸWkzÀöí8øÛ±ÃÔ—CAØÓµì›%•€¼r<®Öëì¥ÓïߎŸ¾„ÝêkWkDñvÀ{;à½ðÞxo¼·äíø]ÉõëR{þËr·Õm/S°“‡ŽîÛ»^šKáù$†5ï4¬y ÑöüYßíÛËLžÄä¡£ûö®!de¿{ì®y‡tÍ[ÇÁÁØÏ©<]LvÍL>í"³š~6ÉÏÀ6ð+m‹—™¿ç~4±Õ|ñ2ó ÷ƒq§OS.3“O¿bV“êwuH¸«¡²xuwxÜáq‡ÇwxÜáqG€ûçñ\œ~¬ðfø&׊Ó‘K—æiù:ÉK`Y¼ª„â5ù߃;º8•€c{™\âàøe"réÆ2-Ã\ 8uZ¼ª„â0ÀÁÈ ùÝÜ…-¸ƒƒãòÈþ€“Cez*—`=’óO¸„ûÑ“GÖ…„»zñP½’ê• Üáq‡ÇwxÜáq‡ÇîkœOïªæ—ƒÄ¯œ7Ù¸™ùRÓ~ÂçG\ˆzSj²«7…¡JSö|x}ùrHøIí²çsP>kLòf@ÔdVoD•f@|àñÇx|àñç³Æ·lµå¬Ùºg©ùñžå®É@ÍïòdZgòÈ=Ë$\å±ð¸`±4°Üã•›w¼ê= Á{$­—ÁK)&¼‰ãUïY^ù” {Ñu?_aisià…‡^xxáá…‡^¼?©ýI—{–Z¼à\Þç¥A\}ž¾qœËs˜¦Èù)A¹—;ÛüâÅÍòîÃZÄÕç ·q³<÷âhŠœï×ʽÜÙh/¤Å‡ç<<çá9€óëR°Z)Ó“\Š6KÅhõÆg|塯¿Õ«k¨R]ÃÞ`9i™L_í¥²³z(ˆÁòéWQ¥²Ã`xÃ3žÁð 7x û¼ìuAÒö•’E›Âð•ÇÓÚ¶#ѧ‹‡iÞ‡Ú¼Ã4¯ª¢JUï¡®zöx¢Íj x峸¶mCñò§‡ÎâšwçUUT©ªÂÀ /<¼ððÂà /<¼àx×à¼ËIÿAûÈÕþ®\ú0ù`9Ï7)Ó_¹r%ýßâñdòЕt÷®¤½±õÝØˆ¼ŒØr?8÷5vôwÝÌ}ú`Ù²7¹Ô„;»šœ¹'Î]¾’îÞ•´76¢¾Ñ—õfœ;<îð¸Ãã;<îð¸ã-÷ß?âçõTplã|ûB×á¥V¾-©D®tvúï—oLŠóËóËóÞЊ-÷ƒs_£ÍðR6ßUT"—ú ÍÜç.ÇùáÅùáÅyod†ÁwxÜáq‡ÇwxÜྮç·U6øˆü&¹t»ŒûÊigæÛH{z9ð^•M=•¦¤[ƒnðúYŸïŽ —ykÄ`9¤^»WeSO¥y¨a0<ƒá Ï`xƒüO“϶¯¸|ã7‡Š“¼±ûå!É#óÖ¿riËŸzeò¸0šä‘ÆwÍÒ¼!„ûí vÏýHâA-á®NR'ÜÙÖoæž8wõ‹pWÛî5oDHóF„Üáq‡ÇwxÜáq‡ÇîËR°yÕF“<çñr–SbòË$¬Ý»Mò¸w›ä‘nfÍ«6j/«–ôÍæUí¹ëq/gú$&¿Ì£ÈÚ…á®^Èîê–¿yÕFíeÕÉ’×Ù¼j#ƒ;<îð¸Ãã;<îxËý߄ϖž›öß­çË´:”Ö²-YU¥_y¨‘u{žori“·¢NÏÍÛïVÔ‰eJËZâ¼Z×IœWY·ç9·±.ykÚ¸óðœ‡ç<<çá9€óëª2oÛø¨IíeíOû0¹v‘”ˆù•‡ÒË›7ãcëüQÔ«œö²n£Ñ§kGú‰ÈC—Äy9ÚxC: çá9ÏyxÎÃsç×h³Kìÿ©ULOjåUzR^£Ís1ËíYeyÜ„&IºÎø• Ae[9Á ^?¬òêž07úô9,«þ$ÉC×{ƒÿ‰qƒá Ï`xÃ3Üà5DToûS·?·MõyEûÆ÷%$K®ßÞ!}›RË·G2õy¹ EûH÷% õšg8Ï!xÁsÄ¡ßé¦åzȰ‘Ô?Äm?Dµ±ÃäDäÚÀèõ”À›m1ÉC·~ͪ2›ä¡Ãäæm:öéÿI]ìÓÿ)÷u×ÐÞ-ûáCÕk„»|ë׬â7Â]Þò4oËç;<îð¸Ãã;<îp_WSý¹{ÀÁ÷òX¤í^¤íÖ¸êÖ½PÙŸ‹Ð—a/«î«n ŒnÝ‹6qëàYÏ:xÖ!`ÝúÁŽçü»í7ó¢ ïög¼Y×ý÷ÚT&esy3/š7ó¢ )¨Œçêô»½›7ó‚à•¯˜Æ«?ãÇ2ó‚à•#¢7ó¢y3/öxÿ |q¼ððÂà /<¼ððÂà Žw ÎçsCû»­ßù®ºviøü•¯“1¥¡ý$Ÿcp¯âÉØi•M5/™¿I#3ö|ަ^©ïª!{ú:÷áPÚïù”•‡Ê›šW Ф‰x|àñÇx|Àù,ñ­žÏÞoÊ…:™¸‘µfq_¹ØÚ%3ùæ›™›»Å^Ó‰ïÒNº76b’Ÿ‘µ\õÖrû\ujÝúùÕÇÌÌ»”Žî „ ÖÉ‹±ê-ÆâÖÁ³žuð¬CÀºu5Õž?Ø»%A³šÉôÆšh{7o CoÖ̾îMaèÒ†=ŸƒòY?¬f5}Ùó9(.ŒQèͺ׽1 ]£`ðÇx|àñÇœÏߺß¾òH£íýe[&Wš"þ3Ò´{IûÝKÚïws„ðØ¥ðؽð¸Ç«¦Ñ¼¼‚ŸÉÅIìÉCK6¯° ßµ½¢k—¢k÷¢k/<¼ððÂà /<¼àx×༯qhbÃ$/,ͬIrßn³Ô†5€l’Ïw¿sW·Û¥ïð‚óð‚³Tã°Ç{4±Æà=^.gÀm.Û°mñ/z(8/8K5^xxáá…‡^xxááÇ»çÓ[9Ÿï&Ë ¹x)Ìž;X8ŸNE;jö|ô¥ï»ú‰ÈÅ LöôØÁÂù¼q=yìd@ªq0øÀã<>ðøÀãÎg‰oƒŒKÛhOòHÃÃñ±Ÿãó®½j>™¼GÈ’¼MøŒÏr»çsP>kL‚uÃ5`%o¯8eHÅ)x|àñÇx|Àù¬ëØô|ˆz³ÑþÊCíIÙhdc¯8eHÅ){ƒfðºS&«;å½ÁòNy$ë qxå!C*1 †g0<ƒá Ï`pƒ×‘­¬¼IÎR¦ïš|~åZ“ÏZ™<´WÍÞ^Õ«ï^}Çœœ¸wPpËG»5ÖÊä¡Ífö6›^yÈðÊC pðÀÁ";åºMøAO«wX­\÷¯|se#çí´†ujÌ eb×>‚—žÐ/}š ^yŸ^·!/—‡«•*OðÊÁy?Œ£/Á9Ž^xxáá…‡^xxÁðþäþg\¾ñ}%Q~&ù‰®ûJ¢.ŽûÞ(ѬõãÝ,R–¸¹¯Aéb*q^|û”.ŽÞ0ŽÑ¬þöãåT…qmã`8ÏyxÎÃsžóxíüOiÒå“éÛ†`Ö¡´\{Î ¡0ç.Úôý­ÄhÓ­)öÇ1¼q[çêüQ“)ñD~=­‡mº5G~xÓ4†7MÃpžóðœ‡ç<<çp~=Ï(wϱmë>ƒ»kk0†5K}xÓ4ưzÎ ošÆ*Mö|ˆÓ̶|Îg½'ÖÄõáÃÃj3¼qC*1øÀã<>ðøÀãÎgoçó°¡›2çI®ÍSND‹o§w2vZ]_~å/VSm=ó:ŸÅÜT çÕA>Äy9rÞ¡Õi5!ÎÓ|à¼D…¸óðœ‡ç<<çá9÷ηóOž?™óómnVS'©¼ÈÚ1þù±¶~_yh55É#çð_yh5õ+^MíùY¬ |haçrOø¨DÂG]M>êA:ᣮ¦ö|ÖÕ”Áx|àñÇp>ËjêÄË“ðÆä‘Ù‹_¹Ò4濟½3y ¬¦N¯âàô*N©â`ÏçæÔ¶1ydx"áÃÚ‚Ì|磮¹N¯âàô*N©âÀà<>ðøÀã8Ÿ5¾%+GîLï:,G÷g²†‹oë “ÏY9k'ÿ_y(øWþb³™Ï%ð%+û€£%éËÉ?§;ߦù&Ÿ/ð)8úôP:1GÏŸûõèÞòÞÍ›ïpi¥ç<>ðøÀãŸÍ‚¤>Ÿ½ß}ã••1íV’ÿŽÂ䑋¯\¾S“·@&ÃWÛ»½±$yîÁY]UVÁ²ÝÌà'ŸyÕwsWjcòHq àäÅØÛáKDŒƒƒ8xààƒ¯Áý¤zM1=½Ñ“\8æú;Ë–È#3g¿r-§"u&Ýå¼è¾ÜË£73ƒ€c§%3¸ÄÁ©Ód 8š:“GŠî 89T6oßê Ó0ÀÁ¼a<ëàYÏ:¬[?Ø}BîåíîƒÝ&äþœmì×$ÔúcJö¿÷aå‹~塆B§—îóáÓTöx,•-ÞƒâåòHAáïAñry$)•à•À¼tú“¤Ó/›º8^xxáá…‡^xxááÃû“ò\¾ñ}6~ZkñINwŽwáñ´ê}¾òPqâyz«©}R7³níÎM¬;ÄêBb|NuZÕ…çé­¦âÖÁ³žuð¬CÀºëjê?ó·ÅÈU;TŸåÒ¡zoL~²„Ïòt©=#{zd¢ý$ç«)ɺÈjê¯ü±¿ÂïÁñ^¿K†—žàöÆä'ËGü(O—Np‘ØÓ#í^ñÊ’áWSïÒÄÁÁ /<¼ððÂà /<¼`x×Néƒç³©yù'"ol1vß„dþ¡È#«©¿òøjŠXw0ëŽÉºD­;¨uë×+äqEYM1ëÄÕ”c<ëàYÏ:¬[WSé9ënIÞtù[ïÝfùÒi•¤—'"¿®¹²”^>Ëç–6Ë[$Ú$o1–¼h“žS‡îÖ éU¸åÚŽq?÷k†ã~d);}ÏýàÜéï9óbÜåUZòBeœ;<îð¸Ãã;<îð¸#À}óûÜø© |–kS 2‘ó¹NUyz,Ò S ¤ß=¶íÍÂ%ásP>kTxÛÃ>9ŸT•§Ç"¢ÐÃ^úÝcûÖ,Ü8|àñÇx|àñã³ã§Ï>ú²’¼[M‘R‚S<Ö+/›ê$&$€Íò@?ÕI‹oûYëŠoÏç¨âz“¤ªŸâ¹\yÙ&1y Ï‹ñ+9¾íK êr6ç<>ðøÀãŸßÈS._Yuòcgy#òÛS½S½ƒµ—Éüy =ÕÉP%ÖÔ:*}üÕ;X{›N¿D…êäˆ:ÖÁ³žuxkÝo“>ÔËKÛž'áÞ}°íÝøŒuEÑž³4¡<=¶ i^¸hÞÑV{ž¡z÷½·w£ÖµB{ÎT„òôØR£yѦy‡Kqçá9ÏyxÎÃsç×ãîE›Îê­•œðYN»ü}nN‡:;­ß'E öÃÇ‚UwšhMòØî©o“"êÒºÒ:+>„¼u†÷`x×Ã¥Îg÷·æƒýð±ˆØ\ ¯¼ùÚâý9—¸Ù½¸Ç /<¼ððÂà /ÞŸÒÿ¤ëRp8;³üÆš4x’kgSõdò@[›YhÁ:ÉcÑuH ÆáT1>G“ÿ2>ôìcâ“8ùì}8-X9<iY9œÒ#‡<>ðøÀã8Ÿuñ¹Of¾¤ÔÞݯï ÏFäâV73ù‡z5y:m.&ùfÔ£°ø<½ðxJáq÷(âÕäù®òïlD.îê2“Ï?ãPo6O§Ã+/>O/ºžRtã…‡^xxáá…‡^p¼KpÆç¹ø´ð9|^ üvKÜËÅàœ˜ü²Dƒó$´h›ä‘!éåÏÑ•ð9Ÿ%—ð¡{¿c¹øù%&¿,ÄèJø¨§•„¡ôÿwøÀã<>ðøÀãÎgop¦ÅÍòÆÂãä´¸þsÝ´ïå×(8ÈÉgL9ùœä‘kš¯<´v…5}à¯üùîwÿv¨³êØÛqd©6Ÿ½¼ÉM#òë7>ÈÉZL98%o‡œa-}aÍ> oÇz½m¼ðÞxo¼·ÞÛïí€÷vÀ{;@ÞŽoð‘žïÔîþ²$ëÏ“înð±ðiâÊÙ«m™ä‘S߯|ó—EøÓ¶Í±üiHÏ—.w’•&€ç6ÿwiØ÷é§x¹<’°Mðª‡Æ¯Û·xÚ²ôã…‡^xxáá…‡^¼?9ý©×àœ­;µINƒs½9ÉÛêÆœÄ]C~w%wV&¯3ç¯|“)D×,kdëNð9ŸõTd[nÁùЧkW>ŸÄù¨‡Æ„³t¬‘­;5ƒ<>ðøÀã8ŸõXc?£ˆùÞØ×³ ‹Ë¿â-ÿŠ·üó RP¤µ/x(bVøÞàY\€oV¼˜WQ²7øŸ7žÁð †g0<ƒÁ ^CÄ>9ÿ²†¹ õ±×Ê]Ò&ê›É§—·c‘&;Ïò9{¬^„©R„Ùó9 F˜úØ•ä.ë’ða“5Â~øÈdgÆG>ý«^€ªR€ŠóÇx|àñÇœÏßš3¹~–&ŸÎrz9R”§ó¼ (òX€jR€jÎèyf°8¡”|0ƒéÓyêy,Â4)Â4gv¼c0<ƒá Ï`pƒ×Ñ·½@?C /G!ôÄ䑲ô—Sc*“Gz~塦(ðÊ^°­‹Èm PÛºŽwýH_Îè‰É#e//QR™<Ò ”àU{ªÀ+{Ùã¿xxáá…‡^xxáá…‡ ïOî.Í<1¶Áy¨Gôã]MâL®eæ°§kÁ9˜<œ‡3Òë¯üÍäú5ìnë-8¸õãïRÞÆ`r--‚=]û.3ûÝcaw8#½8>¹~ iqpðÀÁË^5ÁÊ3Û;Pç—¥qžíYfçw^ÍIÞЄwÛ—¿ü†óðœ‡ç<<çá9·Îÿø“/ŸÌ>µùGœ€6É… h—fE‹œ­(>§òtmÚÒía’GòFRræÉÎò‰u/gv, „û!ŽF#ÜÙì¬ã¤Og‡?§òtmvÖÒ‚pWóQRrÍ2îr¤};³c‰uqîð¸Ãã;<îð¸Ã㎷ÜRúó¹Ô8¤l%ø¥ýÌŽT´"…”­²“ü²öÔæ†ÏòHò$?#:¿ ÔË0NÍüÛƒ;(8*u Ý‚;88.d6pr¤Í/#íõ0ÌØjÕ7%¯ú m³§Ëz0VŸsOïÖ •µ'Ò>ëê}ÖÕªoJ^ùÀÞàŸsÙ•Å †g0<ƒá Ï`0ƒð¯Ç\»ìéŸôQïÝÚ›ü±¿éD>¤ü±DäÊ1ׯLÉûÊCɽ“ƒžZ·~~'KdÐÖrçã’à6…÷ôÒðNï"n<ëàYÏ:¬[î ò6±?u±ÁÈ$T]å}]ınùórßš™|JÏHj´™ä‘}ëWZŒýÊh³å~pîËK¸«åX{îÄqq„;ß=e&Ÿ~Ť†JÂ]]¥îê*pWC¥ÁwxÜáq‡ÇwxÜà¾ÆyX»æŒm³ßù´ä‚+‘kÕŸ“Gª3¾òÐMPö†tdHñÖ¶wËçà|ŽJäZ%ýáC5„zc“½1RÜ„µo5øÀã<>ðø€óYã[²†¿OòåžDºéÎé]§|˜TxAøÈ ÆäÅ·$Å·d_7øÀã<>ðø€óYãÛ~ÖÃÜiõs"òs„’<’ì÷•Ç"Œ4maïÐAZ?“üü IÉÖ#É߸4ïÀpžCð‚ç¸CëWVž——¿ã•ÈC³'yèïx±Ž¯³—BŸËó_€K¯DÔG¬“ÿÄëø:{)ô†uð¬ƒg<ë°ný`÷)ô³u·Ëþú®¿b*LIÈ•eWíOEÚ‡ÉCÑFHà—¬‹ýMßæ—×% v÷ x×ï²¾kæ— “G’Þ£M{c¿{," Ùí’u±É6»Ÿk“^xxáá…‡^xxAñÖò§]¾ñöjÏ2—ü_åbñ5•§k v»×¼Å˜W>›Õ%cï<_é—Dä¯'®'êüÑÕûµæ­å¼þܬ>†óðœ‡ç<<çá9·ÎÿÛ)"ïSèso¸ú>“!±L†Ìä‘i˜ùå„:˜ðøÀãÆçŸúͼË@þoo ¦WïÎ!דÀÓjÝ“½´ù¯œ'²–{¹sï°ÍýæÎ¯Ÿßùî ©±§‡:ÿd/ëž8/ou½¬{ÃyxÎÃsžóðœGÀùåÖ£|ž5žn4Éé‚äf»W>ûáÆ§m&y¤ïÐ$¤"¯™ù(«©=ŸƒñYÓŸZóÂ=ŸƒòáòHÛ"ÂGÝlo@ù(«)ƒ<>ðøÀã<>`|þYM•}²zò&¹²šZ7›“\Ûl2yèV·À*ñþÊCUEÅËu/û\÷e®úïÑÅ£<‚—.–½*ÁË÷BLºÕ-°J¼ ^õV·x©ò…¤Ê_³ ¼ððÂà /<¼ððÂà †÷wärº|ãûLû“->—žr_yh¯:É{dõ˜¬6³ååð‚å joÝÁ¬;–¶lÄ:u³I¬“vÉj3[Þöÿ_¾Ë¸uð¬ƒg<ëðֺߵkO†BZ苃5'9=º¯’œ~»«¬ùÊC•5“ðøÀãŸV—þ<—ín“Õ÷9´² 3¹V£šˆüë~š•g]«ò»ÇrEºUâú•Ƕ·]Z¿õçùiw{´¾ÏX ™ë™ÉµÈDä×o|ÿvóÛ‘øÛq$18w/S¥[²äíc{—Ÿñ·ÞÛïí€÷vÀ{;à½ðÞxoøÛ±®œÇsàÝæz<7ïm×+^"×òd ‘‹ÓÁØÓc'ŸÃÛÚ{“~åFÎóžû‘Åæ½„;=3[ÆÐ—·Å…ÈÅ)Qìé±#Ñá8x#w5ãÚà;<îð¸Ãã;<îp_ãüi Š-'KÌÑNH¼ê’IZß^ÆŽW]²w^ž »wþ ÎSyìtõôÖǧ—ðãU—ÎÃsžóðœ‡ç<Î/Ѧ’ê±–m’×À•Mý¼¼OOD®”úþôT™<²ªüÊCÆ'y¤iLõFBTR!VÒîêMáÎob‘K%ª3÷Ĺ««JÂ]í`N¸«‘¶z#! îð¸Ãã;<îð¸ÃãŽ÷5Îï«l ®*ë»*›uÿ^Ÿ«l>§òtñÚ®0ùœ]•ÄÆIN×´Ò‹óx7²vI¨Ús? ®iëËúŒeÿ^Ÿë3>§òtñº©0ùœ—“ÄÚHÂ]­Þ!Üå8—o—Pç;<îð¸Ãã;<îxÍý'÷?ã.¼Ñ5Yù5Y£&yhAîÆøÊC-µkòäÞÌŒ=89ñ¢&k&'¯¨½™œi“·¢ö†iààƒ8xà·.‰ós¨l×3"ï‘`•½`•½`•½`•ŸßùvÝ^y„‹ì…‹ì…‹ì…‹¸uð¬ƒg<ë°ný`Ë6w´ ñ¬²¼¹ÿ÷¬²¼œ?Ëž~¹ènb‡êIÉýÊcg•Þ¸-¸ƒƒ[¿¸òê*óŸÃÆòr({ú寲‰ ® 8õ^†€“½a%8xààƒ8xà·†ÊúÜÿnXYNÐÁ‚à^áú•ó`UîåN°ªÏMÝï6b•¥WìmÞËCÓU‰uòÚ¦zá"n<ëàYÏ:¬[?ØöÜhåît{s{üŒÂäluq{ìÓ^ûäe’ZmVKÒ¯<¶z9}ciÿ·wœbzÇ.ÔŽQ˜œý‘º=öi¯Nò2Ç­6«£)'«·Ã;–Sâ88xààƒ8xàðÜ? ëvöÇoß9-Töçmà%†v&Ÿ7‹ã#†Ê¾_@U¶‹L>'¶\¦Véé¡HÛ­Dè_ù‹H[–ö1[î羆‹þ¼¹|ÉÉç- åNŸ¾Ž~'{™Áäs‚åΟ ÔÝJ„&Üi ËUfœ;<îð¸Ãã;<îð¸ã-÷Ÿ’—Ou<û¼‹óãå¶¹”[ˆÏ`òÐU¦W±R½Š•I©…¬CÚgçywá|¼Ü,"—RÉf¼‰ã•o0¼Â”ꦼj1cÒY@/<¼ððÂà /<¼ðð‚ã]Ï+Îç>wÁy—±ÿ“»8A¯ U*ä—¡M\EŸÞ]ÌéÝÅœ^p>¥à|>·™¸ ÎÛ‚ Ž—ÊyA$ù¥ç~˧wcsz76§œO)8ÇñÂà /<¼ððÂà /8Þ%8·w#cÖ¡_y(º¶ýȘùåB‘ä‘Âö±J›WVÓ^Yæ çÕÀ·wþ Îsy¤„°}¬Âæ¶ÎÃsžóðœ‡ç<ίÑfŸj~9P½YÏ´W¥%ÿ…‘Läën^Z˵ç⎻vƒ5¯½+îˉ(qþ€¶Jkï’ügçwþ(Ú2«=§Ùßí¬qxí]š=–v5†óðœ‡ç<<çá9·ÎÿŒºœ ¶ôœÙҮDž{y(5¥%k ÝWÚ»ýÊŸì:˜C‘‡2PZ²F‡ÔíÏÞ¡u¾ˆá<‡à9Ï!‡þ#Ò²uÇ:É+ù£|ù›^“km ‘_·)´1Dcr"ºò»‡Žw&y¤\´y‰ý[îú+á~äö™{âÜyyx!òëR½“thLN?ë®üî¡sÂ]^ÏxU wxÜáq‡ÇwxÜáqG€ûºw+ÏíjoÚqOrÚ®ö.T«w+l*”tÇ:É#XÍ«‰Ø;Pç—({çêü.ŠÕh{ïüAçòHWóŠ çá9ÏyxÎÃsç×hS_Ž2OLNïÝîÎjªw°\½ƒe¯*aoÝÍëÄäôÒãî°¥z'ÃÕ;öª ëàYÏ:xÖ!`ÝúÁ6kÚZkﺥBäb®,•ÏŵŠ'ÃÍjûó•‡R°&yè¤h;L"KPiÖ´5‚—6‰I…ÈÅÔH*Ÿ3Ý)^úǺû¼j Á+síg…Ô圪YÓÖ ¼ððÂà /<¼ðð‚àým?Q®gtÝjÜÞÖAd&o,8¹Ö>}˜¼Òk›7+¤½+dÈKÉØœÜg¸½MhÏLÞØwùQäZgoú»£g›7Æ£½¬DhKLêV›b ¶èhÃ;ŽòÒé›”No Ï`xÃ3žÁà¯[ÝÓê˜Ñ¶ í©7­“ùW®TÐÿDÊj8­†íÝØ…º. N«áÆÖùƒ;¿¤Ÿ¯*©°>–-qZý:Úù.‹é³¬gN«_‡á<<çá9Ïy¼w¾–낤ï3´ÑµhÓ?ÖÁZÿXC^úÇ:ûÊC ’_ùó‚doðA ^>,b°z´Õ?Ö,—þ±Î¦ˆÁê‚doðº 1 †g0<ƒá Ï`pƒ—IßwìŸÛ—]O^:“kûØÓC+ŠI¹,ë°.ËöÖÔº¥ÕCÇËÙg òÐ’€X§. :¬Ë2Ã:xÖÁ³žuX·~°ÉÚAôĺJIlÙz½g&}ï^^t÷ò¢{’¢B²ö{>GÀô—º{fòPPñ²²»—•Ý“z’µ1øÀã<>ðø€óYãÛ¾_ú|tßò>ÇG<ýÊCÙ;“< ² ² ö­Á©ÁëW–÷é,â)(1XŽ0Ù‹0Ù‹0YŠ0qƒá Ï`xÃ3Üà5DkúÌ$WŽ5ÖºõIN·sN±»Ë¾žäs )bµþ®©;–*ÚIi€9É#I/]è /Y PM P{¼GÕ²¯÷x"öXëï:ˆc)–%xÕ<>‚W^s È%ëbá±Iá1Ž^xxáá…‡^xxÁñ®Á™d_‹&¹4°c]þuï¿{{Õnu=êÝÛ«öðûħƒÖua÷®ö»·ÙìV×£Þ½ÍfÜyxÎÃsžóðœGÀù5ÚŒç:ý»h3Þôcù{gIäZ?öt©•zú4&­$½^èÝKŸîRútÏ%éw!m¼j¿q”ÁäZû öt©×öŒ7q¼òJÒë…Þ½äí.%oxáá…‡^xxáá…‡ïœOïÖãÜçªu´›äZ¢W&òXt=½D¯Ó[ žÞµÅÞù£jòˆó<Ù)y,ð^žØé-OïÞ!î<<çá9Ïyœ_¢ÍøDjlþ•óNžä¡}kW擃ˆ!íeycO5 'Ë1©{;Ç®Œ75 †g0<ƒá Ï`ƒÿŽ:ÆË©yËg2§æÝ¥ÓñòàÃä¡[¯ù¯ÜÙ»—³ÛÀälvÛ]¦;qžŸE³>v àµ)'ÎË{·¸óðœ‡ç<<çá9·Îoönçs´¹[œûhsj3:Çùœ_›½Û¹I]œÑ9ÉCÑæ|>h’¬‹-‡Ni‡w>XwË¡sÿaÚ P‚—£LD~ùüº8”à•CÚù|¦"Y[ŒÒ>0Ž^xxáá…‡^xxÁñ.»ÅócåÇž/¹/»ÅIéxö•_ê/SÖîXÏçdþ»ä·ÓKæ?½dþ=89ïö|Ù¿¼Ñ§G:žmÁ—·@òÛéÕœ^-€8xààƒ8À­¡rŸˆý#Î+<Á"¢”Žò•k»æš˜<²kžä#*á…J¯>wˆó ÷àŽ&6Î&àèÖ¯&&lº 89T •^3ÓãlÖÛP™öÇE\U¦} ‰Ø›h’GzÞ(S%°çsP>Ë®™ð9ª÷|Ž".Ó>ÝAì`Dø¨{öÓ%pJ£ >ðøÀã<>ðø€óYãÛ.'ü'¡e&OòЮ9ï£`f÷/…ÈÅÑÕ•ÉéJ²+¿;¿á•¬ e³œ^Æ–ûÁ¹¯ö6Ý{îã~"(W&§ë™®üîü^T².” sz5 wxÜáq‡ÇwxÜáqG€ûç÷ó ºØ¶î,/Ó“GFà}åÚ‰Aÿ0y$Gú+•ŸÞ<ˆ=¸£‹ éΗcJbòÈ>Žn<;ûÝC)Öœi½y8xààƒ8xà·†Ê}nüxË?Éçˆx6qË_½ãÍêozõ gµæçñ~ïüA§òØùdõÎ'½z³ZóÇ çá9ÏyxÎÃsï_çŸûz¨ðö.ÉùlLº¶nÛÆ"–ŸÍ»¶öFKœÞh‰s?Zb,!m_|uŸÝÞeŸÉC—Ûm{þUÄÒà³y—ÛÞh‰Ó-±ÇûS¯ Þ^xxáá…‡^xxááÃû“Î?åò“ÑÕö.Ïnûʵmï™™<Òxa’GZö^˹­¯Èë‚‘ŒAh¬•Ê#“źI:3“G:'>jýËéÕ¿ìùü´eYç<>ðøÀ㟟œ—Åç°ÚÏá ŽçÑ97 í“<]a´Åçðn·‡w}ó®ú&¯§‚ÃJU'àäSÁñ<ÿå&U}ûöÞýËËâõdXIè8xààƒ8¼÷“ñçRûsîkNu)øv6D"r­ñBíLºéöj¾òX¨|9™¢,¡r_öqªkÄ·‘kõûµ3yèªÚ«ê!àäPùv°Åµs‚8xààƒ8¼÷›V“¦ö¿ÿ÷¼kæßû,t;œäZC­kkÖYhû0Ë¡r’oŽ4wÍåWÊ„ÏAù\?kÆGlWÈøÐæO×®ŒxKÃøˆ‘ñwÍ„ÏrsìðÇx|àñÇœOZ¾2<·ÙçÿfyŸ 3ɵ¤ÇZ™< à¬åþÊãM'ˆós~éøÇœ³Y˜ó4ý¬V&…8‹1æ¼ØtÂqžóðœ‡ç<<çñÖùšNäOzy±D›äÜALòÈ%Â,\"LòÈ%Â_¹°J/©“.˜Áâ-3X¼`Ëë™$­gâÃ3žÁð †g0¸Áë‚d[Äñ;-DÉ!™åmDCj :ÉÅöò™É§mYKZ‘Ú,ï‘eqÌòÐrÈ*âØs?8÷õëÝq?8÷ëÑãΓg&Ÿ~FÎþð葸iq0îòbÌ*âp¸Ãã;<îð¸Ãã;Ü×8Oƈtéºv–rgyà c’KWåÓ™<=Éyœ—¬‹-D·ƒòº»%s&ºt©ËðŠ¹‚ ¯xÑÁð²-ÚŒ7q¼ò±^yþ¬%ëbËàýœ‰¶ÄÍ8^xxáá…‡^xxááÁûóßÛzݧ×wåFù³—k××JêY VÙÈ$”ü•¿Y×%nÖwsÍF!ríÀ»±§Ç"—U6œ—¢/LjÔe!wžóðœ‡ç<<çñÖùŸÔþ¤k´iÏ-¼æhÓ—ÅXóÂEóÂEóÂEóvÍí¹Óü»÷Dä±ï½yß{ó¾÷æm<ãÖÁ³žuð¬CÀºuï¶/%¨E<£ëÛÜ(RïèI¾nÑ¡Îk–_FpñM˜…QîåÎ÷¾OB¯E<%ëÛQÌÔy*_—ׇP‚Eœ?¨óTÎÎå^î„‹¸óðœ‡ç<<çá9€ók´Û6Äh3¶Ñ&}ÄKÃñmª$éïHxG=CŠIÛ4pÎgý.·38*ç_F•ä¡£÷á½ï¬fH‘+Îx|àñÇp>k|Ûgãu5uîO‹Զn–Èç¹=Ñêçùo7_§S5?ËC7ž§·–Ûç„u-·ç~©mã.ßxng8pîô‡§ŸõíÎñtÊéwy%yz+É8wxÜáq‡ÇwxÜáqG€ûçAJ >ZœÇË¡HD:%›ä‘ä·¯<Òwî¯Üˆ´ Iè-Òâåp$"²çÕ¬8â¼ë`Õpœ‡ç<<çá9Ïyœ_£ œrøYΦIÞÑMr:ß­)òPb?¬ÁåN´SÏNœ?¨ó\Ngs5EJì‡5™‚9/G8éŽóðœ‡ç<<çp~6éy{mKÿ?Øî”ÈÙâä¦ùÆ$¿ìa»xÄ7É#G|ðÊ ¾òÐöWîĺô¼—¹‹u‰%Íl—BäìôMïŽ=÷ƒs§?|èè^µá.GÚäEÚ8wxÜáq‡ÇwxÜáqG€ûçóóªòn»ÍÖ¾æ•ÝTg [7¿ÈÏ7¿U’GÊÇ&ù8«üÊCW9¿r!œççÔÝFy‹÷ x×xœ­ëå=ÞƒâåòHñÁ«I¼êMÐï?Q;Ž^xxáá…‡^xxÁñ®Á¹cM!!à ŽÊµšˆ \âà䋳êe{Õ(¨Þ‹5ÄÄvBÒ¬ºf4oݤ€JªF Ô¶]Q¼×a¡ /?ø¤òK¯x†—þð±’fÕ5£yËà&…Ý8^xxáá…‡^xxááÇ»çþ||}ßú¾›k×±/g ŒÄä¡ul÷Ö±ÝêæŠ.E×þ|@y ö|Ž&.W_ÎØ‰ÉCËÕî-W»ÕÍuÏçŸðç<>ðøÀã8Ÿ5¾íK¥ÎyÙ_o–ûR©!–Jaì·ã]<ƒV-ÀWÛho£½/²¡Î¯+³}‘Í‹ ¶ÎÜy.dãçåòðvÊqçá9ÏyxÎÃsç×h³/\*CÌH?­n®_¹¸Õ¥òK°ªâ^õ|¾Í/÷r'ÚìKH˜óÿd¤ŸV›Wâ¼8‰sïüÁçò3m¼âÃyxÎÃsžóðœGÀù%Ú¤Ïópá›Ó¡ô®|æ·!‘Gn·ÓçÝÖ¯°§‡¶~É+ÞùÊCkIä±Ç{P¼Ëg^VŠÉ#×ÓéÝœ‰£°§‡vŽÉ«"xÕc’æ€xáá…‡^xxáá…‡ïœñÜ0ð.8ãemã`r­›+{º6…¤5&g<gɺXp†œñÜï.8ãeß`r­Ý'{º6p£5&g<½’u±à )8ÇñÂà /<¼ððÂà /8Þ58§Wûô–¾é]xL‰ÉkàR8yåQÉ+J^yÔÞy¾[\W¥éÝ«“×À}mò ”’W ”¼%ÃyxÎÃsžóðœGÀù5Údo)¸à‚¦•¥·%BT~iPݵ˜ä•¥l%À$¯D(I%B{¼úRp?¯ƒâ]J„ÒÛ*¿ôbîZLòJ„R¶`’W"”¤!/<¼ððÂà /<¼ðð‚ã]ƒ3™ºrŠÁ¹°–rÒ o*^xæž@’‡Âc‘Â#ŒqŠá±°^ÒEn*^€FS@’‡T‘TÜ`xÃ3žÁð 7x »Ìóe‚ÞMaª!â®qÐ$[ݯü²%ûMAzzh@òj=Ò»Z¼ŒÙ‚;8¸õó«_Æ]ß!N½Þƒ;(8.L"H^­GzY2З/DOE Îç68/M¢Þ£ŠÁy÷HbpÞã=Nñjòmn~fòK £zò>¯¹NE Îç>8_K­ ¼ððÂà /<¼ððÂà †÷'å?˜¿ñüÙ^ ñâ`’GVΓ|®]ÍI Î_ù58-8Oòi}æéwÁy’GJ_óÇj?˜½é*[îç¾ÄÂ]]Ro¹œ;•_?ë¢Eí-÷ƒs§¿{¨ð6¬Æ‚Ù›íbp‡ÇwxÜáq‡Çw¸/‹ðìÕzLrmNåZ q&á‰É/‡¾â¸ÃIY„å¡Ex–j=²WëAðòU•k=¦™\\¥%&¿œoŠS ^uNðª‹ð,Õzd¯ÖÃÀ /<¼ððÂà /8Þ58'«ø$¯,8/Ëk"× ñ ‘¯kíý]ÛùaòÈñõWšµ½J“ìUšì¹Ëݽ ÷#‘þÍ91¹VÂUˆ|]síï›Nö»‡Îµ wurCöê\²Wçbp‡ÇwxÜáq‡Çw¸¯q>[ã'¹Tp½ ÿÊc‘6[‰ÜÙ«sÉRKÎÖGb0­‰mìé±–­DîìUšd©ÒÄ0žÁð †g0<ƒÁ ^C„0¦Ülu Ë®’¹s±Ús岯-þˆ¦ÜäF !BªõÈÂÌŒr³Ù,,•GJ¸&« ×{ƒj0—Hˆj= ƒá Ï`xÃ3Üà5DÔçÎw[žº_Eäýn1õ“Ó!Ñww.ûZšÅ³¸ê-BªwçR½5L•T}.‚¿ÛÙìñ{¼ÇŒ7q¼¼˜3ùåû¡xé[Uïj¥z+¨*…Ç8^xxáá…‡^xxááÇ»ga’È]pnÞ}zó¶xÍÊýÊ7ÑURqJ†=Ü…Çæ]\7o‹×¬lLb° ¤ÚÃ`xÃ3žÁð 7x Ý }{¨ÿQ·xýåi"r­²…É#•5_9_þ•{¹s\߽г¤ÀÁq¹vl›ˆ\+AaòHa'Ÿ·wï¼½{!-8xààƒpk¨Ü×õŒ¢ÕêNr-Öe"— sPØÏcwzX•Âyx7›Þd=¸ƒ[Kˆ 8þÉd"—j2fp‰ƒ; µ5 àä„’á]Mzƒ9 pðÀÁäZ“[&¿!ÎG[ÞŸ¥ÃUÉÖ@–IŠ0Ù:Lþ•;[žl N%àÔòÂ=¸ƒ;&p‰ƒ“#Wö"W¶“ 8yÇ”­¹«8xààƒ8À­¡²l»‚@,HœäR¡J-DγЫòtÞ—Cúác«)) }kðÁ ^¿Ëò®Ž¢"çIÒUy:o„ ýð±Õ””…n Ï`xÃ3žÁà¯!bŸÇúÓÄ Wµ:B|å¡B•²ÏB?ÕS½í^µÆÐ—ê­¦öàŽ&näªÕë€S `öàŽS\ÕÛFVkŠ}©Þj*8xààƒ8À­¡²Y½wŠ—>É Ô·±®YÝo¾òÍe™°šÚç„/…·{ƒåî7ÅË 'êÑV³úσåÕÔ>e¹.[©fõŸ)^N¸a0<ƒá fðOêòå=ïÛ ×G½Oïo:ÀüÓ t+O²ôw`JaòHždéV˜I:Úz—R^ʹ¶™ÉœûúõöW@Ö†¥[i–„;íR “GÒ,K·:ÀîòZîebóX.ôâÜáq‡ÇwxÜáq‡Ç¯¹ÿ”ö']ÂÅx¾ƒ¨ó-À8‰œ­ånwÍÚ³<ÉÓu›¢­$½„öâ%´/¡½Œç£ìùwŸÀ%îhâ®yX”÷àŽ"¶)/^B{ñÚ‹—Ðn€ƒ8xààƒpë®ù|n–uw]{Z¥Ð“<¬N/GÔËHß[w0ëþ¹0=­"gb.N/ÉÓK)7¬ƒg<ëàY‡€uË[÷9᧘¥9É#…É_y(Ks’G6¡“|¾÷êå„ï?N1}“8¯VçÕôM⼺ $Ϋá¢z9á†óðœ‡ç<<çá9€ók´ÙgÔþtíP}’K'fk°›ì'¥”W¼ù× “GÖ6ÖNêWî«=¸£k‡õ=úXcØP·CIU'àè´·^˜<²²ª°vRœëâààƒ8xààCÜ*½öò5±ý–t;PÓ›X÷ŸúÃä¡X—¬}ÜWjX½Ìü*eæW¯‹üïAñ.—/û°ŽÌ~øXDLÖ^“àUV¯. JuÕkoà…‡^xxáá…‡ïœósrÈÝbìeOøT˜|Rm¿òPrÈWJ©ROø½Á5xýH_¶,O…ÉG Õ–,Ç·l%‡T©'¼a0<ƒá Ï`xƒ¼†ˆòî`mýÆËËn ‰ÈCÃ×jÙÙlêÁZñÖoÅÛêo«[Þ­±£¼,ùOD«¶wppkì(Þʬx[Ýâmuãààƒ8xààCÜ*ë«Në,³Z­Ê£êÕT¯. zu{ëx‹‚eX­VMQõ2ó«—™_½Ì|Ã:xÖÁ³žuX·~°ûÜø’ij©öXFt{ß^^&M5omӞϦʽüM¸X2W÷à nýâÚc5Êí9|{yó5˜–(÷òWÁj9Hƒƒ8xààƒ¯Áý¤zÍ­ýåh°å{ï-nîrGë«Æï?@còP¨ì^¨ìÞAS—Pýåà+09kàr—"Zßµ Ÿù$ÎGŽˆÝ‹ˆÝ;§êÒ*-Îx|àñÇp>ëRpXe’“\è)úï)ɯ옫2ùe®™˜?ÉCé^n|õrã÷àäòKŽ5Æü甌¤X3pGeòËH+17ž€“Ÿ—_½Üxk|+ïf¶®ÛÞçÄþÛ§—Zÿ•‡Îá›—Z¿·Žþ\wŽÏÚ·{7/¹X'¯g¼ävÃ:xÖÁ³žuX·~°õÝj#ÂGŽIÕ[T)ôÄùÀã<>ðøÀãÎgoí¹=é݆«í²ÖTç+w2“_†z¨Ç;Í;HoÞz¦=·©¼ÛJí?²Ö‡8Ï2“_†;¨Ç;Í;ÊnÞr(î<<çá9ÏyxÎ#àümHBû‡%´g&oä8÷öx§¿ëKSO&¥%x í­?o¾ò½Ü V$“š[ÃÅ>“êYt×’¤žLJwð2Ý[Þ¿ä{¹ëâààƒ8xààCÜ*÷¹ñMœ¶6É ‰u·×v»&Ø?Hj¤/;Hd&OäÒÒϯí¬{*Ç*÷)ÖMœ¶FÀê­ß¶{9Gåb#‚Ìä‰Ü|AúáùÝÓƒuo¾¸z-¸1ÀÁØó¹1ìMEù$—Þɵf;ôégä„$öR¤™3“³;ÇôQ~øØÚËÌ'Ü®¤î´=éÙ˜\kùBŸ~FNIr{!Å…939»+Kå‡íß½ºƒ;<îð¸Ãã;<îð¸#À}Y÷•2É •wS5û¾¨³¼KOì¯Ì©ÈÅuaò¹'Ûåj½IO?+êî ;Øs—“N÷£hÃ>÷ÜÊ?}°hs*rq]W˜|î F¹ó§Ÿy÷F-Üáq‡ÇwxÜáq‡ÇîkœÇs÷Ë›õ|Ç›¶?hƒÉ{àÒü+ç‡ä‘Kó_¹PñÜìðfáL fUà³Á‰¬Þzƒf0—Gn½÷ÿ¹âÃ3žÁð †g0¸ÁkˆØW% Š!"½°¾åìûïË­÷Pž.®å¨ür[5oŠ$¤Oò3 öÎ%@íð)Þõ#Mï¦/£; Þ#k;{‚—ÿé¦òËÕÃËå‘,e‚Wûøu Pq¼ððÂà /<¼ððÂà ‚÷÷ö¾ÔË7žŸ;|Þíósp¾É‘îÙÊ)êyŸStjwOÝ+â˜ä¡v~·Ñ^Ãn~ny·ÝËÏßåM†6§¦$íÁýácq3{;åüòêj ¨qpðÀÁðøÀã<>à|Öø¶¯ý¹tŹ PBõÍݦ?ï¡ÈckiœÄÞ¡ƒ9ôOˆª%î!ýy} E[„H ‡à9Ï!x;´~eÃûʆ•Ìü•K#cÒ22f’‡–ÃêOÒ½™}x_ï°Ò‰‰ó¬Ò=-Ã`ˆóòøaµ7éÞPÃyxÎÃsžóðœGÀù5ڜϹwËþsŸGQÅ”Úóåž%9oÙ”§ÇV^éD÷J'öà ný`÷àŽ*æÄž/ˉÈy‡Ã¦<=¶ÐñjºWû`€ƒ8xààƒpK¨d¤BÖnúÆçÍñÎRcòȺn|^6ÆÌL~éª.FÚñ<Ðá®Hí+ßDÚç½ÛØÎÈíP Þ#kz/;}˜ñ&ŽW]<¼¼ocfòKm1çiwµh¯ºñÜãý=v?~/<¼ððÂà /<¼ðð‚áýÉýϸ|ã°*Ë&¹’N|#o,_n\7óD®eq°§k³0ReòHÇ$$¼ XËà=w¹²Œp§‰¨\ÞXÖÖ¸nh‰\»ÍgO×f"¤Êä‘,Â]Í—°VÑwxÜáq‡ÇwxÜáqG€ûºOV·Ã‘XCé¼â+×òåòÉä¡ep²ˆMòÈ ÈØ×}Ô%¤%«'âžÏAùP¹–ß”O&­c“Õ'Œð‘—Á¤pc =ÉêœhðÇx|àñáóóß6!]Ò‰G~®œ½¹ý™ä‘^4_y¨Ýô$Üþ oþÅæ_ì >˜Áë%1XmúB V+g‰Áê%ÏðX i€…a0<ƒá Ï`xƒ¼.Êóè²_;‰ò Š|=çÒõË‚…åÆÇà;<îð¸Ãã;<îxÍýŸ‚Äs—hÿ“›xß4É…¾Ð?y©(œäÚ®¹9Í¡º+T9½J“3IK×m%7xý¬Ó«F¼ÿ„óôrSWˆœ¦ÌÜUšœ^©ÈÞà–˜qƒá Ï`xÃ3Üàu)˜Ÿ;}Ý-H2[ñíÖÖ‘­Þ;gÞ®åÔ ï_y¨#ñ$äÙÛ5ççvUw+ŠÌþtïÏ“}z¤÷ÎÜ‘Ô ïœ¼ËVòÏ™½]skT(¯ø¨LI‡<‹U5|z7'©¸Y–Cq>ðøÀã<>ðø€ñù¤ƒËWVŸ/Pn2X&y$ø}å¡’¯<ÔµõôJföÖ̺5;„X§&ÏëÔëOb¼òŠV ëàYÏ:xÖ!`ݺ iV¿©I¾|ÖÚ‚¤½[Ô“GòOoÖÃW[H³ö|ä¾P{>ÔI{÷¯²>”Ð{z³yA"Íz0øÀã<>ðøÀãÎgoûr‰ÜÄøÖÙ¶L;›êÖ,›¯œw+-’<”Ñѽ£-oPÅÙ•9±{¼Å»~ãí´¬nÂÙã=(^.å}tïÌ›²±Ç»N“5ðÂà /<¼ððÂà /ÞgΞû„ëqÐØ$gI ·G÷à ތóåŒ,¡goÝ!ÎÛ[wqÊ ±N=ÞŽóíŽe»·žuð¬ƒgÞZ÷“ÒŸÏõƒ=_¶lZÞùÓ;>­Á[§7&ãôRèO)…~oðMG!yìù´ævÞ8‹ÓK¡?¥zÃ`xÃ3žÁð 7øºá*’B¯5¶åäÜüMŸä‘¿é“<²å™åñWþ"ˆÁGÒ:ÓƒñÚœ,†f°"˜Ábˆ /!Â1žÁð †g0<ƒÁ ^CÄ>•ôGkU4Ë¥3P¹ÖªˆÉ•?ȉÉËû#ëY8²žä‘t£¿ò7{–´D®=÷CkUD¸óÝ<¨\kYÃäRóƒ™{âÜÅ£pÆ]< gÜÅ ãÎ7\åâÜáq‡ÇwxÜáq‡Ç¯¹¯É哜³÷YNw>Š\ÚlþÎz$ò Ôˆ„r/ŸçÕcqâüA§rm“tT&¯‘P)4×/÷òøá’ã<<çá9ÏyxÎã­óÿœM•OÞ6À¼,ÛïV•y‚Õ¤‰“\;ÚJ&4ûåg$ÚXiä{çîüúÅí?š4Š€9OßùÄ~øH·^æ¼m¬I\ÛìS€³Öê9//NŠ·+ÎÅs^Ž6qçá9ÏyxÎÃsç×hSŸwRw§âõe´ID™´2ËçØ-a–·H°ªÞ™|ÝñikLªÏ«þ»CõúòËHDÔBøbWÆGiÕ;ÒßñùïÏð¹â|àñÇx|àñý~~Z¾~eíÝ´¸Q˜—’u±¥à)ÅÍ8^xxáá…‡^xxááÇ»g|¬¤¯I.Ì!ýç$p’–[•§óÎÌEZ âc¥×î—“¾ˆót|ÍrDHœ?’¶ÆsÚû]à#ΫKA|¬WÃyxÎÃsžóðœÇkçÿI1œ~S“ÈÆÍìÝI®ÌXÿI©0ydß:ÉÏÀ¬Nìå›Ö––¬Ì2‚—þÏô郜qßÌÞexÙHí” “Gö­¯z«<ÁûS—À—¬ô5/<¼ððÂà /<¼`xRÿ“/ßxö6žù1Gî.‡Ùª6šä¡èš­+Œ¯<]ó6ºÖ%¾eo{šs°îRP­š$ÂGÙºè |äð˜÷áq PÙÛÄÆùÀã<>ðø€ðùIíOºÜ±¢xñ­¼›-ž“³ÅççTž.n´3“_†tˆù3“<´Ñ.ÞÚÕ«wØs×ãfy7•zâž8÷ƒq§O7›™É/£"ÄÄÂ]ÞæoQëU[Üáq‡ÇwxÜáq‡Çîë!þÖã2ÒôæŠv’ ×näë\5)Ñ•U»jº>GZéwµ7Aõõ¾È€‚[ÃE}5gŒË×qbR ãÜ‘ÔÕúüÉH¿{¨? ªiãààƒ8xààCÜ*Ûó’øî{'à Ä"\4oÏÞ¼={»¹köìRÙÈÞàƒ¼~—¤»½Xk‹æmº›·én7›Â¦[*1 †g0<ƒá Ï`pƒ×±ïÿ_Å^s“\S^˜|r‹LÇ”g"cT>w¤+Y\Œ ýÿ%ë6‹1!@më ò öuUl)Gðò©Ô…ɧτã]w·ýå_~*ŸQ¼ôwç"%ë6ù…ð¸/iKxŒã…‡^xxáá…‡^0¼?®GšBÙÈ]„ïîÓ—ª“¯|m줅ÇñܲéTä¼(¯Ü˽ªP¼p÷ñww¡KÕ q^ÎσNEÎ ªÊ½ÜÙlƇç<<çá9Ïyœ_—‚¤lD6çË¥`br­ê„ɯÁª³¥`eò4'©±îôò¢O«ùWîÄ:Rp Æºóå""1¹V¯Àä×–q_ï­wÜÎþìÓªL&ÜåHç;<îð¸Ãã;<îp_â|ÚW t1K3}^] üþïîåk2¦”R>É#)åI`QîåF¤Ý;t1’8OÒ{"ò5‘NJ)ß;/§”'aðB¹—±Îpžóðœ‡ç<<çp~6û ˆón&y#Áêö{÷JH¾òм›IÉü• Ae_îqÞÍÞ࣋+ äUŠƒÕy7Ä`õmoð?±#n0<ƒá Ï`xƒ¼†ˆ}ÙÈe)x"һ̽¥Æí+ç©wUyzèš2%oE±ÏÙ§Ö­@z—µ©ë±3fJÖdJÞ’ n<ëàYÏ:¬[?XRJðÑNŠ&¹´ƒ¸ Ÿå, êú%W"WTý­£ òHVÃWº4œä‘ ®ä 2H$þ£îtÝèÓY*Îõ[ªD. *:&î‰sW“-wõ6‘p—wOÞƒ;<îð¸Ãã;<îð¸#À}óåyavs˜ÊsÛá»ÝSÙ <Å…™7Ä!yC’WÔ°wþ`ίˆÄyµ{ÀÖùƒ;Ïå¡u7Ä!ye†óðœ‡ç<<çá9€ók´©ÏçÒw_\}™íp29 w\_¹4ö4-åc“¼F‚U}Vù^þ&X%XÕçÃÕ»¶¾¼²?™œ½ówX[¤¥þ‹€“c]}þâò½üÍW¯EL8xààƒ8xàðÜO:ÿ”Ë»K‹þoù¥ž˜µwð³y¨j’_æÝ¨Wxí1¯ì.×â+í ›·®Ûæ³spë÷ÞÞí¤ÎF䡨=¸ãToÛcrÔ]²'/ ›·,Œƒƒ8xààƒp몒ÌÅHâYå6ÇùÚ@o(ržC{S¡ö sýÊm¨ìÞíg·ªMS÷"m÷"-™¨Ä³Ê-÷ƒr§ržGzSºö¹í”;zèR¶[Ū©{º{:ÎwxÜáq‡ÇwxÜà¾Æù}Þøœ|ç_ÖJ,Ýÿ&9í«üQž.ö̧òÐÔðâüð²\†Î÷x.†ó—eK÷?‚÷HZs­ôv–•‡®ž†·—c3¤¨Ç /<¼ððÂà /<¼àx×à,L$¹;¯8_g.áTN—Nk8]òFŠ$i¤HfNÜKœï>?*MT™.—Nkº\òf‚$i&ˆÁx|àñÇp>K|ËŸíyl“œ'ù¼Æ,I;dÈŸçøV$yœLòH›ýì•Tl?¸óËç·wþ ÎS9ÿ2Š$ï}:q^Ýhg¯¤Âpžóðœ‡ç<<çp~6xnët³_›äÂíÏß(FäÚEy"r±þ+3ù¼E[ŒeX…º_y¨P7{õ YªÙ¿GËyÉÛÁn*æ·#ñ·ƒ_ê&"+¥2“Ï¿"};èï*ç%o‡z™Ÿ½b–,³o¼·ÞÛïí€÷vÀ{;à½ðÞð·cýË’¬†3ùå—%±?§ç|ÑòôÐàÑœ¬)É_y(±?{\r’þ4$««M~9á£Ñ§)›==4x4'k3Á«¢fo€Ëï?±=Y­s ¼ððÂà /<¼ðð‚ã]ƒs~žåw·ø$UWY\öåì”à®?O~7ÿe¾±ÈCëöl%óçweSy =ùy Ýݺ”ÏdqE¾w@k°“_©ìw-©³U _Ö¿´e½&~;ÌåZJ`p‡ÇwxÜáq‡Çw¼åþ{*€ë’¸=×òß­ë륤ݻyÃ\²7Ì%KÃ\öÔ¡õ»l¬ïv÷äMcÉÞ4–,Mc1‚ç<‡à9îкšêÏ_ÙÝjªï‚èÏŸqÊÒIβÐïjØs^M IJzWï3Òòõöçwón=³uþ`ίc@‰óGҊЉór"P÷^U^ü ]³§ çá9ÏyxÎÃsïí.ŸÌxÞ»Ýí ÆóH÷ªÈcÓ‡w&ï øØ[w5opðøÀã<>ðø€ñù§/MùXE¸åóæÞíï”J"§ª*Oç9Pä¡eÅ«ƒ Ϋõ±ÄyvÿrÔÂäôÕ®ÊÓù]3yh`Yñê çá9ÏyxÎÃsç—ÕTñê Ê~´Ä[»¯¡`ÛÚåb°ò[XÙª“<ÒÚåWþ&Ö•%Öy{îÇ[»¯DaËýàÜùÓ#­] ¬4VÂ]Ž´xi¯ QÅ«]0¸Ãã;<îð¸ÃãŽ×Ü+ëÓ%\$똫¼¬JÈ…ÈC·ü_y蘫xóAöÖÉÇ\åeJx.Dº('ÖÉÑÆ›bXÏ:xÖÁ³ëÖ…Y~îä|·ºx5ä'} ‘‡Ú}LòH»â ø˜ä‘c®_¹òsßß»UÀ»y3ŸÄù¨í>ö|ävÅÄAø¨Ç\{>ÿ„ž8x|àñÇx|Àù¬ñ­Ÿ÷rßz*Ûcþا+r*›$¤£|å±¶”RN >²ÒÚcªÔ§+rþe4IÉ'!Ëk9)#Ý0žÁð †g0<ƒÁ ^CDîlywœå%´OòÐV·¿«¤nTiŒY„|x(òX€êR€êÏMïNü¬y‚WÞêöwe»Ê#Ý7‹ú E ] q¼ððÂà /<¼ððÂà Žw ÎãÝ|Þ5º C+îÔØïUÅ9nÅ+(^ù@ñÊöÎó)±kàÜÅŽ±ß³ˆƒØŠW}P¼êƒâUÎÃsžóðœ‡ç<ίц qPo=Î}LRÃÅémÞbÌ«>(ûꃥ„‘|¨÷çþP£ÂéAÞrÈ+(dŒÂrò7žÁð †g0<ƒÁ þIùZX?û³w6X×»ÅIÙîÕÕ f’ÓŒÜ&==²žùÊC)µÕ+؃;¸‰É#9Nmç²wppüé‘å§.‡ªW}`€ƒ8xààƒpËjªâU¨ü­¡"rmîÂ…W>0É#«©êÍA¨Û^æyÉâØÌ¿Œ£39}¹î>k/OŸ¬®¦ª7J`oðO¿®¦ ƒá Ï`xÃ3ÄàŸ<þŒK&CÝç½Cl&S_æ½/if5±|‡ƒ%íå`w‹—²Â~øÐHÓêuãŸä¡Å˜—´¿ç~@leS_fž/ùg„ûÁ¸Lv#wI=*ì‡Í:­^›~Â]^ËywxÜáq‡ÇwxÜáqG€ûºÜ¥{ÿ÷‰u¬“üÎ?â®9[ý¢'y$¡· ù¥ß=¶’”Ê%¶|Îg yÿù}ÄÍq¶ÚB>jFnú¸K¿{l!*•K|àñÇx|àñç³Æ·òœfv÷kªT}Û?ùZ±]Ç"³§ÇÖ±Å[Çoë5ó'Ü,ÆÍb›ªo{Â'"_óé·ëdöôØ:¶xëØâ­c½YwxÜáq‡ÇwxÜáqG€ûçëó‘æÍñ$—â|DÎoªòtÞý©ÜËPYŸÏÒn®~‰uô“)ƒÈù1~UžÎ›•{¹mâÖÁ³žuð¬CÀºõƒmÏu¬7ùc“¨RõÁx|àñÇp>k|Û/ü¶Ó6žýÕ¸Ô‘ÇÖúóÖ’<ÒŽ²vo=³M<çίŸ_Õqv>qçå#³þ¼‡$´£¬Ý[Ňç<<çá9Ïyœ_£Í°fLòK¸(Z×£*$ó_âH%òëb¬î¹“×È-À°F¡MòÐblìð–e’mÖ€‚÷(ZÓ¤*ä­_>™Jä×µÂï1ãM¯|‰0¬‰g¯¼–Ûâýíèpùø‡5ÅÄÀ /<¼ððÂà /ÞŸÒÿ¤k.;ú ‰Í~¿r±iRfòù® eñlÊ«}¨BíCVä±èzJ Æ}n}›ò>¼¬'3ù|¶Kù𧇶ºBfVä±ðxJËÊ8x|àñÇx|Àù,‹ÏöÙÖé—¢->'9mIw3Æw’G:´UˆÚ¶iä?YÜhOòÈI`{WyQ–‘3[p·|½ÜmïœÜa„€SëX÷àŽ,îÓ 8uŸÞ^&ðŸ×­®8xààƒ8¼÷óß>î2¤¦a{*øQC%XÖÉÖùŸ?h{9¿¦,y&òKC•6´X+[¯y… ÊRpËçà|ÖÏ,K`ÿeL|çCË&>‰ò9(úDzõšW÷±ç³. >ðøÀã<>ðø€óY—‚éùÖãf»7ÉY|ÃG‘‡n=&y(@%/@%)@¥ç#ö›ýÚÞàƒLå¡Ë b°a’a’aâÃ3žÁð †g0¸ÁkˆØhHEKü˜ä4¥ö¦…xÛOXU«]ä‘Ó°IÚîe+¥öWnÜ«îÁ ÜšBÀñzíDä—e?·~üÙ:&#àäí^¶rb 8õZÖ¿Á”Ï“¼ñ„zALøÈ{ö-ŸŸvÍ!1øÀã<>ðøÀãÆç'×?ýò•‘ZuÛÞÍ,[Šp¿òPlkÞ©`³š üÊ•$©PW’íݼ©Æž*DmÍ;.lVûâ¼¼–‹;ÏyxÎÃsžó8¿®¦ú¾ä:p¸Æ‘ÄäJ)èñs2¹– ‰\)ùÿ›lHä¡X׽ŘW¸AÀ ܺNêïª)“ɵ4ØLäRíöQ:“‡Be÷Vi^݇8xààƒ8À­¡rl‡8¯p’·k²’v];¼ëÚá-̼Â6¤¶Íìç¯ß娧kâuíð®k‡·þòJ'öÿzâÃ3žÁð †g0¸Ákˆ8·É½IÝ»ís·y~"r±NŸÊCæ´Úªå±­ŸWûФڇ-Þƒã]?Ò=^^Fžˆ\,#§òP|;­æë¯¼¿ôJ'šT:aà…‡^xxáá…‡^p¼KpîŸç‹ƒ›3É¥®G£09½¢½Ùê~å¼ëÑGùáCáñWþ÷Yl¿I ¦;›Q˜œÞ‰ÝlI‰Áêú¬¨½Ák€2 †g0<ƒá Ï`pƒ×±ŸõГvœ5É#}–¾rmývRydö•‡æôýÊ㬽óu~9"Ϋ”ˆóôoïI呵q^Í£ ΫçQ†óðœ‡ç<<çá9€ók´Ùæÿcˆ»ÅžX·E-Ú|å§´ ar­Ýn-LÙlv¡ú@².”±Ö½±[îç¾~ï‰õ;ÔbÝž;ÿ3ÎäZÛÕZ˜<² íBξd](c­{c# îð¸Ãã;<îð¸ÃãŽ÷5ÎgkØâ$ïkÊž½eaö–…^ÅÞ:yÜ!±N½(ìÙ[×eo]ç2ÖÁ³žuð¬CÀºõƒ%sĪ«I®m‘‡rD'y¤lê+é³&çÅê(b°zN V“<‰Ájy1X>)*ÒÇ7žÁð †g0<ƒÁ ^CDµf¬Oòv=ô=Ø®l/»œQyºf¢JµQ÷’Ø»Ä^îåΊ¢Z³Û ¸ƒ£r±½•_Ú¹T­\¨{Ùí]Èž.÷rg=S­™ð8xààƒ8À­¡²=×°ß…Êw í¿!˜ÈÙöç6Ò¶WÇ\©&¤˜öæíÝ„túçHÛž+©ï"íˤî£19Û€Üêöê¸cæž8wyãÙ¼§Rþ༨ãÜáq‡ÇwxÜáq‡ÇîkœïÖôÀþnˆÃoÿ>"×Z°§_o-ÄÆ¿“<”žÑ­ä·IÚ³w)œwkH`7¯`Æ›8^^vÈž~=¤û¼rrH·’ß^ùÄ KQ»[³ ¼ððÂà /<¼ðð‚ã]ƒóxlü{߆·åÞ™¤W}ХꃽC‡ÚŠƒ8$ï­‡w¨è•t©|ÀpžCð‚ç¸CëWv>§˜Þm¸N«v{’Gª)ûÉ:m·º%w&/‘­îi(}囌!Dl3ˆë2+x÷ÈêÙáiˆ¼jÍ%Á{ìñ3ÞÄñÊ;ÚÓ*"xåø¶ÃûƒÏ²uŒã…‡^xxáá…‡^¼?µþi—É2cŸ=ýsjûÓñaÖ9n/M=^þÿW28>ÖI qþ8µ­#qþ`™ =yhhòð ˆóê¥ÉøXgq†óðœ‡ç<<çá9€óËRpà9‡ä.ÚàecÁäCJî-DöÃ_n=zfòÈ­Ç$?§a_y(¹wx… „û!E Üùé÷`ò!%y"ûá/§ß=3yäÖƒpWÉw9ÒzewxÜáq‡ÇwxÜáqG€ûç“çÓör#}´\“\‹ó‰Èµ"Žv2yäTð+çm‡³$œ i„Á+‡ómÎ>ÇËåÚgˆ\ËÙo'“GŽ4 ^õzx,†4ÀÂÀ /<¼ððÂà /<¼àx×àœŸ³4ï‚sÞçσs~ÎÒl’L.ŽŠ ò¹ÊfÞÜg¯Êæ+ç›ër/wNA«vëËá,L.Î( òtùŰëUÙpò1¦Wec€ƒ8xààƒpk¨lVw»!TÙÔ›ƒÄÆfïh‘¶½ìEÞ®d.?õdòÐuUó®«š•¹ô+ßd.Õ%7«5ßj2êÍ9dc“e´pÞ^v.aO—2cŽz2yèR«y—ZÍJ|Ú¾?Àô›ÕWÐx;à½ðÞxo¼·ÞÛïíy;~jÿÓ¯yS}¿ïâ"¼?gžßÅvoHÇ$TP¯²fH•5{ƒjðú÷ç´ì»ðè Ó «¥ŠÃ«mRm‹a0<ƒá Ï`xƒ¼.>·ƒ®­ïBÄx×Z¹$&Ò!*“_Q/c ŠòÇj[¾òX¶Òx·O?—гwqäG³VJbò!Ÿ1ùåüŒ‚£?|¨ä†€“÷éãÝvo)46ÀÁ¯¢KÖzå¡\Ðó]RÁ5jo¹YÚ„;?£rî² wµÓá®æ(l¹œ;}z(Iô|Y¤3®Õà;<îð¸Ãã;<îxËýç¿êsY„Ÿx¾,»é)wÂêÈ}zƒZNoPËéÕ7í­;¨uK[¶VGîÓ›´rz“VN¯DȰžuð¬ƒgÖ­ ³ôœtÉ¿LÌt £R È¯ã›ª.’.’.¼Y'{pw`0yd®Ó)̼€"¿Î ªb°J^°J^°ò†•ààƒ8xààCÜ*³•4É…6‹aˆ<Òƒè+¿ÔÎz}˜„;kõ0sOœ»Úœˆp?:ë^Ã~÷Ð6á®æèîr ÎÞ6[É;wxÜáq‡ÇwxÜñ–ûf[ž/’îNÌv¥ÿý-iâacyÙn·ùå´0«Kâb•F~塾è§W¸tJ…K{¼Å»•me ÇËåZ?ÖBä—á¬.œ‹U˜IðÊgŠ^áÒ).xáá…‡^xxáᅇﺯï:y–Aä±ul}¸—;[þú®bD[ËÕç— ÷rg×ÿÝáýîð~w~÷õoVfË镜^ÇéMZ9›ÕÀ’‡VMú.›•šrzE§WFqzQÎfuà'|ä%A“bG³rKN¯Œâô Nor‰Áp>k|ë^|ë/“C “ÏÇomhCE¿r±–™Ê/ýÀ åHŸÞx”¯m¡x—Ä?‚—/è©üÒ0 Z&õéG!xåèº/QhËÒª{Ñ5Ž^xxáá…‡^0¼¿³JûåßçÃÏ·Áyx™{ã9so(òõnDK½Û°t± Ð9¼à<¬¬ìóeKZ¢öžûÑŨ=¼Ì½ñœÁ5ùzF®¥ÞíË(ºØè^ÔVºöù²þeep‡ÇwxÜáq‡Çw¼æþ“ò\ÂÅ.ÿU½Ý>ßÝnׯä¡<¢Ój(tî‹wðS¬O«#ЯÜ9ÜVNppk¸8ß]SÖÆä¡<¢Ój(´wPpTêDÀÉGšqpðÀÁHœ?¨óëç—œ­qþ Îsy‹¬g’·ž‰;ÏyxÎÃsžó8¿F2¸$‹{·ünï–‘Gî#fùmÆ£M~^Šë½C‡zÕ¼ƒôæ¤7oïFª0ÆõŒ;Ï!xÁsÌ¡ŸTÿ¤Ë›Ö#³\jö> “k F˜\ôß*+3yh=Ó#³<´žéïŒä%vt§ÁãNK#Gar­Ñ“Kc^fî‰s——CÝi0¸ËË¡þ²ÁÈržÔ#wxÜáq‡ÇwxÜñ–ûO©P/áb?Ôã’ä|‰uãÏ^ŽYM o55¼ÕÔvxû$têÐ1ˆ%²šÞjjx«©!m¥âÁsžCðwhݳœÎˆÛY˜?>ÉÁêÖ¯ƒ"“‡–C§w¼s:-ÿÊãÓqKÀ©“Ÿƒ€;ò`òÐzæôŽwN§³%'ïœÎˆ[r€ò²²÷|~겈óÇx|àñÇŒÏOêòå++Ï÷M7—ã“\Xý¤4˜\ëWPˆüë>¯à¿Ïä5r¼S¬š/<iVž¯‚nîÀ ^¶>˜ñ&Ž—Ç"¿~½{¼ÇŒ7q¼ò!P±j^P¼èZ¤å_/<¼ððÂà /<¼ðð‚ã]Ÿõù@é.ÂT§¿â,Ür~åâhãÄäsjØùî«Uψê4¿ý+‚s}>¹¹‹0Õi£HðÊw¡/Ÿd›˜|Î:?âµêQæ·ï?Á9Ž^xxáá…‡^xxÁñ®Á¹mOæú¦ÛàܼÃÃö¼r®ÊÓC­ºÐ¼Ë‚æ]l{ösçׯ·y§ŠíyÕS•§‡zm¡yw Í»kˆ;ÏyxÎÃsžó8¿F›}þÿû b?ÈàRŒù¹9‡ìoÎ!ðù0yè²{iÝê+ˆî«}"÷û bßÞ‚[(û«0Ð>v@Ù½4ŒnõD÷b]Ò¶}¤MãÃä%r§<¼H;¼]ó>ÿ¿.1i8#c^¶YF.3¼ò‘æï±Ç{ÌxÇ+ßh/o×¼OͯKäÎÈ/<¼ððÂà /<¼ xRû“.õM8½#Íóå¼ÂDä×ÜØ™dgòK:q7ݧUê>ÉÏÈ}ÓéÝ7Ûà¼t°ØãÕ4Ï—ãô‘_?R†÷èL~É]íâÎþ´êô ^ù¾éôî›Îýšx9Ö;½#Í8^xxáá…‡^xxAðþ¤tn_Óç9r¹ "r­K“‹]*“GÒ)ÓÇJŸN^­Gòj=öàîXnÊ 8^îÍäb¹weòHšfúXÉÛÉ«õH^­‡8xààƒ8À-‡ Û9/1oj’Gn’P*riaÝþ$oxA’†l >¸Áëw ë’' UwÖ%Oò†$ixa0<ƒá Ï`xƒ¼†ˆdUΦôX9{û§—©ã&¯½jJÎØ»¿rg9”¬Ò×­ów~ýøÓˤcöÃó¿ªCùá#së˜óòz&Yµ«†óðœ‡ç<<çp~6yë¡F›—Ã Ê òP~Ú/ÈbÉô<¼ I¿{l=³-„ÈËÑýžÏ5&½lO_‘‡Êñ÷|Ž,v°LÏíé“ô»Ç–CûB•~­ƒ5øÀã<>ðøÀãÆç'ŸÎËWV¬ŽÜ‰ªdv´5˜ pðÀÁðøÀãÎgoù¹õÁÍÁZÎÖ©à$­]ó»öŒ­3yä¢ü+ß\ ñm—þ?°ÜTìù”Ïú‘fëè‘ð‘ŸïÆÌ|ç£^h>r|ÛðùïJ×ëƒ<>ðøÀã<>Øóù5ÿi—[\žãÛÝ!jyWØ‘óSЪ<×÷}y¨ì¯Ü9Æ,Ï_ÆÝ1fyWXÖ‘óó¨ªHŒ;ÏyxÎÃsžó8¿®¦ê¶7~Sw‹õ¹Ëß©ÈÅ;*_6…Z°ªÞQ^}.Ö+÷r'Xm‹8¸õƒ­Ï ÞNE.žSù²Ñb]õéêsV¹—;±.8xààƒ8À­¡r?F$«·Û¯Æˆüíø¿—_Cå`¡23ù*ë)†Jo ÉW»žnÞ¹\“ê~bFV/±ßM̘ñ&Ž÷`x×;ð-Þƒâ¥?|ìºy·ÐÍ;ÖkRØã…‡^xxáá…‡^p¼kpîVZu&å3lל “k¹‚‰ÈÅ[**æî]šxõ/œšVMÀÑ­_*L®¥Û%"Û©T.&ÄSùÒ0]Úò>ê–§x {>?íº 1øÀã<>ðøÀãÂç'§?õ’±V’5)²ì+zÒêvËË’^™<’R[’Õ{ê+µ4)Þô=8yäÜAÁQ¹vÛ+“GrmK²šGpòZÎÞa€ƒ8xààƒpëR0[sKf“É¥$²Þ1 Ün<³Õ~y’GšÛoöGÉRDÌÖxF‡7ûÉLžÈÁÍíö4[Mš 5‹£x³?ö|þ |ÙšÂhðÇx|àñç³Æ·bÍ6*ŶXŠ·Õ-Ûð˜ÔðèÕ>oxG‘†w”bÍ6"|ÔY„¼ÕÝò9’½ ‰âMß(Òô ƒ<>ðøÀã<>à|ÖøVß­ßrcòHO¹¯\I~ø;•È#É“Ë:¶n+®‰—}zgòÈeÙW®µZEfòاOòHs°êUÙì?˜ó:“Gn»ˆó´I'2“—Àœ8¯^WU¯ÊÆpžóðœ‡ç<<çp~6°²Ð«Pe3¹¸í-L>ǤÂ}ùÓ#‡Š“<’™Y½"* %Ùã•sÕ«P2¹¸Ë)L>~/zäL’àU×rÕ«ñ©ÒP/<¼ððÂà /<¼ðð‚ã]ƒó®`á'«Óí+)l)˜‰œß§wå顟¯ëò8 íö±¼«3Îì‡uú"ËÛÞ}=ɹD®¸Áð †g0<ƒá bðOéÒ¥7E­Vóœ¯ï½5q¹ÛŸ';›s‰þî>ý,LºO÷òÞ«7¤`ïüA_?€þ<xÜœ ¼kV?;Ÿ¸óò_h/£½zS çá9ÏyxÎÃsç×h³ÏŸóôoWÎÃ[9ï{Þßt©ÓþÞ¡ƒ:´~Ã[9ï»Þßt©Y½á<‡à9Ï!p‡Ö¯ì´JLòÉ‘;½ôô’ÜÎW”K_>¿Ójé@¬““ÜNïë=½,µó]l_ÿ0VSÃ:xÖÁ³o­û)çŸ|9PjŸç­îÍ;?É“wI®åÄV"¿®á+YÃ/Ó%&y$\´•fÖ¼œØ=¸âYöÜAÁq¹–ØY‰üº­d!º ½ àÔ`Õ>VYóRj pðÀÁïÜçó]3™¥És;½$¨óUp2yh³yZƒ¨¾òXÕém6Ïç–»¨}¾k*²4&Üå¬óU"ÐÌ=qîò^õ´FLîò^õôöªqîð¸Ãã;<îð¸ÃãŽ÷%Î÷ÏsþØÍJ²¬þ±_¹8º:3ùœÓšÄ±)ÝKìï^bÿWZ„ÿÊŸÃùïAñ.AeWîKðòQ™ÉçôÍ$NGé^ú÷Òÿ ^u¾Ç»Fm/<¼ððÂà /<¼ðð‚ã]ƒ3^ü;~‘‡ZuuXËàI9âøÊCW´Ý+%èx7,îDêáÕa-D‰óêéq^]ˆv¯”Àpžóðœ‡ç<<çp~6é9O¸]ÿÅ^Î×rw‹±ä-Æ’•Ö½vÓĺƒ¾´ÈùÒ»…Nò:ÉÊàê^¿hÃ:xÖÁ³žuX·~°»Dß¿%}Ò]Ùð¹}ˆ\Ü»%&¿\³ˆ Ÿ'ydäe÷2ó'yhï–wxóÒ†t‹÷àx×ïòe߯ž..î“_ÎážÎ¯š÷ѽ|‚WÞ»mñþ, ^xxáá…‡^xxááÁû»'ë—Ž}ŸÒÁL×I©ºêûÄæ1™¿—w—ã£2yär¼ï`ÍKæßƒ;(¸%_Ž€S˦¸C¬ àè½è¨L¹öîÅ;2ój pðÀÁß1;jìwöê¹Wc@œ——CÃ[Ňç<<çá9Ïyœ_WSçó8•›Öë_¹xëÇžÎVIŠ6§·:¥ r>Ïî¸iÐN æ3`rÚÏ®JòPP9½õÌ)ÅŽ¸Áð †g0<ƒá nð"ÆÇ*þÊC=„ÇÇš2¼´ê!¥Uï’ËŸ‰CjÂÎøX3P†—™<¤ÌdÃ!xÁsžCà­_^C®õË“<Ò@ixÙ¹ÃËÎ/³sÏåóûô¥6˜X§žC/½vxéµãe’g½æÇÖÁ³žuð¬Ã[ë~³áËeŸ>Ò»‹ƒ¥ãÙHÞ›¼6y¬—K¬£oÝÒñl$ïƒMÞ›¼ÖË5¬ƒg<ëàY‡€uë_Øm†Ýo |éâ`d«†}««òôPùð2TÇ>C5-Ÿõ¾ÓpÓF¶ŠÅ‡Ð*¸*O•k/GtoðÏ2šÂ0žÁð †g0<ƒÁ þÉùO»¼ç»œ±Ÿ|ŠMÇ.éë'Õ¤ "^žä$t5üÊC©GÃK³Ü:pç×ïg›nǧòP¢#q^M="ÎË+ /OÒpžóðœ‡ç<<çp~]ÔW£Áþùâês_Á*ÉC;ˆê­(ªê»ARë—QŸ»æUIÚ(ToIP¥¯7î<‡à9Ï!p‡Ö¯¬Y-MF{lir7ltxùÃËüÊci“>Òf5Ù|Pƒ—¡ ÃË"^!1XþÆ›ô7«­‡a0<ƒá Ï`pƒ×Ñ­ù㓜~¤wWTÝJ¹™ä‘JùIº_óR ‡Ô^xÏGrNø¨C÷ö|äÄÂG¾ÝëÞíž—R8¤æÆx|àñÇx|Àù¬ñm¼,>¥òz½ç?”ŠªI>íä~þüµûyTÄW>gvþ'Ï[¼?Ú òHAÖðz#©7òžÏM©"˜¼^ïÐ¥îjÏç |– ×=Ÿƒñ9&>‰ó‘ÏN¼æÆCjnlðÇx|àñÇœÏßÎç›»«ØÓËP:½”—…8¤,ĽCsèŸ×ÓËP:½5Œ—F8¤4BÃ!xÁsžCà-_ÙùyNx¸YELòBR…×å‘ÓmÎGyzèæ¼ËB|þHO)|@[ƒfð’…H æM—ÙÓCç0ç]ŠÞó7~JYˆ†Áð †g0<ƒá nð"`µNòÈAÊW~­&ÈÚAÊ$¤LòÈ2à+-~åB„uTKø¨){>åÃ呃ÂG]„>r€‚ `ô|àñÇx|Àù¬ñ-mgTU1?d’W¶šG~§ç9;ʸÆM&uhœäst=»–ò•‡J×'y(<¦mx\J×·xŽwýÆ÷xr;ãMïÁðLêиÇ{P¼ôwU¾¼rtMûd÷%ºÆñÂà /<¼ððÂà /ÞŸÔþ¤KBþ¹ÏŽüélƒ¹Ä·léœä-pSz ºg––{‡æÐ"²5¦“8¤^µŸ^†íÞ¡`q‡à9Ï!x;´.¶)²(꯼ˢï‰ÈCÝù&yä2è+}¤e›E¿L{Ø|pƒ×÷¼¼Kòî‰ÈCMøˆÁêm1XþÆË>‹þzÝl Ï`xÃ3žÁ ÿäò§]ÿ×ça‘w!¢¾ìuœ™|ÞK%Ú‡Éc»¤ºAÖ«¸Š¨«ˆÛUo†E JJÊÝã=(Þõ#­/ëf&ŸÛ/•ÇvIu;¤Šâ¥¿;ýëÍl@!ó)å3Ÿí]6[D*: ɧÜ^Bò)%$ÁsžCðwhýÊúv—t cwÅÝêa~vvü•ŸÊÓCcXϾ]euÖ½=Z·Fùœ^>ó)å3oߎƒ¿ëGÚ­>ëäí8ØÛAŸšâº};þvð§‡6˜ÝštzÙÔ§”Mm¼ðÞxo¼·ÞÛïí€÷vÀ{;Àߎõ/‹×öï® ?ƒÉGä|<_B’‡‚³”Œ}z]`‰Áô–è3˜|DÎØÇó= $y(¾IÙÔ§×ìÕ0žÁð †g0¸Ákˆ8·t†Øèf’ ‹ÏŸô)Djt3ÉCË¿Óêbñ+7ºXl?¸óë÷s¾úÓ=;Ÿ¸ójâ¼¼´:­.Äyµ‹…á<<çá9ÏyxÎ#àü5Ú´ÏÇ)žä‘óöY~¨¡m6gyàðøÀ㟟”þ|êå+Ûç´CÛpÍrå(oéë;Ëé†ë£<}=±;öM“ªffy(< JJ<Á{@Ûî1¼bïa†W,ºaxÌÆ„&&Ôì0¼rt…]•Œz/<¼ððÂà /<¼ðð‚ã]Ÿéyñ™nBDz×Ùà: n–ŸRpÎD®ÕÎ&g!!_²n“jò¸Ñþ+±Ñ^†Ìî徯Žô®"ÿ:dŽqçŸu&rm¸sf¿{,j ©Ü’u›$…Çm>ãN7›} çqîð¸Ãã;<îð¸Ã㎷ÜÿŠ×>ÙÉ:žåËQ„vJÏ$oO ²S:ÉcËà,-ƒ³“uL >¨ÁTNÀn·ùÙ)ídË Ñ,-D³“uì Ï`xÃ3Üàu)Xœ¬ãY^"ûôò˜rs»O/o–‚?éLZ §Ëè$dÿ• ª8YÇ ¯¼O/Y·ûôòê/ÿŒ7q¼òН8=N^9<)<'ëØÁ /<¼ððÂà /8Þ58ïKBrƒseÉ)‡0Ôx’ƒu.ºl´SeòPt­Î\†IÕôWþæF{Ýlî«rÃne9‡0™;¸#U&ÅÍêŒu`àär}y!¾Ü ÅÁÁk|KÏ­<.!"ydlÙ,d¥ÂjÈÿW.D˜ôÜ*¢í®wHÝò‡Ô-¬žöÄ¡¾ñ¸Cð‚ç<‡ÀZ¿²ü¼Š˜ÿŽÿɃÈó忪‡ÐU~–kããÙ/f.QyhÇ$$®—{¹Qã³wÐ«Ô \¢à n¹sÙƒ»™š"`¨<´áòµË½Ü(Ò1ÀÁÿŒ/ýáé™ñm@ÍÎto†W^ÇJ}à ¼ððÂà /<¼ððÂà Žw Îû.ô§Øèx’GnúR±†i¦} }Íâ:Ök#ŸŠ•’‘Š·ŽÝ7 ?ÅFÇ{pò=#§NÙ܃;(8þôH1s*VNE*Þ:68xààƒ8À­¡’ô„kNrivÛÒ_n’Gv¤úf°æOúd&f¦êÇzùÿIÊÿO¤¹8X“ॣº–x¯:°ƒàe“g¼‰ã•Ïc«wë/$©xÁÀ /<¼ððÂà /<¼àx×à¼íBŸÔ˜ô²òbÉLžäZpND.gÔÆä‘ü™¯<¶ŽmÞ:v›òŸÔÄšô2å?ѧkße"r黜Á%N>>hÞ:¶yëØ88xààƒ8xà·†Ê}‡êuËß_åüsÛ_æd"o¾“‡ò ºU5Ÿ¼* îP·üýÝ•r£O×®”3‘‹(ÉCݪšO^…8xààƒ8À­¡r<çLÞ}ïû:ùòÈë Ÿîê „]óbÒxÎï»û°ö9ûòý‹×ú=Ýåì Ï!}üq‡à9Ï!x;´~eÛâ…ë¡»½ÛËâ…ž˜ðøÀã<>à|Öø¶%ÐÔ3çW£þi 4ÉÏÈYßæv]. º$Ýpu/¾u)¾í[¿7õÐø]ë÷µOá#_£õm.åÃå¡{°îÅ·.Å·8x|àñÇx|Àù¬ñm<˾[A=·Ð¿ËJýÊyË©ÈcFJß;tP‡ÖÏä¹Ýû]þ&qH>8Þ7.¥ŽÁsžCðwhýÊÎç»UÄÉZ_,)|/_ÛÛkÇ^ãú,5®ß;t1ÉzïÐAZs÷NÖ>];½ð:Ïg©ó¼á<‡à9Ï!p‡–¯¬ìw›x1É•f§?ø¹2·ë¿ÿÝÎä5pöø•‡*,Š—¸[Þ%¼}îhâ!Åï™ ötiÓÑ:“×ÀÉ'§R/q·¼ÊÿüYË pøÿ’vni²«¸ž ÈúÜ™ÿÄz×ê‡Äa Åóé8®­?ÑB 4pÐÀA ÎÁõúƒÛÅûžå'w“!Qÿz䈜å]¯nùº±/2ù­/Ú²"_9÷´É$÷DSÙ4´‹7p¼«WÀÑ¡oäxÃK¿n,ÕŠL~+ÕŠ¶¤ Ák-¥ËÚÐþlÚ/à…†^hx¡á…†^p¼k»­sF6>‚ç(=‚ç÷JãÇ@4JàY›¿5] ¦[Á‰é¬ïU9ºWÇGn:s,§ ®LÍtÐLÍtp˜n=°Išê–“4ªh’Û&"7LuûIJL˜äžÉ_¹ïÞš´{kÒ¼M’†Âå$M:"Üy‡x!rËl±÷ȹ['îækoÒ®½Is•Iš)'p‡ÆwhÜ¡q‡ÆÏ[?JuÌDγ'g•µÀ,k™6~kº@Mb&r]<÷¬fY Ì´Iì‚é ™šé ™Ó­¶¼7%=Eå¤zç_úŒÈ;{w[–ýìå¸-$ÚO´û¤Î¾îš!ù•ûÒ\Ú,ôlš…žË{ÇÎSQŽŠKf¼‘ã oÈD~ûw˜à 3ÞÈñZ»-^sšK›…žM³Ð¼ÐðBà /4¼ÐðBà ŽwuÎõ½ôèÉÖŽ/‹Â¿rzo}*nÌZñv6oï-ªq×C>,^ö YË ³V>MåÓ‚… Yš… YÜBë)kZÔ¤ùtŒ6ûºiŒöŸÔV“Z>sÓrSZýs6Õ?ïñÚC &í%ȧ3›Ù×m3›× V“NsÓRPZùt6•O x¡á…†^hx¡á…†ïꜻV†Ñ¥î¹¯œç£`ùú}üÚe|gìRóÝWîZÏý+WÒY]+°èR[gm;Ùƒ —{ºò8s2­kÉ´®•Nt©ßN 4pÐÀÁnu•ã}=÷Ómq°Ò [ÉÙxß[LrÏ`IîJÝÍ×÷ÕÊO·ÐÁÊlÕ`ã}h1É=s ˆåÍÎjhÎÊoyh–‡fyh–‡fy8,¿x›rI¹©òÞJðäm¾òuÇ”)0›äs`Y¹¤IG_¹ëÚû+÷Iå’2cå½ðüÉ'>!Ùâ¯=ŸñW¹¤AI„õÞºç³z.4>Ðø@ã4>à|VÿÍ¿‘¹ßÑÖ5<É+»ö>ô3ºÇÊäóói¶2Œ¢Õÿ—³¹ßeu|Ð^mÍÌ[pƒ[Jó 8~.+“Ï/gýã]Ožålx5®Å#Bóˆ~pÐÀA 4p8WâO¹Øø>’îé¼ÇÃÞm&·ííÊ™É=/ “¼;I¿rWunÑzöà·ž÷xØ0Íä¶L93¹çmƒ€³¾ÝpÖkoÑ:pÐÀA 4pÐÀÁn*÷”?VW™ÞoÍÍ"7>g$&ŸoÍ·¤ªéë®[³ÖÈP´F.X]ez¿®5‹Ü˜OL>_×(8þu×uZëD(Z'‚8hà ƒ88À­®’ÌB‡íå·Yè‰]À“ÏžvÞÅñ´£ð+·¥ÿýh+“{*“¿rß\kd àl/¿\`àV_·(¸õžb›+“{jŽ 8ó\k£ÀA 4pÐÀA¸ÕUiïö$Ÿ}Ý¨Æ xyù…I~6’ÉÆ"õ|CÇË×\eZvnÁÙgïÁ ŽÊùó%LòÛœ‰lL6©ã¬ê÷_¾~râ– 8hà ƒ8hàp î“ÊO»Ø}KE‹FWyØRÑ:‘ç2QùœÑ¼’ÑUV-,Ô:Š©¡cÏ'P>ë±>lWhÈ“w¨|ÎQ>ô÷EZ;I1µ“| ñÆh| ñ糆‚Ûiü˜_æŸÆé宂çÒöu5ÅXWÓ´X®IE€¿råÚ»mDà–_Ÿn›T±¼·| –çrW0Ö¤"@byó½Õoyh–‡fyh–‡fy8,¿z›}wF'c^>?©yºý¯J°´Î•Ά6h˜ÈoïÃÖhªkΪkÁ˜6Ø¿ìû·Å¥í[Þ0áo xÿ´Î¼á]¦lñŽwõI]óˆ]‹å´­{¼Ÿ²<ÄúñBà /4¼ÐðBà /ÞOìÿYþvÆ÷µñóp•Ç«îfîMröÚ{ Ë×¾=2y¼glè{7ÊãSõxï¼K&¹Ë·›ÖI_G(Æ‹ö&ó‘_G`¿úu£ïˆL~K€Yƒå÷¾Ç÷ðáÞUù¯ÃüOƒi•†ðë€öë€öë€öë€öë€öë€öë€öëÿu,a½Þ >þe™ä…ýÃôöOrÏÄŒzIŸU[#RµÞŸºí]¨Kܾç¢qåáŠmäácyQ/©®³jÛBªÖû³åóAºÇ®h| ñÆh|@ø|þ;=÷ȹâlÇú2Å´â0v“{¦FLrO'õ$÷$Q+¤$êÞò|Ïø2•XžÿË&÷Œ} –·¦ ˆå­IÔ )‰*Xšå¡Yšå¡Y˯ÑÔ¾˜ÿÓm5áu_Ì+t|h¬ñ°z‡ÊggÕ¬Î*jÎʰJÃd:_0M.m7t[å8Á’­¡àå¥"T>ŸËfõˆQóˆ†&Óùb¹hò›~¼ÐðBà /4¼ÐðBà ŽwuÎIÚ˜YµÅ%5öq'&¿½pu£sÖ6T­a§6ì”Åí&icfÕ6p¼81ùíq£Ý®¶:¤j ;õ°ï£,5I3«¶:D 4pÐÀáÜ'ÖŸx¿5ç÷9ºOç=-ær_Z/K͉Uk™Ù›.PÓ­'.Ÿm‰¥r_Æ-KíUkZLÍtÐLÍtp˜nm´ÝµœÕB§‹È}¶¼_ý`‘»†£Ö¢wm-G=ÛÛûºï¼—÷°¹kºi-š»Ð6f–‡fyh–‡fy8,¿z›}çE66©Õ£Î‹OZV¾ÖÓÎ öuž“Ϲ«ËìW®x›}Í~6v™Õ³šý´lŒ­§5ûìë<3œ-rW›±¼ÙÛø-ÍòÐ,ÍòÐ,‡åWoÓ¤…³“Ü6ž4¹«¢¶mÞ&5cÞFk£¨ÚRª-õ¨¦¥[¼ö½²{¼Ó3#‘»z5¶xÇËåžÊäª-õ¨ÚRjZê!à…†^hx¡á…†^p¼«sîï¡àÓ³]?Kª§Jäüâ9,_ðÄrÚZ½éB¶¾&ö³ìhªDÎï/ÃòõO0¦-¶LÍtÐLÍtp˜n=°ã}òSH0´hjh% û^€j}ZfXë¨Z/@Ý÷¬¯Uã}òîSH0´hjh% ûríj}+ZöZ+æ¯Z1ÿïï€ÞÛá÷ã…†^hx¡á…†^0¼ŸØ~Ò|ÆÛ%•(´k›?»Œ3E›¶ ã+wES¿r!šj—T$°5]ণr—ë!¦³FSÄtÖhJ04ÓA34ÓÁaº%šjûòr¯? ì9}ýAgòÛ5V§·ín”nË„7­:½AzõkZuú\€ñòEÀÑÇ#t&ï‡%Ö‘ —{J9¤Gæ· à ƒ8hà ƒÜê*µÕ“Üà*ÿ솘ä]<†·x6xéslÚfеÀìi3Åûų™jã›¶€‚àeçrÝ Að†hÜÎÖ „ÈþÛ]U-jÁãÓ„÷‹g3ÕÆ7mM…€^hx¡á…†^p¼«sNgm’K~’ÓgÊ'÷˜´H2i‘d’òr¿òÍxà¥Pko`Þ“·dë‰évùÈ¾î‹ø’ñ%)3¶7ðoRäö;÷š¡š¡ÄÀ¿C»ë­&¼íkÂQŒñ[~ÝIýTÞŽ¶0|Ò5˜Ü€½—”?½3~å®ö™vX‘¾þ}Y5·¿üºXù©"½ óŸÁEÎZ½We?½rpæ¼Üi=üõøÁA 4pÐÀA‡cpŸ˜~p;°EªÓ +º7½±6­’»|]y0ý·û‚±bº«i¨ÎžOHÆGÒ¦Õì>f—VÞóå¦ÿv_,WL—Í" Õø@ã4>Ðø€óYo‹ûZèÛœŠ§PðpóBîD.›ë\ôIîrU{åÔêÿ‰åC2Ær‡3ûs'rÀrIZæ¢Ë›_ÕIµúÁòÐ,ÍòÐ,ÍòpX~õ6íõæøXÕдäRÓ’KZ }3•Ðï-¨…Ö“Ñ´ìPÓ²CZz3U¡ ‚f!h‚f!p ­§¬Ÿe€—ñ&_¹ï¬kÿ(wíÌPžLr×ï¦3ÞÏò›•É}/\]û§»k/\†Šéd’»ñ!­kod„¾qúSÛUÎ~ÊüãzŒaÆ{ LrWúzœ]yVÏ5Þ«ŸÿÖµpÖéO[pƒ£_ç`0É]éëq8ýiÉ£øÁA 4pÐÀA‡cpªÐ»6¾_l+û¾R«_L>áýüüû÷kçC‘ûµ“Ïωì¢ùïÏ"¦›ÿþüü6mâØ~I›¤º6‘¾o'ÒçÅwm"=ùu„D*:ýú|øé¯#4"7ö'&ŸŸ¾Ø¯#L¿ŽHþ:¨é\‹¨º6ÿëøŒ»ÓïÚ<|á×í×í×í×í×í×í×öëøÍÜßÝã¾]"G[>É—b4ÓÃè$g©¼§~‡®õ;t­ßá+÷ùvX’ {>òY]X©•éa”ð °µ5t­­¡km „ٻ’dø@ã4>Ðø@ãÎgI2ôø¾²ùɿœÈùϲ’nè2h–¯û”6¿›º ¶ÜÀë)‹Gáź“¤ Á›åë>£ÍÀï¦:ÁÀÐ ÍÀÐ ÍÀà^]D’V„ôÃ)ôËìÄIN;FÚ ¾r°ÂùÚ¯ÂäžWžž¤!]«óïÉä ’´"¤Ž<_4¼!ÛÚ Þ°Çf¼‘ãµ>õ$­éZ—Áï÷˜¤!^hx¡á…†^hxÁñ®Î9ÍßøLk´yºý¯¦5ÚOÌ}Áö­.®Yä®I•“œÎÅM&¹§l¸kS÷÷àø‹e½ý\ àVß±`{c"à¬3(÷àÇåžzâ®ÍüÀA 4pÐÀA¸ÕUî{º±¿nXʾrîëŠåët¬îS½Pךº©IaoàÐ õýp¼}e_ç?íbù:|úTðÓµ.ƒnê2 ÍÀÐ ÍÀÐ nàÕEÖ<¥³ …úOùöª¥³ªvƫ錆Ê?å£ eÝOïªå£ªvH«éú-ÍBÐ,ÍBàZOYÛ'”¢±Z£$”þÌÕ™ä¶j öuߥ±âb[µFÓª5š´ äW®\yöÜC4Öa´£TÄ:pgÏýá¥}Ýwåi¬(ÖV‡Ñ´:Œ&-"!ÜÍ7&?whÜ¡q‡ÆwhÜ¡q‡ƒûêçûûŠ·§Sß?û䬺VüÐ5W©MÚß›.0Óý¹ õ÷E¢Oç½ku ]ó6Ú¤}ÁtÐLÍtÐL‡éÖ;¶{‹.kíxo{|*v"“öélØÊäÓƒ^¾m¿m–?Þ— Ö:úÐÜŶpƒ[OÜxï5|ª‚"CÖéˆÑÊäÓßÈÁÑ?Þ— Ö:úМ•4pÐÀA 4pp€[\åØwÜ,ÿpÞÇu–L^Š"&9uV—åë¦yŸÔ™<;Š"&ùp䩯eñˆ{>òYŽ5áÇ.G&§?íËòuÛì„Ô™<;ªk–lÏgu|h| ñÆh|Àù¬þ Ò Ëq¸& E&§Í§Ëp/7}%úßîªJäžÖþ¯Üµ³ih[¶Üí»-Çá°ú™œ¶@.·²½ÜT.4sœ»µX–p·¾ îÖb²¡-)¸Cã;4îиCã;ÜW_·Ÿ’þ1˜ä·ˆ¯Ñxˆ.3X†¶¤`DéÊ?´öaj |‚q–áŠ1gNd¼«¼vDéf?´îƒaê>ø@ã4>Ðø@ãÎgõoé0'Éä6•+“»TÒT’?þÊ•H2æ¦@ä¶Ÿv®Lîr=Is=IüH,oŽåü–‡fyh–‡fyh–‡Ãò«·ÙWã7šŒL¾T™™PF~0}x@y{9—­Buhåô#K+Ÿ~埴¯Ý¦|–‡Ž=Ÿ@ùP9Z|x'Ùò œÏêT´ªù‘¥M{><—Ÿ4>Ðø@ã4>à|VÿVÞýÛÓ³E9|¶HDnJëẘÜS;É=½œC«À¦ ü=ŸÐŒÍ˜„O‹'"7¥a@ÿxWm0ácΟiüÃTÀ/ðÆh| ñÆœÏêßêöÕ£wã«GÕâ·º÷‚Åo…ÉçŽöyÔÊcüV_;ŒÝ£¡yÁd:WýÌЖl¹Î}=üU‹ ÷Üã “ϽД;ýãi_ΣÛ54˜Lç*¿ÚŠ;4îиCã;4îиÃÁ}õóí½2ùÉÛ´w?ßLrºÙÿL´­ŸјTlÚ=½I“ç‡ÖB²(¸Õ]´÷ÛLrºÔ~~Û ÀÁѯû.ðMI?´4pÐÀA 4pp€[]%Ù²1Œ!qßöä ãûÑÏÞ_P˜Üõþ¢-éøÊy%O~–+®’¬wƘ¶o›«†q?=GP˜Üõ|£mï àÌA©ÖÀ"€ƒ8hà ƒp««Ü¯¸=>¹Êñ^3Y\¥aßG·|}õÇÁÒ×<Æþ=¼“ãµYïÑÓŽOkH®“CÝã 0:Ôñ^"Wªa¹D·|}=üÁÒ¾¼Ç(^.¯<޵!7;Ln×^hx¡á…†^hxÁñÞs» +Bø½u–³+ÿƒ›äžfäYî˜ 3É=oOÿä›-忉C´M"ÔÀTîiYf6–a6:(bàϸ9(ÅÀÐ ÍÀÐ ÍÀ þäöËíw¾íyù'a‰ßfùm׃-›äÆ,2¹e°ÌÃ×›ÇAAyŸä>eY±Ç8ÞõâpG;“ÿ…ŽLnš#¿Þ<îÊÛ:Ãkv–M ^hx¡á…†^hx¡áÇ»ÆoQYñ6Ë ×ÿ`ìå¼´²X¾î¹ÞNrO"ñŸÜŸH$–·®Oc–g­aˆìë¼(¯X¾î¹y2Ë3ÌòÆL byh–‡fyh–‡fy8,¿z›´«~™ˆg9í:i¹ç‰v’ožh ÑT2y…ý^j¡õd$÷zûÈ-d| e2$Étzý‚f!h‚f!p ­§,¿Qyº5äÃ!*ÉÕÈ“Üø4y1¹cˆÊ,ž k!A~ŸÞñtȇÓ;:“;Ê”8þÂÅþÛ=ÓU8sD‘µˆÂ8hà ƒ88À­®rßy‘.£«,g®Sdræ*ï J™üîP«©1m–Ï“ýêe¼|íòU”ÊäòOÛÛâmöé2zÚr¶8E&gö¾X“ÉïǺšÞöÜçNÿÛ}W¿¢T&3îl£=Z¾» ?whÜ¡q‡ÆwhÜ¡qÇ)÷ÏÀOº¿ATeîÖ,ŸÜy2Ž`䯔ÌäserìFG]µ7ˆú>±Ùd:ŸŸ¯ZD]•¹[{î!'¸2î¼!3ù\»ÑQWíq¢¾ÏL6™Îçç«Weî–ÂwhÜ¡q‡Æw8¸¯ñ|ÛwÂèç£Hr…ÈWw¶3 RcrÇ€ÄYÞ=yS$Îr×[s3¹ó¶o,ƒÑ765\” ‘¯§w{QžñFŽ×8‘á5ÇÝM™ƒÈðšS»Íäµýx¡á…†^hx¡á…†ïꜻ–—îÊ̱IîiZ™å®Ç£® û'WÂà®%–»2sŒYÞœÚíÚ£TW††1˛Ѯe†»2sL±<4ËC³<–_½ÍxoF~ò6û¾YþxéZeòÐ*“‡Œ “Sï½§ONe_šO Lå¾Êä¡U&-&ßá704C304C30¸k[™¯?“ÜÖYFå•}½[äž™³üVØÜlþm’;gÿ“Ä3iy,Þ‚ Ürü8ÞTDå•}½[äž•—\ à¸Ü±›£ÿ(×{fL 4pÐÀA NÁ}Rü)·àõòõè. …C€A냀©bo¡€h<—â@Šg µÀÔJ Xš… Yš…À-´$Qê¦D|濾E~ Jµõ:!jgÐø@ãÂçûR†¤Œò˜å˸wÛ…k_ú}{ž»xk û9ÉÉ=•É“ÜÓ Š¤]¸’2¤ƒ ÑxáÚƒ ÜRGAÀ…Èôv&÷T&pÖ‡7$í•”ñ 8hà ƒ8œ‚Û\¸òÙLøz/îE~†ù”ŸÉ‡¾Ž}Ý3~’ó’³d’»BÁlºîå³™ãµ29ø”†É‡'ƒ}Ý3žñ1»´¬…‚ÙtÙôóÆh| ñÆœÏzÕ-ï¹÷Ù¿õLä®Z©Iî©•úÊ]¯ù(ÒkþÖtš.ôLä®:$b:s¹HÏñ(Òs¼`:h¦ƒf:h¦ƒÃtë­GÉÚ×9Émm¡ì랉µ³<{’*µ…B+bß[žÿS¶4fË[¶²GnyãÈYfys¨Q¥¾Nheä‚å¡Yšå¡Yšåá°üêmÚ{­àS¦¨íB™D©2¹§‡guà1Q¹§Rq’;VÆLrWÃ7¤Å×µ÷z¹§DÓž{ ÜCªLîiÇYñÌ=rîæDSSVÆ0îfO{ºÈ`¹ñø¹Cã;4îиCã;N¹ÿ>Eâžæêï×À'gÕæ¥ûîÂI¾¶õ¶‘ÈçØ³;è'¹«†ªK ;“Ü•%ë¦Ðµ¿ß·ž|R?Œ‘è××¾ÀVöùü7vc£<Ák¾(w©a‡à5'Ùº)>öã…†^hx¡á…†^p¼kn(¡rÎãd:Ê¿1pD><ƒqò„ñon1‘»‚ð!uÍOrW>´„ƒ¡ðüÉk£)¡Ò¯O¾b¥ÞCnLî ‡Ô5O¸›ƒð¡¥;üÜ¡q‡ÆwhÜ¡q‡Æ×û¬g5ÉMÉ–ÅÏOrOfø+·d†×õå³Üãç¿r—ŸÚ ‰¸ÝpóÝ¡îñ†d  ^z·®ôëžô3ÁË’ Ëös†×êÎ ^«;Ú‹=ÞßíOóáðBà /4¼ÐðBà /ÞO,?ñvƱ¯™,¶šðˆ÷ýeÍ$·á‘È]5á_9÷®ùY~Åwì-Š­Ú{où@-Ïå¶p(¹«Ú›XÞˆËÓ€¤,.Íoyh–‡fyh–‡fyœZþ7ÄË·|l4t ,½%DÎRšO=­Qk!‰Z IÔZHb´Ü­£¡Eai> r–uzê=ZHÔz@¢Ö²7ðz‰ ÍÀÐ ÍÀÐ nàõ¶˜ÞŸæo§w¹ïÂ¥-qˆIªÜ‹gmqi£Ø›.PÓ…Aä¾ËŒ¶Ý!&©r/62äå_U¿é ™šé ™§¦ûÄøsÝÿMß—BÏãgÓ;Ys1Éo㉠9gr>æÂôuQ˜¾îÙ€üOþ^óBø„nÌÏdišÅžO |¨œE0}ÿ{iúºg…1á³Ö¦| ñÆh| ñáó·†$î[ .«+gûnr'rW'B4´˜þxߥ˜î,ûªùËê ÊÙz“܉ÜÕ¯ Uó¦?Þwg)¦;‹ßÀÐ ÍÀÐ ÍÀà^ï,ûæ…L üùIÈÓíUlY‘ÓÞ‡Hä¶Þ‡¥˜9j½Që}ˆZïÃ\`àÂ.Rpû“m9-àDn+à_ª‘£Ö:µÖ‰¨µNà ƒ8hà ƒÜê*÷•Ø·ª­§÷¦¶¿-²2"‘»¦NòÛ#ëm±iùç§Î C0ÖL·Å=ŸŒ¯R{>ô¹‘È]à ÷|B±Þ›–¾~ª”7ÄrÍt[ôóÆh| ñÆ„Ïæ¶¨uDÒqÀærŒÊäÍSìÔÏBÁeßzÔ:¢Ö2M-Qk |ËÊäÍS­ÔχÈþÛ]-Q«ù¦šÿ¨Õü | ñÆh|Àù¬ñÛxïÓŠßÆ™[ærLrÛJSöõµ¿6X²&ù­´¿Ø&XÆ!ÍŠÚÔý¸Ÿº¿ºˆñÞ’þþ³ã·Ì!xùKöõµ2X²öxÅK¿î[µ™ÿ‘Ìü_.®~¼ÐðBà /4¼ÐðBà †÷Óæ3ž.©˜3]GÎyÝO—®Ãv×Ìä³wmÆ•(“Üóû•»Z¢Ò%å! 8k-(GÏå²yŽ€ãŽ™ÉçƒÕŒ«V8ë-gÍC¦KÊC à ƒ8hà ƒÜÇ&¼¿ê>¹JœÅ±Ë£É$·ÝÓ‘Ÿl “'Ç›r‚ôd“Ëæ—u .ppëyÇÙ‰[M8ëŽgþ “'Ç[u‚ôd“«î—ØS 4pÐÀA ŽÁý*£4,k’›†¨,)ÍIÞz齿ÿ)'ù•»êg’VóŸ¢¥ìwÏÇ<ÔŠð¡c2–”&ác­ÐKïíO9IÂÇZ~“´–-µÅh| ñÆh|@øü-`NûŽƒjÜÓ—vSè?ñʶÈIÞÂ_9O*Â$w9¨dºÝî‹ë«qŸÞÖÀ˜Ë»ãU—ØÚ”D lö0Ét õš¡š¡ÜÀëm1k."³R_›‹ÈÒ«GʇE/™Éç©¢%TÖkYK¬eÍõdVájs=YzÏHù°Ú"3ù<’‚£_÷%Ö²–XËšKóƒƒ8hà ƒÜê*Ë{ßÓé°]b)ðûÊ×][¦¿I~÷n}ƒ(ÚDy¹™ŸåŠ«,ï•eOW©Ã.¥ò€ Æå…{pÖ7ˆ¢½A”÷i‹ùY®¸J?8hà ƒ8hàà·ºÊúU>¹Ê*ÕÒ|åÆb˜Èä·’@««¬Òd³IîŠ*µ¶‘=¸PE„œµJ†€ãu‘ÉoµhVWY¥™eœÙUjm#8hà ƒ8hà෺ʶ}®MÖ7ˆ&5á¦Ó…•ÈÁBâ{?ÉÅäÙó\«mÜHM{®Ýö+ppëyoRso:ݼP‰,²º72°ÿvÞ¨Õ,ÿí>WÙ´çZ?8hà ƒ8hàp îïsm®}ÊUöÝsnkÆ/‹Ü¶Ú5]Lîß4É=‹¿rŸ«ìZTÙßß Ÿr•;pƒ£rÛNÑÄþx×ð(Îü Ü5WÙµ¨Ò8hà ƒ88À­Q¥aÅ“«Zà{3Ëc®rßÒ†ÑUišeÒºQÒ0U¶6Ðø@ã4> |þV¶äë}ÜäËÄMS•r¾ÎVäôÆäÙ NrÏ$Ϭõƒd­d.PpËé%à°U)pt×IoLž¡ g}‹ÉZ?HÖúApÐÀA 4pÐÀÁn ó¶:ý÷ÍÄ”`ÌGý äLä®1¤“Ü3xá+w½;糆ŽÖ_·ŸÆO-¿س¾€Ùò‘[ÞZ¾L,o½·Ë›ÕYa?Ê=Å'Xšå¡Yšå¡Y§–ÿ]ÙÚïÙ¾¥¢/ž“|¾_ÎmÜY|O²uË×]kS~åJh´¯¦¯Æ;áÞtšn â{¶¤[¾îÚ{BLgNü¦ƒf:h¦ƒf:8L·†éý&õ¤³]¥92¹çýñ+·µ‹âbrON~’G¥GÖ:²©Ca7Dk ’ÎVSæÈäžWJ‚—ö&‚ý·»2÷¯µ$kýÙÔ!à…†^hx¡á…†^p¼«sÖº3&¹aÁèß»[–Œ~å¶ÓX˜¼x®~ZwF>ëÎ(«ÛÕº386ÌòÏÕ/K«C 8úî “ÏÍQëÎÈùìæ¸,ÆÌZw†8hà ƒçàJü¹_<‹ö"P—õD&Ÿj¿Øþ>&·íb΃É]ql‘:ms‘êèöàì/åpKLdòù\RpTn[Û“»"Ô"uðæ"ÕÑ à ƒ8hà Ã1¸?utyß1ªñÊ_¥½f“œ¥øžVNòá JëYPÚ.&÷,-ÊZoH~ê 1d êîXçÕï; è¯cu*UÚª¶ÿuúëàòá‰|ëYÕ˜é\—²Ö€’Ÿú ‡í¯ã³tz¿h¿h¿h¿h¿h¿h¿h¿°_ÇoDpÿ—¥íË­ùж¢çéëÖ½lHì}¼õ`rWݤ í¬5³ä¦½=í—o$k¾¢mƒ1 nÓJÀ.¬QtÓ¢è&Uhg­™%7íåË8hà ƒ88À­©Ýí:•ÔŒ}ùpJ‹D¾.г•åhûP¾r_YŽÖ²µ|à–_ìá"މ|]¤f+ËÑ6Ë›•ÖN"Xšå¡Yšå¡Y˯Þf_Ïþ±¾ò³‡¤™Üö”ˆÜÒeü‰q0¹+®Ú}hqÝÐ|Ýž{°>ÿ³çŒ™Üöœ‘ˆÜÔë:sœ»9,Úm|haáÐ<­Ÿ;4îиCã;4îиÃÁ}ñóåz/xhÜ+Û2ûß²)SXX´Î”¯œ¤N&¹§žêW¾q¨õîP÷ÌÀkçÝÞÀxñ Eë !¶.r"¶&÷þ}È€``h†f`h†f`0bûI·ß9ÞCÁ§Si6W´¨n’ϯ4ó@ßGifþWîŠå ¤XŽ€ Ƈòi6g]A·88úÇ»†épÖ`¬@ ÆpÐÀA 4pÐÀÁn¦¢4E¡D6Ø5°Y®{¹ëÞ:É]Á˜¶à£D“K‹Ò„½5ð2FºDé‚H lÆ´ %š\O”æ†f`h†f`p¯."mÇ÷uã¤ÓBÚg I¬-{É¿rã|öõµKÆM%éà+w½üÊ•hjÛ9ÁÁ­ÇtN’!‰ìëÆ9êìëkƒ„-šJÒ#gަ’MùÁA 4pÐÀA¸ÕUî›Y²q1eÙ¯A·Õ ~å¾p(¿ç¦ò³\qVû®„l\ ¹7] ¦£r_ “ß“"ùY®¸ ¿é ™šé ™Ó­vßRa-Q(嵚ëñÀ–÷Ø&›äžr¬¯Üwý)¦c]Þ—Ö?Å åµxçñX—÷ʲIî)›"6_Šéðû ÍÀÐ ÍÀÐ nàÕEìËo½Oÿ¦×£éå\Ϋ˜`’GR­úèaª´ç+÷y˜m¹vZu>ÆÀ¡žÍº¦r^q“<’ÚÆGU¥Õ7„ÙAíËé—šp4>Ðø@ã4> |~3»íÖUZöÛ¢5½Ó´¨IUš“œåg`úº«ði’»ü[3EPûYþÑšÅiZÕ¤ZNÂÇ:r‰ð±(>fÿÖL˜Ÿ4>Ðø@ã4>à|Öø­¿× å‡çø¾ÓŒ+J—ƵMòáñ0Ýäaú{=J~x÷Þ[(w”.Me#2Ÿñn:ã~ A³4 A³¸…ÖS6¶QÄÕQÄ8¹%ý[ÐNäEKx±—Û†]/{OÊ:¦‹V}]´êërV}×bÁm.羿qÝÏÜ#çèãm$rÛÈåÄþÛ]½ÐE«¾.Zõu9¬Â]êŸîиCã;4îиCãŽcî¿OW·ÒÊzIõB“Ü´Ëo)­üÊÙ°Èäñþ½é²9É=¥•UÛJP·,ŽzÎ\‡DÀÑ4ÌRZIÀñ4Ldò[¯­±€€³æñ«¶• ·_ªÅpÐÀA 4pÐÀáÜŸ*ôºßJ»ü*Î\e½ˆÜµ• jeä_¹+3ö+ßdþ—økoà;÷ˆéɨìë®åU+÷&¶^{÷þa;~C304C304ƒø“òO½åÞk”–ÈOrS£Ê2™|’Ûn͉È-³h>©Syq¼-~å¼´2™ä.µ­œ-K dÒªy‚—vE,“É Þ`Ü–@ð²Á'3ÞÈñZŸ& ^k_Õ*Ï·xÿõ`ÝÎx”Ò x¡á…†^hx¡áÅ[þóη3¾_c1ç$¯¤ôâi^nÕêÞkÒ®ºé½ð£›äÃsÕÕêÞ÷àŒ¥¤{p!çåV­î}Î~ÕMïÝ$ž«®V÷.€ƒ8hà ƒpËëOÍÒdòš·5$‰ÎËÍL>¯?õl‰CDcrϪӚ¥"ު퀨‡Eû}ñ´Yl¾å8÷¥¹‘p·¾þÔ³U3÷ȹ[[+k–j‹«¶B¢–Í—%1¥¹èwhÜ¡q‡ÆwhÜqÌýÇO¾¹‹òþúS«G,î¥ì‘ò ÝXÌLø˜C×âÞé9sÆÀÔ¬!ðÆh| ñÆœÏÇî×FÀØVëÙ"é¥Õ}’»Üã¾×c¾==¢UZ‘Sµ^ºí%(˺Ã=Ÿc7áC—Gúu—{Ü÷P>TîÚ„Sµ^-Ÿ®ÅAùù@ã4>Ðø@ãÂçSÒO¹¿75iÙbml¢-‚jZ¥u[ÔmµxZ_u›´Õpo¡@-Då¾FëwØ[è³Ì˜,ÍBÐ,ÍB`ú¤öÓo¿´þž «¼œx’Óž¦§ŒP—FOr×-©k™mîýÞòY~-è%–·®V"–·îr&–7ߺ–º×æÞ –‡fyh–‡fyh–‡Ãòëe¼ßYžþMÒVÐINC‚‡íöõhîý_W9´ÜûxwV/¦SœÕx–ŸB!m݃ ܲ·¾ž 0ÿãi‡–<ï'îÅtНóƒƒ8hà ƒp‹«l»RêONÆôÎ$¯ìöôPÑÑ.©¢£]ïéb’{:å¿rW“ZÓ×·í\õ2îNe‹7p¼‹WØã ÕX÷AðZ³C{¼âårO£=ÁkíEkÚØü-ÞþûoŸ¿€^hx¡á…†^hxAð~*~Æ-7Õ°ÝgͽOò:W\w£sÆáÎåLä¶Ëi0¹§ƒx’{jH¾rW)uÓz=,Áòö×’5ó¿ýuþëX};·êf"·mÕMƒÉ=}Æä×a­4!¿k¬Ý´F•ý¯cÈ…_´_´_´_´_´_´_´_ø¯c ûãûTÞ‡Q“Ü“mÚ’‚¦5ª4Ó’‚½…³Ðºò‰XÈš7mÚ–¦õz4Ó–ÁBÐ,ÍBÐ,n¡õ”¥÷<ä²#„Èé1yºÞj -IO“_¹ï&KKïi§e…‘ÓßÐÓSk,hIzÙ$6Ÿñdé´ ÍÀÐ ÍÀÐ fà?ñ-K£tÛ~<þüÆôTÿù•û\DÖ\DÖ\D6ý;ž¥Y¸{j`*÷¹ˆ¬¹ˆ¬¹ˆl ²4ÌV004C304ƒx"Ê~Žœ5 Tö–‰Ì‘ëÉ;“Ë×þÈäs®¨$cT¤]E_¹/ ¤Õ·7S}ûö×ø¯c=ãû_GHdêØôëˆü×دƒ~ݘAŽL>g诃ݳ‰ü:ÌY ­º¾™ªë…_´_´_´_´_´_´_´_ø¯cý—¥¾Wå=ýËR¥U•“Ü•ªï»™L¼Ï9W“s®ï%`OιJ«*‰ÍI¤ú¾†ÈôÇûü[5ù7¿¡š¡šÁ ¼ºˆ}ióÇXJ7ɳ'Qܧ'&w9¨¦9¨öЇnð0ûUKáŒs„9MݧÆ&&wù·¦ù·öÐ7lpPdÂò’åç4>Ðø@ãŸOL?¸²]‘öqÜÜ$·ÕHD"7ú·ÊäÙS#Ñ5ÿÖ¥9MëkØ‚ Üzzûáu$rãÁªLž=å ]s|]”Ñ´¶4pÐÀA 4pp€[CÁ}÷Ç8ç¼÷×̇њí¨-âO#yZ(84W©-¤hg])/®r.çœpüÄ%"7Uׯæmh1âÐ\¥¶Q¢ç×%æ 4pÐÀA ŽÁ}Rùióí×Q»ëÚ6É›ÃY}å.gõ•»–ž÷KŠëö¦ã]“K1Õ]ÓYÝ1Õ]ôKЬÓA34ÓA3¦[b›Žý¹“énR“ÜÛ0¹¥?ý¯Âäž*ŽIîéOÿ•+ç}oùÀ,¿þÇä¦.éÙò‘[ÞZÞA,ovÐÜ…ßòÐ,ÍòÐ,ÍòpX~õ6ûêkÛMj’ÓýÂÍ"_Ûw‚¥ér’ßš.«18‰RcN×j¿»©ö{Ï'P>빌ïûk›E¾¶HK×äžO |¸ÜÓÓµÊónª<ø@ã4>Ðø@ãÎgõoIš¿1É=ó7zz¯‰}H4}åÆù™É=‰¦ž¤ù][Г4ƒ€³Îߨƒ Ü’h"àø‡ÌäžDSOÒü®­ ÀA 4pÐÀA¸ÕUæmqïˆÌ×Q¹mþ“CÁÂäóV«ÒlÕ¹“ÜSÛµ9ÿ=k®r[öÎÁ­ç=Ž^`rc R˜|^hDÁñ¯{ g»6¨¿gÍUúÁA 4pÐÀA¸ÕU–÷I­Oç½ìS|Ö]yëºI><÷VS/ÀÞBZh=X{ ™siåýßán’ÏÍÑT/Xš… Yš…À-´ž²*í-šä™Õ‹“¼²p¨?$U*ÇúÊïQO#5Wer×ÕÏ0mþÅòJµÙªFÛ b{Ú‹ÀÐ|¶¼@ 4pÐÀA àW9®÷)¦ç}\l £é;®CW™|Î)Z]åЊü¿rWsú¸,qÏ'P>˱Þó 0^U ~°"“Ï9 «GZ'ác} ÙóYŸÀh| ñÆp>«ÛÎÿÍ Žíüÿ8W>ÍÿÿÊÅ!‰ÉçÞ…Ôm£)'¹g9ËWîzLÚÿ±à¿„l[¼ã]Ïø¶~Ÿã]ý+“Ïeú/ýã]ËY^ë›ÉÐ&ð2ÿÞ½)à…†^hx¡á…†^0¼ŸX~â팓&Žn{@q_ŽRŒÁg”îécßÄ‘­Ág”:Î&¹§ãìW.ÜÓéè¶.cT¥{ú\ÈÖ¨4J kœõžNÀYïé8hà ƒ8hàà·Æ±élûsÌDîz™ä®›r’^{ÇaGF[œU:ë鎙È]OÄtæKl’Þ[Çai}¹?Y ¦ƒf:h¦ƒf:œšîûOº-žùýÀ>ýæóa“ûÎ{ÖÎûa_À²qsoº@M·þæóa+ “ûÎ{ÖÎûawY.L~ÓA34ÓA3NM÷»ó;ßìvG@¼Œ“œG9¬æJDîZã;¶Cþcë¶1†“ÜSÍ5´)ýc_™Å+lëÎ9Ÿõ`•ÃÚŸDä®=¼[>óárOÑÖÐæäÒ°dKü| ñÆh| ñáó‰ñçºû·úÞQžRÙõ¤(â·á€É=ã}¾r>¦µšäžÖ¡ašT¿7p ^“Éõè <`0¹gŠ1°9ê©RçÑ0Mª ÍÀÐ ÍÀÐ nà5É ´&uRå®=G“Ü•mZ>¶ieM‹ šÉAieï{¼æ~k‚׺¨hמµmZÖ¶ieM ÀšÉ=jÅñ^hx¡á…†^hxÁñ®Î¹¿÷n?ÝO;ü³-jEŠLÞ‰|-qØË-Sú?è…É‹ç~Ú¥%t“Ü圻É9÷÷¶ê§ëmgSf¶ÁÍŒ7r¼!¾/›/]6ß “Ïõ¶K[ä^³sî&çìÇ /4¼ÐðBà /4¼àxWç</×T>Gηòéf’{zöÇ8[¡R*“»"ç¡EÎZÇÁÜÃL>ÿ·Sp\îiº'àè&ŽR™Ü-&Ö:pÐÀA 4pÐÀÁîî*ûu)£³¼’š±‡Ñ”“Ü6šòÞÛ5Ë荒Üñ®:É=ÿ䯑𱾾>ò¹¿³0>taf¼çñ–ñ1>Þ2>ÆH’ðYŸÂh| ñÆp>«Ãû===R&Q#‘{’¨³üÖQeG9ËïÈ“Ü3ŽòŸÜ p‚[O/óg‘È=éÑ=¸ÀÁÑ?ÞóÀÌÀ«Ô8c(¨€ƒ8hà ƒp««ŒïͧO®r[ü[ÙcyošäÆúÿÄä7WYŒ®2j¡`Ô\åYýZ]e|ïz|r•û2òd{IbàxybòÛ‰+FWµ1j®ò°Œ¼.®Ò8hà ƒ8ƒû$ü”ÛMï›CãÃyOûןL^î)¾Yn«Þ‰Dn[<ŠÄäŽâŸIîI0ÎrÇëÏ?ùßs™±8Ôô¾¦2>x…=Þ@êôqO2¼Æ4$ÃK·\"1¹£ôˆá5¦!^ó}‹÷Ó— Ï^hx¡á…†^hxAð~rº—Vök¿â²Æ±ùèi>ÆÎä¬Íÿ–¯{FMrOo×?¹rgßo"¸¬h>zV-¹å³<ýºgâ³¼9’ÌÚ¥Ûoyh–‡fyh–‡fy8,¿Þš KøfäIîÙÂ0Ëiã9,r_4UL^Á°¢€/@f2¾‹2 f!*÷$Åtzý‚f!h‚f!p ­§l_l~ûWõéßôú¾*¥XäžšŠYî:¤U;¤ÕtH÷0þÓ]ß÷ˆ‹ÜSûÀ l>ãU;ãÕtÆý†f`h†f`h7ðê"öÓëcYÓÎxÓÎxÓÎx3ñ½…‚õUªi‡´i‡´i‡´™©ßBÐ,ÍBÐ,n¡õ”õíåº_ÆÌç~t|²•VNò5Á Õ³ÜõÊÓµCÚM‡t[šÌ ¼þÎ÷sÊ“­’8DSg43°ù5¦kg¼›Î¸ßÀÐ ÍÀÐ ÍÀà^]ÄØºˆ.‚Ì{O¤µ¹E"·-â¹wFÏrzo–?ž¿nÀ$wÌ{ÿ'WÒwÛ"^n=~dl8Z$rÛ>—{Ç5`ô\†*\˜äŽyï œ9ûç 4pÐÀA àW‰}õ5ŒÑ®ísqí¶‡`\‡®²0¹çÆô•sW™Ÿå‚¯Û[>Àfm-¸å—7Zby~d “{nbÄòVgE,ouV‚å¡Yšå¡Yšåá°üêmöµÐÝ6Pb–³âÅäËÂ[›³ÂÞYå}ÕJLìwÅu¦¯ÏrÏÍÛñÜi©ZÙã Ý6P‚áeQÀŒ7r¼¡=âoØã 3ÞÈñZ£?HÓ×^ë½u÷SÏåÇ /4¼ÐðBà /4¼ x?ÿÅæåVµCõõ|íÍ‹{Œ‡!‘›Ž©ÜóŠ Ãøôd‘û¼k4Œ†ZÝ9$È‘Ém=ÿ‰È-ªTîyC‡aØv²È}î1šÂJ?h| ñÆh|Àù¬Áç®èòóÛÊ`»ê¦÷F¼f’“{drËMù¿Ð·0yó¸Ç¤Ý”¥í{pƒ[Oozïçj&ù0K&7]÷fp‘ƒ3ûͤ]´¥qñ 8hà ƒ8hàp îϰúŽ}s´ºÊý°zØñÌrÛø&·%ï«1fyöÜÓ¥Qù“ÜIæí=}½)ïku£Õ¡î§Âö®‡á5N¦exiþì¾¾ƒá5ßÓ¥qþ ¯9Íû{úâvýx¡á…†^hx¡á…† ï'¥Ÿz;ãÛÅ)f£sÞVÿt[•ÚWî‹$µrñ¯Üõ<ý+Wžl¶UÒÜòëéÝ[>t[õ±¼9ÔÊЉåÍ‘dÑžlü–‡fyh–‡fyh–‡Ãòë­Ù°& >DSÒ þYªÔŒö+WÜ…a>}}ˆT¤üÌtæH¥JÝdÄtæóî74ÓA34ÓÁaºõÀ¶íÞ"'LrÃ^?“&¹í€}Ý4z>q‹ÜõÆjÚo2k˯\ñ6Ûqïœûz`ÛÑ6ŒudánÎ’µ£ì5ÿo÷=¾ƽ›LçáB¸›]¥Ÿ;4îиCã;4îиÃÁ}õóý}Yö“³êÒÜTtið)´>tíØ5OÛß—&?¹‹.MDE—FšBk@×®]óu~ËC³<4ËC³<4ËÃaùÕÛ eÔ,¿ ´·>žiÞN;2:“»ÊŒ‡öxªµTìÁY—<paXO‡4I §…ýÉ]UÊC{<ÕZ*pÐÀA 4pÐÀÁnq•ñ’\å$7-Ö•È] ·xIíc“Üó|Méã%¹4b`º÷qT"w¥åâ%µy[£i¤¼``h†f`h†f`p¯.ïIõ'“qÿ& ïå늶À|‘WÇÝ-j&÷üñ“‹ÀÑ4²Ø××-Zý´‰¼:®hQëØø‹ðš¡š¡ÜÀ«‹ØWãߺüÞÝb|ßûððÊ?É=Wžh(§ÏÏráʳ7]`¦[ß݈鬓¤ˆé¬—Žh¨¤ÎÏráÒ!˜šé ™šéà0Ýz`Óû¿éùØ˜Ž†N, Ug¹§û&¦³î›Ö™Ü“ žäÃñîö•»ÞÝbÒ¼Mzÿ—ð!L¸ÓÑ!3¹§«‡p§]#­3¹'M¸[ßÝw³«Lš«ôs‡ÆwhÜ¡q‡Æw8¸¯~~[³±6>æ£Í yéaŸäÌÏ? ÷þÊ]_¹/;”¥g»x8|½•mË¢9¸Õ]䣡û9Ò¯³û4œ€³V8pæ¬S–^ýâéhñ%!ä 4pÐÀA NÁý^Aqk#ŠûÉäÍ—ýØY~ób…Éëœ £ëÀ“{º¾r[%[ËLÎu4}{Úô,?ñ´uñuûiâÍï¹Æ=&¯s‰.¥JLîiO"ÜiESËLÎÜE4}Ÿ÷ô,?ê÷¼¿ú Ü¡q‡ÆwhÜ¡q‡ÆÇÜÿsV?éæ.Èlüf|Ψ¯s³ŸÚE¿r[uG¹˜Ü•»Ð:¢Ö¡µ.4ã3I}VýÔJÀÑ"Âþx_òAëˆZDÔú#pÐÀA 4pÐÀÁnÍ4-$nl1 J+‘ÛÒ¼ëÃñWž,ôÉUŽm3ñm[h7Ém¹ÙHä¶ŒAOLî™5µ~xÖRòâ*Çû”Ê'W¹m+àà¸Ü–d‹Dn»xöÄäž!¤Që‰GmÿÃíÀúÁA 4pÐÀA‡sp¥þ´ùÀ¦ë½’óÁU¦k?}¹Ûž±¾òµþ+°qöD>wU=E•IÛÐñ•»*»ÒÙ†Ž´$÷à·œ÷=¸@Á-ïP\`à–°-¸ÀÁÑ?ÞUpVW™×L´{T)€ƒ8hà ƒ§à~]`» $­/f’ÓÝŽÝ"·……ùbrOçÝ$÷<$}宇¤_¹ð⟴~›=¸@ÁQ¹-ºÈìwuôpÖ‡$Îì*!=Ù'­G 4pÐÀA‡cpÞÜÓ¾?¨£«Œg-„µ0y'QåýfžˆœoÑ¿¿Oò)(Mó"šÇ 4J«”’¶ì#™–}ìñŠwõ ñ¬¿®&ï$„¹_‘ó³à·ü-ÞÀñÒÿv×*¥¤í I¦]!^hx¡á…†^hx¡áÇ»dGSzÏŽ>¼ò§³^°O½˜œ9ç§ìh"½`‰T®ÆÁäÙñÊŸ´f®tÖÌ•ÖP0½'ÙÞïÓaSO¥_gçò);JÀ…DJã`òìx¿OZ7V:ìÊ©÷ì¨8hà ƒ8ƒû¤²dGµvª”5Wyºj$¹ÉU¦Ä¾îZ5’²Çj«FÒ~ÕÈX\šÖtEðšêé.ŠLä¦s™ûºkÕHÊZ«­Ùãý, IkÍðBà /4¼ÐðBà ‚÷÷’2îùØíª$cµê$·$ÖjÕIn›ú˜ˆÜU욊Ô*›Š4Óà+÷…ÁÚ¢“-÷À¹¯¾£œ]O—2VÂëDä®*ØT¤NÛT¤™„»9ŠÖ֬ܡq‡ÆwhÜ¡q‡Æîk¾¢jïnu?K<ßÝêaákdò[›—±+a’»Jª´9ú+÷áÕäΫö:·ï¢x©ÜXe™üÖSdìJ xÍ… UZÕQù­+¡Øf¦¦Eh=_ÉÔóµçcÏ·÷öa‘c¨üVÃ^l£JSÓj´¦­djÚø@ã4>Ðø@ãÎgõoý½>öÉ¿u–赟ý=ü|öm}ì|czôoZ×ÕWîšÇ5É]I†Ã¦­55Üß«4ŸüfßßMòá‰J·½?œ;ýº/*íÒ8/ÂÝœd8l*KÎØÏwhÜ¡q‡ÆwhÜqÊý7šïÉäq4Ñúwþ ‘³ÅÓëHĽ|mwØ>Õ嵸WÛ4É=k¯¿rŸ£ÖVíÁñ¡Ð¡19Ûž¼NÖÛËתùmZ/göÇû<í¶fpfO«­ÀA 4pÐÀA¸%$Îû–±¹DîzHiæ‹­1eD¿r4Ç¥û+wu"äKrV{ÓjºåÄíM’±mŠ˜Îz&¦³º‹|IîB04ÓA34ÓÁaºõÀBÚù•IãR·Å6‡(™ÉçºÎRŒîRh4É=(Y['”Më„öxÍÇ2é’鶈àåW–Ìäs!ÅKÿxWEðZP²¶Ì(›– x¡á…†^hx¡á…†ïêœ «”ž’Ȱ˜ŒYëuÊqÿ€bå´EN9jÎY[ä” ÛˆžÂ¡È6i˜2„YëbÚƒ ÑIjk¤rÔÜ®¶FJ 4pÐÀA àVW¹o\ûŒÁmFÍ"·åèØ×ùÅÓ$w½†LrW$™L.mß§B fGn`ž’‘ó;–Iîzv 6ÇrÉäzü†f`h†f`h7ðê"²´çn’ÏWÝ’W]CÃN¶|Ýe-µu¸À¨-¾#K›æö–Ôòk|1¹§;k+„¾rWqHÖVmÁnuõýÑðaãÇj Â`¼«C;k+„8³§ÕV à ƒ8hà ƒÜê*Û¶){zËÑõ‹Ém]Õìë–!™\ì뮮ꬭÊZ?H6õƒlùÆ'Ì|"çcÝ?Iø°‘Š ¼«û9k;€²Ö’Mý h| ñÆh|Àù¬þ­kϵý5||ƒèÚsmg³%lwv­$wí¹VÛ“»ö\Û_#ŠÇ·®=×v6$ÀvéÖ:rמkµ-<8hà ƒ8hà෺ʱ oK=¦ŸMrW(x¸F'²¯ûnÍC ‡ ËXô-Ÿ@ù.w…‚‡KW"ûºïr<´Pph¡à°L?ø@ã4>Ðø@ãÆçÏórIeÕ“œ]6×EDNËQªå뮞¯¯Üå ~åï!ÛÞÀæÂfbà–n¯LN«%ªåë®Þ,b`«‡Ùx ­C304C304ƒx ʾvûc,G™ä&Èäž…g# scòâqPF~å®w‡é²I¸c1 áN"“{FîtT]nL^<~ÒˆBÂÝúlQ ÝUîиCã;4îиCã÷ÕÏGi‹bÙ–”ß"ɧºÁ¢µQ”¨…‚ÚÆ™bÚ8S¢´ípoà@ Lå®üY‰Z(¨í|)¦/‚¡š¡šÁ ¼ºˆ$í¤.é,•É=É´’NBÁRgòâȆmëJIZ,—¤Ôý7}T&÷dÙ8öoú .rpÖ4YѶ®”¤cIÚI-€ƒ8hà ƒÜê*÷ík4•Ùå8°”Ù^²Mi{OJ6¹´½ƒ5šÊì6XFg/÷ESY‹¦´Í#{ÿq=~C304C304ƒxuûJì[8ô”*Zîݰû–¯ßògµÙÊ0ŠÖ:ñ•ó61“é|ª˜Ôo€1V´Ì¿aÕ,_¿¥K(^.÷tH¼æüYÑÜc1¹G?^hx¡á…†^hx¡áÇ»:ç*5áNrVzñ4_®TæÂƒ¥‡·Ô£«n\êF&¹ëÕ£jÑc}o‹KÏr¡¸T©˜p° Ç+õpÛ{$rÓ…+Fößî{õ¨ZP[ßÛ£Ò³\h@¸Cã;4îиCã;N¹ÿm.ÚîInØŽú‰W&rÞ¿\,_çóXL¼/ 65kmy10[`98r‡dŒcÛû¸Óï DMÝEÛ¾!š¡šÁ ¼†‚ûv‰Ûp‰§SÖ·žÕÖ.ñ•Ûj€kgòâÉjû/&¹gÄAÑÚ%öà·¿mÕ=Gå¶âÓÚ™¼x2ŒÚ Îü꡵Kà ƒ8hà ƒÜê*÷óð?Öâñ~k®÷ÿ¿DîJiŽý;°5ÓXmEÑ6PpÁú@<Þ¯?õþÿ—È]ÉʱN´yÚ‹¢-°(Ú 4pÐÀA 4pp€[\e½Þ˪\e½Ž.žÈ™Émµ4‘ÈmAi+LîI0~å<(ÍÏòW™ËÝUpÁ¸ë—€c÷­\äàxIF$r[l3‹œ5CHÀY£Êz¸Bbi"€ƒ8hà ƒ§à~{0â-GW÷»?š1GWq6¢péá­§»?Ø×ù~Þb‘»R|U[ÞQMË;ö|B3¦ø:R®²¯·;°¯óý¯Å"we«¶}£š¶o| ñÆh| ñ糆‚§ë3"“Wö„Ñ-rã<–Ää·[ó0ú7­ïã+ß”Uü›©q£ž.[ˆL^Y‚¾[äÆé‰Éow¬aôoZÛácöo¦¾4>Ðø@ã4>à|Vÿ–Þ Ÿ®ºé0+X‰œû·bùºÏA¥‡´žÁA™v^¯¤é0 T‰œ€bùºÏä‡,ŽÁØv^†f`h†f`h7ðê"²T†Q3KzÙB |6r3%&÷¼±~å®7ÖIîyc­Yz8؃3—wlÁnò٬ǔ˜ÜóÆJÀY3ÿœ9–¥‡4pÐÀA 4pp€[]eÑ¢©rMýɆ‘¶‘d›ÞYËÖ¡k6¬hÁXÑž†¨|å>÷¨5n|å¾·†jŠ7I¾±P¥¾Ú? Q!6;(­C‚Øì ª).ôš¡š¡ÜÀkü¶ï8¨—ñªÛçéu&¿y‚l¢R{ØÞ”SÌLNoÊÃòuWkXÕúª©ßa7P¼ë!m‡ãÓ:“ߎI¶Z!xÃo˜ñFŽ×ÚöKðZ;ÀªÖmQMÝ^hx¡á…†^hx¡áÇ»:çþ>ùÉ9÷÷±-‹ÛÝËO±•É'œ³±€¹j«1j—†~å®Yõ¬U$-m¿{î![EöÜå2‘Ÿ+“O#çNÿx_PÛ¥a§„»9 zذЗæç;4îиCã;4î8åþIý§ßïé¤QÅ8÷~’Ûü<“Ûʧ—s“ÜU>=¤m˜_¹kE{=lTÁâ¨I¿ƒqžþÜÃer[ng¼¯|zHÛ0 8³§=mTYr‡~pÐÀA 4pÐÀáÜïòóëæ*Ûõ> çÁUNrÛ$œÄä¶âFúõa*ÞŽD~{®ªÆçªI^ Õ¯ÜõÞÔ¶ëÒòÞ´Ç`lg!xùà“Ää¶Ú;úõaª-ŽD~{ϨÆç*‚ךÎ%x­ùŠ=Þß®ˆùð x¡á…†^hx¡á…†ïo2jÜ3YÎҌίqìS6¸iëQ&¹'mZoK3õ¶‡ftx [žò±MÛCB l ›ÖœÒLÍ)‚¡š¡šÁ ¼¤4[Ô\ľ:žç$™œ·¿e“Ü““lÚZ¦­iûî’´x˜¨y˜=žCbrÞ^•MrOî°i[Eš¶U¤‘î’{–Mà4>Ðø@ãŸß§ÜC ô~?}ò0iïßšñ‚™ÎJÇcarW•´*=¤ò þ-™ü[z¿çlê$ðBà /4¼ÐðBà /8ÞÕ9:‰ž´ìwÕCv­!¥k )ÝÔ"ðÆh| ñÆœÏêßvõøTã¨ðI~ó0Ùö$=É=‰µ¾ß–‰µIÞ<T”F…ÿÊOfì,Æ[pƒ[Oï\ȶÇfΚXëû5јX#àÌ‘Y”F…p|HÎ=µ%€ƒ8hà ƒ§àþv÷}kL7&Ö&¹ÁUþçÅ.&÷Tïô$íݛ䳧½ŒïË“œzÚË"÷yÚ$ ÉÙsݘ—#ÜÙ¹GÎÝZÖC¸›uÚž÷ËøðL¸ÆÊ}Ž:I3vîиCã;4îиCãŽSîGôô¼}@iÕèçóÉHáÿ|hgòÎ^@.Ë×MUèiY¾Ó Ëwšåë®ýª]kêÛ&ƒ”‡ºí!áxW§’fÎÎx#ÇŒ#,úÙ¦—´¬èé†M/Íòu×zÖ®µíñ~êàúñBà /4¼ÐðBà /ÞO*?ívÆ‹4?­—ÃùiT^Ƀѣs.Z>¶HÛ»©Çgo`ó³^G\Qy%ïî±h Õ"m?ì¦&ÁÀÐ ÍÀÐ ÍÀà^Sšu›ÒÌÖ{z}=ãO,_¹q„EerWVµ'›*µxw­Ë¦›ºl¶xÇ»Òúzžê\^>a¡2¹+«Ú‹O•Z¼»ÖeÓM]6^hx¡á…†^hx¡áÇ»:ç¶uΗõ=½I-Þ½¶xG"_;÷Ïñµ1yöøv­Ë¦k]6ÝÔe³Å8ÞÕE4©CœàåÈ‘È×V¸ýkñ„7r¼fß®uÙt­Ë¦›ºl¼ÐðBà /4¼ÐðBà ŽwuÎ]»\wiÃWn+vªÉ]—ë®EÎZ—M׺löàì—ö.íq àh•MíLw-&ÖºlºÖe#€ƒ8hà ƒp««ï®ò馼_y“£±.TÛYÓµ5_¹ï9^k“Ù[>P˯v¿ú„Z~­øÔ–Îtmé ±¼ÙYi}.‚å¡Yšå¡Yšåá°üâmƾQ¥Ÿ¤'¹åÖü ÷ôô ÃÖ˜Ë"çaá°È]×ÞaêsÙó Õø¦LøÐ{—{Z÷†a/Èe‘ó bXä®{ë0µÉ| ñÆh| ñç³ú·m—Àg£ HO6Ò›ËÐÚd¾r×ÍñW.DS{ˇaœY¶·¼ù5e@zZ ±¼5š"–·FS‚å¡Yšå¡Yšåá°üêmö=/Éxwñ¨Àï·œÈ=o_¹ÏYE©Boh;\F4ù¤}‡D2ÞðVÂ5ó‰œõð1»´(•Ø m‡Ëˆ&Ïåç4>Ðø@ã8ŸÕ¿%©§o¤³æ%?ÉÙmñ©Ódl+Ï?£ý[z÷o¦¯ûü[2ù·$µî>´DuI·>ÖŽ=Ÿ@ùP9??¦¯ûü[2ù·$uè | ñÆh|Àù¬þ-¿¯ xòo™õÛK/ÛWN¯{O½lCÛ¢2´‰aÚ¢²7p ^OYf NÁÒ4F lmÚ“¡5) ÓÁÀÐ ÍÀÐ ÍÀà^]ľÈúcœ:¶›>?¿iüí`¨‹Éi×èü¯üã\©Iî™+5Š4Wê+߬Y7¤³Š–ÎÚsÆq£{îq‰~vÿ<ÌÐßsÅ8îŠp·Ž»EwE¸›“iEK¦ù¹Cã;4îиCã;ÜW?oبòMÕÃ2ŒHä®2Œ¡5k|å®2Œ_¹âi Û0žÂ¬zX ‰ÜU†1´> by³¯«š¯ó[šå¡Yšå¡Y˯ަ½?S>y›özñ¼Ç‹™Èy!D±|Î`y ›–Xkš³jš³jïomOΪ½Þ·îÿðg"ç/ðÅòu:Lã1®kZÆ­i¾®i¾Î8hà ƒ88À­®rßJ­£Ÿõy-“™G?|ce_·õyöu_XØ¥>¯¯Ü—!ì[‡ºLÜã ÙØp@ðÒ‚ªe.ôè‡O€ìë¶F Â¾î‹=»ÔçEðšó“[¼Ÿ²¼AøñBà /4¼ÐðBà /Þßìd¾M¸C{ l¶«-އ£“Ïsº5 Zlè}H&¹Ë9S´;´÷åÁ‰Ú¢Ýq8y.1ùÜhß­ÁòЂeC™2É]Îy˜bâ¡=OûñBà /4¼ÐðBà Ž÷9ëRöÎòÊäÝ"÷Ä®³Ü‘ÒœäžZèò“‘Ú÷É€ÌòÆ¡Ìò¡˜j¡™åa%³¼1¥É,o¼æ3ËÓÛâ½æE±<4ËC³<4ËC³<Ž-¿ÎÓ×¾óâö¯ÁâGˆÜÑ6ÉëÞ“Ï¡`)¦Xn–;.Ú“ÜËý“¿Ær„O |ckãÃ6“ÏÿØS>ü뎛2ãc ÆŸ%Sø@ã4>Ðø@ãÎg¦âûñmXÉEäÜA•‡3•RœY><áPTMˆé3ݲ܈™.DÓEŽ™Îx‘c¦3Ç3Qy¶PLÍtÐLÍtp˜n=°é}°Æí,U&wìdœä¾›”Ú¹Iî‹(’éX§÷)·ŸMerÇNFf`ó±NJ‘3°9$H¦Ãï704C304C30¸W!ÕÿÏò¹ #Û†xOrž!é¹§s–»\D6¹©þoàÀ Låü:Þ-rO%3°ÙEd“‹êÿC304C30¸WQÞ]Äö÷ÌäŽíIn«H“;:Œ&¹§ÿŸÜ¿-‹X>0ˇž™ÜÑ}Í,Oß~ûã=­GÌòæKGQöU)–‡fyh–‡fyh–Ç©åÿlŒW}²yú7}_…ÞlÃ'¹ïɦjÞFªBÿ'Wrõýáàéû}-t³ d–7?ÙTÍÛHUèÌòæ‡ßòÐ,ÍòÐ,ÍòpX~mö5±Ÿfô6G#ô?)U&w”VNrKhô‰%1¹Ë×5íòÕ´È꬈=×Å×í¹‡fôugÃ×SªLdÜYx0sœ»ÙÓ6íNØ´¸î°”z,‘•Ÿ;4îиCã;4îиã˜ûï›{º¹‹} }‹F?ßY¥|`ÝéD><~¾³ü­ŸO13yö$Ùºö²ßµ$[7…®ûëî¼³RêÀš‘‰|xÜygïËÛcbfòìIñu­0 k)¾nŠýx¡á…†^hx¡á…†ï„ïKè»õ b(k'¹±„žÊo U†iÆÚ,wyÍ»“wÝIwëÆPæÚ2>Æk„O |¸ÜU :4÷8LîÑÏh| ñÆp>‹õõoÅ6‘{–ç÷$ÿ‡"÷”•â: >ç°¯{Z„&¹§S~–'‡{„eaÁoàx—3NðÒ¿J¿î©J%xYt ûº§Eˆáµ– ¼Vï ˾/4¼ÐðBà /4¼Ðð‚ã]ó®èø¿àÑ|ÌÛ¼«´.a–{Þ›e~æ,÷Ÿ0íoùÎg=ã`§Ì楥 ŒõU PÆo2>f÷h*Úø@ã4>Ðø@ãÎgõoÛ ±'ªßÿ‘Û¢ÇDä¦Ôe»:“»¢Ç¨EQz¢‚Ö2°¸0ƒ‹‘›‡\äàÌqaÔâÂ(½1AkXÀA 4pÐÀA¸ÕU¦wWùízH£2ù2ðƒ<e"«d˜=mɉÉ]h’Š&¹ËÓ¦³b€¾xÚô~`ŸÂ¬³3÷ȹZ€œ‰ìE{>ï3÷ȹ›Ü$îfG‹îÏñwhÜ¡q‡ÆwhÜ¡qÇ1÷ß”d¾¹‹|اß~örWÓÊ$÷ôµAkZ©ieo¡‡NìFä®®b!sô§uÀÔu"Xš… Yš…À-´FSå¨ùô³T­ÀÐ6òtLÊû³l1É=½«(Ú/Ú/¦3^ÎZ+—²Zžiyö+&¹§õEó0Eó0Åäaü| ñÆh| ñç³ú·z4 ãOf¬jϲõ½j¥šäž²“¯Üç ªÉAÕ³Ák«j£õ½¬¡šäžºb`³‡©&ã704C304C30¸WAºK’1¡Ôö…³ ¯:Fc·[êÞ°"a­–¶_hÝ%“ÜA=­H08¨¶Ã[–W‚7$cÞh70¼KÕ1Áš1Áo˜Ç?ÿñKo1´&‚×€=Íã7¸ÇÞ®%AãÇ /4¼ÐðBà /4¼ x?¥üÔ[£1vE埭…]+üè‡UÇ‘Éç¿XŒ×Û®½«v-Ûßµl×ÞU·Íœûê;ºVPÒ«e#“Ï^”;ÿºëY¶kÙþ®eû»ö,ëç;4îиCã;4îpp_ƒð±£±úzmÏù㨇Ôâý•›êg°Ö~-Rë´æ˜šSÞÕ×ãl½Êê‡ÔÉMð²b Tößî ‡Ôú­·¦Þ/4¼ÐðBà /4¼Ðð‚ã]œs¼”³³ÜPró§5æ+çAx±|>=U_å®i?ñ’Âà½å­;g™åYñÃÚµB,o|J,o­«&–·¢ñ’QÁòÐ,ÍòÐ,ÍòpX~õ6ûóŸj‹å¾r>Há!šŠÞ\"¤}.¿"Å]ìMª-N"¦³F*ÒkJ„´…˜Î|Þý¦ƒf:h¦ƒf:8L·Ømó†±"w’Ó]³È]Y²¨uLrÏíéWn8ÖÛZunàõdÄ÷¤H³È]騨u [ï/{ÿ9ü~C304C304ƒxuÛ¢}$«‹HûÕ%Æá!_¹qé•ßzè»ñ’4eذ`2ÏA™6,lñŽw=¤i¿#Ä8{„àå;¨üÖdÝ·œ¤¹GÃú“é|îÑ´ßAÀ /4¼ÐðBà /4¼àxWçœßÇîå‡ W>Kï€Ê=%Ä_ù-Å~]Fç¬ÕùÿÊ•ûZ~™–îkù,É*÷o-¸å¹ÜS\B,o¾îù-ÍòÐ,ÍòÐ,‡åWoS¶¡`4.ªøÊ]-QÛ4ñ•ûÒ;EsÛbsjºµŒ˜ÎÚEµUÄtæôNÑλßtÐLÍtÐL‡éÖ[ßëcÞ—ceÇÚvw«Goë17&÷¼­GmUÄWÎÝ…Ét¾»›©€Ÿà Éö4¿ÇºõîV_g¼‘ã5g¬µ}¯õi>jíÑÔ> à…†^hx¡á…†^p¼«sÞ–?ÿöÐÛkMªýÊ]Sy'ù|wKÆöÏIîJ¬i«1&¹Ë97“sÞW·ëû“Ê` ^ó±m¯)ÉØ=JðškÚ ‚×윛É9ûñBà /4¼ÐðBà /8ÞÕ9w-rî¬EÕæœûYkXÉL»VGѵ‹¶Ö}@À™câÎ:3mn·Ÿu•Ì䮘¸kU]»ækí8hà ƒ8hàà·ºÊq´¾ö·ŒÈ]¡àÐ^´úh*¡ß[ˆ/;]¶Ø ™£©¡eëµ*ôhªB,ÍBÐ,ÍBàZNYºÞgj=$é:ê²Y_úÒuä‹É‹#¢øÊ]E:,ä^Fðï-¨å—@,O;$–—>byúSf<ÿ‡iXþxWHˉ—éø‚å¡Yšå¡YšåqjùO¬?ñÖ»p8Áïþoú$÷ÌÞùÊmÞft&÷Ü_’VžÎêÀS\,çÞU&÷ å!–§¿ùÑ™ÜsIZy:¬…®÷^°<4ËC³<4ËC³<Ž-ÿIé§ÞŽÌ¾ =g[&|’{šÔ¾rW“Zz/bzgüÊ]MjI›ŸöÕÓÔò뉋R“±¼µI-½_?=Ë›½6Ä^°<4ËC³<4ËC³<–_oRé=_ñämÒáаÄä´¦¢™¾ÞÉ=îiÜA"Cì3ÙtŒ‹Èù»[zþºâ¬Ò{’àÉY¥ÃyQ‰Éész3}½³RèË"¿‡™,¹3rIÏ_W|4pÐÀA 4pp€[]e~1ýtÞóë+²Eîš´úð¤ÍO¦9ð{‡«f`*w yNZxÒÆÈ'ÓyÁÀÐ ÍÀÐ ÍÀà^]Ä~ }´ÞÝÊ6š/ÝñL‘^º“¡¤ÜôÇû\Äv vi‹‹Ø)Ö+ÚÖÀ˜Ê]/ÒÉP=múã}.¢lÇbÉûø ÍÀÐ ÍÀÐ bàO?ýžL&Uè0ºˆ*MiNõÕÃ<æ¢ëI.úƒ+1¹ËAUiì¯\¹p‘d]O•æ/ïÁ Ž~Ý”PÁEÎìøª´Y–€3_¸üà ƒ8hà ƒÜMµ÷hêéÂÕ´Lx;œ¥‰Ü6K3v&÷LJMËMi5áÉT¾Ç(ÞÕ+4-ÝÞ‡-F"· [ŒÉ=ªRÓ2XZMx2Õ„ x¡á…†^hx¡á…†ïêœû»s~X¸–´ªì¤Ue'­*;iUÙ{ÓfºuZÒꢓV´ºè¤ÕE ¦ƒf:h¦ƒf:8L·Ø¡¥¯Ç¾4ÒzslÑÄ>Bcr—»š»RûsÒʪ“©¬zמ<û*@ëýr°½û/јÜåÒ†æÒ†Ôþœ´šðdª ðBà /4¼ÐðBà /8ÞÅ9çk[ôuu6ºŠÊm‘È-Î9|ZarÏ(›IÞÞ5k“É·–ÜòËéÝ[þ!á‰Üt°ÂdùÈ-o„C,ou|Y›L.Xšå¡Yšå¡YË¯ÞÆ0™üéÄacùOªÕèmpæmberOf,Cš„ó•»¶‰em.z6 ÷~:°;pƒ[ÎŽL¬LîÉyeH3n8ë½5kSÙpÐÀA 4pÐÀÁnu•ñ=ÍõtÞãë­ù©¢ã+·õþ 0¹çÖ<É=·æ¬Uãï-¨å×_o*‘ûþnÒþʬU,gSÅ21phÆç—Æ:´÷?íQ‰Ü÷Ïx“öWf­f8›j†C304C304ƒxuý=úg±ïÿå/¶y“ܳ"í+¿— F£‡Ñj†óSͰÁÃô­‡YFSìùÊg=eû¹¿”—{©mù·Ë]÷Œ§êZƒƒê{µ„~>Ðø@ã4>Ðø€ðùÄøsݺkóxï®}èùÊC{@ZmÉÐ’ ãlÖb_\Ïxo“|è§ÊC{@ZuÇÐ’ ã,ðnKàà74ÓA34ÓáØtŸ4~Æü£-—Ô_ö…¯·Ûb³Èï9Šd H&ùòÌbrå’’¯Üuåù•¿_yk×ûžO |¨ü~›O¶€dÏ'P>\î Hk@²ç³Þ˜>Ðø@ã4>Ðø€óY.\e?;º'H…ý_¹«2¿@šô•ûLj_YÙö6×ï[ 𠤉@ÄÀf“‡ñš¡š¡ÜÀ«‹ˆïÕøO§,²åöÁ2¾ÄÃ(2ù¥b{å™äžWžIî)AùÊ7%(7xecÁŒ« ^º·aOðò¡#“Ï#ÅKÿx×KÁkvñ¡ÞÁàã¾lq~¼ÐðBà /4¼ÐðBË=ÞÏïõvK(•$µJMrÓ›Ú’*épûº­é~D&÷tZm>ö$wEi›ôZòí¯µ¡Šà¥N•~Ý6¤†}ÝÖ•="“{ú±Š6E›à5;ç´ßb²ø·$µ] x¡á…†^hx¡áÁûIñ§Üó¾ô3Œ‘s>Y÷A¿ˆ|½‚Û’‡y¿,Î9¿ÏzkøÊ]›VŠV}MÀ…aŒ‰óÑ.3töõõæiË*æýÆ3kLü>û饃€³¾t­úZ 4pÐÀA àÖ$©¾6)…õŸÙœUÑ®ùEZ^P´êëBJˆBö¦ ÔtTî»Bi-AѪ¯ÓA34ÓA3¦[lÕ.žuÛdãųÆ6‘ÉçØ¦w”ªÅ6Uê,+‡µßcqU»RîÁ…l¼RÖÃ"#“ÏÿHUã•RµØ¦Jeå°|ºÜ‡¶ à ƒ8hà Ã)¸Oº~òýضÃÓ¢± w’/åí¶$[ÓÞX›T3ö•ûîqíÈ×åÕÛlëµ¹å×ÛXY¶-ÿÕ´Ç×&•œË›U;sVkvÇoyh–‡fyh–‡fy[þ·Ö"ÝŽÌ®ø“¬-ÿ¥³æ9›·éš·Ñjà¿rŸ·Ñæfo-’µg¿tÖ@fó6]ó6Zu;±¼ÙÛhc·ËC³<4ËC³<4ËÃaùõ¸ŸÚ»ñ8×EQ9Kû< ý.ãl]T¡r×ûãвFgåô9/Îj_NÁ­vn¢r–9yçMÀÑ­C…Ê]/‹CËYó÷åè 4pÐÀA ŽÁ}rý‰ó­×{ŠûÁUNr˺¨5åU/©ýy’{œUÕzª©`oà£K#¦]2Kjª^Rû31°Õ©T­˜¿šŠùC304C304ƒx‰¦ê®–ù¿ÿ‘±Ô¶â5SôÔmô•ó‰(6¹'STµjüjªÆß8p¯Ç¯i‰§v!b`ë­j¦«V_MÕø‚¡š¡šÁ ¼ºRo\“T÷Ão­›õpàsMLî B´Ï_¹ÏÃD“‡!õÖÆ=G„µä²'®‰É]1Œ6šð1;¨hrP~>Ðø@ã4>Ðø€óYý[’–êÖÓ‚öJä6ÿ–“»ü[’fLU­"½nK–Ëò¤V“´·ž–,W"·ŸÜ˜Üåß’4¢ªj%å[>ÿÆ ÝNY’ÖÚ | ñÆh|@ù”þÓo§,K óšß /‹Üç ²€eÍAåmËÌRß´7°9±½7pˆÆÉÙ5k&kTÖË~Ôžûº/ìZ…R×b¹ýüóvßõ(š¡š¡ÄÀŸÔúÝE íyN+ØþÊ]m¿“ü6VªÙ¦LrÏ”€j¨÷6™Îç †éª;´×=­¬›àµ6oñŽ—Ý3É Š‹M¦ó¹ÇaºêíqP+þðBà /4¼Ðð‚ã]®ºm_aÞ¢m#Þ$·Mócr[r ÿÚ%mûm—ä]›V ÞLê{>ñY×î>¼öˆÉm™¦Äþx×RßvIî±iõíÍTß.ðÆh| ñÆœÏêßð|Öû‹)‘³í9OÁçWnìŒLî‰'¹çzÛ´êú¶¯®_]ÞËz[$r¶gæ)z$|xoYdrOøGøXoÇM+Îo¤8ÿ^%ðÆh| ñÆ„ϯßÂírÝ¢t¹žä¶ü[erÏ0ç‡9_LîÉþµ¨…Zk@3µìñš/×/ONU&÷ s&xù´_ößîÊ=¶¨EZgA3ux¡á…†^hx¡á…†ï|&iSÒ$·½#G&§ïÈÍôu×Õþ°-"&oŽ’Â_ùÉXže†þœyÇŸ##“ÓçÈfúºëÎX “7GA#ǧú,_’6; à ƒ8hàp îï–Û–µ8vßã£Ñ×eicTËûš™Ëˆj-_¹k6lÓæÞ·¬E¨ûÒ~ ŽÊ]» ¶àÇ¿î©t$à¬ÅÛM›{/€ƒ8hà ƒpkTY¶³a³5ª,'Cþ¬™ätŸx³|ÝÕ¯:É]—îbriÛ¶nàõ\–£™5ë*b`ëÄb`sR±h×Þbr=~C304C304ƒxu¤»$]D=šö'+X÷7ÇdÌ VV§¼Í ÆÚ™Ü•¬Òþͦ êoU ÆH_B4z®z6mkMdLVV-»½¿ÌÜ#çnNVi1gÓæü·ªÅr~îиCã;4îиCã÷ÕÏ·÷[ó“·iÌÛ^·›´-®í;MÊe+­œä®Çñöàç ‘d3ùãö~Çzò ?Ûëv“–µ}_åÃå®Çñöp. h3ùM?h| ñÆh|Àù¬þ­¿7â=¢]«Þé‡tT¾Ô0Ú”¡9%?ËO"ÉõÚß²žBÁ®ÕåôÃŽ**_ªßl®ÇÐT‘ŸåG;›–hÊoyh–‡fyh–‡fy[þÇO¾™ñ¾Ÿîéê7´[óÐÞ[ÇÑ­íbr×­yh·æ¡Ýš‡vkï[Òž®~C»5í¹vÝžÐØ»ïÖ<´[óÐnÍC»5û¹Cã;4îиCã;Ü—¨²_ïÙч·æI~ëŒé¶ù ý:+Œ)•É=d&¹ç­ù+wêú• Žº_ïi®‡·æ=¸@Á-ž–€£õ¥2¹gƒ g}k&ଞ–€³zZ4pÐÀA 4pp€[]%Þ/àqÝ$7½5_É=!qÇYy9“G âWîSÖµî›nÚm±Ç(ÞÕ+àì!öêLî‰| ^ZŒÄäÅQ¨HðZË˻ּÓM›5¼ÐðBà /4¼ÐðBà ŽwuÎñ};Ø“sŽgùŠÜ™Ü圵æ¯Üµ¶õW®¢ñ}«Õ“ߌg7ÇÜ™Üå7µ¾bys$µHÒoyh–‡fyh–‡fy8,¿zC3K½ÿör×cñ$Ÿ/Ç0>÷÷v’§·˜nز‘ŸåŠ·145Ôûÿa/w=ï-`|îïmOo1ݰŸ!?Ëoã·<4ËC³<4ËC³<–_½M>œKÓ™¼;žnû¶¼üÓ«ÑÛh _¹/ɦ5tì-ÿ0Ѥ3yw<Ýî-¨å¹Ü•%ËZ–LëÈ,ÍòÐ,ÍòÐ,‡åWoSŽêLþœ¸òîm²EîsÚúŒ^4wQÎÊÖ#SÞ´Ù"÷wm}F/Úy÷›šé ™šéà0Ýz`ëáX'&ç•]Å$÷”žö*Uvu­G`oº‡‰> r^ TLrOUh¯RiV×ÊìÓA34ÓA3¦[ì¾RÆ9á“Ü”«\ÆTö&UröÆFVØÜ…¡R}Xä¾— f™Ã¶ç`3NøÐ¼Ú2¦²7©ÞsÏ'P>\^=ADÓžrše›Àh| ñÆ>ç°õ}¥zFÿÖÏüÛ²ƒx’w–\}z‹égc*Gfr×SN×’«‡…îË”±=¸@Á­§·Ÿ¬e91¢ñ)§ŸÍG™É]/A]ËÍžÖÉ/é?8hà ƒ8hàp î·ß%ß]å®ìö/ãüŠ>×µ_Ln{¶NDn«ÞL…É©«l–ÿvî*M¦óE’¦}[¼ã]½Â8Ü&N¿n{¡MDn+L…Éé¹l–ÿv~.M¦ó¢¦}^hx¡á…†^hx¡áÇ»ÜÓǵuÎÝXS4.V:D¼k&r›wÅÅäï:Þkã£é¿Ýå]‡iÄ–Oà|–3¾ç(Ÿ‰Üv~Àþx—{ï•ÔÑôßîrôBà4>Ðø@ã8ŸÕ¿Aš˜1É=3ÆÙ>ˆ¸¤1¤‹ö$÷¼3~å›wFƒ3U¤H3ö|Ì3ÆÙ¾¸¤1¤û4ácÍC>fÿf*)ø@ã4>Ðø@ãÎgõoq;2^ÆøípÄê Þk¯aùºë™f’ß:Ýç4s2É]Ñc”Zà‡¶Nbì×I,·ãí¯#ð_Çê"÷ ¬îñ½zú–¯»‰¶¿ŽÀ\îŠ]£Ô(?´mû_ÇgY—#ü: ý: ý: ý: ý: ý: ý: ý:À~ŸØ~ÒÍÃìëÿGµ½p Ã2‹Û¿,™É=ÝF#i‰…¤ýÓ´Àû¬} -£œöà·úÃN„Û±ÎLîiVIË8$Ík'-"?¬o÷7&4pÐÀA 4p8÷IãgÜl–ŒŒÌšãmI†¬EÑûehÆ$Ã{ïÃS×üWî ƒ³)É¥9"[>ó¡r_»_}@ùp9MÒ]¹/ͦ$C–Æ…| ñÆh|Àù¬ImÅ(Ò þWΗõÜžàÙ×}±\‘žà‡¶ÀbËú²¡-° |¬Oð„›Lûº/d+ÒúÐö_ŒbÙR6´ýh| ñÆ>—‘*M=‡ë3VÿVµ«n=›zô_ðJäž©G_¹kêÑ$w¹Çj ÿª4õhnK¨ôë® q=‹3á¯9ü«ÒÔ#‚×ì]«)z¬ÒÔ#/4¼ÐðBà /4¼àx×à³½_®Æ,å¾7ô¦¥òšÔ«û+?©u_š|F{¿W=L*&¦3?o7-™Ö¤^]b:Þú·äâü¦ƒf:h¦ƒf:œšîokÌØ·ÆÌ3á³a}{¬‡µä¦ÎJL~ˆ[ÿ&¹§SxZcL¦óESÝMíû0(Þõ\nñ†a­Øé‡#v“ß’5ÆÎA‚×ÚÍ< }&Óù¢©nЦüx¡á…†^hx¡á…†ïM iSä Í8™ ø“ÓU—}Ý÷ª;^s4}Ýç]MÝ4{>掄O  f>‘óá—öußãíx=~ÑôuŸ{4µÃ| ñÆh| ñçsóoÿýﮣA1÷\ÜMÞŽÔ,w„³ÜÑý¹{P 3ŸvR©¼ûj:[hEMg»-RÓÙÅH¦ƒf:h¦ƒf:8L·X¼™¿ù}ƒÆm†^³Èyí„M~^ü0ËÅÿå†c÷™¦ñádì+ø©©œ?®ÛäçÕ ÔÀ¶€øÏá÷š¡š¡ÜÀ«‹ØÏÿ£‹8›{ÿûÿw/w$orÚ&‹Ü1÷þÿò“RÒ²øŽ½åC1úŽÃé롹#ÿL-˜å©Ü1÷žZž×‚.NÅoyh–‡fyh–‡fyœZþ÷¹¨•Û‘IBGÕM>™îóóÛŽ¿Ëô‹Ém“Ø×ï’¼/(ƒÊ‹'JZ8”„Z‚›ÜM¥Ý¹ìyñˆIè¨b¿Ž@~~Ý6…ˆ}ý~ÿßÿ:Âüëˆü×aŽå’Ë%¡þ:Ì¡àî×ñAíwד„Ž*é×í×í×í×í×í×í×úëèý'Þ<̾ÌùVûäßòQ¯îýeó&·•™±¯gF&wEÑY¡ü¹’Ûƒ ÉòäIÁÑFÉÛ›%gN¬åÃÑs‘É]Ax8Sp漜4pÐÀA 4pp€[¯ü† O®²¼¥*9ca‘ûÑbòI†eO>©¼*9ÿ×¹/+¦Ãï·4 A³4 [h=eõ= yºêÖý)3M!žå¾  •™³Ü—X«ZDQßÿazºFÖýoÓ4F˜ZÞüoz ;©åÍ!AÕB¿å¡Yšå¡Yšåá°üêmÚÙBID"_'J†÷6ç›ü¶â­C‚&,”¼É]÷—¦y›v¶Ö‘È×Y„á½™Y>PËsùùBIjy³·iš·ñ[šå¡Yšå¡Y˯ަ¿=Å6-¹µÅ6]+êZ!P×ÜE¯fy N:Û•j NºVÔµB ®w¿é ™šé ™Ó­vCTnrÓÛºê›ü|ì,¿EÕšpP*“g¹£ËìÿrÅ] aº G»ÛoÛ®)8Ût.TkD)Y¦àÌÎjhÎjcW$pÐÀA 4pp€[\%öå¦cv›Àgòu_ùíÁ§›¯ƒV#=É=õT¸¤Ü,¶CÇÓâ Ÿ`ÌÍîùï[[>óárOüEøX3ø¤ÌðžÏg©·ø@ã4>Ðø@ãÆçwbÓ­ šÔnòÌÊ‹I>j¥hÙi2Ë]ií¯Ü1oêÿr!–Û[ÞØ~F-˜å¹|.s¡–™È]imbyÛ$)jyk0&Xšå¡Yšå¡Y˯ÑTöÓÝ䆋矂ÏIÎËW·|Ý1üó&¿Ý[‹­àó+wå©5g…Ís»¿¬µ˜\€eg½·îÁ ŽÊ]Y2DÍ×Ea§œ8hà ƒp««LïOxOÏt6(oÉÑ!I9º¯üVŸfy6É›#G÷•»rtHš«LïïPO7ÒtÖN²äè¤Ý\à฼9rtœÙU&ÍUúÁA 4pÐÀA¸ÕUæ³A·±u³Üw‹ÌRqÔWîsVZ¹õÞt¼›þ6¶ŽšÎ| ÌRu1Ù]hς頙šé ™Ó­v_.úiÆk`9Û¤–;“{º3¾rÛà¾îó6Ej܃V/}½ôz]Ûã ÍxY,g­ÞÈñZ{8^:%¶°¯û[y “»"I­Œü+÷E’ZyÌÒŒM.t[Éf<›ÞbarW ª±pæ@T+bÀA 4pÐÀA¸õÖ¼ŸÚ}«X{èy‰§5ð‘ÈÛ “G‘ç$÷Løü•+¾n_þÌ,¿¶ÌÄÓúåH䯽²…É‹£È“XÞ쬊æ¬ü–‡fyh–‡fyh–‡Ãò«·©RQD¬¬ÒÊTCõ•/D&¿Ýš­yø* ÑšäÃsk®Ú­¹š\Z•jöxÅKåÆ.ÿÈä·k•õ¡J3¸^ó­¹j·æjò›U*qðBà /4¼ÐðBà ŽwuÎM{@9,¡_êc¿rWëWî*p‡ÓÚ—NŽéì/ ‡µÛK+1ùæØ¤ Õx8ô{M†5í Ão:h¦ƒf:›îO‡]Ô ÚcgÕ¶DS×MZEz<¬H_Zä¢V‘¾7] ¦£r_ªG+)§%åËÕJÊÓA34ÓáÔt¿÷¼ôæÄÚð™Ü•«‡ií‹É]ií!ÍØœä®ëÏØ:•eÑ0ÁkWK€[drWBhæPÙ»/ù=¤Až¯ùú3öŽoy4Ò¼/4¼ÐðBà /4¼`xŸÝn«~Óõ¾DþaÌWîªÒœäžyI«ÄN¦Jìt½¯Ê~¨B,d­Ò$²&X’VJL¥Ô‚… Yš… YÜBK’!ík¡³1ÉÀ"Sx’V7uYä`u·Ôð%mÌxz/䎦?Þ5ñ)iuài[ÛW³¯rÎÆ<Êþ×诃˫˹,r°7ð[ê1²ÿvW•ÞK´£éw ŒJZ üþ×ñY¦ ¿h¿h¿h¿h¿h¿h¿h¿ð_G¾ßO©ÿ7nØIñ,}½BLr[E.ûú팹“Ü“<ÿÊ]¹¸¤Í„O¤ˆÝ¸z‡€£ॎ‚€ãŘìë·ëS2ÖÚpÖL gÍ&m&¼8hà ƒ88À­Ax’i^ȤyáêDî»)kÝ_¹«À5u_R„{˛߈å™<[>rË›oàZc±¼ÙYNe_îÖIz¶,ÍòÐ,Íò8¶üßÄZÞ.ëiÕèmòI`ö÷Ò÷Y2z›,­H†©ì¦ÿvߥ;›â¯mí6糞Ë|ôÏøŸkïžOHFŸ”¥MÉ0¿Üôßî»öfS˜åç4>Ðø@ã8Ÿ5šÚ—Ðß`<ñrvñ\ß {¼µù·¢…CZ üÞtšn=?åì±>Hörfs=E‹g´"vÁtÐLÍtÐL‡éÖ»/#‡qó{Ò ¹S•¶!'­;™ ¹÷ 0®XOZ-tªÒ>â¤ÕB'S-´`!h‚f!h·ÐzÊÚk³Æã)kÚ)kÚ)ÓFj§f:eíµ þñ”5í”5í”i3±÷úsÊü‚f!h‚f!p ­§¬k¯}¿w¶1³ét¨u$rßïҜؤ µÞ[Þþl±·< À*ýºm´r$rŸïèÒ¤Ö¤ µ,ÍòÐ,ÍòÐ,‡åWo£ µžä´ãà¡ó+¿=’æbŒ(†æm†QhS©ÓÐÞ´©Ô{p‚[½Í\ àè×}ÎjhŽ6V: íÙB+-€ƒ8hà Ã1¸?¯y[Nœ.ãú³|±ø+XæBçë°ÕÊoã7.ÛXé|I•ŠY+fÎÛBÔ´´lnùÎg9Ö{>ò¡òãô‘ò ”—{j³VJ½çói÷ò4>Ðø@ã4>`|>iüŒÛ)ƒ NrÓ«GÏL><þ ûHÒ¸\r’{JP¾rW¹Ý¯\¸·îÁ™CAβž>rpfLJ}@bÜMIÀ™¤r;ÎzíÀA 4pÐÀA¸åÖœã{¹ÝÍ &÷ìÿÊ]}»“œeŸšV²6Øü+÷…‚qëËâã{iØíW7˜Ü³(œð±6Þ>Ö¶‘¬?'|Ì¡`ÜYŸŸ4>Ðø@ã4> |>±þÄÛXƒœ¤Mß“|ªãKóúµto/7^u3“ÇùŸÞn¼ê&íª›¤¬`>«F^wúnÁÙ…oÁnSžÓá+3yœŠn¼'휤¬`>,f^v à ƒ8hà Ã1¸?;ˆó¶–ów¸ÍUfiñWîê¼ÈïµÐ±œ6ZÐø@ãÎgõoûIÅãèªÜÞïnÝ"÷ÝÝ´ñÚ_¹/šjZ4µ·|0Ž…"–ƱPÄòæ»›6›XÞM5-šò[šå¡Yšå¡YË¯ÞÆ0ÜûéÄuÖr ™ïXOs¬ E7^¿… Yš… YÜBë)ïëÏžþMÛÙ¸(ÔþïÿobrÏú³<¤ö™Iî  Ú—½{pÁütµ­‹æà¨Ü,Ïà"g¾Ì ©û†€3G‡íËê]4pÐÀA 4p8÷w©n¹Žª˜~[÷rW6¸\R6ø+w•\þÊ…ûËÞt¼€È]éÜrIé\b:«» ¦³^@ÓA34ÓA3¦[b›²¯ý […v9¬ÐN“{ª ¤ªÅ¢ÚžäžÍ°å°B‹»Øƒ ÃV¡] }ýº§œ‘€³–3m 6gvV§Ú÷¬8hà ƒ8œ‚ûÄøsÝc›¸­`¼ý+óä*fGÿkÜËï±ØÚ¢ ™mÌ OrτïÜUÁX´ÙÑ[pƒ[ÏûÙâD¿~?XÅÖ]Èbcb™€³V0pfW©ÍŽÀA 4pÐÀA¸5ªÜÏŽîÆÙÑ“Ü4pféû›äÝñ ö•»¶,}完Yy=ýžÿ•<â~Îq7N˜&|¬í}„õ­Œð±&Ækb¬Ðø@ã4>Ðø€óYý[~Os=…‚ùuêÝÓ‹ÀWn{ÀÅä®koÖ’lYK²e-Ì§P0»·ÓGŽ&–Áþxßµ7k)¾¬¥ø² úÁA 4pÐÀA¸ÕU–³‚OD&÷¬LúÊïo¤Æù¢“ÜSð9É=Ÿ_¹«àóW¾iï[3y嬠‘É=›‘¶|çÃåž‚OÂÇ ©àsÏçSï1h| ñÆh|@ø|Rþ©÷¬`={ñ\V•÷‚öÇ`¬jÁXÕ‚±zŒ-#ö¦ãÏvËR¶ò^ËüU-ªZ8T $–ˆÂo:h¦ƒf:h¦Ã©éþ"(MÚÄQÚÉ^³?Ã'9=°°|ýÏ\Æ™T_¹/7¥x—³ï?‘J“ö€pl9×:K™€³Î¤Ú‚ •û’VZ}x9¬R^C˜&m!ÀA 4pÐÀáÜ&¶éïiüúðæø>øýÑ×õw_×LrWhÔµÐH›¿·| –_ ßÇ?:«þþ›o&¹+²êZd¥Í,ÍòÐ,ÍòÐ,‡å×LѾÌþ¶zýéÄ}`–Œ±ñžh2}Ý—êÑ Ý÷¦ Ôtë‘Ù›.$ãEl¼çL_÷ea´RsÁtÐLÍtÐL‡SÓý-ö®×ûMêᬾO/_·î宯–¯œ_…ò³\ø÷}oº{aêûàêuåÞ^îj-!¦³þ]µboÁtÐLÍtÐL‡é–a+ÞßbR•{[±wÅáSN$òÛ ÆÜl© ©·½BÚÑ<É=U›æ½ç’q¬áŠ­Vœpƽ0[îs§¼«³¾BÚýL¸›]¥6 \à;4îиCã;4îpp_ýü~ò§³¸mX¾" Ì ‘ƒ@¹Õ ×ÊäžYâ5J³v«V©^µJu.TcX·}¯\(D6ÇãVÊ\+“{†Œ×(ÍÚ­Z¥zÕ*ÕpÐÀA 4pÐÀÁnu•é}¶ÃCÖ¨j¥æ5I9ê¯Ü•£®IsVé½Iÿ!kTµ*ðš¤$31Ù]$Í]øMÍtÐLÍtp˜n=°»BÐÿþGÖ;ìÑpì––áInkXŽDn«Ü.ÉiÊ«YþÛyÊËd:W9â¯ÜàT¶u¾ïz.Ïæ@#Ò¯Ûºc#‘ÛÊ„'¼‘ã °=»¼æ«j–ª÷xÿ8>?^hx¡á…†^hx¡áÇ»:ç}±êÇØ3ÉM› –é1µÖVE"¿×_kÑŒå=–3™Î看¥`“à Æî‚—é_&ܼüi=ùýiÝøJY‹–G,ïA“Ét>ç\,E¥^hx¡á…†^hx¡áÁû·ðµÖ÷¬àSøWÏê+–µ2U+t¯ÚìôªÍN¯¦ÙéÄÀÁ»Ö³R‚e{LÕÊá«6ü¼jÃÏ«iø¹``h†f`h†f`p¯ñ[;*ø\/ÔvøÂ›ˆ|Àb»ŒX“æ6T­6~’»´áç{p¼jq™È@Àñ§ºDäó¿½Üzø›4Сjµñœ9¨ÍNÀA 4pÐÀA¸ÕUîkã“q(tí¬d&XF@Ô~¸Ï”ÊoWÝjô´]j‹žäžÁ‰U+­ßƒ É8z.PpTn\‹Iå·[N5zÚ.õKpfW©Uæ à ƒ8hà ƒÜê* …ýO®r??¿_¶ÕÏuœ”£|â rW=ÉÐÒzC»·ËÖÓj(òˆûië”Ï<Ž£â…™Oä|Ìe#CËË íÚ;,»Q>Ðø@ã4>Ðø€ðù»Aµ†Þ?ø·InJ¬-哜^º/Ë×ïî±ìÝcÉ=ÃÄÚ%=IOrÏ¥»iMÍ0vþÁoî4Ué×éÕï²|ý~¬÷ÜÃÌ=rîÖlc»¤·jÂ݈6­Eà;4îиCã;4îpp_âØ†ípkÛpâç?¨É©Ÿ/–¯»&x7­ÿe’{âØ_¹ÁoÛ’5Ž%|عœùDÎ'D[=#ácc›Ö§BøXãØ=Ÿ?~ÓÏh| ñÆp>«Û±ÿNd4•ßLrÏh£÷9ÉaËINrONr’{Þ—¿rŸ‹&ÿ¶o2€±~†ð±¦·|çÃåžÔ#ác}ä!|Ìþ-šü›Ÿ4>Ðø@ã4>à|Vÿ–¶ñ›u+Á$Ÿ½à¨ÆL[+дµ-I£ÛšÖ*²µ|HÖ}{Ëjy*w½/7ma@KÒ쵦uš–‡fyh–‡fyh–‡Ãò«·ÙïÆr»–Ï6ë‹É=¥8_ùím¤ûÚ&¹ë²™µËfÖ²‚Yšj»ç†± p§»;ýº§’gË=pîô÷]b³v‰ÍZV0K#yîиCã;4îиCãŽSî˪Û~ÁŠÑÏ—³yÂKYu+ì ÜöúSÎf5¤Æä®×Ã~“é|~¾h1í¾[‚r_½M9›j»T{î!_ÊÙÄ€Ô˜Üõúc˜ëo2ÏÏ-¢ös‡ÆwhÜ¡q‡Æw8¸¯ñ|•æÆOòù‘'ÍÉ¡f‘ó‚Ïn‘»¦¶ª¹Ê*Mnßš.pÓQ9¯Üë¹kÚa«š·©ÒìtÁtÐLÍtp˜n=°»Òú¥nðéÀ¶³ ø²¸ê+_BØž3 Í,Ã"÷½G4Ó±Þö.p¯'£Ýx–ÍSÄÀÖ©ÃÍл0,r߃B3~¿¡š¡šÁ ¼ºˆ¾u—õßô~V¹—#“{¢¶mÇo:ÊæaºæaºTØ<É]ª›Ô¶c€ã]i?+ÔÊ‘É=sO·xÇKÿxŸëR]4ÁkvÝäýx¡á…†^hx¡á…†ïêœÇÖ9Gkü6‡ÉD"¿ÇoÉø24ï:´çÚ¡Ý×¶ Üòë釃@"‘ßãŽd|ƒšãÚsíЮ{~ËC³<4ËC³<4ËÃaùÅÛôKjRë§Ë,˜Ü2ð7DerÏ.Œ®uaLrO,÷+÷I{>æ&µ~ºöÉM£ßØïZ¸Ñµn ÂÇŒíù¬žKà4>Ðø@ã8ŸÕ¿m›0¬þ ‡Ù°Îäž9ÉR4յ慮5/tSó–Oà|ÖCŠÃ\OgrÏ0æ)æêZóBךº©yAà4>Ðø@ã8ŸÕ¿íН?ÙšíŸäÿöI×ÅäžÑ£}ßûК-•7É=åv_¹+•×µÞ‡nê}Øâ ÙúÖ@ð²ã—ø×=£Gû¾4Ÿâ¥¼«ªŽàµ¦òºÖ:ÑM­^hx¡á…†^hx¡áÇ»:çô¾xîÉäýB¢Î&ÀD"¿_Á³Ñ9§­s®Ù»&©1­ú>L¦ó9ç´uÎëõ6½ï{ò0i¿ý†á]½ëoÈF眶§—⥼«¯­ZL¦ó9ç´w΋óã…†^hx¡á…†^¼Ÿ®[sß7ªTc£Ê$¯$±ð´¥g-u©í4éÚN“¾ÝŠ—I-{‡jìÙ8p¯þ-k¹Gm«H×¶Šì üË÷š¡š¡ÌÀ¿E­éö;/Ò¦ï^ëd:“{–.õrö¶R“gÇSl׺ ö–7/ '–ç5É=ûˆåiV¾$&ÏŽ§Ø®Õù –‡fyh–‡fyh–‡Ãòëm±¾Ï!yò6_y¶öª•vX‘™Ü³Ð›ð1?[hÝÔa!ðÆh| ñÆœÏ ¶l<ù·Îzèmþ­vÇG&÷tÇOrÏrð¯ÜÕßµ-ݰ¬áÉñuÖ ms|ý°Í92¹§½€3WÃt©½½k[6pÐÀA 4pÐÀÁnu•ãýõ)É6^÷3>-$úÊ}÷VÚŒü,WœÕxàzÊ’×Å€O+ˆéÌ7GÆ„ü,WÜ…ßtÐLÍtÐL‡é–;vÓŸxÇQŽëuåÓ@‰¯œ”°É=—¯¡µ SËÀÖÀx9{j`*ç³lrÏíih5ÿÃTó/š¡š¡ÜÀ«‹À~e³1>‹ö[dòÉŽŸŸ¾öýÝí+wõ4Mò|ûzÚn|~j'òêqPZÍÿØ×ü·ÅAíñc¾|Ö”·Èäó1¡x“»Z¢öxÃ&¼‘ã5»G­e`÷Sîù/4¼ÐðBà /4¼Ðð‚àýÄþ“n¹÷±í8ˆÙØq0âYúr_›äÍTÁ¾Î[ò³üä•—ÿ-÷æ¦[_Ðø@ãŸOÎ?¸²,í!ùlõ20gdiýÓØN ÿ]k`ª›šäÕñX6²”YÊ?ïÁ™‰pt¤ð2o‡€³î…Úƒ ÃX7EÀYËF–²ß#KÙo4pÐÀA 4pp€[kdh¿±®`’Óº‚b‘»ËF‘vÕ}å¾ÔV1¹42%Ýøþ¿7pˆÆ¦t6vÏT³IðZ{ ÷xÅË¿îºÞö÷Û—Ét>÷hší/à…†^hx¡á…†^p¼«sZü6Ÿb#“/3m¾}úöÄäó<±ÒÑãÐ Û†v¹¦ËõТÇqøR™|úgóíãðð'&ŸNQ¼üë®Â¶¡]®‡ér=´ØÕ^hx¡á…†^¼.׸.eqÞ,_ê×,©ËIÎsÍ$§ ¦?Þ»þ“¿Æ®{›çj`*çé¡f’ÓºyÓ—èQ104C304C30¸ãò;Ç{ü–ŽÉacBÉL>ÎG&¹íq$^Lîx™äžìŸÜàaðþ/t~8e‡¥ç%3ù8Ý`|hú;²ÿvÏëãcvP09(?h| ñÆh|Àù¬þ-îýŒ!P<œ«‰Üè Ø×}**­“œ¯®K&¹+‹&÷¸Ç` ÀâáØ—HäÆóþîóoQi,exÉC†×ì]£É»úñBà /4¼ÐðBà /8ÞÕ¿%e>ä,ŸsϦÆùYÞ=Á§ÔÇ1Ë/;“œÏ‡ÌÏr3gIÀ ŽË»'*•<8ã› g¬sfàŒuÎ 8hà ƒ8hàà·ºÊ]úòÒñÇîgû—jôuYóuYËf-ŽÍÊ æòW™Úâ.¶ÜzÞ÷#í)8*÷ùº¬e³¡feƒ3GO\[îÖ~pÐÀA 4pÐÀáÜ'õŸ~õØ·„ôlŒ*ËYJsT&ïìÊÿ”1 ;ò–û'ŽÂäÙãi‹2u|–»®üÅ{îû%z6Æžå,ã6ᯱ¹˜á {¼aÆ9^³?.Êlr†×|å/¦Õ^hx¡á…†^hxÁñ®qlÝ>Ißvˆ=űõÌ9çHä|V,_¿G»ÝTÌ9Ë˯'¹/Ž=\ ±>Ælû08¸õð׳s™#‘óq°|ý4uS™&g,CgàÌqìáJˆ¼Ä±~pÐÀA 4pÐÀáÜ'¦Û\í}Wד·i¯cj®n‘[ž®>XÑö~å–¯{6YÏrW ÚLh{ß+õäTÚ딫[ä¦Ç ¬‘d{¿ Ë×=«¨s$ÙL‘¤Ÿ4>Ðø@ã4>à|ÖP°¿Ï9 ûÉØ½ÖâŸþ>v¯Z¾ÎoÊ0É]j[›ŸÆâ úûHï§­M˜C¤_ož×íþ~™Iîò0ûæ‡Öï¿s¿¡š¡šA üëÀÇ=•7´âqt[ ŸBäü¶X,_÷tOrŸ‹¦fh¹ãìr ‘óËA±|ÝÓÌ lvÄ íÁÕo`h†f`h7ðEàR6ÏrÃt—‰*"·-[ILn«ŽD´úa’»êŸaê°Øãµ®MfxÙù™ñFŽ—o5ILn+ÏDî*Ÿ†´x‚ᵺG˜ú;¼ÐðBà /4¼ÐðBà ŽwuÎØNVG5µ÷Îò[Um),H{+f¹§je’;†ûMrWøSwÉ–Oà|Vµçª-…iñãc} %|¬LH‹'Ÿ?îÑÏh| ñÆp>«ÛÖ§ßÚCžÚß`Xýðäߢ2ëøŸ\¨Þÿ·öß¾¶–Á°€àÉwDe\0ûo·–Ñ ÿíÐþÛ¡ý·Ãñß¾þæÓ¶µ+Q'¹é?f&·í"·½j]ƒÉ]!Az L¦ó,þ'WÎû¶tœs_O\:ËdÄÌä¶ÒñBä¶×˜‰{äÜÍ¡Fzÿ§Ìd:ÏaÆÝìëüÜ¡q‡ÆwhÜ¡q‡ÆÏÊØäY^Ùë^3ÉK(&ù} Eµ½î!+s'¹/0Ëš£ÎÊ@d.$Û¶TÎZ©²Ë Ú^ ‘•‰Æ œÙÓfÍÓfeÔ±8hà ƒp««,ïCž\eQ&”Nr×”€IîòuEóuEóuå½AüÉ×ex(³¼µÄXÞ쬊權æ¬ü–‡fyh–‡fyh–‡Ãò«·©ï»¤Ÿn‘õp}!“Û’êë›cÕœUÕœ•VBÃú¾8«ú¾FøéX÷æ1¹-›ÙïóuUóuZ =Kè˽+H 4pÐÀA ŽÁ}âøÉ·ÛÞ[AŸ’M»„¶mN±Û…&¹ëu iïZ =L%ô{>ñù“lÚ]³ms@ÕØDø˜_0šöþ¨•ÐÃTB/ðÆh| ñÆœÏ JèŸ.žýuûácŽNZN1Ë]J+¡Ç¶Â;§ÅA*¼Ÿî—ýu9ßc.MZÁ lö0Z ýÞÀŸ¾„V~C304C304ƒø“Ën%ô0”Ðó Y³ÜÓ&ó•ûîkCK.³ûÚZ`d¨Ý滯˜éÌ7¦¡Ý˜†–‡Ù¡¥òÈo:h¦ƒf:h¦Ã©é>1þ\· íË‹Ú^Îwš<\:â%بMݦšðh(^^@ör¾7â!ì—t.£66?šÊª A³4 A³¸…–È9’¹÷Å9Çù÷ë!Å{b¡X¾îê,ûÊ]ÿªþŠ„'bùPl!u<œ˜¾~¼_I‹åë®–3byë?ÊÄòÖ'ÁòÐ,ÍòÐ,ÍòpX~õ6QjR‹‘Mž lؑNjOŒlÚ¾f² &/Ž,ÁWîIµ)ôq;Ç:­.-JMj{¼â]º0^ë»Á)‘+ƒÉ‹#GAðZ‰Dm ýïoýþíðG©IMÀ /4¼ÐðBà /ÞOÂÏýµŸBË!=¼§OrÛ K*_¦•˜r°ñ½~uú{¹gå$ßD’ïšLã~f9峞ñt¸¤Ê—Y¦n|¯_^õ^îY"Éø˜Ýc2…•~>Ðø@ã4>Ðø€óYƒÏüþHôžäÃsWÍÒ#Ñ$÷<}å¾ð/›T~ÃxÈ›¯¤Yz$"¶>›=L6y¿¡š¡šÁ ¼ºˆ²Ê[Sy'¹+ÚÕ‚~b5>CGÃÄuXä·ºÅrÙzúb‘ÁÅ"MåÝ‚ ÜzüŠm‹x98.§Ã¶a‘ßÊß(8*w ˜‹EšÊ+€ƒ8hà ƒÇàþLåõý¶ø”ù¯Ò{zÔꟿr_æ¿j™ÿú~QxJÝWé==jÈÄtæÔ}ÕR÷~ÓA34ÓA3¦[c›&5gÅö:ƒh%°—ߢ‹|oOM»=i5À_¹kàÀ¯\qMêí"à·f^¶àG¿î»•iÅÁœÙY5ÍY5©5L 4pÐÀA¸ÕUv©V0j#µ¿r_lӵئkΪKµ‚Q–MLgŽmºÛtÍ]t©V0jc°ÓA3¦[ìFèG2;‘óÞ3“{(åÆñŒTîé$ýÊyÞÆd:_bÙ4{×<ÀŸà oè™É=k– ^>=Ê=ý¦¯uäRÔfƒGÓlp/4¼ÐðBà /4¼Ðð‚ã]œsÚrØTŸä¦Óe¶d2L&( H×™sÎìçu°ü·»¼kº,í{>ÆÜ9áCË!—ù—É0{ú¡0€ð¡Ç/³?ž¿[Ãòßîré²ô| ñÆh| ñáó·Q%Aª›JÛáÄŸm“<¤ðo’{v|å®A"I+¡ß[Þ\µ·| –_fi&H‘±¼µ¤‰XÞzWMZ ½`yh–‡fyh–‡fy8,¿FSû"\zW]Fy|åw§’mE“|¹’šÒø“ܓƟäÃãm´AßÄòôž± é –ÙöÊ¿·|€±:ŠXÞš‡'–7{m̸`yh–‡fyh–‡fy8,¿z›ôžX{:qéuøíSf,%iqIJZh”¤<|ÒÆŒï-¨å×—^‡ >%­ˆå­+IRÒB£$¥ñ“6è[°<4ËC³<4ËC³<–_½M–Ê/'¹!ÿ_dt1¹m ûºk'ÂWîÊÃ'­À;™ ¼·|ìU–„ûg|æ9kžð±î. |¬‰ô¤Õ‡'S}¸Àh| ñÆp>«Û»ÞR=þ­¶?3¹«9iÞ“Ü•)Òæcï-šqäìÞò­«Lîê NZ…6±¼ùî¦ÍÇ,ÍòÐ,ÍòÐ,‡åWoS·K'›±(b’›ÞÝêEä¾p¨jÞFp´ï­å·üzâêÙ‹Me_÷:Uó6Ú„ê¤Õ‡ –‡fyh–‡fyh–‡Ãò«·!ååÖW°ÆáÚ^ùÛ{ïÛeùºm´K¢rW¢©½;«d’»®~¦ Õo°>µ5¶§ÕV$ÐÞ­.Ë×m³?•»²Yíý\&“Üus4 ¸ðBà /4¼ÐðBà /8ÞÕ9ïJ‹ÿ‹ØŒ»JSgŸíѰ³l½íѰKóÿ¿r_$ÙµHR+§ß‚ Üzø; [loŽ¥œmoŽ]Z @À™Ñ®¢Z1¿8hà ƒ88À­®r¼Ws=cãäÖüo¾‘ÛÆX±¯[L?hÉ]qìÐ<­ÖJ†eDáo xW¯0Ž.ˆˆôë¶)Kì릷ÁoäxÍqìÐü±ÖJ°Ç»Ž(ðBà /4¼ÐðBà /Þ?# óõ^üöÇNò¥ËˆæKª^ûÊ]îq’{Ñ_ùI º$‰åC²¢{Ëjy*wU¯Ë[=±¼5’$–çK÷îô‚å¡Yšå¡YšåqlùOl?évdp60pq3ÉiçÑ“»Àa¥naòÛæwc,—!¿}安Yë Øƒãsò–;\€íµ—€ã妅Éo ÄQZ†T;GÀ™}ÖV €ƒ8hà ƒpË­9ÇCWy1¹ÍUF"·]{SbrW\¥áBY›ÌŸ·£ÛcYŸXâýâ¹ïƒÈÆÊ½InzÝn‘É;{ž¾,__'´mñ~úÅ䞬àWî*lžä®Hò¬ #/5Ç{î!ë wú.Ú"“wö°yY¾¶®ý©tößîJîÖ‚iÂ݈v"ô{.Mà;4îиCã;4î8æþÉÿ9ú›»ØïèÆ©¶“Üó|ó•ÛuLîy(ÏÚŠ¯Üç¨ó‘£Nk€›Ï6´¯Wþ,=ÌpôĵÁ䞇ò¬­. àÌž6ŸyÚ¶x?8hà ƒ8hàp î×Óµ{Hlhfy:ïûf$Û²ƒ\ÞgîÁ"¿9Ô˜Œ®²h®RkfɆ–Ч»o© –çrš§‚E~;XÔò\îòuZ3‹`yh–‡fyh–‡fy8,¿&÷ë您Çt•Ft~åÆô`rOç]®ÒêÏIîJ0V“OÚæg|þÜt«4c“ðá7žÁäžþ¼\¥Ý„9ÁXMžËÏh| ñÆp>«k{ÿflÖËíu{æÓv†¼ßÎЊ±0¦ICä¾r>±Üôßî»xjÛöàB5öúmÁn}YÙù§àè×]3è8sŠOÛεí 8hà ƒ8hàà·ºÊýœüO3ºÊ~ö³¦øúáLªÂä®Ç”®]<µf–|ØÌ²¾"ïÁ…ft•ý,©¾¦øúá`¥Âä®×®Ý[µf–|Ú̲$Ùüà ƒ8hà Ã)¸ß&Üstûf–܉å?KaÌáfеªgh5„CZdó+?qVmqVûNjºˆÜö£Mìë¾*¾!-²!¦ãË÷v^ÁtÐLÍtÐL‡SÓ}bÿI·[®÷:º‡‹XÙ78XÇóCƒÃ°È]¶\Rt±7] ¦[~ó{Ó™çëCü°È]¶\Ò¿ï‚é ™šé ™§¦ûû/lÁûÊïå}k/ÇezÆŠL>ÿ;\y›Iî)|äÑ—.gEþe™1K,Ogõ 9.ÓcJdòùߢjL¼Ë[3ÎÄòÖŒs9*öþàºç.ËC³<4ËC³<4ËãÔòŸ’~ÊÝÛÄ÷W°‡ÔÇ$¿y…LšÓ¯Îä´ –¯ßßÜ­Î*Jí““Ü“ú(‡»–:Ò=¸Ps<¸@Šdfp‘ƒ Éöd¿¢Õ×E©û’€3‡F§«î… 8hà ƒ8hàp î×Ü*9˾bVW¹­àý-'®òbòA¾Ždùº+K\’æ*“æ*¬qݾôVW¹/½&à.úõA¾Ždùº+K\’æ*“æ*O÷&,™4pÐÀA 4p8÷w]Ù®]ˆÑ¸v¡ä“µO^£Êü~.–¯Ó¢÷§Úƒ¯Üçë²T<°µ|à–_l>zXÉkX˜ß/bÅòuZüüT<@,ovVYzý,ÍòÐ,ÍòÐ,‡å—çû²¯OÉ6`m’{Æ’—rØJ‰lÊñÜi{arW\W¤BÐIî)ý•\Ú¾Dšâ]u‘fŸ¼¼s.9ØÜù&5ã¯9ú+R)Ák­#Ýãýã7ýx¡á…†^hx¡á…†ïêœë{ÁÀ“‡©'¸þõUù0½†°¯ß¦}ÄjŒ$µ•E+³/¦2û=Ÿ@ù¬g¼mx =3ù0eîÙ×oÓ$(*÷]޵2ûb*³ø@ã4>Ðø@ãÎgõoû2{D£kgÁç²´´³zªLå®è±Iµ£E[3QLk&ö|å³Òv^€}ÝVy”©Üþ5©D´h{"ŠiO„Àh| ñÆp>«ëšëGþ-|‘¯wh[5Ë~ODnÆø­kÕk]j#*gµñiõ]s|ýì`…AäëõÉV ³_7@ÁÑ?ÞW;×¥6¢rX_—T^×<¢4pÐÀA ŽÁ}Rùi·«-z(ãÐU&÷̯øÊoéÆd\©3É]®R«Ì/C«¥ÑV8”qxâ “{Æ_lÁŽË]®Rë (C«¥Ñ–3à ƒ8hàp îO-MÕºê¾+á6L¯[äÆi*Ÿ³‚ÅUV­'â+wÝšåï·æªµ>ìùʇÊõ¼T>gŠ1x¬Zãác½5ïù¬·æªõW| ñÆh|Àù,·æº;ÿA2N÷ätøÆe‘»6eWHÃ7¾rWLÕ65l-¸å×ã‡÷! —EîÚ”]!MÏ –·cU[µ Xšå¡Yšå¡Y˯Þ&J9ºI¾¤âlÑT”:ÎjÜFSW2FSÚª…¥Ž³ª­Z¨ÑäÒ¢”É#xÃ0cQjkÛâ /ÿº§­­F©­­j›öxÿøÍ(åû¼ÐðBà /4¼Ðð‚ã]szÏ Þ^x;“ÓÜÏ V²©l2_‹'¹Ë»&Í»&Í»&“wMï9¤Û bgr:°ùâÉ?‡mš_« ³{Lš{Lš{L&÷èç4>Ðø@ã8ŸÕ¿e-øÌgÃÓV¥íGøÊ]0_¹«Ào’»ü[6ù·¬Eg} ”¶ð±À>ÖÂÇì߲ɿe-üóóÆh| ñç³ú·òþTñäßÊ‘ûÏÁ¹qgkbò8¿¢YŸ*ŠöTQ¤˜ª-5¨å=GþäøÊÙÁ •È«?“ǹê×ú†Q´7Œ"ÀTm'‚8hà ƒ88À­®²¾/pyzõ¨¯¯O;[¿r_rÛëc6ºÊª=šÔ÷G“d’»"IS«ÈohÖ§•úšàZùJðšóÛVŽ—þñ¾—™úþ>LrW jê4ðBà /4¼ÐðBà /8ÞÕ9·í“ômÆ“‡ig÷ô܉Üçœ÷ë$ŠqÒ×$oïª5ªTS£Ê–Oà|Ö3Þ΢žÜ‰Üç]÷ËŠq ácvZ£J55ª| ñÆh| ñç³ú·.U_Oòå5Æ|ž6ª°¯ß·~YƒÏ®=Óv@äg¹rOïRõõ\ àVÏuÚïÀ¾~_7e +»ö~cX%ŸåÊ=½KÕ×8hà ƒ88À­®rߨ2×~¼§ÃžåÎä¶Í‰‰È-›ÿóÿì뾟ñî*M¦óeD‡æi÷í”ûê.Û%Ö—òq¸ñ/¹iã_Ììë¾—¤ñ~`M¦ó%T‡æ¨ýÜ¡q‡ÆwhÜ¡q‡Æo×áBíÈä•EÔeä“ÜæçÙ×m£-âÅäžUAí’<íÞòk#“WY=”‘ËóǾnŠÙ»kÓP»$_'Xšå¡Yšå¡Y˯ÞR!Ð$7%Aåô¼Ë×]/Ý_¹«¹õ¼¤õÄA*ñ!–§©)P9ýÕË×]OÕÄòÖȪv^Ôû|,ÁòÐ,ÍòÐ,Íò8¶üï4×z;2qûœ1"ë ¾lqïTŒÄ_¹%8ùÄ8˜œíxzjÐkQš»Õ´¦•fjZÙò œOÈL^ÙÁzHŒ>ìÒ™Oä|¬m|-Js·šÖuÒL]'h| ñÆh|Àù¬ÑÔ¾ìý6øô!Ñ4ÉgÿV²Ñ¿¥ÃçŒÄäñîÃmÁ˜ÖuÒ’TKÓ´®“fê:!xC²¥âöxÅKåÆÜybòÛÚTcO_ÓšVZ’jišÖ´ÒLM+^hx¡á…†^hx¡áÇ»:ç|ÖÓ·¼A´|8ª+ùÚºgó®Yó®ùýª›Lr—w5õ¼ìùðž±å­ åÃÁN‘È×Ö0›{Ìš{Ìïײd’»Ü£©çEà4>Ðø@ã8ŸÕ¿z^žÒYEúÚÊáÃûºénŽÊ¾îz žäÃãßL+Qš¡Câ)éU¤Ù®„Or³¯›î~3ŸÈùXr ³3í4ø@ã4>Ðø@ãÎgõoûR÷±¦ÕØÈä]® `¾rËH‡Ú`r—«RÌWî*€ù•+ϲ{îÁXC¸óBˆÈä]Ë `w6Š`æ9w³ß¬R án~¦©Ú£°Ÿ;4îиCã;4îиÃÁ}õóí=‰útW=ìyI•Ém~ž}Ýäçcd_÷ùù&îiZËL3µÌ¼Á¸°¶d¤Êä¶c;n:Ö3ÞÈñšÝy“&ÿ4­ã¦™:n¼ÐðBà /4¼ÐðBà ŽwuΆÍ2O‘dßv‹ßú±šEn,/ÌLîJ¢vipÐ$wy×nò®†=$Oß¶½ƒó¡rc)\frWµKƒƒ³{ì&÷èç4>Ðø@ã8ŸÕ¿÷ͧOþtÙ4cð9Þ×RÃòõûæSãà 6´ ¥!oZ›Ì\ÈÝèøH»D3†•ã}#1,_¿¯Ü4jC+]Òò¦õ¹à ƒ8hà ƒÜâ*û¾QÅæ*'¹-[ˆÜ –‹É=íIîq•_¹ËUv­Ïe.PpËy'àxb­¹-)ìw]¡ 8««$ମ²km28hà ƒ8hàà·ºÊýf™lsÑqâ*ÿýÿ%rOOßWnLi²¯»öÚ|åüÒm2ëÒý+ß´ò¬u¿D%‡a¼ì\Îx#Çkm$xy΋}ݵ<‡àµ¦4 ^ë}÷³ŒÛðBà /4¼ÐðBà /ÞOÂO¹ñý*qVp'‹xŒÃ~û~“N2¶@vm“Nך’¾rWaÀ¯\‰c÷à‚qV0göÛ÷KT’±ƒ²k;rºÖ­DÀ™ãبű~pÐÀA 4pÐÀÁnc÷kqæùKWþ}S7ΦèédˆÐíW·È›ÇU&éõg’»\eÒ\å¾µ…‚[Ïû¾µ¥G[plLÈ짃 ]e’ž…8³«Lš«ôƒƒ8hà ƒp««ÌïIOQ%Ù°“È•ÿêLî©ÆÿÊMãÚÐ"“³+4}Ýç*³æ*óû{ÄSTIV»$rÛ»:“{Êô 8v`gp‘ƒ³L'àÌ®2k®Ò8hà ƒ88À­®²¼ö?¹Êrâ*ÿ éåpÈ9ûú-öœ :ïïÚ²ž¯Ü—Þ45.>FXŽÖ:T„ð±ì­”O |¸Ü3èˆð1ç'MKh| ñÆh|Àù¬þm×Èði·%O·æzVо¾¿T-¬g¡`LLîzýÑ—ºÖ¸ÔµÆ¥-÷À¹¯‡¿ž•B¯3U‹$ëY@“»ž…´Æ¥®5.u­qIà;4îиCã;4îpp_ý|{årVÍÀÛ_ùS'r_Û¶î|¾==Ʊ†e=—Eî+ˆjgŽzM0¶÷Þ'oÓØðµýÍ1u"÷¸Û-1—7Ï•¿iQíÐÓ.—n?8hà ƒ8hàp îËO¼XmïÏ$7ÕŽ®!q—F9õÎZömµ£]{sïZL{¶÷'­®RÛûCÀÑÄ5¦íÒŒ§-¸ÀÁÑ?Þ÷æÞµ ôp}L]œ•¶÷G 4pÐÀA‡cpŸT~ÚíÀŽ÷ò¤‡–¢IÞ<¾nÛàðÅè놴Ðá+w­›ä®ìè0ÝòÇ{1ËCçácvi[>òYÊÖ>>æêÍ¡eG‡é6îç4>Ðø@ã8ŸåÖ<.©¦h\Ò¸q½ûxp_ù-Æ×ŸIÞîñ+çîÑd:W$9´.¤=wsIánB¸ói»‘ÈoÉ0¾*îV·K¸[³£„»5Z“ÀwhÜ¡q‡ÆwhÜáà¾úyHeöÒþÊÃ+?ûúý•ß8½yh‹Š†¶¨h.*Ââ¨!•ÙH (oŽìë÷çeãXç¡í9Úž£qºçhqVÊìpÐÀA 4p8÷Iñ§Ü:’Æ~MÒeB2ÉË{Æàßô%"·…Äìë÷­èÖ8JI_¹/$Ö¶, Ó–¥±ßâsG•¼ìB;ã¯uwúoèÖÈ7JÏM¯9òÕ–4 Ó’&/4¼ÐðBà /4¼Ðð‚ã]ãØ´uη\Oqì¾jT[ÔК˜†ÖÄ4´-KôeikàÀ ¼Ò}Ë 50•»š†Öl4´=GôçH004C304C30¸WaØ4ô„äÃ¥ºÈ];¸G–&#MrÏëöWî*ZïÏ0¬¸y /òáfØNä®Þ#K“‘8³çÊR!ÐÐzpÐÀA 4pÐÀÁnu•Eš·9Îz~Ã,"·=޳¯ß^ÐwÕ¢¥õÊ™¯[ÓzE˜9»FFerÛ³*ûú-O-Oå¾¼\9tVK^®H/ËC³<4ËC³TÛ¢î¡my!–7¿96-¶iš·iR™±`yh–‡fyh–‡Ãò«·éÛ¼t©ÆØ¦Ÿ$þ̘ýÊ×Q²¶›Tg©)Û£a× »uÍYm+ó9¸õÀö£ÜÅ:=–€3?v–á°=ví9°k‘U×|4pÐÀA 4pp€[]å~ÉK²>á ¶O;°ˆm/76êF&§®ÒôÇûÂB­¡ã+ß”M{¼!Y[÷Xp²—»B#“Ósiúã}±§ÖBðšŸ/M ^hx¡á…†^hx¡áÇ{wÎÿæwçÌ_?'¹Ç¿Ír‡›äžkï?ùI¥n½9>bºÀL·¼?2Ó}3Ñw0Óc9f:Üè)¦ƒf:h¦ƒf:›î“ÚO¿ýh·ËMR³­ä÷p(™®~³ÜQ5˦&¹§ êŸü5žÙ8p¯'la¹åŠÆ l,ˆb6Vl2# bà%¢P ÍÀÐ ÍÀÐ nàõßôø¾5¸ÞÿDNÏ8_`4ÉmQkD!­Ø˜åÃH;2ˆåheKdrúÛä»…˜åiaÌH;2˜åÍ…´äB±<4ËC³<4ËC³<–_½MRæ°Írš ïÞ&½Ç377”™|ª)Jq–gËïé(Ÿäž–ðrÅY%e¸ÕY¥÷Æog)3ùô7rpô÷´„3pf_—4_—”9l 8hà ƒ88À­®r_7û±•(ÌrÓ£á½Ô|–³NÃkX¾~÷´tóZcòÉÓÖãÅ3¿†…oŽ“Üçi³æi÷܃­@‚q§OW‘~õ¨]Ãòõûy§û¿“Oçsç_¯çO–Œ»ÙQgÍQû¹Cã;4îиCã;ÜW?_Þ/àO!qÙ^ÓëÅ.à™ÈðÂä® xy¯›ÍÏrÅÓ–÷kàSL»µ| –_ƒÒrx ,L—÷êÍü,W|ßòÐ,ÍòÐ,ÍòpX~õ6õ}ÔÏ“·©Ê$óY>;•q]Õ¼MÕªö Pw|r[|R} ó䓪2°œð %㯪ù¤ª½GTí=bËç3ßáç4>Ðø@ãŸO?©ÜNÙ~ÑCíFÿÖ”‘•³œ•(<ޚɞˆÂ¼kaò8ÿÞµiùIÞˆd’»¼kÛÞšïº_JP»Ñ»6e°%ûuïÖd§ûu„ÂäÓ"ÿu𯻒 †É$wùöݯã¿+V½{ÿ¯Ú¯Ú¯Ú¯Ú¯Ú¯Ú¯Ú¯ä×ñ©õ÷Yú~…mYÛ$÷Å®]{ª>ëƒÈXüfßo°-,cÿíæ¸°kŇé}yÂðÿ·Cûo‡öߎÓÿöON÷¦ìxíêy?¿;šlÑÔ8iÊþ¤ëbònz®D~ ‡º5JãÒ$÷L;œå®7ˆqtÞ{YÎû¶Ž›s_OÜ8jLNýz7=F"¿ýSÖ­ÎPúžwó%vhoã¨^mÉËù¹Cã;4îиCã;N¹úø‰7?ëÝÏߢ–ñCä¶=¶‰È×ÛmØzðÔ˜Ü1»c–{Ú mjø'ž0¶à“Û’&"_¯ÛDú .rpÆÑ œõF iÕg}ÀA 4pÐÀA¸åx®}HsMrKƒêÜ ³Èmž–Éùko¶üñ®;ìW¾yí}Oña[Ï^–”=Ÿ@ù¬Çg-ˆ-2¹í\29™Ì–?ÞuÏ&|¬I¶-Ÿp@ø@ã4>Ðø@ãÂçSÆO¿‡‚û~[ÃÍ“‹ˆ¯å(W·È= ø³<Þ_iLWþIÞWþ¯ÜÓAÿO¾IÅ-O{>òYi|-¸ºEîé '|åÿÞWsÂÇìßö3èû=/ðÆh| ñÆ„Ï'—%ô>g’ï§žåž~·¯|ucûr»X˜ÜÓQ;ɇã‰ÒŠòM£üêßÒûLD¾†šñ1`‰“}iX,LîiÈ%|¬¤6>¿a·Sæç4>Ðø@ãŸOÊ?õîß²v?ÍÌ V›²—»F|LrW..k*›RnY»`fvL{ÀßË]ƒ@ˆÍ9³¬y˜lJeí†è704C304ƒxMaí;R5ºˆ}ÇÁmFúCî$¦*9Xó­gì¾Ao–gƒ*ï7D“é|ª˜2`ûâúTj_\Oñ®TaÕJÁÒAð†=ÞP;ûoGö¸Çò~1™Îç‹)æÇ /4¼ÐðBà /4¼ x7ù·*µƒ¡ž0÷ÌäžfÔÃQÕÉoŒ;¨RÛ/ªTÀ ­=Õt;®RËùuÐÕž™ÜSÀL~|,neòÛ0c]ªÔŒ*0CkNÙÿ:þÜÍ«ÔV'ü: ý: ý: ý: ý: ý: ý:@~›ÌÀ~çE5s¢íóª“O©—ÏÏ?s†Úá¿,™Éçu`• ùïÏJD^æÿUí¶YšV#t¶q#-ÅÛ{î¡‹9 wºÓªÒ¯Ï)7Ê~Ýè2“Ï+±÷0q”{ Üéï+1:Ü:Q—PÝÏwhÜ¡q‡ÆwhÜqÊý¿ðø§Üýü~ÛÈelDßÎ*Õø‚ßÏJ´‹É]Åœ]{ÁïRÑþ$w]úÖ/µùèîö‘á /•Ûf'4öÇûJ>»VÐ¥Ú|‚×Ã÷ý´ëÅoúñBà /4¼ÐðBà /Þßœz»;çý†„[‚åÉà ֆL•öãÌ9§Îä®×½¡½î eÔ?ùA]×(z.Àèvë¦Jûqv.Sgr׫áÐ^ ‡² Š£=Mq ƒýà ƒ8hà Ã)¸OÍKói¼Þ÷?TjEC[ÐC;Éi­,rW(ø+ß”"ä»OÚ[(0 ­µRÑÐÆñ  Wï2 Y£©½…~óOP°4 A³4 Yè·¢0Þ~iû~–QÙ)[~¨xûôdµ!Ú!ÕV„DÓŠ½3pˆ`r6˜óéÕ#j+B"´3®­‰¦!‚¡š¡šÁ ¼žñøþpðtÆ÷%ís{ïS½PŒ‡Cû©|¾ÙôatPQ*™þÊ}&š¹ˆ=ŸPl?„uZÞO |èï*™&|Ì*š”Ÿ4>Ðø@ã4>à|Vÿ–Þ/‰…Inky‹Dîjy‹Û¥$Æ–ÞIîI˜Ç$µ¼Ådòoé=ˆÈìù<´TE"wµ¼mù·þñ®ŒwLRËÛžÏÿæç4>Ðø@ã8ŸÕ¿ZBæâ‡eHÌïõÞOr_ùŒá¾;>ø·¼[¾û)—-çß;JoˆYóo¦Ž’hhxÈ7=“ÓŠÞ‡7µ=Ÿ@ù¬þmË'P>üëÝsÁÌš35¤| ñÆh| ñç³ú·}?Ë\ú÷¿•×–·Çø­œ´ô~P:“{ÞÔb‘ÞÔ¾r^ðžåÂôª=¸@Á­§·¼vz=v娗t98ë›Z,Ò›g¾÷jû;pÐÀA 4pÐÀÁnu•õÝU>”Äz2ÐõOwð$gÙþGO[Ï<í•™¼z\eÕ\¥Ö«É¡Ö÷sùP¤@ðÒáJKo2Á`ôÇõìX_™É«Ç¡VÍ¡jý{¼Ü®/4¼ÐðBà /4¼Ðð‚ã]s{½õäœÛÑ´íœ"‘Wvf&Ÿ}pºŒï,í}œé¿ÝÕaÏ:,âR¶š±+€cçr98¾{13ù|ü(8úÇóuf¦ÿvW‹D1®µa}ÿdcœr÷»<ÐmS¼"éqH¶)^±kWþ®]ù»æ*»våïû·ãôœ=¸@Á­!&)oO¶ñ^±kWþ®]ù»æ*»vå÷ƒƒ8hà ƒpkT¹ßáí`ñh‡ËŸx“¼™^·Ù×ï5ÚÚÁ&¹«>phwöaòˆûÑØÏÏvn¬;éëÂÐ=Ÿ@ùp¹«¼ph—îar|~>Ðø@ã4>Ðø€óYü[Ú—xÏ÷Ö§êÄI^Ùãx·ÈyõŽé뮜dÒº ÒeqPÄÀ!ÛÊ ÷ÔÀTÎË;L_we“Ö¤.‹‡ ÍÀÐ ÍÀÐ nàÕEì+Ä­£K&¹çÙ"álæsLîYº‘ðžXƒIî¹-þÊ…Û"g=BÀY$8:l¸&÷lãHxÏÏÀ$÷Ü 8ëmQ 4pÐÀA àVW¹¯U¿5k<$Ö&¹é¶È¿nÛøÉä·7ëüÀIî Æâûq~–+®r.[b€£×”Hå¶ÕL~Ke[Gûpæ /¾¿ æg¹â*ýà ƒ8hà ƒÜꬒ4gi’›6Á-‰µIîÙ—ÒY-Me_wiJIzÂøÊ]“ZåÂkï–»}ánMØîÖ'élÆÌ=rîÖùM)I/ „»µF‡p·> Ü¡q‡ÆwhÜ¡q‡Æ§Üÿ¾5§üž`|ò6ùh"wø4&·%Ø×]Ý…“üVY™lOÕ“ÜÓ=´}.ÉÔ}Cð†l œóÙÐäИÜvÓe_w5'nñŽ—ÝÓ|´m2ÉÔ¼#à…†^hx¡á…†^p¼kNzšÑ9—×B GïZÎæé¡0¹gMÒzRÑòZïO"-$ÍèvËk=É£ß,gcÙP˜Ü³f&i½?©hù ­÷G 4pÐÀA àVWY¥6ÉtÖû3ßžy÷¢ÛÕ0Öwv­÷'i½?¿rÅUV©M2¶}äÈäÝbn÷rppô÷¥vµ®Îì*«Ô&)€ƒ8hà ƒÜê*›´Du’ßÊ Œ#ô¿rKTù‰WgrOyù$÷LúÊ}Qåa'Î2μœu.Tãp|Ž'3¸ÈÁ™£Ê& "àÌQåa'NY\e“–¾ à ƒ8hàp îëO¼gGû{mÕÓ+X?\&Ëä¾ôfßO36-NrWiVמ±´m#©›bÏþ^ÈóôØÕ·2¹/½Ù÷³½Œ­¯¹€«k¯UÚ¶‘=Þ?ª/4¼ÐðBà /4¼Ðð‚ã]ãØ±c»1ŽûÄ@2–ÖÃÒúHä¶…Ì¾î ƒµÖ¡¯Ü58.í[‡ÖúÖýj Šwu{¼! ûÇaÝy$rÛ‹tf_÷ËZçÁkvÎûΖ²ø7?^hx¡á…†^hx¡áÃûû&u[*š/iÓ$7Õ-ëQ&9]ÜË×ï>ØXj›/)rÎÚr–¯|x¿;ç|YR{¼æYL/¯ëÌLN·Àòõû!5äæKŠœ³¶Y†àµ:ç=Þ5a!à…†^hx¡á…†^¼ÓÒ,¦InZ–Ý"“ß¼ ]óǾV±vK */Ž ðWîJkdm)O6-åÙã5Ol"xi{S‹L~;&t§û:XIÓ-[9¨¼8òį5­‘µ•@Ù´HÀ /4¼ÐðBà /4¼àx—´FŽÛ‘&—5rŽg‘óÒœ£9ï•fŒœ£´1í+wµOrWä¼ßg”ç¼íˆâxWÏB«J¿îŠœ÷ûr(^.÷ìk#xÍ‘sÔ"g²éÞK à…†^hx¡á…†^¼¿iÜ#ç$ÕNLrS伦5Ò¡sŽD~ŸÙo\g9É=ef_¹«Ìl’»"çí2™´lÙã5WX¼4´ZÓéðôF"¿ˆ7.Ó$x­Åh¯9rNZä¼ßT—ÄB’ê0¼ÐðBà /4¼Ðð‚áý¤ôSog|¿ jÞfþ9o»a>?}ìðþçó/&gã®aùº±Ø#3ùœü(Ö”uÖRÖYp³4‡çW.T ï6þlV׳o¢"?›€H¿Îf\Ãòuc•AfòùÖ]¬©ð¬¥Â³4^;gi ùÙX럅Ÿ ´Ÿ ´Ÿ ´Ÿ ´Ÿ ´Ÿ ´Ÿ ´Ÿ ?›5½³ï0ú ã?ReûoQ1V_安ޓÜõÏDÑþ™(Ú ˜þ5Øó Ãø¯Á¶Œó¡r×@HÂÇì‹æ‹Ã“ÛõóÆh| ñÆœÏêßömAóëÞc†¤¾–Õ=柷}=¿¿!›«š«Z冶E+›¶h>¡Sõµpê1¼å²±h9WÍ¿U­ôB[ƒ•Mk°>Ðø@ã4>Ðø€óYý[Ó Û{…³Åoí0K˜|Î7k¸iîQ[ƒ•µ5Xù¬ùîOj¸ioíp<“ïk‰ÉçÜa³¦†›ævµ-ZYÛ¢•{÷ÖœqÓJáüÜ¡q‡ÆwhÜ¡qÇ1÷¿ÉdÒú£ŸïGƒÑ>­3¹« cßúW‹ÑÏ¿·þ=ÖÈõ÷—>“é|a°©õà 0ºó~69«u&w•aì{Ã(^.¯ž¹þþd2/Š6µþ x¡á…†^hx¡á…†ï„o×~eëtâ<ÞkäŠIÎbøuËì^nœ«6˜Ü3ø+÷áC{kÛv}eëxa.ÀÖÔ·(¸õ±lŽçLî/LÀ™ÝîÐ^»üà ƒ8hà ƒÜâ*Ëõ^ñpk.ûýKã{S¹óTY6¸˜äž|EyjÄ{D‹iÙžO |–cMøã{S¹ï—TY¶±˜äž¼Byjµz$‹i™Àh| ñÆp>«Û÷²Ý¦tTž-ïí`.Ò‹OÑÚÁŠ©lo¡@-´äË{ËÍã!…ôæR´Žªbê¨,ÍBÐ,ÍBàZOY”:FK<«{ÏÉi[ÐõpÆ£vÊ¢é”E©é’XˆÖçÎä´õâz8ãQ;eÑtÊ¢Ô·(Xš… YÜBë)Kïo‹í!ÅÐr݃ø½¬rcÎ&—k0¹gÞ{Ѷ&}å®ÇÁr¸5ii«Ûƒ ÜÚøQ ×=zÜËÁJæðo98ë°¡¢­="ଯ{åpíÑ2…H 4pÐÀA ŽÁý™/Tò™«\ÚœK>Ø"¿×QÛœ‹ÖmQ²Ôæ\´ÅCÅ´xhχ¬Jå¶ñÞ òû»·±O¹hm %K}ÊEÛTL›ƒ>Ðø@ã4>Ðø€óYCÁ"•LrSùAºˆÜ5yx’ßʬî±HÆ_¹kDOѺ Š©Ë€àµ–¼ô}:±¯»&oñŽ—þñ®Fc‚×Úh\´&…bjRðBà /4¼ÐðBà /8ÞÕ9ï— eãˆR_7hL/±ìë¶`,±ÿvŸÓïR.ánŽ¢»Ew©—Mà;4îиCã;ÜW??Þ«wn¾n09},{JçíeH;7‹Ö°°7] ¦ ƒÉé;ÉSªthoëCÚzY´–ÁtÐLÍtÐL‡é–[÷EÇŸf Ìê%í¬ZÑ~ÝoÏIÃæ.ªV´_¯÷[s~– î‚€ ÍYíÁ™7JV­š¿î§Pp\îy5¯×û…)?Ëg%€ƒ8hà ƒp««Äû[Ì“«<ÜeƒÈäž:¢¯üæ*¯¹Ó7›äž‡ò¯ÜYýÊW‰÷”þ“«<\c‚È䞣-¸ÀÁq¹ç œ€3»Jh®Ò8hà ƒ88À­®r»Yæ>ûð)0‹¬ÝUÆ“¶÷NÈ=mï“ÜóSµ’jj!Ùò œÏz¬#+Y¶ñ¨Izæ9kw;ác}L©ZK55°| ñÆh| ñç³ú·}1ÿǸ|’ß">ãh¾šÎÆzôÁäž÷ˆªµÏÔ¤…‚I ÷à‚qÕ÷\€q¶G§CôÁäž…ªµÏÔ¤…‚I ýà ƒ8hà ƒÜê*ó{×ü“«Ìï Æf‘ÛžnQ˜¼{b9mÛHÕ¶ì-²Õ×å÷DS³Èmh(LÞ=Qš¶°£j ;ËC³<4ËC³<4ËÃaùÕÛf–dÌÑ‘f–}¯Ò#2¹çù²iæWî†Yµn”º­g¯cñI¤]!Sq¤]ô’Í|"çc}#­EšfIøX :ªÖN²åóAºÏ.ø@ã4>Ðø@ãÂç·n"ß¶‚Ö}?Œã(keµÌ¶‹g=¼xV&w]<«vñ¬š{ÔVfTÓÊŒ=ÞãÐÊ=ÞŒ#Ú^~Ë©LVízZ5ïªmܨ¦^hx¡á…†^hx¡áÇ»ŸM]U›ö@Ü^ƒÏ§­ µ±µûG“œ˜<{œs“V6W­¥š:PöxÍs·^ó3r{ž¶w¼!‘œ~NLž=ιI+›«ÖRM(^hx¡á…†^hx¡áÇ»:gÒbÜW;{¸–)@•t DÛ˜‹ºÝ²a\6Wµ-µkÎYÛ²Q÷[6ÚâœIÃqÙÁ`"DðZ®G†7p¼ô÷å%ºæœµ-{¼ŸrïèðBà /4¼ÐðBà /ÞOì?éžÖÚ#ÑЪÐO×d\Lž=eäZ×I=ì:É‹çÚ#ÑÐÊÈO×%°?ž‡-¦¯û^´O›V–TëЉ†Vî·<4ËC³<Ž-ÿ‰å'ÎG¦]ïÞæáž>É=“"&9›ûtOoDM"ÉÂäs$“-’l×{q£Ét®ñvØ2³4älÌ®îÖ„{ˆ¶ <á÷P˜|ŽA(wþõáÈ®îVOÛN;nî™K;4îиCã;4îиã”ûoy8nQeÛ7ìÜ6¢>D• 'ÅÆ>|å®ÞÆ{Úµa]H~– SÊ÷–ÔòëyÇÑ3ò:xXÞÚq³·|°ÞÆ›aÉF~– cÆËC³<4ËC³<4ËãØòæ„·mÏK²¾þ|åwwQŒî"îÝE¶õ÷Mòæ¸Ã¶¨y›(:n-’õa†X>£»ˆûm¶5èË[ï°-jÞ&J…Ž‚å¡Yšå¡Yšåá°üòœÑÒ{¡ãSl“Ξ3Ö;l’š‘¿òÛ“òmY\6É=ÍÈMë@i‡(K$’14Jg™ìõš¤fä-¸ÀÁq¹§¹i(ítË=_'€ƒ8hà ƒ§à~¯a÷šÉ–·ÍÈý2f™UߘZ>kF^êj&¹§¹e©fò+wÕL6mÿK3íÙâ ïê2+Ï0½`¼´Wv©«!x­½Ì-K5“¯9«§­i¦õ1^hx¡á…†^hx¡áǻƱå=G÷äaʶ/'^¶öÀfhØyØð•»Ž'¹gÁAÓvši}ÌžO¨VïZ¶}”—Óð°ð±>/>Öºš¦5ì4Óþ4>Ðø@ã4>à|VÿVß·ÔQ_÷¯¯È{¹i+AŒƒÉ='¹gNÓ¸4mK«ïéëƒï¨¯K€×çÀ½ÜÔÃ;ƒ‹œ9©X¥9M[àÒ´.8hà ƒ8hàà·ºÊv ~~R'òtû_S…v#í3´®&ùÍ¡¶nLi6-ÔÚgšÖ>Óš¥Òp—G*ÞHñ†w­Ð&xyE&òÛé¥xW—Ö´HRkŸiZûLk–rF/4¼ÐðBà /4¼Ðð‚áý[3Ù·¯Ûæ{zßG»ÆÆóÖµ,hײ ]Ë‚jý/­›ÂÕmƒD2ßÓû>62vŽ·®¥1»–ÆìZSk`Ùóù•úù@ã4>Ðø@ãÎg >÷ÕøsùÍÿH;·$ÉuÝŠNE¨ $jþ󩎸N%›[‚°>m8«÷ÊHÛ÷ôy5þWõΖ1¯]´OvÑ>™ƒ:Sj.ð²%ß½ç/[²(ïdâ“]ˆOæaΔ‡© lL`cؘÀ¦\DŸ·œ{îÔg‹~"ûŽü1Ͻ#_; æ•Ôżr?ý˜—NPóŠƒú5vPs¼‹Ä;üH§x—Ⱦ# ¼ò¡ñ‚×5ÞìLàÍÞOÞìLàͺÇ9ÞÑ=¼ÆðÃk ¯1¼ÆðÃkïèœmz?Í.½˜_œ³¯-÷ü1/=_ÌKÎÙ˜s6´Çª³å,SpKd7„NÁ-ÜðÎ"Àe_ˆ¸´Û5æv í±êl9 g œ1pÆÀg œÀ®r¾œeO¶?_ÌScʆÒñî/]¥+ó’«dËY>æ5WÉú\ú|+Èžì_à䄪¡t¼ûË_œ+ó’«d[[¸´«dm2œ1pÆÀg œ1pV7ºÊ@¯}¶uâ§…«Seæ9W9¼h÷`®2Ø©2˜«d{^¦àòÏ!Sp‹7¼÷—ëBvõÇ×\e°Se0WÉö¼pÆÀg œ1pÆÀYÜè*›òˆócá¹ óñž½d$^̯1’Ó.æ•÷—¹¯•ô&[ÓÙšN6¦»0¯kKfôáÜÉa \ö]G€K'.Ù–™Î¶ÌpÆÀg œ1pÆÀYÜè*ç=/–}Hú˜·Œ§õ¦Ì+KjúÆ\åÆ.àÛÍ©2ñ”êy™óY,û4ç#—Þ”yeIMߘGÜØ={»9ƒ$žrR=/€1>ÆøãcŒ1>¦ùŒþmŸÞšÓåûô¡|]Õ­Y™×ÞbvvkÞÙ­yg·fÖó2·Dú |ºŸDƒ“æµ·˜ÝšwvkÞÙ­™õ¼pÆÀg œ1pÆÀYÜè*çUó?GÒUÓߦ} Æãå¥[šûÕQŸ¹ž—‹yé$y°[óÁ\åÜr$]åÜ"Á ÆãåÝMšûõ÷~æºY¸ôó`·æƒ¹Ê:8càŒ3Î8cà¬nt•ó”5ûÓWÞž*û»S¥¯Ê¼tªd ,óÚ©²¿s•Ãj–>o}X³o1ýqëÝí©²¿;œ¸úãk§JÖÙ"À¥]e9ñlð6upÆÀg œ1pÆÀÙ[pÿ®Séóu*‘½€ŸïXæúT¹e>½4Ýñc^óu';Λ0"{ƒ>ßš·.ÌõébË|zi<£P>í¬Nv®«+oLycÊSÞ˜òVP~8˜+ò6çªÞ‡—̈›óe_ÌÞ”yåú1×/¿–2¯4¶œ©Æ–9Ÿ´OšóY$Ÿá÷|Ùù°7e^¹k >Ù猓u¦œ©ÎÀÇc|Œñ1ÆÇÓ|FÿfÏ•-wêeoȶ*sysÜo\„¡›ãǼԸw1/ù7Kù7{®ƒ¸sP/; 6õ饭÷§¡ ¢à“-`|ÒþÍRþ­ÎÇc|Œñ1ÆÇÓ|FÿæÏo7£.æ‰r”ŸÍva>–B/™U§£5IóÒñÏoŽ ÿæ)ÿæÏë›É ‚*w¸òqÍgi¹§£eJ‚Oúøç7Ç‹„ó”«ó1ÆÇc|Œñ1ÆÇ4ŸÑ¿‰U)žôo¡ÆæRæ%÷(V„ 9¨:^cxá5†×^cxá5…÷Çã}ýÆ7朧åÞ?þÞ»gÏœ›2¿ÿ¾–G©Oï×Oÿí¶Kl{ÿ˜_¾\ÿý7~ξ\ÿýbæ×Ûq¿~7¿†e¯›0? o©¿æoÞR‡‚Þ)÷^{^æ/¹ ÓçÜÉ]úõç'¹Kó«SQÜ—+w—ÜÅ}¹pwÍ=û’+¸ë—Ü!á·1w^çnŒ»1îÆ¸ãnŒ»½åþã>z›ùª5Phœÿ1—óÿïîé»jžËå!÷y29öÜQÑËǼ´Òôdm#sp‹œ5LöŸƒ[$¸ÑÛìªk+— Üç °ä`ÙsG53\ÚÓ²¶Î8càŒ3Î8+€óÇsÉÍÝ¥ûx×A<Ìà:—[óÔ§×^´ö¢Íú>æÊ/Rùñ{¼ë=†h åõ¾5õ鵷ꃽU³Æ  ¼1å)oLycÊ[AùÑÛtVà×çç¯6 ¶¡uâbÞU9ñšùô1‡ºÌ»×ԧלUG“a.æ•·ó]ãFŒiÓÎ çÜ—9÷Åô§wUR»f>}̾-ó*õé5WÙÑ`Á=},|Ù÷1ÖôuVXçnŒ»1îÆ¸ãnŒ»½æþñç;[8+¡ÿ‚}ëçÏé í¶æfh̿뵳7è“=cÌQ³*çtEŒ¥†ÓÍgô Ó šÏX'yÎë³哽CÌ¡² ,s>?Çà;ê|Œñ1ÆÇc|Œñ1Áç÷|z\Œÿ¹z’`¼šçŒñG˜«Q7EóÌ*çåçTŸ^9Ç^Í c».æ•sì_óú]pÏæ'÷›4W¨OW‹•nªwµPx9Õ§WαŠ{²:JqOžc÷dÆ€p7ÆÝwcÜq7ÆÝw+p÷Á]ØÜÏçòWó-“õ]˜[«xZcžuÜü5O8T›ÿ°r‰%°À· sk—fÌ¥¡–!ð?ž«.°1 lL`c›xt>Oi®©Wó Ջy¥&üj^rÎ\„§\ļ)B ÆøãcŒ1>Æø˜æ3ú·ùÂŽ¯šð¸ù‘&ZHzÆ\§îSæ•Úà¿æä06ßÕ ¥?‰jüž1×YДy¥:WI—>Õ¥3&1éŒIgéÆì¼°ùgOþ`§(ìºEn=3æµ·6´Bâb^û½¿ë8Žá÷>W~Ù“¿÷iM¸V^š×^»Ð¥|Ú]¼ª ÿ±mãuå)oLycÊSÞÞ*ÿÓ×?ý»®à ªWó¸ݫ¹¼þ™O¯%“v9R‡ˆƒt‚*“Su•ÀÉàJàtJæ`#uÔ8HË%ؘÀÆ6&°iÇɼ„Þ<Õqs5/eƒû´´²É IgÏUy˜ÎÆøãcŒ1>¦ùŒþm¾qÀ²’SUPæ2À'sç|…Ë‘ t5/ôn_Ìk÷µw ÂÇ7›oÙüÌ©Jár©á“ùÍs¾ äHFRàÒ™å“]÷^NÝß—Vg œ1pÆÀg œ½÷óßzûº-Úú|¼q•sÙ»=\#…ùÕ¡ö–gt5—͘–1ÿ:ˆng.3fhÛÂ_sÊžƒ[,7æR[¸ïön‘àô§Ë®:˘€$8i^²©Àeéœ1pÆÀg œ1pV7œ*Í^5ìüó{[ÈÝ”yÎ×…0ÿËù5Þ¤eþøÒ©Ò‹"e^¹t[ªŒÜì]ÆèÞV97ežûa…0ÿšÛ(ñÊ?¾tö´Ä^H™Wîì–*bxá5†×^cxá5†×4ÞÑ9‹µ‘<ÇúËs¬4ÿrg®¦Â\ÍÉcç['ú.æìióJ‹ÝÕÿ'œsª€_à]"yÚõ—‡&iþõû9suo6¯0Ç»H¼Ú¼Ò dwÅñ çœjxá5†×^cxá5†×4ÞÑ9;9¿l^ØWe^Ùt17Y¾F6mÒ¼R~cA&\Í+­îö®÷!†ò›9÷ü‘úe ý.?½0²Iq_BŒîÙ¤y¥øÇ‚LQܳÙ`{Y §Ý`gí:wcÜq7ÆÝwcÜí-÷ŸèCé‘5æçÛ» Éá¼æiKç6Ôeökþ&Ü_ט§mïn·‡ óš¯k,ÛP›˜P^úºí»=(oLycÊSÞ˜òöZù?ÿ´¯ŸÌö<ô.¡º©'¦œ»ØÈàß‹yéÝXÄ\º%’=TBºôï}#“{•téß;ëƒÒ“ΘtƤ³‚tã5õAØ® —ÄDÇ‹yæ÷7}&ÌK§‹¹‹Ýãv²ûF˶QÌÁ-ÜøÖ¼¿:/}Wæ¥ÃÉΜÕÎ.b;Y^CÀg œ1pÆÀgoÁý³}&l¾R¡eËrÞ5qüã*ß®TažÊ˜ùz*óÒ{D¢…$%]í­yÞB2&ÆæÛZ¶xçe‡ÃèPßnažúY_ñºÆ›öljþŠ”tµ·æyÅÐüðÃk ¯1¼ÆðÃk ¯ ¼?ÞÿÄ·sž·Ïìj\[ ï¬}Æú|Ân²}æb^:ˆvvo}·ÂÇ”þ¼ñB)¿„4¯xÏ•_ÎdcŒP>}’ììÚûr Ã68•ºòÆ”7¦¼1å)o¯•ÿmôˆ¯ŸÌùœT¿û½Ÿê4Wšr*Ÿ4?ËmÒ¼tk>YNþdg¹éœ}oƒS9ŸÀw^áToZ¹Ú’Sý~æÑz“æ¥ËñÉ2÷';ŒÍ÷ “Ôc|Œñ1ÆÇc|LñùÏEüñë¯Ìç(=éß|U-Ë©ãÐǼ4oíc^:ù»\Ï\º¥']Ï\ºEJ'ÍK£Ð„tÙóŒ¿,æß¿½ΘtƤ3&½–î'¶?Ç×—ÖPÿb¾‹g»»r,gí/æ•ë³NOu"³éö¹À‹Xš—ò3Bà´W`½žêؘÀÆ6&°i‡—>÷ç…7…@óTþ0­Úß–Ó»2wqcºk•ú˜—žê~Í_ ÚðT7W~iÉáªByÙˆ=Œ›ö·¥Ð®Ì]œµïº˜„òé…¿;Qôï PÞ˜òÆ”7¦¼1åí­ò?-†Ç2Ÿ——ŸÉ ;ï¼ÍPvèñ&CòûÜ¥Ìe†äÈüñ¥ ‰³ÙøÌYÍë„ÏäæNþd†ªEN]ÍW¼¾š™?¾”:q6߃ùº:8càŒ3Î8càì-¸‰«lh܇·—Ã!¥y®‡Ý…ùwÊ9ùòu1¯ô°{C=ìÎFë{ËjÍñ¦‡‚¼zr¢4Ï59»0ÿΈ&Ÿ×Þôų¡vg“ù½eʹ^cxá5†×^cxá5÷ߢ/ߦ“{×äØº‹yª}fh“¼˜çÊ\˜9ç¯6Ö-óÇË<üݘqߘsÞ˜sÞ2E_S¼‹Æ;ºˆí]§È.?=÷ïÂüë×+ñÊ?^&¼ïf™ûÆœóÆœó–)úxá5†×^cxá5†×Þ‹¾|Ÿ:ç–ìm¼˜ç*r›0¯e v4ôøc^Ëì¨Yiªü¢•½ûËjÊ&Ìk×ü3ʧ¯ù;êuÊSÞ˜òÆ”7¦¼”PÔI}1¯Œå¼˜Ýæ·\͘¯jƬʼR3æl…ÄÇ|âëGÁixŒ.í@íÚovxçï"ñÊOO¥ß®x]ãM¿/³oú(8¯ÿcê xá5†×^cxá5…÷'ìÏ÷Q°O‚=¹açb¾}Ÿø–Lߺ÷—ÍYêÓÇÛüÜ9û¡ÌKÑÄö”tµ·uÖ}0å¾hî£ï˜s_Z®éÞû˶õéã=pþ³öC™—ŽÁ‰­)éj/û¬÷p7ÆÝwcÜq7ÆÝw{ÍýŸÎ ?ŸËîœÕË5"GWæ¥|ì9ÏÇfë¢Ÿ×ˆÜæcO´‡úb^òó'K8œÏÏ,wÎêå2‹£+óR¢öœgò²EÝÏË,nµ'Úo-¸§ýüÉÒuîÆ¸ãnŒ»1îÆ¸ãnîC²%ÖçuQ7Îêbž[µ*óÜyÞ…ùw4ØDùÙ)Í+åôóʰ…yéÝí×üÙÇú¼›èÆ' ¼z7‘üôÜñÍ…ù÷_à]Ni^)æx³ïno6Ù2Ç;zm€×^cxá5†×^cxMã³=Où»sÎöÆ9ÿøÞ„y®¸76e^ò®†Š{ƒ5+…ezç|–HÖð >êçwåãš,½ðqÍ'í Õðëušóc|Œñ1ÆÇc|Lñù§›2uS†Ø<²å6è]Ì+³hbÞ*udý›£fÌy©ù:e ¸l—¦·l¹ z\v”ÍÜrdŸ£&O.{ÍG×|Î8càŒ3Î8+€‚ñ¼ãéî(h_°EóJYB°F­æëây?ÏÝ!/Ðn¼`«4„òéSë´Š`Ϊ®¼1å)oLycÊ[AùÑÛÌš-~"ÛÃ~1Ws·îžé?湋§­Ê¼òL1ï…ן`»0¢1g5í’‰l üÜ"ÁIóÜÇÔ_zgà²Ï7ÁViDc¾®Î8càŒ3Î8+€]冖o^Ì+ƒý?晊¦ß_6–£c{@>楗î`{@¸ìZÍ9¸ô`N•¦üó²²±äÛB"À¥]%ÛBÀg œ1pÆÀgp£«ÜÑd¤ØQçǼ´høb>8ÔTMÑǼ´Ëòb^zÎØSqGó“Ÿl“¦à“Îêíêç—ªý|²Å;‚Oú9cO9¾MY|Œñ1ÆÇc|LóýÛ¼qɲGÁã³C˜×rt¬u(Øê8RjÞ[bÙ#Ûñî`‡0¯¥âXóN°åsÿñ0u lL`cØ´À£‹èhÑÅ|h˜^Ôt¡¹ùx§G ¦Ì¯K¿-yêÏ3ˆzʼTn×™ƒê)ÕÑ "wQxÇ;eW¡›2¿îx–x寇Ôô”y©Ü®3÷ØSî±£D¯1¼ÆðÃk ¯1¼¦ñŽÎùDçq¾;¿»0÷Ëåî§§zÉ9gÖóò1¯½z°¦•8QK¹'-ç.ÌÇÕb¹‹ë©Rì9·ËšV¸t*upÆÀg œ1pÆÀYÜà*Û:mÑ.ôó'º0¯ÿj›V&ÿþÿ›—^x/æ•ÞÆöž´ùº©ò‹T~¹(ïRùE(¿\•w­|ö‰V(ŸuV­Mi+rV@ycÊSÞ˜òÆ”·‚ò£·1Ô¤Ö =\ÌÂÃÁÇük¶ÄWsâž1/õA4ÖÑæ}CáÆœOºËLðÉ>>Ù‡ƒ)ŸE󑿥>ˆÆú šèƒ|‡¡61ÀÇc|Œñ1ÆÇŸŸÿ<ûö5T§ùóÅó&µÕüq Ü]ÄǼ”—»˜W>æ5å©C“?ß3n’Ks)°4/eÆ„ÀiãÌÃxêlTؘÀÆ6&°1M <bZ‘»'çnµWõÿÿÿÎÍuíÄ–ùôÒ€ëÆêÿÛËE-}ðÓ*t­üøûyW…»útýê¾e>½4{º±úÿö² }ÈÏå)oLycÊSÞ^+ÿ³­Ú×O¦=µ~¾K.æê÷~÷Lù1/í°km>i5YÑ*jý˜—ŠZ«ÿàäD‡åPæêK{÷)ÀeÇ7MÁ-Üèm*jàÒ¾ŽÕÿpÆÀg œ1pÆÀYÜx0›/.Ù’3:ÚËÅ%±*óÊ@Ô¶½ˆ§2/åá74µ±öÆÚÚ|åÅ–œýÑ^®¼ù镨í]û•»kîéW€ Dm¬û ±îÀÝwcÜq7ÆÝwcÜ­À}ôóóæ…=ëçwµOušáøùcûܼԼÐÍ íëÓC˜o×ÿjï¹ a¢÷¡Ý›ƒÉÕspËžuÔ»ZË9OM]À¹—~œHTÍ·¯Oa~ýÁJpòÓuî¼Ý›ƒÑÓœ1pÆÀg œ1pöÜ?³£Û¼Šük.ÓÝsFbËðÎ17ÏMØVe^i£¸˜—²ÇMmIâ5$ÕF!ø,[ò5$±¢cÈâÏÍs½æ›úãK]‚O:IpÜÔA$SR]€1>ÆøãcŒ1>¦ùŒGÁŽê„[œŽr·aªõw¦ú®Ì+-ÿóRí\gµsÝÙ;ªžƒ[$8iž[.Ôwe^iùàÒ/A•Þuvéî¨N€3Î8càŒ³¸ÑUÎ ¼ÿó”ÙgëSM§Ë=$/ûÝ6e~íwÛ²¯Þçã«÷í­ùdÙQ¶F¤±ŽŒ)÷EsÝÅ©&´åޡΗR›2¿vJmÙ7÷óñå÷öÒ}²ì([#ÒXCànŒ»1îÆ¸ãnŒ»1îVà>øùmÚâÞçõE¶wa^zHÚXCÇÆ:6ÖÐ1•nQÒ-Wé\K—}‹ÙXGÆÆ:26Ö‘¤3&1éŒIgéÆ,[-±½l©ˆ]˜'f®Ì¯™¼¶‰äªüãuÁó™1/¬~͉»`;'¶—µü± ód„ue~ý%8ùÇë:ß3c^: pigÅ–QpÆÀg œ1pV7ºJŸžmެ«ôW[xÆ^×Í_Vø„0ϬHûïr»*óV9˜ùóËo¤Ì+½![ª7dŠwÑxG¯à¯–ÄŒ µ›¿,èažÚ¡›ú·ëÔÔ‘ù·ëgÆH™W:S¶Tg Àk ¯1¼ÆðÃk ¯1¼¦ñŽÎ9PëÜÅüë(x&O’Zç6¶ãc^s‘rZç„ÀË™<ñjÛØú !pÚAEÊAjؘÀÆ6-ðè"ªÐÞË,¶Œyéàc^jÿߨ6Šu£L•Ï×Ho‰¥[Ƽ”‡ʧ}['±±v ¼1å)oLycÊ[AùÑÛlhÈù–رeÌKågs OýñµÉ–r*šR¾%ÆÿoóRý˜8û¸'NH¶”ïØÐ˜q °1 lL`Ó.b^Øü“¼½ÛƒðOò|™PRæ¹–±}Sæ•òÚ‹yeðÆÖ(l©5 ï’¼½Ó?¦Ø÷òRv×xe‡Ð¾)óJu®À›N(±- [j Àk ¯1¼ÆðÃk ¯1¼¦ñŽÎY4/XÒ9‹æ…ë·ãËñ5e¾‹Ç‚»~Þ5/lw; î1Õ} ^,éEu»xr.^"×8»±îƒínEAÂA¥Ú€ÀÆ6&°1 lZàÑEôçá·7Ë”?æµb§Î®x¬cøSé)ݸ YH—~¯êìòÆjà7V¤3&1éŒIgéÆìùjyú8­úb.§U·›Ó¼ˆýë>}÷{?Ÿïk–1ÿª•ê‘<œÏ¥•ŸþÂ]üó>}¾Û> »žƒ[$¸ñ.4¯F–àÆßûù|T·ŒùWɧÍ{%}ý²øœUœ1pÆÀg œ1pöÜo]æñ5Šv_çc.’ ;óM]nFm_ÌåcYd>½ôXv1¯d‡~Í'.mG1xÉŽ“/ž›•-^”ÀòÓKobBàìõg.ðï •ëlL`cؘÀ¦þ‰ãÏ×qh7´ñ|74ñìc^Jq\Ì+%7;§¿ÏÇé—$!pv3ùnh´˜8›â§]›‡¿‹yøÃÔÐq °1 lL`Sÿ„ýù>ELK¦mí¹ ÉÅ<7?Ö„y²»$”ù×…#—Ÿ¹˜Wò3óRwɯ9ÈÏLÁ-ܘŸàôRæÉ&…Pæ_íøG.;$Àe³C\6;$Àe³Cœ1pÆÀg œ1pV7ä¦vVÀ¼&s1? É¥ùWri÷\µÒÎʧ?æµë+ŸÞçåÓ>8TV>=Ç›9#ðfSPs¼‹Ä«Í+ÅÛoú$ÉŠ·wQ¼=øMV¼ ðÃk ¯1¼ÆðÃk ïÇûú‹=YçÜÞ]uWæ¥cp{7ñìʼ²øc^zgÜ_Vž—X1N?ëvÛ»Þáʼt nï&ð]™W6 pésìÛÂõï>eÎ8càŒ3Î8{ î÷|jßWþ MúÚ·ç.›U×MílÁ¾¡2óR—ÍÎ6L•ÏÏÚš+¿H凂ªíØ74F(ŸvVlPÞ˜òÆ”7¦¼1å­ üxkÞŸŒwÏùlðŸ=W’±ïh&þ«4ä,Lü÷O?”ùQI0î,Á¸3gµ?ç©î®”spËž+ÉØw4mA€[æà–+8×àÒ Æ%wæëêàŒ3Î8càŒ³¸ÑU,Áørÿø”s¨A­9Wy¼\P¥þøZ‚ñ@ÝF¿æÄU,uør üø”s¨‰›9Wy¼Ü4¤þøZêð@}D\ÚU,)Xg œ1pÆÀgp£«œö»%'E\Ì7•-Ü¿ÿÿ suª\Ï̧;ÔM=å4e~={ö5yƒîhÒ׿ôÓSuZA¯ñŽ^¡«þ—éïòŠ×5ÞEᕟþýëUxÇkzŸt$^ùé¥I_oú-¦§Ün¯1¼ÆðÃk ¯1¼ÆðšÆ;:gÑı'ϱ'šXû1¯•ž¬ìðdîñL¹GQ³¿'Ï›'š,+N—ž¬ìðdêL9¨ºÀÆ6&°1 lZàÁEësVðÆE\ÌsoÊ<÷Þê«2¯ŒZ=Ø üƒõ>óÞ‡áUvÊgÑ|†_ÙœÏM¾\™ç^ç\ýñ¥Y©´°Ö‰9Ÿßíµ×_àcŒ1>ÆøãcŒ >?Ñþì_o¬Ç|hÿ™<]Ì+o¬óœž-CO´ó’c‡eNPs>Ë™ÆøãcšÏx~sÔYvøËæÓ]™WíiûOl¹Zè‹y¥Üîc^*·;XÛˆ—íXàtÏå®Ì+ösp‹§Í+åv\öU÷`m#œ1pÆÀg œ1pV7ºÊ@}úóJeòÅ<ç*•ù×î‘=9äö`}s/ÞìSÅÁÚFŽÔÌ€×^cxá5†×^cxMãsC3$örÀosÝþ¼e>½´ïc^smêmp Í<^v µ-Bà%Ùw4´ÅNœvPmî †ßxC3$ÀÆ6&°1MüãþgýNåÍ×ÄštÛ›¥r¿ÛN”¹<¿m™O¯¹ˆÝU_¶Kœƒï˜·—Ê¿ŸíÕB°Å6e.cï–ùôšïØØeóeÑþöÝß”7¦¼1å)oLy{«ü¯ißÞfZ¼ýcÉÇþrÈ€ ód#ê¡Ì[¡ôâb^z8Ø™³zÙ.q Îj>lÞ’»æànúË]˜'ûeÞ %\:±¶3_÷²ê~’ýupÆÀg œ1pÆÀÙ[p?ÞÿÄ·«díóTbm€yˆv‰È-g9Ž7žö?ÿ¿)óJ‘ÛÇ\çåÚ½9yƒ`휼²ìòÓ»8œÜ­]àÔö Î5¸´§=žS2íÞœ¼A°v Î8càŒ3Î àÆ4Wé®:ºªªË½·öyÕIr/çżÒv1?+¾Ž­QÊ/{nÀˆP>ý`Úçõ ɽœBùlo—P>í¬Ø ¼1å)oLycÊ[AùÑÛœóÏ]µü»2—¿÷»k`¢þÿ̘ײâgfèÑ\¡E*4žAæ ékæ:”óZZûÌL SȘBÆ2¡Ð¿c|úªºa–ÌdŒy)ª^Ì+m2±÷5{ç -‘A!ÊF?¡Pöq¼³2ò¹BcŒ SȘBÆ2­ÐËú¼Û“¯?ýåýa&ÃżRèø1ÿÊ%¬Éƒ÷żòxô1/åcÍA>vnñäãQ99~˜É ÀeÏíSp‹§Í+oO\öÜ.Àeó±œ1pÆÀg œ1pöÜ¿ùØîó§«dOßÅ\ޝÙt-ÍÅ|ÿþr¥^¾º¿LqHókäv&=m¢¤üA:£˜ƒ[,Ùì'À- ÜP£3·HpÃ]H€ËV@NÁ-œü·ëÊäé@Š€3Î8càŒ3Î àÆSe<諒û½ÇKWéÊ\y›ñMkn^Ê÷˜ÏkIWh¦â¯ù WÙ†Öâ)¸EƒïñòçÊ\}iǧ‘¹y)™<·hpÚ¼2SQ€“¿¸>œëêàŒ3Î8càŒ³×à~×6| öïíy˜ÌMûLoìÞ^ÎUŸž«§šw.æ•Wþ‹¹ÌÑ¥¤«åèZêìÙž'­Ü´ÏôÆ®éíå°Rõé¹â¡yGàÍÖ¼‹Â+Ík Æ–:¡ÖñÃk ¯1¼ÆðÃk ¯i¼ã9v{.Áºó0Û»6ðÖ•ùQ9ˆnóƒhrßzgµñ­˜+¿HåÇ_ïö®¸ue~TN’Ûü@’\˜ÞYm|g«€òÆ”7¦¼1å)oåGo3_%àÉNꋹô6w—µñÛ¦Ì+CÃ.æ¥÷Öåö”Ošž÷d+´à³x2ø²’zÛ”yeh˜à“~íÝÙalOy®:c|Œñ1ÆÇc|LóýÛæ¦öã]§áÖ”¹œÿ÷rL§R{$ÓzÏóÿoýÛV¥ô—í}p|šÇ*ÀÉv¹­)s9Fþîä˜$–àä¯é–1/­Jé/뢷ï*3Î8càŒ3Î8{ îÇÏ?íëÛŸP¾nŽƒ³ü[òæ8Ào×ùå·¾®??aô”yé(Èø÷Ôÿ)ŸEòYš+ó¯_FKÞ/§Åך6?*…ÙþžšÀøãcŒ1>ÆøãcšÏxó\sâʼôlq>¶ß¾ðž,/w²¼ÜÉjiæuëœ4Ïõ¸­¡ÌKçc7ñí ïÉÒz'K묖¦Î8càŒ3Î àWyNW D$ˆÏU=5¤\åÇ\Ãl)óÊQðc^Zgük|ÝTùE+?ü`çÊ/-éë„òÙùü˜×¼M0o3‘~${"„ò² êè¼Tƒ+”ÏŽ.ʧ½M0oSWÞ˜òÆ”7¦¼1å­ üèm*|½˜_ÖŒÛÞs¥hgcI§Æ®íù˜ú·—ÞÏT[ÁœOºÆøãcŒi>£›9ÿÉÓÔ6̦¹Deþ‘ôoóoª¯ø˜×Ò\/û†}Ür$cÛü+›æååGÒñmÌñm¨ðB€KŸåÞ¶ >©Î8càŒ3Î8{ îßý ç|b$«vÏý]ÕîxsÜŸÇPßyÚ}^É–œ[r1¯¬Â<ûSÒÕN’Ó¢ìØ‡:ÉÚ^W–ˆŽ×Óýyæñ?Þç…VÉé&oúrœŸ’®v×ÜÃA´Ž×^cxá5†×^cxMàýuºÇ·s>ž×©Üù·c>csM¾A|ÌÕIÒ†õÉsó¯–Šìø¾ó@ãû>æ5ç|0ç|LO»Ã,ÿ9ÞEâ]Ä1¹&:æxu/fó¯úýì¿ó@CþÞ´s>˜s>æO¿ƒ«ã5†×^cxá5†×^Sxüø_¿ñyGË&Qû›“óßÿ¿ss]¥|d>½V ÓYå^GÃQÏyù˦Gû«SÏUy×Êg[m…òék~g•{M7ÊSÞ˜òÆ”7¦¼½Uþßñ¤çù¼ê÷ÎÛœïI»0/ͽ˜eD·äQðd÷ôía?ÙJ…óL½øœÏ{pï\ÚùnÒЯk¼Ù)¤S¼‹Æ+ÿøÚ=ýD{ØO¶⌥¤«¹ÇyËŒîqÚ’¡ñŽ¿ñw«¬ËO/,Ìœã]4^m^ÊäµçsGJºšw7Ã%¶Ž×^cxá5†×^cxMáýñøZ“ÔÖÌŽ¾šËGƼ²îj~=¢~½í)óÒáscÞuK]ˆ72"ZðY$i^Ùü&ø,’6/>7æ·Ôµy#“  c|Œñ1ÆÇÓ|ÆËõþjîÖ¯ãæGår½“ŽÂ«ùYÉÅí,·¿ ´ìÊü¨Ü{wÒÓ§¤K'Óv–L«KgL:cÒ“Î Ò?ØãyBÂÝäå2 oʼ”L;Þ%ÓÆGÒƒ @¾š—ÜÅÁÜÅñÜšwRy¹Á›2/eÙŽwYSÿöÊd.í¬æ¬êàŒ3Î8càŒ³¸ÑUöçâ·;WÙ§±·Ô0™‹ù·Gìêî¶)ók“Z[“‰5´ ãb®»0RÒÕ®~=åPûs¥ÕCâ]$Þ±ÆmŽwQx—M™_»˜ÚšL¬¡U o²2YáMß{ÊíÖñÃk ¯1¼ÆðÃk ¯i¼£sžoâØ³åv§ª_žŸc÷U™«sìzf>ýÛ·oÊ·7eþåÛ{Ò·ŸdPØÕ¼TØün‘GŸCæ {¶ZïTU´óÓÔ.?]¦Ö3óéß^Aq«²Ï¹WèI§’dŠ{úýrDαuîÆ¸ãnŒ»1îÆ¸ãn¯¹ÿ>}= ØŠáóöüº=Žñ¹šË|Å–ùôÒ)úc^éeþk¶¢ó±P^¶v}OØQÊ'g5*å³\¡|²—Y)ŸÍå)oLycÊSÞ Ê§J³çìèMzóc^J0k£0ÖFaÆÜ…=§¹nŒBºlŠÏX#ƒ±F3ö{¯KgL:cÒ“Î Ò?Xžò7ìæ¹÷æµß»?þÞo°¬`.Ý¢¤[ZWæ¹Ä² óÚïÝ¿´·?XV̤3&1éŒIgéÆl íWóÔ¸}Wæ¥ß{¨ùp˼ŒUš—ÜE ¼Íż’·±wÛ(ÚPå?çžü®¸Ë3í¾+ó’³ 5Yl™@Jó’¯ ”·ÜÓ®òåF†sðuA&ÊîÆ¸ãnŒ»1îÆ¸Û[î?› ] ÖP§µ—~~æßî<’y›Æ<-ë °–:¾5ÔÊiíåK}ú÷ï'’陯\«Ì·–:ä5Ô± 6&°1 lZàñ(8­íýÀŸsÛ;qte~TŽ‚Ýv1¯¹ˆyqû6üHçÅÓRàñg²½û]™•3×F†§)Ó.b^ý¼ ?ÒºÀÆ6&°1 lBàßÿø÷)B,qX“¯?/—8 ­ß6­þùóW¯ÉLž?=ææ¥jÕ‹yûúô˜F€Ÿ?{æ…1ãóZ2™ÕÆ›ÿ¿&ßž^ŽÿZÊçÜÅ}¹pwÍ=[ì:ç¾(îË…»kîéLøÎ2ᬰp7ÆÝwcÜq7ÆÝw+p‚óé/G}ççw¯ü£Ÿ?Ȳž‹ùW9VDnΤ¨‰É²íb>É &¢GfćÀ»DÒï´Gw~e=s¼‹Æ+ÿøR£•dyšÂ›>™ !¯1¼ÆðÃk ¯1¼ÆðšÀûï€ëÏ=ìû¼ro0?+íÎMúóëš1¯ÝÓ{b]ŽxQω½)ó³rÑîìu¢??'®óÚ=½'Ö lL`cØ”Àãʘf绺©± ã$‹³¯æ¥ÔÉ~ãgêF{¾«ñ«-N²ºZ)”>„œìGz¦î~u…Œ)dL!c ™Vh¸%ù:]ÌÉ„ùÅ\fÆ<×Ü| ׋JT ó!kµ$ö:]Í+Í×Îj¡§Ê/Zùá ”_„òËEy×Ê/Bù墼K婼üãKÝÓÎj¡òÆ”7¦¼1å)oåGo3¯…><÷1¯ô>|ÌK½óJLÿ5Ox…yÝ®Rh|C eƒ²P(› ecú\¡~½u…Œ)dL!c ™Vhü•9ê8pGã7}>ÌÜs{Ư敃÷ż’ºü˜×~ãžXÉ(ø¤ÛÜÑüLŸÞöÜ¢pÅ'ía埴‡ñÄâFÂÇc|Œñ1ÆÇ|þYïØ<ÈzÇ«¹Z‹s—<ô—Ó×7i^™¾îlúº³éë©3LýŒ‚Ï"ù ¹G9Ý{“æ•éëΦ¯;›¾>çóÏ *È‚EÂÇc|Œñ1ÆÇ4Ÿñü6¯snbá¯çš›ë×»Tc'(V¨ì©Bå¹B‹Rh‰]˜ëìùݦ±3 «4öT¥1PȘBÆ2¦i…Æ_Ù6Í|î=yŠØžëC¾~~›2ßU&¤g>]¿n\ G6i.]Ä‘ùôR/ï9IœN+d5¸ñ÷³=—|}ç7e¾«ôCÏ|º~R¸Ö lÒüíVw×à²=\:ïZg œ1pÆÀg œÀ®r·îj<iþjï)óÒ•ggÇ¡=åzêؘÀÆ6&°iG‘˜~—õ=^­*þ''s¨¢Úùqh('»˜—r2¬\ÖÔDïl¸'FIߥƒwoÇdÍ¡ê)çQu(SàÒž‹ÂúºàÍàŒ3Î8càŒ³¸ÑUvÔÆ~1O4 ý³–Ý;ª‹óή~¬öÕSS¸ç§ÛØ…Àªãg\Ÿ.ΖÕygW4Vûê©9Ø@`cؘÀÆ6-ðè"Îinªg]Ä9õkÏ­Dù˜—šL/æ¥äÒ‰ªë?æ£ʦNvššœjpãÏïœþ$8i^êàÒÉ¥Uí péÓÔÉNSupÆÀg œ1pÆÀYÜà*cZÀì[²€9Öw§)_•yWÏ›6Ïù×õtM®*Ž­*þ˜—V_Ì+÷ÖxY>=T:N¹/šûà.b}wqùé]]nú?§ÜÍ]þñ¥Æ‚{öˆ)¸gu¼,!ÞÿwcÜq7ÆÝwcÜq·×Üÿi‹yé¸%Ÿk/æ›pÔwÝdñ\y~·œåc®';YƼtkËLvš ¼XòYU¼x®-žË²ï¶ ³™¼`…ësÇÉN@`cؘÀÆ6!ð¿“ŸŸ)ï\„¿þöïQП{ٶ̧—†¿}ÌK×Þ`s¿çÊ/–=Œù«¡eÿÆü¹£jË|zi*œP>}bcÃòÆ”7¦¼1å)oåÇ‹g<¯ ¸™/ó*ôsÏE\ÌÏBÿc^겉@tÁªÐ#U…>ç³H>ãïr^å,ùhó³ð ød+T#P_°*ôHU¡>ÆøãcŒ1>Æø˜æ3ú·ön Ê0-š±s1¯Tm}ÌK£&Í߇ÆI{·Ëc. MÏÒe뱄téóL{yžù. Ò“ΘtƤ³×Òýx|¯5Œíùúsw ÙTspî@’¨H¿Ë„oÓ®á5{žÙØyf{®àJIW;Ïl©óÌö|Ò¿;Ïlªw5wžI”?ß%¼·iSëš=mì8´=— ¥¤«‡¶Ôq¨Ž×^cxá5†×^cxMãOSûóiê.7µ«ù(‹ÚJ27¯ÆvT’ñ1¯å¦ØÜïØŸOw¹©]MYÔ6¹yí,·£š ¡|ú,Ç&oå)oLycÊSÞ ÊÞæ@kP.æ‰Ç²¿=“sóš·9Xré`Þ†•ÓÏ•OïGÊ«Gž«ò®•O{›ƒ¥æmX==Õ×iýTæ•N„8ÙD¢!îÍÉAt>úúÌ^{Ïw 4†ŽtÁ}ñ\#ƒà®º ¯Ü]sÏ62ÄÉPõðqoNŽÁuîÆ¸ãnŒ»1îÆ¸ãnîÃ!¼­ÏUn¼M[ß­5üüż²åcnjW×—Ÿ:ÎÚŠÎðmE¯?óÒ!ü×üÙ ¼K²š¥½+{ݹÀ›]#ðÊç¦þí¥3|[ÑëÀ›=„ÏñŽ^à5†×^cxá5†×^ÓxGçlh:ÊÅü˯¹ ÉǼT™Ü m}m¬y¡¥ÆæÏNO1™ ¼H¥y©¹Z¯ÚXóBKMÝؘÀÆ6&°iGáÏC_ï!þîü6L@jÏ3ÿïú›š£¡"sýâÓîÍÁMy®ü"•?þ.ö#ŒÚó´ø»Æ'¡|¶ÎX(Ÿ}²i¬y(oLycÊSÞ˜òVP~ô6‰úwÞ&^H\˜×îklþǼTükþÂÛ´ñ2“¾~çmâe ua^»J±éöBù´·‰wßù>\SêÊSÞ˜òÆ”7¦¼½Uþ§ÅðÑfEÝ?!Úƒ»hÏk¿nÒø­¡'ÚÆZ Ú»V‚Öw1­‡—Ò-‡+ó£ o =6ÖJÐ^¶œCV£.1éŒIgL:{-Ýo§zûúÒ΋‘¶Ü£a›·Ø–<lhëżt<ØØï ·Ê/[îÙn®ü"•š§*”O6æ.Øtz ¼1å)oLycÊ[Aùñ2²¿ÛwÓ\™çj ”y¦~ìÇz(óʶ‹yeqcµñsåõ–˜æÊ<÷Ú«ÌSµ?Wå]+Ÿm ʧ½ «ÊSÞ˜òÆ”7¦¼”½Íñ<~ù.õq(Ÿ”Kuìpr°Ã +nŸK·HéÆŸÌ¡¾Ú¹\åÁN;]°êt 1éŒIgL:+H7þ`û»uÆv*óÊè¶y©³øb^Ù ÑXwKÍKŸ ¬÷ÝÚ©Ì+£Û„Àé0ÞчÆJ¬[j^:ؘÀÆ6&°1M <ºˆÍbº˜§&¿­]™WŠœÛË"ça¡C;ÙcÊùüö𒮿 Î”ƒ:Ñ('W9[»2¯Ô2·—5­Ã:‰v²›óù™1%]Í=ž)÷x¢IP¯1¼ÆðÃk ¯1¼¦ñÎy[Ñ\šm}ãœÿ>B óžªLVŸžqÎÿ]#e^qΫLÞXeò¶f†]Íñ¦çÒ¼ºá@~zO•®ªOOýz— ^×x³Îyc•É«LÞÖÌ@.€×^cxá5†×^cxMáýghØf//׃w}ž‹~ëß eÃ>æ¥lد9ȆmöòV'ÍŠï0” Òe³aBºl6 HgL:cÒ“Î Ò§)Ÿ®ó5WKs1¯ÔÒ|ÌKµ4óÚÖÑXΩt‹”n¬¥Òeki„tÙZ!]úëh,'ΘtƤ3&½–îßÓl$g1]ÌS‹K†ÆÌyi,çÅüzˉäk×Åü¨Ä÷@ô3¾ÍÇŒiU©Æ;þ.ãÝV¡1SàÍŽåœã]"ù"'ð¦Ï å76¥|SÊ¿‹^cxá5†×^cxá5÷÷Zc_•ÉÛ¼2yM.Z½˜§º®ÆÃXc¹©ö\'ydÌK]W[c·§yuîšÜ”*”—½?ãY®±´Q{®Ö;2楮«­±ËW]ycÊSÞ˜òÆ”·‚òãÝm>¡½·¤·ÙÞy›¡NòbÞSGAõézWiK™—Ž‚¬*{cUÙsp‹7þ`·w?™¡ÌR€Ó§õézédK™—y¬¨{cEÝœ1pÆÀg œ1pV7ºÊµÃ_Ì+Œ/æ²fì¦eÛ_Utx;„yiòż²—y{YR~ ®rGÝô\v²·X®ÿE€SïEWp®ÁekѸ´«|Y½ )¾5ãpÆÀg œ1pöÜ÷?ñ}‡•ÿçO“>·ãUñ›÷.ÌK£?.æ•öö¾±zø©ò‹V~üÁ¯ÞƯʻV>;úC(Ÿ~`ÃÞ7VN”7¦¼1å)oLy+(?ÌúÔÛ´lƬ¿ò61ìa¿˜—î°}~‡mIgÕ™³bÃÞ7Ö °¥z¦xwüY÷W?¬¶À ¼é›nŸ_˜ZÒ#væÙ°÷u"l©N€×^cxá5†×^cxMãóùngë¾*óÜ{DóÜ&Ž¡‘ac ÛÉJSX#ÖjdØÎwÛMwižË‡0ÏíZ:6Ö‰°¬þ…u"l©NÀÇc|Œñ1ÆÇÓ|ÿ¶‹V‚dVpgCÎ/敬྾ëó:We^Ãû1ׇϔt%÷¸¯™Üá.jÍ“¹Ã 9x³¹Ãý]­ù¯k¼Ùg7[K³³V‚9Þ1ÃðÃk ¯1¼ÆðÃk ¯ ¼ÿæ!w{7ÆÇ¿G_Ì+Å0óÔ ‰}»¡1>óJ£ÖÎf¤ï©és>zäŒ7e^)™|Ô’€³¡a?‚OÚ=²ë{jÄ:àcŒ1>ÆøãcŒi>ãás>¡ýHö±^Ìå&µíæôèʉ.™óS¹Ç5c®ÝãyoÞYæÊ/G²ÅT(¿(åǃ«Ÿß’Y!”_"é7ýù‡uÞ›ƒw ¼1å)oLycÊ[AùÑÛÄ»ÆÌñ4¨1sg#Öw6b}æ.â]wáxÐ Ô˜¹³é;›‘¾û½×¥3&1éŒIgéÆl›ÿ`³¹©†ú¼>æ¥äùż2¦ìc^»¿´Tv¨Í¿›ÙìPCVBà´WhhL™8}i©üL]`cؘÀÆ6!ð$C²=o]¹)¸˜·LQë¶+s9¦Ì2Ÿþ=ð¦çj'.æ•9ŠóRMìÅÜ+jK;¶ç#7¯¬ Üve.çXYæÓ¿'¢ô\í„À›ÎÏl¨rVàM»Ç-u6ªã5†×^cxá5†×^ÓxÇóÛ¼ãàL–Ñî¢ã@Ý×Î]™+ç|7¥vßß)Šx/æ•NÒ5,ì¬aag3ðçÜS Ó]s_ÔéÜ•¹úYß ÏÝßÕ½/C ±àžícÝY¿ÃÎúv6p7ÆÝwcÜq7ÆÝw+pýüñ®Fn袽˜—Š@ŽwÏ”ë©ÌK§èƒ]óæ¨ßu[Ûà¨wÅYC­—.ï8Þ½­§2/–>8˜§}Õ2ðßÅsð´upÆÀg œ1pÆÀÙ[p?Gÿs|ç+ú󪔯ჯë,á0mÖ°5’ ‡Îž0:{ÂèìPڟׅ| Hte^ÊL íµòÚ¼ôÒÙ HgǺòÆ”7¦¼1å)oåǃټøú'[_q¾z@ùç`v¢>Ö‹y©:—uì©î!ð’-£8ßå÷ÇÔ‰ÚU…Ài§ÂÚöTûؘÀÆ6&°1M <¸ˆc6ŸîÉJó]˜ÿø7ažëofe_Ì+I¶‹y¥¿é`üÇšñ0S>‹æ3üʦ|ÍgÙ„y®ÆÔ_J† >Ùþ¦ƒUàkÆA>ÆøãcŒ1>Æø˜æ3ú7{^•rsá:Ø4þƒMã?Ø4þƒMãŸK·(éÆÓÁ¦ñlÿÁ¦ñl?ΘtƤ3&¤°þühx÷Ÿ¸þœ¹¢îyr¸·4¿&X²«l/æG!}1?+Oy~ä¹ûaÍù,g®ô[ðÉŽ³˜òY,»/WðɦœŸôÄS®§ÎÇc|Œñ1ÆÇÓ|Fÿ–¨B¿»pêy¹˜Wz^±û ëߥtŽ@%gÇ|û@ü[¢^ûî¨3fÎ'Ý#ø,Yÿ(#tª;Äú€ï‡vÀÇc|Œñ1ÆÇS|~|ûã_¿²†*r/æ9ÿ&Íwõ¾Ö3æßþíTÇ¿¦Ì‡a´9÷ØÝãm>ª¡Ý.Û> ¸gKuwý»”æ»zcêóïߥâ¾4e>ŒD͹Ýöø³¾Ís5´ôå`»wcÜq7ÆÝwcÜq·÷ñ›è¼¸ó6Ó9ð?ú¹L;/|æµ{ú¼ób[“Žšu^Zs°Í G¢èþÎ]Ìø p‹¹úôÚ~^t/ÁióJÍØ±¡-3Û¼Àg œ1pÆÀgp£«ÜŸÇ\ÜÌü˜×|Ý®žRs¾ng¤;{$Ý3ç/Jàq¤8í“võÖ–óI;{åÜÙ+çžÙÙ6&°1 lL`ÿ»5ï˜n°5Ùê~ïNSÜØãPÃhs.â`Ï;±Så­üøû9ÞEÕa¬P~IÖ…{8Øy†mÊSÞ˜òÆ”7¦¼”$ýÝd˜„sô—s]˜ç:+C}zi®àż2Wð`+ŽÔÊ€9n‡q;G9·Î…y®.Ô§—æ >él›ù¤fþ>ÆøãcŒ1>Æø˜æ3ú·ó¹Ëæî â|õñ{ÌæÃ™K¸Ç&>=ÓÏøß¿jSæ%÷x>ÆRÒMúî1Uu?Ç»ìÉ*¯L9_ðºÂ»h¼ã[ÁùªynÙ7e^ò®çó¹#%ݤy.á]S5ÿ¯1¼ÆðÃk ¯1¼ÆðšÆ;8ç¾>_uo®{}øí¹*sí̧— zÍÁ]u*Ý¢¥~~BºeÏ-;Òe«ùûŠ z…tÙË&ΘtƤ3&¤°ö²gùæ¥6ÀÎJè;›ßçsà‡Ms…n:\a^êãë¬R¾³Iìs…~¶ïª- 1…Œ)dL! ýÄú§}e€»?7ªÜä%º«v–ܯÌÑ‹vw4åc^û‘¦ ×ç/–ìÕ ¼X²´Rœ=·wGÓJ„ÀéßxªòlL`cؘÀ¦q ’›‹yjžÞÖ”yWy ÓYßùwmäµÔªeþx]ióÒœ¥ÎƧ pÙ’NFÛš2ïêJj:<·hpò×En–1/ÍYêlx;g œ1pÆÀg œÀ®²MÇlžË÷öÎU]ÃóÊâ­ÞXŽ"1y>õo¯ÆZÊ#N«†5ŸñgÝÞý°†ÖdÁ'»x«7–IÌUOýÛkg¹–r|u>ÆøãcŒ1>Æø˜æ3ú·Ý·ù`ΞL¢nóß&ž¨ÎM™W6k\Ì{áÿc^óo©Áõs>ùËæ6ãØ“™Ú9ŸEðYÎM™Ws>Ù|Á'íßR“çc|Œñ1ÆÇc|LóýÛ¼àô'Yy1¯t^ÌwñéwNýåèømUæ­âwTàÔÙìwnI–S pÙ6@né¹Ê§þrø¦þízœÒžùãK•O oàŒ3Î8càŒ³¸ÑU¨Øéb¾_KA×ä]õ@åFý@åFóÒYîH¹´•M^´ÀÒ¼TðÓTð#NÆŽ”ë9PÁؘÀÆ6&°iG1¯÷î2Õ•y)Õß ùôM™—²alhygõÞ}^ïÝ3¯'î2]Ò•y)Õß ‘ôM™—²al´ygõÞs>?æ0ÀÇc|Œñ1ÆÇS|~üüÓ¾~e'š©ÕÅœóȵÃ\ÌKîñ|ç‡îà~²dÚÉ Ø”õ>­±¼êD#¹Þ%rÝ4oÚ»žï~½»ú·×rq'{k`3Þçx·¢|ýÆO4Ñ à5†×^cxá5†×Þß³ýùUØv®ÏÎùÆ»ž+òo'+Øþ˜—&0Ÿ¬Þ{.]jw¼ké²¾ãdÛBºlåÆÉê½tƤ3&1é¬ Ýp[<ý` ͽ˜W*Q/ægåËF¦Ï¥Ëÿ` ïÒeSEBºô–LÒ“ΘtƤ³‚tãÖ§U®4Zæ¥ùBç|æùšœ/t²™ç'+?S¥ãS)ðÒº0/Í:çC±×ä|¡“ -?Yéø™*ؘÀÆ6&°iGo\Äm»0ÿv{n.î9­ý6?rµß󒋈ç7¦H™—‹æ3þƃy˜x~A‰”yÉAEÊAÕùãcŒ1>ÆøãcšÏèßÚóåî7ÞPølÏky×̧§6˜_}Ç`^©:ª:Y¹ø9-w݇Ers¼‹Ä;þÆÊ ¼‹ç2À¯ ñOhh¨ªèl¨ªèdÕæS¼ÿEþïò€×^cxá5†×^cxMàýÙÛŸõ;Ô%ÌÁ-ÜøãŸWIKpC5¦§Šú®à\ƒKûÍe¿7Ô·x¾œ8=ž7ëàŒ3Î8càŒ³×àþ©d8÷w³VƃèŽJÎýU)ÂoA¼0¯Ô‚ž;KݳÂõ¹òzBÉxFÜQ•€P^>#/]™WŠDÏeþYå9PÞ˜òÆ”7¦¼1å­ üxkžNo_C±nŠÎC5ÓÌUoÂ|‡™{w8æ{ ²ïŒÏCËïö|Ìõ²­voNœÕ´bZƒ°‡êɘÿâzæã$ÄÜ{Æ1çŸ}å|ž¼}·/A€Kû:6ó€3Î8càŒ3Î àFW™™~÷{ï…w{ ?æÉ÷—C™_óˆ×üÊ­«d%ôóÒLà352ýLŒä¾ûY÷Çþ³»ý‚ÎïÊüš)’|ô§—®ª õ=S#Óc|Œñ1ÆÇc|LóýÛùêâù;ëan^«!9U'PÎAÌA±"ö35´ü<ßÝr–M˜×jHNÕ*’ó0'ó0¬ŒüL ؘÀÆ6&°i¿]Ķ®äõj^XÍ|1ÿö0›ò0»2¿&û¿Vµ¦þøÊ+ÀÕ¼°Dïb^yøk^¿l îÙÇWÁ=»šYq_÷eWæ×”³ä®?½ðˆ ¸'慠{ò®ª¸'彩»1îÆ¸ãnŒ»1îÆ¸[ûÅÏ·_s+?׿-“Œ]˜¿nÌß¶ æçË£àÿÌÿxùðC&p0ƒ LàП¶/ÇWØ™ÀÎv&°3] ü}Xgß—•À2»0¯ôz(“O6JàÌYû¯‹ðç‹öwÏùÿÊ£ôy1Ì·¹Þô* ¹ók"Ñö¤söò1øÛüõ1øæ/ŽÁÿxí:¸`à‚ .¸`à¢nŒupÎÀ9ç œ3pÎÀyÜeü9£seæ %$¸ï*&NO_oÊüš3–àä_»A8»Ax*”M›"¾¦߆²˜³|:2ð?ãOUé`¾‹t”* ý6×óþ'Á¤.]0é‚ILº(H7ºóºtΤs&3é¼ ÝèPçë,ZO:Ô¹tË\ºå*Ié)Ýèã9%sÞÿñ —–è#º;b¶Ç-\ë‘1¯%/Zy ×ÿ̉K«KLº`Ò“. Ò.­.3éœIçL:/H7º´DëÐÝA§=.[Œy-•ÐÈÒ1%ÝèÒæ½?Gò”¶½K†]Zóó·éßæÉÙ¡«2Û9˜÷J6xKùÍ:Ÿ`|‚ñ Æ'Ÿ`|Bós3>Îø8ããŒ3>®ùŒ`Îg9’‡Úí].ú{ôˆâ“ì>P|ôl×U™šGŸt*{g…{¹é~0?^–œ}›?€\hØÙY{/—œýÏ<Yvöθ“¡„O0>ÁøãšÏYvöLYçãŒ3>Îø8ããšÏYvöʹ“±ŠO² QðY$m^ºšìå‚Ä¿þíxÞt|—†9æ5Ë–LÃ/Ï\!ÌLJeþ–#ÍKI £<Îåæ$ T \0pÁÀ \À±¨Î8gàœsÎ8/€ƒÔñ¼¢ú.6·X2v¼¼þ„0ŸR—ùë©4/¥ß2;GCY/ojÌSéÛ•ùQI¿õw› ÛªÌK¡¬³PÖY(ëdÅ. \0pÁÀpc(«ƒsÎ8gàœsÎ àÆPÖÉR^NfòlWæG%“×ß­ ›-: e…²ž eóÑ­%CÙù<Çm˘¿nòü6½Éãæ$˜Ô¥ &]0é‚IéFw^—ΙtΤs&¤ê¼%vËvpÏcà¶Œy¥§UI—.a<3.ÍVäÒ.æ© HÃãøÅüíÜàoóÌãÞO4iÞ ÑVäòÁ”¦|0åƒ)å‡ ”w¦¼3å)ïLy/(?øã¹òi,”Ï>U å“sŽ•òê©úª¼iå³îÜÖ”;7T‘nö\|Óºú1=ÿr0¯<)›1l¨"HLº`ÒEAºÑ¡ªHÒ9“Ιt^nôˆ†*Ò…t‹çI…tÙK·z#5K¹´yÔO²Èæbž‹Ö®ÌBåǼæÒUɘ§_]à`8˜ÀÁ-ðèë;Ø™ÀÎv&°kG':xIÖ©õ±Ò•ùQ¨A§¨£B ô:gñØyq—Òü˜—ÞÇ.æ%ïÌ»FÊ»zE8˜ÀÁ-ðè]½v ìL`g»xô®^¥æg‡&+ÓGÔ`Þ5˜wmÓ­“_Ó®‡+0ߎê6=ÚÞõ> Å sy¯:RŸ^é²–ò®uƒ Là`8´À£w­ ìL`g;Ø™À®½ë´S <4…Ï^¤À£kïÚo†G{!ð¢ÖŸ^i¿±­ÁøãŒO0>Áø„æ3úö:g|œñqÆÇg|\óCÃñÜ:~Wí$ºòŽdh8^Ž. eþµ¦yO¾è¨îWðIG–ކ’\ÌKõÛ»úýÌ«·S™¿ÝR3˜Wúí>浜LO¦Žfš¼Áðà o0¼Áð†Æ;ƵŽF¢¼Îð:Ãë ¯3¼ÎðºÆ;†ÅŽ&ª¼éJ•ÎnL]Ïyô¯i¼é:Öá'ð¦£êɢ꼓èkTQϘ'ßÁ6e^™i¬ñÐX㡱ÆC.¸`à‚ .¸(€#áÉ"aœ3pÎÀ9ç œÀ1îd1nn‰ÜÚ<N¿h«?¾4PÒX˧±–OKµ|úŠJ>ýmûÛ&Ì¿O’M¥N\™¿]”<˜ï…Pæ+ZÀä¬c€ .¸`à‚ . à†PÀ9ç œ3pÎÀ9çpC(›ƒK—¾úÛ~Uõéß·2nx^›ƒËnäVಡÌÙ WOµ»z¢ñð¦_õb®ZcîneóäñTæ•kÕǼt­rÖ- ”¦|0åƒ)Lù((?“ºòΔw¦¼3å)ïåÇhèÕ½i¶Ê/–»ØåõÅæTæ•›‰P>íÎS­¾îÏ礡IG˜W¦É|ÌSCTmWŸ^J²¹³hÀVÃ:[ À \0pÁÀpc0©ƒsÎ8gàœsÎ àÆXäÏ7“¡ÝN˜WFápjlñœipÙ$›; el5¬§VÃzÜ=¹$–1÷ŒùxwËEÂ)¸E‚ÓŸ^z/j,”¥VAû¼ß:Ödéüߺ·dñ›ð1÷µr­b<51Là`8˜À¡CC]`g;Ø™ÀÎv-ðèÂç¤À£šO KóÚub.pú:Á&ø¼ø«äÒo<Ìþ®Ìe_…¹>¶´Ì§Ë¯¶¯óšwMM 8˜ÀÁ&phGïZØ™ÀÎv&°3] Îø8ããšÏ[Ýï|û|«»ä#Í¿s'žÌÌ›ö%m^iU ¶>ËŠ´Ç®Û¬H{¬ŸYÏŒy¦~æÇöS™—n µ@kÇÖŽ¸ãŒ{0îÁ¸ãŒ{¸‘°±R»3îθ;ã3î^à>FØÆR[í±“ô6µÕ éÖ3cž*¤»r7Í=}õk¨5Ø,H͈í]wˆ7a®Ÿýî®hl–@lì¥|c‘°.]0é‚ILº(H7“ºtΤs&3é¼ Ýè·w]AÞ„¹~î½»s°Î~!]Ú¥m)—¶£%gñ²ýy˜Æÿ1/-(°þH5ðƒ Là`8´À£{ÜÑÒ0 °3 ìL`×NtG˽âeÿ0B_œíϧ•¬?ŽçÅ 7MóÔwóÜ•y¥ëñc.¿Úž2ëªsçMÖ”¦|0åƒ)Lù((?úãºòΔw¦¼3å)ïåGG}ÁøãŒO0>¡ù ¾ðqÆÇg|œñqÆÇ5Ÿ!4Ìù¤_'ÚË}íÃl Ágñ\Éà“=··=n>éÈ2ïãûÙsçö‹yåéøc^šZq1ÿªeÛrÇþf¨]âc^zil‘; \0pÁÀ \À±¨Î8gàœsÎ8/€ƒÔܲçî/\ö ]€ËN­˜‚[48m^é¼à²;-µ…¾ÍwbŸ²ÄN™'[\™-Ýr”.æ•AˆÍÑËLcmÙ-Õ– øãŒO0>ÁøãšÏ˜ê|œñqÆÇg|œñqÍgŒ?ó¦ðSÖÁš0O¶î¹2ÿÚ·»åÆ >Ù2Úæèq£±žò&zb“óÔ‘m(ø˜×ògl«ûǼvËa[ÝòÁ”¦|0åƒ)åÇhPWÞ™òΔw¦¼3å½ üèçE‡wòD(/ïøP>Íb‹Ñ…òé‹Bj1zcÜ­¡ñvµR_ÌKî¼±“~KymÖ1 &p0ƒ ZàÑ9³Öd °3 ìL`×>˜õÏN·k¬ WœöÁ–·ç:Š;ﺽ«Ð;\™WÚ%>æ© ½Xe^:ª'ö,§¤«ùöÔ¦p€7Þ`xƒá †7Þ`xCã#K¯3¼Îð:Ãë ¯3¼ÎðºÆ;Ƶí¹ë.®mïêkWæ•îWÕ×^ñ𯛾Ù$v´§¤«EU±ázKFUÑ ¹úÚ‹y¯¼ÓïÓÜîžkØ ²SŸ^ ‹©qÀ'Ÿ`|‚ñ Æ'ŸÐ|ƸVçãŒ3>Îø8ããŒk>c` æ·d`ýé‘+|ÒëS>ËžkØûéSŸ^‹,óV߯½Rw¢Õwþ*õcáʽæë å¼¶Ô,ÍŸ7-›ó£P/·‰^è5WF~1—_í3c^óˆÎ˜òÁ”‚ò£C­+ïLygÊ;SÞ™ò^P~ôÇþ|ò½iÙÊg«×6ÑÙ¿æê¢…òÙÑ0Bù´;÷”;4?s{Ù̼¯Ê\þ2ö̧—–çnl«û–Úê&p0ƒ LàÐÎ9ÐK °3 ìL`×>8ÐÊíe×ýE`Óg{S„Àéû?[Œ¾µçeAwÞµ½œ®Ú•y¥Þgkêt²Lv¾)óRZœµão©v|À'Ÿ`|‚ñ Æ'ŸÐ|Fß^çãŒ3>Îø8ããŒk>chhÏ+¹îBC{9¸+óJ…‘࣒5W>¦ù¤# ›%°ÍÚUÿû­ÉȲ©Ã(wažœ•Ú”¹_oÍgò½vC!76K`c³¶Ô,€7Þ`xƒá †7Þ`xCããZ¯3¼Îð:Ãë ¯3¼ÎðºÆ;†Åé,w ›ºÍñŽ®ÛËyÈM™û5±v&ßk74Îrc³66K`cëâ·ýÝŒaæÿÅ ÊÁ¤®¼3å)ïLygÊ{Aù1ïꦖS™—Þéç-åRym^z§?˜;?Rî|ÞEëÉÎñ­£md[gý}š18’SÎ.楛I¢ 7%]-ß×S1£Ž7Þ`xƒá †7Þ`xCãS¯3¼Îð:Ãë ¯3¼ÎðºÆ;F¿y£½'í·ŽöŸ ¼éþŒ>Í÷Émo:x&úôSÒÕò}çóïr»~7ÖM˜ï¢.ôn¤öǼ4{c-ôk¡Ò“.˜tÁ¤‹‚tc4¨KçL:gÒ9“Î Òžö|ö´Ûõ×þ‘Τt‹”nô6'𓼱Fî-ÕȽ¯è¢°¯¯ªcÚh^è}ç?æ™1åÿýï7e^q¨ûŠVEî+º(ì©Fn€7Þ`xƒá †7Þ`xCãBÀë ¯3¼Îð:Ãë ¯3¼®ñákŽ7}Qxå£Éex—dôxÕ’ÅÕ¿½<÷í¹x³…Ýž—_ßÍ]˜—†1ïÓÕ?qäòg;뿘—¢±°h©°XçŒO0>ÁøãŒOh>c\«óqÆÇg|œñqÆÇ5Ÿ10Ùs`úrλ0/žóY$ŸÑ·³¶yÁ'YŒE–y‡ëO²äìbþ•^s5cóÚ‰õÓײַ~gýô@ù`ÊS>˜òÁ”‚òc4¨+ïLygÊ;SÞ™ò^P~ôóså—dÕÖ\ùE*?úygWÖO¿³~ú=ÕO¿Ïše¼';>/ærÛ–2¿l‡há¹ÌsuRÏ_sóïÃXˆûÿ©>]6ÜíŒù˜—æ(î©n~€7Þ`xƒá †7Þ`xCãS¯3¼Îð:Ãë ¯3¼ÎðºÆ;F¿é$wŒñÁøãŒO0>¡ùŒ©ÎÇg|œñqÆÇ×|Æøs<—"Ü]¥æ|ÅG~úw‰d¶ÜFHÁ'@Øú}Þ®ú“Üõx1Ͻr6e>´",©¡þnæR¬Ê¼U ÞúM&<YRß`|‚ñ Æ'Ÿ`|Bó#K3>Îø8ããŒ3>®ùŒ¾}ÎgI®K|ô3SæC/Î’ê²éïF“ŪÌ[¥Ä®ßƒ,Š)=·÷Ap×ÍJêÓ¯qXsן^ºú͹§›•R3$Žyú‘¼ ¯Ö‰ÿ}+æ=õ»taþõ ݶ\¾˜÷BAÈǼ4lî×Äa.¸`à‚ .¸(€)ç œ3pÎÀ9ç œÀ ‘pn9’wMN½¢]Á™—í»‚[48ùÇËg°»‚.ʸ1”ÙóêÞ;l/'/®Ê\¾ðÏsóLKÆ…4¯ä:6÷á`sŽÔÜ€7Þ`xƒá †7Þ`xCãÃb¯3¼Îð:Ãë ¯3¼ÎðºÆ;O{Þî}ìåÜÔU™Ë*Žámpnžj¨ºâ57›¨=ØÐŠƒ ­8üù¸zSÞq1Oý.Û¦ÌKDŸ÷3ö\mÊżÒÎõ1/µ)ÿš'ÂbO0>ÁøãŒO0>¡ùŒq­ÎÇg|œñqÆÇ×|ÆÀäÏ·º›òÁG¦&?½t«óyCoÏÕ¦>Ù^4Á'Y‚Ýצ=Ö_?¬Û ×Ëø}Uæ¥ W°Ôã] ýs/Ú¯9I=»‰ÕÁ \0pÁÀEÜ‹‚ݱêàœsÎ8gà¼n RÁnOSp‹7^^ΓØWe^ºþK=Þ£xîEàÆPÖ¦1[²€ÿbÞT•ÙvsËiÏ;¢{æÓ“1¡Ì¯;cNKÞ±êÊþ˜×îX©‘o0¼Áðà o0¼Áð†Æ;†Å:^gxáu†×^gxáuw žÓq!ïæx…w¼¢µç ï=óéÉî·Pæ×O¯þôJ¸À›¾ Î;ð¶äq{·0z˜$u¼ ÌsO}Uæ•Ñccµ){ÐÛRQµŽ7Þ`xƒá †7Þ`xCã£j¯3¼Îð:Ãë ¯3¼ÎðºÆ;FÕ9ÞeK^I·wûM†^ÇÛñ(Ê<÷ ×We^)ì<6V ³±½é÷ž¼«î/ ¹C™WF€}Ìåyó6,î7?¬D\ÛSq­.p0ƒ Là`‡xŒ,u ìL`g;صÀ£oŸÎ ÑjYóʼ2úJœvÎûsNx×i«ûï,›œw=Ôá&çÔ×vÌGôd_Ûq á¹sùZœ’®ö&v°7±:÷`܃qÆ=÷`܃q÷1Õ¹;ã3îθ;ã¸!r>Ò$²IÅCÝrr1î@}msîKOöµš€,¸/Š»4¯=è©0Þ§O­å–³]õ∗òM˜›šgôõƒ=B™«_†¥þøÚ‹\gq¸³8\ \0pÁÀ \À´Î8gàœsÎ8/€#át‹7ú㮺ßDmŠútS£Å¾bÜÊ\Kýñµ÷±ÎBYO…²óÝ: se~T O4jøc^º°Y'@º`Ò“.˜tQntçuéœIçL:gÒyAºÑ¥ïÖ›˜+ó£Rnw¢·Bº´KK ­èóú¯Ý”7™¢‹ù¦^&÷ïÄòÜ'Ýju{óÃúg‹ÉÇüû‡ÕÔkSæ_[€öd(3Tãö1/%š~ÍI(«ƒ .¸`à‚ . àÆPVç œ3pÎÀ9ç œÀ¡ÌžïE7eSœ eãnQàäÿ½wkO†2Cg\:”Y*”9%x1¯–]Ì¿Ú(ö\åÄÇÁøãŒO0>¡ùŒ©ÎÇg|œñqÆÇ×|F<ç³ôÜÐ#ÁgÙs{OŸEð¹þøMóÉ>põ@\=POkoωô»“~{ydsež+7UŸž[¾6e^ L Mãû5'—¤:¸`à‚ .¸`à¢nŒEupÎÀ9ç œ3pÎÀyܤÚóÓÕÝI¿½¼$¹2ÏUh«OOíöº‚3 .ãì'À¡lCóû.æê—q77¨o¨Ùèb^ &l@BO H8˜ÀÁ&phÇа¡yx@`g;Ø™À®]ø†æÖÍ^¤ÀÒ¼Ô§"N;QÖ¦ß÷çïæ]ÛÛ&gi.-GÊ\Žž?çæ¦F‡|O«Ú•y©®`g¬Ô€7Þ`xƒá †7Þ`xCã#K¯3¼Îð:Ãë ¯3¼ÎðºÆ;Ƶý9®ÝUÕ½ ÍåÕäH™Ë™ãC‰ÃÜÜÔàŸïYs»2/U2ì,ý6o×nÉ­ÅóMTï|ýâ¶&Ìk °ã¹-!õÇ×î,G*®Õ&p0ƒ LàБ¥.°3 ìL`g»xôíóÎþ–\x+^T÷ÎÖ„y-ñs<·ß¤þøÚ¥³ÇþòÔ³)sµ#ú6¡ÔÙ­¡£Ñb¿æ ïÚÙ#D]à`8˜À¡½kgu ìL`g»xô®%õûË“³ütµNü6¡ÔÙÙµ£Ñb}Þú“m9ÙÛïùrθ4ÿZ„˜œIÒO–í?Ÿs¥íÞœ<×Á \0pÁÀpc4¨ƒsÎ8gàœsÎ àF??·d[ENöö{¾œÙ/Í¿–Š&g’péWóùգݛ?‡²sûY{n&ɹª}SKf+è9ïŽ#wQ¸˜…Xt1¯ìÚþ˜—²8¿æÏ ð Æ'Ÿ`|‚ñ Æ'4Ÿ!0>Îø8ããŒ3>Îø¸æ3ÄŸ)ŸEòG¸>Kä¶‚Îù,’ÏàŸl|² ‚Oö’tλ{¿ÖíÜ4Ä_Ì/ÿöŸ?ÿâçKÒi/l®Ì¿!îspÿýY.Ì¿v¶\`2˜Œ&K¦:Þ`xƒá †7Þ`xƒá wŒku¼Îð:Ãë ¯3¼Îð:Ãëïçü ïØ‚?Ç»H¼cd±—×2Wæ_ËNÞå‚×4ÞEáÕ|)ª‹ªó~Õ¯¼ö]hðw»œÆëž«_o*õxΗØ÷䔚‹yå]èc^š`y²Ö~.¸`à‚ .¸(€#aœ3pÎÀ9ç œ3p^7Ƹ9¸År©GNîEoŽ®"a*õ8·ôä”.û>&ÀeSgªµÿŒ—ƒi¥y©“õ.¼lMî›2¯¬µÿc^Z*z1/]S“Þ`xƒá †7Þ`xƒá w ‹u¼Îð:Ãë ¯3¼Îð:Ãëï<ãåèkSæ]äM×»øór.AW|©tïds Þô1ر¡n¥³©Sé¢~°Â\å>îæíœíÝÏ:š2/寂r{/)óRPn© ÜP³øvûvûvûvûvûvûv„þvŒ1½¡^)ðípöípöípöípöípöípöípýí µZÍ¿‹üv £òÄ·c±Ü¤#ñí'Šhʼt¢hìDÑžçŸGʼt¢Øžk¶›§Ôyo¾­¹æy©Úõb~ýñû–<lìH°±œq]ù`ÊS>˜òÁ”‚òc$¬+ïLygÊ;SÞ™ò^P~Œ2Ûó:×vó68T!•]å† FçÊ/Rym^ [ÊÏâ[O¾ î“´øÿͺ-jïãÜÜT_ÎÝÒ¤sgox;óÇué‚ILº`ÒEAºÑ¡Ö¥s&3éœIçéF8q ¥½ÂLºEI·\¥3-]vu.ý’´§\ÚV÷œÇ»'Úa–ÀÅ\UÑÞ>DMV€ÿwRX×ä õ`ñ`ñ@»w€òÁ”¦|0壠üèP´<(ïLygÊ;SÞ Êþø@Ûo„ò²®`K ”_,ù²2Q~¹Q^š×Üù‘rçýqèømÆ ¿\gÊüz{jÙŒAgƒŽV©¹óºòÁ”¦|0åƒ)åGw^WÞ™òΔw¦¼3å½ üèÎûãýÛŒA¹ƒ%”ù5cвƒÎ2líý™Z{žÏW¿»éyïö×œŠž1ÏÌíþ‚§Ìå³PîÓ+Ã?æ¥Ñ'›–À \0pÁÀpc0©ƒsÎ8gàœsÎ àÆXt>§zîžXçÓ$8ižš”¿\À™—îV=Ñg.Ê2Óöu}¾të§Ð«¹š*uÊ.敞֫ùõçwä6c^Í ƒ®æ…žÖ¿æõPFÀ \0pÁÀpß¡Œ€sÎ8gàœsÎ à¾C™·Hpßï¸Ü"Á}»s.Ùa*À-Gn3¦—Œ„ \²ÜGC™=×úéñ WóB'èÅü{ÿ_OÆ"c±ÈÈ­ìb^©ÔýkžˆXu>ÁøãŒO0>Áø„æ3¦:g|œñqÆÇg|\óã=W«ê ŠO²HðY$m^ F®RŠO²^t_t \Í ‹5¯æ×‚ÕSGWóÜÆ ež+Bß»2ßßWG]Ì+ûrþš'““‚7Þ`xƒá †7ÞÐxǸ椄àu†×^gxáu†×5Þ1,:iâPx“«<çxWzn_Ž2Ïõ€\ðšÆ›¬„SxÓQ5HÛÕý+€H>Ú¼0­GñIG–yÛî¾&oLåâš:årqùö–òíu…‚)L¡` …Vhô®u…œ)äL!g ¹Vhôoóöç}M}Ë5uDÍe„ó0› ±‹zž››ëW¸»ÓãÆÔF6Öü5'×ué‚ILº`ÒEAºÑ'Õ¥s&3éœIçéFgµ©3×¢žeçæúõõî8´1_·‘½)JºÑ¥í/ÇŸ¹2—›ö§²“&ƒ‹y¥gì¯9qiué‚ILº`ÒEAºÑ¥Õ¥s&3éœIçéF—¶¿hçÊ\®âØoœÊNêô•ti—¶§\ÚAv\Í{å˜u°šŒƒÝ”ç:ÈÎ ¢P0…‚)Z¡ÑAdmQÈ™BÎr­Ð臲yA)”>¬2à`÷À>]–µíÉòéþœdг)/æÉ¬úôëGß³o쪻˜ëGÜ›“#[\0pÁÀ \0pQ7úã:8gàœsÎ8gà¼n ÓíÜÜøÐÞŸ³zØ¢§ŸCÔ§_ŸC4¸1Êt²öNK—O÷T(;_•þ6r sùÝ\oBÙ©ººsef'ˈž¬•çdGõ3±ê|‚ñ Æ'Ÿ`|‚ñ Íg Lu>Îø8ããŒ3>Îø¸æ3ÆŸó]ùô²+séÂ×›øsªÙ ¹J­“%OÖs¢K’ͧ¾6cÜxW[Õ@¼%Ócú1Ï5o®Ì[!¯}1ï…úçy)¯m¬Ç€ .¸`à‚ . à†XÀ9ç œ3pÎÀ9çpCà–ÈÕŒMÁ-œ4ÏK8\™·Â‹‚—­Fà²/ –ê15{ž¢}Êì¹—àæAÂìyFaÏ|zîwÙB™WîXÆZTÍI(«ƒ .¸`à‚ . àÆPVç œ3pÎÀ9ç œÀ¡ÌžÇÞß…2{î˹yUàKFB{ [(óÊuÍX·«7†2÷°éM™W^>æµhà(ãf©¾P P0…‚)L¡Ð ι®3…œ)äL!× ^Ðß=Ž{S敇¡PÚ‘8ËûÌ”Î=W$}1—ߎ›.C ‰/æµÌK°ãj]º`Ò“.˜tQnôIuéœIçL:gÒyAºÑYÍ;Ö”tc‘´nQÒÞ-©UÒ¥ïÿ‘ri ͘º˜—.ðïBŽõ>ÆúÚ.æ¥#[#sàÿš‡ÚÐð).¸`à‚ . àFwÞÐT*Î8gàœsÎ àÆ`Òи*.}¹u¨÷1Öœ(À¥ÏÝ ±WàÆP¶M éÖÜû«ye¨•‰}’ÇEàÈ|º©}¤ÌK¡l»©È>l©ˆUçŒO0>ÁøãŒOh>c`ªóqÆÇg|œñqÆÇ5Ÿ1þL×®j>£ÝÐ\([[ùézòü‘2/ÅŸífò|"²ìïŽl.Í+ƒx?æßog®«áb^º$í,²ì,¯½§"KO0>ÁøãŒO0>¡ùŒ‘¥ÎÇg|œñqÆÇ×|ÆÈ²¿»Ù¸)óÊ Þ9ŸEòÑæ¥›ÍÎ"ËÎ^Ž—¹]W楅ƒ½(ìEá` °ºtÁ¤ &]0é¢ ÝèëÒ9“ΙtΤó‚t£«<^¾(¸2/½(ìEá`/ GÊ¥õw0Æ2ŒÎËó5™ÇÕ¼¥ÌK‡åÎË–{ÊoÖùãŒO0>ÁøãšÏèœë|œñqÆÇg|œñqÍgŒýÝ”š±¦³Ãò|­ä£ÍK‡åÎË–;3ï"ËË¥—q*óV ' ¬#×R¹@à`8˜ÀÁ-ðèÛë;Ø™ÀÎv&°kGçœØÎzçœ_®WS™·Šw=™weM­¾¢çÓ‹ùW2M]Œ~š2?U]š1ÿþeìSp?Ñ»2¯¼¾zbcJºR!‘³žXÀ=÷`܃qÆ=÷`Ü£À}ˆE€»3îθ;ã3îθ{û"§ÜóÏÈ‚û¢¸/M™ŸªŒi͘è9÷åÊÝ4÷lúÍ[_SÒ•ª <ÕÐëör³4ßÕSÝ‘2Ïe\˜_½v])|7›âb^yÏø˜ëÌrÜ›“8\ \0pÁÀ \À´Î8gàœsÎ8/€#¡½ÜnÊ|W¯æGÊ<—ta~ xœüôÒK’—¿ä©†^÷çÖݵÊç'TË¥ ýí¢Jæß?¿&N¨mWæ•)MîhþŸ³ndOu#¼Áðà o0¼ÁðÃïëxáu†×^gxáu†×5Þ1xúsð¼» ÍñÊiC¢Öß®™uaþb›¸F¶]™WæB¹£á…ΚØ}Þûõú ñ²Ì_šýz®aôcž{9We¾U¢j 7 pºãFš“žkàä[æœipéè-ÓSà ¼½›…f«2ÏM¨VŸžœ…¦>½Tjèw­Ô‰+Zj«.8˜ÀÁ&p0C <††ºÀÎv&°3 ìZàÑ…·wS÷lUæ¹!é&Ì“S÷Ô§—ªõü®i?á]7´?ób®RÃëÝcÌöî»Ù7e^:éoì%iC1ÎpÁÀ \0pÁÀEÜ 6´;€sÎ8gàœó¸1Êlhs©·(p£ŸßÞE™®þøÚIc/IêIòÔ*hßÑÂŽ‹ù×7øL&­ö7?¬ÿÎx«2/…2¶ˆÚÙ"jg‹¨¸`à‚ .¸`à¢n e;ZØÀ9ç œ3pÎÀyÜÊv´°C€[ÎdÒjÊ®àLƒK‡2¶ÜÙ pO­÷ãy–Æ](;æ9ãH†²Cårõ}Çt]èõœt×{1ß+¡ì`uöl^ \0pÁÀ \À¡¬Î8gàœsÎ8/€CÙñ<Öæ.”ÍÁ-‘ e‡ÊæêûŽé‚^ Nú^ e+UOMŠðþÜ yWß7ß|½µÜ®yïªÑ$ʦ›¯ãHNe»˜Ë¥n©{-”±]ó\0pÁÀ \0pQ7†²:8gàœsÎ8gà¼n eý¹¯ù®Ún¾k^‚vý pKK†²éÌ Nþñzbêß^ e©]ó~>/u»sçç»b×a ÃżW N–`ÁøãŒO0>¡ùŒ©ÎÇg|œñqÆÇ×|Æøs>ï>¼óÁç»jïau‚à“®Â8YVðd]¿l,GÌÛô÷ä%)V5|}É4A]Ì+Eóä‰/”ù×X›5—.¼˜…ta°±ÁÆrîÁ¸ãŒ{0îÁ¸ãîC$ÜqwÆÝwgÜqwÆÝ ܇ó±{ò†'¸/žë§ܳ(‚»¾ †2ÿ𮵿r‚{6×l,G¤Ærļ×ü'yA¼˜§~ÖÖ”yni˜ óÒ»[*! 6W(Lù`ÊS>˜òQP~ euå)ïLygÊ;SÞ ÊÁd®ü’¼® åe0±¦Ìs›î\˜—ž®ÂPF¤FS„?'Òoª0.æ©¶}Uæ•éó¯cÖÖ“×*N¤¯óÉ/ã9ߩـO0>ÁøãŒO0>¡ùŒ¡¡ÎÇg|œñqÆÇ×|ÆâÏïM7¥‚Ì÷í«2¯ÌHŸóY$m.ߛ֌ù$þ$"KLïÿ[ö¢0mþþaÝôCMGIE\Ì]$/îŠ".æòß3æ“-ŒÏC.敇¨_óD`ªã †7Þ`xƒá †7ÞÐxǸVÇë ¯3¼Îð:Ãë ¯3¼®ñŽaq:BãCÃ|¢ƒÄ;^ŒBÍ6J•aLñ.¯üãu–­gÌ'+XŸ‡ ¼é¨Ú¦¿K_“Qµ=×ðîãµ+s5Œlœ‚=77ÕKsýÁ¶½)óÊpû¹«仡GóRPn,(§Æ\€oG°oG°oG°oG°oG°oG°oG°oGèoÇÓëßgßgßgßgßgßgßgß×ߎñHЦGùíãZ{n2¸œ®ßÓߎE};Æ#ASÏs³oÇrýv˜þvdÇé‹oGvF”øv¤O(æ³WS¿]™_Oú½åJ6cSúe¾ìzUæ[墽=ÿ¬ãÞœ<èÕ•¦|0åƒ)Lù((?FºòΔw¦¼3å)ïåÇ(30"•ýüTùE*?ºÊMÝ/—ùêöU™o•›ãö&âÞ<áÎż‚3ù ·?Ù¼;sçlBH° !óZ$›À \0pÁÀpc0©ƒsÎ8gàœsÎ àÆX$&„œÉ·Áýq¬íÝèv.‹Ø„`B¸tmJjBHˆyÙŽãÕb¿ßãÛÜüûçÉÚ”iÛûïÜÓ\mÊó¼‚ÛÚ”ƒeTĪó Æ'Ÿ`|‚ñ Æ'4Ÿ10Õù8ããŒ3>Îø8ããšÏÄXl¥üñneoÂü;JE²6eÊg±l©ûóXÛÚ”ƒå¼ús—æsîªeÉÌžŠŽfOEŸï+ˆdmJGãÚ/æ•…\ÁvpÁÀ \0pÁÀEÜ‹êàœsÎ8gàœó¸1Hõç†é;?ßU×Ö’™=%ÀegOÍÁ-œþôÊØz.ïK ìˆyCûÏ‘Ì÷ïzSÆ„ÝÛ.ÌsÉ Û”y)]x²×6ï#Ró>Þ`xƒá †7Þ`xƒá w ‹u¼Îð:Ãë ¯3¼Îð:Ãëï<çx—#™a<ßµ¯)·ÓF\˜ç”¦þíµåÉËØ°’¶>/°¸ m}7ÆgØ8s1? qíc^Úîø1/ŵ_óç¸&p0ƒ LàБìL`g;Ø™À®|û\àE <8(!°ÞçåÊü(xW!p¶bMœö®öÜ4ySrv1ÿú &G¿Ì“Ëâve^)9»˜—œ3›!”¦|0åƒ)Lù((?úãºòΔw¦¼3å)ïåGGmÏ-À7%gsåKNOÊë͉»2¯”œ åÓ~>5C¢ùó^aùÍÜ<™œUŸ® ·”yå9äb~jÆ~͉;¯+Lù`ÊS>˜òQP~tçuå)ïLygÊ;SÞ ÊîÜŸ—a ›ææÉSæòÙ{K™W^„òÙ²+¡üèÎãùæxçPç½Á_YÁ5cž;©Ø®Ì+O-˜;æÎëÊS>˜òÁ”¦|”Ýy]ygÊ;SÞ™òΔ÷‚ò£;ç4ÊC+¿x®!D(/Oç¶+óJŽ[(Ÿvç‘rçÓ®ß8“sxZ{óÄôß}væ¦ÌïzöëÙÿ5'þ¸.]0é‚ILº(H7:ÔºtΤs&3é¼ Ýè§ØZºÑ+´W†WéLK·x®º±Vh!ÝèÒæí›=û:·½{Ûh]™W–Ô´—Ûé7õé¦&Þ:Ô=îm)¿YçŒO0>ÁøãŒOh>£s®óqÆÇg|œñqÆÇ5Ÿ1Ì›¤{öiq{÷´Øº2¯,©|ä‘zSŸnjâæmüÙØËäþ|¼{™ÜÕãxîerW»)RÕ”íe+è¹)óRê„5_·»VÐD`ÚS©Ž7Þ`xƒá †7Þ`xCããZ¯3¼Îð:Ãë ¯3¼ÎðºÆ;†Åý9Ut÷»«ÂšÜCî®Ȥª)ÛËvïSýÛk™&ÖîÝîÚ½Qµ¾x~0/EÕãÍñÇ,”y),,,håL;X¬.¸`à‚ .¸(€#aœ3pÎÀ9ç œ3p^7Ƹãùuûîêw°w¼º»]Á™—R RÚ—#À¡lÞ™]Cú1¯“΂IgÁ„õné‚ILº`ÒEAºÑ×¥s&3éœIçéF‡:—.»ORH—vi¹´Î\Zªƒ¸¬×éœ'}·äéü|®„ÛRæ¥òÍ“ÕûœÌ#ž¬ ª®|0åƒ)Lù((?:Ô“uGÕ•w¦¼3å)ïåG|²¶©sþ„±%¸çsõç–2/•ož¬Þç̸óm~7¿&ìÞ<oëã˜þ»jüMl¾ÞsÜ‹ye%ãǼtÀÝØ¦{ |0åƒ)Lù`ÊGAùÁå)ïLygÊ;SÞ Êî|®ü"•\šP^o‚RæßûÖ÷Üé\(ŸB'”Ϻó-µo}»§“§ómÞ½ö“Uw1—oZ7£ê>æ_ù>O®QÜ î7Öjû1/ßX§.àŒ{0îÁ¸ãŒ{0îQà>†²:wgÜqwÆÝwgÜq÷÷1ŠM÷É{‘à¾$çì îÙ9{Sî‹æ.?½t­ÚX“³àžã©é-Ñ/zSXv1ÿzëÉK£mÈÛ¼Ý4¶ä¥ÎÑ«ÅǼT¶y*ÜÖùãŒO0>ÁøãšÏë|œñqÆÇg|œñqÍg _‰®ì›Ú¬9ŸEò}°£…Âs>‹ä£?½òÈ#ød‹«¶xžòwAŒwÅü±+óRºp¾©»]ô¦þøÒsú삨—f‹T`ªã †7Þ`xƒá †7ÞÐxǸVÇë ¯3¼Îð:Ãë ¯3¼®ñŽa1žW|ÜÝêâ]'Oìʼ”]é­NâÕæ•Ò‰-Ø­.P#ÐÖžˆ‡“äܼ˜»15ö ƺætÁ¤ &]0é¢ Ý êÒ9“ΙtΤó‚t£§mÏuÃÕbn^sV]{IJuÍoó®ß¯¹w1ÏKÇCÄÜÁøãŒO0>¡ùŒÎ¹ÎÇg|œñqÆÇ×|Æ0ïš—|F'ú¼Z|4Eʼ˜R]óo0¼Áðà o0¼Áð†Æ;Ƶ:^gxáu†×^gxáuw ‹‰®ù›qbï¢îU‡+s˜Ö3óé¹®ùa˜™À›‹ûóµ,R楨:ïáý*­¼‹ªb}sävmÇóysË|ºNΦþøZ\Kí/8˜ÀÁ&phÇÈRØ™ÀÎv&°3] <úöy·¸xtPbƒxäv OÞYŽçê¯y×þ.Õ›2— ®îŽýýÝ»e^*Œî¨ëqc}à@ù`ÊS>˜òÁ”‚ò£?®+ïLygÊ;SÞ™ò^P~tÔýÝëDHs¹ííîÛßdŒPæ¥òÜŽº·Tûv>¯×ºË£œoŽ?Öš2?^–Í›ßU=™C:Y‰í±ÞR{¬Ÿ`|‚ñ Æ'Ÿ`|BóCC3>Îø8ããŒ3>®ùŒä|^bw—Š8_ô¯|LóI·‡œód'Ó0'KðUÐûІÍï«*ÄK=›ÌuIÇ‘ùôR!ÑÎúéwÖO”¦|0åƒ)Lù((?D ¼3å)ïLygÊ{AùÁÏÏ•O~Ÿ+¿HåG-”Ï_ßWTµ³~ú=ÕO¿Ï÷ðîkÒÛ›×® Wæòµë.ˆöÜ–+¢Úm¾ì·åîóZ4` ñ\0pÁÀ \0pQ7“:8gàœsÎ8gà¼nŒEó–t nôÇöêåø Î4¸Å’¡Lt´·\=ÖÜ"ÁIóZ(Kõ”ïŽÆªïóžËŸ=·mäcž«¼ØVeÞ^Öª楋£Ù.;[Û À \0pÁÀpc(s4V€sÎ8gàœó¸1”9«.À-{n÷‡'«˜¶U™Ë•X{æ¯ÝÊGÙS;Ç÷YŸäÛž ej.æçËÚúoó±ÔpQ¿8a~TBY°[[YÀ \0pÁÀpc(«ƒsÎ8gàœsÎ àÆP6m)×àF¨æK€Ë¶¹ÌÁ-œ6?*¡,Ø­,µo}oÏ»îBYS–L7ËÇ\ÿú³6e®^Rïª~/敺´‹ùY(dø˜— ~ͯŽ7Þ`xƒá †7Þ`xCãÃb¯3¼Îð:Ãë ¯3¼ÎðºÆ;Ïö¼ æ.x6µ3fÉt³¼ºŒBýñ²Œâ®ÞZàÍ–ñ ¼Ù* 7]…±½+]öníêf¹˜—âÚ†ê­ÍÉ­.]0é‚ILº(H7FƒºtΤs&3é¼ Ý謶wÏÃÞ­}C½%Bº´¯ÛPɲntiûsÉåM‹Ü¾³J„·ÛªÕ§HB¬øýñó¶jO}úØ‚•»(°®ù=Õ5ðà o0¼Áðà oh¼ch¨ãu†×^gxáu†×^×xÇðµ?×[ß4'î;«}x»k^}ú÷u"Äß1ö>ïš÷ԧ훹‹ëšß=Çw¡Aô«M«mSær êúý‹››§~—>ÖT$gŸ™{­(‚íšà‚ .¸`à‚‹¸1ÖÁ9ç œ3pÎÀ9çpcŒKL¸sÔbz€Ú¬Üä§ËáÄëwôš›§bœ5‰Uõgæß^+ŠHíšß;šì1¿þ~¶äê·ùøû¹è¦Ì¯'É=’76áàc^ el \0pÁÀ \À¡¬£iüœ3pÎÀ9ç œÀ¡¬£9ûspË–Üž&À- ÜÒ”ùõV&ÁéO/å:; e©ñ û¼½ü«/ífËÌ~²hp¢=/;°§$…‚)L¡` …VhtÎu…œ)äL!g ¹Vhô‚ó!J¡q]ÈζÛï'Zر³6ýcE‡åcUe‹©àc¾¼­¹Óîżâß.æÿö1/ù·_ógÿøãŒO0>ÁøãšÏà]g|œñqÆÇg|\ó|ûœOú„;ç³X²nwÎg‘|´y%²>ÙÈ"ø¤#ˬ öÇÖ.¢êÏ!Ì“·:Wæ_‹²‘ÅžKÝ{ʼR‘û1¯EKE–:Ÿ`|‚ñ Æ'Ÿ`|Bó#K3>Îø8ããŒ3>®ùŒ‘eÚæ¯ù,‡0O&?\™->ÉF{îé)óJQ«à“Ž,¬ÿbÞÄ/ã®ëñbÞE Ê]ÿÿáª$}þrÖÔ_Úx°þÿƒí”?R;åÖæðà o0¼ÁðÃïר0€×^gxáu†×^×xǰÈF¼Ù>Kwi¹‰ﲉ×ñ¦þøÒ6̃M8î&$¢ê|çò×ħ»¨óߥ©5®Ì+ÞŽxYØ©Ìs#BÎU™ï•¨,ªF*ªÖñà o0¼Áðà oh¼cT­ãu†×^gxáu†×^×xǨ:Ç»X2ªÎñ. ïÍ”xuY¶2Ï:We¾W¢j°¨:_M~&ç¦~ÌsË?ö¦Ì+c°Æn‹ Ø9ª&ÊS>˜òÁ”¦|”cQ]ygÊ;SÞ™òΔ÷‚òc˜˜÷éŸÉÑ£By¹ðfoʼ2[(ŸvÔ M©Êî|ÞÙÜ’[ .æ[ê £Ìs¿ [•yevèÁÚñÖŽ”¦|0åƒ)Lù((?ºóºòΔw¦¼3å)ïåGw>Ð’[ „òÙvH¡¼Œ¶*óÊøÍƒÍ8R³ŽÄï;w¾?ªØSæ¥ã5kÇ?Ríø@¡` S(˜B¡Ýc]!g 9SÈ™B®ÝXb•úÛŸgšì)óÒ±’õUÇók×Mÿq°çÞƒy˜ƒ]àYg3.˜tÁ¤ &]¤}R]:gÒ9“Ιt^ntVÇóûåM3Àq°'Àƒ9«ƒÝSýµGG;c/æêËõý€ß•¹ürµÌ§×jþ;;sõ”ãëhé+8˜ÀÁ&phG÷ØÑÖV °3 ìL`×N´£µ«BàÅTHWæÒ‰¶Ì§×Êæ;;0&Úõî¼ë9ŸþÑsÓ .æ¹—Ø&ÌÇŽëiyT¬]™—”çã¹ÃSÒÕ|{ª_à †7Þ`xƒá †7ÞÐxÇÈRÇë ¯3¼Îð:Ãë ¯3¼®ñŽq-Ñ)|×Îù„Ÿž›— ðê|næãT…i>÷Š×4ÞôÍæ|¼ÙxJºRTíëóïr('æ_»3÷n÷1Ï(µU™W’@-3ÿ˜—ª{ªÍð Æ'Ÿ`|‚ñ Æ'4Ÿ!®>Îø8ããŒ3>Îø¸æ3¦9ŸEò¦ÂuÑæ|æ^ Y¡×Ve^É™u¶>]ðIG{—j&z÷ç=Ë·¾Ý˜og«É;[M¤ &]0é‚IéF\—ΙtΤs&¤]¥½KðSžûó~í[geÌY±Ù=µ »':ô?/s:2æúAüfðÃÅü«HôH:TÖ ÛYƒlO5È>ÁøãŒO0>Áø„æ3:ç:g|œñqÆÇg|\ó#@¢EõΉúó6³#c®ËYn?Ìù,’þôRüa=¦]t©%7z¼›y>žµYig]ž-œîlá4P>˜òÁ”¦|0壠ü êÊ;SÞ™òΔw¦¼”ý¼hšLfë…òKö¢Àš&;k[ìlgsOílî ⹘·T… óZZœ57ö»F¯ÄI?µ5Là`8˜À¡sCÃh€ÀÎv&°3] <úà†ÆÁu% óZf™u$ö»ŽÄ„w÷]Y²9åb>£-O;µ¿Íki˜mz<’›ƒ;ÛÜ74óc^ªú5Oøö:Þ`xƒá †7Þ`xƒá wŒ,u¼Îð:Ãë ¯3¼Îð:Ãëï׿­™–ìišã]$^i^Ë!Mñ.GrKtg[¢û††‡ ¼é¨º?W2ܬîû»ÚïÖ•yî:®>]õÝ3浸–ê8˜ÀÁ&phÇÈRØ™ÀÎv&°3] <úöý¹˜æf‰±XÞYZWæ¹¼‘út=WzϘ׼ëÖÉ\Ì+C$/æ»úe™O‹Ñ–Ì2›‹ùõÐkÒ97§ž„s>RÎù@ëdŸ`|‚ñ Æ'ŸÐ|Fß~ u2€3>Îø8ããŒk>ch8Ð:Á';‡qÎg‘|ä§ÅœKf™ÍœÏ"ùhó³Yf-…?~]¥s{nŸ­ªüùïŸÌGu´æcîê—q×u|1÷ÊÓ1[Ë ”¦|0åƒ)Lù((?FƒºòΔw¦¼3å)ïåG??m`ÖʾnºW+/ÍKÛY„òÙf¡|úé8µÙ¶Ÿ, s¾»Äcu>浓þ9?©dƒÉÉ ‰N N N–Þ©ƒ .¸`à‚‹¸1˜œ,mTç œ3pÎÀ9çpc,:Y:ê|—Ž péKÃ9¿4d#áɪ NÊÎL(;ßöFJsùÒwdÌõkO™Wª ~ÍA0Ò“.˜tÁ¤‹‚tƒ;Ò9“ΙtΤó‚tƒC=ß6Ëš2—o·GÆ\;Ô=e^©IÒ.m¾{tÛs…öóÊ6¦ù÷‘ æsHÌNe.çÜ9TÖRû1Ÿt°<ŸÎOÖR À \0pÁÀp£;¯ƒsÎ8gàœsÎ àÆ`2_¬À]\v7’·ÌÁ-Wp¦Áe7vœ¬™Y€ËžÎÏT3ó9oÆÜ“ï§X7šœß|1?*‘u#ÿš“`R—.˜tÁ¤ &]¤Ýy]:gÒ9“Ιt^nt¨óîÜ=™zÒ-ÉùÍBº´?fíµBºÑ¥Åô¬pzÒ¥‰ŽÂM|¹öU˜—–]Ì++é>楗ԋy%w~²&\.¸`à‚ .¸(€Ýyœ3pÎÀ9ç œ3p^7“i °7úcÑ,À-û*ÌK”¸ôé<Ð3°—>§:ˆOÖA|1ß*§ó¦zà—LÛÇüz9Þ×5·Šàb^y>›&SÒ•zÎTÿòÉú—Þ`xƒá †7Þ`xCãÃ"ëžxáu†×^gxáuw ž¬w[àMßÄš“±dzܦxWþñ¥‡ç3±Œ6%]© ãÜž÷›´›¸¶= ›wææ™dòòs6e¾JmOÖú}²-µ@ù`ÊS>˜òÁ”‚òc,ª+ïLygÊ;SÞ™ò^P~ Ûó²Ÿv㨷Çqzc'ÛÜ<õ²œM™o…RÛ“õ2Ÿ©-µçŽšêÎY?âÿÍßÿéyÌÒǼ4féb^Y¸v²–å3Õ² &p0ƒ LàÐÎyGmm@`g;Ø™À®}ðŽúÒ¦/RàqÌ’8]Ò´£…k'kY>ç-—-ûšr¼©‹þÛ}#Ìû˺èoó1¼d:.æêëkÆ\_bSÒÕ|{ªãà †7Þ`xƒá †7ÞÐxÇÈRÇë ¯3¼Îð:Ãë ¯3¼®ñŽqmÞoݲï7ǫއ+^Óx³½s¼‹Ä«ÍU Ê׌¹NA¥¤«EÕùŠ]O/<_®ØU™Ë!5gæÓk/3Mú>Y»6P>˜òÁ”¦|0壠ü‹êÊ;SÞ™òΔw¦¼”ÃÄ|ß´'§ñ/÷MǪÌåĦ3óéµ§†Ž&}Ÿ©ví3јòÁ”¦|”Ýy]ygÊ;SÞ™òΔ÷‚ò£;Ot<ßå“ÎweWþ“-:>OV|2wžiY>ÖõÝú@ëʼ´º˜5­[*iu5/Ì¿š$.敤Õ_óG§OøãŒO0>ÁøãšÏwh |œñqÆÇg|œñqÍç;€>zǧue^ÈûÌù,š6/Œ×V|’¯)ŠO2ïs¬F z¯æ™Æ§å§+ó\I úôñd– LÆ“±À„:Ç ¸`à‚ .¸`à¢nŒEFŠp 8gàœsÎ8/€ƒ”‘òZN–×.]™çÊkÕ§W©\Œ3ãŒÅ8K…²yïuÞím(óé ¢¯©Uó\ú໊öj^¨Úºš÷÷…óJÊì¯9 eupÁÀ \0pÁÀEÜÊêàœsÎ8gàœó¸1”Í{ö%¸ÑO7jkpÒ<—ïû.Và’ù>.ùL¯À%ó} ÜÊ‚¼Æ_Í7QÝþ½2Æ•yWÅñºÍòbþ•îØŽä­ ­í¾˜WÚ,¯æ¥ta¤^'‚7Þ`xƒá †7ÞÐxǰ¤®€àu†×^gxáu†×5Þ1x)^Px—Pë¦\™wa~Óf9Ç»h¼ò¯Ô>(¼Éö…7ël¤/çj.·íôŒyr¢¶+ó¯É~ÙG¸Ærti^ÌkQµ¥¢j#]Ao0¼Áðà o0¼¡ñŽQµ‘ž$‚×^gxáu†×^×xǨÚHG”À»H¼Ò<95ß•ù×ôÎì bcÙÕFšZÞtT7rûžŒªÛ»Ó®7ež[oÂ<—C:e^º«n,íº±´k\0pÁÀ \0pQ7FÂ:8gàœsÎ8gà¼nŒqóÉ Ü訷w7GoÊ<·¨8„y.k{g\ú渱´ë– eûË2±M˜×ÞðvRö~1¯““ºtÁ¤ &]0é¢ ÝèÎëÒ9“ΙtΤó‚t£CÝ_Ö *óÚKÒN*Ç•ti—¶§\ÚÁ*Ç—Á^}z-ç5ï·î-éPæP²æ¯9q¨+)¯ƒ .¸`à‚‹¸Ñ¬Ö¼Î8gàœsÎ àÆ`r°"ôãåñÚ„y-5Ÿ] ÁéO/…²ƒl†QàÆP6oþ9’‰¦þnzí÷…«ù×W»%CYŸ%€ýìÉP†Ò_ÍK¡¬³PV \0pÁÀ \À¡¬Î8gàœsÎ8/€CÙÜr$MýÝ$èï5 ÜÒ’¡lnÑàä_Y£ À¥CYO…²ó¹Bh˜œ(Ì¿ r+ˆ¯æ¹ !eþuFÜÖd(;Yžêd±¨®|0åƒ)Lù`ÊGAù1˜Ô•w¦¼3å)ïLy/(?Fƒó¹`m#*Ì¿êÒrû“•òº`M™]l¤òÒ¼–dKg°õù«}ãÒl}þj÷ŒyæEíÇÖPæ•W {^ ~w31´ž(Lù`ÊS>˜òQP~pç@ygÊ;SÞ™òΔ÷‚òƒ;Ÿ+¿Hå—6W~‘ÊKóÔ3ðUyÓÊgŸ\„òÙýP~tçóÝÞ=·‚øjžºö~O»šç†„0¿þb=suÂó£âÎíy{`¤Ì+u¿托QÇ o0¼Áðà o0¼¡ñŽ©Ž×^gxáu†×^gx]ã£ßt ƒÆ;F{—Úúž5§ðêWšæ×©ñÊ?ÞŽJô³ç ¡‘2¯Ô ›£žÖ‹yjÚî÷Vœ‹y®ìÐ7e^º$9ô1¯…EO…EGM©€O0>ÁøãŒOh>c\sÔU ø8ããŒ3>Îø¸æ3&Gm¡‚œiý½ÒGñ‘Õ¹®þøÚµÌÑ|Á'Yæ ¹?ÉvsµJðî5Å Wµ˜+‰dd Tãfc,Xö®.¸`à‚ .¸(€cQœ3pÎÀ9ç œ3p^7©9¸%9Ãnn‘à´yeNëÜ"ÁióJ›zIàÆP–ØÐ~—½kê,·¨²Ð¹yîg«2/]’]ÊíޜĢºòÁ”¦|0åƒ)åÇ`RWÞ™òΔw¦¼3å½ ü ÚsÅó]:ª©›É¢j™çæ¹+‹­Ê¼teI4Í·{ó„;ŸwêžÉÞø‹yËÜÙ{Sæ*| 6Uf9c£Áö˜‹¾›8ó1×õ—Ò‘hP \0pÁÀ \ÀÁ¤Î8gàœsÎ8/€cѼ7þLöÆ p2}Ö›2W/+·¡lS…Íó¢ˆ1”mï:wó_¸ô»Nª7Þv´(ÂöwϪãóÍ>߉˜\ñ1ÿ.ßÌEìhÌ‹±Î|cù\0pÁÀ \0pQ7†²-ŠàœsÎ8gà¼n e;Z!ÀÉ…ñ%h.»(bnÙ²% ;óbl&‚¥f"Ø1­Z“s@/æÃQ0W®-:´“ÓµmÞ¡íÉGóÒ­ì`·²ƒ2©€WÇ o0¼Áðà o0¼¡ñŽa±Ž×^gxáu†×^gx]ãƒçt ƒÆ;F€C]÷rÕíb CrºöïâÉ-Koúx°{àÁª0ús}Òͤ!ëÏ©“»Ç£Îê :»¢± @º`Ò“.˜tQnŒuéœIçL:gÒyAºÑÓö炵›y7BºôûKg¯ñ]Rmúv²œ×ùî>>ßœ¬°ìœÎ¿Ø×äEá|¼ßm”3Öåo¬Ë€ .¸`à‚ . àFw~²œWœ3pÎÀ9ç œÀÁäd9¯ó]Îk|¾9YaÙtÆ€§ÍUÎën£œ±–Qàóví¯®ßa/ÆÜ\—¹Ü¤|Eý/¾¢´‘¯™˜ ¦P0…‚)Z¡Á9…œ)äL!g ¹Vhð‚s…¥ÐrQÈ´BÙû¿P(Û…!ÊÞÿ]ì5Oö÷]̇ûZê¸ê†ö[¹1ÅúÖ=Õ·&p0ƒ LàÐþ­.°3 ìL`g»xt6?$&[äæ/–Ì®:Ûaïl‡½³îi÷髇'g’ø«îÏ Wæ=UצÌsum¾*syp82ÿvýê‘’®4;×e2÷`܃qÆ=÷`܃q÷1Õ¹;ã3îθ;ã¸!rÚE®¹Qæ]ù•»iîº V™çÊ`}Uæòúsdþíúù3%]ið¯à>†ñx·bØvx1¯<’:kwÖ,î¬YHLº`Ò“. ÒÁ¤.3éœIçL:/H7úãx·dع'¤Ë>’:kYvֲ쩖eŸ7~5îŽ×í¹ãf»¹Z=WhÒe^z¾éÏ×Þ”tµ¢áž x¥£:Úêðà o0¼Áð†Æ;†ÅÎ’V-xáu†×^gx]ãƒgg©­ŽvŠ¼Ù¡ˆ¯¬»à57}ìÏ©­”tµrmÖ9î'Úü1ÏmGÝve^ ‹'Úü1¯…Å3Yƒ8àŒO0>ÁøãšÏ×X8àãŒ3>Îø8ããšÏ˜X»·Ÿh±à#wo»2/E–í |²‘%V´ìêbž:ñ Èó®ŽlkæÓK[ƒ­ª- ¶ª€ .¸`à‚ . à†XÀ9ç œ3pÎÀ9çpCà²Ë®8y{J¿¸%¹E€Ë.tŒŸXÑvn eö®-a(R»˜WžÁ>æ¹_ƹ*óJ‘Z°ÁDjààŒO0>ÁøãŒOh>c`ªóqÆÇg|œñqÆÇ5Ÿ1þػޡ¡²Lðɾ] >2€œ«2¯T–›–lZBøó‘íî¤ï/Û”y.}°¯Ê¼Un9ŽšÎø8ããŒ3>Îø¸æ3F¾ÙÜÏýe_Ž2Ï¥ßöU™·ÊÕÄQO¬à“Ž,bóurÊÙÅ<• ¯<¡îüK¦/'í¹˜WÖ`}Ìkw–HE–:Ÿ`|‚ñ Æ'Ÿ`|Bó#K3>Îø8ããŒ3>®ùŒ‘E,ˆOŽh|²Í4‚O¶™fÎ'½~CðIG–`w–†JBtbGns|4õûÉ]yÚË–+ó¡à'˜ LífâS"0¥æ(¼Áðà o0¼ÁðÃï×*Xxáu†×^gxáuw ‹ Õ;¼‹Â«Í‡à™»¯µ—QÕ•ùP®—‹ªEÕv3–-UÙ…ØXTݞ뎌y¦@ößr‰ç®îÛ7¦…Å-Ù¸À'Ÿ`|‚ñ Æ'4Ÿ1®±©€3>Îø8ããŒk>c`bßt`ÚžëøŽŒyªBüŸ‡çá·oL‹,;˾\Ï=LEø˜×Jáöç¹–2/¥òöThØY*¯.p0ƒ Làо}g¹¸ºÀÎv&°3] <:ç%Ó^.‚æ0Óï,ûó8eK™—²aó~oKNXˆãecÛªÌsÓ˜\˜]ˆÛõÆÔ2|-•è÷NIWóí©ío0¼Áðà o0¼Áð†Æ;F–:^gxáu†×^gxáuwŒkó™–œé ðê¶ÔU™ç&®¹0ÿJgI¼ò¯¥³3RÒÕ¢*öp1OÍ8›‡Ø¸…`+Þ£³Â¶Ô¸…`ã€ÀÁ&p0C wuléÊ\޼{,8™{d Ûƒ-lÒ“.˜tÁ¤‹‚t£G¬KçL:gÒ9“Î Ò¾nÞÅ®¤[¬+s9èò.û}2gÅÖ†Gjmx›¯|Ž=wâk¬aûb^qió’Kk¬ßHLº`Ò“. Ò . HçL:gÒ9“Î Ò .m.Ý¢¤Ï_µ é².MH—ui-ÕuÜìùËu³¯êbžÛx#Íw­{Æü»RkË%¦/æ×wï¶æê,›¡Ñ¿óÉÆ›çÄô¯9ñÇuîÁ¸ãŒ{0îÁ¸ãîc0©swÆÝwgÜqwÆÝw/p#¡=G›ÕW‚»^}%Íwuµèóï’Í-—ãžs_$wý镹ł{6Ç-¸a|Úù]vÆýåSWæ]Õµ™O×h‹Ÿõ¦Ì//TÍ“ís9;!%ÝëÙÿ3'a¼Î=÷`܃qÆ=÷`Ü£À} ãuîθ;ã3îθ;ãîîcŸ·ºKîc0ñ—oÍ]™wU{f>ý;Œ+îòß~ ãš»þt9ƒ%%ݤ>6q÷Tw©ža@‹—3Œ¤ù™ªQü÷úŽ#™Þ –Þ –Þ ‡ëà‚ .¸`à‚‹¸1ÖÁ9ç œ3pÎÀ9çpc4ˆw©Ýaš¿§Ç‰Ió3UueÂü{aΑL,K,K,G*”‰UêŠÏÏ®Ì+ã,ÛË]è]šWÆY¶†ÆY~ÌK5Ç-ÕøãŒO0>ÁøãšÏ˜ê|œñqÆÇg|œñqÍgŒ?s>‹â³ìʼ2ÎRð‘ã,»4¯Œ³|²Í0‚O¶°¬Í›<¿²w'ýMUÍ/™.ô¶=O ·Œù8´/wIÚØ%iCU¿-ÕÄøãŒO0>ÁøãšÏYê|œñqÆÇg|œñqÍgŒ,s>KäÆYÎù,’6ï©$2‡^æn6»Ùl¨d¹íÏÉ€»’Œm“¹˜—"Ë>ýeœ–|ÛQ›eÛYúmgé·:¸`à‚ .¸`à¢nŒEupÎÀ9ç œ3pÎÀyܤöçôÛ]UÃŽ¶Épé µOƒ”§Í+M\:ý¶§BÙ¼çØ›øeœ»2?*¥êÇóÒ¾5c^ & &ué‚ILº`ÒEAºÑ×¥s&3éœIçéF‡:ï"WÒ-ç®ÌJ©úñ¼Åq͘×\Ú‘ri=ŽwæÒX¿uëÌ¥uæÒ:{žîÌ¥±Nj ]¤]ZgĹ4Ö# ¤ó‚t£Kë쉶3—ƺŸ[g.­§\[Œ~1/ußœh±ÓÇæ¥Õ#ókJÓ#7uåc®Ç>(n9€{0îÁ¸ãŒ{0îÁ¸Gû‡wgÜqwÆÝwgÜq÷÷!@O¹/šûe÷ÅszÊ}Ñܵ¹ºžÞõÒîÙ±Sî‹æ.?]OC~P>Æíy”Ó]0™÷š_+în·›±@:ï5ß¶ÜÐã‹ùQ(@þ˜×â°¡äÍRѺŽ7Þ`xƒá †7Þ`xCãƒr¯3¼Îð:Ãë ¯3¼ÎðºÆ;Æ^{wæ!$^i^‹~ó¯þô£P=-𦃧¡êéM,3·dTu´sów}Ñ•ye‚Þæè osô†·±Q\0pÁÀ \0pQ7FÂ:8gàœsÎ8gà¼nŒqsp‹%cœ£=•œlñ‰®Ì+³ ¸lW€Ë¾žn©i Û¼w{OnŹ˜—B›W°±y›W¤ &]0é‚IéFw^—ΙtΤs&¤ê¼gOnJ™K—w¨¬k~c]ó[ªk~K,ÎÞ®º¯›0W_®Û¤U›7÷f“VlñüǼ´©kc]ó[ªkð Æ'Ÿ`|‚ñ Æ'4ŸÑ9×ù8ããŒ3>Îø8ããšÏ›ã·«süð1Ég‘|ƼO›7Çgó>lw»à“Îû°®ùmC½ÛönUPëʼÒ۸ͻ~{ËÕ nç²±®ù-Õ5øãŒO0>ÁøãšÏY6Ô©ø8ããŒ3>Îø¸æ3F– 5$ >²!±ue^iHÜæ]ó’6¯ŒsÙX×ü¶?O*Ún.û¬~Æ›|é a^{§ŸöðFóä‹ÂÎÚÙæø-µ9ð Æ'Ÿ`|‚ñ Æ'4Ÿ1²Ôù8ããŒ3>Îø8ããšÏYöçI_ÛÍ¥cÆgÑ|†JlÁ'ýÔ=mu×|ÆÐ°³·j¶ö~;PÇç–h'¾éBÿ˜?€ùËY;”yéÒq<ÏÀ‹Œy-²¤öÖ>ÁøãŒO0>Áø„æ3F–õ®>Îø8ããŒ3>®ùŒ‘å@ ²[¢çÿ¦i_ðYŸåÂÇ4Ÿô¥ãxž!óZdé/Ï\ÒüZóß³µÅýÍ/ão9¾0/UAõç3—¥Ì+ o66É€ .¸`à‚ . àÆXTç œ3pÎÀ9ç œÀAª¿¼þ˜2¿¶Éôl¥o¤®àLƒKWAõçë¥Ì+;c¶Ô ‰í|®G¹K¿jRÞ’jW=Ѩûyíš’Ã ¦P0…‚)Z¡Ñ9×r¦3…œ)äZ¡Ñ žÏ¥KwI S5\RÍ‚'¸.Ê–÷õyÙÜÍÛïþÜáz—†ù˜g ˜,B™·Bæc^rP¿æÏ Là`8˜À¡üØ™ÀÎv&°3] <¸Ç¹À‹x|>ÝŸ›¡ï2B`U*Ø´ÀÙL†8í]gtÃü€›ý³ûÛÜ¡Ì+EðsýÝ]÷E·Ì§—FAí;µ§V€ï/»?÷U˜—k\̯ÜsMRÖ=ý1/ÍåØY÷ôžêž|‚ñ Æ'Ÿ`|‚ñ Íg ‹u>Îø8ããŒ3>Îø¸æ3†¯—ÝÓ>¦ù¤È”Ï"ùŒ.œuO >麧÷ùNì¦vÕÿìʼ”¬ìhqðżY:{¶ë,²ôTd©ó Æ'Ÿ`|‚ñ Æ'4Ÿ1²Ôù8ããŒ3>Îø8ããšÏYæ-ϒϲ+óR†±£Ý»‚O:²töÖÖYd™7¢ºPþ÷ÿ Ìsc2]˜õcµäüóýd‘…µRï'+9Yî°.¸`à‚ .¸(€cQœ3pÎÀ9ç œ3p^7©yGº·\À™§'Öº0ÿê¬lÉQêûÉ‚ë‡ßOVrfBÙ1ï9ÞZ® äX_fÕ¥ye¬Ç‘èx>3楉éGªkLà`8˜À¡BØ™ÀÎv&°3] <¸ð¹À‹xðCB`ý#Í+3IŽDÏþ™1/ ?ìù }ç]M}—ÌdÙ‹¹úr­gæÓMÍBû:­›2¯Ìÿ;XÓýǼtÏ8XÏ>àŒ{0îÁ¸ãŒ{0îQà>Æ¢:wgÜqwÆÝwgÜq÷÷1DÚs*î.DšŠ„Kf®à¾(îòÓMNüº=­êß^^x°q‚{ö’t¤¦%þüÆzLüùŒxÓö1ÄEò¢)s¿~¸ç¢.æ•táż2 þ`ø`à‚ .¸`à¢n ¤upÎÀ9ç œ3pÎÀyÜ ý¹ÜáÎûómï¦L€Óé¦Ìýúáž{Óà²éB.[-q¤&Eó6ðŸd/óÅæ¹Í‰ÇªÌKïÃlšËǼvgÓ\÷`܃qÆ=÷`܃q÷1Œ×¹;ã3îθ;ã¸a<1Kæe.ÜMr_÷ÅšúôÊÞÁ]n`=Ve^zf£h÷ôm<5Šæ˜(¸ ¼Mªïê×›»Nïì:=1ð³'ÛI޽ïì}xGŠ¿æ‰h]Ç o0¼Áðà o0¼¡ñŽA¹Ž×^gxáu†×^gx]ãcïïÉLø®Blî¼³;ðï²'X޽HïìEzG]–Çñœóº ÇsÎkÈf óC™÷ׂ̧²˜«‘uz1/]Ž›Ãr"ª¦˼Áðà o0¼ÁðÃïUëxáu†×^gxáu†×5Þ1ªωé»Ðp<'¦‡”³0?”yÏ|z-(‹¡:ÉáªoúF{ÜÜhQµ?§ ÚÍÓoœG|›3îoFë/?mS楜qga±³°˜šŠøãŒO0>ÁøãšÏ×ê|œñqÆÇg|œñqÍg Lý9ÕÚnž<ûãØîÛ\iµbiê¯åJ;‹,E–óÕãÆ?îñ|Y£Ð”y®ä_}zr¿â¦ÌK‰ Õù˜OjéL¦:Þ`xƒá †7Þ`xƒá wŒku¼Îð:Ãë ¯3¼Îð:ÃëïÏw/ch8_5ežkëQŸž\Áªþíµ¨ÊÆø¼Ù¨Ú×çÉW7YЋyª€?ve^iØù˜—ZW/æ×Ê¿-Ùºz1¯Tú~ÌK%B¿æ DpÆ=÷`܃qÆ=÷(pâ0à3îθ;ã3î^à>è9÷Å“#$wPÝ•y¥aGpÏöÝN¹/š»þôJ¥¯àž-ÜÇ0n/ÓFÒ¼2(¯ªôíö®òo“æ•¡n¨D¨³QN\0pÁÀ \0pQ7Ò:8gàœsÎ8gà¼nŒ„ö2ƒkʼ20°*–àd±ì&Í+;ÝPÁNOMCêóÙ,½åò¼óM|µïÖr|Ìu®æÈ|z)Óú1×Ý`íޜĢºòÁ”¦|0åƒ)åÇ`RWÞ™òΔw¦¼3å½ ü æ…¤ò£KsµåoÉ,ÉÊ/Jyùé¥Ô¡P>}3IMêVÂ_Ì++á{°»A0w¨}à×<áµ­n8˜ÀÁ-ð蜭X;Ø™ÀÎv-ð胭BŸ œ^…Þƒ‰ƒùà@Eì] nØ’Þµ½+ƒ&€ÌKe óJ½ÜǼ´_á×<á]ë8˜ÀÁ&phGïZØ™ÀÎv&°3] Ž Ó¹÷†ö+ôíyLìwÝæßMÏÁº˜Ëο#õég%)¿½«y±]™—ÇÙ .¸`à‚ .¸(€£Aœ3pÎÀ9ç œ3p^7F™íy0ó]”™ƒ[<7Ijn±lR~S¯Ð¹¤üö®~Ìve^z_NÍèûsÝÇ]V}Y÷±*óÊJÒ>ïBï‘,ÔÚY,ÚoNióÌ¥0/Õyí,Ö¹ãŒ{0îÁ¸ãŒ{¸´ÎÝwgÜqwÆÝwgܽÀ}ŒÃûs×Ý{Æþ²ÎkUæ•}ªsî‹ä.ÿøZ Ýo.‹ówa^ªóÚSaü`aüPM„KfŸêÅ|WÏ”ýæBˆVôcZ¾yf˵´_ác^ÌükNÂøÁÂx{0îÁ¸ãŒ{0îQà>†ñƒ…ñ:wgÜqwÆÝwgܽÀ} ã ã‡jF^2KqçÜÉ}¼³ùSî‹æ.ÿøÒ~Á=]ãv¤Â¸èòO®Iº˜o×ÿæïÿ4ùÁ6æ™.ÿ[»2/½úuVSÑÙuº³8\ \0pÁÀ \À´Î8gàœsÎ8/€#¡¸‘Ü44·HpKsaž¸qg\úõ³³Ú’În¤=ÊæýG¶¾ï|—h&6]Ìs}.Ìs}¡>]ÿ.ÏÌ¿½ÊNÊêà‚ .¸`à‚‹¸1”ÕÁ9ç œ3pÎÀ9çpc(›É8²uŽç»Ül“ŸžëL×J•}œöü ¼f>=wkÞ»2¯ä©ÎD—rJºÒáþdc÷`܃qÆ=÷`܃q÷1˜Ô¹;ã3îθ;ã¸‘О³d7ïE‚ûÒre‚ûâ¹úIÁ]&Ùö®Ì+I¶31Ô %]éfr¦f"œl&Âé/Ö»2/…qsåÿñ®>ÝT‡ÏÝD†ÓÑxŸy©…÷×<­Ùà€7Þ`xƒá †7ÞÐxǠ̦;¼Îð:Ãë ¯3¼ÎðºÆ;Æ^6BBàÕ±wWæ¥Øë¯ÒzW¼¦ñfXœŽ ¼Ùö¾sÖwþã{6ªÆ›©+ÿÁWe^Ùö1OWIs…Û¨ª†*w» v»­ƒ .¸`à‚ . àÆHXç œ3pÎÀ9ç œÀ1n:¢Cƒu¼“tg\v—§ë¥¹‹»õmŒ Uv˜» F*”‰) G® ãbž öû8!Ì{¡°ÿcþ•Þi-WØ1ß …óZ¢¶±PV \0pÁÀ \À¡¬Î8gàœsÎ8/€C™˜‡räª089ñ¯ueÞ µñSp‹'ÿx]oóZ®³¥BÙÆž,ç3¶–ŒEÛ|áùšŒEš7ø1/µš_ÌK¡Œ ]à‚ .¸`à‚‹¸1”mìѰÎ8gàœsÎ àÆP¶±W¿ùÔ nŒESp‹'?½4wQ€K?Ûm,”¥†®œófüŸ3ÊöwgDoʼ2tåÜçÛrz2²¡+'ºr²¡+'º¸ãŒ{0îÁ¸ãŒ{¸´ÎÝwgÜqwÆÝwgܽÀ}ŒÃsîË™ŒÃû»+¥7e^º2å¾hîò/ ]9ÙЕ“ ]9SCWÎãU…öòÓ…¹ÞZwHÖp°–#ðê S(˜BÁ ­Ðê 9SÈ™BÎr­ÐèDwÅüKæzGà;X1ÿÁ*:ÚÂ{1¿žÎ=Y ×ß «üÙ<ˆ‹¹únzê¯ù·žòomË|‚ñ Æ'Ÿ`|Bó½kG[mg|œñqÆÇ×|FßÞÑöÙ9ŸEò‘æ¹>¯±º q|²óˆŸtd9YaÀÉ ΗWÒæµÂ€“°ñ 'ÏÀ \0pÁÀpc,:YaÀÉ êàœsÎ8/€ƒÔÉ NVp¾Ìâ„0¯œ¬0€g83ãú:ïöþÉ]’®æ™¹'¿?Xaž+uažk£°U™^S.æ:»š’®rÇúkþðÞ`xƒá †7Þ`xƒá ÷;,¼Îð:Ãë ¯3¼Îð:ÃëïwðTx—Ü Oᕳ–C™ç Ä]˜çš lUæ…'…7Ù¥ð&/ˆ}O ˆ5U£p5æ_f®hóJ½ÜÕ¼0Köb^Y·þ×¼~Ã#ÊS>˜òÁ”¦|”cQ]ygÊ;SÞ™òΔ÷‚òc˜˜Ï©Ê¾ÎÔÐÖÌ-G)Ÿ,9SÊ'/IJùä%I)?ºóy3òOO^’\Uš,‰¦Ô‹¹n‘ÛRæ¥hho÷æÄו¦|0åƒ)Lù((?ºóºòΔw¦¼3å)ïåGw>W~éÉS¿«ú¦%Ñש”_, œEƒÄì‚vožpç1ÿjËkos=}c¿ñˆAJ.æ•‘¤͉?®KLº`Ò“. Òµ.3éœIçL:/H7zĹt:‘Â\ÏSÙoœJ*&%]Ú¥EÊ¥µy·‘'O¨m­÷=yBmoj5~|mʼäP©uº˜×jcµ.¸`à‚ .¸(€Ýyœ3pÎÀ9ç œ3p^7“y«ºyòx=·HpÒŒZÕ¸1”í,”í9ÔÛ`²³ÄÿΞwVÞ´§BÎÎBN]à`8˜À¡CÃÎBC]`g;Ø™À®]øÎ\øþ˜ì¿u¢;ËÖïìívgE6{•=ÞÕ„›+ó.N=7]óïÁ{Ò·ì¢p°ÒÕƒùö#åÛöô[Ç o0¼Áðà oh¼cd9Øûr¯3¼Îð:Ãë ¯3¼®ñŽqí`ØÇ»¾seÞÅÍæ¦ïcŽwÑxå_»š¬tõ`QuÞõ{2ª~Ì[ꕳ)óÂê鋹©6±ë6ÖPæ…¦û«yéeÿn%|"ªöTT­ã †7Þ`xƒá †7ÞÐxǨZÇë ¯3¼Îð:Ãë ¯3¼®ñŽQuÞò/ñŽ¡aŽW×Q4e^Xv­ð.s¼Ë¯i¼é§¯Îª8úM¾0UÏç<ÊÝËÌ9ÿù]¹)óÜ`se®Sì{ʼÏ›Ón",ž©°XçŒO0>ÁøãŒOh>c\«óqÆÇg|œñqÆÇ5Ÿ10ÏiÌ»ç”9ŸEñÑæ¹ùÿÊ\¿Dí)óRd9o®{Ï‘ÅÖçßs¾˜WBÃÇü+âg.i+z¢º˜Wž¨Œuà[ªð Æ'Ÿ`|‚ñ Æ'4Ÿ!²>Îø8ããŒ3>Îø¸æ3D–9ŸEò¼«à“ S>‹æ£Í+ïk‚Oö}ÍX»ª^0{5\âws¯0ÏmØuaž.±ü´M™WJÒ?æz¯`JºZ`²T`2T;ðà o0¼ÁðÃï× Un¼Îð:Ãë ¯3¼ÎðºÆ;†ECu#¯Ìö¦Ìsû±]˜§FÃ,MýÛKEðoö}MàMGUgQ5ÑW}dÌk.g.gqÍSqÍY\« Là`8´ÀcdqYê;Ø™ÀÎv-ðèÛùöÄ€#c^»³8»³8ó®Á¼k¼;õ|Of¾˜×n ¬µßXk?.˜tÁ¤ &]¤=b0X—ΙtΤó‚t£¯ æëâÝ9ö{>°’.}’d­ý–jí·† ²lÞhÉŽDkìÀØØ±±cK9¾†J¢€ÀÁ&p0C <ºÇ†Š’€ÀÎv&°3] <:цʂæ/‘ìijÆŒ;0nÏS+oº@.æòùçλnÌ»nÌ»nÌ»n)ïZ8˜ÀÁ&p0C Îø8ããŒ3>Îø¸æ3ÄŸ9ŸeK®xŸòY4ižŠ?Ë&Í·B†QðÉ^’œµ·û¼ƒò'YWíön­7a^Ú3s1ÿ)”¬;tCã£?æ¥=3ÎV¼pÁÀ \0pÁÀEÜ‹êàœsÎ8gàœó¸1HÍÁ-ÉúrNsö&ÌK{fæàOÖ_º¡aÎ\ö’ä©ýôÎöÓ_Ì3S_Ç2Ë‹y¥ÞYKº³–tgûéí§ÊS>˜òÁ”‚òc0aûéòΔw¦¼3å½ ü Ø~z¡¼lÙê…òÙrzgÝíκÛ=µŸÞçíÄžÍyÅü«½™šù1ÿ:'õKÉŒµ”y)‹¬…€ .¸`à‚ . àÆ`Rç œ3pÎÀ9ç œÀ±h>>À³é³9¸ôÍ$ÐpÉ9¸E‚Óæ¥P,”¥†x›¶¬-×v1ÏMÆpe®JWïêû>æã¬º\Ž®M_¯ýw `ÞP©º³Ñ žðà o0¼Áðà oh¼cX¬ãu†×^gxáu†×^×xÇà9¡ñŽ ½œ½ãÊ\•§ßÕ÷ ¼‹'³‚mZ`!ñÊ{©8ÞÙÐ Ÿ·üïkò‚¸½¬» e^)ü˜çÞ„M™o•§« m“ñÔÌ À'Ÿ`|‚ñ Æ'ŸÐ|ƸVçãŒ3>Îø8ããŒk>c`šOÜ|Fﺽ,<e^©é|dMÅ¡þíº¦âÌ|zi›ŒïÏ£ºî²wûË– ežûjŸM™W*Ç/æ•Êñy-²¤&n>ÁøãŒO0>Áø„æ3F–:g|œñqÆÇg|\ó#Ëþ<)ï.å¶¿ìIRæ¹Ðp6e^)÷|Ò‘eg‘å`ZÇó¡é̘×BÃÁBÃšŠœMÊS>˜òÁ”¦|”£ÁÁž•êÊ;SÞ™òΔ÷‚ò£Ÿ?Ø»Ðñ|83æ5G}0G} ¾O nðþ|…þúÒve®¾\·î¼¿Û´ïʼԗÃ&/xgÕÓEƒ:¸`à‚ .¸`à¢n &upÎÀ9ç œ3pÎÀyÜ‹ús6ë+Ête®¢Ám,êïvmí»2/µø°9ÞYõtO…²-X¸˜g*IÇyxÎÆ8wà'KZ©s¢ @à`8˜À¡CÉ, ìL`g»xtá'Z° –/åÃ8gmþÎÚüí§yrëÓǘÿ講0ßUiåM W¬/§¯Ê¼òØü1/å}~ÍÁI(Lù`ÊS>˜òQP~ðÇ@ygÊ;SÞ™òΔ÷‚òƒ£ž+¿å—«ò¦•_ÁøãŒOh>c\«óqÆÇg|œñqÆÇ5Ÿ10ùósüÍ ½pÔg9å³h>Ú¼Ògld€à“Ž,‰Õä7Ã.æGáuâc^zˆ`ù3Öͤ &]0é‚IéF\—ΙtΤs&¤]e<ŸáoZÒ…tÙ·!]ú,•ê)Ä:ñ»TSwÕ%3íêc^z¯ÆN»M­ÌyÄÆ˜òÁ”‚ò£C­+ïLygÊ;SÞ™ò^P~ôÇíùé÷.§ÒTêdÉL»ʧÝycgϦ¶YæÜyK¹óíùîv—}ØTõ[îIàe7e“æ¥h°±h°±ÜGª™ð Æ'Ÿ`|‚ñ Æ'4Ÿ14Ôù8ããŒ3>Îø8ããšÏ@¶çÜÇ]öaSE¢¹¬úËnä&ÍKñgcñgc¹vÆþn|ÍáÊ\^b×›Çæý]Áu[•¹J*úšù·—z~ÍÉ=cG£\0pÁÀ \À±hG…¨œ3pÎÀ9ç œÀAjG®œ,p=\™Ë¤Õzóô»¿kqh«2Wùýq?Éܼԣ À¡ìxþaÝ¥ñ—£ÔÔ§×ê¦æ ÈwO^’XóõǼÊXó5 \0pÁÀ \À¡¬Î8gàœsÎ8/€CÙñÊîPŽ—c M˜×ª˜ŽySž'ï[¬s\€K‡²TçxÌÛ!¶äóMW3ÖæxNeÞSgDõé¹ÚúuUæ¥ta¢ 6%]-]ØS¯Ž7Þ`xƒá †7Þ`xCãÃb¯3¼Îð:Ãë ¯3¼ÎðºÆ;Ï9ÞeK¾vu5`qŽw9•yOÝÕ§çÚoÖU™—r‰V÷”tµ\'kbùò¯5¤=e~V¢êù.ó²5eÞ*Qõ¹ÙSÒÕ¢jª…>X =À o0¼Áðà oh¼cTe ü¯3¼Îð:Ãë ¯3¼®ñŽQ•˜ã]$^m~V¢êù.»º5eÞ*Qõyx§¤+EÕ¶¢AûóÄi÷Ÿéó.~Xß?XæÉRSæ×3ñ~亂ZbùzJºRTmk&ª¼Áðà o0¼ÁðÃïU^gxáu†×^gxáuwˆªs¼é-¯º«ŽÃÞEŽuažÌ7e~½ÑJ¼òßîk!ª ¼é¨:kSþ±Ör™óJ ÷c®³8Gʼòù1¯ÅµÔ p0ƒ Là`‡xŒ,u ìL`g;صÀ£oŸN2xBàì•G¼Xn9˜8û 'N{WGŸÍ_~7C˜§“yнKóÊÙżäœ•Š4G¥"\0pÁÀ \0pQ7FGÝ®œ3pÎÀ9ç œÀQÆQ¯mó—Q&„ùxÒŸ?Wui^y®àÒAÊQ©ˆ7†²xž£x—CŠwåÄÃT–XËÞ2Ÿ^êíú˜×. ‘ 9uƒ Là`8´Àch¨ ìL`g;Ø™À®]x<ü¼ËdÄ»Âõa0x±ÜÐ1!p¶=Jœ¾(ˆžòìãF{3 ðÎ<·ê.„yíqc¾ÝÛ{òq£¡QžóÒ(ÏÖR¾½Ž7Þ`xƒá †7Þ`xCã#K¯3¼Îð:Ãë ¯3¼ÎðºÆ;Æ51v"û¸Ñ^ò¼1Ïí¹ a^{ÜhóiÙ=ù¸ÑÐ(O7U74¨mêmqQ %¼²W­½Ý-.Í+“@?æúÑÑRæ¥SjÀ o0¼Áðà o0¼¡ñŽQuCs–^gxáu†×^gx]ã£ê††9Mñ.¯6¯lrk/GyÒ¼2ÆTàMßUÙ(6ëOÿi_ÊßEÕýÕ†«Ÿ¶)óRÅÁ˵ì®>½V°°³7±ýfúZ"ªî©¨ZÇ o0¼Áðà o0¼¡ñŽQµŽ×^gxáu†×^gx]ã£êtxˆÆ;††ýÝv¼&?½T뱿‹ª®>½V*²³W¸ýf@c"ªÏ²í¦À<±ŸþîºÇ¦Š´cžòäó›*Ò–Â=Ra±Î'Ÿ`|‚ñ Æ'ŸÐ|ƸVçãŒ3>Îø8ããŒk>c`:ž+ÄÛMöñ¤[¶ãÈrC§¢ Ô]"Àçü'æ®ö‡¨l‚ Åþ´Ý0ë`SÌÌx¤;ÀW¥îjf­@.ù¼2ŸüôVdÙØ)èþœuw·¸_ž£ìïbdùµÎIòN=ñI+ßykèż³$Ä>83pfàÌÀ™3ç¸1õÁ‰'N œ85ÀAjNB¼»éÛ/Ï$#¸(/öÌHÿøVuoWm½À•“÷R(;~i÷Ï«½'y§õâŠë~XS”·näv#w°|úƒ…²>83pfàÌÀ™3ç¸1”õÁ‰'N œ85À¡ìø©õâÜ”ÁU[/p/‡P6Eyë~ì`÷c˧?*¡l¹®˜þúeÜÜ¢-ïß²‘‡Ê²åj»NòN>ýGÞšœõWbpÞÌy3çÍœ7sÞ ç‡`œs^Ìy1çÅœWÃù!ç_SíZ(8¯…†â¬à|ugœ¯.çÁùêrœ—óëqïçÊ¿»C¶åzÜ{êÅùÏwV’wzþ}äµkU§§·ÎèÖÅᯜDƒ>83pfàÌÀ™3ç¸1˜ôÁ‰'N œ85À±èÜk®²p±¯íôNòN¾.¦(8=½uF·°nÜÊtý˜Ó]f’½ÁÓT+çZ„Nɱ‰PÞú_y!äô 63ØÌ`3ƒÍ v6x }ƒÅ 3XÌ`1ƒ• —p]/µÉàqº4ø ÎòÎéP0¸¼Êž^ü<"tø ò”§r»8ûúÕ~g³Å™µaX̾ôûΛ9oæ¼™ófλáü¸÷s^Ìy1çÅœWÃùq¡öóÀÛá+:ÈSÖÕí:ïëuþ]\çÍÖyÖÑ!8?.ç×¥ßû\<ÆŸ¯4S»ªõä­sŸùÇ"µ%Éþñ·ÁdNI÷¥Ü¬¼w‰0³`ÒçnÆÝŒ»w3îfÜ͸»Á} e}îbÜŸ‹qã.Æ]Œ»ÜÇ@zÝ"rƒÉ5÷Wên·¾“¼uh5ÿX­šþö/î/ÃøœªoJ‰e{ùúf.…ñå¹7ØÝuúòØ_þ6/¿Lmù3Mk’/]Ùòü…ꊼwdVjõø˜ñ1ãcÆÇŒg>cXìóã#ÆGŒ1>Ê|Æðµ<·æ»»À_,ÜÆŸå§±Eg>SæSÞ.Ïû@Wä½ó¾õù—q·MYÓwá«ÒDhù±`z~'y+²¬(eù¯œlÑúΛ9oæ¼™ófλáü ú΋9/漘óbΫáü¸Î¯ÏëüÝÇòšv#¯JWœåÇúýùä­u~EY¿Áùq9ßPK¹“<¶ÏXÎÿë÷äkxúííÏÆn6Ôiõ#Ï¥]Ö‘h°¡fqœ83pfàÌÀ¹n &jÀ‰'N œàÆX´¡oÜëÜë nŠà^\|zïêjC}O¸êüòn eûsÇŒáòZƒDy©cÆ?ÿû9È¿¾å\ë8³ì,çxgg^{)bõù˜ñ1ãcÆÇŒg>c`êóã#ÆGŒ1>Ê|Æø³?wœBC×:„:ÈkgN|¦ÈçùŒ`g‰Â;;ó:.G2¾÷â&é¸n%¸×únŸäµƒ òRͱƫ ãñ–óöÈŒ•é/¬L€3gÎ œ83pn€cQœ81pbàÄÀ‰Sܤ.Ëô3¸q¡>®Ûrîµ.Ø\Î+P—ªü5Þ*‰·ç}¬L)•é¯ïß.6§=É÷ÂWÚ‹ÖËÑâÎ …îv9'yg—ó‘çã—äMÒú®D,ÀÇŒ3>f|Ìø8óà#ÆGŒ1>b|”ù ñçšON ˜ö$ß+»œ!€\óyE>ÃøTw9O51 ð©n’ÖË2Ø?›j›¤uúå\ûï¹D’Ç;Ö­òôÖÍþÊjöufÖ™YgfÖëqß:1ëĬ³N ëÆ¥òºn=Z7.ÓO÷¯×šäñj~«<½u9¾–*Ç×0|½Øå$¯ô÷爮JãÃ.4É+»ÐןCIÞ騵 %ᮬn}-Õ­¼fxÍðšá5Ãk†× ¯3Þ14ôñŠáÃ+†W ¯^1¼ÊxÇð¥ëÞÆÅ¶+ol6Ì x_ o”—Nš^‡’¼Ó€lÊ ^YÇ€Õ—g»{qÞÚê”çòª”˜~äß??O°|Ýsܵ”³“¼S#ú‘çš1—ä­¨êRTíã5Ãk†× ¯^3¼fxñŽQµW ¯^1¼bxÅðŠáUÆ;FÕË ïœrÙ^•ºÐ€÷åâñ›¯ç ¸–äðV ;ÞrT5‹ªósO’»Ð0£ykëœ.FkQõr*ûŸe)FÕµñ9É[{Õ™EÕ¹UûxÍðšá5Ãk†× ¯^g¼cTíãÃ+†W ¯^1¼bx•ñŽQu~n[tf4,.à}©U/ñ¾"ÞüôN×£€·UgU—çßåÐ’1ÈÒuozú÷«Xß´.,,.¨»ÝÊú(¬¥> €3>f|Ìø˜ñqæ3Ƶ>1>b|Äøˆñã£Ìg LËs`:¢ùQJ—˜‚ü;²‹’ŸrdYP?½•õQX×”/ôª´ØY×_Z„¼þxNòVhXÙŽie¡a-…†¾Áf›lf°™ÁÎk{ß`1ƒÅ 3XÌ`eƒÇÅyM)k¯J—š`pêRóòœä­Õueßí+[]·ç4Í»j»¾ûÃ4”乜yïÃ{c«ëVZ]û›lf°™Áf;<®®}ƒÅ 3XÌ`1ƒ• W×í9Sønº68mQ’wæQƒËß®[]¯+…ý.®®ûoMcç=È‹w€s’½ak‡*ûãw‡J{oq.UÚ>f|Ìø˜ñ1ãcÆÇ™Ï¸¶÷ùˆñã#ÆGŒe>ch¸®´|ÆÕuÿ­9ò¼yñ|Nò¡ríPeüìWéoïE–ãyOy·8³‘ô'yëÃû`kûQZÛû™9dæ™CΫkß!1‡ÄsHÙ¡q};žî–6Í<8Tþv=Ð ³½QžÌf6ϵúé¼ÔåfÌ“ÙÞ—ùksqBÉIÞixø‘·zyllÌ9gÎ œ83pfàÜ7¬Çœ81pbàÄÀ‰SÜ&®Á•³V¸×\+Åથؗà^\üÇ·pÕ^[iFû6±P6¡CÖÊ =ý뇥µÖ ä$o…²é¹•ÁÃÓI(›X(›Ðá9gÎ œ87À¡lb¡lB‡òœ81pbàÔ7†²‰…² öpÕ4™Kp¯ .Ë[¡lzî*òðôB( µº*†2¥©<¥ ×M×-Fß× ÛÖ÷;É;¥ò'y§«ÕGÞêjµ±Jû­Tiðšá5Ãk†× ¯^3¼ÎxǰØÇ+†W ¯^1¼bxÅð*ãƒg¨´W1x*ä*]u_ã}¼¯3Þ)㭖ʼåà)Ô’kc•öÛõ´ì¯,Ž›JûÍ¿tÀø£¡Ò~ó'/éé_÷Œ*?lÏcÎï*í7£i̛ٱΠœ83pfàÌÀ¹nŒ„}pbàÄÀ‰'N pcŒ»÷šjuï\ê&£¡î=€+o/Á½T¬£àªuï›Ñ@ãn e×”Öâqþ±Ï_”·ö—3»õ»®¯=ŠkÛÌŽJç›;ˆÂ±TÞðšá5Ãk†× ¯^3¼ÎxǰØÇ+†W ¯^1¼bxÅð*ãƒç5Þ×ZÜ Î?vòÖþrf÷Œ×ÕñG1Ýn›Ùáì|sÏXˆªW埴§žäçÖX òïÖ’~XNò¯«ù¥xƒ¸ Á6yîÝë’¼uìZªŽxÍðšá5Ãk†× ¯^g¼cTíãÃ+†W ¯^1¼bx•ñŽQõ²6?ãCÃ%ÞWÄ;Ƶk¼¯„ww‰÷•ñÆ|k”NÀ[>ve¥ýÛú[Ó‹aâÚ¶²ëÄ•]'®,3feŸ}ë̬3³ÎÌ:7¬£Aß:1ëĬ³N ëÆ•vý­ Ê0÷+XW¾bZÙÓÊò3ÖÒ’ª‘«©†Ûãü®ÙÉG^l±$ykAÝØ‚º±¬ù-¨}pfàÌÀ™3gÎ pãrÞ'N œ81pbàÔ7“ÐW šj¸=žfÝ5} àrÓ—ôï…²…²eÍo¥Pöã˜ó±‚kG½]>ò)}è|öKOïÅ¢}Üï,õ7sÞÌy3çÍœwÃù1˜ôs^Ìy1çÅœWÃù1\·HÎÿ§jGmb‚ó¯àükOOï-ç;Û™ì¥åü¸¾ZTñ°¥0êûîn5ØXÃ5ØJ €Áf›lf°™Á΋sß`1ƒÅ 3XÌ`eƒÇ5øÚàØe<Þ) •¿»áeÝ6Ö-acÝö7:÷Ùß¿u*¾µ÷BíöRyz+ñigóÞ÷Ò¼w`°™Áf›lf°³ÁÃê 3XÌ`1ƒÅ V6xX]÷7:ïÇÅyø@Þ ]–ÊÓ[é7;™¾†Wß­oÓymòb^Ûœä§ |Ÿï—§Ò?¾ÕBü#ï-ÎSiqîó1ãcÆÇŒ3>Î|Ƶ½ÏGŒ1>b|Äø(óCCaÂüÝâ<ý˜Øé /&vÎI~:"É|â?¾Õÿ<ð)G–ë’ͯN7‰»R#ÑWšv-¯øiIò¹q_»?WäÞrÿ•ƒCn༙ófΛ9oæ¼ÎѠ8ób΋9/æ¼Îëüµó/×2¯Eç‡LÅà|<äVúÇOsãÊs.¿;äÎ˹¯,ìÅåÜ?mb_ö$ßS2À»òôÊ/ãÞ[’w²wNòøT²®·Ï(LxÍðšá5Ãk†× ¯^g¼c`êãÃ+†W ¯^1¼bx•ñŽÑïºt<â#€;{íI¾§„Ÿwåé¥àyÆ;e¼åàéçMRɺÞ&iþ)+â?kûüüɶ—ä»ßMßKeÙÀ!3‡Ì2sÈÙ¡qmï;$æ˜Cb);4.óo0ão|~þ<ßKòÎõéÎÆGïËsÝûÝÇçu…ÞW뫹"o%§ìlþóÎ*\÷R…+0ØÌ`3ƒÍ 63ØÙàq}ë,f°˜Áb‹¬lð¸<.Ͻî>®«<£ÁQÞJNÙÙåÕYîësÛÉ›æûúۉݴ$yë\‚•iî¬LsgešÀy3çÍœ7sÞÌy7œ×ã¾ób΋9/漘ój8?.ÔësÔ›àÁùxJ=¥§÷6Ú¬Ætg5¦{©Ætßž_íó»ù?ÍAîó5¯µ\à ³øÈ¿ÚY,G1fcŸêlbôÎ&F雷ѯ^3¼fxÍðšá5ÃëŒw L}¼bxÅðŠáÃ+†W ¯2Þ1úmÏÑï¾Nx§ˆ÷•ðþ'ËsC4.ñ¾2Þ,om’جîÍêÞ÷ß>‡ú¨ý¹ôïv—ÃêUwV¯º³zU`™ufÖ™Yç†uc4è['f˜ubÖ©aݸÒî¿í3†j¥ý¹bôv£ÀJ>wVò¹—J>÷58ÉkÝdäç7øXk >ò1›ìUizy’Ÿ¿T&÷šŠð‘çí¾—“õø@Sw3îfÜ͸›q7ãî÷1˜h¨à.Æ]Œ»w1îbÜÕà>FÂÍdÜs[i'ùÙºÈ=>}Ì]}Uúg^reîùé‘{¹xᨄñãº2s™kaü$_Ï_˜k­ùôI~”Òâ– ÿþõ.×iqóžþñù }¯üí¹}mɺVKºƒ rÜ͸›q7ãnÆÝŒ»w7¸apã.Æ]Œ»w1îbÜÕà>„ñkî¯È}&—Ü_™ûP¸çüØôÿŽÖ×Ü_gîSæ^=: Ü«ù±›B”¦ÐÓó×ùÍžð$ïLf:¦ËÁhï¹V©ø‘·’8>ò‹ßåóÅÙQªB›lf°™Áf;<¦¾Áb‹,f°˜ÁÊ‹èô¼‘»ÙNƒ«ó. ~eƒÇ2¡Ì‹`põúæ[]uýÑtN¾>n–G]¿‚®%Eœä_ý‹‡•'y')â#ÏMó½œìrÄVí>83pfàÌÀ™sÜ Ä¢Aœ81pbàÄÀ©nŒ2bQF×ûŒn ×à^®¥(\ƒ{íÅó¾®¼ÏÐó>c¾—B™Ÿ”Ü…2?fÝ$2a6ò–~XK’ŸÏá÷©VŠs˜…2£fY›FÀ™3gÎ œ87À¡¬N œ81pbàÄÀ©n e~HtÊü¼aºI! à^ \üÇ]]Epñß eF}·ŽÒ4òc¾œ¼8¿‹WWs:x]~<Îs’§ô¦ÛMÝü[ ˆÓÓãäÅ»’¼•Ò÷WNBYœ83pfàÌÀ™sÜÊúàÄÀ‰'N œàÆhpYþŸÁëñœŽø.CÙÜ”Á½¦â¦nþ­hËééqŠé]FWÞ•Í¥P¶°Æå—Ö?¯öšä[é‡å /~bîIþÕÂè\<íÒÓ;ýå?ò^ÆÂ"áÂÎ'ûÜ͸›q7ãnÆÝŒ»ÜÇ@º°ãÍ>w1îbÜŸ‹qã®÷1/ìttù)¿NܧÌ=ÇayqGº'ùW/³Ä=?½3$ p/‡ñ¥ƯªÓÿø]Ý‘®¿õü™Ö=ÉÓiÉí=ázù¼nÅÃÕõñûøöpu}¾µxøÇ“8ÜgÎ œ83pfàÜ7Ò>81pbàÄÀ‰§¸1^6òÈàÆõxýépõ nÊથÌ×à^\–oÃÕõùžðá_e×¥æç¼ÛP¶¡ò¾cKýBšñäùþÞ•|/qCÍ®6k€3gÎ œ83pn€CYœ81pbàÄÀ‰SÜÊ®Á½¶b(ÛP…Ü5¸W7 Ø à^ \üÇ÷ò27Ôzú(Íš? s·ï¢ÁþÛðÁõäÅÒS%ùùq+vŸýÈóG^éooõ¤ú+/D¬>3>f|Ìø˜ñ1ããÌg L}>b|Äøˆñã#ÆG™Ï Óíï–ðý·Ñ'>Sæ“K¬•äç…~+¶Î |ʉ&;jët× v–bd9û2ßîrŽôx]ž°ïNòÖ.ç@M¥>ò|^²®˜ŽR`êã5Ãk†× ¯^3¼fxñŽq­W ¯^1¼bxÅðŠáUÆ;†ÅëÆ%ïŽÇžî·ûª#E¿Ë¤•3Þ)ã-ï«Ô@,à-GÕƒDÕã}UªþgÚkûµ³|Mò½";Tökgù×™þZª¶;Ë·h'yg»w–7¢ê¿òǨJðšá5Ãk†× ¯^3¼Îx¿£*Á+†W ¯^1¼bxÅð*ãýŽª×x_ïwh¸ÆûÊx£|lRÙl¼¯ˆ7?½qo—ð£jÂ[ŽªÓs3Ø»À4¥É¯”Lv-Ï÷kI~üž¥ù¯¼¥F¬3³ÎÌ:3ëܰnŒ}ëĬ³NÌ:5¬WÚé¹ñÝb5¥(¯”x-Ï÷BkI~üžn—¬—4=L/7Ÿê׳æUÝ((Mî­mtYY9/Å‚H1òIÞûÒWiÝìó1ãcÆÇŒ3>Î|ÆÅ¹ÏGŒ1>b|Äø(ó#€ž/v–›¯]]×W¿µ•FW×¾µ/{id>ùéGçcYìcùºôûJÙogù¾;n¹Ïò˜Vú¾‰,¿ ‹ÿÛ\%Èçßï…NòNçåäS½Î œ83pfàÌÀ¹nŒE}pbàÄÀ‰'N pcº÷R)û-{¹”ÈÀ½¦R[Á.•ŸÁM\ñ–&+o’\ eóO;ð?G”]fjç>3©Î=É;}*þ•“`Ò·ÎÌ:3ë̬súq9ï['f˜ubÖ©aݸ Î¿ûS’Ý…jç>3)³LÖ•—´¹´¤]VÑþÙRÆÚŸ$ïŒ}8Ëc^OòÞÉËRZ¹ú™9dæ™CÎ Tß!1‡ÄsHÙ¡qº®U?å…4ÝO‹Ü’Cåýÿõ€÷y9ËóžäµNEéé¥Ô°iU’Ïõm%™™gyk}[Kë[Ÿ3>f|Ìø˜ñqæ3®®}>b|Äøˆñã#ÆG™Ï¸¶_òy%>¯yOòZC¯)ÈK¹‘g>SæSŽ,+InL|Ê‘åzB»×ð˘ö ï$íŸå¤ý“¼·ߨv¼o™ufÖ™Yç†uãzÜ·NÌ:1ëĬSúq©¼®îMÖ½¦=È;‰Üɺòv|cÛñ­´¤íÏ ®ç›ëªýú¬'ž½ÏAþìçÐÖsY’¼uÛµ³u¿éFVøXÞKëfŸ3>f|Ìø˜ñqæ3.Î}>b|Äøˆñã#ÆG™Ïöç>ðóÍÓ~} ¯¨æ ÿþX|^KúÇ÷®¨vö›®{…Èr<ÿ2îräŽÇìÑé]‘÷¾µ–³|°å¾ufÖ™YgfÖëqß:1ëĬ³N ëÆ¥òx^*ï’¾ŽÇœåé]‘÷¾µ–³\™·~L×sxÿ¬µâÆ“|Ni2_kJò½”ç’ž^:Xó¶'yç[û$ï|kOoô­=•Š^3¼fxÍðšá5Ãk†×ï^1¼bxÅðŠáÃ+†Wï¾Þ×Z+n xc'YI¾—rÙÒÓK§êg¼SÆ[ žou£0½ÑFa ã÷bT~ë§?A>n´_ioäç[©·ŠaqB•@yë¾všJa±ÏÇŒ3>f|Ìø8óãZŸ1>b|ÄøˆñQæ3¦0»}/¦é·¹'>SæóJ|†¬K>¯Ì'þã[•@O9²üZ#å1‘u¯Èk…ï#É;©Š+JE¢À`3ƒÍ 63ØÌ`gƒÇµ½o°˜Áb‹,f°²Áãâük™æ”ä1a{¯Èk%,ï#É;y–«³œ®g#Ïsñ»ÝdîÝIÞªàŸ|=7²XÁ?•Æ|äÁuÿÊÁõgÎ œ83pfàÜ7Fƒ>81pbàÄÀ‰§¸1Ê\×YÎsq `2:.«6¸÷r±ÀdT”ÀU/v¦R儦‘Ÿå¥.éÇšä{:Û½I¢šæ_’@þý«‚<ÞYn•¿=0—¬ëEBV$:¡aæ„»w3îfÜ͸›qwƒûHÑ,tÂ]Œ»w1îbÜŸ«Á}ŒÃh”zâ5É÷tÉs“L¸§d²3÷)s%îñoÏýJÖõÂx©¶xZ~˔לäñ–ó.†ï%y뼕&O¥Òd`°™Áf›lf°³Ác`ê,f°˜Áb‹¬lð–ß*B4'y¼)¿[Æ s°÷’¼uÞÇꪧu“ùÈ{ËãÊ–GVÙ<•*›Cf™9dæ³Cãú¶¢Þ0À!1‡ÄRvh\ VÔ&8T^aV¶Â°úÚicùµÛ/Û²?Ó{OòÚ¶l ò)€ýÚ–½ç$ï,|ä­á!'ykyÜJËãÆòkûxÍðšá5Ãk†× ¯3ÞqmßX~m¯^1¼bxÅðŠáUÆ;¦å×n?œñNo>;Ù‚|Jcž¿ÎNÞs’wŠSÞrÔÆ¢êu äù¼ð»[ÖäyÃÝEûõ ×ÕÅ‹öív–_»³°X*ñ|Ìø˜ñ1ãcÆÇŒ3Ÿ1®õùˆñã#ÆGŒe>c`ºæóJ|ÆcõýyXÊÝíøõ äÈg\Ûw¶_ÛY~íÎ"ËñÜ(öîî÷¸þâ›kí”NòN£¾¼WÐx°ó¨ƒE–£Yú|Ìø˜ñ1ãcÆÇŒ3Ÿ1²ôùˆñã#ÆGŒe>cd9ž»9ßÝy^ó‰iè>øTõ>å=ËÁNÙa½Ÿ'JÜ|·ë*7>òÖYœX­ûGÞjÔ÷WR¢€ófΛ9oæ¼™ón8?D༘ób΋9/æ¼Îë|pþ¥ÚÑÖµóå"à|u¡+ÞÎWs‚óãr>¡aºž$º‡=jú1q=Ê¿ϵ¬¼5SKlü-pÞÌy3çÍœ7sÞ çÇå|Bób΋9/æ¼ÎËù„F/^;ÿZ‹£ƒó¹Ú"Ê¿Úhϵó¤à|y9/ÍîÕuÑäù²ìöë\¿Ì{ûOåßI¾w–óËÙ–ŽbåßIÞ©üûÈ{÷bÑ Î œ83pfàÌÀ¹n &}pbàÄÀ‰'N pc,º÷ÚŠ[ ý4aq¬ü àʱèÜë(Vþp剨ÎD¥PF—.µ+ ù·J 1”ùǦp òÖÆIÞir+V…œ7sÞÌy3çÍœwÃù1˜ôs^Ìy1çÅœWÃù1„y»KíB!8ëÏÆhà{*È[ Áùòr^*äÖŒ2ˆU(ìÜ*òÞÞ€ Ì«…Ö™Ygf™unX7.¨3Ê|Ö‰Y'fÖ+⌲JU¨ÈÝ*òÞ*˜«RQ«®K§½VÔªåǽ›‚ü;ý¹zZÂjbÅjb?òVs‰¿r² öÁ™3gÎ œ87ÀËyœ81pbàÄÀ‰SÜL®‹{¸±¸W˧% òïR‚êi « « àÊ¡l)…²õ9ßíîë|½îÀŸú—­ï ï–¬zWäŸYÏ Ÿ* ƒÍ 63ØÌ`3ƒ CCß`1ƒÅ 3XÌ`eƒÇ%|}N¹¼Û\;å­ï ïq¬©8zWäÛ‰Âêê/§Z:½X²Øtb±éÄbÓ‰ufÖ™YgfÖ+bß:1ëĬ³N ëÆµ.TÔNµüp±¢T±éÄbÓ‰UšN¬ëéªqÔýŸ=È{‰×¥w~Ï>Øxa±ÚS•jOÁf›lf°™ÁÎËcß`1ƒÅ 3XÌ`eƒÇEôºú3üÚƒ¼—­w]ý ÎòÖÌÊ7u]~¶ÏÅ܇ãy Þmäç¶Ëš\£ü(]#ÏA>¥;ð¯yz{úÛóNl«X×êÖ#6^p7ãnÆÝŒ»w3îfÜÝà>Æ¢>w1îbÜŸ‹qã.Æ] îcˆ¼.cÜÇ(sf|Ìø˜ñ1ãcÆÇ™Ï×ú|Äøˆñã#ÆGŒ2Ÿ10ùybÚÝÖäšÏk-FÿY^'>SæSÍ‘ |ªùO9²Ì¨\â$/%›…ƒž¬ÓOOÿþa9 T:cxfifénJm!0Í¥À4£b €× ¯^3¼fxÍð:ããÚŒJE^1¼bxÅðŠáëŒw ‹3*T xcî÷Pªð欈ôôï¨ê0ih$â™EÕ™EÕ»QÒ…¨º òÚÄ€%È‹ƒÍ¢ü|ò¿©˜›²¢É~å$õ7sÞÌy3çÍœwÃù1˜ôs^Ìy1çÅœWÃùq=^Ÿ“çï#¾ ¯MÉHO/Žé‹òóETt~\W4g/8?.çÛóIøÝ’¶¥‹ÜW¥Xö#o5/4+à7+àÖ™Ygf™unX7.¨}ëĬ³NÌ:5¬•íùjänUØÒÕü«Rº¬+£°~— ø½?‚®7߈{j€Y»`øyoIÛÙ’Ö·ÎÌ:3ë̬súqIë['f˜ubÖ©aݸ¤íÏÇÚkI¾uN†Y=|°®¼¤í¥%í¸ÌÃ{WËí.Ë!ÿ,s­ÅôG>m?æ—Ë{K+<Ö™Ygf™unX7.i}ëĬ³NÌ:5¬פËòçlݸ*\Z÷ŠÖEùWĽ"ï-i¥ âùý\qs³ñœß?v5\ƒ|<‡UJäNòó™ÊtÔJäNòN‰ÜGÞº›Ù°^Î œ83pfàÌÀ¹nXÎ81pbàÄÀ‰§¸!˜\ƒ{©x%Àåþ¤k7_¯J‰Ü%¸Wÿñ­¹®z†:—& Ï×Å£s1gò$¯Í6z'ùÖÈ™üÈkwÍ«“¼s‚;³r확kpfàÌÀ™3gÎ pc(ëƒ'N œ81pj€CÙu¹ö\Ì` àò0²w’o Æ.fw¬NòÎÙùÌʵçR¹ö,”þ?‡ŠM¥›ny±ó¨“ükŠÉ»vr’wNî?ò^(cS–83pfàÌÀ™3ç¸1” ¥ìpbàÄÀ‰§¸1” %ãÏ¡ú9·Uú±‡°“üknлvgÀ•C™X(+MYžÍœ8;)È[µd³Qï¼ÕÇ}.9ƒÍ 63ØÌ`3ƒ CƒÙ]ß`1ƒÅ 3XÙàq 7;Xûq4ò¤ oU4ÍF(‚ÁÕŠ¦y~žç}·º* —’üÜ×y.^hÏ¡Pñ,?*òbBîœä§¦yÝŠ¡af·?lb3ànÆÝŒ»w3îfÜ͸»Á}ŒE}îbÜŸ‹qã.Æ]Œ»ÜÇfe/ÅY(9^Jòs÷¹˜¸¿÷(/¦ÿÏI~Úceîñ齫«Ò ïya›¤%MaxUÚ}œäTÛ™MêþÈ{›¤¥/¶Iêlf°™Áf;<¦…m’ú‹,f°˜ÁÊ`a›¤% ìxUšNƒË›$6¡:\Þ$­lu]Ù꺲Õue«ëÊV×Òìi`°™Áf›lf°³Áã꺲Õue«ëÊVו­®+[]K³§¯ ®¯®+[]W¶º®lu]Ùêz]Dxn¾~7{ú#ÏW_wGPlöôGÞ[·ÒòØwÈÌ!3‡Ìrvh\ßú‰9$æ˜CÊ Ôu½irhzMÅôO60:8T^aöç&Bç·cÞƒ¼5°s~®é»ýc³œçÒ,gà™Cf™9äìиÂôsHÌ!1‡”W˜ý¹ãÓy…™÷ oKœŸË?o¿aØ8äùxî,s·C<~ü¾NòÞï`+ÌQZaú™9dæ™CÎ+Lß!1‡ÄsHÙ¡q…9ž»Ým²Ž7YIÞÛ%h…Yœ˹vˆô‘·ò˜NòÎ.é#o•Ž/¬ÒXgf™ufÖ¹aݰ&ëĬ³NÌ:5¬«%ÌMkG:Áºê‘N°®ºá ÖU3;—R½Ý2=oÚoºa,¡úçÚà§ÅùVJ™NOÿ*ò™Oÿx½+òÞŠÈ æ€ófΛ9oæ¼™ón8?.¨}çÅœs^Ìy1çÕp~\§ç°›VÁùWXÎÏÎOÙùœçŸžþU™òÞr^ª9[XÍÙI^Js†eŸäqtï»òôÚЊñóZÏÇ;kåé­\Г¼³_J#BV™ðšá5Ãk†× ¯^g¼c`bõk¯^1¼bxÅðŠáUÆ;F?VåðƉaf|Ìø˜ñ1ãcÆÇ™Ï×ú|Äøˆñã#ÆGŒ2Ÿ10ù90ÝmMüX~}7è%ðI‘嵤§÷éØˆÐÀ§Y؈Г¼pßôgÚßIÞú‘O©gÀ4—ä©ùŽJOïm¸J3>6ãð1ãcÆÇŒg>cdaC:1>b|ÄøˆñQæ3F6e3ðI·Åg>SæSíQø¼Ÿ,O=ªTzzoϲ<¹»ØYÒl¾ë_†•äµ³„$/%Øs’·¶<…¡}%ëZÍ«6ep7ãnÆÝŒ»w3îfÜÝà>FÂ>w1îbÜŸ‹qã.Æ] îc„]žgÝ]©-i”çu„µ’¼v¨˜ä¥­ß™û”¹—·~…Ÿ%ëZ·–ÒˆÐeEI­ËúÛ•À>'yº«¾kîò‘Oé²ù»;ëäùw9UžÞÛ –ª&3>f|Ìø˜ñ1ããÌg ‹+Jè|Äøˆñã#ÆG™Ï¾V”NøÄ;±}Nò”r×Ô$ðyM©‰ñä9þL•§÷6ˆ*¨?Éã Þ£"¯½Úz'y+׃œ.lVêÂf¥pfàÌÀ™3gÎ pc,ÚPN œ81pbàÔ7© 5¸÷R±uV£ŒÞIÞʼ`Uà ›R»”¦Ô.;ê^ð‘w+É•®§oš,lÈíGÞ;mdCnófΛ9oæ¼™ón8?“u[΋9/漘ój8?FƒuqÎç,t%¹R²ÅMˆ…Mè Η—óÒ„Þåºwzw&ê6’·j’ŽëúŒê΄•‘/¬Œ|)•‘>f|Ìø˜ñ1ãcÆÇ™Ïú|Äøˆñã#ÆGŒ2Ÿ1€\—ÐG>ã"z VùO¹ 긮‚ªn'Xÿ ø×ÂØÖ›Oõ“|M‡É{E^ÛÛIÞÉjXYýÿÊêÿófΛ9oæ¼™ón8?D༘ób΋9/æ¼ÎëüZ˜5|ó©~íü+:åµc#;É;wë+k^°–š¬×…Ü›j9në”~¥Ëñõ×Bnù÷±ëRK^ …Ü.É;…¿ò¢ßçcÆÇŒ3>f|œùŒ¡¡ÏGŒ1>b|Äø(óÈu»„Èg\D§fJ—ãë¯íäß·K-ýy-´KpIÞÚ(è9›ònuÕ#z”äkzú^yzí›kIOïí3„N°V6»€3gÎ œ83pn€cQœ81pbàÄÀ‰Sܤôœ€|·PëÇ©VJò5=}¯<½¶IZÒÓ{›$¡Ã°µ4»w5š.¹²Ù½+ë>°²Ù½+›Ý»–ºƒÍ 63ØÌ`3ƒ CƒÑ¼Ä•Íî]YýÿÊf÷®lvïZªÿW®lvïÊ øW6»we³{×ëäc­µ^ç纩»Cù95®¥‹ o­®¬-UàƒÍ 63ØÌ`3ƒ W×¾Áb‹,f°˜ÁÊ«ëu |2xlB ~©V… ~%ƒ³¼µº²"öua÷µKJ…{UF›äŹ(WHøýô-̳œïåäea÷µ}çÍœ7sÞÌy7œ×ã…Ý×ös^Ìy1çÕp~\¨v_»¤ôÏWeÀvp¾š—síü+:ŸåGç¾¶T̼^ûýÑR½¯]ëÖs(É;Ý®Öõ·þ¦ó’äf늺¯¬z-ÕB¼fxÍðšá5Ãk†× ¯3Þ10õñŠáÃ+†W ¯^1¼ÊxÇèwY‰ñŽà·é¹g¼SÆ[mÕðÆîÄsúÛ[sïÖu'^Y!÷z]øg+ðoÝUo/›*+ý3­{’·îX!÷Ê ¹WVÈ À™3gÎ œ87À‘°N œ81pbàÄÀ©nŒq×à^[ñ¢c{lt|{Ùü[!÷Ü”Á•ïIX!÷Ê ¹×R!÷º³´«ýÇ›¾w÷bÑÎnSØŒéµ4clf°™Áf›ìlðv–ÆÔ7XÌ`1ƒÅ V6x\Âw–n´ÿxWýòÞ¼³Û6 {=.7ðG±ãÓI>§wsØÙù0„¨¶Ï8P蓼uüv V„åd£ÐgÎ œ83pfàÜ7Fƒ>81pbàÄÀ‰§¸1Ê\–hgpãB} î•À½œäÃ@¯Ú>ã@ £¸òaغpC(Û®‹Z¿îÚÎïæÿ4¹ÏÿÕ¼¾*õÛû±ÛÝFá#om>òÖFá¯ü9äƒÍ 63ØÌ`3ƒ B0XÌ`1ƒÅ 3XÙàa ¿6ø• ~ ž¢Á¯hðP—pmð+<¬‚Áàê" ®n¶ 5ß~¬ ]æ Ë?ÃwGzzÜß®®ê§·±¡ðÀy3çÍœ7sÞÌy7œ×ã 5 ΋9/漘ój8?.Ôj¾ýXå¼ÌA>3‡åôôx t»PO¨ŸÞV ¿]Uèý™–â(¨­PZyNÜxïI{àï•§W~ÿ<ÝIÞ©Ø„Î}NòÎôÛ­4à5Ãk†× ¯^3¼fxñŽ©W ¯^1¼bxÅðŠáUÆ;F¿ËòéŒwŒ…òésÚÕ{Oò8c¯<½<Ïx§Œ·Z›² 4¼åM’kÀ<ïIÞ LF™Kåd›ÒÿÛÍþv³¿Ý¿}\û»Øß.ö·«ñ·‹•k}=ïIÞú½¥ „¿}üYÏ—áVÅæÓ'yÒ±WäùÎe+É;éyoQ™Ù¢ÒwÞÌy3çÍœ7sÞ çÇ%­ï¼˜ób΋9/æ¼Î êempv~\ÒæçÉ2{Ež/ ·’¼“Qœ//çsi9¿®¦Ü·­½&yŒÖ7s¬·å·c½eIòÖ7b¡šÒyïžq)-ú}>f|Ìø˜ñ1ãcÆÇ™Ïú|Äøˆñã#ÆGŒ2Ÿ1€\×,'>/¯I¿Èoæ7>ñð|IÿøÞþ¿P³ìмwIZ(‡\ÎpßK%ô.µÞùøûyUšOŸä_S6TÜg¬,²°jä­T ø˜ñ1ãcÆÇŒg>cdéóã#ÆGŒ1>Ê|ÆÈR¨^΋ã‡Ïù¼"Ÿqq^SüyUšO_óyE>ùé­È z·ë9±û\¼¯Ý~ÌV’¯ç„ƒ5}²9ȧԬñ«ÐÞï$_:`ÛóOɺÞ}íV L}¼fxÍðšá5Ãk†× ¯3Þ1®õñŠáÃ+†W ¯^1¼Êxǰx]BñŽ¡aû±2@I¾žs’Þ¡° à}-¡M†ßI¾tÎ ·çûÚ’u½ûÚëÂÁ?GñbgGÕo'ù×åàRkôú‘iÙµ‹ýæ»×JµÅÀ`3ƒÍ 63ØÌ`gƒÇÈÒ7XÌ`1ƒÅ 3XÙàqm¿6øuocvTõumð+Ÿ>Ôncö›Û˜Âêz=svž‹YÇ/å,ÿ=L».˜ûS½uÿ©ÒñÏ|¼“¼µ8ìÖÕpfàÌÀ™3gÎ pc4èƒ'N œ81pj€£Ìõøçî?…iÇO…iÿ9—»÷ª¦ üV[|7epå u°”Rmñ*3UÛ(œä…„ëÿ Ì9Éc:ËTyú×Áôydà]iòIÞI ÛßhŸ±—J“3>f|Ìø˜ñ1ããÌgL€1>b|ÄøˆñQæ3ÄŸ=F«¶Ë |b½Ý0í'ð©¶9¿æóŠ|²¼“²¶¿Ñ&iŸž[ûßE–kL‡YC'y§ÿù>ýVÊs,IÞi®w’w2v6îz/»xÍðšá5Ãk†× ¯^g¼c\ëãÃ+†W ¯^1¼bx•ñŽaqzžþq,C¦<¼ÕþçûoUìg¼SÆ[mkðVÓ%v6«{×sAÖ]hÐe¬÷â†K—¿ŸsÿÝÅÎIž~ÖzW䭳à ÛΛ9oæ¼™ófλáü‹ú΋9/漘óbΫáü&ô\y·Ö]ΫÎÎGù×rÏòeô®È[Ço{i^õn¶IòoŸYãñ›Q·’¼8>-=ýëôa-Ž ÜÍ6IlZö^š– ðšá5Ãk†× ¯^3¼ÎxÇÀd¶IêãÃ+†W ¯^1¼ÊxÇèg¶Iòo›¤ñìШ[IÀ›ÓÓ¿Ž×â„ÅÝl“Äæ”ï×Sž§ê&é×oy/,Î׃m¦âk~¾-ÞKòVTeSÒ÷Ò”t€× ¯^3¼fxÍðšáuÆ;FÕ>^1¼bxÅðŠáÃ+†WïU¯'ÄOÕ=å¯] ä½°8_¯šŠ[Òù9#d/É[Q•ͧ߯«¯Ïå·›ÍBuüÝvoaÉ ;;dæufÖ™YgfÖÑ o˜ubÖ‰Y§†uãJ{mÝk)n@ íî¶ Ë>XØñ[iFû~]–=Gðí×eÙçò¨Û$ƒõ·™3CõèIÞ©=É[—1¬­Á^jkø˜ñ1ãcÆÇŒg>ãâÜç#ÆGŒ1>b|”ùŒອÁTœxÍçùDym4ÓP€øT 0Ÿòõkk°o—¿Œw±­Á~YÙì½zõ‘}¬µNn{(Œ^SÁB”wÆî Lši²³1瀻w3îfÜ͸›q7ãî÷1ö¹‹qã.Æ]Œ»w1îjp#ìe‡„Ì}Œ2—-2÷ñ4ëšûk­u´ Ü_kªoŠòÎìÄ}czCÓdöÒŒö}>‹þ:eV’·Î¼vvæµ³3¯E¾ufÖ™YgfÖÁ¤o˜ubÖ‰Y§†uãz¼?ß.|Ý(É[g^;;óÚÙ™×^ZÒŽçÕ›æûñã,Îøô¯Wp«uÝY÷uØY÷༙ófΛ9oæ¼Î jßy1çÅœs^Ìy5œ×ããùâ¦þ?~L;¥§­Ú[­/çÎ øwVÀ¿— øëäsè]Ïÿ¼•¬t¼SkòR¶ÑñFÙF~”*ðÁf›lf°™Á΋30XÌ`1ƒÅ 3XÙàa ¾6ø• Ûæƒ«)3׿¢ÁÃ*x¼QÎËÁ†ƒÓå±Þ¾ÿ¯ôµ{’SÒ^éîéZG:Ü d=XøQª™9dæ™CÎë[ß!1‡ÄsHÙ¡qº¬Fοñ)Íã{¥ÄkyÌq7Yó`½‡žkHn. OòN›Œ¼÷ù§tÑ^ÊU?É;»ùCè¦ï`õÀœ83pfàÌÀ™sܸ÷Á‰'N œ85ÀaBÏõX7wm\µiEWþ VÊy)eŽpÕ£ˆCè²ì(3~ÞÈÝíæFyœäC>ð«RÌü‘—zÆèí$?:ŸêF³8ŽR52àcÆÇŒ3>f|œùŒ©ÏGŒ1>b|Äø(óãŸÏQîŽ"Œ¦a\óyE>ñ饦Ig>SæSÞ$³8æç0w›¤ùú07Iós¢ðQyz¾€)ýã{§8¥’Z`°™Áf›lf°³ÁãÚÞ7XÌ`1ƒÅ 3XÙàqqžŸ[Ým® ~ÍÅÍÁüœ«~Tžžo KÿøÞÔõØc¯Å+ÄåÇ>$ òRwüiÝ’¼ÓïàXØw;~”Ɔ>f|Ìø˜ñ1ãcÆÇ™Ï¸¶÷ùˆñã#ÆGŒe>ch¸®ƒM|þsÿ¹ü؈GA^ª‚:ó™2ŸjË€caßíllø±>µÞ´ 8É·¯ì,׎tÖß~Û–äó×Ó.Þþ·y+0­,0±òÜ£Tž ðšá5Ãk†× ¯^3¼ÎxǸÖÇ+†W ¯^1¼bxÅð*ãÃâú|rÓâï+â#ËoÅÁg¼SÄûŠx_ÿ[‚¼UWUYmñ±=žÔÞ5ñþÈ¿¯çZQÒ±¡¢¤¼•‚°ò\`™ufÖ™Yç†uc4è['f˜ubÖ©aݸÒnG÷w}°¯­{Eë²¼S”¬+_—ê,0í·Øˆç$/ådÌK’EÖáÕvO9ŠYžlÜõQ¨·+Y×Û(”¦e¼fxÍðšá5Ãk†× ¯3Þ14ôñŠáÃ+†W ¯^1¼ÊxÇð&…»¼1ïjŽO:!„àé ÿž t“ƒÙ ñ£PÑ[²®·Q8ž‡SÞÝ<¿]:®ï$OŸlï£òô^jòqù½)ƒòsÑå]¢|¼­åƒå£”ûo‡ÙÛaöv˜½fo‡ÙÛaöv˜½ÎoÇÓûo‡ØÛ!övˆ½bo‡ØÛ!övˆ½ÊoÇøIp<Õ½KX8~˶XßIžv´ï£òô^&÷åÛñŠoG~zú¢¸k{ÞŽòž(ôìúK¯ìÓ¿ä¥Uá+ÓäKþû¸ø³ü{’[i²Æ—ü÷}úYÞ8øüyûà3gÎ œ83pn€ûŠÃœ81pbàÄÀ‰SÜWˆŒà^{e×ÁÅù•´ÁÕ&Ïp¯ .Ëß5Gpµ#çn eÓsO »P6¥¢ŠBNù—ü÷ùôgy­Úâ+±æK;v®¥§ÿÞ¶å,oìnÿ_^x}¼fxÍðšá5Ãk†× ¯3Þ1,öñŠáÃ+†W ¯^1¼ÊxÇà9=· » žSª¨*dóG¼µùôo,µúJ¬‰xk=(#ÞÚ1â-oŽœ¿ä¥« qƒ¨ëßå\é{–ÿ.çröuü%_:QUϿ˒unÿ/'ûKÃdÄÝŒ»w3îfÜ͸»Á}ŒÃÇĈ»w1îbÜŸ‹qWƒû €#÷x'<în¯¹¿æJßûÈý5‡ÜÓ9ýí¹Øo­üí9@—¬k´òˆÜÇ0îçrÕ»žû¼©3:ÞGåéãÿ•~ïA~þñ/Õcb³Í±ÙæØ¥hÝÇk†× ¯^3¼fxÍð:ãƒr¯^1¼bxÅðŠáëŒwŒ½~.u¿Ûáù·ÍñŸžò±ÞGåéc„~¥ äç½T¦Í6Çf›ãë__»w;¼ù¹ÁÏÝæxþ±Î8=½thå)Ê/‡ü’ÿ^y–7úký¿¼UûxÍðšá5Ãk†× ¯^g¼cTíãÃ+†W ¯^1¼bx•ñŽQõïk*îhççî^w;ÚùÇ&éé¥#ç3Þ)ã­•CF¼µrȈ·U—ç2å» ×:(É÷ô³>¾?ƒ¯åß_»súÚÝ’üôë]]*=ú’·Ršvä¼°#ç>w3îfÜ͸›q7ãnÆÝ îcîsã.Æ]Œ»w1îbÜÕà>èå¹_ÁÝÞmíŸ#÷WâþU†¹¿÷×–ä§0ž¹Ç¿½—µ°#ç¥Æ×盤»0¾^ÿ¬]ܯ,kýéóz’’¼•µ²#ç•9¯¥hÝÇk†× ¯^3¼fxÍð:ãƒr¯^1¼bxÅðŠáëŒwŒ½ëóuï]ì½Æûrqs¼²|¬õ§Íñ$%y+keGÎ+;rÞØæxûåcùÏ´¼“|ëDÕ ážå½¸¶•âÚÆv¡}ƒÍ 63ØÌ`gƒÇȲ±í^ß`1ƒÅ 3XÙàqmߨ¾jûi_u6xÊ—×ö TSFƒË«ë~9ÚOÕrÈŸkçÑ~ïÊÓ{‰;;½ë[gf™ufÖ¹aݸ"ö­³NÌ:1ëÔ°n\ë.[ÙdëÆåâÇV6ÇäyÒä»òô^YÜ^ZÒ®û>Ìs1GḾåœÒ"'ùš‚ý~“À\ŸÁªø½yüX—³$yëç`§8[ûÜ͸›q7ãnÆÝŒ»w7¸Á¤Ï]Œ»w1îbÜŸ‹qWƒû ¯;¸Ìs1Ýášû+q¯CŽtçòzž©¹¿TÜ4?è%ëzB;:*a|zÿT—ó皃Üçÿj^K üù÷ÏÏ•Þm_r…üå»@z’ÿÞ¡ú,oe5L¬Q gÎ œ83pfàÜ7RN œ81pbàÄÀ©nˆ„×àr)Û ÜÁ½¸1>€ËíM•äçc7“®šÀUw¤S©QË4]¡ÙNò5Èïʹ>òøjß%žO¬×ÉTêu2sÈÌ!3‡œç¾Cb‰9$æ²Cã*xÝqc.žŒ];ôŠEy\‡î2ˆ'Ö´bJ=:ɇýªÖ|ä­c£“¼õµ+t 0±¶Ày3çÍœ7sÞÌy7œWD¡„༘ób΋9¯†óãJ+”Ksíü+:å­Ã‹à|ùƒQè c*5/˜ü<Žâæ ã$ïÜAL}ë¿ä_ã(ŠÝNòN™åÄšL¬yÁTj^ðšá5Ãk†× ¯^3¼ÎxÇÀÔÇ+†W ¯^1¼bxÅð*㣟Ÿ‡ÉÜÜ;\ã-_¼µÖïï+ãÿøV™åÄšL¬yÁtYûg/f’žä¥¦"CÇÚ¼w£0_'r¿‹Qu~Ìy¹ÝcÍìFaf{¬>83pfàÌÀ™3ç¸1öÁ‰'N œ85À1À^̨ àb+¡lW¾Q˜¯‹"ÞÅ7?æ¸Ýngv£0—Bë0-¿+ ¦M1™.KAÿ®•üO¬äÿ#ï²’ÿ‰•üpfàÌÀ™3ç¸1”±š}N œ81pbàÔ7†2VtÀÅ¿¡è>€«N1¹÷:\«šŸXÕ|We¥ªùéº0óOõêj}Nß¼ eëc3ŒñãñZ^«»õžä~ë'yëâlE-å¦RÕ<Àk†× ¯^3¼fxÍð:ãÃb¯^1¼bxÅðŠáëŒw ž×x_Õ›¾õ9Çú.x®kÆ âµ¼V5Â;e¼å{Æ•Ý3®¨¥Ü´¡"¨“¼V¡$ÿ:ŸÙ‹ù$j~’Ÿ½ÛVÜ_nl¹ÁÙÿ/'ûË AîfÜ͸›q7ãnÆÝ îcÞPà.Æ]Œ»w1îbÜÕà>è Aî¹JIþuœ»3y6ÔIý’û+sÏOomŽ70Æ:rÃøeµ÷ß‚öZߟ;6ßÔ2Ÿäç#sÌDX’üH÷/ï›0¾_ÿø>ïQô¶ŠuzwÂ8ë-¸›q7ãnÆÝŒ»w3înpÃxŸ»w1îbÜŸ‹qã®÷1Œ_rÕœ¢ý¹uûM-ó%÷WæžÿñGº®}ß„ñkî/‡Îï{”Çtà­bÞ0^jI2]•ªÿóyü.†ñãÇqFJòNgØé`´Ð$`¾—“@ÚwÞÌy3çÍœ7sÞ çÇPÖw^Ìy1çÅœs^ çÇõø²1Fv~\ÒŽ§k)É;­N§ƒ-ç…Öó½üy9×ûú3+Ý ÿÙ“¼ön*ȧtþ}k‘þñ­b=±Öb½%€ófΛ9oæ¼™ón8?,çÀy1çÅœs^Ìy5œ–óà|Ì@yíI^[äSÊù¾D›’¼S¬'ÖÝA¥ö šžS»nû?òVÁÚIÞ™ (ÖžA¥ö À!3‡Ì2sÈÙ¡qyì;$æ˜Cb);4.cÓsÞMNxp¨Zyª¶gkÏ ]î…Þ{m´ËIÞ™{ú‘çJ„š¼µ@‰-P*-P}ƒÍ 63ØÌ`3ƒ ×·¾Áb‹,f°˜ÁÊËãeO…hð8`$\¾ .¯®b««Øêz=,~*¶×’Ÿ[#½+òVïI¾7ŽGÿÊÉ~ºo™ufÖ™Yç†uãŠØ·NÌ:1ëĬSúq­»® ŸŠº®­{E뢼•׬«ž0ëÆ%-LêÞjU yoMšÙߌ*ìÄŠÅufÖ™YgfÖKZß:1ëĬ³N ëÆ%-Ì^ßj™îÁºòš4³c²Õy©T²¬ë:¼?Sí\ËO÷c2™ž (ßGåéßAy­U<ëºþrz×2ÒÅ*ž?òœ¡:ßËÉzÜçnÆÝŒ»w3îfÜ͸»Á} &}îbÜŸ‹qã.Æ]Œ»ÜÇHxÍý5Õ²÷˜}0$“é¹Þú}Tžþ½ƒXkåÚ×Ü_‘{–w2Ò÷r/•këzL²‹©lú­àsL)?ÉOçTþ÷oŠ^á$ürî?r…ßågIä­›¾•¤¯,÷Á™3gÎ œ87À´N œ81pbàÄÀ©nŒ„×ÅÓ.æáéÇâéüôó‘~Ÿþ•¸Á½>ঠ®|¡°² …µʶË;­sŸ°±Œ"ȇÑW¥Ë²6ÔeY×E»ký OòÖð†º,‹9pfàÌÀ™3gÎ pc(ëƒ'N œ81pj€ƒÉe™q7&niïöªô<àª=u]'ÁÁdcwãêy¬R°öçYw§£;»/ÚÙ}ã.Vj ¬3³ÎÌ:3ëܰn\ÎûÖ‰Y'f˜ujX7.¨ûó•»c®Ýí쾈qW©fRÇó…»OÌ_Ç:ÏI~¾ñ“>w1îbÜŸ‹qã.Æ] îc$<žÇ©Ü}ÿ:Æ}Nò³C‘{|z±S}zúw£Ä=?½U\u Ö*ÕÊúý<·týþÉ\Ë[[‹¼µµ0«V»Ùßnö·»ñ·Ë9øÛÅþv±¿]¿}XÒ®ÿöWüÛ‡v,fEáo¯~»T3ééù$ïæñ$¯5*R’§h}—²ÿ‘Wª‰ÿyø–äqߺUž~nŸ ¢\ªØ|Ìø˜ñ1ãcÆÇŒ3Ÿqyìóã#ÆGŒ1>Ê|Æ%|z>ð¾ù6 |rC.%yú*½«p|RÍþëÄgÊ|ª-XŸj5—¯Ç:¯ÕÈ"4ÚÈÏ…Š·ß›l¹Ù,r`™ufÖ™Yç†uãzÜ·NÌ:1ëĬSúq©¼ž¾V—J¡;~.|½ýXfã¼]çí0¸8­í$Ÿ ©Ð–9È[—{.” N÷r²¤õ­3³ÎÌ:3ëܰn\ÒúÖ‰Y'f˜ujX7.iaÄsqfX°.æ°/s·.÷\(Pîå…%íz²«‹·s'yí´>ÊÓ¼ÛýÿüËÜŸ^í(o-¨3Ê3+àÌÀ™3gÎ œàÆå¼N œ81pbàÄÀ©n &×¥Á.^ppù‚+ÊÓˆŽÛ£„ù§Z¯%Ê[¡lF¹s.&{y¾©¸[—´Ã{UJ’>òÒ :ëä­û±ÂhÖÒßÞêíõW^ˆX}>f|Ìø˜ñ1ãcÆÇ™Ï˜ú|Äøˆñã#ÆGŒ2Ÿ1þ,Ï·‘w‹è’Ža^•:¢À'3Ÿ)ó)ï&—þöVc2_WîíÕsŸ a<ÉcJÓVzzgj„›­ª#ÊÓ‰¨JOo6vi´1Àk†× ¯^3¼fxÍð:ããZ¯^1¼bxÅðŠáëŒw ‹×Õ¹{õŒoE“¯ñ¾"ÞüôÎ ÿ6ùŒwÊx_ o|zk´±7vô¸±Ô£-õó®EÕ_kä_Ç%{ñè‘•íš•ípfàÌÀ™3gÎ pc$ÜØÑãÆ’•úàÄÀ‰§¸1ÆmìèqcYL[jì_‹q¿Vý:É¿(÷âÑ#+Ûu©l×; eûcá»ÞSiË«Òâ#ÿ:`YæZSÓ¼ÓLÉ;;¹ÜÙÉå^ x; x}¼fxÍðšá5Ãk†×ïwûxÅðŠáÃ+†W ¯2Þ1xî,xî]Êïz^¼Õž—x_oüÇ·Ú7ygÇ®;;v½ž¥¬­ïIwQÞªM9ØuâÁŽ]RTíã5Ãk†× ¯^3¼fxñŽQµW ¯^1¼bxÅðŠáUÆ;FÕëáÄïŽßš"ŽÙâ†ð¾æ4 3Ê[…5» =бëü~žç}UOò%e#¯ßÿƒühÜFÎ?ÎÕ’äs#ª~ä¹ÁÂ|/Ç®œ83pfàÌÀ™sÜ 81pbàÄÀ‰§¸!Æ]‚{epÃBÀ½Â¤Ô3¸)ƒ«Þ Î?|VúÛsO’­òôÜ“d¾—BÙô\ìwÓÃ~žPñÂ<=&¼Ým狯='ùÒØá}ä³%žwxs©yàcÆÇŒ3>f|œùŒ©ÏGŒ1>b|Äø(óãÏô\‘{Óx>ð©V\óyE>Ãkþ±yç$_›¤À§¼IÒ•u_ƒÆú™ky«qãIÞ9½›ïÊÈ k{iR7pÈÌ!3‡Ìrvh\]û‰9$æ˜CÊëÛ¥C¯äÐëäДª%‡Ê+Ì]Ç ãçKǛۉ“|ÿNz©£ø·à9-IÞ©œÍÖ7£;ÿ¿òÂúÖçcÆÇŒ3>f|œùŒ«kŸ1>b|ÄøˆñQæ3®í~¾u¿9à|^.~ø·Ï)ýã[害Yd1º6ŸgT;Ï¿]¼ýC4È;zçù·ÖñNò¥‘Œ6Ïh²ßÌZ:pfàÌÀ™3gÎ pc,šQå,'N œ81pj€ƒÔŒJjçù·Kì¸)ƒ«Î¸ àbŒ;ÞI¾4RÃæMö›K-æÞÎËåÙ{/Æ¢Mö›¯‡G¯K-¯ú$ïLöûÈ[Ã?fÖb.u„xÍðšá5Ãk†× ¯^g¼cX\Pá-À+†W ¯^1¼bx•ñŽÁsA…·—x_o”·f ^ã}E¼ùéY‚o5¯zfí,æë‚xU£êuEû4Õ%}äùw9—är£¹0Iúáéd‡×wÞÌy3çÍœ7sÞ çÇXÔw^Ìy1çÅœs^ çÇ0qÝŸAÕ0qÝ`!:å9LÌ%y§~f.Œ?xza9ßž_í¡à:È·Î]ÎÆîr6Ôhf €ufÖ™YgfÖ jß:1ëĬ³N ëÆq{^‡Bû ß:—»œØP£ý¹TO?_WänÅÊ¿yÿq,ÎäßÄ%¤<¿×$oÝAììà†ÄÏ¥‚xÀÇŒ3>f|Ìø8óç>1>b|Äøˆñã£ÌgŒ×%é[±xîšÏÍX©9È¿OH–Pð^“¼uq°³³VS>hÞá|°’ãòHSïbÉÀ‘:]_ÕÍK’wjÊg6N|fãÄ83pfàÌÀ™3ç¸1hB"'N œ81pj€ƒÔF'Ϋ>¸èÁçûGê-v}9>§¿½Uá=³‰Üsi"÷òëdæ5ɇîD¥ âåýÓGž†þ&K¡.t/=½Óó#om’þÊŸ#àcÆÇŒ3>f|œù ðã#ÆGŒ1>Ê|†ø³ü:}}Mò¡=W)ƒ8ðI›$ -B–Bùô^zz§keàSÝ$-Óog»C ðG>~Z•ò¦Nò¯áÓS-oê$ï\Ÿä­È2±ÈRª«|Ìø˜ñ1ãcÆÇŒ3Ÿ1²ôùˆñã#ÆGŒe>cd™~»€òvŸ—j©G×|^‘ϸ¶OèJ:ð)G–‰E¡Ô£“|MçÚ{E^L Œò¯Ž7{10‰&¡æS IÀ™3gÎ œ87À±H(ñ €'N œ85ÀAJ(oêÜ+‚‹òbzm”õ˜Ú‹1N,Æ 5Ÿ àÆPf¶Ib%ô +¡ÿÈ[iW‹Y01Û¿°êö…U·ëܰn\ÎͶ¬ð|a…çÀ:5¬T³¯~V¾°šð`]yIsiI+Œ&Ÿ¿¯Á‚<Í?g¬ýùŸ|-ï}Ï©óÂe¦ï?OWý2þ·ÔÖ㙭Ǭr€3gÎ œ83pn€—ó>81pbàÄÀ‰§¸1˜ÌÏíMæï‹ç \]‚{ÀM\ùë|NMP.Á½Nঠî•Àå§·"a©r|¹®==ÖëÖ‰ÿ¼›sûü_ý­È͘ƒ¼uNµ &éËò[ÒŠ—$ï4I_Xáù ϗRá9x;ÌÞ³·Ãìí0{;ÌÞ³·Ãìíp~;Æ Ü;ÄÞ±·Cìí{;ÄÞ±·CìíP~;ÆÈ]öžÞŽ×éí˜âÛñŠoÇ»}ývÔõÔS>¼1«ÎɺVOù…UÍ/¬j~)Tß4›?É—ðÃÛ\y§ßç²þò³þ3ïNòÖaåúü³.Yw1ϨpXÉjöw3îfÜ͸›q7ãnÆÝ îãW@Ÿ»w1îbÜŸ‹qã®÷1¾úÜ4ÝÜ_C_Þ{’wúžî)@Ÿ¹O™{ùŒ{}Ð%ë.›θKÝ– uG]¶Ça¿w\y±o°“¼SZü‘÷öÖ[)^n¨‹)0ØÌ`3ƒÍ v6x Lê6 3XÌ`1ƒ• #À†º‚^üŠéÛ­«äêÜ`py“´?º»ûÒ߯?šn·×w’׆¾.A^úªôôVyí²³MÒÎ6I;Û$õ¹›q7ãnÆÝŒ»w3înpcQŸ»w1îbÜŸ‹qã®÷1DîÏ“1ï¾ô¯¹¿÷×úNòÚôçô¯MVzz«6xÙÙ&ig›¤½ÆŸJ#Ç–rù÷ÏÏ)¯ÀIþUÀRͳ?X*ÎÁ)ksœ7sÞÌy3çÍœwÃù1”õs^Ìy1çÅœWÃùq=>~+ôúáç_Éù1ç¸.Ǫ¦ª,›å`Ëy©SÄz=€ÜÅvzë;uZy¥«ê O­Ç3îky1ImNòó·Ü6×veëe³¬¬ÑÄZj4ðšá5Ãk†× ¯^3¼Îx‡ÀðŠáÃ+†W ¯^1¼Êx‡èw‰÷•ñ à3ˆ6%yj&;^D]Ë‹‰¨s’Ÿ7\oüÛ[ !+ë’±NϹÛw¡azìLv—#º²&ëu“€y«etœäé{SµÇú+{,Î œ83pfàÌÀ¹nŒ„}pbàÄÀ‰'N pcŒ›ž«%îêé±à]ÒãÊúu\ƒ{Epùéiƒ¨wEÞÚ pc(»n°»â®J'$¥¤ˆ¼v¥¬#É;I'yg"ÐÊújçÍœ7sÞÌy3çÝp~ &}çÅœs^Ìy1çÕp~Œ×-ÖbcÙkç_Ñùq9×où'ç§ì|5¿"8_^ÎK­)Öë&s1Uý$/¥®ÎsKH¶$ïäšäyË?•äêœ÷™÷¹3úxÍðšá5Ãk†× ¯^g¼c`êãÃ+†W ¯^1¼bx•ñŽÑïº É\Ì/xc~ù<y±‚kKòN‚xÀ[ð–ÏûÌÎûæçÆó§ æ o%E¬×Íü®%E¬¬?ÉGÞ;°cíM€ófΛ9oæ¼™ón8?Æ¢¾ób΋9/漘ój8?†‰ùy“t^i5y+)âÚùWt~\iY‹à|y“Tê².χÉw›¤å—Ϭÿ¤È­…2ý©òô¯_Ʊ£ÁòÜó¨Ès·’u½MR©ÅÀk†× ¯^3¼fxÍð:ãS¯^1¼bxÅðŠáëŒwŒ~Ëó…ÑÝ&iùi“4f®….Såé_Á3âÍòµ<—çN‘%ëz›¤õdžvQ¾†/¾qÚε¼ÕBò$W¸ ž\’ϓ˕mÑX› Î œ83pfàÌÀ¹nŒ„}pbàÄÀ‰'N pcŒ[l!9%ù¶hãà«ky«…ä%¸W—åsçqeûËR§ˆõºÎ~*vŠX¯ëì—¹˜ß·ýøÃR’ŸXÓZÜ nhVÉGÞ;.ÜX(ëƒ3gÎ œ83pn€CYœ81pbàÄÀ‰SÜÊ®;fLÅŽ×à^\”C™’üÊ"¸üôά’®|Ö¹•BÙÎRÕ÷ßNK†Q'ë¯eúééãÏïu9)uIOïíÊv4ò#ïu·³„ö>^3¼fxÍðšá5ÃëŒw ‹;K{ïãÃ+†W ¯^1¼ÊxÇ๳äøý·³Îa¬Íúk/ôô1Ä^擜ñNoy¸£a–où¬óºc€§bT=®¯Ð—0"Ë[Qõøåwùús8É[ăEÕƒEÕ£UûxÍðšá5Ãk†× ¯^g¼cTíãÃ+†W ¯^1¼bx•ñŽQõº©HÄ;††ã:Ë&áÍòVT=~Šª¯ÃIÞÚ’,ª(ªnïŸRÎÆ~'yüaÝ=~ä­K¸¼5Wó¯|ë̬3³ÎÌ:7¬¢°NÌ:1ëĬSúa¥½¶.g*= ‚u¯dݰÚëªWAÁºêñ[°n\Ò®ëÖÏkï›Ë˜mº~‹…“|o$El×uëÇ»v~v’Ço…ÒÓ[_úå…u³ÏÇŒ3>f|Ìø8óç>1>b|Äøˆñã£ÌgŒ×í"Ÿq½æó*~k>ÕL†k>¯È'ËãÇréé½e=ÿ2n2±7¥àR–ÀGÞ:ÚÄBƒž‹ýæ{9ùÖî;oæ¼™ófΛ9ï†óc4è;/漘ób΋9¯†óã:¯çuþ&µøÚù—‹íÁùê©Æ&¶Pë¹öt¾—–s?ßô­9éë$o}éûúKe*F³h` Xç…­Ôyð1ãcÆÇŒ3>Î|ÆÐÐç#ÆGŒ1>b|”ùŒÄÏWÝkÎÔ |Ê_ú¾þÒŸŠñÇ,þ˜ÅÖ¼`›úeŒÍ >òVSžuøÈ{§ê¬û°ÎÌ:3ë̬súq=î['f˜ubÖ©aݸTο-•Cý°®šX³±þ`]ùc¹TÀ¿-—}Ñ—ør9É÷ï‹Rþ̶üx¿$ygXÜIÞZPTŸñWNÔ>83pfàÌÀ™3ç¸q9ïƒ'N œ81pj€ƒÉe9}÷’“|ÿ¾È-e³p9›%ýã[óÖ¸r([P}F7†²õ_ÞÖßF| cSOò΀ž“üH¿Ë©òÿÊ?\%ð‘÷ö¬j€3gÎ œ83pn€CÙŠº?pbàÄÀ‰§¸1”­¨ytÇå “G¸ê¸œ.O"Hÿø¯šŠ.Ê{»²RÕü¶¡Ys'ùüüÃúwÒðµüûKr® ‹Û®kxÏY¿·7 [ú’¬Ý€lhÖÜÆªæ83pfàÌÀ™3ç¸1”mh>'N œ81pj€CÙ†&¿p)”ÁMÜk®nÛ®«æ#¸øŸ¶Îeʆ&¿m¥ªùUÍo¿·_“|OyïÊÓ+}ÜÿLC}ß¶³ Ÿ…2V5¿•ªæ7V5ðšá5Ãk†× ¯^g¼cXdUó¯^1¼bxÅðŠáUÆ;OV5ð¾”ök’ïi#÷®<½4…aêûÞòåÞ΂'«šß®ën7Õ:„nGº9~•êûvqvÜœ}S©ð8dæ™Cf9;4®í}‡ÄsHÌ!e‡Æåñºü9:4þÆ”dð*åìÎå¸9¨z^aöë‚įíMQÄI7ÄKNÂ=ÉÏÛæ÷^ëû¸¿œ2ë$?}x;j'X'yÊA¼»ŒùÈ[ÓÓvVþ ¸›q7ãnÆÝŒ»w3înp¢à.Æ]Œ»w1îbÜŸ«Á}ˆqûkª•£î¯Ä}HF¾äþÊÜãÓ‹C©ä§?1sÏOO¹Ìw7I{u±—ªæwV5¿Ou^wUóû¯U¿ò¯}ú¬ÚùÙΪæ÷ å÷í‹Ã¬œ€3gÎ œ87À”ÕÙpbàÄÀ‰§¸1²ükp¯.Ëke9ò¯3¯.>½UWÀU“"¸1”]—,ÏÅQ'ù\:‹~yñ3=ý+½v.6 8É÷Ζ’•éçÍœ7sÞÌy3çÝp~ &}çÅœs^Ìy1çÕp~Œ×eús±p>_¼ƒ¼¸±IOÿÊ Ÿ‹M‚óåM©L÷eÆÍ×ï»åüÇ íCCû“¼3:ô#ϵ·Šüç 탼s³¿—Êô3>f|Ìø˜ñ1ããÌg }>b|Äøˆñã#ÆG™Ï@.Ëô3ŸqõOé§¡'|àS­ò|ªåBOy;ÁÊô÷¥œä…\ÎÿTùŸäq¾TžÞjs’·Î¼X•?pÞÌy3çÍœ7sÞ çÇh0£D-༘ób΋9¯†óã:?£ªà|¬¥Zç_Åv,Áùjqp¾¼Î—ZìKzƒk7Ës™ØM²ÒGÞ!¹_O)_¦Ú4ä}aÑ`AÄûÂöK)fôñšá5Ãk†× ¯^3¼ÎxÇÀÔÇ+†W ¯^1¼bxÅð*ã£ß’‚\íœky.½Éq x«C+¯ñ¾"ÞüôVð\PqÀ[Þ$­h0ó¾þ˜Ùÿòïߥ‹‰+j²y’·ôV–Àº%pfàÌÀ™3gÎ pc$\Ñ`fN œ81pbàÔ7Ƹ fàÊWA×à^.&¬¨_gW¾ ZYb@©[¾=_’Þ4|>É; >òÞ‰ÛÆöX[)fô2sÈÌ!3‡œç¾Cb‰9$æ²Cã*¸=_ˆß´•?–7vÒ´±åý2ÄNÕ4Ø=݉½.ç?K’·v¶@±2ò½TF 63ØÌ`3ƒÍ v6x\ßú‹,f°˜Áb+<.—¿¦júçž®e¯ ŽOïEìlueÅÌûÁ2Ž´ÿy•j“Ü”äç‘ÞµRꓼõñy°~6|/Ub¼fxÍðšá5Ãk†× ¯3Þ1²,©W ¯^1¼bxÅð*ã#ËÁÒ˜ŽtÆñ*ø?æÁ*ÉÏÁ3âÍOoíYvÀÏF€ïËߥŠíëŠÜµXÿ‘·d7ªw8Øñƒ•ÐçÍœ7sÞÌy3çÝp~ˆEÀy1çÅœs^Ìy5œÂÄ¥ó¯ìü°Ö×uàk±<8_MW=Þ¨Þá`ãÏR!÷q]Vú‡—3¶÷äñ3ën=žÐéGÞ[Y)5°ÎÌ:3ë̬súqAí['f˜ubÖ©aݸ"^—ë^gë¦hÝ+Z7.*º· Ö•—´RAï¡çñë÷Mùµ<÷g¼ûBeƒ³?òÖÑÉ_yaåê;dæ™Cf9;4.P}‡ÄsHÌ!e‡ÆuHϳÖï´†kyn“y÷eÆF‡Ê{à_GÙ®AÞºx;Ø0æƒUy¥*Oà™Cf™9äìиÂôsHÌ!1‡”W˜_¯AÞº»:ØHàƒÕsJ)e¢¬Úï`Õ~yo…™K+Lß!3‡Ì2sÈÙ¡q…é;$æ˜Cb);4®0sJ1*%1¬Êí`UnÁ¡ò ³ j擼4dÍk’Ÿv›þ÷ïÅEáà×ú'ù¹1çÛ×÷7ÿü³ä_ûÿ–W¥àI~4.×V=w”ªçÀÛaöv˜½fo‡ÙÛaöv˜½fo‡óÛ1F–U…ƒ·Cìí{;ÄÞ±·Cìí{;”ߎ1ª.¨r=¼±ôÏk’ŸÏ1ãÛŸ^,ýs’Ÿ[ÿ¦·ãuz;¦üv¼ÒÛ‘ÿñG#3à`¥Çu!Òy.Á]ƒ“ã×¹«ééùg½–äÙ#y/(¯¥ Ü7ØÌ`3ƒÍ 63ØÙà1®õ 3XÌ`1ƒÅ V6x ×%oÉà±+Éñë„ß)ÈóÚ¾–äÁ)Áàòêz=It×§œä¥2ÏyOòN÷©ãyèíÒö<Ê`¾—“{þ¾ófΛ9oæ¼™ón8?®Ç}çÅœs^Ìy1çÕp~\¨¯ÇßFçǵnû­6yÞ“¼Ó}êxž_{{°¶=Иïå…åüzætßöÇvþ·ë1+ý;XéßÁJÿŽRé0ØÌ`3ƒÍ 63ØÙàqqî,f°˜Áb‹¬lð¸_OQëÐþ88âve¥+ý;Xéßq<çÞ­®Çsû¥$³Vö’<ö@Š’®åßǘËõxbïk’w†‹Ÿä­Ëƒ}ª÷¹›q7ãnÆÝŒ»w3înpcQŸ»w1îbÜŸ‹qã®÷1DÏÉÐw!òxž¦±”äq4Ó^’Ç^êCuâµüûBâšûëÌ}Êܡa»j8 a|z¿Ÿgžå`r–¯I¾UäMÒYÞØ$äMÒ¿òÇxI 63ØÌ`3ƒÍ v6ø;0ƒÅ 3XÌ`1ƒ• þŽÁàW4ø{ ¿¢ÁQÞÙ$%ƒ‹›¤dpq“4½§3·$ß~ߦœä½Õµ0r¾—÷÷Ä:3ë̬3³Î ëÆ±o˜ubÖ‰Y§†uãZ7ý˜¿%ùöû÷f²®¼ÖFÎ÷òÂ’v]”¦Oýón)ÉÓÏÍL‡“üçqñƒü¼_óQ:Ó?Ë[ ªH˧³¼õ¹ªÒ²ÛÇk†× ¯^3¼fxÍð:ãCC¯^1¼bxÅðŠáëŒw _×xÓè¹×¦$O—Â73ÞÜòÉI~>T‰xóÓ[ÁS¤åSÂ[Þ(ø¹ýnÖv_¶¿ù:¤Û+òïßå\©z–Ÿ[±}sIG·’¼Ñpê$ï$>ý+'»œ>w3îfÜ͸›q7ãnÆÝ îcîsã.Æ]Œ»w1îbÜÕà>h?7ÛÒM”ñe³­È=Ê¿ô\-¸¿"÷,×![IÞhõ•¸—7Ç.…ñ뉒ÖÒ<‹³¼vò’ž^jõý·Wj·v·3;.œY í;oæ¼™ófΛ9ï†óc(ë;/漘ób΋9¯†óc0¹vþµ–æz$çóaåäµ¾÷z'yk»6³³Î¹´œ/ìr|ù-9þ»€ÿ$契å­Ëñ…6.¥U{a—ã}ƒÍ 63ØÌ`gƒÇÅya—ã}ƒÅ 3XÌ`eƒÇ5xa—ãËoUß•ØÉàb†Q2¸|9¾°3¯•´G9ˇ‚ÑÚÇòúۇô$ùÜYœQ-ôIÞ[œ×Òâ¼’%„3>f|Ìø8ó×ö•´!|Äøˆñã#ÆG™ÏVÒ¤#ðyE>Q^û<ŸÒ?>÷e_KOor'>åȲ=õä6gùÞ9†ÙXhØXhØXhØJ¡¡o°™Áf›lf°³ÁãÚÞ7XÌ`1ƒÅ 3XÙàqqÞž¿Ûs›Œdpùìdc«ëÆV×­®{êÏ]K¢ÚÙ1óÎŽ5v¶<î¥å±ï™Cf™9äìи¾õsHÌ!1‡”¨=õx¯eÃììxug';[av2ð\,øýäãüÁëÍå­cÛƒ}þ)­v w°[¸ƒôÁ™3gÎ œàÆõø`g }pbàÄÀ‰§¸1Lìá¹¾öû;ÖA>Îò¼>dX¢¼u|}°Ïà#%vÖ®KõµÓsyáÍ铼õ±<±Ù‰ÈN¥Yà™Cf™9äìа8‡ÄsHÌ!e‡†Upz®1½™œª~,O¬Ætb5¦Sô·×² >òÖ÷æ„æCþ+ß›ào7ûÛÍþv7þöqUèÿíb»Øß®Æß>þÞÄƽvmþöê‡Ã„F,¦¿}üYë¹QòMEÈI¾|x_¿ûäÅþJò¯ ñ¥øÕ#2³ö$oíÿÊÉšÔgÎ œ83pfàÜ7.¨}pbàÄÀ‰'N pc4ÐsË󛢊.MîsÇY(É¿Š*–â§«È´à®ÊT e¿Íaü£5È{{`³=°ÙØ¥˜ÑwÈÌ!3‡Ìrvh\œû‰9$æ˜CÊ«à³<µyol¶6ÛÏÏ¡ûæÂè$Où7ÆOòÞ5³ŠNë̬3³ÎÌ:7¬פ¾ubÖ‰Y'fÖ‹ÕüüÉvsm¬‹Ì^k÷Öº™­u¥Ú£iy>Þ¹[Ò–Ë q+Uˆ+È+Ù½&Ey§'ÃGÞ;T\ØŠØwÞÌy3çÍœ7sÞ çǵ8ób΋9/æ¼Îëñò| z·/—} ¢óãxù)Wýìü”/ïvœ»”–ó•}¡®Ïß ËÍr~]ë1Ç_†ƒ|ÌâgSs’Ÿ?«j £'ùÚ¹¡ZoΦ øR­Àk†× ¯^3¼fxÍð:ãÓʾôûxÅðŠáÃ+†W ¯2Þ1ú­l7²>ïF–›èw]èñ9Xï+á}ÍI~±oüÛóVê¨È/Ο QõºŠãO8ùÿó?ÍAîó5¯¯ôƒ òaŸþªÔ‰}ä­Dá‰Õ‰MÛ$õ7sÞÌy3çÍœwÃù1õs^Ìy1çÅœWÃù1L\;ÿJ÷Œ'ç§èü+:?.•[:ÚzUJ΂óÕ\Û‰•œM[i9ßQ¿iå±W䭺ݓ¼µïìÌkgËùŽñçÍœ7sÞÌy7œ—óuè΋9/漘ój8?.ç;jÝ3íÏsmöмUœ/¯Ç;;óÚKËy¡¨ènI».*šÞµé7Ó‘zÊ_ç¾÷$o}³2¾é`‡VGiÑïó1ãcÆÇŒ3>Î|ÆÐÐç#ÆGŒ1>b|”ùŒ¤P{w·ˆ^×ÞE>ã±Ñ‘†*\_šœøL™O9þ°Ú»é@ç>ºžù77 'ùRȼKfNò½”ª›žþ]ÔZ쟡7ºùÈ[ûŒ¿r°ÏàÌÀ™3gÎ œà†XÀ‰'N œ85À AêÜk.îr¸˜i5TZp99>=ý»Œ¼ØEot9ÀU7IÜÊ®ËøÖâ䟓¼ôÃ:Ö ÿþ\ju^'ùWÕÉ»ʦç‘Z¥¿½Uç%V{ À™3gÎ œ87À¡¬N œ81pbàÄÀ©n e×U¿kqxNCÙ±ù÷®l©Õy]ƒ{EpñŸÇÓ•þöV—J%ËÒóyÅÝrþSå¿Ã²‚|Hò|U&Ëê×Ù”K’ŸE¶¯/—žÞ9m”X eÓbÓàµ1{mÌ^³×Æìµ1{mÌ^³×Æ×f ãý×Fìµ{mÄ^±×Fìµ{mÄ^5^›ñ#Bχ¶wô·bñi˜z^›—jvõë„Ýô·Ÿ¿Aòk“ŸÞ92–Ø' +UW©T]~ÞÜ…q?ÎTxoy±D”+]øì%yg€ŸØ$\༙ófΛ9oæ¼δ8ób΋9/æ¼Î뱟7´wë±'„¼·Š¼Ø¸$Ê•®/÷’¼3ÀO¥y¬šë1íAÞ*ì+ìÿÈ[GþŠ Ënß!3‡Ì2sÈÙ¡qyì;$æ˜Cb);4.cóoG¦=È[ÕøbÕøÁ¡r&ÂUáì¿ß©´+Êk³“¼Ö8{=’Ê|Ƶý²1@æ3®®Ëý哼Ö_þÄgÊ|^‰O~zŒ,®È{‘e}n†qw¦¿þÔ]è?9nl@éG~‘óRXÛKE÷À!3‡Ì2sÈÙ¡quí;$æ˜Cb);4®oësã“»CÉõ·FTcz“*¯0…JÒ»ï·í§Dˆÿäm颤–;´±4Ø¥Á²êi༙ófΛ9oæ¼Î+bßy1çÅœs^Ìy5œWÚBõôÝ×Ôö[öΘ~³¥ûµZúÍÆ2I7–IZªžÖu=ãŸâÔ¼“|I7Úë÷GD§ ñ»j½¼Ö|mÛ’¼S»-6T¥© €3>f|Ìø˜ñqæ3††>1>b|Äøˆñã£Ìg ×|^ÅQwÏ+M|ž÷$O™wÕzOlqxâ3e>åÔ 6UÇo£†¦w’ïk´ƒ]£lm/•R‡Ì2sÈÌ!g‡ÆÕµï˜Cb‰9¤ìи¾¿ µšÞI¾w®Ñvv Æ×å….æ]ùý8Nü®ÛõGÞšvå÷eˆýÊ„˜+ÿøV–ßèÎlƧK3>^3¼fxÍðšá5Ãk†×ï°¶¼bxÅðŠáÃ+†W ¯2Þ!0]ã}¹˜¦æwÊyUšƒ¼ÕùZ—x_oüÇ·’SüFWˆf£a==÷»¹<É·Æ¡ŠÙdY³É²fÕ½À:3ë̬3³Î ëÆhзNÌ:1ëĬSúq¥ž[ÒÝ\'몧fcqÍÆâºTcj6÷$Éêû÷½PÇû›¡ªûZ>w]ÒéHÿøV‘èIÞZ•Š»jû ±}†J«6›½ Þ³·Ãìí0{;ÌÞ³·Ãìíp~;ÆÀÄü‚·Cìí{;ÄÞ±·Cìí{;”ߎ1ö²)Â×oÇ+¾Ã†ðv¼ÒÛÿñcýçåõÂùí˜òÛQþpûpPªÿ¬m’Ä6I×åoG±KíI^j£9È‹…àJòئôŸ¶Î'Q—Z—f#>f|Ìø˜ñ1ãcÆÇ™ÏUû|Äøˆñã#ÆGŒ2Ÿ14\™Å.µOÌ»ÒäÅŽJòØ5©ôŸ¶N`2êRë뺸?Å®'yé—±íIÞéRû‘‹/ÕÈò\öx7ö#ïþ±™Øœ83pfàÌÀ™sÜ‹úàÄÀ‰'N œàÆ u îUœ?ÀÅ µíIÞéR{ î•Áeyºbº_À•]KÓȽ<çFÞ».×?¬%4Ûšç$æ\¾*­ý¼ü4ÉÀŠòÖ±ëòÜ-k*É[Ç®¬ÈÚ¥"kðv˜½fo‡ÙÛaöv˜½fo‡ÙÛáüvŒA¹ÿvˆ½bo‡ØÛ!övˆ½bo‡ØÛ¡üvŒ‘yÎê¾;v½~;^KèÇ7ÏI>ŒØ}Uúñ…·#Í`9¿S~;ÊÇ®ËsC½©$o»²òv_—&OÕÍñú[µÅ˜Ú²²ŒÏˡɶ£V»j6ÑÞ+j×ûWN6Ç}pfàÌÀ™3gÎ pcîƒ'N œ81pj€Cäu‚©º9^+|“ŠV–y îÁÅ|«ðÖ+jÀ¡,Ô”;…'ù÷/Ãé—á$ÿjU´j7V}°±êƒmO·RÄêó1ãcÆÇŒ3>Î|ÆÀÔç#ÆGŒ1>b|”ùŒñ'tnH|ÆEôšÏ+ñy9É¿Z}­ÅÓÕ%ðo,c›¤ýùn}ûä{)åÌA>¥^)_7ûžäñì㦻¤w–®º³MÒÎ6I}pfàÌÀ™3gÎ pc,êƒ'N œ81pj€ƒÔþœæòU~¦$ßKù—ò)57úºÜ÷$7*¸ò&ig›¤½ÊŽËF¯Õ9—'yéj~}'y-ù:=½Ò]埧ïIÞŠ„šîeÖÃ¥¯^3¼fxÍðšá5ÃëŒw ‹}¼bxÅðŠáÃ+†W ¯2Þ1x^¶qu²fÀÓoÖw’×jÒÓK­•^ëžä­Ø{ ©Vf}SfÖ7å$ ~—’|ø&.åå|ä­¦}óõ…šßh‡7³–&Ày3çÍœ7sÞ ç‡X4³n#Ày1çÅœs^ ç‡01³F Áù×T›%0¿ÓF®”«œ¯&[ÌoÔ+8?.çÓs…êÝr>ývE»)ÉS5Ë]­¼2LãÏŸÞª˜ JÖµ6Iå…˜ÑÇk†× ¯^3¼fxÍð:ãS¯^1¼bxÅðŠáëŒwŒ~Ósø]ô›~KÃØ”ä©”í®‹VÀ›&éLñé­…¹Ð¦d]o“¤ç†Dw¡A¿ý.‡ ïY?^ ¤§×~—ó’ä­=–PzÇÌš¾Ì¥¦/¯^3¼fxÍðšá5ÃëŒwŒª}¼bxÅðŠáÃ+†W ¯2Þ1ªê¹åÙ]hÐoQu(Ox«GoŒªsúÛ{[R¡Ü”™õM™¦GÍ?ö}X× ïÅ5£¢¼“¼×JO€Áf›lf°™ÁΑÅh0XÌ`1ƒÅ V6x\ÛF>Í?¶Y× ï­®FÕUÁàòê:³“À9Ý«¾Ò÷̵¼vc:IÞZœçÇ<¤Û“@Ö;df½C83pfàÌÀ™3ç¸1Ììô®N œ81pbàÔ7F™™ËÍ)Gá•ö×òZöÁt$y+HÍ™·çr¬wÈ\ê2‡úÿ£Ê–ß>³Æ°åyÿu®ýòVóya9 ¬{Ç\êÞø˜ñ1ãcÆÇŒg>c`êóã#ÆGŒ1>Ê|Æø:XÅø³ü¶Ë™ãÓ÷Bü9ó™2ŸrüYXVë!1_F½Úw‘å×ñöï$?ÒÙî»òôÊÑðëÏî$o¦UWÍ+êüûW^L}¼fxÍðšá5Ãk†× ¯3Þ1®õñŠáÃ+†W ¯^1¼Êxǰx÷5Ãâúœ,¸~'!ù‘nfÞ•§—.v^»“¼UWTÏ5¯¨mñ|UîýgR5§|KŸ•¯J±ÓGÞ L;üÛØá_ß:3ë̬3³Î ëÆhзNÌ:1ëĬSúq¥½ìÏ­—‹-í3^•˜`]y±ÚØÔVZÒöç’»UaO_¯”sä{çS5BøÈ/Þͧú^Zøú›lf°™Áf;<.}ƒÅ 3XÌ`1ƒ• Ñý9énÚÓWé+åíùÞù`d ‚Áåƃe?eè]j>òÜXp©<½Õ‹sfÅõs©¸lf°™Áf›ìlð¸º,¨o°˜Áb‹¬lð¸º,èø-ËsèÎ ~Mµ”ÁàòêÊJ¼—7ÊZB¹ë\+ñ^B¹kÞ>,Î'y§ïÊG^ÉŠø#IÞÉCZîŠmŸ×ö¿òçµà5Ãk†× ¯^3¼fxñ‘àÃ+†W ¯^1¼bx•ñqío9÷(à}ÍµŠø%TÄ'¼CX x«Åoºy>ã2Þê–g¹«Ç/DÕB­î͉ÐI¾¦ßåM©ü2ýx{ôNòÎÝïIÞ9PZX¥ý_98bàÌÀ™3gÎ œàÆHØ'N œ81pbàÔ7ƸBÝûÍÉX÷šk…ëËôãMì;É;7±\uë·°º÷n e¬¼ý$/åQ åí‹Òϯ¶ÃÓOóµ¦eOòÎô‚…•·ÿ•“PÆ ×83pfàÌÀ™sÜÊXI:'N œ81pj€C+6ળиjNR—†ÍÁM\uŠÍ¸1”ùyTäͼƒ“|ëì‹ÌöEF©Gå$˜ô­3³ÎÌ:3ëܰn\ÎûÖ‰Y'f˜ujX7.¨~žÞyÓu?XWþ:7û:7J= ÖKÚŒ:ô.3ê{¿<¤¿ëлüX•:ÔÞ-¬ü#o5é8É;Wóå…ewFm€^3¼fxÍðšá5ÃëŒw 3ê5 ðŠáÃ+†W ¯^e¼cøšQC〷Ú÷>à}Mµ†ÆË•çsúÛ{÷/3jð–¯oXMùIþ•-¾×Ú£,Ëocš¶9É[aqynÖ0Uä­Áhåd›ÂŠÍ83pfàÌÀ™sÜ Y:'N œ81pj€c+O¿÷Šà¢¼6m›“¼¤–çö(SEÞŒÀ¡,Œew1”­é̸”þ¼¬ìeEýM>òÞ­TF 63ØÌ`3ƒÍ v6x }ƒÅ 3XÌ`1ƒ• —ðëRêhð¸­év¢”þ ._¬¨EH0¸¼QØXöô†z¿ŸäñªnºIÛ®?nŽçÑ䃼SÚ²l,ÏkckûVZÛ7–=½¡Þï¯^3¼fxÍð:ã#ËÆ²§7ÔûàÃ+†W ¯^e¼c\ÛXöô†z¿¼¯„wLLÛ®70 oüÇ·ŠŠ–e–m,ª^W#{­ s>Éçô»\nÂb(f^‹É×ûs¹ÝT’Ÿ‹ÎO¿Ýpí,(ïihl-(ïìô®ÏÝŒ»w3îfÜ͸›qwƒû‡ûÜŸ‹qã.Æ]Œ»w5¸úº)Bä>F™kî¯Ä}Œ°¡§ÂZÌߟ«~§’ü\Źǿ½ß÷4=ºß÷R?ž;ðÝ…ñãúgíbiñq]U­¡úiªûŸéØ’¼UCu°ƒÏãæg]Ø—ÚF¼fxÍðšá5Ãk†× ¯3Þ1(÷ñŠáÃ+†W ¯^1¼ÊxÇØ{<÷ϼ‹½×x_.–×ù›Õª­ã§Ü”3Þ)ã-_ûìÈù¸‰½ÏQu}£z¬“¼”3æ5Éc:ñ\yzk{ú‘·rà×7ÚžçÍœ7sÞÌy3çÝp~ˆEÀy1çÅœs^Ìy5œÂĵóå’¦à|n³¼&yÌÀŸ+Oom’‚óÕüŒàü¸œOèqR Ié¸pP~ÆIÞÙ¦¬ºÃ[§Òª=¡;<`°™Áf›ìlð¸8Oè ,f°˜Áb+<®ÁºÇº6ø ŽòV~F0¸ú± .,ëùdùnuUµúJûËkùW!ĹsöíÇ2ë>ð‘·ê›V±ÅY¥Å¹ÏÇŒ3>f|Ìø8ó×ö>1>b|Äøˆñã£Ìg z¾A¹ J“Ž_é€åZþU ùdy+²•­l>ýj”£p’Ç‚…­$ßIù×k[k·«Q‰ÐGÞ*ZY'Î œ83pfàÌÀ¹nŒEFYœ81pbàÄÀ©n RF×ü×à^\–ï{úkp¯.>½U"À• J=$Öù¹AÉÝ&i~,°¸«v]ç_Z'þ™6%y§ÚuQSžuFIì+ë!±–zH¼fxÍðšá5Ãk†× ¯3Þ1,öñŠáÃ+†W ¯^1¼ÊxÇà9?·@ºÛáÍÅYwõµojzÆ;e¼Õ‹ö€·|3£$ö•õX/ £¿¿7ï6ˆËsǯcñ9É¿NÕ‹Iìëò[þÌ0»z-Œe?*{þ]>XG6ˆ}pfàÌÀ™3gÎ pc$ìƒ'N œ81pj€cÜu‰n\¨—義_\s’ÝóÀ¸˜‹6L’àÊ1nyŽqÖBÙz9<÷] eëõïÇ—I ÿübö$O 0ïfD­ëSf’¼ø»Lÿø)ýãõ®X×Û –:X¼fxÍðšá5Ãk†× ¯3Þ1,öñŠáÃ+†W ¯^1¼ÊxÇàyÙ½#ã#À5Þ×5Þ×ï”ñ¾¦ÚŒ¨€7ψJòbìMÿø)ýãõ®X×Û nÏwg‡KäÞ~¼ÏHOÿúýÌÕ^1¼bxÅðŠáëŒw ž;˽n“ñfùÑ žûuð\ŠÅ ;K1ÝYñÂÎ6ˆ¡/FÕã§ÏÕ¿ÿƒ|ÿ¾õ'/ òRKm{KòNÿŒõ@“?ò^T-õÏxÍðšá5Ãk†× ¯^g¼cTíãÃ+†W ¯^1¼bx•ñŽQ5ôÏØ‹QõømKúÚ“|ÿ¾Ù ç¦ òRÛü3Þ)ã-§õhÖcÀ[ª[¡—ÀÍeæöc/!]u+ô¸¹üÈ‹3—ÒÓ[Qõ#ÏQ%ëZQõ¯ü9ª¼fxÍðšá5Ãk†× ¯3Þ!ª¼bxÅðŠáÃ+†W ¯2Þ!ªn…v#7—™ÛíF†tÕ­Ðnäæ62àÍÓÒÓ[Q5à­f¼å¨:=çÞÝÜÈäËÌ“¼3á#ÿêÁz̵ËÌuAùÈ/г a±Ôð1ãcÆÇŒ3>Î|ƸÖç#ÆGŒ1>b|”ùŒizNQ½¹F |ª7Ou–À%ŸWæÿñ­SÐÀ§YôÜ^èæzn»nA1gq~ä­nþÛu‹Õµ»ÅM(Mæ#oÚÿ•ƒ4Î œ83pfàÌÀ¹nŒE}pbàÄÀ‰'N pcÒs£°›Ë²kp¯©8‹3€«Ú_ƒ{Epùé4™®š&À¡ìºŸâ,Γ|9ÿ7ÿþO÷ãÞyk“ä˼¥Øiò$_L¥þ–· íOòÖÑ£K¯× ¯^3¼fxÍðšáuÆ;†Å>^1¼bxÅðŠáÃ+†Wï<¯ñ¾ŠSP/ñ¾"Þ×úNòÖï²KMÆÿñ1xÞB¼Õ ½€·¼A¼ìðg/vP>ÉçÊÑÉ>'yü].•§Ç £»ìѼÕãó¯œìðúΛ9oæ¼™ófλáü‹ú΋9/漘óbΫáü&®û±ìÅfÌÁùx¸ÏIÃÄRyz,x»K‡ ΗçÒr~ÝÅaS­ñɶ é'y-9É¿>³¾:¢ÞEƒ…Ý$-ì¼õMàÌÀ™3gÎ œàÆ`Ò'N œ81pbàÔ7Æ¢ë¾)ÜÐøä\yfW>ï[.·,ÜLv)µ°ó¾Rß”m}NVúÚNIÞ)ÑþÈ¿NÂ÷­˜Õ°¢º¶“¼ÊXã“­Ôøð1ãcÆÇŒ3>Î|ÆÀÔç#ÆGŒ1>b|”ùŒñg}ÎÖ[¿ùy§®úšÏ+òÉòNiXàSŽ?¬wȶ]s½kã¶çVï£"¯å±ŽGf‹,‹,‹,[)²ôù˜ñ1ãcÆÇŒg>cdéóã#ÆGŒ1>Ê|ÆÈ²]oMÞµžÿÛsÇŽ÷Q‘×¹ÇCºE–E–E–ý9u½9~ÛÙžeO…µó³uóÿÈ[m¥þÊÉùYßy3çÍœ7sÞÌy7œ£Aßy1çÅœs^Ìy5œ×ùý9­z½9ÁÚÙbOu9µ#¨µ§Η öÒr~ ÎLÛñc]Á;É[ûŒ#UÕÕ.cŽËÖ0ÇyƒXúÛ{جůZPl¥àí0{;ÌÞ³·Ãìí0{;ÌÞ³·ÃùíÃâúB·Cìí{;ÄÞ±·Cìí{;”ߎ1t¨­ÔöcŒ¡m~x;Ê;¼#ôÖˮTñíÈOoUú²þ럱_•hÿÑ{®õÏØªÀÿ3YIs‡núgì¡ßáäeMÿøV7ÿ¼•ŸñWö—œ83pfàÌÀ™s܇81pbàÄÀ‰§¸!D^‚{epÃB½ÿÖÍâ nÊàªÝ,¸W÷ZÓ?¾Õ[?€«nޏ1”Mhs|’×FEùÎ}î2?òÚh -IÞ™›º³žå$”Mhß À™3gÎ œàÆP6¡-%'N œ81pj€CÙ„v{\Ñåk8¨½ËT à☥¿½5Åtgí3¸1”éòq~wezìá=myëÞí#oÝ»í¬O°ÎÌ:3ë̬súq9ï['f˜ubÖ©aݸ ^öjÈÖ«‚»²O[EÞºº Ö•¿ÎKÝv?+Ü}^ûÇ`ŸäµmOòÎåÑIÞú¼fíöR»ÀÇŒ3>f|Ìø8óç>1>b|Äøˆñã£ÌgŒ~þ¤¾û&ößÄI^ËqÛö$ï\a>åobÖ1`ŸŸ\ÝûÌ—¿Œ/ù^‘øK)r'ùù÷³Lµ¹“¼“|}’OuÖp€3gÎ œ83pn€cQœ81pbàÄÀ‰Sܤæç–rwç>—à^\”Ó,Jù}×à^\–wò¸¸ò&©Ô-a_~L]]“¼“ ÷‘×ND—#ÉçN,bÝ>òÞ&i)E¬>3>f|Ìø˜ñ1ããÌg L}>b|Äøˆñã#ÆG™Ï–Ä×$契>ñâ`9’|îÖâ ð)o’Ö˳Ýui#óœäµQ)ééµãƒiMòx|°•ž¾wò¼Xó‚½Ô¼ð1ãcÆÇŒ3>Î|ÆÈÒç#ÆGŒ1>b|”ùŒ‘å²yAâó:ó™2Ÿœ]5yíømZ“<¿m¥§ïä,Ö¼`ߨÅÎöØoꮯ;¡™ yï®zc`»sé[gf™unX7®Ç»é['f˜ujX7.•»©ØûŒÝ5jÙ7ÔÙ?XW>†ÙJKÚuëŸj&éõŒõóå];—}ggú;;GÙÙ×î^Zøú›lf°™Áf;<.}ƒÅ 3XÌ`1ƒ• Ñkƒ_Õ Êkƒ_ªuD —"vv±³ƃÝ×׉ŠME>òÞêz°Õ•Õï¥:p`°™Áf›lf°³Áãêz°ûϾÁb‹,f°²Áãêz°{ÊãzôU±H0¸¼ºlue½Çû9òßìhOò5É·’¼Ó0ê#ÿ:Î:öZžåIÞI\ÿÈ/¶eÏ‹óQšhø˜ñ1ãcÆÇŒg>ÃÚøˆñã#ÆGŒe>Ch|^kmtoàóZkÞǵ¨ºæóŠ|²¼“çø”#ËôÓåúßÏ¡ ïÌF:X‰êGÞúð>JcÙCf™9dæ³CãêÚwHÌ!1‡ÄRvh\ߦßR$4'yg&ÐÁªƒCåFh¢ê¡Ç¼Ò»«¤Cèdà$o-Pb ”J ”ÐLS`°™Áf›ìl𸾠M‹,f°˜ÁÊË£Ð\Ïkƒ_Ñà(o ƒË««ØêêçS«›¢ò“|NwË÷;äçWûkºÑQyz±Ézzz«€ó#o æ<ÉÕYÛKœ¯^3¼fxÍðšá5ÃëŒwŒ,}¼bxÅðŠáÃ+†W ¯2Þ1®ùùÄû¦@Àûгãœäg#Þøôâ„…ôôVõiÀ[Žª×xËQuF¹"G¡n«È{{–™íYf¶g™KqmF¹"À`3ƒÍ 63ØÙà1²Ì(W,f°˜Áb+<®í3Ê9 U—[EÞÛ³ÌlÏ2³=ËòÓÌÀ¿ÿ‡ Oç…wM?òÞêÊ*VÑx”*Áf›lf°™ÁΫkß`1ƒÅ 3XÌ`eƒÇÕuùmlå¤$Oæw̓ÁåÕ•¬(ð¸žøùµ)¼ûv] 1/Io›çÊÓ[•y«òã¯T~çÍœ7sÞÌy3çÝp~\û΋9/漘óbΫáü¸P_;ÿRñ3xýmÄÈŸs'æÊÓ[e+ÁùjÙJp~\ίk¢¦bר“¼vD¨$?ÿÖw­Ö±¥A>¯Ëæ Þ“¼uÀ¿±þíæˆðy:ØÁÊw3îfÜ͸›q7ãnÆÝ îc(ësã.Æ]Œ»w1îbÜÕà>ÒëΩØl8pÏwJò³Á‘{|ú”¾¾š°xOòÖ]ÁÆî ¶›»‚çY]G©úô¸ž_ûeð×vIò¯Ò橇÷»ë¥§Ÿ½þêdíÒӗΉێ¦tlä3gÎ œ83pfàÜ7Ò>81pbàÄÀ‰§¸1^WáFpYþÕÊ`*†²ýÇ~–éé瀗Áå§/“Çü$ïÌÛýWÞ_ w3îfÜ͸›q7ãnÆÝ îßÁ„pã.Æ]Œ»w1îbÜÕàþ ÷WäþL÷x[5íIÞètœ¸§C¶3÷)s/†ñĽxÈ–¸Ãxâ>†ñé9>3Ÿåµ´œôôR§p)Êyigy+£Rêå…pÛçcÆÇŒ3>f|œùŒa±ÏGŒ1>b|Äø(óÃ×ô\O’ËÈŸWíd,ñI!g>SæS<ÚJ|Êñ±ë-Rr–—>ÇÀ$2Žì,W¸R¾i®w–7ròNò^dQ)²ˆÔ“>f|Ìø˜ñ1ããÌgŒ,"å(„1>b|Äø(ó#‹H5Kâ7Fc`™!ø¼"Ÿ,od&>åÈr]#úg.F–ë^¿‹{ÿx–°'yã.ç,ß;‘Åϧê%ëzÉ¥ÀÔÇk†× ¯^3¼fxÍð:ããZ¯^1¼bxÅðŠáëŒw ‹×x_s1,^Wàû]ÜpùÇ¿=É÷v o9,úùÞ®d]/ª^³ýê}ðõÚ8É×ïÿꕾ$¯å•ßå?«Å;ÉùrgùÑ ‹3»Rë;oæ¼™ófΛ9ï†óc,ê;/漘ób΋9¯†óc˜¸îÿnÔ’œ%ç¿s·“ó)L¼NÎOÙùò¹ÜLRÎ’óãr¾<†º[Ò–ÇÁP7ýXNòÞÍÌÂnf¶MYJ«vß`3ƒÍ 63ØÌ`gƒÇŹo°˜Áb‹,f°²Áã¼<@»[‡–Çh7ýX’ÁåEta— ûX^¯¯ýª«ëúܯÈk¶%É[GP+;‚B þ•“oí>83pfàÌÀ™3ç¸1ôÁ‰'N œ85ÀQæºÝªQf}T±WäµY÷GúÇ÷„Vv „º%$pc(+L½ËÄÞȤ£“üë÷3¿KÍoÎòÖ>ccûŒí3¶RÄêó1ãcÆÇŒ3>Î|ÆÀÔç#ÆGŒ1>b|”ùŒñ§0æù.y#“Ž®ù¼2Ÿ,om’6¶IÚØ&i>]ÕÍò¸³…ý:e)F–írvöRhèlf°™Áf›ìlð¸¶÷ 3XÌ`1ƒÅ V6x\œ÷çkÝ,P;»د³ –ââ¼³¯û­®Ço#ÄÖw’·*7Žóä_×âwûñܶÈ%ykq>J‹sŸ3>f|Ìø˜ñqæ3®í}>b|Äøˆñã#ÆG™ÏŽß®ï$oUn?æ×:É¿œ®Åïöã¹=—KòNd™Þ××wíÃ{ú±ØVK’wn'&4ûú$o×O¬¸8oæ¼™ófΛ9ï†óC4΋9/漘óbΫáü°Î_;ÿŠÎßðÓ%ÞJOoðOhur¾zÀ?•J¼§B‰êÍÇòI¾„WûnŸñ‘÷–ó‰4$>Ë;_úS©Flf°™Áf›ìlð¸8÷ 3XÌ`1ƒÅ V6x\ƒ UÒ7ß›Áà—jŸêÁàò<‘^¶ÉàòÇ2šÕ}–×úâ(É;·¯Óu™æQ,sžX™óGÞÊú+'ßÚh8gÎ œ83pn€£š-NÀ‰'N œàÆ(ƒf–'p¹•”’¼s‘{ îu+¦'V1À•7 *…2?÷ ½ eN”_•Žùôî„2_þ°T ef¡ŒFO¥ÂhÀÇŒ3>f|Ìø8óSŸ1>b|ÄøˆñQæ3Æ?7õ½‹?N#Ä_•ŽO9þ\òy©Ìâ«-žfYæ_6ð¦¡åÆI~”~ ò¯;ÅÈò<Øy<¸–·:vL3 Ls)0Í,0õñšá5Ãk†× ¯^g¼c\›Y\ëãÃ+†W ¯^1¼Êxǰ8³°8ÿtø7 -7Þä_ùµoüÇǰ8*^Ë[;¦™EÕ…=.×=Š?òÞÅÎÂîé—›V!®•J¼Áf›lf°™ÁΑeaGy}ƒÅ 3XÌ`eƒÇµ}aGn×W›ƒË; »\_nçÂêdïµê…“<¾›_oÝ’äkºòÜoö,ëoSE÷(o­í+*«ûÈ;S„ÿ•“{¡>w3îfÜ͸›q7ãnÆÝ îc,êsã.Æ]Œ»w1îbÜÕà>†ÈkV‚¸¿÷üô5e^ì7ÛŸõ·)Â{”·ôŠÊ ÷òî©TÞ>mÏíFïÂø†ÚÐO¿V÷*È¿»KìÅ£Ç]jmχ%ëz©Ô ã}îfÜ͸›q7ãnÆÝŒ»ÜÇ0Þç.Æ]Œ»w1îbÜŸ«Á} ¤Ûsßá»0¾¡vüÓ¯]äßÍhöâ)æÆ.÷¶çSÌ’u½$ö­Ư+±÷4gÉkçÜ›v–kð‘÷w ûÖ™Ygf™unX7“¾ubÖ‰Y'fÖëñue²îå5ÈóÎ䦹äÄJóƒuå%m/-i×®–âõÍñÓ—Ê߃Œ ß:G|;âcøS©lf°™Áf›ìlð¸<ö 3XÌ`1ƒÅ V6x\D¯ ~-Åë›ã·Úמä[çtè`§C¬ˆ]ïç¶l7‡ óªSW·y òÖ„x± ñykuý+^]Áf›lf°™ÁΫ+0XÌ`1ƒÅ 3XÙàau½6ø ¨`ð+5œÓÓ[ÃÅņ‹ƒË«ë„¦KœäµË2%ùš·ÒÓ;E“ùW¦¼·âÚΦŽÿý¿ÃÎ œ83pfàÌÀ¹nŒš†À‰'N œàÆ(3¡)\¾_V’¯)¹w+=½S4y îÁey+ÆM¥PvU•úgš‹ÄÒoÍ%6%yüe¼+O¯å},NòαøGž[[”¬k]‹ÕÿîfÜ͸›q7ãnÆÝŒ»ÜÇ@Úç.Æ]Œ»w1îbÜŸ«Á}ŒÃ—Ý2÷1˜è·7›’<Òwåéµ<¯ÅIÞ¹M Ü«Ä{õ6E¥æ c¥«ç}þ­”`˜‚"ÿ2èŸÕ‘ä|k±¡ð2Êóú+'q¸Î œ83pfàÌÀ¹n ¤}pbàÄÀ‰'N pc$ #Ú«çžþ­(h¨À¥‰\¯¸)ƒ+›²í2J• àÆPv]ûç(†²ù·Æyò^,šY0aý TêW 63ØÌ`3ƒÍ v6x }ƒÅ 3XÌ`1ƒ• —ðkƒ_Gq ŸK ˜÷ ï­Á3[DYÕ¼–çn_/—‚¼·<²²w-(“ô¯œ|ª÷­3³ÎÌ:3ëܰn\ûÖ‰Y'f˜ujX7®uËs’¯ÅJAÞ[¬Xº”I¬—´ëÙÈë»øÁ¸þn‡Üú¼8ÊFIþµ_›j5n*Ôž–þöÞ«5àÌÀ™3gÎ œàÆå¼N œ81pbàÄÀ©n &×ÕÞܸ¯¿}8U \ž*¥$ÿ:!™jeb*”k—þöÞ1~©\[Ûó¡âù—q¬IÞ©jøÈãwÒ]¯FmìëœU<ë̬3³ÎÌ:7¬—ó¾ubÖ‰Y'fÖ êö|˜|þÛ5É;5Áºjÿ>mìë¼Tºªë"BW¿Î÷tæUKvݯ¿\ü:ߟÛB¯¥§ÇWÛyï4¸4Eð1ãcÆÇŒ3>Î|ÆÅ¹ÏGŒ1>b|Äø(ó#Àu¥¯«ŸÔ{:r®e¨^óy¹øI½?·U_KOñÇyï(ûøíPqLZa%Àyï(û`ËûXî[gf™ufÖ¹aݸ÷­³NÌ:1ëÔ°n\*ߎ²ÇÔ V¬+eìcù¨,i~£vm~££l³ÙÓfe»yîƒ8ßËÁŠœ7sÞÌy3çÍœwÃùaA΋9/漘óbΫáü°ç«MÂóÕÓ`³ÙÓfÀÁùêrîÒìi_W-N{­NØSú¢x¥2Škyq$–“ükVc±ûæI»ñÕþñGãèÄlòµK“¯^3¼fxÍðšá5Ãk†×ï˜úxÅðŠáÃ+†W ¯^e¼cô»®LŽxÇ0¥=Ë+Õ:]Ë‹óðœä_óX‹-3ÞW›åGãÜÇlæ¸/KÙ¾›Åßm’„Ä-¶IJ?É[qM¥¸Ö7ØÌ`3ƒÍ 63ØÙà1²ô 3XÌ`1ƒÅ V6x\Û¯gm«º³J·ØÎF(A<\^]}ýÙ²ÖZ2øÇÂ4½“¼µº²RP³9Ö.ͱ›lf°™Áf;<®®}ƒÅ 3XÌ`1ƒ• WW_ú®µj~ÿXy2xÊ—WWVi6 Úa˜ì»x"4ÿÖ~c<àgÅ'y뀟7ºTÜ 63ØÌ`3ƒÍ v6x\]û‹,f°˜Áb+<®®a ñ»x.ñÛ@âÿœÊ³âÆ`pùTž7zy¾Jº[]¶º.¨±æG~îaôÏ{Sf|Ìø8ó×öM|Äøˆñã#ÆG™Ïv4HäšÏ+ò‰òÚå¤$oE–EVgéã¹ÛÏ]dùiÎå?oöšä!yid€¼$yúÇ«ôôV-³*OÎ œ83pfàÌÀ¹nŒE}pbàÄÀ‰'N pc:žûkÝ©ß&ÖžÁM\uÊF—¦lœÁM\µMW>‚*Õ×Îo”:>¿¹®ú3­{’wBÙG^›~s8É;É?ykÚÕIÞ‰„3«îÜ͸›q7ãnÆÝŒ»w7¸pã.Æ]Œ»w1îbÜÕà>ÄákîåüÿÀ=ÝnŸ¹O™{5îqÚÕá$ïdpîÕêƒÀ½ÆçR]õ<¡›¤“¼“çõ‘·¦ÛÏlòÌ*›çRe30ØÌ`3ƒÍ 63ØÙà10Mè& ,f°˜Áb+ùwGîâ,Áyc *Î:³á¬œ83pfàÌÀ™sܸœoì µN œ81pbàÔ7“}*©·’¼ÓßçÜë(Ž%œ7ÊØXܹ4w¾.7ŠåÚ'ù×;tæ³”ä_¿Ë­xôþSµê?«Å;É[ÇûÍ«p¥\*×|Ìø˜ñ1ãcÆÇŒ3Ÿ10õùˆñã#ÆGŒe>cü¹.מŠåÚÏ+ñÉò¯ðµÏË«öž†ÕóÎN‡ö›øSˆ,KŽ?~.1æ:æ›N•§·®Ÿä­Üúƒ%+¥Èr°Üú>3>f|Ìø˜ñqæ3F–ƒ¥æ÷ùˆñã#ÆGŒ2Ÿ1²,³ÿ·ëÿ¤ †O•§·®>å€åû,ïS´ç$O¯öݦã#o,l:ñGÞ åÏ¡lf°™Áf›ìl𰶃Š3XÌ`1ƒ• çåýc)œäiu½ûnWK6R8\^]§ç¦/7Þ'yçvb¹žºûÏÎ%yçvâ#oÝNü•ƒÛ ༙ófΛ9oæ¼Îëqßy1çÅœs^Ìy5œêé¹SÑÍgpp¾ú|íü+:Ÿåþà|õ€?8?.çB üOò5ý2öмÖOòØ’|é|kë¹wÈT’·¾µKCn3>f|Ìø˜ñ1ããÌg B£1>b|ÄøˆñQæ3¡y×|^‘O”×ú±žøL™Oy£ ç9SIÞÚ(ø·»iOòÖFÁÏIsIÞ:Å1;ÅaÕÈK©ð1ãcÆÇŒ3>Î|ÆÈÒç#ÆGŒ1>b|”ùŒ‘Å¿åÁN{’·¶&~Î=šKòÖ”Ù+è]®ªÔþLËZkºÌ—]÷øÍ¥ Ï-\¦’üüÃòéÎråŸ?Ù¶’<­ wÂ?ò±©â«R¼°ÑÊKi´2x;ÌÞ³·Ãìí0{;ÌÞ³·Ãìíp~;ƨÚ;ÄÞ±·Cìí{;ÄÞ±·CìíP~;Ƙ~YÿœßŽ1®]Ö?ç·c(ŸoGþ$ˆòó¿1¾ñŸ7›[Iž¾gîúª‡·£Z>½°‰ÜK˜<OA—ŸZ÷¼þìAÞû¢X®ï\Ü겪î¼Õ1}aUÝœ83pfàÌÀ™s܇ûàÄÀ‰'N œàÆ&rOÅÕå·6X¯=È{!r¹¾Ðsq×Ìêé¸ò…^©ž~YѬ“üë‡5Ó;VÊÖë–Š¡lEM ?òÞöt-E¬M»|Ìø˜ñ1ãcÆÇ™Ï˜V4Ô ðã#ÆGŒe>cüYÑìªÀç5JVÖëø£büYQÅÀ§¼Ibm –-uÖ¨»n¿Ík[ç$ïô‰YX[ƒeC}6–})e_Xó€× ¯^3¼fxÍð:ããk‘ðŠáÃ+†W ¯^e¼cXd®ñ¾\=¹Ü~›É¸ÎIÞé ´°F ˆ:7¼å¨z]ü§Øaá$/u ³lvÔuaí6Ñ~)µH›lf°™Áf;É÷Æ·öÊ&›¯l²9gÎ œ83pfàÜ7N œ81pbàÄÀ©nˆEÜë¨Å¢kp¯nìòÀ½®Á½Îঠ®ºçàª{Ž• _KÃÁ×éù+í&‰}~»gCÙ”Nm_éw-ÿúù­Å6 'y'ålÐmÊÊF“¯¥Ñä¯^3¼fxÍðšá5ÃëŒw ‹}¼bxÅðŠáÃ+†W ¯2Þ1xNϹ›<ð€7&ŒÁsJw.¯U¯å_!v-v­x«·)ë„nSV6~ åø*FÕërü¯š¾­"?g‡ü™Þ¡_NòNÑñÊfʯl¦81pbàÄÀ‰§¸1”]ð«X@y î•ÁEy­#ê0Ñ>€+‡²5© àÊ¡¬TÀ¿®Ï…ïμB²R:½’¼3ýæ$O'wõÿëzy39Wwe+K `õÿk©þà5Ãk†× ¯^3¼fxñŽa±W ¯^1¼bxÅðŠáUÆ;Ïõ¹øÝicè> TŠ£$ïÌ x«Í .ñ¾2Þøô^bk^°^—?ïó5¸?ÿÓä>ÿWóúª´ÅY7ÔÌ|½ž¿Ÿ3:–’|ëÜcmì‹5/XKÍ ^3¼fxÍðšá5Ãk†×ïUûxÅðŠáÃ+†W ¯^e¼cT½n^ð¾Nx§ˆ÷•ðŽ=}Þj'ök¼¯ˆ7Ë·Î âÆnYó‚uGC¼×=ýüjév;ËÏ`Í VÖ¼`-5/›lf°™Áf;Ê|ÆÐÚ%T“*ŽßÓÖw’Çïwå鵋¬yOòN·…À§Y¶÷唽˜.q’—~³‚¼Ò ðõçˆòΤí>û7ÖGac}83pfàÌÀ™3ç¸!pbàÄÀ‰'N pCº÷Êà†…:€‹AjV—k¾Ž(ïÌô àªÛŸõQØJ}¶é:¥¶Ø?ó$ø¯¸ƒ¼Ô D:’¼Óh›PûÆú(l¬ÂVê£ðšá5Ãk†× ¯^3¼ÎxǰØÇ+†W ¯^1¼bxÅð*ãƒçu…©Ø¹ôï+â!¼© Ñï”ñVs ÞjÚüÆú(l¬Âv]S>íŨª‹¯žþ›ÿ§ç£Ç“|o=~䥟õ¤5É;éø¹Þ¨*UUŠª}¼fxÍðšá5Ãk†× ¯3Þ1ªöñŠáÃ+†W ¯^1¼ÊxǨzÝv"âCÃÞWÄ;ž›¼ÕsÓ€7å3Þ)ã-e¥ÓÕZT‹ª¾<zW£*kgñ‘÷ÎMÍ6›FefåäÜ´ï¼™ófΛ9oæ¼α¨ï¼˜ób΋9/æ¼Îaâ²3Fv~\ëXgŒà|ùèÑl÷dT©œ—óëj~¯µJ­“¼Ðhÿßÿ¿AÞiáºÍ×M ]Ë)?É;-\·B5ɺÞ%k¿¸›q7ãnÆÝŒ»w3înpCYŸ»w1îbÜŸ‹qã®÷1^7ÿˆÜÇ`2ÿ4Öãå5É;Ý`/¹¿2÷øouƒÝ Í?JÖõnK½C¶åò ÕÅ&ƒÛòÛ¼œuòïCÕ*¦·å:ì] ãËcqÉ]šåG>þzkg ;ë\JÑº× ¯^3¼fxÍðšáuÆ;å>^1¼bxÅðŠáÃ+†Wï{/»•d¼cX~©µîAþ}¤©ZÅô5ÞWÄÿñ±4ì.G4à-Ÿu.ì¬sE­{·õ·;ˆ}NòZɦ‚üëªa.\Ÿäâ…me›ã•mŽW¶9^QGaÀÝŒ»w3îfÜ͸»Á}ŒÃ+jt ¸‹qã.Æ]Œ»w5¸zEý—/¹ß\Fîs’×j·ä_wŽs±v;p/è•mŽW¶9^Ka|C=¢OòBÞú¿ùðAÞ雲]w^XT ã ã»ñÜXÞPhÎ œ83pfàÜ7Ò õˆàÄÀ‰'N pc$ÜPè.UŠœÁM\µ‹É5¸W—å­H¸±ëÚ­Êö笸»mÕþÛ̾¡ ý$o…²ýº‰Ð^ eÏ&Tzz>)šïå$”õÁ™3gÎ œ87À¡¬N œ81pbàÄÀ©n eûs†éÝÎdÿmþåPÀ•CÙ~Ýk/†²ç–1*==ŸºÎ÷òB(;ž»ÌÞíÊ~ìl1®¬<ãø¥ùŸß-ɗήì`§£ e}pfàÌÀ™3gÎ pc(ëƒ'N œ81pj€CÙñܱùnWöc“™ñ|ò`ÅÇOåÿgpSWÞ•ì€ñ¨„²ý²¿Âßš¢R(;É;Cè>òâý}”Ÿ¿]L¢=É;%y+}æ¯ü9b>f|Ìø˜ñ1ãcÆÇ™Ï˜1>b|Äøˆñã£Ìgˆ?×|^k±Ì5Ÿòä¸À''°Dùy3ãbòhàSM |ª(ûuo‰¥Øœø$/¥k-ÿOòÎ&iŸ~ûdÛ–$_:‘eB›¤¿r°IàÌÀ™3gÎ œàÆXÔ'N œ81pbàÔ7©ë>-K±Is+†ü\u“ÀÅMÒ–þö\¨xTžÞÚ$pc(곿ë·Ó‡1”)ý~j»¡RÁ5DÙK Q€Áf›lf°™ÁΡA¨Ï>0XÌ`1ƒÅ V6x\Â…úìƒã9׸„+­Ôµ‚P•ÙÎÚrì~ÞBß$œäÛ”“¼Vש ÿªë|W üÜïf*É;`'ykmwimïã5Ãk†× ¯^3¼fxñŽ‘¥W ¯^1¼bxÅðŠáUÆ;Æ5?ŸŸÝ¤"¼Õû›€·Zv‰÷•ñÆ|îV5•ä°€·UgÔBrŸû]n òâÁ´“ü+ùg+FÕeŽï¬½ÉÎÚ›pfàÌÀ™3gÎ pc$œQÛGN œ81pbàÔ7Ƹ5t àbŒÛäÅ;"'ùWºÝVŒq3ÊßY‡½Ô!d_ÚCÝù×Eõ*hùmÔ¤$]Ê÷ÒÓN,ZX,ê;oæ¼™ófΛ9ï†óc0é;/漘ób΋9¯†óc4Xž3Öîv<Ëõ]õ6eùm®Ù¤$Mó÷ÒÓÎr¾”–ó•÷­¿µŒÑ;ÉSÓ–ñ(áZž²§’ü|à°«¸3a½%vÖ[€3gÎ œ83pn€ƒÉÊÎèúàÄÀ‰'N pc,ZÙéÛú[û%½“<5@å®åùRj*Éχw\üÛ{;“R{†}c;“í·-ÿ4'y퇕ž^ùÈûçáQÞäù‘÷îž¶RÄÚØþ¥ÏÇŒ3>f|œùŒic»œ>1>b|ÄøˆñQæ3ÆŸí…~ë©ðšæ$¯ÅŸôôÒVêÌgÊ|Ê·?»¾¹.þz7ï"ËGžvàß?'ùš>ÊÓ‹ŸlQþõ'Ûÿí;»ý¹+ý.¦½˜úxÍðšá5Ãk†× ¯^g¼c\ëãÃ+†W ¯^1¼bx•ñŽañïk*†Åk¼¯„w¼ñÙÓœ°k¼ñéÅmY”ý‰Åž}ûÎî›îÚ;¢êñ"ÿüâÖ$Ÿ;;±‰P~ß_9‰b;“>83pfàÌÀ™sÜLÄv&}pbàÄÀ‰§¸1‰íLôxt—kÀ¥Î=¯yMò¹³3Û™å÷pc(ósI_˜>È; zy­ cy'y<~®=½“ßw°ÞG©·àcÆÇŒ3>f|œùŒ©ÏGŒ1>b|Äø(óãŸ+_×ïÛŸ ï$è>±Öiy'y¼¥©=½“ßw°ö ÇüüÉvYæç‹Í›\€cf¡af¡af¡a.…†¾Áf›lf°™ÁÎk{ß`1ƒÅ 3XÌ`eƒÇÅy~ÞÜ-ÎóóúÍø1³Õuf«ëÌV׫Þ?šÖ”@åkHZ™JòikdZ}ä½+Vò¬3³ÎÌ:3ëܰn\ûÖ‰Y'f˜ujX7®u—E÷Ùºq¹XÒŠX[ë®­«æûëÊG¥ªùãªô¿ŒÞ„ëo¥Rã÷æúÜgoh;t-/ö“8’<&/l•¿=û’u½ÏÕµ´ìöñšá5Ãk†× ¯^3¼ÎxÇÐÐÇ+†W ¯^1¼bxÅð*ãÃ×e~Æ;F€õ·:ÉñK}î’9´»–[ÎI”¶Êßž7 %ëz…-õ/¥£ÇkyЬ„þ(•ЇÌ2sÈÌ!g‡Æµ½ï˜Cb‰9¤ìиf|œùŒ X'|Äøˆñã#ÆG™ÏÐŒôÄ'·W’Çvà{EžÇϺòïö'>Åä*¿ççÕœu–Ç ®éûâìZ~¾Çš¹”u–7’GÏòÖ™×Ì6I3Û$õÁ™3gÎ œ87À±¨N œ81pbàÄÀ©n RóóJÎŽJàò”ò9ÈÏ»œ n ¨9+ØÍl“4—BÙòüúÛg,¿UiNòÆTÜ“¼–ê±8É[÷á…ÒÕ’u2Šå…€×Çk†× ¯^3¼fxÍð:ãÃb¯^1¼bxÅðŠáëŒw žËsð¼Û$-¿Õ÷iNòÆÞ„7¦s-NòVîC¡8¾d]§úÆïëÊöâÑãzÉçÏQÜá­l‡·²ÞzsöQØá­l‡×wÞÌy3çÍœ7sÞ çÇXÔw^Ìy1çÅœs^ çÇ0qíük/^;ÿ:Š›¤•m’V¶IZoNò ›¤µ´œo?õ{ýY’¼Q y’×f-Åh°±h°±h°±]ÎVZôû|Ìø˜ñ1ãcÆÇŒ3Ÿ14ôùˆñã#ÆGŒe>cÙ~kù—åÆÀçùdy+þl,þll£°_&ÿ¼÷tI:'yîuöÇTÐÛ,„ììK¿o™ufÖ™Yç†uãzÜ·NÌ:1ëĬSúq­»,ÏÖûãP·ÛµnÌ ¾½öÞYAÈ^ZÒŽç`wöqü˜6å­äƒ}ª_Oîõ^ãs–·¾µ¶ öÁ™3gÎ œ87ÀËyœ81pbàÄÀ‰SÜLŽçï›ãÇ ®(o% ì«ÿzVv—å­ÏöR¹öT(œ½ e'yçrü$ï\Žäc·„ðÃr’Ÿ/áÎïæ](;ÉÆåøGÞ:6ú+x¯^3¼fxÍðšá5ÃëŒw‹¯^1¼bxÅðŠáëŒwžS¡4ÿ&x¼ÕËñ€·z9ðæàé$?_¡G¼ñoÏÁÓyëÌk*TOßEÕé·ßå¼'y-TA>榔Nܦçâë»ÞGžï]’·¢êTŠª}¼fxÍðšá5Ãk†× ¯3Þ1ªöñŠáÃ+†W ¯^1¼ÊxǨZh°pU§ß¢ê ï”ñætoù˜YV:]žû3Üí)ÞrTXT½Æ|¬Å¨ªßÚÏŽ{U=—Û-•§wFWä­”³‰u^Λ9oæ¼™ófλáü‹ú΋9/漘óbΫáü&®'ˆGçǵN¿õL7_z.]*OïÌÝJÎWoѦRó‚É—W´z×®Á&ÿØbJA^KÍ_£¼18ë,ï\ƒ}ä­Ó¿r úàÌÀ™3gÎ œàÆ`Ò'N œ81pbàÔ7Æ¢Ë>ܸûÇžp òZ™Ëå1V \yËbTbÀ¡l~>1¸ÛZÌ¿µ;Ô;É;->'Öî`šÙ‰Û\ 9}ƒÍ 63ØÌ`3ƒ CCß`1ƒÅ 3XÌ`eƒÇ%|~>uºÛÌ¿õå<~+5/˜®‹{ÿTÓí6T5]Ïàþzú^‘×~—û’äK'²Þy«‹öTê}ðšá5Ãk†× ¯^3¼ÎxǰØÇ+†W ¯^1¼bxÅð*ãƒç5ÞW5ÝnC`ïk.ÆÞí·Ø»§¿=_}­¥§·Ž]7Ô|ºžöîjºÝ~ý»T­ïô?6˺ªûC_œä_ƒtÏ]uçÒÓ;mW?ò‹ËæBTÝKQµ× ¯^3¼fxÍðšáuÆ;FÕ>^1¼bxÅðŠáÃ+†WïU/ñ¾\ÍN¼ÆûR­ÇGÀû:ŠQuÿq°““ükXv›ŸÞi»ð–£j¡“Á|þ?¼“üëÝÜ‹añº—ÀR¬q’wíM¬ùÇÄšçÍœ7sÞÌy3çÝp~ŒE}çÅœs^Ìy1çÕp~ …öç¥rz'ù×R¹×ùëKq6Ep¾œ´ÂúgL¥þz?·¾¹EÓ;•–Öc½Ñz¬7ºÇÒ­ÇÀ:3ë̬3³Î ë†X'f˜ubÖ©aݰ"ë^{í.çÚºW´.Ê[KZ°®z›¬—´ëòg;ûkJÄë„9ÊkMEäãñ:agZ“¼spó‘·æåˆ5/P©yÀk†× ¯^3¼fxÍð:ãCC¯^1¼bxÅðŠáëŒw _×Í \„ð¾Rúåµ–@òñxç:Ýî„wÊx«7o5ÝN¬y®Ê‰ÿÌk5ªê·¦"^“<X¼+Oo5/øÈ{qM¥¸Ö7ØÌ`3ƒÍ 63ØÙà1²ô 3XÌ`1ƒÅ V6x\Û/;dƒÇJ¿5¦ñšä±Dè]yz«ã@0¸¼º^r÷»x s]Ù|–Q×òÊgË¿ÿƒ¼“Ì|’ïÅ™õë%À™3gÎ œ87ÀÑ N œ81pbàÄÀ©nŒ2¾ÞA¼‹`×½"¸q àŸ¶/¿“¼“ÌÀ•ƒë% R/ͨ#÷IÞIf>É×sÚâ»v¿ü‘÷BÙœŠJÄšY,šQ³l༙ófΛ9ï†óc0™Qk༘ób΋9¯†óc4˜Q‹éà|5;÷ÒùWv>Ê{Ñ`N,¥ âàü¸œ/Ïyxw;“ËŸ—9È‹=Ö•ä_sßÅëéçùå*ýí½c£R÷ÀÇŒ3>f|Ìø8óCCŸ1>b|ÄøˆñQæ3å9õn;ñcýÿ2yqÈ€’ük.ç»x›¿<^H¨ô·÷μÖ离Õuýíf|Ìø˜ñqæ3F–>1>b|Äøˆñã£ÌgŒ,ëóÖänu]»:Ë>ÕÙo×|^S5²¬ìª{e‘¥0Ìü.²l?Þô½“¼3 T׳з£Y6Y6–R»±¬>83pfàÌÀ™3ç¸1õÁ‰'N œ85ÀAj{.°¸ RÛwöï$ï (½÷Šà²¼¤6–̼•BÙÎê3ö >ÿü7ÿþO×5IA~JŠøó¿w……Û”ý·®ºszúùxôŸ§+ü.?kÒ oEÂEÂE—ô¹›q7ãnÆÝŒ»w7¸tg•1}îbÜŸ‹qã.Æ] îcÞYYÏ÷WæþÚ“üœü¹Ç§×š{Ïéé_×`‘ûëÃ}ÊÜËa|ga|/…ñƒu)Åô#?*òÞ-Úuò¾w¤¬è^jþ‘÷ŽJR´>ØQi¯^3¼fxÍðšáuÆ;僴öñŠáÃ+†W ¯^e¼cì=ØAí‘ÒÓ¯ñFyï ðºGAÄ›ŸÞ*è=P ð€·zÎë7Šª'y-íJIÞàç7 Ê~_w)ŽsõmŽ?òV‡·¿òç¨ ðšá5Ãk†× ¯^3¼Îx‡¨ ðŠáÃ+†W ¯^1¼Êx‡¨z·UÞœ™©$ïŒ x«Aùïk)N¿õíhÞrTPÆçI>WîrÖw’Ç»œwåéµ#¨==½Õü$ïÌåø+gÆœ83pfàÌÀ™sÜ '”# À‰'N œàÆ7¡äÑ.Þž®ï$·§ïÊÓk§¶{zz«7xWËÀ¡ì²"ýÏQl~’×>1—$?×å|M=>*O¯ý°†–'ygÂûGÞ*e;É;ƒ5\j™ðšá5Ãk†× ¯^3¼ÎxǰØÇ+†W ¯^1¼bxÅð*ãƒç%Þ×Qlðæ b|ú¹t/âO¯Ï¡YIÀ[)ðV+ÿÞòÑhòâI^*iÒkOòZ‹¶ôôÞ±«/[óŸO5n7ˆF—™yë2ó¯¼Uæ3¼fxÍðšá5Ãk†×ïU¦8¼bxÅðŠáÃ+†Wï׌f=¼±žqHè xsƒÅôôÞ±«/kD¼ùéËÌ€·U¯;ü)­œäµßåšä¢•üë£v-–Cžä­Ûȥꚵ]àÌÀ™3gÎ œàÆHØ'N œ81pbàÔ7Ƹkp¯bÑJ—cܚ䢕kp¯µXYÀ•ïg”íêRÏ/¨þÒ?ö¼*ûOò=ü¬oCÙrùøv1”-,”-,”-,”-¨þ€3gÎ œ87À¡lAõ—œ81pbàÄÀ©n e ª¿ôíg†&ÜKÅPvÙ~&ƒËòV([X([J¡ìª‰ÃŸ©Úöþ$_CŽÛm6ËÊîðVÔYù#¿¸(Ä¢•Å¢¾ófΛ9oæ¼™ón8?“¾ób΋9/漘ój8?FƒË–1Sµƒþµó¯è|”÷.¥VÔœ88_^Î×Òr¾±ÜÆí¹’g«È[•p'ygüìGÞ»<ÚJ«öÆrû›lf°™Á΋óÆrû‹,f°˜ÁÊkðÆrú¶çj°­"oÕcƒË‰»ÂØÙ¹Ïþœ°swî³?¨Þ¦Ûí?Ín›Ž(oeŽïìS}GƒÍš•îfÜ͸›q7ãnÆÝŒ»ÜÇX´³S§>w1îbÜŸ‹qã®÷1DîìÐjÎÜ»;´Úï_n3÷öŸ&¸œ¹O™{9í}g›¤Í€t©Y‰Y³’“¼•‰p°L„ëvÇ\¼¾9ØõÍÁ®o‡YÎ œ83pfàÜ7RÖ`€'N œ85À‘µ àÊ™ËD¸nÁeyëúæ`×7G%”ͬCÈ\h°UäµmIÞ9.<É;Ç…yë¸p.µø˜Y‹ÀÇŒ3>f|œù if=:1>b|ÄøˆñQæ3ÄŸ™5Ù˜ ]2¶Š¼Vuâ3e>Õ³ÎÀ§zÖøTÏ:ç užäK8}ø*;´’ühl’>òqÊì+Í ò8×é]‘·6I3ë’À™3gÎ œ87À±hB§œ81pbàÄÀ©n R:. à^×à^gpSWÝ$]ƒ{EpYG¬½+òÖ&i.uɘu™ïãj(Ó/?¬ÿŒø<É;×vóuöóšä »¼ÊÄBYœ83pfàÌÀ™sÜÊúàÄÀ‰'N œàÆPvÙ³"ƒ×cýÊÆi¡\õækþ±gż&y'=0€+‡2•B™/Xó\K×>É;Oò5=}/=½ö‰™žþuo= —Nò­³©óóï²ä|«¡ð\êlÞ³·Ãìí0{;ÌÞ³·Ãìí0{;œßŽ1(÷ß±·Cìí{;ÄÞ±·Cìí{;”ߎ1ò_öÕÈoǾŒÚ_¾¯üvä§×öÀéé_™1s±Î+¼å=°Ÿ?Jηº!Ïós¾õב̚ä[#-ô#o¥…ά1ÆÌcë̬3³ÎÌ:7¬cQß:1ëĬ³N ëÆ…z~Îßÿ:Š[“|kä÷ëªI3kÏ0—Ú3Ì×ÅâÛy{·*,ׯàTLŠXØ’vW®]Ø(,¥•«ï™Cf™9äìи@õsHÌ!1‡”סëÊþèÐøS¾vè5¯æ¶ÝÕÖV˜Ë:Ö?û(5'y§ÅçG^; \¶$ß:iW+K»ZYÚÕZZßú|Ìø˜ñ1ãcÆÇŒ3Ÿquíóã#ÆGŒ1>Ê|Ƶý’Ï+ñyiNòN—ÌÀ'žã/[’o´«•¥]­,íj{NH¼;fÞPmÊG^ùeü™Þï$ïԈάþÿ#oµsù+'‡}pfàÌÀ™3gÎ pc,êƒ'N œ81pj€ƒÔöœ|wnº¡Ú”.©3¸)ƒ+ð>\ùf+…²Õ¦ì¿ý°Æ=ÖΦw‹v¶ËÙK!ggÅ%}ƒÍ 63ØÌ`gƒÇа³ê¾Áb‹,f°²Áã¾³òŽý·%|ܦìì(|gkðÎ6 êô5éÒ¾¶Q8žßÍ»Tžë’Úóp¢ÛÅù`‹óqsŸ^Ø(°"vÎ œ83pfàÌÀ¹nŒêLÀ‰'N œàÆ(s Žg\œb:nŽç(s—›r]ÄÁÅ|/H7É%…B©ˆ}¹.Â÷tצ$ÿ*ÂÝk÷µ'y­¹wzú×>}]k·) +b_Þ(­t)±>f|Ìø˜ñ1ãcÆÇ™Ï˜1>b|Äøˆñã£Ìgˆ?×|^‘Ï–Pľ×nÊŸÜ?=ýë8+ò‰OoÅŸÀ§ºIZ®KjçâÔÒf|œùŒk{Ÿ1>b|ÄøˆñQæ3†_ç¿‹Ÿýþí6æÄgÊ|ªÝ²–ëJáÈ'Ë[‘Å,²ÌÏçÄ7¹ÅËü[WžMIÞŠ,Wc¥ÿh©îæ´ï­E–å/¬Ð€3gÎ œ83pn€cQœ81pbàÄÀ‰Sܤæç+››Üâ.öÁÚ”ä­ uî•ÁEùx†T R3Ê-^J%ÞËeõè÷ët'öçòµü­ÿù¯^íÏÏz·Ž ÔµbYX0é[gf™ufÖ¹aݸœ÷­³NÌ:1ëÔ°n\P¯Ë½“u¯“uS´î­{}¬›²uå!6‰})Mb_®kbÏí·_çW³‘ÿH{ñûxe×½+ꎷ°¢ð¥T 63ØÌ`3ƒÍ v6x\û‹,f°˜Áb+<.¢×eÙÑàqºŸž ŽòÞ¥ãŠÚœ-¬®z¹.üS]]·Oç ¯Ìâüç‹BIÞ©«^X]õR¨òtIÞZÛKcÙ^3¼fxÍðšá5Ãk†×ïYúxÅðŠáÃ+†W ¯^e¼c\»ÆûªÆµíÇ+9ÈKs_³’¼Sɽ°Jî¥PÉí’¼UwÔŽ|éÈþ–·f[,l$ý²³-Iœ7sÞÌy3çÍœwÃù1í¨ö†ÂçÅœs^ çÇ0±£Õ ˾ìh<Ä£/;Û=•£/×…’ùÝt÷¶)[Ùhò…Uuë̬3³ÎÌ:7¬Ô¾ubÖ‰Y'fÖ+âµuyIs÷>]¶¤±ÙK©¶x}?׬ߛº ïtúÈ[KÚGÞZÒþÊÁ’¬3³ÎÌ:3ëܰnXÒ€ubÖ‰Y'fÖ KÚú~® Z¿·éAÞé鬫.iÁºê’¬—´é¹5ùÍÆs-”Å}Ò9ÉÏs|Õº-¬a̬kÝÖé2?VÅkʵ0'Ö÷r² öÁ™3gÎ œ87ÀËyœ81pbàÄÀ‰SÜL¦ç7»æµPbúõá<'ùy¨U—Ÿ~¤s雯 —à^\|ze¾—BÙouxãðIÞú:û:g³‘W6Xgf™ufÖ¹aݸœ÷­³NÌ:1ëÔ°n\P¬ëÎPƒuå¯s±¯s6¡w-Mè]ýüré+ûsrŸÿ«¿c ½ÐVÿÖrvŠòÚäì$ŸRÊÿ÷§Æ’äç‚oµÆ“|í,çlBïZ*o‡ÙÛaöv˜½fo‡ÙÛaöv˜½Îoǘúo‡ØÛ!övˆ½bo‡ØÛ!övˆ½ÊoÇ{ý{õ•?ùùßߎq;áßzmOQžB÷]»ðv䊨dÝWET|;ÆÈïçò£"o5±[çç.ô_ƒßI^kœžþÝ8x.î±Ø€ß• ø]YÝ-pÞÌy3çÍœ7sÞ çÇHØw^Ìy1çÅœs^ çÇ¥r~ÉðÕíúäµn×Sw»ž‹D6xeÓ‰×Réêz=7õÏQëïs’/ߟC׿Œy òVWГ¼SJð‘·jÖÒpc`°™Áf›lf°³ÁãâÜ7XÌ`1ƒÅ 3XÙàq ¾6øuÔZäƒ_ÁàלžÞêM ®&´ƒËËëevîWw¡»Ëñõ·=𸺮©üu½9žƒ¼RhòÏG“¼ÓÕ`-̵=*ÖõîÖY ðZ*o‡ÙÛaöv˜½fo‡ÙÛaöv˜½ÎoÇ×úo‡ØÛ!övˆ½bo‡ØÛ!övˆ½ÊoÇ”/‹¯óÛ1Ƶõ·ó³9>}h“qývŒ©ëO5nç·cŠoG¹ýÆZ˜È}T¬ë¥"°ÊñuCcL×ç]óNò8]e­<½ÕöneµÛk©vlf°™Áf›ìlð×64Æ,f°˜Áb+<†† 1]œD=t‹ ¿Tܯm¨ÝÛÊ*ˆ×ý9µònu-TS.%ùšž¾Uäcåëº1Àä½Åyg ¥Ó€3>f|Ìø˜ñqæ3®í}>b|Äøˆñã#ÆG™Ïöç ä»ÐP¨Y^Jò5=}«ÈÇDã×ugŒ5È{‘eg׿šý¶²Ù'y§Ûõz=®w.vó;É[©p¬”ze¥Ôœ83pfàÌÀ™sÜ‹4¯me²81pbàÄÀ©n RšÄ¶²Ù\9eàz@ö\ìjÀ•ϦXûZ*bßÞÏy¡7¡ì$¯}ä)ÉÏ?¿}®…²íš¤•N°>òÖ&ic5ðÀy3çÍœ7sÞÌy7œ‚ p^Ìy1çÅœs^ ç‡hpíük*nY‚óyË¢$?;O{ö•ÂóÕ-ËV*àߦßêφn°'yºk{ßLøÈ‹‰öééßóÚ·âr>¡|àübÏþ¼3ÙX?gÎ œ83pfàÜ7“>81pbàÄÀ‰§¸1M¿Õ›½Y¸W7.çÓU'éé_ø\~z'™9€«îL¶Rÿ¦çÞmw;]W–í釥 ¯œÿóÿvKòN¿ÂµØ„òå66ˆz+ ¢xÍðšá5Ãk†× ¯^g¼cXìãÃ+†W ¯^1¼bx•ñŽÁSÏÝ!ï6rº.ìLxÇè§Ÿ.Îx§Œ·š…¾±V›PÊÙÆF€oו¾_sïì|Ýdp*FU§zí×õw¬ƒ¼v©»½“¼” ]‘÷¢j© Àk†× ¯^3¼fxÍð:ã£j¯^1¼bxÅðŠáëŒwŒª×x_.žo^ãÍ[Ò(?RT}ÿ³®åµŒŽíä­ \U¯kÊ—bBÈ6ÿ–»¾“¼v=­ ÿúù­ª%„llüùIÞ:vem83pfàÌÀ™3ç¸1öÁ‰'N œ85À1îº ÄRLù?ÒÎ6éq&ǵ[ÑjÂô¹ÿÝ·*â†ålA¦y~Ît£õ-*3IdÚ·W’×Bä¥,‚‹|ïpaÛ®%‰}ýÉ(ìÞÇkò¾çóg òÞyH¼åùB»åYNjQ?òf‘7‹¼YäÍ"ïFäÇbÒ¼XäÅ"/y±È«ù±¬¿ϯ´5™eßG~Ú‚¼·æ`v!òå×yéê÷}û~½éÓÊä·Áóÿyoìu¾±×9ó}ØK¾ Àf6 °Y€ÍìàñåܰX€Å,`±+x|o߯È}ú"ÿÑ}`|oì¼±w0àß÷ïû±Oo×ý—‡÷ryÍ7=½Ø;ä$¿ÚâW߇¥ôô´ýtÝÎ[ÞÛ6ÚÙ§zŸ»w3îfÜ͸›q7ãî÷±õ¹‹qã.Æ]Œ»w1îjpKäþý`æ©Dî?-S®ÜçÌ=\§§[ äWƒëÈ=?=J=ݸ—I{©ŒßOº_ç¼ËøÁ† Žä_kº?ÒØÈý±êz&ùÒi5|º¶»°Æ*9E>f|Ìø˜ñ1ãcÆÇ™ÏXû|Äøˆñã#ÆGŒ2Ÿ±|Ý;ED>ãKô`cWGºÅ¡Ö)¤á¬û¾‚ Ÿ9ó)wëÝz…Êr"‡·ýnüù¿ÿοÿën¸äHò£ÓnwþÖE{nIÞñË{+<æÀ™3gÎ œ87ÀµèDŽtœ81pbàÄÀ©n,R'rº»7EpÓÜœÁ•›ßÎß:ÒÏ-É;¾è\y‘TrŠ8^ßXïãã~ì}~ÕV9oy­yt‹òÎAÔñBóXÇ ÍcÌh€3gÎ œ83pn€J'N œ81pbàÔ7”²{pS7¼ïÁM\”×±·(ïÈpÕõVWíã>J.Ç3ûóä½bÂ|*Ž9ȩ̀„Î,tf¡3 ¡_çýЉ…N,tb¡S#tã õG¯†ùòÞ+¹%„ÐU¿Î’[Â!Ô‰pÍuúqõHòÎNÑÁܱªØ U¨•€3gÎ œ87À¯s¡^N œ81pbàÔ7¡Ãü®:eÀåãŒ#É;;Eó.8ÄJ™J¥Ìè4þp²ô­m49õÒ„\y宬ÿþÿk’ǼÒß²(8˜EÁQ²(xÍðšá5Ãk†× ¯^g¼cY4êxÅðŠáÃ+†W ¯2Þ±xµÜã"Þ,OÝÞŸ§4 òÒUu“Ó¿=/#K|Ë¢à`Ç‚ìô.òÁÍrª\gô–gû£$ï ½å½º¶”êÚ‚ í@€Íl`³;x¬, ²” °X€Å¬àñݾ S·ûOKñF àòÛuAƒ@!Àå·ëú}Híã{æ•äßí·¼÷veSóÇÊÞ®kéíÚ°Y€Íl`³;x|»ö,`±‹X,ÀÊß®ë÷1ËoâW’wü¦C€ËoW6ê\~»nè’šã×à%ÉcO߃½Ö[þyaÇ«f¯u‘wî[;6ÖzÄFèÒ=Àk†× ¯^3¼fxÍð:ã+ˆ®ÛxÅðŠáÃ+†W ¯2Þ±®mèNŸãWû€%Écß×=Þ)â|놷€·¼#ÄÌ ŽYÃ\ä[êN<î[Ý?å•Ì?óØ2°³¬µ ì¬e€¹pfàÌÀ™3gÎ pc%Ü‘• 'N œ81pj€kÜŽ,rîÁMÜ0\À¥–ylØY÷ÛÎZvÖ2Pà?î6/f%ykûíÇ âsOòÖîÝÁvï¶Â+ ð>f|Ìø˜ñ1ãcÆÇ™ÏX˜ú|Äøˆñã#ÆGŒ2Ÿ±þÜð'>Ó¬$oíþ8îIÞÚz<ØÖãÁIç÷_ƃòq"gÿã׋çä×;\xëÊß[cèb€‹\˓յ³T×úÙa–fÙa–fÙa–fÙa–ÎÙ1VÕ~vˆe‡Xvˆe‡Xvˆe‡Xvˆe‡rvŒ5ýü^Ó¬¯CvT/BÙQ5…»ÍŽ)gGüã{KÒÝ£²£¼íz¢/Šó~ª{.Z]äKhQý|]¬IþñA¿ÖÚÛÏ×o%¯W’w3ßòƒ’ï5ý¯ü{M|Ìø˜ñ1ãcÆÇŒ3Ÿ¡ª>b|Äøˆñã#ÆG™ÏP×îùLsÑÇ'ðÉwàŧ,ˆ×Z‡øù›w•ϜùT÷JŸre æÅÁ©‹|©|ozKòtÐþäFþ–¿Ÿð¹šžþéN|ÖÜÈ/òÎìEÞ™»:™'ànÆÝŒ»w3îfÜ͸»Á}¬„}îbÜŸ‹qã.Æ]Œ»ÜÇÜ0Š3X{\9zKòÔqóäF¸ç†ôôO7ò³æF¸W÷¢÷êÊñ,Yyœwóéÿ}a·œ/òÒ%Ë’ä5ËôôškØ0q| öÊÓó¶‘KòΞñ_y¡Z÷ñšá5Ãk†× ¯^3¼ÎxÇ¢ÜÇ+†W ¯^1¼bxÅð*ãkï­yHÆ;VývȲ$yÍ¥6=½æ 8Œ œòô¼kë’¼µíêŸÜׯ!‹¼vš’ž>ºòÔ–§fËS£¡“Ù‚œ%[ÀÇŒ3>f|Ìø8óëZŸ1>b|ÄøˆñQæ3&ÿf‘8ÌQ>ù83pfàÌÀ™3縱öÁ‰'N œ85À5îÞYf)Nà߃›"¸±H­¿M‡ìG’w ¸rÇÍŠ¦¸±”Ý;$ü©–² ¿åµ–³MIÞ*e+e̾ædö5gɾà5Ãk†× ¯^3¼fxñŽe±W ¯^1¼bxÅðŠáUÆ;Ï{¼SµxnÈÐ8àý¦›’¼U<7V<™}ÍÉìk΂™ÆÓ¶ëþã¥ãQ~ýYïE?䋼Õe³ÿæS¾Dy:Qéé½m×½TUûxÍðšá5Ãk†× ¯^g¼cUíãÃ+†W ¯^1¼bx•ñŽUµ`˜ó´íºoQ]Kòk„ö¢uÀ[î²Ù»e`‰òtªÒÓ{Û®Ç÷cþ§ªz|?yš!9’‘U­,¿ü°þhOOïuÙlä`Û®}pfàÌÀ™3gÎ pc%ìƒ'N œ81pj€kÜñ½ãæ©ÆßŸÆ0ŽdW+RÇOEê nÎàÊ ;›£8J¥ìD7Þœ?ÚoŒ“ çwO¬³òôZ'öšžÞ´?Ù¶+óÞ9KÞ;¯^3¼fxÍðšá5ÃëŒw,‹'ºíàÃ+†W ¯^1¼ÊxÇây¢»†ÎÝoÆI†ó»!ÞYyzmŽbMO﹜lÛÙ×,¯{û/Ûõ¾|_Þ¬ÒaæEÞ±¤»È;ý¦Wy£®ý“­k$Àf6 °Y€ÍìàÏÊB,`±‹X,ÀÊþ|·‡O1ÀŸ£÷žr€?ßo)ÀÅ3±àb×c pùízoé°×ZE®òÚ¶ø’ä×o£c)¾œç´e0.JºÊ¯'Ú:K%]äÙïòþögÎ œ83pfàÜ7Vƒ>81pbàÄÀ‰§¸±ÊÜ» ìµÆ.1-I~-&\|úœªÌõE÷ঠ.>½3‰À¥Lßðzx##„uKòع´VžÞé¸Èó ¼ôoï­3TªX}>f|Ìø˜ñ1ãcÆÇ™ÏX˜ú|Äøˆñã#ÆGŒ2Ÿ±þèû–^¢Á $ÿ\ùÌ™Ï4+€H“Aâ3%>YÞZ$Ý[l¯beñý/ÃÉÉ`KòFëÞE^:1×(_~?عÈoš¾Ž†ý““ERœ83pfàÌÀ™sÜX‹úàÄÀ‰'N œàÆ"uï ²½ŠEêÜ”ÀM[’7é¸Ô£p7gpÅc–®8–À¥ìÖ}À[¥O¥ìÞ>à:ÝþX‹–Ÿf.ÿ§.ß·²÷ÒÓÎkù~ÇÇò,'¥¬Î œ83pfàÌÀ¹n,e}pbàÄÀ‰'N pc)»uòÈàÆ÷ñ½Gåµ)ç±.ߥöÒÓÎrmù~áÍò,/”²û)ô?Ç=Ÿ?ÿ§%È}ýo-[øF<ÒÓþŒùǧàǵKIÞè¿ÊþŒyo»p-¼>^3¼fxÍðšá5Ãk†×ïXûxÅðŠáÃ+†W ¯^e¼cñ¼Ç;¼ÓïñNït¤§7Ì%ïñNo–7zÕÞrCÈÊö:·{Sž£Ø²ýÒûç?A’ŸªºÝv».Âm¬[oceq+•Å>3>f|Ìø˜ñ1ããÌg¬k}>b|Äøˆñã#ÆG™ÏX˜îí7–£ØÅ±ýÔ~å3g>åÂtËgŠ|¢¼×j¸±Ê²ßÿ2–be¹¡ÿw<4ûí¿l„üÑ|&yÕê*?:•eg•e/U–>3>f|Ìø˜ñ1ããÌg¬,}>b|Äøˆñã#ÆG™ÏXYî-(–¥XYî=$"Ÿ±Coÿi¿ðÊgÎ|ÊMìû÷ý¹"ïU–ƒuþ¿t.ýï©ÔñãÅ‚Jò–êNàAo/ò^ÆÁµÖØgÎ œ83pn€kÑÁzûàÄÀ‰'N pc‘:XáñSáÿœJ?ÞÅ©$ÿð3ªîËd 6+j¥RvþtëÑßÿ È÷Î2å$æ¹yÇþŸœ“~èÌBg:³Ð¹ºñuÞXèÄB':5B7¾PÏß®Áš•ä{ç»û$†ª)tåWÚYy¥Í¯Û o–bËÙE^ùVøÛ#äsú·üã[a[k-g3›ÿŸÙüÿ\šÿ|Ìø˜ñ1ãcÆÇŒ3Ÿáå øˆñã#ÆGŒe>C¸å3e>ÃK4ð‰ŸÔÛ+É;GÝ÷|¦È'Ê[' 33/˜ï&rÿ‰MKí«üÚZyÖ®lºÊãYÛ«òôÚ†ê¶'y§z.ŒR/Ïrð©À™3gÎ œ87Àµ¨N œ81pbàÄÀ©n,R·æÜø¢¾uÈà†›nšk½Ð\<Û¸€›3¸j/ô\0/Xžå…Rv;ÜûykËõ+MK’×~ òÏ_Æ&Öö5É;&iyg×é-oaü•“RÖgÎ œ83pfàÜ7–²>81pbàÄÀ‰§¸±”Ýû $p“–$¯Õ"ùg-ZÂŒèžþø–Y\WÝï àÊ¥L¥Ræïv‡}^³ꀜ}$yJí×YyzËRî"¿~IúU;Ì¿È;.@33[˜™ÙànÆÝŒ»w3îfÜ͸»Á},¤}îbÜŸ‹qã.Æ]Œ»ÜÇ:ìﮫýn{ꤾrŸ3÷¢£vâ^õûå>eîùé7¤™9EÌ%§ˆyùþ}ütl·ü懿¬Aþù»tú].Iþqì°ëð‚šêÞò^fNœ83pfàÌÀ™sÜXHûàÄÀ‰'N œàÆJ¸|_‘>.¿Ý-±¤§–²n0–½7Epño5ÕpåRVrŠ˜×ûö¦µ¸"]ï?*.)×»U—$'j¥Œ9EÌ+¹cð"ï5°”œ"^3¼fxÍðšá5Ãk†×ïXûxÅðŠáÃ+†W ¯^e¼cñ¼wŠˆxÇ °Þ×H×ëéK’µâÉœ"æ•Üj˜ð–»o¶ïMÃOÝ7Û}kñQlŸÙØ™ãöý—±<ËÉ­:³Ð™…Î,tn„n¬ýЉ…N,tb¡S#tã›vûÞªþÔ²Ý7´Å&Ž|mßßu˳¼ðJÛšƒøŸOõýû%ŽOßÚ?XOÎW’·¾ôwä 73‹‚¹dQø˜ñ1ãcÆÇŒg>ã˹ÏGŒ1>b|Äø(ó+ÀþÛ°Òøµ»¿Åôésõ7‹‚é|%yëcyG¶j3³(˜Ößw û™‹¼Õaw ¹Î™™€Ð™…Î,tf¡s#tãûø`=n2m¡ ¡_•ë2;ŸJ]yWý@ssiT}>¿;Ý=½ÒÎïƒeO-Ëço—lØI¾t>–O¶-~²å³ôÞìó1ãcÆÇŒ3>Î|Æ—sŸ1>b|ÄøˆñQæ3V€ó»SäS8¿f>õŸ¿ÝEsá3g>åå“í,ŸècY÷Ïz…–@½’¼SYÞòÚ2rNOo f^äKjÄTr |Ìø˜ñ1ãcÆÇŒ3Ÿ¡²>b|Äøˆñã#ÆG™ÏPYtïøLW>sæS­,O܆™ÓÓ[Ó”OµõUÌ1@3r·¿Èk½ê òÏßÏVëÒýíéëQs·WÿöôAÞª,s©²ÌÈÝð1ãcÆÇŒg>ce™‘»=à#ÆGŒ1>Ê|ÆÊ2#wûÀ'Ïd(È?ëÏVk¦¹å3e>ñÏsú¥{¯²ü8N<7ªýù§¼uö{‘wÎ~%VT* ý›Ø,Àf6 °s€Çw{?Àb °X€Å¬àñåüãàú`<ÍÅ×£Ðñipõø4¸üvõ÷Æ‚§o×»YÃÿþ;ÿþ¯ûKîåÅÑ'ùuÝ»_‡K|ëìWl(\l(€3gÎ œ83pn€«Aœ81pbàÄÀ‰SÜXeü½Ççé3øv,;‚›–#È‹ÃhNòëTÿøÖ©»Ø\µJsÕZ=ÊE¾|_Bÿo)[î¿Ò\ëº×’\îO ×5É[Ë”§)ÏÂ:c)U¬Ù˜>f|Ìø˜ñ1ããÌg,L ²|Äøˆñã#ÆG™ÏXd øäaè#ÉT^•§î÷§îkú·÷ÖXOÃЅʲ²Ê²þf>î`­høá-¯.K’w;ÞòV‡ë_9Y$­¬äôÁ™3gÎ œàÆZ´²ZÔ'N œ81pj€‹ÔÊŠÔú›gÿ¸“·¢9Š.à/K’w;¸ò"i-•² K\ä­Z´ýö•¦(o­r6v³±ý>6Ù À™3gÎ œ87À¥lC£"œ81pbàÄÀ©n,eT àʵhûmÁ¤(o-˜6v(µ±ý¾ÒL¹öï?¬§UÙþÛ7¢· o]N|‘_?uÛv¶*ÛY)ÛY)ëƒ3gÎ œ83pn€KYœ81pbàÄÀ‰SÜXÊöï¥ìiU¶ÿ¶*óä­Ë‰ïÁM\üã{«²•²½TÊ­ßÅ›<nývÚzW’¥3á$ÿÜawÍGQ+e…af—ä­»£TðúxÍðšá5Ãk†× ¯^g¼cYìãÃ+†W ¯^1¼bx•ñŽÅóïT¼†4àœÎÝ”äG©ï#É?×\óQ xËų`—à’¼ÕÛx²c»óöç·_¿zö’üè,ÏÛßå¹›O6íz²ªÊlT²axÍðšá5Ãk†× ¯^g¼cU=Ù`¯^1¼bxÅðŠáUÆ;VÕ“Þâ"Þ,?:KÒó¶ªF¼ñé½QÝ“UUæ!á×÷Iҵª_¿]¦1@^ä{cµø–·ÚQþÊÁÆ'YèÌBg:7B7T:±Ð‰…N,tj„nxÓÞ‡nŠ¡^!t±op8 ¡«® BèªÛo!tã+íþòõ£úJ›“ëôíòõOyíˆvOOÏ3{åo9X¾å­…‚™÷KÞ¯^3¼fxÍðšá5ÃëŒw, }¼bxÅðŠáÃ+†W ¯2Þ±|Ý:/d¼c˜“ó”–÷òZÆžžžç¦öÊßr+ x« 3ãëÖ,ëU´ºÈã<ɰ_äqýTä%G/¯$ßÛooy¯ªŠ-SúàÌÀ™3gÎ œàÆJØ'N œ81pbàÔ7Ö¸[‹ n|Qëûh×pöäq/í¨ÈK†ªWpsWÝ àÊ5N¥Rv?úýqDû´@ôã(G’wN’ìûÑ­Öjh£þŒ·<ÿ°J¡ku*š™lîfÜ͸›q7ãnÆÝŒ»ÜÇBÚç.Æ]Œ»w1îbÜŸ«Á}¬Ã÷Ü'ךþqzíHòΡÔ-÷)s|«Õ#pŸ÷,ï´Yºäâû úܧeU¸¾ºÏî_ÓÏzOòë…·Ë«XÆVÆV‡V‡ûàÌÀ™3gÎ œàÆBÚ'N œ81pbàÔ7VÂ{pÓ\\‘Þƒ+ïºÞƒ›¸iOòëåÑ\üã{•pa¥l)•²û9û?Åá·‹|I_¨kI>Ø(L•1p¯ÉÒ§¶ ½½ú}>Öb%dŽ&oyË+Ëk©àõñšá5Ãk†× ¯^3¼ÎxDzØÇ+†W ¯^1¼bxÅð*ã‹ç=Þ©8nðNÅëÄïñNo”ÏÉíýqºÞ®B#ÞüôVí]‘Ñ—·ïÞ¬O«œí·.³a¤ÜÛ/' ÿ»M¼!;c3wo¬,n¥²ØçcÆÇŒ3>f|œùŒu­ÏGŒ1>b|Äø(ó ÓöÝÂøii²ýÖ :Ì>é ð¶G7äAlfiâU–{ë„íUI*™V,ë}³Ò«øu~?·þ!?*òÏűkCPËýÜúYl<_VÔjx‘wZ ßòÞžWÉ´à5Ãk†× ¯^3¼fxñŽ¥¡W ¯^1¼bxÅðŠáUÆ;–¯{ÓŠˆw¬÷®o”nm¹6vµÜ»NœÅ>ýeE­†oyÏke{^ÛoŸlÃ@Õ[ÞÛ6ÚX³ßÆ [(ôCg:³Ð™…ÎÐÕ :±Ð‰…N,tj„n|Ón¿-†™¤ºòBac-g[(l¥WÚÎZÎö_Æíþh[’<-b›¯÷4:1¥ÝÆ{ùç…ܯâûxÿ~¼Vzzo¡°—^»;k9ëã5Ãk†× ¯^3¼ÎxÇÒ°³–³>^1¼bxÅðŠáëŒw,_;k9ۚȽâ3Þi.¶{ïiðiJ' ÷òuFÄåùp¼ôôÞBáøþÉöô­}|·ÜKò£SV¶L9> eñ(•Å>3>f|Ìø˜ñ1ããÌg¬k}>b|Äøˆñã#ÆG™ÏX˜Žï몧¥ÉñÝ7u/ÉNe9Xe9تîxXÕ*Ëùý—ñ´^;¼/GIÞª,·Sèš‹ˉìÄßòÞØÉ6ÀúàÌÀ™3gÎ œàÆZÔ'N œ81pbàÔ7©ó{‘zZ=?^1¥$o©[G‡ .Ë;æÞ\yëñ¬”²õu{‡ê²Ôær.ò5í}lŸÿ»AÞ)eoùç)ç«VÊ.òέÅ+3nX™qgÎ œ83pfàÜ7”2N œ81pbàÄÀ©n(e·à¦ nxpÓ=¸é nÎથìÜ”ÁeyçÖâ•7¬%ã†uþ~ËÌS)»îý³.µý¾uF·¯óí­ßÇYÛï»ÈÆ1Ø:#Ïñ¿rRÊúàÌÀ™3gÎ œàÆRÖ'N œ81pbàÔ7–²ùûMO¥ìÞ!‚ËòÎÅ¿·à¦ .>=wŽÏyËs<€K™¾_,óÑmåµ3á$oõn_äÉÊ•ù¬%¿`³›Ø,ÀfvðXú °X€Å,`å¯p}¿Û裫nNòZ_A’·:ˆC€Ëï`65¿ú»‰ðÃñÍ꟮Jùû9ä/šÕéãfº]š/g’wÚŸW£¹œ·¼÷nwéÝÞÇk†× ¯^3¼fxÍð:ã+K¯^1¼bxÅðŠáëŒw¬kþnþp`ðÆë¦-É;^4ï¤0§Á;g¼ÕV÷Õh.'à-WÕå{ìÓöÛòÛdŠò8‰ýª<½ÕÕð–÷êÚRªký›Ø,Àf6 °s€ÇÊÒ°X€Å,`±+x|·/ß[©Ÿ¶–ßÞíŠòè8ðª<½uš\~»®ß¿zžÞ®ë×fÌÇ×ãú‹qЩýJòÖ¢cEÍÌoy뻿rr¸ÑgÎ œ83pfàÜ7Vƒ>81pbàÄÀ‰§¸±Ê¬ßWOUfýÚýX&ÖŸ¬º¦á‚…®¼XQ_tW>ÜXK¥lû¾5¼<œ”o·?¬c©ÝÀ÷–þüªçôÛíÏo/Þ ~‘·ŽV6d½2ûÎ œ83pfàÌÀ¹n,e}pbàÄÀ‰'N pc)Û¾ò,'å·à¦n|߃+ŸÓß‚›öâÝà\ùˆiCÆÌkɸaÝÓ–sí(hG¦•oyo]´³þå“~èÌBg:³Ð¹ºñuÞXèÄB':5B7¾P÷tˆP;Ø‘ie]ùë|g]´{é•v°Ãñã·MP¿‚¼·St°Ö£ƒmã—ÆÞA€Íl`³›Ø9Àãëñ`Äý‹X,ÀbVðø=ØíñÛ6¾_AÞÛ!9XëÑÁ¶ñÏïÓOo×ó»©è^’§Òý¸urþ¸[“ü:«½øn?Ù×îÉFØà9ànÆÝŒ»w3îfÜ͸»Á}¬E}îbÜŸ‹qã.Æ]Œ»ÜÇy~°x*‘çwwá½$OëŒÇ}ŸóÇ}Ÿôoÿ˜šÜóÓ[‹¤“Íg”¦æ·ºwk{ýö‰9Àla†wM?ë$¯õ Î{’/%ÚEÞY¢½å­2¾±¡{ÀÝŒ»w3îfÜ͸›qwƒûPÆw1îbÜŸ‹qã.Æ] îC) Ü«—†îq¥;¸×îSâ>%y­ùÂ}ÎÜ«ëìÀ½ºÎÜ«e|+9ló÷sч¦º‹¼ô³®,ÛÂürñ‚žív~Y¯+WþøÖNë[ÞòݾÈÕhd¸È;µÛ\*öýì0˳ì0˳ì0˳ì0Ëçì? úÙ!–bÙ!–bÙ!–bÙ!–ÊÙ1~8Ìß7zCvćán½ÕÛ…n³cÊÙÿøÖ}ÈŽò‡Ãü½…±ôÇ·ö÷7}?{z¸œè-ïe¡-ò·¼ÕòWNÖÖýЙ…Î,tf¡s#tc-ê‡N,tb¡ ¡_Ôú~–ùp9Q]ù]'´×BW^$©ôJ3š<Úü›õî¹%yÍäÉAþñ¡c×Úµ/òÔ<úäú–çÔvIÞZå”Ü^3¼fxÍðšá5Ãk†×ïXŒ¦˜^1¼bxÅðŠáëŒw,_F³No´×>·$¯¹9È?Öoüãcƒø“'iÀ[^(0·„mAwƒ_äiS~´òë¯w/Ž¿åŸ¿Þ% '¯$o .hj[Ø2eA·~pfàÌÀ™3縱.è>oN œ81pbàÔ7Ö¸ÝÔÀM ÜX¤nÁM{q8€›¸éx%yënACPÜXÊîå÷ê)ÚÊJÙýœýrKÙš>DÃkMò´u¢Ò¿ýæt»°Â[K«ÏÇŒ3>f|Ìø8ó SŸ1>b|ÄøˆñQæ3ÖŸ{?‰½z–³²úsoGùħÏÉré³þ¤{ÜßTéß~ÓÅQ¨,ºgï"_Bn>V–íë/ãÉE{ÛдĶÝ6gm×»§ÖÒÓ·Î"‰9EpfàÌÀ™3gÎ pc-ÚÐ={œ81pbàÄÀ©n,Rºg/€›\,RÛ×"õä&¾mhààÜ”Áå§oERÉ)bÛÑXõEÞZ$í÷sD[mnð-o¹£n;ºMü¯¼Prv4V l`³›Ø9ÀciØÑX5°X€Å,`寱U‡—×ûýÈÙV9 .w2ìèBîíøí¶‘Áuâ-o¹²mÌubc®[ÉuDÈ,Bf2‹s„Æ÷[?Bb‹X„”#4¾ Žß®œŒB„ª†^3nؘqÃvùYý~;¹µõïª#É;÷$o·“Øóë:‘»—ä­÷ÛÉÞogéýÖçcÆÇŒ3>f|œùŒo×>1>b|Äøˆñã£Ìg|·ßœÕÏó§Ë§yKòÎ寷|¦Ì'Ë[•åD•e³ÅGíøt³Åk¸|;‚¼¸gæ$¿žò|\+½VþøVí[Þš"¼È;…é¯ü{axÍðšá5Ãk†× ¯^g¼C]xÅðŠáÃ+†W ¯^e¼CY x§£vöðN÷x§+Þ9ã­ö×Þã"ÞøÇ·úkÞê¶zÀ[®ª÷ã¹'CG{oéìaGè-/þ.£ü㎭XUçïߛ˳œý‚È›EÞ,òf‘7‹¼‘kQ?òb‘‹¼XäÅ"¯FäÇ2q?î#?8µÜG~Š‘_•óe"Ê?.¦ÙŠebþ¾zZžå…×¹¾§öÓ—¾Øë\¨•ç"¿Ž1íkmqgSÝoyË1mgSÝœ83pfàÌÀ™sÜXLúàÄÀ‰'N œàÆZ¤ïµèé»[¬ µòÜ‚›2¸üôÎ<}W.e¥yúÝèžä‹| ¿ŒÏ¼%É“£ðãÊÄ÷_ikÍtì"ïLþíFQ夔Ý¿ À™3gÎ œàÆRft¯3'N œ81pj€«Ñ}ÑÜ”ÀMK’'îÇe•ï—UkÍE+€«NþpÕ3­n,e÷#µ÷Ë=•²/L_Ž$?K‡º òCÝã,®Ê–tô[«E [•±!vÎ œ83pfàÌÀ¹n,e}pbàÄÀ‰'N pc)»bàÆ÷ñò›!är$ùYê¯PôWDpñŸ÷N-Zت¬4Ä¾ß yþÑ\t9»È >Iÿ}ü½’<ú$½º0~Â]¶$þ{åßžÝ!J¡ëU•UÂ>w3îfÜ͸›q7ãnÆÝ îc!ísã.Æ]Œ»w1îbÜÕà>ÖáÛaþÌ},&ëO†iWîsæ>E3ym˜Ù’<š•î•{6“)…®WÆ×R¿ƒý3«h«¶o·]WVí‚Ä= ¯éûxKòË Û>¶¯ßÇOSLû†lÕ.òV3åVªÖ}¼fxÍðšá5Ãk†× ¯3Þ±(÷ñŠáÃ+†W ¯^1¼ÊxÇÚ{ëQñŽàÖd ãòÏ›ðW¿ßã"ÞüôxsüQ‘·ŒÜÞr3åþÝäáVƒ‹|ïœúí¬ÿeG·ü•“õe?tf¡3 YèÜÝX ú¡ XèÄB§FèÆ7íþÝ æáVƒºòÙÓκ0vt«AÝøJ;¾'×Ó¦Õ®~»Èk¾èéé黋 …ƒM]ßS»ºÞB¡dwðšá5Ãk†× ¯^3¼ÎxÇÒÐÇ+†W ¯^1¼bxÅð*ãË×ñ½|=í4èö´€·ÜNÜ–E¼YÞšº:¾ÏRèz …û)ò?ÕS´ó§ßåß)Ë{yí¢ãå•ä­æDæ’±ŸììdË”>83pfàÌÀ™3縱öÁ‰'N œ85À5îÜT=ˆ:«qÓäµ»Á—W’·š™áFW^ ž•RvÜN~ÿýœ’a§Ý‡§‰³‹¼Öi•䟆5¯ÚQÐñB¥ì`¾GÉWð1ãcÆÇŒ3>Î|†Âøˆñã#ÆGŒe>Cý¹ç3%>“·$O[„OcbOÕðé–Ï”ùdy§þÌšâèß?È;[Çüãæ…‚üó—Qìš¿È;[oyëBÕcf…i.¦>^3¼fxÍðšá5Ãk†×ïX×úxÅðŠáÃ+†W ¯^e¼cYœ¿{Ü>,ËÞêÖcÀ›·äŸe±Ø§ðV·ÞjBÀ[®ªúþ½ùTôãFˆ“¼µÜ[p‰Õ5•êZ?Àf6 °Y€Íìà±²ô,`±‹X,ÀÊßíú¾äyzAéÇ-7'ykÅ$¶f{»úûå¹Ok–¯‘îg8Â5ò®µe¿åó«´ $ÿ0“y—=‡\ä×_ïìZ«á[^lŽòëAîüª•ñ‹¼³ãv¾Úw™ÿ9¨Ãœ83pfàÌÀ™sÜPH81pbàÄÀ‰§¸¡pÓVë–¸7EpQ^ìšòkɉ಼³óxœ<–gy¡”Íß7[®\¾ÈSïüàyñ–׺ôJòÔëÒÓ[Ç7gÉ2Ø,Àf6 °Y€<–†~€Å,`±‹X9Àã+|þ¾+øpÕð}€§àñ56ÿÖ±¦W’§nq•žÞ:¾9õÝËùi¡ðÛØû¸ßw‘Ÿ¥õ¿ƒüÓPå¨þ\äÙà·¼e‡t2Ûˆ³dðšá5Ãk†× ¯^3¼ÎxÇÊÒÇ+†W ¯^1¼bxÅð*ãëš¾;±?-M~´Ì6éÞ¼Iç ÿ´C:j‡eou“.à­¶œÌ°ãôíý¦*6rŸ? ðÿ»¢-È/û›þïß?ø~»=È£{ç«òÇ]©$_>þx…­ˆ÷qïóû8™ßH³´1K³´1K³´1K³´q#mƯ€~Úˆ¥XÚˆ¥XÚˆ¥XÚˆ¥i3~]ܺä´Käon#ó¸ì½M›)¦ÍpÒfš‹kvÿèÀ$ùòñLJ´™Þi3ç´)/ù™YÉY2+9o'ð?‡<Ÿ>a–ï3¢GEžçIJòÖŒõEÞZš/¥bß°Y€Íl`³;x,‹ý‹X,Àb °r€ÇroÒ±»æï<ÅGyžI*É[“¾!ÀåâÊÞ®ë/³‚ÿýÿ$ïøgœ?Nà/Jòµór^SwUm‰¶²%ÚÊÞÚ}pfàÌÀ™3縱¬¬ôÁ‰'N œàÆ*³²*³þ4w;_úÌÍâüÑÍbQ’¯"µ¦†ÄÚBa-•²í¾ñIÅÄ·|ù<+˜Ò¶Doéä(=½¶ûž^™šÿïm³'yÇSñ"?;«„}îfÜ͸›q7ãnÆÝŒ»ÜÇBÚç.Æ]Œ»w1îbÜŸ«Á}¬Ã÷Ü'#ï¹O‰û¸ß·¥#ËÚbqûq»0=½dŸ1]¸Ï™{Õ2p/Ÿen¥2~ï1pÿ.òR+Áª$¯ 9È?~.N ìhrï"oî¬÷Á™3gÎ œ87À…´N œ81pbàÄÀ©n¬„÷n!Gqv.€‹m9«’¼6;ç ÿ¬X.N ìhø-€+¯H÷R);9ñE¾¤ܧƒ#]²Q[‘?Þ« ÿ¸>ã5+áÁZbÖË Qw3îfÜ͸›q7ãnÆÝ îc!=1à.Æ]Œ»w1îbÜÕà>ÖáùS#GºT§¶"=~¼ƒ[Aþq]NäŸÞë®=XwmÉŠæ<¿ßõ»}þA}ŽžVe'›"?‘oã[Þë@9Kõ²`³›Ø,ÀfvðX˜ú °X€Å,`åàü~_ôöùy4äzZœlzúD¾!ÀÅ”õõ"(WyãÜí"ï8„\åѯÀ%y£»ð*o8„ü“÷W9œ83pfàÌÀ™sÜg5 àÄÀ‰'N œà>«LWí@ àªGW \Ñ!$€›"¸,otY&pÅý¾n,e÷þ óQ,eóo×å~®3.òZoÖçíÚWy£ä*o¬3.òN3å?9)e}pfàÌÀ™3gÎ pc)ëƒ'N œ81pj€KÙ½SÊ|KÙüÛ ÓŸë­.vC~^PÀÛ(¸âz++—²¹TÊ †O¥L÷[Ùsé†é«¼µ¨ÓOwéµ&y«ŠUB}ÿ]úYN*aŸ»w3îfÜ͸›q7ãî÷±ö¹‹qã.Æ]Œ»w1îjpëpÁÙå©ßsŸæÒõØ{}EªŸº!¯Üç̽\ÆÅʸ¾—q?Ë eÜß7þŸÊ¸jíº!¯ò£³¹ê[ç„ë?¯%y£…ä"ïôb^僳òBµîã5Ãk†× ¯^3¼fxñŽE¹W ¯^1¼bxÅðŠáUÆ;Ö^?4|ª½þ­}ó³ÿ2á-oçúÖŸ$âÍòFßGÂ[ìþLxËG– ñ*½Ê‡IÝÚêvùe×é¿_Ü+É[«Ûåë­]«Û…•Å¥Tb6Jø˜ñ1ãcÆÇŒ3Ÿ±®-Ä-”ðã#ÆGŒe>caZˆÝgà3E>Q^Úœ½ò™3Ÿòªnùz7Þãªna•åÞb©ž ®¿g|º`_äùh~­<=o„”þø^iXK¥¡`³›Ø,ÀfvðønïX,Àb °X€•<¾œïmH–êÉÙúÛÉÙ§s ð4?û×ï{f¥?¾÷v-8<½ßîG¿?ÖÓGEÞk5ÜnϔϽørÞØnØÆ^Î[éåÜçcÆÇŒ3>f|œùŒïö>1>b|Äøˆñã£Ìg, gŒ§—ó=Ÿi.~·o¬?ð–ÏtîÅʲ± ¥U–»Iì?óRm—Ø3u;· ïU–ûúåUPºÊN÷y¯²ì¥ÊÒçcÆÇŒ3>f|œùŒ•¥ÏGŒ1>b|Äø(ó+Ë­ÓDæ3¾]÷ß¼/|æÌ§\Yî&"Ÿ,o˜¤'>åÊr|ß+}úì?R#kmÕp°UCa,{y–“^¶~èÌBg:³Ð¹ºñ}ÜXèÄB':5B7¾*ï›çOß±Gj`®}ì3¸0O¿<Ë ¯´óû Õi³$y««è¼ïÍ?ŠoD4Ž•·šƒOö±|–Þ›}>f|Ìø˜ñ1ãcÆÇ™Ïørîóã#ÆGŒ1>Ê|Æ p~¿Èýãݾ$y«1ç¼a9Šy $>åãSæ%0¿n—‘GíŠö«üzÏØ«Ø˜ó–× Ž5ÉccÁ^yz窡«¼SYþÊ¿WÀÇŒ3>f|Ìø8ó* à#ÆGŒ1>b|”ù •å–Ï”ù|:…Ýó™2ŸáåøÄÆœ#ýñ¹1g¯<½sORâS®,÷ƒÆNß\Þ‚¼Õty‘m˜·¼µ 3³áz:³Ð™…Î,tn„n|÷C':±Ð‰…NЯÊûóºÉ[·ºCèªÛ0!tÕm˜¹4â=³ïùþR÷û3žÞˆº½vµüFdCÖ³Ø×®J/>6K l`³›Ø9Àãë‘ -ƒ‹X,ÀbVðøeÓÁ!À“‹ïàû—ßÁl>7¸üÁhövýmvïÞ®lòvö}¯Tí“«¼sj8³ÉÛ™MÞÎ¥É[€× ¯^3¼fxÍðšáuÆ;V³ÊÒÇ+†W ¯^1¼bx•ñŽuͬ®ý8y;Ö56y{w:k§$¼å¥ ›¼Ùäí|?™öñÉö0y{‘¾øþ̧‚¼·‹³°z6:;—FgA€Íl`³›Ø9ÀceéX,Àb °X€•<¾Ûï<¹6¼œÖ,×Ï9Àå5ËÂ6¹Ùôé|?Zög­õ^ä_ƒyM7ŸN… §®òë!Ñv×,ëׯž'Û½™ ¯Î¥áUÀÇŒ3>f|Ìø8óßí}>b|Äøˆñã#ÆG™ÏXîùLk­5óžOÙ× ðÉ÷%*ɯ‡¬‘O~zúì²››Ùäí¼Ý6¬[q7lCv²óý]Ý×cótÙö§¼fó<îÌëëÙ¾s} 9¼íƒ3gÎ œ83pn€kQœ81pbàÄÀ‰SÜX¤n‡x3¸ñE½!GÖ{pS7©í7cõÁ»gÞX‹Ðö}õô%t…R¶#ó·ùÇÛ²w%yÜ~*eû/NÉÿººƒ¼µ¶ÿa•B×[c•&…^3¼fxÍðšá5Ãk†×ïXwd=ðŠáÃ+†W ¯^e¼cñÜ‘s]Àvv%y<Øy*žûOvæÓïœñ–·÷ïųºÞñ~jòÏ^\ ¬ª÷¿ËêÖãqߟ^¼ò"oUÕƒ+辑‹¼U”RQîg‡Yv˜e‡Yv˜e‡Yv˜e‡Yv8gÇXÓûÙ!–bÙ!–bÙ!–bÙ!–ÊÙ1~ÜgÇ´×Óû$¸ÏŽò¦ïq?YS¼43dGù“à`§‘ºá$dGù‹âþÎó¥ºN?¿o€}ü°Ž$o5`ž÷VÔ[ñ“àdóBçC W¡¦—\3>f|Ìø˜ñ1ããÌg¬ª}>b|Äøˆñã#ÆG™ÏX×î]–êR÷ü¾OüQŽ$oõ0ž÷Vî[±0l¼ê|èaü^YôBMˆz%Oº)mïÜË?özÖµÖçr‘wükÄ\.r'ùò,‡™œ83pfàÌÀ™sÜP‹81pbàÄÀ‰§¸¡HpÕfÌ{pS7\qunŠàâÓ[V8b†\u8€KÙŒî¹È—°÷ñÔ—s‘t ,é8ÄA>';òì¶%yÚ:yò-ÖŒöMÅL83pfàÌÀ™3縱”Íè~N œ81pbàÔ7–²Ý»ÀU½ùïÁMÜX ç´Ûx´¸mIžöŸ,¸êF JvÒmÃÛ«ZÊôËÅCÿþwïå­&Ï·¼·¬*Ü!¾<ËI-êGÞ,òf‘7‹¼Yä݈üXLú‘‹¼XäÅ"/y5"?Vƒ[gŒùñ•¦ŸnáºF~Α¯öI†È—W&…›ë—gyáu^¸ûúéóÚ?ö/+É?œt‹£loy­y=’|i4„\äo¤¿rR úàÌÀ™3gÎ œàÆbÒ'N œ81pbàÔ7Ö¢Â=òOŸ×þqb@Iþaj]œŠ àâÄÀz$ùÒèpàʕХR¶°•Éò[Ò±$yí$ÕAþi&S¼ì"ï\ö–g3—äæD•,3^3¼fxÍðšá5Ãk†×ïX¶ÆêãÃ+†W ¯^1¼ÊxÇâ¹°…Üò[{à±$y­ÂAþiU¼Ù,à-oë-ß­ \’wúû´Þþ.]­ªëŸ«Nò뉶âqýÍê~=“|éì6®l·qe Ä>83pfàÌÀ™3縱öÁ‰'N œ85À5îÖ÷$ƒ_Ôë D'ùuK3‚‹O¯Ý:q7gpå­Ò•m•®¥Rv;òÿg{KÙ½ÙÂRíÜP³ø[ÞrëÕÆ–h[©äôl`³›Ø,ÀÎKC?Àb °X€Å¬àñ~à)x|ÝÛz,ÕN¸ õ[‡W}9B€Ë fØq‘o!µŸ7´ÿÖ2³,IÞ™ ¾ÈÎöÛÎÚµw¶P`Vœ83pfàÌÀ¹n¬Ìd€'N œ85ÀU†Ùg܃›¶¢yT›Ô–%É;î\y3lgíÚ{©”ßhŸ¾ôtû@mÓêøi ­×šä­Rv°®æS¡’OàcÆÇŒ3>f|œùŒ…©ÏGŒ1>b|Äø(óëÏñ½“ái™r¤ë7j;MÇO;MW>sæS®?kE`n :¿ß4ù´‹sþt-æ-Ék¾hé鵿ïIÞ*L'2èÕÉ SÉlà5Ãk†× ¯^3¼fxñŽu­W ¯^1¼bxÅðŠáUÆ;–Åóû]¶OûgçOWš\ñÎov5LO¯5ø]ðÎo¹ªžÈ8à­VU¿¾o>”†‹¼vœ‚|~•z‡–$ÿðP)+ù….|Ë[ãµ~¡ªúWþ½ª¼fxÍðšá5Ãk†× ¯3Þ¡ª¼bxÅðŠáÃ+†W ¯2Þ¡ªÞã"Þ¡4¼ùHùü*uþ-Iþa T<Ðó ]ðV;ÿÞrU½›Äþ㳸VõüÝ æU‘·&}/òΉœg4ékæ:"oy³È›EÞ,ònD~¬EýÈ‹E^,òb‘‹¼‘ËÄ­ïCŽüø®›¿[½*òÖ¤oˆ|õPË3šôuɸÁº7÷*NúZ?}fýoyñ3+=}¼¨¶H[$‰­rTzé÷ù˜ñ1ãcÆÇŒg>cièóã#ÆGŒ1>Ê|ÆrÏg*Žç>Ù¨UA^\g¤§÷vÕÖbë ±…Âý`ôGj?Uÿ¶€Ÿ•ä{ãXÉÌÅá-ï•—JC?Àf6 °Y€ÍìàñÝÞ°X€Å,`±+x|9ßxš‹/gÿörž•ä{ãpÃ̽ ¸üv]PË€—_̧þçÊ&/è‚/÷Û£.~·/ßo»~Uä­™3[—l ^3¼fxÍðšá5Ãk†×ïXYÔ2ðŠáÃ+†W ¯^e¼c][PË@À›üéÆ[¼ Û!nñNo–oM¯M+™ÙxmßÛ=Èk³IÞºêþ"o¬ìldeg#ÌÖ€3gÎ œ83pn€+aœ81pbàÄÀ‰SÜXãîm Öj[œVJòÖU÷\ù`ge;+;Ø)Ùø~(üãäìiûí~(ü:Œöä<÷–G盛‹Ž.òÖö³5pÉÖØ,Àf6 °Y€<–†~€Å,`±‹X9Àã+üÞÖ x|ÝÛÄGyô?{ºà'¸¼ýÆl ¼_ÀSjA¾wöÏöÛ¯½Š‡;òœyËó |y–“/ý~äÍ"oy³È›EÞÈïã~äÅ"/y±È‹E^È/êýû~Ò0sä{gCè6òSŒ|–wìkBäËË¥Ñ~ìu~|Míñzú{yÅ3ãÏŸÞºTÔl´ÿ-o¹Ôü•“jp°jÐgÎ œ83pn€‹ÉÁŠIœ81pbàÄÀ©n¬E«EÇ×Zôyj¡ /¹ÔÌñé­KEÍ\¸r);J¥ì~\õOußçDÎÌyÜ+OÏ—ý.%y«1 süÿ—*VŸ3>f|Ìø˜ñqæ3¦>1>b|Äøˆñã£Ìg¬?÷|¦ê¦Õ‰ì”ïùL‘O|z¾{)É[gëçÃRê{eY^èR¸‹¼s)ÜòJM“où™ Óòë@ozúÇwáR<YØ8þòtü÷´”æé^3¼fxÍðšá5Ãk†×ïP×^1¼bxÅðŠáÃ+†WïP—º†.à­^CwwŠx‡ªºü:ŽŸžþ±ö[ŠQ ÇxËUuFçôùÇÏo û(Ë‘äqå¬<½Ö?³¿’|ol=¾å­cþ¿òBYœÑ1?àcÆÇŒ3>Î|ƺ6£.ÀGŒ1>b|”ùŒ…iFMÏøLË‘äq»ñ¬<½Öf¶¿’|oì>åÊ"ÔÌ|‘/aüq½¦{Ó‹WíLl “ÍKÍ>m¹›œýãª}ÚEÞ¹8u²O[„ÎÄw3îfÜ͸›q7ãnÆÝ îc%j¥ÜŸ‹qã.Æ]Œ»ÜÇ +Ô‰¸O*.ýto±óªèîÓRsb»å>¹êĸW7T÷ª[à>–qߟ”ï§[ü}ãæ¡µå-oÙs_äV÷¼5ª»˜Ò~äÍ"oy³È›EÞÈ¥¬y±È‹E^,òb‘W#òc1¹·dpñª»ùì˹yËo:D¾¼“g4{"?¾ÎïG¿ç£¸ß·ü”Úÿ³¬bÆ Ëýö®Vƒ…Uƒõg,%çÀÇŒ3>f|Ìø8óKCŸ1>b|ÄøˆñQæ3{ïƒÈg|‰.¿q9Á¼îùL®ÖŸ…ÕŸ…õg¬èªÕee•eE=ðËú[Gîà}p‘wzà/òNü[ÞëÏXK…iE²¼fxÍðšá5Ãk†×ïX×Vtm+À+†W ¯^1¼bx•ñŽeqE—»¼å²¸¢®û€7vÝn oµë>à-Ÿ¢­¬?ã~Húã€ø©ªn÷›çËýí^ÿS×¶ûcä¸-î ÿøùEƒì‹¼ÓO¿lßw2J¡ëµw”\^3¼fxÍðšá5Ãk†×ïXUûxÅðŠáÃ+†W ¯^e¼cU½Ç;­ÅªzwºÇû¿uío>»rϳèîð–Ï®¶ï›¥ÐõzSî½vÛ÷?WÓÓkmWÇ+ÉÎjqgum/Õµ~€Íl`³›Ø9ÀceéX,Àb °X€•<¾ÛïM/R€ÿ§óoÿqÉ3y­óïx%ùÑY³ììíz°5Ëñ›½ðØ2ÀÜ0–ßfó=ïIÞµ:Øšå`ïö£ôn?Øš¥× ¯^3¼fxÍð:ã+ËÁÖ,}¼bxÅðŠáÃ+†WïX×¶f9~3;,˜ÿÆò›ÿÆïœñ–ȶf9XU=¿OP>­YNt#Ñ[Þ[tœ¬0•¼-@„Ì"d!³9Gh|·÷#$!±‰EH9Bãëñü>ÈúôÙ¢K}B„Êßí'zìÌaa}ýx™à–äµÞù§uÖY;kX™EÂ[Þún__èõ¸–Væ°ðšá5Ãk†× ¯^g¼Ã»}e ¯^1¼bxÅðŠáUÆ;¦•9,¼ùKòZc›ƒüÓï¬5¬Ì"!à­~·¼åªz?!¾hÖù«%×ç/ÎA^Ù©ýwV¯Æ¶·\¯ÆªaÑ¥>ëŒæo83pfàÌÀ™3縱öÁ‰'N œ85À5îÞ¬a+Nÿ܃›"¸±Hýæ¶p7gpÕ6³®ºô àªæ®ÜXÊôý‡õ´ÊÑ&^QÞ±t¸ÈÏ´5üªÈk=¦J|üY?õ²½å­ïU¥‚×Çk†× ¯^3¼fxÍð:ãËb¯^1¼bxÅðŠáëŒw,žú^<ŸV9úÑ‚/Ê;> ï”ðFy­C\é¥û©—-à-/ïgžÿ¸XUýãë+É;½loy釥ùHòÖ¶«Ù¶«Ù¶«KUµ× ¯^3¼fxÍðšáuÆ;VÕ>^1¼bxÅðŠáÃ+†WïXUïñN.VUÿØ.ñJòNaÀ›Êâïœñ–·]Ͷ]Ͷ]—ï)w3îfÜ͸›q7ãnÆÝ îcîsã.Æ]Œ»w1îbÜÕà>èåû…,O{ÆËOúÊ}ÎÜ'×î‘ܧ{îÓ•ûœ¹W»÷ªáTà^Þr^Je|ýî¯ýT‹~ò%ø3ŸJòô³·£îåãÞÔTq¾È/?þsß/rWþíù­°—äGgÇzE&Äåä+ Ÿ6fic–6fic–6fic–6fiãFÚŒý´K±´K±´K±´K5ÒfüY¿_2ðTHsW¹¦ÍœÓfJi3%ù¸Ã>U,oÓfÊiÿíùf/ÉÎÎýŠ”CÚŒŸ0Áb.~ÂüdñßÿMò£sì½ý´2Ñ0ur‘/ˆí»µ’+òÞþ~ÉÂà5Ãk†× ¯^3¼fxñŽŸ}¼bxÅðŠáÃ+†W ¯2Þ±t —¹Xº³p™–øô£sì½ý´} aX)à-olßÑ\‘÷ö÷ïýþìÅSó=݇|îÏžäµqùg×Iñ>׋¼uj¾³Ssf ³– d^3¼fxÍðšá5Ãk†×ïXUûxÅðŠáÃ+†W ¯^e¼cU½Ç;íÅSó=]†~wÚ“¼6¬¤ ÿì+Þçð–OÍwvjά{Ö`þQþÑücW’w< ÞòÞ´3ÏYKæ9 Àf6 °Y€Íìà±²ô,`±‹X,ÀÊßíÁ@¦:ˆú£Ì®$ï,„—§l˜…Ëì7ŠW$\äµ|'ù5ƒ?<ÀÏÊÓçÔèøé«$o­YN¶f9Ùqbœ83pfàÌÀ™sÜX úàÄÀ‰'N œàÆ*|xŠpyšÅI~ ]Ÿ>§¦áOÏe%ykq²ÄY)eÛëû}!×s_ä—q{«M\ägcûm»wy½j댷¼µÎ¸È;ý±å ”pfàÌÀ™3gÎ pC)àÄÀ‰'N œà†RvnŠà†í¨[pS7¼Î¸êfØvïÜÁŧ·Ö[\µÅ4€KÙŒlï¶ù¶·ËªϽ孫ã6æ°s‘wö¼þÊ %gFÆs Àf6 °Y€<–†Y¿‹X,ÀbVðø Ÿ‘ùÚm€§à(o]`¶1g™àêž×vgKðÇ÷(f|Ìø˜ñ1ãcÆÇ™Ïønïóã#ÆGŒ1>Ê|ÆÒpk»’ùŒoWýäËyå3g>ñž˜9Ê—F÷uàS®,b•ÅßÄO•Å¿M|Ž•Å_;3ŸNS6ÿ´·«9Ê;Þoy¯0ÍvmÌve+Ù®€ì0˳ì0˳ì0˳ì0Ëçì«j?;IJC,;IJC,;IJC,;IJC9;Æšîï;vO5ý7Ó—ÿ©éþÚþtø²#>]³cÎÙQm°ÙQþ$0ÈÚ˜g̶ü¸Åå×ÿr•ïyëºë·<Ÿ×.Ïrr¬ÔYèÌBg:7B7Ö¢~èÄB':±Ð©ºñE½üx´2'ùõ}Cå­+Cèʇ%ÿŒme‡ë} ®¡rV’wÆd¶Û‘ôy=ŠG++j9{Ë[-gyk•³–^»+;Zéã5Ãk†× ¯^3¼ÎxÇÒ°²ƒ>^1¼bxÅðŠáëŒw,_+;VºÇ;¼Ó¬$ïŒÉÜâ2ÞøÇ·šÜÞòBae …»©á?óQ¼aÛ~2L¶í»ÙÜSUÝnw |Ôl¥.òŽ­Ô[Þ«ªÌÒa+Y:¼fxÍðšá5Ãk†× ¯3Þ±ªöñŠáÃ+†W ¯^1¼ÊxǪzkéñŽ¥aûm@i0Ux'«êv»IñÆ?¾e§ð–«*³tØn§†ÿ|t:>-6w4=ú–G²ÇÕâζßv¶ýÖYèÌBg:7B7Vƒ~èÄB':±Ð©ºñM{?æŸB÷? Ír†Ð•W;Û~ÛK¯´ã{r=}í÷óg®ÍÓ_äµK“ÒÓk—&½^IÞêQ8ÿì[Þº1m+Mó¼fxÍðšá5Ãk†× ¯3Þ±4ôñŠáÃ+†W ¯^1¼ÊxÇòu|/_O_»÷x£KÍàdðfï·ôôÚ•g¯W’·Žùä»ð– çw›æåaì~,ûÊý±,ž¬)üdë ædBg:³Ð™…ÎÐÕ :±Ð‰…N,tj„n|Óžß ²—‡M‘ûqüºñms².ç“­3JóôûëûIßà!äïëóä^^»³|{%yçKÿ"ï¼ßòÖ‘À_ù÷÷&àcÆÇŒ3>f|œù /gÀGŒ1>b|Äø(ó*À=Ÿ)ñ™´$y|¿>?Âïå¥1™+Ÿ9ó©~,>ÕøT?–÷ù~ó¨Y­¼åµÔÆd.òÎy«4ÌhSþ¯|kƒÈ›EÞ,òf‘7‹¼‘«A?òb‘‹¼XäÅ"¯FäÇ÷ü|¿óÔÜJBäã‹z‘/¿¨gö¢žÑ‰Bˆüø:¿þˆ©2õ¸ÿ4ü?g¬oùççÐ’šÒÓ?¦†—W­¡÷"ß;Õ@ßG–g9©}pfàÌÀ™3gÎ pc1éƒ'N œ81pj€kÑíh~7¾ÍO·¸)‹Oÿàà²|ï”2}ŸÃ[žå…Rv?„»½jûð{aŽõ(ÉÏN50«ý»Ù¿ÝìßîÆ¿}|¡öÿíbÿv±»ÿöñt?Zÿíã«0{”ägçgíÒÏzùŠ÷ór–#Ék[q òšcÍòJò¥óRYØK… á‚È›EÞ,òf‘7‹¼‘_iýÈ‹E^,òb‘‹¼‘_¨Ë×êç]AG’×6–ä5ÿ¥å•äKçu¾°×yi‚x_¿§?Ü”w‘wº²÷•m¯l˜ÝBBg:³Ð™…ÎÐ/Ô~èÄB':±Ð©ºñ¸~7Ex¸=-„®¼‡º²=Ô•í¡–näÞ wú>te_䥾ÎùHòZ_§‚¼Vìǹõjlì}¼±jœ83pfàÌÀ™sÜø:ïƒ'N œ81pj€‹Iá~ì‡é.öHÏG’×z¤䵯óñ4qcm«„[©”íÈßç"ß’ü¨È{µhgµˆMlîlbsg›œ83pfàÌÀ™sÜXÊväÉÀ‰'N œàÆR¶#·{pSå½Z´³ZÄfew6+»—fe÷ûi»c)¶À¿z÷±”ý8.''ùÞ978¾ï¡ÎyëJ¹¿rRÊúàÌÀ™3gÎ œàÆRÖ'N œ81pbàÔ7–²ûÉÕîºé¿_¢ýXÊ~=•“|ïzß=押u¥\7–²“­Ê¨à«f$½ŸèJ¹‹¼U‹N6Žu–JÎÉVOý›Ø,ÀfvðXN¶ÊéX,Àb °r€ÇWøÉV#a$öU³®ÞOt¥\pù|¢‰¦ãõÓÙàßë ¯ÙÚ¦§öTlµö‹¼ór¾È;/çƒÍÊ¥YYÀÇŒ3>f|Ìø8óÞí€1>b|ÄøˆñQæ3”†ãõÛþ…Ïœùd_ç9È?;—¶ZãyàS­,Oµ²lVö¸¿HwI¿ŒEIžîuz2f~Ë?¬]¯.óÃ.ÎÁn’¾È[•eF[PµàÌÀ™3gÎ œàÆZÔ'N œ81pbàÔ7©û+±¸iQ’§KΞl’oÁMÜX&ØÚ\¹HÍh ê(Í úþ‘÷°uè7“óá0æ"ïÆ?^;|lIÞ¹øç-o5lN€3gÎ œ83pn€KYœ81pbàÄÀ‰SÜXÊô}½õ°ÀMEk£®zsüxø±%yçž®\ÊJs‡ѵœùp-Ç”>ïåó«³]èÛÃ̳º]èï×3.ÏrR‹Œnõ‘7‹¼YäÍ"ïFäÇbbt)(ˆ¼XäÅ"/y5"?V£;Eï#?ÅÈ §1ðÚæoOàÏêæ¿ßhº<Ë ¯óûYÙ¹è`t,ßS{¯È{»dì–åƒ xƒÐ™…Î,tf¡s#tã µ:±Ð‰…N,tj„n|#ÞXÏEûÐM1tQÞÛ«a·,¥éã~ZÕÅû /òìXŠ»%ëov…óžä)ŒƒMhlBû`Úœ83pfàÌÀ™sÜø:ïƒ'N œ81pj€‹Éýtº‹·3pÓRÜ-Yó÷$ïLal6þ`³ñGi6þ¸¿õã\çéë|ûåÊñÿÖ„JòÖ úíí™ö£¸Ù²}m)ºrì(\ŽZ ]ïÖîfÜ͸›q7ãnÆÝŒ»ÜÇBÚç.Æ]Œ»w1îbÜŸ«Á}¬Ã÷·$Gîc1 ·$ßsŸ®Üç̽|üË}ŠÜã'Pžn/; ·$—B×;þ/ùaJÙÅé÷)å'kÖãÇ)åyMòÖŠ”ù¼å½é½Tnû|Ìø˜ñ1ãcÆÇŒ3Ÿ±,öùˆñã#ÆGŒe>cù Ãü..#¿ó?Ùð?óÏéï-#Ù0àSî‘>XcÙñ£þä½ÒÀæìßò^i(]* l`³›Ø,ÀÎßíkÔêX,Àb °r€Ç—óÁªŽ/^8‚¼÷veóå!Àå·ëy»?ª‡ãç/¹ùo™ä­ÑÈó¾W°x½ÏEÞÚ~;Ùö›[?Jsë¯^3¼fxÍðšá5ÃëŒw¬,}¼bxÅðŠáÃ+†W ¯2Þ±®ÝÎìg¼ci8ªkW¼sÆ[n ;ïû‹ ¼å=³“í™1Ç€ó…üX.òÚu’ òšÑѺ'yç Õ“Ý®ý–çße)t­ªz– ^3¼fxÍðšá5Ãk†×ïPU^1¼bxÅðŠáÃ+†WïPUÏr¹Çûp㬂¼ff¶îIÞ¹qödWƒ¼S›孪:£®Ç‹üã³ÒµÓ·<Ï(,•§·fDßò^]›KumF݉ Àf6 °Y€`­ žæšKÀ9£ÙÈàòÛUlÍ¢»›þÌÅ‹¾/ò£ré3È{k±5ËÓ8qáå¬ÒËYlÑÑçcÆÇŒ3>Î|Æw»Øª¡ÏGŒ1>b|”ùŒ¥Aì³ÿ–Ï4oç|â þ…Ïœù”?ûÅ>ûŸ¦î •å~¶øcÅôpPr‘/aA<~ùGŸµùÍ‹¼Ó!~Þ&_³ “QÿÀ[~ÓòY(L.¦>^3¼fxÍðšá5Ãk†×ïX×úxÅðŠáÃ+†W ¯^e¼cY¼·ˆxÇÒpwJx''ùö™ƒSeV7à­¶uŸ÷îo|z«s#à-WÕ…­×–ûßå\3¹9—Nä•MîÄy§+ï,Ü þ%t`ò €3gÎ œ83pn€+áÂVx}pbàÄÀ‰§¸±Æ-léwnšk=÷àz¿ä¥£iy%y§;1€+Ÿø”ì,Ε•²õ·Y¿’¼ãz®?:žIÞ:bv'³³àÌÀ™3gÎ œàÆR¶²RÖ'N œ81pj€KÙÊJÙú[«»_IÞñ=×½CÏ$o1;‹³dgqnßXãFùÞYØlìkcÅ„9B€Ð™…Î,tf¡s#tãë¼:±Ð‰…N,tj„n|¡nß_¨Ã?!tåÏëÌlì•Ví?wv|³¿šïx8¾ÙÓê6ìà.I~ÙÁ]æ¢òEÞqï¼Èã²·º–CϹ³÷ñÎÎuúÜ͸›q7ãnÆÝŒ»ÜÇb²³Ÿ>w1îbÜŸ‹qã®÷±îì$hÿ~Cèñp´§Í°p”³$ùåoÌÜãß2} Ü«ÓF{¹Œï¥2þãåëç–äñ#ï©öoOÿ”ëÕéƒ`> gÉGØ,Àf6 °Y€<¦~€Å,`±‹X9Àc¸÷QHžÎ-Éãbæé||ø||i.´vÏ|Îó»ÇÇÓ§úýõÚ¶†{IÞñQ8ï'±Ï³¸ët²]§“uO—Œ3>f|Ìø˜ñ1ããÌg|·÷ùˆñã#ÆGŒe>ci8¿[ì<}¢Þó™ÖbŸ³"¸ç3E>YÞÚ¤;I÷ôöºWý8,Ë{HWyÃÿì*oT–‹ü£r©m¿]åÃñ‹¼ãÐs•7V ÿä_ Ák†× ¯^3¼fxÍð:ãý¬k¯^1¼bxÅðŠáëŒ÷³,&¼Ó\Ú3Kx‹Îs o±,Þã2Þ,oÇ'¼Å=³„·\UÃ=ðGˆüŸ-É÷NY¼½~ÖYÚ »ÊSAy¯®Í¥ºÖ°Y€Íl`³;x¬,ý‹X,Àb °r€Çwû½—@ ð´%ùÞy9Ï·/çà,o̦¤—ß®÷³¶FOÞº?BÜJþgy­?p_“¼1\r•7vÃ.òÞšEìݮһ½× ¯^3¼fxÍðšáuÆ;V–>^1¼bxÅðŠáÃ+†WïX×îñN.®Ytο•üÏÞØ¼§?¾3Î’ð–×,bk±ªjrÂUÞ˜ø¼Êk?ë(?K}= òïÍMÅ¢l¶bB> ÿä…ªjrÁk†× ¯^3¼fxñŽUÕä‚W ¯^1¼bxÅð*ã«ªÉ oqÆ4à}(ÊQ~–šïäkÕˆ7>½·VE> Ûë~ªû#tOUuùÍ“qV’Çm˜Wåé½²…­—R]ëØ,Àf6 °Y€㻽ÏGŒ1>b|Äø(óKÃ=Ÿ©ZÖ¯C3‡D·|¦È'ËS/‰Où»}e•å~æyWñŒiûÑ—pMòë YVñˆjûqÊ-ʯëé}/¶ÕmßgJ¡ëí†m¥ÂÔÇk†× ¯^3¼fxÍð:ãëZ¯^1¼bxÅðŠáëŒw,‹÷® ïX¶]EãÓ¯÷ÛE¼ãvÖöã(j”_wÃ"ÞøoÏsL¥ÐõvÃöï»ÔÃr·ÚÅ÷dàT«k;[¯íl½¶³õÚ^*‹}>f|Ìø˜ñ1ãcÆÇ™ÏX×ú|Äøˆñã#ÆGŒ2Ÿ±4ìßi†” ou\ïÉç¬Vv¶^ÛÙzmg뵃u/?ZnI^³T×.eœÓß;¦9ȨWy«0¥Ât°î…>^3¼fxÍðšá5ÃëŒw¬kë^èãÃ+†W ¯^1¼ÊxDzx°î…ãG[Ñ-Ék¶¢ òÚ•ªsúã{d¹5á-WÕû¹ùíU¬ª·sÙ¶£ä;q•×I\}®òV];Ku­`³›Ø,ÀfvðXYú °X€Å,`åïö{ë†íU|·ß[7ÄgùÑY³œÄÕ'¸úvïo‚?·ÚÓüJ›ÑÓíþóº%ygÍr‘Ÿ¥½„$ÿœð»t­Ì{åßÞz·_ä ëÓò¾õ)ánÆÝŒ»w3îfÜ͸»Á}¨E€»w1îbÜŸ‹qã®÷¡DÞsŸ"÷¡ÊîÓ=÷éÊ}Îܫ˟À=ïI&ùç qâÿí­¸­O÷±ŒÏhëqžۼВä3±ùv|úSìõ˜g´õø–w®„ø''uxF›Šœ83pfàÌÀ¹n,¤3Ú.àÄÀ‰'N pc%œÑF`7µ$yçx-€›Š\u#0€+—²¹TÊÄJsÖ˜™5ÆÌ¬1f±Z$V‹Äj3½˜™kÅÌ\+@ä݈üXLÄŠ 󣘙¡ÄÌ %@äÕˆüX Ī³Š˜™×Ã̼f±×¹J¯s“»•®òÚP¸’|KÛùj¦‹|~u6ï‡ÂÏË¿}våßÞ«EF=ð3s„˜KŽ ;̲Ã,;̲Ã,;̲Ã,;̲Ã9;ƲhrOɱì˱ì˱ìËåìK·ÉmN);²…’|Kªù2¨”å-Í{?Š˜ñßÞûî0jàŸ™Å¼°â’6X¦ŠËÓ¼üfÞ¶íIÞªé [_.l}¹°õåÂÖ—}pfàÌÀ™3縱/lyÚ'N œ81pj€KäÂV·KÚÒœ*žK\4B¼€›3¸r‘ZØâxa‹ã¥TÊÖï·Z?•²õþ7ùÚìJòV÷Íúý4þUùã+-Ëÿî òÎ$Ü[ž?p¿DžTÂ>w3îfÜ͸›q7ãnÆÝ îc!ísã.Æ]Œ»w1îbÜÕà>Öá{•È},&÷Ü£½Ö®$ou߬߻o^•?¾4»0]¸Ï™{µ»6p¯Î.îcß¾ïS=“íþ:‹³6¢p‘%寖”n¬ö#oy³È›EÞ,ònD~,eýÈ‹E^,òb‘‹¼‘‹Éö}ßóé•vùé¬M;„È—We[•mlU¶•^çwôæWõu¾§Ó…©2Ç= ^•§×vKæ5ÉÓ™ÉãLDÁ ay–“jÐgÎ œ83pfàÜ7“>81pbàÄÀ‰§¸±ÝšdpãûxOGmSeªz.x•¼*O¯íOÎéß>§ÄDZ‚‚WÉò,/”²ã»qöS-bž"óñË/ãϼ½’¼µÅw ³«™yŠÌ%OÀÇŒ3>f|Ìø8ó SŸ1>b|ÄøˆñQæ3ÖŸã»oýSa¶O* W>sæSÞÚ:ÙÕÌl9æ™ÏgÚ±®uaœ?6WEyÇ5ÿ"OŒzUä½ÊRrõ|Ìø˜ñ1ãcÆÇŒ3Ÿ±²œÈðã#ÆGŒe>ce9‘¿ï=Ÿ)ò‰òb{`”w\óŸ)ñ‰òVeÑý¨ú‡ÇÀÃöÛEÞ™¸Èã}¯ÊÓ‹›ééy3`+=ýlT–¿òï•ð1ãcÆÇŒ3>Î|†Êøˆñã#ÆGŒe>Ce |¦µ¶gøTûÖïùL‘O|zqÏ,==ï™m¥§ŸÊ2£sú‹üc äU[³¼åÅ;œäÚª¸dhF›ioy«_î"ï,yþÊ …iFͯ^3¼fxÍðšáuÆ;Öµu¼bxÅðŠáÃ+†WïXgÔÖpwŠx£¼x#Š“|Øð›*¾šÑN`À[mr xËUU¨‰ý"/9áŒ+&}¿œu«<½uHô–÷êšJuM¨[Ø,Àf6 °s€ÇÊ"Ô– ,`±‹X9Àã»]¨ÿ98z.‹}¿^x«<½uÎ\~»ÞO9$×ÓÛÕ_gï·³üãrü•ä­í,£Öä·¼÷r.9X>f|Ìø˜ñ1ãcÆÇ™Ïønïóã#ÆGŒ1>Ê|ÆÒpÏgš‹¥Á_GT·³üãvÖ+É[ÛYFÍÐO¹²,ß¿zž>¼ät‘_Äš×âvÖ¶³–ïM®È{•e)U–>3>f|Ìø˜ñ1ããÌg¬,}>b|Äøˆñã#ÆG™ÏXY–§UÂznùL™Ïøn_ØŽÐò}Í⊼WYVVY~SNO¯}sík’·*ËÊ6”VVYÖReYYeéó1ãcÆÇŒg>ceYYeéóã#ÆGŒe>ceYYeùuòÚšeO|¯²¬l7le•å~êø(z¿]ä­Þ°íö’›¥h÷–·$¿|ñ-Ç^s“½È£Ö^‘÷Øœ?ànÆÝŒ»w3îfÜ͸»Á}¬„}îbÜŸ‹qã.Æ]Œ»ÜÇ {ïqpë÷rÜ­EBæŸ^ì%Ø’üRÆ3÷üôh›·Wä½^‚’Âvt§¯Â¼÷R\_~Ÿ÷~•§þ¬~ÖK’_;ÖµXÆ÷ï?ëÒߺuRÌ p7ãnÆÝŒ»w3îfÜÝà>–ñÝ€ ¸‹qã.Æ]Œ»w5¸e|G3îÓR\g·‡x•§–ñÄ}Z’üڹ积³ÁÝ:©’»„î§ã·ë$ÃòÐÑ~ 'ö·<^»$_;û¼µ*ÙC€›Ø,Àf6 °s€ÇÂÔ°X€Å,`±+x¬÷ 1Àc_õÈC€'ßÁÇ÷wpíé­i¥“íužéFîZçß™R°¶]È,Ä,T²H6 °Y€Íl`çoדíÞõ,`±‹X9ÀãÛõdÛdgº¼½Öf|Ìø˜ñ1ãcÆÇ™ÏXû|Äøˆñã#ÆGŒ2Ÿ±|Ýó™ÎbùÒåKA^<`NOÿ8`VñðÀ§\˜­oÇ~ÿ,E+6ß_Þ~ÿn¹—¿øÒÓÇáíZe1:y¶:3 •¥dkø˜ñ1ãcÆÇŒg>ceéóã#ÆGŒ1>Ê|ÆÊrok°ÝÌŸTY®|æÌ'¯lÒÓGóƒZe1:6|Ê•eAvd^aÎ[ž·Å—’¼3|ê]¿æ…mþ-ȧ DÞ,òf‘7‹¼‘«Á‚ Ì@äÅ"/y±È«ùñ=¿ g³ûÈ—íkBä§¹æóof2àÝ`"?¾Îïg¡U삺È/ß3þ¸ è¬È{[PëýÖð\\(¬È>í"ïô`™Y¸dEðšá5Ãk†× ¯^3¼ÎxÇÂÔÇ+†W ¯^1¼bxÅð*ã«ß½‚Šýg·x§Œ7Ê{ûgëýùÍ\\å¬Èû-à­v¿™ù(x»½pw;ÂDÕ¹ùçk)vHÜN¸~X±þ°¢¼ãdà•Å5X0#Î œ83pfàÌÀ¹n¬„}pbàÄÀ‰'N pc»µ"ˆà¦s òÏ"µ› nÁM\–w̸r‘ÚXBÉKÀû÷!ƒ‡‹Hf‹ÎXäµ»ã“|üõN·?X¿’ÜI¾Vþí½VÃ÷Œ©ÒïÒ%yk}¹—êe?;̲Ã,;̲Ã,;̲Ã,;̲Ã9;Æ¢Üϱì˱ì˱ì˱ìPÎŽ±òïß§«®€ Ù1¥ìF_ýݽ`\öÞËÇÏ‹Ûì˜üJr'ùZù·÷šï³£jB²£¼8>n›™_Õ-çãöýTqËù@W›_äµnd%ykm}°µõÁ> J¦ ¯^3¼fxÍðšá5ÃëŒw¬é}¼bxÅðŠáÃ+†W ¯2Þ±(ßJd¼ci¸5”Èx£¼u/û=Þ‡‘%yk5°ÕüÁªê½ÀÇfÿSU=ï;ÖÖ°¶IÞñü{Ë{ £çíÏz?k'ùÚ9~r2(TÕ’™Àk†× ¯^3¼fxÍð:ã«j¯^1¼bxÅðŠáëŒw¬ª÷F"ïXîñNï´IÞ1ê xËÝ®·x§ˆw\hŸß‹òVzúѨªËëû±ÒÃî÷EûÀ ñ—Wúõ–šeßòÚ–^IîÔÞ±–žžv°T ÝÍ©Ô÷ªº”LT^3¼fxÍðšá5Ãk†×ïPU^1¼bxÅðŠáÃ+†WïPUoñNïPÞI5û{¼SÄŸ^Û@Ö+Éš³ÖÒÓÓ²J¡»9y.TÕ[;‹¿S6¥µê2ÿv!øz$yí\h òñv‰éþÊ@%¹“|­üÛóﲺÖð_y¡ªöñšá5Ãk†× ¯^3¼ÎxǪÚÇ+†W ¯^1¼bxÅð*ã«ê­çLÆ;–†à9ðNë‘äµcÙ%ÈÇ+`¦ûûB•äNòµòoÏUµºÖð¢Û“™¹¸¼è§n‹¿]÷ò|2Szzþe¼*ò^]+ÙÁ€›Ø,Àf6 °s€ÇÊÒ°X€Å,`±+x|·ß²ä/(ýÖrs,AžO÷JOÏo×WEÞ{» J.þm‡~èD½È´šZ³øþ«Ç÷_=~9ÉãòZù··¦î/ò_/Cÿÿr0¸›q7ãnÆÝŒ»w3înpk‘Ñh%à.Æ]Œ»w1îbÜÕà>–H£™ËÀ=Õ }¡ûäâòçžûtÏ}ºrŸ3÷i..Œü÷òêÉ¥2~oåá¢söE^»ñÖIþñË8kÎÙù™Ž^yåDáÏüÚ“¼ã½³,Èðó-ï.¥bßϳì0˳ì0˳ì0˳ìpÎŽñ“ ŸbÙ!–bÙ!–bÙ!–bÙ¡œã‡Ã½U‘‹^Ý!;òÚNòí3…§ŠWwÈŽIÅÃÌå§ÃÌkvÌ9;ª>KË‚¬VCv”7î=Xæ½øE±²¡5-'Â[!É[Ó0Ëzïa¬Ú4Ì ˜.òΡKÉA à5Ãk†× ¯^3¼fxñŽ5½W ¯^1¼bxÅðŠáUÆ;å{¥ˆw, +kZÓš?å$oMÃÜâ2ÞüôŽSÀ[®ª÷~.Ç«Øx»ýø­å×ßå?–ä¥í7·k¼ÝØQê†l'fÀ¸›q7ãnÆÝŒ»w3înpëpŸ»w1îbÜŸ‹qã®÷±@ßÛ?Eîc•Ù~\5Gùµ”Eîc‰Ü~Ún×ØÃ»±Þ‡oÈb)¹G-;º‡dÙëÔ’äµS4yñMIîÏ£ºÚ~ùÎŽ½™ýÓR²xÍðšá5Ãk†× ¯^g¼cQÞÑ-(¯^1¼bxÅðŠáUÆ;ÖÞ]¢ðÆN_-I^;êvº•äþîG^,òb‘‹¼XäÕˆüø¢¾·†‰‘ßuço/êqÜŽYÄȗ':ίGLOæ!òÃë|½u ø{À}„þìA^½/òxƺ—äG£çr}¡»8þÊA5àÌÀ™3gÎ œà†bÀ‰'N œ85À µèÜÁM{û”ä ÝOÅ$€«ºwpÕ&Âõ…îâàÆR6ŸIzzÏ÷‹c¥n£%ÈK-ÀzmIÞ¸È;C„yg×é-oM¬%ß€× ¯^3¼fxÍðšáuÆ;–Å>^1¼bxÅðŠáÃ+†WïX<çO`¾ßXKx‡É¿€7uà_ñÎoµ?à­Nþ¼Õý¾€·ºß·Þš"|n^<-Ñôco’·:ð/òkïR]_ Y__ä­õ%smYK®-¯^3¼fxÍðšá5ÃëŒw¬ª}¼bxÅðŠáÃ+†W ¯2Þ±ªÞãŠçX÷x:ð“¼Õ‹wÊx³¼c}ð–W´Ì/g5º7rõ÷Ášëv{%ùYêR—z‡æãLòŽ_ÎE¾w–ºNm¿SÅxû"o-u]*ÊF÷F‚ì0˳ì0˳ì0˳ìpÎŽ±¦Ý ²C,;IJC,;IJC,;IJC9;ÆO£{#CvÄÓí•äg©mQA^j[¼fÇœ³£êв£¼Nw,˜*®á!;Ê_÷ö[Ѻg]RÓñ[¾—äGz©œùç»cM …#É/ïŽU[q™¿°uúÂÎvÜçnÆÝŒ»w3îfÜ͸»Á}ü èsã.Æ]Œ»w1îbÜÕà>Ö÷{#­h¤sÏ}ŠÜ³üHŸgEþù¸OG’_ i枟ÞZò/ì{)•ñ /¬÷–ÆgE>îËÝÏNòÖÊ~e‡Ø+;Ä^Ùv{É/à5Ãk†× ¯^3¼fxñŽEyEƒ¯^1¼bxÅðŠáUÆ;ÖÞÜã"Þ(wÕïdz“¼µ8^Ù!öʱW¶Ý¾}Õ}Úôýn€ñxˆ½¥‰Ü©âw‘¯²¸± ï•Å­Tû|Ìø˜ñ1ãcÆÇŒ3Ÿ±®õùˆñã#ÆGŒe>caھϪ?m=~7zy<ÞÒHúT±R |Ê•ecÛ®«,û÷‹§“Ø=]XPëoÚï/;-:Œ^ä‡Ñ‹<í£f|Ìø˜ñ1ãcÆÇ™ÏXYú|Äøˆñã#ÆGŒ2Ÿ±²ìß;ŒžÎ÷t1G­Eh¿¿í·hÒø”[„ö¯û…Ob+³1YïM –êNàqߺ·×,ÇSÃNòÖV^ÁCby–“#µ~äÍ"oy³È›EÞÈÕ y±È‹E^,òb‘W#òã{þÞe©nm÷¤[qqü8)ï$oíM U–gyáu~~¿z˜\ òš D’ÍY!µ×$o ÚŸ¬Áâd …³ôÒïó1ãcÆÇŒ3>Î|ÆÒÐç#ÆGŒ1>b|”ùŒäü~1ú0ºä5«•$Û CI|o:þd'Z(l/4÷~‘ü~ÎZçßEž:žnÝ{Ëk7gík’»±ƒµ1˜í…†þÊ¿&€× ¯^3¼fxÍðšáuÆ;Ô5€W ¯^1¼bxÅðŠáUÆ;T–{¼å¹÷{¼SÄ›å©]ïé⺀7^\·§{î8ØJOïTÕí…úé·{ÂƇcó‹¼äî}¾‚¼ÒÊó×"É£…ëZùããNÆÓÁÎ[®¹Ñqp‘w–{[ÉMà5Ãk†× ¯^3¼fxñŽUµW ¯^1¼bxÅðŠáUÆ;VÕ{¼Ó\ëwx£7ÿù òR#Þ¤(öÏkå›O§Roµ]"à-WÕ;Â?þØ'~* w†Ã=XGEžwqæ’\ŸGÒSeÌl+øQì%y§Ûâ-ÏY-Ïrp¤¸›q7ãnÆÝŒ»w3înpëpŸ»w1îbÜŸ‹qã®÷±@ßÓdîc•¹5¦ÉÜ£<ïÏ%¹>[[¦Ê˜ÙV0¦ÙKòN×Ià^=Ì ÜÇ2nÔO‘¯¡këãóz9’<¹8<Ýêþ–÷¾|ÿV8k1oyou[2|Ìø˜ñ1ãcÆÇŒ3Ÿ±,õÓ>b|Äøˆñã£Ìg,_FýôÏøLË‘äɇäébôÀ§\ý|_ýÎZ/NàS^ .hþù"/mÜ íøÛÂ3—ß\„‡ Y/òÎøôEÞÚµe6&³1Ü͸›q7ãnÆÝŒ»w7¸•pAÓ€»w1îbÜŸ‹qWƒûXa4J¸ÇÜa,a[عèò›øp·kà^ÄÜË Dfc²•lL¶{#„½ZÆ×Ôû0¥«Ô‚üºm´,ÅâšÜj_ëoW+Èn+º ä-Ïãª_"OÊxŸ»w3îfÜ͸›q7ãî÷±Œ÷¹‹qã.Æ]Œ»w1îjpËø½#Ê^-ãkj‚šÒÅA~Ý&ŽÜ³<Í}<~¬¿Ý±>§Ðµ. Ü«w¬îc¿óø£×R,ãÛý¯×·_iÿþwƒ¼Ö³ŸäÅÙà-É/¿Þ½¼Ï»±ÓÞ•qæÚ²•\[@v˜e‡Yv˜e‡Yv˜e‡Yv˜e‡svŒŸýì˱ì˱ì˱ìËåì?nkrvŒåë>;¦û옮Ù1çìÈÓFI^t5Ø’üò}°—wØ7v¾¼±æ—³ÝúI|Žh?Õµý·Ë ÆöýÇ/}yoƒ~G¦ùÙ©é%¿ÀÇŒ3>f|Ìø8ó«jŸ1>b|ÄøˆñQæ3Öµ{¿œÈg|»î¿]¿1î,ï?®hä½éÙ0>åÊr|ï©xª,Ç[PòÞ®í¼«7fxBg:³Ð™…ÎÐïã~èÄB':±Ð©ºñUy|o²yzU?î:È{Ûoò3ÞJž1Û‰îô¹È+‡ãò£s vþ6¬#É[/Ôó{j—B×Û?+YμfxÍðšá5Ãk†× ¯3Þ±4œè†€W ¯^1¼bxÅð*ãË׉.â xcK–³«ó·É~IÞ*žç÷âY ]k jÝ:I-Å»w/òÚ'[”_·¯ç¢/ç[ž½Ðç|&v‘_½ÛR3Œ¾È;‡Zoyë*‚Ùíì%»fÙa–fÙa–fÙa–fÙáœCMÙ!–bÙ!–bÙ!–bÙ!–ÊÙ1|ÜfÇ”³c¨k!;òŠ6ʯG_sу5dÇ”²c8»ÍŽ)gǰõ²£z¨²£êj°3¯ }FÝ®ûœšÜnºçÁìç"?ÒIùYyzv=ž> æûV÷µÖ&s‘/?6±Ê[C+å`ßp7ãnÆÝŒ»w3îfÜÝà>~̨Ûpã.Æ]Œ»w1îjpëûŒº]÷t¸7¾AûäÚõû”¸z¾mYkM+{uh%p¯­îc×½iØZ3Ò½Èkvk—éécÕëR3'ºÈãÙúù,'…´y³È›EÞ,òf‘w#òc)ëG^,òb‘‹¼XäÕˆüXLî#?­5gØù¼œž^¬éé&1òY;EÎgyáuîï­RO¯sß;+µãÏ·¼r€òߟµ&y§Õð"ï´^äÓÓ¿rR úàÌÀ™3gÎ œàÆbÒ'N œ81pbàÔ7VïZ|ªE¾w)?j‡‘\:ŒœœþøV×bWíZ àªg™ÜXÊ–ïËÃ&Û’®È™*W|\ägg‡p¹ýùGñÌqAwt¼åÙÎØÏrRÊúàÌÀ™3gÎ œàÆRÖ'N œ81pbàÔ7–²åûÝò°Oµ¤Ûª¦Ê…\y“íÜÁeyçÆŒ®\ÊJÎ0ûz;ºªØ}³þfø´+É“áÓç/ÎA>§Ý’]ñóLòNOëE¾wÎÊVV WÔûW^¨—ýì0˳ì0˳ì0˳ì0Ëçì‹r?;IJC,;IJC,;IJC,;IJC9;ÆÊëE“³c,_ëoª»’ü6—ä­á·³}Õö OM_ŸçŽtK÷Ú,O¶ùW°¹(…®·ùW2©xÍðšá5Ãk†× ¯^g¼cMïãÃ+†W ¯^1¼bx•ñŽ•åï4ÏÄίUõüÑŽr ò^cçɶ] &5¥Ðµ¶]×÷Vê‡Òp¼Ò$iø]®I^û]nA>§óŒ÷wÒŸy>Ž$ï勼S”fRs¼ÐDú_9Ø3ic–6fic–6fic–6fic–6n¤ÍðÒF,mÄÒF,mÄÒF,mÄÒF,mÔH›áëâ>m¦˜6C‰¼M›)§M~zíëb ò9 _ói3ç´©~œ„´©~œÌïæx¡qú6ã'Ì|»]¸5G틼öRQçc°§:<£^Û·¼ur|0_y³È›EÞ,òf‘w#òc!íG^,òb‘‹¼XäÕˆüX n½Yrä‡þËÛÈ?Õ"y>ú}z¡Î¨ÿ2D¾ü:/¹£Bm–ÇONæSIžrói›ø29;toz¼×Lεoêþ”÷–”Ì›p7ãnÆÝŒ»w3îfÜÝà>–2¡¦TÀ]Œ»w1îbÜŸ«Á},¤B½²Ço¾4Wîsæ>͵çCÈäì–û”¹ßmm˸ت¬äŠsøûêÓö¦›¡úy/ò£ô»LOÿ•ZÖÚ¬ÆEÞ±/?Œf5ÞòqG§VÆ™©ànÆÝŒ»w3îfÜ͸»Á},ã}îbÜŸ‹qã.Æ]Œ»ÜÇ2îïëá§Bÿ6 9tRîU{¹[îSæžå3ñÃhà&p/—ñ’#ÐqïO²­Å2¾üx’üú T÷f—|ö ÿ|wìán¢3=½w¼¼°óáõqÿ•Š}?;̲Ã,;̲Ã,;̲Ã,;̲Ã9;ÆO‚~vˆe‡Xvˆe‡Xvˆe‡Xvˆe‡rvŒ÷J1;Æòµüx‰‰’üºKpT÷á—Ï„÷ ÿü:ÙõhgzzïLxa‡º êã>‚¹Ê«øE±þ¶ß·,IžÌU;΂¹Êvÿ³^^éï}0c¦·çWñ¨aCÓÞóu:J¾N€3>f|Ìø˜ñqæ3VÕ>1>b|Äøˆñã£Ìg¬kÛw³’§º¶ýfV2>å-ö[>Sä孙ベRûí¡ÖQ]«îßw°ž*ËþõPëéÂÍ·¼x o”_X{ñ u¾õ\ê…º¶—êZ?;̲Ã,;̲Ã,;̲Ã,;̲Ã9;ƪÚϱì˱ì˱ì˱ìPÎŽ±¦ßåìëÚþ}÷û©¦ï_ÍŸ®ø Ù‘¯ðŽòë?q/^á²£|ê¾½¼àq©»?,u _ǽÂRü¢8~k“ñ–äGéPËAþùãwp ®%¸È[£Rº:ô8XwûÁÚâúÜ͸›q7ãnÆÝŒ»w7¸_}îbÜŸ‹qã.Æ]Œ»ÜÇú~Ï}ZŠõýø­-Î[’¥ãiùgܧᒀÀ½<¤v K[ƒu·¥2~Þ·¶¼ŠCjç­-NòšEa”×Z[Ž /µ¶è8“Üáøx~~ß°ûyRÆûÜ͸›q7ãnÆÝŒ»w7¸e¼Ï]Œ»w1îbÜŸ‹qWƒûXÆï}Í"÷±˜œ?6©9Ékf£Q^kR;‚¼Ô¤vå>gîÓR<‘>¿oü‰ü÷2~üˆŠÉE^9ùMAÏWºÏkª ‹¿å?¿õ¨_äÑ*x+É;Cj'³/;™}ànÆÝŒ»w3îfÜ͸»Á}(〻w1îbÜŸ‹qã®÷¡ŒŸ±‡b¸ÇôÁ_4pÏÛå òr¹Ç?>›~o%ygHíd`gÉ윑eÌEÞR;o-}þh©Ýz‘Ç=ºÒßÚ?ŸÌ”¾”ÿ•Ê팬]3>f|Ìø˜ñqæ3–ÅY°>b|Äøˆñã£Ìg,_3²J |ª£R÷|¦È'?=îE—þøÖnðùdYV¨,b D±Ê"VYô}^a®È?yŠ&(§Xa+L*&±u Xa+L}¼fxÍðšáuÆ;Ö5±åžX]«k}¼bxÅðŠáUÆ;–E±UXY+‹ú>.4WäŸ'±Eç’S¬ªŠUUß7ET×k¾ßm)zt¾å-ÎóÖ+h^Š;ykÛÕ_{«ªÙ¶+óÜ͸›q7ãnÆÝŒ»w7¸u¸Ï]Œ»w1îbÜŸ‹qWƒûX ï¹OÕuë=÷ªGgà^õè¼å>eîùé­mWíR~,ÐfÛ®%o°sùþyýàÑy‘×ÿäÅ›RÓߺ½é"o.¬/¬÷Á™3gÎ œ87À…´N œ81pbàÄÀ©n¬„Ë÷¥êƒÍe—K™ƒ¼xmðœä;„¸ò âÂJÙR*e·Æ2óë?,-IÞ:Ã[ѬìEÞZ®è¡¿rR‹ú‘7‹¼YäÍ"oy7"?“~äÅ"/y±È‹E^ÈÕàÖ¨(F~Ò’ä­µÍO†È—W&+ºC(D~|ß;šlÅ[m/ò-Éæ+ÞòñRé)9€ùÕl=‹ÅdûþÃ:*ò–íðEÞZØl¬˜ô¹›q7ãnÆÝŒ»w3înpKYŸ»w1îbÜŸ‹qã®÷±Þ;#mÅ‹aï¹O‘û¸¬ÚÒíòSòò ò«±_äÿø\ÆŠ¼e¸—ËøV*ãû÷/Ô‡QÁ‹<À?•ñ™õ^ä{gU¶³UÙÎ i?òf‘7‹¼YäÍ"ïFäÇRÖ¼XäÅ"/y±È«ù±˜ìßWek÷‘ŸbäÇb²#×ùòªlg«²½ô:¿õDøs,Åq¹ƒµ3·»×ËVó³»È÷βê`çEòiý+/¼ôû|Ìø˜ñ1ãcÆÇŒ3Ÿ±4ôùˆñã#ÆGŒe>c¹÷|‰|Æ1±ƒuÞò™"Ÿ±Ýáø^@ŽÒÓ[‡<òi=ïí>jïÓ–Ùù£ËÒ+Ék.K ò9YD}üâŽ-É£ËÒZù·÷ÚôO¶ßÇìXw3îfÜ͸›q7ãnÆÝ îc%ìsã.Æ]Œ»w1îbÜÕà>VØ{;–È}¬2ç®j¯$¯¹ª)Èçd ÷Q¹-É£«ÚZù·÷:þO¶ßW±cÙ_¯ïs¨ùìé*o¸ª]å×ÿ‡ÍþÇï}MòšËÒä¯Å?Çœþí¯€«|ûýÔï"ï\6úOþµØ“ì0˳ì0˳ì0˳ì0Ëçìøü$ Ù!–bÙ!–bÙ!–bÙ!–ÊÙñùá²cŠÙñY¾Rv}ÜBvL1;ò_óq[‚¼äæzÍŽ9gGñ»#eGñœ1eGqc`ÍßOSžêÚ½5ű”î¿ÈÇõÀT˜4¼Ê?vÜj7°\å®Ò«¼qËEÞ¹lô*_:_sé‹¢ŸfÙa–fÙa–fÙa–fÙáœãE?;IJC,;IJC,;IJC,;IJC9;Æ¢<?-~ªk÷¦:1;>÷Rv䳂(ÿ8+¨ÝÀ’²£ØAœ²£xKÊŽ¢3lÊŽòÅéÄ¿^Å/ ¥{¦‚¥ÏUÞ8j¸ÈçÔ`1Þ¢äNëŒÒß™S¹È{Ÿ*}ôñšá5Ãk†× ¯^3¼ÎxÇšÞÇ+†W ¯^1¼bxÅð*ã‹ò­#PÆ;–¥ËU¦‚¥OÂ[<Hx§€wš_Iî´Ì/ýñ±ž„·\UMð¯ò5¤öÃøæUÞ¸hõ"ÿüa­%KŸ«¼Ñv‘÷Ê¢KeÑä ð1ãcÆÇŒg>c]39'|Äøˆñã#ÆG™ÏX˜L®ŸÉ¥ÑħxÝgâ3­%+›Ä§Ø–ø”+Ër»‹c+ËòÛ5¼Ç’äñ`§ôôNÓñEþóåöÿ_ÞoÎ"‘7‹¼YäÍ"oy7"?Vƒ~äÅ"/y±È‹E^Èïù[Ÿ—ùñ]·üv­ó±$y<(,=½Óœ"_~Ï/¥×ù­uÂßÛÏk_úëw¤§C­õ·¸^IîÎë|ýþ¡³<ËÉë¼y³È›EÞ,òf‘w#òãë¼y±È‹E^,òb‘W#òãëü6òSŠüÿ|w¯ßm»ž:Öß6„ôJrw^çë÷ÏöåY^xß7œ[ñ4e»_·®i"*ÊãDÔ«"Ÿ“­í‡eìùJòÆ|ùUÞ˜/¿È{ýÛuÚJ%§ŸfÙa–fÙa–fÙa–fÙáœcYìg‡Xvˆe‡Xvˆe‡Xvˆe‡Xv(gÇXºï­aέxtŸSÊŽ,³œ¯Š|NÆÙ¦Ôç+É^);ÊGAëÏØØ~ß~ß~÷ûî]þl¥»%®òZ#·‚¼ò­ýGNOÏo…¥òÇw,±¯òÖòtgËÓ>w3îfÜ͸›q7ãnÆÝ îãW@Ÿ»w1îbÜŸ‹qã®÷±¾ï÷Gq§õžû´•î–HÜË­ûO+û+÷9sŸ÷øÇwü¼÷òÆÀ^*ãÇ÷q®§}Þã{§ÕÓÉ×qû¾¹xlw;ž®òVŸäAœãþÉIîƒ3gÎ œ83pn€ iœ81pbàÄÀ‰SÜX ï³O›ÔÇ÷®Å§c»[Û¡ .Ë×$%på¥êAl︱”Ý›V|§?““¹œ?^ž¶yo„ñ¼¿öj”êðE?¯÷ÒÓ; Ú·¼uÖ<—Ü…^3¼fxÍðšá5Ãk†×ïP”^1¼bxÅðŠáÃ+†WïP{oñNïPÞ\<äÅ›†ÓÓÇv®Rñ x«Óøou ðVkçùû®ÓÃí"o8÷^åµÜôôZÇåq w-=}ëTÕ™8÷þ“ƒÅ1ànÆÝŒ»w3îfÜ͸»Á}¬Ã}îbÜŸ‹qã.Æ]Œ»ÜÇ=ߤ~X¢îEçÞĽڈ¸Çv¬-ÊãdþZzúÖ)Ð3qîMÜÇ2.VÆuÿ³NgOÛ+É÷ÎÚZß›8æÊÿñã÷R;,¾È£}æ«"oöþ•“2.VÆûÜ͸›q7ãnÆÝŒ»ÜÇ2.VÆûÜŸ‹qã.Æ]Œ»ÜÇ2.VÆï¹Oé¨z{%ùÞY¦ë{ÓÖ\ùã?Š}äžåÑ÷U‘·Žª÷±ŒU_äÃ=T¥îç·¼x1Æšäî狼Óý<5ÏÌÅg.¹ø¼fxÍðšá5Ãk†× ¯3Þ±(<¼bxÅðŠáÃ+†WïX{ΗÞi©µ,¼ùöšôÇ·Z–ÞjËòlt@<3 ¢ùÖäórˆ§Ò°üØåÇÙ·¼wð¼Ü[SnÅÅñòð»,”Å¥Tû|Ìø˜ñ1ãcÆÇŒ3Ÿ±®õùˆñã#ÆGŒe>caºå3-ÅQœyù±ñ)Ê;¦­OyQ¸Ü{³nÅEáòP˜ •¥à óÔ“´²Ê²Þþ2棸íºþ¸ “äÛ0ûZ¬,+r]}Ë[7žý• S¯^3¼fxÍðšá5ÃëŒw¬k}¼bxÅðŠáÃ+†W ¯2Þ±,Ì£žz’VVoñNï¸Ü[Ü+Mò½Òˆ7þñ-ËØ€·\Uï­CþœÅõÚvÿÅçôËp’½á—±$ykscÛ˜Ìj.ÙB>f|Ìø˜ñ1ãcÆÇ™ÏX×ú|Äøˆñã#ÆGŒ2Ÿ±0Ýó™ÎâzížÏ”ø ƒ*·|¦ÌgT |Ê;Û dæDó½YÉÇZõéˆêW³yñ‡µ$ùÕ“ä,z™_äY΋¼5C²³õÚ^*L}¼fxÍðšá5Ãk†× ¯3Þ±®õñŠáÃ+†W ¯^1¼ÊxDzxï(ñŽ¥áWG!y±ª.I~5:‹Öïou3à-·¨îl½v|?xÚ=î·K–ÔS¾%ù‘νŸ–{·Æ'ëQ´ºÈ×NY,8—”B×›!aVC€»w3îfÜ͸›q7ãî÷±÷¹‹qã.Æ]Œ»w1îjp ôñýœñiCõžû´¤’-ÉÔó´ì½õIÊÜ㟠ôY‘çîÑRèz3$%Ÿ¤ùDw@Î'º©ë"¯†mA^ ûïÿ¯$ïÜp‘·6}Ïïw&}‰<)ã'º[p7ãnÆÝŒ»w3înpËø‰î¬ÜŸ‹qã.Æ]Œ»ÜÇ2~¢»0çÝ‘¸çQÐ-ÈK£ “”ägþÀ½¼ù}~¿¡íKä¿—q½¾ï’=½îÛTÛã¾È+†ÜÿwïåŸ?ë-rgy§Œ_ä2~‘wÎnÅl–T²YÙa–fÙa–fÙa–fÙa–ÎÙ1|€ì˱ì˱ì˱ìËåì>î³cŠÙ1”¯ûì˜bv ô!;â‡ÃœäŸ[°üÏò·CÈŽê‡CȎꇃ˜G”æï …-ï°kþþÃz8x¾È;ÏoyËŸAÌf „Î,tf¡3 ¡kQ?tb¡ XèÔÝø¢ž¿¯ð¶¼UBW=Œ ¡«n•†ÐU÷:UòË‘Ø"éGÿŒáv”·¼÷FxË{ë •^|bëŒ~€Íl`³;x|=Š}ª÷,`±‹X9ÀãKTìk÷G«•áVàò;X¨?¸üÁx;)ÿ×EhªÌµévRþó|y/ÉãͰsEþ±¼µ†·¼÷½iö½Ù¼YäÍ"oy³È»ùñ}ܼXäÅ"/y±È«ùñE}ïË#?¾ëî}9bä³<Þ4|¥ö}J– Àf6 °Y€Íìà±4ô,`±‹X,ÀÊ_áë÷åÄÓ[pý­=êà9¸j±<©ø^–…·ëÝ`óŸùã ù‹¼õzܾ;}¹$ß;_úÛ÷ž¾åYN¾ôû‘7‹¼YäÍ"oy7"?¾û‘‹¼XäÅ"/y5"?¾¨ombäG3óùò›vûî[ç’|ï|,oß;I—gyáu¾£KE.òõúßñQ;$Ý¿Îy½ÎÊÓ‹éFù‡ir¼òÏIÞ1[¸ÈÏN1ÙY1ÙÑ¥"€»w3îfÜ͸›qwƒûXÊvt©à.Æ]Œ»w1îbÜÕà>Ò]*rË}ŠÜÿç¤{ÿ:×ù:+O/^œåîéñîO'yÇ·!p/—ñ½TÆÛ/Ô£xqöE>ŒsÕVeGúùM÷¿¸=Éã}Kåï-êŽï¸sIÞê´:JÕº× ¯^3¼fxÍðšáuÆ;å>^1¼bxÅðŠáÃ+†WïX{o=2Þ±iæ²¶ˆ=RœîËâžäñbÍ¥òÇ÷ÖÀÇ÷5ð\’·zÜNÖqÞw¹ØA|~í÷y\Ÿ÷Ëk±§â¼ýñ¯ñcyMòÖâøüþ±\Š|¯%ƒ™-€´1K³´1K³´1K³´1K7Òfü 8YCH?mÄÒF,mÄÒF,mÄÒF,mÔH›ñëâdí(÷i3¹ØÃ~~m|\Ùß§Í´»YnÓfŠiC×[ÙŸßWö¥È÷šaJN~!狼4B2>]䵓¯øôÎí5oùçúEµ¶P¿Ð¥áoyn˜.=½µ¯à’Sȳì0˳ì0˳ì0˳ìpÎŽáƒd‡Xvˆe‡Xvˆe‡Xvˆe‡Xv(gÇP<ï³£l1²#ÎÎ S!;òÉ~|zçêûì˜bvħ·®)ÙQuŠ0sŠðý̾‹íµùZiN6EÞòÖU©ù¥o}_ŠÚ]ä]‹¼säoæSÀ™3gÎ œ87Àu¸N œ81pbàÄÀ©n,‘÷.¶p±ÍxXšpÕ[WoÁM\–wÖÖ\uqì’Cˆõ½¯ó©è—·ÿ»Ažìg>?]äÅf˜=É/¿KÅ›†.òø»Ü+ò–²™½‰Kö& ;̲Ã,;̲Ã,;̲Ã,;̲Ã9;Æ¢Üϱì˱ì˱ì˱ìPÎŽ±òë{ßúSñÔO›ò×ì˜svL);ÆÕ­~l·Û“üòá³#þÛó‡Ã^‘·ü—Í\q\py8·öOŽ–â~¹üT_’üꡪ³6\u‘¯>¼·<ÿ¬K¡kù›yòîfÜ͸›q7ãnÆÝŒ»Üǯ€>w1îbÜŸ‹qã.Æ] îc}/ø=ýÞrŸ2÷(/®ì—$¿º!Gîãç¿èÒŸ t)t­Ss—ܼ°SóåûþZ’X¬ŸéÚùç ý¼Kzzžß/ýñÙÚå¬È[wÿ•ªõÂŽ½ûxÍðšá5Ãk†× ¯3Þ±(/ìܺW ¯^1¼bxÅð*ãkïž—ïækIþqÃAÂ;Ï{¼SÀ;-ééÙû£ôÇgû¦³"oÝ!ì{[ÍÅÅñúãïÒI~ý]®Gú]®Aþù»<ïo±¶$ï̸]ä[g¿|e«Û>83pfàÌÀ™3縱öÁ‰'N œ85À5îÞ *‚_Ôë5ÎI~ý·Gpñÿ¬q÷à¦+¸9ƒ«Nœpå àµTʶöõ؃¼4«1\w‘×NÒÓ‹§?Nòë‡èo×^’ü×Ûµ?åãîP­nìäx+ÕË~v˜e‡Yv˜e‡Yv˜e‡Yv˜e‡svŒE¹ŸbÙ!–bÙ!–bÙ!–bÙ¡œcñ¼ÍŽ)fÇX¾¶ßƹ†+ðBvä“ãôôâɱ“üúOŒÙ1îkoß7¦Kü¸ÿ\ûpØØÉñŽ\‹/òÚ§º’¼v«çä¥k9ç%ýñ­+}½£»²ÞòÞ–ó^ú$Ø‘g2Àk†× ¯^3¼fxñŽ5}GŽÍ¯^1¼bxÅðŠáUÆ;åùE¼y9®$¯]ª»yéVÜyI|ëV\ïè–²€·\Uo­w¦?G±ªÞ[ïü÷û™*¾hoyñ’5É?f×b?ÖÁ†•t'ï[ÞëÇ:ØŽuŸ»w3îfÜ͸›q7ãî÷±÷¹‹qã.Æ]Œ»w1îjp ô=÷é(è{îÓ^³X Üó<éÿœ&^‹ýX›´:ÐUÎ{¹ë(•ñ{k¤³x•óE~ý>þ¸æõx¨Ãçw+Wåéc3æýçõüJr'ùZzzÇÕk¤Rä{Ûíg©Ø÷³Ã,;̲Ã,;̲Ã,;̲Ã,;œ³cü$èg‡Xvˆe‡Xvˆe‡Xvˆe‡Xv(gÇX{ïÝÓÎâ à÷Ù1ÅìÈO6$¯ÊÓÇvïû•ýüJr'ùZzzÇÚÕ÷´Rä[Ûí˽{ÍÇMK^[_äµ·B”×̉ÒÿyŠöªÍn_äKccà"ïl ,/tEáR26xÍðšá5Ãk†× ¯^g¼CMxÅðŠáÃ+†W ¯^e¼CY x§„wXßã}(ÊQ^ó›ƒüóûUx««ù€·ºš_^èrÈåÞ©h.¶h_äƒ!Ñ”¼ƒ¼UUçû‹£XUg4øô–gË¿åYöË83pfàÌÀ™3縱öÁ‰'N œ85À5îÞl.¶h߃›"¸ñ=?³7ß+Å7£1¤®ºå¼”¼Á}ïÒ|ªB#ÀyúB}~ËsKÆRyúÍÆMa‰V²×6 °Y€Íl`祡`±‹X,ÀbVðø ×÷Vݧ· Ð ê}€§àq•£ïm=Kåé7»w…·«ÑÍJy§Ûu¹µßøüe¥§Ÿ¡ÿé<ð-;åï÷ô·=É;Ͳyœk+E¾Õ,ûW^( F(ì0˳ì0˳ì0˳ìpÎŽ±®Ý“²C,;IJC,;IJC,;IJC9;Æ¢ltRÈŽj«î}vL1;òÓÏϵ_é<0dÇäp¸íIÞéô ÙQ5vZŒ:}—{Ó—]Å/Š‚é˃—óEž.6ü$X~úYk¸@y)˜¾,¥§§#•þøÞ'Aɲ à5Ãk†× ¯^3¼fxñŽ5½W ¯^1¼bxÅðŠáUÆ;å{˦ˆw, ˦;ä€wZŠUuù©ªj¸@y)X6-¥§§=•þø^U½7ÙÖ0lî-É;W¿åES%ùõç÷±CâÒÓ[}.+€Y˜egÎ œ83pfàÜ7VÂ>81pbàÄÀ‰§¸±ÆÝ[6%p“·$ï\¤ÀU/´»7epùé­®“Í,%˦eC ËöËm–æã•äéwùä>ø–Ïé¬úã]éé½=ãí»U÷ò,'¥lCÖ œ83pfàÌÀ¹n,e2EàÄÀ‰'N pc)ÛÝA—®v½‚›3¸I5÷Án à&¥§÷6A·ïîö˳¼PÊöÛ»§œnVž·$¯Í$)Èk¿ /IÞªE;šg\vtë_9)e}pfàÌÀ™3gÎ pc)ëƒ'N œ81pj€«Á­sO7Í[’×ôäµZä%É[µhGzËŽ®` àÆRvÜ7©©¸*ûÕ°ÃAÞÛ`;¦¢AOÈŽª~ÈŽi.Z œ?ŽY&ù§Ï^üî8Ù˜åù}̲ôô–AÏúúnÛõÐÏ{‘¯•ŽÀeIò£´a—ä•Kÿh=“¼³E~‘ï~Þ·¼uÃÎEÞù¢XKþ> ;̲Ã,;̲Ã,;̲Ã,;̲Ã9;†/ bÙ!–bÙ!–bÙ!–bÙ¡œÃÅ}vL1;†º²#6#/K’¥…$/Ý{ÍŽ9gGõD!dGµ9dGõ‹"dGù‹bF{yé­ðR’·¾(æŸÞ >£¼õEñÝiåñ‹bFG +ó6Ü͸›q7ãnÆÝŒ»w7¸_3ÚWÜŸ‹qã.Æ]Œ»ÜÇú>£ƒÀ=Ö÷—’¼UßçŸêû•ûœ¹—ëûwc¦Çú>££†µdÌ´ÞÛÚøUsVZõý®¬½$¯ý¬“¼2*øï_äqTp+=½cæÿ–÷Vö%[(€× ¯^3¼fxÍðšáuÆ;å>^1¼bxÅðŠáÃ+†WïX{ï-±"Þ±èûMw{I^«½I^ôüJò8軕žÞñÃxË‹ã{Û”¯ÝkjÿŸç ÿHÁÿ[kE™r­þþÃ*==íÎy¯,–,±3>f|Ìø˜ñ1ããÌg¬k}>b|Äøˆñã#ÆG™ÏX˜îùLÏtá3g>Sâ3¾œ™-Tà3©¸ª+3Íy¯²Ü{|ôg<-:–ÛÔ>–Z‡÷ºü´²­[’·*Ëò½?ã¨Èóà\’·¶]¶íÚçnÆÝŒ»w3îfÜ͸»Á}¬„}îbÜŸ‹qã.Æ]Œ»ÜÇ {Ï}rqÛõ–û¹Þ{Ú7½rŸ3÷r…]¾wZyžKòÖ¶ëR*ã+²Ï¸ÈK]šë‘äGÚy™NOo}i–%n8É×NfNP+s‚àÌÀ™3gÎ œàÆBº"û N œ81pbàÔ7VÂÙgp±eùnÎà¦n<€¼u‚ÊàÆ:¼~uz,eÌ j-9A­Ûí0ÿºÕ¬œ.ò3}#~|¾Aþùû9î¿P—9ýñ½Nž Ùg¬_—ä­­Ò­TðúxÍðšá5Ãk†× ¯^g¼cYìãÃ+†W ¯^1¼bx•ñŽÅóÖ{*áýó¨€7›GAþY#ïñNW¼sÆ[n¿ÙaÇZðžrIÞÚçÝ¿Ÿ€<•†ýÞÂÛµ«C/òÆ€WÚ6Z’¼fГž^1èù3/JòVMßÑñÊ<­w3îfÜ͸›q7ãnÆÝ îcîsã.Æ]Œ»w1îbÜÕà>èýûIêS•¹ç>¹vïé=÷)rW·¿úy¥§—ü¼®Üç̽üy°£yÞµdȵÞô¸:%sübÚú¯E!È÷ÒïRAÞë=Øòô(ÕË~€Íl`³›Ø9ÀcaêX,Àb °X€•83pfàÌÀ™3縱ôÁ‰'N œ85ÀUæÞøg«Žéÿhü³.IÞ¹Ž%€›¸,¿.'"¸)ýñóÒ9E;+¥l{}¿†÷aÃî"¿þ~>®„{ðì»Èk øôÇ·vÜ.òÎ<üÆ,r¶’EàcÆÇŒ3>f|œù … ðã#ÆGŒ1>Ê|†úsÏgŠ|†­¢{>Sä3,SŸê(ÛÆ|^ŸêøÆŒZ¶ÛþÏà‡-¨‹¼vÁû’ä;ËG±²Ì¿m ëHòøÃZJOßGAsZàÌÀ™3gÎ œàÆZÔ'N œ81pbàÔ7©{¯“n|QÏß/V^ó:ãÜÁŧ×NSt$y¬qKéé{ã4e+™•l÷vsñz“‹|©ìE¾è[Áî`~X¢éÞpÐ5có‹¼s½ÉEÞ¹Þä-où¢ÿ•“JØçnÆÝŒ»w3îfÜ͸»Á},¤}îbÜŸ‹qã.Æ]Œ»ÜÇ:|ï{2¯7 Üã‘ØàR¾|O懥ªî­C]³ܫכîå:,äR¸e<¸;T˸9Døw­`wŽíÞòâ¥GK’_ µ6;w‘·¾Œ6æÍ²•¼Y@v˜e‡Yv˜e‡Yv˜e‡Yv˜e‡svŒŸýì˱ì˱ì˱ìËåì?‚/MõÃÁ?r^³cÎÙQ=å Ù‘¿;–$¿ZšÆì?[̾;Œ¦%6抳-ßOžêÚò}¡ð´Ç½|·Q<*OŸÓ+íÃqòÖáë‚ÆÞòÞÆsÅÜ͸›q7ãnÆÝŒ»w7¸_}îbÜŸ‹qã.Æ]Œ»ÜÇú¾|?E~ª2Ë÷§ ú廟êQyúœ>N> Q÷(oB/hÜ!p/×÷’+ÎvgõðG«jfäùGjÅ•ýúËÉ׿ó¼ oÕá•5¯ß—˳œÔá>83pfàÌÀ™3縱öÁ‰'N œ85À•ðÖ'ƒßÇ÷ণ¸T]:kžŽ%É[¥legÍë÷R¶<Ë ¥ìÖWC¯¥6šr‘·V¤ÛíêÇLÑ^zzr«z,¤[šÍš*7€_ä×F“-öÙGy«nfW…=ȳì0˳ì0˳ì0˳ìpÎŽ±(÷³C,;IJC,;IJC,;IJC,;”³c¬ü·–>9;Æòµ±5ðmvL1;òÓ“ÞãwÇ–†R§Ê à·Ù1åìÈòÖwÇöàÆWø¢Øoº\=5ßì*U’_ÏÇôJ?ë$ÿüYoÅSóý¶—fKW·ÿÙ“<ýÛ罺ީ9sÜ͸›q7ãnÆÝŒ»w7¸_}îbÜŸ‹qã.Æ]Œ»ÜÇú~딹Ufÿ± ]I~=éŽÜ£ü³@oÅ3ìý¶w.rŸö$Oÿöy¯„®w†]rÚŽïÃ!OÇF_JòëÏz;Šeüøåèê¿×Å™ä­-òãë×ùãœðñ}îùÞÆ@ÉÎd‡Yv˜e‡Yv˜e‡Yv˜e‡Yv8gÇøIÐϱì˱ì˱ì˱ìPÎŽñÃáø>½ö´1püh%¨$¿~8ÄìˆòÒáø5;æœå…ãëÊþqBûø~¢PŠ|ocà¼](¼Tü¢8ïß k˜’Ù•äé‡õØüv&‡ÐÚYÁ™® ®œÈ¿ÿ-ïm 0-ÀÝŒ»w3îfÜ͸›qwƒûøÐç.Æ]Œ»w1îbÜŸ«Á}¬ï·^™ûXeî¹Oû´+ÉS‰|l~;“#pmçþLw†×vîOt@à^Þ(9€í¯ÛŸõQ¼î"¯}ÜGùö¹±6U.†Ý5@R—Ö~­Im^—Ê¿½Õ1ð–·6ö’ÿȳì0˳ì0˳ì0˳ìpÎŽá“d‡Xvˆe‡Xvˆe‡Xvˆe‡Xv(gÇðáp›SÎŽ¡|…ìÈQ¾}nÝO•«h÷_­Ûä¥}…kvÌ9;&Õ\qBvT;BvT7ö{ª½¸1p‘§yÑÑa*È“Åçï} òÏÿYs۹ȯ'ˆ>ï?ÿÌñéKç“`FwÔîÌ8p7ãnÆÝŒ»w3îfÜÝà>~ô¹‹qã.Æ]Œ»w1îjpëû½mÝ^Üܧ9ÙåIžg>+÷äŸeü¬¹íÜrŸ"÷iŽO_:zFìî%×»½à‚uý]jIòÚ òÚ´êz&¹Ó~ßÓ¶„¾O«%ùÙØ Ë[~7å…jÝÇk†× ¯^3¼fxÍð:ã‹r¯^1¼bxÅðŠáëŒw¬½«ºë¿]K’×.ØU×FÊ×3É6åŸVöú>R~”ägcW=à-/ŽlÑ/òë¯w{ÕŽ½/òÖ~¹Ó7ñ}/ÍòJòNÞEÞ95ß™ ÝÎLèö’ ȳì0˳ì0˳ì0˳ìpÎŽ±¦¼ƒì˱ì˱ì˱ìPÎŽñ“ÀÈEþ>;¦˜YÞÚ/wZuß÷á]²cÎÙQíà ÙQþ¢`&t;3¡Û¶Ý¾¤õÀôíîAþëÜŸòÒ[Aë–ä­/Š¹Ó¿åcní‹ba_Ké‹ba›òýì0˳ì0˳ì0˳ìpÎŽñ‹ba[÷ýì˱ì˱ì˱ìPÎŽñ‹baüKÚŠ_K’×¾(ä¥/ŠkvÌ9;Ê_ òÃÙQþ¢XØÅú}ø©ª®÷—êÅ=ŠõG·ê(¿î0.¯Ú}7ûww®Ç#tfh"oy³È›EÞ,ònD~¬„ýÈ‹E^,òb‘‹¼‘«Ìú}ðüéM{o)#åE÷ó(¿¾¨cä³|ïä–<áö[_§yÝj³Ûû†îx¾ÈãIÒ\‘¤ö¹Ö&­.òxùÀƒË[ž÷}æ’¼Õµ±bÒçnÆÝŒ»w3îfÜ͸»Á},e}îbÜŸ‹qã.Æ]Œ»ÜÇBzëЖ¹[°ºë:p¯z¤ÝsŸ"÷,׈f|Ìø˜ñ1ããÌg,‹;º¼ðã#ÆGŒe>cùÚÑ%Ol'Þ^Iw®± |ª×Xí;«?;Ûï»÷÷‘‹•åÖ‚åÏS{ òÜ¿UžÞ;Ã;Ðåd‰Ö¼YäÍ"oy³È»ù±ô#/y±È‹E^,òjD~|ÏßûEÅÈïºÛÈO1òã©Òñ}òb«<½w®s ; BäÇ×y0j9НóóGW'yÜ>ØKO¯s%yñ’3%ùG„ÖâváÉ–)'st8K%§ŸfÙa–fÙa–fÙa–fÙáœcYìg‡Xvˆe‡Xvˆe‡Xvˆe‡Xv(gÇXºƒÔQ,ÝçÑNò¸A¹—ž^Mòâ5ŠJr¸¶Ay²â‰Ž['?¾r_ò!ÜñúzµËSKÆ[ÞÚ;¼È; Ä·üæcù{Q>J6K Àf6 °Y€Íìà¡®‹X,Àb °r€‡Òpà)x8¿¹ð<¼ßB€««ºàêª.¸üv¿ê>½óÏø{ƽ<·Án•§çaÙ¹"oÌü•Þ®ý›Ø,Àf6 °s€Ç·k?Àb °X€Å¬àñí:÷~z=þhµ2mAž{¡·ÊÓóÀõ\‘·7Ž{#„›ãlL.òX{_ùpãÐw›¿‡Vêƒù'ƒåY7@äÍ"oy³È›EÞÈïã~äÅ"/y±È‹E^È/ê{_ŽùÑ—#D>ϼ$y¶|h¥>˜±ÆQ0ÖXžå…×ùý üR<Ü8î§œÿ,µÓ‰ÃßoŽ/=½·atVýWN^çýÈ›EÞ,òf‘7‹¼‘_çýÈ‹E^,òb‘‹¼‘_ç÷ž KqÃ;D~Zj;Ö!ò¹')Ê[»FgÕ!òãë|ùÞ”÷`^p‘ÇJ÷:Ç’ä;¤ã·äåå$ï˜\äé;ééZƒ™̼à(™€ì0˳ì0˳ì0˳ì0ËçìËb?;IJC,;IJC,;IJC,;IJC9;ÆÒ½|o'~0/Ù1…옎%É;vHÇoæ×ì˜svTÍ BvT¯%<˜yÁÁÌ ŽÛqâO—³§ªz?Ƚµi×ã×Aî(WøãŸ¦]/òµSÓWVÓ×RMïó1ãcÆÇŒ3>Î|ƪÚç#ÆGŒ1>b|”ùŒuí–ÏùŒo×{»„Èg,L¿Ú%D¹Âÿ4åø”+ËÊ*Ë–v[¦ÔõäµSÎ#ÈÇÏÊZe¹Ÿ«^U›ß¼È;C:yÇÿ`Fœ83pfàÌÀ™sÜX‹úàÄÀ‰'N œàÆ"µ¥íÑ)µy­_áòqU+R÷VÜЦÀ•»%6dO”¼Žýû‰ÂÓ¶ë~ÿûQÍáí-/^Æì$¿FoÕvâÂ(uí?¬RèZ–@å¤ö¹›q7ãnÆÝŒ»w3înp iŸ»w1îbÜŸ‹qã®÷±ïßÏ/Ÿ6Aï¹Oªyëîùòu'ùÕú}«ö„,j|¬Ã¥Ðµ,÷±Œß÷jžŽ?tþ_;þ<~›—ó‘äîÔá]çr‘·ö:R¹íó1ãcÆÇŒ3>Î|ƲØç#ÆGŒ1>b|”ùŒåëø¾×ùtw¤.›Ú!ÜñÛħ$w§þèR‘À§¼×y"³¹‹|MŒÃ ]wL Ž“5ÖœßKOïuižl…w":Î œ83pfàÜ7Ö¢ÙÓpbàÄÀ‰§¸±HÈ·.€›ÒMžÞ’¼ãjÀ•;EÎ不÷ZLÏJ);_¨”÷£ßs¼ 7És÷ôÇñÀžäq–f)=½3?v‘wæÇþÊA)àÌÀ™3gÎ œà†RÀ‰'N œ85À ¥ì\¹”݃›"¸(Ïãr{’Çá·¥ôôÎð[W-eÜXÊf4üvοu<«²‹¼æìï ÿ¸•mv­å"_«²·<#–B×Ú.¯^3¼fxÍðšá5ÃëŒw,‹3ãxÅðŠáÃ+†W ¯2Þ±xÎhV0àÃ:0àÍ=/òK#Þ,_ëÀ€·º×y2‡Sl¨ß~—³’üH¿Ëƒ‘·¼6Gd'y4­\*ÿöÖVé[Þj†9™? ànÆÝŒ»w3îfÜ͸»Á}¬ÃbËÓ>w1îbÜŸ‹qã®÷±@‹­nõ[ž•äG*ÐÖ.{œ´“<ÚÏ.•{kŸ7p//ŽKÎ0ç½Wß­ÖÓz‘W~Öÿ³<õ÷Ÿµ+OoÍW\䯷¼·ºu©Üöù˜ñ1ãcÆÇŒg>cYìóã#ÆGŒ1>Ê|ÆòuÏgÚj½œO,_ã ÏßË—+Oo E>U ÉÀ§¼@¼7š8CäÿüŸç ÿÈàÿ[§ÊÜà¹üv²nAþóÕâƒüúOœ_ź¶|¿Züõ,'+¼>83pfàÌÀ™3縱õÁ‰'N œ85ÀEêÞu%›.àæ nJàÆ÷üò[/͹yq¸==ýã˜2‚ËòÔ­úäºÀ¥ìÞ=àºþ\$­¨¯ó"ï˜)¿åsúB½î}XQÞi ½È[{+ò[;™7ËYòfÙa–fÙa–fÙa–fÙa–ÎÙ1å~vˆe‡Xvˆe‡Xvˆe‡Xvˆe‡rvŒ•ÿ>;¦µ¸<]QlÈŽªqvÈŽé>;&+Ê;]´!;Ê»«+ò[;™+ιÝݨåUü¢Ø¾ß¸}þïù‘v·/Ší§ÓÏk’·ºs·¯Ÿêݹºmô"ïÜ6úW^ø¢èg‡Yv˜e‡Yv˜e‡Yv˜e‡Yv8gÇøEÑϱì˱ì˱ì˱ìPÎŽñ‹â.;¦œc]Û¾ß6º}þïù‘öËχ/Ší§óÚkvÌ9;ÊÍÌÛ×½„Çfæ Ý6²£üE±ßü{ªª·¦Ö¢ƒëE~¦‰§.ç[ÓŠ?Gu¿|ÿ~޵—äGç“`gŸ{é“ × ¯^3¼fxÍðšáuÆ;Öô>^1¼bxÅðŠáÃ+†WïX”÷ïüO…éÞQh-ÚϼÓZìr¾Å;Õúýû!ö^’ªº³ª¼Nª;ÿÇýîÝrÿ­=ëäqÿìñø@ž åä¹:³Ð™…Î,tn„n¬ýЉ…N,tb¡S#tã›6˜ßT7TïC7݇nº†nΡ+ŸFh²?„n|¥ß$ž¾µ³ÌøŸ/ý‚çÅRyzï8‘¹ÌœÌeDÞ,òf‘7‹¼Yä݈üøBíG^,òb‘‹¼XäÕˆüø>>¿p=}<þèó2~ºŒZ–ÊÓ{GL̨嬵¯{÷?{ißç*¯¸½ÿY”äi7øÁçå"/ºN¤§çÝà­ôôó÷›ò¯/}ÂÇŒ3>f|Ìø8óù, „1>b|ÄøˆñQæóY@Ÿi/m$>ñR„EIžÎ3ÌYŸlÎ’žžÏ3¶ÒÓÏß÷>Ž×½ó®ÒÞÇUÏ×ϱ ¿þ~>\Lмs¥ÜU~uO_¢qÃ’äËï7yçD៼P˜úxÍðšá5Ãk†× ¯^g¼c]ëãÃ+†W ¯^1¼bx•ñŽeñÞ7%âKÃüý˜-=ýZ"Þ(ï܇wwÊx?› Þâ&]Â[®ª"w·_åµÛ¹¢¼Öì ¯˜¯ÿ™g%ycóï*olþ]äß”òþæánÆÝŒ»w3îfÜ͸»Á}¬Ã"÷­îbÜŸ‹qã.Æ] îc¹I=qÏ—ùEy­³ßA^ºÄaž•äm׼¸íš¸·]÷±Œ›Üx•Ó;•v»‹¼ø}¼&ùÇÝ`5Û•«¼qàUÞ¸ ð"ï•q³2nr ánÆÝŒ»w3îfÜÝà>–q“» w1îbÜŸ‹qã®÷±Œ›Ü¸O‘û¸Òõ åôÇÞX³ŸIÜ‹ýð‰{ñ.ÀĽ\Æ]*ã÷–Gè÷ù£%ÉÓ<Éë©.¿ßìNrÿÞö~•åôBziþÉIîƒ3gÎ œ83pn€ iœ81pbàÄÀ‰SÜXLîMj¸IK’§áª×S1Y~;IÝäþ½ =+¯HÒ”À¥ìÖJàÏ\»æâ*/MŒ[»£‰ÒÓ{[»+«E+«EýÈ›EÞ,òf‘7‹¼‘‹I?òb‘‹¼XäÅ"¯FäÇjpo\2×îmH‘}ãcÁ¸¤ôôÞãÊ^çkéuŽB®òRjo¯ Ï~؟ܾïì•?>ÏÙ—þíׯòÂKyt>f|Ìø˜ñ1ããÌg, È%ƒðã#ÆGŒe>cA>‰O, Û+ÈóÆšöå¶ï;c{åÏN¥{Ç{êxÝ#8¸<½]5OòÚ \¯$-Ëkéé«]/òüÍU ]¯0í¥ÂÔÇk†× ¯^3¼fxÍð:ãëZ¯^1¼bxÅðŠáëŒw,‹÷x'Ëâ¯NI^ÛeÓ+Éã¼ÂZzzã2Ù„·\UwVU 3ûO'Iǃ@ òâ КäNOªª;I:XYf|Ìø8óëZŸ1>b|ÄøˆñQæ3¦‚±ÆÓñÏñã ‚¼8H—þøñ>ÖZa:ØñÏÁ*ËÉæðÎï£8{Io@~Uäù—qTäy'cy–“ƒ“Èõ#oy³È›EÞÈÕàdÓkýÈ‹E^,òb‘W#òã{þdƒeç÷ɰ½$r¿*òüž?*ò¼/·<Ë¿¿ÎçÛöÏVЇ“ò‹| ¨Ÿ¹¹ùç‡Î>tŽ3É7__åí··¼ÕúýWªgÎ œ83pfàÜ7N œ81pbàÄÀ©n¨E÷à¦nx߃›"¸i òÏ5G7]ÀÍ\ñò论ÀUKY7–²»!ô?ó]‹•ä5[µ-É;Í×ó|¿²¯yŽ_å{cÏë-¿Ù‹þ¾ç5—,>3>f|Ìø˜ñ1ããÌg,L}>b|Äøˆñã#ÆG™ÏXnM62ŸaÓ*ðÉæ…[’w:¦ïùLkͶ;ñ©îy>Õ=¯ù~jþcùôrÖoÝ;ÿ}yºVýuVž^ÙLþ3{MòŽKÆ[Þê…ž™ÍgÎ œ83pfàÜ7Ö¢>81pbàÄÀ‰§¸±HÝMDpã‹Z¿© ¸9ƒ›¸øôÒ¹ÎÜœÁU&¸ò"©ä1ßO¸ñ?•2#ƒÞ‹|/5¢¦§·ærÞò^-b^ òf‘7‹¼YäÍ"ïFäÇbÒ¼XäÅ"/y±È«ù±ÜG~ZŠÕÀÈ.7D¾:—"_^s˜½ÎKŽóý쟳v‘/éCçÁ÷"ßÒ¹èù°ã¶ îé‹<ý2žlmçuOÏÌ1€3gÎ œ83pn€‹Iœ81pbàÄÀ‰SÜX‹îÁMg­• €›Tó¨½7EpãæÝ‚z™¸ªÉì¼ ^æ¹ä0ßÏð~|f=­ Ö_®ûwÞä5kJy­cs^“¼U ™_Á[Þêxþ+/¼>^3¼fxÍðšá5Ãk†×ïXûxÅðŠáÃ+†W ¯^e¼cùºÇ;ÍÅ…ÜúÓE†“·$¯ùÇ*ÈkíÚsú·÷j/³wxËGWëïÛ¾_¼ð`Üp‘ég}Vž^œƒHOϯKéé­öÀÂØûü,'ë˵ö¹›q7ãnÆÝŒ»w7¸uxcÝ…}îbÜŸ‹qã.Æ] îcÞXsâöý–‹À}ZŠçnÛóTéé¹Ï~)=½ÕÛX°Ï˜Ÿå…2¾ÿY?-÷tÕv­9qO_ÑSúÁ¹Âÿt}ÙEíg¶ÊÓ[C[å¤÷Á™3gÎ œ87À…´N œ81pbàÄÀ©n¬„û÷Jø´\»õ¬Èà¢|\‘N©Æ¹Âÿt™X7͵+:¸ò‘å^*eÇ÷aʧéñÛê±$yœÌ¸‰ó-ÿèàÚ« ,º«ä-ï-)t‘ç\r¶xÍðšá5Ãk†× ¯^g¼cYìãÃ+†W ¯^1¼bx•ñŽÅóø>oý´Œ<~[FK’G[އ›8oñNoüã[Œ¼åuà.òœÏï†5O…éÞ¢`ŽFlòÏÏÕ=ý.$¿ü.Wm5ß‹¼UUÏï7•B×;==KUµ× ¯^3¼fxÍðšáuÆ;VÕ>^1¼bxÅðŠáÃ+†WïXUÏïnUO…éÞÅ$â®Ï x§„w:’üRU3Þ±(Ÿ¬ªžß¯í*…®uzª×íHìV¼Wó"/Œ!ý™O%yêjx:=ÕëûqÈ^‘·›y§,þ•/‹€3>f|Ìø˜ñqæ3Ô5ÀGŒ1>b|Äø(ó Ó-Ÿ)óÞ®OšÖ»ò™3Ÿi®>“k¶÷Ou½ø”+˽Ù²+ËŒô.òŽâ[^¼ˆýHòÎM‘ùñcú§¼eÛõWÎw3îfÜ͸›q7ãnÆÝ îc%ìsã.Æ]Œ»w1îbÜÕà>VØ{Ó–È}¬23: Ü«–û¤0?IÞ¹æ2p¯­îÕÃÌÀ},ã÷vª Dýv2ŒH?ÚŒ;ÈÇëÚoÖ:ÓÓóÏz­üÛ[íµù¯÷¸Ê[g¡å…bßϳì0˳ì0˳ì0˳ìpÎŽñ“ ŸbÙ!–bÙ!–bÙ!–bÙ¡œã‡Ã}vLÕ¥¹~;‰ãÓk$8È??î³cºfÇœ³cšk7!;ª[Î!;ªÓ®!;Ê·–þ¾¯§å©ïçå^µ9Ö·¼Ö?˜Å]ä9Ö‹¼ss˜Aˆ¼YäÍ"oy³È»ù±ö#/y±È‹E^,òjD~¬2÷=1òã»Î÷㛯Ú`fˆ|œûpúã[ƒ™!òÕÁL• z´|ï—ûpòx%yÇûó-/¶‘ïI~ÝÞÙ‚iëÿI’·6j¶QË z83pfàÌÀ™3縱˜ôÁ‰'N œ85ÀµhùÞ{úáóJòŽ÷g—7ö$¿îˆ&pÓ¼%yk¯sa{%ƒÝz@ü½úpªL^\äÑñ©Ü™8ü÷ß9Îû3I¿Ò¶ÒÓ[¥Œ9ì¨ä°ø˜ñ1ãcÆÇŒg>caêóã#ÆGŒ1>Ê|Æúsïq“øŒÃ O6©™ƒüZfŸéÊgÎ|&Õ&ÿŸrýa&5Ú¾»½?åÓŠ8ªë$¿þüÎ-­+ÉÏÒïòòÚÙúz&yë®`ZQŠ|ïm+Õµ~v˜e‡Yv˜e‡Yv˜e‡Yv˜e‡svŒUµŸbÙ!–bÙ!–bÙ!–bÙ¡œcMß¾_Gñt–lq¢—€“üZ{cvŒÛ£[Z¸†/Š#ÈkÝ;ë™ä­C¸‚-N)ò½S´{÷Ç!µß¡W? öôE6œäGè{Ídà"o5Öìhò-ï-u÷Ò'A¯^3¼fxÍðšá5ÃëŒw¬é}¼bxÅðŠáÃ+†W ¯2Þ±(ß;ô¨8ywš«UuOËñ°Ñë$ÿè`Ùk&o¹7eGão¹ªßw°žJÃñ›Éó`&û–÷–ºº.ä-o]õWNN#û‘7‹¼YäÍ"oy7"?Ö¢~äÅ"/y±È‹E^Èeâø¾ûô®;~ó,MCäËËŸݸ"_>Ð;J¯ó“½ÎÏßîE›•ä5Ïþ5È??ƶЀ¼¤?¾×©x¢7Þò^kËÉŠÉÉŠIŸ»w3îfÜ͸›qwƒûXÊNVÊúÜŸ‹qã.Æ]Œ»ÜÇBz²Bzþv ã¬$¯]Þ‘þøÏUÙF –ôÇ÷zDOtyGà^.ãg¥Œû… U/ò- <™¯½å­Î˜·¼µ¬ú+•„Î,tf¡3 ¡Š XèÄB':5B7¼ÒîCW6Ù¼ÝC7ì…ÐUW&!tÕWZÝøJ›¿„<´%\äµ›$O-ÀŸ_*K×F#7%¹ÃŽÁÓùË[Þ:ù+/¼7û|Ìø˜ñ1ãcÆÇŒ3ŸñåÜç#ÆGŒ1>b|”ùŒ`þ>võp8øä{Ñ$OòŸ_äK׆{7%¹Ã¾ÜÓFàS=°XeQê *õÀ[?þ2ä•~Ÿÿžî$wúa­•{«WÐB{^åäK_¬bõ¹›q7ãnÆÝŒ»w7¸•P¬ö¹‹qã.Æ]Œ»w5¸V¬Â*õ÷M•Y€À=WXy©so:œäNz­üÛ[{Úó ÜÇ2î[;½_´‡V‚‹¼ö»LOn¿P×UIÞid¸È÷Fß[žÖ.É[ëK—ªu¯^3¼fxÍðšá5ÃëŒw,Ê}¼bxÅðŠáÃ+†W ¯2Þ±öÞšŠD¼cçEÀ[5­ x§{¼ÓïœñVû>Þj_À[íï xË‹ãû ü}Ÿ§Ò°ü²môß7ø+È+><f§§÷ªê‚ÚßòÞ93+àÌÀ™3gÎ œàÆJØ'N œ81pbàÔ7Ö¸{pÓ\<Ã[~ÚÁ½‚›3¸dœu7gpå· ÞÆ®¼@,™•øn˜ÿ«#åy凥q…·"Û®·|´`î°K’_~½žçbGÇúýB®½òÇ÷¶‰W¶M¼²BÚO³´1K³´1K³´1K³´q#mÆ2ÞO±´K±´K±´K±´Q#mƈ[ÇW§ÓCÚ¤+ݦ…´É—õ.I~ù'æ´™ÒŸ¯Ü+|o{e{ÜkéæÞÙb®öunßýáׇˆ-5uO•¦ü«³E’—öèæùLòÔòäöv‘wFàÿÊÉ7HŸ»w3îfÜ͸›q7ãî÷ñ#¢Ï]Œ»w1îbÜŸ‹qWƒûøpïQ3WÛ·ï7=¬uxKCSå†)ÿêQ“ä¥Íú+÷9sŸ–šë]à^ÞmßJe|ÿ~ÍËS1¹7³ðV¬Ãû¿Ë5Èk½˜ã–þþ}‡p©üñ-'3'3'—œl@v˜e‡Yv˜e‡Yv˜e‡Yv˜e‡svŒŸýì˱ì˱ì˱ìËåì?öïWD=•¯{˜Y^«üé¯u‘' û÷#Œ¥òÇ·lxÌlxÌlx|ܶϬ[ñl㸽Köu¤·‚ƒüóÇ¿'ŽûÿV3·»È—ÎáÄÁ¦Uv8ÁL€w3îfÜ͸›q7ãnÆÝ îãW@Ÿ»w1îbÜŸ‹qã®÷±DÞ eîc•9nÜ£»À}ÚŠûûÇ}ßj>y{yÿ`CÎÛß/Ù/ùüÞûT ÏßFSÆ!çóûÇý\yúçÝx{±ÇàdeüdÝvÌ? €3gÎ œ83pn€ iœ81pbàÄÀ‰SÜX ÏïåOÅäümškœ—>¿¯tçÊÓ?/³Ü‹'Ý'«„'ë¶+Y-/ä$x‘׎®”ä[úY¥§×¶¹ÒÓ‹—0¬I®ÖÊßj[Ë[¸ü•¯— ;̲Ã,;̲Ã,;̲Ã,;̲Ã9;†¢ ²C,;IJC,;IJC,;IJC,;”³c¨ü÷ÙQö. Ù‘Ç•ä[úî8JO¯m‘§§/pI¡Ë‡ãkåouù‡ì¨îq/ÁÁ¨Øü¶üè`4¿’üh,Žßò_ïuçe.ýñ¹%v+ÉãÑUéo{/%1€× ¯^3¼fxÍðšáuÆ;Öô>^1¼bxÅðŠáÃ+†WïX”ƒ}Y±cmùѾl~%ùÑXŽßâ2Þ,ç[IOŽK|ëäxÑíØQœŠ»È;-åùušeyÕžßòâœÊžäWw‡ë—äcQÚ±^„\Wæ~¸›q7ãnÆÝŒ»w3înpëpŸ»w1îbÜŸ‹qã®÷±@ߺŸeîc•j)¿å>eîÃÁsàžËö$¿Ú¼DîñßÞÚn_„ \–’ûÙâï[f7ï,þñû8É?::ü*Rÿam%yüãÏŠ<Ÿc•þøÞâ¸ä~ðšá5Ãk†× ¯^3¼ÎxÇ¢ÜÇ+†W ¯^1¼bxÅð*ãk¯¿ïX?\—ðæÕm’´]E¼cýñ÷ê·•äñ?+ò|V]úã{‹ãåûüåÓâxIçMSÅ’ô"ß;EyAýX s?[VUVU—RUíã5Ãk†× ¯^3¼fxñŽUµW ¯^1¼bxÅðŠáUÆ;VÕåûôÓŠvIǽSÅ’4à-åu€-ÌomYXU]XU]ú]þù?ÏAþ‘‚ÿ·Ö¶œ×] ”ägêÏx:J]ïÖq ÊIÞ¹dö-o5I/ÌI p7ãnÆÝŒ»w3îfÜÝà>Öá>w1îbÜŸ‹qã.Æ] îc^+Ðîsæ>%îã–óú£‹‰’üLVO§²ë}}[ÎNòÎ%³{µÃ{)™‘-÷æDKqæø"¯ttüu8¸—·|D.òV!ÝX!ev` òf‘7‹¼YäÍ"ïFäÇRÖ¼XäÅ"/y±È«ù±˜Ü[b-ÅÉ×ùØ`4AÞò–‘/¿Î7ö:/™R-ÁXÆÅöÚý·=oI~¤“ý§‰›ýÛúÿ~°¯$ï\±ì¬˜0W©¥ä*ðšá5Ãk†× ¯^3¼ÎxÇÂÔÇ+†W ¯^1¼bxÅð*ã«_ður±½vÿ­ú]ðÎïäâÐÊþÓÕÓòJòÎÕËÎj/3fZn ;þlEG‡‹¼Öö®$Og{rl~ËkwÉÌK’»SUVURUíã5Ãk†× ¯^3¼fxñŽUµW ¯^1¼bxÅðŠáUÆ;VÕ[¼ÓVôxóЊ’< >nPÈf9à÷EÍK’»SUVUÏïWx?UÕóöç÷ÑõTOVÏŸ&¼µ¥§÷Öª'k–=‘ÝáÂl–w3îfÜ͸›q7ãnÆÝ îcîsã.Æ]Œ»w1îbÜÕà>èó~Ó·hg|Ï}ŠÜÇ {² {þäÕpå>gîåeïÉúnOdw¸”<¢Ö×í,Ú«XÆ×‚ÏË`oäµ;ÃäŸ?ëíþg½Ä§·ÊøEþëáŸòÖìé_9(〻w3îfÜ͸›q7ãî÷¡ŒîbÜŸ‹qã.Æ]Œ»܇2~Ë}Ê܇b²›;ã O—ŽS¥÷òÏ2~Ï}ZâÓ[ew3îfÜ͸›q7ãnÆÝ îãW@Ÿ»w1îbÜŸ‹qã®÷±¾ûûe°#3{Õ(ÿžûÃákzúØZf|œùŒ…ie5}>b|Äøˆñã£Ìg¬?+k€ V6sq)µ²”•µ ¬èz“À§¼×ygñÇ•ÿiÇí'ÃŽ?>·$¯ÍE§§÷ Óöõ‡¥ÒÓÇ=ŠÚ"‰yÜpfàÌÀ™3çÿWÚ¿äX’4kwfŸçàȃP½6ùƒP‹`‘óŸJ ‚ýmuܤ•­iúª‹Úe-±Zpù ¸×½èypQ .jÁE-¸¨µàâAp¯›ÔÛ;÷à^ õÏ:ì|®Ýƒ»÷¸ýÙ7¿ÝゎþúXÏn’¨AÏXß_ä}µ•­Ÿµ3^q~}þEƒž±~öYÛÌÛðëÓ‡!ÿög;áúþï2iø£[4êïSXY[Y[Y[Y[Y[Y[Y[y_¯›òóÕµÕµÕµÕµÕµÕµÕµÕ÷Õñºó¯ïoO¿Úù×Ï:©¯¸ ¿²4_tº¬Žë'±3oïG‡üÛŸ]8¬ï/’†?º9Þß7 ûêo¿ýã_îÛùÇ ü» ÿë['õOß|sìÓðýä’`×nŽŸ—µà²\Ö‚ËZpY .÷º?.jÁE-¸¨µà¢\<îu‹Üß7àûêïmp×à^÷¸}»þ¸Q°—áí„Ûš‘_‚cfËÊ~¹ÇmÚÊÞwŠøgàÍñ)}ÆzœÛìä;„ì¸ Ò ýÓð'úú3ü™%SëTÈ=k¹g-÷¬åžµÜ³–{ÖrϹ¿n¤ÏsZîQË=j¹G-÷¨åµÜãAî¯ûðûÜ?ÞªžÒg¬ßçþqÍýztë´ã6üIúKî|«zjÎ uš¿¾GÕ¿ØL> ·oý܆?º#ý4ü/Ö<í+ØŸ†?¹#ý4ü‰ìúgø£Æ~³Ö¨{ÖrÏZîYË=k¹g-÷¬åžrÙÆ ¹G-÷¨åµÜ£–{ÔrZîñ ÷—mü’ûQïsÿâÛ^·án§ßæþqÏý~ô'·Ó—ÜU=½ä®¯ª'uší½w>qo?üůËpûœD»Ï'ûp+ñ¼³ÖPhRC¡B>YË'kùd-Ÿ¬å“µ|òžÏë¶ø<Ÿ¨åµ|¢–OÔò‰Z>qÏçuûzßÎèšÏkm?ü˯ËpûžJ»Ï'ûO+ñ¼³Ö iÆ÷ß’ýjg‰Ò÷T> ò=•?Ãñzó:üÓõf¶cò> ò•²?ÃŸÝ FíñyîYË=k¹g-÷¬åžµÜ³–{>Èýu'|ž{ÔrZîQË=j¹G-÷¨årÝaãûoGµÃFéÓ,—ÜõÓ,—Üï÷—×៶ñ{î÷áO>xvÉoƒ¶ñ¬Ý æÏxÄè·áŸâýç¿~ßP¯åü.¯oþ¹oÃó€|~0ðÏE¿ ŸՇݞBKšùg·§I›}ÖnOŸ¯Ž¬­Ž¬­Ž¬­Ž¬­Ž¬­Ž¬­Ž¼¯Ž×K‚¬Ý?_Q[Q[Q[Q[Q[Q[q_¯Y»5ÏŸ±ÌÑoÃ?_8\WÇõèô‚ø#æmx^ µ¿9Zíº:>®«ã~òçÁ âËêàЛ勮„Ÿ†_ÉʯÞ÷^é_‡ÿEVN|sÜkoŽ{mOï´§?Ï'kùd-Ÿ¬å“µ|²–OÞóyÝUŸçµ|¢–OÔò‰Z>QË'îù¼îkÐÂè‹n|ïóù¸æóZœûïh¯Ãÿ'¾1íµ7¦½¶³¼m®mZüi¸¡†×á6¦ñ³w9/ ,æ(y·óûÖ._¾ _¸s°1Qo£B¼Y‹7kñf-ެśµx³oÞã}Ýמǵx£oÔâZ¼Q‹7jñÆ=Þ×mñmg¥{¼¯[Ãø!|þhW?{‘ûÒ2㯪«óû¾N_¾È_¨«°«¾í6òÏøxÖvÕùþ»N;Š3ç…öÛð;!q¾^y•ú|æ³6óY›ù¬Í|Öf>Ìüë^ô|æ£6óQ›ù¨Í|Ôf>Ìüë6ñvæ?®3ÿZëfm›x?ó;”r™yýõ„ÖHçëáPÎ×û¥_)›—#ãòP¾ïÛðë§]›ý/í*6>~[ß~$ èèÏ¿Q{ B>YË'kùd-Ÿ¬å“µ|òžÏëÖð<Ÿ¨åµ|¢–OÔò‰Z>qÏçuYï7üVÖ%ŸK>}߆_?aÜäèé…×|îÃÇ“…Z“š¹ß¶®š¿íŸ¼îý'ûº ·¦û·£?{/´ßÿa©Q¸¿ÿzÍ’á÷žý4óÏöµMûÚóÕ‘µÕ‘µÕ‘µÕ‘µÕ‘µÕ‘µÕ‘µÕ‘÷Õñº«>_Q[Q[Q[Q[Q[Q[Q[q_¯{úÛž>÷Õñº¯í¡"ŸWG»¯ŽûWAnGöFn¿¿$P‡qÿ}¬%Ãï¡™vEqjÉ©5øYó»0^†?é ?¿oþÑìäɧæÔzrÏZîYË=k¹g-÷¬åžµÜóAî¯W§æœZ“ç¹G-÷¨åµÜ£–{<Èýu?5‡äÔš ü¬ÙÏçÜÛ=wmh?¿oöÓìäIž§æP¯ õëý#3tH> ï·«ó—gi—á×`GŽþ¬ù3ü~yݾ^ØH 3Ÿµ™ÏÚÌgmæ³6óù`æ_¶²ÂÌGmæ£6óQ›ù¨Í|<˜ù—ÍäýÌLô .3ÿq›ùûѯçŽý)r™yÝ õŒYí{¹ßþÕJfÿŸáø™ñëðÏ<Ö½ÔuøO?3þ2ü‰Ó÷ïðÊnð<¸¬—µà²\Ö‚ËZpù ¸×ÍäypQ .jÁE-¸¨µàâAp¯»AûÞxÙe.ßÈñ—àî/#¯Ã??â»wO»¿>yüÂX­$©]‚{ÝÊâí'ðþÚ­¿xq¶.M+òòðþë6|_X€¯¾Ôõgøß~óýóŠñ«ß†çmx—û£/u­Z“šUkRSÈ=k¹g-÷¬åžµÜ³–{ÖrϹ¿n¤ÏsZîQË=j¹G-÷¨åµÜãAî¯ûðÛ&5÷Ü_7“K“š÷¹|νÝsÿöݬKîïsÿøœ{»çþ1­ù%wmF¾jMj5©YïMŒŽó{\û¯.Œó2üï¿Þ¼]÷ÛðÏ×Ç{ãi~}¼åßþìŽ4kûðóà²\Ö‚ËZpY .kÁåƒà^7ÒçÁE-¸¨µà¢\Ô‚‹Á½î„ï»®\ƒ{­Çù½_ñWCÔyþ÷†w îå«ïƒû¸÷º‘æ÷w¤[þíÏîH“¶²÷ÝvÇ;ÒþCó(nÃçççA×Ïåäeø„KÞP°†¿yíð=ƺ¨;J!Ÿ¬å“µ|²–OÖòÉZ>yÏçuczžOÔò‰Z>QË'jùD-Ÿ¸çóºÿ¼ïŽrÍ絈öú}q>??6½~*/Ãï(gÒðþ€Å¼ä£0åz+àÿ+ÙÎ2nß[û¸­ùËðkƒÞ#G—þ ÿ´y;ú•ÍúòaåøþKjýëá•›¤çÁe-¸¬—µà²\Ö‚ËÁ½îEσ‹ZpQ .jÁE-¸¨‚{ݤÞ÷q îµPÛ' ?nÛÏeøµ§õ‘£S¯’ÏÁµ{pü¼o|ÿñÁþõpØÊÞ7 økiõÐjþì}øØ—á_¥u|Þ7ß:[H~þˆ@™µ÷nµŽ&…à²\Ö‚ËZpY .kÁåƒà^·²çÁE-¸¨µà¢\Ô‚‹Á½neïƒûhø¼oþŒ@û2ü年Ïûæû¯íb7ÊKpL ÌÚ«+jDzVí®lýðyEÞ†ÿµ‚±gåŸá¤ùµÞ÷Æ;¸~ßâ«æ\†?êY¹¨›K!ެśµx³oÖâÍZ¼Y‹7ïñ¾n‹«v‡÷<ިŵx£oÔâZ¼q÷uó\µûÀõÇ•yþ×.…=+/ñªwþ>Þk¼÷á×½÷ÈðG=+×ÛvñKýCû&nÃ??Ÿ™Û>>¸vÍpxßNbáÇ? ôÚI|3ó•ûËç¹g-÷¬åžµÜ³–{ÖrÏZîù ÷×}øyîQË=j¹G-÷¨åµÜ£–{<Èýuƒ~Ûæžûë.³èúÅmøçǹ×ܯßéïÃ,üøà%w~ a¾™yØÆß÷ø[O~ý³þ¢Wé§áçó5ø/¼»=ïÿ.Â0µþ/†¿yw·‡¶Ûçùd-Ÿ¬å“µ|²–OÖòÉ{>¯Ûâó|¢–OÔò‰Z>QË'jùÄ=Ÿ×íë}>Øìú’Ïõx/½JßçóqÍçzô¿÷Ÿ0L­ïÉ%½AÜï›üƒ-Iö¯ï; -n_ yQà÷¯ï; M:ú~ðÜôÏðG0Ì®u4)—µà²\Ö‚ËZpY .÷²‚‹ZpQ .jÁE-¸¨‚{Ù¤.Á}`?•÷Á}\ƒ»·/ï¼(ð—àôà%8}Šy Nß njDzÛ÷ÄóW[YûÙW–_ä·ÝJ¯÷û扯w+õÍÞТ=¼²•=.kÁe-¸¬—µà²\>îu+{\Ô‚‹ZpQ .jÁE-¸xÜëVÖ¾—¾ÚÊÚÏ>9þ"¿]‚ÓrïƒûH|!·[©ô†v,ýëá°•Åûkă[YüŒ2‹~~¦·ýÙ]Y”6ÿþèÿ‡ëy>YË'kùd-Ÿ¬å“µ|òžÏëÆô<Ÿ¨åµ|¢–OÔò‰Z>qÏçuÿyŸÏÇÁý'~cF¿ ¿z[ŽþìV*JŠ/ùðó¾÷ý ? ¾ógOÂ_o’òû¯vý’£›ŠóëvôGŒ? ò"jC»ƒof¾rõ<÷¬åžµÜ³–{ÖrÏZîYË=äþº>Ï=j¹G-÷¨åµÜ£–{Ôr¹¿î°ïÛ›$~eü’;ßáå÷_ÿû%G7sï×íèzG_r×rº£|3ó°÷ïá~uƒØKß"ßýöÇO\ç§áçÉU@¿¹No«BöqþòÖÜ®ú÷UáÈð7ÜžRo–ÂêÈÚêÈÚêÈÚêÈÚêÈÚêÈÚêÈÚêÈûêx½$x¾:¢¶:¢¶:¢¶:¢¶:¢¶:¢¶:¢¶:â¾:^/ú÷º¿º5ï¥ïο_×ÕñÂr^V_wô›Œùöºãóêh÷Õñ‘xÝÑ¿¿î82ü¥ W£ÔomŸtþÄtÒ7? _Ož/*xýYkkS˜ù¬Í|Öf>k3Ÿµ™Ï3ÿºŽR´ÂÌGmæ£6óQ›ùx0ó¯»Ì(u?»Ìü­õ+ð¹GéKu—™ç'¸ã ¥Þ Rg˜=¿îóÒLé2|Þ–öW<Éüeöò=ˆOýAœµ7ˆ³öqRÑžOÖòÉZ>YË'kùd-Ÿ¼çóº5<Ï'jùD-Ÿ¨åµ|¢–OÜóyÝ@æ÷Ï7_zŽ]†ÏÛò2c¾|á’¿Aœµ7ˆ³öq½ULÛ¼}ƒë:üå !¶³¬[ÿX{v¸Þÿaååþÿ¥}æ§áù³\ßâÏA'ÿìÙ!5j)Ä›µx³oÖâÍZ¼Y‹7kñæ=Þ×}íy¼Q‹7jñF-ިŵx£oÜã}Ýß6j¹Çûº5¬Ûg|l[\·æÑöøí}¼yyüöÒ°ó/ƒë[Å!èäŸ=~Ûß_o~õBoÿŒX{Ý×ö LûðýŽRÑíèϸœýíSõ/wÕ]»ÝÛ´«>7kñf-ެśµx³oÖâÍ{¼¯»êóx£oÔâZ¼Q‹7jñF-Þ¸Çûº«îïo6¿z'¶†«¾îkûF¥~ÈWó.ñÞÅÁÛÑŸÁ4ûÛ—Z_v¯ú¶¯Àß²ìW/µÎOÏÿ'íz¾ÿ»üëOf\†?jpýiø£§ §öNìÔÞ‰=.kÁe-¸¬—µà²\>îu'|\Ô‚‹ZpQ .jÁE-¸xÜë÷¾Ë5¸×B}~ô©‡ÿFÏ÷{\ÊÉ?jp} ލžÚ ½#[ÙyÛ}àŸvƒx.m#¶=v=¿¾¿ÈÛ4üÉ^ôgø£[´‡¿å&8kœµ ÎÚgm‚ó>Á/[Ca‚£6ÁQ›à¨MpÔ&8îüRßOðÇu‚_êй4(Ùöðï2ÁaØüe‚µ_&XoN+}HçÓðÛMìWÆôùi'ƒ¸ ÿ«“ÁµA\¿ rŸñiø“.Z†?úÏ©µ)䞵ܳ–{ÖrÏZîYË=k¹çƒÜ_÷¢VúŒO!÷¨åµÜ£–{ÔrZîñ ÷×-²•¾tÉ]ÍñóÓÆ'qþWã“k£É~þä&é’»âé—Üõ&éPß”ó¶¯À¿ÏËm·—˜g\òg¸=Hù2ì¾[Ž~o@Þ¿^ÙHŸÏ|Öf>k3Ÿµ™ÏÚÌ烙ÝÊžÏ|Ôf>j3µ™ÚÌǃ™ÝLÞw1¹ÎükI{;ó×™¿·÷:/W=ÐÅdËÑïmïû×áœgÉrþ4|üýÐ÷ýÃäÝoÃ7]¥åeø_m»cYGÇOÃû“»²üþ/£ÑðGweµf%…ܳ–{ÖrÏZîYË=k¹g-÷|ûëV–%3¹{ÔrZîQË=j¹G-÷xûëFš%çø’ûÇ%÷ÝoÃ7Ý•åeø_íÿ¯¹_Oþþù™)Ãïûp£áîʨYÉé¥ÆÌ§ß>lweýgW¨™·áOÿOÃ÷“´×6Ò^ê¬\˜ù¬Í|Öf>k3Ÿfþu+ë¥ÖÈ…™ÚÌGmæ£6óñ`æ_7“^êmü~æ?®3nwe™·áOöËÌs9ïTÎG ªû4üú‹-Ãmiï}ž—kÄÖéèOz@~þˆƒ5bО1Jè]!ެśµx³oÖâÍZ¼y÷uc%@¯oÔâZ¼Q‹7jñF-Þ¸ÇûºûÆ÷>Þk¼×á¶ûí}ž—¹ÖéèO7^âå[©Q#PfíÕÕüÙ³—–ÿŸ†/goG¶¯Õ:nê¸Q˜à¬MpÖ&8kœµ Îû¿î,³ö"êùGm‚£6ÁQ›à¸OðkmŸµ÷MógÉ^ºæ_&øŽhߎþ¬ºÖšVœõ={úÕ=ËúÙÚû6üÉU> ?ô`ú6üõM¬ÕöUúÌå¿Ã+O°ž—µà²\Ö‚ËZpY .÷º<.jÁE-¸¨µà¢\<îu—YßSä_ÝA¬Ÿí2c߆?ù6Ë%8ý´Øûà>®Á]‡?úÌå%¸×­ì½k>°QëÙ?ûèÞë¾)å¶í÷óö—·áý k^kõp¨ÕC!Ÿ¬å“µ|²–OÖòÉZ>yÏçuczžOÔò‰Z>QË'jùD-Ÿ¸çóºÿ¼o¶0°5ì%Ÿë—K^ïrö­§‚m ûýrËç•ðÞßÃGŽþì&é”Z€>/÷ÿ¯ùqþ÷À¸|ì§÷Ûð'Ä? _O^ìœïñšºg¸]­ÙB!÷¬åžµÜ³–{ÖrÏZîYË=äþºžRûóBîQË=j¹G-÷¨åµÜãAî¯;ì)5_ŸûÇ5÷ëÑÿÞHÇåã^½ß†?éÝ~Éßïq;šºg¸tŠ8¿Þkàÿn÷yø¼=¸Y4ÜZ|ŽËð¿«Â|_zžÛðã?Р÷Óð'ÛøïáÏ·ñJîYË=k¹g-÷¬åžµÜ³–{>Èýïm¼’{ÔrZîQË=j¹G-÷¨årÿ{#½åþa ã%÷kî÷áÖë÷vò_¼Ïýãsîíž;Ró·Ü±+á-wÜÆo¹¿nã— ·ñö£ž¢ÿþ/ïo@~ÉÑï—†?øÈæ§áOžóþÛíó|²–OÖòÉZ>YË'kùä=Ÿ×mñy>QË'jùD-Ÿ¨åµ|âžÏëpiűpûj?kªû±nï/ ÉÑïûO§á>õxËŸóž_ï¼õZ óy8üeü±oÃÀ0Ÿ†ÿý÷Óo/Púmø_œ±Á0Ÿ‡¯'7ˆQ»AŒÚ âóܳ–{ÖrÏZîYË=k¹g-÷|ûëNø<÷¨åµÜ£–{ÔrZîQË=äþºÃ¾íOrÏýu—‰í°Ÿso÷Ü‘ä¹åþqËýïfW—Ü?¶‘<·Üù1j7ˆAÛx~ßÃî«m<ôgÝö¯Ûðõä1kj³Òìê÷ðÊFú|æ³6óY›ù¬Í|Öf>ÌüëVö|æ£6óQ›ù¨Í|Ôf>Ìüëf’ßwNüj3Ém&Ÿg¾Ýgžoײö¸0+Í®n3ÿZÎû÷bæWw&ýöý¾Ûš¿ ùd¹Ý•õï±6:ù'-ˆ¯”óç3Ÿµ™ÏÚÌgmæ³6óù`æ_Ëùó™ÚÌGmæ£6óQ›ùx0ó¯å¼ï u}ÜoŸ“ü¸ÕùËðÏÿÄëÌ_‡ß!M:ù'po3ÿZÎß‹Ø}ü«Š8~†·¸ ßOêñ¨ÕãR›‹Oß½¾TôŸç“µ|²–OÖòÉZ>YË'ïù¼n Ïó‰Z>QË'jùD-Ÿ¨å÷|^7÷ù|$n ãg˜~‹Ûðýdµ Ô)â–¿¾™Lÿóð¶ûJò\†ŸÛ_Ư/Þ¿ÌŸQ¿s߆?â f…òÿ4ü~ž4üѾ6i_›˜¿²:²¶:²¶:²¶:²¶:²¶:²¶:ò¾:^wÕYAþ+«#j«#j«#j«#j«#j«#j«#î«ãuOŸ1à²:>®«ãïFº·Õñq[¯o|æÏ¼‚¹oóâÜVÇÇmu܇?º¢Xß?†ùjW]µ{Õõý×RŽþì^u}q­ ›ò¢Mùùgm‚³6ÁY›à¬MpÞ'øu_{>ÁQ›à¨MpÔ&8j÷ ~ÝÖ÷Ï ¿*«v»·¾ÿpVÊÑŸÝî­/n÷ º¾o8Ÿî¨ÿQ]÷ŸR_‡÷'Õuÿ$£=¼òbçùÌgmæ³6óY›ù¬Í|>˜ù×zü|æ£6óQ›ù¨Í|Ôf>Ìük¡~ß>ã:ó¯µnÿ «~-Ôû‡of®Ãû“B½¿.׿åüTµ~nï,ó6üÁ—†? ò¥áÏÃ?ã¦MÜLÎ÷:GNþ M —ê‡öŒSi[‰7kñf-ެśµx³oÞã}ݘN¥Im%ިŵx£oÔâZ¼q÷u÷;•¹·xïXCÞ†?ø<ð-^ü<ðûx?îñÞ‡_o’Žœüäùû]µý*½Ôú4ü ýÖ~ýŠÛð'ïÄÚ¯›Éðñ^^·áyySÞèß~WhæmÊÿÿ~S.¬Ž¬­Ž¬­Ž¬­Ž¬­Ž¬­Ž¬­Ž¬­Ž¼¯Ž—=½°:¢¶:¢¶:¢¶:¢¶:¢¶:¢¶:¢¶:â¾:^. Þ¯~©uYJ:¾__ŽqþäØeu|ôÛ÷XnS÷÷…CR¯­ÛêÀfY·ÕÁWí­õøÙûòŠ¢½¿TG ¾ýÔÿÏËðv£ß>_Ãç¯}~ý³îrò0™OÃÏL¦Õºw4êÞQXY[Y[Y[Y[Y[Y[Y[y_¯WÏWGÔVGÔVGÔVGÔVGÔVGÔVGÔVGÜWÇëÅÛÎ%÷Õñº¯½_(?´Ÿv.ÉËðvãv?_|^í¾:>Ò0™ËêPLæ²:“iµ¾)í}…À'ÿíÒG¡_^j­¸ ?·¿Ë__<£ˆU…è¿nÃóvŸÑåßþ¨oJ«õMiµ¾)…ܳ–{ÖrÏZîYË=k¹g-÷|ûëUÀóÜ£–{ÔrZîQË=j¹G-÷xûëþþ¾oJàK„Kî—Ü?V܆ŸÛûë‹'ñ£ýýsîížûGÇý½Ö7¥Õú¦4ê›Ò.=$nãùþqa૆|o0M¿ù3üõàòoÞ†?e? Ëþ;¶Ûçùd-Ÿ¬å“µ|²–OÖòÉ{>¯Ûâó|¢–OÔò‰Z>QË'jùÄ=Ÿ×íëÒ©eàöõ>ŸÀÞïóù˜&\òù¸åó1oß¾—|øñ}S…°…˧áÖr6nß4Ölý‡pÉux\.–ýÛu|þ3üÙ3ãNÓóx³oÖâÍZ¼Y‹7kñf-Þ¼Çûº¯=7jñF-ިŵx£oÔâ{¼¯Ûâûx?°ãÍ%Þ{¿é¸ Ò ó/~×ö}¼ ¿k{‹WѰK¼¼«Ž÷nׯ]uÜÈÌ÷aÚ¾ ¶-Ž·Fê¶XkÄÓFI¿ùwxå¹éóà²\Ö‚ËZpY .kÁåƒà^wÂçÁE-¸¨µà¢\Ô‚‹Á½îqï›ò\ƒ{-ÔãF9¿ßãÚ¾ ¶I½ î#u“ªõôi£ä]‚{ÝÊæ÷šòWÏçÍ~³½h¾½Èû¥{ѬݢÍ[ï*Û‹fm/z>óY›ù¬Í|Öf>k3Ÿfþu3y>óQ›ù¨Í|Ôf>j3fþu7˜ß;û_=É›7ãÓÊù|{ÏñKËù¬ÝsÌ['6+ç“Êùû®]¥•õ³ë¤·á×…MŽþ×uÒ¸¬Rc€¶J-Bÿ ö¼º¶âÍZ¼Y‹7kñf-ެśµxóïëÆô<ިŵx£oÔâZ¼Q‹7îñ¾î~ï;Ötõ>ÖÏî…òzôkƒÒ&Gÿë^èï}ø“> m•ú›^âåç}ï{‡œyùÃ:ó6üöM߯zü~¿ÿÿâó矆?ù‚øŸáÏn’jýr 3Ÿµ™ÏÚÌgmæ³6óù`æ_÷¢ç3µ™ÚÌGmæ£6óñ`æ_·‰÷ýrn3ÿqæmøíKÒ_I÷—™ÿ¸Íük¥Ý¥ïX_fžo’¨_N;µ›¤óíýÿ¯EÃ7=LŽËð¿;ËöÛVÞ†_l9ùg7I§FÍŸÚfrjwOÏsÏZîYË=k¹g-÷¬åžrÝÊNí¶êyîQË=j¹G-÷¨åµÜãAî¯é©ÝooŸ6þZ4|Ó»§¸ ÿ»Gô-÷Wjñ|ÿ°rËÉ?»ß:5jþÈ6¿ÞÊ0ºÇû.Ÿ_î½ö¿x?¼Ý®ÿ~rnß|6"~•|øOßlã†?zÖÔa§oÖâÍZ¼Y‹7kñf-ެś÷x_6åB¼Q‹7jñF-ިŵx£oÜã}Ù{߯ûÑtï}ïÇ5Þ—ÍóïÇ%ÞOñ¶{¼úå…øURÊ/ñêÞ{‰WŸuÆÛVÿD7¶ñÓpê“<çeøýkÈѯW»_=ëü3üѳÎnO 3Ÿµ™ÏÚÌgmæ³6óù`æ_÷¢ç3µ™ÚÌGmæ£6óñ`æ_·‰·3ÿqù×Z×~†ÀÏy~¯óCŽ~½ÇúêYçeæõ&é2ó¯å<Þ?ûØÆšþÄàŠø~iÛðG·)Q»M ªÚÏ'8kœµ ÎÚgm‚ó>Á¯ÅùùGm‚£6ÁQ›à¨MpÜ'øµÇûÇdÛëË«Gt™`¾XŽÚÅrÔ.–óû~,_=‚ÊŸ;ÑoíËíèÒ¨õŸÜ¿nß4yþ4|=`·ÿ mçú!? ´5PÛˆÂêÈÚêÈÚêÈÚêÈÚêÈÚêÈÚêÈÚêÈûêxÝמ¯Ž¨­Ž¨­Ž¨­Ž¨­Ž¨­Ž¨­Ž¨­Ž¸¯Ž×M9¿ïøôÕó³ü+ý6Ü:>ÝŽNMž?¯Žv_Úäù²:”Ó¿¬íèxY|EÑßV…_ûæ¦ôÛðy+*çN‡üþ÷ßåÀ·R½ÔSñÏðgßzíñÛó™ÏÚÌgmæ³6óY›ù|0ó¯;áó™ÚÌGmæ£6óQ›ùx0ó¯»ÌÛ÷™iæÿvæ?î3ÿÂ(\fþcàk–^êìw™y~üÖ©œï?îõÕ âøÑW€¿~5:~Éðvk?ó7“ôë6QË'jùÄ=Ÿ×ýgÖP„÷½)®ù\‡ÿ¦ÝûáåmøÜû’¿E›µg^ë{Õ𫛤õ“¯ü±/Ãïͽ¾°s? bçþ~ÿË û³…ºNòÉZ>YË'kùd-Ÿ¬å“÷|^w–çùD-Ÿ¨åµ|¢–OÔò‰{>¯;Ëú^èýêÎfýèëŸói÷|Ô¾ä£>ð%ýâfÔ7Ä{‰½Û“å¸ ÿKuÿ…ôÛþaÛÈÛÑÿþ^.6Çû4üI;¤?ÃïXtôgÓ¦éy¼Y‹7kñf-ެśµx³oÞã}Ýמǵx£oÔâZ¼Q‹7jñÆ=Þ×mñ}Ÿ‹k¼¯Ó~ß ãr‡û‡­aoGÿûsÕØKð¯¶CºÄˌ®íªçû¯Ûµ5œ ô!ý3â­WýOû…»êy/øéƒÄSoký3¢Ö?#jý3 ¹g-÷¬åžµÜ³–{ÖrÏZîù ÷×}øyîQË=j¹G-÷¨åµÜ£–{<Èýuƒ~ß?cëÑsC ?¤ÆûÜ?®¹¿nÐç½é«TOÍá­õψZÿŒ þùëû?ë/=毷ØÕÆ4k,þ ôF.k,’:X&8kœµ ÎÚgm‚ó>Á/Sa‚£6ÁQ›à¨MpÔ&8îü²¼Ÿà]ÞNðÇ}‚_jpÖú(\&XkpÖú(dûáGò6ü¯þ&Ó=þþèQŸ†ÇåÉËW? ò¨Oß|#*km Áe-¸¬—µà²\Ö‚ËÁ½îσ‹ZpQ .jÁE-¸¨‚{ÝeÚ¿ ’·áõ šö ðœ~#ê}p û¢_‚Ó—àôF!©‡DFéyß§áÔ¥ïÛpøûmømiÿý—áÿõæ{"7Ú¹ ÏtÈŸáž÷ý;¼²Féy_!÷¬åžµÜ³–{ÖrÏZîù ÷×4JÏû ¹G-÷¨åµÜ£–{Ôr¹¿îÃQzÞwÉýÚŒ©ïÛpë#ÒoÃo;áßû{\†ÿ½Ù¿Ïýãsîíž»R2—ÜyÚÆóûë㯶ñ?Ãûß?ÄÒ|~í¢½åèÒ°óŸv~݆?i·ûiø“MþþFò„§Ôm¤oÖâÍZ¼Y‹7kñf-ެś÷x_7åçñF-ިŵx£oÔâZ¼q÷uïÍïï¿Ú{ßÇûÆÒ¼÷ãïõèÔn÷s¼í¯¶Û½Ä«ý>.ñòsÞ^ÛUûM+%æÓð}a·_¯cßÿüç7öÆç¼½dÕ}þ†ù3üÙÍq­]H!÷¬åžµÜ³–{ÖrÏZîYË=äþº÷Ú>ü<÷¨åµÜ£–{ÔrZîñ ÷× º×6è~³Ð †¹äþqËýõù»Ü?î¹_þÈ.¼äÎ/b{íæ˜µäøþÏúó‹™ÿÊvþ×Úü¯ññþºûzté:ñïi½þìmïxï^ŒÚÛÞñEU€›ãA»õóx³oÖâÍZ¼Y‹7kñf-Þ¼Çûº)?7jñF-ިŵx£oÔâ{¼¯{ïø~ïýüòõS¼íïÇ-Þ× ä‡eZ\†?{¿<Þ7ܺGíýòøbë†]õ]O…¢¡Ùÿix¿¼ŒùÉÎ}>oï±¶ý‘¾™óí £D}óÓðþäÍñ,é›ÿ¯Ü?Ï=k¹g-÷¬åžµÜ³–{ÖrϹ¿îÃÏsZîQË=j¹G-÷¨åµÜãAî¯ôÛÞ9÷Ü_w™÷¹¼ÏýãsîíšûÇ5÷ëÑ™ osÿ¸ç~?zòæx–LÐKî¯Ûøû÷—G×á]I.|ƽ¾ÿ€ò/nŸzë6üÚSqÒѱ̫¶?.kÁe-¸¬—µà²\>îu#}\Ô‚‹ZpQ .jÁE-¸xÜëNø>¸û‹Øvþ×]ÙÂÇÄëûoŽÿ’áöÙÔOÁµ{p÷š«Æ2/ÚÊÞ÷ùëò_ÝíÛ¡²zö÷_-Þ_ÜRî²·“¿ÿauþ‚Úµ­ìypY .kÁe-¸¬—µàòAp¯[Ùóà¢\Ô‚‹ZpQ .jÁŃà^·²÷ýy®Á½Öã}{¸úAVÏþþ àû‹»²ýCøvò÷­¬ÓðGHÒ¦­ì}[Ž¿nº¿ÚÊ -ÇW{ÑùQ«úˆ¼ ¿þe 9ùgäQ­ OÖÚðd­ O!÷¬åžµÜ³–{ÖrÏZîYË=äþº‘>Ï=j¹G-÷¨åµÜ£–{Ôr¹¿îÃïÛð\sÝL  ÏWéùÑ—->çÞ}Ëï’;“Gµ6˜ù—­¬0óQ›ù¨Í|Ôf>j3fþe3y?ó×™)iýûŽ>_=Ÿ¼Ì¼~eé2óÝvƒ ú×᜿ofñÞ•}n;â6üIÛ ÞnŽ4¤ý}“s yéµ¶A½•@҇Þñ<ެśµx³oÖâÍZ¼Y‹7ïñ¾nLÏãZ¼Q‹7jñF-ިŵxãïëî÷>Þ¼•ºÄ{¤·áO]âýIßÇûq÷>ü HÚ[ $íï[SüE†}µ³ÄŸ}܆ãVÞ†–œGÃm1jÛbÜ®Jéµ]¯µ êµD…ܳ–{ÖrÏZîYË=k¹g-÷|ûë>ü<÷¨åµÜ£–{ÔrZîQË=äþºA¿Ïý#qƒŽ>ë¼ Ç6oÃ?w;¸æ~?ú£6n÷Àôα×ZujAÔß71IôAúO›˜ÌÛðϺ^ä÷,@ûûÐûáóáhY~þè* KýÒ? âåÿÏðÊUÀóe“µe“µe“µe“µe“µe“µe“µe“–ÍëEÄóeµeµeµeµeµeµeµe–Íë5ÈûVL‰2Kÿi+¦yþù {×K˜üž{j?;?üo™mÓ˲áK˜,uì¿,ua.Ëæõ¦—”ÖÞKNêŸáxgÒoÃ?ß™h_ÿOß8©Ÿ†ßîLâ— ö$¢Öï©{ÖrÏZîYË=k¹g-÷¬åžr½ˆè%¥µ{ÔrZîQË=j¹G-÷xûëU@/)­ïsg'õ’ûýID¿ ÿü$B?JpÉ]ÔKî·Ü¯ÃŸ=‰ ~Oý]K‘R?~Ö/-_.ßdÿgìÛð'JëŸáÔ¤ü¿«àmø“fÈŸ†¯'ÏFéÓkú=âÍZ¼Y‹7kñf-ެśµxóïë¦ü<ިŵx£oÔâZ¼Q‹7îñ¾î½oû=¥~vîïÇ%Þ±oßH´—xo_øo»Ç«Í/ñò=ð(}ô®¿íÿÒíÚOÃéË!¯»êüöïòø|?Ü´õu~ý»òo¿ÿ]6þlW´«>7kñf-ެśµx³oÖâÍ{¼¯»êóx£oÔâZ¼Q‹7jñF-Þ¸Çûº«¾mÒt÷uk˜?û¼Ïë®:¿ÝU_™ð÷í5ź¿îªCþí÷]µÉðg»êÛž"ÿDÃ]uÝþü>ä x}ÕöµU2uÿ ¶¯-ÚמOpÖ&8kœµ ÎÚç}‚_w–çµ ŽÚGm‚£6ÁqŸà×Úþ¾íÐu‚_ Ôº•ðùxÚe‚¹º®’äy™`®®ûíUÏ/õ/÷­ ÉÇMR» ·¯^n”Àmø_ïòŠüÇmøzòBoña%x¡Wk(TÈ=k¹g-÷¬åžµÜ³–{ÖrϹ¿îEÏsZîQË=j¹G-÷¨åµÜãAî¯[äÛvF÷Ü_w™}ëZôqSb/Ãíë¦×£Ösþ×ûÀkî¯ûûþþöç—=Ú“zÔ ©¿ï’ñÏÀmü|oî}þ³~}¥v¾WÊ›ýõ…íÃçû÷ô“ŽþˆË9¥¯›þ;vëçñf-ެśµx³oÖâÍZ¼y÷uS~oÔâZ¼Q‹7jñF-Þ¨Å÷x_÷Þ÷ñ~ Ü{Ï÷Þíç½÷õ•Úù¾ëD“£¿>a´Íó|ÓL:ú#˜æ”¾n:~½½Xîi˜Ì§áOºYŒ·ÝFþ™×æyþ÷Ó¡4XöÓð¿4¾+ÒðÜ·«ãã¾:îGðÜm°hæßà¹pEqé°³ðŠ¢ýPÊ‹Ûp« ·£?ú$Üho«BŸ·ª0nÃŸÜæÿþè“pÿ/ü¾YÉçC|¹‘ö÷þ²n¤½öx³×îÊjí 3Ÿµ™ÏÚÌgmæ³6óù`æ_·²ç3µ™ÚÌGmæ£6óñ`æ_7“þýfòÕnð¾EÎuæ_+b¯Ók9﵇l½vWFMjÆxÿÅ¿À»²ñþ*m\„Üöë6|ß^ÿúŸ·åï߯Ûð'ý4ü‰vøiøyò®lÔ6“ç¹g-÷¬åžµÜ³–{ÖrÏZîù ÷×­ìyîQË=j¹G-÷¨åµÜ£–{<Èýu#ï¿ðxWö>÷Kîí×mø¾Á,¿¾€YÆ yùxO¹¬Ûð'½ä®îè%w~W6hÛxá/>üKäeÞ®c?no.Ã÷íë—]újüç6^ëŠóiøyBÁÖºâ êŠSˆ7kñf-ެśµx³oÖâÍ{¼¯›òóx£oÔâZ¼Q‹7jñF-Þ¸Çûº÷¾÷ãïë0o·º·—†—áû¶ûý’£SWœÿØ{k]q.ñ2HZëŠ3Þ·¼ø»â|Þ/W»_>*]?ìyþʽ îŸ\·áO:¸èhrdø3·„zòâÍZ¼Y‹7kñf-ެśµxóïë®ú<ިŵx£oÔâZ¼Q‹7îñ¾îªïãýÀ~D—x?Ÿ,¯vp½ …<߯û‘ë6üI×ÝŽ ¦gì÷Œvpûöi¤÷—C/_hû4üúê‹>†ß_Í9ùgokýˆ 3Ÿµ™ÏÚÌgmæ³6óù`æ_÷¢ç3µ™ÚÌGmæ£6óñ`æ_·‰ýžëÄ–¤—™ÿ¸Íü˧¶.3ÿ‘&ö_fž u­+Π®8ãÔ0ýó=²<¿¨Ç§v“t~Ô(?â×mxÞ†UÎOé»Ù†?úZÕ¿Ã+›É©IÏsÏZîYË=k¹g-÷¬åžrÝÊNMQxž{ÔrZîQË=j¹G-÷xûëFzj‚Äù^˜_ì„§v¿u~ôŌϹ·{î‰÷[§ôÝìKî¼ÙÆç¯÷OKPÏø4zV~5|o—á=éǰÐOß`¡Ÿ†?ñ+æ¯Ò6þïðÂ6^È=k¹g-÷¬åžµÜ³–{ÖrϹ¿lã…Ü£–{ÔrZîQË=j¹G-÷xûË6~ÉýõŒKî·µ_ ¿î„/ôûá=½æ~=ú# ÷’»úóWi¿äþº¿í‰ðkþå6Þ~öÙº6nÃíÏ:.Ãÿ"íŽOß<›ý3üþœŠŽþúw8ìÖÏãÍZ¼Y‹7kñf-ެśµxóïë¦ü<ިŵx£oÔâZ¼Q‹7îñ¾î½ïÖtì‰÷úÑÉv=ºí½qþï(Ã\âÕ{àK¼JÑ^âÕW–3¾ÿlÝŒè|ßWãLë%ói¸ý]Þ†ÿu±<5™ý4|ý{ÿ{ø½Eü³]5hW}oÖâÍZ¼Y‹7kñf-ެś÷x_wÕçñF-ިŵx£oÔâZ¼q÷uWï?:ù#ú>Þk¼÷á¶«Þ†ÿuG{÷õ†8¾ýlÊWnÊ%^¾£Ú®šµ{ÕüÙÇ`_¤•?Ã_$~ˆ62kMuþ ¶¯%íkY»[|>ÁY›à¬MpÖ&8ïüº³dí~íùGm‚£6ÁQ›à¸OðkmÏÚSþìƒÂ/êÄe‚?†É ³Öå2Á\]{힥ÿ°+î¸ ÿôUœøÕ­ßÚŸá&ÅíèwüyÉџݳÔú¼‚ËZpY .kÁe-¸¬—‚{Ý zí>ãypQ .jÁE-¸¨‚{Ýezí¢ÿ°‘ôõèŸö¢{p×£› ·£ßU‚%GvAMjæ¥iŹýe\‡þBÛÜøømÔ¿·7ðcâK­ï»N|õåÄ?à ³Öe¦\Ö‚ËZpY .kÁe-¸|ÜëVö<¸¨µà¢\Ô‚‹Zpñ ¸×ÍäÒçåÜk=o¿vx î>üÑð·Á}\ƒ»¿im_}ÇðóÔ¨e¾oõ0'Þ•Í÷­o«æðç6¯ÃŸ4Lû4ü‰îðgøý‹¦îf9k;áóܳ–{ÖrÏZîYË=k¹g-÷|ûëFú<÷¨åµÜ£–{ÔrZîQË=äþº¿ïùrÍýu3™ï—ÞÎéŸso÷ܵaÚ%wF=æ÷û0MÝ3ÌrÒ6þ¶ùÀß_Jùê¦n•>fñiøçËë³ø4ܾEž—áŸkGÀÚUú˜ÅŸáÏžÍÖËLj,SXY[Y[Y[Y[Y[Y[Y[y_¯—ÏWGÔVGÔVGÔVGÔVGÔVGÔVGÔVGÜWÇë…Ãû¶6×Õñº}­Òç3Þ®Žûê¸ýÜ.¾Ò;Þ­Žûê¸ýÑç3.«ƒe׺âÌw}*þîòÿåƒýý÷nŽ ÔííÓðGŒè®±4»ÆÒlÚӟ瓵|²–OÖòÉZ>YË'ïù¼îªÏó‰Z>QË'jùD-Ÿ¨å÷|^÷µ·}xîù¼V×ýýwŽ Ô0í’c–»ítj÷ªç{,aËð×¾ÒoíÓðGw‹µ;³Ö"§0óY›ù¬Í|Öf>k3Ÿfþu78µ{¬ç3µ™ÚÌGmæãÁÌ¿ÖùS»9ß³4[†¿vƒù~k—™ç;ˆZŸ—IZÖ[ÿŸÝíFáÓðyy%ðÚþ2Ü>Œ™—á·YºÚ,ý6üÉ}ƪ5jYµF-«Ö¨¥{ÖrÏZîYË=k¹g-÷¬åžrÙÊ ¹G-÷¨åµÜ£–{ÔrZîñ ÷—ô}î×Ü_6“Kî·Ü_vÂKîÚ¨åmî÷Ü_>øtÉ]ï·V­Q˪5jYÔ¨e½oõ°nãígêPÛ·á·?¬¯nêþ 7X|þº Ïwe«•˜Ö‡WöáçÁe-¸¬—µà²\Ö‚ËÁ½n¤Ïƒ‹ZpQ .jÁE-¸¨‚{Ý ß·M¹÷ZÛÏ$ÀOÁµ{pÍîH/Á]õŒùë6<ÜR®VbZ/Á½neñ¾•àÆ­,~ØJð܆?ÚÊâgXmÞ†çƒç“Ÿ†?º#­uGYÔ¥oÖâÍZ¼Y‹7kñf-ެś÷x_·ÅçñF-ިŵx£oÔâZ¼q÷uó|ïÇÆÍ3~Øïó܆?Ú<ãg›g›·áùàqî%^¾¬uGYù}ƒÞñœּ]•Ú¶˜?ùÃúï«è}þh[¬5WYµæ*‹š«òÉZ>YË'kùd-Ÿ¬å“÷|^÷µçùD-Ÿ¨åµ|¢–OÔò‰{>¯S~߈z|ñ„1o7o¶³äv–µoÃí,µÎ0«Öfõ÷ÝtúÕß_ØuÓé? ¢ÓÿþwëwÔé? ò]Ú?ß=z¬u†)—µà²\Ö‚ËZpY .÷º=.jÁE-¸¨µà¢\<îu“zÜG7þÜG7þœêôïƒûè¨Ó_‚ãG½öè‘:ìQÛÊÆí›cDÍÿnO~ýº ¢Ó¯QÛÊjaV­3L!¸¬—µà²\Ö‚ËZpù ¸×­lÔ¶²çÁE-¸¨µà¢\<îu+µ­lÜ>Ó÷!þ%¸ë“¼_¿nßékÔ¶²Zg˜EaÖûN;Ã|nßþØ·áîÊæû.忌òÿ4üúA®EGô¸pÖNÚðžÇ›µx³oÖâÍZ¼Y‹7kñæ=Þ×mñy¼Q‹7jñF-ިŵx£oÜã}Ý<ß·s9ØÎåïýË=û6üÑ}à|ÿ_&E\âÕ¡—xùYç¬=ë|¯Óÿõ~ù«Ç…ë}ÿ%lúg¸½Ø¿nžtôýd[\µm‘Z¥òÉZ>YË'kùd-Ÿ¬å“÷|^÷µçùD-Ÿ¨åµ|¢–OÔò‰{>¯Óû|>šévïóùèØïó’Ïõ-Úþu~ý¬ú¤£ï';˪í,û{ÅôóÚü¯l—á­ÍÿÒl½ïW0ïØ5>cמîÚ³Ãç3Ÿµ™ÏÚÌgmæ³6óù`æ_wƒç3µ™ÚÌGmæ£6óñ`æ_ëüþ^«þ\i?Í|»ÏüÇmæ_oÞwß [ì-±kß6•óZ—ŒOÃÉéû6üzOGÿñíÿþ¬œ×ºd¬Z—ŒÂÌgmæ³6óY›ù|0ó¯å¼Ö%£0óQ›ù¨Í|Ôf>Ìük9¯uɸÌüUiêû6üú<‰Ž~ 4eø³rN]2ö{kþ¯Ê_”´ýëûv`‹†ïÛg“áŸ_ffï¶|~}M¹iø“·)»Öæ¢\Ö‚ËZpY .kÁe-¸|ÜËfR.jÁE-¸¨µà¢\<îe/zÜÇ5¸—zü>¸Äï'_‚ûH{·ñ6¸{p÷áW0`Óð'ï66uŠØíûÌ~|nŸì·áŸûE'¶ÿû4üÐE^\†_/ò¾úúÙþÊ[ÿþÆ¿ÃaÇzžOÖòÉZ>YË'kùd-Ÿ¼çóº1=Ï'jùD-Ÿ¨åµ|¢–OÜóyÝÚ÷ßxþâÝú%Ÿû×7ûmøçŽç‰ /ùÜo¥â2üz+õÕ'ËöWí`g‰÷'öÌkÿHýþ§ÿÚ·á¦~Çmø¹]ñý’á_Ž÷$iô~ž`çË)J­ÿ^¹Çzž{ÖrÏZîYË=k¹g-÷¬åžrÝ ŸçµÜ£–{ÔrZîQË=j¹ÇƒÜ_wØ÷= ®¹¿î2?ëñ9÷vÏýÞ"nÃÏíñ— ÿû6ò}îŸso÷Ü?:nÐQj%xÉýuÏ÷ë ÜÆóöòõýcüè·á×'/tôG Þw­SÄ®uŠØÔ)¢OÖòÉZ>YË'kùd-Ÿ¼çóº->Ï'jùD-Ÿ¨åµ|¢–OÜóyݾÞwЏæóZDó†8¼Yý6üú€’Žþ¨¥ü®uŠØµN»ÿèä«ÚÞßÿeŒË_ÆK›ØÝo×…ö­¿U;~yäÏðGšü4üÑÎÒigyžOÖòÉZ>YË'kùd-Ÿ¼çóº³<Ï'jùD-Ÿ¨åµ|¢–OÜóyÝYú÷¿ªíïóù¸äóñÒÛõ’Ïýk‰·£ÿeÎvüÖÉ%ÞYzmgyg#ÿ¡/µÆÏ®¹^l×OÃoèÑW}þ ÿû‰Ã¼ýaÍÛðÏ/›×À;¦ñýߢá×+>šùgO.km# Ë&kË&kË&kË&kË&kË&kË&kË&,›×}øù²‰Ú²‰Ú²‰Ú²‰Ú²‰Ú²‰Ú²‰Ú²‰ËæõòàmËŒû²yÝ"ÇÏn<_¬ß˲ùhÖqã²l>nËæcÞ†k®Ëæ~ôëmï¢á×Û^šùg]©aÇ~¯ü74> ï—7 •_·á¼ÅeøßÀ[à5Ȭ=µ¥Ïrþ~g·¿9ùÊ5Èóܳ–{ÖrÏZîYË=k¹g-÷|ûëEÄóÜ£–{ÔrZîQË=j¹G-÷xûëUÀûÞ ]Kî÷Þ¿nÃËð¿ùØÀm|Öž^ÏÒQ/¹Ür3¶ñwý?=~ᓈu£Û?¤å^·'yA­ïñÀ_2Üú+äº ¿µôo¿~ÝñK†jÝî ì ;õ')¬Ž¬­Ž¬­Ž¬­Ž¬­Ž¬­Ž¬­Ž¬­Ž¼¯Ž×K‚ç«#j«#j«#j«#j«#j«#j«#j«#î«ãõÂámo–ûêxݾÖM¿ù†ïWÇÇuu¼^8¬ïÁæ_2Ü:Ã|Zí¾:>šõû¼¬ƪ×í!ƒ½Ûxß%£-|0°Xâ6|Þh–-Go·×v_¾5ßµû‹Ç…°§oÚӟ瓵|²–OÖòÉZ>YË'ïù¼îªÏó‰Z>QË'jùD-Ÿ¨å÷|^÷µ÷½h®ù¼V×ýÃ}-nÃçÛrôv{íýå[ó]»!Þ_<׆å|ðu¯úƯ¤/4ìøõ÷³©÷Ãÿ¾`Ì[3¿ÛÉ?úhøŸáÏÞ[×zÜ‚ËZpY .kÁe-¸¬—‚{Ý‹žµà¢\Ô‚‹ZpQ .÷ºIï—¯n¾~Øaç†;¿þ~œû~øßwOyë«y;ùG ¿ÇoO©AÏyß.¤!Züix‡?¬?gü~øý*í‹·§ç×­ý,½=ý4üÉMÒ§áOÞžþþæïòû{¬‡¿áâÍZ¼Y‹7kñf-ެśµxóï˶Xˆ7jñF-ިŵx£oÔâ{¼/›çûx?rÑ—x¯›çǾ ¿ß¢}ñÊó}¼×x¯'ÿèï¯î½—xõñ¼ïuòW3¦¯6¦ö³ËÕ—áøwy;ú_—MwÕVÛUÛ÷¤bÿzxá±\Ö‚ËZpY .kÁe-¸|ÜëNø<¸¨µà¢\Ô‚‹Zpñ ¸×=î}Û¡kp¯…ºýì±Åe8îq·£ÿµÇ5ÝãZmkßÓ¹ýëá°•]š•ü²®'~Äì¿¶½;ЬäÈÑ__¡ÜÉ\†þ» оxçx~ب(]†ãF·áñwI³´ÖçèdIø¼äÎw¤IÛøûn!ÿ ðùiøË_ïåe~¿ GÞú×møWãÓð'ßù4üÑÃÕ^Û‡Ÿ—µà²\Ö‚ËZpY .÷º‘>.jÁE-¸¨µà¢\<îu'|Ü:“ïƒû¸÷zGÚ(üº "\‚ÓoŠ\‚ã­¬ÓVö¶!J;zG:~Ò ú?o)GéóXçmG“¿ZöyGZëŸtF©ãìŸáoÌ#Ø ký“ ¹g-÷¬åžµÜ³–{ÖrÏZîù ÷×ôyîQË=j¹G-÷¨åµÜ£–{<Èýu~ÛÁèžûëf2~Ôùý?n)GéÛ^osÿ¸ç~þ¤Ñ¥Î»—Üy§Dç}kŠ÷™?ê/úw¤ó‡ñíèxy=oÃóö˜«ÓÑçˆv–Úûþ;vëçñf-ެśµx³oÖâÍZ¼y÷uS~oÔâZ¼Q‹7jñF-Þ¨Å÷x_÷Þ÷ñ~(`4Ö\øõxþÐß¿o¡çmxÞžEw:ú|ÑÎRoâ³J]ïÏúÜþù³è$à>ž<¨]µûËUjH_˜º¬M]Ö¦.LÝën°J½â Sµ©‹ÚÔŃ©{­´«ÔÆý¬Ÿé }_†?2Ê/SÇ •´÷-B_]AO„#Ã_·Ûó¾ýöŠ"ðCŸ†÷'Ê®Ùv»v£@M ñf-ެśµx³oÖâÍZ¼y÷ukxoÔâZ¼Q‹7jñF-Þ¨Å÷x_·¯÷ýTB_–AC”#Ã__©ÙCº·ñ~~…ä/c#»fÛíÚÂûæG¿Ÿ\²ý“¯¶Ý)}ÄäÏðg üyÿg}¦ó6üÑK¸óíŸõW­CÏ©)ð‡6åç«#k«#k«#k«#k«#k«#k«#k«#ï«ãuO¾:¢¶:¢¶:¢¶:¢¶:¢¶:¢¶:¢¶:â¾:^/ Þw¯9úìðüèŽ6_åÄSúòÈeu°¿Þ_Q\޼ ôÚï|{EñUëÐs þ~þ÷°ï¬ëÅ_ß·á‹^ ôËpi7õOûuž—÷÷íÏèÿ÷ðÇ>KÁe-¸¬—µà²\Ö‚ËÁýµ—‚‹ZpQ .jÁE-¸¨‚ûk‹¼÷q î¯B} î.[ÌÛðE¯×úe85xû\»÷1ä¶÷œ±)×à~ÿêÿøÿÿþçÿéüÿ¯ÿíýïÿ~ü_ÿûÇÿøßþ×ÿñüþ÷ÿóÿþs}}úûüò« _µÿøÕï¿ëwG :bÐƒŽ˜tĤ#&±Ó;±ÓqÐqÒ'qÒqÑqÓ7qÓñÐñ vðæˆßÿªýǯ®G¤šÓ¨æ4ª9jN£šÓ¨æ4ª9jN£šÓ¨æ4ª9jN£šÓ¨æ4ª9jN£šÓ¨æ4ª9jN£šÓ¨æ4ª9jN£šÓ¨æ4ª9A5'¨æÕœ šTs‚jNPÍ ª9A5'¨æÕœ šTs‚jNPÍ ª9A5'¨æÕœ šTs‚jNPÍ ª9A5'¨æÕœ šTs‚jNRÍIª9I5'©æ$Õœ¤š“Ts’jNRÍIª9I5'©æ$Õœ¤š“Ts’jNRÍIª9I5'©æ$Õœ¤š“Ts’jNRÍIª9I5'©æ$Õœ¤šÓ©ætª9jN§šÓ©ætª9jN§šÓ©ætª9jN§šÓ©ætª9jN§šÓ©ætª9jN§šÓ©ætª9jN§šÓ©ætª9jN§šÓ©ætª9ƒjΠš3¨æ ª9ƒjΠš3¨æ ª9ƒjΠš3¨æ ª9ƒjΠš3¨æ ª9ƒjΠš3¨æ ª9ƒjΠš3¨æ ª9ƒjΠš3¨æ ª9ƒjΠš3©æLª9“jΤš3©æLª9“jΤš3©æLª9“jΤš3©æLª9“jΤš3©æLª9“jΤš3©æLª9“jΤš3©æLª9“jΤš3©æLª9‹jÎ¢š³¨æ,ª9‹jÎ¢š³¨æ,ª9‹jÎ¢š³¨æ,ª9‹jÎ¢š³¨æ,ª9‹jÎ¢š³¨æ,ª9‹jÎ¢š³¨æ,ª9‹jÎ¢š³¨æ,ª9‹jÎ¢š³©ælª9›jÎ¦š³©ælª9›jÎ¦š³©ælª9›jÎ¦š³©ælª9›jÎ¦š³©ælª9›jÎ¦š³©ælª9›jÎ¦š³©ælª9›jÎ¦š³©ælª9‡jΡšs¨æª9‡jΡšs¨æª9‡jΡšs¨æª9‡jΡšs¨æª9‡jΡšs¨æª9‡jΡšs¨æª9‡jΡšs¨æª9‡jΑšÓ~IÍ_µÿøÕõˆŽØèˆŽtÄ #1éˆIGL:b§#v:b§#:â #:â¤#N:â¤#.:â¢#.:â¦#n:â¦#:â¡#RÍ!¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈ8äFr#¹‡ÜˆCnÄ!7âqÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈAr‡Ä!qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈIr‡œÄ!'qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡Ü‰CîÄ!wâ;qÈ8äNr'¹‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqȃ8äAò y‡<ˆCÄ!âqÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡<‰CžÄ!Oâ'qÈ“8äIò$y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ‹8äEò"y‡¼ˆC^Ä!/âqÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡¼‰CÞÄ!oâ7qÈ›8äMò&y‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âqȇ8äCò!ù‡|ˆC>Ä!âpÈÿý;¨9ò«ö¿º±Ñ±ÑƒŽtÄ #&1éˆIGìtÄNGìtÄAGtÄAGœtÄIGœtÄEG\tÄEGÜtÄMGÜtÄCG/ª÷ÄòbùáW¿Ï‹ê=ÿƒˆøÕïó¢zO^À /~õû¼¨Þ“=0È€_ý>/ª÷ä r àW¿Ï‹ê=™ƒLøÕïó¢zO¾Â _~õû¼¨Þ“Õ0Èj€_ý{^IõžÜ‡Aîüê÷yQ½'Cb!¿ú}^TïÉ£äQÀ¯~ŸÕ{²-Ùð«ßçEõžœŒANüê÷yQ½'sc¹¿ú}^TïÉïäwÀ¯~ŸÕ{²@Y ð«ßçEõž\‘A®üê÷yQ½'£dQ¿ú÷¼:Õ{òNy'ð«ßçEõžì”Av üê÷yQ½'‡eÿú}^TïÉtdºÀ¯~ŸÕ{òaù0ð«ßçEõž¬™AÖ üê÷yQ½'·f[¿ú}^TïÉÀdàÀ¯~ŸÕ{òty:ð«ßçEõžlžA6üêßóTïÉùäüÀ¯~ŸÕ{2ƒ™Að«ßçEõžü¡Aþüê÷yQ½'Ëhe¿ú}^TïÉEä"Á¯~ŸÕ{2–Kð«ßçEõž¼¦A^üê÷yQ½'ûiý¿ú}^TïÉ‘äHÁ¯~ŸÕ{2©™Tð«ÏkR½'ßjo¿ú}^TïÉÊdeÁ¯~ŸÕ{r·¹[ð«ßçEõž ¯A†üê÷yQ½'l¿ú}^TïÉd‹Á¯~ŸÕ{rÊ9eð«ßçEõžÌ³Aæüê÷yQ½'?mŸ¿ú}^TïÉbd±Á¯þ=¯Eõž\·A®üê÷yQ½'#n¿ú}^TïÉ›äÍÁ¯~ŸÕ{²ëÙuð«ßçEõž¼Aüê÷yQ½'So©¿ú}^TïÉçäóÁ¯~ŸÕ{²þYð«ßçEõžÜÀAn üê÷yQ½'ƒpA¿ú÷¼6Õ{ò y†ð«ßçEõžlÄA6"üê÷yQ½'gq³¿ú}^TïÉld6¯~ŸÕ{òùð«ßçEõž,ÉA–$üê÷yQ½'—rK ¿ú}^Tïɸd\¯~ŸÕ{ò2y™ð«ßçEõžìÍAö&üêßó:TïÉñäx¯~ŸÕ{2A™ ð«ßçEõž|ÑA¾(üê÷yQ½'«tU ¿ú}^TïÉ=äžÂ¯~ŸÕ{2Tªð«ßçEõž<ÖA+üê÷yQ½'Ûuí ¿ú}^Tïɉäį~ŸÕ{2g™³ð«ÿ>¯ùKêý$¿v’_ ¿ú}^ΫÑy5:¯Fçt^Açt^Aç•t^Iç•t^IçÕé¼:W§óêt^ƒÎkÐy :¯Aç5é¼&פóšt^‹ÎkÑy-:¯Eçµé¼6צóÚt^‡ÎëÐy:/ª÷ä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯ]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{į_â×¾þêýyɯýê÷y5:¯FçÕè¼WÐyWÐyWÒy%WÒy%W§óêt^ΫÓy :¯Aç5è¼פóšt^“ÎkÒy-:¯Eçµè¼צóÚt^›ÎkÓy:¯Cçu輨Þ7ª÷ê}£zߨÞ7ª÷ê}£zߨÞ7ª÷ê}£zߨÞ7ª÷ê}£zߨÞ7ª÷ê}£zߨÞ7ª÷ê}£zߨÞ7ª÷ê}£zߨÞ7ª÷ê}£zߨÞ7ª÷ê}£zߨÞ7ª÷ê}£zߨÞÕû zTïƒê}P½ª÷Aõ>¨ÞÕû zTïƒê}P½ª÷Aõ>¨ÞÕû zTïƒê}P½ª÷Aõ>¨ÞÕû zTïƒê}P½ª÷Aõ>¨ÞÕû zTïƒê}P½ª÷Aõ>¨Þ'Õû¤zŸTï“ê}R½Oª÷Iõ>©Þ'Õû¤zŸTï“ê}R½Oª÷Iõ>©Þ'Õû¤zŸTï“ê}R½Oª÷Iõ>©Þ'Õû¤zŸTï“ê}R½Oª÷Iõ>©Þ'Õû¤zŸTï“ê}R½Oª÷Iõ>©Þwª÷ê}§zß©Þwª÷ê}§zß©Þwª÷ê}§zß©Þwª÷ê}§zß©Þwª÷ê}§zß©Þwª÷ê}§zß©Þwª÷ê}§zß©Þwª÷ê}§zß©Þwª÷ê}§zß©Þwª÷ê}§zߩު÷ƒêý z?¨Þª÷ƒêý z?¨Þª÷ƒêý z?¨Þª÷ƒêý z?¨Þª÷ƒêý z?¨Þª÷ƒêý z?¨Þª÷ƒêý z?¨Þª÷ƒêý z?¨Þª÷ƒêý z?¨Þª÷ƒêý z?¨ÞOª÷“êý¤z?©ÞOª÷“êý¤z?©ÞOª÷“êý¤z?©ÞOª÷“êý¤z?©ÞOª÷“êý¤z?©ÞOª÷“êý¤z?©ÞOª÷“êý¤z?©ÞOª÷“êý¤z?©ÞOª÷“êý¤z?©ÞOª÷“êý¤z?©Þ/ª÷‹êý¢z¿¨Þ/ª÷‹êý¢z¿¨Þ/ª÷‹êý¢z¿¨Þ/ª÷‹êý¢z¿¨Þ/ª÷‹êý¢z¿¨Þ/ª÷‹êý¢z¿¨Þ/ª÷‹êý¢z¿¨Þ/ª÷‹êý¢z¿¨Þ/ª÷‹êý¢z¿¨Þ/ª÷‹êý¢z¿¨Þoª÷›êý¦z¿©Þoª÷›êý¦z¿©Þoª÷›êý¦z¿©Þoª÷›êý¦z¿©Þoª÷›êý¦z¿©Þoª÷›êý¦z¿©Þoª÷›êý¦z¿©Þoª÷›êý¦z¿©Þoª÷›êý¦z¿©Þoª÷›êý¦z¿©Þª÷‡êý¡z¨Þª÷‡êý¡z¨Þª÷‡êý¡z¨Þª÷‡êý¡z¨Þª÷‡êý¡z¨Þª÷‡êý¡z¨Þª÷‡êý¡z¨Þª÷‡êý¡z¨Þª÷‡êý¡z¨Þª÷‡êý¡zO~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m#¿¶‘_Ûȯmä×6òkùµüÚF~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m_ä×ùµA~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m’_›ä×&ùµI~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~m'¿¶“_Ûɯíä×vòk;ùµüÚN~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í ¿v_;ȯä×òkùµƒüÚA~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í$¿v’_;ɯä×Nòk'ùµ“üÚI~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í"¿v‘_»È¯]ä×.òkùµ‹üÚE~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í&¿v“_»É¯Ýä×nòk7ùµ›üÚM~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚC~í!¿ö_{ȯ=ä×òkùµ‡üÚ#~mþ¿öõWïÏK~ÕÞþêÿõ¿ý¯ÿËÿù¿üÏÿÓÿdúC~òHDyLP-1.10.4/Data/Netlib/seba.mps.gz0000644000175200017520000006110310430174061015210 0ustar coincoin‹ÆK®9seba.mps¥}Y²ì:rä™Õ¸—FÌÀgéU™ZÖÅSmRK½ÿ43I„‰s¿oºƒ bò~þ¶ýc¡ÿõûÛ_ÿòŸÿúÿõ׿,?˲žÿö«e÷¿Lse›+ǯ|{ùUä¿™5ñ+Óüf ¿²kså›+~‡O!õÊ·W¦¹²ÍUS¦ÍUS—Ð ãûÇzš«¦f17WM™©©Yjj–švIM™©iÁÔ”™›2sÃ+M»”æ~¥y¾ÒÜ¡ðg°M/°kó[ó6­5ÍUh®bsÕ”bùÙæÙÜ”Ò<‘-ü~nõÍ"gøý\Ó >Ý…]¹½WÖ+^kß¼?ß¼?Ÿš2Sh®ÚRx]|nJÉM)ͳûæÙ}ikîмMß¼M_x[‡54W©¹ÊÍUó¶¹â½ DÓ\5ÈÄŸ!d~dŒ¾¹ ͯYlúulÚ%5£[jF·ÔôëÔŒn©éŸ©é‘©ùrSÏâ8¯„½.¦^±w´Š iš1Ë4_¸i¾iÓ|cû•ãWïQØÐÁö+~?ÇŸÁ¸éÞ£i®l½â5süýíW–_ños¿â¿yÛ^¹æ*4WüÙ½Oü*4¥„¦”æ‰|Óò>´¥ðvi¾#øìdš^¾_¥æŠ—\SŠo~kêRsÅ¿[ o‰Èç¸}"aóÑ>‘D~å{Ÿ«DW>ðßø¼²O$®¹âµ.|l=&’zåø{(ü‰Þ ~Å¿ŽýÓa=Ä6s㻢üж™Õö+þ›s…_ñïÖ:>¶îW ¯ðZ{þ|¶é‘Ö7whz¤mæÛÌûUs‡Ô”™ÚRš;4­äsSJi~ããü^g×\…æŠß/ðÙ×¾²Ú¯LsÕ ù¬¶_ñ2£a=ÒF¾’Û¯x=cóŽbh~Ëü~±yï±yöÌg››>Qšg/|ì±%§æŠß¯4w(|^qÍÊØ ×zåÚ«R ]ÙÉ¿‡}ùÂZÉþTgxtÍêw¿2Í•m®"¿ò Ï·¿ñºìC_sÕ”šz†¦>¶ºf-ìLjîþnêú||äs¶iË{³Í3X>oºfå¸_¹æŠ×úÓœìª)%4¼æùll©©gjê™›;4½Ç6OëV~‡f,pž¯Ò]³®sÍ÷îšol¿bsøqe›«@Wïw[‘ï25=9ñÙp_„æ*6W ’`û›m®Ò{]Ä®Œá¿í_ ]•†ÇÇëýŠ×¥ðuë¾ i®8Ï7»3o ûâŽ) ^Ö‚ûUi~+ü7>êïW¾¹ ÍUf¼ãó¨W¼f~m®øšÈ{ÞË}³ Ú/øýÿV|3^ûÈW3¾Y5ûfe¼wO~•ùX¾oWøÞã.í¤|±Ío ¯ð}Î~Å~ †Ï°Áð¯*Ø÷j&׫t»¢»‡Ï;ª¼Ø\ñq)8ÞÁñ1r¿â<ÇŸ6x>&‡f•¼o~kÊlöc!ð–Í.+|naëÕ^Š£«À¾÷ãÊ6W-2^W‘÷º]sõ½©ÌÈW÷¡Ùe…dÙ—s\ÙæÊ5W¾¹ tÅWdû:À³2?WTfæý:4³ý~Å{OiÞ{á£wlγâÊç͸ò^Í>*Q]ö+˯ø÷°ï`c탱9‰Í|´_±Ò~UØ•kêé›R¼a#J ‘×36.W¶¹òteWv¿èø2³öÍusåØ7? _ã{ôÏJ˜]½—L/5sø¾ÕfÏïóû•ãWü~Éñ¹1íëä¯,»Š|}¶{…_ñÓŸýÊð«ÐüÆÇÖ}Šã¥dÞ{ö+^³Ü?äÏžëëÉùsÉ~sÍo¡ù-òßøËÖµW¹¹*üŠ?û¾“á¿}N$r½òü·ÐüÖÜÝóᘀؕi®,¿â;©ùwt,.êïû•o®BsÅJÙ.7W…_¹æŠ·Ë~ÅêYÌgÓEW|‡¹/mBsÅÞÑqe믋嫋òYÏñž¼_9~ÅŸ½|¾?ây>‹ÏÏ{ö¹"ò+Ó\ñ½vù¬Q¨ÌÀ×Þ%úöŠÍN%–æ7¾NÞ¯øÓ~Î#]96–—Ô¼‡ü¦2]ñ^·/#ëH»7‘«³Óû*ð+vªù¾ŠüŠÍU«e¶+wÍï}åøûVö«¸Òªùý. =Ãûªð+ÃîçCö+6¶¾¯»òlÞ|_qäç<׫Ȯø×¸_YÏîþ9?«H[øûßW®ùßï³ÐbW_…æî¼å÷+ÖÖ{/³üʸæŠ?md»ëýŠ­ö«ÄïÀO2Ü>UíMqÕìXòÑ•aë¬÷ã…ãäô¸úŸÿøç?ÿ÷¿þóÝ‚ÿNW¶¹rÍ•o®Bs›«Ô\åæªüõ/þëŸÿ½ý¼Äýßûs}?h­ÐÂþ™×RïÑþp§_J$Aöïèõæ\"§ÛŽ~ vÝÝ/ín|÷KÓƒôx+×!z¾£üI/ë퇀èŸñ²½ÉR¶§Ê¢¨ü¡Á=Ó£DÏ*zèÞ*žýPøÚ×»T±ïéî‡ìîîºné&ã»K§ÊG¾üçÝ•ïéî^zv¯ê6‡ºÍ¡c<Þ½$‰~¯|ôÒ¡–ª*>Ñ}‘WñüdŽmïSå9¼÷C|¤§ÓcÑÜ=v-ŸzZöÔæú»Ÿ2ÝýïýÐîéy…½î”ðFÚSÚã÷p'ýÞtÑýíõîSáA÷·7jB„ô[Ë›õ¢ÇîStŸpÓ"!ô„è!u¨¥êˆô‚GÚSj|j:©ÏŸjäÃpqª”-j©‚åS·9„LÐò‡¦ùHOwT<é÷aÈ!ú!€‚N{h¡í§ØÓ<û!—>UþQAËŠêÃXw*­ òY3¿Ÿb,¸{“_O?ôÚž~ʳôS¶Eô¬iOeбö‰î¼èYSùCÙt¯Yr/¢û¤¡wÏnOz Ï#í) CzÑгÐò‡ŒüXù"Ñ‹b’:ue@]›&DOx¨<Õä§»G+tÚè­†ž nùØ-Ì ¢KMwñ=Ý= ÓÄ©^?ÑUÑsy®ü)D÷ôS“~èu§F è¶(¾8׿ޣåOM³]/"ú[ûà¨Èè¡~ý#‡‚ÊÊ(ÿ0ÞŠ) §¤ëNЋQt›SÏìé§´ù°º8%Ï~=ªŸ3쩊ö3ì)>ì Oá´_]œj»ÜDô7b§ÌúD?ä×~M{*±ƒÕ©­‚–I1Mœ( ZèýÔH{ú)t>ÑÙгfy*nm -U|{ Ÿ2\¿ =5¸'ú¡Íõ•ÝÉ ÚMœR[¿ =5±‡ÝÄ©•»Í$uÊi=ýTÁè§:†èQ± =E2@?²'ú¡œ!zÐÜýÌ={ýÔ‹zú)=уPùSíy˜"Om§P—*ó<Üý”ú»ŸJÐÝ §§Ãëúü)Çú¡Ì<Ý=»‰S®y¢L?¿Ÿê˘~i-ýZéÝ`庹¯VÁêâÒaºIê’džînðÊêR_è§*è^±»d@?'z¼Ç!žôÑQ§ *uÀªè¥£w²Á¾ÔzÅ;kKõúß}V\¨tQ\² w{ÏEå‘°Hçþˆž%º¦ézàª|l+½¬Òñ¾W܉‹tpßÓ¿8`w®>`O^àÊ °G@ïؓ‽ÒÅö´*èè}‘ŽÎ{::G_ªÏÓÝÓ*T>Ù¬èuÉ z\êNÞýp w?<‚ºÍéŽûŒW<ûé>„èYñ½›~Pñ§6Ñuè'¤¾ÓBÍЃðìHóèéNzö^ó€t €,Xó€ôb%mâöCFôN1—¸`ŸL/€,—°2ÚIUz'€ØKÚ¸ïáÝï/Î\w/š^× ¤MXÍ{ïÑóó@ EÒ<=HºLR @9»Íáöôì_(#`šÊˆ“”Tù/”x÷)e„è²2bß;@Ióté€i=ÇKuq{¤K§ÄCa…èsÂJ¥O +D—… ™z ‚2’5-A›vR› º¬Mä¢xö^‚ˆ—6¡yö9q轆NzQ¼w'‰‰Puèé‡ëÒ&î;s4ΟÞqý,s:Ê=ÞÝGáî^±ª<½ê=XÍ݃¤ËUåCè1kèIjù²Êz¥áî֯ϫÊÓѨB¶;lDïݼ¦=ýž*oC„Û±¤UéÂ6ðtý{¢û$4/šOÆK-Ÿ5;©Ó iR«¦Ûašè4ÒùåÔer7†‚nsú™õÝ*.€žñ`—Ž~z¤!]& ]óNϳ'zzpôùÓÉì¡é:$X$¹¨§>a}ËŸîatai4Ö¤ˆ>§I½D#hR«b=ú’UhÕt›/$­6b@Ò:žýt${ºûá`î~ø“=Ñ;ÝìÜ„B©¬§#ÝìYÒºè§Ø·’Ñ÷/¤I9EåOß.(i9 ýãÔ4©UsN{ze:Òºzz/|¥KStZ ˆ­ E¬Ò§1¢wÂW:E¥ ™a¡ðµHZ žT•ÏøÅa­ëN¿ü†½—´¢w 笴*]”´K£YMŠèÛÛ±Š •ï³g§5©]¥I…W¸Ó'5)FŸÑ¤]¯ID šT¥OiRœ>¡I1º·B嚣ÏhR•>¥IUú”&Åéš§«5)t÷N“ºî>Ò¤}F“ªô)MªÒ§4)NŸÐ¤}F“ªô)MŠèPzZ$µ Ð…õ%*}NTbôQ©Ò§D%FŸ•*}JTbôQ©Ò§D%FŸ•]/*OfNTªô)Q‰Ñ³¡¨TéS¢R¥O‰JDŸ•*}JTâô Q‰ÑgD%FŸ•8}BTâô Q‰ÑeQ))èH;Z$¹ЃDïÚ4@ºàìÓËEðî%H~RIÑëœ`Š增D% iGªP¥¡ µ P…ò)ëhvRsî6D¸Û½§§#ñgyòÖ©t'|ï@ï r þÄSÒ ÔgB ë„ÎG Ñ£Iß‹J•~ô”ƒU&)(õô"½8$ut¨-’\èB¯ƒrQO?¢jD%´“êE¥Kóšõœ¨T齨ŸE¥JŸ•ˆ>'*Uº(*¥¢¡#éi‘Ô&@Î. ÚÔÑ¡ô´HjSOÿÂÍ |qPzZ$µ©£Céi‘Ô&@޼zµ)€‘vÎÍŠÑgܬ*=I•ÏŠ7p³BjSOï¤'r³rÏ++,=-’ÚÔÑ¡ô´HjSOGÒÓ"©M€îÓ`@ÕK ÒM¤`i1+‚¥]t¬0-’¨è@aZ$Q ѱ9Õƒô”Ew¨pÅZ³ƒy˜â'Ä*Wù7ÞTœ>¥\eÑ›J¥\åßxSUº¨\¡(j€Bª Âzq^p‹Kcô9ÝìWÁÒ8}"XZ¥wº™MÝìWÁÒ}&XZ¥OK#ú¬z#K³õF–¦Ro~,­Ò;õ¦!Xšw`¯KctµzãàÝ»`i^ –æ],mô/ÔéYWæãü7ê ¼;ˆ‰¦Poä`iNRoÐݧ\‚]¯ÞdDŸSo~,­Ò§‚¥}.XZ¥‹ÁÒLŽº0¿CY§§;I?qÞjèY¾¬ÓÓ½Ôòcñ'ÿÆ£ˆÑEñ'%½ÌhGùÉ!É ½W˜ò)=%Í{ •]ýzéÉ!z×iós°´JŸ”ž~,èßKÏ>,­Ò¿––!½ìµ<Kcô.&ÚIOšÆD[¤0h5[`3´²AÍx¸2óðì ¨™¿âÙçÅ j¶à8fÒ3Œr☡»÷úÉYy¿*–ÄÞ ‡‚g2ªGº°4:óU=ѧb­UºdÄç‘y^OŸÔŽ~ª­ÒMZñ V@ü)ù¥Fz›ÒO.º¤ŸÀp}V¡@q ÷º3gÓý~jtE­î• žýL¿„.Îø`çâÌUz‰«@Š/.Y/Dz³YÑm`0»EŠ_×ÓÅ0uGZ§'zD¿ЃåNSù©(wD?s+ýÄzŲðL±èNóâæ‚ä}.H£Ï¸Uº$ïÈ[ôDï4žœŸ=Š*}Ê£ˆÑE"=¯§i]Ñt£{åù˜ˆ?ÇY%ŽžèsâÉÃæ“8z^O÷«àÏt¤(z¢Íf¯üCôw¨J¿KOç$5ÑgϯñI“ò*ºÂjß¿ì¾?^ΨG’V¥O¹C1º>ÿ¤åjyÊÿÃèbþŸ&UéSš§OhRŒ.lÿ‡š£ÏhR•>¥I1úŒ&UéSš£ÏhRœ>¡IqºZ“BM×ûrÙgMŠÑg4)FŸÑ¤*}J“ªô$Ø?®£]$£ q) “  ’tòêéÈãk‘vô9W0FŸq«ô)W0FŸ+}ÊŒÑgÄDFŸ+}ʌӵ™—`Ë‘yiEôÎ,H®`Ñõb"zö/ÄÄéø{ЉŒ>“y‰Ñ“ €2/U:’ÉG¬§£(„ VQ·Aù™1½÷)1±Ò§ÄÄJŸ‰>'&Vú”˜Èè3bb¥O‰‰Œ.ЉªÊOy’UúTÞ'FŸÉûÄéyŸ}&ï£Ïä}ªô©¼OŒ>ãWéSyŸ]Ÿ÷ Œ6P±\$‘²§á¤Š”€žñz~èGt X^Z¤fAÚ(º°4*¡•.¥NŠ E¬HqæÀ‚|N"úÈ£(ˆ‡N•.Šë7x ÓUÈ=»Uº˜>(iê9Q©Ò§D%¢Ï‰J•ÞÛKª¨¿P…гϩBD‡Þ/‹¤¸ôô)a¥Ò§”F—‚¥ÍP9'¬Tº¨ŒÄ¨¹;ÒOI2éès~-Œ>ã×RéS~-Œ>ã×Ré‚_Ë8XÚEÿ&X¦wî+ñ9X£Ïäÿ!ú(ÿâîsâB¥w~-ÌxÓ¾_½"¤šnrÒûÈi1¼¡Î¯F¼IGß‹}¥;}xmàýÂè3Þ/Œž£p÷"‡2®t¤,’€èQ¢g]p²£ƒËJ—òÝÛAp’JwBd(ôô~Wvžwû‘PQéúÃzx÷™Àkœ®¼†èýa}QÖWúLàµJŸ ¼Vé’ÍÖ0§ ÑçrÊTzhk‡¶•>¿«Ò{Uðq˜®ŽßU]h›½ó1’jù/mQËqh = 9eœâ{Ÿ<´­ôäÿØ«§¿ |qàlÖ3ôÔçû³Ù3“QÓWzÒ(ÃãØž>wêzÑ'O]‰>•ï¾Ò§"h1úÔ¹'ѧœ(}&‚£Ë^Š÷þÍÉc@ô©“G¢Oàbôn”žpUúÜÉ#Ñ'åyuÃt=Ÿ<^ô¹\œ>€‹Ñgp1úL.NŸÀÅéR.ÍÂl.‚£éÐ6h^ ”õ|æ[é3yU*}*¯J¥á{ã ýærêÙÀ÷& zÀ&žÀ)Ñ“0ÓÂTºœF3AËá¿LTL‘_xþ 5-ðüq’ç‡ô"Гb=<Œäùc ýîùã$ô:9rZðŠ÷]lÃjèSéx}&Ñç¯Uºè{3JÇSéÒÊj·­ÒŸm#×JïåA"Í{OôìÂ÷éx}&Ñ‘Ó4ïý‹|:´çºSéS×*}*ðÑ'ªJ—*§9î®;ë³ëN¥O¹î0úŒëN¥OÅm»è“®;•þ…ébSéSQã}F7ãô‰¨qŒ>5®Ò§¢Æ1úŒ‡§Oxè0úLÔ8FŸñЩô)FŸñЩô)FŸñÐáô NŸˆWéSQã}ÆC‡Ñgã¡SéS:Œ>ã¡SéS:Œ>ã¡Ãè3:•Þ‰½Á :)Cº6Ü;c`ô™dMŒ’p÷ ëbïÀ·Ò‘(û(·2º^nEô/|dPåe™AÀ=F×܃wŸñ‘©ô"Xå Ó%}.]£Ï¤Kªô©tIŒ>“.©Ò§Ä^F—*? ¸WéS÷}F+fô™€{œ>pÑgîUúTÀ½JŸ ¸Çè3÷½`ƒÿaÀ½JŸ ¸WéS÷ˆ>p¯Ò§îUúÀͤ<ϰs~"DŸó©ô/üD@ËËÑÃT»‰9?‘JŸò©ô)?¢Ïù‰TúTô°JÿÂOìaçüDˆ>ç'RéS~"•>å'Âè3~"DŸó©ô©ZDŸ‹ Åè3´*½;G÷ŠX•>uŽÎèâ9º¢ò“ L*}*†£Ïİ"ú\ «J÷«û>ÿI¥ËùO@x©‹þÙ¹ši‹Þ»p$_ƒE]KƧ›Dá&'½OŸ’Â+=„_ôÉXSŒ®5å=Ká ‡' ÏÄšªô©“lNŸ8ÉfônåëŸO²}æ$»Ò§N²½ûø½t’½º|’ƒ¢ÛxIAG܈¥sô¤¢ þ'£µg¥£óîqHÌ[á7  ›†¡÷K¥Oy¿Tú”÷ Ñç¼_*Ý¥„㯠·@Ǧ‹tR èàØtA'¥Í\DôÎG&Ä‹ž{È’rÝ}`xÄè KÊ‚Ýb¤cõÆŒüÍ*ùÈ,’[  ™Er‹tñ8Öçç±î›ô)¨ÛÈéSDZ•Ž|dì] YÎi½;´-’ó ¢O9ÏTúÔi.ÑçNs}æ4·ÒÅE£ãØJŸ:Žeôß›JŸŠ9Äè31‡8}"æ£ÏÄbô™˜C•>sˆÑg<*}*æ£ç‚cûsZ0IÍyþTúTÌ!FŸ‰9Dtxh»<Ūt1‡:rÎèé½§†g>·ü=ôªtÎtੱ<¥O©ôQú”Î9£§!²ÝЃès>•Þû`dÉ#@ú„£ë³¯HŸðÁ¨ô)ŒJ—}0²b–™s¢ ú7ød€†žÝ*}J¨ô/D°¦*½3!LQÐd 1Ïž•>å @ô¹$•.&ñ™òWz2ë÷¦ü•>¥!=6ÊHCpš)rN úœÀè3"@¥‹i4:u €z.X£Ï‹ªtdrÿ¨!\ô‘1}´zÉBôûj|ïXiXžŒé}&ÖÑG±¦¼‚>e‹_éÉý1TŽ­ì¯éóI°*ºÆÊÞåW¸ÓGá¥|y¬ü¤¸À袸00“gté”x¤Tú”:Àéê£Ïd¢`ôu ÒEu ?ÞGô)KsNŸ/ÅéRx©qG¥OŇªô©òJ—NÈ¡8¢ •GFà€îA ÷td¾HFà}ÎÖ›Ñgl½+}ÊÖ›Ñgl½+}ÊÖ›Ñgl½}&°W¥Oecàtu`/Ôò_ØzDŸÉÆÀèz[oôìS¶ÞŒ4„å)´V¥aëîÞ‹ V²õ†tö`y ­Ué¢:0:Þ'úÜñ>£ÏïWú”±6£ÏkWú”:Àè3ê@¥OY[3úLd.F—Ì¥ûöèSì•>Z‹Ñ…5íð„¼Ò§bc1ºKóÉ ì¢ÏÃZ‹4 ÑÅØXQsw½è`Ð,@VŠåUt©ò!iè‚°2 ­UéS¡µ]Z+@º“èš' +v`íSéS¡µ½äï£SUºjÕ|qbtªþà<»VŒ‘¤ØM̹}ä" óVúTŒ¤JwB,< €ÝPü³‡A¥OyTú”¸Pé’¸J4ÏÝfäÈ)ž]Ö&FQŠ*}*JQ¥£|ÚD¥KÚÄ0NÑçâUº'¨hè(Ð"Et/…ž =¯B<÷¡C¥ËÚ„fu£ -R¡Ž£ =JŒ>#mT:Jw±<ù7Tú”£Ïø7TzÆ^tã<}èÇ=/N&ýˆãù,O •.;( ƺèu¾aL‡"€[ž|.údFŸ ¢Ãé‚÷H`t}t÷©Üœ>‘»‚ÓÕ¹+ }&wE¥Oå®`t#Ä#Aáqz:Š•³HN€>ã;ÀéQp|ì&8}Âw Ò{ß,ø0qÑg|}Æw Ò§”‘JŸò úœï@¥;ÁD ž¼úŒï£k}x@·JïŽáƒ•|,¤c/­¡ï£Éõ (>rÅ=ûTz܆©/]o½é¢õ¾QLð~‘¢¬ôô)ë}F÷A 'Åò`p>¿j>Ø©ÔDŸK}QéS ‡}&áp¥O%ft1ápQtZxŠ¿H÷€>c½ÏéÖûŒ>c½Ïè’õ> “ÒÓ§ÔJŸ2¿gt}Ê_H—ž}L¥Ò§‚©TúT0¢LÜ}LE³ª„‰)0 ÏÿWºÞøßz‰þ­ñ?£wÆÿùÙø¿ÒGÆÿ]€šŽ¬÷ý³õ~¥÷ÖûA²Þ~?SôÏÖûŒ®·Þwž;ߎå)„O¥{!œ‰÷V1Iy/÷ùàkè"°H^=]ÚøQPÌJÏ3ù*}Êõ€è²ëÊÌÐÓæh`’šKÀPéSâB¥á¹Æº9Ï…J7 wÚhß'¥ù‰ÞçY°R–lÐòP‚Xž²dWúTô£JGî‹”Ð#ž¤’õ z²Âü>LÀPéb†Qè¦JŸ ÝÄèAôÚPŒ6s^DŸ ÝTéS *}*Cx¥Oe'ú\FŸIÀPéß°î‡*?å3Âè3>#•.ûŒ8źn.?ùEÇiœ€!ú”Ï£ÏøŒ}Îg¤Ò?‡N©BAs÷)—“Jï³<Ø'—“w±f5ùYTJ*ºÂådÁ¯r§Oe4oèß‹J = Çûr@*NŸP…ZúתPKW«BÑ¿W…8}BâtäYò Ë4ô%Ÿ‘¤¢ã´^Й¤§£Äå‹”«п×eú÷Ù 8}";§Od'hèßg'hèßg'àô‰ìŒ>ã±Òп÷Xáô •†þ½Ç §Ox¬4ôï=Vú÷+œÞéfÉ ©èWé_{¬4tÙcEñÉ@¿–EreAô,8¼ˆÚ§÷Á¸üS0®†®ÆéßãjèßËy xÕ<Èyœþ…œ—…ìzóºän#çFàô,DY¸Û0úŒ»MCÿÞ݆Ó'Ümú÷î6œ.»ÛEËÏèq ý{=®¡/¨5tÁºêé(ßý2ÎNÀéÙ º^P ˆ. jš‘vÆ[§¡ï­Ãè3Þ:œ>á­ÓÒ¿öÖièß{ë4ôï½uZú×Þ: ý{o†^VœOÝÍÝ'œ}zXqË÷Î>ÒÕÎ>ðîß;ûpºÎë PO÷ÅK¾BzvR%”Ó‘KÐ"yutñ+b¢M·7 f1ç§áädàjÔпw5bôW#NŸp5âô/\À³9Ï=¹qºìjôþ”ÝýƒòˆžõŒ˜Èé_x*»Ã`iË8;§O¤cçô‰tìœ.::…¨©ü„ÉéZ$£Ï8:qºèè$g4çô‰ŒæŒ>ðTJáy¸€þLºÏŠù}&!:§O$Dgô=®¡Kz\'¨E°<˜Ôú÷‚§Od4¯ô©D.œŽ—/R®r@ÿÞщÑGŽNYAŸptjèbâò7*®&<+WâwyÐ{jï~»CUú”;TCŸS®ˆ>§\]ôIåªÒ§”«JW+W°òsÊÕEŸT®.ú¤rEô9åªÒ§”«‹®W®šÙ€èsÊÑ甫‹>©\ôYä¢O DŸ@ˆ>'€\ôI¤Ò§¢Ÿž¹¡²«¡—¯cnqú¤pÑ{ÀJ"ªü„OOCŸ.ú„S£Ï8åpú„SNCÿÞ)‡Ó'œrú÷A³8}"hVCÿ>hVCÿ>h§O¸ÅpúDЬ†.ÍŠEóìY)8}òŸèâ)¾W4<¬_¤óyD·°éàù< {ñ??¿8xX¿Hçóˆ.)AUya£ Ïç=I-_«ÊÙcx¢ÏÃWúÔ1<ÑçŽá/úä1üEŸ<†¿èÈçj‘ܬ=A§àfø\-RŽ•žž§ÛA¼1N—ãÅò`&• §áŒå!ýëT* ½sÆ2O©TZºÚ ¼¸3–fQ }®–q&–†.ebQí¤¼vªB==ƒ<| ñç¢OŠ?'} þÅ>nÆ—‹ÓeñÇiÑ-Rºž.Š?ñ=Ç™§»#‰¨jG቞…NT++(-’*ÔÑgÅŸ‹>áIÆéDäW)…¬ D´HªPOŸ.ú¤øsÑ'Ñú÷ŽhŒ>ãˆÆé¢#šÓT~Vøºèr„¿ ¹{ nF7»è“ºÙI—u3§yvè®¶HŠXOŸˆðÇè3þú÷þ8]L^„<Ôz:R×–q€@NŸØÐÅÀC­§OÊn}”û¨<¯.Fñ»ÜG+¢qnû±5tÑ­<Ÿ½ÑŠàˆæÖçg‡îj Ñï¢OŠ~D¿ÏÃÇùàÇv޳jàIïÕÀ}ÑžÕÀ“>«Vú”XéY•ú3Pèsj £Ï¨Œ®Vaå§Ô@¢Ï©DŸS+}J dô5èsr^¥OÉyDŸ“ó.ú¤œGô99¯Ò§ä¼JŸ’óˆÞÉyÙržI®–ó2¢«å<뽓ó²$çÁ»‹rž)²ó%Ñ¥|_ÀSÉAºž0ŒNÈ+ÝãUåX‹¬ô„Ýù8ý‹ü?¨Ó¢(„ öTBM×K™V!eVz'eƧð„œ.†'DŽN=}N ½è“J(Ñç”ÐJŸRB‰>§„Vú”Jô9%´Ò§”ÐJŸRB‰>§„}N ­ô‚#?•P¢Ï)¡DŸSB+}J ½è“J(£Ï(¡•>¥„Vú”Êè3J(£Ï(¡•>¥„}N ­t½ê = ô4•r™Ž¥L¢ÏI™DÿBÊÌ~×ã²Bʬt X.ãÀœ>r‡êDÊž.æ>B"eGïK’2H è@±\$‘Ðb¹H"%¢IÊìEÊžÞ»‚­Oq%9]–2½â½CÁsÇ•äô‰¸’œ.æ¼RmB'•P¢—ïÃR6ôïÃR2ú¤ÑÐtÁy}J %zÂ%%tZY Íš^7éÇFô‰ ˜Œ>Š©éuP±\ш>‘q‹Ó{É1?eÜât)ãT=®=*Þ;”IeìéNXC•±§‹bb4Šeá((¦ÑпŠÉéÙÆºp^UÆŽ>“Ó½pÜ7Ö"‰>§E^ôI-²Ò§´H¢Ïi‘Dï´ÈÓõ`¬E}N‹¬ô)-’è(tæ2ÎuÆé¹Î*}SsäAHt”íY‹¬ô)-ò¢Oj‘•>¥E}N‹¬ô¡ä¨s@L*º&tf /s§Bg×_D>k¨E:&I‹ô‚£@-²§[!FÔ"=KtMÓ!ar‘´H@Žc¡ÙÓ‘0¹HZdOGÂä"i‘ˆž$úhå[éEr@ zï¦xeDsUº þ RšqúDJ3N—rÀ˜šˆ.T>Ìf+]ê´(¦fOG6)¦fG‡6)¦fO7R>¶±B®Ÿ Àæ"ÅÔt`sç¢kèßç¢ãô‰\t ]Ÿ‹Ò >šê5èˆÞ{—‹®)]†ô‡‹A.º†Þ ÒF:“ÑgBg½¤5¡3+Ý&Aj¶YCw3n¯•Þ%8ÔLn¯sR3ù­ê¥fH¥fà èBN²±×,ÑçBgòš YéS¡3‰>:³Ò§Bg}.t&ÑçBgVúTèÌJŸ It¤(/±/Mõš‰}YéS±/‰>‘ ŽÓ‘$¼H*pGw’yŃVü;¯Yó;¯Yó;¯Yó;¯Yó;¯Yó;¯Y£ðšp½wG"rOGŠò‚Edtw¤(/’;-¢OIÍÕéVšÝªyq^p„4  q~ÇŽ§†9žî@GQ-{º(övR&zï@×tÕŽçT»ê¿8¥Ú‘¢ÇÞTcÿEóì¿/nVv»è’Åñ §#7Å…í¹).Á+Mu@œý.ú\ðJ#û/Z…ÿ"ѱÊà• Ì2ÀM1k4Ãê¿8¼ÒüÎÑüÎÑ   B=®§OÊnä„7§›U>Éð]«ü@ľ̊7«›ý·Ïü·Ïü·ψNx!j„¯ß9á™g' ÛŸ$Çô–$㢨¢ .ƒe•kDV4Eù“Ꞥ>¢ÜÄ}ðæR¢AÑ;I£w’¥Vá¨L•íEµÏƒÚç 5ÑeˆÞ/¢G©d  Ͻà¢{A©±/ŸV¡ª”Ák,Q ÃÑ ¡Ò•¥˜ ªJ‡/S8`wõô°Ê«@ã]ŒwV ¬Λ”ÁM ÑOb­j¤A9BÉ3pˆ× ¢0Ä…(¯>®ßŠß$‰ÁM8**˨HwŒƒ;Æè å¨@¨0@eBÉ0Ò8–À‘>¡8ø„.“F`ÜØ  ¡Ìe e('¡ÄLäœNë¥4X/%Z ¥ÁJ(ÑIWòò3½à jOŸ“|N—]1°0nPI yÕ 2¡äÁ€Öªf°V%‹c`{ÌQôë-2?†È *K‘±8Ê]µï¬’9Êg)LGÑ{ ƒ÷x™/CfŽ*ôŒòÚžl™U3Gy ³ååoû2l&ÎuZ9{gŽ:­œ½ó•`œ-Ž: £‰4G]g¿½‰4C]VÒÀ^ºAeBÉo»\G<ôDY1N×5,' Wô@ñ›P—*r—"ëm`ÇÍQ×r¯7êæ¨ëx¼7êf( ì@(x¿WBÉõ¢%šµ“)80 oPT–J±T&”üR.—VàÜÚ èÃà¯]7°²%gWàöÚ ’"™£"=c "·îé–_·|tî:”¢åãïZ>þ®å£†]Õò‘>™8ø2’h£OfȲ4§« 3¼;ðux2‚nèß³rº`MÜtåwMW~×tåwMW~×tå¹éSV^Õt•>ÕtŒ>ÓtŒ>Ót•.6]Ì„×~ªŒÑ ’”ƒ¡®ØÈV0 á3ÎÇÝàœ"h€X ŠÊ* êôOú  ØMèÜà Î=(=HqGY˜(⎠0kGiï-ýQgF [‚¡mF“´MFž5®ßŠß„ ÃWÉìp•â*þêë˜â€Ÿ¶ÂI¶DߣG¬–\³!ýI¿»Éølr¯À6yÐψ0 6L‹2f=QŸ¿Ô'cÈÂQ×iý…QŽPn€ „’Ǩ+¸ ØÑòÈÉ=µÒ‹ìäåŠ!” è±ŠüXž<ýÀS‘2¬€\+ ueX¹V8êL·¯4¨r•uO¼rGY˜……£.ùµÏÂÒ <¡ü¤”, *_õºçga¨+”jÔ  ¡ä7t¥hÉZ8ê²Éó›<Êêò»pTpR~†ºR¼€d/umäûd/uÍÍ~ P¾´8cHEÙܲ€ü0 ÊIùa8Š}ÉZ¥GÅèù+è/ˆºŽè/„zŸ¿\Ñè/ˆ²F\Fi½³ñð’GôÎÆãZ÷6€.nM 2zöá”"ƒÉ }ð0~“˪$öÇ~%Fùî9K‰êM(ʈ7ÆQY´_ºZ»?RL$[îüL§¿PíÛR1Ø)í„ éûÒ8ÂXöûEðô'Åa:͵ÞYÅ´,ŒÞtûƒîŸïþXÇÏw=¨£×ñC§¿¾®ã‡>®ã °ã/+*â%ìa¥,Ý$QÒ+ù´2ZÜV刢¡K(€  —, ƒRiNGqË‘¾+>>ûp¤`s§OLŒÞOùq¢¨ô©3ÌJïÓ )Î0) £lžÖjdïÇ“Ý$ tÝJ‡»ÑåÈζî~=;2=è²òM¿¿ÉÕƒé/ˆ*EJÇPWÐJ¾’£.!: ¼Xçeìì¹?§Oœû7tõ¹?¦aLËRúUFŸûfˆN}õÍ„w?p³g«œ>q¶Úп?[mè ¦ ¯Ä#zÆÑˆ ‚;íñÛC‡ËýoÆŽÓ'là8}®ҧlà8]°#làë<ãMg×töwMg×tö¹éì éÜïšÎý®éÜïšÎý®éÜsÓ¹AÓÅß5]ü]ÓÅß5]ü]ÓÅ禋¸éâuìFA”KR"YŽ:ÃU#³±+îõ=¢5§Sh˜ „&¤_gÒ! vˆ#wû#X¶PùÄ¢n •¿"r?Ñí€î0Ý2ºÐýóÝý€0=2zè—#YXœ¡òêÏCì,¥B¾ "Ýbºet¡¯<Ç ã1G]vÀa`LñÏA$t†*´Ñ/ƒþ „E¯( †¢sÔeIAÔu ÖGRg(óÖmŽHêFz)e]î¶} vN¿Ž„ã N#åo™œ9ê’Eã ®ÅZQ—Ôidߟ÷4¨B¨"¢®Hò ¦ˆ›ÏPWè|DŸ£ÜuLÙ¥çæ¨(¦çnPPâˆõÙÁÍ õ•.ž€Þý}Òš?¨ó¯ûk, Ë໓ak¶R®quœ¡®\ã ëxƒr„r2*RsùÑj¬+êJšÒ'4(K(+¢®¼ç :C] @*Žª‰Îå ”³doਠ&MoPŽPrÛ§ë$KÌ¡IDÏר—§Át/ÒÓE—_vö5û:@B™ÊI¹à9ê²¾Žg…e³ü”3U%ªr ¿ ḛ̂rmüqeÑHò`PòobúW:<ñý4D‘‘€hWU¶ÈŸ½S>ñûg§ßÀk ü%²gY¥÷7iêh©ŽVª£ÔÑý®ŽŽêèu TÇ Õ1êWÇHuŒr¯ù¨O ÃPöÚ2ËÊ:=L¤2y™ä— •Pµ*E¦_ÃU8–dwÍ:ôDùsÁÐ.Ïk¥C‰õó$dx÷ì¼Ü (èq=Þw‘¿{’ðü$að$ÔÝ ^éˆ@b"†ºr,EPú"Ñ\²¡ÛÊÊ ªb¥²8êŠ|5ð£ÂrHŒãoÜÇú÷îc•N¡:'Û£äG{”†¤GÌÏtú ÖñZÏõy«®~S‚ü™qz <¡ü *A*«A%B‰MOY´@>­UUd”#” ®¶Ï´õ¥à²’ýýPì&æºàºþ‚¨+¶O×*æ2Ü¢¿0êœMé/e e%T¦;Ê/Å^Ö¡ôD•K`“¶Ì#ãôJ§¿ÐMy$'!Ÿ=A0]LøTéN¦__MDI-ŸmëçI®¿êÊë2¼qÔx“þB¨+H ÇQ†Pf€º‚~õâ8ê<~莲?t‰—)ý…Q§ BAT¡²Ê ¬Ëi†þ¨B(¹ÛbQGX{Ê•wB ÝG½ôDÑP–äµbÉïãžá⇠#ú¾ù½çeœ {#'8\œM—6Éc9+Ÿc]’‡‹x¶|´|JÏ• ÔInyw5Ý å³y|öŸÏ^c]ß»9—r®ï|L=s\|ïE~q×H[/®È_\9[¾È_œ—FË5ÖÙÁÒèòƒEÏ~ΰr>ñ’bwtûÊgËÛÁòàÊÖ‡î~ΰrB¿’g£g¿*oÀ.vZ{öy;˜ß¯tÛp†ÍË8#÷Fy¸ÑÝíuwùƒµò}MRv0A_™»á{?+9¹÷F)½Ñ$•Ïg|°WJo¸¶9_\‘ßû•ëÜÝŸÓ„œ|£$à€¼_ÆyÂ7Ê>è6rñÒ†£ÊÇc´qƒ¥Ñ•Oöù£òrÊñwtÿJ9,ã\äe ‡ëù¼Œ“”o”ç=»;ï>˜ßý`~wf‘2ƒWº¼(µvgß(q6iÓ2N¾QFm¸4:_\5]~šßå$ã…ç‡ô³åó éò éÜ2NK¾QfoÐtË+.RÆp¢—õi¸ðƒÑæÊgØ‹>º»¼?¿w9#ãF9ÃÑ'su›ÁòÀ‹Ëƒ÷¹Œóo”e~°×³Ë³Ìå ç¸ãîr’žÒÃ%±[ÆÊ7ÊKW•=èƒ%±]Æ©Ë7JX>˜ßåhe2´¼œ|s£瀞Ïeaˆf@—¿w6]T> f™£ÓÊéÑ7r}ƒw?¾w9oúF~ƒTTþ2„/..ãLëÙ^œœ‚}#+BXù¼Œs³o”‘}Ðòq°—‰ƒ±îœãâ`¬»bÚ¡¥Ñyø ‡½Û(¹;ª|¶Ë8ÿûFùÜá¹YƉá7ÊúŽèö¢Ë_\¬çÏ#¯4XÏ'yAnâI,È“—‡‹óä$ ™³ÜçÝÙió Ï_ Ña§=Æy9+ýF¹èá {ôy9]ýFÙÜ!=.ã<öyEÁÕŧÓÜofpRjg'¥F>xÙû|<èòÁ‹‘ON–W9ï.Ÿœ˜ÑÚ^œì )ß=Ü„†“îdºâ{dz_H´{‚`z~8= ¢;ù‹sḻ“¿82‚'äÇÝÝ òŸó¨éÒ¾ Í ¥¡7ºôø2™Ñ­D—’]¤ôöD—çwŽ/NNo¿QR{ØmÂ2Î{¿Q¶{Y—!¦ËwOçÝåö#rŠgÔÝÛ]>d^íIwº<¿GÒÀvÐFŽü»Ó}’?Ø£×yQåßéa0EÝÆ‡AÓYÆ5ñ¤šnðÁš³å¬ò@½^•4]HÛ‚`ºïÒñ샭 VnºOzÐóƒJHwƒ#¯c† nÐt>?,È éÁ=M‘aÐçÃ@ÒÊÇPÒ€.ž]\6A=šðôÁ^H÷ò.²-eÜ$#ê°×âä‚@ºe¬€Ò“–F¦/ô$hR©Ò“@÷â‚ü<» ¤§ô4\$Y‹4Ù{–Ø÷qH>`?4)‚@ºhs²pܽÈ6'¦8û´›(NžãJ˜*ÃE‘?Ø·%‘¸?Néî©å­œJs§Ë"r<Î* ‚èõßÅãîõŸbèËMׇÙçôü4EÚÁFÌ$lsœUÚ„½ÿ&k‘ëùìòm+ r‚@º·OÏîä³ ëò“¤ELžÝïÃE<éƒg/òhsœѽü½‡×gŽ#¦‡‡ó:;X[?xqÇ’ØúÁ‹äù•ØäVÖãöÛçƒ>øâFz\Š Ì‚ÐÐ݃.CLʈèqÖËö6çé•S|½éùþjºÁ‹Ëæ±òƒ¡Ògù´°œï=šNÞAçó‹óepwI“²¯ìI—§‰00Ç=µ>:hC¶…v IÙ&eÜ4)$³ ó*çd³ ŠHŠæ¸s¤•XÞtù¬2\t3 ‹•ÏÇáA =ÉSäÕt²„mƒüŹõ¢Ë-¼ ?´H‚@ºl lÓI—÷ßòƒJH—ÕŽ>3lužK£wÏòþýÐe¬ìQ±ù6†»H‚`ºyØѳ$¨™—={Ïk§Ë+«rÎqy°²*ë“¡A Ý>™&Ò³øÉÄs]WrÐåIê8d&¤Z¯Ê^\‘µHŸÏÊËZ¤“>.Ö œ>ÈÇ®ëÜÝ€º,&­½ßnK/ï3 ¸‹Ìýt±Ûì+»óîvPy'~2§U§ìãÜ*›¨6l¢æŒÊ¡ˆÒå#n{VÞÈ+jg3ì1TºÛ¹ÔÃ#¯|ÒÍ€n¶Átq°òÇ– îŸVnà3²ÿ&ßý8î#¦ç‡ÝA =ÈÓ„;éaÐò²¸àŽ%1A0]>=8„T7púØ“—Fî|qaÐt²:pîa é²ÍÉyäå^GvIiUyÞ= ºMY¥ïÝæ“^Vù{—™ý>Mœï]>d¦DªýÝÝëXÓ:;ë¬{’ï p§ΨóñÉØÁg¶ëE7º<Úš”Sª¸¦=›NVÀ)¡lÝ×çüáô°>x&Óe[â󓱃áÂÑsÁK#‚`úÓ™A ]¶î‹ç`eã ò’Å 9yÓ‹D7ñ|ö4èó’úï_å\ÉÙÜ7Êá>çí`Yhö´‡7Èÿ¾Qrwø½Ë9ÿûæ§FáÐ"‰á7Jç÷“.»¹-±?'©-±“m‰÷:.ãTò›í ÏOf°ƒ¦Ìò²Ø ùüF)ç!½,ã¬ô墇u\Æéê7JRVÔn=ébû²×ËÖûƒ÷¥µôtΰi°IFžã¢9éò÷žäƒÖð:V•I>h¥˜`èîá¼»|jDÁ¡Ôé'sÚ]£;y°²‡M)A ]:!ϯèâA—OÈ)!<úâŽæŒ'º<\œòý 5üFÑ;å}Ü ·ûDS¥ôrå¢Ë•÷âI©{­GËËIß7ÊåÍ6ì2ο…ô9ÒÒÄo”^¶Þäß‚ìJ|mÀ‰å7ʉÜNϘ6½Ò߀žC§A†ð’[÷•·/wÒÅü×%x~¢ÛÝ=ÓG•ÏôˆéQ\ï½þøÞå$Á¥†ïýèuröàR£Å‰9éböàRËVƒìÁ[]‰Í눞®Ä”XVÿÙƒ7J ŒÆ:Ëèv@w#)s=x£ÔÀèîžÝÝèø°1ŸÓ„œ=x£œÁ°ÛœtÙ –rÃ9î Ëi…7Ê ›®,ã´Â%•w‡é ßðòÈúxqsJ? ·À]^ymÏu]¬mJ|r%ä4Þ¢§ôrx$;Þ(ű¼dAÞ(÷±ìF=H¼QRdpB~ž”ò&o”F”2Ë8oòÅØ}æ£ÐABåÒ(£-ð!i 2-oÑ¢¤Ç}ƒÌ[è°g˜ÓAnæâËámI›7Šf -Ì2Îæ¼Qg(mïÝ ú¼—›.cÝ ÿóFYŸáXg—qbèÒAƒt<¶ÀƒŒÑ剖>`*é†nG~‘0•tC÷ÃO¥’&ú™'nÀó2N%½QihŽ{>»“_\œ”†RƒäÓ¥œ–=VY©7ÊElJÏ÷.§«Þ(Iµ,ãòXo”½Z6U$¸Þ(?X˜™c d¨Þ(/µ|vSW_ôÅ˘hºz£„Õ²{Ý §õF™¬åÀƒƒd×¥¸–ôAìr_ÃMèQy9=öFI±å8fƒ¼ÙeË–™ µ7J£ ½óì2δ½Q~mðÉœ}~‚{£ÄÛÐ_æÓç¹¹7ÊÈ=è6rÒîRuËÖ}ƒlÞåð–—…ƒ4ß%÷–Ïmù¿7Jî-Ôƒüß%÷bb:✠òo”ÜÐía¶1Èÿ½QÖo8\œôÁp‘e¹s#6ȾQžpøÁžÏ.¯¬’èzÀž]¶«¤ŒËP—9zœc|£¼Ì²5ï ùøF)ÇÑ8Èy0+ùE/²‡Z9² ²‡o” ‡§Ò {øF9ÃÁA«?¬¼`ZñJ7â™Õ!i ò‚o” u¦£×Á„á•.ùþ»zw7¸;VÌú*‡e#L^éRP&ÿZ¯»Gùîòý:â ’|o”¥[6˜$ùÞ²lÍ{ùM òzoydÍ{ì y½·,šãî½æ°x$üÞ(Í·¬Ã2o”‹»ßŒØÓ'tÊ{Ër`as¦)dïÞ(·ö¾ßk0M¸c+4Hy½QÎjYH…¹°+Ý?‰ ²\o”Ûê2i§¿Þ(éµ¼ƒäÅÞ(¶lñ2H˜½QšlÙ÷I{£üÙr°ŽAŠíkÃEiY¤ÜÛ•>0”²Ë8÷öF·¡™Öç“$åÞŠ*Äž#í [÷F9ºá9íI—m(y7.Ì2Îï½QVï'º•è¢s_ Ê˽ÎÊÆÀg¼‹Aªðò#BúÑëä$àeøëºpX÷ ’€o”áŒuù85$ßÊ fãi42ȾQNp9ÎÉ møFÉÂá)ñA—ó‰o”/žœt9n!¥—·Bƒ äå‡nÔGÓÉ©É7JH.‡Ëä,ß(S9ìudzËÉÌ7JaŽNNìùì²·e—Ã×ÒŸo”£vðÉÈyÑ7JÌ,«ƒ„é¥o–=™Ô7Ê댦ÈÃpbb}£üé¨Û«‹AŠõ«£wÈ:ƒÜëe\—Su ’²o”UýN·æUÎn#'eß(—:òÂ>çw9ÝúF¹`¡õþqw9‘ú¥O‡ ÞÍ=ʰþCyÕEoQêõÊ«Žüe>†‘£Ôë?”pŽugåÅ,f?”‰žœœtQþ¡íâz~”Åý‡r·‹kÚQz÷Ÿúéø0ÊûþCÙÞÅ­£„ð?NÎÜgÿ¸QF÷Êãèëë¼»˜êý‡ò¸Ã¸ÇÝåTï?”¡¬.ÊÇÎ 'q'ºYåúhy9 ûå^G§ÄŸ5í(=û—Õ½òq§gÿ¡ÜëâIé(=û%eG/c¡QÞöÊÖŽä!,ã„î?”­ÚY¥eœÐý‡Ò¸Cúyw1Óû·ÿ—Uç(üå½w·gååÜð?”“½;î{'x½èY®¼-Ïô"ÓåpÇfd”Qý‡ò÷ã|xVN‰þC Ë»ÊÇ}š¸èò{¿r‰‹ô(Ýø%ï+ŸÉQ¾ðÊŽ>Ør|qr"ñÊ.î&F‰Ä(K¸èµ1J$þCéÃE%t”aü‡òŠ£»dœz¼ÒÒUŒRÿPÂq¸ ?:­œ“ü‡2‘C{›³ò¢¥Ó¥(-GYÌü(×9TÊÁ¸~(­¸hü?Ê<þCÙ¿E+îQJòÊ.&|å*ÿ¡äáȹ\tñÙ)Åx_y{瑲ÿçÿú¯£ŒýsþŸÿøç?ÿ÷¿þ“Êe}ÕøÂvŸþ:·Ý¢þà›Y tnjøÝù~ȈtýÙrzng@΃OùõÝLûù÷\-õþÛ,Bƒ¤—Ðé%Ð}cÄ6è±mOÜN¤w òoÿú¿õŸÿZþíçïæºôcù4ßÿŸ”}ÝËÚú”ö˧~MY=Êíƒ*˪ÊjQñ,*Ë©ÊjPοVT–W•uGís*+ªÊjPv_h ²¢ª^7ÔÞ³J_–¹Ç…eÝPñt ”e4õº¡lñ/T¯û9­PGí»öWŠ ¬ûé.ë†Ú·Ñ/T–W•ÅQƇ— ¨¬¨*‹£l‰ûtÊrªglPïö* uqÔpY¾u°Ëû²•eTe5(·†ê_ÞªÊâ(»?cv¨,Õ{lP6™}‚Ê ª²ZT õ/¯ê÷wÔ1¹ÜË ªglQὩeÅ[: \V‹²~_ò¢²‚ª¬e÷~ïQYªo¨Eí8Ÿ1«ÊÊÍ·]„²Tï±A…”_••TßPƒÚ·/‹¾í¤ú†ZT(áËR÷ *®{½Ð{Lª÷Ø öÞöÊh¼Oª9­EY÷²°,Õ{lP%‡—GãWV½Ç³}9T¯¬j¯µo^•UTã}‹z× }ÛEÕ¿n(ࠨƯõþ†ê_EÕ'ZTp ×K5N4(³FØ'¬jíÛ¢ì>®°¬¬*+7ÇI®M¬j-×£2˜‡º,¸¬å\G[Te5¨½{Ù„ÊŠª²Ú5¹ÁïѪÚþ†²åË*ª²Ê}¾m«Z3µ¨}%ü àÛ¶YÕö-ª¬pÍdUcÎ µ_hc‹ªÝPûbìùܪsn¨°Â¶wª½Õ ü+ ²Œ¦ÝPï£f0:ÕÚ÷†òûÜÊòFóo(“^+,˵‘9„²ZT‚ë/o¢ª^-ÊÂ>áUë¯eýþ=fT–U•Õ¢Rz9T–W•Õ¢üúBí•‚ª¬åcDã—W­ån¨˜Ê+¡²²ª,ŽJ«ëBŸUmß rñð ÆgUÛçÛ8a_°^ª¶¿¡ÜË ¾ªW[Ô{]`Yªz5(³ ßvQõ‰•ÞÑšPYIUVjæ´½{T–ª5(·¾MòPYEUViÏ¿`ŸèÒüÀ²n¨}®••Te¥V'L¸^YUV³ÆŒéå *«¨ÊjÎøÜ>§¡²¬æÛnQÆ[¸Æì¶ eµ(S^¨í£f̊æ¡UÏØ LÜû=*+iƉÊZx>²ª¬å>Žªg¼¡öaÍ1zUYå£{ƒÊ ª²8*Z¬wDÕ9S‹2i£Q{©öÛ7”±pUã}‹rûü˜Á7ÔÅ5„eÝPû *˨Ê2·¾š*˪ʲ·=Ò’Jkº¡ŒÃõRíï¨Ñ¹\Ríùn¨÷YZ@e©ž±Eíã*š‡²ê{¼¡öaß§i¯eÓ¾ôýëãFó¸ïhQæí¸ËÒ¬sn¨l^¾o¯})¥xÆ;Êyôm•sGís-ЇŒêLôŽÚ÷C@¯5ªsÌ;Êdt&jTçLw”ÏHOÛQNUVƒÚÇh°&7ÖÇçþuCÙu+c5šÎå÷÷PYYUV¾¥%P–ÓŒwÔþ 3wãTÏØ¢LÚ×… ¯º”mß¡ Øo(«*Ëò¢À~hGi¾¡ÊÂõ½qšõ× õÖzFÍùŽzŸ=‚1ÇiÎån(¿÷UøŒEU¯å"Ü#¬¨žËêPõ ¯'ZTÂë/ã5gÛw”Û÷ •Ue5úÐ>?&T/Ÿ4eµ¨÷ÜÚ+¨Ú¾E™ÀúÞtaÇ…²Z{“½S >¡sZ”Ë í(UÛ7¨-:CÞQª¶oPñÝö𳪬Üìa ­QçÜQ> õ½ [ŸÊ$ ç!ÕÞýŽÚ÷@5Á&UYé¶ŽN••Ue5¨}ïQ½œ¦í悔S€>¼ª^-Ê:óBϨúo(›áX’ª¬•ì÷¡¨ÞcƒÚ7¹¯¾íh4cô å÷ý# £ÆÎêŽ éeÀz5…}Î µ¿Š—ãj²QSÖÜ ”åœbýuCík€µe%UY‰¯Wa{ù ©W‹2y}¡²4ö&=Ê›-“5ºûõ>Û¨¬¬*ëöm£s€}ìÕÌ7”1p-W4ö˜jßô¾Zœf=qCy‹ŸQ5æÜQÞ>±ßNÑ^w”Ù×¾”¥9ëèP6¼PY¤e€ ¸UÙ¥õ¨`Y^UV³ç[ :«µª3…µw ðU¶Q*X ±î(U½ZÔÛ4 ”åœbÍtGh_hæ¼ðŽz/'(K£‹v¨ˆÎvTT•o¾¼àœÉºâ4eµ¨}È:ò™"쩬æG«ÚóÝQûºÐ~ïU}â†z« O¨ö|…Æ •ýDÚ{*˪Êâ(ÿö @Ϩïo(óÖ2QÛ'Õ{lQûÚ7Ãz©Ú¾E½m£2*KÕ'ZÔ>ÚÊRÍ7Ô^VAõʪ¶ÏwíÄ ²Šª^wT~¡o[cС"Ú×î߬æ[”Íð¼Ðªìî(»"›«²¸¡ö©äA_ [E€¾56h|Xn¨}8Cg;ʨÊ27œ¹Û W[ÔÛç'‚õDÐØFõ(“Q{©Æ‰*àöŠF±ç»£¬Ekr5>RÊ™ª—æÜ¤CY¾í¨Zçt¨Ÿ1¨êÕ¢ŒàÜÄv.Ѹ¬3²Ÿ8Ò‹=—u³ÿrȆrGUYæ6FGð³Ææ¡C%d›n³j}C…Ù¯Ú¢Wo¨·Ý#˜‡ŠFW¸£Ì;r-(+k¾í`½Tý«E9ýÀlQõ‰W<®–¢jûeÖ—ë×÷NåC|G}iP–Q•բ슴&·jÎsî¨wP[Ë*¥(ÊjPù¹Õªžñ†rè{tªó‰;ʼ#…²4¶éÊ µœ3FqÆwG½ƒ»xP–fŸvGåŒÖNå«{G½cL%T–Q•en¾Hàœ|GYUYí7dÐ¹ÉŽŠª²n¨öNå|GÅÙˆì(U½n¨}ƒžQ£ÜQû®Ø 9Tï±E½ýÊÑ{ ª÷xCYd¿êT>Äw”uHGÞQª¶oQï%“Ce%UYé~.‡êUï±EY¨oIÄŸËjQûÆ£¾ZVÍøÕ¢öõ„A}µ¨Úë†zßõeYÕxGí˜AeUY÷3+ú½U-ê}†¼Â²Œª,sÓaз­òÁ»£ò>¬&T–S•ÕœY½õÇ€Êòª²nû´ŒÆhTmߢ¢A¶°;JÕö ÊxôZgƒª½î(à3FUY7”_QYQõŒ7TB¶ÖÎ&Õ÷xG¡sò¥úï(¸f²YÕ'î(ÜW5{…;Êtfå¬j,¼£²³zÇjU”uCèÓïTç¾wÔÛOÌC^ã;G½çmÊRÕë†ÊÈÕ©ÎW嘆­5è÷ªs¦;êm÷˜PY ;ÑÊOá@YUY¶ªÎTP•ê¬P¬ƒÕ<ã á{üdÝx~ÆeŠE뉤Ú#÷(4F'-Y‡2Èß%¦Ó¡ÒkwTT•o}õ¯¤£ï(÷ÛI£ét¨Œl­÷õž¦¬åÐ{ÌÉ®å±ßßQéo”1«¢¬õ6Lƒeµ1¥²8êí‹Ú>U{µ¨âà¼5úö e÷ýceUY·~üX÷u»f¼¿£öM ø†ŠQ•uCA? WTíuCí=øyU¬§•Ð{ô¦(άî(“ h¯Ãᱬe±}¡·A1§ÝP6yt†¼£Š¦^ ʾýÓ¬P–U•eë(^=£Æ¶àŽÚwC¨OX=Ó eJDþî;*¨Êjüð÷¾ê3*+kÚ«A ýüqŒñTV‹ro;…„Ê*ª²ÚxÐ/s߯jʺ£šk½Ê¢Cy´^õ^³w¿£ŒAç¾^åûСއÈ}YÁiú×X3ù 97éPÑ^¥ow(‹l¶|ÔØòßQソT¾ÍwÔÞô–åTe¹»Ú+%UY7T†ßPÖèî ÷‰¬9ÏéP í·ý[‰}ŒtG½ÏåÀÜQ4þ¢l1vTV••oqzFM<˜;ÊÀ½ûŽRÕ«EùÙl£± ¼£lBç˜ÁhΆÊômì=‘,뎂ñ wTR•Õ ÞZ¦Åe=öÕ…ÎsÂgóØ^7”}§½eEUYw”)¨í5zÇ<Ò‡‚ÓŒÑwÔ[ï ,Î×£p½41y;”}ÊÒŒ…wÔ¾{÷à5:r‡ÊH3 *Ûáåïü'-‰¢¬* ýÐŽŠª²â=fsTñ™n¨wpô=Íà†zÇ.6[A»¨CYt–>¯Û>–uCüŒïVuÏeÝPœÁ„ç«= ùÃ(«*Ë6ee¡,§*Ëñö>±*ªÊŠOsZÔì­:”Cö&!:UY-j€Ð{üD%z|=Ê¡gÔĸ£,<¿ªØE Æ@É*Î`:”Cñ”U•eùþìE”S•åø¸ öîÊ«Êò¼^hŒþ ‚ª¬Ðh™¨^ŸŸ;jŸÍ|È«W¼Ç;*ÀþõAYUY͸ üÓBÖì· èîAe {GYhó°£²ª¬&¦RNpî(ªõê åV´ßE£•ßQï}Gÿ=FU~˜;ª@ûè¸jìå:YT–Sœ3u(¸<2¤?×+Þ÷ÛÖ¡²‚ª¬ãO|üyË(`kŒuÏíÕ£P{%•h‡*èÜ$YŸÎeàz"9Í9Àe-²7ÙQNU–»Ù¥¤ä4ýëŽrpŸ–œÆ.íŽzOi ^>›ç1§Cd×±£¬ª¬•QÜ‚5þC ú餤Ñ2{”ûí”4¹Ù6ª—1ª²Ìm\ÚÜa@õ\V¸ÕK£‹v(—,¥¢jûÊ &eÍ^ @ „åUeÝã肽{ʪ±ð†zkM•eTeµ}¢À>‘5ëè;êí“Ú^ãßÑ£ X“§œUÏØ¢œEñ¿v”ê=¶¨}QÛ—U1?ÞPïy´}Q=czm^5ö= ù»çÏaçÓ3ö(䳘?Q‰ÌsY jï_¸,«ª× …bœåÏîWQ¯ Ùûª× …¾íüɼ§¨× …l²Ñ¬™î(í³Õœmw(‹t«¬òkº£Þc¡CeUYw]°–Ë*_¤•ŸtvšõD‡ŠHGΟhÎý«C!û¯¬ÊIÕ¡,ZGgTõº£`_uª¾zCh?‘½ÆæáŽr‰Æ2eÝPoÉС²Œª¬»¯Øí(«*ëK Ä9ÍA#¨CÁq9jÎs:”EšÎaDýXV‡B6ó¹hÖ«7ÔÞvpî(_Ý;Êe'0²(ÊjrDû}Ñøêv(ëÁò>,)Æèêÿ –UTeµ65Ù—Õ©Êjcííì}˪ïo(ã ÿÐŽ²ª²šxi9£˜$Å|B=•uC|ðŠ*vd‡‚~sÅhìåzT~™åÒ<—ÅQ{-Ѹz ¬ª¬j3¿«¨O_²à¬£X­u‡ÊÈ6ª|¼$Û«CÁ>á4{ä…öÛ;ʩʺÏèÛV壸£Þ9ÆA_ýœl=¶×s¯±½»£rDvCÅkò+ÜQû¼ öî%h|bï(œ£·£*«EÅŒrý• ‰ÛyGíã˜ÓÊÇ‚ýñ=ÞQ0§ñ>‰ªž±EôÇ5örwT.h_»£¶> žc–XTõjPfÅsGÔø#ßPÆ9t6´£Šª¬•W´ï(Ÿ dOö_Ê s¦’œBwïP0&IIªõÄ eaÜÎ’ß²ÈÓÞªG!›‡’5{«;ÊÁüÛ¥8…ÆÚ£À^áÇ­îÙÖ§GYçá ª²”s ßïŽRäF(0?¾QQUV¼å1èíÜw”Ân¨CíëèÞ6êç§êé=v¨½¹`YŠØ¤w”[…z)âlÝQvÍ ÷ùåTe¹Çør;JqnÒ¡,Ê[³£âúèÛÜ£87ùÙÇ%ó8Nô(´z£Šª¬;êÚëãÌóØ¿:”é×L?Þ)ÎÉ{TAcŽ×è¢=*ƒ}íTe…Û÷¸‚zy…½\B6[o”W•u ßÇ–ÙQéyêQä;y£¢ª¬ʼ@Yš³4€>R;Ê>ï:”Y?ß•ÏxGY4æøO4gEY-ʽû×Ä|îQøw¼QNS¯; ö‰à¼ª¬û:Ç‚¾úquy.뎶éoTP•u×tVTVPõÕ»_&îš5Àµ÷Õ>õUTe•[Yô¯¨ˆ Û¡|zEÐ^ÑhÆÂÊ¢ýÐåUeù{®п¢"Öf‡räwßQ ;ä;*f ûWLš>qGy¯|GeMŸhQ& ßÀŸß¦ÏßÐe@ÊŸÃÁ멬€OÿO0 ˜…bñ¼QEUÖýŒ¯×E‚ýäÂ|*«G½maÿñó÷¿ýß¿ýõ/ÿ ÚÿñDyLP-1.10.4/Data/Netlib/depcomp0000755000175200017520000003710011405216053014514 0ustar coincoin#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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 outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac 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" # 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 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. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## 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). ## - 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 -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## 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. tr ' ' ' ' < "$tmpdepfile" | ## 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. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -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 -eq 0; then : else 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 ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; 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. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else 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" ;; 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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in 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.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #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 $1 != '--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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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 $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac 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. -*|$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" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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 $1 != '--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, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; 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-end: "$" # End: DyLP-1.10.4/Data/Netlib/sc50b.mps.gz0000644000175200017520000000127510430174061015216 0ustar coincoin‹¡K®9sc50b.mps¥—]nÛ0„ß ø¼@íIéÑM ´@ìqŠöþ'©ì&掳\©¨ž²2?í³ãXçÃé˜î×å)_÷»×—_—ý.S:~ÿ8->§´Ü—‹ b¨d©Ž÷J¡ÊP¨*Ë6aég±á¬,r 4V×°7ˆIÃ9²arͲMxÜ‚sdÖìZ Mh ÎÁ~ytOšabr÷›z^?âìîp pq5Ú4D.²®ã?œ×ñèä‹&ˆI0ç —ÒÏ"W÷Y¶‰h?‹ —ÜÉ¢Ô@ãäÚ`í• & —ȆÙ5 šÐ\³dt-…&¼×`¿Bî©@“ LÂî~SÏëG\ÜüÈu5Ú4D.J^Ç#Ê*ž|uÃ1 æ¼áZûY”É}–m¢¹ŸÅ†kÁ,ªÙ=më¢iÐÑ=mÀƒ9WrOð`‚•]€¬âjL½~ÄÕÕxðËN³«F0TÀË¿áiÄDëÿ5©íE5h2¹i€9ŸûsÞphr›ó×ï÷÷âóåívûó›©Œ£ÿ"qýÀÇí?pÀí·I·‡ùwÕñüíðvØïþ‹Ç`¯DyLP-1.10.4/Data/Netlib/ltmain.sh0000755000175200017520000057753011405216053015002 0ustar coincoin# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 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 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # 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. basename="s,^.*/,,g" # 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" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" # 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 # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # 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 "$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" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # 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. func_win32_libid () { 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 if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $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_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 () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done 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 "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # 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. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # 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 $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi 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 my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do 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 have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2005 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --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 $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # 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= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # 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= 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) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$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,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$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. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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 $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) 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 "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 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 $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "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." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </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." $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 $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </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." $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 $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built fi 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 case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$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 dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= 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 compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes 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 $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" 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*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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*) # 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 deplibs="$deplibs -framework System" 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 deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -pg pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ -t[45]*|-txscale*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 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*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # 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 ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" 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. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'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\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; 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 test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$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 test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$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 case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; 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 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 "$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) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; 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 (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac 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 ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." 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 -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; 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 newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` 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 used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi 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. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # 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 case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$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 $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE 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. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$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 $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$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 notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi 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 newlib_search_path="$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*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test 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 test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$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 -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 *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if 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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; 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*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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 "$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 module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; 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 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; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$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 $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$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:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; 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:"*) ;; *) finalize_shlibpath="$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 [\\/]*) add_dir="$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*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$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" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared 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 "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs 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 "*) ;; *) lib_search_path="$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 "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$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 tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" 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 if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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="$2" number_minor="$3" number_revision="$4" # # 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 darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; 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]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE 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 major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` 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 iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` 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 iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; 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 $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$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) ;; $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 removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` dependency_libs=`$echo "$dependency_libs " | ${SED} -e "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 temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 "*) ;; *) dlfiles="$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 "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-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 deplibs="$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. $rm conftest.c cat > conftest.c </dev/null` 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$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 newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e '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 "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $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 fi ;; 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 is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; 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 # 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$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 if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$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 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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$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" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$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 "$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 realname="$2" shift; 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 linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "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"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $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:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # 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 output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$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. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 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~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "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" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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\" 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 # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(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 "$mode" = relink; then $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 $show "${rm}r $gentop" $run ${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 $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run 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 "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $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 wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${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" # $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" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$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 "*) ;; *) finalize_rpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$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 "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # 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/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= 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*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; 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 "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" 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 rpath="$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 rpath="$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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? 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" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e '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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` 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 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #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 # 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 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ 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; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); 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 ("getcwd failed"); 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 ("getcwd failed"); 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 * 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; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # 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 variable: 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 echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ 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 >> $output "\ # 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 $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE 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 $EXIT_FAILURE fi fi\ " chmod +x $output fi 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" 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" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$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 # 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 $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_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 for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$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= 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 save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; 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 "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then 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) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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' # Libraries that this one depends upon. dependency_libs='$dependency_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 fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # 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. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; 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. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$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 "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. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi 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 $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run 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 if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run 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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` 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 file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "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) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $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" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 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 -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # 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 ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" 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) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; 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 (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$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 rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [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 --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information 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. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [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: $modename [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 -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking 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: $modename [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: $modename [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: $modename [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 rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [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 -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 -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] 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: $modename [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." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # 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 disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: DyLP-1.10.4/Data/Netlib/ship12l.mps.gz0000644000175200017520000021720610430174061015567 0ustar coincoin‹ãK®9ship12l.mps¤ýá’æ:¬þŸˆy‡~U@R?½ÏDxì {vvßÿIV¬sn¥ÎÎDU]ÿ¹uÝ8ùQBB$3Aþ·ÿôþç_¿ÿçþïÿÇÿeí¿þ¯ÿËÿøïÿßÿù¿þ/¿þÛ¯_ÿÛÿŸÿ÷ý¿ý—_¿þÇþ/ÿçÿñßîÿý¿þó¿ÿ§ÿß?ÿ÷ÿþÿüßÿ÷õ¿üßÿóüûÓµÇ_¾ÿ—Ïxü•ÙÇ_sÿMÿ•Ï¿þý¯üóÿã·üûW{üåûh>þ+ŸÿÏÿJü5Íý9üÇoù¿ÿǺ±?Ð?ÿj¿üñ×3.õÇ_ãñ×Üþj¼öÀk¼öÀk¼öÀk¼öÀóž?ðüç<àùÏxþÀ‹^<ðâ¼xàÅ/xñÀË^>ðò—¼|àå/xùÀë¼þÀë¼þÀë¼þÀë¼þÀ¼ñÀ¼ñÀ¼ñÀ¼ñÀ›¼ùÀ›¼ùÀ›¼ùÀ›¼ùÀ»x×ïzà]¼ëw=ð®ÞµãÙ¹ãݵÇ_þø+åã¯þøk<þÚñõÅõÅõÅõÅõÅõÅõÅõÅõÅõÅõÅõÅõÅõÅõÅþ©/wmýÿ§ÿúoùüýGÛÿðýØÿÈý¾ÿ1ö?8×ö‡ûû/°ýØþ lÿ¶ÿÛí¿Àö_`û/hû/hû/hû/hû/hû/hû/hû/hû/hû/hû/ðýøþ |ÿ¾ÿßï¿À÷_àû/ðýøþ bÿ±ÿ‚ØAì¿ ö_û/ˆýÄþ bÿ±ÿ‚ÜAî¿ ÷_û/Èýäþ rÿ¹ÿ‚ÜAî¿ ï¿ ï¿ ï¿ ï¿ ï¿ ï¿ ï¿ ï¿ ï¿ ï¿`ì¿`ì¿`ì¿`ì¿`ì¿`ì¿`ì¿`ì¿`ì¿`ì¿`î¿`î¿`î¿`î¿`î¿`î¿`n¿ íÕ¥íÕ¥íÕ¥íÕ¥íÕ¥ÿÚØÿ˜ûÛxÚ^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]Ú^]|¯.¾Wß«‹ïÕÅ÷êâçã¿6ö?æþÇ6ß«‹ïÕÅ÷êâ{uñ½ºø^]|¯.¾Wß«‹ïÕÅ÷êâ{uñ½ºø^]|¯.¾Wß«‹ïÕÅ÷êâ{uñ½ºø^]|¯.¾Wß«‹ïÕÅ÷êâ{uñ½ºø^]|¯.¾Wß«‹ïÕÅ÷êâ{uñ½ºø^]|¯.¾Wß«‹ïÕÅ÷êâ{uñ½ºø^]|¯.¾Wß«‹ïÕÅ÷êâ{uñ½ºø^]|¯.¾Wß«‹ïÕÅ÷êâ{uñ½ºø^]|¯.¾Wß«‹ïÕÅ÷êâ{uñ½ºø^]|¯.¾Wß«‹ïÕÅ÷êâ{uñ½ºÄ^]b¯.±W—Ø«KìÕ%ÎÇmìÌým<±W—Ø«KìÕ%öê{u‰½ºÄ^]b¯.±W—Ø«KìÕ%öê{u‰½ºÄ^]b¯.±W—Ø«KìÕ%öê{u‰½ºÄ^]b¯.±W—Ø«KìÕ%öê{u‰½ºÄ^]b¯.±W—Ø«KìÕ%öê{u‰½ºÄ^]b¯.±W—Ø«KìÕ%öê{u‰½ºÄ^]b¯.±W—Ø«KìÕ%öê{u‰½ºÄ^]b¯.±W—Ø«KìÕ%öê{u‰½ºÄ^]b¯.±W—Ø«KìÕ%öê{u‰½ºÄ^]b¯.±W—Ø«KìÕ%öê{uɽºä^]r¯.¹W—Ü«KžÿÚØÿ˜ûÛxr¯.¹W—Ü«KîÕ%÷ê’{uɽºä^]r¯.¹W—Ü«KîÕ%÷ê’{uɽºä^]r¯.¹W—Ü«KîÕ%÷ê’{uɽºä^]r¯.¹W—Ü«KîÕ%÷ê’{uɽºä^]r¯.¹W—Ü«KîÕ%÷ê’{uɽºä^]r¯.¹W—Ü«KîÕ%÷ê’{uɽºä^]r¯.¹W—Ü«KîÕ%÷ê’{uɽºä^]r¯.¹W—Ü«KîÕ%÷ê’{uɽºä^]r¯.¹W—Ü«KîÕ%÷ê’{uɽºä^]r¯.¹W—Ü«KîÕ%÷êÒ÷êÒ÷êÒ÷êÒ÷êÒ÷êÒÏÇmìÌým<}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.}¯.c¯.c¯.c¯.c¯.c¯.ã|üׯþÇÜÿØÆ3öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2öê2÷ê2÷ê2÷ê2÷ê2÷ê2ÏÇmìÌýmχùûWø¿Z-âÿþÇ_66šçÇzñŸƒ¬±ÿ\ð¸zÿ«_ŸçgUÂßÿJmlü§ÿü+‡CìV¢ÿlˆ®†ètˆjcãŸ?ý>¼8ÄøÙC 1èÕÆÆ?ÿªãD­¾Åþ³!v5ÄN‡¨66þùWð»x¯Äþ2Ä”³G8âý¯ðÿþþWjcãw8ÝØøç_Møéo†ÿ1Ä…†HÂßÿJmlü§ÿ ®úý®U¢ý†xÿ+<Ä¿†¿ÿ•Zõÿ§«þþUÃC´âÛφØÔéGC­úÿçÿ¾Î«þ{ }˜ÏÏuwãáÿžNöëùS~ý>ÃìïèŽöî¹£gÿDwþïqhß@„~Jº·Oôàáÿž¿ö t¸ß2ý˜×Ä; ìxÑ;|òqüS¸ÿãØMþïY`ß@Ÿ=Ï£·íÉOþï±Wß@70´>ŽqmYg<€ìèå<@qt›µœo2çËù?Ñ›õ£Ç¬å|“9ßXÎôÞ·¨å|“9ßX΃'ï7ã¬Õr¾Éœo,çúŒ#XÎô¶ø^œÛ„Ìù`9”ƒ+œµœO™óÉr>Á7®½G-çSæ|²œO]i‡‹œOö•O~ÁÏ«ö•Iù•I–ó`ì–GTçó)sž ˆ>¶?ùÁÃÿ=½÷è=ù;å¯êÌ*%ã’1lØóˆ(~eºd\gèh/m6jùvÈ/ì`Õe]ı»5:Õf°jƒÆÞk³Vm†¬6ƒU4öŒcç´CV›Áø6–Ûb\‘ïSò}2¾O¸‚¶³ø}Ÿ’ï“ñŒ=Ö:.j|Ÿ’ï“ñ ÏUi‹|Ÿ’ï“ñ ÷8¢w §äûd|è9Ñ‹³‹)ù>ãÐØûaûNéäá‚q“1èÿ1™­Æ¸K2î"èHšgñp޾þÅ_ ‹ÐsͬjkØOôö t‡¶„Gñûþ‰îß@€nmç¾s<œó¡CK†y?ÚUâû'z~½Ã'?®£×¾ï¿Ñó;ï}±Ÿã¸j_Øßèó;ïÝ®éãÈVûšIÆc@·‘÷RªÆ8©Ç1tGèsíÓÖvLêq *Ê÷÷½EÆI=Ž¡'@·v£¨M˜ÔãzGcï×á³ö…5©Ç1ô sþþžµ/¬I=Ž¡’ÙÝ+~aMêqÖã|ïçYÓ&>ÑÛ7Ð=íè³6§5©2tlpX»µ9­I5¡'B¿âH«ÍiMª ½Ã±ßÞk»Ä&Õ@†>+ï}òpÁ8¦Z@ý½õâ¬R*#Æ”€n‘njڮ‘Ie„¡;û»Ò:Œ Ƹл…ÁÃã˜.ƒž|[®"ã¤.ÃÐ;|òýȬéï&u†>úÛñ2y¸`Óe iãf\ñ'ucº @ÿ•÷bb¿qR—aèŽÐg;fQ—1©Ë0ô@O¾Ï#÷÷<\0.ãz,Q¨Õ—’qLBOþ+Œ“ªCŸhìÞŽ3jJ¨I]†¡›u½wa<\0®3Æ!÷uVÜ9é’q1 Ï嫬yÌ>ÑýèÐWÓS^ÅYe—ŒëŒqýGÞƒOôüzGO>ú᣸Žë’q1eÝhGwNºdÓ" (#éGdqçDj‘Æ´H„¾ 7cÔ'µH†îýêÇUÝ«”Z$C„~¯a­¨EšÔ"zÚ€ò¨~ã¤ÉÐ|ïç2V–Ô@“j CŸý×ua‹;'R dèf¨Í¤ÛqeqR 4¦ôµC>®šhR dèÇþr:9Œcj BϵwQ\ÇI5¡'zò÷ZæÅuœTz‡ïýµŠì<\|㘈ž¼÷#zqV)Õ@†nvérãá‚qcÜŸè-ü©„6.w1Æ]pfÕŠ Ÿèþ ô@Oþ½† .w1Æ]ºW(y¸`ÜÅЭµÃŠ{•—dÜÅÐ=ïu\¯1î’Œc x;õœÖx8g\c 8@oaǘµu\“ 8Cw€þGwžópÎ8†èÉÇRFjýqM*à =áØý8‹z\“ 8CŸpìõÝÂ&5h†n h‘±|Ôµ¯L“tc4B÷Õ´QÌy©A3tGè9ŽYÜŸoRƒfèÑþn~´ÚJªI š¡'B_Gþ£–óRƒfè³2öÉÃEÎ3¸µͬšTSz»‘½¸_פ ÌР¯:?£¶{Ф ÌÐ=ùqíªÍ¬šTz"ô¾­µýº&U`†Þº×QܯkRfè¡¿/“‡ Æ1¸¹ÖeŒ‡ ƱžP€n—iµÝƒ&{Bº#ô÷µópÁ8Ö‘Šž|^‡;R›ìHeè Ñ_nÞäá‚q¬'¡%çeO(Cÿ8ýì¹ÍÚ§­9šÔaÓaz.§SmýÞ¤ËСϥEgVR‡eèÐÛÚ»(®&¤ËР·ó|öM$9ÏtX4ö÷|¾ópñ•a:lËùi›Ôaù{ïzŸ6x¸xïLkzÌæ(>yÙ©ÔØþ|›º Ûx¸¨6l ·û­æúhrž¡;@_²Ì¨®ãäþóy¶ópÁw¦À'_÷U6©0ôDè7}ŽVSšTzGè_á»TúDèyÞ“‹"ã¤:ÀÐÍO˜óW±Ö¥:àL@è‡Gm ëR`èŽÐoÆYÔºu\ª =ú¹Î1«1Î¥:ÀÐ>ù×.qòpÎ8†>ºçÑŠ;¥.Õ†nŽºuÖ~]1ç¥:àLpƒêËbÎKu€¡»ÃSG×'¶–óR`èÐïÙEöÚÖ¥:ÀÐ=ùs½èúp©0ôþ—¬{œØy8ÿÊ0ô‰Ðß3«ÉÃã˜6á…ýyãá‚qL›@èýæ{Q›p©M0tGè±6È‹_©M0ôð]ÜYt6ºÔ&z¢±ûÚ)-2Nj }¢±/ids^ª Ýì8²¸wáRp¦8¼Ç&>?9/Õ†îhìךÎs^ª =ÐØ×ä&k{.Õ†ž½­fFqf%Õ†>Ñ“÷µ_Wó]¸Tºy@u Gqf%û"õE::9pÕYs°»ì‹dèî…ó*‡‹œg}‘hìwµéW­KËe_$CO4ö쇽F.û"úDc¿Ö©JÅ:/;ú½n³‹¥Ës^*bÎ1O]ë9Ï14v_+5Ø¥"ÆÐ}¹ygqn#1†žhì¹l•Åœ—ŠCŸhìëø{»j9/5)†nÞä)uÙè¬7 [Î#¯â|^ö2tGcŸoã<\ä<ë DèË\Xì t©2ôDO¾µ#ª»F²7¡w˜u¯½‹ÎÃÅ šõ¢±Ûr°gV²7¡›ÖoÂOœpÙè¬7 [[§eÖ|.{º£±¿;‘‡ ƱÞ@4ö¯ìÓÊÞ@†žhì_8·Ðeo Cï}í˜ÕN¿w©þ3ô‰Ðçr:w‰eo CÿèçZu-#½μŽ>Šëwé=`èŽÐù*v5ÆIïCG·ë8‹÷ ¹ô0ôDc¿æVÓ"]zzGè÷WfžEÆIïC}¬ÞÀ(y\zú„9ÿºÑiòpÁwæ=ptOi,³QïÒ{àL‡ x…èJ»zH6˜§¾Ù§ñp^mº£±¿;R‡ójÃÐ# =bÁÃyµaè‰Æ>ÖÉÿµuH–¡w„þ…Ó6BžSÊÐ'BŸù0y8ç;C·(œi<\0Ž©À;•Î~'U`†î}5b5ÆI˜¡@7[{•µuH˜¡gºó’‡ Æ1?yÏ£È8©3ô¦uØÉÃ㘠Mߥe<\0ŽéqáºÿÝx¸@gzB¿gǬíÓ†Ôãº#ô{nu̬ñ]êq =µ“9x¸à;ÓãÐØ¯uLi‘ïRcè?ù:ßåýq } ô·§tðp>Ÿgè>ùú½B!µH†þ±Nÿ ߥL‹Œ€:¬õÚú=¤ÉÐ=Ö{/Ψ¥ÉÐÝ–—¸8£–Z$CO4öwGjòpÁwvF+B¿?qY\¿‡<£•¡Oôäß'‰M.Ç”Ð@§ežÇœµ=êJh0%4òG^âJ(C÷À'Ä^E_eH%”¡ûû±àá‚qL Âù´ÉÃãXo ̺µ?_üÂÊÞ@†> ú]l¼Ö­òæ>†>ãg‰!U`†nÑt'rH8˜ ŒÐ¯å5*® ¥ ÌС¿÷mœ‡ ¾38°Þª{VRfè‰Æþ…n*0Cïð½¯~™š:¤ ÌÐg¼“‡ Æ18†VÀ‡ Æ1 ÿquãá‚qLFcÏç‡ Æ18 çÓŒc*pàc'U`†ÞaÖÕoú©3ô ÇþRB'Œc*p”Pãá‚qLŽù£»uBªÀ Ý+àQ<ã%¤ ÌÐ>ù¹ÚïkŒ“*0CÏ(ÜV™<\0Ž©Àpì±.Óª1NªÀ }Bô¾øã¤ËÐ-Ð)©K ,îÛH6Xx Näy~Õ'{ÀºÃ±/oa‘q²œ¡B÷Œc=àèÉçr>'{Àz‡O~]ØX;ç$d8Ch챪Míþ÷ßèý;O~¢±Ç:ê£8§•è ÝòÔ{ÔÆÃ9ß“9z³þìÊl<œó¡{âÛiÏâ/) =ºµÕYâ{JçCÏ<µƒ=y8ç;Cý=·<œ3Ž¡O€n±kÊHJçC·4ý•1.ÇœY8£µñpÁ8æ|ÈÂ-¥ÎÃã˜ó>ù×W&x¸`s> 'g]Fm™ÒùÀÐBŸ‚>x¸`s> 'Ÿë´ÌÚ7.¥ó¡Ì Tï¿ñpÁ8ÖÿŽÐ¿à5JÙÿÎСߙ³8§MÙÿÎР¯®«Ø#–²ÿ¡g6}ŠZòpÁ8ÖÿŽÐß§mL.ržùmÒõýïÆÃEÎ3¿M¢.ì|º÷9Ïü6‰Ü>v»šß&¥ß†¡zòïûaƒ‡‹œg~4ö¾ü´550¥ß†¡÷JÖuÎ×q } ±¿o%<\|ã˜ß¾÷×)©“‡ ¾3¿MÚ5Zæƒߥß&™ß¡¡:¥ß†¡;Bý˜Å›}RúmzdÀî¼hÅY¥ôÛ0ô„c¿_ûYœUJ¿ Cï}YJkû6)ý6 }¢'3΋j)ý6 Ý2u§’ñpÁ8æ·É„§*eÑá–ÒoÃÐŽý:b×qÒoÃÐý\÷ÇÕÔÀ”~†žhìï»ó’‡ Æ1¿MBÏÉúÌÔ'ý6 } ô/œŽ›ÒoÃÐgå½O.øÎü6 {ÿ×35¾K¿M2¿ @_7¼\U¾K¿ Cw8ö—ÓÉy¸à;óÛ@ô/ì”J¿ CO„þîDN.øÎü6ÙµÝy¸à{g|ïúŒ—ÁÃߙێ}yŠßwéöaè–CŸKl<\ð¹}ºÍ»Ø•éöaèÑ__çá‚ïÌí“C;Zƒ‡ ¾3·BÏ5·)Ψ¥Û‡¡w€þÇýï‡ ¾³Û¨áØWηßåmÔ }Â÷nÇ(žž—ÒkÄÐ?n±Q³ ãá‚ïÌk„ÐçÚª,î˜I¯C÷,œºà<\ðyÐØ¿²‚–^#†žhì¿ÆóÉ'|g^#4v[ë÷š>¥×ˆ¡4ö¶r¾ÈwyâCŸù³Û.R:º%ºsaUÚâ÷]:’9º~´â)j)N ÝÑØç:½ÈwétbèÑ_žÒàá‚ïÌé”…›¸“‡ ¾3§zïïó.:|gN'4öµ€·Qã»t:1ô ѯÕü_ã»t:1tëçæó]::s:!ô/ø.ºt:1tï蔕ó^ÇÕøÞ¥Ó‰¡BÿBGj—N'†žðÉǺš·Ä÷.N ½Ã±¯¾ÈÚy—g¼0ôÆîëÆÆÚ÷½KŸCŸýüÑy]ú¬ºu‡wçYñn.ðÎðŽÏŸŸÅäºTÀº÷ŸÝÛ¥ÎСûyôVû¾w©€3ôDïý Næ.p†Þ;ô,«SïRgè¡Ç:íæòêRgè³n=˜<\ð)à=ôjÆÃß™ÐížÓ¶³¶~ïRgèÇþº_Æy¸à;SÀÑØm¡×:ºTÀz¢±·óÈâ 3]*à ½Ã±·£Ym>ߥÎÐ'û½–šGÖ'pžó©otj<\ät¿L—»…íUöKwß7.ÐÙ:nòåQܧÒ??˜ƒ ¯[ ãª)#C:Øz@ô×.qðp^izôvÏç{ñlŸ!ì ½£±ûÚ£®í”yvChì±$èÚÌjHÿ©ÆÃ9ßs2ÿ‘ïbÈuÜ`ë8ˆþò4.ÆÎÖqýŽçá¢Ú°uBïK«íÛ ¹Žcè‰Ð¯5öÚ>íë8†Þá{9^:Õ†­¤ÐØÇªuµ•Ô+)žóhV9Ö¦U-çåZf0_åøsVékÇ,k¾Ê!}•ƒÍ*º]ë.­ÚÌjÈ9-C÷‘ð¼‹~ÔNþÒWÉÐ=ùÕY]H_%CO€÷Jê¬ò]ú*zGOÞÍvÕø.}• }À±ûÓs2x¸˜]М>«{-qïDr%5˜Ïj ¯QúqÕ:†ôY ¶’ød¡6kë¸!×q Ýú·×9|g>+„þ~ïÁÃß™Ï ¾÷ë^FWÒgÅÐ'D_|¯y ‡ô1t®ßÛ:ý¾¨Eé5lýÐ×}‘Q¼OjÈ݆îhìc”µÈ!½F =t¼´GŸTðp‘óÌkÐÝìy.qòp‘óÌoŸ¼=±ÉÃEÎÓ¬»àyÔ­gVr×h0ÏÉ<áéy^Ñ{÷ñÜ9™<œßÿŽÞîÿgÊÙØþšóÿ†/ö·œo§ýÝOtºÎyøgη¿æü¿áÿ€ø7СuLiûDþH|=úóæ¾öלÿ7üüz‡O>Žþé|hÍùÃ?@ò;ï}"ô\^£íÉOþ2¿óÞ?êóë÷õÛ²Îx8ÙÑËy€ë7k9ßdÎ7–óMÝÇs¾Éœo,çú=§ÝÎ-ä9ßdÎ7–óMÝØÈs¾Éœo,ç›RyÎ7™ó弫{xλÌyg_׌k<\|eœå<šQ¯Ž•bλÌyg9ïÐÅÞk9ï2ç弫ûãxλÌyg9ïªw€ç¼Ëœw–óh>¿ü´Å:2çéÌ* xöVËù9ì+°[çÜ¿°ÎÃÅW&X·ê‡å92çƒå|èZ×y¸Èù`9/<çCæ|°œGZä•GÎZΧÌùd9tعУ–ó)s>YΧ®´ÎÃEÎ'ûÊÀ3^Î{B_ûʤüÊ$ËùT©<çSæßÜ=h£8«’ïƒ}añ© g/~a‡üÂVmPÖÅjE®U›!«Í`ÕFº¸yµ²Ú VmàÍ>«I¬Vm†¬6ƒñ)¡‹qE¾OÉ÷Éø>á ÚÎâ÷}J¾OÆwt·ÎZÇEïSò}2¾ËÛm8ß§äûd|è=ŽhÅÝÂ)ù>ßzÎcôâìbJ¾OÆ84ö~ؾS:y¸`ÜdŒ»àIb3[q—dÜEÐíÔYg<œ£ÛIøŽÐsͬjkØOôö t7xÛÅ:>¯Ä÷OtÿzôשȔïŸèñ ôDc7‘òý=¿Þá“ËÆ]âûoôüÎ{Ÿpì=Žòý7úüÎ{73xZf¶ÚÖL2ÎãPŸÔÈ{)UcœÔãº#ô§úÏ'õ8†}uëœEÆI=Ž¡§É[N8ã¤ÇÐ;ûòÎÚÖ¤ÇÐ'Ìùû {Ö¾°&õ8†nÖÔyœqR³Æ×ÔYœqM2Ž©hìÏÓï9ã¤ÈСì^Ôæ´&Õ@†žýZg2׿´&Õ@†ÞáØ7´rÆI5¡ÏÊ{Ÿ<\0Ž©Po½8«”ʈ1eÄBݵÁ'•†îhìïJë<\0.ãBïŒcº zòm¹>ŠŒ“º CïðÉ÷#³¦¿›ÔeúDèoÇËäá‚qL—±„ÎÆÖ‹ß8©ËÓe,ÕéyœqR—aèŽÐŸ'sÆI]†¡zò}¹¿÷àá‚qÉÐc‰B­Æ¸”Œcªzò_aœT…úDc÷vœQSBMê2 ý£÷Sí]ŒëŒqé°×aÅ“.×ãú\¾ÊšÇìÝ¿ýuŽg\—ŒëŒqýGÞƒOôüzGO>Ö)©Åu\—ŒëŒq(ëF;²¸sÒ%ã˜ižáYÜ9‘Z¤1-¡/ÃÍ5ÆI-’¡»áŽÔ«ºW)µH†ý^ÃZQ‹4©E2ô´=äQýÆI-’¡øÞ÷ER5ФÈÐ'Bÿu™Å©2t3t¢T_ÍÀ5ÆI5ИhšTºÃ±¿œNÎÃ㘈П÷IqÆI5¡'zò±N€/®ã¤ÈÐ;|ï¯UdçáâÇÔ@ôä}ueg•R dèf—Þ!7.w1Æ]à<+*¡‡ Æ]Œq—:5‘3î’Œ»ã.½† .w1Æ]ºW(y¸`ÜÅw¡ó¬ÚaŽÊK2îbŒ»Ô-äœq—dSÀÛ©ç´ÆÃ9ãSÀz ;Ƭ­ãšTÀº·Swç9çŒcèž|,e¤ÖפÎЎݳ¨Ç5©€3ô Ç^ß-lRƒfèÖLÝJÌs^jÐiÐÝWÓF1ç¥ÍСç8fq¾I š¡G3u Ïy©A3ôDèÏû&xÎK š¡ÏÊØ'9ÏTàÖ~4³jRnLèë¦Î^ܯkRfèÐ_w.ðœ—*0CôäÇu´«6³jRfè‰Ðûr´ÖöëšTzGèv^Gq¿®I˜¡O„þv¼L.ÇTàæZ—1.ÇzB:)t]¹PÛ=h²'”¡{s½Gí<\0Žu¤¢'Ÿ×aÅŽÔ&;RzBô—›7y¸`ë Eè_ÉyÙÊЭ!MjíÓÖœMê°é°=—Ó©¶~oR‡eèŽÐçÒ"‹3+©Ã2ô@èmí]WR‡eè ÐÛy>û&’‡‹œg:,û{>ßy¸øÊ0¶åü´Mê°ü½w½O<\¼w¦Çµ=fsŸ¼ìTjl¾MÝ…m<\T¶?ÐïÿÒ­æúhrž¡{Ã7óŽê:NîÏ3ô@Oþ­ YÇöçÛÔ~Úäá¢Ú°ýy„þ¼3‘ç¼ÜŸgèŽý^¿ZwÞoôþ'?›¼–×:©0tk—ºÑ‰ó]ª©ÝújÊ,ò]ª ÝÑØg>Ïöq.øÎÔøäë¾Ê&Õ†žÝr]¶Qã»TzGè_á»TúDèyÞ“‹"ã¤:ÀÐÍO˜óW±Ö¥:àL@è¹®\¨­a]ª ÝúÍ8‹Z·ŽKu€¡BžÕIçR`è Ÿük—8y8gCŸÝשȵR—êC7GÝ:k¿®˜óRp¦¸Aõ¿e1ç¥:ÀÐý—¯Ol-ç¥:ÀС߳‹ìµ5¬Ku€¡'zòÏ›ûxÎKu€¡÷¿dÝãäÀÎÃùW†¡O„þžYM.Ç´ /ìÏŒcÚBïë2«š6áR›`èŽÐcm¿2R›`èá º¸³èlt©M0ôDc÷µSZdœÔ&úDc_ÒÈ(æ¼Tº9¾ ;‹{.Õgê€Ë[‰yÎKu€¡;ûóî<žóR`èÆ¾&7YÛ»p©0ôèm03Š3+©0ô‰ž¼¯ýºšïÂ¥:ÀÐͪ=Š3+Ùé¬/ÒÑÉë¬ÎšƒÝe_$Cw/œWé<\ä<ë‹Dc¿«M¿j]Z.û"z¢±çº?®˜ó²/’¡O4ökªT¬ó²3‘¡ßëu›Ïy©ˆ9SÄú\N§â.±ì dè=àÜB«®e¤÷À™÷À±óÁGqý.½ Ýú/_Å®Æ8é=`èáÈùpgñ^!—Þ†žhì׺…¼¦Eºô0ôŽÐï¯Ì<‹Œ“Þ†>úX½Qò¸ô0ô sþu£Óäá‚ïÌ{à:“y™j|—Þg:l .­\iWB©ÃÓaãÔ7û4Ϋ Cw4öwGªóp^mzD¡G,x8¯6 =ÑØÇ:ù¿6£©Ã2ôŽÐ¿pÚFÈsJúDèï3&ç|gè…#‡ Æ18`§ÒÙ"㤠ÌТ¯³F¬Æ8©3ôèfk¯²6£©3ôŒBw^òpÁ8¦ã'ïy'U`†>ô;y¸`S£é»´Œ‡ Æ1=.\÷¿èLCè÷œá˜µ}ÚzCw„~Ï­Ž™5¾K=Ž¡G¸v2|gzûµŽ)-ò]êq ½ã'_综?Ž¡„þö”Îçó }Â'_¿W(¤ÉÐ?Öé?á»Ô"ƒi‘P‡µ^[¿‡Ô"º£±ÇzïŵÔ"z ±ÛògÔR‹dè¡;R“‡ ¾³3Zúý‰Ëâú=ä­ }¢'ÿ>IlòpÁ8¦„:-ó<æ¬íQ‡TBƒ)¡‘?ò‡TBº>!ö*ú*C*¡ =ÐØß÷ˆŒcJhΧM.ÇzaÖ­ýùâVö2ôÑïbãµn7÷1ô?ëL ©3t‹þ£;‘CªÀÁT`„~-¯Qq-U`†îý½oã<\ð©ÀðVݳ’*0CO4ö/të„Tz‡ï}õËÔ|Ô!U`†>£à=˜<\0Ž©À1´n<\0Ž©Àýó¨Œc*0û{>ï<\0Ž©ÀQ8Ÿ6x¸`Sߨ³È8©3ô³®~ÓGH˜¡O8ö—:y¸`S£ „Œc*pÌÝ­RfèXâ/!U`†ðÉÏÕ~_cœTzFá¶Êäá‚qL†cu™VqRfè¢÷%À×'uX†nNI]j`qßFê°ÁzÀu"Ïëð«Æ8ÙÎÐŽ}y ‹Œ“=à =ú»w x¸`ëGO>—ó¡È8ÙÎÐ;|òëÂÆÚ9'!{Àú@cUmj÷¿ÿFïßyò=ÖQÅ9­ì@gè–§Þ£6ÎùžÌùЛõgWfãáœï ÝßN{ÏxIé|`èЭ­ÆÈßS:zæ©ìÉÃ9ßú@èï¹Íàáœq }t‹Õ˜XSFR:º¥é¯ŒñpÁ8æ|È­‡ Æ1çCn)u.ÇœðÉ¿¾2ÁÃã˜ó=ù;ë2j«È”Ά>úûôÁÃã˜ó=ù\§eÖ¾q) ýã&VÕûo<\0Žõ¿#ô/xRö¿3tGè÷Gæ,ÎiSö¿3ôè«kã*öˆ¥ìgè™MŸ¢–<\0Žõ¿#ô÷i“‡‹œg~›t}ÿ»ñp‘óÌo“¨ ;ŸîýÆÃEÎ3¿M"·ÝÅ®æ·Ié·aèžüû~Øàá"ç™ß½/?mM Lé·aè½’u‡óuChìï[‰ß8æ·ïýuJêäá‚ïÌo“v–ù Æwé·Iæ·Aè_èƒNé·aèŽÐG?fñfŸ”~†°;/ZqV)ý6 =áØï×~g•ÒoÃÐ;D_–ÒÚ¾MJ¿ CŸèÉߌób‡ZJ¿ C·LÝ©d<\0Žùm2á©JYt¸¥ôÛ0t‡c¿ŽÅuœôÛ0ô@c?×ýq550¥ß†¡'ûûî¼äá‚qÌo“Ðs²>35ÆI¿ Cý §ã¦ôÛ0ôYy ¾3¿MÂÞÿuÄLïÒo“ÌoÐ× /W•ïÒoÃÐŽýåtr.øÎü6ý ;¥ÒoÃС¿;‘“‡ ¾3¿Mv­Aw.øÞß»>ãeðpÁwæöc_Þƒâ÷]º}ºåÐç|gn„nó.vEeDº}ºCô×WÆy¸à;sûäÐŽÖàá‚ïÌíƒÐsÍmŠ3jéöaè ÿqÿ{çá‚ïì6j8ö•ó­Æwy5CŸð½Û1Чç¥ô1ô[lÔìÂx¸à;ó!ô¹¶*‹;fÒkÄÐ= §.8|g^#4ö¯¬ ¥×ˆ¡'û¯ñ|òÉÃß™×ÝÖú½æŸOé5bè½­œ/ò]ž8ÁÐgþì¶‹”N'†n‰î\X•¶ø}—N§dN'€n£­xŠZJ§Cw4ö¹NA/ò]:z@ô—§4x¸à;s:eá&îäá‚ïÌé„Þûû¼‹ÎÃß™Ó }-àmÔø.N }Bôk5ÿ×ø.N Ýúù£ù|—N§ÎœNý ¾‹.N Ý;:eå¼×q5¾wétbèпБڥӉ¡'|ò±®æ-ñ½K§Cïpì«/²¶CÞå/ } ±ûº±±ö}ïÒgÅÐg?tÞE—>+†nÝáÝyV¼[§K¼3¼ãóçgñ¹.p†îýg÷Ãv©€3ô@è~½Õ¾ï]*à =Ñ{ÿ‚“¹Kœ¡÷½ËêTã»TÀú@è±Îp«¹¼ºTÀúì…[&|g x}‡šñpÁw¦€t»ç´í¬­ß»TÀºÃ±¿î—q.øÎp4v[èµÎ….p†žhìí<²xÂL— 8CïpìíhV›Ïw©€3ô‰Æ~¯¥æ‘5ÆIœç|ê9ÏðÞáÉB}¿°RëLëxÚZqìr¾3u ÏÝ/Óånag{•ýÒÝ÷‡ t¶Ž†¼Fy÷i‡ôÏæ`èëÖ¸jÊÈv†ýµK<œWZ†žýþ¿Þ|¯í”é`gèÝ×um§tȳûú@c%A×fVCúçú„ïý®´³æ-Ò?ÏÐ?ÎfT÷I5Îù>˜“yø|C®ã[ÇAô—÷ ñp1v¶Žèt¬8Õ†­ãz_z\mßfÈuCO„~­±×öi‡\Ç1ôßûËñÒy¸¨6l%…Æ>V­«­¤†\IñœG³Ê±6­j9/×2ƒù*ÇŸ³J_;fYóUé«lV ÐíZwiÕfVCÎiº„ç]ô£vòÿ¾J†èɯ¾ÈêìBú*zô¸WRg•ïÒWÉÐ;zòn~´«Æwé«dèŽÝŸž“ÁÃÅì‚æ<ðYÝk‰«x'ò+©Á|VyÒ«Ö¹0¤Ïj°•ÔÀ' µY[Ç ¹ŽcèÐÿ¸½Îy¸à;óY!ô÷{.øÎ|Vð½_÷2²¸š>+†>!úâ{Í[8¤×ˆ¡ÛøsýÞÖé÷E-rH¯Ñ`ëw€¾î‹Œâ}RCî0tGc£¬Eé5bè1 ã¥=ú¤‚‡‹œg^#€îfÏs‰“‡‹œg~øäí©ˆM.ržfÝÏ£n­8³’»FƒyNæ OÏóâ rSjГ©ÿ³éS•çcŸl=QOh;zÖúß§\AO¶š@è_p2O¹‚fèŽÐßßwçá¼Ú0ô@èmÉ\Ì:¹‚fè9Þ9‹§¨M¹‚fè}.ÛEÍù0å š¡Û }o ñp‘óLèëT䫸…rÍн­ë&j{ÔSª =ÐØ¿pGê”j COˆ>î¥Tí ;¥ÈÐ;D¯ïM©2ô‰Þ»çÎÉäáüûþwtÿ‡)ÜÙèÍùÈÿ-çý´¿£û‰N×9ÿÌyÿkÎÿþˆ=úXÇ”¶Oôàáÿ€Ä7С?oîó¿æü¿áÿ€ä7Ð;|òqôOçƒÿ5çÿ ÿÉï¼÷‰Ðsy¶'?yøÈüÎ{ÿ¸ãþõûúÆmYg<€ìèå<@õ›µœo2çËù¦Îîã9ßdÎ7–óýžÓnçòœo2çËù¦nlä9ßdÎ7–óM©À<ç›ÌùÆrÞÕ½<ç]æ¼³¯ŒkÆ5.¾2ÎrͨWÇJ1ç]æ¼³œwèâNﵜw™óÎrÞÕýq<ç]æ¼³œwÕ;ÀsÞeÎ;Ëy4Ÿ_~Úb™ótfP <{«å|Èœö• Ø­sî_Xçáâ+,çCõÃòœ™óÁr>t­ë<\ä|°œ—ÎFžó!s>XÎ#-òÊ#g-çSæ|²œ:ì\ èQËù”9Ÿ,çSWZçá"ç“}eà/ç=¡¯}eR~e’å|ªŽTžó)sž ˆ¾¼…Û“<ü¤gì=ù牜q)—Œq]9Ø9ãºd\gèCõAsô!ÑãûPw¨q¾É÷Áø>Tßçû|Œïî´QœUÉ÷Á¾°øÔ…³¿°C~a«6(ëbµ"תÍÕf°j#]Ü¼Ú Ym«6ðfŸÕ$V«6CV›ÁøŽ”П"ß§äûd|Ÿpmgñû>%ß'ã;º[g­ã¢Æ÷)ù>ßåí6œïSò}2¾ôG´âná”|ŸŒï=ç1zqv1%ß'c{?lß)<\0n2Æ]ð$±™­Æ¸K2î"èvê¬3ÎÑí$|Gè¹fVµ5ì'zûº¼íbŸWâû'º=úëTdÊ÷Oôøz¢±›÷ÍÙHùþ‰žß@ïðÉeã.ñý7z~ç½O8ö‡Gùþ}~ç½›<-3[í k&gŒq¨Ojä½”ª1Nêq ÝúSý猓zC„¾ºuÎ"ã¤ÇÐÓä-'œqRcè}y gí kRcèæüý…=k_X“zC7kê¼ Î8©ÇYcŒkê¬Nθ&ÇÔ@4öçé÷œqR dèÐ?v/jsZ“j CO„~­3™ksZ“j CïpìZ9ã¤ÈÐgå½O.ÇÔ@ ¨¿·^œUJeĘ2b¡îÚàŒ“ÊCw4öw¥u.Œq¡w ƒ‡ Æ1]=ù¶\EÆI]†¡wøäû‘YÓßMê2 }"ô·ãeòpÁ8¦ËXBgcëÅoœÔeŒé2–êô<Î8©Ë0tGèÏ“9ã¤.ÃÐ=ù>Üß{ðpÁ¸dŒè±D¡Vc\JÆ1U=ù¯0NªB }¢±{;Ψ)¡&u†þÑû©ö.Œ‡ ÆuƸŽtØë°âÎI—ŒëŒq}._eÍcö‰îß@€þ:ÇŒ3®KÆuƸþ#ïÁ'z~½£'ë”Ôâ:®KÆuÆ8”u£YÜ9é’qL‹´Ïp‹,îœH-Ò˜‰Ð—áfŒã¤ÉÐÝpGêUÝ«”Z$C„~¯a­¨EšÔ"zÚ€ò¨~ã¤ÉÐ|ïû"©hR dè¡ÿºŽÌâΉTº:Qª¯fàã¤hL ´ wÈÇUSMª ÝáØ_N'çá‚qL DèÏû¤8ã¤ÈÐ=ùX'À×qR dè¾÷×*²ópñcj zò¾º2‹³J©2t³Kã.pž•?•ÐÆÃã.ƸKšÈwIÆ]Œq—^ÃŒ»ã.Ý+”<\0îbŒ»ÐyVí°â^å%w1Æ]êrθK2Ž)àíÔsZãáœq)ཅcÖÖqM*à ÝÛ©»óœ‡sÆ1ô@O>–2RëkRgè ÇîÇYÔãšTÀú„c¯ï6©A3tk¦n%æ9/5èÆ4h„î«i£˜óRƒfèŽÐs³¸?ߤÍУ™:a†ç¼Ô z"ôç}<ç¥ÍÐge쓇‹œg*pk?šY5©7¦ôuSg/î×5©3tè¯;xÎK˜¡zòã:ÚU›Y5©3ôDè}9ZkûuMªÀ ½#t;¯£¸_פ ÌÐ'B;^&Œc*ps­ËŒc=¡ º®\¨í4ÙÊн¹Þ£v.Ç:RÑ“Ïë°bGj“© =!úËÍ›<\0Žõ„"ô¯ä¼ì eèÖ&µöik·&uØÆtX„žËéT[¿7©Ã2tGèsi‘Å™•Ôaz ô¶ö.Š« ©Ã2ôèí<Ÿ}ÉÃEÎ3ý=Ÿï<\|e˜ÛòG~Ú&uXþÞ»Þ§ .Þ;ÓãÚ€³9ŠO^v*5¶?ߦîÂ6.ª ÛŸèí\7´Ö\MîÏ3toøfÞQ]ÇÉýy†èÉ¿U¡àá"ëØþ|›ÚO›<\T¶?Пw&òœ—ûó }À±ßë÷QëÎûÞ¿óäg“·ÓòZ'Õ†níR7:q¾Ku 1u [_M™E¾Ku€¡;ûÌçÙ>ÎÃß™:Ÿ|ÝWÙ¤:ÀС[®Ë6j|—êCïý+|—êCŸ=Ï{rQdœTºù sþ*öúTœ©=ו µ5¬Ku€¡;B¿gQëÖq©0ô@èϳ:)ã\ª =á“í'çŒcè¡û:¹¶SêR`èæ¨[gí×s^ªÎÔ7¨þ·,æ¼Tº£±ÿòõ‰­å¼Tz ô{v‘½¶†u©0ôDOþysÏy©0ôþ—¬{œØy8ÿÊ0ô‰Ðß3«ÉÃã˜6á…ýyãá‚qL›@è}]fUÓ&\j Ýz¬ òâWFj =¼Aw.µ †žhì¾vJ‹Œ“ÚCŸhìKÅœ—êC7ÇwagqïÂ¥:àLpy+1Ïy©0tGcÞÇs^ª =ÐØ×ä&k{.Õ†ž½­fFqf%Õ†>Ñ“÷µ_Wó]¸Tºy@u Gqf%û"õE::9pÕYs°»ì‹dèî…ó*‡‹œg}‘hìwµéW­KËe_$CO4ö\÷Çs^öE2ô‰Æ~­S•Šu^v&2ô{Ý¢n³â9/1gŠ˜§®u‡‹œgŠ»¯Ž•š ìRcèÆ¾Ü¼³8·‘ŠCO4ö\¶ÊbÎKEŒ¡O4öuü½]µœ—šC7ï?ò”ºì tÖÐ-ç‘Wq>/{º£±¿Ï·q.ržõ"ôç=#<ç¥ÈÐ=ùÖŽ¨îÉÞ@†ÞaÖ½ö.:+hÖˆÆnËÁ^œYÉÞ@†ntX¿ Wø(®ß¥÷€¡;Bÿ嫨Õ'½ =9®ã,Þ+äÒ{ÀÐýZ·×´H—Þ†Þúý•™g‘qÒ{ÀÐB«70JÞ—Þ†>aοntš<\ðyüBg2/³QïÒ{àL‡ Ô¥•+íJè!uØ`:lœúfŸÆÃyµaèŽÆþîHuΫ C(ôˆçÕ†¡'ûX'ÿ×fÔ!uX†ÞúNÛyN)CŸý}æÃäáœï Ý¢pb¤ñpÁ8¦ìT:ûQdœTºCôuÖˆÕ'U`†ÝlíUÖfÔ!U`†žQèÎK.ÇT`üä="㤠ÌÐg˜Öa'Œc*p4}—–ñpÁ8¦Ç…ëþwãáéqýž3³¶ORcèŽÐï¹Õ1³Æw©Ç1ô×Næàá‚ïLCc¿Ö1¥E¾K=Ž¡wüäë|—÷Ç1ôÐßžÒÁÃù|ž¡Oøäë÷ …Ô"úÇ:ý'|—Zd0-2ê°Ökë÷Z$Cw4öXï½8£–Z$C4v[^ââŒZj‘ =#tGjòpÁwvF+B¿?qY\¿‡<£•¡Oôäß'‰M.Ç”Ð@§ežÇœµ=êJh0%4òG^âJ(C÷À'Ä^E_eH%”¡ûû±àá‚qL Âù´ÉÃãXo ̺µ?_üÂÊÞ@†> ú]l¼Ö­òæ>†>ãg‰!U`†nÑt'rH8˜ ŒÐ¯å5*® ¥ ÌС¿÷mœ‡ ¾38°Þª{VRfè‰Æþ…n*0Cïð½¯~™š:¤ ÌÐg¼“‡ Æ18†VÀ‡ Æ1 ÿquãá‚qLFcÏç‡ Æ18 çÓŒc*pàc'U`†ÞaÖÕoú©3ô ÇþRB'Œc*p”Pãá‚qLŽù£»uBªÀ Ý+àQ<ã%¤ ÌÐ>ù¹ÚïkŒ“*0CÏ(ÜV™<\0Ž©Àpì±.Óª1NªÀ }Bô¾øã¤ËÐ-Ð)©K ,îÛH6Xx Näy~Õ'{ÀºÃ±/oa‘q²œ¡B÷Œc=àèÉçr>'{Àz‡O~]ØX;ç$d8Ch챪Míþ÷ßèý;O~¢±Ç:ê£8§•è ÝòÔ{ÔÆÃ9ß“9z³þìÊl<œó¡{âÛiÏâ/) =ºµÕYâ{JçCÏ<µƒ=y8ç;Cý=·<œ3Ž¡O€n±kÊHJçC·4ý•1.ÇœY8£µñpÁ8æ|ÈÂ-¥ÎÃã˜ó>ù×W&x¸`s> 'g]Fm™ÒùÀÐBŸ‚>x¸`s> 'Ÿë´ÌÚ7.¥ó¡ÜĪzÿ‡ Ʊþw„þ¯QÊþw†îýþÈœÅ9mÊþw†}um\ű”ýï =³éSÔ’‡ Ʊþw„þ>mcòp‘óÌo“®ï7.ržùmuaçÓ½ßx¸Èyæ·Iäö±»ØÕü6)ý6 =Гß<\ä<óÛ ±÷å§­©)ý6 ½W²®óp¾Žcèý}+ñàáâÇü6ð½¿NI<\ðùm2ЮÑ2Ôø.ý6Éü6ý }Ð)ý6 ÝúèÇ,Þì“ÒoÃÐ#vçE+Î*¥ß†¡'ûýÚÏâ¬Rúmz‡èËRZÛ·Ié·aè=ù›q^ìPKé·aè–©;•Œ‡ Æ1¿M&+ï}òpÁwæ·IØû¿Ž˜©ñ]úm’ùmúºáåªò]úmºÃ±¿œNÎÃߙߢa§Túmz"ôw'ròpÁwæ·É®5èÎÃß;ã{×g¼ .øÎÜ>pìË{Pü¾K·C·ú\bãá‚ïÌíƒÐmÞÅ®¨ŒH·CwˆþúÊ8|gnŸÚÑ<\ð¹}z®¹MqF-Ý> ½ô?îï<\ðÝF Ǿr¾Õø.o£fè¾w;Fñô¼”^#†þq‹š]|g^#„>×VeqÇLzºgáÔçá‚ïÌk„Æþ•´ô1ôDcÿ5žO>y¸à;ó¡±ÛZ¿×üó)½F } ±·•óE¾Ë'úÌŸÝv‘ÒéÄÐ-Ñ «Ò¿ïÒé”ÌéÐmô£OQKétbèŽÆ>×)èE¾K§Cˆþò”|gN§,ÜÄ<\ð9Ð{ŸwÑy¸à;s:¡±¯¼ߥӉ¡Oˆ~­æÿߥӉ¡[?4ŸïÒéÔ™Ó ¡ÁwÑ¥Ó‰¡{G§¬œ÷:®Æ÷.N =ú:R»t:1ô„O>ÖÕ¼%¾wétbèŽ}õEÖvÈ»<ã…¡4v_76Ö¾ï]ú¬úìçλèÒgÅЭ;¼;ÏŠwët©€w¦€w|þü,ž ×¥Îнÿì~Ø.p†ÝÏ£·Ú÷½Kœ¡'zï_p2w©€3ôÞ¡÷`Yj|— 8C=Ön5—W— 8CŸ½pëÁäá‚ïLï¡ïP3.øÎp€n÷œ¶µõ{— 8Cw8ö×ý2ÎÃߙޯn ½Ö¹Ð¥ÎнGO˜éRgè޽Íjóù.p†>ÑØïµÔ<²Æ8©€óœO}£Sãá"ç™Þ;íþùÁì}ÝZWMÒÁÎТ¿v‰ƒ‡óJËР·{>ß‹gû é`gèÝ×um§tȳûú@c%A×fVCúçú„ïý®´³æ-Ò?ÏÐ?ÎfT÷I5Îù>˜“yø|C®ã[ÇAô—÷ ñp1v¶Žèt¬8Õ†­ãz_z\mßfÈuCO„~­±×öi‡\Ç1ôßûËñÒy¸¨6l%…Æ>V­«­¤†\IñœG³Ê±6­j9/×2ƒù*ÇŸ³J_;fYóUé«lV ÐíZwiÕfVCÎiº„ç]ô£vòÿ¾J†èɯ¾ÈêìBú*zô¸WRg•ïÒWÉÐ;zòn~´«Æwé«dèŽÝŸž“ÁÃÅì‚æ<ðYÝk‰«x'ò+©Á|VyÒ«Ö¹0¤Ïj°•ÔÀ' µY[Ç ¹ŽcèÐÿ¸½Îy¸à;óY!ô÷{.øÎ|Vð½_÷2²¸š>+†>!úâ{Í[8¤×ˆ¡ÛøsýÞÖé÷E-rH¯Ñ`ëw€¾î‹Œâ}RCî0tGc£¬Eé5bè1 ã¥=ú¤‚‡‹œg^#€îfÏs‰“‡‹œg~øäí©ˆM.ržfÝÏ£n­8³’»FƒyNæ OÏóâ rSjГ©ÿ³éS•çcŸl=QOh;zÖúß§\AO¶š@è_p2O¹‚fèŽÐßßwçá¼Ú0ô@èmÉ\Ì:¹‚fè9Þ9‹§¨M¹‚fè}.ÛEÍù0å š¡Û }o ñp‘óLèëT䫸…rÍн­ë&j{ÔSª =ÐØ¿pGê”j COˆ>î¥Tí ;¥ÈÐ;D¯ïM©2ô‰Þ»çÎÉäáüûþwô8ÛiÊÙÍùÃHü-çã´¿£û‰N×9ÿÌùøkÎÿþˆ=úXÇ”¶Oôàáÿ€Ä7С?oî‹¿æü¿áÿ€ä7Ð;|òqôOçCü5çÿ ÿÉï¼÷‰Ðsy¶'?yøÈüÎ{ÿ¸ãþõûúÆmYg<€ìèå<@õ›µœo2çËù¦Îîã9ßdÎ7–óýžÓnçòœo2çËù¦nlä9ßdÎ7–óM©À<ç›ÌùÆrÞÕ½<ç]æ¼³¯ŒkÆ5.¾2ÎrͨWÇJ1ç]æ¼³œwèâNﵜw™óÎrÞÕýq<ç]æ¼³œwÕ;ÀsÞeÎ;Ëy4Ÿ_~Úb™ótfP <{«å|Èœö• Ø­sî_Xçáâ+,çCõÃòœ™óÁr>t­ë<\ä|°œ—ÎFžó!s>XÎ#-òÊ#g-çSæ|²œ:ì\ èQËù”9Ÿ,çSWZçá"ç“}eà/ç=¡¯}eR~e’å|ªŽTžó)sž ˆ¾¼…Û“<ü¤gì=ù牜q)—Œq]9Ø9ãºd\gèCõAsô!ÑãûPw¨q¾É÷Áø>Tßçû|Œïî´QœUÉ÷Á¾°øÔ…³¿°C~a«6(ëbµ"תÍÕf°j#]Ü¼Ú Ym«6ðfŸÕ$V«6CV›ÁøŽ”П"ß§äûd|Ÿpmgñû>%ß'ã;º[g­ã¢Æ÷)ù>ßåí6œïSò}2¾ôG´âná”|ŸŒï=ç1zqv1%ß'c{?lß)<\0n2Æ]ð$±™­Æ¸K2î"èvê¬3ÎÑí$|Gè¹fVµ5ì'zûº¼íbŸWâû'º=úëTdÊ÷Oôøz¢±›÷ÍÙHùþ‰žß@ïðÉeã.ñý7z~ç½O8ö‡Gùþ}~ç½›<-3[í k&gŒq¨Ojä½”ª1Nêq ÝúSý猓zC„¾ºuÎ"ã¤ÇÐÓä-'œqRcè}y gí kRcèæüý…=k_X“zC7kê¼ Î8©ÇYcŒkê¬Nθ&ÇÔ@4öçé÷œqR dèÐ?v/jsZ“j CO„~­3™ksZ“j CïpìZ9ã¤ÈÐgå½O.ÇÔ@ ¨¿·^œUJeĘ2b¡îÚàŒ“ÊCw4öw¥u.Œq¡w ƒ‡ Æ1]=ù¶\EÆI]†¡wøäû‘YÓßMê2 }"ô·ãeòpÁ8¦ËXBgcëÅoœÔeŒé2–êô<Î8©Ë0tGèÏ“9ã¤.ÃÐ=ù>Üß{ðpÁ¸dŒè±D¡Vc\JÆ1U=ù¯0NªB }¢±{;Ψ)¡&u†þÑû©ö.Œ‡ ÆuƸŽtØë°âÎI—ŒëŒq}._eÍcö‰îß@€þ:ÇŒ3®KÆuƸþ#ïÁ'z~½£'ë”Ôâ:®KÆuÆ8”u£YÜ9é’qL‹´Ïp‹,îœH-Ò˜‰Ð—áfŒã¤ÉÐÝpGêUÝ«”Z$C„~¯a­¨EšÔ"zÚ€ò¨~ã¤ÉÐ|ïû"©hR dè¡ÿºŽÌâΉTº:Qª¯fàã¤hL ´ wÈÇUSMª ÝáØ_N'çá‚qL DèÏû¤8ã¤ÈÐ=ùX'À×qR dè¾÷×*²ópñcj zò¾º2‹³J©2t³Kã.pž•?•ÐÆÃã.ƸKšÈwIÆ]Œq—^ÃŒ»ã.Ý+”<\0îbŒ»ÐyVí°â^å%w1Æ]êrθK2Ž)àíÔsZãáœq)ཅcÖÖqM*à ÝÛ©»óœ‡sÆ1ô@O>–2RëkRgè ÇîÇYÔãšTÀú„c¯ï6©A3tk¦n%æ9/5èÆ4h„î«i£˜óRƒfèŽÐs³¸?ߤÍУ™:a†ç¼Ô z"ôç}<ç¥ÍÐge쓇‹œg*pk?šY5©7¦ôuSg/î×5©3tè¯;xÎK˜¡zòã:ÚU›Y5©3ôDè}9ZkûuMªÀ ½#t;¯£¸_פ ÌÐ'B;^&Œc*ps­ËŒc=¡ º®\¨í4ÙÊн¹Þ£v.Ç:RÑ“Ïë°bGj“© =!úËÍ›<\0Žõ„"ô¯ä¼ì eèÖ&µöik·&uØÆtX„žËéT[¿7©Ã2tGèsi‘Å™•Ôaz ô¶ö.Š« ©Ã2ôèí<Ÿ}ÉÃEÎ3ý=Ÿï<\|e˜ÛòG~Ú&uXþÞ»Þ§ .Þ;ÓãÚ€³9ŠO^v*5¶?ߦîÂ6.ª ÛŸèí\7´Ö\MîÏ3toøfÞQ]ÇÉýy†èÉ¿U¡àá"ëØþ|›ÚO›<\T¶?Пw&òœ—ûó }À±ßë÷QëÎûÞ¿óäg“·ÓòZ'Õ†níR7:q¾Ku 1u [_M™E¾Ku€¡;ûÌçÙ>ÎÃß™:Ÿ|ÝWÙ¤:ÀС[®Ë6j|—êCïý+|—êCŸ=Ï{rQdœTºù sþ*öúTœ©=ו µ5¬Ku€¡;B¿gQëÖq©0ô@èϳ:)ã\ª =á“í'çŒcè¡û:¹¶SêR`èæ¨[gí×s^ªÎÔ7¨þ·,æ¼Tº£±ÿòõ‰­å¼Tz ô{v‘½¶†u©0ôDOþysÏy©0ôþ—¬{œØy8ÿÊ0ô‰Ðß3«ÉÃã˜6á…ýyãá‚qL›@è}]fUÓ&\j Ýz¬ òâWFj =¼Aw.µ †žhì¾vJ‹Œ“ÚCŸhìKÅœ—êC7ÇwagqïÂ¥:àLpy+1Ïy©0tGcÞÇs^ª =ÐØ×ä&k{.Õ†ž½­fFqf%Õ†>Ñ“÷µ_Wó]¸Tºy@u Gqf%û"õE::9pÕYs°»ì‹dèî…ó*‡‹œg}‘hìwµéW­KËe_$CO4ö\÷Çs^öE2ô‰Æ~­S•Šu^v&2ô{Ý¢n³â9/1gŠ˜§®u‡‹œgŠ»¯Ž•š ìRcèÆ¾Ü¼³8·‘ŠCO4ö\¶ÊbÎKEŒ¡O4öuü½]µœ—šC7ï?ò”ºì tÖÐ-ç‘Wq>/{º£±¿Ï·q.ržõ"ôç=#<ç¥ÈÐ=ùÖŽ¨îÉÞ@†ÞaÖ½ö.:+hÖˆÆnËÁ^œYÉÞ@†ntX¿ Wø(®ß¥÷€¡;Bÿ嫨Õ'½ =9®ã,Þ+äÒ{ÀÐýZ·×´H—Þ†Þúý•™g‘qÒ{ÀÐB«70JÞ—Þ†>aοntš<\ðyüBg2/³QïÒ{àL‡ Ô¥•+íJè!uØ`:lœúfŸÆÃyµaèŽÆþîHuΫ C(ôˆçÕ†¡'ûX'ÿ×fÔ!uX†ÞúNÛyN)CŸý}æÃäáœï Ý¢pb¤ñpÁ8¦ìT:ûQdœTºCôuÖˆÕ'U`†ÝlíUÖfÔ!U`†žQèÎK.ÇT`üä="㤠ÌÐg˜Öa'Œc*p4}—–ñpÁ8¦Ç…ëþwãáéqýž3³¶ORcèŽÐï¹Õ1³Æw©Ç1ô×Næàá‚ïLCc¿Ö1¥E¾K=Ž¡wüäë|—÷Ç1ôÐßžÒÁÃù|ž¡Oøäë÷ …Ô"úÇ:ý'|—Zd0-2ê°Ökë÷Z$Cw4öXï½8£–Z$C4v[^ââŒZj‘ =#tGjòpÁwvF+B¿?qY\¿‡<£•¡Oôäß'‰M.Ç”Ð@§ežÇœµ=êJh0%4òG^âJ(C÷À'Ä^E_eH%”¡ûû±àá‚qL Âù´ÉÃãXo ̺µ?_üÂÊÞ@†> ú]l¼Ö­òæ>†>ãg‰!U`†nÑt'rH8˜ ŒÐ¯å5*® ¥ ÌС¿÷mœ‡ ¾38°Þª{VRfè‰Æþ…n*0Cïð½¯~™š:¤ ÌÐg¼“‡ Æ18†VÀ‡ Æ1 ÿquãá‚qLFcÏç‡ Æ18 çÓŒc*pàc'U`†ÞaÖÕoú©3ô ÇþRB'Œc*p”Pãá‚qLŽù£»uBªÀ Ý+àQ<ã%¤ ÌÐ>ù¹ÚïkŒ“*0CÏ(ÜV™<\0Ž©Àpì±.Óª1NªÀ }Bô¾øã¤ËÐ-Ð)©K ,îÛH6Xx Näy~Õ'{ÀºÃ±/oa‘q²œ¡B÷Œc=àèÉçr>'{Àz‡O~]ØX;ç$d8Ch챪Míþ÷ßèý;O~¢±Ç:ê£8§•è ÝòÔ{ÔÆÃ9ß“9z³þìÊl<œó¡{âÛiÏâ/) =ºµÕYâ{JçCÏ<µƒ=y8ç;Cý=·<œ3Ž¡O€n±kÊHJçC·4ý•1.ÇœY8£µñpÁ8æ|ÈÂ-¥ÎÃã˜ó>ù×W&x¸`s> 'g]Fm™ÒùÀÐBŸ‚>x¸`s> 'Ÿë´ÌÚ7.¥ó¡ÜĪzÿ‡ Ʊþw„þ¯QÊþw†îýþÈœÅ9mÊþw†}um\ű”ýï =³éSÔ’‡ Ʊþw„þ>mcòp‘óÌo“®ï7.ržùmuaçÓ½ßx¸Èyæ·Iäö±»ØÕü6)ý6 =Гß<\ä<óÛ ±÷å§­©)ý6 ½W²®óp¾Žcèý}+ñàáâÇü6ð½¿NI<\ðùm2ЮÑ2Ôø.ý6Éü6ý }Ð)ý6 ÝúèÇ,Þì“ÒoÃÐ#vçE+Î*¥ß†¡'ûýÚÏâ¬Rúmz‡èËRZÛ·Ié·aè=ù›q^ìPKé·aè–©;•Œ‡ Æ1¿M&+ï}òpÁwæ·IØû¿Ž˜©ñ]úm’ùmúºáåªò]úmºÃ±¿œNÎÃߙߢa§Túmz"ôw'ròpÁwæ·É®5èÎÃß;ã{×g¼ .øÎÜ>pìË{Pü¾K·C·ú\bãá‚ïÌíƒÐmÞÅ®¨ŒH·CwˆþúÊ8|gnŸÚÑ<\ð¹}z®¹MqF-Ý> ½ô?îï<\ðÝF Ǿr¾Õø.o£fè¾w;Fñô¼”^#†þq‹š]|g^#„>×VeqÇLzºgáÔçá‚ïÌk„Æþ•´ô1ôDcÿ5žO>y¸à;ó¡±ÛZ¿×üó)½F } ±·•óE¾Ë'úÌŸÝv‘ÒéÄÐ-Ñ «Ò¿ïÒé”ÌéÐmô£OQKétbèŽÆ>×)èE¾K§Cˆþò”|gN§,ÜÄ<\ð9Ð{ŸwÑy¸à;s:¡±¯¼ߥӉ¡Oˆ~­æÿߥӉ¡[?4ŸïÒéÔ™Ó ¡ÁwÑ¥Ó‰¡{G§¬œ÷:®Æ÷.N =ú:R»t:1ô„O>ÖÕ¼%¾wétbèŽ}õEÖvÈ»<ã…¡4v_76Ö¾ï]ú¬úìçλèÒgÅЭ;¼;ÏŠwët©€w¦€w|þü,ž ×¥Îнÿì~Ø.p†ÝÏ£·Ú÷½Kœ¡'zï_p2w©€3ôÞ¡÷`Yj|— 8C=Ön5—W— 8CŸ½pëÁäá‚ïLï¡ïP3.øÎp€n÷œ¶µõ{— 8Cw8ö×ý2ÎÃߙޯn ½Ö¹Ð¥ÎнGO˜éRgè޽Íjóù.p†>ÑØïµÔ<²Æ8©€óœO}£Sãá"ç™Þ;íþùÁì}ÝZWMÒÁÎТ¿v‰ƒ‡óJËР·{>ß‹gû é`gèÝ×um§tȳûú@c%A×fVCúçú„ïý®´³æ-Ò?ÏÐ?ÎfT÷I5Îù>˜“yø|C®ã[ÇAô—÷ ñp1v¶Žèt¬8Õ†­ãz_z\mßfÈuCO„~­±×öi‡\Ç1ôßûËñÒy¸¨6l%…Æ>V­«­¤†\IñœG³Ê±6­j9/×2ƒù*ÇŸ³J_;fYóUé«lV ÐíZwiÕfVCÎiº„ç]ô£vòÿ¾J†èɯ¾ÈêìBú*zô¸WRg•ïÒWÉÐ;zòn~´«Æwé«dèŽÝŸž“ÁÃÅì‚æ<ðYÝk‰«x'ò+©Á|VyÒ«Ö¹0¤Ïj°•ÔÀ' µY[Ç ¹ŽcèÐÿ¸½Îy¸à;óY!ô÷{.øÎ|Vð½_÷2²¸š>+†>!úâ{Í[8¤×ˆ¡ÛøsýÞÖé÷E-rH¯Ñ`ëw€¾î‹Œâ}RCî0tGc£¬Eé5bè1 ã¥=ú¤‚‡‹œg^#€îfÏs‰“‡‹œg~øäí©ˆM.ržfÝÏ£n­8³’»FƒyNæ OÏóâ rSjГ©ÿ³éS•çcŸl=QOh;zÖúß§\AO¶š@è_p2O¹‚fèŽÐßßwçá¼Ú0ô@èmÉ\Ì:¹‚fè9Þ9‹§¨M¹‚fè}.ÛEÍù0å š¡Û }o ñp‘óLèëT䫸…rÍн­ë&j{ÔSª =ÐØ¿pGê”j COˆ>î¥Tí ;¥ÈÐ;D¯ïM©2ô‰Þ»çÎÉäáüûþwô<ÛiÊÙ˜ÍùÃHþ-çó´¿£û‰N×9ÿÌùükÎÿþˆ=úXÇ”¶Oôàáÿ€Ä7С?oîË¿æü¿áÿ€ä7Ð;|òqôOçCþ5çÿ ÿÉï¼÷‰Ðsy¶'?yøÈüÎ{ÿ¸ãþõûúÆmYg<€ìèå<@õ›µœo2çËù¦Îîã9ßdÎ7–óýžÓnçòœo2çËù¦nlä9ßdÎ7–óM©À<ç›ÌùÆrÞÕ½<ç]æ¼³¯ŒkÆ5.¾2ÎrͨWÇJ1ç]æ¼³œwèâNﵜw™óÎrÞÕýq<ç]æ¼³œwÕ;ÀsÞeÎ;Ëy4Ÿ_~Úb™ótfP <{«å|Èœö• Ø­sî_Xçáâ+,çCõÃòœ™óÁr>t­ë<\ä|°œ—ÎFžó!s>XÎ#-òÊ#g-çSæ|²œ:ì\ èQËù”9Ÿ,çSWZçá"ç“}eà/ç=¡¯}eR~e’å|ªŽTžó)sž ˆ¾¼…Û“<ü¤gì=ù牜q)—Œq]9Ø9ãºd\gèCõAsô!ÑãûPw¨q¾É÷Áø>Tßçû|Œïî´QœUÉ÷Á¾°øÔ…³¿°C~a«6(ëbµ"תÍÕf°j#]Ü¼Ú Ym«6ðfŸÕ$V«6CV›ÁøŽ”П"ß§äûd|Ÿpmgñû>%ß'ã;º[g­ã¢Æ÷)ù>ßåí6œïSò}2¾ôG´âná”|ŸŒï=ç1zqv1%ß'c{?lß)<\0n2Æ]ð$±™­Æ¸K2î"èvê¬3ÎÑí$|Gè¹fVµ5ì'zûº¼íbŸWâû'º=úëTdÊ÷Oôøz¢±›÷ÍÙHùþ‰žß@ïðÉeã.ñý7z~ç½O8ö‡Gùþ}~ç½›<-3[í k&gŒq¨Ojä½”ª1Nêq ÝúSý猓zC„¾ºuÎ"ã¤ÇÐÓä-'œqRcè}y gí kRcèæüý…=k_X“zC7kê¼ Î8©ÇYcŒkê¬Nθ&ÇÔ@4öçé÷œqR dèÐ?v/jsZ“j CO„~­3™ksZ“j CïpìZ9ã¤ÈÐgå½O.ÇÔ@ ¨¿·^œUJeĘ2b¡îÚàŒ“ÊCw4öw¥u.Œq¡w ƒ‡ Æ1]=ù¶\EÆI]†¡wøäû‘YÓßMê2 }"ô·ãeòpÁ8¦ËXBgcëÅoœÔeŒé2–êô<Î8©Ë0tGèÏ“9ã¤.ÃÐ=ù>Üß{ðpÁ¸dŒè±D¡Vc\JÆ1U=ù¯0NªB }¢±{;Ψ)¡&u†þÑû©ö.Œ‡ ÆuƸŽtØë°âÎI—ŒëŒq}._eÍcö‰îß@€þ:ÇŒ3®KÆuƸþ#ïÁ'z~½£'ë”Ôâ:®KÆuÆ8”u£YÜ9é’qL‹´Ïp‹,îœH-Ò˜‰Ð—áfŒã¤ÉÐÝpGêUÝ«”Z$C„~¯a­¨EšÔ"zÚ€ò¨~ã¤ÉÐ|ïû"©hR dè¡ÿºŽÌâΉTº:Qª¯fàã¤hL ´ wÈÇUSMª ÝáØ_N'çá‚qL DèÏû¤8ã¤ÈÐ=ùX'À×qR dè¾÷×*²ópñcj zò¾º2‹³J©2t³Kã.pž•?•ÐÆÃã.ƸKšÈwIÆ]Œq—^ÃŒ»ã.Ý+”<\0îbŒ»ÐyVí°â^å%w1Æ]êrθK2Ž)àíÔsZãáœq)ཅcÖÖqM*à ÝÛ©»óœ‡sÆ1ô@O>–2RëkRgè ÇîÇYÔãšTÀú„c¯ï6©A3tk¦n%æ9/5èÆ4h„î«i£˜óRƒfèŽÐs³¸?ߤÍУ™:a†ç¼Ô z"ôç}<ç¥ÍÐge쓇‹œg*pk?šY5©7¦ôuSg/î×5©3tè¯;xÎK˜¡zòã:ÚU›Y5©3ôDè}9ZkûuMªÀ ½#t;¯£¸_פ ÌÐ'B;^&Œc*ps­ËŒc=¡ º®\¨í4ÙÊн¹Þ£v.Ç:RÑ“Ïë°bGj“© =!úËÍ›<\0Žõ„"ô¯ä¼ì eèÖ&µöik·&uØÆtX„žËéT[¿7©Ã2tGèsi‘Å™•Ôaz ô¶ö.Š« ©Ã2ôèí<Ÿ}ÉÃEÎ3ý=Ÿï<\|e˜ÛòG~Ú&uXþÞ»Þ§ .Þ;ÓãÚ€³9ŠO^v*5¶?ߦîÂ6.ª ÛŸèí\7´Ö\MîÏ3toøfÞQ]ÇÉýy†èÉ¿U¡àá"ëØþ|›ÚO›<\T¶?Пw&òœ—ûó }À±ßë÷QëÎûÞ¿óäg“·ÓòZ'Õ†níR7:q¾Ku 1u [_M™E¾Ku€¡;ûÌçÙ>ÎÃß™:Ÿ|ÝWÙ¤:ÀС[®Ë6j|—êCïý+|—êCŸ=Ï{rQdœTºù sþ*öúTœ©=ו µ5¬Ku€¡;B¿gQëÖq©0ô@èϳ:)ã\ª =á“í'çŒcè¡û:¹¶SêR`èæ¨[gí×s^ªÎÔ7¨þ·,æ¼Tº£±ÿòõ‰­å¼Tz ô{v‘½¶†u©0ôDOþysÏy©0ôþ—¬{œØy8ÿÊ0ô‰Ðß3«ÉÃã˜6á…ýyãá‚qL›@è}]fUÓ&\j Ýz¬ òâWFj =¼Aw.µ †žhì¾vJ‹Œ“ÚCŸhìKÅœ—êC7ÇwagqïÂ¥:àLpy+1Ïy©0tGcÞÇs^ª =ÐØ×ä&k{.Õ†ž½­fFqf%Õ†>Ñ“÷µ_Wó]¸Tºy@u Gqf%û"õE::9pÕYs°»ì‹dèî…ó*‡‹œg}‘hìwµéW­KËe_$CO4ö\÷Çs^öE2ô‰Æ~­S•Šu^v&2ô{Ý¢n³â9/1gŠ˜§®u‡‹œgŠ»¯Ž•š ìRcèÆ¾Ü¼³8·‘ŠCO4ö\¶ÊbÎKEŒ¡O4öuü½]µœ—šC7ï?ò”ºì tÖÐ-ç‘Wq>/{º£±¿Ï·q.ržõ"ôç=#<ç¥ÈÐ=ùÖŽ¨îÉÞ@†ÞaÖ½ö.:+hÖˆÆnËÁ^œYÉÞ@†ntX¿ Wø(®ß¥÷€¡;Bÿ嫨Õ'½ =9®ã,Þ+äÒ{ÀÐýZ·×´H—Þ†Þúý•™g‘qÒ{ÀÐB«70JÞ—Þ†>aοntš<\ðyüBg2/³QïÒ{àL‡ Ô¥•+íJè!uØ`:lœúfŸÆÃyµaèŽÆþîHuΫ C(ôˆçÕ†¡'ûX'ÿ×fÔ!uX†ÞúNÛyN)CŸý}æÃäáœï Ý¢pb¤ñpÁ8¦ìT:ûQdœTºCôuÖˆÕ'U`†ÝlíUÖfÔ!U`†žQèÎK.ÇT`üä="㤠ÌÐg˜Öa'Œc*p4}—–ñpÁ8¦Ç…ëþwãáéqýž3³¶ORcèŽÐï¹Õ1³Æw©Ç1ô×Næàá‚ïLCc¿Ö1¥E¾K=Ž¡wüäë|—÷Ç1ôÐßžÒÁÃù|ž¡Oøäë÷ …Ô"úÇ:ý'|—Zd0-2ê°Ökë÷Z$Cw4öXï½8£–Z$C4v[^ââŒZj‘ =#tGjòpÁwvF+B¿?qY\¿‡<£•¡Oôäß'‰M.Ç”Ð@§ežÇœµ=êJh0%4òG^âJ(C÷À'Ä^E_eH%”¡ûû±àá‚qL Âù´ÉÃãXo ̺µ?_üÂÊÞ@†> ú]l¼Ö­òæ>†>ãg‰!U`†nÑt'rH8˜ ŒÐ¯å5*® ¥ ÌС¿÷mœ‡ ¾38°Þª{VRfè‰Æþ…n*0Cïð½¯~™š:¤ ÌÐg¼“‡ Æ18†VÀ‡ Æ1 ÿquãá‚qLFcÏç‡ Æ18 çÓŒc*pàc'U`†ÞaÖÕoú©3ô ÇþRB'Œc*p”Pãá‚qLŽù£»uBªÀ Ý+àQ<ã%¤ ÌÐ>ù¹ÚïkŒ“*0CÏ(ÜV™<\0Ž©Àpì±.Óª1NªÀ }Bô¾øã¤ËÐ-Ð)©K ,îÛH6Xx Näy~Õ'{ÀºÃ±/oa‘q²œ¡B÷Œc=àèÉçr>'{Àz‡O~]ØX;ç$d8Ch챪Míþ÷ßèý;O~¢±Ç:ê£8§•è ÝòÔ{ÔÆÃ9ß“9z³þìÊl<œó¡{âÛiÏâ/) =ºµÕYâ{JçCÏ<µƒ=y8ç;Cý=·<œ3Ž¡O€n±kÊHJçC·4ý•1.ÇœY8£µñpÁ8æ|ÈÂ-¥ÎÃã˜ó>ù×W&x¸`s> 'g]Fm™ÒùÀÐBŸ‚>x¸`s> 'Ÿë´ÌÚ7.¥ó¡ÜĪzÿ‡ Ʊþw„þ¯QÊþw†îýþÈœÅ9mÊþw†}um\ű”ýï =³éSÔ’‡ Ʊþw„þ>mcòp‘óÌo“®ï7.ržùmuaçÓ½ßx¸Èyæ·Iäö±»ØÕü6)ý6 =Гß<\ä<óÛ ±÷å§­©)ý6 ½W²®óp¾Žcèý}+ñàáâÇü6ð½¿NI<\ðùm2ЮÑ2Ôø.ý6Éü6ý }Ð)ý6 ÝúèÇ,Þì“ÒoÃÐ#vçE+Î*¥ß†¡'ûýÚÏâ¬Rúmz‡èËRZÛ·Ié·aè=ù›q^ìPKé·aè–©;•Œ‡ Æ1¿M&+ï}òpÁwæ·IØû¿Ž˜©ñ]úm’ùmúºáåªò]úmºÃ±¿œNÎÃߙߢa§Túmz"ôw'ròpÁwæ·É®5èÎÃß;ã{×g¼ .øÎÜ>pìË{Pü¾K·C·ú\bãá‚ïÌíƒÐmÞÅ®¨ŒH·CwˆþúÊ8|gnŸÚÑ<\ð¹}z®¹MqF-Ý> ½ô?îï<\ðÝF Ǿr¾Õø.o£fè¾w;Fñô¼”^#†þq‹š]|g^#„>×VeqÇLzºgáÔçá‚ïÌk„Æþ•´ô1ôDcÿ5žO>y¸à;ó¡±ÛZ¿×üó)½F } ±·•óE¾Ë'úÌŸÝv‘ÒéÄÐ-Ñ «Ò¿ïÒé”ÌéÐmô£OQKétbèŽÆ>×)èE¾K§Cˆþò”|gN§,ÜÄ<\ð9Ð{ŸwÑy¸à;s:¡±¯¼ߥӉ¡Oˆ~­æÿߥӉ¡[?4ŸïÒéÔ™Ó ¡ÁwÑ¥Ó‰¡{G§¬œ÷:®Æ÷.N =ú:R»t:1ô„O>ÖÕ¼%¾wétbèŽ}õEÖvÈ»<ã…¡4v_76Ö¾ï]ú¬úìçλèÒgÅЭ;¼;ÏŠwët©€w¦€w|þü,ž ×¥Îнÿì~Ø.p†ÝÏ£·Ú÷½Kœ¡'zï_p2w©€3ôÞ¡÷`Yj|— 8C=Ön5—W— 8CŸ½pëÁäá‚ïLï¡ïP3.øÎp€n÷œ¶µõ{— 8Cw8ö×ý2ÎÃߙޯn ½Ö¹Ð¥ÎнGO˜éRgè޽Íjóù.p†>ÑØïµÔ<²Æ8©€óœO}£Sãá"ç™Þ;íþùÁì}ÝZWMÒÁÎТ¿v‰ƒ‡óJËР·{>ß‹gû é`gèÝ×um§tȳûú@c%A×fVCúçú„ïý®´³æ-Ò?ÏÐ?ÎfT÷I5Îù>˜“yø|C®ã[ÇAô—÷ ñp1v¶Žèt¬8Õ†­ãz_z\mßfÈuCO„~­±×öi‡\Ç1ôßûËñÒy¸¨6l%…Æ>V­«­¤†\IñœG³Ê±6­j9/×2ƒù*ÇŸ³J_;fYóUé«lV ÐíZwiÕfVCÎiº„ç]ô£vòÿ¾J†èɯ¾ÈêìBú*zô¸WRg•ïÒWÉÐ;zòn~´«Æwé«dèŽÝŸž“ÁÃÅì‚æ<ðYÝk‰«x'ò+©Á|VyÒ«Ö¹0¤Ïj°•ÔÀ' µY[Ç ¹ŽcèÐÿ¸½Îy¸à;óY!ô÷{.øÎ|Vð½_÷2²¸š>+†>!úâ{Í[8¤×ˆ¡ÛøsýÞÖé÷E-rH¯Ñ`ëw€¾î‹Œâ}RCî0tGc£¬Eé5bè1 ã¥=ú¤‚‡‹œg^#€îfÏs‰“‡‹œg~øäí©ˆM.ržfÝÏ£n­8³’»FƒyNæ OÏóâ rSjГ©ÿ³éS•çcŸl=QOh;zÖúß§\AO¶š@è_p2O¹‚fèŽÐßßwçá¼Ú0ô@èmÉ\Ì:¹‚fè9Þ9‹§¨M¹‚fè}.ÛEÍù0å š¡Û }o ñp‘óLèëT䫸…rÍн­ë&j{ÔSª =ÐØ¿pGê”j COˆ>î¥Tí ;¥ÈÐ;D¯ïM©2ô‰Þ»çÎÉäáüûþwô~¶Ó”³±ÿ5çÿ _ ýo9ßOû;ºŸètóðÏœïÍùÃÿño Bë˜Òö‰<üøz"ôçÍ}ý¯9ÿoø? ù ôŸ|ýÓùÐÿšóÿ†€äwÞûDè¹¼FÛ“Ÿ<üd~ç½ÜqÿÇú}}㶬3@vôÆr ÇúÆÍZÎ7™óå|Sg÷ñœo2çËy€~Ïi·s yÎ7™óå|S76òœo2çËù¦T`žóMæ|c9ïêÞžó.sÞÙWÆ5ã_g9fÔ«c¥˜ó.sÞYÎ;tq§÷ZλÌyg9ïêþ8žó.sÞYλêà9ï2çå<šÏ/?m±Î‡Ìy:³ ¨ž½Õr>dÎûÊìÖ9÷/¬ópñ• –ó¡úay·Ìù`9ºÖu.r>XÎKg#Ïù9,ç‘y味–ó)s>YÎv®ô¨å|ÊœO–ó©+­óp‘óɾ2ðŒ—óžÐ×¾2)¿2Ér>UG*Ïù”9OÐD_ÞÂíÉþÒ¿3ö‰žüóÎDθ”ŒKƸ®ìœq]2®3ô¡ú 9úèƒñ}¨;Ô8߇äû`|ªo‚ó}H¾Æ÷wÚ(Î*‡äû`_X|êÂÙ‹_Ø!¿°ƒU”u±Z‘kÕfÈj3Xµ‘.n^m†¬6ƒUx³Ïj«U›!«Í`|GJèb\‘ïSò}2¾O¸‚¶³ø}Ÿ’ï“ñÝ­³ÖqQãû”|ŸŒïòvÎ÷)ù>ßz#Zq·pJ¾OÆw€žó½8»˜’ï“1½¶ï”N.7ã.x’ØÌVcÜ%wt;uÖçèv¾#ô\3«Úö½}Ý Þv±ŽÏ+ñýÝ¿ýu*2åû'z|=ÑØÍûæl¤|ÿDÏo wøäDzq—øþ=¿óÞ'ûC£|ÿ>¿óÞÍ ž–™­ö…5“Œ3Æ8Ô'5ò^JÕ'õ8†îý©þsÆI=Ž¡B_Ý:g‘qRcèiò–Î8©Ç1ôŽÆ¾¼…³ö…5©Ç1ô sþþžµ/¬I=Ž¡›5uÞgœÔã¬1Æ5uV'g\“Œcj ûóô{Î8©2ô@軵9­I5¡'B¿Ö™Ìµ9­I5¡w8öÇ ­œqR dè³òÞ'Œcj Ôß[/Î*¥2bL±PwmpÆIe„¡;û»Ò:Œ Ƹл…ÁÃã˜.ƒž|[®"ã¤.ÃÐ;|òýȬéï&u†>úÛñ2y¸`Óe,¡³±õâ7Nê2ÆtKuzgœÔeº#ôçÉÀœqR—aèž|ŸGîï=x¸`\2ÆôX¢P«1.%ã˜*„žüW'U!†>ÑØ½gÔ”P“º CÿèýT{ÆÃã:c\G:ìuXqç¤KÆuÆ8€>—¯²æ1ûD÷o @cÆ×%ã:c\ÿ‘÷à=¿ÞÑ“uJjq×%ã:cʺю,îœtÉ8¦EÚ€g¸EwN¤iL‹DèËp3FqR‹dèn¸#õªîUJ-’¡B¿×°VÔ"Mj‘ =m@yT¿qR‹dè¾÷Ç}‘T 4©2ô‰Ð]GfqçDª Ý (ÕW3pqR 4¦Ú„;ä㪩&Õ@†îpì/§“ópÁ8¦"ôç}RœqR d艞|¬à‹ë8©2ôßûkÙy¸øÆ15=y_]™ÅY¥TºÙ¥wȇ Æ]Œq8ÏÊŸJhãá‚qcÜ¥NM䌻$ã.ƸK¯aƒ‡ Æ]Œq—îJ.w1Æ]è<«vXq¯ò’Œ»ã.u 9gÜ%Çðvê9­ñpθÆp€ÞÂŽ1kë¸&p†îíÔÝyÎÃ9ãz 'K©õÇ5©€3ô„c÷ã,êqM*à }±×w ›Ô º5S·óœ—tc4B÷Õ´QÌy©A3tGè9ŽYÜŸoRƒfèÑL0Ãs^jÐ =úó¾ žóRƒfè³2öÉÃEÎ3¸µͬšTSúº©³÷ëšTºô× <ç¥ ÌÐ=ùqíªÍ¬šTz"ô¾­µýº&U`†Þº×QܯkRfè¡¿/“‡ Æ1¸¹ÖeŒ‡ ƱžÐ†N ]W.Ôvšì eèÞ\ïQ;Œc©èÉçuX±#µÉŽT†žýåæM.ÇzBúWr^ö„2tkH“Zû´5çC“:lc:,BÏåtª­ß›Ôaº#ô¹´ÈâÌJê° =z[{ÅÕ„ÔazôvžÏ¾‰äá"癋ÆþžÏw.¾2L‡mù#?m“:,ï]ïÓïéqm@ÙÅ'/;•ÛŸoSwaÕ†íÏôv®Zk®&÷çº7|3郞ãäþàØïõû¨uçýFïßyò³ÉÛiy­“êC·v©8ߥ:И:Э¯¦Ì"ߥ:ÀÐ}æólçá‚ïL€O¾î«lR`è‰Ð-×e5¾Ku€¡w„þ¾Ku€¡O„žç=¹(2Nª Ýü„9ûa]ªÎÔ„žëÊ…ÚÖ¥:ÀСߌ³¨uë¸Tz ôçY”q.Õ†žðÉ¿v‰“‡sÆ1ô‰Ð}Š\Û)u©0tsÔ­³öëŠ9/Õgê€Tÿ[s^ª ÝÑØùúÄÖr^ª =ú=»È^[úTz¢'ÿ¼¹ç¼TzÿKÖ=Nì<œeúDèï™Õäá‚qL›ðÂþ¼ñpÁ8¦M ô¾.³ªi.µ †î=Öyñ+#µ †Þ ‹;‹ÎF—ÚCO4v_;¥EÆIm‚¡O4ö%ŒbÎKu€¡›ã»°³¸wáRp¦¸¼•˜ç¼Tº£±?ïÎã9/Õ†hìkr“µ½ —êCO€ÞÖ 3£8³’êCŸèÉûÚ¯«ù.\ª Ý< :У8³’}‘Îú"¸Îê¬9Ø]öE2t÷Ây•ÎÃEγ¾H4ö»Úô«Ö¥å²/’¡'{®ûãŠ9/û"úDc¿Ö©JÅ:/;ú½nQ·Yñœ—Š˜3EÌS׺ÆÃEÎ3E ÝWÇJMv©ˆ1ô@c_nÞYœÛHEŒ¡'{.[e1ç¥"ÆÐ'û:þÞ®ZÎKMŠ¡›÷yJ]ö:ë è–óÈ«8Ÿ—½ ÝÑØßçÛ89ÏzúóžžóR d艞|kGTwdo Cï0ë^{‡‹4ë Dc·å`/άdo C7:¬ß„+ž8á²7ÐYo @·¶Nˬù.\ö2tGcw";Œc½hì_Ù§•½ =ÑØ¿pn¡ËÞ@†Þ!úÚ1«~ïRýgè¡Ïåt*îËÞ@†þÑ#Î-´êZFzœy;|×ïÒ{ÀСÿòUìjŒ“Þ†Žœ×qïré=`è‰Æ~­[ÈkZ¤KïCïýþÊ̳È8é=`è¡Õ%ïKïCŸ0ç_7:M.øÎ¼~¡3™—Ù¨Æwé=p¦ÃêÒÊ•v%ô:l06N}³Oãá¼Ú0tGcw¤:çÕ†¡GzÄ‚‡ójÃÐ}¬“ÿk3ê:,Cïý §m„<§”¡O„þ>óaòpÎw†nQ81Òx¸`Sv*ý(2NªÀ Ý!ú:kÄjŒ“*0C€n¶ö*k3ê*0CÏ(tç%Œc*0~òžG‘qRfè3Lë°“‡ Æ18š¾KËx¸`ÓãÂuÿ»ñpÎô8„~ÏŽYÛ§ ©Ç1tGè÷Üê˜Yã»Ôãz„k'sðpÁw¦Ç¡±_ë˜Ò"ߥÇÐ;~òu¾Ëûãú@èoOéàá|>ÏÐ'|òõ{…Bj‘ ýcþ¾K-2˜uXëµõ{H-’¡;{¬÷^œQK-’¡»-/qqF-µH†žº#5y¸à;;£¡ßŸ¸,®ßCžÑÊÐ'zòï“Ä&ŒcJh Ó2ÏcÎÚuH%4˜ù#/qH%”¡{àb¯¢¯2¤ÊÐý}XðpÁ8¦„Fá|Úäá‚q¬7fÝÚŸ/~aeo Cý.6^ëÖ ysCŸñ³ÎÄ*0C·è?º9¤ LFè×òWÐRfèŽÐßû6ÎÃß™ XoÕ=+©3ôDcÿB·NH˜¡wøÞW¿LÍGRfè3 ÞƒÉÃ㘠C+àÆÃ㘠Ðÿ8ºñpÁ8¦£±¿çóÎÃ㘠…óiƒ‡ Æ18ð1‹Œ“*0Cï0ëê7}„Tú„c)¡“‡ Æ18 J¨ñpÁ8¦ÇüÑÝ:!U`†îð(žñRfèŸü\í÷5ÆI˜¡gn«L.ÇT`8öX—iÕ'U`†>!z_|qR‡eèè”Ô¥÷m¤¬dá–Rçá‚qÌùŸüë+<\0Ž9Г¿³.£¶ŠLé|`è¡¿OA<\0Ž9ГÏuZfí—ÒùÀÐ?nbU½ÿÆÃãXÿ;Bÿ‚×(eÿ;Cw„~dÎâœ6eÿ;C€¾º6®bXÊþw†žÙô)jÉÃãXÿ;BŸ¶1y¸Èyæ·I×÷¿9Ïü6‰º°óéÞo<\ä<óÛ$rûØ]ìj~›”~†èÉ¿ï‡ .ržùmÐØûòÓÖÔÀ”~†Þ+Y×y8_Ç1ôÆþ¾•xðpñc~øÞ_§¤N.øÎü6h×h™j|—~›d~„þ…>è”~†î}ôcoöIé·aè‘»ó¢g•ÒoÃÐŽý~ígqV)ý6 ½Côe)­íÛ¤ôÛ0ô‰žüÍ8/v¨¥ôÛ0tËÔJÆÃã˜ß&žª”E‡[J¿ Cw8öëˆQ\ÇI¿ C4ösÝWSSúmz¢±¿ïÎK.Çü6 ='ë3ScœôÛ0ôпp:nJ¿ CŸ•÷>y¸à;óÛ$ìý_GÌÔø.ý6Éü6}ÝðrUù.ý6 ÝáØ_N'çá‚ïÌoÑ¿°S*ý6 =ú»9y¸à;óÛd×tçá‚ïñ½ë3^|gn8öå=(~ߥۇ¡[}.±ñpÁwæöAè6ïbWTF¤Û‡¡;D}eœ‡ ¾3·Oíh .øÎÜ>=×ܦ8£–n†Þú÷¿w.øÎn£†c_9ßj|—·Q3ô ß»£xz^J¯Cÿ¸ÅFÍ.Œ‡ ¾3¯BŸk«²¸c&½F ݳpê‚ópÁwæ5BcÿÊ Zzz¢±ÿÏ'Ÿ<\ðyÐØm­ßkþù”^#†>ÐØÛÊù"ßå‰ }æÏn»Hétbè–èÎ…Ui‹ßwétJætè6úÑŠ§¨¥t:1tGcŸëô"ߥӉ¡DyJƒ‡ ¾3§SnâN.øÎœN轿ϻè<\ð9ÐØ×ÞFïÒéÄÐ'D¿VóïÒéÄЭŸ?šÏwétêÌé„пà»èÒéÄн£SVÎ{Wã{—N'†ý ©]:zÂ'ëjÞß»t:1ôǾú"k;ä]žñÂл¯kß÷.}V }öóGç]té³bèÖÞgÅ»uºTÀ;SÀ;>~OëRgèÞv?l— 8C„îçÑ[íûÞ¥Îн÷/8™»TÀzïÐ{°¬N5¾Kœ¡„ë ·šË«Kœ¡Ï^¸õ`òpÁw¦€÷Ðw¨|g 8@·{NÛÎÚú½Kœ¡;ûë~çá‚ïLGc·…^ë\èRgè‰ÆÞÎ#‹'Ìt©€3ôÇÞŽfµù|— 8CŸhì÷ZjYcœTÀyΧ¾Ñ©ñp‘óLïž,Ôgñ +±Îô¸Ž÷¨­Ç.÷ç;SúüÑý2]îv¶WÙ/Ý}ßx¸@gë¸aÈk”GqŸvHÿü`v€¾n-Œ«¦Œ é`gèÑ_»ÄÁÃy¥eè ÐÛ=Ÿïų}†t°3ôŽÆîkº¶S:äÙ} } ±Ç’ k3«!ýó }Â÷~WÚYóéŸgèg3ªû¤ç|ÌÉ<üG¾‹!×qƒ­ã úË{Ðx¸;[Çô?:Vœ‡‹jÃÖq½/=®¶o3ä:Ž¡'B¿ÖØkû´C®ãz‡ïýåxé<\T¶’Bc«ÖÕVRC®¤xΣYåX›Vµœ—k™Á|•ãÏY¥¯³¬ù*‡ôU6«èv­»´j3«!ç´ ÝGÂó.úQ;ùH_%CôäW_duv!}• =zÜ+©³Êwé«dè=y7?ÚUã»ôU2ôÇîOÏÉàábvAsø¬îµÄU¼yÈ•Ô`>«¼FéÇUë\Òg5ØJjà“…Ú¬­ã†\Ç1tèÜ^ç<\ðù¬úû½|g>+øÞ¯{Y\MHŸCŸ}ñ½æ-ÒkÄÐmü¹~oëôû¢9¤×h°õ;@_÷EFñ>©!wº£±QÖ"‡ô1ôÐñÒ}RÁÃEÎ3¯@w³ç¹ÄÉÃEÎ3¿ |òöTÄ&9O³î‚çQ·VœYÉ]£Á<'ó„§çyñ¹)5èÉÔÿÙô©J‡ó±O¶‚ž¨'´=kýïS® '[M ô/8™§\A3tGèïï»óp^mz ô¶Îd.f\A3ôœÅSÔ¦\A3ôŽÆ>—í¢æ|˜rÍÐm†¾7Ðx¸Èy¦Œôu*òUüÂN¹‚fèŽÆÞÖuµ=ê)Õ@†hì_¸#uJ5¡'D÷Rªö…R dè¢×w¦TúDïÝÇsçdòpþ}ÿ;ú8Û‰t™³Ÿ|ÍùÃÈø[ÎÓþŽîý^CŸúûøkÎÿþˆ= ú²ûÌOôàáÿ€Ä7Т¯Cܶ'Ÿ<üüzÇOþFïŸè‡€äwÞû„èiGlO~òðù÷þqÇýŸÕæ<ú–uÆÃÈŽÞXÎ#ô<kµœo2çËyt²Ð=¹Ù³.x¸ÈùÆr¡÷¾©À<ç›ÌùÆr=yïÛœ–ç|“9ßXÎ#ô{j•½–óMæ|c9ïñœ´ZλÌyg_׌k<\|eœå<Ô"ÛƒqÁÃEÎ;ËyÇ]™-j9ï2çå<¾K«QËy—9ï,ç!úeG±Î»Ìyg9O×iå:2çéÌ Í*§=ªMãá"çƒ}eÐØ×aܳö• ù• –óhìvϬŠ92çƒå|èZ×y¸Èù`9Ð?¶j92çƒå|BÆjO™óÉrs2óñ}o<\ä|²œO]i‡‹œOö•Ixbd;zí+“ò+“,çÑØm”çó)sž ˆ~çüþäÿéßû„OþªÏ¬R2.ãÐNÃÊ_™.×:ºgä×sìÆÃú`|‡'NäcfÕx¸àû`|Gcx}òƒ‡‹j3XµcϬÎi‡¬6ƒñyÈ›?¾°ÆÃß'ãûD+©ç®Qãá‚ï“ñ=ÏÇØ‡ ¾OÆwx·Î|ì”|ŸŒïŸšÅÝÂ)ù>ßá“¿O¾ópÁ÷ÉÇ>{V“‡ ÆMÆ8Ôÿ×Ñgq—dÜEÐíÔYg<œ£ÛIøѳ?Ö2‡s¾3t‡èë̉Ú÷ýÝ¿ö·›>¢Ä÷Oôøz±/}m§ô=¿Þñ“_Ç:•øþ=¿óÞ'ûy¿°¿ÑçwÞ»™áû"­ö…5“Œ3Æ8xÓÇxì]4.Çô8ˆ>¯Í_Ç'õ8†ýþ¾ŸEÆI=Ž¡'B_Æ‹¢6aRcèŽ}œu\çá‚qLÃ9ßQûšÔ㺺kíú…5©ÇYcŒkø½Ÿ5mâ½}ÝáØ³=Þ»ópÁ8¦BôµjŒ“j COˆ¾Ú6jsZ“j CïxìëJæã¤ÈÐgå½O.ÇÔ@ ¬¿[qV)•cÊB·˜ù|ãá‚qLcUZçá‚qÁz·0x¸`Óeà“oÏ:Ÿ<\0Žé2pì÷:®×ôw“º CŸýåx™<\0Žé2µ‰ë¡Œcº Bÿ•ã±–i<\0Žé2}\X\ÇI]†¡|ò7㼦˘ÔezBôðÇŒ:y¸`S…à“ÿã¤*ÄÐ'»Çc쓇 Æ1]ƺ޻0.×ã:\ÞGqç¤KÆuƸŽï5Ù'º= Þ;àUÙ'z|=!zÝ{ð‰žß@ïðÉÇxìt.×ã:T½ºsÒ%ã˜iHÉxTZãá‚qL‹„èËpSdœÔ"ºCôkVµH“Z$Cˆ¾ŽÓ*2Nj‘ =m`ÿ|õ'µH†>ð{ßoê¤j I5¡Oˆþë*ïœH5¡›M¸~ï~Ô'Õ@cj B_;äWM 4©2tÇc:œ‡ Æ15¢g>ô÷àá‚qL „O>zU 4©2ôŽßûsÙy¸øÆ15>y•Ôäá‚qL ´Kã.Ô=Ê;'—dÜÅwá™U±sáÝ¿ðɿְÁÃã.ƸK÷ %Œ»ãºµ¨îU^’qc<>s›ÉÃã˜ÞN=§5ÎטŽÐÛº¸6«lRgèŽÐßÝyÎÃ9ãzÀ'çc÷ x8gCO<ö¨êqM*à }â±—w ›Ô º5¤EÞèÅÝÂ&5èÆ4hˆ¾ZFŠ9/5h†î½—÷ç›Ô z4¨¿[µ•T“4COˆþq¾N-ç¥ÍÐge쓇‹œg*pk?šY5©7¦#ôvÎj·N“*0Cw„þqðAm÷ I˜¡~ògU“jRfè Ñ{TÌMªÀ ½Côuôm¿®I˜¡Oˆþr¼L.ÇTàæZ—1.ÇzBúÇÕ:µÝƒ&{BºCô×µópÁ8Ö‘ Ÿ|?«©Mv¤2ô„è/7oòpÁ8ÖŠÑë9/{Bº5¨I]÷n<\ä<Óa!zúcç¤ñp‘óL‡…èÓûuÎÃEÎ3¢·||߃‡‹œg:,Bo§—s^ê° ½Ã±¿æó‡‹¯ Óa[þÈOÛ¤Ëß{×û´ÁÃÅ{gz\ØcÅ'/;•ÛŸoSwaÕ†íÏ#ôuýü¬¹>šÜŸgèŽÐ×ÞEu'÷çzÀ'ÿR…‚‡‹¬cûóÝË>«&÷çz‡è׳Îw.rž <öYíÎûÞ¿óä'»=V“‡‹ZÇÔvá•Tu +ÕÆÔ„n}TÌMª ÝñØ{µ;¯Iu€¡D¯û*›TzBtË8jê@“êCïý |—êCŸ=íñ•™<\0Ž©~âœ/öúTœ©={Uw©0t‡è똓Z·ŽKu€¡D¿'•EÜ¥:Àп÷ç.qòpÎ8†>!ºÇ7nòpžó Ývë<}ÆÃEÎ3uÀ «ÿÅp—êCw8ö5øÚWÆ¥:ÀТ_Ï3‚‡‹œgê|òvV].Õ†ÞáØãyr`çáü+ÃÐ'Dͬ&ŒcÚ„öç‡ Æ1m¢VÕ&\j Ý!új“*~e¤6ÁÐÃvq.µ †žpìaÕ5—ÚCŸpìK)æ¼Tº9<³±¼wáRp¦8<9Ð"ŽZÎKu€¡;û•ÕÓó\ª =àØ×䦘óR`è‰Ð[{:Ø“‡‹œgê|òþDŸ<\ä(Öy©I1tóþ#O©ËÞ@g½}]ÑÚŠu^ö2t‡coã<\ä<ë „è÷d±:·‘j COøä[”wdo Cï8ëž{‡‹4ë „c·¬ž8á²7¡ßS8xGjõÄ —½Îzº5¯žSê²7¡;û«Ùy¸`ë „cÿÂ>­ì dè Ç^?·Ðeo Cïýzh‡ ƱÞ@ˆ~ÕÞ@—½ Ý)¡Q_ËHï3ïÿÅùPô¸ô0t‡è¿<н.½ =úÚ§-Þ+äÒ{ÀТŸçc—<\0Žyà“·xhЇ Æ1ïDO5pðpî=`èç|VÏ)ué=`èæH‡ý½:§•Þg:lÀ.­¼ŽÚyH6˜§¾Ù§ñp^mºÃ±¿:R‡ójÃÐ# =bÁÃyµaè Ç>®êŒ:¤ËÐ;D¯Ÿ¶òœR†>!úë̇ÉÃ9ߺEáÄHãá‚qLÜ©tÎÚþ|H˜¡;F_gÔ'U`†uØ^õ…TzF¡;/y¸`SÿòäïZ[cœTú„cé°“‡ Æ18š¾KËx¸`ÓãÂuÿ»ñpÎô8ˆ~©¸ORcèÑW±-ò]êq =µ“9x¸à;ÓãàØ¯V=y ¤ÇÐû_ž|™ïòþ8†> úËS:x8ŸÏ3ô‰Ÿ|ù^¡Z$C·ˆŸñ]j‘Á´È<£ŽÚú=¤ÉÐŽ=zyF-µH†pìÖªç×…Ô"z±¿:R“‡ ¾³3Z!º·êú=ä­ }Fè“Ä&ŒcJhÀÓ2­z×FH%4˜ù#/qH%”¡{ü儨bo`H%”¡ûë±àá‚qL Âù´ÉÃãXo κY½['do Cý^E^µn7÷1ô?ëL ©3t‹þ£;‘CªÀÁT`ˆ~ͪ RfèÑ_û6ÎÃß™ »÷«{VRfè Ç^ïÖ ©3ôŽß{{(b‡ ¾38 ÞƒÉÃ㘠C+àÆÃ㘠ŒÐßçQ7.ÇT`8ö×|Þy¸`S£p>mðpÁ8¦Ç_nl¬®a¥ ÌÐ;κòM!U`†>ñØGµ?.¤ ÌÐ- J¨ñpÁ8¦ÇüÑÝ:!U`†îpìqUÏx ©3ôÀO~¶£¦‡TzFá¶Êäá‚qLÆc;Š«H©3ô‰ÑÇY<Ç,¤ËÐ-à)©ó±sb<\0Žõ€ìD¾·7.ÇzÀñدÇÜÆy¸`ë‡è¯Þàá‚q¬>ù{RY<ó!d8Cïpìͪ7}„ìgèŽ=fõþ÷ßèý;O~±ÇÓ_7y¸à;s>ä©÷¨‡s¾'s> ôÖÎê‰Ð) Ýó/·ÓW‘) =ß‘úøÊç|gè™§v°'ç|g袿æ6ƒ‡sÆ1ô‰ÐãŠ]Z) ÝÒôWÆx¸`s>dáŒÖÆÃã˜ó! ·”:ŒcÎŒnÕ¡S:zÂ'Q½g$¥ó¡ˆþ:}ðpÁ8æ|€Oþž]o=Hé|`è–M÷þŒcýï½î5JÙÿÎТ·òœ6eÿ;C„¾º6Š;¥)ûßz±¿NQK.Çúß!úë´ÉÃEÎ3¿Mº¾ÿÝx¸Èyæ·IØ…=«j`J¿ C÷ÄÝ÷6j~›”~†ðÉ¿î‡ .ržùmàØ{¯ª)ý6 ½W²®óp¾ŽcèŽýu+ñàáâÇü6ø½g™ïÒoÃÐï)ùˆj‡ZJ¿ C·LÝ©d<\0Žùm úhU‡[J¿ Cw zýtÜ”~†>+ï}òpÁwæ·I軸—‘ŵôÛ$óÛ ôuÃK•ïÒoÃÐýétr.øÎü6½¾S*ý6 =!ú«9y¸à;óÛd×tçá‚ïñ½ë3^|gn<öY=§4¥Û‡¡[}.±ñpÁwæöI|ô¨Î¨¥Û‡¡;F~eœ‡ ¾3·D9Zƒ‡ ¾3·D¿—2ŵ”n†Þúûþ÷ÎÃßÙmÔpìé=êÁÃß™×(ÿ⳪ê2ÒkÄÐ-§ž]|g^#ˆ>ŸÝ:‡ ¾3¯QN]p.øÎ¼Fý +hé5bè™ØoSíOé5bèŽÝÆã<êÎÃßÙ‰pì-O~ðpÁwætÊŸÝv‘ÒéÄÐ-ÿr'²¿ïÒé”Ìé„Ðm\U7oJ§Cw8ö™]#çá‚ïÌé„ÑGyý.N =³pwòpÁwæt‚ïýuÞEçá‚ïÌéǾû(ò]:úÄè7á‹;äÒéÄЭŸ?šÏwétêÌéÑ뾋.N Ýû‰÷ëŠg¸uétbèÑë©]:zâ'/àkß÷.N ½ã±÷Gï<œó¡8v:^ç|gèg]ù¼‹.}V Ý:ìϪ³±K¼3¼ÿåüùâ r]*à ÝûÏî‡íRgèѽU¿ï]*à =á{¯;™»TÀz‡èf^ÜŸïRgè¢GT]^]*à }ö­“‡ ¾3¼‡¾CÍx¸à;SÀ;<þªÞ+Ô¥ÎÐŽýu¿ŒópÁw¦€Ã±·³zú}— 8CO8övV»óºTÀz‡c·xx:|g 8ûÇ)­5ÆIœç|ê9ÏðÞñ|¾¿°RëLëÙ«¬Ž]îÏw¦ôù£ûeºÜ-ìl¯²_ºû¾ñpÎÖqÃ`ÿû,ê°Cúçs°#ôuka¯)#C:Øz`ôQ=ËkH;CO„ÞΫzçÂv†ÞáØã¬ž42äÙ} }À±§?ö*ç3+†>áØ/«öˆ éŸgèm4}ŸTãáœïƒ9™‡ÿÈw1ä:n°uFzcgë¸áºcÅy¸¨6lÑ{To¯rÇС·{ {Ööi‡\Ç1ôŽßûÓñÒy¸¨6l%Ÿü,+#C®¤xÎÃYåÈbök™Á|•Ì*Ý®GÎ|g³J„n×UõY 9§eè>ŸwÑj Cú*zÀ'Wyv!}• =zÜï½Êwé«dè>y·Y¼ÝfH_%Cpìí¬ê°Cú*yÎwì£.î] ¹’Ìg5 ×(« Cú¬[IAôk<ô¸ÆÃÅØ™Ï ¡¿o¯s.øÎ|VýõÞƒ‡ ¾3Ÿ|òí¬ž:¤ÏŠ¡Oœu–ÅSV†ô1t`ý~Ï«Zä^£ÁÖïÝòªÞ'5äîCw8öYÖ"‡ô1ôØñò¨6ÁÃEÎ3¯BwëÕÞ!½F }â¬{*b“‡‹œ§Y‡v®^UĆÜ5Ìs2O|z^ñ¹)5èÉÔÿÙô©J‡ó±O¶‚ž°'ÔŠ˜ñp^m&[M@ôº“yÊ4C÷éúûî<œW†ý^¿ÌS® zNÇ÷EOQ›rÍÐ;û¼ªÎ‡)WÐ Ýfè{‡‹œgÊB_7÷¿°S® ºÃ±»=VRÎÃEÎ35޽~Gê”j COŒ>úQûÂN©2ôŽÑË»FSª }â÷~UoâžR ü;ú<ÛùçõÇ!èþ}þ5çÿ _ óo9?Oû;ºô#^>÷.æ_sþßð@üèÐïé|ÿôÛÌ¿æü¿áÿ€Ä7С¯ãi¯íÉ'ÿ$¿Þá“¿'VŸÕfþ5çÿ ÿÉï¼÷‰ÐóØWŒý¦û¹a‡‹¯L°œc·v/a‹92çƒå|èZ×y¸Èù`9H¿ù^œÛ„Ìù`9ŸØ?Ÿ³–ó)s>YÎ'øÆµ£÷¨å|ÊœO–ó©+­óp‘óɾ29Yh^µ¯LʯL²œc·<¢:ŸO™ó}@ôy´ýÉþÒ¿3ö‰žüòWuf•’qÉtØqU×%ã:CGŠØxÎ*‡ ôÁø>ãüð^Ü=’ïƒñŒ=Ö ºÈ÷!ù>ßÜ=øÚ*|’ïƒ}aú´{vQüÂù…¬ÚŒ¿œŠœµj3dµ¬Ú ±·ÃÚ¬U›!«Í`ÕfàN¥YœÓYmã;RãŠ|Ÿ’ï“ñ}´Åïû”|ŸŒï`ì±ÖqQãû”|ŸŒï}®J[äû”|ŸŒï½Ç­¸[8%ß'ã;@Ïu]dqv1%ß'c{?lß)<\0n2Æ<æ1³ÕwIÆ]ÝNuÆÃ9º„ï=×̪¶†ýDoß@w;ñ‰RÅïû'º=ºµqœûÎIðpÎw†žvâ»°ÛUâû'z~½Ã'?®£×¾ï¿Ñó;ï}Ú_:ЯÚö7úüÎ{7Ú„#[í k&gŒq¨gdä½”ª1Nêq Ýú\û´µ]#“zC„~ßÛYdœÔãzôÕ;ŠÚ„I=Ž¡w4ö~>k_X“zCŸ0çï/ìYûšÔãºYCþºÃŠ_X“zœ5ƸßûyÖ´‰Oôö tGcÏÕ*T›ÓšTzXûË­…µ9­I5¡'B¿âH«ÍiMª ½Ã±ßÞk»Ä&Õ@†>+ï}òpÁ8¦Z@ý½õâ¬R*#Æ”€¾®\˜QÛ52©Œ0tGcWZçá‚qÁz·0x¸`ÓeГoËõQdœÔez‡O¾™5ýݤ.ÃÐ'B;^&ŒcºŒ!mbÜŒ+~ã¤.cL—è¿rgUüÆI]†¡;B_wu“º Côäû v"™Å©2t3ÔÙí¸²Æ8©SúÚ!WM 4©2t‡c9œ‡ Æ15¡çÚ»(®ã¤ÈÐ=ù{-sŽâ:Nª ½Ã÷þZEv.¾qL DOÞû½8«”j C7»ô¹ñpÁ¸‹1îOôþTBŒ»ã.8³jÅÎ…Otÿz 'ÿ^ÃŒ»ã.Ý+”<\0îbŒ»ð}RVÜ«¼$ã.Æ8€îy¯ãzq—dSÀÛ©ç´ÆÃ9ãSÀz ;þiÝÖŒkRgèÐÿèÎsÎÇÐ=ùXÊH­?®Iœ¡'»gQkRgè޽¾[ؤÍЭ-2–ºö•iRƒnLƒF辚6Š9/5h†î=Ç1‹ûóMjÐ =Òßm¿K‹ç¼Ô z6xJêǨå¼Ô ú¬Œ}òp‘óLníG3«&UàÆT`€ÞîEd/î×5©3tèÿ\bVÛ=hRfèžüºÔèªÍ¬šTz"ô¾­µýº&U`†Þújý/î×5©3ô‰Ðߎ—ÉÃ㘠Ü\ë2ÆÃãXO(@_‡ã¦Õvšì eèŽÐß{ÔÎÃãXG*zòë(¯bGj“© =!úËÍ›<\0Žõ„"ô¯ä¼ì eèÖ&µöik·&uØÆtX„žËéT[¿7©Ã2tGèsi‘Å™•Ôaz ô¶ö.Š« ©Ã2ôèí<Ÿ}ÉÃEÎ3ý=Ÿï<\|e˜ÛòG~Ú&uXþÞ»Þ§ .Þ;ÓãÚ€³9ŠO^v*5¶?ߦîÂ6.ª ÛŸèë¤Îh5×G“ûó Ýú’eFu'÷çz´©U¡àá"ëØþ|›ÚO›<\T¶?ЯvøUœÓÊýy†>àØïõû¨uçýFïßyò2nõˆgR`èÖÐ.ñ<®(ò]ª©}üß²Èw©0tGcŸù<ÛÇy¸à;Sà“¯û*›Tz"tËv´š:Ф:ÀÐ;Bÿ ߥ:ÀÐ'BÏóž\'Õ†n~œ¿Šý°.ÕgêBÏ8ù×.qòpÎ8†>ºçÑŠ;¥.Õ†nŽºuÖ~]1ç¥:àLpƒêËbÎKu€¡;û/_ŸØZÎKu€¡BŸëªÚÖ¥:ÀÐ=ùs½èúp©0ôþ—¬{œØy8ÿÊ0ô‰Ðß3«ÉÃã˜6á…ýyãá‚qL›@èýæ{Q›p©M0tGè±6È‹_©M0ôð]ÜYt6ºÔ&z¢±ûÚ)-2Nj }¢±?O€ç9/Õ†nvÈǺF¬¶–q©8Sß·Ý3Âs^ª ÝÑØ¯5/æ¼Tz ±¯ÉMÖö.\ª =z['ÌŒâÌJª }¢'ïk¿®æ»p©0tó€ê@âÌJöE:ë‹ttrà:«³æ`wÙÉÐÝ çU:9Ïú"ÑØïjÓ¯Z—–˾H†žhìÙ+z\öE2ô‰Æ~­S•Šu^v&2ô{ÝfK—)æ¼TÄœ)bžºÖ5.rž)bhì¾:Vj*°KEŒ¡ûróÎâÜF*b =ÑØsÙ*‹9/1†>ÑØ×ñ÷vÕr^jR ݼÿÈSê²7ÐYo @_7açUœÏËÞ@†îhìïómœ‡‹œg½}™ ‹½.Õ@†žèÉ·vDu×Hö2ô³îµwÑy¸XA³Þ@4v[öâÌJö2ts ÃúM¸â‰.{õôu!óY<§Ôeo Cw4öw'²ópÁ8ÖˆÆþ•}ZÙÈÐý çºì d袯³Úé÷.Õ†>úºJ«xª’ËÞ@†þÑ#Î-´êZFzœy;|×ïÒ{ÀСÿòUìjŒ“Þ†Žœ×qïré=`è‰Æ~Í#¬¦Eºô0ôŽÐï¯Ì<‹Œ“Þ†>úºElWçÞ†>aοntš<\ðyÝÔËlTã»ô8ÓauiåJ»zH6˜§¾Ù§ñp^mº£±¿;R‡ójÃÐ# =bÁÃyµaè‰Æ>ÖÉÿµuH–¡w„þ…Ó6BžSÊÐ'BŸù0y8ç;C·(œi<\0Ž©À;•Î~'U`†î}5b5ÆI˜¡@7[{•µuH˜¡gºó’‡ Æ1?yÏ£È8©3ô¦uØÉÃ㘠Mߥe<\0ŽéqáºÿÝx¸@gzB_·”ÎÚ>mH=Ž¡;B¿çVÇÌߥÇÐ#\;™ƒ‡ ¾3=ýZÇ”ù.õ8†Þñ“¯ó]ÞÇÐB{Jçóy†>ᓯß+R‹dèëôŸð]j‘Á´È¨ÃZ¯­ßCj‘ ÝÑØc½÷âŒZj‘ =ÐØmy‰‹3j©E2ôŒÐ©ÉÃßÙ­ýþÄeqýòŒV†>Ñ“Ÿ$6y¸`SB–ysÖö¨C*¡Á”ÐÈy‰C*¡ ÝŸ{}•!•P†hìï{Ä‚‡ Æ1%4 çÓ&Œc½0ëÖþ|ñ +{ú€èw±ñZ·NÈ›ûúŒŸu&†TºEÿÑÈ!Uà`*0B¿–ר¸‚–*0Cw„þÞ·q.øÎTàÀ x«îYI˜¡'ûºuBªÀ ½Ã÷¾úej>ê*0CŸQðL.ÇTàZ7.ÇT`€þÇyÔ‡ Æ1ý=Ÿw.ÇTà(œO<\0Ž©ÀolŒYdœTz‡YW¿é#¤ ÌÐ'ûK <\0Ž©ÀQPB‡ Æ18æîÖ ©3t¬€GñŒ—*0Cøäçj¿¯1NªÀ =£p[eòpÁ8¦ñǺL«Æ8©3ô ÑûàkŒ“:,C·@§¤.5°¸o#uØ`=à:‘çuøUcœìgèǾ¼…EÆÉp†ýÝ;<\0Žõ€£'ŸËùPdœìgè>ùuac휓=à } ±Çª6µûߣ÷ï<ù‰Æë¨âœVv 3tËSïQç|Oæ|èÍú³+³ñpÎw†î‰o§=‹g¼¤t>0ô@èÖVcd‰ï) =óÔöäáœï } ô÷ÜfðpÎ8†>ºÅjL¬)#) ÝÒôWÆx¸`s>dáŒÖÆÃã˜ó! ·”:ŒcÎøä__™àá‚qÌù€žüuµUdJçCý} úàá‚qÌù€ž|®Ó2k߸”Άþq«êý7.Çúßú¼F)ûߺ#ôû#sç´)ûßzôÕµq{ÄRö¿3ô̦OQK.Çúßúû´ÉÃEÎ3¿Mº¾ÿÝx¸Èyæ·IÔ…O÷~ãá"ç™ß&‘ÛÇîbWóÛ¤ôÛ0ô@Oþ}?lðp‘óÌoƒÆÞ—Ÿ¶¦¦ôÛ0ô^ɺÎÃù:Ž¡4ö÷­Äƒ‡‹oóÛÀ÷þ:%uòpÁwæ·É@»FË|Pã»ôÛ$óÛ ô/ôA§ôÛ0tG裳x³OJ¿ C Ø­8«”~†žpì÷k?‹³Jé·aè¢/Kimß&¥ß†¡OôäoÆy±C-¥ß†¡[¦îT2.Çü6™ðT¥,:ÜRúmºÃ±_GŒâ:Númz ±Ÿëþ¸š˜ÒoÃÐý}w^òpÁ8æ·Iè9YŸ™ã¤ß†¡„þ…ÓqSúmú¬¼÷ÉÃß™ß&aïÿ:b¦Æwé·Iæ·è놗«Êwé·aèÇþr:9|g~ˆþ…Ré·aè‰ÐßÈÉÃß™ß&»Ö ;|ïŒï]Ÿñ2x¸à;sûÀ±/ïAñû.Ý> Ýrès‰‡ ¾3·B·y»¢2"Ý> Ý!úë+ã<\ð¹}rhGkðpÁwæöAè¹æ6ŵtû0ôÐÿ¸ÿ½ópÁwv5ûÊùV㻼š¡OøÞíÅÓóRzúÇ-6jva<\ðyú\[•Å3é5bèž…Sœ‡ ¾3¯ûWVÐÒkÄÐý×x>ùäá‚ïÌk„Ænký^óϧô1ôÆÞVÎù.Oœ`è3vÛEJ§C·Dw.¬J[ü¾K§S2§@·ÑV!úµšÿk|—N'†nýüÑ|¾K§SgN'„þßE—N'†î²rÞë¸ß»t:1ô@è_èHíÒéÄÐ>ùXWó–øÞ¥Ó‰¡w8öÕYÛ!ïòŒ†>ÐØ}ÝØXû¾wé³b賟?:ï¢KŸC·îðî<+Þ­Ó¥Þ™Þñùó³x‚\— 8C÷þ³ûa»TÀz t?Þjß÷.p†žè½ÁÉÜ¥ÎÐ{‡Þƒeuªñ]*à } ôXg¸Õ\^]*à }ö­“‡ ¾3¼‡¾CÍx¸à;SÀºÝsÚvÖÖï]*à ÝáØ_÷Ë8|g 8»-ôZçB— 8CO4övYõN‡‹œg xïðd¡>‹_X©ˆu¦Çu¼Gm­8v¹?ß™:Ðçî—ér·°³½Ê~éîûÆÃ:[Ç C^£<Šû´Cúçs°ôuka\5edH;CˆþÚ%Î+-CO€Þîù|/ží3¤ƒ¡w4v_{ÔµÒ!Ïîcè=–]›Y éŸgè¾÷»ÒΚ·pHÿžwÑÚÉÿCú*z '¿ú"«³ é«dè Ðã^IU¾K_%CïèÉ»ùÑ®ߥ¯’¡8vzN³ šóÀgu¯%®âÈC®¤óY ä5J?®ZçÂ>«ÁVRŸ,Ôfm7ä:Ž¡;@ÿãö:çá‚ïÌg…Ðßï=x¸à;óYÁ÷~ÝËÈâjBú¬ú„è‹ï5oá^#†nãÏõ{[§ßµÈ!½Fƒ­ßúº/2Š÷I ¹{ÀÐ}Œ²9¤×ˆ¡Ç€Ž—öè“ .ržyº›=Ï%N.ržùmà“·§"6y¸Èyšu<ºµâÌJî æ9™'<=Ï‹'ÈM©AO¦þϦOUj<œ}²ôD=¡íèYëŸr=Ùj¡ÁÉ<å š¡;B߇ójÃС·u&s1ëä š¡çtx_ä,ž¢6å š¡w4ö¹l5çÔ+h†n3ô½ÆÃEÎ3e ¯S‘¯âvÊ4Cw4ö¶®›¨íQO©2ô@cÿ©Sª =!ú¸—Rµ/ì”j Cï½¾k4¥ÈÐ'zï>ž;'“‡óïûßѯ³Uàö¹O{ý5çÿ _ ×ßrþ:íïè~¾sás}ý5çÿ ÿÄ¿}¶ýŽ•ë¯9ÿoø? ñ ôDèWÞ¶'Ÿ<üüzGèyöéî»þšóÿ†€äwÞû„èý¸l{ò“‡€Ìï¼÷;î‘.“[Ö ;zc9Ð{î=¡<ç›ÌùÆr¾E̽–óMæ|c9ÐlÖr¾Éœo,çÁ“Ïå5ŠZÎ7™óå<û¹êü¬å|“9ßXÎ#—×56‡Ïy—9ïì+ãšq‡‹¯Œ³œGg¼ôãìÅœw™óÎrÞáiZÛͼ<ç]æ¼³œGïÝó˜­–ó.sÞYÎC=ζ}žó.sÞYμg¤Uë|Èœ§3«|?÷]bžó!s>ØW&à zì_Xçáâ+,çö€_½˜ó!s>X·®u‡‹œ–óÈÙèûù´<çCæ|°œÿËí6Ñk9Ÿ2ç“å|B¯Ñv§Ïù”9Ÿ,çSWZçá"ç“}ekŸçò¯LʯL²œcoë·â|>eÎôн×þäÿéßûDèwÊÏêÌ*%ã’1ÝjteÎâW¦KÆu†Žî™ÏY¥ñp>ßÜ!ßüuœïCò}0¾ƒ±Çµïœp¾É÷ÁøŽ½Ä>‹³Ê!ù>Øv@µEñ ;äv°jƒ²î~ô#kÕfÈj3XµùË/ÞkÕfÈj3XµAcïvôâœvÈj3ß‘z3®ù>%ß'ã;Рãq&3çû”|ŸŒïîÙ¾{à<\ð}2¾ãÓ6ü,ò}J¾OÆ÷ Ï=/îNÉ÷ÉøÐûZAgSò}2Æ¡±ÇûNéäá‚q“1î‚'n'NpÆ]’qA·SgñpŽn'á;Bï혳¶†ýDoß@w„¾ÌÅïû'º=ì„ç”Î}ç$x8ç;CO4öå¯k^âû'z~½Ã'¿ŽA¯}ߣçwÞû„co¶Ý'Eùþ}~ç½›!Mªí§çqÆ™dœ1Æ¡>©k§Õ'õ8†îý®6ã¬í™Ôãz ôÌÃ[‘qRcèi¨S)QÔ&Lêq ½£±yœgí kRcèæüyäUûšÔãºY÷œ¿°&õ8kŒq Þàvµš6ñ‰Þ¾îhì9;ksZ“j C„þ±{Q›ÓšTz¢'¿nXéµ9­I5¡w8öÛ}‘œqR dè³òÞ'Œcj \I¥g•R1¦Œô埿Fm×Ȥ2ÂÐÝBWZçá‚qÁz·0x¸`ÓeГ¿ëüy'u†ÞáØã˜­¦¿›Ôeú„9ÿr¼L.ÇtKx"t^ÅoœÔeŒé2ýW_mÅoœÔeº#ôË+ê2&u†èÉßK™Øß{ðpÁ¸dŒèw}F<\0Ž©BèÉ…qRbè}Ý™5%Ô¤.ÃÐ?z?ÕÞ…ñpÁ¸Î×ñ‰RQÜ9é’q1²r5Ù'º=ú:=¯µâ¬²KÆuƸþ#ïÁ'z~½£'Ÿm?)”3®KÆuƸŽïÏâÎI—ŒcZ¤e¤¯ÙEqçDj‘Æ´H„¾ 7×UcœÔ"ºt;¯ã¬îUJ-’¡{ÛOU⌓Z$CO4v›G¯~ã¤ÉЇÁžÐq„•Ô@“j CŸýâ¸F­?®Iœ¡'{î÷ÃRÆ5©€3ô‰Æþ…ÝÂ&5h†n h‘÷JÊ‹»…MjÐiÐ=ֹŜ—4Cw„>Æ‘Åýù&5h† éïí®´µ•T“4CO„þ«­S™k9/5h†>+cŸ<\ä<‹« ©Ã2ôDcoùì›H.ržé°ð½¿æó‡‹¯ Óa[þÈOÛ¤Ëß{×û´ÁÃÅ{gz\ÐcÖ{ñÉËN¥ÆöçÛÔ]ØÆÃEµaûóýþ¾Ý¾æúhrž¡{Cw¤ŽýF'^mäþ)ô*vç5©0ô@è_ðU6©0ôDè¶i­©Mª ½£÷þ¾Ku€¡O4ö\ÒD‘qR`èæ'¾Ù§ØëRp¦ ôáG¶ÚÖ¥:ÀР·s–µn—êC4ö¶tØã\ª =á“í'çŒcè¡g;ÎâN©Ku€¡›Ôels^ªÎÔG}R×ѯbÎKu€¡;ûº,³¸†u©0ô@c?Ï{ìµ5¬Ku€¡'Bo«3±6«t©0ôþ—¬{œØy8ÿÊ0ô‰Ðß3«ÉÃã˜6á…ýyãá‚qL›@èëö¢6áR›`èŽÐû:a¦ø•‘ÚC€¾\ÜQt6ºÔ&z¢±g?N+2Nj }¢±/i¤s^ª ÝÜáJ­¸wáRp¦8¼•8ï}-ç¥:ÀÐÝ‘6±N)æ¼Tz ±¯ÉÕö.\ª =ÑØÓžöäá"ç™:€²îFï^ó]¸Tº9èK?z+άd_¤³¾HG'öóq²Pãá"çY_¤Ϋt.ržõE¢±ÏÕZëÒrÙÉн÷‘G½F.û"úDègì7´òœ—‰ ÝõÇ­[ÌŠ9/1gŠ˜§®u‡‹œgŠ{.×GMv©ˆ1ô@cydç6Rcè‰Æ~O.²Zç¥"ÆÐ'û2¤×r^jR ݼÿÈSê²7ÐYo @_÷„úYœÏËÞ@†îhìïómœ‡‹œg½ÝbÅÞ@—j COôä}£ºk${z‡Y÷Ú»è<\¬ Yo {»Ç^<%Õeo C¿Ÿ2ð÷ýfÎ8Ùè¬7 ß$Þï‡åŒ“½ ÝÑØßÈÎÃãXo ûWöieo CO4ö/œ[è²7¡wˆ~«~ïRýgè=ù{FÝŠ§*¹ì dèë5pn¡U×2Ò{àÌ{€Ð¯5­+®ß¥÷€¡;Bÿuúi5ÆIïC€¾öi³x¯KïCO„n÷"2jZ¤KïCïèÉÛ:²±È8é=`è¡ÏÜop£Þ—Þ†>aοntš<\ðyüBçYÙ1ŠûuÒ{àL‡ Ô¥Õó^Ä–ÐCê°ÁtØ8õÍ>‡ójÃÐýÝ‘ê<œW†Qè Ϋ CO4ö9Ž+k3ê:,Cïý §m„<§”¡Oôäßg>LÎùÎÐ- 'FŒc*0BÿÐÄŠŒ“*0Cwˆþ+¯cÔ'U`†að¦Î«Ø/Rfè…î¼äá‚qLÆOÞ¯£È8©3ô‰ÆþÖa'Œc*p4}—–ñpÁ8¦Ç…ëþwãáéqÝr-¥j|—zCw„~Ï­nÊÕø.õ8†áÚÉ<\ðéqý\gûù.õ8†Þñ“¯ó]ÞÇÐB{Jçóy†>ᓯß+R‹dèñ3¾K-2˜gÔ3jë÷Z$C÷Àgu^QœQK-’¡{[þºâŒZj‘ =ÑØß©ÉÃßÙ­ýþÄEqýòŒV†>Ñ“Ÿ$6y¸`SB’ºÎ«¬íQ‡TBƒ)¡‘?ò‡TBºÃ±Çq}•!•P†hìï{Ä‚‡ Æ1%4 çÓ&Œc½},Yñ +{ú€èë|ÚZ·NÈ›ûúŒŸu&†TºEÿÑÈ!Uà`*0@·s݉\\AK˜¡;û{߯y¸à;SÑØÇ^ݳ’*0CO4ö/të„Tz‡ï½Ýóºš:¤ ÌÐg¼“‡ Æ18†VÀ‡ Æ1 ÿquãá‚qLFcÏç‡ Æ18 çÓŒc*pà‡'U`†ÞaÖÕoú©3ô ÇþRB'Œc*p”Pãá‚qLè_¹['¤ ÌÐ=°žÅ3^BªÀ =à“¿ìÈš Rfè…Û*“‡ Æ1Ž=ò£Æ8©3ô ÑïéE·ã¤ËÐ-@7®¯½‹â¾Ôaƒõ€ô_ÍÖUÜ5ÆÉp†îpìK+2Nö€3ô@èïÞàá‚q¬=ù~Q<ó!d8CïðɯZW;ç$d8Chìé‡ïÿÞ¿óä'{_7qç´²¡[žzÚx8ç{2ç@o÷„:‹wi¥t>0t‡c_ë¸Ú*2¥ó¡B·û+ÓF‰ï) =óÔöäáœï } ô÷ÜfðpÎ8†>ú:>gMIé|`è–¦¿2ÆÃã˜ó! g´6.ÇœY¸¥Ôy¸`s>@ô×W&x¸`s> 'ËwQ[E¦t>0ôÐß§ .ÇœèÉu£Sí—ÒùÀÐ?N‚U½ÿÆÃãXÿ;Bÿ‚×(eÿ;Cw„~W›^œÓ¦ìgèЗ×ÈŠ=b)ûßz¢±¿OQK.ÇúßÑØß§mL.ržùmÒõýïÆÃEÎ3¿M¢.lº÷9Ïü6‰Ü>í:¼æ·Ié·aèžüû~Øàá"ç™ß}øÑŠj`J¿ Cë<œ¯ãú@cßJ¯ã*v¨¥ôÛ0tËÔJÆÃã˜ß¡_ ½¦M¤ôÛ0t‡c_÷ ×qÒoÃТ㴚˜ÒoÃÐ3Sß—<\0ŽùmúºX(Š_Xé·aè¡átÜ”~†>+ï}òpÁwæ·Iä»ÈŸ|òpÁwæ5Bco×1¢æŸOé5bè½Ý9ß‹|—'N0ô™?»í"¥Ó‰¡[¢Û.Ö-äÅï»t:%s:t»Ö¹EUH:º£±_qŒVä»t:1ô€è/OiðpÁwætÊÂMÜÉÃß™Ó ½÷÷y‡ ¾3§û¯°c\5¾K§CŸ}>jý2)N Ýúù£ù|—N§ÎœNýü‘ï¢K§Cw4v[*pï]:z ô/t¤vétbè Ÿ|ú1jN§.N ½Ã±¯tm‡¼Ë3^ú@c÷<ÎVû¾wé³bèf]ý¼‹.}V Ý:êÏ{Wä»TÀ;SÀ;>¾OëRgèÞv?l— 8C„k]û¾w©€3ôìþ#'s— 8CïzòðZï@— 8C=–ñ¡æòêRgè³n=˜<\ð)à=ôjÆÃß™ÞÑùó÷“Úú½Kœ¡;ûû~çá‚ïLïH¿?°­Ö¹Ð¥ÎнùqO˜éRgè½õÃzm>ߥÎÐ'û½–ºŽ¬1N*à<çSßèÔx¸Èy¦€÷çóç,~a¥"Ö™×qO¨{qìr¾3u ÏÝ/Óånag{•ýúÿ—öv9–ë@sà»ÙC¯@™™$õø6ì{€ÏÆ`ö¿‹UÝçPªPDVÕÛÅUEÇ¡”É¿&õéûÊá‚­ãzA^£Ø’û´]úç;s°öykaDNéÒÁÎØ²ßv‰ÃyOËØ±[Ùj²¶O—vÆÞû”ß[²ÒH—µû{Gmó~™Ü̪Kÿm—ë8ÆÞàw¿9^‡‹Þ†­¤PÛ÷y{n%ÕåJŠÇ<šUÛ’ã{—k™Î|•ýë¬ÒÂ6¯9_e—¾ÊÎf•€½Ö¹{›Yu9§eìÖÖ»[®ò—¾JÆîèͶyvv!}•Œ=»O]&›ïÒWÉØzóõœÜäò]ú*{‡m÷«ç¤s¸˜]ИoÐGÉ;‘»\Iuæ³êÈkÔ§Ý'—ïÒgÕÙJªwXǬFn×å:ޱb¿ß^g.òù¬ûý»;‡‹|g>+ôÝk‡…rù.}VŒ}À¨«çR*ç-ìÒkÄØ?î:¿÷´{Mk‘]z:[¿ö¹€>’÷Iu¹{ÀØ µ½”´٥׈±{‡Ž—z9'å.bžyPÛý¸Ö%1Ïü60êüªˆ 1O£î€õ¨÷–œYÉ]£Î<'c‡ÕóF²‚Üô`êÿ¨ºªRåpÞöÁVÐ grç߇\A¶š@ìßp2¹‚fì6LïÆá¼·aìÛ~Žï#urÍØµÝæyØœ:ä š±7Ôöcl}Ï9†\A3ö2\ßX8\ÄXÌãÊâ)12æƒÅ|èžÖ8\Ä|°Qi‘%Þ÷ŒˆQ&ä(,æAÛg}›ì|>dÌöŽØû~®"—7ß9üƒ¤ý¤í±ï{~f2ã‚e\Þ‘qMf\cìîU^Ú^8\°w–ïìÌrÔÉ݃.ó½³|J¨#ì‘Ì÷.ó½³|ïà»ÏSÉYe—ùÞÙÛa­Înɶ˶³ÞÝn3w©#×ÛtÙÛtÖÛ ¶÷m_ß|çpÑÛtÖÛt|“WOŽï]ö6åû€•BKMæûù>X¾°‚n×]£Êá"ßËw €GÛêÚvãp‘ïƒå;¨õ1Kuöd¾™ïƒå;ª4R¶ÉÝÂ!ó}°|ÐñrÔäìbÈ|,ãp••²îY 7XÆ¡^êR]GdÜ!3î ìe×QW8œ³—ä;`Ÿž“½åÖ°oöúvìç"6¶äøþf·°;`·£o}Ó:‡ó|gìÚݼ<ßßìñöV`݃y&5•ï/öøÉwˆÝΉݑa_ìã'ß½”+J¹çFØRdÆ–qÕ-—½‹Êá"ã˜Øk÷s ›Û5*RcìŽÞ|øRËKdœÔã{vë}Im¢H=ޱ7ôæÏ¨+-7©Ç1öcÞÎ7Ÿa‹ÔãûG!PY(’#l‘z\©,ã*øî±Ô|WeÆ15°Ï[zËÍi‹T»£7®bÏye.ã¤Èذ×#¶a¹9m‘j co¨í³ôËí©2ö‘ùîƒÃEÆ15° ÏI_ÎA‹Œ“ÊHaÊ`÷sçGrŒ“Êc7Àþ¥§5ç,ã\ï:‡‹Œcº `·c¿öóÁá"ã˜.ƒÚ¾¯÷€‹Œ“º c(æïŽ—Áá"ã˜.SÀõ¼C­&Ç8©Ë¦ËöÒÛVzrŒ“º c7À^gÕƒ¤.S¤.ÃØ°G=çó{N—)R—aìØÝ÷íXgÔÁá"ã˜*„Þüw2NªBŒ} ¶—Y³1¹Ž“º c/¥é½‹Âá"ã˸†ÔÀ}Kªÿoöúvì5Ê%ç1{³ÛذÛ9ÂIÙ›ÝÀˆýÞƒ7{ü€½¡¨óØŠ'×qMf\c×Ðé¼sr“̸&3Ži‘èqíœUîÉ©E¦ET}ŒLfœÔ"»vÛm9û/2Nj‘ŒÝQÛ›-76ŠŒ“Z$cÔvÛ·’ã¤ÉØ;j»ÕY¸0¥©2öØë±œÊ'Õ@Æ^ ¬(uØ«>­È8©¦v;Ž¥·È8©2vCm¿;ŒÃEÆ15° x7n³ä:NªŒ=»Ç9«LªEªŒ½Áï~[E6cSÑ›/ófŸä'Õ@Æ^Ê¡wÈ ‡‹Œ;XÆ}eï­\•ÐÊá"ã–q˜YÍJbÉŒ;dÆ,㽆uw°Œ;ôY¡àp‘qË8P»ÏF}ŸÎwÈŒ;XÆ¡3àÇÖÖ¹Íàp‘qL¯»žÓçW™Ø{´­'ð*pÆn€ýËé<ãpžqŒÝ+ª‚Ëm<ãªTÀ{À¶×Í“z\• 8c¨íߨ-¬Rƒf쥰kÔ– r"æ¥]™Ø÷¾uOƼԠ»!öÃÓûóUjÐŒÝû9Èù–\IU©A3ö@ìÚÙ׿F™*5hÆ>2m.bž©ÀµþjfU¥ \™ Ø›ïË)lóRfìØÍÖÛiEÌK˜±;zó>®§óœÃEÌ3°Ï;•,éd®Rfì °ÿ1ŸÅ>R3«*U`Æ>PÛÁá"㘠\Më2…ÃEƱ3¡€=Îå»'Ï Uy&”±[5½Gm.2ŽH­¨Fk\Ï€;‡‹Œc'R!ûÍÍ.2Ž Eì߉yy&”±Ÿóׯ³‹:¶~äœUê°•é°ˆ}º÷Kný^¥ËØ °G;WÐ#9³’:,c÷Šê”Æ#¹š:,cÀÞæ"2óR‡eì }÷û|¾q¸e˜[ãW~Ú*uXþݛާußéqœ:ÚÙôä›—'•*ÛŸ¯CŸÂ..z¶?ØÛÜ³Šœë£ÊýyÆn€ÝÎŒ;²ë8¹?ÏØ°Q…œÃEÔ±ýù:´Ÿ68\ô6lEÝ8®ý|ãpó„½Ã¶¯·Ïs=îÅÞ~òæl{ÙÜ’³ ©0öRÁ.±÷åV#‘ïR¨Lì1•‘¤“¹Ju€±j{ë×Ú>Æá"ß™:€Ø¿á«¬R`ìØÏ‰]Û<¹o#ÕÆÞPÛ¿“ïR`죸u$3NªŒ½Øb¾m–<kR0¦vó6«ÜÖ¤:ÀØ µ½Ÿ+èäi“êcwÀnv°Iܤ:Àؽùû.qp8Ï8Æ>û¬ºÜ)5©0öbÞàvñ]1ÏÔÀnclGò ¸Iu€±›\«3¹†5©0v7|ŸÔ¥¦“s¸ˆy¦ 7ïûÕå.bžPƒQç×ÊÃù(ÃØzó÷™Õàp‘qL›°Äþ|áp‘qL›0T¯òØZR›0©M0v3T¯rl-;ÊHm‚±;`Ÿ×ŒI=Τ6ÁصÝüzN*8\dS P›[äɘ—êc/öç½¥÷.LªÆÔCu ÝmË­eLªŒÝ{›Õ6’ÕóLªŒÝ Þ}N+“1/ÕÆ¨ís»Î“3+©0öØ}ÞNë9ß…Iu€±ÜÌø…½Ÿ}]rf%ÏE;i¨þ|Ke¡Êá"æÙ¹HKÔ«41ÏÎEö:o£¹SZ&ÏE2ö@ßýœÓ¶¤:`ò\$c¨íGÙ|Oöóòd"c/T¡²_ß|ápóLì_úºÊá"æ™"fè„ZßzÒCnRcìØÏ×¹•dE)“ŠcÔöÞ·ÈöóRcì}÷ÚÎ¥T²Ÿ—šc/Ö~å)5y6ÐØÙ@ÀîGÛl$ûyy6±`ÿR߯8\Ä<;ˆÞ¼ïÇ–<hR dìØmØfÙ]#y6±7ÔöûÞEãp±‚fgQÛçMÜÉŠ&Ï2öbèÆÆ²ÉŠ&Ï;Øçý¬G²N©É³ŒÝPÛï'‘ÃEƱ³¨íßÙ§•g{öïÔ-4y6±7Ä^|;"WýÞ¤úÏØbïÇV“gMž dìÅPµÌ=¿–‘ÞcÞCÕ2Ïá=é=0é=`ìØÏî&.çeŒÃEÆ1ï¡û"˵¼s¸È8æ=@ìûØöšÓ"Mz{Co~îÚ”dÆIïcï(ê츪ù÷€±Ä~¿Ñip¸Èwæ=°Ýàæ[²ŠšIï1ÖÁ)­2ê6r;ä.uXg:,`ÿr³OåpÞÛ0vì_N¤‡óÞ†±»'Έ9‡óÞ†±`¯¾ÞNË{—:,coèÍ£Ú†Ë:¥Œ} 7¯ù08œç;c/ž¨Y8\dST2«[2ã¤ ÌØ ²—Ö¶Üy—*0cwÀn1–[JEÆI˜±‡'N燋Œc*0~óeß’'U`Æ>Л¿ë°ƒÃEÆ1Ø«¾K«p¸È8¦Ç¹éóï…Ã;ÓãiRÖ/Õ2+‡‹|gzbŸ Š­çò]êqŒÝû'³s¸Èw¦Çö:âa“ù.õ8ÆÞà›ÿF¾Ëûã{Gm¿{J;‡óù­s¸È8¦;º±ql%»†•*0co0êò7}¸Tû@m¿+¡ƒÃEÆ1ØJháp‘qLìß¹[Ç¥ ÌØÍ‘^®µ>ŒÃEÆ1½ùç›S]ªÀŒ=Ä®÷¨ ‡ó|æ|ì­ë©ÌÊá<ß»¡¶÷ºErÒùÀØ=Щ»_FçpžïŒ=b×öàpžïŒ½ö/s›Îá<ãûìg÷¹ä)­ÎÆ~¶S2…ÃEÆ1çC$j´VÇœ‘¸¥Ô8\ds>@öÛ(ã.2Ž9{±v]¿‡‹Œ+,㊮‚Þ9\ds>v?ß|MÞzÒùÀØKT}ö¿p¸È8vþ=꯼F!Ï¿3vCìÇžžÓ†<ÿÎØ°Û¬?ŸÜ) yþ±jû½ŠZp¸È8vþ°©¶18\Ä<óÛ„éûß ‡‹˜g~ÀÞÏ©MKª!ý6ŒÝ¹>ìœÜ”\ÌK¿ cwÀþå~XçpóÌoØënÛHª!ý6Œ½e¢®q8_Ç1öØ¿ÜJÜ9\ŒqÌoƒ¾û½Jêàp‘ïÌoÀùPÏ”;’ë8é· æ·Aìß8ÒoÃØ °×Yý>y³OH¿ cwÀng?¿{rV)ý6Œ=PÛÏYå¾'g•ÒoÃØb?gVG²2pH¿ c€Ý=®{VƒÃEÆ1¿M„>©T8\dóÛö°}ëI‡[H¿ c7ÔöR6KžÂé·aìŽØg¡‘HîœH¿ c}w^p¸È8æ· ä9©ç«OްÒoÃØ;jû7ªã†ôÛ0ö‘ùîƒÃE¾3¿M ߏŒ+ɵôÛóÛöæåªËTùÎü6¨íw§“q¸Èwæ·oþ;¥ÒoÃØ°9‰.òùmû ºq¸È÷Æò½é/ÃE¾3·jû×Þfp¸Èwæö‰®ëùÎÜ>†›äŒZº}»E×£Œq¸ÈwæöAoþîhuùÎÜ>€½ŒóÅ'ýu!Ý>Œ½ö/÷¿7ùÎn£Fmov."=—ïò6jÆ>àwsIê2ÒkÄØK =»(.òy{ô~=­S9\ä;óE¢ê‚q¸Èwæ5BìßYAK¯c@~»¾ùàp‘ïÌk„ÚÞÊV÷œ>¤×ˆ±wÔösvažÌwYq‚±øÝm!NŒ½ºsalÕ“ã»t:s:ö˜ xÒÍÒéÄØ µýìçûžÌwétbìŽØïžRçp‘ïÌ鉛¸ƒÃE¾3§`ÿRï¢q¸Èwæt Tee^8‘Ìwétbì±×Q·HîK§c/mÿÕ|¾I§ScN'ÀþßE“N'Æn€ÝŠm‘¬áÖ¤Ó‰±;bÿƉÔ&NŒ=Л/~l‘ß›t:1ö†Ú}#·CÞdÆÞQÛ~u¼tçùÎØjû7ê]4é³bìçºÔ%ö­'M*à)à ÕŸïé rM*àŒÝÚïî‡mRgìØý\MŒäøÞ¤ÎأٯœÌM*àŒ½ö³³;øÜú½Iœ±wÔv;£.éòjRgì£%n=.ò)àÍõj…ÃE¾3°Ç, —¼W¨Iœ±jûý~ãp‘ïLìÖëV“Õï›TÀ{ö?ͯõ*ƒÃE¾3µý\ÇUËÍç›TÀû@mŸ‹©¾å2N*à<æCßèT9\ÄÆÞ{Ÿ{Ô–›YuéŸgì}÷YÛ'yF¬KÿèäÙ.½FŒ}À¨WElp¸ˆyu`×èÛžTĺÜ5êÌs2Ð+~UFœÃùwLýUWUªÎÛ>Ø zUèh[)¹óïC® [Möï8™‡\A3v¦ÇwãpÞÛ0vGmoq²'£N® { ¶ßüWw¤©2ö@ìáu;r#ìj coˆý»FCªŒ} ï^ëÎÉàp>¾?³—½î ÂÌ9±ZN"—ǘÿ Ÿ$å)æË^žÙ °ÿ™ERß«‰òóáŸ$övGm?×qË=¡å1æÿÂ?IüìØk[ÕÿòóáŸ$ñöß|_•‘òóá$ñ“ï>û9¹Xü´å1æÿÂ?HÆO¾ûG¬~Qëz‹YyeþÂÉÊ^YÌöYŽÚ=óUÆ|e1_áy™X£Î9\Ä|e1Ø_oêä1_eÌWóÞ ¼T”â1_eÌWó€½÷ÕÁÎc¾Ê˜¯,æÁœ¶Ø¾xÈyÌ›Œyc£ŒéŒ«.Fc1VR±UOƼɘ7ó«&.w¬ð˜7óÆbºûú¶²71o,æaÔÅRǼɘ7óè^¡K¥Pó.cžÎ¬Öhµ·©.bÞÙ(ãH›Xo»à£ŒËQÆYÌövl}OƼ˘wó®ûºÆá"æÅXÌÜ=ˆu|¯.b>ẊîiÃEÌeЛy©Rn” 9Ê‹yT߯Vïù1OØ;dïkµò¨„þ…´Ÿ´} v÷üÌ*dÆË8PmcÕWÉ3®ÉŒkŒÝ3R®m/.Ø;ËwPy .'‘y¾w™ïå{‡û´GKæ{—ùÞY¾w¸{°ÜÀÎó½Ë|ïl„ìsY“#l—#lg½MGöÖ¶Èõ6]ö6õ6¨íg_·¾ùÎᢷ鬷Amu¹Á÷6]ö6åû@ øVJ2߇Ì÷Áòœýß÷ë®Qåp‘ïƒå;®{°¯m7ù>X¾ƒ›}¬l¾'ó}È|,ßAÛ¶ÞNËó}È|,ßû«6Áó}È|,ãPÛõÖBžqCfÜ`οϙUi¹Œ;dÆ„½ì:ê ‡sö²“|솯çeh¾¿ÙëØ ±Ï’ãû›Ý~ÀîèÍûv¬sZçpžïŒ=PÛgeà‘Û)}³ÇØb?g7ç >•ï/öøÉwð»·ºÜGóýÅ>~òÝϧ@‹l«ç„g\‘WXÆtË]ö.*‡‹Œcz\)°·9,·kT¤Çص}ú¬<™qRcìÚ>ë%µ‰"õ8ÆÞû™îµçFØ"õ8Æ>`Ì_NãòŒ“zcÿ˜»~ñœs›ä[¤W*Ë8pÏȼñÁsÚÄ›½þ€ÝPÛçÎIÏÍi‹T»#ö3îÚ–›Ó©2ö@oÞëZAŽgœT{ƒmŸ‚\n—¸H5±Ìw.2Ž©ÅáJ*<9«”ÊHaÊHA>«YÓ)9ÆIe„±`ÿÒÓ‡‹Œs–q®w ÃEÆ1]±~íçƒÃEÆ1]¶}?×ï9ý½H]†±ówÇËàp‘qL—)o9)GrŒ“ºLaº `Ÿë¸É1Nê2ŒÝPÛ«Ÿë÷ä:Nê2ŒÝ{ Ûªåt™"uƈ½”ÕSÊ3.dÆ1U½ùïdœT…û@ìÇXoxá'uÆþá“W{…ÃEÆ5–q é°cKªÿoöúvì¥î[o9Ù›Ý~Àîˆ}ž†MzÌÞìþö@ìßð¼Ùãì }÷v¹±‘g\“×XÆ¡¨ÛåF'žqMfÓ" PFæJÊ’;'R‹,L‹D쵋רr¸È8¦Eöâ±ÞbÆ3Nj‘ŒÝQÛírk!Ï8©E2ö@m±EvŒ“Z$cï¨í%ÚâÞ§j`‘j cÝ7ËîœH5±Ÿ0¤Ãö¾3‘gœT S{9êz6gœT»¡¶ßNÆá"㘈Øçñ÷š\ÇI5±`?§ ë­…<ã¤ÈØúî÷Udãp1Æ15½ùðõržqR dì¥z‡¼p¸È¸ƒe¨CÞ⪄Vw°Œ;`Ö–<¹ðf·°;`ÿ²†uw°Œ;ôY¡àp‘qË8T~ØRƒgÜ!3î`Øç|~Û Çðºë9mápžq•)à€Ý¦—TÀ«TÀ»ö/§óŒÃyÆ1vGo~ÞÇ\rçãªTÀ{À¶û6’z\• 8c°íùÝÂ*5hÆ^jãû¬{Œy©AW¦Aöy^¦÷dÌK š±j»õôþ|•4cwÀþqQhr%U¥Íرÿ©ÇRIŒÇ¼Ô ûÈ´}p¸ˆy¦×ú«™U•*pe*0`·½¯÷¿ó˜—*0c7Ôö˜C\n÷ J˜±;bŸz\R“ªRfìØÿÌÓyI's•*0coˆ½4ß’ûuUªÀŒ} ö»ãep¸È8¦WÓºLáp‘qìL(`¯ç*r$Ï Uy&”±jû}Ú8\d;‘ اŸv$O¤Vy"•±Ç»egVòD*cˆý;1/Ï„2öR7õ÷‘s>T©ÃV¦Ã"öÚ·Òrë÷*uXÆnˆ½—õ†óR‡eìØËˆ­Xr5!uXÆ€}V”*Ù˜—:,coèÍßçóÃÅ(ÃtØ¿òÓV©ÃòïÞô>­s¸øîL«zÌ¢'ß¼<©TÙþ|úvápÑÛ°ýùŠî‡­W%´r¸èmØþPÛ{ÛÚžÌ8©0öb;¼CíHž‡5©SûܳJ*à&ÕÆnˆ½õ3šq&ÕÆî€}:Z{R7©0ö€oþ¶KÎ3ޱľÏ[r;¥&ÕÆ^ Ö9®¾‹Âá"æ™:`èœTÛzò ¸Iu€±jûŸi6Ê2&ÕÆî¨íæ×šNÎá"æ™:€Ø§™t}˜T{{ˆºKåÀÆá|”aìµý>³.2Ži–ØŸ/.2Ži†êUž«‰¤6aR›`ì†Økl{v”‘ÚcwÀþg’zœIm‚±jû>®ç¤‚ÃEÆ1uµ}J#É*©&ÕÆ^ ìÏÏM£äÞ…IuÀ˜:`¨ná¬Æ[˘T»¡¶Ïýùdõ<“êcwÔösR·õdÌKu€±`·Y²ñHά¤:ÀØzó{½²1ÏÔs¨Xvf%ÏE;i¨r Ke¡Êá"æÙ¹HKÔ«41ÏÎEöså·ÕÈÒ2y.’±jû9¯kIuÀä¹HÆ>PÛí8×°É~^žLdìÅ€6áq}ó…ÃEÌ3E °éë*‡‹˜gŠjû~¹¡•ǼTÄ»£¶OëA²¢”IEŒ±jûÔ&²ý¼TÄû@m/sZ™ìç¥&ÅØ?4Ç_xJMž 4v6°W›Y²Ÿ—g»¡¶ßëÛ‡‹˜ggᛟ…Ì’1/Õ@Æ€½Ì3¡Ù]#y6±7ÔöûÞEãp±‚fgQÛû¾õdÅ “g{1x_äv$+N˜<hìl `Ÿµ}ŽdR“g»¡¶ßO"‡‹ŒcgQÛ¿³O+Ï2ö@mÿFÝB“g{CmŸû´{®ú½IõŸ±Ä~Î*÷äÙ@“g{1T-³æ×2Ò{`Ì{`Øù0’Þ“ÞÆn¨íb¿œ—1Ǽ¨íÍ®àÃEÆ1ïbŸ>9-Ò¤÷€±7ôægåOfœô0öŽÚ^üªvçÞÆ>`Ìßnt.òy è°³ô@²ŠšIï1ÖQÅÈÑ·žÛ!w©Ã:Óa}×7ûTç½ c7Ôöû‰TãpÞÛ0v÷Ä1çpÞÛ0ö@ì¥o‘œQ»Ôa{CoþÕ6\Ö)eìµý^óap8ÏwÆ^{ÚäÝ:.Ï2öÙ}{î´ŽË›ûûðßLt©3öâíWw"»T©À€}îÔ¤ ìRfì†Øïû6Æá"ß™ ì º÷GvÏJªÀŒ=ÐwÿÆi—*0coèÍOÃKÍù¨]ªÀŒ}xÂ{08\dS½k¼p¸È8¦ö/õ¨+‡‹Œc*°w=Ÿ7ÇT`OÔ§uÇT`Ç76Ù5¬T{ƒQ—¿éÃ¥ ÌØlûM .2Ž©ÀžPB ‡‹Œc*°_Ý­ãRfìæXÉ/.U`Æîˆ½Ô¹MœË8©3öðÄm•Áá"㘠£n^w‘\EJ˜±øæw»xJ‡‹Œc:¬ƒÓ¸ó–Қܷ‘:¬³3àŽN"ŸÃLK®"åpÆn°íí$Ofœ<ÎØ°9;à.2ŽGoþìëF²æƒË3àŒ½Á7\ïPk.2î`«Ht¼l5yÿû‹½ýäÍôÝϵÌÅ_78\ä;s>Ä®÷¨ ‡ó|æ|ìVãz*³r8ÏwÆn¨íçz$W‘!ŒÝU>ü2Ê8‡ó|gìÙoöàpžïŒ½#öûܦs8Ï8Æ>{-±ÉSZ!Œ½DÑ£Láp‘qÌù‰­•ÃEÆ1çC$n)5ÇœðÍßFçp‘qÌù€Þü¬~Ÿ¼g$¤ó±wÄ~¯‚Þ9\ds>öY9°%o=é|`ì³uö¿p¸È8vþ=꯼F!Ï¿3vCì³|]rNòü;cwÀ^Ι•%wJCžgìÚ~¯¢.2ŽGm¿WÛ.bžùmÂôýï…ÃEÌ3¿M SØãêÞ¯.bžùm¹>¦ÇíÈżôÛ0vì_î‡u1Ïü6¨íÇ4yåÔÀ~ÆÞ2Q×8œ¯ã{Gm¿ßJÜ9\ŒqÌo¿û­Jêàp‘ïÌoŽªmŒÍ“ë8é· æ·Aìß8ÒoÃØ-Ðéûsf•¼Ù'¤ß†±;buóžœUJ¿ cØvÛ¬$g•ÒoÃØbßû¹’ÊíÛ„ôÛ0öè&n»îY Çü6ú¤Ráp‘qÌo«*¤Ã-¤ß†±lû±yòvH¿ cwÄ~Në|OîœH¿ c}w^p¸È8æ·Aìób¡ša¥ß†±wÄþê¸!ý6Œ}d¾ûàp‘ïÌoÈw1/YIΨ¥ß&˜ß°Û>®ºLåp‘ïÌoƒÚ~w:‡‹|g~ÈþRé·aìØï'‘ƒÃE¾3¿M4­A7ùÞX¾7]ã¥s¸Èwæöm?®½Íàp‘ïÌí]×%..ò¹}Ý=·‰“3jéöaì]2Æá"ߙ۽ù»£Õ9\ä;sû ¶ŸQgI]H·co¨í÷û߇‹|g·Q£¶÷±õuºs¸Èwæ5‚ß½ž3ê¤.#½FŒ½Äг‹Âá"ß™×°×iòêÉ3é5b쉪 Æá"ß™×±g-½FŒ=ùmÊõ͇‹|g^#Ôön›[Î?ÒkÄØ;j»µ³íÉ|—'ûˆßÝvÒéÄØK ;Ž-Žäø.NÁœN€½Î™UÒÍÒéÄØ µ½ž“‹’ÌwétbìÙožRçp‘ïÌ鉛¸ƒÃE¾3§jû½ÞEãp‘ïÌé„Úþ'æE#¹|—N'Æ>ûLø–Ü!—N'Æ^Úþ«ù|“N§ÆœNmÿ•ï¢I§c7Ôöi£NÖpkÒéÄØ±ãDj“N'ÆðÍÏ‹sã{“N'ÆÞPÛ'¹åvÈ›¬ñÂØ;jû¼S©äò½IŸc0êòõ.šôY1öÒÐù÷²EÒÙØ¤Þ˜Þpýùl¹&pÆníw÷Ã6©€3vGìGÛ,9¾7©€3öhö+'s“ 8coˆ½ÌBä¹õ{“ 8cïˆ}ö´I—W“ 8c-qëÁàp‘ïLo®ïP+.ò)à€½Noaò^¡&pÆn¨í÷ûeŒÃE¾3±Ï]£dõû&pÆ Ý;°_ëU‡‹|g 8j{;ß¼çæóM*àŒ} ¶Ïi­m¹Œ“ 8ùÐ7:U1ÏðÖ`e¡>’#¬TÄÓã>êÙ¶ËýùÆÔ6~u¿L“»…íU¶CŸ¾¯.ØÙ:®ä5ò-¹OÛ¥¾3;`Ÿ·^N"‡óž–±;d¿í;‡óž–±`·yí@²¶O—vÆÞPÛ§ž¬4Òeí>ÆÞQÛ»oQs3«.ýóŒ} ¶Ï{Ä’gĺôÏ3öšœê>©Êá<ß;s2wû•ï¢Ëu\gë8Ä~÷Tmgë8ÀþåÄŠq¸èmØ:°W·­$o¯ërÇØ°Û¾o»çöi»\Ç1ö¿ûÍñÒ8\ô6l%…Þü9«Ì*#]®¤xÌ£ne^º‹y¹–éÌWÙ¿Î*½×Í“•À»ôUv6«ìõL÷žôYu9§eìØg½‹Ørû6]ú*»ö(í:¯sùÎ|•€½•c«Ù|—¾JÆÞЛ÷¾_v‰‡‹|g¾JÔöZ®ž“ÎábvAc¾Aµ%÷.º\Iuæ³êÈé4‹}äöi»ôYu¶’êVIí{n×å:ޱ`ÿr{q¸Èwæ³Bì÷ïî.òù¬àw?z¶Rh—>+Æ>û¼P*é-ìÒkÄØKÿº~÷Y·0©Evé5êlýØëô]$ï“êr÷€±jûe’Zd—^#Æî:^üÒÛ8‡‹˜g^#ÔöÖ¯u‰ƒÃEÌ3¿ Œº~Uć‹˜§Qvæj"©ˆu¹kÔ™çdì°zÞ‘¬ 7¤=˜ú?ª®ªT9œ·}°ô@gBÏ%lËr=Øj±ÃÉ<ä š±Û0=¾‡óÞ†±;jû9µ±¤“yÈ4cÔöYL+YEmÈ4coˆ}V„N:†\A3öÓÖêÞÀÂá"æ™2‚Ø÷ša‡\A3vCì‡mÍs{ÔCªŒÝ‡ÿêŽÔ!Õ@ƈ½¶}k¹vH5±7Øöü®Ñj cÝzЮ;'ƒÃùøþÌ^÷ºål¬1ÿ>IêSÌ×½<³ÛŽªëìkÌ×ǘÿ ÿ$±°;j{9ÙßsÚúóáŸ$þö@ì×›ûêcÌÿ…’ÄØ|ó}Ûß«Èúóá$ñ“ï>û9¹Øûò懌Ÿ|÷þùË)쳟oKÔ$+{e1ØkÙ†{.櫌ùÊb¾ªÚ}<櫌ùÊb°ŸsÚ¥n!ù*c¾²˜¯êÆFóUÆ|e1_• Ìc¾Ê˜¯,æMÝ;ÀcÞdÌeLg\åp1Ê‹yƒ·×UOƼɘ7óÈÕyFݹ˜7óÆbÞÔýq<æMƼ±˜7uv€Ç¼É˜7ó`^wÔ-²ý¼Ë˜§3+0¯›–Òµ·©.bÞÙ(ãð´N]GXãp1Ê8‹yWçayÌ»Œyg1ﺯk.bÞYÌKg#y—1ï,æQ¥‘Y:0ÙχŒù`1tØé·YÇ÷Êá"æƒÅ|èžÖ8\Ä|°QÖx)Kt>Ê„e‚Å|¨©<æCÆd¾–ïòvžïCæû`ùÚ>·çkr·pÈ|,ßû›•äìbÈ|,ãPÛÍ×=«Áá"ãË8tψ­ûó<ã™qa/»ŽºÂ᜽ì$ßû¬º°Gn ûf¯?`·o»è[r|³ÛؽùkUdšïovÿ{ ¶×i6Ê픾Ùãì ±Ÿ³›sŸÊ÷{ü仸Ý/zÍ÷ûøÉw/¥Àj™väFØRdÆ–qèœÔ<ž—›Q©Ç1vì7õŸgœÔ㻣¶Ÿ=íáÉŒ“zc"o9á'õ8ÆÞû™îµçFØ"õ8Æ>`ÌŸì-7©Ç1ö¹+¯wÁ3Nêq¥²Œ«ªV'ϸ*3Ž©¨í×ê÷<ã¤ÈؽÀ[N¦û —qR dìÞ¼×m÷Üœ¶H5±7ØöË ­<ã¤ÈØGæ»ÇÔÀâp%žœUJe¤0e¤¸ºkƒgœTF»×=­q¸È8gçz·Ð9\dÓeûè×~>8\dÓe`Û÷sýžÓß‹Ôeû@1w¼ Çt™ÐÙXŽä'u™Ât™ªzÏ8©Ë0vCm¿Væ'uÆîݹ`[µœ.S¤.ÃØ±ÏC™ëŒ:8\dS…ЛÿNÆIUˆ±Ä>/·±ä:Nê2Œ½”¦÷. ‡‹Œk,ãPõ{ŸGr×dÆ5–q@“ªûÖ[Îcöf·°;b¿Ö1ã×dÆ5–qíWÞƒ7{ü€½¡ï~²·#¹Žk2ãË8u³ØG2ãšÌ8¦E–k¸™%wN¤Y˜‰Øçñû–Ì8©E2v+èDj¬fxÆI-’±;jû4¼$µÈ"µHƨí1¶ÈŽqR‹dì½tu_$U‹Tû€ì¾YvçDªŒ½TQêÏa[ÉeœT S{9Îõ{äÔÀ"Õ@Æn¨íw§“q¸È8¦"öë}R<ã¤Èذ×y7©©2ö†¾û}Ù8\ŒqL Do>|ëGrŒ“j c/åÐ;ä…ÃEÆ,ã¾²Û¼:»srÈŒ;Xƪj"ϸCfÜÁ2îÐkXçp‘q˸CŸ w°ŒC5Øg)±dÆ2ã–q‡º…œgÜ!3Ž)àu×sÚÂá<ã*SÀ»M9.©€W©€3v«»>gÎ3ޱ;zómßJÉ«RgìÛîÛHêqU*àŒ}À¶çw «Ô û™êVbóRƒ®Lƒìó¼Lïɘ—4c7Ôvëéýù*5hÆî€ýVa†Ç¼Ô { öë}<æ¥ÍØG¦íƒÃEÌ3¸Ö_ͬªT+S»Ír•Éýº*U`Æn¨í×;xÌK˜±;bŸz\R“ªRfìØÿÌÓyI's•*0coˆ½Ì+rûuUªÀŒ} ö»ãep¸È8¦WÓºLáp‘qìL(`¯ç*r$Ï Uy&”±[5½Gm.2ŽH­ý´#y"µÊ©Œ=Ø-;³’'Rû@ì߉yy&”±Ÿ‰ 챑s>T©ÃV¦Ã"öÚךN<æ¥ËØ ±Ï["9³’:,cwÀ^FlÅ’« ©Ã2ö춗빉àpóL‡Eoþ>Ÿo.F¦ÃÖø•Ÿ¶J–÷¦÷iÃÅwgz\íÐc=ùæåI¥ÊöçëЧ° ‡‹Þ†íÏvÛëU ­.z¶?ÚçŒ:»Ž“ûóŒÝëЪs¸ˆ:¶?_‡öÓ‡‹Þ†íÏ£7½3‘Ǽܟgì¶½­÷¿S=îÅÞ~òæG•·Óò¾NªŒýÌmu£Ïw©T¦ö:}ÔI's•êc7Ôö:®µ}ŒÃE¾3u±ÃWY¥:ÀذŸ»yÁL.ߥ:ÀØjûwò]ªŒ} ¶ÏB¡{2ã¤:ÀØ‹í æûv$ÏÚTŒ©ˆ}îY%p“êc7ÄÞÏŒKžÖ1©0v·]Õê¤gR`ìßüm—88œgcˆ}·­&wJMªŒ½:­s\}…ÃEÌ3uÀÐ9©¶õäp“êc7Ôö?Ól”eLªŒÝQÛͯ5œÃEÌ3u±_oîã1/ÕÆÞ¢îR9°q8eû@m¿Ï¬‡‹ŒcÚ„%öç ‡‹ŒcÚ„¡z•çj"©M˜Ô&»!öÛže¤6Áذÿ™Æ‡¤gR›`ìÚ¾ë9©àp‘qL@mŸÒH²JªIu€±Ãwag÷.LªÆÔ“·ó˜—êc7ÔöëÝy<æ¥:ÀصýœÔm=óR`ìØm–l<’3+©0öÞü^¯ìƒÃEÌ3uÀª–YÉs‘ÆÎEªèãRY¨r¸ˆyv.Òõ*ÃE̳s‘†î®ëJ<æå¹Hƨíç¼®%Õ“ç"û@m·ã\Ã&ûyy2‘± u›y©ˆSÄû—¾®r¸ˆy¦ˆ¡¶ïûI¹IEŒ±;jû´$+J™TÄ{ ¶Om"ÛÏKEŒ±Ôö2§•É~^jRŒýCsü…§ÔäÙ@cg{µ±™%ûyy6±jû½¾q¸ˆyv6¾ùË=#<æ¥Èذϻuö쮑<ÈØjû}ï¢q¸XA³³¨í}ßz²â„ɳŒ½8'5Ã&+N˜<hìl `Ÿµ}ŽdR“g»¡¶ßO"‡‹ŒcgQÛ¿³O+Ï2ö@mÿFÝB“g{CmŸû´{®ú½IõŸ±Ä~Î*÷äÙ@“g{1T-³æ×2Ò{`Ì{`Øù0’Þ“ÞÆn¨íb¿œ—1Ǽ¨íÍ®àÃEÆ1ïbŸ>9-Ò¤÷€±7ôægåOfœô0öŽÚ^üªvçÞÆ>`Ìßnt.òy è°³ô@²ŠšIï1ÖQÅÈÑ·žÛ!w©Ã:Óa}×7ûTç½ c7Ôöû‰TãpÞÛ0v÷Ä1çpÞÛ0ö@쥯·ÏÓÞÆ¥ËØzóߨ¶á²N)c¨í÷šƒÃy¾3ö≊‘…ÃEÆ1Ø‘;5±dÆI˜±dÿÓ-w^Æ¥ ÌØ½ù9³Jz\ªÀŒ=PÛï:ìàp‘qLöªïÒ*.2Žéqnúü{ápÁÎô8Ä^çu¹´K=ޱbŸ‹©Írù.õ8ÆînÚÉì.òéqˆ}:’•\êqŒ½á7ŸÏwycï¨íwOiçp>ŸgìÃíW÷ ¹Ô"ûÇ­Ó¿Éw©E:Ó"ÝጺÕÜúÝ¥ÉØ µ½ë|Þ8\ä;Ó"Ý^Û‘Ü£v©E2öp×'RƒÃE¾³­ˆýâ,¹~wY£•±ôæï•ć‹ŒcJ¨Mê([$ïÚp©„:SBûw¼Ä.•PÆn¨í#¶–ôUºTB»{è{ÄœÃEÆ1%ÔõiƒÃEƱ³ˆ}ö´É»u\ž dì²û6öÜi—7÷1öá¿;™èRfìÅÛ¯îDv©;SûÜ=¨IØ¥ ÌØ ±ß÷mŒÃE¾3Øtïìž•T{ ïþÓ:.U`ÆÞЛŸ†—šóQ»Tûð„÷`p¸È8¦{× xáp‘qLì_êQWÇT`ïz>o.2Ž©Àž¨Oë.2Ž©ÀŽol<²kX©3ö£.Ó‡K˜±Øö›:8\dS=¡„ÇT`¿º[Ç¥ ÌØÍ±>’5^\ªÀŒÝ{©s›8—qRfìá‰Û*ƒÃEÆ1Fݼî"¹Š”*0cðÍïvñ”ÇtX§qç-¥5¹o#uXggÀD>‡™–\EÊ3àŒÝ`ÛÛIžÌ8yœ±;`ÿrvÀ9\d;ŽÞüÙ×dÍ—gÀ{ƒoþ¸Þ¡Ö8\dÜÁV‘è xÙjòþ÷{ûÉ›軟k™‹¿np¸Èwæ|ˆ]ïQçùÌùØ­ÆõTfåpžïŒÝPÛÏôH®"C:»ª |øe”qçùÎØ²ßìÁá<ß{Gì÷¹MçpžqŒ}öZb;’§´B:{‰¢G™Âá"ã˜ó!5Z+‡‹Œc·HÜRj.2Ž9à›¿2Îá"ã˜ó½ùYý>yÏHHçcïˆý^½s¸È8æ|ì³r`KÞzÒùÀØKT}ö¿p¸È8vþ=꯼F!Ï¿3vCì³|]rNòü;cwÀ^Ι•%wJCžgìÚ~¯¢.2ŽGm¿WÛ.bžùmÂôýï…ÃEÌ3¿M SØãêÞ¯.bžùm¹>¦ÇíÈżôÛ0vì_î‡u1Ïü6¨íÇ4yåÔÀ~ÆÞ2Q×8œ¯ã{Gm¿ßJÜ9\ŒqÌo¿û­Jêàp‘ïÌoŽªmŒÍ“ë8é· æ·Aìß8ÒoÃØ-Ðéûsf•¼Ù'¤ß†±;buóžœUJ¿ cØvÛ¬$g•ÒoÃØbßû¹’ÊíÛ„ôÛ0öè&n»îY Çü6ú¤Ráp‘qÌo«*¤Ã-¤ß†±lû±yòvH¿ cwÄ~Në|OîœH¿ c}w^p¸È8æ·Aìób¡ša¥ß†±wÄþê¸!ý6Œ}d¾ûàp‘ïÌoÈw1/YIΨ¥ß&˜ß°Û>®ºLåp‘ïÌoƒÚ~w:‡‹|g~ÈþRé·aìØï'‘ƒÃE¾3¿M4­A7ùÞX¾7]ã¥s¸Èwæöm?®½Íàp‘ïÌí]×%..ò¹}Ý=·‰“3jéöaì]2Æá"ߙ۽ù»£Õ9\ä;sû ¶ŸQgI]H·co¨í÷û߇‹|g·Q£¶÷±õuºs¸Èwæ5‚ß½ž3ê¤.#½FŒ½Äг‹Âá"ß™×°×iòêÉ3é5b쉪 Æá"ß™×±g-½FŒ=ùmÊõ͇‹|g^#Ôön›[Î?ÒkÄØ;j»µ³íÉ|—'ûˆßÝvÒéÄØK ;Ž-Žäø.NÁœN€½Î™UÒÍÒéÄØ µ½ž“‹’ÌwétbìÙožRçp‘ïÌ鉛¸ƒÃE¾3§jû½ÞEãp‘ïÌé„Úþ'æE#¹|—N'Æ>ûLø–Ü!—N'Æ^Úþ«ù|“N§ÆœNmÿ•ï¢I§c7Ôöi£NÖpkÒéÄØ±ãDj“N'ÆðÍÏ‹sã{“N'ÆÞPÛ'¹åvÈ›¬ñÂØ;jû¼S©äò½IŸc0êòõ.šôY1öÒÐù÷²EÒÙØ¤Þ˜Þpýùl¹&pÆníw÷Ã6©€3vGìGÛ,9¾7©€3öhö+'s“ 8coˆ½ÌBä¹õ{“ 8cïˆ}ö´I—W“ 8c-qëÁàp‘ïLo®ïP+.ò)à€½Noaò^¡&pÆn¨í÷ûeŒÃE¾3±Ï]£dõû&pÆ Ý;°_ëU‡‹|g 8j{;ß¼çæóM*àŒ} ¶Ïi­m¹Œ“ 8ùÐ7:U1ÏðÖ`e¡>’#¬TÄÓã>êÙ¶ËýùÆÔ6~u¿L“»…íU¶CŸ¾¯.ØÙ:®ä5ò-¹OÛ¥¾3;`Ÿ·^N"‡óž–±;d¿í;‡óž–±`·yí@²¶O—vÆÞPÛ§ž¬4Òeí>ÆÞQÛ»oQs3«.ýóŒ} ¶Ï{Ä’gĺôÏ3öšœê>©Êá<ß;s2wû•ï¢Ëu\gë8Ä~÷Tmgë8ÀþåÄŠq¸èmØ:°W·­$o¯ërÇØ°Û¾o»çöi»\Ç1ö¿ûÍñÒ8\ô6l%…Þü9«Ì*#]®¤xÌ£ne^º‹y¹–éÌWÙ¿Î*½×Í“•À»ôUv6«ìõL÷žôYu9§eìØg½‹Ørû6]ú*»ö(í:¯sùÎ|•€½•c«Ù|—¾JÆÞЛ÷¾_v‰‡‹|g¾JÔöZ®ž“ÎábvAc¾Aµ%÷.º\Iuæ³êÈé4‹}äöi»ôYu¶’êVIí{n×å:ޱ`ÿr{q¸Èwæ³Bì÷ïî.òù¬àw?z¶Rh—>+Æ>û¼P*é-ìÒkÄØKÿº~÷Y·0©Evé5êlýØëô]$ï“êr÷€±jûe’Zd—^#Æî:^üÒÛ8‡‹˜g^#ÔöÖ¯u‰ƒÃEÌ3¿ Œº~Uć‹˜§Qvæj"©ˆu¹kÔ™çdì°zÞ‘¬ 7¤=˜ú?ª®ªT9œ·}°ô@gBÏ%lËr=Øj±ÃÉ<ä š±Û0=¾‡óÞ†±;jû9µ±¤“yÈ4cÔöYL+YEmÈ4coˆ}V„N:†\A3öÓÖêÞÀÂá"æ™2‚Ø÷ša‡\A3vCì‡mÍs{ÔCªŒÝ‡ÿêŽÔ!Õ@ƈ½¶}k¹vH5±7Øöü®Ñj cÝzЮ;'ƒÃùøþÀþþóÿ½ì°²PßJüù'ë¿{W¯n nî î Þ¼QxWðNáCÁ… ~0xAö¼ã\ˆ½&¥;…£¨³±xJiÔ•ªà,êj&æ+'bžÁ1Ïà‰˜gðDÌ3x"æ<ó žˆyOÄÎý}pNêø'É~’|* Ëné¶W?_f»Ã?ÿêÚ³ºï‡gçóÁxÁûG,¯¯·´EoŸƒãÇ{mõnµœ]7†Û{07~¸'>ô·2r®ÌìÀðñþ«>ø{£y+íL4ߺ½Õv.P_m_ü·U¯î}óaÙ¼yT ¿º:Æç–Ë烷ùb^9\„¿/ÆØúQ?…¦Ïåö³0ÜÞWÚQÞðwÛËq6¿ùwyÇÛw¥í1ü!lÞÕ£¶3Óv³w¸÷áÇûñÐö÷)öz¾Ô3Ï!ü}öuósüê¯¨ë– Ú—tè/ðözpœ+7_D­ óV_–¨;í8a—5×ÞÞ©ÔÚ¿û2”Ÿß½Œ¯ë›r<üøãöÿ=(Ë›ßËùê!¼”5aKyÃëûA^1{ñ?kf}ø?¼^ʬ>Ó"0¼½ÿÊ?waÿ>èïûÙ á7_ÆÓ?2?¾îðZÞìG˜w ¯k¸¿Û^-ÅKfüÍòÏ©°©ï„íf7ãý}°„Ía;êZïoèßÛ—oDÅm·%l.1o5´fë(jï˜7“Û¤Áðxˆºuô:ÎÎã~®×ƒ×«k›Ÿ©ñÐöãFòïï·VAø{$üÛÄ׃zû¢¾ >>\“ø›;ÚxÚ÷iÛGp½´LÌ¿/4ýÛ©¼ŒûSÔEª³z¤·”y[JXGýaË<ûàovÏ„MÄCØDËôuÑz›÷{lvΙ~üñÀþaÛ<¾ã|°·×"óêÞÇÅo£Ìû$7…[—özpdàý)eÞg+YW¹L"®]eOïïã%wxKÁûCÐöTʼ¿·ÙÅÛ“ËØG}øpo»ÓßÑ Áém;{Ý8âõàýRÎ1Æp?oë èã¯^Ö—b£†/ã»—Ê»,]°÷R`Ì[YÆ÷°ÏÌçƒ÷„ïðIáõöW¯ï—Ò÷Öq?oeß÷×ZÆÞ“;׿gbøÚÓþíc>¼séìÃbà7ÿžýý«ÖIOéý€=­Õ¥§ãsqñù`‰§1Žñ·'öXæ gÈ7 oQ·Nzžßü:ºþø#óêl‹¼œ;üû 6¶L {û¼îóÝÂÃý‰=RìíáÍ[¿½ ïMÛ÷q¼¤2Î—àš‚Óx=(™|_f@×î—Ñ룦†ûÛ_'=^ZÁßÝ—¼¬Ç°7{¿µ ×Ϊñš”Ú{ÒÃ>\ìð(öåþ¤yQÊñ†{&a#nßçõ ½Œs ÆÕ²{pí*—"µç´Ò;þîï¹Í_’Þs?¿{=ð«köðêZjjOƒÔR¥†Äü2·¹vVË܆°÷%3.ðenóùïb¸Ý>ïë§ØãáÃõ–bï#l™~~™Û\_ÝrÞˆ¼ùå\Ðç_½dh¿lûŸîçƒ÷>m;'xÇlµmî¥ûëA»ý»¾¾ºÞÛ>–ÅíÞëÀðåÕE}¯¤ü=é9Si†„/3 RÛç.Ðçƒzk†¯ÃøúêÊ2%ný˜°þž]üý«×ƒzûYn?¾FæÇ/“ˆs’õx=X§›Qðn¡¿&ÿ¢ã߃eçdÎôþî—ID‹×„Ümüúh†ü{ñ÷¯^<ÓöezУ.¿>ôÛØ‰áëÞR‹ãÝöãöN!ü==Ø®¯Î—1®ÇŽ¿û2=¸&¬_·‡á”Y§Ÿ÷õ`üì{Åðe½é¯ëô`?ÚCÛÇ-/_ŽLʬӃ7ôzzuïéÏmŸQ_|U6†ãïK¾ŸoõU\°qΙ0¼?tVïémsÂo><¯óU\8'ÎxzàÍÞ|‹L?¿L®½Í²õAúùezpƒß{pïåö‚_RƒÔR ç:H-ÓÆOð–É÷Þz›>RìO=í¨™7¿Ì.]e,ãû9A=pW¹ø~Ïuò᣿,S£Û¼‹µæì)÷žÕâ?øûÃ×Éãüÿ,ã;—Unu{é°±ljÄÜUÀm_Ç÷“ÛÚëÁ»ííL&ÜYÅ:¾÷•}¹÷Þp¾G‡¶/#7ùñu ®¿§Ç?¼ã©ÏO ƒ6ÖÚÌ^ËÐ{v ­u ÷‡7¿ ½6à ·}‡?ÞÐëÁȼùuþ ù÷à=Ânãã‹Bø2Â^__–XOQ·¨ô­,{VáK<Íïöom÷¥yþpËÛÏ×åoöÔw_åûùŠ^QåÖ`¸Ý~ãëÁ2ÂÎ_…¿û:Â^Úí–KÞ:«U¾ŸüÝùþ³Kû÷à=²¶/#ì5ß—·ŸÉ€áíáÇ·~ G OðeÏªŽŽwNâ=ÂþM¬×ƒšé¬ÖøÇç}=ðÌ0±Ž°¿ñõàýRΕEdzÊXGØKÐ.#,ã–ª"×ÎjaŸ¿ûð[ü÷A[ÇNÛÇ€?¾­ÂQ[ë¯íöÃ×òãsíøù`¬Këý ¾Ì»çîÿ²Á¹°é0lÚ2Â~ì¤×ƒEÆç aî·¿z=ˆ‹ˆŒÕÀVÖm¹sÑðþñËKé>Ú¾'>¾ÏëÁqk„¯Bÿë0ú|°uç¯z‚/ÂJiõý᪥Øã‰=6ë$âòÝ×åÿÑž>Üjœ˜ÓóÝE{/ÿíÌ¥ò_g—¶¯Æ‰hÆp{hû2í a³'®A»LNÚ9Œ»cø\g¤-ðE6ð£?µý¸‘ü{°ÊÏo~Ý$øHë׃šùî—M‚µ»X÷{r Ç7¿ÊÏQ×ëÜn­Âð§ïÞ#óêV áÒ]\dƒÇzõGÔï˜_eƒçW·ú#.n¤º‹ensùpë‰ÜsrsàuÜzžëŒºãe×éë¬åü‡ÛÀðu cïå@¿8æ¿ áëæü ¯‰Y_ížõœ¢böÕùÐÇîåõÀo0|‘[÷þ©Æ|>h·Þ—¾êœ|¾á#õã¥?ßç߃ºZ‘Ï€Ànõ~ž‹— Ö—Y˰a·ýâýœ¿ñõ`Ýdî­J½.aS×¶¯³–c<°[_–¡÷ ï÷u cñ飸| ›÷æc8ˆ7Ünáˆá¾WýÕÏw‹{{Z[ Ö½W`ëHØxêÕ­S˜QÚkǬ¯Î‡Vax½}Þ×Ët«÷óòÝWçÃQêCwáí!a—’ï>b~µ|ôb¾z?£øk{¿¯Ò¿ÞИöËCÞ—Y Iظ¿¡×ƒ¶Ì:{Úu Sαè _â)ÎÑ>0üxèçß³–˜§A†¯S˜KÔ­/ÏÃD{êmVçÃÇ OðÔ µNa>Bûõ fFØu sI™¥?ùñ——õÇ/õ¼{eú¸=ÀðãFòïÁÅùðøê.·uv±ÎZ;«WU)W–ñ)}g¾¿6–ý¢óøÃ-¢ßõ»Ûý“@¸•‡ï¾Øuί³/šá}é.ê<÷„áq‹Ž×ƒ–‰:ë·Ìx=XÄD›§v1üx`÷=´^>œ[滿æ´÷°YF’°Þ‚Ö{êǧ¶/ç1Š5Ã?~Ë9²ø‹}IÐ.b¢Ÿóy{½ºðÛ;Åð%±ÎÞx¼ÙÛígaxH™XÖã÷ñ«[ÄÄ8'$ÿVÐe_€c–€ðEL,æõxýøÅ®C¾{{gƨÍËëõ‘É÷v<À{êÃ-®œkÌwËt•Ýz›~o†÷§¿t•µ×öðãŸò}U?r ÂÇÃ/ËÐ[ŽŠ'¥kE”­–2Zy=Xõ]3€7’Êž_ 3åµ[XÊ2@Ç9¹‡æÀó¯ü‰}™rÁ<à‹råçbñ _zðp||þü«%´Ïþü•°e9DÞü2 ¸¾ùeà¯çôáÕÕûz=°u‘ãm¯ñï·VaøRï¢î{}Ã×GŸu&!ÜöÛ ~=(™¿Î>‚ëõÀnñ„áþðá–Ÿýø%lΟþþpËÀßì\?üøeµw®:ê›}™ÓŽó­âïîOaãkW¹ÛCÐz½‘¼X&e¯‘ï°ñ¸†¯Fèò2Ÿÿ•Š:Ê8?2)³L®n™´ðè²®öÿ´Å}>ðLЮËÀjŸ;ÞŸ–ÃcÞÝqÛ/^£5æc¬FèìÇ-6ÿ=X§ûÑ~ü2=ø ®×ƒÈŒ2Ëôàu­gb~™D\ûùeÞ@†‰eqíç—yùñË$âu˼tý©íËf ›egë:DŽÔ_¦—~~­²RÏßݼk•¿m–Áúwjc-…v¾Ó‚í÷kñ¨3h}ÿwÈ«ÔeÞP}ô= ¼,k™£ûþb_¤²³;îðx]©ëô`´ø·sR–2)g4û;«z™Ì&¾,¾>­ê¾tçÝ^>êR×…}uà [×C9ÓT÷b_övÎÒp?ÿ.g2o³ž$¯=óæë¸5ñõ`ß½x2±Ôe•mû²°'¯nßççy…Í2rþ»¾&:[noxKÁûCÌ/#÷ç¿‹áëRu|Î)>,ë÷6Sw/m÷{@`¸ÝH^|õîß}‡¯¯nzIÛ—MæÏØü÷ –mŸãœ9àö´ËœÄ|,'K†öÊ÷虿®³çÔæó‘Šù¶ßþêõÀRðvëÒ^ŽLÐ.cœ÷Ñ_ÃDí©îbÊ®=í2z‘îbY_¿{ø2”ý‹Žÿö¿þëüŸÿøþËÿž½5Ì í DyLP-1.10.4/Data/Netlib/scsd6.mps.gz0000644000175200017520000004405110430174061015323 0ustar coincoin‹ºK®9scsd6.mps}K®%;Žä¼€Üƒo@ÇõñÏ0QU@º²€ÊnôþwÒqòz„hF#=Fùòº&I$ERüÇßÿë?§?ÿþùïÿüåoÿö?ÿýÿþù·›þ1Mãóóï×ýúlþùùç¿êí¿Ž¿ÕÛßêíoíö·vû[¿ý­ßþ6n·¿-·¿-·¿­·¿­·¿m·¿m·¿í·¿í׿͟ëßæÛ¼Ì·y™oó2ßæe¾ÍË|›—ù6/óm^æÛ¼Ì·y™oó2ßæe¾ÍË|›—ù6/óm^æÛ¼Ì·y™oóRoóRoóRoóRoóRoóRoóRoóRoóRoóRoóRoóRoóRoóRoóRoóRoóRoóRoóRoóRoóÒnóÒnóÒnóÒnóÒnóÒnóÒnóÒnóÒnóÒnóÒnóÒnóÒnóÒnóÒnóÒnóÒnóÒnóÒnóÒnóÒoóÒoóÒoóÒoóÒoóÒoóÒoóÒoóÒoóÒoóÒoóÒoóÒoóÒoóÒoóÒoóÒoóÒoóÒoóÒoó2nó2nó2nó2nó2nó2nó2nó2nó2nó2nó2nó2nó2nó2nó2nó2nó2nó2nó2nó2nó²Üæe¹ÍËr›—å6/Ëm^–Û¼,·yYnó²Üæe¹ÍËr›—å6/Ëm^–Û¼,·yYnó²Üæe¹ÍËr›—å6/ëm^ÖÛ¼¬·±¯·±¯·±¯·±¯·±¯·±¯¿Fûïÿý¿ÿïýãk üú×þ¥?õ4¦Ë¿ù¯é´.ÿ™ÿzÂÛwøÏWý•BžTRƒ#i§µãPI p äI¥c!-8’~Úf•¤BžTÒƒ#§%éPI p äIeq–pu„œðß–.Ò_ p äIe½ ™ÿês¯sËcºÊ_ëgwÛ~£ò竾Þÿ@à+Òs' ¯p$ŽEÁ½‘lwŽõ¯Ú–_í›™Çmï½®ÿ²»oðûOúWïë¯1^†¸ýüÿþóUù ¿$Êñ)¤cŽ…p, ¾Ý‡xÉ~çØþš—Z×u1¿uùkïÛ²ýËn¾Áïë±ýà×¾Ò}øþ#ã7ü6’0LJ9ʱø~âu$óçαÿ5×6ÿ²ð˜Çõ—Gú/ÿê¿ÏcýõE»ÂçÏï!zðŸ¯Êøu$qŽ!r,”cñáÇWŽÇHfGÅë“þ ÿ}Àê¬BžTjt÷´1¿ð ψs¶+ß×'üç+|FÄ9Nè€{r,”cñáÇWð¬Û“ãV·ïW5¤1¿p¡1çÆõÌ ÿù ë¬0lj…ÆTÒ«Iž¢Ë/çtÌhÌVùÐuÂsŒ¾þ8¿/ÝŽ_Ñ…_•ßðÛH¢ŸB:æXÇ"àÇéÎñÉxž¢ÿZÙc!Ëã –Ç<œÝ0΋KggE9bËÃp,„cðƒ#8¡*uæ®n)u8kÈcÌ på1VêÌÕàHc^€+±Rg®GðóB\yŒÕ8sȇ©ì°¬Wg®2?kaJ§_Û Ž^áWŽ“‚/ÎD¬Ú)®ÌªÖ™U^€!O*ÛËÙ>ájElÎ<>¼1ò“n/Wm‡ ãXÜÉ®mÆÊô_½ºS•yÞ;ÓÕzc@ÿ%8"ý8±(øÎõßÓC^mežw½zc•xÞ§ÇèÁ{ŒÖóÎpž·åX(ÇâÃ{ŒÖ󮯙ã¿5þæçLx÷ŸpqBýöN|øOœPaŽøˆ1 áXüÇN(ëÃXKË9¡.> [óÌ—³õ³ÐŠsäp±ç™/gëgÁ‘Ôèo†úœÇ`Ìí çqÁ G¼œësƒ±Ë9’Õ´+éœôÆ‚GuV€!O*ýålŸpµ"º³ ŒŸWD¹j;äX(ÇâÃÿÄÑŠ/wÿ W'ÔpöõÇ!GÌxyŠvȱ0ŽEÀùH:u®.unzÈ;É påtcù£ûËÎ.IûÕtï,»iaW´Dìk†#¸$µ å8 øÂîX»±üÑî§³_M÷μ¼•™`ÝZþàŒHpDàXÇIÁWvÖöP|§;s{®Ç`|ÇÀi(Á‘Ã+üJÄÉ:äH&b×Xg ·ƒUÞy!„<¨<-ÿðlŸp±"~{'>ü·€~“0ljÂÅŠPÒ«ɬï/izR¿ZþݱÒä¨n-pÇšàˆ.IÇB8N>Ï쎵ËßÚ'Î u±üéz¬Îr6Þ \QŽ®Öcu–³ñNàHZTcBEq‰ït?U|8Ae8B…ûäX¢q²9bÓaîÚsNz›Ò‡Žê¬BžTÆËÙ>ájE gAﮈñrÕvȱPŽÅ‡ó Èaìe”Å>Xªü¸¼ƒdÚŸ6½ _X¦}†#H•· å8 øÂ2퇱—‘ß1˜o4®ï`¾ÑÊ|£"Ö7Êp¾‘åX(ÇIÀWæP•·œ·Ç;¥ •M']->|vRCú+!>;I.•]—é,>|v®?û+!>;¹?T˜±Òc#ùÂgÇX鯄øì˜]•Y›] ßf‘êè¼WÕÑ‹Ñ÷È’¦VËUß/î=ã$àüž1Áq¢p\&îB;äHF¸Ã£ ”ËUß/ÌF¦·s‹Õ÷@&8"#p,„cpžµ¿€Êc{Ó@C½ËUß/¬‡š`“ØÛ Gpa9ʱøð¹³ÛTÛ›/z½¶\oö½Ü[À-§½Ëp×k–c¡‹Ÿ»[ýSe†¬!;"/À•±R_ƒ# Øy!®ìˆ•ªøIÄŽÈ peG¬FÅ#ÍF“¬×ë­ÅšÎå\C¹œ ŽŽSÚ¹œk(—s¥ålWS‰–$¯¡š¹¼W5s«ÑÑáÙ>ájE4gw Ž…«!¤W=’À½MuZ¯:zeö½XÑ++ÆKpDöàXÇ"à<+uõhÖÖ¡á¥õª£WfÑàÖ ìke8{Ìr,”cñáó`öØæ'1)å½…´o^€+í»QÅXc#‰hß¼WÚw UƒÓÇ·«fÛÒq-×HpD›pÌÄ5¶P\c ùç4‰p»úç[:Wi Ý!$8r8NÙ ä*m¡;„9\ Z¨¶…*)òB\URlF³…gû„«Ñy T¬'8N®V„^õHÆËÝÂÕ 5œ.ðÆY‚#9b†>¡†sÀÞ8Ûý0¹Ry{Hgå…¸ÒY;È]µ¶}èu¿êƒÙcô™ÙxŒÖËp•åX(ÇɇÏ3³ÇöPe}þh¿êƒí,úøÒŽbñfg%8¢­8Âqpþ¾éòi’Ì~õ÷t,~ù« ŽŽS’±ø=ä¯î4õõª–iùÂÊ¯Í p•_»}ží®VÄpæ1Pý—à8Q¸ZBº¨þ›? £ÉÜŽÓ§¨8~æœô.|&7ø)Žö p,”ã$à3¹ÁŸ? £Éh#ú@ÛÇŸÙ:o^‰ÆLq´p,”ã$à•hÌù‰Ò8~Ü@D œE83ÆDK0 Û1G«1çOÄï V—a ¿ÃÀ™w’áÈḜMøor$1¤2£I­\d]½à"ëjžýÀÂì䉜ðÙ ,ôWB|vB$ÝÈI{,A*I!>;×$ÝÈI¦@*I!>;FßAE7rG2žõJR€ÏÎf<¨èÆ@4Õé€ÿî'ɶl^€!O*ú/¸=à8(zÂYØøgÛ Ç‰ÂqpùÁ±(¸7]OC¯à8¾Þ>á,p‡³šŸ GdTŽ…p, Îj~¾_éÎ>ôZè€ã+—Î.¥îpÖ}(Ź–c¡‹€³îC¿¾ªº³wº~àØ¡™ÎFµÌå»Â+ë>”âœ.˱PŽÅ‡WÖ}èû•n äôu>»õò£:+À'•ÝýmÌZÙ“ÑçlW¾¯Ox­üŒˆsœÐ÷äX(ÇâÃkågmÕõ4žÆ¬MjÌÚ¸ž9áµqæ8Q¸Ð˜JzÕ#Ñ}è?^qrdÏ{Üà•uÊpEdˆc!‹€WÖ}èû•îìãYuHË£g7Œ³=¸³³¢±åa8±xe‘¹¹úáhåpÖǘàÊc¬þã‘<ƼWc¥Î\ Ž$à1æ…¸ò«qæÃ28NÛ8á¬8æg݇29§¿<8N ¾8¡ѤÖ~sæ€A•à@È“Êör¶O¸Z›3oŒü¤ÛËUÛ!ÇÂ8÷F¢;ûÐøÇÁå§7¦à¬ûP†#Ò€c!‹‚ï\ÿUÝÙ‡‡—êÕc݇* nUà1ZÏ;ÃxÞ–c¡‹¯¬ûÐ÷«9ú[ãŸafOŸ©›V/ˆWDœ#\ÎOŽ…rœ|xùΪº1wÒgÕY!„<©´—³}ÂÕŠh΂2#\íåªíc¡‹¯ÍYº³§1/ÞÓ˜µs=óôưΠsœ(\hL%½ê‘èÎ>ôù–ŽŸF±£ ¯¬ûP†#ò¼ÇB8¯¬ûÐÜü$&妵Ÿ•àÊÏjþ“‘ü¬¼W~V3> :ÇèÓ®NííÁŠçïpÖ}(ÃÕ€c!'g݇¾_bnôr¯]] æÆ‹‚ÓÈ\‚#‡ã”M»ì#™Ýˆ–/ð{ÐÌš!y!„<©ì/gû„«±;óh"sð7Ù_®Ú9Ʊ(¸3’úy¹ûO¸8¡ê‡pƇ'T˜#>b ÇB8¯~BUÝÙÇ;¡.> [uæËÙúYhE„9r¸XuæËÙúYp$5ú[㟡²G›EÌí çqÁ G¼œ+{üZÄ.;äHv–n äôÆ‚GuV€!O*ýålŸpµ"º³ ŒŸWD¹j;äX(ÇâÃkwVÄx¹ûO¸:¡†³¯> 9bÆËS´CŽ…q,ÎGÒýÔWåÜôw’àÊ;éÆòG÷—ìQ¨Ž\zZþEÀY÷¡GpIj9ÊqpÖ}èû•îìCÅ8àøÁ ã8ë>”áˆ8À±Ž“‚³îC߯ñîl̥NjøŽÓ(P‚#‡ã2'ë#™Ýˆªð{€Æ*ï¼BTêçålŸp±"ê‡Ï£¡ß$Ìq¢p±"”ôªG¢;ûÌ4=©_-Ö}¨Òä¨n-pÇšàˆ.IÇB8N^Y÷¡ïWº³wB],º«³œwWD”#‡«õXål¼8’Õ˜PQ\â;ÝAÎcPŽPá>9–hœ¬CŽØt¨º1wÒÛ”>tTg…8ò¤2^Îö W+b8 Êx'pEŒ—«¶CŽ…r,>œg@c/£,vö@éǛޅ³îC)Ž UÞr,”ã$à¬ûÐ÷+ÝÙ‡>ÐvÀñãgO{¹8ë>”â|#˱PŽ“€³îC߯U>ÞrÞØ36¢ÊÇÀi%R‚#:Ǭ–ê˜#8¡F(–@/-ÆÕÜn¼£(88$8r8~¢BÄd:äˆ'¢êÆ@¼$y€`€Uyy!„<©èÎ>ÞκØËlgÕ™ï,`Óƒæˆw–áXÇIÀëÌwVÕ}fš@2®ö2ë>Tiúʰö2ð‘o8Âqðʺ}¿ Tù8'ÔÅ^n%Rp^ ”àÈáKŸP‘J¤Š% g9wÖ¤RÄžpïÈpÄÇBgÍ>EL¦CŽä€ÓÜ“Þ$]Á£:)À•Å/˜Êý>;ý•ŸR†ƒŠn äŽd{T˜JR€ÏN’ËAE7rG²? À!•¤Ÿ‹Ü*U7òFR?Ï„zD%+ÀgÇì:¨èÆ@üñ‰%Tàª:z1úYÒ´Àj¹êûŽgœœß3&8NŽ‹ÀÄ]h‡ÉHwx4r¹ê{Ö}ˆßÎ-Vße˜àˆŒ\À±ŽEÀyÖþ*íM õ.W}ϺUh^€MboC2Áu†åX(ÇâÃ+ë>ôýJwöá×kËõ‘uªôro·œöv.Ã\¯YŽ…r,>¼²îCó꧘*3d Ùy!®ìˆ•ªøIÀŽÈ peG¬TÅ·ØH"vD^€+;b5*i6šd½^o-Öt.çÊåLpäpœÒÈå\C¹œ+-g»šJ´$y ÕÌå…¸ª™[ŽÏö W+¢9ó¸ÛHpœ(\­!½ê‘î hªÓzÕѬû¿XÑ++ÆKpDöàXÇ"à<+uõhÖÖ¡á¥õª£Y÷¡Jƒ[+°#¬=–áì1˱PŽÅ‡WÖ}hÞü$&¥¼·öÍ p¥}7ªkl$í›àJûn¡jpúøàvÕl[:®±…â Žh“Ž™¸ÆŠkl!ÿœ&nWÿ|Kç*m¡;„GÇ)›\¥-t‡°Ñ"‡«A Õ¶P%E^€«JŠÍh¶ðlŸpµ"º3ŠõljÂÕŠÒ«Éx¹ûO¸:¡†sÀÞ8Kp$GÌÐ'Ôp¸Àg»&W*o鬼W:k¹«ÖÖ¡½îW}ÀºUúÌìôý*PYGŸ?Ú¯ú€uªôñ¥ÅâÍÎJpD[p,„ã$àü}Ó=ä Ò$™ýê îéXüòW9§$bñ{È_ÝiêëU-Óò…=”_›à*¿v7ú <Û'\­ˆáÌc ú/Áq¢pµ"„tQýW? £ÉÜŽÓ§¨8~æœô.œuJq´Wð€c¡'g݇êd4mDh;àøñ3[çíÃY÷¡G«1ÇB9NκÕO$zH`8àøq=4páÌpq,Á(lǭƬŸˆßA ¬8.Ã~‡3ï$ÑÃq9›ðß:äH&B7¢I­\d]½à"ëªÎ~`avòDNøìú+!>;!’ƒŠn 䎤= – •¤Ÿk’ƒŠn 䎤?Ó •¤Ÿ£ï ¢¹#Ï‹zH%)Àgg3Ttc šêtÀ¯XÚÔ !„<©è¼hàö€ã è gaã;œn3' ÇÁåÇ¢àÞHt= ½‚?àøzû„³ÀÎj~2‘Q8±(8«ùù~¥;ûÐk¡ޝ\N8»”ºÃY÷¡G`äZŽ…r,κýúªéÎ>Üéúc‡æ¼Q—ï o¬ûPŠ#pº,ÇB9ÞX÷¡ïWº1wÒ·?ŽasŽê¬BžTjt÷´1[eOFŸ³]ù¾>á­ò3"ÎqBÜ“c¡‹o•ŸµM×Óx³5©1[ãzæ„·ÆuV˜ãDáBc*éUDwö¡lpüxÅÉ‘=ïqƒ7Ö}(Ñ!Ž…p,ÞX÷¡ïWº³gy´!-6œÝðÞ†³³¢±åa8±xc‘¹Zýp´r8kÈcÌ på1VÿñŠÀHc^€+±Rg®GðóB\yŒÕ8sȇa §mœpVs‡³îCŽŽÓ_'_œ‰ÐhRë¿9sÀ Ê p äIe{9Û'\­ˆÍ™Ç‡7F~Òíåªíca‹‚{#Ñ}hü€ãàòÓSpÖ}(Ãé?À±ŽEÁw®ÿšîìÃÃKõê±îC·*ð­çá¼Í|g5ÝÈ;é3ê¬BžTÚËÙ>ájE4gA®ˆörÕvȱPŽÅ‡·æ¬ÝÙÇÓ˜oŒiÌÖ¹žyzcXg…9N.4¦’^õHtgú|ËÇO£XÑ…7Ö}(ÃyÞ€c!‹€7Ö}¨6?‰I¹i-ägå…¸ò³šÿ¤G`$?+/À•ŸÕŒƒÎ1zÄ´«B{{°âù;œuÊpDG5àXÇIÁY÷¡ïW˜½ÜkW¨¹qÁ¢à42—àÈá8eSÄ.;äH&B7¢å ü4³fH^€!O*ûËÙ>ájEìÎ<šÈüMö—«¶CŽ…q, }^îþ.N¨öáœñaà æˆñŽEÀÛ‡ŸPMwöñN¨‹ÃÖc›ùr¶~ZaŽ.Öc›ùr¶~IþÖøg¨ìÑfs{Ây\0Ã/çÊ¿±Ë9’¥y'½qàQà@È“J9Û'\­ˆî,(ãgÁÑ_®Ú9ʱøðÖ1^îþ®N¨áìë‡CŽ˜ñòíca‹€ó‘t?õU97=ää…¸òNº±üÑý%{ê€ã—ž–pÖ}(Å\’ZŽ…rœœuú~¥;ûÐG18~pÂx'κe8¢p,„ã¤à¬ûÐ÷«@|§;scéñ"¾cà4 ”àÈá¸Ì@ÄÉ:äH&B7¢…jü ±Ê;/À•öy9Û'\¬ˆöáóh£@è7 sœ(\¬%½ê‘èÎ>•¦'õ«åϺ5šÕ­åîXÑ%)àXÇIÀë>ôýJwöñN¨‹åO×cu–³ñNàŠˆräpµ«³œwGÒ¢*ŠK|§û1¨âÃy *Ã*Ü'Ç“uÈ›M7òNz›Ò‡Žê¬BžTÆËÙ>ájE gAﮈñrÕvȱPŽÅ‡ó Èaìe”ÅÎ(=àøñO`Ó»pÖ}(ŤÊ[Ž…rœœuú~¥;ûÐÚ8~üìi/g݇Rod9ÊqpÖ}èûU ÊÇ[Î{ÆFTù8­DJpDÇàX‚ÕRs'ÔÅè¥Å¸šÛÃw§‡GÇOTˆ˜L‡ñD4݈—$ °*//À'ÝÙÇÛY{™í¬6ólz°³ÂñÎ2 á8 x›ùÎjº³O¥ $ãj/³îC¦¯ k/ß(ÁùF€c!'o¬ûÐ÷«@•sB]ìåáV"çµ@ Ž.N¨Öø ©D¡XÂp–sgM*E,á çñŽ G|,tÖìSÄd:äH8ÝÈ=éMÒ<ª“B¹QYü€Ù©Ü?á³SÐ_ ðÙ)e8¨èÆ@îH¶‡A…©$…øì$¹Ttc w$û³RI ðÙ¹Èý¡Òtc o$íóL¨GT²B|vÌ®ƒŠn ÄŸXBÕÑy!®ª££ï‘%M ¬–«¾_Ü{ÆIÀù=c‚ãDá¸LÜ…vÈ‘Œ$p‡G(—«¾g݇øíÜbõ=P† ŽÈÈ áXœgí/ òØÞ4ÐPïrÕ÷¬ûP£æØ$ö6$Ã\gXŽ…r,>¼±îC߯tg~½¶\oY÷¡F/÷pËioç2ÁõšåX(ÇâÃë>TW?ÅT™!kÈŽÈ peG¬TÅ×àHvD^€+;b¥*¾ÅF±#òB\Ù«QñH³Ñ$ëõzk±¦s9×P.g‚#‡ã”ö@.çÊå\i9ÛÕT¢%Ék¨f./ÀUÍÜjttx¶O¸ZÍ™ÇÀÝF‚ãDájEéU$po@SÖ«Žf݇øÀŠ^Y1öX‚#²ÇÇB8çY©+¨G³¶ /­Wͺ5ÜZaí± G`YŽ…r,>¼±îCu󓘔òÞBÚ7/À•öݨb¬±‘D´o^€+í»…ªÁéãƒÛU³m鏯Šk$8¢M8fâ[(®±…üsšD¸]ýó-«´…î9§lr•¶ÐÂF‹®-TÛB•y!®*)6£Ù³}ÂÕŠèÎ<*Ö' W+BH¯z$ãåî?áê„Îxã,Á‘1CŸPÃ9àoœí~˜\©¼=¤³òB\é¬ä®Z[‡>ôº_õë>Ôè3³;ð­=–á *˱PŽ“o¬ûÐ÷«@e}þh¿êÖ}¨ÑÇ—v‹7;+Ám À±Ž“€ó÷M÷/H“dö«/¸§cñ{È_Mpäpœ’ˆÅï!u§©¯WµLËöP~m^€«üÚÝèƒðlŸpµ"†3ê¿ljÂÕŠÒEõ_û€Œ&s;NŸ¢>àø™gpÒ»pÖ}(ÅÑ^ÁŽ…rœœujÑd´} í€ãÇÏl·g݇R­Æ å8 8ë>Ô>‘è!}€á€ãÇ DôÐÀY„3ÃhLı£°s´³}"~-°:ภKøμ“ GÇålÂë#™Ýˆ&µp‘uõB€‹¬«6û…ÙÉ9á³X评øì„H*º1;’ö,X‚T’B|v®I*º1;’þL7€T’B|vŒ¾ƒŠn äŽdôë«®;ûp§ëŽš?ðN]¾+¼³îC)ŽÀé² åX|xg݇¾_éÆ@ÞIßÿ8†Ý9ª³ByR©ÑÝ_ÐÆì•=}Îvåûú„÷Êψ8Ç pOŽ…r,>¼W~Öv]OãiÌÞ¤Æìë™Þ×YaŽ… ©¤W=ÝÙ‡>°qÀñã'Gö¼Ç ÞY÷¡ GPD†8±xg݇¾_éÎ>žåч´<úpvÃxÎΊrÄ–‡áXÇ"àEæZõÃÑÊá¬!1/À•ÇXýÇ+# xŒy!®<ÆJ¹IÀcÌ på1VãÌ!†%dpœ¶qÂYqÌκe8r8Nypœ|q&B7¢I­üæÌƒ*/À'•íålŸpµ"6gÞùI·—«¶CŽ…q, îDwö¡ðŽƒËOoLÁY÷¡ G¤ÿÇB8ß¹þ뺳/Õ«7ƺuܪÀc´žw†#ð¼-ÇB9ÞY÷¡ïWsô·Æ?ÃÌž:>9R7­_¯ˆ8G¸œŸ å8ùð>óÕuc ï¤7Î<ª³ByRi/gû„«Ñœe :ÇèÓ®NííÁŠçïpÖ}(ÃÕ€c!'g݇¾_bnôr¯]] æÆ‹‚ÓÈ\‚#‡ã”M»ì#™Ýˆ–/ð{ÐÌš!y!„<©ì/gû„«±;óh"sð7Ù_®Ú9Ʊ(¸3’þy¹ûO¸8¡ú‡pƇ'T˜#>b ÇB8ï~BuÝÙÇ;¡.> [}æËÙúYhE„9r¸X}æËÙúYp$5ú[㟡²G›EÌí çqÁ G¼œ+{üZÄ.;äHv–n äôÆ‚GuV€!O*ýålŸpµ"º³ ŒŸWD¹j;äX(ÇâÃ{wVÄx¹ûO¸:¡†³¯> 9bÆËS´CŽ…q,ÎGÒýÔWåÜôw’àÊ;éÆòG÷—ìQ¨Ž\zZþEÀY÷¡GpIj9ÊqpÖ}èû•îìCÅ8àøÁ ã8ë>”áˆ8À±Ž“‚³îC߯ñîl̥NjøŽÓ(P‚#‡ã2'ë#™Ýˆªð{€Æ*ï¼BTúçålŸp±"ú‡Ï£¡ß$Ìq¢p±"”ôªG¢;û4šžÔ¯–?ë>ÔirT·–?¸cMpD—¤€c!'ï¬ûÐ÷+ÝÙÇ;¡.–?]ÕYÎÆ;+"Ê‘ÃÕz¬Îr6Þ I‹jL¨(.ñîÇ Šç1¨ G¨pŸK4NÖ!Gl:tÝÈ;émJ:ª³ByR/gû„«1œe¼¸"ÆËUÛ!ÇB9Î3 ‡±—Q;{ ô€ãÇ?MïÂY÷¡G*o9ÊqpÖ}èû•îìCh;àøñ³§½\œuJq¾‘åX(ÇIÀY÷¡ïW*o9oìQåcà´)Á €c VKuÌœP#K —ãjn7ÞQœF9?Q!b2rÄÑuc ^’<@0Àª¼¼BžTtgog]ìe¶³úÌw°éÁÎ sÄ;Ëp,„ã$à}æ;«ëÎ>&Œ«½Ìºuš¾2¬½ |£G䎅pœ¼³îC߯U>Î u±—‡[‰Tœ×%8r¸8¡zã'T¤i„b ÃYÎ5©±„'œÇ;2ñ±ÐY³O“é#9àtc ÷¤7IWð¨N p äFeñ f§rÿ„ÏN@%Àg§”á ¢¹#Ù¦’೓ärPÑÜ‘ìÏpH%)Àgç"÷‡J×¼‘ôÏ3¡QÉ ðÙ1»*º1|b UGç…¸ªŽ^Œ¾G–4-°Z®ú~qï'ç÷Œ Ž…ã"0qÚ!G2’ÀM \®úžuâ·s‹Õ÷@&8"#p,„cpžµ¿€Êc{Ó@C½ËUß³îCš`“ØÛ Gpa9ʱøðκ}¿Ò}øõÚr½Ad݇:½Ü[À-§½Ëp×k–c¡‹ï¬ûP[ýSe†¬!;"/À•±R_ƒ# Øy!®ìˆ•ªøIÄŽÈ peG¬FÅ#ÍF“¬×ë­ÅšÎå\C¹œ ŽŽSÚ¹œk(—s¥ålWS‰–$¯¡š¹¼W5s«ÑÑáÙ>ájE4gw Ž…«!¤W=’À½MuZ¯:šuâ7+zeÅØc ŽÈ áXœg¥® ÍÚ:4¼´^u4ë>Ôipkv„µÇ2=f9ʱøðκµÍObRÊ{ iß¼WÚw£Š±ÆFѾy!®´ïª§nWͶ¥ã[(®‘àˆ69à˜‰kl¡¸ÆòÏiávõÏ·t®ÒºCHpäpœ²ÈUÚBw-r¸´Pm URä…¸ª¤ØŒf Ïö W+¢;ó¨XOpœ(\­!½ê‘Œ—»ÿ„«j8\à³GrÄ }B ç€ ¼q¶ûar¥òöÎÊ p¥³v»jmúÐë~Õ¬ûP§ÏÌîÀc´öX†#0¨,ÇB9N>¼³îC߯•uôù£ýªX÷¡N_ÚQ,Þì¬G´5ÇB8NÎß7ÝC¾ M’Ù¯¾àžŽÅï!5Á‘ÃqJR ¿‡üÕ¦¾^Õ2-_ØCùµy!®òkw£³}ÂÕŠÎ<ªÿ' W+BHÕý2šÌí8}Šú€ãgžÁIïÂY÷¡G{8ÊqpÖ}¨@F“ÑFô¶Ž?³uÞ>œuJq´p,”ã$à¬ûPÿD¢‡ô†Ž7ÑCgÎ G 1ÇŒÂvÌÑjÌþ‰ø´Àê€ã2,áw8óN29—³ ÿ­CŽd"tc šÔzÀEÖÕ !.²®úìf'Oä„ÏN`¡¿à³"9¨èÆ@îHÚ³` RI ðÙ¹&9¨èÆ@îHú3ÝRI ðÙ1ú*º1;’ñ¼¨‡T’B|v6ãAE7¢©NüøŠ¥M½à@È“Š~Á‹n8Šžp6¾ÃYà6Ãq¢p\~p, îD×ÓÐ+øޝ·O8 Üá¬æ'Àc!‹‚³šŸïWº³½:àøÊ儳K©;œuJqF®åX(Ç"à¬ûЯ¯†îìî8vhþÀuù®ðÁº¥8§Ër,”cñáƒuú~¥y'ýøãç¨Î p äI¥FwAsTödô9Û•ïë>*?#â'tÀ=9ʱøðQùY;t=§1G“s4®gNøh\g…9N.4¦’^õHtgúÀÆÇWœÙó7ø`݇2AâXÇ"àƒuú~¥;ûx–ÇÒòÃÙ àc8;+Ê[†c!‹€™ëÕG+‡³†<ƼWcõ¯Œ$à1æ…¸ò+uæZp$1/À•ÇX3‡|–qÀqÚÆ gÅ1w8ë>”áÈá8ýåÁqRðř݈&µð›3 ª¼BžT¶—³}ÂÕŠØœy|xcä'Ý^®Ú9Ʊ(¸7ÝÙ‡À8.?½1g݇2‘þ áX|çúoèÎ><¼T¯Þë>4hp«ÑzÞŽÀó¶ åX|ø`݇¾_ÍÑßÿ 3{êøäHÝ´j|A¼"âár~r,”ãäÃÇÌwÖм“Þ8sð¨Î p äI¥½œí®VDs”ñáŠh/Wm‡ åX|øhΊÐ}6 „~“0ljÂÅŠPÒ«‰îìÓizR¿Zþ¬ûРÉQÝZþàŽ5Á]’Ž…pœ|°îC߯tgXþt=Vg9ﮈ(GWë±:ËÙx'p$-ª1¡¢¸Äwºƒ*>œÇ 2¡Â}r,Ñ8Y‡±é0tc 路)}è¨Î p äIe¼œí®VÄp”ñNàŠ/Wm‡ åX|8Ï€Æ^FYììÒŽÿ6½ g݇RAª¼åX(ÇIÀY÷¡ïWº³} í€ãÇÏžörpÖ}(ÅøF–c¡'g݇¾_ª|¼å¼±glD•ÓJ¤Gt,Ž%X-Õ1GpBP,^ZŒ«¹=ÜxGQpqHpäpüD…ˆÉtÈOÄÐxIòÁ«òòByRÑ}¼u±—ÙÎ3ßYÀ¦;+Ìï,ñŽ“€™ï¬¡;ûtš@2®ö2ë>4húʰö2ð‘o8ÂqðÁº}¿ Tù8'ÔÅ^n%Rp^ ”àÈá℟P‘J¤Š% g9wÖ¤RÄžpïÈpÄÇBgÍ>EL¦CŽä€ÓÜ“Þ$]Á£:)À•Å/˜Êý>;ý•ŸR†ƒŠn äŽd{T˜JR€ÏN’ËAE7rG²? À!•¤Ÿ‹Ü*C7òF2>Ï„zD%+ÀgÇì:¨èÆ@üñ‰%Tàª:z1úYÒ´Àj¹êûŽgœœß3&8NŽ‹ÀÄ]h‡ÉHwx4r¹ê{Ö}ˆßÎ-Vße˜àˆŒ\À±ŽEÀyÖþ*íM õ.W}Ϻ h^€MboC2Áu†åX(ÇâÃë>ôýJwöá×kËõ‘uôro·œöv.Ã\¯YŽ…r,>|°îC¿<®q3d Ùy!®ìˆ•ªøIÀŽÈ peG¬TÅ·ØH"vD^€+;b5*i6šd½^o-Öt.çÊåLpäpœÒÈå\C¹œ+-g»šJ´$y ÕÌå…¸ª™[ŽÏö W+¢9ó¸ÛHpœ(\­!½ê‘î hªÓzÕѬû¿XÑ++ÆKpDöàXÇ"à<+uõhÖÖ¡á¥õª£Y÷¡Aƒ[+°#¬=–áì1˱PŽÅ‡Ö}¨o~“RÞ[Hûæ…¸Ò¾UŒ56’ˆöÍ p¥}·P58}|p»j¶-רBqG´ÉÇL\c Å5¶N“·«¾¥s•¶ÐB‚#‡ã”Í@®ÒºCØh‘ÃÕÀ …j[¨’"/ÀU%Åf4[x¶O¸ZÝ™Ç@Åz‚ãDájEéUd¼Üý'\PÃ9àoœ%8’#fèj8\à³Ý“+•·‡tV^€+µƒÜUkëЇ^÷«>`݇}fv£µÇ2Ae9Êqòáƒuú~¨¬£ÏíW}Àº úøÒŽbñfg%8¢­8Âqpþ¾éòi’Ì~õ÷t,~ù« ŽŽS’±ø=ä¯î4õõª–iùÂÊ¯Í p•_»}ží®VÄpæ1Pý—à8Q¸ZBº¨þÑdnÇéSÔ?ó Nzκ¥8Ú+xÀ±PŽ“€³îCã2šŒ6¢´püø™­óöá¬ûPŠ£Õ˜€c¡'g݇Æ'=¤0pü¸ˆ8‹pf8‰8–`¶cŽVcŽOÄï V—a ¿ÃÀ™w’áÈḜMøor$¡ѤÖ.²®^p‘u5f?°0;y"'|v ý•ŸÉAE7rGÒžKJR€ÏÎ5ÉAE7rGÒŸéJR€ÏŽÑwPÑÜ‘ŒçE=¤’à³³*º1Mu:àÇW,mê…BžTô ^4p{ÀqPô„³°ñÎ·Ž…ãàòƒcQpo$ºž†^Áp|½}ÂYàg5?ŽÈ¨ áXœÕü|¿Ò}èµÐÇW.'œ]JÝá¬ûPŠ#0r-ÇB9g݇~}µèÎ>Üéúc‡æ|¡.ß¾°îC)ŽÀé² åX|øÂº}¿Ò¼“~ùã.ÎQà@È“Jîþ‚6æRÙ“ÑçlW¾¯OøRùç8¡îɱPŽÅ‡/•Ÿµ‹®§ñ4æÒ¤Æ\×3'|i\g…9N.4¦’^õHtgúÀÆÇWœÙó7øÂºe8‚"2ıŽEÀÖ}èû•îìãYË–Ç2œÝð¾ ggE9bËÃp,„cð…EæFõÃÑÊá¬!1/À•ÇXýÇ+# xŒy!®<ÆJ¹IÀcÌ på1VãÌ!†%dpœ¶qÂYqÌκe8r8Nypœ|q&B7¢I­üæÌƒ*/À'•íålŸpµ"6gÞùI·—«¶CŽ…q, îDwö¡ðŽƒËOoLÁY÷¡ G¤ÿÇB8ß¹þ[tg^ªWoŒuZhp«ÑzÞŽÀó¶ åX|øÂº}¿š£¿5þföÔñÉ‘ºiÕø‚xEÄ9ÂåüäX(Çɇ/3ßY‹n äôÆ™ƒGuV€!O*íålŸpµ"š³ ŒÇWD{¹j;äX(Çâ׿¬ÝÙÇÓ˜oŒiÌ¥s=óôưΠsœ(\hL%½ê‘èÎ>ôù–ŽŸF±£ _X÷¡ GäyŽ…p,¾°îC£ùILÊMk!?+/À•ŸÕü'=# øYy!®ü¬f|tŽÑ#¦]ÚÛƒÏßá¬ûP†#:ªÇB8N κ}¿ ÄÜèå^»º@Í §‘¹GÇ)›"vÙ!G2º1-_8à÷ ™5CòByRÙ_Îö W+bwæÑDæào²¿\µr,ŒcQpg$Ëçåî?áâ„Z>ü€3> <¡Âñc8±øòá'Ô¢;ûx'ÔŇaëq™ùr¶~ZaŽ.Öã2óålý,8’ý­ñÏPÙ£Í"æö„ó¸`†#^Ε=~-b—r$;K7òNzãÁ£:+À'•þr¶O¸ZÝYPÆÏ‚+¢¿\µr,”cñáKwVÄx¹ûO¸:¡†³¯> 9bÆËS´CŽ…q,ÎGÒýÔWåÜôw’àÊ;éÆòG÷—ìQ¨Ž\zZþEÀY÷¡GpIj9ÊqpÖ}èû•îìCÅ8àøÁ ã8ë>”áˆ8À±Ž“‚³îC߯ñîl̥NjøŽÓ(P‚#‡ã2'ë#™Ýˆªð{€Æ*ï¼BT–ÏËÙ>ábE,>6 „~“0ljÂÅŠPÒ«‰îì3hzR¿Zþ¬ûÐB“£ºµüÁk‚#º$ á8 øÂº}¿Ò}¼êbùÓõXål¼¸"¢9\­Çê,gãÀ‘´¨Æ„Šâßé~ ªøpƒÊp„ ÷ɱDãdrĦây'½MéCGuV€!O*ãålŸpµ"†³ ŒwWÄx¹j;äX(ÇâÃyä0ö2Êbg”püø'°é]8ë>”âRå-ÇB9Nκ}¿Ò}èm?~ö´—‹€³îC)ŽÀ7² å8 8ë>ôý*Påã-ç=c#ª| œV"%8¢cp,Áj©Ž9‚j„b ôÒb\ÍíáÆ;Š‚ÓˆC‚#‡ã'*DL¦CŽx"݈—$ °*//À'ÝÙÇÛY{™í¬eæ; Øô`g…9âe8Âqðeæ;kÑ}M W{™uZhúʰö2ð‘o8Âqð…uú~¨òqN¨‹½<ÜJ¤"à¼(Á‘ÃÅ µ4~BE*‘F(–0œåÜY“JKxÂy¼#à 5û1™9’N7rOz“tê¤BnT¿`v*÷OøìôWB|vJ*º1;’íaPa*I!>;I.ÝÈÉþ,‡T’B|v.r¨,º17’åóL¨GT²B|vÌ®ƒŠn ÄŸXBÕÑy!®ª££ï‘%M ¬–«¾_Ü{ÆIÀù=c‚ãDá¸LÜ…vÈ‘Œ$p‡G(—«¾g݇øíÜbõ=P† ŽÈÈ áXœgí/ òØÞ4ÐPïrÕ÷¬ûÐBÍ °IìmH†#¸Î° åX|øÂº}¿Ò}øõÚr½Ad݇z¹·€[N{;—á®×,ÇB9¾°îCcõSL•²†ìˆ¼WvÄJU| Ž$`Gä…¸²#Vªâ[l$;"/À•±4M²^¯·k:—s år&8r8Niär®¡\Ε–³]M%Z’¼†jæòB\ÕÌ­FG‡gû„«Ñœy Üm$8N®V„^õH÷4Õi½êhÖ}ˆß¬è•c%8"{ p,„cpž•º‚z4këÐðÒzÕѬûÐBƒ[+°#¬=–áì1˱PŽÅ‡/¬ûÐØü$&¥¼·öÍ p¥}7ªkl$í›àJûn¡jpúøàvÕl[:®±…â Žh“Ž™¸ÆŠkl!ÿœ&nWÿ|Kç*m¡;„GÇ)›\¥-t‡°Ñ"‡«A Õ¶P%E^€«JŠÍh¶ðlŸpµ"º3ŠõljÂÕŠÒ«Éx¹ûO¸:¡†sÀÞ8Kp$GÌÐ'Ôp¸Àg»&W*o鬼W:k¹«ÖÖ¡½îW}Àº-ô™ÙxŒÖËp•åX(Çɇ/¬ûÐ÷«@e}þh¿êÖ}h¡/í(ovV‚#Ú€c!'çï›î!_&ÉìW_pOÇâ÷¿šàÈá8%)‹ßCþêNS_¯j™–/ì¡üÚ¼Wùµ»ÑáÙ>ájE gÕ Ž…«!¤‹ê¿å2šÌí8}Šú€ãgžÁIïÂY÷¡G{8ÊqpÖ}hù€Œ&£èm?~fë¼}8ë>”âh5&àX(ÇIÀY÷¡å‰Ò8~Ü@D œE83ÆDK0 Û1G«1—OÄï V—a ¿ÃÀ™w’áÈḜMøor$¡ѤÖ.²®^p‘uµÌ~`avòDNøìú+!>;!’ƒŠn 䎤= – •¤Ÿk’ƒŠn 䎤?Ó •¤Ÿ£ï ¢¹#Ï‹zH%)Àgg3Ttc šêtÀ¯XÚÔ !„<©è¼hàö€ã è gaã;œn3' ÇÁåÇ¢àÞHt= ½‚?àøzû„³ÀÎj~2‘Q8±(8«ùù~¥;ûÐk¡ޝ\N8»”ºÃY÷¡G`äZŽ…r,κýújÕ}¸ÓõÇÍøJ]¾+|e݇RÓe9ʱøð•uú~¥yê$ 虵FwlA›i­ì™çs†*ß‹'|­|_Ç9NèPzr,”cñákåçãªk`<-·6©åÖÆuà _×3aŽ… -§¤W=݇>ŠqÀñƒ'Gö$Ç ¾²ŽAŽ ð q,„cð•u ú~¥»ñxÖÂ:¤µ°®ÈÃÒ9\Øë`ä«öUŽ] yfy!®<³ê?IÀ3Ë på™Uê4µàHžY^€+Ϭ§ ù ,ñá€ãôˆΊPîpÖå'ÑÃqšÉƒã¤à‹3ºM=à7§ ¸¨y!„<©l/gû„«±9óøðzÈOº½\µr,ŒcQpo$ºƒ 4pÄ}z= κüd8"Í8±(8ëòóë«UwÐáaœzõzX—Ÿ•‘*ð̬‡›á<\˱PŽÅ‡¯¬ËÏ÷«9ú[ãŸaöŸîI!p=>…à­±ê8ÞYk\ xXf…8ò¤Ò^N× Ç¿ÉÓÏš|øÚø.sœàOÚØOúäX|øÚøi·ê6žÎºø0Lg­ŸôOk0lj…ÎRÒ«‰îaC*9àøëg_0!Ãñ3)ÖÏ2䛟b£œ›òNòB\y'Íp"0’€w’àÊ;iÆòGg=ÚÕt§'Xi÷Îzãd8¢ãp,„ã¤à¬7Î÷«@Dˆ^cµ«ãÐܨUQp7JpäpœP("kr$¡ÛÖÐäú~éXÓ!/À'•ýålŸpµ"vgMÜþ&ûËUÛ!ÇÂ8wF²~^îþ.N¨õÃ8cùÃ*Ì1†c!‹€¯~B­ºïŒwB]gE„… ¯rkDâ;Í™ˆÊõñ'œÇ 2ñ‚ªìqd'ë#YÛºqŒwÖÇ–Y!„<©ô—³}ÂÕŠè΂2Þ \ýåªíc¡‹_»³"ÆËí{Â…ÎZ‡sxŒ—'T‡Ò “ŽÈw?Q¹=dÓç…¸²é»±—Ñ]{èç€ãGtžörpÖQ&Å\ÈYŽ…rœœu”ù~¥»µÐ‡8~DÀØôÎ:Êd8¢C p,„ã¤à¬£Ì÷«@,^™ô«¹ÝÝxGQpqHpäpœ:.b2r$¡›½Ðâ£~X…›à@ȃÊúy9Û'\¬ˆõÃçÑFÐoæ8Q¸XJzÕ#ÑÝZš¾Ò¯æ6L é9!(ÿ)6ÿ¤{Ùê~猸ØËtETgA›þ&QŽ®VDu”±éáHZTgÁ£úKè~¼£øpïÈp„*ïɱDc2rÄÊ{ÕíV¼³Ö&]¡Ã2+À'•ñr¶O¸ZÙíñr=v(½Pé€ü0V&ÊçeO5pü "°„]8ëÃ’â’†-ÇB9NÎú°|¿Ò=NèSU?õ´2‹€³>,)ŽÀ£° å8 8ëÃòý*PïÀ9àøAQï`à´&#Áî€c ÖtÌq‚û:poMËÇÇÕHîÝzQpz»àÈá¸X_ÜÿwÈOĪ[¤ðâÌ.ž­šÊ p äIE÷8ñvÖÅH¥Ê,!o #ê¬UwYX'”þ‰‰ÑÓƒa­LÑžàˆ\À±Ž“€¯¬Ê÷«@õ‚sF\¬ÌáVXç5 Ž.Έµñ3"Ra1B÷ÖƒÕ—{ëáß­ÎïÖ3¡Ê{r,Ñûÿ9’#F7)á7ÇyøíNxñ›g§ò÷„ÏNbs%Àg'Eû ¢‹¸#Ùf¦’೓†pPÑEÜ‘ìÏRH%)ÀgçÒð‡Êª‹x#Y?ÏDaD%+ÀgÇX9¨èÆ"®$ü)]¿ÄÉ‹=–«^]Ü[°IÀù-X‚ãDḠEÜÔuÈ‘Œ$pÃDÓÒ–«^eGøÝÑbõ*P: ŽÈQ áXœç// rÑúÔ4¸\õ*ë8²Ò@ät¿õû3ãn9ʱøð•uù~¥»yð‹¤åz Æ:ެƒÝñd¤S8¾Æ²wp†üê'Û)u¿†ôu^€+}½RUZƒ# èë¼Wúz¥ª´ÅFÑ×y!®ôõj.ÒF4Ýt½ºä4u5!¤Px9¼+-‡¹š´¨p ÕÜä…¸ª¹Yf O× Ç¿Iàmƒ5äy'8NŽÒÀÛkÈó^C^-M Y¯šõéàþêŠÞ60VL‚#²bÇB8çùy+¨z± ?¬WýÇút¬ƒéŽƒ@û>Éo~:‡Ry[Hgå…¸ÒYU'56’ˆÎÊ p¥³¶P '}Zk»ª“]J%„ „€Û¹-ä Ò„¦íê né¬-ä¯&8r8N dml!u£IÒWµLKM¶P&v^€«LìÍèƒðlŸpµ"º3:ÑljÂÕŠÒ«Éx¹}O8>#ïñ$¤s8><ïñì~ÀP)Š=tÒç…¸:éw:gu?}üo¿Âða½žn0¬n0öP= },c¿ž¢¬'ÄZa£’Få%8"•8Âqpþ‚Ýò;hÀ~¿ú{:*¹‡|£GÇé¨äòvš:wUf4yåçå…¸ÊÏÛÍYží®VÄpf{¼\JÏÔܬPan&飞Ü{0³'…Ø; ¤Ø ¹õ2"Ì!LÁ9àø[“èÃY'…G«(ÇB9NÎ:)¬ŸHT„–ëp\ +¢"Î"7Ž@Ï Ž%]꘣Õ3ë'bãÒ‚ŽË„kàÌÎpäp\Æ!|…9’‰ÐM¨•ù~µ×Ù¿®‹Øþ þ”®› ¬Í‘ž„?¥ëkw¤'áOéúÑþu8Ò“ð›ôê»êê‡û«ß'/ÀÕ¯Xý‡ÀHºþ­óB\­ˆJÒÉÐë&/ÀÕêj¾Y«~ÒúMòB\ý&ÍOŠ Œ$ð›ä…¸úMº¯(ÔDôÐHòBœäþ×?>ýõ?~ÏÏ Ërýe:óíþï^o{í/¯íþÕù‡÷dž>ÿW•›_ì?ÿñÿ?ÿÛ¿ýÁˆÚäDyLP-1.10.4/Data/Netlib/fit1p.mps.gz0000644000175200017520000013004210430174061015320 0ustar coincoin‹&K®9fit1p.mps¥½Ñ²$;Žø.3ýCþ@^K#âq$ÍÚ®­Ô“F¶«ÿÿ‘=U}7œE=ªú©ÝDdœœÿø—ÿö¯¯ûÿÇÿõïíßþãøÿýÿùŸÿñ?¼þñzýÛ¿þã_þë¿ÿï¯?¾~õ?>?ÿ×à¯üåðWÀ_þ:à¯þºò_í- li`K[ØÒÀ–¶4°¥-lé`K[:ØÒÁ–¶t°¥ƒ-lé`‹-¶Øb`‹-¶Øb`‹-¶8Øâ`‹ƒ-¶8Øâ`‹ƒ-¶8Øâ`K€-¶Ø`K€-¶Ø`K€-¶ °e€-l`Ë[Ø2À–¶ °e€-Ør€-Ør€-Ør€-Ør€-Ør€-'Ør‚-'Ør‚-'Ør‚-'Ør‚-'Ør‚-Ør-Ør-Ør-Ør-Øre[Úç5ø«Ã_9üð×€¿øë„¿Àð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÀï6ð» ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ün¿ÛÁïvð»ü®ß5ð»~×Àïø]¿kàw ü®ß5ð»~×Àïø]¿kàw ü®ß5ð»~×Àïø]¿kàw ü®ß5ð»~×Àïø]¿kàw ü®ß5ð»~×Àïø]¿kàw ü®ß5ð»~×Àïø]¿kàw ü®ß5ð»~×Àïø]¿kàw ü®ß5ð»~×Àïø]¿kàw ü®ß5ð»~×Àïø]¿kàw ü®ß5ð»~×Àïø]¿kàw ü®ß5ð»~×Àïø]¿kàw ü®ß5ð»~×Àïø]¿kàw ü®ß5ð»~×Àï:ø]¿ëàwü®ƒßuð»~×Áï:ø]¿ëàwü®ƒßuð»~×Áï:ø]¿ëàwü®ƒßuð»~×Áï:ø]¿ëàwü®ƒßuð»~×Áï:ø]¿ëàwü®ƒßuð»~×Áï:ø]¿ëàwü®ƒßuð»~×Áï:ø]¿ëàwü®ƒßuð»~×Áï:ø]¿ëàwü®ƒßuð»~×Áï:ø]¿ëàwü®ƒßuð»~×Áï:ø]¿ëàwü®ƒßuð»~×Áï:ø]¿ëàwü®ƒßuð»~×Áï:ø]¿ëàwü®ƒßuð»~×Áï:ø]¿ëàwün€ß ð»~7ÀïøÝ¿àwün€ß ð»~7ÀïøÝ¿àwün€ß ð»~7ÀïøÝ¿àwün€ß ð»~7ÀïøÝ¿àwün€ß ð»~7ÀïøÝ¿àwün€ß ð»~7ÀïøÝ¿àwün€ß ð»~7ÀïøÝ¿àwün€ß ð»~7ÀïøÝ¿àwün€ß ð»~7ÀïøÝ¿àwün€ß ð»~7ÀïøÝ¿àwün€ß ð»~7ÀïøÝ¿àwün€ß ð»~7ÀïøÝ¿àwün€ß ð»~7Àïð»üî¿;Àïð»üî¿;Àïð»üî¿;Àïð»üî¿;Àïð»üî¿;Àïð»üî¿;Àïð»üî¿;~øÝÿüßÿëÿúoÿøQ_òõ¿ÿüßÿñ?ÿý_þñïßÅ%¯ô¿ö×ë»Îÿ7&î’x0ñ!‰Lü”Ä/"Þ>ŠxcSפ©klêš4uM]“¦®±©kÒÔ56u]šºÎ¦®KS×ÙÔuiê:›º.M]gS×¥©ëlêLš:cSgÒÔ›:“¦ÎØÔ™4uƦΤ©36u.M³©siêœMKSçlê\š:gSçÒÔ9›º¦.ØÔ…4uÁ¦.¤© 6u!M]°© iê‚Mݦn°©ÒÔ 6uCšºÁ¦nHS7ØÔ i꛺CšºƒMÝ!MÝÁ¦î¦î`SwHSw°©;¤©;ØÔÒÔlêNiêN6u§4u'›ºSšº“MÝ)MÝɦîbSwISw±©»¤©»ØÔ]ÒÔ]lê.iê.2uí£L]ch¢Ih¢14Ñ$4Ñšhšh M4 M4†&š„&CMB¡‰&¡‰ÆÐD“ÐDch¢Ih¢14Ñ$4Ñšhšh M4 M4†&š„&CMB¡‰&¡‰ÆÐD“ÐDch¢Ih¢14Ñ$4Ñšhšh M4 M4†&š„&CMB¡‰&¡‰ÆÐD“ÐDch¢Ih¢14Ñ$4Ñšhšh M4 M4†&š„&CMB¡‰&¡‰ÆÐD“ÐDch¢Ih¢14Ñ$4Ñšhšh M4 M4†&š„&CMB¡‰&¡‰ÆÐD“ÐDch¢Ih¢14Ñ$4Ñšhšh M4 M4†&š„&CMB¡‰&¡‰ÆÐD“ÐDch¢Ih¢14Ñ%4Ñšèšè Mt Mt†&º„&:C]B¡‰.¡‰ÎÐD—ÐDgh¢Kh¢34Ñ%4Ñšèšè Mt Mt†&º„&:C]B¡‰.¡‰ÎÐD—ÐDgh¢Kh¢34Ñ%4Ñšèšè Mt Mt†&º„&:C]B¡‰.¡‰ÎÐD—ÐDgh¢Kh¢34Ñ%4Ñšèšè Mt Mt†&º„&:C]B¡‰.¡‰ÎÐD—ÐDgh¢Kh¢34Ñ%4Ñšèšè Mt Mt†&º„&:C]B¡‰.¡‰ÎÐD—ÐDgh¢Kh¢34Ñ%4Ñšèšè Mt Mt†&º„&:C]B¡‰.¡‰ÎÐD—ÐDgh¢Kh¢34Ñ%4Ñšèšè M˜„&Œ¡ “Є14aš0†&LBÆÐ„Ihš0 MC&¡ chÂ$4a M˜„&Œ¡ “Є14aš0†&LBÆÐ„Ihš0 MC&¡ chÂ$4a M˜„&Œ¡ “Є14aš0†&LBÆÐ„Ihš0 MC&¡ chÂ$4a M˜„&Œ¡ “Є14aš0†&LBÆÐ„Ihš0 MC&¡ chÂ$4a M˜„&Œ¡ “Є14aš0†&LBÆÐ„Ihš0 MC&¡ chÂ$4a M˜„&Œ¡ “Є14aš0†&LBÆÐ„Ihš0 MC&¡ chÂ$4a M˜„&Œ¡ “Є14ášp†&\BÎЄKhšp M8C.¡ ghÂ%4á M¸„&œ¡ —Є34ášp†&\BÎЄKhšp M8C.¡ ghÂ%4á M¸„&œ¡ —Є34ášp†&\BÎЄKhšp M8C.¡ ghÂ%4á M¸„&œ¡ —Є34ášp†&\BÎЄKhšp M8C.¡ ghÂ%4á M¸„&œ¡ —Є34ášp†&\BÎЄKhšp M8C.¡ ghÂ%4á M¸„&œ¡ —Є34ášp†&\BÎЄKhšp M8C.¡ ghÂ%4á M¸„&œ¡ —Є34ášp†&\BÎÐDHh"š MC!¡‰`h"$4 M„„&‚¡‰ÐD04š†&BBÁÐDHh"š MC!¡‰`h"$4 M„„&‚¡‰ÐD04š†&BBÁÐDHh"š MC!¡‰`h"$4 M„„&‚¡‰ÐD04š†&BBÁÐDHh"š MC!¡‰`h"$4 M„„&‚¡‰ÐD04š†&BBÁÐDHh"š MC!¡‰`h"$4 M„„&‚¡‰ÐD04š†&BBÁÐDHh"š MC!¡‰`h"$4 M„„&‚¡‰ÐD04š†&BBÁÐDHh"š MCCBƒ¡‰!¡‰ÁÐÄÐÄ`hbHhb041$41šš M M †&†„&CCBƒ¡‰!¡‰ÁÐÄÐÄ`hbHhb041$41šš3šøç¯þß›"mE–æ;²´_ÄóÛIÈÒº3ñ<Ä1YOClÖ YÚIÅauœ„,ÍO"ž7VëB–F‡Õ}M–öãß%âiêúÇ Y×~˨ö 'øµ$KAÄacå±wiêpcuB–ÆÅóªk„,­9?˜ö÷OSׇ²4D`zë„,íë?qXuB–vPñ`ÚN ?˜xžºÆ–±©C˜nDÜÙª˜N×|†é-#Kc`zÞqk˜þ‹øC|-ÉÒ¿ÐÆ×š,}8„é‘¥±±óuÓé¢Í0½]‘¥Qñƒ8+€éƒ}w€éyÑiÃLÏÚ¦SíÓLJ¥Q_0ÝÆŽ,íñƒ‰ŸÒØaêÆš,{Ú ÓaÇLoT€,ÍÒ)1!KûEœ\ëYÚ×îeâþ#Yýp€&²ñMù ''H–Æà?¥õc²4ê¬àn¢Y×N,Î| Û%4di_ÓEÈÒèÌg4‘± ’¥Ñ§‘¥Ñø>؆R„4‘í!m؃­ºCÚ° Mt M YZû¡\aOdicM–Fo,-/ÚS)œèìnÈÒh>di°ãNiêNr­ƒdi þ#YZŽïx7A'ìY3^"KãSh"¸K¹ÂžÈÒ!K£®K¥ÑÔЄ÷5Yš±7‘¥Œ,m0q&,ͨx0íCHÌ€,-{Z KûóLœäuH–ÖHFm M˜t71‘¥uF–v2ñXß„š„&, Æ®\&"YZаH–Æ-¥å’$Kc''H––Ïh˜§E²´äm€,^"YÚÅõªÉÒ~¿ÖåyH–Fg^"K£‡YÚIÈÒèÔ9tB²4êm2šwaJJŒdiù»»‚a'²´sG–ö‹xFyìˆ&˜³Êh–t7di9¾#Y˨'²4[“¥Q,di =¤ wíCÈÒ¨ñx7ÑY5þXÃ@$K£«N#K£âƒM„&&²´¾&K£9­±» $Këlͳ» K£×:Yš²4ê.’OdilÇ14di\{ìâPNN€,Íó~?NIüÂñZ’¥QãMä5*7b"Y5‚žÈÒØ–Éhr›S)²´\ di´Â ÉÒò²» † ‘,-g—”kdi\œmØŒ&xns‘U7‘¥íH––Rb K£ÉÒ@Ü%íÄ×!YšQqrr‚dilÍ;CYÓŽ I!K£Æ³¾ $KcÞÉÒÒ²A²4gc4‘ÖüD–FÅÙÔe4AsZ KË+H–F?V:!K£S×IJŒdi,£vVé„di\œÀÿ‰,8+$KËÎødiq²4:uFŠÿ'²46vv7AÈÒ~¿ÈŽsiÃ:¹C²4:vè›H9-’¥ÑEëäÉÒ¸v&,‹_ëp$K£îЈ+ÅÿH–Öœ¥Qボ»Ô7diyÃ"½[´Anÿ'²4’Ó"YZÖ.¡ $KKGH–Fg~°©JÍ ’¥ñJá¥å¼Î¥J'gwH–F§î ¥‰.ÝM YZάMTœ\a»„&€,Írf%ÝMYZ>¯²4z¡6‘¥ B–Æ*,-Ïü)EØ“´œ YZ£â¤ {"Kcc¿Èe"’¥ÑesødiÔøŒ& ÊH•NÎÐ’¥Q?‘2l$Kck^$KckÉÒÚEÈÒ®ÁÄÉÔ!Y;³²´Ü‰Œdi\;©tB²4¶l,-µ#YÛ2Yš1²4f|#@ ÉÒØíÀD–6YZ\Lœ ‰ú&‚ua‡t7di)Â"Y‹°H–fƒ¥qñc}К@²´¬Ý”0di ®°«tšÈÒØªËh"²·1åö"K„,.ÚŒ&r«¥qíN0lH•NYZ²4.ÎV  ê¬2š°"‘,î8¸›hÁÈÒ˜ö GH–FÃDR6’¥…²4vÀŽdi ËLdiÌ×óu€&‚ ‰`wH–ÆÅ™¯ƒ» Võdiùà ¥Gl"K»Ödiô˜ÉÒRB>‘¥1ã¶êåä$ØÝ’¥'UYZ0ñ\›¹/_K†.Îzµ?Šñmޝ%E 7&®xÚÆ8O[ï’øÉÄ•eÓ˜§m&‰;—|] 6ó’¯k1˜¸ôÝYõeJzП{+™Þú’¤±3_×$_ט¯k§4væëÚ)ÏjÛ)pú¯Ÿ‰¿2âì»_ÒØ9Á€¤ý:×¥âSó>I‰û‡l™þQf¾3në.¥ÄØæžf¾7I;s•]r•½L\qVyÚ.yÚÎ2ê.eÔ¿ô“¿ÖâLœ9ênC?˜¸4uìÁ•.¥Ä¥Ä] …‰.…‰ÎRâ.¥Ä¥Ä=¤©c¯†ô9~qÖ³+ùùÎü)æ.Œ%äšvÚ%MÝ !ÒiDZG†Lò´ÆÃL:=0æ¬LrVv±wIû:+HJÙwÇëÿú¹ÖÌq¢Ý¥¤´xÍ] ¿<›þªŸ$ÿEœ¾)®,ZgyKÞ¦xûÄÙÌ»²êœ¹‹_Þ¬&âôdIœ6þòôñZü`ÆKû½xcXÒ~2í§4vþP®Iâô¥[iÙ0wñ˶Kñ`6$wñË“²/öŠ,?™¸d<},VJ‚¥F¿<…JĉKc7â¨yM”ˆ?{4ôq6óýåmÐ{”ˆ³©sÉø‡ÏvÎâÁ´K00—¶ QZ6ÌYýòÂÞZübkþrIœíwLNz,Å‹§ì”™ÇòŠ¿~Þ‹®Ÿ‰[‹?| îq2ö!y¼ŒŸgÈ–o’½y“ì=)±å›d >ñÆÄḊCú–ÅÁ#Rq;‰¸7Eœ ˆ‡$>˜ø¥ˆ{¸$δ‡4óqñ!-›£ñCúp'ûi’8ûpùÐéý—u"Φî "~)[yç O“ÄWV¾]ñfoWpñ“‰KÚÙ~Çg%¸83^røÊC·&‰w&.MDÜ?Џ³±‡d|wIœ/¹ ä²Ïâ‡4öƒ/yäsÏâ§4öì.~8•×’Š_lÙ\’væmšæm.²a»ämýÄC'Î î"©£îŠ+ß½3wÑ%wÑdVÈÌÅÙÌKû½³ä¤KÉIgÉ ² sq²eºä.:KN€i—‹*.?˜ñ’·A²Z—Æž}Rvý”´ŸL»äm5‹_M?˜¸ß“Àˆ}‚‰KÚÓ.¹ ä@Ìâ&iwâç͇$~2qI{°±‡Iâ±^´È3GÅûpC2ž¡ ;$ñ“}¸Sšy M ÐÆ´]šöƒ‰_Bˆt¶ãàZçK܉¸1qeìÎâ;’fqq⨽)Î )°@ü”Ä™v Œ T7ÅÏ»±©3ÉxcÆKÙ…;[6Rv„˜ñCû ŽÚ%Æ9Ã2HøÂÅ™v Ë8;úp)»p–]ø%ý"Ú‘½‚‰;l )¾ÛïÑ•ïìô ¤Ó¸½ùá_K.NÂD¸2óHÅCšy¶ßCÚïØ âCgc—ÜE öá†ôᘻˆ!ÏŽ>BJâ`ÆÒÌlÇI™6EgñSÚqçÉÄ%í[´—´aÙÑG`fm)>Ø9í°Ì`''p'UhL\Yó£1ã›IâÌø¦i'žvtÅÛ`,ˆKƳc¸Pã3_ùâvíí‰×%_¨½{&þmãÛúgÙûn3cž/šcß=Ò»ç)£~åˆD<¥×_âI{Zo3f|ºCx7¿–ͱïnÌø´†¾†˜µ'ãûñ!âi ½½Ç²·öí~0ñŽßçµhº}§Ú¿wÆ;zz2>­ºw *žf(Ó¥ÖÜwkÇ âÆŒ7iÕ¥Tãm#–­¹ï¯ÈÂÄGú•eñ3¯f¦=!“wOœ´ù¶¶0>%:ï–8.rÏîû—§ |qÙûng,/{¿V3d¿§Ò’÷ùaß=î¼GÞqž×<Ÿ-½O*žmÌ‹6å_ïA§nœdì#»ÊÆÄ<óŸuWó—·éLlì95‚gÓíPÆ©Q^u˜±e“sÁÏç~ÿw$.£ÉI_—‰Þ–ȈreÊO˜AÄû:Êä’ž]äú•¯—Æž³¾hs “]e.lyÿÂè‹Â–¯ä$?¦ØIÄs Mu®‹ùJv™8ä )Æå‚™¯±SqÇ èµ (¦î€´0èôbâSæûZð|<&~(”ù Þ£³E IÄ'×IcÏç_ïì*O eƒ¯!~–,ï î"gG^69»èŠY´9»à¾î$Ê\gÎ ©ö õZ°#ð|¾ÈÙE.húrCTÜqˆ«‚¦ŸØ˜ˆµ·é9»è×`âùè#lf‡w\dÑöÖÖk>38pOÛát'¿Æ›ŽûÞ¦}(3Ÿ‡r|ïp4èØ/ܯ3ÄWôbÚ!9é½ûœœt† 3MÄW Mùæ¬åÀ#âäô ÃyP°U—s›‘ÅMIÌr½~¸œœ|%PLüdâÊac.wû™w¿¼_HÊ™8œ]¤—“»ØØ¿3 /oÓÒŽË:4«Ìïqø²ŒŽcØî$Æu8‘¡â9BqÒƒL‘ñs‚_‹ò<Že:û¤|>sgŽ:ûü8[z-X1¾Ò¶lòéN>=È5€o§cÏ™UO!2×3Ÿ3«ü6hÇsæ¬rfeG,‰?Þ~²±Cþe×’ø£ØïìܦCÊE]e>·ùJDSbS¶L>·ÙUBÊE#l>·i ~*®Îm®¶|2þg¶º¿ÈYe&á7#ùeøŸüZÐŽ|E*~ýžÏmܘ£Îç69¯Ëe™|ÍçM89Ét&üN*?íþ5öüh»òÝ ÎWR”Él(_¾Ž‰·im¾V¯®¿ÎÌ*“vǃ<"ö\Vž¾;º|-úNÎ*3¶|Íü`âªÂËãùñkƒ¦ÅòÝó¯9íLü$3ß/œ”µx>ži¾$|ù tѲ1ƒ1ºlrj”} S#6ópñõY— ó›ß'ÿûgI7óã.&Þ3ÒMcwå60“Òü785lÙä*òw÷CÙ2N‚T®wþ‰‘Öâpñu­_ÿÚ Ìø°5 4ȬèÔɨ3‰Î{8OC<|,¹rx€Î5Ù_[cýöw±êr™ã´ç”‹1ƒ3«”ÛØ¡´dVŸkùx÷×wgî"'PíZ¿¾ÍÑDæó$e‡´a!Êâ§rµ‘ß¿~ãÖóE"~á ½BïƒÆ¸‹¹ÊËÑ ñ [&Ÿñ ¹Mvµ0qÿ|ÖûÝá¶é8™¸­Zs;¿ÊÌTHïÞ¿†Lý`âÇú*Ó!éaµÃ¥<£œ»è*Þ1¾ÜKïƒY9d@–_ Î«¹Qí#›˜ÞÆb!6up¥•–7iê ŠX¾]h‡›«c,߀æe™„ §.çL…ö|äeײÀoX‡Ã¡¼æM»Az0–äVo÷‹‰Ã)q~ÄYúîÆ¾;dVÌU:dV)%ÎüÔ(3sMâžÿñ3Ÿ§Æ’™ëý幈x?–ï óˇ{³t7ááÂñ~&öú ^¿¾p\ïçÈ늅¨»ä&Ô!5¢ËníòÌ眩²êrjD ¥|LG¯©/œp¸ôËS—S#¦=Me,“9ÑÞWc«¨ü¨k>trºeàÐ)Ç8ȬèÌc±P,)Õ~Þ¬ñìÒ@\¹ÊÍ3pÜç±}˜¯›Ó·×âៈ³©ƒÃ,†eüúï~A¶Ê¾{N Áø|ä4»¸ÏW^‹fŸ"DÂÉVÚï™gŽ—.Þæçt W3÷õ[À™[´™Ìî+@%™Ý×jîL<÷!Œ¾l‡â­™Ìî=®ônTqq_Ǹüïec‡ô-Nä×xùw¨HJ«.à:ßûú 5àÈëbß½CÖËV0~Jœùú¾<âú=\~ð’ÆA‡”˜…Ù:«ÌdÅÌgöŠ÷¹æü2‹-Z(hŠÏò=ܯÿÀfÞ Ž ¸ d7àá}}>päEÝJåWY¡¼Sñ±¾@é60à67÷ñŒ:¹ŽCrPåë'e¿bœ3q[¸åÞ@~¡–I&áÌ* ᣮ.áYÕ.ÌäD¨5Ê ˆ•vRüp”ƪ>¨¬묘öˈ³º¤(s4‘ûÖ®-Å$PŸü°iް,)Í›?¯Ù_‹ÆÆ·õÕFnläÉÉÀ·ÏòeR^ù‰;ßgÿ,‰;¿2ꃉ“ÛÑ\8|€—IßG[¾LÊÃÄh¤Þ&·UcÏUÜ9Ê ¨âþ°±wÒ+4ð,ŒÆ,‹‡pÀ>àÄ Œ¯ê¨cM†šZÌÊ®ÙX>- l¦&‰ŸD;öÃv"ÎÉP%íÈG’;‡"ÎØ ?&i7Ê¥ÚqFž„ïnÒ©CŽ$KjE;ã#ù…%u-ÎðÝMj<#ø I;2¤N¥’$–Ïk¾ÙÙTüdÆŸÒ²áT¬~Q"ÎXl/é»#€‰L®ñgL®±frµe§R%ÎX-ÑY‘U×·bëÊÔá—ï.2¹~‹&®¬º‰É57ûHcgÜK¿p´®Å}wïŠvÊäêJ˜˜˜\ÆäjLœ}„"Ψ'’U&~:Yó%×Z0ÎÓ×òùF.Έ!?ʇ댞°7ÅÓâ;‰iÑöþQ´wF YÒÝ⌾¨[“Ä;WvÜD™ÚɆT;£+ëRzÐÕziìŒ;¹Çħ¦”]ôÁ´KéAgB¿ÐœqFÅzJâ§‘ï~žÊ‡»ˆŸï—´æ¯c-n%Æý&›i, b'ñÆnŒȤô  C•Œg\k†^Ì™8#ÅlCÒÎÈP»d|'ÞÆ$(dQrv%@ã6S­1¦7“\¥±äÄ$ V°Øš$έ+y1Gm¡hcŽÚBšù¸È²ÒØÛïCÒ>ŽujdŽ3Æ+i‡¤ý$žÖ$?o'%ÁmBZ¨Rð²ïÎ)xIü\ϼüîÆ'Š0Й8#Cý(Æ;;³š8t‰S]—ĉ§Åç¹ñ$@»B!êý—¦®“ýîRN«Rðgžv¢àeÚ³§}ç’T?%ñk}jäÒ‰¾™§.º$Î>\HË&ز „:sÔ.yùIŽ>\:òšˆz“¸tfåcn¾¤™¿lýÝCJ‰=âºÞ†¸‰ç7W¼4IœQ±6åì"Ú`Ú•ï^ð+!2؉Yte¿KJ#{±w'7#øxdŠq!ïã‘Ùx“¦Î‰»éÈ+XZ¡Ä¸‰½8DöâX³›È^köbgìÅ$=øMöâX³§™.‰3`<¤ÆSòciÙäŽw[W>Ëæ žvbE>™øI–Í©Ä÷8Y6gWíÉõ©äóÁ˜ÚñÙNúáØÍHH7#õ²“W?™xA½¬„‰‰ 9È£¡lìss_37Æ&®$fs³¥Ûe¿ãˤiæ'âgcâÌø&ÏbÜ芷)˜›âÃÕíÿû¯Ÿþõ)Ô÷_ý âÆÄÁ¬¿‡wŸz-8™HñüÝ¿~5^ ²æ¯ÿðéDŸhËÒ…£"âÆ_¯×óq2u ÆÞâµ*‰xÿåÌxð }O4Æÿõ‰µx‡êƒNüE´wû÷Ôuû‡ŒYÅ?ßcï8)ƒˆŸDÜpìäîùoãñ½ 6u˜ýý•Ä]™:Ã:_ ªèÊøƒ‰ã¤©3ÜXßâŽSçkqgîÂaêgSç®,DùiÍ;Nqxñ•µŸ’ø…6. fø~6uÑ%qÃÏûZâ𙘡î¯õÓÇ‘U0vÿ6~à²9×âƒí¸!í¸Á¢Ìpeꮎï±Sñóã"ÆEühdæ)ÂFbÜáJŒÃ´=­ùãP>Ü3ôý|¦³þùÖâ˜õ'í'N Ñ~FÂ×ú1k–]œÁ´t‚DœèóTõ‰/¦œË:+¾h/|íõ{Í_è.ÈÌ_F>Ü功¿‚„‰ ý™ù W2^ÚqøØLû~=ø£Ä÷ÆrÚöQòº†Xæ¯$‚³‚µœ5Lv½ñs=ómJ‰×ñ½aJüùÖŽ)±“±cJü㦹¿œˆû:9Ê9ºlf¾ßp^Jç3ß4óS²K>\Çu‘ò<’×5L‰¿t›RⓈã Ëê¾fñk7û(ËÆHjV=‰9V%„ðá̪̅aJüíëÚ”“±cJœ>ܔӮ=mó ,.K<"nk$Õ\PÙ¾ÎÁÏ·))ý{(ù|ìò·!DN…‘%ñCY´q®s›’¯ÃÜӾǎé&[6ƒùº)Ý$Ëf0_7¤01%¥ÉøCùp˜º~?>Ü0[íDS×´æçl•ˆ³ý~(‰Y;#ákA¢Î±ÌT6û Û©}4œ}ȹ}gSbf¯;wVÐr’­áq_gâc} lŸCÈ*ís®ƒ”a«*ùp6Ý€OÝt~ñ¾ÞïS+ ñ6†iá÷w·¦@੯å/-๧µ)ûûþp½ µaö÷Y—–M'[Ʀƒ<2öNbœMyY6FrZ3%Ÿ7<–ûR†yI‰mºƒNÚWiFŽ÷Í?BjdÓtïʇs’ÏÞA“3+Ãìïû¸Ï\¹T²ùªùµ pçAʦS½ï7Ý.ãƒàwÄÍüt(ø½ãBI,Nf¼‚a Ó·4óÓqïä»iìÓqß÷Ø¥ã>äVȆrRjóMõkÁ,_Œ}Ê*¿g~:î#ûý˜*^«* …l:LÚ•Cf›sÏׂ˜¾H¦Üó[ÓM‚a +O¿ÏmìT2jÃÜÓÎׂ¾žÃ;Éч—ß/æ.0«dÞfÊ*¿Ý^"3??÷}‡‰k(¹ÍtÜ÷=vÌ*ĸéPðþp>¥›ëç˜{úx­Z×(÷éªù|­Z×hFí’]øGAÐ>åžñ-~ ûÝ?×ÚY9¦›¤lçÜó[{Sª}|:’LÚ‡$ÎÆÞ.aÙ8f•ç÷wŸ+&‰x_ßËø”U2q_ç6Žé&Ùq޹çHâ ñNª}¦®?rûïFj|ÊVɲ1rç˜ÓÚAÄIÉŠ›‚aÝŽ5 t;… åF|Êi×Aʽ‘çJq O9í·»p—ăiÇõD¾»ŸësZ÷K™:Ìi“8æ´ä¼Î§œö{ц‚a}:ÑüÞ2BNë˜ù¦ýŽ-LTûEvÜPj 3ßë{ê0Ù52óƒ}8f«äÐÉÉç}ºƒ&ÆcRšÆ.ÝA;&¥ß—ÈŽI)ó6¹ÒòC9-ôc¬³JǺJ¶æ§Ô5‰_·Ÿ$¯óS R'9úðén›‰ã²ùö´§¤0óÍâ§²lNRñâx„ÊÄ/rZè—‘º?''—´l¦Ô5 abj8þ¾¾ÌVIˆ L]ýz­:‘)–‰é ;i‡±G#âèTŽ×‚ùŸã¸ÀÔ5Ækù$À— ^‹O'¥ßÚáL–¦®ßçu1e«'u%s`NKt´c BsZâë™!’øtRJ´O'¥çkñpÑÉ– )§ Ìi¿Aht¥P*0§ý¾ƒŽ)§]g1•OÞî"¦&"²lŒ:ÅT1I>œ‘³îß3ßï[¡˜’]òÝ1óý>%Sjbº¥ÿÖîÊUfLÕ—ßS‡É®w1u}/›éúž‰2ö¹‰ˆˆ“ž‘¥t!¢“E;]Ì3q_ßþG(‰$·‰©ª“‰“Ò…¥Š;9=ˆù—ˆÛ„Æ”ìã§ÓÜï01”ãý¤9¦\²açÓÜ×âÕƒbÇ|¸é—LÝT<ð½ã¤â8HccRŒ›çïwœ’ök}RQh`âßcÇ\™T>ÄI ¥âT àcªPø^ó˜+3?dÍOբ仟ä„<®pb©³ŠKZu雈K¹ŸÈÒ¢ÅããƒÌüEêir ÇÔt»‹1•.ïë 5> †_ç´cêT2"N¦nLJˆ“ÓÂ1ñFª>FSª}ÆÔ¼ÿ=ö¦TïF®óÆTÑJf~JÛ“ø!8ê1U´úkñ\?hSåÃ÷²éJ÷èä ut‚Ô˜zÿ¿¿ûTÁÄÉMèèÕÔËç*z¢î›jŽaÅ+½µñp;SBKZ Käù°—¸xNÓ /øÖ† &žWGzÜáðƒˆJä·6ºb<Ôå™ÚÃùQ¤cÅŠñŠüPˆ4u{6>O]oLüÂÕñZ¾ bÌx +qiê ƒ0=?‡tª=Èwn^úÝ ¦$~â'!âyêÒ+fÀ¶Áj_OƽZïLÜpg¼–lÆÆnlꀭÏSײ8lXöÝî2½V l\;åô®>ýBµÛ†¥§: 3‘Î<°mäe„ÅtÙPö<öSY6Àr×yž†,wù»±]gËîŽò‡ iê€þn¤©ƒx.S—ŸæUGÅ/²l€ºJ ɳ4vàÅìÃñsŽ2CаÀž—¿;°çõ‹‰LüT¾û`«ž ;Šôóš?¤ ¼§0TÎ>ÜÁ’  –,9R?£Ú/¢H@Œ}8èÊô”]œÒ†ê?—6,P…äÜ[êÎÄâiOiÕÁ“LÙøKZu@oÛ“¯z[j<ÐÛöü¢“£YDÁÆ5ðœÀ–4lË8[u>$íÇ:@7 Mà3q)H5D$5jˆ&Fˆ¸1í®Œ=HJŒô+[6€&ú•×`[ÐDÂï@¿ò ¦}°U7¤UhâHS7¤©lÕšpjü±Î¬¢ ¤M¤ {HÉÉA€X41ØØMX~vЕhb¤©;¤ h"w@AÅÙ†4AÅM$O{JyÝIÎëð-FêmNrrÒMÐôàdyÝ)ù:@é t$¡â9`oˆ&Ø–¹Œ‰»’UšðüZ¥&Mä-h¢Ñ±ç©kéí¼’÷Ù°øV&›ùŽhâLâ.‰Ç:»†z3 3yÑv@AÅÉ)qoНë¤ÄøN(ó´@c“ƒ> ÊR# ±©C4ÁÆÎÐ0×ü0‹ˆ_D{WÎëð‘ÓüẴê:9%î€&|0qaø†â÷Îî&:¢ j<Á°øt+;úÀw\ó†5Ãv†&:ÞM0ãM¤£h‚AàÎÐD7åÐ _‘MÉ °ëpwálêM8; ‰¤:ÞM0ãMdñ!ÜEâ¸)ŸÚþáM䱚öáMäeh‚!)|Z×óÛ¸JJ ä<95Brê.‚\ë9…Bø~¯yz™÷£x@))íCÚ°ƒùº¡œwDiÃ)L r…݇rûo§×ëð¹bªÑD—"ìAò:`âËæ ÷°øX²³w°+ÝMôƒNt¼›`c?™¯4A÷ûÉò:@\{¬á@41ØÔÃv M¯lØK¹‡í9¯^#îi/‚a‘׈Æ÷‹…‰kHâlÕ]ÒÔ]䔟ÒfA ŸÒNŸÒf@ Ø~8Ô×òm£ÚI^‡ol³ïŽn[?%íäZÇš’ãCÞ)¾›t7ìGÉQãCÞì»ãCÞÑÉCÞÜøƒi?…óykääĺr™äI¯ƒ=#Δ!š8“¸r#†¯[#¯³š|…<ùyëÊy¾UžØ ÐËiñó¼ßMš:c«Î”ä_JOŽÚ¤J'|BÝóê šÀ‡Öó‡Ã» ¶êMdqåöZäm$4œN?N8^˧Ùé–A4q’Ü©»p‚añewV8ÌO/?ÉûïtìA®u,”ä_‰O ÔM°ýhbä±K6Èɉ þÛ`VBøÄ}þpC¹Ã'îÓ ¸áÝ›:†& ÑÄÉÄI¥pEqí¹Ö±C©9±ƒ… DÌY$%¶cHÚaÕ¥0h‚Š_ë|¥¸ñ'I‰Mªt²Ó˜¸rû„T"¥J'4‘îãìTʰ ï&’ñXéÄÆ~‘““Є]¤¾Î°Ò‰y›‹%'€&›y@‘4  ºãM¤™÷ÿ¡ à³¢ÜY¥“”0áR_‡|V,5ò9êtDTü"Ú%4|VùœÖ›rû|VùÐÉ›‚aï&Î$>„E tX 9öMPí×ú|Þ»Rs¤YÇOuVÎî&¼+GÞ üž,š]8ÞM|’ø)‰“Sb7iÕaßDÚq¦4:¹‘ó:7¥ªÓ­:@ì&Ô$'nJi¢®:9V:%wáJrlZù䨴ø¢u’œ¸+NŽ•Niæ]òux7‘Œ—*€sëY¼ ÚY¥“‡rë¬ÒÉ¥¾ äÜíÒ†e}>”+l$¯ó¡°;¢‰4óCI‰U:—­òòÁ|ÝPò:`üÊ''~Hö y’¯;È;|ñ {°0h‚%'‡4u€&²·9•”رÒ)MV:±es²+ÝM8ë›’¯É.gSw*eØ@âR߆e(ä—R8á[u—4u©`÷K 9¯sénøÆò5RŒ1Gâë⣜œÄ‡œœ Å˨ãCîaã£Ôœ뛊1š«tЦDØh$%Š1Šaƒua‡„&¢‘0Dd…va£)«.°o"-@ÌQG'÷°Ñ•âÿè$¢ öáØÝDtå€=š M ]YJBêÂ#ð?LZuFNN teù¨3MLü`ÚOt‚DüZ¼CEÐÁ*+تc}ÀPF³‹ð`âC2žÜà vìN®°#”£Î&BI‰ƒ¡‰i鯂3šE°U§4vR®€&XÉJ RRßD B›4h´ÖhÐÀ×áÝÕ~0ñSùpx7‘>œ„&â Mq(íuHƒ–à@Êeb¤ø?Ž! ?~­hиŸgw!¡‰8ɵN`¥›º“%'§Òû'i¯‹S)œVé§aOR 4h<9¹ØªÃ» ¶ãšˆK)ÃDÉÛš*ÎòºK©¯ †&€©}‘Äø?§Óî&ƇlXäGëT;itŸSÒNúaGS®°G#ŒÀö£,€ˆÚ„Ñ”C' K˵ÄCê›øº]ØT;INFWÂÄ@4‘ÆÞ²ŽwŸ$®¤Ä£“‰ѕ{Ø1÷MÀ¯Î%YZº3D²´Wcâ–¶²´yqK²´ë$dióŸK²´× di\û•¿Â dióŸK²´%K£âY‡©„,íž;»ôû”ôçŠ, ¾{¯ÚàÎYÌ|—¦6V;Ò°ïëåk²´æT;8œ„,í¤ÚÉ-=’¥ûpÓO'ditÍg˜ÞÂ×di?¾(òݦûîÓóÌg˜Þ:[uƦ`ú+ˆ¸3bH€é/6uÎ|Àô×ÅÄÓÔµO_“¥ýîÎ|ŸÊ²a—~H–FÇžazNÈÒ¨· æëÂã±!éddilÑÆÁ´ŸŠ³ 6uÓ_Lû``úÑ™¸­Ó·‰,jg´U¦7£ÚY˜˜~Rílꦷƒˆg˜Þ.B–ƘÞÎ5YZ§Ž:Ãô–9·2L÷ÏSw²´lÍäpÈÒ¸8Àô#KklêNaO)ÂjditÍg˜Þ2ÏÜ)åu¦7J–6X”˜žÇ0Ý™ñÓ›¯ÉÒÌY˜þ:Yu•H–Ö×dim°©C²´“¥±0œhÉx¤AcY%r¢e*—Oß9ÑÀøÓM"žg¨eã/aæ‘í,³¡HpØÎìóY³ÑÔØÎÚá„íìEµ?lglÍ#ÛYþp;àì8ÛË.í,q©"ÛðÈv–ÇŽlglìòª8pPñ+ÏÑUp`0¶³Ón$D"Û5ÞÈ™"°ýHv‰8 ‘ÈvÆ5°5 û¥%ç’í,eÔÈvFÇîäþÙÎ,˜8©P@¶3úÝøyd;»¨8IÌíŒjFÙ…pàbâä` ÙΨŸ8ð"lgý ÆÃÔµ5ÛYöÝ3ø‘<¾–lgtÑRÈ6±±E;HbÖ†‚¤ƒÈvF=-ÀÓ Ûýp€0Lšºƒqì8©¸‘esH¾à@'lgÁd;í§"¼lÍvFϬí,/›SòuüH_K¶3.~ dy­éʨñW¾`ê„®Œ.›‹ÐZ ]™LÜH|Ïù|;Ù–|Œ¯HòÎ%]hÏÙꇎýZ¯:¤+céÊ£+ó'ÙEÿ¸¤=Öì@WF÷;Ò•e&Hô?T;Éi‘®Œ-›Î®Œe•@W–½M—n®ìuº2:ó¬: +ëƒj'ÝTHWƂҕ]Œ®ŒaXd%í!$'ÀJÖÒÃHDÖ¨ö“Lœû7r؈¬dYÜš²l¬“±ÏÍ>DÜ×ø‰È^lÍÛ [}öÝí$[3u6u9mÏçóÀ$FO ‘V¬eñP¦Òö¼hs¦ÎUNÛóQgwåðhÅzfЦ}"‘IŒ~¸ùÿµd£Þ&qÔq(k>ØŽ‹KÑžÓö–©› S§k~°7L8|@Z1Ïâ!àw¤Ë!rÊwÏi;lÈÔÙñ>ÒŠ™ñ« Ii?ØÔ¦|¸ƒœ"“XPíc ÿ‘IŒA! ƒ3uîmÎϺâ™Ä’šhÅmÕ)ùùœ¶çrd£;îdöœtˆøÉÄóÔ5füÅBäÜûOÄ;qVèÓ5ÅvyÙ\’¯»ñ´—´a¯“¬yä%&‡N@+–Ä}”0´b)D“˜±e3ÑŠe¾±2+¤º2¸.LœL0‰ÑœÖæÖ×’IŒŽ}&)~­™Ä¨v_ŸY“Ÿù6ÈÌ7%§hŲñ—2vÈúSj„Lb ¿#­XfÊçþ?î<ˆ¸“5/Á Ëé2‰qñs IŒ¯:û±g8@o…ŒÁ›Ïý‰¸¯kIŒ~8€¯Ä$Á¤ËËÆ.eËø‡ŒÝ•K%$ Ëîp5ª}Ò‘†qãuv„aAůuB*0j|ôuÕíDv0q'®àK,u"ØAÅ *0zN‹¼`Ùש…ˆ³9$??œ|÷¡y+×™¸¼˜öãCÄ€#±Wv9ŸçÆäܸ¼èõ={E¦+;„¼‰½²·9.ÅÓžlêN)³‚´=oX¬·a«.§íøÆ†€"²+ï#eמÏçóŽË™:ÿpì9¤ì¢Æ_ÌQçL^ç!e׋QvQo“ÓöNåµ¢ì¢õ6"e× S‡”]iÑ"e[uHÙõêkÊ.ºæ‘²+É|†à.²ëtBÙ5¨vò‹KÕûHÙ•’¤ìbõuHÙÚ• ‹”]Î(»¸ñÇ¿#e;tBÊ®<ó©³#/¤ìz£ìbcgÕû.•ëL”]N(»ØI)Rv¥›¤ìb…RHÙ•7¥)»ÚI(»XRŠ”]£Ê.V_‡”]¯±¦ìâûÝȶ›Rsâ¬z)»œ¹‹| =-Rv±Zb¤ìºe«lDÊ®ì*!Ÿg0)»òÔ¹R ”]-e]6ÑÖY%Rv±ê>¤ìÊÎ }–Y!eð)¥‰HÙڕƤìÊŽZ*×qöœˆKå:HÙŒ²‹ÏÊu\ªÞ÷q0ñSȬ€²+ŸœxùÔù¹¤ìÊkËuØØ¶a'PO{°©;†߃iW*²ËeÕžAì÷SZu€&ò¢E4Á>\äÔHªÞGÊ.»Ò3‚”]Yü’|«ÞGÊ.jüEê.²‹˜eפûZRvÑ܆Uï#e×Aµ †d\lË 3×+“f)§…ÈÌ•²Ê˜qëÓ$ãb™¹2 ¶Ï3íRb†d\lÇÅ ^K2.j|#—JHÆÅŠF€™+_ã"—SíçÚQ# ‘3WæÜjBjÌ\rn1O œ[¹­2º‚¤&Î-'œ[,«Dέ?Ir’3uz;€ÜX–y§”©n¬â&¤À•KR‘‹9+äÆJñé°F0q8³$ž&Ù5î`ùüh n,KµF@‡ÕX‹rcyÖ®¬:àÆj-snA#͇‰ŸkoƒtXÌÛ 7Vòu@‡EoÀ‘ë•I³LÈ•mWP$rc¥» ¤Ãšµ_K:¬L›ð©î"¯PBa+‹1ñc}ð‚|VóéÁµâ³BBªênâÚóY™b3?½–dOóµÎµätÊÆ‡4ö8˜ñ§âë‚´Ó"[Õ>ØšÒšÌ× iÑRSŠtKTü`ûýÆ~ ‘‡äëŽ`Ú%_ÇÚ¨U©ÐÎÖüùQÄÏÆÄ¥y²±ŸUËɵd?Êßý¼íxÒ ¯ýî‹q—ôÝ/¶ß/éÃa#s0b""Þ>$·AÊ!6uÈ?”›÷?Cðuís0í§0ó­}Ö;®5–MÃĬ3j ª´KïÄÛ4)³š€Läö¹–> ý”ÄIFä<Ôxc«ÎzQgu-Éy@Ü%íƒ,SÒƒflìÞ”©sƶá’ñÎ>œ’ö“‰+!Yp€aF{°C?×™2ÌÐ7Hj£+Ú‡1íÒŽÌUÉÛ Âۤܦ±Ü¦ –"øp‡IâÌÓÒØ&)L`nãkŠ>u'©êDŠª}΀^KŠ.N P;•´‰d@»’!EL^6—”°ÜÙ[¸8sV—aû‡¬ùþi’8YóÈÞ–Mÿ ¦ýÄO&®|¸Þˆ§íMYu½g՛⨑&%í¸ÞN!-ì‘óô"ÞWü|ïÆÄ¥©ëŒy KßYõ.­y#XyNèÔqž“SÒNNº”uvjÔ¥S£îÎÄCÒÎ>œ+Ϊ³Ì ‰Jæ{ØkETâRf…D%yæCrVA*»”˜! ˆ+5ò‘ä±ú hbbaËf°eS2\k¦‘l¼‚¤P$k?”»‰Îj‰»”˜õÙ¸4öƒm™ãÄ™¯;¤w’»‰~J[æ$÷q]:³ê'[6§ämNòl’€pq¶e.iìs—dü5˜¸òÝíC>²m0íö!‡Ìö1I»3ñÄÉš·&ŒåuöQâ;²mdñ&M]cS×LgS×”k\klêš’»‹Dº vÜgì.Ò0¯s&L»Ä&V ÂwÁÅÙ]¤™4vv‰„tÕ3ÞgeìÄÌ\AÐÆNÌL:1Cb‰üá\2žÝÚœr­ÅÙ‘×/lDœdÔ6¤ý>HFmCZó,·±ù4Šˆ3ãåàÅXnƒ| \œÜÇÙŠñ»”ÛØÁømÉÏŸl¿ÏY g«îTÎ*íd¾î’8¹·KúîÉçMº3vg—¤.r;`ZnsL\ùîÎά\JÞ w ”œÖ?¤ÝÆ¥2-g©‘iì$5ò¦,›‰¸ÀqÛ2Îr¤$ Æ³2-—Ê´œyMÌLœYy’8ë–n±yúß»$ÎŒ—’g•Nnšñ$9Áî{ªÝÙªsiìZû|ÿ0ñs}ðâÒuÞÔ%Ÿ´GS¶L¬Ò¥C'ì’ÏS':9;5ré:ÏYnS÷€_«p˜:)·ñƒ9êCšº#˜¸rà†ÍÖÙøS¹ÁfëêëœM_Šö`;.š$Þ‰vH7©ñÁ¦.¤å:oÖ#Ƶ3G=>ʲÌQ.‰3g5¤ )q;$»ôÃAæ›?>ÊÌ“?þïŠöcÚX¯e‹×>˜öC?ÉÌ—"‡NY2uºêNöÝOiì'KNNiËÀ•VžºS Rp4•ÃÄ%-›«‘ï~I¹ÍŦÌŦ° õóó6—4uñ6ØàƌǷwn13aÇa\úîí£Äwlƒ{§WJ?‡˜a¯ì8ì{ç5%5j­3qrl¯{³ö:®ýdÚ¥±wâm°½Ž~wÀqï#‰›¤½‡²hû`â§d< RØG7âm°;~w#H »óèØ-˜ñÒ²±ƒˆ»ä.æÌ÷[\ ÐØÜÚ]1ÞÙØýÄÙwiì˜{&_Ò¢ ¶hçt“ˆŸëÙBÚï˜{&ñ9Ý$âÌ× %!oÙ¸&›º!}÷œº¾ÓíöRã&)LFf^JJáùxÔ.í÷ã"â§´æOrb†Í}Ôx–”bsu'û)m™ódÚ Û.‚a±ëŽ}Î=_ˇá©ñû5$ñƒ‰+cÇÞÀ4uý£Œ{߬7-Úþ!ñÇ:@w)-Äسö¦¤Ä}>}-›¹öÁÄ•5„Y¼+û{߬7޽“øÞ¥¼®³¼®÷CÒ~2qå¸{óÔY“ÄÉá¾ÎŦý”Ä ‚îR^‡ ˆyê0¯cÖ‰ŸÇÖB®:ué¬[ ³ñR^‡„ .­ù`k>\Òk$…­…\œù:ÌÙ‡cg•ÐZønÌY 6ö!?&.mXLÌÈ3âÜÓ²ÓBìú£ßý `¤K‰6÷v)@³ÓBlî£ÚO’Ï÷S RùPðmì!ovnƒ=|yì§ Yb†Í}tٰĬK‰Y¿Xrr)÷2}>|-{¹vrìƒMƒì»c!ˆ+— ÆnÀ±iku¦Aöݱƒ´+Ç>Æ.бijgè&] [3¦]ñ6Ö‚i’8Ö¥±wMJ ±µ´‡²l:¹—Á¦A–`a6Þ”0½ÙxéÜÌ™¸4vv^‡­…\œÀ“ÒBcÇ}Ø™HÇÎŽû°3‘‹ÇÚUšKî‚]a›+QÆ‚ûXHË&Èí?v<Ò-l¿KWØø˜5ˆKc$štZhì´Ð†´e†3í šÀ®Ì<óã´³e3¤©;Hb†íšô»$9ÁvM–YÙáL{(®ò ɉR„=˜§•±w3k?¥ìâdîâ’v¶eNŒKJMºƒ6vm—4vvZˆíšôÃ],Ê\R”¹ÈÅ ¶k²±cïæÛÉkÔ\ܘ¸ãí2'åy.6:KJýsJÆ“Ml汩óÍš:¹8 ÐØ®IolìMÁ°Ø»™à>Mµwe¼›¤Ý™¸eœ%¥Ø,Êʼn·qé¬ÒYU'öšÒ±³ªN7å|OA\Z6,§u)§u–ÓbG*‹qØ‘šW+߃í.‰ÓžT¦†Ö$~®O ]*ËĆÖì*C©1ÆÖüᤜZó²‘.Ð] ãKÏ\;9!w©,tÎÆ)H±pR”'Ó®À;KJ]:)ÅnܼêåÄ ^Îc?B2~0ñC2þdâÒÔ$¯Ã^`–;;hÅ^`jüIêç±I˜.›“Ô×¹T–é'Éçñ±dª´ú%´ú’8Û2—‚ãâC¾{H7àñ!ß[”™§Å7‘A{HÚIr¥`&X]e|”äû ÓÌc4+‹F–M4“´“eƒmÔlÑ»¦x›h Å\p¹ï a5ÕÎ:•BêTÂfëw7‘éÌwrÈŒo"sñ+5qSq#›¸éØYYfHe™aÁć²ßÙí?¾‰Ì')qHǼÁRâŽyƒÝþ‡”«êÄv†ßÃÉ xHǼÁŽyCºýÇþwwå»AR!óF°e§düE¦n(©ÁŽyñQc.NrlÞ§ÆÁŒ—bÜ8™vI˨CʨãèLÜ$íÎÄ¥©;’BN:u¬t™XJ,£FJºß1£¾È›ÈtæO–H•ø&r»T’Šo"çU'2#mBþîR徉 âRz€y÷ ¤ \œ9jé©ÞùUb%Æ Öè4¤Cf|úøI”óy|úÄø?>û)dÔH,‘Å%êdœH‹v`¦~2qcâʪC 0^ɬF#« +¸vrj4¤|~t¶ê¤|Y1²ñÝO‹O§s¤Ë ‹6çóïée†kâRw³sIªñ>ÚÅÄ-×~–O¿íÓ˜ø‘Æá‰"­ùw?˜ñi¼¿b"–hù³OCì˧ß}zh=‰{Òq¶åÓÇï>½UžÄÓØ{{ZÚïalêÒÒ~Û‘ŒÏKû=:OKûýù“x»Å`âžµgñ4ö¸ñ|\~¤–ßž'e°™OˆôÝ#­:ƒºWf|š_Ÿ7óRôìÙÔ™á_ ºŒ·ÙÁÄó ]™ÖÊ2Ù¢MXóÝÒ÷™.ãk»³-cycµL,‘§îdγ»82±DžºÁŒÏXóǯ^+ºŒ÷`Æ{ÞXyÇ•×/mÁñåTÆúådî*"ýòuG"–ød?Â\eäUwfR솛º Ußž¾{‚ªïv²-“é—·I[&¤0‘é—£Îï6g7t2gõèyæT}; ªþpç¯]Æ×Ô±7ò YÖ>”U7òÆê×òáå¯EÇ>\š_î—/Í Óž°æÛ²öÆÎ¢LÆšoÏ ‚.›#{»–/¿m°5äÕ‘#ì™·L°ïž åW$ôÕÃË_K–è ßgÖž]0ùfèX¾Ûüµ—تË`ñ·L‹o§™Õõ!6ůÐË‚T‹_«.ÓZ˜’œdH ;îÊyÝÁ>ÜS—v\F‘_ž‰ŸdÍ_yÇdê€;ã’҆ɮ1ñßÓªËtïø8‡ hýj4ÿp‰;ã+¼Žå«Ñ_y0ñÉ'½Vt_ÿ2omQ]Æ›yÚÌñ5CYÜ…Ü&sg|%ñyý5¥lêòý ¬ºÈ;ÙØ‡‹l£ÅòÉë/'È–MäìbdñaÏûÝ}ùböû8™öœ{¶L|¬Ïi3]Æ—Uƒ‰çêŒtvto¶e2wÆWöæë·¸!"ç6¶|pûkìÁÄõ†ºŒ÷ÅÄûÔ ÿZÑe|%7L¼£C}­è2Þ,Dv8Mç6@—ñf''™;ã+ÊdíyìAµ_x úZÑe¼Ù;pg¼;ypû=&ž¿{Kk>'fѨø¹v™.ƒ{ZàÎx§“ÒŽyï¸6_+ºŒ÷Á– ¤o)=Èt_–¹ Èë®,ž±1;9é˜×}–nsG ÜïëX>¸ý•×]L2 ´êr¾xu¶hc:šz-è2~ú"ž#áÈïu_ÊŽËÉã™ÃÄ0!-@œÄs²{Qñk}vÑáÑ™£†Ä,︜˜y0G³ž—Í1y1">2PÎO^礔>tHßüÏtEŒËéÛ+Ç׊.ƒf™;³ÌŠñ•3±U—ó/ûô%+ÆÏCµø9ˆ¯Y1Þìv ãqß±dÅøyGÄ}YeV ~ZØá¸/;« Ö<›º 6ì±dÅøZ6dÑ+F†BÀŠñ#c#â¶»AbvQíù@4aƒã>vf¬ï1Ö¬o£âNðkÁŠñõá˜8dçgÍŠñã?q[_agVŒ¯Ì¨1ñX¼dVŒ/ø1ñcí*ƒp›³¿×ŠãÍNN€#ãwƒ„]¬dVŒ/4àKV #_mdVŒ/ílæmòˆ¯+ÆÏs@"žÝE%+Æ—ñ?˜ñgN ©ñäÖà å6WرfÅàèÀŠñ¶õ{Ýün"³bü¼?y-X1¾ýÎÄ *°bð SñZ°b|}¸“‰÷õ!³AZÈŽ÷3+Æ×~ý¬Y1h¹°b¼m¬Y1Þ¬h$³b|íW_²bÞf°-iáAµ;¦×Šƒ¸eVŒ¯¡¯Y1¾àûpÀ¡ Ú/ÅUæÜ³_²b|I3íù »kVŒ·Ñ5IéÙ–¬_É.›ùœ”zª=Ȭ?î‰8l,_²b|Šy›|Zد5+Æ—v sRê­­Y1hZhxýY²b|igßý"7#ÀŠA ¥ rÏÞ—¬ï Î ó¢½ zŒ­:8¼Ú’ãËSí×ú¸/³bpüžY1~^9¾¬_sÚ˜¸­Ë´2+Ï*3+œY9$¥AÏSwKV ß’ÒÀ3+ßïÀŠñmÍŠñfÖ!)= +Æû¢âǺò!³bp0’Y1¾ݵdÅà·™’“ÌŠñµl¨öìT<–¬ÜÛdVŒ÷‘ö»c-q0ñs}/“Y18’r,Þü,Y1¸³Ê¬PŠœY1¾À[´˜º~–¬_ëédâp oKVŒ¯ÿÀ¦.·¾¯X²bü,BZ‹çœÖÒºCNËîã€ãÊu€ƒ–m8;êtÈié‡Ë'š#|ÉŠñîÆfª/óÔåœÖÙ¹CõågÍŠñµlØØá¨3%¥ÀŠA3+DzL[²b¼¿ð¿ˆ¯¡ ;³bÀ‰YfÅx+˜É¬_ñ},Y1¾Œ§ÚI]¥Ãå4õu_²bü¼]&â¹dÅÚ’ƒÃ@`ÅxÇX²bžö ¼™ãk'³0‘{ø~ÜÞ¼¬_[†ŸS×ÖbÉŠñ5óÌø“”ã:Ü€ÓE›3ßkV ~Y1¾’€5+ÆÏòn">ÕC½¬…«„ƒÖ¤ Ùe7#ÀŠ‘/V€ãÍŽ÷3+Æ;òš¿¦n¥xfÅ€ÞÌŠñ>®ƒ‰÷u©R@¶Êª}€ã0lfÅøYxGÄsrç’ãË,câ‡?KVŒŸ-Žç©}ÅŠñc=4&Þñãµ`ÅøòàìÃ5òP[fÅøúwO&>ÖeØ=Hôõk}…Y1¸«Ì¬Pwì~:·u­Q@²Ëv\fÅ€¹€ºJ–+Æ;¥…™ƒ_ç%VŒ¯¥y­Y1¾´3ã¡S H5:ÖsqÃÄùµbÅ Þ& %Nø= %fÍ>)ñµfÅøÂwÎÄ/,Þ|-X1ŠU—SbO6³bð·ÌŠñ•<¶%+F¥=í½¬_þŸ}8‡&¯kÉŠñ±˜· ‚¤’]vجï¶fÅxËëy +M‰/ùcÉŠñåÅØ–”8]ç+Æ›~÷¹öóµbÅx³®ÌŠ׸™ãçÅ<ë“Ò€c^:uãD¤ûZ°b|­öáà˜7wȨىYfÅ€‹ÔÌŠñ•µ°5Ǽ9DJµE¡öY²b|Á *ÝÇ’ãí +Fnpˬïƒå´‰ãG kVŒ7ÃqÀŠûjJOª}àÆz­X1èÝD@Þ}]kV ¾ßá91`Å õu ¹÷%+Æ×¢ecÏ×Õ—¬?Ñ)ÏåyùÃ]ÐÁ–MNÛGºP©³ t`ÅÈWØ2uv+4 m7[²b|ù@*kW9 V•m™½ÿ­-Y1ÞÁ^2+Æ{¸/Y1~Öª®Å¡Ñ)>dVŒŸð’ˆM½V¬´¥4³b¼=¥… b†Í¬_Ñ -Y1øš@Ðú’ãçQÚZO²ÇšãÍò}RéÈk§+]Ï7[²bðZâÌŠñó¶îk>÷ÆøÜ×øÜ©8{îå:%qF'gŠö‰Ì®12;*þ[dv}Mf×™g„nî’8ã,ß,ék2»Ì…'M³© iê‚M]HS'ráQq6u!­º`«.¤© 6uCšºÁ¦nHS7ØÔ i꛺!MÝ`S7¤©lêiê6u‡4u›ºCš:ö¾rÒÔlêiêØóÌqJSw²©;¥©;ÙÔÒÔ±ç™ã”¦îdSwJSw²©»¤©»ØÔ•ïµ|‹“—3j*½¾¦Òë"•^_SéuF¥GÅ Iñ(ßkéF¥××TzQéQñ`â•^_Sé£Ò£â„}´"ÎÞk™¨ô¨¸1q—ă‰KS'Ré9'l³£Wïvô5•^0*=*ÎXK*½¾¦ÒŒJï`â0u&´ø¤Ï§òǶ`Ì›Ä/E¼1í½)â,mÿ”i»-8¬P<$ãñ§ ã¶ Bñ3q‹>哲¶ 'ñV§Û‚zÅ]g3ßâPÄÙ{yíP¦®±™o§²lË€šôáÚ9˜¸4u{¸¼|N×î_?%q2uõ“ñ¶~2¾‰¶ßâ köPÜEg`±‡dü k¾iæÞª_·õÛßM|ÚÖ/Pgqeìöa/“~š$ÎÞ„mÊØ­³7a»âiÕçt©8}N÷Äé{¸’ö¼´ßýtÛëO×â (Û¡ø:xôҲa®ÒNiì 0Õ'š¶~Œ±±g™x#;Λ2öâ±?eÙÏíIâìH²~3ÎVOḦ=€ʪsv(èCšùƒ>€¥8+g^°zÿÕϵ8;G2öø°C)¾O¯-eñSg'M2ž½ùÒ–™,jëÇ€èÌG§wÊwæçë+Û_A(1î7ïìÑŸ:¶ßc ?ÇZœ?Ë"}÷ãó;ç©ÆÎ=_Ò¶:}û1Ä×úÀŠ+ï,ЩlÃiÇM‡8p0ñ^-._ðíý¯-ùöþ"~0ñS‡‰Èâ­I≻$L|HâlìMûEÄûGïlìp4Åʼn‡$>˜¸4vcßݤïnlì&ÝØØM»±±Û!‰ŸDÜ¥±;»Kcw6v—Æîlì.ÝéØ/E<ز i꘸ä.‚¹‹ÜE0wÒ–lìCû`cÒØûÆ>ØØ‡6væ*ÉU,ÆRŒ;ØÔÒÔlêiËlËœÒØO6öSûÉÆ~Jc?™»8¥±Ÿlì—4ö‹ý’Æ~1WyI®òbc¿¤±_dÍ›<o,¯kR^×>ÆÄ]&>$ñƒ‰Ÿ’8›º&M]cSפ©klꤤ´µÁÄIœ½+a¢±¬²IYecYe“²ÊƲÊÖ¥±w6v)«l,«lRVÙXVÙ¤¬²±¬²IYecYe3%³jN²‹&%¥%¥MJJKJ›””6–”6))mΖMHî"˜»iìÁÆÒ؃]Ê*[°±iìƒ}H®’%¥MJJKJ›””6–”¶!m™ƒm™CÚ2Û2‡´l¶liìû!-›“JÆŸÌx)-l'[´RZØXZؤ´HãQ\Z´[´RZØ.æç/eÑöY´ýÓ$qcâ.‰&®Œ½³ÓÂ.vvZØ›IâÎÄCgcoÚØÉšïÒiaï‰wIœ}÷.}÷L|Hâ?%q6u&M±©3iêŒMISglêLš:cSçÒØÝ¥±³¼®»d¼Sã¥ïÎN M¾gÆK‰Yg‰Yi¿³Ä¬KÇ}¥F]J:Kºt^×YjÔ¥Ô¨³·.¸õƒÍ¼tàÖÙ[?¤{²±ŸÒØYfե̪³ÌªŸÒ¢eçu]JÌ:;¯ë§4u›ºK;;¯ëÒy]gçu]JÌ:;¯3éÀÍXfeRfeìÀͤ7ûgÒ‰™±3“NÌŒ˜™tbfìפk\c׸&eVÆNÌL:1³NµŸ’8[uRnc,»0)»0vèdRva,»0)»0–]˜tjdìÔȤS#s:vÅ×KN (ôõ×qq¶ê¤C'c¹I¹±ÜÆ¤ÜÆ‚M]HSÇnBMJŒ:™tèd,³2)³2–Y™”Y»Ê4é*ÓXfeRf%Ã?ÖækÁi^‰³±K™•±Ìʤ»H;Ù‡;%ãOfü)}8vfeÒ™•]l¿K©‘±C'»¤±_lì—4v–¹t•éì*Ó¥ÌÊYfåŸÄ‰³r)5r–¹”9K\Jœ:¹tèäì8—.¥F.¥FÎN\:5òÎ>\W¼³c—Ž}œû¸tìã,1s)1sc;NJÌœ]ç¹tçìBÍ¥ƒgeZ.•i9KN\JNœ%'.%'Î’—’læ¥äÄ»t¥åìÜÆ¥;)gwR~Hž–Û¸t'å[uR¡”³ƒ—^œ¼¸tðâ,»€Æ”×_£q6v)»pv#æÒ˜³1—nÄœe.]i‹ï!œ;9 éä$X|)¾‹ï!Å÷`GÑ4ãɲ )¾‹ï!Ý ‹ïÐD×|°““NN‚• ‡Tí,@‡IÚY½ ò‚ѱ;Ó.] Ð!U¼ ±×_?ƒú‚²‹‹;Ó.-Z C ÐÁtH6ü þƒÿ!è`ð?$ø,†t3,†TK¬–8¤,Æ…ã‚Å8dhúZÍDœMt;  Ogâ&‰;ÂØ«§RÝÅ`…C RƒÏ©Íj°Ê‡!©QVžÆ²Y¸rª6ÅXv»½Y#gíèØËEÅYwkMµˆ$wIœiI;%ú’8kOý¦ˆ3„OɘË& ™è'–}oÖaÀÄ#þh%ñG, ެʞŠ7ƕӕ©klÍ·®l™ÆxCš)3ßXGwsiæ9GRHâdË´!}¸Áf^ZóqTþ½´g4í”>[óíR´wFÁÐ?&‰3¦ž¦,ÚÎhG°¾ŽŠw*~Hâ”àIY6q(`‰§üPŠ»èlÇu)Êt¶eº´e ‚'iìlÇõCYóí¸~JÚÕN¿¤©côÝöQÖ¼±-cM™yc$XÂÅuyÉZŒÃê»:C™yëL{—´c}7eÙÛ2æÒ‡cŒl&%fdÍ›”˜£1iÇ£´CZu'Ó~š$ÎhŤg'3þ’> ‘.Ÿ_´^‹g” q†e¼IÚ£Ö’6¬3š!ïMgôRÝ%ñƒ‰KÆs^0Éx–Óº Á@—ÜÅ/äc¯Åk¼•øo±’#{-o¹8ñu5+Y,^xEñCZ6Ì]¸ßýbc—â»3ÖQ—Pd0Š †"CrV¿p—­ïO¸8#t“¼MAj&½3b¯®i§œhŠ£.hÅ$ñß{Ý#¶ÏsHéÁo¾òöLClŸi8%ãï¡„ø³‡bûPÂ¥?ØŽR>?XF]“š#5{­ Ù©ø`╯KFu`;«n0Æ’8Ã$qNÖqÖÃ÷)Ë©#özI”]ƒ1s½g$:åuë`ÜX/‰õjlY¯B;뒯ɓãHz1^£µ8k4¯é‹Æž¾H2žÕü~éñšßOY•3ÍÐkI±OÅ94u´W»lwŒìæÅfÖâìÚ­IÞ¦±ÚÏÖ•©ûM:“ÁXK^ËG¨øï±bŒ=+†4ó”X¢¼¥Ë—dj‡Á^Ë'¨8# kÒŽklÇ5iÇ5ÖÃ×.åÃ’8«ÆêMçMöʇ+zµ•eÓYŒ«›­ÇŸ5[}³µ²l:«Ê©ŽÇòèÙUÖ|ge5] RÕÅôS m™.m™~ÑÎQeìEãé!‰³¾)Ê‹2u÷ä·8ëc“v\Ñ=©dVÆ6¬IIéoö/Ö¦øZvRqãê.ºÁšå^RÜØ7¢IcçdÒ̳ k§¤·‚)ÖX›»IYåo6c}7•Kâ¬X»)î†ui¿;Û°u[Ì-Îú•Ý•5ï,º"‹¶I;+›uiÇ9 ‘.%¥Î6¬ÒwgY¥ŸÒÔñiÙ°öǺÃ`°F‚—Te?öeòŠ· FKÒš¤Â•ô X~HIi°RRŒ3»®õËw_ìí *Îú™â´³Ž¢m0(—´lØáCHk¾¨8vIüdâ’vFÕ6¤£ÁÚb†´a³âx°ŠcøÕ±|„Î’‡"ÎúŽ>eßÑñgO_ûÇ'NIœd—¬%ÇþùIûïÛ7 Bšùß{„àØ>B0$ã)ÿ!Í—4v–ƒÔtðc}1²óµ8s¨õYòñg¤äã1¾p"þ[´àÇòA[™×û`ôÝ/F¹MÄéI¶â.8·µämó65»ô±¬4—ÏÑý9ºôÝ)¿³ä¬ †eiì”"ù”´sš`I;këeÑv–]ÔáÇò-`™i÷Ø3í*cïìP°wÅ×u–ti¿Œ«ÒÔqÎSiìì ‡²ê:#£ï1$qÊû)}wÆ^ч4ó”uôP|]g÷f]Ú°¿É¼y,_a–é#FóøbÜŠkq¶ãLŠï¿I¡x,‹é_ì h*ÎÒ“Є±ønæ’øoq ŒêðÅø‰8;ÍuiìÌ]˜„&8ßPv\A¥’8Õ.-ßk2»ƒÝ4¼ØåÂZœ³ÑI–y“¼Ío²ÑË×·e>¸ãÏ® ŽýÄ!‰Sb/eÑ´b’vJ+&ygîÂ%8à,»pÉÛ8Kÿìäs#Ö$ñþ;j'{Jø%=|þYsÆùg÷qßâ´³D;¿Î3Iü· >ÿì6ð[œ½Kcÿ½G‚Ï?{$øü³W~Ï?{å÷ü³W~Oö˜ï‹Ýqq6v)»h,»¨/RÏ?{¦÷Ü7$I‹–Ó¶ÆÎÒƒúöü³wvÏ};”’Qÿæ5îùg/ÝžKR3¸–¦ŽÅ÷&Å÷vÒ×^¥ Ëâ{“â{ÑŒ%Í<‹ïu/×É^¤ý¾Âî’øo=U{.™Þä ôs®¬ùÎà—²‹¢-$qvÛ¤±ÿÞSµç¾‹Î$ñßzköü³·fÏ?{köü³Ò…óÏ‹=YÃkÉÝGÅYvñKIgÆKéAgéA—Òƒ¢±Iâþ;uç¶îBŠïE÷¤dköÄÙ‡“àÑ»)¹JþÖ¬ôáZ²"Ï‹•ö;íU2ž¿·*-VáÖ/iÙð÷V%OËß[U<­±ì¤삿·*Å÷ß|0õÜ?˜’8{¾Q:=øÍjŸsßòÛ$ñßzoõd%E/Ö ¼çµF’ñ,¾›ß˜ßó¹ÖóÏžkýg‹VJ~ó¹ÖóÏžk=Ÿ=×ÊÅÙØ¥Óƒß|oõÜWyIߥ&].âÒØÙå‚IÙ…±¶W“Òƒ¢O]Òþ{Eb矉ì]Ô—Ôæ~²wQ_¬øŒˆ³UwJ;Ž—¨Icç/žJƳîI»ãÝM¸”]8Ë.ü3$qÖ£/]8;»ð¦,Zg¥ÈÞLgnRnãòHcg‡.•.8+]ðî’øo•&žöâ鹤~1úa.Î>œtµá¬òÁ¥Ê‡ß|ñôdZYæùge™ç’ãê*%ãYåCý`ê·8[uÒÙ0UÊ.~óÅÓóÏŠBÏ%¿³ü`깯)•|0Ušùß{²ôd/“~‹kÚé³Òw眒öß{4ôdU·/öš(gu•Rñ@°âàÿo>z2Ö’oñCg±üÿC‚ÿÁ"lHV|s”‹ÿÖ›£'«w~±ÇH×âŒC7L;e‚‘Ž÷Å'K¹øo=YzþYö¹d+ñÄé³’vF‚ö,wH7àüÕOé ;˜Ÿ©Æì7Ÿí<Ÿ=ÛÉÄbC*« Õ¯eEø›Q¹¼™8{âèS¾„w-Ëšåç¯ei¯ü|ãÅ^i|-ëi©ø`âCg/ ÒÔ±g~>§¤ý$lòŸ«)â?qþþbùrƵ,s„çã[£¯?†$Nž8j]2ž½„׺4uÆÄMwöp¦wIœiI<ØË—!Í<}<2.Eœ=¬ÕI;{|¢]гj[u—´lØŽëe¿¯?*Æwö2Výxäµ}ýÑ” ÛÙëPõóײ‚Ä•-ÓÙ–éR˜èì58,1 â?•ÝÙK]Zu¿<³¸¾èæâ쾦ˆO*«î—— _ìqµ8{4´~ÂðZ^L†MgoOº²lŒå6’væ¨MrÔÆ5^çQq–YÙ>ˬlHÚú¢4uôÄS RÆv\ý„áÅ^*|Io^ì©Á{]ˆ3ã{Hâì);S‚”³ ë’Ÿwö¨˜KhÂÙcð.m*.}8¶e|4Iœ]Â2ÎvœK1î7ß ¼–'ÎoÆïÌÅÙª“”³´Ð%$å›ùKÒþ{/ ^ì¡Ã{Ûˆ;Iœ½Ø?ì½ÕhŠ« 欢Iœ½Eו ìä0—ÄÙCz’¯ ;™¸4uÎ^¾téÃ9Óî’öß{¾ñÚ>ßÒÔ3~(A*3~HÆ3G­Tü÷Þž¼þìíÉoq6u§düï=ym<¥ {2g%ùù`ð?$ ,-ŒKò´™ù!ùùñ1&’8{ºR:|ì¼nHaâ7Ÿí¼–”è .½:ÕûaÀŽð¥¸&I⬗¾*éþÿ-Ê•$ÎHº¤“žœŠ¸±©«.ç¾Å‹ý[œS¢K.¨öKg%ž%Ä·øÉÄOiêØõXÉ¡ð-κ ÚGYuíCy”Uרšo]ùîE/ýÄiS´²ækš*yLâ´¯¸)âlÕµCY´¿÷Jcgßý”¦Ž-ÚvI«Ž•þ´KÙ2Eo­$γ¨¸JcQ¦¤Hþÿ­g¿Åyÿ‰&Ni‚%qºæ/e¿;+ñôIâ¬6WBÎ:<½)û½¨G’8+keÃò§ÉxƬ풣v–œ”¥½·x0âø IüøúÔoqZâ銣Öå Ö(’·‰ƒ–úIcçÞI3ϰ̨̰ÈÃ|»?àeýogwEœ>|Væ_Ñ1¾¢Åoñƒ’ *ÆsƼ¦ßXgVÉÛö-þ[Ôgßâô%W¾{cõÃ%{XgLJ‡$þ[Vßâí•p­1º¦ãHZŠwF×_R!}‹ó·„”ïÞ;Å[ÊÌpm(âü1 ÉxV7Þ‡d<ë¼îCúp”˜EZ´œ¥LmËmr)S÷{$ßâ²(;® ‰P–Mñ´»²a-èë芧5v¶dÒ‡+²þ&ˆÿ^ÿoÿç9¾Åy'¦òÝÑõ»´ãœ¡=?•çŒÏ§l©Kâ,ûkÊØ‹å»Ç o T«®//ÞŒíÿMÅYEU1ö-ÞXCsIœi¯ Î’8¹œûô¦ˆwcâ!‰3ãMÒÎê’?&MÑî黳zµKcwª]Z6¬oĸøÉÄ%í¬ â3¤UÇÊ ÊÞ›$δWeIœ½*ƒø?™ñ§4ó¬ âsJ31í—¤7)Ú+Dh—Ä?qÖÑšIâL{W¾{c…­wIœu¿H¾®1_×LYóUŒ5—>œÓÎiæ™·iCšyæmÚ– í;ÒšgΪÒØYul;¥ï~²±ŸÒ‡cÕðMò65ôòá:sý3$q²êº´ß;«OíMÒÎú »´ß;ËmºISÇêS˦©$Î>œ”Ût–Ût—´kšŠÄÙÔÅ)‰³±KÞ¦¬eKÚﵯt)9é,9釲aûÉŒ—¼MgmÉý”¾;ó6ý’¾;KNLò6ƪáí’8k’pœ±Î“pœ±äÄ$ öKGÞúžœ‹Sí‡$ÎMÒΪáMBRƼIÉ ²DfñCZu,=0É]ðn·CûA?%qöáN%LØI[õ$ãYï]Ò–¡îâRÆîìØÇ?&‰ÓFÁÄYãPSV3(ä­Kâ¬çJ‚BÎŽ}¼+1Îo’ñ,5rÉÛ8ó6îÒØé‰KÎ ‹0@\Z´Î>\HƳS#—\¥³¶dCgÆ%Æ9sÔ.:ù`Ú%?ïŒÀ%G]t9JcgžÖ%Oë,¯s :;trÉÓƒ!ÁÀ`00$WÌUF IœL]H®2Ø©Qt“ÄYÏUW>\0OÒ©Q°òpeÑC‘á’vvèTö~‹3g Ú¥5Ï|] %· ÖÑCšºÁŒ—\e0W’« æ*CJ‰ƒ¥Ä!yÚ8ØØ¥”8˜£ÉQã+›$“8kѼ¤™ç]ŽÒÔ]lê4?ÏN ‡t;ÀÛ¥Ûñ¡=–Š«ìv´&‰ÿN“d&>$ñƒ‰KcïlìR¬“H‡ƒ>Ô½›¶m¾,Ë2µh~_ 7Iœ=d\ÖœØòúÄ/Eœ¿wï’8«êìÒÔÑÖO“´³'ç>e¥“±gí××÷Tœ½)S÷­Ú¾oÕqFœ^¾ùþ-Ϊû>Cšºßz6ý[œQ—ÿòž:gc?¤UÇjÌê®Y[^ C׬´løÃåÊÔ5ÖhÞ>]gíŸC§wqÖ˜ÒšIâôñnÅÓ6özWùúö·8>[gå¸MrÅÒCÿGœ¿Å¯_ÙØ[Í/©_Ùö¯0»$NŽ¥-Úì›ä.Š~eiË0oS÷+Ûòš].€·}¼I⬎ZJNŠ×x»$Îzv¥Ü¦³ÖÏ.å6¿Y½oË[z¨ÞW¶Lwöá$oS¼H+ÍHÆógU0b¬ýÑ$$e I™äm~é'±g;×âì} “Òc`ä——/×âüK—Ä™vi¿OLIœöŒHSÇÀHݧnôNâ·8í‘¶Œ±Æ‡ò­À$ÎzF>ÊŽs–»ß‘èxS¾»3nïš8{7Í?ÿ{¾}‹3üî®|wg‹Ö%íìmP?¤ÇÛÜ%ãOÚ­#Í< .%¥Îš­CZóñ¡oH)ÆË*C Áºó¢+c/ÞQ’ÆÎ:‘ëcü¯å]gM1$ãÙ±OHŽºxŽGÙqƒ%'ã£l™ÁÎ.†ä*Çúˆâ~Úßýcÿö¯ÿø—ÿúïÿûÅŽ¢‰xÿû¿­Ñþÿ_Ùo(yO6ö½x/lìuOÜß6>T2Ûh{q+l´å¯f*™mô½¸6:{ø l|¨d¶1öâQØË_Í6>T2Û8ö⣰qÔïdýmãC%³Ç^ü(lT2Û¸­ˆ3­³—íÀƇJf÷! q¦ÙòW³•Ì6îC@+âLóº‹üo*™m܇€VÄ™Ë_Í6>T2Û¸­ˆ3m,5ÛøPÉlã>´"δƒq€•Ì6îC@+âÌý,&¡%øÛƇJf÷! q&½ªYÄ™§J&û>ô"Î$Öî"ÎT2Û¸½ˆ3=jR’¿m|¨d¶qzgúXþj¶ñ¡’ÙÆ}èEœé£m*™m܇€^Ä™~.5ÛøPÉlã>ô"Îôkù«ÙƇJ&m¬ˆ3öYþj²ñ©’ÙÆ}°"ÎX«Ù‚þ¶ñ¡’ÙÆ}°"Îå**™m܇+âŒÙòW³•Ì6îC€qƼ¦vúÛÆ‡Jf÷!ÀŠ8c±üÕlãC%³û`Eœ±±üÕlãC%³û`Eœ±ƒt•Ì6îC€qÆÎå¯f*™m܇+âŒ]Ë_Í6>T2ÙèûàEœñÏòW“O•Ì6îC€qÆÛòW³•Ì6îC€qÆ{Í]÷·•Ì6îC€qÆ1ç•Ì6îC€qÆ}ù«ÙƇJf÷!À‹8ãQ þmãC%³ûàEœñ±üÕlãC%³ûàEœñƒQ1‚•Ì6îC€qÆÏå¯f*™m܇/âŒ_5såß6>T2ÙûEœ‰ÏòW“O•Ì6îC@q&ãö*™m܇€(âLôå¯f*™m܇€(âLXM…ú·•Ì6îC@q&|ù«ÙƇJf÷! Š8±üÕlãC%³ûEœ‰±üÕlãC%³ûEœ‰cù«ÙƇJf÷! Š8'#*™m܇€(âL\5Gñß6>T2Ù8ö!`qf|–¿šl|ªd¶qFgF[þj¶ñ¡’ÙÆ}Eœ}ù«ÙƇJf÷!`qfcÃ*™m܇€QÄ™áË_Í6>T2Û¸£ˆ3#–¿šm|¨d¶qFgÆXþj¶ñ¡’ÙÆ}EœÇòW³•Ì6îCÀ(âÌ8k¢ø¿m|¨d¶qFgƵüÕlãC%“Ç>Eœ9>Ë_M6>U2Û¸GgŽÆèþÁƇJf÷!à(âÌÑë—þ¶ñ¡’ÙÆ}8Š8s{÷l|¨d¶qŽ"ξüÕlãC%³ûpqæˆå¯f*™m܇€£ˆ3ǨŸ²øÛƇJf÷!à(âÌq,5ÛøPÉlã>Eœ9NöØØøPÉlã>Eœ9®å¯f*™l<÷!à,âÌù©ßFù§O•Ì6îCÀYÄ™³±—YÀƇJf÷!à,âÌÙ—¿šm|¨d¶qÎ"ΜV?dó·•Ì6îCÀYęӗ¿šm|¨d¶qÎ"Μ±üÕlãC%³ûpqæË_Í6>T2Û¸gg΃=™6>T2Û¸ggÎsù«ÙƇJf÷!à,âÌyÕ/LýmãC%“×>\Eœ¹>Ë_M6>U2Û¸Wg®ÆÞà*™m܇€«ˆ3W_þj¶ñ¡’ÙÆ}¸Š8sYýdÙß6>T2Û¸Wg._þj¶ñ¡’ÙÆ}¸Š8sÅòW³•Ì6îCÀUÄ™k°‡çÀƇJf÷!à*âÌu,5ÛøPÉlã>\Eœ¹Îå¯f*™m܇€«ˆ3×U¿%ø·• í³ íÃãÌÏÿ¶øÚøXÉlcÛ‹·ÂƶüÕlãC%³}/Þ ûòW³•Ì6Ú^Ü ½Z 6>T2Ûè{q/lôúÍ¿m|¨d¶1öâQØË_Í6>T2Û8ö⣰q°'FÁƇJf½øQØxÔ¯þmãC%³ç^ü,l<—¿šm|¨d¶ñÚ‹_…×òW³•L6î[õ[ÁÐn>€Vð|­õå¯f*™m܇€‚ 5«Ÿ!þÛÆ‡Jf÷! àh7@+ø+™m܇€‚ Ý|­àx¬d¶q >€vó´‚à±’ÙÆ}(øÚÍÐ >€ÇJf÷! àh7@+ø+™m܇€‚ Ý|­àx¬d²qßªß >€vó´‚à±’ÙÆ}(øÚÍÐ >€ÇJf÷! àhé™ö"΀vó´‚à±’ÙÆ}(øÚÍÐ >€ÇJf÷! àh7@+ø+™m܇€‚ Ý|­àx¬d¶q >€vó´‚à±’ÙÆ}(øÚÍÐ >€ÇJ&÷­ú­àh7@+ø+™m܇€‚ Ý|­àx¬d¶q >€vó´‚à±’ÙÆ}(øšÙòW³•Ì6îC@ÁÐn>€Vð|íæhÀc%³ûPð´› |•Ì6îC@ÁÐn>€Vð€Vð€ÇJf÷! àh7@+ø+™m܇€‚ Ý|­àx¬d¶q >€vó´‚à±’ÙÆ}(øÚÍÐ >€ÇJf÷! àh7@+ø+™lÜ·ê·‚ Ý|­àx¬d¶q >€vó´‚à±’ÙÆ}(øÚÍÐ >€ÇJf÷! àhaË_Í6>T2Û¸@»ùZÁðXÉlã>|íæhÀc%³ûPð´› |•Ì6îC@ÁÐn>€Vð|íæhÀc%“ûVýVð´› |•Ì6îC@ÁÐn>€Vð|mØòW³•Ì6îC@ÁÐn>€Vð|íæhÀc%³ûPð´› |•Ì6îC@ÁÐn>€Vð€Vð€vó´‚à±’ÙÆ}(øÚÍÐ >€ÇJf÷! àh7@+ø+™m܇€‚ Ý|­àx¬d²qßªß >€vó´‚à±’ÙÆ}(øÚÍÐ >€ÇJf÷! àh7@+ø+™m܇€‚ Ý|­àx¬d¶q >€vó´‚à±’ÙÆ}(øÚÍÐ >€ÇJf÷! àh7@+ø+™m܇€‚ Ý|­àx¬d¶q >€vó´‚à±’ÙÆ}(øÚÍÐ >€ÇJ&÷­ú­àh7@+ø+™m܇€‚ Ý|­àx¬d¶q >€vó´‚à±’ÙÆ}(øÚÍÐ >€ÇJf÷! àh7@+ø+™m܇€‚ Ý|­àx¬d¶q >€vó´‚à±’ÙÆ}(øÚÍÐ >€ÇJf÷! àh7@+ø+™m܇€‚ Ý|­àx¬mìûVý^ðô› |•Ì6¶½x+llË_Í6>T2ÛØ÷â½°±/5ÛøPÉl£íÅ­°Ñ–¿šm|¨d¶Ñ÷â^ØèË_Í6>T2Û{ñ(lŒå¯f*™m{ñQØ8–¿šm|¨d¶ñØ‹…ÇòW³•Ì6ž{ñ³°ñ\þj¶ñ¡’ÙÆk/~6^Ë_Í6>T2Ù¸oÕï@¿ùzÁðXÉlã>|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%“ûVý^ðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%“ûVý^ðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%“ûVý^ðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%“ûVý^ðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%³ûPðô› |•Ì6îC@ÁÐo>€^ð|ýæèÀc%h£í[õ­à°›À >€ÇJfÛ^¼6¶å¯f*™mì{ñ^ØØ—¿šm|¨d¶ÑöâVØhË_Í6>T2Ûè{q/lôå¯f*™mŒ½x6ÆòW³•Ì6޽ø(lË_Í6>T2ÛxìÅÂÆcù«ÙƇJfϽøYØx.5ÛøPÉl㵿 ¯å¯f*™lÜ·ê[Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|•L6î[õ­à°›À >€ÇJf÷! à°›À >€ÇJf÷! à°›À >€ÇJf÷! à°›À >€ÇJf÷! à°›À >€ÇJf÷! à°›À >€ÇJf÷! à°›À >€ÇJf÷! à°›À >€ÇJf÷! à°›À >€ÇJf÷! à°›À >€ÇJ&÷­úVðØÍ`Àc%³ûPðØÍ`Àc%³ûPðØÍ`Àc%³ûPðØÍ`Àc%³ûPðØÍ`Àc%³ûPðØÍ`Àc%³ûPðØÍ`Àc%³ûPðØÍ`Àc%³ûPðØÍ`Àc%³ûPðØÍ`Àc%“ûV}+øìæ°‚à±’ÙÆ}(øìæ°‚à±’ÙÆ}(øìæ°‚à±’ÙÆ}(øìæ°‚à±’ÙÆ}(øìæ°‚à±’ÙÆ}(øìæ°‚à±’ÙÆ}(øìæ°‚à±’ÙÆ}(øìæ°‚à±’ÙÆ}(øìæ°‚à±’ÙÆ}(øìæ°‚à±’ÉÆ}«¾|vóXÁðXÉlã>|vóXÁðXÉlã>|vóXÁðXÉlã>|vóXÁðXÉlã>|vóXÁðXÉlã>|vóXÁðXÉlã>|vóXÁðXÉlã>|vóXÁðXÉlã>|vóXÁðXÉlã>|vóXÁðXÉdã¾Uß >»ù¬àx¬d¶q >»ù¬àx¬d¶q >»ù¬àx¬d¶q >»ù¬àx¬d¶q >»ù¬àx¬d¶q >»ù¬àx¬d¶q >»ù¬àx¬d¶q >»ù¬àx¬d¶q >»ù¬àx¬d¶q >»ù¬àx¬d²qߪo€Ý|Vð+ø+™m܇€‚Àn>+ø+™m܇€‚Àn>+ø+™m܇€‚Àn>+ø+™m܇€‚Àn>+ø+™m܇€‚Àn>+ø+™m܇€‚Àn>+ø+™m܇€‚Àn>+ø+™m܇€‚Àn>+ø+™m܇€‚Àn>+ø+™lÜ·ê[Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|•Ì6îC@Á`7€|• ~7ô{Ñöﬡßn%^4ôûÝ‘ïEß¾³Žü¬¤Júý«^(é{%½Pb÷¯¬Pb{%V(ñûW^(ñ½/”Äý«(”Ä^IJÆý«Q({%£PrÜ¿: %Ç^ÉQ(9ï_…’s¯ä,”\÷¯®BɵWRìø»µÚ‹loû_´VûÝíEµ·ýŽ/z£ýnnö¢ÚÛ~ÇÍÍ~w'{ÑÃìm¿ã‹îd¿Û‹½hBö¶ßñE{±ßýÁ^t{Ûïø¢?Øï_/Ú€½íw|Ñàëw‡®}¼Þö;¾èÐõ»ÅÖ‹F\oû_´ØúÝ#ëE'­·ýŽ/zdýnrõ¢Öû~ÇM®~w©zÑËê}¿ã‹.U¿ÛL½hFõ¾ßñE›©ß}¢^t“zßïø¢OÔïFO/ÚA½ïw|Ñèéw§¦ýœÞ÷;¾èÔô»ÕÒ‹†Lïû_´ZúÝ+éEG¥÷ýŽ/z%ýnvô¢%Òû~ÇÍŽ~w+zÑÓè}¿ã‹nE¿Û ½hJtÛïø¢ÝÐï~A/º Ýö;¾èô»áÏ‹¶@·ýŽ/þüîØó¢¯Ïm¿ã‹Ž=¿[î¼hÌsÛïø¢åÎïž9/:ëÜö;¾è™ó»éÍ‹Ö8·ýŽ/šÞüîZó¢·Ím¿ã‹®5¿ÛμhNsÛïø¢íÌï¾1/ºËÜö;¾èó»ñË‹ö0÷ýŽ/¿üîÜò¢¿Ë}¿ã‹Î-¿[¯¼hÐrßïø¢õÊïÞ)/:¬Ü÷;¾èò»ùÉ‹)÷ýŽ/šŸüî^ò¢ÇÉ}¿ã‹î%¿Û¼hRrßïø¢ýÈïþ!/ºŒÜ÷;¾èò»È‹6!÷ýŽ/€üîàñ¢ÏÇ}¿ã‹¿[p¼hÔñØïø¢Çï/:m<ö;¾è¡ñ» Æ‹VýŽ/š`üîbñ¢×Åc¿ã‹.¿ÛP¼hVñØïø¢ Åï>/ºM<ö;¾è#ñ»Ä‹výŽ/Aüîäð¢ßÃc¿ã‹N¿[1¼hØðØïø¢Ãï^ /:.<ö;¾è¥ð»‹– û_4CøÝÍàEσýŽ/ºünGð¢iÁÇ~Çí~÷xÑuàc¿ã‹~¿¼hð±ßñEC€ßý^ÔýûØïø¢¢ßï’|/ ÷}ìw|Q’ïwM½•÷>ö;¾¨©÷»(Þ‹Òyû_Åû]ÕîEí»ýŽ/ªÚý.K÷¢xÝýŽ/ÊÒý®+÷¢úÜýŽ/êÊý. ÷¢|ÜýŽ/ Ãý®ìö¢þÛýŽ/*»ý.Íö¢€ÛýŽ/J³ý®­ö¢ÛýŽ/j«ý.Žö¢„ÚýŽ/Š£ý®nö¢ÚýŽ/ª›ý.Oö¢ˆÙýŽ/Ê“ý®/ö¢ ÙýŽ/ê‹ý.ö¢ŒØÏýŽ/ „ý®ðõ¢ØÏýŽ/*|ý.Ñõ¢×ÏýŽ/Jtý®±õ¢×ÏýŽ/jlý.’õ¢”ÖÏýŽ/Šdý®rõ¢ÖÏýŽ/ª\ý.Sõ¢˜ÕÏýŽ/ÊTý®3õ¢ÕÏýŽ/êLý.õ¢œÔÏýŽ/ Eý®ôô¢ÔÏýŽ/*=ý.Õô¢ Ó¯ýŽ/J5ý®µô¢"Ó¯ýŽ/j-ý.–ô¢¤Ò¯ýŽ/Š%ý®vô¢&Ò¯ýŽ/ªý.Wô¢¨Ñ¯ýŽ/Êý®7ô¢*ѯýŽ/ê ý.ô¢¬Ð¯ýŽ/ ý®øó¢.ЯýŽ/*þü.Ùó¢°Ï¯ýŽ/Jöü®¹ó¢2ϯýŽ/jî⮹‹¢æ.ö5wQÔÜÅ]sEÍ]ìk¹‹»æ.Šš»Ø×ÜEQswÍ]5w±¯¹‹¢æ.îš»(jîb_sEÍ]Ü5wQÔÜžæ.Šš»¸k¹‹}Í]5wq×ÜEQsûš»(jî⮹‹¢æ.ö5wQÔÜÅ]sEÍ]ìk¹‹»æ.Šš»Ø×ÜEQswÍ]5w±¯¹‹¢æ.îš»(jîb_sEÍ]Ü5wQÔÜžæ.Šš»¸k¹‹}Í]5wq×ÜEQsûš»(jî⮹‹¢æ.ö5wQÔÜÅ]sEÍ]ìk¹‹»æ.Šš»Ø×ÜEQswÍ]5w±¯¹‹¢æ.îš»(jîb_sEÍ]Ü5wQÔÜžæ.Šš»¸k¹‹}Í]5wq×ÜEQsûš»(jî⮹‹¢æ.ö5wQÔÜÅ]sEÍ]ìk¹‹»æ.Šš»Ø×ÜEQswÍ]5w±¯¹‹¢æ.îš»(jîb_sEÍ]Ü5wQÔÜžæ.Šš»¸k¹‹}Í]5wq×ÜEQsûš»(jî⮹‹¢æ.ö5wQÔÜÅ]sEÍ]ìk¹‹»æ.Šš»Ø×ÜEQswÍ]5w±¯¹‹¢æ.îš»(jîb_sEÍ]Ü5wQÔÜžæ.Šš»¸k¹‹}Í]5wq×ÜEQsûš»(jî⮹‹¢æ.ö5wQÔÜÅ]sEÍ]ìk¹‹»æ.Šš»Ø×ÜEQswÍ]5w±¯¹‹¢æ.îš»(jîb_sEÍ]Ü5wQÔÜžæ.Šš»¸k¹‹}Í]5wq×ÜEQsûš»(jî⮹‹¢æ.ö5wQÔÜÅ]sEÍ]ìk¹‹»æ.Šš»Ø×ÜEQswÍ]5w±¯¹‹¢æ.îš»(jîb_sEÍ]Ü5wQÔÜžæ.Šš»¸k¹‹}Í]5wq×ÜEQsûš»(jî⮹‹¢æ.ö5wQÔÜÅ]sEÍ]ìk¹‹»æ.Šš»Ø×ÜEQswÍ]5w±¯¹‹¢æ.îš»(jîb_sEÍ]Ü5wQÔÜžæ.Šš»¸k¹‹}Í]5wq×ÜEQsûš»(jî⮹‹¢æ.ö5wQÔÜÅ]sEÍ]ìk¹‹»æ.Šš»Ø×ÜEQswÍ]5w±¯¹‹¢æ.îš»(jîb_sEÍ]Ü5wQÔÜžæ.Šš»¸k¹‹}Í]5wq×ÜEQsûš»(jî⮹‹¢æ.ö5wQÔÜÅ]sEÍ]ìk¹‹»æ.Šš»Ø×ÜEQswÍ]5w±¯¹‹¢æ.îš»(jîb_sEÍ]Ü5wQÔÜžæ.Šš»¸k¹‹}Í]5wq×ÜEQsûš»(jî⮹‹¢æ.ö5wQÔÜÅ]sEÍ]ìk¹‹»æ.Šš»Ø×ÜEQswÍ]5w±¯¹‹¢æ.îš»(jîb_sEÍ]Ü5wQÔÜžæ.Šš»¸k¹‹}Í]5wq×ÜEQsûš»(jî⮹‹¢æ.ö5wQÔÜÅ]sEÍ]ìk¹‹»æ.Šš»Ø×ÜEQswÍ]5w±¯¹‹¢æ.îš»(jîb_sEÍ]Ü5wQÔÜžæ.Šš»¸k¹‹}Í]5wq×ÜEQsûš»(jî⮹‹¢æ.ö5wQÔÜÅ]sEÍ]ìk¹‹»æ.Šš»Ø×ÜEQswÍ]5w±¯¹‹¢ænÜ5w£¨¹ûš»QÔÜ»æn5wc_s7Šš»q×Ü¢ænìkîFQs7îš»QÔÜ}ÍÝ(jîÆ]s7Šš»±¯¹EÍݸkîFQs7ö5w£¨¹wÍÝ(jîÆ¾æn5w㮹EÍÝØ×Ü¢ænÜ5w£¨¹ûš»QÔÜ»æn5wc_s7Šš»q×Ü¢ænìkîFQs7îš»QÔÜ}ÍÝ(jîÆ]s7Šš»±¯¹EÍݸkîFQs7ö5w£¨¹wÍÝ(jîÆ¾æn5w㮹EÍÝØ×Ü¢ænÜ5w£¨¹ûš»QÔÜ»æn5wc_s7Šš»q×Ü¢ænìkîFQs7îš»QÔÜ}ÍÝ(jîÆ]s7Šš»±¯¹EÍݸkîFQs7ö5w£¨¹wÍÝ(jîÆ¾æn5w㮹EÍÝØ×Ü¢ænÜ5w£¨¹ûš»QÔÜ»æn5wc_s7Šš»q×Ü¢ænìkîFQs7îš»QÔÜ}ÍÝøµæîüŸÿóŸÿÆ×ÿùOÿãÿþ·ÿû§H6=îã â°¿ˆxúúÖþŠoñüź3ñ<å½%íišzüD<3zÖž½Q ¦ýÂ_Ýâ9è÷“i‡¨Ý$ÞqTDܘvÇ—ˆÎзøPÆA´§©3§c¿ðóÞâà=O6vpY;¸,j<øœ#‹§©scÆçÞ®4uysýîywEžù\…jgS¥Ÿtì¹vó‡ßâ]{.˜ì îʇƒ*E?“ñyÕÙÅIJhs9Ÿ_Ôx¶as ]£â¹®gw‘ ×~ø"6=W‹ñ-å^Ù]¸´as|w¨‹:™»€Â¦Hž6$_—«‰`ˤ  öTì¸K ™º–O¾éŽk€&’·i%¯k2u-£‰0ƒˆÇÚ]´Ï´L¾ÅÓÔ ®ýZ{›GˆFÜEËh"c™–ÑÍm ‰ä.ZS€XƒÓ®1’8„‰‹‰ ¿ÅOL¹ˆøµÎ¨[—¦®³©4ÁT4‘ò–ÑMZF?òîoqiÕu&Z?%q¶a%4Ñ Ì,‰weÍ›1í.i&>„(ÓŒ­:hb¼14Ñ2š Hª9[uMð5ŸÑDqW=£‰ß{W’“žÑŠ\ÍDü 3/¡‰Žh"-ZS’“näF¬›’œt#@¬g4Á×|F¿w¸› 3oÓ~ ‡ÝHrÒ]I‰;4è§·îÊy]Ïh"#èžÑ=5êNÂD4ÁÒƒîˆu¸› ÞÆÉQg—ÐD4‘ÇÝÉ,@w†&º„&:ÜMŒ4ö’ñ$Âv@ƒM]Fà¬M\$)íƒmXDÌÓæ» ‘Mtöa3šà;î&RéBR„ä¼®š`©Q4‘í¡¤Äî&òÌš,·9‚‰+''¡‰.ÝMôŒ&rNÛO)9»‰”Q÷S  MôÓ%q6u§ÿ;ôÈäý~Ja"£ pV—ÄúÅ|Ý%MÝÅVÝ¥uö‹`Ø~Iy¢‰,®°w†&죄 û{X“î& jÙ3iWà¿}H͉IwÆî& *Ø5®áÝDšº&M]#«Îš‚aU:  v¹`Mœ=kW„e4ÑA\99±F|e4q0Ok¬ÒÉ2š QÆ:¹Â¶®ø:ƒ’Æ”UÜM°ÄÌ2š€-h‚¥F–ÑD#f 3cSgJá„e4‘ÏçMº›0v7aÒÝ„!šhIüòy3&LBæ$¯3 èŠƒ‰qVÀ‹Å^,£‰öIS'ÝM ‰¼æý”Ä/2v MXFÇYHSlÕ…´ê‚ÀËhâ Ë&X˜Èh‚hËhâJ'f–Ñ÷óƒ”ë˜t7aƒ:ÙP’4‘?ÜPNN,£ ˜y©ÒÉKN Ò‰ºJ@yìÀ¾A³ @y楾Î2šè-k—ÂÄAØíPîaÝMV:±Üædaâ”’†&,£ ßš°Œ&(2v7aš0Véd€&Xµ]äöß.åFÌ.ÿ î&hRŠh"kWì:ØØOeÙ\$Â:  6v‡»‰+‹wIܘ¸KâÁć$~0ñS¿ˆx“¦®±©kÒÔ56uMšºÆ¦®ISרÔ5i꛺.M]gS×¥©ëlêº4uM]—¦®³©ëÒÔu6u&M±©3iêŒMISglêLš:cSgÒÔ›:—¦ÎÙÔ¹4uΦΥ©s6u.M³©siêœM]HSlêBšº`SÒÔ›º¦.ØÔ…4uÁ¦nHS7ØÔ i꛺!MÝ`S7¤©lê†4uƒMÝ!MÝÁ¦î¦î`SwHSw°©;¤©;ØÔÒÔlêNiêN6u§4u'›ºSšº“MÝ)MÝɦîdSwISw±©»¤©»ØÔ]ÒÔ]lê.iê.6u—4u™ºÐD04š†&BBÁÐDHh"š MC!¡‰`h"$4 M„„&‚¡‰ÐD04š†&BBÁÐDHh"š MC!¡‰`h"$4 M„„&‚¡‰ÐD04š†&BBÁÐDHh"š MC!¡‰`h"$4 M„„&‚¡‰ÐD04š†&BBÁÐDHh"š MC!¡‰`h"$4 M„„&‚¡‰ÐD04š†&BBÁÐDHh"š MC!¡‰`h"$4 M„„&‚¡‰ÐD04š†&BBÁÐDHh"š MC!¡‰`h"$4 M„„&‚¡‰ÐD04š†&†„&CCBƒ¡‰!¡‰ÁÐÄÐÄ`hbHhb041$41šš M M †&†„&CCBƒ¡‰!¡‰ÁÐÄÐÄ`hbHhb041$41f4ñÿÃúïÿëÿåiÚÿú·×úÇùû×?)Ø€4­ÇÏ’€Õ¯r…×? FV¿J™Ç?‹V¿Êÿ,¼Yý*Þ´‹ýê{Fš;Õø=#ý:诀U‚ÎÄ¥ü*íÐöwèêW™‰(Œý[]™ Ø®Ü.—4†2«°‘¹ÆCúÕ™îèƒj¼”•“·¸›/ØâÔ.ØïüW™×¨Ó_yªlŒió·ö¡¿©*€®¯ä ¬Ñï˜zëôWÒÜco›‰tâPXŸŽŠùJÇÅNËg|M䳈þÏ&›Õ¯rø?+V¿:”=”N)úI¿¶I>'Y+'Y´N}a:¿(<&ÔV~Ø|¥ÃŒboC¡%õL.ùœt²Q¬/ž>ª1×Öœlå„äïÓ™Gñ…ÒÈWþJ•;‚ϳ˕/§!tVÓÑHÜ.iÝC 'ÝC!­{(è¤ÿV:4)vÚèJ6”NPz¿è¿å’õ¡|!è"£ù×bíòœ|ÐrѯO]üs’ëhÒ¯ºò…òL7úo¹ò…iÝçÙhl§ÒÜÒÜ瓞ñåc›þqö«¦D¾t†SÌW>ñËò_9§4÷ùt§£äïO)Ï9%ŸsIyt¸Ñت4³J‡@…_Í'Bü ¥!»è×NÇCE‡ø×¾¤X{)sŸéû¸Ÿú>êW‘ËkTæ>ûqô Ä~Ô"Ë·ë"r¦ü3çv]‚_þ¿v|دš°r2 φ€ úB`¤{˜ípö«k¯Æ~uYGæ äÙvæ ä8 ùÜwiî3®¥Ù6° òYM¸–ç¾™Z£9ä¤ë¾Ò¯NéW’Ï‘p-0¶ó`¿êÊ~4“4ºô«~5OD…|ÝçÛw¾k%\›) ‹•ãÒºO¸¶Ø ×V¿r%%\[|m ×Ó!ß®œ¥eÚC7úµCZ÷¡œ)dBÄÂ߇´îCò÷ ×Vv e­J¸xi¾šy‹/4”sL QäQaHyNµ#è%\‹ôŠüWÒºJ~Ä‹<¦%\Ë‘NfaäXXÍÙÜÒºO¸¶ÒèŠ÷…Hº ®­fâ¬?•lûü=¯ÐïxJ>'áÚ"79%Ÿs*ç˜@ðXX/­ûSÁV™ú±øB@ÖÂζ’£“„k ¤“pmá1bž®èKò9—äs®µA¿#ÏÓ\î’rL ×f"I¾¢H’â4`•¤ ³JÚÙ©F—4†°V3ß$Ï™€o’z Ÿ,4Jsß”»d¢äÿV"2ÐRò/”q-½YÌ•<ÇÌ„•Üa¥ƒi<o‚ì•t¾2®åë+ãZŠ€×’žÕf^KîÉä’æ˜™ä²ú·†²Óò}-ÿŽ®úK¾‡LÉ1 “Æ4$Ƥv™r¦Y2‹ý˜p-?ÿÊÌBã!ýê"_æÏä™’iÒùÊ%æôD73kVM8gÊ4›I#Í&·~(+Ç•3 àä~Õ•»“.áÚÌÆÉ3 æ¤9S—pm—p-ðtÒJ$íä•<<)ÒÉ ž…θ6³~H>'ãZîårÅ;Ï®õ >gH>'áÚÂOŒC¸m ÐÂzåü>óÑ*ãZ¾‡[9(ÿŽ×Ò“y` -þ-å³K¸¶K÷µ™C´øÚ§”cÂó4³:¥X+áZ¤å¿’æþTÎÒ€w”û¯Sе ×>úRÎ2#iõoIsIëþRîN€«”c…KÊï3®-þ-åΰK¸)Mù¯”ú“îkßÔ½³_)gi™ì”ïZ“îkMº¯TZë4¨4v '*µ«)ë>¤V¿2I£  ³¥ú8¨F%ÖfêT~º<ª4ŸÈ<ª…Æ„kù ‹IuÈ™a•Çm`X¥9Ò­r!àà^¥9yæ^-övƵ4÷ÍD¬Ü3++Ÿ “æÞ”šÀLÑÊQ“I÷µ&Ýךt_ ä­4"g&WŽ3“ká$\ ´®4>Çë×òf¿2ÅGç¦jù€ð5.j½äï×ÒUè§ôo]Ê|I¸6óÂ_;¤¹i݇´îC9KËô±¼z-ÓDZ6áZž3e.Ùvz—‰e‹Ý1”ZX“îke–¯è¡ä˜™r¶XC9ÇÌü³Åw”ꑌ–þ*×!óØ‘q-Ÿ/xô‚æ…‡)ßñPêï3gmëÚ%ÅÚC¹36[¤ûZ ¶¥'HHmËÿ-)Ç”pm&½-ò/ ×fÜ"ÂH÷µ&áZ“ê—ÖÕ7.ÿB—R§D¹|ŒP‡L1LƵ…]Ê2Rèòù:%¿ä9ÿúÿò/ÿþ/ÿñ?üÃ0+½÷DyLP-1.10.4/Data/Netlib/grow15.mps.gz0000644000175200017520000006135110430174061015427 0ustar coincoin‹TK®9grow15.mps•Ü[Že;váwêÃ—Ir=ÊVÁ6`• —]êG¼3ódÄäø³xÊ\[̽‚kòö)ÿú/ÿö—×çþûüûÿ+ñÏÿôþÿ~ÿçzýõõú¿üß¿üõoyxÿØÿþÿùQ>Êׇš?´ü¡ç‘?Œüaæ+xÒ‡ò‘?ä'(ù J~‚’Ÿ ä'(ù J~‚’Ÿ ä'¨ù Þ}PsÔÜ5÷AÍ}PsÔÜ5÷AÍ}PsÔÜ5÷AÍ}PsÔÜ5÷AÍ}PsÔÜ5÷AÍ}Ðr´Ü-÷AË}Ðr´Ü-÷AË}Ðr´Ü-÷AË}Ðr´Ü-÷AË}Ðr´Ü-÷AË}ÐsôÜ=÷AÏ}ÐsôÜ=÷AÏ}ÐsôÜ=÷AÏ}ÐsôÜ=÷AÏ}ÐsôÜ=÷AÏ}¹"÷Aä>ˆÜ‘û rDîƒÈ}¹"÷Aä>ˆÜ‘û rDîƒÈ}¹"÷Aä>ˆÜ#÷ÁÈ}0rŒÜ#÷ÁÈ}0rŒÜ#÷ÁÈ}0rŒÜ#÷ÁÈ}0rŒÜ#÷ÁÈ}0rŒÜ3÷ÁÌ}0sÌÜ3÷ÁÌ}0sÌÜ3÷ÁÌ}0sÌÜ3÷ÁÌ}0sÌÜ3÷ÁÌ}0sÌÜ+÷ÁÊ}°r¬Ü+÷ÁÊ}°r¬Ü+÷ÁÊ}°r¬Ü+÷ÁÊ}°r¬Ü+÷ÁÊ}°r¬ÜOîƒ'÷Á“ûàÉ}ðä>xr<¹žÜOîƒ'÷Á“ûàÉ}ðä>xr<¹žÜOîƒ'÷Á“û =ÛûRä-èùCä#˜ùÃÊžôá½*Jò”ü%?AÉOPò”ü%?AÉOPòÔüï>ÈëÄü¡å=ˆüaä3XùÃSò:1ÈOPò”ü%?AÉOPò”ü%?AÉOPó¼ÿ{^'æ-èùCä#˜ùÃÊž’׉ùC~‚’Ÿ ä'(ù J~‚’Ÿ ä'(ù J~‚šŸàÝy˜?´ü¡ç‘?Œüaæ+xJ^'æù J~‚’Ÿ ä'(ù J~‚’Ÿ ä'(ù j~‚wäubþÐò‡ž?Dþ0ò‡™?¬üá)y˜?ä'(ù J~‚’Ÿ ä'(ù J~‚’Ÿ ä'¨ù Þ}׉ùCËzþùÃÈfþ°ò‡§äubþŸ ä'(ù J~‚’Ÿ ä'(ù J~‚’Ÿ ~‚ÿöïÿëoÿö×o;ê÷þþ}ýí¿ý±ƒþcïý_~ûxÿgŒ×ç:ýA‰®yÈOÕ~6ùÞÿûö¸æóó§~ü-^Ÿ[ñüXmV×üÉ?Õz¬?šۯ翷ôiš—ýwoíõ¹Ï¿ûuæÑ\z¨ô÷jçõ¹¿—¿wÙoŸÚ|¬çõy R‹kþè—ÔòGóú‘þà¹ò¸oÿù_¿ýç·ñüq ðã§ê×OiG|D{|:>ætÍ53z=Æý{lê ×–k.=ôÞÔçHǯšk­g®#ß~÷ù£°Íè:MG¯ï1q=_S:Ö{ãÚ¿^€Ã[dz¦Þoo¦k¾½ãa‡·ÔµÓ¼|Hó÷~«Ãû#]Ó6—ñi³Om®¹þŠuÍéÆçcý8<šoãóN×1>ßh¶6]×¥¾~{fm_êTÛËhó¸o@ú’n‹ó÷g\Õ\¬1\sÅøv4㮬^Ü·ëKúîŸÏñÑߪ¶ò¸æZ¹jYÍûzÏÝ5×âümaㆷÍòáz~+ÎOý™}ýâù±;<º®ç×o<‘ªkØþýwÝç5[wÍ5Á-ªŸ{[ÌâšëKúþϲÃûô4y oëççáý£À¹ß}Þw3¼ï™áǶëh¾ÍÐQ»÷ú¼ŸË5ß*WŒæ'åR]ÏKÞu«þœYò{ùÛó²Žbšo!x¿Ã–‹Í·uÒ{]UxÞ/†ûݪ0lUhµ5÷»kÒï¾ûøq´7ß«Â{Ÿ~¾X¿½ç˜TP¨ ß#Ï-À÷¢”6 mK©vƒXúJ¯õƒ±ùÍÆf®4™<›÷ÛÓ—‹úhÕ4ר´wMé66½¥züPlæŒêמ‘vl@úŒY}žÚã~÷­¨<Ñ줴Õí·?Û6¥ÃñÁè®ëò{ùÛ{“2êgýìU» ™&6ýýûvÛ¼o;¼û—TôsómÊ?OHöíé{}îšoÅùã³¹Ö¤Ú¾Vç©ù¾R©Ý¯TÞå|¸æíxF{êÔ~œ0Í÷#¨VlMŠ÷ÒÕ5ßvx£Ú•Jùãäso®Óåç©`>’ùíis­Ïh{&ùã`¡Ú¹¨Ïwj]óØ¦œŸ›¯½S¾*b)´À}׿í-Ó>¼öÐxo›í$ÕëWM*t&ÙZ|œ"ê‡m¾:­ÏɾRùª …Î$û{ÿ¶¨¬WGs}3¾A{ªQkw]—nÞëØ÷×|½Ö‹ÊüÜ=Éï>fI/žI¶þ¹kÞzh¤á­¸ýùšðò©ízåšëÉeýñÈæ4k´0Í÷]óó¹ýÙ§œÇ=¼¦#Zû9ÙSÎסU¡3Éú°]Ç–Y?\ÏïSÎü9áé”Óz_Í5Ïg’ãcü€C?~ªñ”~wû.Çk>·nݾü5WíFÃÛևߦԚêfƒáýó2F«ÂûïýÚž8Ò|ïGñ+Š?TÞÑ|»(ŸEÛ·>ËuݾM)Ow³ÁSs¸š›ð¾-Wß롯/é°\-1?÷Àû&6e¨ÓŠâ½é¾*”i¿}lÝßgü°|Gs]•®ö³¶o÷X«u×|ËP«Ït±‰§ÖêšëÌòÞåØÚQòÁMnÛäù1Îóò{ëéšÏýÎ%üRc>öw¶Ë˜j—«µ>Õ \ÞÀÿ6ßßøu¬WÂM ?·àš2Í~÷Ó ï{Íôu>“šï×Uë£ú•äìîÛ÷`|Î,º`|¾éšo;ðùÑáåOooàmäçï.ãÓÞ{èÇ>¼|Îùuä\íU?ÖÏ¥Õq‰=‡k¾T½·eîµ®š£ù>ówX¦í^¡ƒÏ÷ÛïÏË£û»ï!øø<âhº /_—͹¹¾ùþFQ‹ëº-åó²ù÷æ~w}Ig‰âjÇ;+½—Ï(¢Ã¸—´d›x‰=Wƒ#Íf¿=tq3Ú¹`üyðãšo×,ïöŸåëd¬ÐÁçÇ||lÞ¿âã¾}‹M‹ÏkÊ}ZÝ·ïSÃWs-*ïzú¸æÛœ±Š?7-i/4ñ¼ü)·ÛË}»¦î½^œçø½Ï˜ïÿ÷:}Ϫ?g¬#6£ºæò»÷òζßg”T.îBcù…è;òÝ5ßæËù¹–ÓÛ¹>?\óýÜôã³ç·7n¤uìÂËêcómë6\ó»Ã‹º–ýݵ&õw8ÝZá#ú\öá—¦c¥µÜƒûŒúYD‡”õƒ~͵¨ôþY¶qÏ®ù¶Ôø¼ØÆ]ctðùm:¨0îÓ6?nííé· ¼m¾m¥êÏ•ŠŽOfªIöäò½|Gåë§~àåxüü9ãk/”›ï÷B«ÃËÿu,ž›ÇN,‹{×­e~_jü¼gÜÆ½Ç×j*7×Dùtmû¹¶ûö}©îXãÃ}ûöò÷ºük‹b›ïsÆgíЮÏ×<7ßÐÊøùbí.§ìì½2{‡¢"ì½2{‡®°÷Êì¸ÂÞ+³w_T”½Wfïtê”Ù{eö²÷ÊìN5„½Wfïæ•1ìŠJfï•Ù;¤CØ{eöNÛŸÌÞ+³wŸeï•Ù;íš3{¯ÌÞ}:”½Wfï>ÊÞ+³wšr2{¯ÌÞÍ›aØ;N9áw·{‡…¨°÷Êì†WØ{eöî‡WÙ{eön‡wcï•Ù;]Hdö^™½Ó6%³÷ÊìÝLx†½û媲÷ÊìVÂÞ+³wXQ{¯ÌÞýŠBÙ{eö»aï•Ù;Ì,ÂÞ+³÷z^Ñì½2{‡p {¯ÌÞ!\ÂÞ+³w·?Ù{uöacï•Ù;Ýgdö^™½ÓuUfï•Ù;xgö^™½ÓEfï•Ù;ÝFfö^™½›pö{Uaï•Ù;ÌüÂÞ+³wœù;¬ •½û©AÙ{eöNÛ‰ÌÞ+³w?ó+{¯ÌÞa? ì½2{÷gÊÞ+³w:£Èì½2{§KìÌÞ+³weï•Ù;]³dö^™½Cl„½Wfïaï•Ù»/*ÊÞ+³wš32{¯ÌÞé¼<³÷ÊìݧNÙ{eöîW’ÊÞ+³weï•Ù;íB3{¯ÌÞ!6ÂÞ+³wˆ°÷Êì/ªÍÎÞÿäáÅÎÞý\¤ì½2{7©3ìö™½WfïPT„½Wfï´ÔÈì½2{‡•¤°÷Êì&aï•Ù;¼ÖÂÞ+³wwÈp²wºÏì½2{§9#³÷ÊìÝ­$wö^™½ãR#±÷Êì^~aï•Ù;-5bÀ«²wxù…½Wfï8g$ö^™½›uìÁÞ+³wXÇ {¯ÌÞ+Èq†ç3³÷ rœ›÷ÌÞ+ÈqnÞ2{O߈½Wfïéá±÷Êì==|#ö^™½§}#ö^™½§¶{¯ÌÞÓÁ@#ö^™½§÷½{¯ÌÞÓlЈ½Wfï©\4bï•Ù{šL±÷Êì=U›Fì½2{O§Ø{eöžŠU#ö^™½§™°{¯ÌÞS­kÄÞ+³÷´NjÄÞ+³÷T*±÷Êì=MãØ{eöž*m#ö^™½§Å}#ö^™½·³Xì½1{og¹8Ø{cöÞÜû¾±÷Æì½/ìÁÞ³÷v¾2{oÌÞÛ™ùƒ½7fïíLÝÁÞ³÷vÆæ`ïÙ{3sÜÉÞÛ9ì½1{‡t{oÌÞ›)ç;{oÌÞ›©Ç;{oÌÞ!ÂÞ»uŸeï7͵‡„½7fï&{oÌÞMU0ìݯ²÷ÆìÝ ïÁÞ³w3¼{oÌÞýø({oÌÞa|„½7fï4>™½7fïÍ­öµ]Ø{cöîŠóÎÞ³w_œ•½7fïíå^ReïÙ{{Ù.ì½1{‡â,ì½1{‡â,ì½1{of ²wWÂwöÞ˜½›á=Ø{cöî‡WÙ{cöî‡WÙ{cöÃ+ì½1{o/?CgöÞ˜½·—}Ç…½7fïíeB°±÷ÆìÝ»²÷ÆìÝ„ë`ïÙ;ÄFØ{cö±öÞ˜½ûØ({oÌÞ16‰½7fï›ÌÞ³wˆ°÷ÆìÝÆfcïÙ»‰ÍÁÞ³wŒMbïÙ{{¹ý€²÷ÆìÝÇFÙ{cöŽ+ýÄÞ³w³V8Ø{cö“‰°÷Æì&aïÙ»›ÆOökaïÙ;¬ô…½7fᄄ({oÌÞa)(ì½1{‡t{oÌÞ±* [vöî«‚²÷ÆìªBfïÙ»¯ ÊÞ³wØ {oÌÞ)6™½7fï>6ÊÞ³weïÙ;ÄFØ{cöî7 ÊÞ³w(*ÂÞ³w(*ÂÞ³wS {§Ã¥ÌÞ³w˜r„½7fï4ådöÞ˜½ÃöTØ{cöN+•ÌÞ³w\©$öÞ˜½SMÊ7ÇÙ;¬T„½7fï¶&mì½1{w§;{oÌÞ¡¨{oÌÞa+ì½1{‡®°÷ÆìÝeïÙ;:eöÞ˜½û¢¢ì½1{‡S aïÙ»ye {§¢’Ù{cöéöÞ˜½Óö'³÷ÆìݧCÙ{cöN»æÌÞ³wŸeïÙ»O‡²÷Æì¦œÌÞ³wóföŽSNøÝíÆÞa!*ì½1{‡áöÞ˜½ûáUöÞ˜½ÛáÝØ{cöN™½7fï´MÉì½1{7žaï~¹ªì½1{‡…°÷ÆìVÂÞ³w¿¢PöÞ˜½Ã.GØ{cö3‹°÷Æì½W´{oÌÞ!\ÂÞ³w—°÷ÆìÝmàOöÞœ}ØØ{cöN÷™½7fït]•Ù{cöNÞ™½7fïtF‘Ù{cöN·‘™½7fï&\†½Ã^UØ{cö3¿°÷ÆìgþëBeï~jPöÞ˜½Óv"³÷ÆìÝÏüÊÞ³wØ{oÌÞý…²÷ÆìÎ(2{oÌÞé;³÷ÆìÝÇFÙ{cöN×,™½7fïaïÙ;ÄFØ{cö²÷ÆìæŒÌÞ³w:/Ïì½1{÷©SöÞ˜½û•¤²÷ÆìÝÇFÙ{cöN»ÐÌÞ³wˆ°÷Æìb#ì½1{§Ã‹êc³³÷?yx±³w?){oÌÞMê {§}FfïÙ;aïÙ;-52{oÌÞa%)ì½1{‡ÉDØ{cö¯µ°÷ÆìÝ2œì.Ç3{oÌÞiÎÈì½1{w+ɽ7fï¸ÔHì½1{‡—_Ø{cöNKpǪì^~aïÙ;Ή½7fïf{°÷ÆìÖ±ÂÞ³÷rüò_{o ǯÔ<¨ _6ÌÞÓÃwbïÙ{zøNì½1{O߉½7fïig߉½7fïé…íÄÞ³÷t0Љ½7fïé}ïÄÞ³÷4tbïÙ{*Ø{cöž&“Nì½1{OÕ¦{oÌÞÓ©F'öÞ˜½§bÕ‰½7fïi&ìÄÞ³÷Të:±÷Æì=­“:±÷Æì=•ÊNì½1{OÓx'öÞ˜½§JÛ‰½7fïiq߉½7fïý,V{ïÌÞûY.öÞ™½w÷¾oì½3{ïç {°÷Î콟¯ÌÁÞ;³÷~fþ`ïÙ{?Sw°÷Î콟±9Ø{göÞÍw²÷~ÎE{ïÌÞ!ÂÞ;³÷nÊùÎÞ;³÷nêñÎÞ;³wH‡°÷ÎnݧCÙûMsí!aïÙ»IÇÁÞ;³wS {÷ëì½3{7Ã{°÷ÎìÝ ïÁÞ;³w?>ÊÞ;³waïÙ;OfïÙ{wkă½CmöÞ™½»â¼³÷ÎìÝgeïÙ{¹—TÙ{göÞ_¶„ {ïÌÞ¡8 {ïÌÞ¡8 {ïÌÞ»YßìÝ•ð½wfïfxöÞ™½ûáUöÞ™½ûáUöÞ™½Ãð {ïÌÞûËÏЙ½wfïýeßqaïÙ{™lì½3{÷ã®ì½3{7á:Ø{gö±öÞ™½Cl„½wfï>6ÊÞ;³wŒMbïÙ;Å&³÷Îìb#ì½3{·±ÙØ{gönbs°÷Îìc“Ø{göÞ_n? ì½3{÷±QöÞ™½ãJ?±÷ÎìݬöÞ™½Ãd"ì½3{‡ÉDØ{göî¦ñ“½ÃZAØ{gö+}aïÙ»/*ÊÞ;³wX {ïÌÞ!ÂÞ;³w¬ ÃV…½ûª ì½3{§ªÙ{göî«‚²÷Îì6ˆÂÞ;³wŠMfïÙ»²÷ÎìÝÇFÙ{gö±öÞ™½û ˆ²÷Î슊°÷Î슊°÷ÎìÝÔcÃÞép)³÷Îì¦aïÙ;M9™½wfï°=öÞ™½ÓJ%³÷ÎìW*‰½wfïT“òÍqgö+aïÙ»­I{ïÌÞÝéÃÎÞ;³w(*ÂÞ;³wXà {ïÌÞa+ì½3{÷EEÙ{göN§N™½wfᄄ({ïÌÞáTCØ{gön^ÃÞ©¨döÞ™½C:„½wfï´ýÉì½3{÷éPöÞ™½Ó®9³÷ÎìݧCÙ{göîÓ¡ì½3{§)'³÷Îìݼ†½ã”~w»±wXˆ {ïÌÞax…½wfï~x•½wfïvx7öÞ™½Ó…DfïÙ;mS2{ïÌÞÍ„gØ»_®*{ïÌÞaE!ì½3{‡…°÷Îìݯ(”½wfï°ËöÞ™½ÃÌ"ì½3{ïçíÁÞ;³w—°÷ÎìÂ%ì½3{wø“½wg6öÞ™½Ó}FfïÙ;]WeöÞ™½ÓwfïÙ;QdöÞ™½ÓmdfïÙ» —aï°WöÞ™½ÃÌ/ì½3{Ç™¿ÃºPÙ»Ÿ”½wfï´Èì½3{÷3¿²÷ÎìöÂÞ;³wF¡ì½3{§3ŠÌÞ;³wºÄÎì½3{÷±QöÞ™½Ó5KfïÙ;ÄFØ{gö±öÞ™½û¢¢ì½3{§9#³÷ÎìÎË3{ïÌÞ}ꔽwfï~%©ì½3{÷±QöÞ™½Ó.4³÷Îìb#ì½3{‡Ø{ïÌÞéð¢úØììýO^ììÝÏEÊÞ;³w“:ÃÞiŸ‘Ù{göEEØ{göNKÌÞ;³wXI {ïÌÞa2öÞ™½Ãk-ì½3{w‡ '{§ËñÌÞ;³wš32{ïÌÞÝJrgïÙ;.5{ïÌÞáåöÞ™½ÓR#ܱ*{‡—_Ø{göŽsFbïÙ»YÇì½3{‡u¬°÷Î콃¿ü×Þ;ÈñËí½ƒÿÇßþûöðAì½3{OÄÞ;³÷ôðAì½3{O;û öÞ™½§6ˆ½wfïé` ˆ½wfïé}bïÙ{š ‚Ø{göžÊE{ïÌÞÓdÄÞ;³÷Tm‚Ø{göžN5‚Ø{göžŠU{ïÌÞÓLÄÞ;³÷Të‚Ø{göžÖIAì½3{O¥2ˆ½wfïibïÙ{ª´Aì½3{O‹û öÞ™½ÇY¬öÌÞã,{fïáÞ÷½³÷8_؃½³÷8_™ƒ½³÷83°÷`ögêöÌÞãŒÍÁÞƒÙ{˜9îdïqÎE{fïaïÁì=L9ßÙ{0{SwöÌÞ!ÂރݺO‡²÷›æÚCÂÞƒÙ»IÇÁÞƒÙ»© †½ûáUöÌÞÍðì=˜½›á=Ø{0{÷ã£ì=˜½Ãø{fï4>™½³÷pkă½CmöÌÞ]qÞÙ{0{÷ÅYÙ{0{—{I•½³÷xÙ.ì=˜½CqöÌÞ¡8 {fïaÖð'{w%|gïÁìÝ ïÁÞƒÙ»^eïÁìݯ²÷`öÃ+ì=˜½ÇËÏЙ½³÷xÙw\Ø{0{— ÁÆÞƒÙ»weïÁìÝ„ë`ïÁìb#ì=˜½Cl„½³weïÁìc“Ø{0{§ØdöÌÞ!6ÂÞƒÙ»ÍÆÞƒÙ»‰ÍÁÞƒÙ;Æ&±÷`ö/·PöÌÞ}l”½³w\é'öÌÞÍZá`ïÁì&aïÁì&aïÁìÝMã'{‡µ‚°÷`ö+}aïÁìÝeïÁì–‚ÂÞƒÙ;¤CØ{0{Ǫ0lUØÙ»¯ ÊÞƒÙ;U…ÌÞƒÙ»¯ ÊÞƒÙ;l…½³wŠMfïÁìÝÇFÙ{0{÷±QöÌÞ!6Âރٻ߀({fïPT„½³w(*ÂÞƒÙ»©Ç†½ÓáRfïÁì¦aïÁ즜ÌÞƒÙ;lO…½³wZ©döÌÞq¥’Ø{0{§š”oŽƒÙ;¬T„½³w[“6öÌÞÝéÃÎÞƒÙ;aïÁì¸ÂÞƒÙ;,p…½³w_T”½³w:uÊì=˜½û¢¢ì=˜½Ã©†°÷`ön^ÃÞ©¨döÌÞ!ÂÞƒÙ;m2{fï>ÊÞƒÙ;íš3{fï>ÊÞƒÙ»O‡²÷`öNSNfïÁìݼ†½ã”~w»±wXˆ {fï0¼ÂÞƒÙ»^eïÁìÝïÆÞƒÙ;]HdöÌÞi›’Ù{0{7žaï~¹ªì=˜½ÃŠBØ{0{‡…°÷`öîWÊÞƒÙ;ìr„½³w˜Y„½³÷8¯höÌÞ!\ÂÞƒÙ;„KØ{0{wø“½‡³{fïtŸ‘Ù{0{§ëªÌÞƒÙ;xgöÌÞéŒ"³÷`öN·‘™½³w.ÃÞa¯*ì=˜½ÃÌ/ì=˜½ãÌßa]¨ìÝO ÊÞƒÙ;m'2{fï~æWöÌÞa? ì=˜½û3 eïÁìÎ(2{fït‰Ù{0{÷±QöÌÞéš%³÷`ö±öÌÞ!6ÂÞƒÙ»/*ÊÞƒÙ;Í™½³w:/Ïì=˜½ûÔ){fï~%©ì=˜½ûØ({fï´ Íì=˜½Cl„½³wˆ°÷`öN‡ÕÇfgïòðbgï~.RöÌÞMê {§}FfïÁ슊°÷`öNKÌÞƒÙ;¬$…½³w˜L„½³wx­…½³wwÈp²wºÏì=˜½Óœ‘Ù{0{w+ɽ³w\j$öÌÞáåöÌÞi©îX•½ÃË/ì=˜½ãœ‘Ø{0{7ëØƒ½³wXÇ {fïrüò_{ãWÍA½®ÿµ÷ôðƒØ{0{O?ˆ½³÷ôðƒØ{0{O;ûAì=˜½§v{fïé``{fïé}ÄÞƒÙ{š ±÷`öžÊÅ öÌÞÓd2ˆ½³÷Tm±÷`öžN5±÷`öžŠÕ öÌÞÓL8ˆ½³÷Të±÷`öžÖIƒØ{0{O¥r{fïiÄÞƒÙ{ª´ƒØ{0{O‹ûAì=˜½³Xì}0{g¹8Øû`ö>Üû¾±÷Áì}œ/ìÁÞ³÷q¾2{ÌÞÇ™ùƒ½fïãLÝÁÞ³÷qÆæ`ïƒÙû0sÜÉÞÇ9ì}0{‡t{ÌÞ‡)ç;{ÌÞ‡©Ç;{ÌÞ!ÂÞ»uŸeï7͵‡„½fï&{ÌÞMU0ìݯ²÷ÁìÝ ïÁÞ³w3¼{ÌÞýø({ÌÞa|„½fï4>™½fïíöµ]Øû`öîŠóÎÞ³w_œ•½fïãå^ReïƒÙûxÙ.ì}0{‡â,ì}0{‡â,ì}0{f ²wWÂwö>˜½›á=Øû`öî‡WÙû`öî‡WÙû`öÃ+ì}0{/?Cgö>˜½—}Ç…½fïãeB°±÷ÁìÝ»²÷ÁìÝ„ë`ïƒÙ;ÄFØû`ö±ö>˜½ûØ({ÌÞ16‰½fï›ÌÞ³wˆ°÷ÁìÝÆfcïƒÙ»‰ÍÁÞ³wŒMbïƒÙûx¹ý€²÷ÁìÝÇFÙû`öŽ+ýÄÞ³w³V8Øû`ö“‰°÷Áì&aïƒÙ»›ÆOökaïƒÙ;¬ô…½fᄄ({ÌÞa)(ì}0{‡t{ÌÞ±* [vöî«‚²÷ÁìªBfïƒÙ»¯ ÊÞ³wØ {ÌÞ)6™½fï>6ÊÞ³weïƒÙ;ÄFØû`öî7 ÊÞ³w(*ÂÞ³w(*ÂÞ³wS {§Ã¥ÌÞ³w˜r„½fï4ådö>˜½ÃöTØû`öN+•ÌÞ³w\©$ö>˜½SMÊ7ǃÙ;¬T„½fï¶&mì}0{w§;{ÌÞ¡¨{ÌÞa+ì}0{‡®°÷ÁìÝeïƒÙ;:eö>˜½û¢¢ì}0{‡S aïƒÙ»ye {§¢’Ùû`öéö>˜½Óö'³÷ÁìݧCÙû`öN»æÌÞ³wŸeïƒÙ»O‡²÷Á즜ÌÞ³wóföŽSNøÝíÆÞa!*ì}0{‡áö>˜½ûáUö>˜½ÛáÝØû`öN™½fï´MÉì}0{7žaï~¹ªì}0{‡…°÷ÁìVÂÞ³w¿¢Pö>˜½Ã.GØû`ö3‹°÷Áì}œW´{ÌÞ!\ÂÞ³w—°÷ÁìÝmàOö>œ}ØØû`öN÷™½fït]•Ùû`öNÞ™½fïtF‘Ùû`öN·‘™½fï&\†½Ã^UØû`ö3¿°÷ÁìgþëBeï~jPö>˜½Óv"³÷ÁìÝÏüÊÞ³wØ{ÌÞý…²÷ÁìÎ(2{ÌÞé;³÷ÁìÝÇFÙû`öN×,™½fïaïƒÙ;ÄFØû`ö²÷ÁìæŒÌÞ³w:/Ïì}0{÷©Sö>˜½û•¤²÷ÁìÝÇFÙû`öN»ÐÌÞ³wˆ°÷Áìb#ì}0{§Ã‹êc³³÷?yx±³w?){ÌÞMê {§}FfïƒÙ;aïƒÙ;-52{ÌÞa%)ì}0{‡ÉDØû`ö¯µ°÷ÁìÝ2œì.Ç3{ÌÞiÎÈì}0{w+ɽfï¸ÔHì}0{‡—_Øû`öNKpǪì^~aïƒÙ;Ή½fïf{°÷ÁìÖ±ÂÞ³÷rüò_{ Ç/ÿµ÷rœ›·ÌÞÓÃObïƒÙ{zøIì}0{O?‰½fïig?‰½fïé…ÄÞ³÷t00‰½fïé}ŸÄÞ³÷4LbïƒÙ{*“Øû`öž&“Iì}0{OÕf{ÌÞÓ©Æ$ö>˜½§b5‰½fïi&œÄÞ³÷Të&±÷Áì=­“&±÷Áì=•ÊIì}0{OÓø$ö>˜½§J;‰½fïiq?‰½fïó,V{ŸÌÞçY.ö>™½O÷¾oì}2{Ÿç {°÷Éì}ž¯ÌÁÞ'³÷yfþ`ï“ÙûÍw²÷yÎE{ŸÌÞ!ÂÞ'³÷iÊùÎÞ'³÷iêñÎÞ'³wH‡°÷ÉnݧCÙûMsí!aï“Ù»IÇÁÞ'³wS {÷ëì}2{7Ã{°÷ÉìÝ ïÁÞ'³w?>ÊÞ'³waï“Ù;Ofï“Ùûtkă½Cmö>™½»â¼³÷ÉìÝgeï“Ùû|¹—TÙûdö>_¶„ {ŸÌÞ¡8 {ŸÌÞ¡8 {ŸÌÞ§YßìÝ•ð½Ofïfxö>™½ûáUö>™½ûáUö>™½Ãð {ŸÌÞçËÏЙ½Ofïóeßqaï“Ùû|™lì}2{÷ã®ì}2{7á:Øûdö±ö>™½Cl„½Ofï>6ÊÞ'³wŒMbï“Ù;Å&³÷Éìb#ì}2{·±ÙØûdönbs°÷Éìc“Øûdö>_n? ì}2{÷±Qö>™½ãJ?±÷Éìݬö>™½Ãd"ì}2{‡ÉDØûdöî¦ñ“½ÃZAØûdö+}aï“Ù»/*ÊÞ'³wX {ŸÌÞ!ÂÞ'³w¬ ÃV…½ûª ì}2{§ªÙûdöî«‚²÷Éì6ˆÂÞ'³wŠMfï“Ù»²÷ÉìÝÇFÙûdö±ö>™½û ˆ²÷É슊°÷É슊°÷ÉìÝÔcÃÞép)³÷Éì¦aï“Ù;M9™½Ofï°=ö>™½ÓJ%³÷ÉìW*‰½OfïT“òÍñdö+aï“Ù»­I{ŸÌÞÝéÃÎÞ'³w(*ÂÞ'³wXà {ŸÌÞa+ì}2{÷EEÙûdöN§N™½Ofᄄ({ŸÌÞáTCØûdön^ÃÞ©¨dö>™½C:„½Ofï´ýÉì}2{÷éPö>™½Ó®9³÷ÉìݧCÙûdöîÓ¡ì}2{§)'³÷Éìݼ†½ã”~w»±wXˆ {ŸÌÞax…½Ofï~x•½Ofïvx7ö>™½Ó…Dfï“Ù;mS2{ŸÌÞÍ„gØ»_®*{ŸÌÞaE!ì}2{‡…°÷Éìݯ(”½Ofï°Ëö>™½ÃÌ"ì}2{ŸçíÁÞ'³w—°÷ÉìÂ%ì}2{wø“½Og6ö>™½Ó}Ffï“Ù;]Weö>™½Ówfï“Ù;Qdö>™½Ómdfï“Ù» —aï°Wö>™½ÃÌ/ì}2{Ç™¿ÃºPÙ»Ÿ”½Ofï´Èì}2{÷3¿²÷ÉìöÂÞ'³wF¡ì}2{§3ŠÌÞ'³wºÄÎì}2{÷±Qö>™½Ó5Kfï“Ù;ÄFØûdö±ö>™½û¢¢ì}2{§9#³÷ÉìÎË3{ŸÌÞ}ꔽOfï~%©ì}2{÷±Qö>™½Ó.4³÷Éìb#ì}2{‡Ø{ŸÌÞéð¢úØììýO^ììÝÏEÊÞ'³w“:ÃÞiŸ‘ÙûdöEEØûdöNKÌÞ'³wXI {ŸÌÞa2ö>™½Ãk-ì}2{w‡ '{§ËñÌÞ'³wš32{ŸÌÞÝJrgï“Ù;.5{ŸÌÞáåö>™½ÓR#ܱ*{‡—_ØûdöŽsFbï“Ù»YÇì}2{‡u¬°÷Éì}‚¿ü×Þ'Èñ+5*èêÛß~{ŸÌÞÓÃ/bï“Ù{zøEì}2{O;ûEì}2{O/ì"ö>™½§ƒEì}2{Oïû"ö>™½§Ù`{ŸÌÞS¹XÄÞ'³÷4™,bï“Ù{ª6‹ØûdöžN5±÷Éì=«Eì}2{O3á"ö>™½§Z·ˆ½Ofïi´ˆ½Ofï©T.bï“Ù{šÆ±÷Éì=UÚEì}2{O‹ûEì}2{_g±:Øûbö¾Îrq°÷Åì}¹÷}cï‹Ùû:_؃½/fïë|eö¾˜½¯3ó{_ÌÞ×™ºƒ½/fïëŒÍÁÞ³÷e渓½¯s.:Øûböéö¾˜½/SÎwö¾˜½/Swö¾˜½C:„½/vë>ÊÞošk {_ÌÞM:ö¾˜½›ª`Ø»^eï‹Ù»Þƒ½/fïfxö¾˜½ûñQö¾˜½Ãø{_ÌÞi|2{_ÌÞ—[#ìj»°÷ÅìÝç½/fï¾8+{_ÌÞ×˽¤ÊÞ³÷õ²%\ØûböÅYØûböÅYØûbö¾Ìþdﮄïì}1{7Ã{°÷Åìݯ²÷Åìݯ²÷Åì†WØûbö¾^~†Îì}1{_/ûŽ {_ÌÞ×Ë„`cï‹Ù»weï‹Ù» ×ÁÞ³wˆ°÷Åìb#ì}1{÷±Qö¾˜½cl{_ÌÞ)6™½/fïaï‹Ù»ÍÆÞ³w›ƒ½/fï›ÄÞ³÷õrûeï‹Ù»²÷ÅìWú‰½/fïf­p°÷Åì&aï‹Ù;L&ÂÞ³w7ŸìÖ ÂÞ³wXé {_ÌÞ}QQö¾˜½ÃRPØûböéö¾˜½cU¶*ììÝWeï‹Ù;U…ÌÞ³w_”½/fï°Aö¾˜½Sl2{_ÌÞ}l”½/fï>6ÊÞ³wˆ°÷ÅìÝo@”½/fïPT„½/fïPT„½/fï¦öN‡K™½/fï0å{_ÌÞiÊÉì}1{‡í©°÷ÅìV*™½/fï¸RIì}1{§š”o޳wX©{_ÌÞmMÚØûböîNvö¾˜½CQö¾˜½ÃWØûbö \aï‹Ù»/*ÊÞ³w:uÊì}1{÷EEÙûbö§ÂÞ³wóÊöNE%³÷ÅìÒ!ì}1{§íOfï‹Ù»O‡²÷ÅìvÍ™½/fï>ÊÞ³wŸeï‹Ù;M9™½/fïæÍ0ì§œð»Û½ÃBTØûböÃ+ì}1{÷ëì}1{·Ã»±÷Åì.$2{_ÌÞi›’Ùûbön&<ÃÞýrUÙûbö+ aï‹Ù;¬(„½/fï~E¡ì}1{‡]ް÷Åìfaï‹Ùû:¯hö¾˜½C¸„½/fï.aï‹Ù»ÛÀŸì}9û°±÷Åìî32{_ÌÞéº*³÷Åì¼3{_ÌÞéŒ"³÷Åìn#3{_ÌÞM¸ {‡½ª°÷Åìf~aï‹Ù;ÎüÖ…ÊÞýÔ ì}1{§íDfï‹Ù»Ÿù•½/fï°ö¾˜½û3 eï‹Ù;Qdö¾˜½Ó%vfï‹Ù»²÷Åì®Y2{_ÌÞ!6ÂÞ³wˆ°÷ÅìÝeï‹Ù;Í™½/fït^žÙûböîS§ì}1{÷+Ieï‹Ù»²÷Åìv¡™½/fïaï‹Ù;ÄFØûböN‡ÕÇfgïòðbgï~.Rö¾˜½›ÔöNûŒÌÞ³w(*ÂÞ³wZjdö¾˜½ÃJRØûbö“‰°÷Åì^kaï‹Ù»;d8Ù;]Žgö¾˜½Óœ‘ÙûböîV’;{_ÌÞq©‘Øûbö/¿°÷Åì–1àŽUÙ;¼üÂÞ³wœ3{_ÌÞÍ:ö`ï‹Ù;¬c…½/fï äøå¿ö¾@Ž_þkï äøå¿öžþ!ö¾˜½§‡ˆ½/fïéábï‹Ù{ÚÙ?ÄÞ³÷ôÂ>ÄÞ³÷t0ð{_ÌÞÓûþ{_ÌÞÓlð{_ÌÞS¹xˆ½/fïi2yˆ½/fï©Ú<ÄÞ³÷tªñ{_ÌÞS±zˆ½/fïi&|ˆ½/fï©Ö=ÄÞ³÷´Nzˆ½/fï©T>ÄÞ³÷4?ÄÞ³÷Tibï‹Ù{ZÜ?ÄÞ³÷ç,V{˜½?g¹8ØûÃìýqïûÆÞfïÏùÂìýaöþœ¯ÌÁÞfïÏ™ùƒ½?ÌÞŸ3u{˜½?glöþ0{Ìw²÷看öþ0{‡t{˜½?¦œïìýaöþ˜z¼³÷‡Ù;¤CØûÃnݧCÙûMsí!aï³w“Žƒ½?ÌÞMU0ìݯ²÷‡Ù»Þƒ½?ÌÞÍðìýaöîÇGÙûÃìÆGØûÃìÆ'³÷‡ÙûãÖˆ{‡Ú.ìýaöîŠóÎÞfï¾8+{˜½?/÷’*{˜½?/[Â…½?ÌÞ¡8 {˜½Cqöþ0{Ìþdﮄïìýaön†÷`ï³w?¼ÊÞfï~x•½?ÌÞax…½?ÌÞŸ—Ÿ¡3{˜½?/ûŽ {˜½?/‚½?ÌÞý¸+{˜½›pìýaö±öþ0{‡Ø{˜½ûØ({˜½cl{˜½Sl2{˜½Cl„½?ÌÞml6öþ0{7±9ØûÃìc“ØûÃìýy¹ý€²÷‡Ù»²÷‡Ù;®ô{˜½›µÂÁÞfï0™{˜½Ãd"ìýaöî¦ñ“½ÃZAØûÃìVúÂÞfᄄ({˜½ÃRPØûÃìÒ!ìýaöŽUaت°³w_”½?ÌÞ©*döþ0{÷UAÙûÃì6ˆÂÞfï›ÌÞfï>6ÊÞfï>6ÊÞfïaï³w¿Qöþ0{‡¢"ìýaöEEØûÃìÝÔcÃÞép)³÷‡Ù;L9ÂÞfï4ådöþ0{‡í©°÷‡Ù;­T2{˜½ãJ%±÷‡Ù;Õ¤|sü0{‡•а÷‡Ù»­I{˜½»Ó‡½?ÌÞ¡¨{˜½ÃWØûÃì¸ÂÞfᄄ({˜½Ó©Sfï³w_T”½?ÌÞáTCØûÃìݼ2†½SQÉìýaöéöþ0{§íOfï³wŸeï³wÚ5göþ0{÷éPöþ0{÷éPöþ0{§)'³÷‡Ù»y3 {Ç)'üîvcï°öþ0{‡áöþ0{÷ëìýaön‡wcï³wºÈìýaöNÛ”ÌÞfïfÂ3ìÝ/W•½?ÌÞaE!ìýaö+ aï³w¿¢Pöþ0{‡]ް÷‡Ù;Ì,ÂÞfïÏyE{°÷‡Ù;„KØûÃìÂ%ìýaöî6ð'{œ}ØØûÃìî32{˜½ÓuUfï³w:ðÎìýaöNg™½?ÌÞé62³÷‡Ù» —aï°Wöþ0{‡™_ØûÃìgþëBeï~jPöþ0{§íDfï³w?ó+{˜½Ã~@ØûÃìÝŸQ({˜½ÓEfï³wºÄÎìýaöîc£ìýaöN×,™½?ÌÞ!6ÂÞfïaï³w_T”½?ÌÞiÎÈìýaöNç噽?ÌÞ}ꔽ?ÌÞýJRÙûÃìÝÇFÙûÃìv¡™½?ÌÞ!6ÂÞfïaï³w:¼¨>6;{ÿ“‡;{÷s‘²÷‡Ù»Iaï´ÏÈìýaöEEØûÃì–™½?ÌÞa%)ìýaö“‰°÷‡Ù;¼ÖÂÞfïîádït9žÙûÃìæŒÌÞfïn%¹³÷‡Ù;.5{˜½ÃË/ìýaöNKpǪì^~aï³wœ3{˜½›uìÁÞfï°Žöþ0{@Ž_þkïÈñ«æ ‚~Ù<2{ÿzøòAìýaöþõðÔ¼róüðÔ¼qó¼³§æ›ç­5nž÷ƒšnž×ˆÔ|ró4Ù/j¾¸y¾Ë¡æ6ÏwÐ|÷ðÊÞ¿ª 5çÔÉ© 5çÔÉ©5çÔɹ5çÔɶ—šsêò®ŒRW8uyyM©+œ:Y'QsNLãÔœSWó4¯”º¿8-V;{—?PöþÕ<ä§2{ϰ±÷¯æ¹ç•½ëc {ÿjþäŸö®¯°÷ÏæeÿݿػþîÂÞ¿šK {ßþÞe¿}jóÄÞ·NÉìý«ù£_’Ø{úƒ½u]ª6{ÿú)íˆÌÞ·ÊìÒ‘Ù»ÆFØûWóÔ{ÏÍ7öþÕCÒ<³wéyeÌÞÇrÍ¥‡„½_5×Êì]~weï.;{Ï騨»« '{‡áö¾½½™½»áÝÙ»Œ²w7¼;{×ß]Ø;Œ°÷­ë2{§ñÉì]NØ;ŽObïù6öîÞË“½SmÏì]ß aï¶8oì]þ^eïPœ…½Ëð*{ÿê!yI…½kÏ {ÿj®•+³÷ü{§âœÙ»ÆFØ;çÌÞóë·±÷¯®ëùõÛØ»-á{× {wû³÷í2{‡áö. ì†WØ»üVÊÞix3{O°³÷¯æÛ Ø»Î,ÂÞ¿šo•+±wýaïŸÍ%ÊÞÓ¸ïìÆ]ØûVv3{wáÚÙ»– aï›Ìޥ딽Sl2{׿WØ;ÄFØûö[eöαùbïù6öޱIì]~weï›ÌÞ·b•Ù»²÷\.6öîb³³wý­„½sl¾Ø»œ°÷¯æcÛN|±w­bÂÞ!6ÂÞõïöÎ+ý/ö¾hfïn­°³÷mþ¸žß&“ÌÞ·ep·¯éÈì]§2aïv?Ø;­2{ßfƒÌÞi¥ŸÙ»Î„ÂÞ¡¨{—žWöNKÁÌÞµë ù¶NJì=ÿÁÆÞ¹* [6öUAØû¶·Îì«BbïiÜwöUAØû¶ºÈì6ˆ™½ëîVØ;Æ&±wÝ9 {‡Ø{×?ö±ö.ß®ìb“Ù»–saï°ö¾MãûÝ·¢’Ù»în…½SQÉì]„½»z|²w<\Jì=ýÁÎÞiÊÉì]ë±°wœr{ßW@Õ5ߊsbïºBöŽ+•ÄÞ÷r>\óv<£=uRöŽ5)ÝK敽ÓJ%³w]¾-ûí:1 {Ï Ü½ÛÓ‡½ë+#ìŠJfï[§döN ÜÌÞ÷3/ûðÚC™½kQöEEØ»‰°w$ö®·)ÂÞñŒ"±÷-ó™½ãmdbïévöîÂu²wÚ«fö¾e3³wšù3{×yMØ;ÏüÖ…ÂÞajö.o¯²wÜN$ö® zaï0ó {×3 aï´Èì}¿ v¿»¾¤ÂÞó¸oìÏ({ßN^2{ÇKìÄÞ÷M’ýöÐÅMbïû«m¾]³$ö®Í…½Sl2{×û1aï›ÌÞ·%Auß¾O ‰½k¹öŽsFbïÛV*³w6;{ÿ“‡;{÷s‘²÷ÂìݤΰwÚgdö^˜½CQö^˜½ÓR#³÷ÂìV’ÂÞ ³w˜L„½fïðZ {/ÌÞÝ!ÃÉÞér<³÷ÂìæŒÌÞ ³w·’ÜÙ{aöŽKÄÞ ³wxù…½fï´Ôˆw¬ÊÞáåö^˜½ãœ‘Ø{aönÖ±{/ÌÞa+ì½0{/ Çïþµw{ðy­æA½nÿµ÷üð•Ø{aöž¾{/ÌÞÓÃWbï…Ù{ÚÙWbï…Ù{za+±÷Âì= Tbï…Ù{zß+±÷Âì=Í•Ø{aöžÊE%ö^˜½§É¤{/ÌÞSµ©ÄÞ ³÷tªQ‰½fï©XUbï…Ù{š +±÷Âì=ÕºJì½0{Oë¤Jì½0{O¥²{/ÌÞÓ4^‰½fï©ÒVbï…Ù{ZÜWbï…Ù{=‹ÕÁÞ+³÷z–‹ƒ½WfïÕ½ï{¯ÌÞëùÂì½2{¯ç+s°÷Ê콞™?Ø{eö^ÏÔì½2{¯glö^™½W3Ç콞sÑÁÞ+³wH‡°÷Ê콚r¾³÷Ê콚z¼³÷ÊìÒ!ì½²[÷éPö~Ó\{HØ{eönÒq°÷ÊìÝTÃÞýð*{¯ÌÞÍðì½2{7Ã{°÷Êìݲ÷ÊìÆGØ{eöNã“Ù{eö^Ýñ`ïPÛ…½Wfï®8ïì½2{÷ÅYÙ{eö^_î%Uö^™½×—-áÂÞ+³w(ÎÂÞ+³w(ÎÂÞ+³÷jÖð'{w%|gï•Ù»Þƒ½Wfï~x•½Wfï~x•½Wfï0¼ÂÞ+³÷úò3tfï•Ù{}Ùw\Ø{eö^_&{¯ÌÞý¸+{¯ÌÞM¸ö^™½Cl„½Wfïaï•Ù»²÷Êìc“Ø{eöN±Éì½2{‡Ø{¯ÌÞml6ö^™½›Øì½2{ÇØ$ö^™½×—Û({¯ÌÞ}l”½Wfï¸ÒOì½2{7k…ƒ½Wfï0™{¯ÌÞa2ö^™½»iüdï°Vö^™½ÃJ_Ø{eö²÷Êì–‚ÂÞ+³wH‡°÷Êì«Â°Uagï¾*({¯ÌÞ©*dö^™½ûª ì½2{‡ ¢°÷Êìb“Ù{eöîc£ì½2{÷±Qö^™½Cl„½Wfï~¢ì½2{‡¢"ì½2{‡¢"ì½2{7õذw:\Êì½2{‡)GØ{eöNSNfï•Ù;lO…½Wfï´RÉì½2{Ç•Jbï•Ù;Õ¤|s\™½ÃJEØ{eönkÒÆÞ+³wwú°³÷Ê슊°÷Êì¸ÂÞ+³wXà {¯ÌÞ}QQö^™½Ó©Sfï•Ù»/*ÊÞ+³w8Õö^™½›Wưw**™½Wfïaï•Ù;m2{¯ÌÞ}:”½Wfï´kÎì½2{÷éPö^™½ût({¯ÌÞiÊÉì½2{7o†aï8å„ßÝnì¢ÂÞ+³w^aï•Ù»^eï•Ù»Þ½Wfït!‘Ù{eöNÛ”ÌÞ+³w3áöî—«ÊÞ+³wXQ{¯ÌÞaE!ì½2{÷+ eï•Ù;ìr„½Wfï0³{¯ÌÞëyE{°÷ÊìÂ%ì½2{‡p {¯ÌÞÝþdïÕÙ‡½WfïtŸ‘Ù{eöN×U™½WfïtàÙ{eöNg™½Wfït™Ù{eönÂeØ;ìU…½Wfï0ó {¯ÌÞqæï°.Töî§eï•Ù;m'2{¯ÌÞý̯ì½2{‡ý€°÷ÊìÝŸQ({¯ÌÞéŒ"³÷Êì.±3{¯ÌÞ}l”½WfïtÍ’Ù{eö±ö^™½Cl„½Wfᄄ({¯ÌÞiÎÈì½2{§óòÌÞ+³wŸ:eï•Ù»_I*{¯ÌÞ}l”½Wfï´ Íì½2{‡Ø{¯ÌÞ!6ÂÞ+³w:¼¨>6;{ÿ“‡;{÷s‘²÷ÊìݤΰwÚgdö^™½CQö^™½ÓR#³÷ÊìV’ÂÞ+³w˜L„½WfïðZ {¯ÌÞÝ!ÃÉÞér<³÷ÊìæŒÌÞ+³w·’ÜÙ{eöŽKÄÞ+³wxù…½Wfï´Ôˆw¬ÊÞáåö^™½ãœ‘Ø{eönÖ±{¯ÌÞa+ì½2{¯ Ç/ÿµ÷ rüò_{¯ ǹyËì==|#ö^™½§‡oÄÞ+³÷ôðØ{eöžvöØ{eöž^ØFì½2{OØ{eöžÞ÷Fì½2{O³A#ö^™½§rш½Wfïi2iÄÞ+³÷Tm±÷Êì=j4bï•Ù{*VØ{eöžfÂFì½2{Oµ®{¯ÌÞÓ:©{¯ÌÞS©lÄÞ+³÷47bï•Ù{ª´Ø{eöž÷Ø{eöÞÎbu°÷Æì½åâ`ïÙ{sïûÆÞ³÷v¾°{oÌÞÛùÊì½1{ogæöÞ˜½·3u{oÌÞÛ›ƒ½7fïÍÌq'{oç\t°÷ÆìÒ!ì½1{o¦œïì½1{o¦ïì½1{‡t{oìÖ}:”½ß4×öÞ˜½›tì½1{7UÁ°w?¼ÊÞ³w3¼{oÌÞÍðì½1{÷ã£ì½1{‡ñöÞ˜½ÓødöÞ˜½7·F<Ø;ÔvaïÙ»+Î;{oÌÞ}qVöÞ˜½·—{I•½7fïíeK¸°÷Æìг°÷Æìг°÷Æì½™5üÉÞ] ßÙ{cön†÷`ïÙ»^eïÙ»^eïÙ; ¯°÷Æì½½ü Ù{cöÞ^ööÞ˜½·— ÁÆÞ³w?îÊÞ³w®ƒ½7fïaïÙ;ÄFØ{cöîc£ì½1{ÇØ$öÞ˜½Sl2{oÌÞ!6ÂÞ³w›½7fï&6{oÌÞ16‰½7fïíåöÊÞ³weïÙ;®ô{oÌÞÍZá`ïÙ;L&ÂÞ³w˜L„½7fïn?Ù;¬„½7fï°ÒöÞ˜½û¢¢ì½1{‡¥ °÷ÆìÒ!ì½1{Ǫ0lUØÙ»¯ ÊÞ³wª ™½7fï¾*({oÌÞaƒ(ì½1{§ØdöÞ˜½ûØ({oÌÞ}l”½7fïaïٻ߀({oÌÞ¡¨{oÌÞ¡¨{oÌÞM=6ì—2{oÌÞaÊöÞ˜½Ó”“Ù{cöÛSaïÙ;­T2{oÌÞq¥’Ø{cöN5)ß7fï°RöÞ˜½Ûš´±÷ÆìÝ>ìì½1{‡¢"ì½1{‡®°÷Æì¸ÂÞ³w_T”½7fïtê”Ù{cö²÷ÆìN5„½7fïæ•1ìŠJfïÙ;¤CØ{cöNÛŸÌÞ³wŸeïÙ;íš3{oÌÞ}:”½7fï>ÊÞ³wšr2{oÌÞÍ›aØ;N9áw·{‡…¨°÷Æì†WØ{cöî‡WÙ{cön‡wcïÙ;]HdöÞ˜½Ó6%³÷ÆìÝLx†½û媲÷ÆìVÂÞ³wXQ{oÌÞýŠBÙ{cö»aïÙ;Ì,ÂÞ³÷v^Ñì½1{‡p {oÌÞ!\ÂÞ³w·?Ù{söacïÙ;ÝgdöÞ˜½ÓuUfïÙ;xgöÞ˜½ÓEfïÙ;ÝFföÞ˜½›pö{UaïÙ;ÌüÂÞ³wœù;¬ •½û©AÙ{cöNÛ‰ÌÞ³w?ó+{oÌÞa? ì½1{÷gÊÞ³w:£Èì½1{§KìÌÞ³weïÙ;]³döÞ˜½Cl„½7fïaïÙ»/*ÊÞ³wš32{oÌÞé¼<³÷ÆìݧNÙ{cöîW’ÊÞ³weïÙ;íB3{oÌÞ!6ÂÞ³wˆ°÷Æì/ªÍÎÞÿäáÅÎÞý\¤ì½1{7©3ìö™½7fïPT„½7fï´ÔÈì½1{‡•¤°÷Æì&aïÙ;¼ÖÂÞ³wwÈp²wºÏì½1{§9#³÷ÆìÝ­$wöÞ˜½ãR#±÷Æì^~aïÙ;-5bÀ«²wxù…½7fï8g$öÞ˜½›uìÁÞ³wXÇ {oÌÞÈñËí½¿j*èªùïÛÃwbïÙ{zøNì½1{O߉½7fïig߉½7fïé…íÄÞ³÷t0Љ½7fïé}ïÄÞ³÷4tbïÙ{*Ø{cöž&“Nì½1{OÕ¦{oÌÞÓ©F'öÞ˜½§bÕ‰½7fïi&ìÄÞ³÷Të:±÷Æì=­“:±÷Æì=•ÊNì½1{OÓx'öÞ˜½§JÛ‰½7fïiq߉½7fïý,V{ïÌÞûY.öÞ™½w÷¾oì½3{ïç {°÷Î콟¯ÌÁÞ;³÷~fþ`ïÙ{?Sw°÷Î콟±9Ø{göÞÍw²÷~ÎE{ïÌÞ!ÂÞ;³÷nÊùÎÞ;³÷nêñÎÞ;³wH‡°÷ÎnݧCÙûMsí!aïÙ»IÇÁÞ;³wS {÷ëì½3{7Ã{°÷ÎìÝ ïÁÞ;³w?>ÊÞ;³waïÙ;OfïÙ{wkă½CmöÞ™½»â¼³÷ÎìÝgeïÙ{¹—TÙ{göÞ_¶„ {ïÌÞ¡8 {ïÌÞ¡8 {ïÌÞ»YßìÝ•ð½wfïfxöÞ™½ûáUöÞ™½ûáUöÞ™½Ãð {ïÌÞûËÏЙ½wfïýeßqaïÙ{™lì½3{÷ã®ì½3{7á:Ø{gö±öÞ™½Cl„½wfï>6ÊÞ;³wŒMbïÙ;Å&³÷Îìb#ì½3{·±ÙØ{gönbs°÷Îìc“Ø{göÞ_n? ì½3{÷±QöÞ™½ãJ?±÷ÎìݬöÞ™½Ãd"ì½3{‡ÉDØ{göî¦ñ“½ÃZAØ{gö+}aïÙ»/*ÊÞ;³wX {ïÌÞ!ÂÞ;³w¬ ÃV…½ûª ì½3{§ªÙ{göî«‚²÷Îì6ˆÂÞ;³wŠMfïÙ»²÷ÎìÝÇFÙ{gö±öÞ™½û ˆ²÷Î슊°÷Î슊°÷ÎìÝÔcÃÞép)³÷Îì¦aïÙ;M9™½wfï°=öÞ™½ÓJ%³÷ÎìW*‰½wfïT“òÍqgö+aïÙ»­I{ïÌÞÝéÃÎÞ;³w(*ÂÞ;³wXà {ïÌÞa+ì½3{÷EEÙ{göN§N™½wfᄄ({ïÌÞáTCØ{gön^ÃÞ©¨döÞ™½C:„½wfï´ýÉì½3{÷éPöÞ™½Ó®9³÷ÎìݧCÙ{göîÓ¡ì½3{§)'³÷Îìݼ†½ã”~w»±wXˆ {ïÌÞax…½wfï~x•½wfïvx7öÞ™½Ó…DfïÙ;mS2{ïÌÞÍ„gØ»_®*{ïÌÞaE!ì½3{‡…°÷Îìݯ(”½wfï°ËöÞ™½ÃÌ"ì½3{ïçíÁÞ;³w—°÷ÎìÂ%ì½3{wø“½wg6öÞ™½Ó}FfïÙ;]WeöÞ™½ÓwfïÙ;QdöÞ™½ÓmdfïÙ» —aï°WöÞ™½ÃÌ/ì½3{Ç™¿ÃºPÙ»Ÿ”½wfï´Èì½3{÷3¿²÷ÎìöÂÞ;³wF¡ì½3{§3ŠÌÞ;³wºÄÎì½3{÷±QöÞ™½Ó5KfïÙ;ÄFØ{gö±öÞ™½û¢¢ì½3{§9#³÷ÎìÎË3{ïÌÞ}ꔽwfï~%©ì½3{÷±QöÞ™½Ó.4³÷Îìb#ì½3{‡Ø{ïÌÞéð¢úØììýO^ììÝÏEÊÞ;³w“:ÃÞiŸ‘Ù{göEEØ{göNKÌÞ;³wXI {ïÌÞa2öÞ™½Ãk-ì½3{w‡ '{§ËñÌÞ;³wš32{ïÌÞÝJrgïÙ;.5{ïÌÞáåöÞ™½ÓR#ܱ*{‡—_Ø{göŽsFbïÙ»YÇì½3{‡u¬°÷Î콃¿ü×Þ;ÈñËí½ƒ¿ü×ÞÓñ÷Îì==|{ïÌÞÓñ÷Îì=íìƒØ{göž^Ø öÞ™½§ƒ öÞ™½§÷=ˆ½wfïi6bïÙ{*Aì½3{O“I{ïÌÞSµ bïÙ{:ÕbïÙ{*VAì½3{O3a{ïÌÞS­ bïÙ{Z'±÷Îì=•Ê öÞ™½§i<ˆ½wfï©Ò±÷Îì=-îƒØ{gög±:Ø{0{³\ì=˜½‡{ß7öÌÞã|aöÌÞã|eöÌÞãÌüÁÞƒÙ{œ©;Ø{0{36{fïa渓½Ç9ì=˜½C:„½³÷0å|gïÁì=L=ÞÙ{0{‡t{vë>ÊÞošk {fï&{fï¦*öî‡WÙ{0{7Ã{°÷`ön†÷`ïÁìݲ÷`öã#ì=˜½ÓødöÌÞíöµ]Ø{0{wÅygïÁìÝgeïÁì=^î%UöÌÞãeK¸°÷`öÅYØ{0{‡â,ì=˜½‡YßìÝ•ð½³w3¼{fï~x•½³w?¼ÊÞƒÙ; ¯°÷`ö/?CgöÌÞãeßqaïÁì=^&{fï~Ü•½³w®ƒ½³wˆ°÷`ö±öÌÞ}l”½³wŒMbïÁìb“Ù{0{‡Ø{fï66{fï&6{fï›ÄÞƒÙ{¼Ü~@Ù{0{÷±QöÌÞq¥ŸØ{0{7k…ƒ½³w˜L„½³w˜L„½³w7ŸìÖ ÂÞƒÙ;¬ô…½³w_T”½³wX {fïaïÁì«Â°Uagï¾*({fïT2{fï¾*({fï°AöÌÞ)6™½³weïÁìÝÇFÙ{0{‡Ø{fï~¢ì=˜½CQöÌÞ¡¨{fï¦öN‡K™½³w˜r„½³wšr2{fï°=öÌÞi¥’Ù{0{Ç•JbïÁìjR¾9fï°RöÌÞmMÚØ{0{w§;{fïPT„½³wXà {fï°ÀöÌÞ}QQöÌÞéÔ)³÷`ö²÷`ö§ÂÞƒÙ»ye {§¢’Ù{0{‡t{fï´ýÉì=˜½ût({fï´kÎì=˜½ût({fï>ÊÞƒÙ;M9™½³wóföŽSNøÝíÆÞa!*ì=˜½Ãð {fï~x•½³w;¼{fït!‘Ù{0{§mJfïÁìÝLx†½û媲÷`ö+ aïÁìVÂÞƒÙ»_Q({fï°ËöÌÞaföÌÞã¼¢=Ø{0{‡p {fï.aïÁìÝmàOöÎ>lì=˜½Ó}FfïÁ쮫2{fïtàÙ{0{§3ŠÌÞƒÙ;ÝFföÌÞM¸ {‡½ª°÷`ö3¿°÷`öŽ3‡u¡²w?5({fï´Èì=˜½û™_Ù{0{‡ý€°÷`öîÏ(”½³w:£Èì=˜½Ó%vfïÁìÝÇFÙ{0{§k–ÌÞƒÙ;ÄFØ{0{‡Ø{fᄄ({fï4gdöÌÞé¼<³÷`öîS§ì=˜½û•¤²÷`öîc£ì=˜½Ó.4³÷`ö±öÌÞ!6ÂÞƒÙ;^T›½ÿÉ˽û¹HÙ{0{7©3ìö™½³w(*ÂÞƒÙ;-52{fï°’öÌÞa2öÌÞáµöÌÞÝ!ÃÉÞér<³÷`öNsFfïÁìÝ­$wöÌÞq©‘Ø{0{‡—_Ø{0{§¥F ¸cUö/¿°÷`öŽsFbïÁìݬcöÌÞa+ì=˜½ÈñËí=@Ž_©yPA¿l™½ÿâá“nÿÅ3&Äþ‹GIV=Àª+I é*Ïä¹ó`®Ž<À‘+àâªÂT¸âïü­Æ;Àx+å Ü*¶ĶÂ옭þ:À_+³`Öª©4µ¢é4­6:ÀFÿ©ÿø¿ÿøÑ÷ùão^‘×ÇûGÿë¿ÿí¯ÿúí§ÿö¿_ÿùû÷OP­ïSÖÏÿ<OýÍüT¤Ÿzo¨Ÿî§Fþ©÷Z¥>î§fþÆ1FL÷S+ÿTû&‹ÜO=òwÕçc™Ÿ*òwõ÷ïì~ªäŸú¶Ö*î§jþ©úôåúëÛ]ÖWOô¶¿Jîû¶Jöï ¡÷êÝ>Wîû×7liJû¾<þ§´ïßï Ç"}_ëhî§jêûw÷YÇo6…õ*…õ*…õ*…õ*…õ*…õ*…õ*…õ*…õ*…õ*…õ*…õ*…õ*…õ*…õ*…õ*…õ*…í*…í*…í*…í*…í*…í*…í*…í*…í*…í*…í*…í*…í*…í*…í*…í*…í*…ý*…ý*…ý*…ý*…ý*…ý*…ý*…ý*…ý*…ý*…ý*…ý*…ý*…ý*…ý*…ý*…ý*…q•¸Ja\¥0®RW)Œ«ÆU ã*…q•¸Ja\¥0®RW)Œ«ÆU ã*…q•Âq•Âq•Âq•Âq•Âq•Âq•Âq•Âq•Âq•Âq•Âq•Âq•Âq•Âq•Âq•Âq•Âq•Ây•Ây•Ây•Ây•Ây•Ây•Ây•Ây•Ây•Ây•Ây•Ây•Ây•Ây•Ây•Ây•Ây•Âu•Âu•Âu•Âu•Âu•Âu•Âu•Âu•Âu•Âu•Âu•Âu•Âu•Âu•Âu•Âu•Âu•Âç*…ÏU Ÿ«>W)|®Rø\¥ð¹Jás•Âç*…ÏU Ÿ«>W)|®Rø\¥ð¹Jás•Âç&…åã&…é§~‘ÂüSœÂüœÂüSœBù»0…òwa óOq óOq sOp ÓOý"…2B˜ÂüSœBé/L¡ô¦PzSøõS¿LáÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤üû“o–3ùœ߀¯û©ì™¾ÿý©ä™ÊþT¶+¿úÆzõõêÛÕ7¶«olWߨ¯¾±_}c¿úƸúƸúƸúÆqõãêÇÕ7ΫoœWß8¯¾q]}ãºúÆuõÏÕ7>WßøÜ|c:ëøÅ7¦ŸúÅ7¦‘_}ãUÍ)W5§\ÕœrUsÊUÍ)W5§\ÕœrUsÊUÍ)W5§\ÕœrUsÊUÍ)W5§üÚóûî{ôá~*[Øï™ï·0?•-l<}tûSÙ¶Öê²?•-l‰6ü7Š…}wqtóôê¿)H×âßUýùpߨù½êÅý]Ù!Ï6}‰CþvqÞìß*Ÿ‡.qÈë½µ?%}ÿñÀOI߿״ý©GÔy+ö§²C~EÔ6šOa½Ja½Ja½Ja½Ja½Ja½Ja½Ja½Ja½Ja½Ja½Ja½Ja½Ja½Ja½Ja½Ja½Ja»Ja»Ja»Ja»Ja»Ja»Ja»Ja»Ja»Ja»Ja»Ja»Ja»Ja»Ja»Ja»Ja»Ja¿Ja¿Ja¿Ja¿Ja¿Ja¿Ja¿Ja¿Ja¿Ja¿Ja¿Ja¿Ja¿Ja¿Ja¿Ja¿Ja¿Ja\¥0®RW)Œ«ÆU ã*…q•¸Ja\¥0®RW)Œ«ÆU ã*…q•¸Ja\¥p\¥p\¥p\¥p\¥p\¥p\¥p\¥p\¥p\¥p\¥p\¥p\¥p\¥p\¥p\¥p\¥p\¥p^¥p^¥p^¥p^¥p^¥p^¥p^¥p^¥p^¥p^¥p^¥p^¥p^¥p^¥p^¥p^¥p^¥p]¥p]¥p]¥p]¥p]¥p]¥p]¥p]¥p]¥p]¥p]¥p]¥p]¥p]¥p]¥p]¥p]¥ð¹Jás•Âç*…ÏU Ÿ«>W)|®Rø\¥ð¹Jás•Âç*…ÏU Ÿ«>W)|®Rø\¥ð¹I¡(WLaú©_¤0ßÃp ³¾åfÉË)1‹)T£K)L?õ‹Êß…)Ì÷VœÂü;r U>S óOq sßs ósq Ec s&~‘«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹º;)Ww'åêî¤\Ý”«»“ruwR®îNÊÕÝI¹¹;Éž©}Çdî§²gªAJ¬ýc­ü»:ä_}c½úÆzõíêÛÕ7¶«oìWߨ¯¾±_}c\}c\}c\}ã¸úÆqõãêçÕ7ΫoœW߸®¾q]}ãºúÆç꟫o|n¾1Ÿ›ð7æ$þƬ•W‡ü«o¼ª9åªæ”«šS®jN¹ª9åªæ”«šS®jN¹ª9åªæ”«šS®jN¹ª9N+ÿå¯ÿú/ÿç_þùŸþ?`iwr>'DyLP-1.10.4/Data/Netlib/fit2p.mps.gz0000644000175200017520000067743310430174061015345 0ustar coincoin‹cK®9fit2p.mpsTÛ= ¨WFÑ^È2„»ÏÿWZ(CÄùOD±¬Ó½pЧÚÝúåûÓÏÿþË?ǯ?ýá·¿ÿë?ýáç_~þù×?ýòÇ¿þóßÿ=þûë·ÿ{q ®Éµ¸6×áº\ëûýÕ.¶Ä–Ø[bKl‰-±%¶ ¶ ¶ ¶ ¶ ¶ ¶ ¶ ¶ ¶ ¶L¶L¶L¶L¶L¶L¶L¶L¶L¶L¶,¶,¶,¶,¶,¶,¶,¶,¶,¶,¶l¶l¶l¶l¶l¶l¶l¶l¶l¶l¶¶¶¶¶¶¶¶¶¶¶\¶\¶\¶\¶\¶\¶\¶\¶\¶\¶<¶<¶<¶<¶<¶<¶<¶<¶<¶<¶|lùØò±åcËÇ–-[>¶|lù~¿¥?¸â\“kqm®Ãu¹[ènt7ºÝîFw£»ÑÝènt7ºÝîFw£»ÑÝènt7ºÝîFw£»ÑÝènt7ºÝîFw£»ÑÝènt7ºÝîFw£»ÑÝènt7ºÝîFw£»ÑÝènt7ºÝîFw£»ÑÝènt7ºÝîFw£»ÑÝènt7ºÝîFw£»ÑÝènt7ºÝîFw£»ÑÝènt7ºÝîFw£»ÑÝèntwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÐÝAwÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÒÝIw'ÝtwÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÑÝEwÝ]twÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝtwÓÝMw7ÝÝt÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÐÝCwÝ=t÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÒÝKw/ݽt÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷ÑÝGwÝ}t÷£»ÝýèîGw?ºûÑÝî~t÷£»ÝýèîGw?ºûÑÝî~t÷£»ÝýèîGw?ºûÑÝî~t÷£»ÝýèîGw?ºûÑÝî~t÷£»ÝýèîGw?ºûÑÝî~t÷£»ÝýèîGw?ºûÑÝî~t÷£»ÝýèîGw?ºûÑÝî~t÷£»ÝýèîGw?ºûÑÝî~t÷£»ÝýèîGw?ºûÑÝî~t÷£»ÝýèîGw?ºûÑÝî~t÷£»ÝýèîGw?ºûÑÝî~t÷£»ÝýèîGw?ºûÑÝî~t÷£»Ýýèî÷ûîöã÷Ý ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ«…W ¯^-¼ZxµðjáÕ« ¼ÚÀ« ¼ÚÀ« ¼ÚÀ« ¼ÚÀ« ¼ÚÀ« ¼ÚÀ« ¼ÚÀ« ¼ÚÀ« ¼ÚÀ« ¼ÚÀ« ¼ÚÀ« ¼ÚÀ« ¼ÚÀ« ¼ÚÀ« ¼ÚÀ« ¼Ú»{ÚŽ+ˆÂSÑÄëÕ§ÿB£Ô~ $Ï*Ư  Nx/T¶‚¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼òjÈ«!¯†¼ÚüWûí÷þû_?ÿøûç¿¿ß~ÿùÇŸÿøùçϱýø1~ù¿oüúËÿþÀ„ç3=ÿªç+=ßÕó“žßêù ÏÇæùHÓjº‘¦Õt#M7ªéFšnTÓ4Õt¤é¨¦#MG5i:ªéHÓQMGšnVÓÍ4ݬ¦›iºYM7Ót³šn¦éf5ÝLÓ}Õt_šî«¦ûÒt_5Ý—¦ûªé¾4ÝWM÷¥éV5ÝJÓ­jº•¦[Õt+M·ªéVšnUÓ­4Ý®¦Ûiº]M·Ót»šn§év5ÝNÓíjº¦;Õt'MwªéNšîTÓ4Ý©¦;iºSMwÒt·šî¦én5ÝMÓÝjº›¦»Õt7Mw«énšîUÓ½4Ý«¦{iºWM÷Òt¯šî¥é^5Ý ÓÍt#ÕĨjb¤šUMŒT£ª‰‘jbT51RMŒª&Fª‰QÕÄH51ªš©&FU#ÕĨjb¤šUMŒT£ª‰‘jbT51RMŒª&Fª‰QÕÄH51ªš©&FU#ÕĨjb¤šUMŒT£ª‰‘jbT51RMŒª&Fª‰QÕÄH51ªš©&FU#ÕĨjb¤šUMŒT£ª‰‘jbT51RMŒª&Fª‰QÕÄH51ªš©&FU#ÕĨjb¤šUMŒT£ª‰‘jbT51RMŒª&Fª‰QÕÄH51ªš©&FU#ÕĨjb¤šUMŒT£ª‰‘jbT51RMŒª&Fª‰QÕÄH51ªš©&FU#ÕĨjb¤š ª RMPÕ©&¨j‚TT5Aª ªš ÕUMj‚ª&H5AU¤š ª RMPÕ©&¨j‚TT5Aª ªš ÕUMj‚ª&H5AU¤š ª RMPÕ©&¨j‚TT5Aª ªš ÕUMj‚ª&H5AU¤š ª RMPÕ©&¨j‚TT5Aª ªš ÕUMj‚ª&H5AU¤š ª RMPÕ©&¨j‚TT5Aª ªš ÕUMj‚ª&H5AU¤š ª RMPÕ©&¨j‚TT5Aª ªš ÕUMj‚ª&H5AU¤š ª RMPÕ©&fU3ÕĬjb¦š˜UMÌT³ª‰™jbV51SM̪&fª‰YÕÄL51«š˜©&fU3ÕĬjb¦š˜UMÌT³ª‰™jbV51SM̪&fª‰YÕÄL51«š˜©&fU3ÕĬjb¦š˜UMÌT³ª‰™jbV51SM̪&fª‰YÕÄL51«š˜©&fU3ÕĬjb¦š˜UMÌT³ª‰™jbV51SM̪&fª‰YÕÄL51«š˜©&fU3ÕĬjb¦š˜UMÌT³ª‰™jbV51SM̪&fª‰YÕÄL51«š˜©&fU3ÕĬjb¦š˜UMÌT³ª‰™jbV51SM̪&fª‰YÕÄL51«š˜©&fU3ÕĬjb¦šøªšøRM|UM|©&¾ª&¾T_U_ª‰¯ª‰/ÕÄWÕÄ—jâ«jâK5ñU5ñ¥šøªšøRM|UM|©&¾ª&¾T_U_ª‰¯ª‰/ÕÄWÕÄ—jâ«jâK5ñU5ñ¥šøªšøRM|UM|©&¾ª&¾T_U_ª‰¯ª‰/ÕÄWÕÄ—jâ«jâK5ñU5ñ¥šøªšøRM|UM|©&¾ª&¾T_U_ª‰¯ª‰/ÕÄWÕÄ—jâ«jâK5ñU5ñ¥šøªšøRM|UM|©&¾ª&¾T_U_ª‰¯ª‰/ÕÄWÕÄ—jâ«jâK5ñU5ñ¥šøªšøRM|UM|©&¾ª&¾T_U_ª‰¯ª‰/ÕÄWÕÄ—jâ«jâK5ñU5ñ¥šøªšøRM|UM|©&VU+ÕĪjb¥šXUM¬T«ª‰•jbU5±RM¬ª&Vª‰UÕÄJ5±ªšX©&VU+ÕĪjb¥šXUM¬T«ª‰•jbU5±RM¬ª&Vª‰UÕÄJ5±ªšX©&VU+ÕĪjb¥šXUM¬T«ª‰•jbU5±RM¬ª&Vª‰UÕÄJ5±ªšX©&VU+ÕĪjb¥šXUM¬T«ª‰•jbU5±RM¬ª&Vª‰UÕÄJ5±ªšX©&VU+ÕĪjb¥šXUM¬T«ª‰•jbU5±RM¬ª&Vª‰UÕÄJ5±ªšX©&VU+ÕĪjb¥šXUM¬T«ª‰•jbU5±RM¬ª&Vª‰UÕÄJ5±ªšX©&VU+ÕĪjb¥šØUMìT»ª‰jbW5±SMìª&vª‰]ÕÄN5±«šØ©&vU;ÕÄ®jb§šØUMìT»ª‰jbW5±SMìª&vª‰]ÕÄN5±«šØ©&vU;ÕÄ®jb§šØUMìT»ª‰jbW5±SMìª&vª‰]ÕÄN5±«šØ©&vU;ÕÄ®jb§šØUMìT»ª‰jbW5±SMìª&vª‰]ÕÄN5±«šØ©&vU;ÕÄ®jb§šØUMìT»ª‰jbW5±SMìª&vª‰]ÕÄN5±«šØ©&vU;ÕÄ®jb§šØUMìT»ª‰jbW5±SMìª&vª‰]ÕÄN5±«šØ©&vU;ÕÄ®jb§šØUMìT»ª‰jâT5qRMœª&Nª‰SÕÄI5qªš8©&NU'ÕÄ©j⤚8UMœT§ª‰“jâT5qRMœª&Nª‰SÕÄI5qªš8©&NU'ÕÄ©j⤚8UMœT§ª‰“jâT5qRMœª&Nª‰SÕÄI5qªš8©&NU'ÕÄ©j⤚8UMœT§ª‰“jâT5qRMœª&Nª‰SÕÄI5qªš8©&NU'ÕÄ©j⤚8UMœT§ª‰“jâT5qRMœª&Nª‰SÕÄI5qªš8©&NU'ÕÄ©j⤚8UMœT§ª‰“jâT5qRMœª&Nª‰SÕÄI5qªš8©&NU'ÕÄ©j⤚8UMœT§ª‰“jâT5qRMœª&Nª‰[ÕÄM5q«š¸©&nU7ÕÄ­j⦚¸UMÜT·ª‰›jâV5qSMܪ&nª‰[ÕÄM5q«š¸©&nU7ÕÄ­j⦚¸UMÜT·ª‰›jâV5qSMܪ&nª‰[ÕÄM5q«š¸©&nU7ÕÄ­j⦚¸UMÜT·ª‰›jâV5qSMܪ&nª‰[ÕÄM5q«š¸©&nU7ÕÄ­j⦚¸UMÜT·ª‰›jâV5qSMܪ&nª‰[ÕÄM5q«š¸©&nU7ÕÄ­j⦚¸UMÜT·ª‰›jâV5qSMܪ&nª‰[ÕÄM5q«š¸©&nU7ÕÄ­j⦚¸UMÜT·ª‰›jâV5qSMܪ&nª‰[ÕÄM5q«š¸©&^U/ÕÄ«j⥚xUM¼T¯ª‰—jâU5ñRM¼ª&^ª‰WÕÄK5ñªšx©&^U/ÕÄ«j⥚xUM¼T¯ª‰—jâU5ñRM¼ª&^ª‰WÕÄK5ñªšx©&^U/ÕÄ«j⥚xUM¼T¯ª‰—jâU5ñRM¼ª&^ª‰WÕÄK5ñªšx©&^U/ÕÄ«j⥚xUM¼T¯ª‰—jâU5ñRM¼ª&^ª‰WÕÄK5ñªšx©&^U/ÕÄ«j⥚xUM¼T¯ª‰—jâU5ñRM¼ª&^ª‰WÕÄK5ñªšx©&^U/ÕÄ«j⥚xUM¼T¯ª‰—jâU5ñRM¼ª&^ª‰WÕÄK5ñªšx©&^U/ÕÄ«jâ…š?ššéö¨nat {T·°Gº…=ª[Ø#ÝÂÕ-ì‘naêöH·°Gu {¤[Ø£º…=Ò-ìQÝÂéö¨nat {T·°Gº…=ª[Ø#ÝÂÕ-ì‘naêöH·°Gu {¤[Ø£º…=Ò-ìQÝÂéö¨nat {T·°Gº…=ª[Ø#ÝÂÕ-ì‘naêöH·°Gu {¤[Ø£º…=Ò-ìQÝÂéö¨nat {T·°Gº…=ª[Ø#ÝÂÕ-ì‘naêöH·°Gu {¤[Ø£º…=Ò-ìñiÿš$I3F€W™ |²ø¾ÉÞÿ$›£•ºˆèô7mÿì,|€Â ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°C±°ƒXØ¡XØA,ìP,ì v(v ; ;ˆ…Š…ÄÂÅÂba‡ba±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v ; ;‰…Š…ÄÂNÅÂNba§ba'±°S±°“XØ©XØI,ìT,ì$v*v » ûÿóüïñÿû«§²°çóÅŸÊÂÎNâ÷ÐE^â÷Э$ñïC÷T6·^†n^âeè‰øöâM´ â·7ÑÛõí·7‘¹I¼ ÝÝz¯c â÷Ðí~‰Ï:( ^†n\â» ˆ_C—q|ñ&‚Ä‹7‘Wç«7Aß~{‘×Ð}÷&þuzħùöâM”ÎßCwhä‹7q‹o[¿½‰òíÅ›ÀE[½‰kÑÞÞDÃUw{9ïÎßC4ò6lñ&‚¶Lñ&úþ/Þv¾ÓªëjèŠ7q/›Û›øwJ@|ÀÈo¢Ó·o"Ö%¾Uçiè†ÒuÕ›¸:_½‰Eâ ô|ñ&pÞoo"Æ5ò·7›F¾xåÛ·Yóƒ†îö&X¼xE<Í~/ÞDïFÛoâ^óS°“t]ñ&p¿OÒuKéºâMÜg\ñ&pË,Ú°Å›À5¿è˜XjÃoâ6–2NŠ7q‹o¥ëª7q ]ñ&6Í{ñ&î‰+Þ.›âMĵh‹7#_½‰K×o‚[?Õöü#^¼‰E«¼‰X؉7PVÕ› ‰;d×o-êâMÜ6íwoâ/ñïÞÄSYؤm »Ï}‰»îÅÂn—¸1‰ ;Ÿ~‰Ïº@|}ßï•…(º®²°qèÊÝĵe ;}{€IübaSçcPë×ÐåÀÖ}û=t[¿†.ú%~{x¾Wö=q·7ñ¯µ â÷Ð=×·§ZuÅ›¸uaaÿ»AœV]ñ&¶ÆIeaã¢-wçj½5qÆUäõÝù6Të–M[ªõ¢Òîo?┩ÈëKUVÊ5Ž|qî-ÓÕÐõ˦OÕù2BwçïAéØùswñÆ0«0ë{Ù ãIU˜õ=ïÃXf}¯º¡ôüíÄ·)0kôã ̺¨‹inf}Ý46mY÷[ÏßîÀ@E]Ü[]TwÅIÏOã„V˜õ½ãŠ;€ß¾‚ÄÓÅ(âwèƒLâ ³¾7lqð˜ w Â¬' ¹/˜5‰o}T˜5¶¾µÞº¨îÀ5òÛØ´f]v\qpä÷uqLè£Â¬/o¢Â¬ñÛËå¼[7¡ ³.W«ŽÜ̺‘8Xfý¯“óU<ér¡Â¬éÛ+Ì:ãï5x â°aS].T˜õµe*Ìšæý³¾ÄkªŒ|…Yßs/SaÖ÷Èw€Ì‚Y?fM[¦À¬ï [`Ö¨¨+Ìúþöâtúö¤UW/¨óªô¤r’.R¹f}ûqf«®¸Wô À¬sÑ·7º¦V]ƒXeÅTã~o“Ä—p ú6*m=_iÔÅáb¥Ò¨qèÊí@i} £´Ò¨ï-£n*ú^´õv€Z/î@ÜâjÙ;PhÔ“ÄÁ¦­4jœ¸ÛÈË“ª4j\´Å¸WÝT«ržTî@¡Q—ÎO¥¬&)+u;PiÔE|«Î“uQÜ€K¥$w Õí@¥QÇ-®6ì‚‹•šŒ“â´»ucÓVõݺºHr*OºxѨiè6mØâ q¹FO*w Ò¨oUyLÄìE£¾Ö|q°õÛøtø7 3/õÝùi”Õ¡ {ÔÐwàŠ]T5éºFî@¥Q³xû·yѨ‰Ã†}Ѩ±õU#Ù?â[R•F}f•FM'l#w Ò¨)vQiÔEÜÜ„¾hÔ·ø!¯J£.­ßCwhèމJ£¦5ß(רҨ;Š7ïâ·Ð¨ÿÍû7¹Fn*šTå‹Fý“åUhÔÿª¡ïâ†NåUõ=ïM­ºÇШÿ‡c¢Ò¨qË48a+šŽ‰J£¾'®¾\h$žT¡Qÿ›xâãû!UiÔÜùõý"µÒ¨qËt8a+š òz]âjÕ‘7QiÔÜ:˜Ä•F;nІæ¹Ò¨oñz¹Vå‹F}í÷âMuQiÔ÷ÐMcWõ}ÆM“0SiÔ—I\iÔ£~Ѩ¯e³Ô†]p/SiÔA#_¼‰~­ùe±B£¾½ÈJ£Æ‰[æ­4jØúúžºPiÔ,iZ]½\¨4êkÞ+¿= ¯²+o¢Ò¨ç->•88b•FCWßA_­o‚4m¥Q_Y•FM¶Ò¨/uQiÔ,QâB£Æ‹•ú߃&õShÔèWõ½lš °Wõ½h›I¿ïäMT5Ž|ƒ¶Ò¨;~;éºúšFž¼‰J£ÆÖ‹7q/›®6l‡äÀº‘øª«ãGÜ'/õõíÄ:+úrF*š^*õýÐéE£¦oƒZWºŽî&*‡n>ßó* gM£.­¿ýï$>Ì·§áV•s W¨@§ï@káL³ºXì¸e’û;#éG¼™E»:Ø6kˆXe…Nߪ²¾p¦E»À }á¤!äÕééÁ 'M˦>d¾[7NhÅIßß®žTœt®K\éyº\(8i|+TqÒ÷Ès‘ZqÒE\ٴñ¥Ä÷w¼€¢1Y¨P£Û¥¬*(šZôv ò iâ% ÷«ßß̓ñ~ð]<žïæA%=cëñ&f*öùî| Õúü»¨¤ç­où0YÜû|ûm©·ç!ñ„‘/–:].Œ„,îéÅçwƒ|¤ZuïòE?âG˜ûüïÛŽ?âïW NC׌yP±Ï÷ÄÝ–:zû|ßþEzñýý”©¤gºÛl/k¾‡}Œ÷ƒãq5t½7È+é™Å'¨Ê®VÝm¶ßVe%=cëãùîŒTÒ3¶~›ííº¡†ntjÝäÓV ó¼[Wß>PÓX••Û|o™Ù„YX¹Í÷ÐÍa¾}N_fËÌrÙ{û1­/ÒóK-›•°ßoƒ߈Unó¹Å_÷» >AQƒç}‘uQ,uº©Üæ[ü]rÄ:¿ÍC§Âmn÷Ðía¾}ƒ/SQ͸ãö†‰ÛÇtþ]èø Óúm¶ßo_¨æEâ4íQöÐÐ%\àÊm¾—ÍmÏcò@å6_­WT3^æ“$nlÚù€a6cÓns+âfÕÍ÷‹áñSO¯ïâACÆªÜækâf4%«® šÿMëñùý„-¨f :Unsùös‡ýiÙ$xR/T3µ~»÷»ÈŠjÆ¡K8&*ª¹açç÷ˆÙ ÕLË&7}ûõl´ênCßÇU"óe¼ˆÌÔù6¨õi¶Ìmõß…‰*‘™Œ“IñùJd¦¶™ï/…ÈÌʪC÷TÙ>•È||7W³/ßf¿S¶ÏTO‰+‘ùVVêíÀ‹È|Íû0¥À ‘ù¾›¨Df2N ‘ùv ‘ïã^DæŸtJdÆoŸpû"2ÓÄMx™8§¹šôv`ªlŸBd.k^½˜ô”¸™qÃ.¸Æ­Dfùw‘•ÈLÉB“Þ¼ˆÌÄéˆTî@/ßâ;D†[/—5_÷4qõÅðµlÞy< oÄ^¬eìü†E{»lœðß k9Ñ89à„N•ü_‘Ê·euúlSºNE*ç!q¸ý_QV©|[•K­Håk¿/•®S‘ÊíŸbâ R9÷ýí[µj©ŒŽØ¢ðþ_°d‡W%ÿÒú$qs+TÈÉ·ºX*¼_ÉÉ÷Äeˆ[àJN¾‡NÙó/rò¾Ä+TÉÉý7÷°…œ\†.P/ròuQ`ÉÜù–ßu]…%“]WÉÉ÷†­@úöwVθy \ÉÉ¥ójÕu8"+,™©JN¾Î¸¥Âû•œ|» ïWrò¹[_ -äävï÷~„½_°d‡›‘KF‹º’“ï7L°ñ/rò¸‰˜­±éÛÙqrN*,™ ³5!ìSaÉ­Ã}ÜRé:•œ|ï8u;PÉÉ¥us;PÈÉw-îKn,W™K¥ëüENþ/ÇŠCœöKFñýÝ“zÁ’iâȨLdòe•*Läï{@|À¢Ý&}íEߪóð µ2‘É -Lä‹jüˆ›ú6•‰|wþ˜L§ÂD¾_i-U¨2‘Kë&bV™È×¼oålz \™È4ò/&ò¼Ä»Ð´•‰\Z7O úøÎî+´c4N*úøzrRiÇd]Tôñ¥¬ í3^ úø¶* í¸áÄèùB;ÆXeEÇÝys¾)Û§ÒŽiÍWôñuÂnåôñ­iwëâ…>^—øR⯺Ñ?âæ*³¢ïoojèŠ;0Ç%ÞTë4t%Û·L£U§*…VôqùvãTôñõÄlws ¼)Û§ÒŽ¶W™»Õùùý*´c´¨w§¡ëƦ­èã{Ó(µÉ¨´cœ÷Ñá˜xóÉ@œVÝP«n¼Šÿˆ)}¡¯Ök²ŠÓÐM5ªèãû”™jèæ=¯ÜMîÀ‹vL;nAœöE;^$ž ¨•;°xR•vŒß¾ ÏêE;$NCw»˜é´ÉxÑŽiÕ•ÛëB­ÒŽÑ¶¹†¢¬¶Éx)èã;ȼß%DA¢F{'´¢¯°O¥£ž?ù=£µÐŽñú¾¢o›¶Ö ¢‘?´êŠŸÀÕ#ù7¹/ôñuQiÇÅA×ÇlØŠ>¾†î¾sÌ í¯6 úøN/´c¬ü_ÑÇ×1QiÇ8ò«îE;n$¾ïEwM\}åK­'˜Ä/Úñ$ñüžÑZhÇhÓVôñ=ïiîe^èãv‰› ûBßâ&¾¢ïyojöü®¨º\¨èãKQÅø }ü#¾”8œ°•vŒk¾¼¸’…^´cš¸WZG].º\¨´cîλõ!lÚŠ>¾"f•vŒÚfÂ;©3MЩ¢oE½B‰Ó†]Æ$>äMÚ1æž>l¥sç!§ô¨Ë…³Á«´cœ¸ Œ•£¼‰Š>¾'î]Äá^¦ÒŽ ~WÑÇy© •kTÐÇ÷ö£žôñæ­´c4°G­º™G=%®èãvw^œ°ñÀÓƒ¨´cX6QÑÇ?ö|Ú1)ê¨èãË**íV]Tôq_ªó›¾] ]¥ìqóô *úø¹Zf::_+.Ÿ_ÈxÑŽ±uºPC—ß«mD¥/ÿžoÏ»fˆÓªKáÃFE—Ö—úvºaÞ—¸ ŒÂ.¾bQpÅlíïžT\1% Ea_¯ó¢âŠqÑÂÓƒx¶Òó›ŽHó9*»ø^uû˜ÎwඬNM{¾×òŠçˆWñÒuç…vqÚ°Gd¾Z/î$‰Ee_×yWŒº.[§ÖËÐ-§¡kæb%Û÷4­Èz¹@‡‡ÌñíÄá:¯ÒޱóœÐJ;¦ø|vˆUÚ1.Úþ=ë# í¸ã¼“;PiǸãé:S§4’.Ò¼\ˆ|ÃÊ~ÄÕª›Z7òŠ>¾±4™£ ¯ŒÖÈib• /¢ÒŽQ]ÀË…¨´cþö2twçZÑÇwçß´cO0NÞ~ˆ÷ïv]š— ‘‹NØ¥NØõ=Ã-*í˜"f}|ÝŒÚqÃ/¢ÐŽ1VY¡Æq·~'%àù¾l™Û G‘û€²:Ưìâ»õÓÄåBaß×÷WŒ·Byèˆ »¸(ê¡VÝíÜ·BM¹…]|›ÄWŒÇÄ€›ÐŠ+&o¢°‹Ë²©™iÑÎTå %žß/mª¡›à¿\1ÏûœÔºÒuCv™…/\1-›õ@ëËD*»øÞqˤi5¨km cÛ;Жºw5Ó?â•7L­ÃÛ(¼az>|ÛDÌ |ø6‰+oç}ÓŽÛÊ0+´±Ë$®¼áP<Á89M¸À’…*o˜’¼DŽfÞDãä˜8m…_ßÞU²P…_º®«d¡¾oÿ+o˜[Ÿß³÷»ÁD…—o……£Â‡oqåTøð5ï]¹(fQyÃdÏ¿à÷¸x‰>üÏÝyc˜øð½ß»z;СÌiTÞ0®ù„ˆYWÉBÞtåTøð=q)Þ¿GŠYTÞ0©ÊeN£«d¡.‹¶ ³ßÛ$qã„VøðϋԨ¼a2^ðá«õ®6l'´ò†qÕuð¤*o˜ìù .â&ØØÉ¨¼aœ÷¡ÊÆ¡ß_çEá £qRàÃwNiå ol†nˆnQàÃ÷-pjèà%rôi.V •ø¾XQTâèð9º©k•J|™+•˜¿tÝ+¢P‰/ÊIôeîß •¸t~©¡#wàE%¦¡[&n‰â<Ÿ¿Ú$nÞ vñíIU\1‹Ó1±•®+uîCj«cb“]·•®Ûd×meœˆ÷£tÝ!]wÌsÚNÞD?&Ì[¡Æ÷Ž»½ ¼®Pã{Õ³ê].T¨1u~7QiǤ*+ú¸´n±ñ€qR™È´æ].T&ò€eS™Èãê|˜c¢2‘/ÛfZ&ò­.*9±ó`W&2Î;==PLä¨Lä»õTCG/‘‡zz0èéÁ0´P×(9*ùòã*™L£Q/®Î›*©1èéAe"³8ÜË&2;yÃTIÊDîwë¢^e&riÝÔ5ŠÊD>·¸(_£ÓÐõ¡:ÿ½†[ åM&ò}ÂŽn®´y•‰ÜiÑÚ°Ãø°  ŸÌõ}%'ßó^2cçÁSHå“NØJœŽ‰Û› ¦RŒI'ì4ŽXA*ߦQE*ã–©u®y7URc@]£Ê›¨Hå"®tÝ‚+­±Œû_Ê÷}\E*ãš_%®He\6ûSf«U·iè C- R¹¶n¼‰A™+R7,=d®He\u±ŠTFM{à5î8Ê89tL(ob@]£g©ÖáÁË4Єx‘“ó7O 9ùVV…vüKëë»3RhÇx}?ŸGØ+úø:eþ¢ƒxûn]Ì0OÌþBÿˆO%¾¨uóØ§ Ë²ÉGDN*úøž÷LÓúûáG|(q°ç§ª,DPã˜ê)qßY³£´ Këåí®ù‰‘S=%žµNé¹Ä—0‰'P¢ÒŽÉýŸôv ÐŽÑ›(èã²ßMÒ(èãvo™n,«Š>.W«®ƒeUiÇØù7ëìøPŠz´ïò9ºj}€¶JÏõÝ8™C)«AÊjš—‰j|Ÿ2ê)qßù6jüŠX6jsÒÐÍm6ì„,î 5FñpH-5t‹ô|-9D'l1Û/‹z.µê<`Ÿk›‘_4tÛ$ÀWôñÝúVC·¿ã¨¢ÒŽY¼˜í×Ðí©:¿@]ì-2Ü&½˜êí@Aß~\¥£aV.Î5òG =%žgš-sÖ÷׋‰L‹öÀÐU&2u~‘=¿Þ @ìùy“xÑuwç§êü¢Îoa]T&òÝù0®ÐºÝ;‡ü/X2ˆ·ïçûRî@!'ß'ìRî@!'ߊz)w`xR+µ0*9ùÒ6–Œá¾¿ÈÉ?â]Ü rr7ÇD%'_Á‡•¦âÄJºöó`5Ú°-•xûn®¦V]£¡«~ ]u®¡kjèÚ5ßÍ1±:øï«§Y´½‘x~\%'_NèêSu*N¬7 ÄiÕ•G”oSÉÉ÷È4;n´ïu…%ã¼(³†©8QÈÉU|+ñŸJוÂD—ûÿ,ÄI×Í®Z§ ;§9ß' ]ñ&(N»&°ë÷ï…œ|Ûó–Œk~µï)+/X2ŠÓЭ)¢…/rò5tª0Q%'ß­oeœ7Q‘ÊÅiÕÕ7 ƒÄiÃnuÂnÒuÛø°©|¹À ©©|û2먡»½‰;A®"•Ñ(=ƒZEâ@|}wF–ò&*Rùz…]‘Êt¾W¤òeU¤2]*½Êq‰›cbSa¢­¼‰]SŠö%nNØM— •µŒâ$nÜÿÄ»j}ÀÄÅ«”$ˆÃ勵Œ?ß]¡ÊZ¦cb'T«¬e\u >le-?ØúwwTÖ2Ž|.j]0Ðc'¸ÿ»]·É›¨¬eR»ÑªkjÕ5u®-úö-©¿ÀËÄûcF¾Cé¿ÝÕ†íí»¢®¬å†­êü¼£I(©»« ÛièÞt´ïât7±ÕKäŠTÞ·¸y‰¼ééÁ&m£"•ï¡‚F›¨/¤2|½‚¸¾}¾ê!‚8$ íi.R÷\Ôùm-a ¶¡˜Å&lÁ^&~/xN[˜È|Æ­I7)+•‰|/›ež]T&ò­m¶Z6’B+™,ê½áace"“'µ)ÛgosJLä¨Ldœ÷YÜ•‰Ìâí³U¶Oa"ß/•^Ldlý.ÝôÜâv•‰|O\¥˜Áy[p“žwèí@e"ÿƒâ(U™È ÅAÏW&2éùC³ó˜û÷ð°±0‘Ñ(=„-(LdÔ6…‰|¯º£ ½ÐÇwç·pÝTÚ1Î{ÂýûÉkþÔd¡q‰›°ÏIpÀO/ò¼é?âæù¼ŸüWöüigUiÇdž!î£n*ú¸t~ªÎ/j}«ÖÏ÷+­ÓMĬ¢¯{Ø£ìù¿ÐÇ?â&bVÑÇE|ªÎƒ=Þ¯@f*íµÍ  «r*úøVêvàÐíÀQØ‚‚>.#?Œ^ÑÇו֙jÕ½­þqâ®èã[×Í£ ÄiÕÝ·ÿ>q¨YiÇÜù»êÕ¹ZW¹F}|/Ú•"1ò,¸“*´cV•åv`_ß¾ÔЭªrmæ­èãËø‹vü]|Ó1±ÍTEñ^7ˆX´·Ÿ€w‘}|W„®´cný@ëÇÀ2 úøb"G¡ó~—/úïfäéº£Ž‰%bÔ8+Ôø'Bžj g\>Ïwÿ= Ô˜¾=_Pã¸ÄEì"ŸgRëK‰ß‰lyûùï#2¨SšyJœOÐÐEûo›6+ÔøGÛäjè€b–jÌß¾¿ÞdSÌ*x;WL·¬ìâ¸&.Å}\Vvñ½êR\ ga_é÷ù˜d¡|±‹¯¡3î@vqi½¥Ùq,” ïç_ìâqÁXùüÕww Ÿ¶Uë÷âj×¢íYuý»M›Oo¦õÞáÛÍÛ|àí@>])«þ½dD¨1Ù6Y¡ÆwçMe¡,PãÒyÞÏ 5¾çýý¨Äiè Ô8 Ôø yå3ŽŸ¬:5Îg&¬ºÙŒ¦Ä‡j}ÂÈOñØ'Ÿ¹I¼\ˆ¯:oÞ'A³@ùÛ­º%*g…—ίº @œ†n ÚEV¨ñ}Hm5t;a¿ï) Äièö4Ëf/jý˜ÖËcÞûŒ;a¶Ì¡wÔ²ƒ<cgmSyÇĿ»&ù?ãùž›/Þp#ñö}äãÖ H×ÉxÄí$ÿgÅ £x|d˜ìý,ôà2tÑ•ø Ö§_ß ³0ù6q ó5{ŸÄ!>ŸŒ#ŸÄ»_oIJƒé€~у¯¡Ëmm˜¸&È}o“ÑÔªkߟgTB}{ß½‰ FEý¢·K| ìЃÛ=ï] ]70L|>+=øž÷®6ìö#.(¥YèÁEUvµaûÎÇt~ÐÐ 5t£Á²ÝLÜ ¡+–zÐ)ñù¬XaTã|7*V¿}ÒÐM¥ë&S‘“މ7Ä}»ºy¾‡û*V‡nÑ »”®¬pV¬ðFññÝŽ5Uç7u^Y·A~Ũ³ƒϯ×÷YÁ,ÞaÑîaŽÈ†Ÿ·øR­oP¦ÔgVzð-~L¤4N²1é:YéÁ¥õa–ÍHi©JH×ÉPñùJ¾Bù˜¸M¥_ßžOûשּׁôàkÇU`0-›Jλõ¥Ä7µnâ6 ç3Œ+”~Ÿióf¥_‹¶ƒÿÁ΃M[€Á¨*_ôàñ#žù/²ƒÑ¯ôà{ÕÕøü!qð"+0˜BÜ•\Z­™ð˜7ÿoV¹• ü“{• Ì­OËÊæÖ!fU¹À8òPÛ'³+e °T\àÌÞI|(qˆ”¦©í“• ·¸9"sÐÐ0#? Ü—¦Vg&€ÀRq³r¯3Nq3X• L×y/.ð3R¹À,ž_“Ä2§Zu³ƒº¨‰84q“6ì\FÏÏ ËÆTþϾc•• ´lV‚®[‚žIñùÂÆ;q3—ZukSç•u±áj£pé[.p™¸m'rwè¼r =¸v~)ñï ôü ü]ü@âD*w b…‹¸xøyhÃÞî@âš/Ùû÷ÄöI¨Õ™ÍÔêÌJ¾²> 0 ³ö@œ¶=]µþ=·0ÛclÚFáý FuÑà5n¶PC4t‘"ÔYèÁw¸¯…‰]Tzpé¼ 66rZ˜°O º|ÌÄUwàZ´·;Ð'Š¿˜Õ?âjÕ%ÜÇ5SÛ'[Òª«·Øùk¾©U×À“ªÀ`\uíûóùlMÌÖhÕÝ~BàÄQºN3Ùûù=øxWC×áb¥ƒÑ<(ôàë1oV`0n™ÁÆ Æýµ}ò/`0ˆÃu^&I¬ïUV²©ÛJ¾ÌÂ6ºjý;R9_\`ù±aâÆ1ªr>ðíæ5n¶ ÖESî@ƒ×¸Ùæ¡Ê¾GÞp³pË¢&£µ-0ÌšJ×yq/eµ=+x\C·†j}~÷"+˜[‡ÛfJ÷gÛà¿7•®Óà1o¬0ï¸ yÔÍ<æÍySa…³mˆ5å´ê\Cwj3 VøŽ]T¬0Žüí”wà5ÝT¬0ÝÙ0ò+œ@`Y±Â¤ë*VøZ6]eï¬p+­ 8NvxÌ›+Lʪb…KçÍÅJÁ ß§LÁ SyÛ$¬p*¬pöè$^tÝ qذ+Ìß¾©uú¨XáËê–=ièÒlØžpÂvÈž“Z7wR+üÏݺ9&zƒ4ì‚&0P¬ðõ6+V˜Î¸Š¾·L3ÇDÅ ß«®-£.Ü„öfމVø'Ì[±Âøí·ÓpUþO…ÎN— +L—J’ÿ+V˜;¿I\­ºAºn„™weW— +|Û6} %N«N% UzðeV`0Îû'´«d¡NÉBŒËf‚ZÁ8ïPê3+05íü^›7 0˜ÏwJªÀ`<&(Y¨«d¡B¾ Y€Áø^¦ÐƒËŽ[Ưôà{ÕíǨÊM«Î<æÍJ¾n}›µJ.â&E­ÒƒûÝù­:9¥ýEô]ü@&s7y³Ðƒï7¡Œõ¡ ûö@|}¼T`0ª‹aÞ ¦ÎWzðu©TÁ4t•\ZïJ#+0øìüú~Æg«ÖaÃ`0>-ÀË¡žŒøþú> 0̓J¾²} 0:Uzpi]0²Òƒï‘ÏÇt>á˜ê-ðHZuÙ•x¹j¾[7¹F#ièÔ[à¥>ó &ñÛi¸mÚaÀ9èra¨·À…|^*0ø ø¢oߪuÚ°] ]ÿ^ý> 0˜·L‡ö ¦U¥ò/`0ˆBe³8C ”Ê Æ-3À®«À`:ß`ȲƒÉž¯ôàŸú6YÁ¸eji kâLi äM`pÃzÒ11Õ à€ï[§ «ž ò&†zzP¸ÀwÐi,«,\à²h—‰5AUª\£Â¾sÆ2±ÊA— • L‘ÒA¹Fc›X娒:¶ }.p1Ìj¥P2ö¦Î›J#ƒr*;O¹FCå8‡zzP¹ÀE|©ÖiÕ5ªôàkÍW`0ùïó+­¿€Á òù˜Xe…_GäT¥&T ÍÊ&mSá×®›a¡gÀ†­¼aš÷Äͪ{Á‡÷%¾„E=ér¡ò†éŒ›Õiøñe*o¿=aÃþÅñNâjèr~ßq•JŒË¦òîo?"äU¨ÄeÍ7s¥U©ÄW€½P‰y¿7ºfNØùÎHú_êÛïZ^×뼩. •¸´ÞìùÛi¸ƒŠJœóÍø/«n‘8$T*1N\‡;èJ%^´eé:UY¨²‹¯ ôŠ+Æy`×U\1nXdÅÿƒâû{¨sp@Î v]Å£²*Níi§Ú°ôraÎau©'zï¸i.R+»øù©NØWZW̯©J—¦U•…*»øÖ´åÖa`ë`×U\1NÜíMD^†Ù2I#±‹ÿˆïI¡±‹Ä›ïpÆí2t4ï›6ì^˜®ï+®WÝ¡¡;&Ë«²‹‹x3ÚæI|{¬m¤e\ñ/âàMLåMüÅ.þçÏæ„-ìâ»DÌRÞDaß5Ü–áde_gÜ WŒßôífÃvq¿B+̪[Thô…+ÆÖ¡ìaÅãÐÅünU\1jÚÊ..­«U—°aW†O7A§E©Jë ñù=äµÒ »ø6 —JUZ Œ“Š+¦ÈÉj¯«¸büöFCW½ Z´ôz©T¥Ê.þç?âj£²‹¯S¦âŠƒ:ßá1ïRÞDe_ÆIÅÏAâð6°àŠñÙEe÷»õ#â6‹¼‰¥R•*»øò¤*®u¥*U\1.›1¿ßˆU\1·‘“®˜¾¼‰‚+FOjÑÇŠ+&ãdÑÇ‚+F“x‘7Qpżê&'W‰Ó;襼‰EuJ+®Gž¼‰¥ÞAvqYuË„:+»8¯5¿Œ[ÙÅ×úR*»ø^óêáâ²HWŒ–ê”.•ª´6¾ÔÅ Sߦ¢/G성ëΛuö#nªßzøP˜ÈXŒë­2‘É$.LäÛª<êáÃy_Aüˆ›§…•‰|¹ÿ•‰L؉‰œ•‰Œ«Ž˜ …‰ü‹x#qµa©ªRa"c¹ÊDþç7¼ ù.4Z™È¸lz|U&2Y•§Ã [˜Èüí·7ÑîyïæUfe"_™…‰Ìk¾ƒqrêiúöAÇD}ø@k~ÐÐ óÜæ Zuc óà (&rV&ò9©Ld²ë*ù²* ™ç}6ïJ¼ ݹħ°çÏ„G^…‰üoRˆCä¤2‘QYÕ+ˆ«óË*ùÞïÅ›@Óhïá¾ÂDæ#rѪSϨϢ¡Û†jT™È÷²ÙjÃn:&¶)ƒV˜È÷SâSË-Ñ·ßÞÄõñb"/§ {‰;Ï÷ÿ(o⺣V]Ih:·ø4Úæ€[aɸêÎ÷—J­Â’ßßžÿ¿¿z*øgÍ?• üvÀÄÄsñ Þšï$>ŒøØ þkµ?â“:?UçüR#¿‰w%>IüñMߪó{¸Z6绢~*PÄ*‰=ñ4%>H|+ñâaV]L\eç¡x¢¸™÷J™»ÅÕŽ{Ünq5tZïjÞ{#q³êâóO õ탾}¨o´l¦úöIß>»§e3Õ²Y ¨c«EKê"¶º˦b‰þWÛ_Å"fO>æÛ3`ÙäûìñIâˈ'}»: +…æofâ’Î÷lªó Ö|ªý^+E|(qúö¡¾}PëC<©‹Tê"I]¤RIê"§êÌšƒ&NÅ*©‹ZM‹ÅiÕ-Õú$®– í÷±ªdœŒ£Z§73qµ4P7ŠºÖàù_ÿ;Êö~˜J¶Ì Õz‚¢®…oX¼‘¸ê|ÒÈ+Ûf6yeÛLŠ]LåŒÌNC×›$®:OÚf³eæ Ö•+T •Ü‹v¨U7AÓN¥ëjA‘"®:?iË(Ëj’e5—qF&ùqµ’…:'ùqs«ÎZ´Ê¶™‡VÝ1­¯Z_JÓ.Ò´KÙ6Õ'ø#N|“¸úv óÖWý,>H|Še³(J¼”¦]äE.eY- û,åE.ò"—2Ì©Ê×r'Ãl©K¥EQâ¥Te}F}‹+]·HY-³Zd×­åZ§‘W·B‹ü¸¥bV¯©·¸i}“'µ'ßêy“²ÚÑ•ø ñ¥Äaâ¶ yíì$>”8l™­rN6¹[݀«y§õVWZ»Ã÷×Û³ïâd×me×mRV[]im ymòÚd˜måÃnºÂÞ*afoд{«UGWZ[Ŭ6麭bV›\à­.Ô6]¨men ymeÖw-—øy¦_$¾•8ŒüQùu‡õQšö¦=*Yèd’xSâ4tÊ,<¾]iÚCþûéF]œ¶ÍQªòÐå®u:¥*©Ê£ìºC¹…G9¡‡nÿR•‡ÂûG…÷麣tÝ!]wŽúöCßn”U<àÃÆc|ØÏ_5ŸJ|ƒ¸QVAÉÀŸ†Ÿ$¾8¸ÀŸÔÐUùùa)qºTóÞhÞQ”*:žNC×UëZï®õEâjè­ù¡&nÒÈ«òóW´h§Z´p3e‡_Ôù¥&nÑÄ-5q‹¾}©‘_´e–š÷M‹v+eµIYm5ï‡Z?JÛù£†.•"Ì5nPü燮Ä'‰›5`ÓF˜;©ˆ$qãþG$ ]SCGŠ:š:u~~PßуPùóAùóJÏ)êèªõA«n¨Ö!ß&T|P{¨ öˆE«n©‰#]J×éºØjè6}û6Ú†òç??¤§‰;jÃê¼ ´F’Eæ±Ï築O%¾HÜÌ;%ÿ‡JþÿüÕ&qÕzRëÊ$NÒ´©lÚlÔysÙiÞ{*ñNâC‰Ó¼+U™†n¨ÎZ´Ê$ÎA#?ÕÈ“ES )Ꜫóp'õùA ™Ä©Lâú¾á'u!þzÒð]œô|*›6ɦMuLл‰ÏêÛé”IuÊä¦U·•²¢C*::¤RRõiÈ=ïî"{¾{îß?$næ½A„<Ô‹•EL­‡j=¨u·iä4“$öù«Eâ[‰ÓÄ)o¢‘7ÑÔÙ(ì£ÞË|þŠ:ßÕª£¶)o¢AŠÚçÕyÈ»øü`ÔEÔyuÂ6rFšIÛøüÕù®.š:aÛ¤¡SA§F¾LS¡¶©õ­&Žu;ªõCó®ìTeWöNª²+{¾S裛¼‹èwÝ\çE'UÙUä¤Sˆ»«w‡·ñ×$OŸJ|‘øVâ *»r:ŨûPóNö¼zjôÔ(º2Èé­Pt£î¤múRß¾hä•²ê›æ]Y•ôÜ&†².™ÃäþŠÄMfã築«Öé”Ó‰SçÕ¼Ä<Ô£äI uH Z6CRôè#Ô£˜¤ç§ÒóÒ6b*›–ÞMÄT6í$›v*›v’M«ž]Ĥ¸zzò.B%ÿÇ$xn5ò›F^Z'<-Œ©.•ùqK9b‹.ÐUv¬‹v©ðþ¢Cj)mSS‘ÿ×ÿþ”ÿóƒ9&^–Ò6‹´JEŽu¨u“ž”ÉˤçÅ&‹z«ë<Êæ­ÌBJÇ •O›œÐ­œÐ Ib±•]G ±±Mö~PBllóÐ)6f[…:)£5TFklò"Kaú·"ˆƒªT­A)©±Ýš'³ð¨€Û¡×Q÷2‡ü¸£±CŽ˜JËŒCF©JŒŒC¾ÌQzþž¯õiiÙ(“GY•5ñ:&Ž q×ÔÄ[\Ê-̲>>?t%~@<ÄÈþª‘ø2­ÃUæçõíðÀ-UÒ| Ô™ÏæÛÇ$ñmZŸ4tÆÏgѼ›jIÅ6SUËÌ€¤ÐÏBÏgÀòÏiZ‡+쌦Ä!]çóƒYu—Œ¡ÄiÞCÍ;e¼d˜¸MRÎÉç5t‡:oœ‘LHEÎ4Ve&.È4ô篒ěï$®:ŸôíMu¾Qç»Ôys@þŠZŸjèhÑÖÛRt}Ÿêú>©naªëûL¨4’ê=é=ÕzÒzªº…Ÿµ§.‘?5IÜè:ª[˜Í<=øüuÞ<=øüÕ"q3ï)u…ýù+X´ªjb¶F#ßÕÄuúvãÃf#Û¦™»‰Ï_Á¢mJÛ´¢T~,êÏjÍà ôl[-ÚC«î¨¡#˪™¤‘ì´a»Ú°t•ùùÁØ´èn^ gj=Õ·ƒ›ê2ñóWÄ—§o7¹…Ùu~¨ÎÓÝMîARåÀÏjÙÀ­PªÛÀ¤ÛÀT·Ÿ¿ÂÖÕ²ËÄì[<ïªr`Ò]dª»È¤ÊŸÔÐ:eÿU ðŸ??„OoJ|¸ê<™#Të†C™ƒÌƒ¡ÌƒAæÁ0i9È&Z˜ƒ4íPš–ª&~~Pï4qʶ„TʶƒV¹LÌA®*º˜ƒâ6ªnaò&†Ò6ƒ´*{˜“Ô…ºO*{øñAÍ)3)بêæ„d¡Tµû>E7r’E=•Ir“U¹Õ~¯I#ÿëÊÿùA};$§ª¢–”4’*i$7ùïª Zn2J·R›ü÷½Ôš'ó`«;%ä>Jœâu[Åë6$…æQçûÚ>©ê˜å¡»*D–‡"ä*e%iUIìÅ/âfÙPÆË ŽN§ U{ñűuHI­|q'ëBåÛ¼pß—²:JÛœ×K¥ñ©í¤oW¶Í!Ûæ¨`ã!Ûæ,Õyº ¬©u¥¬jcW·hä—êüZ$îZ§·Õ¢=Ôù£&ŽÔE­“ÅâôíJÛäóžO*ñNâC‰O_Jv\*]—¤ëRéº lÝì÷LPÔ™j䳑¸ê•8œ°}UÙ'u^i›Nê¢+uÑÉëÊë›ZWÆI'mÓUØgP€}¨ý>(À>T„|¬ù¡Œ“Aö¡\¡Aö¡\¡Aò‘M‰wW'm3TÐi$,Ú¡<©AžT­(Åâ°h‡ŠÏRVC)«AŽØP®P-õ?ýW#OÎÈØJüЖ9jè­:åŒ rFæcZŸO#ñ®ÄaÕMe]”tÜÿù_ÿ{ ÿŸTë´a§Ú°“bSï“Î÷©NØI'ìjèhËL»˜ƒæýöRþ’ïât¾Ou¾ÏEWwR“bS™“̃¹Õ–Ùôí[-›Û)k^EN&E‰×c–Í"w`©@ë¢HéRÖÅ"ëb)ëb‘;PhÔ¸hí÷¥ÜEîÀj¡Ä‰w%N#ßTç;u¾«‘ï´lTädQœv©ÈÉ¢ ô5ÔÐ 8ß— ¼, ¼,xY“†NE‰E‰×RßNWZK…y麥tÝ"Ëj)Oj¡®;F|“'µ•'µIUnu¾)Ì»•/³)N»Uœv“3²•3²ÉÙ*YhSœv+_fS®ÑVÎȦð­L£M¦ÑVÚ¦f[ßâJÛìI­Ï¡Äiè¦ZuæÝK<ÝIí¥:¿¨ó*×hS®ÑVvݦ°ÏVÊjSØg+7pÓõýVQâCQ⣱C©‰'®;t­s”º8äI»8”[x”º8dœ•0sȺ8Ãì¸C 3G%ÌRgv%Nß®ü¸CÆÉQ~Ü!?îlµl6u^Åm]ë§=x‰ÇDN‚¡Ce2ÇžT<æ^&þJXþW­Ã-pEßnŒÒ ¼ÊªSó¾èÛï­HAæÈE­5ïtD–ZÜ:m™Â‹DñFFi3!¯htD6uD6È5 •ÙlZ•Ù .??˜×Ȧm͉Sç•I\ÀŒ×¥R4ÞÖ©uãG£ýÞÔù^ ‡¥óSM¸ÀŸº§o7³ ÄÈϪó‹–ÍR_´a—Ú2d]4e]4².ÚVËfcëjäIU6åM4ò&ºrú³HÜlØNþ{Wº®“®S©‰Ÿ¿‚eÓ»QÔ”šøùAµNÚ¦›WÑ ÝPC7IÜÜ>ÕI\už6l7!îè´ãºÚq”Ù}«¡;ôíjÇ ˆQÇ0©JñWþãxSâƒÄ§ß$næò*??¨o'Óh¨pßúöØJìºa²¸c$µžªõFC×ÔБa6LÞÅç¯&‰«Îwê|W­w:åˆN‹ViÚAšv(³pP¤t¨¨Ñ «r 5ò¤ç‡Òóƒ¬Ê1ÕÈSØGe´~þ*H\<2CÙuƒN™¡¢Fccëjâ6iåA²ë†I Jˆ©ÌÂIz~*=?ébeª‹Êh©‚N“tÝTQ£Iºnv5tdN¥¬(!6¦RVÒ6bªk9©u¥m&i›©|ØI>¬JÇI>¬JÇýüu^ù°“”•ÊæýüÕ&qµlèBm*]7I×Mu¡6É¢žG};ÝA/eQ/²¨—²¨)—8T.qP.q¨dàÏ_5W­ÃS£ÏK‰ƒºX*ظÈ$^ê>nÑå‚ÊdÊdŽ¥¢‹î&– u.:eVSßÞèÛ•I¼:Mœyv‹N™¥’Ö E«LâEW™*9(ùóƒjމ¥B‹Ž‰ÂØþŸÿÕ'ˆÓ²Q‘“µ©ó*r²6 Ê»X”8±T¨sÑ1±TæÃ‚R`±Í›‘ØtLl•é´)ð¢ò¨cS u«@+¥a~H%ÞH\};¥m¨$ð $ðPIà±)ëc›÷°Ÿ¿¢‰S‡åÇnjÞ)çd«õ¦+ì­/›"'{¨‘'E½•=¿ÉžßÊž§,îPYÜAYܱ•=¿éRio5q{ÕÓà¸Ê1Û‡:¯rN( ;TvlÒ´GiÚCу£¢‡”ÕQ6í!msLµÏ_u7û’Àã(«òÐúQêâ¯Tñqõí¤mŽÒ6‡Â¼GÙ´‡lÚ£ŒÒCqÚ£.ÔΠ‘Wéy‡TåQ6-e°‡Ê`Ê`RHÒCqÚ£T塨ÅYÇ´N6íQaÞCaÞ£LâC&ñQ—‰¥Zù­çRÔ”~ŸÑ´IeÌS•1OÊÞÿü0•ø"ñmÄãù:tŸB‰'´nlÚÏ_Ñ·‡úvq~8F¼ÑÄ™÷篨õ¦¾½Ñ·7õíæ½©y“8Ÿ®Ö<<âÎÇÄç?5I\u¾S燚¸1`Í›³|à6ðóƒÚ2“¶Ìt­“²šjÍ/ù¥Z_ÔúV#¿iËlµe6m™­¶Ì¦esÔš?ÔúQ‹ìù uʪ{Ò““ ¥¨ƒu(EñÝË0I#àM|~hJ|‘¸j½QëJÏĨ3”¦ ð&2Œ7ñù«Fâªó潫yï4òæ6©þüçõíàŒ¤zj”ôÔ(ÕS£¤òõŸB‰'‰«‰›4òS­ùIêb©·hä—š÷Mk^òϪõC#Të4’©ô|B„üóCSâƒÄ͆Mq~H%ÞH¼+qê¼ q'•¯Ï4Ù}Iï¤R½“úüÍ»¹‹üüÕ&qõítL¨ê÷Ÿ¿¢‘ïªó:¯ô|ZóJQӱϪóƒ:?TçIϧRÔ9iäçúï¸M&¹©Ü\Ôù¥¶Ì¢‰SÇDBx?8 sSç·êü¦Î«S†À©ÀIà€Tû’ÀŸÌÐÑë¼Tïã’*ÿgSyKj=]ë‹Ä·‡‰k¦ÂL8 8àóWć§oWaŸFaŸ¦œ‘F§Œzøù«MâjÑj}¨‘Ÿí»Ú¦y²¨õ YÔm©‘'M«÷e£°OSaŸFaŸ¦5=îKõ¸ïóW´eT؇Þ~ +5ò¤¨ÕÛÀ¤·ŸÌÐuº\(O Ñ<è@³ÊnhVÙÉžï&12‰¹ðù¡)ñNâ®õEâjäá±Ovö¡w‘©ÞE~þІNÙó„lÈ®ìyB6|ÜÕú ‘7Ïm>E­O5t“–ynóù+ê¼²¨;)jÅ›Hz•™}«5ä??¤'u¡Bܲ¸s(÷ÀKäTȆd”*dÃ篨uu8è6p¨ë¼A†ÙPêbºPo“Þ¦z˜ô60ÇP'÷_½ üüMœÒ6ƒ´ÍPqÚAþ»zÜ—ô¸/‡Rƒ<è¡ 3z—Ci›A–•z—D»HE»ÈAqÚ¡â´ƒ®ó¦ ´NÒuêqßç¯6‰›‰›§*N;ƒ:¯ìº ^>?ëb’¢ž&ùóWIâjâ’:Ÿ®ó .¦ŠLЍg•9é”™Ê(d”N=˜tHÍ®&®ÓÄ)›vRΉzšô&ôóƒúv2‰$åóWÔy➣V:?Eó®)zšêMèç¯hèTyRìbªØ=êÌ©RV&…y§ŠLŠLeÏCû]E¼@ÏežÛ|þj‘¸j)õ*3éUæçÕy:¤–ò&R+Uç)Ä­^e&=«LˆùüU’¸: 2/uL,:& &%.¥¨éUf*@L¾žUþ¯ñ#®†nм«»ÈEz~)g„u¦zÔ™ô¨3_&éQg.uH|™ÏjÞÍ»º \”š¸TyÑ1±Ô1±è˜Xê˜x=ê¼­:&èYenSl37%oSQêóWØúTâ›ÄÕ·SØGÑm’^&¦¢Û|þª“¸úvRÔ[%l¨²’ Žóù«ñ}Õmd¦w‘ŸTç)9P¡yr“A¾•A¾)ëc+EM:s+EMhžÜJQo2È·º‹Üðú>·ŠY[çóƒšwÊúPhžÏ_ÑÈ«¬BóäVz~“žßJÏor¶ ym ï«'¥Ÿ¿ ïJ|øVâ°hò&èAëçÕy:¤ŽŠY :uyÈž?*ç„ÞÃæë=ìÿ ¾I\užNÅTÊCQ#õ 5 ÉôùA­:ò&^ïaiè­:uÊÐ{ØÏªóõjãç€>ê"õLÚïê¢ç´yÔEê!wàõÒ•FžÜ£Â>‡Ü£Ž‰³i¿«›‘C7#GÝŒœCûý¨-shäëü÷‘o¿?§íÿ†õ@üó;Žê8(êçùõnâx'ñ_­Ê?âp÷üþ:ï81Ÿ)MÏúW?âjè}û¯vÝxùÄñ#¾ÓtvÜóûÛÀñß¾Uç ÷üºaÄ^÷Ô­Ø@¼îËv‰/1t¯„?ßY´aÞ'³h,«ç÷§…?âe€ûxšEhýÞb†Žp“ÑTëZofÕ±°ceõ$üY6¡¶ !™žTË&!·ðßǦuF¿‹CÔèI¥ç“0£ÙÌ)óz”“—øöõªægä_i’Ä'´Þ¶Iˆ]<¿?xù#^üWëS‰¶©óØ:ÏïÙûÄ«ÃôÓù¦æý•½‹w1qpÒ­›ýÞˆÝÔĽRÐVÝ+:¿žïš¶-³ßÛ¢Î+ó AÜæùó#> ó[ .Ú£– Ämž®Î¸w‘OWFi']×ÓL\§#ò•£ ŠºÓšï]};Q‰OÇýEÝժ닆N™…”OûüŽ)ù_$nt±6žßYÄájãJURFëçc”ˆ=CqD|x†R•„lxÆ4ÖÅ œô+g‘¾ìó1[†²ûž©ŽHÊ1{~Oû#>àˆ|å0i4áùù=Ûç8äÏ?SÙ´“6ì<ªõ¦Ñèöÿù½¨òqòe^×÷4t´lÖ1«n°ç¿ÿ¿âhVÏ«l.t~C„üÙJÓnx>ÿùAu~BÐi+M»!5ñùý.ò8¥{›úU%õ§óGf¯:¥—¸Š²¬~/4úGœæý¨yÝ`\jèàÝÄs”yh⎠}2È/ùØÿ/æ=¾Ÿqñ{õ¼?âTÒùªuĨXe®¡[ªó |lJœ@ŸÛµNCwÌ~Ÿp‘úùÁ ÝëQgJbãqBëþþ.²ÿ7ðÑlØIpÛ×£A:bi½Þ’8܈ÅiÄëÒn¹Ï¬ºY5í%¾Õ¼Ó¢æn"(f¯7bôíç{æÃ›ÜâtúøÝqBu,e”ÒK¥7®‘øø>qKùq‹P««ÎKü rß4û}AàåóƒQ•¿ ØR‰Ó¼ÿ=¤.ÄR¦ÑÚ4q&Jü&­]C·—Xu›Œ“mfb“u±ÍµŽFq%‰#ŠkªÖÅe´Í ™•KKµÞˆW÷Ÿ&n|OÛˆ=TëYZfÃnÚ2{«es?§B^”üÿùÁlØC¶Í_!ÔïâçÏñ]¼aöÊŒGqb*™±76ên½|Õq‚YŸ®Z'Ðç™FQ¿²­¯Î+=ÿ ÇÞâÛŒñ›Óð#N5xrñFµ—ªVè$Nõ‡~=Hÿˆwjý× àxƒÖû2âƒZ¿µÏû}ÜþûWÄÍ‹ù#>¿'o>å–[ç¢Yù‹Nú‡7|¯ªW4t G©o¯™h“ÊVQëTÖâUjƒ8½¢{=1£-s¨xÒ¯éÒãÏ_¡ø;îõíª~fËXÿQ¶j|/[u‰çcZO*š•C,Ú×mú]4Ëèù ]¿ºé?âP‡&Ú6ßNº.”® ÒuѦN«n¨‰«vÒ5ò¿º,?âTñk¨‘P å÷ƒq8"cªÎSá¨ø5¦ø#æA,¥.¨ÉŸ1•ø"q£.&Ý€Ï4n úü`&n&ø°3—j:¯Ì Ï??L%N#ßÔÈwð¤fWˆJ/O¥*'TÅøü :?¨^ø0õ¤úÁsãä•çþlœS ÕžS Ý„˜Õ\J G=¯ÂQ4t›íªušwe”Nx)þ,u}¿*7þua‹Së¡¥Tå+ÏýªVžæFì—RëfâEJ—Š”.Š”®J¼È¥nÿW£bçm)qZuêöy镽Oozþ£Èý8M\7·Eh…5šÈúX¤i×0—ELŒ¥Ò´¨ÞØóû…ñp‰/¥.HUþ^ñk|ÇÜ|5t‡Ä•QºŸö]Ymu+ô*+ö³æ_O`è¨ÞسÓ;aѾ^Pë ‰[e:mºÖÙMµÞÀß¿¾Õþ#N©J»+qÊ«Üê {Ó½ÌVÉB¿€L¸ï…¸¿†nE½)Ü·—qB÷¢‰[jäR{mÕ:(«>ôüëŵ敲Út¾·ñ¤öóàwÈü8­ºc’À÷#òõ¶:Oœö7‘ÅaâŽÒu‡ìº£òmˆÓþæ4‡E{”eõB· è¡Z3S¬ù_x jä'Øu¿ãD~ÄiÕ-â>«‘¸Ñ´gÈEݺ›8*ßæ»øwØø8XGÝŸ3HÜXÔ¯‡)ýfbœÐxnËêºDŽÇXVñ€eO„i=’Ä›‡º’¿—'üß$~þ{¿Ç“PàÿIÕzÒÐ55q­Á¼·®Ä¡ŠíÓÕÄQZõ^&ˆ˜Åï”øñß>ÔÄUûküˆOµæ'­º9Më j¥¿õ(Ep_ôùNâ‹Ä·jŠ¡ª×:ñÜàõŒ‡Z§ ¾Ñ´¿qŸº:‚Ø<æùo:Ô?~Gäç¯&‰/%ºîwFýqâ}…RÔ‘ôíéÄ Z•f¿ÓkÏ]‰ÓÈ7£ë¢.Ì\mDtš¸ñ˜¡ßÓï£<·ùŸýx§ÖÕ¢ßS#†Z´PŸ b¨E;iÞ•žÒó1Õ¼Oš÷F|ÑÄ-5ò‹íR¯z~ýˆoµê/ðzD;n•"L®Ñç¯À<cÏGbÜPâù5ß&â¨UwèÛ;уÈÇh›„zá‘&øù ßÏLÜëAÒ…ÈKc&ÕÈOeÓ[¡ÈfÖ|‰%M²ÐßÁ¾s©u¸@ì"våEÑífߦórÉ‘¦õš6‡ZuƒÖü4uã.§±¨ÿzô#n´MQ3߉õ NPÊ­F~ƒ=ŸG\.DãõŒ:ßp…šÉ5ŠF„½×[¡Iâ‹ÄUÙ}üùAu™–&Q*è¥R4æ™NÑL˜÷óW·iæJ+`Ÿ?? Õú$qõíù=12šò&Z£EÛB‰Ã†m&ÏêóWÄ2UÇD#`WëM‰ƒ#Ö†Zóƒ–ÍPßNaŸfòç£Múv“Ñ ^¤Æë™é:rš °þŠ–ÍR_`U¶µ”8!pUاmš÷­táÛJœÔÅ^fÃB6o´£:%·£5òg“¸Ùïýùþ¬òóƒYuý!¯y#öù+¸›è*jÔéŒë1”8Œ|ÏÇtþ^ñ#n&®CåæèMµ¼B=òŠÞÀ¶ùëýÕwq:&^¯´Pt]W1«>À®ë&Ÿ6^¯´®‘Æ í©ëÃØó²>Þ(mjJÄÄ‹ÐIõï|€ñßÀm‘ºå‰ÙíE^7‹CÖÇçŸï¢öùÁØuýt˜8¥¨ïG^Ÿ¿ùß1ýÿóƒ¹D‘U¼>EÜfeÏ‚ÐS¤%FRë¦t@Ð;©Ïjä¸ÿC™Äƒè‚CÝ„ŽN¬r“᯷\í_‡F~¨‘4ïJUŽ­Ÿº¾‹Oð ÇTŸßk:}~0ÆÉ˜›ÄE*r À…ý%~ü7%^-›EËf™CjìïoF>?„û ²ç_ôyê<)ê±—ù½¡óêx\yUÔÇDæîÀTöI)+/Pì÷Iìâ©.R'TÓŠi*Ä$Šì4ï&>'ìëñ};<|ˆižÓÆ$E=»Y´ôÄ,¦Ò´s ¸±ëæ ‰S/s~/Òs6%>I\mHüü`ü¸¹à”™*z0IÛÌ­:¿Á—™G<9ùüèùùVC ¾¨u£ç×¼nõÄìóW`YÝŒîü¢¤‘¥lÚEîÿR—‰ 2™c©ËÄE1ꥂ̋Lâ¥.E‰—Êî[”Ý·š: 2/eF&Ô±X=X*z°.›¶œïKÙ´‹lÚe^ãÆšp»¦‰œüõìøRßNFé2U>ô O‡Ô"VùÚÆ0[”õ±¶Z6›íe/þ¢¬Hϯcîa×t¥¢Ä‹Ž‰uÔ¢…—Èñšç«ø~`ä·ÊúØÀøü`Vݦ8í6/‘ƒž×ÅήÄéÛ/EÍËf_–oÑ6÷ùßÄAQou¸™· ón2‰wWC¯ó>?‹ú~EW‡®êPp6¥mìÙÌÈSÚÆž&ãåõïg¿o•ÅMð¢Øê:oopĶºÛðøóƒñ&6¥aï£:hÍŸ¥Z£ô¨¤‘CþûyŒ+TÈKÿsâ7ô!Uy”ILû>?˜÷×Àqs¾Ò´'msè½ÌIÕyz/s”EMO ã…£$ÖÅ1U‚¨SŸÌ–9©ÓÍå mu‰cÛœA[FÝÇý…¶ú7¶Í`Û¨w‘Ÿ¿¢§îãΤ‰›Cµ¶ÍQ§Ì‹Ëu‰›Ú¼Ÿ¿¢o_&øp© õVè~»YÎ÷£©³I×m¥ié:GiÚCó®Þ (8=×ü&ž¤mä 0–$¬³ÇĨóÊÀŸ„¶ùüÕ"qaÏ'=)ÍÇœqùÄ ñ¥Ä7‰#ž€¼~½ö¤y‡¬|½ ¥‘'zðcÂ>Ÿ¿äõÓÓyHùüp̼k~¨UIàù˜câóW æ}Óú¤e³Â´¯uòYÛL¸©^e~þо}«es¾»ÀŸ†iýЪ3nùz=ù#a¶L'Ã$N$=lüü Z‡‡Ÿ–jÖ|˜¼‹ RaLâŒFC×ÔÄúXQÌ>•ÐzWßÞiä»ÑóAØ0…Ä“0d©0dI² ¥ë'>?MD‘ýëÅãwñEC§Tå_¬³qöÉXôíKuž¸¡4m€M›±Õ~`Dª·I³L%þüŒ|^äç¯P\^>Õ¡óUƒ_Ôº™÷|ggüOõí Ê*MŒ:éacª—‰I/S½LÌâCª—‰Ÿ/ã$•žO¨Wùùa(q F§2Jr‰3MÚF¾^&ÞâªuHÛÈ4#?Œú4уÏ_åw»N1Ô>'lšàC‚-‚-sÑ·+E›6¬É9ùü)+s•™Dpûü°ªÜ&î¨o?4qG­ºC;N…>Ú'lS±‹Fî@{¶j,«¿^{~‡Œ—l&¼Ÿ ÂûŸ†_$®¾=AÛ´LóíCžêQgÒ£ÎT:ó~ÔYÖ|kjâZ~Q§‚ß}þо½©oo´êº¸LüüÕ÷tÜl]m™NËÆT¿ÿühÚ6Të£C燚w:"ÛT7Ì»©~ÿù+º©†Žh…ÞËy•©Þ„f#W¨-õík‘øV‡CJ‘û²mÚ2çî@ƒtlG Ý¡yW1+z•™ý÷qÙá ûóƒñ¤:Tûü`&®C݃ÏƺètÆuƒ£ÊÔùT­ç÷WZÙÓx=Á0ë†F ‘eWáýˆ–|‘ûhÙ@®Ñç³ã:Ü€~0ÖEï`õn¬ ÿeïKµšöõ"•F~ТUá¾9¥ÙU¼®Ãöçs¾ž”¶KÜ\mt¸ÂÎnžYe‡+ì|Q AQ÷EËf53ïð 5ûRû}ÑÄ©h!1??¤§5¿ÕªÛN™-²÷³°¬úQ?Ôù3ÌÄIâKµþýq_u>(ÔùB9‰ƒ:ž©ÄuÞX•¯§Ä—¸ºt@¿x‘(>H\};ù°#Ô·Ó}ÜP>쀵*N; —8­2d¸åPaÞAa^õ ;ÿbZþˆ3ïæ}=£$ž$n­ª¤æjè òaÇ ¡SQâûr¨ÛÀ1hÙ˜²HŸ¿¢oWÖÅ_8Ðqs‰<àÁKªgÔ9(N«@Ÿùz‰<.qµaÉ ÇÄm]ç 儊ÓNu7ŸFâFÏφnªCjÆâÊ‹ü‹&ú#n¢Føï9ÍÛÀ$Rg¾ÞWÃ~Ÿ”å5›9¤^¯¥–Íìf¿OJÓš¦¶O¾^Kß­Õú¤Ö]7IÏO•¶1É“z½ƒ¦‰#]7§úvò¤æ4у är.µßÉ“šJÓNºÎ›Kí¸ùÜFUNäTz~Ò}œâ„æÜ´ßÕ11“ó¨ {hâŽR«œ*V¹ Fk.l\tL,Sd5¼—É×ò$ñNâfÞWÀ¢]Ê›XÀƒÎû ùç¿ÛqX6K]i½X¦Wë*ظèJëõ¶Å'uÞ¨‹å¬ó¯·å æÁë:¶N#¯¼‰5hä‡ê<×P#OÞÄRÞÄ"obM)]t·¦R³“¸Ú°P¨äóƒZuAKõú>éõ}®¥:ÈÅÏK‰ÓÄ©Œ—µ;‰«ÎC••\ÛfëÐ~?JY‘'µ sáóW¯[¦ŒyÒëûT¯ï?õGõù!•ø Ö®Û”²²Õ »)Z¸ëÑ;Hî ·!¸å&?n§ÉdÞP üóƒ16°[°›NØ­’F^®Î«xݦxÝ65^>èÛTÓÊþ÷Ÿªu°i·JYÙP`6_… ‰ƒ®Û*eeß>ÕÈS¼n«x݆³ŸÔª›ôíõ„¥ýN'ìV·›NؽԎ[ô톗›^iíµTëôíÛÜImr97T×ùü`bÔ{ojÝduîw±´?âÇdï¿*CÜâÆ¦=€ÞË£NØC‘Òót%´:þjSëFÏ(,œ¯ŠÄéÛUºÎ¡×¸GÝBåQÙ>'‰›„™Cy ózw ($©`Ežfôü¡W7$›ƒTïâóƒ‰UÊöy˜$æÁQæÁéðìâ 9yUŸ:?R‰7ïJ|’¸RÕËÿy©t”ÿ~È?*ŸöÌþ]Q«ry&ä×õ6ð,H„~áÉéÛ)YHAÌó1¿†N%Äþ…:ÿ#¾MRèÙôíêÅÊÙ4q†±’„PÏBÅéÛÕ‹•ˆ–Uë÷ôÆÝú®?€øÎ߯I$u¾„(>Ÿø#~]ß$~]Üâ½ ˆßC·û%®†®˜0ÿŒK¼ ]'ñkèr^­—ÐŽ|Òª+7F¾Py·~ ]}{1 îeSÂ3 ;O«.Õª+Aœ®o/÷'¸eŠ•öÏÕz1̰õFöûD§y/æ[ŸfÙóíŸ}‰ï:£ ~`Ç•¨N\±þîesG²ÓÈñž÷[êØú=tÙ.ñi¾½Ä–î‘/Vå?Øú©óóG¼Øž¸ã ]±=ÿY$~Ý?×·Û“[°en£”õ  {¥±QüÀ·Oµa‹éz·^"f,~ ]+âê˜(î?q‰O%¾êôþˆ—UG‹vÒЕ¸®ùÛ¼nE\ ]1¯Û¥.ŠEAâ×Ðż”U±¨¹õuOûµh‹Ý#_ìî¸Z/µ>‚¬‹bßß^ rùM'ìVCw[çqk›ÕCM[ÌöÒú6z¾˜í·iT[fñC'ìQ'ì¡c¢\úáÄÝVœ[|ªÖ‘%$ùM\¹3¼ÔE·Q•“tÝR'ì h})ãdû_¹8qå âz­Ó—qÿ{yøÐ¯‘W*Ãà^6[°õ âÚ2åÖÜÀ7¸Ã>n€êbÃû¸J=À#r“®ÛÛ‘›†î(“øØ´'uqhèŽy•Y ·®;jèno¢œïÅ›ào¿3ÇϷǬºÊo¸î&†ò&*¿¡Ý­›‡ƒ¼‰ v ‹Ô v¸Ìƒ vø;ñºB|øwA|ÈÞ¯\š¸Ê…¸”UáBàµNåB”ÎOÕúú~µQ¸¿|;œ°C=£®X‰k¿¬·ž¯Ê›(X‰{¿4ÆÉÈ×Å׸ynS©wçoo¢=$^¼‰ër¡â*°õFCWn(n3'£™­£-7ŽØ o¢Â2ȶôŒºÂ2PUÒÝÄèÆ$t]ñ&ÅWæþˆoÕ:mØêM@ÒÈ gÔ•ô±hÇ :&Ô3ê1hÕ `¯<Ë“ªã&Ó\¤®Iv©c¢Ôh½ÕÅ2/•¥*­e캂0Ì«TÈÚ¦ràÚgµT²Ð¢ð~¥âÐQx¿P Ѫ\›,«úô€vÜmÏÿ[ôú¸²ç 1¯R!KÙóx²ç+ñþöúô€Nº(dEÞ°Þ U²"©ÊJV¼Z¯dEÚ°û¶çïT¥ý˜Œ— füç7Šz?Pz?&v±‰¹°ãw y IŠºb!‰Cøc”xd™8õô`ÇùžG]q“dUî/r+{~'¸Bû¶ç;©Ê}Ûóÿº,?âS\ií]WY™dUpæhÝÍ\¬l²ç+QsÒ²i´êÔí@ånÞV1vƒLæÝ¶jýÀ~ïP±×s›Jê¤ò»CNéV™+Ïó^óõév~}w*Ï“ÅÁßÊžßb{¨ [nîCj˜8ígµÕӃ½ ò]žŠдåv€ü¸MöüVÉBYzï¸ÙUëƒZWC7áq_¥”âÄMˆÓV–)~û¢UW“…¨õZKõRêéA%ž^fáV·•xz/Ú¥NØu`¿oµaééAe¤bç78à…¤Š¹•¤zºØÄ\Øê!så­^—­’…öë¼}{ÿ‚¦@÷íÓ…·g«ò@ì¢b`qÙ¸? 6VŠìõú¾Rd)AîÐCæB‘E]wˆ¹p1+¬Ù»ÜåQÞDeÍ^˦âeɶ9Dp+ZLÏ+Úv°BK6í!æÂQ·B{iÚ[}ûùt:êvàP®ÑQ¹F{¥aW.i›ŠÀ½W]š÷¡\£ÊÆÅ‘'‚Ûi&rR9»E\ ]ñ&îo/Þv¾ÁÅÊiæ„­Þ{èÔÓƒÓ€jtº1N ¿·Íkèºy¡V)¿÷Ž«0ê|‡äÀŠÿÅyïP*¤r)øpÈ›8Ê›8T©ÒƒÿAñF­w‘8qèéAÅ ãš4tÃ'‡2Wø0Ù´>|·^s‚Ä[½+þ7¡ÎCÞęƇ-ìâÛ89êvàÐÓƒ³”®[dœ¨ÛH._¹XÉ·=_™ÈÜ:xG=d>ôôà(‚[á+ß¡£¼‰ÊW¾‰ÝUëp7q¶‰WðòåEVð2%NzÈ|Ž:&ÄëŽ"¸U<ómœãˆUnsé¼Òu‡VÝ1© §>•ß÷{áA£M ¶ð é.2˜ QyÐ8﹩õc¶L{`Ù4£ë*úž8΃¾rJ£ð yÃ68&*µÍÛiø?fÞûw¼lDW«xÐQyÐ8ò6låA7ÿΗ‰èK}û¦ÖˆÛTôO1툚Ä⠪²¼IÀCêö&z” ¸EáAÓzTôO~]T4óCj†™¸™ÐúlFÏÏ[f£¬Þ~Ä_&*ú2NbÓy ¸EåAC|Tô­i‹7Úfu0jùÔCâ“Z_FÛ¬ïT£ˆe|ØÊƒþ…DáAcô ò ÿ¹F~+»îÐô#>þû6bƒI\xÐÿÖvq2N¶ºCÆÉ1ŽXáA—‰;Ƈ­<è{ËuÂÒuG'åyD¿ÅÏ‚Nùˆ{™(@ç[ÛT 3éù¿¸Í?âeA‰Ÿïô Õ û½r›¯:M™ÓH¨kÕLyÒí@E5oÿžõÕLoB£p›ËÈçc:_¬þŒKÜÜI%Ô5ŠŠj¦Cªr›ï‘Ï©Z¿†®_Q£L‘’•Û|É5ŠÂm.ß^ }ZóP×(*ª2Ü¢r›ïýÞLˆ;k®ÑÝú6G·ÕŒ«®Ó†íjÃvÚ°Ý\¬TnóúH“kÙiÃÖ—È4tkÕÌz~¼õ?âi&nÐÐhBTns»;?ÿ;÷ rÐ11Ì%rŽóÝ ¯¨füö 7¡ÕŒ‹v¾àÃ?âJ×ÝVÿæMór!*·¹tÞ\çns9¤ÖcZ_󾚇°O!2ó†]F~™w%2ǵê–ñ" ‘¹Ýß…NËf'¬ùÛžï´ÍþÎÆÜ&Ä]ˆÌŲÚ&ìS‰Ì¥óÆ‹Lº(¬å´lYGéùC†™)LyhÇ­Zÿþ<šyz¼œóé¸QÀË÷·WÖ2}{£d¡ÂZ¦GÜÑ€¡Í&ŠO¢†ZTðr7¹ 2Ga-c°±ÁÓƒhaÒ6^àå¼ÄENi4Jj†z-¿g÷Ee-ÓWÀË·]WYË5ú ¼ü#>E좂—¯ÀK3 µ¨àåu-ÚâÐ~/àåo0~Ä'UÁË÷²1™£‘;ÐL™Ó(DæKìÿˆo3òí{цPDæ¨Dæ{ÞM™Ó(DæVÄ'Õà!s4S˜(*‘ù:&š)s­“®¢hCT"ó½aGš‘ß+‰ESî@%2ß«nLq \‰Ì—/£ˆÌQ‰Ì÷!5MŠZ›`Ó6å´IÇÄTÇÄ$]7,*‘ù^6S¼…‰¢-5t‹6l‰û“X‰Ì÷1±L&s!2=¿”®[‹:¿ÍÈ¯ïø¹hæ!sT"ó=q;…A^‰Ì¥ue×m²ë”;Ð6äY5å´/M% µ7#•µ¼°õ^ê¸IŒ¬àå{Ñže 3 ï·wÁ£¯â¼|‹WÖrCñü®iû»€)ˆ÷ï+•µLó^ÁË?¯2£²–iÑö÷ ƒñ#ö{/_×ß~ˆCŠZe-“®«àåKÛTÖ2-Úxùî¼IQ«àå{èÂd÷u¨SÝÔ5ŠŠT¾N™n¨Q‘Ê÷ÄZT¤ri]"‹u¢ •Ñý/Hå²lZ*ñïf¢ •yÞ‚]¹©|«Ê‚T桃:¥Q‘Ê8q ³ŠT&÷¿ •«¸1Ì*Rù².ºz;P‘Ê×Y‘ÊP=/ R¹¬º!JBEE*_‘R…TŽ>hÃ5t©|}ûpœ¨Hå}û]“•PB!•£õ ºr*R¹ˆ+]7áNª"•Ñ<˜´êL]£x!•/ñÛÀ´Ìu¢"•)àV‘Ê÷Ð-ã„öõ½:ntåT¤r»;oœÐ‚T.â¦JjT¤òxé‚©|§¤*¤rtr*R™÷¤òºG~›û÷ŠT¾çý˜Kä~hë¬Hå{Ç™*©Q‘Ê·ªT— ©\ ³³ÍÈŸ×ÍÕÿê%òx jT‘ʤç+RùùŠT‡UW‘Ê4t©|¹À©L¡Ôƒ(He\6„TŽaª¤FE*_ª² •in©L§Ì€ºFQÊ¿tþ|÷"+R8b1èr¡ •yÙ@•Ô©VÔ5ŠŠTÆ-S¼‰~í8S×(*Rù2N†Ê5†®^.в¡Ë…ŠT&‹šÊQʼê¼WHåÀP‹ŠT¦»‰ÑièºIÓ”k4º±ë*Rùòa‡a¨EA*ßÖÅè[‰Ã ûB*ÓªƒºF1L•ÔP×(*Rí$®VÝø^›7*R™Å!í"•ɦ­Hå+äU‘ÊäǤòÙ8L]£(Hå;Z8T®Ñ ©|麹շ8¤–‰œ Ê5ªHep>Éâ®Pã+Ľ -*Ôø– jj|]&V¨1 ]ßC·ª¥>HÞ¬ÇäÓV¨ñµa— ïW¨q7ÚfÑSâ 5fq8ãVL%¾HÜèº 5¾ÅÓœqj|O\šTä 5¾‡N…÷­Pã…âë{ÞÅR…F+Ôø^6Êž'¨q¨1·NO‰+Ô'Ž V¨1][ß=©¥ìùØ‚Xê)qß— Ë` ¢B/ËjÕ·4t}À·÷©:¿¨ójÕuˆQ/õv B¯#²BqÙ=_¡Æ,N«î¶çÿ}8⋾ýU½Äáfd©§Äj|{©@JEÖ»€Ð¸Òu“tÝ4OÌ*Ôøž÷iàפ¡[jÃR²P…³8ØujL–ÕªoîÎ àãç¯Ö÷»‰e°Ÿ¿¢¡Soyk/²"•ïe£¼‰ŠT¾‡nO3ò›Œ“mrÖ†ØÅ:jè\*-åM¤ò_‘ʨ.Š7q¥i-•,T‘Ê·=o°±‚©Lïã*Rùr*R™:¿+­]â]äÏW¤ri}ªÖᘨHåPü;Ž*vô^¤ò½æw¨¡ ˆÓV¤2í¸ŠT¾¿]% í€ç´[½DÞÆIA*c¹"•/]·¶`“7±SÐmb' ]]W‘ÊEÜ8b»BЮÎ7ÁTŠŠT¾¢[y›’…¶ò&6½DÞʛ؄-¨HeŠÏW¤ò¥i RC©|·ÞÕ†%o¢"•qÙtÈd®HeÊ|Øt;PÊhozzP‘Êøíôô "•ÅièÔKä ´Ø‚› m•,´é%rA*ó~¤rT¤2Rôy+o¢"•/»n+obSa¢ŠTî(îE*cëäMlåM¤rÞC·º‡x]E*³8é:u7±É›Ø[ y ©{·ïFiA*³i´!rR‘ʸh7D‰÷6A§ŠT¾/©Iûý¼*?ýˆ›{A*—‘?‚ ›ž¤2†}ö¡¡;&À^‘Ê×Ĥ2ž2©|mØŠTNÿN£Ž£êU¤òeU¤2­ùCwG•9­HåûÛãFiE*ǹĮ+Hå{ÙT¤2y‘„TŽŠTæÖ!À^‘Êÿ 8G•9=ôù(oâÐCæ“Cµ>©õ%õ‹œ|ûÁÆJN¾;ÿ.` âYSÉ~ÄMNi%'ßËæEâ“Ä—È5ªää+“ù¼ý„ïâ•uv ]78ªÓ!§ôtSu¡“ KÆU×ièºZuA«°dÔu ÈX2/Út›3ÔÐ (XQ`Éxy[PaÉ8ò2™Ï0IàgB™” KÆ-3¡àä™jè&mXA+ää»Ìé™Kµ¾Áº˜¦ÖÇ!lA…%ã~_Ë(°d6 Ýæ”Yó{À­À’±¦S%'÷[ü˜vCþüÙ¦LJ!'ÿËøW«ŽžTX2‹Ó†½ý„†[¦: ÷·!?„-¨°d\62™_°dúöCCwÔª;?­’“ïUwĆÍJNþº¬°dXuYÉÉE¼ýwÄ,Ÿ§“øP­O¿Ýß¾¿:¡ù<Ç´ÏבÏ'ĪË'’Ä›jýûƒ—|B ]|7N²Â’;ÿ½šVVX2xRYÉÉ?u>æéAþENþofä³Ã·§@´äóf#üˆ/%¾¿^.ä“jÃÖ+ˆö#n¼‰|‚––Lt>í;¢%Ÿ¦V@в’qÞÛw“8+,[ïÏW£4Ÿ®t]Oøö®6l']WnZ´õB\âjèú†‘ï‚—Ï›ðG|ˆgVù¼«ýˆ7%N«nŒÿ¾ÒÊ‚T¾¬Ê¬HeTƒ†ÎxY‘Ê÷·Z¤rÑó·7A±Ê|&éº9Tçç×´¬HeTsÚ¯9Ld¬Te}“€âtL,·ÍgÑÐÕ'ÊÄIו‚G›æ½xóî¼Òuû5¿Õ†Ý ßí¿£ùlº=Ì!µièö2·¿ó&²"•±õó| qgE*³8GÄë²"•ÿ¹ö»ñ&’ÊY‘ʨëmØ#øqY‘Ê—²ªHeðã28& Ru]A*ßCW‘ÊÜyº0UR3žïA§ŒG ]ÐЙ‡ÌY‘Êûê|õ&P¼?ß R™âuY‘Êýî¼@ïeE*—oÝu}¤rV¤ò¡Ö3¿f}d¤±ë^HåkÞS­:@*ç ©L#Ÿ`W¤2]{ óM­:ò&¢©¡+Þĺ[f¿7º¶þû<+Rù^uÍÑiÃvQL;£ÓÐuQÖ8+Rù:"+R™/©Ünñ¥Ä7‰ ¤r¾Ê×¼¿_8ƒ8 ¹›È4tï NÇÄPÇÄ€¶"•ƒÄ'éºi"'©ý{ 5•7‘À\È|L€½r›KëÆ8©ÜæŸkܬ¨f‡ Sª»‰Âm¾ƒ©î&’î&*ª™Åá„­¨f:&2áZ'ÕÝDå6_§LE5㼿¹Í?âC¨Ê$o¢ šÑJò&*ª;™NYQÍ,žÐzñ&ȺÈÖ©uµaɛȦV]£U×Îg´fá6ߦQvcœd§ «î&²ƒûŸÝIÞDE5sëåö]â&ÔY¹Íq©‹¡Ž ÈtÊŠjÆE ™NYQͨmÈ›x¡šIQC¦ST3^.$d:eÎ0­C¦SVT3.Ú WØÕL/гr›‹¸ZusÃÈOu®ç{È«¢š±õE«n©¡[¤ë ŒaÒª[ßÓu2ÕÝD:ßËfÿNË„L§Ì­†n“]W¼ n½Ã]‹¬‰¯šèØ:\&¦ò&*ÐùîüQÆÉ¡UwÔª;´êÔÝDÅ>qµaÄë é]¡F™Ní1C×(Ó©’žI]´t]S™Ní÷¿’žé&´bŸ×ݺ¹›¨ØçkÇ5•éÔ Èj¶0ñºŠ}.âC‰Oøö0é:û|¼ò&*öùR••ô܃ÄiÕ¥ña öù6N*é™®ï+öù^´¹TëßßMdKµêMe:µ×:•ôŒ'oâEz¦Uï&²’žùÛ7}»:º›(¤g¼Î«Øçqu¾›{ØFÞD%=Ó½Lë4t] ]ß$®†Žî&ÚP«n$¬ùâMä!q0Nšº›(Øç«|}6u7Q±Ï÷²©wp­S±ÏW̪žÿ}“âàö©Ž‰Ù¿;¡•ôLWZû|…}*é­‹I'ìT«®x—A^IÏöit7QIϸã܈UÒó?ØyuÒ3Ïû¢U·ŽYóB•ô(žu„~ÄI\±Ï—XIÏxÊTÎÛ5ï[mØMC§2*:®5o YxÐ÷ÅJåA£eu:‰›Pg#o¢ò qÃR¦S3Ȇ¬<èëF¬ò É -<è ~—•M;ŽxÐYyÐd”ô¿ñ•q“$VyÐÿÜ7>låA_Ú¦ð Q]tò& úßP Þ¿ëùʃîØúü®i»ò&: ²dCöüN»ÈŠF»®'œ°]½›èt7Ñ ²!+5úþö4v]Ïý]ÓP4î÷ÞÀ‡­ hœ¸×:M§LoFÞܲ·EâÛ,àA§âAgåA_7à•}P¼Á–颲PVôe×uSâ5 ú_‚îø6‹J¼fáA£+TyЗ'UyÐl¬<è[Ó?ÅiÕ½ßWƒø¢Ö·9"lj›y(Ê”Š•}=î« (S4:#•}­ºÊƒ¦ [yÐ×~¯<è…­ƒ®«Tjôuÿ^AÑøíãùnQWP4®ùJ™»öû0­•}¯ºaÞÿEþ_ªuÒuª(S¥FÇ5ïSéºâ4\÷ïS=£®Ôèy‹›º…}U¿Ï©>Tô•ñRxЉ·â»+TyÐhÛ,ˆÍÕÍÄ-ˆÏe.RçOjªË…J£¾;¿Ý& º ])ÞJÁƹ!jThÔx;PhÔåˆÜÓ˜b•…FÍ#¿!jTiÔäË:§º\¨4ê{͵ê€F•FMÅ:æY$¾Õ·ÃEj¥Q“¶Y„y×c"ä•F·¸ ó:—º\¨4êëºÒ¨[]· ?.+úùH¡.*úÊî«4jùøNòÊ¥ª*-rþâLOÈ!¯œi2 tºÌ»Ê5Z”kT9Ó,ä gš—Mqî-“&M«B§oñJ^.Îô¿?ˆ÷ï¶MåL“UY¡Ó÷¼«­:}¥K½\XnKÕh­Ðé"®V]!>Ü#߇êüünVÎt 8 ]76ízg$ý/ćÅÁ¯œiºõm*gWÝ ¡/º9ˆÃ‹ÔÊ™¦‡N‹j´VÎ4e÷-z¹P8Ó˜ñ²ètåLÿƒ­C"táL£QZ ÓwåÊ™&³°B§ïE»ÔÐ-:&TU¥E5Z+gWÝ'´r¦¹õ²ê.ëb©¡£Ë…Ê™Æó.*gš¬Ê ¾7ìV'l}¹p-U£µB§Këê˜8dœ¨— ‹.Öiƶ9ý{Äl©wÐ:}§ßWÎ4.ÚÛi(‡Ô1Å÷*túÊ£®œiZó:}YÔ[].ì6låLÓW¡Ó—]W9Ó4tûÙÔºy/S¡Ó×)S9Ó´a+tºˆ›2h:})«Ê™Æ‘º0ÇD…N_v‡) T¡ÓW”¸p¦¹õz¹0.qæ­Ðéu}{ ZVèôµß_œiù„š•3k¾Á{™Ê™&E]¡Ó÷Ä5sÂètßwëw‘–ob«wÐ:}WÛêrá/èôñª,Ðé[QoÃËM5Z·ªªT¡Ó× »Õ;èÝámàVU• tºŒüq¾¿ ÓíoªõkèîW•3Aâ×е{Ãó6°B§Çýíꘘ`œlUUi“7Q9Ó8tÅ›¸;?I\¡Ó÷ù>ÍÛÀn}]âJ×-Òu+”8mXUU©@§‹ºXÃRÅ›¸G~ VfèôíˆmõzSU¥­ˆ›¼‰­ÞAWèôåËlåMTèôu^8ÓX lSU¥­¼‰M©J…3Qâ.æÁ1© tº,U£uña+o¢B§‹¸Ñu:}¥G tú.XQ9Ó[‡(ñQÞÄ!oâÅ™Fq8aÏûÖá»8y•3Mê¢B§ï‘ó„¼B§ÿ¹Åf4+túþöšª4Hä^œiyJUzq¦éÛÊe•ªtމJ£Æy§»‰B£þw3€ø® ?âÆ®+4ê;ÐzñáPÖÓŒI\iÔ—uqTU¥J£¾|™š´MlÁQü¸Cü¸£j´">UU©Ð¨Ë·wc×UõuÊT5‹oúö#.*ú^óªªÒ!âÃQü¸B£.‹¶zØú¤Ö·Ñ´Åi¸5í4wÐ:}…>*gšRRÏ„ëû™ÆËľÒ3§ˆYèôŽ{¦I©8éË,<êráÔŒ¤s‰7%Þ¿_ßWœ4¹À‡^.œ4šÄ'}oXåº\(8i¼“*8é~¹ÿ'ªrCèã…“ÆÎϺ/Äͽ̡²Hg+=€N{T‘ÕŠ“¾—Í1±ÊŠ“¾©£VݙԺZuTdµà¤|{û ']þjýÿþê©Øçÿùc<èü?Aâ Ä‹áŒâÅ>.âÈ'‰§/Ô-Þ»ÄË)ƒâ“Ä·?4qG}û¡ÖÏâ"ø?ÿë{ ÿ¿"xÀ²)8oâ­)ñNâfÍW\Ø-ÞÍÈWæÕ->Õ·OWË&Þ«ãÿŠW ‰W"Ç->ÌÈ'm™œfÇ•bôE|™‘¯ÅÎoñ=•øqµeÚ‹¶–³fqØ2MiÚZ"ùWª²V¾Å›™¸Zi·ˆ›E[kèÞâ]};í¸¦V]-z‹¯Çˆ/š÷bU²8µ¾Uë;I\µNk¾œdqÒ6])êÞaâj½1‡UW †±8)«Z4 Å'‘]-›N˦–„bqºm&®OºÅêü¡Î«eÓɶ©µ}H|´^«¬ 8™…Ci›R½âž÷R´Ådž֕U9&¨Ê¡¬‹A'l}dâ¤mÊö廸ñù˜¶¾W.âfèê›Ý[<”x¢jÙÌ;n*u1Š«¡£S¦¼¦Â‰+¯žªø2âu}ðB_ û})o¢¾0¸Å›™¸Õ‰ë¢äüñ¥:O6íRvц]JÓnŠìÇX›Üÿ­vÜn°hkNŠº=ÌÄmÚ2[‘õBú?Ê«7–·¸rÀëá-®¶L½ßºÅÕ–9´eŽš¸rRÅͲ94ï5¼âd˜e˜2ÌŽòaÏúþíQÃ} þù«q³l>µH|qˆÄÓ”x'qã|þІn(ñAâS‰¯ â&nÏ¡o?ñß'ì篾ëùsÂ~þ ¾=¬º¿‚‚?â]‰cëfè¢ÄŸ†Ÿ$nm4˜¸0faP°1T°1*Kþ_jâHÛÄVË¢G‰Cô ÒDÌ"ÁºˆÂ.Æ-“`ÏG¦Ùï Gd¤9"#µ>Ô·O7§L$)«4— ÑÀ8‰JðPá¾hÅ»ÿî¿G3x´Ißnðh4qM2mSëÛŒ|e–\âÝÜF)v\AjÜ#ßMÜ&:)ê®v£w£ç+^àW–‚¡‚ÑIÏ×ê÷(6mŒÇl™ñL_JN™¡ŒÒA«nÄTâ`ÓªhaŒFC×ÔÐѪjÕºn˜û¸ƒZW&q­#{‹OÕ:麿¢ßÅÍûRÿ=ÆVâÕîþß6æÿùAuþÐÐ3ïóyŸjÃNÚ°*Rì1Õ†d˜MåLÚ°SmXŠÓÆTÇÄ$'tšK¥˜´a§Úq“œÐ©Œ“9iâLì"æ&ñ­æ}Ó¼«W«^ÝâG<¹ÀSí¸E¦ÑRgÜz@Û¬0#¿èŒ[*ð²È^Ê—Ypû*BµØM7‹vuê¼²çW§Ö»š8Š-µß‘KmØEvÝRGäZ ¬ÖRßNû})÷myåþï:¿Õ!µ)è´Ó,› 1êØ&I,6d¼ÄVq›ÝA]lµl6éù­ÜMaŸm’FbSÜF]mÄK¥8Êž?t¾d>p©GÙóGÍûé`˜¡Z(n–Í¡es”¶9 vœº‰CöüQöü!ëâ¨ÐÇÙ›ÄÕÐáš?³ú ßēҰó1ÖE>™ žªõFâF×}þjxW¿ÐË“ÊÇ„>>u õFBùl%gÜçõí°êò9ªõ{Õ•¡;fâNØ £¨?‹ö¯—ïâ9Iu3òù+ºªu°¬>?¨¡[°æÃ¤e~þŠ:”ø¡¡;]‰Ã¢UIàŸ¿BñcÄ!93UëàŒ|~ØJœZoJ¼Së]};ädšÛÏ_MW'U©à?Eß®”UBÆKªüùl¤¬Tþü築›‰£+­ljÑ6: [nq@7pFò¯Äúïâ:o<èÏ_ÑЙ¼‹Ï_mW#O[¦a†n’øT7i⦺9¿ÐMmXz;ðÑUªu2NTò6ˆQ~0×!ä•=Ì¢í ï&fõBÑßâÍœ°½ÃÈwµeèéAªËĤËÄT—‰/$yW#?hè¦'Ó¨+Ó¨CJê‹ÈŒâ÷)sï8u™øÂ^­¥iG]§Þ¼˜E\µÞ±u³aÇ ofÑÒuÞ‹™ˆâ‹¾}©Öá:/ÇVó¾©ó&V™ƒ,ꡱq óS䓱iÒ°s’¢ž&»ïT+âS‰Ã¢&ùÅ$»Å›:R•S&y‘s™cb’®S7b/Ë-~ÔÐÁ3«„ÄéFìEä@ñ ÖUô`Ѽ«+­âWŠzA|þUºÅá÷U@ÅÉ[Ëèù‘ÒW%p§G©îe^šoqsú*|‹+ÃlÓ¹ÕÄmrJAÐÿù_±Aü÷mÒ2_u%oquÆíM­«Xå>Ôº:ã6yǼ\¨å «¸Y6‡´Í19äyÈÿë%Ìwq °“$ö*©v‹w5t´æZó‡Ö¼ºJz/“g©ÖMœ¹Â~Õ^ºÅÕ–94Ò~n³¿W×IY]gS?⿞°?âÔz¸Öá™ÕókÈëxRu_Ï÷qªoók˜÷G^¨=MMU˜y]•%‰Sa¢_÷ûø q5qjûüêEþˆÓ¼5tƒ†n¨E[ÐkÑ5t\”I-›IŸªóTœçùUUîï%¡®o¯4­ºS¼Åi’…ž×Eê qZókšÎ/ª$¶ÔÄÑkÜ×5nñz´K\)+zÿþº¦oßX LmX*Òòµa¡Î¸ ºF¡Î¸ ºF¿?-ÜToìG¼)ñAâf˼.º¯¡Ë®Ä©õTC—‹ZßJü€x3ç{´AâªóTÓé÷Ûÿý½[»ÄÕ¼ÓùÊ*€ ô„<†ê3tù€e•a†.†.Õ!•T¬#Cu¾ºkWçÓl™¤"«©©l°ê²-%Ë&»ÙqÙiÙôn†ŽŽ‰WP#qì¼Zóƒ†N2 Oþ®Â â‹ÄUç'èº\ªó‹:¿ºÇJ¡êÛí÷¥¾}ÓÄm=Hò&^iZ(v]*w ©v_¥.iÚ£&ëÓªS&©’XªS†rÌþ£Fë8¬ùöt%¾©õ#´Í«ìÕúûøqê|¨Î“'ÕêéÕIËÛnÕ:–·5k¾Q¹–ƦmäÇýU6Ä÷÷-ÓÞÚwq:a›òã¨ÚÆç‡¡ZÇÒ¾j⸴oSâ4ò*ÔI©‰OS¡Î6&n¨Î¼´¡:O±Ê¦b• R>? %Nó®ü8[T™V™Mïü¸¦Îwª²òùá. ðfbüˆÓ¢Ýªóõ–¾_5™Õ¢=tLµhé„íÑ6*F¾JÏ$‰SMæÇL\P•]‘½ž„ퟪõEâFÏwºëi6l§î=MÔ¨CÂÌÓÕ)Óé”yUÇÖéÛë!5H"¥½¾öã¤Ó!ÕU¬ò—2æÃ¬:,c®b•b•]y‘¯ŒãkѪ3ŽR‘ÿ®®âàˆu儾Š']âSu~v7—>ÁëÊîtƽj»Sëêìk©Ö©ó[už ÷Ý•8ÔÙ7-uDvªCÞRV\¾^uþ²:[‰ƒe5ÔuÞx¨„»òaÇê€t@å„R)°g¨zPÆËPôHê|v%NC—jèè€ꀦ‡ÏPqZzøðŒnœzøPi ¿ˆ/ßJtÝPnà Œ—1ŒºxUQ»ZŸªur‡º䈥Z'Oj¨Ô…AÁÆ ‚:Æwãdœ¥Äa¶Ì¤ì¾ù %>©u3t“*ÀÏ0w“B^¯Iâp;UÈkRîÁTéy“Òóf3ŠzÒ­ÐìM‰¿|ŽqõíXJÛÌþûTùus jÝœ2“’æ4vNÐusª‰«†s¿('ªõ)+/ü m™öYå$Lëõö¿‡¤ðÈÓµÎT6íë­P»Ä›']w”®;¤.”¢ždÓ.¥¨–RÔëίÇX‹õ c.ºý_a–Í"bãR·ÿ+©ue”. û¬Ö”8Mœ2Jb–º\X·y•¤‰£ä¥nÿENÖP‹–®ï_…©óouþG\Y•«FNú%®:OlÜ¥nÖ‚#r-5ï ¬Ê¥n¨jâ燮Äçwëb©cbÚïÇRë ÊÄ*a…×q‡¸Í~Lç7Å.öcæýõ2q\8*c]ì –JÓÚt…½ÕôN8 _&‰OjÝœq›žÛìö˜ÖÉžß-•8äœìf´Í_=ÄÕ·70ÌvW‹–pÒ[R»Ó¼«CjSäd«È Õ)}¶º\Ø=ÜêŒÛ ³­ûìAW—MGäžÆ®ÛN™WÖNâp ¼ÕcŸM}¶:"7QÌ~Èü#N;N¥aS}Ú¿™|ßÅéúþ÷gÔ?â´h·šwzì³Õù¾7}»r7ܶÊî{•ö½ÖüQ‹ö`çÍ=ì¡ô¼£ÜÀ¿^Šÿˆ%¾HÜÜÞ‡˜‰ê¡Ó¡·ÀG¥.œ€àà õíÈ‹TÁÆC+G=³:”‚~Ô3«“»\Jœ:¯.VNƒ¼Ê£ÞIÑÛÿç45tÈÊT×÷‡ŽÈ£nÀ].u¹ð j3•8-›züТ¥©G½H=ô"õlãÃò":¤åÿ^ ûG±ß«aÿ§Sæ¨Sæ WårB¹@²¸ã17àŸ¿‚òªhÃ築%N”R£i!´'ôóWƒÄ§j†ÎhÚø«6Ãxÿïýþ†Ð^â]M\ÿî„þöGœÐº]Máç£çã!Ø3†™w¢œ<&دª ×ÈOÕy∩ª ñÀT¾Ç¬>?¨‘'6n˜+Ÿ¿¢oŸÓL”Çùü :O,­XjÞ ŽK­ùEß¾Ô¼¯ ß¾Ôš_pÆ…:&bSçM6o,#þªhð]üª49fŸ¿]—9ã’Ä"M–Wä#Ÿ&jIÇD*g$4mš|ÚH:&Ò<ê *\™fâŠó|~J¶L65ò:o®´>EðzSAîóWƒÄÕĽ.›š8¸‹WÑùzÎK\Í{§yïÆ LâEfW¶Ã)“C-›AjÞ!^9Uë€Ku@'Ñ*S9bD·ùü F~Ò·+G,u~©‘'z]šòwŸ¿Z ç—Úqp¥õùAüþ^Q*R°yH×5t•b¶Û¸šwH‰f¼D#”v3I#шVÙÌ¥Ò築o%k¾…™8*M™T2"šIMŒF±Ê¦b• 2^¢¥y‚·T#O±Ê¦Ìªº­m3q¾]¹T÷ Z7ñºFófu~þІN2T¸ ~G2ýˆO7®Ð_å þˆ«x]£S¦)?®‘×–¸‡ ª{MùqmCì¢m»hä6S×èóW‹Zßÿ<ðù+ZuGmX:ãÚQó~hÞi†ŽœÐ®Î¸R›áâ¹Ä3Ò)ÔÙÕX°óF×G,ºr;qÀ»Š”–Ò·qÒMæCô¤ÖÕ!Õ!u!zeÕ¡4Pô¦¾¼È®ÜÀNn *›ðù+:óJ+zÔúTâÔyåÇQ݃ÏjÞ!³1úP#O'ì_¾‹“ØÕÝ'¼ŠÓvºëS© ´vhíhíÊënU݃èêìêF¬Ó)£*D§1U: ^¥òJމ¡|™)j1T°q@ú} u¥5èJk¨+­µ}âU ‘8M\#¥b¨cb4ê¼y¥ƒò.†ŠRé€P¥âU:àn]-›NËf˜k\*ðùÁ¨‹AÇÄ‹ØH­CyœÏ&Ð: <Î燡Äiêû¸±¨óê>n,Ú°*Ü÷¢UöKÜœqcѪÛjäÉ“Ê“ä £†ÞˆÅ8Æ ç{µ*ïbBx¨¢ Ÿ¿‚yWUâEÔüéüTÎȤû¸iêÛĤ3nª3Žj>ÄTjÒ°c*_f’/£JF|þŠF^e}L:ãf óí¯›¦~Ýç¯@UNåIMÊ9™Ê“štDNuDNJMœ*5qBó˜CužnĦJMœtÆÍ©æœ‘©’_u)~މ¹Ô²¡xÝ\jä7 Ê» š1Õ½Ì"E½ÌcÞXt/³sÊP͇xÕ|@ñEâ&ظ(mc©cbÑ1±TÌjQÞÅR+‹bVËÔ1 "ó~~Pˆ|Uq"…¼–Ê!§‚±TÞŢĉ¥õªQ,ò¢‚¡ VÄêàM¨‚±íw¥ç]*-•Á¾Ö0v"2ÇR‰‹"fkª-3iËÌ©ZÇΛë¼E™KyR‹<)UmãóW´hÕØ‚§ÄŸ”¶WZ±¶š÷Mó®±WIk¿«pߢ;©¥2<³úü tÝ!uq̪Û(êmXAòÏ&b¶µÛÔ) 5b‡±m6Ô)ýü `±é|ß±Uë°æ·e|þ*I¼)q°*·ò"©PI¨B%±É<ØÊ<Ød¨J#Ÿ¿¢‰k®ó4q*Rº¡ìalõÀí¯z$?â&¯r“º•J…JB* *T[y‘›Ìƒ­>lzøðª!BCG¶JŒÜ‹æ]¥¬P­ØK ù°ªXGìý½nalõÄ쯢?âªõCêB‘UÅøõ.‚ê]|~0w Àl¨Šq(q☺…qèŒ;¦V:¤Ž:¤…:Oª¡£PçQ‡ÔIpÿ 6:eŽº;t÷ª81@œ^¨ÞÍ¢$®®´ùqG9bgÒÐ)GìÐÔQš–ê]„*Xñù+š8¥*%•Ýw6­ùmÎ÷C¾Ì9jÑšw•ºð*íp·.†.дŸB‰óæcb•ù€/óùAœ°Ÿ¿š$~Œ8èù|¢)ñAâS‰/ßÿ­¬òc"sL|þоÝèù|’FÞ¤çåÓhèÌ+­¤‚ŸÔš‡‚Ÿº§oùöA#?ÔÈ¿£z?âÛˆÏħÚï1ÏÇù@¼.Ÿ©&n‘²Zªó‚žÏ;§Äiä×6ó¾©ó[u~“ªÜjèµ~Ôª;´æšw(cžaìù¤Š&u!ó~~òÏ_Á¢ ¥i©æÃç³l"ièšÑ6Ñà€s­“¯’í7Ú&zÀ·w5ïp­“ªæÃç¯hâLŠÚ篨ó#ÍÈê¼ÒópœÏjÙŒâS-ÚI;nªe3iÇMµã±š1Õª›ÖüRß¾hÞ—Z´«‘x7·hè à5cÑÐ-5t‹´!}|þŠ–ÍVËÊ"¥*—‘Ag\ãMq¡Î¸€òL“Cþù« ñ¦Ä'‰/%ó®Êed˜…ªõ¤oOÕz#qs7‘Tó!Sy ŒÔÌ®&ŽÎ8Uu!“Î8UuáóW4tC<”1ÏF×%q9ÔÈßGÙÿ´çGÜd¸%møüÐUëƒÄ§§U·B‘ }2—ZuP=/S2¹°ó[‰“¶ÙjÑnZ´æfäóW¤¬¶Úq›:ŒU™‡VÝQ«îPçùfaSá¾b³=f¿·gøR­ÃÈ«šI5²©p_ p…š) •Â}Íd°g£p_K£.<³Ê–jä!51›rBÐÍ\ë|þŠ:߆j;oN™¯q??¨ÎS´°©ha#'´©ºÑÝÌTRʼn|Õ’è$ç{Sá¾¶hÙèa6rÄÚRßNg\Sg\[¤iÕG'²mµêÈ“R'²Á•V¶­¾ŽÈfP\Ù}ûQßÙûŸ”º 7°bã篾ßÇ¥*X‘ÜÀ®"¥èn^"gˆyªŠŸ¿ oJv\7ÙûÙ¡„{våEöì0qêFŒ V|~/R?ꢛĉÏ_%tÞ¼ÒúüU§ÖÕ·“­Êeä«\ÆÕy“Ý—½Ó–1U³Cv_vdî¶LWßéy©ªm|þŠvœ2ú u¡ðWQñ#>QÚ'µ®<è>ièÔm •Ëøü`މ䳫ó½oš¸­&ªm¤ª¶ñù+0º2úÆo7yâ´ý(eÕï??¨ Kç{Wç;• ùü`¶Ì |›¡Î÷A7¡Ã¤úüÕ$qÕù Î«ó}PÂÌPQâ°ê†2FÒÐ¥º¤Î›ôût;Ô=,• ɡθAAæaÞÇå€ôÝÜEŽAËf˜cb@^åçµêØuc Õú¤ÖÕ¢ôí'ƒ‚ÌC]¤J˜Q¥Br,Z6K};$ÀçPGä #r¨#rÀðÏC‰Ó¼«|›ùó9Žêü¡Î«3nð߇ŠJיʇ¥J#ŸšŸ$¾”ø&q3q3`âþª`âôíab'ài>?EMeR>?¨¡£vª–ª¬¤*“’T&%U™”œ£žM-ZŠQϦZo´eºZ6”’:UJê„’ùª`B«ŽœÐW¡óNÊhêxšw•Ñ:uÞ”|üüu^ÐJ}~PvÒ·«ù¤ó}ªKäI¹FS…¸']ãÎýˆ öIçûTçû¤\£¹ÕªÛôíêxnÒ6û˜‘?¤mÌöÏ_Ñ·+ó`ÈdžG©‹CÇ„r_åq~¢FªŸ¯Â7 *YKY‹¬‹¥Ìƒ‹Ä·ê<ì÷•FÓ.ÀåRøøÝ燩Zÿþ"5—JÃ^Ÿ_ʺ ê:ŸÔ¢m“ÄËW-ßÔù#õê´hÕ øz¿žüW‹¶Ó†íæbeuš8`_” ·T€}ÑýûÝt°ƒŸ–Ù°”¾”i´È4ZÊ4Zðx?—Š], ↑ö8%¨â<ù*Îs-ZSœ'×¢E»Ô¹iä·Ú2ðö?Uu\tÿ¾T|~ˆY­£æýÀ!õª›â»ã7vÓúVöýÀ·oe]l(²š[™›Ìƒmà¶ùW žqÕùÀΓxÓõýNõí 7àÛÔîË ÐÃÏK‰ƒ²Úêú~7š8u}¿Û qs‘JÅyòUœ‡&Žà· }ìN§¬‹M¡­B¨…¹ *7”xýüâ€Þdl9Ùƒ´)ý÷ù+šwuûOµ}r›"êIµ}>?(eE‘“=Õ†4ï*ðò* t2ËØu›r ·zJ¼É1«½Õ–¡Ð‡ª,”›B[e÷m².¶z¥uxÿ®* }þ íQ+^…‰îÖÍЊeœ€ ó15ØóPôਠvªk”ª0Qrÿº/…‰.Xž¦†ŽžQ«ÂDù*Lt‹O%êâfâç¯À <ê€>”Ô}(÷à¨üºCùóGå×Aû}¨o§ú¨äCÉG%œ±©óJ]Ð}T­ª(•G½;”ºpTvß¡÷qGÐg‘ªT™‡’ŠP=«ÏêÛ)qB•ÃÊW9¬kÙ¨J#‡ž»ÌCÖÅQygÓ¹]wÈ89Ê8yãºZÿõjãüÿþêy =ïy~}FýG¼‘ø¯EþˆCuçY¿ Ýÿ€Öã×$ð?âpHý˱4âƒZÿõ¥ÒqÐuÏï5þˆÃŽû·,²ßÄ™w*ðä¯!¯ó篾oØK׈Ö3¨õøíJë8Tû÷¥¬iJ=¿¿ÿ#ñù§©× ßæiiæ½AŒúijÕµE­o3q nÀŸßŸYý_ñNßÞ-gýGbŸß_¬ü'uÑ—™¸¾¨õ_OØ?â´aû1×ö¼’aË È5úü`¾}Ð11”¢€T~æcZŸpùüž(õGÒuž©Öü‚'äÏï„—?â¢öü~ý#ÿ’òG|™çwXÆñE_fÞqk›-³ )ôùýfäÿŠïø~±òùA‰Ãöç÷âù?âÔù–â„ÝZWk~à ôgwõíP@þÙê”Ù yö6z~Ãkç<æ|?¤*•E¯2§?ÕqsÊÄC•ÿãÚ&‚hñ+7ð8d¼|~è¦uB6DsâP“9º¿ ò+böùaq*ÝŸF]D†,cqâE¦úö$êAÎeÄár!ÒlØHqÖƒy*Úðùaq0>nœÙ°=äÝÌŽë`ÛD7^dôN ôn¾½OÀýþ"õü'Zu~t($>~Euü§y®óE§+qbeþšxˆ¤úáK¿‹#f´›oŸD£žJ×½ˆšìò×D©qX6SMÜ\D§]fÃÎM#̆‡l¿VA?ßÁAà?hÑ{jèÈ¢þ‚Û!TÚñm©„h1‘“ÿW(ÒùO,Ñ0ó¾ÁqÔ–Ùpµ¿ßþŸÿÆÓÃlàuŸñßîÀ篖ñ˜eó žÆlØ“ÄÚP¶ÍÔú0¶Í+ ?%oâ|çB ñ¡‘8\e>±8=â~Ruž*‰=æ|ÿ/ð#>Œ8eû|{ª‘Oyu¾'ïÙLØ'ë1>.qsÊdÔúTâØyc˜e§eÓS‰ÓÄu5q»È®¾½/j} M›uµhɺÈa‚NI±‹¬và q0r¨y'ë"§9¤r’ªœÝ ݤy/WØøí“”U5Nhä'iZ9ÉÁÆ\K‰Ó†]Æ¦Í v]nµê6µ~LŒ:ÍûQûý`ëÆ8iŒ|{Œ3ÒˆYµg©ÖÁ²ja,êFx |hʪ¥q°-¦­áwëÍÄ.Åçk9‹wW×6Œ¼:"k¢úݺ:ãq­ã¤uZuêªÙðwëØÄ\à6Lð¡IâÆntHµwäÄæ]¹ÀmB˜·Í©ZßÔy¥ë}û2†Y} pû2ÇDÛ¯«µ—°õMÚf«-³iËÔ;©‹ æAÛ[};éºc̃ö>HÄÕ·“ Ü3òýI7k¾S„¼«y§y}r‚â¶>9añN­±lz@اmÀ¡#¸§ñ"{ÒÄeª²ç„Ϋû÷N.pW!îÞ@]Ô²øí¾½™-ÓɃ®UÔP¼Ãm`ïjËt°*{ªuÚïÃh›>ÀèÃ8b}ÐЩº¾¹º[W1êZPän½z‘´aÉ‹ìÓXVè¾Ô†¥uWAæ¾ B^_’áнcÉ?â&èÔé€î[-: kå@‡¸M?Ʀ­¯Ýî¡;j¿ŸMâÆt…=žTâÐù¡‚ÌãÔú[¦2ꯉÑ•8µfÇUFýµh+£þŸ ât‰<ÒäYL7ÖÅÈNâC‰O_ªó`”• WkjÞ­«õ |¨;èQ#ÙûWßNWØõá)®:ºÂÝ$N :߇:ßïCŨǠ ;B‰ƒE=T~Ý ¹új–̃A rcª‘Ÿ4òs*ñE7ùuƒ®°‡ºÂ‹´ÍjJœ¾]Y£†¢ç%nìù±!Ì;”ÿ>È<Û„÷ǦcB9àãÐȥ缺Âä¿u…=$‰ÍǬºIò©nÀ'¥ßOåþOrÿ§rÿg4ïJ\àfägµA~®qk‰>l=á”™Õì˜$;n¦1È'¥ßOÞŸ ³™Æ$žäþÏj],§yWÖŤðZŸ€´Í,FÄO%×Ïa:ßÁ œ½©ÖiÇu³š”½?»IÛ¨%î‰Ʋª…!ïe3Œ¦£SëFÓÖê“WÀmŽ¥Z‡S¦V†À‘§»‰©.Ð'¥çÕ¢˜8ò”žWëRà¢%Óhª»‰I¶M-X#¿iè¶1æ¦oßJ]lúvu;P«WÜËF'µlè½eT~Ý<ÄM–×<àˆÕ:¥8òÔÅzŒ¾pFjMê|…\6íz^_âëûù¾ÂLÜ 8 —2N½Î[*r²bSçͽvÜR‘“•ħ_$¾UçÁ«uNè„]-H\M\0ïÍܝިjêÛ;¼X=”8í¸jœL§yWO k-–{Ѫ§…«Ó¼s©´ÜÃ.eœ,ºY*ù¿Ö‹¹UåPóN+µ ¶>Á \Ó¸‹^&.•Ý·èbeMæ]”ùP+Ìeµè^¦r`pä)+•ü¿èZg©Ä‰µiÑncÖj5E\}û†õÚjÑnúöc¼‰Z+çîüQ‹ö²:êÛ)n³Ô¥Ò:›:o,êý€žß*ëc“eµUÖÇ¦ÌÆ­žlz™¸ÃLܦ°ÏV–ÕŽEâ[µš¶–/"m³)mc§Ù°›â6µú=©ÊMi[¥mlz™¸Õ­Ðnp‰\P8tTu¡–nÂyopÂneíž$n<©]- y‰/Õ:í¸nìùM—­l›= Ü·•u±ÉºØªîÁž´l¦ºIC·Ô¼/ZuËØu{ÑЩ‹•M•¶ª<°)ô±Õù¾)ïboóô`0ÌöQó~ÀºØÇXûÀ]äQÁ‡C¥ŽÊ»8”wQ+‰Ñк9ª0ÑyèÛÕÛÿCÁ‡£÷zzpÔÍÈ¡§'Í~?”xZSâƒÄÍ­P­‰vw^Õö9t;pÔÛCÉGÅç½P;*ùÿŒF­7ðŒI­«y`Û•[x(·ðL5ò“:¯©COÌŽJ8ÿ_ÎÞìH’\Ù²eå0WL“‚Ç?1Ïêtwàé+kÉ­¯”€ï ·‘ »UòÀ¦ú÷½Œfµ×¢Á«çbÑÜK]*pÛ*:°‹®L©£òù­DäÞÏw3p+÷þÞôTªÚMÜ>{Ýfoš»IŒŒªïã16l|žð®àß/ìÛ #ã8>Hý ƒaä{oƒÐ¬Þ_u‚ŸßÞhß›Ú÷FûÞÔà;õn Øã޽¸:uPÜ1ãéð¡–n|gŒÇØqñASw»‚ÓàMu<‹–Ωx@H½ ⡎§èØT3÷½:ô^êÐ=V¥ŽMÑÊoµòÀñò6¨+B*ƒ\ƒÜÛPfé ñ˜¹$ÈÅÔroïª÷AƒŸ ¾¡wã§¢¸qÀUï~ÿñ¹o†Óà?ùS¾ÃÛ÷ÈH„1?> ~õnnÜ ÚÑ{W½ƒ¡Þy""{Ìkt›˜êÊLº2Síû¤S7E†[Üß÷»zW7qîFLüAWön ±’q±¦ê}ÜXREÇÆx ß_ÑÊ+!›V^Yù|÷”Fª‡:¡Ì*>¸¼:Á¿g}Dª‡:!×èm(fß“Œ‘4D%qUò¼)£~ºMš4ìø`;æžÂg™  ?¨Àhð ‡6M™Õû«Fð®à ×¥ iEBºN¤©TŠ„\âȾÍÒA¥ÒÛ 6n´¯µÈ¡?èÔ uã& ÞÔQB½ )t›\ ¦zçªu"M1ïû+xç³Ô…%c$ ád$ÐeDînVþtyÅÿüWÇü¿ FH!U(BªWs…—¶ŠhôT6“¼FM)ä ’¢5cM)ÓÛ0|¼ÄDS y£§²©§²‘>ߺ:6— EÊÞºf+Ñ ô šRÈÿ`?ú«C;¿g2GS^£¶Àk˼u¼FÍ„6Þ_ ÛJݸj7êAƒø{(f¡h@®<'\Ý|š':|š'þà øµ?uÀE‘W|0 ýì{W*qî¾èæÓ<ñÐܘB/=Õà!Ç,zNÕ{\ ¾ÑÊ7ul¼6½©Þ;- ß¿¿ùÞ ?íû+ºqCݸA7Îï¿¿Z7®NnŸ®Ü>}ÒÜ×c.좕WŽ—ûkîÿÙ\ºEÕ22®/ºïËXR @Ç™79äÑÉíóÁÚCƒ§ØDWnŸNæ@/ua)6ÑUlâƒhpueö ÞÕSI¡Ê¡Ip¸2”CpeÆK7L팧Ü\™ñ|OŒ|ŒfEÄD1Løû«Ipsa|Ý&>(‡àÂH‘jð©–êãBQ½¿¢}Wz42£•YùFg^¹¼dq‡"çyµnì¸5b1 { r:}ðæPï“6nNÕ;]Ø©Nd¸ÅXaöøic,ueÈŽ«ÌS ô¶oƒÉöE§ÎdqǨïD%oƒ:6Ôƒ±Õ•:©[] ëLeENà§}Œ^7Ÿöm(‡§rªw~ƒ\LõÎO¨ƒ~JõOåljðôÎ+–•÷W“àFÂIK|´ÐÆ‘!6•»oRšÖTvÜ$;nšïˆÅt&?ð¥à´tSõT!oÃPðIpµï³àÆ)1AL#oƒz.(þ>—Ú÷õë#f©·ŽÄÄTIb³Àõ1•!6‹­J›dˆÍ­N¤"ÇR‰R êeB±m¼¿7‡vÑ;¯+bQBìR©J‹+œ Û,R‰?øNaÜ¥R•|ñ!–ŠM,R‰—zëÖ¤c³|5‚«SG¯ÍR­Ä<KÅ&é´Šy VÑàÕk³ Ì¥”ÒµA¾¯­®Ì^Ô»Yº"¥´”ëƒÊç£TºN‘ï¢Â¤¬EË0F5‚›ÏÏE‘ù_M­<™ÿe¾NÕiðݸ¼Š¢Àeøm¢(a¦ÔSY”ÕY*ã¥H-¬a4êZíݦ Ýû+H€/å|(R KE‹êRõG ø8àæ­+ª(õÒ©…ª<Š^ÚòlïEz]mueî÷xðq7œN¥’ÿ÷§#ü?¿Œ5±éßÊùðQ«Ý¸ñÛlrqoUb¶&åmè ¾¾oÜ64)±IÊlƒÞDÞi"b›Tâ­r6‘ÿ¨îþ')³U‰ÙG©÷Ù»ym>jµÞ‡Zy’2[ÕPvìi„Ô&ïÁ^ª÷N§­â°»hãÔK»)úG1ÀA)ÝÊߤ«jÜ| Ðém¦P> |D’X>í“Éöyµ"÷ýU#xWðïÏÅÛ°ÌÒÁWNÞµqíó64ÿÎ’ú6¨•‡`bªbÞ÷WVÞp:½¿Zßf塸m§cc‚‰ï¯èÌ›/}¼¿Ú°ï&Y(È)Íg¤‚ÓÆ 5÷AsêÊŒïI¡oÃ6vÒ¾Oµï›uÐØ;Í}ªeÔoƒz.Àé”Òtêõ^Yº¢¥+ulŠ^ÚR÷}ÓÜ·zm ”8Ã0Je£T~ w‚ÃSµÀï¯ÁÍ• ¨\Ȉ©àÔ{˜‹Œï÷= ßÅû+x¨Ã|ŠëýUÁÆ™„™ü¨D>ßš<>d˜@êû«ïž“·Á<Ñiß»:u ÍPB*õnª´2 ô cªS·€›O*¿¿Õ(Ê(¥”¥Vò.RÕÃæGÙë /‡§2 ó@&)äi*•ÞMè=…ï"\Ü™&÷þ Î|õû«$¸ê3U™IŠY^JO<Ÿ4wue¨°ñm0UBH+Ó8Zß_ÑÊ›ºÈ÷WƒàSõšUnµt›Î¼2ÿ0B¿ FH5ðUf‹TðApsaäÓ¾ MÁ©wSðòþ Î|SêA£×¦©×†ê"³M_ÔûRK1èl†U)|V8›ù°ïû« ¸¹2mÓàMø}Íaéþ¨|x'¸‘°=¨wuã:IØ®\^>ìû6˜+ÓD=ÿ(]û¿ÍyÀÍ¡íI+o>­›™ÿÑçU…ZvRº‰dïߥ²uêH=èJ=èPJœÝ‘³Oê}ªÞ'õ¾Ô±YApue­ü_)Í^tã.õ hîPÌ›Ý$ÌdßÔ»¡úÌ\©Š}Þ_M‚—}F>­K½CÑÇÛ æŸhÉjNðEðR½ƒV9•ãegcN¥˜}T–œpµtPr’ªä$?>ì{,]WÇfЕQÑÀ9èØŒ.T£/óƒ&&E/9•RJ_æMU/“sÒܧÚ÷Iû>Õ•™‹zWûN"ršãäÖ…œ«)ø†+s;ò&ÀÉ_÷ñÅßEpÈ|ø¨—¡§² °òQHS'…üã›»´ï‹\(î˵ÿ¹Tt`AYe.‹ü¨Ö9{7v‘³q…9´+àªZ¡\”í£j…òã¼?§îþænÐÜóûs)_å"[æã£¹ðP/òU®¦Ž P÷çG ¿§aç2¥ùñÝcéT$”ê¤r©¸ }÷m >aîÝèó >å[ô\ P–R>Š¼ê€«+|ÔùñÕ[:´$ß×TÏŤC;Õ©› î»!”΄ÒùñqÛMp:´¦6|(Õ·q“¾N›KÔ¨Ä,ÿøî,ÀA%^eì‹nkï}^6?>/ ð"‡›úÀkÒ^³Tl¢È_W*6Q”Žûñ}XÐëŠÜ}¥òi?¾Ðº~à©–.iéLåBþQE÷ªwx*K¥ãÖ§ÿ oaNïe©X$}¡5ÕZó£6ð|™cÜ}©Šû²€Û'«çCQ¦S™Oï%}¡5k¨S7@-¬¡V~ÐÜUžU‘„-Cý—E¶”]”O[S ž¢B¥¢BÄD©J óã+²ÇÆ-uß90UiaŤªÔàÉG]JÂÖk¢Tø¾HªÚÀüø>ìÏk³ {^nŠþ v‚7‚Õèã+²ý€›c³¡=Ueb~T&½‡ ¨m ×Í’E„þo\ØäÞßéà‹àæµÙdAoeAÓ×is+ »©^f+û¦`¢ú¸mn² ?*NsW&ðŸÀý 7Õ÷ùQþxœy%a7IØ­|Ôô}Øüãë§ßáäêÜ¥–ŽRÕGNs“%µU(so:6Û¨FŸB=6N}lJûøú)½óÀÑÚž¿úiãÿ~Iõ®Êüõ[H=w½å/„Ÿsÿ|Þ /‚o¿ÄįŸïÃÞßHýÕžïwÀÇÝÉ\Í=hî—y‰ƒ¿¼¹'ü2B±÷KH]ðaæ~ © ^ª÷ +I/ì½ÑƵfzoàjîmÂÜ/‡ðNwI/¼q}Àà»:u6®»Áo8óã1½€ÞGšÞ/SõœûPö’°Wïjé.Sõ|*‡z¬&íûüx‚NvvÕ;Íý2nqé&›ËÆC;é¾/ul. ú×<àêÊ,Zº5Tïóîä~-Ê"8½óK›"wàØ{ÑSYÍì{ÑkSêʛڦ÷K¯;_›mÞùû¼ÇàïrZ’°w9ퟪ÷EpóÒÞU³'<Ì•‰‚73÷[jÜ<AºÍ]N‹ƒOxçC)'‘´ò©V¾ÑÒµ¦àƒàêØ\ô¹òý1×ið]­üj>d\ô®à E7b"ˆÈû«Ä8÷Av¨çbL‚/Õ;¨÷G>iã¦Ú¸IƒŸêÌÏ +¿Ôà­üRWfu‚«•_Ep#aïjésî·„¥C[Ip5÷Ëþkð¡O7îSôœêRK·i鶺°;¿kV±>›^Ú­^Ú sÏO½á+ü.s?Ÿy*ó™Ôû§.¼ñ$yNî:ÿ*‚Ù¿ëêqîä9¹¿ÈÌpšûé9ù´q Fè]ûûNž“›€á ŽRNîÏ>ŸK׌Û'mÜ­µÐ©k e²©»$Çà»ÑiïNŸK×Õ©»U˜>|}—ï©<'÷רϹ#eîoVŸ7Ôk3èµ¹uºïƒ6N¹>’\y;5Á;Á§Yº æ@ÎRƒÕèfœ@ø¢Á/uê­|©+CÊÉý‰n†Óà•rróRœ+_jå LàÜjî›Þù­6n7ê]ݸM7n«§rõn<'íמPðöýÔµ§+ø ÞÍÜÛNæF@·Ýn§Æ 8 >ÌkÓbÜ<•Â:÷·Õqî †X˦à4÷T—E½¥´‘nÓTT¨ÝºÍ 7öþJüWso4÷¦ö½Ãcu>çÞi㺱 [§Á«°Îýùø ®.ì蟪wºqŸ€ƒ|oÓØ°m&Á„m—¹¿jϽƒnsÕžáû»JÜn·½u‹æ¾Œ“¹‘Û§)Õ¨Q`å¦ÂSWôÚ”Úw ¬´R¯MÑkSjß‹ö½Œ£õf?:áÊoÓH5jJ5j¤5¥µ ¶+ݦ?Ipsa;é6ý3Þð"¸7)Ó ×I5êŸñ€ƒÃ­ÇRðýÝ‚îi¤L§¨ÐM·Äp¼òÛÜÔMÇ…í*ã¥'Úfn\'¿MW/½u‚Õ;b½«Áw:uÝXt›ÞÍsÑ;ݸaB}€VÙUÎI'ÇKWÊÉÍzuö>Õ•™te¦ºï“®ÌToyNnž,<•ºJÛ¸I³.¸:6‹V^E…:©½ÔÊy¥ô*êݨFò.ºòœÜT`GH«ïn–nƒnÓ·Ñi;©ã1ƒäú*¬sÓ•ƒ¿‰Èhðã¡Á‡‰I ’ïC¹>É÷¡â2ãŽË̾…›w$œº¡’F©#Í9 nÞº‘ env6„7mŒ¦æÞhßÛPð +¯\ƒÂ:£›w~tÐmF7VäèàCÁ'ÁÕÜÉs2ºyie¼ ”;TThçdÜÚ=“­JY¤œ •Ñ:&mœÊxäú*ãe,0ĆÊxäú*ãe,*ëcPddl㯔wqSÿÑà'¥eN•–9)-sªØÄ$û}ª¬ÎIY3Œóa’€žaÎüŒIp“42)¸0UpafÜ<Ô7»á¹t9„ÔT±‰I%'S èÙàÊÌf/³ÁK{3âÆQVçT"ò¢þûgïjéÈ‚ž*:0dïO¸©ÿÎ}Wø¤¢›2&‰È›7nЩ›F5º /¸Úw‘sª}§ª©ì÷Iöû\jã ~•‚ƒý>ËÈ÷Ytê”{RáÃÍÝ÷kœò*§òÏÏMµª›˜·™~\Ø­êÛ½?¸±¤&¥eÎm<äë§r)ûý&<æ~Ò}_d÷-Uµ±(¯ò¦¤¥[v©ŠÔ8xãx¹‰ÏÞ•{ÿæ<ç®äû"|©ÜƒÕ˜»Ê«¼ù/øPpp>¬¶Ôà‹àêÊtPÈ—Ê«\N]Wsï4÷Ï„K€Ã;þúüžÔoøgeÉ\ÍÜûkóÿf<ç~ ~š;Õ„®ÙUïƒà깘t㦺q dÜM<ˆƒ_`„®µœ®ÌRƒ/0V×Ç"íâæ-Ä}¿ƒë€«§²À{°¶1…Ö¦+£¢7=áÕ»Ú8JŒ\*1ò¦=<_*yà¦=¼àF!/rï—R*ÀáV*1²ÈùPÊùp“#+_*³±È?_ª¨³H=(åŸ/R*ÕàI=(¥VÜ´‡xlTã–"¬(Ò.J¹÷‹´‹j[¨ÄEU7k"ž¢ÿÕ§ê}¼Tïta‡z.È?_èFE©7k"Ãið*y fܸ¼Šª6jªC;!ßæ&]$ º(÷ –‘qE™µŒZXTôQ*u¡(uáæl$õ (1²T=l‘nSJ·©")£<'E­Uê§‚ÖR5#µið[ÚM¯ÍV¯Í[f«ÈȦ܃­RoÎÆ«wslnÎÆ®RojÆC§Ý1Tï°ò;ÌÊï •OsßwÂ}ßiÒu6±im•[¸XR[)'»µïz+ŠM„»…|“óa÷Ppx¨·Ê-ÜÚØ*´±‰qbã¯ÛƒŽÍ˜ 2n«øû&ïÁV”P›ôžjßí» .l .l% 7Åß÷RvÑ…]êÂRlb«¢Î]àâÞª¨sSQçVÞƒMv+ʈM¡½Õ¾Shc«ÐÆÞ4÷­Îü&ibñ§æ~7tÿ~êB±eÆÀ#¼\¨Fñ@t “<ðþªCï9Ìà!»/žTK×¾»¼âijéÍÝ𼿠˜{W½w:u†÷ 0ã2Çïp‘ñ uæ!|ÿ6,/€Ï0‡vÒà§<äÏÇ3—9ó¿Íà×ó5ÏRÇfu8óKÝwp°ÇSêÌ­¼aUЧèØÔTpzi« |Ó…5Bêý½u[ ~ÓÊoÚˆ€züÁ‡p¡d\<ãûc¥HƒH#Lþ|”×E˜ø{Dt‚«Áƒ ¬‰´qP¼a<äï¯àf.l@…Z„©P ¢=|JÁið]ëFt|Wûð·Á('ð·AmذoƒÑmbÐ}©àta‡:óƒÎü0/m Ú÷©-É÷0ùuï¯ZcA¿¿¢Çjª3éyKÍ}Ñ™_jî‹ÎüRg~MX:“±èÌ/uæò1ÂÔþÇåã1x¥œ|P>KWj銞 c¿G@m`„© Œê€c¿Gl:u[©›dÜVWfÕISøþ ,©ÊÇEp|*Ýæƒrp³q”<ÌÆ%|,#R©F”ó€ÏçEBjbüÁ pŠò1RÞ†~þý!ø øT½ÓÜS¤e¾¿¢¹V¥ ÆÈ·Aí;|k#Ò$FN†"œŒ„Ô…·A]øTGüÁD pZ:¥U_e(¾ÊÈuvueÈí“&2òþªÁ}WnŸte†º2cÜh•ÄWù6¨§rÒ¾J¨ÈIWfª}Ÿ´ïÓÍö}‰šÐ÷WAp%aáSñ&ÀIÂ.ul½´Êg•Es/5÷¢¹W7ƒ‡Ä‰·a™Ç Â:¡È6ƒÈ6C‘mFnzë…ï· pšûUZÑ "5š¡„zK×T\¦Q\¦™¯˜Eƒš‘hæKñÁjÙøRpš{¨¹_e´T+%¥ÑLNi4È»ˆf¸¸£AIi|YÂSÙ ¤4š *5àtŠÖÔÜá+fñAdIW†nÍp>¼¿¢ëjðo Z£‘Ǭõm6Žið*¬ÓÉï*¬ÓIDveA÷–”bMŒN"²Ö… ÖÄè*2òA{x¼6*m£“êJHuŠM|Ò[·!a¦+!ÕɆí[=Ô·¥»¸™û¸EÙ¿n<â«1HÊ Ú@›ð6˜S7È‚¦°1FÀ…†÷ > iðð9ªø =¤•§ØÄÈ®z§•W&ðÈ p•4B¼…oƒ<¹÷ñ`Œž7–˜c¨´Aö1Ô±B…¢þ{iC¥msàÛ Ž è¡Ò2Ç­rL#ãˆ9ðmX ^7*ñX4÷e”“±èЪ´AYc §çb‰ªÌ”w1ʤiÊïêÁPÚÅ zÔT½Ó…ÝêÂ’ <” <6½ó[=•”81¶’q@ªS™À“Là©rJ'™ÀS©¾'Ó°.Ĥ¤Ðf剳ñm(Õ;­|>âÆýÁìø7ÚÅ$ zšo.Ĥ”Ô™SÁ ^í;|O*¦r°Ï7n6A(ýþj|ªÁƒ„ÍͼS©F“R¦¡„ŠÙiß»š{§¹«ÜƒIþyE8sЙ7¤ 1ɽ?‡ºïƒ6NåcdL˜³—°SE&¹>¦ŠLr}LC „“ÇàUt`iÃÛ ö})ôA8I½St`ÖPpº2Êõ1Ó)cdÌ á<ÅsÓà•ïbÁÇ.c=¡àIpslÖs_ÏP½/‚—êÔE8ùþ ö}©šÐE5¡K9^|o"_e,Š,•{°(÷`)Ýf‘n£ø*cÁ·2c©ŠÔÕèÌ7uæ)«s©jEYKå|°ZpÃùðþ ÞyÅW >Н2¹}þ`¢ü§ÀÊjîäöY† ûýZ—Y”W¹”ÛgQ^åšêµ™à»XÊí³&(fË|Í*ˆî2–ªÆý`µüq°¯e ±µ ô`-µï‹^Z•ù§æÜxÖ"!U™;ð]¼ jß©^f©Ì‡U§NÕˬMgÞPyÇÚ$¤”b¶H1[*&µ(qb©r›|VQÊkT<Ôõ _ÔûG¨ àphWgTÀ¡-¥Û¼”ŠIy*ÕàÉkT*-³(-³YQ}F)·O‘jTªà¥H5*U±Bd›Qm©Þ‹z7¯MõŽM7R¦¨ä¤”jT¤•Šˆ¥e–Ò¬j€Ÿ¶T!s‘Û§T@­¨b¥T@­( vQ}¾ï§—vª—–rJk6§û®³"Ŭ”ר( V*§ô¢úü‡'þ®Þ:ªƒ.P+Ò¬Ê0‰EUÀ…U%'ÄÕ°pœm© »¡"µTDìƒ«ó„« {k@uÀÕ܉e¥ yl*9Ù*"¶)"¶Ÿ©àõýØlE“²‡<¶òí€ÀÊñ}Øø ú\ܨ›òm¶Ê)ÝTÌ«¸:ß_}ÿzl¥œlRN¶òÛl †ê}Âà»:6ð³ø ñlåd+"² òŽ=LâăàSõOåVž¢úŒ­xNö¤•WŽ—M ±[E…ö¤¹OãêÜ‹¿ÔSIa­xÌ6pqÇ6\ܱÉõ¡¨>ƒ¨>ßµqE/­*)ÝT3òÁ ¹›¨BöVG/{­rS>íVù´DõÛÈ÷| &õ6„‚ç×·.ÿ øw¥ômÿîúx5 ®æÀ UÈû+¼aEƒ7ßH}õ}ßó1ž“| *ô6,3wȧÍÇ„uÞ_ÑÒùþþŠ–Î|†ìýU|›•ïteºš{oï >`ð½þýÏ>C–Ïx RVò1¾‹|€H<Ÿ1ÌÆIƒ_ª÷‚C;¶é}>Ÿê©¶·¡©Þ;Ì}ª×r‰ó™ê¾Oº2S½´À¶ñ643øEg~M_°q&*”O=°ò†„-Ÿ¢}/5÷¢¹×T½õ®6n˜ûèð² CX‘•T$«ï¯¾§¨e˜Ï½¿ùÁ’Ú /m(ÚÈ’UZyHˆÍ0Œï¯àØ„))Í’ÕqÀ›‚Ó¾7#&‚ÔƒPêA4a¾RšÑiãº:uænRR3('aÒ62]X\H"YÍKõR&†Zy’°1Õ©ƒè@†’°A6LµNƤgªu2íûRûÕ:K- èP:à3%&¸\ªGïæê@‡•¡t]ØRǦèØl%&6½ó[ݸý6!Ód>¼¿‚¥S<¥™ÏwÏIæÓUï“z_ªwÐjîÀg•æØ$y2¦ê}<šSš™jðð™’L“ù Ÿ)Élª÷ŠYŠL(9Éìjß;Ú®-ÔŒ¤¢»L¢»ÌjßÚ¡V~СF«ÌAÇF©t—DZ1t™À(õ6˜‡:' ^Éwâ«Ì\êÔ-º2+ÍÜ¡œ6s©[4÷¥æ„Toƒ1Bªq3+œ.lu³tE¯M©‡ºè¾—ºïEÇF©Dw™iBï¯Á§êö]Å&iÍ伿ú‡}†‚/êÝ# >3š-Ì¡m{ð6tÕûw‚šl&«3[ÐÜMVg¶„Ǫ™o¨eƒÔ…·A >ið&ó!‰-3›r}[f*¶Ì÷W´ïMí;©Fl™´òÀ–™Í|.[§¹w5wÒ¬ZWûNšUë굂—lJ³j–ù6¨ ®Œ .|pj÷}ªÞç¤ÞKõNÇf©c‰Ù–zçSr’mÑÊ+çC#çC+õ\Ptàƒl“.,ÔŒd3ßXIbËÌf#_CŠ®ÌŽÏ»È5#ÙLÍÈû«Nð¡à´t†lóýÄß›Òm:|½.?h4ÁÁ–馘÷ýÕ$øRpðÓvSròþ ÄD‘üŸT£nÒ2ß_º‡š;…uº ëô è]©F*VÞµïä·QD£ï¯hßSùFg¾¶“jÔ›øªQÍéÛ0Uï &zSs§¤‘nJ‰ß_A\¦›Râ÷WƒàêÌCÁKvóå¾ì“ê*&õ“ë\yr:}p´B •8ZSq´¾¿j°òS=V“6nN5xPÌ>È[ið”¶Ñ—‰AwøHJv¥˜õEs_âS\ÙÉéÔ•Ó©“Ó©+§S'§S/5wr:u•õA³ÙUÖGß4wóí¼üà§=6n7Õ;Í}«¹oz¨·±e%ÄCÒ’ƒ2^†Êx¤×)~Úä³ÊgEü´oƒ<Ф¼ jð@o›#ÔÆA)q~ÐÛ±”o3TDìƒÅö¼RÌ0ÈåP>«‘4÷&ˆ Þ_%Á÷`Ói˜ß%±ã¾ êÐvЊ\7G‡ ö¡Òq¥ã~°îÒ©#ŸÕèêÌp2å³ ðaÈóóƒÁ÷XºÏ4 €O‚/Õ;bÔ¿¿¢3¯Òq?|¥3Üû9(Ÿv(Ù Ålîý‹¤ŒJ×”®3–:´¤Y ¥Y ò˜ •®3H³*œ7(œ7J=Vä1J5äòÊå56$BÃ_—“T£©T£ üu9 Ýû«Að©à‹àæÐNªš¡æN>«©Ây“4«©|V>~—3Ô¾'í{˜¸ysæÿ$nÞüàæ‡3?M!sNR¦JUš¤)rÝœ@@—Se:M çM•éôAÁ;¸‘¾—Ó´äì“šÝøç'…ó¦r:MJ”šCÍýVꀫ¹z¬”nóïܨPðþÀÕ…%ŸÕ7/]Ø µÖ]Ð*'§R&§òY}PðŽ®êjáÅÍû+¨wàæ}ÔcU~ôø0G™ÌSÅ"'ð×å30¸÷'iVs«}ß´ïÛ$‰Í=á©Üê¡ÞPNûA ½/ &.•†½H³ZJ³Z¤Y­§Tïpß3p® ¹‡š{4Xy¥˜3p®0æÿö¼·¡œ–Î|sáý¼óK)f‹ò¬–òY-ʳZ*ÏjQžÕeð"8í{ë"´ñÁ¼¸Ú÷¶¾?«•êž •¦µ(Mk)½îƒ—¸p“WI¼ÄoÃRƒ¹T–×ß¹¼òƒÖ˜Vžêã>h¹´ÆEpºqª>n‘Z¸¦‰¿¯IWF©…k’”Q³òã³÷RpzmTúý¢ôû¥RÔÖj7ÚÅZ´tK-¥¨-¥®¢û^ê¾SŠÚ­1ͽ辫øµiã¶:ó<¥¼Ä$a÷¤ÞÍÜ‹n¥Èyês ž&+¢5ÎRIbõ€Ó郗츢òºRì:_³ÊR³ 8u„ÅðP/ñÛ`'гÂâEðq‚ÿk>ýßó\TB¶n Îü{ñ„ý ,¦Þ<•¥b‘äÇý€Åìƒüø|™CK·R·"Å샙öòçKU&| +K)fÄŠœ¥³ß?ì›5ÌCM¬ÈY*˜Xœ5Ôà©2±Ìǰ²&=ÔŠ¸ ¨°QÑ¿¿Z/í¢ó@Ý Ô±ïË0È©Fµ¦‚ÓÜU(³ÝwÚ˜EÌ¥³*ˆ¿+V䬢w^U&Ö&§n¬ÈGï[½ó”$V[=VT™XŠ×hÃWÈs›¯çùñ8àæµÙDd;L<îƒü¸p³ò›h‘¶ÊòÚTZ¸CÍb‘;ÍsA¬Èoƒ<%Ào•¿ÉgµUü†¯ç6úÌM±È­b‘»ÑÆ©øMº"U~·?Ø–1©­J 7é6[%ÀïAVÅ"7é6[•nr:)FèÜð-­ÜŠ5q“j´Uaã¦4­­ ‰:#tnøNhn•?¿)Mk«Xä¦üù?¨¢NsWY^›T#žž»Ôà?CŽ?põX^Z &n•¿)~«,¯MN'E(D([Å"ÿàþ¿ðöü5™ÿçWÏÉý+â7ü9¡Å@x?;ø<às¼¾Ï©O€ŸšÕ¯?ðS³úµ’àç'ZfðsVƒ§ßæ™|žøCðsîí˜û¡Y½[²~jVütfý³¦¿æ~ÂÛ9xšû©˜ýó«ø:7{¿¾>tÂÏ}ß´q§bökw(fïy ÞOÅìW;z?³_­~Î=×?÷}Ó¡=\Sï+ß³t‡þõ+ÎÁŸ:Ó?àgó¾üüyãNÍêW|\w,Ýé5úµéµ95«~õïçÊѱ95«÷fðkQ~Íýü9wÅ;I¯ï¹êÁ¯FOåIgýž­ãÐ^zÃCKׯÓqœºÓoÃwiíXùKo ­òbÃþ5ø¥7L:´—qžºKo˜‹àç“öû~¸T~õ¢3ªýq1¯WŒæ>¯k\]™SŒç!ã.¢jÔç/Öêó¡>‰ª_;Œæ¾ÎÃ5»DoÁ/+òXºÓõÁs?]¿—è%…üâ£>Õƒ‹úW£¹×u6Á—Ú¸CÿWþÀûñˆ¡ªëµ9æ~:^~-„¯ï*qT©ÁÓÒíó4ݸ}Ù2Ç™?]*|hOÿʯq¬üž·…ðún dÚ¯ðƒcsrf¿ÏÅ8à]è´'éõ¯÷ ðsXc|WÌ.6ìÞÐïð8Ý>­xÞN €ƒ˜ÈB!¿Ø°O¿M~úD~(}K—!|V'™ö_…xJéE¦}z2?>€ŸS¬cåÛ)&Þâ»÷ ›ymòòpŽ—¼´–‰ðy[{?ð%4ê‹ðûôY]TÞÿ¨Úßá§nó„sà$ü~¨ãØ\Z i•'ø+£ò€_³¢+sè6¿ÖyæÇiÜ’F}2ßû~•~áÆºM;÷ýÔmVÐÆ]®ç8´—ë£ÓÜ'b9OáïߥÌÉñýÞÄAðE½w1_½_J›ÕoGø|ÞvÀë»çädÙf}>o¤ð&DäE¹}-Ý¥vÓé¤Ü~áqeª„ú"Ó¾^›Ë/4÷}YùGï—ÚñÁ©K9!—×I¹ýZ<çà—pu&*'ûòœÀƵ[…ùQ Ûíú?îåÌ8àýö>¾?ÔI÷/zmNÆîK5j—rBa‹‹ûŸN~à§ )Ó®°N;áóVz~N±ò€_~@Zº+øshíŠ÷t‚'#ír¼Ó©]ÐaI]ߨ˜]TÞ¿Ö>àu»P¾¿»:Û¥‘N{Qyÿ:ԋʳ‹±û|ë.’î_¤U¶KŠ~À/×G|CïÝ„ó..î_‡§´]Q¡M½_ÁŸ~ ¾—Ðç/.îkð—n³hã.¿M;ághcÒà¯èMöÔmP¶QßCml³ò3àÌ+¿ÍÉþ¾UÇàçåy§+3çw's»6ôÖ]ÐùPÏ}[æßá§s(ÏÁ_q¼°—shKwûƒ°÷ùÝÍÛ. ÷Ü>8Ê÷v¹}õà¢G¯Q»4«ó­»#.$e ¸‘ø¯NKWç{¼wþÔ¬ÍåÝÙÇK»O}žŒ‘‹ ü4B/Žoô_„ß§ZxQyÿ¢€Z¿2^ÚÏSÙŸ¿ûüÀ!{QyãK{1vŸÇæ"éÆç¢?ph/’n†Ÿ Ta’nš{\ïñ1øËí“Øûù÷vÀ÷ùþƒrr1v_sOcËœ\Üï¾ï>ÎÇf^ÚžFÊô;ã%ø1©‹‹ût÷uåö¹¸¸O×o-ÝéÊ焟qý ï|¿ü6ûGL\lØ<÷ÓosÚ~EéÆ]ºÍ‘åÕ¯˜½ó'ö=øÓ#“¤×õ+3åÐm.žë_¸t§ãeÆÙû) ID^lØ¿Ú1÷+›„¤ÌIzý«µyÀ‡x¨û¥ƒôuÀÏ3?龟鸿)Ó/Ç iõé§=ù¨ßCW_·/ù~zŸÉŽ;i§ß'é€WŠ€ÚI;ýnï±ï¥^ÚK=Ç[W&"vÑNŸ y¿ÔÒ..Bé3:pJ¿KGƒßý» |RE¿KG7n_×úXº½ÅSy1BŸÊÉÅýãà`EŽK=àÞ×}­à[¤&žŒÐï›ôsaÇíïgZeðó¥% z\òý'#ôk' ü&Çsq2Bÿ7éð;ü3µäþ‘î ð+ þŽðuÇ~à%rÆåá8œNãüä`mûpè|| +rÜ®ãØœ®œð\\ÄÏׯ¥F¿(qb\JÄ<á]<•£ƒ˜8¡ÙÁ~2B¿jݱï§vÑZº¾¿'NŒKíêýô¯œõÉý—wÅŽŽw~\ž“ ödn~{?öýÊe™§ ûéx¿oÆ| ûý¢tþu¸¸Ç4é÷ãr}yV×3zJÇ+òâzFÅì¢tþu(f¥3¦ar}\tÉ ¿+癿?½6{ÜùP?ð3ÂÚ@-¼höûEküçààlœgh#)1ò¢5>í÷y¼P\æ¢5>ý´/1Æe.^âóÐ^¼Ä›˜1¿ïûÉKü«m8ó±ðyh/ba,|˜·€ÞÜ”œ\ôÿ…|^ö;=Ô'ýð»?ó€/Qj4êyInò_ìÅ×Ü/ÉMÖļ’BOø•8Aòýb¾®Ìì|Ï2=Ô'ð«zÖ_Âk4{Á©û |‡_1„Ö™WJD§Á_¹Ÿ¼ Íê">3Zç0êÁÅ |=WFEGøþ®œ\”ÁhM\üÁ§§t^¶Ó[7鹘K„2çmåÇf]iZÔû‚lÞù);Þoýëþ7ZãxQïûL* Swfg´Ã˜WºçCW¦ ãåâæå¹ŸÕ½+¿aEÎ}e$Rf§éýJœ8³“›÷•2ß­È“´÷}iI¾_JÄ>Þº]¾¨}Kw‘öâÜ×w’ö¾k‚ðsŠyö~ hºq뮇ý± /rÝ2eÞ¾gy­«äAøünEž´¹¯^×^ß#bm.f>¬ËIp›uçkÒà/-à()]iR•.vܳZçbÇýµ¨÷»ää„w‘ù°nû}ðy'ÖŠûÖ•º@¶ÌEo{FÀ/z[ a¯Õy'q-»}Öèg聆qÝ™'|ßÞwøe€??êÁ&%õâ‘=‘5¶°"×åÞ?¢À'CìûÌÓ»‚¼‹ìýug(œð)²¼Öµðâ~å¹ß•£Çcui?9Z/÷þºMkZºUß ðuuâsqEŽÚuçkÒ…½’7¥ôä~}ŸÚ¸+-óÈ)]·ùO¯ }¬+:€gþJ8\Å+æ­Û{p—‚ŸOZ+ ~‘ÅëyeêæÑX?M–CDÖŶA£ÿ?UÝ5¡ðTV\+Éê¯cß/úÔ¤³‹Kõ”q}*¾6ukó€_9‹´t§“ ާ²n÷>õÞ®ç¼ð&„ÔIÅú¾hgï&«³î ÀqlÚáûº•ˆ<à—•B½_­G}ÜE²ŠŠÙÅ’úëHA¯>ERhuiU7•J—êiEÖUÐJ:íÉ’z¥"×啘¿¬‰³÷º-s€äþ†2Y|‡OH;éSY@Ÿ,©½_±Hìý4˜Ž¤‘“%õ=uta'¤"×]K½ß¾‹cî« ¶V‡§òÖZ>8øeˆÑ±¹ªf}¾n :6Ἲ2ð±ªË]üzÅhãî’“ã¡®e®LÕwŸÕÅŠöº+R•¿œ¨]l(|Ø—vAû¾Ÿñݚا÷ I¾ï§¾_™‹æô¥¬ì»ðôèýL:\O¼Ãí€Õûúž ·¯Üºqû*»8‚ÈO)6î+yà9áóÎiøúžšx˜bõn ”^¦Èõqò”þjq‹{_±‰Ãgu²J¼;Ð"í»ða2öý§}¿rÔ…=¿+ŽÞ/ÉMØ2Ç?ßhðW á8{¿ÄÁ¡2ñmï|Ü|•q þJ ˜Øûw;.ž‹ŽžÊx>ƒü?ðýï™ñ1äoxÞƒxzÂàû™Ž ŠYÜŒ‘Õøþ÷vÜ”gï·ì¤•¿òçϹñïÑÿ÷Wßí÷¸ÉZº3‘­÷cãn ; ÞøãL‚Ÿjû:?ëßãqq“.îcãN¶mz.. û@DUfÜ܊癿ªó­|Ñ™¿¬ÈEƒ¿¬ÈŸt¸ Ú+¾ÎÞ?ª|^_ómÞUiñ»á¼ÿ»ÏêýÕ¼M–øGµ'À÷÷‡:L"ïÚÀŸ¥ËÓ~o´ò'1ä¯ù—y†x¨óÒm~ø¬â¢’LRJOÆÈ÷=þ9´y BT(ò2ÿ2^âæ‚$ü$†ü/[ù|ÞQ€_P;à‚>2>ª'ïš’°71ä¡dþíK?pp}äå|xhîwtàX:Cgýþj€GÞœ4÷vEíŽcs—N‚÷[þÀÕ™o­ñ±òíÊ&)‚×W/ñÛpù.à¡>i)ÿëcø ï(¿ÒjÖoÿî⎋¯2ÇÙ»ø¾L\|•±Ž}¿b¤×eÿžk9Ä'Þ_NÁç„wa¿çåÝ9Ü}9¦y¨/·Ožp៼ÔÂv ~^éž´t·ò8x37n~§Ç‰¼â2E7n~gY‰“îò¿áu.Aºøþ*žÂs’W~Ä¡ÛÜ4š{Ôû:m^Zå:ê‹l³ÑkS4÷;«“®L5q³pâ¡­I½¯»à ]d›1iãn²Í.jâäÔ<éë߆ñïùu‘{•ÙW6ö¾ïñÿÁÛ•î \Ñž2•xݹéß_«6^ûAq½¿c¤]='[æ¯öDŽ›î’á—ÞüD>m\¬‰ùS•ý.«¤Þ/óÿðõÓüoPJ79â!eúm¿Ó…æÚ¼DLª/Hœ¸Y;ÍýJî8j7"EFú¢ {'FÒ•¹ˆ‰C¬_´ dIÝäˆû„O3øªï¡Ì›‘Œ‘¾¿¢%.ÚÃH:´û{ÑÇÛ0þ=·ðýÕEkqœº½„óábM<­È›5‘œÌãúÞÄqlÆõ•,RnrÄÃÑçÇi\Ð×ÇŚ؎ԅq¥m0üƒø^B¯ñ: F>få/ö—ð’Õ¸É8Üb\y•P/'íá¯q(ä7í!ÅeÆÍªtô~LÒ¡ ÌÿqE&­ü8VþþЭ|Oظ‹/é¡¥»LÕÃÝ7î|º2PZ7s ½´ã3¹ãžæÌÐ*Ç%¹é¡—ÿˆMŒ+ëê ß_Õ÷ÄÈ1Õ•™ß?ðã²)¬3®äÍ«÷yçñ|}÷UÞŒ„äæ½è Û>îûU™H·q³#OåeA“ùóž‡öÒp鮬:áKDFnvÃu ¾LLj\ø:êÓO2…F}'QºãŽë‹Ùûì} Ïɸ©›ŽC»C¤"ßÔŒ‡«slÁþþªßêÛ|˜÷£ƒü£K·Å×iß_]oÝÏ™¿¹ ¡9æçç¾àykêowäê~ÑÛv‚CÙż’MÉwqCἋòsnÊÇ#Ïj†±"ç8qÀOº¥F¶Ì¼>Èy$Ìœ\ïqšow¾óÜ(f3Ç÷¸ÌÍù |}W‰çõ5+J”ší{[Ü”ƒ–îN¯8–îÔm:žºË½?ÏÞ§°ef·Ï¼œ›m—q7%î{OèýæŠBø€ûÞÅÜb¥sÜ|•dþ_|•G=lÌa|Ôóª=ïûÅù@VäP¹0ïÌÚ¸;¸ð£˜Ý„“TnsN"rÎ i€wê}ÞIH_weɼîì±ïðõ½Œ:æ2…s}|äÞDÕÆ¼Óf×f‰ÄEKÙžãÔÕcžÊ+Cáð×ÍË¥‚Bª¼u%>[áäAoÓuÆÅ+9íb^Êɦc³é­ûä‚ü _—ëãðUÞŒ‘ Ï{Œ?ðv禼ßΡøµqÿN›ð6œºÍÆÁïï÷}…ø:íû«øîê¼ù*I«\÷WÈÛ7ðuU¤Æ9xñÕƒX÷GÌë€_E¢ÞïØÄÑûíx™ß‹}>ˆ,“àuÇŠàWõõÞžïžÒ›È’Þºuå”Êɺ:tê.ïÎ9øfŒ‘ÕÖw_åRå´ë, êyÂÛçø%ã​/°ÇÍj¹OøuAŸ_—sèã®!øçß_å÷<ê5Äg Þ_]æÿñÚ\Ÿ'§ØÄß¿'õ6”(|XwVç1÷Kk!Íê"Åló„«—v~Lñ¾Ì•¹œCG,r]ldAߤ˜§ºµZùÕ¾ÇãÖ•–Iy•ëRaÙºÂE¿î쌸ñ¬µá±º²:ñ©¼²:Ï•¯!Œ‘UP>¿®:œ½_A¿ãƶ8)9ÿKvþ~©\äú8)9¯¹µ?¾± ðþ=~í!ŒÐuegvÜÚÆSº®ìŒ£÷“Ä“¡ëúÈsÂÅ'ØÞ_­[þÀ¯”ÔFppï×¥YÑ«ˆï±‰ŠË’ ‚¯ï©‰u±iQ9mÅwb¢¨+¤EBª®Vžp㫬‹ŒëpóÖåZŸßò›”³›êóܸ"eå¢úÌ~ÂÏÁSbäÍÕyÁ×öðú®ˡDd¯D¾WmÔUFMYÜÕ¿ô0nOòUÞŒžÇ;“xR®Q]¹ŸÏ 757£ça×0õï5 þ½.Í í¥Y1è¦V¨Æ¢Þëö>|÷”ÞL¡äö©Kÿ:_›ë3%øT^^£qlœùJéû«ù=´Q—Ê…+¿¾ím¸ü€ô\œú×é»(󕓨տg¼ÜL¡¿n%â^"Ué¤ú½;í8´ûRNH!ß—ßæ0Föí·¡•¿>fr”ïf³›ŽôHÙwF+õ~ywûý¤ýïUøvûy¬ö0^£}}-ü‘ûþ>YüL)j'| ¥tõݚؗ|§Ä‰}E…ŽÐƾ¿/Ng˜Àãæ)%|O(êÜW- >Vs}¤îi8öcäf %ådßi³ÇÜ/×9^öÍØ}Ìýú 9yn>ÑóÊ\©0øÚø¨÷g©*À¯,¼céjšÇê”ïýP o QòUîýýCŸq2…â÷"co¨@¿9@ÉÝ·¯ Òya/¦Pª‹¼™Bü´ïóôü»ýþþêƒKõ.ä{>wè)øé ìýäúøIyæ¿bù\5#?!­|®„8uyÑ‘ò·¡ß§àãkPém¸¸_‹àë>?ðºuåïðë+fí|Š(ðû«õµj#Ÿ+¬³hå¯èMƒ¿JJíûY±Ò~ž‹·aþ{ràû«õ5mãm¸ò¨iéÚGaÊoxŸÏ›KõçÂæsçœ ¼MUzÆ¿»¸ß_}0zþÀCì«^>ÇÜLJôx~u¼ä3º™ûøþ õ·až&V#øGÎï¼Ì…½”“sðW¼gѱ™ñ5¨”7Å+è´ï¯Ú×´Ì|¦ mÈçÒmö Ÿfîó{éA^ ± aÜ|. è|ë–㾿úH—þ·eÞ_]¯ÂÙû2öúLÉ ¿¿½Jwi@ý¸2—ï¢ÓÒÕ÷/}äM‹oÝYjôÏ—“àB)Íg;†ð¾/r´¾Zû€¾9ZáÓ“7ëýk :ó2ÿ7þºq'\ÐYg^ÚÅO™UÞ4§tlnšÓÃŽû 9}þ‘õ¿ø’àWNÐϾg~”,~‡ß ðí€7¡]ä•ùpܸ4ß@ÏüüÚØoxSK×®ÐFpá£Î‹Ñ3#ô&ñ„Š•Ìþ½°1ó3_à ŽM76lB1ï{Lã~ßáWŠÁ!asˆÒƒÌK=h'üŠËÐÒA1o^,œT—ÙæiË\d›Ô¼•ˆÞÿ= üþê;™væ¯Iû~%oÖñÚLQ;¹¾SÀe^‚ŸÔ¼Byô¾>rU>ࡾ8ØÉÎõ‘iþÉﯾs°g–*eÞżÇ}?³ (¿.oNÍ:{æµ9‹y[s¯}àõ5-ómØ÷ú¾ÁK|³pâk³?<?ðöï 3ùA¶yȸýñ1€_ÚßOïíª—!!ÕžüþP·36Ñ¡ØçýÕø."ÛU CšÕÍÕy(f7W'›‹«óêý ZL„ƒã¥ÅźPŸ·©ú¿Â4÷øþá¿l!’³å“:ö=ó¡%•wÆ$½u ÚaM\$žÂn—rrÞ¸ë¯EKiyS}âàoµãÊ\%' á1„øú÷ôû÷WWyıï{ Íê&=¼ý3!àý»VÙÁ ÷þ |Ôý¦WÛ¯ïNæ~§mPïùqß{||ñàík¢ÔÛ xÌÞ_ ê]T罿ºrŽ¥ËG('ýJ =îûÍSº~ÅeŽ•¿u¦Nð’ øð~ŤÆ9÷}ë‹ßá×t×Ñ{»(bhî—jtܸÞD6oÞ$«‡^×Ûü÷·÷W ŽÍ;J‡¶¯zâßË.Þ_åmsüÀ¯EAøøž(ÕûÇ×Í^ߣClâk3¾“¬¾ WQº›&åx*‡¨ÎË~û¬Ž»KY蹸RK‟ŠY>ôPߊÙqenüüÎk”} ù÷WWüüí¢Þï„ØãÆ]¥ÄøP¯ö58/æÙÀ}¿}Vgï—ôJ‚×}3~àûŽ:|‡è6ýæv§Á_/ë„ ¾Ê¼émë8ó§7ª“1Ò¯Râyö~ÍÎüþN,ü6§Ó;î!ã®B2Àû¥¾¦ÐÅ{KÕ÷y“àžû~iltaÇsOßÅM‚{ÄãÆÓ„×h<ß¿ž7;.RÇóýþoƒ çÉ‹÷‘ã“~àß?ôù6¿Í¸ô¯Ãáv‘ëF!|O»Éu!‡®h`£ç¢¸°7{ ö¾¾{ Ç©rµ û>¾½.ÇÅL‡w'Ç?¥©Ä3ðÇ©;söÂÁÏÛ“ý_·à—Íñ#&ÆüÜßá“Îü¥±QáÃÍ |ØqãªT—v~¯¾Ï›Ú—ܼ7µožpAéœcAÚÆXÓ\Øõ½Ä,ÇäÞºÝ;oÐ*Ç™„Ô)Óéææýá£Îyà“\^77/YóißýuÓ´¼¿šßóiç#ø¨ó"ŽŸ¯ÓæŒGœù‹Ú÷ãowÀ?<[?ðqo ÀáÐÎ(ñÚÜÌÀÇ}Ÿ)¸¸ófž'\P>æ¼¾ïwÞp¼äEÜèÿÅù¤]Ì0÷öQHpH¿I{)¬s3øî¾„1r3ø^ƒ7>êÙ€÷šC€·ïA¥y‘¿ÀGrvHþ?©}9£õ¢ömGtàƒÚ—àãòîÌžÂ{pSû/í÷'Ǽ™û¾;\™}ùëh𻾫Ä7/1y]¼Äu('¼Äà` -¥Y­g~wï¯+˜HôE??dy2sÙÅ RãpPü}]!Ç£øf.ì½ß%?ð!B™ë®c;6Ù8ø:=SÇÒÝ\Ø•Ï-ÆÃUùºb‘GràÍKL¦Ðº²±Ål¥QNn^â#-óä%~ŸZù+äXÇÊŸQFLÇ]W6V?áW}]Ø»>îØ¸frJ×¥×~ÚuÅ"é¥]—^wÄ&>X‘‹àí{ºÎÉwü>Á‹àã®$ûçÃêßÙ6Þ“á¶n†¿cðWu=ÔëŠX rtÉ4øSû›ã˜û©ðuÜ÷«Èþ|ç/åY­Ëcv8Ö ¡YÜÉï ‡öô˜5|*¯€çý¿I•)×hÝÏsðy€×wçúr×pãÖU¹pܸK«$¿ÍºµÊ£÷e´‹‹z9Ïcó™Öðù]·¹é’©¬rÚ_?츛™”Ò›ù¨¸Y‘©èc]ÚßZûI¡ùññ½È¼øŽ;•¬ÝA5ºÊòÉG}ÑŸÁ…µˆ¬çù¾tu¹Ò(i¤H©Ç¤ ×UÜw©zLX§€ú/ëÒØÈávÓ9'uklƒàã»Ë«B|6oVäCH]¬Èü´y±"#q¢>¿’õžWñþ1ø4FèÍŠ|<•uÅ"{ŸwÄò~)¥‹à×wÀÞù›O]Ë爫u*fc ¼¯—©K1£°Nµù]§­+ý /ìÊŸÊ‹±ˆ/7©ò;I•%Õ™‰–‡Ÿ¶ÌGN³®ÏUÑÿ‹mùŠ1€Ÿ•£ýì]‰çÅÉÜÎ¥»46<´W*ÙQÄ}s2£vq1;%¥œÌtlîHèqê¶Òm.Ý)ß??Dñ~r2¿ºçÏÆíËGRæƒz¹ø¾ëî¾Ãoýëgå÷ý®"ø÷ÏäV¤‹ûRÌÚ _êÌ})fóü¾ýþßáWÄò.ì¼lXê=á¹Øi|7ssð-,©}Å"ö"kƪ}åÏ~Ú‹¬yÐSy37ñ¸‹¬µ‹}S>®¾…˜¸)—ö¢tÆz™}k@Çà{ rûþÌû ŸÂ‚Þ—tÞ÷n ð=@-ÜW–å]løÞÄÛp ¼qW,òܸ1ïZå¾Óï©÷‹vúHþß3Ìks‡2OøÇWí~QÿÍ>Epáâ£îç•Y† l/Hœ¸ù¨ñ_@‹´ïô/„ïޛΫ™ûâlDy}§ýÈê¼™¦ÉÕ¹ÏXd;4«]âós¹‹íåEû¾˜û6úü¦XäV¤ {w°Ïu£¹_Yö‡9°o¥áß?ÁÖn:ëçcßÛÿùÕgØíýÝÿƒ?sà? ßáÕ¿Ã/Öž?>¡þÿàí¢úŸÿ†?ÿÛpqïWíÀÙû™ÎðϼÿÀç笾¯ržðÓoÃðëÔðW(¶‡Gœû~ÂóÊŒÿ<´ÿž—Bþ³òÑ"Eïm~_ùøcK¾ÂG_ïõïÇ&Î¼× ~¥çaïs|?ó÷¡°÷Ë–yoìñ±ï±Ç÷Sw‰#üb/¾á%æ~ÓОð“dõ/ðµ¾KÀ“æÞqæ¯*ù ~ó"ü¬ ¼áËÀéµ¹êeþàŸ;ú>᡾.ÿÏEðRpXùÙ‡§òÊêüœæÞº‚‚Ï¿ïwîç?¿úÏ·tÏ¿À÷×çâN÷ü§á;¼_Kw¤*uµt–®«¥ëæÞ§üµtGŽYWK×éÔ u꺡–nÐÒ µttßçP§nЩeV~\Kw¦¤ª¥»ŸÊ£÷©–n68óS-ݤ¥›êÔMzë¦zë&ºõ˜[s_jéºÕUï´tK‰‰E§n}°êœ–®Ô©+:u•fß‹–®Ô©+ZºRKW´t¥Þº[·é_óiÿÒû¦·n«S·ié¶ZºMK·ÕÒmº°[-Ým /¹°WÒî 7§nݪë‘sò˜¥»r~ϹŸi¾ƒ/‚—‚ÓÒ…Zº€·n+òÎù½jé‚–.æ}—NK§ôù+ç÷‚§¹°+ƒàjé’–.ÕÒ%èu+r²nkâØ÷4ÊÉJPN–²&Èñr%ÿ Þ`îÍHØÕ̽©S×èÔ)kb5««¥ë´tÊšXdM¬®–®Ó…íê­ë´t]]X²&–²&Yë¶&hîƒNÝPK7èÔ µtƒ–n¨S7èÔ)kb‘ãe)kb‘5±”5±ÈšXS½u·5qd°+kbM’°ÊšXWVN+¿”rBÖÄZjéÈšXK-Ý"1q[ôT.ÊšXE§®Ô…%kb)kbIØ26ì*º°¥NyJ×V§n“^w[ƒà´tÊšXdM¬­NYKù¨Vîìpì½nkâH{Ì[WäŸ/eMYõL5x°aë1z]=àê¬Ûš€cS¶”5QdMT [¶Â\Ø pu–²&*@LT/q‘5QÊš¨lÔûG½%ÀiéTl¢(6Q*6QIK×Ô…mta›yëŠb¥bÕhé”5QdMTSK×hénk‚z'k¢”5QdM”²&ªƒJ\Êš(²&JYEÖD)k¢8JYu[Ç¡UÖDQl¢”5Q›(›¨AK§¬‰"k¢¦Z:²&JY5éª0nQl¢”5Q›(eMÔ¢Sw[ôÎ/·5AûNÖD©ØD-ZºUj(k¢Èš¨Ro]ÑÒ•Z:ŠM”ŠMY¥bU`ˆ•²&j“„U±‰"k¢”5ñ‘®s^-Y¥bEÖÄ6‰R﯂à©àà]ÁÁ§‚/‚›¥Û›ØaTâM±‰}[àí{ÞÅV±‰M±‰jé(6±C-]À[·Ulb“5±•5±³Qï]hÔ›¬‰ÆÛ¹^jð´tM:ŠMl›ØdMleMlÊtÚM:ÊtÚ*6±ÉšØÊšØdMleMl²&¶ÊtÚ›ØÊšØdMl•é´;-ÝP§î¶&Ίµt”é´U¦Óta•5±)6±Ulbº°ÊšØdMìiì{Bô+kbSlb«ØÄ&kb+kbSlb/ua-ÊtÚ›Ø*6±:›Ø›ØK-e:meMlÊtÚ¥”ŠMì2æÿ&kb+kb“5±•5±)6±U¦Ó¦L§­¬‰MÖÄVÖĦØÄV±‰½IÂ*kbïïoÝUìó§fÕÿoÉÉßkþ©]øËÜààU ÃTë<UN~àð¾ Â÷Ïßë&~Ã7ÕI]”ÿí+<XùˆGôù³| ààfîÑ©wµòî¾÷4ª¹OZùim,8u±ÔÒ-Ú¸åz§¹—¹2X^¥zß4÷Ï7ô+<Á†}¦‚ÃÜS=ÙàÍl\B…Ú“ÓÚwß“eà*›ZºÙ}O›fãÚ‚¥kÛ ¾ƒÓééÍ\ØN/íU…Oe§ûÞ§y¬:ݸ®®Lwß3þê1ë¿Bj( ;^›ÑÌÆ ‘£›¥¹ÂÿüW´üŸ†aö}о¡?iå—‚_,8çà·y.èuoƒÙ¸Iz¦¹°T÷̦zïTȬöꤞ¿:ýÀÁ§‚áSÁ þât¢×f—‚Óà·¹2‹^Ú¥^›?²ìÕZ¸ÈXiV~AMè³ÔcõGÂòoø0‡ö¼×ßð©–/ÏšÛÀܸ¥Ôµiß·YyJ{*ÌÜ‹ö½ÒZÊ5zª™·Žfž¿'ÌüÀÁÍÊ=•OùÙ¯atÚš´òKÁÁñòìÇÌÂ:ÏV+¿iåÿp܇ƒ“ùÙJLl²"·ÒçÿpËý†ó?È-Œ§§Ãàã™ ÕÛ°è2ž¥z‡¼‹·¡ ¼€çäq+_“àjî;¾ª…oCWpšûb"èjåÞùÈûýmºMdRïÍl\ËJN5x0Þ³ò &ðÛМzW§.÷w)í1so<Mí{µðm0ƒo &Þsh¸yß5xaGû´N¿Ã;¼um¨Þ-Ý0Ǧ-šûšNo]3þºèàtŠþ88\Øfå;¤¬DÏÇÀéµéim‡ð}tcþ¿"¸1B£Ó¾÷2ǦӾ÷­àôÚŒÇ<Ô#ˆË+ÌK;®ÌȦà4xc„ÆHbK£œ z¬FSðNsïjéHÆ©z×G ¥] ˆ¿ÇXæÊ "Ç(5øM+kl™‡+3M@-f ƒœÙ¸Ig~ªÇjÒ©û;ÖŽr÷Å>¿áÓ\Xb˜‰©Ì¢ˆ‰©dܤ·n*…|AP)”Ï*¨<–’2‹X—R‰mÜRBjÑk£\^± k›CK>«(ãê ª Œ2®Î(Ò.”Ï*>ê¤xW½ÝåßK~ÃéÔÕPp:uµÔÜé¾W©}‡v”2ÿ)ù?ÊxJ£6¼óû1·!m#”Ã-6iVÛä]Ćzl¥Yí¤Á§¹ï›,©m\HsÛDãôÉßpõÖíIK§„Ô&ŸÕ®®àpß·z*oFèÿù¯®ñ(^¡Û¼¿‚¹Çœù÷WD0ûl§"î'RÁÁ»‚ÁÕà(^Ÿœÿ®”¾¿ZW½w꽫¥ë´qC›óÂ^§ÎÄãþÂKll™|Í}©¥£„ا|Sï7M6ì;e÷½ â­Ë1ñ6¤‚Ù4Ip“íóþŠ¥MP)ƒ Ø£«ÞÁš‚u¨+ájå©ðA%F¾¿¢¹OµòT;F-LJŒÌ(§ô(ue6Íݨ…™DåêÂ&dyešz&:¥:´IDd9|\-Ý ¹óÒRZfª¨P&•œ¤±&2éØ4£gƒÄ‰·ÁÈ8Êê|º‚×wÝLü=Úx5 ÷©–n‚NÛLvßû+8uM©­hß·Z:<6[-ݦ¯lµtàêÌ®ôùNEÜ]½uÞºªw(=x†‚cïfß)¨ô6˜ Û©˜·›Š•÷W‹àjð¤Ûô®à^Ú®ÞùNuŸjß'í»‰MüùEŽxWpúPˆRN:Y½ÔÒQ}œJAÏN¯Í Dc„¢oƒ96ü•õ\ ºqCɸ?>Üô®nÜ?meM È)M•ÁþêO°qcª•'ÝFÅã^½Œà[Í}#Ü\ØIRfšœ“œD¦=•F=óõ˜þ¯ˆé Þ®æþ¿ûÊIÿ÷¯œ¨Þ‰Œk*½nBnáŸ_Ñø§3ÿG”àÔ»zç){?Uö>4a©§r‘fµLû/äùJ·Y ¹¸U卵,ue: M e~’*œNÊÞÿdðEr]‚ÓK«©#× Žì¸æÂþNoÛ¿ÁZŠ×þŠõ¤»47® >.K)äEg^Eÿ¤¥üÏwÖD‚ÿïXû7ÚÃWyìÿQ´‡ý;A`õÂiå•]ĺP¦:ïo,jSÁaðÛ¤ã~òpsh7Ť¶Ò¨7¹÷·)£þ“8ê?ß)¡NömR•>i‘âë—¸ÿ'ÿ¼ŠA'•œü ³P'žÿ|'¨!83̨¹“×hÿõÊŒÿÇwq]™ÿt×;ÿ„7‚/‚o¿¤Ì 5øËguÁ—'õž¡àÔû•ÏÁðEðRð ð¦ßhß[WðApµòßïtæ»:6æÞÕ™ï“àjã:Í}¨¹$xSp:´CÍ}Сjî“nÜT‡vÒܧšû¤¹O5÷IsŸjî‹æ¾ÔÜÍ}©¹/šûRÕ¢¹/7w:ó¥Î|Ñ}/uß‹î{©·®è¾—zëŠDäVsß4÷­æ¾±w# ãC{±iýçf< ÞTïàCÁÁKÁáÐF˜+sgû\pµò¤œ„RN"Á»‚‚«¹“nJ· ÒmîL'„7:uM›Fƒojð¤Û„Òm‚”“;Šá“àj𤜄RNbÁSÁiîJ9‰AsKÁéÂ*å$&]™©® i1Õs±hå—ZyRb©•'õ ”|’ïQJL­|©•/¼’°±éÐnua7Ú­-É÷Pò=I¾§ò$yòé > ¾¼®æN·›´áIð¦ààjî¤]¤R’ÔƒTêA’zJ=HRR©IêA*õ [\Í\ÙÔÜI»H¥]$i©´‹$ÏI*ÏI’r’J9ÉNK×ÕÒuZ:¥Û$é6©t›$Ý&•n“äxI¥Û$9^R9^îœß®t›$ÇK*ÇKNzç•ç$' ~©#Õ(•j”‹ÎüRg~ÑÜ—zç½óKɸ¢SšUÚR‡–\©\I®TŠY’b–J1ËMÕVÕÆ¹›k¤Y5¥Yµg|*x\ ž4«¦Â:-hî¡æ4w¥Y5Ò¬ZšCÛ2®æNA¥¦4«–8xµq6N•9^Zk N§4«ÖhîJ·i¤Û4¥Û4ÒmšÒmé6Mé6t›¦t›FºMSºM#¿MSºM#¿MS~›F~›6Ô™§˜T›jî“æ®‚JT£6ÕÜ'Í]E…¹}šrû4ÒmšÒm¹}šRN)'M)'Â:M…uÚ¦c³ÕSIÊISÊI#¯QÛê¹Øð\ôÇ<Â:])'”“®”“Na®Â:Â:=ÔÜ#ž Þ®–Žt›®bR=héB-]ÐÒ)Õ¨“jÔ•jÔÉgՕϪ“Ϫ+ͪ“Ϫ+ŸU'ŸUWšU'ͪ+ŸU'ͪ+ͪ“fÕ›‘°½ÃSÙ»š{§¹÷¦à4w¥YuÒ¬ºR:©F}¨4x¥uRºR®ïÀüäÿ WªQ§|›®"b"b]y:yºrûôE+¯f:EĺJ˜éEW¦Ô•!Õ¨+Õ¨“jÔ•jÔ‹V~« KŽ—®//Cé6ƒòi‡Šˆ òÛ •²2("6TDln3”n3(¤5THkPHk„š{ÐÜ•ßfr2”r2’æžjîä·©æNÚÅPÚÅ íb¨ˆØ ˆØP~›Ñhî*ßf4Úw¥] Ò.†rû rû åö”o3º:´+¥] Ò.†Ò.9^†Š r}Œ©zŸØ»:ó$߇РР¥ Š ¤] ¥] Š ¤] åx¤] ¥] Ò.†Ò.nÖêC)¥æN~›¡ü6cÓÜ•r26½ó**4)]g>¡àIð¦ààCÁaß§RN&)'S)'“”“©<'“<'Si“´‹©´‹I¾‹©ÔƒIêÁTêÁ$õ`¶TðFð®à4w廘¤L¥LRfw½Ó±Q·I·©Â:“j…¦òLJ™Sõ>éØ(ïÁ$íb*íbR:îT•I•©Òq'UëL¥LR¦R&©×§6±jcRÒÈTêÁ¤tÜ©Òq¯ïyžò}*=7 ^9&É÷¹•Œ£¸ÌTq™Iq™¥|‹äûRz‘€^Êù°(id©¤‘EI#K¥ã.’ïK9É÷¥"#‹œK©‹BK…6©+ÕÆQÖÇRò}‘€^J@/ .,XX*:°:U ¼Èü_Êü_箮̠jéH=Xª”xQJêR)©‹´‹¥´‹EÚÅRÚÅ"íb)ïÁ"ïÁRy‹äûRò}Qpa)óQ=ìRõ°‹äûRò}Q¹Í*ul(¸°TNé"õ`)õ`‘z°TµÎ¢ØD)ù^›(›(Ê»(•wQ”wQJ¾%N”Jœ(Ê|((Êê,•{P$ K è"]*÷ (:PÊü/2ÿK™ÿE¹¥ÜûEîýR+E+¥ì÷¢è)]$ KIØ"ÿ|©ÄÈ"ÿ|)û½^]XJŒ,(ª)U3R”âi4÷¦æÞhîMͽÑÜ›š{£CÛÔ¾wš{Wƒï4x£]±¤†bI}EƒjãmÜPs4÷¡æ>鹘깘4ø©¿¨÷¥z_Ôûr½ÓÒ-uh‹_jðEƒ/5ø"·[æû+ê}«w~Ó;or‚¨>#LnaÕg„Ðö{„±ßƒ¸:#”„ ¨Ê|†‚ÓàC >iåS >iå•„%®ÎCñ®¼´¡Ddˆ %"ƒDd(ITŸ¡¨>ƒ¨>CQ}Q}Ft5øNƒïjðƒNÝP§nЩ3É`þ‡¢ú ¢ú EõDõù6¨3OZ1…FLZ:% ‰h4ÑhÑèÛ ŽÍ¤3¯Ôƒ õ ”z¤ÄRs_4w¥]i¡´‹(Úw¥]Íi(šÓ šÓˆ­«MïüVïü¦û¾Õà7^ZÈ«Œ4y﯂à]Á'Á—‚ÓàC ê&"C žt››§”tZâ)}ÌKRÍéû+š»©Ê â) ÅSÙhðJ5JRÑhÑh(¢Ñ ¢ÑPD£AD£¡ˆFƒˆFC†" " E4D4Šh4ˆh4R9’œ9ÔÜÍ}¨¹šûTs'ÕH¾¿¢¹+Õ('=VK ~ÑÆ)݆¨>CQ}F’r’J9!¦ÐPL¡AL¡¡˜Bß_‘”)uêŠNÝVsß4÷­æNŽ—ÜJ¾SdD1…F#¿MS" E4D4Šh4ˆh4šÉ»ˆF‘‘ª÷ÀÞÕÊ“rÒR >iðJ9ùƒô¾œæ®Ü>”“¦ü6­Ñà›|£Á«ÐFë´q]mi7Õ'©ÄDõ­«Á“ߦ)õ ‘zДzÐH=hJ=hPµMÉ÷Fò½Mµt$ ÛRO%ù.š’ï|Š-óýy¥ÙæÛ æN‘‘¦|œMÉ÷Fò½)ß‘m†"Û|E§||Š«3ˆ«3Ùf[f(¶Ì ¶ÌPl™Al™¡Ø2ƒØ2C±eÆMŠùSJŠî2ˆî2nºKzç;9_e_e(ÂÉ ÂÉè*ó'߆¦ààCÁ'Á—‚ÁÍSI|•¡ø*ƒø*CñU¾¿¢¹«Ä ⫌®œÄWŠp2ˆp2ádtRádáäÛ N™ÿ]i}Ѿ/µï‹¿Ôà¥]tÒ.ºÒ.ˆ¯2_åû+Z:¥]tŠŒ(¾Ê÷W4÷Rsß4wå|èä|è*룓ó¡+ç±e¾ fC% J†*ˆî2†Êú¤] ¥] ò(ÂÉ$߇2À hÅÙƒ'† . .(ÎÆ ÎÆ·AmE†)|âl ÅÙƒ ð¡R‰È¡Dä ÜÅÙøþŠŽ’qƒ’‡’2Ä[£Ô•!v(v ;””dÃ*âÁøàüŸñ®èƒlØ¡lØAVäTðIpÅ“¼ÄS¡3®Ü¼“ü´Š|/ˆ|ïmp½Áͱ!ö¼PìyAìy¡ØóÞ_ÑàÕ;?) ¬È÷‚È÷Þ†kîIðIð¥z§¹+?í¤0îT r“䦒2“ü´Š»/&YRSYRsÒÊOµòdˆM‡äæÊÍ;É›JÆM2…¦’2Äž÷6¨§’<¥Šþ.&¹:§ruNru*þº÷WAðTðFð®àph—ru.ru.åê$þº·a*8­¼ e.‘KåY-ru*þº þº·¡ÎüR®ÎEv) »ÈW¹TžÕ"SHÑßÑßÅR™N‹¼…KÕI- &* ¸X$e–JE&¶·A žÂyK…óˆÃímpƒ§•W¦Ð"™âp‹Eù6KyÌyÌ–2…å/eË,RK ©…BJÅãYR¥\^E.¯2­Q$¤JååÛ”’qEBªTTQ.±âp âp{Ì©+’q¥d\‘Œ+•®S”®S*]§ÈŠ,eE¥"—JE. ç) ¸÷W4x•KLp¡(àÞ_Ñà•ˆ,r÷•‘D÷6twƒ‡·®T@­¨”¸T¥RQºŽ"a "a EÂöþŠ.¬ŠÇ [”*5**5*P+²"KÔˆE- Úû+¼’ïE±R±¢ˆ˜â1‹"½•ºI@o% 7åÛlE²)&µULŠ˜ÄB1‰Å&¹•ˆÜ$"·‘DŠ ,ˆ ìmPƒ§€ÚVµM"r+IT`oƒêrJ·ÊúØ$¤Wl imålÜ“Ú*)tSAëVRf“©ø¬bSLJ1Jq:½ ê¾ßÏOPi+[fÃS™Š”)‰U)1Q1ÑÛ° ˜…R1 %1 å³Ðÿ €ÀÍk“D ”Šèýö¾ 4ê·¡)x'¸Ú÷Nƒïjðƒ?Ô¡´ò·BNû>èÐuhÍ}¨¹ÃS™ÏT7iã¦Ú8xióYjå­üRg~Ñ…]jå­¼q¸½¿¢•/5ø¢c³ÕÒmÚ¸ÛF‡vÓÆ1ñþ ÄD(1—y†‚ÁÍ•!ržTä<ï¯hî&Ë+Øó2R-¨Ä©Øu’èqRÑãd” %e¢Sï]õÞiå AMEL†‰Md ê}ªÞ'Í}ªÞ'õ¾Ô©×G†q}d€ë#c© K/­bYÉ(z.ÔKôÒF©Þ7õ¾Õs±iî&Ÿ6œoCSðNpsãxJ߆Pp|¨Á ^YDT’©Þy"*ÉTu’1’ÊI2F2ÕÆ5Ú8eŒd£kjãm\S×hã””ÉNsïjãÈ–QT!ï¾ÑÒ µïàŸ·]ÁIÊäTg~ÑÒ)}>IŸW|ï¯hðK­ü¢¥3ñ÷Lˆ¿g*s Áí“YjéHÆ¥’qYôX)—›ö}«Þ7mÜVG"Rñ]$V¤"¬Èô·a)8 ¾)ÙHD*¾‹÷W‹àjéÀ½ŸŠq"‰q"ãD~0NüöU¦bœxE ^ɸF2NV¼¿Ÿ NÇFɸÖiðÊ_GŒ¯|6UƒTäüà’çC#C¬)Y#YS³6鹘ÆÍÛÈS”I”©(#’(#ÞuꊮL©+CBª•ëNRJ ߆Pð$xWp8´]½óÞùn²y³ÓCÝSõžÔ»z¨;Å&ºz*;=•Ý$Ä&Uß§*ŸE½+}žêß߆¡àðXuå5êäÞWìï¯èÐ*¯Q‡Hhª ô¤ ôìJ!ïÀ —Ý=¤Óª*ì÷Wí»r¢ª°“ª°SUa'Ua§*£N*£NUFýþª|(ø$x)8HØaRRs@ÙE¥Qr: åtätÊéD%ä©JÈß_ÑÜ•Ïj>?”˜‰ƒ7v>?”>OõïoCWpCy¨=‡’2TBþ6¨¹“Ói(§Ó4w%¤iÔC ©ABj¨ÈU ¿ jãH!J£ätRìIèoƒZ: mŒR–¼Fª€=Å ‡’qƒdœª@•Ÿ 7•>?IŸŸJÊL’2Séó3®æNAäiò*“*ÐS•¿¿¢Þ›ëÔƒÙÕ±¡L§©¬ *!Ï©<'“¬ UÄýþŠzWõ$kbªàq§*âÎIõT1èIþù©^ÚI/­ªÂNªÂ~ÔÜ‹¯¬‰IÖÄT/í¤tU…T…K½´‹ôù¥^Z*d~JÁ©w¥Q/z*—ÒiW£¥Sé:T‰œª9©ùmX ^Ws'•XU"¿¿¢•ïjßI£^J£^ôP/¥QSôÛ æNQà5Õ¡¥w~©¤PªÂ~†‚Ó±Q 9Ua§ªÂ~Eg^%….ò/Æ]ä³ZJŸ_ä!WeÔIuÐYÊíC¥Ä©J‰“J‰³L¥RVÐà•ç„jSÕ'ó¾ jéÈsRJ£. ¬HUûþª\­<¹>T5nR5îÛ 6޲:k¨Þ)ù¿†Ú8z¨U9mR9mÞ…²ÿÓ¿©ömPKG/mMuæI!/óå¾,z¨U=lR=lª‚Ö¤‚Ö·AyÒç«Ô…%}^´&U¤æV±ÈMeV[=Ô›ò­ìT‘ú6 ‡C«JJß_QïÊG½I!WU™ï¯héº<¥m¨¢Î÷W“àjî¤oõTnz*·z*©&4·ò]lr2ï©z§J¥­žÊMy»ÔÒÂÕàI-Üê±Ú Ýê±Ú”¯*Rß_ÑÜ•ïbÿ5pþŸ_=wyê¯ß¼ÿµ»àƒàSÁÁËÀ¯g÷„‡ü¥^_p5ø Áçcà׫}ÁSÁið9¿ ¼Ñ±ijåÛ$øRðxW+ßiå»ZùÞ®V¾ÓÊwuæù N7ÔÆ :uSÍ}Ò¾Oµï“ö}ªC»hãVWpzë–ü¢Á/5ø¢}/µïEs/5÷¢¹—z*‹Î|©3¿éÂnua7Úízßßáñ˜Þãiï > ¾¼nN]¬|„| ‚«Á“ˆŒT½'õžª÷7.šÚ÷Ö >œö½•‚Ó¡U2.: ^ɸ»,ù‚«•ïth‡ü 7Ô±tl†yëbÒ±™¾®ö„T,Õû¢Þ• R¡„TŠR§®èØ”ü¦Áoul6­üV+¿að©¤L’”I%e’ì¸Tv\’—JÊ$Ùq¡àIp5wR©ÌÀ xiSÙqw¹óWƒ'—JH% ©TB*ÉKeˆ%YRÙÕÜÉ’JeIe§jð#®Vž„T5x’29Õ•™´ïÊŽK²ãRÙqwµô _MÁiðK ~Ñà—¦Ú8Ò.ÆT7iî*ˆ<ÈÊ‹6n©¹“v1”|$߇Ê5d­æN¹FCIØA&ðP&ð$v*9IDNeÃN‘SÙ°“r¦²a'‰È©²ygPï©–ŽdÜTù´“„Ôljîäæ*ŸvRwª0î$11UºÎ$+r*3pR$tªtI¾Ê©|•“|•S½ó“|•SY‘“^Ú©^ÚI­Se´NJš*YhR²Ð\F5šdN%&&EB§2Ä&…2§“ ±©ÄÄ$WçT®ÎI)©KÅ"‰‰¥ÄÄ"1±TÕÆ"WçR±ÈEÙ>K‰‰EÁÄ¥|•+áÐ.%eVÒà•«sQ,r©X䢌֥‚‰«Ñ¾+ShQ4p)Oé"Sh©”ÔE¶ÌR¶Ì"[f)·ÈW¹”Z$¤– ¨-RK ©5qðjßÉYÊÕ¹ÈÕ¹”Z$¤–òU.RK ©E¶ÌR¾ÊEÎÆ¥dÜ"·TÝÄÚtãTBì"oáRÞÂE2®”Œ+Jˆ-åî+r÷•²eŠ"b¥üuEþºRþº¢€Z©”Ô"S¨”¿®(㥔)Td US½7ìÝÜ÷"])]QÝD)!UTøP*W$¤J ©¢x\©x\‘Œ+åp+r¸•2ÄŠn¥d\‘Œ+%ãŠd\)‡[‘XÊ ,2K™EþºRÑÀ¢h`•š{ÑÜU<® {W§Žüu¥üuE!­­„Ô&Cl«Ö¦ÚÀ­üu›‚J[¥en²¤¶²¤6YR[YR;iî**´Éc¶•ÇlSbäV‰‘›„ÔVBj“ÚJHm²¤¶R›Šû¶òn’q[b›êß·’q›œ[97Ť¶ŠImòUneîIÏ…27™[‰ÈM"r+¹IDî¥î;¥en%ã6ɸ­dÜ^4x%ã6™[…´6…´¶*ŸßÒÚÊŽÛä«ÜÛõþ}éâ1"2ˆ æmè > ^ Nƒ5xiÅjð  ã1åó﯊àÛÀ“VÞø*ƒjÞ†©à‹àjã’6ÎduñÛ„â· â· ÅoÄoó6¨ëtêŒzO§S×ÕÆuÚ¸®6ä{(~› ‚š·a(8mÜT½O:6Sõ>±wµt‹–n©}_´ï¥Î|ÑàKù¢3_êÌo:ó[ ~Ó±Ùjã6Í}«¹ošû6sæ®j‚j"”ˆ ‘Š"&ˆ"æm˜ ^WK—´tJÆɸP2.HÆ…’qA2.Œ£õýͽ©cÓèØ(G5ï©Qƒ'§ømÞ_Ñà• R¡„ÔD(!ƒŽÍpƒ§•ŸjåIÆÅTWfÒ•Q"2&Ý÷©îû¢c³Ôà ~©Áƒ±Ô•Y4÷RW´q¥_Ø»ZyЊ]çýy%"ò*C±ëÄ$:?ð¡à“àæÂ&Y‘Šß&ˆß&¿M¿M(‚š ‚š·AõÁÄW>›3Ÿ$ã=N=N(zœ÷W´ïJD»ÎÛ Î|§3ß›‚ÓÜ»š{§¹w5÷NsjßIÂæP‡vСêÐ’€VÜ>AÜ>¡¸}Þ_ÑÜ•„%nŸ·A ~QïK-Ý¢×¦ÔÆmœ2B³¨÷­NɸÜêµÙ´t[-‰È4~Úh$"›)=â·yš‚O‚»ÁÃÆ5å§m$a›©Î ¢Ç EDŠ'ˆçm0b‚èq¢)ùÞȆUü6¯I§Nùiùi›òÓ¶F+¯t#Ý”€&~›Pü6ï¯:ÁÕàIÂ*~›h$aAMAM´¡–nÒÒ)#”fB1Ì1ÌDSŽV¢ˆy†‚ÓS©¬ÈFVdSVd+ZùRs/š»2B‰ß&¿M4ÐM¡ÄoŠß&ˆßæm0ƒïäæíJÂAÍÛ0ßMÕFt¨Úˆjð$"»‘=pð¥àp߻ɧù´oƒ²yc˜ÂÆä%ÊK<ÈK<”—˜fB1̼¿¢cÓÔ±i8wóÒòÿÁ\pš{Ws' «jb„JÂAÍÛ öL`EPóþŠî»ò ãÆdA+~›¤ eA ã¥AÍÛ +ÊtÊ‚ä£Ê‚dA¥] ² ‡² ¥i å!Ê›¤ŒJÓ”¦5TšÖ |(9‘ó„"ç "çyš‚w‚Ÿ77ƒæ®Ìÿ4x¥·O(nŸ÷W´òJ·™¤Û(j ÷W´òJ·™”å5•ù?ÉŸÊŸ¤]L¥]LÒ.¦rqOÒ.¦R&¥"Oe¿¯QL¥]LÒ.-R-R(Z¤÷W´ïJ»˜”å5§êøëÞ×;­üR+¿hðJ= Z¤P´HA´Hoƒº2EW¦Ô}'ßÅTÚÅ$íb*íb’v¡H™Þ_Ѿ+×Ç$õ`*ÿ<‘2Åtê:)R¦÷WAðTðFð®àƒàSÁÁKÁiéTøž(¡BQB½¿êWs'åD1JÅ¢ø»¢„ ¢„z†‚O‚/§¹«è?R½ ¡à´ï*´±(´±Thc‘fµ”fµH³RtXï¯èØ¨ÐÆ¢äŦõþŠæ®rVǹ«c3hß•j´(»o)¿Í"¿ÍRšÕ¢ôÔ¾Ú÷¡.ì  kì÷÷W“àKÁié†ZºIK§T#â-LÅ[˜Ä[ø6¨¹“j¤x 3Í]©FAªQ,uæÝ÷¥OªQ”Zù¢•/µò¤)ÞÂŒM+¿ÕÊ“f¥hß_Ñc¥4+bMLÅš˜Äšø6„‚'Á›‚‚O‡¹§RˆtñmHoï NsWšUÎ]í;¹>R¹>’\Š12‰1òmX ^Ws'Å,•b–¤˜eSg'RNf’b–ÊñBŒ‘oƒš;ùmádád*ÂÉ$ÂÉT„“I„“oƒ:6¤×¥R̈p2SiVIšU*ÍŠ'SN¾¿¢}WšU’f¥ø*3I³J¥Y%9RiV¹hðJ³JÒ¬r© [´òÊ锤¥R’T#Ew™Dwù6¨Á“n£è.“è.߆®àƒàSÁÁÍÊ7 ¬4ii*2Ò ó!áä+!iðJ»h¤](¾Ê÷W´q*°Bt—oƒ:u–™Í•d¢’Tt—ï¯:ÁÕ±!í¢)í¢5š»ò[f6åöißÕà; ^ùmùmšr¼[f*¶Ìl$ß›IœÈFA¥6ÕÊOºqÊsBd›¯®«Ž ÉwÅÕùþŠæ¾ÔÆ-zi—šû¢¹«˜qu¦âêLâêLÅÕùþŠæ®ü6”Eõ™”“¦"b”“¶ÕÜ7Í}«¹SDL1…¾f̽›Š•$¦Ðì&)ôýU\ žbRŠ)ôýU'øPðIp5wRShSèÛМ6Né6D4ú6”‚Ãc¥ˆF“ˆFS&¾ êÔ‘ë£+×G§˜TWÊ ¾ jãH·Q<¥I<¥Ù•nÓI·éÊõÑ)&Õ•jÔ)&Օ礓çD‘¬&‘¬¾ jéÈs¢8Z“8Zßul&›©Ž ŤGëû+ê}¹ÞéЖZù¢ «<'Dñú6¨SGÊIWž“NÚEW®õ°9TXgPXg¨°Î€’“T¯9H»J»Ö*¬3(¬3TX‡bs(íbv1”ãeãEQ¼æ õ`(õ`z 8ZsP`e(íbv1šZùF+¯´ "YÍ¡"#ƒ"#CEFEF†Rˆd5ÉjKêÛ ® É÷¡äû ù>”|$߇’ïƒ<'CyNyNÉjÉjå9!’ÕÊõ1Èõ¡HV“HVS‘¬&‘¬¾ ê'õ`(õ`z HV“HVsl5÷MsWÚÅ ×ÇPq™A)+C¥¬GëÛ`.,q´æT® d9UTh’çd*ÏÉ$ÝF‘¬¾¿J‚7ï > n¤Ì$åDQ¼&Q¼¦¢xM¢xMEñš“”“©Òq'¥ã*’Õ$–Ô·AõNÎÅ’šDsšŠæôýõ®äû$ù> úû+¼Г,è©‚ “‚ Šh4'‰È©D$1…¾ jßɆÊÁ>7õ¾Õ…Ýta•˜X$&–²a‰î2ÝeÝe.õÎÝe*ºË\ôP/e„.*»Xªì‚è.߆TðNp5x2B—2BÅß—zç½óKÐY‘Kù¨‰‰Õ]ï´tÊKLœoƒ:´ä%^JL,K‰‰E~Ú¥ü´‹ü´Š51‰·0oa®¢c£<¥‹ÄÄR¦¾ ê¡&)³”-³È–QăIÌ©˜³ÈSZæ“ IÜ}©È÷’ØóR±ç%±ç½ SÁiðê/ e*ú»÷WEpsꈿ.KÕÇ%J•Êt*Êt*å-,ò–òy KåQ]*º$º·AZzçK¹ûŠÜ}¥Ü}D÷6¨#1¡øë²È_§ä²Èš(eM‰‰RE^E¹F¥ê߉.\\–2FŠ\^[‰ âpKÅá–Äáö6 _7Ú‘°½ ]Áié””Ù$e [n2F Úû+8uŠ-‰- Úû+Z:ÒÚ ¯–Ž„ÔVEÜ›Œ‘­¤Ì&cd+cd“”ÙJÊlòYmeŒY*"²$"²·Am𔾠굡‚—­¢B›lEƒ–Dƒ–Š-7…u¶’2Äc–[Åe6I™­¤Ì&—×V•ý×Üõ~õþëã~wòÜ”]ÿAø ø6ðËY¯—á=¨ §Áw¿BØ /€_ÏÂgø ¯øn¾aî79Áo¦ž > <€«C{“Ý\ð©àà©æžIð¦ààÍìûÍZr‡‚_ï‚—‚SïSõ>i㦹°7wÆ _ ^0÷Tgþ®Ñ?áa–.Î|æTpê=ÍC}WÉŸð¶öý.!Gx‡3ŸÃl\„«ÁÓ¡Íi.ln8´¹ÍÊ·àí)‡Á7õT¶!u—U"œŽÍ]Aˆð2î.îCø ÞÕ±¹ëØN¸’°wÁØ /slîš« >œ6n«}ß°òý1ƒïÏ$¸Ù÷N§®«·®Ó©ë-œæ®NÝ]qÂÕkÓ' ^‰È»Âà‚w§•Ÿæ±ê$aïx„ox¬†’°ƒôº¡ôºAz¤YùA§n4WƒïÔ{77n ظ1|ÑÊ+ÍjÐSyg_"œÞº¡ÞºAoÝšÈp8´S=•“žÊù˜w'ñð ¾®z'[æÎ¯c8Í])¥³QïêÊÌFsïæÂÎN½wµï¤ÛLua'9¦’2“œw†ÂÉ{0Kº¢+³ÕÊo86ë1ðõ ÜÌ}‘óa©·H·YJ£^Ip%eù¥Îü"Cl©C»H5ZêÐ.2ÄÖ2êÁZApµò‹V^ ©Eg~©3¿ÈávU’àõÁÍK[ä%®h Þ >m))S¤ÏWS½“fUê/º2¥¬‰"ݾG8=Ô¥ŒÐ*Z:e„yÌJùÚ4x壮½›¥Ûä9Ùa^›MWf+ÇË&[f+oá&Ål+'óÎApsh7)f»«¥´tJLlÒm¶² 7Ù2[‰‰]/uê6¼6[Ù2›œ{‹ÁÇq™·¡)ø¸9óñÀ™ÇØïñ€‡<žö8ˆ‰xº‚w¼ &Æx ¾Œ€ÎÕ ®ö½håÕ•Iz¨³ÔÒÕ$¸ü¦¹+Í*ÁKÍØïÑèÌ7“s ò¬B…q£Ÿ6šIÓŠFšUSšU#ͪu5øN+?T落© òû+x.Ú47ŽbÐoÃTpê}©¹ƒÇ,T;ݸ¦n\S(T;Ú†¹w¥˜uRÌT;:I™®.l'ͪ›ÈHPðÚäcN]>àh}ÔÒmZ:“˜ÙûÆñ’Ñn<äï¯`㢫ÁƒJœª^&Ü}oC*8ô®êe2A9IU3’ ±Lã9yÕnö=!Ûçmb"8Øß†Tp¸°Íh•ùGeɼ)8<ÔM½´­QïM-]'xWƒÅ,›©ËF7N¹¼’ª6²'s’Ïêm0ûÞ“àJÆuÚ¸n¼Ùõn*²/Z:ua;¨FÙM8ïý<ÔÊo“¢9LªR°er¨7À–yÌÒ (âÎÑœo,©tß•Ó)Ç$¸Ñçß_Á¾¥VRRs¨S7èÔ ÆÍIÏÅ4&pRòªäÿœtlTòRòÿÛ æNµªHªxÔàé­›&Yèýìû41©÷W´qJ5š¤ÏÏ¥V¾hßKͽ¨÷R‡–³¹.¬ª\x•ï ·”˜Xta—‰¿1 ^Ù°«Ã…]C ~Ðà§ZyˆÃ¾ SÁiðS-‰ Uøðþª|(8-ÝRGJéR¶Ì‚˜TªÂ‡÷W0øR:m‘N[©àd¿«Òƒ÷WEp³òER¦Ô•)ˆÃ¾ SÁi㦚û¤¹+Õ¨HŸ/%eФL•|ÑÜ·:´,”[Ùï›Î¼ª\Hª\HU¹är§êR•Þ†®à‹àæÊleænjîdŒì®¡Ì·a*8­¼ºï›l™=ÕàéÂn%¤(¸[ݸM7N>¼¿úÛé¨ÿÇzõiÖ_WàDÙõ×\ïø$øRpâûëµþ §‚¤'ÔàƒjðT5ûüõQù O"ŠK5w¦©ë NDq©æž8wuh™$Oͪ'Ÿ¦ßhðM žŠìÿ^UóG†¿©à4ø®OulÏP+OÕÒÏPsÿßÑþÀÁKÁ¡zòïA¿ßpbzû{=Óœæ>ÕÜ'Í}ª¹Ošû_«©~éñYꥥ:õg©C Q»?#Nƒ/µqT1ü÷b¬ß𬖪w*²¶:6oVþ‚±ÿ[&À‰ñé ŽŒžSÁ‰RiA<²§äücïjåI=¥@þ©‹Qp¸°gôü §bëhMÁiðM­<1;FWKG,8ч‚Ó¾+ÄzJDQµýÍôN½O5÷ID°SºEƒWB*HHý=7äNƒ_nðteJ žX1¢ÔÊ ¾Ôà ¯í¦Çj«û¾©w%¤¨vóŸ7'2T%¤’„T*!•dg˜c“ØòO>•‚Óà• ›$¤2›‚w‚›3ŸdE¦²"³Ñ¾7µt|›QÈ“(|R ©$+2•™$¤²»Áý°²"“¬ÈTVd’™Ê ü w²:ó$"S™If`*;.ÉŽK%"“ÈPÿH8 ~©SGv\*™dÇ¥²ã’d\*—$ãþ^lý§§d\#C¬)C¬‘—¸)/q#×”Œ£Jñá ÿ 'Úª¦ì¸F^⦼ļÄMy‰}™¡);Žªä߆®à´q©6Žú›‘­!\í;Ùq­«3O~Ú¿§ÍþÀi锈¤ÿçï%þ¿ád6%"‰È¦¬ÈFŽÖ6ÔcEFhSFh#GkS–9ò•ÚHD6%"™b_‰È¶hå—:u$a›ò”6’°MIØ¿|@ žxæšò”6ò”6å)m$ Ûvƒ‡ûþwj‡úý« x*8ü+öùm„8Í]Ù°tW6l'ÝSõN´”]IØN"²7µïdEvÊìÊì*”Ù;:Êì$"»2B;¡]IØN¶+ Û)ÚGSpÚ8%"û¤Þ§ºï$"»‘DdW±Èÿå9~Éôúït&?pš»róvÐ] èNnÞ®B™Ü¼½Ô©#ò㮼ÄB™]™ÀLà¾ÕÆá|”݉b(x ;” ;ÈO;³tƒú‡‘ü˜(§Ø(7ï 9”ŸvÐ'5†ŠER1ÖÛ Ž±q½Ó¾+ ;HÂåæ>b£b‘ƒ$ìP±ÈA+CZü€²aÙ°CÙ°ƒlØ¡¼Äƒ¼ÄCy‰É÷¡äû =”€”,4”“yPv('ó z( K„oƒ:´dåd$ ‡2Gág£ÔÜI@%  è¡LàIN橼ēr‰§Ê%þËW§–‚Ó烔€¦ÊÑ·!œ¾>¤œÌ“¾¤:•—xR u¦¹ïD–öL•íCdioƒš;¹yg7/í_¾yÕœzWVä$7•ù¿üdVýû'³ÔÆQ(s*+r’”™Ê œ$e¦’2“¤ÌT~Ú¹èЪŒÖI~Ú©ü´sÑ©SBj’8•”!†¿??‚öNRf*3ßuêÈÍ;Œ#7ïTnÞE"r)#t‘Ÿv)#tQ u=nðô½/%ãɸ¥ü´Äìø6¨¹S®ÑR"rQ u¥ëV^e´.‘KEB% -eERú³”Œ[$ã–²ãɸ¥dÜ"·¦ZùI+¯2Z©JþYÊ’Z$ã–’q‹dÜR2n‘Œ[Ê[$ãÖrs§×¦Ô©+ºï*”¹È[*!v‘ˆ\ªèc‘ˆ\JD.‘K‰Hü0ãÚjîÊ,Ê, e– eÖƒ_•œ N_ØS"²È ,•kTÊ,%"‹Dd)YT‘Zªä¤ÈÍ[JDVâ'1ÕÊ':H-ò—ª)JU*% ‹lØR©JÄŠñ/ßóüÓ'1U¶H=(‡åϪdà?è¡àªwòÓ–r´RK™ÀE~ÚR~Z"yÔ…¥@j©@jQ µTÁK‘£µ” [T±R*Y¨èÛÅÿŽëo8Å"KÅ"‰/üϼœ¾ãª$ì& »•„Ýd„n•,´I@o% 7ùi·òÓnÐ[Ù°›lØ­ô&½•€&šg«T¥ÿåtëß¿ «Oò}+ù¾I¾oådÞdAoådÞÆÝ*Œ»ÉßJ¾ïŽVGò}«(ð¦Ï}o%ß7É÷­¼ùr²z¬È{°•÷àùáåßpòo¥lR¶RèÓ Ïßé‹~ÃI=Ø*Qj“ù¿•ù¿I=Ø*Ói“‹{«L'ú°ÃŸ³þ'û}«‚ÖMÚÅVêÁ¦ÏÄ=F=øß~1û>>œ¾œl ðxè#uÐAœN¡H™‚H™B‘2ÅCŸÐyL¢Ôû+¼Zº†§ÞM¢T«R(V¥ ïÄÓÕÊó§ÎÕÊÓÇ‹ž®Vž¾çù uêèㄊU)ˆU)«Òß¾Ó®Oßï}¦zmð3ïS­<}}èYêØðWâÕÒÑ׃ŸRs§/+>åz§¥+µtEK·Õ¾o:u[ žd\(~â¾)8}§=TïA½+!EÌB¡˜…‚˜…Þ†RpØ÷P"2è {‘jî$ã1Q1Q(b¢ b¢PÄDï¯hãšZy’qÑÕàéCëÑÕÊÓG)£«S×éÔ™\â÷ȃf¥ˆ‰‚ˆ‰Þµqô%ÕPR†ˆ‰"–ê¾qKõN™%e‚ÞyEÎóþŠöݼo ,]š„™HzçÓä”FBNi¤2F’ŒEÎDÎó64ïWsgãÛ 6.iî©æù6‘JL$}l<•)DÔ@‘êOzçS™BI¦PšŒÖHzçS½óD Š(ˆ(RÙ2Iï|µòƒÎ¼²eˆÛ'·Ïû+:´S­|¼œæ®¼…jÞ†®àƒàSÁiîÊ[8(qb¨Ä‰AÞBÅ0#ið©O‰C•™C™DPŠ"æýy—!Ž—P/A/ñ÷o•ÿÀiãTTˆ>uþ6¨•'ÝPvPòÀ0ùó1HÆ åò"¦‘PT!1È’Ê’$e†r: JJÊ ’2SI™IRfšø˜dÇMeÇM’2SI™IRf*3p’8•8IHM%¤&¥çMC¦ýþªnÎü$!5ULjRLj*+rRêÂljå­¼²"'Y‘SY‘³ÓÒ)!5É œÊ œdN%ã&ɸ©dq¼¼ êØP~ÝT1)"i EÒòþŠ­Ê|˜”_7•ˆœd„Ne„IËÛ n¡s©cCÙ}Фåým\©#ù>Uvß$ù>•|Ÿ›¯¬ÈIz)½H@/e.2ËJËJ,%a‰È¥Ò6V`ïfߥm,åh%š”·A ž²û–2Ä¥m,%"å],•‚N,+oCSp:uÊSJ$-oƒÚwÊ»XC-Ô–²ãÙqKɸE±¥dÜ"·”£u‘£u©´ "iyÔÒ-º2ÊŠ\[JH­¢•WBj‘”YJL,Ê=XÊ $¦‘PL#ï¯Á»‚O‚»Áƒˆ,%eŠr ÓHÓÈÛ°œ¯rȉiämh N+¯rÈ‹ ±RBªÈÝW*HL#QJHb¥ ±¢ä@EDŠ*$ˆ*$JbE†X©Ü¢¬R¹…Ev\©`bÁG‘B11„b‰";NQ…¼¿¢Þ•!Vdˆ•ŠyJK…óŠ’K%QÉÛ ^Š–Šb¥²÷‰¨$Je÷mÊÞß* ¶IDnCéD[‰H"ëEÖDÖ[É8bÛŶĶŠm#6YR[ )bÛxÔàÉSlAl±•ŒÛ$¤ßElòn%e6™B[åîI+¯l™MÆÈV•J›n[Ù2Äùð6¨£‡Zq>q>¼ jéè¡V”ï¯è¾«zØ ¦P>ÆI¢MxBÁ“àMÁ'ÀÍS™ÄºŠuáýU#¸ZºÄÁ//€75÷Fƒ7a$Ö…T¬ ùtÚ÷®ö\^©X’XÞµòæ>ÔÊ:uCºA7Ô©t߇ڸIƒŸjð“6ÎXI¤ ùL5øEÕRƒ_´òK­<Ø2oƒ:u`ŒäSjðE+_êÊ­¼‰ %q>¤â|xEÏÅVÏŦ¹ouê€2"eÄû« x*x#xWðIð¥à8wsã‚ÔƒPêAÍ=ÔÜÁË5÷ ¹‡š;©а"‰°âmP½7Zù¦VœoƒZ:ReD èP:H@ÇPs4wcˆ½¿¢SgÜ}$aCIؘtê¦ZùIK§d\,Ú8%ãbQïJÆɸP2.Нdñ]d(›ö}«¹“Œ‹­æŽ2Îøë2IÆ¥©P{Õ >||)x\Ídœ¢ËH¢ËÈLµtàî{ÔÜ{Wso´ïM ¾ÑÆ))C|™Æ_—IV¤"¬H"¬HEX‘DXñ6¨Á“˜Ê L2aÅû«$¸Úw2sª+3qðæ¡ÎE+¿Ôà‹î»’2¹ ®Þyb]HźĺÍÐ"%±.¼ ]Á'ÁÍ}o@L”Šuáý覼…ôù¦žÊFOekjð6ÎäQ'‘6dS yƒð}*Ò†lƒzW y#…¼™$±÷Wtê†ZºAÇF=•žÊ¦r¢MxÌsÑè±j¥V¾hð¦Vèý]XõT6r:5¥7Ò¨›òµMg^yiÔ]=•DÚð6,‡C«XÞ_QïÊsÒI§íÊsÒ!—8»ŠËëB*Ö…$Ö…ìÊsB¼¯¶iž â=HÅ{Ä{ÝÄ ³“RÚ•RÚÉõѕ룓Rªh^­«®Ô¾¾Ôà ¾Ô¾-]©Wtã”ó¡“÷ +ó@ºNõÖQ{ªö¤× ¥× r´eAÒë† ¤2Gs½Ã¾H¥"î·A žL`Užƒ^Uă<¥cª¥#WçPÁÄAÁıԡ¥`âPŽÖAÁÄ¡«AÕ0‰‘I%ä9Ô[7Š6®ÔÜé©ꩤ ô·!œ.ìv½Ó©S/-•¿ ©àƒàKÁaßUwN²ß§ò”RwNS¡–“ÄÄ4jï¯Á»‚Óʧ<)¥SeûP÷Û ßhðÊw1IHM•,4; ^9Z'I™©tÚ9°wµt¤O¥OR‰§ò]Lò]¨ð¤ð·A=$㦒q“‚‰ªŒ:©ŒúmPƒ'GëTŽÖIÞƒ©¼“ÄÄR~ÚE~Ú¥òEbb)1±( ¦ ™“ ™ß†©à‹àæØP!sªBæ÷WàCÁ'ÁÍ}_ôίæàð\,å» JäT•ÈI•È©*‘s ê]½´‹Þ:U›Tû64§Á+…|Ñ[·TâU㾠꾓óa)çÃ"z)šÊiS•Ó¾¿Z/‡+£Êiß_M‚«ÞI§-õXQ=lªzØ÷WàCÁiå•N[ôÖ•òœ)¥¥<'TRš¥”Ò"¥T}¼>©¤4ÕÇë“jBS}ÿ=éîYJ1£¸¿ jå)*¤ ³(*TÊü§¸§ú€{ÒØS}=©°1ÕWÈ“J ß³q›T£­â2›t›­è›2Z·²a7é6[é6ô)íÜ*€Nµ¹•§”¾Fý6(8é6ê{Ðï¯èبçb“§t«¤P*îË]jðäîÛÊŽÃú¸m¨BÞ_ým…öÿýðòýåä_?ßm~.;îÂÁ§‚/‚—_æÚ ¿Ü} Ÿ_ ^¿+„'­|ª•Oš{§•Oµò×»yÂ[xK‚«cÓhðM ¾ÓÊ÷¦ààjå;ºîO+?Ô©4÷¡NÝ S7Ôô\ uãÍ}ªS7iã¦Ú¸I7Õà'=søz¾Ô¡]4÷¥NÝ¢•/uêŠN]©SWtêJº¢+µq›¿Õà7 ~«ÁoüV·aãBÉ÷»Òï‚O_7ƒ¿KõNx4§ÁÇPp|¸ÁÓÊ+õ H=¥Ü•~\Í='Á—‚Ã[w×"¼ÑÜ›š{kï Nso桾?y}»_—)¥Ï‰‰Rq™¢ öRìEÉ¥ÄD‘9PªB­HŸ/•ºPT¡VÊáV”žW*=¯(.S*ó¡(ó¡T\¦ÈáVÊáV$ãJɸ"‡[©°NQX§”Œ+JA/%ãŠd\)Wäò*åò*²¤JYRE–T)KªÈcVJÆɸR¹E–T©¨P^m‰ÈR.¯"Kª”%U”Ý·•ˆÜdImUb¶)qb+Kj“%µU úŽAð©à‹àfß7‰È­,©M–ÔVEܛЏ·²¤6YR[•Ymrym%"7ɸ­bR›Åºĺ½ÜàéÂ*w_'w_Wî¾N!-EÚðþŠŽòçC(· ·JH RŠó!ˆó!çÃû«$¸š;Ô† ¨ ¨ P#ƉPŒï¯hß•€$ ‡ЃÒ6†JÛä«Mí;™C™D—ñ6¨}'3p(õ€è2Þµqäê*˜8(8T4p Zy•42 Ä,ßEßE(¾‹ ¾‹·A:Ò.ÆTs'#t(íbv1”vA|¡ø.Þ_Ñ•YêÊ,z.TÊÊ VV¼¿"§b‘ƒ”“¡”“AÊÉPÊÉ ådlµq”®3”n3H·*ßfkb(¶ ¶Plï¯Á§‚/‚›CKl¡Ø6‚Ø6Þ†®à4w¥ÛLÒm¦Òm&é6Sé6“t›©t›IºÍTºÍ¤0îTaÜIªÑTaÜIªÑTªÑÊǘMm\§ÞU¦Ó¤L§©\³ÓàÍçiÞ_ÁÕÊ“‡|uêÈõ1•jD,+oƒÚ8Òm¦òOŠO¥ÛLʧJ·™ä`Ÿ*ˆ«(¥˜)fŠ*ˆêmh NWFiVE 3¥"bE^£R^£"¯Q©„™8xuhÉkTÊkT”0Sª¼Žè°BÑaE‘ר”׈è°BÑaE-š»Ò¬Š4«RšU‘f¥è°‚è°ÞuãÈí£Ø´‚Ø´B±i±iEm5xòÛ”*|( imåxÙ”Sº•ãe“ãe+Ýf“n³•n³I·Ù*]gSºÎVé:DÆŠŒëýÍ]é6›Ü>[é6›t›­t›MºÍV ±›Ê.—×û+Ú8åöÙäöÙ*ßfIËV!­Mù6[¹}6¹}XØÛ 6ŽÒu¶RN6i[ùm6åÛl•oCT`oƒ:6¤]l¥]lªLTLb±Éo³•ãe“ãEQÅ&Ž—­f6E…¶Š mòœlå9Ùä9Ù*afSÂÌV 3›\[©{Ó©S%'›Ê*Ù†¨P>Æñòþ*ž ÞÞ||*øx¨¹ƒvñ64ï > ¾œæžjîIûžjß“æžjîIsO5÷¤3ßÔÜí{S‡¶Ñ¡mjð6θ>’äÞuh;m\W7\©ä’äÞ5øAƒ7ÚE>“–nª}Ÿ´ïS-ݤC;ÕàA»xÔ±Y4÷¥V~ÑÊ/ußùRƒ/ê½Ô+Zù­ÞºM2n«c³éØlulP¾›¬ ÈúxBÁ;Á‡‚O‚//‚«¹Í=ÔÜ!i$ù^É÷Pò=‚æjîIs7Là$ßCÉw"ßKE¾÷þ ž‹Pò= 2’Š»/‰»ïm˜ ¾^Þiãº<$¼ jð$ßs`s`*æÀ$æÀ·AÍ}ÐÆ 5÷Asjîƒæ>ÕÜ'Í])'AÊILuãH9Q¼…‹¿ÔÆ-üR·hã–Ú8RNB)'Ä[ø6¨—–tE{øþŠæ^jîEsßêÐnÚw¥YŦ¹o5÷MRf«¹C\&SyN’<'©<'Iž“Tž“$ÏI*ÏIB>m¦©ÂÎ$Í*CÍ4«Tž“$Í*•f•¤Y¥Ò¬’4«4Ù¼ï¯hîJ³JÒ¬åcåãÛ Oª‘¢|L¢|LEùøþŠ­Ò¬²Ó…Uš1F¾ j)ÂÉ÷W4÷îæNoRÌ’³T~›4w¥˜ÝåÛ æNš•¢»L¢»|Ô¾Oº°J1KRÌ[f[f¦rû$¹}²TïE½—Zù¢c£Ü>Dw™Šîòýí»rû$¹}R¹}rÓ™Wº ‘m¦"ÛL"ÛLE¶ùþj|*ø"¸‘q”“¦”“FÊISnŸ4w¥œWçÛ æNa¦Â:”“–jã’6.Õ¡%·¢úÌFÊISÊ Q}¾ j4¥œ4Š µ®æNaÅúþj\ÚN‡¶«C;èÂ*·O#·Ojðƒ¯‚JmÒà•vÑH»hJ»häöi*&E<¥¯¦­Ä•šÒ.ˆæômPƒ_´qJ9!šÓ·Am\ÑÆ•Ú8ÒmKêû+zm”Û§m:´J5j¤)’Õ÷WôÚ8݆ü6Šd5‰dõm(§Þ•vÑ)i¤+×q´¦âh}U7o]‡ÿ½ jðä»P­ï¯hðJ=èêM›F×ÔÜÍ]%ô†sWGA¥®rN:¹>ºÒ.:iŠ`öýÝ8¥ÁìÛМž ¥]tÒ.ºÒ.ˆÞ6»Ò.:d´fŸjåI=èJ=è¤t¥t ëô¥–®hé”|ï$ß»r>tÊ9é¥Oº«ÀJ' Û•„í$a‡ŠŒÁìÛ Þ>|¼œæ®’Fˆ`6ÁlÅk•¶1HÂ*’Õ$’Õ*qb®XRß_-‚«Á“Œ*1r=”Œd+–Ô÷W´tÊC>ÈC®hNs©ˆFs˜ÊGMD£©ˆFß_ÑÒ™²‹$žÒT<¥I<¥oƒ:´”{0” K4§oƒZ:2B‡’qƒdœâ)Mâ)MÅSšÄSšŠ§4‰§ômPûNþù¡Ò2'ùç§òÏOòÏ+šÓ÷WàCÁÁÍ™'šÓT4§9É‚V<¥I<¥©xJsRô_&¦"M"Í©,èIôTô$ z*õ`’=• <É*þ>)þ®˜B“˜Bs*ùNL¡©˜BsRáÃê¼z¬ÈU\ﯨw•[8ÉŠœÊŠœÂVd›Id›oƒ|Üì;±e¦bË|•WG1hEw™ÄWù6¨¥#x)xQy© ò¢9Ew™ÄWù6¨•' «ø*“ø*SNæ¢$±¥­kÒ¾OõÚP’ØRô" z) z‘ˆTœ¹ÈѺTþü¢üù¥òçWÑÒ)vQ’ØR6ì"v)v‘ »”„]$"ébY‘¥¬È"+R‘.&±&f)W$ãía9Zñ`ñ`–’2Dý—¥ÄD‘˜PìyYdI•ru…óJ½óEï|©wžØóR±ç%±ç¥bÏK¢¿{ÔÊSzMuãHL”²¤ˆ¿îmP½“)¤ä’äÞµqdI•Ê·!¹·A-b¥ 1b{Ô}§pÅ —D—Š.‰.\nr÷)·÷WàCÁ'ÁÕÜILlŲ²ÉÙ*œGnoƒZyò×)¶$¶·A­< )EÂöþŠV^ɸM4)[‰ ¢A{ÔÜ:eŒ‹Z*µÜ$¤¶R›RR·Ê)ÝäîÛJH‹ÚÛ OÞ­dÜ&Sh+ž“?¨Ú~Õˆ$µÜªxö®n™BŠEíý½6ÊÚd mÎÛ$a·’°Ä¢ÖþÊ¢ö øÿþû¯Ë`úÏoøsÓ ýáà—á—„½àCÁ©÷Tƒ¿rNNxSƒo´tMõÞÁ·÷à—ü`øø˜~½ó'|ª¥›Iðfà‹ŽÍRs_´òKÍ}ÑÒ•:´EKWjß7íûV½oüM·Dð›{é‚77s€¹G¤‚Ã}¿Y{NöæÍa8ì{ô0ðoÝMPƒðA7º‚Ó±ù|NƒW÷ý&’¹àj㛥V~Qï¥V¾ÁÕÒm:u{*8ºm–.Xº›*„áàª÷ x,/‚«Þ“æžjî¤]¤zmnZ‹®^›lpãn2„÷ApshsÐÒ©×æf]¸àSÁÁÝàié¦y.rÒ¡UÕM0pÂKí;©7uÃiðJ»È g¾)õ =àCÁ±÷¥àEp³qw‘ý ©àÔ{ª¥Kê=ÕÒ586­¥‚7‚»ÞÁÕÊ“)ÔºÚw2FÚ,‡ç¢)í¢‘1Ò”vÑ蹸«qN+¿Uï›zßêÐn:´Ûl\'å¤?SÁaãºò]ôX7‡¶“vÑ3¼\Í´‹®î{§ûÞ•ë£wê])'½w‚›×æ.¾<áCõ>¨÷¡-yNºÒ.:=V}ª•Ÿ“àæ­ëdIõ¥æ¾èÆ©·®Ó[×Km\ ‚« KšUWo]§·®»·Žì¸®ì¸AOåPªÑ ÇËPŽ—AªÑPªÑ —v„9´#áµÊŽ9®–Ž4«ÑBÁiéšZ:R†òzi‡2½´cªÁ/2c §cSæ©ä§[-Ý÷¡,©A~Ú±ÕÊoxi§òÛLòÓN¥YMÒ¬f˜•Ÿä§Êí3)*4Õ}Ÿ¤YM¥YÍ\7õlpe¦Ò¬f£¥ëFÂNR̦RÌ&y¦2Äf‡7•‹{’‹{*½n’^7ÇPpZyåtšätš* 6Éé4•Z8I-¼ë¤Nƒ_jð‹ÎüRKGZåTZå$µp*‡Û$11•Ãmn„›çb=°tKyÌyÌ–R ©…K½ó+ÁKÁaßWš}_¤®T½'õ®,èEôRzÝ¢`âRÁÄÕéØtµqôί®O¹Ki•‹"¡k¨¹ZyõÎ/ .¬¡.ì¤+£ÌÿE‘Ð¥4êEöûR¾ÊE¾ÊUêÌ ^ù*ù*—²ßצû®òE ùR ù"…¼³òEÔRiZE y)WgQšVESðEp³qEžÒRY^Eö{)û½è/õνó¥ôù¢w¾”B^ôÒVW+OOe)Wg‘«³”N[“NÒikÒ¾/5wJÛ(å=(ŠŒ”òyJy 7R·R 7©…[©…›Ô¡àIð¦àpê¶R wRï*º)ëc«×f“ù¿›š;R·R wG¸¹2›ž‹­²>6YÐ[½6›ž‹­rÌ6=[™À›|•[ù*ïo•ŸpÚØd„n¥mzm¶R6e}l¥mPâ1)©ñ@Jj<&çäýU|xPï&2d¸Åc"#ñ€fO¨Á'õž ÞhîM­<„6Þ†2pmÄcÞºx:ͽ«¹Ch#ž¡æ>hã¦:ó“z7ªÑû+ì]Í}ÑÊ/µò‹V~©Á¯ ðRKW´t¥6®èЖº°E+¿Õà7Ý8ã-Œoa¨ìýÐ*#ŒVA/m#4"ið©f`¨äÿzëÂØqAµÆÝT;ð6¨ÁÓS]-]Ÿ_NOe¨§2º¡NÝ Á‡[PéÁÛ 6nÑÆ•êŒÐˆR§Ž^›0!ì÷WÔûV+¿iåZI¯Mª×&ÁåiŒÐH0B#•b–¤˜e¨¹“b–ÆŠ ªU;Ù n’F";m\W×iéºZºNûnŒÐHz.Tí@$X‘‘SÁÁ—Ú¸‚w>Õk“ôÚ¤zm²hé”n“›nœñ˜En:uîµ!#´™Œ—hàòŠf|VAµÑ”×è¹PÉÿÑ’ænRÔ¢‘×”nÓõnRVÞ_ÁÕÊ“nÓÔkÓíûH§¥Sf`›´ïÊ lôX©Â‡hdªÂ‡hõm©#3°©§²‘%¥*‚*¢muæ!ë#š²ã¨ðámè ^W½Ó[×Õ[×é­ë†ó!zÐàMÝDt2»ÉúxU7”ÑÁ½]yÌ:d÷EWz]'+²+½ŽÊ.¢+•]DWŠY'ÅL•]•]DjðôTveRÝÄÛ æNja_®÷Ep5w²"UáCtHœˆ¡Üûƒ|VCé6âqoƒ™;¥ßÇP7n@¢ÔÛ àP{ÔÜI=SÁéÐ% Ç¢¥3Y1È–&×(9T|Lr>ÌÇ ~’ˆœMõN§nšrÚ˜~Ì™ŸôΫ4ì˜P¼Óï%BÇTþ:ÊdŽYjãÈå5MÞEP:n,ul(!6V¨Þ!!6–)|x5 ®z'åD¥¤%…ÆR§nAòÿÛ0Ôƒ5ÕÒQ@m©§’2c) »ÈšPÉAÙ}Q&a&Šö½”ý^$"KàEî¾RZe‘VYêµ)’°¥ö½H¯+“¶©Q[ žn$Ÿœ–N9Ü6Ù°[Å"7Y‘[=•’ÿc›"¯Ødnå1Û ÜêÊlÐ{¨ÞÉSiZ±I¾oõÒRšVìéà´ò†úïý¼´[i•›\ܻԩ's>&¯2)U)TÊ'©wshß_M€›Cûþj\ ¾Óà£õýõnmÝeªt÷WAðfà‹V~©c³hð¥ 3©fò)ZùR+_´ï[ ܼÆ Ì€²‹T„“ï¯`îa|•I/©rN’rNR%dtZ:XyÕ>Ôà'Í݈‰$ÊÇ·A ~ÑàÕ• [õ³T¬‰™ Ï¿ få“NÊ=H"ÌTb"õ®Ž q÷e—Wæ$¸Ñ.’Â÷oÃTpÚ÷¥öÂ÷©Â÷Iáû·Áh"ÌÜjéH5RÌIÜ}©È÷’ØóREÀ³AX'[WpHEÎ6|Ðà•nÓH9i¦ð!ÿˆÿ†›Úÿ÷W4x¥Û4Rš:uÆME@—‡}BÁ“à]ÁáÂ*þº÷WAps㈿.U6)šŠ€.{§¥ëjéÀÙ˜}¨¥´òSͼF©8Ü’‚‰ÙM©Qv²&º‰Ëd/:6JÊ ÛÛ`«Nú¼ŠE&‘°¥¢AK¢AË¡4«¼F9Âõ/í0~Ú$´T4hï¯héL6Ð"¥ŠÃæh4xe 2…†2…½6Ãð]ä4xå»$ßUøý廤Œ©OoÝPoÝ íb¨çbz XÔr’„Ê£(ðÛÐ|\õN÷]ñ˜å$=›<ݸÙT杖Ӥ*½¿¢jðáæ¡žte¦º2JNÞ†¡à4x¥ÏEƒWÚÅ$g£"ãzE½—Zº¢¥+5x2Øû+º2&)42¿ æ©\P±’K=ýOE‡• hNSÑa%Ña¥"¤ÊE÷]%$%¼ ªwz.–’°‹DäRø"¹¦Ú÷E½+ŸÕ"ŸÕR>+¢„zÔ©#}~¹‰©H™Þ_M‚›¹„°ß†©à‹àféˆUémPs's ”9PôÚ”zmŠ^EÊ”DÊ”Š”éýÕ ¸|§Á+ݦ(°Rê­«pu꺡Î<=V¥”“‚š‘·AmùçK¹>ªhîê±¢|›T”Pï¯@»Ø&úýU¼)8\Ø­"¡DÊ”[½6›^•®“›œ[½6›^›­l™M÷}«@*eû¼ jð”8±Õs±I5ÚÊ–ÙdËleËìIWêØPêÂV¾ÊM÷}ÿµJ+~÷ûŸço¯ÿGx8xüoßÿ' >»‚O‚—7êýoß?àÔ{SKpÿç3>€PpüPƒŸàs(8õ>Uï‹íÚ^´ï¥V¾À·ZùM½oÕ;|‰û¹ys~§ð s¿sžpl¢¥7„O§Á7sl¢ÓÒuµtz橼il.¸ê}ÀkêÂ]ØPöþî _jã Þº›¹†áƒà®wÚ¸­6nÓ¡Ý¥à°qù˜wÓØ\pÓ{Òs‘Ѽܬ|&›ÌTpš{šûž n\¶®àplî5„Zù¡Vžä{Nµt‹z_ª÷Eû¾†‚ÓàK-]ѱQÏEÒs‘ê¹Hz.²Ô©ÛðÖ¥Ò.î/è^p5ø ƒoYùFÆH{†‚O‚›¥»éqNx„‚Óà•jÔH5ja^Ú–4xõÖ5Ò¬ZªÁ' ^YRžÊû˼ §}WOe#ÅìNyd8ö®N)fMYR³6”i“6n©3¿Á§‚cïêØ,š{©3¿á¿ÙuNsßjãÈkÛ›þÀ}ïÊŽëO\õNOeWŠY'Ŭ+¿M'Ŭ+ÇK§ç⦞a8œº®^›N¯MïKÁiãÔkÓ­¼R ;©…]=V}Ò±™ªw²"ûTs'+²+¥´“RÚÕ[×é­ëê­ëEû®ÔÂNo]ß©à4÷=6n(#t</‡ ;”^7H¯ʆAƒWªÑ Õh(§Ó ×f¨×ftZ:õ\Œ1>|\-ݤ¹+ŸÕ çb¨û>\Ø¡ŒÐAFèPºÍ +r¨çbÐs1”Ói>ph§²ã&)'S)'“”“©àƒàjîIƒo浙䣞ÊG=Ék4»‚“×hª+3'Í}™3?éÆM% '#S]ØIz*=É™¥ö‚JSy榧Œ‘EÖÄzš‚ÁÍ…]û¾Ô…]ta—r}¬l7g~Qx)cd‘5±TThQ÷N Eø¤¥›SÁáÊ,uaiÔK]ØEaUêÌÓ•)eAEFê™ ¾n®LÑ™/e€y KàE‰¥d\µ"¸š{§Á+]u8u¥©E"²Ô+R‰K©Ä5hé†Z:Ê»(%ß‹ ðRx-Ú¸• Nv©•'…¼”B^$ K è"û½T\¦ð±RYE¾ÊRêÁ&õ`+õ`“B¾•¾ÉßÑ|\Í|•[i›+[i›^Ú­¼;A»¸³EÞhî*„½ÉѺ•£u“j´Õ;¿;í»r}lr´nåhÝôÎoõPoò”nå)ݤ×í©Vž ±­â­ä6зz*7Ä ãT×oð÷WƒàÛÀá­‹Çx ß_u‚O§¹ßÅÇ9O¸IÇýøRç_ ^ojã-]SK×héšZºFK×ÃÀ!ˆüñ¡O„:uCºAKg’ƒ’C%Ç3h߇šû €O5÷I÷}ªc3éØL5øEƒ_êÌ/ºqF%ŽgÑÊ—:´ ÇSjî›N *E€ýñ O„ƒÓ)Â8Þ_u‚«ÁÓCá¯Ê£þøéï >>œæžjî ÞºhjåA)ýø|)ÃiåMô?( <¢«•ï´òF§}U76HÊÄPWfЩêØ :6JLĤ »Ô•Y´qê¥ zic©Á­|©•/ZùRg¾èÌouæ7½´[ ~Óà·ZùMWf«SGÖDšŒÖ¼þ¢O¬"ü´‘êOp>DçÃû«Ipsh¼oC*ø øTpÚ¸¦ßiå»|oWƒ§‡:‡ÚwÒçS)ä9èÐNÕ;ä]¼ MÁiðSÚI‡vª¹OZy¥Ï')ä©ÄU.||Z—á4x%e’¤L*)C…‘JL$‰‰ÜêØ@ŽY¨Òƒ÷WAðTðFð®àƒàSÁÁKÁá¾ÿQñN–T 5÷ ¹+ÙÈjÊgÕÈjÊjd 5e QÝÄÇ׎N¶) Keoƒym‰È¦\^Tvñ6¸Þá­kCí;#m¨}´ïCZ’°mªÁ“Ë«) ÛHÂ6%ã™Bm©Þ-ÝRW†„TS>«FBª•ë.¬²¤YRm«ÁoZy%"©båã{Ð §¹›¤Ðè$a»’°Ôµüçë—žNBJU¬¼¿‚¹weˆu * UðòþŠzojî$&T½Ìû+Zy%&:dûDïª÷N½›¹è–®«C;hé”Ë«“˜èÊåÕ)2Ò•˜ø£ªæ®NEFºŠŒtŠŒô©Vž"#]#\^]#ƒ^›¡r*9 UrTrªääýÕ ¸‘ï2^ÞÕ;©ÄCE=VCé´ƒ«¡¼FƒtÚ¡«AÕè®w¸ïCé´ƒ«¡«A*ñP*ñ (ðPN§Aoݘjð¤ÓªbŸÏˆŸp‡¤ÓªZ¡÷Wô\”ZyÒiG©•/ZyåŸäŸJ«¤US“´Ê©/J ß³tTjô6„‚'Á›‚w‚§¹‡›{\mI™©¤Ì$)3•ãe’”™JÊP•VLžzWQàI:íT:í¤0îTÁ…Ibb*11ILLÆ“¯b“Tâ©\“ÄÄTî}*1 Ub³èØ”º2E‡Vù.¨ÄìmPs'ÿ¼ªP{E¯TàËT ¿¿J‚7Ÿ ^Ws'!µ”Z$¤–R‹¤ÌRîýEîý¥Üû‹¤ÌRRfQ]ÕÆ¢úR¦ÐJš{S×hãT¢Ô¢D©¥Ü>‹Ü>KÅßbKb‹ 1UV‹Òq—ŠM,²ã–2ÄIXUÔùþŠ^›X›XJÂ.’°K9¨"5TEj, ß/%ßÉ÷¥’ÄÙqKù¬ù¬–2WÑ¡Uò}mš»’ï‹‚ K™ xJ£Tø¾È ,% ‹Ü}ª˜7¨˜7T1o èR©ÈìQ*þN¥ÄQJ@ èRº(2RJ@™¥ÌÀ¢ÀJ©Tä"]*.S$ KÅeŠŒÐRò½(E­ºƒÁÕ™'#´”ˆ,‘ªŒ:Šr‰KVŠâ戴úýö®–Ž"#ªŒúýÕ$¸:óÿ?gôLÌ+éb[9èˆ C¯Å—Ôï…Óš^½ï»¥¾«÷½³á¦§:øÎ•V«ÿ€ëŸ·NZ¯Î:oy÷êà½uÚxuÚtþô¡·:øÛZº[½q·õÆÝê´y­•ÕÁ¿ÖÊ¿jå_kå‹Gô¯ó@¬JqOê÷ÂiM/–N:Äjõÿ÷ß «5}WÓ[/ÕÁkëàµRïüÐêè¿:YÕÒu°H*ŵõòߨJ}·Þ¸êJÛª!Óª†Le·ÎùSüiü©þ´¾xö@¥óˆšV%h*Özã¬òÞyÂí7jUÓ[g]õת`ûª>°Ÿ¿QÕÁ·¾ãÄ«ƒ÷ÖçÝ«“Ö['mõÙú÷½Vÿ¾W¹­“öV{_´­oØêÏûÚúó¾VÞ×ÖŸ÷µúó¾¶þ¼¯ÕŸ÷U:¨V_Эî¼ß¨UM?­éVMï|`µú~×ÖO¡ªzï÷Bëà¥:xéü­¦·Þ8­Þ¸Öï8ÕêkýŽ«z/´¼7•~GÕùÀjqSI[µƒZQ´E]Њºð{¡s±Ò*Ûènü®~·¾Ê6º{_½q§õÆUÑHOë[ýn1~£ªOÜi}â¬úÄYëWeme­²Zë}·ê}·Öûî•÷V4ªÚBFh…ŒÐ2B+d„¶Ê.µj«ÔV[¥Vm•Új«T­Ò…¶ÒEUv©úZKWmu¶ˆZ'´…ŒÐ ¡-d„VÈm!#´BFh«+ó7jUÓ[Þ«t±Zé¢BFh ñU½q­xP1´Õ•©«ú~_­ï÷U}¿·˜¿QÕ9ß¹©2B[È­ÚjêüÚÕôÓš^u­=ê X¡­žP]§ZºÓZºS-]kãeU/«µñ²ª—VÉ©®*œ¬V8YU8Y­p²¬ZºV8YU8Y­pR5´þ^h].¬ºÖµnmT¬ß -ïÕ¾M‹õ¡« 'ë¶¾Ú·iõÃþFUç|kßfÝêœoÝY·ôÞ:ç«h´ZѨB…h ¢«xPJw+íâï6¿NkºUÓ½5½:øÖ• ò{¡ó­P!ºµå½º‰¼µ§^yom>T¤‘ß Úš¾ªéÖš^­|kóaWád·ÂÉÞÕÁ·ö.v•.Z½ÀZõk«Xw•.v+]ì*]´zµâœh‹sòUu­+&EwëÎȶòà[+_ýüß­oتVX[µÂ¿QÕç½õ »«oؤå7jWÓ[׺jóa·îŒìêÎH«Y«Ndmu"ÿFUßzx`Wß°­Jåß(­¦¯Öô]M¿­éÕÁ·¾aOukã´nmœjóá´6Nuo¢E×ÑSÝ›8Ú:øêÞÄim>Tpžß Öš^y_­ÓfU§MëûýTßï§õý~VuÖµ¾ßOõý~Zß狀7ÑBé©îMœÖ½‰ªÈ[[d!­ÈBÚêתÈ[[EÞ¿QÕÁ·âÁ©âA‹,ôU½ï­Ÿÿ§úùZ?ÿOõóÿ´n.T`¢ß Þš^}Þ[Ïž[]ënëàoõ%u[++ï·µòÕðV…ºžêÖF‹ª¤Ué÷ÂiM·jzëW¥ ký~¯ L¿´5}UÓOkºWÓokzå½N¬ '­öy­˜NjiieRk¥‹Šª¤ÖúùoÕÐYè7ªRoíÓVíóÚ‚óhU¯­úx­Ø>ÚbûhÅöÑÛG­Úl´ÖS^V=åe­‹•U?…¬u±²ê§µ.V^].¼u#µ¢ëh«}^«öymñm´Ôh«¼^«òzmj~£*ï­Ï»WÜ[O2{õ´·ö¬*Lж0)ZaRÔ[±Ð‹ç©[kå«‹•·®6^]m¼uµ©@%ê­m¯.VÞºXyµñâ­§>¼ŠF-ÒÈoTµt½«Mnëjs«Ç6nëÞÄ­ÒE ¢*D[¨ß(«¦w–îV[-Ú†Þên·õäí~þßÖÏÿ —ñ{¡¥^ýü¿­Ÿÿ·Ú`¿­ûï·ú}[ÉêV¿aok‡üV÷ oëô­‚Ùmý½ÕÐÛÚ£®€ÚVüFUÞ[ÁìV׺ÛJV·úx[O¸UÀ m!#~£¼š~[Ó‹¥k'~£¤š®­é»šÞò^ÝHm'´BFü^Ø­é•zëA©Šù -æƒVÌ}­'™_•ë^+×½êfâkí¾j·ðµbá«v _k·ðUWÚ×Ú-|Õnák=,T1´Å|Њù -æƒVÌ‡ß §5½:i[[¯Úê|­o™W}˼ÖVç«þ#öZ[¯úù™úÿõ?+·ÿcÔÅô¿± ÿUMÿçŠøŸÓÿy¤œþϵîŸé»5ýÓÿ¹”Ó­òn­ƒ·êàý¯3Ý¥š¾ZÓw5ÝZÓ_1ý¶þV;êò§ßÓåoµ¦ŸjúmM/¼‹´^‹ÓF´7½R_•—ꜗvdêé·˜¾[ê{UÓ[ÞOqÚüû'îzºWÓ[ï»UêÖ:x«Þ8ï\¬äV§Ííx׿bå5ŸÍßÓ¥ð®­ëü¿ÿÝüÏé­s^µ8ë´uÎ몾uÎÿ[ûüŸÓwç:ÿïÿ™Þzãvåý´¼ŸJý´¼ŸR½uÚTµÕš^Äm}Iýû?¶¦w>ïÿvÿçôÛùÀþû³ÿœþzÓ ï«õ·þn5½óÆ­*×ýûÿ«zzqÖ­Ööß*ý3ý´¦WK·;+ÿïŸrþsúé\ëþýÇÊNo]ç×­¦ßÎöß:Ðÿ˜þïìÕô]e›-•ßÕuþß'Øë镺vκË.ÿ™ÞR¯¾&öÒÖô"YíV4Ú»Rß-ï§øÈìÓ›¾«é­Ó¦úšø·/²œ^]ç·u.VÛ+ïÞ:ø*Yí+­éÕÁßÖÁW_ûYkz±òç¯sÖ*žÖåâT×ù#­éÕö´¾&ΪÔWgéÎ.Þ÷³{Ó«•o}MœS­|+ê#s춦WÚÓÚ=ø÷áÀÿœ~[ÓoõƽÖi󊃷¿ÎÊÿÛÜ÷ŸÓ[¿ß­úŽû÷A©rº®jzçraU4²Ö9oÕ9o­o«¢‘íÎYg§zã¬óy·jÇÌì´¦Wßú–±êœ·×ùš°*ÏÛk-]uÎ{ëœ÷êœ÷ÖuÞ«sÞ[¹Î«\çÚyßÿíÒúgzç}÷ê#ã«7½ZºÖϯ¶¼¼õ-ãÕ·Ì¿O:•Ó«ooå:¯>°ÿ>éTN÷âjãÞZºêç­Ÿÿÿ–ýçôV0ó*YÝÖ/è+ÅÁßV4ºR©·~ Ýê#s[™[³ÛúÈÜ]y?÷ýžrºµ¦WßÚæ½ÕžÕmý–¹Õ·Ìm³[Ý—¹·ó‰»wUÓ[_ý–¹­Ì}Å•ö¶¶¼nõy[±ðV_‘ÿv¬TÓ_õùZ_‘¯Ú!­³W}þÖ7ì«n*½ÖåâUŸ÷×ÚúxÕÖÇk…ÒWí¿ÖåâU[ï´Þ÷êrñZ—‹Wý{­/©WÝH}­Í‡WíQ¿Öö½ê´y­÷ýUï{gïBþŠÛ¸¿VkºÓE:Ó‹/èß ­ƒ×êàu·¦¿búj|ñ䃴ž|êÉùۭ黜î­é•÷Ózß‹¬´ž»øÚÅôÎsR=w!­ç.¤zîâ÷ÂiM¯–î¶þV߉"ß— ‘ÎÐߨ]Mï|âDŠs¾õÜ…TNˆ´>q²ªƒïDâß(«¦{kú-¦wn.HõÜ…Hë+»R?­÷ýTê§uÖ\ZÏ]HõÜ…Hë+^½qþ:Óoõ‘¹­ƒ¿ÅµN^ë}/¹Èk­ü«¼wö¬ä_ØùL×Öç]ÿ¼šÞYy•âàUZ_ìY‰jç#£Õ´®–z±O+­gN~£´š¾[ÓO5½å½º\èn½q§R?-õS©w6™E­Ro]mÔ«7Î[+ïÕÁ·¾ßµú~×Îîè­NÚV<Ð[-]ëZ§·ôÞ:m^å½w±*v¤õ¼¬*Û´˜‘êYÚš^q«øý.ëõ¦Wïûë¬ü®ÎùÝú‚ÞUžßÒ9ø­ÅÊ·žö‘]ýØgd7•dw¶¼d/¯¦·~Ußú½«_Ðû´Ô«¯ÈÝJÔ»ú ¼[‰zßjzç9ùߞʉéMæßžbúiýŽ;ÕwZ¹îT×ºÓ fÕSr¼5½ú-sZ+^ñÆÖÕÆªý:ëÜDþºÕô–zõg­ï8«>qÖJ•VE#kE#{ÕÁ·Îy/nmˆwžx‘êö½´n ÿFWZo%j¯v̼‰½¸#ö{¡µtU(õwZÓ õû×Yº[ý¾­“öV›N·óè‚ÜS\.n+YU·qåv“[%«{[Ó«¯‰ÛÚxùßîXþÿ§¿V¶y«XºÖý8yU(}­ëü«.Ô¯s¡Öê¶Žþuž|п"×é_çr¡Åã÷ÚúS§VÿÊLMÏåt¯¼w~¿§^àÿúÏb߯I«¢RLï\¨UŠL«­-îߨWLo­¼œjzk奨xIE’åôjåµssA«?¸©¶V^‹‡BSo`=½8ç[ÿKÅÿ9}·¦ÿÐÖ–×oÔ©¦·V¾Ø1Sí\çµÚtRíÜÂÖUõôâ[©© å¿þ³é£³tÕÖG*¢(§ÉJwçÌ©¶à?§·.•»ºTnïM¯¾óc$AîÿszçÇH¢Ôÿ×äµ5}UÓ;ÞTÓ[_§xªSv²Í)ž9I özzqηþnóU­|ç×ÄoTñ¾ŸÝzãvµò§µtÕ—Ôi}âN ·¾ø™ˆÐåô*œXçO^jU ·Ö—”Uç¼u¶¼´úËÉï…–ú©ÔOkzu©´ÎìjÕ¥Ò:{•j·šÞ 'Vluþ^8­éÕiÓÊ6^<íó{AZÓ‹s¾õŸõêbå­oØê_ê­lã§òn­ƒ/¶¸aµs©ôêkíé­¾ãnëó~‹ç.곜^}IÝÖ—Ô­~Œ´þz ·º\´þ; Õ¦SY–Ó­ø~¿­žÞO(Ézzñ‘¹­}›W0´õ ¹VÏ'r`9½úĽÖW=†­¯µt¯úĽÖîÁƒŸËõÿ‡[å°:i}²Öþs:lN^ŸD¶¦ïÖôSMéZM×ÖôU-¬\Ÿ<¸¦ŸÖô[Lß-õ]y‡PÌÿžþŠé§¥^@1ÿç?Ø[Ó+ïÖ:ë̪é-ïVy÷–ºWç¦W?B½õ#Ô«_‘¸£þ¿§WÞ[7ª’ù¿û×9ënµcv[÷"ouoâ¶rÝ­6ÜnëZw«\w[Ï]ÜjËë¶®u· f·õÜÅ­.•·u/òV¿"oëRYUÜÿÝÖcwWÞ·µ¦_R·•*oõ„ÛmÅÂ[åºÛÚp»Õ†Ûmý½ÕÍ…ÛzDíV—ÊÛÚŸ¿U²º­«Í­®6¯•¬ª–ø„Ü®§§Í“ÎöUW›× fOJõÎWä«6^ërñªhôZ쯊F¯õy»¸X½Ö{ÕÓþ÷ZØWÝ |­»¯ú!öZÛ>UWùßkmûTe㯵Áþª ö×ú)ôŠMfi=‚.ÕCàÒz\þŠ/hùëìœHõøï…–ú®Ô;'­üY¥n½éÕÒuNZ©„NÔêrz±{°Óõôê´¹-ï·ZùÛzßo¥þZÓËsþuN)"±H'‹ßqÒzZ¤¸/#­'™EŠçëD´¥^|ËHëi^©žæý½°[Ó­šÞ:øS½qç´¦§´>ïb•wk©[å½u¹êrÑzšWª§y »ž^6·uÚÜꤽ­ƒ¿ÕÁ·®6R]mä¶.¯úÀ¶®6Zü‚þ½°[Ó½šÞR¯®6Úy8ð7ª:x9­éVMïœóճĢfDuWÓ[¯ÕÁkïà‹³N;7‘nüŸé­ÓfUßÙ=ø*®6ÚúšÐêk¢õ ´TB‹žÖû~N5ÝZÓKõÖÒYuÖµ®ójÕiÓŠ…êÕûî-õêJ«·5ýUÓ;›²Š[ز:› ÌýÏtkM/Þ÷Ö“Ì¿Q»š~ZÓo5½s_«ZºÕR_•z뻊›È‰Å]N¯rÝjýŽ[ÅŸ¼dµr]õ(²´E–êQdi=K,ÕÓ¼ÒzWªçi/´Þ÷Wy=õâkbwîMüFÝjzç´ÙÕç½õ8®TÄ&^x9½x VZÄþ~/ØÝúÈTÄ&^x=½xß·µ¼W;'»óg©žhM ñrzµwÑz¢Uvµw±;ÏÏ˾ÕÒ½ÖÊW_‘»õ­ž)•ÓúÄâ)/i=SúU©·>qGªéÚ:øêçÀiý8Õtë¡Ðߨòà;gÝY•z+Ÿ]yï<šhòÿ9ý´V¾JÔ§‰«‡B¥õP¨T…ʱÖÊ{¥î-u¯V¾õý~ª—ÓÚ§­ž)ý½ÐZùâæÂïmM¯V¾µñrª“óZ+ÿ*õÎ3f¿QÅÖZ—ÊêØß ·5½ˆFÖyü>U üçôα¿QÕÁ·®uV]ëZO´¦j…ÿQU+ÔÓO5ÝZÓ˃ï\.¬Ú£n=+Õ±Òz¢UìT§Më·ŒU›Ö fV3³Ö9_<$&­b£ªÓ¦•ëìV™ÖµÎnuÖµ.VVå:kå:¯v‰½µK\=’ú{¡óÆyA×ù½Ð:øjçÄ[;'^]m¼u¹ðêrá¾Mê,ùÏé»uðÅC¡Òz(Tª‡B/´¼W¿ãü´¼WwÄþ·§E¿§W;'ÞÚ9ñê––·‚™WÁÌ[ÁÌ«`Öz¢õ7ªòÞÚhõê7¬ßÖiSåºÖ­©êæŸé­ËÅ­Þ¸Ö¥Ò_õƵr¿êóÞzx zžVZÏÓþFjº·¦ï{ëyZ¹Õ•övþ•)·€uü^Ø­éÕÁ·niUO´þ^h-]uOêîÖWý‚¾­-î[ý‚¾­ýº[ý‚¾§5½ú}[±ðV¿ oë:«ë|ëX©ˆý½Ð:øêB}[êêyZ¹­Gnu­»¯uÖU¿ao+Þê7ìm={ðªj¯õ¤Óû³jzç}Õ³¯u­{Õöþký‚~Õ¥òµ.•¯øOèï…ÖÊWO6¾V¦}U¦}­ŸÀÕÃÀÒzø7J«é­ƒ¯~¿Ö½‰W]*_k³ñU÷&^ë'ð«~þÖÅêyuðÞS¯NÚÖÅêUûuï¶Þ¸*¾ÖµîU¹îµîŒ”O2¿ÎµN+wj¯«§¯júnM?ÕtkMÅôÎ~£ªƒ—ÖÁi¥~¿zú-¦kkºVÞWëàWµò«µòűú×¹/£«:øÎ}ýÛÕÒíÖ9_Üþ½ ­éÕÒÖÒêàOëà­:xk¼Uç¼µN«Þwk½ïV½ïÞzß½R÷–ú­–î¶–îVïûm½ï·òþZÞ‹àÚzü^¥ºTŠ´¦W×:éüá%rþª³ž^¬¼tn¬¤>Ϧ¯ÖôRÝZÓ½šÞ9ieWK·[K·«7®u­“S-]ç¿*§ò~ZÞ«‹•´.VÕÃÿ*Þòî•wo6^6ÞúÈT+é2U8Y­pò¿»ÿ{zç[f;fÚz^«à/ôÔ‹+íÒ–ºVêÚR¯~¶PÞ¿Q•z+œT,nm=Á®«ú!¶:÷auU—‹Õ‘iõ»®Öo™å•º·Îy¯–®uµYÕO¡L[+˜öï…ÖÒU—‹u[ê¯R­L±cö{¡µt¯:øV²ZU²Z­ ·ŠÅý{aµ¦ê»õ;®zø_[(o­PÞº[?wõ3°…òþÚÕtkM÷júmM/®´-øo”VÓ[ÞWå½óO¥ß(«¦{kzå}·¼ïÊ{k»oŸê´9­¥;•÷Ö†Û®6ÜvkÃmW¿awë7ì¶ê׊ĻŠÄ- ºn¯ÎºÖ~]Q×Ö_N´‚¨ën}IUumAÔuWûu»‰÷«Þ÷×RÕŪóŸP­þ±¢§•iOõ º…1×S<†ý{AZÓw5½s±ª8äÚúÏÈïwr5½µávŠ?uþ^°Öôâû½õ—“ߨê}o]*Ï©V¾µÝwª+íiåùS<Å­§µ{Pýáå÷Bë૟-ˆº¯Þ¸Öï÷S%êóZÞ««MëOzª«µB©O¼hëOjÕïw“–zJ[úP«®6-Œ¹Z•*­ ­ fÖ fV]¬¬̬úýnGV´úÓÇï…ÖÁW?ÿ[ÿQ;ÕÁ·¶:­Êuf½éÕY× f]­¬Ðê?#j­{Dý÷ÂiM/®u-ˆºZñçýß ­•¯îÃÚm]mª\g­+­UWÚÂ]­Ú|°Öî&j á®^]¨ý¯¥^üáE[wõêBí­Û:ÕÿeÔ[¡Ô‹nõÎߨ£v5½µtU(õNgâoÔª¦ïÖôjå[·°+þ¼¶øó¿QÕÊ·niyuKË[»^%joíQ{õ%å­/)¯yëŸJ¿QÕ׺çV©·vÈ+ú½ºõÔ«Ó¦•¨«?:©·¾"+ö¾zkëëýyoíÏWtRom}Tìýß ­s¾ú5á<Žú­>2­ýùêŸJê­'¼úŠôÖþ|…î׺_+t¿ÞÖ£ ·ºx[;äÕ_~/´¾ú’º­ß2ùÿ÷Bëà«'në;îVßq-ò¿Vÿ“ÒÖÿ¤ô®êÛ­÷½Úâ¾­ï¸[}ǵþ'¥·ú’º§µòÕc·õ˜Ö­ömnkߦêÐÛú’ºÕ×Äm=õq«§>në—Ô­®ó·õHê­®ó­Ú½¯úĽÖÁWm¼ÖCb¯Úd~­§÷_õX«¶@_õcäµî„¾êçÀkÝ‹¬þèô{ᶦWê­Kå«î¶þ褯 䯵Åýª]£Ö~£ª¥kmq¿ênàkíQ¿êZ÷Zw_µkôZw«ÊmU6è«nç½Ûz㪓׺#öª“Ö´ú£“¶þ褯¸X­?x±Úÿ«ñáß?:ý×Füû¦ÿ*§ïjúiM·jº·¦ßjúëLÿç‚úŸÓEZÓµš¾[Ó+ïr[Ó_1]ÿ:ÓµzßU[ÓW5½å]O5ÝZÓ½šÞZ:­–nµ–nUK·ZK·ª¥[­¥[ÕÒ­ÖÒ­jéVkéVµt»µt»ZºÝZº]-Ýn-Ý®>q»uµÙÕÕf·®6§ºÚœÖÕæTÞOËû©N›Ó:mNuÚœÖisªÓÆZ§U§µN«–ÎZKgÕÒYké¬Z:o©{9½µò·:ënë¬{Õô×›^}E¾VºxÕÊ¿–÷Wœuò×9xù[ÕôÝš~ªéÖš^\mD:©¦kkzuðÒ:xñjzçR)Zœu¢­7NµšÞzãªt!Ú:øUüjüª¾¤ú~—Ö÷»TßïÒú~—êû]ZßïR}¿Ë>­éVM÷Öôê×ú~—êû]Zßïÿþ¥ôŸé«5}WÓ[Kwª¥;­¥;ÕÒÖÒYµtÖZ:«–ÎZKgÕÒYké¬Z:k-UKg­¥ójé¼µt^-·–Ϋ¥óÖÒyµtÞò^eie›{Äþ™Þò~«ƒ¿­÷ýVïûmy¯‚™´‚™TÁLZÁL^õ¾¿Öûþª¥{­¥{ÕÒ½ÎÒýûWïÿ˜®­X¨U,ÔV,Ô*jkËK«X¨­-/­b¡¶ö¬´Š…ÚŠ…ZÅBmmyi µ µŠ…ª«5}WÓOkºUÓ[ï»Vï{+”jµg¥­=+­ö¬´JµÚ³ÒÖž•V¡T[¡T«Pª­Pª»zß[©Rwuð§uð§:øÓ:øj×H[±P«X¨­m­¶}´µí£Õ¶¶¶}´ÚöÑV®Ó*שµ¼[åÝ[Þ½òî-ï^yom:©WXo}`«=+míY©WKw[Kw«¥»­¥»ÕÒÝÖÒÝjénkénµt­X¨U,ÔV,Ô*j+j µ µŠ…ÚŠ…ZÅBmÅÂUÝ ýÖQO_ÕôÝš~ªéÖšîÕôÛš^|âVk³qU©rµ6ÿ%ü3½µtU(]­PºäVÓ[§MJW+”®*”®V(]U(]­PºªPºZ¡tU{•kµ¾Š…kõÔ«7nµÞ¸]½q»õÆíÊûny¯Råjmu®]}Þwëó^…ÒÕ ¥« ¥«JWµW¹Z¡tU¡tµBéªBéj…ÒU…ÒÕ ¥« ¥«u/rU÷"Wë^äªBéjí®j»oµ¶ûV W+®*®V®[U®[­\·ªí¾Õ f«JV«•¬V•¬V+Y­*Y­V²ZU²Z­dµ« ·ÝÚpÛZM_­é»š~ZÓ­šî­é·šÞZºêµÝzDmW¨mi-]•¬vk¿nWÑh·¢Ñ®ž1Û­Û¸»Ê6»•mvµá¶[n»º ¼[ww•¬v+YíUó­dµ«dµ[ÉjWÉj·’Õ®’Õn%«½«“v[kºWÓ[ç|•¬v+Yí*YíV²ÚÕvßn=$¶«‡Ävë!±]=$¶[ÁlWÁl·îïê.ðnÝÞÕ]àÝÚ-ÜÕmÜݺ»«Û¸»Ìvuw·nãî*×íV®ÛU®Û­\·«Û¸»uwW·qwë6÷Ûò^í×íÛó^ó­ýº]¥ÊÝJ•»J•ûµ>ïÕóuç¯s­;Õ†Ûim¸jÃí´6ÜNµávZn§Úp;­ ·Sm¸Ö†Û©6ÜNkÃíTn§µávª.ñÖôÊ{ëŸ §úçÂiýsáT©ò´Rå©þ¹pZÿ\8Uª<­TyªÛ¸§u÷T±ð¬Óš^½ï­XxªXxZ±ðT±ð´bá©6ÜNkÃíTÏžÖ]àSÅÂÓŠ…§Š…§ O OkÃíTn§•ëN•ëN+×*×ÖŽÙ©vÌNkÇìTOïŸÖ]àSm¸Ö]àSÝ>­»À§º |Z¹îTçoó^]ëZO÷*žV,¯þrâ­[Ø^íUzk¯Ò«½JoíUzµWé­XèU,ô&Å«Xè­XèÕ^¥·ö*½úˉ·þrâUªôVªô*Uz+Uz•*½•*½J•ÞJ•^¥Jo¥J¯b¡·b¡W±Ð[±Ð«­NomuzµÕé­;à^¥Jo¥J¯R¥·þíÕÿ ½µSêÕN©·î€{uÜ[©Ò«Té­TéUªôÖN©W;¥ÞÚ)õj§Ô[ÿ—ñêÿ2Þú¿Œ{é½uÚT©Ò[©Ò«Té­#½Š…ÞŠ…^ÅBoÝ÷긷î€{E˜ñÖ^¥W{•· o ok³ñVO6ÞÖ“·z²ñ¶žl¼¥÷ÎI{«'o+UÞ*UÞÖ^å­ö*ok¯òV{•·µWy«½ÊÛÚ«¼Õ^åmíUÞj¯ò¶ö*oµWy[wÀoE×¹­Pz«Pz[¡ôV¡ô¶Bé­Bém…Ò[…ÒÛ ¥· ¥·JoJo+”Þ*”ÞÖý÷[Ý¿­ûï·ºÿ~[÷ßoJo+”Þ*”ÞV(½U(½­Pz«Pz[pž[Áynk¯òV{•·uÿýV±ð¶báµòà[—Ê*ÞV,¼Õfãmm6Þj³ñ¶6o o+Þ*ÞV,¼U,¼­ÍÆ[Ý@¿­ÍÆ[¥ÊÛJ•·J•÷µÎùêúmíUÞj¯ò¶n ß*”ÞÖc™÷UK×Úê¼ÕS¯õT竞ê|­§:_õTçk픾j§ôµvJ_µSúZ;¥¯Ú)}­LûªLûZ™öU™öµ2í«2ík픾j§ôµvJ_µSúZ;¥¯Ú)}­ÒWí”¾Ö ôW=ÕùZOu¾ê¿B¯õ_¡WÝ­PúªPúZÿzÕ…^ë¡ÐW¥Ê×J•¯J•¯•*_•*_+U¾*U¾Vª|Uª|­;à¯úõkíU¾j¯òµî€¿j¯òµö*_µWùZ{•¯Ú«|­½ÊW…Òg=ïÕûÞÚ«|U(}­PúªPúZ¡ôU¡ôµþ­óªa¿œçUpž×ú÷«þÄýZ{•¯ºþZ¡ôU¡ôµBé«Bék…ÒWmu¾Vª|Uª|­TùªTùZ©ò©Rþ:©Rªš’ß Úš¾ªé»5ýTÓ­5Ý«é·5½Z:i-]‘*/¬Öô]M?­éVM÷Öô[MéÅN©üuvJåO«¥ÓÖÒiµtÚZ:­–N[K§ÕÒikéVµt«µt«ZºÕZºU-Ýj-ݪ–nµ–nUŸ¸ÝúÄíêbµ[«]]¬vëbµ«‹Õn]¬vu±Ú­ÓæT§Íi6§:mNËû©¼Ÿ–÷Sy?­ µUÞ­åÝ*ïÖúÈXõ‘±ÖGƪŒµ>2V]m¬uÚxµtÞZ:¯–Î[KçÕÒyké¼Z:o-WKç­¥»ÕÒÝÖÒÝjénkénµt·µt·úÄÝÖ'îVê׺P¿êBýZêWy-ï¯òÞIÔ"Å#©¿´5}UÓwkú©¦[kºWÓ{Þ‹÷]:­"U$–V$–*K+K‰¥‰¥ŠÄ­n©ºu¤Õ­#U·Ž´ºu~£*ï­L+U¦mUóHUÍ#­j©ªy¤UÍóU}dVë#³ªÌj}dªLÛjö‘ªÙGZÍ>R5ûü^h-Ý®N›Ý:mvuÚ´2mÕì#rZÞO录i¥Ê´ÒÊ´ReZieZ9Õic­ÓÆªÓÆZKgÕÒYké¬Z:k-UKg­¥³jéZ™¶ªæ‘V5TÕ<"Þòî•woy÷Êûm6·:mnë´¹Õis[§Í­N›ÛZº*ÓJ+ÓJ•i¥•i¥Ê´ÒÊ´òª¥{­¥{ÕÒ½ÖÒU‘XZ‘¸jö‘V³Ïo”VÓWkú®¦ŸÖt«¦{kú­¦w¾ãTª¥kEb­"±¶"±V‘X[‘X«H¬­H\õ I«WHª^!Ñα¢Å±¢Ú:ç‹bE;ÄJU $­b ÑjŸV[û´ZeZmeÚªÙç÷Bë¤ÝÕÁïÖÁW¡´U ôU´­R­vJõ´¼ŸÊûiy?•÷Óò~Jï­lµÑª­V­6ZµµÑªÕFk«WHª^¡ß ­¥«6ZµµÑªÕF«¶B©V¡T[¡T«Pª­V­6ZµµÑªÕF«¶6ZµÚhÕÖF«V­ÚÚhÕj£µÕ+$U¯Ðï…Ö•¶ ¥Ú ¥Z…ÒV¯T½BÒê’ªWH´—*«GVëÑ…ªWHZ½BRõ I«WHª^!iõ IÕ+$­^!©z…dµöi«b iIU $­b ß¨Ê»´¼Kå][§V§¶N­–®µO»´ZºV¦]Õ>íjíÓ®jŸvµöi«Z"iÕýFíjúiM·jº·¦WK·ZK·«¥Û­¥ÛÕÒµuÕj$­V£ß¨jévë·«OÜi}âNõ‰kmó®j›wµ¶yWµÍ»ZÛ¼«JÔ­V#©Z¤Õj$U«‘´Z¤j5’V«ÑoTé½õ‘©"q«é7ªúÈ´"qÕ©$­N¥ß¨ê#ÓŠÄ«ŠÄ«‰W‰W+¯*Ó®ÖÃU%Óï…–÷[y¿-ï¯òþZÞ_uÚ´"qU%­B(© ¡¤U%U!”´ ¡¤*„’V!”T…PÒ*„’ªJZ…PRBI«JªB(iBÉ.Èÿ²;äÙU¢Þ­D]Bý^°ÖôÊ{kŸ¶ê“’VŸÔoTuÚ´žæÝÕÓ¼»‰wµÍ»[Û¼»ÚæÝ­mÞ]móîÖ6ï^ÕiÓzòaWO>ìÖ“»Ú%Þ­]⪎JZuTRÕQI«Žê7ª:mZ‘xW‘x·6™wµÉ¼[O>ìêɇÝÚ£ÞÕõníQïjz·ö¨wµG½[{Ô»JÔ»µG½«=êV›•ì*QïV¢ÞÕ&ónm2WmVÒj³’ªÍJZmV²½º\´]¨ê¨¤UG%»zö`·ž=ØÕ³»õìÁ®ž=Ø­L»«L»[™vW™¶UG%U•´ê¨¤ª£ú½Ðú¼W™v·2mÕf%­6+9U(mõIIU%­B(9Õ­§uûþT¹î´¶:«F'i5:IÕè$­F'©¤Õè$U£“´~£¼šÞZº*×V®« ¡¤UõU-]+×*×V®;U®;­\wª'ZOë‰ÖS=R5ûH«ÙG¼Ú5òÖ®‘W»F­f©š}¤UÍ#U5´ªyÄ«hä­häU4òÖí¼ª[G¼õ„›WO¸yë¯ÄU»Íï…ÖÊßR½µtU8ñÖ®‘W»FÞÚ5ò*Ûx+ÛTå8¿Z—‹êϼÞúÛ…W÷ãnë~Ü­6n+Ý*ÝV4ºU4º­ht«ht[›N·zHì¶»ÕCb·õØ­n&ÞV4ºU¶¹­ls«ls[w«ziÕÓÈ­vZý2RõËH«_Fª~iõËHÕ/#­~©úe¤Õ/#U¿Ìï…ÖÒU÷ãZý2¿Q·šÞù~¿Õ¦S« FnuGì¶îˆU /¿Z_…“ÛÚö¹Õ¶O« æ7ª:i[Û>·Ê6·•mn•mnkÛ§ê—‘V¿ÌoTµt­hTõËH«_Fª~iõËHÕ/#­~©úe¤Õ/#U¿Ìï…ÖÒU¹î¶îÞê9«V¿ŒÜêA©VAŒT1Òjx‘ªáEZ /R5¼H«áEª†i5¼HÕð"­†©^䵿U²z­dõªdõZÉêUÉêµ’Õ«6Z /R5¼H«áEª†i5¼HÕðò{¡µtÕS^­†©^¤UÑ"¯JV¯•¬^•¬^ë öWíµ:VäU·ó^k×èU»F¯µkTu¬H«cEªŽ•ß ­³® f¯Ì^µéôZ›N¯Êu¯•몊iU´È«rÝkåºWåº×Êu¯Êu­ŠyÕ#诵gõª`öZ·ó^u;ïµnçU+òZÉêUÉêµ’Õ«’Õk%«W%«×JV¯JV¯õû«ž`­»UÇŠ´:V¤êX‘VÇŠT+ÒêX‘ªcE[+Zu¬h«cE«Žýë<¦¥ÅcZú×yLKÿŠ¿Uj«$å7ªò.-ïRyïä:ý+r¶ZNôO«ƒ×ÖÁkuðÚ:x­¾³c¦Uψþ­ÖÁ¯J}µÔw¥Þ‰FZumh«kC«®ß ­ƒ?ÕÁwžtÒªkã÷BËû©¼Ÿ–÷Sy?=ïÕµÎZŸw«>2Ö:ë¬úÈXë#cÕÒYëZgÕµÎZ— ¯No6^6Þ:m Þ…¶º6´êÚÐ?o6·zßoëàoõÆÝÖ9«sþö¾:ç_뜕÷×:ç_uοÖ9ÿª¥{­¥{ÕÒu¢‘Ve¿¤5]«é«5}WÓOkºUÓ½5ýVÓ;— ‘j餵tR-´–®ŠF"­÷]«ƒ×ÖÁkuðÚ:x­Þwm½ïŽHíy/.ÒyPJ¥xPJ¥ÌdUÞWËûªÎùÕ:çWuίÖ9¿+ï»å½¸©­¶‹ß¨êœß-ï»zß[¹NNõÆÖwª7î´Þª¬µ>°V}`­åÝ*ï=+­ #´U¡Ua„Š·>°U0kFüFUg·¼{å½̪ÂmF¨ÜÊ{+×É­Þ÷Û:çouÎßÖ9«‹Õm]¬ª\×j|Py•÷×òþ*ï'صªlÐVeƒV• ÚªlP-n&ªvn&ª7U;O°«O°«¶ö¬´Ú³ÒÖž•V{VÚÚ³R©¼·‚™Jå][Þ«`¦­=+­ö¬Z• ZU6h«²A«ÊmU6hUÙ ­Ê†ß¨ê}_­¥«6Ütµ–nUK×Ú¯ÓU-Ýn-]•ë´•ë´Êu­Â­ #´UñUy?-ï§ò~ZÞOåý´N›j·P[»…Zíjk·P«ÝBmíjµ[¨­ÝB­v µµ[¨Õn¡¶B©V¡T[¡T«Pª­Pª^-·–Ϋ¥óÖÒU™V[™V«L«­L«U¦ÕV¦Õj¯Rokénµt·µtÕVg«oB«¾ ÕV¦ÕWÅÂ׊…¯Š¯ «HÜê›Ðªoâ÷Bë:_ü'Tµ•¨W•¨[}ºª½ÊÕÚ«\Õ^åjíU®j¯rµ"ñª"ñjEâªoB[}ZõMh«oBWµW¹Z{•«ŠÄ«µWY5>h«ñá7Ê«é·5½¸T¶*´ªlÐVeƒV• ÚªlÐU…ÒÕ ¥« ¥«J«Î]­{ЫºÝê\ЪsA[¥ Z•&h«4A«Òm•&üFUÞOëJ[íU¶JtU›ËZ'­U'më&òªr]«õ@«ÖmµhÕz ­Ö­Z´Õz « f­Ú‚ߨÊ{k³±j=ÐVëV­Új=Ъõ@[­ZÕh«¶@Wuxµî¯ê ·Ýz­*ÐVq€VÅÚ*Ъ8@[ÅZh«8@wuw·nãîê6înÝÆÝR-´–Nª¥“ÖÒIµt­çëªÞmõhÕ; ­ÞߨSM·Öt¯¦ßÖôê×Ú«¬zt·rÝ®rÝn³]ÝÞ­»ÀUq€îV0«ÈÿÚ"ÿkEþ×ù_wÌvk·pW»…»•ëv•ëv+×í*×µÐýZ¡ûµ…î× Ý¯-tÿoTõyo݃®ØûÚbïkÅÞ×{ÿ7ª:øÖ†[…î׺_+t¿¶Ðý¿QÕ9ßÚp«ÈÿÚ"ÿkEþ×ù_+òÿï…ÖÒUn»õlᮞ-Ü­g wuz·îAïêÙÂÝz¶pW©²Eþ׊ü¯-òÿo”TÓWkú®¦ŸÖt«¦{kú­¦w®6§J•§•*«ÚmÕüFUK×J•§º…Ýj=ÐSÅÂVmžêáÀVï€V½ÚêЪw@[½Zõh«w@«ÞmõhÕ; ­Þ­z´Õ; Uq€¶ÐýZ¡ûµ…î× Ý¯§•ëN•ëZè~­ÐýzZn§Úp;­Û¸{_[ì}­Øû¿ZÞ«ýºÓÚ¯;Õ~] ݯ§Êu§•ëN•ëZäÿߨÊ{k¿îT¹î´rÝ©rÝiåºSåºÓÊu§Êu§•ëªÞß ­L•ëN+×UµÚª-Ъ¶à÷Bë}¯î„¶z´êPk³ªwà÷‚¶¦ïjúiM÷júmM/Þ¸VïÀoTå½u'´êÐVï€V½ÚêЪw@­µáVõü^X­é•÷Ö¿6¬ f­Þ­z´Õ;ðUyo%+«’•µ’•UÉÊZÉʪde­ 7«’•ížzuÖµ’•U§mhU ­â­Š´U Uq€Z+YY•¬¬•¬¬JV-ò¿Vè~µV4ªØûÚbïkÅÞWóÖçýVŸ÷Ö½H«îEZë^¤UáÄZáĪ›‰ÖJ{_[ìýߨêà[7­úK©µþRjÕ®‘·þ¹àÕ½HoíUì}m±÷µbïk‹½¯^mû´ØûZ±÷µÅÞW¯î¶àùêÕ¾·Ò…WéÂ[é«tÑ‚çkÏ×<_+x¾¶àùZÁó/hkúª¦·¼W·ó¼u;Ï«tá­ûq^ÝóÖý8ßÕÁïÖÁW¬o±>¼ 'ÞÚöñjÛÇ[ÿ ­Øûê­pâU8ñÖÓû^=~ß‚ç«WO°{ë öŠ~ÿ{a·¦W×ùV8ñ*œxkãÅ«oíœxµs⭯‰·žtò*œxëI'¯A÷Ö#è^=(å­¥*ö¾¶àùZÁóµE¿×Š~¯-ú½Vô{mÑïµ¢ßÿ^¸­é•÷ÖÎÉ­ÂÉm…“Š~ÿ{Á[Ó«ƒoý/²¢ßk‹~ÿU¼¶¾ ¤þ^è|â*xþïiM¯Þ¸Ö³F·zÖè¶ž!¯àùÚ‚çkÏ×»[Þ«&ÞqâVĉۺ¥u«—ÛÚx¹ÕÆËme›[e›ÛÚx¹ÕÆËmm¼Üjãå¶ÂÉ­þZØbïkÅÞ×{_+x¾¶àùZÁóµE¿×[e›ÛÊ6^[üy­øóÚÈk×Ûº/s«û2-€üoTuÚ´ž·¹ÕÆK‹?¯þ÷Bë«6^Zøz­ðõÚÂ×k…¯×¾^+|½¾Ö]¡W=®óZÙ¦âÏk‹?¯¯º­óZ̼jã嵲ͫÃ~­Ç°_µoóZû6¯Ú·y­}›WíÛ¼Ö]¡§ÕÒµ’UÅŸÿ½ÐZº*Yµðõ¿QÕÒµn*Uô{}­}›W=†ýZw…^õökmû¼jÛçµ¶}^µíÓâÏkÅŸ×× '@^[y­òÚÈÿFU§Më®P×@^_õõk ^µíóZÙ¦Èk ¯@^[ùߨê×Úö©øóúZÛ>¯Úöy­mŸWmû´ðúªhôZ/¯úïÿk=ñòª'^Z÷UÚÿ?ùŸÃ~Æþ_ÿ÷ÿçÿíÿñÿþÿü;èü/‘¿¿ï[OÿÇÿ‰€/¦ÿ÷1ÖÓ×ÿzícÔÿøïQûÿ‚ÈÿH•[T`Q¹º‹ú9*[Šd‹‹[\Àââê X\Ÿ£²Å¡H¶¸¹Å ,n®¾Åý9*[Šd‹‡[<ÀâáêX<Ÿ£²Å¡H¶hÜ¢‹ÆÕ X´ÏQÙâP$[tnÑEçê,úç¨lq(’-^nñ‹—«_`ñ~ŽÊ‡"Ùâã°ø¸úßç¨lq(’,þÏ;Ä¢üÕ‹éÿ©^M_ÿëµQÉâT$[äéF@º<¤‘ÏQÙâP$[äéF@º<¤ÑÏQÙâP$[äéF@º<¤YŸ£²Å¡H¶ÈÓ€t#Ge‹C‘dqñt³@ºYGe‹C‘l‘§›ÒÍâÁct³üsT¶8ÉyºY Ý,<H7ë~ŽÊ‡"Ù"O7 ¤›ÅƒÇéf½ÏQÙâP$YÜ<Ýln6¤›ý÷9*YœŠd‹<Ýln6¤›-Ÿ£²Å¡H¶ÈÓÍéfóà±AºÙú9*[Šd‹<Ýln6¤›½>Ge‹C‘l‘§› ÒÍæÁcƒt³÷ç¨lq(’-òt³AºÙGe‹C‘l‘§›ÒÍáÁã€tsìsT¶8Éyº9 Ý<H7Ç?Ge‹C‘l‘§›ÒÍáÁã€tsîç¨lq(’-òts@º9Ge‹C‘l‘§éÆyðpn|ŽÊ‡"Ù"O7Òóàá Ýøù•-E²Ežn¤çÁÃAºqû•-E²Ežn¤çÁÃAºqÿ•-E²Ežn¤çÁÃAºñû9*[Šd‹<Ý8H7΃‡ƒtãïsT¶8I/O7¤›ËƒÇéæþ}ŽJ§"Ù"O7¤›ËƒÇéæÊç¨lq(’-òtsAº¹Ge‹C‘l‘§› ÒÍåÁã‚tsísT¶8Éyº¹ Ý\<.H7×?Ge‹C‘l‘§› ÒÍåÁã‚tsïç¨lq(’-òtsAº¹Ge‹C‘-ÊM7òW§›jú¨—Ó×ÿzícÔ¿Ç"Ù¢p‹, W`Q>Ge‹C‘lQ¹E•«+°¨Ÿ£²Å¡H¶¸¸Å,.®¾€Åõ9*[Šd‹›[ÜÀâæêXÜŸ£²Å¡H¶x¸Å,®~€Åó9*[Šd‹Æ-°h\Ý€Eû•-E²EçXt®îÀ¢ŽÊ‡"Ùâå/°x¹úïç¨lq(’->nñ‹«?`ñ}ŽÊ‡"É"g ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹$‹œU,€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’,rV±V±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H²ÈYÅXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"É"g ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹$‹œU,€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’,rV±V±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H²ÈYÅXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"É"g ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹d‹<ÝV±pŒ°V±«X«x,’-òtXÅÂ1ÂXŬb¬â±H¶ÈÓ ` Ç `K°Š°ŠÇ"Ù"O7€U,#,€U,Á*À*‹ükQ9«X«X9FX«XƒU¬€U<É…[`Q¸º‹ò9*[Šd‹Ê-*°¨\]Eý•-E²ÅÅ-.`qqõ,®ÏQÙâP$[ÜÜâ7WßÀâþ•-E²ÅÃ-`ñpõ,žÏQÙâP$[4nÑ€Eãê,Úç¨lq(’-:·èÀ¢suýsT¶8É/·xÅËÕ/°x?Ge‹C‘lñq‹X|\ý‹ïsT¶8I9«X«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$Yä¬b¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘d‘³Š°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E’EÎ*VÀ*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<I9«X«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$Yä¬b¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘d‘³Š°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E’EÎ*VÀ*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<I9«X«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñX$[äé°Š•c„°Š5XÅ XÅc‘l‘§À*VŽVÀ*Ö`+`E²Ežn«X9FX«XƒU¬€U<Éyº¬båa¬b V±VñXä_‹‹³Š`/Ž^€U¼‚U¼«x,’- ·(À¢puåsT¶8É•[T`Q¹º‹ú9*[Šd‹‹[\Àââê X\Ÿ£²Å¡H¶¸¹Å ,n®¾Åý9*[Šd‹‡[<ÀâáêX<Ÿ£²Å¡H¶hÜ¢‹ÆÕ X´ÏQÙâP$[tnÑEçê,úç¨lq(’-^nñ‹—«_`ñ~ŽÊ‡"Ùâã°ø¸úßç¨lq(’,rVñ¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘d‘³Š`/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹$‹œU¼«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$Yä¬âXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"É"g/À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<I9«xVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H²ÈYÅ °ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E’EÎ*^€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’,rVñ¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘-nÎ*Þ€U¼9FxVñVñ¬â±H¶(Ü¢‹ÂÕX”ÏQÙâP$[TnQEåê ,êç¨lq(’-.nq‹‹«/`q}ŽÊ‡"Ùâæ7°¸¹ú÷ç¨lq(’-nñ‹‡«`ñ|ŽÊ‡"Ù¢q‹,W7`Ñ>Ge‹C‘lѹE«;°èŸ£²Å¡H¶x¹Å ,^®~Åû9*[Šd‹[|ÀâãêX|Ÿ£²Å¡H²ÈYŰŠ7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E’EÎ*Þ€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’,rVñ¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘d‘³Š7`oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹$‹œU¼«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$Yä¬â XÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"É"goÀ*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<I9«xVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H²ÈYŰŠ7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`Eþµx8«øVñááXÅ'XŰŠÇ"Ù¢p‹, W`Q>Ge‹C‘lQ¹E•«+°¨Ÿ£²Å¡H¶¸¸Å,.®¾€Åõ9*[Šd‹›[ÜÀâæêXÜŸ£²Å¡H¶x¸Å,®~€Åó9*[Šd‹Æ-°h\Ý€Eû•-E²EçXt®îÀ¢ŽÊ‡"Ùâå/°x¹úïç¨lq(’->nñ‹«?`ñ}ŽÊ‡"É"gÀ*>#|«ø«øVñX$[äé°ŠÇÀ*>Á*>€U<Éyº¬âÃ1°ŠO°Š`E²Ežn«øpŒð¬â¬âXÅc‘l‘§À*>#|«ø«øVñX$[äé°ŠÇÀ*>Á*>€U<Éyº¬âÃ1°ŠO°Š`E²Ežn«øpŒð¬â¬âXÅc‘l‘§À*>#|«ø«øVñX$[äé°ŠÇÀ*>Á*>€U<I9«øVñááXÅ'XŰŠÇ"Ù"O7€U|8FøVñ Vñ¬â±H¶ÈÓ `Ž>€U|‚U|«x,’-òtXŇc„`Ÿ`À*‹d‹<ÝVñááXÅ'XŰŠÇ"Ù"O7€U|8FøVñ Vñ¬â±H¶ÈÓ `Ž>€U|‚U|«x,’-òtXŇc„`Ÿ`À*‹d‹<ÝVñááXÅ'XŰŠÇ"Ù"O7€U|8FøVñ Vñ¬â±H²ÈYŰŠÇÀ*>Á*>€U<Éyº¬âÃ1°ŠO°Š`E²Ežn«øpŒð¬â¬âXÅc‘l‘§À*>#|«ø«øVñX$[äé°ŠÇÀ*>Á*>€U<Éyº¬âÃ1°ŠO°Š`E²Ežn«øpŒð¬â¬âXÅc‘l‘§À*>#|«ø«øVñX$[äé°ŠÇÀ*>Á*>€U<Éyº¬âÃ1°ŠO°Š`E’EÎ*>€U|8FøVñ Vñ¬â±H¶ÈÓ `Ž>€U|‚U|«x,’-òtXŇc„`Ÿ`À*‹d‹<ÝVñááXÅ'XŰŠÇ"Ù"O7€U|8FøVñ Vñ¬â±H¶ÈÓ `Ž>€U|‚U|«x,’-òtXŇc„`Ÿ`À*‹d‹<ÝVñááXÅ'XŰŠÇ"Ù"O7€U|8FøVñ Vñ¬â±H¶ÈÓ `Ž>€U|‚U|«x,’,rVñ¬âÃ1°ŠO°Š`E²Ežn«øpŒð¬â¬âXÅc‘l‘§À*>#|«ø«øVñX$[äé°ŠÇÀ*>Á*>€U<Éyº¬âÃ1°ŠO°Š`E²Ežn«øpŒð¬â¬âXÅc‘l‘§À*>#|«ø«øVñX$[äé°ŠÇÀ*>Á*>€U<Éyº¬âÃ1°ŠO°Š`E²Ežn«øpŒð¬â¬âXÅc‘d‘³Š`Ž>€U|‚U|«x,’-òtXŇc„`Ÿ`À*‹d‹<ÝVñááXÅ'XŰŠÇ"Ù"O7€U|8FøVñ Vñ¬â±H¶ÈÓ `Ž>€U|‚U|«x,’-òtXŇc„`Ÿ`À*‹d‹<ÝVñááXÅ'XŰŠÇ"Ù"O7€U|8FøVñ Vñ¬â±H¶ÈÓ `Ž>€U|‚U|«x,’-òtXŇc„`Ÿ`À*‹$‹œU|«øpŒð¬â¬âXÅc‘l‘§À*>#|«ø«øVñX$[äé°ŠÇÀ*>Á*>€U<Éyº¬âÃ1°ŠO°Š`E²Ežn«øpŒð¬â¬âXÅc‘l‘§À*>#|«ø«øVñX$[äé°ŠÇÀ*>Á*>€U<Éyº¬âÃ1°ŠO°Š`E²Ežn«øpŒð¬â¬âXÅc‘l‘§À*>#|«ø«øVñX$Yä¬âXŇc„`Ÿ`À*‹d‹<ÝVñááXÅ'XŰŠÇ"Ù"O7€U|8FøVñ Vñ¬â±H¶ÈÓ `Ž>€U|‚U|«x,’-òtXŇc„`Ÿ`À*‹d‹<ÝVñááXÅ'XŰŠÇ"Ù"O7€U|8FøVñ Vñ¬â±H¶ÈÓ `Ž>€U|‚U|«x,’-òtXŇc„`Ÿ`À*‹d‹<ÝVñááXÅ'XŰŠÇ"É"gÀ*>#|«ø«øVñX$[äé°ŠÇÀ*>Á*>€U<Éyº¬âÃ1°ŠO°Š`E²Ežn«øpŒð¬â¬âXÅc‘l‘§À*>#|«ø«øVñX$[äé°ŠÇÀ*>Á*>€U<Éyº¬âÃ1°ŠO°Š`E²Ežn«øpŒð¬â¬âXÅc‘l‘§À*>#|«ø«øVñX$[äé°ŠÇÀ*>Á*>€U<ù×¢qV±V±qŒ°V±«Ø«x,’- ·(À¢puåsT¶8É•[T`Q¹º‹ú9*[Šd‹‹[\Àââê X\Ÿ£²Å¡H¶¸¹Å ,n®¾Åý9*[Šd‹‡[<ÀâáêX<Ÿ£²Å¡H¶hÜ¢‹ÆÕ X´ÏQÙâP$[tnÑEçê,úç¨lq(’-^nñ‹—«_`ñ~ŽÊ‡"Ùâã°ø¸úßç¨lq(’,rV±V±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H²ÈYÅXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"É"g`Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹$‹œUl€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’,rV±V±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H²ÈYÅXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"É"g`Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹$‹œUl€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’,rV±V±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±H¶ÈÓ `Ç`[°Š °ŠÇ"Ù"O7€Ul#l€UlÁ*6À*‹d‹<ÝV±qŒ°V±«Ø«x,’-òtXÅÆ1ÂXŬb¬â±È¿³Š°Šc„°Š=XÅXÅc‘lQ¸E…« °(Ÿ£²Å¡H¶¨Ü¢‹ÊÕXÔÏQÙâP$[\ÜâW_Àâú•-E²ÅÍ-n`qsõ ,îÏQÙâP$[<ÜâW?Àâù•-E²Eã X4®nÀ¢}ŽÊ‡"Ù¢s‹,:Ww`Ñ?Ge‹C‘lñr‹X¼\ý‹÷sT¶8É·ø€ÅÇÕ°ø>Ge‹C‘d‘³Š°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E’EÎ*vÀ*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<I9«Ø«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$Yä¬b¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘d‘³Š°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E’EÎ*vÀ*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<I9«Ø«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$Yä¬b¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘d‘³Š°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`E²Ežn«Ø9Fث؃Uì€U<Éyº¬bça¬bV±VñX$[äé°Šc„°Š=XÅXÅc‘l‘§À*vŽvÀ*ö`;`Eþµx9«øVñåá XÅ7XŰŠÇ"Ù¢p‹, W`Q>Ge‹C‘lQ¹E•«+°¨Ÿ£²Å¡H¶¸¸Å,.®¾€Åõ9*[Šd‹›[ÜÀâæêXÜŸ£²Å¡H¶x¸Å,®~€Åó9*[Šd‹Æ-°h\Ý€Eû•-E²EçXt®îÀ¢ŽÊ‡"Ùâå/°x¹úïç¨lq(’->nñ‹«?`ñ}ŽÊ‡"É"g_À*¾#|«ø«øVñX$[äé°Š/Ç_À*¾Á*¾€U<Éyº¬âË1°Šo°Š/`E²Ežn«ørŒð¬â¬â XÅc‘l‘§À*¾#|«ø«øVñX$[äé°Š/Ç_À*¾Á*¾€U<Éyº¬âË1°Šo°Š/`E²Ežn«ørŒð¬â¬â XÅc‘l‘§À*¾#|«ø«øVñX$[äé°Š/Ç_À*¾Á*¾€U<I9«øVñåá XÅ7XŰŠÇ"Ù"O7€U|9FøVñ Vñ¬â±H¶ÈÓ `_޾€U|ƒU|«x,’-òtXÅ—c„/`ß`_À*‹d‹<ÝVñåá XÅ7XŰŠÇ"Ù"O7€U|9FøVñ Vñ¬â±H¶ÈÓ `_޾€U|ƒU|«x,’-òtXÅ—c„/`ß`_À*‹d‹<ÝVñåá XÅ7XŰŠÇ"Ù"O7€U|9FøVñ Vñ¬â±H²ÈYŰŠ/Ç_À*¾Á*¾€U<Éyº¬âË1°Šo°Š/`E²Ežn«ørŒð¬â¬â XÅc‘l‘§À*¾#|«ø«øVñX$[äé°Š/Ç_À*¾Á*¾€U<Éyº¬âË1°Šo°Š/`E²Ežn«ørŒð¬â¬â XÅc‘l‘§À*¾#|«ø«øVñX$[äé°Š/Ç_À*¾Á*¾€U<Éyº¬âË1°Šo°Š/`E’EÎ*¾€U|9FøVñ Vñ¬â±H¶ÈÓ `_޾€U|ƒU|«x,’-òtXÅ—c„/`ß`_À*‹d‹<ÝVñåá XÅ7XŰŠÇ"Ù"O7€U|9FøVñ Vñ¬â±H¶ÈÓ `_޾€U|ƒU|«x,’-òtXÅ—c„/`ß`_À*‹d‹<ÝVñåá XÅ7XŰŠÇ"Ù"O7€U|9FøVñ Vñ¬â±H¶ÈÓ `_޾€U|ƒU|«x,’,rVñ¬âË1°Šo°Š/`E²Ežn«ørŒð¬â¬â XÅc‘l‘§À*¾#|«ø«øVñX$[äé°Š/Ç_À*¾Á*¾€U<Éyº¬âË1°Šo°Š/`E²Ežn«ørŒð¬â¬â XÅc‘l‘§À*¾#|«ø«øVñX$[äé°Š/Ç_À*¾Á*¾€U<Éyº¬âË1°Šo°Š/`E²Ežn«ørŒð¬â¬â XÅc‘d‘³Š/`_޾€U|ƒU|«x,’-òtXÅ—c„/`ß`_À*‹d‹<ÝVñåá XÅ7XŰŠÇ"Ù"O7€U|9FøVñ Vñ¬â±H¶ÈÓ `_޾€U|ƒU|«x,’-òtXÅ—c„/`ß`_À*‹d‹<ÝVñåá XÅ7XŰŠÇ"Ù"O7€U|9FøVñ Vñ¬â±H¶ÈÓ `_޾€U|ƒU|«x,’-òtXÅ—c„/`ß`_À*‹$‹œU|«ørŒð¬â¬â XÅc‘l‘§À*¾#|«ø«øVñX$[äé°Š/Ç_À*¾Á*¾€U<Éyº¬âË1°Šo°Š/`E²Ežn«ørŒð¬â¬â XÅc‘l‘§À*¾#|«ø«øVñX$[äé°Š/Ç_À*¾Á*¾€U<Éyº¬âË1°Šo°Š/`E²Ežn«ørŒð¬â¬â XÅc‘l‘§À*¾#|«ø«øVñX$Yä¬â XÅ—c„/`ß`_À*‹d‹<ÝVñåá XÅ7XŰŠÇ"Ù"O7€U|9FøVñ Vñ¬â±H¶ÈÓ `_޾€U|ƒU|«x,’-òtXÅ—c„/`ß`_À*‹d‹<ÝVñåá XÅ7XŰŠÇ"Ù"O7€U|9FøVñ Vñ¬â±H¶ÈÓ `_޾€U|ƒU|«x,’-òtXÅ—c„/`ß`_À*‹d‹<ÝVñåá XÅ7XŰŠÇ"É"g_À*¾#|«ø«øVñX$[äé°Š/Ç_À*¾Á*¾€U<Éyº¬âË1°Šo°Š/`E²Ežn«ørŒð¬â¬â XÅc‘l‘§À*¾#|«ø«øVñX$[äé°Š/Ç_À*¾Á*¾€U<Éyº¬âË1°Šo°Š/`E²Ežn«ørŒð¬â¬â XÅc‘l‘§À*¾#|«ø«øVñX$[äé°Š/Ç_À*¾Á*¾€U<ù×âã¬âXÅc„`¿`?À*‹d‹Â- °(\]€Eù•-E²EåXT®®À¢~ŽÊ‡"Ùââ°¸¸ú×ç¨lq(’-nnq‹›«o`qŽÊ‡"Ùâá°x¸úÏç¨lq(’-·hÀ¢quísT¶8É[t`ѹº‹þ9*[Šd‹—[¼ÀâåêX¼Ÿ£²Å¡H¶ø¸Å,>®þ€Å÷9*[Š$‹œUü«øqŒð¬â¬âXÅc‘l‘§À*~#ü«ø«øVñX$[äé°ŠÇ?À*~Á*~€U<Éyº¬âÇ1°Š_°Š`E²Ežn«øqŒð¬â¬âXÅc‘l‘§À*~#ü«ø«øVñX$[äé°ŠÇ?À*~Á*~€U<Éyº¬âÇ1°Š_°Š`E²Ežn«øqŒð¬â¬âXÅc‘l‘§À*~#ü«ø«øVñX$Yä¬âXÅc„`¿`?À*‹d‹<ÝVñãáXÅ/XŰŠÇ"Ù"O7€Uü8FøVñ Vñ¬â±H¶ÈÓ `?Ž~€Uü‚Uü«x,’-òtXÅc„`¿`?À*‹d‹<ÝVñãáXÅ/XŰŠÇ"Ù"O7€Uü8FøVñ Vñ¬â±H¶ÈÓ `?Ž~€Uü‚Uü«x,’-òtXÅc„`¿`?À*‹d‹<ÝVñãáXÅ/XŰŠÇ"É"g?À*~#ü«ø«øVñX$[äé°ŠÇ?À*~Á*~€U<Éyº¬âÇ1°Š_°Š`E²Ežn«øqŒð¬â¬âXÅc‘l‘§À*~#ü«ø«øVñX$[äé°ŠÇ?À*~Á*~€U<Éyº¬âÇ1°Š_°Š`E²Ežn«øqŒð¬â¬âXÅc‘l‘§À*~#ü«ø«øVñX$[äé°ŠÇ?À*~Á*~€U<I9«øVñãáXÅ/XŰŠÇ"Ù"O7€Uü8FøVñ Vñ¬â±H¶ÈÓ `?Ž~€Uü‚Uü«x,’-òtXÅc„`¿`?À*‹d‹<ÝVñãáXÅ/XŰŠÇ"Ù"O7€Uü8FøVñ Vñ¬â±H¶ÈÓ `?Ž~€Uü‚Uü«x,’-òtXÅc„`¿`?À*‹d‹<ÝVñãáXÅ/XŰŠÇ"Ù"O7€Uü8FøVñ Vñ¬â±H²ÈYŰŠÇ?À*~Á*~€U<Éyº¬âÇ1°Š_°Š`E²Ežn«øqŒð¬â¬âXÅc‘l‘§À*~#ü«ø«øVñX$[äé°ŠÇ?À*~Á*~€U<Éyº¬âÇ1°Š_°Š`E²Ežn«øqŒð¬â¬âXÅc‘l‘§À*~#ü«ø«øVñX$[äé°ŠÇ?À*~Á*~€U<Éyº¬âÇ1°Š_°Š`E’EÎ*~€Uü8FøVñ Vñ¬â±H¶ÈÓ `?Ž~€Uü‚Uü«x,’-òtXÅc„`¿`?À*‹d‹<ÝVñãáXÅ/XŰŠÇ"Ù"O7€Uü8FøVñ Vñ¬â±H¶ÈÓ `?Ž~€Uü‚Uü«x,’-òtXÅc„`¿`?À*‹d‹<ÝVñãáXÅ/XŰŠÇ"Ù"O7€Uü8FøVñ Vñ¬â±H¶ÈÓ `?Ž~€Uü‚Uü«x,’,rVñ¬âÇ1°Š_°Š`E²Ežn«øqŒð¬â¬âXÅc‘l‘§À*~#ü«ø«øVñX$[äé°ŠÇ?À*~Á*~€U<Éyº¬âÇ1°Š_°Š`E²Ežn«øqŒð¬â¬âXÅc‘l‘§À*~#ü«ø«øVñX$[äé°ŠÇ?À*~Á*~€U<Éyº¬âÇ1°Š_°Š`E²Ežn«øqŒð¬â¬âXÅc‘d‘³Š`?Ž~€Uü‚Uü«x,’-òtXÅc„`¿`?À*‹d‹<ÝVñãáXÅ/XŰŠÇ"Ù"O7€Uü8FøVñ Vñ¬â±H¶ÈÓ `?Ž~€Uü‚Uü«x,’-òtXÅc„`¿`?À*‹d‹<ÝVñãáXÅ/XŰŠÇ"Ù"O7€Uü8FøVñ Vñ¬â±H¶ÈÓ `?Ž~€Uü‚Uü«x,’-òtXÅc„`¿`?À*‹$‹œUü«øqŒð¬â¬âXÅc‘l‘§À*~#ü«ø«øVñX$[äé°ŠÇ?À*~Á*~€U<Éyº¬âÇ1°Š_°Š`E²Ežn«øqŒð¬â¬âXÅc‘l‘§À*~#ü«ø«øVñX$[äé°ŠÇ?À*~Á*~€U<Éyº¬âÇ1°Š_°Š`E²Ežn«øqŒð¬â¬âXÅc‘l‘§À*~#ü«ø«øVñXä‹?“,Ýüÿ†|[,§ÿ·z=}ý¯×>Fýcq.’- ·(À¢puåsT¶8É•[T`Q¹º‹ú9*[Šd‹‹[\Àââê X\Ÿ£²Å¡H¶¸¹Å ,n®¾Åý9*[Šd‹‡[<ÀâáêX<Ÿ£²Å¡H¶hÜ¢‹ÆÕ X´ÏQÙâP$[tnÑEçê,úç¨lq(’-^nñ‹—«_`ñ~ŽÊ‡"Ùâã°ø¸úßç¨lq(’, O7Òðà! ÝÈßç¨dq*’-òt# ÝÒÈç¨lq(’-òt# ÝÒèç¨lq(’-òt# ÝÒ¬ÏQÙâP$[äéF@º<¤ÙŸ£²Å¡H¶ÈÓ€t#Ge‹C‘l‘§éFxðnÄ>Ge‹C‘l‘§éFxðnÄ?Ge‹C‘l‘§éFxðnä~ŽÊ‡"Ù"O7Òðà! ÝÈû•-E’EåéFAºQ<¤ýû•,NE²Ežn¤åÁCAºQù•-E²Ežn¤åÁCAºQý•-E²Ežn¤åÁCAºÑõ9*[Šd‹<Ý(H7ʃ‡‚t£ûsT¶8ÉyºQn”éFÏç¨lq(’-òt£ Ý( ÒÚç¨lq(’-òt£ Ý( Òúç¨lq(’-òt£ Ý( ÒÞÏQÙâP$[äéFAºQ<¤}Ÿ£²Å¡H²¸xºY Ý,<H7ëïsT²8ÉyºY Ý,<H7K>Ge‹C‘l‘§›ÒÍâÁct³ôsT¶8ÉyºY Ý,<H7k}ŽÊ‡"Ù"O7 ¤›ÅƒÇéfíÏQÙâP$[äéft³xðX ݬó9*[Šd‹<Ý,n ¤›eŸ£²Å¡H¶ÈÓÍéfñà±@ºYþ9*[Šd‹<Ý,n ¤›u?Ge‹C‘l‘§›ÒÍâÁct³Þç¨lq(’,nžn6H7› ÒÍþû•,NE²Ežn6H7› ÒÍ–ÏQÙâP$[äéfƒt³yðØ Ýlý•-E²Ežn6H7› ÒÍ^Ÿ£²Å¡H¶ÈÓÍéfóà±AºÙûsT¶8ÉyºÙ Ýl<6H7û|ŽÊ‡"Ù"O7¤›ÍƒÇéfÛç¨lq(’-òt³AºÙG%‹S‘l‘§›ÒÍáÁã€tsäsT¶8Éyº9 Ý<H7G?Ge‹C‘l‘§›ÒÍáÁã€tsÖç¨lq(’-òts@º9G%‹S‘l‘§› ÒÍåÁã‚tsåsT¶8Éyº¹ Ý\<.H7W?Ge‹C‘l‘§› ÒÍåÁã‚ts×ç¨lq(’-òtsAº¹Ge‹C‘d‘³Š°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E’EÎ*À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<I9«X«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$Yä¬b¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘d‘³Š°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E’EÎ*À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<I9«X«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$Yä¬b¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘d‘³Š°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `E²Ežn«X8FX«X‚U,€U<Éyº¬báa¬b V±VñX$[äé°Š…c„°Š%XÅXÅc‘l‘§À*ŽÀ*–` `Eþµ¨œU¬€U¬#¬€U¬Á*VÀ*‹d‹Â- °(\]€Eù•-E²EåXT®®À¢~ŽÊ‡"Ùââ°¸¸ú×ç¨lq(’-nnq‹›«o`qŽÊ‡"Ùâá°x¸úÏç¨lq(’-·hÀ¢quísT¶8É[t`ѹº‹þ9*[Šd‹—[¼ÀâåêX¼Ÿ£²Å¡H¶ø¸Å,>®þ€Å÷9*[Š$‹œU¬€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’,rV±V±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H²ÈYÅ XÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"É"g+`+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹$‹œU¬€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’,rV±V±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H²ÈYÅ XÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"É"g+`+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹$‹œU¬€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,’-òtXÅÊ1 XŬb¬â±H¶ÈÓ `+Ç+`k°Š°ŠÇ"Ù"O7€U¬#¬€U¬Á*VÀ*‹d‹<ÝV±rŒ°V±«X«x,ò¯ÅÅYÅ °ŠÇ/À*^Á*^€U<É…[`Q¸º‹ò9*[Šd‹Ê-*°¨\]Eý•-E²ÅÅ-.`qqõ,®ÏQÙâP$[ÜÜâ7WßÀâþ•-E²ÅÃ-`ñpõ,žÏQÙâP$[4nÑ€Eãê,Úç¨lq(’-:·èÀ¢suýsT¶8É/·xÅËÕ/°x?Ge‹C‘lñq‹X|\ý‹ïsT¶8I9«xVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H²ÈYÅ °ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E’EÎ*^€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’,rVñ¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘d‘³Š`/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹$‹œU¼«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$Yä¬âXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"É"g/À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<Éyº¬âÅ1 °ŠW°Š`E²Ežn«xqŒð¬â¬âXÅc‘l‘§À*^#¼«x«xVñX$[äé°ŠÇ/À*^Á*^€U<I9«xVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±H¶ÈÓ `/Ž^€U¼‚U¼«x,’-òtXÅ‹c„`¯`/À*‹d‹<ÝVñâáXÅ+XÅ °ŠÇ"Ù"O7€U¼8FxVñ Vñ¬â±È¿7goÀ*Þ#¼«x«xVñX$[nQ€Eáê,Êç¨lq(’-*·¨À¢ruõsT¶8É·¸€ÅÅÕ°¸>Ge‹C‘lqs‹XÜ\}‹ûsT¶8É·x€ÅÃÕ°x>Ge‹C‘lѸE«°hŸ£²Å¡H¶èÜ¢‹ÎÕXôÏQÙâP$[¼Üâ/W¿Àâý•-E²ÅÇ->`ñqõ,¾ÏQÙâP$Yä¬â XÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"É"goÀ*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<I9«xVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H²ÈYŰŠ7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E’EÎ*Þ€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’,rVñ¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘d‘³Š7`oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹$‹œU¼«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$[äé°Š7ÇoÀ*ÞÁ*Þ€U<Éyº¬âÍ1°Šw°Š7`E²Ežn«xsŒð¬â¬â XÅc‘l‘§À*Þ#¼«x«xVñX$Yä¬â XÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"Ù"O7€U¼9FxVñVñ¬â±H¶ÈÓ `oŽÞ€U¼ƒU¼«x,’-òtXÅ›c„7`ï`oÀ*‹d‹<ÝVñæá XÅ;XŰŠÇ"ÿZ<œU|«øpŒð¬â¬âXÅc‘lQøtåsÔÿHN†"Ùb1]ùôSO—?>ýÿ\!å¯`…ôsT^¡¡H^!å+¤`…”¯‚ZüàX¡õ9*¯ÐP$¯Ðâ+´À -¾B ¬Ðæ¿Á íÏQy…†"y…6_¡ VhóÚ`…?øVè|ŽÊ+4É+tø °B‡¯Ð+düà ¬}ŽÊ+4É+d|… ¬ñ2°BÎÞÁ ù稼BC‘¼BÎWÈÁ 9_!+tùÁ_°B÷sT^¡¡H^¡ËW肺|….X¡ÇþzŸ£ò Eò =¾B¬Ðã+B1ÇG€¸>Á¨>dzý_I+TMW>ýÔÓÿs…!ûpúô„ìˆë# SOEò ñL- S ÏÔ°}8¼úÀö Bö©§"y…x¦©…gjÀç>œ}}Ÿû`ûÈÔS‘¼Bï}‚Ï}dê©H^!ž©djá™ÐÁ'o@?÷>2õT$¯ÏÔ2µðL à⇃»€‹Ÿ ƒ™z*’Wˆgj™Zx¦lòùß°ÉOÀÅ€L=É+Ä3µ€L- Sž©AmËá•(Ô¶œè]9dê©H^!ž©ÈÔ‡gjÐúrx£Ê­/'j[Ιz*’Wˆgê2õá™”Æ^Èr@ỉ֗s@¦žŠäâ™ú€L}x¦3‡÷¹Ð9s¢4æ©§"y…x¦> Sž©AeÍáu0TÖœèœ9dê©H^!ž©ÈÔ‡gjÐxsx›Ì7'*kΙz*’Wˆgê2õá™æ^Fs@aΉƛc SOEÒ ÏÔ2µñL úvï²9 oçDaÎ1©§"y…x¦6©gjP×sxÎu='úvŽL=É+Ä3µLmu@AÖ‰†«ã SOEò ñLí S;ÏÔ _ëðîªúµNd™z*’Wˆgj™Úy¦õ\‡W_PÏu¢_ë8ÈÔS‘¼BGåŠäz|…X¡ÇWdj^qè GÑ£GÑAâX$­ïQtУè¼GÑA¢óŠC=Š=ŠzÇ"y…x¦=ŠÎ{ô(:¯8tУèÑ£è Gq,’WˆgjУè¼GÑA¢óŠC=Š=ŠzÇ"y…x¦=ŠÎ{ô(:¯8tУèÑ£è Gq,’WˆgjУè¼GÑA¢óŠC=Š=ŠzÇ"y…x¦=ŠÎ{ô(:¯8tУèÑ£è Gq,’WˆgjУè¼GÑA¢óŠC=Š=ŠzÇ"y…x¦=ŠÎ{ô(:¯8tУèÑ£è Gq,’WˆgjУè¼GÑA¢óŠC=Š=ŠzÇ"y…x¦=ŠÎ{ô(:¯8tУèÑ£è Gq,’Vˆ÷(:èQtÞ£è GÑyÅ¡ƒEE=Šc‘¼B© ñž8Š;Š 8Ї 8Šm;Š 8ŠÏEjB¼§ŽbãŽbŽbãÄaŽbÛŽbŽâs‘š謹ظ£Ø€£Ø8qØ€£Ø¶£Ø€£ø\¤&Ä{jà(6î(6à(6N6à(¶í(6à(>© ñž8Š;Š 8Ї 8Šm;Š 8ŠÏEjB¼§ŽbãŽbŽbãÄaŽbÛŽbŽâs‘š謹ظ£Ø€£Ø8qØ€£Ø¶£Ø€£ø\¤$ÄÅÅÆÅÅÆ‰ÃŶÅÅç"5!ÞSG±qG±G±qâ°G±mG±Gñ¹HMˆ÷ÔÀQlÜQlÀQlœ8lÀQlÛQlÀQ|.Râ=5pwp'pÛvpŸ‹Ô„xO ÅÆÅÅÆ‰ÃŶÅÅç"5!ÞSG±qG±G±qâ°G±mG±Gñ¹HMˆ÷ÔÀQlÜQlÀQlœ8lÀQlÛQlÀQ|.Râ=5pwp'pÛvpŸ‹Ô„xO ÅÆÅÅÆ‰ÃŶÅÅç"5!ÞSG±qG±G±qâ°G±mG±Gñ¹HIˆ;Š 8Š;Š 8Ї 8Šm;Š 8ŠÏEjB¼§ŽbãŽbŽbãÄaŽbÛŽbŽâs‘š謹ظ£Ø€£Ø8qØ€£Ø¶£Ø€£ø\¤&Ä{jà(6î(6à(6N6à(¶í(6à(>© ñž8Š;Š 8Ї 8Šm;Š 8ŠÏEjB¼§ŽbãŽbŽbãÄaŽbÛŽbŽâs‘š謹ظ£Ø€£Ø8qØ€£Ø¶£Ø€£ø\¤&Ä{jà(6î(6à(6N6à(¶í(6à(>© ñž8Š;Š 8Ї 8Šm;Š 8ŠÏEjB¼§ŽbãŽbŽbãÄaŽbÛŽbŽâs‘’wpwp'pÛvpŸ‹Ô„xO ÅÆÅÅÆ‰ÃŶÅÅç"5!ÞSG±qG±G±qâ°G±mG±Gñ¹HMˆ÷ÔÀQlÜQlÀQlœ8lÀQlÛQlÀQ|.Râ=5pwp'pÛvpŸ‹Ô„xO ÅÆÅÅÆ‰ÃŶÅÅç"5!ÞSG±qG±G±qâ°G±mG±Gñ¹HMˆ÷ÔÀQlÜQlÀQlœ8lÀQlÛQlÀQ|.Râ=5pwp'pÛvpŸ‹Ô„xO ÅÆÅÅÆ‰ÃŶÅÅç"%!î(6à(6î(6à(6N6à(¶í(6à(>© ñž8Š;Š 8Ї 8Šm;Š 8ŠÏEjB¼§ŽbãŽbŽbãÄaŽbÛŽbŽâs‘š謹ظ£Ø€£Ø8qØ€£Ø¶£Ø€£ø\¤&Ä{jà(6î(6à(6N6à(¶í(6à(>© ñž8Š;Š 8Ї 8Šm;Š 8ŠÏEjB¼§ŽbãŽbŽbãÄaŽbÛŽbŽâs‘š謹ظ£Ø€£Ø8qØ€£Ø¶£Ø€£ø\¤&Ä{jà(6î(6à(6N6à(¶í(6à(>© ñž8Š;Š 8Ї 8Šm;Š 8ŠÏEJBÜQlÀQlÜQlÀQlœ8lÀQlÛQlÀQ|.Râ=5pwp'pÛvpŸ‹Ô„xO ÅÆÅÅÆ‰ÃŶÅÅç"5!ÞSG±qG±G±qâ°G±mG±Gñ¹HMˆ÷ÔÀQlÜQlÀQlœ8lÀQlÛQlÀQ|.Râ=5pwp'pÛvpŸ‹Ô„xO ÅÆÅÅÆ‰ÃŶÅÅç"5!ÞSG±qG±G±qâ°G±mG±Gñ¹HMˆ÷ÔÀQlÜQlÀQlœ8lÀQlÛQlÀQ|.Râ=5pwp'pÛvpŸ‹”„¸£Ø€£Ø¸£Ø€£Ø8qØ€£Ø¶£Ø€£ø\¤&Ä{jà(6î(6à(6N6à(¶í(6à(>© ñž8Š;Š 8Ї 8Šm;Š 8ŠÏEjB¼§ŽbãŽbŽbãÄaŽbÛŽbŽâs‘š謹ظ£Ø€£Ø8qØ€£Ø¶£Ø€£ø\¤&Ä{jà(6î(6à(6N6à(¶í(6à(>© ñž8Š;Š 8Ї 8Šm;Š 8ŠÏEjB¼§ŽbãŽbŽbãÄaŽbÛŽbŽâs‘š謹ظ£Ø€£Ø8qØ€£Ø¶£Ø€£ø\¤&Ä{jà(6î(6à(6N6à(¶í(6à(>) qG±G±qG±G±qâ°G±mG±Gñ¹HMˆ÷ÔÀQlÜQlÀQlœ8lÀQlÛQlÀQ|.Râ=5pwp'pÛvpŸ‹Ô„xO ÅÆÅÅÆ‰ÃŶÅÅç"5!ÞSG±qG±G±qâ°G±mG±Gñ¹HMˆ÷ÔÀQlÜQlÀQlœ8lÀQlÛQlÀQ|.Râ=5pwp'pÛvpŸ‹Ô„xO ÅÆÅÅÆ‰ÃŶÅÅç"5!ÞSG±qG±G±qâ°G±mG±Gñ¹HMˆ÷ÔÀQlÜQlÀQlœ8lÀQlÛQlÀQ|.RâŽbŽbãŽbŽbãÄaŽbÛŽbŽâs‘š謹ظ£Ø€£Ø8qØ€£Ø¶£Ø€£ø\¤&Ä{jà(6î(6à(6N6à(¶í(6à(>© ñž8Š;Š 8Ї 8Šm;Š 8ŠÏEjB¼§ŽbãŽbŽbãÄaŽbÛŽbŽâs‘š謹ظ£Ø€£Ø8qØ€£Ø¶£Ø€£ø\¤&Ä{jà(6î(6à(6N6à(¶í(6à(>© ñž8Š;Š 8Ї 8Šm;Š 8ŠÏEjB¼§ŽbãŽbŽbãÄaŽbÛŽbŽâs‘š謹ظ£Ø€£Ø9qأط£Ø£ø\äL¨sG±G±sG±G±sâ°G±oG±Gñ¹HM¨ñ„H¨ñ„H¨ó¾ƒ„úÏ«jBEjB'ÔAB'ÔABƒÿð$4~^Uz,R<¡<¡šü‡Ÿ ¡ùóªšÐc‘šÐä MÐä MÐâ?ü ­ŸWÕ„‹Ô„Oh„Oh„Œÿð²ŸWÕ„‹Ô„Œ'd !ã HÈùï !ÿyUMè±HMÈyBržƒ„‚ÿðŠŸWÕ„‹Ô„‚' ¡à H(ùŸ ¡üyUMè±HM(yB Jžè©9qأط£Ø£ø\¤$ÄÅÅÎÅÅΉÃžÅÅç"5!ÞSG±sG±G±sâ°G±oG±Gñ¹HMˆ÷ÔÀQìÜQìÀQìœ8ìÀQìÛQìÀQ|.Râ=5p;w;p;';pûv;pŸ‹Ô„xO ÅÎÅÅΉÃžÅÅç"5!ÞSG±sG±G±sâ°G±oG±Gñ¹HMˆ÷ÔÀQìÜQìÀQìœ8ìÀQìÛQìÀQ|.Râ=5p;w;p;';pûv;pŸ‹Ô„xO ÅÎÅÅΉÃžÅÅç"5!ÞSG±sG±G±sâ°G±oG±Gñ¹HIˆ;Š8Š;Š8Ї8Š};Š8ŠÏEjB¼§ŽbçŽbŽbçÄaŽbߎbŽâs‘š謹ع£Ø£Ø9qأط£Ø£ø\¤&Ä{jà(vî(và(vNvà(öí(và(>© ñž8Š;Š8Ї8Š};Š8ŠÏEjB¼§ŽbçŽbŽbçÄaŽbߎbŽâs‘š謹ع£Ø£Ø9qأط£Ø£ø\¤&Ä{jà(vî(và(vNvà(öí(và(>© ñž8Š;Š8Ї8Š};Š8ŠÏEjB¼§ŽbçŽbŽbçÄaŽbߎbŽâs‘’w;p;w;p;';pûv;pŸ‹Ô„xO ÅÎÅÅΉÃžÅÅç"5!ÞSG±sG±G±sâ°G±oG±Gñ¹HMˆ÷ÔÀQìÜQìÀQìœ8ìÀQìÛQìÀQ|.Râ=5p;w;p;';pûv;pŸ‹Ô„xO ÅÎÅÅΉÃžÅÅç"5!ÞSG±sG±G±sâ°G±oG±Gñ¹HMˆ÷ÔÀQìÜQìÀQìœ8ìÀQìÛQìÀQ|.Râ=5p;w;p;';pûv;pŸ‹Ô„xO ÅÎÅÅΉÃžÅÅç"%!î(và(vî(và(vNvà(öí(và(>© ñž8Š;Š8Ї8Š};Š8ŠÏEjB¼§ŽbçŽbŽbçÄaŽbߎbŽâs‘š謹ع£Ø£Ø9qأط£Ø£ø\¤&Ä{jà(vî(và(vNvà(öí(và(>© ñž8Š;Š8Ї8Š};Š8ŠÏEjB¼§ŽbçŽbŽbçÄaŽbߎbŽâs‘š謹ع£Ø£Ø9qأط£Ø£ø\¤&Ä{jà(vî(và(vNvà(öí(và(>© ñž8Š;Š8Ї8Š};Š8ŠÏEJBÜQìÀQìÜQìÀQìœ8ìÀQìÛQìÀQ|.Râ=5p;w;p;';pûv;pŸ‹Ô„xO ÅÎÅÅΉÃžÅÅç"5!ÞSG±sG±G±sâ°G±oG±Gñ¹HMˆ÷ÔÀQìÜQìÀQìœ8ìÀQìÛQìÀQ|.Râ=5p;w;p;';pûv;pŸ‹Ô„xO ÅÎÅÅΉÃžÅÅç"5!ÞSG±sG±G±sâ°G±oG±Gñ¹HMˆ÷ÔÀQìÜQìÀQìœ8ìÀQìÛQìÀQ|.Râ=5p;w;p;';pûv;pŸ‹”„¸£Ø£Ø¹£Ø£Ø9qأط£Ø£ø\¤&Ä{jà(vî(và(vNvà(öí(và(>© ñž8Š;Š8Ї8Š};Š8ŠÏEjB¼§ŽbçŽbŽbçÄaŽbߎbŽâs‘š謹ع£Ø£Ø9qأط£Ø£ø\¤&Ä{jà(vî(và(vNvà(öí(và(>© ñž8Š;Š8Ї8Š};Š8ŠÏEjB¼§ŽbçŽbŽbçÄaŽbߎbŽâs‘š謹ع£Ø£Ø9qأط£Ø£ø\¤&Ä{jà(vî(và(vNvà(öí(và(>) qG±G±sG±G±sâ°G±oG±Gñ¹HMˆ÷ÔÀQìÜQìÀQìœ8ìÀQìÛQìÀQ|.Râ=5p;w;p;';pûv;pŸ‹Ô„xO ÅÎÅÅΉÃžÅÅç"5!ÞSG±sG±G±sâ°G±oG±Gñ¹HMˆ÷ÔÀQìÜQìÀQìœ8ìÀQìÛQìÀQ|.Râ=5p;w;p;';pûv;pŸ‹Ô„xO ÅÎÅÅΉÃžÅÅç"5!ÞSG±sG±G±sâ°G±oG±Gñ¹HMˆ÷ÔÀQìÜQìÀQìœ8ìÀQìÛQìÀQ|.RâŽbŽbçŽbŽbçÄaŽbߎbŽâs‘š謹ع£Ø£Ø9qأط£Ø£ø\¤&Ä{jà(vî(và(vNvà(öí(và(>© ñž8Š;Š8Ї8Š};Š8ŠÏEjB¼§ŽbçŽbŽbçÄaŽbߎbŽâs‘š謹ع£Ø£Ø9qأط£Ø£ø\¤&Ä{jà(vî(và(vNvà(öí(và(>© ñž8Š;Š8Ї8Š};Š8ŠÏEjB¼§ŽbçŽbŽbçÄaŽbߎbŽâs‘š謹ع£Ø£Ø9qأط£Ø£ø\¤$ÄÅÅÎÅÅΉÃžÅÅç"5!ÞSG±sG±G±sâ°G±oG±Gñ¹HMˆ÷ÔÀQìÜQìÀQìœ8ìÀQìÛQìÀQ|.Râ=5p;w;p;';pûv;pŸ‹Ô„xO ÅÎÅÅΉÃžÅÅç"5!ÞSG±sG±G±sâ°G±oG±Gñ¹HMˆ÷ÔÀQìÜQìÀQìœ8ìÀQìÛQìÀQ|.Râ=5p;w;p;';pûv;pŸ‹Ô„xO ÅÎÅÅΉÃžÅÅç"5!ÞSG±sG±GqpâpGqlGqGñ¹È™ÐàŽâŽâàŽâŽâàÄáŽâØŽâŽâs‘šPã 5Pã 5Pç?| õŸWÕ„‹Ô„:O¨ƒ„:O¨ƒ„ÿáHhü¼ª&ôX¤&4xB$4xB$4ù?ABóçU5¡Ç"5¡Éš ¡Éš ¡ÅøZ?¯ª =© -žÐ -žÐ ÿá $d?¯ª =© OÈ@BÆ2óÞABþóªšÐc‘šó„$äABùóªšÐc‘šPò„$”© ñž8Šƒ;Š8Šƒ‡8Šc;Š8ŠÏEjB¼§ŽâàŽâŽâàÄáŽâØŽâŽâs‘šï©£8¸£8€£88q8€£8¶£8€£ø\¤&Ä{jà(î(à(Nà(Ží(à(>© ñž8Šƒ;Š8Šƒ‡8Šc;Š8ŠÏEjB¼§ŽâàŽâŽâàÄáŽâØŽâŽâs‘’wpwp'pÇvpŸ‹Ô„xO ÅÁÅÅÁ‰ÃűÅÅç"5!ÞSGqpGqGqpâpGqlGqGñ¹HMˆ÷ÔÀQÜQÀQœ8ÀQÛQÀQ|.Râ=5pwp'pÇvpŸ‹Ô„xO ÅÁÅÅÁ‰ÃűÅÅç"5!ÞSGqpGqGqpâpGqlGqGñ¹HMˆ÷ÔÀQÜQÀQœ8ÀQÛQÀQ|.Râ=5pwp'pÇvpŸ‹Ô„xO ÅÁÅÅÁ‰ÃűÅÅç"%!î(à(î(à(Nà(Ží(à(>© ñž8Šƒ;Š8Šƒ‡8Šc;Š8ŠÏEjB¼§ŽâàŽâŽâàÄáŽâØŽâŽâs‘šï©£8¸£8€£88q8€£8¶£8€£ø\¤&Ä{jà(î(à(Nà(Ží(à(>© ñž8Šƒ;Š8Šƒ‡8Šc;Š8ŠÏEjB¼§ŽâàŽâŽâàÄáŽâØŽâŽâs‘šï©£8¸£8€£88q8€£8¶£8€£ø\¤&Ä{jà(î(à(Nà(Ží(à(>© ñž8Šƒ;Š8Šƒ‡8Šc;Š8ŠÏEJBÜQÀQÜQÀQœ8ÀQÛQÀQ|.Râ=5pwp'pÇvpŸ‹Ô„xO ÅÁÅÅÁ‰ÃűÅÅç"5!ÞSGqpGqGqpâpGqlGqGñ¹HMˆ÷ÔÀQÜQÀQœ8ÀQÛQÀQ|.Râ=5pwp'pÇvpŸ‹Ô„xO ÅÁÅÅÁ‰ÃűÅÅç"5!ÞSGqpGqGqpâpGqlGqGñ¹HMˆ÷ÔÀQÜQÀQœ8ÀQÛQÀQ|.Râ=5pwp'pÇvpŸ‹”„¸£8€£8¸£8€£88q8€£8¶£8€£ø\¤&Ä{jà(î(à(Nà(Ží(à(>© ñž8Šƒ;Š8Šƒ‡8Šc;Š8ŠÏEjB¼§ŽâàŽâŽâàÄáŽâØŽâŽâs‘šï©£8¸£8€£88q8€£8¶£8€£ø\¤&Ä{jà(î(à(Nà(Ží(à(>© ñž8Šƒ;Š8Šƒ‡8Šc;Š8ŠÏEjB¼§ŽâàŽâŽâàÄáŽâØŽâŽâs‘šï©£8¸£8€£88q8€£8¶£8€£ø\¤&Ä{jà(î(à(Nà(Ží(à(>) qGqGqpGqGqpâpGqlGqGñ¹HMˆ÷ÔÀQÜQÀQœ8ÀQÛQÀQ|.Râ=5pwp'pÇvpŸ‹Ô„xO ÅÁÅÅÁ‰ÃűÅÅç"5!ÞSGqpGqGqpâpGqlGqGñ¹HMˆ÷ÔÀQÜQÀQœ8ÀQÛQÀQ|.Râ=5pwp'pÇvpŸ‹Ô„xO ÅÁÅÅÁ‰ÃűÅÅç"5!ÞSGqpGqGqpâpGqlGqGñ¹HMˆ÷ÔÀQÜQÀQœ8ÀQÛQÀQ|.RâŽâŽâàŽâŽâàÄáŽâØŽâŽâs‘šï©£8¸£8€£88q8€£8¶£8€£ø\¤&Ä{jà(î(à(Nà(Ží(à(>© ñž8Šƒ;Š8Šƒ‡8Šc;Š8ŠÏEjB¼§ŽâàŽâŽâàÄáŽâØŽâŽâs‘šï©£8¸£8€£88q8€£8¶£8€£ø\¤&Ä{jà(î(à(Nà(Ží(à(>© ñž8Šƒ;Š8Šƒ‡8Šc;Š8ŠÏEjB¼§ŽâàŽâŽâàÄáŽâØŽâŽâs‘šï©£8¸£8€£88q8€£8¶£8€£ø\¤$ÄÅÅÁÅÅÁ‰ÃűÅÅç"5!ÞSGqpGqGqpâpGqlGqGñ¹HMˆ÷ÔÀQÜQÀQœ8ÀQÛQÀQ|.Râ=5pwp'pÇvpŸ‹Ô„xO ÅÁÅÅÁ‰ÃűÅÅç"5!ÞSGqpGqGqpâpGqlGqGñ¹HMˆ÷ÔÀQÜQÀQœ8ÀQÛQÀQ|.Râ=5pwp'pÇvpŸ‹Ô„xO ÅÁÅÅÁ‰ÃűÅÅç"5!ÞSGqpGqGqpâpGqlGqGñ¹HIˆ;Š8Šƒ;Š8Šƒ‡8Šc;Š8ŠÏEjB¼§ŽâàŽâŽâàÄáŽâØŽâŽâs‘šï©£8¸£8€£88q8€£8¶£8€£ø\¤&Ä{jà(î(à(Nà(Ží(à(>© ñž8Šƒ;Š8Šƒ‡8Šc;Š8ŠÏEjB¼§ŽâàŽâŽâàÄáŽâØŽâŽâs‘šï©£8¸£8€£88q8€£8¶£8€£ø\¤&Ä{jà(î(à(Nà(Ží(à(>© ñž8Šƒ;Š8Šƒ‡8Šc;Š8ŠÏEjB¼§ŽâàŽâŽâäÄáŽâÜŽâŽâs‘3¡ÉÅ ÅÉÅ Åɉà ŹÅ Åç"5¡Æj ¡Æj ¡Îøê?¯ª =© užP užP þÃÐøyUMè±HMhð„Hhð„Hhò~‚„æÏ«jBEjB“'4AB“'4AB‹ÿð $´~^Uz,RZ<¡Z<¡2þÃHÈ~^Uz,R2ž„Œ'd !ç?¼ƒ„üçU5¡Ç"5!ç 9HÈyB þÃH(~^Uz,R žP€„‚' ¡ä?|‚„òçU5¡Ç"5¡ä %H(yB §æÄáŽâÜŽâŽâs‘’w'p'w'p'''pçv'pŸ‹Ô„xO ÅÉÅ Åɉà ŹÅ Åç"5!ÞSGqrGqGqrâpGqnGqGñ¹HMˆ÷ÔÀQœÜQœÀQœœ8œÀQœÛQœÀQ|.Râ=5p'w'p'''pçv'pŸ‹Ô„xO ÅÉÅ Åɉà ŹÅ Åç"5!ÞSGqrGqGqrâpGqnGqGñ¹HMˆ÷ÔÀQœÜQœÀQœœ8œÀQœÛQœÀQ|.Râ=5p'w'p'''pçv'pŸ‹Ô„xO ÅÉÅ Åɉà ŹÅ Åç"%!î(Nà(Nî(Nà(NNNà(Îí(Nà(>© ñž8Š“;Š8Š“‡8Šs;Š8ŠÏEjB¼§ŽâäŽâŽâäÄáŽâÜŽâŽâs‘šï©£8¹£8£89q8£8·£8£ø\¤&Ä{jà(Nî(Nà(NNNà(Îí(Nà(>© ñž8Š“;Š8Š“‡8Šs;Š8ŠÏEjB¼§ŽâäŽâŽâäÄáŽâÜŽâŽâs‘šï©£8¹£8£89q8£8·£8£ø\¤&Ä{jà(Nî(Nà(NNNà(Îí(Nà(>© ñž8Š“;Š8Š“‡8Šs;Š8ŠÏEJBÜQœÀQœÜQœÀQœœ8œÀQœÛQœÀQ|.Râ=5p'w'p'''pçv'pŸ‹Ô„xO ÅÉÅ Åɉà ŹÅ Åç"5!ÞSGqrGqGqrâpGqnGqGñ¹HMˆ÷ÔÀQœÜQœÀQœœ8œÀQœÛQœÀQ|.Râ=5p'w'p'''pçv'pŸ‹Ô„xO ÅÉÅ Åɉà ŹÅ Åç"5!ÞSGqrGqGqrâpGqnGqGñ¹HMˆ÷ÔÀQœÜQœÀQœœ8œÀQœÛQœÀQ|.Râ=5p'w'p'''pçv'pŸ‹”„¸£8£8¹£8£89q8£8·£8£ø\¤&Ä{jà(Nî(Nà(NNNà(Îí(Nà(>© ñž8Š“;Š8Š“‡8Šs;Š8ŠÏEjB¼§ŽâäŽâŽâäÄáŽâÜŽâŽâs‘šï©£8¹£8£89q8£8·£8£ø\¤&Ä{jà(Nî(Nà(NNNà(Îí(Nà(>© ñž8Š“;Š8Š“‡8Šs;Š8ŠÏEjB¼§ŽâäŽâŽâäÄáŽâÜŽâŽâs‘šï©£8¹£8£89q8£8·£8£ø\¤&Ä{jà(Nî(Nà(NNNà(Îí(Nà(>) qGqGqrGqGqrâpGqnGqGñ¹HMˆ÷ÔÀQœÜQœÀQœœ8œÀQœÛQœÀQ|.Râ=5p'w'p'''pçv'pŸ‹Ô„xO ÅÉÅ Åɉà ŹÅ Åç"5!ÞSGqrGqGqrâpGqnGqGñ¹HMˆ÷ÔÀQœÜQœÀQœœ8œÀQœÛQœÀQ|.Râ=5p'w'p'''pçv'pŸ‹Ô„xO ÅÉÅ Åɉà ŹÅ Åç"5!ÞSGqrGqGqrâpGqnGqGñ¹HMˆ÷ÔÀQœÜQœÀQœœ8œÀQœÛQœÀQ|.RâŽâŽâäŽâŽâäÄáŽâÜŽâŽâs‘šï©£8¹£8£89q8£8·£8£ø\¤&Ä{jà(Nî(Nà(NNNà(Îí(Nà(>© ñž8Š“;Š8Š“‡8Šs;Š8ŠÏEjB¼§ŽâäŽâŽâäÄáŽâÜŽâŽâs‘šï©£8¹£8£89q8£8·£8£ø\¤&Ä{jà(Nî(Nà(NNNà(Îí(Nà(>© ñž8Š“;Š8Š“‡8Šs;Š8ŠÏEjB¼§ŽâäŽâŽâäÄáŽâÜŽâŽâs‘šï©£8¹£8£89q8£8·£8£ø\¤$ÄÅ ÅÉÅ Åɉà ŹÅ Åç"5!ÞSGqrGqGqrâpGqnGqGñ¹HMˆ÷ÔÀQœÜQœÀQœœ8œÀQœÛQœÀQ|.Râ=5p'w'p'''pçv'pŸ‹Ô„xO ÅÉÅ Åɉà ŹÅ Åç"5!ÞSGqrGqGqrâpGqnGqGñ¹HMˆ÷ÔÀQœÜQœÀQœœ8œÀQœÛQœÀQ|.Râ=5p'w'p'''pçv'pŸ‹Ô„xO ÅÉÅ Åɉà ŹÅ Åç"5!ÞSGqrGqGqrâpGqnGqGñ¹HIˆ;Š8Š“;Š8Š“‡8Šs;Š8ŠÏEjB¼§ŽâäŽâŽâäÄáŽâÜŽâŽâs‘šï©£8¹£8£89q8£8·£8£ø\¤&Ä{jà(Nî(Nà(NNNà(Îí(Nà(>© ñž8Š“;Š8Š“‡8Šs;Š8ŠÏEjB¼§ŽâäŽâŽâäÄáŽâÜŽâŽâs‘šï©£8¹£8£89q8£8·£8£ø\¤&Ä{jà(Nî(Nà(NNNà(Îí(Nà(>© ñž8Š“;Š8Š“‡8Šs;Š8ŠÏEjB¼§ŽâäŽâŽâäÄáŽâÜŽâŽâs‘’w'p'w'p'''pçv'pŸ‹Ô„xO ÅÉÅ Åɉà ŹÅ Åç"5!ÞSGqrGqGqrâpGqnGqGñ¹HMˆ÷ÔÀQœÜQœÀQœœ8œÀQœÛQœÀQ|.Râ=5p'w'p'''pçv'pŸ‹Ô„xO ÅÉÅ Åɉà ŹÅ Åç"5!ÞSGqrGqGqrâpGqnGqGñ¹HMˆ÷ÔÀQœÜQœÀQœœ8œÀQœÛQœÀQ|.Râ=5p'w'p'''pçv'pŸ‹Ô„xO ÅÉÅ ÅʼnÃŵÅÅç"gB‹;Š 8Š‹;Š 8Š‹‡ 8Šk;Š 8ŠÏEjB'Ô@B'Ô@Bÿð$Ô^Uz,Rê<¡ê<¡ü‡ ¡ñóªšÐc‘šÐà Ðà Ðä?ü ÍŸWÕ„‹Ô„&Oh‚„&Oh‚„ÿáHhý¼ª&ôX¤&´xB $´xB $dü‡7ý¼ª&ôX¤&d© ñž8Š‹;Š 8Š‹‡ 8Šk;Š 8ŠÏEjB¼§ŽââŽâŽââÄáŽâÚŽâŽâs‘šï©£¸¸£¸€£¸8q¸€£¸¶£¸€£ø\¤&Ä{jà(.î(.à(.N.à(®í(.à(>© ñž8Š‹;Š 8Š‹‡ 8Šk;Š 8ŠÏEjB¼§ŽââŽâŽââÄáŽâÚŽâŽâs‘šï©£¸¸£¸€£¸8q¸€£¸¶£¸€£ø\¤&Ä{jà(.î(.à(.N.à(®í(.à(>© ñž8Š‹;Š 8Š‹‡ 8Šk;Š 8ŠÏEJBÜQ\ÀQ\ÜQ\ÀQ\œ8\ÀQ\ÛQ\ÀQ|.Râ=5pwp'p×vpŸ‹Ô„xO ÅÅÅÅʼnÃŵÅÅç"5!ÞSGqqGqGqqâpGqmGqGñ¹HMˆ÷ÔÀQ\ÜQ\ÀQ\œ8\ÀQ\ÛQ\ÀQ|.Râ=5pwp'p×vpŸ‹Ô„xO ÅÅÅÅʼnÃŵÅÅç"5!ÞSGqqGqGqqâpGqmGqGñ¹HMˆ÷ÔÀQ\ÜQ\ÀQ\œ8\ÀQ\ÛQ\ÀQ|.Râ=5pwp'p×vpŸ‹”„¸£¸€£¸¸£¸€£¸8q¸€£¸¶£¸€£ø\¤&Ä{jà(.î(.à(.N.à(®í(.à(>© ñž8Š‹;Š 8Š‹‡ 8Šk;Š 8ŠÏEjB¼§ŽââŽâŽââÄáŽâÚŽâŽâs‘šï©£¸¸£¸€£¸8q¸€£¸¶£¸€£ø\¤&Ä{jà(.î(.à(.N.à(®í(.à(>© ñž8Š‹;Š 8Š‹‡ 8Šk;Š 8ŠÏEjB¼§ŽââŽâŽââÄáŽâÚŽâŽâs‘šï©£¸¸£¸€£¸8q¸€£¸¶£¸€£ø\¤&Ä{jà(.î(.à(.N.à(®í(.à(>) qGqGqqGqGqqâpGqmGqGñ¹HMˆ÷ÔÀQ\ÜQ\ÀQ\œ8\ÀQ\ÛQ\ÀQ|.Râ=5pwp'p×vpŸ‹Ô„xO ÅÅÅÅʼnÃŵÅÅç"5!ÞSGqqGqGqqâpGqmGqGñ¹HMˆ÷ÔÀQ\ÜQ\ÀQ\œ8\ÀQ\ÛQ\ÀQ|.Râ=5pwp'p×vpŸ‹Ô„xO ÅÅÅÅʼnÃŵÅÅç"5!ÞSGqqGqGqqâpGqmGqGñ¹HMˆ÷ÔÀQ\ÜQ\ÀQ\œ8\ÀQ\ÛQ\ÀQ|.RâŽâŽââŽâŽââÄáŽâÚŽâŽâs‘šï©£¸¸£¸€£¸8q¸€£¸¶£¸€£ø\¤&Ä{jà(.î(.à(.N.à(®í(.à(>© ñž8Š‹;Š 8Š‹‡ 8Šk;Š 8ŠÏEjB¼§ŽââŽâŽââÄáŽâÚŽâŽâs‘šï©£¸¸£¸€£¸8q¸€£¸¶£¸€£ø\¤&Ä{jà(.î(.à(.N.à(®í(.à(>© ñž8Š‹;Š 8Š‹‡ 8Šk;Š 8ŠÏEjB¼§ŽââŽâŽââÄáŽâÚŽâŽâs‘šï©£¸¸£¸€£¸8q¸€£¸¶£¸€£ø\¤$ÄÅÅÅÅÅʼnÃŵÅÅç"5!ÞSGqqGqGqqâpGqmGqGñ¹HMˆ÷ÔÀQ\ÜQ\ÀQ\œ8\ÀQ\ÛQ\ÀQ|.Râ=5pwp'p×vpŸ‹Ô„xO ÅÅÅÅʼnÃŵÅÅç"5!ÞSGqqGqGqqâpGqmGqGñ¹HMˆ÷ÔÀQ\ÜQ\ÀQ\œ8\ÀQ\ÛQ\ÀQ|.Râ=5pwp'p×vpŸ‹Ô„xO ÅÅÅÅʼnÃŵÅÅç"5!ÞSGqqGqGqqâpGqmGqGñ¹HIˆ;Š 8Š‹;Š 8Š‹‡ 8Šk;Š 8ŠÏEjB¼§ŽââŽâŽââÄáŽâÚŽâŽâs‘šï©£¸¸£¸€£¸8q¸€£¸¶£¸€£ø\¤&Ä{jà(.î(.à(.N.à(®í(.à(>© ñž8Š‹;Š 8Š‹‡ 8Šk;Š 8ŠÏEjB¼§ŽââŽâŽââÄáŽâÚŽâŽâs‘šï©£¸¸£¸€£¸8q¸€£¸¶£¸€£ø\¤&Ä{jà(.î(.à(.N.à(®í(.à(>© ñž8Š‹;Š 8Š‹‡ 8Šk;Š 8ŠÏEjB¼§ŽââŽâŽââÄáŽâÚŽâŽâs‘’wpwp'p×vpŸ‹Ô„xO ÅÅÅÅʼnÃŵÅÅç"5!ÞSGqqGqGqqâpGqmGqGñ¹HMˆ÷ÔÀQ\ÜQ\ÀQ\œ8\ÀQ\ÛQ\ÀQ|.Râ=5pwp'p×vpŸ‹Ô„xO ÅÅÅÅʼnÃŵÅÅç"5!ÞSGqqGqGqqâpGqmGqGñ¹HMˆ÷ÔÀQ\ÜQ\ÀQ\œ8\ÀQ\ÛQ\ÀQ|.Râ=5pwp'p×vpŸ‹Ô„xO ÅÅÅÅʼnÃŵÅÅç"%!î(.à(.î(.à(.N.à(®í(.à(>© ñž8Š‹;Š 8Š‹‡ 8Šk;Š 8ŠÏEjB¼§ŽââŽâŽââÄáŽâÚŽâŽâs‘šï©£¸¸£¸€£¸8q¸€£¸¶£¸€£ø\¤&Ä{jà(.î(.à(.N.à(®í(.à(>© ñž8Š‹;Š 8Š‹‡ 8Šk;Š 8ŠÏEjB¼§ŽââŽâŽââÄáŽâÚŽâŽâs‘šï©£¸¸£¸€£¸8q¸€£¸¶£¸€£ø\¤&Ä{jà(.î(.à(.N.à(®í(.à(>© ñž8Š‹;Š 8ŠÆ‰CŽ¢mGÑ€£ø\äLȸ£hÀQ4î(p‡EÛŽ¢Gñ¹HM¨ñ„H¨ñ„H¨ó¾ƒ„úÏ«jBEjB'ÔAB'ÔABƒÿð$4~^Uz,R<¡<¡šü‡Ÿ ¡ùóªšÐc‘šÐä MÐä MÐâ?ü ­ŸWÕ„‹Ô„Oh„Oh„Œÿð²ŸWÕ„‹Ô„Œ'd !ã HÈùï !ÿyUMè±HMÈyBržƒ„‚ÿðŠŸWÕ„‹Ô„‚' ¡à H(ùŸ ¡üyUMè±HM(yB Jžè©9qhÀQ´í(pŸ‹”„¸£hÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HIˆ;ŠE㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹”„¸£hÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HIˆ;ŠE㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹”„¸£hÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HIˆ;ŠE㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹”„¸£hÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HIˆ;ŠE㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹Ô„xO E㎢GÑ8qhÀQ´í(pŸ‹”„¸£hÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡EÛŽ¢Gñ¹HMˆ÷ÔÀQ4î(p‡Eߎ¢Gñ¹È™sGÑ£èÜQtà(:'8оEŽâs‘šPã 5Pã 5Pç?| õŸWÕ„‹Ô„:O¨ƒ„:O¨ƒ„ÿáHhü¼ª&ôX¤&4xB$4xB$4ù?ABóçU5¡Ç"5¡Éš ¡Éš ¡ÅøZ?¯ª =© -žÐ -žÐ ÿá $d?¯ª =© OÈ@BÆ2óÞABþóªšÐc‘šó„$äABùóªšÐc‘šPò„$”) qGÑ£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘’w8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>) qGÑ£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘’w8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>) qGÑ£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘’w8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>) qGÑ£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘’w8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>© ñž8ŠÎEŽ¢sâУèÛQtà(>) qGÑ£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà(:'8оEŽâs‘šï©£èÜQtà('8бÅŽâs‘3¡àŽbG1¸£ÀQ Npc;ŠÅç"5¡Æj ¡Æj ¡Îøê?¯ª =© užP užP þÃÐøyUMè±HMhð„Hhð„Hhò~‚„æÏ«jBEjB“'4AB“'4AB‹ÿð $´~^Uz,RZ<¡Z<¡2þÃHÈ~^Uz,R2ž„Œ'd !ç?¼ƒ„üçU5¡Ç"5!ç 9HÈyB þÃH(~^Uz,R žP€„‚' ¡ä?|‚„òçU5¡Ç"5¡ä %H(yB §æÄaG1¶£ÀQ|.RâŽbG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"%!î(pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.RâŽbG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"%!î(pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.RâŽbG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"%!î(pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.RâŽbG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"%!î(pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.Râ=5pƒ;ŠÅàÄaG1¶£ÀQ|.RâŽbG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQ Npc;ŠÅç"5!ÞSG1¸£ÀQLN&ps;Š Åç"gBÉÅŽbrG1£˜œ8Là(æv8ŠÏEjB'Ô@B'Ô@Bÿð$Ô^Uz,Rê<¡ê<¡ü‡ ¡ñóªšÐc‘šÐà Ðà Ðä?ü ÍŸWÕ„‹Ô„&Oh‚„&Oh‚„ÿáHhý¼ª&ôX¤&´xB $´xB $dü‡7ý¼ª&ôX¤&dn_>¥/_·/ÿ>IWܾÜo_Rõ¼|ùaæ\¿¼Ý¢;¸”uýò[tMŠ®Ý¢;„û—ߢkRtí]—¢ë·èºt×õ[t]ЮߢëRtýÝñ1¨výò[tCŠîøHû~¹ݸEw|îÝõ¦·è†Ýñ±_Ö?_.ÝuãÝ”¢›·»nJÑÍ[tSºëæ-º)E7owÝ”¢›·èŽ÷Ù}^¾üx§{~þÃ-)ºãuÞ°Ï—KÑ­[tÇ ŒóöÏĺE·¤èÖ-ºãµ¥ë?Rv»ëLŠÎnwÝñ²‚]«ß¢3é®;vµ¿O›cEÙ¯Õ¿ÑÙç¿»Ka ÍœŸ/—¢ó[t.Ýu~‹Î¥èüv×›(vûç·».¤èâv×…Ý1ƒ]ß/—¢;ÆoŸ/—¢‹[t!ý…[tÇÉç-º”¢ËÛ]—Rty»ëRŠî8`ÿʤԜä%ºöG¹ëÚqšXýóå]úòq«>¥/_¿ÿ‘jLúr¿Ué˿ѭ’oÇibÙåËo§‰Ö¤èÎÓÄ·º]»E'&Úí4Ñšr×µÛi¢I§‰v;M4é4Ñn§‰&&Úí4ѤÓD»&Z—îºÛi¢I§‰6.}]“NívšhCŠî8Mø÷Ë¥èŽÓÄŠÏ—KÑÝNM:M´Ûi¢§‰yûò[tÒi¢ÝNM:M´Ûi¢§‰uýáoÑ-)ºu‹N:M´uiNštšh·ÓD[RtÇiÂ?wtšhçiâó 6)ºã4ñý³K§‰v;M4“¢;Nß¿qÒi¢Ùí®3):»ÝuçiâvÓúí®“NívšhÇi¯Õowtšh·ÓDs)ºÛi¢}O»´Ë—ßNM:M´¸Ewž&®Õ&>ÿH§‰ˆÛ—ߢ“Ní{šøûÏâ?_žÒ_ØÛi¢§‰Û ºÝNí8MÜ¿|¿ ùçË¥».oѧ‰ë߸Ûi¢§‰Û¸~›Mté4Ñÿ\Zâ~œ&n y?Oöùr“ª±ïҗߢ“fýËC:MŒÛibH§‰q›M é41n§‰!&Æí41¤M§qÛtÒibÜNÔ3ì8fñùû.Í&Æí41¤Óĸ&†4›·ÙÄ8N·ÞfÜfC:MŒÛib§‰ÛQh§‰Ï\fH§‰q;M é41n§‰!&Æí41ŽÓÄí×}ãvš¡¬aÛibH§‰·è¤Óĸ&†4›·ÓÄN#/¿9ÒibÜN㧉fýtšX·ÙÄ’Në6›XÒibÝfK:M¬ã4ñ9I-é4±n§‰%Í&Ö¼ôuK:M¬Ûib}Oíö[âu›M,é4±n³‰%&Öí4±ŽÓD^¿üv×I§‰u;M,i6±ŽÓÄçÅÆ%m:­ÛibI§‰u;M,é4±n³‰%&Öí4±¤Óĺ&–tšX·ÓÄ’Në8Mø÷Ë¥èn§‰%&–û­ºÝm6±¤ÓÄ:NŸßQ/é4±ŽÓÄç×>K:M¬ÛibI³‰u;M,i6±n§‰%Í&Öí4±Rë¬Ûlb§ »=¨o§‰%&Öí½‰•Rt·Ó„§‰ËAÌn§ ;N·m^»&L:MØí½ “fvÛt2é4a·Ó„I§ »&L:MX»<ë¬)Kbv;M˜tš°Ûi¤لÝf&&ìvš0é4a·Ù„I§ »&L:MØí4aÒlÂŽÓÄçiÒiÂÆåì&&ì¶édÒiÂn§ “Nv;M˜tš°Ûi¾§‰vû°»m:™tš°Ûi¤ӄÝf&&ìvš0i6a·Ó„I§ ûž&ÚŸï—KÑÝN&Í&l]b&&ìvš°¥¼Àn·Ù„}Omܾüvš0é4ava›tš°Ûi¤ӄÝN&&ÌnÏ:é4a·Ó„I§ ;NŸO”2WvNìvš0é4a·Ù„I§ ó[tÇi"oíÁm6aÒiÂn³ “Nv;M˜tš°Ûi¤ӄÝN&&ìvš0i6a·Ó„I³ »&L:MØí4aÒiÂn§ ?N·_ûøí4áÒlÂo§ —N~l:}è.&üvšpé4á·Ó„§‰[?ï·Ó„Ÿ›Nóöå——f~;M¸tšðvYMté4á·Ó„Ÿ§‰ËPÉûå7'.&üwIѧ‰OOëßÓĽoyùò[t¦|ΉßNþ=M\?Èíòa.&ü6›ðïi¢µÛ?·Ó„K§ ÷ËôߥلßN.&ÜoÏ:é4áÇiâs‚vi6á·Ó„K§ ¿&\:Møí4áÒiÂo§ —N~;M¸tšð¼ü¾Î¥Ó„§‰ï¿2ÇiⶦåyyÝ¥Ó„ßN.&üvšiÓ)n§‰8NvýòË’XH§‰¸m:…tšˆÛi"¤ÓDÜN!Í&¢]'BšMD»ÜuqÎ&æíËoÑI§‰¸Í&B:MÄí4Òl"n³‰Nq›M„tšˆó½‰Ï8é4·ÙDH§‰èÇBì?«8N·Ö(Æå#CšMÄùÞÄ·ºòùuq;M„tšˆÛl"†²·ÙDH§‰¸Í&B:MÄí4Ò{q›M„4›ˆÛi"¤ÓDÌ˯:CšMÄí4Òi"n§‰Nq;MÄqš¸&;M„tšˆÛl"Lù}]Üf!Í&âvši6·Oˆ i6·ÙDœÞÄ-y»ÿã˜M\Ÿ6·ÓD¸òqXq¾7aŸ/—¢»&B:MÄm6Òi"n›N!&âvšˆP>æ4âòûºE9‰Ûi"¤ÓDÜN!&âvšé4·ÙDH§‰¸Í&BšMÄm6Òi"n§‰Hé_ØÛi"ÓÄí¿{ÞN)Í&ò6›Hé4‘7o"¥ÓDžŸûýò¾ütšÈÛl"¥ÓD§‰´Ï—KÑÝN)&ò{šø¾ä•Òi"o§‰”Ny;M¤tšÈÛi"¥M§¼Í&R:Mäí4‘Òi"oïMäqš¸­eæ©×ÍÏ—KÑÝf)Í&òø„Øö­.Ew;M¤4›ÈÛi"¥ÓDÞN)&r^>—8¥M§¼&R:Mäí4‘Sù°Ží´°ÿiJ›da·ÓÂþçWM²°ÛÍÂno¢öúÜu]Š®ßîº.ÝuÇi⛼òv+öç‡RtÇi">?üîºó4ñ­.E7nÑ )ºqû ;¤»nÜ¢;N~K~Þîº)¼^×N ûûWfNå¿û¼E7¥èæ-º)EwÎ&>Ñ-é®»XØM²°ÛŸu{Ö-é®;ß›øü;O×/÷Û—KÑ­[t&Eg·»Î¤èìIÑÙïÏ`o’…ÝþØí®3)ºó4ñIÞ¥èüKÑù-ºã4q½müöÖ¥èüKÑù­9 )º¸ERt—ÙD;-ì¼ý·èBú ·èBŠ.nÑ¥ÝqšXŸçü9›ˆÛ—sqõŸ/—þÂæ-º”¢Ë[t)Ewœ&> ÉÂnívš,ìv³°Ûia_~wÑÚí4Q,ìë—ûí˃ÿÞ¦µÛi¢5)ºÛiB²°[»&$ »µv‹® ÊI»YØí´°ãúå¿GØM²°ÛÍÂn§…m×/¿E'&Š…=?_nҗߢSfífa·ba_ÔmÜ¢“N7 »Ivk·Ó„da·v;MHv;-lû|ù6ØÛÍÂnM:Mœö?¿£n§…í×/¿E'&nv;-ìÛYæ´°?ÿD ûöåç[ØŸ¿ïKùö´°¿ é4q³°›da·¶nѧ »þð—3¬da·v;MHv»YØM²°[³[tÒiâfa7ÉÂn7 »5é4qZØŸó»da·›…ÝšKÑÝN’…Ýnv“,ìv³°[“N§…ý}TJ§‰›…ÝZHÑÝN-¤èÎÓÄço\Hao§ ÉÂn§…mŸ‡UJÑå-:é4Ñ.³‰&YØífa·&&nv;-ì‹rÒnv“,ìÖo§‰.Í&úí4qZØ9o_þÃþóq—í´°ãúgÿn°û§ºtš8,ìÏÖG;-ì[C~Z؟ߘIv;,쳺2›8-ìÏ_™ba_«£ëŸ/WÞÂnývšè]ºën§ ÉÂný6›èÒi¢_ôºÖ¥ÓÄÍÂn’…Ýnv“,ìV,ìÏ/&úí4Ñ¥ÓÄia¯ï—KÑËDì´°oÇ~;MHvë·ÙDŸRt·ÓD—N§…}T—¢›·»NšMôu‹NšMœö÷?œtš¸YØ­K§‰~;MHv»YØM²°[¿&ºtš¸YØM²°[?7âóåRt·ÓÄia¯Û?Ðv9ˆ ûö7ÎÛå¶‘Ný¢×5ÉÂn7 »Iv+ö·ºt×ÝN’…Ýnv“,ìv³°›da·~;MHvë·ÙÄia_ïºÛiB²°ÛÍÂn’…ÝnvëŠ^×úí4Ñ¥ÓD¿&Š…}­žg÷÷ÿ}¹da·q;MHv»YØmH§‰q;Mv»Ý67 »Iv;-ìOG-YØífa7ÉÂn§…ýÏçYµÓ¾ nv+v¿}ùoø¯öº~ù埉Ó¾ýöàfa·Ó¾O ;>ÿáÎÓÄõË×åÏ.&N Û¾?¼Ýí4!YØí´°?»…’…Ýnv“,ìv³°›da·›…Ý$ »Ý,ì&YØm\¼‰&YØí´°ÿyÑ©Iv»YØM²°Û¸Í&$ »Ý,ì&YØífa7ÉÂn7 »Iv»YØmH§‰›…Ý$ »ö÷_XS~_wZØßÇ…tš(öçaeÊ~ÝÍÂn’…ÝnvÒlâfa·Ó¾ýÊëfa·!&Æm6Q,ìÛ8ÿý{;-ìksr›MHv+öçi#&N ûûoœtš8-ìø~¹ôövš,ìvZØëûg—¢»&$ »ö÷¿»tš¸YØmH³‰q;Mœ¶_¿ÜÀO ûzÓÞf’…ÝN ûÓÓNé4qZØŸä‹…=o_¾n?¼IÕýöå!}yþþ+3¥ÓÄÍÂnS:Mœv~¢“f§…½¾Õ¥èš_þÃI§‰›…Ý$ »Ý,ìvZØ·{þfa7ÉÂnó6›,ìv³°›da·›…ÝN ûšüù™Nß/—îºÛi¢XØ·äo§ ÉÂnóvš(öõÏ~‹N:MÌÛlB²°Ûiaΰ§…}1‘ÛÍÂn’…Ýnv“,ì6o§‰baßþ»ßNž~ùïO×i’…Ýnv›Êg:µ›…ݦtš¸YØí´°¯Õo³ ÉÂn7 »ö½ú-:é4qXØíû´‘N7 »Iv»YØM²°[±°?ÿÆI³‰›…ÝŠ…}ûû~;MHv›·Ù„da·yÑëšda·›…Ý$ »Ý,ì6¥ÓÄÍÂnž%œ&üóg—N7 »Iv›·ÓÄaaÿ×>ÇåË/ïÃJv›·ÙÄ”6nvûaaÿ·ÿãþïÿËÿøûmþçÿù¯ÿö¿ÿ/ÿï·ùú½Îý°å¿ÿÿWrUûÏZû¯ïÕ¥ïÕ¥ï5¤ï5¤ï5¥ï5¥ïµ¤ïµ¤ïõÏ}Òýßk]¾×çnê£ß¾—K?—K?WHß+¤ï•Ò÷Jå{‡½ë÷j¤ï%Ý÷Mºï?§È>þí—ÿŽß³fÿsý^Ò}ߤû¾I÷}“îû&Ý÷Mºïsïý{™ô½¤û¾I÷}“îû&Ý÷Mºï›tßwé¾ïÒ}ߥû¾K÷}—ž÷]zÞwé¾ïÒ}ߥû¾K÷}—îû.Ý÷]ºï»tßwé¾ïÒ}ÿýmH_ž_ÇUóú½¤û¾K÷ýîû!Ý÷ß_ÆÜÿŒÇU×?ãîû!Ý÷Cºï‡tß~1þúþúèþïÐîû!Ý÷Cºï‡tß~/ÕóßóögôïǸ}/éy?¤çýîû!Ý÷Sºï§tßOéy?¥çý”îû)Ý÷Sºï§tßOéy?¥çý”îû)Ý÷Sºï§tßOéy?¥çý”îû)Ý÷Sºï§tß~Á9Ö¿Ûåïö÷× ý?¿Ãýõ½Ú÷§ÊÛ÷:îûÛsbI÷ý’îûÏïWÿþû·Ÿësßÿü®ö×÷’îû%Ý÷Kºï—tß×Ûû¿ãò½¾÷}ÞεKºï—tß/é¾_Ò}¿¤û~I÷ýç·Óà÷ßßaß`ÒóÞ¤ç½I÷½I÷½IÏ{“ž÷ßß§ÿ b\¾×·Ïñk^Ò}oÒ}oÒóÞ¤çý÷×ù÷~õ¸êÚ¯~&Ãÿýçö½>÷ýh×¼òsÑ¿Çí{}îûn·ç—K}ŽK}Îgñ÷yi—Ÿë;¦~û·Ã¥ûÞ¥ûÞ¥ûÞ¥ûÞ¥ç½KÏ{—î{—î{—î{—î{—ž÷.=ï¿ã›ñçßóò½¾çÚu½'¤ç½KÏûîûîûž÷!=ïCºïCºï?c)pý¯îgÑîûîûï¼k¶[oò½j¬Û³0¤û>¤û>¤û>¤û>¤>'¤>'¤û>¤ûþ;Ô»ÿ}ü^uÿû˜Ò}ŸÒ}ŸÒ}ŸÒ}ŸÒó>¥ç}J÷}J÷}JÏû”ž÷)Ý÷)Ý÷Ÿ)(øwû;+½ÿ»Òï1Sú=fJ÷}*÷ýùIv·ïu\¾×ñÊûå{}¯ú·ïÕ¥Ÿ«K?×¾×¾×”¾×”¾×~ÐÎyí5/“~.“~.—¾—Kß+¤ïÒ÷ÊÏÃ÷ö÷ñøäÁÞ.!ìöoûý½Ž«ú¼}/åyߤyíùù†÷ï%Ý÷íè`þ—ïõ½ïýš—tßKóÚïÇ+‚û¾I÷½4¯mÒ¼¶IóÚ&Íkz¼>ïÏ«æõ{¥ôsIÏ{i^Û¤ym“æµMš×6i^Û¤ym“æµMš×6i^Û¤ym“æµMš×6i^Û¤ym“æµMš×žŸÓyÿ^Òó^š×6i^Û¤ym“æµß ϯ¡üþ¾IóÚ&Ík›4¯mÒ¼öüÈÒû÷’îûÏ$vŒ÷[^ëûļ~/é¾—æµßOL½ÿnûø\Õëï¶›4¯mÒ¼¶IóÚ&Ík›4¯mÒ¼¶IóÚ&Ík…½÷&ǼöÚ›HóÚ&Ík›4¯mÒ¼¶IóÚ&Ík›4¯mÒ¼¶IóÚ&Ík¿Ÿ zòï¼öÞ“KóÚ&ÍkÏÞ½~¯%Ý÷Kºï—tßKóÚ&Ík¿Ÿü{ÿ=æñùÀ×ßc6i^Û¤ym“æµMš×žŸB|ÿ^Ò}ÿ™ÄÞgMÇ'_gMMš×6i^{|òýYxÌk¯ÏB“î{“îûÏ$Ü_Ö”ûKš×6i^Û¤ym“æµç'=ß¿—tß&± ŸøÎkïý„4¯mÒ¼öü éû÷’ž÷&Ý÷&Ý÷&=ïMzÞ'±÷¿CǼöúwÈ¥ç½KÏ{i^Û¤ym“æµMš×~?¦û¾Ït|˜÷uŸ©IóÚ&Ík›4¯mÒ¼¶IóÚ&ÍkÏ¿/é¾—æµMš×~?±|Æmçôø\óyý»4¯mÒ¼¶IóÚ&ÍkÏL¿/é¾ÿLbÁÙýœ×^óúNbç¿ûå{çÚë÷2aö{\uý6i^Û¤ym“æµMš×Ÿoý6ú^µú-¯”úœ”úi^Û¤yí÷sìAù×Þ{Li^Û¤yí÷òÑÏ5¥Ÿk ;”ÇU×Ê&Ík›4¯=?Ÿÿþ½¤ûþ˜Ä^û‰ïU÷~Bš×6i^{X×çÄqÕõ9Ñ¥÷k»ô~m—æµ]š×TÁ5ûãªkö‡npóWÝæ|_¡·Û~ô!%üý‡äö½LÊˤ¼üû¡'~û¹¾çÚû÷ éç éçJé{I÷½ô~m—Þ¯ýrà¿ã1¯½þwü¾_{}ççp&®ïütéýÚ.½_Û¥ym—æµ]z¿¶Kï×vi^Û¥yí!c\û¯ãªkÿu`à{…ô½¤û^š×vi^Û¥yí×òhþ\ú¯Cüˆë½ú™ÄÞûè~Îk¯ßKzÞwéy/Ík»4¯=ô‘9®y}O÷?£IF“þŒ.ÌÓüä:OûJ(÷w~/åúÎO—æµ]š×vi^Û¥yí ±Ü¿—ÔçHóÚ.Ík»4¯íÒ¼¶KóÚ.Ík:fæeö¼ê6Óùj3à9qÎko‡¤÷k»ô~íÁØÜÿ>¥¿ïÒ¼¶KóÚÃǹÿ\Sù=æ¡è\ÏiÇU×sÚÞ=Ó1¯½öLÒ¼¶KóÚCô¹îœžWÝ~ÿÕ¥ym—æµ_*<£¿óÚû3Zš×vi^Û¥÷k»ô~m—æµ]š×vi^Û¥yíA Ý{¹Õ”^Nš×vi^{ÚJ÷ï%Ý÷Ò¼¶KóÚ.Ík»4¯=œ§ûókI}Îw^×;Žym¿þw”î{i^Û¥÷k»ô~m—æµ]š×~ýª¿™ÞòúÎkíúï£IÏ{“ž÷Ò¼¶KóÚ.Ík»4¯íÒûµ]z¿ö‹tÝg¿åuý”×õ]¤ãªë»H]š×vi^{a÷¾ð¸êÚJï×véýÚ.Ík»4¯íÒ¼¶KóÚ.Ík»4¯íÒûµ]z¿¶KóÚ.Ík»4¯íÒ¼¶KóÚ.Ík»4¯íÒ¼¶KóÚ.Ík»ô~m—Þ¯íÒ¼¶KóÚ.Ík»4¯íÒ¼¶KóÚ.½_Û¥÷k¿Ö8‹†òÞI—Þ¯íÒûµ_Dü[{Ìk¯ÿÖ~&±èÏÒŸQºï¥÷k»4¯íÒ¼¶KóÚ.Ík»ô~m—Þ¯íÒ¼¶KóÚ.½_Û¥÷k¨ðþïvJ¿ÏùNbïó´ãªë<-¥>'¥>Gz¿¶Kï×´âý÷&Ǽöö{“!½_;¤÷k¿fãýïöø£¼w2¤yíæµCz¿vHï×~ýÈûïøeòú;¾¯2yß_=,ÊëþêæµCš×éýÚ!½_;¤yíæµCš×i^;¤yíæµCz¿vHï×éýÚ!½_;¤yíæµ_üóþ»Žƒ½þ®cHóÚ!Ík‡4¯Ò¼vHï×éýÚ!}ò>yHóÚ!Ík‡4¯Ò¼vHï×éýÚ!½_;¤÷k‡ô~íÞ¯Ò¼vHóÚ¯ïzÿû¡À^ç>¤÷k‡ô~íŽÿnŸï×ÞþnKï×éýÚC¤½þ®ö¸êú»Ú!Ík‡4¯Ò¼vHóÚ!Ík‡4¯Ò¼vHóÚ!Ík‡4¯Òç!éó‡ô~íÞ¯=Õßû÷’ž÷ÒûµCz¿vHóÚ!Ík‡ô~íÞ¯ÒûµCz¿vHŸ‡<¤ÏCÒ¼vHóÚ!½_;¤÷k‡4¯Ò¼öÀ˜¯säóªÛù ›¯;ºÇU×Ý!Ík‡4¯Ò¼vHóÚ!Ík‡4¯ÒûµCz¿vHóÚ!Ík‡4¯Ò¼vHóÚ!Ík‡4¯Ò¼vHŸ‡<¤ÏCÒç!éó‡4¯Ò¼vHóÚ!ÍkûûÞ3™²Ÿsá#¯ßë{Õ¸~/é¾—Þ¯Ò¼vHóÚ!Ík‡4¯Ò¼vHóÚ!½_;¤÷k‡ô~íÞ¯=|õëïWÏ«n¿_ÒûµCz¿vHóÚ!Ík‡4¯Ò¼ö+ÂßçÝxô½†ô½¤û^š×i^;¤yíæµCš×i^;¤yíæµCš×i^;¤yíøNb¯»dÇU×]²!Ík‡4¯¡¸nß«Àï¶¥yíæµCš×i^;BºïCºï¥yíæµCš×i^;¤÷k‡ô~íæµCš×i^;¤yíHeó¸êþwHš×i^;¤yíæµ#§ÒóÚk_(}ò>yHï×éýÚ‘Êç¥T>/m¤²§0RÙSÒûµCz¿vJóÚ)ÍkçùIÇ—{â¸êzOÌ?ÊûVóò¾Õ”æµSš×Néó§ôyÈóðk—ß¾×wO!®ßˤŸË¤Ÿësß_?ãì{Õý3Φ4¯Ò¼vJóÚ)ÍkgSεÇU÷{Uš×Ni^;Ï7g/¿—;¯ºý^n6åóÒfS>/mJï×NéýÚ)Ík§4¯Ò¼vJóÚÙçç¼j^¿—tßKóÚ)Ík§4¯Ò¼vJóÚ)Ík§4¯Ò¼vJóÚ)Ík§4¯Ò¼vJóÚyLbo¿ë8¯ºý®cJóÚ)Ík§ôyÈSú<ä)Ík§4¯ÒûµSz¿vJóÚ)Ík§4¯Ò¼vJóÚ)Íkçg{ß%û^uß%›Ò¼vJóÚ9”Ï™Cù‘)Ík§4¯ßI¬û­ø^e·}Ì)Ík§4¯#•çÄqÕõ9!Ík§4¯ÒûµSz¿vJóÚ)Ík§4¯Ò¼v~&± ÷=Þ¯½ö¾Ò¼vJóÚ)}ò”>yJï×NéýÚ)Ík§4¯SÙÏ9®º÷äÒ¼vJóÚù™ÄÞ?;rï׿õç’î{i^;¥yí”æµSš×Ni^;¥yí”æµSú<ä)}ò”æµSš×ÎÏ$öþTß«îŸA5¥yí”æµó;‰ëöoÇ÷ªqý·Vòk§ä×Ni^;¥yí”æµSš×Ni^;¥yíüNb¯îqÕÕÂÒ¼vJóÚ)Ík§4¯ÒûµSz¿vJóÚ)Ík§4¯Ò¼vJóÚ)Ík§ô~í”Þ¯ÒûµSz¿vJóÚ)Ík§4¯Ò¼vJóÚ)Ík§4¯Ò¼vJóÚ)Íkçg»þÜÜæïUÿ‰¹=£¥÷k§ô~í”æµSš×NéýÚ)½_;¥yí”æµSš×Ni^;¥yí”æµó3‰]ý¶Ë?OM¾þîQú<ä)}òüLbï3°ïU÷Ø”æµSš×ÎÏ$öþþÐ<”ÛÛûCSz¿vJï×Ni^;¥yíüLbÑŸqHFé¾—Þ¯Ò¼vJóÚ)Ík§4¯Çûµ×þë˜×^û/éó§ôyÈSš×Ni^»¤yí’æµKú<ä%}ò’Þ¯]ÒûµKš×.i^»¤yí’æµëÏ’¾×’¾—²‡|\uý]Úú~òõ3-×ñyÈ·Ï´\Ò¼vIóÚ%Ík—4¯]ÒûµKz¿vIóÚ%Ík—ô~í’Þ¯]Ç$ö6û=¯ºÍ~—4¯]Ò¼vIóÚ%Ík—4¯]Ò¼vIï×.éýÚõ™ÄÞgåëø<ä?×ï•ÂîÊ:çµ·ÿŽÒ¼vIóÚ%Ík—4¯]Ò¼vIóÚõÄûw»|¯ïUnÏ/i^»¤yí’üÚ%ùµKš×.i^»¤yí’æµë3‰½ÏæÖ1¯köÒó^š×.i^»¤yí’æµKš×.i^»¤yíúgëûÐËï>WýËÖõ¾—æµKš×.éýÚ%½_»¤yí’æµKz¿vIï×.i^»¤yí’Þ¯]ÒûµKš×.i^»>“Øû>À:¦º·}€%Ík—4¯]Ò¼vIóÚ%½_»¤÷k×T~\u=?.i^»¤yí’æµKš×®ï$ÖçíßÚïUvûÝã’Þ¯]ÒûµKš×.i^»¤÷k—ô~í’æµKš×.i^»¤yíúLbïóÇïU÷ùã’æµKš×.i^»¤yí’æµKš×.éýÚ%½_»>“Ø¿çh»eÿ¹ïÇíwCKú<ä%}ò’æµKš×.i^»¤yí’æµKš×.i^»¤yí’Þ¯]ÒûµKš×.i^»¤yí’æµKš×.i^»¤yí’æµKš×.i^»¤yí’æµKš×.i^»>“Øûç3­ãýÚ¸~/é¾—æµKš×.i^»¤yí’æµË]ÊË¥¼¤û^š×.éýÚ%½_»¤yí’æµë3‰½Ïæ¾WÝgsKš×.i^»âøMÍåsN«®Ÿsº¤yí’æµKš×.i^»¤÷k—ô~í’æµKš×.éýÚ%½_»¤yí’æµKz¿vIï×.i^»¤yíJå½òïUà÷¾ÒûµKz¿v}ýÚvýÝÐñ®ÝÎiÒ¼vIóÚ%Ík—4¯]’_»$¿v¥tß§tßKóÚ%Íkí3‰½Ïìœ×Æí{)÷½IóZûLbïÿÖ~¯ºÿ[kÒ¼Ö¤y­IóZ“æµ&ùµ&ùµ&½_kÒûµ&}²IŸ‡lÒ¼Ö¤y­IóZ“æµ&ÍkMš×š4¯5i^kÒ¼Ö¤y­5¥¿·¦ô÷Ö”Ïÿ^uÿ]­IóZ“æµ&ÍkMš×š4¯5i^kÒûµ&½_kÒûµ&½_kÒ¼Ö¤y­IóZ“æµ&ÍkMš×šô~­Iïך4¯5i^kÒ¼Ö¤y­IóZ“æµ&ÍkMš×šô~­Iï×ÚñyÈ·}“óªÛ¾‰IóZ“æµ6”÷ «®»Q&ÍkMš×šôyÈ&}²IóZ“æµ&ÍkMš×š4¯5i^kÒ¼Ö¤y­IóZ“æµ&ÍkMš×Úw{}‡ø¸êú±IŸ‡lÒç!›4¯5i^kÒ¼Ö¤y­IóZ“æµ&½_kÒûµ&ÍkMš×š4¯5i^kÒûµ&½_kÒ¼Ö¤y­IóZ“æµöÄN¿|îÊyÕŸë÷’î{i^kÒ¼Ö¤y­Iïךô~­-eOá¸êº§`Ò¼Ö¤y­IóZ“æµö™ÄÞßÃÿ^uߤ÷kMz¿Ö>“Xןë;¯]·Ï06i^kÒ¼Ö¤y­IóZ3ås£¾WÝ'jÒ¼Ö¤y­IóZ“æµ&ÍkMš×š4¯5i^kÒ¼Ö¤y­™Ôß›ÔßKóZ“æµ&ÍkMš×š4¯5i^kßyíõwîvÌko¿s7W>ó¸êúþIóZ“æµ&ÍkMš×šô~­Iïך4¯5i^k.Ý÷.Ý÷ßIì·ïu|jòõ÷÷Òûµ&½_kÒ¼Ö¤y­Iïךô~­IóZ“æµ&ÍkMš×š4¯5i^kÒ¼Ö¤y­IóZ“æµ&ÍkMš×š4¯5i^kÒ¼Ö¤y­Iïךô~­IóZ“æµ&½_kÒûµ&ÍkMš×š4¯5i^kÒ¼Ö¤y­IóZ“æµ&ÍkMš×úg{ß«ý^uß«ui^ëÒ¼Ö¥÷k]z¿Ö¥y­KóZ—æµ.Íký3‰~;[}¯ú—Ý>gË¥y­KóZ—æµ.Ík]š×º4¯ui^ëÒ¼Ö?“ØûüÑOM¾Í]š×º4¯õÏ$öþ{?>ùö{oCú3éÏ(Ý÷Òûµ.Ík]š×º4¯ui^ëMq¼)îƒKóZ—æµ.Ík]š×úw{5W]gMÞ•}ÌïU÷}L—æµ.Íký3‰½ï ù9¯½Ý÷ŸI,¸'Žyíõžæµ.Ík]š×º4¯õ.Ý÷]ºï¥y­KóZ—üZ—üZ—æµ.Ík}(îÃqø¹÷Á‡â>¸4¯ui^ëÒ¼Ö¥y­KóZ—æµ.Ík]š×úw þ;ºôßQºï¥y­”î åó\z¿Ö¥÷ký3‰õqû\ØïUÿ²ko"Ík]š×º4¯ui^ëßIìu6w^õçú½–róÚëýõÄ^-Éóªqý^R/Ík]š×º4¯ui^ëÒ¼Ö×áw¢çU·ß‰ºô~­Kï׺4¯ui^ëÒ¼Ö¥y­KóZ—æµ.½_ëÒûµþ™ÄÞwNýPnãú½¤û^š×ºô~­Kï×úw{ýûqÕõwînÒ}oÒ}ÿ™ÄÞçCß«îó!ÿNbg^Þ‘:¯ºþÛ!½_ëÒûµnÇ%—Ï>¯ê×?£tßKóZÿLbÿžÉog÷ï¼vÞÿ;Ÿ„vñùŽ«®>ŸKóZ—æµ.½_ëÒûµþ™Ä.û÷ŸK^ßyí¼íˆ¸4¯ui^ëÒ¼Ö¥y­»òyiçU×{Bz¿Ö¥÷k]š×º4¯ui^ëÒ¼Ö]êï]êï¥y­KóZÿNb¯ûLÇU×}&—Þ¯uéýZ—æµ.Ík]š×º4¯ui^ëÒ¼Ö¥y­KóZ—æµ.Ík]š×º4¯ui^ëÒ¼Ö¥y­KóZ—æµ.Ík]š×º4¯õTöï«î¿•æµ.Íký3‰³€ï¼ö> øLbÁïj÷k¯¿«ýLbÁï'Îyííß!i^ëÒ¼Ö¥y­KóZ—æµ.Ík]š×º4¯ éóCú<äæµ!Íkã|söò{“óªyý^Ê瀯ºxHóÚæµ!}rHŸ‡Ò¼6¤ymHóÚæµ!ÍkCš×†4¯ i^Òûµ!½_MùœÀïU÷¹hHï׆ô~m4åyMyÞÇw{ýL’ãªëg’„4¯ i^Ò¼6¤ymHï׆ô~mHóÚæµ!ÍkCš×†ô~mHï׆ô~mHï׆4¯ i^Òûµ!½_Ò¼6¤ym2íí¼}^u;o‡4¯ i^Òûµ!½_Ò¼6¤ym|'±«]εÇUóÖcÆg{ÿ½ï÷ªûï}ã˜×^ÿ;žSÝÛGéýÚÞ¯1„ßW]ŸIìðÛ￾Wýk´ë÷’ž÷Ò¼6¤ymHóÚÞ¯ éýÚŠóó½ê~ éýÚÞ¯ i^Ò¼6¤÷kCz¿6¤ymHóÚæµ!ÍkCòkCòkCz¿6¤÷kCz¿6¤÷kCš×†4¯ i^Ò¼6¦òÞÉyÕõ¹*½_Òûµ!ÍkCš×†4¯ i^Ò¼6¤ymHóÚæµ!ÍkCš×Æg þ>óÚëßGi^Ò¼6¤ymHóÚÞ¯ éýÚ0eÿ>LÙ¿éýÚÞ¯ éýÚÞ¯ i^Ò¼6¤÷kCz¿6>“XÐ~íµÞ¯ éýÚÞ¯ éýÚøLbï–÷÷ª»å¦ì¥…){iñ™Ä‚~õ;¯½÷«Ò¼6¤ym|&±àüxÌk¯çÇÏ$}¯!}/é¾—æµ!ÍkCš×†4¯ i^Òûµ!½_Ò¼6¤ymHŸ‡Òç!‡4¯ i^Ò¼6¤ym|&±àïãw^{ÿûÊþ}„²ßIìýŒü½ê~F–æµ!ÍkCš×†4¯ i^Ò¼6¤ymHóÚæµ!ÍkCš×†4¯ éýÚÞ¯ i^Ò¼6¤÷kCz¿6¤÷kCz¿6¤÷kCz¿6¤ymHóÚæµ!Ík#¥ßç¤ôûi^Ò¼67goϯãªëó+¥ymJóÚ”Þ¯MéýÚ”Þ¯MéýÚ”æµ)Íkó²§”=…”æµ)Íkó;‰½îûWûÏÒÏÒÏ•Ò÷’î{i^›Ò¼6¥÷kSz¿6¥ymJóÚüNbçºìW[ŸÒûµ)½_›Ò¼6¥ymJóÚ”æµù™Ä®?·}òïUÿšýš—tßKóÚ”æµ)ÍkSš×¦4¯Mi^›Ò¼6¥ymJóÚ”æµ)ÍkSú<ä”>9¥÷kSz¿6¥ymJóÚ”æµ)ÍkSš×¦4¯MɯMɯÍÏ$öþzyÌkÿ\¿WvWŽ«®»+)ÍkSš×¦ô~mJïצô~mJï׿g»æíw|ß«þþkuÍKºï¥ymJóÚ”æµ)½_›Òûµ)ÍkSš×¦4¯Mi^›Ò¼6¥ymJóÚ”æµ9‡ðÅqÕõ=Š”>9¥ÏCNi^›Ò¼6¥ymJóÚ”æµ)Íkó3‰g˜s^{;+Ìã ‹…{^uó·Sš×¦4¯Mi^›Ò¼6ÿ™Ä¶?yÛÊï¼öo3vû^Êçç|¯ºï‰¦4¯Mi^›Ò¼6¥ym~çµ×ß›ä1¯½ýÞ$—t®]Ò¹Vš×¦4¯ÍãýÚvy¿ã¸j¬ÛŸQòkSòkSš×¦4¯Mi^›Ò¼6¿“Ø5.ï‹WÍë}oÊ^Ú÷ªû\!¿“Xë·ûë{ÕêןKzÞKóÚüNb¯Ÿq^uí}¥ymJóÚ”Þ¯MéýÚ”>9¥ÏCÎÏ$ö>Íc^{ý½‰ô~mJïצ+s«ten•Ò¼6¥ymJóÚ”æµ)ÍkSš×¦4¯Mi^›ßIìõ=üóªëymJóÚ”æµ)ÍkSš×¦4¯MéýÚ”Þ¯MéýÚ”Þ¯MéýÚ”Þ¯Mi^›Ò¼6¥ymJóÚ åóÒ2”ÏKËPæVß«@ÿ%ÍkSš×¦4¯Mi^›Ò¼6¥ym2ímçô¼ê¶sšßIìý¦º×·çTž_s*ϯ)Ý÷Sºï§tßO龟Ò}?¥û~J÷ý”îûÏ$ü»}¼_{ýw{IÏû%=ï?“XЛœóÚ[o²¤çý’ž÷Kêï—Ôß/éy¿¤çýg zòï½öäßyíý9qÌk¯Ï‰Ï$ý\.ý\Ò}¿¤û~I÷ý’î{“î{“î{“ž÷&=ïMºïMºïMºïMºïMºïMºï¿ï×ÞïÕãýÚë½jÒóÞ¤ç½IÏ{“ž÷&Ý÷&Ý÷ŸI,ø·ö˜×^ÿ­ué¾wé¾wé¾wé¾wé¾wé¾wé¾wé¾ÿLbÁ½z*·×ï%õ9.õ9.Ý÷.Ý÷.Ý÷.Ý÷.Ý÷.Ý÷.ýÓ¥ßc†t߇t߇t߇t߇t߇tß+ï×Wþë;‰½ílWû÷’îûîûúœúœîûîûîûîûîûîû”îû”îûÏ$öú.ÇU×Ïpù{UWÎîÇûµ×³û1‰½8åªqý¹¤>'¥>'¥û>¥û>¥û>¥û>¥û>¥û>¥û>¥ûþ3‰EÆþŒMš×6i^Û¤ym“æµMy¿ö¼ |¯!}¯!}¯É÷ «®û…¯ZÒϵ¤ŸËø;çU·w þ^åÒÏåÒÏ|õ¸êº¿ú÷ª”~.åyßštß7é¾—æµMš×6i^Û¤ym“æµMš×6i^Û¤ymkÒ}ߤûþœÄ^fMçU·YSkÒ}ߤûþ3‰ngÑïUÿóús Ÿu\uïW›4¯mÒ¼¶IóÚ&Ík[>ÿ¾\5¯ßKºï»tßKóÚ&Ík[_Ê3º/å-Ík›4¯m]ºï»tß+ïמWï%=ï»ô¼ÿLbÁß¡s^{û;4¤û~H÷½4¯mÒ¼¶ é¾Ò}/Ík›4¯mÒ¼¶IóÚ&Ík›4¯mÒ¼¶IóÚ&Ík›4¯mǼöú,<®º> §à–«n»>Mš×6i^Û¤ym“æµí;‰½½Ÿv^u{?íïUSØmÇç!Çõç’î{i^Û¤ym“æµMš×6i^Û¦²ŸÓ¦²ŸÓ¾óÚëïMÚ1¯½ýÞ¤}&±àç:æµ×Ÿë3‰½Z’ÇUWKòïUÊïsŽ«®¿ÏiKù=f[Êï1›4¯mÒ¼¶-é¾_Ò}¿¤û~I÷ý’îû%Ý÷ßIìísÉΫnŸKö÷ª”î e?§IóÚ&Ík›4¯mÒ¼¶IóÚ&Ík›4¯mÒ¼¶IóÚ&Ík›I÷½I÷½4¯mÒ¼¶IóÚ&Ík›4¯mÒ¼¶™Ôß›ÔßKóÚ&Ík› ŸŸs^uÝÿjÒ¼¶IóÚ&Ík›4¯m.Ý÷.Ý÷Ò¼¶IóÚ&Ík›4¯mÒ¼¶IóÚ&Ík›4¯mÒ¼¶IóÚ&Ík›4¯mßIìýÜq\u=wHóÚ&Ík[H÷}H÷}H÷}H÷½4¯mÒ¼¶…t߇t߇+ýÄ1¯½ö!õ9!õ9Ò¼¶IóÚ&Ík›4¯m)x†ÇU×Ï©ù{•tß§tß§tß§tßKóÚ&Ík›ò~íq8w¤tß§tßKóÚ&Ík›4¯mÒ¼¶¥tßKï×öãóçïÏ–9¯ê·ï¥ô÷]š×vi^Û¥ym—æµ]š×véýÚ.½_Û¥ym—æµý3‰óö»ŽïUÿ·Y@ÿLbWÞ~×ñ½ê_ëöNFÿÎkovðqÕÕþ{Õ?wtü¹ýŽï{Õ¿ìö»´.Ík»4¯íŸIìõ󫮟÷ø÷ª.Ìù¾WÝç|ý3‰½ï“÷ïµë÷’î{i^ÛÛ’òZR^&ýMú3ºðïv?Þ¯½ý»Ý?“Øûï}¿WÝïÛ?“Øå׿Cßyí¼>£¿“Øk/w\uíåº4¯íÒ¼¶wéyߥç½4¯íÒ¼¶KóÚ.Ík»ô~m—Þ¯íÒ¼¶KóÚþ™ÄÞû¯~Îk¯÷WH?WH?WJßKês¤÷k»ô~m—æµ]š×vi^Û¥ymÊïïûP~ߥym—æµ]š×vi^Û¥ym—æµý3‰½Ï ¿WÝg†]š×vi^Û‡òy çU·ùPŸ”?ãü£ü¥ym—æµ} ®ÛqÕ}žÖ¥÷k»ô~mŸÒ}?¥û^š×vi^Û¥ym—æµ}º”—KyI÷½ô~mŸÒó~JÏ{éýÚ.½_Û—tß/é¾—Þ¯íÒûµýü¤ãÛsâ¸êúœæµ]š×vi^Û¥ym—æµ]š×vi^Û¥ym—Þ¯íÒûµ}I÷ý’î{i^Û¥ym—æµ]š×vi^Û¥ym—æµ]š×vi^Û¥ymÿLbmÝÞ“îÇç!ßö†º4¯íÒ¼¶KóÚ.Íkûg{ß©éÇç!ßvjº){ ÇU÷³¨+û9Ý•ýœ~Lb¯ÏÕãªësUš×vi^Û]ùܨïU÷÷ð»4¯íÒ¼¶KóÚ.Ík»4¯íÒ¼¶»2·:®÷—ô¼—æµ]š×vi^Û¥ym—æµ]z¿¶Kï×vi^Û¥ym—æµ]š×vi^Û¥ym—æµ]š×vi^Û¥ym—Þ¯íÒûµ=¤ç}HÏ{i^Û¥ym—æµ]š×ö”îû”î{i^Û¥ym—æµ]š×öœÂ»"ÇU×wEº4¯íÒ¼¶KóÚ.Ík»4¯íÒ¼¶'±÷3òá×^ÏÈŸI,˜ï×ÞfCz¿vHï×i^;¤yíæµCš×i^;¤yíæµCš×i^;¤yíøLb}Üf`ß«þe·çêÞ¯ÒûµCú<ä!}òøLbïó´ïU÷yÚæµCš×éýÚ!½_;¤÷k‡ô~íøÎk¯ï‚c^{{||'±×÷XÏ«nï±éýÚ!½_;>“Øû¿ãôk¯÷„ ½É8æµ×¿CÇ$övæ;¯úsý¹”síqÕõÜ1ºà•ŸW]÷å†4¯Ò¼v|&±÷½ŽïU÷½Žñ™Ä¢ï5¤ï5•ûëœ×^¿×Rî¯ã-Üëý%Ík‡4¯Ç'ßöjÏ«æõ{I÷}—î{i^;¤yíæµCš×Žó“Žo‡¿öúwHš×i^;¤÷k‡ô~íæµCš×i^;¤yíæµCš×éýÚ!½_;¤yíæµcH÷ýîû)Ý÷Sºï§²‡ü½ ô_Sºï§tßï×®[orLuo¿«Ò¼vHóÚ!Ík‡4¯ßIìý¹z\u}®Jï×éýÚ!Ík‡4¯Ò¼vHóÚ!Ík‡4¯Ò¼vHóÚ!Ík‡4¯Òç!éó‡4¯Ò¼vHóÚ!Ík‡4¯Ò¼vHóÚ!Ík‡4¯Ò¼v,å÷9cI¿Ï1eÿþ¸êº?Lyßê¼êÚJóÚ!Ík‡ ^ùyÕõwÔϿ¦|þýÞ¯ÒûµCš×i^;¤yíæµCz¿vHï×éýÚ!½_;>“ØûÞö÷ªûÞö>yHŸ‡<¤yíæµCz¿vHï×—ε.k?“Øûù{Õ}Ž<>“XpFþÎkïgdéýÚ!½_;¤yíæµÃ•Ï®|øæµCš×ŽP>v„ò¹°Cš×i^;Bù\Øóªqý¹¤>Gš×i^;¤yíæµCš×ŽP|«óªëïj¥ÏCÒç!i^;¤yíæµCš×Žïûµ÷ç×ñ~íõù%Ík‡4¯Ò¼vHóÚ!½_;¤÷k‡4¯Ò¼v|&± ÷=>ùÚû¦+gäãªë9•=…‘ÊžÂÞ¯ÒûµSš×Ni^;?“Øû|è{Õ}>4¥yí”æµó²—ö½êþ÷qþQöŽ«®g…)Ík§4¯’_;%¿vJóÚ)Ík§4¯Ò¼v~'±×·Ï«nÿnOi^;¥yí”æµSš×Ni^;¥yíüLb§]ïûvtC·û^z¿vJï×Φ8?³)ÎÏlÒ}ߤûþ;¯½?'Žyíõ9!Ík§4¯-¥?£ô¼—>yJŸ‡<¥yí”æµó3‰½ÿû8ÏC¾ýû8¥÷k§ô~í”Þ¯ÒûµSz¿vJï×Ni^;¥yí”>yJŸ‡<¥÷k§ô~í”æµSš×Ρ|.ìyÕõïãg ž_Ǽöúü’æµSš×Ni^;¥yíRŸ3¤>Gš×Ni^;¥yí”æµSš×Ni^;?“ØûfžóÚëý%Ý÷Ò¼vJóÚ)Ík§ô~í”Þ¯Ò¼vJóÚ9•ýœ9•ýœùÄ^g¿ÇU×Ùï”æµSš×NéýÚ)½_;¥yí”æµSš×Ni^;¥yí”æµsýQž_Ǽöúü’æµSš×Îãóï?W—~®!üÞwóÚë½*Ík§4¯Ò¼vJóÚ¹”ßßÏ¥üþ~JóÚ)Ík§4¯Ò¼vJï×NéýÚù™Ä‚¼Žyí5/éýÚ)½_;¥yí”æµSz¿vJï×Îï¼ä5¥¼¤û^š×Ni^;¥yíüLb½Ý~'ú½ê_víW¥yí”æµSš×Ni^;¥ÏCžÒç!Oi^;¥yí”æµSš×ÎãÍÙÛÞöqÕuo{Jï×NéýÚ)½_;¥÷kçw^{ÿ7íx¿öúoš4¯Ò¼vJóÚ)Ík§ô~í”Þ¯Ò¼vJóÚÊÜj†2·šÒ¼vJóÚ)½_;¥÷k§4¯Ò¼vJóÚ)Ík§4¯Ò¼vJï×NéýÚy¼9{›ýžWÝf¿ó3‰½Ûˆß«î6â”æµSš×NéýÚ)½_;¥yí”æµSš×Ni^;?“Øûg4~¯ºFãüNbï÷ÄqÕõžÞ¯ÒûµSz¿vJï×Néó§ôyÈSš×Ni^»¤yí’æµëx¿ö_ëö½¾WÍ_[›³\5ÿüºêÿ©Ø¥Š]ªØ¥ŠCª8¤ŠCª8¥ŠSª8¥ŠKª¸¤ŠKªhRE“*šTÑ¥Š.Ut©bHCªRÅ”*¦T1•ŠÇüZñ¸êZñ{¨(=sšôÌiÒ3§IÏœ&=sšôÌiÒ3§IÏœ&=sšôÌiÒ3§IÏœ&=sšôÌiÒ3§IÏœ&=sšôÌiÒ3§IÏœ&=sšôÌiÒ3§IÏœ&=sšôÌiÒ3§KÏœ.=sºôÌéÒ3§KÏœ.=sºôÌéÒ3§KÏœ.=sºôÌéÒ3§KÏœ.=sºôÌéÒ3§KÏœ.=sºôÌéÒ3§KÏœ.=sºôÌéÒ3§KÏœ.=sºôÌéÒ3§KÏœ.=s†ôÌÒ3gHÏœ!=s†ôÌÒ3gHÏœ!=s†ôÌÒ3gHÏœ!=s†ôÌÒ3gHÏœ!=s†ôÌÒ3gHÏœ!=s†ôÌÒ3gHÏœ!=s†ôÌÒ3gHÏœ!=s†ôÌÒ3gJÏœ)=s¦ôÌ™Ò3gJÏœ)=s¦ôÌ™Ò3gJÏœ)=s¦ôÌ™Ò3gJÏœ)=s¦ôÌ™Ò3gJÏœ)=s¦ôÌ™Ò3gJÏœ)=s¦ôÌ™Ò3gJÏœ)=s¦ôÌ™Ò3gJÏœ)=s–ôÌYÒ3gIÏœ%=s–ôÌYÒ3gIÏœ%=s–ôÌYÒ3gIÏœ%=s–ôÌYÒ3gIÏœ%=s–ôÌYÒ3gIÏœ%=s–ôÌYÒ3gIÏœ%=s–ôÌYÒ3gIÏœ%=s–ôÌYÒ3ǤgŽIÏ“ž9&=sLzæ˜ôÌ1é™cÒ3ǤgŽIÏ“ž9&=sLzæ˜ôÌ1é™cÒ3ǤgŽIÏ“ž9&=sLzæ˜ôÌ1é™cÒ3ǤgŽIÏ“ž9&=sLzæ˜ôÌqé™ãÒ3Ç¥gŽKÏ—ž9.=s\zæ¸ôÌqé™ãÒ3Ç¥gŽKÏ—ž9.=s\zæ¸ôÌqé™ãÒ3Ç¥gŽKÏ—ž9.=s\zæ¸ôÌqé™ãÒ3Ç¥gŽKÏ—ž9.=sBzæ„ôÌ é™Ò3'¤gNHÏœž9!=sBzæ„ôÌ é™Ò3'¤gNHÏœž9!=sBzæ„ôÌ é™Ò3'¤gNHÏœž9!=sBzæ„ôÌ é™Ò3'¤gNHÏœ”ž9)=sRzæ¤ôÌI陓Ò3'¥gNJÏœ”ž9)=sRzæ¤ôÌI陓Ò3'¥gNJÏœ”ž9)=sRzæ¤ôÌI陓Ò3'¥gNJÏœ”ž9)=sRzæ¤ôÌI陓Ê3Çþ(Ïœóª[Åã*P±I›T±I»T±K»TqH‡TqH§TqJ§TqI—TqIMªhRE“*ºTÑ¥Š.U ©bHCª˜RÅ”*JÏiÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d“öMÚC6iÙ¤=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=d—ö]ÚCviÙ¥=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=äöCÚCi9¤=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9¥=ä”öSÚCNi9•=äþGÙC.W]*žWŠMªØ¤ŠMªØ¥Š]ªØ¥ŠCª8¤ŠCª8¥ŠSª8¥ŠKª¸¤ŠKªhRE“*šTÑ¥Š.Ut©bHCªRÅ”*¦TQzæ4é™Ó¤gN“ž9Mzæ4é™Ó¤gN“ž9Mzæ4é™Ó¤gN“ž9Mzæ4é™Ó¤gN“ž9Mzæ4é™Ó¤gN“ž9Mzæ4é™Ó¤gN“ž9Mzæ4é™Ó¤gN“ž9Mzæ4é™Ó¤gN—ž9]zæté™Ó¥gN—ž9]zæté™Ó¥gN—ž9]zæté™Ó¥gN—ž9]zæté™Ó¥gN—ž9]zæté™Ó¥gN—ž9]zæté™Ó¥gN—ž9]zæté™Ó¥gN—ž9]zæ é™3¤gΞ9Czæ é™3¤gΞ9Czæ é™3¤gΞ9Czæ é™3¤gΞ9Czæ é™3¤gΞ9Czæ é™3¤gΞ9Czæ é™3¤gΞ9Czæ é™3¤gΔž9SzæLé™3¥gΔž9SzæLé™3¥gΔž9SzæLé™3¥gΔž9SzæLé™3¥gΔž9SzæLé™3¥gΔž9SzæLé™3¥gΔž9SzæLé™3¥gΔž9Szæ,陳¤gÎ’ž9Kzæ,陳¤gÎ’ž9Kzæ,陳¤gÎ’ž9Kzæ,陳¤gÎ’ž9Kzæ,陳¤gÎ’ž9Kzæ,陳¤gÎ’ž9Kzæ,陳¤gÎ’ž9Kzæ,陳¤gŽIÏ“ž9&=sLzæ˜ôÌ1é™cÒ3ǤgŽIÏ“ž9&=sLzæ˜ôÌ1é™cÒ3ǤgŽIÏ“ž9&=sLzæ˜ôÌ1é™cÒ3ǤgŽIÏ“ž9&=sLzæ˜ôÌ1é™ãÒ3Ç¥gŽKÏ—ž9.=s\zæ¸ôÌqé™ãÒ3Ç¥gŽKÏ—ž9.=s\zæ¸ôÌqé™ãÒ3Ç¥gŽKÏ—ž9.=s\zæ¸ôÌqé™ãÒ3Ç¥gŽKÏ—ž9.=s\zæ„ôÌ é™Ò3'¤gNHÏœž9!=sBzæ„ôÌ é™Ò3'¤gNHÏœž9!=sBzæ„ôÌ é™Ò3'¤gNHÏœž9!=sBzæ„ôÌ é™Ò3'¤gNHÏœž9ù7jǨB1E{Á½˜d&“”´µrÿk±°ú„Ó?xÝ­5g©9KÍYjÎRs–š³Ôœ¥æ,5g©9KÍYjÎRs–š³Ôœ¥æ,5g©9KÍYjÎRs–š³Ôœ¥æ,5g©9KÍYjÎRsÈ!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒrCrÈA9È!9ä ‡äƒr’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!'9ä$‡œä“r’CNrÈI9É!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹r‘C.rÈE¹È!9ä"‡\ä‹ò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò!‡|È!rȇò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—ò%‡|É!_rÈ—r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!79ä&‡Üä›r“CnrÈM¹É!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!?rÈò#‡üÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡òCrÈCyÈ!9ä!‡<ä‡ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÉ!/9ä%‡¼ä—ò’C^rÈKyÅ!×qÈ_Vÿyü¼ú÷øë÷Ï?ß¿ý¼Èé¹å9#DyLP-1.10.4/Data/Netlib/blend.mps.gz0000644000175200017520000000475710430174061015376 0ustar coincoin‹êJ®9blend.mps¥\Ënå6 ÝÈ?xÙ.bH”¨Çrší“L‘vP ÿÿ!•mÊò˜¤ü¸YŒƒØ‡Ò9¤DJ–çãËûÛ°þüöííã÷ù—ϯoÃûϾüñçßËß¿~ü1üõù½üþ>üòþõãëû×ÿÞ~ŸŸ>¿ÿû÷óÓPìØåËÅ-¿\p¹„å—KZ.™à†®dÇ’!K–,™²dË’1KÖ,™³dÈÔ~‘= {@ö€ìÙ²dÈž#{Žì¹J”ì9²çÈž#{Žì9²çÈž'{žìy²ç'{ßÊÕÓéèéšèš—+ºZº]É’=${Höì!ÙC²È^ {ì²È^ {ì²È^ {‘ìE²É^${q²÷1 ¯ÏO¯ß¿ýxÿ˜ÂªüØ5@aØý¼Œèb¹:~ÃÎnú îùC±ü‚ì†q3«ŸàAhÄO-ÇAÀGÖºÙ?63Á½eÇÄáŒü0Ú©ãž‘ÖyÖÉrw,ÿ¼ò¿»‘à­IËBvVQÞÆ=œ+o‚Ï¢òæñô<ðÖÁN„Ò 4Ÿöp—¹ð³œ²KX癬A'º¤4Ž .ø'M‚ ÙkbR`Ê£•žšn¦©5–Á£ôÔ¤i’bçÑcM§Ë\™û"ƒ[ÞÂ0ݶ<ìlÎ û‡BŠ3Üñæ-k}å§ŽKœ˜,ûÝgÜÃênðêðë l-0¸æ§$\ôEÃáLà˜Qx ÎêK`£L8‚ÝÃ{·[Y˜G" ÒÍ“OÜÃ…@5äôˆ{8X޲t{¸¨jl2x'PCO!ˆV .‰Áy¤˜s/!<ÝP(<¦P8¥PT*L’  Å®Bs¿…ÖAºÇ ÅÇЧJêD²öÑzžÈë M½<î J/w²ßÃ&ÆkIv{ø«P+xj¤uÌ¢Ädã ÏC-@l¸_é :’À¨ ܼ¢ÃCî:Ü Î‹L‰Áóþ©dgÿ€”fìî8濱*o*¡ܳávVF·–çNvœ“\È‚&nªðÑÔF|':HàÄòÆïáÀæ¡„Á+‡¼‡scHšÀÁíá^(æP›a2ã.Rn#ÃwFo)è©5nQ«³€E‡sµÖhp`…RYÈI<ák©ßà. Õ¶“cÓø¼‡ :&’tÖu>h£7šŽÀ¨Gpqo]Cu }Jàð˜Àá1Ãc7îáŽÀá”ÀQ[iw.Õ…ßùÀ!Ì)VjŽlð [\7hâcÇÇ"8ž8iµú¢£*ƒ‹:N7:ëñ¿'pzLà.ëx$]>œ]…õ麑ÒàÂjç] ðìFª õä{P8ÃùFŠƒÄଆñÙyÁq“C< 5L’çÜ-¿‡ :”=k¹w ÉăÕqƒG{ÖïÅ%UºVm„;~oð[~oð[~ßÀïø}¿ã÷¿å÷ \õ{èìþ™Çüns‘èw¿‡‹~÷‚ß§;‘µ.ú¿¯»¾Vóûäø¥ÔH¼Ô0ȸ‹î•=yë²{Uîáz&´¿ÛN±ÜÜ»öÌÝr/<æ^x̽ð˜{á1÷Âcî…ÇÜ §Üë4ÿÌ+® (?Œk%ÙàÎ(;|µhS]l‚Ó÷£ fqµSÆàŽ=ç9/vöQÀõJÁU!¯oøT¶D]òªÀcXàllnËq{^à .Œ1Ë›œ ŒGûžÀë‹;T÷œ×ݰNÙÒÆ¿ÕB|áÂÈh𤾨ƒÔ¾™ÖàžÍ‚qÌsægÜ_Ò\رsstð}âRë3¸ºßž;Ïê*ç÷¬sOãüÊ”qÉ£G¿Âxëw¸·éÎæÜœs/Â#ƒ_àîFdðÄ÷✓¸—´ˆ4`ÛLæwÛãn4îµÚÝÀoq·=îîõ‚Ó+ŠSÜ¡Ç4îu±_à>Þz6¹­Ìëë×Kö'¸;•ûô ÷º@ÜÀ/p‡‘Ãùx—Â;ÏõôB/Ÿàî{~2wkFËà—bÞ1øéñ>ïµ;)òw¼Î}º“ü÷xë·æù w~Ú7Úzšlç×Ö¹–o®í´j¯RY·JÔÔHƒ³>ÎO‰ÒMi†Á¥ƒW(K7px–óÒ/za(28SèGW木¿\ǽ+PMwÑòâd Jl¢Óë¯ \{‹¹îDýåÎÀ9÷RE‘{ÉÃŽÁ¯pÞúîþDýåÎÀ9÷’Š‚Â½Öžøîk ²{e>FÔë/¢þêq·=îFä>! ~‹»íqŸë/‰{:¢þêq‡wÐünYëW¸¯õ×ι»ù½‹À}­¿ÚÜÞò»ëqÚx¯[qøîkÞÀow¯w¾¬—Pì|‰§Äàp#·ôé´™–ukÈc­œ¬é)Qº–‡7p¯äaAºÃ£pz{®PzyØc/¯‡ã<Ü9TÔà„<<BÎ ž´ØÌznð  ¬`;Çy8œsî%'‘{ÉÞÁ¯pÖú=îé8‡3pν¤Û¨p÷Á/po¹(éÜ)ÛÉÃù8÷¸çw£q_<çǸç÷9KÜkFsœ‡;Ü\â÷º+¾_à¾æá¸/yXà¾æá6‰Û;~op‰{ÔÆ{d­_á¾æá¿5Þ[úäýR@E!{O7òpË’N[N³n• [ßç58ëãü”(]Ëà .H·äaAºÃ/äá—µˆ@ýmÕ‹‘fôÇ/S:g°÷.†B;v¢#Œ¼mwœþ|íÆX:±:­·lÀýSj…é†×‹ˆ9ê±÷nëYo}:¹+·>Œ”‹ZD:m` v‡Z4¸ÐÈ2©ðWx%ìhMŽÏ€¸Î‘ÿp|Æ  o³‚¶´è{ ×À…zý6e5Õ>vÖ/ Xt´}ÞÖÍt«T)õ^=¢ŽOçv :“´L¢½ÓFíÃT¼ÕzÔ[/ù=ùºÌÌwZO}îôT« ÓFr‡¢)¶³™N;Âà›7 .|ŠðR§…v¾Äir ÇüÔÔÃ?*¼Ì)ë×JÇûÜY±Ñæ2wÓ7(oÇüñ¼.ˆc;ÄîOKW¼[[o{ïêÁË­zØÃÅ/Mj#©ÓÈ:fbî¸a){¬”²pºRÖ#ôÝ•zrå+ÁëhH¶_™¤Î,­‘éó95u¾þÑû8NiþIÿ¹Áf²ÚG¸e’Ïž8ÖµïÓ„q~IÄ>ô»ÎLø~LX7Î;=üÌ7¬¯;Úpð¬Ì-ƒx¨Üx~zûøýË?_žŸþ~ J¬‚DDyLP-1.10.4/Data/Netlib/dfl001.mps.gz0000644000175200017520000067170510430174061015303 0ustar coincoin‹'K®9dfl001.mpsDÚ;Ê0[EÑü‚}¸MøæyW(¨‘ÐÀþ÷DüGE›:ÁÊf4þþÇ¿ýù÷_ߟþòןŸþðÛ?ÿñïýá·ßÿûòÏŸÿýøÿ9œÓ¹œÛyœ×ùœß¯³§µ¬e-kYËZÖ²–µamXÖ†µamXÖ†µamX›Ö¦µimZ›Ö¦µimZ›Ö¦µemY[Ö–µemY[Ö–µemYÛÖ¶µmm[ÛÖ¶µmm[ÛÖ¶µcíX;ÖŽµcíX;ÖŽµcíX»Ö®µkíZ»Ö®µkíZ»Ö®µgíY{ÖžµgíY{ÖžµgíYû¬}Ö>kŸµÏÚgí³öYû¬}¿ÖúùqæÎé\Îí<Îë|NkZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’–¤%iIZ’– -Z2´dhÉÐ’¡%CK†– -Z2´dhÉÐ’¡%CK†– -Z2´dhÉÐ’¡%CK†– -Z2´dhÉÐ’¡%CK†– -Z2´dhÉÐ’¡%CK†– -Z2´dhÉÐ’¡%CK†– -Z2´dhÉÐ’¡%CK†– -Z2´dhÉÐ’¡%CK†– -Z2´dhÉÐ’¡%CK†– -Z2´dhÉÐ’¡%CK†– -Z2´dhÉÐ’¡%CK†– -Z2´dhÉÐ’¡%CK†– -Z2´dhÉÔ’©%SK¦–L-™Z2µdjÉÔ’©%SK¦–L-™Z2µdjÉÔ’©%SK¦–L-™Z2µdjÉÔ’©%SK¦–L-™Z2µdjÉÔ’©%SK¦–L-™Z2µdjÉÔ’©%SK¦–L-™Z2µdjÉÔ’©%SK¦–L-™Z2µdjÉÔ’©%SK¦–L-™Z2µdjÉÔ’©%SK¦–L-™Z2µdjÉÔ’©%SK¦–L-™Z2µdjÉÔ’©%SK¦–L-™Z2µdjÉÔ’©%SK¦–L-™Z2µdjÉÔ’©%SK¦–,-YZ²´diÉÒ’¥%KK––,-YZ²´diÉÒ’¥%KK––,-YZ²´diÉÒ’¥%KK––,-YZ²´diÉÒ’¥%KK––,-YZ²´diÉÒ’¥%KK––,-YZ²´diÉÒ’¥%KK––,-YZ²´diÉÒ’¥%KK––,-YZ²´diÉÒ’¥%KK––,-YZ²´diÉÒ’¥%KK––,-YZ²´diÉÒ’¥%KK––,-YZ²´diÉÒ’¥%KK––,-YZ²´diÉÒ’¥%KK––,-YZ²´diÉÖ’­%[K¶–l-ÙZ²µdkÉÖ’­%[K¶–l-ÙZ²µdkÉÖ’­%[K¶–l-ÙZ²µdkÉÖ’­%[K¶–l-ÙZ²µdkÉÖ’­%[K¶–l-ÙZ²µdkÉÖ’­%[K¶–l-ÙZ²µdkÉÖ’­%[K¶–l-ÙZ²µdkÉÖ’­%[K¶–l-ÙZ²µdkÉÖ’­%[K¶–l-ÙZ²µdkÉÖ’­%[K¶–l-ÙZ²µdkÉÖ’­%[K¶–l-ÙZ²µdkÉÖ’­%[K¶–l-ÙZ²µdkÉÖ’­%[K¶–-9Zr´ähÉÑ’£%GKŽ–-9Zr´ähÉÑ’£%GKŽ–-9Zr´ähÉÑ’£%GKŽ–-9Zr´ähÉÑ’£%GKŽ–-9Zr´ähÉÑ’£%GKŽ–-9Zr´ähÉÑ’£%GKŽ–-9Zr´ähÉÑ’£%GKŽ–-9Zr´ähÉÑ’£%GKŽ–-9Zr´ähÉÑ’£%GKŽ–-9Zr´ähÉÑ’£%GKŽ–-9Zr´ähÉÑ’£%GKŽ–-9Zr´ähÉÑ’£%GKŽ–-9Zr´ähÉÕ’«%WK®–\-¹ZrµäjÉÕ’«%WK®–\-¹ZrµäjÉÕ’«%WK®–\-¹ZrµäjÉÕ’«%WK®–\-¹ZrµäjÉÕ’«%WK®–\-¹ZrµäjÉÕ’«%WK®–\-¹ZrµäjÉÕ’«%WK®–\-¹ZrµäjÉÕ’«%WK®–\-¹ZrµäjÉÕ’«%WK®–\-¹ZrµäjÉÕ’«%WK®–\-¹ZrµäjÉÕ’«%WK®–\-¹ZrµäjÉÕ’«%WK®–\-¹ZrµäjÉÕ’«%WK®–<-yZò´äiÉÓ’§%OKž–<-yZò´äiÉÓ’§%OKž–<-yZò´äiÉÓ’§%OKž–<-yZò´äiÉÓ’§%OKž–<-yZò´äiÉÓ’§%OKž–<-yZò´äiÉÓ’§%OKž–<-yZò´äiÉÓ’§%OKž–<-yZò´äiÉÓ’§%OKž–<-yZò´äiÉÓ’§%OKž–<-yZò´äiÉÓ’§%OKž–<-yZò´äiÉÓ’§%OKž–<-yZò´äiÉÓ’§%OKž–<-yZò´äiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|Zòiɧ%Ÿ–|ZòýjI?¿Z÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷:¸×Á½îup¯ƒ{Üëà^÷:¸×Á½îup¯ƒ{Üëà^÷:¸×Á½îup¯ƒ{Üëà^÷:¸×Á½îup¯ƒ{Üëà^÷:¸×Á½îup¯ã?„ÝK®$Gvйí¡6 ëš™S÷H@‹$hÿ[Ñ+¾nv³@Æ(àËðŒü!<¹×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=îõ¸×ã^{=î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷î5Ük¸×p¯á^ý†{ ÷îµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîµÜk¹×r¯å^˽–{-÷ZîuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îuÜë¸×q¯ã^ǽŽ{÷:îõq¯{}Üëã^÷ú¸×ǽ>îõq¯{}Üëã^÷ú¸×ǽ>îõq¯{}Üëã^÷ú¸×ǽ>îõq¯{}Üëã^÷ú¸×ǽ>îõq¯{}Üëã^÷ú¸×ǽ>îõq¯{}Üëã^÷ú¸×ǽ>îõq¯{}Üëã^÷ú¸×ǽ>îõq¯{}Üëã^÷ú¸×ǽ>îõq¯{}Üëã^÷ú¸×ǽ¾O÷úË—/¿üç_ÿõ_þòßý¿ÿúå?F>¶¿|vúå·o_¿üM.þãø¿}ûú»ø÷¬ÿèüíØ÷á¾þzñü=~¿Æ¿í§ÿøaû÷¿“üÝ ¿‰ç³ýãMóOÛ¿}o»ö·ñ~¶ç§ŸØ~ßöóµÆóq)þn†¾üm õ?ÿÓ Ý»Ÿ¾þú*ò÷£öùø||³ûá}üöq=þQÉgüÛ·wtÔû,¹Ï ýÝ™|_ãÏãß—‹øQüŸNñËÇÇ¡ûú￉ÿüÙþÿ¤}Y²ä8²ëVrFúÀaµÿÅ<*“®do¾¶þhë:()$‘ôïÛ«KÛü{ð«sÎþªÍ‹äýE.2û‰}^¤ô—/m|g9kΟß'å„çôçêZÒöêiDuäæ'ü2É`õg-J–ý÷(öç/ÀOœð‹¢Ëþj®Ø¶_ð¿§]Ø=þY±—êðþ5ˆ8ƒÇŠ5ð©¥?ÑæÕSa5×ÌHž÷ÛÂøÔÞáçþ`5\ƒŸ´¬†üg1åšöøy[ßOh.&5Óß^c)ïáW§ãþã'¶±´>¿´ø«6ŸP™«]äÏZgIÞ*ì'Ê\‹’÷;ªŒ¿y‡KêàÐh›“ô¿ X÷‡FÍí~±à>®’M?¿c¦€ÿYã¹ìwê߃Yìêj¢ï»`jãò_§ýÔ#˜BŽnô®¹+xïí\~‰u„*—YùÇ×›Ÿ[—¼?#[£.Îq‘ÎX×ì·ÿ«‚0íò¹¿ú%N¿òJz¿ú÷Êc«MŸß‰_üU™§Tß/ëKú„]dî\m|Nc˜ §Ÿƒ+ûëÕ~–¬Ÿ?;×%¼¢åN?‚?;×e¿‹mü…kŠ<¡TÙG0á#ÄÜÇW§áýêW1]dæ9ï?ÔÔœ^dnP½ÙÁ"-¥Úçwa à6¨Ë¡qÿ€{¢7ÿg‹ÈR HLÞá—°ó~tÿùäåÿyxŽGòIKB ßËMtn7‰n ±F;ª([3~™k‚³LÊ;ü’§9x×Ò´|~ׯûEû}üÏÍ?ÞâÇÂæ&×¹•Ö{œiüÙM¸Ûékè3ýrÿ—}w¯ (¹ˆ¥y¨ƒ|˜ì5Ø\€=MÒ;üÇÙz×/OÛfráû‹üÌŸrOŸ´¬k‹uÝÚþKkt]¼Õý¦dÉÞáß?qä)^¾ö›áIç— K¾Kcg`Xßá×,àYÖaY¢›?%Œ±˜Êþ‹ÒèÆ¢R*O¼½Â›{kß÷è3òÞÄ¿ÿA§iÍ"GáïºÎ/ÍA=¬4–~ýÙnÇŽZéãê3l r$’ßá—¤ôþ ï´nõþóiK¯Ÿ´$i>ƒ ‰dva[ׄ ÌsDÚ;ü’»x?ò¥Tøõ©xŽ‚Há+Mc'Vö.»ù¼‹%µçO^ö‹?µœ+up´8;|'üj᜞9Wùôõ ÍP§—²?VÙbò™ µ’h©ôæÿÀÇ ½ßì¤ÓPÔg…Æ(uºü&ü"Ü]å+õØH:º:=Œ&ü2Ý¿÷RÓ¼T²äk£_bŸQÓã EŒj…íeT¸+lþ½ ¼Ç9búÛg<¤ûïqȉ}ò’ –()ÈÞD3«]Nøe{ðÙ\APú¬WŸ{’&´#Òä¢Äzß—÷ ÙÍÿYï¢dF#§eðÌÿ±I¬zz‡_Ûyª½òr•Èf@Ä-Þ—¹`µ±M¿ÌBG奔َXæÊ~Ð!¸n¥tY—e†NƒÄÛ7áf£Uã² ÜÇúY6¾:Ïô^Á¦ßé¦?á—§yŽuVùíLë$g–ÖÕ|’ÖU‰®Z}„Ì>ç ¿ÄÀA3‰ž~ Ólc##¨Ÿ¶$¾u.eŸŠî*Û Üâ-‚*…¨¼Ã_úÂÕc³k Pf^æn% ^)´_VçR.ô,«3V/²ãÐu.9€¼koü…·yeSpû†Ú\&Þ@2ä´W8á—ÖÅþóZ`Û­²K úÓ–RU›ËD@·áò:c?1V™€@©–4Ù–ÓRÿ”eOk3o®Ú¶ížF_–n]³¨½€ÄwÖpÐOŒÅdý ¤È–ý£Ë¹Øæ*sP× ‘ ¿$¶Nö¡Rû§®¯w–ÿR®'n<âï›H4ïoþšàd7?WoȈòàZåAËüâ켸6b³O_ûla&k+lùõy+(²‹ÑH§O¢€û~]j¦-Ì ¿TkOiu¤Oi9¾ú<{wµå?kÉÙÑÐï´yO¥ÚY¤Ó5&ðä+Â'ü=X2¿Æ ®Ÿ%çïs»0PÂò$,}ês½g€Uºd&\SC*­ŠôMð×¥zö)Ë®ÐK$˜ Oš¾ŸI@PU«lC xq8¤Ô߯~ ò$×#:)Ÿº´ûl Œz úŒ( (kdž!NøHbQw±÷׫ÿóÞ hcÒXU~ÆÕ;j°±z{À-¥ƒõ3¶Šä×%kþ„Jô o!©¿Ãe·ýšb+ïðmSz³»æ>òõëî`ÁMScø¼¤œN¾Ž‘¹}Êú€[´ÚAi¹²6ö䣎¸0Ÿ4¨{ýÂÚÌ“—7^/ÚYM&ß¼<ðâDXÿ4à[þܯiþ ÿñ€«¥¯à&ùÏ /„µ_ó¤ßI±“ëgÅnrš¯~"Hu³³ógÂ/Ù׃Õ{‘üÖÞþä”]¯0]èû™ë²Š¡°ŸÂg¦œ@©è⛿Ãu—ÿšóÖìÑm‰2¿LrYÿ*Êß¾­Æ†HßÏ„· 6¾Ìê(þ³qç­|òr€Lú8ˆß¶D¦Ü2ZãÆïq_—æŸú·2ƒã‡¾s¡lœ€ëcœçÞ Åv½|õspüÒ¾p5ÙN Ñ]uמӟ¸Û­.锵Hž5v+ª\lìg‰ž’ó$ü¥Æ¸xy2öÒîŠ?~IþMsñþY"ÆIåËÚ)±2FJÀŸ}Ý»á{¬þܳ¯57¸VYè¬Q–Gè&ô»™á=ÔÉA¹k¨®þ(W~ý^‹é€¶ß,seó-ß6÷—¿ÊÑË=áÑwi¶ÎOLêµíwЩή>ÓXAf66~pI VÑLÃ𠪥r’?5K#È\ö‹0±fŒ‘/nxï'¬™š]V^ÑLÐ/ž¨Xg_ð„_’§ÿÐu™ðŸ»óÅQoë×qÓSШ -Xüõ Rú¥µëÚOÉU}Pá¼l ÙO¬`ý|ÿÕŒr5ÆJ³¬ ßIÙ×ÙÒŽ‘ü€[ª¨Œêô'îâ€_š´,C‘9øsó.Eprd}?Ye¥öòUí þj0¨uÒz ¸%ÔÚ©t{Üòçªzù*æM\®ŠŠáô0špÍv4¹|Ͱ-“ sHò¿ ?ùÂ&©îYN ™y¼Ç¯RÈäÏ™½Èl݃c‹(ïpé(k¡äõ ÿùKj²¯¬2Èt»Q?•.º%N¸¤=±è §Ëd’é: Î_î-¯W=¥|•~‚r—ÁER£[¢GÔä'´³ñƒÓÇÖeŒ=@uÉÞéZ B3˜3^´ö]b6Ñþ‘u³›1¢¿TƃUØP\hÙËwò壷fgyûª}†|Q¶ƒý—õŸ~â„K\é-½^ýAlµ‘×-¼ 0TRa‹©¼´GÆõèOœ^ζDé[¶Ä›¡ˆŠ$”VpË|C….“²›`°±+­c,³û72˜žÁEØpÜÜ?F–>5šÓ–i8©`_‹4ú²H'?2IÝ/€ËÇ™]= DÆB³à1fu Ã^v#ÜÏ2ß8úÚ»ÎõæU ±FÎ5Ðø °Ø¤ÄŒ±ííLZ`Êr“ƨٹF{l¢JÇân¥úIïÀ½}lÙz&_pCîÜvWÒêðä šµÚbtaMxI4wœ¬ÂÜï?åö¿ÔèOö·«0¸ÌŸçÕPt»,iÙOœGl14/†)­‡ ]â¬{ð±µ£¢3w›ðÇ=^Në_EÐàdQaO(z3n™í›¿Ü‚N*²#úxYà¡°³/Ö ¸ŸQKK.iåÌ®ü5u 4%Ó07>, &~¯`œÇz}‡?[êºre’0Åê>ÿÑ\éë•ÄŽ†¶›§wø“ãôýWÑý±àeäGà“)H'ËŒUõgz?ASÏïðËÂâà¼Ü?n |ÖÐûGI:ýgU} ¦dAQ¥¹õbÈ3­š ÿY©j#Æ\Äf$¨š…­ÒŸú@fkÄ”ìCÍÑ#>©A]3]éû-ÎFYœ%!óh ¤Lžà’ää­Ö¶€$GÿÉlIö€cö Uªv ÌOøc·r_‹ „·¢áÝüª•ÝcÔKÀG …S7)Gîù£Ëi•¤ôFxÎvÁ 7cÃSc†ÈÈø üPEcì|_T :)–áìô'Îݪ;P„Ú¤¸g°¹ÑxUv³¥—\ýÚO‘[qIFV6å'rÖ•ÝÊÜ­Ðr½°®ËÔ¤ú/u¨/Ífî;ù‡ÍwÞ¼}| Üå.‹€Šh»á€ëõ`­oj w'éT èhx§‰e¼€ŽSgíu¹™žˆ —Fn&U´Vzõ¹ø¥@ÅËeKÂó´’$ä;ë¿J¨.& H ¥³˜mÒ+/·f°”+½zP»?R»%ö Ýè/&} 7|‚tu¹I’O]ŽÂà]V êl;:Ûn”> Ê’­Ð¢uÓU‚ÊêoªÑ8éí8ò;<#É’œY9ù†—\ª±^ïÂø‰ÈÝÕ_ÿŠîõEV9Qņ©ž9~"Ôee´X Æ*0ɽ·w¸T`ûb?dƒŽÓó2»þ ·p÷Cæ®LÂWƒLê@+èX´S"çßeßü•òØ-݇¾:Z2˜p“#=6ûâ2h5UíŸ&ÄAÔ4°k«³~þ ïG[Ú/›×Ї¶¨ƒFe¦Lÿ€‹•“jmÅWUJ mÑŠdâvGÙ.H¢\”¦º·38Ò t6d>áO¦K[§ÿÔ¢JÝNâ:vÎ.[šE¸ ג嫘v{~Ó·èa†Ì3©‹NÀÝÀä–S a݉ƒæqÇeõhžÑãCv5Ù™Y†º§ö^ÎMßá›JÂæøýêµØRYÆ 4¸¨Æ ^¿m@å_ß Þ¹¤¯f^Gh¨IM«¿ÄÏ–øÿ6pQrT'àÚ€Ô´?´_wW÷#ÏãßÅ“‘E/ð™}5þ„ÚÿWgÂ=gДä¯ðG°`ÕÖC#¨»È68S©Ü€K 6«Œ”«[uOO¹®Ó¨êž |i‰ú*ÝðúSm.x¡Öþ(÷ÈaM•';9Wäm×ûœ';9£N–ï­pW6ªa3^:’0V4 ÏWÏŸ¾—w¸6?ˆnòÈïú:¯;)¬ÚÛ´Ò«ßa@çW~s¿¨râÆ:ί/Wè)Nw‘À@Aª1{¸Iè¯W"‡ë5Œ¸e}t‘Ž$¤ýÊì¢þ¤pþo_olm%`k½Õ‡ÀqÍ#’I/FêC—,^=€×~ÕÊ8¾šA/Ö"ÿRgz±~ˆSîà„?Ä'û×è•Ö{D· <Ÿ¥Ê5´ÜrDz̟¶„¥ÁanÐê·°2A(›Z4*£u˜º‹tF¨\W‘o­±w8 RM‹€Ë.0Ü•2ܾ“]ßdñä·Þ•§/ŠÅä0?ûœw#™v²jl=4bœLg…ó)ô"“€ƒˆì#Þ*ïpoGcge|ª« ‡ ,€GÉAS•åêÁV¤ÌØi)½…20›SÐ c pÁ{a‰U(ö¶›Ûð(6H¦Œ‡ ‘ƒ’ݵ«|7äƒÇ‹¦%3®~À5Ø Í Ã/ÝýL"ìrÎ]Ú1ÁãE²Dªt£o¡4€XÄÆXøþó$í½~µŒÂ”=7È·`õ`èÉQØI¦ìEN€«zÿéë×®ê ‰5]eÑÍ)'d©­òrÜ´ePԔʬ§.µ² hË †õÆöýS¥Ä ~O@ÖN}ºôöH·²¢µš>e %ÿrzѧ”¹àôR¯líáÈXÀi’é§:¥»Á¤?Æè¸ƒmìQhM¾Þb(ñg¨bËVÙdÂjb#Ñd[x0a“£ÚX¯ðÂNÓ o Ù—ö ÌŒs!7[hjvà:¢fú®cvQ@Ë+üGÈçÖÊ'ÉòWwÜ6;:`p¯GÊÂ¥zYÝ“,8²€BórÞÚäŸJ-§o‘ˆ>à¶“ÂûS­ÜûÑo—±.>ê |JìúÃb¬8<ί¡zD4}‡{a–+“ò_Bê]\ÙBê3š\¡?1¬Y3”Ý-¯Wœö5ãdù«òroÂîq¦ ©ú·Þ_á¯÷ø¢€‹j. Ú#pWö·L³qÌ­R ÕÑôK´2®JÀ­Q"G¢ß¿¯ÂÄH}ˆ ßÜ›QÉӈץz¢ ‘ +\ÐŽŠÀ­€çªLøC*ëZ¼Ÿ>c«Eõ¡ÆÔSìC•“¤%×o¦³…©ƒâ–4Æ% øøÎOªS¿ú8#—éu ²0²1ï,œš|Û'Yë¯0]~‡»²œÇ$*œ`ªw$¾,œ’ཥL*¥ʺfoéŽïŸ~‚“IK•Ÿm²I³Õñ—ø3äûþ«Ÿ üe§_ZL,!—‰Fé­‰ý¯«w±PLc”ª¼²~ê_Â5€ÛVØ4êl]á ª35 Òè» ûoÍ8X?¶þö ¯£iaU¾€+‚;5žð{eÓKDm‰jƒ4Ú€‚;+UYÐ6+ ÷k§KYCµ7A";ˆƒwi Ì­ÎÄL®Ýc‚Ú¬Løã¼-ùû‡ZYÃÎæ.³W=È:&½Rñû¡‘w¸ÓK:â޳°~–„-´:©ùP)V z%ªN™ÑÅoAºcÞ¹0©€›¢•a¬<á?C•^|Ýš#=ÿ%õ»Ü«=àæG9i‘<¾Íõý”¨S·©M¸­´kК?¶Ë'l좫ٮÓ¿R§§Ý\úKb9n³x°_$U–~ÝŒÌ æ“­¼½kkñcËsô›—„ºÒ4²›ð±£‚"ÔC uÿqí*3¬ßã䃪¢`¡uö€ƒé D.Rpz‡[bºŸ|МzëNëÙÈŸæ@;8Т+Öƒ°ÞÄ©zI+5nÎÿ^½kpõDƒ… θ}ç·U}F2hLÄÝÂǽ”·ìà’˜¸ô‡>}IÎCU@ Ó¸?Ú«˜Mؼâ„?¦Sù¾Ç`†gz+ö¯‰uºàoÛ’ô/Uç-×RF:°ºX ÅId³'tC+ô’ß 1WÍÇ©¼Â'±&TŒ`\+aîˆ:K»ÖîHÈœ»ôMø“.º(‘[°(=#]ÆE xN åOŒ píù`®=»\J|Ëw^n?†×D_ÒoÎ@_SÏ›„ ˆÿÏÖ÷o¿7à²ÜhtNjf“ª©pvØ ýfÜ’J±¹¼ÃGŽw$ÀÝ[þÈRé*·îÀ‘dCo¶NtZP5ÁôÔò±›¹Ù$G4®’êW¡,„dTh^úÂÁôÌÈÅ 1½° ðH®Ñºå‡Zmz¤ÚhKcÂG |䉓Gh¹æŽ•û»ýô0½˜ˆ <Ê ™Ð3/—€?ðöánUù¤eï¨E†|ê´Ì$Ìg$3Ls{…?T]JûêgNª&vÈ´áN÷Œ4ó¡ü LOµö±¥–’¸(äÓÊ—I8Ýtl2vÂf½¥|…¥“N:)ÐùóB¿´¹í*º“šPÞáZŽϵ]ºƒË>Ô‚°ŽŠáÍb\“Ô£-|¬ðµþb·Ïi•¨?0#€€«&Ô•¦±zÛí‚–ÇN½¶sBW¿× 82´ÿù„²ÚWNÚBs ò&Aj·¦-X¤îB_oá²ù2 .lÆošèIÚBÀ%-<­ .lÓ“¤ÒÓEé_vê„uG“}™>¡PŒt@u.þö¹w `KˆyÀµ‚ÉmV^¯þcîc#û:Ë{{«ù»™ÐLîæ™Éï,lÔ:àŠ>.ã]Œ­»öð寢֛ǙÙaÀMûÉXïØ‘Û*ðì“Ý<Ò4ˆÅFf=ÄyãÓÌçj €ÞfcNÐßÊ•½7'ð‹í’ï_þ* RH3(za¾ B-¢>Ný~ðKI¶ê8{Ps$sjop…NÝÊHæwK'‘h‹zMÔ=˜ÃÄÒd'Îû€ã^…3 ¿€N)µ‹‰”xøÆQµ$²-"€  ;Užñ`å*PXÊNã· ·ÞM.ÓS*$|wÜêM x¤3kyÕCÂ×Í4ïTNð­+ôŸí¢Ò'?Û¹œhìI/ò)K|psºD¿Iœµ|]=\@›G„1n-Ÿ°÷ƃL«¨¬KÌR€éA1ztO¸”šôÐã­HéCù7?3OdågFO,Ùež#ÿÉßO(ÌÞR²ØvpXþ–œ_á­GÊZ¿žäÇË;m߃©9Û7CÛ~…ù¥\-(£JO}-~¸ÞRQ ø‘YuÖo69ÊL˜8à^ëÉŒ{É?R G*Frð ig<aÕ¥€?ÓÛï¿ ß8dÍj4ˆ¿yÖ À©–H4˜š‰¾¬úÒFÈ=½Ã Z¶ý…'‰Zð.Ä„?¤Þ«Úr–cü¡ç{'Ì`7àæˆ’/.åÝžÖë¸GÓ坿¦¤ý_˜ ×,šÆ™Ñ^árË8Vוª¿™){°ÏÛáÒïÂoée…ßž+ +L´²ÚÀ]é=jÔþaÂC¦xÆeïðíY¸+Mç“Öמ+öV–ÿmo)­½Mþ·¢âIc³÷IëB,Wu@sz‡{“3ó ù.¼Z˜B¡ó+1¿Î€«ƒÃ×3S±™ðŸAÌÈ?º,x +Mà{ªtry&D×/)ÿ²§M¸t•¦iÝ–Ù=®–{>™Ý[Qè? SÑ ¸g=2ÈùÝ\–‰Gõ]@Ò_+׃ò­¥®Ë;\k;šWìWn <`dV¨,lÀ­ W´N#°àl÷£ ªe÷ÕxÇ'™;7&Eî!î µ¼j£ï'ªïüÄJÏ /Û g—O_¢xÙ¿†\ig™ә2KÀ·*›D2µ¬Ÿ%Mò芓«°]prÁ5ª?ÐyÂ]ÒI o¥ÙWéó/Iü(Š+b¹z‰X«¨Uöu„V®àg•^ÞáV`¥¿²ÕÐDz.Lç9A8ö¡æ ©ÅSÀ½ÂâÊxIG¯·]e__ïMlµ±ª,î¥Þø%"L 9à–ñÕgŸðŸ{ÇÕßËëû‰ý (³(ýK²'йײ òzpÌ;pê¶TèO õq=á7þêÅVŸ/aÒºTiù¢4Þ<6¥ÁgÙ`#WÌ«œö¤‡þ—Sî À”®®ï’«¿Ã?¹º¿Ë˜Dv׌F°;aHÝpPÝ‘3Óp›ðGã¢Õï{œ$0òCÏñÌï‹Ì=ø1ºuçö4²ý¡bkɶ*¶z}©aiê,@½#1ÕÊôZ~h<:Ž“ö•i‡Þ2ò|ºM?ùÙµìLÍCV9 ÄÜÅɃl/€=¡Æð,²CO¢Eö ßÒ|þä§L‘Úw<ø_2ÞéWºÈ)#Ö(K(t‘]‘в0`˃ϗªìš)¾@Ž­ÖܲÊ(ÍÉü;ÍTÚ“¾zTKåå–à«'ÈnMÙð\‘€eA|ÈG.p#«üØò~‚‰®HüÈh°…‘'òÂtfbpW9*5]¦k©©E ‰Ñ÷£€ý,´ü•ÁÃݹAЯý)BQ+‹€›eð×l÷§/Iðd¸5ü÷[ˆQ$ª²ðg‹ù>@ ‹ &\ `¸¿$m·sÕßÖíëë £’{ðà Ø­ú;y_8–h´ma\Rýâ£M²½ëŽk^Š]dÂ-SÊäÔç]ÓçO)éF\MÐÔ='¶”üKŠy5˜Ú^ÿ]Éû‹-¼öðëD”êÔ0#æÿ‚ž»9˘Â_ÀŸ±ÕM8§t¶`Ëw´fœvëúÎfbêö‘å4™œúíüįשï1|œN¶=ñ\Í¿ZówøØOÄLÆÛ?uI¨'§~«Oó'bdr³Wôq…Qßáf T ’Ó×»ÛÛHî¿K“¸Ÿ °J¡<·àý7°õ=ï¿HIkÝéæý£!)¬TBš»g”X±£%àÖX_¸Lz¶†r{V¸ëшüHAÚZÜ*!¡í”/JVvõ1¦zgqN>~ÄѸ‰çÏzó÷ÄjÚ0ñ°€C©Ð‘´wø?J…NøÏ^ûeü»„feNFHuļïôý„Õ’˜ “Ç%…e®ìt‚;àã5½Þƒ—¥)PBW°Žt®º »zŒUE «½Ã½Mü/UVáÎéÃíy8ã!àV®dc‰FÀ½8wºíæ­®Ãe5·ä)%dº°cM‘µž´\ÅXÁ0àã1ž|\.µ¬Õ€Ùç=ê8] ÁKº}Eš|ɶTP J—õÝÎ<©åß•Äåã í Ø’™ëVÀ­•#>g®ù+ ‘|@í²ÌT§J¨SSÙÝt÷*ÿ2‘p$3—ŸsÂ-ñ‘‰®§_°Ú¯LÆÇÊMKOÿ¢pîXå˜VÊòOV»Ñ¹ÍJ×ð'  x6Àx£˜ÜXõ0~Û]Ý[§«ážB 6¦þP‚ânÖ±Ö[À%µ“·Ø/+Í%ƒ/Á>W$ÅŸýí!<“NJªRs]Aç—7^/hzZe¶Y%hé*h*„†¾!ìÝ夫\/Ýܶ,€ ¥'¤k¬ôãÒHËØPp™ôqR’c6¶Æ'1Öm½ }ÀÁ¼ÉAIÚ_á??Áq͵ðZBþt4.u]úçh7P§þÏ©øÊ„?’ê—‚v î{rk°#+XíHv7Ñ„€oçfŒ)¯ðÑØØù¾^JÐҥ￴ñ®+û‰³s‡ç„˜þBÀ5eÔ@ÍïðG%düÄEçj2ÏÆ™“uÑÙO´P¡a4¹y^Ù(ì%F ø8»Ob«ü{iùPƒJ^@L­ÞYÜ2¹àâÈú¦ÒÅdáx˜fVhB½Ó+_jÉ«jâì,odÁnSPz`N¸÷Äv• ¥g?|-½ÃŸ’ßß¿÷ÞÐtMÒB1B^ªï%¤ÄsÛÿĜؤN¹¥ÄË‘OIyõ'-Á7d?KÛà‡»¾í„\pÏ‘QËûÕŸµËlkx?ã©õI¯lT:àÞÚI®ʚ¯WÂ9(ûz£ùSÎSÉ9ù+ÁÙ–&à³öÆ /zÒXº^öG–³ÌcÒ mc…5–þTbÙJ©¤>¢Ú…ì8Q—F9Sí ¸w6ÌW‚ ]„yœ|ëz÷geøûÕrcU>i]ãaí Z–g;àn娶,U¿J,!>ž@{ð©Ê÷ý„nk"öOb8¶7-L—¨LbøÈbé_ÍL™Äxb3%¸ÕμFJp  hè{fú'_-}\á5}µ(,!§]Pø%}‡k=âN]¶Ô[v•ÉBN}ï$½W¦{À= âÛ%o¶Æç“…œ0ODhð$æ ÃK“½Þh;þ÷€šã7^Š/á;’Žø«!f=ê]î}žÌÆ3® LèôX_᥃ö5\‚ÝŒTòGnÂê•·8íg†˜7(×\4pÖˆ ꉙþVžY"’z÷cP­ÉYLjÜýL…c„_jÞ7AôrSël{¬¤“vAá×J¥(“ œüâéÐOpÆÞŽv®lmõ .õ¦ï!mÒÊ’¡ Ï%#.¿ù­ûóˆ V†ü4̹Ò:T ,l‹˜poGéȈ>¿KA2Pè2:8V¶TXWû¦ùô˜2o€1A=Ù>öfú Â,±²d ¸ï´ˆv}{ý.¼ö°N,G ±èŠÊŠ•MRÜüš~x7t £'4‹6® ¸ökºåLí‚>9Y¥eÔÓ#ŸJÀã`«c-.qpM±J¤+kèÜ)%Ö m‚/í¢³»È¬X4=r·ï:(Wo­i¤%üõÎLÁ* î÷LŸÐÌR¡o1¸ #öμ0'Ÿõªp¹ êpZW(ÙÙ µç£÷cUú:ÇU'ï2íÔ´þÄ™¾ŸB€'¯×NŸü–W®c{ûØòW!ËB³ó ü2 ’+ÆÕ½*³zYí­j¨2·†V_ ¸{;òôN_Ús~ñzûtžOÕ›™zÄjפéÓ׫ÏmL¡I&ëÒ\4ƒ@–r§êV®Yj•5ªAÍ àŒ Ý£¾0hÿhÂʹ­m¢©>Î2ïè,£o1ÆŒü¤]]¯tq™,¯ùnÔuZÒw¾WóÍ.ÛÇCÛÉ¢'ÔÊÄn½œŸ~¹eù¬¿}eãŒéýÜQƒn;dûþ³*ÙåKø©æÐ*,@ÅhF£1ï¿Êgþߎžüý«ÉFÍôóŸ¦P_oQb0àœjÖ`£*ëàÔ›ªÿÒª¯7Q¼†Äßõ¤jf#™*3Ü«­q¯é“–o(( öòC{öûÏeb`17fŒpu?r“þU³®ÁÎìh‡é¬çp)`8Gw䋟ð.¿ëòWᲜAaB‹2àæ ½±á—ÈŸÎTü1­«|D¢@ðµ³ÒtÀGxD@-þUϪ¡L F¥ßÖeP@>ôÄz¦s3€ý”ÿÂZ=ºðq?’!TYûãÓèåÿcŸ`°35£A¦ûpS llÔØ²nÙ™#­k_;Ìdg†‹Ó&6Ä21-ÿ՛à T 2uê8‘ÒfïðÇ@A÷•J;Gþ Ϭ]—–.¦™X)2ñ©•ÅCzHA“׾밆@,W-o) ¿úEÉZ|P@¡Ð¶3›Ê€«œñݛȧ,ïlj&V­!FÜDîLÎ>àÛœtù«™uä~*åúk7ºó…d±u$G’éEæ®â¹í²JÀ=!]*ˆxËÃ¥é÷'8Ó†Ç8÷÷EBëäŽN§ÛªÝ’w‚v+ò7´±´L=“-+ž¼Øÿ=áVÇEˆY¿©WìA„êo.P÷°¿ÃGh…äh­ÖƒßV¬wZ‰ômÏÕÊ—5圎½FuÀËR¦gp1@x)…x¨‹o•’Ûq¾?ýË…¾N6ªw°_”D3˜Ð/.ÿékˆ Úqmà€«}ö’èŽê»(g·µ9SƒtúoŠýwí }EgqëV¿X~»˜Öå¯j¤ `-R"UÀÅ*²Ý’wøÛîìw.Løƒ˜í+É'-6ëž×‘è©þtÍ4ƒíÆ2}‹³Ã žÛÍþ`ª}w:kP^ ph“Ê”d~LeJºR™j‰ª3•yæb_?ñ¯”2ˆÿ¨÷Z-QÑF‰GnÞÏ+ÝHÊvªXJÿ¤å "oO@1"1¶VÀGü‡ìIz‡{¢ O;ÊoøÜ+;šž¢šA÷Üèk£VäÕØ™æI 1cäV`…ùmÔP#np–0åw¸” ÇÙq=áÖŽŠ^//‹uùE`hû Ù†¯«•¶#•ÖÎt khø6¤×™ÞK Þ zÅhë»Þ{½“$« t-3½¤$ÙTŽG¼ZßácS@’]´©0ájGÓä>B»OYøI’ÍBóгu lP•Fôn`TôÁ£oiµƒ¨õVNCs®ôˆyÙD'í3³ìK`šÅ«AèD|ìÆVÙ_ª&àBd6#pAÎ;\™«m©šãsîëüÒœI¸6’†"Fú¡ÎÚ¥9H•}=|Х͕é`´¿J˜@Ï´Ñ'4HTšaZDþó[iŸ”—¿š; É‘*³ïšY੦¶òÑZ­<2~€ÔÐX“:š™J ¦YdTSþ~‡ªžüö‘Ž|×Zƒ¨öžÿË a«wrÈ®*ó~ù-D¶{nq%Á*à*´”І¨q!™Æo.€Múó€/éK4¸ÝD5¨s¯ôægî†VßjyÁ`󆸒´Ü?I`^H®›a›Þÿåw¾ßg§ú—-g ¹?C 1&,1ê1O³¯I'ô¾\Éç î¦'“ˆÚ›®bim²Îà,…v¦cpëGrrÞ«­“í¯½6Øz2­uãÑ£RÝŽ€Ã>'6Åð­5ض¨’¿‚Ï £Á eaSWÉ'WÏÒuÕGký#}NeZ“qÕd@ÒžhÖÎ×5#kÊÖ^áA/«õ{ ÂXÞ㦯7êFGŸ¶^|²EÖ¨õÐ9]¢¤´ª8áªl½‡÷´ª¿)û‰=èh^PÚÌ s=ˆf@Ñfïîø€[öçÜ»}ž~6v˜¥ÖÓ-róâÊ.2ä º9VÞãŒ]0"µ2*^À=µÄ.Á'è†Za4úB~ LÄxNô 5Ðm‹ï<±i­€‹ÚÂÕ߯®@ ù'éÓ®99[à1¤¢Gi½°«‡õ¡ÑÑ´••rÚÃ×T/Æ¿·’=8àfùdŠÒ-åOÍ <ød(0RÚ„0d¥Êf¾§´ë8ùD¥…q\î=Ÿ°¥Ô²¯QÏ”™§A" }ò3£mÈÖýíáë nü·×€ƒ†Fq¶kª ßf©Å¾ݬGùpüÌzÈÁ‰ÍFaÜ‹€K­ £æ1þp]‡jrRÀ=6&ÝÃÛX`½ƒ¹ô[Œ®žT„ld«$Æ4ó¼:× ©lŒ¤Úƒže`8z[&{À3ìIÓjrÀÝAA–ó‚ú–Ý%Í|µUï“_%òw ½Hxô“ÙC×ÖÖznÏä øUVÙàd—é:š||,¿[IÏL³Áé7õ‰™öP¼ëÀ¢I•I¿Ü»œõsîí“—ˆ/¤ð¼“$ZÒ ¸ÕŽÚù|ìv¿|ƒmY¤az\ÁœÁÈæÙ2¹]‹‘ìngÃ=l‡AÍùª¶ŠÐäL\Í0ž¬lþ;à’\ ãWõAêW½4òQ†“«„­ËîÒNjš#z”Uˆ¥‡`ž€œyý܌ͯöI BœþÄžE<5£YƒÞ…9vÞj ¯"á×FUÒÓd}Žs)7mè f©‰…ç—«aÅÃÙòºÆÎè_E øÝzgÅÝf½;-ðùïmïp«Ž\5…lŸ¦úñ%ä GàÎF{¦:ê©€áÁmsñw”:µV™ðŸû®W];=˜H;YåÙC¤™‡oу¬cD²ÖÖéÌznh¶`¤º‰]}Êv6çÓoK_Ç_eþ:×~ÔÍ©Yò:CÓÓJ\£¾Üè?–äïðG„œFò·¾áÉ+€ø(j¤øp¥Nu³•½±š»õR{‡#ƒç‚ü%%«óŒ±)±ôø¶ÞM¨¡H  EÕj‡†'ËkC±O¶”&_(Ó- ¸'šD‡DX^õYYÇ6à¢@ÎÄÛëÕ̞ɒi„ùmÝgêûºÓ_x‰îh~ee»€ 8™¼¼”?¾l$% rºüË”¬fasWúÛ…®Ÿ½ñOøÓœxÜâò¡†˜ƒLîÂ>Ô¿Bb€yU˜ªeß ‰IÉÔâ‰ØCHì±Ýì=Z£¯_±3·Pѯ¥"] h¥ic9½¼ÍҙȀ?[ÌßÅl^?Ô[e Æ*›ùî“y•õ€¹x]º'¶Â#‘¤Q|ˆ^%5qíË€+ÒÏ9Ôën1]ñÉÇ}ù«ˆ£‹k„•ô9†/mAÓ&•}çÁQBLÀñÙ‰W£ \à`,[Ê·œ°µåÒ"=\W5#!$6iÓoö‘W¤–Áå^ïr koLÀ§‡k9¹1\À·Ê¨²i¯WDc#;^b aG‚ôýÅ©µgFÀî[ÓÖßy)Š“ÉŽ [?îùȧ–úE€› QWbZÁTù¢‡ç«ršÑè€#áŒ}uÄÚeÉ'&C*9!(Ì¡‡çk–“3r¼¸º9zÈd•ö/öÓrzD:Оi^ÜS>yï¥5_Õ€{˜Á2Th•m|·zØ;6ËZð§i¸~µ ‚ŕ߭½Ç w5@€»<žÉ·9áR ðÞPKïWß²¸þT8™Š`Ÿô®­NÜÁÇ5é]pôesvصÍEú*˜Ò'?KÐÕµV=¼ùYl¡‡kñ[Itñª¢òŸ0=©€k–ìýê?ÊV¥é—¬xU0Š«ãh ÷8×xGZÑVè¸9˜›sÎVÓ2ºx}‘Å"a|BúáY­¢èC7\ w2~IN·K,„¯¤}÷RŸûˆbVüÆ×áË_ÉËㄼtýڑÒÀ5ÿ·L0à¡÷õ:yY~×\ô#²ÀgØ_ïs¢8\@ú?œ½yž¬W~ †Ÿrvõ˜¯—R§þˆ]e¬þ¶üUÌ8¸~_¿¯÷½^¤Åá öàÌ¿ŽÊmGZ3n#®Ô~{Í#(1…Ê)ô¾ ´.¤8Çdƒ°Ÿ4,Ol «SwÛ•”¶¾Åp!M )í’)×7’qïýîš ”qeOH·êØÑ?yù«s@UýÞØfúYÌÉåiQz%l†*ÛùîZޏúc{^úG~»…‚4§ño¨E-”šŒ´Coø–óëMö&à»Ün ;&Ï4â«Efbx2·bž(»áVûIÍzd±+«0§ ~P5JVØ*“0u‡2 ¹¾Â6¿¼·¥¥>þjÆ­Bsqz‰~3pÑi•}²-Œ»d[·í ‘)à†fkì;Ÿp=KçûØ}û\º\ ÐwžÙ¡1ù]ÒÁ>¤ÝØô°CÀrÝýzó3&0ÐbV!#É9Ýô0±zn™Áã´GįF:N>Óù„kÍøâŸƒˆ^\eŠ­Z 1†sÍeR£ÑßpmGlì±üòâBšç¤Ñ5È FÍœtüö´UTw}‡‹5ëêØ ?}ùêB2ËAËu¤?]}&êHD•Ýþ&º·4«ïporÀ·‡§ë§.›¾†à‚»Ð]û–¹RdmœYŒ©ÁHIr´]ØØi—Ó H`ªKÉ3Û.&<'@£ ;nCd«Âù‡žÞá.4ˆ?Ô&ä·‚¸¸y?yÀcùÉ'-Ùqšª²“?Iˆ¯“ÒD=àE «©¿Â®ñ>R©¾l“ ç¹²³÷¶'­ˆsÐíngåäÂEÓ|Àç¯FiHj2ꓳó÷ðáųü¿ <¤pT Û7à»É]ÖO¥Ö¦z{fQDÈ•|$Ðê*Ÿg‹üúPÁ@Zã?1*‰‡{Gê É5§P1{yŽ“ƒZ¹OOµÿmàî~$^%޵˜Ä:q–¸°sbÂ]€Þ¶.ñþH‚Ç=ÚR‘ RD¿KLn"§ðÝ1»ÿ|JßÏlg¢N°te‡|·N•(‹Âƒó†ªÆÌˆn¸ HÍEnx4Ÿ³°ÅËB‹ð’HHä1±-|RæÆÉdF„?î.G„׋a±v!ŠòÀ 'Ü›Ó{´èîŸv-éðØœ^= ÏÑÔÎSmYðíR¯Á™å¯ÂB¸@wR¶ü‚2W Ëy‚2—3’Fèô9÷ÈPÝ€€?¤áì;›¼<é‚ÌTŒÝcðò¼ëmqê·*'ìך®1‡e)‡ š#ÕskÔC¤gY°¡Ê½çú÷”øJ¡ÅìºÈcVh•®ÆHKzÛn$-ͬ/Š9…¤àEŒ¨°Ä·†SÏ‘ÿq¾Šä¶dí“.è 3^i×2ÔÆÚáh\<Uƒ.˜€‘YnÆâà 7í'=‘^¤õÓŽ‘00Ÿl‰61&ß/§Ž˜b-½ÃǺ¸ºŸqr«ò݇šÐúA‹#VP“6Ø&òömçÌõþàÕü•)„"R·ÄŸ#qÈøµ€ûßþÐ…”¶òŒ¿Š>°–.,˜›ps;x×W`$_ÊÉIÿAÛ#]e±A5@ÊÊÙ Í8Tð’ ;ºÛN\j,¹¼¨êåÊrÀÂþš<¡xî‚’À‡*´`ð.Gœë±tío)Ië¬Ô4áHƒ`ܼ±,iK»cÿªEí²“£±°o¨¿»5ÑÜÃÎQÎÚpÚÓgYAú,²ïçZÙ6š~@—ëg™@Rþ´åŒì1{¨àœàáyÐ.´ˆU„v·(ß;cè☥±N¿ÝM» ‘¢ì€ï‘%yÛG׮〇,^kýž¦Q©ËJrßV*ÎŽ†°o=ì`^áÅJ† ¢¦ÒBdð1©¶Zí÷ÀNâ\ ¾ç\ûXü_CÞdfÆãH&ihžÄÇ\R9x‹ZG„këÕCPšQ!¦*Ú1'öŒÂ‘Á¸áŽT‚œÉ~|'î¾l¢9äë ’OM¬äC¾®Cqw£÷8ƒÐ;»˜Ù]}.¦Ž´„„XNxœÐ0â8õd#ÑZÚâ+‘§˜ëU(d«ÔèÇ5YÏ‚&Âz‡?lºº/ ¤9ßús€|.&l•…þœBºFf oZ×þ]×L;Oz¤ütºúßç÷½¤åçf·¸ü¥ñ—ƒ]) Ìh¢*6à³øè¢(¢"椳‹Dõ ³&-pA-f­Œ[pov2åêãï—©ŸÇ*zBÞYq8àÞù÷8›ˆÅQ§ŸÌäßpB.Å¡9ÔåÐãІd£ÈŒ>‚˜¢U"œvÃÑ~ñpuÎëˆÇ€ÏC]Q´Ìn¸{"a×Sþ®où;Ô‚)‰íúš´ ”™wú ÏrdnZGz½xr0̺¸*Û äöy³²šhÀIË9í¢OC¼Ë†5)Ñ&àlžœÒ?ËN=™‹¹ó{œk\@ô)‰Ñä®y}ì {?áàµÚ'/Çj° SE³ät çÏbÈ’FnOG~eÖ¤¯­ƒ$ÊšÑ$®Ó›ïóêvÆÁ”òÑ¿…‰ºxwù[CŠ‘µ.¼$ÔXu7àÚTs¤Pe!æ°--¨,ïlÈbê5ýgH®Åc=çPåC¶¥"¬›“ƒƒY)â6aW¬„ú¹Òe­^´£1â|©-Ûn(øh¥ð›Ÿ$JÉ=u\®¼{ÇXFóùVéoŸGwfà.¶´É0ÌÝÖDßážóQ©iüÝׂ ê¡€y€ÔÙ<@À]ø0¿.EÄ¥[C¡&žAÄדŸp=Ùo±-ÞKCì6•{r(ÿ‹Ù·œÅn[—†Š|ì³±07ïü Ýú†^&‹ðEÎAiÁ'M‰]ä–ÊE11Ý·’€Òòj¥œ§¶É9gdÃAwíDVä–h^eeÿÍ—ñ½¨æ@ͪ–L¸Õ£ V¥|Q!ò¤G&¬£t‡*8ÓùÜØ„ÿ$/ÕV¿Â–P=ܵµþD|=¡`WV$+¾ëõ=àžÎHâÞóW#h—f¨ÚÉæ€óíþêGWo©-ZÄ9‡R!ÖíÌìýkÓÊ‚K;€»—ƒ]ðšwÐï›ùo å=þ[½£#ÈXèñæ±ЖSéô³™{G7¯B&-€Öçœð‡·©ÈâŸ<×Ë» úÕéEBC­³¼j²6ñÜ6„ò„+â„hWú„Hq;Y?½¸|u Bf1#1n&ã|ÃÕýÈÇéºúú~B¥ÑAÒ®ZØ”St²Xq Â8èsJ¦X¨48à…ü\ù"gÆ— øÈƤn[Ê‹–ð€ÏþO•“qGüvûî‚¡祈 “ p™jgßü„o n½ù•ßp³3¦ÑôË´¤‰Tèg3÷MÜLkŒ‡;ំ¤‹zPÎaîk8$  –œBk:VŠ(¡õœL5}d¤eIŒJ¸Î+RÅ£5Ø ¿fÐ:3§ñfÙ»¬\¾”Ë=Ö{ëyk°]Ì\[_‡ís}±/Ê̼ï†çŒd…Ö‰^;¥2 LÀM‘û^…?>‚ôE•œYÓ·.7³§Î¹Þ¢ µ÷è=Þê[ ýj´õ<áªt$z{‡ÿ }S×EÝ6çzo¢€k¢ü'ÆèoAa íèMoê`zV„ÝõžÕ AJ• ¸ªKI÷ÅÞ0¬î¯á÷öøoo‡KúoÏ ª%”uçD"¾ 4hÀEÃþºÛ ~½¬Õ¥›+ŒÎ*MŒ‚+ÜòÑDåˆâ¿»Évf™sP‚¥ƒÜœ™.Üp}°q»~…@Áéu  —+=fZ(X`#—H+Í-WØ€qîVãä7¥Iˆ{fäWÖi *ȾJ¹&“n›áàq§Íß Ûf ÌcÝ胈ü§³ý¢Ec¨ýS¸Û_fÔGÀrÝ TÖ„¸@t§¾]ŽØÈƒØ F¤$šCk=\Í(g'x“NÏÅ~+ªwÔß>€«¢!æœë;ü X¾Eýüž. Ûn,ã÷lg­Í¬_}ÙCæ ïÙ" ;á8ã e)S!óvÐ\¼æ›tq*ð˜{½}-D„3KºéÐ e6V+·ÏðnD$}í”Hð1¥ƒp—RŸîàœ{Û¹d«cy5Ÿ5­"÷ œ‹¿°‹ÜŽG“AéRÑì <¦cQºÒ×;wÚß–Éͨ佒qÀ¥ghicïW÷Ц:h`ÂVÒ"6 ×®és`_I%ò®¥ ŽSy‡ÿ\ æiŸäžÿBvÓµd©gÀ/cÖƒ/­_-ÓeKBÐvJ¼döfÚà ¶¹ä€?æ‡Òة׷[-ˆìÆoRv3 a6Cã¯"‡@äæÎ&H%ÄAAûvl$lÖ?àc]³ìWC#ãØRÜðZäx—X‘¯¦äCAWf5Æ€êü°éðŽBé€[AA1d—­è¨é·~°„´‚cUñý$Xµ µF…?à ÌyÐ‘ÙØ;Üw¸å¯ÂD<çHvð¬@~Kz§«l¶®ÑѨÕ„ÿ K/¼¬ßy‹J PA+,¸º@šÂ;ü!ý2’ݯµ8 &R%›º¸4m’$½Âºn¶Œn‰ÜZëûwí…1g5ª ¿d˜Ìß N¦ä™^}nv)Ç´Æöó­²iµT>uÙÓneSÔTh™}Î\Cd“Æ> ÛzGâlLŒ;àcßE£÷lîy*aŒ 9éØÊh$Ô]D|J¿üÚÁPâ7¡ù“…íC•M½‰lÞÖuV‘`þ¦NûκÔ](ï$ôõ†þiMŸñͲäYC>¸ÂFö>2#âpµ¾ŠöJȧVA P6-pâ­#dò©ê«4+„ œÜ%üv±ú(…úêã˜ù»¬Yz¬œ‡øŸäR_áO{¶²ýŒ¿š¹#ò rU¾/2ûÍ‚öŽâýÞýäd©—Hj_εà;(²Û®|þ€[;Ò£þU.ià¶Àg•à×™8¶á¶^=Ü[ÞÉìTKûºzL #“D GJ@]yÍ@·ÓÂc‹ùÔ¿¹åSÁT‡”ÂŽE»-–QcQxЀUñÞØ×a7‰}\¬0pXaÑO[Fø-Cümî1ÎèO]N¬É"Öl¨¤Js ‹ùâŒt£xFÁ-þÐE'w݇8¨¼j‹þž%o¥lÙ;ÂOygÚNià¯÷„hcê¾êHˆŽf¶äî,æ §lƒ²¬•Ýüí”N¾M¹F—¡D bªî­.Ž –ÃB»À€„}Ð_¬ýúYpX”å}Zæšèš=Є¿ü¿ÙÞ1ù§¹ õz¿áæå¤f=ï²x½çéwñƒÁ¡œøû™ë²6hÃNá1o „Bs-ôõF> bk4Ú¥ÔŽi,` Ú¥뎤p<ù¥Ÿ2i—†lN PîÛR²pEÂÆÜPo¸ëá„®ÔÕ`Fn O n“…&rGcrã£ÍïpË*$Æ4C&üá¡ãmý˜GÅ¥ó†Æ hÉm²+·³S>íJbˆwU@Ææ5Í ×~4Jq™±ÚÂ,•É›¨ïWÞ|i1m2Õ4ý¡‚þõ€Ãt›znI n4z NË%!¯©ÀxÍ6™¶¦Ûå"Ÿ×åN$äj¼¥7á%Øa]¼Ýôñå;Š`¼=&ÜÅ…)¼JÝOÀ]ò%K Aõ/²?án4Ѝ·Îà„mE…û8ôèk.¯ðG0wí»K\£Ø²#z>àVÏÜuFTðÕ§ ¶"$¡$ýTnUqP"q¦‹/Av4¦Êûîõv9F;jeµ­-Ù±}eÕ3”ðQß)ÿ©¬QjÁ„k¢íõã"ˆ‘ܽH˜‹ åL*ð2‡E¯—ê£Îbh‹¾Z0þ®Â¸éW"ØB»ßÿÅ+tÑ]å–}°­&,^má„ê0•VÚn[ý•vk÷ƒˆ>1 ‚€#eàkÝ[ÝNûÊ:î;…Y. ðès&}yÃ;šÄ56µ#·]z:!][w]¯vé€t}¹´²:t;½¨Š—ËO{-öL gª”—kû†n 'Ð5QJ–µì ´Ø\ЇÒü1J{qk–è3x¢J–h%~2@s šèöØÃ\¤ÎÛG— ˜¥ˆ’¯ÂÌû®ýözP§¬¯+òWží0Lu7àF}N¤ßºƒ ª-´ DOS Òh¹r½ ˜êU4[¤P$x¢@f¡ÙuXÃÕŽkò€kµ“ýM®)þ¥­ÁR¥.+“t5ë@¼úÚÁ-ÕúÜ[ù¾Ç¹Y‚ݶ®>«’zä´h%õÕálŽŒcö±ŠlÀUOa¿Ô‹®åd )r™TeÒ±7-G {I¾¼Þõ/·؆8so øxð'Ûã%«ðéeÇ´H²Dø“Ö&P†ÓÝðÆOøã í±Õ寂«2…±%»H*U%¯Pt ­æ,ã55 ªÑTÈè† …Õ°tW0·9BU{‡kP³VFܺ Áüê—ØÆ_x®BU~eÃDšoiÀ÷ˤ¡z{ÈÖ‘âevõYJHYQüþ£¦S²•ÕGPƒµùÞ+ÿÝ̽¬UÍwu –gVúÔwUfðÜèwž£Z„ÚÞ^ÃÜH™}ö¬ïpÏíÀ9@’äqúÙ¡S¤´ftÌÁ¯GC§ÝvÉ4ˆš•MwÎVöF³ôë¯$šÐ6ß+o™RÄ9Ȭ(p²k—üV‡{=Rm¦®A¢U²$d¼ËêY,F/Èû‚Íãèd1Š#bweÞ$WCª9´2á³ìuiË_ÅØgМÔÄî1òÄóì¬Á ¡rš’ØRƒå©öúÏVé'i*ÛVÛ;ÜÎÛXfŸ¼¼Ÿ ­Šô­â†#‡£F€þSAd$v_±z Öâôçáh‹ÈÌ,jÂÖtªÛ'-¦iú} ó·Y‡^ÂÞ Š[Ú¾n>T8]Á7 ¸»•kJŸ´$¾“­(†´ì„Õ¬îòê[5 GyeE©+N¬ÞûãE¾toSu-gê{piŒ$¡án'ޝ©§Ëwt}BsõºYJýÖžXN€Iv”„|•Æ«ŽBòÛP‘ %Ü”ñà5„,‘’øV7à·ŠF<Œ‡êËÈfë)2¾àõh¸­×¡–*ë |œ‚HÛ€†e—HS[Ûƒ:i›ÚD©#•m33wl-/¶dB=».5Ÿ gB;÷z2Ãy5»ì«ÈüÈ•iq¸¼‰ã› 8¢hŒ—à¦G£M/Ûe‹ÞeF!ªÒœ4D1»žzÝkù:&ï2wC1ôô›pë`‹{Løã¯5¾®Ÿ w‚|OwŸÍîvB7¼<ïd³Óà†"7»ÔҫϪdë')„œø«¹R#Qd DË•§ß^ƒú‡RÓãôbaeÝmz×ËâEÏ´©Téë ¹K´zsWy‡[F\šÞ¯þø‰É}‘§™²%{šÜ Ïé=Þ‚yì,›ÄÖÔ+ðq2­ïp­ ¥9´¾ºçÅÑU4[Cy“GôÁL5c›Ga ºáÝÀú©]°²<ÑZmÒ¤ŠÔè+ •H=‘{Ðg?êRººÎ8ÐŒJ#ãRøÍ ojöýê?£¦RuÕ ž-ÑÿòcRôvrNlï ‘ÉF*“Ü™ÌüŸ^Cp €¬Ò9H ·vÄê`s\:‰“[ÜŸ #Ü[>™Oέ§¯¨6œÐRÜ3}?a” ø4"´ªœÆ'G]”`uëE>¾4_™fâ=ý‹UÏô…ºÊÜl³ †bÞ{º_'<Û¶{‹h Å‚+L:à¾ó7\þêf®ÃÅéEâl'ñ¶åô„÷#Ïr…yk"•D![½ÿ{ê&ê¬7C±ž QüzÂ\ÿÔV¿ ‚c÷˜”ƒ7?Ta5Ó*l˜œ=:ñ~åî²Âg·AÀ|™¿Üü}\%ž¨?RŠiЏw?ïÝ×±*K÷,2d³©I0˜¡Îþ 4]•Œ,$=;ÎÖÌêr™ Œrhf1[À·æZ¿vB;¾ÎÏZ¨m¦ ëÎðÜD €[fåN»e8ONã?ÜREžîéþ3Õþ]ª²å¯^üAdçvó€› ­Oíïð‡ãr©«l›…Ž&’…ÍÕé2™L¨‹XZ_bMë˜]E|PsúLx·Eº¶ÓMJåÓžç×ýè*›¡YÊ ò6þ€C»ÂÀ¼•²†—m=ì›z[Ǫ,߃ø@õN+ÜEO(¯#Ùk«lï4¸ ²y¡;uù}TtëLÉB!S@ ¤´&d7×òHo¯ÖÔW:¶M®¥uЭ{æ_Wp-KC4.v’|ÛoÞ$-Þ¾:ÉvKgfpþP` £áN£Eö€»œ´Yõ&úä[y;›ñ8œ,weÂ(¶Õ«ôVó:ølá(ŸÁ)•Œ9Ê›¼2Ž”–¤uôÊ‚‚ÄÎÆ-ø‘ŽËÇî»âÖŸ«3UXÛII^ _9œ6I˜cãƒYÛÛ%J‰@;–ì'ü!¬êº–Ì-¨š¨ÜéÔQÞÂ^€ÀŒ:]¤aH8çö%Yg7‡0Žx¢1I¨—cØ"è0_ÀÇ&xbp 3­ãÜSBåê HæWÿ?Y"ÖTÛZÝ5¹ýÃÞOÕߢsãBËÕC‰²‚Su,?R ¸{=²»-9¯f66ÖD_WÏ‘Ÿ‚φz‘Û–¶9“òõm3IÑñ9°¨gÂ¥§#®Êøº>–xÐ=€U‚R×T Ö'*‘Œ„¿½Ãµ•+}$¢«+šë3ÓØ(å+Ò à‹ò9MÀû±ÊjÖ|Άhµ–ü®õ(¨kuu>´|L€xœ„ÑA.5ŸxJ,Ø¿>í z** ë8"rü\üÚäëT Gù\ІVÁÔ´zòm‘ôÉëoŸëR’‡bD( GyoÐŽ‹­Ë g (;iIõýêÚ­œm»þ©Ë™äÌÚ·Þi@b·O¢†6úè¢`QN¤Æ{þjgZ˜ÈC‹te%ë€{?×YD¯,¨¡­·£ãV³§õê³ЍSVé~ó¬k^ ´ˆ3ÝPƒß˜ó¿T¼Í‘Kå_'Íòw¤àVý¶ú3«Ô×ns;!ŒÿÇþ‚‡ö+0žrj^aA»¬€¬¦ôæ;c³1EõÉU»¦X@Ñ›Í&ÛP´‚ µ²NáL+¯YX t“ج² Ñ;œÍ±wxnJì…~6ACôzƒüVÜ^|amÒÓ#Bý߉«fÀ50Åù{ßVèUëWé1¸ŽÈþUsbËzŸš=À¯¬ù'-qR ïzª†˜#”»¦Wd%´šöî¤×üª¾Ã·2€ ”üÜÕ¹.Ý¿¯:WÐúÙR4šîÕp‘Òò™?¡I™A¨Á–žP Ó:pªª2aº€k~"c{ów¸?lZ÷‰œ´ôÕ¢ 2\ïHÑ)Ñ'?ÓÈ÷*Á5{(ziÎ/ l¹€æSal€o¥ÿ*clà Œt]M¼%‘«Qäv°%&!p@+â¤O«{͸^Wo ò^Cã‰î•áb@©U2 ÿÛÀŸ.lß5Ãàzzq®YR8á.ô¼ ¡"e¹Î,ô‘WۖпÀ3ÿœ-3Ò€o¿ˆ?!*3[›ð§CgM¶þU(/U¤Àf4,äŒô»Ònf ±Ú|’!zºÄì—šÙ$z¢Õ‹Ûmpé¼úCZ|/™B»ÍÖ胈CP¤È¼³Ó‚¿F<”ŠMøãlÈiu˵v»¥Q¦Fwç ·Äxj–ÖIIò"_È)*ŽTëyÂöÄl+´]ÌZßO¹4–†~UzÃ7Ûï_xâœDaÖi6I…¹ÒDòGOÛÍÅ&+PR¦µðm0Qéô€?ýÿµ¶ì=Wû.ý®f ð×E0à¢@EÍ©jö„?îQ¾ \-¼²;—N÷Ú éA_̤ä³óI€SAÓ*Âämî…uç{­,p¦„p­~Ò¤úÕ®aeYà÷¸pc¿d®¬Î žÂ„úúuz‘eûˆÇH©¯~L[àa ˆ\D¨ž•‡ä "¡[b7äõ '—é[ì¼]à”&ðWž4+¼ô¯f…÷‰¦{xÓýqŠÌ\…Pö®'eHs‡·½ˆEg ôv: =ôÕ24ºc[WÀµQ†T¿¥ÏÍ%þÏÓA©™g@w Àõ3°\?Íø${ù¾ÿ{É)4vóÑÀEŸ™åL®÷´Šv–wø–Ë·;•¯wYÖÁÖr ©a“/~{ˆì•;»é~¨ v o­]¿}ƒq™£vÀ­Š>…¾¸­Ç“Œu±~\á.Œ4‹Sëô E fUé·©A*©'ËZK’U‚ÑoA4ßœý:,‚â3GoŸ¶D:“jæ@Ìør˜¢®Dÿ7¡B›¾ÃEúÉÂúU.¯…õæC±¨Âo“ÛTä*M»Ï>Id#‚Bçebá_ÈrOhKc.Ôݼ²Îá„?X”c×^ôÆ|rÅ’Q(«­\Ó3b|è_Œ¥ÙšÞ¯ÞÙ¿bI¨'§‡Ú™ê׺œ\±«JÎ~b˜†#Ãqz¡æí ›q&pë… T„º»ÞæÄ™~¨óäWÔ£Þ±7x”/MÕØ BÀ½²™dU¿õŸ„š>Çð n °{9@<ùDÙ.çþe˜áaaœë‰kW‹î+é÷hqrÛ;Ø£ó{Ä "¶Î^oØ£ütD|lòp5¸Ú;|üÄ“¥¥þå î“86Òüýn èêóð¬r4Æ?Нý-ôú 8+Kc#¾î7seŸÚoÛ€ <¸˜í´2‰cÒ‘¯fcŒL¿¥ô (ñ÷ž^áÿ2Òõp@N€´•RyÂõl§1õÕÒ ºVØ9>9lìÖ^D;M®g]‚­Þ€÷#³^ª}d}À3r¦ó"\³žÐÓØ¿½‚‘p Ï@JHhë×ÿÒU±¾Àç[Á µ5&îa5œûiäl‡f˜1|êÞ|Xy¨Ñ¡´y<º‚uº.NËÉ[vÚXLþ½HC¤¹åHe¯7ŒŽ“BÕ¸¸ç“ö†\\ºµwíAnKt³ Ÿä‚<©2÷°0V47Є핡µæ Ù:Ñ‚ûMBš[Á½ŸðG¨/#Zâ ª50’:Ýkt]@‘É^¢bкޖéö›]³ˆ—{ ‘~<ÈJ«ÜÁ"CŽ.t£{à†t)s¶ ¸k׃}¨z.+ØÃ]¸A]J¦ÝìA«ô'N‚—î˜EË_…›r§Ë´i -˜h›Ò¸  œ?ãàܽ¹£þ.Â.‰F(Èe¤=[•EŒ-v9JsÒØ+²·Ð¦GY§ÑXØ¢ÿYa¹nÿ¦‹Ú;\zÙïÁ%Ñ-|kü[/*S[¶ˆv³ÁœÅ®ÍN¿h A «‰…SA +h/ÑÓdÂ-!£:”ï}ÛP‹æ“—ý¢g¸ß‹”ÖÆz¸Ú€™§æOþ¬œæ/zKhá)øùäÀGv}d³,—âäú„bøäÕ¥ùª´q/Ÿ²¬Å`ª }1Ž–óôÛß M°©¿åï€ËŸì€܉·øÍ“ÌÿdLFpòUƹcnü Í캀¹íQø€ н¹²B…?t‰Jþ ^C(®# ‘ÎLg°t­E4:ÆDi®Xäš°QÞ²•€¡r]ËËÍ€Cý ï…]Dâ;»·öIÃÉ9Rø²¶Þ&ÕàÅ:§5nçh¿üÕ<|ál9‚WàÆ'T ,àZœ~P³–Á4 &– \K9Üa̪8ǯD¤IÔZ¢K)½I×òW«HìÉë+ü§uÁo=¸u5ÌTÛ3¢J³]%à#‡@Ç*ß/ÂDëˆIXÇɸ֚J¾ã°”«‘C=à"‚†|Ó;ü1ig_²%Üo{BÛ õ ¸:°¯å±UÀ·,¡ÍH%­£X“Üz‰b)£Âú<7§jºU&6=ûzךû®±[ — EÓþ’ðÑA==jY¶W4“¦õ>ræ#Štn}ߺ,H›„…¥S.ô¾ã9ÂFvîRA¯°³ ë†÷zp`^*J²vÂæ(ôxÀXfv6+Z‚ÆØÁ´Ë–Àó€› `#¦9\n¿Ü#"ÇÈ(ÓW°pëÁúTV ¸š"A^6ðRŸ¨0 ~j]à“À³ þsú1zWÀ½¦ƒ\êr¹«ë$V ÚeF»M6úÞÃŒ4ÍX"àî~°k ^ó§¬ïý­@U…SoxGê ÎRå²emŽ=È?e9Y‚µYQyv÷èpÕ$b…žü²¥¥÷âöYöÍð3.È}†ŠÖ\k9t3]½œKØ!#[AËl`ª„ѱ$ÉIa‘Ù„;Âô–ÛëÕ$ñü5]Z‚ƒéþÞ,¿j½¯eÒ‘ûÅ5GIF:Ë-y‡*ÐÝX@LAôÕÊfËN1/ÿ6®_Š2%ó*è„ãÎÙEfIÈ2}1I•ñ6Miƒ­(P9ï\±úÿ0øþ½Nu­k”ð\v`0šSœ¸9bTö<6dYà1à ³ê-±«ÏBs‡F6n ´ݬ¿^ý!)]ýÓ×Ü@Gñ´fÚ3‡VÃRX»-àî Yw0Q ÿY{ÑK?rý‰15‡ÚD¼p‡6Š­¿ÃMÒIªü[žt±ð*A--Hh!Ó(ü¶‚F{¥3Ÿ¢€+r'q¡ËÏÂäÌ‘MÞB⯂ämëIð€[iåpƒÚ\ýÑ穲ÊÂLÀÙA@£B+§›(ê${£¯78sè'ÒîÈ„?|D[ùØú ÆÜ‘Ö!ã•\óÙ°œVq¬9l09@Y¾AÙݪ?éÍŒíѾN€Ð:̬‹Q&±U2è$»³Aüb1=ª5n4ß Ækå0©•-ÒIYdi –Hn#j?Ñ µn_Ê^%´Åm“Ù<ÛÑoµûªË_B*QPgÈh)=ø¶¥Ò¿Š1dpF—/!¨˜¬ò þ·{£'©GÁXj;uæ+!|X|ÍlúË_AˆÒ5º‰„iîÌ~“_=òú¡F^ü¦ÇûaOèVW…‰Ì{>åžÞõ¬ÎˆáÇ‚IT]qÂÝ•ŸI@Õí™nUÀ¸“<4xü˱¶„d鈴ÎNû0¢î ÚiÔ:´„„c…â¬4'p—Ü•†Ñ[ Ç’­~mv!áXØäq _h$Qñ4^ÜÂ]OÎ[¿ä¸×Ó>8¶枟ΣßWV}½vãA§uÿÂÈ]=&Wê‰ÕÜx_ÞB%\©Œa ÛâRÑŒagKyÂUEô4b¬»@./‹Eô¾„7r§¥ªPTDSæ¶srZàÑXÊ VÛ±M5Æ7^ xF6é4(ÞñL³ŽtèS–5½‚6ž0âÊüBFâ ŠPÙ+}?q¨#]ÙÚÒûÕnY>²ìÁrE®wÒhf4ášÒÉ<Ï<êÇ—Ó>ä§Áþ”zÀIÇx£5ƺ«Âº^œ’e¿¸5+2öcžˆ7Cj¹Ê îžhÄ¿‰kí <tÝPÜÏ©IýÍh#W¡7Sæ¯ó¤×µ¬]¾ŽPW¤Lör«+ŽERJ´i·gùɰ¿\ͤº>ààÌ%“*›e*7ÇòKè⎭¹âŽWþê|·G’Lݦní¨ÿz}+_Ô0yÞqÔÿœÐÂÿÍÊýW¡ó¯åv°¬;.(Á·Ýµ‰þ²…í›îÔ# ôPk ¹ÑÒtfÙ­q‚UØB#‰çÍ_}–ìø ©#¤{‚ì0¶2z0Rq¬–)Ü\V ^$¿!©šÖ/¸¯„•×èIf7?'P³žÍ¸×¯¨tjjÿßn€)ûíóP.~2r$ùÛ¢¯5#—åæôãŠRÏlÆ=àîLLµ5ÔÀ¶8›6¹á°ŽÙåîv´~ÚE«XAjHgVÚ;MˆîÝ5¸”û­sxlhÚÄÓ܉M×t†Ûî®'•ÄE|1kX#a:¡ô¡€#i¸ë·w¸ƒàóÉô¯=8dC;ÿFÔC¿àk†Ô)÷w¸Z;yòz¹›,So5¯ä,‰ ¶|„h4Õég³ët_Iz5Xµ(†ê4ðm‘üï_…Ô'ʾ̪¾Ã]NDîòXËmíi× Ï:êÉu¦poõdynZ)?54@Á(Óè*G§EH¬ÿM6HgcB3xØ!³ÙÝßáîÑþù‹Û6äUGœµD¢“è)…™õÔ¨4f{_ƒ+)€4:â™ü·¼J¬(;®e+ïž.ó›¼üUèF¡b\eÐŒJÎ=y‘ü…ë]feœBϲÛ]Õ™ÓR x®ô³û+K y:ôƒ¯Î¸¡5ä#;òtF’¨¡ì¨P9ƒ%¾?/×Ë¡z©(Õ`+jzØJæmãÛÁ”lÕú·’TGEûG–ˆ$xˆhé#c§É„{B›ŠuGºÑ­Þó÷_ýP[äO`¿Ná“L§ @0£²ÆH‹ŸÌ㌃å{²8V3ŒÏÙR·ÞŠ*²•áÔPt°5Vº ¸4çMYÓþÈ`´­ KÕ¢®¦Þ´1óÏt¶ÝÆŸš5š«vKÀ©¾AQÍ*êG²Šù„?ÆcüK¦n Ä_ƒ—ˆ)Sè[,‘Úœ çØ82?}ÙH&mDMµôèû‰ÉVÿ®¡Y‘ êCßéû'Î9!J$õ«Á†ëéM0‰¤€[=ªÐÈHùWŒο0žŽßW¿ÛZHöÖÆáÞÊ‘ßîøX>¾,“ f4?Þé/!4|ЍéWÀ½q¶G4÷¥§Sƒ X5j”Þ|T8ÑúáaÀ„›§“ê‡ýö‚^NèØ„j>™¹c\ÁÔõˆœO´n‰„ãA|¹Õ ÖÆÙê N¥)ÓdæÚP+«ÀUÇR-¯ðG¥¸”U„­†&gÎo.´]tCE^æ%“À‡ªÎ¦n0ØÎ´ØZvÛ˜–쟺”k”/ÞI`¿‹yæ#m_àAvÃä¹ÑsbÂ-ˉh}¹\Ç9Ó4Fdî”÷ð’Ž<÷ÆÇõEà™…Âñi¥8X ŸX.rõ,»ŒŸ˜—¥,H)@-]:˸ÂWî•».Ó¾ÝQ7{ååå·î•õöŸ”|£š›‰œÁ:› ¸ïL6í&[åÓ×O;/á<ñJq˜D@#á"P— ÊÜšiˆìÊ3¢À5ûøÕ¤ veC6ˆÙÙ)ÕB­Œ¹­ÕÐUXð`£õö˜F%ÕJ×åÖcúrøý¤%Ê Ó *JœÍS[Œ‰§÷æ÷¾¤ºÂg*fh`ƒwi[P)hÅ/xˆˆpž¼³CnÂ¥‚3R(Yk F¸X_i3áD µcûÎ)û«.ÃzqŽƒn·S*yÀ½Ié­ÏN7úpî‚ìâéZ ¥Q/'\paÃ*7[o QÀØû{?·†èc§–0FbÉêVCÔ»~M×Ô[Cqs­lO¸&`³ÌåÝo8ð Þó·Â:•©'ÑÓUÖc#¬§®¸36¼¦0Á£K´ùu2H‰­^ŽÀK)#\´Ë«óÇoË[ø2!\Ê™4zÌô*„#ýnåˆgÝÔÊ÷oo‘*¿eÚkòšpúJ'!3ºÏ $±¶c›„L+Ȱ¬2§Ÿ€{;P¡ù•ÍûˆûMt¾e§ü·Ào#ôÛÙÑpGãG#ê§n׎Q±¯O»4#½af-äH3ˆ¯Sf6“-”BQpãMèÕ‘Ý_wàú ´ô.%£¶üÕ‹Ër¢†Œ7ÜAú…nô*.ëMö€wÁMMnkײi´‚Î7wþhéÅ@FÒ­¿Ã­54¥Çºþm'†ú«\o1¯o±Çˆ_lj´Ý¾èg™œÚWw¾itç[úÄ·EÆUãÉ“44àÖNZ¿J¾(ùuÏm QŠ-³ð<à^O„zII_f-G©™ø*S“ øÅTÞo¢T fÂbµîëà›lÒЗÊk\ ø£ð°C½Šñ1² *Ȩȸ2‹ „çavý†Jt-üwbÚ-TR•ij¶à†¢¾®uzšmS‘ (ª ¸h…MºL‚¼^Œ«D%骗<õ_/¥)¶Wm“€·- âg‰.ø W ¢³V¹áUÑàkp·­÷ºµ’Öº`›$ÌçœÝбþD ïu,’˺cdŸ¶ìrW%ó¿¡>‰¤g9‰9à&®özõG‡m¤LuýçZDþG©ÒóVn³^Ð<6V| ¸h¸´ö oå$Uö^üë´—Ûž´®•ÍWÎ Ó•\°×|NA3RΔ.Ц`Œ©à\k:RM[òW4Ú—ˆú¥’éÍ߇:’±¥ë'x¢gÕóÔ×®K MM\ã-ãaGkôA{–˜Ÿ`ÛcèUfÐõweÁ |Á©®ô‡FßÀ(rÜc§ßæÌ' ÉŸ±ùׂ“0pFœ¥ïpÌϧ6Öm¯)ÝW}ÛIa½úGÈéžÍÙµÐlc`×7Ķˆpꆻ+µ: øÖñåOÓ†µ…®¤øæð :¶Û]û'ügÖž¾ùÐívo耧ßPPaw%Õ?13§k[*¬]ïeVs–”Çnûo(‹Ó{œÝ_ ûù³£¡½Øgù‚C–2;ú‰Lœ7à^Ž´¸JR]í'Ú_+ô†ýfá¨vØ6¸ù êË”uÖ¬×;à—&õ~à ú‰tN5à–ä£Kz½úÃ#pd×M–¿ PÜÒê,L íK`ƒó°BׯAPýaç.±âÖ„pg|œãíË;£…‹|=1UËãH«fð,)_”.2Oë€<ŽþÕŒòÐŽ}ö6¿áA³è^˜”WÀ½3!—daÔÚ±Ê$|îæ'¦Ç×Äî:T2ùÍÌÞQw$àÞ ÔW;³®ia)/íÀÃ1YíéS—`²}S+§ËïûÑ…M%øµ2zJ MMdFžs­ïp¯üGU^½Ò@)XªÈUŒ÷Ãb¡ -9”˜›AÂÊèÔWP?X\ÙV2j 2*é4KÅB–²!yiJ ¸5¤+Ùh+T-+(edUzõ„ì¦ÓŠ=A…í~’†þr)²¸€´`©>Ï5Ñ÷>+§ IkgcA|Ù!〖u’·…Z&re÷Â:ß-H®-! ·Dï1Nh‡þR,Û,!±×N8æ#Ú–•]ÙB-3û sš†}•¶×'+òªE 5,º¿ÿ´*gè<ª Ï÷ëÆ{±Íkæn™éšµÌëŒDŒqZ Άý½Ó<%ø§ ˆA^”>àÉÝ@ÝES~õY/9ùs–¯!‹úšš“ªüëwZr¨/þ¯Êëõa×λ€5†æÀIª%ù;Üéé̶/Q?¯:£ä|löó_&^Vxøöd°˜= oª%Ò²B{¤óÈ`·Ñª×„[f-LÝ ,¦Ô™ºT Bfa¾~s+û/T£7MSL®¤fò)ÝÓBš11jv J¤:’Pdë-(ðx§c¿Õö5Æ Ûq¸*¨ŽM¥¿Â ‘ö•]‡£g`ŒÄsû`+Ц£³{¬D]ÒãÉ”’LÓP¿}N¶m³ò5—Ñ‚nØ€±¥QõÉtÃÇw~‡äl>¹ýpý‰bl GåÙ ¦q¸¢²¢Jéê»þ^‘ÙòWÑßë¨:ÅL9ZÐ ~™6²EôÐiDBqšÙ|eÀÕPuw—Š-ðÌ@[åÍ ïµ3Éî~+0‚#v«*ö€[3¤_ÇZowT3ðÊHþ ëúimù«ÛòYOwú~‚,ì`ýPϼ€CO6—šÙO¼ÝTNThLô‹)Óƒ/X±&úzçüøŽJ¾Ë6›}òzõ *ƒG—œ5'{Pù¨Àf™ÇÈ@©3cò~“?¾s ñˆ÷«?HoÞV•†Œ=E\"g{pÆŽ¦Þ¨L]Ï÷¤Ðg¦jê/|_ä–AÛXeñjÀ·é×&VgêšXõpD~&ÜM%àœ ÜC§QÁOQ4Û rá}¢6É=¬ÁmÓ ë°ÜÁÕ¬šÖ¹_ÌaTØú …‚“—jý.(ÂuÚí-@ ̌Ůýæ¹5tB ;äÂÛÛŽ(«ãü›‡,ðPAËèɳä`êÇîðŸø€•^“Úíac]@ëM©IóÔvÀÍc•LbðKPf¬à>Mg/8dpC£G 30zÄ;¬Yh±/ñÊ~»7³’PXcÕÝ,.D¥ØV”p-@iÊw:~?á?™¢íS–}èö9N€Ž#ôKÓ,BÒ’è=n˜× ýjÁô›Pf€ï$ÊŽë WšTö›7êCÙ™=\Àsé<—~î[3åÖÜ׉§¹¯`¥ÂÂûÐ@¬¬†Õƒ]î2ëIÜpsíœþÚ·Z…Wàü©ºüÕÝZE–¾J—oÔ}•.ß¹¡Öƒ8f øâOúŽjÿgɲ4Nx`(T»"à˜‚ã.Ì­8ˆö¶ÒìúÍ“£“©ÓïÑbît÷¥Ò~Â59²‘g ÿ)¥œ¼~ú’i—ÏIYN^$<'ø/™! 2€})Y˜ü‚[õŸt†ùÜëÉèq¾(˜ä«þ9„–äNùO‘‰°Ü€7ø#ÓТŸå·= ™{«0ö€›µÛ~ &û’ç„1³4oÅtÔî–Q•œîI¾ãØŽÏ£Èg}?oÓD&*þò¨™þÉ„?ÄËK^¥ôz¸?Û«nµ¦+m¿°,;LpÐz9P'Èé·ƒä ¿ç›QÉ/³sÜÃzrb©ö_½Ë“ ýÔ¿{\ÝC­MÁPç뀋0_™~óäGŒ‰·ÌŠ‹î‹FPiMµ„W¨z§¹r¹…ÛYHrŒˆÅ²UÎxÀÇJ>I‰Ý¬­"½Üz±,Ë ®ØÎ/àÏFïùîù(Zviì"S×'Ù+k Ñ<´D)±€agz—·ŠäS ›ú™ðŸ{åeиLôÐSaZâ8æ ê"5»~lYÊ“+ö4ýº»6´d~ -vdÙÇœ !ª)¯ã·ýÖió¤O»é難¼@/GqOëm‰ZÈÆƒÊwZà |.~J¥íí6g@SsüÛœ'´ÛámÃë÷|”¬ZéâÚñ ÇfÔMݪã,ð˜¸äêIË•í&ƒŸ¬Œ_]óWyË"ji§ ÉÛr9#‹'æ¡pAó¾|1àÛð…µW7´þEøë=v.@øskôoï'0ƒ“(™á¦)°ñ¯e½™ð‹;ù´Ý$•Ã/º2õÓ‡íûæcŒèÌ÷Æb£¾µ„kò¥È195Xt$QÑ„YÊÁvžE'ÁiDJ)Ìv8à#Í91µ‘këiËÖžÖ•/“èÌEê°õ½Ú@ÔH¨õwngòû7üÐ9±å&K¬~•Çg© ”ÃDHžÃ]ŽÔÒ›^mV[à1gצ7zõ`E‘®XXwo~b¬ÅNˆÇ’‚{˜Rœ”ÊÞO¬2@ {5mà%Uú”hI òÙ+ÃXí¿( l¶Zâ¯sá6‚»ë;Ü»¥b—hÂ_9Æ ¤!uwöèfÏ´7ú€Coð¿‘k$ýõˆF›]cïgÂUýd³»Æêí¯ñ΀ÏÓ>e$ÞB{ŽE Z…©7¶¿…yt·“àÚЗSJR¾{} )$ˆðy#óõ’ÔØoqnÐçLFxc7\’€Û}ó?á¡ÕÒå£Ë_̓ØŠt”-¿ ??ºÞOZIJÜö‹_ÃI!Ñ—õ#õ’ßáòhåÞÊgÝÞážÛ‰bŠé¥×²_A‰D5Üä•>ù½¾“ D.­€´,k‰Ñ:ЧÙÎÜ=à^ÓQ‰±j_„B<CƒÚ•-¬0|®G¶š—žÈ÷oN£¡Q&¢ây÷†>v›ž^áÜéGRè&0“ò¤Ó|_dvÏD~]š¿£ìá(~9€ª¢të™p먂üHMþ÷„ÿü‚]|\õ¶»jbSxZ;ª ‹Ó·¸Û]G´`K‘BfqîÒDîX‰^$Ê8õl€µ—VWø,Ð ]¼­çäÞ p#²NénòËìÒ½éË_µˆPF#ÜÛ©ûh2»VÙºÌȬ®dhê`Ó”—SJc³ƒ¶?Ær½uß!……¨úBY§ñ[pYPg3V=øÏRíXË‹b¸¤¿\VÄŒ£)„Æxf>9ˆKY¬,ŸàmµÝÐpNcAbXm7$¬ï…¾Þ­x˜ç´ÔƒÇ_M–ª:½•™K)2vy³¿oåf&î†Û­Âj;Cñ£ÌvýÐ@ì KRI,˜ )Ê#•éBü¡ßpu•—×Rm@¥«ÒCcÂCþ¹!7é¯ðGL}UæÖ{ Aıc½áî í8¾f{…? /nÀ²ï†ž"ªzm ¦p¨Éi©Ë+ü±ä®¡ïe[°`ñƒýÖ1ó×–Îî-N'Q3ù/5ESô̱Ûôø¤,b5¯†µC« ä %³µzŠˆ=±%À=à®gS§5é'/§I(% 虊túâfF¼“+ûµq¿ùøòÙ‹=ÏÖÄôßRÉ!öø®‚†kN¯ðŸF6ÚëGêòW‘v¹,ÊŽ™à#AñBï1ÌÏŽÈ¥ûJ3 g§±Ã ‘¼RØÍß ] Æý4UÛÁ´H &­‚™k´è<©°bHo¹Ðzðͤs ”IðçÜš}C“ + ‰µ&ì"s{T Éžš²e®ìÈAå%¢Ÿ4ÓìPEÖ¬ƒfZÀÀ¡Uš´¡âI•ò÷¢gbëcwMë‹»¹i qÞœí®îùHè×Kî ­OR¸”ÔK׋ýöÐ,HîœóüaV åcËSBe5‰2¥OhŸ¶û÷#M?¾”¼C>R~\la…z¦¥éP‰D ›´ÌÖÏ­é'b@c³« Ã}ÀCæ±#íqroR²2Í‚{kÈX¬½Ãí®Ô'<à9…Ëd}B•wç_ö·`¿:w3ëô …"xÀb´-\ "ÇÝdÛãÞ'Ü’,™’B§ÑE½ÐuÂ¥f;ÚD-}ÕCæ1÷¤ô‡ÌcAÄ-UvÀOø!óª×R>²$˜“{kä¬ÒM4àõȃ{äeý+u ê.j‰kW¶»Nøáùó«ä±½®¿ýî‚*C¦l 7 ¢ö,'ûWf”àt,4Ñ:æí~*,Öé¦_·%o¯ý«üPc‚‡ncõ%Cô|š\‡f9ò Ë¹¦¯&¬ÐÁGpy§ÑõsoHŒŽ–ÙÂŒ<ƒì8&é8|»Ê~¡ÉÇŸðŸß¹µæ-«,XÏY Þ«ý·p)à'&Ú ÒtÏl# n´$ l"´…9á ÙÉF{\m'‘Çé³èo¿š“©üS)(Щ t¶K©w‰D' ù)×ü?äµø}õ”hÍ`rUA{ÃJg;Á¤‹g¤ÜDÂv÷3¥´Æó «E^á?·›Â-¦2¿õ‹Äªl¬ð†«"m«Di m·à‹:ë’6ôpü¨/¯!L8åB¿´Iù„æ£W³\—UÖoOQöƒÔ›‘À:¯­™G›Óšu¿~¶¹‡T¨¡ò_¥GË„¿½¬h&>µÂŽ¿ ßVèžÞÛ;þýÌ_OøCy°×e 9îàš6å•¿†ðÜCf;f˜îÖT¬¼^ý‘C¸¬-Á|«–"b^%7\ëÑÑr5¶Ö2jžÜ]c–/’ƒ¢ûOÓàáYZí pxIå¤ÒÕMê2 >às¿À‡Fg7ʪGÊ×A¸ H/ô„f@%ÑG÷2 Õò;|«þúç½³å„?R¹”Ç^þ*ØÍ€¾'-Ñ}{=šNóÞ>¹/ð¨ã€!š¼3±Àó™YH¾l°¿>®¨Ð€±Â̦£o8”ßwMïðG­ýà5ƒ#Õ·/øbÈö±q/†gGG““DvTrG¬ŠæÇ-=฻OÚsêëo“ôÖ_á×™wÿ,Ûãä-kEvx)³õ3y˹¤#¨’[[IU9ÔP;  ‰²:AÞ2RsLÕé‹ 5Gâù—3³·ßOøR>\à3mHT4œîo¡†ZúÕWøÏ¦Œåãë74ȹWS¦ ~q¥O»Ç1ƒzíô„¾¥QQ,ÈÌ;o¸s†Ç¤[ûrÈIE3¿ð˜ŽF°L7Q‰Fg?™~o±¯‘é¬q=!4œÓ»:òÞø^$öÛgn/HA¤Ñ`DZÍ×OYDýÆ_…€£"+3ºÊ&Üv®]³ÅœÙOœ<Gh¦ ðG¦ð%l<þj†]a ÄöÊ50@42búëA–o’,3±Æ?•PO1"p{ÃÝ–I¿F¬–ÊBölvij›×àÌ:›2G¹nïz{×jS],|’隈aŒÞ|¨Õ"žîôæCìSi¯ðg¢!ku*AØ‘äVz‹"!KÄdÀ=êNzˆ#6ùäõý!B]ñï›kñöàZèë­4¹¤ óÜ„ÁÛÇ‹¿wÐä¥uÛ|fÁ¶2‘.É¡fÊì+$‡ž¨¢À“.µ…Cc¤Gˆú¿9hÖƒ›ñÁ £ŽeúÉKŠw›†#½W:öpG Vž½Þ€÷#í–±ÈóWì:é«©*kò曾ê†6}¶©„Ȫƒ2(§ ÝðÒ¤Øy¥ÐÌjü¹äöÞèWìWö;OŒönâbåëT –jnÛ õ·’Ž| [Ç¢/ð¹o:ÒhÖI¸ªÒç<· tùQ®õˆå žeíOíö«Ì’àÆÊÔ7¼wÔa-æ ÿyt_E¤¾œ~AFRŸ{-Õ<#SItsöD«Üù­”+Z™©ÙuÈm€ÑänÙnãÈÜ[=¹y•ôŲËÁ‘mД£²Ú£-,ÿ 4ú¾sžÚלwp¨µîåàæŸç^Ó;\üh<æ×µC¬}Ã`¦‚é´k›mvõ^±`²5ÓÄ÷¦–‚¬=)ÿ‚#i‰ï8ÓûÕ%wðâJé¯ðŸqeõºjLUé+ý?£ « DZ¯2ÞrÀýÌHZLÒ:W›ƒÛÚEèÆ¢«çØaNŠÙ— oY´žrf ˆb&§„–Pn(]äe‘¶ ¬#ÖX+ -lDÁ.hJ£ýÀìášÀweÅ_o¢²7ÜŠȾ_úU0lAþ£ ²‹ßðñi”“GDï²Î¤äàñf°õ(êÍ-¤¼€¤ºñnh¨·³mwäH¶ð-Zí41Z¡ŸÍlµw9"ÃY«‹Ï±ÌÀiĘ Yuᆰ֌&Y¡ÜeÑK“¶ß•Pgîl˜(oå|Gâ—?e‰ƒƒ¡›ÑÄlˬ–×£àFŽ”iyßpõ#5—Ú>²”2‚ù‹dæ´&ÄßÌ_=‘§‘Q|õàCi·wž32iÀU„¥9A nà1-ý‚g–†‚Rx¦Ÿ¼PY{ DwÐ%¢JSÏ­Ò´&y‡_¾» ðÖ÷«?ÀÕVYˆ„ä” õý‚gµ¦™!¯4 -bCm¸L{}}«^Ú1A‡!ÛÃÐJÇÞñwùIˆïúå¯î^hÚÐI›€[>iýì_'mdRóN&xù«¹%`qv5!Ø=FÑÊ+\žðŸt¥|IÖIðŽ;;Ëžè=Zœe'=Ó_—"ÆB žÉÑeüÆP*“ƒ 8ÒâzªlåÚŸ¹_qPW¯lÒF‚Ó[ µŒ¤¼Ãs4­—ÄOøÏôÉò—j¢LN¯NïXN¿à¹ hkyc© 2†ÒZ¤ kEÌìDw‚˜¾°£¾TÖú)s4ù«— 8‰‰eI·zâ9¥kkùs R6ŽRRÇtžÛËa/5' èÄIa“P×H×Á‡šwý£ß´¤uG 3šK…%‚É*Èfh+àgö-#‹íiÕö•|‹‹‚L®¶‘äãJ'’ÝE«®ÃOÓä?ÉHнú~‚™­GÃÕ­—uH]r0"‘‰¢%¶ N8ÒM»ä°…Ýüv²¡7û~B·?ð_Ùío |Ž` ˜Ž6µôߺTþý«Phî0+¬l« jµë~¤¢ì5H„Sv”—¿.: Ìl$Î+tz)àR ê²~WÀG •ÓÓ¼ï <FMk5@$†7@s_ë8ŠçYrzó»Ýõ—ö²Ž·LµÝiÑïAÀ5ýÍJ¡Ÿ¶ýߘ##!Xw×P~£ûŸ]›Âýû.„lyá?»2yáZýhÈÅò" 0³íÿ$£ù;¡™Â-Ý $Ê]i.ûœ´ç¯P?Ä“»ÓïqFc X˜$k„ÄrRÌíD<Âd­´ºÞ_6Úói S¦xpC³–ÆìTþó»Ùâ,.2Ð9Zuú B:*¬&ƃ¸e?Ò½É×·²ìAGÓ&B5ï%šw‹å¯æº®N4×w¸e@pæè{Ã¥ëgÒ2òãÕhÇ/µgVfÐ í áA£§²F•üèdÍH¬Öe2‹PÚQjãôßÊ3ì-ZxÛ!òSËl¿°ˆ[Ð@š1ã i`ÒXãÀ½°™; rtm¢Ü*ÛCY8±µ±\ÚëÕ'üxy늵Gg”‡€# »‹6þ󀷓NØ/¿X—Ña™êd %‰1Z®PKM”~Á[¡«z9Ý/û¹Ý¬P)‹ÏC'ØA36ÓflÀs)€µS³ÿ ÿÉ^rçe} ³«f†jôèŸhˬ93m6ƇšQѕߎ+R´6=áO7ʼ Jp•câgÄ™ƒ–±8=ŸDœ~{ýÔ2ý%“?”A uGÅnÔÎK‚yŒj”F§½n’OÿªZWõW Õ_`ø| [Ò›ŸUéG#çù2òYá³G†æ}µ*ýí1r¡'íù«#¾2ÎÅÃQL¬kªììžð­“ÆŸWB« ¾Û/ZöòU³ ebïèÐ`³´Ò–yƒîiÁU® æ0~bz¿ºÕ£Pï#¶Z¦ñd’˜sªH’Fvn Ö• Î` ÙŒÖ[JŒªO•Q{nr¤†ú»â¾h¡È¤'{ëÈᆖÓBÜüÏÒqf}eÁ“žœ;Hµ­ÒRÈ„{Ï' /Ó¥­ÍÍ22(Ò©ü·Ï(Xß\”;zóW)¸ÜübE /´²PÚI•"èÉÚú?-¬¨Õ‚_£R¼å* 9ÓÄw2‡¥5¤ØšüníHÁªöËWiyt5j@^ƒÏ\3hû¿<ùú-Â>ÁVÛ€Þ¢F¿¡ÕRÐçq±úzõ‡Ó°·UÑ]&íY ˜Þp:$Õy?Fz®ïp5D?*4îÕß’O\–-[þjç lšÒFZ4k$Ób­€vèKt_·Ý vy¬?qî‚’ }çô"³'ζàV²2Ú4­ý%ºW¦¨ðKæ—üÕÍ­5Fkô0šôdEé¢ ­ü´(Ý µÍì;ŸpWe‹©ÝÊZ Œ.ôÄ A^Õ#ñò±+¥ÏÂ-¸éÉ4Þ{§OhVU¬LÁ\ÍwÛn]¯¡Ùá»Ï±}ý«¨î¢ã:1Ÿp™$æÜ@úôÒ¨i!™ ’7Ê 5èà<š+š¾"›B]ûœQ¨îÔ¾OúÝÁ%»Fƒ¹ ZË‘ kmë¦ô¿è(Š(¬¨êÇ; È?Ÿ6-©Ns΀{˜él\ÀÑ_G˜ÁN¿à@[»¶w‡ðóÝô{t†ô¤˜=r<ÑÏúâæÎU¡Õ›ª ¸µŽ&Ê˜ŠÆ„?º©”µ]Ýï0 ”^R¦Wˆ¸ƒ$KéÔ›l)Ô¿Šç²hjJP¨‘­™P5{¹5Ñv¥Í¯€w;¡–Šå¶ò¿õVkFq ¸gip  pDó/×äÿvQ¿VÄYrþLŸgìxiQÜ5Åè’C £Äã ¨¿VJeðM eu¯2Ài¬Ìÿ5àШØ%À±*yËò ÿc–K;ia9hŠð;û*±÷ç-k\SF€s\;›ãÒîŒ(΢²»÷ÂN“©év•nÊ!Má×>R1ÐBi¥¾_ÝA¥÷áxž¿,A4‡U* uÖÿÑ[׸Ó×0‹2*ÎDx8¯\[?IŬçü©ëƒðØ/À°2õÔI’½d‰÷Í:ªèpÓ„4KN®îý,›¹=–‚»†úq*ôg÷ùeŒoHÞá.别2>¼5¢×I’ÍPÙ±0}' ]cÄÿNI·ÿmà GÙ>º€·#iz©ë:§r·›;*:³c&¸»&:M:}tmRà!œèIìYІ{Èò o]—Áž ¥™qÈîýlŽø:h–R †(3*WjeydÀ]ó¿t'Êü«ôT?µ/.pïÆWÃë*,¡¾Jtœäµ}¥k—²ÿ:y‡ûNýaù«8xCŽpto×H!:2¾æïç–Fº…¬ 1+ócëW—ÂÜéuHSIÖ¸y‡KÔ*”wøÏñ¥}®<›ù…Œå§ @vz.I÷‡çø RE ¸5˜Åvy…?*‰ÙVQs½U•A1{lûì´èi=·­ØÙîUÎZ(ÉÚ2Y4KFP?¸2 ©ZýI£L• Žfº~îÚãëZ…Ïæ@Þøl èSù­€o G¿^Òn~²kçkÊb±ÑàÎ"Áð0¥DW/Q¥W˜¢¡ÄUiõoÂósM²*櫇òÊq6TpMhKkÌha‚á¥Ú’\Ã6ÁÖþ ×äz¦÷T<¤éÑí›ø-ç<^C_¦rMƒ!2e­¨éÖsYJ'$L ø†wàÕ«™ ïjh7lÐÖØ¹2ÁÈÐZöw¸ñÒØ­ úÐ#ÃaqÇ„k7°H©ÆJÀ½§“°Å}„¾²~3ÅCáŸ'&N0å­.`³•v—³ÁòšËˆ;–ó§ÄþvËt‡ -b=¹û­½Þ%ìfÀ’΀®]ÑlÌ xIGz=_zýKÔ$â’€€¶eúцbÜœ…þö]æù˾5 çˆò¥ó nnª1ÍÑ;b'\;í[„Ʊ c¾…£¸"¯©NûÛ[c—ñÛkÔ{¼Ü#µµ¸+ ¼r®–nÅW8W¿þjv«5!F1ãíÜû™ÎUk_œÞÉØ½8½¨ˆÄ$n½Ð¿ŠpvBæ†Ã¨8]úL>÷J¡Š)M²&§7Ä6,’<¶›WÞþUb¿ôG×¹K .Рy/íŒN¸åŠtâØÕ„?Dºúw:d_dÆ 5´ˆ#MkÐmS¿$Ñ=í†;b3±ç ÿY­±ËÄz9ZZ(Mu Ó㾬РFô.Þ2j»–‘YóOZ*~ÁüÍ@°hì•ìü ea=b.–4¶º¾~*3jj`×Ï­Ò·VWŽhæÚʶæ–åû-Æx¥AýP£/øs*ín2¤‚¡‹ÜðThqxÂU …´ö?á% Ûõ&eí™ú ;¬£Ê)‹Àn‘cEÂzTFÿ*(hàè×Nó§ w¤ßíœÁÖwÛMñ¬Ÿ¾œ =h/È‘çQZûz‹Á¤M €ã7dË´·’üQ[?jmÂOÆkª`v+󀇎æ8Ìt`~(ýW¯æJZ¿óPnÞÅ"äIrͤÇÕ`©:h‘¹³îâ¡ø/W¤¼ÙË\2xò¼ª?á? <èÓmù«¨Ð€¡S×ÚÙEÂî eYMë;\Ô‡Æ{''iÀíÌ/ý—‰êgýí³ÀÓ…â¼pklGž]àsñk‘MuÇÿrB´¾ÌNû€o?•?W¯åõê?:G>ó±¶üUhT‚{ÜÒWðñ í³Ù©?à*'zØÙjM«§”Ý[PÉg`ô€g¨²']þ*J½À¸j䤖nAÄð¡*#±[ƒ÷ȹ\󜋀°MŽlJ ‡¯Æäà,8²hä5+›h8´˜1Ú&šðG¯äU Å&Å6÷>Á̹€[Ùì>†‚{_9»åq)Ós"ß2Ý@O>5‡»¦#-;kº†Szírƒx+ž\ŽíêÎû²üòÍÀI¨FOWF,~”œÓÓò^ÙQòÚ· î"Ï<Ù=ºÜQJ[’¼ÃJ.¾j|Y¨àšŸÔHÆ·¯]P‚çf Ø6¦m7Ŷ&`§Ûㄟª~˜¶OY>ÁÇu Þ5V;Ûåf¡¤CÂ÷ÍGÛË‹1-äW9»6f5p÷£Žøåy¼l=Äû„<™ÛMÀQEééO0°õ«»UÛ -þÆ®Æ×å¤òËÇö³ŒOfí%ø€†×¾¸€£ö µŸ˜ðŸáy+²jeXÈÅ"†n¦-L ö+²‘JÕ8%«çÙ«Œe7yöèÛ,Þ¿Ftm’g%gd”ʆÈ>þè„Ç·öµ#Nîm*À/=gVÕ¸d@nŽ"ºù½ÿdOŸ´„-zûàÖHogÈzyÁ¢Pag¯ÞþlGÊö—œŽ,Ë/øÁˆ·ZîÊ®J*—Œq`žÍÀâïüý”mXÙëÚy0ÌÆPÜ®ìd z±=à_ãL_¹ú´ ¹Ê4ø/¨³ÃZFÌ_3ê/ßfÐbú:а×k˜#g![ÐbµœÌ¨K³þŒ-¶%`XA#¾øóTÞáî@ÜÆ{ÕWøÏ ÿÕöå`š¬Úö'TÜe{‡ùK/©;…‡+-" 4Æš ¸;q²¢Ÿ¼ì\!6›A½Cœ †ÜAMógµE®P}YÖË©Й…éVÊdk*ý6gžÑí„ôé¹¶¯xóæË‚€„KËÜ[;éšü^—ë£ ºmV$g­lW˜p”êîk?á Ã’?m‰z‚Ók t$œ !›‡"$g6fjAÊm€å…µÁªM‰s0×¹€«2ñ!›ôÕgc(îÑhÝÕÃß0§ÙœC9M­™Ð‚EÐb‹œœ,µª¬—š°P+ÝXëÙ‚rÚ:rL¦¯7Ø ¢ˆoN7¾Iç̨J Ê4‘î~ĸÉ”¥µPª¬ªàÑuÆ6´ž ƪÌÅoò78jÙè7_¶ÝÌäþÑ%î2i‡FL4£ :'ðí½è¶õÌ´jz‡v ó8þ>uÉ…Bú5ßž ½QÆ,GÙbÎõcKHʱª8©Ò<½YþL}A¥­\“~;¾`4__i´tÎÄ–¹ ü¬þ_ûmttÓ©4¼…š¨ƒšÌø¶XxÑoËú¶:ö¡¥âÐo÷J@gΉ¾Ÿ(’q©lÂ#à$Ô~nPWø·&Ä=„Ç€d®”^uk™úÉ">,¡U¨‰*p•õÂ] b¨õ(­‘9²ùIàò×ý¢m9²a+QþâzP/Â$K:<È‘ v6 ©sø˜2S2ß‘#Ç#J9/ú‰žîøÌYSä€[mÈ…† #LøÃ%¨Ù:9â¡* ”t„É'x 0$d,ŒüpOGÞ³íRgZ¢{™Qu¨"[ØÍÏ­'Ù@®+7áù±Ã,òq“XqM¡F0k§\<ÿKÑxÂ÷˜ú÷=FñUn¬Ðç8·±ŠëFýÄ0ë¬'5ÍÒÒ—½»}´€††¸Ð$¼¸JŸŒ.€{Ž÷¤ôâ—À óÉÿ´ìh2ŽÍ²úM E¹ßN|ëw;*‰ZÕ²r<ßòJˆ{D7¨à•¦~’ÿH³öé}ÏrðN ÿÏÖC]Çæ‚¸ý‰}´yë"h&þYŸÐ¤q<§±£êK7¨ wT”t:cî[òê8Mô“uù+åvílJÁ'ût»Êþüvú æ0#êšÛ…õþè¸vùZe9¼ŒþèØ´é=Î=¸5dIÓÛ;\yM×Dßb0UÐJbäâ©üt¥Êo=Ï‹`[GÀ»Š”xŽÙ[ 2§‘|üŽEFÆ&œ>ÎP™¦Ê¼7 €øX¦«ˆŒ‡l-R—ÔI·y.ˆë¯Þê®—øöˆ¿Ä¡gÉäR« öÈü1¦¶ÏÅ2Ø/ëDýnxÒyã§×wxv¼â®žÆÉU. :(²Éœ€[©ˆÍÌÍæO¾>Zp(7FÛò`ô ûJ^Ò;ÜôH‘ì×¥‡±øcx0z“ ã™ÄV\Pr;š.þèb³BÒU­&üY”L+1tÚ$cÝ%^ 8Nr&›á;âÈËÚ–ò îVdHM…}}RgáàâKr­1²Ó÷]­B•©ü&¯¦ƒ/i*yå†ùMK¼R&½pW4ÓÑ:« è®U>^ƒ®E/î«€¬N…õ•îÒŽB_sYiP®ÏâîÛëÍjäH­´v2á–öýÄK¨¿^ýQM¾öxp_!½÷å'6Ô¾ÁçòË z¾-é<àí¨®§|à'ü±EäôØ=Ã<¨Yõ/àêõˆ¬­—õœ°ümˆ£ZY]b2d¥²ùQŸTÔÔÁè ;óÈ›c!ÿE¦¹9Çiìj1ÎñÜiuK¢Ñhc³Íþ(Âj_Œ<˜¬ Z´Ðóf²ú²B¾œÊF;0wéGþ =÷uÁ Œ*è`fc¶È—’‘–Sù ¸å{”éWMøƒg£¾‚zK¥€´Ai•Û?í2)|«·:îÑÖ)m÷è8!1R^JÁÔŠm›¼Ã_&Égjw=Gpæfëp–'ŽëØÖ>ëÕ£WŽ ]FË-“"›KF’¿l$+à.~ÔÊíb+fFdÿ]%v–²-b’_GîçˆíÁÖx_EÀ/„ øXŠ'¿}'¶6’=¤P ”e,Æ€àî&~ÂËïú´—Mt’T·µÖ‰²`.SAYäÑ«¨ßTp\üt§ +ê˜Ùù23“€[f÷©ÍxýD@Åë´pLX½Ø’hÍ­îzÚïeõ;òP&Íéí5\M­Y×d¯1ke¶cIø¸«„¾õÞT“²pj«xÚºæ,!_½uËÐÎ?‚ á5élpØCMt'¬ýç¶ç-àq\¡´XdДmô7-©‰îª‡¸w __¨¤ì„ÿì*ÛØQÛúÿTamg¹õ€»Ô#eìœüë,«!ÎÞ^»Ê¿]Ū}µ'¯U Ÿ{§ýüàµÓ¸ëÓöw¸Õ#×·ZJ[Ý ü#­ì#˜ÌRCªBÞ(w#˜¥Mq5Zàia-G»W!ô)`à/?©ò„#o¸K³—-å¶+ Œþšð`â‘•éWàbGÔ?Ô¥ú$×,H+±ã Å(ŸAåy…?”Ús^•Úgçò»D}8æapÃ(†oâŸðÿ§ê§®÷83£„Œ®œVÜCM´!ŸFÞé‘´ÐÔ&x¼ÈŒ+çÆžc¿}²á¯°é2ßòxéï(sù+‰Î’¡® ÛU&üK4RðôÅrÁTGŠ EÙZì·0ˆ[œùa¼€®ÚS­e,“%0 "nSú¥Ež#FúÕÞáæí¤Y®Ñùµ×£'hr#5aûÅ„{F¦ …&i}gùígaQÛó`å&`‡õ!OøV™tó º¶O_6äPm‰æ‚…ÙAã>Ó*{ föˆZJz‡Ÿ_FB²Ž¯ !1@Þšb<àdzA)l #niRðèÔ;-àžJzÿ6/÷å²j°MÊüå5F×eh‹:ÓâšÖÌ#„Žn.ïpçíƒ|(ºòJð+éÞH¡¯÷vhCß?¡¹w$dØ×h­[íä^ê§,p8Ûk¢|¤tl Ÿ,Ìq²Ý*È–DV2Q,ÆQÆ&ʼ¦&ügƒý·#öòELF'®neÖ¼.Aõ@i愀ˮü'|”÷«?Ëäi“-“Oš‘Û“[¦÷8w•V,_/cçµøbÎ+ØZY3*àæ†Ìv™‰bÙÒQ]äÎeâ½U2ýè#º¹${‡K¤ŸÊWÃvHDû8¿–=ÜnM4PGÍŒ³WnÒj§b1©¿Å’¿%²µ•õSB µ ˜¿uzÜr¦½ çÈ>çPÝ <¬X*6:áp/G.ˆÞÝÖŽ×ô\G4ªõFŠ,íc®2¹ú;ÜcY”༒åSZ¦p¤§øýbÞ ä[JÙž­‚j^¢¹˜Ç( Pñ0:a9á?Û6jeµ žÚ,ãhô—̱®†,L:ÿ%=J{약S‘Tb¦•˜P@-p²ÖXÊÚÊ øai¯ÔËfeÉоT´¨ìuÀ­ïwýŸù¢xÿ*u½³VT4`N÷E&c¼h0áŠÚÞ3ýlB¥dêFÇhîRû¿Ô„ÊæèÏRåË¡5¿šðüvY_Ñ'/ù|¹¹¨èMCúP@­ûýüç×q Úzõ(F¼Û©æßÑ]Þt Ô 8{Éig*à)œ ë+ü`Âÿ÷ÿg—úØRN Ú¨T@þå7ª©"{*Ì!©sÈ€?'üïœI3Ü‘IÅüþPÜ¿TŠ–DrB5:%¦ÕÚô™u{À·¹òòW¡R¤H§Aô®EN–߯«ÕúYŸPL±uT‰¤¹c©qCãÊ•Ujx06ä‘å~h*0"N[‰/¥Þ9ñêLµ„þªT¤ÎK#¨p§?Ú;ò%ñ¼:•”`Š*˜Û‘ÎÔÊm[ÏÆ8KB3p›–ʘ_sSý/äìÚ¡FØt\ÀŒÿÔAÍ?²ì\·‘zßÓs§Ëo©¬p© ·/©Ù½4SÙ;íDO¸¡¬Ÿtî‹`¼v=¼Þõ+´›xZ«^“Ô˜KGî±Ì§«©)ÁŒÇ®Ð6mp46§Wøƒ4×Ó§¯O(æÌ-†£Ï–IjT(gbÌÌ(à‡vB.½¬ž8%4HLÝi¥5Ñ~»‰C*m_BD4±ä­­©{ñ¸74€ÞY‰¤nµB¥¥ºî•õ6R#Æ¢ü'1©IÌš}u¯Z“¯ÃìS¦ì²bt{gAâ w¤rLÙÑw¤õîÕÜ&ü«_kQ–¿š±:PŸvÁÌ.2gPk>hþ2ñ¶ª×àWHÔ9¯)à¡:ý< µ4ö€gïV´F_oŒ‚(š¦`a@ O*ᩱټ€g¢4|¸{ŸìζN/NEÈk1½W~WìÛ8ŠøÌóÓž©·ª&ûÉt» xAšùT "àÞúÕüKɼN‚¤åBï1²vúA…0eåÊdLYò†7Hf²‹WԟЗŸ8w9ò‰s_éóм*Jà8(ÆöÊ`a66[Tƒl©`’+×°nG Þ^™'U½­ÛäˆÌôîj'Õè_]ÊJ®©·);pª®p—vBeïÃ>²^=ÆÉÈ5×FRR]&ë¤TŠ¡éEþä'YÒ³­19“Þ ãÇW_Š¥5hH¼Lk¦W¿yI \Y™!àÞä(Ü­½¯ô½zëZ"¼ªôê³Ñ*ý‰7?’-€à1vCÖ„Ÿ]Û«çƒfmX+ªN†âó¼ËVmPþÔ0Ý÷’4û:èP%ØÑ¬<['ÉO3ླྀ²Ò@½ÙHz]µ§j4ë’þËöâ ¬x…ú,  Åž‘gas`u2à’ª ! ¸w9ª‰Ž@i•¤®“@÷d&|~ô—óî÷¿÷ëÁ„? ÇÖ{¼gPãÂ誠{ŸÐ4a z?¹3=¬€‹¥²yÑÕé±jØð2ß ƒL[Z¢[„Em$Nõó&üQ^2ù´%P j\\"kÌ͵†Ñ·0Ù‘†ÜÂo8h‘z’w–¿«"ÑâÊD‹nÊxµ5Zèð}Ù”BÊvÆ«­á=íÀR^©eÌ$b^ @ڱ̾ǠKam-šŽLº” +G×›Ö”ÿ)(->䘜~ÎáÉYhæ#\ZÁ5hMÈlÄ*›ô ¸÷#;‰,V>¹.p«#:Ó•V/W馢òÛC&ì¨ãðknÈ ´Ï¶øÈfŽ|Ñkª_f3#¹Û—¯.hI`dðêõ¸¤|÷õcÿÛÓølÊòÛƒ%LÞmNæ_”»zЦKŽx1»ªaߌȎÊ낾;˜-f¶koí›SœÖÚå$YyLºœÆÓN_–_Œš¨¡N{ðÉØé/YΚ–{p„»Â„!®‚Ü,Siïpô‡ÇPÓ¯«ÜŒd@Ívf‚pu0I5²P¦•]í²_¯wñj¬!€ç@Ó=SÁ€ $£Š°ƒ©ìæQm<÷Õˆº–PèÌH’6ê=äW’À·n.ê%ô5„z_‡zωõ.¼æ“6kNeÕý¨¡Ëgé½Uÿ»¢Ô¿’¡ a!¹3ÏÌž>à®G[øEí^©¡µE ÂQ–CÀ½$¶‰†µáÜu7àx°–ׂ†ÕŽÚ,_ â§ÏíÈIsyßÛs×ÒÖ.m ‚U.¢Ê¶Çzëƒèæä22ç•%TCï/–×F ¸¦#³„‹Ä¼š%ÔÉÏ2þ¤î‰¾÷Î÷v©*p˜Õe6dp=›Â,#úä% ow`g ©Æ¨wiˆɈÃþÐíÕþõm‡,Oê4)œì°‘öî3¦‘˰½£…è0]ácÜRÖ^ ¢a «-Èç Õ8;{C†ÐмT§‰Q û²~Rjaxúê†Ä2aÝgôè&¼€"’ìTxˆŸ 2ë©ôÑͽ5ä­²™’Ú‚™­o]¢‹ú”Ê•t,+#Èe´Ÿ:¶_W]=a3hõÖÕ9̉q¸¿ÿÄßQÿØ-?iÉYB1OÀÊP*©Vûݤ¥÷ÓàŽÆø™ÃÔ{ßÎv} ³ÎŒ”§·ê¸¶Vþ%îz×YÜ1²ëV?KÜ’w‚¸·|ç ‹éH#X¦7¢ÝÀϨVTì°ì`4A*ó6¸ âýSIlwu­GÌR“ü%ÒÂàˆGübTû›oéÖÓó«ÂaW$#È¥Q[ÚËeö¯É“ZxZŽõq¿.ãlHÒý!½ôë g{Y;õÓÁöª9ŸŒèº«ª/𻢠ºDÆHw*~ÔÂbe8Ó¥…fâomOpxBÅOßbèX€ŽÄ¼ »ùh$³¢¥¨Î çx íîv–¼Õ¾JªÍýƒ(QBXÀETÌKïðí9±¹ùKëiIÞZŽ®‰"YXF*l7 ̨+ÿ6ó-Ö6QûÒoá]Át ŸQ¸dCöKõ¾=¥v$‡š?u½ùÉ—5Æ›lAsCž-bÖÙ=*_½î¾ÞP D=OagdÀ-#ãªQÔ¶îϽ•úI¶üU̶0 «*Üý(‚?¸­í‰öÍnhÀ¾Ðo(x­ Ÿ˜©êGÀ5’doµJm!bèˆ\Xê8›×øëþãJÎHj¬43ï«ç B•Ît]n ™ÛQ-»€»A)¢â¯7ÿàä´ªU´p’.ý$,×Öb_6ßuŽÓ_ <Àõ8Ð/™©X=ÑÅË`«‘a IÁØRÒsÎàýöÏ× l8 Ýª|À³…«m\-ƒ)½Äˆ´wW$FÂÊlþ¤]–uj6ï®!ОèüõÎT¬&dÃôöþ¤âíù~¿ÝX–JÂPH>ŠÐt$Ôþ*sŠœºJ—~1H™”¥‹-äúê^4n¯ã÷€KgÆ#m²sú-›í?œU¶”Êjá5õG>ž‘¯:ÍBÔ¯"'BÚçl[gæñ¡÷¼Ì’7½gh^g4~[甋¾ÀçF‚†ñ¬dúc’ ¬·07N`ÒF¹‰\k=©È¶"#ê <–r—ƒ'4"‡l‹Æ×ä†iÈÿ®jvë‹GF Å;a -h} ɵPVÀù`y ò_iÉXU?à[ý¬å¯‚9HÈ[àÜS̞³m+l÷ë:P¾ÞÉ<|‘8Ž)«³ܳžÌºøXš«®ÿÔ,¯yë¥xÆçTŸ©YLÉ*ÈCë2Üíè'ŽWÚ?}ý‰·â¢. ÛùìnC ­4F¶Ÿ¼ª+BºÕ™I´\!é3‰½^ýgˆÛJû´eWñ _€B™fÆ,ý ¯¨Ì@Ã$ø‰*ô5ÔõHÐ:ÈÌ×ߦˆ`²õ¥”S4W+…¹wNøSò»¯óÉ-˜¥ (¶Jc‚y‡'>ž9á?ÃÏqaAÎZÎÞQëÏiÂ(NÉ*è$kÔÜp;²9·±tÙ"‚ýZ ±_iö6áv˜ŸvéåS—¨Éo ¿š„~C3Ê Eve´ìÉO~Ié'òAÅFÄ·\´0Ènåw|Å|íb×,ð$ Ðb.ŒRpK±ÒÙàrÛzWÿ²:òã%òžß±QƒBLnìÓžÛÜ‘þß"‚bk†jô•mP.;ˆ_ˆ´ö€Oû„w--K+|æ<)!['¦áÑÂVºÓ/¯Æ¢“IÊõjhb‚ù÷µ°•VÔ¯üÉùB‘c™Ðߞ˖NÖø:[[áse8`ÍX¡µÿ`ƒ& X¬Ô¹³€ I;#ŒÏÄcãy{ù¥¸(0cV1vàÄÄ?Ù ’åS—ÎjÈâõÄ‚ÚÚ:hÀ±Ð+h—­œÔtòoá³åÀ›ŒÈœÀtY¦ã¯‡^Î&L‘sÂ>G¿Ü®—Ĩީ  Õ÷Ü ÀkåÊ7¯l‡ v¥€²U*4Uñ¤G.GîiÕXé!j‰P„׃ÛÙ€qÁVï'ü‘æÔ´¡õÛh¸ îSBž£7×w~Fù––òR÷£ó¯Fû‘Ýo‹@ ‰)Lå>à[½þ?'?î[zdn9­zý=è‘ÈE3cbÜÕ…Ouß³¼{ÕEb¯=RÕb²BDtV[$9‹1'Ü3`Ùñ>À„ÿ¬EŒƒáÓ—µø—ƈt®øOœí[ÀCüÏ•V”¶vÄV“~í“­˜PÁ#5~s³CƒX¹2I§ ú¤ÕY¼ß”Hà‘œ1ƒzÈ‘&äêÔ{~‡»ÙÎ]ã]ë¼o/·-:ÒñcC«½d^Óy‰Æ&ÝP©\lAÐŽäóÓ”é%HHQ­Ò=í¶#®gSõÝ¿‚…IJ´Ü;zÀì´/‘7@ó1ÚÚ™pËrR–/ÉýS–åZP 93¿ô:˜þöuD¢Š¥Z¬¼Ã½Qjº(K™*à ®ŒÙƒ”˜F|çx#'_áqŽ#³]JFí54ØÐHX¡½¤`ôW!—?qI_ÅÒ0È…tPjÈð\Ùm¯!¥Ò!ÓØÇ5á®ù_äú&üçúéékZ«ßtC0ÄɇUž°>= ý‰³äå(SЖl­$Q¿„wÔÃê·–“}³¥úݬQJGŽTt–/àRŒHQyÛ ”j»|¥¡“) X\B µn-‰^]D¨åd veGӷ„`{8;Rʉ.Ò›ø¨ÿbºpU&Ç3mq.^ÄJ·\îX_‘Y‹nÒCš.¶8ù;2_b¬é€oKB›p¹'­”’ gBy¡íÌ¿ÜN @l®©þÓÙVÌâ J'|e„“³‚>ZÓƒ›w/À„”Ф¼$¡_pˆ°ƒn› ê-æÒ|æw¸÷~RÂrõ¼Jô÷ð‘puZ=o/ /]¿ÍnÀ˜ÐJ¨p*ú´w!ÁŸ_7 ÔÙxXÀ•*!Ï×òŸuTM´;ážÛIÜ>¶ð¶Žbôpr¤R—-¿ÐU¤±oòÿ¹¿Hë#KxÔPá™Wª&ÜèAn§nh6¦ Òo¿gfIÐC¸Óò{¤ó;ÔßÎ ·04§Ô‹%à‡¢²WbU}ë!Ü©Âè]jÿ€[CC£çDÿ¿èí]!_]hô1({•ÃÀ&Zˆ¦tKÖ Xn>7#Ž-š‚*ñ¬‰bÀ  U>"©~à ˆÙ?,žëø:d‡Qû5‹~bÞ©=à[ݨ?Q} øOÅó%ž¬Ë_}0ØT;}Žs—Bÿj.å’Pc¶Òw}Ïtí×bªüK›KY °v~ó“/~muF2ô—¦s0øšƒD*¸$ØÖ)ÙrÜù¼ÒÍ $(eF¶±ŸìñÝÀÓŸÍ™ŒÏÞðíf÷ü6»x]öàW^ä{®Œï«kT(•ýÄP×$ÛAjšB2C{ƒªìça€œ)F·ˆ|+Òœ {•ëÛüË~ ¹µÿ´rŒ¦°9Ψ9Y‰-٠לOx_µš}òz±øÁølÖÄVoP (+h²xI'_𯳕¯ÌÅT•džȖŸdpÈ݃ˆÎ6¾€£I¨¬–ÞáϽã~oåýæM‘—ž8‹"‚ëXš{îú)ÓÑ舉~ʲk‡¥ö„d~õ JêÉè}ví_‡²„".²,‰m»!d‰²X±LŸü !9±ÎÛ€ßL ¤Ô!ý®åhæçbÆ,ÝÛŸ›UklYK8ê€)q¸‡}ÁCå±U£±‘‡.ö$iÞÞ¯nÚŽ|¯ÇX|{ã¨`4zª†Æ¤‚¨Ô3 Æ4ƒÌæû¯æâ7àçótêÙÁM h©æÊÎô s–³‘!¯«ëBTЯ& YÉìê·ÿ*¨_7c[ÞFf'ÇížõzóÆÿËÖ®Û ”–3“¾ÔôWúôÍ»°eôÓ’ŒdН6MaÇÝA¨îJÛ°ãÖŽ(dVßáŠÎFŽupuk~dŸ'_æpt ðÕ¥œéW7áôFÈ{·Û éì$¶]{J1™žn'¾‡—AZ«KG"È«0b…ÖXb1Þ•Ø© h†yÄ åþHóÿF’íŽÝ'4³PpÂÃpSɨ¿ý9§Xå½~tYÖᩞÈŸ: ‡ìÿæH=2¹¯Z\H‹c•ŽºÞòª™¨)X±^áðý¸ Þ–¿Š ]Ä(aò´7\õ¨Bâ¿=*Ö'4«Cp.BÉ蔦P&-hnEh±3h­ šúÏ“Ù+üñ-}|9U=½ îì\ ×ùfÈž@à&H抾€Ó‹ ¿|¨AÐm ŽÜt“ÔÓQ¹^J[ô¨5…~i²5Z”ÕJ=4ÍÒ|ójŸRxè3?Ò ™ÔõJðÌ3è ?54¾€þÞß [?^iFS0wµ£æ¢Àÿެà½Ñϯ'ñJ­ôÏR®÷¾ÞKPLÖÇXÅMz¦5¾ w.lÛ‡ò„ŸYÛëu€¤uë¹;Q€%ºKbðmksõqúù²+L-숿<ùàÑ&d§P$¿ÃŸ~€é•FP¼,ër‹"ƒa¸N†1 væqÃÉ+-¿¼É‘â©÷ÜÖ%S‚è†y¶^Ÿ¸è‘ç°6-[¯TGD1J‰­¸ ®¸ûÑÑTj²ƒá(ž*Ý났)îÇ;¸÷r"wñßÊg‰¦JØ-ý‹ø ™–b¢7 ¯Bíã¯f¶(‚æÔ:½ÈÜ“Ô `ù*€-O(D]УÑL»‘gjðã¯fNYò[v(ßy€—±Äï¼#ñò©„*«6@uäñЄKê¨'ê+üá^$mqx„;$2Çëo¡ÝÚÚI…r|*e™ÆðY¿î@MÔ5³/¸Ç2IHÿížx?ÊÙ%}«/&jŸ¶þÄèj•~Xû¾Hº!}±Dc[I8C¦Jƒ… Ï —ºdMò;üŒK*é2¾°%Zî/µ“·å×xà >õH(W;ë'æI„ÍYÒ¢êpßkü××_eÎØJ†<àÛÁ†ÃÔWø“ˆÔÖœ''7gäKIä¯nxJ7÷ÈÚGþp†´¶fSÝ`|* é¿õæyÀÕ œ®ñ ÿ¹Sf­ôæÐ„5AöFßõ¬k(”Nýní¨%Ùëtå£9ÄÇvüÕl5$u–X/6àÛôx³ýÄYýhùl2ÛÊÇó¹VÐ&k‘~¨3ë@r TÏ3à[=϶üUˆº»gazž7Üzk‘’[î`†ìç"m)-b¤áþ_Èù½Ä‚v)|ýUñð¹W"C¼Ë÷¸ð´Aœq—rŠ[E †Œöp/~RÔ´º¯}ÎLci  a¬¢”o zÀ—ÔØY–CN<:º¬'ÜRf«÷Ö2Eçm¦[xЙs¼-!’7¼¤#ƒÍñgy8ÒlhQ`5e¬S’oŸû ‰ÊöGW~\_¼Ç4éÏœ ý¸‚&ÝŽšLÚe¯Ó®ÉG6oÈ Ó‹ i©›AÓË;Ü4OÛËÁÕ‹=—y^[Z9¤[ÑΕ*™#¼á)ï½}\³P Øœ—§ ½ú=o¾ß7“0}ÀÍéÕ8rôþ3¢¨¾Zµ¿š)žÓÀn2«“_"Bc£ f›#^7U ¸IRé»ë'ügž?®¹Òö§#ÖþƒúõG‚¥‹öCŒp”ƒ<l —{üm/µ® ù<éÛTˆ îul$u‰ ‚¾-``/¤òÀkfuCãhN3¹`V'ÿXiìÑé.)|]ô)Æ_Mº C™7„h[UäŽC—œÆD"÷÷Äö‹àEªD>á†k÷yO¹|Ò²‚@­Š ]¬³š5Z×(ÿQVWŸÞí#Ö@òJ–Yzú½Àû"\}|Ú )àlØjÂ"´U>i]~19‚º.½±æ&:¿fð¿yL—ÀñÒ—ÊAtF]eÍlœ3ÕøZð[‚óÒ~¬ëÕçºLHƒÓUX&‘6¿ks\\èËWáû·{Ô% QÛø,F%‘pbs¸Ùn_¼ô/Ÿö-/ òÞíGû€»ÉIÒ.MҢܯ9äe;–Xè|_=lõü„‘¢ã„\t›uJ®nÚe±#R6AÀ 'i¾¶è'ª°uôS”yªÓôiÂ-#áe^r ¸½.™•Œ'{5'ÐnÞê¥.ð¨»fä žàÒ‘nsW¶2‚üÚ€oÀÖÔå'üaM©Ö. ÀÃáÅèkm(àpž*-]N82üyt—ä_%úÐGWgê€k§%’Ž­`ÌÇ­_{œÐ y˼ \ª$ÆTÎ7•ˆoYö~n.*†SIìøšpËÈY!Ó ¤ÿCîWéõ;Å &l•ÏÔ:ÛK”H*Èý”®Œ Ò‚ ©Ë¸S^á vÕÞ,Ûð/¡+R”Gnq1Å‹.œÞ¤ÜÄK-bÂÅP —×"Þh˜ÜÛ†„ôwì8žh©Œ®>á šôO^Ÿc zQOü"s³C:`ÆtÄoøÖqhW É2«2K¡Xì_-Õ–˜w’³i_Å»<„­Pÿ‡2†nx)ìT.·lÐ~ðÒßážìx.bÑW¦"Á ©”:­Õ°LesI3ɼúÅý_–ò„g´£ZVvC·W$œäì0 ŠíCzå¯+;Iƒ<+}Á4ÏŸph ì‰fr¡ƒœÀ“÷Úôþ3ÓÎWÅ|É´ƒ#[L_$¥÷Ö¦ …*4ª ’«£¯%úoCÀP¦pµ~´ü´ÖE$xÀcñ#å–DËý52® ò ±wøí¡ümù¨“{|Q!@BM§>Ӊ诂f ä4;‹šZ0ã(ö$³wøˆ @“ŸãmW,TY©mSëÒÉù™¹ÎÙÃ\ØiR™ã‚OøCãb.'^ -4ÆÅ·› q?[3¡ì[Ðà UÌ¡[ë`À1óÞsPlwc¿^%î~¦é"i¬À¯ü6dojûž¨àÓ—­6doF½ÐeÒâ¸F´ —WøSv½¦ÏÒ@½µu_]S£¯7æ;‹¼û­×…ÄúظbÀ-!azÎ`Û’…K/Ë—rZ°}£|çã•¿G¶q†Ð.rev«ô9ΞkÅVqúEôÈ`ÊI=¬iúšÞÈA×-'‹è[œÓƒÉ …©ULøÃM«çOYº€=Ê5`úÉ„Rú‹ë¯T/ïð’ü$ÊždeŒÏ"éÆOñûA„¤ ( š±ÂàœAºf<À†Üª1xØ€€%ÜpM(ú¤c÷VOæ´º/ *A×E<ªÔ‰ÁÌ ¡3 {ú;üç<¾¨•Ñ"A×í`³“Ä4a$˜´ÈÔY Û Ž¼þónýþ hýþ‰ÁýPI‘ÿGÚ—%KŽ+¹n%7pÃHº;‡mÔþó¨LBÉ8 u¾j³þ¸uP!qð„üŽë ©ú« ð` ¯Éä:]7Ÿ¬¬v·Aš3ž”ØàþNfq¾ÓØÙ¤|[Övñ¬CÀoÛ.Û_-n[g¾®Qå[\Ã|­¨¿/–‰¾é_9U‚‰@Œ·¢Þb¾3Êm“¿Ÿê9’+bàÅ2ó—V3É þójÉ©í­ÊEÿ½™öºU´M¿ÿÙ?deCÖp´¬^ÃjFž,mÈãX ó•´Y…L8ÆY¾˜Š\ëPj £dy^`€ð”Mà?S®–kÚ´ X½p’.§ü0áãäZÛ3ܪš­+ NL(Á©±€WëLÖ¨dæÙÊÈ^Ç£~†Ó¹Ïy­ª‹­Ü1¥5ÿ´ý-¢«Í ¡²2QÊ94Dü°šÊ»Ç“¾^¾¦„”÷öj“ÖZ¾FÊ (¯ÌË5·_~G½¾j3Ùuk3-:íQC&¢dÝäê訲¿¡ÝÓ ŸÞ6ø: ŒˆàÜ*,ÿ…Cã˜-›¬OÐTÝÞ™¿äyÞíptWX‡®Uùå—žÛðWg{ié“¶G·¨Æ$’¯&ߟŽz¥Rô,à™Æ`=uÕÂ=F~wEýäýÑ™>H’rR²ÕjúAáM¢¯ä=—y—¡qWô2À#1K6½´ý.Z®9úÇ·j4^å]©^NÕfLvÒ©o;RÚõm ˜­‰Œ¯Ï³UÅÁ ^Úxe°ÑGÚgö ˜­t¦ÅšüôuC™†¸5ÞÁ=^iìÙð±Ïc/—̓Fª|uÈ/¿xµC†Ñ‹kEÞ‹#HG_ާ­tùî5”Å÷P⢀C&ôæ¨/àïl†fDßc·Z¯ø˜½'½úª:-åToÕßåNfy,¹‹€;ÓÁð*ˆ¸Ër:$|·­ ‘V“·=xª6Øi¥ÄÖÏõÍ,ááŒR>};+A`Í„w–“¬ËÇ“:A—ÙfÜM¡Íä¢~• Ën¼[-• ͦˆs×^¼À#¿3˜¶ƒ†¼=à ÉÆwùzƒ”—,«œ§Þ¶@Û±c·òȰ,íÖä6À}8™rJʨ¡Ü²Ys¯þU¦«ð iƒUhäs\gZ{Ã1ÌýÐܲí^͵Ü;DßK^á0€|ÈâV½c…Ìs75¹êÙ‘‰“å¥?$ß„¥×x³ÁY}ñƒ¡E­Õ‰ºàֈܹVçü:ôJô°gä°6–&ÜÁ›Qæâ©¦ÂFžL†f îž_1Ö)–´Çu ÖÆ´—”‚0ଳ4— ½ñ&i)¥ÌSp ÍÿÕ}¨«<ÕªN½ˆ¦Aì[u€hÊ´n¯™ Ž­LÇæ”"à‘ò›…ú+{êݾ´sø^…PSLº©tu©7l&廪œGàAne餸sê2Óhõîb+£ï£r¥aþ–=¨ ØÒÎñRRŠªN}ÐF鵚L.•Õ(u6««Ù·ª§9õþUˆmt’yCåóÖk¯üá[žçnlrå<1•}.¸1d•s ~Qhjc—(+‹u)QëiõúéšJŠy]ÆV‹«™q¬„ì|ž¬d¤x†ÿ¤Ï€üS¶Ðl1Eó]Îôç·KÂF‡—ÅûqØØßÏÙP¡Ü}.¸9ùò¡+ºýöJG"¸CýŒî×yR&ôáV++l¨ z³¯—Û÷&]}“ò9®Ój8+¿Ë’,˜¢™„'ó©K²²ÔÛ;$Cë^VvûÅÒÀ;TOɬÛOh@3’+Y¨Â(¤¹’ Êþ$[é6©JVð¹6YE*ù-øÏ•6ÅÇöŒÀ£2ÉIÙZ]Ð+Yå¼®“ª A™µu2³>J}†»3çêµÏqW )‡ÿË×ZÖ&i7`ŠÒ \Îþ ÏM=.Kgäp_¨vÙȶÅè̃c”¢6¼’éäDÿûP_ÞH‹íŒ>ÕV¶qÓœR±Øp—>ÝMïäª-g7¥šî2r°ÅƒÌ„Uõs°7FøÇ78ÑLaCæó€{g¤ï¡zd ~ñ´´§íK}íéc$M®!‰Q^q¥øxéÄ#-¤6ê‚_†¸ãðNøûWàAããtEÊÜû+÷çpûÒÖZµÅ¹ Y¥$5¿ø¼ØˆõîƒÞOøÏK#ÊØc+ÃшZ–Ã6€‡å¢þê$g7ò!Š¢xÉÄRîŸß}:œÈ¯›IÇüçsœ¹Oy,Û˜cžÜ«jYîA¢›ù/ê#üû;Fj­ïD˧kÞ}¥9EÜ"½"ÃVÿ2¢6°0Ù§%5ÛøLV_Ù Ì0s÷'Y£hó^ìTT~:ÔXË Ñ¼ñòÝüsxÒ@!Íl0±(Ò7à·ÄŠí¯Ö¹DWv&”j7@µ°Q¬àïÞâ¼AÚÎMXüŃ°Ëæ”Ô¨7àÞ‰ïðÃIp¯­ê)vÕÇuZßÌÿu‹Wag¼? [ÿÖså«fgåÁ1ý!ì=S’Å–ÒM‰ø¯?Ã=Fc)¡žÐ]Ñ x퟼E7N,þó¢6ü‚G(‰ÎÅqvO{èbúÜ0uþFú3—<ú®No§v')ï¦ÑÔo7ØÄØ+¦ÎÑÓØÊvJ¦!/Ÿ¡½Þ•ôÍš 9æ`HB^²Ú†©‡ê,ýRçxÍé0ay†gCVwëé'üçe”Ií YdËëþõ‰_·âöÿÛØÆ ~iÈ|ȸšÍ™ùa•â4£}%}süÄ\°TIùYù°†E·1Hß?^À£v•‚@cs­ìÕ:7?Ië¼)ºàÑÛ«~Ûð²;kšCè[1#üðc2¢CþÄÕ¸²Þ½N+,[•0/Ë+³…ãQØ^ËptÈeQäŪXœæ]_¾Ùd$û×ßžPPKzþô«Æz®›<‚KhTµ¸È1P&£ Ò×p·ôæXˆãUíi ꥔BQæ³$5ð·Þß”~Ù!ª³ÇÅÁn$m/Eõ4Ô^‘)Ž·»©~8ŠFR¹âjð҃Ĩaõ~•(ôOÙÒÍŸ'1Ÿ2%çxÔW4ó|pËþ~@ôÎLó¨ÈÅ>±Ö¹j<.øOn]µ¼³J,ÎC‰|ˆÉ<š©­ühv¯ïXsº~(R2ॾj°[ÏþéÛ1¦Q—w؇V©º½z‹ø´x•+{ï_õ– '7%‹a‹ÙG)¨ó_Œg¸gfÅ–^À/$й™öŒºb,’妆¿/•Uš³¬xÜÒã„]Fq =’¸¬õB%3 󈗑Âה߰l›•²‹ø背MäYqe{e×3æÍ¸SD¬žZè¤*#]¸/ÄMò|×þÉÛ)XO)u"é2>‡xç`MÝ諱Ö7{ü×oúvC}3†Dv ±aeHÁ¾ãÊñˆqäQ²P¸#¶RLà%@øŸ·DîÅ®–«‚X½ÝžáÞŸÛà Ÿ ï&UŲüJ„Äp¾ Ç9tïÀyñ*¸qè VÝUÞs€GNò9žþ(d‡Œ¯!‹]‡2üõ[qÕyáõ]ŸÔ!®Z*‹t²ü8·ëuð ‡\a%o1+%iÀ½’Ûä6rþ ÿ¹™æ…ûµ•Ao62Ÿ¦šT€‡“òߌÕ)xOoŽÒÇFovЛa½å¢Zß‹{é’K=WµÎT™Á¨ì²$z3mÈIÕ¿Èþdße–}Ñ›Sbš+’\ xF²™®¿ã]²:“‹/Ö›C&61c¶Räs…ºH=¹ÊK£Þ9õž­‚ KäwxIé¸òg_‚g)äŸn¦¿½€þlR“?ñvfpæVßßq¥2ûÞ¬òÅz&*„”•º\*w¼ŠÓ§m×·²ªdAdXK„m"§öVô•؎嬸‹€—êl2W Üš6ƒ”-ü–z³:æ ›K”ƒ>›ˆÏÌLU–Õ@Á‘w7¬le7™ð5ýûÓ|Úïÿ~ø@né&ôIóÂ)].®ÓZš¨éݽ÷ ¼8SÂHŠ&ä·Ê£sÁç¯~L)ŸÉ¡Ü _à1dt«‘_β#ySbª:„Ò§üÝ:Ï33³o¨£²¡‰\²\ç'刜‚U2<Ø»fpû¸j>¤™?±måÆŸçÛdŒZ¾J§M|’e…ôósw ì貜v:ÙF'•ñ*”G;ñ| I s¸Ï›Ö‹RK»Ÿ0/ Üç&µï>7ƒì ÏŠé xT%èèp‰¯ÑI••Ž÷‡™Ó§ ·Ôå}¼€_{zi³pnƒ´•Kjj,¸åÄ"zYÑá¶¾Ò=!_ýê휌YeÐàPõdNv¦ê-”%;9»ÕÜ;"\ù-.øeT;›o3ZéPïÄ!5+…5¯–u€Š ù™TÏ÷_A®È¡ ‰À¾ãÚ±ÍÞ´Û\wŸ´Ýe Ïc£ôJ ÆÇ“Px“ T°o© â(Ïðk‹àë'X²ŒisûÛ7øé•|Õº+þk€ÿZ™íåèòÓ1"œñÒÕaéd6Ü/®™÷GÚM–Õ˜z€ÚÙ!*UqãòdS%Vä—_1fKÌìNqܾ)«×C>ù¦ {cJò«X·MÄ4@Õdú8‹ödQæ'«†5¿õñþý«Š’…‰[ùËcôyoÝX”…ÙYtå¶x6âèz«†|†*o®Ø’Ó®_‹™39òP·_Àù»’\\yqØ™…ÜÅüü*A|>:Uts'w;#?Âvêˆåí¯@EÏ/Öæ)–ó.0g*Ë©)z à¹Ös W?#1Ì~Cæhq+YùxBûþæ$‹1‹<œ3L:ÈÕ0áE}GpCãMßþ˜ KeƒƒõYIøgY)nµ½á ÄË…姯¦~ÿÇ©À£Ý×ë/Zó-vWƒ(§Å"áµ*?}|ÌX#dȶàRoÿ2ÖX&1q•z€Ïi¹xêÏð°ñ†Ëz wJdœ>é¤×ž¤Hॴ77¯µìŒ£!“)×ä&FجgÕœ ð.G¡Hõn„8ùóÏugb¬áŠÿrbÓ¬C1¿= î®î^>u_›ÑÔÈM>º“°ô/þ ~±]1Û]ûÖdýQe¬ö®b×÷–™ìN‹gx”{È%°ky|¶„˲Î)µëe@ÔˆìâU“ð× œή˯)^ñÊgÛ»‘¸ã/ÛJ]Ê 1è6Sþ¸e}4‡Ý/ÀúŒÌ*.ðÊ)[¼)NYkå+lÛ½a‡™-ÊOÇ$á(=Df ^SzåÙ#ï^‘Kï¿ìÁÊ«2p0¸)%F…ðpJ“Ký~éndÿø~ô€¬Å%3Ï·¯çÖÇ×Ý ]Øìl˜¼Ê'4Öëméŧ×4³†=«ƒ¬,ÓUyȺ!›+)g¹jáÇâ‰ri€{0ú)’Â_3ÝèwáÐ,Ì̶È'5¢˜âYi?¤`3Q*˜!Š O%Y¥å zZ#Ã^aò;B•Œ©c‡ }|^~ôö{ñéZÁ'àvOæ¼F¿\i+‚brÅÍðóتå yJqYaYðÒìM~Ú[N;A1â=éä–R|hÀoë0Žp¹†nI”¿åÞ}/.e©„Mà)˼&þˆåÏ:µü‰-Ò“JóÉ+ê!à~ BîcÌyQì&O8H˜ÿ¦)óCÀ³é%x²=È"0ÅR<{}F—>ÊF¶Z æU…HTyVBý•Ql­(V àèb]Wp×ÛïÞuå ]n‘(ø§¬œ£ÊYÇX'KpÞ&ê:ˆ;>Y™[óc[²‡bÂ…]‘…J²¹“*Ý™v…=¡õ¹«á¨¨±¹Ë’šË<<Þäù‡cÀ×ë=ÅcùU¨‚¹ Çéw²S¿M/· º®F„ü")âpÔÓŠšÔØsÏpêÉè.Û·”ÓæöÅÕZ»ãžúëqðÛIÄ_3†€G©äˆ0ų9áïØ†uXýľ¸Ö•‰Í(Õª€)}ë”*)7äî©?’¬–桲WÀ@RuBj/Ò&pëéÕÕ=Sß-‹]×[a»Q8X¦™ÌÜyV´ˆ8EZIœZQW7 NJ—Veç`ÁŒe\£ç‹Û£ž­'¥i ò¤Â2÷¾Ê’ `ê™ä%äûiˆÌ˜„Nz/ÉÁéÀ®!1’Å6™ÿÜ  þª3ŽþºYƒ6‘7‰ ,1‚‚IµuôèpŸÉÌ}F>!˜¿'z1)Y•è°äjêb‚êh"ƒÿ¥Èsª£¹¼óýií3¶ýÓÏÚ#™8êÊ“>@®,äRv«ù^S}QäC ì_2§$¤Î’³àfVvèw½ê0:^dL3éÈu7• ¨¤RwºÑä“ÇWgé„d”€´éŒî§;PIÍýͪkµImÄi²ÎÆ6‡,ŽÙ_)Å[kßµ„EÇôDL–ÜÔ°ã ïFŽ‹.û½·ú§µEýþŽ«öíá;ñϧïðªY¿†;ñô½Eÿ†²ÅûCÿøTðŠ‚9ø¤”CÀ%=3NG(9Åa;äÙåOD\H"ròˆ€žh~ ¿EÃ]A±.¦$es&W²x€fûEM“.ø¥Á–Ê'bû«•VvªÊÿè„SF£ŒNüB/iç_/5ˆ¹á™ýÕÈ~MŒ¾É d#˜Ä^Ø3|¦L±XÉkºë4zö©cû+x£èß‹L›˜D_Å¥~ÝÀKcgRÂg€_…ªÎçXí~ikyùöWpd®jR޾BXÕ;áì¤"—JGSšøZHgÀ#×7*Å3ýúâU(£"røÌ¸jýÓî»m¿>q—5óëcÿ¹©¢Zª»Íåš-?FVÉpôP£H€[{uõÏ «í¶Ò«:ð_2RËY¹õÖÓ!žiÒÅeÜ›<¶¡Sd` :Oì;bÚª³bB³ÇO¿òÉìÓ¶5”!N\ïæI#â:ara†tJ¶žj¦äVÖ”ŸzKxýÕ“·mV¥f$ýL2Uæ¤Ë+ï8 ž5 ñóQËØá‹’Õ ™´dÕ\K9Ô æiª•¡_ÃÊÚïòy¾¸oÁ,íüí aÈr%døË™¹zHñï t%© ¡LÒª¡€Ý˜Ù‡âíî™ 5›So)‚¿æ#Οý'®­<ˆ"væ«§0$›™Kr Ù&ÌüÁ¶[SVCÜÏfœ¤I…“{­õy ¦ÖìK´‚ÊGJ‰Gò§Brh6æÈS•b1à3ûx5]öçÙmpx†¨’W°á,±\Y•k*ØpNžP©j¾«žl¸Âª 2eZDµDìÓ˜´€ÿãxò‚_xðÅw"n=¥™ˆ®Á©§j"éó˜gù~àAÌÆ¸t0·àq1 ç¦PÛ€}…bÕq•¦ÿþòpbïÄ´«*Ã2À­$6`ÒUèVª0Ìǧl¡$¬ÔÙð­WîÆ¹ýH,˜’Z‚ ÀUŸ³¡ÚDõ”*$ì#¯Š:Uï¤ sšÿîOPÁ²kIJ%KY~ÀoÍÏ^äe0 ^™Yö¹{7B…†á ys‘ºí€›yb}Òx†û;c¤ÖFÞkÀ‰ôáR˜üò+S(Ìqȳ=P|LoêÔ>Ó¡Okç&™².Á÷òn€Á•Ô-6+‰Û<$YP$ŠÒ?ï ÷/ªE[˜˜³R†š©_¿ó½³.Æ:î_¥@“ñ5(sÔÃ玔{û¾æ»eô}®¼ÖS£•·ŠŒ <ŒðŠŠÙõ®‹Q.ÆÞ!¨¨ Bn¡ÎözVˆ´œ>_ð‹ÓpÎ_5ëŠ9,&žÊ¡pËNÂó&¯Ø[{z›ÏþÓ·’†™ «¸,9@ú2H£&!ŸãªJ¾²?ÿÕ#·OÙÁŠß2á<Ô³ j9ìÕA-}ºÀLÄ<0wY©ZðÒ#©!Ùÿ¹MzŽÝY¥Âá=˜¨&ßÏb2 æ¡0Bnå{s´ÊWA$LŠÿ°-h ùG½÷y]§m/.ÆÞéÇ𳇒!IJwG.ð«ù¯Oüºc¢§Ø{(íT”&ó&o{þ ‰5²Të<Ç»‰ÌZbg-{®ƒôÆ‚Ù]\𹜙ޤÒÊXðïïx2ÓglWVÃ9Ô™.¤Œa«ÞIÉÎB o.øÕx>¾Ìd3%Óß…×WÔ„ã¸4ÛáaOÖ¡>8LDZžµ¬C.•ŽŒü«õ ‰¯ú%àÒ½Ø[{†Ãøìš2鸿ßE7scŽÝtå·­ #8ªé§ ‚c &®†l+\Ù™•óCå§?U~ª¼û«ÊOGCb«Üº|B'‘j°ÜQÅV‹IMKV²k€»³‘–,Ký®š{û }…&«îæÒTß«îÆp•Áô»ðdÞr}g!×Ó·ž(…ZS,dÀoçPî*h3|üZCp blÔaò'BEã]õcÌ++íï"žL Ì•U…¾¦m0¨â#A,åMz3¬cüPéfÕw%ã\¡œYÕ‡~ ½·2v&n=•3ß©ÊäfñÆ’?WƒI€Çî]8uØLn×€þab—ü»/ƒŽÝ(ÑÑ¿ŽñÇîcSÓÓiƒGùzWe»·7;#³=›ôX= íßÄ«‡xYú",-¢èU`ö•·àw“­nþôöÊQñwu¬ìðÅÓvârUMÌ6PñÑ(®èý€[Jò¯²%µÞ@µ¤òbjÍìfñVÔZ ^ÞÔ.ÇÌJwm·–@Ã"óë¡òýé«ãTè„É¥SR®pc’š1ª|?÷ÊÚsúßòyƒ²)!ÿ¨„”ù$¿6ÀbTbó®­%‡–ÏÝKÄã„‚Ãæx0ÛSÕÒ[ìß²‘Ž­ULh'1¨°–z?ö¥» û÷;3¢›¥ý{Ž~;z ©Ù;ÉY$ðåÓªêþÔÖ²Q€sÙ(iæ x靸Q[þþíð°b.ÉÒh¸A,³Ò‹m*ç_¹àѨdËFUQ[95Œ„êõ¼£‚QæÍ¶—©8‰Nf-#©†U;•$á¨x§Ÿõ둘ÚNÉÆNß:T ÒÈÜÔ‡€ÄŸ˜¤³by7°™1‘çÚžá!) ¦Ò<Ç슳¸yýû"ÀÃâÝhjŒ}²hy&ÃÕdÈBVzd 3¡õ•êöNõ"†<"<ò«j&o_†- ²…tGúUNGpô àÞ;sôYÃ-¥Ñç}ðiûë…„³ŸXäw\Y÷Ý/ùÓ P…SÀ½¾Ñ,AOðÚÀuŒ*_ú¡™Ü÷¢RÇJ£Óvs¹×U‰ve)zó#qejV×f]¹À/Ó@½îî±í”ìL=R‰70" ñË,M¶·nùÕUXb'M7ØPwbÔx«ç±Á ²¯7U«:"íö† „ÊBÍ.c¹ûûp »b½)R{»%TZË{ã¡A^°)ßåB|læ¨Z¹mg–THGPÞ‘ îR§YˆôØüòòCPƒÒum¹è*¥=ÕþHMÇs“‹‘ƒ½ÉˆÕžOÚ2â“I”>Rd}BE0ÇAйêglÉ*†lîlFŸê5,’^.ıHËñ’S Ê]Q8Ûâ¹YTš¬ªÐðÑÔ6\ÎÌ«MÞÝqkqpU6&mƒ—òt‰òCªné¹›|°¢ Äýþ³f=WÎÎ*lë™LaÊ!hÀ£PŸ 58vÂß¹¡ØLD?iËoãt‘l¥ÉO_NwŽ{Û_ }ý™´œlàõæw¡dÀCió4ó2Ùr.;߀G}%žœGO»Kòò“8Z£dâBδŠâV#jr!zÀ+9©oiÚ8t/î‰:ä§Õ Ž«ŸÉÁWW!Ä{•kŠž©ýKøXYSúïwõéÌ3ù!°„gššC&àÌÝ…P7¦å¶«‡·Å†sË,8R²­>XCÞÍ]àe¾ É¡ÀoeCo¶ß¼Úvçé’}X‹ewužþ[gS»ð`EM%^“¿Ù~ÇxÖ§m„EÒ»{½òjÑâS˵}».´ö›ä^Õæ‡¤`®¯S›+ü.7ñý;®¾{û×[“l®€?dZË]v-Ü[È_‚ñfFhqÅ+j§ð IZ²ÍÜ2[Á½Æ#ü2y<7éž"¶spL$ÌIk+Á0ÀÅð”,%¶Ûêùð>}»ñN*Ÿ,¿ÃŠ9)]½Ê¹|Ù{{†ßî“ßß±*IÏ¿ÔgsÝçx}¬vSBV°üjN÷ýK(¯ÂQI©ÈmÖ᥸.­Ÿ›‘|ˆ&C€œæD·Z‹¬24׈}zŽ‹G¡î¬:¦­­'`uÒ«÷&óãSÖïUeâ÷u¿ÄÆ9¼ÈR.l Ìÿ‘ÙLJtf”7Ëy`ÏÐÄ9ä^Ý3ÍÚ§Ë2³ƒP倛Q‡Üð;ÖAÚªÿãA]§Ô¦v(aO†µ„e^RÈ˼¿)×ìß ( Òð³éwÝ_ýÄ¡O¾Ò\üÄ‚Wcj\w”ä ÜŒÈRÜzßü„ÿLašÕ½Yß³þxupöEðÊ5˜ *,ĩC†e†ÒÜÇ ŸÞ†=®´™x|jÙþ ó&”ªz•€ßFÂÛ_aN–T´J¨˜¢ƒ–òÊùuÏì5”ÔäsD(Ë.ߪŸPÇAB4Õšò„ïéìrUr¢*h_ ­ã²z§º:4ï ™ÎžÉÅx†Gªo¦³Ëȱ»;vØB»Ëï¸vYë÷÷¢f|)g÷º5v¸?wÆÜ,ß#×f.jðèãÍ—–êÇ}ƒ¯ë:y)KJ﯃E–2SPD¬_ç $ = 8n.nŸ~aÔºOóuPÕî´À~Ý2u¾¿#¸‚uTTÚ¸ïËÜÍø²é'׬“LðÎõá7'¸+Uí×~ÉáçÜÔ ;mŘ¹·\€wâ ¡iF ~)Ie+Ÿý9‚ö֙๪âö•þJ&Tdëðï,rÓŒ–7â%?'jYmø/'6mé].‚›yÔ<ÓàúÉûwÄÛ d—® b>ÉŒ¸Ô"ï0Pft T‡\‚+»Î$L+wæƒx$5¡’KÝUi{9-­X£G?u°ü’1*¡âî5ÞŒ½ýqEÛîhÿ12ìÖ= z¨µi÷jú£†mµrûArb¨ú_¯d2wGG¸ÀMjðtÚª³j«¼ -t§&™§€Ð&Kºv»4¡îÊ(pÞoò®±×ä·Þx$æù÷»šj70ÖÙÑ’ºNÞFdœ™7ئÆõ^Þu¼¬ïåè}B7bÕÝä%6^{5üÛªOÚN˜“NTÕB]_ ʲ¸rñö Ϭðj]Írî‰0E=uûù]|¹ÕÝ{ ;f‰ijÈ,ÉÎ7”%üÒ-?l¶@VÕ6n«@8""eùQÔô7õo³ŸKpF ]Ç(‡úòë|sR&Њ€'y¤¥¨Ïð«›ËI•¶ôÿ¹IÍÆ®DÖÁœ¬DäÕ/ ZßÓ#ÅyèÐydã9ºy ¸±XËr"ìw:Gë®írg:£±€Fënº`=FgrÌ pËŒÁ ½ß÷aoÆê9OÞN«“êIénkEømåçÏQ«†[òyìa@0éõ³â'Ã4À[{ÅÑíÕ¿²0P+Jv•Ž,¸15o.·ßRa‹ö*Š˜©Á.bÝO9G2xM¹²uÈ9Za¢L¡ ˜<÷üR”itßáë/ìïj$­³ƒøß›irÀ1~ÃѨåîA ]!ý}üâ&‘óNŒí‡³3áª>¤Ó¯f'gHÿAeònòlEÎjqÁ<Ú|°Qm¬ŸW,sÒGÚ­ä!²Ÿý¯ñОÔR©èc³¹©]¸°4Í/ànï„Óá!´p’ŽF²XËjCe²6BäÐqÖ­õ<­òǶ@¶žjMä;fERê'³õ•–ø| ±óž©ó!±`‘œ¤™E”7™Í,¸þªàîöÙ¿<Ææ­É†ËM #êúfðÓëÜ>_Hõ™ÍB)O_”×$7S:f€›Ó¡‡Üž?Ýi k(-¢ÿ‘Gθ¿í£—½^#$Ó–¢%½§S_¦è½ì éÔTJFH.ð9ôª¶_C S™Ã¨âÎ÷vºÐ3Ey<6d±¤¥· ýélòåRÆÉ_3ʃ™Ø×¯wùš½'mþå6µºÌ‡Ô¡‘°_Vé`ƒU~Çéy?nMÁ;´ÖX%¤X<Ã#©!©šj%i輤Ô9þjϬŸ¢¦§Ÿ±‰Âûx†_ªm|µà¯ßÍj–°C2RºõE-Åc¿¹Ëd2‡ëAšû^e_jÁ#%u^À›y=ÉÊé3õ ~j$1×5©° Ú;ŒIRËÆ8§Äùà˜íðWÖ!mü øb0ãž»@öw#ú«á²¬H §½ì<ü Ef@QB6áz\Qÿe,bkÊ$¦ÎU :t*‚xR³•Å@?E‚+¶=à^ßuaÍÍy§ðÊ™ð{Ír¯#âN²èæÓÃýc[N:«s£IU+çŒH°Ë(?Â/RUV¿Šqãl½1[Ù—ZYîä)׿X$×ÜÒs>qÄŒóFè;Û32mý aʪúMY^²É¯².âAL­s²ò 7æ¯èr’p·ÂB óÇO¿p0Í÷Êé8‰¸$ÑHmÈÍ„þ„¢ZF31ýyµg¸'&{ÕÔ ê¸%ÌŽVû..2JÖß±HO+ÀKaˆ¨J•v€ ërуñÚˆ@¡¶¡Üí•ÓqÍí­’÷èÚXHé~,Ù¼#¶"õïù€Q>ÿ'e¯Å2œžÄCš¸Và‹sÊ]î}/ðoâ–£Á໪ó8)«r7@@2¨ï°jHPK“¯Ìjt ðÜë>Íü_k©;üÏ6©IiB ;«H„6“¼<Ãó评~R‹ó³¬Æ­ù NîÔcOâH`FŸù×§-ÚfÊÏ ¿á3ÆÞÌh›•9®Ã‡ß_¾¡©Í8§r3Y»m[Îù)Û_­ ³RÿYU°õËîbñ>c…´úªa1û²N°àÁ¦¶c¨¦Â¸åGþš¿iïîGg‰öíU ðRû;#b_¹2ŽƒÉïe™Ê-8S3¾lÒ^öqîUá1Ö‹QíHïw¯t<ºbcÕZe©ãb¿~I1È"‹Ùð_Žò†Ï9CÉú٬‰½Ü½¤çîƒ0{¢(U‰¿|ÇÑ>}»ˆá¿¿ißÊNÉ=Çoböɼ1ÐÑPt©qRù”àʘ×ÿ-ÈË  ¸NÒØâòŒ€dɯ|»ûŒß6ᚕȔ»€äºAç<³ÃCÖnpó°ì»Ú§·8»¢õËB³/¿†=ºLuË®!2É´®S•Lˆï$¬ðW¾žþÑZ%W©²Z=áîþjûæl›F˜'ˆLz&2[.O¸÷þ†ç“m™Ç&–Ž…Mö¥¤>½€ÅÒ^Ä@ÕêØà ï1åÞåo7"FŠgøEb,çï÷ã$ϹÛ™)ßæR;áë†OLÿqˆ™=ˆ‹ }iäš^¢Ê CÖöf2©š6E]_=òƒèv_ˆI%É×ðP )IÂ'Üë½™Ù à‹ò„G½\O ¶¦¾J>%¶Ñ:áãM¼[&ÕØ6Hsµœ;FËG±u$²E%ÿ„—FŒ¼DzüôŸáòL^·F'”"gHŸHJÜÄu}½¼¢ex/;óÄ<›øç^äë]ùHsOürsÛjµž`ùLÆÿ³ÑÕI°¨€™ö:š˜9áÑY“W•k¿ˆà$û„oµ×» }“B4ëŠT=ᥳçxk\à…‰D„ÿ|×sÇo£ˆ¾Ò¹ÿÂ2é ˜È»=Az3&áÌØÔ^,hÎ0ÙQo¾Fè ñŽ7%·ô>\]Y0ƒN$¹—­¿p³7‰óa“[|‡ŸªWd å,?!ñ‰;ÁןðËfªyëοb61§¢TV7Þ‚—dLÊ_¯¡³5ôŠ7TÿlwÙ¢A–æL‹ÈäZ§U}%Å2OÔñ)uƒCÒ31»œU@SЪò ­s¨6ùß‚Yw'¾‘MG nýÂfžWŽ}|;‡‹’¹Í“@­sè{òçšmðŸaOýÑ‚ÞáØÎœx‡ZçPÍíM‚Ú³Åævå úžþ"ý:‚g·Ú÷O_ÖôH®±ôûuúæ<᫉ä'¯.x&r$÷ïý//exµm»Ì`¡W˜|kV÷„Dkæo`åþS:ðÐéû@}È™KÅß´³Èê¯àÏÃÈÆw‡è^£b$Y@Xp{§`?ó¤¼UÙáu~ty3i⇠É!N:ˆêH¸>"ˆ8iÿÔ-p7H›°6mÒ+ Ñ›ˆêð‹-MÉ[…Ô Ńˆó¤*ÄôO¸Õ¢–ÊâÂ&&{eªÝÁ³½"<ùŒR?y[*àØæÆ\ˆ‡Ú&‹c{7>U¾BVÁ™SWVudSeΤŽP”zg:¡nÒÅ õD¥²²°¤Pºe5ðïcÜ¢=Ë“ì2Lí²· •HïEÁ!~9*1£hYíØ{;éÍ×£Òº8=3_•¹ëQdßîqHFæ¢Nj(C&gTZ¹{!íøÎ~½Ì€hsÞ;õ¨’“Ý[]ôy‘ônÜ$öYiO ©V¢ÕqUíù~½HGšªR,6êÕZö¤óÈÄ7Nk°7ÅðÈ#}s¡EÆTa«GÞ&vÑ£8Ü~IÒ_»Ü«"¦ØÞ’z½‹Nêm4+p*în5½QànÕb³&šðU$÷At̆~t+ô-ªO“A$d›_7=3Tý2±Ïwgøuãë—d˜,±™‰”³úØÞ& ¥ÑŸáRðþÕÚ&ÃÙ\‡"_dPù±¡ŒÑžáN¤â/.óˆ¼Á¡ŠDF‹J„:Hà»=â¯sÛÇ®=ƒ ÈRûâ.ݺýz¼ùí9fŠ÷WíùðûóéŒÑo9Ô.ƒØ ŸX¹65‡Šn7«ðKšstJbû«uCGÊÿrGfækf¨4'/ò_q³ˆÂ3,±=1#¿-߯û†~­ ¾jìQ‰¢{¨à¦ÎxZðÑWKðÚïïÈœòx†³âÔ¥0f â|%Á4i¥(٠纻j ðŸYR9„M¶æ1$AâÓ"€, ·ïê'¢øNø§¹VùÁŽ7廞úwQ ¨FÓ‹ëŒ\5Z2Ô óã*Š÷µ¨±‡ÍaRô.á«°ò-B_°8aÔ®Þ¢ÁöžT®Žwð¹Î_䑇îZÙ“²1Q¥WlÀé——¨'Ü_±6g†ÙZûláˆu™èŠßšh_àž_m€8ܪmt+¹¾´›ÏäZ†V§Õ6)ÏûMå?'›=Þë‹OÆÂ‹¦÷å]|Ðl†@£mÕu¡ëáx›m0&RV”à ¢Ygm)¥zp£×7<Žc îý… YÌmWÐw«oBß:S}‚gaÏ$˜\ÝåÎû·B²/¯¡N¿)ý¹¯öxö‡™Èyæ«%èO3‘¦H\ ~5ëmŸ‰Ì°í~fþþ»l‡êNÙà¡ä‡ à(ßur5t5‚sÂÇ+í¤CúãÛùæe!Âi‘ex·êÖI|2¸˜cm,~“¯÷ôxfîÀrô*ƒ%dΊêMIö¬üofITX_ÿDÐt‚õ‹º@À’³WwïÌGò'¶,¹ìÌU#ä§ŸþÉäþѰ¸ *Vvj@†M2?*!K/§M2séëŠÆ»à?ïHŸ)ÄÆÎMÚˆS]—¸tŒè<_³Ê’Fž¯ÆÚc†ÛŽÇ@ A¤ån5.p3c®AE0qGÿ™ õøÊÑ ™Éˆa‘Œâ\OÉ“ÊÊ8ªÆqê?©µ&Ý/Â^l—¥Zø<­˜æ¶gøKÙ©_æ©n\ÇÅ‹ú/%6¯Ñdöa{Õ!ûUJjŸ-?…bd#sÀ3žWÔ)8ùJ5¾Ï,úS·m îs>´*‚÷M`—\ó3<Ê+îEIGf³y¨Í²‘H¥•æ¤@#nkVs~†G©oÄíPÒß}Øû¦Aª¾úÓaï›+)Û*‡önƒ©„RhÉ·bŽ3Âí›­æü«•Ôú”¸JƵð-5Y„»œ çsF½ò''Þ ÇX ß”ÀÇ•³äñJ]fXßÕK H›ÞÈÉ•õkXª¬Ìd"JöGøep«Ø^?XéÇ^d3ñj¬ðš^Yõv÷¾Cå†T­rK*r†c~gVøk†Gm‡ç‡°Òåµà3qeòWjl¹Øƒ`–Ú6€›I4SÚÔ€{«/^ÜÁ%Í»tQÆ£ÆEвg„tf¡t:·îÿRÒYð+ë%vm¨!ÉÌXÿM^ž§¤^Á°)ŒÚ©úæ€F84 Æã§_Žˆî{ ²@/Òˆ@ù<&åJ«Èý^Þu®È=ð>¹³Dó#µ!_êâïÈ•óµí³Ñ´Öv?–t|E}ú:]K{QØ>¬!¿/x‰wR-R¦€—:ŒÕ%äÙî8"Ú‹Êô¦Í{ÂÑÉljS‘2/Îì»"ÕîíÕÕ%å½ù[ ¬h$!.Uµ» È ñõ<©}é˜5aeMõÍÏAºÂ¥÷ö ¿”W¾¦í‹¶=°*¤æ!àz"¿œŒS*ަäl §IÞ‘_LlgÕxzÊ7Ùþ ÿYº<öö* ç•å§ê]C¤ñÎnsû+ø;S7“ëqÁ-±Û¾ÈÊMœòq$JúÓý‰ˆ!ïHK ­=VuO* âïFJ.ð—´<·;§}ù,Ïu^‰‹Mò½¯­\éIç.]óã)=j|úþåWþcjô£@ã1H_©HùÀíÎáb] ö¿D>£åm“‚XêLt­(—!ÉJZ%¹ºŒܳÒ)(›t"AºÐh¶T䯧ŠsT³i€›l“53Õš•!Å‚{"ç„^$üJ³N;™´À?œ©UÞîÅ <7e·ÔFìCü¥žÑ2P ù€aÏ++²àŒV"Ù“†~׸úÓ»^ߨ_µph™¥jà¢@±±’¹KJZp¯ÿÖµ\ÔÐÒéD‹eÜ›±qêðŸV,ÑóN Z‚<³”Ø2·}µ) Ù¶‡ªdŽWÕÃyð¤m"¹44–Œ‰K˾.h±Ñ)¯(=ÂvGzÚY«øÈÅH¨˜Šÿ/ÌF׺Ú¥¬‘:Ìžá5Åé£<ÎOÛŽZx‘'FçtyÔÞ^ …S£»h[Ý–ÐúŽm­ŽGPY™ò)J ð¸èßÏUŒ£_¼-›Å„yŒL¤ŽœGÍ”^u4V’ÌM:ksËMÝãýμÏ{Î;³´œ¬ZF+/ò…Mx"åYϲȸÙ+ǯùÖ?±E: åf"œ™Š¼#ON¯¿rBšIȧîC½$wLÕ䀦‘ìÉru¬Æyej EÒÑúmZíË;sU¸Bÿ<;Ôõ8“ûòÔ8ç–™Eº<ߺWýÍéZ~[oAâInLØTÍB,IN–‚Cí¨SÏTuyBQ3“žÂÕõàþ1iû²9ÅÆÔæ§sFû§'ô ÇñG–DÒKSž €Zؤ˜û#ügô8÷§ýM• ²™˜ž¦è"@Ü»¿¡ý‡yÙÙº‹sF·Y’xÀ€—Μg’êÍ~;6sóåÇüò[lpHO‰”Ï«²¢´Óâü¹©vô…Æq3í/îaÐÆ†D|~G¢öšÇ3üB¨œçÛØ¿ãƒœ‡Þ?¶H¹‡é}cÖš„c‡ØNiV†Á>Ü™“„ç¤àëòì¬Ðåªíhp OĔ̊šD·|ŽÉ v«š‚cÒL>¡|zåã4i x12pî­¿€3zoªt‡ç\i|Ý~lؾ„š8|&‹o„ ~Í8|gë®j<t3 Iê·£¬¡Z–¡kOd‰Sóx†ßRhñ$?ÃK"yo¤ôâËÇ(/ ó€œ÷ZÊ>=㩆{®­eßÃ~c53æ¢eùÛ1®KˆÎQ««ÅuS—Èyj;9Ó2š6ƒ†U}¨ñ¦+Öfà¾Ïñ.­‚Ã:“°e[ËÊÃ<@.JÊp/‰<à¬êz þs“ÆÌÙ÷+’¥=÷7tž){Ù9­ëýÁE9â>ã¯w\ÇÚÚ§opÜü½Í¯J¢€çܘHpz/‰½WEÀoy7ÕJÏß))<·kfWN“¯w\,幯 wp3—Û´1ru禀ó›_Ò–íÖsûWõûÍÓìDDÌ<«ª¯ÁM›ÊXêËvØÎ0«?;)§ýÍ á¡9ÿ)ÛõÊ)ÉlîÍq.poíMZvŒ1Žýò\œÑÜI¿·¸òF\öp3-c¤ö¢œ\Ÿ7ô›z® ­{ÌÊéfUÎýÑüª[Væ‹ø šü$êÎC9›^‚äk¥vu-ú¶@”y6·ýõ®#b0†“4Ú1PNÙ¨Kêşᖉ±›Ìùýöìøã£ñ÷¯ ¤Z™J©'Uá•pQ>àù„w‹ ƒ+³j7Éé܈ÁO‘’ˆúÜ@¡•] ¹&µýÇÕkeF;²àŽ+m4åa¸âQ]ÍÙÄê‘¶}ˆßN&,™&=”þÕ‡ ¢Ú™ÔL†_Ñ<ïP«³|²¶º$VGehIÅ0 d÷þ¼ƒ!rÚ a(tú•RS¯¶Hª©6R8í­?Ãí\&^çõaÛ ^ôSkŒkïj,ð ÌП©}Ž´›Ú¢ŸÎmŪjÏÀKeã fŠ@ ø­â韡|0íÖàüWOy'ôÛÉ^-$CJ'ÇÀe²5‘ x”WœžÝ>yÛ~ –:©úfIʰӺü_o^Ķ۫¤P)ÛFtùÛí!@–üxÀ™ÄÜqnð‹IJ™çÛV?h§ÒzgmCu¾AñÔÈ@óCÕŠ§ï §QË—º¦AË4¡ŽjX pëmðÜò3çyVªÜO^*i“&94ø|]}ú4Äs®HcÀK¨¬ÃA¥¡´OxwR–—âÒ€á€]hÖiìùÞr‚¾±–;«iC~yá9·ýÕ).ý”óXšqæ˜Û¿#š6#NG9+ŠÇ>WîPŽÍ]®GPJŒÑ9ðåÕ¼mKùû'¢¨9hçêÓÑ6a¯—žÏ×ûù«Kš6¡d•Q̳©ëð2’“èS•[¿u~¾ ùfâ½3ÔW5þ0æb‚©ª x´öf”¼u;ÅÏafÏ(Ì8ŒÙ£C3õQ|èwÀXGÛã,‡Þj!äjÀ×Áíd8óz&ÝÁcÔ7ÒÜÆ±·¢ÐNŠ ·SøÕtñþÅ•â»~ƒšˆÜW$UÊø /$L»3‘Þàà€)š/§e2¿`rDÝ!lÚˆé•UÅ5qH‹&ªÜ§XX€¿$–™õïៃ›ÉŒ®-ÍÀO£ø S3²Ž ømüç¾ìÏð+‡2í¾^«Òp˜b’(¯„Š ÊÃdi6EÁ¼0ÝZ¯ã~ù‰aû|°ƒç9‚Í×+I‡´h" Þ\n€Vá+9÷4O×=î‡ÒX`7d\ÙN'õ×ñµÝdÚGÎû ³ƒi™©v‘bq¨s2rIrƒiYIÙʇ« ñÈ >3¢P¼ÖáÒEU4Þ¿°èÍvy&?-ÕICÄ[‘RÑì&ÝPY5ö“*É´ÙªÒ(¼ÔxsGæ6¾ˆf¾è‚™\±Ç`ƒ:"À6 §Þp**µ»,v¦3ÚNXªg’óú;dÚTûK!·dÅy©{ßf‰üômgo1)•YqS0$Ûp9 •t‚Z½8§Ó‘ÿ"÷Ÿ>_Û MÿœZ³I¾Ú…3¾fd_Wšþ€3¢óSÙý¤‚a‘»á^ú+ §yM}QñòšÜ‘#©lÁµ‡ûgJzeÁ/¤^vO‡'ù‰ÿ«ò;b€´½éºüò»jîq;ä{ˆòÄhrm¢^?È ÇP~ðîÉd¼+[{†[uõ„N²â£¡ÇoO™dãëú‚pf"vV¹ Qé=áïVð¡TýÜ HON·Ú·ÂF {}†_š6s—함~æò”Åþ/«;ÛÃS\v„¤¬$l/©¼'˜ÑÜ^È÷S8“É'4E·õ@`Ì kÈ/_²¤áþ¿\ð5íMi‡º^*jÜã„F¦ uåsÁ­3œÔ+ø–s=Æ×PÈš3?t>ˆ]Ír“®bq­:\ÅÔ²"#u$}„/x‰ý›éþ[xÅ i3RÚ…$TÉ›p¼42e¹õg8÷~‘Lò¿ÔÉÆØgÖû˜òÎon€q}Ú_ç["-q=‹çàcfE% |£¾3µd_ç´L š«i¯Ð ÉÌAÁäûAöÅ„áFVÕ HxFº¯ïX“Ø‚3á¾£îÚá2vû…u}²).Ì·ÞßTÏ˰øªžÃš¾æ7ÁMÿ|-m0--'dÉ¥óvš9š¨©&-à5Å>™§£c´\ía_ÞNàlpûéÇ£›±]9PíLDÚ#'% ¸1é—S\€G´7‡~ŸÑë'¶íäPí­Hx¤DòéêêH»ýüUK»×­CôÓI{<‡’ÅÜ “ó!o–v*ë¼™Q: ™ß×fǧSƒY4HšßøþÌùó1²?:hê‘-õGÚ Ç®n{´ñxtå0ÿ”mc-¢f*L3'd>ÐÏpèÍ}™KKŸ¾½¸~¶|H¥©)Ò àa¯Gæº9ä¤68ÄÕ3d’GZ?[>äLò¦Q¨²EEÿö¥Ähá&ïO¸g¦“+C~WŒž™BÝE‰ü/Ë´°®–üްçd÷eêòý¬‚ÒxU è¿wÆjt-ÚþT©ÔHš2uåtTšÊ±–lóÿöJ $R™Y¹£ï\áLlÜBæé nu M6«û­«xž‘`Ùw/|üdÒÁÓBÜþ®]ǯ_ú©7aKÄ\C{Ørª’vÊm³í÷Ƽ¥âÕ‚_lhGúŒm/öj©NY*_pOé]lÔý«h¼Ø«<¸ÉÊYaUBo#ÏcLî<˜àiÕ¬Š[öj;Ê%›¶ƒ½šŒôBV„3”Ž@?ô<¡XšÈ”ƒVÖÜ “„-’U1þ/]©GAvO¸ê‰Yn%öƒÖƒt$ÞÀŸíËߊÆeeÃÍúýO‡J\ÄÒ;Í¯Ç CÀçÏê¯Àc倛µ¤>duÈ‚Ä-E’±Oòq­2µ‘c¡ÔTžá^ˆ¿ îÇ­–éüÂm7pŒ¹cBš¾,ºÀ-L>íÅEeâ6ɺ|Žk÷’¹Î(B.¨óŠ&”ÙOÜ<˜à£*Õ.øO>戴8®žäáiK¦/. Ð×O|¢²FŒðÐsQN£*òy,jhbÊåÙU´'1•¬Ç«qî<¬¿*/ðÝ" ýšH&xK»Àé˜ÐŒ¶å—G.–ßôÝÇ\5û M€[˜@ÅPÖKñW»•É®Ë=¾àš<'y6˜2öÈÏð(J42Ì[ظ¯$_DRKf9S¼€¿àíÿŽÓê¡u2w á‹ýš³°’ä Àç}SIií(nKp‘g‹W比±¡rÚ€~©Ö·x†[ïÌH©”Μ×/Ãà3g³nà0ö„êO5^µJ­»gÉÊ—q_ö¨8pσ±šä sKð=Š ŸØ6@9•X!3Ë×»"¦´f#«#¼ÜMõ¦¹$>¾GhHÓŒZ¯óÕa«¯<‡ná®eà÷F¹irÿ,Ï ¹Ø-µú¿¶¿ÿ ŠA„‚vÛý 7h1_q)W ¸5¢yå¡4¯âŽEü«G÷½Þ¿è9‡K ëc«ÙùuÂé í©¼àýM°`3¤ÙsÚå®um°©9Àg\ùfþ®•;!Àa¾³ýukl÷ýèVÁ¤Ç ¡ÝlÕ}Ê ƒGK!W¬t¸xÞÓF:ÓnÁØÒ§px>Þ#}|‹p •¢ÂdMnþw'/.\ñ"üçwìåKä> ×Zˆ hÜÍÌmp[‰X †Ø^Ä  Ek—²qKn.i^ =%@n&S`÷¼• <¼¼²x™1ãÞfSÈ5+L¨øzÁgÈÿ&9X;7-À¶ú?æbëŒyöJq@ÈÕÉà±o<†š¡‰EB¾uÚ¹VÜÇÜN;Ç" ¸Z^±Ì¼î6 ÁUÆÐ-I¦ó§àjzµ:RÍ»Ño,~ðñäïïÞ(ꀂàêHod³Ã9sÿí袳Ðj(‰€”*ÍCP §B–Pk?ý—ÓIª x©‰Å(™‘Nûe]Ix,øE¥$åOóí¯pvM¥ÜU»pïŠ) @×ÊÕ”ZàÖê›ühÁò€ÜìL&[×É;9Ê£ˆÆÜüÅ|†•eÀ8;˜¤ÉÍ¿èŹ:¦v/¨»9äJCK#§Ú&(‘P-º*âÚãT¯¨ÊÅêî‹Ëów;u.ÕÍÿ$*š D’éZXøþtHGý—G™ÒâD _Ú¯î)³àF–ÆêÝp@9¢ûmDw§ÿ›îþM./ îÄ|Е8àʼn¯#«ÅUáß_а~–ê.„‹{;¯Æ®”¶ŠNÉ`²(ŠO¸Ñ‹G»¸M€ºë̶ڔN"àþR ®4…}cÁ™Ž8~G$ùé˜[&{׬îë½/VmjLÆšzq‹U{µ =W¢îEµ‚2¥N»–¡vdJ+3ß«þn¤j5·ŒâÀþ’]y¸…í#CK:Z.šßnmëÎ\õ± ùÓÊú‡lŽ€8\˜+_ÿ¹{[Ê´•C·´ eÁÔåë]gǨïÊe¬-hj0˜!¥ÿl®ª" ^Ú½9ÕLuM~ù»Â¯øm$³ýF† )-Û‹ ãû¿TÛílÁ¯’,í3yÜ@Ù”‘I7-À!¡tSõgø›Ö^ãè4 óž«óüÔU%*3ö|Ÿ×í;ˇ¹š÷X¹ÝŸJŒ¿'†Ç­¢ÃT‰·.2ûáãL(ùY6»¼ò€]w«;º9õM¤SG”mUT[#3Y¼³|0¹ïû4Ç~ß— „$X·Mz6nUûäSaE=î`¹Ržg˜=ž*V¾L4Uv:§"®þÀ.ËC¿ëu¦5f˜¬/_ˆ·&Rñ»U ½À¹ÒZU"Òqj¿"§#ýÊãVûuÞ3åS¶ób`dœø§”$"`ø6’Tj¸¥èæž¿Ôúb`°|0Å:ÉÝд› 2´0™ôä1à”J«§”¯©½³È<Èû‚òi;fÝ_ðR•S\ŒÓŃ™)¶0à…ßÛÆ_à>üMûÉæÝÿÅs[4âˆJÂpMZDÞbdJÉ›l›€ÜË›×Ò¼M6ß÷¥Û30éi)[‹¢[j~QLÖ£í>huQt³{Ð,;€ÓâpÈ€ðš^‰|[”òéeƒ¯Xðóï ­/ðœIþ”å–YðËw<¦â}û+ÔÆˆîF4%ìø¼ß<¡œçâÚ¨‡’´ÌýuîKù„ >ª¶ý®iOÃ2Õ™¯ùV»:v+¾53w*U˜ÜÚ éÈ¥ÚyóéÑÑãŠµí¯ i‘‰ÔmU}÷¥\}8Ô’–D/E}ÇUÜzGÜšç\±ÁÑÓ&_>$7ÀêiW¥ì³ôèf¬A´­õÝ ¸ug4m¥ ¶à—1øvÅ®Âæ!’BÒé¶QÁNÎNÚƒ¹È'´zÏDUb®à""¾PÉ«jk-øõ ™¶£6#ŠÈ¤Á «ïõTÇ%[9²æüÖNë.>F5Û¯¸'qKrÓ÷¬²™ ~°Ebuœ¬~bÇ&1ŒÉÓ _B±'LËÏp·L×=ÂR,}®BC·¦áX^/áï¿b~§P¯R’ܼ±¥’å§ÃïÄ£ŽðhJêf̸Ýíhе3)/UÑ]ð[[óíê/gä@ZN&ãʸ+·£¬æ¤¢›é‹úRðëKñ»Bµ7ôwDûŠé‚KRo…ìînÔŸÀC ‹.†@e|QîŠËýPEÊÛñ V®1a»¬’sÀs%c²&•›üRfö‰í;‚»¬EÝ”vR5œ*•5ûðp5‚P 6²1‘è’çînÊÔ‹O huÕ+©'w·¾š!˜Å>iZÁÝíùþàœ‘«º¿|¦ÊIý†ä‚2ˆy'6Yëò«ÔuMùU7è¯ÒQ&C)Y¿0bü¥2rúøv_ƒòÊ sÑëqík'”9ªüí«°ál`ª(c¤z˘=ú6»&g]”WKÑXƒPÎଲ†YtÕú[UÙK“ÊO€G0ÿ0´òZ +Ä›©#”×üÊ{ýà¼~Ê–Pø©¶Éîn5ø-múÏ‹SÇ¿tŸ{­³[¡ú˺If2¤w A^ÝÙ­÷ª¿30ýÔ-ÐZ´Ü’IbVšòÚ©~Šj’ŸØšü‰h^3Q@ô,ø¼ß(Áôêã“¶âËÉ«mÌÏÕþYÌVgåÌ /ÿ—³JR®,c«“³ú*§ÏÑ>e;¹µÈÂzé4ºýE䄯ŒœÔù‚_N‚£„¶í²‡‰„™bæÕ€Ï]¾4œÙXˆ®ÆÝ&ÃúÎܯ'}6±Ú€ò”ªqö‚ ÃäN’ý·rߦ½Š9¤¯ ö)‰KÒvseBx8¡ÇÄðöÿy´’?±‹¼[¨ aQ¬Õÿ—Sc2„2Ò9uw‰Ë¥–ÚYðk–•w¥Å †p!š]¹ª "ÀóëàÏVV(€ÓÖWJ0'¼ßWH0.Z9¦s¶Küd#Œ mä 8 µ7ýAenRoùÉÃÊö`üd#j“¢h€ÇÅhø’ hfê{° ßÄ¥Euô+xÄÁÒ‘ÒåÂá+ +^vûåqðäVFÎÓÞèØZxÚ/+Tt3Ù&‡,²xBàû9‡R•ÅKˆð¾´q;F¸÷#bñ}#)5† ¾ïmê/¦Xy‡½Œ-£÷¯DtáÄxMR“p7VŸ­Êàð—BÁm¦»Pp]8“JWteñTÁ÷eCº>d)R½…´ÂbÈ"Ô-ßwJ_6µ¡ Ñ5Òú ªŒªûBk7Ê‘»¬Ÿ/¸w¢;Z“A­·|ßhåK){u;oj/gÖ®¼`*4qŒ)YÉö ÷ÞŒµ*ý~I.<öYµE];Êï”ܦŽptYƒÂB¢ nþÞßirµÉ63YÌÒ•ß`ɶ)²ríç<Ð ?»Üܾ¦•W(07S'ß1+C:À ë ˜„_ÝXʧoܑ޶§ ŽÑ4ßÑôþì“/kíØAdŠÖ·<Õ^ñ©íR_<Õ+¯ýû—¬"÷·â"ÿ»Ç]1ïï_ôл“>-€[fÃÉ^À#ÞH\üÊýàlw7ø¤‰zÉ ÉW'Q»üòÐqŠWƒ`3û* Lÿ’Ö¬%5%ø|òò¯0 •˜U–?qE7ñ*<9Âí]r¼‚)š‰äŒîÕ± ÁÙÁ4’ì+ß*ÆŽ·¾¹\ÔEõÌtÒäýµà‘ë‹Dò×!Pû}.¦h©2Ä…®,c5jÁ>À¯ÝçS)Ny VëԇIÕ:Iô÷¿Zâ°Ç4-é+K‰õÞÉTØÌ0E Ü’4ºL”¶¯s¨¸IÔÒšQ¨O?Õªú+Ìê‰Ó¼õg¸æ‹,»ÇƒýÞÕÓvBJùþ«Õn¨ÎFg]ri„θ”Ù§—kí™B\¸S× ªáX AµÕgøÏ³Çsßý騖%ˆ“G+MýDFT8G‰]äÝm1©EÎmYå/ñŠf~è»ÙFàk‹âÈ,Þ7ø<æ/[ÛT–ŸÙá\J |êÑAÔé£WùèÖÅÖ*c· ùè.“Íʼ&Õ+i ñ²ÿ¿Bõa¤C&¹X{þt«…ùIäò¿¨ˆFÛÉ΋pðâI¢)W¶(ŽF]MŠɃŒ¦Ný|ÓH8.йÎûöWk'ùU ‡Z™âP®G€[Œ7ax¯%ïS¤‹ ||ë&©nà×2Ò÷_ÓÌ4#²Œ/ hzWï\)H<Â/zg5>m[Ó ¤)¡Í§NxgnÌ®„•(o ¡×¶•Šc8‰¶u·àѲ|Ž †tÈ%­ ð+äû¯VPm/œç~·%j*;|_9éž¹TRÜÙ æ¼­Õ±‚e'Ú\Ú pŠiÚ †´ˆaŽY{¬¨ËKã`&y„`IrŸY‹Zv'-Áž¶<8G‘r뢨 àáò¤7$áƒ3ÔÀ àÙI´»r\¼Ÿx!ÉgÛòÚb2¦BÃU¦ÜrÈŸÛ¢EVê¸ç*ÿjDyŸ¿4õò 7¦úí®,;¿ö»)ØûXr?ÓXPRó·¬OèwýºKù˜ÍŸ¼…ôàgR™‘åVF¨oJ)óºO{)¥-êdq2\nII9>£–L)öá‚_¾cM{CtugìLD[çVVkhÁ‹1ÍÊ&퟇û›Œm”ylœ–5 sÈ#fŸœÝü¦ÆR f🕟Kp£7pH!÷̽¯ÂpHk{Ã!íu>¡}8 ßÉÝí]õS›ƒúeò;®ÄŒÍº©Eƒî)<(Iõ»Û)\J¸pÀ9æ?d¬¥3/©”å^\áIb^6¡8- þSte¶;K°-²¦9í)Vu ƒë™”MtûKéd³ªµ<Ã=U2d"»z'¼µ7¦Žó°ë¶UÖ×ñ[‘Œ­ÉØ*N!ÂV–63€¿b›¡™ÆvR/¦©%#O>TÇp'_þÒØj¾;X¬~òG5àþÓ³òÏ|ÆéÍMÚsÚEè–²ÚQyUqe@¾™d«Åeš´àî5ßTO~Á/ ùa:»]Y ªbŠ•Ú?‘©½}ÿ Åt6*$C³÷bêØ> ¥d<¡D“»ó´¯ìzŠ×/áž>*Së-UqD¿v(Î:·2di·|T;äÞ7¥®Binx–ÖЀ»+Uï=¼ÑïT Ù”Xð™U¾˜ðœ [é»búÒ ¾Oø^T&*Èf…Ñ‚M]FP¬md¼Ç$UpÏö&­q ko‡Ò¢ŠÒᯨ²Ö ª(Imî©+¸ɤcçÇOÿY›1mÚ/LJÙã‘CþD°JÈ&Õ$Àc¼êçÔ\ÚWì[1]ןrÇ£äVމ„¾0 ª²÷LFÔÚlðF—…Á¾)q–;ïÅ Üš3Q)yaBý¶:[Áj¶oÁ/â\sAïUÜņM„÷‡»úL’ŸhÝTÌÖî’´j‡Ú¶T ‘ÛK!¿«³m®´½kúW#7þ¥Û¾àÖš\* ÆŠÔdè )ÜùMÑ­Ø—HSƒÈm8a&eºÔí4e¢â“BÆílK“I×^_ÀÃòÒø¯™ÃÄ~ žÒ°$]Ù"L2Šš+i÷|Ôc¹oïgñQs%ß±4E€Îj„xf:œœ^…’£Øîtmsªs—Ùv€3ëä'ÚŰ÷ûC kK|¿¢¨ùœÿ¹TíÝmZºuP舉^Y61·½²œIZúŒ-"éàÊ´ú/ÉbìfÎL×pï%gqfµŠð²¼?ü`HIIêr®¦æ¡ÙGÌRªrܜ̨è‰Ç¿Ü99ï¶±+7;ø¨‰üD%Í× ®Ê¦šÃdÕlQE-é7ë² ¦iÏoª Ç6Ù~;4I¥nIU´±ZSRóbm‘5S0õ[½œÒJa2Ú²®&#»hͱÿùû1­¶UY3G0>ªËEp¶päk@ÿ—‹Ë =2”†l§B½3³mR[y„ÿ¼=G뻹RY³¡æµ&®?Às¨“¯ƒ“I=˜CUe·N¦[½«¾r¿Õâôáuoêõu.ÂÎvS:¾€×äoØÙGJ½«-öÅõLÎè&eȼj”ÁÔ$Æ_ ½¤õoŒA±¶O­å€`SeФxé¤_­uÂwo¯hõyxßL(:¸©)š‘)šQOð"Öú½¯z%•¨‘×õ‚ÿì¤õˆOŒí¯êçňcž)ré›~f?5>ÙuÝ›Úü‹›šÇ£±a9´~çÆÚÔùÍ s‘©©#ð<:Ó‰UÑØ‚_&êFÞ'¯{Æm촆 à…Í‹éRàA„’/žÄÃwïÆ¾è·A˜óTP€E¯›é19øô8àÙ(CKI .øÏŠ{³¯rg{·±1¶¬zÆÄHb2:j4w™^ßn¾Çã6ù]ÈÉ%×­TÕAZ¥&ñ2äÜ ›Þr¹ÊmSáÜ&;:¨­™º*(±Àƒ¬ñj„_YÐéÓÚöWèIP»{5ãߡޙˆXðm ì ÂËMÒn ð™—½hÓæ½ú>aÖOÒ*É:¬©¸¿/>i*TmJ@®ygtTva–¦8€_­|ï[w)ùõ‚Av›¤.¿<Ìâ• ¨>i‹³Àf52Ö•e#»CÉÓËýMš¥H àF¢ˆ_'uˆÞ*yþ óølÛoñTA»ÉArÕÓZ!㺵{A`MD§2B)2>Ã7MŸy/úW¤j*5tiI~:ë¯Z‚s §]çµ/ni¶üîþ™ø&ÓA:íL¨…:;@'eêÙ—pÏÌ !+U€¿fÚ¶W½ú¢}æÆ<~]QÍúâƒfF‚ñTÒ3mÒ눪„à;Lâ³S^µýüôª$…½QÔÙîÐh¬Q£¬ÑN8ÞÏE‰Ï,øå|›wé¾M@j4S£cŒšôŒŠ¥ªªÙdR<¬ŒÇO¿ì†cÒ{Ë Áœô`ujYn²%Ëyn¹bø­]Ý]$zﯽ“/?d˜]McÄX9*¸'2ðè¡7éÝ8l±ñe'Ø!Þ™IÒR\¯¡uÜ$Âï×m±ÿÙG¨s3|}Ç‘ŒÂx U> ÞчÒZz„_vìÈù³åŽ ¦ÞE72#%ÏØ4’X¹Ëˆñdö7T33bܬ¥—ÎÍ™öý!8ùHCÅeç¯Câ³46ë&ÓH|fR<™!µüò«×™©†º4@¼ìÆ$áÔ˜E'²3 ÖPÚ…€_EPÿ¶²ä—Lj‰“!‚^ä‹C{ƒp?’ä ž©$AU½™ÿyDÏßrÒÅvLœ•²ü]MæZû°¸*¬ƒ˜b™UUY Ŭb!i¹€ßZ nez ÞÚ__à¥7’µ÷7ðp¥-¹¸I7Mª2û G?“4$Ý”S:àÑU˶ƒÔèÄ£ÇÜú3ÜzcVV²°àaåMöö›S¼ñu‡•»­>­ó5¥Ë¸°Ñ«|?à8ûx¨ ™7/¸™³S0Ú#üRܲ/éþ(•%dÌÉZ˜Û‰\¨ 3edF¤xV%0H|Žò&ªí¹¦m·=芣Q›!»´ ÇûXÊ„ó—Tö®ípOL‘»Ê~L»ŸÌW½¿>A&´©*à^”ªF+1DV Pƒi“9j)?Ão=߯»!›·oç„@3{B!Ë €_:"gàáªØnÜsÿõñr¾Â2/jÒpcÕÒ~÷ýV.ÔÊᱸe0 íßüÖåûA¬“)¢Fôò §ÒäG£RýÄû$­Îb+{’¦ÌI$ë ˼âUC¾{Ïè$‡¦¦†Ž÷L ÂáŠÁ½&@æyîä´êJ ¶/NdCþÕªûf"•MGˆ&+›ÃE€: ¬dœ¼Èš$M™ƒSH·ÖµÑAŠ1”xçr>„™²¹b®¢;tDƒèÍX/j+/NäÜ ÄgÚ•Ós'’U‡KKê°ƒtèãÛMøØGììÛuLÌEPIù}(À¯~=ßé^"0ﮤTþEL¶ÿõ’ãµݾHê&óžØÐžlP@ûÓI°€ø”}ùöæË»NGÛ-:)åh¸Éµ¹ <½0U÷¢vï­tèAôþø¼Â%¾c È}•kŒìEkJ« ð ”½¹I$/»>ý2M¼1þsÔªV2àÖ«|?+ƒ¹s@[ec¹Î×yÑÚ;¢ôu^,ÚøáåÁ©,0²ÂKÏ­¼€kcìAÔF´œg¨¢àDevÅT@øU —$wŸ~kšñëFg[±h@O5‘s(ICtÀo²ë²]Vkó4¬'¿}†@öøé—9–¨Ÿˆí¯ÐlB\öäê;ye]™}¿ŒF>éò…µ¨åëÅЫ_=Ücr“Ô‹~Žfv"´ i¹€{UYÇ}– 3§®?¼™zÿgÖnÏpí;„ÆŽ4–Ô«Ë­¼+gÓHR€h,bl¡FŽE9öîõÕlÃ!ä9¶ñ€qúÒ?N‹å3ÙÜòû$þ€ã¼‘)'kJ p¨<µËðÝäc€ÌZ2¹äª;Üj{Ó|þÕÏí…kc)“tÜšê‘rŠû]V¦MœÕltEyün¹@)Òxüôk5ûËvIHˆÑX)T2 ÀÚÉö+]†ä 6c½š|fˆo.âƒÜòéû¤)áSûÜ_¸AéǘRÍÐCmE~Èi¹fÿò~oó*¦üw¸[ÝÐ J*À€Úç`3ŠC¦9‹x©ÊŸˆ+’ߺô£Ü­¾©~=¶Oò Þu&—š~?é‰"F¶gxÜÙ _“¡zè7lâeãQ´«FÍ8mÚíM]ð§ èªú”~FËUüÀ3åTÕM·2 VGýÔí Adz¤qAÜ9cÈ[ÊogS£Î”vŽP‚!ÁEŽ… q2Ž<”ÅàENTx¶Ýú›ÔoøêgÖú¬ÿð[´(rÝádI—)»jöž[~5Á:Ï«OÝ%ðAHx§VTÝiÁokÀjnª;øm ˜–}Â/”×òU‹Ð™rcÆC®Ž1ÐI‡½Ñàù5Å>ž6Uó•÷é±:ªå­ø¸x B¯L_±‹EÉ'àpc'RoÅå xoDDGZJ°3C.0ãÂJúàÜÙ³eùý¶¶+Ì,k·ÃÑ$ý®¸|€G´W 35qa…ïþ:øsÉP?Àï"¡dHY—q+±yéÛ^·t°d ¹T`.æLkJ‰Ö èZVbwkÎ÷ª&;h²ò×g]C¦Ì1OÒ ¸Å«”ÖKô]lmÀªœê²èƒät'›ôášùKÕd¢2²j\у$S !UüÒ\iß÷8t-SeÙÊð’Ë›=nöUð€z4ÒHs¥;?N ($µp†[§ kcÛû—Çp)i³jNÀ‹µÁ^á—‚™ìRãœ4ásïêžQttB Ïpó C†®h €3ÁØ{òí^u yV­ñP¬øª)BÌJIæ_U–æx†Sö_©òm÷z<3çÙ(†NôÜ&s3©ÊÜ‚ûÎǦöQž=û¿úp Šzb•mÙ¤‚®e!:¸^•­Ûh¥`Ì}©ª øÕCåû;Bµ›4:õD(à¡ë  AÖ`ºM>ˆu,Tf£`5?ýçñ:F|l;ºÚÐeº‡ÙR'øC bMɤŒÅ$´F<ÛÑHbð³Æ¨öuï¹²ðQñðÝ þ4(žÔ¨öèàùI+ú'‚ˆØ_ÙLæ|uô³NÀ&¦’Ú&°SÂd@ÕœàV^X±ýÊæùKIi€àXÙõ—•ðˆWÑM;F÷£üÈ\I§ËتùÛï•¶ÂPŒÔvIøÿöÁâ‹*7)X”,;x8"àa~çp°n{x,¸»¿êÈ÷y]o¾“‹(!d jVáãâ}Â@YÒI·;"É'ô ã”¥+Õ8YzdðFh®\áNmnM?¡u“z}ã :7P±MeõÞùþ)QTê9P¿Ë¬Ë$SÏêúFÚ$/§}ó/ò µgFØïêß!àuž\‘J”ú+¼™#A½’uigHŸá¥—70ÇDÎÖÁ‰& K*ÃE> ’쾜SWpè»SI›RæÊ!0Ô蘬àM8:Ôƒ3µªà$J®¤7O8¼cnÞP¯<áWŠîýÌžYÞ˜f(ýΈ‚˜ —$Æ×Oøí„ÉŸî|—¿ýîZ,uFνêæm¶®E¦Û–†¨ªœðHŠfµðìoZ˜Qçöó¾ÁaÛÅda{Vk3?4÷oí_»Âà&7l,éxúôÐIǦçd[§&ä9N8=zdcö„ÏÍÿÊùÀç¶ßmdãÜWÉâï/Ž,éØº"nE‚š£3³u¨,ø­MæMé%¾År‘ iL ²‡:ô<¼‘ë¶¶x„ÿ|?G÷¯Òü«ÓaŠô´ÛP‡ ˆuŒÚ–_ÀÅädMðŸ,â\ʦ§k븡ÙH‹ÐaÉWh¢•üžI¼y,uð•»rgÁ¦‰KN§<'ÌI¿#sÄUÝüŒLò/˜uæYw<ýVê¨PᦦûVWŸµB Äå°ä»^•1^Éaõ™›ÿ•NŸpHÓ9e—o±ëÎjôäðëÔNÉmÿ«é8Í*!ä9"þ鉩{$õ€0 ²™rjþ ·þF˜užçµoF¼±-u^•§À›¼±aåfj32x#'j<ë _TX¦Îk­ª(ïä!öWLçÃat£¡™Haî!†~d%"ðá!ÝÝÏ#ïô‡ùW+"‰Ì|Žä×ñÁ®¬*Ñ^étŸððªâU°³-=Ã=ò«I>øîÛ6[‘—å} õÊAnó]ñý·ì¯Z×ežÁûê8 ÁS&£¼ Á0Ä"Ê¢û3ÜÛ+“Û´øzò+T©$‹=†üÔ§¯"ÓÉʽ¨UçO}‹&óS¿%/ÕS·ýý„.ý[ÑïgfêñÎåO|àãnLȇ˜œügT;¼m<ªùWchÌR®©‹Ø!ÆðÊóW˜¥Ïªx×½d$ŸðÛNÖŸ¯er¥Ý…*í·§âþ‘ü1Í’ÜUɆí£1Õ¸¡6SœvzÄ«'çú ·d$ù+Y]3 >¿ã ³|LÙ~Êv,¦&˽u¹ÀÍÊKo¯üi[­r™NäÝMíŸ÷ùøœ¬š–SVÁv Êcµp]M »=ìRú:ìj1T?JW{’ž ZVa˜šNí¹Ky†[µwÙLmö­0qr0/‡è'~ÝúàüúÄOø%TIóŸý;‚01ˆØ´šŽŽóÂbu+/àF¸úÇáìðŸUãyIo‚ò‘Ÿ³°ÉÖ¢ÐA³J>À/ëÜç†ßŽ›E‘3c„É´»¢Šôj¸Í¬÷OÞVÚéNò¹˜z nYV?ê9…™ØkèÏpzy u›€Ï9˜ÌBò¯ÈÎXó«È«6ç½1>³gøüR×ð*¿üÝt§ç#rÞÎ pN©¼ö!‹RRõOREö’䃀4VÐ&ˆ:AÛ$¶?äcâa›\‰Å$¾ñÔ¹Ìõ&]ge¢žaðKn»Çt,…Þãb#-L“‘ർáÖäÔJßïÐA=«ò %1j¶þŽ˜acî ¹ägøíA²ýjÞ,Ò­`˜¡ÇP‹žçCF²Ð÷ÔiH&S wVâF‘“«+ú4-/DÏÊR}„_iý“¶E;uõî_i®YþÄŽWJ$DÆPaÞ"dÎDƒ¨Ø”öž£²ÖwRuù[oòÜký´-Ùë“í™lU¥›1q·+Þë3üaÏ,jéíUú‹Y›_à^Iëa&|öüéÑßµi»üÙ¢ÄS"Sƒ%2Éxšµá<šÌ|;&éÉ7uÏ€ØZ ÓaùQÁfÝò‹{ÚÿnànùMõñW+m켎á¢#S"©½¸àWZíúí5•ö¿ÐP¼m¦-°V»±ÁúK¡V‘¨•™¶˜¼¥d›iœFÉÁš(ê9.g¹3Bü³Ç%Ñm`›Q\ÉE…y nIÒá ÙœôlS¨½¸àV³Z΋(šKefL’5@H3f§,·2ˆ¢•‰b„¬BéYïÅ$ïÅ„~ÂÞÝ3ÚøâxÀÚ¼RAÒ¦Ný¿a‚”õ‹Ü ·#9OÛâ‹-'”â"C3rtfÁ"$.&üÔÜ'®•5ÉO_÷Wõ¡þj¥êÖ™´¾j¯î‰i+•ƒÎØ*—Éû"d¨A:¹áK(àA€.ž™–>¥opÇBõO’ ýBÉþþ…÷w¥ãß¿üºÔ+ëj—._ܪ ð±úx†_-rê'ﯖ¨…1„õö[}eå»:ÿ ÚõÉrÿ<ðᮆwpÖxàÃå|òáˆJ^R×A†d%„Ò­>ïêØç"hÏð (Õ͈`þÕ©0C¥ãtÂñ¤N˜}5‡iëÃA§.MÏèY~ÈOVâ”Úgx±ÝÐЩËLÓSYÆœðèòe \…dr®ô#—Ö¥ó¯VU¥ó›«Kàÿnà·®¢Î]Ùºƒ'°•Ãj¿ò<`ã³½ëa:TyØ Rybâ>²o?@M Ab¾j¹À­ò®gcޏ=ìjlÖ;ó¯ØpÃ_w;ÆÅÚ¡1’\ç·ÒGÞìÛÝ=žê¶½ËïâÞn1TºxKöꥯ¤ê}9Ø ‹¼»ÁÃòü/k-'&i% µé^:ãw%E‚)·¦¾õØŠ[ïl6‚$)>º:÷~ï°ó³7þ58Z`Lì×ç:WsÛ€_;Éßßà ÞÔ ’a„š‹Ph?áa¯ìëÜÙŸ}Òä-CÉ Ý_ÉLúñÆÇqCJ`æêò-©ém¢+?%AaÙҶõéÐÈ$*ÖTxRNŽS%Ÿ>”æ×rˆœÇ˜šü\Âùÿ¥Qþ嬼ŒW.ëó¨öÍDs¢´æjR¡@L¯t>ªððÒ˜V•ä1îÈ\Y‡œðëÎøþU+Ìÿ"ôwD™EŽbépœY²Œ*08dÎ/ôöËw7éO²äj^Fa䀒R²€[*lA ÁîÙßô±ý¶¶ÁQ#Û/IÍ<ÀK"+¸¤ÖÕ—¿˜š×ú.ÐQ@üJdª+EQ›ðõ_Á­ö`>¬6²dñ‹˜’ÎPE Rî/n©ìó¥|ꪀP–IT›ïtl.ð¹8’ú«Õ0f½è*7)‹–;‹›ÊÔW“Žß¤ºC°¤¨ç" ©Mȱ¹²V‹§kfn…cŽ¥ï´5¼BvY)C¾p8íM(ÙGÛ=›'Ny¬ÿšš ÁâÊJ”°è•ýqõÎ4’mÚªjx…”¯cd_Od­þN¨|Ãmÿ€¬UY‰ßU¥¸€GÕ3¾W2lK’aÞRdfǃ†ÏÜü•²k;æQ·Ó<*êÜ#•;eó&¡nù~¹<í3³Z|´ƒ£Ã4ð¨™K]ÚÎÆýå¼H!<ª²»òÆ"‰Ìh™„’¥ ¹ÖQÛ« 0£…þµÖ=ž›çQBu2yfÿÒé/àQu6†éŠÊ·ÄRg$únTÀË!ª»Á×½V™ˆb•á”欱B†ðÈ%ïýòâ"ýÅŸÕ‰hq²H ¹o¢G›ïñÓöO¯¿ž¨^¶NüÄ­ÉØhÁ­Ýó¨ŽÙG¹6»^›)8hX žtŽ›ÙDd ½ÊôÚgíþ¸¢?¾›Ð>£fÛ¡”zNøÈlô8©ä`Á#Þ˜ ýò‚}ò¶/ãt{c…yè/¸%âÂí]Éó~ë¤{³/Åü ¾D>ù`'Ë'ïzÕ=D»à} {:T~O?ÅÑ{ÞB‚Àuël¸mÈG·æ*R{ã_1_cÝi—%NO¢Ç(ûÉÛ?$ˆ¿?ý®&¡FÉrÍ/xtR“ɲ2½àA¼h/_~fó} "›-åD肹ª"nùª%ß•ÛK}ˆn÷ ¾¢€Déj¤pŒf>|ù’²í‚åÊiÄ&öPGT· DÍ‚,Z—S½€×T^UqæŸíd‘úÜ`ƒPÊ"wÂÏ»ZÚ‹æVØØô tU b¨ñ ÕŒH>n1<ñ'½j(~:ŒîˆbÿܯòýÜ ( Û¡ )Xâ ¡$& dÅŒ±¥ZSï§A¥•ÍB Yd€ƒ«sÕ¹ÈÔÙÑPí¯l¨~b¹3€Í‡Üí§lzc0-] ®ÚÜQ%k¨Ë{­Ùÿ¥ 3/ßòÕу3¬Q®R@¼$2nx­Ðÿv$ FªwY¶*˜äÊäGø%â›Oh+'㎠½™ÉMzº×2]‡!+é·g¿æ%g{ÂÕ̰y€*÷ø‚×”^œ‚Ù[«_Wlëº_õ´ÇÛ=×AöÖ*.sâ˜ùpÁCUŒqQÝd tÁÌ…üÆ3œÉß](Ì©—϶6ûÓ´•~ò7t}+øðýèN©xbŠJp°JÙ_­í×ô/Y±Q²bò a¯S½œ0å ÷»ÉÔ›(¯Gû ”NÇYI/é½"¬ÀyGªä ²`$ï½™¶ºƒ[nLr?=ù‹èý|®›HÞҟǽíåOgµ_ÕNÀ÷côïš”¦t{-³¹4S2 \ºD˜|ÙeÕîµ£¿Yi­Íç»™Pñ’³±³¬Br¨•1êF4¥PÀ’£Â¬¦'çΰRÚ ð«4›|ÌûXúòÖ<üEg`HÚ LuK~SvŠ£[¶Ó¾Æ™‚?§bGõdØn*µDäx˜V\™âîNBÔÛ¥ ³O!ª÷ºÛrÚâÕqGm)±wÂ+ÑÖ6wqÁÛ)»F ½˜écpˆWªªÒ¼š«0páÑOM5Á§O¢ìßùÊ´X}ll…Ž›¶]~ˆÞ½ÿYW„;K0;,QW–I€[¼•øWd_Á¨¿GíC~:l žÙ‚G£ß"ûv«sƒÐarWs¢€_55ÏMÍøî™°¿]:Ñ,øÏ*êØ Cå² ÔÛJ_ÉžÌouH`ùA±¤ôÏpËþFõð×oÕCßà§ŸŽç¾ÆÙظ”wyôdh)´7÷šEñ”nù$΢¥Ë£'Ÿõ7f&–ä‹[i33þÕþ±vËÄËó¨ÿô¾ýU—·ßaŠ3}Â{–»l<Ü‘r ®ÚÈÈЭ‹ÕOøOC­ôme'å-·ÙeAcÍ×#ü7ð’Œdˆõŧÿ Uj®Ÿ±]r ¼U2ô†™eö!§ü·zYà¬ÑÇPYg­1©w)ø­™ìЇü~Ù3#>¶ ‹W*•ÀQ +ƒZc&wsTøõfú»cË3üjÜóý `ðFÌŸRV'¼³ÑyòÝzÑzXÝÇq–»ØŒûós×òXÍnþd‹}—©R|«"Q7H¥±âÖÃya -OpØJ3õ†‹ÖÙÿnॿ¢̤Òö’ª-ú\Êä@.YuêW¯ó8+I=Ë\]«§Ë,¹Vu‘p6£ô3S˜_r—q6ã˜Dž¥\aÐþªŠ¹kà–1åŠâJ»ü„×ò®¯_öëéÿ7Cu"gª5 x´ñ†ËðÛ ,mx1ÛæŽ%q õÛáàjÁ¸eª²BŒÿ¼ÉKî´Jmÿ2Êg‹BFáš_µìæîMò—@Qš0l½(O*À=^±#óÌ >uK*¡ä•©…¤êm^ª¿“Ámﮘu^rlG Ÿð»þÄ]Bmu'f[œƒáŒ¡$"7#YÇ  Æ#üâ<3ÜÁi§Åç jÁÂÓ &78vyÀžL…» z%YÜ£«æ-ÔU 2J1ŠG¸ç7åùùÊ'À'+å):)¿¹ý^¾ò²E›á.aÅmÜú+%ñ¹ÒƧl»„°BÚ1ÑÐþÊdUÔhÀçéøŠGXóÌi÷í•{^¤kÉ¡|.ð2HÅÂ’ÉÝ‹£ç—ÎÏêo·ü:+©ÈF()ƒlZ!¢`^”8‡A6-+·èO‡rL5%7¸ûxsåø\¥Ÿ¾í¸Š:3›,}øí«Rå¬Ý\“?Â/NfnŸQ·¿zP~¹ 68n~&Oý<ˆÿÃÏ[µ¤üU˃˥>™[ÈÕS9Í™ÜX•zå  .Cj¢Õñ*&žqËîżڦÇw$mR¾b€—òNÛæ“ÏÛyÜp*šÎ¼ôÕ{‡[ycý9ï²™'orE96¶3¬+ž§–ƒ²ÊUùzj!ËÔ`Šõ 44ì-¿¹r²ÏŒ)¶ ?\* 1­ËÒepXä=•©kŽ]Ozʼnó'’™ƒùè䧯SaD±:jDÙ­s ¢m,™Ñ¼{=+9,_t(¿¿<®[%Ça`a1C{×…üìx¥H{p\óvnvԆɥœªìÿ€Ö•M²êU!šQžá9XÎ"Ý/e[nã«¢Ú±ÇëÓø-üwªï‡3ÔÜ*q=HUMiN=LK‘ W¿»ù‹÷lGøIG«$*•Vo'œ©â¥¦æÉg¢?8”G^¶OZZ&ÕaËb e¶6¯N‹ÿ»Cåép>Ø)eË 8¤\ïM¶ˆÁóþâêιٗ#‡uÜü¤’>ƒRuô€5Ö y"¤ º ˆ0Ó,i©a'ÌYïXJ•{nÕiÂ/ƒèc.Îít]¤³’X)âNMôwf:r;"{Gõ7ì¡8,Ã7æ”Á‡Óœµä’\8Æ‹q”qÒW ¤3Æ.žY¨|t«È@d¯ê¶Ù€Ú+Ø“Ÿ¾N…œ˜’ªõGø¥Úßó.g|c»w¾Ü,nÙü+q<úâ€YD¾ýމüò)¾Á׬â!jq€»¿RÙAHÙ“B‡''™é6‰µœ%uRC¼.vLŠK·TÑ{µ{ŠÒUó9(gæaÊáÙó©hAZÚ]õÍšm•øK‡Þ½ÐlcƒÒZ“ð`”ƒ4Q¿e &±»¡‡/Zv2|Vò!  *|Ùãñª tô¥>|IGÜ ”}Ãcû‘gœµ úâ–yg^ï]ÍÖ8œ7;°.2 Xð2˜gVQ¡$àó¿r|˜Ëaƒ½œA<áòT5¨¸Ù+[rËóNeƒ¯âagówåÈd_vÕë^ð«ÀDúÔ-p(§m¯ÿKà6Z_ˆ¹«Û xKoÄÂZ‰þ±ý˯@ø a‘œr/ûP”Ãѳ°‘¬òSÀ½¡(JŒ÷„öF\ã0?Ù‡c$¹FNíÒd8tjÌQR­¼3`:2êhCES·† 3oL;©ÖO*S±Hª~í Ò™“°„|?à»ú#㈹~3ù¶Í*Ý áм¢\=¡ª[r3ÎQ'—ÝoþÞw9iá. Io›jnNŠ».ý’ýV‰nfÔm¯ð;X}N|×r–Yì‚çJ”r“i(„ìˆÒæ [ô:¿c۶ߢi[x~Rƒ%ê&?dUBÒ+i÷:¯â]bÈ¡–çLè&+À-w¢@àýþ³Ù{JŸ-Åó‡Ñ]—j­î§ í¿Œ@î-“Z«’<†¿Rœo3üÛæO—™Ë1dÄȆª?ççôÌ#=ÃMR;ºΦð‡â¬îc¼“èš‹cc«¯áÔygùKÎI@¹!¸¥T½2|L*=çZžá¼2׬>Â/Ćb{çÎA•lƒi• ¡ƒÅÈ„XsVÃ&€ÕöèJ¥tÁÆ@G´m1¨’¬÷œM+"cáE¦žÐäY­í“IDHÑ‚E'âŠ'_€Mtvæ–ñg¸:b8ÔÁw¥Ï¹$¾dâ<ΙKf™C@߯ø›¢ÌTgä;ôý왼ô§´æmk‘9öüþÓÃqGÇÙy‘a棳«%;$ò}?ò ©˜F`óNCºx}0X›ŽylúÜTÿÕÁˆ4æ‡=R}†{b>f’fí·F²¿<]×A| ê ¤¿#¨SãMõãP[ÞY›^1áKR“£¥€‡)*‡Ýl'¦%+“/‡í2u¥²xaYVD{†_ҤȻ®°Ã/–Qg:Üj3ãe5¬å°›5Âô÷;ãÁ |þˆ7îWÂÞóže«"Í w%¾êÉæ­¸zEÊ4Þܪó»ôÏ»6L’CÅR—k"Û™8ݳ7øÉ(fúñÊ£È;†Œºº@:*3P”ïç4»}%­Sg¦òIÛ†ü±}¸ºA*„»1ã•€Td[_•c¿ÝZ›‰´›ÝÔCXÎ2Ó Qœkã. l- ¸åôjP ‡ïÎ>¾(sy°Ò$‹šýlµw¶êTÅðN¬+¢+d¿u˜õC×dïrÐú(›@wê!X×HAʤ‡”ƒ˜íM>k­»·¼Ÿ¬@âž’KW14êœM–êxfÜ¥Íe|mþñ0 ÿ°ùÇ9?’íc^ y«g——H³:ì !£%N”šð xa~¼sÙÈÕqë ›¼|1R w—ƒéc*©@Àƒ­¡¨òö»u…=¦·?cÿŽÐºÈLÚM–Ç9lÏt7‡?ã½ /â·ìÓþå‡ì<üX‚Ç4ꮌ0lL›:”«2àñj†ùWm‡Ÿ>õ„Œ&?1qc+Xñl‡@ÝCàà3©Üy6kêp eˆã‰Eس2ȼ“©„xÉÙó>@TÕ­ا?ƒ£–žálDðR=n†ýѬÚ`u.ùåW3?&_&L¤2TÙ6:êD³}Í(·ýà °ä˜u’W%ÖxHwÂE‡8œ(Iä,Ù8€ûK6N-yOÇ’qÌÔ¢T•OÇ¢¹Ñzîà †Å++¹=ÁWR8ˆ¹”§¡WÆ óh!稖5ë»þËÈàÆãÐ#×ð Oþg)â°Ô,mƒÃÙ´“O7Eñ °äZy4åTRÙ-çâ$°1§> ¡f¤Ä>á" <º¿QÁŒêcïD­Hí¿â¬º¢?}µ_ßip–13¦-ÐYëG!„Ô‰¥Nœô¹xeegÇèü¶l ÙæL»ØTí0 ÙV73º„£3Úˆð²´KœÛƒ˜ÌÝ] zØ@ïéÞâžõM¹Š$ã43µÊbíô ¿Uùó/T‰ð„ö„’¢Ç­[ŒÃ hluιÉ;æî^“rÎ h¶9±†³Pê€ÇÔ<þé„›­)éd5ƒ¹à?¯nkõ3¶sh‘ÖJ餚<ªzY†‹Æ”[†Ú '-ر©½¸àFm¤0àó"y3c1fóÉ[Ô]9¦[–¢Èß(¹‘ ©(ÕÀ=H®z#?ý¢¼—Ç^—Xïܬ‘ÕefsŠ×‘)ïìўᙵ&y¸€ósHšÂÆ-¯'K_!¸t93%|“‚œŸˆoÕ¤Ô5ã–K7×—óy,2Ü ûáßjù3ÞÝEdl¶¡Hí‹n|ÈÖ•EYƒÜiÉy——†ß™SÍ{jì~•qŠõ=›b¡Îs?[gDáëNölûog­-U^œ·ÜIÜbÒŸ&N ARs©é޾yayŠr=ÜÑtñˆçO¿ŽÞþþ„ÙÝK¨ê¼®ŽF‚â¦d‡ê€j€¼n90vYf[p+¯,[ïñuÛƒ£Ç&²+êS@*°ß›yD¨û6²®±?$ê§ßkÎuW¾kÍO'´ˆ$YI€çP„Ê€†`oD^¦%ù„Ö&í$ä‹¢äÑüNóm›‰S*EMCñ·Ö³‰„|¹e{†3Ð õ½µOßîÛEMË8UkÚ2à% ¦l•帋 J3ûŒý¯˜ uÂqEÿ (Vm­€•ë`ŠÒKp/ãÆÐ çÛá À r›d5þK$x½µç¸Ào½:þ$V²hVï&mf(k»ÆÒšK…0aMZéE}ð’Ìáö ·üª®ÞR뻋Z@ø¯“\¤—$àvÞ¯º“=Â/£L¹~êV„K®…Úr à 6£²ÞÀÔ”VÈPŒöJ¨­–ôyWŒá×Ñd&4åj(¤‚~çŠ\áëZ2meÉáºío­Å#ü:Ÿ2ê²ýÕÚ¤A ØÑL~jò³Œ ço1ùà3ÇØ¯]ékVèå±O/®ê" ¢‹©ÈßÅ-â ÍhöåA'°7“'G¦ž¶Ñž ¾žHQ6–·1ÃP%‚õÖUÖŠÉí-[éc.–tG\ñD+ôòJzâ—c¢¸{ÞÇ6+(‚…P8ÍUÿðƒŸù¦Œs°Y7© !½Lй«Zàå¢ñýW¸¡YÁð¾]Y`1ôÍ­Éï¸.õ¢äìà|*ÄÇx„ÿ¬tõ™½mŠõ”ë#ggS«tEw¹"*ê d†MÇ@ &"­mIÅç'¼5x åqYÁ7•Ø#äo_ö»^Tî–>i_‚+»n•¢«A…âÝè¤Öõü pª¿ÊXL–_•â+¤åŒL]×$ãsCë›e×E‰ÆnAhžgaÁ/€QÛgÛevòSÈü«Q¼¦ü®_63̾:ô¬ yB½ÊOÇø,audY<9áŒÚSºJÎ뭰ݽïŽd<7_¨ nÀËx%Ky·ïºí’uñädðHA¨ª& ªA\Ê™ª*žœðJ3#—›ÿN›Ê=Å®v^ýã&3lžÕ °àŠ}Q!—‚:©uîÐÜÎodõò Ôü³ÿDôíÙ=jŠð«¥û÷_­Âzf²ïÒ´î„·Î|ߺ=~ú¥ëÙmg±¬f祪©¬ ßÞ»FŸ¤Té«~+U}—”Öï¤lºJ½”EàW±Îï¿:ݼîSW“uÅzºËÂ8wD5ä^ñÏLíY»/îÞSm ÇÜ3uƒ/ÛùÆuïb¶¿ðSñŽ™MI9SÀé|™KE]À£õöÙ[;¹ºÆÙ$n‘1õ" &ÈkÒÔpÏŒa/m³ü: ÕöY¨ Z¡YO]† îÄÔæRÔ©3ëß<‹“‘fn‘wN`‚¡]ç—¾áÉ2Æ×•¥íwor7”HhfC®¡†ÊÑ+gãšÓ'¶CÖÄd¦ÿa¼p˃ ²E†ÇK9íCdßöÕ¶0‘ø¯I‘È*”ô‹è‹¾ª§5q#÷.kMõ®ªyˆè|Õa`œ é̆²ò[ñàR0“—*áÈËȼôg¸7#;?dž<ÛÚ< ŒI}Ȇbð9ÛgÂU>¾¥#Á ™X·!«S‹<˜k!r"I?ùÕë(dŠқÜãÍlïww¯¨à46¢v‘CöÜŒ)>˜¬X,8¬noàÍᕺyuoìÙ }@fÞE†lÐ4"ðr^dÁFáµÔ}€¼‚I²™.9à%³œC¾Åð‚”M†V€·WN€óªî»ÇE=¹¡„V›º,·À!º§7¼Ø6‰@Wë³$¦ÈQ²Úü€»LÅ7´$ÝÃï™ ‚†g<†ÌS`Ý*»'C¤‚k™©±6´p ù¦iÆÊDÑýGÃk;Ç©‚Ô˜½ÿK–ÔÀ’ ]›,Õ /ÙIýn(‰1À_ÿ.­ÍLò+P¥2û}¨’†¬ª€Ri~{Â\à^ò—°ê柴•>O²$k}‡Òò®prfSY%)é%À­õWuÛ–ónP!º˜Ë+¥êÈ3Ú.bˆ.2~krúp§cCM¿×{'çó¬Üߥ ü¡dê|ƒ0¤Éýsê?²D0§ú &1E+YºÕ‘¹ÀÿÑ: 𸘣ÞgrÖíëÂÏ´1η."•„‡5c¹Ò:‹7¡~Ëñ©ûB¤C¼(Ìe¬±àQœ),):ö‚_æ­¼ìŽËrã(“ɾ1ÔâË•ÂýuÁVkŽ Ïþ1ÁJÔš²´ÜšÒòª§eaí6™Ú€Ìj¤l•»ÄÜ2ë$gÉE:áõ ­Ýì°^Û0X®]…’1ÍÒ^é˜T¾ª5‹$„¥Ñ%™aœs²:†Ò¤¼=«ËD@™¯b‡¯ã±±JâPâÉuÀä…(jxMå•)aËãÓ·j Ã–ÿ[ ö¡Õ‡k ³^ ?¿ëX7‚a¿¶`ð+ òüRéÍ}w?o É&"óXj74àpY¸ÉSLþö{sûùä¶fC;ý­¤ÝÞåwD8ÅlOï.Ï Ó/õ² „ÙmÆL^l§f}W굺÷¢H²²¢Û &Y/ú'®:A}ÃëûuÔ¶wׇÿešC˜~ ^ )Ѻ\Î NuaR¿ëÚÌT.}eàîÞq~ý!É÷³¸*+Ä„øü†¡XnßO}T`YÝ[.ÿúC—Ohåµ½’øsK»4~ƒg0jOQ /À­ª‘¥æ8­ Y®Zw€c»=•;çõ¹»g6èp²} Åë|.º7±o=T@c[›"Aô¡Øí$õÆ«úEþмá‚Ýùk2{[ðëÄÓ÷_­b«1n›´Pܽ¾‰ÏËH}åh§Vh°àUÖ©…L*Õ«æ­Z ì©L¥Uu1hµÉ¨Ô‡Z›°žÖwä©ÃIFJVlÀuS{­Ïùi /ƒWèpK«k( [ƒÂfm¬]­š¦­Býß©¦F~†ÛÝøíŸ//{½5(}äÍØ¯2ž„;•{‘?qmÒF4i¼éïx×Òèe~žåàØ:I$s‘µôŠz¥¿‰ÆæËŠ}¼cËZ9)‘ÀiSÛKËðËiÕÇîöÞÀÄÍDÙÁ\¹Þ5Pi9jÝe5ûÔ÷¬LWBÆõ¼í ™UŠü·{2kÌ+klñêb£æ;©Ñ?×L“'¼J:ó‡SÓ¡€G!<ÓÛ ä'ü"¨8¾ü¼ø 5‘m’”øyƒŒçLáLžç'UÓ˜s¢«”©A°ïæÁ<韱 €&îzQ}{À1 ξ#Ô:ÜÊEÑìÖ1>—`oÿ²†`]=ˆZgMúËß•Bj³ö¸7œ„Á£}D÷Îç­äk¨·UŠžwÎwkP:P û¥o/ O)äË‚jpyåôqÓíZ¶42y©[8àÂÊùGîÆ&_ºò1<Šr@j§ŽgP™pÃÐÛ¤ þÿYdìQwÒÏZ“‡þCcåù ‡;{Žú5`‡ÌIx—il}îf9£¸îÆÿR#ªYyè÷sz’ºbVÓS€‡§7YV+»¼uƒphqrÜô!W&û˜çòeèîWøµ(»‘[kTÇ@ ge®ÈVË‚;꟱~y„_ ׆å´àW:E4)ôÓ /ÚX·¯Ë§½8‘ÿ8 ¸3ýð?%üRÔ)¾O@´a×_W£¼mq‹ùø—n¨­°£VëõUÅãÐ[ù^ðddÌ’³ ¸gea´d Q%ÊÓ ¦µ3§Öñ ÿâ_ùH&qÚPR¿€¹M~.Ál3QÙŽ¥æD¦ý«Ë]©‚$7N+K&]ÝÕ“yܘ»Ü=¿©>ÎësìH‹7tpt‰Š´tì VRÖÏM ÉôEâÌ…ë÷ŠJæ¢Ü…§¦W3˜_Wø…Éëö Ûþj‘8ö5u+$QùÌtu/.÷“_I$óÊШì„é&ŸÐj|D—?>cÌò¢*¿wÀKóWLëÃÆ÷÷ÓÑ]!s,E5Ï7FÏôèõ~1yНCt •rMÁ:@â„YSG)¤#ú¿ivpÅÚQ›Í”Õ*¿ã‚×ÎL}óx†[!± wÅEêwÒã¿ÔP:(¤—ñ¶¿cs*˜û«KúƒÅÛ3<ˆØ¥|žÓWÆ]ØÄüIŠ~B˜ÊO/&vóÑ%ÞM±;taýqVí·üCMmŸ‹ï vÒ|¶¬4÷Ÿg(yò)äâZÝ;&ü]¦]âãÛÙ6jf¶)¡è«Hs\žl’Q páªmÒï ÛÍ“¾}å×™Ùœr¶8á-±RS©Ïð«i9¹¡gLœ·äàäØFK2*]pké•n¨[ómZy‰•ÊíDåÛy‹w'¢ ¥(µÛåNg°])¹žÇ+ñÿcdð«™z ©^=\Ú¡Ê"Ñù~$|Õã-‡âìRŽd…Ò‡4*”“Mip%;kgÚPaÏÉ•”è{6ÂÝÍUö´;³ˆ:'AÒ3üZ Ÿ²u`:ü™úëòà? ˜;K•U ªŸRä$çi²T !Íü<'þ;[ ³Í;ª÷s›qº¢Èë€Óyèi÷xÓÓîŠ ùo(þzä4~Õ;ïnåRÛo93œ+;§±CÊòÎÜáO¸¬HF€¿ÌoËý+¿Ù±±ü¶+Ñ…> {MÔT“´ƒ<3ÂldIý/¸s/¦òÛ]¶H”ªÛÇ.i㛤×!,ilÆCWUœÍ¡\jy?úùÐ¥,L¶*dûT†Ì¬ž¥&ÿûIP$5oú·£OŠ¥åN¨þÿGrÀJ—&Só}­/Ra"ÚŒ7:sß_þ´]}ež›Ã>¾à$ö`“E!ß;œßdDNâ RþZ²a€È JV«ðRØ©mjú pgÒ›zÌuÁ.‚Üm7dXDþƒÙÃTe»|B§™l~qôÄü;7z€¹8È©=s¡®0ÌÛ™)›œ_.»÷“Ë¿þHA¸‚WM30i9À÷cÄn7e}x¤ôFM!Rmûü뀯úpáŸ{X1³äÍàá·Ãš¼3çÄ»jçÇ4»n»J0Xrln3W•[î² > ˆØ“NoãNyûáJŒaÜòÔl†I_›?Ÿþ™d±J‘zœþçdIšü 1¾éhä˜gGÞà§ä*³ “+Îæµ“¹ i¶3ò©FrŸŸ¦ª¸¨€ç`,³¦Ý]Dþ«yËŸýõÂlg°aÿ!ßÏê‚Ñ´½Îü|ÁAŸ{Ž~‡¤QvêàXô¹7úœ¬“'¥Ä‡ ´ÎjP#ÉO3û;ÀSkdz©H*à^Ug@ÑÐî+UÛkð™A—Vü3ö×EÃÌfùT1ð·‚8¿»–uƒƒ?ÊK–Ÿþ^“¿á?\@bƒwÝ6yZC«T˜‰i•Áç‚û1Åß¿‚ž¢qyÊpfó:€ä'Þ "öìÛb ¸œ3wïŠ)xXRá.8o—‰Ùÿ½á…^ceTÅÖ]ðëŠïSFÄ:®­úØã/±Ž¾,µã®ÈqžqÅœå_­Ä— ÙFÑ¿d Ñå_Á¯3Áòðµ}Ó á‰d¦¤‰Ç"koŒ ¨4‹ÇIÖb‚nI±ðÇb[ÍÜšÐ2†j­¡,XYÑä—7Ò†8§ÞTƒðâlD¾©ùdÀƒœ*?ÃGO¶«R ¨62neRJðy¼’áj)03îÔóáûýÉ[·ØV‰£ßZƒ]à6ª¿¸þúüÊ»ÜßXd-×9¸Ÿ}aÒ “5€ªº(u¿eÞuÎqÒ-‡¥+ÅÉkðý€1ûF¯9§öÉ[tãC“rQF†€{!OÞ¥ßç‚_ø‚‘ëÖCpú6g"J©jœVÝÎ8Õ÷¼¸±VcRTÀÃîÕÉ̪â[ÜamÖ®(€çñjv~FƒñU[¼±’ɘƒöˆ>á, q×0oûô}uÀén°4)ËïIB6/‡‚ŒÂé|WÈoÁkªr7ô'ˆT[• Ђ۰7EŽÞFìƒ Z…c³$cPØÞèÚšÒæ5àµÝÉX{456½¼"æá\ûñá½wߤŸÇÉZËŒ¦ û‚ûP£÷B~F>dæ„êõžB~F&{‘OÈq@½c$º ¡¯ƒå I¢Ê#b¿Ò ñu.ò|o,Ê «áyÉÍðb#¶®Èô õ²¥­Ewùz;"\Òa2¸ßt¥¨;ÊŒ ¶ðt¶Ffl‹Ë2÷©ð'Óãvv™H &õ„ÀËì‚7å®xØ›ÖõQH_!P;•/‚Eá*>UL—ÀÀõJ$ÑH!%èÆ»w.é3öŸ¸Òîʪäú_p#žòóÉˤÁƒÔï~¸“}é?.IàC™˜õ¸ôÚ¬8]É,l—M‹vßQ).žÆ§nyJ;ûØäC¤ÈäXL3O…myDœÕƒñ²p´à–³ÖruÜñùpµÙ™¢~ÆÂ´¤„ Ñ^ôåà"}úÈBí½-F7:\‡ÜÞD­”² °Ó>ÇãNUo>ÆÜw{ú•ñCå¶Æ¾ÁÑ;#’Y>Ô¼Çê›…9¢é'¥÷/Ô_3²]™{€uæù_æqŸ×"ÓÆò·ß*¿Ìkn'(Ö%E|ãÔÁ$ŽM¦O néUdVÍ<Ç¡{›Ú­ poĨË{´GøÅ·ñK=²¦“‚¶®îy¾ãŸök§úϧoøçú³þvoN<ïÎÍŒo‘íe©•qÂkŠW~@V÷1ﺦDø— œ£”†ã/— ÷‡F¥&ŽÁKÆ«õÜ3é­\‰¿nàsû…ú n!± 14w³±ä ðÛaý»î|®Û=Œ^­Ë _âpûä/ð§×+fý®Ä„Oxv6jVFWð @REïÞ“ÿCDSðŸo1f‚ù·ÅU˜€%±›4Ô‡¦ß?n“|z©mcfª@漣»â¦G5—í¦g]Dù×Tjê˯h̉ ÙÃ:_ð§çˆ$‹•‘Š‚ƒÄϘÎÉ_À#â8h¶Ñ·iºš`ßœÈI}Ëÿ¹Às%J7OEX¦èEíq3+¦óü+°¨(OÑnÃä6YÑX‘×êbZ'R¬sÖg¸¤Îê|Vÿ­rªl‘âp‚ 5b$xÍ#ê3üßjc€ÿ qkßÇ¢êŠ]îBÿ<í¬^rºjXy„ÿÌVç ™?ûƒÀIÀÌÁ³-L½Ú3<7C¹‹ZʧÇÇ`S™0UÙ;áA<:~ºžˆû§ƒïÄ"’l*X€°]&§`QŠÒ'Üê`JñâÓ=É€¬OÏþ/EÇÀ!i–ç–Ê3ÜÆ½†Îšwéý§mûtP&}žSWgð©ÝG¸DóöS»ßo6¿Ë¦¼9ÿji9Ñ\°bê¶çt°±·*•EåóØUV¤À&µþ&‘ìómT5Mz'ä÷ë‰SÂÅ£ëêà[p!ÿ  µÿÓ&E»š½Ÿ6T1b±Ig:Bd¶¼¨+ÓDñçø…{úª5ŒZ™ ¡~?'•¼Ÿâòý€ŒZBm€“sÚÙwL/à6\¾†Å & ˜"=ï²bß…q!ñWô ÐTS«êD]p·Æ<±eíð1Þ\×5zýø–üÅiìÂr’ŠÆ o8H£4,Ê3üÚÛùþ«tÎjkE…|_¥D]|1HÍY‰%’úò7tRÁ¶uÅ÷Ú‰—_ÈÛüÕÖ_\×… Æg[üï¼Y›Ú¤à¯ú«æ¦õùái æ ºÈ,f€«×b¦ÚÝõꜫªÊ‚#$}êüå[g¶¦Sޱ2fjÈOGg©±ÙžªÎ·E-ͨ†”w0SóP›¿¢õMDi£ÉþàI-­oέuû´­tÒ(­‹œT,¸àáU…S‹:#>rÍdyÍ€™ÊbüN6gƒ¯›”irÝ„ytmê-.nhDC‡ƒCµ”<¡2ŠZçp6’P[–Œ™©;·²á=á‘Éùv5p½ûô íÅKÕ+ìS¶Óµap,ËY%JªëÚ”7@?o?2qQ ÿß~io”öµ@îd. æ2ø„<¡=ùzg¿ü~1,3ÿô­d èu§EÕŒ–˜R¶ÌMàØ\ˆ©™ù3܉ٽ«ƒLÏ>ÞÜö½XÚÆX&sÞd,þi¡®=Ä+[JâžðÛI_wƒñu“.¦§5æÔ]dÑ ÂƒA ã9Ë|LÏNòŸÒ\•+AÕ4ÂnŽañ ¯DAîâ„ÑÚ§mµ"8#SÓHýÞ‡3wý„Põ"‡¨çÒŸáÞ2ë(ð‘Þ$˜¥Žô±-ˆ#@°ýd_~%˜‘˜[—«cm¬Æ /r”g8õ•TÒ#üÒó‰º Î¿è¢%±PAH^üÈ\ŒyG •â>¿Ó«ñóy—îWà ¯Žñs¿˪©8.pa× øå }û+ 2‚VS©X “Mp'É =ჹuÕÜRzcæ£Ìðñ²ÁUV½³=€ÿP)mŽ<ó¯@?"’õ&ŸÐô>DWš7/ÏG ƒùfž2¨¿à¾ŽˆA:nÇÏ/pKA¦o¯²å ÷ʸD=äþ¹9a‹š´yYÖ ©Cc2h£Ë €!NRàŒðöÿYÙ> Òv,cq2+C(ºOøª“5ufÈ&VÆ$,òiƒ#hd˜Ü.~ߟŽIk'4Ÿ¤29À#×7j1¿…ÈÊþ€‘i’Ѽ M}z UV»޾É蘞=ÃÃÇ›„z~•´MÔLøŠÂ ±Dœ¯G-T(æD*JjÊð‹±òØ}ýj†!°³iɪ*JІ…ù +kÖîm¼±Dœ†í< AÄÔX<¤Ú·kéPçê'u.-vqÝ0ËÓ |Á;õí¯p/’ò,:# »æÁíòÆåîn,þO·@‘µ24s'iª)¸W3-ͼmzŠ5—ÓÒš¹vWùÛWL]Ê+†Gñú±í.+˜ ¶Åå 2]U¤Ä¼Èt)ø‡ IÂnovÙ¯6C˜`•™Î^ô¡jÖ2‚A%úL]3f²çs1¶¹7×|šâ2ÁñVÕ! \c£Êìã„›u6.,ÏC/ö¾Y÷óÅšê[ÕËÆ†â¦å“ÚÆÔ6]ñÊó"—Ñbé;£¨¿;,«Žm†++‡=|Ç &ž{šR xXb5Ñ4?ýSWÛ+~ÙOq*Ö¸P<À½°É˪ÆÞ¯)^ O›íVš~ÒÝI,ØõB=8üÕ§ÇØfúk‹‹¦‹w¨8l˜ž=fØ68²ÍÁ(hB±kÂWŒ9Š‘Ó5Ë/Þ~äx,Šg x”aŒ Âs¿+Hµù>7ïèšaóÊê%ECndb~G™%ÝŠúÍm6>±­!˜Á2ÝäUÝÐàQe²ýJê*SÅÉ™^r†Gío°cEíc£ä%SUã%:~TßÔJƒi«³Öh(žÛ‚_~Iïûhx†7kM*+„k.l¾L®Ç!ó•Sý^iÛY õ¼ 4’ª½¾Œ9Ž’ƒü‰«B“™¬låÅQÊNš VdÖŠµ7uE)^ðŸ‰o|ÙuÌ¿1œ$票AŸÞ «eùóí¥nñÛɽ>V‰|ˆ[**Å„ 'åþj†l¸|טÊ'³2%來b^½/±hAÞn¬^Êð yì²½ó¯¢øgÍÇ£R3YÙ?dݱõž—ô“Xä3@°-¿/©g—œ‹|?«ÄRßHMýòyÑ|e× 6nF»!oxКÞiÍ¿ËýÕ k×þ/І¾ö#›ÌF•P¹ËL“& õäO9ÖGÌî KÒxãv¬œ´ ¬&÷<ƒId—‡¢ÜëxÑ»÷]eu¡ çÄ ¾Ê´†¨,í¾M¨¯u ==^T$ ¢tàMV AEb<ëP:f5CAŽÙåz‘kQ‘J¦¦UTÀÙap˜ßðþÍ`¥}¶¯Ÿ5ôÀçÑþFÇùh úgK™É(©7Z„ZÚà(Yy9£Û7¦šÁ>ê½°+GÕ" @çƒøÓ.£Å–i//P±Ë²ª¿^˜rŒVV(J½F*Ÿ/àÒ7®®NÄ\C©ÊF{†c„ÿi õdŸMM¸@ñŽ‘—n§$.ð(ùEð×L~b†XÁ說ªt€×Ú}•ô“¿ ¼¥þÉûw3ŽŒ[’¡$,}óú+äe΄\š æ¼0¢¥öâÓßMÅ‹({{¢,ö^i„äj%É×€Jo—ß±á5v™-ÔZ+5…RýiükLÙQ$àÏíØ*–àQâHJùõ+§Y/ú±¤H`‹“ùßQqfùžÚ¤уôf¯›}ñ×?æÙHÅ"dxÒïw°¤ªVa÷Ž7¸zdˆ}»¾ÀÞÂŒeþÕÚ?LÄÆï\.ðÉ5„D#ÈY™UOð+÷û¯ [ åÎäI¡7#½¾yTägxFô\&Ôvëž©lî™ó '”ÿØsÌêe-& `ÖDªiS ç„K”» ¼0ëOK­?~úE½5}1ú Dã y˜¯W­!ÀMž¨‹r7?ƒNËÙ6Åû?â–m€¨œ²m$7)CÞ&`ìÅx5Í$ï|´A62àuÐSä[l`<ž!O­–Y•ÄP ÁÉØ‹WS;ýøí[¬áO%‡;³¿ðE“+Ly=ªš’XgçÑvdªú¸3ž[öën¯h¦µzýÄv:dŒ¸ejÈð¤ÜbMnë¸;;""6[U%™XRÞë'<{}£ögu—b]²fÇ<)9ä¢Î¤½6Ó°ò /¬!R®À:×É¥ª×gx&y䡪Á@béÅÚ¿Õ¡ö'Žš‘ÀARî]^_ v"GZZU•ÀÉÕ^±¼Kí›1y]“”ó³RF•Õè¿=Ûïú†¹~å`Dv2òê.¾Å6¤qGŠ7ðÛèäÏÙÑŸá?㎚ó΋(§8³ž.Ь¸BÖ£F ùÞT¿ÈŠnƒŸêj€mpëo ù‡ÉLúì¿#2ÑXdÅÂ%»Çx†³%xè>Å#ü2Žàeçû•Šè„ÐbsR´XÀ©€B”Òá×™ÕüÉ[Û¤B‚ª1‹hYªu•ý‰ŠÚ¥³ÊœågxÔDtFšl ‚v9˜ÔZV:#€Ïc§½|Bÿ»Âöˆó3 jrÆlU¶Þàs|'q´ý†lÉÁYM¶.C¾cú‰ªÉ©;gQ8gZö˜)”ƒº;/ÀýX…3U2šz·M.ðy½2ŽñnƒLUy—åÙv«NG|òv^€fÚã¨d™ ÁΘϖzz„_æ ”¹Á&e‚­fE~Ç·k1—"·24úßÕè­UÛ4O Ü ¡Z^•Ú¾?}UN™¥°$äŽsˆ\êYêµ^^‰÷ç³m„¥’k¨ñ¥E8¤:Èë½ûô Ü¡öý~éôÇ—)[99§Œ—dI>G¸½jç‘l§ÑPV)IuêrrN•Èšd>bTÆ=Tz{€Ï4Œì²¦ÜT§Œ#ÍÊ]ðKÇw|$°o®TÆÖ䂳SŽ®’[úëÑUø Ã;¨ó™”XBÖ€!ýçtÃ'¹™Öq‰ŒE¹©$ôW)À½ŒžùžkrÚéåÌH²&ãè·Ære© øËqáQk½íõB_ …D“2ÍãHi9þR§ÌEô±í.˜ˆ!|§¨2Ç[ôW­5]M5ŠLÆ):’X.¦¶ „ü9QgT+×fGˆÑVY5P@™=\Q~Ó'<ˆHëÏ·˜Ìv{87´#%ªV0àFÖÐa:™áÓ”>öΟ-n¨—G¶?,äy7m,~7ÔÇv¨˜pËlΡ¸?Â/º71s‹¼ýÕ9PMBgY¶S$t1Ì” à^‚ Ź|Bw÷m+Qw¢›Á™Ì.Î3XÍî¡ ·–Î~ ÓhQF­€{}%}ñëpÀ܆РP#ö/I€ì”û«o’ /u|lÀ+¹ˆB~»T¹³Œf,™p,¡ª€GMï( m|ÒØàëˆy‡Ò\XÝ–ã*dÁœÒ38áµ¾*G§ã€ÙN˜lÿ?õ~ÀË c¹*L[ðŸ±Æ<0v-pƒ@`c¦Rèð™>½éIü–:(;|%DµêÁëð¸x¾ÿj0QÉ,F(Ý›^å—Ÿjª² ¸w“®¸–yMµo*z£|ê¢>3îD³ÛBžÔ ùMû*^s{vm ©Þ½¬?»LQ¤ <ÓDÚn# <r Ö»X}ƒ¯t¤1!ŠPLvÀ­¨™WƒVa%Bdaªd'Ó“Yj‡R’°ÓΘ‰¢—_~uWœ oÙ³xi¯¦æòÌá?m»¡?RS{ ˆ™íŸªf1/ŒÉ^\áOx7fìRŸá?wYé}Ÿn3(%Â<±®º_k¢õxY¬kS䂎±Í Ùm0P@/Ó¡¿>ñç¼pÉ÷0Íî4eþ¨.ì‚ÉØF¶²)a!À­Å«ó|Ÿ±%'Q4ˆUU¥À=^]×¥§ö«* Ä=’ò‹¶Ó ¹1 Ѥ.¹Åô¼Îq¥5 _ä æläUUw9zlå&2SiE?¡•hãNýè/&˳Ûhûàó¢„þW7ÇšÒßÁ›êûŒ<Ç'oõp ºýUÃbäɻ˳ýTŸ|u¨ÔßO~;T•Jîµ$«5¥ìnIæh¥éÍ„Voå‹­hð&f_þàõ¨/¶ ©3ç&£Ç›1teĹà…¤š?¾…¾¯lÄ­c†-MýÄUR%Ãe|É}'UÄ+sgKj¨p7’ÙxȨÔo»¿Í¾À Ä‘å«ã]“RÓP¶%^¬±rXS•mƒ|$ãÅO_¿ÁLÎe jie6ÉC‘$òjÔó׌Ãw·‹Ó„úx\¤Q—ÝEƒ²c-cø03øê)Üi°mµ.øô,ó[«:ÊølTàŠÍD:ÆÔ¸ã oö¦ Õ-—¯bO`“è>†RΰEp,åQ­ìPÈ+iŒ¯ ¾>(4?Ü‘+˜5»ð²S(±“R «Æ¬A(±±À.5uC/ò 5ízúíPPd$£®DŸ‰'³ suCƒ/ØØ€W—ûή‰¨ÔE¨9»å þ½½›¾`!ÇE×NÀ¼›ýõ¨cxôWÂ#ÂÞÛùG*`oj$ ðbý]™ú[fÁÀCtV{ìJB~yˆÔæÅ'×&àNl–e>Ýnedªå}ÛÚ©åÐeA~"\cã<Š}x0*¥›ügúÔjÛud­aZ+§ú‰0ü#Ôì\•)àö&}:x.û¸"(§0 ‚“dâÐêT8~4o˜ ü¥ªØñÚ>u; Àñc½Ø”«|À«²æ\¬ÉáWKÑï@é†LN–êªþ¹KâMü_d¥™µàiÆÞ¿¶2üy 1w,Iq¶ LÀNgteŸfÁ½1½#}ß Vÿøv ÷sÄê˜pò¥p¾n¡¥¯›žŠPä@¾²Úÿw…_ÆÀfÂ6öïÞrÔ9­Nã^gᔵg¸¥Äœî£?Ãñ:~‘÷A,ëó^ºütÔ™6©µöÿù~W™´ï²?‡]Mñ†Ÿz-ñÙW0;Â[Irò𹕠5§ÉªJ¿9ìò\‚¶Û8³¦ñÚÔa…ÌA¬§³T»ÜKz'šÚ>c'Eɲx•_þt$?“Å„7æ*èYvCÁ0,¯T¯gXÛ¿n©Šˆ‹z¨ñ%À#ú+¥^æÎØ:d (’À Î÷§ƒSE7µðAèþüé—)æ\?c;  !Ú3i2 YJ_ð—þÖvÄ‚;­o±6̓¹kÓªŒÇÐgp–ÒÚ€¦`jEfÄã.›Gpìeù¥Yù_…­sÕ‹<Þ);f?ÔA}ƒ£ZCúœWZì÷§ì2fશ‰ƒœ™È 3“Õñ σÐ5•¿5à5¥W“¢ý;Ôw°6 ‘0°ªDR¬M# /9)j™Ýÿaÿ8¨’‘ÉÙ^T3po¯¬Ë!_\bƒÃª”L1gkòÅ çg9xJŽÔ!ŠÉ„ñ³,䞃Ä×EfI ~QT«¶O±8¼‰+ãMº"/+ÐC!S-³1ên—‚ÖÑÌÊ=Ê3¼Œþʸ·ÎómsvõÅ4'd„É·¸ ÖÉlÔ€_ðŸe«˜ßÑÇöW(û²!èPS‰€—Q_ÍŒ»-@vh_uýÉòõ.xSB¥R!›é2WÙ¦C}rñšñîU¹´ø"ÿ#×í }Ïkô C©Š-øÅÖÌm·WôrÒ’È#„|qßÄlGٗ͊͡ù3©()ûøŒÙ\ Rò[‘ÉŸâ ‚¢³Ò«â–ƒaØ óJ·Á CÕ6y©xíöF*òbÜAq¹¢èò—œpên°Db ¿š¶jÏ,ø•â~>.ù{|poxn}ÄÜLÛÉg§ –sg€ß^Ú¬JMxÁ/C‚s9ïÙÁi¹\È.U-¨·RÕ bhš’ (uêÀ×™iSV€sÂyUS˜€Ïˆé ï¥FJ;á|uámf3!/6°³ÑãPðu^˜±;'µg¸Ez“üýйŒ¶nêà=„Èɵ)"®C£2Û,/ªF¸K_Ú•â¤lÒZ j½½’l(WòoÈ¢ „-_tܶb“á‰ÃŒu¥‡Òt(Yþ5p„Qy[ÿ¾À95®¨"¡û½˜ÝðçP²l,Bö*¿#Žˆx³f{™ÛÁ= ¢ì=okù~P'–ìÊÂ!ÙÐ^Ù÷Í=÷u@`ÓÙtš4]ÿò˜X"Q­dLw„Ùí¯VÜ҃Хä 5àáõ]‘}^±›A/¾ “#âž wÿcÔÝp®`ÖŒ­rqÁ›±nL?ù[KìVf‚ºÅýÐúdS;ÅÕ¿Ã{]þ–Ø€_5Kˆå!Ü´=àÀù¦Ô¥Öî8ðU¤ëê:žÎßí²^óWnrÊZZge/uÄ9Ú@F·Š 8Á|4y Ÿú‘døÃú¸'å?æ€lʿϡóØ_5ÈgôY÷ìZ“‡ˆ(—â€Ïoñ¢ý›çQ¾Jœõô»­¬ð¤‚â÷NÌB¢*ÃZ¿Õy,%û®@â0¥6§”=µ¯OÇʬÁ”îàóùª¥²™Åd²bD˜yÊ'eÅé ^2Þ¦KÆ9àL ²Ø3ügG2¬|/ç5;Ìú‘U+ ðhõÍðH¤{'ÚA}ô ¡jJÝÁ]ì…µ,žáA¬«Þ±-•Ý^ÎA}lr9C1ŒÉ2+b9àžÑãéýùÓæ#­Ì»Ý ìhf”—e³pÁ#Ë̲«‹dJ‹,¢Š¸‘¶ÚµBÚvV•·S¿õþ eW€—ÂÆ7.¢Ðÿ»ß¶DþtôsüôkHŸ¾*ö æŸD»ìZûüþŽ«_P9ÇÿÚ~ßç ÉªÜ §£#q*]0À£¿r¨½û®ë¿‚¸O›US: ~Ú‰3+'ÝÙ]ð`ªdá² õþ3)­)—½¿˜¢^ˆ÷€›\iPƒdE·"ù-€_ŸãÒ›z½“õMáÖ|¤¯S°C®–ÉDJ*;àž›ðêj/xXys@ÙÁ™Û{¶‘Ô_ ÀzÇ᜻}GTlÑòg+h5šÉ¾,Þå£[‡sªoúþ¿"ì3öß¾xMqº†Œ<²‘UgM.Zx.û«›ÅJúô-‚dd&Ôû,\§7Ëáàð ÑÞtyç oŸ´eÁ`£²Áj8p/,1“[fç à¿­’ú¿ˆZ´/=Eï •01H©Fx¹ËMVùúÝ©=’çOß.¦þ@H»Þ½À#'¦ë#üÒÉ}—˜õ³½‘‚pÈ›e o–Í\(wÞmø?®<‡ Üiʦby!ÒHô»€çÂé_e/ð_S%¥"ã,À[õ—‹_WøÏX°–òu(A‡³TÂŒhrуdK…תL|ÇÝ@4»žÈ’6?"o&>&;@à©#‹UYÁ¨`E©ù­ìùÓƒH>\ìXRÞm¿—2æÿ#íË’%Ç‘]·’¨0’îÎa½ÿÅ<)“P2Žˆ7_ý´Y×AE„ÄÁ8pvÒˆÒŽf‘AÛÔÿH7ÈG{$•·òÚ½PÙÐx¯ò Íhùi´üÏ£“Í™ñtpžêVŸºî£ÄÝ»$ÙªœpOªèé‘$'ßP츨¸[égÙlå“F‚D:Ië¼¹üò3,MêeMË©³¡IzõÞÊ;Ü¥Yp€—ËÜQФ±LÁé#FmÏïÚŸæMnðc_ïLðye=õ¼Ü'È?¿j$õå¯Ã.“0"ä—ª”žme5È¿9êfÏöûCà«Ò¤E83j¸·ö¿;[<·mRo«V[€"Ì8¾wKûïOŸV°Yëâr ‚6°ÕR,ùœ{û{+È¿…púïT¯/Z/3Jö¤À#©qÿÈ×IÀîEU—¿Üaù!3[%RUgÇK½Å‹z\Ƀ܄xÔFõÓR!–s cÖÆ(Uy¥® ШÁæYÛ+‰3±¥S<òO9«Õ0* ÚÉ8_&ŸvEst« ŸÆ‘ÕŽ r3å¡ü…÷PqÀÌ\Nw<¢±”M¾8vŽ®Y>¹f‹Ÿë´Ó8?„ôå¨O@Ü”ÕnRQ\Œ Îl'KQÅÀ½øÿȹÖÒÏÌOw<’ Éô:Ê‹uö}é¿xŠîO¦¨ç/ëìI¾<ÓMR1tÅœ’Ü'{÷ùKVÕÙÑÔA"’2dÌ6áÚÏuŽœ„]¹!ò¤!sŠ xÛV˹Y¬ãäëùdÔy[‚ñyÇò"×ZÚ*š)H%‘òCÚÉ.óWø½£_W¶W@5ÑÁ*eü-ͯ3gm¹—öeæ +S"pU…uÀO'{¼„:ßìѾ©zÿÄrƒë\Hõ®mòý¯¸Zçp«g¥â2”»1à6Hz¤ÚåýÓ ÊñPYKÅN2óX{´Õ½Á¨¸ÔJœ<ÃS¾…äO®jü€g&¡Uºâ^ú–æƒ ÿ(œ×÷©]û¼NŸõéWt¢b(¨&fÝerFôiìd.—^©Ñž„ÃÞ»²bzØ;œ½†· €?ªEù9Z±$iPc5grOÊ@ pÏ;ݤ|¤ry凅³Yª+ÜU¥mÀµÝ[€zœˆ)ÈË94áÖ˜ŠŽ©‰8À}­¯ðÛ€L”¯ì üf¦h•¤à寳»5j¤ pgöMGÂæ¯ð[Cæ¬ñ/™HÔñÊ?ÛnÇZlä¦e—²ˆ*‹`W÷-òüñ)¾ i̡ǯïKìÝå"STMò‡#¶"­–ò4¿{ƒ[ñ- …ãjúÚÊA¬J¨žÕOœð™~Œ¿Y3êvß~ýÄÉ‚NÎøÅäw,¨‡í6N›Œ•»ù cR jÞ>˜ó#ÓÃCM¸LÓÿåBâJs5Ó ];¹ @oðè[îBÇ6IŸ´>ºK Ìo5Ô ¸…,õN>¶5Ê•É9èܽoUK»¯Š{ÀŸ[­';wbÃírôððT·Vpħ.‰U…ò;éWɹÚ?Ö.\ÖY~ù§€¦µÒ×^c@:—8ˆ½Þ÷ÂØàrˆgÂ2€zòöY¿ãL¿:aÁh+(Àe-¿Ê%÷¼á5wðð-òai¹}bÉŸ&:P”¢¸2€—šUüW1hN 1¥äx‡{ëòCà¬É4fÌ厽œ5YÅcÈ×€[™¥ EMôHß©2ÁZ% x.¤W$a ðȶ5•_ÚÓŠ›w¿ìvÔ~ùYl̓ÐÄGÈG73£§ÛŸSP¹hmËGqX|‡S“~ž©¿)ÉÀm¸¨#ŸõÉÏœ';#«Tùè&œóÇäx…ÿÌ\Èò“—˜$õ å¥"—6 Ânÿ´:*º“ì'Êúˆåîl\Y—:0iì¦!ƒí Ï=ØëÕ‹ 'b%¹T—wd{Tå<òã-èç…™‹K:À½(?–<Ïú-„S*òî¨"uùWÐáh$À®Ê°p ¤þ¯4ÒzÔó¾Á­²Z“þ÷ SÞdvý$ü«æÖ¿VHßAó[—ßÞ;[—Qîß¶yÓQiËçü7òlý-å ˆ‡(Š7®ÔÒQFµ`m33Œ’eöÖ/ö á"Y—‹ëi´ïT¥XEÝä쬢++‘ >u‹“áî„ß'JŸ9ý¿Š·/8ÜF˜éËÓ=þ>é¹bŸ %] §8u ƒ!œytzóOxÊÒqêÔ+­{ï¡H¶€Gê¤ç*õ â‘Gl#ׯüv\28¤ž• Ül«ŸR#j¥ xìÒŠ»ÒIü1<ùòÉ«riS!Vî©ê¥27é Ca¯÷'üF‚ ûÔ%=—釙Në&Ü)iNGv­¡$äz±dIVx\"€Ü3h”ß±‚%Û“Ùëùî•ÎÕ«¹ƒ ¿)Šd[ ï,Ù6ŒD‰ÊĸB—‰å¤ú&€g¯ò¯ JÓÉ•rà–èV]ÀkÚJK©_2ˆÓ½ñ´9{ç–þž‚륬Ÿ~ÅÄÆ±tùè*Šy®þ W¤æí­Ç;WúHùŸ¾¼ët$I pÀïZèßuÕÏ;+.«ÅŠbeÆY NéöÖeÈM®ÚâãëºÆÉYH¡&Ï·±µÇìíøt[àè‘‘'”žf–nðìL´Kj MøÏ³²ŽºRÙ§ãý«þë¿5‰Œ%:S¥q{‡»¥¯|dã+“·‚ÈHäÇÎµÒ kkLFT*SÖGd´c¥­!Ô$2æÌW&Ñn‘ÕŽLÄR¨%Q’oq¦ ¾eæ~dSýk9OŠâ±­‰œW“eã IµAdôÁâheNø]Ùüû¯à²K¨jÇ©­NçIQ¤ìm´Y!kÛËs´}ü ùgi»’NMTEQ¬à™/å.ïpêú«¢s¦"û¿€é¦JJÁì£vœC] Ù9›Â5ÿ>á?w––zËáqø2«Ÿgµg²óØQ=9äöU€˜Ô¼èlv(Ó¦:©yTxDzâb~„ˤKÛí9H±Ò;+|FFS ùg[íétþÅôoðâ¤û)½úÏŸ8’¯*sâL4p»ìC€À7”¸ÉÔîy°Ôû+/§^`{$}ƒtÐv)Ù õ'·»#¢)_Ïñj%·œ» ª!ÔZÒNÞPü#lýô™ÜSµÑ¬tÍê$ÝQc5ºŠw'<òV¼{JDµ…Æ\/Wr±¥®ëäì¥Až|Î2[íWÖ¯jU— j'e$ µM ¨Êd|õ¼J}¤æÅ©·LtORè9ŽNj,^åwìÈ|™¤NW7<¨y¤ {ÓˆîÇe¶¤\ æ±ÂF’έ€#½F-·[ÕFýx+«€eÿ/‘ë XRÉ„GÛÝ<éË8R›ÈYÁ_4`¶BŸPy‡‡©å Ž¢5’ÎH- À‹{a…'µ‚'ܽl sŒÈ[_ïÌsŒÍ¤é†¸1¶ÆhÚH+nj“'ŒdÁ tMI\YBös OÚƒqödK¬Æ.ù-`º“Ë(šÜ&³~ÁD £ËËò™ŒâC†-]{œhz„*å¡´¹ZBß2“¶ZQôNÀ½°ÛDzÉ~7}.Oås„¼.pìqRÔyä Ý๪Þw›ÄÀ’áq5uZµÉÙ;©ª^ô/íù¸)]v€IÃÎynÇññ)c¿°ýÝTFÝ yYÉ.³¬ ºgJ¸®Øä<¶ÈSÃŽ5”Ößq:'›ôINò÷¹P£$ô2—‚Ñm²ü¬Œ=÷‚ãÞX®ëšñÚ;~¢r­Ü‹*͵Œò!MÉŠø‘DoeÕÒZhù2ßaâ·JpÍak RËÐò ÍÎagÊæU‹t}8+híeMí‡u~M§*¡HÀK"wÙ£§É þ8÷so{jií‚4ˆdFaÊFrûMxMIþŠLÐ;Šü‰hh’ºo¸Þã“Á0ÈmoÉó;üÑcç×5¼‚“|˜CÍ0Ì óH¿H7ÖM•¶÷^vò²³óɶÀaC,w“«2ݯ„¡•M%-€g'$Û£½Ã ›ˆ3W$AÀ­õç/ïY..Ð3u4f{¢T—pè^ù¿(±Ò™ºAÕ³žº™r\+±Ï¦æ‘DWBVnJp·-í§¨1>=/pŒ@0³¡r¥A-tlÅ‚‘˪×Ù@õdíMÎi—^§3&UÊïðèJ3¹«I¬’GÜ™œ®I tLøM29H·K”2m¨[£ÓHçýøíj/BS4:cFÈPåY4[ÿ´å@64s•‰åœ8ÅUíO¶ì²,K¶É}L…(}'ÙWÜž…ò<Ú–’Ó‘–Oóþ¤z|( üeÇ>òø,wŽÁîEÕl—®&±È*5ä£20ü_H ºöļü¿ Ô– æ¥1ëǬ„/Ælr‡¢nPõ4b@Cy2\ðJj¢78÷t¥óО9å1¾âóK”èA>ònðã %%–ªÞ'ügÑú8§×¢õ,usBÛË.›¼ÏÔÙ”‡×üž‚éžh«þrs„=¦.6Lje"ò¦¦|ä›H±jV6(f¢rÜEr£ØšIØÓM>`È”o•ÀŽp9­ýõiRÌ”‹Éäï³$³_>”@N»Ä,m«cu¦iŸå|ƒÊ%cD¿<ùÉ5fZ{Wþï Î-”,à÷ÑççxÕj^GÇxª%±ž«èüN£¼ÚDªÏxñ¢*h“ÍZb¨ðé¤äY…\Z×5p^oÙ‹åçr£FÂÚ–ä§wé¼-ÔIçÎÌi¬(òa«À(LKf…õ…ÎýòåA¬düúRžjÐp4™èCÑ]roßsÌÍþ%ù«èéef_­ÈÊí"5Ê:èä.2¬vzT©KòŠ… Má*ò¿þÈä½Ão¥¦ÜVg™iYz.BfÈJÙðÛ©$þÊ5b¡¸·Ñ_2Ä—ÕnÏñÏQX¥jÈ ð$´pƒmݤR‹lö¸„zÀ€[0¡ï¢”Fúä4æFB ’Tžßÿú™§úò³Ê`™dð]‘z÷D”ñjR³ ~›eê}½¦Ø÷éíBD&º*vh0ÒBŠlßv8•wE¾íð )þé5 ÏÓå i‡ ¢= œDOù/N#©qt•t(ñ€(UQ4ç~£Éë+üfõàÇ-÷÷í>LdVOÙþøÿ”ÙŠ„ϦÖWÆÒ€?ÊýzúÜÜvîH/gô¸l¿K‘xy–¢Än/­lÍŽÔã´\f&ƒE0—Pc°Â‚JíûÅÁ´Ü¯šõ•šÓA¢,¤Ù»~q°$NL$¬Õw¸·-‡qÒ5–bÏàHŒ7‰¥r¬³· ‚ôü¢õr"N¸µ`ëjlm¶gøph‘"•€{VTÿf'2j>E°ƒD9ØX”iüÈ9ä‡Ì³ƒÉ¡7K{‡GRUÔ¶b%‚¥*¾-àÇ!ºeÞ–¢Ê²Ë ”߉¸}i®n¿ =5U+§X]à°ÍÄiÈãqÂËÝ#ªÀpME'åIªXË_[ù2''’>çØwœI–¤»O–îyO"¬+ý¡#c°•ö¿óbŸbÓIc\ßbG K®SúC€×$ÃKc‘Žçžâ^g1måêïp·;OȬ¬3†ÅDøêG¡Ö9+%©·ƒÆ˜HœF–?´g"[jRú¢?Ò•8vÓú æqÓHÍ@“…;„);•ÉŠtxDlÉt%OŸº¬óÉ›¼WÓ~}â+ÑøäŠÚ îÓ%â×ÇþþóðèìœÓúå/S+B{±,WèùO:¶w»¦;I£Rr7Ê6^>âV„MPšâ“~Ü‘;‘¨GöµMÚÁÚ {¾¥ŽôVn,ˆåÆ–Vè°ññ¿„£™:ïX—žóh~ª,ŒeÕÒXŒu‰d˜æù{Ñþ_œC´‡to£É3 ò“Á´P\©­wèG6R;vŒJ®a.>Rù§ß>3ÜÇH™õÉô§YËå¯JÀÌ]I´ô‹Ø™o—OƒT$½ÑÕ1©x)ˆctqÕ}ܬüÓû ŒH‘»êŸNéÑãõ2iÔ&ãö‹É§\HúŸ#®¼/ß„[ÙK,§uV¹ƒKGµžR˜úò×8¶|acÎÎ6ÔÉÎ*›FU〻÷ô Ð~Ygï©?ôŸ¼ÎPœ BÀñ>äþAí‘pt+½ÃÃuguü:Îpÿ,×âd¦”XmKÆr ¦ .KIæ~ frv¤ºªzˆ}Ò“5Òâ 5¸EUMŒIVLûJÃé~‰Aº*xLJcNì I#Þá%'&äc^T?²ƒPé רv3àƒíÌ3G[¼É;Ä SÊvW±F½¢IˆZäe4áÇ_©ª$ø˜¬˜ýRÈ#Tg¬š«<³¡mmc ¸õ´SJ/½¤¯(¼Bë‰Qß«êP² "<˜»¼f&¼ÔÎ2Z^á?ÊÝ>ei´L®£™l0Sâ ™ÛÞdžíK'ŸG!Ùˆ@<”HGPÉdnD¤ë.Ä—?yý‰ØeDƬHíXÀ„`kjí4dÌK§¤ƒ DT%"Ô¸G‹ÑI¦Bé,v%öþ~ºþ¶¸ŽÔ8hˆŒ©lYQÌôŽú“§È‹iá7ëœÞV5ûq‰.sÖ$}çÆ€REp·¾S²RãSû¿æ™££ÉüÓö¸@ì÷ h_?ä:­È4ÐË[„êdzÌÍS§úJ# –çi ã_(g À³Ô¯›Ñ÷³édOtõ!8‡È1–“Üãpf~RïŸá½út0öz! ³=©EáAVfx`š=ÀýF\›´µWøÏ[Ù›¯¼Ø1)w–¡¹*>ô¸ü›SÛì‰ÑdÆLµx‡[JÄgï©ú±À!þ¥”/ ˜½3{Teá5 Ê×Y«¤«Rï¤Sœ1ê;ThÞ%tÎHv|ó¨ÆelòC ƒAÔ°<+Iö¯agšê‘Ô»¶}Œ$U< ) eW sRsù!³é#sÏêÓ‹!ÃGGƒŠ™¨æÙ€Û/KJ­«•aoCêÕUä͹æ¤*#å#Ç£hÜ)|³–~æÓç‰ÙËOœ$¥c›ëÄP\À­3BQÀoznfŸX²,P¤XB®u`÷D‚®ÔÒñ¤çv,Ô“§°„=“‡Uê`÷¢’¥Ðs+ìRjqÚ Ÿ a ”Rßá‘eþä—Ž… Ž`Äkd^1wý´qµ´SÜêõ$_}òriüÕ]#zTO‚y7xi•áG­ïðÈm+¼oþEÃàŠÕNdd’êþè÷ë·<—¸®XfVßI±ô¸bFø«ÖÕˆ"àÖ{¨¿Ù‹$@î2pŸp'–é?'á{þj½ê«èâïÊ\;U-ˇ½pô8Ë,°\íýÓó‘'})𰪑O¯jzðh[&Xõ8_?cÙ—“‡Uº“Æ{ò½_­¡·O?gÍNVã§/Ov»Nz;Q’Š–Áq¢Áv– A…+ï<º#˜K_ùxEÓT‘kèG‰í^Ëñ^·ˆ+G\ûiKpSÑv!ÍgëjÆ}T 2©÷ò4åÇ“Ÿ³ Ì ÚZ–ŸvfbÔ8Å»œð…È|ÄfŸºD“ßåé-r&ѹ-ž-J1 yˆNxDÛ ˆõÑñb¢¥q/àòäjézcÎ7Iøt]p‹²#žê"1Ñ”Újfh¡vÞ8Y,@.U˜Ò\ð·'ôfzÒ}ü‚¿}È,&™Áñ$’>Ã'æ1r”ý‚›ißšèd]ðhmgB«7Æ2 À!yŸä»žµ¼Aº–ùÉšõçÍ:5zÁãI{ùá;9ñ[àà†ƆkòÓgš“»|‹3Š ?%Y×ôÜØ²1Ôf Œ: (Ñ ~7¾ôxMíŸüT3Ç¥õuÜL®W´.¿ÊEé"S?Mô¥.x¦öLFäÙˆpRþò’%÷¢µêïðˆºC¹;E·–òlK K±Ä7‡¨Û^ð#=ά>”^á7 H+‹©MKKsRþó’är†=ó¸¨B ý‚—J&ǬäúþéäÓ¥Ÿ7à?©‹£ÕOä坿yQ;i1+ ù6…ÍÏÑV¦ù“ãîMÌ7…S…LVܹ*ßðk|ã­³zöPrË«TuKps­•µÕå‚GÞRJ,Íâk—ÒUÈ. "!_”ÛÚ·bòÃUšˆ€z uŒMJ×ã€ò¬SË%¡Rh>®ÂPŸ>7i켟§½œ)©zð‡ñT! Û(¦¾üÌÇ[ÝI4ΉêeNè€cV“Ð)opÏ}§§}Ö}¦KKa/«÷ÊÜ 3)2¼dÁ ¸&u&´f„(ýØ9âkÛ)öœ\_vèhDÏMSæølÖ ’ßE¯¾¿ü ©+#ìÕðwøÝ7ä:TB:þÐÏ©–úÉË v4äÉþ1%Ù}Á½˜Ê&γLÅ­ 4àžÕÕ Î[&ò6\ÁP(ã#²Ö+­½Á/còç×P“©m2y_ÅL7ðŤŭ—ï8wÓà=g:Äžpò¸å[¡Õ¯ã:èu=©A32T|“êœðÜH;æ8DUèñœ>eâ¶M3h*ÂvŽE©@ ²Í”®•½ÛwåóÐÒejd›”"€»ü%CH_j…“i†L²@T£MÄ&/õÉ4;'ÂH!¥¨mR/³Reè#^?ýg"è¾Êi…4”Uɳ«=hr½î4¢ëX¸Dmê.ÿˆ!ñGOªš?T'S;9¢¿ÃÃóNžRjª …ó€C—¨K•ÈriÏTtÒ~2&¨Æ±ôZz¥É½¼Ÿ¡¯KUn¿‹þ­Ž8’zaf¡]]˜ Ó9Q"/­Ûë§ßøœ­}­s8’¦LŽ1×ßq¦´ƒ„fáUÅC0 eÕ´ÇãüÎ%Ú™#\Ï·É=Ï¡çšAÖEg8’vRçÞÞá^*©˜+-ý¿ðAæ+ÏLõ„žb‹Ñ¿r¼I¹ËÝIU%·Lxi„­øRŒkhÕ÷ô/wà¤_ž£¾~ùc"ê2rtüÚxd^>§P9Œa£“êGêþߨÿþò%ÚWÙª]Šáϯ7)Få·`–¢½æWøÍØrä…–ÞÒdZ'Æ£Ö‹º0;˜Ãµ‘‰·w8M¢øx‡o²EJk± «px®TÂ[n2'c/œ©ÈŒ¸¿ ƾ\ÄàâÑþku÷«¥§.b0ö*Ñ}OMf…æŽ]œ æÕ&—JÇn`äAxLxtÙËÌ:+‰áÊ2ÒúHÿÒ‚—|Š:¶/7W"•“³LµÔˆÉõx‡ß;¾í“–‹ ,½Q˜ ›¬jNøö8ç¯ÐìÒW£~Ñ]¾E Ôzå¯#qoŸåD,½T3³ZêLÿÎÉûqêÊ‚+Õâ/5½Ã£Ëø<9bÕ8dì ž\z^?) GÒôéK~;.c2R®©®’è Æˆ°C¨swrΈÌq…jidˆ•ÁF‡ÓPŸ>ác‹@wz.š-pì3‘öi¥ª/?“–”˜¨˜ »àw‘×-RU~²:=}ʧûòWp;dÉßÐ6Ëkgű›c~ˆ¤ÀcŠF2á7ÉýzNÙ.uùEwõU`>èd1ÑyÁ­8ÉjÞøt‰i”×wø-;H«qÂñWóª‰Ô¼» °eŽÒæ¨Äñ©–b;žûÖÌQn=ïXØ7³þ­ìnLÎ>bdõÆÿ©w]’/¾è-CNŽÕ¼K’KrrÃvšÏ'yjÑ?à³BSœ1…ÜKË0m5ÒZM.œ¶þÂÉ<öKotÂo?1Æ2õÓòÅ=$¹«JW†ÖZŽ ¾Óiw:uÏ¢(&î,©6Éñ[7xicK“½Ú[8Cí,×®’‡ºí'¼&ß©äZúçËC•œeȳcRîœ}ùG¹—¿ð± r]K£‡ n¦ÿêrG%5¬®¸‡ZkœoV²z?—q)‘"/]ñ7Bo9I‰å½lå)µÏXÖf k¤ÍÜà1„XÚñW×T0©Sw/ïðxYZþ ¶'LZ!Ë‹¼¾”˜¹wÊïpk±—SSæ¯q¿¦‚ÉXU3–>¶l­¥¼ · Z`êƒATÀ ^ß ÎoÃü²$%ânfjó_–¤j¦%ƒ¾—XñI«æ÷Èéâ‘!µòi}C‡TÉ#ô§CΔ͵Õ¨<šâÐdè×ó•éEm?è×ubùb¡Ê¨þ3wÌÕ>c}Ž0'&ÂOÇ1&*ìIˆ¢¥øq‘“ºfùf¨ÏŸ£‡½Âoþ¾-}ʲ•!Ñ—™Íeq(Á`´2…Oêòë¶þôspXÁg´Üe<Æß ÝãšBUêRLKr¤¤¾£¿4¼jR×õ„GMãÿÚ 32‡roR}yPÈØµûHïðÈ]>à¹ËFgT¦dïpïe«¡rÄŸ:8RåñFùmR›#¾J7`éå`•mÕ0¼<™ùͺ¾ÂoùÄ(kËvŸmeRÃÊjò2CA®l˜-žÏ(Jö>+h‰$ÔyÊÇUHZêQåæG¸Ïœ­zuˆ^>¢düB·«ó_i¹éêã>ˆO,É*H~‰Œ/™«F'àQêV-"õº²øó¥LG&Wâ©ÿºÀ‘Å6âÑg.ÿuµzïónLXUžI°ø$ƒ¦·µ¯CeþJë´È§êU˜-•QÊh'WçtÍòzaÞÉHU/¸¢ŒÃÄy‹Lñ`yYZf×¢:7'üî2ûý! Éfvu»:]Áës¹T  ÇØeoÏõàÁÓ›ÚeõjDï(üVÊ"^yÀ1ÄI¤cJ U‹€1¦5bDí5^á?7Óñ[>i‰aþÚgnèsž<Æòuˆ¶KþÌ:GS‡(ˆyÍKüét]à0î!ÓƒG)?}æ‘4ε¹¯ÉvfúÃS¬Ã䌽Aêdù©+vƒ?®¡_öô¿àQ}Ër¢Õ²vÔs{᪼ìË‹ÊÇú4÷©r‡ß=Ý®'“·G.^÷XµyŽ¿báùÝËZ+Øp©A,% |Á=»o&ð»¹ê‘Á¯?3ý9Š8NùÑ.Ûò‘:›±ð"2¸xÎf-Ë·Ã3Û’^²35Y;úhµ*Ü?p öz›ì*wø™Y½#¬T‹ëQ»ï8/Ú:—;¨Ä{:rRåä‹L·¥mu$Á㫊 2ݨ$º×¤ÿ‚äQÕ¨Ú„ß¾c:n¿å c1G¢ÈòC‡„o¥ÞÓ¨$’ D¹o^pW2Ð-÷ËD˜ôR¨“zÂïn½—·,"MxMu£ŸOÏbjÓ2þžLž½NtÎcíÙBr>àñœ²˜;C%Yý)Ëç¿X¤}2´ûȤ۱e0áá;*Çj®_y¼9l({í~9“ÊwÈSÖ®m+< ª>iY >‘âr´ÈõcËæ×̃üŽ®3¹·'4÷8“(Uv².ò_V)-8~=³1£PwÙ„?ý9Æš½Ãƒq‚_X\¬ç,ø×]!?fP\îEP)Yøå-΂‡/ôÒÔ[,É+l­(†a¹†[eêãÜ«æBE°1©ì¨®'€ ˆ„Œ„l]õ‹÷DM*Úx‡? ƒ?Ôpû÷õ A8€Š­ øV@4'ûGvKÂä’¯¡"^%¥Œ¤ŽÀýÄš„ik›U0þé¹ZÞ€ég‡üò`ÍdèñkÝà9y½¹È/Mí°©PðÌê׋ µ¸22ÅM+2Ý•I½ —ó>wïƒm>ºô¿º¾ÿ D\Bl8¢ˆô·¾“mfóþ5PàBÊVpquK^Z'“O•øÍ ¼<É©*±®ïäýˆ”VÙ©wÚ”4+ò·Ã‡é %Tòå`LÎËõ^’÷ß~ì[ù~*uƒÐ5ÌåÅ”»ý ÎMu-æÇ™»ã¬þô¿¬Í^Þ`RxMÕ" Dî éäTÕå Æ]f9@RY,à>ºÚ“—9 R(½° Þ‰INªÒ;á? RÇuT?ëk˜ EÆp¡ôS ˆu©¨óÌ8'f×¹õþ/•¨òYøÜKÚQÀ:ESW~})Ðß2":òä~ƒ[ ²Î«šÃ*“X—,Óu.—àE§!Eç&c˜ ü޳”.Š ¼¼2O@•q ôök3d'«€q—‰»=‰ÕÞá!÷¸ÁO‹Ñúšðü:ม»ºìRxŸøí(wÜyŸXà`Sb]–¯aîåç}üÕ%ûQ/B~È\ç)3š¶¥w¸&×#RZÂt¶*Î ¿Ó»ˆùÙÉ\nepÓz#)“”Ò+©k$œrSÅaÀ£Ú–tæ±7Öªd™œ·RˆåDñ!¿ü„÷Î*Jªï^üÑüd×å¤v0»¥¹Î'üîöþýW¨³ ³ÊmÉ»–}c+ç#¬%Znø¿Èýx¶F#b ¡ÆÏ/ÔÉûx…ß:8m|&&ÎKlve¤¾4àÏuR>ÏCñç¤aý¹s²|À±o?I”«°ü9&:âCiቔ>_ÊVñ,íÓëÚ'Íh®Š™£ÈK…3 +5o8á7§‘û_+Úã¯P /ìÒPJÊó({îý©ä+2*àáygæaÔs y¹•A$d[9¿¼EX9vUu‹GC³'~ãÇABB³¬\|/xÄk±d·w¸ÇqÔð¯Ò$ú@±ýïc×?¿ÖIŽåÿ·Ÿð[buœEiýŽðɳºsŒµ#û,GÄdìÕ$o“ÉØ»Ïáÿ5sQ+Œ½Â"äªtæ {¬Mô¸´8ü[*µ¢Uk¨‚‰¤D™ef4ánFtæd“ ð([•¹#¶Èk¾@¢/ ¡G~ýÞêŽAõ¯râ_‹ .p¤ùå£Êß>«S…Œ[=’ÿnð°J$å²yÜ~¥ŽñY¢ˆ:H,xI¹êŸ8_[ºÕác%ñ—¡yƲkUm,Èê5F¢²3+ÚR6 ùH³óÇ–Áª¦X ¸x™HMïn¾5S|Pcg+àâ1Ÿ‡—£gÂ)¶Ë_…n ¾}Ȭze&Òª³Ív¹Àí<¡3kYu× DãóLY~:Èö¬p$m"¿{¹<ßЖí«q‹[·Ä*°›pD–ÜŸ 7ø½³úx¶ûoå’€e×s)—«îbÙ‘²o)r_Â!wÈjhrüòTje¥£|®&2Ëå%KDŠ´œœúGQâ•þ3‹«>Æl.qOx—n*¥³ ä2cQ4’ ÿA8ïÕ|•'œŽï'³Ž©ìË^Ô$”ecL™ª8§€[t&ÑWß?ý'ñø}%ý Ki»^ÎP‰tòõiBYî[Î,1Ê'/'‹€_¯¦PåÒ²£bZr›€P¶ª¤‘¾BÊ b¸æ<vïüï®YÒOø[21ºFgsRr}–±ïmðÓ’êÔkXç=Ê$”¥JF*K–`r½ò TŠ¢ó˜Á¶â;·ÉiˆêëâÂö#Aˆk"Çè/u[]‡˜æ&Þä=1úNÝöbš‘Ñ:KE¬»˜f,—Ê¿ð\I#úxòõýÓ½¶TÌ[ëëÁ7Ç„›—|Às‚霛!k³*N=àÇ 6ÔB]XêXðÈu瀑@¶-px?‘™»<ª|B<þaîL /"½ÃÞ~)bu´tI`3‰°*W0¨.ªdg0ƒ¥aiWR※ToµKè ˜þ%ð„Oä—+vÙ±’¤ß\Í¥ÛÅZó-–óa7Wj9!†wkò¯Pò&ãKÇ"°w¸WueM®Á9ªÆ ›ü¹c9ÓJ¨Æ;àæjPÁr|œ?ã‡wîcÜ2á/q‹å«ÝF2˜¤œ4¤A.…¢G®´r \±ÑÈTGÑ  g$Š×¶[€GÚ=ν¥ÕvkJž¤#Šk x.lÖ¬ªvàþbÌA™®×fݯ2Ρþ> ömƒ‰ñ[të,Ù/ðyŒÂ”7•ª‹×çñZà9„ÛqÖ/ÍØÙè=Br6”?ÔŠAŒŽ¨•=è‚Ãá¡EEò@÷PòC—ÙDzí%Éšs®š>m¸9Þ¥ Gňsz‡Ÿbô¬³äïð(ÌÇúiäâ'ügI©Øø”%0t]ÌHêʺ\f+ÉÁM5Ÿç¬Ýy{’ƒ¤È{ââßmÅ­º}òrº_ΆçÕÐàÇRãEc2 r¸ÇÀZëNHŠŒj'Ü”X\ŸÔPÏË}ËÙòt](KÄÎ3ʦZ‚3˜=àÔìÍäow”£ ¯bÈêG<:K´ÓkÙ?ÉËd¶;™´j4£­YÙ* (àLBñÈÞ”dñ„ÿ|Ýj^d ,=+Ì<É—¹YÕý2ÈòÝh¹[r¦37;m‹Éíi²: ]=§Ê4pgšNñTÓù ÿÙ Í'–ز|I¶1`Ê[Œ™¾ÊàõòômlPUÆn-måbõÖ\¶ÜzÙrÇ#‘Ïñ’Äe¢2CíÅzõ™““Ì@”³'Ê^% Žixz‡_UMòW“v“^É?™äq |Ö•†„œ¡gScJ€ç¶g`^O@YàP¾%wCîòL»ür©Å†’|lD¿ë+Õ.kƒBÃêÇ—(ñÒ$wŽeQmí’Ç!öeUÕîMyNȇ… P¤.3 À!O1æÜŒ‰$wåyijƒGúöeKc°îeÆ=%Š\*ð) ”œŽÐòëZ½”üѶ&Ÿ¼4Ógè7'e”¾’l $Afw/¿?`H`É3 TÂLL=R“-ß~Í ìÔìêI»±e—Á×È|<Ænpc4qÙ‰îù‘z2Êg,¯Š{HÖ$ëV`8‘êuûv’Ê–/`ŠRò w _µ·)Áß– ã,W.1ÁdQ&'’)/”có“J ýr&ÛOóè·AÔL¢+‚ÿÕ=ôúísóL ¹«XäN&6­ kgïý`x‡ß#ú´:iLJÀ±TåÔ'ƒ4ãžsÿÈ·89Ð%˜uµ©ý3y—Å˜ßÆP¥OÀMÒ+ìÌΎڡʳ€»ûŽ+G9Rõ¯ˆ10©DP§*Ï Às¥®˜Òþ¬{8Nõ–å ¹³“¾Ç]¢âkÀÛx”Õžz–Ÿê QYCYq§Š+´çü¸?vt0,ŸÆJK Ð;Oì’)¨¥]éi;d=˜ò çwøKmr8-3Mï꺹óæ{'U%ß!®è•‘e´ uDJ2/jeÂo M­­íA+Ÿ ‚¾¥Ë•6›“yë 9²iûŠÆà¦\;ÓAî4r+[—¹ãä]šôôu0; {\f“ùx)ÿïó;ó}( ¬tì ™Ýr˜Ûë|ÌÉU9þ,­:ÇÝàžÆ㼜­ÂÅ Î!ΘØÜµT5sèF·÷5uë¶¶ú}’s¦­dY~÷P2Χ{Ü9øI:ú¹É¥‚3ì²´Ýž”ÐÜÆ>±Ü_P+ä6KòAôK:éŠ)&®CÆp¬¿d¹‚;ø¶ÂåÒZZùî“…p$=„þj®F.T2«èÊG7áÑwT™Žóæ»Ü ÝÄÔXûJéV9tƒ1°u߬BSÌG‡¯Ñ'Tåw„†)™G°!3AÐ÷Œjɨ Šˆ]™¤M¿‘Që6 àO ÅŸŸ(c‚þ´ÇÕQÓ2FæG4BéTÆ»Á½T&Ô­L'&üæ$«/3Â`gnY†f:ì…)¤É"ø†›Éñ_û¤å ™„Áìý_XÈ€ŸÒtê¯ì¥ä2á—ë8¡Tº2.qÐ 3ÑY}ût×ýã&•ŸŽEë$R,dÀ}¤­ªY?•Ì××;IÌ™p"#ëýƒ1 ÙaWͪÑ/À©mŠuÅõŸð[Ì–Žb!çÀи°]¦=ºó[-¶zœn«äøázHÒþNHÊ#b–N»*ý´,3aßêuxfzXº£l‰±Ó4|/Y/É9‡ Îâ¡’Uipó¨[‡hIŸd üj¢þL|»çOò>ËÑ•~F©I}:€6¬«~KU¥2Vxçí«?·Ÿ"5.ï2pKs”°ö×gL(¯¸KYgÀ°JýHl>U‘Þ+hqIl†c)Y=¨_Ùr,óÜ’Ò´ °0¸ŠIì ð+QÛ‹¼ú'Z©ýyïJ¸- &í„Kq×qúïî•8oGSžÀ~ïü•ÏÈË_Í´¡¥kŠ{¸‡<ì&¿òÑÒq®s‡ûÓB]þ —/ÉÁKVÓ‹€GRMñ€&óü‹›SÄð(Eþ‚u¦>‘UÿiÞNÏî^–^ôóŠöP§óeXM›¹M>ÇÉŸ óC¹NøOïãLYioaKfÝSŠ¢6(™÷¢NùÖîþÂ>/’ôP¹褵“ê©'¾Àg%ò©ºü.xÂé*O£I7¸í¹b[¯åS–$kÒ>“7r¾I?ò¡“¸]…æöwÒ¹8§âþó I>>u¹¥:qLFWZé>T°eÉÒ™¼(&GtL|TZ2·wø±œI-\þDôñˆøEv¹M.SmÒ.ð&ëw`ZßIŸŽ×8¾‚É͈ŒA¼Ú?²Œ¶µ¼¶O] ) Þ¢ËLŸwð#Ž%uKrÕ=:¶ne™“^2ŽSò’ƒUxö­ñçèWå”Eá²¹ «ðÎ(¯U‰>Æ£Ux­ÞV³Ôè—½ ãÕv¹‚aÀÊa’2x45kà¬f#Öõ&/£Ký2vÞâ¸ë|¹I'4³éÅ—@ ò•™L¤&»64gt_Ùõ 9ŒUç#¨î_…HðL3©?&07x¸‘û牼ñ~“H¯ßT3Y™z’&ô× ]­ó‹³Z¨­u~‡»5K²’Åý]öy`n™…äJ4žú‘ާ½4J'55³I…pýÑç!›)I‚>àîC>í™?1„jöp¦|óóDµïA” Ö(uØ®JØp“zZÜRf+•¤¢<àžTϨ‚ÚYÁÔsÜÙù€*ÿMø­NPÎÑ™å¯Pr¦ü®<®ë_!OùNaQ#zšJYà—_"Ë›| UÃûà ¼iøcóywtËIßÑ«\iCúc[ù/|R ù——çnÃRXT¶`dí<œ9ÆJ†¨pwcöv*ý<ÊØ©@ÿêf«øE…íxNñ/«î/ù0þeÕåfC–¸ «ð§×»oò?Y½jÃfÿ°—”3 àw+ ²ljýD_à—‘/k;æ¢>½íT¶ëqï/›A³ÿ1KÇïG7@SP |ÃZ˜,­ ”*4' Qx:î7ùés_2~qåø‘ >º=ÉÍü„ßckù¤å^Û±Åÿ,‡÷ýfTYÒÇ—5¡Ç ]Ú$ÝêE7d‹ dîwéDîL°–tœJ³ŽG6cå2†q(F‰xZ6 |Þ½D„ê,èªä ðÍðÚŽ Ñ—â™ø›†œi~{}‡{!ît¡3ÚxŠÛë‘ñ|ʲ:ÁÎ&—‡|B ˆŒÓ#åç'üÖi¥UT؆³ ¥›ª˜WXr×ÌÌ]~G¨ÀËòT°ÃòHñ÷ðñÛÅ?m}‹È¡I îCÑ#+l´{f›4Ú;ÜKaƒX&ð%]wÎv;~û2æ0Ùçh8I»Ò?<ÒØá>ý Où³~zþµQ]šÜÁ—Ò%(‚ºÄ9ÇÊfÙ›¾à}ìÔ«}éPÏI¿ÓxœiÝTT¾j;ŸÞ#ûWž1Is*²¬nRˆIÖ­îâ8 ˜óú®¡ó8*k«(,;—Gb½êYÆ¥x‡çÁÔ:‹Œ1'œ¹¹ËjZ}¢ù¹S]E+¨|ºÞ Å´S¢žc»‚m"‹ÔÔ à¡k:“ôFÇã‰Ð¼À1½Kh›V p¯[DbþÃüèÚùòØ‹$¦Îr† prÿõh­ü oØÊDnÈtöÏcoÁÍbíâAÁ‘é%YÉò·Ï]ì¯Ic—l"¡É™)¶üô;]šTS ÝyY ª9™'È/?qÆ•iëžp±²„jw~“î|ù@%äç¾, ZªC´cÌ•>6ýÛŸ¨bGò×>yIçanÜ êøêxì૳Öå^ÑD³*ƒPŪ!‹& ‘°V6götŠƒY™f–"ÅÔzc¤Ú™ºlA\‘u_–àå Lø¶Ve(9@%gÜš$%ˆY”( œ¯¬ãÅÀ<»’Y­ã’¨ ¬öÉ@í…¶x(Þ}(“·Xtgu@(xËUê×ñwGn³À!"šå‚6w%êaCÍö4ð2)Ë—®t/R‚{x§X!±«*El‡c޹ù')±°Â«<+Û#³'8î_þ ÐDˆ“rÀp{š{jƒŸÂDu»Þ&ZûoJþpÂÌC1÷¾5üqiª-𪿼6Pš-M1–•óU»luY()­<'üVgóò‰õ'^²{š'¸ÁwmK¯«±mƒ@Z"³=Ç!hêÓ™¦Ó×_eÈO²ù#é> ø]fË@ ð°²WAkmMhPw æÊ[U]£:ņ§Šô޼™ŒPzíÑÔ×ÿ{½oЀ+Œâ$MæèÚve(¥*À½*MŒV%<ÜU— pK„v×õ€ßö-­R– Áõ¹bxJÓUõ1k–#9Û+ü–õö)mù+0ˆݼI eÀ#ÊÆÀî¯s`þ“󳱞‘¢º^SÙRihöEhn—€]ÿ"aƒ9r/¤]ÐU¯ðšbk2ŽÌu=‡àn̾¼.47;ó•ªDÙÀâJÌK°)%–vy3c‹–6àADÍîÃSñ±Xà3)ªÞß ØÉ™MF˜  ú<ägim8½ä¼(vò„ߺž¥¯¿ÛŠY% ÕÊ%IE¾6àA˜2?›}ž¿¼˜¦¨Û™uÔÍ~ó×§[Öe«ÇµÀ1Cä_Mªr#-'­U ¸µ¼ÓðʹԕÊ× ôVÉ.+Y)ÉnI)Û5Øê&’TÞ¥”¿áàC“C4R—Oh·lk ùY®C?Í  ©8Y n¬izßOp#RD·Úü+]´—[JwØVÙÇ Ñ_†¹D,#K1ÀsS’û t©Æ$’É™íP¦˜l’t øUø·•¥^ï£òÙ]åe¥ÖÄyÿò¸/)å`ðþ7)ßÀJª#ÒƒrFT׿dÂñ—3}±M¸¼5•QìSúŸ[¹“±ÞJœ pgòã*­7xxÝØMG¼ºÄ->tÑCV?à‹KÕE‡Ž“kîëK÷דüôÉâr—Òø`ÒÔUWU'F Ålå„Ûà„;È´ýqe¤w¸-Í97/_WÃä>•N8¦ŠíÕ2Iy9n©ΩÇû§ßk¸ãÓן8·_wrÿá·­ÇW5Âiƒ¸êÑÇ#ÝÄ|<¬oÀsrôKÕ!(Щ5¹JË ¨V{À²œÜŸdÛñÕl€on¤Þ˜‡ü‰st«mY·Q¼­æ 6¾¬LPBQ]÷ˆ-gó–Ž_6@Ç)H,Œ½ªÙÀ}(ÇÖ¯*£ÐÈÓª_örDôª(G„ ¿‘zSþªJB^-Q‡¶!*ˆáä;Zµ ¸3ë©·u?±Ù*°Ù.u6rZ¹ª æúË h”P—:øh6ضRœÓyGHA\þŽ]5Þáckú¶ÆË6™t¶TëŽC@‰tÀ—p šf4‹ÉH¹‘Éâ’»Õáê>üK¡ ŒXEf _uóÐV7å~ 3ÉŒ\y@^Æ–á™õbë)Ø!þ夷iòÓÁñ#:qE2G”«xçEîA*½Þ•DË„ÿ %•¾ÖÂ;xˆl˜Ïr’+8Ð7ÜJ*ëiU¿¾ŸyÁ»³¬P?à™°%Fc4ëïpsß¹fÚ‘v¬2LºiìŸhU¾^ÐÝI™:ËYgÀÉ¿ý#~ÝáO> ƒmêÏ‘Y€çÑÔ‡À¤6ïØëçPýÔ¿iN‡¶[&óØ¥ªÛðhC$=¿äRgÇ îmì\ÊmÉ¥ú_—Ù¬>ôF¡ŠN=…¸:¡.ì^¨£U+éþs¥g×'­@lĪ«Ò4àQ·ä*ZÎy%u¨ÉÊÎÑäšçds©µÑ†uY÷ÕNǵ#ß ªè©Î ¨¾Ñ™~9ß2Ÿþii@Òj½¤—–ë“ÞŸéH¡#Ø*Ÿ˜ª¸ÇiEzå^?«˜Í+©÷^ü¥-üòç îª0Ñ¡i&“‹^P$tFuQÜjÀ£Úα}Z­d é2ÞäÕÝyF{Êó«C<Œ¥Ý©´ ¸Éy4ézÂ>!ûÎ:æÄþ™u  ¬&­7öXVÒÀ܈*Ÿn³öGŸ×SÁû“–¸¼¾ <ƒšªZÁö¢nèYÇôK84¢ã‰é|ƒG±)2;}@YÿŸo.kJùlŽ\QmÔÍòÅ÷—¯oe+E»à­³Ñ yVL¡Ø`Åýx,7ø}|i¬­úþæ8ûrÂ@ÜÞö²‡ß'‘ÐZeÖQµ¿Ã#Éçè ßÅÒëx‡ ³l™X=šÁö³Ï³ 9Í6ÙÿŠÞLasR¥¸OŠ~Ã/4ª3'?2h¯Jb%¥TkÔO^⬒rŒE(–]‡Sj¤ ÑôûŸ> -²·¢>½ëžxªJÔ𜠣ëfùâf‚šKPUnÂ.ÁÓx½f@åk¤Àã­Ê]†9;¥1óûSJ4ÞsW{¬–©ÉEyýô[K°äµ%Ø#¿ðô‘8y}%Ñì@F$ê/›²Èª×¸KCÇ^_eíy]N‹Ðp=èÓ¡JfdÀ+º8ì+cAñ}\ø>÷bîd\Ø•Sàž6É5‘Ö†~‡\Ù 6-–eò³ÑÜÔI a¯'[´YÌÛ“yß¡ùø‰kzrÛŒ^3I^3“µ– 3ë-jð VšwÅÉ/™ÔÖÚ»`åyÇô1üÓ–Ct²ÖÒxÖÂ{9þþí3'í‰PŠÓØ€ox™ÿY›VW…²iâz6¢I¨/Å;hgþ*ét|ÀoÖø^6“«2qä‘F€×;e«Ó m¥N¾×Ãö»ê²v9YkÑýµwöûÇ{²E“©·K#‚´vªš÷èà£u:±¤Xø½]ú¶ÏWNêY%˜ Õ2}]™sOøO øãZ•;XkPa=äÆjy ¿#‡öWøÏÊ¿Í$:TÅØµ¨%û$”Q¸žªšòÇñjÑyž\þX;¨bƒô¬6¹Æÿ­Ð•¾¦Þ¦EÈirÎXJ€ä‚×-_£ôu–¢wX×ô]_̯ßXoŒ .s‹þ\eµ€ìÐ4K™u•pk̮ɳ}£ï¸`ÿ:òyûªÒ]ÞLˆÙ”²cïþ–})öDÿëžùüzÓÁöß¼ô´C:оª÷§9¦j9š\ÚPqb§k’YxNRã!{›^š~À³£Ád]KKêC/¬–›¬ŠÀ²’¸7Ÿ³mý~kªÕ±:wˆ’ÑÈÌÕ U‡3¥WâjÖŠzÀ“†•©K¹®ÜÀ2ɶָ,n‰¸Gèïø&ÉÙõkÀåIAÑ ü¬A*½^«üí3ôí›Zí-»¯pŒ[‘"¹uY˜¼+åÀ>R……çnJ£h$˜Ði„l*¾Ü3©Ü¸+ÙIß=WGe!jz‡ß½ŸéõŒmãò,¬ÞQå£ÃåÉè)¦ÖÇ£[­½®Mé‘^:“4üˆCýø Dê=5/ïðÒDêËŒGÕ‘YåÏèË_Íëºjg’<· N(ùÏAÈ ä»žê­ë—Gχxd†´Y B£a¥Ø€„¦ˆG‰–#KŸu¡vÝ2²–äÄa§*æ#½ ¡YkðŠú;ÀŠªÄ{ð®‘ü ŸiCËL}RU§³àqî²Öµ´tÜšr/à;•Êôop=f4.ÿJcóŠòeA^-ÑYgy3=²¢ŽD%­i#ƒÉÔP-ä‡\òûo"gv½ÇBYà—1,)±¸•¼t2&íü´¯8o¬n”^˜©Q÷t¹™&}<É«–—£±Öªî~÷ »<[,½ÂÆúé8ÃûrÀAEÍqJŠƒ¸Yg#KJÓv\~L Z6û&üg;4¾åÆ%ÕÆÑCÙMË”yR½|ÇüôK.ÏË_!h#F.ÙFR•‘ç(½£ÆÅA#¬(U>!8þùF9:Û‘=­|€1)l™MAŸµ{õåAÇîLİÈß>›A&ŒL]ÐpcŸ~üwë;ܘ©GJ¯ðŸå´Úí3ÚòWmUeýA·JœÜ”:àþ4wóg›´÷Oÿ.wÿª:pЂpÐŽ¬]]¾°Ïl2©vuêƒ]– ë”^€ÇP•‰Õ¸L&µKSõYÀ­ùVòxD¦Ÿ4øÕÓ#É}È“æmOT3çöñõÓgB‘É`SºµßŸ>O‚LÜ \ªÊ±eÓRÓtÕå³kjŽœ­¨ƒÄ`Z´%Í}ŽÙ~ÊrÉA$Õ¼5Íp!¿ã 'õE'ÐÛþcJÉe®¼s|ƒpJ²Ì»ýªªÄ 6¤Œ–á¦ôWóبh6™¨8Ô_3+°ê'ôTc±#òýŒe=:¦?˜uWæ€qú¾‰b4ÿôåΙº<h@W¯“åSNÀU<þü 5J5á·aÀˆU9`À´ÞfJFzÀÖ³û[7éL¦Nsו³:@ƳJŠXÒÝðÇQÉѨ¯ðÛˆ‰Û:Ž7À¦óÁîEÅvg?Õ÷Ÿ¦ gå–кÒþܘÔõ½ý¿m9ÏŸºÜ_—¨"ö °Þšš —™&Im(ÁŠÚZæ}¦üw¦d¡'Ïfcâ$Séui¸Q’—OG„$¥%)‰LÀ#öÚûÇâ^iü#PZ Óó©Ë(”½DìŒ,d1áQëÆ—Ï©ö²ŽÕËa”ͱXQ÷"FkaC8j fÔ‹½Î“ÛðÒ¥Ù+ü6{|¤ k2U¯ƒ„t`S¨+k£æ-Ó‘}åŽ ”fcOHYTî6Hþ”}M†y°G,ð(j’p7r©‡ô™ð›lm±ƒÐû«ö/s€Ó9 kJSmÂoæ…©¶Ïú®QÅ%ìè\‡Ü `“&f — õj2?—´QÑøË¯¬ÿr„_¢‚Ä£&KÚ4à…‰±ºëG÷öü —³®¹2Åã¼ø ¼u:×Ë*hgجó©K¾Ø.7f"Uåûœy«ä!û–—nbÛi<׉u&µt¢/p\3ꂵö-ušÇÇ–Z-kÙ¤œÖ;“ÀšºbaM;¹I³Î:.ÝDÒ ÓN]€v™6MØ6"Õ›]FÎâpòx„¼¡W2¦ ðô}yÚ8‡:“g«r¥Írt!®ºáÍ_?ýVØk_,óÑ‘ë¦[i2×p'5àŸÑ}=)K™à2&Díò Ai‘ØëQ‰îšw1yi&76àæY½,¸áÙ%© ¸ ­¶ x8 ”^.ñ”mFïe%T7kå;éçûCf"X⟪iÚ äè2— r°I,I¿À_ÒÅU3ëÿ¯Nº°%"ŸìYð {]˜iâZˆ‹í€Ï!j* ¡€.x¤ãÖßá7À°Eªêø«k¤æù'>F$ ž¤¤/ü8JuƒÛµî׃ž\j K¶§‹ÉË>J„zBÖÀNX꣖O^?ŠÉAÔ­ÊÅŽnbMmA˸àÙHHž[4õäg&—Ù5£ì¢þ£¶ãØùòÌ,û´·ïï_Þ;cu¡Ä|À«ŽÙ¼f¹æg 4'ËJ“k2$Î*JZá€_¤`R+ÝßᥳZ¸’-ü&Â[Æ'Ùß¿‚4©AñzÀÄ<"ƒ››«¥ 3fg“X£« ÅԉЈ’9ü6bßÛÂmë ^ÎÖ討ü4áåJ›œbcŒY#©Ô†Tzc4ùA›!31ZSŸG¹º#Bp¼“ú±å^›L\3cªJ¦Ö9K—ßrÏ‚6ݨ´•”¼sNj9è« vVŠŒë€Ï Þ˜OeȆÄ{t’S_uz5ùø¿'ç}êNSbn—ªÚÊ+˜ðÆ6opÏEí2"Ç)ñRßáΧCŘ}ìx.û9sþ·xrÀ›æd«riÏ¢f!rÏ5åñ ¿ùß±/[\Øì»…ßxnåÎ\°”ŽÌ;b=b5¯éSìê”$»WeÚ=A~²³0M‰ Í–žvvK‹’KO–•yNÈXcÂÝmkm–šêâ‡?ÜP‘(È·,‡Îm¨×;y±žƒIÁÊ+Ö^ˆjž]íÞ w¢G¯V€ßt%Ž%Ë„†b#})Y&8à3Ü-„päÑU/ç>öZz‘—‰Ðž.“g£OOñÁ î=ïh²›Õ±h6ôbë­Êðù}%œL¤ï‡òߢ'øÏŠ_þ’åë ÚŒ%‘"EKꈀl¢ÉïY=¡ güü*Èë€ß~â(í³$“ØjFjô®ä[/¸1i e¿øM²ËÛ'·å¯0{ÌLš”þþŸ¡ wKÏj›8Î!Ö Kc¾!Ùõ{—õ°ÏXÖù$ÌÒ#BVé8úD5![Q§ ¨°‰ÌÅ—,O˜ ¤ý©“eù埂Sìã+…ÅtKdªØ›Ü¤÷8¡ëެ®xDFZ–û;ÜÚØ!6üú5l|– ÛÒˆX»ªô^ðš|ãÓÜþ´‡[žü$ÏR«Ç\Ä8ø/\ ÖºŠãéì8u`?¶ÜRaš`­Ë÷syi’Å.ðC³¡D}1¯éÓÂùe#CÓi΄oú}QHõÏrÂÀÛSû—0 ÄaÖƒ£·I”ÓŠ¢æôêncŽ.ëÌ—õ` ̯🠋úUȇß4cÝ _r‰j2—2g]ìW¦²_šº@_í$K F׫UÈ·’÷„oN߈Ž2!ì¹É&ÏAå2e)r™‘Ó?½8´ášŠ @»¬>þïm¸ îO³´Ë_ ÒŠúµÑP¼àf2Ti/-½GŽÒ mìŒQš[ùjXÁØ™c// ÛrÍ^]½æ£ŸìIhÉAž•ÒdSõN«7¸YØkè|—¿G·Þ;<È”_î!Ÿc ã¢FlùýÓïñ ð›âžÅε'p% »0³lÌ»:OÇÚ;üØ‘r-QÓŨdv‡Y‡A‰&ÿ GW!ÊÒÓ;œ&òZm!V[RTðW>þÅ¢×ÜØ™Œ¥ìÕý›?Å;ü¥Ô‘C~dIUÝ 0‰.-ýKÇêêiC¡“i0FNêtî°y!l„Ù•îO”¡âž¾2õIW|,ÿYP²7:á‘eÉo²sg]›\7àNçŽUܤ+z Õ{]Ñ*[P²tÚ÷Œ˜ÏNºo]¶\¿ä=Ò+ü·Ò‘Á­ŸŽ&N_’ dž4H¼ë&Ã1ü:™ŽÜË;üqDøáfê§9Þrêx°2;#¥q~Á­±rg•^ÐÍÓÆ—?¾½-ìÌžàm!ßb *8&Oý e¡×ت86I~EYÒõ4^Ú€6bîŒa/ ¿«ÓûWT@öÃ’:^‡–ÖÿÉ'h#­‘ûÔ}¶èýs)ÎàÔ|·&•#fPÙ§W|©|Y3'¦o3ä—ÝWu¢3Ì‘I謵w¸²C4èÇé³6²3¼• ‰%¥·ò÷ÌLCÈ5õœ.ªLüÓ§O:\.L˜\Èc÷ ßâÆdÑe:x©$¶²ª’RÀ}Ú@ÔòÿÙ ðQW¾ÔdÈ?‘EñJ}ö‚{©;mÀ(Q—ѯWxú~²|?óè)Μ¯T2•/×dÒ€-%6>ÝE÷qêç'üçáœ{]›gùòV&=Ìòô/npkT$L¥Ä~»»£Ô¥‘A+ æ*Uå•1Ê´½›ÉïøHÇÎ^ÖTnvÿÎB™í–µÀ©‹·Õb¯ðÛ»níû]£ÚÊ–³©:๷g¥³µû±õÓ¯ú6+C~:D™¬_–'u†²ûî-õõèæY™*ó6ú}^Nÿ3'=fs!Å÷Þ ×åm—=†iÇÛ^´Úz†‚j&’“i˜üŽð•ntLV®à§ ¯3Ü^Ü펿„Óê•äPÀE4&Ÿ#ø Al–îJ‹¿àaŠ·™!nÚ³(uu OÚ§åÄÜY½ÅIû,µÍ»Þû;Ü! ê+«ëügÉ)¨®à”¾T”)à7EúÞi†>%Ï-GôäÜåk€·‹ü+»TŠÈÕr“@}‚GÞ–}:­¯”iG‡jœ^•Ãô‚z4ë>5Ú?uÙY“¸™ƒYôÊ Ày…§¨¹ª ¿ ýyågýŽ3 ©Æz8&¿#¦K;cÍ•ô ÿù-Ê¢jÛó_ÍVr†‡bÆfKë{òôãëaöY.r»ÎÒÒo2%†jj–»ìÐ`ÄÀh[ðFrÏ"»Ýv8-Ízÿ^ç0²Î%³ðM§JkÝ> üÊëX/ÙÔtˆ¢efcÒÕ©9ÕÂêa² ø¦ÃH/Ö—ýžÁy â£íE–Ày%V“?S+ý«•×Ì|9²¼VA†íI-mÐQYU&uKïpwÅÞÍ`¦;GDÍ--¤® ™VFÛ)ÊÐè‚Gk;ÉTœfÝ_¯-îÁ|bL. ÞLð^Œøï¾9xs|H]$A8ä_™ˆ›’ú½àFŽžÛ§Ÿ<”¥Ìp™©“¸2ªšÍ›îÛGr1Hžå?á¥U¦p&ËiþP‘úãî°®Ž‹2KfP‹rr»àQIÃdQôÙeý4K]såÈd_m@Õ'üøß­ äØ(ߟ>Ï¡ÄfPuK¢¶ádô%B>`T‘ˆ˜×]·÷ ~¼VÌ+Ÿþ8(þ=úˆüYî^aùíQerÞ -ÐÔ¬½Ã S<*ÝÓ;ÜÇÖÝ{Üãe%šN©Õ#acCa®ÆUò¤âZ£&’­¿Ã½“ß~ìuôÄãÄae)ïþö<*-êp†XnÕ‘“õ7WŒ˜ÉÀxö}(_ŒÑÆg¹.{â7u$FªÄ2᥶Í®#FýšŠœãüèyì„ÝàÞØÄG•¡UÑÔA_êw  Ó/M“.|¬­WÂ#~:‚˜ôUwª˜8$-«C~ú š˜…ò£9òŸS‘‡sí/µ±¦8 €»2K8þjn“N­Ó/&ox—0y3)R©_‡{ 2ó7ŠÚü—Ô(!û[–Òvã9DÛ£—g÷ï+O~ã"ÒÜ÷Üï îiëý”´¸IôÙ°>ö"míJk €š˜‰œŒòBæþyÁ§VóÎ>Ywg‰‘Ü?rò ðh±§x_„‡™ûž24ä/ÂÐñ€Ï‚¾Dn*ºü~V~ÿlöˆZ`’z—€—ÚÉ)˜Tñ£<òOO_£Å,¤ÏØÓÀœ´\aËd€f¢šýàÒ÷ëQ·ä.¬º-èYyæüi ™Ú½—)!°Ý{_OðÇ‘–÷àÆ¼•wø­»Qó…—ò"Ihµ õ!PËéŸàпq˜Ë¤EìÀs™« 5˸yû/ô¿ðØéMžíqÿIJ± ¦ZI­uÌ ÔP™HÑÛ“ÇÑc,ö÷ŸŸðŸ¹Å‘Œ¯RÈs™ò‘ÿçY&˜q±*vjYÀÇ×ï8ë…ô¾¬)N{¨+í–/ž_‘7¦€ûÇ’ƒ7xEû•íEÕž¼tB‹°¡&RgÑ)þ ÿ™\ŸŽV‹NÈ4C;« ¬ !zð%¿·@ô‰¬ø‹©ÕÞà%VHQ{%Ðh!ÚG9)Á/À©I³åìïðG[Œ‡>À豚 L‡àçTlcOæajL 9)i+ÀµCÔ”‰xP¹"™G‚ÞX¼‘Y±‡ßKŠãE|Ué@oìÆæeuiÂ#1¥ë4ÔÎÜŒ(%ÀÅ¥–¿‚ñá gI <™OTLø²ƒDy•^p# ÁŸ÷mÊy_(“¨ÉEƒ›¼f&Üå×||By}ØüÏ·HvÇ ùuRCU–u«Óm*÷û'¢OCâJïUîñG©ky’(¥%}ÃÓE.gœ•dP-šËïøš•ã’]ù¥]þØÄ#Õzת_¬ä÷§Öé1,Jÿðˆ±%rjºøÒm–•ì^n“†9^r¹ô1,íjJ“‘tXü~¢>V;sk}Õ$+±MDEð8çÔÚFfÁk’\†GÚ³1õKb.ê¿©÷n¥‘‚n(pyÔ¡õÓqyå„´¦+§okh–n h”õû[Ú°%ÎV@xõÌb”Þrá•Å‚Iç<t™Â_”Sz Ê‹”Sgó4O:‹7xÔ-ùâ§jÔB«€»½{jŠ—xIÁ 7•NiyT…õZ쫟Zlf¤é¤´DüT£µö ÿÐøè« UéÌŒïû¿…u° /#;XÝ3‚¢ëæþ„oŽ¥[.¾šIÝÍÌΫ„ì#Lxa-æ²õÖ+]G¾¶ZZðƒÙfJUÈƘu‹]™ó±™Ö'4éJVZ’fU€{Ý2²q;ЖOŸìäÔèЛüô ¯ÉwØ¹š­–¤äf'²ñÙ•ŽàV³ÚʓÜ3kã%¿¸{ÚaP[îýS–¤eÀC‹Dô9deaµØf¹Ôu‰«§%Å1Ü2ÓÍ>_€GÄÎmÒÝóWu¼I}f¥:x4™Ú@ô7u6ÁÓë;ܤ/m™\ã’H Ì¥H8à.WœwÈÀFNIîX0ëU¬Ø)*»\Y2Ýí-¿={®~*/…ƒf° fD­È&€»%½#·O¯ð;:Z^þjJ‰‰¦ãö—‘ÜÕ_!„ê¤àh¹½Ã­mþ¬VÿôºÀg’ƦQ³ ï/xWòž–P,bFºE -Ä#íä ¶WøíA¤/ÛIbà“yîÙÔOœÁQÒA £¸{³w¸VA3Pt³³[.õ¸f¿M¦FsnõØ$1Ë®dò×m“O~DõyqjSÀwí¹“hm<äf£c›ÉO‡>ÁnÝÕo‡ŠÓbíªú¸h3¾RÂ`U­sÀÏ1!’¾Uù!ŽMª¸ÑUùp>×#Ô!”0=3¸w—¯aÞ±FÄLr)rÌ^VË[Cw¹—Õ#× ÅÌ·ÎÕ oSmÌy±*.9àÇÕÒ7¾|>Ä/7<¸°–ÙÅ6²úò;Í(c– îþrß‚‰[R% W\»dRmgšõˆ‚ÚW T‚<¡«2Qºúí×L SASÁ:àáEm¸Ø3þž5“²Êä×RQþXç^NêrYP’䱸\çð«a/W’Aö¨²z’¢>Ö¿šÙ¹WR‹Õ‡°7ªUW!”!?~çïÑúq5_A ¢¥ì¶Wš i'c£–ª„cª„”&9ø x©ìõÕœðG ×%Ž…ÔùCêíneKrëÈ¥êW¢9ÒLžPÎJœðÜÉÚ,úŽ´GêÉqú¬eØ™¨L7æ+¨¤Ì®ñÛÆúx*T×½ÛNqÌZmŸRø,Í17>ïY…»%mUÙÓñz—Á&sÜãF$ƒ$5p’Æj¢ ¿=!OŸ´~Ghþ긡ÕŸpé¹´í!“Ò^®£´uÔ@s­Cþ·¸ùâR“ü%Ž2¡V À-¥-Cðt\3‹‰‚9¸èÄ^Îå™A6Ô˜×US£6ë“ÕꟀ&äo+¿G øfC¥*{þsžÖ"½AÞ“Ír¼\Äq…äíŸà¨H‘ònq%.j qf¢ëåÒ7ÁþªZ’|OŠ»Ù£]|©%­òwíËD<éS ù! ÌÌôE íËÔwÚÖûwÍÖQ™økVKðÒ¾dâÉ/«¢¿äM¦„×/x1‹,Ç`Ï}Ëþ¥F²O÷~yVªh ÜÒRÈêhYþÄ9ˆBÒù[Aø¸@Ö”ìN6?û’Oxô-sÈœ~kðü…Æމ8ÕqnªãäÐJÜQK’k´Ï:Þ^ïï\÷H¦Ö±^«ð%ÞâÚì×@jt2ìYuá |CFû “ÑIÅÒ&ž¢Åå­ ºb"ç¦ëütÅ'…¥§ì¸öU®ÏÀc4=¦&oèUVFÁ‘ö Ž {ò©+•9z2xˆ\ER-A.wFªW4k½ÊìÑ¥x‡—2Ȳ‘²,€›ÛNý­EýÒ˜4hL2©(Ë!?iseB½j´ðã@¤½öü ¿ EžûK0v)Q’¹ÂÇrɇ™²1™Sy_^Z$剪Ø<1GgFÒ¦DV7²/oüâ#ŽMëê¸nIÍLŠ´t9’\\OÜÝ#&ȶè0[¿¸»$•2Å×<»1“6Ú+üÆ.ù«o8é{GÊBˆÖCñï ô½'›ÊYwUE‡§a"ÕÙ¬æ>'üÖ…8[£KNyÉR’êŸ%ÙípŸ –SvùæARKa}´ü ÿ‘6GjùÄ·ƒÄ“-I=^ÀÛþÖi¬ã+¬ìȺ‰pMnÊïp76!ÙdÆÔŸÄ©r?yôë"h:ï}<ƒ8a²çœ=§̺/ø¸´_ž 9 µ÷=—å³Â_—wrÐø§7ɹô9Y74” ¶]ÆóÏñõÏ×;,úrÔBÞ“Õ%^^/¸m,q}ƒ»înx–GÜÞ½UY<hcw¦¯¡Ÿ<45ËÎ,“G:rÊec]|4r¾™”jüˆò·š´§¸AZ?ýe[¿=ù®—Í|ÌE«FìT±bŒ9\Ó;Ü%9Ú¡>I5 ä/qp½¨†Á ãÑÆ$DT‰~RÏâ;‰tB•¬/Œ]ûP,þ ¿ÕõÂVÃ>‡Ìc!Á¶öœYzœcò;>‘ÀjIyÝ ™ÇÞ™ëšÅ<šòõtIÈÿKfÚŸe9 ò5°Ëܵ•±‘ƒêEÅ'^Ö&†?˜þ£©Ð×Aõ²ÂZgj"ú‚3 +] ˜ðŸgG}Õºñ‚/›ÔO¨@5Ø2¿ðrñ¬ýŸ>ƒŒÈ”ôûÁYßaxéþI˾S¬;¡z % åå2=¬\Õ—Ÿû2HKΊÒ.ŸðÛxL¤U`Æ¡/ØIïØŠõtý £N8½¥)ýÔ >)וhÂoÂÚW «lÆ5)Y©D:L°;±/^Š‚Ï]fÁT"»Z*Ð*ô²3÷+Ž´giq9Ô3†È2žp/äŠ Y¼¦-Âkñú%5à†÷Î’`y@AÄЕ¸|‡ßôÆâ«»>éOÇÛÉú;΃d,)'E¼äçcì¦åë§ÇŸ”íÄ\·M998`‰X0¸©2Á-[¿zŠ+qÄ',3wž{lôýåçÑSÈo/EÙOnÁ—¬3#¥½ë«~­ºÉ@;ž/#ÍÈCä0Òlª@ãYäÌh+ʺf¶7Ïa&Ú#£Rº2Ü\ßá‘óNó÷HiG¿\&“v䄤A %»ê†ÅÙ—¯òË_Õ%’p™¼‹&<úØòðͧ¬ëºê S_óSxÓ»¥…Òëpböí¢Ê×—Ók°÷.§3r}™è˜{“™2ü‹)_|Èdr}”åöŸ=#Zø‘e¦—¢'›Q ©\(wåøqÐ’¸ËBâ³ßIÊX“MXõ6è¸$eLÍ¢3#¹j6ù€±´™æH(“ñi‹Ëk¥/«þ¸‰Á“¬ÜÍ7V%{3á?›9#ÆÚÖu°:¡›{–±T기‰j=^I óóº=IÀ‹<š×—nÌÛûql~æ5•Ê;üøð~ÈÉÇüÊááKBs"Y¥¦ jDÓKûÿä.:NýÆX— (”¬(Í+übz©‘,¡‹qRUB£€ך|‹³œUíË\Põêä2äº?VöÎ<Ìðïy‡j[&²k©+–(àe?i¤LóÛS5ì8íÚ×:ŸÔ´Ìtõ³'µ`’œä98V3+CÍ«n™LŽX(Û‡€\âzE*ük SÒ†üòoªÑó;¼˜\ç %kåüéQ+¸_êŽ\ƒse®ÁéýÓ”¿ î+ÿzŠõžKEµ.Eµ`îV²ÂFWdr3=5Gnp«JQÍ¡¨&íÒÌ«”Ø@™ÌÇ!œF¤\6ZF«Ÿ±œPN "ëïYÑ#œ*ö´ƒ¯Tó8WTáHê…9¼z7àñË/p¬GFšÖWé„G­¿¾ÊGÎ1þ€õ ‡O*QTÛI=ÆËg©A ëIéúϧËsw ËÚKSÄTÀw¾ü:{É+ÓßÇ âå½CçjŒºóèZ.±<à›ØoïM-›Úr–O說àHR«· F¹{'üQú!õ£¬†>ßF4²tD¼¸oÍN“¾¼ZÁÌŒó$µ³ÜÄÔ±; #›AnQlzÈØjÂïE³«ê%(có(ªp—2é¶•ª¤­.ø“—òS©¶¦uÒ9 yÕHsܽM}:îÞ¾S²k%¥5s Øè6o,oîêÑJvÄÇæi{_öLÔ\ͪ^z¥ªäéîQIÖ!cÌ€ ok¤d÷¤ªwƒß]¾ÿê„"©Pü^À™„èy¤WøMÄ39e|p½ìݽ¹·Ï 豈pÍo7WOy3¦+Šˆø/î„-Gà`õc *#ª@—Ãm¦^.j©@¼«¹Ú àj B%*Cµ3>¸–òÆ[Lvj&øŸìAìÍ»ÚLàjÁ†Á ÿàÔD$w¹Î/ª›K’¿x¤zO»®b›ªW*¬*·òå–Û «’«m’ù˜Ç‹\)õ‘¯‰d2áJøðâÁ|ãÔ|ׄßl™¬eH)2¤>I9Ú¤Ô'àÆb ÛOøÜ¾wÿªkP1ë$èÒš§€¯G]¾`°uê`¬Üg/uDŠªjNøÏÜÄêÁ7Às«Ì Z²¸šdÆ&\µC¶%óë4&_ÔàZgÕØ—W:U€—ê$@0y±=Ûûz+«Št\,;" œCU7Ë„áQ"½ÂoS£^¾Ÿ#wBv,¥Ë1ûÕ·XB#ǧæ~™¤É ³ NKŸž#ük|²€çј„‡LÀ4f¥$UN'ü&Áf¾ŽÇÅ0T²¹ázHögz\~‹ô/pЋ™ñ[VEÀ£ÚåiÈðÉËé *#ø>ÊwßàQ•Ùu@NŽLLi~a0% íQw e¥ž‚„Ëf‚éq"’§w7•ï/? ص2Óc—_~neîêTü®uÌÃá¿G2Ì$94qqüÄ"¯BpóŽýØéHŸ¾â`x&{0IMÕè\룊5“¶rUÓZ1Šeãl-  x„«`nòƒ“ä·C&•ó­Oòà„H SD¸üˆƒµ0U‹p/c'ß;^gþØ’)T%yãX›jOx0¹°C¾Þ§ ÞViÒY2«žQ@ÛÍÍ\ÕyM—Î)’×Oÿ[Ó¿iý+d„ô“z’ßíêJUNäw|ºáóè_Ó·oc¦ó›\éNKÛe ùáľ¼Ž#—Y€¬Ñò^Ú>ÞL꽦¥±;ùb§ŒÌ[Üò»<Ž sQÊ ¡RJ¼Ëâ}ýö wfÇz§:?Â[ÞÑ<•ñWU׸,k¯J·ð;mæû¯ øªÎz&/Y6À¯,ªƒÐÛóD¢›¢Èï€G•¡hÅÀ!)U‡’º=aÐëþ/L¨A’9BÖ}+5âÌÞáÚ}mÚã’^ÅÃüÊžvöbM| ^Û¥”ÕåàÁ¼£«qÔ ÿyø‡¬m@Hÿ±×«VÑLÃYQ &ÜL,#+½ñ¸Ä÷¶lÑ¿NjPkfmtÙvwî ´Ïce¿Ão а¯«ÄK#ó1š ¸eÅ6‰Ëü–½ÅP£¸Ñ ŽÃtÛK±w8§!KQ² ¿/FYiÈS+árþõßêÐí褦jʨumOnÝOµ¼ÃÍ·–ó)G·ŽÆ¤jš‘¦OdY’íÆh;C«G”xd‚ËÓÓX¦®ëV%‹àƒæÆÔ#BþÄyõ—­y“# _k¨C‹¨^‡Éóòwƒ‰µ$Ÿ:¨¤óXt[àWað¹¢›³" NjKW\eÀ=¶ØZÕ<¾NjæOññó:…Ûš0–<)Q%Àµts@¯2Ó$ßÏ@OBQ’¤Sfòœ“¼0'¼$æï‘eH1žz£Çé\¾ºðn×…õÔ7àQòV÷ø—[õ_ŠA6i„Š©aí:º|޳,IŸu£nðpÙ€—:Ó࡚›xWz¼Q½IâO5‡vvô×í ¢ib†·R[;4ÈA‰ïðh[ùü©Ü¾2y+ˆ¦)HtãŠlyÁ™èÜqêçWøSKäë;‚„Fˆ/9¹ü޳úhÎævB¬!À-¶ £}”ñi±À'Þ“=hE}úŒ ‚|y%xT¡×çäõšëOÔ6¦@sÉÝV¹Ù9zú¬ÿ畨IÀ­‡ü+L¨8ÓgWÕaÀG½ù„Kûóê?þc+“£¦—À#’ÉßN—™ú+ŒÁ!œãwõ¡ï™c'®<òöÕׯB-Ð3•2RGÄd æÎŽMõ`÷¡ôW+4™ý±²Õ.Ë8"vEeú×6Ép»©Ì²E]×€[a¶#ä~¢[Å©­½ŒÒ×|YÒÛ?ʦEéYŸ}#!xÔª`¡Âж6"T_»|Žó$ˆØr‰­ç¸ÿºMÀM öŠy(“‹zñ6iè¬8‘€Ó1[ëÊ ´>ò6}Ô²rúë%oHÄ/KUâʃFÙàò¤í“M´…+®s½hŸDžúQlà'üç:¾ñ§/'È¡l—ézeoÓk_%ù€gnÒÕˆJ-×| §BE÷Öv(§Y^´å*ˆ—‰I`™¼Ë&ü‘¸üÕU–d`ÖÞá% y ‘å§Ãê‡Í®¸ªÖ‹žYXH‘ä:4ëí­­5‡ vç Ê9”—àf}G¤ßº±§„ëi{BÎJ3¹áþG„s,›«/ñœÆ4b•Œg…2d#^ÌÇ ÐÞá%öü ŽüëuÃÏ[Õj«ábþ{µÅ;œ» È&àÑûN­6øjWpKÙ!ª»6 Ž©Uõ¡±ìLMuþꥡH†·Ž¤Eô€÷,WZÓ ç2±W³‡|Y°ôåB§ñ·;=Ì’£~l]Î(2Kò'\äR!ÁSØSŽ8b5Õ­Ws;røú ?Nuç8Ôd¬ï @ÔÁ*¤ñPôè9™r¼ÒÙ5}E;Ì;‰rÛñåÓ+üÖû>Š5Ðò—tF÷+ˆ›ƒ ‡wY•¿/Y·zرè×3ÄÍJðSW­0À•ÿ|-Sõ„{Ôr@ñ”¾vì_waÂÁ~J¢opï¶s^„ [õ[+Ü…é¹+'›÷ ÎQû½>š×QúÊ:–3¶"šRUæb“Ñ™{µ)=¼+¨žF,>‹©N'àÞTñ¿ÂƒØûë8ë§ýåÂ"«¶ÌdŠ@KoÍqtµâé„9ãñõW0Š bïÇ[PK%|£+WÁ% …_ßñ÷˜|íi…Ï+u;È]~Ç&‹:ÏTÏüˆIåu(i¯úHµãÚø4[þ †ÌÙ¯«–"à»D~²—PTO+Œ#5ä6™½Ø:ìÎpßl_VÙ²%Uàxeté$ x޶#1ÓÊÅçåÑ]FÇ•Ž¨¨=¢iWŽMµ^“(ÌíMÖ¦'܈>ÁM¬­ÕOYJ~ú¼D‡#†«—›2•7i,B9 ÇoðÇa§À=ŧ-a¨¬‘]ä-ànú Á•ŒqZ¯òõNª'ZÍ5+ªz1P‰Lrò²×=æzù7ÓF\ïpO2ºi †³>k‘5!ðI©It¸ <.“èP—F…[q™*xŸÌ¡*…K86&ÀÕ#€GaD,]i¼o%õ8c>c‰>dÍÈ¥qÄój74ˆ}8­« 7f–;æ" OÐØ¬i‡¡©ã+SÕ³Ùpe-6«ÏÑŠÆV°‚CVs(9ý ¦3Ŧ5€[ë[Ù[î_ª z›.+Øðn °gYâìÝô­ïxä\«ÞL툼ÿIoðÈUþUÚÚÅ¥ÕoxÜÙïßp¸œ1×&·IGí_ò§þH‹:ÒÕ/Ö(™½í´|Ï*ãW‘c’"¹ÏXTu Ž¤Ï¡ìr ^ÚþÜkÌ]vc'1³%hIù‰×#ÑÄ´õo¿ôvB³QOÝíåÅA|Óȧ{V³E€û-;¸ú¬ò É<ëq5¨ËÜÅÆ®Íó;¼ÔÆn^Œ§©K-Ö‘Ð:Þ±F•2£ÚÊ ¤º¹ ³`']ø\•¨Z—0 1ÀlE¾^x©Ñô)±ÈmþtÖÒ•;>ý¨Êà>ÊÖᥲ’UÚå"œÙÔ…úòóìð±“7»§ºæÍ ꙃH;”Ñ䓟Ya Ò»vU ü‚Sȃx•/‡Lò¿©Ú%à¥]êVÜóVÜÑS÷•<õÀγƒœ›U…€G2rô´lð¾•hi•i“I˜˜EîJ¯ð"Ù¨íòž5ÿ>výókõ­[þû ¿Éë¤´Ž€·üæ¼(íŸçlïY{y«ø•Sרæ¾ú>60 K~cÙ?ŽêðK؈Ö¥³_ƒæä æ…¦{ ;¢hõØÿë4l»$ ™!¿¼Ÿ¹ù«þ+¨ÞgY=ܸwb\®£ ¿ES_=XÛ$Ð=:Bþ‰Ìª| ííSeß ÎŽ±’_pc²Jº5Úžøw9Yþ2kŽÍu´*wÃdÀQ¹Ûª(Í.æÍ§¦Ð¿{´ÿ·#Ã6á÷ëà«RÕ ¢˜I,C~5pШ갫YÜ N†ïodðä_6¦öh(¹Àgß AD³nŒÿ¢þ„ÿ|?q¼Ÿ¥<Ô ‚h üf¹‚/þÉ•†L›ŒFhÏsÀq¾=µ 8Êñk ï‰Í³­¥‚ ?ò½í³_åHÜíõ­DR„=gŽäœ'Lc¦½ª@ NÇÍTš^™ÂÕE¤˜gæ×µ¥ÖVE‚æ—…¥z —oq"ùøM5Ὸ½Ï†ÿé1{YTGù}›æWHA|B&Ü«jaÎXëdÌæ×àÞâKÔwcÙªoÐ!ìLßeb%ÀDl=LòÝßàé¿²ÅøX[à ¬³¢æPº &ÆÌÃë >÷LXBy(eÀK¨’÷<&!úå;Ίy÷-BY-G<µl勬EfƒÞ>=pOM€PÒv€G ù!¦ r©›q<ž,3ž2£2¾vÈZÌŠÚ‡¬ª@—ïé°›¡¤\(±Òš4Ðüø 2ÓdÒO·Iä4>i¹®Áw¢nÛR‚¤ïĤ“+-XÀ©º¢%é<ú)—ãúXUpä÷¨`UÄãvÑ¥äIP!°1'_ Î6ృ$ŠbÊL…ÿ•šmS©šµËy¸mƒ[³¯òßeÜås„(î 'A ¹Òf`Øéþ«¯ŸþÓ¢ÀJý¤%|¼hMä¾µPýñµìÊB¬AÚŽ¸ãýP©<…NúÂ/n  ÒaÓjO­½° ‹«9WÀ½– K­ Ç5—:›s•”âÖ®«ô®üIÆ GH‘ëÊ>jov¿–dä%c÷ÄSÉáw"¨}+[µ/AŹçOÙm²æo.Ñߟ>ÙQÔI 5;FœtSj& §Är]vpLIiàÈÚÇë§ÿ¼fŽ_üÕ@<ªÔXA—(;.bÂ>zÉy&CÊÍx´¢ò=ø7ßI»û±¿ÊV X Ƭ²ÿ Cã=[oùˆò–ºˆ[,†y|¦ vd8Ûš¼×:¼#6ÈrËEÜ"|õȲðÚ1ÓUÊ¿´vàÆ{2á5÷årå€V Q I2zì s¶‡>¸Z<°Óï}è§e<¸Z}ÃÍå·6jÏì/ß„)Úz ¦þv–±¤Ö&Ž¢tÈ:DÔŒ´ u½ðã§«»ZiÙEe%Û/±³ºc*pò¿¿N0Å*;¥6=àÂáPucú#S¬iÕJ¶švêÇ`šêE~:´Ò‚ÚM¹jtP½ˆ„Ç)þª^¯aTŒMMW™Ø£økIVZB Ë/×ßè §ÈÈñ bIéñWæƒ3dè ÇZ/;çÛ‘ë¦ûG–ôª5x–‡j;d;hTöžÀü(éÀ/ðËŽ¥Oª¸S?NòV…cm©[š´fmu,›"Vgí‘Ì[’;cví;UŽèíukçØ}¥Èö‹Ý¥Fa;œpƒd69Æ<7Òê3iÞ x¸íüÄãŽL«‘n÷¢ÏŽG½‡ü½%'ü–ÁWl¬¯áå|;úÃw$1Òa­?ªÁÅÉäË}ù+¸)k2Å›6Olî?+ÊA‡œ[có‚C±‡.ø ¢I¼ ¿IÎõ/WêÕ6\3ë€Ö¯•ª¿Žtý„¿Lnuˆ³%â–š¢J^ö„/ޱ•ÏrØdd7äªOœ•u'µVÇ×VGmÝóܽuV$WÛ$ž¥óÀÉ_uU6-§esZ[\.ÀO.cÊY=àIñóÚ É®+þàÑû––Öh%}Ö÷s™“¹19Ø ø£,òÃê8"®µ0Ç)Ž%˜I–${T€[÷ RƯœOíÿõÅU]ýKr˜ðšb§'OŸÉ5<ŒãÃ¥Jp¯ÊyªƒŸØ˜ü“ÝÓ ¾Ûæ9ÓоT!7 ©HÅÀ0C.ízž=Ëë­/GÏ#ÕäÏFúsfE=ùútô´Ròj6ÚÁޤQD’IÖ„»Y•ydGÞ¿c!%ÆËêÞTùîÂNìCªÆOø­]ý“—ÍɹÑÈstEê—qÝ9HZ.±Îütp3™|ªuÅü±öÞjŸðŸ1uñüUÌ®—S „O2¢¯Ðqææ¥„½?"ƱSÇÌÃVw„^¯\Wî†ö¶™dÛüÑá¤ßUš¿ú£ŠÙÓ.ñU²±”…»¥wù~¦‘èÒ•µÃïÌ~BŠ Î̦~žÔÑK[f²:h­ü„êÓ!Ðçdv×Ln¿öXMKG°Ð–%xÉøÙûñg¬Êcýy áþy( Õ¿pÙÍipL"Âø1¦ƒ"Û¡”˜ÒÊè“eÊ+~z Â×™ÜOïp/c£S’OÛ ¯íÇæB9¢åª>}=ƒìŸRd( öjmŒÐ¢hn€—$Kª Ÿ&YÜ‚™²3ÿòP²Ÿ2~$›ùiˆÕ¾ýW:h¢…¸![Q,`À½ØÎ˜‚™òBGëýÒ'#™ÜWë¯[œÜ"­žy,Ó±á¶ö;mG´ÀAGcÚyRµp{™­Ùª‚Ñ'ϳ8ÍfŠÚ?Žçi«slßïeÅn’æ¤frÍÏT,gvrÉ^Ò%;HŽ”°i”ìÇIôáÂÊ™MjjŸð/fæÅW²×w8÷âkJþtÂ_¼ø:›‰[ávL;ÕQò~i!–Çuƒ—AªúŒ”rƒß&^½|åRp‚.d›d餸EÝÉÇóqé¬^|Štî?ËÏcl‰?œÇS¬¯WŸoÇT£Ê€—ÊDý‡$¡Œ‡,)G>ޱeرCf‘ÎwY®˜•Ì8è$fâŒü¶P'÷©—Šßñûøb–^ÄáÂx²®8{‹V$sqÀM²m$‚yœ}÷õ ï8“c,ä0êœt8‡ôH½ÄÔ-5 qgë–„ü5ídIeôºjŒÉ;¶DØ8–çà‚K—°qñŽ oåqÙÜátËNÀ­UÂk uDLø÷s,õÈGÖ54À¦@n¿q Q&²š¢n)±¾üD{ú‰G$ûýgE©3}‹¡¤:Çäo'#Óp]å<§­²ü‘qåÏÒT—Ú¥1~½’ÛðÍ6jw«¬ÓÆ_¹Ê­RƱ caÕŽtM‘:LUÖv€Ç([)Ä©À»(Û™ï¥à–I|`V䲙Ćޘ^Œ'̳ú>V³ÝI¦kÓ‹zÀ Œ·²c|óçí®ŸŽÙFK%IÀ=miàþ*–ò§.p¨Ô³©pùÛ "¨~Š›|e ØygRc÷šÕÕ§mbÿú“p”ýlC,ð—3©¥Þ x1ß²u9¶ÿÊö0êÎÄHݳš܉úðMó­~%F#¿i]qQf;•é#¾øñÛá-G$¯R ùÞ;RÇ-®VÏ}õÕàž³ŠPŠ®î¢ ‹—¼cËì¹”¯u’ǽðZP:rÒ#üËi½   JÄiÎR‘zt ×ÂêQŠ& ø£*ÞŸh·Æ+üçê(µ®½¯Šy"¢”‹öïckóçÚ„´(¿ìS ð#ó$ÉŒ× ø]¥çoQ¿¿Ã÷Š^‘íÇoŸGZ0›º&OpÄĈª†(g'áœÛÛÖè§)V•Žxb>YIÍ`°¿©NUäñ¯jfÂQ¤ àž¶fâÏBí*¨>@ÌÎL•++îà6ÔØË}›9ç,Ó” wÛª4•svpi§ ƒØ©s™ÔÓÜ"í|ú¨G¤²TÒx݃?4Uâàu—ÌÚ‘j´z@]ói:ì^ÆŒˆ¼³Ç%Ù‰QHÖï}v± ù)RlðãH"„»¤$V'üvgœ2DËòx'´/+²Ž2áÇõµÓå9u,?y]H’H~yžWêÓg«œM)$4ž½µÏÙX¾£cæŒj±£átD½`@>¿Ã ›±1TÑdlðQ¾^”4?rÏ•:8ÀwRGIúx„|©>‹'%£<9âÇ…™WWæËo'³ƒîUm&¿Ž1²PkUÕJˆœ2­Y—’æã9%ŒïŠ7 xtßI´k¤ôx;ØD!¢4Õ<Úk9Ÿeæ¥ 0 ½™y+iÐyíOÞ™¬£É 0Ïà éß­ØSnÉ'_<³›¿¼œ3_ËFxY&\€ÓU—½½Ã£ñGu¨µrüöuÙ`R™lëVæòˆIdŒ,á`sÖç|-eEå¾à-ÿÓͺayúØ rìÚW)"’së4ŠºYÀ•w6ìÊéã‚3 ƒÜe¾6áVûNौuòj@Œ—:ŸÉ¦© Â:6÷åÜ:…¨òN'–è/;§¦—ýB¾å·'ôÛ¿¾õ²*0êkÿT5õ ¸%ÖÝ Eg|#%ýýÓsµµ;>`ûÞŒ00K‘¯J¤rŸay‚£ï¼íÞÇÀû¤W-cËãa„á§ûB#$9©h1áw›¹ñu}ÂóATäÜàÇ X‡X¢Oáy=r¹¯è£…•²òsüQ}aF¥}ÎNAâ¨þ„ßD?ë—p߀ð²1?ªúü£^}dÆqÍ Œ­r½—s< ¼1`ä›é÷c¿Èr.;{±> gž²·_{6÷¬|.«@þÏßÑ·¾ã¬„ôJf0MɈŠ0š4Cµ¼ùŸ?%þi`oCckYŽÎn“V߄߅Ií+Ï¿hûmƒò–N½¯¯Z˜ï:GružƒÓ…ˆ0Ý_?±]d’£éh¹a“’×›]¾°ÕÉŽSSò‹€³ÑçÙÁ´Ü »;Ksª,ýOºy°TdyLºyéoÊ p/}§éÒŽ¸ùÓÖU‡Ú=qqʦ„Ö÷DÄxÝ” 4à1ª|BHI3§\ßᛡd³ô½­ayO~¡Ì„Ç¥ô,ßb¿ø`ê—t4Çkô·d|;©D Mös¨›–÷ŒvlšNÖŸnÒâ;(!ýÅ_0Iæ;àTjF[ÿä’»_±é{©ÌJU÷/ùÝ.¨9VJÈ¥¯œÙÜŠ<‡zÝþô?)qMŸ%eó=—Ê-êþé/NäÉÙ½|ïË7y•&PwnÌ)™uçL”­£+w¨¶zW#Y|qjùè’ó Â7ë%™%‡ÿëá;“×ë&7ÈÔ…Œç?öÍoðèjvp Xr’Ëèñ·ßàG¾£ÁÙ¼|`šA&|ä&êɆ.DéT94 ƒHÜù=ð.7øÝôà8œ—t~ gÙ‘åw„Öá#»ô ÜY'8º`CÂw0º_aÚ¿»ë>7Ñ[:®Þ±Àž'ÒÿiM~:ŒÊ=„Çä¿û!>÷àS±ÏÈ #õDá˪™útÌ¢2ßve‹wÁ}Ûÿü‹>Þ?ýQ¨ðדüb_¤u8,HáîTýýé8øú^ðy츿Ԛ>ùÓ)Ãw1(sÁÄ®·îz¬Ì‘@¿R¾+Y‘_ðbĵ ’¨P~kbœ²¨ëÆšç¦3&«7ùA>"•xKB³ú‚{mjC;¹º»`8]ðGÏ«{Í¢ö¥°pÀ1KÇ IôiÆ,ëœÃò$6I=`0-±)S_†(ç´ÜÕÁaìBÔOM51.xsäTà?O×#Œÿز‚'™ÿÄ$Âþ nƒ¸ê=~ù|/.<öûß_~v‰*3ˆpµ@gÎãíÓ÷¨Žc© pHO’ùÏ&—vßýô?_^ÇxǤ!Søÿ¢ªOÿ§xó,¿>}Ò™sËÔ½X=yHiÇÖ€û¯È¥ÿ­%phR’ÖLi¦N…’å¢ý¹ê,—ïߎ3©ÈŸhøŽDØ×寂äu&ž Ǿª¯Ÿ~+¸úúKp¾U6 •ÕUPÔ$6jYÅ 3Vù‘Nøû§3öŸ·6úâ8¦¬òÜÓµ¸:¹ ÜbEÿgLÓ¡“wOL)šh°I<‹Áœ—ú;|y~Ú˶“ÿ¶ÄYå¢!:‹òÔB…5ûŽÇ¢SÛdÂckÄ/sh ,_~R˜ù§gùí²²«ÿôé31Ê•…ç¢uvÁ¨’pÏÕ,à·Ü¯ŒO[¿ãlŽ4¢ÚyÕÿþˆß³1Ä"7€A‘lëš)G®ðuÅ‚@=œ•³|À/bÏÒ9­þõó£¤)棨+Ö0:Tx ³1ÉÏðšlgô£¥Ö?uý‰—ÚITgô‚GaEc+ê€9¹¾ÎPžTê©,:œu/뱡N.0w#þÁ%ø‚ßmÛ¿¢¡kB”´”_ëHs—$˜QšÊ@&{5eSÁÂ$©zÏò¯ ÷Ðw]­žL—%Ö˜|Lw2Iêž³—-A¦lié²pHVsuÕ¿µGÒ"v%= øMT¥Ø§/'5މjój=Bᘅx—E¾À<óžêà±÷¿ª5“3ê…–ª°A{§ýŸú?¶"¡Xôª¶I<Þ¤%¯8#Åu“:» Õ"€¾rØ–¾r´Q>Ëþù+LbÁZÔ9rÈ;÷„ՓǾ쟋ÎIL[fDC]MÊ\pº¸9~ÂoM”¯š‘À#dC!wÙÍ“ ˆòQO*›°oagÈý3‰€– 25Û€7Ùi°òù‘g¨ï8‰€™MžX’'Ì$¦ÁD?{Žwxô-‘;mJ|9zÀ#ÌdÜ0÷¡zðɤÙi" ò½†ýCb˜¢Ä‡ÇäÀ£bİËL²µ=vf½†•¶°‡F‚l­52Èž“º¾&ÜÓ^x~$ä_™hˆ,<9ôACÜ«2Ü•K47ãTå²é¸ðÈe²ÁÖžnÕÖj|…@ !:›hÑ çŽFC÷üŹ’rg»ÌF $L¤2&…ãì­¬Ÿžÿ¿Bê §Kû%¤~RþUË÷SëòWååîÕK{”ÿËÝ{ÿtxóÊ*÷$€¦Ïo1 Ø?jä„1kéÎÔ™n†)'{uý‰P±L¤òùÔã]à32cCz·ê ÎGKåÎîÞ›´Ô‘O¯²‹—ÚvvoJ_†wcª q'©/k³ËKù$ë¾ÃïTûêŸèÊ5ºD"Oj§¦u)›Sù鸘˜³v¿• ŒÚEvám#_;ÖFÉk½#§K€Ô̪ð?½àùÖÂߊJç;£¨Æ]NÊ-¹uuäÉ^¥?Q¯`À}0œ”6à‘¶âŽ“(¼8Ë™òkˆT}_0DñÈ—·¢nþ ÿYo§ŸŽ/-æJ™³üÙãÎNWU¶Ül‹ÈdÉÓÊŽÌ ©RŽkµ¢>aå–¡gý«¡‘!1œ˜ ÅèrÌzÔèdm}ô<ñ×#1êmù+ä½düÛÛT¯ ‘ßD¤2ŽeSßáÑG"çË{¨7fU”܉YÌí …-N#_ÙÌhˆò5Lxd•dåI¤-±%çÑŽƒaô<àó é ¹vÕÚÜŸ\§n蓦S×'4óS–ÄÓhÁ‡Ë³®*…<'ÏÙýýÓ7Rû™¹¶Å»ò€ÃÝs¼ÂÏ©Àtêή‘Ùñ!ÔÍFÎ×ð,qÁ¨*ôÍ“&j=ï|ùÔ¼.ê|f_i‘,esuÁÃúÎ<¦ÕSAj¹gß×'„Ѧcä&¿ã<‚I*ÿÀ~âHÞR^þ 2Û™kV»·Ào2³ñ!¡ÄuÁw½SVÿuÄSãïLÇ'Õ˜7U/‚®‹^¥ËssÂwvï¹8’×Ejd(óÒalKòÓ l6@F÷åQ]³ôÝšÕ‰=àP{|ÂmT&Î)ó{t>‡ÚÛAÙ5Ìf`Tõ/ƒãÊ:âf2Çuoœf^V¸é𵤲cÈÿ²vñË)hOÇXøé·Ü‘ ¦Yl ùQ]bGm’ ŒA¾gì§z³¶ò%QÌÌ&dF†D±e²‚«šB™Ê·Çbf%Tä<á\áKíqCY]8Ó|©ü&6¤—åÄÜ1Ñ=¢Òôþé‚hO}%Ëk[7{"¯÷š~•O¼=^ï³±îc™ÓÉÖMÄr¡dÅv<<ïз½—ßXn¿I½5¶±ÜÕtåŒÊE]\Ÿ­%Œ¹·CÅ1XG}”“:T@éuxÿB>ùk_RP“=ù’­-L@T-ÃwX ¿b7Þr)ûå;XÂ¥b.• ‰ø\6]&ünFÒVÞ}¾ÅÏ>.Z¸ü‚owk~®Úið>¹¾Æfj’'âäú–Ì›Mfu’‘"±.ËNP§-¾µ±Žc{¥'f0m¬ÒÔÆ ŒõÑBHQßá^óž£Ùñåc¹­¡üÊj=/ÙKù5“ߦV8Ä•ð£ŽWÒ_áO)K§=ƒ*TèÉT@2áAœïªÄþ•tLªpTm²ªÍ?ᥒy%ëI>`Ê4ö% ‡¼l!d÷’eÒ¦ñ^DÞK‹ï÷1Db–{QáPÀa¼°™Qy¯=RÇo©±uÏÓµ’¼7ZR' dQ#¨ä¨Úeà;ƒWE2Í—^*©Ê¿\žõ‘ítD ‹(ëÈ`·ÊfM1!ƒiLEUô9TíåÒ· 7r¿cªªuôïshÒ™s+¤koj^)O¢r.é_¨€Ó $táôü6ßxlå5© ^S1/2@žðHDõ)$ñjÂoêÁ}õz>þ 62²Y ÝdH·² $IíÀKn[×õk¬¸Øµ¦)?T(P“ÉìÇ®ð ¾å9¢~ Ýd0Á=H˜–eˆ:©ÜŒú?‹ËULð´eöçVãëÉO&¸¹¬^4ؘ3V_I* i(½Ô Öå©^b_¥(¿ó3Y˜›”ë’ˆ½F‘ª\ӨÈ<æñéªìÎtq&Ð/ƒH·³×¨2G{äL{9€…XšÛåøH29ïòCæþÙS>Ê=•-Ÿ~I·’¾_qôôÿ«÷§Úðˆ\¾öx¿„Tžßb®òü ÌîHOêyË.÷/U»9_ö0®qµ÷-ðMZëq}zm+|‹d>Û‹ÒŠ½à^YÝÕÕ,P~Ô³bù«ˆÔ1ôilh@–WA ÷Â\ëp6Q|<ù”^á·¹ã–Vêzyž/áðw¥ŒA[k¬ÙÐ$|RR¡*~êäW8«béä3œ. j“–Kß…-UütjÓ”ÕÚ¿‹"?P5E¬*¥TÒ»¸j”pOCíEpz3¡%I?Ä nÄÎêg$z„Þ«%@™œÞ» µ‚øþtÌ‚³Q }„ƒÓËFa£È8ø‘Ó{œ1Ö“À.Ê1&vÕý½à4#–­QÀ-1ÏU½ÞGJð¯8WêúgQƘTÓ“¨ø n ŸßýÿÝá·új>ù{Ë_]ii~E„úY”I$a{Yi†3­2ÿîô¿½†Þýë5À/Œ±“G“KÅIÀyvME$`þþëB ý„ª,€€ÿí¾p¾M$s~ÂoÛää³-KЯF‘ÿIª‰x$5ˆ8¹¢ÇÅFXkáj ðhªÔ[ÀÙ®e‡-ŸSm_¦Ãͤ?/¨Ôdt3á¹ß÷\ÂÞáVÛ–<­Sßyϰ´õºÒdeÁa@G žÕŒ-àQbg椵,8’?yØÅe¤DxÛ;Ü=Ø ´ò³šð5Úâ'?fyí¹ÉúܪJ€Àì.™¤ÚYÉôncÏÒÆÎph)õ‚šM‹„£È'„6^cFqúýÀ)~«BSŽëçS–äÄp:,iŠQ 8;;ž¥Ã~Â_¿ã 8©a‘¤üŽ3à4r@ÿBPÏüoó¶Üð¿ Q‹" K*zôÚ¤˜›Ù:HŽ+~¬-ÁèÆäúÃäší‚Ã÷û¯0–KÚÍŠÜR!† R+½<2°k?®²XWڌ쒿ƒÿ©S{ý´>Ø%ß6KŠõ xô¶56ÝÇé­µÀ3Þ"Ñí²SßilÀ7û1í¼O´©|žϯ·&™ÖMnuNLè=5(UÖ`¸GŠÙ xŒ±Ã…haþÕ'g;uF¹Ó/v™•$CRp7:s'C  ¼eÖYm|ñtfûúÙÉÁW$Mðã‰n°£¶¯þDÅL ÓMOE.H[«áR/º”±úªº¾&Ür&r Åßá?—àÉú\o€†¤R¹ÊÈd7Æ MMµ4@Ž[äèÜ¢|Ù& ª÷¦r)p«y¨"û1í)+ô”Û÷s+*“:hi*j`uä²ñ„Ž{¢~! ­F%ÜT ¹Í¨W>äa7 ÜÉuñØTj=B3»‡@ï‘ßáÞI-t™»¡ÉÚC…i­o§Ê«âLr»Ê 4˜ÝEò^:ò=r—=r²nð2cÊŠÅ#ûWKµ¯5ƒK˜›‰ƒ& B˜»0æÉMpõ ÎO‚*ïœK×›˜=ŠŽÞá­ìŒzËÙ¾Öèã…µ‡4-Pì6âaÒpV hòìè¢êõXs [„ ôÂ;‘¾ S®Ìe2»k;³ÞŒ|ï/¿Å…ÈG¤ëšG¡‹t»=Ë4RÞƒ5Psäwxn$y¹ýz{LÔ-¾¨.“Wž˜´bNUîËy8Gg—§¬ÛöÇéšÓjÑô+ ¯ÓYô–äkxéå–\6àôèñ,CýGî{´“û¾“û~DÌõª«m2á…Ñ¥JQúY܇ÿK=k™jõƒøñçÿÌ:¢}_Ä—À9IÔTJ½Eœ'2%ëU)ô•Gz䟴,TÐûó†XÆï;îØŽŒØ™Å¹²a/.gChY/ÔÆ!m²ƒ3à!¿#¥’‡•òÉëë@mÉK—r¦ýK‹ÒåÞë¿Ôò0\˜6UÉñúé7BLÿŽ"0‚@ø4§<šÜã³ÉëLZsß1ÁP·ØuI '{¼¸!Ë®&¡¯)6ËÜòW`7Ùãi¼ªTy÷^äó­±ö^½¬Ä{óËXÒYFpMÌѸ‹·'fL§!ǧûŸ\Gi8n—€ö5·Ÿ¿Æ×JQc![Ù$M'vÿè¡]œëø§øÚŸRˆã°üN²ür¨-$WzÀ#ÅÎ?ÅW.Ýd䜘ü%PTS$ñ)·v¶«ŒúõK&‡ùžhüÝ3ª”v²¢™årËúÅe§oxäÑÖ«üàLh}^”JƒàK½ \ù&¼Ô¶e„1l|Ð@ÝeS27ø?v«”FÅe°GæodïŸXÁÉüÍ̦¸H1-uWº©º‰©Åtyã]âÉ[$½|<—UhÇ&÷6r!Û/»|‹….–¨öÏ·RàÕríögRD·Û¾ÖOYŠ|—ªr£y¤úí"C²Ú î­“x5jV?ñ"Ï2¥œ¢ˆ €GåÒÍíõÓo#©¯DOƒöre–†Oãp7¸å±5çóë¸Xú G½‘ÕZCæ®[SFÇIpìŸu ~;ãnÈc ¢Ì™ø-eWö€—ä[ánôñÉKÐ5)¶ÇiH‚í"ëÌ Ø;‹šüȡի·WøSUúg,W,ä–YÃ÷x*:™ðÍ|ÂkÉ_ùDýÿb¤N)6Ô€à‘É8éK$úH/¶âßÙ&èÅ].•É>ËY¤£¡Dgyö´0Gä-5áQ”þð<ÎˈäÍM®Çúì€Ç›È†OMÖ. ŒÙŽ5å2ÕX8}Ès“Ÿÿ_ ª=jÀŸå¡¯U‘D¿•—Îäí¸‹Êjr9ÿq0gi?n`Ó-÷Dý¸Á퉥JÝ ¾Yù±\¿KÓ !; %KuùÛgÛ„™ðD(IÁ ¿é$)êÚ˜íIS4^žÐ„Geò«z >r˜ý40^Ÿã%B=›´u\"Ôÿ¶Mú£_Æ©'ÿõgÁ¤Y–2x½Ø¾¯ýñÓF-¥¨_ è8?•¹ÿô]×úÅâ*¤mêëU·­E}‡;©@ßÚƒ£|µû¥ñÊ—}Âo³bÍWmìIW9}ãIEIN¹t§Ð‹ÍesòŽvÆ òýÌCe“lòÓaŒÌä«ìŠN9yøqø“¾{([Àw…£Ïáè¶lëÉÚ,VÉö=r.Ÿü.|{Éù¹3'zНb¨¡1‡,5vÉú†ZD ðÇ„m£)0áGD*½IÉŸD³s:þk«‘ _ÔÐ&Où%_pg³þáÕ_á?JN—ðåòI -’æã“'š ›ÈtÅõòI ÍÌתËçùÕçËè¸#•>àÿ˜hþø²þ¼†T^á?TÉñÉcù«ª?ä1ˆ¿Á#mQýýl ~}:Äð™›—©lÆÁRmä69~nR_þêK ë®nû9Öªq³&|Ù€€´7†üòòÒÑk]kcž!Òªø¶>ɨLšñG>^̾×P_ƒ¹›†"Óù%±LRÚ,õ¯»ÒáëD™g”g#Ó©q+À=Ëu[¼Ã£ª6žCˆ¹±MZÕÜ3àÑÒžNpê·¾™(úüKFU[ù’k&ùxŽÒßáìûqYóïsh²I-¶6Ày|Ú²Ë ÈZJ}r nrζžk|ã;þ¡žœ¦¾Àçdìæ®¥ÿýép­c™‘iñ‹I$Âj*õõÓoÊŽ¥­Y»OÞe1V±ˆ.0œ†éu *~Ó,9SÊòW@%îò¾ìL#z-ðÿà§°é)¤µøþò¯´t%¸8§¥'ÏêË?ÒÒSßë¼c0Ûý»nÆF«ò;>N®xÏßß,0’L•PÒ®œF]D6¾{¼ÃíɈðOÜŸË;|“Xt$äy2wÈ@wfnÒTYÑírR޵໇èÏgÆd:"Qµ{AlmÍmÊÄÊžý÷b|]׆Ùß`þ¢òºžp#þ¢ÇÛåâr˜ í +ŸXWf{Þ§Ïtµ¾Ž„ùÅLmƺ#*¦¾˜©ÄaZWÏ‘Y 3Õ×OÿY«Ÿº¾^œo¤#oR_Æ'ƒ4Ƹ»2Sµ0*Ÿ¥ôþéQmcuäãl/«“ŒCý8óq¯¢üø±è£ßÔÈàA ±nÎmýËšÕÁžm4ÑP“Ç~É";iXeyô8<Á²M5­å~ÑÝIáuÈTRÆO|õå¯ÀÊ%õ’ÇvÌ žKc•ŠÙ ø£ Û}mb«ï¯ƒoërûùA‘‚TRm-À-H¦]“~BR"ÒeY‚ÇO`ù+ÌÍ4&h¨h›€û{2ší8#–zɉ4¸ìV…LN–''8e¢r¢ ͼ6f€¬$çeEáÆ£=i±öé@ypŠFâà-YWl¹Ã3£ÜÍí=|º øÜe^wê%õx¢Ÿ´.Á€E#=È*ÏJ°¦IˆzvZÔ¤=—“OùõzÑ'ßÑj’K°b›8«]Êýƒág½ìŸ¦÷nÔn–ú?íŸÇVV>Ž¡¯<{øOê­°ê¢;hÏù¸_~ÇÁiUèsHwb±¥«Ý )cë[óÉõ´ Y6¤Œ‰t²+‡iÀH´Ü¨Êþýä':1ÄÒ#V€›9ó¾•9Ú#ú4oYI£:5#¾ SÓ#bÈB ŸˆpßIð¤Só/¡¢À+uLpþÛMÙANø] ïÇš‘hz7 :¹"#zþ¬¯D–h5x´-%ñãþi« µƒ³ÈÜLÖe¶zÙZ*\vð¡qû||¦wøpâ&)4€³òÝÏ ~ ûØ’\ƒéLÞûYøQgGK¯ _u1µôرôñemBÆ9óÍ–¸¡#hL0\gNøÏïØÛñ—%Øp³™;sù/ñ’*Kkp{ΞÚW˜ÖæZ¢¸à€ Ü&¿#BÔBd.G¨ôË޹Wf 3Ô)8áZ‹xÊ‹œÍ"5Š„Ï®erF“máºTìDá9šÅg]‚È´ ™.Õ®®XpÌ3É#]ÚËFB í :á7™¹R¿º–•\ ‰9ã™TürW²ÕEéPJm:uO$jÒ§ ˜ÎÌÈ)\6D:Â)–¬J(À•F¨ÊC&CÝûRåË$ižüç²#…×ÜäžÕ)é¿çP)n•Í·èçxù´2êP;„Ke[NÑ÷üdàý/wøã¹;VíõËÿ$ Øq±…-rt-DÇ$WúÕÉçKþ•Oiºe¥A@Ø”:Žƒ«\™g‘) 7À­2"o’MÄ ÂBþ™?YÄWä"1ûs§%*;ôiˆ†5eä øqÚ°m"÷QžB¨ãªX¹°¢5žOR ðRœMî“—å7"ßukò6_Ç…§xô™©3m²¹ "“³U`óãË¿ù ¿í†tü³~r1âfYGÈp2)°–7à,°‡T®¦ñÅhÐo#¾d÷A…ïO¿lJI6}IÛvèÅú0­’™3KWaX׌ÌP“rD¼&UsˆtÉý±Š”ÊiÏ|ŒY™rn‰éõ&ünŔָbî¡#ê…Äjîpn,+e·ðt&§Ü?­.ð‚T-Uï°ÄÓ«ƒ×ïyR?ç›×OwýÛKW /À#uF—Wbvþ³"UOŠaYþ ª¥eKðÈìæ³ÂáPHäfsQ¬À½¾Ã«ÙÚ§Û‡}¹®õÔi€æ=ˆåÑ]Zá¿xnN¤ÚšÊMâQŒ¸DO^×Ðx©&T“+øÍ˜BVo[ 1ùˆ*–ˆ1@EOL%¥©ASÀ³x‡Teã,دŸŽ©9ÂG+rÆ#&yÝ„ä.•È'W‡¿¸—'?áÇ]I†4²¢½½üuèOR<Â5€¹ÚNìÇ·\yˆgvèç$ýɩυ©àÊIÑYÁ8">Q˜tåÜjÞi‘å±’f‘æä/QÂ!¯Û‚“Ò|”'è„ÿä£åc_.9ôœâ>•$~|ÈtGˆŸ1ÿ­)^Šô%Ÿ)‚ź ¨=gâ –\•Ã/=3± UŽK,z˽9,ú§.[”üJ,’4õS‹¯ðbÑ-¿e6ççg]}‘PòG&ÚŠ¡†!lùDúͳ.7x1¢vñöâæù6ÊŽº¡ÁW^¶<Óç<¾¼ºf "ÝÉš*Ï{ª¿µ³S¹&×vÉØ²¾‡š’¼4ÿ·1×’6ðø”%vµKþŽ(±Œ¢ÊNvÍ'GùÒä©AZYS ôáÐÍm$‚’£Ý€GWs›á`g»T×<<‘Ú‰ô:˜ð›¬Ä°¯HÔ‘z½Ëî"à,…8}ú+üçýsD«8ö”g<®™Ì^V•2ÓКv†²à©ª4ú›îÀ٪󓆿¨ìG@õ€è‘f×KðR=5S›¨*Кœo3’ãÝ%Dá®Ú¡QÁ]lŸG¬oc•$ŒŠT””Š´n‹ú²å^î†úâ+ãe¼ÃL¢ä•ݺ.Á¦õFBÑ÷¤®S^¥â¼gª{˜’\CñÿuµÔØzB˜ñ5;ƒmDæNs‘çLÞ—¾1oÖ¯ðŸ¢Ô/’ETôµLE¯ TSR–…oÀƒh¾=GžXwåéä»Á7nøßUØ#ÉüÄò„@çþÇEø u=g8=n»u?á?ox;ËKÝ lðQ ½MÝÝ^“íÔnÎ*²û Q»½›£œ¥áQW8ÆüÖT|CÀkp§ïXN’úZ9‡ÚÂQ'Ì„ç¤DÜ¢iÝýOïpcb࡯,ªæý\þ8i\_ûg&SL«CV5Áà&V[7! ûRƒŒöÿw„O8¿íMѦgÝŸGO?…—l"ã‰pŠÕ(ß;¤é‚òûUÜÿÿ>ÀŸÚÊ·ô¿IÃø¬R”WøÏ#>' Ϧ_/ô¿Y·!kž(¨ó1˜™‹Õw8]›n²50v¶ærÝŽÄh9Ò.F%9‹)V;àîuϘâHËå¦9´qŠÖE.9  »¿{KžqdÍç(Ôr BW<ˆ¼U¹ã&7©¼ËGxòäÓ}çÓ-œ(Gë7À_Øâ˜ÿ^6+?k\GÕ P¡ÆEQ'õ·,Í>b =5´›*‚=ndÚØr’Ÿ;”´K ]?½‚Îô²ԣ¼+äËà¾^´r§ÔC‘_ÖGZ¹EØêõ[Aìľ/¬gõfeV>PÀ?êâ=ÜÖ>êÚ¾{þ4»–ôo¢ÊWZé Ž¸![UL3ÀãIÐpù«Šp•Ì%ÕEÜK•Ëy¦<¹0¯¨ïð AíÍí&ò*îV„íÈåQåk€îÀ`ªÞÔ—G¯½—Û¯4[ÉtZà-˜ NR_~R 3“Àvkõî1v¾|ö#"cOºá 4’{üõèÀ vbqûÐ!+wxÉd쳘<Æg1W¸’«lë½|ò²632&2ÊîI5¥+4Æ-Ï•¬âBÀ#“Ñž(ª–pÁ#6rÕ<Æw¨fLÀ-‡05W xxìù'[ŸºÀg.ällZvµ/¨Íz(ÿÊ ¿M;ÚXé‘S»ýˆa*;7õœcüCiÀ× ã·ÎÍ*)œóÊ'šÌÐ$å)x®ƒï¨Óµ<Æe”-Ïélg©¯8= ^©‹òMf³5õpo–wn¿–û× sɳwJJ×-À=™S(]¾Ÿ‚/OQ9Ñ\ŸçÇK<2û…­8'hO)ˆ EýDXGºÆqùÉ÷’8Ó.—.Ø<ëJD¯¬+=DÀ=±ÁÙ¦TÈ6ጸødy‡ßÛœÕÖäÍõ ó2\8®ÑíÀ>ÑÖªÔè+“L2ëvõËÆXà¯ZOrò’uO"z.LÛ†ºº'œJZx•Å´GûY¢üÊ× fŸ»8§*¿#âÂØ jO}¿uóÏÀ®6f¶«¬ž·llNÞ•­Ÿ' yÐB Ò˦t˜/#«ämÒàK!yU‘ÌÝz±è‰oéËI0 ÝbBôhãS–C:óÿxD€Ão‰ Þ©v1à¬óvI)ýcË&~*[Sº¬Š` »hwåeTŸF~—ÚX¥¦ëäðçJ8¹&ÍÄf›ôä ÄJp¯˜  ¯7d xs¦¢nþ,?¼Þ8°…bT1Z@ÊêgÓRn~˜6uKAÌž=¡²,1ûÄt›žÊYwø–^òqKrˆK™¨5·O“Ý[}‹2Fú¤%¼dÇU…úšÎŒŒSäñX_*ŸG†¨0¤ô‰eÑí'fÿºb+tYÍ,uùÛaìJôã4pK[>žÌ¾2D L8©9¼Ú©/uçÓË©i´Lµ×ú|>UÃnp1ía*¼xÔ™¿íÌ[ôAT¥/,àF<=oÔ¿•uqA,«9Ë÷3Ǫä*&)Æ3 ø1$`9$' œ$% çê1â^±±‰œÆ+üg–ä#ÙgÝ&ÈóÙ =BÕÉ&c}t/â)$Aª]>„S²gÓêþÒ>‰qgsýò0v}ÉÜ=sêå½?¶žO}²µLР0A Å’w‚1ƒ`L}Sê µ_¡a%•ªjP–o¤¯äUM¶ÕÇ9lQ¿Ìž_ß®¤E/•ÒÍÕ„û„ߤ¸rú"`Áƒ”šrQ±¦ zf=*Ù7Ÿ|þ;YqKópäxYç×4ï)Mº*­Õ~9õ°)ÉýÃ8jûáV¯_ÜŒ0Á|“®õ€[c·ŸÉ¦ªÒ¹gû¤¶üÄ»X`òŽìšxkáÅ¢`]¡Êïƒ+C2Û&ÜC™ÓW¨ò3³ŽœÒ<†í”°ÎÉ ¯03­²Ý+y'~$C”[¦Îàa«²gé^Ç:4P¼ÚȈŸɯº†ÒΣ‹v\±¾¬Mèø3b‚…ÒåœçhnðÝøàçу‘…jqa2bŸW¬|À³Ë¤Ëªg/ÙX»÷AÚ{/gû£Bÿù¶Ö9Ü:ŽØ†ÐçB¶Æe&I†n²ä'NxÄŽ|ã/;ÆU—{ºgˆ·WUàÄøƒ“âÔÛ—l$ñŧ.)Þ€#/»à“(<ä9Ô.|âÙULÍŒ-‡ú+6íþ׸Cµ Ó´Ä=\Â1µÉÜu¬Ë/?S±’ÙP®’}jéeFI/À}=]*‹ðûJ;Rå¼üÄxÈagCYp·9AP‚l‡*'î•̪øP‡Ý„ÿ §r¯ëfj—=Ѭ2Kr ÍPÅXG0)Ö àμkÃr‡‡ïÛvä)‹<ÌÜ\"#.Ê\ðÇ…úðég9y™½m’æªij8ðM¥§rŽ-/²3³P~6äY©6©Ý ø\Ôë…Ô:a5-ßñ¤¯û$­S sLDð%ÕÇ Àð-ÂDô¯zI›LÿôäßúëU°ªÏ´‡î^zßð®Ã-7øÆ“ÿÝÆÎg¡k9øÀÎODð§„~òó†ªàÑÊÛps1{‡óX£Ê»wÂïtšçVaóø´XàùåËßZø_Oäþ ÂŒo_>ËÛï–ÅYÒ¢£× çÎø˜¥ª V0!Õ™—âánÆy%“¯=*µ·ácÕÑk媑 ïò;Î*PT¤[] ¾I5nauí46û;éÓXXWŸ®–"ì5(µ'Ҭˡ2¹vÔDã”±Xë˜ ~Vèz¼”ïðÆ&Ø^öÏSlá_6N \{ªöU†| —2)ifyˆ> ½ç#pmk9¬MRû,ìxEy-íë’ƒR»¶”Kë@À#õ+Öë(_Ø¥Ô>H 1”Ø%àgLKÊýŠs ø‘$íÜ‘ÕZZÙR³Èù¿,å’'ψW£K‘G­½‰4êunÏœªšWÉúÕ÷N¦±Í[VßÔ‚¶õKóµd× úžò¿ ªîÙÿé&}T}¿?!°ûcË®ìHÿÇ2°Ôì" ûä¬x+€ê­Ï[]%ëÛd÷ßõ<¯»LÞ·m·Ä —›|ÀÐ<|6müyDôá_”ÃJ‚M¢wʼno Ô?™2ÑNã ~6!vRˆ4¾\8(õƼ¼,©JíuËUÖŠÛZЪ²gjORˆQ壃t+qÛÌÒ=ù‚3£Ò[n'»Á·ÝöÖÇ¢g¸687¿¼16â<…\Zø«Üq5©tÝŽ¹U¯¼a4à$Þ‹¨É?]ÎŽ&iñj*Gøë|+uõe©“Rœ[B/BÝ{œGF™.WÓ¯š¤yÊHŽ*{“ÉÉã^ô“—ÕʸÆMógö–›j2˜ŒØp-Ÿá\QKÿÎ"ó´eù*2þ•¿ ƃpQMP=!ÅÇÃöÏ9û´È7ü8‚Ë:ÎT ´zä(7î©?Ž3õ^j UÂÜ%ÂS Ç(É]©·¼eG´G˜Wÿ[œVO´ò:ó&üÕœ“èy7«Ù?¸‰Ì m‘’F®l©q« ¼ZñÎ Æ[¦üÞ¥Á™sDÅ™G³õT#4CV”{óäN€}ïþš¤ã×õoÿ®H!@ûÕÙºÂå? œãåò.këè0Z ð®`WéÓàB bÑ›·Í´Ý*8¦INŸ%äkfÅWÎ[áÕY4&š®©ÿ)T1Þ2C‡P¥í–±š¯zÌúfÁKCLqÆn®©JSS}¤z·\¼„jübšëù?¾ÿ›„˜?W_þwþ†|¾§øóÕJˆº˜Å{ÛF#®ÀðüÀÜê». Éã"ë“X²Ésv˜:Ô—œ"h‰ñÎn†ç !ö6‚þg§³&ÓïÁã ±ð©kÿoÁQ?•†ümuK÷}Í™nÁ2ì«nyä¦û‚G¤âè&œ³?š•p@!»¸‹{¿»¼EøÖ.¼gŸÚmp¸Ãsõ˜û‡ëcIþŒíÛo-æqK·<Jx ƒS¹SêŸÀàïîP`EA<À>×´ LZ|ƒC ¹ ð.„7ݹ8áßA¦^™H^~eKbþ‰OÁßwÿ‚ÓŽÃ<7„šð—½|©«öåL"\œH°¦uØŒ´(-þ$58!{yî…Ïð`”Ø%?ôïÛä|SJÈÖÙãtœ‘u ¸ŠÅ-í»?JY Í(ã¹EÂð+ûò)+ܼr€ßsîž¼Á%ŨãÄ·ª@µIÏ­ÒœzÅ7ƒ³€Ö<Ýue½àJò‹i#<§u}ë~–"'¯ØnðÀ‡ûªäÆk¦kz__¶ 8€Ùê:v?EÎÆ^ÁÙà#ÒCû­—L/ø«»MùSêò+ën#o–™|~j bt „“9:ŽÚ þKì_}¦ürÉÞEŒ_IП žáÂ(¼/^4fð’BBqíò˜\'i>ˆlGð ~¹‹îQñŠ®þ:?õTÖXÃÈï-$EY.1È…:Q›>ñ[Í“Ù28µÔƒGí_øVMxs.ék&e ð]ú'û• ÷𼫛Õ|Hxý×8ÊRmGR½?:è–èþ«nªªm…ñÿ ޾üj®VjBä!·4}.Þ¯L ÐÖFíÅêäs¯þU·²í$ä/©œ±á.+*Ý\ `Hº³RZàv8à…ܽ>qƒgŸ}iK’6ÂîÕgIC’‹º’„Íäèp õô¬ ŽŒ¶^ç=N«ÖZSRF ÊÙ Ó ®n¸kù.!‰ÁäŸ \(´Å^ò“aÏM‘Anñâ· ×*’úزš~h £aÏH ¬{&ŠçŠlòš»ºNøÛ ´F\º%~»åèøÝMþ¬ Z<» QØXŸŸ·ø÷˜ª×»ep„4Çhpd;ÿbWzÞ¼­Ú„ì“ɽù[¨ô”ª½”³öGÃÔ$ª_~ È×cÝL×ÄwROÝà¬5Ô]¯BÉ»Z€ )~ñ:c >b#46=ê„¿² )Úò‚­Õ5srCÔÙ H©j{,[àóä …~«§Ñî&BÉR7ÿfð­*?Κ©°C:›xm£§²?¸^®šîØ4÷Ë¡<]ò´±9פԑü7¹ëöáòß)×3\{öçÙôs^.%Õ3»qÑ#ü[G3—òáuþØé8>ú#¸ûi¶Ó2} g¿Ê85ÐùrÈáÞ)Rh!iéQâ*Ö3Î^ŠdöbdŽ$nþmÂ¥•c¯ÝoÑÒo…þÓ÷™ðÜÁ4¡Rê¾5ºÿ…¼íßð˜ºÇxÁ²ÊæLûÁ‹t¤ËŠgTgp!õf™éÉ 0ºçJ¸¤ŒDòj9¿éã^>´‚y´—É·xQÅd.á[ªXÛv«|SÅšu«€@iã#ý|’âç}»hƒóŽà¸K~Hù´u¨Tÿæ·Þµ/8ä4ú·‡),%w´.˜ëdÒ².µÒÏ.Å]ßÚ)9å’y¶Zú,DŸ¶0LK¿K*f7E?áH³ûm­Ÿ¼0­»†7-»·7¼B¹ò]ž~U⾦€MÉ¿º»ú« )ùïñÏöåR!¬í‰ÌžQwÛ)ù_Óív+ùƒúOnžLÁ¥–Ð6£¹?ªxÖœC LK’Wƒ¯fãN€,¢ì~ŸÓ²ëgT Þ¡­ËƒªV>Bý{ì.úuß;œž“ÿn|)(qê–¸îÆcêÎçþî&§Õ0³Õvú n¬np˜ROÈà[^ü>/øÛ÷ê¯Ûá¯" —çWœõüÎH¤Õÿ fZì묻¦ 5Çî²f&|›˜øó<ÛÚ¶ê_“¬ÂíîÁítRÝ)g=8¸+z½€߯«Ë¯fB7g ¹*ä¾Ç>ò¯(²gyäDÛAwûï¾à°‹LÕ%Em»`~qÊúY†s»}Žë¼eÛà¨bú moJ[]ƦìÃE$+Ÿd÷碔@v*eOøÓàT+jæ“ÀÕEiEy>­þÝuš²¬Ú³­õÿ6ÒLtNÄj;²=5áÕ𬙀ލ×'Ô¬…'“wèüÏ>Vg>úY¾m O&¥Uf¨Y <üùŸÁüJi½'n«”D›­A$ˆj©Ù}ăÏʸw9ÃÑZyèí™ðWéšÚãc D2p!KÁóo{PÌÙ}ĹºJ¨úUiþ–pª[ÿ|Áìé<7@\9 ‚™Sí5Ò;R®zÌãÕY÷¢tqò–ž ‡æÞDžÔ”Á%èM”×cw7»Ž ¼ñ$y’î—`CÀˆkûgýî7Y œ÷v–¾/¸Ôuœj]›²z¾ÝN¶‚]JË_Â!sû dûؽz³Á•ZÈ¶Ž´¯M§Ý:–T ¸Ž·)gk½Ï‘'c >†u,% zšØ3e3xÖ†Jõ^~Õà\9¢­])ɧ­7oÑàì+ÏLÎùFÑðfAz¹¢N·Â3(Š;æ­(í9—ÉŸ7aÉÔ9ªûˆÅ¯„Q÷zù Ž&ÖEì–ãÕ_®Îé˯Œ°”V57/h"«c#MÎäÁ­5ri£‡™QÛ„¾·¶©»¯‘u¡YÖݰ’Œq9òüª•ÚzêžN¤—ö*yɃg¤§CÙ³U7¸´™ã#D}.Pæ‘€£Ïf¯›O%À†ÏõÛàbâï›ïW.|6|Ë‚!ÃæÞüŒg²ôÝÍËoø«¦ šÖ­{öù$n¨{Ýãf AH%Ò;Ì@‚räȓǹ{•'ìÖ›“Pб{<7ƒ{é;:Â_[lN«a·žäÆæé¾¡™ýK-Ò’Ìz¹ ,«+›Å ðR"u7ø o Ï_ÙúìéGôçŒ&œRŠ„¾¿.ëRëÖ¨S€eyfÎfðŸI‘A`ý8P”Œ‹w:¶NÀ˜øŠp©zì³×…È ¬¥Ñ2¶QÄ ÎШe:^ýåÙueN—K§¡¢·—YS‰€x5“×ÏÖ­­ö÷7¯ÝÊàøsþ=~]-|ë¯æq${ü”>[DÆ„= ¨ßÎU#–]õ.»ž„ü$¹µˆ z˜°ç+3á/YXz(N­¼ùfq×]ëCÁ³!ᯆåUm½ëÝG *òÍ=ÁÌFF.r’Ütò݇‚ ½_aé?oø+’‡2P·n…§|kp*àt â.Jº]U.õ"^ïÑÈ€Ò/.Øà"ꦬû(òÜ N´;ú%Û®û³Øxk´ ‡êt‘ ”SÑ#üx¶ÀUwþÍdxõuN^©±Ï6 ©@¿Aü•Þ(”ÎZk¿wlI²Â­±ÖMýs­Ò Î=”·*r¹4-M1y ~N¤îÍÏ)WÀÁÌïÓ3¸Vö¦bM GYæËˆ*çñéõnýW+ï¢q÷Øbä Ü¶%‡~ÿ—×à¯ý@݈ô­@¡w˜^´«rã)ã¸Wê9Û„8»Û}µš8tQpë;£ˆœÆ†²’²úd¬'D*>ÝãA´ä½ƒüó†Ýã8òÑ'-‰êj…w ‘yX'œwÆ%ó+z‡åÊîd:^Ww›Â&üø†,© HÅãëzñTµÓÒImw±Obz.ˆØçš5v£œ‹?™¬wÖÈØ½ÇyÖ® uÎT÷+Ú¹!SdÓè”>uÙ»*­H´xVƒËK ý®¯»iØ-Uú—Êeá·üÊÎ l]̓'‰˜¶\5ß••ØÛíZ ¢Äyãyuë^ŒI7]Bûu…ÏIª©Åâ–qÀXáâ—ص·3xèê¿ùºw÷IÁ&dz$~9¨¤µyI³É„¶Oõ ¥?Ò³TÙîÈw&wö¶Û)”çKIg¸fr_„±ôJ¶ðÉÂ_­c¬«L¿™Ç°,à®0¾ {#­oÛÛ®ºËº“v%8íö¾ {~3&ü%ÃAk¤~“  I¸ËÍ„íÖ <& ykÕ5 [^ßï EûÑÇ:T(Øu¡ë[‚ñû=Z‰!{LždëÔÍ¿ÌÔóOòƾÝv~RŽúí¬´_“ÛGfð±\D6L‘Ë'Y@ó»ýç›Æ_8Ü4¶ïôþî*òi˯Ì{ €)ceð¿p‘P§÷¯:†Ó­ú›;O˜Ìÿób÷¾[ûgµê½!ÚVgƺͺ;}ÎcÈ­eÇ×ó/œj ½!ny. \ÛÁaÌ k÷OÇãþ¢å’üÕ3ýíY5?CMGš»w‘¥v Šÿx¼¡O- ¼Zý Å8™·À;h'â×Úþ¼ùÃúæm…á?Ú oø{ =fY÷·™Óê?ßfnøé³åqÀg v×Ê ×&ÿ Éãâ}™e­‚=ðÔ»ú\‡€ÖÇC˜&ñ.$!¦ÛØ1ÿ¶]ð™ê­`ŽKOÞ*8¹¥ÔP²µb Ï_¸v™Ò綨 ^pëKø8ƒº¯Î˜­¨ÝŸÈ›?Y·!Ð¥G²Þ#R ô´ü…Þ–¢òŽW÷óNš²™ÛÎW7Üÿ³·¯n]œ} l©Wø•2H¢¥B.¸%°Èë&L=ù ß6ÇÁÛú†¿ô2[ùdY~eYrÍ?ÝÛ\Ñ þnÜìqF½óYù’ÿsuFl¹bzÌ_8uFR.˜Ãvÿͅ².íÆ×¯æâŒ$¿rÍÞöeL^}7yWãzÁYÐÏCæVhz¯¥§Ô¿~|•KBmUä~þ_çRÆÕeÚ“†Lµƒ¥Gü«‹eõéG¯nî,•BéÊßïnYzȬdGîü_¸&ЏêRÑü7U{ÁçªÝ2Ðýh8‘ÿ.©[Só’ ×F!ÓWMýÓ×ïn2 Hu¤³ûÝÿÀK*ÞfÌöØ3&Ÿšµ@Nï8a|j­6ùŒ=àFˆ†GRG}ï/œáYÈóFˆÎ€,)¹·#ü¥žœøS—Ïk ˆÖ“d÷OåÌÃ#îÒ %—ü¼Gc9Dzܺ4M8bºj&7üíeQÿ*®\¿²†6rµ­{'Ï '©—Ó{äÐ{œùƒsçØõeþÍô^ðÉĨ‚ÌBª·Áßö¨¤—ºÜLxI±GÈe|^#Wg/¸&÷æ§êA"PO¡âÎEk É ÜÜÛùê/fB*Íí²QÛÿµ\Ö;>púåÜØÑ`tì™á/x b¯Þ“ºt@\ðì_},¢Þèü¿„VEŠ|$/p£M3jÑjÞ>!¦Ñ箕"‡ìÇ×ò?…@cÃ¥¿®«üviFéÕê~^£.6@j=á/=àœþêÑ_¿*þ:ì·b5Ñ¢,<"]Ñ*Pû“¸K¸Á[ô_Poõ1{o)¶©NËù_8ÃîœâfÄÜô"BÎyDœýS—­a²ÄS£#µê¥^&|ü» ³¯&wl—¡ÃcP;Ÿ £Ù‹"Œæ¥¯æêí'›*ÊÜPò†¶Þt°10áú—7ööãsÉ|S^öÜŒÛCI½…oÂK*­Kµæ/•è‚›‡ j¹à Ý X¼‘V!×~ûžYÑR9Ã…¥ úÂùæ_#mDákÜÿá#röÆy¡CòýðˆvŽl ˆž)pu”=ÿ^‡Z¯ÜpáÓ³»GˆÂ‡g/MÎp(››;3ÌnVvÕoøw²çš½7tÛBþAs˯®HÑFU¼(bçV@W)øFÏ~ÊÀ|}œŽ½HÇŒ*PÏ;lÄ.ÝM[™à¿so©g8”¤vkˆÛv„qì^Ôó®_µÃlÈÙ‹ÆJûo+A;¬ÉÎíZ *çç8·h9R”&ï 1áZ%rÖ½Ný”ª5YpG ÏÙ›&~•¾"y˜qzDá³ÿ!+ØfÈç‡XgC¾è™Ø½y“LH¢‚ô ×&!Ç2ÎõÁ1'€ XµœÝ#xµNÈEDYóG–*ÄÝòP@Gtq§µ ´âà¤Þ„p-¡ÓqçUÚ4[dzå *¬z[C½ãkÀ˜&†R—¿’[ÙF‹w,sƒ&ëð€ASwëÍ 9 Rw…ýúØeše€Ð<“[:³‘ÂÞØl§ ¶¸I}ƒW¤rxÁ&Øaõ‰Îð˜wMæ|q­Ö<ÃÕê!ÒügŸ¬r ÷òÚH©?æ¥ÙÔŒ$*ÉÛL&ü-¦u޿űÍü3ÓªøwM­ýöÎ]~5Wí,§ ð»Å¨ey®Õ…_²Æîô«nAc¬Úä%,ÌÞ@b\¸«ðÍK2ú¶7:0Ùñ ù gAÂŽ«Ó ÿ.85mE•®_uÿ1ëN€îÖl®óšá/ÉÇÜIýn¤&ärÙ›7Mº H4­þÏ.=H‰OœVB~¿õÈ×Ü=[ÿOíÛ­ágñqw¿O7ß+ДzÉg¸$Ì’=®â„kîüõY‰²Ž!Àø¹ÎÀî°9xÄŒÙç-=ÖJ$(a..çfëhÀ9?W˜~›"mä¾`#ƒmn\Ø­œŸ#<ç_cšÉJŸH™+©$ÿ 5å¢Té ç\K´ºÇÈ­u–¿ºׯ,—Ý€Pows®š"áÏøÑ¿y®éŠ=‚ÀÖàRKž½@œU3½œ­x«þ+9‰·ƒ62¾foé18—Ž`^+Ñ„¿‚›”ÿjì_¿š+Œô=S?¯ä“ïfdÛØª{z˜n¥ÝàÔÁ†r§#üM©*kø—Í… ¡f«â±Õ N¤Z·Ÿ÷þ²K»|¶dùÕ\‡`®”Zñ^Ä<ÚÒÆiEÎpM5´ÉÕ®½Þ.ø1~ó‡ õMMeugÙ6~k…ÿª‚_™Ù@JÈ‚„¼‘fn‚ø£¹;Ü¿¼u ø5b’üÉ˯¦^ìZ<¢æ¤õŽ÷¨¨mÌ;Kekù!¨›FÞgÈ·ºøŠŽ±Ñ {匯ؗ_Ùb (UÈÛMîÎk°zµcƒ«”Ø •™>´¬CùÖ‚]Ò²wó3û‡ž]ª?:Œá=ޱÔóš&ÈÖömÆÙ â Îæ¬ì>» A¤[À/iÔVøaòIµß3£(¢á§ÊÚ^œYɻ٠t¥kñ ‚yÛ5£¥ô¿nBׯf³VDNo›™p" –4W=Â_ ò’;©µæÀ„ÇŽúô‚+Èr_C°zïqGòîc8®ùà)grÉí!Wñ6Ì g¨èV'üÕÚÆ±¡,¿2Ãg5½ýÏ{œIÍZÐÑÆëžð—ey­µè®_é)ððª·'B¦‘Mê®5’Wÿu™z<ö2ºåö!_ê×ÑàÔ[¤z[/±ZY?¯‘TÓ’³»$Òáà;¶9ñ•s+í ç„{0Ýùc ò! Žr‘TΚ3S@[àR¯ãµýnª¥] p Ì^Yf³”"äRé²ÖÄRQ [Üå‘måRHMó"¨Ù9"…ÏyÌßRõ¯Lé7Q`9ɬîÕmÂÁpm^Ï„O¬ÞÕ‚<ûKrGZßkpÕ ©Ž-quâbží)Œ‚xÍnºeÂ5w/X°&®èÅÛfIFÍÙeÂ|œˆA]…WÅêÚè™­‰E‘BQUoks3FÊpU´o–½nെ/ÇnkuëÐ)÷2á´ÓÜþµëÂoÍÿ.8ÙWÒ{ÅMMøXìP‹º»ŒMxIÊ¡%œ¯ n¦œ€â·•3\à³§#­2·£Òà¼Á€‹oø‹&Zé±YŸ‡¤ŒõéTŠå¾œw¸ñ‘q|wó%®¥…lp4ñ_½» ^ýg?œ÷ÄäÉ4ÿèÙÛéÍ»Qé„S\†CTjv ¬!w¸”;Ô ~ÐgÎâу “Yý›ß-Î:¶û-/ØÌ `iêÞþ3;p$Ò¦ºÜYƒ—”"}ð—Gí#ðÖƒ1‰ÇÉ5øö=þ™°nADwçS½,Ös¾u e-;ùœ*b<(Ëœüm Õµ&ëm5 ܵ}öéäRA gOt†+åÀèÈã,^ÖÖêl åóÕµpäóöviÈ,Û—uuÀ¸#fo”ÿIýgÄ×ùS–ég <ŒœnŽÁƒê?¿¸Kû¬WŸ¡¯Ëãk xWŸA­ÔË÷f†uÍ4”µÚ%”^pÊ0ß¹ç3œ{|8Ê#2“uØUh HíKr=%ñgÜŒJh§¨+:0áß[w—ú>ï†EÊì^ÄlKÑ,7wtL¦K—À‘‡hÜÌJõʳ¡e›»ÿw¸d‘zÛ–"’·G04¸æIF žÕ'k§dI½‹v_p.Іùé–}EηI£Ÿ¬›Öt”þb¹Ê· ÜÊãðlººhnë ÕÅ;×SObs£ÒºIŒ³@׿ÆÈׯ¬'±ÿïf\áB€Ã¯/ ¨ üU5©º ÷eëÀ© ®ïq.á ›Ö¿o~œ¢ÿZw^pFíùìæ¯'|üv®J„¿zx„Pë ° ²¢ì’'³“­ˆò1s“SÖÍÀË\ñîý S \€õí+¿ÃõÓ–(¢YúAý§¹…;k´aA»”GÕ7¸–¹ùz5v—åÔÐL¸M(»„Js‹i€ þNÛþ³û&[ºÊ†K|`6I=w¶¿p)nê²Yˆ *£$n}nÂ¥VÀ@K¹áßìÕq´žý¬ŸFA¿Æa ŸpÎ@ÞœýòQ«¿À)©.Õv»ÜÁó©Í–”±#6Ž[Ý°Ž–Ö#Ì«Ñú£ËþÓïÃ5HìL¡_pì”ï@©P²-Òl6á4xuE½ÏÛ-½Ê!wŽ^ëƒdgV78‚¦æ ÞðÖ#ꀿ®$Éz¼íæ{­ÈpÙ Q͇[¤$ÇWü¶Ÿº5"·²]Éô—0Å?ô]YJ(Ó#ˆ·Ž–xj”ÝØ¨›vd†²í9+­*d¹[lräªÿ|û­wKO#xYû­ÿF?CsyŒ‰w¿¯>Ã?9J@ý6éàñêd‚Æ´KÏ¡öeæ8àÕ]µý3üõˆ—ößµn9)ŒóÐâžBænÃÈÓÌÕ7xäêÊGmÕ€¦D.üÊ28Y ƒ“‡¿¤?Z)È:Zµ¯ßܧköë;Ù€šz•7J·Û~p¥F•–"o~üìÑÉDÖF¢H÷‚¼¥‡’•=P"'÷æªi~' Á·¡ÕŸ­WW¢PÆûrIëw7EÙ†ÊRÕ}uV‘@ÂåÉkl0¸öˆ&å81Qùèß‹ÌE¦Qw5Ü9WÏfì]œ¸ƒ²4JEÙ%ï åêÀþÊÿSjL´ô5óIÖ9ÒyÏ«ÛÞÖ Ž‚¦—ÏN¡ú²"ZOzvŸèbpêûzü«šÙxí §Ù"hbéŽ@ó‚k•⽡Y9È„¼åCDqú>æfÊ8¼ßÐ\¹:`P®îÕçÒ2Ó¯¾ýË nÙ­o+8:Ô½séÉxiÊGøÛ±<îÑ Szɶ ñ‚+y)`¢Û§¤\âÈ$ÿø=NøÛÝ=ÄØ6¸¶P—·Ö:†à²@ÝŽ'±–=ƒ—T"KÄ/澪/ÌîçÕí¨@/8dl«?Ìñ¤kHÑü²k)ë«3¹o ˜•Js_Ý\5GºÎÆ™¿¬5O²&¹R‘î…-³É!+¥Ÿ,|t7å´Ã L•Âò£·KTàó!«Ew# ÃäîÑa ž{Gž4ݾ(ФqÈ èÉg(fËþ=‚k“ÇþÃé0ývT†Šo©«dðí·þµ³3¨ÏËw2 $Jö^°ÙªÊ/ÛB[[•Ë“vå¡Ól)mÇŒÝœÓBµŸjéãüòââzÞðV€‚TñªŽO´¯•QºOèÒWw Ÿð­ïàŸðÏe¼Í¬éˆ"Êúçñ–퀈×bK|‚©Ü=™ƒjðUIî,3ÂwŽÔV¤êÕ…fß )¢¼%7 ·¶êî=š³BGƒÀ=£Y׌Ÿyf¯ßÏà¬j>¿L]V,™©‹ÂvÎ\½›Ÿ‰¹*õ5iÚ6Ýh+Ê™õ âU&OÅâ†ÃÔ˜K\4¸hÀ>l×ÛžZè¹][ÏNm/TÜ•`¶½hϧÃÐo%»ÎýCËV8Û^(š«'åhp¥tN¤ü6£µ ŸÄˆÙ ¸ÈÅ]èÍ·fGJ_~59,¤š¤¹;ž˜Äƒ'ËEÖÝ¢HnÒO[wËù+Î2Ï×4©6MZè½…DŒÛ úŽÉíð0¸H nÉXÖÖì¹Ü!êÝðtB |ut%"×駦FÕA°<%»™{;5”ìÑ3uåî½î„söÌ §0ø¿ÖæÿÞ#sö.RnnÙ>½u }Á©ƒÎÅ­é >"¨PgB“ºj³Óm«ÊîZÝ}­Ðÿ´«¦Î$ìllàŒú"’[F(–¥S¤ _pF¦–š=Ci*Û–àKd./#xvOdmË*䎎¹ *Eêh½^±Kt¶?ä9Οƒ‘{P·æ‹†ì·üe¬ì¨i} š•ý@Ŭ€¿™ß8lðAÓU`dœÞÜÉ?WAdÈqÈM8SåÐͯv d½H1aËw}Á±bBwwëÝàPÏ(]‚E#•¬{‚@?™ª{t´î‰ôãÛW5],°³lÇÓ7üuj¨ßN2Ë”Ì&öd3 Î*å'¹ðú?-ÎRRyÞülZS ¤ºzÁI@öâô‚w9BÍ©=ïqÒçÑöÙ ÏÍ™D+ ·¼’ÿÙÀsÒ8äJ=Ó¶ùâ×õQWþÎìžðrá^ÔìO2Êf7Ý_ÿ§cóˆÂåù},ͨ/<»ßÇàÀ©›š'ÚAÖ²€<ɲ¨œáÁgKísþXÇC;ò¶èRHÂ'/k»µ,Àù£^Ë™ƒHCzu¥ä3\{‰0‚Ç?=ê?fîü|!;ƒ£W·Q¯ßÀ_¬ØZ>²DfÍdâÈ 5zkðpK°Ðʧۄ‡Üì¹Y€ÀÏ»s&ù†¿uÄë*™HæáA`^ÊNÞEŒ“‹úçŠÿwÑã8*|}ÅjA^(^o µÅ/ óÎŒŒQÉÝ@ÚþœË§¯“É´šÔjö†Š¹hÈ^sê4έ3!ÆSû=ΗÆ{êùÂêìm_XDç×çÕÇ[&O}Žn h ënž}+üBôõ†¬á(tÕ.*õã€in „yØ1'\[ œ@~“çÖfºÍ2*Hl»ÝýS”v`¿¸¢¬—ÒuÝ3å3øØà#M¹W®‹t8š2»<5kˆ í÷°±•«‚³u÷êí?ŸnØÍÕùyóFN¢à[g¬œ8#fµKÈßµ,dMWjìïÐæÛE¸Åj#'†aë9 à¢á¿`ƒÿðìgpm¡Øu!u“ÓQ0KœimpBµºím}ÿ{;Çúø¼Gö×§749,H²êtÆOÔˆ­dÍùë›j‡N^æÆàÒ;¡ë½7á/³DŸÜ–_YßWƒ®ïî=Í:ER—’¸­÷éÃî¸?$¯Óà*9äÞõe 1]’ÿMHW!í¢©~/ÎõGcÓ¼AøµÏ3ᆇ&ÿïÓÀslŽÍã`ì¾ùþ¿,=½ÊsZ›ë8t<áK‰›V¥g¶¦tf¡ì¾ù쇫_¯îjüZ¹³|Û €D€€uzC¦¤ŸA^ñ0fh–:Fô#ü¥ØÐé‘·¦FÛ “wà›ðÜ#êP¿jy$ng×Nêézª,‹KÝ2Ù.ë¦"a Ø÷±–£ÉÅõZ›ðWÏC¯èÓ“/)÷âíãfëòÃ!X­ª–é'CÐངx}-§ÇØœ-Gx…ÉnÙÅ:–t\ñ¼¦ÿÂ5Dzëíëæç) Y?kuǦñxWºº3Ã’á(~KÍ›3€ZÆ9»ç² ç Ä–¶3îߪ½D­ºßýûÃ5–ç‡+–%)$kRú¬ÖÌ €=‹Ëê˜MJã%PjôœM û¿·Oõ QºJùèRΙ­LÌhtT—÷Ro{BÉnΠn%›è£äÔÌþtsgUïpÐî³EŠžèÙ·´R±5e%(…ïžÇ'\s yTj+B¦ùÈtôˆìõãðìªcØtOLÛ!ˆG|;84Š;ŒóæŸ^¯òä˜-Êãê„ ž=•ƒK´8{}$<;¡8¡=þà›™üè Ijv9ÃE"{¿¨h_Ý=¸5wu=8”\Ph£]‹ÔæóšvƒuRoó4ï—J©jIºê¼MÅëX‚Zr³Æ>¶™•üq—ÏzõüŸ…Ö …>ïÒ-`¬!•úÎùÓ—gÞ/¬I™’{ó§{Q™ðŸž×vý]ù"ý<ˆÝR/ Z³×…ÌÖßÕP|ÀžÈ£Á¯ÝýìõÖV{`ÙýÅEÓ§-‘™YÇôI˜ýðßÿþ$dçÌøgùË7ü{\9ÿ´ÞcñÇÐö¬ú‚ãâña •ÑTÝÅÙzÐB¡ïX`.q€eq¶&2y=¿Áñ†7hìíŽY.ÓÅéâ7ö%ž±4dûž;¹W·.‰„åjuW®]¶¥åîA íHbåVòrÏUݲ-à\E…Ü{ÜEÎTSYÅ ÅÌuŒà,žÀ¥Üæ:E'YÏp®ÀZ{„í|†k«¡Ž‹1K?­,ðÓâî~'ýÁéËà8aá†Ô²mt»óʲÁKbÿO÷hnU“1xpRY9ÌrÛùC;ÓÒœ³×àY¶nu¬¢Ÿ,˯n½}dí­‚‡©—Ó÷ÑÃâRa ý>c¹Zùb}rµGJí%Ø3­ÓïP—ÍêßüÌöïN_ð¶¾á¯LËkzHîf¼„hôE½{´óO ù§ÖÂk$f¤”::Š7f;~ÁÅËŠ|ì?ô“œÓþ?Î?’O ˆÝ;Bœ !‡{Ü5‚ÐåQ¹Ð^$›Ge,.ñ„ .¤!=œšË*“ Ö™ΧßrýMÆ µlð³çnÛrôgêî2¥ä¢Öüï³ínEã|6ö7—â]ÄúAŠDKOGø÷gÈòûëlh¥>¼ˆ™ÆQFm¹^yB¶íí2vXÚÿä6Ž~Ë~ºÅà\ µ(Š;Îw+jÕü0¨‘ÜüZ9÷ä~,s¶ÞeoÑÑ_;øyËú=PÇWY+˜Sql¬úœˆ¹yñª5ö ¨0ëŽX÷ ÙÓç¢Ø-f/%ReIϱ˜ï’× ä¥û ~yŽ G”#ü;ª¥‹z¿>¢¥nP¨zâ­‡Cð°iÐ.ò~ kÿKÈ F¼>Uƒ{Œ Tº:Øúzu9$öŠ×zbp˜ã±× eWN´.KÝÎ(îºÆN |ÙvhY*«èˆ°Õ¸ê¥õTäî~ mëÉ ¾¥iÃ¥çþR4i+ówZ“ÿ›Ò!Ï Âà¬=ÂðÈcØ®&:ÓèŠH xC^ª÷† èS·‘~rW¼+ánp:˜ìñ ®Ü"¯ŽJåÕ¦kFÿrÅãño’ZóTâîýJü,¹åuƒ£=rZÜ(B¶Jü™Ûc©=dRº×KkðÜíâa–Éî€ÚòÖL¤™¡õœÔÓ³6ø[›gO ÙZŒ39* ˜D\Ý¡b+uä˜Òé­—&Æú†f8UÀz.¥¸+ÁÝ)Šdõü©<‰ÛÅß7¯å1g_Sª@Œ];{¹”Rèêã ¶ö?Èìk¢Æ€‰Ñ=ÇQc1r ðÚÖ ô¸Î¥{ÁßBd÷òèõ8Ýð‡|M¦ ÿþŠIòc4¿%AŒ0·‰Ìà*%B—¢K6'¯W7]}dÊ™Ý-ÖºÀiàê’Z‡Þn§M÷@Pî¼8øªÇÆ6¸4TñO0|¿é±á>ÅVT QÉ⎴¢þTÎì# ¾MVƒŸ“2ÛIZîNøý$-©x‰£Ùã$ˆ&U\x;ä«[†0Ç£æKû_^]¹Ôx6·'. ›O'ÁàB4É67™P“ÿì¤.Áº—:°µ`×ÔàxÿɃÚàÊ`ÌûlEÙv/µk‹]§õlJˆÍ“I¼}ܺ—i2íÙ¾áßœ…±Ö¬ÞvG妥?¨.æLôÓùcÜêF?ºGÓ( æÜSZãkkçÔ´«Wô4äŸ>ûŒ1Q3ëéÙwõ”1Rõ±ºÎ¦!@Ì{›rþZÚoxñ¼…§Üûx Ù°¹¥Qk ª9’NæÄýQýíæRÅýq"&úðBz³¾™ ¥w5çyó·/h'mîúf/¤¡âxÅé³D³ñE Í/éM¸ŠD² cxÉêL$Öƒüq¬d‚†·y7böG0‘Òü±i‹(ŸÝÒó ?¥[úÁÞm;6_pHOf?ÎÚv˜\iØÕ3B¬Ã„¹ÓÑ5øVï“kÚV©µÙ6¢ˆ}>ëràrvRƒ@4R’h]3j&I¹u¸)UƒØÇ_ÛŒòJcTë¡‚L^z/´šðïÝï—Žóîò«Ùó€âŽ©xÑ£Á1³Ô­\•€o¯¿¤m;.J׺féôv9 €Ãä·Ž‹ŸeÏ .=Tßü¬Ô|L ]!p}9Ì'„_û}æºÉÈ÷-‹û}vÅ‘_|õµ/K„u\Àžâ\¼eÂëª7Ë&\Õ¨–ãÕ_;€ðG×G¼—pp'M`p©pª*Óþ:H[+jvOäÿ[sAVr¿I³P0XÝ93)‚µFÎÊ%¯"šo/8Òª§ªgpq.Õì„ûjžòN:W’—W7øX:JÙÉùæc†$ã<ÞùÓ—áL–oDNÁâÕ þ¶œxÞ㌹>’G^2¸¼ê¾ö,ù·X7!¶¯ëšjðD´­¶3\ PW;lý´[wk½80ë#Þ4dàq” >¶‰MÒôˆ­èÀ0LÌ`Üñ^pÞ©ÔýI&¯þr¥IymëPkØèˆ_BɽGóô¨Hp…Ý{ÜÕj*²¶zª¹/5ĶjÝeíô%nǯhyÛ˜ºûˆV™`µ~šÁÙ¤yiy5Ë£ RŸ‡›gcy#è;®¤7\¸Fž]¸µµ YoÇ$”ÊH^§€Á™sÄÑŠ…èñæÙ’ @ú2uOœÍàYADzóÖM>‘Çk5¸Hì,¥…OÖg7ÂQŠDôã^š|–0Í| * UlÿÝ|¸ovþBãD¼GøÄ w| N ìuN7¿[vûˆ?´Þã d“ÇžmÉ{ÑSHÎð’B ]‡O[öÞÙCVÄ^Æ /Íý•ñ·¯_îžm‚ÊAMa»ì¾àhœ_]FõåDŸÍD“•ò¯Èm"î ˜í"”aϪ›¡±f•ÀT¾öޯݎ*æ^NI\ÝUКUÐæÉÍ=TN¸¤év_«}dY‡¬‹¥d¤ãqo ž!^«Ý ЪI+Ë[Íé§Á¢ÃBN*÷þjµïbù/‡UóB)0ªn¨o>C=¤µÁ}úëzu“¤AÍxêyC\Jù–Ö ¯õ”ÙŸB,\’wB³6Ö˜VçSsv]z¢ÏW÷ÏçwLte”¾v€µb«[wžo½½)Ã{yæPŵ4øv3Ú¼`VydBÔ¢<´Â¸öØÿéЙfTA… õîÞã æ˜¯ivÃ;jãreJ&ü;Øþ-P±ìöfS$@Î÷t3 ‹úqNŸÁº[d ÕBc’.'DëÒöÛFƒ+# —üwÃ{¨j9†Jÿ´e’ê½€T ë‹ipÉ¡æPb}¬o³Ë¿:õ‡¶Iè4¤nãñò .IBI¾±aÊ:hg¦×eï©ueÀ\Lì5Õßð—™Ê?è íà°tÀRêùæ5V†ºr7¼”Hø×zo+ßB­{éåŒ|»åº9v5™úPò£\'õ󚽃ôjnÝ >'œZhfpúJ½XcÑk,êÀ)XØ=Á—-å´]Ì÷eá+4®ž±Á…Z,9U˧,+—õ% H¡Œßøºå”Ûm”ŒŠ×ÃiðXšàʬñ‡—=}¶ QF¾,Ý-ŽLøˆ=;V÷HÏ«—ÿ”¤°†%”>½º]Þ•.c¢52›mMš¿ù~"úàY_’Ró'ÀÌ|¢Ým¿à_¸uÁÄiö\ Î ÈØÛZì .²¨¥1ˆÖŽ ­·<°&7­nŽE M|Ý=cÂK¢ÈžQÆö÷¡eÝ´nØñJžíÎ /€ë(¢ÞnmŽE¨aÖïxðïÄÂXÙéjöyˆñÍêŽMiõÌž„¨ÁÇø}ËÅkä˜ðWÑEù‘—¸ý‡õw Íå±hèPXÆidQÖjÆx ó™]*«Þ]QªZ=ÑþR×à‡šÍPÚHf=Îæ«JÖ >»?Oò%Åõr‰‘Özh¯§ªVõç¸_–:m ;—¢?¯ËØ\Âõ¨oq¥$z«à¢059.ýF@©ñ¦r3Óá±: fù¤…Î9[†`Þuœl¼9n K%Ä7ç‹,¯ëÕ-ã  ê˜=©4ƒkë‘Ú×¥cñ8š³LJú|²f åÈ|Ì\ P²4­E&kX"°O¼ÃóçEfÛf#1ÛšR¤µÞÜ'1Ú‰™_òe=½Àçé˜]Ú²µ¡S’ˆ'jp©¡i2¥ê:TÌ$踤Z½P¥ÝÝ™ @àöUèÎMèWÃsmÑUk?ª`ÃdW+ZÍ(éþŸ\M?ƒsKÞH³ÖžtH=… ƒ¿Ýˆ‘ˆ­ZZj¶=©£ÖE—ƒiA­¹/ÂcHš—èš´i»Ù’>ÓC2»Ÿª9þ¹·×ù^8ÍGÁÆ–]•TƒSâþ“ŒŸÙëÔH%žDå„Ad„FëîÙM¹Œ€ y¸_÷Iæù–¨<Š{Hë&|æÆÑ³ˆk;ªöþösà´êNë"@#óÚYù N tîûôþ½ƒŒ5fÕ¤-ÖôÃg)ÉßôqM+}¼XÓOQbNž=o±®*ÀG zòòèº%Yï"š3Ík`- Iö#-­g8zÁ†ü„¿d®¾3]~5—³AÕ[^‹‡äŒˆª;ÒLH 9¾¸âE79òpÒ|z#±~oª« |IÆñò"ÅŒCÊ9+s­šS[§‰yzü,áhp8†üÎɲõô~%„yù•eŽ2âx®Ã“åq},KºÆ½Dæ–âQ]nxC9!—]ö}(cԯ̺’Ml8Vp÷"3e.Éì¥VÖœÐÌÈmŒaÿ¹Kä½à™Ô‘ *"™ÝÏ[fZRB•1­Vq1N ì©î<á#$Æbš¼jëác<¯t÷2›JÆ 躜ÝÏk ƒv„¦î÷™\•S†rÍŸºŽÍî¯0Ûµã§ÒÀ ãRùÊÞ‡CZ΋õZ±Ž˜ÊH™Û«v®‚ÛæÝoø‹µÖúZv)æÖKÿ*''½kp•áÌåÄL‹ÐA™=)f$¶¡ºxngÉ‘šëïh°¯ð» Ô³û}Œn˜Ý74’ äDÄÍì|ì^ú¶H±®|§qLÖ3\»†ªžª´º:•Ù°‘k“ŸLR²ºc¼!à —ýÒÀÅ\@ §ÆÞJ=ᙼà*gøû„ÙVFX±®eËæÐrÉŽ¬ÑØlëHõ^¹ÆUçÜ€tsò8ÁIR"ÑÕ/Ÿ—Et¶uPj¦ìo…|×FCÝÆJù1‚­+¼ùý)é²äâ,,ŒÊÂÆÆV”ýðZÂÊm‚tâÈã²ür—Ú_XŽðïœ ¯¹À–XOÈ>Ö“C˜ŸeÄ€V’'V[¬3¢¤Ÿ8eÍÊçxÁ@iÊ/­ÞðJºn;ÅJš’-ÿš¬éffd÷Ù›ÕMÄû•UÕÜ•úÔ‘\³)ƒÃÞEßÁ¡l;#¸çºv걜7èk'Ro4Ú€æ\wý²=“R¢G^C¬ )ÚdöÂR3û@-Ø*­àÀ¡ðUœéü)Ë63û'ÆLF_Ñëq/'Ó;.ÊO"úmÿ×öõˆ3bÄ÷¨nÄhÎnâÁâ‰_ƒ«=X`ÅZj—go%0ƒŽ½Rë%¦µ^Ýaöåßëªìtõ¿á/íØKvm]"úáû¸²âÿi¼ºíŸxÝ£¹€$àѸ9ý7>¢Ë3587tžh^—ì„¿òNÔÛ¢RÌj$C3XOÞ³Xƒ’üè'§ œ#˜ã3\[‰Hcý‡Çç³Ï AI@¢œ<À$@]~t 2¹«à„³hDî×8Èãæ'( \_Ô½ùÌe$ëš=òú /1—åBišÚ(—<;èËèž’Þ,ŠŒX0+op’޼ÌÝ­{ë€ò«eÕÇ÷1EÂŒšC›·ˆN¸ìŠˆu?ïÖ¤7ª{ìþì½r8Þ=v›~!íØ”ÚãêÖ ¨ìïÅ ß*Ìîž]ócò—ÿV6)·Qj!õôeʶ `ÐÚcÿ±&x.yÃàðaZ¡í=jzÔ¸ŠÉ‚Hô°Ä({þjÆ«­ Îwö¶Â —Zýò9õªk¯L¹ `£¶›[žpéMB»ÔX×J1VG>ÞüoGúßVL |²Àªô³»OL®?C‡PÒàP´ô0:l”ÈߪäO§>ÔÐ]»¹9³0I„ZÔ?æð$!¦4õü)Ëw¯VÑ(§|Öïœ&»Ù7äx3¸ªñúç•ꬭ¥Þ+@ Ì¯Øü]Í!S›õ¢“ ×Ü"‡·qŠ¥U‘½˜íó®^²Áz4±nõ'cÞ\K™¸»„kAŽdQÉØ}×ôwUÿÄt8T=ìªÉM×­èÁu:~¼!³î¼¢Tº;¸fìZ‘ä}÷ÔS ®-hJÃú ª" /‰eõy󦏿¥d7©ò·µ!$ÅüH ©àÁÎc­üPz/Í(sù'š 'AcÈÆš¸‡—U¢ÇÚamì dN³ûƒc-Õý¼Õ¢]ПìG»æ™‚^ðé íŒÔy„#ÏÑþÛW´°œàO÷83”@ÁêÕ£›¿n~.$½#—W7ít»–³én!¬msîc¥›:uCíŽ.sq¶ ¤šÔ©ºäÙNÿi Mø60s÷õÿ6—kúüŠÖuP÷ö0'\@„û¯v÷ßw%WÑòdXoÂNMa²=<â–µ €á¥à­æ.B@ºylöî#Z—R¨ÕSÛ¬Ï~gé@ÅÖ¯QM¸0°ôP×a½ìlGH¥”ÕC®˜í£vû{ü×Â^öÂ|CHä'Ÿ\Öo“$P¶ßeE¾áïÐ,¯Š5¥ÃdÊAÑàccuWiÊàB¡£²´öpœâMW3È»zÉ15ˆèÙë¸58£‡Gù™ðïu½²8ë#Z3D…»{|Ø®%¹oèx"nýxõïõ¼dY×ójN%DH¨Êc‡Us*«Õ%¦ÕÎpêH"Õ~†+àÖ¼RŒMW~IMf ¯À1–=Ÿ»šnrÌéÔÎc oZUªuI@GùœÜÁez¢ ŽF.5g¿ÞPoO;”)D8þ-0‚¥x-ŠÓÀ¾¡CRÆàJRA@ãy…Üð&œ]AŸ¤ |.P ©ìzø\” ÕÕ!«Û‹Ü© ½x’1þåì¿óKgt´I81%ó¿"»_ñøL³þœ£tÙ8÷¾Tœ¦,ô¾,ü§¾àYÉÞpm¡ÌÜXEéqõYFØåþ¬ožr†Á¥ÅØÉó·-+Œõh¼uY)ôÝO6 ”Û>ö¸s¾\zëжVv…»6RG:~×p¤#ü¥È‘ô£}ùU· ¥û½ÄžÁY+Ò…ð—«×Ùýê¥Èñ7%TÍD:®Þ"ó¦#H…ð0ël¨¨‹òe}ûkWáH|L€¶6…TóúøáÌ0¯838;4X“ñίSì/Ô1ñÏþ5:ÚUR ¼üÊD•~$;epÈEö˜Ùõn iÁgCÌyöÇ9‚¶‡$ï¬[÷Ž Ä_ïqƘ¥¢Í³¹ïÑúû‘hv÷šê¶C$3ú¬³Ád¢¥õ6ÚVÛú‚kB¤›ÃpÞeNû8~Êúˆ÷vÔóÈs¾©Öâ¡ÝP|“ļçŽð‚kéY­tÂ_êÔ=—¥e¯Z¿GGÔCa÷­B홼T3û`ðI“x ƒçš#•d«íÚP3Ë×Wï<˜3Ũ­wã›÷ø ' •Á©Ó¨Ëza~€Að€_ö›”5­WŸç+me;SulδånËOßðïÄQѼ:WWóáèÀ^]µzûp„䪎˜m銟 Ei¼÷ ÝŸ ¿ê¶šœPÒŒ$¹3c®C¢)Œ¸’W[Ú:ÛPFhΤn½Ê-á[A-×MWN¸R‹ˆ*±J^?¦XÁUßKh»ö‚.3¿€¤Z½dÜ©yƒ³§ÈnðíšÇ=^ýý†xÕ™›¤°kÙÔ÷ìéËLZã\@EºWÚ1¸rs_Dõ³^©xì~ƒo]Z"CpÆ%E¨ãTž/ØLxzAW÷rn®Y"+ׯ’¯É„Ù}1V|¤ç‘½ã¢5oÓ*î¾6á«°rýäe_ÓÛý¤+»×†_oW d-Ô=nZݶePºX\Ëç5ï TóÉêu|k1›[ï 1УddÞh’{z¾Õœ!ª§wYõ>ü:6¥t† ÀӋЋ0ƒÝ#C÷·KyùÐr Pó¾ iËî™GËÿ„ÈXxU—Ù ¡ýáòuó—%­ÏÞÜg¿:=½uhÂY3ÈJº>¸×êùî¿õ–„®™ `rž¹+Y8*âtwh÷ùáJ <ÏWSþã8_Œi–ÉÈu®®ÖÿP Ý‹UN}lðu6Ŭk¼FÉ1¹za‘Ó©§Õ^ö_PqwOˆ“xŸkEÞën„[L³h1l§Ì7üuBÔº’$êÉ.À·2¸ Ô§ª'mU·v|qN×9>[`}»{’+¦}Dèœân˜“FŸ2h³Ë¥ô3œª„â,ñÂç¬æ6@ Iik±À-Ç<'»ggpm p‚u»«èÚh]MX¿ep®Ý}Dã«g¤jä±[ªIæ7çâQ- Î]òÞÐvƒ—íÒrPŸ´t†µçä¦M´¾ª«&ïÁ-' N›¤ž’²Áu!ŸÞÐV߬÷gç­û8O2uöeý›SBô!ÒûÙ» ½©ÙwXÜw«[b¸¤ò°¬F o` o/3Éü¹ÉŸœ×‹4áß§ŽËw¾-ãܤíkFÛuõ†Ê¤¥ÓÎMrù•¼@NTØåéû¼•ÈáJ’Õyªc]JFà@ª7TŒ>k‹b‘‡Ý`5ú8:øæìîeÍžÃt5ö92¨r‹IÍå´aŽu‹Æþš?y M6>žAö«©í =!ìR]¶²ñ#æÒU˜¸ÿ»¡ÔMvãÊ ×Úbêéá~QÙ½ë†oþ o¡­–K] ª«Ãý²²é¾÷†¦‰›Z3þ7…¸*Ä—ëãú†¬* l5IÝ%¢Û$ãØÞ½ý¶[-÷H{¾X>¥k_ݵ§Hú^×øOÕÓt6ø›P¶×û¿œYÖ\ÄdM3` ] ÷ê³$‘:ÔRmg¸z×ËÎaŒÍuíè¦ ŒÉ™½æ¶fæ„`ß¹ˆ6ð÷û¼ÈÍ5Ç‘ä©wœk”MFQÖãH›4`MÁ{=>'VWõîq2& oi÷Ö`ƒ69 ª,eáf<^”–«Eò®îwÛV×¶ÕD¾žˆ›i¢CÊwR÷ •ÿå mFÖiÒÒé@àö'üÇW7²0pðRõº0§Æ¿&/±©q®L‘l§*•5×:ÅXFU@Κ¼²cûˤåóÖ0‚ûõ‚›W#žðw“ ®²ÈlY&ôcy_Ñà5Fóá’WùüfÔZO¨xå§füÈTA©±ªû‚õP©ôwÒ ,ȪèRÖóx»E³ œHqǦMRs%7]IñÍÈŽª`öºXm srå¢g{zu]%äëânF¦Í BMÝ«ÍV®ËÈ i­{=wÍÔš*~UÏŽ«™ZsWÄÝp-¥‘—ˆÝ›Ÿu©´÷4¹3ΈuµÃ’¸{uÛ3€R5g/}7“.Ú`:·ê-V¦„¼Ëü9·|„¿\–õ‘?h|Û‚œšKD‚FLÞ‡3½ã—×Ô>¹[kú´eåRs‰ÃFÙži7ãNCÙÙÖó‡—¤—Þ xuÉs§7ø›[ÒTÜ%íųI㌵LXýo뱚:@õmò­L94\k ÈýºJÁY‡iÙ§uÅ›žšªÏ^ÏžIÎW×*%•Ëìñ쳞È^¿S3&j´›‰w3*žB7¢0!d$L—›çœkpj©8{Úþz…Vªä”˜ù—•Ðn½1dtÁ <š³^3%ãÁ ‡Cðíþ»ùàÒSRN¿bšнÒ=êÞÚÇପ¥z'&SfußUÓyk¸òT|uº-ð¹D(r*^o¨ÁCW¿6¦ˆ–ulÎDH$»­£õ ®ÝÍ•°·PtÄ\´zµ~'An&ni³þOEÿR¯šô²ûMaî ïPÑ3bìûÒ‡ŒùlÞß53ÏýÕàR‚5UoöÖ]Ù£2×Gt²Z‘0$AÁ;ÿóî=b3ógýŠf8Aˆ+ìVÞL¸áZ)^'­Á·n·¿ÞšúÚ ;»ïÇ&çuT6ÓæþQ:¸–ÿe êˆÃWK¨VoƒAÀÌÉÅ[Æ& ’J 6qŸ}f­…'·6iò¶YPS•הض,ƱÝëG–££Ñ9ƒæõêé6“·U–îÝFm·î­ !~÷ücÌÃŒJ›â ÎdïØÇIQ)É["Œ:H±L;áïœÌXÆ–mæ&ÀNñ“‡MÿÓü™ÌÃÔQÞµ¸[l3iìŸH£ÂŸºœOM÷6ןHÒÞð†³¾î÷©~ÆîpÄkõ|óü8Þë²d 9ŸÝ3@ë'F‰gqnpv¶§4Ê¿Ü\~UÏÿé3Lø6ñkk'·ƒãÄ©¿÷½­K.Yb ×E²qô&i7††"KŽ€ [òÙî×ÖCœžÊÊŽl]ü<Ìö»¿àø Xü›—ÿöyåÉÃèX e©I,…7È„tqþ·¼Ž9øKŽêJ1®ßçVíÙÙ꫈·È2ö«^’!Ë2vKƒ4Áiò[i³ƒ›÷Ïùþãѱë”1ÖAp §#SÀæ% »ñã jøsë§}W?mr©õ-¶ÉÃ(jÇñˆf݈´tÌ3_-Å¥Ãêb¿ÒMŽW=žtOHØçŽt¼Îaƒç$úI{àêR"} 9å:±.p>äKÈ#¸\jU˜‹²,–P³e~Ÿ±Gzƒsã+æUù¥¿· 0ºzÞÀk{~¼ê:´»1w¬:f÷ê&ƒ™#ë¥ÜÖ²a7æ.³þè»Ï³KŒüZe•­é“¹›5£2»W·f{Št&Ș€kãI7âoåýî—]?_ƒs›§¯ ÒàoK(PBi´ª4vã N@{SfÂ%qÈ«ðêªZ(!ÝhÇ•'¨¸W7íð‚Z²Ü7ŸajŒŒž˜Ïðm-0æ3ïCj]Û^ºŠÏ~¤¿)ªuDäJ üÐsÜ.|ƒÃGT7ù>ᯕëŠÌÖA0W.@Û¿X¼îW¼סuSÆHëÕMÙ)79ºK-î °"`È4‹zKk×LÏÍŵ{7oœµÂ s¢çØ4Û*˜Ë.ÁÖàôRÚ¸)ÈU¼›Ÿ  ܽø`ÏÄÂÔlÀ¯.'ÏÈÜà(±pzud2HÀ\4«—5xî ~woZù-»¾Grß’¿/÷±Õ ¹“-Îl‹Ý£Çœ:Eöµ_eîiënäoøyÝœ™ÁÇÒõä¹RtÚòõ~«o/{/É»ÇSÊ€ü÷¿Í^¨¤´Þcñ¹§74»¸RŠä‡êur•uhÖ¤C¼ªÖÅ´°¤»Ñ£nK®4ÖŽEvc6ùþüÛátÝ=Uƒ«2*ÛK:^ý[ɸ\Ê}ë#öC}BRö.bGÏa^³}];*»50ÔÒ@/ÇÕ­·•rÇÙÞ;Xs@Õ}jÀ—x0¸h§u粋ߴåôHdΪ”­’ב<'ÁøŠyXe÷›”I‚[t†«x2¥}¶ä$?Z‡Šfå'¼/ƒoçb ‡µBÎ9q¾Î²Ù§À©~pukÖ§ ØÎg7•h} -¤Û”Iú'-+õl`À« yÊp7üg tg­àã/¢ew a³>¾Ïì’Ý·þóO¿´×|ˆ¯ý£rÍÿiŸ°& ¤ø›Lôõì3¹µ3šûS&jÞ*x7Y’qÉé š´ËÝzqBêÕŽ·88VÏÀÛàL¡òà˜eéCËöeÔHCzü»Þ` HÏó°ðÝü£…Ï´©ÑÂçsÞ&üí5ПƒËüxÐÙÏ?}™õ{#¦y:îÞþcðŠ\]&ƒ+èYøæjÑÓxºW ÿ×ÍabÜk@íÖûQí’ÝÖ‘>Û24ñiü¦?ŒÿÔf¬-£‚2^ös¸Í´|PmFÜ u»ü"j¿ 'Y,#ûÝR‘ªû}&\;ˆÌ´{Öö/)”ºÿVúèúæÙýp—´”73n1ìPRårþü¤¥öÜnCkà¯áÚ<œvî¼usÛÑR˜éy³¶™Qþºˆ7ù­%EÀâœzu_ðÌ™u7½:»/H2êcw˜½M»jÛ N®Ý_ŸÝã€0·ŒÐÃ+Ìï‘&ײ|Å~¯0 *¶Óì}Á%#¥4r Û¶ŒKÓoímëÖ–ÑAáÏï=4xô õÔW[ØÞe‡ôlÈÝb­-£s$GH—j;-É]kËH z§:÷ûÌó)lq/n©°ï{Ûº~Ò²VvÓD:K¿^uSû³AKÑaúÃRÛÍÁ¾‚ñûˆ3†i©Ÿø³w®CmŸãøŽa•G ÓM”4NjòZ¨ûì`îH@ÄYß®ˆc>»‚ì…:mµ7\©DȳYÆ&÷ׯÖD5ÇÚõØüÎ ×LèÙc³Á_E¥…}}¯áL-~Ûq]¢ |žJ†)¬ìÝ£5¶ø”ÉìÎP]#;üFƒ¿9«sFNévÎØ†¤ŽnÓ ‡V`ªê>â–¡«" •/O=¬«¼ƒ…Õ*Hò÷£s÷±X4”ýŠ9²n‰|A" É}Á( RÍr„?ïñ²9‘EC '“GJ7Y‹zi`—ºu7¹Ÿá Ä–ßáEýèºzl·Ã ^@üæ‡9YƒÖSvé÷Þ9&óRœðÛ«=ÿï%”Ί,OügÏÛø­j](êãWäg(9;'….dF¤I9Â_º¥>f™5CTÿy­Iɵ#¢‘§;ÐXw“·¦™@ùŽyÞ¹ÜäP¸[ª¬mWGÜ,Xc݈¦’wõ™Jo@6šj¢3œ¡ÑÕáÙ»¥ìÀH+Žùò ‡”,‰\ýû+÷Ç 6â>pð•îÅƼß5•Ì;9Þhé©£º{õ¶Â —$è0$|„¿Î¥-¼ˆñ+“CLt^)·Wþí”p3!@œÄê¸bÞpnÈ5¹ûí–W~Ié/‚ÆßSs೿áAÕ©+¤X#o£|ÃnG/åpÃßç÷ÕÇÞ´p¯<î¯_N×ÎuârŸ½þoW×Õ×ÎÑx·ßò-^ð_Ýj}À8wëåð†w锫‰YzØô ‘Û´LWŸpVŠäƒ¯ìq–bó>Öeܳ{uëDzøR³·1{\hëj×3\¼‚|NÆ1‡Ñ˜G•¼á0P:¬ [’¸–Khw‰ÙLÑ3ñ!bd³:DÁ\o‹å­Ø…öþÉËò8)ê$é]½7œE‘q{òvÞ™/ÿ*T;¬œŒ Þ£Kl¸á%…$KF8µjþæéãv™š…D%{W¿%Í@Ï*“’/<o.–Ý%¤çÎÞ 0ú7zD—ØpÃc¡~¾V¸çÍÏ©Lîž3)Ðc·Šê…Ò.»¸ræòþâ—´öX/ä0·€ÜR½Á_©ÞËûb½Ç9”~*H^ýÊ-d™ðbNÌHb¯ú_ÑŽ6ÓÇWÿËQÊ“Eð¯eœßÇ:¯Ëü†#†ûþ¥|Ã_Ûe‰/Œ]*xCÌÞ@5:µºGñ¼Ä|Æ´¢Ù눾áø@pxC»†])DMÔޡÎH#oœO>ôï(„JÞÖoðÞ#y½\-ÖsóäCCµæCè<áèÏBgµv8Ði“Å>éœ`ì+Þ±ÛXÄÜ¡»–ªI´€2„¦ÊGø+‘Ùté´ÉÉ´Ö¨<ŽÑè%q‹…nn¬d–¥Z½ŠÕ„Ãïa–•­kÜXV–ruN&©žÐ:Dî9çÖDGr¤¹»¸‹[˜¯˲•ƒªrò´ËoxÖúÎ$y ÉdMç~kºŠj –¹X (L@÷æ†síéGƒ`ÛUŸû*édF¢Ž]z÷ ¯¯Ñîq5I缈^_Í5M0Ôì&íyœˆQÑÇÍãkšà\tól·8|¤¹Ç^˜é³~eNP‘Ð}öN!·šñ9Â_yМ{Nµî À<áÄÞ87ÒµF”k)¥G¶ZiHw*yëù$3ÒÕg)îÍ[ѪŠ)á¯þ£$K \NõV@†cÍK3»ùlDûû K«hÌØÍT@L-î¦^M¶¤»ÇãºKј³ÏA`& ´ðøÙRã@£Uð°ŒU,cÕêe-ı+ï§,+i˳€3xwsvÆ˘áßgDZ<“« _ÛgÁ·‡´Ið6£ºõvì”Djj À‰)Su'¼Q™8ÖDÃ+üòÿ5°“×[Ïhý£÷.ÚÕvo/3¢5l‘o‰Îð’B2¥KyîÍÄ[ç]©îÕçBßk€7®>"ѺÌÞv87ƒ•î6v'ÿéØÝ¶þ4Î0Ÿ%Z¾é؈‚“ÜÍhÂÇ9!2´[o¨­CÛ,Î ²)r9 ÍÖ` ±ô~“3—¥ÇxÚhfŒÕÁ£ö4k‚†¦¶ÍÛ&|œC²FWŠ~]Û%îùG\2ùó<N®¦¤…àý, ýþƒ§«÷úe,ñ|'N•’ð×4ÉZ?ËT6.9:Tv)3èÈÒ½öt„¿šJ‹†uNÆ%‡ëÅ.TyÁ·§·?§rq¯)Cý“—QkŒsà¤9lÉPýö%cÈÌî#N’R«ÞéÍäèA—qoÓ09úÚí+•µ/êZ£ü¯˜½¦ÈŽ£Úà ¨¡¯8W• Ò@‰ÜÃE·˜ 1÷¹žá¯Sðx²õÜ-f_1•æN¹~ø ~…®÷í{,}‘·¹–s󔉭ªß . ¨¨:Z¡ÿ~œJY2RÙ”ñ$Xý•|òþA>yÿlàÄ @7<1¸(ƒ|Xó⿼%Òó¥ôËë²jlÙ… |.‰HoV^=O¸É4´S tôKí–ÛWó%òx3GW?ĨyËq×|µŠÖåWÆyHˆ»èíð9ÝûÕ*smÞ#šÏ$päê­VyÇ2ÿÅrIÚ¬+5Ë ¢vöŠíÙxÞˆ«º_ѸW‚äbòþë«<¸èÓŽö§ažÁñHs9þÊ·<Ä®ÿæ¨ÂpkÙ»È\nxÏãú¾:q^«¼9›ªŸÓz9þ›ëEõ6ׄä†ç†dwç‘\J¨!A~ËV­ƒÀ¤µ@6ÁÄ‹ÑÍˉ­ò$©g›:1{«Õ¤Ÿ§ V3IA¯Î÷8’M)¼vúäÉ^¿zÍöß½³;6-ÏN«Ò¼F!ƒkBŽÀTÜQ·‹Ùtû‹EMΦ/ý8¸®Ílü-´µ<éçcÇEŸFÞ2ú9uÀhÉ{Ä Á2Ú'¯ƒ¿NýÜV¢i6åöÜ„Sê­‚d6n€Šquhypsá©'†ðÕ„H”Û"z:àsú!¹˜÷ÕŸ/Ø$¡¼®»L·™Ф!ªg¸`«®îÙqÂß}¼ÒÄg[ç•6FPÙ*í”W$o'5š8Ú@¨¶z†3÷ô£7´] T©Ó uÉÿA¶¶{äC¬‘ÙÝän29H…Œ­ç«£irÉ{”ãÕ_ÆÌ©öõ\f²æœù¨±7™&\[B¾ÁÅ}CÛŒT½t8—qn¼ö†’ËÙ¿È©¹Î¼Ùz ¨ƒ ó®=Eä¥.«GDo¤üÝ=Î1äÅÔN½E:kÇ)K‰ÌœM“½ƒ9.Ýãd>xå굜%¡ÔÍk°-ô(£ë¯0[¾\±ÆÒ¹9ýUþM =PÜ(Ühü;”ùæû.²Pá6Ž‹Kª7A_GcÊÞ0á¹a~Qvð@ðgáz_åy’½zmÀèhäŽÍf¯.Ô]Ð.mŸuÝ4ŸIö>¯ØÔuF@€Y;~i©mÉ]Nqý+à5ñÚ¼„‡5'@‚–KD4ø–¤˜~²Û^ƒÀ: ‚&ЂñÖ¦GeåìÅÁ³»€é¯î,Ç^ð ±ßˆ%óâ¼cçó“”c‹ãEëhc댎¹rdÕÝtØ„k Ùåj)ùÓ–ÈL,F3Àø¼íј1Ûá7çü›Y—½D—µ (ðw©n8=ý’%÷Î?²MtQ®‹òzÎwCAB5WO «.:èØèt&9¯­Ôf EàMüº‡Ásïè7>Ã;‹”&ìÒì4È9L¯ïó|ç ¸;›‹®d­lºï@þwŸ‰|h$-^ûzÞÊÆ. ‹ÉÆW®?ú¼z(ÇT7pÐ]dVRÍŸºdéL\^ ä8¸xaÿ„SUÀcOùÉàÒrDó¤ôKÞp½y;Ú#‹èà ž«kðÓ³›gå~ç™ ô´˜, ø ­*T†LîÕö\QçeñÂþê|¾Œ;¯ñ+«ë"! v+‚®Ô"Ÿw¼GY4ëÆyõæ-ú¼Þ$µc3»„Lƒ“²#‹'š•·=WNqegëñP$sâÁ gBI>·á0o{MÉ\ö¼Êþ’è²Ê dã¾ÃG·(`ðÿ!¹ExGy§’òùêL ‘‘…Ü\·±zçU¬&ó^Ü⾑×Éëž"cŸkâ¿ >"oér?–Á©"ºÔî=¾à l·¾ÓtÌ2…õÔ‘áºãÜûÞññ+SËØë ý›³§'wÃ])±)€îÍ™ÚpÕΜ:ôAì«Kaä˜Ý7´mqÔÆúY¿õÜsL©·ç\ ƒ¾¨Jåÿ>µTVaW2­x´³\¼Ê…Á¥µH#¤\­ðË|fuÿÍ)£Ž'%0fjsï±ý·ÚüJ™ä Ûå—›[ÑdºÈ#\Üpî‘ïsqçóc÷ÿöêúaŽïR½o¸"ÂyWw›±æ$Å’XÎW‡ÛªŸO¦mo¯zIÕ//8à €õ&¼¶ƒu¼…î‘^…Ûkfð7`Ïj¯—N>/ðI÷$¨ã¦¹É$ì™üWu¬ºo8Uà ìôi+aÿ«òEX~e•Ù#1ül)µÕI€LÛQ³E.ƒ«Rˆ"ÕÇn­Ë„'£þ2Ôa÷Á„‹~—ææm˜´Õ˼tæ–n<"ÓýþX~.Ðàù÷Õ‹>z™È:AJ=ÅC¿kF—uÕRþ¥Ù¤‘*èWTÿèI·,Ø®…ó®€ÕþjGϺ,cÖ?Q€a47 ±Îˆ xÿRý¡=K% ´ÈùêßÉÖ”øÓ—Ïký=!§|kpA$?M\ÏpÝ ‡î‚mÒ¾H}›Ô£X°¹7ï°g—_™„2—Lž@YsA½€I½ª´Ás½´T=ã,ƒK÷o£WÄuñÒ .„Tò\ñ$ÚÔZÓêPEÖ¨Ôý·n*š3É}]³´Ú€BV7×4á[þ\iâö‡>¡ ÿæã\Z‹DñÝ*(µííx““Ÿ8µŽ•ÚÛŒäÐx²²ÿaÙeÂO;Þ$ÕÃ{ôy‡éwmÙ‹Ù¶œ|)µ¬Ôn:dtÝ®ÁñI}'!÷‚c¥¸Ò#ðž~âYA{O„,²R»§å˜ÊG¿Ã)tÏ Øú^$‹û‹—g3SƒöEÖì-$bm ðò,À ® ¹ät¾ú‹n•t­’õ6€|:x©*ñ»w_UVÖ ™×+ ¸/d½ iп¸bÏ›7B­Çî1ÛF 2œÅkwœgIGžÃåZÊJ·´:áß«–ûãûXsÂOïÑRU°üë†Îº["´f^ ÈèîAjú¬ÝjÌVEŽÑ©á/wjk‘îVu_ס ôô¶4Ø·,n^qÛ+p9ég}’¹^T ö˜_W ‘ýµqZ^:±ÈœbIugìÝJ…¾uwglÝ×ÔŠ4IùãT%×)ÙàB)’WÔ‹ð´t[ÒíîÈ^’Ùý>ó´Ê¡«—q¨ýôå¨mlý&üµC;WŸpáé4eÉùS–±ilýŒF‡Ÿ—/Ö‰•³Õ­X•»•*Ò@^.Wœ¶ ›Â§X¼ac}è¾ á„¿‚…\W6ÝÌ_ïñë }~ç—þ•ÙRòë“Û/¸˜úÞ8Úu3ù/þmZïÑX½àµz ä7¼†J¶õê3ZÚ`Ⱥ 2 nmf_pMPæ„óþµÍdêúHØ+*0jÕqÏeÖƒPÕ}ͨY<Ÿ1ƒ;´(wy,w2 ‚Bî#¶í8úôuœ[ŸÊ?¼¤Xž1^ŠÅû,{dÔ Nžá߆ !®q¹œØg–™'Æ~’¶58~uîjcðèŒ{½:3mM?ñ\á“QÃé»ÏtcêÊéˆ ÉNN·ª2ˆARsoÞ¶ XŒ`îQk˜ök#þB‚­,î³›Û  (ùI:ƒË«›.øæw¤B‡´•TÈùp‘>šgbÏ9òÍËÔü-&{Dƒ7Ž ®ñ3^Õøo0.Èê^Ü*Ü‹ÏLòXTf÷Õa½Ðˆ‡Ö†Íó¡ 1¹kR¾ n@ìÙ=Í„ 91Õ¶ö?p6jžbøßÇJã—ÝÚš72´ÍÍë°28Aé?×v„­y#Ÿ=9®Ü÷U{ú¬ƒ«¹ðCc„ÁÇÉ"Th¤¤ŸV¸ºy•½«Ïö°¤HnÌ£OøË(òRô\F°K(¸Gχg3†2YÞ¸=“y©aƒË./·û>Ÿ¶lÊf‘ÏRÆ¿ö-ÑgYµéÖgÝe®û G«ö“¼É +€ÝàË'ó*KÄt0ÇÊ®‰¶ÁáÄò9QþR•KÏzƲ^ȉꞜŽÁá=ÎX[¿ iTWzðôWuääÙ]É_ßL¢ %ÿz^U¶¦'É%ŠB O?ËàŒ¼ø¤ˆþm]1 õ‡¸([ïGr?é_÷ Ì%Çg€ÝÁèþj»½Ëˆ¸›,4#{ çl΄:¬J£3\4´eIMý“—íÀÚ'˜P½×Í ˜µ+r¨aõn~+z Úyi:e3€(€3 Ùã üúW#ì”K¿~ðæÑ?Ë0¸Vœ#ëU’[·,³v@•Žqu/Z¶v¢1cfJk÷[»G' ú‘¼~ ƒ›÷ffp;Â_­´š×|ûü'.Q?$uãœ|ë~F¶Õ/Ö5<Û=ðžã') ŽœÌ|nÙ„Ÿ(k QD›tY/ JúU«£Kd1aëÉ` Ïâ ‰Ýpm€ªß< yÞv‹Ð%º¨°ÜyÛŒu‹4$ÈFž oû5ø}|E¶­¬Š×TÏr+Çì1¯Àày§.Èg™Iš&BUWu£Vú”%¤ž¢WîJ-NÝŸ¹èQ˜ ®„„kó’2Ûž’±r–Õ š­§$€æmAü¼G‹¨°ç9>áß%®K×{´U“ÆHö1¹f÷$(¦Àƒlš×ómpP¨TW¼’Åh:Èùã0ú› Ö÷b’Kkí1M¬¹†À¦Î®zk>ìxÝ]ÏÍ„€O¸æBGøwLP©?ØfÝQTrlЋÑÿ>j"ÔHÖ'ú õPY ã³P{%LÀg`w;P£!‚.Wa÷ºëÍùE¦åT@þW_Þ\ûd^Ë9}Öª.ãJñ{‹A*”§æFô(C˜uÊÕ²«Ãj*Òã›õ^Ýñh>ˆÈnÎNoÑ«­V>BQÝd=Þü[X¨ÖõŒWªU‡¼È„« nÔÝü†÷ô"«›[Lõ¬‘gƒõl ù!O)‘­Y-]ìÚá\3EÒùwòIqšÍ„ïöÃy¤øõæãgØúþP»Ò[˯沟]Êž°±Áq–<‚•Á#kÚµªõ*«¼ûô¹tæUþ¼¸¥˜ª,8/RawšÌEI@ß³¨'0á/YrNŸ¾T¬‹EèÇÑäŽ!c „äsU&œ9d«~ØÙž»CYi&\fð øÛ¯W'iíŽáêS/­'/ÓU­2Òzâ1³>e}vÓxT—\ü«ÑâŸM*ý/‹ñcÔÕ[È4 úǯ ×îfïë­ƒz?Ü„V5ñ=u_„Y* Ò¨Lí +ûÂû ÇZ5.±û†7Ž$Û•Ì[Z5¹šfЧœÜ¯Xþ§Éß«>'¿¥;ø\]V6ç …ŠûꌸÄq¶Œ–7¼ƒâÙ÷2áÜו¦€g¯”KHlùî·mIua·kÍà\C^‹å[×às¶¤¤,ü“…¯åÿQ4àù’CÐÔöNh½®²»<brpìOøÖà*1—Ø\ŸU k´•s×FÔàTã[${AÓ„+à⽤„ÊC€‘g›d@áqçeSZ&Ö„k½x§Ñq‡«‘n8Õ–Iç»K­IÕ5çÿÖ%dpÐFrzö]g·}è}ñl"jHðØÍÖX›OAДðíÚdFÜÿ\7g&QŽúW‚…óe’¹œF¬O§Áfa¯€ïFÐd4–yïó¼”H¬P´Ëƒ¨f}:„ K½@Çlpi@õäÞü6Y.­çåûÌf ô}NçéNþyZ´»¸Uùai]Ö7ë8B‡—¢q· )¨K¹ÊF_W÷ A A“釴ìW+&¼¤˜±e ¯c¨þ§CÀ„32è?ðNÁu“»žåsQn‘½,¥²ÊîHí‡Ø—³;»ûnŸýþÝ {•ÕÖ{l=ìÃEÌjd·üÉñ»§¬¶õBâ–W±u±¾¸aÖâÍÅ–ý óôˆ»ó|í—%ÕrÊj&Ž Jxæìm@ü–MÓÃó=ZåôšIw’ÍDA6!±§]fpnÅW¬‰ €¶DÑâÂ-èçyÍnÆÞ|8Ðz±Ýíßp®ý' rÛ]mlmÕÌ>ÐWÌn‡¾Ás‰ôný;›<;k"ÈhÇËÕÛ²z:¼`ÿ õyCÖ+Ü£\·ÜZû‰È‘ÁñÖÂ.ajÏÖ¯O »¹±ÅDȬn„ll}ÖH„¬mÄF²¾G‹n©MsÏÆ—搜xÕœ?IG÷ê^}.$’â gYm*Åøò¯¾¿:ÞZiÖ):·KUiñk£Ûïr‘±y“œPý×Ó)™ð—ƒqa^y\7) ‹{{™Þõ'”fƒged2ëÉMø‹Ò¬´ê‡O邽”Ø;ý.r1¢yÏ%¢"á÷ê¯áO¤¾ñëj)]wMìÇlI<Á3`Õ›g÷æçÚ‘ ¡!Oà†ãòé.™PÜïÅÔ7¼Ç*K%õ•e®“ Ÿ*öõ+Þ«3'ŠèwÓú™» ËþÈrëŸZ—_Y¾¿Ì‚뫤æ9‘³ˆvíi ¼['Á¨FRoèÜì6Bª2dð‚•="½fÓ£ sl ½¬!æ{OOÞ=æÏa M¸0‚ÊÅ}DÙ3WêšÖÛº ÜèÒ<^©ž:ÉʉK¹{ã|•R€š/q¹µáJ'‹9k‰‰—ˆõó 9  £¡ÞÎp¡ê>¢ñ÷*ÒÓöâ7ýëPÌQ²»Á×™`/{kgxÙ9°þÚX¯à¤,[÷¤Jc7‚28!GŸ­:Á ¾Kû…Ô ¾á¯• WÓÕ÷úŠ`‡f_©7hÄ{ÊZSvÕ‰1su_0Ûô“P€ü”*P2‰ÙT8üégþèæ“z:ƒãè¤zG½­ `7¬×ïhpî‚$*Ô\3>ˆ6â§ò¡uÔYF¶äŸì,F®Ær™žlŽnÉÕõrĦuò`¿v\ù7oé1nv³—©à¼ó™c>áßIg¡±ÿ¬ÀÒ¾„èÍ‹ &\¹ VD/—7áï¡R×l§NwÐ÷êˆwW‘¯é††÷Ÿ·–ÊãÁ¥+ÝÆàÔβc<‹÷'Q;U$ø¯ž©´Þ4qPõeÐtÏóN¥­’ûj¥ý™”’ǰ78•ì=‰Qä8Î ¾ËœþÚŠµoà/‘Òsñ¶WØS{.)e÷Ù_nXáååð±iåS—c'4 0‚Z÷ê“T„ê¿‹+—:Õ[™§AjHÙÝsÌ” †jí#¼ék¹šÝ@%Ôä¡îÕg\ÙZ$iV«ð§.ÛŒ˜Õ–‚ê«!bpz©fß~ž2—Á5FSh#Ä~D:FÖçä-áf$€†vªþì½¥¹Á#ºZüºçäiúÈY«›ô½u7«¢¦òýÒ½òí„Ǿ㠳Jí¨1÷w~DÎ^ ÒàÚZd'eÎõéíj¸ß'ÞeðçšaGMÅs)3ø[UvÛ¿~¦VÉoµŽ$µc:zèêóÐO ½šÕ{#dž5PšÄR¤!îéZ-÷ß#EÏ1TêsX(‰$H²éL8ç)üÑX?uÚ¦oC^ÚÈúIÐùÖj¼á ¬uÍqwþÌ#<íסWêFëZWãú#ÁÜÝ3Z,ˆbuqúÛ™¼ÌhøÍ£)hI‡#{ŸÇé¥Ôå 'vê’ug0ΜÖúødá8{YóÈZ*º¹'÷Mj§ “@Zjp•:Ó»œ¯þ"ا²ªuª5*ÈÑÂõý¬–U§Aï&FL™æÞã\D‘X¡òrŒF柳‡dzV‹55×8ÜÖIƒoÁï§"7Ò±æjHÝcM|;†à°yÁµÅˆeì?‹–rxu~áâ¶œ@¯®×|†³€l’[ó™p4±Þ.<òØù‹É³fbOØàœ"~ ¹_²äAÛoþ°&Í3Ò–; › ¯ ô*È?^Ýál‘«›–/ý4lÈݱºŸÕ?=û¶;-SY ¾j ¤ª?Ñ8M,N2ZmËÉ œ©n‚æ¯áèfmîžn–ÍÓÇÕÙO@ÈC•ÕÓï2¸Ä\Ã)§öI˪»Ø“Çy›,Aø}þ5õFNL'}ª¿Á·\›zþˆû»µ¹A@>y”9ƒåÔ*ØÓ¼×m£Aʹ¬^‹ZÛ»Çf'OÐúØÜÜVݱ{®éÁ‹°n† äÙ2¹Eóµ@cÈçkÝ×¥TïÑ $[ž{ãÜ à=ª›hÙOã¨k\¯ÛFƒ÷#Òa.2»x“Ke=¿#Nm·Ç- %wËšÝ øý@ÉàhÇãF|†¿Á6á‹ÿ‚·e­zyÜ.Ù€fZm²½»ŸÁ"QD¢Ôs~^ÝòÁ&{Ü«›ybtÈò([?‡o¿ééýoJ€G%ìfB&<š1OE$#ë÷hžŠšmCUÔÒâV@­ã‚PÜë^ŸªvÓ)Êàš¼>â]T @Fíž½•ÁG„»î¦[¶]4‚©OZA7¦3)K­xôÓB¢=GtÝñáö4@oÈ_Hú–jI™W‘°Ùw‰¦‚lÍ®Gc›Q»ORÿÓ‚lðž\»þÀÕUSàêQ¹¥¬´ Í©5lÀg? ‚ÉçrãPé9ºiÀ®þi í"»q¨«šÖì4¿ÖóSCÍuú«Þê˜?BENuÕ£‘\rE1›§¾R¶ý¹Iÿ´¼üj2* ± “G2¸rQ¨€—D⽈šuBº^¥ÁEQw@Ëz†o©W›°´i^S,ÅšJ ÈÛ²{‚18+àõ©zÄý²õZ¸Â®Ud¹Xë ¨ŽdÏ*ÈàѾ³Ë“wÉ«—Ù;â-¢Õ»ú!sê+x\z èK$Šu®t "%É«.\UÜiR­B½'Údw Y‡prÇù<+W$öT³ûæ163¨PWû^ÌÇ@•"Kmæ¾*³kPIHÂÞ_j͈@$’‰¼,óV§®’M·£€Þ‘êPgÇ#Vd£ì¥ ÎZ™Ò. °ôEÒ±G¦eÉ&'RŽYíÞÕO];ê…ie6Ô$F²FMÝW7O› ìКk:Â_ì‰Vžo¨ù"{OrÈÆ“˜û$Õ?‡lÜ„}ë:`+]ªÜF€È‘ªÿ±¬ZˆÜ¡²×¬+”Òú«ƒ¶çî^¤ûïÑÏNø×{,4FÄ"‡?]ÇῼMcvÁ¤Æ ÐY=v™]0T ¬ÔÅë‚1¸J‰ÄC•hl˜ë³[€ïSȽy;;‚6JÍîšðÔ…œ8çGDOfø$'øÕÈ8v¼²fŠ‹9 ´€çÒ$¯p³|}Ié&“x$ ƒ+ƒþ½âú——}J¾D5—˜ ûÄn(ið†äDØ¿ÇÝqu­®.ôÅIja°Dx¢Ýâ[Î=/±ånA­¸êéoœ{ Ä«—ÅRZÓ"“+ŠG¹zLƒoa¿ŽŠ G…€W±üÉ/)³Ã$§†RîÚn *çé÷;ÔG®¯n*“àHÇÅc\{8áþŽ1—Ö b=)°ÊT<]/ƒã}Í­2•mOÊ¥¨Þ–zsá;çö½}ôO„û >ú ÍŸ±’®<—ÿö$vâ é~-jÂ/¤T“ÉÏ œ–Ûá³ÔŸÕ±Ë'/KøÝ;RMêW·±®,®bM%²ÍsmuÈ«ÁËýÕ<°%Ômìj¡kØ(„Š}^ɶXÆ¢>orç¢Ü2ßý'£Ce<Ú¹I¼àø¤Ð<•“ iÔ²ª¸këøY…ÀàxŽw7µ®²¢ÉÄ’ÖúoWÈ>©™šÇÅ3ø‰ž'®@nÌ- <6ùuÒôéËk=)HJ…ÈëÖ*wOJÈÁè÷&·F¸³©W¨ýØÈzRvþ/}*GøK2õµk§Àž”¿cÓ BÄxcnÎZ턘1Ïsž7¸VŽ4&•^d-1ë6i g}Ájº’(çŃÍÄ÷÷IÜVËÙbÝ&9×ðìF¸j"P@EƒÈ“)1¸›t¶~> \[,5­^VWë¸À\ðâ-³ãbLR~¨núAÍÐ.ä‘qq×~b½=¹™ÁDîÇêVD‰Wr³ï³m@ýƒ¯1ïLæäy\«†Úc„Ó£À`œú:W¸v÷êfõ(†ìyÂÝpÔÊ®Ùóe*[]þaÓ*µ;U9®ð‘wõ– >‚±H§5s~t”rj¤ßÉõ½à-v§Fî/®WyXþ•I^Á#È‹§A`pínbü¦¸#ÍûÃ÷™4…†Ôu»Ç+[SKÉst«b Õ*÷8R̹JAß wo;0SÚ#Že¿Tj]DKM~b"‰»DL8‚þq~Âåî;Òá’“ßìRúÐÍ­ÜU;†–ÈÒÓ+¥,j–™Yëy"— ¨óZ’ûæ÷L³Þ>y}Cf¨z<’Ën¾áÜ#e·,\mûÒˆfå^± ™ì|ÿ¬0^Û§Á/Ę̀c*­Y k.€<·×ùôyõÓ✛ûy‹›k=%ºê.Ñõž?·„A(•çà²Å4¨Põš? ®Ê±s>ñÚ–[nâ>òUR—šc6?ëÞ([âþ•Ù{œˆÍ†€Áy<‰§lp乜<åtƒóNV|Slh…Y vÒnñ_ð„o­Ì5ímÛÀxàô|Á– „­÷Å["š¥K‚_8»ºàÓyoü 鉾à;‹§T¶ÄýÎÔV œbV HÂ`ëû‚+0Æü^j©P]SvÍD2J©v÷ ™€pErþHÛ­•¿ú¥Ñ¿Þ£µzÛâ±KyÁv3ýa`F.å{ÂßëùƒW^,ßRhÆ6«PƒÊªÏžØºA\]í³Ž4kÜ 7gÐLI9¡Viÿ[ï–íßÂB‹Àx»D-`ró’„fç€-‡Ï` Òdú5ž¸¯/¸ßz-($÷ä* >¾µ·3Y<6q† ¬»‡cCßÖ‡c™ )UpºÎþ#W¨KIvê¾Ï¡¶¼Ús—»Ï¡ÿDÖ²XŸôã:|†ÿdöú ³ž)ˆ°Dnn¶ ¤*¨O\ð-ÑúÏ#z}â¥ÖÚXHÖ_u7ŽÞ˜ ½Î†‚\ XÜ“W¾28¿â©›J+Ń[çXØ¢QºÜu½ù¹¦5è¯è™·|+ûö'—áÑš ®•#ì˜~±\bQµ&”ÌS×*«šD:€¹¤v†5Rð¢Äº2ë_ÿ D;#÷ÕÕÃAr7 ^ð$'ü{úÑeìR—_5wl¹ þó؄ï²Ù¼ÞãÝC\D´»ƒ`&2“FÚ.=”¾ÂÍ#ãxC´ÿ,öð·ý¬ÈgyC³Q7…¼®¹iã<¢ë°kð`\Éy¹šO!Ÿ?Mò ù&ü•oéí£yù•…|´O˜$ö‚ƒ_ÚºûeÌJ¨[n×ùgÙ'²i¦]r=ˆ ÎÉkª³k §Žkap-9R×b¾êZË‚œMp/í#!rߣUm@Ç  »_qFc 8Ï'örÞG¼ˆ ¯\z"ýoÖ¬Zw ÉýiBé¿„äukÄñš&fÄQAâ–³«›„(T«®ýVsÚX䆒n×’½¯HfDØ€ã’khbpMÈO¨öv„¿b^ fÇÅæFòE^x5O¸TIgxf ¸çó'üµ\nÕëH3>ê+ì¥z™gG®îÛž¼³ LÇOObî ‰šÄ“u1¸”âŒcekMõ´SÝDc±òb¶ACòÇ^;Á·ƒ¿ŸŠK?_]sÈç©^¾¶ÀM˜P5Çÿî­CÖÎð®³Òl‰qzÎÛ *ñZå­lù0Eláä~Ú|[ëk¥³ò­!š¨½Z°ÁGL ©_B ËvÍr˜?®ø¥Á©¢†6··Áà n_"{ý¡d^ùî?j3­»¯Î$è[D‚‘~3xÖ«Ï\’-¢.˜Ò§W·­\ŒAÄŸupM¢NCF5»³Ìúfy‘¨9i°„Úv®¬ÊÒ³WÙ_]/‹vïtmÝ@ûeÛR~¼:K칉9i0*”6¯LkðŒÔݶì˜oø<+ñŽd÷¦ ¾aõRd n8~•ÔU¬r¡ˆ?î®C>BŠá ų-D (ð‰+´mðñ##Çå?´œ®Eþç,Òš¾˜pÍ@MU›×ÝVwm!¿j-´êßÍ ü5Î< /ƒgªˆË—½£lζîz’çpuU ¾)ÚP$6ª²=ÁKZL¦Ý•‡q‡àÒÅ­àÛ*SäIJèInAÄHÛA‘Kƒj9â™-@N@žšÔ½ÇyJÒØ))s~0eLð?ÆÞ[ëóquëxù6Þ¼›+jÖ0U"5¿êåû¸¼ùÉÉ×R½ƒz³øàÜøÛ»=óFªÏ@iGºËdjPSLÿ»áZ~6‚·tùÒÆ>±fÓŒ._öÖ¡ÿ^²,ÞELôÉŽúcÛƒŒìK!FyåúW“É/]PíÅNôEÉN³ûW‰¹M5Êš©Ñðû¾:?¦µgô0©ÏXÝCTú.ÈmWÕëf­mïHr‰ô¯ƒËòI xmU'Î@"©³áoÓIýèÄC>ƒ\Ѧd´¦+ Žü±¹¸g´ GŸá{·çùGÑÆøùÚFE›n*j„©ÝchßÑúØ'N‰¸ )cñ÷ˆ³Ø¯>Æí§,³Ìèý KÛ{ Ô„³Äê‘ãP¶º§×ɼdzŒ<+@ƒ+0x9t?ßü\œØà/S ïÙUJb£c—å¦q3Ï{4Æ+h $WaÉà²kêú³Å’;¸vQž^-ee©hô›‹ú'Ô£ƒšAÞ?7O-°%?÷Ó6s乕üÉ×·#Œ(A:ŒØÙfÚd¢£«ïËÒYHÕc|œU`{t§®®âiyµmÛ@o#ZãS¼ÆÙMÄ““3ø)Å~CùŽWÁ–Å^—z»Mª¿z½š·V Mí¹»¸- TªkÞiÊ}\¬vС¥^qßàcÇ s!Z•Ä&…èJn='yš©s¯À þÌþ@µ”]AªóžJ3ë¸O°—ºá¨ÃÑ'(œ>€Úlùtèo)᯼Fn^ö kZȵ¢Ô\sí!™:©R?ü÷<ѬiAoEÝŠS3Kƒ ³¢žGS³†€|Þb¯`´¯>Éíö$,gro^Ü«ú÷ ®Œ˜WÅËåMøw¾±¦ôˆaè rgÞ¤è"æ“ ìÖXáÊkF»›2²ôe÷êFLeï$g$þ Jz‚{œ×f¯m ¨Pyä Ørn Gƒ²§ìmp–ÚYë-¯¼ˆfžx]¹ =âLÆ%D/vÉe7H ‘»¶«iu/5w…2!šÜlöÅÓÓ™¯ïÊ(|crcÙh@,‚ |†ky^îrKÕ²Ýà82¢®n- (N—h€ó‹Ñ€)’ ,9ñc²æMÐØÛÇ'œè#¡ìç .¨ “¼ö‰ ±¼Û³&g 23»¥Ñ ßF$ó¬ëfÊ>KÆ¢Ë?óP›f¢;œòhŒ»µÝyä~Åy öO…f_žRqW+ƒw ×—ÕÝf¬K¢y"Íš!àj•=qƒPlF®=ý„¯‰ø¹^ÌÐ,e0gJsçÌì¸@¡²»aîL.rÒúðejM.j-ò¼ÇIJ,È—©w¤õ}¥ŸɼÛMðú´x:ÝÍú'$e—?pçü˜±Ö?QAlE~…mÂ9y-¾­ÞÝOûêžåK³>‡V@Ÿyœ¬é¦qÕÄ;*òºpkÏÜ´²Ã7ÿ‚ãw.|„¿Æ<È·Íz²n(ypgr\s®Y".³4Î:Îlm'W„"Oõ­Ykƒä©*¥§µk3·‚ZÀèp%b .•CšsTʪÓn·‚µ7œ3êøóÇ&p+èúéKèl°TÂþEfŠPAðW¢,÷OYïÑ„Ó2ÚMš·©ßnÀá]ª¦3|Ûº{Á_\¯vŸ„=^s3‚COÇÙàTB†32¶û®#ØÌ;‘mqI,íÖé»_v·Ø­ÃÀUþZ‰á³¥ôßëÅ£ÆÛ¾¬¢#1­æV’›õ–FÜÓiã¾*47k¬¨àpAJîÍ#ëÐØöÕ@ #^A·Eðýþ=ƒGb˜íÕ§JfTerž=£ ÍÃ_ñÖŽžk‡¸kǶ±‚/W›u}³ÆŠ¸ÕɵÈ58%à?¡â2»'ÜoRoÖ?¡ zvG¦>£<Í ½LÜó„µ_”@ÕU?²äÖ?‘Ë9Џ‚ˆñ´k­ÃZ’€e/Æ4¸T så6&œ`û¬k®jp8‚µH=Âß™âöÁsŸ p‘C?á‚$ë4»)ä¾MJ©]6bëÞ`d"ìsæú­däí­Ç£ *ô»M5õ5ÔŸµ„1™Îù1NÇi¯´Ï Ÿ‹ÒÅãêmWÀç,^eßöxHy•åWfÕ~’«5øvÙ†¯îþul(|y–·åW|˜±‡{´1Ð\`שØà<‡GÜ$ó.Êt]òº¹+0ˆìX½qnð“÷cµä%1Ñg'wFr/Ùi§¹&÷ûÌškö¦R¤Ÿ¯™¤×4§VVÎöÜ'Çàbw÷Ùg­£•±Ôò®ÀÌüe•Õòj‹Ö“U1P£éalš¡˜ã¶Ü×w³WÆ¡E–Áu÷OtdÀÇÞš½ pò1Û"Êà°ªù ÿC-•Õ×¢ÏÖBY•mRó ße8ÿLïÈ4áßAWiá´> „Qa×õ îf|€>%ÿ3˜x%Íñ³äÎñœÆ,iËbŽ»oýbu¤Z¯ª–=›b HÙIòüË{®~Ng›QzÁÑÍÅYÏWÿÞÆñúSÖlшù0M¬dÛCF­]imçî³7!7dHw¸ºÉ¶iˆøE—ÝÆòìwkÓ²knðýyÁÜl€ÈIQfÁ£\Jö2±.“ßú'س4è·#Y‰âe¶ ªOpì{G„Ò‚ðLH d85y X}6*P¹Ëq,óFšµ Ô†š-+áRè´¶#üEXo²Öá:™es«UKÐìrw ™i2ò8s»%»™T"«ž¨…Á ývpM²>ô…¡æ•‚ Ž•µº»Ð·ª«{L¿[]¡÷yÍG€‘Zõ¤} .L]Õ±Ð/,×¹}_Ò$Þ8g;Ž(hLWw¿5ýθþÏÍ{é ƒK hQS]…7ºÑðè4àìž6'üPgûç ÿÞoµÖU2¿³´ 8ú/xZjHØa|þÔuQ8¾PRwÎCKn‘#S»jð‹nG7†¼ñ,î>~Kñ—Pçº:ó¿©Wàͳz³wµ»K¸1Ù[†f£ÞçðŸ¦[„Ü|É«ÀÝDÝTòÁ9å+VÏÔëc…1Ž:mžÓ³ÏcNM‘›—߯ÊëÍ«?]Ýò5âOÀ…ŸÛ—Ü™m¿5wÿ¹¹ï rˆßÄ2ÛÙ{•Çͯg4£ÎKCr/îÀ¨ó(ÃT½E_vëæ¯RêÚÑâ^Û©ö|ÉR^Î+q²‹)×öú£ÑÑýy©Üù1s~Œ!cȃˆ+Cé– .<¢6¯¾7á¯ãâ-Û—áÑú&ê h‰¸ï³¨ßðoªË¥v±¨vµŽuÄ£%~Ã;ÒA/žDß„¿ìXù¹ZM²>Q…uoÂOêç¦ük:ð‰ÖÜ¥¹ ôuÕ÷Ûm €8¸yú[}ë6PóÕÚºÌXãú'¤JÑ«—Ø3® *^3Å„4rqÉבf l”Y¯1ÝàŠÎ{*žyßvÔ>ΤkycRú©Îe×¶~ýp½È-ëLSÔýÖ·Þ%p "rGÚ––‘{¤¹‹ñ*² »‹¥% ·Óä‡ä4¥z†¿ËÊüÉËŒ5â?š±>9Íà#¾W`XÖ|ˇW€Ãâÿ%I¨m™× ~³í3Ò#õ¼k ®¼ ?IõI€?6w¡hpIþ¯Œ“?ÏàŸ±EÍÿꌔ¾·¬µ¨=á’æTÇ›û¿_;«9^) ½ÜÙ)c(»o¨ú 8‘ê>û\ì(D\‹­æÅ{/Á0´ÔzæÑ×óÍ—¢î:íÜ,¨‚Ó¼bÂU(Ö²D¼j€ôj> °ñ¬{õ£ ·±©ßöÀ£)«{ô4{„$ÆÈ¥Æ|,í@F£&oŽ×ÓòØ=f·Áaö}Ë*ü†¿…õùÁh1…ö#ÿ0ƒkb0»›}¯¼=‚\úùË8·„Š,6š[*©&½ ÄËÕ5¬í[«…viAŽ$öè —J}–ë °yò”úë·î}¸Ùu`ZpïµÝ¯µ[" Õš×Tlpé!× î㻥õÙgÕ8ÅŠ½Qg-½F–‹œÇä³^Ý\9‹û†N¼Øêi#Üp¤0Vùâ½`«¬‚Âß6ü ÿ.ƒó³7¡[ÿDFGu³¹ Áwb9õS¤u«åO[’Ö›@Hp¼xÍm½ßzå@š„ÝÚ¦÷‘„ïãgp¤ÛAäõœËþtüjM½ú.—£c·ÆK­‘ewÌÞº¦}Íë 7ÄÏJîÍÏšÀN‹;ù'[žDC’4…õÓ–1o|õÔ Qƒ7/J+þª`ÿÚ"§î>~÷üpsÊ÷Їk?K‚³[O1™Ü-gµ†Ê1òÛä辺õà”ÎVcåÇ)ÝKù†W«Çì_˜‹WZÖBŒyùú·R!£Ìš“ºáïˆb_*Ì/V®Ò£­¯þªK½Ø«eù•±@qÞ=gÜðíHûóìäÁvi/Ï!h'±x6Ý‚ݽÇ]½¦ÇÕoŽQI¼°…lkPÿ7÷þ¼ºu`÷=‹©Ë§Ò7jª xÀ7|Ü{H¹L¹/ljg[ÛAõ(7o}3€jWä%Xnxð»s’¯ï>³8XJ33ŒºŽ<#ÙvÉz`@öΕ]»áZ‘7I〗*r¦¥rFsIǹ×;æ†S¤¦’ØÛ”iÏÉM«°£™\¹]äÀÜ™1¾ÒƹÌÙJM%Àõx“ôpí%·ÈíQ2Ö¿’7ýn%~P×"Þ=²u:£ãDíÞìeö#ròºˆo¸´HP{&Ú"™`Íu—çø>œ¼­{2ê©gÔ¢z†k•ÀôË$?´,»|Xz„ݳòc¯nllüÈLF½«ÑK«–¼g· i_,»JžÞ²»'ä"¯Y¾kb t\È;æ¼¢6`®õßiæuvC€~Z‹w#Î'à‘ÄÅ ìLZž4…V~ΟIœÏ¥î=U¢‚W"å¢-p;’3ãLÅ 'œµƒÚUvG°IË xv*îîgÒò øJPoý|uÎ9R5¼r¢Kïí€É´*+¹Ïn¶!`á#r3/Ñø+ÅÞIêÒÐBÉx÷?½HùŸ‰¸p‹”•êeä,ë ž§ºsCËï•ä^á3la2HÕM˜æ|{úûŒõÏ.  ÿ\#¼_=Ü¢@øÙº[¿àãÍõÜÛR§dTûVÀĪì…ÔšÿÓ¨»ÕäQ†‘ÝUaÇ‚.£±ÿôÉ[TÝ™±eÁ«ŽsÕZ1Ézô"¤vo«Q¢’w€™\ù\€½S.gøå‘ bñâ· W ²´e^œ…ÜQt8(Å[ƒõ´<æìå²DÏ%2Ç ‰|êR…3Å{ª”Š·Â˜–=ƒœ™õ­£g7â;r“ÞŽWÿ&d)­·ãWÝÁ’Ý"žiÙïDã7/¸Žè¾/¡Õ$¾§lù¶·õ‚SŒY3v)]ô<Üäa@}MÉ}ö ת!7†vÅÄËr3âÿèÙg±€$2/ë%¡&KZ£˜g#™7q¯~Gf`MÒ&Gø«­¯Ð¢9~%‡„_s³VÆ›EÜÇZóí7¡Ì^QõÂþ סØõÒ9\+Q“*ÿþOÝä-|F•O œ’¥ºp³ŒLPqÄÛ3 ŽÂ~f·ŒVöv>ãU~Ö<Ï”R€eËÞâl”vŽ9¹Œ3ü#vœt¸nn½/¸PHŠ»ÒÕ„¿¬FVG^QãÌîí,Æ6gDÅæêí,&ßúñDûÛQ—[Z?œ‘¬sENH.3ÀèÓÍÍ™Ý4gÔE%Gèë.ÝpÎ5òyU¤/z[^}æFö+QoШ§¹/xÛÏ|9€–jR±E€á^ñD½|²ØspSnrîŠ\³»{u#C' Ê•wý½/xîÀ^:Éþ™õÚûcÿ™œgü}J³ø€#щ–OYöÞIZ†1©»Iã›q4)…½é×L‰ôòlµ.¸‘–;rl­î«³µ˜¥Ñat˜Í*äêÍ'Õ×, 6Y+wå2teä'_½ ©Ý½oþqu Cê¦ÜŒêËÈÈ%µv†bDT-ó?Ä÷P«£^*óºœêºµËV÷=ª¥Õ‘ƒ;I'3: ¨©m?ï ŽhÇïsëD¬“;Mæ%5D&(YDznÕf@’ËâÆF&ÞÝsŒ¸Kú(Éõ›é|ŸlèZØÝ¾¦‘îFfÊv?Ïéã†o )3çÜWÿ®©áOj˯N I÷ò/À³û¥ÿA´t£QN|¸zsZén8JÌ]lt„¿<¡»,rj4ùpWg¸ÇÜÝ{œ”ÄUèò+õ_„fÿE˺GÒã(8îf…Ïu¨€uö”ðoøˆ‡"ƒ@ÇÑí£ë 6Ý¥Ô° |;T~¹pþÒ]âk¹Z~ÕþÛ@5R Ðósþ}M{~Üc÷ïÑO&¾Gî½á¯{¼ –{œ´ð”(Òõ[ä¯LÒÔ‹÷ì[CÑv‰É/+Ñ·+’ƒªä¾!‹ÙÀ­$¯˜š·ìï_5_ò€Ë¯¦ÄIG*;TÅ»È]+ïh%hÞ{´þQõJ5»W¿Í—Cé䋚Öé7WAîyâYÇ ø\a*´ÉÞvMþÚá»çÝpÜÍ–¥áß³¬å¶Í2eÿ]¢>Ž_92Çù¡bNùæ6#cHõÒý§ä]ÞÝ\¤€†#÷À6á/£šè³Ä«“@ _°ð58<ø–DÞ²U'›²¶åI³vAsïQþ—cÝûêsªÒQÆÏ['ÑjÑ+{d+ƒ«¸A×Ígn U¿“œá[™ÍQÄ"2àí0†ü3Ï„K‹eD\†L¦ÿÑB­àÚE? œ« Oe5¸v‰Äꥧ´Òi²1 ÈH0{ÍK7\q§Ëa1¸’F´q]®2kôÈ·­:P{„#ƒK'ï0ćjÞà2’wŒŒP®~Ù5Ê3–vU¤?EÞÌfÉÄ™¶ôúoøk¢üIKÍÖFª.‰Ü¼†Á ý„Ñepů®Z­+×$³Q‰y2÷ ÕÃè Àƒtžš.ò¿”MuåÕ9eï:ᜑu…'#aðïö;í5`Úìð ù§X¶Š`‹É#•GV2ßÚì ö{[·Xƒ2Ú©â`7K;柳›o4–6» )“7Og²Õï#¸^2Ù |²ˆ¼I*&/&åeGƒGîñJ+ŽÅâ1NÙøÌ¨o_J÷¶ã3ƒsä«äZÊÚ¦0}Ñ/ƒÔ¬%Þl|fª€ïç¶Š<ƒÆûEÝÕUv©¦Sð‡–0`òŽH78¶Nn6m«#.*m-‘e=˜*½51ñ,5y­äÙ¸Ñh?¸ò|7<:^Ïn IBÜ 7LSó«D.4ìñ ®€Ö÷²Ô ,®©z£ƒúxñÞè0®02‡'·IÏàœ¡Rs¯GøKHuœ^D6UïR‘蛩RëeÚ%¹y˜­ª7_­ÊëF)xÕeà‘½UÀLîqÞÔ·[É?™?Mþ—´¯¶TÙ€f¦~@5J²'þ`ðàINõr,Yf¯Ér#ÕjnxÑÊÿ91?"gÜn PÛ\Qƒ £l»yL#ñ—ÖRo;nš\β”3'WŸåX ½4yÛX®>¼¬í¦ê-Jzҽ̨þšBçü‹W·V«ûí]b#ŸøhTR@YÈê}ÞnGGPKâÖÚ® ϼQæ]ôÔüv¿¥\qçe7G€YÆ Ø>mY»±À›÷%V έx™*#ÈX7sk¸ îf-=¿7ø‹·hpänmvPáØÀ:»óGø+ü£G«f6®>é½±ºº™çSAP‡GœðÒ"ÔØJéÁ îÖ 2²œÄ½ºñ-BTÿK#æÁp7 u;¿ëÆC”FJèÕ\ö×KrQ=œ”L‰¸¤÷Óˆ…úÚŸ?e¯Ç F§¯ÃÍÃ6!²rfõ^Ý„w 5GW­kàM&®N€È”Éë482 RVN“·/¨ 'ê©0\kˆg£åZ“hɸrN~€ ³Œød•“¢Ièç„´2Ýh—ŒÐ_@*oL¸\KÈÆ™.oÞ´Þ¼±»„~tõyVÍx‹ }”¸é (j]ô(˜×¢ÿ\‚õc92ÕuuÑÄÕs»Aö³ ¾}“àµÇ„PËÐÅpZ”TÉÄÕ¹¢\©WÞ3¸ñ¸µýËÝ}%ï‘Ñà‘C¹$/2¸f$'U<ömYôz5]/Þt);VÏè¬Ú½‹Ì…/eTønõrýȲ¶O}Rp –êxiÝpÕP¶ŸÇjüœ&¶¾¼ý¼o8`q;ç3\ Þ_]3È–O^Á-ÔOu^ÔcJë®Æå›k¼_ Oø,€AѽxëõôŸ-ôÖÐ]}·@}Ã_gó"ÕjúI¡ä¯×t@7#I¿–ä`7ÛÝ#cÓ-*ÞÁüðçzQ@üô·œQNô|·×z@ô=ç13× óÜ®"ýd¹1R;‡NÚrÕ×–Fk"kÚ Τä~E›‹¹ú¸Gúä¾ÀMF pzÉÕ3¸P¥³î5½MøF…©}ÖÏ;sP¥G8‰‰ÇúY¢e¶,7pÝÕ¶íÉú÷ÿñÿùóoüýo„ À’ÞÔt+c>à -,%¨û€=ÁxZƒ—´F%¸#=à $Tw9¢ \ÐÍC¸'¼8LD=àŠÞü‹_C[8p4ME"7ÿ"ÁC®2€Cs®'}÷zó=;d=<à ®Lî=áèæ_qêöü[Jð|ÿ„£«÷È«Ë)ªà—˜x¾MèŸðïG,ž#o>µö”³†àà»ç׆Ôvpó»ø<áïÏ; ªóh®$ÜÇù€ƒ“GÊ%2häúG¾{E7_Kèê`ÐæÙe·5½•¶ß½:o†Ùļ£Aš°”_ª!8¸yÜuô€µ(ßcžrd“¢Œ®þª@íÖ:"0a‰#› 긒\÷–$ôæÌ÷ï¾íxûì † id¾8æ?„>\ä+ MØïú×ßaSC£ñÓK â—îà°Óîooß<°fˆÜ<£ Ë)2ê·êøƒnžÑÇY¬P£ëøƒ†à`¡fŽìqßF]÷°Á 8è¾}8¤zÊt÷„÷}LË%²I1°LЍ¹ ï^#‘ÕÛMÂn¾…Þ<Ú"9´E¾%'Ùà¡W‡&,‡&,ò)È!xAðÈBýRÊþU'<GÔ{8ºzŽlR‚6h¡ÈR)h¹ÐrdpÇ"‡ãôNHoo5vË}À„F"‚Ë><Øïø„£ZëtV$Üý„£§¡QÌÆ"k Ó„ÔÐŒkhØ|…û³Œ4úI:ͺ낃´¾«Ý˜×^¾tßwé>d—6þ‰m-VïœùöæQl£¡l¡2xóÊ‘3¬Ó‡ñ‡È¨S”-ÔЄU›”*…àßN úp goü!¼Êž6e4tQdÀª%ôê*˜ïZ#3N¿’?\ }wtùæãüCÛ1ßÁ˜õ:o¯^Є-9’¯+^] í?Äàe–Ðqໜz¸ÊÏ4ãŠF†MŒ˜TBÇ‚âù¯|Û”`/-2ß ÊQ—zu€Š‘J(ž/(ž/=R(½î#«Ê˜Õ ¾ûÎÅ}Wìqíq5TP« $˜jhÂÖ¯ôŸÌo‘gGùºïŽ˜òÎèÕqd¯¯tŸ}w ÁÑ|¯¡ùþjäýÇ^Æ®Žš‰JäZKAðÈ„­€¯1þÙ káA Ô*ZmjOMêeHjðHƬ¢Š¥Xá;äù Á¿_Ý<þc¹–%ÜÚw°»Ý&h‚ˆl Hû¦:E64æ›Fâ:DQˆ,ÔßÖöW~eþ!²M mëÕÞÀq µH\×€wfj-tó((m¡3lCt •´^þ–òj¡tC!qO‘7ß=[ê9òìH&½mºw3u}&,¨ñ€3ÈœôÐ×3õ eWp‚ 8Pˆ|÷^Á)²‡H#ÈÐúmɱ‡wpšÀvôO8u]#Ãæù²Á4­q¯@x)DÓ¿‚ð#¯éÄÆKF 9½ˆÛg…Ôœ"¹‹œ¾K*!xiS"ÝÀÛ~ÔåYçs²ë9E*#9Šœ_k(máûr^Ω„®|æ^Tÿl¯N¨—(²ÒæŒmæÀrñ¶ˆý+gH´¾´9þÉÕàïœÈŽÔ4Gžä.rM™\”c‰Ì÷ òu9GRQ•r®yöFÛSdÎM6£—#g™œ;u#7ßч{qÚËŽf\h¹ 9ÉÉœdÊ`—¡Ð&…l/+Õ\ÐÍKÁ Á9G7áeb-ùí±›2ˆk”)R¿BvØ%4l*ºzí‘›GRÔBo¾)CêÂøï— êt_&p–ÉáŒ_•öå»±}uˆk4þÙ ™ ¸z„Ý—”ïÇ"ó™rà Ý2Çöž"p9ÉÉœäŽÊŸ?”¼€Èê›,´ße?P·84㸃a#yÞ‰‚Ï?DÖù·íÚœ°’9rõW~ž'œ"3NfØþñgÙw‰Ôò«¥êïÕ#V@A-‹DBbDY±n$4B”•ñ‡ÐwÙÂñ‡È‰(+ygÿ³ƒ+ºz Áј¯¡«£Cè‹0³ÿîh‡•u Ý|볌€ÌÉøƒà :VÆ"ÃqN²F*bùE™9«¬ŽYÖï¨r¦}ƔԌ¬÷²jdµÑ ïuþ!²Ã*ÓÈš°Š&ì««õÝÂÁ#‹•~¥$ïµ.Ä9ɨ:k¤_füJö»Œ†²F :Ô¶&L8rÔ,¡ ´$‡(+ãW`±*‘üüøX¨K(¦Š¡ã NŠ W:ÇKe)¡7_¼ùР-è V^Ÿlá ¢.-tóö3®„¢ÊÒЛyЊ}ýABptõ——vÝÀ+ò®9rªyÏöÉ5Rƒ¿Y}ñ*w+-R|‹¸î¯ä0Æ"oÑ6ÆB¯î¥Ã- +ÊUÖP®²6o¡›ïèÙ{Á Á¿>Iï[¸"xdµyÑ+nÄ‚£AÛBÙ†ŽBM"iŸ&û®ÜBG!èXÚ¤„àÈ:ü+bÛ¶Ž_U½y˜½ä~·¥ d¸=þYçJ>¼y»Mª5h×zó}ßô‘ĊÜQ¾îEJø§láà4Ñ#íóãW„à‘¢b>l•¬7pBÏN¡WGH žjÞö¡Qçˆëºdpó‘nÜË×Ü| ={Ao¾F«ÈÀã¡W‡¦ÌK¦v»Mô&»:H¸õP~ñ.rlR[K£ùŽÀ÷ÆÖ×yBê:ô6®l;8íç;½ÔuvÁ %`HF)R¢¤È&*Ò#F ì2ô"dì–JJ]½†¾;8ŒŒ?È9cF  Sz‰ŽéÞÑwï%ró€ÑJ9NДAŽr¤20ᣜ#¯.g<ûKãÅÞ|¦Ð³ºzd—¡o%˜{ØäHÙ,M7W Áºz<»Ç‚¬‚£Q!Ò7iäïÍ—¹zE®…Þ< ÒN;fæ‹!‰B¬“Ü?]½£ Z.2Z.(’î3ÝëœCpðê(¸F„f¶êë8íUL‚ÑméâEè¸D€ŽKš°Rb}b}8ŽâO8zöH ›¨‚Јjd­£†F] ð.ˆÐ”¡È9Ž8!§ØD!8#xäÍ3 JçÐÍ¿š:gXÈÕ…ñ«½n!}Ó6¶')b ¢FÑt¿ÚçmˆC;,‹ xdÆ!Sâ‰.è±RˆõA\㇦ ’'n¡AÛШë)òìÂ# µ '¡ ‰´8óxƒV"Ò„ÌÉI"ÉFAÏ®!8¨ÃÒ‹°ÝãPõü!2l i¡7ßÑÕ#J„Ô6(¤¶A‚­FZè¥Éñ<²ÎkÚ·Û†ŽB/·úÙZx‡ààÕi$_G òuôVÞmÐ Èã¡gGSF…#WGÛ„J ¥tü DÔª…RE£NCo¾ x ÚŠž½jäÕUôÝ#Ú¼¤è ¦‘*0)šïÚk¾O°SIò?•„\Ç¿˜ñW;Çž Á#[$¢.Œ?DžýÛ-û^m^*Ûm¢0ºùH¿Ìø8lj¬óßž ÿ<²\ ­ñ‡ÐÕÑQ¨”6(,,%tóÝ|dÊÞéøúCdµ) „M!ÖtŽ{ñ.ö7ßÑ›¥>d £®¦HL[Qê#¤4BˆõA!ÖÇø• xèêh‡­*2Uë|åØÕÁ)²Fäï¨ òµÕЇ&iTµ„àoÚù‡È)òÅ9™µÈñ‡Ð«+èÙCû{­hÐÖH­6Ô/i K;fGÉÆÚ#iÞ–@–¸¥@ã5´Ã¶ˆœ55Ú÷R#ÁÁ³·¯©øoáŒà¡Sä›Zb7J>4´Ë¼øÛ°°Aij-Àâ~¹¹ü“Ë„÷È VP %:J>ìø;øžG=þ™ïý¥0Ó'<Âú DéÅçØß<°°GjƯÀ›ïTCWßwëPJ_Q×_»×nÐ"Öu‰”2;°h¡i„:Ê÷zóè×k軣À¬·Ð‡k`“ê-4ãP~¾G4¨ƒ3N)«ñ«}£¿X»£#µ N݃ñ« à9EàÝ|]=ïÀü¶dÚ¾ºï¨²÷ ç¹:àœŒ?(èãWÁ[èêб™"pAß=’·á,¶vÆxÝ·]Œ?h^À°©i F¦Hœ"‚“ŒL‘Æ".šçØ&8'Aðº:°›¹q&p =;§îÌ¡gÿž2½Mx$ñÂYÁwÏ¡1Ÿu”Ž?„ž½$/¡Ú*9Gúe¹ñ7e?eÞÔžðÐ”É ìq9RXáŒìrßœÚÂÁB{ š terˆs”Áçw¦ØùüCÁÁj2EbÊȆ7’·a rŒýáŸpàRþòTÚ±÷_VÁ—jõüC\¨¬pH&… ´ó‹Ë²uІMhµ!à™ÈTB7^ƾ^]ÞÃÁ.C‘´#•~;:•-={K°9:ñ[ee ï 4¢Ãi#’÷û!•fÀâà,ÔÉ1ƒö:f Èã0âÛ0G ©ãWà»s¤¡•VÆ"A)ƒR&s($f4ê8´Ã~»ý}u1.´ÇI 4ï_…ZRd¥4ê$’öaº,zvBWÔ"Y€Ì)K(¦•Mvgþ!2lDÀQH"Dh@„f‰4q_ ‚‡^]A®†^`ûŒ?„¾;¨pH*„ôM°DxÔ, 8þyuo ™»ÐHš—¤yÇbWë¼FúaYA5pü!2ß……J‘)£(o£a"VàÄÍ©²¢C¨F´÷Y½y ˆë²¢SäÎxfR!¬‘zkE7QÏcEV#õ8.(ñRBc¾{Y.ŠÚøºzh“*ḣ3ãWÜ|„ñˆñ2þ™qßJ#¯a¼ptr·¿«Mˆ²2~¦LÈÝfü Úá˜q~Ðr·¡'Ø"K„’Ê¥ï»29ÄxáÒAö FZƯöu®9²XUP@çJ!ø×´þGÅà2îø• «GÒ>•Á9®†&l­\#­ãW`Ì׈#®¡ÜEEÅ…©þ32ˆáá˜_1‚G–‹ŠŠ 5”ê¬À–k(ùÐ@õŸß &{8J[¨¸ÐЄ}ɤì¯Úiy§Ÿ²unYë^*+ÓvC2)ãWèÙ#2æãWô…¾á‘åɤp ͸—˜ŠUB[¤–è‡àVZ¤vü Ä6­†Þ|E¯.Ò}Ï­¡)šïˆíÃ-Ó"‹î›QîŒàƒƒ×Cõ¸ŽjÐ=ÒBÎX¨smR]Á.Ó#ÆãW ÁCW/ oÓC™“o1•¿ðˆè"wUöúîäi{(,|3^þÌwI‘·$ÀdÀǯöçw QVƯÁ{äê¤ÛtŸ$ ݼ×€Òˆ ¡’ñ<{ÝwI5/àê-Gž¨&Ê7!cë>/© øp‘„›¼\h žCƒ±>Æ«d@”’L‘A›i¯ª$!©ÉLþÒŸß:$2þ ‘gZ’#3AZ¢mHFc>dÑ"˜ßIn…ZrG¯®G– Íûã‘›G&)2Ie¡HÊküj¿EŽ?D-ºŒP„‚.o“2xèæAÊK(bè,H.cü!ôæAl#Q€!±¼”,þi;xC£îÅŒßyêèÙ#zB é$Zç©ïã:á=O^ª6l8ÚiǯÀ åHedüj ‡fª¿KHïBXÀ|çÈxü ¬u¬¡›iÞñ‡È‹ä2äÛ¿Àì¡p$é4~…^]DöP¸íÛçÇBÃí2Üâ{ãW{Ñ‘ˆò€(&ŠDЉ"€¢&ɉÐÞ¦D„Bp´ËH„†=~bZ‰”6ùŒŒ?hÞÁ³Gªÿ" S:þ !8Ø"¥…† à”Ž? bDÐ6¡¡S¤‚~XÑH?¬(´¡ ¸(í+b¢‘´(pöØMŠ‚V#ÑИ)NØiB#ºF¢è8 ¡ÐH’˜h$Ñ*È(D^ {8°ædJÕßECÛ„ÂŒ¼+¶q¢³ŒFú¤ÆbƒÞ|PÐǯÀbU"Œ—±¢«—ˆ™jàê¡)S]#£®ˆ*‹Db›‚¦L‰ÈÛJAY£Q“Hbã¡7HbRjèêÁC»ÌKbÒq%dÕ1~VÚÒCWï„à¡W$#Æ"¶׃ñ‡ÈÕ‘æÃøCèêh“ª‘î\=àò*"ÿ#[8ºz)‘«0eZ„š(­"x HBIC±Më)òìh¥ ‰6HO`±ê¡êr»郖ŽVÚZi;0·•áÓŽ_×%’!ïhÌ÷ˆSçø•¼*ó¡7Æ|zÙ{&Ž?Ú.¤ãé›þê 5Eò6š×H_Ò»›×”öß]S¤YHuj¢ÐÍ8vØñ+Ap\]ÐÕ#nãWþ½ÈŽ^] =;hîÓT)òìußz )Òµ¡©¡7ß4ró y_S$SªïZñŸàDw}õox”TÍ#0ÍhІʸãW}ÿæshÌgÐø !ÃÍ@§tü¡¼’׸î/šCS&ƒŠ˜æH¦T¿‹ÈËÕ{äÙ úpƒWÍ@jü¡Fà í£/'‰Ý6¡¹í“š[èê]¼·È«ë`± ußë»Éž ™2oc‡yóÉÓ*²lˆ â²=Ç)qèæ¿NIê¸úv|(®)W°\P$4R*èæ#í´J SªT9róºuh—¡H׆(¨i¨\pôÕݽïœÁÍ3ò´ÊÔÀÕCcžA¦tü!tuöQޤ:•Ë^çDCU`eëÛõ`ûæ+„‡nÈÛŽ?D"+î{Ž™†\tW숼:äz I¼¨[áñ‰ÀiŸîÓPX'T"<êñ«ºu;3† üuš¨á×_ØF"õ8MàÍGäUëCCp;¬”·nÎŽ³P»¢v•ˆÎ‰ ³Vi¡W±*¡]ÙUhÈ®BmRiîSM‰¬vuò?…mR!ËUAðH뢶j„é¤ ¤TC{œp’Òúp@hü¡D>`}h¨„­¨…\C-äªhÊh ]½£)mŒ_¡W×#+mã_ŽD[8˜q%E–‹’Ôÿ®͸é‡û(Èœ„ØÇû½· ï¡WX^ã‘«·×)r&Ø[(õÑ€:®¾;Ûi /Ù `ï?„ž͸y@:E6‰¤}¾;Ðï1ß"ê¸Ú€…º†,ƯÁC7_¸ù6ußì3þÀ!8ȘµÚ"7ß@âåÛob¿Ë4 1þÙeZÏûg—ƒØ¦Gx•ŠÆ"9²lÐPÿ»v 1ÂùHE¬c }õ¿o¿{püMí6ÚC±®èÕE4´¿4nx€º ½‚¥²×yu Á_tÝÁÁ&UḂòf>ÁG¡’À˜/)BŒ§ÀýAlü¡—‹ñ«®Î¹:+xöEmü Ý|$²*ˆùPR$²*oæƒÝ|¤/rüjw‘ÿËÿëÿ÷ÿü¿ýƯÿÿïå/ÿ×Äåk4äßdŒ×¯¾R…\w¿ú^þV}ýj„ü_/±l~õ=Èsj»_µïz‹n~Õ¾k2_¿êümIÙß¿Êc}½‰í¯¾óD¹î~õò³Ù¼ûœ¿‹Œ¬»_}Ó¬èúêÿ÷ÿçÿíÿøÿþÿçÿÓÿ0ÕvØÖ\DyLP-1.10.4/Data/Netlib/ship08s.mps.gz0000644000175200017520000010326610430174061015603 0ustar coincoin‹ÙK®9ship08s.mps¥½ï®kOnú=@Þá¼@„Õͽ>ÎÍ5œ±Œß¼ÿ“Ü¥½÷Hlý¨*1`Ì©N©×"«»I6û_ÿö/ÿôëñŸÿÿóëßÿëùû¿ý×ÿÿõ¯¿~ý÷û÷ÿ¸þÛ?ÿúõ÷úçùŸÿzý÷ÿõýßÿö¿ÿ÷ûÏ¿?þ÷ûÿÇÿþýýclÍë¯zü%Ûgº}fÛ_¾ýÛ_+ÿ¦/¾ç_sûKó/þÇ/ûùëç—ýü%Ûgº}fÛ_¾ýÛ_+?•ü²Ÿ¿æö—~ÿõÿÛõ»þñÍŸ¿æö—lí8Ûþòí¯ØþZ鯹ñÍon|sã›ßÜøæÆ77>Ùødã“O6>Ùødã“O6>ÝøtãÓO7>ÝøtãÓO7>Ûølã³Ï6>Ûølã³Ï6>ßø|ãóÏ7>ßø|ãóÏ7¾Øøbã‹/6¾Øøbã‹/6¾µñ­om|kã[ßÚøÖÆ·¾ø.¿ýþö¿~ÜïñÇÌHþCó–ÿðüGä?6ž3ý1ŽüGþ#ÿ‚‘ÁÈ¿`ä_0ò/ùŒü Fþ3ÿ‚™ÁÌ¿`æ_0ó/˜ùÌü fþ3ÿ‚™ä_ ùHþ’ä_ ùHþ’ä_ ùhþšæ_ ùhþšæ_ ùhþšå_`ùXþ–å_`ùXþ–å_`ùxþžç_àùxþžç_àùxþžAä_ùDþ‘Aä_ùDþ‘Aä_ù¬ü Vþ+ÿ‚•ÁÊ¿`å_°Ò/˜Y]fV—™Õefu™Y]æ±ýk‘ÿXù4ž™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™Õefu™Y]fV—™ÕE²ºHVÉê"Y]$«‹Û¿ù•ÿH㑬.’ÕE²ºHVÉê"Y]$«‹du‘¬.’ÕE²ºHVÉê"Y]$«‹du‘¬.’ÕE²ºHVÉê"Y]$«‹du‘¬.’ÕE²ºHVÉê"Y]$«‹du‘¬.’ÕE²ºHVÉê"Y]$«‹du‘¬.’ÕE²ºHVÉê"Y]$«‹du‘¬.’ÕE²ºHVÉê"Y]$«‹du‘¬.’ÕE²ºHVÉê"Y]$«‹du‘¬.’ÕE²ºHVÉê"Y]$«‹du‘¬.’ÕE²ºHVÉê¢Y]4«‹fuѬ.šÕEí_‹üÇʤñhVÍê¢Y]4«‹fuѬ.šÕE³ºhVÍê¢Y]4«‹fuѬ.šÕE³ºhVÍê¢Y]4«‹fuѬ.šÕE³ºhVÍê¢Y]4«‹fuѬ.šÕE³ºhVÍê¢Y]4«‹fuѬ.šÕE³ºhVÍê¢Y]4«‹fuѬ.šÕE³ºhVÍê¢Y]4«‹fuѬ.šÕE³ºhVÍê¢Y]4«‹fuѬ.šÕE³ºhVÍê¢Y]4«‹fuѬ.šÕE³ºhVÍê¢Y]4«‹fu±¬.–ÕŲºXVËêbÇö¯Eþcå?Òx,«‹eu±¬.–ÕŲºXVËêbY],«‹eu±¬.–ÕŲºXVËêbY],«‹eu±¬.–ÕŲºXVËêbY],«‹eu±¬.–ÕŲºXVËêbY],«‹eu±¬.–ÕŲºXVËêbY],«‹eu±¬.–ÕŲºXVËêbY],«‹eu±¬.–ÕŲºXVËêbY],«‹eu±¬.–ÕŲºXVËêbY],«‹eu±¬.–ÕŲºXVËêbY],«‹eu±¬.–ÕŲºxVÏêâY]<«‹guñcû×"ÿ±òi<žÕųºxVÏêâY]<«‹guñ¬.žÕųºxVÏêâY]<«‹guñ¬.žÕųºxVÏêâY]<«‹guñ¬.žÕųºxVÏêâY]<«‹guñ¬.žÕųºxVÏêâY]<«‹guñ¬.žÕųºxVÏêâY]<«‹guñ¬.žÕųºxVÏêâY]<«‹guñ¬.žÕųºxVÏêâY]<«‹guñ¬.žÕųºxVÏêâY]<«‹guñ¬.žÕųºxVÏêâY]"«Kdu‰¬.‘Õ%²ºÄ±ýk‘ÿXù4žÈêY]"«Kdu‰¬.‘Õ%²ºDV—ÈêY]"«Kdu‰¬.‘Õ%²ºDV—ÈêY]"«Kdu‰¬.‘Õ%²ºDV—ÈêY]"«Kdu‰¬.‘Õ%²ºDV—ÈêY]"«Kdu‰¬.‘Õ%²ºDV—ÈêY]"«Kdu‰¬.‘Õ%²ºDV—ÈêY]"«Kdu‰¬.‘Õ%²ºDV—ÈêY]"«Kdu‰¬.‘Õ%²ºDV—ÈêY]"«Kdu‰¬.‘Õ%²ºDV—ÈêY]"«Kdu‰¬.+«ËÊê²²º¬¬.+«Ë:¶-ò+ÿ‘Ƴ²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²²º¬¬.+«ËÊê²îêòßÿíýŸù×{™ßõŸÿý÷úç{åËwÁ߯ü½žòí×?ªíþñ¿ÞîIåïW»Á¿+í^¿õëYØ¿~ë׳2.ý°ÿ6n¯ðŸúí÷¿|kVCôµª!Žkšü²· þ:ÄïoCDð×oýzã!ÎG¢”o1fsˆògC6DC”G& ÑÊ·hÖ¢ýÙ Ñàíð|?ÄYê8½â%Ûoœ¥¡~}ë9ÄÙ¿~ëi¨óíçÓP'bi¨"¥/Ê\ç׌µÁ_‡øý­bˆþú­§¡¢!> ±4Ô¹¤|‹c~nð¿¼Å¯oUoÀ_¿õ4T4ć¡Â!Fi¨VªŒïˆßÿË¿¾U À_¿õëY  †=ûû!j=/ú9Zr£Õ¼ø*7Ú¿~ë9/êÛ!ês^T4Äz^ô³–›ñoØà•›û·ª!øë·žrƒ†ø8D-†è1µ\ݸ|×Hnð¿¬n¾¾U Á_¿õëY}†¨ä:b=/k¾Eû³·hì-âCnཔ]Í!úŸ ÑÙÑi4ÄUªŽRn¦œóå7®ÂP¿¾U*€¿~ë׳Ì q=¢õÿí?ÿþf§q­ß¾Ö¨ß§gÒr›‰íÿ>9óú­_Ïã=øë·ØNã‡;ïoUŠêb£â¼}ÇÑ7ø_†øõ­jˆþú-¶ÓxÀáNãû[R¿EmQþlˆÂ†(pˆl§ñý-+ßâ´æíφhlˆ‡Èv÷oÕ; ‹ï\1Äï°Í/†x}ë9ÄÙ¿~‹í4p¸ÓøþVi¨Qñ>ü¿Àÿ2įoUCð×o±Æwßߪ Õ–Ö¾8nß¹¨ þ—!~}«"€¿~‹í4p¸ÓøþVµÓ0y÷ç_àÕ[œïÞâ;øë·ØNã‡;û·êƵ™é)ª–óâ‹Ühþú-¶ÓxÀáNãû[µÜ¬x3ÄïÒ/†x}«â[øë·ØNã‡;ïoU;5Æxg¨úxe¨Évúwð×o±Æwßß*å&æh¾Eû³·hì-"Ûi|«Úi˜Ò¢ÿÙ ÑáÉNãßÿÇ}‘WÉL¹…<~bøÏ)Ù_ûOù…WÈ_p©ØÇµŸþd ÿ9–û{)µsú-f-v¼»&»•ì¶n’ž¼aøÏÁãؽ|ò7Ñ'»cøÏ™ÔØWÉnv[išYþsüòör_fïY®Þüð‚$³Odó»^&“žÍOjóÙ|Á~Íî·cõl~R›ŸÈæ öuÄÍÏžÍOjóÙ|õäǼ³gó“ÚüD6_YÝõä×Ù³ùIm~"›/ö?óþÞ­góBm^Ð,#Üã&†“YFÍìz·Cz6/ÔæÙ|Á.Çy3ïÙ¼P›dóÕ¾÷×¹n£góBm^ÍWVwí¹OëÙ¼P›dóÅ"|¬³­óJm®¬ vÓu›Ñ³y¥6¯h–ÑÊßu›aÃÉ,£Èæ vѸÅèÙ¼R›WdóʵÎ1œØ¼"›/“Lr›³góJm^‘ÍW»²yêMz6oÔæ Ù¼Usܼ©ölިͲyãJ+NlÞÐ,S±ãæÖ›eŒÎ2†l¾b¿VÔÝõ¼Q›ìQ²_js¤'þÓEæöU±Ïó{seeÔã y\$˜×Úæ=sêqŽØ«ˆèœÛªr`8aäïQÙü5Ç­ž¿õ÷@þÕÖn£éïAý=¿G=°›7W•Aý=Ð [±ëµ¶iΰAgØ@jS>y¿Íæ Tm©M5v»l~õÔ&¨ÚR›jì¾ÚkÚ jÈ߫ʀ·S{þ¾¨¿/äï«ÚI·Õœßõ÷…ü}UQ#Ù¢‚áÄßò÷U­*ÏÛlúû¢þ¾¿Wc¿¶q²zþ¾¨¿/äïû:6«s 'þ¾ÇUOþÛ’žÇ-êq yÜYYÝqÓÙó¸“zÜ ØÇÁ­n`8f¿ã­ÃVì#æ¶—™Žý±KÅ~ ~Üzóû“]>`׊]Îq“Ñò÷'»~Àn»ŽsÛM†cGì^ZZw~°Û'ï}•O^®]do†}°¯OÞûUnbØÍz3ìÔãPnbT¹ñk/söÔfÐÜÄ@QâQEÌLo±zì4b6PܦbŸ‡ncw 'V‡"'£ÚÃʱÅ놓±£ÈIÅ>B6µ™N”EN*öi¶íßÉҢÈIÅn×.2¯*ÉÒRÚ‚]åZ]ÌžÒUZ·)ŸüoØ<Û öUŽýð›õò°ƒFNûÎWÉÇ9ò¸ª¸CŽk’ëyœSsäqUÔH㦽,ð“]>`׊]ÆÜVÔŠáÄãyœÿQvàÉn°{iu:oqö<ΩÇ9ò¸ê½Oi¯mœzŠŽ2v¡7ëE 9e¬òÜl~a8;Š×j{Ï¿{Ïæéþ} ]ä8«Lèq“¦ÖÑ]ä8‘Öì¡kó÷‰áDëN¤ugåïÖ­xy²ËìZ±¿®¬ÃÉ{?‘Ö¼ÆÌ0œh݉´®zòáÝLèƒÝ>yï«|òGl™‘…áÄßQäd\i†c›(rR±‡êM{ÙÿI#'ˆ]*öתNÁpìqˆ]+öq±hyܤ‘ÄnåØGÜF¯ÆlÒÈ b_åØ_ê*†c›GìcŽj/sv÷°“Æ.æ@6_±ã6z+êIk‰»”ìËoC{6Ok‰»Vì×$wM±=›§µÄˆÝJv;Ï[/Z8i-1b_±/ '6Ÿü¬vRºeÃÉ“Gõ´SªÌÈìÖNZ[8Q…ÛükÄl˜_[Ø^¬rÒxÝDn³Š\ìÚ[UN³š(j4W:)†“'v‘³ÊAŸsÓ:Çp¼²š( <¯îNÞ;ÊEVì÷£M£—‹œ4‰Øuž¼ÞF1œ¼w´›271nÒS¡kAó»”çeŽÛÙÛ¿ ß)­Ìj'u½÷žÇ UZA¹ ©jÈï+«žÍ ­`TÁ.eµŠßZZ'´‚±K9öst«yŸìò»VìºlÛE*†“÷Žêç+v_±Åë Ã±Ú öUŽ}\3l¯¶Ph;bRdÄ®ýÑ-zó»Ðù]Ðü^±Ç­Òib8±yTÁ.úyÁpbóŠl¾ÊEÎsSZÅpbó¨~¾|ïëèž“Z?ØW9ök'彬Рvüä«L¨ÌÛÙÛI Í ÊÇIµªãzñ­uÐ쀠ø¼TñùãØêi†GÕ¼»ÄܲÿÉ¿£jÞrì/Ù@Ápâï(;PŽý7Öu´š±[9ö~uŸÐj^Äîû¼Öóê=›§{ľJöЛ÷¢B³Bˆ}Hµ—¹Ï2Í–î¤ÕÓJ¹³ÛÙ;)´ž±K9öCn¹Ý®`8ñ8´«ØE¬{ú^h>±[É~ýèåe„îa»Wì×Âîf½S™Bëi{”Vw=ù|J+0×Ï#öU²¿ô=XNüåa嬿w·æ.’æa头¬§=o«—“Rš“R”“ÒƒŸŸŽÕ±K9ö‹½¹žWš“B쪌˜b8VÄnZÖÓÛ)-Ãp¬6ˆÝË'߯xQZÍ‹ØW9ökm“Oa/ ÇþŽÇ^å&®Yî¼õÆNûœ(ªæÕÉOß 'þŽ"f*¼òa`8aG³Š]åØVÉڠˆYÅ~-+· vÁp¢6(bV±Ëœ7ïU´*˜!v«ØçÛNÊ0œ¨ ê8Q>ùßð8Úq±G9vŸ[ä$0¯mû*Ùû'‘•F ñ“¯:œq;z«J¥õóŠê絊۬¸i/v¡´~^Qý|Å®±gB'†µAõóåØ/víLTZ?ØUŸÂV 'jƒêçµqvÀ0œ¨ Š×•ìÇÚª}Éͣ¾%ûÐmUNÔUï—ï½NJiõ>bêÔQJiõ¾¢êý’ýÒ:ëÕ×)­ÞGìR²¿¬çÉ¿£êýŠ]/¥mžDVZù€ØM½¾?)ï  Ã‰¿£º‹òɯcËA;†GÕûõ“_[÷Âpâq(; ÁsÉǡH©6¢…à ;ŠÛhUÉlkëw10œ°£*îŠ}¸m1jÃpbó(jd_Ó Çc7TsbU‡X[·á„U6ZÙ§ToGOmŒV6"ö/•øk½Íܺe 'cû÷ieô@fôjNžìóv)Ù×¹å¤Ãñ‡Øµb;ºY`£µFˆÝJö96­3 'V‡:…VìóÚMD/ÿn´S(b&¼ïÁÀpbó(jT±û)Ý}œÑ¨b—rì¦Ý¨‘Ѩb׊]õìöæ55BìV±Ïãèö)55BìÞ±:Çp¼®CìQ±;·³áx‡ØWùÞ_Nm, 'þŽj̬ìº0¶N#É¿£¨‘Ïà 'ì(jT±Û5¿^×£Q#Ä.õØ}«- 'jƒ¢F%û<¶ªÅp¢6(jT±¿žÆ5 'jƒ¢Fû/ÞìŠl4j„Ø£û½v/jd4j„ØWç½/ 'jƒ¢FVF¦53bF£F†bæ¼ÚÇ0œXÚ¿[Ué´t‹ 'cG5fûõ·+†ádì(z`‹[ÝÀp2vTgU±¿öÞŸNtÕYY£ÖH0œè<ª³*ÙC¶³ŠáDçQUÅþÚŸÖ0œXª³*ÇÞïŠl´Î ±G9öÐÍãÉΣ:«Š}†o3ìÂp¢ó(^geßívQ3¯3Ôï¢b7[O§‰áÄßQ¿‹rì×nB›þNû] v-Ù_jJÉ¿£H©5ºm†Gý.*ö×*/Çpâï'ò÷jìC·|\`8ñwÔm£|ïý»6ŒvÛ@ìÃ?ZÛ8Q;ªl¬Ø_Ï¿O ÇþŽØ¥b—cm½>ñ¿#v-ÙõèFœV6"vó²¶0n£)uZوؽ»Í-;àŽý±Giu/½:ñ¿#öUŽýÚH5»ë8­«DìÃ˳³Û‡Üi”ØQ¬²bÿ|œÓX%bÿz_pãƒÓˆ™£S™»ÝgØ^„Üé©LÄ.åØU6 'Z‡ÎVìâ¾íßÉ֡S™Þ¸ÙÇ0œXêŽ[Žý¥‹šc8Ñ:t&´ûŒyë­.œž Å6_V:é1›NlE‰½¬9™ÝÞ¼NkU:yã¶‹‰á„ õõG}œFNÅmüäuVà ;ZÓFuv@ã¼õbVA+õ³ªØíÞm£×“9h?+Ä®%ûKÄL1+-b·ŠÝE¶Ìˆa8VZÄî»NïÖ”=3‚Ø£bëÉKï.­»òäWùÞï7}ôr‘A{y!ö“÷9™Žý=PåCÈå&‚®iU>D™ílàÄp2vTùP²ûêÆ¬‚V> v­Øõ~LªWÑ´ò±[Åî÷*î^.2èn±{ùä_ª¸ÉڠڃŠÝôÜÔfa8ñwhóåªr®[o~º— ´ªŒbUé÷{…z§ïƒ®*­*£ª%–¸ͱÓUe \dDu^F·¸ÍÀp¢uhUe÷<ßÎ M 'cGF*v;f÷´NÐN#ˆ]Ë'ÿòÞÉ֡,pÅ~‰ÝqëeÀƒfû*ÙûBƒöú@ì#Š½Ìº÷ŸïŨƒæ íe*v]£Û]'èN ±K9v“nŒ:h±kÅêÝ»qƒæ »Uì§­­ÊË0œØ<ÊÖO^t‹”. '6­®ÚAßëi{±‹ ;è@¹ÈUuœ8b;û¯ŽßûB1ê5«]¤nìñ¿/T½¿&?±21?yÄ.ûkï>Ápìïˆ]Kv?·ì¿b8yï¨z¿`ÓŽí|œa8öwľª±¿*íÂpìïˆý õ×Nbóvöî‹\t»Ðz¾bÿeî·Þ·è±Ë¾ª '6ö°åØ]»÷Œ,º‡EìV±_³vÛæé±{ùä_n·q Ç{XlueûÙ½…|Ñ]äz»‹œ×ÿ:ròdŸoÙàw’ùŽ}ã=»Tì÷vVÏýû|kó?ðoù€]+öi‘2àó­ÍÿÀ¿Iôv+Ù¯µÍJOÞ0ü›Ä>`÷òÉ[ÎEη6ÿÿ"±OÞû*Ù#’ÇÍ·³Ìü‹d}òÞ¿<å¯QâH³ùv–ù$™}"›¯ØG¤Šló“ÚüD6_­m®u]¶:ÅpbóÙ|Á~nweb›ŸÔæ'²ùYÝø°RÏFló“ÚüD6_­ç¯]ä¡=›ŸÔæ'²y)ï‹”ÛêÙ¼P›4Ë÷¸‰ád–dóU|þÞã¥ióBm^ÍK]å5¼góBm^ÍKÙu!ÝBŽm^¨Í ²yysR©©óBm^Í—•NÖÖy¥6WV»ß«ygÏæ•Ú¼¢Y¦ª·9Æ6à †“YF‘ÍWì§¥Ó¸Øæ•Ú¼"›W®uŽáÄæÙ|Åc[U. '6¯ÈæË³¢]7jó†l¾ÊIɹÍïÉͲyãJ+NlÞÐ,S>ù{è¤7Ëe Ù|y¶¶×óFm°GÉ>t{òá_$þÉØWùÞ¥¿²2êq†<®ì¦åíYÆ©Ç9b/o%ÞÇ>0œ°ò÷êÞŸÛÊjb8ñ÷@þ^ ½.šþÔßù{YÙ詊û{P4Ö§q%“Â3lÐ6ÚDÙ%õZS÷Ô&¨ÚR›rì±=ùÀp¢6Ô¦ìcvÎîš6¨Úò÷ª¢um†Nü}!¯²À¾G&†_Èß«n¡ÛØÉ¿/äïëM¿‹¦¿/êï ù{uvÚfó†áÄßò÷Šý°íÉ;†_ÈãÊÆ³ZN†óÕÅÀpâqŽ<ÎËjÞ¸5×6N=ΑÇy}ˉö²ÀOvù€]+ö{g¡føÉ®°[ÉÞÏ<Ùív/­î²yííeìöÉ{_¥ÕÍ{“ÖžÇ9õ8-Qßr2›k-(r2ÊúyÙl~a8;Š×*zpÍ2gs=O÷ïí"GÕÛçˆMi†“'"­;«ªÎ}=1œh݉´®û5Ã6+^žìò»Vì¯++ÅpòÞO¤u'¯13 'Zw"­;Ë3¡ÑÌ„>Øí“÷¾Ê'?çŸ_NüENæÁ•v`8ö¸‰"'ûRïFN&œ v©Ø_«:ñÇ!veW¥c[Ó*†cCìVýèÖ˜M9Aì«ûK]åÂplóˆ}Ìêìÿyv÷°“Æ.æ@6_±_c—¦ÍÓZbÄ.»™l™PÁpbó¨–¸b¿&9¿õVÔ“Ö#v+Ùùš·žÍÓZbľ:c_Nl>ùYwŒÞü>iEëDõ´³¼w ºµ…“ÖNTá6ÿ1±ŽtS'öw¯›¨Âm–ýçÏm=?1œø;ŠMç•NŠáäÉ£]䌺ïôâ6“fÀ'ÊÏÅ«û†“÷Žr‘û˜¾½wÃp¢6(;O^o£NÞ;ÚMHµºïî"…®mÍïRæ&¢ëïBçwAJ+UnâÔnÅ‹P¥”›²ÏIÛæ…V° ª`—ò^`=ýÖÒ:¡ìˆ]ʱ߻&öªyŸìò»–c·{ø ÷Þ釨­bµÇë Ã±Ú öU±kìì Ãñڱъ}µýÎï‚æ÷Šý׳!ZÁŽØEõó‚áÄæÙ|•‹ô±=yÅpbó¨~¾b·kŽkîa…ÖÏ#öU±Ë½ƒ\/F-´‚?ù*z‰M³ÎJh6PP>NªUå¿õ²B³‚âóuöfþ]h|^P5oÅ®S»Õ¼B«y»”cÉ †GÙŠýwÖu´š±[ÅþÕ}B«y»—ìzlù8Çpbó(+T>ùk’if…„f…ûj/ãý–î¤ÕÓJ¹›Û“ŸN<ÕÓVì—ÜlÙÁpâqhWŽ}îé{¡ù8Än%»ê¶º0 '‡êiË'¯kë{àN<°GÅ>ïÝq“͆ãúyľJö—¾ É¿£<¬T±q-ìš»Hš‡”“Ò2'uè­wVHiNJQNªb=ÿ>1« b—Š}Ìè®ç•椻j##¦ŽÕ±[Å>C·Ü„a8VÄîå“ïW¼(­æEì«|òrv³ÀJ3bxìefd\«ÚÞØiŸEÕ¼:ùéûáÄßQÄL…W> 'ì(b¦e?êuÞz» ¥3Ä.%û}ayë© ˜!vÕ²ulþ®NÔEÌJöqvkN”FÌ»×O¾ïq´ãb-»¨­îÚæÁîŸ<ùU>ùþId¥ÑBüä«êýqtW•JëçÕÏkUÉ<¤{RIiý¼¢úùŠýš7·}ÜÄp¢6¨~^Ëêýsc 'jƒ2¡ûë)lÅp¢6¨~^g Éڠx]É.Þ=™¨´~±GÉ~í"gï$²Ò¾ˆ}©ýÑ9)¥Õûˆ}¨ÿQG)¥ÕûŠª÷+v‘µÕÓN 'þŽª÷+ö×õ¼`8ñwT½_±›i{/C+»•ïÝî×ÛôüVï#v/ßûX[¤Ô1œø;ªÞ¯Ÿ¼uÏË(­ÞGìCƒç&†C‘RmD †v·Ñ³îÅ}6÷24n£¨Š»bku+^”Vq#öa_Ó Çc7TsbUUç} Û{ïFkN U6ZÙ§tvOç­lDì_}ÿZo³wËNÆöï³b¿Oð³WsòdŸ°K9öcï‚áxŽCìZ±Ëyvç8£µFˆÝÊ'/n·ž¿íSŠØW9ö±W>, dz b&¼ïÁÀpbó(jdeµÏêîãŒF»X]åu-j{6O£Fˆ]+v»öïÍS™F£FˆÝ*öûeVÍ}œÑ¨b÷ŽÕ9†ãubŠ}¬±­çÃñ>±¯rì/§6†G5fVßbv6W•FkÌ EÌxv`8aGQ#+;ì]Ô&†µAQ£zìkˈµAQ£’Ýu«=P 'jƒ¢Ffü4®a8Q5²ºWçÙìŠl4j„Ø£»Ìnÿ:£Q#ľ:ï}a8Q52/³BÒ̈Š]˜ójÃpbuhÿnU¥Ó”n­‘Ñý»¡³ŠýzŸ[ ¹a8;ŠØâV70œŒÕYU쯽÷'†GuVÖ¨5 ':ê¬*öûµÀÒ«³2Zg…Ø­bíOkN¬ÕY•cïwE6Zg…Ø£ûÒíɆGuV¥Õ ÝfØ…áDçQ¼ÎʾÖí¢f4^g¨ßEÅî#ºÙ£ý.»”c?m«Ÿ 'þŽN¨ÙÉkJÉ¿£H©5ºm†Gý.ʱ¿Ty9†?‘¿—µ…rÜšþ~RGÝ6Jöþ]F»m öáÇ­mœÆ¨U6úÁÏ¿O ÇþŽØ¥»Ý“ N+»–ìË»Q#§•ˆÝÊ'?¼Û§Ôie#bw/oh=6w ÇþŽØ£bíÕŽý±¯ò½ÇÑ­«tZW‰Ø‡W•Nóìæ¤œF‰Å*]þ(ç4V‰Ø‡ëÝøà4bæèTfÅî6»=ØžÊDìRŽ=|ó8Áp¢uèl`Å®××<•éôT&b7oÜìcN¬uÇuå]ÔÉ֡3¡åدåÅqë© =Šm¾ŠYÝûœôj‰ÆiE‰½ª9™£Û›×i­‘£J'oÜv11œ°£3¡¾þ¨ïÓȉ£¸Ÿ¼Îjb8aGkڨΘZ3V´ò!P?«ŠÝõìÞn´ŸbךݻìAûY!v«ØcÝžA«>»W캴[SôÌbŠ}ÅÜâ6áxU‰ØWùÞýèÞ^´—bŸ1yŸ“‰áØßU>„üQn"èš6PåCÍ~-ìz³LÐÊÄ.»Ž³³ Zù€Øµb7oߥ´ò±[Åîç¹›0 'jƒ*Ê÷þRÅíNÔÕ”cŸí(qÐÚlóeíÁ%7½ù=è^&Ъ2ªÛ*—w³ÿAW•V•áUÕGt÷qAW•r‘ew·ê#h.2Ъ2Êîy±Åi'†“±£N#ûµfèžÖ Úi±kÅþúÞÉ֡,pùÞýÔf¼.h±¯’½ß)4h¯Ä>¢ØËœÚŽQÍAÚËT즫Û]'èN ±K9öhǨƒæ »F =›wãÍA#v+ØÇ±În­QÐ4b_µÕí‘Ò…áÄæ¡ÕU1‘n‡™ ;è@¹ÈUvœn¯ÎEs Ũ׬v‘í“ ‹Vï/T½_±¿žX™ŽŸ`׊}¿ÝFÞÚüü›D?`·’}ë$&omþþMb°{ùä·›>ä­ÍÿÀ¿Hì“÷¾Jöˆ)•·³Ìü‹d}òÞÇQÌq¶ò òv–ù$™}"›¯ØG¾sÛü¤6?‘ÍW«J[›Õ)†›ŸÈæ«ÕÅÈg±ÍOjóÙüdä°ÍOjóÙüd9)ló“ÚüD6/¬ß¶y¡6/h–îqÃÉ,#Èæ«Õ…ÙæqŠáÄæÙ|µº°™VVØæ…Ú¼ ›Öà ۼP›dóª:±Í µyA6_­¬†µu^©ÍÕím^©Í+še”ݱ‚g¥³Œ"›WvG*¶y¥6¯Èæ•kc8±yE6O묰Í+µyE6oì^!lóFmÞÍW9)9·ù}b8±yC6o\iÉÍšeêS™rÓÞ,ct–1dóÆÎ a›7jó€=Jö¡Û“ ÿ"ñOƾÊ÷.ý••Q3äqÎêi±Ç9õ8GìÁN¨aö ìü=Xï>ìïAý=¿Ww.˜lO^0œø{ ¯*-W}`êïfز®2ŸýÇ3lÐ6ÚDÙ%õZS÷Ô&¨ÚRZSŠÕ&¨ÚR›²Ù9»kÚ jÈßË\äØfØáÄßò÷êDªïQ£‰áÄßò÷ê¶‹Ðmì‚áÄßò÷ò¶ ß"¥ŠáÄßò÷ÅîXÁþ¾¨¿/äïûaÛ“w 'þ¾ÇUì2¶˜ÕÂpâq y\u&ôZÏÙó¸“zÜ ØÇÁ­n`8fð÷Š}¿Õúû“}~À.£¼oâŒ[o~²ËìZ±ï= ¿?Ùõv+Ç®·^¤ôÉn°{ÉþkÆÙ›ßìöÉ{_%ûVS ýýÁ¾>yïc”·”Ž”ýÇ7¨Ç¡ÜĘìT&f§¹‰¢Ä£êÁ¾­ç†v·e&T¶±;†«C‘“Qí"öxÝÀp2v9Æ:`¥¥‘Ä.ƒvAÇJK#'ˆ]GÙÇìØV•ŠáDi )m»8%eÿ±ÒUZ·)ŸüoØ<Û öUŽÝç6ö…áDiQäd8_] 'çÈãÊð·æÚÆ©Ç9ò¸*jtíã´—~²ËìZ±Ëµ{ofŸìú»•ìýìÀ“Ý>`÷Òê¶û¤°Ç9õ8GWYݼ·¿ïyœSCÑÂQEÌVlJ;0œxŠœŒ²~^6›_NÆŽâuc±žØæéþ} ]ä8Y~òt9N¤uû²}=1œh݉´îdgÿ±ÖTëNôÞO¾²R 'ïýDZwò3Ãp¢u'Òºª«’ÎhfBìöÉ{_哟s‹Ï/ 'þŽ"'óàJ;0{ÜD‘“Š}©w#'“FN»ÌƒWu †cCìZ±=¶5­b8ö8ÄnõØnÙ¤‘ľʱ¿ÔU. Ç6ØÇ¬7¶y»˜Ù|Å~]š6Ok‰»Tìf²eBÉͣZâŠ}?ˆmžÖ#v+Ù·rØæi-1b_±/ '6Ÿü¬º¬ìµ…ŠáäÉ£zÚYX9¢[[8imáDnó¯³+߈ýÆë&ªp›UÜfžÛz~b8ñw5šÎ+ÃÉ“G»ÈYžŸ›Ö9†ã•ÕDYà¹xußÀpòÞQ.²bÓ·÷nNÔåaçÉëmÃÉ{G» )ûzw)tm#h~—27]:¿ RZ©r§v+^„*­ Ü„T½>FÛæ…V° ª`aÄ Ö ­`GìRŽ}ë,×6Ovù€]˱Û=|Ð{ïtŽCì&åJ{¼Î0« b_»ÆÎ¾0¯mûªcd¬¶¿Óù]Ðü^±ï§°±ÍÓ vÄ.Ò¨Ÿ '6¯Èæ«\¤íÉ+†›Gõó»©w÷°BëçûªØ¯Õж_Nl>ù*z‰M³ÎJh6PP>NœÝR ×uB³‚âóRÅç‡vóïBãó‚ªy+vÚ­æZ͋إûK6P0œø;ÊT쿳®£Õ¼ˆÝ*öߨîZ͋ؽd×cËÇ9†›GY¡òÉ_“L3+$4+„؇,v§ö8º“TO+‹Ýv=ŽÖÓ"vz'2ö8ZO‹ØµûÝÓ÷BóqˆÝ„Þj„=Žîa»—O^×Ö÷À1œx`Š}zl«‹Àp\?ØWÉþÒ÷`a8ñw”‡•ò–“ka×ÜEÒ<¬ œ”–9©Co½³BJsRŠrRzðóïÃ±Ú v©ØÇŒîz^iN ±«62bŠáXm»Uì{'p¨6JsRˆÝË'߯xQZÍ‹ØWùäåìf•fÄðØËÌȸVµ½±Ó>'ŠªyuòÓ÷É¿£ˆ™ ¯|NØQÄLë~Ôç­·›P1CìR²ß–·žÚЈb׊]®öèE”FÌ»•ìãìÖœ(˜!v¯Ÿ|ßãhÇ Äûnb8QT?¯eõþ¹± †µA™P5~ [1œ¨ ªŸ×ÆÙÃp¢6(^W²‹wO&*­ŸGìQ²_»ÈÙ;‰¬´ïb_jtNJiõ>bêÔQJiõ¾¢êýŠýÚùmõ´É¿£êýŠýu=/NüUïWìfÚÞËÐÊÄnå{7‘[suA«÷»—ï}¬-RêNüUï×OÞºçe”Vï#ö¡ÁsÉǡH©6¢…à ;ŠÛèÉúQcv·QTÅ]±ï76b›§U܈}ØÁ×´ÃñØ ÕœXUÕ9Ææqà ;ªl´²OéìžÎ3Zو؇U/²wËNÆöï³b¿Oð³WsòdŸ°K9öcï‚áxŽCìZ±Ëµ¢nÎqFk»•O^Ün=7Ú§±¯rìc¯|XŽgÄ>Lx߃áÄæQÔÈÊjŸÕÝÇ!v±ºÊëZÔölžF»Vìvíß›§2F»Uìs®î>ÎhÔ±{ÇêÃñº±‡•72m=Ž÷qˆ}•c9µ±0œø;ª1³ò³y6W•FkÌ EÌxv`8aGQ#+;ì]Ô&†µAQ£zìkˈµAQ£’Ýu«=P 'jƒ¢Ffü4®a8Q5²ºWçÙìŠl4j„Ø£»Ìnÿ:£Q#ľ:ï}a8Q52g·”b§Q#C± s^ícN¬íß­ªtšÒ­52º7TcV±Ïcm5ä†ádì(z`‹[ÝÀp2vTgU±¿öÞŸNtÕYY£ÖH0œè<ª³ªØuÚöÞÉΣ:«Šýµ?­a8±:TgU޽ßÙhb«ï Üž|`8ÑyTgUZÝÐm†]NtÅë¬ì{`Ý.jFãu†ú]Tì>¢›0Úï±K9öÓ¶úyÁpâï脚¼¦T1œø;Š”Z£Û†a8ñwÔï¢ûK•—c8ñ÷ù{Y[x¿Æ¬çï'õwÔm£dïßµa´Ûb~üÑÚÆiŒÚQe£üüûÄpìïˆ]ʱÛÑ=¹à´²±kɾ¼5rZوح|òû}JV6"v¯Øõ86w ÇþŽØ£bíÕŽý±¯ò½ÇÑ­«tZW‰Ø‡W•Nóìæ¤œF‰Å*]þ(ç4V‰Ø‡ëÝøà4bæèTfÅî6»=ØžÊDìRŽ=|ó8Áp¢uèl`Å®××<•éôT&b7oÜìcN¬uÇuå]ÔÉ֡3¡åدåÅqë© =Šm¾ŠYÝûœôj‰ÆiE‰½ª9™£Û›×i­‘£J'oÜv11œ°£3¡¾þ¨ïÓȉ£¸Ÿ¼Îjb8aGkڨΘZ3V´ò!P?«ŠÝõìÞn´ŸbךݻìAûY!v«ØcÝžA«>»W캴[SôÌbŠ}ÅÜâ6áxU‰ØWùÞýèÞ^´—bŸ1yŸ“‰áØßU>„üQn"èš6PåCÍ~-ìz³LÐÊÄ.»Ž³³ Zù€Øµb7oߥ´ò±[Åîç¹›0 'jƒ*Ê÷þRÅíNÔÕ”cŸí(qÐÚlóeíÁ%7½ù=è^&Ъ2ªÛ*—w³ÿAW•V•áUÕGt÷qAW•r‘ew·ê#h.2Ъ2Êîy±Åi'†“±£N#ûµfèžÖ Úi±kÅþúÞÉ֡,pùÞýÔf¼.h±¯’½ß)4h¯Ä>¢ØËœÚŽQÍAÚËT즫Û]'èN ±K9öhǨƒæ »F =›wãÍA#v+ØÇ±În­QÐ4b_µÕí‘Ò…áÄæ¡ÕU1‘n‡™ ;è@¹ÈUvœn¯ÎEs Ũ׬v‘í“ ‹Vï/T½_±¿žX™ŽŸùy©?ÙÿHì“÷¾JöKh¿„ü°/ ÿ"YŸ¼÷q̺/q$«^dö‰l¾b¿çã¢gó“ÚüD6_ŨÇJ‘Rló“ÚüD6_­iïgFFÏæ'µù‰l~Ö=cõl~R›ŸÈægu߄߿èÙü¤6?‘ÍW++ÛW“Œ†Í µyA³Œp›NfA6/u­‘GÏæ…Ú¼ ›¯žüÊ=^°Í µyA6_ž ½UêÙ¼P›dóRßgÖ³y¡6/ÈæËû ­­óJm®¬ª.èǵ®“žÍ+µyE³LYåeÛ +NfE6_ö`Ÿ·qöl^©Í+²yåZçNl^‘ÍWY![7[=›WjóŠl¾:8cÞ¢góFmÞÍ—w*åZ#lóFmÞÍWZÁpbó†f«+–õf£³Œ!›·º¢µ»ž7jó€=Jv‰›¤'þE⟌}•O>äÍ••Q3äqU7­ãš`ÏžÇ9õ8GìUNêò¸¼ªNØù{UÝwjŠbêïü½ºsaZÊEbêïü½<‘zÞŽæª2¨¿ša+v¹Þ{s† :ÃR›¨ïP›Í6¨ÚR›rìùd"V› jHm¢¾#µ»¦ ª6ü½ÊEÞk¼çï‹úûBþ^ÊŒ\Õ‰ý}Q_Èß«Û.tnÑÁpâï ù{Õùÿžnúû¢þ¾¿Wc_r[³çï‹úûBþ^Þ3›Õ9†_ÈãV}^fEÏãõ¸…<®:zÓ®žÇÔãNÀ>nuÃ1û8€¿ò>èsÛËL ÇþŽØe”÷MܾåïOvù€]ÇQ÷%¶³åïOvý€ÝJö»Í[Ëߟìö»—VwÏôæ÷»}òÞW9ö{ä¤7Ã>Ø×'ï}Œ*7q¿¹7ÃŽA=å&FYù{6bvš›(J<ªˆ™ÊMgFÌŠÛ”ì÷+zñùAã6ˆ}Œj{ø¯NÆŽ"'ûðcS›‰áDiQäd¼éC.M¥¥‘Ä®»®c[U*†¥5¤´û1nçê)­Q¥Eq›ò½ÿ†ÍÓ¸ b_¥Í‡ß¢—‡4r‚ØÇp¾ºN<ΑÇU½¼æš·æÚÆ©Ç9ò¸*jt×õ²ÀOvù€]Kö»Õõö2Ový€Ý†ÿQvàÉn°{iu2o2zçÔãy\-ŒöÚÆ©Ç¡háˆ7ý¨{ÑÂA£…ENF«ŒÍ憓±£xݨv‘÷î÷Ú³yºh9ÊŽRGªlÄOžî"lj´®ê(u¿µ°WåõdŸ°KÅ.óèV¼<Ùåv­Ø_WVŠá佟HëN^cfN´îDZw¾éÑÚÜÇTëNäïUO§{máÙó÷“ú;ŠœÌƒ+íÀpìqEN*v¿Ï°½ìÿ¤‘Ä.åØ_ª:ñÇ!v­Øï÷€iyܤ‘ÄnõØåvöjÌ&œ ö5^W¹0Û謴ŠáÄæQý|Å~¿OªyNJhýMÓé{¬64+„؇T{™ûê¢9ÃÒ” zZYu/ní‹ZO‹Ø¥bÿuïÖó8ZO‹ØUÊ^F÷ô½Ð|b·òÉßkNzy¡{XÄîå“¿×”öNe ­§EìQŽ}¬í”V`8®ŸGì«dé{°0œø;ÊÃJ}Ëɸ5w‘4+('¥Uvà^½ßËI)ÍI)ÊIéÁÏ¿O ÇjƒØ¥ûµn®ç•椻j##¦ŽÕ±[É~_ÓöÖóJsRˆÝË'߯xQZÍ‹ØW9ö{™¶ü]iF ½ÊM|ÝÞ;ís¢¨šW'?}?0œø;Š˜©ðʇá„EÌ*v9×¶º˜NÔEÌ*ö_÷³½µÒˆb׊}ÞÇÞ«hU1CìV²ßß{om£4b†Ø½|ò¿áq´ãbrì÷ öÑZÛ<Øý“'¿JöþId¥ÑBüä«Î÷haoU©´~^Qý¼Vq›ûØ{± ¥õóŠêç+ökfØöqÉڠúùrì>oÞ;™¨´~±kÅþz [1œ¨ ªŸ×ÆÙÃp¢6(^W>ù{Ĭ¹¶¡õóˆ=jöµ­*Éڠê}µ?:'¥´z±õ?ê(¥´z_Qõ~É~ïíÓ«¯SZ½Ø¥dYÏ †GÕû»ÚèžDVZù€ØMË;ÐïÇï{þN«÷»—Oþ%Žž¿Óø¥z›=µ1Zو؇U/÷,psìtÿn`ÿ>­ŒÈ!½š“'ûü€]Jöûñ¸ÙšãŒö)EìZ±Ë}ÿÞ[Ó­5BìV±Ï{­Q¯žÖhŸRľJö{1o/ÿn´S(b&¼ïÁÀpbó(jT±»Îî>ÎhÔ±K9ö¹ºQ#£Q#Ä®&õý°ÍÞ¼F£FˆÝ¬¼•غ}JF»w¬Î1¯ë{”c¿ïez1£Q#ľÊ÷þrjca8ñwTcfe×ß: 'þŽ¢Ff<;0œ°£¨‘•ä½® F£Fˆ]ê±ËV[(NÔEJöÓ·ªÅp¢6(jT±¿žÆ5 'jƒ¢FVvI½‡zjC£Fˆ=ʱßã6½¨‘Ѩb_÷¾0œ¨ Š™—•Ò̈Š]˜ójÃpbuhÿnU¥“Ë%NÆŽjÌ*öáçvbÅ0œŒElq«NÆŽê¬*ö×ÞûÉΣ:+kÔ †GuV»ÜkÌz§qÖY!v«Ø_ûÓ†«CuVåØû]‘ÖY!ö(Ç~?¸z:Oë¬û*­îÞ§´©ó´Î ±+Oi­n5£ñ:Cý.*v;æÖÓib8ñwÔï¢û=ÙôwÚï±k;ה*†G‘RktÛ0 'þŽú]”c©òr 'þ~"¯Æ~ï g=?©¿£nåØûwmí¶Ø¯WüGk§1jG•ûëù÷‰áØß»”c¿GNz•N+»Vìr¿C­5rZÙˆØÍËÚB¿I/Rê´²±{9öûºNZþî´²±Giu/½:ñ¿#öUŽýÞ·°×]Çi]%b^Ö˜­nr§QbG±ÊŠý7òqNc•ˆ}¸þÑN#fŽNeVìvïºÐ‹;=•‰Ø¥û=/ÓÔ:z*±kÅ.÷³½ºJ§§2»yãfÃpbu¨;n9ö—.jŽáDëЙÐrìóÞ:°§6ôL(¶ùªÒéÞE­×iÄiœÖQ”Ø«š“û9è^”Øi­‘£J'oÜv11œ°£3¡¾þ¨ïÓȉ£¸Ÿ¼Îjb8aGkÚ¨ÎèýšÒ–έ|ÔϪb·{ì¢×“9h?+Ä®5û1S ÇJ‹Ø­d¿ç¤zQ£ UˆÝ+v¹×ÓöjJƒžAìQ±Çý\dï.­»òäWùäeݤ—‹ ÚË ±Ï˜¼ÏÉÄpìï*Bþ(7tM¨ò!Ê øÚÎN 'cG•%»ŽnÌ*håb׊]ï3l¯¢5håb·ŠÝ^.2èn±{ùä_ª¸Éڠڃrì÷[ÌzQâ µØæËU彡UÏæé^&Ъ2ªÛ*ïµÄ½Ó÷AW•V•QÕv;šc§«Ê@¹Èˆªwß¹Åm†­C«Ê(»çévVhb8;ê4RŽýÞߦWw´Ób×’ýå½+†­CYàŠý»kð=­£Y`ľJö~§Ð ½>ûˆb/÷¶£šƒ´—©Øõž—iÚ<ÝI!v)Ç~ÝuÐ4b׊ÝÏѽ7h±[žVlU^†áÄæQ¶|ò![¤ta8±yhuÕúÞ“¹»ºƒ”‹\UŒ:b;û¯ŽßûB1êUí&î72÷ª÷­Þ_¨z¿b=±21?yÄ.ûkï>Ápìïˆ]+ö²eÿÃÉ{GÕûû¸÷)Íçã ñ¿#öUŽýEi†cGìcU™‘X·èݹèv¡õ|ÅþËîéžÍÓ=,b—%|U)Nlía뱟Ý{FÝÃ"v«ØåÞý¾iót‹Ø½|ò/·Û8†ã=,¶ºª‚ý¶iZÝE®·»H;æQÝ;pùûsÿnoÙàw{ÇnÇxÏ.û×å¸ãÉ.þM"°kÉ.šÖóöÖæàß$ú»eœvlOÞ0ü›Ä>`÷rì÷ fÎ'»cø‰}òÞWÅ>%ŸÆµ·³Ìü‹d}òÞÇQ Œ5³Õ /H2ûD6_­mÖÚÞ»`8±ù‰l¾:zçóÞ@ló“ÚüD6_¬mæœ)JŒm~R›ŸÈæ«÷î×þ=z6?©ÍOdóûºfXoÚü¤6?‘Í—§´4 Ä6/ÔæÍ2Â=nb8™eÙ|u*ó°´›À6/ÔæÙ|5v½nz6/ÔæÙ|Å>tݬgóBm^ÍWV7[4m^¨Í ²ù2>m¡›:¯Ôæáʪ`_óÜæ¸‰áÄæÍ2Uö{•Ws–Q:Ë(²y­óïÒÔy¥6¯Èæ•kc8±yE6¯e×D˳ÌÂpbóŠlÞʪ»5uިͲùŠ}Ý›ûôlިͲyãJ+NlÞÐ,SÆc³:Åp2˲ùjì&íõ¼Q›ìQ³ÛÈJþE⟌}•O^/™oÎ2F=ÎÇyÝuAšçÔã±—9)ÝV•à { ¯Øu¼›˜Nü=¿—72_Bßô÷ þÈߣ®9é®*ƒú{ 6êÜÄjΰAgØ@jSeÀoϰAÕ&Ú”6oîÓS› jHm¢îoÓ]ÓU›@þ^U´Þߟ=_Ôßò÷òLèµ oÎï‹úûBþ^öÞߣ‚áÄßò÷U÷9éúû¢þ¾¿—w.\ zéùû¢þ¾¿—ç Cº«‹Eý}![u™5=nQ[Èãª;挼žN<îìãàV70³ø{ÅþÕŒ;ZþþdŸ°KÉþKN¿µüýÉ.°kÅnçÜÖuŠáØß»Uì.¶Í°†áØß»£¾ »9¿?Øí“÷¾Ê'ÈÆ¾0û;b£ÌI…6gØ1¨Ç¡ÜĘe¼ÎrNj`8aGQâQFÌrw\ÌN#fÅmJöûA©Ù³:·AìcT»Ès× 'cG‘“Š}ú®6ÉҢÈIÅ~­¨½™‡4r‚صdeyU©N”ÖÒVìnžç8Ãp¢´(nS?ù¾ÍÓ¸ b_ûõo¦.èXiiä±á|u10œxœ#óòlàås=sêqŽ<®Š]“Œõö2Ovù€]+v½–óͽ̓]?`·Šý7²Ovû€Ý+öyïSÚ\Û8õ8GW½wYíµSCÑÂQÅ.ôÜÆ>0œxŠœŒ2Z¨Ý}Ü ‘Ä®£ÜÚæ9N1œØ<ÚEŽj©ÇÙ]×Ñ]ä8‘ÖEM©ìþ>1œh݉´®êg5¥[ñòd—صb]Y)†“÷~"­;y™a8ѺiÝYŸ ìîãNªu'ò÷²›–lO~a8ñw9™WÚáØã&Šœì×æÌ»ÙÿI#'ˆ]ª±¿Vu †cCìZ±ß{2kÏã&œ v+ǾŽmŽ3 LJØ×'ŠªyuòÓ÷É¿£ˆ™ ¯|NØQĬb÷k+ÓŒ(˜!vѲëÂ^Á.NÔEÌjöµš­J#fˆÝjöi͵҈b÷’ý7<Žvœ@ìQ±Ë¹GNÃñÚ±¯Šý7N"+â'_uSß΄:†“'ê経ÛÜ/„î© ­ŸWT?_²Ç8›'•æ"»hY½oÝ“‰Jëç»–c9…­NÔÕÏkãì€a8Q¯S{s\Óæiýb÷ò½OÝ<Î1œø;ªÞ¯Ç.[÷Âpâq(; ÁsÉǡH©6¢…à ;ŠÛhUɬs[Û '쨊[˨Ñ%7«g󴊱;øšv`8»¡š«vЗ©4×uFkN U6Vìó~vOmŒV6"öaåþ}iwìtÿn`ÿ>Kö_zZ¯æäÉ>?`—zìb9'%Žç8Ä®%ûý¢Ð^Øh­b·Š]×®u†áÄêP§Ð’}D÷T¦ÑN¡ˆ}˜ð¾Éͣ¨QÅ>íîãŒF»”cïFŒF»Vì¿<º½yF»•ìrm'z}JF»w¬Î1¯ë{”cŸzä:«Àp¼Cì«b=µ±0œø;ª1³ªÒé°î>Îh™¡¨‘Ïà 'ì(jT±ßo»hv]05BìR±«Kwi4j„ص~òËšçaF»•ì/§q Éڠ¨Q=öèvE65BìQ±ðmÿNÔE:ï}a8Q52/+¤¹‡552»(Ù_ª} Éաý»•·í}Ý¿ª1³²¾.¢yÙhb¶¸Õ 'cGuVûkïý‰áDçQ•5jÉΣ:«Šý~eâÙ‹­³BìVŽ]Ú•F묻—ìý®ÈFë¬{”ìclgÄÉΣ:«ÚêÆÙÕyZg…؇•}älž\0¯3Ôï¢d_s4+Œö»@ìRýÚÌ4ýö»@ìj'¯)U 'þŽ"¥Öè¶aNüõ»¨Ø_«¼É¿ŸÈß«~±çãÉ¿£nåØûwmí¶Ø‡´¶q£vTÙX±¿žŸŽý±K9v÷ne£ÓÊFÄ®åØmh3jä´²±[Å~¿Ñ©)uZوؽb7Ù³ŽáØß{”Oþ¥Wg`8öwľJ«;ÛÝuœÖU"öáe™tû;;ŠU–ìý|œÓX%b®tãƒÓˆ™£S™û¯åÛšvb8Ñ:t*³û¼©uôT&b×rìfÚ¬«tz*±›7nö1 'V‡ºãºò.jŽáDëЙÐrìzíešjCÏ„b›/+¼ÛiÄiœÖQ”ØËš“èF‰Ö9ªtòÆmà ;:êëú8œ8ŠÛøÉë¬&†v´¦òì@ÌÜ~`8Öù@ý¬JöåÝÛm‚ö³BìZ±¿FÌñÒ"v«ØO[ݨQЪÄî»k»¦4è™Äû¾D Ç«JľÊ÷g·ö h//Ä>cò>'ñ¿ª|ù£ÜDÐ5m Ê‡(o)ÝÏN 'cG•åØÍ¢³ Zù€ØµbÓîé¼ •ˆÝʱŸ÷àEOmèn±{ÅþZÅíNÔÕ”c_²©ÍÂpâïÐæËÔ›q› {™@«Ê¨2¡çÐæ­ÄAW•V•áUÕÇè®m‚®*å"£XUƈn5oÐ\d UeÔÝóVsMtM‹Ø¥»ݺ‹ F»Vì¯ï]1œhÊ—Oþ×9õÖÓ:šFì«fow Úë±XÅíófÝuÐt ½LT;©˜g³»NÐb—rìçèÆm‚æ »VìCÚwãÍA#v«Øïg…š9© 9hľª÷>¦K³#tÐ<,¶º*+t-iWs–¡;è@¹ÈUvœѬ1[47±PŒzU5ä§ÍÛ¬­Þ_¨z¿b=±21?yÄ.û_z÷ †cGìZýÚÃnw¨)†“÷Žª÷«±¯snÑBÃpìïˆ}Uì¯J»0û;b«êùpýèÍq‹îaZϯòìÿ²Õ‹.º‡EìR²¿¬*Éͣ=lÉ~F·/ñ¢{XÄn»Eßæé±{ýä÷ÛmÃñ[]}o 7w‹î"×Û]¤óUŒÚnò˜ãü-ûüNâïØýïÙ¥bz­¬æ“]0ü›D>`׊ý¾¢^údW ÿ&ÑØ­d¿”ÖÒ“7 ÿ&±ؽ|òvMqëÉîþEbŸ¼÷U²ÇõäÏ'ûÂð/’õÉ{Gµ¶Yr;’Õ /H2ûD6_±y;GÏæ'µù‰l~V±Êy ïÙü¤6?‘Íìç7•žÍOjóÙ|u2ñ¾¬ÓžÍOjóÙü¬ò2ÇmIÏæ'µù‰l¾ê,toKl=›jó‚fá71œÌ2‚l¾êkd—ÕžÍ µyA6_=y=o2{6/ÔæÙ¼”UÜ©/1¶y¡6/Èæ«±|F Û¼P›dóÕý2CÛ:¯ÔæáÊJ«Ûi×ÍÏžÍ+µyE³L5ösm3¬`8™eÙ|Ugu?=›WjóŠl^¹Ö9†›WdóZöòº‰öl^©Í+²ù²Ÿ•¤~•ØæÚ¼!›¯nd¾Ÿ—Y=›7jó†lÞ¸Ò †›74ËTìv¤=,žeŒÎ2†lÞÞÜ©Ô\ϵyÀ%û5ɬôäÿHü“±¯òɋܤ¹²2êq†<®º‘YõÑó8§爽<iÛªr`8aäïQÙüyÞó÷ þÈߣÚÃΛ5ý=¨¿ò÷ê6êkíÍUeP4ÃVìkܼ9Ãa©Mùä%Åç±ÚU›@jSŽÝnâ=µ ª6Ô¦ûy´×´AÕ&¿WyØë½Õó÷Eý}!¯nîóyÓæü¾¨¿/äï«>¡–£‚áÄßò÷ªóÿ!·Õô÷Eý}!_ÕI¥‹Ý{þ¾¨¿/äïû¡›Õ9†_Èã*v9nÇèyÜ¢·ÇuçÿОÇÔãNÀ>nuÃ1û8€¿WìãÔm/31û;b—QÞF}¦jÐߟìò»VìªãfÑò÷'»~Àn%û¥uy7aŽý±û(oúðîüþ`·OÞû*m>r;ô÷ûúä½Qå&.µ‘Þ ;õ8”›UíÁýZ¡žÚ š›(J<ªìq­i½ÇN#fÅmFyôØÆîN¬ENFµ‹Œ¹Å놓±£ÈIÅ>.©Ëj31œ(-ŠœTìsŶ 'J‹"'»]ëù¼ªT 'JkHi«ØÅ:o¦=¥5ª´(nS>ùß°y·Aì«û½µO/;hä±á|u10œxœ#ó²z?ÆÅçÔãy\5Šó6{Yà'»|À®»\û÷£·—y²ëìV²÷³Ovû€ÝK«ók-=sêqŽ<®zï÷뤚k§‡¢…£Š]\J½há ÑÂ"'£< ,›Í/ 'cGñºQE.×Ù³yºh9κOéÑÔ:º‹'Òº‚}©mþ>1œh݉´®ûõä›/Ovù€]+öו•b8yï'Òº“ט†­;‘Öõ}ÍLèƒÝ>yï«|ò÷6fÑó÷“ú;ŠœÌƒ+íÀpìqEN*ö¥Çíèeÿ'œ v™¯ê LJصb÷æ:gËã&œ v+Çnq;{5f“FNû*ÇþRW¹0ÛùYí¤lË+†“'êigubåZ×5k '­-œ¨Âmþ5b6Âý6{±ÊIãuU¸Í*n3m[ÏO 'þŽ¢FÓy¥“b8yòh9«Ê‡ynZçŽWVeçâÕ}ÃÉ{G¹ÈYž ½l¾—‹œ4‰Øuž¼ÞF1œ¼w´›27!·³§6B×6‚æw)s—Ì÷öïBçwAJ+Unâ’ùÑó8¡J+(7!e‡¿IÏæ…V° ª`©o³š·–Ö ­`GìRŽÝ£[Íûd—صb¿_¡&½ÊF¡sb·Š=®¥Íè­ç…ÖÏ#öU±«¯›÷j …V°#ö!Ze/­ëÍïBçwAó{žÛ*&†›GìÒ¨Ÿ '6¯Èæ«\¤›Ò*†›Gõóûýô}óœ”Ðúyľ¤ì+7íe…„V°ã'_eBí¸½”Ðl  |œ8»7®ë„fÅ祊ÏÙêi†GÕ¼û½»÷ªy…Vó"v)Çþ’  'þ޲ûï¬ëh5/b·Šý7ªû„Vó"v/ÙåRÚÙ³yº—Aì«|òÇy;{Ñ¡Y!Ä>¤ÚË\+«æZèNJP=­”5¥ÇmôÎE ­§EìRŽýÞxÀzGëi»–cÕ=}/4‡Ø­d×±6 '‡êi¥¼Ý&ngïT¦ÐzZÄûtÛNi†ãúyľJö—¾ É¿£<¬T÷Ë K7û`§yXA9)=Ø}Ð]iNJQNJ~þ}b8VÄ.û˜Þ]Ï+ÍI!vÕFFL1« b·ò½ÇØNi†cµAì^>ù~Å‹Òj^ľÊ'/±Â^Žý½ì‚>®µUoì´Ï‰¢j^üôýÀpâï(b¦Â+†v1«ØïW&®^ô@iÄ ±‹Ö÷Aoì‚áDmPĬb¿wþ?z­J#fˆÝJöÛNÊ0œ¨ ê8Q>ùßð8Úq±‡–ä|‹œ†ãµ b_å“ïŸDV-ÄO¾ªÞ¿vRÚ[U*­ŸWT?¯U%ó¸Öu½Ø…ÒúyEõó»Éž NÔÕÏkY½¿nGïd¢ÒúyÄ®jü¶b8QT?¯³†áDmP¼®dݪ}Éͣ¾%»ÎmUNÔUï—ï½NJiõ>bêÔQJiõ¾¢êý’]l;¹01œø;ªÞWçëyÁpâï¨z¿b7=»'‘•V> v«Ø¿š Ÿ=§ÕûˆÝË÷>|ËA;†GÕûå“·±Uq/ '‡²<710œxŠ”j#Z80œ°£¸V•̇ný.†vTÅ]±å[ŒÚ0œØ<ŠÙÁ×´ÃñØ ÕœXUÕy¬­ÛÆÀpÂŽ*­ìS:n³§6F+û°ªâEbë–90œŒìßgÅ~ßGž½š“'ûü€]ʱÇ–“ Çsb׊].›ofÖ!v+Ù}nZgN¬u -Ù¯Ôèåßv EìÄ÷=NlE*öX³»35BìR±Ëyv£FF£Fˆ]Mê{B›½yF»Uìsz·O©Ñ¨b÷ŽÕ9†ãubŠ}Ĺ Çû8ľʱ¿œÚXNüÕ˜YUé4cë420œø;Š™ñ<ìÀpÂŽ¢FVv8o£×uÁhÔ±K=vÛj Éڠ¨QÉ~¿É«Wñb4j„Ø­b=kNÔE¬ì’jÞìŠl4j„Ø£ûýÒÂ^ÔÈhÔ±¯Î{_NÔEÌËʇ³™352»0çÕ>†áÄêÐþÝÊ3#c‹ 'cG5fû¼VÞË ­1Cì÷ºádì¨Îªbí½?1œè<ª³²F­‘`8ÑyTgU±ëeu«w×hb·Šýµ?­a8±:TgU޽ßÙhbrìK6 ':ê¬J«s›a†Gñ:+ûH·‹šÑx¡~»_c·^¥“Ñ~ˆ]ʱŸsë)NüP³“×”*†G‘RktÛ0 'þŽú]”c©òr 'þ~"/û]œ[>.0œø;ê¶Q޽׆Ñnˆ}øñGk§1jG•~ðóïñ¿#v)Ç®këõ!Žý±kÉ~Í2ͨ‘ÓÊFÄn^Özº±ú»ÓÊFÄîåØÏزŽáØß{”céÕŽý±¯rì×^¦Ù]Çi]%b^EJgtû;;ŠUVì¿‘s«DìÃõn|p1st*³bwõmM;1œh:•YŽ=tó8Áp¢uèl`Å®×7{u•NOe"vóÆÍ>†áÄêPwÜŠýµ‹šc8Ñ:t&´»që­.œž Å6_V:Å1›NlE‰½¬9YÝÞ¼NkU:yã¶‹‰á„ õõG}œFNÅmüäuVà ;ZÓFuvÀtÜz1« •úYUì~Í2ÍÛm‚ö³BìZ³ï3Åp¬´ˆÝ*öºeF ñÒ"v¯ØuÝšÒ gF{TìëÚÞ½»´ìþÉ“_å{·kÿÞËEíå…ØgLÞçdb8ö÷@•!”›º¦ Tùe|mg'†“±£Ê‡’}X7f´ò±kÅn>»…‚V> v«Øý¼vн\dÐÝb÷ŠýµŠÛ1œ¨ ª=(Ç>ÎMm†‡6¯ev`Ýzó{нL UeT·U®±EÈ'†v´ª ¯ª>®½LsìtU(Q—±-n30œhZUVì"ºšNÆŽ:”c¿f™æi F»Vì¯ï]1œhÊWì—ѯ[/4 ŒØWÉÞï´×bQìeNñnŒ:h:Ð^¦b7•nw ;)Ä.åØ]º1ê 9hÄ®ûÒÙ½7h±[Á>Žû‰½œTÐ4b_å“¿Æ>z¡ƒæa±ÕUY!¹öq½ØEÐt \ä*;NÛÙÅpüÞŠQ¯Yí"m«`Žý}¡êýŠýõÄÊÄpüä»T쯽ûñ¿#v-Ù}mÙÅpòÞQõ~Á>¾n£-_´z±¯jì¯J»0û;b«ªâq‹Þ}‘‹îaZÏWì¿\Î[oŽ[t‹Øe _U †›G{Ørì1»÷Œ,º‡EìV±ëô¶ÍÓ=,b÷òÉ¿ÜnãŽ÷°ØêÊ{½{ ù¢»ÈõvÇ`׊ý~fä9‰·6ÿÿ&ÑØ­d¿Ò“7 ÿ&±ؽ|ò’»¬Ä[›ÿ‘Ø'ï}•ì÷{…âɾ0ü‹d}òÞÇQÌq6<íeâí,ó/H2ûD6_­¬LSo^ló“ÚüD6ÿ&Fýìíƒm~R›ŸÈæËu]¤³BØæ'µù‰l¾zòc¦õ<¶ùIm~"›ŸuÜf=›ŸÔæ'²ùjeuïÖ³y¡6/h–îqÃÉ,#Èæ¥®£>¤góBm^ÍKÝ!Ö¼góBm^Í—ý¬Îõ¼gÛ¼P›dó•ÕE¤¬¶y¡6/Èæµ>¥ÕÕy¥6WVZßè4£góJm^Ñ,S­*]·V0œÌ2Šl¾ªöѼÃ6¯ÔæÙ¼r­s '6¯ÈæµÜEÞæìÙ¼R›WdóÕÙÀyoDÞ³y£6oÈæ­Î„ªölިͲyãJ+NlÞÐ,S±#Ŭð,ct–1dóe5k¯çÚ<`’ýÞ12=ùÀð/ÿdì«bŸ§¥»u°Çõ8CWuÓºÖ6çèyœSsÄ^夿ÜV•à { º¶p®ž¿õ÷@þ^ݹ –"'Øßƒú{ /o=Èçß±¿õ÷@3lÅ®gª)Å3lÐ6ÚD}“×lΰAÕ&ÚD}7îZ=µ ª6Ô¦»¯öš6¨Úò÷UWqŸÚó÷Eý}!/O¤žéÖìï‹úûBþ^õp3Ù¢‚áÄßò÷òÞ3U>`_Ôßò÷U÷h•Õó÷Eý}!/oŸ?6«s 'þ¾ÇUOþTÍ‹=nQ[ÈãÎúF'=;©Ç€}Üê†cöq¯ØGÌm/31û;b—Šýü¸õæ÷'»|À®£<7Òi\èïOvý€Ý*vç¶›0 ÇþŽØ½´:µîüþ`·OÞû*Ÿ¼\»ÈÞ û`_Ÿ¼÷1ªÜİtú{Ü ‡r£êšxæúyÌNsE‰‡Ö÷¿Çê±ÓˆÙ@q›Š}ºÝ1œXŠœ «kr¼n`8;ŠœTì#dS›‰áDiQä¤bŸfÛþ]0œ(-ŠœTì6Ö¶ªT 'JkHi vIà±ÒUZ·)ŸüoØ<Û öUŽýðTõ•–FNûÎWÉÇ9ò¸òöÃn͵SsäqUÔH#uEÆçÔãyœ×ÝuVo/ódר­dïgžìö»—V§3õÞÇçÔãyœ×wev×6N=E G»Ðt>{9e¬òÜl~a8;Š×7we.ïÙ<Ý¿´‹åYà#õ§ÅOžî"lj´®`]›¿O 'Zw"­;ëN¡ÍŠ—'»|À®ûëÊJ1œ¼÷iÝÉkÌ Ã‰ÖHëª'ÞÍ„>Øí“÷¾Ê'Ä–YNüENæÁ•v`8ö¸‰"'{¨¦Û¬ ÇM9Aì2^Õ)Ž=±ë,ïÊ”tbzܤ‘ÄnåØG¤þóÐã&œ öUŽý¥®ra8¶yÄ>fuö_ÎîvÒØÅÈæË»6Fê݇mžÖ#v)ٗ߆ölžÖ#v­Ø¿Ú¨õê*'­%FìV²ÛyÞzÑÂIk‰ûêŒ}a8±yøägÝÏjôÖu“V´NTO;Ë^^³[[8imáDnó¯³an©‡öw¯›¨ÂmVу‹]{«ÊIcVE¦óJ'ÅpòäÑ.rFÝ%uôâ6“fÀ'ÊÏÅ«û†“÷Žr‘³¼Kk¤3¡Xmh.±ë`WysöÑ«l:Ç!v«Ø}ů3 ÇjƒØ—¼é,4{µ…B+Øûªcäåïћ߅Îï‚æ÷Š=†l•NÉͣ viÔÏ †›Wdóå½B禴ŠáÄæQý|ùÞ×Ñ='%´~±¯rì×NÊ{Y!¡ìøÉ—÷ËÌÔ!?yš ”“jU9î-¥Zë:¡ÙAñy‰úÖÂÙË¿ Ï ªæ­Ø%æ–ýŸNüUó–cÉ †GÙr쿱®£Õ¼ˆÝʱ÷«û„Vó"v¯ØçµžWïÙ<ÝË öU²‡Þ¼=šBìCª½Œ®îZèNJP=­”û8KÀ±ÇÑzZÄ.åØI}°ÇÑzZÄ®û×è½Ó÷BóqˆÝJökìG//#t‹Ø½bÿuï(Õ;•)´ž±Giuדϧ´Ãqý¶nà ;ªl´²O©ÞŽžÚ­lDìÃªŠ—kw4ÇN÷ïöïÓÊèÁýžÒÖ÷dŸ°KɾÎ-'%Žç8Ä®»ØÑÍ­5BìV²Ï±ia8±:Ô)´bŸ×n"zùw£Bû0á}†›GQ#{s›Usg4j„Ø¥»i7jd4j„ØÕÊ;ÔÎno^£Q#Änû<ŽnŸR£Q#Äî«s Çë:Äû°s;;Ž÷qˆ}•ïýåÔÆÂpâï¨ÆÌÊ® cë420œø;Š™ñ<ìÀpÂŽ¢F»Í|sV5BìRÝ·ÚBÁp¢6(jT²Ïc«úP 'jƒ¢Fûëi\Ãp¢6(jT±ÿ’áÍ®ÈF£Fˆ=ʱ߻a÷¢FF£Fˆ}uÞûÂp¢6(jdeô`Z3#f4jd(vaΫ} Éաý»•waë%NÆŽjÌ*ö±d;±bNÆŽ¢¶¸Õ 'cGuVûkïý‰áDçQ•5jÉΣ:«’=d;; NtÕYUì¯ýi Éա:«rìý®ÈFë¬{”cÝ<.0œè<ª³ªØgø6Ã. ':âuVö=Ðn5£ñ:Cý.*vÓ¹õtšNüõ»(Ç~í&´éï´ßb×’ý¥¦T1œø;Š”Z£Û†a8ñwÔï¢b­òr 'þ~"¯Æ>tËdžGÝ6Ê÷Þ¿kÃh· Ä>üø£µÓµ£ÊÆŠýõüûÄpìïˆ]*v9ÖÖëC0û;b×’]nÔÈie#b7/k #ÝÿýÝie#b÷rì6·ì€c8öwÄ¥Õ½ôê ÇþŽØW9ök#Õì®ã´®±/kÌÎnr§QbG±ÊŠý7òqNc•ˆ}¸þÑN#fŽNeVìvŸa{r§§2»”cWÙz¹È ½¼ûŒÉûœL Çþ¨ò!ärA×´*¢Ì€Çv6pb8;ª|(Ù}ucVA+»Vìz?&Õ«h Zù€Ø­b÷{w/t7ؽ|ò/UÜŽáDmPíAÅnznj³0œø;´ùrU9×­7¿ÝËZUF±ªôû½B½Ó÷AW•V•QÕKÜŽæØéª2P.2¢:/£[Üf`8Ñ:´ªŒ²{žog…&†“±£N#»³{Z'h§Ä®å“yïŠáDëP¸b¿Äî¸õ2àA³Àˆ}•ìýN¡A{} öÅ^fÝûÏ÷bÔAsÐö2»®Ñí®t'…Ø¥»I7F4صbõîݸAsЈÝ*öÓÖVåeNlåaË'/ºEJ†›‡VWí ïõ´½ØEÐt \äª:N±ýW Çï}¡õšÕ.R· öáØßªÞ_“ŸX™ŽŸÎ0û;b_ÕØ_•va8öwÄ>V•9çíìݹèv¡õ|ÅþËÜo½9nÑ=,b—%|U)Nlía˱»vïYt‹Ø­b¿fí¶ÍÓ=,b÷òÉ¿ÜnãŽ÷°ØêÊ ö³{ ù¢»Èõv¹ŽyT³Ki×㽯·ì?ð;ÉzǾŽñž]*öqFÊI­·6ÿÿ&‘صbË÷A¯·6ÿÿ&ÑØ­b×k+s¤'oþMb°{Å>G¤jë­ÍÿÀ¿Hì“÷¾JvÔid½e~à_$ë“÷>ŽjŽ›Gªh]og™xA’Ù'²ùju1ÇMGÏæ'µù‰l¾X]\𢅨æ'µù‰l¾ZÛ\»ÈçüŽm~R›ŸÈæ«õµ¶9µgó“ÚüD6_°ŸÇH±ÍOjóÙ|£ž’âóØæ…Ú¼ YF¸ÇM '³Œ ›—z'uŽžÍ µyA6_fFZ]`›jó‚l¾Z× ³g¿ lóBm^Í—gBGŠÓb›jó‚l¾ª9¹<®«óJm®¬ öu­*ÇÙ³y¥6¯h–yÓ{?ϰ‚ád–QdóU•—åL(¶y¥6¯Èæ•kc8±yE6¯utÑžÍ+µyE6oe›¸žÍµyC6_°¯kÿî«góFmÞÍWZÁpbó†f™’]RG)<Ëe Ù|uØ¥½ž7jó€=Jöˆtbe½­úø‘ø'c_å“÷|?,ö8£gÈãÊû 5ÇçÔã±—9)ßV•à { /s‘–ª¼°¿õ÷@þuÿ:kú{PäïQGÈGsUÔßͰûéé–R<Ãa©MÔ5ä³9ÃU›@jõMâ=µ ª6Ô¦û¥6Ý5mPµ äï«>¥5VÏßõ÷…ü}U;è#Ũ±¿/êï ùûª«÷sô@0œøûBþ^eÀg¤9ö÷Eý}!¯Î_ï}yÏßõ÷…ü½zò+6«s 'þ¾Ç­ú\¤žÇ-êq y\•ƒ–•n1ÃwR;û8¸Õ Çìãþ^±Ïí´ô÷'ûü€]*öïëëZþþd—صb÷9ÒY!èïOvý€ÝJv÷m7aŽý±{Å.ëìÎïvû佯ŠÝ.›÷Þ û`_Ÿ¼÷1FÝiDz3ìÔãPnbT=m¦3b˜æ&Šò|œ¥ŠÌN#fÅm*öû™ÐÙ‹Ï·Aìc”Ý´t‹× 'cG‘“ŠýÞ51«ÍÄp¢´(rR±ë¡Ûþ]0œ(-ŠœTìëšßóªR1œ(­!¥­ê¨×JÕ>Xi*-ŠÛ û3›§qľʱk¾+-œ ö1œ¯.†säqe/¯{Ó‡žÇ9õ8GWEÎy‹^øÉ.°kÅ®§o+jÅpâqŽ<Îÿ(;ðd·ؽ´º™û×asêqŽ<Îë­ÝµSCÑÂQÆ.Fª³ÂG£…EN*ö_ê›Í/ 'cGñºQÞVé錶yºh9ÎjwÞŽ¦ÖÑ]ä8‘Öý•}Œû׫òz²ÏØeœõ]ØÍŠ—'»|À®ãä++ÅpòÞO¤u'¯13 'Zw"­«žü¥óÍLèƒÝ>yïk”Ý´Æ–YNüENæÁ•v`8ö¸‰"'ûåqãf½ìÿ¤‘Ä.ÕØ_«:ñÇ!v­ØÇ™ï“‚7iä±[9öãÚMôjÌ&œ öU±¿ÖU. Ç6ØÇ¬:œÑÝÃN»˜Ù|Ù÷ÀÓ½Øæi-1b—Š=.µ±Õ³yZKŒØµb¿µrëÕUNZKŒØ­d?¯%u/Z8i-1b_±/ '6Ÿ|uRiÅ–V 'OÕÓβ“ØêÖNZ[8Q…ÛükÄlÞ·°³«œ4^7Q…Û,¢qÏŒôV•“Ƭ&ŠMç•NŠáäÉ£]ä¬rÐ.›Ö9†ã•ÕDYà¹xußÀpòÞQ.²bá©6Vš‹Dì:O^o£NÞ;ÚMH™›È]!»Ðµ ù]F}>îèíß…Îï‚”VÊ›}F:ŠÇN•VPnBªr˽¸ñØi»  v)ïöëÙ·´Nh;b—Šý”³[Íûd—صb¿Ÿ‡]½ÊF¡sb·‚}çØâu†áXmûªÆî÷»uzµ…B+Øû­²À‘º.`›§ó» ù½`—m•NÉͣ viÔÏ †›Wdóe¯NÛ”V1œØ<ªŸ¯ØÃg÷œ”Ðúyľ*v5½½¬Ð vüäË[‰Gº‘?yš ”“jU9ÎkiÕZ× ÍŠÏK¼¹É«—ŸTÍ[±ßû×y¯šWh5/b—Šý5(NüeʱÿƺŽVó"v«Ø£ºOh5/b÷’]ìæ³gót/ƒØ—”¥òXmhV±©²B{s-t'%¨žVÊ}ÜLw¬`£õ´ˆ]*öqïù`=£õ´ˆ]+v“Ù=}/4‡Ø­|ò÷N¡½¼ŒÐ=,b÷Šý×µ®ÓÞ©L¡õ´ˆ=äÍJù”V`8®ŸGì«|ò/}†GyX9Ëžzkî"iVPNJË{F,uË„ìJsRŠrRûëù÷‰áXm»Tì#Vw=¯4'…ØU1Åp¬6ˆÝ´¬§Û)-Ãp¬6ˆÝK«ëW¼(­æEì«b¿÷ȩ̂°†cÇc¯r_w:õÆNûœ(ªæÕÉOß 'þŽ"f*¼òa`8aG³ŠÝïuÔ½èÒˆb-»aËVÁ.NÔEÌ*v3Ýj„Õ†FÌ»iÙuÁ·”a8QÔq¢|ò¿áq´ãbrì÷Ûm¤µ¶y°û'O~•ìý“ÈJ£…øÉWîó{oU©´~^Qý¼Vq›3Ò ìXmhý¼¢úùŠ=lÏ„N 'jƒêç˱_këLTZ?صb=…­NÔÕÏkãì€a8Q¯Óònc«öq '6ú”ì÷^FOmhßľÊ÷Þ?'¥´z±õ?ê(¥´z_Qõ~És;¹01œø;ªÞ¯Ø_×ó‚áÄßQõ~ÅÛ-¥Øßiåb·ŠýWÜa÷üVï#v/߻ꖃv 'þŽª÷ë'o[÷Âpâq(; ÁsÉǡH©6¢…à ;ŠÛhUÉìçÖïb`8aGUÜZÞJ<·µa8±y5²ƒ¯i†ã±ª9±ò&/ݺm '쨲ÑÊ>¥ó=µ1Zو؇U§qOÙºe 'cû÷Y±ß÷‘g¯æäÉ>?`—rì:¶œ”`8žã»VìfÑÍ­5BìV²cÓ:Ãpbu¨ShÅ~¿cÅ{ùw£Bû0á}†›GQ£‚}Ü»ç5÷qF£Fˆ]ª±Û¥óͨ‘Ѩb׊=îZ×´y5BìV±ËXÝ>¥F£FˆÝ;VçŽ×uˆ=*öû-¥Öˈ!öUŽýåÔÆÂpâï¨ÆÌÊ® ÇÖid`8ñw52ãyØá„E¬ì<°nÞëº`4j„Ø¥»oµ…‚áDmPÔÈʨÑÚª>Éڠ¨QÅþz×0œ¨ ŠUì×àG³+²Ñ¨bŠ},Û:†µAQ£Î{_NÔEÌËÊmfÄŒF Å.*ö×jÃpbuhÿnU¥ÓýVsG÷ï†j̬¼µðØN¬†“±£è-nuÃÉØQUÅþÚ{b8ÑyTgeZ#Áp¢ó¨Îª|ò×Vz§qÖY!v«Ø_ûÓ†«CuVåØû]‘ÖY!ö°²WglNtÕY•V'ç6Ã. ':âuVö=ðn5£ñ:Cý.*öåcëé41œø;êwQ±ë[ÇHÁpâïè„ZÉþRSªNüEJ­ÑmÃ0œø;êwQ±¿Vy9†?‘¿Wý.ÖØòqáÄßQ·ò½÷ïÚ0Úm±?þhmã4Fí¨²±b=ÿ>1û;b—rìëÜz}†cGìZ±Û¥óͨ‘ÓÊFÄnû¹Y/Rê´²±{9öûmVgËßV6"ö¨Ø_{u†cGì«ûµºhv×qZW‰Ø‡—•NG·¹Ó(±£XeÅþù8§±JÄ>\ÿèÆ§3G§2+öó8·5íÄp¢uèTf9öe›Ç †­Cg+v»fØÙ««tz*±›7nö1 'V‡ºã–c颿N´ ­Ø¯íļõVNÏ„b›¯bV2¶ˆÙÄpbó(JìeÍÉêöæuZkä¨ÒÉ·]L 'ìèL¨¯?ê{à4râ(nã'¯³šNØÑš6ª³qo—ÙÒù •úYUìçáÝÛm‚ö³BìZ³ï3Åp¬´ˆÝ öKhmËŒ†c¥Eì^Ýïýmz5¥AÏŒ ö¨ÆþÕA®w—ÖƒÝ?yò«|ïsÞŽ^.2h//Ä>cò>'ñ¿ª|ù£ÜDÐ5m Ê‡(o)ÛÙÀ‰ádì¨ò¡b·¥Ý˜UÐÊÄ®{Üs½ŠÖ •ˆÝ*ö3®5m/t7ؽ|ò/UÜŽáDmPíAÅ~ùè¦6 É¿C›×2; ·Þüt/hUŪò´µEÈ'†v´ª ¯ª>äͱÓUe \dDu^fnq›áDëЪ²b×8¶³BÃÉØQ§‘rì÷“J½º‹ F»Vì¯ï]1œhÊWì¿ÎûµžÖÑ,0b_%{¿ShÐ^ˆ}Ä_÷2C†wcÔAsÐö2ûµ™Ðnw ;)Ä.åØM»1ê 9hÄ®û½â¥y7nÐ4b·ŠÝæ±Uy†›GyØòÉOÛ"¥ ÉÍC««²Bn7éÅ.‚î å"WÕqBc;û¯ŽßûB1ê5«]¤oìñ¿/T½¿&?±21?yÄ.ÕØ_{÷ †cGìZ±Ï9¶ì¿b8yï¨z¿b?¯½L>gŽý±¯ŠýUi†cGìcUUÜ—ÍÏÞ}‘‹îaZÏWì¿ÖyÞzsÜ¢{XÄ.ûëªR0œØ<ÚÃVìã˜Ý{FÝÃ"v«Øýž›hÚ<ÝÃ"v/ŸüËí6Žáx‹­®ÊIÉìÞB¾è.rÕ»ÈÿøûõŒ£ì0ó+Ö#B>6gúo/ðÉàÂ…Á« øõ{Ÿi…pcìáÎàáÁàá‹}øì¼÷ à÷Žà÷Žà÷Žà÷Žà÷Žà÷Žà÷þ.÷.ÞxïÞxïÞxïÞxïÞxïÞxïÞxïïáÚyï à÷Žà÷Žà÷Žà÷Žà÷Žà÷Žà÷þn÷nÞxïÞxïÞxïÞxïÞxïÞxïÞxïïáÞyïà÷Žà÷Žà÷Žà÷Žà÷Žà÷Žà÷þ÷ÞxïÞxïÞxïÞxïÞxïÞxïÞxïïá«óÞ€7Þ;‚7Þ;‚7Þ;‚7Þ;‚7Þ;‚7Þ;‚7Þû_àÿÿþýo\ÿåçÿû?ýó¿üíÿ¾ü†ûOø·ÿüûËcú­†ïq³¯ž—?Ìýƒ7pý ü›}ûwuýþó­¹ëùnñÀ¿ÀïaŽ´]½û%"óñÁ}“qÍl^âz›._ÇÓ>ˆgädØŠ7ðÇ;ºz/dz|ðÈ0ÜtñUÂÇ3p³8¿"Íß<žÜÍåZkþ»M/Îï´ÅnÏ!ÎñÕ:÷çU OOh{òÏ;¥!ûó ùÒ˜øó²PôäŸ×+^ߺ\õ1öç͇?ÿn —7Oþqyà5¦¯gZÃíÝOötý¬¥5<^lóñÁóÑ­Ó®åN OÆ×.ëñãŸ÷°Ý–Î+áé¾´}ìϫ̮7zñ./ïçñ¾D ·Ó~|ð|t—ÍøY[$«»Œs=žü³ƒþ¸Åy¬ÚežîHþñ/öTŸ³o!!çÃež=­t¤†§Gg3ôñèžMjÑ{×ä°âçèûoÁãÍ“6±»›×wîÙ‰ ÁŸ=Ë~Táñt¬ÎôÜ:/îÙãàn‡?EG.Ò±áyýÈñ˜&žç 4´„ûñFiŸGvУ{úÿˆÊãïXݳVþ¾^æÎþ|ï×s8ÆãÇ?«bÑ4ó û³Èîçß­áúf~ë(í£žìrþø :VëEPœG÷Ìô¿¬.žéP´8YZO)¹r»4ÿå“O¡ø‹}|_`öýÁóßevŒîɱâû^Ûïâ¹Ö‹Óí¬áëé1¡g‚Ÿ9+eQ³?—F÷:nõx|&þÓ¥~qs¤©lÉ|XÝi’º¶Íç¬áãòË8åa6ó¹4úùY5<ÞýøÕûù|À÷Eâƒý¹4úù „ç›§å6.3ŸK£y›ÓÞ¼¸çÒèç[´cu3OR÷o=>ð¤uâoÝŒ7V7[nžoØóµïáù*Ù¯o=>˜«ycóÏ¥2y÷èÒÒÈM­Öº)É/Ýíiuùr¡/ƒ¨áç›±ç¥Ñ{—ÑñæÅé|U <:½u>ÅJõåß­áöÆhµå°š¬Nõxzœ¦Uå½f_jøùò~þñAZ¥MK£oÏx| ‡MK£v{ÁîoÞ»EçÅ=—Fr›1Ï‡Ú¤Ö ó&æõ‹ËK£M¨ÓÒ<º´4:‡ëXüåƒ/$ÖËÜYÃß½÷çÒèç¡”ð´4’sÆcA>C:V—–F»Ù¤¥PÚðwìIG®¥Í­‹õfŽKK£ï·„§¥ÑþèÖìŒ}i-•©€àv?gâå‹Káèk}í-Ö・8.«yO«¿ëÍ|$kÖ5k£•ÝùþZ?þ¹8‰ûÂû´Çi;p_g•V's¼ùñ)*±ÂBÞÀßý9w^.sª•kZyN‘?ßz|àvyýÖËϪáï~|ºëvý”U³§í¿É:ǃ][/î9Ç] çŸj“ï’5›ž5Ü^lóñ§e¡ ©Çž¶ÿ/ðÕùñi–Ùö9Ë 'oë Ü[pO›‘íÅytÖspÈÆ#ð"žÖ‹kù(gXyÊùý€ŸŽfÞÞ?ºx÷Þ#½÷ÓäËäîæ2‘Š_Ûü7ìym3ôù䳂_«þ7bi32ÜÇ?¦ IB}=;ó¾ uzq–÷—uÌž*4.ÇH˃”Êýù †GZƒØw õûƒ<{]/è ûS.ÖHëyË»Óe×Ψ„ç­ê½]C<>Hsܵ+“³†çGwB,™ã¡ºjxR…qíO>îõÔCjøzÇ~v~|Žâoðçôã·kÝ]‡÷-EñÏë->Ö¦¼<Óž¶q-ÿæãOrqý³õØó&ôü‰|~Ìf\VóžžP¤˜ÉÑyt2^ÞÏãƒd6>Ïe5<©œ_}ý>ЎͧøünóÒztyº³¯W¬áç—Ñäqçz×w.MÐç8j‡Í›Ð¯!>>З‡RÃ-m³¯iâùãýùï^³õ¬Vãåý<>X/æXÃÏ7RiGžãóÛØ­%Ô9ŠÿeÚôÅ“kø»G—÷oÞ{Þ^¡ñ~¾™&üèø»Ë‹_>>°¬áþb›¢_o^\Þ¾·ùçÚFït}üøh¹LŠâïBv§žÖ6›PGKmžk›ûmZÍãƒÖüž¶ªû£K»S°ºXóÍçEÏ[¡~–Þî ã±Kuf÷೫†?W¾cÎï3ߤØÅ9V½›ð¼‡]*ȉ?×6×Î:F‡õ´‡ý&y|0Ÿëü¡rJ Oé<½ñcìϵÍW–Q¼†û ÉãƒôP®j½òT¡°?ºT”Æ>SZgØ3ÿî3ò.ƒÐ>_^ïョ/É’ó¬Çžj¾¿õøÀ_쩆ǛG—jÀ“ÏÛÿíÑ=Ö6ð½?Ö6×üzÉÂÃa]fÇæSô@®åУöÀŸk›kQy©Jýâk›W“ç£ï=lÉW“ŸZî±¶yûsmóóLK¸¾{t:_>¨áòÆhU;f“ƒçøÞ›|sÐcÔQbOÁ‡]mRðáûƒ~¾¸õ?>Höq\;ûúÑ¥µÍÎn)ÿîKFí°¦o\&…>®eÒioàé …ë£HÌSí°ù9ù&y|f¯÷/¹í6Ÿì@*sxæë?>ðŽÕù;µy¬Z \øùžjtÜC¸%<æ›ÿXµÀú¢ Zcxc´Ñš ã|#Vëè8ìšo]ª*¾N+ß{ä5ȼ–Sþø Õ®É1ÖYó[/L‘—_ÿn Oky­|ðÈËŽ¯jxzï:ìxÂÓ4qè›ÐG¤5ÈeZþ˜ #ØG\®øæÇÇ ÉãƒÕúñ9"Ç£Â-Ò²Cï]$Ê÷i "×:鱲мìøz%5ˆÎ{OkËG¿ƒ ßœ/ÎPÂóäÞpäa´)ç~|Нìr‘—ëÒ‹7ìúÆßõÕk¸¿1Ú¼ìx¯6y ²ÉE^v¼w{'ViÙ1íþðj¸¼yq¦µIkký¢þð÷´ìÐkM\'VÂÞ‰•åRäkÏò†ý|óäӲîÕf½² §6ÞR›´¹¶/ç#byÙñõA ®AvOËŽïgZÂc¼qؘö´y?—ÀãÒdÿñGïl>ZcÏk=-;{^ƒü ñŸþõÿýÛüí¿þ—ÿ0m!ªìDyLP-1.10.4/Data/Netlib/configure.ac0000644000175200017520000000451113374041214015427 0ustar coincoin# Copyright (C) 2006 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: configure.ac 494 2018-11-17 16:32:12Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 ############################################################################# # Names and other basic things # ############################################################################# AC_PREREQ(2.59) AC_INIT([DataNetlib],[1.2.7],[https://projects.coin-or.org/BuildTools/]) AC_COPYRIGHT([ Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License.]) # List one file in the package so that the configure script can test # whether the package is actually there AC_CONFIG_SRCDIR(configure.ac) # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. AC_PREFIX_DEFAULT([`pwd`]) AC_COIN_PROJECTDIR_INIT(DataNetlib,2:7:1) ############################################################################# # We only need automake to generate Makefiles for the distribution # ############################################################################# # Initialize automake AC_COIN_INIT_AUTOMAKE # check if ZLIB is available, in which case we do not decompress AC_COIN_CHECK_GNU_ZLIB ############################################################################# #Find out what the data files are and create links if this is a VPATH config# ############################################################################# AC_COIN_EXAMPLE_FILES([*.mps.gz]) ############################################################################## # Finishing up by writing all the output # ############################################################################## ABSBUILDDIR="`pwd`" AC_SUBST(ABSBUILDDIR) # Here list all the files that configure should create (except for the # configuration header file) AC_CONFIG_FILES([Makefile coindatanetlib.pc coindatanetlib-uninstalled.pc]) # Finally, we let configure write all the output... AC_COIN_FINALIZE DyLP-1.10.4/Data/Netlib/pilot.mps.gz0000644000175200017520000062206610430174061015440 0ustar coincoin‹˜K®9pilot.mps”ÜÉrÜH’€á{›Õ;ð8s˜ž„ï~¤(j1®FR­™÷‘A%ðGU×)@ÀðØ>$JÀãõÃíÕúßó÷û§·÷Â,¥×ÿüõ—ݾ¼~z¼šºô¿ž>_érôÕÃÍõýý÷×·Û—¿þñòôóõ¯\=^]Ý>~¾¹~žË÷WWŸ®¿¾œ¦_å‡Ç¯kùæéq-y{[ËÏÏÛñ7(¿Þl±·Ûßßî×òã—íï×7kùíåv-_¿nǼ]ÿÄ1ŸQ·í˜/ß·z¾þk;çËë·­¼ÿùÞ!ß;ä{‡|ïïò½C¾wÈ÷ùÞ!ß;ä{÷ÆúlùÞ!ß;ä{‡|ïïò½c¾7O[›ß¼½måë›­µ®l3ãá£øÇ+ÊkoÜܾ¢æ-´ö¼un×yk>1Žœ·ŸÖšÝ{[÷Ü¿¾¢üôvÎðûí+ZåÓíçëGnlµ{9w¯mÏÓ—›Gnl{¾Ý fÞØöüüöúÈ œííå‘ëž×›×oÜÀžë›Gn`ÏOÆüdÌýÛ#7°ç‰{ž¶=7œ7œ7ŸÐ%7ŸÐ¢Ÿ1Ç>cŽ}Æ©>ãLŸq¢Ï¯ÿ»Väþúöu[/^~lóùy›'Oß·‘ûüô²b”Ÿ>oå¯8þëóö÷g¬õ·/×kž¶uíþ|Î÷ò×íï?ž¶óÌ—º?—¿žËïufynŸ[nüXí°ÚaµÃj‡Õ«V;¬vXí°ÚaµÃj‡Õ«Vû`µVû`µVû`µÃj‡Õ«}°Ú«V;¬vXí°ÚaµÃj‡Õ«V;¬vXí°ÚaµÃj‡Õ«V;¬vZí´ÚiµÓj§ÕN«V;­vZí´ÚiµÓj§ÕN«V;­vZí´ÚiµÓj§ÕN«V;­vZí´ÚaµÃj‡Õ«V;¬vXí°ÚaµÃj‡Õ«V;¬vXí°ÚaµÃj‡Õ«V;¬vXí°ÚiµÓj‡Õ«V;¬vXí°:`uÀê€Õ«V¬X°:`uÀê€Õ«V¬X°:`uÀê€Õ«V¬X°:`uÀê€Õ«V¬X°:`uÀê€Õ«V¬X°:`uÀê€Õ«V¬X°:`uÀê€Õ«V¬X°:`uÀê€Õ1X°:`uÀê€Õ«V¬X°:`uÀê€Õ«VÇ`u VÇ`u VÇ`uÀê€Õ«c°:«V¬X°:`uÀê€Õ«V¬X°:`uÀê€Õ«V¬Z´:huÐê ÕA«ƒV­Z´:huÐê ÕA«ƒV­Z´:huÐê ÕA«ƒV­Z´:`uÀê€Õ«V¬X°:`uÀê€Õ«V¬X°:`uÀê€Õ«V¬X°:huÐê€Õ«V¬X°:auÂê„Õ «V'¬NX°:auÂê„Õ «V'¬NX°:auÂê„Õ «V'¬NX°:auÂê„Õ «V'¬NX°:auÂê„Õ «V'¬NX°:auÂê„Õ «V'¬NX°:auÂê„Õ «V'¬NX°:auÂê„Õ9X°:auÂê„Õ «V'¬NX°:auÂê„Õ «Vç`uVç`uVç`uÂê„Õ «s°:«V'¬NX°:auÂê„Õ «V'¬NX°:auÂê„Õ «V'¬NZ´:iuÒê¤ÕI«“V'­NZ´:iuÒê¤ÕI«“V'­NZ´:iuÒê¤ÕI«“V'­NZ´:auÂê„Õ «V'¬NX°:auÂê„Õ «V'¬NX°:auÂê„Õ «V'¬NX°:iuÒê„Õ «V'¬NX°º`uÁê‚Õ« V¬.X]°º`uÁê‚Õ« V¬.X]°º`uÁê‚Õ« V¬.X]°º`uÁê‚Õ« V¬.X]°º`uÁê‚Õ« V¬.X]°º`uÁê‚Õ« V¬.X]°º`uÁê‚Õ« V¬.X]°º`uÁê‚Õ5X]°º`uÁê‚Õ« V¬.X]°º`uÁê‚Õ« V×`u V×`u V×`uÁê‚Õ«k°º« V¬.X]°º`uÁê‚Õ« V¬.X]°º`uÁê‚Õ« V¬.Z]´ºhuÑê¢ÕE«‹V­.Z]´ºhuÑê¢ÕE«‹V­.Z]´ºhuÑê¢ÕE«‹V­.Z]´º`uÁê‚Õ« V¬.X]°º`uÁê‚Õ« V¬.X]°º`uÁê‚Õ« V¬.X]°ºhuÑê‚Õ« V¬.X]°ºauÃê†Õ «V7¬nXݰºauÃê†Õ «V7¬nXݰºauÃê†Õ «V7¬nXݰºauÃê†Õ «V7¬nXݰºauÃê†Õ «V7¬nXݰºauÃê†Õ «V7¬nXݰºauÃê†Õ «V7¬nXݰºauÃê†Õ=XݰºauÃê†Õ «V7¬nXݰºauÃê†Õ «V÷`uV÷`uV÷`uÃê†Õ «{°º«V7¬nXݰºauÃê†Õ «V7¬nXݰºauÃê†Õ «V7¬nZÝ´ºiuÓê¦ÕM«›V7­nZÝ´ºiuÓê¦ÕM«›V7­nZÝ´ºiuÓê¦ÕM«›V7­nZÝ´ºauÃê†Õ «V7¬nXݰºauÃê†Õ «V7¬nXݰºauÃê†Õ «V7¬nXݰºiuÓê†Õ «V7¬nXý«üöôý~ÚŠ²u+þúwhosëO[Q¶¢nÅó±·7ÓZ’µ¤ké|ÜÏõ¸Ÿëq?×ã~®Çýx™Ö’¬%]KÛq¾–â¯ÌMóãáñý3(ó7_žž>Ÿ¦«óGP¶Ï¬üótJ«ó—O¶¿O~ʨ]øòÝF{LKøòìp™w]†|€‚WW[®þñ–mÇýó$“ÿ Ÿ§Þ·«/_%AôäªËÕ—Ï’`Gx„í—0|>U¾­d¾|ƒd¨üIì·Y]†_¤¸d¨Ó¯£¾=½Eã(Å“VÕQŠ§ÌŒ]øeŠËQ‡'Þ² ¿l™ê£{ÇÜç¦öáË—Y8†:þÜBkøA }<Ž~?j^ó_†à{]¦Z¾P²í˜æ«¬#x ÿ»CpéŸ5Å—Û›nÙwCËÇÕ—/Ý\ÎŒ]øeÿÌc ì°"z¾¨=Ù¾|7‡çg@íÂ/{QçYZêŸ5üp’6縜W†`GŸWáè¨Vß…/ßZ¨y žsçyÝ*ã2üããC"“ûqå§&©œ§ç¹óÜïÜ-2í—F +Lž*¿ô\ﯾ|7‚•Ÿ*ë·Y]†ïGð§æ,;Hqia›ŽR<ÕÔ¹ ¿Lq9jßqï+LªìÂ/{Q¤»ŽrŸ¤s_ùåk¨û%ù§ZÃZhCË!G™Lâ¢çF°¾´´÷eøß‚ïW÷ž8Ëä°æv˜Î+̰#J÷á—ý#¦a‡ý±¼7†_ôÏL¤JœW˜ÝØÜ…ïF°Ï—ùSÿ¬áGýãáçF‡!¨>Wåà7Ý…/oˆ !';çΞ~Ú…¼ÒÌLjÊc@&™†»=O?V˜Þ¦w¤¸î×WÝüæ‹T~:Yšï—·ÝYyµ“ý6«Ëð£Ý8ËS<Ù÷¥ñ4váË7ÐŽ*þ§ZÃZ¨KÄáœï·F·f2—ìËðgNmœez4ÒNífçfœX·@‡CPÒô¸"jÚ…ïªÎ?AÎ+ÌÐïš»ðÝ6ïüSÿ¬áGýsî"ì¼ÂØÐ©ë=ŒqtÌC{Ú…/ïµ aÛ= wÄiʺ ÿxG™˜õaåO]ÉIjçéÇð)SúÜïÜ‘ÞëýÁ¾¼ ;¬0©qPùéÔ1Õ.|yGwèŸöúmV—áG)æpr˜âi>•¥xª®Þ…_¦¸uØq²Ý¦mácC¼Ï9Ê}2QÝ…/o.£kžäl¡5ü°…†%âpNšº®0†¦Ë}þw‡àrùu.³Ì»aþEÝçf·c~Ù?ó 1éñÄš'à.|7PíãgèÇ{ôÌJçôwỬ½øóÿöÏ~Ô?:ÜEøy…ñ¡!Nµ>‡qŽŽyšváËÛxWcKø9wž7Ä×'!køÇëcÌÄæÛ¼ãÊç4Üøyú1|º޻rGVK„Ÿ»wŸçO•Ÿ&íñ1ŽŸû‡ájöÛ¬.ÃRŒá9ÌaŠóJ=Jqî]‹]øeŠËQûŽ{¾3M¾ bù=¿­0CÓYŽ¿Ñü¼Â°çNøs ­áG-´Î²e‰ð£LæÅ.×ç0¾­0bqʺ ÿw†`ä0Çý·Ýp^a†jÍ3Kwá—ý£ï7Z¿™Xã?šeó £·¨ËÛ°ü 1OÀ}åÇ^|¿¼˜ÿ©Öð£5x|Tç&®Æ&ªó \aò4.ë@¡:êœ;w„yí®þñÒ ¯þþHõ¸{]†&ÎÓ™ú$ëcPî¨yÈ.|yjüßqPùùÞ&|¾¼5Þ‰ºü6«Ëð£s˜e‡)ž[h—â|Ÿeµ ¿Lq9ê°ãT¦Ø…_ö¢Ìƒ ö¹¿?£Ü‡/o‰q…©ÓŸ[h ?j¡q…9‚«W˜à“Þù‡ ]†ÿÝ!øqùa‰ˆãn˜ W˜qp©Ô.ü²4³Žû'¦°]øØ?Ëóñÿ*–wø¸Â„Ûþê—½¨“zü©Öðƒþ±æxžW˜¼‚ë=LrtˆFï—7†ÅS¬¹'뱎Ž5üãŸê3‘ŽåaöQåÇGµyž~9¬0ë ÃÿGÚµeÕ‘ëЩ0Xå·ýÙè„E Y!›ùä–«ÊI[HýÑí³c—m½e)»”­€oO8¨»28¹ø»U{+9 øöŠƒ«!{õ«8}âB8 üÄúô‰K)VÂù'n¿‚çÜ’œmÄÊa²‹èÛMHÔM‡™~eW5/æ÷v¨ÃÁ¹BbIð š`B×aÒà/ÎÚL¬Ï^A—ˆ‘à1äÉ“¨£ŠúZáùøªnÃó‰KtÎ/êºAGò;ýw£]I@Àù)Ú²ŠÒ÷ΧÃáù“‡Éô .]‡É3‡Iqñ¾åkãb74昭M¾'enwe Å/D Èü2uDŽâüïæõ|¬€o‰çä¸!æo·Þf#à[îùÌaÊj&©_Åáè¡2ð‰UŽ.%¢O4+µ.>±þ œsÔÌÉèmÅ¡o7Ñ8 ß2ògS¬1ïíP‡ƒ²…è0à n,&¤ÆaòÄaV%šZIŸ½‚ÖÏè–ì‹k†ìPX/àü|ª•“àù„⃀ó‹ºJ¹=Ö·½—PÈoÀù)Úu‡â{çÓáh‡2¡ñÒ8La9!©q˜r3_KZ:«-4›Æw ±xqq™Ã÷´H’5c]ÔL<âé-ü á/qøßæœY´º´ã-4r8òéâMƒ9ø–1KäO~LñUŽ>1K~býÇà'® ²O.>±þ œóÙ 8݈MÊ9ƒ¾Ý¬Z¸ð-xºBÆûðîu8òÃXbæÀ+X³nLã0eâ0"Zý™+¸ù1©#¥ cX9Œé~±,çç³îO°ð|B¦ ^ÔzºÝJ"—F.ÀóS\å¨/ïO‡C"m;ôøðß=LÛîA|/éæíñçï¾uÁš½5KH'óø~;:üz敞XçcÎ0ŸÌæ¡lw8OK2«²lÁâWUº»å«’XWƒ‚7mlÛ`sP÷צwsB¶êkœ3Ö[ÌeH®‹Ø¿žx¢ç­F»—é{È) ¸H2%°øš1×…ÜW-¯ÈÄ´ûZ¯.~Û`çÖåø^ÈuÛ!×Ö8ÇuM)>·ê¨Æqøõ¸û•´ kŠV/Î,VÀyê‡]y–‹_ÜÊÄœ¥M Ók‹ß6DœêûÓÖ"NÛù¶F?k*9ù‚"Y~%?Ãá×ÃŽJTyO\É0˜ê¬Î#ßÖ$‹¿ª±CUùªD•+tïÇL· F÷uvðU‡û¶C¡­1Ìü;-†¢¼ Ésøõ¨‹T[íicIÎ¥ à<ð·^ÿŒ¿®Üd#àìKV.ü»;´m0ò˜×MÞÍ߸íPlkŒ3÷‹‡Þhï†éðëNg=¦UR¸ÒW]PÂ…ÇÜ9ƒ_3«) GYSV&ü®Ç|Û`àn©{”†CWs·l;”Úgoš[yAnFH¼Ã¯ûÜt—êʇ ô$®Ö®pá0\m~´øÅÆä$œíP5ØlyoñÛk³â³{×°íP—³3ÁÅõ|‘룷~Ýå x”ª`ƒ‘†ú¶ÃQ©=¾ñÚèÀâkFW4ξd‘©„÷¿m0P¶ë?P†¥)ÛÛ•¶ÆÙ–ò6Žs'&D Åqøu‹K5¨W£Áyd§ÔpŽpnôÛ`}‹ß g_b[ù)‹ß;ÂÒ¿†Ebî䛟uñ5'ŸÃ÷–Èó¯Ì’˜6Uâ}êîÊ ÎÞUC}w&üøÁ_-FÂå»—t¼<¹gË*ݘàüY†-þgÖ&Åä«Rãí|k_Lc}ûåÚzÏWv%_ go?VÉ`ƒæ“­BCî<ûa¢q6ŒŒÍ-ÛpÞ:þöÃl}­¶…•;ÏíÈ%éÐ[WOQì<·Ñvû⦵xäבÃÿ¿Zt(7­Áñü¿Úô|O‡ã5î¿zìÿð£J?‚2œÎÉd½¿v·#𫽠Ù"áìW« øÕz Î À¸¼_Ny¤?êP¯p°rDäìâñS54ذ4Ñð¨À1 r,äÐ_„=ê°c<$¼\<'€UùÛs$ø(¶î¯àñCðµÿêëÇy»éÙ _¯ðvkl—v½µ&D ç¼}• {*„¸ÚU}pá]*æˆÓ°«L‹_Õ«m‚K»e#x{(¬¿^ãíaÏ´W{¤CÕ¯¶¯¹xÈ5–G*ëW·¯Æmðˆ·§‘#ñõÊÕv~¨Ctç ˜]\mv›rë×MU‚–b1ïü7NÖËÎe¬„-.-&€wîüÑzœüõþ_ºÇ¡ƒØß¯ÒgVkÚu·í€ }Æ…âá7ÙI¸¸óÑî ºôÎ×{³tÏô€svîŠ;¤»ó«1Þíµçw¾¦‰:tçWE´ˆ\ÛÔL\x›ƒéï\¼RM®x|›GÜoÚyqµ½)è6—`³\<º´ùæº0àui¿|ÿ}\y7kܳàؼÉœëÚa5àu4¶ç¥Npq7Ý‘{Ï•p£„³»¹?­ƒÚEt!I8¹›» ¯cUâå·3]®~cr’oºH8çÇ«qêT¯KiÐOßÝñªI\Ú¼4'êç—¶æëÁ7×¹ôtæ .ªOnc[é¶w¾ÕTaºú¶ø­¾ ã•QÀ·Â+ôW›ûm+Õc°ûmÀauEçO§‡gVyBeç«ÉÜs­Ð;œ"Œd–”š8Á9ý$C@Œ:ßœóìün®³À‚&§& '¸¨ŽŠ ðÚØàä·ó;dMÜÜŸL91맋ųóÙS7®P«5±»Õ[ýéûýÌ©n­»\.ΧfDZ´ónTL˜à\à­<ÁCõm5ø£„ Þa–‘=ÇŒîfVÍp~¼~ À4ß^¡4£n‚‹ãuÞ8¨˜oÄ΋ãMG~” Œæþ÷Oßïg¦ÜƒãGâò ¸>&]2áàIÂ%“—,áü|–p¼p;ocó'MpSN6zt›ñâåÕ6kÿé¼à™r…kàÀ68òôï0¶—NàüLÆ)$= i‚óãõ!%¾Y…‰1.tÄx¤H®°$ ,b5졎èC^$\šËž$€tÄ àHGÌØ"íµ¤þô}y掕+¬³ ¼’*ApÉ vnF†Ãþ¤¹˜9Ñ•]ççb….hD­—j™àÂÃ’…Â~Ý5à?C­ÜCQòÌàIxû®+lÝ ¨ÁÕ}5¾µ5`¿rȽiCZäì‚©˜4ñ͇.3>bx%h8\ú+\²Ð×k­rél}Ä Ÿ¡ˆÅÞCôn\g*óây¨!E‹Ãµ±G\úG pGÕh¾5Ä òvw¶lÍ1˜ .®`1Ê­›t…¯m2xEò›Ö2Ã`›½Ãù4õq}PìÖá‚mûýLw~¾uTÆmÕY\Fª…‡N4»T¬€ vžãx GfO¹óãÇ\Q¸‚pp>¹ ².>oœF¡Ø3w†)ºÂVZ©+c$…}6¶@Ý(^5Á×®¥äùìe_Äâå£Öhô¨Õ¬L»‹Ûççã\ܽYˆkK88 ÙnȱI.ÎÇšá}hëÏ~µàkÍ…pjØ-uœâ³t?ü€Ë”K±*¸ªSEÀEˆiÉ{¶„ 1•áuú­ÙÖçT°#0 /óoÕô6GtÍéÛ‹p5U s…åÎó+X³˜``sÝøî¨¶®öGbÖ¦¿i½’(euûÀÁ P5乃|ŸRpŠÏàÚ.õŽ]Çw¾¿ƒxzmŠHñ¹ÁªÆ”!4à2 ª/¾ˆëõ\&¸Lü³›ÀYL6öR+O¯ÍŸÒ\nÇ-¾ Êů'¢Ùͪ?™oÌäjÜ vÁfoƒbvc—gp•Øü}O¯É€<ˆcv˜ ÁáòÛÍž~&¿}¬~zmœ Dão ÙKgoƒröx†³»ÇηÙïµÙï¯Í~¯Ín\Ù3„DŠõæ¸\£‰¥ŸOcÖ æx¬#9¤k§ÎgO-ëklB„®ŽÙaL‹ÃÁíÜͽÂO?Ÿætöí(4Âá[ÿFµS4àuÇÎÓŠ€ËDù²IByp£ÁÓkó…7þ±xèßçppµsÁ—+vŸä€òË-Ýaå\‡(†o¨nà㪙ñƒàr™ÍÝ.ÙîÒ›O¯ME.ÍcvèëäpðF§Xüíµ*H—‡„»×^ }®¿ù|ÊÌÿøÈ~V³Þ¯Áµâή$’~>ròÔdÊ«çÞs³Ôœ¼kð9óèñóp-1棳ü -9ä |¥¦þÈìÏÍIpÑ·®Ãå$·œV²ô/”»@šÙ²’V¶¬¥~éQÒÊR)ie;ÁZ–^ÞKZÑ¢­´¤•ígiæÄ(iE;üÒ’V¶“ )í:—´¢_EKZÙ~çé$SI+;'e³’V¶_ÚùW¤¤Õ<ÀKZÙ~ëhí©¤•%¹d´¤•í–ïŠõŠ’V¶[R´ùTÒŠÂiI+ÛÍtzëî¶äé­6„{ïÒ‚ 7£‚„cèÀáÿA8)ieç¿D~ø?÷ïÃñ'Nµ‰,ýKL ‹UIJ7€ÊhE,z ´"¦R‹P/«ˆ…é‡TÄšxE,L?¤"–¥¡õ gͺçŠX3ýðŠXˆ~XE,²xV Ó©ˆEŽVÄÂôC*b±ƒ‹bëþŠ~ÏÑÏã‡èçkûúqÉ j)’e.¨5/¨…% )¨Eþ]VP S)¨5ð‚Z2hA-*ðhA-M²Lµh‘sZP S)¨E®6+¨…% )¨5/¨¥PÆ\P‹î|³ ʘ j1…„Ô:vþç SA-zŸhA­A\Ú—ÝyL?ïÌ^É’¿Þ'VËJ’aõ¸f1!êqY¨ŒÍõ¸èì¬.À?×ã"Ëâõ¸,&¤•2¬—E$Cêq‘ÛÌëq!Ê õ¸œ×ã²Hfz\tOY=.¬sÍõ¸È¿ËëqYíÎç›ë:È€ÿÕð¿ºó[i#{¯ö\Î˲„('àÜÎ å¼È…`å¼ì ¼Ús9/ªÐr^ö\mZ΋-çeoäÕf弘n¾)¢´œ`å¼ì ’¤œ~´œ—½Awž”ó"‹gå¼ì ºó¤œR´œ—½ìܵU¶ô>¶w¾åú1;e”ó² ¶nËõ³$2z ‘^.zqî€.i9¯mì™R†. D9/MšÊyQÛ–ó )ç5ðr^ÊÝœËy‘sgå¼ðå"å¼(YÓr^X‰ 弜•óBçÃÊy±»EÊyíÇä°nÔñr^˜¥‘r^DD²r^ˆ©°r^än²r^Hyd弘ÔóRÜs9/òï²r^ W˜Ëy1‹ÔˆÇKÊyQ„–óÚŽ™7$£œì<«ˆ¥¸£ær^Œ#f ççCÊy1QFÊya’!å¼Þ_¼¼Ú´œ×¾C”+\ãI¬œd*´œÕÒh9/¼Á¤œÝ!ZÎ û+H9/2;+ç¥ØEs9/BÖ¬œæI¤œs‚9;kS9/:@Êya–FÊyQŠ£å¼ösgþØ+~*VÎ ³4R΋² ZÎ ii¬œ‘E¬œ>wR΋,‹•óÂz)çEµ?ZÎ Ñ%+çE9"-ç…Y-çEÏ=‹ƒƒŠÎ\ë`|=^^ÎK9Þ¹œ—ei9VÀñÏå¼fvÁËy!%œ•ó²,?< ¸ð©Ì弨@Ëya®@ÊyQfEËy)Þ’¹œó9;g*¤œuíÒr^*S™Êy±k#g2ƒ•óÚ/7’tuˆ•óR.×\΋ì<+ç…e)çEZö±r^šÛ`7/ç¥Èô¹œóWr^Š“z.çE.+ç…´)V΋Ðr^ ë!弨Gˆ”óÒXÏT΋m)çµ_ºóWœa¼œ¶_H9/r!X9/tmX9/sÌbñüÚÐr^ìHH9/,rH9/2ÀÊyaU”óâñV'·N°ž©œóÑ%ùíÒÆšËy± ‰œ°ž¢_´œ×ÁmØ_á6´œ—b|Íå¼(C¥å¼Y4—ób"’”ó‚¶-çEe-ç…¹ )çÅè”󢌔ó¢þ$ZÎK1ºI9/ªpp‹Øt µïË3Ý¡+çÎËya1AÊy±ƒ#å¼°ÑMÊyM¢œ>8RÎ‹Š ZÎK±Lær^T?¦å¼zŸËyÑ—–óÂôNËy1“EÎŽì'Ï]–ó:œ-"?•f¡Ž&ZÎK!عœ×¬ðr^J {.çEz³r^J {.çE¤+ç¥8[ær^„×±r^Šî9—󢂖óRè}.çÅL–E‘4½! ¸”Ã!Ô·õ™y³ôÛÁËy)·c.çE¥-ç…¹)çEŽ–óRØù\΋8[X9/¨DÐr^Ìè&å¼ì\΋òyZÎK5-¦r^ŒÏ;—Ç;L‹þaÏ\®‘<4"àÒŸ4—ó¢j;-ç¥Ú£œMÁ¢å¼0ï 弨°§å¼ðñ’r^L˜r^ŠŽ8—óbnÈ$á‚EÌ弨AËyi¦Å\΋éˆAÀ‘Ž˜±Ìˆv.ëtpæ¸Q¹/ç¥øçr^,q‰”óRüIs9/r¢¬œ>8R΋FÔh9/ÅÃ>—ó¢Á ZÎ /çE.ˆG¼}*çE .RÎk‡o弨¯roòr^ˆ©Èr^Mf<|Äð”å¼Å\΋(c¬œ—‘žËy‰ô —¼}*çEójh9/¬r^ìr‘r^H%`弨ó:.ׯolïær^LWp*çEH9¯^Ëy1ml”ó²Øfïp~i9/f·’r^-ö¤¹;¨Œå¼”èÏ\΋h’¬œ—ÂÎçr^dvVÎ ³sZ΋¥ñI88ŸQ΋俰r^Š®ÀÊy¡«§×è ²œ—"ìçr^ìrr^ מËyÑãMrñü|h9/rëX9/|>´œãÚÎÇB¶ËËy)çÃÊyŽ›ß÷ ¾òr^ÈßÇÊyQ¾IËyi ŸS9/–FAÊy)!¦¹œÕ(h9/l’r^ÌL!å¼4¦?•ób!&RÎ 3}R΋rZÎ Ú´œùwY9¯cëj9/K´©Ýﳕó²4›QÎnðT΋©òÜE¾ÏJZ¦øØdĹK½c.çų×H9/‹S|n°ª!ÊyY˜•mö0WÖt?ï—yƒÖ”ÅdmwÐïõ¸,Ns¹A7¶ø6(ü¡ˆþ2œâŒð·_V<Øèýáë/ÔµþøMHÑ·›d)&fq¦È bVìÛÛ øöújÊ¢ÙW%<¦¹˜ÅYS11uö6Þ”dàÎ×'.v~é!1Çc†Ö¸çð=‰C\M‘pzpû­Ý(îßÿ¦­;êbd\?=ÏÏ,Nw¸~…Q/ o°-_m“FI«l‹Ã¦šTÜóFÆ”1²È'øý?ßÄÓ!ƒIÆ' ÿ÷¿ùW·•€ðÕ^UZ+ÎâL„dšsÂÒv~5 £qµÊŠ€p I°Àg»Gö¿ó«Ñîü‰Ÿm…-åObëÖ_ñƒ³{&µ¤Œb-‡Ëó©Fô\èÎâ`þT'O=Ÿ6(Ãeçs.yGÜ£4âÒ&?Ⱥÿ|cž{$è]~þûÙà­³fœ«©†  =ùS·® Ê­[Õ¯\ÚAÖ¸vÂ\a= ß¾ÚYÐûv¹œ Îvh³‹KZ» ê—ëÜ R+çPÂÁ­³FÀ)‹˜’aäÇ\np\‹qAp/.—Á\ÛÅ?½<‹|ýQ`*y;Ž÷D¦ä⇠i§Kq;¼—«Á%ëq‹)s­E‹#¼S¥Gõv´Ay \Øs*„h~ìP‡ÓK°S@RxRv.©¬ìY ô|vÑ\J€#’$ÎǺQ±Áå›nïu&-¥Þh/žY™J…A•㓤ŸT\’‰ßcm€Aªj.o°M~{žJt6à §"™ê··A Rg«|{ŠAÀs>Ü;bSŒ“p¹Cýv¼ U=s8º>Ì•8-޵Ý@å(ä©ÜŽEщ—œÄìÐèpÚ%TvDú€\3bv)à«I6ã'MqÖÛ×p_OÅF¯ÄÚíXü–ø$ïfì9c{µP‹}»S±QÝ ~zÕ¾Ý$xî.ø’æj¡{.§b£ºÚò[å›ûöŒ¯%áVÏÑN6²‚Ëݲé…Û)sgãpÕµ 8>ážüènËìßhŠƒGú+Ûá‰Î~g <Ó-áÿÙ€_ä'N‘>òU·w9@x ¿ }öH,†ÓO¼½ëeë2ýÿ‹„‹kíÒKH8–½S ÜS_‚ïèI&GT]5½L¢Ù\ÍbðÌcbØsi–,àõWŽ “Ü‹xX „ºÆÝÙ_"Óv-„ÓO<²êýªÅËÙÛu÷ÔGÀ·×_yfÈux`Jž=²5æ6À¾Ê`8ûÄ¥¼ã3ðíWŽÿª xšóâ „âÞñ¾Ïiè6`8ùD»{H¶Ì“Û¹¿¼~Q8mM¬ÎˆÓÖlAWýåÛ€Æi)rÚ: qZ ‡œ¶hœ–Â!§½âìð‹üÄ);Wã´9­øª‰ÓR8ä´â«&N;àò­ùáœÖ•‚á„`3rZÛ c0xd>Iƒ9m¯êÁà”`÷rÑ ÌÒ»åLðú+ÇÕD áfKX E¤·ÙAx¢WÛ`Yߢðûﯚ1R&hŒÔT"Wêۀ&")ŠÈ: ‰H ‡"²h"’¡ˆ¼ð‹üÄ)ÿE‘E¤øªIDR8‘â«&9à2áHâ"2÷0÷4w'{("½ëZ%…SžTlÆ"r) Ï̳›Þ‰Æ¸ ØíWˆ`½÷ÃIL>!‚­9ÒžÀ#I°66ÏIM PuZg°N»¤ö„dÀÕL„m@#X ‡[4‚¥pH°u@#X ‡{%bÀ/òoG†F° V|ÕD° V|ÕD°®æ€‚­;@‚­•& œÙÙ{¹$Ø¡S¸°³ß‰"Op¡Ó¶d=¡Ó.É&7ÌY‰uÚÞëÁÙ'fE§]¼pǵP§­μë´ã‘&ƒsïÃ:íb„#àŽ}â¡ÖÏœNÂK0Êm 2½ÎA8ûÄØ¼ì«‚‹¼'Ó€pÏϧ °ƒ‹ÎÎæ6ÀÎ@8?8%8çº7àÂY޾=©­C!œy¶’‡ÆÈ(RÎàìÅÆÈ"‹#uÂÙ':ƒ‘^J–ÁÙ'ÆŒ‘0+`ŒuŠõt¹YÊü7é6íWmÀßБáþhé)I‘ ,>Ax¢¿Ú='u ÓElÝ·ûï_Ø'Ú-ë}p|Â=ýÕ¶šm€}•Ãpö‰›¾ °¯²Î>Ѽ—Á8àB)Ý~…”ÒUpGáän®R 8àÅ/Vxñoià‹Â¹?h^ü áï{ñÛ‡/¾Šßáô÷ʬԚ8¬†á‘ ^ñâ{ g¦…Ź`ãµõ€KÓbÙû{/~¯NÂàTÿŠ[6HùL‹ÅFlM z»WӥĚp½Ú€«/Í·Íš phMÔÍš phMÔÍš phM\y&?àù‰·ã•½fMP8´&ÄWMÖ…CkB|ÕdM 8xmípj‰íôœj‹Ç¹`¦?Õcp&"KP¼øÝ¡p."±I=r5mлÓHîðÌG!œéÝNQµ‡{†ÂwÖ+ªv]1Ãy†Bð g(Ÿ Ü3£AÉPp‹pö‰ãuâê&„sŸbžÒä$\ºMÒÂS-øvá6õ‡-#<¥&; gyŠcv–š%\­kQ€pJqÎv8¥¸Ð]’Î,Ý£ Õ:¸™áû•¢¼þ &sÕžÌ!&sÕ-™‹Â¹¥Ûg×’¹\ú»]LØÅÎ]湵π‹»ÇO(œù»½æâvxö 2S®•Cpù¬þ zJS.ÂÉS°#^ ž‚õšw NŸ‚íœ<[z¨ùñõEõ”îÝEÀS0×/®–‚Ù4݆¡nS4݆¡nS4݆¡ns¥ŽÍ€_ä'ÞŽ28šnCáP·_5é6uñU“n3à OÂn×áœ`3N›MÏÎ VI›Káœ`µ´Y/|ŠQs#X=nD‡œº\¤ÍF-m6b¸ÇʉH›ÍÂ#sQx-m6B8ϾÌ8Ðm­`V Ð=½å¢Þ¨ȾTž‚U¹‡C;”ç t,{£\ËEá<ÁT˾ŒÂy‚iR²/^<ÿD\i”™à<$¼ý Eç´Y g~›ä`xJê¡pæápJ\Z\òK ~R ŒÁ烳G-)ø½ xvJqÑg,øµÙ©`{팷_ß®¼vƒZÀVÍŸÃÕrgÛ€êá pìáøõM÷p8öpüú¦{8{8ôZm~‘Ÿx;J½©ÇþU³‡ƒÀ±‡ƒÕìáèp^h®–Hm€–7™ÁNÜÜÛ³}£Æˆ²ˆÂ©‚kB‡Ó«½ g î±n3Äø€KE'×ììÑm4Î^àú(u›Ã÷á ½~ºMŽàÜ .s'u›h „³8‡Uâ¥Îc8sE·玜8ë6În…G‰—ö²° ÎÃJÆñRã„s'ŽWt›~™áN~"~„¿ÝÉOÄñRÛCŽ.>Qy<„C×”¬ùhšyßꯠÃÍŒB?ÎBÂEq¸9ã!œQœŠÃ-J‚•Õ+ÍHst|Â=OÁJi Â#º´R)5€×Q u 9Êj›¾Èo¯¿rüWm€yJÁìõWìn¡æu r…Ây*fiü:J‚uCMÙoÝ‹8¸.í‹8¸¸× yîU£†p. J`'³íWì‹R1:9;t»¤º·¡¦Å‘Hªº „si %˜: àßä'â@7þöoòe ûø*Ÿ¨º£‡pñ‰0Ðír–p访‚nç áÄ`ZÕ·ˆÝãQ4…'jÎ7ð¹âuÂ&tgoN>qUJafpmÈ› œ~bJJfð°t)œ}bJø^ê6(–µð}ÁðÀBù^ ßç±ü¨†ï9ÔOMÆÃð}€pš>YFŸf{g§±ü½øßyiQ,¿+ίÿêþîÝœþîÐmŽWK7oš¥KáÐÒ­š¥KáÐÒ­š¥KáÐÒ½RwzÀ/òoGÙjÍÒ¥ph銯š,] ‡–®øªÉÒpY4[É ^Ùt×(œeô9åEÞ¨.Bἂ–VúlÁ³ó Z¸=ŽÏQ~»È ö)D˜ìz›g»ö¨"3x*qIá ¥ÈÌ`kÁK×yÅÒ¦*…3ƒiÔ³fnÓœ!â …à,„scÞ+ ÏΧLNî¼téç¬xñ×g—ƒÉnó õn«yñÁ¹£·kZ£Lý¦…ÝÍv`M”®8S8ˡݣé/2m6Eg ¦{œã¤ÍÊ­“±|ãp ÂôFd ÎRºG*@x÷ÎKÓâhbùÆCxÖòSY•Èn®Íðo¼JdJК0)gU"½bMŒW¨ΫDflMyëps¬¾õ® NÕ77J—Sõm‘ßÔ·4´?¦¾õ´f gêÛ(ˆøÏ½^#Üá@ÅÝx©Ñáëä¸kµ(ŽC¯‡«}%¶µð-ã·ë€Zø–ÀqáÛu@-|Kà¸ð­ÞcÀ/òoGO µð-ã·ü«æÂ·Ž ßò¯š ßv¸ÚÑCJ§K g> Mûc ç> ¥ÃHz§pîÒÚùqî("07y…'Q8ìµ €ƒp®D5àÜ]~x"¤»Üå áL‰pNq—áLû+Iq—»á\û+J¶ƒ“³ƒl§<ëïÍPœg;d-ÛÃÅ{-ÛA^ZTk*Ü(µ¦„óZS^ÉvbÖš*ŠKRòyµÖ””°¥ÈÙ¥¸­¿‚ qhNòÖKç „õEÞy nKÁ Ké׿×ÏGÕA²û€€ƒ$ÆÈá\Âî$$ì®Ðs¸Ú½hÐ$,…C [4 KáPÂÖMÂR8”°WZ/ øE~âíèܤIX ‡V|Õ$a)JXñU“„pµo”,Ù[¿Jg™w‹R†Ó‡áÌh-D¸µç œ[{J٘ťE6'EÂv¥”™„MJÅ£Q““– ™Å ç1÷¥(aö¥XgÕSVò ƒðˆ¤ ³/Ây>!hUxH?w¼ÄŒQž%›ÃyÁÊ(õú“Âyʤ¦7,ò΃^iÆa½¡wšbp´J©7Œ ‡e8Þ` „Ã2œ@o甈¥`½Á¤ áûA½!XçJ„¹QðŠoGQ¥þJ€pe)Z”%fg¥ªŠ×¢,Ây”¥·öy»eIV‰²DGfú¶fd¦wP‡« þ¶µãN`oz†Âq'°7=HCḘÞpÀ/òoGsCµãN`oz†Âq'°7=H3àjkEi¦·,ÎÊ­–wO¦p¦DDíQ‚²xîyTúB&I2ðÁeV"ý…ó—þæ—þé—3\ÖòvÊ£„ä œ×òÖ%”៮åMá¬å=ª°Ípî‰0VU"<„sq›çƒ3þi%bÀ'"Åù „{-ÊÂKB;çfzМxñÜLwÊS #)¼»0Yq>$á¼–7P"£Âa-oä|ßž&¦oàkÄT0œfn •cŠdVàiâÔ¾Ž†ž¬Ápª'ê<¿þùŸ®DE‰ð݉ÓájÛm@u%8v%¬ª+À±+aP] Ž] zÞ¿ÈO¼ |UWcWÿªÙ•@àØ•À¿jv%t¸Ö>XhÛ„“÷6n/5"´€ú¼@8{o“q?Ð:=„ÓG NyKÓc£WÚÓëÇì´î‚/.vû”°“o‰Â‰J\‚ÅÑôœ“‡pjк ”×IiÚ:{Ž`í9‚µçÖž#X{Ž`í9‚µçÖž#X;òÕæ«–#”¦Ñ>_íPŽçÝ4n½ó9ôø…å1…=g‹¦ÑÕÚp#~Bá™^ù%Õènn•>àL5Ú%U£Zð¢ŒfgNû>GŸ¤j´µÐçNU££»T6 ›’€ÿ-§µç8­=ÇiíuN{yüöȃüàÎ×_9þ«6Àܼ‹…ð€Ý±ÜÍ;ë6œGüû÷d n#…‰-Ë:áÄk”÷—R~äaER8õe‹£ªnÔ_¡p*Lb¯?üöû^×þvˆN¯ˆ:¼þ¥Tiù­g/S8®Òò[Ï^¦p\¥å·ž½Lá¸JËo={¹Ã/ò[•–ßzö2…ã*-¿õìe ÇUZ~ëÙËxvˆnÎxRÖxÒ(¦úûJöòÈìâ<)B8çIÀ!Z <Šjþƹ”ǯÁúUŽ'þ•˜qÃX“ñìÔ¿2ÍNý+¾=Aÿóóíëþa—þW'þ²‡ˆþùò“Ä¥=šàµc=q—²¿"¢\ªˆìÕ&8­Ð¼?—¶2“`«¹Ý^ÊNp긬îr{4\}zevviÎàyöß÷,UÖ¤w^¢_ÌþL·n¬ìº^yÿòå•Lb|ˆír=½¶Ÿ]´IÀì#Nð·ôxWѰG½¿ÿbçºÈ™àÿÜ?°_ ó^ÞYòZh-SüÛÛÛö=l­ ¿½}ÿŻŶ<ßWínN±¸™#•þšÁ§çìëÅl/Z×é{^×âÙ§çìyµŠ¦²ÌôÓz51|.¸ŸüÑK¸”éÿ/>´Ú¯×.×Í8÷YLÀo&ß~3¾ý™|ûòíÏäÛoÆ·?Óo¿ÁßþL¿ý¦û3ùöåÛõK[ˆc,ÙÆœ¦°{ßá´äW¯ÄÏà„í® 5µDz^?ƒgªå~oß_rvH—m€Ò•]'‚4¸½P í ŒÃp*Hý&©Ì‹ï-„‘ãýÞz¼up•ÛÔúíý) ƒ{úö`7-ê-žšeÂàÔvó»Rè·[@ïõWôÛ—1{!6G¹ó¡¶ú2¾äáôۓú»}À³³sßy] ß¾d §Öxb‚~{,âܯˆ‰·¬RIþÅà´lÉ^úi •J|ÄpZ¶ÄïIê­Tâm€pZ¶d÷¾ 2ಗp$ Ûë›®ÀYkø-¾ ð*- ÂY3ǽk{ ßn…púívóm…-K\›¯2¶ùÊEs×ó|üñõaýÝ4‡É~èˆí9Ëå'yزÊq£Eª«KÀ…Q4ÔÞ…s‚Ó\˜êÍŠ{¦W]])I©7«Nâv†Êü“U6?Õç n¨J&ÔP³VnQƒ„O¤ºšúöhšáÀ,ˆ¡Â\ÿüÐìáGóòúåpñ½~ù ø¿¿~ÞÑ_¿þÞ¿_´¾ö×áí¶\îÿ ÞÌ¡‹Öç:¼Õ„¿h%ïß™ý(&{ÑjåJøª¾ösoz.Z¢wÎýpG_´ì~W¼½_»hÏó®Ã5_´Äüwf?Èü¢eô]ÿöÆ .Z~ÑU¸ý$ÅÝÞyë{=¹GûIŠ»½‹yÕþLƒ’âÖÙW½ª•d{´Ÿ¤¸Û»°ª6-æþh?IqëìÅ÷ôðGûIŠ[áfqþIŠ[á)÷æ"ë쟣¸uçmˆ­žÉ£ý$ÅÕƒ[Í­¾óŸ¤¸êO\ŠíðORÜúíÙõðë¥ýÅÕs7ݵÎþ9Š«;ïbsŸÕÅŠâ(ü©Ó ¸ÃEñôòCuÏt:÷x§3@q€w:÷x§3ܬù=x§3Üí=x§3ÜåÝÙáÊéÞeÜS§3\ŽîÝsot†ë™(ð&ež~ ­=Ö~Þé ?ÓzwöFg8¿ûo_©©]Z)ÊnZéEߺ—“Üjð."·è“£qx¥dYl°h#XöÊ+—fM$ËÔŸ¤NðJ°Ì‘±× ýA[šÏ'8m|^Íé´›´‡aõ¶÷'èœvªÎzóh°¹á»­9à´¸âæÒßcî,a þ³^Âií€;ëÜ^7”½¼³µ†ˆÜyú^`óê-Iæ%¯ÆˆÍ­õø¼ußÙ·ÛR@ÇnÃʧÁ¹jÇíÏÁ@:bŠbç7ƒÉ±øáöZ´þÄ¿wi_ä¥ÝIæ?_ÑÃÿƒðýWÇsU7ÿÅ)ãJ娟xÿ‡Uò„å|pNeëõ?Nüà”±øöìQ§»äégU[¦Ô£N?ÆåbýäQ_ýQ§ŸJ%ܬà ggô³½34ˆ~lèÅr5ú9fô³n‰mUOuúYŒ¡6zpÁËÅsúñÙÛ¤¤óF±uE?çèçñCôóµ}ý¸d1¥I–¯W$‹56È;¿^z¢„sɲÊ%c!eøîCýªSF­1æe¤õØ%œQ† .å%K(+|½&YBŽ2BOÇúªS†_l/Í׫]|p&YVoL\²$ëÀÎ Êp~›+(Ã0»  ö7Ù¢$Ì;¢pQ›•/Çô£’ ‡cúy‡dî/mpüõ>Éô6)ÄHf¿]Hsn5Þœ€ eÌ…=V&HÆd'á‚dâQ>Œ5”^¯ÝÒr†'8&®¸C1’1®ÇÆ'8'ãÓN°œdl6í=úç2cåæ»"*ˆ!˜æ1˜à\f”t„%1X+¿]R†ß«Îqb(Áf¹xtçóÍudÀÿêÎø_Ýù/ßwM^mW¢Ã ¶÷èœÛÁ-‹`…WÛÑé{n€˜%œ÷Jß"P5Š®…›fø/Þøùx6+ÀjÀÈogŠhýÆä¤ØÔ‹"á\¤öb…´(¥©oœßyë¼+ðÎç^Fj‚ó;oª Fw>—زv'¸¬_ö\¥ïÿÞs¦Høú+.Möâ_ï¿Mð íäâ×_½‘_ïàS~WzÒìZÚŸNÏ”2ti`}ÊMp@?GóJN2KJÍ8žàœ~’Çs7F2ÑøV)kžßÍu/WîÝf'8¿\!൱ÁÉoçwÈš¸kç?™jdÖO‹gç³=@‰±9[ØÝj éú~?39¬ua=’Èáâ|Œ=Ê»ñ_¤‘p./Wžà¡òècŽ.x‡Yv¿g&v›p†óãõKn‰­t³H'¸8^ç÷„t¡oÄ΋ãMµ:/ ¸•«Ø&Æÿôý~f¦ÅÍôB”.ËåAq}Lº£Brº£roÔ;Áùù,aÙµ~±ó5d/àœdVõ|{-n3^¼¼Ú=›ëOçÏ”+\ãI«/ΙÊzý—=ŸŠËa›»ž4ÁùûU›òhƒkj°X¼Êõz í¯šK+ ¸PóÑÖB0«Ôû?Np~ƒ]8êãòK»²…"gr-fE”5wÇ€‹Kœßµs~îÆÅ~;ú©<3ì?Õª f—"'=9„–æ}–p>ûjÁìùTByÓ<­œŸ{ .CÛ`éç>àüv,ÑžVV²¥²Ô$à‚ñ{8©3él¿´.$–?ÚÉ ‘ÅÁAE§Ý;{Ï÷=^Kpy¼19+wO˱.ˆßIÙñÚ\r3&¸à®q¯Â%µèõv$>“‹‡l·ôB´œsWr\aåˆ=ãÞ:¾Æ£¬° C rvÎTR>”<~mlõƒ8ºCQ»6rv!3j&Äñ«~*ÏÜHÒÕ!gêêž'®³½ýÄ g¿ ñhúË®MÕ[ c‚K·Á>îúK¸à0Ù—/—O-‰v‚ 'u{c«ÍÝ%·‰Ñp¸4¾ÌÑ¿KÆÊ|×\ÜŽ”÷εB÷ŒÉX §LÅ–´ìU^„{³ÄEÂ9·Y ¿ l·m¨ßùç—Ë·¨Âø”Àâ¹ÑrɈƒCçž-o GL?i|Þ ¸<ÞØ7¸سZ:]äÛÍÞ’þ$Û: ‡]‰bvd´ØßX –‰rv~ ‚&ãü—ž‚5Áùñú ߬¤µs˜àBGŒGþ‹ä K’pÁ"ÒþÐJ:jC^$\šËñ¬èˆAÀ‘Ž˜±iaµ}yVkí nôNÀ¥J\2ˆ›‘_1Á…?)—ŒbÍf5LÚ» ÎÎÅ,:¸•kv‘3àÂÃ’…Â~Ý5à?C­ÜCQòÌàIxû®+üïëÛ+3¸º¯fÀ×_½ñ_9äÞ´!-rv¡QŒbHú¶>«…]y@n{ÌáÒ_á’…¾ÎX_@ ¸ˆHgë#Nv E,ðö¸?»ônzqS²xjHÑâpmìÑŸ—~…Ã(ÜQÙ;9ûÏ_ߨÞI©ëÀÄEÀÁ,F¹uÑIø¯ŸÂî5ÇÀO¬1ίà*éC ŠÝ:\°m¿ŸÕê¤LÆÕ+o\Fª…‡N4»T¬€ vž#¬ÂSͧÎ\opEá ÀÁùlQuYùíbƒÓ"ô{V‹Ó Š[íÃÈáRØ×¢RÐG·„n¸àÚæh,)J¯Ù$ÏÏÇ丷á\ÛX;Äí€óóq.îÞ,ĵ%œ…l7䨤çcÍð>´õ?«õžC-£pOñPÃn©ãŸ^åu‚Ë„O±*¸ªSEÀEˆiÉ£W.Õ(Êð:ýÖì@[ŸbG`^æßªèmŽ8è>›Ó·3ájªæ 9ÊçW°f1ÁÀæºñÝQ;mÝÃ?4ãÆ§o®4ÉfeÇrçÁ P5之|“v^¤øØ˜\ê­Ù­¼óý ÈÓkS$@ŠÏ V5¦ ¡gIPÇ«{˜+kúÎOpš78šÎË‚ËÉ.½Ró§4—äqc‹oƒ2ƒ+ìMyd[%ëšý2ÁE›"çwzmpV-XÂE'™•ŸÃ .3žˆ>½6V2En³bßÞÅ·¯Ì<¶ï¾ÄЋ`5²0ŽÙaz‡£þžïüÒ{åNpÐ ª(m•’uîEó%®¦H8=¸£íûöíÿýË „˜œ9\lpM~ë¿j¢¤;Ü@¿Ýà6rÍãá:álRt.6؇78tÇ{ÂȘ2Fù¿ÿç›x:d0Éø$áÿþ7ÿª–!Iõ\JçÓÄ/ÈD¸A¦9',mç5»×IpÄUF%à>’`#€;Îv ¾ó«Ñîü‰Ÿ‹Wî|2þøÜÑ ORF±–ÃeÙÆúb¦ýªiA ˜œŒòs8z…‘”Ï!¸äqÒˆK›¼Éþåó¼Ø#AïòóßÌ@iPcéçÓTCÐnOëQ¤›ÃQg—”K;ȺÃQ[?ÌVíSÂAç5—½ïeLàpÐâlb=Í] b·ír¡ .‡¯²÷³rŒzëÆ;\>0Ê£¥4ϼ“p¹Áq46îÅå2˜k»¡ÏtøÓ˳È×Ù‹Y¦’‡.×áòxcë+˜J‹&¤.ÅíðNž;袛K_cs“ƒïq;`è—ÃÁ‹£v”8÷`³˜]‚#à¤ð¤^cÀ%••=«žÏ.Z¢€K pD’ÄùX·x—\d׉õ>l¾/žg…þ *> I?-Åt‚K2ÙßT 5J³v8è/p‹æØíÿ§×fxƒ@a¯Âð¨{DÏÞ5æœbpÀœ—ˆ7Å8 íÃmÆ›bŠøv©™h×j-܉ùFë_Ìá`‡ŠSnGNAÀ‘Ñá´Jþ ¨ìˆô¡Ž¢bvp‡&ý y_p—Ê­·#‡Ë^‰ÞY|ƒK1eœâC»ÁÚ ~¸vƒ4ê5>@“Ô,£.ssáþa7Z×-GÏÞ•o7¡ôãmþ)Ü[åFëHÂá¨WµWô’—«ø:¼@¸ÿVžÃÑì7ªó¥7 øçËÏ d—»%÷Žp´œ¤me\uAmž@8ë$pt^_Xó€ œ–Ùo××Ú<`ê¼Nà…þh ïøÏü"?qŠô±æ9@8ë$úì‰X §ŸØ:¯ó¯š;¯w¸¸6~ê¼îi¾\4NŠ;›ûCyR÷×.½é …ÓNÅö´y€‹ åÚ{Ú•TÂËèÀÝáõW¬m|î¬ÿ¤sN»›øØèWY°óõW¬?ž©XèW-^î¼|®}ô«¡=[¶°u´gËѨû÷lÉΛX÷†3jkgŸ¸äw|Æ.;ö%«ôüòÑbx¤¡ Ñº“Öev‹pÖÄ:õÙË s‰ð—×/ §ÝZ‡"N{·ŠÈÌᪿ|Ð8-…CN[4NKáÓÖÓR8ä´Wœý~‘Ÿ8eçjœ–Â!§_5qZ ‡œV|ÕÄi¸sG³\Ïü¼Â f9m}`á‰ù¼Nk[ˆ‰Á§µû¢cç¾ýÊó_µÀüÂ#cç¹ Ð¯òÃ3ãˆÝ‘ÎØPFpîµõ)¶Ï œ\óèX~p½?…óƒ+m€\†ðò¡8‰OàÒÖ_yþ«6nX„S- ìw¾Ðfml]ýå´‹ïÞÆ‚qLpàiÝÚuÀó§wóð„×z³Ižxjq`×±·£§pv7GCx%´8àRDÖ_AéI° G¦vmk–]†pÚÖ,¸ EäîÈÍr_5c¤MЩ©D®†U·MDR8‘u@‘EdÐD$…Cy%&<àù‰Sþ‹&")ŠHñU¤=õ ‡"R|iOýª‰ÈF¿3Ú€¥—áapÖ‘dIØ)ÙCxb.ò‚EdpÂOŠñhü€Ë¶fõWˆ`½µrëÁÚä–‚veÿÏNû¬”ˆ v2½×î¯_˜`«‹ÃD@°wÛ³[W3¶`)lЖÂ!ÁÖ`)ì•4Š¿ÈO¼YÁR8$XñUs·[‡+¾jîvÛájˆl=˜£ƒpng{H°‹Oxvfgï±Ðz°Ëw çv¶Ó"urñB§­¿‚:í²ðÈÔƒˆuZ“0œ}bÌŠNë<€ G¸Ã:íÒë18ýDc°N[ߊC8÷x¬ÓNmŠ œ{’ôâï[oÜñ¦¶¡'ÆÐ¯òÃY«ÞÜ£,‰¹T„ó¶˜}vöUí<µoê€Wü6øù´vpÃÙÁ53ЋV½ÂùÁ)I[œ0Fꯤ1²3á‘6F–0+jŒLM’¥1‚ÎD£‡ÆH€pö‰ÖccÄøáü#6FЭƈ‘!ûÖ“JJ™ÿfÝæøUôÿîÖÙ¯LHt©ú«Ì~Õggý´Ái¿ÝÿBSѪÔx—0á¬eØÒá´K˜qÂù'Æ6ÙGáÙ ûBûN〠¥tûRJ—J€pÚüÏÆ$•Òý‡pz7SŠØŠì-PjÒ¥æh­Ô £ÕÅ(àjöæ6 )¥•Ò: )¥•Ò: )¥•Ò+©§~‘Ÿ8½rÑ”R ‡J©øªI)¥p¨”Нš”ÒWóf‘£é¿Î:ÅÑê[9Ugþº (¥=…Á™¿Îáô±šÞ$àÒѺ¿ŽÖÅlñ+¥¶Ðœy¶LQ”Ò€oùû\ RjJÆpú‰±ìh]:·¡pæK.I*¥Ç×C8kƺ˜Zâ\vîX¸Õe•R›»§”Âé'æh¤Rº§#bxFy™R)5í¼çõjЇJi€p‹< P¥Ô;o!œúmJòX)M/ž “°RÚ[ÌNp©”;/•Òä,„sK×c¥´g›2¸°t¥0+šð|PÚ€çN?ÑíO¾ê³‘l„pf鎬DÀ)œLÊçä·Ë €sŠßß(ðÈs¿¿g¬Òiªv”œV¼°.ôDjÏ |VJms}ÔY)5¶z¯¿"}lC.=Q—(¥êìD)5f{§HUíÛ½d‹¸6Tïn¿ÂªvY0œêÝ{[ ªjÜy wï’©ÚAœ;~¿Uíñ°…Á)«Ì#Ë‹\ǤŒŒÞXïVµ{7§wÓÏ ÕÓ»Ý9½ÛÓ»Ý9½ÛÓ»Ý9½ÛÓ»Ý9½ÛÓ»Ý9½ÛÓ»ÝgõîÑDa‚KgpñŠ38/©0 CqfZ€‹ÎäeñŠÞí€[þØgð1áT^ºP¤Þ}$ØAxbŠ3pÊ'„³¤«%C½Û¦};Ó»m¾äÀžDgw³™,\ïŽ ÏžÁs¤w»àž× 4êÝÑ TfÄ õn瓃pªw‡T°Þ…p¦w›ø½ÛÓ»Ý9½ÛÓ»Ý9½ÛÓ»Ý9½Û}ZïöàÒ‚ä›ýù$Õ»÷„ á‘uŠÞ „óä¯åÛÈÙÿVïvçônwNïvŸÖ»p w›­YÒ»S„pªwÇMuEzwNÎôî×A½[ÀÿZïvçônwNïvïëÝ÷º¿{•¶êÝv\íWßÌojÖ㬩+z7…㬩+z7…㬩+z÷ýp%hz÷ý½›ÂqÖÔ½›ÂqÖÔ½û^õw›Z¦éݦ¾s‡pvµ³ƒzw2îu·õήvq^×U<á°½(ÔO8lˆø ‡56C8KÁõ?áýÕ…3õmw›Ê'Æ‚…y&FK-1ÎòLRÑRK„ót…¤¦–@xÑr8xŸGç.ýÜ<ÎÜšÑBxäá Å‹ „3- {%µ¤ ÙEžIÎJjIÎÎ4TŸqj‰yŠÎÎZ%µD™k¨Z6Âs÷ܘF³ß83˜b©%±{ß(œó [Ãi;à¢6Êzì¡ x>áünæ6À¯#†³»¹›,Oš0àÜŸ¤iQ,N- `çežÉ±x™Zâ³…pÆTŒÅz·ñÎÓž’¢w[´xQ@ÂôÏ œå«å^˜‚eϘá,{&ôž=c œgϘ›ë%u&8Éži¿Ù3·»)ä!œù»wÉžÙõng œå™™=³x!"¥iQs@ 5Q œ~¢‹[ÖyOÌY¯eÏxáìÑ{rRåhÀ™iqü gÏ”ÃiôÓ„r*ìâ <³W*V±&z˜äí^}¦hœØ‹?¢é®VxÚ4k‚¡5Q4k‚¡5Q4k‚¡5q¥<Õ€_ä'ÞŽêVš5AáК_5Y­ ñU“51àÒ‹¼ô“^|c „Syô¬—^üñê‰ÂÊÍ^ü%C8Ó¯©Ú^nлý{)Ýþé”n ÿtJ÷ ç™ÁÁ`­@8ÓZF¸ùÎÂÙ'Ú¬dá"ùù•d‹Ã—<àÔmzü zJWó0A8õwÇý¡ð”šÞ?‚Á™¿;*žR¯Ö“«ž@8 Tا7ÞÞPxBw¾ðØ„ƒp®wo[w¥Þ¯¿òüWm€ÙH6B8‹0ù>{R2Â)œL}vÍ‹?àÒßmcÀ.n„³”¼°ªK„ð„â'ÀÅm1œç™H÷îæòÒwûrqמ¹3¸@÷b‹pî ŽÐÅ=ÚØ8®´ˆœÁS F'OhC¾drͰe(œV™ˆIy5›cpzp¥s…Ç×íE^H°žÏªÖù~¹:\­2¹ hê…Cõ­hê…Cõ­hê…CõíJ‰Ì¿ÈO¼65õ¡ú&¾jRß(ªoâ«&õmÀA}O‹_ä™ÞˆÁOrªo5GÂOZVߌ2;çIZíÌMp ¾¥¤yJ„sõÍ*ê[§K ÿ´ú6Ã勱$Ë_¼‡pþ‰Y‰å/òÜÁîá–ó|ÂÙÃ.Ÿ±`¢pö‰Is¸Y¼xîšÂ%WGEà .´€Å 8{õÔ]’Ξ@%è^¿ª@8sâ8«hFÈ8\MiS™a'Z@ʹ ¿1€ÛH- Øh¡`Í‚á…2êþbòí×7M ˆ‹¢øQÕ¯ÃÕJÊÛ€êÄ!pìÄùõMwâ8vâüú¦;q;qô2Ð~‘Ÿx;ªH«NÇNþU³‡À±‡ÕìÄép^ÃÚf¿¿­äj§ÔkŒQø|µmë«WÈÕö¡i(œ:qâÑ|ì;3”m^§Wû`¨R· V.^*:ÁfèÞýΊûx£è6ÙB8St‚¦Û¤Î+:¾(º/™Ç(!a› „s'Ž¦Û çs'N ¦wÄœžàVä¾)º‹Â#O•źY„óOÔt‹¶ÎÉOTBÂðÛüD À.>Q +³ÃŒ>YN¾· !pæ`¬¿Â>Å,…p0†`±OÑáüyž‘>Åò:|ÀAIõ°RZ†eJi°Îó»‹¢”J ³MÆQ¼ÿä÷ìðú+ÏÕ˜Áä „3ï› m€]ÇP œL¾ pƒI^Ñ’À”=óEÄòKÈÎ^‹î³¿ÈX~JÎ{ 僃{±|¥ÖzÈrë@,$Á²ƒ[ „3Kw“à±üáÜ¥_´X>Zü7y7q,]ZËÄòëáân*±üè!\ÜMË÷%KV)bùõW0–ï-X¼¬„a÷¬uË7½ý ƒSƒÉ—ŒcùÈwaº£û„0ë„“OtnÀ‰h{OTñ]Œ0ÛwAxa¿²7¸¾‡‘¨Ø‡W3„ót…¨e($é j†‡ót…Í1@†Â>á„âÊRN~ÎÒÉÏ1…\HY™R\˜)Ã)–nÚ39¥¥›Ì¬@¹s–®;géºs–®;géºs–®;géºs–®Sº5¥£40·t]ZfQæ°¥»ªÑ!AK·øÙÖtÈÒÝlé:ï#„SK7Y÷K׳tÝ9K׳tÝ9K׳tÝ9K׳tÝ9K׳tÝ9K׳tÝ9K׳tÝ9K׳tÝ9K׳tÝ9K׳tÝ9K×}ÚÒÍÞ ¸´t³÷ØÒM&A8oõá±¥kpžg¢Yº^^›¿µtÝ9K׳tÝ9K׳tÝ9K׳tšµ~¤Ȭu@qÒÒµ-ÃGXºÆCxBþ”µŽg¿æãí–läìÂÒG)1aé†"„SK×ň-ÝñìÔ`Š1`KwTç™áÌÒ Î$héÖ§ÆüQÎAZºÅz§Ÿx"—Ïà,„3c~Ôǹbéºs–®;géºs–®Óz€š cºÛ„SK7,ZºÑHù,ÝT"Îìï)œYºÝmúúï‹Þ©-ÂÄüZxÇs¸ÚÿtÐ,] ‡–nÐ,] ‡–nÐ,] ‡–î•æ­~‘Ÿx;z¿j–.…CKW|ÕdéR8´tÅWM–î€ËγGª†LÌ/=Q—Âiš°/JyñÌ—ÂÓ“´þAÙC8Kö½ÙmCúc”Ï|ý®‡Ëg¾n §ýv+@>ó5£ˆ.…ó64æ>óµàथkÇ«ÿîÖIK×z‹-]¾]ZºK2Š¥k3„s-ÀkÏ ,€Ë·V{n \¼=PŸ@¸x{ >7pi0w^LɧŸGï$¦” çF²b0% 犭‰©3〠Ӣþ [½1ƒó×>VZG¥+¯}°5aI221¿¿×ä‰ù£F…3K·(‰ù!g6aÔjÏvL‹€­ 3šÎðo¼ÕšµÐš0.egNÁb±5áá⿉VkV±&²¸´¸Ã8TßFëq'Ÿ˜÷j21Õ¬0œªoÁd¬¾-K‚p¦¾–hÿÜ«UZ\„½­jÞÄáëô¸;o–(¯†ÃÕæìÛ€Ú=’Àq÷Èu@íIà¸{ä: v$pÜ=Rï,?àù‰·£1½Ú=’Àq÷HþUs÷HÇÝ#ùWÍÝ#;\FÒq uŠÂYm-Ÿe.eôs#pFü6)A€d œP‚`çAD`ÀyÀB8S"bÒ‚Â3ò<¢ €pá.wFq—;áLû‹»ËÑÎKwù’²â.WfçÚŸR£oT¬pן=VLHÎ>q1Z^„ðOçõ8ÈëÏIÉëÏ Â¹Ú®5l ÂùÁÙ÷òú)©íRÂzSÅIq[“Þí¨ÐLáäS^”°.øá,/Àk –ûÿõóQKzO&âT€˜ú³€ç¶.r»6\ÂÖÏêÎú¯a [4 KáPÂÖMÂR8”°u@“°%¬üª[¹ø‹üÄCНš$,…C +¾j’°%¬øªI¸ìe—\‚¶@8³ölÄÖ+³'Ä*A/»®ùR8·ö–°¡[<.%lÀùp<°†pfÐ.JÛÓµ çfºÖŸÙ"89×=üå`,æ~Ó;,¡—s®@xBR„Ù—á°%ÓöÍpÇ+4®#‡!<âz 8ªD¯è àÎK%â(-$õ†Q…ÂÒmÀ{À` œ¢¦7,ÂÅ'*zƒ‘甓°Þ`«¤JÄ¡»*zCðΕ«é bëd1Õl,Œ²lÎË¥¥âQpj¦/¿œ[§w®•?úçíE5Ó÷¤Ei¦O¯û:™é› ÍôÌáõ/¬DÔM‰ p¨DÔM‰ p¨DÔM‰ p¨Dȯº•‹¿ÈO<”ñU“AáP‰_5)•ñU“1àR‰(›éuÂY6JQÌô`ðì<ÇFS"zÍ. ݰ8wôü~´P`©àÛá53=dçéûj¡R àòù}ºQžß'çÏï“¢D¤áŸnˆKáhˆ{¼Œp'ÄmÒ” á9¬‘á!üÓJÄ€ƒÖ±KÁJ„íbœÂÙÁÒ¼2$ž‹[«(Ö@xAß.•gå—J„³JIO› „s%"+J8w D¨-¬Œ¸óÒ±š:ÂHø§pâ‰p;J%"ï!œz"röØ×?BN?1õ Ú¯þgT%ÂàNHfd—wxýKq%¬ª+À±+aP] Ž] ë€êJ pìJ_u+‘ŸØ\ ü«fWcWÿªÙ•@àØ•À¿jv%t8׬wÖ -`€pòü~Ù D -À8'o¨¡— µ€:=„³ç÷&B‚-¥‡n;\Roý$ØXœpò‰K JÑS_2„Sê-E)z:ž¨ýúù`Ôܪ r«;ïðú—æû{¸âû›áŠïïáŠïo†+¾¿‡+¾¿®øþ®øþɈO쾿‡+¾¿®øþ®øþf¸âû{¸âû{0Ztm y>áTÜD°‡N áLmÏJ벡ƒP8OHˆ`ýªG‹ÙÁn¿Bë|1ÂÉ'Z ’°f*Dáäýô4±P+rd<ØskϬ=G°öÁÚskϬ=G°öÁNÑôùjß% ÿ1áóÕN¥éI$È¿Îl’M>_m뎬6ä¯wÑ+‹'WÛ§å(¯C+ÁÖWÜùíWžÿª *zs„p"amq}vZ‘*§ áT‰p{N] zƒIrö¿å´ö§µç8­½ÎiW‹ç‘ÛÙFÎ^åÑ‹Š:ÀCÂ#²òë3×<;wk›6Àíl1»&.„üØ œ>´µÖC…¯hpúÐv*¶FÚ†!œ=´íW{½·š¹fõÐ\ó¥OÒáÏ”z'aB –  Ç ´¾ëN[ Ç ´¾ëN[ Ç ´¾ëNÛ¿ÈOl ´¾ëN[ Ç ´¾ëN[ Ç ´¾ëNÛ—N[͵mÂÙ‹Ö ÔLµÝÞ¢pþ¢U©™:R8zÑ žÂ„îûëpð.&”ƒ4% §ïb\ÊÀ\ÛŸ%@8Ëô¶&sŒuŸï¿O¯ªeír)}/¹Úáõ/L°u@#X ‡[4‚¥pH°u@#X ‡+¿êV.þ"?ñ XñUÁR8$XñUÁR8$XñUÁ¸T"Üñn€p–ß•TÐ & çùÝÊS˜‘œNḌ¥„µ^n·õWˆ`mÓ(œˆÛ”ÇÖô°(…Sqk½"a£.­=G°öÁÚskϬ=G°öÁÚskϬb®¥öü‹›kijFáóÕ%ZƒÌ5·Ê¨ áÄ‘Âñ†›kiD×(¼PsI@5Úþa gªÑþ+h®ùÒTNxRi½I¸¹æ8wa®Í³S6”»/yÀÿ–ÓÚsœÖžã´ö:§Eæ¸óÀ\kµ¤¹f!á´pŠ0ºf‚“×8ëcÁæZ}! áT˜¸Qî÷½®ý9][­M¯)%¿~ëOa(—üú­?…¡p\òë·þ†ÂqɯßúS˜¿ÈOl%¿~ëOa(—üú­?…¡p\òë·þfÀOrOå%¿„³>LEœˆÛ¼'ŠIg½õÁ@8uÖe>¸áÌY3vÖg/g—Îúcv®ýÙÅ‚oÎzgŒޱ»¹A9…3g}öг¾Xÿ[NkÏqZ{ŽÓþ…ög¼€ÐYOS¤)üÓÎz ÿ´³¾ÃAÁW—•‚¯.''ÂÄf\ðÕ+¹t%µà«6;½›½ÁÙŸŸo_÷»ô¿ú?Uöîyÿ|ùÉ:Föäµ ~ÿý•Ro)û»‹û ^ze‰ NÁî¯n­Ìq®n”ÔbpœFh«m÷õlI2­ºÕ<ûï{–‰ã|ƞ츈ٟéÖ a"óúW“Ôpø—/¯d’­ÈqƒŸ^ÛÏ.Ú$`ö.­'øÛ¯¬EßÑèû/vîÕ àÿÜ?°_ù½á÷ËÛ#{ŽZNê€{{ûÁsoWòÛÛ÷_¬9¢oIL¯ÚÝœ¤uð³´,½h ƒO…¶Ö‹™öÅש¶V^·ÝMŸ me“ã^>¬äiò´^M /ó¯üÞÇìÚÁ½ÒËE8LÙcãÏä«nޝ‚ð‰ÃìŸØ&¦²„ÏfûÄ60¶¯߮޺:@Â$É6²fpšâæ}‡ÓÆ¡‘5ƒ%Üò²d2`‚ðBµë½íÎ’™àõWDà­dmÚí¡ëЇpZ üè_WXâ^ÎNM‹¸;šêÕ¿¼‘;¯Ò{ _e[džÁÍ-Üë<Öú"©—epêŠóûSñ:@¿Ê‚[WE?ñ¨2y…YMðú+Ï#C _•¼pš9áCg•ìà$Åm¿¢Ÿ¸ N[X†µ˜ý §}ûÁZËeI2Û¯hM¼=dÛh”-„Óš„i{¤¿ Ð2„iÉNkÛ¯h]·¹7·òUƶGú é¯\‡Óú‘½4ƒgú+ãÛÀ,ªz-(î«Ì¼ ÛÇ|导¹ëy@þøú°þnšÃ”ðùó³=6¿ü$ÏÎWYfckDöÊʾǡfu¸Ðå¢3Š–¶òZ§™ê5<÷t®¾¹R’„sqÉGƒfð©Ò¤9þ'8WòBU´ ––ºuÞºï?xÝ‘-2/Ô·ñ?ÿhšòÌ´èál¹<þù¡ù+ÍËë—Ãj~ýòðý:ÂM¿~ýüÇqÜ—?þfñí¶°kóQx3 ˜mðQxëM|ÑZ/¿3ûÑêá¢u²ðÛ»ØÏ½ÕϼhåAß9÷ÃÃsÑêK!ø]Ÿ½U—¸hÅ3 <õK{PóE{6ûÎì™_´÷6׿½1ƒ‹–L|n?Iq·wÞúÞ×èÑ~’â꙯š•iðORÜ:ûªÙ4íïÑ~’ân廒4Ïð£ý$Å­³ßk0<ÚORÜ 7Öšÿ$Å­ð”]ì‹ÿ$ÅÕoý•×£ý$ÅÕƒ .ôÿ,Å­«Ï%õsÿ$ÅÝÞ¹´ }ñŸ¤¸:ùÒmŽuöÏQ\Ýy[7­ºøOQ…?u:w˜éO/?TE§3@q€w:÷x§3@q€w:÷x§3@q€w:÷‘Ùá¾FÞeÜS§3\,úÝsot†« *ð&ež~ ­•RÒà©]ÚFg¸ˆÂ»³7:ï/ßùö•šÚ¥•¢ì¦=¹è[×ár’[ ÞEäôô/¯”Ì+ýß–E-ö^Õš QÕ´tÉ€W‚e®„½ƒI%EVÉÏHøý¶F—vs Ò(¾e—OðJ2$T|Ì7¢}׿Šn•~&8-}¾¹µ÷x‹ÁÕÖK8­ìug³{­Öqg—uHî<}Í»9Æ–nIùÙ±¹yœç­ãA4»¿êdIq[ˆÈʧÁÓj0í%Pe¯(v~3˜<‹ïÖſԟ„÷.틼´;Éü'à+:pø¾ÿê(&ãç¿8e\©ë:@øâïÿð£J~‚°œoûø8Ÿ"9¬õúÛÝœþÁ)cñ-%éQ§[«û"úY•ÄV‘çQ§ãŽÂÆœ~²1]ÁÕé§R|p¶‚ƒœÑÏÖbÉ ú±¡'º?jôsÌè§vZØùþ¶j„›èÁ/ÏéÇç©ú+;¸(¶î¯èçñý<~ˆ~¾ö±¯—,¦4ÉòõŠd±Æyç×KoB”p.YLk­%(Ã÷jé_uÊ0Ň(#­Ç.áŒ2jF_P²„Ò\ï_¯I–#¤ŒÐó[¿ê”á- ŒUTû àL²¬Þ.˜¸dIÖ”áöÆ’2|³ Ê0GÝDѰb¼Ý™wd˜HX¶÷‡úJ)#€Kûò¡;éç’¹¿´Áñ×û$Ó«ó#™ýv!e̹Õxs.”1Ї$c²“pA2ÑîÙ”dêµë“&8&®¸C1’©›²€s’1>‡HÆæ^w‚s™±ró]Äz  ÎeFI®xL ÖÊo—”Ñ:oþæÙ\=9dÞ:pçóÍudÀÿêÎø_Ýù/ßwM^mW¢Ã ¶ÖZœÛÁµÖ\¬ð"àâj»#À{Ï £„³«½G$ j]{ê7Ãi›à­×Ž`5`ä·3E´~cBEƒ«zQ$œKƒT‚sд(¥©oœßyë¼+ðÎç^+t‚ó;oZŒ”ßù\b².عK;üû¿÷Ü€)¾þŠK“´-þëý· ¾'ØIøú«7ò+ã lª± ÈEì< Ë®¥ýéôðL)C—֧ܨôãZg¶A)5ãx‚súI>ï‡ÉDãÛ'γó»¹ÎbàåÊ©Éá Î/WÅxmlpòÛù²&îÚùO¦™õÓÅâÙùlè÷N‰ÕÙÂîV{ªñ§ï÷3“úQÖ#‰.ÎÇØ£†/ßùU@ çòrå *>æ(á‚w˜#Ë’³ »M8Ãùñú%·ÄFÍ"àâx7ª…űóâxÓztPÜÊUlãú~?3ÓâfzrO—åò ¸>&ÝQ!¹ÝQyÉÎÏg Ë®õ‹¯!{ç$³ªç[~q›ñâåÕî Q:/x¦\áOZÅxápÎTÖë¿äŒä°Í]Ošà|ƒ½Û+^ˆ 6Öd±x!”ëõphƒWs©s…ª`vÞ@f•–ž91àü»Ð*ÉrGF°EÎäÚ¬¹;\\‚àü®ós7.öÛÑOå™ùc¯ø©V5s¸9ùèV#´4ß3Ù&8Ÿ}µ`ö„(!‹V1윟{ .CÛ`éç>àüv,ÑžVVP±²Ô$à‚ñ…£å0{€²å„ËÍžÁ…Èâà ¢Óîfß½çû¯‰½Æß€ËãiÔÀØÅ––c\¿=ªÎ³ãµ¹äfþLpÁ]ã^X,&z)¿ .¸BòÙ!F½ï–〠zÖA£Û&Óž°Opi¿8§¹âÀìÈ~qòÜ,Íäoö¬¶ ñˆì[²Þ€K‚]y'jªIê\İãÑ.€¨)Æ+à"†Ž*<"R—zÔb†sgK{_$,ÒUï³i°¡å…è•?ç­ã·£¸£4Y GJDÐô†(àR¸öçOßÖgµ}ž`çnV<"»—9©C«b•%œq…Í~;;©+Î.Øy´»éÇS‡|)A|;¿Cfe»`ý ŒwÈìUÑŸ·‹„#¦Ÿ4>ï\oìÜ?ìYml$òÇŒífoI’=‚ÅÒa×3u'8° Z{o,ËD9;¿Áï½±AþKOÁšàüx}H †oVaÒ^ÓOp¡#Æ#ÿEr…Þâo‚ ±öPGô!/.M‹eOQ@:bp¤#f¬+ä.­û¾<«0„7ú.ð:HªÁ%ƒØ¹ù\ø“rÉ(ÖlVäU™àüà\ Á¢ƒ[¹f9.<ì!Y(ìWaÐÝQþ“1ÔÊ=%Ï žÔ့ïºÂÿ¾¾½2ƒ«ûj|ýÕÿ•CîMÒ"gŨ.÷§oë³ZÅä¶ëÅáÒ_á’…¾ÎXßo ¸ˆHgë#Nv E,ðö¸?|ôn\g*óây¨!E‹Ãµ±G\úG pGåÞ'e‚ÿüõíÝ‘”º¼qA\\Áb”[„ÿú)ìÞã¹õÏ7žXc8œ_ÁZÆ£Ån.ضßÏj¹g&ãê•7.£?ÕÂC'š]*VÀ;Ïq/¾!œÔ)w~<àâxƒ+ W°Îg㈂¬‹OàÛŧDèö¬Vû·Ú‡‘Ã¥°ÏÆè£[B7Ž\pm³-±Yrñü|LŽGÁ&ƵÍÊ´»¸p~>ÎÅÝ›…¸¶„ƒó±í†»‘4àâ|¬Þ‡¶þgµ—`¨Å;硆ÝRÇ)>½ãñ— Ÿ>bUpU§Š€‹Ó’CÀ!¦2¼N¿5;ÐÖ'؆—ù·jú£ƒ ºÀæôíŒE¸š*…¹BŽrçù¬YL0°éjùuÿÐŒo“=h’Mèå¼&8¸Á]“ª†ëPлSxdm·Óó>X§‹·K×åX-ÿ,áÒñib¾Ló0xd"'ÞàF9B8kDàÊ nD`;go@‹ÉkËà‘z‡FwÒDSÅå­Cý|` ¦z¯ê—×/ ³ªy'1«»UüdW]ÎۀƬ(2«: 1+ ‡Ìªh̪Ã/WŸ…jÌŠÂ!³‹¿‹¿ˆÅ7f% /Mè#/Z0«Õ| ©>Êr$zmZœ„Á3óû(Ìʸt»ÆÐµóÀ <2ÓܵJïeÉNßÞ´®…q›àÜõèSl@8Ûùæ–°|ç;» p¾ó¥ ð—ß.,ŸöÙë@àoXÊM 2.d<{fa°nR²^Ƚ¹Ö€_Žm ð§×æðÇÖzm²Á³gæoè~xvmZDzÀq Љàbp"&ì^爉„Ó¦¶q´Ð¦bÂûÑ6þUÓi«î uÚš‘ÂájtnÐÄ…C1Q41AáPLÔMLtøåê#tMLP8bñ·`ñ±ø&&äâoÁâeP÷H%b"—!œö†ˆÆb¶´Ð"ƒgæ*-XL'ƒ¯ˆd¦¨,ƒG’M¼ógA26¹¥@8éHbw1!I¦Nß|þú…I¦z¿M$s·½Ÿäp5¤¼ h$Cádê€F2I¦h$Óáµ*\ü­\üE,¾‘ŒXü-XüE,¾‘Œ\ü-X¼½ÞF3cÌýœ!ÉÔç–”Å$³d¹xqP³^qg]ë²ÁšÕ°&(œu­KkV½5 Ÿ¢ÃšÕÒß=183 Ö¬ª-áÜ ôX³šZhOpÇ=š¡' >á‘ÝŽg-s„pj.¦»cE‹@ç1“£H|Â#ßà6ÀvÞc8ÛykÛï()Ä#ö:m€pºø£QÐiGƒ³ÅïZ%ÕiYîa’è¡N[ <‚”1 Ógç‹X§]¬¼u$ÌxD›m|Â#ýÑž#]0žé¯–Ð ³»ÿþ…&ƽϷÀ œv_šhÃ%ãðì|ñ± ¶v1;N›’ªɧbpÚÉ,xlM¸ ¹ p:™ˆU£iö?~zÍC¾'¹ëw¾ÃÕd°m@S(ªFu@S(ªFu@S:ü¢î‘‹¿•‹¿ˆÅ7ÕH,þ,þ"ßT#¹ø[°x5ŽªFÇ„S×ÇRŒâtêú<…g”l„œNrv×ôØé´Œ.ÇÎ=ä«FýM7ƒ3m5Õ({·Üõ1t›À œ¹>šÇŒ«F©»y)œ¹>‚¢¸uŽ{ÌšÏÊqY«ýÌàìÚ„U#Ó‹o0xÖò€øµAçÅ#$¬ÕgÝ‘j´¿ƒ(ž™«3`Õ(€['U£ Vr4Q“T|òÎlÕ(K‚¥9„‡£¶ >átñnw}Ô¦Q[<»èÀÝØâÁìÒWéœÃ¾Jç„S‚5NñU&ÎvÀÁ8Ï[ÙéÒÓÇ€ðY5ªl¾̪QeóxvÒµqeó¦ P½ðyª×­£ÐëÚ„S½® ÅŒêu!c8íªi·g@¯3ÝSÚá8)¹¼¦lm'×&–b ^ç{›UÏŒÓF¬×õâÎéuáœ^Îéuáœ^Îéuáœ^Îéuáœ^Îéuáœ^4½îxç+õºP„3—×¢èuÎ&Ï<ø£èu¡¸u÷tñÁÏ|ƒ—WÉΟW¤ÅB½n”™dpÆõX¯[Š‹θèu‡Àù2ò‡€p²øV¨^¸¼ì"SxÆçÎõºÞ‰|‚ÿ­^Îéuáœ^Îéuáœ^ÎéuAAïOV@ Ú,oÜ*z].Î ±¢Å åÁý­^Îéuáœ^4½ÎøŒõºÞéšÁ™^—½.: áL¯Ëš^gÄÖýµ^Îéuá„^wÿã§Ó’ÄòIb«Ð±®>!ÜÔè?ãèÿ½ŽÂqôÿŠ^×áµóý½ŽÂqôÿŠ^Gá8úE¯pù¬9D‹B™+ tÂÉ­ËAÑëBïlÏà™) ëuýñÙ­6DœÑjÃâ œ)¥ûû‘ÑjúsvÏLyŒ8£Õ:¹x‡5ZÖ@8SJSÑâ°Ây40½‡áVô—ÊØÙ˜†S½.´‡‘<Ãm1™^” 7“=€‹8l eŠ8lÎÎT#Ÿ±Rê•Ù¹›×*qX8»çY;ë„Ó;oœî|¯ŒÏàÌ‹ +¥ÀÅséõxB|ÂùµÉm€_ g×fW‰Ÿ„RŠ®ŒÃ†˜q6€—qXŸ½Î áÜŠ´J6$ÿ†ß×À œ%N„þØ4)f …³ ²ïÒk£Ü:µÐI|©^çl‡Ó;?r‰)<£K[˜^—äâa1–6ø„3z©T’òèƒÂ3JÏ«\£–³KŠ¿®W³cpÊmŽÌF©×Å!œù댒_g¬„‹j­Ä ÷×mÎ\^9#]uygªQ‘þºÃå%‹ðÀ/£:ƒ“/«¹•¡vQâ‚ádçW^•ðƒ—ÔoÝãë‹–½|Ľj¾Ÿ{‡«¥…¶M» p¨]ÔM» p¨]ÔM»èð‹ÚèG.þV.þ"ß´ ±ø[°ø‹X|Ó.äâoÁâAU&åÁËä%¦pʬJòR»Ø ÞAxæÉÚŠvaä·£Â,IÑ.R‚pî5ÒB™ÝOKáL@Çòžv1Ãeö¾Ñ²÷ „óì}£eï[çÙûNËÞ—*¶Œj\šMá‘9ܨõ^ë -hP3rçAy±Jy±ÎrÈ}VrÈ£p¶øä´ò"à°^”q£ ƒ³4ì¨È8“„Swô–2nqbëp5,ㆋ›Âɵ1a{d\oÎàTÆùdÜárk"ò×7MÆÅE‘q~*épµ8Ü6 ZÐŽ-è_ßt šÀ±ýë›nA7øEíJ&+‹ï4_ü-XüE,¾[Ðbñ·`ñ¼®žMéèÏùšBµ?”…ð™Þ­=ÌÀ:ˆÊe †Sw<"|g¦ Ãîp) ýΨ¥€ö=ˆLá,“Ù(ÏëzÝvçô¬hïÀÁqí‹ò¼Î g´QÂ:6ç´R¸`é/Ðg¸yN ècÂYÞETž×Y!œç]$E@ÃÙ¶x÷¡Å;mñîC‹wÚâ݇ÏkI. v¼˜^@˜ÁY–W°Øñ‚…p¦”¶jž‹‰EÞ:P)1à’uÂÙâ’k,†³ÅïÅy€j$…(Ãy¸}ê@ày]`æ€ ήÍʬ\£–¬R” 5egV/" VB†pæ)}€yJS‚pÊÜ-©P;j¹(µ\ œ§e% f=„ó€ZÒjhöoøÚÈ€º62 v\PÓ® ¨™–åõí×FÔ|ÉÔê„Ú[nà«L›ðìD£6GN© ¨ù’œ™î¨Ë*ÌWÀ­æ€sNÌk”Ù3ѾŽV¹4EíX>‡£'¥›BOJ¥˜€ÑÀ E#„óh`z/ØáÒ–Yl.Ж©N“…’‡Õ6–†Óµp4Ð +r…;Å–I{4iËŒ–©þ×¶Œ;g˸s¶Œ;g˸s¶Œ;gË8¥FxZ|B¶Œ‹&Ÿo«Ú2¹·ädprër4Ø–q½Õÿ[[ƳeÜ9[ƳeÜ9[ƳeÜ9[ƳeÜ9[ƳeÜ9[ƳeÜ9[ƳeÜ9[ƳeÜ9[ƳeœfËdï±-“½‡pþ€=I[fÏœÃp‡5Š-“%üomwΖqçlwΖqçlwΖQ“mØ–±àÎK[ƶ¶°eŒ‡p^aFK$#l™ƒ‡¶LŒ@¾ [fÕ=#¶e\ŒNm™ãÖI[&F´xfË×êÛ0[¦@85Ä‚)Ø–)ÖC8]üQ|O†6‚œö¯mwΖqçl§Ù2ig œ)'ÑcwŸIΕ“¬¸ûÀì 12{%1²kVΟ&,ßÍ‚g牑ñ½Äȉ‘9)‰‘9A8W µâºÏÎwÞ¾—Ùá ¯}€pÚWÈ$¥a„Uf§ #lÆ%#êô®ÅãL6¨dD­ÊßU£RÆl–2ãõ}‡ÿµ”q礌;'eÜ9)ãÎIwNʸsRÆ“2q礌;'eÜ9)ãÎIwNʸsRÆ“2q礌8rN¤”q%B8 繄¥ŒUfçw´%:>‹ÃA!ñÌ ,$‚pÖ &[f/oë œ5ˆIø•Ö4û¯ŸZ{2g}ÄÔé½Ã¹”ÙZPg e¶öõ–ÃÕÅÛ€&e(J™: I ‡R¦hR¦Ãqå6 I ‡RF,þ,þ"ߤŒ\ü-X¼ÚÝY¶h‰Ãù+ì¤H™®]P8w:)ŽÖ¥àêU%ï"t¿ …³§F>a)Ó;38[|«í#ëU缺«“?ò7 g‹_"λX\ðÌù±’wÑk}ÌpÇ•“‰H’<@ᑺ±ˆÄ['D¤Z¯Ì.EäR”.'£P …G$ Á µ€gç‹×ºœ,òà€!f4CÌ$gò=_å¡4A8[|ðš!&à {°ÐÛ œÖîÛÕP»ÏHnDdθs_~À5CÌÅd¡!–G]£ÿ;C¬ÃÿZDºs"Ò‘tçD¤;'"Ý9éΉHwNDºs"Ò‘tçD¤;'"Ý9éΉHwNDºs"Ò‘tçD¤jEÚ¤‰È” œÙï.h¾J áØàqø¾ô9 gè´$±T†ßæÁ¨6xè4x]‡×¿´àÂÕà W‚ W‚ 3\ .<\ .<´K+߃ W‚ 3\ .<\ .Ìp%¸ðp%¸ð`´º˨’ø„³"«Æaµ0<;z Õ=˜\Ü ɸìpöþ6á¤â„Ö%¶ÆL±ÈdJ(8ãe~xJì9’±çHÆž#{Ždì9’±çHÆž#øvàn)¾½@'YDŽϷ.•²¿P£YwK0É&Ï$V{<1£Yõ2ùE~ûýwZ¾¾Âû@àNEdɱ PYœ…pB2!·r—¬|}^Àÿ–YÙsÌÊžcVÝéôÈ-)ãÚ³¤Œ…pL4m€YRK„pfŒ,}vÒß.9íºu°¢Ô6á¤NéÊh¡>oX<ÐçSr˜ÓN}¾¿hú¼5ÖC}Þ—þ&´ÃŸ)ÉLœ–’ å´Ž›~×}VŽ›~×}V~‘‹oM¿ë>+ ÇM¿ë>+ ÇM¿ë>«—>+WöY¹ œ§ãLï#U‰Âa:.ðYuùÞá OhÊJŸÐ”„“ÅÏ=h®QvÂéÓBS´>¡=úïÓ«j›Œ[2-£_d‡×¿0ÉÔd(’LÐH†Â!ÉÔd:ü"Œ\ü­\üE,¾‘ŒXü-XüE,¾‘Œ\ü-X¼$™¢¹yKwóR8“2Y‘Ãyr¥%Ó w¸”2f.¥L€p*eöâ<@ÊŒ†ž©)Kc&¸=G2öÉØs$cÏ‘Œ=G2öÉØs$£èó©uläúü6áó­ %î}¸>ïrHÂ3¹›GlBèóiøçœÉ÷ ôùcÂikž²{ȹ>¿”ÑK‹ÂYkž >gÿ[feÏ1+{ŽYéú¼õŠ>ßìÎ"#ͽ/ôyc!œëóQÓç\pZëKtˆÓnN8­±¦@g£q ÃÉâ£õ8ÚŽ–Lo¿ïuåÄaÿüjd¯)bëOJ)Wˆý­?)¥p\!ö·þ¤´Ã/rñ­BìoýI)…ã ±¿õ'¥Ž+ÄþÖŸ”8 ÷aA>á¬Î‰UéÝB8§w«Ñ{âpA2ÞEÛ„gcZ PN¢ƒp"&–QK’Y§ŸàöÉØs$cÏ‘Œ=G2öÉØs$cÏ‘Œæl G…Xál¬NDdÞ3!¤³Ñú€g§ÎÆì v6 ;àÒÙxÀ¥³1{áDÊ,GÃGál\ráÔk´'J!gc$ó×ÌÊžcVö³úg£ƒp®œ¨ÎF<û§.Í@Ÿ#ôœlN®ÍªÁÀòõ¦˜!œO{NÖéoÿóóíë¾äKÿ«ÿªìûþùò“u½]Z · ~ÿý•’L)ÇmþÁàÅ´ ò§í¤7½{¯[Hs×v§Sp—Ù‚Èxwµ`“2óì¿)³2ÅùŒi).bögºuƒQKWšñ^|û—/¯dãClºçÓkûÙE›ÌÞEÙûA×äã9Ô÷_ìÜ«(àÿÜ?ð¼˜=Åàåí‘?ÞoZÀ€{{ûÁºÈÚí à··ï¿X‰WÓBO¯ÚÝœ$a³ *½º¹3Oö‘.ÎP•\` J8+­uמ§ f½òÍóøhšÉ4É! /~HùÞà/¯_£îõË_Àÿýõëð¶ÿúõðÇq_~üø›Å·Û®ÍGáM-fúñGá­úEkÿÎìGW§‹Ö›JÂW%È4x+¤~ÑÊÁ¿sî‡ᢕÒCð»Ôà­tÂE+qÞ¨ù¢½üygöƒÌ/ZRõõooÌà¢eË]…ÛORÜí·¾w|´Ÿ¤¸Û»˜W¦»ý$Å­³¯ºEñ þIŠ»½ «vÐb<ö“·Î^|Oƒx´Ÿ¤¸¾J8Ó៤¸ž²‹}ñŸ¤¸õÛcñ¥ïü')®\p¡ïü')®^›Üãö“w{çRè¨õÒ~ŽâêìKnŠó:ûç(®î¼‹M…©‹ÿÅQøS§3@q‡©úôòC5Ó;Šû¼Ó ¸À;Šû¼Ó ¸À;Šû¼Ó ¸ÌÞèLoa(á]Æ=u:Ó»†\=÷FgzÅUoRæé×Ð*µ:A×àÎô¢Wgot¦¿½¹òí+5µK+EÙMKª¾è[×ár’[ ÞEä> ô/¯”Ìkåß–eðæÒ¬ ]KKó«MðJ°Ì˜ßû±URd%S„ßÿ`kt»Ïw£%ÚÀ· Ñ ^I†„3Êž«ÇÚvnîØi˜à´!ÎæÚÝÛø±Oýg½„ÓVwÖ¹ýå{–|g—uHî<}صù––nI…Ù±¹ÊÓÖñPŽ-{¥šú³E0¬ÜyƒÛJX/8¥{µðÄÎoS`Àºø—ú“øÞ¥}‘—v'™ÿ|EÿÂ÷_ïáÃü§Œ+%¬âAüý~TÉO–ómçS$‡µ^»›Ó?8eÔ§˜Î~Ukû@úY•ÄVwçQ§ãr±ˆ~²1]ÁÕé§R|±‚ƒœÑÏÖ0Ò ú±aiµá5ú9fôS»c. ì<#þÕè÷~V S.žÓ_U9%…ª·‚|Lp.L\9 p’©M4³€s’1>íËIÆfÓœˌ•›ïЍ †Ð;>Np.3J:be’¬•ß.)£uòþͳ…l–‹Gw>ß\×Aü¯îü€ÿÕÿòý÷q×äÕv{J+±õàÜÎîxí#À /.®¶s{}œ{n€˜%œ]í="U£èB’prµ·é£`5`ä·3E´~ãfåq«zQ$œKƒT‚sд(¥©oœßyë¼+ðÎç^¬s‚ó;oª Fw>—˜¬€ vîÂ.¤¾ÿ{Ï ˜"á미4Ù+‘}½ÿ6Á÷ãòàÖ_½‘_­ÜÂ)©NFl Ë®¥ýéôðL)C—Ö§þlÀýìEyÉ,©wààœ~’òùh|ë+1ÏÎïæ:‹—+§&‡'8¿\! Yåª:ùíüYwíü'SÌúébñì|*„­ÿïælQ8üéûýÌä°nÔ…õH"‡‹ó1ö(¢Ëw~F¹¼\y‚‡Ê£9J¸àfÙý œ]˜ØmÂÎ×/¸%¶2èÍ"àâxß …ZX¼;/Ž7­GgÅ­\Å61þ§ï÷33-n¦W·¯¬0Å ¸>&ÝQ!¹ÝQyÉÎÏg Ë®õ‹¯!{ç$³ªç[+q›ñâåÕî9E:/x¦\áOr½õå€s¦²^ÿeO ârØæ®'Mp¾Á~Õ¦<Ú`cM‹B¹^‡6x5—:Wp¡ f·§åf•–ž91àü»•ú!OZÙB‘³¹¶;+(k 8¿kçüÜ‹ývôSyfþØ+~ªUAÍ.EÎJÐæ¨¢Îg_-˜=LÈ"ßñMp~î1¸ mƒu¤Ÿû€óÛ±DwxZYm­ÊR“€ Æìá¤þÍD¤³ýÒ¸X«5• ‘ÅÁAE§Ý;{Ï÷=^Kpy¼19+wO˱.ˆßeßÙñÚ\r3&¸à®q/^(µèõv$>“‹‡l·,-â9Á9Wp%ÈVŽØ3¿ç­ãk<ʾ ›0” gçL%åCÉãׯŽ—Ý¡¨]9»5âøU?•gn$é곋€u5,Ð-álïP6ÃÙ¯jÊòqW ±:&¸ôqìã®ÿ°„ “} ðrùÔr&¸pRç"¼\¶·Oàü÷¶y€õlÚ˜ÜyÁz\Úóåµ1í©ì—wè¨E)®ÍÊu×îûýLwþŠ3̺Þß|À…dÉñØ:~m‚]“paÿ¯Âª‹ë±Á ή]o¶׿HŸp¡¸¸“µÐA¼s.Yåžx¼ÕÉ­¬'îÙÏB…).Éo—6Öá’ׯÈÙë)Šñe[ÒÖŸ¾­Ï|ƒ¯p› ‡Kãˬº Ž•ù®+ ¸¸)ï5‡…N™Š-騔%Ü›%.ιÍjøe`»í¥8’€óËåƒCîÍ-šŸÀâ¹ÑrɈƒCç¾×çî‡Ã¡ïË3Ý¡+羞H×;HÚÖqµ”ƒ bv) âAqìà6›Û¸pR;,¡ù'¸à Ég‡Aô¾[Ž.è=Zn›L{"=Á¥ýâœÑL9;²_œ<÷ã¥H3ùÛ†=ÞÌ0‘}K\pI°+¯óàDM5I€‹v<"°5Åô¦?\İÃQ„DDêRZÌpîl©y E:R'8{Z^ˆ^ }Þ:~;Š;ÞºJ“e‘p¤DMoˆ.¥k/ïþôm}†â ;wƒ°:äٽʋHZ«,áŒ+„höÛ!ØyH]qpÁΣÝM?ž:äK âÛù2«(óØëe ¸¸C«~0Ÿ·‹„#¦Ÿ4>ï\oìÜ?ìvp€ùcÆv³·ƒ¤?ÉÁbé°ë™ºØ­ËÝ7–‚e¢œ_‚àƒÉ8ÿ¥§`Mp~¼>¤Ã7«01FÀ…ŽüÉz“¼ .XÄjØCч^³{‚KÓb9Þ&18Ò3Ör—Ö}_žaQtèÁ¾ ¼’*Apí>òÄ¥î’páOÊ%£X³Y œœ‹!Xtp+×ì"gÀ…‡=$ …ý* º;jÀ2†ºuËQnð¤¼}×þ÷õí•\ÝW3àë¯Þø¯roÚ9»Ð(Fy«?}[Ÿa1cix׋å¿Â% }q4îœà""­8Ù5±xÀÛãþðUлq©Ì‹ç¡†-ׯýpéW8•ÇÛÄÿùëÛ»#)uxジ8¸‚Å(·.: ÿõSؽæxã‰5†Ãù\%}(A±[‡ ¶í÷3,ì l·zå€ËèOµðЉf—ŠpÁÎsÜ P'uʸ8Þ°ÇÃÁ‘Xç³qDAÖeUTä·‹ N#ˆÐ?ìÖ4„·Ú‡‘Ã¥°ÏÆè£[B7Ž\pmsÔÿl’‹ççcr< 1®m¦œŸsÑ{kK88 ÙnȱI.ÎÇšá}hë†e C-Þ 85ì–:NñéýS'¸Løô«‚«:U\„˜–1•áuú­Ù¶> ÄŽÀ0¼Ì¿U;ÐÛqÐ}6§og,ÂÕT)Ìr”;ϯ`Íb‚Íu㻣vÚº‡hÆË{xm I6¾8¹xpƒ»&)T yî"ßÇ„=*+R|lÓ=àRï¨Ñu|çû§×¦H€Ÿ¬jLB.“ V ÀÈ\Y¢EOp™7hquxcz¿ä§×æOi.7ÈãÆßåâÃqs8ëŒpÑ…ÍùØ»|± ®•pÑkåç°, q1ö­k¬dŠÜ fž½ Šo7ËÔn™¦¹ÄЋ!5²0ŽÙaz‡£7:!À¯O*ô¿+½9ûw­pÏáÖë)Nn¿µÅýûß¿´ÂÇz¤™ÃQ#³Ô¯v Ýáúè·A”k^"Ü`“¢p±Áµ)ÜàÐkîy#cÊYäüþŸoâéÁ$ã“„ÿûß­cRÁ-äbo“ºRFÛù{mçï¯íü½¶ó¦6 ‡¯jf¦€Pz>Ú`#€;®&ÙküίF»ð'~>6Ž®~ìÎ'¹øÇoüàìžI-)£X±ó€2¢ë”Ñ´ Ì?ÎFù9PƲ' ËÏ!¸äÑàK›zyŸ þåó¼Ø#AïòóßÌwG\­Ëq;šjÚíiý닾um5Ë9¢²òÒz1;âÚ s…Uû”pÐàÙeAïÛårCÕhp¹C¡GŽ× >Ü¥ vÛ. êrø*{¿1+\úÓ”b\>0ʇ ,»Õæ àrƒ£Âê€{q¹ æÚnè3þôò,òuöjø‚©äE~»<Þ#˜J‹&$àíðn\®—·c)¥OÒÜä Â{Üúåpðb`QDCèË&8½;$…'õÂ.©¬ì*=Ÿ]´D—À´ÆëßD–¿çpÉÛ‹3ýWÍD}†›oà‹çY¡?•ùãͤ¤Ÿ¡su¸$¿ÇÚƒ%:;\Þ`› ¼\6µœý§×fxƒ@a¯Âð¨{*uôŠF‘†9Ñá€9î±)ÆI¸Ü¡~;Þ„ªž9hfa¨ýÍ[½ß\o£>à¨_¹Ñ$ ŽŒ§íPðAeG¤È5#fw¨g·¯ûxx_p£à›ëMx\v»]ßàhâtƒ–p£5¼¹ÞœqÀ‘z•¦ói®#ÜTíæzòGÁbÆw3öØüS¸ÙÎÍõF6ŽJƒøí¶”Á¹šWÓ¿¹^©~ÀÑì |Læí¨ÿÏ—Ÿ;AÈ .wKV:•šÞ•£ÃUÔ6ù„³V¹°êÿ!@8­¦”Ù¿âð‹\ãªcEþs€pVä?ôB¬„K"ÇþÖ<Ò`ïƒC᤭3®×ЧMà‹á´({±FÑc{/˜¯¿b…î÷ì:@kÅÇÞF‡Â3ót8]VwúNpéz4Që—i"„'Æô{¥zVÂ>c¸èøŽãsÀeÏn³, Î¦f… á´ÎpÃ2›š¬:[z¯©ÑûYzãªW½¶Û€Fïé½hôNáÞ¯øŒü"×8%yjôNáÞŲ&zpé¼1@z·¡)á ž(Y¶Y™Zxà ó}`¹‰½'È€×_Eþ«6˜áé <3!•Û]–7Îýg>Å6ù„Ó­3c€m]´η®@ÅÙ§Ež{ýUä¿j¬8÷ú+ÊÎÃ#ª´Ûšß¼N9¶È œïᬙ)ä  ³zÍ;q’—¬²þ ±ÊZÃioÇ 6õ0£ð«¦UõªF5±ÃÕ Ï6 ±J ‡¬²h¬’Â!«¼bð‹\ãN×X%…CV)–5±Ê—Á½à2d•ÁÛá´J0˜UÚÒ›ôQxa.³òNxmÀÅ¥Ý~….­·C·¡pÒ})9ÜóËØÁ*ÿýõ _ÚŽ7\Ú»í!‡«±Ám@»´/mÐ.-…ÃK{%29à¹ÆÛØÔ.-…ÃK+–5]ÚW㢲)T ÎgõùZÔ ÂY;ú\4÷³¸6R¾×_Aù¾„l <3>±|7 Á…{Æaù¾ô'$ Îôyƒå{Ýzçú¼—Ρýã-€;ns„o¥ËòÃYϯÜw…Ù2èà¸ÿø¨‰P"€ðÄw¨ °­óζnËD@^W°uB5ª¿’ªÑž[â!<³ ªѲD¹uÀç=Tꄳ5ZU#ã„ó5F 9‚brëê¯"ÿUHôÿwÅŒÂ3û•i…,bñßî¿aÍ\ö6¸Û@äžè–ÏtUÎB8_c|'=cÀ…€Þ~ pC‚ðL#AÆI½+ þãÇO¯9ÜLˆØá6zzv¸š[² hšÂ¡€®š€¦p( ¯d¶ øE®qJ¢Õ4…C-–5 èWój¤n»«“©)TЦ§I28¥÷¼Áèm1\ 裫¦ÐÉgJD´R@¬À-·"‡„|™¹8, Sw:Q8³"ƒ‡Ñ›U%. ÅŽw©„áÌIàŒÐ$2Oà^< Àº@8ë8†ô· „æžQ‚~9Ês—:GƒtꌚÂÙ­K h ® MË9Tß6ù„Ó5º=1¹0•ËFgªëâ°KÅ9IïÒ¿âœÃ.£Àe 8#ç™ÖÇ1ù„Ïz¥¿£>õoD@”ÙIòxtq#zÃÞŸ-ЧJDûÖÊ‚áT‰ØëS½aW;¢ wœiõ†‘‚Èà´¿aNŠÞÐSiœl²W甈pN‰甈pN‰甈pN‰甈pN‰ŸV"B‘‹—JÄñÈ Xù †3+ß&ÅÊ÷À­xu뱕_²‡pºÆ<²ké²Â, ‚¦D/#eÚmšé2(JDë±,”Óûi18 €¸ˆ•oÑÎó à2ÒÇ"€p+víÛ™•oMijtpï(áœÎ)áœÎ)áÓJ„wrñ Hã€óa癑‹¢DI°«D„sJDø´Ñ{…8P"ÌÞŒ()B8U"â–^”ˆ,(ˆpN‰ï+÷?~:- o®C™ °2^Ëáê[‹m@o8Žo]Q"(Ç·®(~¹×”ˆû+J…ãøÖ%bÀÁ®£§:S"L•eNnGv{Í#¡D¿àÙi¢ˆß‹,‹Ôz,ÀEêõûk`‘úc—œ#pfNƒSB‘pÎ0ZÃ@8StRÑ"¹O¿ð1ÙeçÞ’ì2v„h!œnÝÒr8¸nÓû5¸g´Pˆ`ä áLZûŒuŸ=„sG“…ºÍÎú+¨ÛX«ÀéÖï=¥n»M8àâm•ɾD>áüxsà'Šáìx#~SWë ¸ g³Ë†ÏÂe콤a<‚Ã/‡ê@äÎb{¡?-aª’!œEY¼¿¹þªm‚“(Kû•ˆ²Üîš•‡pæ‰Ø§“(Ë®D8Á¬¤¢³Úê6‹—œ(:.Z¬ÛXç!œ®ÑhQ–þÔoÀA”%:%Ê’Šƒpªè˜‘P΢,]m»WÓ³ÐAr·r%Ïáê;Åm@Óm(ê6u@Óm(ê6W^IøE®ñv<²Ôt ‡ºXÖ¤Û ¸| Nƒ09{g¬²ÉÎ+„sV™5½AÎŽ”ÿ^…: b†óX~€#€pÆÎ¶òk5JgkÜŸ‰×±1: §æôñ+hA¯Œ A8¥÷¸Wôé¥ü&¸ú6·D>áT‰p¶P=²¦(¼ ksåe𯿊üWm€©\ÏSxfŽŒÔŠ’E1àÒa£â|°1@8%Ø#ƒDê ±Dgž‘óa«¥,àܱý 9ªv!œ[ù:[Áâ—Û0qu<éfp’Åêò¦Iá—ûÃ!'[·Ry[ããë‹–|à³JÈÞŽ~ÀÕgçÛ€& )JÂ: IB ‡’ðÊ£÷¿È5ÞŽ7óš$¤p( Ų&I8ààM\R$aoÀà”ø‹1X.ÝÚ£pFüª$ìz÷€I˜’fAç’Ð*’0— FK4Ζh!œ':ìï6`뤿{ª•˜÷ @87l’’ÕÖzL—Vfµ«dµ á,«Íg%«-gkLîæz¡‡ .ØyýfçÃʧp–>6f§ì¼·£p\f²óQ‚Á);_Æ+TÊÎ{?y§r?Þ·_ß4v…ûñ^³ÃÕÛ€jØ86l~}Ó dž^¡cÀ/r·£À‡jØ86lø²fæÃy}ZÎÞ¶ùvØ8^ÒPø|;ìz<¾ Ì·ÃxÛ#NÍÞè#–2n¨×.EŽs Û[FólEÊ8çÁÎs‘3Õvˆ|™ac§­fsÃÆI)sXLnEœÐa)3XS8[ãÈmç¡ÁàN®QqÚÂÅ;¹F%íÜEk„¦ªY4»çŠÎâ°©šƒ…pØ›ª6ÈsES‚" ‹dV :}ô€—:X gkÜM Yk'Š«¿ŠüWm )ÙÎtD×؉våqÀEÙSöF4/Âß]†5Nà”©Ä×½HwJÎB^)·²\<ðw¨7Ïr1γ\¼æïNþM/öw£s—þîà¿û8QÇ ýݾdI°Âß]ýÝÞ‚Ùå«›<ôw›^%ŒÀ™ŽèŽ*GB-t¥`8Y£sNÔBÛëØ0x¹¡O*ŒòØArZôòacÔÐ  œû䣿†×”hÊ£¥täN#Ê~<:deÉm@韦Iœ¢º¦½)šT]G£ ÿkÕÕS]Ý9ÕÕS]Ý9ÕÕ)¥í¢É©®.ô68 NT×bwõM¨®¹w’apr;r4Q]Ý9ÕÕS]Ý9ÕÕS]Ý9ÕÕS]Ý9ÕÕS]Ý9ÕÕS]Ý9ÕÕS]Ý9ÕÕS]ݧUWâ¢pšêš÷˜»T]“IΟ*y¬ºZ#·îoUWwNuuçTWwNuuçTW5UÆ€UW nT]VÕ@u5ÂùƒXœª#2Bu­¿‚ªkè5àœª®n<Ç¥ªkŒhv¦º†£ŠP]ƒw^¨®>˜‚U×bñìt{ÅŠ÷TWwNuuçTW§•oÝJ¯k€pªº¦b°ês†pªº†®½þû¢WÉ‹Ê{›Þ·jÀÕÚ³Û€¦ºR8T]뀦ºR8T]¯T¾ð‹\ãí(œ«©®UW±¬IupùÞ&e\ f551œe¥jÖpÚR8 ìï "UֻΜ¦Êî¿ÃUòÜȼ£pú:Ãîy¾"UÖŒWö.UW;’Y"€p ²Xu5!B8-ËŸLy±Z–K€p‘ò¢f¹¸Ô¿’1XÿJÆ@8«å¢Åö\Ápž-”¡nc‡2àBÑi•â¤nÓ« 38¥ ã­Ômö#).ÓIކ¼2déÕ“(œ©®EÑmB³󨷃º‰Öø7^æÎZ¨Û¬¦f†pV­X¬ÛŒÄüÇu¶±§àfp²ÆUât’`ä·Iè:e¼üs¯ÖtE«ud‡¯Ðàî¨y xò‘†ÃÕãÛ€Z~’ÀqùÉu@-?Ià¸ü¤^á|À/r·£@ºZ~’ÀqùI¾¬¹üd‡«õÕ¥e82(œ,Ø¿’­p^P©îîÁ·gKVý+™4ˆÚÃU°xàÈ "€p&H£ÇŽŒ‘Já\f%¥‹ñÙ(ãñ&ϬOÎÖ8Kðl”(à %'%%'ç:ˆVc)dç[*soÅôŒ˜±ÝãW0Óc™J®8­Ô‹Ã™½eD…kîr“ zžW J8à´{=à´ÖeÿkNëÎqZwŽÓºsœÖã´î§uç8­;ÇiÝ9NëÎqZwŽÓºsœÖã´î§uç8­S[,\è·@8󶻄9­5ÂË óñA6˜E\ðXhzíC 9!œÊyÁ…~íɪ¿~>j9ui/'/“±7pÎi··JpÚ­¯˜åpµwÌ6 qZ ‡œ¶hœ–Â!§½Ò¹fÀ/r·£ñÆi)rZ±¬‰Ó¸Ú7G–\Ãy®EÆœÖ ç©Ì¸¤z­_,à K%W÷ÎÖ¸x…Óvù>Ãy†uwÏð ëÞ-ÁÙ—¨dX÷ÇÎXšÉ@ìËpÇýj‹Á`錚ÂÙƒ&À­“Ò`) €¥XOš”áË2Î×èUÛÈkôn“°0€`©48丢j±ó¨,FL7¸,FLNŸ’•Ñø–•ÅpÂYYŒ™kz·‹ÉB½;×Öþwzw‡ÿµ4pç¤;' Ü9iàÎIwN¸sÒÀ“îœ4pç¤;' Ü9iàÎIwN¸sÒÀ“îœ4pŸ—I^ ’" F¾'…s/Œ& ¢8wé…Y Ë@ÇK€pÛÛ“U™4ØS=„Ó5æÑfëíEõwÇ ¿ÛŒwpŽüÝÞjþîÌáj×Äm@m¯F฽ڛ8¦pÜ^MïÙ8à¹ÆÛÑòQm¯F฽ڛ8pµc¤”¹‡±(œ÷1‹7øõ¥Ç³‹>fXÄîÈpðúÒ)ÕžC·‡)œI¯yaBpùú2Ý(¯/„ó×—J¡Æ%Eÿ@;†ãa$€;Áv“& ,„s¶ë4iàô=X –v)ζn<eœÖçJ¸UœCVž;ðY¥PM¹mi w´„r¦À< :á´%”³8(9É.@Y™QVyý•jx‡}òy±–Ñm°½ÒÀ/‘ÃÿZ¸sÒÀ“îœ4pç¤;' Ü9iàÎIwN¸sÒÀ“îœ4pç¤;' Ü9iàÎIwN¸OKî¼”ÇÓ*ÂeX¥€½YÄâAÜ`j(ù„Ó¸ XØ „³"cÃôûçFµ ŒÒKÕwqÛájÃïm@uõ8võ¬ª«‡À±«Go7>à¹ÆÛÑ­\uõ8võðeÍ®žך v¾ @8Ñò’aˆueU žÞŽà`Ãï©Õú€ƒâ@&â´7ù' œV“Ø“ÌP= É½ù`ÔTæ R™G'˜WûÄoºr†+þɇ+þÉ®ø'®ø'Ú­k¼Mîuÿä Wü“Wü“F­´Xœ0X…‹‡GØ?‚pñð]ZWkMs¸¸´n®H=/Ë-¾x'„U’3ðÒæ2yŠì¹KkÏ]Z{îÒÚs—Öž»´öÜ¥²çÛQüñ ‰æØ>ߎTÊ‘LLrlî–`’M^HÄäÈ¿ÿNëýÕ/àõW‘ÿª N[JŽN.­-®ÏN.íJ YÀÿ–Þí9z·×é}k_Ïg#g¯¿ŠüWm€ûú „3Åy‰m€)¥‹ãpÁ“lÌÆ ·'–m²!Ÿr†p²Æ˜Fmàï/šö·êj¾„ÈáÏôO<‰^ZÊ“(\iýr¥=ô WÚC¿\i}À/r½=ôË•öÐ3\iýr¥=ô‹&Hñ› :áÌ~1¸|þj•9/ à‚ÛQž;ˆtÇqp{tŸ¤pV'5bA:½Sü÷éU5YLÆu‘ï¼þ¥´‡~Ò{šS8ný¤÷4§pÜúIïiÞá¹ÆÖúIïiNá¸=ô“ÞÓ|Àå¥Ý;‚€K;:‚P8{;”úaÁp& l†œ¶ŒR£.Ùnýä´a…½þRÛˆ8w.¤ö_AíÏ—¥@8!¬Ò*RsíÏ;°óKïö½ÛëôŽ´?ëhÍy÷Èݦ¦@xÖ”G®ýE—½²HPiÖø<ûoÊLq#å˜å,bögºuƒ¥IO„éåüË—W2‰ñ!¶ªO¯ígm0{gúüí=^“’ìß±s¯Æ€ÿsÿÀ~å÷@ßËÛ#Ë -?àßÞÞ~°&"q/Môöý+ŒdšÈyÕîæ$3ê@œY~é5L|*Ÿ´^ÌtD)שbR^·ÝMŸÊ'åÕèݪ:]ÛùWz;HZtÙ}çÏdY7Dz |¢ñ}m`"ë}Ybñê¹×HyG#,OÔcà;œ¤˜Ð‹Á‰:ä÷Î*×nݯ¿b½Ëötø:@}t®xgõ6\‡Sç³T ¥urhë¾ÿàOã·‡"BŒÚK‚GÓ”(¦M Ûíòøç‡f==š—×/‡ñúå/àÿþúu¸!ýú øã¸/?~üÍâÛm¹Üÿ¼©†­äuxëPuÑ:h½3ûQVú¢•½–ðÛ»–·ñhZi¿‹Vzðs?ÌÕ‹VÁïRƒ·×‚í5ãux£æ‹–ðüÎì™_´»ëßÞ˜ÁE˹ ·Ÿ¤¸Û;o}¯äÿh?Iq·w1ûØé£ý$Å­³¯Ò½©0ö“w{VÕž#>ÚORÜ:{ñýAà£ý$Å­pc­éðORÜ OÙžøORܺóËxòõh?Iqõà‚ }ç?IqõÚäÞ¯ïÑ~’ânï\Z5ßÜ/íç(®Î¾äðYgÿÅÕw±µŸ¨‹ÿÅQøS§3@q‡¹öôòC5U;Šû¼Ó ¸À;Šû¼Ó ¸À;áÎÂïÁ;ávŒïÎÞè ÷PÀð.ãž:á:¶ïž{£3\SJ7)óôkh•èiü{ðNgøõÌ»³7:ÃÙÚï|ûJMíÒJQvÓ’ /úÖu¸œäVƒw¹"ý‹Ã+%ógç…Ã7‚eyt{wµ&H”%-ÝÊðJ°ÌœÞËÜWRdŦŒ„ßÿ`kti7hÿíêyìíþ&8íMZ—½S5¯AÚ[ËOpZ•ysoîžaP¨ÿ¬—pZ©áÎ:g÷Ø8}¦ugkˆIî<ÍþßÜ3K’ɪ«1bs‹CÍ[Ç ¶ìoæi¶Ãîm—;OC9Õ`²»ÏWFR;¿LôÖÝíõšêOÒ{—öE^Údþð8ü?ßu<Œó_œ2®”ß ü‰ñ÷øQ%?AXη}|œO‘ÖzýínNÿà”±øgÔéÇÖz*ˆ~V%±«Y:ýwÔÚåô“é ®N?•`^ó rvF?[ƒèdž%d §¯göYýÔ”ßV2ÿQ§ŸÚÞÖCúY5L¹xN?~Uå¦ÅÖýý<ž£ŸÇÑÏ×>öõã’Åô|·¯W$‹5-=–¤cÝ9¢„sÉbZÿA¾—ÐþªS†)æè9Ä(#­Ç.áŒ2j³Ú d ¥•³ûzM²„!e„ž6õU§ ¿Øhe¬¢Úgg’e5ðvÁÄ%K²ì¼  ·—{—”á ˜]P† £â>SHšù3ïíËIÆfÓò['8—+7ßQA ¡w™à\f”äŠÇÄ`­üvI­EÙožšb³\<ºóùæº2àuçü¯îü—ï¿»&¯¶+{»)bkœ3Á¹ÜQyJ€^\\mç<¸ÍÛuŽήö‘€ªQtí%Á §- ·§ €Õ€‘ßÎÑú{€—«êE‘p. R ÎAÓ¢”¦¾Mp~ç­ó®À;Ÿ{Ù¬ Îï¼iaF~çs‰-ùs‚ vîÜ®ù~ÿ÷ž0EÂ×_qi²eÓ_¾Þ›àÄ~™àë¯ÞȯŒKði¼³½=Û€ºìZÚŸNÏ”2ti`}ÊMp@?{!A25­9 8§ŸäcˆÏGã[ÞÓ<;¿›ë,^®œšžàür…Pl€×Æ'¿ß!kâ®ÿdª‘Y?],žO%€°w"«Îv·ZÁ²?}¿Ÿ™Öº°Iäpq>ÆåìøÎ¯ÒH8——+OðPyô1G ¼Ãùnœ]˜ØmÂÎ×/¸%¶ôÚf‘Npq¼ÎïÉzB-,ÞˆǛ֣³€âV®b›ÿÓ÷û™™7Ó›:º,—Åõ1éŽ GŸSᎪÅœŸÏ–áÎ×½€s’YÕó­„¶¸Íxñòj›Æµÿt^ðL¹Â5žäú#òçLe½þËÞJŒËa›»ž4ÁùûU›òhƒ5Y,^åz=ÚàÕ\ê\aÀ…*˜Ýžƒ+˜UZzæÄ€óìVê‡ûjÁìéXByÓÄíççƒËÐ6XGú¹8¿Kt‡§•`©,5 ¸`|áèÉÉÒá7eÁ¸X«5• ‘ÅÁAE§Ý;{Ï÷=^{Û÷—ÇÓþJŸ±‹--Ç ¸ ~{`eÇksÉÍü™à‚»F‡mÂÅ÷–«\øTêc%ÈvËÒ"žœsWr\aåˆ=ûyÞ:¾Æ%boI(AÎΙJʇ’ǯ­~Gw(j×FÎ.dF2zû©˜Œó_z ÖçÇëCJ0|³ “ö®y‚ 1ù/’+ô~3\°ˆÕ°‡:¢y‘piZ,{ŠÒƒ€#1c]aº¥«šà‚k›Å€l‰ÍÈ’‹ççcr<ªÏ0®mV¦ÝÅí€óóq.îÞ,ĵ%œ…l7䨤çcÍð>´õ?«ÕC-Þ 85ì–:NñYº~Àe§X\Õ©"à"Ä´äpˆ© ¯ÓoÍ´õI v†áeþ­ÚÞæˆƒî#°9};c®¦Ja®£Üy~k lºÚsEnÝÃ?4ãÆ¹é¯4ÉÆË5ààwMR¨òÜE¾ÏªÎ$˜âcCç.õŽ]Çw¾¿yzmŠHñ¹ÁªÆ”!4à2 jUgÌ•5ÝA?ÁeÞà^:GÈ͹¥À?½6Hs¹A7¶ø6(_S:nP¯ëšý2ÁEëçcïÌ‚ºVÂEk••ŸGôíÓó™§×ÆŠ@¦È bVìÛÛ üöR ,¯èK ýà‹YÇì0=ƒÃÑï|}R!à éP ‰ñN?É:÷¾'qÈŽ<.X§·ßÚâþýï_Z»céÁÈ—WÛÇ¥Óe Ýáúè·AknZôÇð‡eÑ ¸ØàVô^lpèŽ5÷<„‘1eŒ,ò ~ÿÏ7ñtÈ`’ñIÂÿýoþÕmµ±ŠÒ5(/ý|šø™7È4ç„¥í¼1{”䈫”³#PmÙ`#€;®&ÙküίF»ð'~>6î‘npç“ðÇoüàìžI-)£XËá¼ Ý^¨ýªiA ˜œŒòs8è»°·;ŸCpÉ;⥗6y“üË7æy±G‚Þå翘nˆe‚ }ö¦‚€v{Z"ÝŽZV§\ÚAÖ¸vÂ\aÕ>%4¦tYÐûí^Ê?p8h Ù«®|¸KAì¶].ÔåðUö~cúföÊÖå,fŒRV68æ àrƒ£Ö/.îÅå2˜k;+ÿôò,òuö2á‚©äÅ ¸<Þ#˜J‹&¤.Åíðn\®—·c˜ÐO¯ÍM"¼Ç퀡_B¹,üÄ;œ^‚’“zaŒ—TVö¬z>»h‰.%€iÅÄ¿‰,Ïá@¡/㛉ú 6ßÀϳB *;bà€~ZŠé—dâ²uv”©ìpÔGÝÀË5 Ç=½6à {†GýÛÛ ûöã#ñ·§0gmSŒ“p¹Cft 檺øv$ùÇlÜáöFk+Ëá|‡öP$ÿ(0ÒáÈèpÚ%TvDú€\3bvp‡ÜP}›÷7¼Ñ:5r¸Ô]KŠøû0ß¡‡vƒ´üpí?¨ç³m°|Ò´ZeCs>\G¸eÒÖ§ˆÃQÛ ¯õõÃ(<üS¸ÈÖ»ƒÃQb{]å<Ôþæµ×o´‚çŽfw°ë¶_¯]o”úåçN²‚ËÝ’{,ZNÒôÚÞ®º ¶Ä œŽ?:Z¯¬VüèhÝà—«oÜ”B ÎJÂç^ù•„³ËG„G‚«¨XîbÆpÚê0óEÅr»ôÎz.õͼçÏÔÖvnt2'pZ˜<î1ð:P˜/áÔù·3Î>ÀZ‡á¬ÿ±ëUÕy§yqë°‡ñµà®GÏ,âÓhéÜþþ²ú+’©Ù‘ÌYzSœWŸÛ€F2I¦h$Óá—«¯ 5’¡pH2bö[4»Ô¢Ã(üCÎúöd™ÁiïçePíæäÁÿY ¸ {€ðÌl¬náÑK[– àÜ äSH|Âé·¥ÁºqMÁàBÉóIéQîGÇd Ï7Ì¿sƒz”Ûå·ßGî‰@8ÝùÃ7%[‘çpì”GìbòÖ38i–P ªÜÀ&ã½lpuñk¶jAPÂÖø8‡«±‚m@cÙEÐØE‡_®¾iÕØ…Cv!f¿E³ v¼]×»ÇR8­— f¶XÇá8š‚®ÍfaðLÒ•¶6¹Ñ½ì×/|mj\ÕDpmî¶M®y¶íÚP8¼6u@»6~QúÊÙoåì1{»6bö[4»¡­dzë[ g ÚJ„×fqY 8ò÷9(e†«‡ÁÙìÙ`)Ó­H–®ÃRféÙø Î3ƒ¥L ¸ãjaè±§Ä œuôñΚøÀç¾´ã}xH|Â3ÿÄ6À¾ÝK8p4íß.$l€ð ÂéRÂŽL„ XÑC [ œÍn=–°Æzÿï_ÚNe9:e×Ä <Ó팺6 öÛý÷/4hXU¨6ø„gú£¥Ã ܉Åã˜04FF°˜Á©XŒƒÆˆ }ö?~zÍ~7!bûÝõsïp5T½ hb‚¡˜¨š˜èð‹Z@Î~+g¿ˆÙ›˜³ß¢ÙÕ8»4FŒÜy)&L]¨©BnÚëç —#ËhéFá™ÅtýÑ[®>Ÿø„3…¼™B\L¤nÏpÇM¡£bÇ„330$(&LßJà^$êb1Q œuáAbbÏ”‹—b"GƒÅDŽÂ3ŠÔI1á“ wéÞfÚ@âž™£µ´ÑeOÀ¥èœÃf sÂé­3N1€óh¢õGˆµ$>᳘X/úQ³õ¿7"&Œ rv*¤n÷giQ©6áTH•1@…TÈŽÓg y5 NïüžÙ"…”ë/ +<œRᜠç„T8'¤Â9!Î ©pNHMH¯¤ òÜ‘-³(BÊu÷ ·â™–ǶLÉÂ3‹Œ$,¤ÂÌë‚–Žut–Bj”¥apæ-ôXH-ÅEç9_e$ $>áT«<ʸ [Æš(îo…T8'¤Â9!Î © ú*]P|•.@xf¹VR¹øß ©pNHMHýó¤êýÙœ ©¤©(™Õ_ ©pBHÝÿøé´°NÞ¼2¬³2Ëájêé6 úi ûi¯©¿¨%¸î¯) Ç~Ú+BjÀEîÁ²(·’:½S89¸^†Š ©0\^."¡Ö{#¡µï5„3kÂF 5ý%ÁGî>£¹û0œ‰ÈT4w_p+ŠkglÇåî5¢p*¤B´8¨´Àoî¾æp!œ‰ Ÿ±ˆôàà„ˆ´1b;®@8=w;àôÛ{a¾ .Ò­MÞ_À?qY œï|n|ç%\ºû¸t÷ðíÒÝç³"¤œ±þ g×Ä œ9™COeŽÖ"Ò…³‘fª38R){álÜ-©E,^ŠÈeIIY œÎî6Š"Ò:qçqšý lõÞóïœ9‹Wœ=eåí^Í|XMhÇÝ­ôë9\Íþß4IáPDÖMDvøE-$(g¿•³_ÄìMDŠÙoÑì2½5elÇ­c œ±‹£»»ˆI•äåâòšÂðOǤf8Ë„ñ°%ñÏ(µWÆel¶.wĸ#Ôš8 œö»!&¬ ;Å ¸úh¤$>áTH9Ûá…]ypðeJH|™€¶} 0CL~»´¤lT,)„Ó;Ä㤊EÞ:ñxÀO{¹%µ @8³erF–Tµe ‡ãG=0çd¼öap’sbK,Qgמt×'BZò@H0«seà½逫o¶QS8dÔu@cÔ~QKwÊÙoåì1{cÔbö[4;ÏÅß.ždÔÇ„3§“/˜Q‡V `‚£ÇIaÔ]³¢pnMh·d\&-yÀ@8O0Zò€œ¼CoÌ4­’Â3KI ØéÔ;Í×FЋUè’âPÝg%€åÖÁwpY ÎBØQaVÃÍÛáø}dVãáƒfµ2T̬R¯Ë__ëiÌ*. ³ò#½ÃÕgÛ€ªU8Ö*}ӵʿ¨cåì·rö‹˜½k•|ö[4;³h£Ï}€à«ñ>œ]÷×·BÞŒØn¸Ôi­WtZë1œÉ÷ è´#QjÞ:Î*}Qò¬|Áp¦UÅñb‡B>Á­ðQ;É*g>ê¨äYYÜi³»Íî´Ù݇fçM—ëó¦W`p&"[’×çC×¼… 8“y)€ddlâhí(ÅD°._Êæ@H|Â3=µ¦Q;9»xŽköTäm ñ§wz‘N§$œN¹(N§Ú p 4ŠÓÉzÿ†w^:ÐÎK§Ó±óÔé¤í¼p:ù’t:Õ'Ú[p†›MÀ™zàŽ÷¿B=pEŠH©87àD=°ý…瀣üºÛ ü:Ém Ë+h./±x*ÁXªNƒ ‹òØ'X7Á¢œ¤½’¿TNFuëÿkåÄSNÜ9åÄSNœRP!8ë¥rR Í5 'ÊI±»|ÊIîõ‹'øß*'îœrâÎ)'îœrâÎ)'îœrâÎ)'îœrâÎ)'îœrâÎ)'îœrâ4å$ï‘P©œŒ‡ÎsJ“TNH[ñ þ·Ê‰;§œ¸sʉ;§œ¨1VN,8w©œXåÄÈÙ…rcðP9‰1`8Ð!†ˆ•“Þè‡À™r\ËÞgÊIè}CœªFaçuR9)rçÿZ9qç”§)'Åãäÿ:áT9ñ'ÿß"ÖJ6úãý¨äUörÚ®–ÄÙ4å„¡rR4å¤Ã/jË9û­œý"foʉ˜ýÍ.ó*cR^"Çîê¤p–<à”—È¾GFœ¦¬ìÑZüx:Âi÷ß‹”kûËÄ—ʉբ6{ç®N‹•"€Ëh Õ¢Ây40¼ p) “Q2“1ÎÊ&,Š“Ù —å´ŽìBDÚ!ã(œŠÈ´«FRD/¿]ÆãŽ^92·€k#Ed.J<.¤àßD¥] Ed€púí.eœ4’‹€ãVQâV NKFÄa„Ò’¥+f/ÿÜ«%#\„oÀkõ•ÄáëôØìü1ˆœ1®VæÚÔŠŽ+N¬jʼn¿¨-–äì·rö‹˜½Wœà³ß¢ÙÕ²bÒ y)œ=9I85q½VÀ˜•üyŸ„s3Pá´6&†X ç CÌg|>zlˆ™$á œ—½ÎëR†Ây’XœÖ,rvÎËI çåá\Æiïa»-Óá â—±Ä «Ìáj½ðm@-,Lะð››èð‹ÚXÎ~+g¿ˆÙ{aá7=61àj±sÆëög>j¯Ô¯ëmN&8HAwÚƒÖQPúíJ º‹ ¯ó Àe zÒRÐ1œ§ '-=¸Ü&Ý šS9…s^g5^çTÛ…¨ ×+ QxÖòç·1òÖÖ*OJÍÎx]*š^'à F«s0Ëk€pZ£UÓëbÊÓΫzwØc–k9éu[0ð:¿Dÿk^çÎñ:wŽ×¹s¼Îãuî¯sçx;ÇëÜ9^çÎñ:wŽ×¹s¼Îãuî¯Sõº#¿NòºQ€ŽÂ™¿.D…×Yñí¨b¤Ã6¬·=âvQñ×õ[÷ëŸÿU¯3Jùzßù|‡«mJ¶Õ%pl„®ªÚà¸JPPÇF(ŸýÍ®õXîýmÂ‰Š©À¤‘•«D±ó¸‘ ‘£Ã ƒ3p•¤8¨”G­_?Œšk´¡@®Ñb\í/³ 辋®ø.®ø.Ú¹£&6m@÷]ÌpÅwñpÅwñ`®7ÇA2®8gi™Å`&Ùƒrm¶<èÚL­y<ÓÓÍ :°Eýð]<Øsׯž»6öܵ±ç®=wm`âDm_¿ìO‰i(ó€ðùÚ¤Rö4-ʼ[/M²IÀy[oë‚ñm ñ'¼®”ܯ«íiüoIÆž#«µ¶^Œ½ÝmÎnæw·™|•VqûXç2tûÔ§;Ÿ4…ÌJÈ£]Å‹¦ؽÁ²T|éÙ}®vòz¦×†,…+í*^®´«8à¸]˜¼´”`)\iWñr¥]Å‹¹Þ† ôp=”IáÌ‚Ö.­Õ´÷:ƒZåh‚Æà4 l•wR6õ'äÿ>½ªZ¥É¸4PmâÉáj ¶m@mWAà¸]Å“Þå¤ÃqŸ·6 ¶« pÜ®âIïr2àZÿ8pmFr …3n“¬b÷ìýÇMêе™º×18y¥åÃÌ&ä0»=wmì¹kcÏ]{îÚØs×FQR}¥ÔƒmÂçƒ åèÙËÕ—C/á>àŒÓVWêÁ1áDHù²›ÿ\=XJœï¼=G2öÉèêuŠz`-„3ÏIs>õÀ8(·êV7°Ü:áÔ-8ÛǬze©ôû^çó{jmW›]nê{XÇïaëÉŽ;j¶õ=,ã÷°¿õäÀ×:u¢K;*J8ç´Kk8·E|~îJá™8È &Z;²÷W¸=wmì¹kcÏ]{îÚØs×F3ÃñV˜u ¯Ëf 3ÐŽ„™—fàѦDš£M …õ`9JÀ 3ЙQúï÷½=G2öÉ\1Ý{f …s>¯š‰ÃbfKŠ™-N³?-4!´Ç¼~¾}Ýç¼ô¿†“9õÞ¸4kiϬ&8íXï—½_$-T½½WiN§ NkuNµ÷i°ªú*SË£žàÔo³ÕØ;ª ?Ñe­Â|;¥÷*FÏø:ÆEÌþL·n° i¡'gÿòå•LR¹ÍÞzzm?»h“€ÙoF×èûA×d³9 .ß±s¯z¡€ÿsÿÀ3îA_Þx_àÐ2ŽüÛÛ•ÛãÞmàû/V³1¶ç¯ÚÝœøq ÝÆFEŸžü®3틯Ó“ß¼n»›¯×Ž÷fì<Ñ¿ÐìÏdö›1û3™ýF™]?¸:@‚©·Ècpªýyßáԛ۹‡·£ °ÖI-Áiö¥ÛÊoô¹s×A&¸zëêÝ6aÂà¬?@(m€¾áK-qu‚ëÝhÔ®´× ÎÚFùN24fØåð€_!™·¬šiY0œ\´òïœûa]´w†~—¼e±_´dúëðFÍ-gëÙ2¿hY׿½1ƒ‹½ ·Ÿ¤¸Û;¿ ­Þ£ý$ÅÝÞÅìc³ í')nÝçÔº<ÚORÜjJ¯¶ùþí')n…›œÆâ?Iqëâµ-sèÑ~’âVxÊ.öÅ’âÖw.†>û')®\p¡ïü')®^›Ü«Š?ÚORÜíK«V™û¥ýÅÕÙ—ÜüÝë쟣¸ºó®t«‹ÿÅQøS§3@q‡ÉòôòC5×:Šû¼Ó™ÞŽý¼Ó™Þñ¼Ó™Þ›JÀ‡Œ{êt¦÷í¸6{§3½šü5x§3½„¢„w÷ÔéL/rtõÜé¯Ù¼I™§_C«Ôžl]ƒw:Ó3ƒ¯ÎÞèLÏÕ»òí+5µK+EÙMK¾¹è[×ár’[ ÞEäæNô/‘ýå§xsU8|#XVQ'—fMo{Zše‚W‚eíî÷d=GçG’œ6}«Î»dºô¢UÉ|Ëá˜à´ÏBuÞùÖ‹WêIí-ý§õ»6ß’€Ãºþ³^Âés»šî¿Gi>ú­é/rçi"èæáX’ÌÙZ›[­œyë¸[Û–ý½éîÍ#åÎÓˆÀVñ~ÁeÅV Oìüf0Ñ[w·?†¯?Éï]Úyiw’ùOÀWtàðÿ |ÿÕñ’!ÍqʸRßc€ð'ÄßÿáG•üa¹¡}œO‘ÖzýínNÿà”±ø®'éôcës^D?¾øöôíQ§ãr±ˆ~²1]ÁÕé§RÌû[ÁAÎÎèg«4jýذ„,á4‘zŸÐO­‹Ú¢:ýÔfÒϪaÊÅsúñ«*§ö{ ÒÇsôóxŽ~?D?_ûØ×KSšdùzE²Xcƒ¼óë¥7!J8—,¦U˜”QËp 8§ SÌQטQFZ]Âe˜àÒ¨(M^iµB¾^“,!GH¡,rvN~±ÑÊXEµÏÎ$Ëjà킉K–dØyAn¯W()Ã0»  sH<TJáÎü8:u*%A~»É ̬á˧äj²ÝâþýöƒÀwnx_>ugŸ ©Àôtmg¤ü²eiÿ6øÎ=Ã^ b§#êpà?»Ú¸t™ë8›c—þ3æ¡ç‡}úvi›Ë[4®i<Öa—ÆUÊ 4›X’þíÒ†b¶ìüo‘…å§«//æ§:@†£Ø"lë Cù·÷w±Û›º²LÉ áj~BÜ©`äÈ/ dÐp¹^.1!Ãä1Ó á*v„+\"kÁáØR¸œÞ|-`‰\)¥Ž)«éMy—Еiᜃy5½ã2uxÜUⱌÿÛÆû»ØZ\ȵþµÒÔ=®=Ó娲kàªrÔt4\Îϵl >zä둽‚K—YÒó•ŸPY3þòڴõÿm±à; bÒ²ŒÏ.ƒÊbþ×MlV®ÃqjyËÎK6•ч&õåÕ¢\Í#¡^¶K-*t¸J§´u¶¨`5^[çD‡K ^VŒcÒfýv°®mÅJ°”åŽWFPRÞ²s9ï! Í:Ú¬|õØuª%A$\/9‹˜¥åj6ßáÒ¸rI×S˜<ŽàËËMwÙëI¨$£&ÍûF´¥æ=Om-jãòªi¡y_f¤åˆ ¤÷ÖÃF&®¨·ëÕ`Ø=NLܺç ®ŠÔ)—ˆ—‰rÔ \E…qcT`è ¤®ü}ˆ nºc×~%p½I)X[ýv´IÖ¼ð6`ß¡Þ<˜òqU£ÃµÃ.±.ƒ uKš\a;™¤˜Ñ0‡Æ|Kàê »ì—ÓÕIÝØN-(\[êm¸#í­‚VƒˆÏ#†ë »²Žù Ñ[–«†£$¢Xyààz5hz•ÿ¶aý9»a8OݱôÅ4ÀÖ¡%±š4\D…2„Í:T8/ãqžGà*œqÛúÉÖ¡<7e`6–¥,ãlîžÑáʆ–ü¸à8¯Ž‚þhÅù¤àzz‡6Àí‡}‡Ô°,Ķ3i ]OŠûa±.صN]{ƒƒîü‡hÁ ƒ~»4‚’K˜pÿKkÁ"p9½¹Œ#<¾Y“ƒçŽÀUŽ8ìý/:*4²uW!bÙØÃ1—éªázkqÝ/ر(8Ê'cÍh«u—ïDVp‡Ü¼Ò)AIGØý&—ZI¦ÃU=iš'tÖ–ÉAwNàrâÒPJD·DͶät¸ª°—1ÂÅ~Y Z9ªÃÿµF#É =&58ˆí[®ðÏï÷¿Ä†«Õj:|ùÔ]~*¡òf,ãU¿]Ô+(gË¿mX¿CÒ;½ñÜÍKÂu½"Ö:‡å‘†«é)æ7»–Y}yÛ‡íò§ò÷ZP¡_^5l\úà¸vh§?®ë {!P•£¦œôÛÿþùã/©&÷w¹Ï Lp†Õ IÃþ­ö½ap—5AÂ¥ ®¬sÅØ·öì1Þß!sØ»U“ ®O®»8µœÑ)sTpΧa#"PEêqjñ¸ÃÕô–4Q!8˜Ÿ5"*·žó~»à±"´ö’UA[ö‡ƒ„ëÅ~ q†5ºkiÛ”WQ;ìdHŠG*ŽúËËù Ó@¸z˜ÕžÜv¸œŸ”†­š…¢¶†ƒù‰0ì–ih›¤WóC¯>ßÿ;$™un—§;\5l;uÜâsmuø× ŸyÀ©à’NÍ ®Ž˜®S)øˆiîU§ÿYûÀX¯âB`éUæÿ™ûÀÓº÷ƒMòÛEˆHµU G…iÐ#/M°v1ÁƒÍeà[¡– ݯ¿ðŽ›åcqÀ›lH­³Ã·LR¥zÞU¿OH[¯Z|–mŽz»Î;êé:¶ùv俎D´ø\pªA:„:\÷´Ž›Ü²î• M^ÀußàÆM¯™4ÇÖnúÇ_G= ´¹\PÅM|ùã!èàÊS“áwì_\i¤<4f|q¨5\KOÒAÖ½[#†9Bè¹ `%~ûñPOÜ<Žâ<ÏCi¤8Gˆ]ûÛa{†„ƒ;C—éRW*¨6ÌMAœÆàY£¡`šJTp>q»°ñúÛÿû§èèì±®M;MC»Îx, Ýáë |€‡@w>.–y±lH ®¸RGÃ.­°ÆàYaLØ3që¿ýòC] Øeò¨á¿ý—~êKÝc͘žwIÒšqË/èD¸ ­¹t,käCe‹ƒqYKŠ‚0”J–Õ`ð$Ó¤½{MÚü²iÏ þ‡œŸ8\³aó£ºåSrââ¶hϘc”pàíjÊY8ÌßçžòK8ðŒéjH7O¥(¸ŽÃvJ£Œvl28þþCT^âÞ ÷õïßžx;p€+Önʱ´ r¤†à@û¸ZÿןöÐAÔžÓdmwëQ{ÄQaÉ>5ˆc¥Iùû—MôºH8ÒƒOÍ‚r)8»=Œ êJø²öþùæuÎ8ÕGÛ.ë Fã¡Ì­D’¦¢àz€‡Ã´“~àYWÀQ;E5tK¾ù]õël,É*¨Lרàzz÷ƒ(TŠþò*”qóKe9uã:àÚ:®­^þÇ_G™œðîÖ~%\›^2¡çF°y€“1F‡k/›·®>?ÛÒ¢~;XÂ!Z÷Cuùg ×±}HJ½oQ¿Ã‹Íxã™&ôûCäeÑPC§hpí&9 F€êyƒ#¥Ò`×ÔøØxciáËcÕßÁÙ·¢à 8wõ1©¦áz„‚%iæIÂAf6ö:*X¤ïòX?¯Ã1À5+ÿXm:’5B£‚ÿª¼l?éëZPo×#4ÏÝ‚ê V»<íêp»N1c N¡çoG‰+]‹øt8b.°Bê&x”ްìÉå±"I‡#å´ß6l}S¸×§° Âå±BA‡#Ûœ`bÇvlY¾ö*&ç¾<æÍîpôöµéKü<§¦²÷þ÷æšÁåmž’Ta$Ü,A­&ù³øT>©`uøWýrÖ&8ç¢àjèÒ°½]1b§Á€3BÔ´±µƒTpêr¨ ^?5ÉO8ñõÐ¥Ÿ\—ßBi&ùÂ…ZNJŸTï:\ëàÔO]Ni×ôkÉϰºÚ@‘Õ½-Ñ}’p³v¸>°¬ŽÃ¡Õ=(=vøWýÒ+hY]‡ëLr'VVW@8ºŽ¸ú†ÆTßáJŒµ~ê‚ÄXûÅL—•Œ€p>B[…äQѷõ¤H X",›ã±)OýeêÒa ®Ç¬n–œ×–Ëp8t™ëÿª_BNç,—épå2%… ]¦>€pÎ\]ÂøI½¼ÃÕÄ­ŸB—c;¡ªEvó]ó'gOd¯§a†‰YŠ-1ûÏþÎÖv C¡¶©rt¸yòµ>°‚‡Ã`õàà¬Ã¿ê—+Xu¸yUhý¼ÎÓƒa4Š8]¨Ãu°Ú%„t°Cð(s›#ÚD™Ûp‘Û\q$v©w O2ûÛ)ˆd°ZVÈÀ³jÃÁª>€p¡La«iÐ#¯ƒÕ4¬Æ&ÂÛáüðh Èáx0ÉÎ_’2®--´¤à:uM)ál5¸¬°Ç¼;Ô“|á4X-F² ‚_¶Kƒ„óˆx| ÁùªàøLÁ~X,àÜl_ýTñEÄ⋈Å‹/"_D,§#b™õÛuDÜ[bAúvEð¨šü3Nßæ)C8É”ŒcúÆJÀà""†V°NrŸG—Gþs?/šäç‹ýÎâóID,¾ˆX|±œŽˆ9éy›ù혞GÄm‘Ó_þÕˆXNGĦpÓá "†UT EÄqð—#bù<"Þþów²ŠwÓºµ¢è×1J¸Ù£³>0+ Ž+"bƒ½Yñö "v8h½‹FÄúÂg~=Ãh¹¬B‘ ®JÆõS°d\$횃µQ.Âî8ãÜsJ€ËDt::PdîY†àj×|lhÕFyš \D®<ÁH‡ÁEØ­Ÿ‚‘6FW½YaÚ®Ëý!#m}ár„ŒÚÞ®wÍ.J Sð¸÷§>˜äu­âü ±ŒÀÙnüø”ÚÙŽÝ”Ëè°{Íq€‘¶>€pþ’4ÄOúÝ:ìÆç€I*{ù¡Nz3IBŠX(x1î,áf·ÝúÀŠ´#íƒf½ÿª_ò¥÷úY‘¶Ãuî9X¹gwXiV°ÚI¦¬¿<ˆˆù³Ò!…Ëê[é­œ“|á3jfQŠÃÐò¯çiÖþ)˜Y•¡%nö9Ö“|á<"¦øY›$×OMòSÇÁ›Ãv¸Îw)eÆ¡@87›½î©ZÑB?ãép™#®ŸBiaÝs(£Å ð쨷ˆ øÌO˜Zòí¯?­óˆ2Âÿ%Ø4}ª7ûP×VPápT´±vøWý’/½ Ö *º`£¡=ÇÂ… NVfÕVÂAe43«àú<"XçÂåyD0ú¿À—×{BÒ,i‚þò ¤¿]û%ý㎚€‹’~þ¬˜À•_ÖOa¿ìé[ƒãþcè—½1YÀÙ—ŸKÛòßþ°ür¸~™{'Nƒ›ÝÏës±gp¼ØÛÍÓþU¿äKï½6ûç½×ëà)&ùÂéÇe€°žÐ²VC2Šìïó˜Áo—Οç„ý=Ï ÂÅbÀ¶jO<ªšJÂþž†àI¿ÄØVÁ·'ýÜÞ.1¸H‡ê§p4µcÆmÑ¥à`5—áâ%!âvx’'5xýÔ$?u<ἕ¹:\µÖ‡y#{ûSí ç2A¸(®Ùضƒ¾{ÂiÆ‘¶\€ÿÐ#„÷„hèôž°d¼'Ìó¤ÍFí ë§àž0ÇT\¬iï¦WËDšu¤ÕkFJó`œüj—AÇÀ«ÇÁ½¦úò ™x£ Ò{Í9èUF¯Eã8’—$c-7þJ½uN·y-J¾µ(ùÖ¢dÜÊù8ç¦:ž€³µhŽszb-J¾µ(ùÖ¢ä[‹’o-J¾µ(ùÖ¢ä[‹’o-J§×¢)ëy×kÑ´Qt赨õ ø«kQò­EÉ·™õÉX ^‹"y½í ëj-Úµ[WkQý\‹ÊPkQÙ™wÔZT˜8µU=º'Ö¢ä[‹’µ•^äç§!ám¨×õì ƒqß8Ã:ܼ÷·>°Ö"‡kуkƒþU¿äK¿uh­E®/ÅÅêìÞŸ€‹vë­[[_Zl ®Ž›òÎ¥¬Ž›R?7èp½Å^Cä—[þhWÑÛu¥5ZÅU=ò:œ½Z2É.îpl§ÈúBíuT6¯ÃîÑä¯#m»H຺“âê"èµ5€p±#MFŸV“Âèpд•FìqilmÑ?ÿþf(ŒaÀEœ¡ñbv¸ô¸õ~ë0©½S{Ù´¥þU¿äKg=5©½Üb=EÙyy <Œ$¤©®“õSzâ¶h5txôM\ôM\ôM\ôMœ±˜Œõ6ZLÖN'®Ì;×»’"ëòˆ.ÂÅö)¸˜ä¹m-:üU«‹­-&QÃÁbÁb²­%êËëw¸3Y@8OœCocýßÍŽI ïL®ËQÂM6âõÙºÍà¸uÛ&3îð¯ú%_:²ÙºÝà2²ŽÞ<ÍàÂ:Êtù„J¹Áu‚[?…&.¥9xôM\ôM\ôM\ôMœ•à–½u[%¸…ô¡28 úÓN€¯ÜN½Öá:ÁÝ©×dLª¬úí¯Z]|luÜ2Áݨ߮—Û²]Ð+l!œß¼ŽÞŸÿ¾ÿ~HÿÕ›åF@ó½JÅQ›À¥„cœçMÙH‰Úέÿ…À•ãAŤ¥”›r+mÔ·íµ惌¾ýRŽ;å ›ÍpUoÿ·®;–.s-Ñ¢H¸’•Íe›¼Èñ±¯ÖKÀÛ/‚¾Áïÿù]Š›n[´Ÿ¿Ëóð®½Ñà¿Ü~• ª-ÍŸ÷oR5f ÿq¿ÿ‡wÐÇ¢ãÇý㧸²?Y¶I"W}Àh@çÖf,à¤Q~®êá“¡û‹O/;V·.åïìï^ö¿«ÞnŽ|}0‰çá,£v*òGàõS‚q ÇÞÈz7ç½>à7$Îɪ歮ðÀl¼~ŠWƒç½¥ïþM²If5ò¬îþ~o#¶£€³ûË/œž6ÚõSœgbSä]°¿Ê ~ûﺖVÖ€ú»L5Â[•Ù|ûë×åsÄ1–ß>¶ÀwôqýÖeÙÃqŽÇÍ´$»ƒ‚«Ø>¤`DíF¤FàRÔ¶ çŒ(œ/YÚ¨á2q¸N{YBlѪg]g—A¿ÔÀ £öÐx&èЩ†Ï­ÝA…óÊq˜ÿ-4eVSöÛ¿ÿ±r¹o¡‰›šÊ¬áMbÓ”}o ¦xæCx“1¼= _ÀG:ô-t‰ÀÛ+¿½ëÜ™"}àDÅíÇ“ðÅÒo2_¦Äøíuá2)à¾üÛxÀ›Œ”©õÞ4–L¨Ço?äLõ¤‡#ßô‹Lù£GðxÒ㾼嘯ÇÑÈ·xÒã¾¼ S޵è[<éqËÛ«.x>à'=îË[YÂc)ûOz\…OÓð[<éqË—15•oñ¤Ç-ðqJCûò'=nùeõ8öìßâI[ì5Ô*Y›÷sWÍfjTLßâIûò–ÆÒèy£=çqõí×é(.o?çquäSg¨_þ”ÇqøÍϰ@ÔEI§ó-Kó3¬ôó¼ùÏø Þü “7o~†™N!¼¯q4?Ãô}Ÿ½½ù&êú Þü s8`ø[WÂ<ü _»5~{ÓIm~†ïë_þXeþøÙ³JÔ¥ü¼ùn›úô퇟áîŽOF~ñ¦ÃhõRÖ$þ¾Ú.Óàú%_,x["×ÚåÄÿK5ƒ1·­·w–p!ºµ]bš/JZè­JBµ­j‡s›uK¸^Ø” éo¤ÈFàœ5x»p3\Ée­@å㸉À9k]-`åƒ=V^•m¦Î/‘¯e.t¯ì­þÙ¬á¼iþ-¦·#ÞŸ÷—}\Ò#Ï»…Ö"jjX"MœŽ»®tèdq5Î[ç7?ÆÚTZôÈóÂrÝÇmr(¨¸:¨‘_7LÜêÞ¶KLõ#ógFû§6ÚÍeþ«à ºHø!|ûÔÞÀ9Ñÿ’žñànb៸;ûÃßL÷SŽ•ò1Žßè,²ÉZÌ? 0°6ëMßlÿ‰õn òŸ<磹ý›í?!MsDþ3…Ð\ÛªÀö™\ôÛ…ÿ¬.ùO,×2i8ï¶ÛÞü§²ÊÂmßlÿ©}múO*Yyé?yIå ®<¨¡{ɾùüçÛSþó{{öûó+Khº»¿?XYbˆEÛübô¡ .W–p÷(ϨÔ, .=#̇2±ðŒ14.þßMÏ%*KÜ8;Úg~´²”MQyFi§ñ¿Ûž‘«¶6ðŒe©Î€‹•eÙàm “\YƘÀÈ+ÏH±‡öŒ<ƒ·+Ïûu,-Ìz=¶?täA/nk‹uèwî30Ú?Ÿ²yì?Ÿ¸Ìíëñ°ÿ×ç.ÓÔ_;H* ®Ö…’±”–Í[Rp•Œ¥2gè2aJ®\fˆcÑ.³^©8zã \.&iNûZ$\&,«Ä¤àÒeB7‡•.§pˆÚ¸\3–h¾%¢ÊJc3"p¹fÌcš3v†õoמqð»ýOž³ÇIydóÓåqÒá/Ù|‡¿dóïÿÛmM›vš7í ½ G©‡Àå>£¤ý¤Zø¬àÊ´Ež›Ü€ôt—dúë‰L†tðPøO)¼“6Aµ\gðÛE"ZãvÌ(îãÖôbÖp¹ŒsÙ4ÊÔÖbžôÀ¥ÍÇ”Ó m~ºŠÇ.m>Ô…Ùü4‡\ ëp¾s üvûKq†+øò)¹šl¢)¿ß~øF®á˧îìS!aæé87æé~Ù²´›?|(£NƒU§#êpà?iÔÂe®ãxlŽ \úϘ‡RPœº"5}»´Íå-×4ë0Kã*eŽšM,IÿviC1 »2±HÂòÓÕ—óS ¬Üvk±EØÖq¯ùß6Þß*‘³_µLÉ áj~BÜ/eË‘_È ár½\bB†Éc¦AÃUìWtmp-8{B —Ó›¯ݵ¨üÇŽ”ÀÕô¦¼+tÈ´pÎA¼šÞq™º(¸JHÒ°šd’SÒpzÒ4Àh³ä I =Ã4Âf÷X{I˜MÐo¡g66_êß6¬ßM™ m†!H¸Þ|…!ø¬,·\¡Ã•uŒSåÍe‰ QÃyP‰óxÝòæ<\5\F›eã7AÊ—zÍTpi\¹¤k)LGðå妻ìõ$T’Q‡æ}Š8\„ã¢Õ¿m\¾›”îrÞ—i9bé½õp ظ¶w¸Z †ÝãÄÄ­{î àªHr‰x™(G‘ÀUTó”P º6 +b‚›îØee\ï_¶bܲ跣ýKÒó¾M|+8öÝ$ñUçS>ø÷:\;liŠ¢lFCÝ’&WgØÃÎu%f4Ì!ê$®Î°Ë~kWÔíÔ‚Âe±å¸é¡v¤½UÀÁjGl×AÿvesÚn,ƒ-ËUÃQQ¬¼aPp½¤ã:É¿mX¿›Ì”*œ§îX úˆâ¦øªZ‡–ÄjÒpʰ3D«p^Æã<ÀU8â<¡Ö¡<ÏEýviCaYÊ2.Áæî®l¨ª›â8¯Ž‚þhÅù¤àzz‡6Àí‡}7©ÌTÿXˆmÛÛ@ºž÷Ãb]°kºöyD±#Ôû— . ä&ÜÿÒZ°\No.ão–Åäh7%p•#{ÿ‹Ž ·”ÀUˆX6ö0GÌeºj¸ÞZ\·”#G9âÍ&OmµnãòÝdÚRÜ!·¯tJPÒv¿ÉÆ¥V’épUOšæ 5‡ecÒîŽv¸œ¸4”ÑÄ-Q³-9®*ìeŒp±_ƒVŽêð¿E@­ÑÃHòBI bû–+üóûý/±ájµš_>u—ŸJ¨¼ËxÕoWEçÂø· ëw“JÈ­æ%áº^‘ÆkC¥µQpu"=Å<àf×2«/bû°]¿TþR *ôËË£†qˆø¸vh§?®ë {!P•£¦œôÛÿþùCŒÝÞ”º<¸Ë…xVp`‚s0¬nHþóoµïÝïÍþ}W™¨„K\Vú2cßÚK°Çx7 ›ÄWM>(¸>ý¹î‚erF§4ÎQÁU8Ÿ†í2¾*RS‹Ç®¦·¤Ùˆ ÀÁü¬Q¹õœGðÛu²"´öÝäçQ·ì ׋ýâ kt×Ò6Ç®¢v¸Ð-±n²ô——ó¦a§ÒQ;,A»-·.ç'¥íb2ŒÚæ'°[¦¡m’:\ÍO ½úp|ÿï&W‰ ¨sN .¶:nñ¹¶:|‡ë†Ï<àTpI§fWGLש|Ä4÷ªÓÿ¬}`¬Wq!°ô*óÿÌ}`ŽÓ€ÝûÁ&ùí"D¤Ú*…£Â4è‘—&¸r³B«[¶IEݯ¿ðŽ›8l±cyÀ›lr?Øìp`Á-“T©††«~Ÿ°÷ʪŸeNÔÐé¼£ž®c›ow@þøëH$@‹Ï§¤C¨ÃuԸɥé^ÙЄ \÷ Fƒ@¿4µè?þ:êi Íå‚*nâËJRžöy×®Ëu¸"lNyÀÚBK¬áZro óŒwj–#N‘ Vâ·õÄÍãXÐÛó<”~Ûnq  c;lÏp$«a©Ï%(8 Ê>ŽÄ$½õ€KÈV°X§œOÜ®ªvAŠ¯Ë”N´!bÿ‰ÇRÚ.°®ÀøxÔ¢§+–Ø ã\ pœàÒ k žåÆ„=£w‘øí—êêPÀ.“G g¹uÂ8cñÙ®mzåt"\ÐÖ\:ù-žaDLéHD 8€AK<É4)$hó©iøJ^t¸fÃæÇ à@Wy[ ´gÌQ<òŒn›Gó÷ù§ü°®õv q>öüí¨¾`•˜‹¥ì"áZ§ecÀ[Ò©¯G‰+f\,• ‡LݘÓ}Ž}õ;JGXÔàb H8x{œp)bù÷6òG} ¼_,Rv G¿â0ôÝâQÂT΋~YÂA!äŠ"×zs£©(þòþ÷æšÁåí:5™ N'šrƒ›%¨õÁ,Hø×‡—Ô &W#Ÿ†íb€¢_NC×"kp²M±­é³| àºJco¶d¨—É.P1¶ÕÏjÕ̘¸zÑĽ…ë8I¸Y~[X×à_^R³&®Ãu6µsÔª‰«\B†‚eÜBó8—Ûñ<$Ð[‚ÀÕz™Ç-UWiõ‚ƒ}àÔäÇgù@Âq…ñ¥²Zé±-¯ú{=­“p³r¹>°Ì¦Á¿>¼"g™M‡+³))dh6õ„ãò(:R7­ÕRp\ð¾`-¥iÿ󟿳•]„2àì"µßÞàf!}}`¹Lƒ5¯jø7ëðÊeê;“lhvý r™ºL}àI®q;)ˆ ]®“³jfÁ.S(¸v™iØe¦Aÿv^ÝÕBRT]Ãõ ›RÂ+lj’/.«N1兩ú`–$œ{Ü—­ÿxPwPpµƒ®*KpM8£¬2XYeð¨˜Å&¼DNip•UN“‘UNžåy뀗Ȉ†N׆ië ÿC:l} à:«,ijÊÞ®fšš÷-ó­àðLX%¥ü°¸ÃµÃ^sÄKd} áø¬ÙHJ‡&ou3+'!E¸D¾-f%Ü<Ã^XÛà_ÍûìþÀõ¹“ é%²´ì‚¼x\¶<.¸ÜI•Þ¢0Ë ®ÎÙ‡a;fä«Ìþ@ÁÍøú`–Óf|~Oàz‹ƒ±ÆA¹Wg™aï4”kÜú@Âq“,ûôîÚ3`Õ.Ê˼‹/4Q‚7›Ö–Í7øWó2¾†p¤)mÔ.Ú}Gˆ£aóãàºv¬ÚEPppºÖ;'¬HK†NWæhTŽÞ^‡ýÐêúÉU‡ãÆ mu¬#£öaXV7\ «ËAÃ͆ŽõiøWó.¿†pÞ²^K˜òñ`–\êëV£ÖºÝa_^mž‚‘p$ð¨òù¤vàÉ‚§§à²åzÅËD¸^5t;\`¯\7³l+ëƒY>PpÕòæÒÌò‚ƒÄlšÄì¸ÞÇà?ð—׉úò*1Ëó”`bV¸iï3Qá"ÍÚaQ±q5TlÔfƒÎÉçóºú Ã“mÆtEG›NDÐá/G›ä‹6Éè>ËùÖãóž: ¿m’/Ú$_´I¾h“|Ñ&ù¢M²¢Í´]ŽÒÑfÊYÁ_6ÉmÌm`,G›~»Š6ðq½«h3´ŽeѦì·U´)p¦Ã_Ž6Ö.rk¿§Ž6sÓŸ¨]„vãÄ`ZÛUæ7Û×V´ið¯&_†ppþ>ÍÆù{3›×=;É’*ûäžv¸Ž6ÑÚ„Æ)¸Þ„Fk\ûûŒJ騴µ;\wÄ^·|^9l} àz¹óÕè]äµíe(ü‡º®¡ÃÖŽ;9A>O[«K>«K>«K>«K>«3s›4ãF©ú@ÂA¬Ëׂc]n‡J?ÿþfÕ.Æ0àÝÄÐX:\Z] uaV·^6Šn6”¯,«kð¯&q•†p³4 µ&±ç°ÅØM”¶ÆQxTÚFÁ­]dcð$kVWd´Û×F»óçk£mÒBe°BePCšBK¡²>èp+T¦aŒ0TNýT¨Á_ • þ²Ñ&ŸÑ&ŸÑ&ŸÑ&ŸÑ&ŸÑ&ŸÑ&ûö‹e´£:Ðe?N4Úúàh„¾ÿif•Ãzt2—±H8Ê*s´²ÊIÂÍ‹)볃ý€59ä4ü €›÷Z´Ñ6ý"GÉ:@oá‚ÂõÑÆhmŒž”Õ°ãåÚ4»ôUn·­A_å¡SGà =ˆÆ xŠjÞõZÕÛ€jõA‡›‘6'œ”N×~wà€£H»Rõ£Í×AÂ_6Úä3Úä3Úä3Úä3Úä3Úä3Z3Òîm™Úh{[fƒƒœ6Í#ÎiSûò?ù'˜‘6wFrs™7o¨­Ìõý€5y5ü €[ܔխ$_ƒÃ÷&¦ÿû×`–ûV(÷]5ܼ^·>°S£_Rd©Ñ¯R£_ÃãÛyÀaÇi”p|‡ ¹ÜWáÑ7tÑ7tÑ7t°jT9ä®yÖû÷ý‚+¡ìTB“vœåuâÌj×/ð†ZHïpí2ã0NÐeêƒvÝæO+ÚĪGG›<—AÂÍ;¡ßùЉÆÈþÕdDÔð/n])#[…¼ÁñÅSœ·©õª¨Ã„[Ô*%‚„›Z׿U£þÕä:Ôð/n݇EFÛ*' ŽoÍÂhÓ¯ÓVxô ]ô ]ô mÆJƇ¢Íú@Áde¨6O©k üÕ‰³£M´¢MT_^G›2 ÐeÖÇqÞÿn¶Ë$œÛ\Óu’póöúÀ<ý?à_MúI ÿàÖ%n1òŒ»©ÃñUo˜’;à <ú†.ú†.ú†ÎZ K \ ë× ô~KK/Ðý–V‡¿:qžºÁu¨Œó›B×;ýäß÷ß^×ã¿Èža“—’ªÊÃuŠ .™Uã~þ.Åá:%NƒÿrûUo—3þ¼“”Å1Køûý?¢•ìº&P?î?E#t£,þ˲Mêvíun‡ü=šŸK:VOEp{èêžù¶é%p8ÀÇq{òˆ nŽ|}Àáñè²'p8?ÇÞ1Ûµ0q÷ÿð®œ8âÉަ÷xÀûÜÇ«úí¿ëÍâ¦×÷»\‹Â[ÕÈûë×åsä%1·®©¡° þò6UI\ÒÒ8tïmp­ó‚¹Ú}3—|Ë•ÓiD!-Íó¨áZ =mYšÈ=Wé´YÁ•PC >0r cÓ C¼ …´ÊQmÿi°IYüí_SÔü[h¼»&iðCxc5™oÂ9©ÉëúÞ6oÏÂð‘^ ½òöÊoïŒ&ä#8!üñ$|q§ñ€7:“}ýöÐæý g3¹åÀ—koo g&=ÛCx£ÿ2¹Ë¿ý`æ2‰½Ž|£Ö2™¹ÁãIûò–c¾—¦¾Å“÷åm˜òpäÇßâI[Þ^)ëó?éq_ÞJóÑpö-žô¸>¦¦¹ý-žô¸åˇbý·xÒãø8¥¡}ù“·Œü²HÄ?éq‹½×ñ8¤YæýœÇU³™Ú…±oñ¤Ç}yKciÚX‹Ñžó¸úö.M·¼ýœÇÕ‘O­¦~ùSÇá4?³IÍ„€KÛ›ŸÙÔZà]éÝä z·ÅÒŸ‚Aê§á}û£‹þš—c½ÝÒÍ}né§>„·5î.Eiöd£ß~ðvIB³S|ùc•ùƒ î};·ôàž}{—³ÎöŒüâM‡Ñꥬ±O~µ]¦ÁõK¾Xð¶D®Å­™ÿ—:g,„[ïÎ,á‚òníÜžæ‹"5«º·MÁ”À9צª<_4gÊ©8çyXÃBS(ç͵ù8e!p~·qòЖÁZrôh8¿n°–z¶¦+Q}«6k8ïìz‹)Å­`ÍÞâuy¤Gž×RO¾Žúl¯J(NGC9:Yâ‹»`/Ö¯g¼€‹~»p€M39@,M¾è›åû[€,CžÇo¶\—]{†JÖ_^:@^r1ãt:jè^r€oO9ÀïíÙïÏÇö0±ý÷±=î2°ò-…2h¸ŒíËʰUŠ”iç4\šv˜ÚjaÚã2o.L;”4Ýÿ"¶—ùHÆ~ÛËFTªL»ÌWýviÚùºkc Ó^ËvÇìw;¶/[¬mi±}Œ Œ¼2í´Ý Ó¦gðveÚaïÖÔÀ×cBGœx÷ëÚ½ÊÇð‰Íß¾û}nóM§ƒ$…ïj(ŸI© †)¸ÊgªÒ(´ù0% W6?ÄíPJðãÔÆÊ£ÅÀe8OsÚWaóa‰Ó“‚K›yÜ‚«z¥‚‹\nÕÝM:¯+ô¬á2sI ¦×ó|d@.6¦œfh´S£ pi´á “F;ÍÃAŸGà: ŽÃ!/“øYÃW™G‘«¯_~Uv”ÍÈ ¾Ê<Î4¤¥€{•ÆrœVu8p¬¶=ý·ùÃwÈ…\&æq:R˜þ“:7ß¿ŒePpé?c6Ѝ‡vúvi›Ë[4®i,EÁ¥q•2ïrØÒlªh°‚KŠaM\”Ÿã–A}y1?Õv²µZp¶uôÕüÛÆû;äÂGS²ìø[A{¦æ'ÄýRùe… .¼%&d˜¾-þAÃUì×mo-ÃŲénZÞ.§7_ Øšo ô³‚«éM9$˜˜Í9¨‘WÓ;î"“Òã–¨›†{ïïMIšºÇµgº$Svž:U’™®“†Ëù¹–ë–w«‘¯ÇÖ .]fI×>:eÍøËkÓ&šÎG,øIçaLZ–ñYÂePY̧ޔëpœZ¢Càr€ó’e4À!†I}yµ(WóHh€— K‹ ®r¹)m-c*XíT‰À¥§ÅûaLZ¬ßÖµ­`–²ÖúÐàÊJÊcAóR“Ùú·ÍÊwÈãŒW™©½½ô’³8@YZî"ì.ß¾lA¶ÆµåpT \ÎûPÒ“ûåI›÷—Ö±${µQÜ_©!uTpøJ ès¬ºÍh;\­XË~v2 bRÃ6Ûè}¿=;½ahü_®§wØeE¸x#Ø®œ?n½%rzã4OÇþ…ÀUt]æg€Yôb£‚«ªFØZöuدMË»ÃeTHó4è°DÄÖ I‡N~Çë€7ue.úí2¨ŒÓqWO˜M¬•G64Xf£ß®ÖŒ©i/ÿÛfå;$¸…éPŠ-j ®naÊlR,mÅ"pñ©2Ì•‰k†Õ—eâ€ËÄõk¸Š0SÞ¨é•qåq˜\Õy§²))㊀…ÀååƒuðP‹uÍÆôȫГÆÑØc…˜\ÛP¸Â%§ ]Q»÷wÈ‹*1…ƒÇ£ÃÕÊ2 ûÐI³)yh™d‡«ýÜHu´Ií|ŒÀ…ÙÄŲ0›í×W Iz‡{SÒpzÒæÖ*Ú,9HÒC§BÏ.®R˜9ú·ë=Ö^’fôÛAè™ÍW<—þmÃúÒ.âhÓH‡:\o¾Â|Ü”[®ÐáÊ:Æ©L0÷Æ5œ•8×õz¸®OÎÃUÃe´Y6~Ø»­šÍw¸4®\ÒµÀ&#øòrÓ]öz*ɨ‰Có>E.òÑ@üo—ïÍû2#-Gl ½·®a2˜¸¶w¸Z †ÝãÄÄ­{nõåu•9åñ2QŽ:"«¨0æ)¡@0tQWþ>Ä7ݱ¨¸Þ¿¤¬-‹~;Ú¿$<ï©ÝFiöòiÁ…)=÷®¶4b|6£¡nI“‚«càa'£3æŠúòú¸ìÚê¬llÇ.‹-õZÜ‘öv9«ÁvŽ« ¢AéÐIë˜ÓvilY®Ž’ˆbå ƒ‚ëÕ ·QþmÃúRÁpžºc5襉›~jŸY«IÃET(î°¬Ây9Wá|ˆó„Úgò<õÛ¥ …e)˸›»gt¸²¡%?.8ÎÇ«†£ ?Zq>)¸žÞ¡ pûaß!o ì¡ ±m{Hדâ~\« v­[•ÀÁÞ (v„eǯß. ä&ÜBÒÚ\No.ão–Åäh;$p•#{ ‰Ž í#«±lìaŽ˜ËtÕp½µ¸î7¥@ŽXåˆ4›Ü”!þmãòÀ îÛ‚×@:%(é»ßdïO+Ét¸ª'Mó„‹Ã²1i7q:\N\J‰hâ–¨Ù–œWö2F¸Ø/‹A+Guøß" Öèa$y¡Ç¤±}Ëþùýþ—ØpµZM‡/ŸºËO%TÞŒe¼ê·së`×áÿmÃú„\€8õj^®ëiŒ°Ö9,4\HO1¸á³Ìê˃Ø>ØcCjA…~yyÔ0×íô§Ãu]a/ªrÔ”“~ûß?åáëÞ˜¹<¸Ë…xVp`‚s0¬nHþóoµï ûƒ»ìŒ .MpYéwB°oí%Øc¼¿Cz°w«&\Ÿþ\wNu9£Sç¨à*œOÃ.b(‹ÔãÔâq‡«é-i6¢Bp0?kDTn=çüv5Àc?Dh?ì;d‷ì ׋ýâ kt×Ò6Ç®¢v¸Ð-±n²ô——ó¦!\Á!Âbu±/·.ç'¥a«f¡¨­á`~" »eÚ&©ÃÕüÄЫÇ÷ÿi`@sRp%‡½îÔq‹ÏµÕá;\·\æ§‚K:5+¸:b:4ÆôÓÜ«Nÿ³ö±^‹Ã…ÀÒ«Ìÿ3÷9N>tï›ä·‹‘j«Ž Ó G^š`íb‚›ËÀ·B-º_+ÿ¦T]ð&›4]õ—Ü2I•jèyçý>kº¹UT‹OìQ¡ÁuÞQOױͷ{üu$ Åç‚S Ò!ÔẠjÜxùu·jhz ®ÿ6NC €ZŽFß?þ:êi Íå‚*nâËSJžöy×®Mu¸b}LyÀújK¬áZva »6Ô쀡tŠ\P°¿ýxTVÇ2ëåy( äq  c;lÏpÄQS ޹|›3<¾Ž1¸TëØèá“f;M$p>q;ÛJ†c!ípDMœÚKŽ¥«^_ëYw8àC^p‡¤àj€ãœð—VXcð,0&ì½ œÀ•&çј 4G g>uÂ8cUåÔ®n/žqŒüÍùÛ£‘¿ýLjˆ‹÷f¬P“šî!08fc‰€KÅïhȤ¦¦‹DàJ8ÛI7°ù1(8Ðn°\çíp@%Çö©# Âb·—Ç2¶.=cs <òM‹•Àuì¶Se´c“‚C½ØËc%X€×€ÖáGjˆ5S/ÕP;Ý.œ£a´Ý­DmK48 ×NÓå± h‡%¿– .¼—K±âÞå±–^‡kɼ:¬‘<Î ®¯øŒƒ©‘¬¾<à]Ì^/‹ÃÁ³2.,ORÏg\«Îí•-O5]£‚ëéݢ¸Š0e4äfsêÆuÀ¡ªl G™+¤]kŸu8¸10lÕ!-^FF¨Á¹l01©‘Ct8ܺøülKË àzq‚óÓU v¿±íB—œxߢbe£ËcÍ¢G’“ƒÛ‡î~ ®Ý$ogm @uÚºG’¯kShðcã¥J.EH:¥ÔÙøíãPç½¼£%$ ºJ–$B˜' G™Ù-î,1py,ÐáHÅ’¤šÆ¢àhÓ‘¬üWåeûIXׂz;ðbÁGõÓá_Ýw¸Î]ë¹*´àz²Ógñ×µ,ø×Gü«™^à ñ’3 sßÑþylˆÿ´6Ä>Ú›Ö±å®`¿æ¾)ÜëS˜¤ùò˜~¹Ã‘~…A=]†žöU Ìw{yÌdÛáP=ÒØ¨¶jå(v6}ö’7"¶Î)»Øzƒ¿T‚êpýåÓ°¹µÎ¦¦®‡ÒàºÊøI ªžŒß^±#úíoáÚ˜êü¥ V‡#ÑÔŒ¥£Bg,ïp½§Ì#^ðòØ„ê:ìF¦Ï*Xµne™M50h6õÐGÂ_*€u¸º’Bþ¤VË^øË×’u.P½¯\³„¿T?ëð3õ³– 8Ò«‹ýöw#€Ë|s¿Cò$yÒ µ›÷­œ‚#å˜?)¬ÕrZ¶‚U(V©‘½7øKu¹?Q—»vÒïWrÀ;¼ØE|(<«ãecâ¦A¿—8v© ÒÑÔMàr'¶lò×í)ŸÑ/{Ú.áªwõSÅ7½Å7½åôô–£›’Àµ_ÎG+¨,ëµ[L .k|{íð“é-§§7'ýåOLoã&îð‡Ó{ûÏßÉZn§É|¹µÃ©¶ÛáàÐd¿Ô­RÊÙ¯à(8c¥Æ05‘K WÁyšà¼ÇaÐpUÛ ÓÖn§ãqp]†Ù«wj»®àšãðIÑ·–z­4+¤Ýú-µÂM‡¿T3îpPWÈC²fT½ªÃ'X3†¤~ûK5c×Þ\«7M$üQe¹Ö“­t¨Œp °Ì[ÛÙwøK…釒“U÷¥CÁ¨j8Ègv2?»0Ýá Óµm ðp58÷=Vƒ¿T×îpQ×^·¡“A88õ呿÷Q:‰jÉIžô§pźF8(|–‚+ÖC“mìpU¾s1J[¥équ¸Ž›CÂq3Ï“þòʆÒVµEi°:`\г~*Æ5nW µqõë7þ²q%ãÐ$o[èÏŒ+ùŒ+ùŒ+6®)gÕ¸ÌE9–khǽ®Œ«l-›ŸW²Îk§¶úýõÛŸvuh02òÖ¯Ýá/¹t8ªl[}æÒ”\W<2r½¦G×Ö1†€ÏÄ®meép½tïÓÔ¼/+·zû£3—zÒbV°¶. Î5µŒ¼ÁÏë¢.X{VoéħÃÏœøä&ÚáÀùÍ•¿™v‡ƒ•µÃiÎäíVØ SÀÏ96ͽ#®|lÛ‰yä“oä“oä“Ù 0Û‰4vaØoV65nût½à ]o°ÁåÈ×—$®½vD 餯ÃÏœô•V¹ìpíîÂqbJ¶±Wp=?;7p†0J¸öŒ%l’—Xž‘†1BϘú^µÁ_óŒy~’o~’o~ÒùùG GÛñÂ$ì5cX»GÁ©Giî×àhÍÈÑZ3ÔÛ_:îð3çÀLþÁnñ÷GjíFH‹ê·ƒùiäÑ›Z»á?9á•eꂨ Žüg%󓯃„¿áqHù„Ç!i䤑‘ÈSOß$#K]»¬‡)¨òn©N< ·Õž‚†÷§á}û£³h›ìéÞnQ? ·‰ÂßȽLqøø·7YèÎñir»‚/Ϥ‘¡”Ísp‹`ñÙ·wž>‹dðÁȯÒÈûÄýû«ÖùÕv™×/ùbÁÛùŸooLÝÛ†) x}EnS <±Ï\wîÐåA&»Œ2¶b/äSK>¾_‡\ $N/胣PÀGº”ý®> :îÃ<¥£åLÀéj0 ¯ííÛ½–[B«ÌΩ1—vøþ©Ø>5.áxîR{0,¿j2à¹}ª„8‘·—ö Mc°àCûTF {Y¹äl}ù©·qçQx0·½Ìœ3º€ÌfÍ[ã8+³©–?\ <õ­"O0›yæK[ a&üöÒ?U¿á5I[䲸,~ûØ?•¦aŠô¸ú`yû‘øL %ŒiÂÔ„&\x\Uwx\=†GÏôS!#ò¸yˆ× áÔãæ°k¾J›†v}SÀ©Ç-ŸÙ(ÿ¥Ç-;©2Kø«}}}Oy\y«jQÇö?¿ÿÇ•qøéÔˆÃO§F~:5âp”qÛ¶±Íã:œyÜò™8ïwi„ÇÅjÍÂÉÅe§¹-ÐÌãꓒʉ€“Š9îÂãVUB '#Ã2CàdäK½û6¨‰·vóÏ3ð¸Z¡¾ZðDZ#7%éq‹/´nU/ý„©V²Ç-A(^“û§b„biMA Þ=®ž®ÍÊãò[ªB‚„¯ŸŠdŸ™â¦hº>è¾´,~eŒ3„gò©ª…îáæYÛüú©|¨Ìë×ú`$bhœÖN{¾†©¤Aë¼ %4¡âÿñûÏÿˆhÓv{˧\y7‡ŸÎ»9ütÞÍá§ón&ï^Óî¤à" ¨iwAywM»‡ Â3zË¢S@°¦ÝÂ;Œ¼»¦Ýi†ð‰Å=Ÿi¬[Ö‰,á2 u5 0&Å4ΜƤ4â˜T%¶‚“˜4ŽsB1)_óÕúò$&¥4ᘴ$¼Ç¤X…Ü@°¤M޵Ã_IÁ“‚/&_L OÅ$×΄ÃOïL8üô΄ÃOïL8ü™IY–úAÃELZÅkš@L*)Ά“˜´$ˆ©¿æIy $ ;“\–ß>«˜TŸ¤0|b'A9d“Ò¼d@jäULš‡MŽUŤi¼æÙ€§¹Æa†1i1ýåUL®‰Ö¿zL*±‘+xI9o ®ŠIiÌódÀ{Lª¢8IŤùmœ®‰¤YÑ“¢/&E_Lо˜ŸˆI÷o®½‡ŸÞ»qøé½‡ŸÞ»qø3eíÊéÑön .ÝoÙ!¥1»N]øGÁsïoB€ÇUÊð–èHøÐö§1¢²víÐiQ§þ©%‘eíUÁ¢Wƒ3÷ Cí²ÊÃ<®ŒË:1A8q¿es: x\‰1j³î÷–çeÅ Àã–¤;•áÄý–4®:„ǽå*Ú2@8°¼.}8ºÚ>õ¸õSQœ–ãAbÿ|ÂiLZëx@eó%§1iu¬ãI«/A8¡Í±TG_}R}©Á]»2?½+ãðÓ»2?½+ãðÓ§!þÒi‡Ÿ> áðÓ§!~ú4¤Áq<6C°ñØ Á\Äc3pÍlÀE+ãðÓge~ú¬¬Á_ÇÑ£/G_<Žgâq\¬y^ GÍû«ñ8úâqôÅãè‹ÇÅcmx<¶¢ŒÇ-ÚðxlEI´áñØŠ6<“hÃã±mx<>¢Íþ©ßÞ]»q?½çðÓ»q?½çpc7^¹‘B›Þõ¾*¶é]Þ‘RÚƒÅ6‡Ñ€çfqÚˆ¯ö…4Œ%ð¡Mï´˜PîÆÞÎZšê½‚O=QIÓ\úƒ™¦*¥y×¶ŠÃOo«8üô¶ŠÃOo«8üô¶ªÃ_ÚVqøém‡ŸÞVqøémUƒcÇ2}É€ Ç2}É€ Ç2}É€ Ç2}É€ Çú¬Éì·wWâÌá§g?8søéÄ™ÃO'ÎþRâÌá§g?8søéĹÁ_õ¸èó¸èó¸èó¸xÊãD“ÙÝ—Ý}©ÑÝ—Ý}©Ñýdjtì $œמøeOõŸKˆ<÷¬ÚÔ3…=-Yÿ{ÚŽS£Jˆ½ÀgeO•þ~YâÞve)Ïa˜=½¥%\©‘ñ âÝwPñî;¨x÷T¼û*Þ}テŠwßAÅ»ï Â—Qß}õÝ—Qß}õÝ—Qß}õÝ—Qß}õÝ—QßqF}„3pÍlÀE<6C°ñØ Á\ÄãO*Þ}テŠwßAÅ»ï âÝwPñî;¨x÷T¼û*ÞŸ:¨ðí·î¾ýÖݷߺûö[wß~ëîÛoÝ}û­»o¿u÷í·îx¿õ|<޾x}ñ8úâq<ÕAÅ»ï âÝwPñî;¨x÷T¼û*Þ}テŠwßAÅûS¾ƒŠßAŇï âÃwPññÄn¼_µêÎTéóÕÛ÷OµRÏëÿûƒVÝòun·á%¼•zJY¬3õ½º“§¾/’ðVêÉõ4÷c74ôÂ¥€·ROæñJàs{PÕÒû—÷T|ø*>|¾ƒŠßAŇï âÃwPñá;¨øðT|fu±L_2à±L_2à±L_2à±L_2à±>=¨øðT|ø*>|¾ƒŠßAŇï âÃwPñá;¨øðT|DŸÇEŸÇEŸÇEŸÇÅS'*¾ýs¤•@¦FõH †³Ô(í̪õ½ë}-ý"‡ã 1lR ëjOËòÓÒ§š®yûíëÁóÔnp85®zÑ úǸQÆ8D®±qv+xo®^Ÿìc©46{ïíc±rR£Ž±Ó`½½·-»=zMkîrºªß.Âù[NóœûŸqŸqŸqŸq…³Æ5ì Á•q iSÕTíˆK<îtBÞ« ã¯ë¤T®ÖÛ»q…e׳ >³ >³ >³ 'Í&×Òvöïÿl6Óâ•yDf¢ïfSú ™Í85ùpïÜUÀ~Ðf³]âH¼Ç¤e8OÐlB™œÇ¤ø6\k»^ûTôWôWôWôWÑÍ&m“œéþrT_žWªÄoÃØç'ùŒ+ùŒ+ùŒ+ùŒ+2®µ<4å"áʸÒužh\×8EÞkšã¼qÉtFNŒë:Ì W% ™ 85®+má%ûÀx& E†ôV¦±wîù²©»/›ºû²©»/›ºŸ®`-¹ng/»[¬kU]©úšª´ù¹›¬8n:œ*UCœƒï©úufðn\µzaÁIªže$!©z˜[ÙõŽ+XGyô²‹:™í¦ÿ´ŽÍåS¢Ý´48k7­öá¤á`3®ãi8Øì ÂIÃÁf\ǃñBç­lr8“q®Æu‘‚V—Ýž<ø<.ø<.ø<.ø<îdY¯ÆÊ4«¡S·ì^`ÍxIòÂ8pâq‹cèq±ÌÙ€¤ü6f¸9¾æ4YpâqKBax\‰jè¸Ç oã2psùÜã‚Ïã‚Ïã‚Ïã‚Ïã¢Ïã¢Ïã¢Ïã¢ÏãÎÖ:ë ™÷hxÜ’à^GäqK‚›gž/ì8y\=@‰|à§)ÐãbI“'· ð=î:‡EÙy¸¾MqÎûµ‚‡}}}=÷˲ECãØ›Çç··ŒÉsöaè-cÎÝÃÞ2&ÏÙK—¹pÖæ²ÄÚ€ÎÙ—8ÝNã9œÉZNi„Yåu(mOØàÊã–E"@K±)Y*x_ãÂ8&˜U.ÒVâ“pâq% Y{Üêrs1àÔãZ?f7÷·ŸÙŸÙŸÙŸÙ„“fS ³‚k³IlÞI žKI<Ó=G‡R«º¨ùv¨ç0â@Ý»0$œêi4Ì&¨‘WÝQ4úå}Æ}Æ}Æ}ÆÏWýwõve\y¸–Wé̬NŒkÉíqLûy¸„SãŠ!cãJÁúòÔ¸âX°qWõåeîšË8ö°›|Æ•|Æ•|Æ•|Æ•Î×‘Æ áò8}=ØIиb²g)&ÝzÒ}-œW¦ ×U0® ã‚úò»Ìªºö6Àí¿„q=ê´ºý¸·•å¿?iä<„éºñiÿ÷‡ø»oÇü0ø]~ê O^>­—ÌÓÑO­”eûºP,ÀÿúøìãÎD¸?ˆ¤¦9—Ñ€÷Zbûz¡d@eY€NF¨Ê?õdP–?œ 8¡<ÌýR‹p:B¡åi?ˆqý°½×r,7ë‡éXn8ÖÓ±8Üp¬¦cqøSލ߮«ä2AÇŠ¥)'ü°kyKÄŽÕýòÇÇŠ%bÇ Áúò̱¨_2ÇjçŸ?LǪ—[ t¬ahà?lÇŠ©`Ç*cÛ“þxàXÃñå©cm»–dÀiQf£YBŽ5dÎëÈ"þûH ù²Ï/,ûüï#šËï'ø‹«Î1]Ûüï£Ë§ ÞMûK|[ï¦ìð>©bzIT¨ºäôŸk/w’ðUC›}*m-k«:6‡_gÿåñ©¸ÎÏ*(Ïÿn¾ª/ÿõþ¿›¸ÏÍyÿùüúý‰òŸI™º>¸6¿ÃÕmzß§^ û5¸ügïaI¨ç¾ü*Ø/t™^MN|ÛÍ„º;<³Ï«ÉôÒ±êîpz•”]M¦—Ž¥Pw‡“ØÎ¯&“p®„º#*ÊHÓ.OÊEL9¼÷¶Ó.OÊEL9| †ÉDL»<)1åð®U*DLç~ì!dƒÁ¼Ë»Å‰>JÛzÞÕÝâB÷BiÌ»¼[Lo K¥m8ïün1½l.•¶ãå‚.ÛA°¾œûù‡³ËÁõ 1*"­·†!œå3õ 1,"Õ[ÃÎ-÷ëúrp½5,á¯Ú|ðÙ|ðÙ|ø±yIÒ‘¯CXмM¶#÷\F]¦×~¥T6t~9˜\ûURÙÚeÔå`ríWIek—Q—ƒÉµ_%• ]f» \f»ö áìvo½ \f»ö áìvï@®ã¬l›æ áìvo½Œ\f½ö+᯺Lô¹Lô¹Lô¹LD.³ØfÌ›Ÿ,êó5]©ú¬#»àðÓÙ‡ŸÎ.8ütvÑáòÜb•´ÖG»Š5„ÓÖ˜UҸ̦b áL¶JZ—ÙT¬!œ î’ÖÀe6k ×'\¬šÈ+ ±êO$„Xuï–bÕÐe¤X5‘|bÕÐe¤X5‘|bÕÐeÒ­¦„ÎÁJ™ãá¤ñ•‹0R†P)VÝá”.”‰0¬\=k£UZ‹L„‘´³(±êgt¡»ã*¯ÍH†u$¥~:)åðÓI)‡ŸNJ;\êH¯jÓ`…ݦ!œêH¯jÓ \lÓNµíWµé Ðl¥I)‡Óp±ªM£p± LK¸–få:Ò$\i+\0i.„Ž´.¸Ž4Qc:ÒF¸à:Ò$\i.ÆPÆI}çZ¬/×á/„‹à Á.‚/\¸r?søé„œÃO'ä.%žW!h.6íg§Ï«4›ö3„Óìb‚ÙŦý á”l‚ábÓ~–p.„ÄsRâ&äR♈7 ‰g.„ÄsR⇠!ñLÄ›…Ä3qñ÷|'Ðݾ„ÿÈ$ž]á"úÂEô…‹è UÕ±áðÓ›?½áðÓ›‘×Rs\ƒŽ¨Ë1 :£Ô)5舺Ó 3r©AGï­S :#!—týø…kÐÁ„çe™ø¤‡îÕˆ}1ú"b<@ ኿ "n ÿ.š¿ Nøû·¨püýk €pÂß/4];G?½säðÓ;G?½slp©µ(E»¼"aäðNa,DK›8.ÂÈáCŸ .ÂØå¹#‡w c!Â8÷µ^Èž:ö~zoÀá§÷~zoÐá/í 8üôÞ€ÃOï 8üôÞ Á_µùà³ùà³ùðÿbó¯5ÉTÝRGòÈá§“G?"_D ¾ˆ|ÑW—~÷Õ¥ß}uéw_]úÝW—~÷Õ¥ß}uéw_]úý©º´okq÷m-î¾­ÅÝ·µ¸û¶wßÖâîÛZÜ}[‹;ÞZ<£/"F_DŒ¾ˆè«K¿ûêÒᄎô»¯.ýî«K¿ûêÒᄎô»¯.ýþT]úÃW—þðÕ¥?|ué_]ú£o¾˜´žÔÜk¡¹Çá­à 5÷ZÁAhîqx/8ͽVpš{>õùåš{]MOª\zêÒ¾ºô‡¯.ýá«KøêÒ¾ºô‡¯.ýá«KŸÍŸÍŸÍ‡ÿ›±.ýá«KøêÒ¾ºô‡¯.ýá«KøêÒ¾ºô‡¯.ý}.}.}.}.ãªKWÍmä·7%ýÙ“fíp–]PÒozQJ³v81NúMÍFJ³v8½bÀH¿¹†6—f=wçw]5àýŠÁªÀŠzaVÑUÞ{aVVÔ ³Š®ðÞ ³*°¢^˜UtUÂe¤­ Š´é:ÎÕ-u™Mð™Mð™Mð™Å®°j«"³YåT xo¡ZµU‘Ù¬rªœ˜MÕVEf³Ê©pb6•+šM½#ájŽ5X¢zÎsÉDÓe6Ñg6Ñg6Ñg6ÃÀªšªÍfJ5àÄlòVûÓfS…R 81›ªšŠÍ&_­·S³ÉSO×dWÂ¥Ù”e'“Š®p¼Ufb¦xé2›ä3›ä3›ä3›d˜Íª‡Š¢Í*jÀ‰Ù¤2OØlbLœšM™"6NÍ&e¼HU T Wf3Ï×kf“j¨£R˜³y÷å6ï¾ÜæÝ—Û¼ÿcuô­J§ºžº‹›ðf6›Ò)¨§n⦼_Ÿ\•NQ=u75à¤ÏwÚX@µ¤[7%b”®y¾y¾y¾y7ºÚ6©R0ï›:©ïó¾J•¢y§<ßÞç}•*Õ󾫓p¢][¥JA}S'•p.*#tÑ*³l"¯øt™Mô™Mô™Mô™ÑÙµ‰"³YŸðÜ Æ8!ÈMwÔ€³©"¤Ðlªî¨'á¢j†A³©º£.W™e´b‹œ6VŸ‰ÊWºÌ&ùÌ&ùÌ&ùÌ&ÁS»]^™Íª(jÀ‰ÙÔŠ2›UQÔ€³©ò¢Ðlª¢¨ïf³Ê‹b³Y•„ËÂK½ñ¢M¬1ôÊÔfs÷%'w_rr÷%'w«ð² ‡¢KH«V¨''›×Gå´«V¨ï9í*ŠrÚU+Ô€Òà* sÚª*á/ö‘þÓúÊ”\ÚFô«äÒÖ|ÂYëÜn6R. ›”Kkf#äÒ ³ri—f6J.MÊbº\&ø\&ø\&ø\våOä2«Ø§Ï$Zr3è2UìÓ€—©ÊŸ¨w6ædÀ‰ËTåOè2UìSÂ%Êâ%h:”üV GÕe‚Ïe‚Ïe‚Ïe¢Ïe¢Ïe¢Ïe¢Ïe¬«®«t'r™U­Ó€gZ†Ï@1i/½ð•á±ðtUë4àL7aQÎЄîFN›ÞêéÊÉøV¦eXÔ—Õe¢Ïe¢Ïe¢Çeª8#¦ôdeÒe „s—!eô UŠr©T£ŒºŒå4z¨F¸¢œ81[µ7‘ˬr›œ¬2U{­2«Ü¦§Zíc1´ÚÓ`}yR=¨"ŽØe†Hµ]ó|ó|ó|ónñ¤¬â™pÞ8+»XÅ3á¼W½LNU<¦+V½LNCåxÍF¨œ\nÿS•.œÀ‘Ö¸xÉð¡Ël¢Ïl¢Ïl¢ÏlL2‰*‹‰ÌfUÂ4àÄlª,&4›ª„iÀé ËŽ2©ÙÄ`}yj6)+lÔ#¯ªFõ4/ƒíH„‹µJºÌ&ùÌ&ùÌ&ùÌÆ8ÒÚ/ÁIè¦qiÀ‰ÙTÁK#1 ³è‰åµ@³I½ËK©Ù\£a6!¨‘mû_•-·‘oÿ%Ì÷²‘Ê}âþû“6‰qK¡ÂÎ4.ø]~Ši\/¡—ò% ÀõK¨Æ%~ Ó¸”/)®_B5.ñK˜Æ¥|Éàú%TãÒx Õ¸”/™\¿„j\â—0Kù’ÀõK¨Æ¥ñªq)¶LãÒz ׸4^B5.Åwd—æ/a—à%,:ƒ—$×/¡jƒÖ§ˆÆ%éØT—Nµ˜Æ%“9—N—¦qÉšœ…Æe‡3Å=ªqÉDö„Æå ×ZzUÊò‚´ôªz¥§Zz%8ÕÒ™L$…S-½-ñ@Zz%p¦¥78ÓÒK À™dž©$JÎB¤’‰L8©$¿]ˆTR8ùí\¤’üv!RIáô·3‘JúÛ©HeðÙ|ðÙ|ðÙ|ðÙ|°l¾ltÜ@?r³§6)œéG΃gú‘ã`Ø|œ 8ל ›#€ ›Ÿ7áƒOl>øl>øl>xlþ •?ìÅIJy7lþ‡iónØüÓæ9ܰù¦Íÿ0ãüª¬ m¾Š©ðL« T˸Ðd{ŒœÚ<[&¨ÍÇbÁé¼/o1l¾dç6/4S‰Í ÍTÃæ¹f*ùíB3Õ²y¦™Jl¸f*²y¥™Êlžh¦ŸÍŸÍŸÍŸÍ›q~ž¨‚6±ù\òdÀ©Í‡ë„ãü¬¿<°ù\€ÍïÑÊ€³8?[6Ÿ € ›Ÿ§iüÜæƒÏæƒÏæƒÃæÿûHeõöæ@øSxo²A ÀŸÂ»9bà¨&Ž8lU¦ÿ¬€ã®Ì>E€9\*Ç]˜Š(ó¿+€ã®Å>›+GyKŒþDùÏ¥!CQ¶áûÔ+µ4¦lÀ{(Aå¹/¿ ɦf Åcq=\)wxaŸ!—Èéõp©ÜáôÎ0»DN¯‡Kà'a·]"Wڌı:\i3® Ž Ì¼‰6ð®Í¸*8‚zá&ÚhÀ»6ãªàê…›h#‘3'ogú@Høê‰S·ÀZF¾`âä-pz¿[JøÂ‰ë·ÀÕ5îz¿[ÁÕ5î¼FêkÜõ~7„Ó,`½ìŠÜëýngEîzÙ¹#½òrÀ±mšæhÀ…mšæhÀ…mšæhÀ…m^4×ÈvA[ÂÕÙˆ”ÚÕ¦­nkÓ{ØRjš6¿­Mîa+©]mÚê¶6¹‡­¤vµi³ÛÚêºu½‡­àòºõz)߬÷°!œ6Ö¬—²‘i¯÷°!|bÇ?iÆ×­ë=l Õ´£Ï´£Ï´ã)Ó>Nf$œ›6Äu,·~z¹åðÓË-‡£åVM®b· Î&wå[`Ú›Ø-„S‘ÊUùö‚D*«Ø-„S‘ÊUù˜ö&v+áú’kÚ=9¡i‹L[iÚöVu©i M[jÚùI¡i M»iÚJÓÞÔj%\šö&]{Ñm¢/ÚD_´‰§¢,ñ½ûJ|ï¾ß»¯Ä÷î+ñ½ûJ|ï¾ß»¯Ä÷á+ñ}øJ|¾ßÇ{¦[µ ZI¸Ô­ÚÔ­.Z·j´2àm㹩[]¤nÕ!heÀÛÆsS·ºHݪCЊH½yJ|¾߇¯Ä÷á+ñ}øJ|¾߇¯Ä÷ؼ Û4ÍÑ€ Û4ÍÑ€ Û4ÍÑ€ Ûü´Ä÷ñT‰ïÃWâûð•ø>|%¾_‰ïÃWâûð•ø>|%¾è3íè3íè3íxÊ´e‰ïã™_•ÛXÑS>a±Ü2¹ÀgË-妷>¤\`‡#à|ÂtÞ¥\`‡ÓÕƒöñ=ÒŒ.¾Mõ¤®B€¼Ÿt¯ª€èp{4àý¤{UD‡Û« „ËøÆõþý¥ÐûsÍ{ðÍ{ðÍ{8;ï«’Ÿ„«y_eýPSêägÀû¼¯²~pÞ«’Ÿ'ZUë Î{åz”pµ®1Á>º”IÁ>×¼Gß¼Gß¼ÇÓó^É;%\ÊLlº|pÞ3¹z-àdÞ˘ «í*ÅgÀé¼çkÀóž‰ÕE<ï\qP*Å=×¼'ß¼'ß¼§³ó¾jéI¸ò÷UXÎ{ê*TNç=Fç«–ž§óÎàtÞSVp5ïL2Ì»’ÌsÌû»o}÷­ïïϬïüèvÓp©F´)ãéÊÖ.†gÀÛ¼oÊx ²µ‰áð^æZ•ñ@ekÃ#Úg®‰ ¾‰ ¾‰ ''nS³“p9q›´š¸UÍ΀÷‰#Œ¾|âV5;Þo­Òv$V8Ä«š8á°B´Ž8¬­sÍ{ôÍ{ôÍ{<;ï«„«y_?æ}“£3àÉúÓŒç½ÊÑp2ïU›:lUµ‘p¨¹ê\OÌ´êœkÞ“oÞ“oÞÓ©y?ôä$\Íû*.çý§hÀû¼¯ârpÞ«žœ'ó^Ååм¯zr.wã\6ލ)Ù8Ǽß} ôÝ·@ßOoÀ7A8 W­æ«:œNÌvA8Þ³U%f« œ'Ìx3ƒv¸*'ḠóioÕ?­ÓC ïEѦ¢ç]ïEr@…ç] ïpEr@…ç]ïìŠÛL>ÛL>ÛL§msÉ¢læ›)X{¡LÔMq¾¹ðâæfœÁ€3ÛÌV iœÙf\’ÕëkzòÙfòÙfzÂ6ïß~qí…üü^ˆÁÏï…ÙæW!)•®S¹Î .N¨BŽóöåyocí³Ï>…“–kºŽýí¤ d±¹Øë› N[BêõÜr<˜éƒt-êí*nÎa£ßP¶Y[øƒ'Çp™ö@7I×bÀ‰mæaJØ6c øLwL­—ç™ÞWâ&ƒŸ› ~>n2ø3¶Y®%ýÛ…mÆ”Ã*b*lómI6É^È´ÍR™ mÆ”®NmsyË5BÛ,`âTÜ—†qs˜;=ÊÓ6«6KÖ¶¹zÖ<pzD<çîÓS œÚfkÕúï#yß 8ãÒÓŸÂ{?>’žþÞe,=ÔüǪÒÓôŸµôtÚ¥§Ù§¨ô4‡Kéé´KOóOéiþw¥ôtÚ¥§“8¯åÒÓI П(ÿù¢¤§df"ÒÓ6|Ÿz%jȤ§ xO¨DjõÜ—_s³ŽŒâ¦àÞQÒÓ>°Ï†ʽ#¥§;œò¹0†ʽ#¥§3j’R§]Ä”Krx¿j"¤N»ˆ)—:åð‰X“:í"¦RÅŒ¼¤Ø)ôÐŽÖ#¯(vFzž.´£ÁÈKŠJž#µ£óå‚8r*“Îqäd*.LáŒ#§2é F¤•<ÂÙªZ™t`#R%Ï‘ðWÍ&øÌ&ü¿˜¤<Û¨pPš”uÖV§Øo(¯”u†VÇÙo¯’uÖV§Øo¯’u†V·‘Ü«Ûxm œÑ×T’`u¯ „3úš;ͬ{.ÍYÂ_µºè³ºè³ºˆ¬Nv¹%£Ë­ê¿:V?½ÊpøéU¦Ãeæ*¬¬›.w-e§·@Vae`u›–2„3Ö*¬ ¬nÓR–pÝ[É%“‰T£Lΰ·RH&÷Û˜R2Z”L&ÚªB2ZݦŒ ¬nC†p²ýÙt/@‘q•j„pÊþ¼ê6^ïã.Õá”ýyÕm¼ìŠŒÙH̪«#=àðÓ釟N:\Š¯ÒÆ PojÆNE‹Wicà2›š1„S•ñUÚø4PizÐàZꔋ—¢Å–Ë0Ñbâ2B´Øp.ZLÔM…h1t™M›ø¢Yä79bÁe‚Ïe‚Ïe\¹ ‡ŸÎm8ütnÓáR6x.³é C8• ^Å…ËlzÂNW™U\¬2›ž°„+—²ÁÝe¤l0Ìm¤l0²ÁØe„lpw) \æP¾hrâMÂ_p™ès™èq™ªBêHÌ8ütbÆá§³×âv\õŽèÙ1Õ;cû/US½3r©zG)¨êÌm¤ªGãØÂ½Ð긪崖½Ð긪崖½ÐꚪåV§d9V>§‹âÆßõ: œºÌj\À¿Ú„S—áÆåÊ¿8ütþÅá§ó¯©<Ãá§Ë3~º<Ó௺uð¹uð¹5.ÏìòÊ­Å Á­ƒÏ­Ã9·ÖÚ·È­…0!¡WڷЭ¹0ÆÄ¢×¾…n-<Õ#røé‘ÃOçˆþRý‹ÃO׿8ütý«Á_uëèsëèsk˜#:*G<¤) ü·Ž>·Ž§ÜˆÌ·– Ä­•È,pk©@A´%”È,pk%}èÊc9ütËá§óØ—…R»°«ríBïüåB»plCǵ 9|êU6®]ØU ¥,§#OâðÓy‡ŸÎ“:ü¥<‰ÃOçI~:OjðWÍ&øÌ&ü¿˜ÍkÇXUòÒ±ŒsøéeœÃO/ãþÒ2Îá§—q?½Œ7ø«V}V}Vç:ƺûV™»o•¹ûV™;^eŽL⢥Á„€\e´€X—ãbx•Qb½õ” ˆùª%ï¾jÉ»¯Zòî«–¼ûª%ï¾jÉûSÕ_p÷ew_p÷ew_p÷ewœ<ïÖÁçÖÁçÖ¾jÉ»¯Zòî«–¼ûª%ï¾jÉ»¯ZòþTµÄ—fÝ}iÖÝ—fÝ}iÖÝ—fÝ}iÖ§YÏ»uô¹uô¹µ¯Zòî«–¼ûª%ï¾jÉ»¯Zòî«–¼?U-ùðUK>|Õ’_µä£g’LíMÊÀµ ˆãð¶‘2pm"dà8¼o@„ \Û€(…COµäÃW-ùðUK>|Õ’_µäÃW-ù>³ >³ ÿ/fóbµäÃW-ùðUK>|Õ’_µäÃW-ùðUK>¢Ïê¢Ïê¢Ïê\Õ’*j¸ bO§´êb•aj”ÎVJ«Nûf¥e‡“‰ã´êtâ¤å¹níMgÒ€÷ަUtV­:“¼ŸV­¢“è´jÕ™”p.¸œ$»ë*ä$]||g]îXU#ÑÄ­B‘¼3®ª‘hâV¡HN&®ªF¢‰[…"%\Åy¦Iã¼ÔƒtM\ôM\ôMœu?b•}Ô·+=p2qyÛN뉫JœL\œ&,ìW•%\Nt$ôÀJÐÑ5qÉ7qÉ7qɘ¸U·yÜ*ÕhÀÉÄUÝFE¨˜IS„’šëpÊIŨ˜™¨šëp„3kÅRs+\ó|WE¹ âù®"rœjw”Là”ƒ~lê Ny¾·Åiw” àŒ–VjÅQ–d®GáŒ2™êÊP–d®GáäËs]Æ’Ìô¸\f|f|f,³)Å ÕÇlÀ©ÙÄÉq+ó`À™äË8fC„º‚e6\ÆÍ2›à3›à3›è3›è3›è3›h™MÕaÃfÓs6 §fs¥ò}LÅ|;3K%ô 0s³ k–ÙDŸÙDŸÙ$ŸÙ$ŸÙ$ŸÙ$Ól6gbó5p*”2M†ÀT¾Îœ‰QP£ebýæs³âg–Ù$ŸÙ$ŸÙdŸÙdŸÙdŸÙdh6k“±f^(S1àL_'Ü-mÉœëàšú: À¹Ù”%ó}"·É>³É>³)>³)>³)>³)V´Yòœ‡4Ypj6ƒ•Çy2àÌl’e6Cpn6ÃÜôΙMñ™Mñ˜Í²—ùao×,³ápÃl~˜fÃá†Ùü0Íæ‡¹“Zµ¡ÙTyDNÌ&–ˆ:«<¢§fÃ6bÔlbApa6\‘˜PA4̆+&‘//T-³aŠIôŒ•+͹Ì&øÌ&øÌÆÜIUCh6U¹Ð€S³ W#%žÍ·S³É˜Í®\à2Ú0BËl‚Ïl‚Ïl¢Ïl¢Ïl¢ÏlÌTUÄu›!Íœî¤kÞïýýx°“Jƒ¥¹:LÎÍFhZf}f}f“|f“|f“|fcø6›fNÍ&g+%¬·39T³Ü—3€3³‘²~–Ù$ŸÙ$ŸÙdŸÙdŸÙdŸÙd³Ü7\Šî>,œ•ûèþ•ûHjdï¤b™E*Dçf“Ƙâçf“}f“}fS|fS|fS|fcî¤2Ó eå¾1pVî+†Ùäi2à¼ÜgU‰¯À¹Ù •¬ýs³)>³)³©Bž 8ƒŸß€3øù xƒ •”Mô4WáO'] › èh(®ÂŸÎ4« èi(VáO W¹Ð÷$í(Bß›Ð÷éÎüj½˜ ×÷¤fÓõ=‰{%Ú0øùhÃàç£e6›@'0›M“ÂIoú&ЉÌfÕä„pj6«@'2›U“SÂU´Ò›¤ÉYHob³Ò›´†KofÃ¥7i3L;—ùï#á èf¢šŸÂûE$ªù)¼/?XT3«‘'6_E5é?kQͼ‹j²OQQM—¢šyÕäŸ"¢šüïJQͼ‹jfÑ™ÂE5³d> ?QþóE‰jfÈDD5mø>õJöЉjðž:È*þS_~U†,Í: i‚9G‰jvøÈ>Cøu(sŽÕìpJærðë(¡9⮄æV9:М¸)Ðð.4·ÊÑ·MŽÈ‚¡“9} T1õÐ)‚œ‰¶þUL0t” G1ÜTêW 7yë¤Ö 7•úÂéZ”‚Á5²RßH8ž^sF ¸˜^sF ¸˜Þ‹fóÚ¸k$\5¥JõJmŠÈ†RÔHõJhœÈ†PÔ(õJmŒÈF1ÑTŠ—L4+_ ê|])j œÞ-Yùju¬5þªuDŸuÄSÖqô´J8· 2é»~:ìr8 »ª/zÕTpÞ½‹IëØô#!œjÞ­b’¤yWõ#%\·?s™H"Í%d"‘u(™È~ñUÊDBëh2‘Ò:6H —Ö±©A^4_à&Íá” wÕéºh¾ÀMš ÂgÖ;¯-:«W1r…ªyçXð8üô‚ÇáÏ,x›‚£‚K¡ÆUÎí¦àáu‹zá„´MÁQµ¸j$F+„-£eBÄh…P£a´»P£4ÚM‚QÂ%£õ¦Çø¹ÑŸÑŸÑºÖa?½sø3ë𦡨àR*qTF»i(B81ÚMPEÚUCQ奄 ©Än´R*®ÃR*‘ˆ ©Dl´‡T"7ÚCQÂ%±ë¦ˆø¹ÑFŸÑFÑVÝ7GzÀá§ÓfW¶é"I¸–?ª"IèÊØD»Ö¿»²M$ ÝœwE´Í5 ]Y‡ŸÎ8üô¶·Ã_Úörøémoƒcÿ1]Æ€ ÿ1]Æ€ ÿÑÛÞÚ^¹ÿ<÷¦Ë@¸òÓe \ùÏqÓ ½¿nÚýe°'$ÖJï¯ÃÉwä ö3ó8ª÷çÊA8ütÂá§kþR-€ÃO×üU—‰>—‰§\æ —pq vçÿÜe¢Ïeâ)—ZzÀe$;눧¬CÔ¥üa]úî »w_ؽŸ »Çª'áRIfÓ›Q#HÌð®$³êÍè‘ß%f$üÅç»oãùîÛx¾û6žï¾çûSOߺv÷­kwߺv÷­kwߺvÇëÚa"¦Ëpá?¦Ëpá?Ÿn<ß}Ïw߯óÝ·ñ|÷m<ß}Oßb÷-öwßb÷-öwßbÇ‹ýó.}.O¹ŒÜx¾û6žï¾ç»oãùîÛx¾û6ž¾ç‡oãùñDÄDx6u —"<›TÏE‹ðlê<¼%¢›TÏEŠðêt«ZºU JÂ…Ñ (*”-u \#}#ÏŽüªð$ájäבßž øD2 4ã‘OýÆå»¨¹S_"µ“kä“oäÓ©‘?$š$\üª×Gþ§hÀûȯzMpä«D“„Ëìœ+1Í¥Ääù»/PßO'䛯’„«æUp 4RoK¼/‘«àZ"W% Çû¢OÏàþi§!JE„È‹ˆ³=òBEDÈ‹ây©"²<‘¾qYGðYÇÉMî…$áÊ:Va$”@­ZHœXGF‚ÖQµ$\¶/sÉ#Òf¯$\Ö|Öž²Žè³Žè³Ž³›M³HµHL0BÖ±jpBâØý"rW¼jI¸X/…4Q³ M䲎賎ø„uT^ ƒÖ!ô6”Q‡së ª´È&ˆ:œUÜnnß´…$\YÇ*4cGÕ2àD.­ Aë¨ÚBDÈÆ5tÁ7táäÐmâ@®‡.±ßN«Šp¦oX ¥¹I¿]&¢\ˆÔj”kä£oäãÙ‘_Õ}$\ü*õG¾ªûp2òUꇴaH®¶Lć$¢JÄÇ5òÉ7òéìȯò<Ž4=¯P÷j•ç1àl1¡™ ù*Ï#á¯%¢U{gûíí¿ÄÈ?ªŠ¯2:ûÐý÷'=Yá*5½É7½É7½éôôV Ó¬QÎÅ€³ÔjÞ»ëˆ8›^)bMoòMozjz³oz³ozóéé­z.¦wÿ‘FYãš 8+kX‰±ÌΧWÈzXÓ›}Ó›ŸšÞâ›Þâ›Þrzz«.‡„£²†Uµºêߎö½“5½LO¯ß°¦·ø¦·<1½UmÁ³1bðó#GÓ+õ6ý —z«˜ÆEéìúNõV1 Ò;¨ú®Ö^!“AŽr…Lž^!“1Ñ“É0¦7w.Ûd€_ñ^?ï½ þÌôn: .¦w½ÐÓ»ë\@8ÞUôMïªs!áÊ{…œiMrxz…œ=/ærÆôV9 ¢Za]„½€Ó_ Zñ)¼÷Î"ÕŠOá=8cÕŠ¢˜ØfU­ ÿ¬U+Ê®ZÁ>EU+8\ªV”]µ‚ЍVð¿+U+Ê®ZQÄI.W­(òR ý‰òŸ/Jµ¢ÀûíDµÂ†ïS¯X¸™j…ï «F{æË¯Ê C³Ž…qýZ©VtøÄ>C.iÓë×Rµb@í4’Ÿ¾3Ïs~zï}Ý‚Ÿ¾3ÏKõðÛå-ë‘>²ú·«[Ö3=ë²Ãå‚®I×ËÔtM:SU gפëejÔg“BdÒ ®‘ÿ/#/ɶÛШÃI*Bè‰S éÕf©'Ž_€&W›•"œ¸íž3˜¸íj3„³Ìõž3˜¸íj³„¿:qÑ7qMœìƒ*FT¥ÍwD?m:\¶¹­š º³m—a€pÚ3½j2€‰Ûd$\7°qµÂî-ÔØÀ&Ôú©¶'nU·é(@8Éå6ªï ñ^Ù½!œÒR­Tß—Ä{0©J\ïÔ~:Pw¸Ô;XU€¿oBNõVU`6›‚„k†x®w@ÌFèXfÃôˆÙ½h6›¬ÁEs´mJþ‚ٟٸ– ?½Lt¸TXu €ÙlRNV]`6›„+³ŠÝl¤â\&¤âÑŠÀla‹&]Ú´ ü³‰³©äíŽEŠÃO/R ®Ù˜9M3!`f4ÍFJ,iš 3£i†Ë„¤^l·4ç?œ8N½Hé®$ç?œ¸F½¸ÁÄ)îÄõbùEq¿í¤ŠN͆Ïk-âðÓkQ‡¿´iàðÓ›†Õ6ƒÏ6ñ¦aç8T¶yÐBø ¶ÎÙ¦¦ÍG¶)Ø Éš¢Í‡¶)¬Ãµàqøé¯Ã_Úqøé}Qƒ¿j›Ñg›pÁ;ÈõÅ‘?Â_°ÍxÊ6?=°MIHlSñÓÛT|Õ®U•ÃO¯ª .y¥%át§’æ„ÓÞé½áô|1à]¿ieMC·%K¸ô8·Üã¼æCv ]ò ]‚;Ýö ÝÊtlÀÉÐÕ¬ ÝÊt,á21ã„Æ„QU;†îî Vw+1Ûx‹ÑAßJUlÀ郭KÅù•ªXÂ_¬KÿÓ꓊<”°ŠŠº§:A*XEIõ@qκ&.ø&§…;¥0š¸•EØ€÷z¥†WY„%\¶$q²`ÒɦȂ]|}}g­¯l¿hâV‚_NXž+ÛïÑV‚_ q^ðø¶‰<¾®‰‹ž‰«,µ¸å˜Qnʉ+Î'ŽPnÒí¿dèÅ¡r%âE·rïpâq•ˆyÜʽKxb]¿=ø~»Õ«´2éÂßžÀ—×F[™t/˜¸¾d —É çÈ%›PÅ‘ëºè:³•¦Rᢡ[Ùo 8ºJ… ‡®²ßJ¸ÊëÉ-INÉ­kè’oèŒMèÆe{Ár ×dÀÉÐU.[#T†YÂ_KN*7íöÛÛ‰¡Ãµ0B3»ÝÒR'g©ŒéŒ¥ö€ßå§K­ñÊR+_’\¿„²Ôâ—0–Zù’àú%”¥¿„±ÔÊ—Œ®_BYj—P–Zù’ ÀõK(K-~ c©•/™\¿„²Ô/¡,µbg,µÖK8K­ñÊR+¾#c©5 c©/a ¼$¸~ åJµ>Eȹƒb©ípz׉10oÁR»Â5£C%£½ F‡Ê?kÀ)YVÉNÆPœ]ý–4³ô2?§™¥pv³Ÿr¡ÑËüœ‡Ô5òÁ7òÁù²]ûF¾øF¾øF¾X6_9Iñȧi4àtäk…óà|äÛ¨5òÅ3ò?HròÃN ¬‘çpcä˜#ÿÃÌmVºP8ò•!Ô€“‘¯t¡pä+C(€‹‘çD dä¨1òœ­Š¼]0EºF>øFÞÌm*“'ùJÞiÀéȇ«±ÂÎãàÒæG§5òÁ7òÑ7òÑ7òfnSI6q>?¤Ù€ÓÜf°²Êq ÎG^ÐgZ#}#Ÿ|#Ÿ|#oæ6•ÿ|³§#Ÿ³µÂ#€³‘—Ì–ÖÈ'ßÈgßÈgßÈgs'5\#ðNÚgÀÙNêjе—28yA:i|ö|ñ|ñ¼™ÛTÖHc'5Zp¶“*ÆÈçip>ò‚ÒùâùJèÉ*ü|VÙà‚¡f#t¼.¿•ÃÂIñ|#t¼.¿•ÃQÂUœTäÜAP5â‘T3M7WÉ2t¯Ø<ƒŸ·ykä7®E0ò½"„“ž†küJ¯(áÊæ‹"9š,Šxä‹"=¶h,Šÿ}ÄAwç€ñSxo²AüˆŸÂ{Âüˆƒ:b6•‘þ³æGv~Dö)ÊÈá’qØùù§?"ÿ»’qØùq†ÀùÙEN¢üç‹âGà­ÂhÃ÷©W¼YŒÑ€÷%DqG?óåWŠÁño¶Ð+/“qå…ÃgpåE±µÓîpÅÖ¶rº£ÔÆÐì//ï¬LÆŸÑué¤ÞFQpué$oÝúÒI½"áx„ÌA1àb„À=­í:‰„«ShID¨XÝ-™Œ»%>£»%êrH½5¢àòrÈz…^©·F$üÕާø8…–p>À€0Ðá~ŽÜO5¬T€ Λv^@0À „ë3ÎøGصãàÎø'xãò“p9À±ßEßGÜØµ œÞ¤^©¶.;‰ÖhÄÍJÝæ=þLèÙÈø\rî­Ì|`â62> ×iœsLœàܳ&nãÜ“·±éI¸¼¿¿Që}>qÁ7q®ÆáÏ„´OÁ%ëÝÊ&n£Ã“p5q‚õ®Oœd½ƒ!­±Þñ‰;øì$\^ ÞÈí>Ÿ¸è™¸J_æ•þL¦²+I¸æOª,K¨ék%V’p>À’³¢µÉÞ¹§W¬ÙÝkz«ZòÎ[“ç ðN¬w` |fŸ¡ôr®ˆÈá§“±)kplæ¼pa:Ûù $œÁAaÎ;„+#¸ BAÝÖ§w¢Ÿ¢´äÒ¼ nsT?#vøK9bƒ¿:ïñÔ¼\ .úwâ…Ïç=žšw@‹æ]R*yg” µ,áˆÇnÄcF¿´ñ2I¸¢_ZIš.š~iãe"¼YŽ`ÅᧃU‡¿¬9(\ŒÐg;Ǹs¬üVލÀá§£B‡¿üÕާXìüáÎñîs¿ûI÷;"‹„K*š°Fýöƒ£FÂ_L‡Þ}éл/z*òE˜»/ÂÜ}æŽ#Ì1˜æ¼paŸ¦Cï¾tèÝ—½ûÒ!_à»ûßÝøî8ð=?ïñÔ¼ËtèÝ—½ûÒ¡w_:ôáK‡>žˆÇŒÉf£¸‘pÉd³ñÝ\4“ÍFqC(ˆ<éЇ/úð¥Cýv1Bæ p1BŸ¦CO¥C¾tè×}øÒ¡èàxj€e:ôñL:T …¶Ÿ¨. ÓÄÂý™R‡3÷Û¯Á>>ÇúǨmœI¨â¶Ò$I¸´4ΆÄú’ë·‡³¿}å9’põÛWÒ#´9^yŽ$\y£3¢Ž%éŒ\¿=žþíõš¦„õ™kÀ¿=“È"þ휈\tT|D®ßžÎþö•iHÂÕ¼¯´Cð·W¦! W¿ Q%'I(äøíïÏø;ßú­TA.ùI6Þ íTA„ÇõåÃÉ/¿qýH¸üòñúò+ׄ‹‰”>”ÈSRú¸~{<ûÛW² W¿}ýøíY„+áÆÉÓƒ•æäqýötê·l;®~ûJ½û5’‰ƒ+Iuóˆ"Õqüöûéz£Ë‘pUÎ]¹sÀYæF—#á8Sù´VóO«(*ÂÑ! ú· *Ž£ƒP°¸ød°ÓÚH¸à•ã­+­„ËHÎ^C‹{k€ÃS}|6ÕØèg$\“•T.4À+ýŒ„‹È%XfÚ–×Ç'¸ò±ôm `AZ¡Èd:œ0>áÝhb$\ ðÊ-¸ÒÄF×—'¿üÆó"áúËWÒh•çEÂåºÆé\H®è\\¿=žýí+Q‹„«ß¾²¶Àß^‰Z$\­éŒ…¬kŠÅõÛÓÙß¾2­H8b{»BŸ•iEÂ_[×*ÊöåÛ‰ßþh×¼2¢ì¿ý¿?iñ‚ªê*F¨2^ÔãE„Åx %T‘/I®_B UðK¡Š|IpýJ¨‚_ÂUäKF×/¡„*ÆK(¡Š|Éàú%”P¿„ªÈ—Ì®_B UŒ—PB±–1Bë%œPÅx %Tß‘ª˜¿„ª€—˜77ެÀõK(+ˆõ)r1g².æ0ø ®‡è;M•*EÂõ¦Ê›ï4Uªg×8$# ½3ÃQ(œ] )ù‡k„Âé*½õ¯ÁÁí^§#!\Œg.±F(<5BÑ7BñôUê #ƒaCª˜Âù †k„âS#”|#”ÎP?«hppsp‰¼p„*E€óL Ö¥§F(ûF(Ÿ¡ÊCÂ3ÓTð©8!ÁØaP~j„Šo„Êiª”F(M#¡!#8!Á¬aPyb„~Å臽`Z#ÄáOÐJ!áz„*O¡Jàb„8!Á€aŒP½ŸKØ\#ÎŽÐJa!áz„r39Bá:¸´!ÆTaPxj„¢o„âéªTò¡!kÙ0 ÎGH0JX#Ÿ¡ä¡tz„*%„„ƒ ÖjŸsp6B’ùÁ¡ôÔeßåÓ#T©$\ŒÐÎã`dŒ× à|„Cƒ5Bù©*¾*§G¨R,H8Ê­œúZ2€óL Ö•'F¨Þú÷¬ö ŽFH޻ߨ\Þ»_y.êÞýN… á* ÆR³Œx„VÆr;ßcC þÌm” .Fhã/Ð#´SH¸²!ÁL@T3¡•™€X½iP§ŸÂû¹#" øÞŒj„ÈôVúÏš€`Ü ا(‡K‚q' àŸ"üïJ‚q' EÍŒ²ÁŠþDùÏE@0®MB@`Ã÷©W×xïVÑ=óåW €éÛ#ißälôM6¸ºË-.y÷ëÛò=x»l|œÆÇW‹T¶r–-îüò²-– GŽFOb½¡®»êIœžÄWM…Tùq–݆þêoè·Ë“‹Ñ8¹¨·¿V×áòlg½^¯söõ®OmøÅyrAW\œ‡¿}»~ûv%©Nóz[÷²ßà ‡­÷¯.ÓáòêúzÁ˜Ív§]ÂõEg~u ¸º‡n»¡n¤l—Ò!ü…¡sy\‡ËËãës0tÛ­r WC'.÷¡“—ÇÁÐwÄAsÿv-ÂO]½ƒìpØ××9ù=Orƒ“Ýó„'ï+Ö}¥o†ÇµûJàÂøíê¿¥íòËi)kðW/eûÅ 5ÀÇ] b€õ h4Àr„\ÞÛá/­— þêCï•âtáŸ0¸j X]útùxƒËË™òÖf¿)¯Å:ü§Ã_òŸw~ù×RÁzåÔaÚþ’i7ø«¿Ý• Þ}VwÇVw¸‡îª½ˆ+s¾•åÝ·²¼?µ²ø<ãîóŒ;öŒçØ·²¼ûV–÷§VŸûÝ}îwÇî÷üûV–wßÊòþÔÊòá[Y>º³{nò\ Pꆡgeùð­,áÿåË¿¸²|øV–ßÊò}¿Ýµ²Ôk}Óö…Ó†ñÙ¼Ÿu¶´µÝ6”p9qüR!«ü‹K…®/o•¶Ö»ƒè˯×%\Y»H­NÞ t}y«6µ^þ»@æ»k®®«³k}¤ÝV]ës}ùd|ùõöùõž„«/ÏîåQVFy/Ïñåßÿ±røõú¸£´Ý¸#wÓ\o7’ðíþxûveNÂÅЉ›q”€@ÞŒs}y#‹–jõýËKµz8ïüj[÷8}µÍõåÌA”^|ÿòR/j~7Ü+RwÓ_þnj©ØÞ·æR±Ý³ù§åð깚3?¸ûäúí8Î+ÑóþÛ¥è9,*ò{_¤«î}¹~{ôýv«$#tÃg~WK…lj+Yãƒ+YŽß^¯;á# voe~pÙ Û¼Þžù5*ráÈõv«Ú(įg~JÂe¬ãׯ×\_Þ¬äqùé™_d’p¨Ù}¥ñÁ}%×—7² )=ó›HþZ¬«×Œ¦váh²/Mæ…£©]¤˜¬ GÓƒ GÓEuÜ€ GÆKè…£éÁ…#û%ôÂ~ »p4=¸pd¿„^8Â/aަŽì—Ð GÆKè…£éÁ…#û%ôÂ~ »p4=¸pd¿„^82^B/M.Y/ᎌ—Ð GÓƒ Gæ/aŽÀKÌŽ*páÈ~ ½tc}Š4¶Í.M¸wK0Ïü*€³ö*ych6ïø¾|°¾›‹Ô€ôdµ@$þòâþÀlvÇ»¾¼m¸ÆâÌ{þœyÑÚ¿|m\÷„ÊÝ\¦p–íø®l^tÝϰëþùò¯Œ¼õå¹Òß,;å%\¼hˆŸQCüµ_À´º ïJÔêþ)¼›#nuŸÔo­îÓÃV÷iouŸ¬V÷éa«û´·ºOV«ûô°Õ}Ú[ݧ‡­î“<‘“ÝâÓÃV÷ žU“V÷éa«ûoY«ûô°Õ}7ªžùòk¯ú|‡Í¼z1£êÅÚî àôY ¹ºùb¾œÀ+Á¸–dO¹þŽì¸W× Å·3ßh®ïz¿Oƒª€IÑ4ô{ó¶üŽJ¶ ~Ç&[¶öÁκ¯ÏƒÜÚ§å—WÒ]3êVjÒ]Ÿ|ù³Ö¡Ä³ð—?˜ù—òU3jTiòU¿|íÂ=ç½J@jÖ}.²ÑkzÐB<Zô;ºBDƒã_¢C„–1ÒLyûuëÂuÅŽòË-`„|^v±>¤š8|j¬‡QÈÙ¸&®ÁñK>‹í þ0¶×>KÇü4ø“ߨ¢|Ûï'§áHM%üE'}ÊI}s}ÇsMÚõ;é»ÏI}FpÇF`~y áqÒ'¬ƒµƒ ‘Ÿ“~ô‰/ùÔI?žrÒŸ“~ÄSßpõ3m¾ÀÓõ§òà “ÊÆ¶éAcÛÉ·Kº{øvÞ™6=èL;ûvA8ßÎ[˦­e'ß.)ßñÛYoØô 7ìӷ󥓮‡“pE{޾¼èΚtg|»$‡CÇÛ«¦íUgÞ¨¿ÁÛeÔô ?êœÙ(òmøv~è?=hpš/¸Ÿ…¬ªgÝZóWƒï(‘¦HÏ|dzί( ‘ ‰†¡éAÃÐçß±6öÌØbÍ5gQ'áŠÇº ïÌ™tæœ|»dÆNÊZk¦­5'ß.¹|nR;bæÖsvU]›[ævæ?[½1óƒÞ˜ù¢ Û 7Æx í™ôÆØ/¡½1ø%¬7f~Ðc¿„öÆà—°Þ˜ùAoŒýÚc¼„öÆÌzcì—ÐÞüÖ3?è±_B{cŒ—ÐÞ˜ùAoŒõÞc¼„öÆÌzcÌ_ÂzcÀKÌÓÐc¿„6·XŸÚ^¢O¯›î|G%[s é"9ûAHk¼dîÇÚíqö%‚Ó¿dm!]§_ÂiQñKÖ¦Ò=qê%šY¿dm¾ ]g‰ çÄ/Y›$H7Â|Á–j¼Dò[/©Í ¤kàäK$E¤õK¦‰6œ}‰`YÄ/Y›È)üÙ—¢Bø’ퟜ–Ÿ}‰àúÃ/YÛÉ©öÙ—º<ü’õPœœ>?6ayþ«ç𜬇×䔸ñ/‘/Q¤mø—¬‡Ìä,Ù*]@FÎ’?…÷=:KþÞ' Ÿ%Ïê'гäùáYò¼Ÿ%ÏÖYòüð,yÞÏ’gë,y~x–<ïgÉóóäY«äqìüð,y†µHr–€ðÌï ¬4Ù냂/øÀ?\P9¾Ê*ëK¿þößßø¯ o‡B3×O%ù©žÙ¿_2”€³Ÿø6äù€bT œ3†þvÞ?q=®ítø2ï‹ÿFö%Ã¥=HüÏ$EÝøÍ÷…D΢'nÿÔ@wF‘À©,`0ßNi·ããÝš#ù»YOœ²ù·2¬ý«?n÷ŸÒšßF ÿqÿqWŸŠíS±W´<#>ð 7<#>ð 7<#>ð Á3¢Ï3¢Ï3¢Ï3¢åµ=£>0àÔ3r0<£ñI+8õŒ<žq5ßÎtœfèu4¸ûo)>á©™M²l>=°y 7l>=°y 7l>=°y Áæ“Ïæ“Ïæ“Ïæ“mó«ô²ùã*¡‚“ù–ÇÙüš­ð}ûlؼùö‰%‰^ š€0ƒ‹Õ`¸OØ|nf“-›ÏlžÂ ›ÏlžÂ ›ÏlžÂ_°ùì³ùì³ùì³ùüÀæ‹eóÅ€“8Ÿ‡ÇùªÄgÀŽÍ8o¾Æù8â (äipaó)ŸÚüÍ—õß|YÿÍ—õßžÉúï¦ÍßHÞ}·lþnÚ<‡67mžÃ ›¿›6³³þeÛ¡ÍÇVâWð|¡ 2#²ù° ƒ˜_6Í·Oì·hóóœœØ||Ka7‚0mó‹?HøÃ¬ÿæËúo¾¬ÿæËúoÏdý<#ú<#ú<#ú<#Úž&Ã3ôoGž±Þ¤žfëíÌ3²åæÛ™g\gè¥v38[ j[byÂ3\YÿÍ—õß|Yÿ홬ÿ‘Í'ŸÍ'ŸÍ'ŸÍ'»dØ<úíÀæ·..õÙzûÀ¢Q2ß>ñŸwºuApYà\üús›weý7_Öóeý·g²þG6Ÿ}6Ÿ}6Ÿ}6ŸØü`Ùü`ÀéNw#\@6Ÿ&>ðßhÙ¼õvnóx§[É€²ç—¥èÓ8ÿÛoì#ÿÇï?±Í׿N—Á¡Í׿N—Á¡Í׿N—ÁŸÝé¶`Õá`§Û·ª™þs†á…·ÌítßÒ1\Ø|;¿j9fG;Ýhít£Ï4‰x§[÷°œìt¯ƒU뿚o§;ÝövUÑœ—Íx´ .Ÿúuà_-Óþõ¡iS84í_š6…CÓþõ¡iSøs¦ߦYÁ•i×OÓŽo¹  u€2¦=ƈáBØj¦H¹ü€Ó^þ6íK?¤ðÌ»¨`8¯Ù€|ͦ]mÛ€sÿ 8…yK€Ëæmj¦}ûeàÛ/?°iצi384íúÀ4m‡¦]˜¦ÍàÏ™vm:WpeÚõS¨>ko„ó·¨O|”  ¸> ÞM;[¦ xæ-†i·b‹„ó,Ó¶Þ.X ÓŽ®L»þßÿÜøýÇŸØ´ëaÚo„ Ó^Oê¾~“¥žeÉ* ^?•D¾xæ-£†ƒà[àKÌê¦!\Ln"¡‡}õvlC˜à^G—ko¢‡À¢~?vømÿò_ÿþ O\}`Ÿ™P8ŒIõ}fBá0&Õö™ …?»ÜvÇjp°Ü®%XpfÒ:œÇ¤¸‡˜TÀoËm»ˆIAývl\VL*œâL²¶ÒYðÇM+&Yp~Nhd’)¢ß®L»oþ8üò?¿›¤åiÚ Ž7IËÓ´o’–¦i3øs¦ÞúyÞZ¦]?3É2‚/¯2ÉaŒL²ŒÎM;õ·óL²Ñ´ü¬i øYÓðçL»çˆüišöÔ·Rþ¾ðŸÖ&éÏG›$‡¦ýç£MƒCÓþóÑ&‰ÁŸ5픘v¦=¥kð—ô€M{Yë1\˜v2L›T84íÑ2íÑ€SÓ.³aÚi²ÞÎL{4MÛz;3íTŒL2O.L;,žµê›Ï´¿ùLû›Ï´¿}nÚ*]&hVp•ÇÖO<¶](Î7!··ó­qOƒ9œ›öµ¿]lg­‰ã›iÚO5q|3Mû©&Žo¦i›MµÌ<¸0íØ·Rüç·m€kx”}Üx ÝMûý—û¯=ì§á·;|ù/ ~7áß~|»wë€~Y{ãÕßíðüÇyøí·?®__/xsøé‚7‡Ÿ.xsø3 Þèß.¼íSzÁ{›ó<7ýœxÏòÁ‚WoÌ$ãíü0„¼õ}— Âï¢z6ÆvÀ•Œr;‡“Ÿ˜–EµÃɯŠ×l½–»ç:œÅóí¬Ü=±zy„«uƒã5ýb-ã\¬ék7àbM¿XË8€ËtµÄhÔ¦v´¸Dį¯/ã~zçðÓË8‡?ã°qIò²~»pØíSÊakæ9Om™àðBO¯yÌÀaK½XÉá¼K…¼ªÇ]§áwy&[Ãn œÆ¤ù:ŒÈa‡®ÆÛiLšC¡Ãóí,&Mq„Þ®“‚+‡]?¥ömŽ1ö6 /ݧ‡1ÏÀa+P´Þ>²*Àa—Ÿ•!\:옠Æ·±u~ßn¿ìC÷Òᇟ>œàðÓ‡þäáD¯t¸>œ¸àɵ”á¼"Z‡Á€‹Ã‰«q8q…p•Æ7´Â® <‹ôk¼ æêò>à¡» rêÇáR!%X+¬2Z¸ÂN|ä2Xp¶eÊùb¹DÎWØéb¹d"¹¤á‚šC–8ÖàïîC÷Ò‘ ‡Ÿ>réð—Ž\:\e¾#É*“8èËN» ÊHÒB¾%yË/Ÿ h›ªÑÒ_^ÙæÛ0˜M%ðÜ“Ò9ŸV)ܮ޾þ¶ÿÄ—Îu8üô¹‡Ÿ>×áðçÂù[c^%pÎß6ZR}RW†!@xáþC‚BRâãpÈÛ Æwç–ñÍ(œ¯ œ5A¥C…óe>óá¼ jš`8_‚…ñvÑ5Ž㎳š8xáyÀ¦ù 8Ý0•)á SÔ/<Ɔ©$—s˜a8OS;Ï»ýqĤ—N«8üôi‡Ÿ>­âð§6ÔŽ5×Aùléë4i^„»8ÿJ½ –Á¹i“·skºÑþñ§é°Sï‚Mò„³ŸXrIÐaç¹_W`ð¯dÙpXëíü'Î×ç_o“úíhÁ› ‡S0àÔaóh9l(œ•q&Ëaspå°CÆ;À}\À¦¿T­¿Hø×oý©v&k÷ÀŸ¿Ü<(xålŸÚÒ·JÓ"\5¼r¶ÈOMŒ‘n))#‰U´ÝØ’uñ‚n*F’„¯ ö»‰ƒÙ[Bá# iêÖ¡b$9à³ÒTϽ‚«#½Ë»F$#IÂmm½ÍXtÌÂe I{û,ÒöYÂ1ñtkÅH’Љ g$X_L1à#Mïc¹w«¬·S)+ÆH’h·›ž8tO«3’ÈmÕ(áëÝDù)ÎH’¬+ˆtëP1’$|±ßM´=ƒÂ ψ<ƒÂ_ðŒèóŒèóŒèóŒhyg$Éü§žÁIXq7N=ƒ1’°Ï|;Ósž¡ghF’dôf=á©™M²l>=°y 7l>=°y 7l>=°y Áæ“Ïæ“Ïæ“Ïæ“móe0l^p‚$#Ép’'I.²QF¾+³Þ>³ê„WÉHWÊHbÛ|nf“-›ÏlžÂ ›ÏlžÂ ›ÏlžÂ_°ùì³ùì³ùì³ùüÀæ‹eóÅ€«™e€Í,>ZÍ,lf‘ðÙjfIÔ“¦ À…ÍSFËæo¾¬ÿæËúo¾¬ÿöLÖ7mþFòî»eówÓæ9ܰù»iónØüÝ´ù›õsF’Ìð›æ‘ÍkFç9#ÉÄûä øÌU Í+Feó’‘D ª‰{˜õß|YÿÍ—õß|Yÿ홬ÿ‘gDŸgDŸgDŸgDÛ3Âdx†þíÈ3Jž!I ÏÈ–g˜ogžA/%š¼MÀÙjÀIlÏpeý7_Öóeý·g²þG6Ÿ|6Ÿ|6Ÿ|6Ÿìaóè·›gŒ$ÿU|ä?Ѩ™oŸùO„;]ÅHwº”‘ĶyWÖóeý7_Ö{&ëdóÙgóÙgóÙgóùÍ–Íœît# ³ù4ð‘ÿFËæ­·s›Ç;]ÅHã×s(u!ãK%Ü€ð‰}ˆ¼}æúýîŸô¨@¸u½o¡c 8»NòhÜì­sÎ,>¥Ñº˜o¼k°}vâŽÜ:‘£Š‹œºõ‰¿‹ßeÀ™[ӷϼ…ÀeÑv̲"¼5 “Ç›ùËg'þñ.û¿ò.–Y>€ðÂ?tmp~UiqW•B<àü<Ûz»¼ˆù8×ä¿*—ñÞüôÞüôÞüüt÷8ÖE_¬‹¾X}±.úb]ôźè‹uñ…XGü=Ú±ŽfäÂÁuŠ'…ËñŠ)ë¡g±Ž¾Ö*û )LŽ´U–òÍN“šw;ÖÁ(¦á(¤]¬(á*¤]¬(á*¤]¬(&áÉŠïTRìßÑw8÷Ów8÷Ów8÷óÓmúã–|!-ùBZò…´ä iÉÒ’/¤¥Ó!­¾_ÂÑŸy•Þ“™¾ezAŽ5‚NÅ€³³úv–¾¥À宬Òj˜Ôo5¤%_HK¾–|!-Á&³4ßÙëOßÙëOßÙëÏO«0CZö…´ì iÙÒ²/¤e_H˾–_ iIÂaHƒDÎKD»>Јp–¦hÁyHK8KK‚‹–˜a–6æë ᯆ´ì iÙÒ²/¤å'²´›¯ÈvóÙn¾"Ûíµ"›~; iE‡´åŸS7í›Qd«m <¤Õ€ ¸ iE‡´5¢8¨§VT·B‡!ín†47BÚÝ iþ\H‹o½¨nÙê§@H‹oñŠúoÏë1¼ y´à쌴àg  V‘-ÔDRgiémºÆ4+‡ÅµóÏŠl·‡E¶bÙ „–†N±€"Ûæ Î.W„Ðá2ÖaøÌãÞ —é[½“CÞîk–ðÙn¾"Ûíµ"›~û‹±.úb]ôźè‹uÑë¢/ÖÅWb]–pëàŽ4¾*­"[½ydìHýåa¬3v¤!Ž.;¥R@DÁËwIr?‹u0Ši8 i+ŠA¸ i+ŠA¸ i+ŠI¸J߯4’Ÿèë…ñÙn¾"Ûíµ"›~û‹!-ùBZò…´ä iÉÒ’/¤¥Ó!mÉ­Ô¼£sƒà¹A˜§bÀé¹ÁXŒsƒ-8;7 o§;ÒñŠà"}‹1eÒ¦’ 5¤%_HK¾–|!Í(²‰,Í×êä+²Ý|E¶ÛkE6ýöCZö…´ì iÙÒ²/¤e_HË/„´ÞheÙê§Œ¶V£»™E¶J‚m(G%m6°íc²Ú>f—ž9Ì3nû’²ùWCZö…´ì iÙÒòYÚo÷÷æX?pH«Ìs‡!­>0Ï †´úÀ<7`ðçîlÍ«ÃU…½~êîlMËJŠáô'–z0sAw¶â[kAäpîüó`ÜÙÊý”ÿ€ƒ {0„4ê΃Ú|ÁÒBãhÀyPÃË5‡1à<¨ª{3¿-ëe˜'§Î®oqœ&ÔÑ”—ç¿ÿ~÷–9üta™ÃO–9ÙŒú–í•Ú`2TçÈ+PL”© âXÛŽ®ë‚Xêª ¾ÿ|ÎO\‰ ®Tt®y½Þ§…s®×Q¿$ŒS—{Ç&ƒsuž1[aS‘pÌh ;ÃB\•®FÙ(SŽýËCÖà " æ2‘@L¥ .&Š(˜ËDø³[€aTp°Æ‹jÈ¡*°@8 ºs˜pž”ÃX \lúÛyœ’‚ã¨`-&œ‘7ECƒ$ŽœuRG3O²àœ¼ÉØ$m´(& ™Èdñë^¥®’‰L˜_·Íàxw+)u•Läδ•L$4m*ɶJ&n¨L$ßH™HlÚD&’o¤Läë¦-àgM[ÀÏš¶€?gÚB&›¶”‰L–ÖÎÉë(™È„µvºiÚ MûÏG»[Ö´…L¤aÚ ›¶’‰„¦Me"™i+™Hô“aÚR&2RŽR2‘Ø´™L$£Ü›¬·3ÓMÓ¶ÞÎï¿c d"¡i+™È—Mû›Ï´¿ùLûÛç¦  \m@¨L$ßH™È„Ô ©L$¯iH™HpðÌe"EMcVðטõ¾™¦ý³Þ7Ó´ŸbÖûfš¶É¬§e"¡i™ÈÅ‚/j_Ô¾¨ÎFíxÕ$qÔÎWðåuM²X ÙÝ2¸¬IQ;‡Á:€ œÑÇ$#jWëí#O[¬Hëíœ>Æ2íipeÚ-ßÜPÓ®€*ªw]ÂÔ¹ØPÓ®€z¾) ¦]Õ€ßmiáU5ÁàL$LÕße ¨ŸôØðÛýýúõõ¶?Ý–Àá§Û8ü©¨ßæ®”Õà2*¬ŸÂQa˜0œG…yŒ°œ[ \ œyO$oQ¡U(œ›Íø®°Ój}áí'u­yRVi‘±ïn9|¤Ånª”Å~Õh½}f- K]å%ÚŒ®ßú)U´Jµ›=·TP‡crS‰)Oêl½ŠÍQÿv-êœÙÛg’õ4˜ÂIà–=h¾Ž“,™…¼|­¹e6;/6™Õ—ÏÖ9üôÙ:‡Ÿ>[çðgÜ'¤îC¥…IŠ„µ[ acJ’¯…[sac&¡„“¥_ŒÜZ ëJ!lLPµ°±vk!lÌ¥}­·³“õÉT°“ÂÆÖ!Âx±6ž\ìB/ÖÆÓ€O¨U l<\X˜°1+ aã—³s?søéìœÃŸqX l – Z+QÂÆÊa¥°1±f lŒ– Ó‹œZØ8YúŤÀ¥¤…Ãrac†´°1pX.l,¨·³˜Ä……d±„+‡ÂÆM²k‡UÂÆ# µ`âô:Ì…gò³2„+¢»ñÑ6^à7ŸÃÞ|{ó9ìí”î>§ß®VØú)à°eIÀÆ áÄa¯Ë ‰úyßr™É"ÅàÌ´éÛ©5Ïa†ðöæsØ›Ïaog6e›²vØzí"Å<ð¡ûËl8lJC´ÞN–½8ì0B¸¼H:-p[ÛÈé¾6øVØà[aƒo… ¾6øVØà[aƒ‘/>‡Sâú¹4Ö Sâe«8ŽÎ¥±#%6ß.¤±¢á°à·‡9ì5¶Â˜¿ #«K‡½æÛ©Ã²·S‡ .v&¤H+)…ûVØà[aƒo… ¾6øVØà[aƒo… 7ŸÃÞ|{ó9ìí¬ÃæIÁÃæ 9l"[a\a§`¥Ä‰§ÄÁZa³‘¹îüÔ(%ŽoC'é¿ý²ÝK­Á~º5˜ÃO·sø³­Á­=¶ÃAkð[Æ­ÁKÎáƒhíVkp€pþßp-™6ŽS¸<‚orØõ„þ¡4\ìÂbÑ„xèîòWüvù§Ë'÷´üµ{Z~òž–„Ÿ¼§Eá’À¸$Ìö¹ìüýÏ}ûÿRß,‡Ÿnxîð—ž;\-¤#)´òCÑ4f§w ]&xÙŒ¸üò¹A’Z™ô—W¶ù6 檒 x!+Y?mó¢p»Í«~êæ³ŽÛ)먕p6À7««:ëXŒcŠíà¸Ã•uô:º´Žëñ›Më`¦}C'þ•À²Žá:¸Ýº½|*øbGøzÒ:†@G(|µ¬cÎÐ:æ%ÓRðWcG8;r_^[GdÃ4D‡”¯fƒê`Àic¿y2—À¥u\Gj¾Øn¯ßÈèð—ndtø«±#œÂ:n>뀱#û­*vLÁ€Ò!mǺ²+v”¾²|ýmÿ‰/]ûàðÓ×>8üôµn£ðV®®6 õS`£PÛÆ§ᢇ¼ V´Ú61\ô÷·‹¶ñ+‚ße#Ú0£ÂúÂYí<6V;sÆp®Ý¦“`½]è˜e‹Þ窌Ñû\|:=ëy§ÓeJøtšÃœeèÛùïJ.eæ0ÃBšZßí#Û}é2 ‡Ÿ¾ÌÂá§/³pøS*‚ë C¼ ª†kºb8ÛÃÎe—XêÊ… ÎM›¼]Uu£ýãO£$,1Â;õŠƒ³ŸXrIhg¿ør—˜ep~­dÃa­·óŸ8_ç‹qµQýv¸à;¦`À™ŽÇh9l(œÕ'Ëaspå°CÆ;E‘>.`„ŽRÜÇ_ê*@‘ð¯ßþúSÕ¼ÖeâÏ_n ü—»„ïéÛÏ_þ‘®þóï_Õ§¦ö©}\@ñöµŽi|ýmÕÖÎѱ±«§> X‡ÈÕS ŸPHS¬CìêéwG$Ô¢jª>ð<¶ßã1©«èr¸ègGǦ¢Ûàp! L•u œd ËS.™Q1àݽÁ3­u…Eo¯æ•éùB0äP‡ÎEvÀWž<¹ýiòˆòA‡Çf6Ñ2ÚøÀh)Ü0ÚøÀh)Ü0ÚøÀh£Ïh£Ïh£Ïh£e´uÉ3ÊÄólÀvªe-¡¥ð‰jF{…oçFK¸!õ…geuØhÛ§R³ŽdÙfz`›nØfz`›nØfz`›Ég›Ég›Ég›É¶Í2¶ÙiOœ':XovÉP­· "Bkg‚Þ.j™q@]òÛ(áŸØfnÖ‘-ÛÌl“ ÛÌl“ ÛÌl3ûl3ûl3ûl3?°ÍbÙf1àTyj žoBö&à¬ãÌŒ›ðíÂ6Cž°m¦Ñâ¨u†áÛ™o„šÚèì"½Mטfå2/ž>¬p«ÂQ œ »îF«…]‘ÑʠҌƗ9ˆÐªö…ú*7_…ãö°ÂñDP‰¾ }A%ú‚Jô•è *ÎqK¶‚J6à=’ÂjѵA|4à;µ0ƒ z»l>HG,ßj$ëpü,¨Àp¡á(v\¬pá*v\¬pá*v „ê@ß|Ž›¯ÂqóU8n+O„‹ä É.’/\$_¸H¾pñàh=[Mó9pÆáe4Íc±ÞN ¢vÓ<|»ÈAbL†‹©äAÂ_ É.’/\¤sáBf¾†_…ãæ«pÜV8žÙ.²/\d_¸È¾p‘}áâA·C²:qz»‚Yáu53eÉžÃìvxKV—X€o—¾1Ì3>”’²ºWÃEö…‹ì Ù“]üvo6ÿ‡ %Ô@ ¢ Ãj(øí0\(¡ZmpUSœ7-J]Sœ;‡Ó/?-ËÌ„jŠ…Ö’œ}ùø–±¼îÛ¬ßÅXŒ#ˆð– 8ø¢.Ñœ ìqu…pb^¹Šàt #\ßâ8©ß®ŠõT“àþûÝS}ãðÓÕ7?]}kð34aeLÂù=ðɘޜ ¸è~3¦÷ŠÞ.g(¬ºÕ¨µqR#J=ý'þöÛûCe‰ “`š÷§ˆIÍ{ ‡Ó«Ä$˜æýöqFžãŒ~I†Á™ïFK±rêâeÎ}—ΈÅ^¿gDëŽM,œŠC0Æ¡jfÀÉÞà:˜Çðíênâ ›%jÇdf¢õuè~µ¬îׇVGáÐê~}hu­îׇV÷«euË[]}á[¯°,Yx+Ó\ œKõDËê¢~;ŒˆÑŠˆÑ€³ˆF#"†`À•ÑÛeD|Ã-:ëU]¦'Ÿ-BÓ â0¥VÇàÐê‡i·:‡V§8L©Õ58 *oÐêê礞ám¼@ªÒ`¼}‹ ¶:j6ü„Ð<¡i•pfuÉ ëìW¾$\èf_>¡ë¤peu1Vׯʾÿ¹;,àNë¤jÂê¨Ì= «ë¤jb_4—{vF×ÉöE„®³ÃA¬‹0ÖU®ëábÚÒçªÌ[Ƕþ\G×Õ|7d ¢¡ÃƒoâÂù‰+QÁ5éaÃãGö ¯ÃAjµ3kfÔûLœËÂŽÙä£+ŽYxÑĽ…8"¸*%\RBRïÙ⣻ :voœÂaœt¥@8ŒóŠ‚ŽÝÿÍž¸a4rÚa„𕫪Ìiç0gËsf‹Ž~;vk+ÎÎ8 ¢¡FÌFÀYG_4³ Wá"#\ô|þ#ÖARµ âQ£VÇàx'¥yÔJp¼“’€p–Ó–±àœv ç ÎsÚbY]ÒoÑêü¬Õ øY«ûãÁ"5áì‚Ð=oéÙRÕ¸ ! ®MàÐêþ|´“bphu>ÚI58°ºdY]JάnJWluS ™Õ-Œeuúí't‰l¢„3fÉÙ°º®G*áÌêFÓêÐÛUN›1·P½ÙÅ´Ë_¶ºo>«û泺Wù×2Â3:ßZ@8ÏiSç[kE&çàyDç[ëQ…zûkÌ,ßL«{Š™å›iuO1³|{duFÕhÙfd&+î‰uÁë‚/Ö»j”¬ªQ‚p^5º+lU¹‡p¾Â^G³j¤ÞŽ5ë­c’`ÀÙ5ìdÄ:)foP˜±. ·+«;_”Õ ™ú¼ËÔ‹ÂK×™·Xt7™ú¼ËÔŸ†o2õy—©7àw¾ÉÔãXGtæÕße2õŸLÚðMõúåsM?}®Éá§Ï5;üYy Sv˜2vØyŒÎ+VcîôääQ„Ö™WmRg~ìIЙ×mBgž}ù¼ýI¡ø Ò™WÑæ“WÑæP7àÓñÝ79ymVy'ÑF ÅoÑ Åv(»ÉV¿|jÇá§Oí8üô©]‡?©ôŽ„âµcízðÚ±v x§”œãŒ/!mðÝ‘ci¥wÝ_$”Þ©þVz׎%”Þ¹Ö9xûk[ ?¹e‘ð“[ —e&ÕÎÊ3Bªýåä‘ÃO'~:yìðç”`¡T;( nz±Êe‰X'V·éÅ"—‰ÆÛBóñÔ+µsà2\º™ú»ÖZ.Ã¥›ƒ~û³béHk]»Ì.©®]fWQ7à‰VFmiUQpÅ“’"®£K±t—ËÜ|.só¹Ì ¯2P‹Š¥—Ù[Ël"­N¬nSl…«Œñö]ææs™›Ïen†Ë ¹ò R;W.sˆš—ÙtÌ øDª3ƒå2øíòŽ “+OýTÉ•{\&øV™à[e‚o• ¾U&øV™`$fT¾¸ÈΉÞg˜˜½qä2ÙØñ½ñü´`øé—ÙdÅAb¶)‰pâ2WÓeðÛ…ËpÁprOD †»\Æ·Êß*|«Lð­2Á·Ê„›Ïen>—¹ù\ÆZe²•˜IÅoà2›°7Xe6-oN\ÆNÌðÛ¹ËÉîDB­”ì~¹‘ÃO7²qøéF¶?¡¹-%»q#ÛÖ Ùý7ƒËF¶p14·ÑÛ´6r­¹ÈT™æ¶øòÓá:¥¦ÔÛ_놗ð“Ýð~²žÂ%=[I˜oI‰f¿ÜÌÅá§»ð:ü¥.¼W«Ìˆ+f@4T̸ð-?J”¢Ù™6•Eè¤)ÑlduB4›ŸX&>Å€‰f‹Æ ·»(6ñd—uÜNYÍ6Zý2°$š ­ƒÞCàÖ!E³‘u0áÛGÖqóY‡“¸h6怓ðìé&Ë:¤hvþ¤ŸpOöXGøzÒ:”h¶a]4›Y‡ÍöÄŽp6v(ÑllD™~y-šmQ~™]ƒ§Ý¦L4;³o?¸´)ší²ŽÛëmÂþR›p‡¿;ÂÙØ¡D³]Öc‡ÍfÃ2ÞV)šÍb‡ÍÆÖ!E³_îEæðÓ½È~º¹ÃŸU½¢Ù Uß´±Aª¾ÉaC¸h«Äýy«6€qk”ªkÕkXC¥ª×¬†ªT¯AªÎU¯EÇŠ~û Ùj¥zm4ÜP±N:öeJœ}ýÁTÛDo—Ô¨L¶šêÅHÙê—©9üt#5‡Ÿn¤îðgu§l5¼’ZÕ©aû~¤†ðIöKC— øí@^»ŒT~†äTwšß=ºÓ<ƒêNó/Þ~B8ZéNc—“á2yLœ¹L°:#áÛ•Ë »ŒŽÆ¿GË^×"á«ptFE‘*-áAÁ«p´øTŽ®^…£å§¸p4îâ#ÂÑV+Ú&á[,¶‚ "(PÂѳtƒÉêeð•Ï•Ÿ ªyQ-É‘giý~ƒó¨0ôkò¢ùsV_ <_0û…Ð^.¨³˜+?Ó#ŸR¬·Ït BsøB+ÈzèvYÞä2îêtHîð•DA~ŠKí‹3ò‚h"•ÀsÁœ‘LÒ6. Á¸¢Ï¸¢Ï¸¢e\\¡yà øÈN! ã’ ÍØ¸ò‹RQ¸¾1ö„q¥6qÉ2›ôÀl(Ü0›ôÀl(ü³I>³I>³I¶ÙPñä?0à|M.˜ë:pAσcR™\Ĥª‘ü¹Ùä6qÙ2›üÀl(Ü0›üÀl(ü³É>³É>³É̦XfcÁ)S<»=C™¥®qÁ(8Ú¬ŠÅ.)äóø©ÙÜ|ÐÍ—ݞɀ>“.øà,LhkA͆à ³¹›fs³3 .9<ðœ’û2Éá‰uw>3ÓÄfSÅ„œ˜Í¡,ŒÍ†j_>“Ý|ÐÍ—ݞɀ>“vWôW´+L†qé/Œ‹JSã’ÒÀ†qel\UôÀGlUþܸ\ÐÍ—ݞɀ>Síu˜Mò™M²we†Ù /̆©öNükð™G˜8×°àr×ׂÃ'fãÊ€n¾ èöLô™ ®Ãl²Ïlò³,³ 8Mœ™ .§¦Ÿ ¸¸¾†£M KY¶¢MÕÍýÌl6íË×k@?}5 ŸŸf@ŸkÝpžÇt§¸p•ð¡ð‰}j“ðQ×ο0 ZBRìɜϧáìÎ#Žâ÷’¥ÖmAÕ딌c`%V[°i'(V»¶ápjÚÛULdÍ)¸,%0±ZÚ(Åj‹•Ü_>+Muø³ÊOdu@ù‰ˆÕr)V[/ò!Vû—^$¤ íëuµŸ¾ºÚÏO³ÊÏud}}}_pX!Åj8,TvÜb 8ÙW¹XØœ›bDp±q!Xv7dRFk;ìcyèH\f°V¹"„+¿¼X®(áÉ:„Ö{}½pùÓW¸üùiÚþ¹`«Ã/“Ï/“Ï/“Ï/Ói¿TŠ«WÉFÌÃYõÊ 8]H·<µLÀeŽÈW©P‰T\uøeòùeòùe‚~yª¯W†ú*Ã??Ý}®ŒêðËìóËìóËìóËüŠ_& ‡~ …?VÍSN/]ƒq™eŠ.ü’K›fúÛ…´©Ã/³Ï/³Ï/óëåÍ·ñ¼ù6ž·×6žŽüëù0e¼ñüÒ”U„_~Ê*´roøåÝôK7üònú%‡?ç—JC´à .”ûÛÄE øD›Ó± Ï*. àÌ:¥†èî—PC´X5•Ï6ž·‡Ïbm< „3Aª!Êy"øíÒ{›Š”\H:èëǾçíµ§†¿è°Ñç°Ñç°Ñç°ñ‡Í&¸«p§§G.i6ÜAÿvpžÇô93y¹Ôç|è°U{m<±j/2ì—Ë%\-¤Z†óõó"߯óöÚÆSÃ_ôËäóËäóËäóËtÚ/•¦QÊ„ªB¦§¡±¡\,¤\“ø¥Âtøeòùeòù¥±ñz—¯Èù6ž·×6žþ¢_fŸ_fŸ_fŸ_æüRh>Z'+“q²Ò›æÍçªK‰×ˤ'œ¬0ÅIz²"'~™}~™}~™ŸX/7‰¿bñ¬^µª–,˜gµ°š!®UP)CÂVA*,I¿Ö* áô;®ú‘°U°JFJ8€Ä­‚R”seHçž©û+ÍG§° @¢s7­ùør½‚ÃO×+8™Í¢¸ÆX.ø%* Îï!e|ÚÛ•®(\1md-/“:°·–¢Åby½ bW%ÚX0Ëk§5ÝšÁŸíº‡Fpoáe‰VƒsÕ†0ã[¡„µÁ±¸¢ÑlÂ)Q+»r,˜ñ 8É7;Ó–ºoÐÅ>\Þ7âŠÅÒP¼ ÙD%®X°†bW´­ƒÂŸ³¥Ž­ƒŠ+Ž,fž{Ÿ¨ U Eh#9ú=àXñb•hÀ¹âh}¡ŽX,ÁÜT÷–×<÷\Í®XQÄ ¥D ¦ˆêÜQ¦u0øsÖ¡T ¡uPD©b8Bø$>e?¡ ~BŽN©ÖAU ™uÃb¬?Á°ŽˆÞ®¬CˆÌYÑÉ,„u±Â.¬#À˜+D;1F“ÄRj%VXp„éb…ñ#`먲~Ž/,ë 8ãÑ™ ëê}†uŒV¦ß{^\X‡é{Ù:¾ù¬ãÛçÖñ¹ÊL©HÏÒº¶#‡ó„:d¨²÷F2Éo¬ã‰{ÂßLëxêžð7Ó:Ì{«~€ ëPbzžØ|±#œJ ϪàØ‘¯àíºJP¬•…¤ê‹ÞY¥á`ÀÙªdÄ©†g\½3­c\Y‡½+»èØŽwÕ:‹ƒk½+»èÝiø&zWvÑ;~·åEWÑ»# Q­S—‰Þ}rhbÃ7¯—Ï\8üô™ ‡?åXZµ9½ãŽE8œ;ÖUÞ ÂÙ&¥j]áSätMΰÑJ)x£–ªXñnU©boÔæb7#ã¦a´c œQ¬–цàÊh‡ŒVÊPá\ÈPÉž¯"á« •,4*  ^e¨Ä§º •xpÕð*C%?Åe¨ðý>"Ce5‡lzBƒuò‚îL*ª_ ì7+g³Ûû€?-¾¡e¨à—g8ðËÎÞàX.ê‚ïÊ ©õÎq)Zc/ú·ïGÅJs˜.˜è¾_>àëeq™I6^ù€+D oÐQ)…¨óuB!{Þ£oÞ£oÞ£5ï\âIð‰Šy—OhÞ× ªÕ¦¯&Ï;Sô,ú™ bœQJN¦Ÿé¼4öô&ßô&ßô&{zË`L¯bŒ ³k+)&ìÖeÆn]E–$ü“éÍm~²5½ùÁôR¸1½ùÁôfßôfßôæÓ[¬é-|²Z¡gØ Mábz«2œÞ*†$á§÷æ[”o¾EùFVÕ'õ ´2Ò²R2½wszoö¢Ì¥FþÀ€SÆ3&m4³3áàbz«‚‘šÞC´HÂÁôŠBkQ¾ùå›oQ¾‘Uõ¥y¾yö¼‡É˜wýv4ï%áy—ªCpÞ«¸ÐQmU=! ÇóÎDf^^”o¾EùFVÕ—¦7ù¦7Ù¹¶1½èí`z™:ÐüéÛEÎU=_QˆDv>=5½®Eùæ[”odU}iz³ozóƒé¬é 8͹˜Š穜\zoÈØ{«>„?œÞM:äõòOßN¹ÁŸ%#b=$#ߌM^?û¢eS‹sÜÈøRpv ƒ’‘óëMRmg8#—£Õvpì4£ ÆÕï€P¸Ü¯1¹Ú2#år^ß§wø³lâ4ï€MœÈåðk‡`ÞÿÒQSªâ¼^Køé«%4ø‹ž}ž}ž}žmψ³áBÖf@|ÞU½î…ª` €‹°ËuiXÛÎöŒÇJP‘˜öhy†²yWpQ6g^/°üôXüE›O>›O>›O>›PÞ14_”d N5†hP|.Y€ËTƒi¾PNÞYÝ«6Ÿ|6ŸÎÙü¨¹¼^uúé«:5ø‹6Ÿ}6Ÿ}6Ÿ}6ÿ æ…õT´ ¬y ñŠã|î².lžë©úå…žŠÃæ³Ïæ³'Îß|YÿÍ—õßfýŲy gLлf…f‚VšƒEøll)†67mþöóA!°ÌFAHH›ßM€Ío"&ÎìCj•ì6µJ^/>Ìú‹•õgTÎT«„Q9£y—«$y½XéËúo³þ'<#ú<#ú<#ú<ãA©‹‚hM´¬Ò!¸TšæÀe‰œ‰‚òg¥(ÈCÏx,Ãó(ëÇ2àxz/ðŒç:"¸Þᦠ%pà™¸p~â„ÀÁ¯r’;ž¼*.Œ%òÕ8q\à€ß*ŽÉ!.P´H ;“«±3‘ƒuËò‚.V*ƒß²ì×/íæéßì‘ Ç§Ü«ŽLNªt„cDzB¥g½ñÑ N” †ÇÅ`xœÐ¬›†t¹Pi ø¦a¿‚hNÜf¬3Ä€öLNÊXpr2•±?þ¼z&NÀÏNÜBå„×8% 0XÌUDV¥dÌ\Õ)­Ì‰kðgyý,œ¸)]ñÄMø½ÁOP•*^ ö>.Yû¸á|w5Be!’{“Þ[¬`ÀY/r2zåq=€ÓLó›Ça¦ùÏJÆç÷ËM?]Ñìð'©âÓ¼6®P^×Î!à€—¦Š×§`‚*žfjªø—( ?™@Q¸Ì|×;Û²®÷—×a?½wøsÂëì57¢ae6·0€zë "4QdíÀl8ï55ZMÖ><϶ŽÈÚµÙìœìÚlvvW—FRÄ% ɶî2››Ïln8Ú@_ȶÌf£úf³±ûø‹fsó™ÍÍ0Äw~AtéÊlVt`6:€ËÞ*Æw^z‘Uñ{Ì&ø¢MðE›à‹6ÁX¤(÷ó(@8§ô˜á"ˇ§Ç/ˆ°˜ÍÆK©ŠÀ…ÙpÆqÒž¤Ç]fã‹6Ám‚/Ú„›Ïln>³±¢M¶)IÌfcÑf#pn6‚ó»•œß/9røé#Ç?AÚ-9¿ñ‘ãvèŽ ÍnnئH»ÑmkFÚ-Þ>©‘­ƒDÂOvP¸¼öW¾¥X·_>7ãðÓžþÒg‡«`5â`Ý1ΜËK’u{@ÆEy•É߬ÛÈlë6¯h&ÞRbɺ-NÜ>*ØØ—]Öq;e€uÛ8UÍÀ:ë6´ʜ˭C²n#ë`̹¬ãæ³#¨pÖm|¯RÂ'Ò4YÖ!Y·‡OŽn7öeu„¯'­C±nÖÑY·™u(ÖmOìgc‡bÝÆÖAx•é—׬ÛÖ Dóüq0àô`Ÿ±nìÛÏ.­C²n»¬ãözGF‡¿Ô‘Ñá¯ÆŽp6v(Öm—uÀØ!Y·GÞ4iÀÛÊ"Y·Yì¬ÛØ:$ëöËm~ºí£ÃŸ¥Í¬Û ]ÝȵAººñi8`ÇF骦͆5J›Íj*Š6{8Å{­h³9JÓJ}é%X—7öï5¥ö’¼×/7pøé¦“–¸ð^ÃVæJo »…*£5€~jl6’¸^¡ÄÕ¼WIW§˜§q56›1f“ÇàÊl†ŒÍF2Oã/O˜§eSC‘ð•yZîn󴄯ÌÓâSyZ<¸jxež–ŸâÌÓø¤›0O[ǵñhݵ¸ ëŠyzÄw-&‹APGhÿO9Lg¾Üön®Ž¢/øú‹ ŽQH§Ž®ƒGå3²þòˆ­pݦ¬—®d¢3Jøz‡C~Š Ö5î º¹­¢G|û™ù‰¾ù‰ÖüpŠgÁšoÀgV؃ó³îs\÷9>1?© ]²F>=y aä“oä“=ò”}yÂíð΃ó€=£Ì€ Ϩ$ËŸ|nC—­‘ÏFžÂ_ùìùü`ä‹5òŀϨaMŒ|¥<pI“ÇOGþæ[ nϬŸq¸&”©Ð‘¿Ù«ç,žøNy&Ú2Æk2‚“‘?¨‰ñÈSÚÒgVƒ›o5¸=³|Æ-옟hÏO˜ŒùÑoGósp ‹ù©¬Á.È*…ðçóãZ nϬŸÑþ:F>Ùy’1òèí`äí¯X‡«s¸LEãšE2ò®ÕàöÌjð#¯cä󃑬‘ 8]‡#¯´ù@bR¶l¾ï~6òïèë{ƒŸŸ®Ÿ“厠`ǘæ8Ue£[ Å qÁë» ËQÃçNñÛ툧7A¶Ûõ´Àe‚ËØnéa±d»­ÅþòÙž£ÃŸåz» ‰\o›Ÿþ¥ƒ…ä±}}ÇóóÓ5îs"Z‡ÕEŸÕŬN0ÉVY57ŠYA…3ɲ†¨IMœmuI’#1›É²:eOþ—ÌŽ5aì뛺ŸŸ.ãŸ3¾:Œ+ùŒ+6.EÙ:âýˈ/hW–>—+£l¥¬N’²Õa\Ég\ ×0³¾¾oýùi¦ò9µªÃ¸²Ï¸ò+Æ•$dIZIS\çF¨É nT‡qeŸqå'"×Í—ŒÝ^KÆŠ‚#ã ^ŒŠîì 㺛ÆÅáÏ—"!ñþR-nì¤ÎfH’îÆIHG+×þ,»=LÆŠ•Œg\;õš i€^ôõ‚Ãkɘ~û‹V}V_±º,áÐêàz¹2¸¬:1‚Ï %ÁçC«{Ì]û(ÃܵhäUHÓ<ž¯×T^KÆôÛ_4®ä3®tÚ¸“¦‘éçÿ#íݲ%·‘-Á©ø‹xŸ©P¤2ªtÑBªu{þi’~HÚcÝq³>N|‹$3À^Û¼éo›.TgÒ$›K1iNl®0·¹ŒË Ì|ßmôÞeL?ýÍÍç6W|cs ÊJËyQ çų7/c‚²’:/$eåÄæŠs›+ÞÐ\O‚ÃbÕ2?Pù²b¦,¸–ÙˆP)jI¡¢Ì”ô¿»sNJ8fÄ*I- }’µ$™¼ƒ4Àé&ø`DÞ!Mùö5˜ÃÑÌß`}Äf Kùç¹<.?’±>2yU/.Œ’õ±X¥ÐTý¬X .…6£§‚¶Ñˆž^¬lÓxB°sÀ1;£=õœV3³W–1p1ä¸ÌìŒÅ"a| ÞEÅÎX0 £1ÁŠ^N0eglôŸ#¡å8à˜EñalmoÀ9‹bÁ¡ /!¸¦åàT€Åª\z b%Å¢Xpå’1ÁŠN0eQ”4ˆEÂ_ ÃS4ˆÆÓ›— W,Ø ÎľR´«‘¢ÍáÍJÑ'´`;Dw#VüÃNhÅvX°˜\l‡üð’l‡å\r¶CƒÂë€ãUÄ^Ð¥ ¸¾½6œc-Ùgν¾p‚í°Àz’[ߌÜú ‹HÜ:Û!\8ÎvÈQ“„ß/·Ól‡Æ¥v1.µ’í°XÙí”ЮØ În7eAWhÊY3»<†Ž%ÃRiÉ€7ž7å §vþ䬄ÅÊ ÔoÅJXp¸1ÁŠVN0e%d‡r*‚Ôðý ð{|·ßÿǼõHöÀbU¡?Pá¹b,¸ Ýœ`AÿgLpÀ¼ñJ8&©±&¸pVâÐ’q(_ñ¬XþÞžàoŸOðç4}ðP¦,ü¼¼ø¿ &øFÖã7s‚ͬǀÀÅ+6¾™ì^ÝÁŠNϺ·ã¼ñìI8fͳŒvgÀY"Q°&¸W,XóÊkž¸_;ƒ\²æ•Ö¼—áOÖ¼òÁšgÀ»Í’¹³æ(&„öNýwkÞ'!þ¤?{Û¡Äá·ö¦¦½C{“±æñ½I*ÿ°Û!o¥¦½SÞJB{wƒ·]ìí];΋'¡€мuÏ=yëÊ'^«'ÙÛ>¿³¼€x®À¶§µ=ý`¤pÀ/‡–WÏigôE38üÎÂê·‚è()—S£fÔÆÒà€ªë;bIê7°p'‡× î¶_-¨ÙÛ©€«ÈàHÁÝ6µp__Z8@¾%޲)‘…{ò$ø› ÷õÕ…“ìixáùZ»‚J­€ËÀ5cOË—ÓF±§Í,œ›“87'qÎP•”ǪÊçåní.^8ïÑÂ=‰Í\,ç/#AaÅ_6µpsçæ$Î}[¸¯¯.œdà +Z¸'µ€ó… b™lgÉ ö¶»ÃïºÛ˜ánÿbQ€L_0R®(À búrg¿§Ï8¼ÞŽR¸L¸NçÄ*¯·½Áþ²ÿ‚¿åÆ¿àJ¬)7g%‡—ö î‡^°¬‡²4‘ÿ.àðBÖ¸àðâîŽ`ÀÏäðÂ; ·vO.§©Ýñõ¥Ý8¼ŒXA»qxÁÝAyxøî^hw0žÑîø:·;¾b_ çðª0Ñ^Â/¶QÁá%bn$ž\N3»ÃýúâîP^Æî¸8¼ØîP^3ºÃ½ª;‡Þ„¥‰¾¼æð2\¥ÅtögNÃUfŠƒäð»CrxM펯ïÇ/ø[qÆ þ®îp¯êÅá5µ; î^lZª3àçÉ"9¼˜î^xwH¯·ƒ™~ï¨H¸à…‘rx‰ XM¸¶Ð…Q“pAÛúƒ„ë‹–‘ZII¸˜ƒ^;(¢b,Z´º]²h½$åð[ §i° ?¢ÅRÃ6~,lWxá$ ̉ý ÁºÁce¤TcáJp®.G¼p’Ç Ÿ„ÇJ÷’„ïU}…ôEóXU‹oê“eU=¿GFW˜Ú"z ß3¦å¡|–{ËN1U­RžªÞQSSç­©ãQ‚ ÀùÔí×e+¹D};ž:ÆgT­z”*AQTP3ìJÙ˜!Áå„7Wjxsm,MþÉ Ås†¢5Cq0Cqn†â`†’5C ÀÅ mÔJp†66% ÎÐ×9õ•(¨›<$šZ©ZHp†7œ¡IÍÐÁz$á`†H ¤¥ ¾Î)¨¯DA½5uÞž:W©ƒp1u;ÑÕ`m„DާŽQì¼­ ¾õÖ ûô3fÈ€ ¾í/œ›â¿8 ÿd†¦ÔW¢ Þš¡8˜¡lÍPp¹‡\Ä{h#ø‘ðá =i[Þ¿Að»ô€í§Z,Æ èzê+|;š®ß"ß ­H¾÷/`ü.ÀMÝŸZz$­Îû·¼þæòú¹åõöòúf,¯àÅòÉmX¬ºª©³—ẇäÉò6°¼Ê[‡¦¬yÿòyÂß\¸0·pƒ»«A£8g°âc¤1´€Y’ÆL,\xmá€æý;ñ sáâÜ ®Ô˜Eó¹À…ã„,…®º d™X¸8#q_çN¯Ó0Y —–xW à·ÉNW X8IvRŽlJ@vòþMx&ë$Tß.åpš¼oN OÂËëç–w``VMJ‚ 9Æ*RÈE[²Š —wLF3: ’KÍò¾•3< o,\˜[¸‘-¡ ü€rÉ;ÈÂ)ÆŽ‰… ¯-ââxßøž„7.Î-ÜÀv –u+È4°iÁØ0¨i!Ù0&.ÎHÜ“¬¡ZÕTp x.ê+Dšç¢Z|ø"‰*ÔÌ|zæ?(($\]ò4ÅÛw…þJ™ä£À®F(Á\'U=Ê’P¢Z5 T– %ê Œ€P¢ZÄÆET0Bñ–q|@r=T‹ÒáX×C}¬p=X»Ã[»Ã¸Ü_°Ù«iª•þù@ŸŠ†¡¾Æ£ iêK…öŠGÁøvoñ(†„Šó\®˜f$À\p™á‰% íímãá¶ÑÖÔ¥O§ŽÀõ©Žý±Š£`fêœ9u0­ô™¤à@ÛÀ2K@2`h›š>Kè¥puØ/Æa/Yª•?ó@)3Š% Þ.ó?$üµm“\mïŒm# ø«•‚ò@Y'ª€¿¾P øßÿöï‘©XÛ¨ÚújUH³îξ]ëv$WŽ[×kàêÛq¿],^?ŠÅ«LëyÀ{ƒ,¯Åâ/ßÅâõ£XÜ€w›la/Ç»ŽT{W#YéY,þ‰Yeß5Ço[eünµ7(¯VQ72§uµw½]®ý@ÕÞj×éríç®ÃåÚŸuÏ¢á·-ž ~³Þ•kW«¬M°®·~[S¸<ÊXÁ4;ÆEÁôÛ*í‚ß«¿„ÓÕª}@FTYñ\ï—,£Šg#мE%ËSS÷ï:X K–§¦î«1u¨højޱ_š —Ë REÃ3Sçæv3–69 á7Ëv¨êN/Û%žaU¶;5us»Î}›:k×EK`eÝ-š:Q8[ÈÂËÂÙ·$ü…ÊWY8[­WèÖV•¯o{)\¦T¤€#óªtõm'ÁË¿rÁÕ¦-ø€µ§pÓ&ã€Þë%\ͼ(å6Gð7lÍgyàÔÌE3ÿ¬þ4Ü3Ñ+¸šyZ›%Úéµ àoμ±çya&ÎF¡ð7¼;ÏÒ»™™w¿â™Ï›Ì|‹ þθ­ø Ï|ÈYÂa:‰é_Ap9ó13/˧fþëû.É þîž·ŽÈ»3÷¼,(d¯_€«=µ.|Û£yÁïÖúRÁj•ô=`óNYëW_*ÖSµ~8y­¹†3¿e±ÞÛÑ ~·ÚëU«¨O¬¶«/•Ë©j;cêrÄS'ËåðÓI¹œô& ßËåäÅì,—“p§à[¹œøÕU.' ßÊåä¯x¹ö¾‘r9Ë…ô,kVtúq«Þ­Yem× Òòéáª&"ž]Ê¥>.¾‡­›•U½WN4+›ëq«.­Yågè÷Š3×ÑŸΗï¼|°_žæÍ2òƒ†àb}¶Ê°Ï_>ž/ßyù8xù_~«Óp™z˧/ÿõŽd|VhÕ¬z*øòª‹¼zyÙE^Ú„A‡’ñõŽd|VÕ¬º'ø‰ª{C™l´»ý‰7$ã³Z¥f•$A±V½Ì¡XÓ^æöËߌÏʈ¬—Çb­ÚÙ§íÀ­—Ö™ %ãó Ÿfå?n•è4¨vY‰uâÈf ÿã³Ãä‚2ÊÅ%\ß %îóê™W§N”¿ ©å/ÌëZÕËÛS7.Oú€ÿ)u¶®rŠõçe*¯Íª33ÄëLhÚ­¬3™˜¡gèÊI†ºãóz—g(H¸ž!^ÐQéôЂމŠ7öÐ×÷TRp˜ü¸U9fHVNÔ#TN4K¦ ¾T ÔD¼¬ 4ü¥©‹îF¬*¡’³VV% §n\5b)(]|ð²‚Òðû3¤Òÿáæâéÿd†TúÿÄ  dù¿¬ 4ü•yöø~Àòìéý@æÙOÌP¼±‡ž)åÍÊϸ—߬´wuýƒõõOt^lÃL÷‘v½‘ªׇ§ª×Aª:¶ldªz³ò3îåš7+¥Ü°ùEû@lóË”òfeŽßË oVê76`d¾fdmñìéf0ïån[ïwôÀÕ;Ší†}÷XÝè.t ϶QR®úÀauÃ’¤ë IúÕ—ØŒË\µªsE/4CW.†®”iÊÍòÝßË3¶v‡!eA?r5ðtâf9Éïå¿úŽ¢¥~G™öÛ¬ ‹{y»Ö;CÊDW*øŽ*=wøŽŸç×¾äËÓà;ª4Ú׿QåÁZǪ3ÞQôF2ÞQ¤»¶t×få«¶aºkûHw}þLwmé®ÍJwmÃt×ך䫶aºëðÚ3‚?s6_º5é|Õf¥¥ÞK8UºR'œÖAÂiûänõLº|åÞ2F›•z/å,å³R>_?³Ù¬üÂ{I—†_0xÃ/(’._yy5ùâËË´Glø²´Ç:H{œ™ygl›ä»‰‡ðåyâa$Î̼ûúêËËÔ?ôò"õ¯Rÿ^½ ‹Ü½f¥èÝK¾Ãݰ»R%ß½}s¾àj}®L"±$ªõ:nIú›}µ¢pûjõLÕzåA÷ø‰f ¾êÐ0™³õ‰’Á¿}r æD½ö‰Š‚ÿµUT$øÆÅ®Ÿ(ièñ'ʼ­·­¤ ~“;øDš9¥VQp©ãO” R¯ÙR*éY‰L÷R”p܃¥(ÕAŠÒKF–Î1jV*ѽ$!ãåsÄ//“„ð&IBm˜$Ô>’„š•$Ô†IBí#I¨YIBm˜$Ô>’„Ú0IûÜH’qñþþÛ×ßÿýçöWÿÚÿóçžÖsºmë^[ùð×?gß-(á:}Ý^ðˆ×¿û«AÐÿºÛ<ŽÍÏ.~Ïý³‹Á‚2=M>žñú÷ug³—ïÇ˳§¯¯¹GŸžù²ãZÂýU<Ò—|û²K†øömÑ]ŒØ °TýíÛÇ/é‚ÿ˜[÷sëþãX¸ÍTfßžK=È·»«¿ƒ„&ûË?"ËÕm>µî?æÖýDZpâÛ÷î.àÛ·¯: gßž‹ßþØ_ë„ûëÅu¯.v „‡ëW¥¸=¾ Ö½,±OOds…²«óç@¦ëáñôBCàyÏY{T2²¯ÞȲ•’žêbsRÐí¸ø¨^þù+O~jöç@ >É-Nt’_òþíÏDN‚š›ñôL~•c½ž^È@ô¹bx%¿ò¥]pڳƹ¥øK"³ýsdߎDfû•K^‹Ì¶re‰žè¯ý¨dÀ7gÀýtŸ<Þ6.«—WÛÆ¥ö¡¨Å¶qi©Ãɶqë®ÍpÛøh=n›¥ÕжÍÒ’þvµm–š|…Ûf)ázùÿüœ:e<0Eû±îÿú*þ»1 ß~åÙ²—tÐÿ®+dÓ~ÀÑò¶W4–’0<°ªt†^;‹ž»ÃÙYä}üøÄÎfÈ-!iøö+OÕùóõ`ÿÝ袄#½ªž¡mŠJMÎf¨é]×èa®µ¹¼.×½üöü,áòK¶Å^~ð‘ÀÉËeP3ÿ” rb18×›%/ﲄƒ—w¾¢—ß%ûºbþó1uÿ0éÝž¿Äs€ïÍ%`8ÛC‹Ëðæ»,©H¸4ÖGû’àÍwÝóôåûñôn½|½<¿óò}æå¿ÍÍü·Og^ ìB•þ?æž_Ø%Ò—ŸšùoŸÎü'/ßg^þ÷1uüWͼOßàGî_ÿñß§ÿxëé?þÛøëOÿõÛoÿÚzþ!] Rïz$I¸Ú´ÛÞhN·;¦ÓðòW‡ªd—ˆUQæÔèÓûñòÝzy!°—as¢Ô¦¥/ßG/ß—ïÖË‹uñë_ÿýã9óÇ7fþ²‹N”šùýñhæwãDÃÕÌ»ÀÌ»Í,JÞ—¿;ó—]t¢ÔÌӗ·fþzy1®…ûñï缞Ü™ù˜$îùjìù#¸GázÏç†ö|K)Ó§÷ãåïÎ|ñEÂឯƞg/oîùóååž/çÓÿóõcÏܘù°$ ‡{>{þ¼º¸Þó Øó[ýYnôåûñòwg¾vщ‚{>{ž½¼¹çcÏ—zêùõ™Ï™?þ¸1óËéÖ>QhÏ;÷ür«S¸Þó>£™ß.ôÀûñòwg~iQÂÑž?_¾^ÞÜó>ã™wùÒ6ÿýëCÛ|üqç„]ª„Cm m†ë™OÎ|KÂûñò·OØØ$j›hh›è4\Ï+1Å¢\Ñûé÷Œ„÷Y®ÉåŠÞbIœ¸ÏR-!*Wô3´}ÄÆ)œz8Ž{·vj° ¹„SסÄÿ•ø)ã1œº…¦«ŠñôÊÔ13×aEðäºò亯™™]Ê Ol`©žé¯Ösü„S·©kÅ€S·©+í²ßÙ·ŸÇ…oêÜ ›ãÔó#¹Ï·pê2^rÊÎ\Æn¹žÎ]ÆÑ€3—qNו˜»Œ ÷òÛKê‡üöÓ£)átÝCÌ<1tÈžÙý§^ðÂà‹Ãp¶çý‡1òC~ûiM\ð¯¿n1{ϲ]óóüØè9‘¿9EOôдÝ:&úà˜ pã˜èƒc‚Âc¢Ž 7މ>8&ú©i;ß6ñÔóo›Ó—ðHãSС§Íߨª¤p²mâ’KÑ¡§Íõp2¦Ix¥×§š3=­#Î7 ç¾ä§‡xñ©ëCÂi²Di®œpòí!—\1<³—O×Óé·ûÓ’pòí¾ÕrE0è·û\†ÿ#×ý:&úà˜ pã˜èƒc‚Âc¢Ž 7މ>8&ú©i»uLôÁ1AáÆ1ÑÇ…ÇDn}pLôSÓvë˜èƒc‚Âc¢Ž 7މ>8&(Ü8&úà˜èÇÄîíÛ5íþ:&öã˜ptLìÆ1!àè˜ØŒcBÀÑ1±ÇÄ ÖDm[õ0%œl›ZŸ%õÊš¨)…Œá™&v­ÿY%goÀ‰Èä­`Zy½ék¸²&¼ Øš8ÌNóWÖ—/ÚšØ[ά) §ê¢]‡ûvWƒ3à4%g¡5á"Z8aM\NfaM<®˜”„G&— XOjÅðŒäYû@2à\]dMì#àÛ…5±ûÑ‘5AìÙæ(U[û€3àôÛýþïҚؾðʼû.kbÏŸ‰®¬ G.äA `xd÷E[ûv\*†Ó=ŸJ ÚšØöl-œîù?®ÒšpÞ©u×Ç„û <&—H¾½Ÿš¶[ÇDn}pLP¸qLôÁ1AáÆ1ÑÇ„iM$ç°5‘èÌÖDZRmКhKÊN­‰œ‡¬‰Z4àÔšh5UlM¤¾]Y9xlMœá< ô(J¹"k"o‰«N¾=•ä<²&R É€W:ÁO‚mM¬vXÔpaMÐc¢Ž hMðc¢Ž hMðc¢Ž hMðc¢Ž Ú ÇDКàÇDКàÇDКàÇD¦5áÈ…Ü>& k‚}pLÖ=&úà˜€Ö?&úà˜èÇÄÁÞ5íþ:&öã˜ptLìÆ1!àè˜ØŒcBÀÑ1±ÇÄ GÖD°¬‰#*áÔšð>Ck¢´R2†gþÈ[.fN­‰ø¬Ì±‰êÀ·kk"±‰Ë†pjMDŸPlbK)=õ¼€gª|ñ ¦³K8Síã|WÖDqàåAl¢Z±‰ŠáÌéTŠÇ±‰\ 8s:¥XalÂÇÅ€WvT+6ÑÀ¶Ñ±‰VØD«NUeËÄ ª²-‹§ª².®¢Ø„+pæElb= b„± *øv›øX›8¸æ%œ®{>Ô…°&–ÕüN×=ûÒ5±¤ 8]÷ªÇ±‰X•žGÇDqÆ1ÑÈ·÷SÓvë˜èƒc‚Âc¢Ž 7މ>8&(Ü8&úà˜°cÅŠMNcÅ{›H¥y §ÖDˆ ŒMDwÝëœZÅ/Fl"„¦áÊš(¾`kâLQ“p¾w­hM4øíšÈy½[!kbµR¼§áû\lM¤¥‚o±‰jÅ&*†ÇDflâ:&úà˜°bä˜èƒcÂŽM´jÄ&ZÅpã˜èƒcŠMc¢Ž #6A‰>8&ìØÄyLôÁ1aÅ&È1ÑÇ„› ÇD†5A‰>8&úÄ1±geîšvÿ û€qL8:&öã˜ptLìÆ1!àè˜ØŒcâ„kkb5"+´&¶ ä79y¬ 牺ðkÛ8—= .’ÞÚbÀɶi-WœéT/Ÿ+k",†5q&K8 a/®ÖDóé5ñQ ¬‰|‘¼2“åCâ¤5á]/bÉŠMpætŠ-ØÄSb1<óú¶bûHÀðÊýb͈M o×± ØÄ‘-áQèc›p!ðÌ$%âØ„_ 8³"—æqlâlúEá:6±X±‰%`8 ß»c[ůñtzL´P`lb©5p¾_ŽM,'7ê×ÇDüâ3<&Ú—Ff¾Ÿš¶[ÇDn}pLP¸qLôÁ1AáÆ1ÑÇ„iM\0ù_Âéº:Ú N§TbÄðÌâ*²&r©É€S§ÓzµòКH‰jZÓšh¡bkâÊ5pòíëY=²&W•†5QSHYu½™pòí%¸Œ3rÊYÃAl"Y±‰„áÆ1ÑÇ„›¸Ž‰>8&pl‚}pLر Ø„‹n}pLX± rLôÁ1aÆ&®c¢Ž ;6±X±‰%`¸qLôÁ1aYä˜èƒc²&È1ÑÇDŸ8&öJ£]Óî¡cb0Ž GÇÄ>`ŽŽ‰}À8&û€qLœp›ðÕãØ„?:xI8õÏ—F¢4Û§,Å€Óu¢L=…ûý 8M u­ehM¬›9j¸²&–à°5q¸I8K<ìw‘é´…w3†3ÇKõe:­ÖD6àÌñ]ÅuÞu×± çØ„óN¿ÝO26á\2àôÛO]§ê&–`Àé·¯ê&ãØÄRÁºÿ¡ýóÇ&4óHÿ| Å&–|%… 8s¼,K†u)Î/.u1ƒ©Ó±‰ÊD›ðÙ³1•­ ›g{>ä ­ ïƒg{þð”*kÂie¥‰Œ;ü罹íÖ1ÑÇ…ÇDn}pLP¸qLôÁ1aZ.™NW º€ÓÛEjf:­÷ü”1œúicN0Ói½°EÎHÍ’‘éäœß®¬‰¥ElM,ôvaX«®"Ñv³:©$œŠLM)"kb½3UNE¦’¦ÅD&§ªá:6á¼› Ç„› ÇDVl‚}pLX± rLôÁ1aÆ&®c¢Ž #6A‰>8&ŒØ=&úà˜°ê&È1ÑÇ„›8‰>8&¬Ø9&úà˜°¬ rLôÁ1aYä˜èƒc¢O{õü3 ¼ýCØÛ€ÂæpÂÞ¬6‡Ãö6`…°9†°·+„}Àa¦S´2"†³L§”3¬›XeÁ€³L§Ú"Ît*Þ€S§S¢¼<Ó)T ×UØKÅÖ„[ 83ÀsóÈšXU]6à̯¾Bk¢]9¥Î ðèqÝÄ–?¦á Ó)Z™NÙº%ãL§°ðl¥*1u·ªÂ®$ÏJ”שәNѪŽÃqgK¸ ;\µBN¯FþˆËL'OÌçÔ k¢U ïÚšHÞ°&®ô<è’ÖDlÍ€Óu%xhMÄX 8]÷xpj*k"èmófBìÆSrhÚn}pLP¸qLôÁ1AáÆ1ÑÇ…ÇDv¦S®F¦•8+Ó)wZ™é¯0®€ÓL'Ÿ*ŒMÄUWpšé´žg:ù’5\Wadž­‰“GÂi;¦ä5B¢ªÒªÂv%5dM„åò 8u¸ï±5á£Þó0Ó)Z™NÃc¢Ž 3Ó‰¦*ÙÇ„Y…]Iž•}LØ™NѪ¦DŽ•éDމ>8&¬L'rLôÁ1ae:‘c¢Ž ÛšHÞ°&è1aYä˜èƒc²&È1ÑÇ„eMc¢މ‰º‰ï'•“Éé„ $|@ „xs4Üd˜Aô+ŒîrÄ4‚i8$|@XØ4Üä=@¤ŒîrTÿŽ‹Ã%|PFjŒ5ܬÆE¥ªŒîrT•‰K%|P܇*ß4ܬCTŒîrT+„ i$|Pr‚ê14ܬ\@iýŒîr”ÁŽÓ»%|²„5Ü̧EɦŒîr”W‰“%|ž‡r×4ÜÌòB)PŒîr”íƒSa$|4‚2*4ÜÌ=@yFw9ŠAã­„B™(ΧáfD …‹Ýå(2‚Ã>p°#ﳆ›~ZäÄdt—#vfIøÀíƒ|"nziÍè.GV$6±$|`Œ ›º†›wZtá{Â÷¶\‹,Ú~1€á‘þfÉîÚ]]C$œ6…9›KñÆZÏnc.úEO2’`®ÖVN²­÷Îeç@†™Ì{W¯Å?pÛÒ$ˆ §ýtRŠQ[Ьˆ„gú££7•šºå i¹à`êhK32u[/á4«ä€¦n+ç·ÿ˜Ûu?ævÝÏwlëµ H¸nëÅàdêrvÞcx¢§xªéȬJ+e ¶ÌpE¶Ìæû OŸÚ´?æ6íÏ7­˜ù½Óš„«™çýØ"ýç³?“„s.ÕÁÌïWå¨áoÍü·¿¦ö<‡ßÙóuI1b8éÚ¶ÊklШ­ø“uAÂI×¶¼>Äe~yòæJ8èôáãÕ(DT g gè!Á~l>dgÀYú3§T5ÖòÎ%N/ÍUÜX˽î`Û—ð¶)!]ð)åðÏvÅ€SU¹ž¤ùµÅê 8íÚCFY[K¨æ%5E"}øDÆKÄpê¯Ë>à~lWþ¼„³Œ—æã¶ñs‹¿ÙÆ/V kÛüçç”¶áð(Rþ8;5œ_ÈE#° 0œøö>÷í}æÛ¿Í­û·¹uÿöyÆÑM åp.ï¤õûöÅG Wªrù¸)UI/¥sÛæÛܶùöOŸ›º>7u}fêþpî%1uîú¸^}÷ž‡„“ãeøáUÑ»ð¾ÀÐÓøåÐNÚˆý»l Õk dÂ7Ó§ m dÀ?F«ÿϵüQ‚Ñÿçj ”q®‘€kZþTÞt®ÑÎ>Aå”ÊÆ@´ykùƒá4§tëÿƒrJ÷–?ÎØóJìy-45ðQ7¶êìPê(ëì“ŵé­É:ûðRÕb<熔ô¸Õš'€CŠwöá=JÁp–íãƒþniÆÓY¶O+U'…~4cÐpÔç¡©(@kž;ðÐÖ<¬›‚lÍPî'kÍC¿Jµæ *÷“ö\ø´·NPY²5]¸pö •pVB®Ûº)`8£· ‹ÃY¾¨už„¥ø“¦ TÕòÞ:º9Mëæ4­›Ó´îM»¥Œ\ì'\eïï¿Bš6m©íNÓ2›KiÚuÓèoWš6FÚ˜ìæÐZhÎ4í³€hÚ O<ËÞšv1žÎj¹©Dæ…ñÙcxcE^¨˜÷™ò^^¥ßmJ”¦u9`¸ènƒ5­k¬wž34m-Íдh×1M»§„ô@eºÛ†³… ${ŸT,©b8_8Â,Äî´ã$œ/\²˜B=xºÖ´çÏoœ€Î.× 5íÆ ˆá¼}Õ¸‰¶.5í¦gsSš6Y¸¥ÑóÝÏiZ?§iýœ¦õ¯iÚèí¥õ„+M»ÿ iÚèJÌÎÚEÜ_&ÔÀŽH5mÈ>G¨iýÕ‡À¥¦­ðNû1€á‰iÄ‘¦Ý¤©bxa×"Ô´ùÊdpºµs厦õsšÖÏiZ?§i=ºÓî\.õèÕ–Šž.5íúp¬ikBë®4íÑIjÚ’CÁp¶p ñìJ=]ñ^bÞ/’Õà 8oÙp¥’µa8Ó´>¬i—¨¾kÚUφå¹m”¦ ¹6ÞG,Xm!¨¤êŒ¶W¿H[ÓR¸¡iû@ÓR¸¡i?iø@H‹÷‹d¥F> g¥FÍy\j”‹ñtªikD4h 5õuT1jøPEkøH‹ˆTÃÇ€*ŠXÃGúUªácPE´áã§ðÓò†¶÷€Â ïAx(Üðô÷ Ÿx·¼}à= pÃ{ÐÞ 7¼}à= pÃ{ðIËÅ Š}dÇFÛ{@á†÷ ¼nxúÀ{Ðç¼ÝÍiZ7§iÝœ¦u¯hÚ-=³©hÚ_!Mëë™á&ጛ7æˆ4­ÏK^Y&ئõ>P;®; i·t™CÛÈrMÇ••Úv). MëÛ™+á…§5íþñ¹b8ýÄèàŸWwÚåwÚ>¸ÓR¸q§íƒ;-…wÚ>¸Óv4-÷ô÷€Â ïAx(Üðô÷€Â ïAxº³4­Çe•Ü{@á†÷ ¼nxúÀ{Ðç¼ÝÏiZ?§iýœ¦õ/jZ_ô·kM»ý jZŸrÃpª“\­ jÚ-¤†á,£5/ iZW¸®óPÓ®vT©HÓîN?1-$Û‡~Uô¹`8ýÄpDÿea¼+¡axc€®ÜÑ´~NÓú9Mëç4­GwZæ=èï…Þƒ>ðP¸á=èï…Þƒ>ðt4-÷ô÷€Â ïAx(Üðô÷ OxžíeƒÕ-ü„«6âÁè~µ74­€#M „W~/÷@öǹ´8å³Ú„c8#OFÄöáN‰Ä·náÈO»7×pÔîçÈ>àÈOËû€SM«ú€ÃÜÖœžª8òÓ^}À?märF‚Ü“ÛùÀVà§åV¤€ó­ ä|´nÕpÔ¯åèFÞ÷ë&¼YyläPO ÖÈ›%ÈFÞvØ;:´~Ú‰GÄh#ïÄþ³¾`xfÛf±½÷*†Ó½¹5bE~Ú½÷ª„kï£ ¡ÞÞ‰û#|ÿ¶¦usšÖÍiZ÷ЦÝZAÄÒ$\EÄö_!M»®gŽN·vj ä!O‰µÒ6r’?¨„¦]_*§‹ˆ˜K çìÎ*ŠªKHÓºt 8«(J¡@MJ¨λÇ|GÓº9Mëæ4­›Ó´ÎÊòú8ãt–W-N®¦Vfy•F›˜¹ëµÛsë¦7à­{EšvÛ7 ¼üÙS)%ØWÈ¥è"†ó·X ¦.7 g‡I jZi7-» ¦¾Ó®Z6:Çî´~NÓú9Mëç4­MÓ®—Být{°ý æ´Àå|èD˜å•â’0¼ò€šƒ¹ëM»i¸Ô´!º5í6€áŒkÍW¬iW-ä1œq­yçp>-ë>oä¸%f{ðT‚`êT8oåTï0mjù»/9˜{à½p™{àrñ0÷`Àpºp9%¬i󒆳۟w jÚJÃpvû;ê"EîÁvô‚——ܶ_AMC-N?1´ä ¦ '󀄳RâØðvUÁj×)M[—ˆ5mŠìJÜO¼[š¶4-…š¶4-…š¶4-…ßË=8IØ.8È=H¸[ZRmÎòii1/ϧ]Œ§SMZÌ0÷ ]\åäàqîA¦{ÞÈ=È>åŠü´yaòn䤒œG~ÚC2àôÚÞ|Ë£‡ZÐp‘{ð0jÄäæð;mÜiaî¿ÓöÁÖÈ= Þƒ>ðÀÜî=èïÌ=àÞƒ>ðÀÜî=èï™{àH3Û{s¸÷ ¼0÷€{úÀ{Ðç¼ÝÍiZ7§iÝœ¦u¯hÚ=U‰mœ{°ÿ iÚ#="aîÁö³`–W‘úi܃­ß£ƒ¹5S?­‘{·Í‰"bû†³”aß`D,nü¸^X’ivI¿*Õb<¥ §îhZ7§iÝœ¦usšÖYY^§÷ ¼Fîõô÷ÀÈ= Þƒ>ð¹Ô{ÐÞœ{À¼}à=0r¨÷ ¼0÷€{úÀ{Ðç¼ÝÏiZ?§iýœ¦õ¯iZ_;¤ŒÜƒíW0÷ °°Ì=Øšbƒ¹ɱ5Î=ð¡¬i]¢F¨‘{jJPÓîN“êrÖšvW¢‹ÃpªiÓRá6„U˜0œjÚe)hZé=€¹Ü{ÐÞ3÷ V\¶÷ÀÊ= Þƒ>ðX¹Ä{ÐÞ#÷€zúÀ{`äPïAxŒÜê=èï‘{@½}à=€¹Ü{ÐÞ#÷€zúÀ{Ð'¼;“÷®¬ö¿¦Ý M+àHÓp¤i÷CÓ øÍ܃³;í G¹çx‘NyZ)0÷ ¤ì§ÓÜ3Î=XoÄUÃuîA4xüy@ xbÉ\ ñl'ÀÕo‚Ãéaâ¯+1÷Óz· ç͇{¼àÛïn­KÒ2¦ej?m4žÓ2•ŸöJË$pkÕˆˆµŠá‰'zè§mËbÀ©Nª‹«ÐO[àÌK?íªU¢Q‹DFWãæ«q3XY›³°F,ûb<5|l!±ªÚ6È{Pœá=hôénNÓº9Mëæ4­{EÓîYì”1sZ4rJÃðÌRèZøL>ÈÎsj2rrÒpÍ0Ó2Ö´=]FÄZ\"ŒˆÕ“£U™ZC†¹¹&ΖFÿšÖÍiZ7§iÝœ¦uVD¬#"v÷ 8»Ó®êGÄ\*Îî´ÁŠˆ­æ1†³;­óæ,üvaäl¿ÂšÖ¡™—šv•+\›r2žÎ4mˆjÚX£úvy§-zâÎüÇ$ÎÏiZ?§iýœ¦õ¯iÚÕüNAÂ5ÃÌö+¤i“«¾a8Õ´›± sJŽÃiD,Ý뤦]¯ÚIÃu–—·²¼¼ç¼Ñ9ã,/Òà•Ùc,’ö²,Ë+7ãéÌ1½3rrÖp{¯9 gšöè®4môÃy|54íÅcFàJÓÆš°¦Õ€3;»,÷À­VJÆpfgÓ$1Îñ]†3;;Õ€r–TxºêÐZZ†š6]ÉÎ4mÊøN›<;& ÞƒÕúOXÓ&½îêN»*[y0ã—…¡ý4À»¥iû@ÓR¸¡iû@ÓR¸¡iû@ÓRøMÞƒR$ñÌ{P.‡›€ÓØQ¢5ªiC\Œ§SM뎴Ì=(~É®rŽj*÷ ø‚á”Òµ«qs»‚‰N‰!· òÓfŸ¼§Ä¹,0÷@Üi¼ûiÙÖä=ÈÕà=`wZ‹÷€ÜiûàNkó´jDÄZÅpÃ{ÐÞ‹÷€xúÀ{`ðPïAxlÞƒÜ`5.÷¹Ô{ÐÞ#÷€zúÀ{Ðç¼ÝÍiZ7§iÝœ¦u¯hÚ%PsÀÊ=Ø~sâ²8 g±#OŠyi¸Èyz£¶xÚUbÆ#b¹Ð[¥•{°š28÷`Àpv˜$BÊOϼä€áì0É9"MÏÃÙaý-Mëæ4­›Ó´nNÓ:+"Vƒ«à ïAx¬Üâ=èï•{@¼}à=°rˆ÷ ¼ïñô÷Àâ= Þƒ>ðô9ïA÷sšÖÏiZ?§iýkšÖ·‹óá„ë܃íW0÷ Ö%c8c˜i!À܃KÅpªiÓA£frO—šv±²¼–+ËKÀ©¦=;óJ.¯¶0y7rÊ,¯Åz:Õ´®¤dädðí:÷ g¬i™÷ÀÌ=¸¼}à=0sh’˜í=0s.ïAx¬Üâ=èï•{h’˜í=°rˆ÷ ¼ïñô÷ÀÈ= Þƒ>ðX¼Ä{ÐÞƒ>á=Ø{YïÊjÿ iÚ}ÀдŽ4í>`hZGšv04­€ßÊ=¸ú€_p{à|Aü´ëµì2<“_W#î§u.ûf<ýZw·´¶Àž ­åójDà*"v©J.:;óJ8ãòrÍÈ=h¾b8=LJIFîA>/ÞX‚¡xù´àåA5nÂÕ¸±pNÁjܘ xåðªqŸÝï4\ó|p>hÞ1<±¤PBåÙ@4àô×=÷à"Ïp–4²4sÎöñ®yÌ{pµ”pFWV &ðv1B 8£+« 3×%¨o×ÞƒøÅgè=h_…»9Mëæ4­›Ó´îM«•Î=Ø…"b­æZ0œ¬{Kù¼³uoäV)àdÝk*jÚR®Ö<."bÞŠˆypÆå•qDÌÇ‹QJÀ—W±=ý Ãéµ}ý•å\çD\¹ª´xbð0"—fÀ9Íi-È{N–Àu–—ÏF–—ÏÎÚE¢*YõÒ 8kKtäʈØjÊðÆt¯8÷ y 2*÷ yÈ{°4W 8?"kƒš¶FôòRÓ–V<Դŵp\ÓnZ¶à=XµlZÿGEÆÏiZ?§iýœ¦õ¯iÚuâ£úv¥i÷_Á|ÚÕŽN¹¼–V"̧Í% §ù´>‘–Ê4Ÿv5±œ†ó;í¦ì\wÚç†3bÈ+Ô´Þ3=süz·=\k!a8»Õ¥â܃è\åDohÚ³Á«„sMkô[¯‹œ lÈ)Á܃­lCÃA±fhZ×0œjZW*Î=pWa£€3&ðêÖ´>p¦i}…¼K- |»Ì=¨‡)$5mÍhæå¶Æ%AM[šgš6yÈ0³ä+×è„+M[Ë3‡œiZ·ì‚Ðý4À»¥iû@ÓR¸¡iû@ÓR¸¡iû@ÓRø½ÜƒR›„ƒÜƒRòÓ®{Ù9 §• ©DÀþŒìW §QúRSD~ÚìRô®rZ¨8÷àêz àôÚîk†±¶™ÖN‰!SÀÕ¸u¹˜Àœ^Û·Rd«7i8¨ÆM¸76nxúÀ{€y˜÷ ¼6ïÁé=èïÅ{@¼}à=°xˆ÷ ¼&ïÁå=èïÍ{°`Þî=°rˆ÷ ¼Vîñô÷ Ïyº›Ó´nNÓº9Më^Ñ´[®Q æ€‘{°ÿ iÚìÊR1œU.ÔPQD,åâ§ÓÊ…`0Çšxºˆˆ•Ô0ø>€áô0IÞA†™õàfêåìÉ`æä-¾‹á4Ë«ùŒÜê=°s"®ÆåÞ“÷àòô÷Àä=¸¼}à=°y|6²¼|ÆpÃ{ÐÞ+÷€xúÀ{`õ\ Þƒ>ð˜¹ÍCÞá=€¹Ü{ÐÞ+÷€xúÀ{Ðç¼ÝÏiZ?§iýœ¦õ¯iÚÕø×OWšvÿ̧mÚïFîA¬±`.¯uê 8ãòоÀ|Ú¨—ØÈ=È95¨i÷ §‡IjÞióúøˆá4ŸvýÔ´©\Q`§šÖµ˜qî󘹗÷ ¼0÷€{úÀ{`åïAxpîóô÷ÀÊ= Þƒ>ðX¹Ä{ÐÞ«çñô÷ÀÊ= Þƒ>ðX¹Ä{ÐÞ+÷€xúÀ{Ð'¼ë–øßï!M»šVÀ‘¦Ý M+àHÓð{¼þÌ)=á€÷àØ6ÂOëK;o•β¼–™À·h“ñtÖGìhÕ!ü´Þ5=u ÷`!}ÀEW<‡á¬EÞ‘C.ü´–ñt–U=îBîs6à,*:«שÓ1ÒÄœ~•sµbxf¿J8"¶ÙÆκÛ,$ F¿j5bÁ·ÿ¡ŒˆØ’ 8ËË繦]•ìÆsBwŸÓ´~NÓú9Më_Ô´©0‘Á¹Ž”Ó R€Ì¶74mrËk# sÎR…=I p©i]KjÚmÙN:Ê.¤¦uµ$ g:©”ói·J' g[;ù€s®­®riCÆ5-“8ƒ÷àLœÐš6 gŸx5|š¶Vðô?$CÀâÀöcÙƒ¤å 5m¬.a8sE§lhÚ€f^jÚÐÎ= õq.s¶_aMë²ÇpÑjv·Ùê˜ †‹V›8Ÿ–´Ú<áHÓ&‡4íz¼SMÛO¼[š¶4-…š¶4-…š¶4-…ßË=pôz`æ¸ #b.]Q!g\,÷\pñª p¦i+î¹à|JUÃUîÁ•g%ÃE-b8of½dä§]Úâ 8of Ÿvë½jÀy3k“²ï´6ïóÐOËï´ï¹ÓöÁÖâ= wÚ>¸Óš¼K6"bÌ{`ðPïAx Þê=èïÁ{@½}à=°y<®ãÞ+÷€xúÀ{`åïAxúœ÷ »9Mëæ4­›Ó´îM» 2‘Á¹û¯ ¦u±d g!çaîÁjŸÅ†átÝ[Ë iÚU×Eðò""¶d¿DÛ0\šÃˆØ’ZÊÎ Íc†š6]¤ÊÎ ÍC»£iÝœ¦usšÖÍiZƒ÷€xúÀ{`äPïAxŒÜê=èï•{@¼}à=0s<áx±½ïñô÷ÀÊ= Þƒ>ðô9ïA÷sšÖÏiZ?§iýkšv©™ÝëpîÁþ+¤i×êh5r–"¼Ó.¥1us–B™ÄX$´T§áRÓ¦ÃÍ+5í6€á‰_a Ö´iIÎ Í̧ݺ]/Ï6–€s˜÷ÀÌ=¸¼}à=°xˆ÷ ¼0÷€{úÀ{s¸÷ ¼Fîõô÷ÀÈ= Þƒ>ðX¹Ä{ÐÞ+÷€xúÀ{`åïAx¬ÜgôÞƒ>á=øñß¿Ž¶Û_af°f82Ìlà ‡C†™mÀb˜áð»=¢„Þ °·nÙÎjÄ–ŒkÄRmÆÓYÏ…‚ùióªê¼†k&ð¥âÜ·T g©â¹ÁˆØªl²/(¯Ræ4BoËá,U<úhDÄ<˜:ÀŽý´>”Œá™G ~ZBÆÅáüj”#ôÓº«‡ë±èŒ±‹Ö˜ÃYSã–¬ )d gM>#ŠŸöÊæpÖÔ¸5+÷mZ{`oÜÝ+áì0i 3¯·ñôÊÏw‹KRßþ^ÇÆ îæ4­›Ó´nNÓºW4í^;༄k&ð|ÐaI&ð|uppZ¹c HÓ¦­û†Ó|ÚZ ÌòŠÑðtåU­,¯ê0œ]Û‡³¼J)ÃÙµ=œå•[6àìÚœQë=˜:Ínõ\ðs ‡g®PÖ´„Œ‹ÃÙÕ¨eÜ…Ü•^^DÄœkˆ ücÙg«’sf¥%c8ólµÅà=KÁpæÙ Ñà=ˆHœÊ=ˆkÚЮSšÖÇ€5íÕVXÀY"t]pÏ…£Z8ÀåwZ$¥i·VbTâüœ¦õsšÖÏiZÿš¦ù2N¸Ò´û¯¦Ù‡‚á´r!Ös¢¿º 8Õ´[ó=¤i·Î¼MÃ%ïÁRHšVÎêV3âòÚ}Áx: ¬„Šï´yAS'5m:Š>´¦uYõ¦uFÏ*†s#´¹ü˜0x\M8÷`kí£áïjZ?§iýœ¦õ/kZ´pZÓ:œO«ž™ï¢áž ¡TãéLÓ&#÷ ø¨fiÚ MKŸÞO¼[š¶4-…š¶4-…š¶4-…ßì¹@M`»çB®°F,jŒX=bñUÓVãéLÓúXaXNô˜0sBl8÷ ĆáŒì<%‡ü´!˜Ogdç%5ä§ ËU¼/à´8£xoåxLàØO˽fÏ…Ë{ÐÞ³çÂBHlïÝs!:£FŒz¬ž Ä{ÐÞ«çñô÷Àê¹@¼}à=°sì+¼Vîñô÷ÀÊ= Þƒ>ðô9ïAwsšÖÍiZ7§iÝ+švãXmlÝÁÞÌ=ð-[pZ#VKŠHÓ®z$e gLà%ÁÜB."b«¶À±}×W%© ŒËË9ãéô—šv½—- éÀnÕ“8"Ƽ8÷€yúÀ{`ö\¸¼}à=0s.ïAx`î¿ÓöÁÖâ= wÚ>¸ÓZ¼äNÛwZ“÷ Dƒ÷€yÌ܃±¦åÞ+÷€xúÀ{`åïAxúœ÷ û9Mëç4­ŸÓ´þEM›sQp­i·_AM›#SFÏ…”—5môL`ž ¾E5íRٞǹ~IÍAM» `8ýÄuÛÁž ®•l<µ£*ælõqé¦Í QV¶÷Àî¹àŒž Ì{`ö\¸¼}à=°xˆ÷ ¼FîÁmMëç4­ŸÓ´þeM‹NkZ‡ói¹÷ÀÊ= Þƒ>ðX¹Ä{ÐÞƒþ¾÷àû¯ß~û×îV9ÿš„ïO>ê Ž"à„)T˜¸:Ê<¢B;¼/ß­——ÞƒX$àÕb”b/ßMªgXR×Ëÿõß'!ðùÇ™¯‡ª¼à`æ=.hݯášùß[äù…Âûñòwg>9'á`æ3®\/ß-âAoq÷]/´6ûAÔ'áh棹竆ë=o†ï¦‡ßÏ.Tf;ªQ—Ò >hôiwp£p³Ý¤Ý±ñûI‚m²aš¤\ðAŸ»U…›Ý.ì†ßO.“ŒkÄÑzÁ4§6S(…›d›6_å÷³جQÄ\ðËŠ]>Oá&ׇM—ñýÌ@6S‘Gj|PäegïS¸YjdWë|? f$t” wÁ9fvš…›™Nv²Ð÷Óþ2 ±‘þ‚\ܶ—˜ÂMG«í«üíëïÿþs `‚Ù&øb€bÃýÍ’¯"î| döÚðBžáryRÿýÎo-_\Òð篢øÕ9@B¥¥NBmuê¼zÁûÐòþ²¥=@ÄeÀðD“¡tfðè1¼Ð9çñÔ}Ä.8˜ºgWb5u˪¨=†ÓÚÿ’šºÝ<=¿ýÇÜ®û1·ë~|¾ëþúñ“O].UŸ¿ŠâW発œ÷žé)žj:èÔ…²† [f/çE¶ÌÖ³—<}jÓþ˜Û´?>ß´bæ7iTp5óû¯ôÌoÿ¼ÔŠá™]j3¿_•£†¿5óßþšÚó~gÏ×-íÃËõ«U^ãõôJ¼K¼ÁJOGë×_¿ýñM^ô³„?ůÎêÌŠA?ýù+ê¯ Ù]pê¯óg}œ„Ssé‚SgVs×¶¹àjÝŸm…Áº—.ø”Äqøç· œ.n §ºn= ¯§W*®ÕðFrÅëîr”p°îOæµî.û1œñ<{.¨uw±yãé¬í³["\wÒãPø[ëþŸŸSòÎáIeJÞÓKÃù•x_9@ó1€áäéÁÇRÔ~yòœJ8Ú­â`þ—pÞöãbÆ6ÄÓ5\-Ü“,\»®Äÿù9%°žÄIŽÈçá§áÜøe½…2^žN®”ìAt`:‰…/8Rç¡€á‰ý(¢©£øoçfysÛpøËÛæ€£owÖ·»Œá‰ÿÊß.cäŸcá„•¿­Ð•Sņs%ìÛ—¥J¸¶·¶šahbmÎ ¿‰ÊDæ,æÝà}nxúí}ðín|{|{Ÿûö>óíßæÖýÛܺûÇ<ã覆Àr8—÷¥aU¹ø¨áJU"â‚™¿nVsÛæÛܶùöOŸ›º>7u}fêþpǶÞÂíøªýéí‚÷Þ_‡ŽHå’¼ ï¤óÒ‹ðË8×fú‘s¢þ} ²ðCI(uqÂÕ¿Søñfú”9àêß/ø3Žºí©ç_Á·„f<ƒ„™} à„¯ afh8a愃ð’´ÀcÐN»ÅaGæâ¯:h§Ý‡êÁW)kÀ×+€ëRoŠœÄ†³<\ÌŠ¸7`85…óöf<qÃóƒDÀ%œóÛ” ^¼_*†ó4ìpÁËÕŽŠÀA?Ï«Œ:‰ gEö­^EÜ,%§Œá,3Å-×ÓY2JŠ®«°èÔÉ’$œåœÄ :u>ÛœOg9'®&]±ò쇠¦îy˜Pmã¿d‡ŽŸGþr¦¨mp7§¬Üœ²rsÊÊeµ¥7x\Ü—HÛA§eÔ'çƒ,îk.O§%'9µü€eÔ|Û8 ¬žÝ²úÀpÆjéI6WVzÝu _M¤UïZ˜½†ÿóE0›Œê¼š0œg2瀕ÕÒ*†óLæjTçÕ¾]·Òqþnžy†›CÊjiKªÎg¾f¨¬êŪDà ]E5”•¯Îf¾Lás5àì˜H—×ù¸(¸TV›ªÊM)«üeUóËÙ©sƒû9eå甕ŸSV*«¸îyØobÀpZçJĕț‡Ã+Ë®+ðf²ÏQÃ¥²ªðfõ1€áŒ„m‰)«­’¹b8#a ¤;cs¸¥ü]eå甕ŸSVݬöþ²ܬžÎf¾4¬¬jB §”ÕRñͪäf^ñî>ÅCžÑÓ™²’­yØÍÊ'áLY…Š{ “r›ΕժªÂƒœRV!×F_>Ì)«0§¬Âœ² PY…ì"¼YíNË^S© f½*3‘ XYùÚ`ˆà..n—ʪX7«ÂoV+«t³ÚY*†3v„âðÍ*‡è5\ó,˜Ï ç• 3Ì8®*ƒ¡¬j\^Ï"1ðíï*«0§¬Âœ² èfµßaøÀpNåí¾Y…ä1œSy{CY9½îàf•=RVÞGÕE?½FÝRV} ¬(ÜPV} ¬(ÜPV} ¬úé5’̱ ))=pÆ<àSx@æFÝ>Θ2fˆ 5F×U‡ÊŽ §šv•˜‹!–jÚ\譒©¦5]O§/ï[p@÷ÂgEá†Ïª|Vnø¬úÀgÕO¯Q·|V}à³¢pÃgÕ>+ 7|V}à³ê§×¨[>«>ðYQ¸á³êŸ…>«>ðYõ9ŸUwsÊÊÍ)+7§¬PV[†^ MÊ>€á¬x?xÿ€Åû‘ÚqNSÔòRV>æ%h¸¨ îwI€â¸¼;¬¬–âRV¾ÉÀ^YqDpZY=ëtÁÔýóŸn™}`R¸aöHá†Øf`w@YqŸUø¬(ÜðYõÏŠÂ ŸUø¬º³”•¯†²òà ŸUø¬(ÜðYõϪÏù¬ºŸSV~NYù9eå±²ò¥¨¬¶ gœ)ãú÷ÕÌHNå} '"eµÞh—eîÉ—Š”Õ>€á¬x!©J¼x? §/–Þ¬¼»È÷ü]eå甕ŸSVݬ˜Øf …f`˜n˜}`v”÷YõÏŠÂ ŸUø¬(ÜðYõϪÏù¬z˜SVaNY…9e ²Ú¨àÍjÀpFk‹CÊjÕUÔÁNáŒÖ¢6H@·žìˆ XYmäIPYV%g• Î7¨¬VmU1œ6ËØèÊ ²Z®®F®Ù6–Ì@é³¢pÃgÕ>+ 7|V}à³êaNY…9eæ”U@7+æ³êŸ…>«>ðYQ¸á³êŸUŸðYí¬ »ºØÿBÊj0”•€#eµÊJÀ‘²Ú euÂQ¯ ââNbÃi¯ê—†ì5]¼…N®º÷D.뒸ʳò.à<+’° 8UVëÓË0ûåâ³pFÕvyÌx3†z5t&p‘gõ`é¸I `8Ëýô äY=Mãé¬-‘/;Ø}p‘gu±mˆ<«}Ã3[žRµƒýY»fÀÙ1±,^;Ø÷©o®R\ 8uᤠ‘pz@çaWb—/ω€W^äƒÝÅZ\û¬_%õY¾Ê îæ”•›SVnNYá<«ìž r*¸`8Y¸uuPc -«-ÃÉÂ¥Ô"̳Jþbˆ%p t©áhà>€á¬6°º„”•K!d gµ)¨¬B UÃßUVnNY¹9e嬤Ð=¯“BÏ{€Ó™¯É˜Z.–TgòÅ Üz¤¸Œº” ŒnÎ[i;Hcîb‹œ—”æ“B]J⸲ÚÕ*–úfµ*ªè\£{ÞÏ)+?§¬üœ²2ò¬Z%i™I `8¶Ð@û“Ó©a8¦¸ÀŽ[0Ñi¸TV!’æ8I `8c­ö+«UÜ=†3ÖjRžÔQÃuêʳúÀpfŒTïpžU ù›×È`÷Í)ËÔ—‹‡© Û†Ó™Ï)ae•ëéìrâ]‚Ê*´ëDžÕvÊÀî6û†göŠoV¡¡——Ê*xáÍÊÇV%\)«ºI&RV)ÆFw]˜SVaNY…9eŒ¤Ðb%…^á{§ç{ô¶\Œna‡”‘gµššM+«göxºTV.‘ö4I `8£# Ø tîjb.à,€3¼Ymqyå6Å*·)ΔU.FRh²ž^¹N*XYàúfu6ò–7«1œ]NŽ^ØRYÅR 8»œôwRY\ݬBøfªggÜÑI)+$N*«u}°²rMoZin ¯É#eUk¡ê¢Ÿ^£n)«>PVn(«>PVn(«>PVfžUrçY%z·1ò¬Ò’*ŒÆv5Œp^n³@6ìZp•guМª<«LH#Ï*û”+r°ç…]Œ<«T’óÈÁžbH.ò¬¬Ú6až7ûÀ „yVÜ ì3Ðȳ¢>«>ðYÁ<+î³êŸ̳â>«>ðY™yV—Ϫ|VFžõYõÏÊȳ¢>«>ðYõ9ŸUwsÊÊÍ)+7§¬pžÕzƒi°IÊ>€á4U)Gš¤ì¹íÁ€Ó›Uˆ*«àrt.¢ÑçQ4pÀpV+äL]ˆ[# ¯,§4U˜š˜Ã æY½ ¬Üœ²rsÊÊYI¡§Ïª|VFžõYõÏÊȳ¢>«>ðYá<+æ³êŸ•‘gE}V}à³2ò¬¨Ïª|V}ÎgÕýœ²òsÊÊÏ)+#Ϫ—R™gµ `8 ¨•£©±TV>džᬣ“s¸ÏH(Ái¸L ­)Aeµ`8Õ´Õ嬕ծ‡ãéTY¥U2 ² ë¦×pº€ò¬”ÏÊ̳º|V}à³²ò¬ˆÏª|VVžñYõÏÊȳ¢>«>ðYyVÔgÕ>+#ÏŠú¬úÀgó¬¸Ïª|VFžõYõϪÏù¬z˜SVaNY…9eŒ¤ÐX±²Ú0œ%…úd$…&&q(Ïê™$qR(‹ÇyV벬¬¶ §—“àHO%Zn³åac8Õ´ë;쥀§ƒr›b•Û 7|V}à³²ò¬ˆÏª|V8ÏŠù¬úÀgeäYQŸUø¬Œ<+ê³êŸ••gE|V}à³2ò¬¨Ïª|VFžõYõϪOø¬ö)»ºØÿBÊj0”•€#eµÊJÀ‘²Ú euÂQžU°ò¬Î»€Ó<+ï3̳*­ãédáJÊçY¹˜\çYEƒÏŠ´£âðÌÕâ³úB³ûœµŸó óY‘ì>öj9Ø+†Ã¢å`¿Š>}èhààÚÁÞªá`o<óìm±žNå½.®B{S§)bHò@Ng>"# ™s¾ÚIs8«÷2¯w]G>«â ŸU£/ïæ”•›SVnNY™yV-yV-b8ϳ*PY¥¶NoVÉà³JþªÖ!pM¾×2VV®e çé÷K„ÑÀZçé÷!Ã<«\€¿«¬Üœ²rsÊÊY© 5© g ¹€33p•kœºàRÁpf+u!°ëëÂqD*Ö…uÙ²r„ª0m“=†Ó™O99¬¬BTO—f`qÐgw^a¶çýœ²òsÊÊÏ)+œg•ÖKD@ÊjÀp tÕceµY#N£%Gx³Šia‡”·’B½•ê†ó†9ã¤PÏäÝÈ³Š±yœšxºÎ³ÊÙȳÊù¬Ô…1œ›$M‹W¨¡oWÊ*Ö„•U¬ Ùۧ,§.ø”1œ¹}hN)oÕQœ†K>«TZFyVû†gö«`(«”#†3eå L]ØœQjêÔÍjÕWÞ£›Uü²8ºpaNY…9e攕‘gU]ÃyV•ßç1ŸU\7G†ì1û‚áôfCÍ0Ï*:fÇyV¾U¬¬<_w#ÏÊ×d$…r#ÔȳrÕᛕs|»VVÉÊŠ¡VžUl +«+!VÀy…š• _þ]eæ”U˜SVŸÕ—Q7«„f^)+Lkü¼a8SVUˆRV%ª™×>«JC7«´5šºàýôuKYõ²¢pCYõ²¢pCYõ²²ù¬ŠÅgU †3eå=æ³JW惀ӛUˆ 䳊îJ×!p•gu45VyVÅ §ò®H“|yá`ϛɂ¢yU6ìÕr°W 7ÌÀ>0M>«Ë ì3Ðæ³jÕp°7nø¬úÀgeñYŸUø¬l>+’<`û¬,>+â³êŸ•ÅgE|V}à³ês>«î攕›SVnNYyV«¾€ÑÀ}Ãiô?.‹ÃyV¾ §ÑG¹ûhêB»ê  \æY­æ;γÚ0œiÚ+žkÚ¼ä€áLÓæ‘²ŠÎg0uï*+7§¬Üœ²rVêB FêB nø¬úÀgeåYŸUø¬¬<+â³êŸ•ÅgE|V}à³²ø¬ˆÏª|V}ÎgÕýœ²òsÊÊÏ)+#Ϫ-ŸU[˜¶1ò¬j]2L](- gä{±@Š˜j À¥²Z¬¤ÐåJ pª¬¶fã0u¡-Õx:K ]¢‘º §ë<«ÓgÕ>+3ÏêòYõÏÊ̳Š$MËöY™yV—Øf •gEÌÀ>0­<«@sJm3Ðâ³">«>ðYyVÔgÕ>+‹ÏŠø¬úÀgÕç|V=Ì)«0§¬Âœ²2ò¬RI˜)4]Ͱœ‘Ñ©¬VÑ€³<+z¯£ÊÊ;ê=°ò¬ÊR ̳Ú0œ¥ß—%Ce•„Z|V!x³ ®¢™×Ê*yCY¡oWÊêòYõÏÊ̳òVR(óYY|Vw•U˜SVaNYY|V—Ϫ|VŸU´ÆÒgeñYŸUø¬ú„Ïê?_F©ý/¤¬öCY 8RVû€¡¬)«}ÀPV'\çY9_*̳rÙ¦€gò›œ€á™g_‚Bæ'_†§/ïŽË‰â³ºúǸæ³Z,>«%`8#w ².,­¢=/ì-ì`¯5)¸öYÅ/>CŸUûÒè·»9eåæ”•›SV8Ϫµ\ažÕ>€ádáZÍ69m)ŸV¤€“…k§'Rj*L]`>+o¥.x’º àŒÖ8ãÔù®ÃyV>$œº°g‹j¸Î³ŠÉȳŠœžï‘j›Â•Çp*2qiHYmu‰,œN õÙH õÃY6mÃâ°K3à,3ìèVóÀU4°yÌgµ `8#w¥ÑÀÚ0œÑœÆ¡²*­¨…ãÊjST5ŸÕª¨Òú?ºiýœ²òsÊÊÏ)+œgµÎ\„© û†Ó öHS—V"†Ó ö\Rì>…¦áüfµWp³z`8«j±Beå} ^Yž:îèZ IÃUêÂÁŽ«R¢7àLYÑN^\Y-ÃY•š1ELÈ <tdn†²r Ã9O©8uaµ#†3rž#»O)+\æYÕãJ,ó¬¶ gœÌ9ã›U‹gí&3e•¼š:¥¬jyÖM0eå–}áØæ”U˜SVaNYá<«‡7«}Ãiô?Ü7°8—†Óè‰ ·—ýNàòfµ=VäÍj‰!a8UV‹æYµÌt‘gUSÃyV«SÌÀh™œ™¡e¬¬B5àÌ ÙèÈ ±0§¬Âœ² sÊ*Ì)«0§¬Âœ² HYmU¯-#eU»YõÓkÔ-eÕÊŠÂ eÕÊŠÂ eÕÊÊ̳*„*‰ §ÊªRÚª¬Vy^ÙCŒæR€«<«*γº:÷ 8µa}Í0u¡q·‘gUSÀ1u¹zm8 ˆA¬ ÒgeòYA»òY™|V—Ù>+›ÏÊÁBfá³²ø¬ˆÏª|VŸñYõÏÊæ³Z,>«%`¸á³êŸ••gE|V}à³ês>«î攕›SVnNYá<«ìCp(¸`8­ te©HY­Zž© œg•rñ"&…ÌçY•Ôp+®}é¦MÞAò½õ¦MP˜gµçŽ: Ì$a†ÀužULFžULnø¬úÀgeåYŸUø¬l>+Ÿ¤PŸ1ÜðYõÏÊʳ">«>ðY™yVÍc>+î³²ò¬ˆÏª|VVžñYõϪÏù¬ºŸSV~NYù9e…ó¬Òz@g¤¬ö gì­Á›U¬±pÆÁÞ’ÁÙ¶ÁyV9§•Õ>€áTÓ¦àÍ*‡F­ #Ï*¯ÿƒÊ*_\¥.\>«>ðYYyV‘vò²}VVžñYõÏ çY13°Ì@+ÏŠ˜}`ZyVÄ ì3Ðʳ"f`˜Vž1ûÀ ´ò¬ˆØf`ŸóYõ0§¬Âœ² sÊ çYEŸ¨¬ö çìÞ¬Öƒ{ñÎ8ØKÁL¡9³Ë γʮ-XY9–ù`äYeç+옿œ`>«”C€}Sðèå-30b¸á³êŸ̳â>«>ðYÙ|VÎ[ÊÊc8SVK­PYm‹á¼}|óØ>>£…S7«ê1ŸÕ6€áLY¹’BŸzÈa8SV±áŽÌ«‘¢$î=ŸÕº¦™Nû_HY톲p¤¬öCY 8RVû€¡¬N8à³òÕÃ<«mÃShs9Ø}YНOà"¸±ZÂhà>€ál×Ò§ðmã1œí:‡X>Æ4ü]eåæ”•›SVŸÕªÜ±.lÎ’ÀSÂÊ*´i¥²Jn|VK¬hÝUžÕÑ’IåYy´ë”² G½Ãù¶ñ˜|σu×ì~Ù¯…\Y­zj7+?§¬üœ²òsÊ çY¹t5Œ”Pó€€3J¨p“S—œñtF  ä³r!U§áRY¹–TVÛ†3yo!@eåjIÎä½”3Ø·j^ WyVÎEœgå\Äp®¬|ÃÊjiœ+«PpêÂÒÀËÿ!)¡nVÎn-ÃV\3QÂpHÙPVML]ðµâúÀðÌ ’€á‚˜¦.¬'gÊΉ‰"Œ.)ÐëguOY¹9eåæ”•ÁgE|V}à³2ò¬¨Ïª|VFžõYõÏÊ̳º|V}à³²ò¬ˆÏª|VVžñYõϪÏù¬ºŸSV~NYù9e…ó¬–šqßÀ}ÃyÎ ¡úd9'!Oç9'ÎCeU.žR—Ê*•€•Ubþy#Ïj;‡ VViIΉ‰Ì`_b£±H3ÏêòYõÏÊʳ">«>ðYYyVÄgÕ>+˜gÅ}V}à³2ò¬¨Ïª|VFžõYõÏÊʳ">«>ðYYyVÄgÕ>++ÏŠø¬úÀgÕç|V=Ì)«0§¬Âœ²ÂyV[rVV…Û2¸oàú+i—\‡áì>qßÀõ¢Ïîu8ÏjcÅÊjÀp&2%b30æÅx:™VVÎ ×Êj©†²Z*†>«>ðYY|VÄgÕ>+‹ÏŠø¬úÀgeäYQŸUø¬Œ<+ê³êŸ•™guù¬úÀgeåYŸUø¬¬<+â³êŸUŸðYýøï_Gç¾í/H¾· Xä{É÷¶‹|Ã!ùÞ6`‘ïpØ70>Œ¾ÃYßÀ”ó².,Ù€³¾•4c}‹pÝŠk©8Ïê’wgE^¹ÁÔ…UܳgE^ÕW˜gÕÙæ­¸¢‘º€¾]5Œ%C»‹¯èv¡FÀ…Ó…ÌÑá<+wqór8‹Ë´Ôƒ†uœÅetÕ0â*ö!pgF<0œ]È­V\±5Î4m :Øc, Ž8Øcy`ö³¨sƒ»9eåæ”•›SV8Ïjµ„L]Ø0œ¶âÊ.&¤¬RŒzꔲJ./0k)àé:)´ZI¡Õa8³a‡“B éÐÊá̆=ò.¤²Ê-¸înãh ÷Ù²ò©`eåÎZÀ™²ZO œgÕ2˜:‘ºà\CÝm>0œ¹:+É=`®Î´d g®Î¶|Váj/{ÁU40F£»Í:€áìZxJYy´ç•²Z+³oàå³êŸ•Ù7ðòYõÏ æYq3°Ì@‹ÏŠ˜}`Z|VÄ ì3Ð̳º|V}à³²ò¬ˆÏª|VVžñYõϪÏù¬ºŸSV~NYù9eeô ̹@Š˜}é¼ç¸À öU 15ú®Æ^‚ÊÊ·è4\*«%5•Õ6€áŒÖ8TØ7е’ †3Zã`žÕVž]5\++gõ tà 3°Ì@3Ϫ‘®…¶häYÝVV~NYù9eå-e岡¬ÐÌ+euù¬úÀgeåYŸUø¬úœÏª‡9eæ”U˜SVVß@_ðÍjÀpÖ æ¨©¾žÐ8ÏjÕI 79u…]pž•k)›Õ>€áŒ2‚Z‘…©¡ì1œSF]Ç(#*SVaNY…9eæ”U˜SVaNY…9eæ”U˜SVaNY½ï³úþë·ßþµ»éÎ?¤²9Lå¨ý¿à(Yˆt9N Ôýî³IŽüºÞ—ïÖËKgÖѲá‚#¯É-¼|79Ü®VÚÖËÿõßg‡Žó3_›Õ3ï]x½‚†ëÞy$Í¿ªPx?^þîÌ'ç$ÌüÚ¤~AÃ5‰:1F¬—ÿñïçŒÜ™ùà$Í|4÷|Õp½ç[5öüQ¥õýlFlv%F{¾ 3_|±ö|Õp½ç ùžõòGW³= î*áƒV›¨¥†›ý"Q/FïCžRÜ BÂ=P? 7 Rþ~ðT˜„˜PÂä{ˆ+JÃM9ÄÎFà}X¹€‹Ã%|P…Š5Ü,%Feº§È|D®Í6ΖðA:.JuÕp3§åkxÚ28\$ჸ Šyh¸\@Žû'ü·¯¿ÿûO’‰½³NpiØÏ Ïô7KÖ<'¿lMÎ^™^É3\.O ÷ßù­å‹KþüU¿:H·ã´´bÀIëãê‚W¡C/x_"ZÞ_¶ÄN Ü0<Óß$Òÿ½0xô^éžì¸`ê–£ÖS·¸Š¦nYµÇpʹUr@S·{³Îoÿ1·ë~ÌíºŸïº¿~üäS—K•ð篒øÕ9@¦.gç=†zЧšÎ:u!¤¬áÂñ²Ój ÇËŠ§OŸÚ´?æ6íÏ7­˜ùM\Íüþ+=óÛ?/µbxa׃ÁÌïWå¨áoÍü·¿¦ö<‡ßÙóu9ý6^¯_­òu¦Ó6à]Rð¯¿~û㛼Ïçs ‰ §.¯Ò5@]^!;Î\^ÏŽNÏæòr ÀÕ—ð•.ø”Èpøç"³ „bÀ©²ZÏ2HÝä­: çrÄ çrÄpêtÊ>d´pîjÁ&ጨùˆn½³,þÖÂýçç”Äqx‡‰Î-ü8?4œ_J· €1òcÃÉÓƒ$þòld!áhÝ[1Öý(l”pºî«œôº?vQÃÕÂÅÅP•íº”þçç”Äqxg8¤~!(œ_ÈYï@!D©ç†“…+%{ÎÛ†üR$iÚSFkÚP1œ5¿+ÕX¸X²†¿µpÇNsÏsøË{þ€«©Û­P4uû†gö£ˆ¦ŽšÀ¿›åÍmÃá/o›޾ÝYßî2†gþ+o|{¸Ìþ$-p¹ÀâÞ¸¿\}F$œ ìt.ñþïK•pmñl„&ÐÈÙ0œ·d"f ™“idƒ÷:H~±z¬ˆo§pãÛûàÛûÜ·÷™oÿ6·îßæÖýÛ?æG7m2–ù¼/ «ÊÅG WªÑ"}Ìüu1›Û6ßæ¶Í·úÜÔõ¹©ë3S÷‡û“°™Š©sà«ö§· Þ ±ÄËð蜂wá}®è;ðË<Ö†ò‘8¡þ}‹sðCI(uqÂÕ¿Søñfú”9àêß/ø3’¹í©ç_ Á·Œ³>¼€¬} â¬o:ë0NœaÜ .J>~…JJLG UÂ)ã„÷qçšO¿oàé ÅýEÚņ³’ V/Ê–Q‘SÆp–^á÷Àœ,ÜùŽÇ­RûdÎ[°£2ÑUêc*°þKvHƒ?ò—3¯rƒ»9ywsòî^‘÷-ú~qužpMÚàü‘¼§½ÃiµNs)#y_—M¿¼fjoT`³ÀpF~ì ç—w½pº‚°&Êpàéº6°&,ï. çì Ë»k'¿ ˾-†ô@ìê-†„álêa˜a´;K2žÎ§®š½´\˻ǕÈþâúp6u¹V(ï>Eõt)ï›´ç¦ä=¯l¾¸û6¸Ÿ“w?'ïþ5yþj’rÂ5ïÁö+$ïÑ•˜1œÊûæEòj(AÃ¥¼Wx¾ `8ã]bDò¾ñ&T g|¢¡Å;òîçäÝÏÉ»Gçûöñµ‚óý9€álêJÃò^šy%ﻎêð’\5M8Ü>LÞ9¹€³óÝ'L“âCmÎå}•ö°,¤…:‘÷k£/æä=ÌÉ{xMÞC¾úŒœpM°ý Éû–R0œ´ÆÜà}>ø35‘Â¥¼ë|/ü|XÞKXÐùþäúÄpFgR8ß?2¡5œß矿Âò¾Ä†áâU×þW°pïÊ{˜“÷ðм?}þC¾ã‘©{ezÎûXòyp¾gäÝ»à¨ÄõÓ‚î–¼÷¼S¸!ï} ïnÈ»¬¾§x? ðÎoV1B.î¸N|ÀpV}opqÇU˜ÀÓu‘} Êï `8ÕIëž½¸¸ƒI¡w gt&5…‡Q>žþœºË~ïû û½ì÷~ZÐݲßûÀ~§pÃ~ïû û½ì÷~àݲßûÀ~§pÃ~ïû½ÏÙïÝÍÉ»›“w÷мoɸ™žqÝyÿø,³ªgºŽ„³ö˜#,³ÊK.ª©‚[<÷ §ò¾¼ûv¦çIxcéʧýÞ÷ùóû|Üç)ܸÏ÷Á}¾; ïÜ~ïû û½ìw 7ì÷>°ß»³äÝãB'n¿S¸a¿÷ýÞçì÷îçäÝÏÉ»QÞ}Ñ/¯å}û”wŸrÃp*XëÝ×€o~ —¥ÞÉ—Šä}ÀpV§¾è?/MÏÃé; È»Ÿ“w?'ïïì>ß÷y 7îó}pŸ§pã>ßö{÷@Þ¹ýÞö;…ö{Øï}Î~ïaNÞܼ‡×ä}+³­®m¿BòîZ,ÃmB­¸ka¹…¸â¡¡ #²Àp–÷z´§‘ò¾ ¼ñtJÕöÑ8ÕASû½tŸgö{ØïnØï}`¿÷0'ïaNÞÃ+ò®ì÷ÐùÎì÷>°ß)ܰßûÀ~ïöû^ϺKÜþ’÷}ÀwGò¾ò.à÷âï—Ç섃ø{m°¥r­þ´eœÌ|M´¡3™ùê.tWñwû“QJÀ©¼¯)@âé7Ze g¼St%™àé"þþ0ò¬¶mwÞ¬œRøçŸ—Zðt¿*‘Eü}ÀðÂæ·Tí¯{fÿp¦*—Åè¹àÐË«xÜú+ä¯sÅù‚áô”Éyñ¸-^=]ÛŽÚï„¿nƒ»9ywsòî^‘÷/[ÌÒ$\ùç÷_!y_gô$]pº;R[<’÷”ZÌ.üó.5ìŸß0œ•GT—¼»tõÆpV‘B¹#ïnNÞÝœ¼;+ߦ#ߦ gD2éCÓÊ|›rñ 8»¾-g¯LÁ œxºôÏo¿‚òž¢‹Î ^bò]V{žËû&ëë–×çû*ëѹFwŸ“w?'ïþ5y­j¸Ž¿o¿‚ñ÷ئEñ÷'µ¤òŽ).IÃ¥¼‡Hºœd1€áŒŠÕW,ï«(y gT¬ÞŒÇUðò:gÅß«w^¹Tc.nŸZÐpE¹‹‡ñ¸mÃéÔå”°¼ç%9 g©w Åß7 ž.âïû¯ ¼ÇP †Ów -9(ïá,)½àJÞë¶ë‘¼§xQyoð0'ïaNÞËòî¯˜Ô ù6åÛì#!b8ǹ%œoÓ˜ÀâøûFšå¡¼oÎ8·¾Ï;wÖAK8 *Å\¬|Ú¢á ŸÖˆ¿gv@ñwŸÎNÜBÞcO×ç{ŠÆùž"†³ƒÔÇ å=–jÀÙAJ j˜ ®Î÷P!y¾ ­»’w;}¸uNÕÓå}~#MLÉ{­…J\?-ènÉ{È;…òÞòNá÷âï'ŸÕñ÷äò×¥­‘†³|ÚJÇœðt?Ø´Tü=Ócˆ¿gŸrEþº¼°3Έ¿§’œGñwqŸ7âï£ØGÞçaüßçûà>oÄß©ýÞö;Œ¿sû½ìwçö{Øïfüý²ßûÀ~‡ñwn¿÷ýÞçì÷îæäÝÍÉ»{EÞ÷œ“æ%\ùç÷_!yßšîD gl()À|›"õ×ñ÷莎Â?¿`8Ëùõ ÆãâÆ$Žá¥ë¤zGÞÝœ¼»9ywV¾Íi¿÷ýnÄß©ýÞö»§ö{Øï8þÎì÷>°ßø;µßûÀ~ïsö{÷sòîçäÝ¿&ï¾°»ß~ãï%¸Šáì4ȱÁø{rìvãå}ÀpÖ.Ìå¬å}åÅx:•÷´ToÄãjÒp³âïÌ~7ãï—ýÞö»'ö{ØïFüÚï}`¿ñwj¿÷ýnÄß©ýÞö;Œ¿sû½ì÷>g¿÷0'ïaNÞËòîcU/òmbÅòî}jÎòmÊ·y†Ä²†Ky÷>`yß0œ¤Á‘– 4ŸvK2Ãpª“Z@ùuÊ~Çñwf¿÷ýnÅ߉ýÞö;Ž¿3û½ìw#þNí÷>°ßø;µßûÀ~·âïÄ~ïû݈¿Sû½ì÷>a¿ï¬Æ»Äí!yß yp$ïû€!ï~3þ~õÊ<à(þpüÝûój$à´þ½•ãï%ež®ãïѨ¿Ò6œ·VH ÖËl ÎúÀæð×U þ:£W&iàÎá0)Tûç#xºö×µjøëšgéTyñÐ_×–Å€SÁª i­Ë§m]›¬—ÉpÓÊz™œ}„õ2Ùõtd¿gØïÂÝœ¼»9yw¯ÈûY¿z.poш¿—†á•…ßCÔòþ Àg ×|-cywœç.úçkuœç†|GÞÝœ¼»9ywV<®#w– 8»Ï¯2ƒãqî¼]8»Ï{ŠœÓpU·þ Ë»Cß.å}Ý[¸>.夞.ïóÅAû=îlXl×ù9y÷sòî_“÷´žqAÂ5ßÅö+$ïÉ‘žÈNå}»•Âø{ÉÑi¸Î·ñV¾OÎéHsÆù6¾V g—ÒH"bÜ~ÏYÃuü4³æ÷ù0œßçS4âqL’÷X–÷X†3C¹,Çã|ÊÎ åÃÝ'ëßSi.ëß·_AyO%T gòž2>ß“/QÂÕù¾Š¼÷è|_Nõæä=ÌÉ{xMÞcå÷:#þ^]Ã|¥¸Œáôâ³/ð|¡¸”wß*–wߨ¦5âï¾&#ß&fãéŒÏªºlÈ;3Ìú÷䱼ǖ0œÉû‘k¤äÝ· áïÊ{˜“÷ðм?eL:ßSòXÞ¯zXçt&)`y¿Ê*O¸¶ßK( ïicÙ¾àý´ »%ï} ïnÈ{È;…߬/EÂQý{Áõï« N_‰†óèùâž®âïGO%/Þ€SŽ=× ¬‡ÍíŠE 8åØÛ®®–¿®j8ð×}Ù}Þ¬ÏÕ¨g÷y»þ½UÃ_× ¸a¿÷ýnÕ¿û½ìw»þý´ßûÀ~7âïÔ~ïû½ÏÙïÝÍÉ»›“w÷мol!F ×ñ÷íW0þ—Åa8 |yRNKc]ÎSkŠ¿¯†Ž¿oÎtÒ•žÇÕP^²ñt¦“rŽwäÝÍÉ»›“wgÅãj0âq5`¸a¿÷ýnÅ߉ýÞö»'ö{ØïVý;±ßûÀ~ïsö{÷sòîçäÝ¿&ï¾]Åû'\Çã¶_Áx\­KÆpÆwÑB€ñ÷KÕp)ï‹•o³\ù6NåýìZ(ãqma{Þˆ¿—Õœ1âï|»Ž¿“ƾ¶ýnÆß/û½ìw3þkÂòÎîóVüÜçûà>oÅßÉ}¾ìw«þØï}`¿ñwj¿÷ýÞçì÷æä=ÌÉ{xQÞSIêåAñ’@ýûs(a8#–(¾âø;¿]ñ÷²”ãïÛ†³À²d(ï)5ãéôC(Ñwj„ÚõïÉcygö»¿ì÷>°ß­ú÷»òæä=¼"ïÊ~7ëßSòXÞ™ýãïÜ~ïû½OØï{oÛ]âö¿¼ï†¼ 8’÷}Àw¿¿û^pwà ÷×9ŸÓ™†-à•üê¼”rÿ¼sÙ7ðt»hë:{eJ8ã³r͈¿7o<ÞAJIɪ‡Oõ° ×Ã^ò.à|ÓF£6&×õïÖËì^xÆ ¨—y–&púŽë¶‰8þ~öD¦p]ÿ¾àú÷«˜„3έjðQ·‹ù„kû=~ñÚïíK£ßîæäÝÍÉ»{EÞ¿,­åª^^ùç÷_!ÿ|«¹ '3ßRn°>®‘ 9 ÿ¼·âqžÄãœñYeóñâxpÆg•`<î)r®ãï×ÃF.°Vý{ ¸>.. Àu¾ÏF¾ÏÎB±DèŸ÷K3à,´sÆþùæÁ¶QþùæaýûÒ\1à\UÖ彯 ^žËû&ë5û}•õ´þn?'ï~NÞýkò¾~zT/¯ä}ÿ̯ i‰NùmVë?Âüº\RÑp~¾ïŒTœïÏ g9¿-V(ïþò 8ë㺠þùgƒ²¤á*½!ï–€sy7úˬ'/€ƒþ2Í÷³YÀY)q©8ç®:)g¥ÄÕ7¯%©“ñ÷zܬ¤¼×Œ¾]žï5. Ê{i®ä½–g^%“w·l3Ÿ™¦ sòæä=¼&ï%:¶p8þ¾ÿ É{ #´€Ó|Zçp¾M.1¸<ß—ðù¾\$«Nå}9feü½e¦.Œø{M-[÷y0uà>ñ}>è…ò~ä«û|ÈàéïÊ{˜“÷0'ïaNÞܼ$ï[mFËHÞkbç{?-ènÉ{È;…òÞòNá÷âï¥6 ñ÷RòϯÛá,pp*ï[Ãmà¯ÛUAÕpo¡âø{ œÚ¾fk›mŒá”c/»6i8¨‡M¸–Ùï¸þÙï}`¿ÛõïÖËûݪ'ö{ØïVý;±ßûÀ~·ëß\ÿÎíw+þNì÷>°ßûœýÞÝœ¼»9yw¯ÈûF‚“påŸß…ä=»«E‹€³üù*ŠÇ¥\€áT'%ï ßÅza Ãé¦ÍÍYñwj¿Ûñ÷ˆëa¹ýnÖ¿_ö{Øïvý»ÏF¾ÏnØï}`¿[ñwb¿÷ýnÆß/û½ìwçö{Øï}Î~ï~NÞýœ¼û×ä}5¿5\Éûþ+˜_×ZsN[j,˜ßf;òžsjPÞ÷ §:)µÏ÷ZˆNmŽõF<ŽÙïfüý²ßûÀ~‡ñwn¿÷ýŽãïì>ß÷y+þNîó}pŸ·âïä>ß÷y+þNîó}pŸ·âïä>ß÷ù>g¿÷0'ïaNÞÃkò}^\Éûþ+ß;IV gD2?-Ïe©¥8 —òîÚ‚å}ÀpvñòϧƒÇpv ![÷ù¨áà>ñ}>´Œá†ýÞö»]ÿî¼%ïÙ¼/µByßnMÎûI5Ï÷êÁË«ó½úˆåÝ¥Šá¼=`sXÞcSð÷ì÷uQ>"àû_HÞ÷CÞÉû>`È»€ß«÷gJê õï¾zä¯óë”V gùuK|Ô[¨ <]Åßâp Ɔ³ncG¶ð×m„RÃYbKõΈÇ9ðò:çp½Œsµb8ë7áŽÇ¹¥§ÿ¡ ÍxÜ’3†³ÄÕ`ý · g»#z[Þ‹1x g»Ã¹|GÞÝœ¼»9y7êß×뉃õqÛ†³D¶”°¼§«°QÀY"›[Œú÷‹Ö˜Àuر¼W0œ/o4äÝEÜ'\ç×ùe¿]py_E}统“w?'ïþEyO…mw¤ÀMÔ–g¶pÞ÷ä ¿‹¡8 —òîZ PÞ· g‚udïKywµ$ g‚UJÁñwçÀ·«ø»sÑw¶ëŒúwýçòІÿ! ÍÎ÷ g>†–!õV!0œùS†üó[S=0uªÿ»«†¼»ì1\´Þƒý&ö]Žä=9$﫞fòæä=ÌÉ{xQÞC ®å=ІPŒI,.Ù7·µå$̸’÷\"–÷ÌîuFÿw—SÁòžÙíÂèÿ¾°Á÷¼¼–÷óÛ¸«&TÀ«k(ïK«AÃÕù3î7± `8“÷„óë–xe>xã.ÉhœïhêôùNBñÖ{©a8o½gÉ{mjꀼ;[å}‹ê—ï§Ý-yïy§pCÞû@Þ)ü^üÝÑ{wÆã\ºBZΈd"æŸwñªL$p?Î8_ZÄpÞÔ×Ël^DΛ'+Gïóvý»Ãõ2ü>oÕ¿“û|ÜçÍú÷Ë~ïûݨ§ö{ØïFý;µßûÀ~·ëß=®ãö»'ö{Øï}Î~ïnNÞÝœ¼»Wä}oѶ Ž¿ï¿‚òîbÉ΢7ÎÃøûúóØ4\øç—ì—ˆüóû†‹ji[‰”1œWKÇ|GÞÝœ¼»9y7ê߉ýÞö»ÕÿØï}`¿[ý߉ýÞö»¿ì÷>°ßÍþï—ýÞö{Ÿ³ß»Ÿ“w?'ïþ5y_jfG$Ž¿ï¿Bò¾Ð+±_jˆð|ß"&^Ã¥¼§°¼oÎ6m&å´¼@zIΫ¥QÿÎìw3þî\4äí:£þØï}`¿Ãø;·ßûÀ~·ú¿û½ìw«ÿ;±ßûÀ~7û¿»jÈ;³ß­ø;±ßûÀ~ïsö{sòæä=¼(ïea3ãïû¯ ¼—Å g·¿ºÀþïKŽ1k¸”÷X–÷mÃÙ¦-ßçc^<†³M{tŸ×ò¾T ×ò¾`~n¿›ýß/û½ìw³ÿ{̸ß·ß­þïÄ~ïûÝêÿNì÷>°ßíþï¤!”m¿[ý߉ýÞö{Ÿ°ßü÷¯ƒ~û ò]l߇C¾‹mÀâ»àð»üóQÂ!ÿ<¬—©[ÃY}Ü’q}\ª <]óQ/Çß/‰p–mŒÇ­¢” 8˶®„PZ¡àå5öÏûP2†WL4øi¯#’Àu½LtF½ÌÅ ÌáÌÛRƒõ2ÄÍ+àÌ{´-Ðñ÷‹ïâ‚ëø»ÅWIø¬8œé¤Ö0u,A=ý½þqÜÍÉ»›“w÷мïìÎK¸æ£Î£”ä£^mã„á4‘-®Ç’÷ä2X‹~©V¾MuÎlŽÅá|›RJÆpfs„bõƒöàå5?­Å?ï/ 8¯\¬ ~Ú¥€™ñ8çâ§ýÀpæž©9áú¸´d gî™¶õï1‚]§üó1by-œ’w1?m¼zežpÀg¿ÍSÜÝu~NÞýœ¼û×ä=æ²D ×|ÔÛ¯¼¯—ÂP0œæÓÆ`ü=ú«?,Ëú÷Õjý ?0œ%®æù¨—\Îà‚€3›#ÔjȻˮåÝüó.T çFh1âï-ƒ§¿+ï~NÞýËòަNË»ÃùuѹŠá•å+7Ì?JUOGòÞ¢!ï æä=ÌÉ{xQÞׯ÷®å}û’÷в§Dq5’vT4>Gß4\É{Ž˜ïbÀpæŸÎwï†3]m厼‡9ysònñÏ‘Å?ï|Åp&ï.(ïKE §äÝg#¿îJþ'p%ï!ã|›Îä=ZòœÚ´Ú~Oøç×Tˆ~…÷Ó‚î–¼÷¼S¸!ï} ï~“>«—Güó¹Âú¸¨¼[üó±áxÜz¾Wðt±áø{ˆ ÃgvJ¸_$!çpÆ™]R3âqÀ5öÏsûÝ䟋ÁOËìw›>:£^†Úïÿ<±ßûÀ~·øç‰ýÞö»·ø*™ýnÅ߉ýÞö{Ÿ³ß»›“w7'ïîyß(›ygðQ·ãï¾e NëejIÉ»/„æô‚ ÿüºåq¸Ï[õïä>ß÷y«þÜçûÀ~7ãï—ýÞö»'ö{Øï}Î~ï~NÞýœ¼ûå=ç¢àZÞ·_AyÏqi^YÜ‚û¿GÏ6-Ž¿oÑå}ÀpÆg*äŸw­ä‚áŒÏª‹Þ©Óòî þyvŸ7ùç—bÄßÙ}Þˆ¿ß–w?'ïþeyGS§åÝáü:n¿[ñwb¿÷ýÞçì÷æä=ÌÉ{xQÞ“/^Âÿ¼/ø|O‹kΈ`}†ñw¿^ª† yw-Ex¾ïÎjø¨9ÀúÖì1œ×ðÕtGÞܼ‡9ysòæä=ÌÉ{˜“÷0'ïïÛïßýöÛ¿vÏÄù‡”w/G‘×G1hov!pÀ[hEBĉÞ—ïÖËKó? Gx – 46Xfàõòý÷Izþqcæëq=¸à¨û¼Cõ2ÏÇk¸f€÷ϼ+Þ—¿;óÉ9 3Ÿ Öàå»Eç=žyòòGkT³G*ÌúpŽf>š{¾j¸Þóí³îóßϾ0fƒ˜QËÅ >hzh·!£p³ñŸÝzïûIŠk²ãŽúM\ðAǻ煛]ì¾ßOF “hD¶yÁt—6á$…›”6éâ÷³Ò¬‹1\ðׇ]}Oá&ß…Í8ñýÌ5“BGeV|Pèd—P¸Yìc—Û|?afDl”cvÁY^vž…›™Nv®Ñ÷Ó 0Í‘ƒý‚\ܶ“™ÂM7¯íhýíëïÿþsI`‚Ù&øâ£Îbà ýÍ’¯p^½²?ûMHx#Ïp¹<‰ç·–/.iøóWYüê ½uÒÒŠ'½u¶ÿk  zÁûùòìÙrš d²`x¡¿I„¸2xôÞèžtX`êÎjLݳ?¬šºeUÔÃ)mBÉMÝî’9¿ýÇÜ®û1·ë~|¾ëþúñ“O].UŸ¿ÊâW発œ÷^é)žê5À»£¥¬áÂw±#ßÅÖú•<}jÓþ˜Û´?>ß´bæ7iTp5óû¯ôÌoÿ¼ÔŠá•]j3¿_•£†¿5óßþšÚó~gÏ×åôœHx»~µÊk|º¸¿ýñMÞÔ³„?•ůÎê5Š!E §^£Ýg^£³¸ÂÕÌ?›Û‚™/!]ð©=ÏáŸïùmàŒMH8Õ6[;<ó.G 3ïrD3ï²ÃYýû“^ͼ‹Íƒ§¿5óÿù9µç9¼u®öü¡Á5œ_ 7•9Ïdž“§ HúåIÒ*áhy[1Vô p—pÞ/²€}:↫…{’ë‚…k×µð??§D†Ã‹8 À1ñ áê¤p~%þe½…„²>žN®”ìATh:y‰/8Òˆz^+ÁP1œ5(ÕX¸X²†¿µpÇNsÏsøË{þ€«©Ûí@4uû†³¸Oy9uÔýíÜ,onyÛpôíÎúv—1¼ð_yãÛÃu!ÿçOìÝù…õÖÉbùÀ.—§”}û²T ×6ÇV/ ÍŒmÃ9_xÁfÆU½Áû‚¢7ìÛûàÛ;ìF¾½¾½Ï}{ŸùöosëþmnÝ¿ýcžqtÓfC`9œËûÒ°ª\|Ôp¥*mÂÇÌ_W£¹mómnÛ|û§ÏM]Ÿ›º>3u¸cÛÙö|ÕþôvÁûr…_†Î8å–» ïäü2Pµ©zDÿÕ¿o‘Æ~( ¥.N¸úw ?ÞLŸ2\ýûÆ·=õü+#ø6Ppê‚€Wº°4œºpÂA-pIA×°@ª„Ó&61EØ·xæ¸.ùõúÒs `8c äjÔÄÉ­á ˜7 L©Îf &ßóWý;ƒwW1oÎrü[½ŠyYZ@N`Ýu5nÝëXXÂyö~ÝëžéûêéO•F÷¼ÿ’R‚üåÌpÛànNdÜœÈ8 2[¤Øãòº}Ãi9íYÀ.ËëšKàé’Õ²Ñ=_Ć3–;Oªq¹Èè™"óLˆMF½LMÎóisÀ"³´ªá’†¶­6%e‹!a8ûö@Êç)À’ÀÓ|5DÆpöí¥àvŸ«‚K‘Ù&7%2yµ£òr¶ŸÛà~NdüœÈx(2q]wÈ¿`8­Xq%âŠÔ™HÃ¥ÈTxÊ| `8ã³ZbD"³U´‚—WdüœÈxtÊlo_+8ežξýèr"E¦&4uŠ“ù°ßGk¶àUDªñ)ã“—p.2«À„í‰Lȵѧ‡9‘ s" È„ì"€á¬´0xØzϯ¶¨á¢Â ¸cÓÊ"aÇ7­Ã"³Èøv&ÌPø?ÿéÖŬ.fn\ÌúàbÖnËô-Cá†-Ó¶Lw–ÈøjˆŒ7à†-Ó¶LŸ³eºŸ?'2‹Œ/­@‘Ù0œ•½¦Œ«ó\e»ÎC‘Ùj…*™}ÃYmàBj¼60ƒ—WdüœÈxtʰ‹Y\Ì(ܸ˜õÁŬ{ 2Ü–é[†Â [¦l™>gËô0'2aNd™­˜ ž2û†³ÊÑX`Û*1Ôüï‹L8(^¥ÈlÎ¥œoPdV™/¯+Ô–ò€Z™-Cá†-Ó¶Ls"æD& S†Ù2}`ËP¸aËô-Ó'l™½Òhßóû_HdöCd‰Ì>`ˆÌ G­„ªÀ2+ §­Õ/ ™ÿ5]T!®â2Þ—ñ'iƒ€S‘qëÆy¶&¿‘Ëi¸ˆËà\9™] ØÉ|ÖˆI8U•ÅyØÕÈåë>µ-ÃXV¨-CXV6¸›7'28.“Ý“2ByÌö 'S·Î¢5Þ;y/^Ã…ÇÌ¥†=fû†³¤Ðê—Bßþ®È¸9‘qV(³#”yRÎ*ÅÓ‡¶‘¡ÌrÑã¸ô˜¹” ô˜mÎÛQ9HDæb‹ ÎEf—uoéSf—è\£ëîçDÆÏ‰Œ—iµÁÎ}û†SY DÿŸEMåȬ&lƒ"³ `8c½ò‹Ìºg½†k'3ŠË| `8»œÐFÞìrR˜:Å𗋇NæmÃé·ç”°Èä%9 qS€Ü¼û†Ó§ÇPñ)š~º™ºm/$2)Æ“@~ƒ‡9‘ s"ŒPf±B™—ŸVÀ©¦>@òü覬p\fc†ðPd¶ gÄ_Ìœ;k…($Ì+a¦`8™\ŒPæÕ†ŒÀõ)CÚI1€áLÏ ¡¤ÈÄR\2µ—ýÀp¦¬Vd%2¾ª]'/f;NòHdêj¡x?‘n‰Lˆ …"Ó"cÆe’s8.s².H8K˜IzÌb;#)\ÅeÒ—ÉT×q™ìS®ÈüÏ SÔF\æÁRR틌Ëð‹Y\ÌŒ¸ µeúÀ–qnËô-cÆe.[¦l#.Cm™>°eúœ-Óݜȸ9‘Áq™ n¹¸`8Œäèåãž\xÌ¢;FÙ>€á,]Ç7èdާ †¿+2nNdœʰeŒ¸ µeúÀ–ÁqfËô-cÄe¨-Ó¶LŸ³eºŸ?'2F\¦$ܵpÀpê³*ÁU(2>Ǧá2”YS‚"³`8ã`w9k‘Ùó§áÚÉŒâ2Ê–1ã2—-Ó¶Œ—!¶LØ2F\†Ú2}`ËqjËô-ã2Ü–é[¦ÏÙ2=̉L˜™`„2#nü·`8 eúd„2Ûu8.¼Xd¶ §z>8ÂSJf¶º†ƒ„™b%Ì 7l™>°ep\†Ù2}`ËqjËô-cÅeˆ-Ó¶Œ—¡¶LØ2}–ÙyÈö=¿ÿ…Df0DFÀ‘Èì†ÈœpØ;ϊˇá4.ã}†q™ÒH7« ®ã2Ѩ—¹jΙBS‚i™$ FàÀü¯–ù_1&(óÿJ!pmþ·j˜ÿÍ€³ r^<4ÿÛ²¸NþÿX8ü6úpÞ#•ôÎcýŠòÕ¶à€#[¦8ÖiôénNdܜȘq™¸L‹Îã2ŠLj„þ‚ë³–3ôòÒcÖâ¡Ç¬Và›g9™k0œÌgJª€³‹YÎXd²»Èó/¸ÊdÎÞáLæì†3‘q±B‘I-{ —³â -÷n¶î~NdüœÈà¸LZõq€%fÛ†S™«‹Ìv;ÑpÊôV(Ó' çü69ãP¦g›ÖŒËälÄerÆp~1 –“9E W"kÂ"kÂpfM”Åa'3éµqÁe½L* ÷PK¥pÖâþ ÏW"“²úvuʬRã=:eâ—ÅÑ… s"æDƈËÔãz ã2•_p½L,ÅeýÙ —"ã[Å"ãÛ6F\fµÒPfÌàÛµÈ$oˆ »×Yq™Ø™+KàïŠL˜«^&¡¶ÂÎD2ïCAµ-SBiè”IÅØï§1Ò-‘é‘¡pCdú@dìz™bÕË”‚áLd¼Çõ2éòQ¸ŠË”Î*.S|ÁpÊ<àZÉÿ¹Á§ó¿ZæÅpãbÖ3»^¦UÃüoܰeúÀ–±ëeN[¦l«^&Ó>b¶-Óçl™îæDÆÍ‰Œ—‰!BÙ>€áÔÍ—ÅḌoEÃe\f½Òâ¸Ì6€áL`¯ä.°yÉAÃß7'2Îr2×`8™kÀpÖé[ÆŠË[¦l«^†Ø2}`Ëô9[¦û9‘ñs"cÄeÚbÔË´…íy#.Së’q‰Y AÃ¥È,V(s¹B™NEæ¤î—Næ¶Tðt—ÉÙˆËäŒá†-Ó¶Œ—‰5a‘a3+.C.f}p1³êeˆ-Ó¶Œ—¡¶LØ2}ΖéaNdœÈq™T®ÊÜ0œ•n^Õ®x—q™²”ã2Û†³Üƒ²d(2)QwŸ]/“¼!2ô>oÆe.[¦l«^æ®È„9‘±êej±ªl«^&áBfiËô [fïR²ïùý/$2û€!2ŽDf0Dæ„브;ê"e\æjÑ"á¤ï€ÏÉ#R&çÉå„À•“9,F\æl[ á¬Ù5#.Ó€ádêZÍRÿµ”Ï{ ™·œÌž8™œ79ÅNfù™q™˜Œ¸LLÎšÛÆ”p½Lc8óÆ¡ÇÌ/hݕǬy\/³ `8cp¥³£ŸÔç"³‰K À–YÅ%µ³ñß÷s"ãçDÇeêjåC'ó>€á4ú¿µ¸‡U™«%5œŸ2{)r§ÌsÃYºN‹ŠŒ÷)h¸r2GoÔËD&°F\&RN'.2 xyÀ–Ù ‘q ÃYáC©ØÉ¼ÞÌÀÌ˸L- ó˜mÎʨsƧL‹‚+‘©å™OËDÆ-[6lnæD&̉ ŽË”è<e–‹eEÀ©Èl’ã2-3‰ æÅ,Z³ˆá¢­DÆ"*€¿+2aNdœȄ9‘ Hd¶ –‘ÈÔÄN™~#Ý™> 7D¦DÆŒËRðRĆS‘©ÎAºŒ²5žÑp—9>ª¸L ÃéµÐ× Ì[ƒz™d%ÿ' 7l™>°eìzz1ܰeúÀ–±ëe«^†Ú2V½ ±eúÀ–és¶Lws"ãæDÇe²Á!Ù>€á4ÇÌ•¥"‘Y•Ûó8.SRäLû†SMÞÁ³õÜMÃu\&&#.Cm+.Cl™>°eìzŸP¦ÏnØ2}`˘q™æq½ ·e¬¸ ±eúÀ–és¶L÷s"ãçDÇeVS¤e$2û†³ÚÿÖà)ëÙS‰Â…È䜙}éÀ¦à)“C QÕ“ù²eúÀ–±â2‘r:Ù¶ ŽË°‹Y\̬¸ ¹˜õÁÅÌŠË‹Y\̬¸ ¹˜õÁŬÏÙ2=̉L˜—‰>/Pdö çµÿž2q¹f\ŠŒk ™mÃÙç+ä1Këù`^Ì¢u1‹nØ2}`ËØõ2Î["ã1œ‰ÌR+™íðÕpuÊTëe¶ g"ãeîlØÍIø{¶ÌÞÃ|ßóû_HdöCd‰Ì>`ˆÌ õ2¾z\/s6p—pV•Ù\Eæ¿/Kp—Yˆý.˜†3fà#QJ˜ÿ[‰1øvídvÞp2;áôéÎÕ Ó2Kþ‡®X1œÌKÎÎRVR€Næõˆ šed£^ÆpÆM’2mñ]×¶ÌÃ}ÑÿŠŒ›7'28.ãZLÐɼ`8Kô9ÀLfW3€KæŒfÛ†³… „ †‰¯á›£^fIÙÁLæmÃYü=%,2él©Lášù?`†™mÃùÌ;ì1óg;é ®£ÿž¶ŸK—´,â”ñs"ãçDÇe\*ÍC‘!©ÈÎ*VrÀÔ.9ðt)2®¥EfÀp¶iéË6m-IÃU\ƹˆã2g·J ç"ãfKpÙ’)-œ2Î,©–!)ÓV¶¾]õ—qˆ”écõђéJM<áHd’C"³j!&2aNdœÈฌ )@ê¿}ÃY x\º˜­»©% W"“KÄ"“KÄp¶is*XdòR4\‹ÌR ‘Y*†³§×B-2<]21cê¿mÙÈ$ý_âÒ"p}Ê,Õ8eз+‘YRƒ"ãZSßDÆ'ó*2›§“<½ŸÆH·D¦D†Â ‘é‘1ã2.¸˜™õ2—-Ó¶ŒQ/Cm™>°eìzŸzoÀ [¦l™>gËt7'2nNdp\f ÒC³}Ùß&˜üïÖ[KÕpá1[²_"ò˜í.ª6 “yU |û»"ãæDƨ—!¶LØ2VbËô-cÆe.[¦l³¿ÌeËô-Óçl™îçDÆÏ‰ ŽË,5c³}ù~)Hd–"xº™T™mÃÙ¶É¥`‘IKÒp—¹l™>°e¬¸ ±eúÀ–qnËô-cõ—!¶LØ2f‡H™”-cÅeˆ-Ó¶LŸ³ez˜™0'28.³5•Ä"³ `8ëV¹8Xȼäº8 —"KÃ"³ `8Û6Gs[)21/^õÈ,Õ™¥b¸aËô-cö—‰Sÿq[Æê/Cl™>°eìþ2K5NôíJd.[¦l™>aËüøï_Ùö,1Û¬3‡%fÛ€UbvÀ!Y|b8¿œ” Í×i™Ñi™Ña8s¼´Ô`Z&ñÛ¸ŽË@ºŒç†³óÝ"eŠ­)ø{œÌÜ͉Œ›—Y¯6:™÷ §¤L«5‘Ȥõ·£PfµB™Õa8obîp(³âÁ ®f¼á1ó¾b8o/› wæY¸p2;×ÃÌdž3+²æ„3™Ó¾]yÌb4fbôÎθC](‘ñzÝA!sU™O‰ItÝýœÈø9‘1úËä²Àäÿ}ÃiŽY^U-™kO—õ2KAÍ2>0œ¥¬äI™–\BÓp-2Îâ1sÃù}>àP¦_ ˜ºwEÆÏ‰Œ·DÆeCdœg"ã>eBkêÛ‘È´hˆL¥Os"æDÆà1[?ž2û†ÓRâ–*dÞ²¬‚Óp%29â³mÙÇ,:Cd¼OWdœÈX 7D¦DÆæ1Cíe?0œ2!À&æ16à*.bÃq™†3J¨”0ùV,ªá€”)NfoÀ [¦l›Ç,:#-“Ú2±eúÀ–±ã2.CÚ2V\&Y¤LÜ–és¶Lws"ãæDƤL-Á¸Ì>€á4-³åEÆ×’¢†«ŽÌ v2ïÎ ™+ ë°Bf炆k†ox̘-cò˜]¶LØ20.Ã/f}p1³êeÈŬ.ff\æ²eúÀ–±â2Ä–é[¦ÏÙ2ÝωŒŸƒÇ,ç“ÿ÷ §›6Ç7ËHyi.EfI¤ÛEÎ ™C…€á,šÞëóÉàåß™0'2aNdœȄ9‘ s"ó¾-óý×o¿ýk·¿Î?¤È€I9²y/8 mšqSp@Úp5M¥,‰ÀûñòÝzyi# à.8²eêE89xùnVi],©ÖËý|ÍÆ¾(Xuœq5Çqáa5G×pÍcæ=žù³[å÷³—ÙÉ w?•ðA—RÔ QÃÍFŸ¨ç?ûMê~ÜîHÂm‰Pû 7;û ¦;Þ‡\˜ß\Â<äˆïXÃM*oIJ}ÀN“œJø€xqj¸É݇hõ¼«q1ƒ‰„˜F ˆ†›dˆGã€Y÷fú=.Y”ðAi!*aÒp³:ÎxæÛàe 䣜E 7ÓqQ¦ì)2~uÓÁŽ“$|<€âúnÆßQhœÀûðF½>ð"Gž†›7ä {Âûúû¿ÿ\2˜à_¶ n ëã9€á•þfɺèã—eåäl¼à_ý_N¾¸äÓ9PĆŽÖ´´rÁ G«‹¡x'5ú™Z,KÊÈK¼`x¥¿IµTÞ†¢—pðí‹«øÛO>j 'ß¾¬ Õëoßmç·ÿ˜[÷sëþã\¸¿~üäßžK=ŠÀpòí9»*ïm Ñòl3Já‚ÞY™½7½àSÛæÇܶùq®»˜ºmw{4uû†Wú›''e¥†¿5ußþšÚu~g×Õå´ß/ø×_¿ýñM^J¯Ñ+3c8ë•R<¨ó!dàjê‚KxêÊ%°ßþšÚuþù®ÛBQp0u.Gµm¾Ím›oÿô¹©ësS×g¦îwlá·Ù¾Ñ¯ÚŸÞ.x_®"¼—á‡KH9‡îÂûcwà—ñ§ÍÀ#Œ«þ}‹wðCI(uqÂÕ¿Søñfú”9àêß/ø3¢µí©ç_Á·ŠcÐÞt T*ñ¸ .b?~…bKLGDŒÂuA¡ÃªbÃJ(VŸ^þùò‹7šYû^½_¥FU `8K\mµµB|ûùãj¤SR³‚?µÝ6þKvH<ò—3afƒ»¹]ç^Ùu[0ï¢8á »Ç>ÒVº¦á’§…vÝdž3J_ÞuÏ5×yÔÕèírÐpÉüÔŽž ’¹¦Å0œ½| þy£Í(ë]çqíÀÖTÂå®Ûö\nj×åõ6Ÿ¯2ê îçvm×Åuæ«„ëz™íW°^Æ•³öŸÀ宫P×} `8#Xb¼³ëüÜ®óH×m¯õŒ-û½€³—/ ìº= …¾]Ñ"vœnŠäÕÌó]·î¹°qô£]rmôéan×…×v]È.F ×%'Û¯`ÉI*5h¸ÜuÅÒu…뺀w] ‹3jF–¢áªÇ lK´ÿ{lþî® ¯ìºçU|ûù#ïB³¤zº.{´ë¼ W[á=ÙçØ6ÝÚu}°ë(ÜØu²jƒ^Ìúy¯MNc,¸jÃÓka?/f²8£å‘90œníuÝŠUvàÿÈ—¿îu}p¯ëçŬ[÷º>¸×Q¸q¯ëƒ{]?ïuݺ×õÁ½®ÏÝ뺛Ûuî•]·å|ä¥J8èFq£_ψ…˺îXwYäø¶qx×-ŽëÔ ÛØuü„탶;°ëø½®îunÜëúà^×µëw¯ë~n×ùw/úéz×m¿‚»Î§Ü4\–$OÚÓT1€á¬@aAÍ2ô®ós»Î#]ÇNØ>8a)Ü8aûà^×=Øuü^×÷º>w¯ëan×…×vÝzºSk¢¸ëö_¡]çZ,NÃU-WÈP×íÎÂì”Ë˾×õ€NXv¯ëƒ{]s».¼²ëÔ½®¤ëؽ®îu}â^·çAïÛfÿ íº}ÀØu~Ï_wfq_p௫  ×êÏë+Ý‘®üuþ¬ pºëÜRËÃèØàÂ_÷0BÏŽ®;f{üuû†³ná®Tì99“À)\yNÖ_!kÂçÕËë{«‡¥÷:R»ÁÝÜ®s¯ìº­íM,M• »ÿ íºõºwV߸°a]j؆Ý0œåÅT—îì:7·ëœå%®ÅðWÎÊ¡’ Іu)¸´a·_Á]—¢S3ÏwݶãÖuÓºnÝqѹFgÞÏí:ÿÚ®‹«…•%\ûë¶_A] l᰿έêwÝ6€á¬ÈÞW£¡³¯IõçÄò×Uï4\‘jäâ¡çdÀpúò9¥€üu.¦àÂ_·ÿ šyµëê¶th×¥x±mlð0·ë‹»Î—ó^w—¸ /ñ>¢†Ë]çaUªbÃYaÀ'ìnÉi8ˆˆþºÌθ`é:Ò¢¥Š g:ÉGÌkä®.f®t]¨¤Å…¢§Nž°[)pòh×ÕõºI´M?/fÝÚu}°ë(üž¿î,p»àÀ_—pWâ´¤Ú4\ùë2iøXņÓc|5”烸×A¿×õÁ½Îô×]÷º>¸×õ¹{]ws»Î½²ë¶¨ÃÕÙç„+vÿÚu!_½2 \ذÑ”†Ý0œ…Ý|Kwv›ÛuÎòŸ÷º>¸×þ:z¯ëƒ{ö×±{]Üëúܽ®û¹]ç_Ûu¾$z¾[þºíWÐ_W‚«.½Ä5%¸ëö gLo.[Ì5i¸öœXþ:v¯³üuä^×÷:Ã_Gïu}p¯3üuô^×÷º>w¯ëan×…wU=x‰cÅ»ÎûÔ4\AÜu¤sŸ€7V´Ñœ+"b†¿ŽÝë°¿ŽÝëúà^gøëè½®îu–¿ŽÜëúà^×'îu{õü¾mö¿Ð®ÛŒ]'à7ýucäGþº€ýuÞŸ± ×þºhä×]žRçL0É̯«¬ ƒ1ò *¸¶&Z5¬‰V1œùÑóbqq£©Ó™N·âÊ`áн®8ã^×èÓÝÜ®s¯ìºÝwq¼pä¯kÑðו¦á:«³e#«“Iœá¯kq‰wv›ÛuÎòœ|¤.hÏÉ™º àì„ÍÙ ³ÎÞi¸Ê9Y…w‹êÛå [¼×Žò€Í¼ŸÛuþµ]—|HAÂuVçö+˜ÕéÅë×^boy‰}Âp^=™-vÜœ5\ûë²Ñ¶ ðíj×Åšð®‹5a8»•ç×¥ÒÀË«¾¥aõTB•p¥ëÖç=ÒuñËY}¿ÃÃÜ® ¯íºXù1aøëêqÊH/q).k¸Üu¾U¼ë|c gøëVkÀò'¯áz×%w]làéïîºðÊ®{ö£/¯t]J¸?lº2N¸¾×•PÒu)-tÏ÷óbÖ­]×»ŽÂoæ×9f'åל_·ŠRÐpå¯;X•”¿®ø‚á´8õ,k¢j8°& ö¸×ÙþºlP¸³{鯋5á]ÇNXË_GNØ>¸×Yùuä^×÷º>w¯ëan×…w]*I=ÐÛ®¿zj m(i¸ôו¥è¯Û0œ@Êby‰éÕÈίKï:v¯³òëîîºðÊ®S÷:3¿.%Ü+“ßëúĽnç\Ü·ÍþÚuû€±ëü–¿îbŒ¼àÚ_çŽd`nM8ŸÓ‹$på99”•òœ„³Á«€³ v×ÌL'™N g:]»ŽÀu~‹F~Ý“ðÆÝ¼Ùȯ;Ãy®óëœ_w‘ó\p}¯‹_<¬«´/¾¼›Ûuî•]÷ei-WõteÃî¿B6l«¹ 6¬·<'žxNœSìCÏÉ“üEõ¿.âL§€k/±Ï†—Øg gx,Fc æÁÔ)¶y˜_·4WœïºmÇÕîuëŽKíj ´ÁýÜ®ó¯íººÚ êéºKéö+› ½u\ö¼òÁÕê ç¯0®€³°[‹FÏÄÈ6­å¯‹ÞØuW<ƒÚÿfìº39PÀYšV©Ø_WK//ýuۯ஫9«—W»®–gâÛunÙÛ\1=æv]xmוè|”pµëö_¡]WÂUZHàR×-1`]·\eVNwݶ9­¼<8a#>a»Û„¹]æv]˜Ûuíº-ÎÝ2Úu51]×Ï‹Y·v]ì: ¿ç¯;É´/8ðו ›e¬3z¦ç¸ò×\ÜÊ_×BÅpzŒûš½•é”4d:%œéÄîuv~‹F~½×Yùuä^×÷:;¿nÁùuü^×çîuÝÍí:÷Ê®Û2&Cp®lØýWh×eW–ªá†-©áÊÄ}ÃéÖNÞUÃ_Gïu¶¿.âL'~¯³óë|6¼Äô^gùëȽ®îu¦¿îº×õÁ½®ÏÝ뺟Ûuþµ]·^Ëè)cøëö_ÁØDkÍi¸Øu9§wÝ>€átk§<öœ°{é¯‹ÞØuì^‡ýuì„íƒÖòב¶NXË_GNØ>8aûܽ®‡¹]^ÛuÑç%K¸îºý øëvÞªár×¹¶à]· `8S¨¾6ë„N؈OXv¯³ó뜷vÇp¶ë–Z±®«¼¼ÒuÕG¼ë\RS÷Þ½nïÔ±o›ý/´ëöc× ø½üº³ÏÈùu¾Â†Î¾4W5\ùëŽ6%Ê_·œç»€3J#©='¼¼öœ8ýw®‚—ÿCçÁž“匌8‹\¥ü:à€I çœøt¶`;áú^÷p_`lb«Ð¦ßîæv{e×í¹kI=]Ù°û¯Ð®sÍŸÅû.9|0˜Ä¶ ͇ý]çæv‘_·¤ì`ÎÉ6€á,†’᯻Êë\s:ÜÈ{µë‹„ëØ„§$«ùÚp‹Ðu~n×ùw]ºªuN¸ÞuéªÖ©o™MÁ_çZ p×mÎvG ûëNVd Wþ:碱ëÎä@—¬‰iq@×} `8ïY3ôœ¬wðòŠ¿ÎUc×¹¬íºäЮ[Žíº0·ë‹»Ž´?áz×m¿‚».ÄÅi¸Úu¹D¼ë2;& þ:—S1vÝR5\ïºç»+׈À•®‹WaoÎv]²b½¼Öu‹ÁÕ¹$õò`×9à9Ywoîº~^̺µëú`×Qø=£Ç„é¯szNÜj^6 Wþº£ƒ›ò×--b8'ã‚ÑyÂÚùuGÿù kæ×]÷º>¸×ùuô^×÷:;¿Îãœ~¯ës÷ºîæv{e×íÕ÷ô„5üuû¯à®sg£ 6ì’ZcaÃî.RÉü]çæv‘_Gîu}p¯³øëȽ®îu¦¿ÎlÃò{]Ÿ»×u?·ëük»n©™iì¯Û…vÝ:° —».•€wÝ6€álár)Ø_Çîu¦¿îº×õÁ½úëø½®îu¹×õÁ½Îä¯sÕØuì^×çîu=Ìíºðâ®+ ûvì¯Ûw]Y\Ðp¹ëbix×mήD#¿ŽÝëÌüºë^×÷:“¿îº×õÁ½Îâ¯#÷º>¸×Ùüu‹ÁÕÉîu}â^·÷w}¦enÁ¬ÎmÀÊêäð»õ°QÂa=,Œþ×- IÃueâRÊÄ¥b8 9æfyN€á,±å8 ?Ùuan×…¹]æv]˜Ûuïß뾟MëÌîu£¯|СÕn±JáfT»Éé÷³3‹Ù¢eÔÅì‚ÚÙ}Ä(Ülfwòú~Ò›<ä£V|ÐkÃn[@áf· »]Å÷“cÓ$ÛñQ_ð¡´ÍÍKá&¥³ÍÉüý$’2¥F¤‹|ÀšhÐQ¸É[h~?ÙLÚ„³ÐPÙ,+n’óØì:ßÏ’@³6pT>Áõïv;…›èv ù÷3ïÝL€Õˆ]ðA‘—]¥Eáf™•]'õýLî2³¼F‰Ð|Él'…R¸™Kl'?#˜f(s”ísÁé:væ…› 3vÆË÷ÓMgúëF!­ >ˆIÙA% 7£BvXçûy5/¥#¿Í8^lÏ …›®ÛwñÛ×ßÿýçRÀÿ²Mðåê¬bÃýÍòÑ+ów~íøâÒ‘G}ÁŸ¿ªâWçáúHËÙ–hƒ÷¥  þe =€/lÀðF󼃗?Éy.8xùÅUôò˪ëΙÿ17ó?>Ÿù¿~üä/ŸK•ð篪øÕ9@^>g罆 ;n/IEvÜÎÆ}Á§îÇç '¾}}§ž®¾}ÿ•þöퟗZ5ü­oÿö×Ôºs8\÷o|“W®,áÏ_ Öê|0¢êpðS¸úöàþöÒŸZw‡ë®¾Ýå(áàÛ]ŽèÛ]ö!kø[ßþŸŸSëÎádݳ§ 3ì¿5 ç±£ç¯2\ô˶ecQ/&¸Ysz”K8§Ã* Ïi\ª†« n×QöŸŸS›‹ÃûU¼Hòè»….o_mèóWé·Yÿ£¥d¯àHz?”ŠØP1œ1”zg‚û >öÞiææÂp¹Óзï·G W±ÿ |;­¥ÿí\;¼ŠæÂa¸\Eãå]–pôò¾üî:¯ÿü¹ÀÖc¿0Ò“*0œoíB_t¶ U ×íWࢳ„“[Ú?}Vó/¬²×~ùŽúáÞù>óòßæfþÛç3¯ä¬û·ÌÓzù¸©è=¿4 WÂr²œã >µpß>_¸ñ·÷¹oï3ßþ‡;NØ„ÛË£kÖöpß.x_®V/ÃsSžwá})Èô»¿îÎú}v ’ÿ¾ùÒø!J.O¸úw ?ÞL+Ô³§¸ü÷ þô–o»åùWEðm áÑ Ù±uP`¾~ ×I°ä–ÖÄ€†ƒôVÔ(—zÛ)pX]é­M h¸ÎO €Š9ë/øS°*«.ʉâ#YHGó?ÝÜÂ9°p›KÝãT¿}@Ãe-d ,ÜÇ€†ÿóUžjôšuÀe m;(Õdýb‹À@5ÎW — ·-[njáòz1Ê9õ÷s çáÂEï2î± h¸\¸ %îc@Ãß]8$n{J­Dź h¸ªjÎóÁù¬_ž/ܺlaÝ-\ȵQx˜[¸.d¡Äí.®XW¸Ä¤*÷R tåzhø» Äí— ¤*Ÿ$.{´pÞ…‹Œ~ª ×­…냅ëç'3#4IH˜ÂuB` Ýaï9 á Õ5 •g\?ϸnq}pÆõóŒëÖ×g\Ÿ;㺛[8n‹Bå¦xî.y×Ý1ó2yÓñ™w`ḪìUÙX8~ÆõÁ×µp¾ çÕ·¿}Æu?·p/œ/Fÿ†m@ÃeZZò„…°‰ wá<’8¦*û@UvŽŸq}pÆõ¹3®‡¹… páVmŒ“ª÷ WY¬!C‰Û4\çlAÓZžq=Ì-\@Çθ>8ãúÄ·çÞì ·ÿ…n0î„£*Çæ°wfQ¸nîé¶ã¼ HŠ¡'újvmÇ.á´»iÇ]ýÔ¥XÔÓõÇòÑ ÎGßànná°—Ý3/Y7ÎÜ4\w*Ä·Ê}@Ãß]8gàµ8íîŒí8Ö’\4v`Í‘§Z’—kÑDKò;îí…3ì¸Vd)Ú4\.\ˆ®Á…Û4\›Õh¼ÁzŠ[vi .fž57ì8ÚÕ[ô÷cMÁ‘§ºz“…]½?츷.x± 𒫆˅s‰I61 áÀåU,—WÑp-q)—¢†+‰ ˆVLõÕÆvœhŒMŽ6ÆÞS4…ëÖÂõÁ™v\rÛqg‚)…+;.“~êM h8 l…vœP•†Gϸ>8ãL;î:ãúàŒësg\ws ‡í¸ &9Ú4\vms´[þîÂ9˯Å0Àé‡í8vÆõÁ×çθîçΰãJÂ;šW«ï5àmzÍx\±âq¥h8jXí8ÙɾÞo Ž:ÙW«ã¼q9i~¯—PcFÕ ¹ÞïpŒ$W«‘1¶ãd‡ãúB‹bÐá¸ZˆxœhQ\ï÷F-ŠgθîæÛqv“`Õc¸Z½€°ý¯l\ïwùEM‚«ÕÌ×0ÀE—ßz¿M/êò;sÆu?·pØŽ3ûìê6½Õj§‹N÷Ù­÷å¢>»V&s³2™›†ßït+åΜq=Ì-¶ãŒVµ¨Ómµ:ÒÂ…S­jë ½fA«Zká¼µp^Ãï5‹E½fß>ãž]?«Õ±îšÔ©f±õ~·WÔ,¶ZM]±'»½Öû3Q·×jueÅ—Ù®µÞï·ŠÚµÂ3Žõåb•²ßêÔÂa;nÐ0Uö[­V_Ôn…*¦N-œcO›Ðð{-KQÇSè9a­­ÊµfºeéÔÂa;nÐsT¶,­VkÑî&*zŽÖûMCQÏÑjõ}À&´²ih}±ëgUOG —Z8Ýõsjá°7hÛ)»~V«;'^8Ù¶³ÞﻉÚvV«½&–8Ùw³Þoœ‰únâ…sÀ€3«Õ½ëv©Æ™õ~çKÔ8³Z .±';_ÖûMQçËju¨Ä—Ùº²Þï=‰ZWΜqÝÍ-¶ãÍ#eïÉjõˆ|À¶²yäÔÂñ8ÖýÑ>ãL;¶oDÝgθîçÛq£þ‹¢}cµÚ,Â…SýëýЍÿbµú$>`CNÙ@±¾Ø±ª§¿}Æõ0·pØŽµ0«Õ©ð›6¿×ƒµ0¬V«A,q²a½ßDõ |ûŒ{vƒ«V'£j^¤šÖû]QÁj5û3Òó–ªá÷Úø¡.€ÕêÖg8™E¿z¿jã÷víÀ³¡ÚÔÂ<'v#=Ù‡¯Zýò \4Ò«÷;á¡FzÕj=ö€}Ÿd'¼z¿•ꄇS"ˆ€?P+»©…3êãì^t²•]µZÎÁxœêEWï·õB½è¦Î[ ‡ºÁ¡frÆÂµh,œè7µpF^¥ÕÎMwƒ«V×6¼p²ÛÔÂYy•´[~¯¡êÇÏ8Öx㪠ժÕÕ幨†jõ~G4ÔP­Zϰ';¢Õû-ÍPG´ju.3œÌ¢¥Y½ß“ µ4›9㺛[8ƒçÄn*&{’U«wز.Ȧbõ~W0ÔT¬Z q°Žì Vï·õB]ÁfθîçÎÈ«´ûrɶ^Õj¿Nõåª÷[¡¾\S ç­…C=ŠPc­™3®‡¹…³ò*ÍÖV²3Vµ:X=`Ó*ÙÚjjáÂÜÂ…¹…{ÿŒû~r¯™$l˜‰R„“ˆJRÃMÆHÄÉÚ;Øu0Ř„˜ÄG˜†›T`ˆä‹µwÑ&`î PÄ  79^{ kï4ª‡Å¤>¨ýGÅán|ÖÞiTè„«=%|PÔ‰ªþ4ܬÊDõ–¬½Ó(ƒ—ñHø Z•sh¸Ynƒ iX{§Qj"ÎÏ–ðA6J°Öp3eH³öN£œœx'áƒü:”9§áf‚J}cíFÁDœQ!áƒÄ Y×p3óå4°öN#/1•Iø "†B&n†´P°Šµw™ÿØ*áW'rbj¸é«D^HÖÞit¯ÃÆ­„lXdj¸i„"ó’¶wª«³ p2ëæRW¥Ï»C©æRbʶÜéƒw‡2žÛ;‰îP?æ¾ýÇùí÷ú3öNWö%_¸P¸‰ ïÏ41u?Ω»Ù`I÷gšxùoMÍü¿Û! 4X2^žv ây‡¤‰™?àw[I/¿õ陘ù ~«Gjqd}{+Æ·óEÆ·ÇÅØu¢ûÐÄÂ]ð[íƒP÷!»K±iyû ‰o?–ëÍ…;@÷;ûˆÆ@SSw€^kÍ“isx øÅª—Q­yð)ƒÛÓ€î6ðêú‹•ɬzëL<ýÛÜ·ûÇX»Ã oŽclZ”²òÝm&¦îÛ?}îåûÌËoíi®èxy^K·§¹¸^†Vuu½ ï 4UïÀ¯;…¾]Ðö4ìße{¸çY{~¼™V´=ÿh’Ò¬Ö [ýešÕFæq«AL³úÀ#êÛ;ùvÝgä¥o×BšÕäq«ÓÇ ßŽZuàu§4æ×·ƒVÍ¢™ÜêµÑ¬–[Í2šÕãq«ÛÅŒ¼w÷Ê·£vÍêJñ¸Õo¢Ym%·FÌÈ{÷/~»êøÐ¬Æ[-šEðÿ¸ÕsaFÞ{xíÛuÓ„fõFxÜêzð·£¶oËû“<¿Y”Û[}šÕ^àq«q@³únñ£uçœdÝ5/ñKß®‰…›Åü¸Å ü·#j_(ïŒö¬»¦öm-åã7o³(x·Èu›Å¡û¸ÅŽ;#ïݽòíˆÞ¶Y,¶[ü´Í¢¡}Ü"˜‘÷î_ûvÍÛ,"ØÇ-Š×f‚>nq´ÎÈ{/~»"Ym—êãKê ߎhNß–÷'Ùf³(ú·xJ›EGú¸E4Ú,>ÑÇ-¦P(ïŒEÊ»b }áÛÕg³=·¸:›EÉù¸E¶©¾]‘Õë»5ÙæKß®Ù2›EŠù¸EwiÅeÚã_%úvÎåõñ혯ò¥oׄ“Íâ•|ÜbŒœúö€¾]Ða‘oה͢+{Üâll5ããéb³¸·Xgä½»W¾Ñ6‹Ýðq‹·°Yô„[ă3òÞýkß®™›Eø¸EýgÅeÚãwߌ¼÷ðÚ·kò½fqì=n±çYßn¸Iú»·åýIÂÖ,ê¦Ç-þºfÑÔ=nÐ5‹gîq‹AÊ;c×aÉ’Aî…oGpÍbz{ÜâpkUÛã ¼×1‚š«A8 a{íÛ‹Z³ÈÒ·hКÅvö¸Åcf|{rèÛ5Ùkß®ˆÈšÅ7ö¸Å$Ö,°Ç-*0üíœq ¬Y46[\^Í¢ìzÜ"ãjçÖã›ÖŒ¼w÷Ê·#:¬f±^=nñY5‹¶êq‹jFÞ»íÛ5£T³ˆ£·(¡šÅüô¸Åé4#ï=¼øíŠ”©YÜK[¬JÍ"OzÜ¢Ez[ÞŸä<Í¢ôxÜâ5j}Ñã1Q³ø‡·˜…ÞŽÇ=ùm^øvD Ô, Ç-nŸf1ÁÅãEL³è ·8^šEåò¸EÒÒ,.–Ç-–•yïî•oG4)ÍbCyÜâ9i¹ÂãQÉŒ¼wÿâ·+¦‘fŠgG°V‘ìûûw<& O×ã‹A3¿äq‡†Õ‰œÕìŸó@ývþíó§VÉoì`äë€JþO^þ³Rü‰§o¥ø°±)¯fgö°(ŇÍþîÁÃP‹wá}iè`º¿T²VδŸý»,Ňç+Å7áÇ›iÉ ¥øüï?þù{ÿÂǯÿõíù×¥¸v£î׿û¿ÉÀ/ÏÿöÇ×ëWû–«{Ê×oÛÓù7çåß_û?à_üA~µå™,©áÿîõô.²Áó¡“þþq>d[ÇO|Ppõõ6søTþþý|ȶXôW±Å½Ï•~HrG½æ×qí¸üýã+þ’Mƒºçbýü¿ßøCVµ«àê!aÝÍÇ÷þþÕúç—½/xH=œŠ\=Äçzhê¿ÿóÿýfî›g½oôõúûç9Û ¾k´°ÛUÃwüÙï¼ãïß~Xïø1Ûz})çíßßþ ?ñù˦çñ˜dç¿úåKÛ£§r†ö8à±ÿúöïC²þúÁ~å×c‘{è¿§/¼íü7¶ÓÜ—¼å7êÏßbÉÚìíÿÿ럿ÿxÇK÷\ð?ÿM|bm§d!å6§™Ú¨ëôÔìk–ðßøvÞgûˆ"üß?ÿúÐc×_B‹î^@x°àñ<ø·íìeû<Åcþï_??àúW1±†Ÿ£O|<Š¿×<pù‹“pyPl{ç¹ ›s’ ¸ð¥)¸Üµ»`CÍ·nÈëé}þòBÊ\ü’$½ü~u/ïÈËÿ5÷òß_ŸùJžþý|ùïBÊ—‚_>}ñ þÖËŸ›ëÚfŸÍü*½AÁýùÇßâWËnè—ÿ’Ž0 ó[ÈG¬¾ü’s9á??{yðZ‡V¸àòW¡ ;‹Â¯?ÑkIø'ïøëëïèBpðŽþyÌü:|Ç_?Çÿ=og¿ñ{¹d~ýñ§¸æ-G ÕÿõëÏ¿øy[–ç9Ñ¿þÎ5Wi‡+À¿ýù?òFòÜCý¿ˆ«ÙRÔËÿú?ÿâ—…œëóBó¯þ?òžþßý#o²í©øþúß>SnþïïŠOŒ»øýÚÿ_þZ1嬧Ä7•=ïðŸ¿þï¿ù7Ôx~ûqøÿ&¯×ÂÉ%YoP .&xÿÙN˦æ4¹³à“À凖§çt÷–'Ë åI>«æt½—úòb‚s+Ï+¹œÓXÎâö ®&Ø{Ô÷ýïyñùM]Ž þŸ?åÖö9H¸–Ÿ÷ä¹>n½bž{ó‚« ^¯iL°+ùŒ+¸ÚÁëêf=u›¯çŒìø_Òv OgÞ›­œO?ïcàfö1uryÃzût.—×ç¥í%ðjyƒ;z/¸^ÞæÏ‡œJ\¶?Þ‘ÏüS§y Wû|û¿Šf>§rT@¸žßÚÚÍ•ƒ ÀÕDø˜ î%©îÿÛÿ¿gþvþõÊÖ>Aïmí þÖÖ¾àomí þÎÖþæµý«>/?ÎôoÿK¬¯t¢Å£ßÜ!YÚ®‚ðõ²·žÖǺó¯=}½Nï롵¿ùŸî· È“øê;9ì­»Â÷ÿa6%ýöï—Ö6O,¬—Ííÿ>àD'Yú˜ÁùÔ}¿”Š©“|³j:ŽÛ?Ïk¼¾ÐÓ›¾aFþy^¤µ1CïÚ6ü›aåø·Ü´3.øw~^RÕu•Ýc-øy{UöÀ ß̧w\p#?ž¾˜ß~Âÿ¶ààç ܵ?à¿Úðÿóù¦å*¸|‰±–ãŠyÁÿø×·ny[þÏç[{ø4zÈŸ›?Ø?ôNÛ ëývçóøËÇ€‚o>3ÏÜ‚)¥ã¿ä>=§¯é<[ðò9|ýÄ ?ñˆŸ~ûö«dÁó-xAðmNƒœS8óÍü6nÁ³/ŸÁ÷k–—Ñ‚c à0‚€G žnÁ³/ŸÁ¥ûÍ-)ìÅû†´œgÆÿü|úòj×m¿‚»Î„g ^>ƒk]·E±¡®»ÂÛ-xºÏ¼|W®œKĺΧ£õÏßÏ©Û.±L×5W=Üui©Â‚oQ@x²àù¼X/>}yµëÒ³žQï:ž-xù ®wÝ–ÖwÝ•ï àÑ‚§[ðlÁËgpµë¢{†ÐÕ®[J9ˆßÿܲ-°®[÷v9“5Ø®[Ü‘:.àÁ¥®Û }ûU”¿:Ògpµî{¦ Zw’‚"àÑ‚§ÏàjἯ;g>¸Uzw¼üï_-uábz=Ô­Ÿî < ¸Tû„'ëéáÓ§«…sϪy½p®nÏŒA GRf"ë3¤H ž-x¹¯¼}OÏÿìSzþ§y1cðr ^-xû ®­‰vª}¯kí: ¿ý€"³ç…z}!? ƒKShÏUnÞ<Ý‚g ^nÁ«oŸÁ¥ºx¤/!ïÁ–·NïÁVòâÏÄ#ÏA*fä„G žnÁ3†qákÁƒ¸ýµpÂã-x²àù=¢§óˆåž­—7^þÄ÷#QwH·àæÅYÊ,¦.¢©ÛÒ-x6~õûiAÈõaõÒDéÓzi._~€ðdÁó-x±àõ¼Yß>ýv¡=~¥‚²Cx¶àå¼Zðöü7¶~ª‰p 9áÑ‚§[ðlÁË-xµàí3¸2ýöŸ!ÓoWü„Åäý¬õ¿?ÏZǹ¹„ÅäýTÌ¿?É'$,&ïgÞýýIúa1y?ÑêïO²…‹Éûy5’šBXLÞÏùû“4 B‚2ŽÙã€6a1y?vû÷'!@B‚2ŽváHa1yßû÷ç>Xìç",&ï»tþ¾åÖ0 ß0íÆõß7ÌÛù÷ç&ÞÈÈú{î’ø÷'—DÂÍòþUåïONNèŸñKe†á9Öœæcÿù?b£f~ãÌ0Þ´ñc†w#ðô‰@\ï/fv%Ì0>ÜïŠO$Ì0ì-˜a>Nha´0f®ôki„ÞäcáÄ݈1ðoÌ0Çåæq¹!Ì0ìµ3Ì.'˜1È:"Æ ó1ób‚3 ƒ f˜—̘aØÌ f˜}LM°ñH#ÿßóÞô›ºAQú ¾îœæ° …üPú êA–Ì0ÆSú æ€Ì0x‚}{-Á ƒö¦ Ïà)vgs–ÿ=¯sàbG˜a¸ñÆ™aàòrfÌ0Æò®×vÊ cEÚ 3 — Î ƒt‡`†a{S0Ã`ÝÁ˜a˜ÿZ0Ã`ÝÁ˜aø¶9…ýïéNò›[û½·µ/ø[[û‚¿µµ/ø;[ûÉ ãµ³‡œé¹Š¿fs«ù=œOfÍ2O_jòõHÿ|2ÃÜúó¾æÍ“æ…§¯–xªg¿©ïä°·î ¹ 1Ié·¿´¶yb187I¿décçS÷ýR*¦Nbð°ãÞÉhßÝñί¼|ør4UðïÁ6&áx< …ïñ=øAª“Þƒ7Bªƒ„‘dðž6àÎ!fŠ ÿfˆJªcÃM’êXðó~¸sˆ `ÁÏ‹?àÎ!¤:æÓó3„TÇüöþ·ÿ{?`¦Rþ>—w~zR§ÿlã»1”Êÿù\+ r‚FÙ FÂãÈo¼¯O+G2Îì ® …óó¼”t9.¹s®§ º^,xý.¸sØ·§O¿]rç0x¹¯®ËªÏÊbæšy]VmÁ‹¯ŸÁ1ÌÃâ|ðdÁó-x±àõ3¸.Ý``šÍFáA ýLx¨dk§²^Õ‹Ò®{PÌŸiü§?Ÿ£)qðé‘ÚÉI@x¶àå¼"øöí,íqµ!œþö?þæiÛ¯Ž| ^,xý®´ÂÇÌÿTZÁçáÙ‚—[ðj­{ütÝßÔ ?ç´ÂÏ9­ðsN+üœÓ ?ç´ÂÏZacVºö&¯ã 9«KÓ/›»ðt‹8¿ìÛåϴ:OKu±j‰û€ðlÁË-xEðíÛE%Ðá“$ðíWIþêÈ·àÅ‚×Oá¿R­@gþWªŽÏ¼Ü‚WkÝã§ëþ–Vàð—µÂ ÇŒg‹ä “Ï·àÅ‚×Ïà€6¢5˜’»s¤AxpÂ|Nçcç*¥}zØsxDpI…¶@x¶àå¼Z/?}ù·ö&‡¿¼7O8æE{XThž,x¾/¼~×½YrÚK Á‰K‚ðÀÃ!ŒV-<ˆ-ÅÐàÞôùè,àÁaÚ6áÙ‚—[ðj½|üôå5{Úú+¸7Mx±àõ38fO{X„iž,x¾/¼~}ƒVýŠÒFv¾5o}¹Oi…eòtZ€§‚a®Ûw•Õ\G6¥n%¸‚{ zp¬B7IÂsn%¸‚{ zðz²¢òtü©¸<´HÍï.Ò ÜJp7÷<ôàXBo’Tó ÜJp7÷<ôൔÕÖcÊï…¶žôâ¢Á#.ý­wCp/ÁCŽõÿ&Iò­wCp/ÁC^m ™0 # aÀNbLk?Ïáïç9üáý|†c¿IÒìƒp+ÁÝÜKðЃ×r#TÕ©lª†O½¸—ç^ÜËs/îå¹÷òÜ‹{yîÅI1&ÉHåkJIF´!ß,cÍÛìcÀ€ß$‰-ÂÖ-jŠ-B¸—àa¥g7Ýg?­©xÀOi*pQS±RK„/ÎâÔ!ÜKð0ÞE„'èiXž §aQDx‚ž†Eá€å¢ˆ\ç…‹"êœsU ¡à „‡r‡î$¸ï¡öá$ÉB¸“ྠ‡Ú‡“$wáV‚»!¸Çp wà@ûp’ä!ÜIp?Ú‡“$wáV‚»!¸Gp(wXÁ¡öá$ÉB¸“ྠ‡Ú‡“$wáV‚»!¸Gp(wXÁ¡öá$ÉB¸“à¾ÇÚ‡“$wáV‚»!¸p,wX±öá$ÉB¸“à¾/÷ó\‘n KQD¸Ê|‘´s¿ÐyžÃ­w]8T^œ$±E·ÜõàµÀ{R^¬bºk5B¸.áDû~v›.V«8;/ë/X7^|v»ýÂ÷]x©¸ù8Å@ì|©Èà¾ÇÒ–“¤f áV‚»!¸ðúº(ªf¹ÃËqySÆ»¿J Sè6ë9}{qµÜ! ƒ¯ºMú„; î»ðZlñþÞk±Eä|-¶Hà¾Çr¡“¤ áV‚»!¸ðú ¢šáÕt¾©"z¦Ei5Ó¸FçùJKs’¤Caëµ¥C!ÜKΛçŽè$I‡B¸Çp  CgQèZÒ¡î«·|œB{"›x\2‰ÏJ:Â÷Cð Ác~Z!d=¢ ÒQ½Í Pt’´?!ÜJp7÷< Á#€C‰OSÂ+ºc*„@ÏWÚ^û•¶¸èŠ(yž/1¸vò䉒çù\ñk'á™(yžOú½v2W‰’çùìÍk'’(yžÏ4¼v’õˆh;?©•âs}.ÍåÚI¶ B í¼‚ÖÍq×ç˜ÿkŸùoQ¸×çhÌë•'’i×:«A(](©ríÓ-báúÜfîÚÙÌ%Ïó[Škga#ZššÿëpæPò¬$>!ÜJp7÷^‹w·«%ðêÃÛ& ³‚ …P\ê±Nu_˜¤C!œ5RèˆJ–„Z Q´ø:¢ì…Ž(ž"˜šeQ§ÂtD»Î3W¡#*:ovžëˆ>åüûã‘ç:¢»ó… ÕåÎsÑ'œÏëèf½È—:¢¨\»Ðåà:¢‡Ä‡.‡7¢–:¢ç[LGô¨xÖlJ :¢•[%¼ãã×Ç}ä:¢’DGTöñkßÇÿòŽ÷[I51Q¾uæ:¢÷þã'ßÃPQ^ÄuDï=øû¿å.ïÐåÛ]®#z§€ÿà0¦#Zl­@ëI·®8:¢|ÍuDïŸ=Þ¿HtDYúZ¡#z_à‹3Óå+‹ †ˆaÞ_\±µb:¢ìÙ Ñ}oT„PQæV¡#zƒ—f:¢Eá,Ó½G¾0ÓeðBGôî|`¦#Ê"_èˆn«¬”Ú“ÜþËÛ®oÕŒŠ-ò÷ÎuD÷Ce1~¨Ø"ýìQêˆ ¦b‹ì«I¡#ŠÌÄ™[…Ž(ê›…Øb1¬óûÉ»A°/$:¢üìÇuDáëå:¢ ^èˆ ¯w=Ô"Å õX&¦#ÊG×EsG¡#Êúf¡#Šç¦#ÊøëBGÏLG”ÿ!ïÛÿËÔxA’ví :×µø©®}ÀOuí~¦kßtD5ú43Q)N}Ds=0-{êëMGßÕáëfo]­÷÷~Óo=×fm÷^wÓ} u•¾[„}Þ|'‹½´WHz’äDKŸýý˜µÅ‹Á§u³™þ#:¢ÂÂyèÞIEœ“<‚5LGT;¯nÎ+ª#ú<ý§/ûçÈ›Žèƒðo©Žèí{¦#úÜ\æp<û÷|r¡ä$œÿ¿ç3 %Çþ*'ª#*ÃÅ#Õ•àyäBÉ@‚ç? %:¢bëûñfˆŽ¨øì~•à×<NÀ1…èˆ ð¿ûã¯^@GôF¿%‰O&û»?+4É V#›(¢™&Iïs’D6+8L®Ÿ$…Pغƒ­#…P<öáH.t’B!ÜKð0K`äŠ<,E€ð ÁcŽ…'I Â÷Cð Ác^ëPÅ@–™VèˆpS‰® ™ª¤ÔåF\GÔLSKͲ§'y´^É…N’B(„{ †àÁ¡BhýìH.t’B!N‹š—POÂ-‚C1L÷< Á£ä¼í:Zóò€ŸÒ¼¼ k(m9Ij–î$¸‚ {p(Z ™ˆ©P³<_ïyí×{âÒ"Gy>ÑýÚÉÖ&r”ç3–¯´["Gy>õôÚÉŸ$r”çs¯4<"Gy>ßíÚI#j–í,œBä(Ïçj\; DͲýѽuÑäõ9ZüÚ§Å1oJÏ3Œ×!–Mä¹®LSƒë¹°- ¾ãÚgZgþësû¬kgŸEä(ϯö×Î’E! ÿ×áÌ!GYéTB¸“à~¼¾ãv ³-áµêdÒ¼DŸ«6™KgµÐ¼<¬¸+VÔú&† áL()cÂÖ 1LéýHj#…&Z» 1Lö‡B Ï0L’±(¶`b˜]狉¯Ã·;ÏÅ0ŸrþýñÈs1ÌÝùBP…Šarç¹æÎç^wô¿^äK1LTs\ˆaò?p1ÌC§ÂÃû—K1ÌŽóÀ-&†y”í6£1ÌÊ­Þññëã>r1LÉG"†)ûøµïãyÃü­$‘˜&ßys1Ìûþàã'ßQ1L^ÍÂÅ0ï=øû¿å&ñÃä»e.†y'wÿàû7&†YìÌ@ëI|­8\b˜|ÎÅ0ï4Þ¿HÄ0YjX!†yßG&&†É÷F~?Oü—÷cßÊÃdÏ^ˆaî[«¢ªŠa2· 1̼ 0Ã,ª?™æ=òE€™&ƒb˜wç‹31LùB sû[àR óøè\|‘¨Ä0÷3i1~¨b ý QŠa ¦Šì{H!†‰Ì™[…&ê›…b öeßöÿ—7“`[IÄ0ùÑ‘‹aÂ×ËÅ0¼Ã^¯^öЍÿò¤Î?D “ .†‰æŽB “õÍB ÏL “1Ó…&ž;˜&{övšà¿Lzô÷`×Πs]û€ŸêÚüT×>àgºöM Ó .Õ“¤âTã©©¦‡B·mÜWë›æxëé¸çmØ)¬›æ­¯Ûk—ý½¿“Å^Ú+$QDsPôÙßY[\±|ºÄR S8OC8Ýû1©ˆsRá|ðÎgç—ÝçAçõÚiK1Ìà·ŸØå›nb˜Ãw.î&†ù |2û9ã&†ù|=ùB H–•‡$>øžÏ @ó’Sdø«p@œ¨¦ hT S‚çý=м$G ž7þ@ó’ˆaŠ­ïÇp˜!b˜â³gøU‚_ð|8Ç"†)Àÿîw¾z1Ì{—t*–íïþ¬Ðl$ƒZlÊ~vš$ÑÊIRЬà0q}’d.aë¶Žd.!Kµä(-Ê-—£´(·x\ŽÒBR‘ ϱ¬¯BŽò€ÛNäéìTMá¥%WÂár”všZ¢ˆ=Y£õJur’„&!<Þ™.`¥øáAjÝu[‡ºN“$åT±0Ó$i1A¸—à¡z^D¿® ˆ¶…Hë¡ma!ìW)þAxà± ?-ì÷̶p‡cý¾I’ìƒp/ÁÃ<x]v•ÒQJxÕ;Jý>´¥ z•2„{ †àQÊ‹n ð Ä娟@\Ž ðáqÉøøq ðÈ?¢aFF© WIëAxà± ?­ wÀO)è=1|>5ˆ¨^ﻉ¸Ý‡¼ïNBypUhã –ªÓUªwî%x‚G©H %n‡ìâvhÀ> n' X*nÇçâvÒTIäå*Ù:÷< Á#€wÕépä‡Õépä‡Õépä™:e§ ®N'EžèÃUºsî%x‚GïÊËáÈËËáÈËË¡Èòrìü^ÈËu¾é¶¾krøÃß59|à»f­Ð†#?¬‡#?¬û<ׇcµÛ…>ÜS‘y.ò/ÏEþå¹È¿<ù¡Ï37*ÅQ ¼¡Ù-Õ«>éî£ÀÙ$I·ÁÖ=jJ·Ax”œw]çO+´pQ¡­Ò^ƒ¡ó8t@{ Â#€w%Öàib–Xƒ§‰iXb vZ.±Æ+ݹĚÍI‹P# Ê—A¸Cp(žáA‚Ç.*©M’x„ »p¨¤6Iâiî%x‚G âi”Ô&I< ƒp ¤6Iâiî%x‚G‡âi*©M’x„ »p¨¤6Iâiî%x‚G‡âi*©M’x„ {p¬¤6Iâiî%x‚GÇâi%+©M’x„ {ðrSÊ%ÖèÖ¨”Xƒ«ÌI‰³ÒH;à^‚‡.*©M’x„{ zðZï™J¬‘ÄüJb Ò±•Ä$ë¹ÄZ¥CáÁ¡x„ »p¨¤6Iâi$xìÁ±’Ú$‰§A¸—àa¼¾_§Xƒã’K¬Y þö—Ôm¨ÄšØmÜ!8Oƒð Ác•Ô&I< ƒ=8VR›$ñ4÷< Á#€×qkx:gkV€'íô1~W);"_©‰M’xlÝ£Ö¡x„GÉy7àµñÚIï#Zfçá®d0¢ev>mêÚÉ<"ZfçS|®,"…ÖN8h}ò¿>÷ÕüÚùrL¤ÐÚßX[_9¯ÏÈ×>Ü¢1¯Ï1×!6L䣮ŒPƒ“¹°" ^âÚgZgóësû¡kg?D´ÌίÊ×ÎÊDäÀ,ÿ×áÌ¡eV‰œA¸—àa¼¾=°BÃL i"Rh8ñ©”B;¬¸+D ÝŸ\H¡á/ÚL µ^H¡IïGª5/¤ÐÐÚ]H¡±?Rhx†a‚\Eê7“Bë:_L|…šè¼uØy.…ö”óïGžK¡íÎåôT ;ϥОp>÷º£ÿõ"_J¡¡š¼B ÿK¡EζhÞlYJ¡uœn1)´£*β…H¡Un•ðŽ_÷‘K¡I>)4Ùǯ}ÿËæo%ÙÃ¤ÐøÎ›K¡Ý÷?ùˆJ¡ñ~.…vïÁßÿ-7‰‡ß-s)´; ûß¿1)´bgZOÒ;ÅáâBã»p.…vÿððþ½xD"…Æò )´ûþ 821)4ö»a}uDÏëþ⊓BcÏ^H¡í[«"‘›J¡1· )´¼ 0“B+ÊĘÚ=òE€™ƒRhwç‹3)4ùB mû[àR íø8\|9¨¤Ðö3i1~¨^ýðPJ¡ ¦zQì»E!…†Ìô¢˜[…ê›…^ßR»º¼™ÛJ"…ÆŽ\ ¾^.…Æà…šðz³¯~ÿåIœˆ\ Í…ë›…ž;˜c )4৺ö?Õµø™®}“B³èãÈDÕÄÈxq3QRÛGV}(„ðu—>Gç™Ú­¯‡@í©Ú­«‹qj H¡áCLËŠ€<ûû1k‹+ƒ/iÏ;•w2'Ió1ƒóн“Š8'1¸¾¨°.à •B³ãÎë‹S«ó–J¡=Oÿ™ËÎ!ݤІï7)´á+>P)´àë …<û÷|Šgä$Ðßó(ž‘cŠ ˆ•B“áâJ¡I𼿊gä ÁóÆ(ž)4±õýx3D M|ö ¿Jðkž'à˜B¤ÐøßýñÎW/ …vcï’J™À²ýÝŸšdP«‘MUÊM“$Y6 ¨‰¹ij•-B‘3Øz€­#‘³~VË쀋Zf²f}öšIwøy12‡²pÇÅȤõ˜Ë*Äȸ+áDYÉMÕ$ZŠ‘q5 .F榩¥¨ÕÖš£­Wšc“$3áÁ{jb.Ï®§ÔÄŽg÷èÙ¡N„G)t¾ºÓr`OuíçºöÇs]ûc k' £ãõ2í)ªúEûf©ú妩%]ÕêÚ¼õJÜk’ô¼ <"xO¶Ëå•ÿ”l×ñì=;ä‚ð(…ÎwCwZw uíB8«RÔ‚ð Ácb„Y­›¢„»Nd–H’+2¤¾ÉáÁ¡p„G©ußmý´>~½LàÊã<Œ$xìÁëÛ…’ ž¹L.ûåpÇùM&ƒå@òj‘+âp®H÷® ³´vþð. ÃÏË 3⨼ìu\^ˆÕ-òBO…îå¹Ð½<º—çB'm ˜>­#/õÐ.`³“Øq9¸’™$åØz@­CåŸ ~Zà瀋?•t|ö€ŸH÷”ðó =pó8 +ôÀnÃzx¡$Wèq9—Jì@õ÷µw ˜Ë˜ÜI¾?øÎŒÉ˜{.Ðz*›/Ž ‡Œ ß_s“;3ýþ½xD"cÂ2 “ûÊ_†˜Œ O“9„òNë[¹çb2&ìÙ “}ÓT$RæV!crƒ—f2&Eš?“1¹G¾0“1aðBÆäî|`&cÂ"_Șl«\ʘ`¦+“ý´YŒªõ@‰íRÆD0Õz`¼x!c‚Ì´˜[…Œ ê›…Öß…¬ñ‘·‰`ÃHdLø¡Ë˜À×ËeL¼1Á¯wÝv*c"}Å&2&|dp4w2&¬o2&xî`2&Œ8-dLðÜÁdL8ýàvêÿ¿ÌÉìì`×Πs]û€ŸêÚüT×>àgºöMÆÄ!R¢J 䨫×7§ •1qð¸áîâÔz`2&´¾¬‘ŸÍN]ÞdLh]]ÖåJ-ŠÈ˜àL΂€<ûû1k‹+ƒß½RDÆD8)C8Ýû1©ˆsƒë‹‹!—¶ÜdLÜcΛ˨ŒÉÃð]wè&cò Ü^ötɃðo¨ŒÉíïê7ßó ¨•C’@ |Ïg VBŽ)2üU8 NTÆD†‹G4*c"Áóþ¨•#€Ï VBdLÄÖ÷ã8ÌñÙ3ü*Á¯ x>œ€c ‘1à÷Ç;_½€ŒÉ—K #öwVh6’A­F6= ?M’ÜÈ$I„TpñI(P[Rë¡ÛzS‡DºÂ’;/^aÙñ(Yp\HÄCb©-° ˜BHä€ûN4üTMc¥¯æB"~šZb=5Œ£õJ/d’$BêÖÏ*Îä<Ôø¨à§¥<ŽÞá¥ÞÄÞAáÀq·)á¸õºMÒ;8"Ï”&¨H}ï¥H‡Ÿ¦–PEOi½÷B¤£’ߨà§U6çrêgTðÓ2¨Û:•„Gµœ±n½ê6›ì6…†iAHPð€àPÚ¢‚ŸV°À‘g\/àÀk¹÷¤MQÂÁ€5ÞÂÈÚ~šZâ=u2v mŠJu¢‚Ÿ—ú¼•ð*À¥’p<¥R•F„G)9«%E G¥ðôȤøfŒK€gD ôŽRŠ ¨à§µž½ŸC£—m H™ÿ‡¼%H’pa*T„^GËü«úRº]«ÌõºÊü…^GËüyë¼Ì_q¤N¿*à‡ðàÝ:}üìÃuúøÙY¾g;^§/=;)´¯*ð!<x·Ð?ûp¡=zö¢Ðžmp‹BûØ¢â8|€Š«KÝñ³WÊÃ÷Î+åYEHQ)ÿÔ³¿<÷ì/Ï=û‹ðÞY©;­e+KÝÑ*S$÷zœÜËà (|’ŠØaëQj=t[oÖªWUèÐù(e&·ŠÍáö`.6‡/Ž›ó^lîóO/åE·Ê½x@pXF^ÁOW‹ûœ•íqV6¨‡ð(%u·Ê½wøÉroŸsÂ=Ê ‡…Ü¥”òV½ö ~º^ÛçŒt2Òa%6„G)¡½Up}ƒŸ.¸ö9Þƒ|x\J áQJ§oULûœ´uªb.R¼bšNÔeÅ4ï_$uˆªäù€Gï•<ßà§Kžá·2^òL³;Ê’gxX¬Jžái|¼èžÆyÉsUÌ\ÁO×,ûœ6U•&OR52„G¯¥i9ñ/ûæ­4¬EU5²ùÑz`!ò´¹ª3®à§Ë‰aäy=pU( áÀk½5Ré›áÕ¬°U £­kY(Œ8Ô‰—øx!{à€Ã’ÚI*†­G©õ0Ðz£Ò·ªá…η zñ#—ÔâÎÅ z«RÝ ~º"×çdתðv’jm!<8,©5%¼ÚˆNEáíù ”k?¥•Äq}î“åµóÑTΞÿ:wí|#•³ç?D];Ÿ‚Håìùo.×ÎWR9{þ»ÃµÃü“ÂÛ65Üâv¯Ï±«×¿I oÛDb‹ ¼>w6¿öÏæ­ãíõ¹æuèˆ'žÑ®‡¬Æ)é:pÌiœS®ýƒFë¤p}nU¾vVeR9{~a»v–R»êù¿ŠF\R áÀkµßTR[ÂëÚÕT_‹H¯­¤ÂYO+êk+î ©¯eº÷E}-æœY}-k½¨¯•,%0õµhñ-êkÙŠúZá|îuGÿëE¾¬¯EùE}-ÿ¯¯=òv}Ñ8².ëk;ηX}í‘èÙŒBêk+·JxÇǯûÈëk%I}­ìã×¾ÿåï·òØÍêkùÖ™××ÞøŸ|Cëkyú¯¯½÷àïÿ–»¼£¾–owy}íQúƒoÀX}m±µ­§z®âtpÔ×òm4¯¯½‘ïß‹G$õµìKaQ_{_à‹3«¯å»p^_{qÅÖŠÕ×77²úÚ}oT¤ÐúZæVQ_{ƒ—fõµEª"«¯½G¾0«¯eð¢¾öî|`V_Ë"_Ô×n«\Ö×T- pÁvVõµû¡²?´‘’¥e}­`Z„ȸ֢¾˜!2·ŠúZÔ7‹"D¾RÊ“ Wi_HêkùÙ××Â×Ëëk¼¨¯Å¯w f¯xû/OŠàCêkùÈàõµhî(êkYß,êkñÜÁêk“XÔ×⹃Õײ®­½¦®ˆ®ìÚt®kðS]û€ŸêÚüL×¾Õ×zDSO´DÕÓm¨±{U÷­¾ÖÃS‚ñkŸ·v§èoõµã­§úÚ˜j|h}íxë7ïãÎA½“Å^Ú+¤:KOOùdz¿³¶¸b1øºsé?R_+ˆ!œ‡îý˜TÄ9‰;oÖ³ÚW¬[}­wÞ\œY}×´¾öøý¾¦õµÃ=«¯}¾ž-­¯}î..®Ï®H}-¨?+IÂùÿ{>ƒ€2ZrL‘á¯Âq¢õµ2\<¢ÑúZ ž÷÷ Œ–$xÞøƒ2ZR_+¶¾Àa†Ô׊ϞáW ~mÀóáSH}­ÿ»?Þùêêkoô[*}h²¿û³B³‘ j5²•i†i’ê`§ ×ÐÎц•³uë­Y¹†ñ?_á µÅ*\YÆBQázÀC '•Žaª&’²Â•%ñ ×0M­"Ñv 1m]¼ë¾U¢z´.Þ6{­Ÿ¿ïý©÷ó1ð~RIa˜êÉ®(%¥.KIÃ4µª1[.^ØÞª=Z¯L½ÖÏ_Z.¼zi9}?å¥åÂû)j6Hž(>€JæpñÖñ؃Ÿ¿÷GˆÝûÍ{0¿÷[ˆPQ[@fNñõ6௷\¼¸;öàç¯Î"D¯Îæü¿:[ˆPQê,…òÓ³Ô‡8\¼û:öàçoŸ0šÝ>Í“þùíÓ8Be­"îCì»yÀßÍ ¸x}tìÁÏ_ààw0v3_x!îìs~ÀŸÊ ¸xsìÁÏߌŸÝÌŸŠWø¡Ùµ¨ðgW/1Ž=øùk„ѳ׳˜ÅwÂÞuô`as3Z=‡_«žãË"¯žΗùR§åpñ&ÞØƒŸ¿ W˜ôé]¸œ<çwá SZQå&¼ÞÑËl…¾9Z¦&¼^Z¦Æ——©I}sð:YìüpvžÕ™¶äð:3ÉùÁ ]¥Å`¡žX¡Û…bmïJUadŒVzœ N+½X²nQéõ”ó/Ï9/ÍǬT‹f×—¥ZhJ+ÒÁZÅR!g7s¶¯½ŸÄZµV­‹=áj0 KÁÐñb)žŸË‹¥B¦¯ƒ”Ëp.[¯ÖŒ]øéË-wøÉr¥3éN]/yƒŸ®7 9ïÔ7øé‚¡óøN]±ògäS?p²â?t¼—?°ÓŽ_rxƒŸ.Ù{^²ãÉX-Kvà¤*ÙÛk^²SÕt@¸xÍ`ìÁÏ_ô‡žì¢?òÞ«‹þP„êÒ!B´´FŒƒ‹7õÅüü]yxËîÊ£#£¼+ïcËt4ŸÆ‹PÂ4µî‹ë]v·Ã5,­êÜ:Kâ 8‰·€‹÷ÅÅüümxQžèmEäYáÈùO+×þ§•–@ãõ9ÞôÚ!>IåÇyêñÚáIåÇyöîÚ¡ßHåÇyìÚa°HåÇy¦éÚ¡ŠHáH›ÖÀ„©ü8O,\;Ì)iŸÍñ©›T~œ?)\û'¼‰'Åç7ÛסÝ2ظ°Ý…Ù .îWáN´„‹N¼•$•çײkg-#•çלkgÑ µÿ«ø8ß½ríXZ,ïÇ•k¬Ü¢¸r Ÿ´Ù•k¬%!Rë¤$„©ó%!˜b%!¬õ¢$D ”sS”„ eµ( a(JBðàg… A(LHE]ç‹9©( ·;ÏKBžrþýñÈó’0Á´"ZÂç%!O8Ÿ{ÝÑÿz‘/KBÐwþ¢$„ÿ—„™*¡hÜBç‹’ŽóÀ-V&à#/ ©Ü*á¿>î#/ ‘|$%!²_û>þ—÷²ßÊã"+ á›b^r_º?~òÝ - á_IyIȽÿ·Ü¿%!|#ËKBîŒÅ|kÅJBŠMh=¥ ûþ£$„oyIHÈiÝüII#õ‹’s“y#¤$¤ØÄ{ZrqŦ‰•„ü¬$dßõß)iIs«(  0+ )2,XIH˜P€YIƒ%!aBf%!,òEIH˜P€Ë’Àå•yóAțϠzüмù äÍð*À4o>yó¼êÁ4o>yóœÇ±È›ç’œüð_Þç) á§:^_// að¢$¿Þů#TUHßHI¼$ÍEIë›EIž;XI#Њ’ø×¡AÊ"K7ص3è\×>৺ö?Õµø™®}+ ˆ^hU9«&×±+×<¯AxHAÉÙ·’Z_73ë*¬-- y u}Q:XV‚©eVŽÓ;}ö÷cÖW,_·2©"Ä“’ᨠᅖgŸÆFö)Œ<Œo¥Fœ¨OÓGC#}®EUúh|.ÿ3NSO4]T=ßáe€¹hzldvÆçR3¡ó\w\Ïðªw0ÝñØHºD;¾"Q%6’.ã4’ŸËnŒÓÔS¿.ÓM ¯&¨2‰ñ<p}Ž ¸>w^»vÎk$ ñü¹êÚ9W‘,ÄóçŸkçüC²ÏŸS®s ÉB<иv$‰ñü.üúÜ6úÚÙF“$ÆóÛÝësû–ësû–ësësësësësëskÃuhm¸>·6\;kI#ŒÓÔ“¯vezb ¯ó©|u(Ó!<6r+'å*úF®">Ö±\ÅØÈU”"$} *rÑêYä*ÆF®"ã,c.6r»ÎSO‘«(:ovžç*>åüûã‘繊q‚ß»h®blä*>á|îuGÿëE¾ÌUD}‘«¹ŠqÂß»H®blä*vœn±\Å8y®blä* ;"Wñay®¢ä#ÉUŒ\Å®ÿå-ë·òÄrc#W1æ\Å(å*ÆF®b̹ŠQÊUŒ\Řs£”«¹Š1çE)W16rcÎ7ŠR®blä*Æœ4¥\Eþõ)×åý—wDßʽËUŒ\Å8Õ.rc#W1N(À,W16rã„Ìrc#W1N(À,W16rã„\æ*Æ©Úg• ]±‘«'8~hBWlä* ¦ ]±‘«ˆÌºb#WõÍ"¡‹oHÔ>»þ—·s`cGrc#W¾^ž«¹Šøõ.Öšl¿oó\ÅØÈUDsG‘«¹Šxî`¹Š±‘«ˆç–«ÈÉló43YUÐVƒ];ƒÎuí~ªkðS]û€ŸéÚ·\Ex"K÷#GÒ8ÛùP¿ÞGV},ƒðp )±ÁÐ\ÅZ_.ëÁÕî/î–«ø@ëú²žqæœpG{i¯rÖâqH§Ïþ~ÌÚâŠÅàËÅ—òÕ‰ÂyèÞIEœ“Ü^Œ±Z1ùê8î¼Û>ÜåggÿžO@ %qb)‰q™‡Ë<ÄÇ=n%ž«ˆUÞ{ƒtÁ‰¥ Â]8ÿ­}#Ž Kþ“Î<ËñCÉK<Ë®?øäRùbβ‹T¾ö i6’A­F>~ü¹l;ÆéÇ·ŸÿÜþUÎJ?Þ?ØÒ1i)á¿~¼ÿS i#êÁF·žQr#ú±F¾lûe_ÂS#ZnÄ<®u2*á©#6òíUl䋽5òí'ûƒ¹x›Ãµ;P¹rœ|üdXâzf«àÉJñ׾ܴÙ~þ1kÎiÆýÓßnðü¯j™c¿Ë’d ¼|ÄmY¸YýÊþOR<¢ÐÈÿçÇG?„M~½æF^¥FOrÀÿ©àG#Ùàð´½ëÚGÚUö¿]¡Õ~B¥Ði+^µ^Z¥Ž¶m¤ßøï~¹ù†ìü¢..;´~ÊùÜ¿@Oû[Odµ”ðÿÁ™ànõ¶Ïoâ|ñVÎ|K¾³ä€ÿZgsqz}ÛçÇG1ûa쀧F”܈~¸‘ÙïßÛxjD˘Çù’:sð%<5"N¯oû›{“¦×jÌ\fcL o¿ø<‹¾‰“ð[Õí.®‚'«bŠÙ?ÐÿÊ¿~‹4"Nƒ;蟷ڕL³¿É®Üù[c†Êð:¨ÚÞ¾8ƒÖ8æêM˜#¶Oi}xÑzê8û‘ü=¿Èí•*0lи‘n¤•íeÙñƒõ›eN§ßm}‘Ÿ$Ãÿ·Â_Ù£XµQöÛÑ™X3I†ÿZÿUŒŒ¼®®Vê9UÃÇÐ÷QeUÃGýœûøÅ®g¾8êì£nøhžóÑ>.s¼¨¾&ûhDKýq5™oß÷7|üMûãoêc¼hâx™]Nû9à¿~7úão©?Žú¨ é ªŽ>ªì£jø¨ŸóQã8N_Ôr‰}uöQ7|4Ïùh„wmÜÅ ÄÑdåþøúú²o&+W¦ýcwþ‹Z÷y%üwi¥S‚öNlòg·a_ÕçÖ¶¾È]JxÕú Þ 8ÊÖsÑ!Gè÷s­ÿ­Y[˜Ã<„(<¬ƒô¾Ù8&™jÚfI…[û—ð£OT=xþqýyŸ 6† íÃ×?ü+î/2ü×ú/±s]ªGYÖM_(ák#ªÑˆ~¼mT _ÑFÌÃáR—ýûÌ_1F죘Ëbc _±FÜã/ÞçOì¾6âü›ù7’¾¶,<…N«þ¿žÈ£}ÿø?Ñ*7ò½5‰¦2ߣ$RI5885ÄÁ=ÖHÅÁ©!î¡FjN qp‡‹spjˆƒ“!œjppjB®UÍÁ©Ì i‰ƒ3 NeNIÌ•nppjBXrpJb®ŽGÔ Ne®èÛ{áЯÌ+!†©û$üŸ ^pp(Ú§œÊ4–’h,ÕààT>¢*‰ÆR 88Õààs¾âàžp>÷/ÐÓ¾ÀÖ+N çvÎÁ©Ì÷(‰TR N qp7Â985ÄÁ=ÚHÁÁ©!î¡FjN qpR#„ƒS nàÅçYôMœ„»æ*x²Ò NIôØÑˆnpp*spªÁÁI®N5885Á RN5H45a+ÂÁõáEëw¼R-qp¦ÁÁpÛ ÑT>+‰—Q=88(ùù’ÿ  r®„o§eU²7#äÜSÎ+ÉùÕw#9JxËù6k÷”óZtþ¶Î”Îßè¼Þr¾Mç=弜_»ÿÅ!ç7ž¯„·œoó|ÐyÎý¨ϧ ?•v6ÿA` /¿1D#àSÎ+àüâמcÎß™ÁÞr¾Í >å¼–"¯n,pùeXÂ[η)çœ7’óNAço\b o9ßæÕ„Ç%áÓTƒKT™OS—¨\¢šp„„ÖK.·Î¸DÕàŸiý7h½æU‹KTh1ad jq‰°kÀ72PeJII”’jp‰jˆK|°‘’KTC\âÃp.Q q‰†«àÕ—ø`#%—¨†¸Ä‡_<çÕ—¨&ü[„KT .Qa–pínÿƒjŒjVœdT ’QgBKK¬™nŒzˆd|¬‘ŠdÔC$ãCÔ$£"'õÉ(5BHFÝ õ„\¸šdÔ™ö2Éh$£Î$£–¨9Ó õ„±$µDÍh$£Î$£Æü߯Lœ! ­û$üŸ ^Œ(Úɨ$£Î<–x:Ý u>ƒk‰§Ó ’ñˆ‘HFÝ s¾"Ÿp>÷/ÐÓ¾ÀÖ+’Q Ä'u&´´Äšéɨ‡HƇá$£"m¤ õÉøP#5ɨ‡HF©B2êÉ8ðâó,ú&N€>tC2>å¼’œg$£–IÆ®óm’ñ)çµè<%µL2vo“ŒO9oç9ɨe’±ë|›d„Îs¶H7HF=Ác?#µL2BçÇIƧœWÀùšdÔ2ÉØu¾M2>å¼–"ÏHF-“Œ]çÛ$ãSÎÉyF2j™dì:ß&õ„Ç%!ÚtƒdÔ™hÓɨ$£žp„„ÖK’·ÎHFÝ Ÿiý7h½&u‹dÔh1a,¡n‘ŒuíøÆêÌ5i‰kÒ ’Q‘Œ6R’Œzˆd|¸N2ê!’ñÑp$£"l¤$õÉøð‹ç$£"õ„‹ŒºA2jÌR’Q7HF=+N2êÉh2¡e$ÖÌ4HF3D2>ÖHE2š!’ñ¡Fj’Ñ ‘Œ‡‹“Œfˆd”!$£iŒfB® \M2šL{Y‰dt ’Ñd’ÑHÔœmŒfBX’ŒF¢æŽG´ ’Ñd’Ñ4HF#QhÝ'9àÿTð‚dDÑ.HFÓ MæéŒÄÓ™ÉhòÜHÜ'ÍÉøh#Éh†HƇ©IF3D2J’Ñ4HÆŸgÑ7qô¡«àÉÊ6HF#ñG#¶A2šL2šÉ(¹BHFÓ ÍƒJIFÓ` Í„­É؇­W$ãñJ­D2ºÉxÀ}ƒ%4ùäl$¶ÈôààEIF#“Œ&ŸœÍ’ñ)ç•ä<#L2vo“ŒO9¯Eç)Éhd’±ë|›d|Êy#8ÏIF#“Œ]çÛ$#tž³E¦A2š ûÉhd’:?N2>å¼Î×$£‘IÆ®óm’ñ)çµyF2™dì:ß&ŸrÞHÎ3’ÑÈ$c×ù6Éh&<. Ñf$£ÉD›‘HFÓ Í„#$´^’Œ¸uF2šÉøLë¿Aë5ÉhZ$#\LKhZ$£A]{¾±„&sMFâšLƒd4C$ピ$£"n„“Œfˆd|4\Éh†HÆ)IF3D2>üâ9Éh†HF3áß"$£iŒ³„”d4 ’ÑLÀŠ“Œ¦A2ÚLhY‰5³ ’Ñ‘Œ5R‘Œvˆd|¨‘šd´C$ãÃáâ$£"¥FÉh$£+W“Œ6Ó^N"}ƒd´™d´5ç$£Ð#–$£•¨¹ã]ƒd´™d´ ’ÑJZ÷Iø?¼ Q´ ’Ñ6HF›y:+ñt¶A2Ú|·Og$ã!'‘Œ¶A2>æ|E2>á|î_ §}­W$£ˆ N2ÚLhY‰5³ ’Ñ‘Œ7ÂIF;D2>ÚHA2Ú!’ñ¡Fj’Ñ‘ŒR#„d´ ’qàÅçYôMœ„}è*x²r ’ÑJüßшkŒ6“Œ¶A2J®’Ñ6HF;Á R’Ñ6XB;a+B2öáEëÉx¼R'‘Œ¾A2ðÐ` m>9[‰-²=88AQ’ÑÊ$£Í'g{†d|Êy%9ÏHF+“Œ]çÛ$ãSÎkÑyJ2Z™dì:ß&ŸrÞÎs’ÑÊ$c×ù6Éçl‘mŒv‚Ç~F2Z™d„ΓŒO9¯€ó5Éhe’±ë|›d|Êy-Ež‘ŒV&»Î·IƧœ7’óŒd´2ÉØu¾M2Ú KB´ÙÉh3Ñf%’Ñ6HF;á ­—$#n‘Œ¶A2>ÓúoÐzM2ÚÉhÑbÂXBÛ"Ѥ2ßXB›¹&+qM¶A2Ú!’ñÁFJ’Ñ‘Œ7ÂIF;D2>®‚d´C$ピ$£"~ñœd´C$£ðo’Ñ6HF‹YBJ2ÚÉh'`ÅIFÛ ]&´œÄš¹Éè†HÆÇ©HF7D2>ÔHM2º!’ñápq’Ñ ‘ŒR#„dt ’ÑMÈ«IF—i//‘Œ¡A2ºL2:‰šó ’ÑMèK’ÑIÔÜñˆ¾A2ºL2ºÉè$ ­û$üŸ ^Œ(ÚÉè$£Ë<“x:× ]>ƒ;‰§s ’ñˆ—HF× s¾"Ÿp>÷/ÐÓ¾ÀÖ+’Ñ Ä']&´œÄš¹Éè†HƇá$£"m¤ ÝÉøP#5Éè†HF©B2ºÉ8ðâó,ú&N€>tå¼’œg$£“IÆ®óm’ñ)çµè<%L2vo“ŒO9oç9Éèd’±ë|›d„Îs¶È5HF7Ác?#L2BçÇIƧœWÀùšdt2ÉØu¾M2>å¼–"ÏHF'“Œ]çÛ$ãSÎÉyF2:™dì:ß&Ý„Ç%!Ú\ƒdt™hsÉè$£›p„„ÖK’·ÎHF× Ÿiý7h½&]‹dDSg ]‹dt¨kÀ7–Ðe®ÉI\“kŒnˆd|°‘’dtC$ãÃp’Ñ ‘Œ†« ÝÉø`#%Éè†HƇ_<'ÝÉè&ü[„dt ’Ña–’Œ®A2º Xq’Ñ5HFŸ -/±f¾A2ú!’ñ±F*’Ñ‘Œ5R“Œ~ˆd|8\œdôC$£Ô!}ƒdôrE`àj’ÑgÚ+H$clŒ>“Œ^¢æBƒdôzÄ’dô5w“Œ¾A2z‰Bë>Éÿ§‚$#ŠvA2úÉè3Oç%žÎ7HFŸÏà^âé|ƒd<"$’Ñ7HÆÇœ¯HÆ'œÏý ô´/°õŠdô1ÁIFŸ -/±f¾A2ú!’ñáF8Éè‡HÆG)HF?D2>ÔHM2ú!’Qj„Œ¾A2¼ø<‹¾‰“0 ]OV¡A2z‰ÿ; ’Ñg’Ñ7HFÉB2úÉè'TJ2úKè'lEHÆ>¼h½"W$’±Eú|&öä{pp6¢ô¡—éCŸÏÄþ }ø”óJržÑ‡^¦»Î·éçœ×¢ó”>ô2}Øu¾M>弜çô¡—éîómú:Ïy ß ýôŒ>ô2}§Ÿr^çkúÐËôa×ù6}ø”óZŠ<£½LvoÓ‡O9o$ç}èeú°ë|›>ô—„Bó úÐg ÍKô¡oЇ~ÂZ/éCÜ:£}ƒ>|¦õß õš>ô-úУńñ¾EzÔµGàÿç3‹ä%É7èC?D>ØHIú!úðáF8}è‡èÃGÃUЇ~ˆ>|°‘’>ôCôáÃ/žÓ‡~ˆ>ôþ-Bú}è1ÿGéCß ý¬8}èôaÈTUø°Ð Ã}øX#}†èÇ©éÃ0D>.N†!úPj„Ї¡A† ¹"pk5}2¡KúÐ|!³„AâÖbƒ% z’’% ·vÉÿ§‚,! jÁ†K2Ñ$¢-4XÂÑA"ÚBƒ%<"%–04XÂÇœ¯XÂ'œÏý ô´/°õŠ% ³ÀY© Ñ^¡Á†!–ðáF8K†XÂG)XÂ0Ä>ÔH͆!–Pj„°„¡Á¼ø¼h½b WÚ"C>á‰Õ =88éP20Èd`È'Üp† |Êy%9ÏÈÀ “]çÛdàSÎkÑyJ™ ì:ß&ŸrÞÎs20Èd`×ù6ç¬Nha‚ÇsF™ „ΓO9¯€ó5d2°ë|› |Êy-Ež‘A&»Î·ÉÀ§œ7’óŒ 2Øu¾M† KBˆ…2!$204ÈÀ0á ­—d n‘¡A>ÓúoÐzM†ˆæcÎæ…P×ol^ÈœP8¡Ð Ãø`#%†ÈÀ‡ád`" WA†!2ðÁFJ20 ‘¿xN†!20Lø·d`Àl%Cƒ °âd`h1OQb·bƒ ŒCdàcTd`"j¤&ãøp¸8‡È@©BÆ'äŠ@¡q20' –)ƒä¿ã"aà¢D{-™öŠ j.JÄÓ’‰§Ø Ýâ¹Ã¯ð%|;ÒÆ’[ÛO›±d¤Jøv¤ n-NðIF|Ì ÒÇ…ÖóñpËÇü†Á»&ZlPhQ8vs -fº&JœPlPhqˆB{¸N¡Å! íÑF -Qh5RShqˆB“!ZlPh/>ÏPoâ È1GØ­(ñVKæ­bƒöжšüˆ‰Ð*á_A#Œž’¬»Õ‡®PvkcŽb>ŒE‰€hÑ^q›rÊ[E™·Šù0ÏðVO9¯$çoeÞªë|›·zÊy-:Oy«(óV]çÛ¼ÕSÎÁyÎ[E™·ê:ßæ­ óœ€ˆ Þ*Nð$Éx«(óVÐùqÞê)çp¾æ­¢Ì[uoóVO9¯¥È3Þ*ʼU×ù6oõ”óFržñVQ歺ηy«8áqI¸›Øà­bæn¢Ä[Åo'!¡õ’·Â­3Þ*6x«gZÿ Z¯y«Øâ­"ZLñ[¼UD]{¾O1ÓQ¢/bƒ·ŠC¼Õƒ”¼Uâ­n„óVqˆ·z4\o‡x«)y«8Ä[=üâ9o‡x«8áß"¼UlðVO”·Š Þ*NÀŠóV`hüüëóöë?Þ¿½¦ý•LYÿ¢¶ ìË×ú/áR¿×FÖæÑ™ÿðÅ]ôb¼.áÓAáÊ\¼ÙÿÀ…Þ4 ãðE‡Û’’ÎPìëÎ6”ðÍjodYüàÕ¶¤lØG˺}ŒÊ;S;ÿëçWÚH œIoóåõóçý鿨‹së[õ%|µZ“»•Y¡Î;ûÃë:c.û«WnQ±jýë/ÒH¸øÙ/:½ó¯ÇÿÎ̵óGÛû nƒ“¶÷Ó£­áiMà¬ï7…îûÏ+ï«k¶„o‹ùnç‹^× ïw欘qUÕë6–g9:†1a}C þùñëÄ·ê*ò_ü"Vë”ÒëþúÇË7Öú%è¥rþëWºE›‹Sê¿æ 8ë/jñ*Xðâ¾ÿ¸?ý—°v:íýùþúUŒ¥u:XªÖ_¿ýñ½ ýrÿÃ'sú²ÀN«2Ô_œñ‘tZµÿ¦]¼õR§UûïÛÙÝäîVDÐkçï6Ãý:½›eï´ê˜Ä‚]Œ3°Óf+³öXãMî´êè±v¬–4â½WÛ±éëŸ×?é´µN׳͟×OÚˆŸcˆzgTÑg«÷¾ bµN+‹²û`Pä(¹NUª‚o*Ð2Ûm­Ø†ŒÂ+U1dñÏÛàÔ>dÔñÿ£ÓKpÈð‹Yæõä´òeüº‚Â!³[­#ÃXµÎVû¹ÿA…4ÎJICæè6~q!ìCFC¦°Ÿ¿juY7°Êßþ ØlXŒpͬœ7î6Ûü2ÇÖn³vˆ¥~ö÷¿~Q+;{½l¡ûFÿ°qekPêNûÇ?¬õõí„mȼýóoõìµó_þÉàóýFu¿ÿû?þít ÿ—û¸Îiórã9þùd0nÙ÷ƒt²ú§p~^»]žÅY<gšër+ë{×ó:Sš}Óå,&«4­è½½ºhÝ1‹?°N³ð×ãÎÕD;·½÷û,–ÿ°N#ÚÔÏNlÒ€]7ûÊè}ÓdŽ^'°Â¾Òû^¿¬[zí”Ýg1ò»ÆèhÐdõ'…‡8Ï·n“f1ò‡µ+Ï`®KSš.ö_fŸÅ4Ý¡;-¬ïû•©Ë|Qz}»Ë>‹iº·ð.T½îŸ?^?‹[î–ÛDæºâ£ñ\§¥¹N“ÿï£^œ¬tÞ^ÖJ[¿OVy[¸î4£‹uŸ¿OVGï:n»Êm²ÒŦOVšÎIÚ…¸OVô:½R8YQ«uª½?û:YÑ?¼“•&[£eQ:OVš¹nâ'+Í^›Ûö´ÛdUÜ[œO“•f“•Vy²bX‡R€“k}=–†}²b¡›£Up²bøÛ²q›¬ô1Yùu»ñd¥ó°¶ë¦};Üm“•œ¬Ln$ÎÖúc²ÊXgàa²2Çd¥âmK|üêmÀêûõhb›TܺÞÕoè0ë¾.øu_wV¾o§‰4 øº;0ËwVÄjíZæ¶§-/OÃ]Õa›/íóΊ^g³øK}â×®­ï¶ÈoÓ×Áç¸mN2å‘eŸ†L9 Õv“ qݵ-‘ÛtÁwݘÂé°/Úç½ ûÃzRÁ{fµ¾¡¼·¡XwfAÁé‚ZY«oùëßøÖ±¸n/àtÁoh^'ä}"`XûsýìiV0|º¸}„ù·pk^wŒŒwöz/KšÎ÷‰€ÁuÄLžÔ¼®„.O&O©7ybV>ˆÙýwçµu%IJպ·Cè}"°y"X'`káæÄÒ>¯×1»OäëT§½›KSŽÌr["ùÕ-_.ë<«4ÜœÐÖç¶Sä6ð;ç¨á椸ôÃé}" Ê²k¯6'6ºÚø™-òÛxç’tÎ:8Þ­4Þ-Éëh¯w•Ûx'VÚ;çíAy;ï–«Ååí»ˆ(Z‡· ¾Ü׸4Þ-›.¬ÅÛfµN fïü6D·àí¿,óV,¾wö‡Y ã[ÙÛúþoáVbKïÌÊÛ¨öñÎþ°x£ðx?F캩Æçñn3+1/aöŽw'w—Y‰]=]ÜÇ»#¤õd¼»<mŒàÅM܇•37ö€þjŠ~=*8Þe£ÓŽ~ªTT×s†õÆÂñδò}0aïôwÍÚ ï®øR³Lµ.î¢â¥>ËlÃÚã53'‚ jqšpå°ÞG2ùòU¯2Û°.õ(Ý>’™¨¯視`=ì#¹¸ ^&¶aÍ­‚ŠûHæ@Ýæ[e¥´ÝG2s~Y¢…ûyf5/Ç~žÿî –‰«Ö—í$µä­ˆ÷óE#Îç‘L†’òàøÖ.ëu[¨¶Lm$ûÁý¼ß‡µ]w¾~9FrþC ™û°öǰVv ûHölÈØèà~ÞÓñn©å__iÁTʉRÑ`¦”êÎ¥¬ÙG2]7p?Ïq³1Ò.\7–.Ð{i‘¶ëì¼-RÛHöÓ©áí¥äP?´@û¬½©gl#¹”†ppfb;ëÆÌí#™ýa1`[˜†5·òsØG2—gDÜEÖÜ*,nÉ\äoŽ.Ð >ö‘\Àg¼@sø|[aÿ-ÝšsZ`±@óg_\ØG2‡+ðíó¨^ã¸ØcCîóHNK”Æ_F‚¼@‡üu@+cœ°@g+½Räs^8¬Ñ!ÂW–‡‰×k­gòõ„µUÃ5ŽÃã–“ÅeÖsº#;êÔç-ëÖQåoR¡Ûç·È‡#òfñîø&Ž6aÝmâ£P”#÷˜®ë£«©{ä³Õº…1K8"¹j Þ#¥ÈÇ#?oÞ¦!y–}‘¨Ÿ*}]d¶ÐÃÈÇ#ðë4«¶/à[äãXäãyïB8ú|ÌéÇëkÊ%¼®=qóöõ¿®I@p-Áu¡g/³Ï£ÜeŒ§]!„³Ö{o½LÓv°õ:ÅVm© }ÕAxAD/³¾ ÌEi¯“ÍÍù:‘ÐCxÙºÚáeë ÀË´&eÖ¾ƒR‘Ì’óO¼xíë{‹(ÿǹ¥>Ö <écÞ6YUI7ëI*9ÿõÇõû·”ºòÏiû÷öÇ—?üàŸëדô[ч . VzÈÊ YÙ!+7d凬ÂUìY½üC³#R­hT­6‚•²2CVvÈÊ Yù!«0d{Vý¸²äŒE… X)–n+Mç== V”üv& V”2ó^ò‹´ã-OX‘¨®›kÉ{U¥”ô[‘NP3°úõó;Oy‰³¬h_n¬ô•²²CVnÈÊY…!«Ø³úùúÂÓêü+6¯*#Xé!+3de‡¬Ü•² CV±¶úó?jõúíúÂso«°RÌÊ Vš-¡Q°2l9U‚»Ñ,J-2ùÜEú-¦«¡‚`ŪŒ¬hTÕm6áVŸ¯?ÿ/Ï µN°R¬n V4ªy¿YѨj§+vgø¼VìÒ#ýÓöŒ³`ÅV+#µÈV«žñ¯j`•`ÅöÊ Vl%+Ug%¿Ø½‡Ê Vl˜µ`Åf€ µÈæÕ°V¬,l3ÀõƒX½ÿƒ§+/ë²m°•Ê'Šy±qûš¬îQ]Çþ²,1¿uªö—~+b+Kæ’Ë-;X1 ê‹dåÓ¾åyV)=žÍ…ê±MŒ¼,[Ê °ÒÔ­°¥ü+CÓ¼~‹}@t^ø-F,»ÀV\iÞ‚H¼üøÎw0öâ°Õ=Þ®q×1xluĺ¶8çaŸHV÷H¬£Ç§ß¬,}?F Þ׿ VT¤+e¾ÖVþúuDšé}Œa¶ØJÝ·—ñ²ŽÆÛÇq`¥ï[èùüý>°ºGÂûË–¨ ¶Ú#±ní­ÕQhÑeH…Õýˆ­¡“DFDóW²2™¤›Íú[B‹Çåºë ûW²r¬ ÍrÉŠõ ï@$>ñ*'çÐèHVŠìÑ..jlu„^§%»FL°2¹Ók£à:”¬,­r~ÁVŽ%öi‹­Ø<¡5xßÿü—ÑØJå@J}Ž[éüŒ>!…­ Ý›„Åc+6:‚‰ØŠŽà,¶b£Ã0jÿýƒ2Sç¬ÔN^lÀ{€d¥sºó<ŒD²2yRJéÎht$+2cš”:„­øÂ’K~ýúùŠÎÛÀŠ2nëb±=ì ˆ`EÏ0ë"Xñó¶dÅ/Ç’¬|_îÉ?ÙèPs@û‰duŸ1×ý׬çè-¶"™ý~c(Y™üíĆΫÉêˆÄº=Y¬ÇVŽŽ4c¿<i j1U¬ósÇrÁV*oÇmÚË-ØŠž;Ö&5¶2y^¿EÏëþWø-~CkGyµLÚº£žÃ¾˜uÆŒØJÝw¾öÍì¼ÁV·H(­Ögtë:Š­Ì=êë²gxÊLV÷Hl•·.¢µ#Y¹ˆº„hà®6Yyºy|ãkÇÚa¶º÷ ãÓ‰"zá·öU4e„yø¶“Y;|ÊHÀV–Žÿ µX\ή±[E<½³³è’filµŽ9¹Â=@²ÒÇ  ,Üc&«}th1^ÉŠ­Á¿Å×/ü[;Zù>ÿ/[EͲÀÕÿÍ«¨Vv]ÑZ‡’Õ}t¤Óɼöû€­öUÚZ­CÈa«}t¤<ƒÆ+Y92ݯS˜ÅVlt(´³úùÉ™@µØ ¶ÚOå&•8F´ƒIV÷Sy\­”‡§“duŸ'BZ‡ì< ~åݶK EˆŸHV­Ç¯ÅÝ24•¿O¼q}¾ÇdîVËÅøõ,í±U¼÷Ó¤•¢ç­Tˆñ…¯ gÓ8ÛÖÚªdÉ.qËz*¬Þäþçmç^XœÂº(ð[ü¼½®µvK+¬Ê³è:/µUqN[Ó3h±8ìãLƒ‹ýýr¹)"”ñb{ß4аâûÂ%寠7tì™Òy?Í•¿Åöë,¡·þUµøü–Žœ _퉈‹sµëëV(šzxU¬O¤œò¥Þ¼*Þ'.~¶üí)iÒߊ +Ö'.KPÎéÚŠ÷‰Kª)‘`}"Õéküb}ââf¥ëuhéëñX¹[ê_aEû„IµwQGð†Ø>Únêà·HŸPI<#Ä€Z<ö_:-hª^·oóÄÎç¤*e´{¼Yíßzš3ó\ó˜7«}­ÓoY%´hó~5hk•ÃV.nÙVhñ¾Â˜pÑÁ9/´òŽO©õ Ï÷OC­µÀ/þÅ ©X¸€­ô1Ò”±õÙýferb=ûÖ{Ì›Uf‡×rõÎêfårÿ²!ØEðËÔ°^×?Á*ä½Dë¤ßŠyë¸Ä¨ë³ÂmíPyfZÏ}`E¾Yíg¾uL3ÓBØô´'WaF~6}Ý2ig»`+w5©&%b+Ÿ‰yeü­ÎXÝã¥ã:Ú¸l÷„§´• XQÎ}}Ûaö`l/„sOòÊ:4j)çn“Râ æè…rîɯõ,-ü–Ëo[Yü±O00n7«I_£µB‹ñXö‚Ÿ=ˆ× ‰×ºG·è€­öù+±°vY„ß2y–‹›„¶²™ÒëTîlåöÏ÷i³íµ`µÏ_é ´±Ø*ìæ/‹Ž³üºÇËú˼F¬ áï·¥Ï(ë°•>>Q¦¤há·ÌñÉM™8 Vö8 éuŠŽØŠÖ@¥Ó;¶òÇ9TÍ‹ÑØ*d+;Gƒf¦d ÞGæèƒåßæBmÀ·¹›•>ÎÑ‹ ht–?†ÂzÐØÊæÑáÖIÇFlåòèXÖÅÖ)låàq¶‚_!oV—y™½ðŒ‘0 ÆÃ>A¾¬sN¸×+}Ì9V›Ùc+sÌ9Î ú- $±§„Ýñ¥)¬€ð[þØk›t”ÆVáøk|D;«dsTuê„À/úÅÀ$É …úùbæûõ5¢y•~1°éËâ‚V+úÅÀ¥9'á·Žù^¯=ÍÑô‹Áûõ@1 ÏxÌ÷Áy%µxÌ÷f}H úù® ×½øï I°ÏD+“ó¢Ö®ãÐ{$ßlÚ‰:ÖGú]ÁÍ[Õ›ÇV>çÔx½îï¶ÚãÒwkµXluWÜd,õ ~‹|}P&}ÚÒh§@¿>¨5`ÞYá·LŽ}X_ò‹|}HNìPŸ _ÖÐëtˆñØÊçØ¯'ë«}¿nf3­b޽[ ò7Š´ÐI­"`+O:6Ä[19°:˜ùu ‹`eóIGÏz‚•ËìpŒë®Öa«=^öâ]T‹ðŒ!S³¨ç$«˜3‚ÖÎ5Ãþu|ÉXìvæ‹[û{“„g"¶:ö÷:•Ãjles^ß⬶r¹Cf+xŸ÷ëVÁ:%ørŽëFÍD«Ø¤xÅ­Žïé¼½î|½³Øê8o;o¬wØ*Ÿç´¼á·lމ΋_¢ÇVÇy{==F´Ö’ïëyÛ­›_¯±ÕqÞ¶Ë wµÉ*’lÌ‹‘P„ŸH¹_1@Ö‡ð‰5ñäúܬL^ùÖe[[ÁÊŸDUœÁ^NÑ\ÅõÄj‚#M~"%:‡Æ"üÄ’tUˆ‚UÌ»ŽÄ3y½Ë硵ŀfrEù‰¤Fé#âå(?‘êË}D±§üÄêýzâ‹‚•;>§ëÙÕ]Q~B%ÜG­B¶ ë í-¶Š»’>ÌcªƒA¶|­¹Yû¯Å­Ó½ÅVæHÄÐÞƒý„¢Ù~k§W‹Y~Õy°Z¡=¹¢Ù~k_³òB‹y?±ö¯Àž\~" ê¥m0£Kú—Š Ø‰*ÊO¤3²š­ð[¤©uÿ展%Tí‚VEù u™×™0.Øêè_ë©|khj”Gñ"üÄÚq”Z£j0·}Ì_i¿ê¶Òä«¢vZ°:æ/·ºo<¶:æ¯õ%°ÿR4sp]ÓÖmí,0óÇüeÒt"ã¼Nsh­%üIJ΅iž1dÀ… à©éà'RjÔ:6Ð)€ðÓv€¼‰¢™–fݯzm…ß:øÕÔ šWi¦¥]ãµ.0Â7ücï½’_ž¤ç-p}¤·{¯=Ç8x®%üÄÚ%œ ˆ{T„ŸØø{ã‚`Å*â”õØŠð÷~F̼"üįߝMFlå}¿·…ßò„¾OçrlEø{{íVÇú¸®Ža{¬2›åO¤/×*©×VôT¾žNœ†Vô[yòË-Û®¶°â_ˆ•3ʿȹ#e¹ ð[ükàFÄÚŠî1·¼m5ïéÎÊluMÛ¼ZXÑýDZù\Øf“2^Ç*ºeò.·ìÛŠ¬éÓ¯5·U¡|C„Ñ]’$›žA¼(¹î:Öw½})«ZüFÞö:Þö¾,ë½(ÂM;Ö¥Ê8{/SïÖE&V™]ïEê]"‘¶>Á­Êr¾´#ªòÒÞ_Ê¢¿uB©«L½[îW®q«"õnûY·X–¥‹µUUZs±À¯¢ì$x¶Êª{§iV)v± «î½(WXRÚÖRÿV‘ÊŸîp®3Ÿ)A¹ö{µ¤Î ­XyÇý¶®ÚÊÐbd§…ßÊ„ˆN2{R‹îxÀ°®U –S«tÕC’‡Vá(¢ðÞ逽τˆ];ýzø­s‡YÕ:,éA+}tå`­ßYɵÛN™‚•%I)k¯ZtGožSÁ»ƒVþˆ}Œ‰{€Váè…ëªmAõ%(SVŠ‹ÔóQ‚rÝc®»mp2|§¥Jߤà™Þ)A™”l×Ý#ȬgåÈ>]R€÷” Lìvï” t)“D9+…O!%Ã.Ð*o`RÈ ²ýÞyÑòF€ è>SQ?¶bR<ëñÊC+Ë”ðž”)ß7 í­ü‘V7ZZ‘ñ8§«…VD2"]#*g_x¼Ò™TÎR‚2q ‹™ï” \¶ÚyÀœ¾S‚2}lž£~+ðSbú®ðNK›íÕuöñ"åÖ3ßb‚ð[ñ(L™tjz/¶LÛvÎ@+}ÌrKœôÐÊV1ÎZ°²Ç\¸N÷‹`åÈ\84O0‚2¬c[ƒüœwJP¦ÂS?ká·âÑ'Bôè ÑÍãm+mÁÚA Êõ4gq55%(o´‚ê” 4)7j–~k—]÷K V•R‚Ò­'°T¿m¡Uî_~«) دܿ”TùÏ‹©·Óûì hKœ¡•!«»^×!­Èü¥×Ãá UN0V©€4š@eýzÂ×AxÆ<߇$“@Ÿ ål/N«ÕüEú¶ÎöP=ƒÝ”êJõ­á6+­…ß²´^iÌ´rGHÓ¨Þ–\›yí†ó¡Õ/kÒ)sF•ÿ„ ô›LBp`×q­¶™|}C`l‚rÓy0½m–@• ç=ª£…Ù6åÁxíñoeBdÓR OÐÂìraW¿´ ÇL®•Qû•?H¹ôµFÕß·ß)A™f¦µS€ß¢¥Y­tŒÂo™Ãûu4jÐ )Ai“>“A‘ eL_×1â¡ÕNèÚ”S3»{¿'¸¨TÍ«‚Å-î .©ç$‰lpV 庺§übP{J Ê´{4q~ˉpQ+T—I Ê4„Ö. ªƒ)A¹Î9q}å B•y'U]o¢ Ðj'(£MIçFa¿v<•ó»t“iUBP®{g:ͱRðu˜µ¬Èy(1î`þ*JÁSq°ÇV$aÖ¹0 -úcã«Â"Y¶Z9­â±÷]Ö©0Tœ?oëDÜ®RáVì”™.ïÑv˲àVìlµ¤ ¯ k+v¢Ð©ŽbY*ž‰ï£ýeB~®8+¾{L_bSöpeÅ>êªíYmêߢ;…8¾¸Ô¿ÅÖG—òDo™E¼èªò:ÒÝ3•› ç4çDåê7Dg€t§f¼åÞ¿EûýVè·ïe½(¹:±w^kPqÉn¤N3Àm.äVª¸Rzý¯V9|UÅíÖ»UYmAnúMU`÷»€•>¾o{§Qv$½ÛN_¼u eûÑ‹¯R…—3°:…\—³³yžQ½}c“³z7«@:˜ (Ÿœ¨Ûoœ•ö( ‘^¿<%M8T³¸ÐMSÒCÐA°:òfª®£¥¤4ˆ°•#rFY< ½eËŒ°‹ðŒdXx\8pû¾è(-CúWª=õf‘þ•äzøµ†ö¯)ÉAÁ *Ú¿–t®W‚_Žd EûWÊSX—mÁêˆ×¼¬‡9‡­"-+‡y¼-뀲xXÿº$)j#XñZ;×b„¼¡uƒ 3áXÿšÖ­¨öB‹žd*YjÝí_Û…‰Ê ¿uä Ùtd]À÷¡ÿð»o2úÀJY™!+;d冬üU²ŠµUÁ UKXÞ« ŠVzÈÊ YÙ!+7d凬ÂUìZUK­AJBlhï«$´ÒCVfÈŠGU>Á‡v˪ˆªÂ-†!«ØµJwÕð¾ºî® UÕÿ–²2CVvÈÊ Yù!«0dUñõôç8¶k+=de†¬ì•²òCVaȪ?¶“Uñ…hß.uXÝ[é!+3de‡¬Ü•² CV±g¥êxiÁJY™!+;d冬üU²Š=+=/=/=/=/=/=/=/=/3/3/3/3/3/3/3/3/;4Ù¡ùËÍ_vhþ²Có—š¿ìÐüe…ù‹í¶ÿ¸þúþãO~MQ}W{ËÃú·þ÷ç¯_ 73¾¶úøøYXÙKÅ*þ若J2G•ÕçË[Ù"°zýþoan·ùß÷?K+w©Ø»ÿýûÇ ·Juê•Õ¯Ÿ¯ÜJ/—ŠqûߟÿVVKöýŸß×Ây}©ò¿¾¿|þ*œw—*ÏêûÒ í'¾¿UVøõãeè·*+}©2»¾ÿõÿ}+¬xÆÏ‘ßz{­ö…—*ïûë¯o••ªûý럅Õ¬¾¿}ŒøU·âõÏï«?¿þ°zy{°úý}įÏþ²ú:d5â×Ïבgüçÿ Eâ¯>°´b¬Ì•²rCV|QP[…!«8`õÑgD6+3de‡¬º§Ìͪ85 ÞóH,‚U?i¤õ#‘¬Ì•²êG"Yõ#‘¬ú‘HVýH¤Ù¤‰de†¬l7Ù¬ŠÛAÁo¥µCY™!+ÛW²rCV~È* YÅ®UZ»ŒÛfeº='YÙ!+7d凬ÂUìZ¥=€îö¯dUDÂ`+Ûí9ɪà+?d†¬b×*­îýH$«~$’U?ÉÊ ù凬ÂU?iÓŸ¿’U—9ݬúóW²êŽdå»QMVýÕ=YÅ«¯C‘ø:0“'+;d冬üU²Šoèe(/C‘xŠÄËP$^†"ñ2‰—H¤Ýv?ɪˆD}Ófe # ­8ÕV¾0¿†¬b×*(ö9«•²*úÄ·èú»¡ÕÊwçèdÕ_E“UM§¦‘ß_C;¾¿F"ñö×H$Þþ‰ÄÛ_#‘xû«‰k:5ñï¢àöÊkÅÔˆV9)Õç~-N™Ê_BÅs-N™)EzÁVüSgF\ƒÄ¾Å¥¾QëZòL²U®NqéFPSgmV{¹{ÒB4è’‚UrË@+sôè¸>cY¿Y—`Ü¢ãD`ù|MÜ#ÿ¢®ãZ1zÕ€ûa6+6Ë)}1ЊÍrñR×\ß*¿ ˜JN4Ém.Њûu‰ZÎOÖkÚ5yŸ7]+V´ÒCVYšA_ÖA nÀ¸Vçmã뛘®ô¼­ÓÕ‚Fú-v |CÅy;I¯ñâ)Hà>ÖëG9ÒR="´RCVzÈÊðÑQW6^«³»GóDyvÇ«Buv_;4¶ Œvù…×êì¾̯?ÊÌ.пË­4ÿ °‹êE V–oj=¶bóW*¦ª¬Òׇ¥Øæ,ÐJ Yé!«"%°®Ú¬Š”À:‹z³bëÐTàlVEJàŒ­Ø.-‰0C«bç^ç¥]Óך¥ ɰ­çSIäZi6ЀZøfexºœð[–wû:cöš¾"1o »ÒoMI]J+´Ö&+ÍŸ±®kÚ¬ ›¬ð[–/C¬Ve^gV­Ô•²b+_Ò¶†V9‰z«¶@kÇ[Ù£5¸Ùq³òQƒ#øì[k!nV‘Ï«sõ•òZù_·®õ—É*v­^j®V° CVý µøc¨ÅC-¾ µø6ÔâÛØ3¾üêgnVnÈÊY…!«x yÿ6äýÛ÷oCÞ¿yÿúc¤Å×#-¾þh1Í÷nÈÊY…!«¾_i&wCV~È* Yu3S?Þ>Êl¥°U±ÏY°•²²CVÝ/›•²*¾óElU|ç uf×·ŸEíÃglU¬µ‚_k­`Å¢ª%+U+µÈ¯¹–¬XTc¬[·=è9?¾½–»mÁªÈq¬x/´[‰ƒ‚ï…à7+^€3 V|o¢+^€c«Øë9oß ³)Xl¥º~%+^Öd+~†q‚•íŽÍÊñ.!X±¨*/X…ÞèØ¬bot|¼¾”©ŠàÅf¥‡¬Ì•²rCV~È* YÅ+Õ¯EÚ¬ô•²²CVnÈÊY…!«8`¥ËäÛÅB+=de†¬ì•²òCVaÈ*X™"¯T#nVzÈÊ YÙ!+7d凬ÂUVlÇ·õÂ¥·/Üb?beú5ž¿Ë}3ܬô•²²CVnÈÊY…!«8`¥ªle ­ô•²²CVnÈÊY…!«8`¥Ëþå.ÐJY™!+;d冬üU²ŠV¦¬X°•²2CVvÈÊ Yù!«0dŸå~͘¿‡fÌßC3æëëKY\k3lVü=^œ…Vü=‚¯n›U™7 U™#¡U7?z³*v¢ ö«8•×ß~?~×ñªõÉ7+ÕËzÚ¬t/i³*ã…ý²Ý7ô»Žˆêï2^÷J—ÚªŒhñw¯EA+ÕËÿú¸þ\xuÚeQ½òb±†•²2CVvÈÊ Yù!«0d¬øœ“´£´RCVzÈÊ YÙ!+7d凬ÂU°:æèt9ÌgÚ¬Ô•²2CVvÈÊ Yù!«0d¬Øš¦5ú¢¾Y©!+=de†¬ì•²òCVaÈ*XÙÕT^PNÍf¥†¬ô•²²CVnÈÊY…!«8`åÊŒ °ÿJVjÈJY™!+;d冬üU²ŠÀŠíj_þù\ú{ßÕJ Yé!+3de‡¬Ü•² #¼ÉÏeÈjäÜñ×ÇË+,ˆ×ï2ªZ}VE ¿K¿”EVÅo© °Z;!÷+è ²*ž1"¿ÖNÈý2Z=ÇÔ¹wï__¿ýñ®DæY‘ûµwÍܬôn³ÌÝ!q³"÷M­ë¬ŽêÀ‹Qòk¿P:Ý—)·èÉë N² ‡•;«»ŸÁ¼š¬>‹;'%+El,¸1äf¥‰•2F°2ä5ú+K¬´V‚•#ËPX$¿<±Ò³¬‰Wt’÷4ªÜnóõç¯X_ML°RÄ/P{z·ÒÄʃ5ífeèâŽb¿YYb…îú»Y9:1É/O¬4¸£äfE£ºhÉûH¦¯`pTY_]_·¬TVº0$VäÆ9«•deòGY+þ–%gýr¤ãx±E2¬g0%X² ¡[wnV4ª°Å¾|/î“Õ‚í«j^+ÚWgí+CûzÆÍÊÒ‘6KÞÓ¾ªÉ/O—íÅVÆk‘¼§Q5à¯dÅúªº%X‘[]¼¶F°Ò$ÑHV† G‚`Eúêb´ä9pËÇÝÊ““‚¶N°"}Õ8'ýªw±}ýë…Ï«énÁJѳ4¸ëf¥É©ÃyÉŠœF£G±ß¬ŠÓ¨`EO£^l‘žFá¨Ý¬ÈiÔ¡û‘oV‘&’(lõÉ£êÁŠDպŠVšŽEj‘0'Ú*#XQæDi'X9zz ’_”9Ñ:VŒ9ñ’÷䌿®1`øý×ç÷ò–qÁJÑyÜ…{³Òì¬à+ö÷J°²ì4+ÇÎ0’_žùŒ`XRŠä=͸hÕÏ¡¨~Eõs(ªŸCQýŠêçPT?‡¢ú9ÕÏ~Tüúù¯VpUøEåëÚÙVšnøŒdEf€hàj•¬È à虬[$«•6pµJVdµR³“~‹®V³Ðb±€{“_?Ù Ý|*Xi¯E V†20Jò‹DÕá]Z²"Q5‹–üòlŽ‚‰ê½ä=™W£‰1Hß«=le†¬ì•²òCVaÈ*X}Eâs(ŸC‘øŠÄçP$>‡"ñ9‰×Ÿ#}âõçHŸxýù9ô[(ª¯ß¿ýñëÿ÷ÿùÿbËFÀ¤DyLP-1.10.4/Data/Netlib/ship04s.mps.gz0000644000175200017520000005176410430174061015604 0ustar coincoin‹ÏK®9ship04s.mps¥½[nt»r¥û^@õA01ãÆËã>u6ìÊvaÛåSýoÉaJÿR23Cc„¤mÀXZR¬orΈ ãBòßþö¯ûüßüËÿüß—ÿÇÿoÿø÷ÿoÿÿ·{{ûÿþÿ¹ÿéŸßÞþñ÷þ×ÿùoûŸÿ×Ç?ÿíÿ~üûÿ¯|þûÛ?ÿõï?þþ’‡Ÿtÿô÷ÏŸìáwþð»xø©?ü4~šç3½óî?éÃO~>ñ_Oöç§?Oöç'{ø?ü.~ê?‡ŸæùVþz²??éÃOþñÓþãoû¹þúË??éÃOöðÓ£\<üÔ~?Íã'}àéOxúÀÓž>ðô§<{àÙÏxöÀ³ž=ðìg<àùÏxþÀóž?ðüçï¼ýÝÿŸ¿ý¯?Ÿïó=°ó?ˆó‡~þ0Î8ëøA®ó‡ó ä|9Ÿ@Î'ó ä|9Ÿ@Î'ó ô|=Ÿ@Ï'Ðó ô|=Ÿ@Ï'Ðó ô|=ŸÀÎ'°ó ì|;ŸÀÎ'°ó ì|;ŸÀÎ'°ó ü|?ŸÀÏ'ðó ü|?ŸÀÏ'ðó ü|?Ÿ Î'ˆó â|‚8Ÿ Î'ˆó â|‚8Ÿ Î'ˆó úùý|‚~>A?Ÿ ŸOÐÏ'èçôó úùý|‚q>Á8Ÿ`œO0Î'çŒó Æùã|‚q>Á8Ÿ`žO0Ï'˜çÌó æùó|‚y<žÞEOwÑÓ»èé]ôzø¯ó‡yþpŒGOwÑÓ»èé]ôô.zz=½‹žÞEOwÑÓ»èé]ôô.zz=½‹žÞEOwÑÓ»èé]ôô.zz=½‹žÞEOwÑÓ»èé]ôô.zz=½‹žÞEOwÑÓ»èé]ôô.zz=½‹žÞEOwÑÓ»èé]ôô.zz=½‹žÞEOwÑÓ»èé]ôô.zz=½‹žÞEOwÑÓ»èé]ôô.zz=½‹žÞEOwÑÓ»èé]ôô.zz=½‹žÞEOwÑÓ»èé]ôô.vz;½‹ÞÅNïb§w±ëá¿6ÎæùÃ1;½‹ÞÅNïb§w±Ó»Øé]ìô.vz;½‹ÞÅNïb§w±Ó»Øé]ìô.vz;½‹ÞÅNïb§w±Ó»Øé]ìô.vz;½‹ÞÅNïb§w±Ó»Øé]ìô.vz;½‹ÞÅNïb§w±Ó»Øé]ìô.vz;½‹ÞÅNïb§w±Ó»Øé]ìô.vz;½‹ÞÅNïb§w±Ó»Øé]ìô.vz;½‹ÞÅNïb§w±Ó»Øé]ìô.vz;½‹ÞÅNïb§w±Ó»Øé]ìô.vz;½‹ÞÅNïb§w±Ó»øé]üô.~z?½‹ŸÞů‡ÿÚ8˜çÇxüô.~z?½‹ŸÞÅOïâ§wñÓ»øé]üô.~z?½‹ŸÞÅOïâ§wñÓ»øé]üô.~z?½‹ŸÞÅOïâ§wñÓ»øé]üô.~z?½‹ŸÞÅOïâ§wñÓ»øé]üô.~z?½‹ŸÞÅOïâ§wñÓ»øé]üô.~z?½‹ŸÞÅOïâ§wñÓ»øé]üô.~z?½‹ŸÞÅOïâ§wñÓ»øé]üô.~z?½‹ŸÞÅOïâ§wñÓ»øé]üô.~z?½‹ŸÞÅOïâ§wñÓ»øé]üô.~z?½‹ŸÞÅoÞåüûÿú?ÿúo·tåþßÿþÇßÿù–ùH\¾ÿÛ `íí¯¬á_ÿ¶ÝÂùù>¬ñŒáó_½ÝÓšñç¿z»gøŽû'iÏâòHÏÿôWš1ŠCÔß QÙQ?ƒÙ¯‡¨ùW’Å¥«Åñ—!¾ÿÕ}ˆZþ«ûWÔ/‡¨÷¯¨hˆéWœ¢Å!êlˆ ‡øùÁý [œWIQ½b‹^þ«ûWô/‡è÷¯èhˆ– qǽ©-êòLçƒøó?þ*"þ«·{ Ñ>c:4DϾbRüŠþ»¯èì+:¢.,ó!þûýã‹I£_ú>Ä‚ÎùyÛGâéAü£˜óüWo÷ŠSEüù¯Ø¤ñ)'¿Ò|ˆV¢þnˆÊ†¨pˆlÒ¸ýU>i í#¢µë}Ýò þ2Ä÷¿ºQ+âÏÅ&Oq8i|üUöÇŽ6‹CÔß QÙ‘M·¿Ê'ès•Õ+¶èñç¿b“Ƨ8œ4>þ*›4lÇ/é½÷Ø÷Aüeˆï• ˆ?ÿ›4>Åá¤ññWÙ¤ãcê/|EÿÝWtö‘Lÿñ/73MÕº7Ñ/V‰‰xbðÿô>ç þ.n ]lµÑýN7,þ§.ýzf¤Ñ®kæf’ˆ'fR¤GF_W‹~¼ùÀâ*ï? ÷ì͇·ßé‹ÿ)Êþ€>3úˆfr¼ù‰ÅÿÔ@ÏV1eë¼çK•D<œtE:ŸÐEšºÖt^©Î+ÒùWúˆ«=D…ŽÅ‰Î+ÒùWúºfóÞk:¯Tçéü+Ý»5×YÓy¥:¯Hç_éÝfÞk:¯Tçé|2[Ûµ?ü¨é¼Q74Ë·8Åâd–1¤ó¯t÷Õ–uÞ¨ÎÒùWºíE’L¯é¼Q7¤óÉwÙßÝk:oTç é|¦u¢­[Mçê¼!]¾©X³ªŸwªópeõJïÒ[³¦óNuÞÑ,“Œ}¶ÎÖ°8™eéü+Ý–´kuÞ©Î;Òyç¾®cq¢óŽt>¡íë®âÚÆ©Î;ÒùHÆnûÕkMçƒê| dŽÛæ.½¦óAu>Î÷´†Å‰Îše²7¿§—Ú,t– ¤óÉØ×ÚÞ¦¸žªó€>º_{èç›XüOåè3ûÖ:­®¬‚Z\ ‹ë¯žÖ­­Qœe:µ¸Ž,®óhB±8±¸Ž,.{߾Ί³L§בÅeôMœ³ŒcqbqÍq¯t۱̊büÞéב½'cmE{ïÔÞ;²÷žŒ<šÖì½S{ïÈÞ_é2cGE{ïÔÞ;²÷ñ:vÇ8N°8±÷ìý•n±×u«hïƒÚû@ö>’¬‘îÅEq†ÔÞ²÷‘è¼µ1‹qÜ ö>½'ôyµÅ5í ö>½'Z'{ð5{ÔÞ²÷lìÞÜŠö>¨½dïÙØ×Õ®b9¨½dï󕾿û’¢½OjïÙûLrV›>Š+êIí}"{ŸIžVÛ<óu†Å‰½Odï3™a7]‹ö>©½Odï¯tUÛk›âü>©½Odï ý²Rœß'µ÷‰,.ûjzÖ&&'7‘Å­W­ëkÇq³fq‹ZÜB·‹[{eUÌÛ,jq YÜJ¾{´Õ‹+êE-n!‹{¥›\MF±"¶¨Å-dqÉØ—µKŠ3좷ЗÐýjºzmŽ[tŽ[Èâº6Ýk·¨ÅºÈÅ=­`qlq·¿øÒdºìï>®šÅÝéúº%ô­vÞŠkÚ;Ý~@÷„î[ëÄj1ìî? G6vßü%%‹»Óãôž¾ùmÖÖ´ŸôøÉwŸ݆µU[U~ÒçO¾»HRß3ìŠÚªR„Zœ ‹KÚ“úÕÛ5‹£]ˆn Ý.o—׿8¡]ˆîÙ›Ws)Zíú@ôHè.³]Å ¸Ð®Dï ýeŽëXœXêúHu>ÚµU¥Ð®Dy­¿ïi»ÍâªRhׇ(²¸¤÷@¢u©UÀïtýݲ±ÙÖªÅqB{NÝEy¶Ð±8±8Ôs’ÐMG3¯ÅqB{N½gc—1Ú¨Õ"…öœ ú¬|÷‰Å‰Å¡žñ„¾ýü*®*iý]Pý=¡ßv‰Ô2¥Bëïˆn ýÅÓ'çÈâœ×¤‹‹CÕÿ„î&;‚.Z­þ#zÏÆn{~Ÿµ./¡ÕDŸ™Î?÷UN,N,Uÿ%©„ÙôâG«ÿ‚ªÿ ]v µ¬8ÇÑê?¢[B×¹—´Åê¿Ðê?¢{Bi-ÎïîXœX\ ‹Kêïs´u®¨‹‹C½Ù›ÿŽÅÑÞDŸÙØclO[ë·ZýGt‘Îs‚ʼnšêB³í赘9¡ÕD·„®{uaW­“YhõÑ=¡[H›½¸ª¤ÕDŒþ7¡ÕDï™Öõ«õ«ÇÑê?¢ÏLët¿z+fNhýÑE¯þ '‡j‘ ýͬÉUŒai-ÑE’Zä^©î¥Umì´)¨™ÐݵŬÕ"…Ö"ݲ±?w6'ÞÕ"ºÌÙÞÛ5+Þ†Ö"=²7¿v7‹+jZ‹DôžÑŸ×ó‹oƒj‘Ù›×ÞtçwZ‹Dt‘Ås•‚ʼnšZdBŸÛâ갊ʼnšZd6ö­ó½¸SIh-Ñ=¡¿DŽÅ‰Å¡ZdBÙXœXÜB·’ºŒêàk·¨Å¡ZdöæuOï£V‹Z‹„ß]“j ÍV«A+­ˆ)ªËh’ŸßZw#h¥uEu™Œ¾VÒkëy¥uD·„ÞÛ(欔ÖeÝú^Rk³Úz^i]ÑCÓÃ3†7+Ù»Òº ¢ÏÊØ'LJèï{½1Ç)­Œ(ªŒ$ô=·^Œa•VFݲ±÷ÞbÔ²FJ+#ˆî ]·Îu­ÍqJ+#ˆ]VóbG«ÒÊ¢÷„¾—W+ưJ+#ˆ>Uyxbqbq¨2¢Æs•‚ʼnšݸ ½wÛ«ÊZ§t7.¢[BÉÛ'‡ögo~ûºQÜ ¬t/0¢GJêê ,N,íÆMèßÒyºk]’!×=ö«Ë(­(ÊÏkçÙÇâ代œ•ŽßÙ;ÍY)Ú3’Ð_öE*'oíÉè±×URœaéžD÷„þærµQÛ•©tÏ¢GB9q"°8±w´g${óº#©^«Ë(Ý3‚è3£?ï›Xœx”)ÕÉ÷¿ '‡òu:y§S`qòÝQÎJ“ÜŰf«8vš³R”³Jè[ãöü^ô64g…è–}Åã 3†Å‰·¹‹õ«¾ ¥9+D„¾§ØÑ¤èmhÎ Ñ»f{V[³¸ž§9+DŸ ]ÆŽãŠýóJsVˆ.öš³Š!ÍŠ{ÄŒöÏêŸÏèæ-¬¶ž7Ú?è–лK“Uëæ5Ú?èžÐmhźŒÑl!¢GöæŸ3fűÅ!úLè¾=­³FF;Ø],;»¯·kužfJ e -‰ß—6/î6š91”³²ììK_;–ªY  Ű–t¸Ål}ÖzŒv÷ê-´¤ËËW‹Q|ó´ÓÉP¯‘%qÜ~ÞVœeŒv>Šã,é=ímŠ­Fã8Cq\B÷=Ãjqï¿Ñ8Ñ-ûs§“aqâçQ—пåçi‡è‘п³Øh‡è=£?ï ìXœè<ŠãìwqœÑ8ÑßO’yétÚ3¬gÇêx±,Š\M¼èçiÇ ¢[Bßî¦75‹£/ˆî ÝÆh½x:®ÑŽDŒîW›Å̉ÑÑ{öæ}[œ-Žv¼ úÈ´®ï)Nj;‘?éý'o~¦:ÿt.ñÄâÄÞQîÂVvÎÉjVË]Í]Ê]$ôïìÒ2š»@tKǾz“ZîÂhîÑݲN§hZÌ]Í] z$ôÐØ³L­i4wèݲnŸ«ÉU´wš»@ôi…3&'‡rží¾´½'<¸Å9Í]8ڞпÓÉìt8¢‹öà 'cGÝ>žõœXßóLÉÛ8íöAtKé[‡Ú*y§Ý>ˆî ÝÖhZì|pÚíƒèá…>«ÀâØÛ zÏß¼j+ê<Ý…è3{óÏ/‹coƒèâÊÏ£,N,åmz\c¯mjó»Ó^#D·tìõùÝi¯¢{Fß+–všÅÑŒ¢GBÙ;XœXê5ò,[8ö¢²hq´×ÑgFŸ½Y1‚vÚk„èâÆû¨‹‹C] ýͧ7­4â4SŠèæéE{y5‹£½Fˆî ݺ¶¹jyZ§½Fˆ]¶Ö;Øö!zOßü7æ8zþRXGЈ>³7ÿó¨öYá7Ÿì@¿V“bîÂéþwG;Ð=Ù ¼§÷9jr§;Ðí@Oèß©„:í1CtóೌaqâmP‡[B9ر8ñ6hºvß'ÞU…2úþîÒ‹Þ†î@Gô‘Ñ]Zhít\§§ß#úôøÕ9fN÷¿#ºxÿÕ½BN÷¿;ÚÿžÐm÷¾Š4ÝÿŽèæÙþ÷«-/Ú;ÝÿŽèžÐÃg»Š§ã:íhEôȾû7zœîGôž}w‰vÍÚŽT§U`DŸé›_{~¯åëœîGtñÁ+à‚ʼnšzœjR‚Å ÕãúwòóNëqˆnžÕ"÷ [ܹഇ螽yÒV­ç´‡èá…³¸‹{Gõ¸Të|»ÚU³wZCô™¾ù§ÌÉÄâÄÞQEÌ“šÔeÍ¢¿ÓŠ˜£ºLBÉ]'ßÕ&ââqœ`q<ö@ÕH²Ä×h—Õb™ Õ@9êÈnh½ÚXµ6hŽÑß-奻o<Þ*XœŒåiCU š§EtËÆ¾—´a5?4O‹èžÐmyÅþº yZDìÍ[—ÖGMëhžÑg6öçóç'ÇžÑ%ŒŸÅ-Xœè<Ê×%tÕhQŒ ƒæë]"¹µPuðR;=«3PÖ(‚wû't”5Šìì¾Ñ4j«Ê Y#D·tìÞâªE‘A³Fˆî½_ͽV‡ š5BôHè/§*':²F‘eNb›\-S4k„è#»É kY£ Y#DŸ•ï>±8ñ´(k=믛MŠž–få.¢óžÒÀâDëPüƒï“,NÆŽ:™úK¯Q`q2v”=ˆÉµN°8;Ê$ô—Ø‹?²Qèh5,Nü<Ê$t×½¦•Zö höÑ#&¿31°8Ñ:”=ÈÞü7îÆ š=@ô‘}îøý´¸Å‰ŸG¹‹lì"ͯ¢Ÿ§¹ D—Xü–RÁâÄÞQî" 'È'Z‡rýú•Ÿï4wÑўЄþrž•bqìëݲ±{o+j¾®Ó=¡ˆî}n­“ZÝéžPDìÍKß«ÊÚJî Eôž}íù}ÕÎ|è´ŸÑGB¹ce`qìë}fcÿFgc§ûa]zÒõ±h)îï4{ÐQö ¡'OÛiöÑß¿×/î@ï4{ÐÑM ½ïzïHíô¦D·lìϧm'¾íÆMè¾ç÷eµ³N÷#z$ô·±cØbY§7} zOè/çÓv,N|ºé#û›]ÛßÔ¼ ½éë|vÓǶ÷YÛ ÜiΪ£ŒYÏêï£Eñ¦Nû.:Š ûÈz¤]µSÐ; ;Ú…Ý wa+'cG»°z¿6]ŠÞ†îÂFtOè{ÁÒ´xêB§»°=úØt³…æ.}¦c—W­6Ñé>h¬uóW'Ntš»è(sÒïtR,Nè(’É~™°ÕŠY£Aë°í“Jè{†i^¼vÐ}Rˆîý9gåX[¢GB¢Í®ZÞfÐ4¢÷„îc5+vuºO ÑGBŸÝ÷„,ŽcDŸÙwk5o3è.-D×¡É ±Ñ†ÔêïƒÖߪÃûUu`ÐHj +)ÝGóU;ݱ‚è–Ð]|¯ëjóû ;VÝúwæ÷Aw¬ z$ô¾¤y¯ÍïƒÆ°ˆÞ³ïþÜGݱ8ñ6hÏH6ö½¢^Å<í {F°ÎgÕÿØ:_›ß ŠeÆk,Ó·Ÿ×«¶¶4–(–=¹ñAZ×âØi,3P,3²XƬY­ïbÐXf UeB· ÷Q‹eeÝF¶¢Ž&Åý2ƒÆ2ˆî ýå»;'¾Å2Ùwï³·(®¬h,ƒè3£㾉AcDïæz¢/ÓredÐ*ð@±LB—6‹§¨ I!ºecU®Œ ZFti-r=ty9':ªÀ ý¶P~ØXœè<ª„¦Z·óó‹‡Z—œ®£«Uœãh=ÐÙ>39)4f‹âi“VÄ&ªŒÌ䆱Ç~ZÁâØÞ'ê%Nè/ýóŠÅñ›GtKèosã/+Ùû¤½Äˆî }ÞJ‘Q›ã&í%FôHèâWoÅ=#“ö#úLè/žvbqlïˆþ.õ²z´ë*ê½'7¸m­»´8ÃjïÙ{²o"¬YŒãµ÷ì=ÛµqµÅ5í ö>½gg6îÁkÔì}P{ÈÞéŽlïƒÚû@öž}]GÛû ö>½g/׎¤Šö>©½OdïÉ© }ÓGqE=©½OdïI¿ÍÐ6Ï|aqbïÙ;=1Ûû¤ö>‘½Ovc#¶÷Ií}"{Oè—µâü>©½OdqÙØWÓ³61±8±¸‰,.9u¡¯ÇÍšÅ-jq Y\rZæ¦Gó6‹ZÜBGoò·¨Å-dq‹ž‡-nQ‹[Èâ’±/k—gØE-n¡9n±›¼ð·è·Å-vC+¶¸E-ÐE.îi‹c‹“ X\BºZÜ®? ›d·×-oÅ5ín? {B:1ZÜî? G6vßü%%‹»Óãôž¾ùmÖÖ´ŸôøÉwŸý±ëZÜ'}þ介$p½õÖV•"ÔâYœdý6½ÍQ³8Úõè–Пz̰ÅÑ®D÷ìÍ«¹-Žv} z$t—Ù®b\h×¢w>Çu,N,u}¤:íŠÚªRh×¢‹(;Y[íúE§ìÞlqJ-õœdc³­U‹ã„öœ º‹òl¡cqbq¨ç$¡›Žf^‹ã„öœ zÏÆ.c´Q«E í9AôYùî‹‹C='’Ü#6¶Ÿ_ÅU%­¿ ª¿'ôØ‘”H-S*´þŽè&Î=­aqbqŽ,ÎyMʱ8±8TýOènÒ¢XZýGôžÝöü>k]^B«ÿˆ>3XœXªþKv¦“4Å9ŽVÿUÿ%Øi™ØâhõÑMèýqØâhõÑ]²à­ÅùÝ‹‹ dqIý}޶Îu`qbq¨÷ {óß±8Ú{€è3{Œíiký6B«ÿˆþ¾÷“å.‹‹CÕÉîÎÛŽ^‹™ZýGt“ìöºÙìªu2 ­þ#º't i³W•´úè‘Ñ¿Ñá&´úè=Óº~µ~ã8ZýGô™iîWoÅÌ ­¿#ºÈàÕÁâÄâP-R²sng:cXZ‹Dt‘ìtñQ;­E ªE&ô§ر·¡µHD·lìφʼn·AµÈ„þtÏö6´‰è‘½ùµã¸Y\QÓZ$¢÷Œþ¼žïXœxT‹ÌÞ¼ö¦£8¿ÓZ$¢‹,ž«,N,Õ"úÜ÷P‡U,N,Õ"³±?žŽ‹-ŽÖ"Ýeñh±8±8T‹”Å÷'·Å­¤.£ºøšÅ-jq¨™½yÝÓû¨Õ"…Ö"áwפh³…ÕjÐJ+bŠê2šäç·Ö]ÅZi]FQ]&£ï…•ôÚz^i]Ñ-¡‡÷6Š9+¥uD÷„þt¢þî´.ƒè‘Ño»€ö®´.ƒè³2ö‰Å±Å!úû^ï_ÌqJ+#Š*# }GÏ­cX¥•D·lì7>`§•D÷„®[çºÖæ8¥•DŒ.«y±£UieÑ»f÷„ΫcX¥•DŸª¼ <±8±8TQã¹JÁâÄâÐn܄޻5íµ8Nén\D·„þ’·1,N,íÎÞüöu£¸Xé^`D”þÔÕXœXڛп¥ót7.Öº$C®{ìW-–QZP”Ÿ×γŽÅÉwG9+¿³wš³R´g$¡¿ì‹T,NÞ<Ú3’Ñc¯«¤8ÃÒ=#ˆî ýÍåj£¶+SéžD„þrâD`qbïhÏHöæuGR½V—QºgÑgFÞ7±8ñ6(Sª“ï,N,åëtòN§Àâ代œ•.vŸ;ÍY)ÊY%ô­qmö¢·¡9+D·lì+O˜1,N¼ Ì]¬_õ](ÍY!z$ô=ÅŽ&EoCsVˆÞu±Û*±·¡9+DŸ ]ÆŽãŠýóJsVˆ.öš³Š!ÍŠ{ÄŒöÏêŸÏèæ-¬¶ž7Ú?è–лK“Uëæ5Ú?èžÐŸNŒ„g4[ˆè‘½ùçŒY`qlqˆ>ºoOkŬ‘ÑvDËÎîëíšE§™RCÙBKâ÷¥Í‹{fN å¬ÌØ]ZØâhm(†µ¤Ã-fë³Ökd´»ÏPo¡%]^¾ZŒâ›§N†z,‰ãd;»â,c´óÁPgIïloSìh5ÇŠãºïV‹{ÿÆqˆnÙØŸ; ‹?⸄þ-?Oã8D„þ½ÀFã8Dïýyo`ÇâDçQg¿‹ãŒÆqˆþ~’ÌK§Óža­8ËÐ8ÎPÇ‹eQäjâE?O;^Ýúv7½ù¨YíxAtOèv»j£x:®ÑŽDŒîW›Å̉ÑÑ{öæ}[œ-Žv¼ úÈ´®ï)Nj;‘?éý'o~¦:ÿt.ñÄâÄÞQîÂVvÎÉjVË]Í]Ê]$ôïìÒ2š»@tKǾz“ZîÂhîÑݲN§hZÌ]Í] z$ôÐØ³L­i4wèݲnŸë¼©Û;Í] ú´Â™‹‹C¹ Ïva_Út•,ÎiîÂÑð„þNf§{À]¼°V°8;êöñ¬çÄúžgJÞÆi·¢[J—im•¼ÓnD÷„nk4-v>8íöAôðBŸU`qìm½ço^µužîÂFô™½ù玗‰Å±·AtqåçQ '‡ò6 =®±×6µùÝi¯¢[:öúüî´×Ñ=£ï™¡]£fq4c†è‘Ð_ö'‡z<Ë޽¨,Zí5Bô™ÑgoVŒ ö!º¸ñ>jÁâÄâPׇgwaOoZ;iÄi¦Ñ-£ïUíq_$¶8Úk„èžÐ­k›«–§uÚk„è‘Ñek]±ƒÝi¯¢÷ôÍcŽ£÷ úHè/UàÅqè3{óß8ÚiŸ~óÉôëvKi-–qºÿÝÑtOöïé}ŽZ†ÜétG;Ðúw*¡N{ÌÝ<ø,cXœxÔá–Ð_Nv,N¼ Úî…Ý÷ʼn·AU¡Œ¾¿»ô¢·¡;Ð}dt—Z;×éé÷ˆ>=~uŽ™Óýïˆ.Þu¯ÓýïŽö¿'tÛß½¯bM÷¿#ºy¶ÿýjË‹öN÷¿#º'ôðÙ®âé¸N;Z=²ïþ^#§ûß½gß]¢]³¶#ÕiÑgúæ×žßkù:§ûß]|ð ¸`qbq¨ç…š”`qBGõ¸„þü¼Óz¢›gµÈ=Ãw.8­Ç!ºgo^§´U«Ç9­Ç!zxá,îÀâÄÞQ=.Õ:ß®vÕìÖã}¦oþ)s2±8±wTóÅnŸÇG+bŽê2 ý%wXœ|wT›ˆ‹Çq‚ÅñØU"É_£]V‹e‚Vå¨#»¡õjcÕfØ 9jD¿Ëø¥»o<Þ*XœŒåiCU š§EtËÆ¾—´a5?4O‹èžÐmyÅþº yZDìÍ[—ÖGMëhžÑg6öçóç'ÇžÑ%ŒŸÅ-Xœè<Ê×%tÕhQŒ ƒæë]"¹µPuðR;=«3PÖ(‚wû't”5Šìì¾Ñ4j«Ê Y#D·tìÞâªE‘A³Fˆî½_ͽV‡ š5BôHè/§*':²F‘eNb›\-S4k„è#»É kY£ Y#DŸ•ï>±8ñ´(k=믛MŠž–få.¢óžÒÀâDëPüƒï“,NÆŽ:™úK¯Q`q2v”=ˆÉµN°8;Ê$ô—Ø‹?²Qèh5,Nü<Ê$t×½¦•Zö höÑ#&¿31°8Ñ:”=ÈÞü7îÆ š=@ô‘}îøý´¸Å‰ŸG¹‹lì"ͯ¢Ÿ§¹ D—Xü–RÁâÄÞQî" 'È'Z‡rýú•Ÿï4wÑўЄþrž•bqìëݲ±{o+j¾®Ó=¡ˆî}n­“ZÝéžPDìÍKß«ÊÚJî Eôž}íù}ÕÎ|è´ŸÑGB¹ce`qìë}fcÿFgc§ûa]zÒõ±h)îï4{ÐQö ¡'OÛiöÑ¥û¯î@ï4{ÐÑM ½ïzïHíô¦D·lìϧm'¾íÆMè¾ç÷eµ³N÷#z$ô·±cØbY§7} zOè/çÓv,N|ºé#û›]ÛßÔ¼ ½éë|vÓǶ÷YÛ ÜiΪ£ŒYÏêï£Eñ¦Nû.:Š ûÈz¤]µSÐ; ;Ú…Ý wa+'cG»°z¿6]ŠÞ†îÂFtOè{ÁÒ´xêB§»°=úØt³…æ.}¦c—W­6Ñé>h¬uóW'Ntš»è(sÒïtR,Nè(’É~™°ÕŠY£Aë°í“Jè{†i^¼vÐ}Rˆîý9gåX[¢GB¢Í®ZÞfÐ4¢÷„îc5+vuºO ÑGBŸÝ÷„,ŽcDŸÙwk5o3è.-D×¡É ±Ñ†ÔêïƒÖߪÃûUu`ÐHj +)ÝGóU;ݱ‚è–Ð]|¯ëjóû ;VÝúwæ÷Aw¬ z$ô¾¤y¯ÍïƒÆ°ˆÞ³ïþÜGݱ8ñ6hÏH6ö½¢^Å<í {F°ÎgÕÿØ:_›ß ŠeÆk,Ó·Ÿ×«¶¶4–(–=¹ñAZ×âØi,3P,3²XƬY­ïbÐXf UeB· ÷Q‹eeÝF¶¢Ž&Åý2ƒÆ2ˆî ýå»;'¾Å2Ùwï³·(®¬h,ƒè3£㾉AcDïæz¢/ÓredÐ*ð@±LB—6‹§¨ I!ºecU®Œ ZFti-r=ty9':ªÀ ]®Û‘RQÓyZFô™jÝzÌÏO,Ntj]rºŽ®6VqŽ£ô@gûÌä¤Ð˜-ЧmLZ›¨22“^Äûi‹c{Ÿ¨—8¡¿ôÏ+ÇoÑ-¡¿Í¿¬dï“ö#º'ôy+EFmŽ›´—Ñ#¡‹_½÷ŒLÚKŒè3¡¿xډű½#ºÌ¤›w¯ç¯«¨ó4†h=ŸÐߺµ9nÒÑm_U':bØlìc/mŠ÷NÃ"z$t×h^ÕyÃ"zÏÞüóM^‹ãÑßïag´ ':¢È„®ÍŠëºIcXD·„î¾]]¯e‰'­#º'ô=Á[+Þ…=iÑ#£÷ëj£–·™´ Œè=£#o3iÑgöÝG´>‹³ ­M·KIîÂ^woc_êüñľÒy»äkº%ô[õßî:o_êüñˆý€îÙØíjz¯ÇÙ—:ÿGüâ? GF÷¹Ç~¼ùÀâø½§o~ž/ö¥Îÿ‡ÄO¾ûÌès½Äö¥Îÿ‡ÌŸ|÷÷›Ö_ö„ö6ôÐ:Áâ ä¤+Òù„ÞeϰZÓy¥:¯Hç“ýqÓv «5WªóŠt^ÓÛ¬fï5WªóŠt>yóÖÏ{B±Î+ÕyE:¯ywŸ÷šÎ+ÕyE:oÙ©Èvœ²‚uިΚeŒ[œbq2ËÒùl_ä:olÄ:oTç é|vgâhczMçê¼!ÏNQ‹~œ–‰uÞ¨ÎÒyËÏâîVÓy£:oHç³sÌæ^Ûý¼S‡+«$–‘[Oé¬é¼Sw4Ë$cÝ~~Öf§³Œ#Oè·ý2«¨óNuÞ‘Î;÷u‹w¤óY4ñpj"Öy§:ïHç#Û;°Ž[J±ÎÕù@:Ÿô”ªµKzMçƒê| îi ‹4Ëdo~/©]j³LÐY&ÎGz+ñU]ÏÕy@)}+Ýùæ‡ôŸŒ}fß}«|¯®¬‚Z\ ‹Kö«Ÿ{F°ÅujqY\çÑ„bqbqY\2ö[ëg™N-®#‹ëé 3×9Ë8'×Ñ—Ðc{›(ÆïÎqÙ{¦u·;•ŠöÞ©½wdï==›7šÖì½S{ïÈÞúÚ§E{ïÔÞ;²÷ôô¼Ç8N°8±÷ì=¹Cm>܇í}P{ÈÞ“±ßÊïZœaµ÷ì=ûŽãbã¸Aí} {OèþPÆö>¨½dïÉ›¿%ì4jö>¨½dïÙØ·µ[ÑÞµ÷ì=ûGÛû ö>½g7y=ÜÌ‹í}R{ŸÈÞg^“Åõ¤ö>‘½gÝ>[éÎ|aqbïÙ{Òí¾½MÑÞ'µ÷‰ì=¡Ë­(Tœß'µ÷‰ì=ëtÚt)Îï“ÚûD—}ÜY›˜XœXÜD—ÜbvÛ‰éó'ß]$©€÷ÛiµU¥µ8A'Ù «ÍQ³8Úõè&Ù¹Äqž~-Žv} ºgcŸ{m#E‹£]ˆ ]÷ªÒ‹p¡]ˆÞ³7ÿ<Çu,N,u}¤:omFmU)´ëÑß;^öIÝn|¨­*…v}ˆ"‹KzD›J­~§ëè–}ívÕâ8¡='ˆîý9[èXœXê9Iè·;ÄkqœÐžDïéØ÷,3jµH¡='ˆ>+ß}bqbq¨çD<ÍÌU\UÒú» ú{B¿mH]RË” ­¿#º%ôOkXœXœ#‹s^“r,N,Uÿ³7¯×y’¶8ZýGôž]ÆÙO‹-ŽVÿ}f:ÿÜW9±8±8Tý—ì4ìÛ9¥Å9ŽVÿUÿúÛZç™NØâhõÑ-»÷æÅê¿Ðê?¢{B×µ½ÍùÝ‹‹ dqÙýq«É¹¢,N,õdoþ;G{}fc¿íZµ~¡ÕDßûÉr‚ʼnšêF—±VÅÌ ­þ#º%ô½ªjrÕ:™…VÿÝ3úؾ®W•´úè‘Ñ¿Ñá&´úè=ûîSÛuã8ZýGô™jÎfÅÌ ­¿#úö,¼ú/XœXªEftéÛÞ‹1,­E"ú{÷æ ýÚSlÔÆNk‘‚j‘ ýv¿Ìqêö6´‰è–Žý©³Ñ°8ñ6¨™ÑW?OAÇÞ†Ö"=²7ÞÆ,®¨i-Ñ{úÝŸÖó‹oƒj‘Ù›ïÞ|çwZ‹Dt‘Ås•‚ʼnšZdBw»밊ʼnšZd6ö½¶ñâN%¡µHD÷„þM8'‡j‘ÙØŸ÷'·Å%cßñÑ'j·¨Å¡ZdFïržÅ-ŽÖ"áwפ.3®6¬VƒVZST—QIï›Ðb­´.£¨.“Ñ·ÖY¯­ç•ÖeÝ2ú^QK1g¥´.ƒèžÐßôvxm=¯´.ƒè‘ÑßoQ³’½+­Ë ú¬Œ}bqlqˆ.ª¿šã”VFUFúíºÈYŒa•VFݲ±ÏÑdÔ²FJ+#ˆîšžoÓTksœÒÊ¢GF—E;Z•VF½'ô÷ËuŠ1¬Òʢόþ\žXœXªŒ¨ñ\¥`qbqh7®f§ëÌÖ{-ŽSºÑ-ûsÞÆ°8±8´8£_Þ¢¸Xé^`D”þÔÕXœXڛп¥ót7.Öº$OÛG³«Ë(­(ÊÏkçÙÇâ代œ•ŽßÙ;ÍY)Ú3’ÑŸ÷E*'oíÉèóÚ:_œaéžD÷„þ¾5qÔve*Ý3‚è‘Ð_Nœ,NìíÉÞü¶¸Ñku¥{F}fôçýq‹oƒ2¥:ùþwÁâÄâP¾N'ït ,N¾;ÊYi–»X-Vqì4g¥(g•ÐõvËH/zš³BtËÆ×ã 3†Å‰·¹‹õ«¾ ¥9+DͲF{Ž“¢·¡9+DïÙØ·ÎÛ,®çiÎ Ñg6ö­uRìŸWš³Bt±¤‹{Éždj5)£ýó†úç3úÐó7hqFûçÝúvÍçíuÐâŒöÏ#º'ô[·ë2F³…ˆé›ʘLJè3£ßΣ.fŒv°#ºXÖÍ»öš¶¨ó4Sj([hšö]hq/°Ñ̉¡œ•e§*iwia‹£´¡Ö’7ÓvÍZ¯‘Ñî>C½…–tyÝî Å7O; õYvò@Ÿ­8Ëí|0ÇYvׯØ+«ZG«Ñ8ÎP—ÐU¼]ŽÿFã8D·lìÏN†Å‰ŸGq\Bÿ–Ÿ§q¢GFÿÆ^`£q¢÷Œþ¼7°cq¢ó(޳ßÅqFã8DËv Çžãг ã u¼XE/úyÚñ‚è–ý-ö;jG;^ݳ±/m³x:®ÑŽDŒ>¶¯+fNŒFЈ޳7¯·;R‹G;^}dc·h*µÈŸôþ“7?3úó¹Ä‹{G¹ K⸷)Íj¹ £¹ C¹‹„þ]ZFsˆnÙØåÚAl-wa4wèny§Ó,æ.Œæ.=²7¿—uQ¬EÍ] zÏÆ¾cØqíæ.}Zá̇‰Å‰Å¡Ü…gû /kºJç4wáhxFÿF'³Ó=àˆ.^Ø+XœŒuûxÖsrë>¨u>8íöAtKéok¯jKÞÆi·¢{B×k¯.ŠN»}=¼ÐgX{Dïù›ï[ïj:Owa#úÌtþ¹ãebqìmý}×-;Z°8±8”·IèºÔR¬M8í5BtËÆþùÝi¯¢{JßÎî5‹£3DìÍ?ï,N,õ%ôÛ‹Ŭ‘Ó^#DŸÙ›_{~/FÐN{]Üxµ`qbq¨ë#£«¦µ“FœfJÝ2ú^Õ÷Eb‹£½Fˆî ýv·Ž®ZžÖi¯¢GFïÒ¢ØÁî´×Ñ{úæ¿1ÇÑ{}dc®,Ž#hDŸé›¯ŸGí´Ï ¿yOÏ9ÅÜ…ÓýïŽv {d7´¶>jr§;Ðí@Oèß©„:í1CtKÇþ4Ë'Þu¸eôç“‹oƒv {a÷}`qâmPU(£ËžãzÑÛÐèˆ>2ºZ3­Žëôô{DŸ¿:ÇÌéþwD?õú÷ 9Ýÿîhÿ»g{À·Ÿ_ÅšîGtËè6›yÑÞéþwD÷„~ë=˜ÅÓqv´"zdßý½FN÷¿#zÏÞ|ßß}Öv¤:­#úÌÞü¼š{-_çtÿ;¢‹^,N,Õã¼P“,Nè¨—п“ŸwZCtó¼9Š;œÖãÝ3úíúU«Ç9­Ç!zxá,îÀâÄÞQ=.Õº!m­š½Óz¢ÏôÍ?eN&'öŽ*bžTF®h+Šñ;­ˆ9ªËøâ¹‹Àâ代ÚD\<Ž,ŽÇ¨:YŽz´iµX&hu PŽ:$í³Z«6ÃÍQ#úû÷Mva?Ü*XœŒåiCU š§EtËè!ͬæçƒæiݺ^Ò¢Ø_4O‹è‘]ævô£¦u4O‹è3”Ÿ??±8ö´ˆ¾Ã~·`q¢ó(_—ÐE¶§-FÐAóuˆ.‘Ý™¸ñSjc§guÊEðnÁℎ²F‘Ý·#©¨­*ƒfÝÒ±ïùýªE‘A³Fˆî}›ûåµ:lЬ¢G?U)°8Ñy”5Êè2·«­eJƒf}dô¾ç÷YËÍ!ú¬|÷‰Å‰§EY£È²îMŠž–få.2úsOi`q¢u(~Á÷I 'cGÌý¹×(°8;ÊÄäZ'XœŒeúË ìŠÅ‰ŸGÙƒ(t´'~eb¦{†Ô²A³ˆ1ù‰Å‰Ö¡ìA6öoÜ4{€è#»k‹Óâ'~å.2­‹Õ®«èçiîÑ7‰ßR*XœØ;Ê]Dá¹ÀâDëPî¢_¿òóæ.:ÚšÐ_γR,Ž}¢[6ö1šDÍ×uº'Ñ=£¯h&µºÓ=¡ˆé›ß“\ÔîTêtO(¢÷„~ë«”U;ó¡Ó~ZDÙØŸïXXû:DŸÙwÿFgc§ûa}Ûvbï½Eqx§ÙƒŽ²Ý~•§í4{€èïý“¿¸½ÓìAG7}$tÓÕ´xGj§7} ºec>mð8ñuh7nBW¹šY­Ç¬Ó½Àˆ ýÍz³bY§7} zÏÞüóù´‹_‡núÈÆ¾×VÛâkÞ†Þôu>ÒÝy2k{;ÍYu”1ëYý}Ó‹7}tÚwÑQݳ3¶«½j§ wAw´ »îÂV,NÆŽva'ô­L­KÑÛÐ]؈î ]ç~ñÅS:Ý…è‘}Ì&Åla§¹ DŸ_Œ}\µÚD§û ±ÖÍ_8ÑiÌI_¼ÓI±8¡£Hjd§ãŽhŬѠuØöI%tÛ1ìU¼vÐ}Rˆî)ý)gåX[¢GFß1ì¸jy›AkЈÞú-I<Š]ƒî“Bô‘ÐݯÇ=¡‹ãXÑgöæÍZš·t—¢ëHÎdÞkÚ%µúû õ÷ê°Ã~U4’hÇJJßï«6vºcÑ-¡«H‹Y›ßݱ‚èžÑ¿1¿ºcÑ#¡[X»zm~4†Eôž}÷ç>êŽÅ‰·A{F²±K´(æiÝ3‚u>«þ›´âü>h=P,3^c™½²hóª­meŠeFÒͲç÷âØi,3P,3²Xfh³ZßÅ ±Ì@«Ê1ÒþyµXfÐXÑmd+ê¹}]­óaÐXÑ=£?wÇâÄסX&ûî¶—óQ\YÑXÑgªuõû&e]Æk,ã·䊕‘A«ÀÅ2 }qëÅSÔ¤ݲ±ßÎ)-VF­#º´9º¼‹GUà„[åµxÆË U`DŸ©Ö­ÇüüÄâDç¡Öe§ãîzç8At¶ÏÌN Ý êâi“VÄ&ªŒÌì†ì§,Ží}¢^⩼^±8~óˆn ýÍåj—•ì}Ò^bD÷„î.õwÇâ代^â„>ä–9©Õ¤&í%Fô™ýÙÓN,ŽíÑefݼ×^ÓužÆ°­çú›é'jsܤ1,¢[6öçU¥aq¢ó(†MÇÞwWôu4†Eô˜Yü>šVužÆ°ˆÞ³7ÿ|“WÇâ8†Eô÷NuvF«`q¢ó(ŠÌèºí½¸®›4†EtK誣Í^ËOZFtOè{‚—V¼ {Ò*0¢GFßÚÔFm]7iÑ{FÿFÞfÒ*0¢Ïì»»¶9‹³ ­M÷K/IWVr÷6þ¥Îÿ¿Aü+÷K¾¦[B¿u>Œ»Îû—:ÿGüb? û•ÝÔíº×ãüKÿ#þñÐ#£¯[ø~¼ùÀâø½go>nw"÷;½cñwHüä»ÏŒ>nýuÇ›ŸXü2òÝåz]×Å”3–ñ/g™?â ä¤+Òù„.ÒÔµ¦óJu^‘Î'+êAXç•ê¼"¥¯k6ヲóJu^‘Î'ëùnÍuÖt^©Î+ÒùWz·¹§¸^Óy¥:¯Hç³5í-_7j:oTç Í2Æ-N±8™e é¼%1ìjË‹:oTç é|R—ñyîÊÄ:oTç é|V“ºµ÷yMçê¼!Ï´N´u«é¼Q7¤óYgãíT¥¢ŸwªópeõJïÒ[³¦óNuÞÑ,“Œ}³þŽg§³Œ#Oúi—´kuÞ©Î;Òyç¾®cq¢óŽt>¡íë®âÚÆ©Î;ÒùdO¨™·”bªót>’9n›»ôšÎÕù@:ÜÓ':h–ÉÞüžf\j³LÐY&Î'c_k{›âz>¨ÎúHè~­óì>ÿ²Óéø;¤ÿdì3ûÖ:­®¬‚Z\ ‹Kªÿ·C•Fq–éÔâ:²¸Î£ ÅâÄâ:²¸dì}û:+Î2Z\G×Óüœe‹‹ëhŽëiõŠbüÞéב½g='Ú"ŠöÞ©½wdïÙjzëa¯Ù{§öÞ‘½÷ôTdÑ¢½wjïÙ{Öùqœ`qbïÙ{ÒÁ{]·Šö>¨½dï#½ÍêÒâ ;¨½dïY¿µ1‹qÜ ö>½ôÌÆÅ5í ö>½ü”Tš½jïÙ{6vonE{ÔÞ²÷‘çç¯b9¨½dïÙ™·Ûç‹ö>©½OdïIÏIßôQ\QOjïÙ{v℞§ça{ŸÔÞ'²÷ä´÷^Šö>©½OdïI——Úy7.¶÷Ií}"{ÏNœ°³×Ûû¤ö>‘Åec_MÏÚÄÄâÄâ&²¸•ž~/sÖ,nQ‹[ÈâVbq«Eó6‹ZÜB÷ÅY½¸¢^ÔⲸ•ô_MF±"¶¨Å-dqÉØ—µKŠ3좷ЗÐý:ïÚÀsÜ¢sÜB—Ðm´é^³¸E-ÐE.îi‹c‹“ Xœd§mع/ZÜ®? [Bßjç­¸¦½ÓítOè·=bbµöN÷Ð#»ï þ’’ÅÝéñzOßüˆ6kkÚOzüä»ÏŒnÃŽ®hqŸôù“ï.’ݸξJlqB-NÅ%ûaûÕÛ5‹£]ˆn Ýn§iymŽÚõèž½ùq7ób‹£]ˆ Ýo­Å ¸Ð®Dï"|ŽëXœXêúHu>ÚµU¥Ð®D?w:¹WhW•B»>D‘Å%½·kĤV¿ÓõtËÆ>f[«Ç í9AtåÙBÇâÄâPÏIB7ͼÇ í9AôžývÙ¨Õ"…öœ ú¬|÷‰Å‰Å¡žñü¼ÊU\UÒú» ú{BÛ9¥RË” ­¿#º‰sOkXœXœ#‹s^“r,N,Uÿº›´(VF„Vÿ½gc·=¿ÏZ——Ðê?¢ÏLçŸû*''‡ªÿ’TB‡4Å9ŽVÿUÿ%;QÊÏ}ØâhõÑ-¡ßN˜Åê¿Ðê?¢{Bi-ÎïîXœX\ ‹Kêïs´u®¨‹‹C½Ù›ÿŽÅÑÞDŸÙØclO[ë·ZýGt‘Îs‚ʼnšêB³í赘9¡ÕD7Éî›Í®Z'³Ðê?¢{B·6{qUI«ÿˆýnB«ÿˆÞ%¿½®_Å8ŽVÿ}fZ§ï×ÛÔ,ŽÖß]dðê¿`qbq¨)Ù© Öä*ư´‰è"I-òv{Dmì´)¨™Ðývù¬Õ"…Ö"ݲ±?w6'ÞÕ"%»w`ž'Ì`oCk‘ˆÙ›_ó¼é{Z‹DôžÑŸ×ó‹oƒj‘Ù›×ÞtçwZ‹Dt‘Ås•‚ʼnšZdBŸÛâ갊ʼnšZd6ö­ó½¸SIh-Ñ=¡¿DŽÅ‰Å¡ZdBÙXœXÜB·²SVtð5‹[ÔâP-2{óº§÷Q«E ­EÂï®WzRhX­­´"¦¨.£I~~Ýnú¨Ù»ÒºŒ¢ºLFß +éµõ¼Òº ¢[BïmsVJë2ˆî }/©µYm=¯´.ƒè‘Ñßú8n»€ö®´.ƒè³2ö‰Å±Å!úû^ï_ÌqJ+#Š*# }ÜΣ.ưJ+#ˆnÙØow.ŒZÖHieÑ=¡ë¸Ý‰\›ã”VF=2º¬æÅŽV¥•Dï }//®VŒa•VF}ªò*ðÄâÄâPeDç*‹‹C»qzïÖ´×â8¥»qÝÔxÞÆ°8±8´8{óÛ×â^`¥{=RúSWg`qbqh7®ÚïtžîÆÅZ—dÈuýªÅ2J«ŠòóÚyöÀ±8ùî(g¥ãwöNsVŠöŒ$ô—}‘ŠÅÉ›G{F2zìu•gXºgÑ=¡¿Ÿž7j»2•îAôHè/'N'öŽöŒdo^çyo žaéžDŸ:øþ¸‰Å‰·A™R|ÿ»`qbq(_§“w:'ßå¬4É] k¶Šc§9+E9«„¾5î<Ç {š³BtËÆ¾âñ„ÃâÄÛÀÜÅúUß…Òœ¢GBßSìhRô64g…è]³½«­Y\ÏÓœ¢Ï„.cÇqÅþy¥9+D{ÍYÅfÅ=bFûç õÏgtóV[ÏíŸGtKèÝå¼/ZœÑþyD÷„nCÏ;V ÅÍ"zdoþ9cX[¢Ï„î·¡‹Y#£ìˆ.–Ýw»é£¨ó4Sj([hšÞ^çŽÀF3'†rV–œkô~6pmŽ3AŠa-ép‹Ùú¬õíî3Ô[hI——¯£øæi§“¡^#ëÙ=#ÞŠ³ŒÑÎCqœ%½²½M±£Õhg(ŽKè¾gX-îý7Ç!ºecît2,Nü<ŠãlüÎÏÓ8Ñ#¡g/°Ñ8Ñ{FÞر8ÑyÇÙïâ8£q¢¿Ÿ$“܉<¬8ËÐ8ÎPÇ‹eQäjâE?O;^Ýúv7½ù¨YíxAtOè6FëÅÓqv¼ zdt¿Ú,fNŒFЈ޳7ïÛâ¤hq´ãÑG¦u}OqRÛ‰üIï?yó3Õù§s‰''öŽr¶²sNV³ZîÂhîÂPî"¡g—–ÑÜ¢[:öÕ›ÔrFsˆî–u:EÓbîÂhîÑ#¡‡>ܱ‚íæ.½[Öís÷c{§¹ DŸV8óabqbq(wáÙ.ìK›®’Å9Í]8ڞпÓÉìt8¢‹öà 'cGÝ>žõœXßóLÉÛ8íöAtKé2­­’·qÚíƒèžÐmÝn9©y§Ý>ˆ^è³ ,޽ ¢÷üÍ«¶¢ÎÓ]؈>³7ÿÜñ2±8ö6ˆ.®üjÁâÄâP×GBóéMk'8Í”"ºeô½ªm=jG{ݺumsÕò´N{=2ºl­+v°;í5Bôž¾ùoÌqôÞD ý¥ <°8Ž }foþçQ;í³Âo>Ù~­&ÅÜ…ÓýïŽv {²øvká¨eÈî@w´=¡§ê´Ç Ñ̓Ï2†Å‰·An ýåd`ÇâÄÛ è^Ø}XœxTÊè·Ûi{ÑÛÐèˆ>2ºK ­Žëôô{DŸ¿:ÇÌéþwDWÈéþwGûߺíïÞW1‚¦ûßÝ<Ûÿ~µåE{§ûßÝzøÃݸØÞiG+¢GöÝ¿Ñkätÿ;¢÷ì»K´kÖv¤:­#úLßü:ïHÅG÷¿#ºøàpÁâÄâP=Î 5)Áℎêq ý;ùy§õ8D7Ïj‘{†-î\pZCtÏÞ¼Ni«VsZCôðÂYÜʼn½£z\ªu¾]íªÙ;­Ç!úLßüSædbqbï¨"æIMê²fQŒßiEÌQ]&¡¿ä.‹“ïŽjqñ8N°8{ ê@$Yâk´Ëj±LÐê@ ud7´^m¬Ú 4GèIÎÊÆã=¡‚ÅÉØQž6ôW•‘ yZD·lì{IVóóAó´ˆî Ý–·Qì¯ š§EôÈÞ¼ui}Ô´Žæi}fc>~bqìi]ÂøY܂ʼnΣ|]BWÅ:h¾Ñ%²ûßuðR;=«3PÖ(‚wû't”5Šìì¾Ñ4j«Ê Y#D·tìÞâªE‘A³Fˆî½_ͽV‡ š5BôHè/§*':²F‘eNb›\-S4k„è#»É kY£ Y#DŸ•ï>±8ñ´(k=믛MŠž–få.¢óžÒÀâDëPüƒï“,NÆŽ:™úK¯Q`q2v”=ˆÉµN°8;Ê$ô—Ø‹?²Qèh5,Nü<Ê$t×½¦•Zö höÑ#&¿31°8Ñ:”=ÈÞü7îÆ š=@ô‘}îøý´¸Å‰ŸG¹‹lì"ͯ¢Ÿ§¹ D—Xü–RÁâÄÞQî" 'È'Z‡rýú•Ÿï4wÑўЄþrž•bqìëݲ±{o+j¾®Ó=¡ˆî}n­“ZÝéžPDìÍKß«ÊÚJî Eôž}íù}ÕÎ|è´ŸÑGB¹ce`qìë}fcÿFgc§ûa]zÒõ±h)îï4{ÐQö ¡'OÛiöÑ¥û¯î@ï4{ÐÑM ½ïzïHíô¦D·lìϧm'¾íÆMè¾ç÷eµ³N÷#z$ô·±cØbY§7} zOè/çÓv,N|ºé#û›]ÛßÔ¼ ½éë|vÓǶ÷YÛ ÜiΪ£ŒYÏêï£Eñ¦Nû.:Š ûÈz¤]µSÐ; ;Ú…Ý wa+'cG»°z¿6]ŠÞ†îÂFtOè{ÁÒ´xêB§»°=úØt³…æ.}¦c—W­6Ñé>h¬uóW'Ntš»è(sÒïtR,Nè(’É~™°ÕŠY£Aë°í“Jè{†i^¼vÐ}Rˆîý9gåX[¢GB¢Í®ZÞfÐ4¢÷„îc5+vuºO ÑGBŸÝ÷„,ŽcDŸÙwk5o3è.-D×¡É ±Ñ†ÔêïƒÖߪÃûUu`ÐHj +)ÝGóU;ݱ‚è–Ð]|¯ëjóû ;VÝúwæ÷Aw¬ z$ô¾¤y¯ÍïƒÆ°ˆÞ³ïþÜGݱ8ñ6hÏH6ö½¢^Å<í {F°ÎgÕÿØ:_›ß ŠeÆk,Ó·Ÿ×«¶¶4–(–=¹ñAZ×âØi,3P,3²XƬY­ïbÐXf UeB· ÷Q‹eeÝF¶¢Ž&Åý2ƒÆ2ˆî ýå»;'¾Å2Ùwï³·(®¬h,ƒè3£㾉AcDïæz¢/ÓredÐ*ð@±LB—6‹§¨ I!ºecU®Œ ZFti-r=ty9':ªÀ ]®Û‘RQÓyZFô™jÝzÌÏO,Ntj]rºŽ®6VqŽ£ô@gûÌä¤Ð˜-ЧmLZ›¨22“^Äûi‹c{Ÿ¨—8¡¿ôÏ+ÇoÑ-¡¿Í¿¬dï“ö#º'ôy+EFmŽ›´—Ñ#¡Ë^)·âž‘I{‰}&ôO;±8¶wD—™tóîõüuužÆ°­çú[·Ñ¢6ÇMÃ"ºMã«JÃâDçQ ›}ì¥MñÞÀIcXD„îÍ«:OcXDïÙ›¾É«cqÃ"úû}"ìŒVÁâDçQ™ÐÕ¢Yq]7i ‹è–ÐÝ·«ëµ,ñ¤U`D÷„¾'xkÅ»°'­#zdô~]mÔò6“V½gôoäm&­#ú̾ûˆÖgq–¡Uà/èÿùý+;Iì}?î_ty0¦zW&®P<;ãå¶wâSÜ ¸3ºq­Œ]xaìH¼0v$^û×âV»ñÂØ‘xaìH¼0ö¯Å½2vâ…±#ñÂØ‘xaì_‹GeìÄ cGâ…±#ñÂØ¿w ^;/Œ‰Æþµø¨Œ}ñÂØ‘xaìH¼0ö¯ÅgeìˆÆŽÄ cGâ…±¿ˆÿã_þã㿱ÿáÏ¿ÿÇßÿù_ÿöÿ+ïÿÿ¯<ýB´·\üq]míþ }üÅâþ"þAøïú|ÿóWúøW÷_øC¸ò"~[.]šÛ‡—ûøÅ§ÙÜŽ@‰˜¹ø§‚í Üã}uöñ‹Ï·?šDhÏÅïɵÙìzðû/äºÓu™äâr¼  Ú']ô®Í÷Z/÷§güüEÜ?z»éq.Þï3ûº¿:ù|)[ú2¹ø¼?º„¼ç?~±*¿mýäór¬Û÷Õ\\參¿w!üž>I.~Cmȸ¿ºûur»Î᫇wu—½F×Ï_̧ÿn.¾¾xó÷‹•þhs*~¿Io×ãʧÖÝï&‚âö•¸W¾ûýž6cv»‹÷ÊØï·zx‹±ìó»Û¡OC]ów?²|ì¿ýÓdüª|¸ûÄìòóŸ¯nµaò…ÁÞX|Òy?^]Œ˜+»Ú¸}l¼ÿøEúE.>¾PZ/½ºû‰*·K™>®~ÿE”^ÝýX¦js??}÷û>ÿ'µ‰x²¥\¼1ö(9«ûn´'wqߪ…>\¿¾˜eziì÷žiÝïnÝ•¶—L¦/ öÞ›ùç‹æâë‹7?¤2E}ÒŽÏ_XåÍÿJ<*o’x~øq7ØýyG®´÷ÚÛ“£«B¿—¯žtþžãGc¿çhlÛå5þû={Ò.ß:$雿çÚµŸüý޲?¿¸¿”=¹oÎŵ1“ÏÕű®má{¾µ\üxCSßσüøÅ}mÓººtì*òôŒŸ¿8ôéšê9ý¾¶i6üã »_ÄÝ×]cåký\Û<¿ºÏU |óŸK˜gq=Fåk¬Tmôs òäóã>*ÛA±çâë q+Ñ;xøûÝD}®ÈÅïϨK>înÿøÅ]!†ï‰;uÔú9??¼ËÓ7ÿÔŽ¶Ö’OG­ÇÙÆ{¡>¾xøû<ügˆŸ¿¸{›íuCs¥=XlëPÚûÔ‹^Ý}~zuŸ“ÔºûLød2÷I Ù{ÿJëîÓÒºs.Ú3Vÿ¤ß§Ÿ6®1<׺~¬|}Í»¯»O?rûp’‹cM»ÖðOú}úAÎEÒ}~~÷sú‰[A%~CŸ¿8^Šî…zþæÇøâÕ­ïú”‹¯§güë÷YÆ·Úí•R*~ŸeÚv ×õ×ÃÛ1èÜž6}óGZ²íÀQ×øüE?,n}IÙ9Ëì7äó‡Blßáž‹Ÿópÿ(w¼ÿâ˜eô¶ H_³Ìþnë.®ê8{.~¼º1ßχûó‹8¿û¸¾ ÷¯è‡»ðÛ›‹Ï§!~þâx)2§å¯NïžöñÕéóKÉÅÏyxÅçÒÈîtëk¯³ò±FÐ)×ç/FåÃé}žÝ‡~*íqŸvÛ‘P¾ ·c&Ü Ôõ¹81;Ü…Œ«G.n_è¼yåÃYÿbìŸsç_£ÊÅçÓçýüÅzRÇTü˜a_Ý9Ã~ýæ]ŸTûóV÷¯èQÿÊd|Ÿ´ã¯_UZ଎öñÍG‰~"ÛíäOGmÇý¡O©ø1?Žý>õ6ï"_8«c~?üÈ×~þþœz­[Ú1ïõˆË§É€ÁÞçáÖoœßÅ{Emî3l›×^…ôÏ_̧_äâëɬÿúÅ}†m}Ûå¯î˜a¼3ìÒ½DM ö¨ÜµíugÈç/îcØïnåâÇê¢ïUeÿüÅ¡Ž×ò\üÿmǤ™Œ3ìÖ:ÍS^~̰±VÌχˆãd‡h¹¸- ×Ç%±¿¸—ôn'2äoÞöéáÖ¦å~Þv[Éöù‹sÉ¥š» ×ç7ôù‹ûKé{M{åßý>ö1o[>aO/%¿Ï°Oô#Ž›î¹»ð3Ö|»ÎÊw¿Ï÷UÀüôón×Yìñ<{àçýþŒŸ¿8õ^^/Äí “9&h`2Ovùö|‹;4Ø#~?Ö´k×_<üúBç™ÐiüqìçÌ-Û‡æö~Êï/øíå~¤6Ç4¾úŒÏPè~ù~øñ…Òž3÷×ßý8õûñáï9ê×°<Ž;Ž®~2Ø3GÝûõ•¸E'7”‹÷·si%Ÿ¯îž£FŽú¾ºØ‘T|¤.ŸŽ»Mü_¹‹~ÔúˆÏõqBO{&ôü»çz<޽÷}|%>Ÿ"__¨Íxž~Rñcqò1¼½ìnDÓı8yÊÃþÕÃÊ9æJ;V…>¯/|ÝÔÊØµÍ_Ÿ÷ïÿöÿþí?ÿößÿÛÿÊÀ'ñ~DyLP-1.10.4/Data/Netlib/sctap1.mps.gz0000644000175200017520000002021010430174061015463 0ustar coincoin‹¿K®9sctap1.mps¥ÝŽ+Ëm…ï øælœ&‹õs©LŒA,¶ƒ~ÿÉÞgZµªÉÅô/Òq¸¨E‘­úfKÏÇ_ÿòqþ÷Ï>þçøãþþ·ÿûÇÿðñüøøÛ¿ý׿~þ÷ãê?>>žŸÿú×ñãï++…«WWõ¼zÀï|Àï|Àï|Àï|Àï|\~gƒ«Wc¾:~ƒ+Ðr|iùñ}¾u~]áÏ® \\U¸jpÕájÌW/_W å@~üLÀ#<ðHÀ#<ðHÀ#<ðHÀ#<ðHÀ#<ðHÀ#<ðHÀ#<ðHÀ#ªHñK|k,¤Da¸ÿ¨ã×¹Íû'²T†²—”%üýDœá÷Q»Ù_ç5î³­D£Dåþp•iÔY£,Ïv{5Ôõ^øZbŸ,•¼¡„4TX"„‡ áaCéÙPJ,Õ|B ™PzJÑhBåÙ¯/ œPšO(!*Ô(¹F5J4¡”L¨¸ÄyB齆 KÜk(ªœ Uˆ¥%ŸP™På”R¢ •g!Gªäê *Ô(¹F5Ñ„*dBÅ%ΪÜ[ya‰{+ÂÆ²³¡ŒXj÷VžR,j¨<{ÖPvoå…%ר³Æpåi(Ûj(»7¡Â÷&„‡ UφªÄÒzoåÕSJV^žýy©W^½·òB’kÔYc¸ò*Yyq‰óÊ«÷*,q¯¡ Žü]^ßåçëqïòr g—(ûüþ-Î.ßÈþtîE_³ç8¢ÙSˆø·‹•4A(ÂÃ&€ð° ÎÓ태/ᱪE+À~»„?®Iì|Å’“ã8{²÷ß.áNöþìþ=îÇûO £I ·VK,~kµ`xx¯ò«A>¯gG+µ’œ™ afâÒ`fIö×?f&93ÂÌ|’kÔYã‘™)afA‰ 3“üQ3óK„p%ÌLüJf&│%ÔJòD!ÌL\ÚÌ,ÉþúûYÂÌ$?@ÂÌ|’kÔY£,ÏöÌÌ”0³ Ä…™I~Þ#„™ù%B¸f&~% 3“÷ej%ù¢f&.mf–d¿¾€.ÌLòD!ÌÌ×(¹F5J4¡”L¨¸Ä…™Ýi¨°Ä½†‚p%ÌLÞ×O¨•äÌL3—¶3K²¿þ¦Ÿ03É™™fæk”\£ÎhB2¡âfvgå…%î­<WÂÌäýOCµº³òì”bQCåÙ³†²{+/Ô(¹F5†+ÏHCÙVCÙ½ –¸7¡ \ 3“÷¿."ÔêÎÊ«§”­¼<ûóRÉ…™ÝYy¡FÉ5ê¬1\y•¬¼¸Ä…™Ýi¨°Ä½†‚p%ÌLÞÿ@P+É™™f&.mf–dÏªå ¥¤¡B’kÔY£F ÕHCµ­†jyC)i¨°DWÂÌįdafòþ7Ž„ZIÎÌ„03qi 0³$»ól¯ÌLrf&„™ùK®Qg%Zy¬¼¸Ä…™I~"-„™ù%B¸f&~% 3“÷?“%ÔJrf&„™‰K[€™%ÙŒ•™IÎÌ„03_cÉ5ê¬Ñ¢†¤¡âf&ùÁ¦fæ—áJ˜™ø•,ÌLÞÿÒšP+É™™f&.mf–d^–÷…™IÎÌ„03_£äuÖX‚•÷û?“&Ì,(qaf7&T\âÖ„Âp%ÌLÞÿXŸ03É™™f&.¹f&„ZIÎÌ„03?»|#ûÓ¹™™f&93ÂÌ|ñ®„™‰¯qafòþŒÂÌ$gfB˜™¸ä˜™j%93ÂÌüìýÙý{Ü73SÂÌn¬–XüÖjÁp%ÌLßOA¨•æÌL 3S—¶3K²¿>Œ‚03Í™™fæk”\£ÎЈ̬f”¸03Í•03¿D/„™©_ÉÂÌôý '„Zi~€¨„™©K[€™%Ù_ŸgB˜™æˆJ˜™¯Qr:k”åÙž™Y!Ì,(qafšŸ÷(af~‰^3S¿’…™éûCrµÒüQ 3S—¶3K²__@f¦ù¢fæk”\£Î%šPJ&T\âÂÌî4TXâ^CAx!ÌLߟ³D¨•æÌL 3S—¶3K²¿>c‰03Í™™fæk”\£ÎhB2¡âfvgå…%î­</„™éû£ºµº³òì”bQCåÙ³†²{+/Ô(¹F5†+ÏHCÙVCÙ½ –¸7¡ ¼f¦ïO{#ÔêÎÊ«§”­¼<ûóRÉ…™ÝYy¡FÉ5ê¬1\y•¬¼¸Ä…™Ýi¨°Ä½†‚ðB˜™¾?0P+Í™™f¦.mf–dÏªå ¥¤¡B’kÔY£F ÕHCµ­†jyC)i¨°D/„™©_ÉÂÌôý™“„ZiÎÌ”03ui 0³$»ól¯ÌLsf¦„™ùK®Qg%Zy¬¼¸Ä…™i~"­„™ù%Bx!ÌLýJf¦ï-%ÔJsf¦„™©K[€™%ÙŒ•™iÎÌ”03_cÉ5ê¬Ñ¢†¤¡âf¦ùÁ¦fæ—á…03õ+Y˜™¾?ù–P+Í™™f¦.mf–d^–÷…™iÎÌ”03_£äuÖX‚•÷ûÇÖf”¸0³*.qkBax!ÌLßžL˜™æÌL 3S—Ü3SB­4gfJ˜™Ÿ]¾‘ýéÜ‹Î̬f¦93SÂÌ|ñ^3S_ãÂÌôý™Ù„™iÎÌ”03uÉ 03%ÔJsf¦„™ùÙû7²û÷¸ofV3»±Zbñ[«à afåýqá„Z•œ™ÂÌŠK[€™%Ù_N˜YÉ™Y!ÌÌ×(¹F5 ™™f”¸0³’ ÂÌü!Ü3+~% 3+ïOœ'Ԫ䈅0³âÒ`fIö×çËfVòÄB˜™¯Qr:k”åÙž™™f”¸0³’Ÿ÷ÂÌü!Ü3+~% 3+ï/- Ԫ䈅0³âÒ`fIöë èÂÌJ~€X3ó5J®QgM(%*.qafw*,q¯¡ Ü3+ïï½ Ôªä̬fV\ÚÌ,ÉþúÎ ÂÌJÎÌ af¾FÉ5ê¬ñˆ&T!*.qafwV^XâÞʃp#̬¼¿:…P«;+ÏN)5Tž=k(»·òB’kÔYc¸òŒ4”m5”Ý›Pa‰{ Â0³òþöB­î¬¼zJ©ÑÊ˳?/•\˜Ù•j”\£ÎÕWÉÊ‹K\˜Ù† KÜk(7ÂÌÊû œµ*93+„™—¶3K²g Õò†RÒP¡FÉ5ê¬Q£†j¤¡ÚVCµ¼¡”4TX"„afůdafåý`„Z•œ™ÂÌŠK[€™%Ùg{ef%gf…03_cÉ5ꬱD+¯“•—¸0³’ŸHÂÌü!Ü3+~% 3+﯑#Ôªä̬fV\ÚÌ,ÉîÜ`¬Ì¬ä̬fæk,¹F5ZÔPƒ4T\âÂÌJ~°Y3óK„p#̬ø•,̬¼¿‰P«’3³B˜Yqi 0³$ûó²¼/̬ä̬fæk”\£ÎK°ò~ÿAÂÌ‚fvcBÅ%nM( 7ÂÌÊûË, 3+93+„™—Ü3+„Z•œ™ÂÌüìòìOç^tffF˜YÉ™Y!ÌÌáF˜Yñ5.̬¼¿Ã”0³’3³B˜YqÉ 0³B¨UÉ™Y!ÌÌÏÞ¿‘Ý¿Ç}33#ÌìÆj‰Åo­ 7ÂÌìýõ­„ZYÎÌŒ03si 0³$ûëËZ 3³œ™af¾FÉ5ê¬ñÈÌ*afA‰ 3³üÑ3óK„ðJ˜™ù•,ÌÌÞßL¨•åˆF˜™¹´˜Y’ýõ}¿„™Y~€h„™ù%ר³FYží™™UÂÌ‚ffùyfæ—á•03ó+Y˜™½¿DšP+Ë03si 0³$ûõtaf– af¾FÉ5ê¬Q¢ ¥dBÅ%.ÌìNC…%î5„WÂÌìý=ä„ZYÎÌŒ03si 0³$ûë;È 3³œ™af¾FÉ5ê¬ñˆ&T!*.qafwV^XâÞʃðJ˜™½¿ÊžP«;+ÏN)5Tž=k(»·òB’kÔYc¸òŒ4”m5”Ý›Pa‰{ Â+afv!#ÔêÎÊ«§”­¼<ûóRÉ…™ÝYy¡FÉ5ê¬1\y•¬¼¸Ä…™Ýi¨°Ä½†‚ðJ˜™Dȵ²œ™afæÒ`fIö¬¡ZÞPJ*Ô(¹F5jÔP4TÛj¨–7”’† K„ðJ˜™ù•,ÌÌN"d„ZYÎÌŒ03si 0³$»ól¯ÌÌrff„™ùK®Qg%Zy¬¼¸Ä…™Y~"m„™ù%Bx%ÌÌüJff'2B­,gfF˜™¹´˜Y’ݹÁX™™åÌÌ3ó5–\£Î-j¨A*.qaf–laf~‰^ 33¿’…™ÙI„ŒP+Ë™™ff.mf–d^–÷…™YÎÌŒ03_£äuÖX‚•÷ó!•0³ Ä…™Ý˜Pq‰[ Ã+afvr##ÌÌrff„™™Kn€™¡V–33#ÌÌÏ.ßÈþtîEgfV 3³œ™af¾x¯„™™¯qafvr##ÌÌrff„™™Kn€™¡V–33#ÌÌÏÞ¿‘Ý¿Ç}3³J˜ÙÕ‹ßZ-^ 3«'ª„ZÕœ™UÂ̪K[€™%Ù¿Þ=6ÂÌjÎÌ*af¾FÉ5ê¬ñÈÌafA‰ 3«ùb%ÌÌ/ÂafÕ¯dafõ$B•P«š VÂ̪K[€™%Ù¿Þ=6ÂÌj~€X 3ó5J®Qg²<Û33k„™%.̬æç=•03¿Do„™U¿’…™Õ“UB­j~€X 3«.mf–d¿¾€.̬戕03_£äuÖ(Ñ„R2¡âfv§¡Â÷ Âafõ$B•P«š3³J˜Yui 0³$û×Í~#̬æÌ¬fæk”\£ÎhB2¡âfvgå…%î­<o„™Õ“UB­î¬<;¥XÔPyö¬¡ìÞÊ 5J®QgáÊ3ÒP¶ÕPvoB…%îM(o„™Õ“UB­î¬¼zJ©ÑÊ˳?/•\˜Ù•j”\£ÎÕWÉÊ‹K\˜Ù† KÜk(o„™Õ“UB­jÎÌ*afÕ¥-ÀÌ’ìYCµ¼¡”4T¨Qr:kÔ¨¡i¨¶ÕP-o(% –á0³êW²0³z¡J¨UÍ™Y%̬º´˜Y’Ýy¶WfVsfV 3ó5–\£ÎK´ò:Yyq‰ 3«ù‰t%ÌÌ/ÂafÕ¯dafõ$B•P«š3³J˜Yui 0³$»sƒ±2³š3³J˜™¯±äuÖhQC ÒPq‰ 3«ùÁf%ÌÌ/ÂafÕ¯dafõ$B•P«š3³J˜Yui 0³$ûó²¼/̬æÌ¬fæk”\£ÎK°ò~>¤f”¸0³*.qkBax#̬žÜ¨fVsfV 3«.¹fV µª93«„™ùÙåٟνèÌÌaf5gf•03_<„7Â̪¯qafõäF•0³š3³J˜YuÉ 0³J¨UÍ™Y%ÌÌÏÞ¿‘Ý¿Ç}3³F˜ÙÕ‹ßZ-Þ3k'j„Zµœ™5ÂÌšK[€™%Ù¿Þ=vÂÌZÎÌaf¾FÉ5ê¬ñÈÌ:afA‰ 3kùb#ÌÌ/Â;afͯdafí$BP«– 6ÂÌšK[€™%Ù¿Þ=vÂÌZ~€Ø3ó5J®Qg²<Û33ë„™%.̬åç=03¿Dï„™5¿’…™µ“5B­Z~€Ø3k.mf–d¿¾€.̬åˆ03_£äuÖ(Ñ„R2¡âfv§¡Â÷ Â;afí$BP«–3³F˜Ysi 0³$û×Í~'̬å̬fæk”\£ÎhB2¡âfvgå…%î­<ï„™µ“5B­î¬<;¥XÔPyö¬¡ìÞÊ 5J®QgáÊ3ÒP¶ÕPvoB…%îM(ï„™µ“5B­î¬¼zJ©ÑÊ˳?/•\˜Ù•j”\£ÎÕWÉÊ‹K\˜Ù† KÜk(ï„™µ“5B­ZÎÌafÍ¥-ÀÌ’ìYCµ¼¡”4T¨Qr:kÔ¨¡i¨¶ÕP-o(% –á0³æW²0³v¡F¨UË™Y#̬¹´˜Y’Ýy¶WfÖrfÖ3ó5–\£ÎK´ò:Yyq‰ 3kù‰t#ÌÌ/Â;afͯdafí$BP«–3³F˜Ysi 0³$»sƒ±2³–3³F˜™¯±äuÖhQC ÒPq‰ 3kùÁf#ÌÌ/Â;afͯdafí$BP«–3³F˜Ysi 0³$ûó²¼/̬å̬fæk”\£ÎK°ò~>¤f”¸0³*.qkBax'̬ܨfÖrfÖ3k.¹fÖµj93k„™ùÙåٟνèÌÌ:af-gf03_<„wÂÌš¯qafíäF0³–3³F˜YsÉ 0³F¨UË™Y#ÌÌÏÞ¿‘Ý¿Ç}3³N˜ÙÕ‹ßZ-Þ 3ë'ê„Zõœ™uÂ̺K[€™%Ù¿Þ=ÂÌzÎÌ:af¾FÉ5ê¬ñÈÌafA‰ 3ëùb'ÌÌ/Âafݯdafý$BP«ž vÂ̺K[€™%Ù¿Þ=ÂÌz~€Ø 3ó5J®Qg²<Û33„™%.̬çç=03¿D„™u¿’…™õ“uB­z~€Ø 3ë.mf–d¿¾€.̬çˆ03_£äuÖ(Ñ„R2¡âfv§¡Â÷ Âafý$BP«ž3³N˜Ywi 0³$û×Íþ ̬ç̬fæk”\£ÎhB2¡âfvgå…%î­<„™õ“uB­î¬<;¥XÔPyö¬¡ìÞÊ 5J®QgáÊ3ÒP¶ÕPvoB…%îM(„™õ“uB­î¬¼zJ©ÑÊ˳?/•\˜Ù•j”\£ÎÕWÉÊ‹K\˜Ù† KÜk(„™õ“uB­zÎÌ:afÝ¥-ÀÌ’ìYCµ¼¡”4T¨Qr:kÔ¨¡i¨¶ÕP-o(% –áƒ0³îW²0³~¡N¨UÏ™Y'̬»´˜Y’Ýy¶WfÖsfÖ 3ó5–\£ÎK´ò:Yyq‰ 3ëù‰t'ÌÌ/Âafݯdafý$BP«ž3³N˜Ywi 0³$»sƒ±2³ž3³N˜™¯±äuÖhQC ÒPq‰ 3ëùÁf'ÌÌ/Âafݯdafý$BP«ž3³N˜Ywi 0³$ûó²¼/̬ç̬fæk”\£ÎK°ò~>df”¸0³*.qkBaø ̬ŸÜ¨fÖsfÖ 3ë.¹fÖ µê93ë„™ùÙåٟνèÌÌaf=gf03_<„Â̺¯qafýäF0³ž3³N˜YwÉ 0³N¨UÏ™Y'ÌÌÏÞ¿‘Ý¿Ç}3³A˜ÙÕ‹ßZ->3'„Zœ™ Â̆K[€™%Ù½{<~#ÌläÌlfæk”\£ÎÐÌlý¾–¸0³‘ ÂÌüçpÔ…:^oð?¯oõWj5òÄA˜Ùpi 0³$û¯wÁ³­D£Dåþp•iÔY£,ÏöÄÌÖxák‰ 3ùyÏ ÌÌ/qjJφRb©æJÈ„ÒSŠF*Ï~}]˜ÙÈaf¾FÉ5ê¬Q¢ ¥dBÅ%.ÌìNC…%î5Ô7T9ªKK>¡2¡Ê)¥D*Ïþëf?žP%ŸP™P¡FÉ5ê¬ñˆ&T!*.qafwV^XâÞÊ›Ãㆲ³¡ŒXj÷VžR,j¨<{ÖPvoå…%ר³Æpåi(Ûj(»7¡Â÷&Ô7T=ªK뽕WO)5Zyyö祒 3»³òB’kÔYc¸ò*Yyq‰ 3»ÓPa‰{ 5‡Ç ÕΆjÄÒ–7”’†j§”5Tž=k¨–7”’† 5J®Qg5T# Õ¶ªå ¥¤¡Âçð¸¡æð¸¡úÙPXÚ£J€™ Â̆K[€™%Ùg{ef#gfƒ03_cÉ5ꬱD+¯“•—¸0³‘ŸHÂÌüçð¸¡æð¸¡ÆÙPƒX:ò†2ÒPã”2¢†Ê³;7+393„™ùK®Qg5Ô —¸0³‘lÂÌüçð¸¡æð°¡¾ðÇ焬ÔjäÌlf6\ÚÌ,Éþ¼,ï 393„™ù%ר³Æ¬¼ W)qaf7&T\âÖ„‚ð¸¡Î“òƒœUGþ.¯ÆïòŽóŒõ8‚wy9…޳K”}ef~vùFö§s/:1³`ö">„^+3óÅÏáqÌáqœ§Û9_>ÂcU‹VÀÊ̆Kn€™ B­FÎÌaf~öþìþ=îÉÌâI ·VK,~kµ@x|¯ò«A>¯gG µúù³„™AøÂÌ~þìá>ê#É®$»DÙd—<{!ÙÃc7'üÁu¼Þ^ß /¬'²Á‚÷× izI¹>ê#É®$»DÙ†d—<{!Ùó'üÁu¼ÞL~^ßV.„$}5y5è)E£Wƒ45y5„Ù%Ï^Hö=ÂìH5^6bCÉ_ y5”SJ‰^ …ØPòWÃA^ avɳ’}o(…Ù?¼l0bƒÝJvJ±È#6ؽ¡f—<{!Ù÷^ aö¯Ç=ËÙ\:”J<”¾Â3¥ùd0´!Î.QöåÌ/È.yöB²o½âìxžö²¼‹>ŽüN©ÆwJÇùNò8‚;¥ƒ¼‹Ž³K”}9O ²Kž½ìቖþ`IŽ×AÇçõÈc9Ñ ¤X4–­—¹<ê#É®${²/'ZAöžg/$ûÖPгÿþ¨¿ÿç?~=ôÇÿñõÿþú›¦c~èüç7ËÖðO'ü˜þâôð„b¸Fáe+Ü¢ðºÞ¢ð¾>‚ðŸÇüyø=uGþÔ}'џ∷³1\£ð‚?ˆ}—ÈwÙò]"ßeËw‰|—-ß%ò]¶|—ÈwÙò]"ßeËwþ¼I½»¥‹ïê®—‚?8üp[eÓ?YÐü©“Ë£Þ ±^¢pÛ ¯QxÛ ïQøØ ÿÙnø±õÔîS÷Õ%7NðQ:ÿSñîî0¼\õnˆÂ»îóªÆEÙ%ek\”h\”­qQ¢qQ¶ÆE‰ÆEÙ%ek\Øü(Æ…y·“—qaî½p¹ü æv]]d…[Æ¢¶±­¶±¨ml«m,jÛj‹ÚÆ¶ÚÆ¢¶±­¶±¨m,oñ¾]“}göe\T÷î‚ïöÄð|]ä¿¢/l¼l™m™ºµej´eêÖ–©Ñ–©[[¦F[¦nm™m™ºµe¶¾¶=ö½E¾o„×ï~ñÞÅ÷ùÞ¶|o‘ïmË÷ùÞ¶|o‘ïmË÷ùÞ¶|ßúØì‹ŒûÞ'Ô^Œë‘q}˸×·Œë‘q}˸×·Œë‘q}˸­¶oØmرµaG´aÇÖ†ц[vDvlmØmرµaG´a7²_Ê’¿³XŸù ¼l…[^·Â[Þ·ÂGã®Ï|î=uyþûãŸ?þáÿÆ£Á-Ã*DyLP-1.10.4/Data/Netlib/sc205.mps.gz0000644000175200017520000000546710430174061015145 0ustar coincoin‹ŸK®9sc205.mps\ÛŽÜF{7àèÈ@,ÕõÑÈØbHv±ûÿ_²ÀPÊ<„æÉe7ÅSb‘Ý3¢çû—o__×ן¿–£}þôÇïÿýóó§×÷×ëÛ—ÿýëÛû¿½^ï¿<Þ_ U¡Õù^}½V•VVVƒ®2iµâ ­hÐ, Y@³€fÍ‚A+š4K¡Y ÍRh–rÒŠf)4K¡Y ÍR&­h–“f9i–“f9i–³ÒŠf9i–“f9i–sÅU¥Y*ÍRi–J³Tš¥6ZÑ,•f©4K¥YÚA+š¥Ñ,fi4K£YZ§ÍÒh–F³tš¥ƒV4K§Y:ÍÒi–N³tòQ§Y:Í2h–A³ŒB+šeÐ,ƒf4Ë YùhÐ,“f™4ˤY&yzÒ,“f™4ˤY&Í2ÉG‹fY4Ë¢YͲÈÓ‹fY4Ë¢YͲâ,8ZÅYpZ´ª´j´ê´Ä0iE³Pî‚r”» Üå.(wA¹ Ê]Pî‚r”» Üå.(wA¹ Ê]Pî‚r”» Üå.(wA¹ Ê]Pî‚r”» Üå.(wA¹ Ê]Pî‚r”» Üå.(wA¹ Ê]Pî‚r”» Üå.(wA¹ Ê]Pî‚r”» Üå.(wA¹ Ê]Pî‚r”» Üå.(wA¹ Ê]Pî‚r”» Üå.(wA¹ Ê]Pî‚r”» Üå.(wA¹ Ê]Pî‚r”» Üå.(wA¹ Ê]Pî‚r·PîÊÝBŸwËqÒªÒê=˯¿ÿöŸoßÿú$ýþz/þþø¼?H¿ÂWùxíÏÔñð‘À[xÑ/·WM‚Œ¤dðnHNI‚¦IÞÿÀ‡!©?¾yÑ×/q'ÕÜ®º¿ ^Õäµ" NCÒö÷æU]*GšLs#úþvżjHåˆd=Ãi2¥r‘Ç8Ü~—¼+D‚þ×b¿/¹“Wv"îð"gŒ&‡1y€­qj’l‹7“¸ÑU’D“Ø<ÀÖhÒ¥ä?㬠/-79º¼V$)&I6¼tóª!•#MŒÿ6¼8M¦T.’”ã ¼8M–TŽHð^Ì~Ë!ï ‘—Èýܸ´¹“Wv"îðSÎM^Ì»F€­KÕ$Ùo&p£ui’$šœHn&p§u—.%ÿgmøÙs“—!¯IN“$~óª)•‹šœÆ~:M–TŽHð~MÎC*G$å ¼šýžw…HŒKÏ"÷KpãÒó”;ye'â¯rÆhòÓ¼k¸Ñúlš$ÛâÍäî´î’$šü¬¹É7Üj=¤KÉÆY^GnòsÊkE’j’dÃë4¯ZR¹¨I5þÛðj4©‡TŽHÊx3šTHåˆä|of¿µÈ»B$Æ¥õ”û%¸qi­r'¯ìDÜáMÎM^Í»F€;­»&ɶx3ù†[­‡$‰&¯-7ù†[­§t)ùÏ8kÃÛÌM^—¼V$i&I6¼­üUíÊEMšñ߆w£IƒTŽHÎ'ðn4iE*G$õ ¼»ýžò®‰qi«r¿7.mMî䕈;¼Ë£É›yרp«õÐ$Ùo&ßp«õ”$Ñä­ç&ßp«õ’.%ÿ9g­ýÜ17y?äµ"I7I²áã0¯‚T.jÒÿ6|Mz‘ÊI}F“~J判=·ß*ï ‘—ö&÷KpãÒÞåN^Ù‰¸Ã‡œ1š¼›w ·ZOM’mñfò ·Z/IMÞGnò wZCº4úÏ9kÃç‘›|@^‹HL’lø„yU‘ÊEM†ñ߆O£É8¥rDÒžÀ§Ó¤J判?O·ß&ï ‘—Ž.÷KpãÒ1äN^Ù‰¸Ã§œ1š|˜w ·Z/M’mñfò wZÏC’D“™›|ÃÖÒ¥ÑÎY¾›|y­H²L’lø2ÏEæ)•‹šLã¿ _N“*•#’þ¾œ&M*G$ã |¹ývyWˆÄ¸t¹_‚—Î)wòÊNľäŒÑäÓ¼kl¸Ózš$ÛâÍäî´^$Ñäså&ßp§õ*Ò¥ä?㬠ŽãÌM¾Ny­@‚Ã$ɇ{d¿ªTŽÎñ߇+H¬&•#’ñWX]*G$ó® ±†¼+Db\º¦Üï+Jj\º–ÜÉ+; ÿûÒbÆ`rf%p§5vef­'[d“o¸Ó»2³–69“°É7Üic¨˜»R¥—É¥õ ÜTfp4y­Hb*3nìãèR_RnšÛÕwÓÔ¼jH}‰d=Ã)7¥¾‘ÄTfn¿KÞ"1fÄ!÷Kðbà;ye'â/rƦ2áFë«ó‚¬2S™‰p£5ª$‰Q`*3n´F“.%ÿgm¸©Ì]^+’˜ÊL€›ûÀÊ‘&Æ^œ&S*ILe&À‹ÓdIåˆOà¦F«2ƒ¬2S™ÁU™AV™©ÌàªÌ «ÌÀTfpu^Uf`*3n´¾:/È*30•™7Z—&I¢ÉMe&ÂÖ]º”ügœµá¦2ƒ2äµ"‰©Ì¸y°2¥rQS™ ðÓi²¤rD‚'pS£ÀÕyAV™©Ì¸©QàªÌ «ÌÀTfpUfUf`*3¸*3È*30•\d•˜ÊL„­¯Î ²Ê Le&ÂÖ]’D“›ÊL€[­‡t)ùÏ8kÃMeç”׊$¦2àæÁ>Î%•‹š˜ÊL€›®Î ²Ê Le&ÀMWçYe¦2à¦F«2ƒ¬2S™ÁU™AV™©ÌàªÌ «ÌÀTfpu^Uf`*3î´îš$ÛâÍänµ’$šÜTfÜj=¥KÉÆYn*3¨K^+’˜ÊL€›ûh‡T.jb*3njhÊÉùnj¸:/È*30•™ïn¿§¼+Db\zUfUf`*3¸*3È*30•´.gŒ&7•™·ZM’mñfò ·ZOIMn*3nµ^Ò¥ä?笵ÿËhnò~ÈkES™ pó`R¹¨‰©Ì¸©Q ©‘Ô'pS£ÀÕyAV™©Ìøpû­ò®‰qéU™AV™©Ì w¹“Wv"îð!gŒ&7•™·ZOM’mñfò ·Z/IMn*3î´‡tiôŸsÖ†›Ê 䵈Ä$Ɇ›ûE*51•™75 ŒS*G$í |:MªTŽHúøtûmò®‰qéU™AV™©Ì` ¹“Wv"îð)gŒ&7•™·Z/M’mñfò wZÏC’D“›ÊL€;­'¤K£ÿœ³6ÜTf0‹¼V$1•™7ö1O©\ÔÄTf|9MªTŽHúørš4©‘Œ'ðåöÛå]!ãÒ«2ƒ¬2S™Áœr'¯ìDÜáKÎMn*3î´^‡&ɶx3ù†;­$I4¹©Ì¸Ózw^Vê?㬠^n¿å‚L¾;/Ye¦˜Ê v›%+ÃÀ”a°{*Yͦæ‚Ý@É ,0\ÕdÕ˜j ®j ²jJ1Õ¬%g|ewžáewK²jJ1Õ” /\Âø˜N’б)»t’uVŠé¬l8³¿I4û{,‚ÉìWL™eÙýM³ ƒ7£Ï)íGÆúéüóÇïâyÿáÇ_ÿülÞ{Ó¿&ïÐpdp<‚ÇGˆsx|8Aðøp"‡Ç{<þØ3‡Ç¨<þ@%‡ÇoÕ¿UËáñC Áã‡Àß^ß^rx´G„S×+…#;6xtl<:6ÈŽ dÇŽ ²cƒGÇÙ±Á£cƒìØàѱAvlðèØ ;6åçcóõû?¾üûËçOÿ й¡¦WDyLP-1.10.4/Data/Netlib/bnl2.mps.gz0000644000175200017520000021164610430174061015144 0ustar coincoin‹øJ®9bnl2.mps¤½[’$«®-úÍN¼æH}|C>ù„×§²ößïå¯ü~/eûäžvþ~'¿rÏ¿òóñéçÇ_ׯÜÉoÞÉoÞóon¸Ï‡ÿ9j¸“>‰ÄŸ¿‰??î¿þþ4×§ßïäÓ½üôõ×ÿ˜³öGÁâÓ½üô¨z‰¿ÎO[¿_ŸùDK†òWL$ŸRù Ö†|ò É'b [€Ø‘|"µãJ>‘¶#OH>Ùò“%8KJZb§uä;_~rÄjG<èHiƒ'mðÄKžØéI}|H}‘üf"íKeICüiˆ— ñ’AG>‘_ÁH>‘ß´ë>:¾þë×û5¾þ*Çß×_FŸÊ’çwǧ÷ç×ßEÉrÜnŸ€|Âr¾†µú„ä“#Ÿ<ùËO†üJ9{™½ÌÞ@fo ³7ÙÈì yó5ùúˆùŸ_ç§kö2{™½OÜ×Wñé˜ËÌå×'Xsû¾?¹5ÿæ÷'•åþüõÕzd=²³ð¿¾¶©|*Ö$k’µêû“%ŸùD%–ŸÌJ>‘ O¤>Cê3ä7ü [¶È:Ö1$k#’µ±hÑ;iÑ;iÑ;iÑ;iÑ;iÑ;iÑ;iÑ{nÑcýûëçÏïù‹O{L<ÖÍ?á4äO´¤%Ÿùäɧ@>Eò)•ŸÌJ>[ ±Å[ ±Å[ ±ÅÚÔ¤> ¿ ä7ü&ö­´I}~%L ÓAÂt0$L ÓAÂt0$L ÓÂt0$L ÓAÂt0$L ÓAÂt0$L ÓAÂt0ó»¿¶ù…~rå§säŸ,ùä _B—ð%$| _B—ð%$| _BÂ0¤Ì—¾~\Ÿ¾„„/!áKHøR±â!áKHø¾„„/!áKHø¾„„/!áKHø¾„„/!áKHø¾„„/!áKHø¾„„/!áKHø¾„„/!áKHø¾„„/!áKHø¾„„/!áKHø¾„„/!áKHø¾„„/!áKHø¾„„/!áKHøÖ| _B—ð%$| _B—°àDû*sr›}ËŸ OH>•\ O¿ìŸü¦_ ¾´¯+×'GØö„„=sÈ××6ƒÅòÄ‚K!aV˜Äö Èw%c±„uÙK3ïŸ|²äýO>Eò)•ŸJFf #³„‘YÂÈ,ad–02K™]iûJFf #+ZûNZûNZûNZûNZûNZûNZûNZûNZûNZûNZûž[{±5KØZÉJ,ak–°5KØš­pŽ|òäS Ÿ"ùT²KØš%lͶf [³„­YÂÖ,ak–°5KØš%lͶf [³„­YÂÖ,ÐHû[³þúÄó@<Äó@<Äó@<Äó@<Äó@<Äó@<Äó@<Äó@<Äó@<Äó@<Äó@<Äó@<Äó@<…çw¾d O¶„'[“-áÉ–ðdKx²%<ùÀý¿ÿüýq­2O@>a^eŸìŨÿûÿþ×Gþ•ƒm[¶‘°mKض%lÛ¶m Û¶„m[¶-aÛ–°mKض%lÛ¶m Û¶„m—¬ ÛÆê»’{#áÞx΃Ç'ò+„—ï:îúËOç<¿µütFÏÁç-áó–ðyKø¼%|Þ>o Ÿ·„Ï[Âç-ÉZÂî-a÷HØ=vo »·„Ý[Âî Ff »·„Ý[Âî-a÷–°{Kؽ%ìÞvo »·„Ý[Âî-a÷–°{Kؽ%ìÞvo »·„Ý[Âî-a÷–°{Kؽ%ìÞvo »·„Ý[Âî-a÷–°{Kؽ%ìÞvo »·„Ý[Âî-a÷–°{Kؽ%ìÞvo »·„Ý[Âî-a÷–°{Kؽ­Ù½%ìÞvo »·„Ý[Âî-a÷¶`÷ûJy²mKò‘y¬lÛ¶m ~„mãÉäöO„{[½-ÉxZÂÄ-aâ¶dªŽ0qG˜¸#LÜ&îw„‰;ÂÄaâŽ0qG˜¸#LÜ&îw„‰;ÂÄÝJÛW2qG˜¸#LÜ&îw„‰;ÂÄaâŽ0qG˜¸#LÜ&îw5w„‰—Ó&îw„‰;ÂÄ]õ+ž| äS$ŸJ¦êw„‰;ÂÄaâŽ0qG˜¸#LÜ&îw„‰;ÂÄaâŽ0qG˜¸ZiaâŽ0qG˜¸#LÜ&îw„‰;ÂÄaâŽ0qG˜¸#LÜ&îw„‰;ÂÄaâŽ0qG˜¸#LÜ&îw„‰;ÂÄaâh ¤}„‰—žGây$žGây$žGây$žGây$žGây$žGây$žGây$žGây$žGây$žGây$žGây$žGây$žGây$žÇÂó;ÇtD9¢Ñ@Žh G4#È äˆ²DY¢,Ñ@Ç|ýøä.Õ³+"G‘#ŠÈEäˆ"rD9¢ˆQDŽ("G‘#ŠÈEäˆ"rD9¢ˆQDŽ(¢RçX¢ˆ,QD––$ŠÈEd‰"²DY¢ˆ,QD–("K‘­‘#ŠÈEäˆ"rD9¢ˆQDŽ("G‘#ŠÈEäˆ"²DY¢ˆQDŽ("GQÁ[QDŽ("G‘#ŠÈEäˆ"rD9¢ˆQDŽ("G‘#ŠÈEäˆ"rD9¢ˆQDŽ("G‘#ŠÈEäˆ"rD9¢ˆQDŽ("G‘#ŠÈEäˆ"rD9¢ˆQDŽ("G‘#ŠÈEäˆ"rD9¢ˆQDŽ("G‘#ŠÈEäˆ"rµ"rD9¢ˆQDŽ("G‘#Šˆ>cpDõ8¢z\¡l,Q=öäÐû'¢,Ñ@Žh G4#È äJà‰òDy¢<Ñ@žh O4'È ä‰òDy¢<Ñ@žh ¿Ï×'Rߤ­-‘'ŠÈEä‰"òDy¢ˆòDy¢<ÑGžè#Oô‘'úÈ}ä‰>òDy¢<ÑGh ¤}Dy¢<ÑGžè#Oô‘'úÈ}ä‰>òDy¢<ÑGžè#Oô‘'úÈ}ä‰>òDy¢<ÑGžè#Oô‘'úÈ}ä‰>òDy 5ö}ä‰>òDy¢<ÑGžè#Oô‘'úÈ}ä‰>òDy¢<ÑGžè#Oô‘'úÈ}ä‰>òDy¢<ÑGžè#Oô‘'úÈ}äÖ@ÚGôQéyKù„ä“%Ÿùäɧ@>Eò)•Ÿ¨-†Øbˆ-†Øbˆ-†Øbˆ-†Ô¤> õùM ¿ ä7´h ¤}Hê+3Äó@<Äó@<Äó@<Äó@<Äó@<Äó@<Äó@<Äó@<Äó@<Äó@<Äó@<Äó@<Äó@<ÄóH<ÄóH<ÄóH<ÄóH<ÄóH<ÄóH<ÄóH<ÄóH<ÄóH<ÄóH<ÄóH<ÄóH<ÄóH<ÄóHf(s] ¿ÿÌm¹î.þÿÍÜ2|ËR°ð·¾_x[þ÷6¾ü÷ýKõïæürÝOOÍjjÿ‡+õ(òû_?7·³ð¯Üö/©í_JÛ¿rí_RÛõÚ»Æ)®+jàœO·Ñ½lôãÁÜL~`ÒÂÏ;›¹¶opÈp¨K-ù ¶ã68f8JpáÛ0ÏYÿÖóLÛ¿ª†3m#•”Ml+ák¯á\7D(J!_ÊܬåA+AÙg©3Îg\_Ëq¾ý°±´ðów¦ö?4Î…Úå™à›þá|<¹cFûÎ2$8(pÌp.œ/$ãs8o­ º÷‚s1”|Q ú•€R‰Îp³E)Ô+iàö†®†3î*L9ÃùxfËu–Λ]ü çÆø…ƒKóîû—Îü%œï9œï\Ô.ù Άó] ç{ç;µKþB‚_á|çƒà®„ó}(œïE8+•€RI?œï9ï\<òëŒ[o5œ·ñ,•Ãù.…ó] ç{¨»Îw1œ 8C6Â^äÁaþéÀ%slàkÏìó7K2—ü…?k—ØçïOµö®ñL×Ö^øïÊRŸ?ÿõïݲã¹.4•_°ÑqÁÍ2W©·Û·ú\òÅïÞvYZÃýÚÔ¾—úV-G7O›[G_°!¸¿p!À÷n8ž?S…þqüÕDðVÈÆ›½N¾Ô@ígÛ? o<ÛªþqÎÔÇCu¦ö™xlpÈpà À1Ã9âq|Á»îãœjã¥ùí¶çmœñü©äR ÛvΙ‚P”Â~%¨T‚Y_ÏöîoÙvÄžÃäàÛ‘#ðf(/ÇP>¶Ü™ë¿bjjo†É·*´\gÝŽ}¤RKÎ…ó¡’á|Þ¬`Nø–#eGÙ ’]òfò»[F™À[Ùý꫼XÉÿlh‰xࣉû“Ê/VWÃ=ÿ†ß‹Æ²¿RÖþv{\oÔÀßëR`R̵»@ºŽÖl©åöø1þwkxk£[pñ­âk7ž®˜‹äSǾ盼1þ›ÊYk;*Çøô­ªÝž¥¬kÓ@}×Y¥ß\—× ´=±± {®o|’b3»@2'Ü q0Þ2<n¯ÝÀ 7(½¯áò€íºÎpQwsѰóñwÝ&ðÆo€¢ÜóŽÀI¿ËÃEîŠ \Œ:¾U \2#íQÞxdß>–Œ<ÞµÌtœ“æã1×ùþdUNxkà²ç»#î?œ×!2ÀÃëeH©p–òk\{ívUº7ÌõO®Ì+¡¦"“ZþÄȨ—ñ ÞíE0OUòX‡¸äà~ð#R³Zó$‚ÀóbŽ”²cµ_\!¶Ï=ú®ƒ‘z,Å¿¹ßŠC\nƒ7-ùžÓÕ?(Á~؈횾¿VQѰúPÃûŒÏz…ñ Tâ¹–œŒ5¾†‹â©`gû‡” ý^TxáîÅ06pÖc #ìÑF…=ôbÔ"m{ ïwÃca»¡_É.ÚÈ &p¾©]êž=Öpž‰qL‡#cÑ…)&êÔHkèàÄLð€O¬‹8O°ÎÁ5÷½à5÷]$NMàF⾋ĖY8Ëjûm7S½7CÝ sÝ óîG°-‚ûrS„æ‡ß@Ûû„SãÔÞI”œ”òóîw¯ÆÙì•ä} O†O‹xÓ¹7há•ß‹u@dÛnokøa¼“Hˆ“¹`2dîûŸ’;*ñ¢lØà‡¾±±ÙSwoQ{-m]ƒTj„ÑoðãóÐ1z»ãÇ©@2õxqðopÞF®ãêè(j¯åȘç­âùã­b<¯-<õ²Æ¯ xM£Gž[lpÙóý¶'v`íùë¾ç…m q$ »ÁÅnßx@Îø#ƒÜ2¹öF[,’!pÛ%µÞÊaV¢¾cÆ[eºàRÃ{“•,' 8>`¼{Êøzž?5U‚Whð@Ìû &ý^±è ®‘ea†,_ðÑpÕÄ0çà8×½Q™Òx~\ÃûMD3Áhžjb•€Þàbî±Ëc jäã5ª1à: «Æ S„Ú °ÁÛÍ”DyixÀÊ ø[ØÃõ8³É¡€+yfã§2È|¢ðÖíÇvC4új»’g6>>¹ã¡ ‚øT Õ„ó‡r&ðSä¢íJ/&mÑè÷b’––±J#ÝÖ'Ék ŸXVðÞL °ÚÐÍ “þ©©s˜Ê oð‰ Fžóפ(ý@ÿÀ3 fC{p±{ûÌ;8…‘ ïæú§O85NÜHž,ø'÷nTAൽ}M1Fض½lýcÚ[{íFÞ²Á¹MÞ!Œ0z3À© «ŒV»ÁEšœ‡*õ€Òo- ¼¦¥ $͈å]8Àj´]µ|í5|À]éGÔ¼rƒëŽÐxåïìLP#- ðJÀ~’P!]œ›`lÈ!r~¬¸ }ª8x/å\àïåA½¨h ›×褙”òŠûc}÷ñz鈊Ý\pygª²ç°»çT#|ÆÁqjiÁçöœÖž·fÊxk¤Y„9lð.s«åìl„þ •³qPxx\wÔáÌ„L‚ 8¯ÞÊýÐhàcÊu Ôó‘—Lܯù­µ nÐIÆ+ËuÌÑáñ…q ÿâ?y:1=G)èÞ€ ~ KyË›VŽÍ˜”‡Ç- 17[Ž^Dv_nžßÕÖÚÎíÊØB­}=ùŽÞþÞ+µ ?¶ÔP%Åà—)Ú¼&Édܬ«áìá-~È|¢‰A*µ 98H6.R«jxë:{K–e7~… 6‰ n`¯á²ñý¶§»uÊÁüu»<‰‚I:i‘A¯±†OøÑÁˆÙ­|Ù÷!ø¸óP ç';RÊJóŘvÈ~Î^š”†j«]ò#? x’Æõ"Í5|b4ø4åº`æáì¤44Ñ™H”‡riÀUêbÔmâÐPvÎVš”Æšh¥É®(eW' xöY}mãgOVˆ¤T”JUè‰5«ô[’HƒÎΉ”’’c0Ô’k'!œ#¥;Ê76,*ŽpO:-{¾Të¬ëTk%Aai«<÷µóÜéð§ÚN¤‚§®ëµ7álðæÐÆïÊ· Õí»/j8§Vo”ºbÈ­P ØÎÙÂÒr3ÔÆ<«¬~Dì2ðÙ‘™ ¡äÇ¡JðæpÒÓÆ~$”bˆ”ò’»ÉÁ5\´q ‰^÷ãqx,°gÄ’Ãc‘ã@Çñ­ 1Ë…Êí[ê†Þ¸·”gÏ"‰àØÂÿàÿp_Ãc=#–Ë·ý+×þ%´½S{†KÆ} Á9ñžÅ©¥?ö­˜3bÉá±lÛÃc=”¶ÖÌI½KuR/Hçù.ùOí _àNÔ¥GíÒõ'ÔðãVÑÆã,I¶Ô@%‡‡D÷ÓAÅ&Ëçîî'~+éñŠpÈpàzñƒ[bÉ©¿Àžú»”‡ÝJµç•´q°$€V¦†w6ÎKᕜÏ7.xçøãc)?f*±gõ‚ó6'ß‚|„ö’¥…b¥ÇöòçߎÓð¾àÇÎ" pÏŽØÇqÀ œ=}œ”ÝFX»ð§l$gCq¸oáÇÇá¾ìˆ}œç[ÃÃ}Iíäálc[ªSÉÿlh¾#Ø3ï ÊÞáþØ Ü‘“ * œfåÑÂPnPÌÇm‚²Sòé¼À¾çÇþn çm\¸VÑÝÆeí#go>%pì{^ܾåá¾­ë㫽Î\j;ãÓ·ªv{–’ÏÖX_<­×_SIMÙ¬×lì7Ñ+â©`gû‡” ý^Tx!w6p¶‘o{ oüXî8ïx(Œ°Çól`PÎÖlŒ’)‹ÔöÞï†âlà¶ú•8Ôlì6Ñ!;fJŽ©1\‡Ò`Z$òÉÂU&ê‚D8‰¢òpážJ:.PË“ô@-N&ng‚¶{] LÔ…¡Šs1§f+õٲ˃ø×Þtº{Áå×!î ÜѨMLOõbãà4Ò‹ÅÙÀ¯ô¢_§zñ<ܤ—A9¸€K//êÔÙ›)R|ÁV;Ðv3սŠZ÷‚Ò½}êìaŠ5gƒr6°²Nx7\NbMcîNùýLÈgëÌÛ{y÷»×ÏõÆyF_“a9ÛpLg?õ·†7âÂ|Ïáȶ¾}¸Ãîu™srÛ/ã2—Oçe¹³3Á—/¹ïðÃF/­âQ£;¼ÙG5¬y¶ÓyÅ.ÿ»5œ·qáZUÉödâÝC#šÔ”úgÌóøŒñu¹±1ù0¡Ņ®çq×éZ PNÎØáȵ]¸]ÎÜ|"SÚeüKéï|¸/4GÚnûYº¶ßa.æÁ*®ëú|¸ïàdU%h6¸um÷Ê€h»WŒï& óá¾Ð¼ ä† ¸B–óá¾ ƒÊ1h\!Ëʬð€ÏôO”ØîXÿÄ©eœ;¸µ‘;8ÇP¿4Ò¢<ÔD4Jî±Ëvóé¼ œ ¬Õ®Q×Á]åϾ%ëaˆM‡û–“_‡û‚rÊÝ?šØä×î(©©É ç³Ù^ä¯ámKŠ£ô@9(n‡ó-É ógoýCJ…~/*̬8Ü·µqÀCAéÅÆu ­t#dã´ ò@7D%P"-ŽtƒG‰-£p±úM,΋ä¸Âxéc5ƒ\´]‹>L‘¹âlàWzÑ?¨ÕélÀž ü-ÍM>è@Í__mWɶ³‹¡¹8÷QrÄXfã^ Û~$ƒ¼Î+“îšã“ýÉŽ=¸é† åpÇà6G Ãó)àËx9ƒ,Ÿ ùxÝ×2ÈåÙÀ¯Ì‚¸8æ³»ƒ‹c¦› ̇ûBsð5+à 5Î×èF&8ôŠ»‰Á ®ûQK æ³Aº8”£…!Ÿ ,“#xg;8N--¨e û36ði|w>·¦Ûï 'Èg«ü"Ÿ ÒÙÀºƒ­¶ë³ï¡À&ħ ~%òø‚Kgƒr´0äÃ}A:”³wxm£ýŽ!?ô°b;Ü·~—Üß,Dà‡5?lt’ñI_¢_—ÜÙÀpKÈàIÛÐŽx­ãV½V&41)[BφýtÞf_„pNã·YHVè|´0°G 7çEУ֎Úÿé•*ήJ-£ðÃF9ežÏîl`æÄ!‰‡s‡u²®á|K†üÈî5~.3LÈᾜõÐÂù” ùl`:øf\5\Žà~Û‡BЭSv룬 .—óNòÙÀφ¡³oÞ9SÃ'üè`ÄìV¾ê@ÑüõÙªØÆ(ž ûá¾÷—§oG¦›k77Ýôá?òóP—Fl¶òij¾à“­gí}'¥úÓM‘ d¦›níÛ›bttg«`F`j¾0ÁF¦›`µé¦_‰}ÊõlµÃ;~Ü÷mOg#¡R\ùS¢#¥¢Tj‘j¯áÝù¢<xpÀ§Î÷‡„Šògo¥„qí\ ï·×h}ÒÖþØZ]ÃZ+RúêÌaÏó®p¸/(‡û´ðÍ%k‡úº8Üw¤íß­áÌ+wü9/Ç{6ðÍW¼n¿êpNÆ–‡ÒBÙ¨òÄV(ÖJ!_ ¬P ØÎŒÅ‹-•Õ™Ã.®Ý¾j¶Jí²#J(ýÖœËÂÅ^ä£C€+¡’¼ä®EòP Ÿi¢×gÔÿÝŽ‹ÙŽeùóç¯`N(«_Pæáõ ¿ûBÕ6Ñø[H14ð?ûXù %RKuSsÆ}Ó¬“ïpæåÅlcý¾ÓD̵c·v¼­°†ýù^¤A­ÄæJ¬â—K‰û„mbÿÑ”:¤ÚmtŠ ˆ·ïµ¤³µµö¶W*ñSþþ×'ôÇŒ›[ƒkjß=ä?†\*(¥b.¹GÑPNb ¯ž§ÖŽÐæ#ýç××X»ÙV“n »”Or„h/eV¥T¥¦{mž1·èkø]FÚ lŒµ×+5F™ˆLž# (-ÉcÙ R*FÓn«?ZbSl›Ê¬:¾¯º~‹ó“ù¥òT`œÒ’<Œ—Z¢ Fý.&gcÚñy™(Û9A‰AÈ1ý«á ‚Ü¥ Ì¯ ý'Öøx˜L+ÉÞeò<ù€2ù@öD¦ç󂶬?¾«kSzÎDŸ<Ϡ̘{•žó¹”gKw`¾d sÌKuGJ7,ù’KsláõÁÌô’níÿðpæÙœW?w`¾d€iû—Òö¯\û—t†p+%ÑÙÎyhÉD¼Wû?BÛ›Ë –òäøíˆNÌÇü·mgî(Xª; 0ŸÀ/ÀAc†#cüñ;_— °: ÷ÍIÇ©ù¨Ã;×0˜@Š•t®a8à]SP.ÅKr8ïø¸àú•gœ3W; oŸ‘ÆßdÀ{{áàø@=ÒcpÖÆãŽd¯" wÈpÈpà À1Ñ ÌKuÉJ÷(y™s¹¿àÇÙúòE —Zº×0ˆ£!ÆóVžã’”îdö¬XÃõ–œáÌ\E@î(:ë (þ&ƒ…­}áàÂ’u<¨êÁ¥iûø]Ë¥ðŽ; ½Š€ÜQÀ·ýžãü.Åù]‰ó{Žó»0m_Hð3Îï¯Äù½ˆóû§| Ãç÷Áµˆà ï\ÖpƹtYC×F䓉7<w {GÁRÞQ x;GÚ]Žó»ç÷~ Þe~QÖ®Ã)í¡w`¾d€™QZú;Ãß-ý­ðÊþÕ¬9P\qЃ·2é%˜Oóo=Ôîè&— \pjJqGAyþ}ÅÁGî¤&^p抃·ò˜©öO¾ö7ÁøE„»•ëÞÃ,ÖøãŽdï(`'ë‚7®{£7$X½ö£’öÐñ»¶LO—÷3Ày?°÷34‡‘“ëþ}Ôþÿþó LÛ_X±í%hØà äd¯aXÊkؙ븵[š+š[0«.Âéjøqì½XÉn_j ’ÓCæ¥&Š®¯a@ö¶r ƒááœÆcîg¨¯aÀ|û€GžWûÆÁo#wHˆq]ÏG=Ç= ÝJ@©D Å«1‘Ü£À—ÂmÄòµ×põÖŠ-f‹[°˜Î· šÂ…,5¼3ëé:˜.Þ9sìî.ç‹õLÄ\pþ‚R Ø&òç¸mpSÃÛ‰³¸ù¤n{hàzK~´„ŸEÎøÇ-5œmIq ±‘Üõ€Å]ÄÆ-é®NÛ;ø€ñ0g<°+y¶‹ÂMnÍ—Ë¢r¶Ä<#@é²TŸÆò¦‰bé/nš@å 7Ìw= rÓDõ»5ü ãé»eíC7M¸u¥mǾç“Òq¨¸ŽoU¯›xBÇøô­ªÝž¥„“:µ[Åø×¥®ë䣶vøŒëÚ×)À¨¼‡ù¦ ”ÞµCå];Ì—5 t:*§3`¾*b0æé n\°òñ …ñ#7M,m¤ßù›&è±ò1vªßÏ‹*»¨b¯]¾*óMؼ×áòk{˜ošxq¦ÝàRÛ›Eª5ÞŒKa?éñ­¿>Ó?>;˜?• xs)ÎR»¨œ€å}/51×>tEÓ?‘á\JÂË!Ø]nÏû(ô@3UÉyŽÝGQ7ñ|³¥wæQyó…8v¦ASûÅ(bÿñmÛv‰!{M$(M$(÷Oq5%Fî:‹­úýÊÛmFA–éÉʘï£Ðy¡õJ/TâyÆWßppM+‹û(*“RAé¾öÞ˜BéŸF>ÙwÄžèÅ0Â1Ïû(P¹B«$j6öGüèPë†v0‘c0ßG#wfìÆ7µ³ŽâÁ%Â9Dd3\‹çÉq/òÕ —ŽÅEå¤.,/”h=Ä@nScüÄ(sÜ(k8µ‹R©±J¢bã@ Ån iœÚåA éÒXm†+[`y¡DkcŸ¼º¤ÌýÏ%mv'’⢊WbȯSSíyÓJU rQE NÒ@å Ì7M tö.*gïp–îöÛn¦Vo†ú¦èTqÏÅ+£×ƒÆèûrOLLínŠéø>•ÔȶwË#¥¼FÉûAà§Vè⢠qvʧëÞ·RÿX%6Ù“üðø #üÀG«÷+‰Š|ÛkxëˆS.öGO§³116ž\}ÀÆ4׋i„«‡UãêÝJÂ:Õ‹aqDÐ&;f4T\=8e0ñÆ×pž’yÈMe/¸ÆèCšâê!õS WI¡úÌîóh°©]ìÞ~ q£¬áêq}jFåàãëmCq•(ùP ]ð^àê®rõhž!4mÄè‡z1šçÆxµâE˜Š¡Ê4ÖÏGèó!%ëÞâ6 «GœÊlGìZp¡¶JuçöˆCýcµ)¼_‰•bh,´­ÆÕû£7Ì ¬ðÔȨ¹zÔ¨dŸ«Ç0ÂÕcT¸ú@÷ƹÙ5*Ù÷~ÿ$vâ{\þvïdãÓõàÂddßèâÉÞIwK~åHb}¥æKåT–—/•cIÈa¼xWÑ?!^´$;xƒ3½hqèÉC¾Tnp»Æãwk¸h|Ûöjülp¾‰ËÀÈ0¥þs26–W¢rEÏïy^~Z`øÇö| vÛu|©æ[á”,·¢O/8w'Ý€ç;2®Kå:mO]Ï+þ|/J·9«Û568s‰Ñ~ÈEßxà¢îLl÷](‰ŽE’)n%R» ðØÎÜI7Ðv;×vÛqrV~»NdÑý¹ÜSs]=ÏwÒiMôS«ø¾‡d®ïŽCéê9•,p…‘ç»ã^K_ð±ÝM/†9GeÚ‚¨Ô>`¼¸U¥,…%è/Ê8GHpj³H¾ü •«ç´ÚaÊÁ è|{›€>jò,Èß\çÂ6´Žþ‰r =àífyzIGñ½¤£4^[à¶Y¤µ±Ž!ç%GŒÙè•&ò®ãWЦxˆÎ$ ë&V‡Rïp¾%c6ÅC|Ûyã5iâ´Í"•D%Pz1ŽŒŠ#˜Ñ@ÐåÝq¯tƒG%ÒúTÒãÎp-m¤GFƒ”ÏOm)o®kÜ!žêÞ*7lø§mɤ@JEé·†&ä|bº)n®k=Ô§¥>Îl¾àÍÍu¤TšÊÅÓ¶Ø$ùœw·ªäKå^\MŠKå^éÞÐß,"_*WÂ_Ù,’¯u{-]À¶Ü½Åt¯Ì®ÁŒDG€©àzÀEûl™¿ïRÉ\ßx§ßçYÁu—/-V^$D5:ðæ•Hš/)·v]J,âû·®Î×^Ãù–ŒØ¸Á[›Eº,|ƒw»„2­u#¹V¸^Ȭ[²0Æ×TÎ÷mQ:Πãà‘Çp½8)¾<¨v(‘Ö Tà_«mº!hÛ5†àãÝPSý >Ó AÉYw7‹pm,JƒÆ¸z>•:‚Y-Œ™ þYR &$Æ‹¶+zŠ'N#×D×1dæâüz`5‚•)Œëó›E.¸–d‡ëmTÆÆ~œÔ6‹°kY GÙ@ÿX…-Á'£2*;®âê…ñ¯pu0NáêÆ»¹ÐvÝ5´Øô | lü\ÇyeÈ@Ì'­v–ppxÑøÔõ¼ÂÂáz˜ª°ðí$ågÞ¢¬Ögöqô s$ñzµ¾¥ó‚Μuqè<3²tƒvn_;gvR 48Õ (ýÖÂÀ"[<ù¸ºm"ŽYÐNÁ¨Ä¹+=㈆JBzŠÈ66¦™w‹ÚµxÄþ™ÏBþ|@ŽõPÍtGº­ô[Ë(ü .XwÃn†ÖÙÚ6ÆÞ }Î=MtÊÌ×M}æ+£Ù8ðïæ.å;Ÿ øK‡Gä+£Y>4`¼ö¤ÀóqjÍÁ玅¨·f*l¬‘–ƒ!JaÍ¥°ÐMì©6j3 xŸÊÌA¨á‡ ­ óU;òž6X«=gk¯á­)â¹MíHí:ýalQ¯+qÏø±¡ÂÙÕ4v=!'·4?ú‘–8óÜ¢ÎÀ™¸)7%j6æÚ_ãnˆ£æÍ/½‹´ÁÛ&ÒåZk¢ãïN´fˆ‘Ûf”,’ûzäi*\;O†¦…šö8?ó0ö‚¯ü¥)G©05u=àOìclâ<>•¡áà¢ñmÛkJáâTŠÅ¥~ŠE‹àôÔæÁºíì±glö;ίŠëºO*Á?·âÕÚÑcw`idÁãñðö©,Eã`«õÔíÞëÕ{#½zoPé÷#Aã-צpïŸJ34•ø~šyÎM¨„§(EcãÈæ4üÞ)²]>£õ‚W—| 6¦@—·á_+é·»¬O¤T”J -F!r×—ys=P1Ø3‹QUªx5I~t:¼²à¶&+lgà}?F£ø±}™"„.NÛÇr „JLû47–‘@©Ÿ}”_BÛàÇÀ”ÞŽ6V$ØÛÞíû{ÎîkÎ_?’6nßd,5ðÚxs[‹¶› ºn‡×÷ÍlF.Ü‹}/¤R‹ô» ¼c¼WŒ‡§\çM@ǶÜ`KÕ ¿[ùèà'¨­U5|Æó#¹ZDîp‚|Y÷;÷EoÎ ûž‡ø±¾]xãGzÁ=â#ÍÀ›²HÆ×ðÃyÅKj§öU¾#pÙíÜkàk¯.¸çO´i<¤Rü“¿›ÇÎÚ8æà ôOëS{KÔø4×½£ÇFO0Å'ò `¯½ë`·ölÅ<èÝÁ¼‚¦†²c7a ÅéáNi" ù§Ö2‡Ò’54£òÇRž3ê½7£:; ç—¬1ã­´d -FÎ=áù}‘kà…XVíGí/¯en$LjÛÁv÷—'o¤%k‘¹¶öÞðê:qïÚhGÖ²K"rkYß^ócw-+ê+k™OSkÿžÃðT»×þòZæB°Ø¬ÿÊZ†B0ÀÔZÆo—vð^{·”ó£ZËöÚ»~dgT?º–…+_¾²´Ã™í<&†./…ÌŒ›Ú›+ÛR^*5V‰—Z2¤Þ‚×<Äz¾w5ÞãP¨'4^SI˜ëÅ IľƒƒÒ?ý“=œêQh£ŸÜ ¼Y­0$þ"Ë!Æë-èÒ§õð‹^*5f¼WÚÞ_b¯S‘F—X¬á¼‹´xÖp¹í¬OKx2SžOFZˆ‡Ú¾Õ®·][b*ðÚÙ 5ÛãWaímளsg¥z(æ“òŸš’ô²?#O—Åäç¸C"¡Ñ_”› ÖÇ¡diŠ}¸×áO_/eÛ«jÒRÆÿn OWn­âáÊ’cWvÁ ÉJk†­áMKjúg×(•Z¤Úkxw°†Ïéx›¤)<Õð~KÏèÄ–ps°s5œ·‘”bûDžé~ ޱѢâÇkgP»tÀCž…ãqoèWê¡(•â•BÝöØm»“¼Ý6ù±“k¼w6ÖpQOÛÊ̓ øv¢G2Ÿo‡áñ¥Æ*g²^ma`æ³V}PÓ¯D{P3ÐDT<ÔŸmbáææØÚ«ÌÜõxFušœï×î@1¾?‰:;Õv'=6áÇÏcï;e‡|v½î±©m\¤Vø\¿»$MÎ#[4 ¸69_0“3?íÖpîͤh†š¸m—êúÑÔ=Hý"Ïõ‰>ð¹åoÅ“bzÄr g6½}ÕÌîqe oïÉkJ!_jë`®°5ü°Ñ“©„ßøµÚ@&Q>e÷(•#mÕl%G,CmɫۄÒo=*ùìU’P ¾{kx?T’ŸòãηdÈ…ø“ýè@»ë·{·Ð篺|q¤´GBwwxÓw+ÒVÊ»„¼v°½ÅèÊÑàp•J-[ú7¸hc¿‰¸J 9מrø2fw o[’¢/Ž?vŠìœoì†2ÿ |‰7^ylé0p›Ól?’áÜàíÊôðÛ‹ÕÊäì*•Z¤ß­á¼ñ¤t›¨d"¯Æ›èæšè´Ld¿íÝ+ç7øLÛã\Û£– ì¶Ý­O¤éxøKmÿ_X×ý¨ìú>âj›÷J{Ô5ð}™VÓMU…[úžµøŸÕ¬veo&?JA.•`~»í€c;×MD¥‰˜kï¿ãáoÆY_Ãÿµy•&Zî·n’àëÏïûO\ÙíÉü°Q< Ü*Md.a*qír°ÿ³ÌðÝÆþËèö›­:¬á‡âGßž«\÷µWÁp6wKë.“ö8÷Ú÷&j¥B.”R1—ŠÒ¢o3'¾æÎjhiúf¯®†ÿüÏã$ŠrȽ…¸ùµ9"*Ƨl|’K=2¯{)³ö"˜oBaL¯Î»¨âѬ²‡ß}ýùõõÕRÌÛ¿WÖl‹G£L]ו"Æt»ÁÝ\J¦ïÒ*Éó£aôƒÞp‰§ïÙg[Íö¹Ç€â!h_ybJaû¶KöãQ vàï œõ#¬·Ç&½¾{H™„MžEM;‹}muxÛ¥ë¦Ç›×˜n°í;Œ#ò,j”iÐä‰Èøþ¤o*i †íeàõ3Á¶væ¡xÝ×ÊÔÅ> 0·´ë½UÊÜyVU)•Gô‰‹¹=ž„7ð*£U4ñÏ_ÈŸðtÀs¤PûÚó¨DYp¡ôbÂßÜ\X#çe1ƒ¼˜²˜A^Ì ]Ìöå¢ÿë×Çý‡zÍv‘P`óë¾evGHŠSûÆÔÅ)öV)«æxÄv•kž¨°ðÚx¼9·ÉëÝxTÖ/߇û|³¸Ã¦¶Vyi”™‚ß#§.þ|“™øQ]ÜÀôʼnѴ )ÙFlÅFÌp”àØ³d‘TK çÔÅÍR6Ûh%­b£Ëp'Á]þ¢n0"ñÿ欤”—øý")‚þçü‹o¢Wš2î¿þþ4Œçã8»+¥@­d Îxˆš‚¼)ûÁàBí5œñcQêŒó_sá¼ä/„¾>#)uLÙÚÈÂÿÐ@­.ƒ³¥~¿ŸáüýÎÇ22$8(pÌp”à(ÂÏx|碖ßZ‡çŽÌ þqÿý.…ÊV øHsÛû¾\x·’Ò\¨ Á™Ó„V–:Ãù÷»0m_8¾’3 ¸hãÂÁ¥5G™¶8* üžãü.Åù]‰ó{Žó»0m_ð®»ç8¿Kq~Wâü.Ï»pækáßýsÿÔJéq>¿+£ážõ.Äyû\˸Sm^pÝ”çw)ÎïJœßs¤Ýå8¿‹q^Àÿy!Î 8CO¶]˜w™žüδô÷§°dýþ”—¬ß™þ–h©j|—Æøçp×lØ`Vû5ÌáÏϯ?qƒÿüχckoïðºj'p_À7÷âöŠÉq7˜-$pn²}ÀÓö_Éþßÿ÷¿>„°ù†ÌÕ~À¿ÿúÁ·É;å‚§\7þ3Ol|ÛläkkáGímÇUNYv§\ðÔ·ÆçÚ?þëߦ4Þ• 0d=ÿöø‚û•2_ÿõëݬ½ÚRNj;›~À÷ë0ŽÝ–3èÞÃÒøµ?n̰œñÇ…eÔá \nâ¿ëË;ÞnÇC¾ðp+ŒÞ¯¿þçèú¯¿„‰ïøÂ ðÇ‘¦–-uÀÿûþëËôáÇ_<Ü‘ÿ5üã¾ý-V²[Æ—ZöÚ¥n¸à|Kl$æ+ù8yÖ÷_<Ï:¾à›øqò¬­HpPà˜á(ÁQ„D‰±ñ\ùÏ¿µpîaª‡¢TÙÄѲ®ÁÔð®)¥#†*´5\­d‹ÙÇ£Ãf~<çžv4ÜàLŒ_ð#Ih K¶£(¹uik?Ž#.g¨ýYçÇÕ4ðvv®+¥’vÞåàLWSÃõ–<¬ßQþÛþºòq71Þ` om´ÁÉPÃ_ZA8HKÀXí ?Ðv\w”Ä?fµRK澩ÛêÏíçî„PùŸÍþòP\ñ|ÏÏ*o|ìð&÷ù çC^[<鯕>àïu©â¼t«m×óZP+Ý@Ñþn om<_a[Å×Μ6Íû”À±ïù¤tjžï·™¶o/¢ðž«j·g)áΊNíV1~Àu©ëºú–‹>ãºÄ†ö~Æ@Ц³”pÕªU®ZµÛnK®’|‰ªU.QÝáâˆëǼáÂæ¼$ãZ«×~”ªn¹à3§±|/jÿéN¿£‘ƒÖXÞÆÁ =Ÿ¨³mpÍÝËßža•Û3v‡M­qÒ|<4âðf]kìŸêzýÅo£ã¸|cÀÁþ¹Å„¼²TԮܱ±/†{)» ½èW¥Ã\/†<¿\ÑÑôbdh¥LÏ9øÌÜG(h”€_­øë+Ëy¦m®ûbÈ8ô¦êêþ‘}Õ{ÄÜ8`$†@ `¯„üG]ê˜Hú„xÖ³“Úþâ Va|üïòpUMpYÉC‹äSwšçëÚ«·‚¸T{Ÿ0‚{ÎóÕÄ^a|ž÷S®;߈®¢îºLZ4ŠçûÆ£‘hå"q9μÓßg|è$b·HT…sœ«OÙø+>ÄÁŽÓ‚¶íQzåØ7ÜÏÃ'úÝ+„±OÙ.x`òz,$ð q®1ãÃÔÆ9ãÜð‹ST?–Iïyt ¼6þ{ˆ×pòH¬T¶·ˆWh;y7A2,ÏíÑõQ‰ÇÏo^¯˜›¸Á¹»JסÍÉÆ<¹A7µð¶‰T)hƃÒöîÈ0Â>Oá5üzd˜b£¦o$Ä€ñØ÷¼¬@Œ°Qs‡o%Itxê2g…_p.I>຤Å|;dhŠ~ƒw<¯¨8ÃÈ ¿=˃°€Oµ½"Ë…ñ¯ìm6×î./ì·ÐrΜ۠ÛZЂv í¶?â¬b¼Sà]nнe#Æ×ó<¸!ù©Õ|ßCòf~&±]À½¼YÄ@˜Ù,RÀÇ6‹T+„9G©¯‡ábíݼøï7ÍÔÊ‚æ©8¯öšœÚl”ÚŒ‡þÒ ÓÕ ÞÝRbœ¶Yä8h èÅ·@+qü<Ýñæ¢YÕyÈ]óP”ú'ÊóIz§mi+©ƒÀyÅÆyÉ‹ä:Þx%Ëmœ¶YdÀÆ0׋ñcE>£<‘¸‘Í"ÆÅþ+hZ%q®‰qÄ•¾ƒ‹6ö›è‘3å‹j•ô8ó¢Zׯ¢ôÈhòù0Ew‹Çe#ÓMÍÙp¾ù€ ¼i>>UI=_ø¨„à@ EÉÙÁºñúj-µ\À5âîÓÔ¢áÓÔLð€‹ýÓgÞaªýkïwïõ²Ú!NÖ™´ fŠ-m·Ç@ÛÍœçÍÈ@©d .ŽÞ>§ €19‰ ÃÅØp°F%ûd;Œl1ÁÏõŸš]ÃÔ^‚ÂÕ›¨Þ¬»¹~ؘÚä{닾ÿ¨áGp5®{³áxã5~´Í"•DÎFÁIéŸÈäõ†W¯=G¸zñ½åê|í5œ7e¬‰‰ñÐÉÕ<²YÄDm³H¿‰ÅCôW5®#-‰N©dÞŽ†c³HßF§DZŸ«Ç©Í"\‹1Mqõ8µYdƒ‹êÇyäâü$²ÝËoUq† å$FÚPœ§¹8O«Òăå¡[NFñ¿Õp1†úA@éÞ~&PÚ>Àõâ0WO0•ÿNS›E.ø`f»mœšœðkÛ5*±Sd!Ù¹ÐJp ¯qÁ×…gõYxÙ,²Ù23=ƹÁ?µYĤ¤põã47mâKÌapJÖØcªá»ë®;ªà*¿h‚+ ðƒoÓ®Þm⽉¼m ¡úuÛy㮾Ýz'rõJŒäˆ±&ÅCMÛë-?…ñ W‡ëX»±ƒ>jAi"o| ðcPÂy Ò‚Ô~4Ð-\ì†.Wßà¯oO¹à£iãÖW/à5%_$_Ã[?žG¥u»×˜©â·y ÛïÀ̪§b¨zt°ÁÅîn÷€kk[\ŸßêrÁ5FÂ&°½‰]®×Qƒ/ RƒÏLvõ’µÝ'Âj·ŠñýY°8jPØØ­‘í.quÒïÕ.0®—W_A‹§ŒŒÑë¦Öñë¿×ÂÆKÑ16¬ýsGäÕÆ§©Þh,oÀóI¡@]& °p€U›øº6Â:5íÂ:ÃÂá:ßoà(”ï†køá`#•ä¨=ÏoK7¥5gˆRx¡ÞN—V]^¢ïžK3ÐÆ6øa¼tBŸA¥{Gvó€ï¿cPæ×9WŒMy|x.ÍPW2ò" þTK¢ÞPîë€ü!6éò#”«­OlídQo*ÑöÑTÂHóm£^ JµTTpqZŒ“ü˜tx}3ÞŽñÛobäOM¬+1œ#ÖÂдdÊ%c•P¹vÀ•ìÓÜlXF5^É"é0ce‚ÓSÇUT2‘MŠcÑ»jx{T‡³[ÔÿøëçOr½õ -Ê;¼¾n}kãƒñø‚ÀA*µH¿ÛÀÇ÷&`g=´°³ D>Ùú6êylm„l™^¡U5|Æó#¹ZDî,®G!ÃõÏöEoZò­[-+™¾}x{bäJt^ihÓ ¼ñ5¼ß’í@øwÉÿ ÁÛ¡lƒÈ¼‘4ê×ý˜”^¼Nù.KÙÛv%(ÿ»<œÌÁ7/dRlhà1dÓœç¯{°IQ27ŠúÔÖÞõ[ûqnEѲåèè{È­#Žp0Õ æÍûñ›ãµµ÷ýˆS‹‘Ãþ|äùÜ¡¶Ý{3ª³R©¡ ÙYiÍZMœZ {¾¯R ¼ãyùAÀQûë®É1"{†u÷ÞðFZ²–‘UÊ›‘Pè[f-ëÛhGf‚í æ GxiÉZ¼ŸZË®Sp_ZË|šZËö#|_^ŒÂ\/Ö¾²–…¡ 0µ–ñ/ÖžkY¿‰0äG;× VZ²¤SÐÖÞõ#;£úѵìzÇ×”/øïpnS} —U!3£Æþû³[ÊK¥Æ*aSñß>ɯœ_ØÉó œu0)´nèW×_CP<4àà ôOÁÜŽrýdJ£ kø &D´Míí(‹±ØÈ[¾Â] ¿è¥R‹´ÄÖp¾‰‹äs®‹O-±«©\•¶ó>åk×âë Ò±…¸ª$ÍÆn“ÑÖñnÿ$3Ò §‚ qräí¶Tǯã5|¢“†ó«ýXÿØ©æ†_âònøä§¦žÄ÷w¨™þÊϾ1øû8¤bS|FGn¿[ÃÅU•o§'ÚÞêÈ”žI©¶Æœz`WÇGpHRVÒÖð¦‰5Ç´k”J-Rí5¼»JY³ ëDž¦®¡†÷[bPi 7;WÃLáû$¸ÄÏ•ôÅ&{½Ya± ú&ú§: L 5ü#_üÉo:°Šñ‘”Ž»íúµÇnÿ8™FÛm#";)ñB#¨á¢Ð8žÉ•ûƦöv¢G2ŸoûÏùRc•ÀS©µ¦‰0A³V}œÓ¯D{˜4ÐDT<ÔŸmâ*9ŒÿÁ-Ä®†ó'?!y½Æ:õ Μ·q‘ZEàvªíÎJá¥G;Ôø M¢ËÀû >Óö¹~¶K•÷Æi³öµYËÊOçíuóáK³«çß‹Âm®í7ѯ#~ôs!èá©àa<×&ú"{¸Œ²o™8Ù³²Òä"ÌmÅþã«[ ùRûµÝÿp_Ôp†%î»Bã=N®eß÷/VÍÁV©}ÀCvÄC ¥ßzTò9{‘ŽÞ•ä%wä^,«Þ²ûMôÞvÛ^M)w Ŷ¦â–dÚv× bc>Ó­€Òá–<Wv:ÔÎýènòÛà¼)‹tWi çý¸ ÜhºÃÙþ!¥Œt§Û‹)úØÀÙ}Øodo›Có„Zµßè-W¨™»^’H£.·˜Ôðve:v—µªV&gW©Ô"ýn ïÛÈ¿gô(5²;Æñê`¼‰n®‰®k|¢$ðЇËI >Óö8×öØ7^~VèÜúÔž’:lÜúbÛÿÖ-¦¾Kýëˬ¸Aq­ìžÓ ÞN°¸Žˆö»kjÿ³šÕÕµ“RKAw†›1çY*üëÏŸ¿>ì ‚8_Aiâu/(-Áv>ßK1ëS æ&bÛÄ¿¶þAÅCÈí‘”²ù·úoV˜Ç:jøa£xœ°U:lŽŽ;pVŽ,’€!p›+aç$T$d ’„EBœpV),]qš!¥|¶ÑK6z¥’ YB $!@‘%òOGþœETø‹†$d ’„EB@–È>†ØáF™"Lž"Œ4EÓK:Ï@¤Tž"Œ4EeŠ0yŠ0Òa”)âàÄȦϸíÀYêÛOŸÃ'†Ì‰QâÄ pbȜټú÷:üUN ™Ô¢DjA!µI-¶Ü5ÃAH”†¼€´€ÒvÈRÇÒq;¤Ž¥ã Ï® Í® Ì®;¤Žƒ¨Ã_¥•y!J¼^™"›¿ÞᨄÏp/Áyföãóó»ÁÛÒýùã»Üªºáøc£cKðŽ"*ü®ÔVäk¾—òd3¿•o ~|å¶qM\ò¬ú†Ÿµ mgjÞ·ð/¡í_\«¸èº/Ùó¿þþøaÌþÒÝÇ×þW?¾`Û¾Á!ÃA‚ƒÇ G Ž"ܬ†áÐØ°½"rÿõ÷§á7Ý\p¦í´ÔÖ0þ·¶í œ·±(…j%Ü› ç®é Îø±0åŒó_ cüøB•3Ò˜RÇ Â­ñ,ü ç«v-P+8[ê÷ûÎß1Q»ä/d8d8HpPà˜á(ÁQ„ñøqÿý>6Öp¦‰o¤’²‰\/rµ7ðž)ødK\<ß¼¼àŒ» SÎpþý.„óñ…àí3 ˜R¢#8¸4ïǾukÿâGÃñ¿ç8¿Kq~Wâüžãü.LÛÇì¼»Á1ÃQªÅÚÏ@½sÚ‹ó{1Lîb Þ¯i›+µ°mgà]S+åoÁïïÜ•¾ÃDiIŽó»çw%Îï9ÒîrœßÅ8/à=9¾ ô$4pq˜Ü•a’iéo‰–þVhéïL K´ô÷§Z{×øÏvôS»äºöT8÷Vÿùùõ'n Ÿÿùðü o·cç¿¿p’ñ¼¹å9ïeýÏ5ë¶B4<íµï;^[ãùßÍð³ö¯ìõK|«j8ßľñ]ã9³2üS¬ý­„Kž¿àÄÆ·ÍƶíKÕöÏTºÎI›Ùéâóç¿þmØÚÕ£¹\çK=‚¦†ýׯwvÈƳ žÔîY׿+Â÷«mÚ–3èï–Æÿû¨ý¸S±ŒÜö/ì*¹®„¥Ônãñ[VÚéìø&–ðòÞÇ·ÍÆ½Ô×_ÿstý×_‚&=¾`Wèoøãž ~tÃß}âðýÿ¡ï¥¸Ú?Ž"Zí÷íoÖovËøR6žú0Z;µó:J}œ<ëû/žg_ð•|œI©(ýÖ"ÕÞÀ'º!J ·,åPá‚ýJŠK=‡SEdNuƒCi0 å3\å«.LñU¦‚ÀÎ'åc=ßÔÞ^SÖ ±å«í5Ù&¥â¯¼àÐ?i— Am˜ 88jî‡`Évº¤AwÍqI&ý H’‡˜7w¬P†÷k?øo¹ïÂõ»¹kj}üäÚê<”„õfŠ-×Ò¾d¼ÑÈvßófdüxx"‹ÊÃ'†Ÿ‡©‘áÝœƒÄ‡Æ씑Áó·Þ§äÞÏ ?/1ïe„l{?µBû‹gÙWá?jø!Øx PÇÔcC‰ojïsuŸznÞT¢-_}í㜃#çàZø¤TÒÀ²íµÕ¯ŸªÝïe~½ÓW«ô[C£,¬Z:¹Û a•LJ¹gº¡!ÛÁu»¡Ö üõnnŠ«g¸ÊÕCRvð$¾†3‡ekÆ‚ Iœz¡Ñ!õ×2-:u;®S•ÄUªdhËB\•- }Gm™SeŒÇu„«G#‘â¡8¦Ï‡4eÅëO$¦–ƒScÍ51)ƒ´»YİÏÑÆ§Ú\ŒàþZú{MÄ r—Ð*§fæeº Î^Ño»™üÁŒÌÁ:Ñ¡ÓÝS±`jd„çØX nÎx§¸®O¶ÃÈfüœ^±q §öš˜ú§/$¥{¯Å3µG˜]éU÷¦ío6ܶ4G^½Yws¼ñWOn©mŒÜé[oÈñÍø.z¨up3âW/ž‚'iKJ %Æ”óµÀ&&ÅCÙ,b’ÇCe«½†ó¦ y(®#\=:íTˆv0Ul9º©ÁÝœ‡ÜÌ+†\‹qj³È"Ò-ÖpÑCAÀ ºCãê1põ”# QØ<«å€/8ÃÕyãkøD¦¹AšF6‹lW«ŠyêJŒbã@ÍSóy½`&Pàƃ2õgê}®Ž2WÏð—6v›4µY¤€3\}Àu8×ï82E$;vnüاçhš¦˜N SKl ZFXx #Œ>Źáçbhj³ˆI鉗0¿k·5|wðuSuöJùEÓ?)E×Wsú\ÃRàß?¡pu¾öÞ6ñˆ¡®;œuĈƒ 㮫yâ%L¦Ã4ñäêÝ^öÈŲ;Ùòוg*ÉcM„®¾>!rõƒfc;Ê(Õßàb¤ j˜É«_pу´qk,¯¾ÁÅù¢ß‹üÆ-k£g\Ù\;‚]®^´]áêPì“òêÊÎl0 µdÌCÚ0éG°ž‡4^´=®J%8³hÀµí¥ Ù ²âuóêÀŸX8ºð™`»\]!Û\æêeÇUTŒëqõ´ÐvSó›qŠëúÝ?79S¾ÁÅ‘ÑM¸gø«ýž”ÚÚ®Ñ4žÕp±ãºüŠ­‡2WX§Ö>á`XgX8€yŠ…?n…®á‡Ò F>îÀŒÐh€îöcgŠ|bÝDáÁÅ>ÑÜT‚Ïø±Þ €#DöÚÊT2`£a¢ž8„©$=P…îfa•$^pp¢zâp7¹–ˆg°ïùÚU2‡S›o78ßYcM´J?òkáR ¡ál×Iz/Í=øÜá:PÑÏyÈOñ!ô]>T:¸æC¦øÐu’ÞK >yê.ç»wÈóö¹%«¦Ö(ýÞ§ÖŒP SÁe§N݋ݧèF>(qƒ6ÂPt¬†¯]ãÖ>w×@]‰Ull›ØáÅ1sÒslJ/:ÆùxÛ¦‰n„X/ýÖ˜~„8Ó½_@«Ä6ìöûúŽpÝÓfÕHËp•9äÖ/= ÞàLK\ câBeøY.87B)ŠÖ¯ä‡.8w3x¿‰^iâ@øJÁnó>GC?ÅrmóšUê‰óÚÀýÒÄyíÀÆ*² ¼Å9d/<Ýö‡MP —¦æ!¿NyÞ¯~×s$çŒGiÍ¢Ŷt…Rx;\ÞNQ ïžK3ßÀ¡DùPqðÈnðý·`ÔJÒ˜üœú§Ö²íö××2§Î¨÷ÞŒê¬Tjh-sVYËøUª­]XMúk™sÊZ6ày'­xcžwsžÉ1âvŠôýå)œ?„zx-ófd-»ôíKk™·RI)?ç?µ–y?µ–]§à¾´–ñgð¯e;üe×£ÍÁ÷!øëkYñ^®²–˜ZËØ7c¯èè6†ühçüh§Ö²`GÖ²àžZË|5£†+×T¾ˆ¿Ïçü"WÙnئ!vª-ü³[ÊK¥Æ*áw”³C+^ð’Éu5¼¿.† i¼~%A³±+CP<4Ð?Aê†edÁÜN‚ýdJ“6ðö¼ÿ`øóþ!Rã#r>fêþJ½²’ò¿[Ãù&.’S<ιŽÍ ~*Œ¹.v]W¯½5¼¿_•¾´'£ØØob2š‡ºÞàÝ^Ls ±`EãÇš80”u<ÙçÖñºv«õëù>1~’Ÿ‡3$ƒË÷=¯¬ü)(+é~ÀÛÓèN1ÄžLóÁÛÛxRR“ÿÝÎ/‹cµ'©Ô"-¤5\Ô‘Æœz`WîPÍ“=²+‹­áÜX#)5%7çm,K=vdwZRMô©†sÃ$öþá›sË(| %ZŸ0Á¬Ö×ð|o(ÿ\évVç·!\Û ­ü„mƒ3Sí~_Æ@Ûc·Wj]ãÉlUµßIözÙLc5\̹OîÊ}Œ co'z$óù¶×Œ/5VÉÔskAò)¥= ƒ‹3ß@QñPJ|¤¹pë­ck¯tŠe“ì·5^o5ª3ªƒçæÊHv­mpÞÆEjÛ©¶;éÙLÙGo…½^Þ»EšvkøLÛçúýÚmÅL»Ý} \›œ¯{­a$«g&ç~ý:âGS~ô MôcM„‘‰>ð’ S1HåSýlàØË~ÎO“e07r›øÿñÕ-…|)°B%äÒpËïùY·óÜNã=… <åÕq¶ày8—rè·ÝŽøqS…Ÿ\©eÎ÷õ"uo çcˆ”òS~Ljê¦ßD/y¨(µÝ:Ùþ–»…b½-îoñH¨³ƒôÔÍäÕNOÏœ:bn!®ì$t¸>ñrB[ ®Ê5-ÝË×7xÇCšƒq•ú‡”âèã[¼ùÄV’"Iîð—ïêqÜ¡÷BFĮÑs?)Ýɦ!©á­#D‚ðhe ·«Tj‘~·†÷mä öN­úùÊ >ÓD7×D'¥;‡údžnÛ•,ߟi{œk{ìoeãôÒ8 ¹Î­/¶ýaÝbê»ÔŸÕ¬~5› +íQ×À4¥¤E“3 ü__fµuí¤;2Ðo„怃?l„v%}o¾¨›ÙCZ%˜K¡äGT*Áv5Ñü¸žâ‚ÿþks*62÷ î¦ð•|kÊ~Tb…§€+›*jß=d].%2±:¥6- ¦8ø†Àënp¹‰N±Ñg½d£Wlôí}*¹ŽpözíL“¥#+dƒò[1—ŠRK¢Òæ}% ¬C¬á__[{ÛÚþçqVG*o!ÒÚS†·¹¦öˆg7¨á涥ϛ“ü˜PaŽl½f•ݧIöü#ë¼—2«ôH}•=o˜óä²çw§˜U¯YZ"œ‡á™ÒóoÎÜóÙÒ¹×¶ã™·¾¯°;EY¶Ú·Aª–‚\ Zï•€¯_ÑÒæJ³†þ£×Ž@N‚¬fúÕûK|o¢´æeÍ1yÉ2Ê¢aò´m¤Yß(³¾±ík!—wã­^;iß¶“RyÑ0Ê´mò´mÚiû0ÅëpF¶¿ï¬…Gá9Qd¶b0~ŒÙÆ(…s”k‡<Ý€2-@&ƒ`„¾e\Ÿ[óòÂʈ…i D侉 €B€nba£Ò‹c”P¼ø‚²øB^|¡íÒ¿~}ܨyõdàLWK(ã#{²¤!ø 5¼~%­Zþ@Yþ0Ç#óún®:œÛ» ·¹ oéìG);ôäûwkøn£_…±è%ãM–\ÀK®?g6‚O8+ÌI‹8°ši¹]OVèÀYÍ´äVÒvÈMÔ*Áü[(y;pILu´˜éȤŽÎ1¢Lºm¯aÆwàGÛ­âG—ËqÃZýTó¤[_&µëZÌd™¼LúsQᬘZ$ýDà!פڃR{Ìð(ÁcÎê§E’L5œQFù±çQŠ@ Þú Æô ( æ„ÿ9ÿ’qèàuΟ³ˆ —tNG&pF åç–G)Uèræ„ïM”æóœ‘3·s+ÔQŠ—3û"Gíʼkò¼k@Ú¬LȲ"¥P’}9c²V\~ìÀ5U_çé•“3Î"b%V=‹¤sj8#zn53YÎ@+g.•y×äy×Hó®ñ:œQC–Ù6Ò¢$gVÁÜ"4ðÝxiÞ5ʼ yºiºe¾€<”AÊ`:ðF瘛q}ýd äÀ 2(œ +#'׳ú‰WFUÇAŽ:¢”¨ƒ¼\ƒ´\ƒ²\C¢g´Ô¾­£#ÅŒ¨¥Ê‰”5R6>IÆ+pÌ1RÌãªÃŵìÛ u-ezZªUIË øf¼¤¥œ—Œ‡BK9æùÓ÷ØŠ¬.=¾ê<ý‚¬f U3Wí ÔŽŽ;ðeBƒU3‹$`¸¨’þœEÄŽ³¹‰Vi¢Ë¿å$9.Ë]Àœµëb ™ã8²ÛèÕ§AúÃ$(dN£f®ÚƒR{Ìð(Ácþ¢Ì!™Yh@+4.“lcV ÐÈpñQ hb‘¤IS»®S`N@¡@¡q5Q™Œ('JÈ [ÒW 0¤@à¬Ðè?B8#MÈF™ Ä+U¢L‰ê•ÎóR P(Fh\6*ónV ÎHS¢ñ:üUs  âŒ4%eJÌ Ä4Ý€2Ýdâ@Ê`:pVh,’4!ð› Å&(± 9l@ pø‹  Ò«v%ê²i„ÆWVÒ¬@HaQ‡¿ª@ ó8†—& üÏùo¼²ÄfÒ ÇU‡¿ª@`N@¡@œ—ŒŸæ`V VzšƒÊÓœS ˜ˆm…ÆU;(µc†£ÇüE‚YØV\µ[¥v—K±³UÄjì~‘TC×%fq€’8°Š8À¹g ˜Å•ž ò ³8°Ò3Tž`gwXgs‰ÌâÀ¶à²1É•âÀJ'Py<™x[)õJê5â½Hz ©]˜‰·å‰÷Ÿ³ˆÏS„‘¦£L&q#qcu8OWûùvÔÒõ¤”Ë6:ÉFeŒl×JùvTòí8Çv1ÓU+%ÌQI˜c¦«VJ˜£’0ÇLW­”0G%aŽ™oÚ–V^p¥ã ¯ ­ ¸òä Òä Êä yvivev…Üq uDÎóÂEb’žçMæMPæMÌaƒRØ 6>ýç³¾?>?¿¼-‹Ÿ?¾ÛÈ­kû^€?Þ‡ðl©þÏQD…ÿÕZôSÊÚ¿xøñE(‚# óã+·ý‹kâ’¿`eÊ7ü¬ýKh;³íË—U•pÉø/Õø \Çût‡ÿúûã‡1ï¾ÿúúþ«í÷ã LíǬë68f8Jpáf-o=ÿqÿõ÷§á©àçNa_”¹ÔH%’‡h)*1ÖC \7åŒó_ q~|!xûŒ4.z{áàh8_‘¦jgKý~?Ãùû/&j—üÛÄ 8f8JpáG<~Ü¿š¡‰0…δV"„3l§Cqmgà¼E)!œÑ³°bàz%g8ÿ~–¬ã !T΀bJáÜÔÎÂ…iû·2ï–piÅ{¯fýÇ+ÆÇ~Ùß÷çw)ÎïJœßsœß¹p^ò¼ñ÷çw.œ—ü…¿âüþ|œg8Óö7RIÙD¶{ïŸ}xÏÔ[rWâü. [\òýÃgœß¥8¿+q~Ï‘v—ãü.Æyÿç…8/à ‰ÙO·þ’á™–þþ–¬ßŸò’õ;Ãß-ýý©Ö~ÂEZª°Ú²v¦í­PÞÁõççן¸ÁþçƒVr[·Ki_øâ‹7¼<_¾à~þõÓ¬L.ïî$ãðÔï¯Jðl ¶±}ƒí†fJ\Zø‘=ôÅŠµ]ÃÖN‰Å¼[Öþ‡Ö~;0ÌÄY× œkU05¼wHcZµús0mC‰o» Æ,Ü }­PÃëg‰ñÛSmÚ¾àÚ´}”iÞ]¤ÚkøkMÄ?æ\ZØÇŽj Ë¥å¶úóÀ¢G©ý‘þË•¸“VÏjÅ»ŽÍñÛCu.‡eÎCò|s(Y ßKÕgÏ¥|ñؾ¾Ÿtÿîñ\Š–:ïP­Iüƒ‹ÒÚA*µp¿K%;à¬WÛÅ{Ow8ÓvñºwSžÀè·¹¶çyöÉÃgj¿ö’VU§•íp±íž·šçûýnOãíЋǵëR×uòQx;|/Å]ýÞ†#¸¦ö×åÚ…«ß½r©»_ϸ=w©{¿ösg(5þ¸²¼ßq¹öæVvÁóxuõ;ßï!’ÇŸ‚A‡Œ•‡ŒÉQ‡íCÚ#—ûõi—†ÌÑïQéw75âŒSfÚþˆ{À›å¶:pŸ-Ÿ—ä¸ÞöOqY¼W.‹ßáã2×ÞÜ5OJ…³”]igeýªÄP˜ëÅg®‘cæš^ŒJÿ4D´m{|jÐcNx·ÀL­é`û£¬éÇI¦)p#½Wn¤ßábÿô£`ÈÁȗʇ-ùâH‹¶á"0â`hkçiåÐÒ ¶Û?e+Ù¸H­ªá­‡!¸H>%p§y¾_»cj߈ݘçD+‰I¸޲յ{%lú®C3å:4lhƒóCÆ£Qc?h/øKŒÂøx2ÆÂf¶Hd¬†3JvlÈ ´™oöûÝÏõ»Wjèw/ñÂ!¾yÁƒåù¦Êø1Ás®1ãƒ6âºó<†¡þ‰sý•ù¸O1J¼pá<ÿ`’,\e|˜$b·HT‡Q¶ºÓÔ¼YœØýJÿØU •!ãð>­´øl˜þDœ×„Ñjt¨Ïø¬s°•xá"1É>Ð Ž½{ÓØâîÍ"Ãržø‚‹9¾~ŠÐ^+¶1ÄÑÕØÀßkxãG/ýÖ2 om<ˆÝ@z‰|Ž9ØKýCJ…¹^ Sôφ9ÆÁMRÒFé·ÆB%jµï¡8Ò §ºÁá•Üj»¡eUêÒ¡â`ž¢²Æ«|Õ-CÙ žjbfsAI1ö3”¼Mpt/?H#ÒŠs1”ãœyg¡OK/8Ãjû£Ìiƒt â÷ué©Jjòú€‹14ààôón§¿NuïyGíÞá4诩óP÷úµ7E¨lÙ›©üè>±Ìx£‘í¾çÍP÷‚Äj—Q8oÊXÿÀÔÈðî)xÍ–ð‰å5&ÚçYÞPrï§8µ÷s£wމúKµÛ(¿x–mÉvßxþþɘ/lÖ©¾#ÆG…-ATlhbTܺ®q¨R?¬‰1%gzûMLý^Tvø4"Âú\>8ÚPÃÅY°ï¡ Þí†à¦Spì`:²ÆÝn®Û µ¨áÙ­qõ W¹zHS¹å lþ~øäܘƒÓSC¹f¢!A\ûrD©$®Zv›×n i[â* ‚+AªŒñ W¹z4ŠýMüõ™ š§ú§æC¦¦ˆ¨’¹î,Aáê}ªÁCà•‚ÊÕ#NqõˆÏe¶ë¶ãŽ8VáCcð ºû€+ÆCaŠéÄ íOì;8H|hÌua„«Ç87üâÕÀ'Fo’®ÿâÈö÷úk8ÃÆÞ`,#›Ø‰ÏÞbÚNîŸt=/µõÛ^ý×·ksíÆñÒ íÅÉyƒ7/™çá×öEOà •Z¤ß­áO_)… þºÌ1FÛßÛ%ñ¦Øçé Á·ª†ÏxÞ*ž¨Ý*µó¢ƒÀÓLŽ}ƒ‹µŸØÐ÷šÔ®›Úl@ÛÌLV@/vwÄ|Åv7x§ã9qÿÒVsm{e»ÆŸè÷bs˜ÙkRõûe¼a³ˆ÷Üf‘ºv7×v72{ÀÚàêÏÇà•I¥»YÄ\ؤÍ"Y.à^ÞRb`j{ð¤Ôu/†¹^Œ¼ß½QéÞî6 Þo"š©5ÍÔšŽSÛƒ  ]ÝàãaÄÁÎq/>JÉã [à ø[¸»‹£CîÊØEáµ’€ÞàýÞù)fæ¼bcÛÄ:†œŸs°—LJ¥’18oÊ"µ½†7Ž8ÉgŸ»º0 ŒÓv{ Ø•@è†(9¸,åqª¯py0u›è‘r;í& 7øë è ®òUº h%ƒ|Áå´F8‹§m#C¹¦»~n”ñOÛùR*ÎU§†²’#†8µ]JŽ ŒŸ‘Í"Ƨ§z±^sð™Aš”AÚM›°*ýÓïÞ\4¾ß½×S<„ç÷šp)­rê`f¶VpàÏŒï´ÝLõû>Ð?0W t‚KçÔ¦FFñ4J)`ÍÁnj‰ íÓ´0²YÄ„©Í"|br~jr~<õiΖz³îV¼›“tøÑ½ihw¿·5¼iâ› ·¡Í"¼ÏÕÃÔf‘ .Ú8ÐÄÈÞõ†å £98r®Áã9´\I oRôÅSðÔŒq¾í5œwÄÈSSìP}|r³HÕ ¸Ø‹ýnxÀy“RNñ#3LèÖê .öâ@]w0iÃ$º^Ê[eá\côqj³Èi³Èb(à ¡†²†êÇ4ii•~k Á´N å´v‡²ÆÕÓÅQXo•½&\åêü3ÓÃÆ&%Í=à`óܯøP>P;L-F ºo;–W§¦Lqõ„S\==¹Y¤n;N­ø@ÿØ©Õ>Ù):•´Í"##ÌWxjdÔ&Åu}š–F6‹l¶LpõçFï•L‰9Í­<§ Õ4AâiÚ~¯ËÞ?×MÌÌ•—¯²Ôp^=¥òݲ™Ã96xÛ¢6kãk¸è`Þu\íŽËÛ»¯½†ó•p½XSý ÞëE™…ƒpX_m#tóêj7ÀLœoðÎ ŠÇá 'ÍÔ&vÈ•yuu˜„îö……_pÑCÞ¸õW¿à/íÄc8‘Sæ4m˜ôG™a)‚¡•@g(ëj`*†¶Íe’‡ºdŠÍeÂÆn…ð¸*MDeºé®9|bB~ÀEª?Ð?vjv°ëm¿{íÌÆî^öÏèÆîíä «¯ —Sú} ãÜÜèõJÇuSÞþâÒp"øZ̧§àÞà3C&)mï²p¸¶*,`aá|¢‰°j ª;.¯ãt„¡‘0ÜàÌ‘æa„F˜~0E£ùCù¶×ðÖu ^ûDGüØYÀ®5ŠZ"¨Ð]xîáGí5|À]é¹€¢Yã Þq„²Ecƒ¿¾Eã‚«TqŠJ"òϸ¶“,[U‰× Þï´OuCS‰ík9sºÁõ]*»à^YØð¹¾u8£›šùÐ+ðÚ»›oµ½»¼ôÐ0Â0Ň0Lͨç<•Úû|Èš)ã­‘–ƒ!JaÍ¥°SÇænð‰Ø´Âb´ÝÒr´]>(®óç Imµ·8®sâ^y ¾ÁÛ–ÐÔ(A`%‘Rî?6œà:èMô£¶Ú §ÔÕ£Á÷“[š#üˆ#œÑÑ­Ä6ì·mnp¨«½3#ÌÁ¹™m›ü¥m›¼õM/iæ5ùDJù¹^ôŠÇÓ:%÷⦎ž½à*ñpArý™ÏÅCÝà✃#çÇÑ­‹àÄÃ_‡‰KS”â:ßÌÀÐ’Eg¿v<¯s¿JÝ;äyO…M­½¶Þöײb[ºB)¼ .?u.+\U1¯Mµ£Rû5¿áÀ“ä5¬ž¯]#×1YC×5•x©% g|~$—áµCKly‘ÿ¢Qo(÷u`ÃŒ¿h”Ï›-]f{ hSITòý•°S­‹Pêgj§«IUª8-ÆI~L:¼ÍØ[¡&GÝ8¥uËx¿þÉRòךã•P‰Iy§¿/Tb~³Ü´Ç‚cQ>‘£¨]ÐÐZÒ·1lì/Ä×AÎ\lv¼ÕÞàÇC˜‰^LØíÅzojoyåh/&+•Z$Ï×pqï€d•Á?ày?çyß÷¼S~·†?a|½^n¯ÜJë%ÿ»5¼×ve½L#—øØÕ ëÀpWâ¡ Þ´¤æ˜vR©±J¢´|•¥Ì*,ÂwÉÔð~KØSÑ•–Ô•ðg Üœ#¥rŸX”v!‰ΘƒzFšèŸk"}³Á?òÕļñV1>÷µó#¸øªßv«=⸫oàü¤tí-(÷P'ŒMíí|Žd>ßžõó¥Æ*ç¦Äº‰00óY‹šRèW‚Ò7ÖDT<ÔŸÆnYulíÕ£,kÓs3ê·õ%ÜTj™H6.R«ÜNµÝÙgæàí Ê‹Býyó:tøµ¶Ïõ»KÒä¼HÓy ïîg³^8à ®è°ò6.ëWijâ¶k´ëGS~ô0µxнr’pƒÏ´=ε=jûºmwk¿íršnƒ¿Ôöÿ…u‹©ïR«Òjŵ²/3ð÷¦ÔmÛÿã__fuõïÖpNóCJñÊãµJ­ ØxÝ ’ ØÙCZ)Ì¥ÚTë`¯½ÿhJ‰o»à™-½à¿ÿÚZ‚ж½qórÄæ‹¥…•Ø‘WÐ¥¦öÝCV±ÑåRâÕ.Nñ£Ë6:)œÒDÇêÐõðG)Ÿm”Žòã™]oJ‘xôЇ„'¾§^M¾å"˜³ñ=Ü †×g‚Ö£!)mO¹‰Lªj÷i’Û¾½®²•2kß׬xu¦Ô¥Þ›/ªab¤—HÏðLéù7gnd(³¯Á<†ÉE8²hæ$¦Ëó»S”Ec«}ãj)È¥@è:¼~W4ÛÈn¸Àþ£×Ž`…¤!/ã*‹ÆuÑ«i£‰Êr`ò¢¡–ʳ¾±’­¯ßO«F™QÖþ,¾†«‰Niâãtž?¿ï?½Q–ÃOÛ;_>¬Ìú&¯9†9¨~ÛÂóDo¤‰Þ(½ðtÅlŒè0^™è!Ov Ìi©(˜~±ž¯€o«'˜î³ƒ¶‰é (á ™ž€Ä/@ áu¯uën7^‰4ÈAJ_C^úAYú!GÄ!o¯®†ÿõëãþÃpG5nëh‘Úwn«© ’ßÃN+õÈžì¥p¦.\uxóÄKñ9S?;ÜŸpx¾Ùè[ã÷VyÉxs3V¾-’bkàVàe៳ç&k&h5Ó‡\Tlºà;á­®[nž”BI˜-’kà{Qj¢·n%¸Õጻaq)‚Uº×vŸ9´«™Ve-©…³ŠmÉmwJ»ì§Øès)ÏM$Њ´.j1]Ê™Beù5Hµ¥ö˜KE)¢Rû“ò+?5-àºÆ3¢ÎYðÖ—I¦§²ö¶'ÅC);B©äSÀŠ©nÖœÕL‹¤²j8£ØòÃÑ£”*ztÍtÂ÷&JrÎh¦ÛI)^3íç*µƒÜY²) ì‚1Ê´-K.R %i´Hj¨ï-‘¦íœÑL ÐR¼f:¶îµ[Å6›b%9£LîÆv••94ÓnŠ“¡Ì»‡Vp¯ÃÑsäÌu9c9ê^Ü"4ðÝxiÞ5Ê”yºiºe¾€<”AÊ`:ðF瘛q}c²ÎVç\µ+a9l@ px«snúúÉȃ´Úƒ6Yy–kP–kÈaRØ€6‘UFËv‹¯¥¼#™@‘L'üÏù;d ɓР¥–}óáV;*rO5ã‘ÉW²"«„«Zj¯]CYKyæÄ>FK-·+™½‡\ú32(´”ç¤ØŸ[‘Eàá Á¡QKÁ–‚Îã«ÎÓ/(´”_Qj"*M´n%¸íÀY1Ô×R I1RJC-)v´Ý)½è²#œâŸËK~ôø‹Z ²–IK¡¢¥ ÐRdºàQ‡ó’i‘DVS»®¥àP3¬dZ$‘ÕÀU-%«$ÈZ Å…–òÜ“¥ .>˜‚9-CZ 1ÄJ¦EY üÏùßDeBÐR0¢¥¼QæÝCKa«¸–®J‚¡çO0§¥ ÐRÞHÓ¶Q¦í-#ZÊ‹2²–ÂVqõŸ?öøŠ”rÙ'9B™w³–òFšw×á¯j)8ží°’©ÿh -å4ïeÞÍZʃ4Ý€2Ý\ç‚ÖEP¨Ù!Å—b¬È"ðL<@" ¬¥ÉtÁ]ÎJ¦EYž£¤¨%l /× -× ,×YKy¢æñSÞÁ}À»ZªQI |·1 ÏfD-½K¬ÈjàοXס2d|†{ î;p^2-’FËpœ{.…YKYé¹*Ï¥0k)+=—Bå¹fb¥g>¨<óÁ9•„½g>úÓìíþÛ[e•޳¹‰Z%.ÿ–“<ä:ðŸ8¡&²H)Ÿmô’^±ÑKjf‘ô‡\ ;oZEæ`–9(É«ÈìÉ]À öĉ”JÙ”$98É• ÄJOsPyšƒs[ãpHàœÁ¬@¬ô4•§98¤@°¯@¬ò4 Â>ÍÑ)œS ˜ˆ•žæ ò4‡öˆUžæ`¡@^xšƒCOs0++=ÍAåifb¥§9¨<ÍÁ9‚s ³±ÒÓTžæ`V VzšƒÊÓÌÂòBƒ…ñœ€Ñfb¥§9¨<ÍÁž„Ø×É.Wò´Á¬@l+4.㕨ƒ¼’‚´’‚²’B^IAZI!êðWŸæ`_Xåi ä…§9Ø{š£?ŽÁ¬@l+4rÇ¡2d|†{ î;ðWˆS ¶P ÂÓ§<ͱ…žæ8åiŽ-ˆð¤Ä)OJìÜž7›5€•´8EBØBxþ!†SOXñÝžo °ti¿Õ´)å³^²Q ®‰g 6‹+‰§ˆ›Å•ÄSÄíì'눫i R*e“dc’mÌâ@x<á”Ƕ ÞBêß)©«ï>í·šj ¥òa¤)Â(SDæÄBVÞ)Yy›éªåéê·:\&Ë:ÛµCl×lWÈ·;%ßn ¶+äÛ’o·sl×tUH˜;%an º*$Ì’0·]õ P@æ›BÆÛ)o› £•2ÞNá›¶ ŒBÊÚ))k› £•£S£Í„ÑJ„Ñ)„ÑÎ¥¬mf|–e|Gíʼ™)›4vJÒØ”MH;)iüãóó»ÁÛºöùãkÿ«†ï_Dþx‡¿•g¡°‡A–ðº¨äqlÎ6kï_tá\%‹tÞÞÿÊmÿ’Úþ¥´ý+×þ%´]{3¼„ ÆÿøâœÒ¿¸âù_ü0ÛY7ß}íUðã ¶í2$8(pÌpd¶×_HÆ›ý žû¯¿?Í˜çƒ 5œiû©dkÿ[‹T{ g¾ááÀxèø‚µqƒc†£T;еñȼlç£s­bà÷ßïŸZ)KñMdà¼E)!œÁlçã2¢•`¿%g8ÿ~ÂùøBè¬3 ˜Rg87µ³piÍy¯¦íÇ¡N¦… ÓöoeÚþ}Ïq~—âü®Äù=Çù]Šó»ç÷çw)ÎïJœß‹@½ó!xWâü®“¢TÙÄ‘µƒó6¥Ø8‡›Ûáòƒð»2î9ÎïRœß•8¿çH»Ëq~ãü‚ÿ#Åù] Ô«ö–Ęý&™Ùýδô·DK+´ôw&†¿%Zúûó­önÛ?¿Fà«åO¨0æ¼ûóÏϯ?qƒÿüχ/*yÛAg¶"ý4B¦ŠÀ©ßÜ7g·8ÉøœØøVx¾tʲ;å‚ãÈçsÌþü׿MéùVfEªGjø×ýz7 <Ëš \ÇùÖ§¶î:Î ÔÆ%áùÚÿ}Ôþ8htà–°?NÍj/áV)µÛx”jGÆQ»/M\ƒK1ôõ×ÿ]ÿõ—0ñ_°ß7ü{éàG*㯣ˆ ÿïû¯/Â"¾ =0Ç’ñüã¾ý-–Ú-ãK-Rí5üѾ‰E_Žø8yÖ÷_<Ï:¾ˆ"2œãYǼ'ÏÚJ¡T;еD‰1^>@ä<®ù‚3ýC+¹Ô"§SÃGÐJðéJΕô‚3~¼*ÙböñP™¡o·sÚÒÂÛ‘uƒh¹‰³˜wKø ¿ÓÝ‘• Å‚çe.ØR« oV05\¬½Ë¶?¼r¶zèÖfÔ .NÛ³ ýb5XÃÛ¶Û` )R©¥3!g8oÊ"µý€âs.-Ž .¾íË5çö8›þ*µï8*ii_;WOiaûŸÍAÂQ¡>œÇiåè¾—bΚ~<— ÅSÿúãý»Çs)Z “ÚjÿࢴvJÕ\í³¦ù¶/åå&;üh{{†5ïSÇçã:mÈi@¸›qçYŽìLÛ,‘Íl#ÜUKá0Fq\’3·wxÛ?Gê¥ ®Ça’5|b\æÚ &Åá4Åów\cW¥Ã\/æÚ™mý•þi˜dÛöøÔ ÷Rðn7€™òeMï{2Ÿq©YÓû”2%¨Î–¿…‰ò  ôÏ@ÛaÈÁÈ—{UJ%q€f"ឆb¨áü ½HL’À­Â¹úÇJ6޵Ýrm?‚‹÷)»9Ï;¦ö“² xÞI´r‘˜$ûç([]»—š8ä:4S®CÃ-l7bõG£Æ>ß¼à5±[$*HàNa|<cáçêS6äÏî7&Žyž Úõ»×úýÝ.EÝ@¿{‰VÆ ,?âTƇA™¬ú”í¼œ‡¨:. õOœ—QibŸ0b”xáÂyþÁ$Y¸Êø0M1¾ >FÙêLSófqÅÒ+ýcשÅþïÓJ‹ý ¨ÈX çWþEZ­køŒƒíœƒ­Ä ‰IÖðnpìeï>…kgu‘;üô.æøú«ßV;ÇJ Õ€²j°.û?z©[I^±‘ç›5\ Á{©H©0׋AÉöÓ6<Ó‹+­á½•^äk¯á2Eí{(ŽtƒÃ©np}ýSsÌþDœ×©ËÍx=εÜc6^å«.(|µß‹.p-9c7†rí¯ÑÝ Î$8º—¤ÆP îâ\ E‰}^1¤š ΰÚþ‰O…`MÉ]á¾.=çÕ¢±]þ,Åù€ƒ“D°—‘)‚»Tú‰î=/•¦½8œ½à5uê^¿*žï³eo$R¼H4º†O¬Þhd»ïy3Ô½ ±ÚeΛ2ÖDÀÐôèU66çéÔ˜ƒ5&ÚOßy7"¼ŸâÔÞÏ^?çàkõ³R÷Z>1ñù ${`(;ëÈ ðq*‡ë£bã@c¿4G®j=áÓ\%‰©$gzûMLý^T2½>‚°>“Þj¯áâ,Ø÷ÐïΕÁMuCpìX<²ÆÝn®Û Õ®«4®žá*Wi*·ÒÙüU£!Åyà†É©¢#A\§b(®šÝ&Ƶ?”•qí)•…_ð ÌÑ(6öóÔüõ™ eÁìÁã0¬™îUÉ\wŒ põ>ÕÏð†’/\ÇÕùïˆS\=Ç2ÛmÛqŠGê+•Z¤°©át*ÚÎÈÐã1L1¦ö2Ä 1±þ Cý•þ¨$Ní·xÀ'Fob÷ιè0´<Öp†½ÁXFv«½ñ½ÅB)8Ùóéš7˜·5ÆÌäþ¹ä¼—†Ÿ‡ßoÞ>Ïï}îƒ!pJ-’Y5\¬½5¾Ò\|(Ð}¦`„­’ƒÛ5L±ÏsÀóm¿ãœçíœç­R;/:<ÍlרàÏ-ͱoð×Mm6 mf&+L¶†·M<è*ߪ.¹Ž ¬ñ/í.6׿01/®eSìîz©íVi{¿ß/ãý ›EÌcýNY3µ;i>k»Ö=`ò„:'•.Y6à{\[Klp/o)1º”Œ‚Úîâ^ JôbT‚` ¢Ò½]¶»ÁûMD£A¿‰ø!©×tœÚlpj{ðŸè^„?ެo_|̯Ñog _¼’=ßàÌ2³ºâÝš(3>wM$qh¡«ŸsijãüLzƒ·-9w³Æ×pÞ‹äùÎ;˜” s½´^ì710:ó×}î*<¯¡íö°1*ppñ£Ç©¾ö8Õ Ù!·ç¯ûƒÉcFk©å®ñUfÐÆOíöØàâtÓº®Ú˰ÁŸ‰!c ˆ¡¨ÄP?P½ç1%Gd#(§(¹Ù,b|zªë5Çk»=ú')ƒ´?ÆO²&º÷ŸèÞ°Î$  8¿UEåÔÁL±å çØò@ÛÍÔäÌPÿ€ýà Ú^“ajd÷¼fËÁÍ §ôOŸ¦…‘Í"&ø)JæÈ\ðS |¸–¯$õORº70GS½Ywccó͆[¨áÜæsF6‹lð> S›E6¸hã@#wx׿[h¨ƒ›¥þ!¥Ò3•4©Úâ1vMLÝ^ÔXøµ@côq}òåAò$kƒó-Y$×Õð~7D÷Ü`ªÒ¾¸Ø‹ýnˆ®Û Êf‘ ®oQ¹ú׸zìoѲ»1Mewp1¸‡u€5\eýèH\Ô‚ ­S•¤Uªdh˜$m˜4 塜֙·/¸ÊÕ“y.O]7Ñ(Mì¯xøLÿ€2Eôç¡|<‚Û¶׋d_¸ò²d—^–T¹zÂ)®žáƒ™íºí8µ$ê^;×½V Á¡ Yeè§ÏS˜b:é9*Y3”Õgá)Œ¹g6voð™î£’)åÃà†&¾=Vçoýs]ÐÄL|™$–¥†óê) 0úoÓfvÍ͆E: ‚‡»W2ñZs¤³PŒù9^×^'ÁË/Bp5œÊä•4«TŠ©ä1­X[ÃyI)óDKž¨á-­%}ÃS6Þ ùÞ·QHg‡â¾ÍÆ"™^”r=ÏQ‘$u°È4Ôãwkø@qª®ó´Ø.RÅn„ÍÕ6º9ýÔÀ^«¯mLSÒHKpò#ÿn¸q‘?­ÉY:®‘=ëæ\¿Þë׫d ÿñ×ÏŸŸ¤´ÛŒÞÔÓÀA*µp¿ëMÀþ.À6GW¦Îzh‘|Jà8çyþ.Ë·±³é÷Úß]÷˜ÍÛÚú‡;Òóa‰á¢cû¢†3$óæyejo¥ýWe©+ ±Á¤&’RVú­eά ·q$†N[í¬»®ì–*×-e){Kv¨lläùßÍc=†lšóü‚Ød<˜V}Ï»Mí]¹UéŸ~÷ºksmmì6q«½ëGS~tÒ)â=lÐÔÞ÷#NMÈ×5ÜZÖì¶k&ĵìÞ…[©ÔXíVZñ†Ö2g§£-;<áy7µ–m©mvÉséŸíœûûËÀm-ë®RÞŒ €"Ǭe÷®v¨%^›ï#ð‰µl«ýõµì:§û¥µÌ§©µlƒ¿CÁLyþzõÿ¥µ, …`€©µ,€¶–õ›8ÄÆ‚ó£ZË‚ò#;£ziF]ÓjjøSkYL5ü¨å &{íü"×ÿÙ­ÄK¥©öþà¥uqÌÁ^êR*Ìõb˜Z·Ú?=Ôj¼4wûg;«ú“LÈÂëQ¤ü.¿ÇJÚÀ™I?"Í赕”mU h{T\Çÿn ç+Y¤µ·©½}7|pÀuqd!¾r[ˆ«J’Qlì/ÄüõØLf¤’ÁýJØíÅzoj¯=ô6Ü‹ÉJ¥Éó5\^Çûm·Sã'yÅuç•èàWþÎ=€Å1Ïî`ÊS2ßSÃÅ•¿¿to/ü¾®#ù~;Éo§¹¶§çÎÿ®ç¤4°,ÚÕ ë•F†­áMkŽi×(•«$JËWYʬÂr®îb ï·„=]lI[ aÆœf‹—·ÈõTÍ¢âþaÒvLÝHýsM¤`683Wã­büµ)Ël¦Û 7¸øªßva«t,ŸgÊ;96¸˜4ûÑÎÔHfj{í´†r§uBâ` R©±J`fJÜ༇H)ìûQžº¬Õn>èÏiÛ~lÖ˃ 77Ç›ÚÓ33êm…T.YÖTj™H6.R«ÜNß™ƒ=ÙÕk…í¤¾¼/M™7·Í¬¯wœKsmOS³¶KÒF·²”çwÇ„âü‡zÚ­áü<ÔD¿ŽøÑÏ… ‡©Àƒä¡²tçwÔZ^/ä([$×¾¿[¸b ÿñÕ-…|©­ƒ¹JÀÖðÃFOw´ñcqõ¤‚•J ÍCWZqõ¯xÈŽx(¡ô[J>Gà|_/R÷Öp>†H)ßõ㪬·IKÝôý¸iÇž#\3_±ëÆo|™JÜ-@ùªn×…UÛÅìø}Iž.-W©Ô2°™|ƒ‹odó×!×pÙC]ã*õ)e¸R)z¾’xó¼¾l¸MÌ¡™Q«Žß¹•¾Ç)ÅØGP7ºÁÛè¸o­u]µ°9»J¥éwk8o<)Ý&*éÎ >ÓD7×D'å+—¡¶t¯œ$Üà3ÆÇ9×E-IØm»[ûm—Ótü¥¶ÿ/¬[L}—ú³>^'2#Ë×ó¸™þ¯/³z~Ì4 Zø¦T^ R×½÷#oi|—ÂþÞÀoÛB|ÏÞcPÀwi¥0—ÂÖÕ:Á4ñA)þÚLÁ¡n8ÓEíïM%µ·f·?ÆÛk·J™ U/?þh¾Xøî!­—K‰W»8¥‰.·ÄIÝààmP>Ûè%½b£—ºôŠG¯xÈ·×U1- ÙÆ üVÌ¥âØèO5üëk38JŽˆŠ#˜ Fò¸þùŸÇq@eßB¤ÆsÇ:¿y60¬1ÕðúLÐ:œ“âà”ÛÞ>Ô>|šdÏo¯«l¥ÌÚÀ÷ß5k^y”çÚŽ¡ÿhàK>‰É”žsæF\'¼³?¦:ZeãM{hÃeü6z»ð ¼êŸí%œý·@è£ÌçÚ—=eoC£ÿhàµ(HD»´/RòðúEÊ+‚÷&¢Òļ樥l.e%?Z^¿yV2£,ÂY|ë™ú9J¹öåe4`jà? ÿöâÑD§41¯9j)ŸKù¡©öÜCsÁSxý4¶­=Oôfl¢_} ?ŒÂ²Ê¿R½Ã!Ov Ìi©(¡P¼ðFÛÎIöe”Y2=%œ!Óø(üBxÝkç$‡J AP䥔ˆ€Ðvé_¿>î?Ô€‚¼ô×pR*µïÜV# ’ßÃN+µex¶R¸v pnŠ1ÙFT¢ÖçØöBí Õî³ñ œ7+Ã& úúËê/pð?+´²À!ÃA‚C. 3Vð5ðV¾-7OJ¡¤¿–®f2YׯëþœEDm†[ n;ð%×gtÝ­ ƒæ\¬4êK.#J®%Aà” pÙNi‰Ï¥¼i^©ÄKÂléŠ)“Űg®fs©(ã5™ÔQYFi9t”âåÌR<:Õ鉩?g¾;"ÉŽÈš)0ªe‡‹šÉtD/¦j8#Ì–’R&›b„PU‹y^ÝÖØÀuidDi´Ÿt¯LÛ&Ïú†™õuÑc4eEJ©ÚF—F'|o‰4m÷àŒ4ºY²ø ÒèxùøÏYD¬$¯ œ²Ò¥‘Ñ”)¥I#^ô4ðÝF'ù±g¤®´/öúQ»2¹gi¸W tid²4V¿•&òÒè0^—F¦F¤9 ”9 òtÒtÊLFRV¼fª&;È »%‚!HÁ®g%/¦jãsØ€D)@‰:Èœ$N 'Èò+€Ä @áïx‘¶°º,oc9à]]@Y®!/×Ðæ>Á–Uîðí©6«ËVÉU‡yÈ 4dP2‡`^°ý9‹HmÛA”t½‡âbuÙÒ}Y°!û¸nkUPáá Á¡gW_°¦÷H)ñYVÿI‚-pzoo;*ýc3ÜJpÛ³ºl‘”\ ï6è).ý!×çeÝ=øî§8ÂçR^Š4¯T2!Ø l.»zQ¤1ãø‹‚ †ô+Åj8/ë®þIŠƒSvD’aΩVl¨6Ð×")¹¦v]ÖA!Ø]vÙh5ÁÖ‘b¼#ë`D°£Ì»&ÏúÜ£0]°Á`ƒCq±ºl‘”\ÿsþÅwƒ2m6è 6TžeA!Ø‚‘&w£LîÆveŠ+ð£PyY +†¸×á¢ëh)˜CPH±`¤y×(óî¡¥°•Ly˜€2_d-@š @™ f´Zª‘LWíJlf-@ pø‹Z ²–ÂV2]žW–묥Ét¯Dä°)l êðWµôµ(Z ²–ÂW´ˆ¿ 9¢XÌ+4J+4*+tÖRÁKp߃³’i‘DV†c!†„§WVyz…sR -%<ü²ÊÃ/œ{ø…C¿pNKaÖR(i)«h)ÌZÊJ¿Pyø…sZ ‡´vÄ/²¸øìlo»S<ä²#œâŸKy©¯T2¡¥0k)”´”U´f-eÙ-†ÇïF¥ö(I¦EY5¼£¥pn+ ö¤ØŸ³ˆ?<”d?š“ÜZÊ*Z ;;Z ‡~aÖR(i)«h)œÓR8¤¥°¯¥¬òð -õÂÃ/ÒR8§¥0k)+=üBåái)ÑRòÃ/ÌZÊò¿t-…CZ ³–BIKYEKaÖR–Ýswü®2qÎh)<Ä+™Id5ðÝxiÞ5ÊÄ™µ”ð\Ê*Ï¥0k)”´”U´Îi)ÌZÊJÏ¥Py.…YKYé¹*Ï¥pNKa¡¥„çRVy.…YK¡¤¥¬¢¥0k)Ën <~W ›(I¦þ®Bìk)T´f-e_ÑR8÷\ ³–BIKYEKaÖR(i)«h)œ{.e³–²’–rŠ–²sûmÖRVÒRNÑR6ë'mÒ³Ê&=;·EÐÎmÒ³šN¹ŒïÀ¶[ÅC.ÿ–“ì:ð·Zí)å³)^êE¯8bBæØ,sœ´ÇÏ*{ül!s„GFNyddçdŽ’9¶æãb³±’qбíwma‡žæØ¬@¬¤@œ¢@¬¶®¿ýÎj†”ê*ùiŽÍ Ľò4Ç);·ýÎ Dxšã”§9vHؾqÊÓ[(öiŽ®-ìÐö;›ˆ“öÏYeÿœ-ˆð4Ç)Os윱sOsl¡@„§9Nyšc³qÒÓ«<ͱY8igœUvÆÙ9b "<ÍqÊÓ[(áiŽSžæØ9b³qÒÓ«<ͱY8igœUvÆÙBOsœò4ÇÎ)ÛW VQ 6+÷бs Äfb%âb³±’qбs ÄÍ=ŽqYÀ8eœËBÃ)ûÜ\¡'Âó‚Àiz‚”²¹«”r¹”V)ñÑëmÓ‰»+(9ûäAçÔN£ä¤TÈ•å·b.õô¦*×Ù“Õ¡Î.Sg§dò]fÈ®eȤTŽT#ie‘>:-ÍÝÏ’»‚>Ê$Óeç”L±ËʱЧf œ%Zý°+¸•L¡\¦PŽ;€%G5¼Ã”\¦:NÉ©º‚ÑÈÄÅÄEæ'. §d2]æNIXºb½——uW,ëòêíòêíØÕ»³™Âi{1H©<A˜ÝŠ»}.ÅïúþñùùmÌ6}|þø6Ÿ;ícÿ" ðÇ L‘-uÂÿ_üîãDÇØÂ¿Ž¿ê²Ÿò׫ýŸx8`ôÿÊmÿ⚸ä/Ø´Á7ü¬ýKh;W{Â.Ï·ª…s^ò,ü×ß?ŒÙ0ÿøúþ«í÷ã 8f8JpáfÝ,û¸ÿúûÓ0žgŒkáLÿ¸ó`Š­È¥ø&ÒJ@¶±(…ý–`®·äŒó_ cüøBðöiL©ãÄÖxþ‡óãó18;¿ŸáüýµKþB†C†sá||ÁÚ¸Á1ÃQ‚£?ãñ‹Zv"1hl ÿ¸ÿ~—"m+U6‘ëÅ!xÏ”Ò/T‚ýJÎpþý.LÛÇB_ŸÅÀE.­9Ê´]«iûq¨é~]ªèïÞVˆ¦†—r«pø /¾xÃï‘á xêÔ¾ŸJȶýþ‘kgl\$³jø÷_?ªÚßFŒÿH¸nü'oüÛiüñ»}xiã²ÛÈ·ý­„ããˆç3üóç¿þ½ƒ¾þë×»á^|kºäq…­©áG©T'šÖózíQê8VÒ>à°u×q0f 6.ù‹HÍ:áÿ>jœîh¹Ú_ G<5¤p#6ñ߇Ço…ÒÄ-ázÔø&–p)†¾þúŸ£ë¿þ&¾ã vâû†§2ðsÒß µŸðÿ¾ÿú"ôâ¶"FzØßÀÅJŽ&²¥ŽJ¤n¸à|KÉø¦vÖCG©“g}ÿÅó¬ã ¾‰'ÏÚJgãGÀ 8f8JpᒾݎXãgàŒƒi)K-lÛ8{ œ-JIŽãïj¸Ú’-fna&8aâ,æž þõ×:4nÇ ¿Ì”¸´µ·#ëÑ^õb±ÂyØï¶Ôê÷Ë™UùÚ?ï–Æ?šuO›xƒí–ÐGí†Î»ù¼é .NÛm«l0†ƒK“ûQ ¤yw‘Œ¯á¼)½&âs.-­Ç¢å¢q[ýùÜ”ÂÔ ß¥ögª|©%Áf)\\Ø$ÿÏæ •?ŸÔnÚÜÞ\ƒRÃ÷Rõ(\ôAúøãYK,¢î7²ÏZèô’¸žo«µ¥îwé5(œµ1·½¾^¥†3ZÄ› …ãsž'7”ìðÃÆÔÏ@·žÇg\·Ý»BàVƒ÷k·§ñÖdßk×¥®ëÊ{WL´I í OF‡‹aÃD38ßÀ%×mµ$ýޤßÏ;;£¡O™à64dΗxh)·ïIëwœ¹¢Î•uç[åjŸà¶1ž»jÏÑÚm·ßÑÈCÆX¾ö|'Ðw8²7/øýþðiïô{TúÝMM•\2¾Y [×¹‘qiüSýsen.x\ß*\.rçÌ—û§ï!Ÿ»!)Žg)»ÒΫ$t—ÐBð¬}eöB ôOTú§á›mÛ㜃£Áe)0Skú—lì{2Ÿq‰®üRRx¦ÌæÒ£{éG[ÃÅþéOÎ#ÝÈÿØËÁ ôÏE éÎxj¸Hû|¬ÄÌÆúÇJ6²mo‚Ë*mç}JàNó<û» ¼¶ñ¼oÀóN¢•‹Ä$ Ü?IÙªÚý”ëÐL¹ Ú°]éÚ7Ä ‡øæ—ø¦ÊøÐ)Œ¯Ï¹2\¦l5«áܶ|Àó\Ðj|³êw?×ï^©} ß½Ä ³ë‚•×Ë .ñM•ññ·K“UŸ²m·KŠ#®;ÏcêŸ8×?Qibëàš0b”xá"1I®2>L ããÉ ç^ÙÁ45onw„¾Þ?ç£m¨ FþŠÑº‰»A ­éÊ6ÐD”Vþ1Û9[‰.“¬áf¦ð·ÇÍÐ[¢jßF\¤Ãêx']"_ˆ|ÔÎq×xy] ʳ•õZ% ¼&vÖK¦Œ… WX逃½Ô?¤T˜ëÅ0EÿÎËl‰‡Êë˜;½¤þ!¥â\¨D¢ö=GºÁáT78œ¢’œ‹Ì0©r›ñ¯;8×®òUúJ­’ðÔP®Ól.H¤x‘x0ç2”ýîå©´>Òìv›ô@%q*yÁ™·<7H]á¾.I³þ22‘¸¤ÌçNÁ^¤Ž+á~êÞ¼í³¿‰ßgµœ!Å}×ùµ·ªlÙ›~~T‰Ž\ ®>Ùε³d»ïy3Ô½ toŸopÖ”±þed 8ØI|h.öÏ€ƒâº>ÏòN¢ú¤”ŸJÂz?7zýÔôè/že_˜øü%úí ŸçS>¤!ªïÃH×Gå¹yÿ±»ŠMŒ}zae¥à£ä`R*õƒ oLÉ™Þ~S¿ªïÓÈþƒ°>—þ®½†‹³`ßC¼;‚cÓžö¨dn² ®Û Ú6ƒà$A0ô¤$ÃU®ÒÔóü —SÓZn9°úíÔ0æàôÔP®‰lH#AWé·–QøD ŵ?”­<”ãÚO`+c<ÃU®bc?O½Á_çCÑ( æ@ÿÀÔLU2×#pÝ@¨¾¶ãá‚K&T®q*³áƒ™íºí8µDŠ«ð!>ljøÌèµ’ óP˜b:1ty–F£cøÐظ C½ç†_œJŸoµ¿>z“á—/°Lÿ|/ܱ†3lìMz®[Þtm”q-Õo|jo±©ýè^'îó4ÆÌlרàÍ[âU÷z±{¹lô­b^ ©ÔÂýnEõ7øŒñ0#sŒÑö÷v£Ã”läÚÞö;*mð¼U<Ïÿn çE§nŽ] Ú¤o&iŽ}ƒ‹Æ´=)®ëzüÃÔh=k|ʼn à”ñ€3zÀÀÔîbsmóVxÄ¥äÅ ¸pð“>ÞÁJsí÷{TúÝ=‘²nì.Ïuì\Ã<äç‚Ë÷<¤åÅ͵ÍÛç¹ö×(µ0C©/ø ¥®{1Ì98*Ëí@÷Æ©5c;"³—=7h¦V4Ï,‹ %vò Rjƒ0CW7ø!Aéç¸÷&‰ä8[ øâ-ìùçÞíôEº$Ê6º+c›ì/ÝÎ ¤©óSÌÌyÎFúEk¢Ÿs°—LJé·©ö.÷bÝö†=º 9b$m\a¸NÛí1Ð Qé†Ç‘Îò8Õ Ÿé††‰zìvƒ6˜cžßE †ÌÚ©ë Bÿ(b%í Ø°+_pTý˜F¨$rÞ¦›$´JpjOðgŒD-Úþ¸–SŸü#¿¾ý4C;ç!;ÂÆÐ=5-Ôs>¹A¸Šsô]—®« ú™“Ú6¸>”U>t…'Πuï“§îÖ®‹Šëº;^7øD¿[3µšØþ‚©‘kFˆ‡Ú»ÁEûÃï:΀°I€çj‡¡-«`q„xØ©soA8'n·±m{vÈN*ÅUÒ,×Öuý¨%·¬!öÉSl°†÷áÌ3Žh²SÎL”33Û6/¸Ê œ›J/97Å *XÒ­× u†Æù§z‘ƒwzQ£×u\¥T¯€«”âÑEOq:®mÞcq^­L.*ðÚ#ç¡ÑÇ¡ü¥‹K 'èS —´ ¹Á×!]/yÞ¯Jí}FâV<…xTj1ºvµ«²Š‡úY o•$G?6½°ó®·0 *ýs­¤CÇ‘VS¸y üÔ[0\´±mbÓ‹^ò)?öWûëå9ö=zL7êpn_Rºî€òy³õ‰­®·u%üFø¥HKª•°ŒµWí@íêšù½äÄN‡·×2né7±8«Féëë´˜ú·Øqm¬K5ü˜õñ…Y?¦™ xI^Í͆!zma3ÒY(ÆŠü¯{«Œ“àå!¸ÎÙ˜Êf•J1•<¦kk8o#)e¸ß‚\g÷à-­%ýJÂÞ~|SÕFl²á6˜!Ápï 7K a` Àj‡¡&âT7™f%¶‹L³b²•nÎF?50…×êkÓœidøâ:åGáÝðäù“;¨á-m:9_s Îc‚ljçJ=<ô×ÏŸŸ¤v´&8p¥¼ ›ñïÝÚA²‘gsteÚᬇɧŽsžç½u³×>êùÇ4ßÖ>нÜaƒK ×?Û5œ!™7ÏŸ$–©9u>‘*ò¨ŒjéÚhAj")e¥ßZFáG*Œ$6nÖ5µ33p4jíÇí¶Ô"ýn ghÞÍOûŠVÙ[jkŸp]š†äKتg0LÛ ¡{í]»uÊÁî:ûܶ6v#Ø­#Žp0åG'=­ïa³Mí}?âÔ„ìpj-Ûky-sö)øc‘k௯eÎN-F[ryÂónj-ÛkÚ>ÐqndÅcOÙÏàÞÞhkYw•òfd\8n-ëÛhG†ò–…º¿<\)´—Ö2ï§Ö2Ÿ¦¦Úë˜ïzÉZ¤E®©ýõ fÊóÅ«ÿ¯¬ea(L98€¶–õ›C~´s~´SkÙ^{×ìŒêÅÕ‘ëË08m-ûl§Ä˜šÚÿáJ]ò¸<Ú¤Z‚Yñ/òËê­o£—LY$ãk8¿. £L çû‡” s½¦ÖÅ”^ppÖÅ¡ ˆÈ•:gn”a olÜJ-ÒJÚÀÛe£å׉HÛ½¶’ö÷Šñ¼S<ÎÃÿQ]§-±×ÑÌ ÍíwÔ6µwœŒTj¨’ëè—â­vÉÁýî½ÎÖº!¡Ò |í5\?ü:ÞÔÞ€Õ €dçúÇ>»Žc —玾ëüÔÔ“|êqŠçŠê˜çwbå©f˜Ö Öpqåï/ÊÛ ¿Ò¢Üב)J6.R«<͵==w_gµ^>à]!hW'¬?‚ôhº Þ4±æ˜vR©±J¢´|•¥Ì*,Âjx¿%ì©èJKêJø3nΑR¹O¬øŒÉCj_Ã9Ê·²QÛ6Ñ?ÙÄäkøG¾š˜7Þ*Æó÷9m…^ ‚¨<¤ê·]Øëì°8¶TÞ£±ÁùIiaîˆ~ìÅþoM(÷c'Œ¤H¥Æ*™)Ñ ;­]e#vý¨P}kµ§Aý9mÛÎÍ:brpâJJ[o] fF5‘„ ©Ô22 >་Ô*·Smwö¹9˜¾Ãc]J-#óæ¶u¢ísýî’49/Òt^ûÛá,»oó‘•¹¶¼Zyƒ–õ«45ѯ#~ô0åGS+w7ëTà'úí> ³vùýhøü÷²ó㫦|æ;†kx㈶ò¥¶®ã*¡¬©ØÔè »—˜&·R©ì¡U醠%ïÓD7×D§ìŽhû@÷ÊI >Óö8×ö¨% »mwk¿íršnƒ¿Ôöÿ…u‹©ïRV³¦Õ´Škü´G]ÿÑ”?­çä\ÀÿõeÖP×NJô[K†ƒ?šRAiâu:pËõQ s%(U‚J%Jñ×ÖzXQùÛň±Ñ¶×z^µ×n?Z­ޛ߭›h³‡´J\.ÅAW­RL]n‰x3ŒSlô¹v/Á}þÃ0Ìî T¯´ÝõuÈ6å·b.Õ¾ßùó?³rJø[ˆ-¼:„~oïX<>.ôúÚÚ+¥´F¥S{¤èåÇ÷拺R®= &¬áíÑú¶ùüði’=¿½ˆ²•2íë»cŠLéù7gn©Wg!eÏ×çKµ®{|··©½ßq&/Ƽ߇Ÿ‘V£¬&ÅÛ9Fi"tç!£ÌçÚWM«YÐ(«‰É«‰Z*/…`”™úºÂÕ`;üvQ¯õYúmßýzbí¾nj5V²Q™èM^ÔRy90Ì¡ {%N‡s- ×EãFYŒc^]i;‹ÛCSÙ¨Ìú&¯9j©<Ÿñp:eFÝì¦D¹ÈS¬J©ÈáJx@Ø(=·ÁwS” ‚ÜA täe”er7BÛû¼ Q‡ÿõëãþìZ©Ô¾éz-Ÿ{íI‡ï±¢•ÚRõã$õ¸và›)Z)ŸKù•š#¶¤ùfŠ—*1Y/þœEØ :á¬PZ$mDàk©vèÀY ³teË oÔržÁu”BIÃ,]Ýa²6^ý9‹ˆp›áV‚[Έ›[ñryÞ7FÔK-œW'Kn»S"ØeGh•øü[^ò£ïÀEq£k#“e ´²åª=(µÇ fx”à±—[GŠøª$ÐQ\¼’kàâcª?gÑÁ);"ÉŽ8²“öJD-šâê 6Ðô)•'d#MÈF™‘tÙÒ}C‚ :}:O /Ø@l*‚ Á4ïìÀ%ÁÖ‘b¼#ë /ØPlð‚M—b =³"¥Äç6ýÇ>P¶hœÔ Ê´= Ø`D°E£ÌÎ&¯ ¦]:‚ Á4;›üEÁY°¡$Ø@lP¶ÒtÊt3#Ø l.»jWäà)¸Àuà¬.ë?ñ‚,ØPl 6([£Ë.ãN[)ê êp^—-ÝÇb°Šë¨=ép^—-’,áÏ>/«–XÌC¥!ƒÊñgŠDl¨6˜lØÙ%ø]»Uf½‡¼ÞÓ÷(¢&™–ü»ÒÒYïÙW¶âÐöAÌŠËJÈPyD†sz;;Z {‚íÏYD4Þæ¶[%\.å$9¥’‰t¨ÉERÊgS¼ç^iâÄ6Ì‚ÍJOØPy†Y°Yé *OØPS\ý-8ô„ çž°aÿ ›U¤‚-j•dÁ&ŸÐé®›ãÔ®ónσ¸òäÁ)lÙeìx¬Y×ãÁ:Ãu}†ë†ë:‡t¸«+¸«LQ]¦¨ŽY…%Ÿ5¼ÃDÝu™‰:%yï2átÊ~'WðJv¿Ë¸N]Ae–è2Kt¡’ùX.åÅS¿–ª$V]ŠÏEš•–òìùKõoñ[L±üziq1å3n/Í£&_p”bÕ²RË^ŒNsFçÏÏï°ÚüÏ_†ÍÔm_ðI´oøãX9. dÎÓ”Jø]Tò8³v[‹·/xRÂÿaJ-ùÜ;þ•ÛþÅ5q9¿ágí_BÛ;µg¸`<çºódÀ.¹îKvݯ¿?~³n·P||íUµï_ðý¾Á!ÃqÝþ…R;f8Jµ£Xû£·„S±q;öþëïOÃ'Ž/8ÓvZj³Ÿÿ-¾‰ œ·±(%9â8µ×ìWrÆù¯¿…1¾!yûŒ4.Ú¸pp!ÎýýG Ô þ‡Æyaãï÷3œ¿ÿb¢v9¿à+ÙàáÀÅw.Î 8f8Jµ£XûÎï\^ÒƒPêÿ¯Súýö\ËI?¯ÕTW¡ž´ø¸õÞêèã)¤_ŒK)$ဿB¾~üç4ý×!'=ðBnðÇ-c?Ç÷õãO{Øÿ¿ï¿¾*zqkt/¢FÒÿ¼ï‹­Žžñ­Î>JÆÊp¾+©óœÕÐÙêσgÝþâyÖñ@âŸÏÚ[q<ëxÀ‡¯Ž ŽE¸Ì³ŽÍ)¦ó œ±OÝJÌo÷ª3v>‚ÒH/¬†¸*dŸ³÷3®ëRx>ÁÖ Þ¯¬+ì_aþúñQ?ØÍÐÂÏRs,â%ì¡íüyá¶O8ðÒ}á8µÎ+}s~Øù»VޱÔ+ö>ð"9äÎû]Ö\!ÚÞwÞzcªV µºHoá|W^ÿ ?Ì#´7¹î°Œ&7.ø¨þ×p)2Ý[5QjÌ©àbI ]ÿÙ´ñ_Mûø–Uì>áÔÂVí÷œ¸2ê3vðû¦b,NcTQªÜ¿?UÁá)xý §Îö1½ý4T g4t¿ªZ~*îÇ9š7ìÜÌpFºPÀî5Œ†ÊOCõ:­àVÓüXº}tÞÒL©©U]ª.Ö;8ÔÂ÷V+ÕáunÎ?àÕ‡©æç||nιþ¸|sNÁØ®ÏùzìZø¡ºzC²êêSpeáÕ--p|’ûLhôÜŽ—Œ•—Œ±ÉîA°»5ð#±yvÅ»f8Zr•;\²ûxÅÝ›uá¶ &ÆíS®w¼º~Ú‡ÿÞ\çi…Wö1çYö±}ÜŒã3^Ñãüè#³ :m ú‘‚Ýê©]ÁƒïcoÞ°6ÃŒÀh ÆtÐÅxžCâ3ëÈ/MÁŠ@¢ÍY›@Í  Øg<¹¦,D€ã´‡‚A¶"äøS ö¦…‹„q{Á*œkLÙÀJ}dÇÞM.«Œ×i§g4¿“±¾ yRã˜o‚{’²5Ò6vvT%Í’æBm¦6›ê<inNñÍ g#OD+8IÌì"‘1>ǹ,Zn;Æ7a¸§æ|ÇzÐivŸƒKÒÇ„â.Æ„Ýoz+‡[ôŠô1C¿¶âüL4À°¶.ÃPÁaÄÀéñd|c˜à߬ZE‰™]$.×Âå3ÖPTN q‚cj œ}ºe¥ßº0ðŽ-»µðåâЊäe~àâLBà·çêÁ¶¦i^ rãeâ·cybÓ±”çà fð44CKâ[8Ïè§2O3kÑÇ¥Úr†3lỹ=?QÝ&üÔ*ë gfZØ–üEؤ®L q—>pÈJ¦¶Õß¼â Â6“³äƒQÈö„‚0'Ì kæ…!W× ØžóÔ WÀY±¬«•í€Kd;àšÝQY½†Ã®~?Ç»b^«M®ñ­Fõ‡12ø5ûá^¹F¶ƒÊ»¶(LUü a©|ÂéboŸÈ;>\Ù÷¸=b ¦"ûVϘu'8{Úk褟 &QÁƘ•Ú¿1¹NÊfœ.½{û<0æ¸ ˜ R«9é HïGÕ,€þzšcŠ£’QpÎ ‰7Å1Q'­^'f ;|EóVÑ<ÿ»-\ì<ŸtTðñù^…xgøK§=v83ç¤cbìQûXó€+Œ|‡3BÈÌ-XÀ§–LÃÈsçåÓÅJéßäÃa¯¶ ¸³ÕÆnׯn%B?gwRVÜð°ˆ)ΖM¸‹¶Þ¾ÃÇSû~LÖÐXÁNâk›|€­¥Ô3d¹€;+ß øJ½Ã"Ö.*xH– %ZO˜7(shx d‡ç9š¥ÈRœ#œ™çmLÇ¥ãÁa¥2½ÃÖÂŒ‚‰ÒÅßüU8òƒ!´ðþÅÇâ£R±z›­u$”ýP"¿R€ÞácVJn‰™‘SúȽƒwŠ¸Ï´‹¤ù>a¿fE¿6DÏ ñ‘šŒ¹k±‰.  i§=&ú”!Nh(ÌËá’*}dS½¹Ãŵ8&²nxTE¥Ñ ®•©óK”ï—Ý «ºÞëñ¬Îò4šíN 1( îUצ‹wx÷×6«,J­.’ôÞu%í°coá¼"fÎ…áAãH“‡Eš>†MéãXCwøØ ØÕpÔm'áÒTÏ´@ÃŤqõ@K%ï0•7‡¸ÄÕCTØò˜lm¢r›uÔIïÍû ²cóÆ™™7m)³Ò[øÂŠÛs%äf•Åmøº"¢¼Æã6ñN¤öLgrœ8,¢ÙÇæêÑϹ¸tÚc‡Ï³å~­QÉ(” ¦É•¯…d&w—\íøJxgŸ˜.¬›z)¤‰ü1Npõ[×V¸úûȽ…óŠ`ÜpõÎÛ§je4+ŽÌì‰åQ¢aF2]W‡â²>™ÑC¾ÖŽáêC„5+”¼b† !^é#³ëºúgÚp1íð×ßáÌp­®éàÖK\}‡?±˜"»Ãæ¹áW™/^U2(­ÉG] 8Ÿ5w࢞‚4‡<Ö¶LÆ«,w>lRÝ6(³&¸:Üý<1Ä&díp‘«OLT¦à„}¬â"†§EvøÊ ¶#¡qu0vÈÕK»7\ ­ÔÕ!_5Èt~ì]ïpqjOÎ-…X㤹9g8§Ø}HâÁ,Ñ´Ÿ L-‡1q8ç5V|”¹:À¶ÂÂwøBè†mÉoYŒ53çK´‹ÀNéF—~ZQ¾'¤ßºpðv¬\‘„ÆÖ­p¨G‰‚v¸yBÈ(¢=à ù¶>FÃSÄ ÜØ*"¡‘9X:ªœá/ÎÇÈÎdžî"§íúÂM.]¼Ã¹´»ŽxhÇëZ>$±ÃÇœ“§ j óªkáz$Éy\fᢆ†‡$@¸ ¯R°B§péjß ¯Ìð¸Úw\`û>‡HÛŒ –ôHÒGþ¤®ªä>Ö#.9dB%–ƒ¡Œ~¿|%Y©ÕeÆÕÞá|Ä›Šed—‚ѽ:¼¢ù'?³×Ä2¢'h@ËŽÎ|\“ÿ²rF‹eÃ(Å_Òß.€¢ÇIJq­4Ī•Ó<Á|!–9·Ë\\rµùšï—b™‹KªókS0ßðR,óSSÐÃ’‚=h±l:%âMôÑIqQX uîx‡óö©Zù5+ú¥¸¸ßUÀ†¿9 yÉ —óäZ=<Á'³Ê°…³k/R$íàÌI¿…B=öàž¤ØÂù!^$¥Tð°×U•Ò@¾é†x‘bo*8©ÕE’ÞÂq4Š†Æ Þáü¿ûºãÄ@q³#¿¶Éíš}¬Ç'Æn•±Oh^[~ãÕâ¹øÈßIç6`ÝœæÙ I‰ 3<´ð…,vá÷õÙšÜÌA`.nRÇn¥»…ù“¼íÜOZK‰Æ·ÞSc婸q4¡<}#!U+ZÍ —h­t…peáDt©GÅuY«í}ûAï]—)G®Õ™h|ãâ-µðyzŸœÕ$Z]f¼àÎ÷ñ"ª‚Û¥± …W(nƒÔ|°pµ„k~s?º0ö5»S”œóErç-|xÎ ç6¡X½V>ÆeÝ&ùà©!ºmF–ôè@rô)4´p^Ce+Ï;úã•î(`u•‹-Šýû@Ýo#Ü:éß¾†­oµ›Ž¶…Ÿ}t»—˜]O9Ï6WQ’àLÉaBCvFC¥ßº ùœó¶¾HæmáüªZ9I]IÁ-|A{ò7RÁÒ·¶x׺úœCqšÇaåõ Æ_ÛQŽJ. lż 7©ÕÌaå.žuq?Ö¤kHùæ2åSQʇ µÏ ?ôuÀ»>†«‹ìcpüõl•ø“[ˆÕ)fBž x 3eÔÞ óøl?Ä&°‘ݤVéw[8ßùªh[‚Sð•!ÒÚil¹IùpÍÜž^;öE󆵱‡ñØ­Xg#ÚžÛ‡kÆNÛ‹cÿ°í“íÖ꟯ûk?¦Ï¸>¶û{`†[½üp=ý»P§ë©íN’tè¥pÀ>2ðoüÒt%8êðß?öΣÔyT:Ï|`´UÕá§t+Î*†£ÔJºê­zÐJ§>äd’xt‹é.Iw½ôcB¸¼ùèÑÑÇKÿ)'Æp>I÷ŠZICAÑÐíÙ××>’ M® ô1ì×Ãßÿ.Z½ùP·b®&n!1õ±Ýý%ò®ÐI?4e=î/fì­Ì&(ÂlrïÏŽ>rðï¼1ƒ9/ ª¬øFæ«V&õÑH}4JÍcÒsðï¼í#ô/,&+ž¿ Š‚¡+2;’cT‚ŠPBÀ# 9þâõH:œIUª±çnh˜ª1 9.ý:ûè”>º4DfOQÏNLÊN€ÍNÎßUÜë~6¨ÏaøSœ=üL[ O[’tPœ$w’»ÅÝ€‘²ž ›è4^Ò+u^™Áæ&Hs”¹¹Ãû<©ôç Ì:H”$J '€Ä @â pH³¤YÚ´“)>K' NxLÒ£$] Är–Å'iéôûÇͲNñyY ?:Ò’AeɸwÜàlöva¶rÉÀZÂ9aëó²£ó¨ì¨À™2±yÙxKRÂR†JÂS ¤„ ù“GQC Œ2.=aƒQ¾÷ñh¢Â±[E”~‹$3ç3®qÂZ¾Wµr©Nê£Sú¸°AJذÏ˲¼©U:”Î/$l0•°¸½r:Q6káb¾wŽ=*}ŒIQVÄ™°!¿;óñh" Ñ6={H×Ó:H ò»3&*œÍËÆ›; å{U+-ã$l0È÷Î!‚ÒGHRœû™°”°¡’°–q6Ðò½ª•šqé Œò½G ~*Bqî&9w#9wCø‹»F å{U«QÂÖ§b-üIϼ ä„­Ï˲†‚5aƒœ°õyY’.n@AJØß€úx4¥/$l¶>/ËW榞qpÀ?µÒõ„ rÂÖçeYºB) q8(œÒ¬iÖ2ë HyÙe¸-9aëó²,}1aƒç÷ËšY‡iÉ ´dPY2.±'±§xa#­È6å}8\KØ0%lVÚaCe‡ ×6L ›åϰ}<š¨Òõ„ sÂ&í°Ye‡ígó²ñA9\KØpœ°¡’°aJج’°aJج´Ã†Ê®í°áÔ¦„ÍJ;l¨ì°áZ†9a“vج²Ã†)aC)a³JÂö€³yÙe˜Š¡–ïU­vØp¼Ãf•T s¦¤u˜6i‡Í*;l¸¶Ã†S;l˜6i‡Í*;l8HØ©Ní°á(ãb3¹Χui-Žà§"@Q¦V(,x£ø]5a¤b(žì+Ó:Àc3¹®%l¨$l˜6«$l˜6”6«$l¨m‘wØp*aÃq†J†)a³¯$l˜6+í°¡²Ã†k ¦„ÍJ;l¨ì°aNؤ6«ì°áZ†)aC)a³J†)ã²üÃGqì ;l˜6+í°¡²Ã†9a“vج²Ã†)aC)a³J†k;l˜6+í°¡²Ã†k ®%l˜6+í°¡²Ã†)a³R†J†k ›]KØlNؤ6RvØlθ¤-2R¶ÈìÚ‰J;•°Ù”°‘´Ãf•6»¶ÃfG ›þj’½ÙtŒÊ* ¶iˆV"¥V$ !EÈ›Úa³9a“vØHÙa³k ›M ›•6R6›6’ŽDZåH¤]KØìTÂfG[dú›mÐ}<šˆCŒICг;6’vج²Ãf×vØìÔ›M I;lVÙa³k;lvj‡ÍŽ2.6“káÚ‘HRR1›6%­³9a“vØHÙa³ƒ#‘ƒÃŽv*a³Ï¿q•î¶+àÊWVIØlJØHIØlJج”°‘’°Ùœ ±Ç O¸Óáb*6È¥ìZ2ds*&푲wfS.ER.e•\ʦ\ФÍ/«l~Ùµ\ʦ\Š¤ÓŠV9­hs.%V$eóË®åR6çRÒæ)›_6åR$m~Yeó˦\Š¤ÓŠV9­h×r)›s)ió‹”ͯħL—áËbví´¢Í¹”´ùEÊæ—M¹I¹”Ur)»–KÑZ.E)—"e‹RÊD|ʤç<4J™ôdˆr2Äï^éÙ iÉPÕj!硉œGÉf(e3Äg3z¢ñ€³IËe¸±D)O!>Oa3®§#”ÒRÎõQÎ:øm"=! í`Þø\ vp@4>±GJ>A9Sà·vtªOÕ¿H)DOžÀHW¹ˆï5‘¶ë2Þ´¡µós4>?G o§ÄÛ‰åíJMk-4ÚÑ·PhÌÈIa䔸6õ\»j•\÷K–[ø€9“vÀE¢Ôüãñ—4H«LäÁ”y0¿§ ßB@â-Í’{Ð]…ÕRbµÄ³Z–¯vp¼R"¯¤Ôû)sT…ŠR¦¢lYÀ%iêJŒ“xÆ©SFÒgÙj…XR"–¤Ôâ)óÇž&^†¯«ö¶KjåÄ{¾.M+þJ«¶K•Ì*U­ø «Ùêßrì…O­D>¬›bý;±Tf }9©ÚdÊxä¤j“)ÃŽ“*.¦ Nòï¦,¬8©ê`¦ªN¬:4*üR£"!n[ñç%͵šüB3åBsâBk$ ©RjõíóóÛQfýöùíËp<èóï×¥ý÷Pd†þý©µºï/ñBÄï¿mzø×ùWë½ö{[ùzmÿ«´úJŠøñ¥ 1Á¿4u}¥®| Š8nòû¨ŽDУ7½ô/Qȯÿ|3æøÄ߯ã¯FÈŸ_ÿ~ö 8ÜŸí­€ï¿ “t”¤£¿äïÒß÷NNÍ4°ØÂ™±¿UB µF/½…»‚r«!’‹VYûë_aÒÿúWžô%üKkuN6Fˆ¨.þÁOúãc<ü÷÷Çt¾ý%LçßßÅé¼Ãé|oÅMçýwAc’Ž’tái:Î÷ûN¡…3c«„€.ä;7Ï[ø°+¸6IEWóñ÷wч'j†ÿd[MþþþûÏO~ÎBFúcžwcçà¢sÿ®Íó,]vî¿ßÓjxWû¼ÞójxVû²ÞÓjxWû¼ÞÓt~ç¦ó¡àwÉ%pm¦½«áŸ¨ïÊjxŸZ ï²s'";3IE«´ÞÅÕð.¯†÷¼ÔVi÷.OúwqÒpÚßkÂj÷;‘Ôߟ¢">å!~fE¨­]y‚ãÚÇÝ÷%\Zýú\^ý?¿>Â1’ÿþS·ºqŠpOon\ñà ¯É´ðŸ?~®b{ƒ“&=àûº"üÏCú×·þɸóÆc×:ÿçè<ßNjԭÿLÒË>^Ž>òÒ+¸(=µúüùÏ~ˆo× ó ð¯ÿõë»QZÁ>Êó®åÈ ZÈýA ?û}­þëìÊq1³˜î¬ØÇµ­qƒÜêÉÑ*ämoua¥_J!n…[£V®Xn]·}|+úøõã?´ò‡äº~ü§ËKÒKøº¼´hu€!çvöÿ}ÿõ%,Ìþ‡¿túÏû½‘ ?dò­.ÇïJó1Ãù>^¤Qð?Bôgÿ%þ‡cJ|÷{+Ží¿ “t”¤£—ÍýNdËkþ­‡3C¬[`Ÿ·ÜGÁÙ>ú¢ªBØA gÔ•»²OÎ{1÷ëÇG=Qï]q¼¼pðvž_!Ø ãw ÏWÀ{÷zØú(áç÷Ϲ=>{—îy¿Ûu”±3Ò7÷°Ï¾Æc¯;…ýÛË=ÜzczøG ¿Áþ<Ã5~¶Ém_$é-œÉEû Ä#Çœsˆ$Ù§‚cM®›{T~ï­Žý“ã·ÄÇ2þR?Ù!¾)ðòãE÷O®áÛ}ç7ïv–¾`uÂV̰ºªèvðowÛ'|ŽtûÆÍƒê»O÷gÀÁš‡³}¼°£ºÖ:ᧆšÏo]$Vpkžå0Îôñ­øºšªydTW|qk¤:«¨n~tÞÒLdiU‡ªk§c ß[¬T‡×Pæü¾Åzûmrì‘ó@nÊp—4o8»_éØ×;”Ro:õ…s 6 •ò ¯Ïs@Ö|y„ÊO$Ÿ >9m2Üö'"Î ê ÁÑýFÊHóVÑü„ÝiÍî¤xÚ Õ­»`bÜØ¥•믮…³n²}¢.½·I¯WŒ4ä¦Ìà×Ìà#±›äzŒìô|sÛ+ (öéˆh¯à ñ"M®>T0˜%ƒQ(ÁXC`¤ÈŸ#K¬ƒ}Ï” ð¦ýDžmá¢}&ÆS ¤ !9€@çHÆ„ÖãìTè«Ø‡ÿ]ÎP¶‰±[nì¾Éê´‚o8—&ÃMŒ$Zy‘˜dwOR¶Fº“†8¥:4K“ ;iÎ5î<š!aÔ&m‚w´ò"1É N3»Hd¬…sÌÌáçBR(Û„á¸9ŸXÏØpNƒ¥k³nÂîNá›c˜áßܼ•WœðÅàÃUŽÉúµ%ã%?_µ kË:H¼pÎ>a‰0f¸·Ü ɳU”˜ÙEâr<|’²5CŒKV´›fŸ¡yí¶rì6C+í“” )ÃX”˜ÙÔ´ø”†ªï›ßávÍ>v‰0Þáf ‰™IœØµðãônY ô›óSÑÏRRJ Fe ³Õ~'µµÝSB:+:IÈÜtC µ|³ƒÍà¥VIz _ ûÊ%OØÇ3fØ©oÕ*¬ Ek(̘pÉ „Jñp\{$Têí4ù§„ÜÉ\ f-6t—¼Â–'ìã%R|‘xp×ùfv¼ÝË ±jž¨c¾õS0ŒÜJK³t‘–‚š(¬™7LÍ¡¨L^z çCËuÞ¥K ÛÇmR«©2è"Þ¦w3œç¾¬y[ºë¶%Í;³äÂÖGù›8ÇÕNjߙ)ó‚bÞ ! ‘â9 Ár´f^’èÔÜØi¸24žåh¦ëܧvnͼnMÁ9xZɼV1¯<':ïùƒÒ@SÅ]çg†5v-» ôqbˆA³O§à6SpA²OÕ*>#¤ãÁ.*“`bˆqhEê»8sþÀoÏÔƒwé-\±C/è·3xÒô8Bì’ƒIOàihê{e *ÕÏpm-ú¸T[öqi?ß³õ~ÀkNÁqͼ‘3oËWö$$l’©!†mì­¼HCZ¤Þ \К ¸šO³äƒ‘(ùœ‚ÍRÀ °f^W~ªà9OÝPýœyÏãúwÀ¥Êv†ÏT¶»p‡/D€€3 صÙa•8>®lïðÙ<’Ñ_[X^)ŒÉvxމ¶D)ø)+†µå$F‘r€¾`ŸÈŸÅ}1¶¿{ ܱ…‹'8öV—švé†ì5ggI^1o‰“ÈDÑÎ÷vïy·ö1& qÒù^'ö±>¹qmö€nï;_Ÿ.Ö:’†f–Ÿ)ŽJ¾P¯ßá¢ônT½ÝQâœê¬ÔjNuv¨:KÊØã s.àR]ãí;œ™óçùÞñØ£2ö±æA;aË9+cx_þw¾8æ:¶;vIúKÙˆ¥ó½Ü1W÷²£jáâ’™û³g›»ÓÒŠ+ަ¹ç æ;|bˆNóIã>:eˆC®m`étqwòaKç{3|ö°H3 üÚ Š}†lw‡‹ÒùÉÕÂÇCD£Ís6Z·ð å“|¯PjƒKǃwøÂúA˜Q0 ÇÑÍ”€wøÙ•Ð)¸³C”ýPN+嬽F/––'¤;NzÍø‚¬`rcÕÉ…mC^OH÷Ò/̨:ÆGþ¹l¤ñ\¤½˜è|P:Ï+¥„;ÔT×ϧú\Ã_˜´néLGåL‡q~‰49uÚ ç<§àò}2­œ;?KW½¯àa¼âäò¨)6s^²{ŽA‡ó¬t¦8kŠM¢ …Û ‡[»Ÿ‹3ëÒocû(”­ØåyÅ>y‹ /jÕÕ Wy¡_:±á\ vbˆFÑЄ}@±Ï„tí(Ãx z˜ñ0ž–‚ò¾Y<-1>¿ta‡¯ØÇMiÈ3÷½YºoÜE~Ú'v”ã›Þ´p±Æ7f|~é0Áçûxá.wzÃFÁAÒÐ…SJ›˜ð޲Ýá|ç4—*Œa{ò…°Zz±¯Ú}¬ù@ÊØÇ“6;iåšÎÓÊ]þÒûd&Då%üá;üü•#®;œóIÞ²s¾-“…¸d÷¸-Ù=nR§cÜw1¦lq2>DyÅ ûM‡ô1e»ÃWTg$?_µ‚5ó“/„Õë2Ã¥_¥à¶z—à*ã‹Ú¾÷¸Æ—àaœ"®YÑ.ÃÅ`?.F;5D¯Ìó‰>z)öÎMÁ¥mó}¢/0¾;|Å>aJÁÒA˜ªñÅäÂË+§Î5Þ]eÕO‚´AVÂgk|°m ãë·á\;üõÎïð‘êd¾ ›Qà|·Z8ßGnì-a„|[×+Œò…WbOí<(ç•RÁ½¢º ÃyÅîÌt¬K„;|@ÙÆ—á/í)C:ñRò1ŒrˆÕKøšáŒyÆp×Í"ßù—‰BqŠcbc´›6žY2-]Ê´î)Ûó0á~ CîüØp¨xÚ!aÜá ¶c(×øÀØ%œ/å*<[ãËpñ¡ÑAI­Æ·ÃW†HSfpKîÑ8¥CbwÀÙ™VµŠOùà6t›¸@Šs=/;€må¬á_°l3 ø q S›·êmž‡}ä ¾vøÙG£ô¸ßªê¹#ø37@ÝÆÎÃ5š&ÜRUêQ#J ÝëÆÞÑ4À)EX©ÕÌ!¹>¡®8T„F{ ®º2œ+³1ó±álgôˆÈýVMŽð5Sªi;œKØÐW­ž<ÖXí°îäœ_–fˆ‡}ò’ÆVnf$dØ UpÁŠÐ(/SÔf™‰3U@´²ÃVÀ_ªxG0÷Ó§ŒæÛHš`ªfm='Ä=ËH€‡£PQË*äfª'ÂÊc¦9A¾ÇhJCmdÊ÷ä0ð1¥ 0\&¸‰[Y@KW#Å¥ŠE¥óã¹é¶%Í»m`w‘¸qÄÓ8Sï#gB–³ãÉ¥#œUjãÕë„XçÊ Ž´2Ã1*T4”1*“ÀI¿uáà‚Ý“Œ$:®•œêQ‹öÎÏ0\À¬ßŠÂ x0EG[ø¡m(·-­‹U« µš9–Â)."MøÙJøã •I‡÷}tÎ er>Öc0Š Q]f‰[9|þdç’ªÍ*ÁÖóðöµç©<4äme+ñsù¦Ür±ˆ$Q>ðžZ8ÇÙ¶Ò>Ò÷Ã÷o@uBî^ÉÚÎ÷±je¸ß‚k¹Ç<€OŒ´‘Œ…ø'´}R¹×>î#Hç¥÷*XUe gx‚2ïV†ðÔ„ºÿn Ÿ".™!¿¯«Íí¢ÒL3‡ÌÛ>ÒZÝÒ”Þmú×úg–/nKz^}D²,ëj¼óo¿X¾;È w Ùj÷ì€ÿàß~üüY}SúŠÖÔM:û»-¼⎥<Ñy«Î)ªÃ1\N¦µOµMtû±ß½ùîÏ'T‡’æ«V‘ûžýÛyWÆ_îAïFÖZö|ËÍt¡ƒ÷w.n¾ä’˜ë¨Ð×QÇ}´ ±je—aíPQ¦ôhùž«%‰U«ÌJÈJ·×êÝ_´üNÀugƒªóÊØ'T¥VsÒ'¦ Š{0œQ]us3Ò6T0XYmKÚáCE,Í`‚±I¢À[\µ” —bÙ9–ñ÷˜OÇ2²’)‡|‡+±l·¬‹¤Ó NCÍ+5$’"Þ\çi)–͘w¿ÆY\eï£àŒâ‡Æ±L¸Dº‰eEî•XæìÔHÜš"ÜPZ,sn)–¹¸Ë\ÔbÙXÁqIuÞH­.ÒïvðÁTb™73±ÌÃR,Ûáb¸k¦a×Ì`ÇzTb™·3±Ì“²„yÞ 1—³Ë[ähR/ϺDwÀDZl‡…8EÈ\Žx§à¢†Æ v39žn_ÙÌT\ô^‰‹|ç;颂ÇòZXÚ' °Lƒï:x¿HCˆìØÛ5P «þ&þê›ÒœIÇwR¥8QÃÚê‚&Õi ç±p"zÞFè²U4ÒoMâh”@<žÑ(“k¬àhf¬x©’ÿ­)3D\šCù…Ò6¨sV|k­íÐ>ZviõîpQuã±»¥õÝÒú‰N¢Ò.o=vÿ\äp-¼¿Ïm: ½—ŨÊÿn çû8UQOHO^~ÜKç^ÑÊn$Dö:Ò–=îpnTey»©Õœ …¯²Õýøß’}hᬣ¯F"½ïµ…©‘þ:ù+QÕŠXgWÞ>aQQ=£ˆëý#¯Ü)û<CÌçά´AnëQUð|(ËÍfàÏŒ½Þ?²Ö<ç­ê=®Î;¥' ºŠ·K~ÈÔp+µJÚ3x­x?1v;£Ç=©üäZM )’Jñ–"eD”æPÕÊIêš2CtKzÜ“¿ÏA+ÊoŠÌ„â8ŽÃŠð®+tÝÏm¿·I0þ˜„rTšøsIÆVgœ·§>t"ÃÅu4 åcM¯|{ý€³ ®Z±^%\]fŸÊwlx7’\quº|¾‹Ð¬d«„| 6Sµâ ‚µafßq‡÷C#Só9!²›Ôê"ýn ç;_µ‚ç¶øÊimˆ4¶OSá¬àþ™*_?öE󆵱‡ñØå#Ñö\­;½:7ÿlûdKk¼¶Oæý{¬½€ÿóu˦«VoM«|ñ!HB@I(B°÷¨9`~ïܤ·ðß?v!¨a¾™×ŽÄ*#±IˆU„PjEÂ~ÙFŠêÝ63^—”êz!Í3ø7#’Á³Õm |}íB‚4’ ÃÛ;š“¶þ÷(/ü»ý¬ühU¥m«˜ú(]0P=hûӴ믎vp­ÖßýÙý†SÂßÈ\ïÿut‹/ÃÛË’ôãw+æpûÝþ½ƒ7C,^š`.AØ'ªQV¿a®!`„@ÿÖ^³²Œâ#öw.Ž®(>¤EnP°µQ|Dqg*]±ý;5íH¬?û¨ø“|„‘|„Q|Dqí–â# w´!m¡ÒÒGf·7A†CŠ-`„!‚šòg»€úxpü.)Ò“ë‚Þuýøõçý›ÑæžœìCéÌD¹ó;ño‹µµæQ‘îpáN‚›3ª³±ÿ"±…þñø‹¢9£úÇã¯VˆN ŒH .×â‹@ ô“ô§Ù‚ÑÈFÕŠ÷×½¬ÉÓˆÎsŠKê¼U¤SjEÒI‘NÙ¸°ôäké.Iw’t§Hó‹ûCŸ„x¥UH­‚4Ó‚gHÌAÐyzRÁ5‚ÀËcS¢€³,$O‚(w~ð[{C)½~PKWùÅ€9˜3ô<þb5o±¿nÙó‹ë–+FñCù#µ¤øS¹èá"#ùx4;Ÿ<ŒAiì¨ÃªrµfLUÌIBX®q‘ØI gHÈyüâãÑDì|r=†¤±Óβ“ ÇzÌõ±“vŸ¤-éFà ?;¯¸“œŠ‘œŠ :œ¡@—kÕH«6ù· ­2æB†A5k<¿Ë ÊZÜ_týxü%¶J†Éð@xOÍÚ'b H±”ØÉŒL™}@óŒÈÓ†ÁÙ*&!Ò— øpK¦£ˆG«g)c£TLS •©æR+æû<ãlá ý,»‰?‚y~‚Æ^«V„à:I…5ú cú ý„D?§Ÿz ´*Ö˜~B¢ŸÀÓOX>à:I…D?A¡Ÿè'°ô“'–\*‚ Ø+ˆå­KqjHä0¦Ÿ`TøI?Á¼ÀOOR//­àÉ‘˜ñ嬌ô'ë^×ÇÁÂ˼HIJ…‹ìõ•â Lò0 ýä‰egY昽Âý„1ý…~B¢ŸÀÓO½ìõ€³$uL?a~B¢Ÿ ÐOHôÌdm­q*ri®liõ‚²Ê ­²çé'LÑOHôú ‰~Â+ô¦è'$ú ý„D?A¡Ÿè'¼B?aŠ~B¢Ÿð ý„)ú käYæEâ¥-üè#*SÍ¥VÏÓO˜¢Ÿ˜è'¾B?qŠ~b¢Ÿø ýÄ5ú‰‰~â+ÕOœª~âˆ~ê{¥8Újýx4á”Z=]¾Äý°WLô_©~âTõýD…~b¢ŸøJõתŸ8â:ýÄ{ýx4‘à'ýDž~êüGôSg¯˜è'¾RýDmßtL?q~â˜~¢B?1ÑO|¥ú‰kÕO\Û‚Å1ýD£Ã“ëy¾ú‰kÕO\£Ÿ˜è'*ôýÄWªŸ8UýÄD?Q¡Ÿ˜è'¾B?qŠ~b¢Ÿ¨ÐOLô_¡Ÿ8E?1ÑOTè'&ú‰ ýÄD?ñú‰SôýÄWè'NÑO\«~b¢Ÿ¨ÐOLô_¡Ÿ8E?m¢Ÿ–§Ÿ:±´Ú¾ª$!OÓO;:ÐÇòÒ ŽIúÓôÓNÑO»vTÏŽØëÇ£‰§ÔêéÍw»¶ùný´¯T?íTõÓ&úiúiý´<ýÔùãÎ’ÔqñÔ®U?í¸úi ?é§}…~ZítÞxïÞ&úiÍ åK;¨~ЧvÄuúiGìõãÑDT]ò0ÏW?íZõÓŽø£N?툽~<šˆðäzž/_Úý°W{ÒO–e^$^ÚÂÏÎ+Ê$§ò|õÓNU?m¢ŸV¡Ÿ6ÑOû ý´SôÓ&úiúiý´¯ÐO;E?m¢ŸV¡Ÿ6ÑO«ÐO›è§}…~Ú)úiý´¯ÐO;E?íý´‰~Z…~ÚD?í+ôÓNÑOJô“^¡Ÿ4E?)ÑOz…~ÒZõ“ý¤Wè'MÑOZ«~Ò¸úIF‡Sjõ4¤µê'%úI¯T?iªúI‰~’B?)ÑOz…~Òý¤œý¤ÁÑÑsTQûI?éúIkÕOJô“^©~ÒZõ“FüQ„Æg?ÉèðäaŒäaŒâaôê§N?imóÆÕORè'%úIF¦‰”xö¦f½JIZ‘³jõä (Íê5Éwˆ4‘M$…&R¢‰ô M¤)šH‰&’B)ÑDz…&ÒM¤DI¡‰”h")4‘M¤Wh"MÑDJ4‘^¡‰4Eim“œM$…&R¢‰ô M¤)šèÄË®8‘¨™¢èÄWoÛßb •¹¢¯ZñïΚ­þ-þå×V"¿õi /áÄ“©õ%Ó¶ûƒ)c›“b›)__pR1e¥ÃIÎÞ¤ ÏVÏí)™Ò[;q»§Q¤ð¾_£"Áý´­ø5o®Õdá­)­m#QX6{«?ÿçóhzûãüÿ7²Õ)Ö=îÚÚêÄä¦å À©l¼0ÆýÂ*!˜”“O–^N˜û·¥rQê ¯ô¸O¥€o†x¿¦¯€×Ü•ðÇ÷•ëQÝðV€C¬¥—ßÁ3žzøï~þï÷?Ÿ…=å@TyCóxÓ<ÃUTµBw|âóþ³ËßÝ:øŸßßï!¢tÛ¶_´rÃ×.ÄÀͶµI]ӃҢ૳…W´Î_)?(~×^{Õ­r¤7ñ Ôǃ‚>¼F^ø†›S7¼ð…¤ÎW÷‹ÀÕå¶Ò pªrfÌJº~Å­ŠxéAý©f W}4·{årà*¨®ütø½U~à¹P™á_¿þ­ÕmYž¼hƒòÁÛÍ€Ö¥Q~Py±Í ðêEs(¤7^Œ‡7.-Ko½ç.Ê!ÞDGïóƒÂ‹Ý/¿|ç¼ËÜ óß›!î.-=(½˜,½uiÙYÁ”³*[áöpI ïm*ÃmÅP~@8ﬠô#×@<¼t*ñJYzéGòÍb<݆›ü ô#؇ȳUãTòƒÒ„Ç¥ÜUž6æ¡4ˆ:_9S®ö#(À+§b¯y앹=áá•S¹ùÊÇS§Q½ÝoÞæë4”Û¦¥5ðÈ$JømÚBIì·µꂦåáuii_qçƒúúLஜuptþãÇ(}è-F™nÁÞ™mnu'_~çÌçƒÊ ò¼+ŒWçóƒÚƒ§RFÀü vVN€ó¬[,HXe1ª›Æ@¬¯k†xõ!?(¿'‹Q‚»:嬲b)}Ä*OŒÝ’ÙS ¨GÕϺ³Uen¾Î§u·,ððê Ðp|aäxPÙ¤0Q1+ûXïõ´¹&*»£É´ë0¼«Ä:Lе€nO°)ð=>t{PÕônx^H÷WÞ±“DéU0¡DJqŠ”bLl~àÊÙä%éÅØ1ª«ã c¯®.Ç^_Ö{5<¼ŽE!ëð#ªÎa]Iâ£Æ&H…4i _Åkàé-W˜éàÔÁ÷‡õ¾ŠepknLê= ^ï-ìË÷|ªR"‘)“šÒ¦ ½).Ò#DbSüaà{«þ®Ä½Þ£tàhUÎù7w©{„Å2ôº¸y6@c‡Ïèe«Ð ÌŠ;[U—]c~P…^¼ŽÃL¤B¶ÞO+¥Ï¤BÅo|ð””©àÕGÀ7Ì\;8Ÿ Ù:¥Ë©åvÛ‰á0?(FåÓå³-¼êãþǃ2ôÞÒy^’“írèµzw÷6¶‰Ã)“ªíŽ–wÔ¶ŽÃîêóƒºô!Á}™zÊÂ8±uÆ¢óuè¼ôˆÎpœé|‡Ýò*£‡“¤»*Ëc/ÜE¡bfë8 [î¼Åq„µM€†,½ Тæë3¼òàá*ÀË}sç!=ˆf\=°M€öiìméYx o æe©“ ‘g«*ÊÀõ íGö¤lU99¤ïá+/æøÞª˜o†r²Õ¶Á5¤¬¤¨ R7‹°a‚Ú åòƒ*HY#Àké!?ã4Ú •¥×Aʰ~žª eB¤ü Ê¤0 ðòÆdç x¤x`Ó@jòCIz n x±møaÄ-c]}Lêðãù4ÐV±hÿ âãA9öاÿg,ªvåà±`kÕ¡P£®Í‹9ÊP½ë d‘TÅ"—³ ªÒ@D>“¢6 téA~¬ø¦Uø±|‰›ªXtÁl÷*üàU¶¦Ä&½‚ESa‚„0á¶!ühÕSâóAu¹îU‚‹ÒÙ›[x&²ô:Ll¬£®†xóæ1äe.cøj¡k"¡Áü  àx&R”qu.#J/†xÿòoJFh*LPÕùc/òxP‡ Ëç2TI79—¡*L„¾F}† W/¬sÎת»ñ|v½×æ-jV® üÞ„«SŸ¼«Ã„°îš”%fée–â6>ʸúŸ¡<ö*K‰›Ðù2Lø¼¡æê,%ð{ÐNÚÂvU˜!ʸúaî|&Pê¼Åncå|`ë: ¯S–Bóu˜0¼ PL›2L P)uÍ:ä±×a‚‘®NYLªÓº:LxaÎWaÂå<Î5Y ]Ù‚›«ßæÚR2Bµ Ž ®‰&?ìIí^ÁI•W‡ à /®öIÇ—ÌŽ%W†xé“|Êß}åm,ðY¤/½5¹vá+oscF¼*Ão¼ü48òv÷[sf.¦•·‰’ôÒÛÜœM/¼MŒ<5ò5)õ‰œøÊÛ¡ðâ+oóz÷uMyOë+oã°^{~ÅùÆÛ†³UúBçKoÙÓúÆÛHðÊÛä t_“Ò‹ÔùÒÛðÚÛð1ηÞ&ÍùÒÛÜÏw¾ò6!ïÇùÊÛã*w§âÚ,ÿ„‡jÅ‘áCd¨â»µi?.Ô+Np•¡\qfËvÕŠ£_2¡Zq£L¨V\Ø$éÕŠsiÅ…bÅ™û Ž¥æ·Bº­"·¯ã{È\9EéyìÞå3¡^q–ï¡^q¥Ý­˜ u|ÇBuÔÄN^­8wÍw8>žêøŽi ;4+ù±·+ÓƒbʼnG•B½g˜+¥¡ŽïBçcµ°œIœ6VÑË EæX.,(u¬¢×3^jˆÒiŸX­%+äï±\X±¨œÄz-y~÷?V¡Ìdb›µä%é¶t¦Nõîªkóƒ<öh„›…E¹óÍZrܲ‡b½–H‚סŒòØ«µ$”÷cµ°B©º8á.b³°²á:®ÌÂË………«ŒåZºYD˜óõÂò{”ùù÷û¥þG[ßùŸß™VûƒÏæ·µñëߟ<ü׿_ ˜SÜ¿¿þýý÷Ÿâ7"»B¿þý4Õ+Àt~oU½d· ¯Î8’Ž sðûƒêwqàØ¶ºï™7_ȼïm pâʼ͗®o_{áM/]ðÝ$<ÜÖµdsá¾¼îyoÓ|¼Ü—co¸çáõkE…æëÖMÐ|í]†GöÍËÞúãôIöªvá@˜´u‰ò’i]pÿüÛºÊs½þm\%p®ò¶^›@·Ãïªpœ»øj£Á}‘ïð6 gá]çé„·aç£Á_ßÿùûÏÿüÿʵÿ»L¢DyLP-1.10.4/Data/Netlib/gfrd-pnc.mps.gz0000644000175200017520000004023610430174061016002 0ustar coincoin‹0K®9gfrd-pnc.mps]Û’ë(Ͻÿ«¾wØ/0»§Ù—ŽcBâ$ãÛ¼ÿƒüî ‚>X }år#K -qäZ_Ú_ñï ‡ý_ýµùßÿ ÿŒöÿ÷ëúë×?»Óò°ªkEUxØÑ›½ièMCo ½1ôfOoöô¦¥7-½ÑôFÓ›½9Л#½9†7;²pGî½¢‡ð¦¡/7ô塨І¾ÓÐwÂÕ®†P4„¢! ¡h{CØBÑІP4„¢9Ñ›SxÓ>=в°% [²°% [ÂÕ®–lnÉæ–lnÉfM6k²¹¥k©ÆÚŽÞtô†¤Ú(EH[BªIJG)ÂÞö–°·û™ÞœéÍ…Þ\èÍ@ozs¥7WzÓÓ›žÞÜèÍ,$›5ÙÜZ*cé£7ŽÞÜéÍ=¼éÈ;yG“wtôÎHR#•!)MRzsˆß!Ÿjò©&Ÿjò©&ŸêèSò &jªyM5¯©æ5Õ¼¦š×Tóšj^SÍkªgMõ| ¤Bªÿ¡2ÿÐò…&_hò…޾ Ÿjò©&_hò…&_hò…&_hò…™=PŠ&MѤÉš|a¨Ý0ÔnhúަïªgCõl¨~L¬Ÿ™¤fzC_Öôå3yù½¬¨Œ¢7½©è͆ÞlèÍ ½y¡7¯ôæ5¼¹’®kÔõNeÞéÍ–Þl‰Ï„´#¤Å{Gñ®ÿÔbqõ@\5¤Ýö™jc¦Ú0$e¢1Ê£ qÞç Õ˜¡3ÄyCœ7݆¢Û C( Å…¡¸0†âÂP;f¨3)†"Å¿ ùËP¤ŠCQ`( E¡(0†¢ÀPŠCQ`( ,}ÇÆïP\Š K_¶ñˆâÂP\Š‹yðF´„ËF\ÄyCœ?’Ô‘¤NäÓùôDeN± 1áDLèèMßÐw:úNGÜèˆúò…¾Ü7:âÆ…¾|‰_&¶tÄ– }ùB_îéË}ü2ñ§#þœéËgúò™l>“Ízs¡7W’º’Ô•Ê\c²çJöXâ¡%Zâª%®Þè;7úÎ@(†èSâ˜%Ž dÏ@öXâ†%n ôå¾léË6~™¾cãwHÊF)Âe#.j,µ?–O䋉|1£&bÔD Ÿˆá1|"†OÄð‰>Ã'bøD Ÿˆá1|"†OÔjMÔjMÄÕ‰¸:QLyp"NÄù‰8?QË6QËæ©Œe( &Š‚‰Ø;{=i÷Q;EÊD‘27&↧úñT?31jŽ<$þÌÄŸ™˜0fbÂLL˜‰ 31a&&ÌÄ„™˜0fòéL>ɧ3ùt&ÎäÁ™<8“gòàLœÉƒ3yp¦›©ÆfâØLó„ÂG䯙ü5fb‚§óTcžjÌSyª1czBê).<Å…§óTcžjÌSyªOõã©~<Õ§ÚðTž°ûˆØë‰½ž°ûÈUÂî#vâª'®zâ¡'zjE=µ¢žøìÿåóùc ¨ÃCÛÒƒ¡‡Ž.ôp¥‡=Üéa¤G6<è3=<èa¢‡XÆÓ¦·áá° †tMozØÓÃLŠbá=ôô@Ú ÙlNG…;RÚét]èËg2ãBW*cIÜžèêÐ’.G_vôAG.päG_vä¯;IÅHã¿ÈŒ‰¤&Ò5‘6‘›fr÷Lõ3“Ô<ÐïI…§2žÄýâåæŸóýrýøÎ¯lë O¿¾ÿ©ß¿þ]Áýþþ/õû»ø?»Ó÷R¿ÿ ü[ªªwUxâ”T@ ‰¯)©ÞC©ªõkÝà ¤H¢øš’·W*UÕMõkÝ`RDñU$¤¤QµQ¿Ö J @Å×”üÙR©ª6Õ¯uƒI @Å×”lHÉ>úd_â“=ôɆJEŸìK|²‡>y ¥Z ,OŒ’=@Å×”¼RuµU€°9@ŸD%Ñ'‡Ÿ O¨4ª>ª_ë”’(¾'DaSÕÇê×z`“€$ŠÃ¶ë¨vÏŽdÅà§’] DñU$Ôԫݳ#Y1˜”$Q|É[4eï1’ðIø÷O%Ûßï ÉÞc$áÿ’ðïŸJ6±^j4@ØÕìJâ¨^j4@ØÕìJâ¨^Li4FÒhˆ$üµÂ‹)ÆH ‘„£Vx·#¢ïvq’ÄQ+¼ÛÑw»‚8Iâ¨nz<+µaÙ|’ÄWÙõF¥ªÐ‘4,»€O’8Šø¦QÁ 7îÚ±pG­pÓTÁ 7îÚ±pG­p³WBû0îJâ«ì¢êÚWBû0îJâ(NšV 7îj@ŸÄQß´U€Ðpã®ôñI|EÉ%”Ò².ˆø$¾ŠäJQÈ6º â“8ô‰VÁH‘4&'ºj FÒˆ¤1Ùþ¤9P‡Ð ú“$¾ŠDQ)êšCA’Äa+l"S‚ÄÀž‘Øe"S‚ÄHzÆSŽ$GŒä˜o»SŽ$GŒä(BrÊ 9a$§ì¸ëÔSÉ #9åãä#þXñGñÑ'ÇñÇ’ˆ?ˆ¯¢)í# ÿ焯6õ IûÀHÂÿ9$áß0âOÑ'§Ÿœ O(âOÑ'§ŸœD>9©¶ÆHÚ"iëìäbJ[c$m ‘´uv r±#@h낈OâhT¿Ø ´uAÄ'qĮŔ¶ÁHÚ"iÁò5šÒ6IÛ@$m“][iwDvWÀ®$ŽúøvGôhwìJâÐ'MDÒ” i’׊JE$M ’ ‰cáSö${ŒdŸ“Å”}É#Ù‹|Òf´ XMUÉ”6ƒ¤ÅHøÕTEÕµ¿/‰ø=Šx­,5J¿/‰ø=Œø—hŠ6‰6‰ó“*š¢ F¢ D¢óó“…ä“¶Ä'-l…‰]môI[â“ù$²k1EghŒ$¿JôaŠÎ щή­|˜ÒetIÇ#Ù&Sº ’#é²ë]KRÛ¥KÚ.Ú®ˆDǶK—´]µ]Ÿ‘˜ ƒ‘˜|œ,¦˜ ƒ‘˜|œbœJâä€â$Ž»1N%qr€qBÕe"S‚Ä@$ÔŸ˜ˆÄ” 1I­¥;ŒDw‰î²3­ÅÝa$ºƒHt—iµÇ'Ç’89Â8¡NëãäX'G'‘]Ë¤ï ¡eçŒ`•(‰Cv-“¾'„–3‚U¢$ÙÕÅV¸+i…;Ð /Ó_*[ᮤî`+üžL9gœ1’s~T¿˜rÎ 9c$çü¨þûøsI}|òÉ9öñç’>þ ûø÷dÊ%ƒä‚‘\òýÉbÊ%ƒä‚‘\ò¿˜2d Ég×bÊA2`$Cž]—'—’8¹ 8‰+—'—’8¹ˆâd1åšArÅH®ù9ãbÊ5ƒäŠ‘\ó3­kŒ“kIœ\Qœ¼E%1N®%qr…qò IŸAÒc$}>NSú ’#éóìê#»úvõ]'}dW_®²ë’[É #¹åWîSn$7Œä–­Ü"»n%ìºAvE%‘]·vÝ»>#ÑŒD ’ðoØ3Þ*}ÀHô" ÿ†=ãû“¡¤?`Bb2”ô'ìO^’)6ƒÄb$6ßv-¦Ø ‹‘Ø|ÄÛ8Z±%£+­Ø8Z±%£+­,¦¸ ‡‘8—Aâ0—Gâ"»\ »bW\ïr‘]®„]²ë-™rÏ ¹c$÷üjêbÊ=ƒäŽ‘ÜóHî‘]÷vÝ»â¸ëÙu/aײ+*Q]‘t5DÒå3:Sº#éjˆ¤ì3>(…f%"Ÿ“ÄQŽDû š•Tˆ|NÏ Ñ F¢ˆD7yŸ<*Ý`$ºHt“G2ƱðX2ÑX8Ž»Æ8KÆÂ# Çq—®ÕáItÍe@œ$ñÕl¨¤:<‰®¹Ì‚ˆ“$¾ê“ÐÔë ‡æ4{â !‰â«HÞ¨TÍiöÄBÅW‘ /,¢›‚¬¨$ŽâdayÝdE%q'‹)z‘è=D¢÷ÙµúŽÇHô"ÑùsZ‹‚Þ´]IåÜ-vz_Ðv%ñ’6ƒ¤ÅHÚì®Ã‡)mI‹‘´Ù™Öb±«-aW ÙõJ¥"»Úvµ]Ÿè ‘èlÿaŠÎ ÑI>óy±ƒØ¥KØ¥»Þ¢’È.]Â. Ùõ’L9d0’C¾íÒ´¤À#9`$‡|ÄhÁJ Ö»’8Œ“-XéCÁzW‡qrˆqr(‰“ˆ“xâl1…âäP''äCIsÚäÜ%q´šª %ÍiSs—ÄaÄ¥‰>B$ú˜ /¦è#F¢‰Îïý.vúX©–ÄaÏx¤T3},ÈTKâ0NSN$'Œ$ŸùüaÊ)ƒä„‘ä3Ÿ;ˆ]§v »É)²ëT®`×$]I‡‘tùVøD‰'<’#éòìê(ñDwy+I¶]%žè® o%‰Ã>¾‹qÒ•ÄIâ$»º']Iœt¢89Çùɹd~r–¬­èsœŸœKæ'gÉÚŠ¾¨As»ØìŸ$q´©/U€ ¹]l öO’8ÊMÕWu>áö~È'QFüµ:Ÿp{¿ä“(#þŽ“/OÌò Z[‰âÐ'ÿTá8ùòÄ)H¢8ôI¯‚34·÷«ÁÊ]GÙ躯‚34·÷«ÁÊ]‡m×MšÝ1{¿IŽVnU€ ÙS°÷›Ä!» hnŸQ£ùIGÙƒz¨Íí3j4?‰âpiU€ ¹Ý9 ö“8l…m hnwNƒ}Æ$[a§ôsãDs{Zìi%q¸Þå*ýÜ8ÑÜž–{ZIδîÊLê׺ÁO%áÿëJ¢8l…ï•™ª_ë“€$ŠÃ8y(ýÜnÐìþÉDqˆäQéçvƒf÷OF€$ŠC$£2Ïëx4·bÀm>Iíý.v˜çu<šÛ?1à6Ÿ$ŽvLõ¤LXïš8$h½+Š£½_=U&¬wM´ÞÅaϸ˜rÉ ¹`$—|Ûµ˜rÉ ¹`$—|Û5+Ø5sq‚ØÅaÛ5W:°kæâ±+ŠÃ¶Ë«swyÉ»¢8\ïòÕ9Œ»|Å)H¢8D¢”®Txbª«H¢8AªJWUxâ”$QŽ»*¥7ê׺ÁAÉ ‰âp]¸ªô¦úµn0)H¢8ôÉFéõkÝà ä ‰âÐ'›J¿T¿Ö &%I‡m×&ÆÉ¦$N6(Nâ®Ã&ÆÉ¦$N60N¨º^"»^JØõ‚Øû“—È®—v½@v½%S^3H^1’×|²˜òšAòŠ‘¼æû“×'¯%qòŠâ$"yqòZ'¯0N’k‘\kˆäš¿r1åZc$×"¹æïƒÔïJoUxbªk Dq8~¯ô¶ Oœ€$ŠÃ±ð»êZŒ¤k!’.ìbJ×b$] ‘tù`— Vª>T×;@Åá¸k[+UOJ’({Æ­ê FÒˆ¤¬po«Î`$H:Á ÷Ÿ'Jâ䌊ø?1Nþ”ÄÉ'Á'‡Z…Ä®—©¦Á}I<ÔUHì:p™jÜ™ÄÑ)ÀÃN…eÔ—©¶²Ìš”Dq´ÞuØUaõÀeª­,³~RBâ¨í:4*@8pù]ä“(ŽØuhªáÀåwO¢8b—Yèñ¤•aÙzÆ$¾š=ø‡JU!Ò°ì=c_¥ð&š2{ŒdöÉÌÍ~Õïí6š2{ŒdöÉÌÏ~)mÔì¢Ov%>Ù!ŸPbvÑ'»Ÿì€O» .N ˆ“$ŽF+¦©Ãʼnq’ÄQÄ›½  —=hÀžV‡>ÙW‚á² ØÓJâÐ'­ ]†Í¹ëÂI|MÉ–ª«­ÂB—asîÀºp_ý]‡¨D…‘‘„Cvµ•Q‰QIø7d—ŽHt Ðì×èˆD— Ñ U×A†ËT3 S-‰£žÑªÁp™jdª%q'F†Ëï2 2‰£U"cªÁpù]äA&qè“£  —eÀ¨>‰£ls¬ÃeE0ªOâh¦eN*@0\.‘YQI²ëT†Ë%2 +*‰Cvu*@0\Ž8I­p›®  —c@N‡HÎÊ<„ —cÀ wGsFs®ÌsAØp8¬p'qÈ®Kì/%=ãõŒ´"a.±g¼”ôŒÔ3~Bb®‰¹B$&Ÿí±˜b®‰¹B$&Ÿí±Ø ˜kÁî\‡H®´½f®»sI<‡¤Ï é1’>ߟ,¦ô$=FÒçû“>²«/aWÙEHúÈ®¾„]½ˆ]‹)· ’FrËîŸ|˜rË ¹a$·<’[d×­„]7Ä®ØvÝ"»n%ìºAvm’)CÉ€‘ ù>~1eÈ 0’!ß3‘]C »Ä®ˆdˆìJØ5@v}Bb3H,F’¿ãÛAb1’ü‹Ä.[Â.‹ØG+6²Ë–°ËBv}Bâ2HFâDH\‰ÃHòw,v»\ »dʼn‹ìr%ìr]U4ÅÞ0{ƒHì-û‹)ö†‘ØDboÙµzsW6Ä —=hQœDqñ÷ʆ8á²-Š“(ãä¡Ì3ÙÎpÙƒd&q¸r÷¨Ì3ÙÎpÙƒd&qÈ®Qݺ0—=xCëÂQFüXݺ0—=xCëÂQúdTöŠ‘Ø+Db#ȱ²WŒÄ^!{Í…'ežÉv†Íœ’(Ù5Uæ™lgØìÁ ‰â]³ 鵆Í·/$qˆd®Bz­a³Áí I"ñqïKæñÎã ‰óx_2÷pOH¥ÉUe›ÄaϨ(MÖ¨‚,Û$žAr¬1’c ‘ëüZ½ªŽ5Fr¬!’c_«¯Ô)ìqy'´ÅWûxj»ªêv‚¸<ÈÚ Šâ辕¥FÃfÖ‘Û15à,vG»K†Í¬#·cjÀYì$ŽZáÓbÊsõÄ"gL“8êON‹)ÏeÔ‹œ1Mâh,|Ú©áÄíýž@œ$qtºé´«„·÷{q’ÄQœ,,NÜÞï ìý&qñ Ë„·÷{{¿I!éjº¨®« î¹Kâh,ÜÕtQ]WÜs—ÄѸk1¥Ûa$Ý"évÙõ®Å”n‡‘t;ˆ¤Ûeãd±#@èv÷Ü%qt’f±#@èv÷Ü%q”ѹ˜rÎ 9c$(‡;*¡$lÉ#9çϘvêžBÇE|ú“$Žò»º¦êžBÇE|ú“$#¾Q—#¹ÔÉ%?ZYL¹ÔÉ¥†H.ùVx©Ñ¡ãòV:0ZIâÐ'û*@踼•ŒV’8:cúaJ›AÒb$ù|áSÚ ’#Éç /v„„ß®-ÈNâIK ¿][/œÄ3H(âÛ’ˆoaÄ'$ñmIÄ·0â ‰V—Ð3r8Ô3Fq4‚ìtu =#—sA=c‡=ãA]‚O¸ œ òI‡>9T—à.ç‚|Å¡O %aw¦ ‡;‰£Ùog( »39ÜIÍ~Sú#ékˆ¤Ïß#±˜Ò×I_C$}þœVwŒcácÉXø( ãXøX2>JÆÂ˨);×'Î’8B²ŒšÂ‘±s]pâ,‰g„¡ã¹dT†£zZ‘8Çaù¹dTÆ£zª®]D²+A²ƒóB²‹Hv%HvIÜ œ¹ä!‰âhÜunªáÌ ÏIGã®e$†€—º`™ÄÑXxɆ!à¥.A&q4þ0å˜ArÄHò7Š˜rÌ 9b$ù;Õ–±F€pÙÌO’8Ê\ÆÂeW0?Iâ¨g¼44pº4ã®$ŽnQ¼44pº4ã®$ãd¯„ 7?¹ 8‰âh´²Œš„ 7?¹ 8‰âÈ'×šŽ _ë‚ÌI–½ÖtùZœ`Nâhme1%ly²HÐŽiG>YL [ž,´cšÄ¡Ovêú¤Ç•‹ø+`WG¿-{ÝU×'=®\Ä_»’8úmÙÅŽë3@®\Ä_Áü$‰£þd±ãú +ñW0?Iâ¨?YL±gŒÄž!›ÿ¥ÉÅ{ÆHì"±ù_Ð[j4“½²w£ÿH¢8Ê,Xj4“½²w£ÿH¢8B²Ì“«¯ N0'q´Â½Ì“«¯ N0'q4ÓZL±Fb;ˆÄvYv-¦Ø#±Db»¬O–64¤yÜê‚ œ$Ž,mhHó¸Õ8I<ƒ$t$,tDGýÉbJèHX$è‰$Žú“ÛÒŒ>;’Û ƒqWG­ðmiFŸÉm…Á¸+‰£VxXˆþLÿØ8ÙƒI͇…èÏô¿=˜ÄÑœqØ)û$úÀõñÄIGó“aWÙ'Ñ®· N’8Š“¡QÂÀ±kìJâ(N†¦ Ž]`WGqb—ṌjÙþœLâÈ'véžË¨–íOÀ)À$Ž|bz!é2H:Œ$ÿ«!¦t$F’ÿÕÅŽ0·]ÁÞo‡>éhóÖv{¿Iú¤‹qÒ•ÄIãä5šBqÒ•ÄIã$ù$,½ñHÎÉ9?îhéGrÆHÎù¶ëL »ö\°.œÄ!’3-ìÚsÁºpÏ ¡ˆ?—DüFü6šB.‰ø3ŒxBr¡ãIöRpº)‰Ãˆ¿Ðñ${)8Ý”ÄaÄ_”ë1×C$®— q=FâzˆÄåO•/5íµ` 2‰¯Ž»¨íºÒ"¢½¬A&q´J´˜œÁ"±ˆÄæï«_L Î`‘Ø Db/ŸØ>ƒ¤ÇHz’>ƒ¤ÇHìêcÄ÷%ßÃóŒQIŒø¾$â{ñ/É”[É #ÉßYðaÊ-ƒä†‘äï,X쇰í­à||Gg±;Â!l{+8ŸÄÑYìÅŠ“[IœÜ`œl£)'·’8¹Á8!Ÿ *,Ò[£8d×P…EzËÝ#1 ±p‡H¬²]Üí ±+ŠÃ¶ËV6°‹»}Á"vEqØv9eŸ)™–½³dt&q”í±ØaŸ)™–½³dt&q¸"qW.ø„»³À!ŸDq´´Øá‚O¸; òI‡}ü#"y” y@$T]ˆäQ‚ä‘’QÍaÿ„;é?£ý“(ãd¬æ°ÂôŸÑþI‡q2)û<o¹“þœôOâp…{ªìó`¼åNú[pÒ?‰ÃîI9…‘8‘8•½óy1Å)ŒÄ)ˆÄ©ìÏK–»³À‚“þIúd®ËÝY`ÁIÿ$}2«¹ÃHæ"™»lÎbÊÜa$s‘ÌùlÅ_c$¾†H|þìÜbН1_C$>vÎÕ´Díê‚î$ŽÖê]MKÔ®.XáNâ¨^Lq;ŒÄí ·“ q;ŒÄí ·Ë#ÙшÛìŸ$q'‹‚ÛìŸ$q'¦4$ FÒd3 >Li2HŒ$ÿËŋĮ¦„] `WBÒDv5%ìj »>!Ùgì1’½É>ƒd‘äÏÎ-v»ö%ìÚvűðb±k_®=dWT¢¦#™jˆdª³7À.¦L5F2ÕÉ”?;çZ5…8ár$&'QõŒ®­¦'\ŽÄ„â$ŠÃžQ«Áq9œÅN≮ÇåH8p;‰C$ 8.G‰$û“C 8.G‰$#Þ¨Á±™`¦•ÄÑ*‘3U€àØÌ0ÓJâhmÅU€à¸ýx‡Æ]Qíi¹c 8n?Þ¡qW‡HN*@pÜ.¶ûñI"9U‚ãv±ØOâIÙÕ•°«Cì¢ý×Evu%ìê »HÉYŽÛgt`¦•ÄÑOø¸s 8nŸÑ™V_EBÁx‰H.%H. Ýå.É¥É"¡òªÇí9°§•ÄáüäZŽÛ r`O+‰ÃùIOÛk®/ØKâh…Ûõ´½æú‚ݹ$#¾W¸Dânù>¾¯Ü #q7ˆÄÝòìºÑ6´»ìb'qˆäFÛÐîV°‹ÄsH† ’#òýÉbÊA2`$ù»Ñ;ˆ]C »È.B2Dv %ì »>!±$#±Ù“þ¦Ø ‹‘Øìäb±Ë–°ËBvÙeKØe»¾ yd<0þ.Û÷÷dÊ#ƒä‘<²+ÜÎ)÷ÜÌrÜsIö'®rÏÍ,ÇíÎ9°;—ÄaœÜ£Oî%>¹#ŸÄ‰{ôɽÄ'wà“4‚|Ĉ”DüEü–Ú®GŒøGIÄ?@ÄÿÞl’)cɈ‘Œùˆ_L3HFŒdÌ÷Œcd×X®±+"#»Æv0â«dÊ”A2a$S~Eb1eÊ ™0’)¿Þ5EvM%ìš »þP©È®©„]d×&™2gÌÉ,B2gÌÉœG2GvÍ%ìš»"’9²k.a× Ùõ ‰Ï ñ‰Ï S|‰ÇH|¾gô‘]¾„]²‹úxÙåKØå!»>!Q$ #Q"$*ƒDa$*DQj€S™I|µ¦8Q”àTAfAGÙƒ‹)'ª$NŒ“×h ʼn*‰ãDES¼ÆH¼†H<¿Vÿ¾‰¦x‘x ‘x_¹«"»ªvU]ÔýV‘]U »*È.rüF¹žÇ¿$Qeà¸Må^ªðÄ)H¢8wmÔ¤0’IA$“Êæp/¦L #™D2©ü¸ëE+Uª Ül™Ä¡O^ªa¥êI @Å¡OSÞ3HÞ1’÷ü ÷bÊ{É;Fòžo»^cœ¼–ÄÉ+Š“8ªqòZ'¯ NÒ¸ëMˣܗÄ!»Þªayâ”$Q²ë=úä½Ä'ï°í"v½GŸ¼—øäúDES¦-F2m!’i›ïãß«i‹‘L[ˆdÚf‘Ük5?Gî\¦Ú ÖV’8Br¯«ù¹8rç2Õf°¶’Ä’G­Æ'„‡dy+I…u5>!<8$#È[Iâh,¼ØáŸŒ‘CâÁü$‰£™Öb‡N0F‰ó“$‘ìTpÆÈåÜ=€O’8b׸«‚3F.çî|’ĻƽòÏaùÈeEy0ªOâèÔÆ¸¯üsX>rYQŒê“8Ú1[ Œ\VÔrî’8 m Œ\VÔrî’8 O5¥ÿMuAö`GH¦šÒÿ¦º {0‰£äbÊÔ`$S‘LMv•h1ej0’©H¦|nê´£ô¿iW=˜Ä!’¥ÿM»‚ìÁ$‘4IS‚¤!i"’¦I#E²Ï Ùc${’}É#ÉgÙ.vPœìKâdâä×ïw*ãd_'{'ïÉ”6ƒ¤ÅHò¦´$-F’Ïè\ì vµ%ìj»b÷b±«-aW+b×bŠÎ щÎÞþaŠÎ щÎδ>L1$#ÉßõaŠÉ 1I>£s©QŠ]'ÆITãD—ĉq’|²˜rÈ 9`$‡ìŽé‡)‡ ’FrÈGübÊ&ƒdƒ‘l²Ù¦l2H6É&›í±Ô(Eü¡$â0⣒ñ‡’ˆ?€ˆO>YL2HŒdÈGübÊA2`$ùLµ¥å¡ˆ7%o`Ä#Þ”D¼=ã'$Ç ’#FrÌž¤ù0å˜ArÄHŽùù‰‰ì2%ì2ˆ]Ÿ‘ $F2ä‘cÏx,é¨g¤uá¥F©g<–ôŒGØ3n’)§ ’F’¿EñÔSÉ #Éߢ¸Ø±.ŽLÜ©=X[Iâ?”¨Íï¿É'§jÿ\™¸S{°¶’Ä"yýýwM¡ˆ?•Dü E|ôÉ)Fü©$âO0âÉ']dWW®±+®­t‘]] »:È.šU€0qçO&pj#‰£ó'Ó¹ &îüÉNm$q´‹=]T€0qçO&p‹b‡=㥠&îüÉnQLâ°g¼ªaâΟLàÔF‡­ðµ &îüÉNm$q'½ &îÔÆn"Kâ0âû*@˜¸S¸‰,‰çÜ3Hî Ÿù¼­’)÷ ’;FÂg>oHÉMwjcçO’8d×­ &îÔÆΟ$qè“!·’9ãçŒñCœ3%sÆÎ«dŠÉ 1‰É ‡8îJÆ]w½$Sl‰ÅH¬È'6ƒÄb$Vä“GÉ#yˆ<2HÉ#ÄÆù‰-™ŸXÑìׯù‰-™ŸXÑìw1Åe8ŒÄåۮŗAâ0’ü=w‹'®$NŠ“ˆÄÅ8q%qâ`œ|BrÏ ¹c$ùß`þ0åžArÇHî$þ‘øDâÙ{îSü#ñˆÄ?²»ØKR/éã﨧ß`^j”úø{I‡}üŸdŠË qIþfËS\‰ÃHÿˆ­ð£¤~ˆZáGl…%­ðCÔ /¦Œ$#F2fÏǘ2fŒɘ“Å”*ƒ¤ÂHª|+¼˜ReTI•g×G+cÉheD£•ˆdŒ£•±d´2ÂÑJBâo‰¿A$þ&Aâo‰¿A$þ– O1N¦’8™PœÄ¶kŠq2•ÄÉã„|2«aâN7Mà„@‡;As LÜé¦ œHâpŸQQ:ù¤ ²Ñ“8l»¥“Oª =‰Ã¶KŶK•´] µ]‘]*¶]ª¤íR¢¶«ŠmWUÒvU°í¢…Î*¶]UIÛUÁ¶ë5™¢2HF¢ò>©èØDa$Jâßa$¾ƒH|'Aâ;ŒÄw‰Ïß;mâ.ö¦d{ƒv±ãXxw±7%»Ø¸‹ý'™²Í Ùb$Û|¶Ç†ãy$[Œd›o…·tfÅàüIš$ó»¶tfÅàüIš$3 ¶1Ûc[’í±EÙ±gÜÆlmI¶Çd{D$s­ÌsdfìŸ$q´§5וyn€Ììïbƒý“$ŽZáy‘ìJìDHvÉ®É"!% f.7uwt&q'sS3—›:ƒ;:“8d×^3—Ñ9ƒÜÔ$Žf¿ó¾ f.£s¹©IÍ~çV3—=8ƒŒÎ$Žzƹ­„™ËœAFgG=ã¬éç f]ðkI›5ýœÁ¬ ~ !‰£þäÔ.ƒ¤ÃHºìo|˜ÒetI—͹[j4@˜¹LµŒV’8ŒøC Ì\¦Ú F+IFübŠÉ 1I~OëÓAb0’üžÖbʼn)‰ƒâ„n_Xì 81%qbெ¼'SŽ$GŒä˜½•÷ÔcÉ#Éß»ØAì:–°ëÙEHŽ‘]Çv!»Þ’)§ ’Frʳk1å”ArÂHNyv"»N%ì:výúMHN‘]§v»6¯ÉŸAâ1Ÿ]ƒü0ÅgxŒÄçûøŽ~ègî ~'(‰£ü®¥_ ?|2w¿”ÄQ~×b õŒ]IÏØ¡ž1Žê»Ø3v%=c{Fb×9"9— 9Ã>ž‚ñ‘œKœ!rüE3—s7£™V‡ýÉ¥ f.çnF3­(‘\U€0s9w3ȹKâpT­„™Ë¹›AÎ]‡ß«aæ2Õfs—ÄÑ=s_3—©6ƒœ»$G·è“[‰OnÈ'´?ߢOn%>¹AŸPÄÊ?'‹3—KäÁ©$Û®¡òÏÉâÌåypj#‰C$V3—3ƒ]ì$ç'¶ f.g»ØI²ËÑå³+¸Û#‰C$Ž.ç˜]ÁÝI"¹«pYÁÌåHŒˆ]QíŸÌ÷*\V0s9#bW‡ìòÊ<gîÆ>N•'ñŸJÔï-õ'¾2ÏÅÇ™»±Ï€SåI ‰|M'_Œ»’8b—¯iàäë‚qWGìZLñ;ŒÄï ¿ËÞ·²˜âw‰ßA$~—íã;¿+ø-À$‘ìèÇüü®à·“xI“AÒ`$Mž]‹)MIƒ‘4yv5‘]M »È.BÒDv5%ìj »>!Ùgì1’}v½ëÔ}É#Éß·²ØAìÚ—°kØ‘ì#»ö%ìÚCv}BÒf´I›Õ˜Òf´I›Õ/v»Úvµˆ]IÙÕ–°«…ìú„ä”ArÂHøõ®÷×dÊ)ƒä„‘œ²ûñ^ÓÁ^Ü/œÄaœhº Øë‚û…“8ŒMé,”í‘ÄÑý]‹)!]ƒE‚²=’8ZMõºV× nåMâ0Nt­®?ÜÊ›Äaœ xn­Þƒ]‡${FSž[«÷`×!‰Ãžñ¨Ï­p{°VŸÄ¡OŽU€à¹nÖê“8ôÉIž[ö`…;‰£•»¥å <·.ìÁ w‡#ÈŽÒÿ|W=˜ÄÑÚʯ!±ËwÙƒIÍS(â»’ˆïDßňïJ"¾EüY…ôZÏžÅFsÆ(Žr‰ü¹ 鵞=‹æŒQíÇû‹òÏÅGÏ­ {pþ$‰Ã8¹Tþ¹øè¹uaΟ$q'=¥“û¾ =‰ÃV¸§trßd£'qØ ß(Üß ²Ñ“8ôÉÒÉý­ =‰CŸÜ”0?@$>¿¹˜âŒÄ‰Ï¯A.v»†v ]4¸"»†v "v-¦Ø ‹‘Øl.ч)6ƒÄb$ùß[ì vÙvYÈ.Bb#»l »,`×$.ƒÄa$.'‹).ƒÄa$.Ï.ÙåJØå »¨w‘]®„]°+õñ‹)÷ ’;FrÏî}˜rÏ ¹c$÷ü¸ëÙu/a×±+Ž ï‘]÷vÝ!»Þ’) ’FòÈ·Âw:¸Ë#y`$|œ<踫œ–Mâ]:îê§e“8d×#ÆÉ£$N(NbÛõˆqò(‰“ŒòɨÂE+ž=™‰úø(wÆ*\´âÙ“™¨âpÜ5©Ásç=AFqÈ®© Ø¡ÂL¶å´ÿyyÿ½Ù¬hþã»øwíQü›ö?þ¼ÿþCØßÖµ?ÛMõç‡vúÇwñoÚ“8nQÛã-×D´°‰heM„ J X–!ˆ¦(°Öµ ,‹Ñ. ,N{ ,‹Ó. ,F{ ,‹Ñ. ,F{ ,‹Ñ. ¬UíŸËÀÀZ×.¬.hï¸Àê``u¤½+¦qÚã8ë»ö¯Ã4N»p˜Ö^‚ö ‡ý±_Hû¥;£=a¿@ìŒv)ökÐ~å°_!ö+i¿ag´'ìWˆÑ.Å~ ÚoöÄ~#í·"ìŒö„ý±3Ú¥ØïAûëãî°»“ö{Q·®ýSw‡}£]ÚÇqÚcw‡}§]ØÇ1ÚSw‡}£]ÚÇ1ÚSw‡}£]ÚÇ­jÿÜÇÝa·®]ÜÇAûȱn¬‹â==ü'ÖU¬öȺ°®bµ‹X·á´'Ö€uN»Œu/ëÚ?û}~a´‹ýî‚vǵó¶óŽ´»¢vžÑžÚyÛyF»´·A»åÚy ÛyKÚmQ;¿®ýSÄYØÎ3Ú¥í<§=Fœ…í<§]ØÎ3ÚSÄYØÎ3Ú¥í<£=µó¶óŒvi;¿ªýs¼[ØÎ¯k—Æ»þçù^ÿÃÄ»þÅ;‰ãE}JΜ’3TÄ{zøo §=¶ ßµmT8íÂFE‡îWß9ìwˆý.ªà0¦×ÜÌDÙ ‰g”„ɲ6œ•‘’ðO}├ ’“HI˜þin«á$–Ä3JB¤¹žTÞ”Ä3J† dà” PÉ RÖñõƒé™ôI¼§‡ÿ6dµS×òCû—± «]6ä´Ç®å»ö¯cAN»p,¸®ýSßðUû÷± £]Ü7LAûÄ‘k‚äšHûTÔl3ÚS³=Áf›Ñ.m¶ÃèYöbEºlÍ ù´…E]¿¶EÅiea`qÚ…ÅhOea`1Ú¥µªýs`YXëÚÅåƒvÏ‘ËCryÒî‹‹ÑžËÃÀb´K+|[Wö b¯H{U„Ñž°W;£]Š}´o8ìˆ}#jT¶AÉ–S²…J¶q[TÁŒöTÁ[XÁŒvaêçûCÍ`?Ô;‰ã >„Œƒ—°p€ $ÞÓë`N{¬¡ïÚ¿V0§]ZÁMÐÞp؈½‘T° ¦™Ó-šêI¼7»’n‘ÕNýÚí_ºEV»¬[ä´Ç~í»ö¯Ý"§]Ö-*@sñ£aüxOÿ±í`´§¶£†m£]Hm¸iŽu d]C5ß±ŽÓY×@ÖqÚ…¬c´'Ö5uŒvá`l]û§ÁØWíßcŒvé`Ììƒö=ç÷=ôûž´ï‹üÎi~ßC¿sÚ…~g´'¿ï¡ßíR¿¯jÿì÷=ôûºv±ßç }æü>C¿Ï¤}.ò;§=ú}†~ç´ ýÎhO~Ÿ¡ßíR¿¯jÿì÷ú}]»ØïaÚb¸É—“/Ï a·âÈ¥ ¹ATEäâ´Gr)H.N»\ŒöD.ÉÅh—’kUûgr)H®uíbr…¡‡áP H¼7E(N{8€â´KP!aÔpù¦æ›’xOÿ;£=a?@ìŒv)ö>hï9ì=ÄÞ“ö¾;£=aï!vF»{X3–Ãn!vZK3¶;£=a·;£]Š=ìÒn“ÇÀMïMQº§=a‡éœv)ö°©`¸Ó!ž1¢Ó!&ìnûÔÀíSïͽ¨‚í©‚ï°‚íÒ ß6ÜR©K¥$ž©à°«m¸½y÷æI+9†åÈu‹GØ-Eër§°äqâÖåNp]î$:HÔ…î¡;09BÝå‘xßJr„íiXùMû·!N»0GˆÕNãÂÚ¿ä±Úe9Bœö8.ü®ýkާ]˜#ÄiI>ßµÍâ´ s„ÖµÔ~Õþ=GˆÑ.Ôv!2:n=¶ƒë±$ÞwE뱬öÈ:¸Ëj—Mf8í‰up=–Ó.œÌ¬kÿì÷šÌ0ÚÅ~?íG¦A펨A%ñžþ[ßËiçwí_û^N»°ïíšRÇ­ vpUÄû®hUÕ9WYíBÎ3Úç᪠§]ÊùUíŸ9WíRÎ_ÂPãÂT.p¤Bâý¥hÏi¤½À <§]ÊùpÌ´ãNÇwðt|':ß…ãíw:¾ƒ§ã;ÑéøshïÎÜP𠇂gÑPð¶Î܆Ñn‘x.Ú0bµSŒŸá†«]ÖDpÚcŒŸá†§]ØD¬kÿÔDœá†£]ÜD© ·~{à$Þ_š¢&‚Ñžšˆ6Œvaq êuÏ`¿îvï¯ûìœöhüwí_±sÚ…Ø{j]¹®¡‡]C/šÄÞ‚[n¹n\7Q‚ÅL8$D2ˆ Á”C2@$ƒ‰ -µåz zïmQ.§=ÊÂ\N»6°Ør±ha,’x¦‚Ã?-—oa>>‰÷öTTÁŒöTÁ'XÁŒvi‡Ó–;ólá™gÏTp8{a¹£Ý ñÞ*ç´§ †‡Ê9íÒ ëΖ[=·põÜŠŽHذöj¹d WI¼·E+ÈœöTÁp™Ó.­à°Æn¹%z —è­h‰Þ†{˰ð˜‰c%.üÓqíƒí r!bð¼¼ ëîÈLÜMH¼wÇ’i«Æý?´™6°ÚeÓN{÷×þuÚÀiNÖµš6|Õþ}ÚÀh—N\59nÐåà ‹Ä{W´²Ài ‰ƒ+ œva;äÂÙ?ÇÝÓä ä<Ý×ãLç9í‘óržÓ.ä<£=qÞ@Î3Ú¥œ_Õþ™ór~]»˜óáŽ!ÇÝ”äàMI$Þ»¢›’8í‰óð¦$N»”óatâ¸Áƒƒ'ܸ°ýê¸Ý[woh÷Ö…©˜ãfrÎäH¼wE œöäE¸àÁi—z1¬7:n¹ÒÁåJï]Ñ•¬œö„^ÉÊi—bƒzÇMMœš8Ñ©r÷”¼qJÞ ’7‘’× ä•Sò •¼Š”„O8.]ÃÁt 'J×p!ýÔqÙ«f¯:Qöª ÍwNÍÁsjNtNͽ%w¨ä]¤ä%(yᔼ@%/%÷0&ºs#»;Ù‘x/ÙqÚcßáÈŽÓ.l#ưt5r¹#Ì ñ~,Ê `µÓÐl„¹¬vÙÈŽÓ‡f#Ì à´ GvëÚ?ìF˜Àh—ŽìưÙ7r*ðBeïÇ¢ •íŸX/Tæ´ ó Xí‘uðBeV»,ŠÓžX/Tæ´ ó 8í1‘i„*sÚ…yPëÚ?s^¨Ìhs>´cͱ®†mµ´c]ÔÖqÚ#ëjØÖqÚ…m£=±®†m£]ÚÖ­jÿì÷¶uëÚÅ~;%#·Ñ2ÂïÇ¢MON{ì G¸éÉiöïS˜9LÜüg‚óï§¢ù§=?Áù§]Š=¬óM\þÛóßH¼ŸŠòß8í ;Ìã´K±‡å‡‰[½˜àêÅ$Z½˜Â qâ&˜œ`’x?í}qÚSý/N»´‚ÃY›‰;14ÁC$ž©àðωÛ5™à® ‰÷SÑî-§=U0ܽå´K+8¬mMÜÒØ—ÆH¼ŸŠ.ä´'ìðÒAN»{¸=eâà0$ž!W˜8L\îÅs/&Q’mNÜ¢ÊU&Ѣʆ37Ÿá~åÃÌïÌU× «kU×:ù™ªÌp¨2‹rBæ0zž¹<Ñæ‰Î¢<Ñ9\²8sw4ÎðŽFïç¢à´Çø›á pÚ…á;‡ä™Û‡žá>ô,Ú‡žÃÇ™»|n†—Ï‘x?]>Çj§éÈ /ŸcµËf3œö8™áåsœválf]û§ÙÌ /Ÿc´Kg3sÎܨv†£Zïç¢Q-§=ÕrÚ¥î;Žóäü@Ú‡"ÎsÚ#çÈyN»óŒöÄùržÑ.åüªöÏœ ç×µ‹9²§fî74æ;ô;eaÍ÷"¿sÚ£ßïÐïœv¡ßíÉïwèwF»Ôï«Ú?ûýý¾®]êwÆ3žy8"ñÞ­ÜpÚccåáÊ §]ØÖùÐBz®÷°'ñÞµóœö„¶óœv)ö0ìòÜàÑÃÁ#‰÷¾hðÈiOØáà‘Ó.Å"Åsù®æ»zÑ…ó>$mz.çÓÜOï}ÑÕМöTÁðjhN»¨‚/Çs˜ÒïWh:•ªB©jµÔ`ì³húc9wý ˆs¿f·þSo?Å/œö«HüƉßEÆœñN¤ ¯ÿjÃqî‚ôõÛʳڽHœ¹MxýÜâÜU®ë—€þÔ^sâÄqÜí{ë׳ýWœx-ÁÎ]×´~—ÑOqˉ‹XÇÝë²~ÑÂqîXþú™õŸâ\Í_DUÇ~\?øCœ;D·~šé‡8w$gý(ÉOq®æW“³ˆsiÌëy®?Å;N\Tu\:ÞzÎq.cc}[û§x͉ï%Ú¹½´õ¦ŸâWNü$gÖÃ×WÚ~ˆsK&ëë ?ÅN\ÔÇqùõQîOq®ƒöëÔîŸûuÿ1ʸn {UV‡-ßKiA©JTJív’RM+*%ÒØˆ0¶Q)‘õ­ÄúJTj#*õ"*õ**õ&*ÆØK}̹>î[{tÇ£Ûê»ÎÕœoÿë_p)¶ÇÚ°Ëí±´¿P¨=V˜ß¨=úúHõ…àê !Ô¿òÖkwBû»1°Ç KT›ØCý»{¬Ã·§:ŽÿîkJ¢û õ÷1´ÇØS{d°½>z_ƒkícûc¿“õyÌíýNÖ÷±þ…Ïd}]}Áµž}æíój×]lïÆÚÄg6¿µë.§öØþ·´¿PZw µÇúÇ>sü}¬_ì['}¨,líÑUXhƒBjµ;!5Xf ÖúZÏB©ìC˜ïcý»i«ÿ›hk¾=¶|}Ü[×÷F˜½}ÅÎÞ íÝØÞmÓòáäçq¯/0zWç¸4¦–6¨¥ñ¬´Ï,¡ý…Üþn#W9Æ,m•}i«„I[³´Õ®§­lncÏÔž‰=ûöì6מ{ö{{Ž‘='öÌÞI ›Ø;™µ•}}¦­ý?QÃR`ÿÚß¡Èþ¿ Hñž=öÌúã±çÖŸÙ;ìoÖ·ÀÆ-„ö~ˆì™ýÍÛX…Âþf ì9±ç:£%²þGö7›£Äúöšyö\Ú3ã@r­?U^ÞÏlÜãCò¬]ØsësŠ Ëæ%E†eœLŒ?™q2³¾eÆLž=ów2{nß›=ò¾å÷üþù¯ÿúÿý×{ýsï•ûwõ©þ{nññ]qÎ?üÃ={øÇ8½EÏÀÞúÑùǧþà„ÚÇ€ú} ¸…½õó€]Q[w¾Áã§îxªÙ¶§úwŸ1²ÖS…§+ð\áÙ§-7ø^xG¼xœO#´ÿèœÆÑûãK¾OÓ/y<¯ðàø÷i>É·q µõ`lýùѦxŒÇ8ÆƱÿã÷7•¨‘½õ£7b¦Xj êcô±€>¾dɳ·~ôF}|6xÎGs}ìà}üþ&qÏØ[?z#¶>îÛÑÇï“ìcÿïã÷7Ùˆn‰½õ£7b›ëÝÕ>:ÔG7è£}ŒÏÄúè~ôFL}|í¾}<žDÅÿp1²·~ôFl}tÇ\O²Ïõñ›ÖÇ_óþxëGodÄÇJgW GRÅÅéë,¾öfÇ'z4 ~0 ~0 ™½õ£7b›†ŽO Á¨?¶ý·7+<ú?”Òñ$G(b¥tü¦Ð^Ø[?z#¶JÇt<É>&¼¿i}Ì‘½õ£7bìãµsôß¿+­þë|É>³æz8·B\>̱ãi.Lnk­çÞ:žä4äAç3¡×âØ[?z#¶i(U§¤ÓÊ@§ ÓÜËæsì­½ckîx²|Ó¨…ê'úD|"ÚÛìÏäÙ[?z#6µ]ªÄ$±e ±K¬Kì­½“©ã·c'ÑGñëãñ›ªùvöÖÞˆ‰*~óµõÑúè¡©C™½õ£7bëã±D×'ÙGÂs}ü¦ŽcdoýèØúŽEòx2ì$CUJa;àÇÓTqúgÛÇw0íx#$~`#tü¦Í¢ì­½Ó…º×”mŸøº ÇÒrÁ;+þÕ¼j>>·ÏÉv÷¢^]•Ÿ[È ¼[ŒÚ·ïç‘ÿýAÂ÷ØŸüás®©“ö4ò¾“ŸýIš¿åEÿÔ†îÜ´éÌ€7k5ÖõçL¯mÖã{züèL§À;íêÒ3o½þ=fŸ¨t^Âû/i}T:/áʗąΗûI P`•oW¤ ¬7ÊåKQfÞË¥w{Ðåòé4¸ÜÂ{}ËTÍ´ÓÄu Þ[wè¦äs󮉟*qO'‡îJ€ÄÏU­½ ~Ï"ávñóO/á+â¸Â`DZR¾ý7i‘›¿¯ ]Ç͸í^ch]nç]¬Ë \£àTé7¸¢ô£us¥?ÔˆuÅêÉŸ»A#6­}I#6ø%Ø,•K¬«ðØ)>ÊÒQÂ…ÞL9êªrßI'Àº1i±¥R"T•ʼ_±T²Tž.ç9iýîô ×ôþn@$½o¬kðž›n«Êª£MõêŸà7_xO¿„p«}|:7¯ÃAƒãó½Žu›'eè$ëH=-·š×¿?H¸²Ø{ÝéÅŒˆ—¤Í*iAë‚´Ÿÿ„bÒ íˈv*i)¶õ½ÁÒii‘´' ¨Á%i³…´Ë 4×6lè iÏt|R¦¬À PV%\9R Ž/QÈ \lýE¨C%¼÷D<¦ïIK>[Hû§ÓIû2ƒ¾ò›¤u_ÎI[á×4í¿¨i+üŠUɆάi#í üš¦­p¨i{Ò&mèiK¶ö€kÜDÖjîácnƈ¬€˜7#Ûñ4¸àæ¸ùâ|Tà7Cþr³·=³A\Q»aj{2¸àfÜdûa6tFxrs5xwFûZ ³îærAƒ÷zý„ŒÇ¬À{•æ·ªÒz#§ Z‡c´á;žïiS÷Ù‚6‡ —̱^ŽŒ±8Úö†é"ÞÛöF´ím…bŒ9 ïÐØÆ“ðz 7žÏ-ƒh‹ÇSi]ps#?µá#ÚxþŠïã›×÷}ïáŸÌ4ÄÍd8‘['á‚›‡êé¹Éõfƒ c, Ýmlz“ÁûsúÃ!$4"©pû‰gã&º+ÔNË'+¿´“ð~;ñË2=ñdpûæXë¼ØNPF~ĨÀÍ'+ü°8±“•ä0µ×OVö&ü ®1‘ÖI¸Æ`HZ .là&ÝãæÇMTàâ4~ÛÉÀMºÇMZç¦Wà ÜtbÞ'ÜLËj÷Á¶‘ .Î_¶ï&v¨vT»úqÉHëj7´-4ƒ÷j÷%sj§{j7¹[ÔNHíRþÛ)ÔV†îµÓÀNsµ 庑ß4¸ð„‡ê O s~]»]K×ã÷ÐpÌyèH÷U÷tÌJëvÎGµõkœ¿°ÿ×àšç“Òù‹¤½uPÎæýÊAyƒ¢£0i3Á3G¿?UÖÅ×®LÂ{Öż”šªdðŽu{#mî=ì^»ˆÍfà ::R¾}x• ÞsÓtV:eäÑÞMñ„˳ApþâÒž”¡“á¦NÝ»ñgƒ ÷O‡ªÌYçëáCà áÂë”Ñ–ßG¥õžu)!ÚpÎ{@›—¸f½œßö2¸Œ­wúI7g¿°Â&.ò3ž.ÏçÝ£%2”ßoþÔ}ÑçÝmÇŸVÁY¼-§}¯¹)»97å™j|ø^ã;•6 §oÙ~{8²wŽ'¡.Ä,BûøM9§§ì­½¡ÍR3Y‰›²¿Æ=ïcDµD^{ºÂÞúÑ1E‘ï0U8>÷òí#N.9|Bq“Þ¡ã“›ÂÕTîÂÞúѱ}â^y¾[y#ýæxŸ(~ø‡„kñð)²·~ôFLŸX\9”¨+6aâ•LÅ-Tø0{§&[”šÇW¬y|mí}Ã}…[ ¡l­–Á±lˆd§ÒàY÷}ŒôÐ^Ó]K>ÈuŽJ|ÀÚ}ýB«œ§æÆgpa§ï· ®HÆ…A›CàOœo;{)P4¸1@žr¸9ªô4ïÈÏë]È3g‡_ð+0¸ÈÍÚ@X‚Þyaç,œ‡v;Y8_£ÈÍœÏÕÌà"â9›8²®^Và|æ¤e]8ßð/qd6Ç€àüIUÎ3 {6Sñ~QÏ£LÃUºyæÿI‹RŸä ¤¥©q"|³Ä¬ Z6NZå;¿fœtK¸çÖݳ.hn]t±Ì¾¦ªŸàvUé”Ö•p÷˜ä·r¸1ÿ×Õ#áÒƒëÔ<{0tÖ9µõO`Líe䑘>¦åÃâ—F,~‘ÚtËpnðuvŒ©MÚ £é¾¦À ×P¡N„!>ïxkˆþÙ©­  =`úífVàš<&¡‘œu a»ïœ8ß¡›‰L ”7¯î$Ü.2‘‹LK¸$2-IàÒjPá„éE¦†é›WƒÍy~!³…Áí«Úyëy¯vÀàb¯³e59ƒÕ Jø˜Ú´nèPiÔ¦ †Î£q“î:D·Ü( gÈoeð¾Ži­…!ã+œïÀ•}¾0¸q5à±? .>iC[ʬÀEÀg1P›Ð™#LTp!DÀñߎ®*üs;– Z•Œ÷–RÂ$ƒ”Ö/JÆzÞo£ö²=sVúëöÌIéß²gÙ3V¥ì«Ò¯É5¥’­Jžô8TúÈž1*}dÏ•þ¿¨ô+ë®)ýf %Ã/Jƃ‚·KF«ÃàW%Ãß°ô<öìp&Éðªdü–g°H†îm|zÿ=šH†îmd»Û ÆP1¸âmtp5ðK»[Fsù%åÛÇÔö8¾ï —ÜÄzn§¶oÜôØÒ?BbGÔö÷,}Ï¥é±KÓ雨·Aã¸1¾´.Ü;D:+%\èö8nt8¤ö µ‹Ó¦×Ú©ùi—•®…2øŠ¾H¸ mª‡G#Òb#œ¦áÞ“¶˜H •‡¡3(HÇá×HKË~øVS„ÃûÌ–²ÏmxmøºY*Ûð”-œG6¼–Êi5ð̆IF]ðz8±Ÿd‘ð>(­+§§uŽ “Õ9²TL>I6tV7þSàÆíiÇŽuK¥‹3¸"”cP”Öei ²H°TFuO6ßÇÔ~ßt(>s¦ni(›—i E–Ô½ÁL]\(²EÉp8Œ”ìÛî1eð †:¥Z•*ä[&ƒã.\‡ªÁ•:Tùá‹„Kó’>Û½¨ËÔ• ^Î £ÌÙ1­:ªF¹¹;NE¿V7ûV¦îæÖ#¸¢®Ç€nŒ:Õ͆•a¿œ,ìç•Ö ûmÊÈ_¬›2þ†è´n¶[$mW7ÛÝÒǨĚQ£kF}Œ¼F}Œ¼F} NO­ú–X³éãvzzIƒkV}¼züÙéãVb R›6ZBßj ƒ›­hŠÕßÇàWôñ .ªæGdC>ê€Ã¥ÀŠ™Nº^ÜÜ‘ÎàÖêgÈJëæÀÂàŠÎȧ¢Â»ÛŸ^­ï LŒ´o7Ÿì¿Ë÷ðÏmê˜ÚË®“ØêÝ0¸Rx!=&q· ®€C>¯ÀÊ­+×À@m`©0ÇÍÚ´Hígô5!—è­ ¬æª‘V™w%´efj0¸Üþ†@ÏH»,žN¤…Áâq^9ÁÒF ¨“Òù‹¤mN°˜ŒÕùàV‹:‡·ÚIW¯†•óÁ‡]'˜98ýápx{¶Î9mÌêƒ/¬>£ö²9ä™9 ãæ] À@mx·ªm͘šCã5ã–9çźf¬Þ' àö5#Õ\ OQ7ÂÇ’£YŽD“±d Âvé1‰»ep»Ò'Ùù‰d¤uÇM;þdpáÒÜ .ÍÑ,;òÃG~I2¬D" OŽ¿¤ôŽfÙæ~Ÿ ;¿—9µÓêU€®œ±&Äù ÐE n 9Áûºsí­Û+$X&ÉùÖP)ZŠëàÛö4 YŽ®"Ü€8l'%¥ó—D&ÒrÍpnÇÆÁ©ì<Ȇï¸J\îÀ7½LÒSmÝsÌöÖ‘ÜÌ̹Jãò¡.øvkhäKÈο%#–ŒåD ÏàJ±l Â’/1I üÊ".ï NÞÆk˜¼NqÓºY$^Áõ½õɆ°ö*¦t:fón?ÐZW¶Ðô˜ÄÃ3¸r& œŸf«Š­E欫aH烛cð…Õ +¿¸TøµÕ^j[ V/pûéB¦¢ÀÅš¢AdP®¬)‚Ѧ÷'¥yÞƒËÓ…ãÇç÷ %ë}k«ªwCìn?ímõÇ\Qçù®H“ð-œÌe«œOó Žâ \ì·,»2tòÃÍE†·¶”£e‚Mœ™ó)y~¡P$ƒËppé=_&mÌûá=‹ÖßÔÞQi=ï!µSÁÕ²„Ë»üj`YìwºQÂ2²¿°#åß.IAæ%—ø…jH Ù¡Õ9’pk°—õ¦}{—`Ôì¯D›¡ó°®F’†Yðë\vþEí×3¢v@Ôv[šê2¸05®Uš8ºL|P«”Á¡Öj×åÛååódWG¦Æ¶;ÜMLÑ+ð…@'áR°2ÌÐ& ׂ†j+ißnÍÐ>餀KZ»£RªΣۦ÷.pqí°˜ÁíeÜ#'-Ìh*Õñ-•\JåÛƒä1¹ëŠÁqyßÁbÂZ·–q¤Â¯q~µ&5€ËJ©”“á˜ID®÷…Z®Ü®å!ë$\¡ G-‡SëÏ* þ‘Çõ­H™w”à-éèCÿå&AnÞºå’Á¯ÜrÉán¹dð+·\r¸õ–KâÓ{ë–K—»‘ù-— Žo¹|½„çlŽ_}þ.eý¼GÿŒÞÏ{ØÁMÎ!3­ài6ïŠ4H¸u{Ú <0uû42ŒÃ{­@ à;íep¡ò©œH ì$v)nOˆÅ·Ù‘Q±žæ6êVgÓÚ û³[w1½^B­óƒp‰©Ö- ޵˜P)ZRà½7¸–Ö¯1¸’~öш¡Èµ¨‡¿GžT„ Å!J+±Æàò¨Žž3o0ƒ+Gu@éïu]ãp«7ØE­óöŒÍ¨u^zƒa)ÚJ.v8Eó¹ì~å-ÀâoÁˆIu>ïBÔi‰5>ònkcpÅlùzD3¬ÀjK˜ŒÖkK¸Íqn.;}©9/†Ër¢Z²¾ÙÚ'¸€Ç$ùà p¬iœW†Îºªžç^D˜ó>[U9\À>ÕÚaÃw匊jpÅ"wÉÀ÷nÉ„!Y$ƒL’±¬t^3P°’qÍ@ÁJÆ5+׌ZàýÚš/*²­ Xɺf\¸iˆ”Ö/® ´¾uÍ¥õ­kV²®µÔÖ@2èB©­æÖ nr­2L õúãï-¸þ™µ×/*: 0-—/p{m·Þ§ø¤yŠO ìÞñó´Ð€/*BwpñÿR¾<à›†\8öXœ_×ήY*îr­|yÜ!k¸öˆóóÃq|y-ÿvã…Í<`šÃ¡:DZ§ nç|,ÊÈ_)Àá8šàRFØÌ"hfiCg½‚»s9묡Rää·Ï$c½ÐWáê–Ï(ó ®¬qj'Ì}Ë\&¸qÑ Öò­Ð,K†Ã¡`áDò“÷EF_(Ãàö›Ð“öíW|Båö)çÃz ¯ØBWÜ^²Ÿ±.¸;7°pxñ$⫊òívãž”o¿wËàW’w8¼çü2â<)pÄy­’„+%IÃcrƒÛï&rYc½zÀ.àoÉKÆz­ÒÂ%ƒ.HÆ.á%ã–C(Ü*‹ÎártÜl'QΤÀ˜ÚIWU÷ø'I¸^û˜äH38Ì‘mºƒ[¯«±í>“ŒeÒyÍX¿ªñ´fÀ«m’³×lkƇ)ß~qÍÀµ×MkF…_[3¦î¨ñšo®6­üâšq¡tû.àSÉXÞA´øX_‘ /áW%ÃßZ3`±^Ûšq§d ƒ/Ôú%Rà×Ö ¸yî (H­ +ýõ’1^ÂÇÔŽ¦È…c]“ÛÞ$á ·Þ‘ÒzOmGõ ›¸¸©ðî¬`ŸßJÀáfÉh¡l nß³én~ð,ªW&Î,¯î(ð+^§8 {IJƒ+’1MÉ`pëÄioÍH+je»ÃÓ"ƒÒÞõáu‘I5ÂŽÁWÊcï~éDšÃÍ"£}»§GžÌàèèžÈ¬;j½—w"ødàü 0Æô¢HW8_z|ºÇyT‚˜ê½LγÈJ³äçyd¥ñ^¦GÖàöUfo"ÃR×+Ê”jºA’Ã¯ì ØÐõz¾*êþ¬9&åÛEe БXVZ—…¯çדÓúv•~Y£ 5ïHÙ¦ŽÇuZY—Ú¾ˆf.°.J¸`¬¸3ëèÎ9.ƒ_cݲ¯&·›\†(=Kù©¶.ï iÒ€#jáÍ¡Ü[Â"j‡Ü\ö–œ5âòMug¸îl9iDèl±iDtSQ#Þò–°¡»¦a­›F„Åzlë1iÄ™GQc•Ðæ½ÁE¾[å ‹-ip‘$€Î2]n¶'ƒ÷äÚ6ý,Ó1‘aðÎö$Âg™JëWr 8\‡˜ç 3ø•ªj|âdnIQË.’psæÑ3Èο¹™#âfÕvÈW‚c(—$Ù@ſ׼ï Ü|PΨÍ:ßécPÔip­ ÕTàV_À“mæ‹¡$‰ÐuµúÙéÛIg‡ŒÔݕֵ’—Ó}QƒËkÂóüh¤ ŠõÌ/‘cpí†Ï/çˆ9|>~÷Ãl;W8Ÿ Ç“xÇyvóáˆótó´Îù-*p;烷rþé³Ú·›9¯u^Ü hî.Û :Ý8á80 øŒÚÕwÞS;j»Ä¹ ãž6P·<_ ÖãžNÔn±?—¨ Rë!µTø‚kWÛ©½'§}»™ÚZça5JQ{Ù ~¥DƒKûØ¢ÃÔÑ4 ÖkpAÚ’^&Ì®Àá­œ®XZ·_zÏhpj}6Ø anƒ(û-eäûÍ—Kàúé¼6q²Ôc’ƒËàØÁX\»&X†Gi}¡˜¥ù_jLíõíÀôq@î¨zÉòhËßàP°ÆÔ^.¨}¦öjAmÜ Å« õ]:WC‡._Æà’\óÛ¦8\äëXj hàîqκ7uáK¥tŽ—páh '(‡gÕ3b]š{îG1­_‘æ4xO®)ÏiÓnåèã÷]ÇM|NøˆÕ¶Ui®ÒRïñþK®„É…vO. Øxn#&Z]nó¡6øEv¬FCžRØ·wìxl1°ƒtv4$]ïZëð »A]¿”öÑàæõòLm2‘ åm¸‚Tùz™ÖoXçWÔcR¯“ÁEâÒ±A¹È\£ î"ï86Æh0½ƒ«²<ÔInܲ·j.>!W¾·ÏÈ𪬗‚3EiýÚ>#ßÛgd\Kf^K–õhñ¥É’ïô&%÷¨­‹Cž£hÞàâ&Û±Ë 5k­_³å2Lõõð¨dLZºGZZ&-;sdðk¤ÅÞÆÍ°»ÍóÕz´»Íp…ªµ®qòIÂíU»Õo¿”²ßà ‚ñu1À[Ú¼w'jV7;âJõ£ F'áð¬Ù¹ Í;ƒãêÀR‹‘OžÅYxšVXO§tÞ£›hÌeÞ¼7£?nµ‘…¯’„ãeÜGÄy‡eѺƒX^å"ÂRóGë/ÒFXP;âbïFÒÒ*i™ÅàvÒ¾Ö —7rˆu»‡¬£8¸ª¬º ©»‘YVk­ï˜uÊ·+ÅÞ¼u´È:0qJ­¸ÝÀº?Ã-ÖU8bÝ ¾‚Á±ç2¸¦P“LW*Ô¡ \Q¨Í®)T縦PÁŽ§Þ ÂáŠBùj\£öcRx”Ï»¢P¡íácjãÜXc:j»¬Ãsg#æãú‹ŒŒÇÈãAP/Ö¬ü%ƒ ;É}ìv÷Ãþ!Ú•6œ4ïÀ1ágp¼fl ƒwÒ;òf©ðé%ž»¢ß¹nê 0¸,u¢oêž/ISZ7Kï3ìJëøÆËO{ÚIB.öíÖò±< Â_ÜL›Ãܤ{ÜœÛ3biÈQÂr%}óåÈ+ð bçÆä"D® È¥ÃíKÃC:I®05ÂÜJ.¾40¸™\gj“‰\Èê1’«Á¥q33[\SP#*ð…ÔmRàŠz„Q0½šF”pM=Î6ˆ Þ›êaûì`“Ãõ8³z\S3«‡Á5õ8'-,ò÷¾rlNZZuKœ¿æIA‚O!+ð¬–óžhDZ]ny9o·jÄ—©ÌVkZ^nY¬,ƒ_[néÂr» ø/¹“‹î‘k¾Üžu¿†Á­¦`Ǻ` jð rÆÜ¤Un¾KòJ¸™›!;e䯙‚toµ&Zçf­Ï¸ù'ÝY­+ü¢â;àvŹâ«ðkŠï€/(> nW|!¿F®~Qñð‹ŠïŸ’+Ü#×-S¦Å„›á7Ã=n†{Ü\õ`½É©À/r3L¸¹S(>lËmqκýžçeGçámÁë—[ÏÌ¡z^¢e¹ÝñS&}ÛÛŠ?q¸qà^ÉOšï v¤vT\.ð4žÁ…³ÿ¸¡JÛWm9†Tá¿äÚ1¹î¹Nöu[Îñ>[Ž[ É…N’j­xŧB ܼ=MZë]ë¤1)pQsïs\­é$ç$¼×IîÐÇCcl_7ÆœŸ‘ëž1¶cŒ±c¨¹ª5uMsUø5ÍUá×4Wµå®i®jŒ]Ó\ÀkÆškÕë43ÆFä ÷ȵhŒuÒ ür­^§Æ:7Ö)p…‚scl‡Ç‰ÜÓÀG±¯co‡Ý®À X5ÖIø5ÇÚŒ±£hÞ„uåž1VÖ1¾^‡×Ë}®Ò ¬ªvhe½Ôàæõ2h­ËõÒTZAñ>ÛnY/˪1v¦MY7ÆŠœ¸_rL®{ÆX¡ercŽ ä"hée^GëeY5ÆÞÔTZ¿H.ºeéºeé—å;6µÎÏÈuÏ+ëÆØ©À³’ c&r-cgrAcÌF®{ÆX¹gŒ•ucLéü”\á¹nceîs3Üãf¸ÇÍp›á7Á!éÛd³p3L¸94Æ 4Æjì€uÆnïÏïþĺïÏÖk•XaÃûšÎá‚IOÛÝr‹ËapáPus‡jƒ ›kÿF’ʸ=I¸dÇ—óš²’pÍhšÎ»Ãem6?-´Ê‡NÜ ý¦á2xï:¡Zä,¹ ³Žî±ŽhçˆÜø‘³Ž.°Nk]ZúÁÀ:¬#Àºæqs>¿tÞÀ:ºÇ:˜kn¨χN°ÎyëÃŽ6ëùfd]µ€®éº ¿¦ëðÁ¦I×ÁƒM›®Ã›&]W-ßk¬«ö—Q×ñt>t×t6£ §¬ ÷X7³ë4:J¸ÆMHG.¹é!¸Ùݱ;¥u›Ž7 #Eƒ/œ‡{åÛ5nB:*/À,ÔèØÃ'ÜŒÀú{í8¾}ì¹ù¢&I¸Œ¬ (‹Ée.¦7 .cGD!åÛ¦kÄ÷/ \fº-Ñ6L ®DÂ!n*ð~Óàýw1‘9ì\)E›Àv@ƒ'ŠêpÊO \,öÙEDí]ùvc2Œ ÿ¥vÄÔÜ¢TjÓ“-·‘ µNí—âK.c5€êyžæ‡–%£ žåý•É€¥7g¡6:•õ´ç(,S$\¡v1P›îQ{àvjÓ:µ[táŸQرV­ìX£ÖÆv¬Ik;ÖªµkÕÚøLؤµÒªµ‘Ѩµë¼_£6 Ìt›Ik×o_ÐÚ¢õ)µÃ=j¯ˬâ,ƒk9¯À€œWàŠ@ÎK¸&YÌ~ƒk€8¯ŒüUjpE~ ç•Îo  ]ã¼2òŠ:Óbp!°¤ ìéD˜ OÉ {’A÷$ƒðÙÆ®ûT’ ¿på+‡ Ë Î_“ º'p S0Hƪ Z¿(tO2èždI2+Û( ~!¢Á5ù"ã”Ö/¥Ÿ1¸9 £´, l@ égW3„Üž~Vö¢À¯da4¸=CˆÙˆçqŠÈ(ðh®Û¨ ]o ~[ŸŠL¸'2ážÈ„{"î‰L¸'2ážÈ„{"î‰L¸'2ážÈ„{"î‰L¸!2‡¼‹4ë"ãZd‹ßníL<Š-yÉEž'ëùAlIVí/7†$!øûËo·v&ö äÊÔþbp´3qÞÏ û8ïg…ý†å}9i3ëËy¿aÎÓ=ÎÓ=ÎÃȘ<U¸qÏZ¿²÷Ýã<:vpÅÄy´çˆŸÛfœ§EΟNlü¼¬`Ïù§Úy;çcVà=?â<Œk¶q~šñ?æ<qéž\.ßÙz^­“[v‘³’V ç}PÎÛ§Õ€µÏTgpã}OàÛåF!|éÖ=lâ.í Ò½sd9×I˜´÷´ÍòU²ÝÄ bÉÒÜÇèiWcÉÎ.òD÷H‹ëÊ$@Ú-)#‘´÷¶½ Ìì†xƺk¤½gù¦¹å;rw$Áh+VÝà5¬ïfãüê½ ¢žÛÝCÎÃ’"@Qÿjj ¿ÈùÕÌUÐy«—ùÁxÀÇÔŽ8¶ÄE@íØÌ··ßEæ[ã¯#Úq†œ—FžáØ.Âð Š%¡é ¾R¾ÏK¸u>‘+âø ªEâ†çÇW k¶&— ®Ìû¼ÐP„µ;ž´¡£«¬À•ªÞ0ï°^-A«SàŠÚM†y_1؃S&îÒ¼“»5ï´jõŸ*µ £SþHËf; ŽOùû8ùÀFž¦áXʼ ×X¦«Aƒ[ãÙO•N#;׉„ÙqO+ÐzØÔé¡yíÉÂŽ öqVàfv¼L'áÚ¥8v ”ŠîJxª—k†³°ƒ,ìÀ'+„ÌàTï%gpA‚œ#Ô \Œ~n+xwkÍð°fk ñÙ Û ÙÀ?p–éö‡Mœ KǼ{<ïtoÞiÙF$Þyº7ïÐV¨GbÃyÇ·$˼ӽy‡u¾Ž˜¼ñ¼Ó­yÇŽÿ€Vß"P¼—w—ò}â *vxq¾Z÷—˜16Êéöà$Uk]™EÝT'þã`¹ÍÇÄE'Ü=³ï§÷€§7ºYÅ ¼‰Á…1V‚Ÿc®ÔÂÐÙñZå8 k“ìPàWŽY\+Wø˜¤Ïdï¤Ir8*Ŭ¹dzø/7ñÊ‚M7é7!>„¸é%ܾÿ?qspͱ¹÷$*A_ãæ•cï$á›CÍ5¯2¦6Þg'} H|ÌMr OåáÓ‘ÁÕ‘Öû§—pÁàÇwY,7ßë¥ÒzÁ¸¢BIç=lªÆ2o½£6ÑÑzðâ¥uÚÁ&¶Ë’yGåI¸+¤ëŽk‹·O(àJ*Áhã”oßwÕÖ~Ó†¤Móˆvì kNEWh“æ´ñÚx•®{óÖûÎoßֽػåÛ­ ,ϘI鼤3Ц¹²CÒY' u“2ò¹ “º‡ÿ²ÃcvfG0°ƒî±ƒî±ƒî±…‰¥O˜œw¾f!Ç@Ì»®€“h#_`‡ð ;"Òu+¥eKøµ%'N÷éÚZ¤Àûο^{L33¬3ÉBÖaK¿nt¬óÞ)ß.UÏ6Í9fpIÁ ¨ž‡6tWå3ŹæXú‡pù -¶“"Ý#-Ý#-Ý#-Ý#-κ" i‘FtÛQX¡£GI%\jħÛSX'#ë­[SÕO›/VÇpÄÍŒjˆ`¹=Ùð*T:ÖËŽ›'+:#…êãwƒØ³.íl¹ÍƒD†ð˜Ä 2¸¶ªÎμçÐ;çÐfSZ·ŸT¸¬À%‡8¼cÿeG†ì(ËçÀïyWà àæKk]’Í{’pdPCL «tSpcG7ï¯-RVàÚºç]ÂÍáOµóýqÕ«Ïé˜÷‚ç­Xls, !á×´B¡Õ­ùI+”A¦H‚{v ·Òæä¥B‹´áI ¾B¥õ‹´!L7¥‡¡G´yíݲ„_2t<ôè¸ Î:Öyt‚8H0bp‘µH‡¡3  ƒÛ˦h­Krmèz8¯ÁÑZÔ—gx—€T†ÎzJà —†Ž›&SVø››ÞanÒ=nÒ=nÒ=nÒ"7OG€ ®:7W˦¼ìŸ=JøEnÒ"7Ofºkܤ{Ü$7YBˆÆåöEN WŽ‚¾w¶(ég ¼ß Ò³|ç}ëÇ7K¸ œõ¤e;û¸ ¼°ºƒÒy¥ü º1¦i®ˆná}GY–©C•§!y°ØãX´ŒÓj ]Oí'iðDÞDmÐz €vÏm—C÷¦6Ì:ÉÙ!vÄðüîÀ“¨ž$KF¯P_WÂ…noÎdñwUxîû¨ý$.î¾9RW·œáü4xL‰¼õ/y ^Â…z<,ÉŽ6'É`#¿àÎÕàJ*Û—6iÄ×Rú‘yEø_oýµ*ü+ÍÊ‚wÀµ*ü;bÚÐ}áÚþe„¸öÃßÿöïÿûóùÿñÏ?þü×_¿“´‰“÷o(à&¨—Ž%á ï¶:>Ạ{Öà±³ö}üÂ÷^j½ï¤üí¼ÈÂQ î÷/¼wa¿ÄV÷sœüÞ™è/ݤÁ»(dGG뽥絡&Uü~{ØúR \¬(á;q}B3mÞEhƒû~{!bÑàEóÏݘz§ÁÏ‹ækä¾ð^n\Øxìûèé i­‹SíÇwèz±ó:¼×X¯¥ê÷4¸Ký§¯ÈôCç¼J›N³PøèŒâ6wb mþ~ËzŸ>Žº÷~ﻥÀ·3o^zö ïôh}ëÊóѧ3é}Ráþ4ôn«­uŽ_ éðÎ-¿ðЉ\Q[';CÝÀq»ç"W[ïJeµõ>Z%ßCpNðó5®ÁÓéÛÝ^¼ ßÎß^á±³œ(¨ðs9ÛPç½»w/¸¨ÂÏŠ>„X;¿ŸE‡ŸW“àjëuÖu±¡î³D*µÑBV[ï©ªÄ Ϻ6òý"õ²xŽ‘Oâ´P“÷LÒûÏ¿þóÿùãïû_ÎdG¿DyLP-1.10.4/Data/Netlib/pilot87.mps.gz0000644000175200017520000136320310430174061015613 0ustar coincoin‹ÀK®9pilot87.mps\Ö]v;’Eá÷Z«æà!t!€ˆÀ£DË’õ×$eßšÿDš××6÷n=ñHL~ow¯_þü}<¿¼_ºþý¯Óûó¿ÿõåíË—‡‡·¯‡»kxüòåpxzÿ<ÿÏnéãtK—ÓÝÛ-ÿQ·tx¹<ÝÒÇáü]éógzùòåþþîñt ¯o·px»…o—[¸Ü½ÜÂËçë-||`µÓ«=qÚËù¾žPôôy çFÎ}û†Õ^Yôé;뜞ßî>p?‡W„Óåû-<Xç‚:wÏ<·ó§óƒ‡ˆ.§¯¨sÆé|{ÆYŸN¸íïXúþçöôrájO·ðøþ;À¹Nï¸æ·ýx‡¥^°ƒ·ÇW†¯œ†½}ÿ¹æáïðyzc80hÚó-|¼|ÞÂå… œ¿aÃý¯pÝÁñˆV>ÑÊÇ#ZùxD+håã­|<¢•¯áÖÊ×Õž8íÖÊÇ#ZùxD+håk¸ (ZùºkE+ÿ½´òõ¶?p?håën­|<¢•¯u.¨ƒV¾ŽÜZùïÓùÁCÄhåk3N­|¹µòõ¶¿ci´òõN_.\í‰EqTèÞë´wÜé'Oôüß?;8ÜÝ¿|}¼¥§ïÿ{K¯?˜žß˜Nï÷̼œ¾ßÒå¤U.·‡v¸»>€‹Ò_L¼îšþbõ3ë·t½;Œ=¼pGÏç×?߇ç_OÿïÏ}ü~ç__<Zñúnø³ÖÓñÏ×çðpþxBz¿0ݾ"½žo»{8ãI\^$ׄ7Éááåé‚™/ç³ÒûŸ}Ý}ÞßÝÚãgzQÂÌ ª_ê]Óõwé÷oéõt®§†±ç‡ûç§ ÒW¥ÃíqM/¯H÷§o\åõˆôªUÎ^÷p{müL¬ðíî‘éó›Òítïînﵟ c§ßoÐß cïßoJ{zùö¦„±Oç7%ŒÎOoJ»c½kâØËåM‰cï{çØ+»îþ•]wÿÊ®»çƒ~úÀ åš°È5a‘kÂ"ϯlòçog®òíÿa•Ëéíyf½‡·ãÛééôñç÷ïýñþýùéãý„ô ôþ•éQ×=~pìãöù÷*§»[zyÿÀØËï ÿ¤G޽jæ«f¾jæç;«_·ùrK¿ÓÏ™G¤ÃûñŸü¾æðþã÷©ÿLlöOúqKŸ§+,þ|Ù>OÇßéì!`{ØCÀö°‡€=ìA`{؃Àö °=ìA`{؃Àö °=ìA`{؃Àö °=ìA`{؃Àö °=ìA`{؃Àö °=ìA`{؃Àö °=ìA`{؃Àö °=ìA`{؃Àö °=ìA`{؃Àö °=ìA`{؃Àö °=ìA`{؃Àö °=ìA`{؃Àö °=ì!`{ØCÀö°‡€=ì!`{ØCÀö°‡€=ì`{ØÀö¯9/;ä×ÿ?ñù¼‡à=ï!xÁ{ÞCð‚÷¼‡à=ï!xÁ{ÞCð‚÷¼‡à}Kï·gû‹áC bøÇ>Äð!†1|ˆáC bøÇþ'½Þ™Î¨÷r¾Uøö!°}ìC`û؇À>ö!°}ìC`û؇À>ö!°}ìC`û؇À>ö!°}ìC`û؇À>ö!°}ìC`û؇À>ö!°}ìC`û؇À>ö!°}ì`û؇À>ö!°}ì!°‡À{ì!°‡À{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ìA°Á{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì°À{ì°À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À{ì!°‡À>ö)°O} ìS`ŸûØ'Á> öI°O‚}ì“`Ÿû$Ø'Á> öI°O‚}ì“`Ÿû$Ø'Á> öI°O‚}ì“`Ÿû$Ø'Á> öI°O‚}ì“`Ÿû$Ø'Á> öI°O‚}ì“`Ÿû$Ø'Á> öI°O‚}ì“`Ÿû$Ø'Á> öI°O‚}ì“`Ÿû$Ø'Á> öI°O‚}ì“`Ÿû$Ø'Á> öI°O‚}ì“`Ÿû$Ø'Á> öI°O‚}ì“`Ÿû$Ø'Á> öI°O‚}ì“`Ÿû$Ø'Á> öI°O‚}ì“`Ÿû$اÀ>ö)°O} ìS`ŸûاÀ>ö)°O} ìS`ŸûاÀ>ö °O€}ì`ŸûاÀ>ö)°O} ìS`ŸûاÀ>ö)°O} ìS`ŸûاÀ>ö)°O} ìS`ŸûاÀ>ö)°O} ìS`ŸûاÀ>ö)°O} ìS`ŸûاÀ>ö)°O} ìS`ŸûاÀ>ö)°O} ìS`ŸûØ'Á>ö)°O} ìS`ŸûاÀ>ö)°O} ìS`ŸûاÀ>ö)°O} ìS`ŸûاÀ>ö)°O} ìS`ŸûØ'À>ö)°O} ìS`ŸûØ—À¾ö%°/} ìK`_û"ØÁ¾öE°/‚}ì‹`_û"ØÁ¾öE°/‚}ì‹`_û"ØÁ¾öE°/‚}ì‹`_û"ØÁ¾öE°/‚}ì‹`_û"ØÁ¾öE°/‚}ì‹`_û"ØÁ¾öE°/‚}ì‹`_û"ØÁ¾öE°/‚}ì‹`_û"ØÁ¾öE°/‚}ì‹`_û"ØÁ¾öE°/‚}ì‹`_û"ØÁ¾öE°/‚}ì‹`_û"ØÁ¾öE°/‚}ì‹`_û"ØÁ¾öE°/‚}ì‹`_ûØ—À¾ö%°/} ìK`_ûØ—À¾ö%°/} ìK`_ûØÀ¾ö°/€}ì `_ûØ—À¾ö%°/} ìK`_ûØ—À¾ö%°/} ìK`_ûØ—À¾ö%°/} ìK`_ûØ—À¾ö%°/} ìK`_ûØ—À¾ö%°/} ìK`_ûØ—À¾ö%°/} ìK`_ûØ—À¾ö%°/} ìK`_ûØ—À¾ö%°/} ìK`_ûØ—À¾~ýåîá|K?ù¾Ä÷%¾/ñ}‰ïK|_âûß—ø¾Ä÷%¾/ñ}‰ïK|_âûß—ø¾Ä÷%¾/ñ}ï |_âûß—ø¾Ä÷%¾/ñ=Å÷ßS|Oñ=Å÷ßS|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oò=É÷$ß“|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Á÷ß|Oð=Á÷ß|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oò=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oñ=Å÷ßS|Oð=Á÷ßS|Oñ=Å÷ßS|/ñ½Ä÷ßK|/ñ½Ä÷ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ß‹|/ò½È÷"ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ð½À÷ß |/ð½À÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ß‹|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ßK|/ñ½Ä÷ß |/ð½Ä÷ßK|/ñ½Ä÷ß[|oñ½Å÷ß[|oñ½Å÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷&ß›|oò½É÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß|oð½Á÷ß|oð½Á÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷&ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß[|oñ½Å÷ß|oñ½Å÷ß[|oñ½Å÷-¾oñ}‹ï[|ßâûß·ø¾É÷M¾oò}“ï›|ßäû&ß7ù¾É÷M¾oò}“ï›|ßäû&ß7ù¾É÷M¾oò}“ï›|ßäû&ß7ù¾É÷M¾oò}“ï›|ßäû&ß7ù¾É÷M¾oò}“ï›|ßäû&ß7ù¾É÷M¾oò}“ï›|ßäû&ß7ù¾É÷M¾oò}“ï›|ßäû&ß7ù¾É÷M¾oò}“ï›|ßäû&ß7ù¾É÷M¾oò}“ï›|ßäû&ß7ù¾É÷M¾oò}“ï›|ßäû&ß7ù¾É÷M¾oò}“ï›|ßäû&ß7ù¾É÷M¾oò}“ï›|ßäû&ß7ù¾Å÷-¾oñ}‹ï[|ßâûß·ø¾Å÷-¾oñ}‹ï[|ßâûß·ø¾Å÷ ¾oð}ƒï|ßàûß7ø¾Å÷-¾oñ}‹ï[|ßâûß·ø¾Å÷-¾oñ}‹ï[|ßâûß·ø¾Å÷-¾oñ}‹ï[|ßâûþ?Ò¾,»Ž[[r*gâJôÀ§¯,[Z-•D[zóŸH™ `7$yøêGuy‰f÷l°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½Ðð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½°ð½ð½ð½°ð½°ð½°ð½°ð½°ð½ïÏ·/_Íü§ÿtóŸýâqÝW3ÿiç?Ýügÿm õÇ¿ìø—ÿê¿û5~÷küî×øÝ¯ñ»˜ñ/;þåÆ¿æïÂøW'pýïÛ_Ç?4ƒ1ÿùóüg3óŸýmFbþ³ÿ¯Í<Ìöÿµ†ùÏú¿Ö½ù÷éŸöçöhÕñšÔm>,u¾fõ°¹˜½ÍW¥ŽÿýÃömÑ ?^·p›rò·ù´ÕøÃ–³~¾”5Ózˆ±äxþêx)K¤}Ååt›¯iÿ=:S¬†¯eÍ¡8’šbûCý?£áb&ÎÅóÇ{]s…¬NÂÅ̓5Öøñ«s^jŠ&Õÿ§§xÎ]ÃÇÂæMÌmï¾?.¦˜JJzŠû.†]S\LÑ=ØmßűÄj³öÕ†¢âR.wÑ8_à.V9õ.g²kÕ 9p%¨Æ¸Pæ¯þ[LqHšœâVÆ.¸œÉ˜¢–´ÍA8[¡TJ„ƒ·>æ>þËJ•÷½V³rNàôë}ŒXËêÊk¸X¡*þ¶ sÛ®ñ'5Eƒ#S´xŠSMäþ3DÀ…–ù-{øõª=¾ÃÇY}}j™›ÝÂh¸ÜÞ&Cp‰þ¸ü>Ed"¨¥&p¾B&Øä bí'áb…ìCΦêˆ.Ú¹ÀÉf¢–(iÞ¬†/ÁÌu )Û9øù³Å%\;#g¹3ÂÙ¢·sç²1¦høñ²Ì\mï]VSDÎÎÄ»j#æ6²e ®œ‘qÉ0{ަXÙ[¦¸Ï]ÇuˆšÄÐöîû£á|ŠuR~þw ÛÅb„kgTEÕP{7K8#{#4ÆHàrM¢QùC•Ó¬ál&ûçcR+$ä|À3bþö¿Å‡¤ ÚŒIÃåLÆ•¤e:Åÿð UDôpðÍS{µlßk5+!çN¿ÞǨgu®¼†‹²¦äŒDÐgÔ×å«729Qo§8ÕDZ+“‚Õp¡eÁz› 3 ÉGjÑ׉– ±Ù-Œ†+°1ážúCàbðû‘‰ –šÀ…’š·ˆögß8 ×ÎȦÈR7‡âfrQ‡æûšt™øñÊÁ\ÇPœ›ƒws…ªVp-CÑxæàGª<º0wÑÍíõÆ9 ?^M˜{bIzЇy´.g‚KsÜ\ —l‘påŒj4åXn‚¦X¹„¦xÌ]ÃG#ˆšT‡€¶wß gSlÆÊ§¦Ø6±ª•påŒjÄI÷7‡f²¯6øzµU&g —»h­uhMsØÎf²žæŽXÎfF–º<Å!irŠÒ—Á™Ì)²ÁӪۘpfär,ÔžC-Û÷ZÍJÈ9³¯ŸcÔ³:W^ÃÅ U ° ‰`ØDZ÷ÇÕœ…¥6pŠSMÄ×M`c´XËbr8/K¹xæMÐ׉–1±9-Œ†Kh2ņè‹ÁïSÔ À-5󲡯3íϾq®œQ,Î²ÔÆÏ¡ø™;¦büœ¢': áG﹌¹DR¦ó${U>³…dR¦ödó…¤ ~n¯«‘ކÁIù¢FjŠÈÁ™$Sì¹ d…|"´®Ñ³çhŠU­3`ŠÇÜ5ühˆNÔd;ÃR±½ûþh8Ÿb•³Ù©)ž™%\‡=!Ñ"Ô¿Ú,éŒèþï4\î¢ÍA ê¡LÀÙLš8 BÎ\Ûó-x–Úà)I“S´[Î.åqL‘ ~µ!œ®‰e7µzðÞq{DðÜk5+!çξ~ŽÎÊü\¬‹ÖÁ‹õëAµ3rn9†n(C2ÕDZ«âbÔp¡e9ºâqfd sFèëDË„ØìFÕl9Ã&úCàbðû‘‰ –šÀù U«Q5ÚŸ}ã$\™ì8.8ºÁΡ„©d­80§ˆ’Ö(OÃî´sk,H,Ìüƒµ3píŒ\ò,µ‰>RÍä %”¬áG·[R-uYOñ4àëb&ÅXO¶¬Pœ•âWS¬OˆÔž£)V=¶ Mñ˜»†Í~‰šÔ\lï±?ΧhMŒ&«)îVfSƒW’–lˆ¬LÐLöÕF lª¢$ —»XuÉ¡]¬rš†‹™ÔÀß$µBBÎ8#³êð‡¤±)î–$f —ò8¦(%­Š¹…pºB¶êNë|â™Ô²}¯Õ¬„œ8ýz#œU[y Bàc0m\v&ª¯«)Ú’ó&pŠSMäþXŸœkYuª»ÂT“æÐ׉– ±Ù-Œ†³í=e*Ñgƒ?§ˆLµÔÎ÷ÇWòíϾq®L„sG¯”áÈPâ<ÛÌ®Фl†»&ð£×â\Ǻdðó¶î›—p팶˜™;€É®sãµØ¬áGïÆ¹YuOŒš"rFÌĈ£U²B)ç"áÚïM±*rµçzŠçÜ5üh]IÔĶ÷Ø çS´)oɪ)‘pƒ7KDíyD3ΈìO º\ìbÏ7‹vÑš¼ g3Ùmb¶j…„œ¸®'וd…28Å)ibŠ›óÞh¸”Ç1E%i1§+ÔÈ*Ø55£öjÙ¾×jVBÎ œ~½QÏê\y g+ÔrøB94S´Û1úºvF5+ôÔ› )5ûãL1NÃ…–yë"<3Šyf®ã¿,¿N´Œ‹Q¬M†ØPý!p>øcŠÈDPKMà|…‚ãÇÊbã$\™kmb¦™;ÖÈ›hF"Jšxf”æ'ÂÓé$‹£mØœ{²ÙK¸&Á´ ¢ö~¤ª’!e‘DNZRr~t"#ÕR‹šâi½†ó™TMv¤ s…jDbÕàÕ³wÚ )¦ê“)ÓFÌ]ÃFlSMLÊmï¾?ΧèjúšbÛź=Q•¤…¶ÄÔž'0“cµ‘¨˜˜ù© ÜÅ-n.¡]¬r𣆋™ÔÀßEµBBÎ\íbU÷Ê৤‰)Vu7IÃ¥<Ž) IÛj¬’!œ®P#«`*`°Ü!<öZÍJÈ9Ó¯÷1ÂYµ•×p±B)FÊ$œìÒæ\;£ª£ŒÀ ÉTñu¿•àB˪¹ ÐÖä`c™ú:Ñ2¡ã»…Ñp©Þ(6Tœþ˜"0ÌR8_¡jŸ¼wH±ö“pe"jæ˜7!‡ yæŽ&$RÀÎô@2 ?úàL_ÖXsð™°ôr´®‘3‰ÚÀT;mˆòçyÒbK ~ôÕ!ÕR¦&™™Ç¨á|&¦¸ÍÊO£ozê$nZN‡CS¬æÔ…¦xÌ]öBDM6ãÁöû£á|Š>dK“?²‹9§,á:ìÉ÷&ÌäXmýõ=· IÃÅ.n)Qjw&6¸pnvF›µ‡–z…¸œ8pF.{ê৤É)n³é°<Ž)ÒÁ71³1§+ÔÈ*vqfĽ Ác¯õ¬¸œ8ýz£žÕ¹ò.ìEÉ®x ‚&‘íÒÎȲXlH¦šˆ¯hòg¡–Yç#¦O„ËŒÐ׉– ß-Œ†³í=e,0Óçƒ?¦L³ÔÎW(רߡý96NÂÕÉy åËMÈPÊÌ۱˜b¡ç‘[Ñð£«Ã€o!xrfTæ EãÕ×õ¹c,¼Î†>bR5©ÄRr¹ pC™»Xæ^O+‘…™Ç¤ál&5·H´†5WÈĘ\;#›szŠæÁ¶r²S<æ®áG“Œ©&.ƒ¶wß çS ¹ªIVSl›h“®Ã+êlÌäXmðõššD»¸•âÚEI.fR¯@Èù€g´9æŒà§¤‰)nɦ¬áRÇ•¤Y œ®P#«`gäl6Ôž#-;öZÍJÈ9Ó¯÷1ÂYµ•×p¾BÕ•¹ ‰ ­6Ô ×eÔš°ÔZ«©&bbš÷éœiYµV5²Ã§ ÖEVªB_'ZÆÅæ°0. ÉZ`ª?ÎMÄ1Em"¸¥&pºB¦í¥÷ŒÄÆI¸\!S½Y'|\ß¶lÊØ¼ýÑ`†^¶¬³7~´”!¿ò[Üš£‰Œßv5åé <á{ÿC$(ÔÌÙ_‘K¯üâçã_éÿžsè†~bŽ®BCJ·Þaˆü!n6; oýZ %k•=Ü=ÚÑ?l#m ðÖÇ…ü*Y·_o=](<~?…·f/tB o½SùƒËマϽxÀ[§CÙa¡&QxëàB~•MÚO=ÆD†’Q‡ÿ¡p.C5ÖŽçZc:÷’³s畼?…ë\fM*Fí»®`rê·ù>®nóqáúEñfò'F©‰ßÒþÿ=[ˆœI¶FY½@:árŒíºb¯ }$7BÙÅ Øš“ð£ùU1¶$$®’¤á­õ‚XEÍÞzG+.\c ¼µbc Öiáj>²Œ&ðÖ*ˆÈPuq­¼sÁw'7ár}UŸžu|\]g¥ Üú@QQÓ/áÒDT'w\(U lâÖÙK.´¬:ƒà–¹êŒ†óª»hN ÃWÈzŸBÖp¦eÍ“µ,ø¼ oý–¼jé~˜¤ÔÏÚQþû¸jº°íãÚO’peÂM;ñ…Öµ*fÐp¾B±Zð½4-¿3Ê:úãêš9<[Ó–¦á<F®Pªác?ÁùÈoûÿ ?Â=KnUM/áÊOxŸ“`«™n´Î”t×€dÓ댆‹¶þ¸ ¤£¤qôñ¯oßþ춃«Ÿ¯è±½­ñùïÆ¶v.Æhƒ‹ÙŽdÌp Þz‘‘_ÅÐMpL[#^J¸š¢¯_Nn!ÁG”`àPEظ°0åè–!§Ø¼—‹Î±içù^©u >«g™ñA‡kƒ—ôñç§ÿ˜‡ý†ã± ­¥ÓÞéb \†%Å ”m‡èFù:I4øž÷$ëã§?ÿýˆ¿¾µ»`…²‹~øÞW†$f;Öñ¯ÿµzذ_Ý›°;²µ¨ .gÍ,ní-ëö¿íë¨.0·Þs~½l%ôPrBTaR4iY+2X ’ÉyƒBÐèòêë{G9{»©Áÿ«þðÁ=œ+´7è;ç>ÿ-æÎg•L ýtdBŽ~ŸÌ“ t¾_“ páˆk–²?áYIøÕ÷®ƒçç¿Å¹‰ÈUL»›™½‹1Ÿa€0$5‡Ýü®ýÙ›$žƒŸÿ¾ÜSCO£àrb+KB/UE»7Û p6Å}’®¼°?~5Žóã9ÅùïWïτܵ?~×þì*»p‹Á·îŸdð¡ÄcNˆvÄÕZ°òÍ7tnõ„ß5ø½¯æ9øùïK᪩Wê×é&DìÏÞ 9Ù¸V>ΣûêärBÄŽ¦À×…ÝŒ~Û¹^W²9á×ÛÛ#³ï(ÜÞþæ%’QšU ©<u|¦Pçá"Ón¬7˜\×ÈÕ¨Áß%{gÕsîóßÒ-RçÛøU£aØ„è]¬À"½ôÉêÒ€ß;øßdð¿_ü>Hø_ŸŠ5ÿ-¾ÎK©&çÝ-Nˆ^:›¶2ZëjÎnœÛŽû†—¬ö„¿0E²ÀŸ~¿cÒÞŽêì¬ÏÚÐö6~vܧ]lÓAÖ=ÞN °1«•?ßT ±ÇuÝã Ú;y0È(|Zþê$N¯,ÐaE›5|} >€c?f?ýYs{P„ÿêvø¢öºˆúÃiÎgÒýE%·VðñõÖjþ„ÃÜÎvôü¿…ÊZí*7ïÊLùígÆÙ´+ÎŒ½àÌŒ¶”3ã£gä‡EËÓ1Æê‹ìgÆ_dWœ{Á™±ÃÙgÆ^pfìp9vÅ™±œ;\Ž]qfìgÆo`Wœ{Á™±Ã ÚgÆ^pf ÎŒ½àÌ@áâœ{Á™AÂå}¨™ e­À¦°T¸~Q¼âÌ@5œ§Å‡qh?àrŒÎUÍH/°EòRgÆŽÀÁ²SC—´t^ÃixóéôWÖ¸2|º½àÌØáºíŠ3Cÿ»fª7§lWœ wóÔ}ÀÕ×1râl\;¸EÑö‚3ƒL„àÌØ Î Ô2Ι±œ´B‚3c/83@Ë$gÆ^pfì/ì‚3CÕÏåÜk׽ᢠ83™pΙ±œ‹dho‚¨_åÆ×ݰçàٚΠZ¡jZK¿åó‘7%ÿ~„{Í™±ÈOpÎŒ½àÌX¤¤œ3c/83Èþʆ2)vî‚b7CÜŠbGÿ»íHÛSv+Š–lVsW&øYv]¿%<¸EÑî‚b‡L„ Ø¹ ŠÔ2N±s;´B‚bç.(v@Ë$ÅÎ]PìÜ/Ü‚bGþ÷ 6‘qäà‹÷ Ñ;‡L8§Ø¹ Šƒ2Ôº!½lìÖ– ?=ÏÖPìl¦mïþ‘?µþ/ü÷,šbçŸà;wA±ƒJÊ)vî‚b‡Ì#§ØQ¡sf<“}°ÔR?N±s;¨?œbç.(vnônE±s;4ÅönKb; Á’bç.(vÐÁsŠ» Ø9àˆÅÎ]PìàC{o’ÜôGÅÎ]PìpÀ(vî‚b‡ §ØÑÁ—6GÊ‘ƒ_ç;wA±Ù°mžrä rŠ»¢Øaeò®›ÚfæÅÎ-(vnM±s7EHŠ[SìÜ JœbçÖ;7jf~U­t;7jf~U­t;G(vnAqkŠ›$*·¢Ø¹5Å.§Øù Š»-Wh¹(~µB;KÍŠ[Œº5ÅÎÝ  1•[Sìî—Ž ¿K:vš™#»—¥CQì tŠ[SìtŠ¿ ØÝ/~µB;KÍŠÝÛ¤cBî’Ž ¿K:&ü.éØYjŽPìÜ‚bçÖ;&)vnPìÜŠbç.(vî¦NÑ$ÅÎ]PìÜmùE±sU ¼Ý<%¹ùI±óÄÚÔ52ï/(v~Ȧ_QìüÅn,°§™"hf~Rìà«/ò;?|‘_QìüÅÎ_äW;A±óÃåøÅÎ_Pìüp9~E±ó;?¼_QìüÅ΃êW;A±ó@†ÅÎ_Pì pqŠ¿ Ø!árÕ˜öö"y ×/ŠW;4EI±£Ñ\xÈ®ÆX…Ë0Šywü  (v~žQìtœI–†7ŸNá®î×ðéþ‚b7]·_Qìè×l©hxsÊ~E±óŒù—£„+ SMÌf)OÌOŠZàEû Š2‚bç/(vPË8ÅÎ_PìÐ Š¿ Ø-“;A±›á…_Pìáó1I±óƒbçW;A±ó7uŠ&)vþ‚bçoË(Š}pÑEϺ؅I± då3©à† ŠÝä„Å.\PìB_à@0ÅÅ:¸RaRìà«/ »0|QXQìÂÅ. _V»pA±›'åaE± »érŠb.(v“ãV»pA± à†Å.\Pì!A± ;(\œb.(vH¸\Ìe<ƒº“ܤØaáúEñŠb‡¦()v2ì\p5FS­3#¹…I±{…(Š]C`,™3 aÒqŠ—†7ŸNåüI h>=\PìÂpÝaE±c_/¹hxsÊaE±£pë’š»Xà=E´Œä&Å-p‹¢ÃÅ™A± ;¨eœb.(vh…Å.\P쀖IŠ]¸ Ø…^„Å.P†Q«èP’[˜»EPì2áœb.(vÉÐδAz¹ç¹sä¤ءÁ³5;¤ü%ÔÁ3’[˜;ôîY4Å. ?Á)vá‚b’rŠ]¸ Ø!óÈ)vTè¶ì-ëbúqŠ]¸ ØÁ1rŠ]¸ Ø…ЇÅ.\PìTI±,)vá‚b‡- £Ø… Š]ŽXPìÂÅNQQìôGÅ.\PìpÀ(vá‚b‡ §Ø…+Šü:§Ø… Šö?’b‡•SìÂÅmƒ¢ØB± Š]XSìÂMG’bÖ»pC§Ø…5Å.ŒšY\U+ÃÅ.ŒšY\U+ÃÅ.Š]XPEšb&‰*¬(vaM±ƒKÇ)vñ‚bnËZ.Š„_­ÐÎR „b£aM± 7(CŒDÖ»û¥cÂï’ŽfÅîeéP;(‚bÖ;$‚b/(v÷KÇ„_­ÐÎR „b÷6阻¤cÂï’Ž ¿K:v–Z »° Ø…5ÅÏSìšb÷Íð»æ¾óġؽ¬Šbn ?»°¦Ø…È«Å.¬)vØc1Š]¼ ØÝ¯X~-\=d<)vaqxÖ»pC%,N± kŠ’MI± kŠÝ{d³Ãï’Í¥Å.,hfaM±[Ø$F± kŠÝýsŸð{çþ›Ìý÷Ës_Àïüïw ~•ùo@ kŠÝbãÅ.¬)vÐÝrŠ]¼ ØÝo&ü…"Ûûé÷Ë+´€ß¹½Ÿ~¿+šúù<£©Ÿ¯Š$Ån±½ŒbÖ»ûç>á÷Å 'Å.,(vaM±Ã)§Ø…5ÅúKA± kŠNSÅ.^Pìî׌ ¿Zà+ÅîþRRì dÊ‚bÖ;ìn9Å.¬)v‹íe»°¦Ø…*øqŠ]XSì XWA± kŠÆ8Å.¬)vᆊܜbÖ»ûÕzÂïRë+ÅîURÇ)vXê8Å.¬)v ©c»°¦ØA©»°¦Ø-¤ŽQìšb·:F± kŠÝBêÅ.¬)v ©c»°¦ØÝ/u~Ÿ#m<±@(vaA± kŠÜwA± kŠ^yN± kгÅ.^PìÞQÕð«žÅVu:Á)vaM± 7}†!)vaM± 7Hk`»°¦Ø…¢5pŠ]XSì¤؅Å.¬)vᆎç8Å.¬)vaRìŠbÖ»pCgbœbÖ;T–»°¦Ø-,"£Ø…5Å[DN± kŠ]¸ª“ Ø…5ÅnaPÅ.¬)v ƒÊ(vaM± 7}"')vaM± 7xÞÄ(vaM± 7t Î)vaM± “b–;rÂk]'LøI± +Š…{½t'ÅŽ#‡Pì¥Øß)vâW“bG‡5H ¾Sìè¯b±è|LRì ؅Å.\PìÂM¢IŠ]¸ Ø…Ûò#Šbg²¯ºX(É-NŠ]$+Ÿƒ%^Pìâ͸¢ØÅ Š]ì )Å.9ǨVqRìà«/Š»8|Q\QìâÅ._W»xA±‹ÃåÄÅ.^Pìâp9qE±‹»I¢Š+Š]¼ ØÅaPãŠb/(vÈ ØÅ Š.N±‹;$\.:?Dp'¹ÅI±ÃÂõ‹âÅMQRìH4çJp5F³a­Øâ¤Ø½BÅ.ŽÀ!²¸X-Gâ4¼ùtú+×E°ùôxA±‹ÃuÇÅŽ}½lIÛSŽ+Š…×ÄQ ^.p•àbÉ-NŠZàEÇ Š2‚b/(vPË8Å.^PìÐ Š]¼ Ø-“»xA±‹#¼ˆ Š]d;“Å.NŠÝ‹¢ (v™pN±‹»ˆdh'tL.ŽÁï¹8)vhðlMÅNËfãÏ$[K-NŠú÷,šb‘Ÿà»xA±‹HI9Å.^Pìyä;ª¼a›ôÂ¥‘úqŠ]¼ ØA/Å)vñ‚bG@W»xA±‹P$ÅH°¤ØÅ Štðœb/(v8bA±‹;8EE±ÓQ»xA±Ãa£ØÅ Š2Pœb¯(vðëœb/(v`…Å *§ØÅ+ŠÚE±‹„b»¸¦ØÅ›Ž"$Å.®)vñ†%N±‹kŠ]5³´ªVÆ Š]5³´ªVÆ Š]$»¸ ŠÄ5Å.NU\Qìâšb—ŽSìÒÅ.Þ–+´\ ¿Z¡¥ Å..FãšboP†‰*®)v÷KÇ„ß%;Í,ŠÝËÒ¡(vP:Å.®)vH:Å.]Pìî—Ž ¿Z¡¥ ÅîmÒ1!wIÇ„ß%~—tì,µH(vqA±‹kŠž;§ØÅ5Åîš1àwÍ}ç‰EB±{Y3Å.Þ@~*(vqM±‹7W Š]\Sì°Çb»tA±»_±&üZ¸zÈxRìââð6®)vñ†JXœb×;$›’b×»÷Èf‡ß%›;K-Š]\ÐÌâšb·°IŒb×»ûç>á÷Îý7™ûï—ç¾€ß;øßïü4*ó߀@׻ů1Š]\Sì »å»tA±»ß*Lø +D¶÷Óï—Wh¿s{?ý~W4õóyFS?_+HŠÝb{Å.®)v÷Ï}Âï‹O,Š]\Pìâšb‡S4N±‹kŠô—‚b×;œ¦0Š]º ØÝ¯~µÀ;W*ŠÝ+ü¥¤ØÅÈ”Å.®)vØÝrŠ]\SìÛË(vqM±‹7Tð㻸¦ØÅ°®‚b×;ŒqŠ]\Sìâ ¹9Å.®)v÷«õ„ߥÖ;W*ŠÝ«¤ŽSì°ÔqŠ]\SìRÇ(vqM±ƒR'(vqM±[H£ØÅ5Ån!uŒb×»…Ô1Š]\SìRÇ(vqM±»_ê&ü>GÚxb‘Pìâ‚b×;¸ï‚b×;¼òœb×;f1Š]º Ø½£ª1àW <‹­êt‚Sìâšboú CRìâšboÖÀ(vqM±‹7Dk໸¦ØÅI±‹+Š]\Sìâ ÏqŠ]\Sìâ¤ØÅÅ.®)vñ†ÎÄ8Å.®)v¨,!)vqM±[XDF±‹kжˆœb×»xU'A±‹kŠÝ 2Š]\Sì•QìâšboúDNRìâšboð¼‰Qìâšboè@œSìâšb'Å..)vä„ךMÍý¤ØE*ÚPìâ’b Å.®(vqI±‹„bW;6¬è5|§ØÑ_Å=tUçc’bÅ.®(vñ‚boêMRìâÅ.Þ–;ï¼#ü³*,iRì3Çó:]PìÒÍ´¢Ø¥ ŠÝ`2$ÂÝqfž”ï\©4)vpŒÕ¥ Š]¾(­(vé‚b—†/J+Š]º Ø¥árÒŠb—.(vi¸œ´¢Ø¥ Š]Þ ­(vé‚b—†AM+Š]º Ø% C‚b—.(vP¸8Å.]Pì pùäEh'¹¥I±ÃÂõ‹âÅMQRìh4碄«1¶þŽòÄҤؽBÅn‰åÀgžÁ¤c/NðKçÓ_ù-»áÓÓÅ. ×V;öõìÀà›SN+Š…›‘cM¸\`S#ýÈhfiRìз(:]P쉻tA±ƒZÆ)vé‚b‡VHPìÒÅh™¤Ø¥ Š]áEZPìÈÿî£s=›&ÅîEÑ;hÂ9Å.]Pì’¡&o«ó0wŽ\š;4x¶¦€b§eÓÔ$6$(K-MŠú÷,šb—Ÿà»tA±KHI9Å.]Pìrг)ysŒ¥–úqŠ]º Ø%4FN±K»4ú´¢Ø¥ Š2=šb$XRìÒÅ:xN±K»± Ø¥ Šœ¢¢Øé(Š]º Øá0€QìÒÅ(N±KW;øuN±K;°B€b‡•SìÒÅmƒ¢Ø%B±K Š]ZSìÒMG’b—Ö»tC§Ø¥5Å.šY^U+ÓÅ.šY^U+ÓÅ.Š]ZPEÒšb—&‰*­(viM±ƒKÇ)vù‚b—nËZ.Š„_­ÐÎRK„b—£iM±K7(CŒD•Ö»û¥cÂï’Žf–ÅîeéP;(‚b—Ö;$‚b—/(v÷KÇ„_­ÐÎRK„b÷6阻¤cÂï’Ž ¿K:v–Z"»´ Ø¥5ÅÏSìÒšb÷Íð»æ¾óġؽ¬Šb—n ?»´¦Ø¥È«Å.­)vØc1Š]¾ ØÝ¯X~-\=d<)viqx›Ö»tC%,N±KkŠ’MI±KkŠÝ{d³Ãï’Í¥–Å.-hfiM±[Ø$F±KkŠÝýsŸð{çþ›Ìý÷Ës_Àïüïw ~•ùo@ KkŠÝbãÅ.­)vÐÝrŠ]¾ ØÝo&ü…"Ûûé÷Ë+´€ß¹½Ÿ~¿+šúù<£©Ÿ¯Š$Ån±½Œb—Ö»ûç>á÷Å '–Å.-(viM±Ã)§Ø¥5ÅúKA±KkŠNSÅ._Pìî׌ ¿Zà+•ÅîþRRìÒ dÊ‚b—Ö;ìn9Å.­)v‹íe»´¦Ø¥*øqŠ]ZSìÒ XWA±KkŠÆ8Å.­)v醊ܜb—Ö»ûÕzÂïRë+•ÅîURÇ)vXê8Å.­)v ©c»´¦ØA©»´¦Ø-¤ŽQìÒšb·:F±KkŠÝBêÅ.­)v ©c»´¦ØÝ/u~Ÿ#m<±D(viA±KkŠÜwA±KkŠ^yN±KkгÅ._PìÞQÕð«žÅVu:Á)viM±K7}†!)viM±K7Hk`»´¦Ø¥¢5pŠ]ZSìҤإÅ.­)v醎ç8Å.­)viRìÒŠb—Ö»tCgbœb—Ö;T–»´¦Ø-,"£Ø¥5Å[DN±KkŠ]ºª“ Ø¥5ÅnaPÅ.­)v ƒÊ(viM±K7}"')viM±K7xÞÄ(viM±K7t Î)viM±K“b—–;¾sjéNŠ]ZQìȬӃ?)vô9Ä<)väí X ß)vôW1˜I±cÃrFÃwŠýÕñ¢:“»4(viE±K»tS§h’b—.(vé¶ü ØÕ uÑQ’[ž»LWÞÍJQ¾ ØM.A^QìòÅnp3aë8Å.OŠcõEù‚b—‡/Ê+Š]¾ Øåá‹òŠb—/(vÓåäÅ._Pìòp9yE±Ë»<¼A^QìòÅ.ƒšW»|A±Ë@†Å._Pì pqŠ]¾ ØAáª+3’[ž;,\¿(^QìÐ%Å.S† ®Æ¸¹“Üò¤Ø½BÅ.À!S÷å Žs#4¼ùôÌhH.Ÿž/(vy¸î¼¢Ø±¯§è4¼9å¼¢ØQ¸É¶H¸\`mŒ#—'Å-p‹¢óÅ™A±Ë;¨eœb—/(vh…Å._P쀖IŠ]¾ ØM¦I^Pì2¥ß˜q vÜò¤Ø½(Ú€b—‘ ç»|A±ËH†vÙƒ·ÑÅŠ͓b‡ÏÖPì´lVÃôÐ;K-OŠú÷,šb—‘Ÿà»|A±ËHI9Å._Pìyä;*©úÆ‘ËHý8Å._Pì2#§Øå Š]}^QìòÅ.Ã)JŠ`I±Ë;èà9Å._Pì2pÄ‚b—/(vpŠŠb§?¢(vù‚b‡ÃF±Ë;d 8Å._Qìà×9Å._PìÀ ŠTN±ËW;´ Šb— Å./(vyM±Ë7EHŠ]^Sìò Jœb—×»I¸Þ¸\ö\“oœ­†Úæ¤–Ž m+Rû²³¤Ðn.e7àUMÏc û`r(Æ*}oôµ²—p®ïU´M1~vW¡[’‹1.¶·Õ+â l‰s~³®T&{h.lLQ}]­ü–Ëa.>ýïÏÏÏséœÕ`HxýÕÏç§¹?Ö›’Óÿô•l‰­é¿Iþ׿ãûZRÊøH ªÏýiá5ÙŸêˬƒÌ•¦îFÂÈ—êOô[¼¡¥ ys.×±ZÔ¶½béöö ®ÖÑU½ò7¹tæ!¶J‚p¶Ž®f½‡IcK×J|yK^Mɹt̨TWfz6ÎE{+)X'áÜ&}hþ² ÷ êœ5\z,ëv“¦õ½l9I¸\:_£·ýØNJ].eóÀùÒeŸw_$–®§çü¯1údØj¹Êð5g:¸eOÄDĭש˜³ßƒ€)\~$_ÄvÔx⤆)ƒšæöN8_`ãÝÁ,Ó ¼Ã×ár­¯n5ÙL.¤\èx¶»t(Ùlø±ÀÕÜKÇ Ÿi\§b…ý<.ιw¸°›{Lá&Ù‚9R3]΄«î ­Ôw§³ïp Ág¬ðé§QŠ®&{^õ÷×ùyû`ªÃ=—î?ÈÒUca£p¶?>9oÙÍÕœÏ@‡ÀÉþ˜:ÆênÇGª¿ï±óü-–;OnTêÊ9«àGÅ€G¢g-"—ü<òŸp¶x¢n±Qv4œ ¾ G1a£ïSÒp¶X‡Œ~ûß«ØK¸ÒŒ‡¡ÛÊÿñ÷´\í¬¸õk8¼_, ©ÿ "É §Wíp®M/’‹νfÍ.cmcÜbîyfÕÜõ0˜e9M­Pë=ÚœÛÍêrÚÃæ&Ýx‹|œáËì©KÊ ÂA8÷”ÿË_?g jÃî/§7èðú+ˆÞʃ7æ4¨_¦¥õ5F `ðL­Mx°uå7 ÖUeCÌÀ?}¥šUÃàMÛãjÎs¶ÓÕe=7ŽÇIU6ëâ¼Õç§Æu¸ÜŸ\Øà0«E¸.ÍnÞöÓ^fÕ5)θ†q;7Ž™Êº#ÕZÍü…ÀÉ›ÝÝÚ–ÎÔ@c¾Z¸s阭{°¦JG)¿÷ÛŒ;\F¨5‚OgéþwkæX'5¥nÂÙŸhìʬ/’/ÛÃ,„V—pŒù°¥|QMì4΃±*™vjÆSOÑZ¥•ú¢äŠ%XR’ –¤~TZi à]*Øýum;ü¶ŠckÒ.ár!jr[¢WÞ ÑB]•œ±BÏÿuázþ W ¶ ÌÞÖõÍ.W¨‰¶™÷>ˆÂ¶èÍh8_ºª»Û†I0›×p¹tîÈ­µ3©ûž$\‡˜)%£–®g3ñEuÈçÒ‰ÁWËu2dt‘ˆft¸5r¿y!ÖÔS¡púõ*›¾ú;ÜûâœÇ »Ï28ñLÁI¸\:_½O`颫î},Ý÷ï½Ê‹v«ûæPô¶¸)8¯}T7^rZ$Ýý£á2sÌ9/¼A$œ[®ÖÜØÅbUt^¥ÆÙø4iÖ·u·ÞÝ´›¨9ÙæÐ×Yúãb=7)åSÚM 3Óª÷¼ˆÅÇ&…ì2Ê‹‚÷óëÎÃë&u¡n8hkêg0á<ölj=Ö÷ª àërã|0ØT:c­„×êã·>z·=”š oö¦w4Ô\>ª¥kQÀÓ#q9®šÊSæŸ&ÜUq¬Á‰+ë¿Bi•¯‘‚óøËúñõ)jôW£½t¼à`\cÎ(íÇs×ËÏ̤¥\4¡†:’Ri‡§ÈSB;€c·Yežpº½\wé¹A!Få„«ˆ"ÖÛè(­ÆžÍM8÷¶±¤AÁ¡ÑXÍ0çÕÔŸKǾqí0f&uí¼„sŸQ—®qÐ-,88r42áJâÏ6L 1£„ë̤=ð¿<ýä%òàMRp¹ò¹xÓéU,×ê´ÀÙþTw6¤>;çÐ׉fT—ãó•âbµ73¾ˆûaSíîÉ]ল†yZ…§áL„³¯&1`s*%% WÞºŸç©Ê°›rŽÂë­¨•o—²™à'ä‹ÚÊÛr0šTT™ ­D`_tÄácŠŸÿëšÑh4Ä4[AµšvýrjF‡ƒ8)øùø?õ›ê„7³RÀEPÁ×¥þĸŸ|X!õuµŽÁ8;˜Ä uÛ]IÎ+:590Äì> «ýÄ£©í<Å0oI!½Ã Tï΢ˆHlªO§fwez–=,ŠÐbX‡kÛ^æŒyB"1|‡«Êi´aøòOÝús…¸Ô-Ô;±Be#‡¯Ê…é4Îô¿[—ηX_ÃÅ:¶ü?,Ê…Îk¸>#Ú`¾æwS†:\­£óÁClá¦p¶À¶±ÏƯþøÞSèÆbbC>ÏÖÅçm\–p±ÀÇI®ƒõØë :“1y«X¡ÖRÄ÷ïˇ³/–õ:\Ûà{XÉW>F’Àw¸\àö#; ýóðRÏÌKUs¾é*ήã))¸Ú†T¿npå ïcÂÅ6TlÜà‘| ÅLEÃ¥œoç Ue]ƒ™‡1ê¦[/qpëÚX'N•œ›XŠG¹j¨»;÷çË ì|a+_a’Ã3 çÖµ)iéG ¼ò²s†\Úà*Ú“ GkSŽˆÍ„sÑÞ)é°zרŒ„#êDˆH´mòÓ÷v¸Zy—Šq`åkö¾M«]‡<8/¢Øï{…DœTrüÙá|îû ž±óV6¯}d£á<1[kƒër.޹?ÿø³³üø“Œ±oGÍXçB5‘‹~0 Iq¶U8Â`-²²k5®Ê;)ÂL¹ÆÚ³6U×¥W þc§sÙ¸WÞW£æ%œ[…ÝjoVDk@CRÝo¼NCiÑdµqÍš§ìІ ÑöÛAŠÐs÷Äœÿõ¥3­y”†«u}¡·6%L®S‡ÜS¢—­9Ô¸XãP#áÚ§—mþªn}¯Ú2!°©:–¢÷§ù?MZ‡«SVÂUk@5\Τ¤EÅ:ØYd¨ sð^Ó|gaõÎ6V’„+¨ö0éC¸ª2Ö™y<Ýá:nwfÆíUðúS¬cŒö¼êÁé\6gkœ„ƒÀ΢]/AÃ¥qN)(Á…–}þÚßÈ´R´åb‘öÚv#Ἂ³oƒ±“ÌÏ€O¸T“êÔ-²\Õ$n.µ·Jð¤US‹8¯L¸Z¡ºðìÏç±½ŸY4·³PÅþÀ(Àþ±¦Íß?³ˆ"ï}ý÷gú‡j9f©ˆÀÿøø'ûÕ¶wt¨xúI…›Ï³L6á_þüNxm;ûúvüáÛ3ûÃÖ’Ç¿¿‡'ñÜhú³Zºlm§ü„.Á_–÷ÇxÝ÷g•ÖpÆ8E·ÛmǸíMáâ|`km¥²ZížêR8íór#í*[=Q pk;›ÏkH‚fÙÈø`ðOrŒýú¯´Ã®~ Í/æî|¼ôg³¡_;d_çN¹: I¸ÕTuž$…Ë:d†ÂMF*Í"&[ÐÒQÃw,ñìïC3p32pç¶£Nè`ä¶h4œ[Ä=Söý™TÍ R÷¿‡< â9»(/Q7.M¸íÖŠ- inÓ¬áR´‰å ukQ¾Î9/;ÅfŽ5§ëö˜Â©hW£Z${ƒ)¥ï‡e. â¦tê7ŸUÊ9‚¯ËÚa 8-R[e|]hFG²CÊàÌ +Q¸¤§ÛAQ~?kë~˜í;Ó ã’;‹ò<ºØ¯€¯ ͨ1)C¶¥‡Álã¸f¤vŒ”ak]A%\iFªYJÿÕzq-j† ›v“[ÂÕ¡£K¹7 ã*SÓŒkS¸ÔŒ0Èן%#ô(šÂ¥Ñ7ñŒ“¤f„’Á×…Õ®"¸Ù%r®Kí”gj†Ú·’ a\îå(öu®ÉåeÞ´3& 2Ÿ¬‹ðò[»ª æ.B˜jPMA!LMÇ;ïƒÂ…›hÙ´L_gr>&á&Úo0w¸õ'¤ lœPXl.Ha«ïCƒg »ÛóC˜Fò.¼ÏÆ,B; õ€ß§°®Ö4 ¶¤¤„Vù"Âa¬„Âî·›º¾".W]åy0ì&\§Ó1y˜(o5vÌ®ôÒžÇM‚€ßjÀ…“òö Nø•¤f‡ƒ&p™gûÐs®°~§æ.2“Ö|:.4Ù¸TXëΫ¶Baq#×$p©°®ßº’ ëÊÈt \¥é¡Çu??ò¥‹½6Ë÷ùáèÓf&·°Î¸ôÃÕ¢×ÕQ!¸8œØzº&5¹Z!°ïR­O}Çš,áX­¡ë-¾(Ój]¿^&G;¸4¿‡6 NëE*´/ª„kšX ¡ \ €«ô4eÌ‚uvÔ©Øà…bu« #ÔF©Ðp©X5½µ°h›£+/+3ÇjÒ‚‹ÞÎ”bÐp©X±ìç׊5àoP¬0Ú\(ÖÉG‡h.ÌÝ(ÑæåêÍ zù„«C´öÚ¢ƒª/½“ …KóîôÃBeL])\øKS…/Û.¶i8o´²oûnlå¹fìôr¤ íḖNž•F© †Ä_~_ˆ9àZ3lY$_6µïÊåøâŽ}”—qfÀ‡D‰žKÒžx2ËÀèãŒqyš)ǣدá¢gX OS) Uœ­†‹Ø³¤ÍcB‡ÙF^DઆšrB^ÆmãÒ<…‹3ŒVÌÒýøqÛŽÂ…/²!öš¼ˆ*ƒ hî?$;0`…m—t4œ†˜ûö8Òî–Å´v8h:xv]¡ågìÉÙôÇÀyߟú›9ª-`åEFÚZF|˜2îxR¸t¤Ù-ˆ•yCR'#Tß»g2sqf…~Ÿ¹pm.âæýÂw梭Ýi*åaJ ÛH׆:ˆn`WA©·›&\e¤­Ø¤Å±q.[Z%cà­êv{À¥Uhïè Ú¬÷ÛÈ·(œ×fkb ¦¿Œæ5.Zãó"U%‰2ËK26õ~âHØÌ#<—›VD…v¤¸!6.JÚΨ’·'i-ÑÊ+£ârXr)5œÝúpTÙСl .·ŠÀ…¹ˆíj2æRÚæ.£‹è;œ› oÇ¥R —qw{[†Úí] ¿Ï\ ¸6éy]„R”ªè"÷K¿êì5LÞßgÑ$cm.öÇv„N-³Ó8ƒ—'´¾×WTx0š®R¸° 6–“š%4¹n蔺 —y`W›Ö‹Éj¸ª-õ‰PØèÇ{g.6—~[[xîš›Z—ñ|•íˆrØb«Îi¸f!å„]ïhƒÀà‚…‹qÐõ¶Îo~§Ê<]ž†”ýJ«Œ·I}]yØv‰»ÌÏcg.ò4 Hã²÷ƒ,Aಚ|6ØE–qˆFàÒEÚÑþ‚+lë85\ÆÝÆÄEk:€Ä†“ZCE5¹]\ÕpyÆãûù–ºd™6°t2wn[¸ÈÕÒݧïŽô=®ôÝ+¸r‘¥=„˼ShŸ&Ûáéû×%àí’Œ„ë¸Ûvž‰Ô÷2§ðï²-@>ÅF]‰˜gGôë¢}r1ç+TBßû(\Î6Í(…!ˆÙ[0w•¦w2¤ðÎç”ÁܹZ§”Oÿ.˼֌ tkÔ¡¾Ûqû’•¾[ô–Gõ€~]è{ììe¡ï5&µ`ã$Ë8yëà%¤’ø:œÛ Ÿ±456+/gc½A† õ_W5êãÖàezÀßÂnrF -8ù=úDêßjCûà‡@Š&>Wœùö(‡„ëû!„ˆô½FÄ#¦%pg³Ðwo‡Â¸à×öп·(.ùíÏÔä<ÃW,Šœ ¿¨Ì·µ(\œªš”ú-~¤Žk_©jùÃ%¯À×% Ãùâ!ØŒöìJóNKÖÈh©#Œ±®œrÂwõZ''§áR­Ù$†…24ƒÂerœ‹‡~8ÍËlßyrì{û0yu!¹Q £+/’ãHŸ;‡]`ð\­o¶¡ZoóÀ‡®üWA?øÝ—j=à¯UëƒÑ¡„Ð>ŽÔBçÃÛ¼æ8¯Î´Ìlv04ă>WYs› á@­mÖj½K]µ4—gZ5Å´4Û»¸ì‘q6Ôjíg+%ŒµÆ0¨µqiúKWÏ.šsîRa}ÒèÜHžVWÚcH)¯+VhŸ»ðÖ±Ø6N*ìíP¥¾—äÀÆ Ÿî£5¦Ó5y*@lD‰¼ø{â„ÑÜAn‹a­IØ8¡ü­•ìâFEPƒ¿/pP ;:•‚t:jÓ¹µ#T{*Z§_zë8ÌîÀ(²·)qó˜Í5]«£«Î1Pl®\6…Êá<{’e®û:éÆ]ÕFÞºU4öÖÛŒÒÈàEr¼õ(M7® àëRù½ž=ùñš=Û8,··”^ôÖþoœVX­üñ¸($&襓ÞÚoŽôâû5HþzÙ*5•á±MLøHÙ„¨áêNDÆ=°ñ6i¸¬yÅÞ}\vž2ób>«ëû&Ãئ½R¦áêbåx´^”ñÍlñDàœz×lMÐ*T—S4\Z…âR¾Á’¦€ÁK–Y]!‹¬BKŸÀÊ ú™ñ.é÷‹ŽÄÆZ—=€ ´ Uæ,é½ùkY 7¸ë|Š3s¤pÑ” &_¨dVg>™ùtãd;;‡JfG£dþãÿ~}þI•ßo)Rÿ@õݵvk®zÔ(é°Ç²a¬¯LüowˆÇ—¨¾óN²»7)®¶:ÖÆy ðmUͪ¾úl\¥ÊÁ¯Ë«Níåu¨ÉÍ^h¸TØ`_ÛƒV.Hfoð¥EæÊ·§ee Ξök*¡€¥“Þ:Z{Þ·NÁ.ï&†Œ«Y{m4œëe ""¾ãì'¥À¥·vuÝÚŸŸ(®ŠVG1LyBŸì¦ç.=aŠa´Ñó/{]ÅÇ~ö}]uªì{Us‘A¸º\˜Å\LâL&\žoƒ›%ÓÞy݇À¥bµ23V,‹æ.õ§µº†`7žd£p鱬-‹ž÷®¸í~ÉL>Kží8¶£sΤ‘Z‘ÐVSÀ×eÝ'–^Š“¦ã Å W‘d»îsxƒÏ_©›°ivûðýWÔgX_Âþ‡Ï_ÿb!¦™íE ¼þŠ„¶ΜÔѯ6k¸ðX­T€“r)™Q-™K'õ²®Ð¸š26E¼Ùu¡—ÉÌ+I£ÓÓÆ¶Àç:~êN¸º’´Å„¯ †y¼öóyåðL7»ªó”›'“.¯ †N8z™Ë.—-PÛ{ŽP/ä;¸~€ÈÁ§,ÚÓ3.õ2CSkUâfk‰Ÿ«F¥¥ÝP/“gƒdéd³sêÊ[=­²†«–nÇ7J±jÊ”Ô)ŲÖyø2‘MóBÔ˜—x¬pYC=⬠áàe"S ßøYß'p!Ú¡ŒÂMÔÌ"#¸0úv¨2“yÍžÀU’Îz…”§j)=šû/y ‘lÚ+†|]aÐç (.2Ó^ä…uÄl£Z:í ’Ý)ðºB˜çÍÕW,™½¤„¤®”ÙNe^Ùã*òC±úìÅ#•Wöx›=èb•Ç AÃÍ%n0åoÐ Wo;ôÓõœC§ tðâ  öX"mëÀàU¤,j}ÛhØ,`g{u’4Û™pn7óÙd]Ù ˜»¦oî„0yö§êp] ³G}ÃÂHýÃŽƒ3j83Û‹Žy‰—o/„v CÂU oM‰fÍÎŒ#pÃC{\S“ÙÃaÂAníñiÕ¼5Bàò5¿ÜlÚ¸A'pjX³mXeü|ˆ ^´ú)ÁÝpŸQ`$pyM2÷›Å²€EÂ7çÜŸ½Ù‚Å ­+/b­ÚMXhrn³`ߥÑ7qWXõK¸JÌIôUQ¿i£×ðO|£ðv /÷?PxöóqWNÉAÇ6{p“ÔÆ)—Óò*‡O‘ç tã‘Xñšð%ÅzÖ¥\u Gý픆«Æ#=#ªèÒì¹Jàª.íJ^”¹Æ8«lÜØ½W˜Y ½¬AZ€½z¬Û͘À¥^–h/4xù²½±$ó‡‹+/ßfl\˜Ì»RÀोÜzI_ÅuSh©ØÈÖ.B™«Ÿ1`å…¾ÛãSV†w©¯ƒ¼êÉ@{÷ý?l\S¡k”a\ÉÅä¯#Ïý×õ¯˜Fè:0JãBL¿œç9ËV ÌÐK%.7ÌËþìaC•áÓMi¸d)oýáh¡2Áú }]¦ø“,sò”+ýú³zv!ã{@~Tß\¦Ó.挔!Úh\jFÈȳwc\jF<Ö>®új锓j -rRÆÏÊ0Ë2Wô›ƒNj›/¸RCÞÊO†‹gŧf€˜v2'F©ÛÿõÇÇüöuÌ|}ÅUÁ££ƒ“pÐÀ:øPжy9dÂU‡[®ìqRÖpY§2½!£â=yg5œ7ækRp–zä‰M{5KÃeõäú£ÿñ»ü5kK'ë%øw•æ.“:ׯ­ ½¬é’‡÷$Û|££Ðš1ÌéÊË[{{w}{ !¸8ñ=±jmR@ƒgQZk Ð;°èÛBZh5Ñ7–ýÿ¯Þ¬w~W?þø6T¦ÿó:F4!Ng?0:{ªñ-î¨h&wÀå•—V‡„U×’æ=º —Çÿ¶3'iÞ´ŠÀå[;Õèã*™™w\ʦIÅiq<î[[ÇÆGÜ -ΆŒ®dÓGÔÿņ2û¿Ð•²Y…Ó!ql‰n+/»ÄD›`m–$´®£) Ðš´ºþ6îŽrŽÀm}%<Ǒ̌î»Xe¿ØºMò4ËJ„1½« ˆ¿\š Ö¿á;Ýì6Z“„t'ƒÍžG.+¡wÚR=L‚«gãìY‘Ï^Ùé¤üI\°³!bkÍ®4œ7ߨ †oa¾#HàòÇÎûy‚‘±sþ\xƒö<(Ô¸*ÍQÃAoØqÉ´3°òRãÌÑÖ_j\v[B«¼ÁaçÕëÇ1˜Y6ýö}]—Þ³q qf(ü;Ûþþûʶ¿¶Æ&QÂÊ J¸|--ŒóGW­ Í™Z¨"׃ךaûÓÚª’ÆÑú¿Ï_—¶7»x10xY ¨A¸ÃAOú_Ú1™7Ë ÉüÎJúNá"™¯!PÁAÏät¸”ùP6x…ª:©qˆFàRæKB2¿‡Ä ^õ-ñÈËì\ó¨V^‰vëX9šBÿß8'ÿ$¢}üêËçïg 5ÿÕ²m[W¡7?pþKÁ•+£ð¿ÿøyÂÏ)8ûß%üÓ×O'üü—‚³ÿß~öÁ½eðýìK7þõ–¥ûk|ý¯û¾Þ—nüë K7ónÅGœ†oýõ™ÓŠìöuðO¦‹DÙèü² )—í)\¾ªáÜav?ý&¤wó`«¯ïIÝ'Óc(ùîîòë-Yë‹ÂUñ<µ _oŸ÷Æ›ñõ‚É`l=÷Ö±Üj¸töé8Ç•s7íÍâ±t=Ñ—‡R«¯ïžtCpQ6 åèº-¾ÞêæÊw/)üåÅÜC‹A4\¹„TàÜ£v ¾»bÙEaýõ¸…àbî9düõj³ÃظîâÕm”å×ÍlÞLáòëý"µïv0L?™GÈZÍÅÊ×pùuwÞ •_¯±}™ƒ?q•æâë­_yÐpÑ‹lQ¡Ô¹q¼üÉô„Bž¬\È|0†ËÖ…ÉsÏUe†¹è±™Ù÷¥ömià.uÑNsñ¾4о- ìÓBû¾4о- ¬Ÿn}õÝÚ÷¥ömi`365™__hß–6u/aÐ_š±zOhß–¶M/5ž*ó¾4о- ÜMÝì;Zƒ“w¥ömià!ðƒEQ õ»Ò@û¶4ðXù0-íûÒ@û¶4°E[|ÏOö}i }køœ‰3ìûÒ@û¶4°}=7c›7¦Ul’‹3xc(áoL%üi „¿1 ”ð7¦þÆ4ÿŒÜ¤çaâeÄÈ1î?Ãîc¯„ì $b¯€ô dR¯€ü¤B¯€_¼ŠùZøgH@y%|¤ ›xÍ׿þ„Ïö¼>‚xÏ¿>¢p¿NKÿøö¯Ó7·Ÿß.6äÚÕÛË—*3Åæé±!ì­^†¼–:Üúù•pòêÏꥫ+8yƒdõîÎ¥ÌÏ·Vï{\JiɾxGà Nz7¯ú•_îûl1»ê‹|¹t_`wÞW´ \t™¼¶´¿ðíýWÚùyý~Õ7áRãªkúÝ®¼<>6'eIpRÊÙ•™þ¡fÖÇ^ŸŸðÃËXÊäìïî4jiÉ+eoÁ‰eœùóîZs½–±/£‚ïŒ1K 'Þí•““¿uþ)=Ô$p¼³5á'MËöµiœì`z°ìÈë¶GÔUIÿùû\ºæ çíþ^ìðÜsér°Æ)¸ž»qç 1wמà’p5w“ÜÞ„‡Ï=×Á×Ü6I8›» ¶ÞûàùÜÝCqÎÅñõßþ9çÞx¤dî›7gŸú‡¥äÜ‹N~„tô£ƒPs?dî59íœ o^ÆRЧ;Û¬4ÿAÅÆy—5¼¹ ò«²õŽM“)¼lSæ'\nœ+ÙèkBŸæÊw¸Ø¸ý+{‰›o\•Ç\F‡Í çB{« SÍ ÚýÕ…!uUMÏc [ðPΦ[Ü´W̳—p®ïU´ëØÏÎQßùšÚ\ŒÑp±½&lf^ó¥2ïÆ- W*“=46Žrß„+•©YèN,þòé~~žKçZ?,5÷ú«ŸÏãó¶*–9:×?|úJ¶Ä¶÷¿€ÿõïø~ë*[B©Ñö¹?-î&ûSµ²Ì+çÊGÓÙHø{Rý‰ýMt¹t!oNÃå:ڸߣ֖6Œ<{ÂÕ:Ötv¯îð¥3Õ‡Í{gëè|Jû+¸|éÚ妼¥¯¦ä\:fTª+3ñt&\´·’‚uÎmR]àÔ„û† uÎ.=–=ì±6ÔÙE+ár鼋f¿Ì(¥®…ÍçK—[ã7½t·‡àrŠþ×}£¿´£§ÐUó‘s[fBLDÜz[ æì÷ ` W‡‰ ±í ÍÁvinï„ó6Þù®¸ßH¸\àêÓ·]3¤l&Fs,:Þ*XH6~,p5wçÒqÃW-‡9¯ñ b«?çÞáÂnî1…›]t˜#5ÓåL¸Z`w¶†úî£-$¸ì÷öêÜ?N£œM›†×_ýýu~Þî-EÎ¥ûß²tí†èœí¯¡œAf7·÷’€“ý1ído~¤úûË1Ïßb¹2ŸFaŽiT'üHº™}Œg-"—¼ .ÂïB4Ð-VŸàlðU8r8¯ë(£?Þ°¦p¶X·0úÖM£ßáJ3BÜŽ ¼®üOËelŽ…x¬_Ãáýbɸ¢ÆCÌÍÅ8½j‡shz‘\ôpî)'—±¶©ÆÎÝoeF’Ÿ»ËáYNSëÔz‡¶$áÜnV—cS²óDyþ¡µ1ŸáËì©KÊ b‰.Ñ£­ó¼Ìqüɺê‡Û;]~ÞÔyFõ©)ŸëË´´¾Æˆ ž©uK@ÚKd@­«Ê†˜#€úJ5+øaT˜¾§œíôEuYÏãqR•Ííì7ÃwÔç§Æu¸ÜŸ\Øà0Ë„¥M¸4»ùhâ®#Ô²e5x¾À5$ˆÛq›—›Ê[iÖjæ/NØ× X:S9øjáÎ¥c¶îÁIßjÅü8 šp¡Ö>ÍIé·fŽÛ|+‡ÂÙŸ]Õ°+³¾H8pe[1yxü ‚N¸ Æ|ØR¾¨õ Ày0V%ÓNÍxê)Z+ÅQ_”\¿¨þD“¯Ô:³ ?ji4ðîl&©¼AÐ_×¶Ão‹8¶ä¢àr!j¨P¢WÞàö«5þãù¿.\Ïÿ1ኽ] p‘v^™p¹BM´Í|¦‹(l‹ÞŒ†ó¥«º»mØ™³y —KçŽÜZ;“ö&¡„ë3¥dÔÒU…­éÇ®:äséÄà«å"Dª—‰hF‡ëP#›³)‡XSO…vÂé׫lúÜßL‘Kç‹pƒm¬àÒ¥¼e —KWÖq°/—.ºÖeXÄï½Ê‹v+½¶ˆþÂ7çµÆi¯»Ã¹[7‹a.3Çœ3ðGN%œ[®F&v±X×E©1D¶>MšõmÝ­w7í&jN¶Á¯³ôÇŶýõi}0¥±›ÌL«jTÜó"›²Ë(/ Þϯw8¯›Ô{ö3yb[Ò E3 ˜p{V7ZI7¾%ðu¹qþxHV›Jgƒ—ðó¢í¹ò5€*UÝýMïh¨¹|TK×¢€§Gâr\ = xšpWű:'®¬ÿ ¥U¾FfÎã¯ÖD4É âCþj —Ž샫Yë,‘ÿñÜõòÇ33ii;oÃs…­fNFÂc`KY|!ÀŠŽ©Ùj8ÝÞ®Ñ/=ÔËö.¸„«ˆ"6B–ŽÒjìÙÜ€so`ÛÛô àО>3ÜWS.7ú¦F¨gCk™™ÔµóÎ}F£c…,,8T7ž5\éOÜàÙFë>%„Á‡78¯¶Í(¦už’p¹ò¹xÓéU,×ê´Îö§º«°!ÍhoÑ»àD3ªËñÎyƒJq±Ú›™_Äý°©v÷l¤ÉMe ò´ OÙg_Mb.À"æTJJ®¼u?ÏS•a7ä:Õ:‹S+_§Þžƒ÷®V¾õ–C+_·ÓÎ(à û¢#Süü_׌vÊOCL³T«1Ö¤©â¤pž€Ðÿîqê7#Ô o§ü<ÌJA]_—úã~ò¥W>šY&îpµŽí鿱À$VhoË•༢ӈÍÄì> «ýÄ£©-ET «VsÒ;ü QPAõ½µHlöãZ W¡zïf/£sZ ëpP÷IPÛóhVÁÕ åd§ª[®‚²õÆ¡b…J]£"á \˜NãLÿ»ué|‹õ5\¬cËÿâ\輆ë3¢ Öá[×õuµŽÎÏ@+lá¦p¶ÀÖfbÂÿøÞSèF†aC>ÏÖÅçÍÌL¬ÃÅ'¹Öck¬o4\èxL½¹)VKC!E|ÿ¾,q8ûbY¯Ãµ%h-žÇùXô„Ën?"Eßçᥞ™—ªæ|ÓUœ]ÇSRpµ íɈpƒ+Ox.¶¡š`ò0ÉZÌT4\Êy«„Àè$˜yÓáàÙxè¥j2œ„+97±rÕPwwîÏ—AØùÂV¾:Â*$‡g έë~ ¯5ðÊËæHÃ¥ ®¢=A¤µ)GÄf¹h7ã`õ®P œ—\ qnþd W+ïÚ›w`åköNÊ®uȃó"Šý¾WHÄI…!ÇŸÎ羟à;móÚG6γ‘Öž={èù“Ÿ„çöc–’1Öà-ZxFTe™œìŸðƒNг­ÂC›•]«!ÐpUÞIfÊÞ’æÿ×OçØ =T›ï"\y_š—pnŽ­ ¬ˆšÍ‘TwÀ[ë5bµÛ[|Ym\³æ)»¢áB´ýv"ô܃ñcãþúÒ™VßGÃÕº¾Ð[·G&ü ½,¹¿Æ%†Mš×áÚ§B¤«[ß«¶LlªŽ¥èýi>ÇO“ÖáÀ*Äó]Wúß­ƒ¶Lg2ár&%-*Öÿ*è<‡»Æ€Õ;ÛXI®ÀŸô!\UëÌ<žîp5F7[{Õ)þì…&‚uŒÑ×å8ÿò¡=0cvÖÌÞµD´Kã%h¸4Î)Xœ ˆàç¯}ð­- ­mù|ŒEh¯5yÖQ:œWqöm0v¾,Á€O¸T“•"ËUMâàR{coûKgÕ,b\¯Py¬ôóóØÞÏ,šŠ½?ûÃÉΑð5mþþ™Eyèë¾=Ó?´·Þ €ÿññOö«mظþáé'enóy] ÿúóçwÂkkøãë_~{f°]{wÖñþ§üïëŸóÃнÎõñÏÿ}úœBl¼Úöÿä!øù$¶—ÅüçÇO‚Rç°ØãgÀ÷1Òvë¡ø9,þ~+¼ì§zÎ}+ÑKø]Üí ¿‹»Máü˜²½‘1ëd>SDáˆá}[‘º%°œ}8¹ÛœÔ]ãÈΈbpÎðŽö¸ý|¬©#×$­ïÜ:xú«-O.sM=O½öΖ®.°»±£ò2ÖÔ±sëüÛÿU޳ÄáŸ#)ø¾ÀŽeX©æ¸ët.“ÝpöléÚ»Q]m! »ÇŒI¡õdêÅ繦~¬i{÷Ö%,´žýDZ@xΫöXh= 56?ø²ÅBëibó5<`zY\ ­L¸d—UÏ5%ÿ7Z+¡õ3íÁÍ5 læÅa¡ 3Œ-Þn3ˆ”*5ØÓRhÙ¯¢ŸkJÿ° '…–ýÊÙÙÁ>0;,ÚÀX.“5 CßS{;s!´ašJ{¼rt®i t‡^“Üïw,œT•Y”wÀ•“ 9'u”}5¼.ð³teçø×ÛËUàëÒǧœÊÇ™Ö)BÃ¥kÖ@7¯/ó¹‹ôÛ~uÎJ8?4wöõíÌž´‹4ãxzÂﺣ3áÚÇU½ ·Õå G7yn«Ë;.}\U÷ЯøË;ñÁ×´hsN|œ¯s¯ _Æ¢WÓÙ¡ïdðôWœØXáÐIµJ"XºoÜǵGf“j¯#& ×Nʦ½Ü!”¯vÖ0÷餌©yM5ÔI9)WmhòÙa±¡ö¼†6Sl¦“2Þ[5H±ñÌ—lN{™=$.‹ ýUc¾B/ãrp ±ñã4T—•—qÕÅ(uÌË· í±(ÔË8×IPRlˆ—©Ï©qÊMŒFÎRlد6r¹Š¹‰¼(6•ÎÞ*ÜM4¶„)Î.Äfüªä²n—†Ì·,vá&ª±²ÐMÔÞk8w‡Î,r™]¸vfå&úÁ ûºt›Ã©ÐÐ×…›hn<7q¼æ.R¡ãésà&6 ç.ÜÄA ™Ô–ÕÊúôÏŸÿø~c.ò0•螣„ãK·Õ=G G—o«{ŽŽ.=ÞV÷Áà… ÆšnCò¹¿ù6ä„¿ò6¤m¥ÝAñ™py2_R·!Sv ~l/ñ„.gãÆŽç—ŠÕ2l/Íö’9Ÿm;êXYÛ&°ïu{Ó7¯±R[S!ðõ¶½ŽŠM,:hÐàÛöÒ¯WW”aziÇÃë.ܸ+Z{ng¢Gܸyp¹:Éô2Ô ÉÀY®ÙšÃÛ0vÔÓj¡7+¬'©PÓØ±£Ìõ.–ýÊ ‰g–m\Û^σÇÉZôŒþŸ Ë‚ˆ`ÒØQöß-ÛBaÜ‘ÀŒþa©°,©Ž4êä¶™J›ÓBa==º-%·»Æžð–ŸB{¼ˆµÿáË?ÔÇ»¢á*3~Q-ïßQ8ð°yáa‡'ðF€äƒß--r½cßåÜyÓ<çÎÞÓ2~1wÃFØõ摚;vÐÒõ¢¥ÛçÎï vÐ3 ð»®­Oø]×Ö)üŽkë®*¥ÉäÛê>»†£Ëí·Õ}v Ç—Ûo«ûì.·ß®ï³Sø×ßþž¿ªI\ÜÛÊ;J\o°Þg=w^޵6”ó2 …7mÒ6î;w‘Ö¥óÈ^8hÓNç4œyØýö[ÔimR§ê´ÁøE ì\9ÒæeH»7ýü–ÁÊïÛëf; —)±ÖictÅxÛ^7·×ú£VyìèøCl÷° VXâLr±gPÊê¿-æ²6c…Ú×/ãç.²ÝçHXa©+KvËÈÚ8 nBa™‹ìÏK+ß™óBaéGìñ>4Èßgú/Ö“ý±DÛvÔÏRgW*”ÂÒÏ”äçŽúy'¢l[X(ìøUËs÷+ÇŽÊr‰΋ÌûyiöE™?Ôm/6¬°9 3ÃÐ?TôBaé¯Bg€âCÁ ËkÔDaÙ°‚/Paeñ!Ì ä@-—¸PØ0{8œw‘Ï¥5jám{a©¤£1̱£a®¼sý*óÞmäm‘ÕÑcSÃuíbß8Tâ6àë÷DVÎ#«½ð’‘Õ¨Ûȹ¿Yµ¸ -®p¸°¨}£¥»'²’sgåg‘UPKwWÙ ¿j8#Ë ÎX Gmin«N4ŽÛÒÜVh$·¥¹­:Ñ8hK‚žmêW5äʳâCšþ¡u¥-£q‚\yGïñøóô_'~㊕g¿*Îéàd¯ÈØWžEF[êNŠ'-:™§ÀråGúïMë” ‚“êƒÖ8œÜö'‹¢SÁÉþNÄ,q‹•'ºæÖŽ•'aG»¡ðÊ{ʇ29Á¸Á&½tà¨ÙÙ€ã†Á^+ïY}eóÅ 9ÏlB®<)ï[oƒŽjH:Ó¹ò$o'g(n°Ñù‚Wž¾fôZCW<^yvQˆÌ~ºyv†`O"¨òïiamØ´Æ"ÿž¶Ñó^­üôïÕ‰‡¢ý{àZy8s’Ÿ…o/wsÑÊY«³‰d#ôïU ²†«Ê‰Û"®œØAœ píßÏâƒöï|]ùwWü­¡qrî¬Q÷IÓ’þÝ‹ jîÔ‘uAåd:)9wqý»1v1wvÐG3 𻺢MøUW4y4ž{à G½Ón«viŽ{§ÝVíÒ$÷N»­Ú¥8èv»n—&WžRɶ`(jÔê;V>Ѐ<œT$E-…àñÊÓ(À5ðï¡,¬ óЉ¬8}ÌZ¸òüG9Àü=å°…ÅÊOŠA£³'”¿·ue±òóW5èOi®üðïÖ¤ÑWiïȸðïfóçïyÌÀõÉH± ÿ>¼ kÿn=ðï‡ç×p¿çUþ>Jrî†q†#ÎßË(>ȹ3¶µÏ ÿžãbî"Mþý8×YÌ}$-ò÷™Ãø]M9'üª)§ôïã6<…£Ö·U·N Ç­;o«nŽ[wÞVÝ:´îkJRØ–Ù[0÷Ïüô¿Æa¬éôQ¡¦¿NéÇžÛ;ÊÎݸig½Ôa90w~†ÐBâ€2s_Å­c¡õä«ÏˆÅÝÎãÆ+)´ÓA{ÓžÎônVlBËÜx69èX³Û …–9è`ÿ·ïçÅ—·'Gõ@FÀUta¶ÅÙÄd2ËÁÓÒËIMÜOþP¡&þZ·ˆ±qQ)q1xv†‡ ãI‚ ¿ëqž ×6õ^…èÕOøÜV¯öH8~ÂgÌŠïb±ðëÿpÙéyÒI…Y9!pú‘&¿YT([ÖpyEÀ¹Y)eNªîIÆç£ÈFuómI£_lësÒÐéw'È.‘rã8<Ìpózét¢\7qÌ*ÐZ£1o\`n‚i1¹%ŒÖ_(‹üÐÚ•m³Ç*<⣿ÊÇ$ÚTƤWþ˜b¤R[¬³ŠŒ) ޸ȬEHcV‘”÷“Io\¼)ksÌ*²:i¶pãÚåǬ•Z›—˜­"—˜wo\š—:ãIA?fÅáÁàK<ÍÍ:?›G™í4å­çï³G%…«Ó™A³Ü˜^l$pÐ"&¯¼—Õp•(>ÎÇÅÜ_sþ­‰‹¹ãÖüAwr±QÎy¼r~ó6îç%¿®n»_¸È¤¾~×p~×p .\°>ã}§ÑEÜÊâÎaÊi±ïÇïlã˜ÕA¦¹ïý?Ú öjßÇÙDµ56*Ö ±¥]U5‹}w„áæ¶2÷}²kòbß<˜R’º;ðÁ·16X¼ï$¯éûù¾€<›~8)±ï4€ ö|š^*8nç¹Å¾³#ˆþx…>› }g5†œ ¹¼Yêûñ;ãr ûnǾŸÿðPƒE—ÊbßçцÏ!볉ܞšZëû}®ÆÒÍ}'g¦è¹ËŒv fÔÇUêœB{ì{`ÅÆâáÑF뤌÷=Sàš±u¥áÃÞVÏ,ìáí]¼Ø÷ù+ë·D‘ã ´{Ìa±ïdô‰\`ÿJÿPSó•¾GzÝ“›Jq$xí‚s߸¶)«x>DÄöÙYä.ãù‘\Äó®âùYöYžÇ¸ê4bÂ"žw)/æN¯ÅÄ€Ø>Íý¹¸˜;J.ây9wq¯Çó³qœ;=7sqÏOîÁ€ßõ2ð„_½ ,#õYî#pô~ðmõd°„ã÷ƒo«'ƒ%¿|[= ààý`Q»Öpr*¬XyÊh5.#¢m»ùï,^yr*dmtq+žbåÙ¯Ü`¬\cR WžÎ1è`×>Tš|\¬¼ëqskoS8mÊÉYmm$ë¶ÄöªŸŠiíC ÛìK,VžV ÏF£’Ž[n牕'‡?¥nÀhµfˆ¯¼hªïÃÆé&øÊóÛ´)nš‡˜SŠe±ò#t­©ÌñÞžî£е‹•ŸƒŒá`qó¨Ò4b½×*s¬<%Ìï#âéÖ€m[È<9Ö)f[õd/›È•ç¿òÇ‹>x¸òmα€j”1)ǼP™yé¶Úš`Æ–°6[³ô!T†]ö‰gõ@„mM V]—Ý6ð×Õ• atœö2€Z’¼G·€B˜MؤÊÌÄÖuÓª ^pi¡2„²âÓ–AtaMÙf_â§ïË»B£Ñè/u['i¸ª1lîN~|ûßóª•÷ÓºÍéѺQaæaâÓE›ÓmpN~‹Û¸ÁåÏ6æ*js×tܳKªêCî¼¢ãÚÍÁÚE»¥áûÃFâ2è™F°•—mÌ_=ó(“­üoqbil^kØ6oŸ»î‚îÕÆ=>òàÄ4bŒ®]4ÂeŠZæåÛ 52)5|Ò_×AÒfàc¹©4à28ÙJc((¦l5Á&Æ!óíÍÓe:`ìBa €+¼Kv¥°®vùŠÙôï6c…5ƒkÄàJaóBaÑÜõ Âe[= ¾®Öâ«…q‘ÎvÏa“Ó »[àqš­Š®ô½¿ô¡õ}¤B®õÝå—ôÀ¾û…ƒEfWúúŽæ®´ñØAOJ*…ÿâšaf#Ð÷ùl+}?îþk}ßòÐ8¶ò¯Õ÷m˜ ¾ò¿_wyúw&6?ŸáÜ•¾ÏDlÀÅëÛÑûódùö· ã zÀÕµÓnójCÐÈ“ÍKàôë5 ðyˋǰæÅ—þýŒiQs£ÄF²}ö§6Ð÷à]E§ÖMx¥ï1eLÏs³>ÿ}ýÌhvuœç4ü•—÷«áJ/³]µ¿[ÎVÌBÆ7Ô‚†ZÎÜr^ç Ú†œûË*Ã:ȹ‹>8¦õ£ä5à¼Á¿m½>º¡¶¨ÏßøPI{øçMÞ+ž ð8¯5ëTûDZN··mW°Ý|vÀùåýÛC5[Vç|Ö7ÚŸõÀÙ¡_»ã¢.÷=´707Mò>˜²7a Aæoª“‰xãHU¯*õy2"Ý©1ÅGè÷»7Ðå¾#GòxãX¹o³øòX$çqßWO¬n%EÝvÇì•“a¨åÆÍ&yÙEgdÐníòþÌ&äÆ˜V§EÍy\{0È.6Î\‰=Ò:ÓƒunÞ‡G«…ƃ.¸ÙâÂbãüôE­Á_¸Á§[ xãøÛ:Ñákù3‹äÇ{û”@0Ö Ö›ÅÆÍîy!'›eµÐ¸‡âR€pV-¬"iW¥ùß55Ç1‹óÇÆ5žUJEõæýàrÊó¾ŒØ8ZÌýÅFvóm¿=Þ8R-¬ætÉ]ÓÙ<~ø´³æ'îèSS9 cо,6.Ð"u¿KʈúØ(Šš‰©y1ûâbãBß—}—:NQ+uæ£èÔî.YœË˜ÙQŠÀU.3côÌ ì®S¿ zƹ ë…ñ‹,e6ez^wþiuНûu¢”¨JøyW.DÌ´E¿X:|*c&KǪ1.Rc^, õAªüã#¿£_EÞ÷ëó¼-RÍ⼂ó+þ-›¨fÞ«,åÃÞ)t¤Bâ/£®îïÒùÙmãyùBY3ìlÕàu‰Â½y¿üõóã·>­jçk‚•½¾¹ýg'qâé‘5T(Åø%sµŽN&ªcÜÆ³Š3¦¥pÑUÉ–ïMxòˆ9…Ïè¯Ù¤jRl¸é®È­ úl3áâØ—£N{È ø|MÄ‚Þ8ѺiïO¨ZÔ€ÏÕ4.8 [ ’á)°I(³›£{_‹`¼¸e$u2x¬²màñ0yx.Ý!\ãQãÆL4D•;gÑ€kÂ5OKð½qÁ¥¨mÕÍŒÓ g-kè z²!Vq€_g—3\Ifs*(­r«@(u?çIu1-•BGØ[ò~m­h{Ëqkö2"6V,(í½¸Ÿx´J߯Š_Î8Ðe«)“¶‚ð1zÓ¶Nâ+Ï©‰{çSž|'Ú’Áàeä›ÚÏÒ”'Òu!ε4V³u¨Y(:@O¾f±~a¬üÌaë¯,¸ôÑŠ¼¾,ŒÕ`áµ–š›»vÖ5ýNqa¬(EÁžï‹n5­×V] 1# ¥ð{g:½q¼çÃ‡Ý “t"V¶ØX±›È–Üal¬Øuçcé@¨€›8„k°û½¡·³æyûK^+rþ^Ÿ¦<Í.Û&YãÆjžþÇÖhþÇ­[+ÒŒ+›MÇó­ól)Ñ-ŒÕäXŸ³䊞/y}ÿñ¼Œç{§PõTÇ6Žó\…íÖ-çe^ça;kÆ%rà* ÄHOF«˜;ê*CmKªbîì Á/9gRrî¢çÖ¢¼Ÿýbî©Zy;µqû?éUât'ä+¥Õ\ÌèbÀ민٪|ª£y~!±±[Ð…û®†u^Í]×*­·‘[)N}]\=hw¹6—@´jÛ³ÀYIr¿û_ÆšRr`µÔ ,/6º“8q¬)yNʥ͸ëW2 é~OàÿcoZTWf’¿ÁG¶œ‰`îœBXÓ¸ó¥NÆlÎ/:´ò¼•wYÊêœpß®¶c¡¥÷a«‹7ðRgvÆ/„v:X›Ú“×(fªÿáè°Ð²—¸]N*4ú°ï»–:Í´ý.° ýµæ÷n!´´aøxž†7¤jo¬Æ…ÐÒ‡ÄL6cMËaµ©Toeº:J?Ö4«¦íí=,´¬Ýe¿Ø¨^ѰhãhxкmTGŒûœøìWBKH|v3xîÖµgK ¡¥ô¼ÍxTpk†¤«vHººÜçhÙ‡ÙÊáa \WÌìªb6n*8hw_ª˜8"õ¼T1cƒ—3¿¼;KGïšèqÅÌ»X:Ü \VÌÐÊë+~ݬ˜É¥{‘®³œ»®˜™UŬ¨¹?>rVNõ2ñ¤ ËV!ÕÁ«}ç‡üÕ¿ÇPÂâ}ñ²¸l$îìêòÙi„ÀeaÌ4¸sè{À¿<‘V!­ÆP#„^êl—t“†³’W«˜“ˆŠ·ói gA„ÏÎ9]ò2­K×¼Máü~CÍ`wû±£ìÊâ–‚^:Y³ÊýYa ¯ÑEÍ2Æ¥NW÷ãyõ@t·ÉÆD®.6FP:ª˜êëú(³JÍï‹'áʳà$ų±0/:µšUIãÞ…³&·ò ˆZ|{9ïûW2FWbö ¶ Õþ{–Þ‹ÜŽ;àªjÔúæ,–ôú¨hÒ³‘wñp+,€’#=^ø…ɰÂòâIøŒsK~¡°~^æmïuƒÐ¨%æÚÎó²OÝw“RÐeŸýÆJp@ÙX½eŸv›VÛ:y^ÚúË„¹£'‘+,ï çt¯ÎX™¬º|é¬È„T,VX^ž!o&ò7ÐVXñ”Êñ*ñíâÑhíÅÇ…Â’ÉV:y€^l{ÀÝ,–ÀK¤ÿ±÷irZ(ìüH ý¦’hc^ÁãëO+–¹Ô©â:;B£'Ê5’,nŸ%•Q³z¢D)yêVqÝHžQê· ßq‡ƒ—o¤ºIlË‹¥CwBe\gKÌ‹¥c¥³¨ÈD´òú$4¯îMŒÐH.ßu›’K'bÏEÝ&¨Á?>r^eMÃÒy¨ÄH[šÙ{2Y»½3RÀIhN¥Œ+®®”š¸¸v €+¶‹_)uƒûD¨ O4|«©„ñf­YpÎâNÆÒB+-(…œðÊÓ&l÷zÓ ÊM N"^yÅV2DŽɓ ^yñ nñêæ3£båiq(§Œ_xi-à+?C_ÿÏ€˜)å-A8/ûx—M¡‘¯áüléÌWž7˜=Ÿç'm5"6Ú\¨>ä®gÕÚ‡ÖÃÍåŒWž_ý,†F­õ ^yY™ð-%ûÕÊÏè·ÓTòÕE–ÅÊÓÃÈã‘Sµ´tb±ò4„‰&Ãã®øâñÊ–Ç%tÚÔ(L%â•ï¼-ÞXÉÉá•çÕ!ðmO_ÂbåÉÝMw8)v¤òjåéYúºM ‰ÜȤ>ÿwGÕ(îëKÁÜð#)ÿ¸Ž.Ê‹U#U£Ut/:JÈjMA—K÷ªª‘CƒWw7)7üz úºŠ.¬}±j$—NœÞ,ªFxð¢!Õˆ¬Ö öÿôéŸ??þñÕ÷ã¼Çý7´“E£´J¸ŒAL{ñÁ£Û ®ÚÀ¬áô#­S{Ãïøòá%϶‡®ƒ“TÀå±­qÐ#€«7ը8_)pÂÔü½ÿnjþoÕઊfM·Ò <¾Òšç ?ö‡')9ðzÊA6uzîâ‘g{ÇHößmïˆ àm¼¥tÔRÀ¾·ýa¿ ‹×imF'c¿ÍË},¶ii(\yœØdŒ,¢&uθz‰%N•¡‡U!ø„U†žêl¹èàd?°Éc•!!L»×XÆ–x~¶°ÊðØæ¤*µ-aÆa•áðŒëAÙ¹ U†E@g;kY‘ÙRˆÚX‰òÌ‘O•™¯„öŠ9VF«Ég·LÛÔTj[¨ k[Î^Üì¿û¡Ý”E+ßö‡·è÷E= {ìgå˜Å+!Y¬2¬º“ªÐù…Ês³ú€¸,[š¬N©2óóí)íyÌþ´®¯Ä4gO¥¸¾5›ó"²^Ã_Y_aÌ8€Ø±Û±åéíÄ–­ÄÅÒ±(À"¦ù~ä¹Z:øJ¼Š€B\,ÝËõöÊœ\:|ìvÁ‹yºƒ£÷]G@Ùnþ<'â—û¶¤æ®“óÕ‘æóœœÅ6É»yñÇ2„©¦Ã£¦Y—ÏÄm†0®½'áà›dà÷!Íî"•vÉ¥£’õÊëwÞB÷E Þ*$Þ;¼tì=6ã"Š.‚Ÿ béÜ&ƒ¢ [òfàÒqöLIø·Öx±t#ˆÈíÊUKÇÛai¸ "ld®4<5zó/çìË€¢—Jˆxé¦>ÌŠ,yï‹/¿ñŒE5ÉÖ-–n8û:t_âX:æßùTZ²DêH‰ÂçIKÇ+¶ m¶âKÇá$ç`ÑŶX:QàØ ¤¬8Òööîúꥵðd釓]œsŒdžÀï9ç ð7Üøràë÷œs°ÁËs»èmm•_.óÃçQ>ç~±to<çK÷ª_Ó‘Ê¥{ã9‡\:ú«R­±Øh?øã#¯˜XEÛI¸òÃÕ*œz©Þq“N?R½µß|Z8h;(ž.¼µiýþ±ƒžoK8èV»WØÆ ’på­> C»cqkóA9VžWÓä1ˆ•§®0…³±—z®u¹òä4d ¥àÎÚ5kÈxå«Ðƒý{ÇcbåÙ1IY“d«V•JÚLB¥„PfÊ"W~Fɯ~+Ïè­aëÅÊ{z‹ô(\ê‡X­3¯<-%TWdpx0_+ïùmvƒIR²xåÙ1ÉÑeXÓfÍ|J®“ L_Ê ´ŠíbåI ’Ó8Lùãû÷·?_†p¸®D¿ˆAéÀu býKµ×1H@·ÎWp}â§!ÓË¥ËãÄŽÃS¹t,Ô0qqûeó‹¥/ÿT K‡_¤•ý|\†liq2Ïüqÿ'»#“=Œ.2ygÀe£¬föO« OCb'þ.=b2'‡– «uÌ›¾¸º´žMÄÁ‰1`ðºG¸[?ã'áú4Ä/^œ1%ó2i?²ql ½bS3ž¬/cƒA1ˆO!¸< ©S èœ#„„¾NÇØÊ.nø1ßö¶•†«Æ.óµ1€}—õŠà8 9RR Vž×+¬q!¨àͶ0Á¬2”n‹‡Á‰«°Ê°ÒÛù°< ©™ÐBeèGª*Cb›öŠŸÁ*ÃŽ3LXÄ6Þ¬2üÌ$fÛTKi ÊpªlŽÅ6Ê_*3ï>·ù±%ìêN « al¶øÉøbâBeÛ´œ}×Ee¶ä VZl©ÿo9WPJyq‚lêúSŒÁôÖdW*CŠ-6&b›ö¿OrÔó7žsì/,E W±?»ƒî ^ÃÑiÈêâÓð‹ ¼úÁõiÈò ^w.Ë—Po¤.í„ëöÝ!¾tLÂV^^/÷—¡_ù7“0±yÕ1 ë”8àºßR›Mo\IŠØê’Æ…ƱÊÄ C®óªÞ8ZÙªQû‚Á»åŒ7Ž ÞÏ¢ x ή6ŽÐTcvZ’4e±q¤›c˜g<|Y‡oŒkÁˆºƒ Cà*|Ëůˆº®KSaYšŠ®£4c_ºÞÍ/¢´dü"0CsWQZ|Uu­·‹¥£áÛ–ñ©p|Y_šµ%¡}×ñ—Í/]ï–KgX³Š¿ôÜ÷R¦m uÀùÖAµ ÎÙ(ÇñcÄí[Âæ¬†ó· j2_|@T “°Iàtð5€ ®ôgo¿=‰LÈe —(Wfg;¦ˆ)5wÝä%ù”QåRÁ#…³*5ƦƒÒÈÔƒ—§`&ž‘±\Î÷ö4\viçŸcK7¡}qR´æ¼æK_C#S³ÿ¾.Ѽ1ðz·MY ðqs¿§+ÚÂÄ ¥NóqÍÁu•¡‘+¹äŒU†xñà:»\Ä6í©Å*ãYô·%Û„yD$T†]° 2m[·‡U†D@Ž(³Ó57ã •aÓO×ÚÝò¼PÊeÞ¶‚" jIJ]¨Ì¼Ÿ¶˜âØv?h¶¦*øÍMÑ9k « +õ³ü¶%ì¿›ŠÃ*îog‹q:ø;Å`Ä_Beø&¦óófƒ7Ž›ómu%";¼qÔ»‘(×Y1hÆáØ8¯©â*×t#žþñçÒÖY¿&0j8H× NÄÌ ]ѯ+:¢Ã®l.pð¯b ²b0¼Èxœ[Pîç[Íþ¸ÿs޽Õ!l‚Gؤ5Ý€ë^’­µÿþw?<ìÏé ÿñãæÚo ;ûY÷‘pe¬üùÄ1«i.lhíþÀà…MŠÞ®º9Z§©a{n=¡Æ¬X—È<ÎÍ\T4ƒ=îkj:{N%à£ÆÊÝcÌæÅÆyÆ/rsV¤O£¯ábÄÇÚ1šÍÀ`·ÌÇ[øÆñ'™­ÍcVÌX­2¨-²[Qº“ÅG¬M(Ç-ácV6¥±(4ý/í» mÉ'öiœ8ei6eq1ÉBlh_üÍ÷Þ3dðöRš/Xl‚fá C}¶R:á}ùgUºøRTIàÊP—¼0Ôqéé×u½Š*‡¾³Á¿òþ‰µ%¢Á ÆêÉ «¹?îÿ¤+jXPTÙZ' ×–¶w¨ ýï~hï¦Íc5Ò×WØŽã#­ii œ~½•X“ÅíHM"ƒ„ëŠY8:Ó³"v¤ÔIE0x˜™R%Û/îT›€àâT(Ÿå>úõjl| ØÀÒÉ$´Ý†³Y¼q¬J± EVi‰c¤]ðÁJuïomýŸrÀ¡Q]R 7Îó(`üªýVQ€qúw3ß« píìM^œÒs.¿N½uô8ß²s…ä×…·ÆÝ3]ðÇG®nËÎÂG‘kT8*š®Ü¸­ÊïQÙǘIù"p^°.íâ\@ç¬Û<Í‹J$Çì4›Øfû<1xîÆOÑÕšNlž$6öì ¥oØ©bðŒ¶e¬2­c%¼çW®¬Û 6êM {²cgkrCZ¬¾òEnõ’wÒðÇG–N72½=ó쿞¿³ô?Ï¡ÜN.âû¿vPK\$ó¥ô«;’ùfcâW²Âº³rbVúëmŠNLzƒ0S:wá ÚUÞg¥áÂìSDÞ Úyàó×ç5ݬ*[³/Ò×çeÂdí‹Ï]¸âC…²hÛãFÂ$/¨?‹’×°órð,Ìr/>8!Ï&󢊟G1àû?‰føÑÈLÆ,iã1àüA©Ý"{Pþà}0Kw` \ñ–¹4Åìü¼Bà¸ö˜),ŒÅYŽ%p:÷vÒОÆªh&7W,‰¿ZsÄ„*fuÛ¶ÅÒñ›]g Ò–Î1¦ùðÒñ‡B÷ÍrFs¾ÈÖt8AM®k’ðÒ‘ãÖ6 ª0ÚÅÒÑè¯tœˆþ¶èlÁK'¸;i,ûCÌ/+ËÙŒƒGGúßñ¥cÅ»Hì<ãÍàD,ɇk’¡‹4Þh;–Žñ‡7`ÁÍÌËrbéø¯ÎÆ9méø­ólðÒñ3Ý´(Ë…ñÒñSÙìpÁÍ!kCçþ¡=7¶¡¥Î z8©Ï Îo{ZÂ#F«iÝ%œ_žùp°—Ït­þ†^ž‰ñïŸgxð™~|m´}ýÓÿ~~ÿÌn€Ìcö9øOÿûöLÕ¨øåøÃÿd˜Œ$ úù‰þÊçãY£O_þü>[n·¯ýùí™ýÊž\°ö÷ª¹»åÜÝ«æîVsw¯š»[Íݽjîn1w¢±&û™ªò¹Ó>[-†šsg,¼s÷¬ãçÜéæQ³œ»§s?ŠCÇÜÙ!ÂrîžÍݹ“nØ©nübîÏ=ι“.Ñ»˜{ AéQŠ>æ謒YÌþê8è>çèé@^ÍþÊž}]Úo"!4·E<÷ÈçnæÜ#+2˜ÅÜ#Û^;çé¬Fd%çç7̹G:÷Ps§¿²ÁŒ¹'2÷m>ž'æžØÜ3Ù÷D« ±,æžh"v´Ã>æNÿàâJß鯎þõçÜ;ò‹¹Ó_Y7í|žs÷5.\È|fsOyÎ=“ðÀ@…msÏtŠGãcî™æï㪞œ{fÇä~Î=“Y¹²š;ýÕ‘As/7r›Ýº€ç^n|òsî…F«)-æ^hºut?æNÿ ¹hs§¿r§µÙç^è܃[ÌþÊŒƒŠ¿¿ý·,”³pûôï®R‹\…àœÉï?þ>SÝÇÇñOî/å3€Gk W¹[2Æô×¥¾ò|+wJ…ýW¼ “á#íewgìS8Ë R‘E9a ;˜ÂÅ%cW#äóÊãÇ¿E2ÁàŸäÝIÑá½ðk˜2-áƒsw'ñ[ôuÙo¡‚¯s>È{/Ššótz”)\>ÀXòÜs²]ÍWÆÙ+[:Örè¨d¨ÓÏòå-˜»H§ƒ÷çá)gÏÔ…ßúc5ÎK uŠÇ½°*üLªÍOšõ{Èóã£í)ó’üì|Ol&\‰v•›óÊ£fÓ¤VÃ¥h; ªp´ÕÀ×?~¦ ëvs~]Hs𦟂Q8íÆ+s1..Öû~Gá¢;b;q±HRÎ|]¾ámÄ÷ͪ̃¯ ÍÖeLŽ29¯ Í06dði»›nz”Æöi†qÉ¡rlã£4w¡í¶¨AÊmé…K¶q\3’ïs„2T[\iFš×°©o<ì°f07±?”;lÒÀŸÑj³ùÌÙ…ÊØö’’†KÍþ¬P™ß›[‡žúQ¸4úU¯`3‰Æõ/ V»Š º yÞyÔp!›¾*À1xÞ$¬µ·é'ó.nLVgrš¤·v+Ï%Øì—€ÐV•{òž.›©Äì‘Ðú Gƒ—geÑZhηñNÄÿñó;yŽ÷8­ÚÓ^)´í†~ò{œ³<>²#— s^ãÈÞ™{µ97é”:fÎFGÑpƒì÷IZëýˆ¿(üëOþu{¶Òl·éL\Šöùˆ”Ž.Üè{Há2Ô¨‘ºCòd·qž-RÚNꜴˆ& ‹HàB¸ì`\JyòÅ8¿EÔNxÏwפE¬i¯“ðçÿp©3íZ(Ƕvþñßþúøý•sû³¬û~Ò?Ôø)H¸m[##xüÂù¿íd׿>$õñ‘ íÚP·Š~?Θp­¾¿Äu©凡&pa¨}cÀÆvòìë\3’Ë Ê¼™÷5)\È|²½Ù‡ Ûý8º¥pÂì‡Û(„©ùV/ªS¸píÊ@ ƒÛNáBãLÎgÂ$ÜDM ÑÜEãjÔŸp3Z‰Q¸PXìÙ™H(lõ}hðLaw{^`ãj&5\xŸY„0vê¿Oa\)lý¶Å [JQ_W¾¨½P€Â¶SÑ‘éòøÈÉEΑ] hÂu:“‡‰òVcǬáJ/m'-2U4­¬\8)oÉ)É&êÆMà2Ïöýår¡°žl‹Ì¤f69.4Ù¸TXë\D 댹&K…­Æ+¬+#Ó%p•¦‡×ýüÈ—n<Ç÷ùáè¹D(5.ó.ýpµhÆuuT.®¾m=]“š\­Øw©Ö§¾cM–p¬ÖÐõgÔ¾kµ®yŒ*1¿~hÓãã÷ï?^• í‹*á²|¶Ÿžx (Žç (œÓˆöŽÝ‚°ÍÊS}ÿ°{™õݵ† Îõ½œ-L„ƒ>,ÕpÙ¼/…3¦Uº0w©ïí1!¨ï)Œ,Ÿ®¼,ËCb_ Ø8©ï5ðÕ­köû¿38¡_çjmZç¤É¹gk¸pÐí-G5Ùå‚Ć«uýŠ-X“’:™®ð@j²µZeîsЮÕÚû€tÍ Õà•Z§övÿUW‡öèÏó«üp{µ·H¸ŽÛ5}˜E¦qbCáLýš¿u”(Ž»oIÃ¥þÔ6PeÌh(Jáª+f&[F¾Æðu¡?¾:£‚TÆV³4œ…®Ç¤Õ—M›4á¢úV ZDÕ·º¤iHèÆ ‡—|€<ß”à×E®i¼=3]©eôMøšÑáZ3²_„®5*Tƒ×e”ì(`}*—͵ëéÖ¬}~Z¤”>Ú~±E¸²‡á#p©?í!4|D4Z0R¸ƒ£÷ÖÀÈ·õIÑpÇF»­ŸdèêLp©—ÉÚ„ôÒÖ¹' ~-×€$À¢zܘ;™ô/âO n&”Íi¸,ª›þ¸® pýxF€ÂYG·û àÆÑˆ†ïû/v"ûíKá 람š< ·èlÒYÖ–J±`î2o­!<‡²yÕéÊ˼õ8ʹ pü ®ÛŒRPhŠûÊë·ŒÇÃÈàyÞºÌð=þ«þòëÏWùËÔxÜ®ýe»3¯ô}§ïf …+åßÎâ*×wSjR4\»‚χ}IYéòh>ÙŸK—à*=íWºåónÜPàƒŠÕ­‚ŒP'å˜Â¥bÕôÖ¢mެ¼T¬ Ìíä’1¸8àMÕéàÐhšBáR±âÑŽîR±ü вUp¡X‡^tˆæÂ¬Ñ ‰z|äIÒÅ!šó£&?0ê­Æê›ƒª/ý• —çÝ釅ʘ¶¤áÂ_¶ÖèxÙ461ø:ÓŒcãQãuck^¿Î]YܬÅ.t9ý„VTGó¤áQ8ÓŒVà@ßRÒw§¾®\dU÷p™w íÓd;<}ÿñº¼]’‘pwÛÎ3‘ú^F_p ÿ.ß;Χب+óìˆ~Ÿªn¥7túnj&¾.糑¿21W(\¥é )|§«;šÁܹZ§”Oÿ.˼v†F.2h“;g^ê»u ^é»õØAoãÑöu¡ï±³—…¾×˜Ô‚“,ãäOS)/!•À׈wÏ?cijlV^ÎÆöë_Ü„öv¥†«uÞ;s_Ö¨ü-ì&ã°›ÌÎ+Ó‡?Õ†öÁ||”^fÉ™7iœÚ Œ¾ÏBˆHßkDÒlïFà²GFë7 ÕÚÏVJÎÕº=EÔ>SkãÒô—.}2çÜ¥ÂúÙ+Îý‡äiEpu¡õUN |]±BûÜ…·ŽÅ&°qRùkD’¡¾—äÀÆ Ÿî£5¦Ó5y*@lD‰¼ø{â„ÑÜAn‹a­IØ8¡ü홢Ŋ _>à ·N6á£)ç„ëÜÚÇ‘¦Œ=}|d' —Þ:³;0ŠìmJ<Ý­bsM—Càêèªs ›«—M¡r8Ïžd™+OÙ$pá”kzê$VƘ ¼ mmý~·ˆ¢]ãkk¸8ºªèyÙN]9oƽ —9pïf/Üm5))¡û%û Mulq“µÐݦ<Ïø°ø¨çw»GáƒðLàÊÝzûb5kÀßEÛ\ÔÆ¡; V³Ršç­sðŠ2Vƒ±‘ÿ™d¿¼N/]´£â60ÊݺַGѳ{K½´´%/4µÿ§áúH9¢U{kÐj¸¼¾o]†dÛ£ñ^ù»ÝFÔUÓ4BzÔpî”MÎ©Z·(XyuöäK‚=–À…¿ÌU-‘¿lý2¼8V«ð•º [cO%6û¯¨Ï¨±}82ÇÏ_ÿb!fMx¼þŠ„ÎÃ¥“ª±§‹.<Ö#lãR2£Z2—Nêe]¡q5elŠxbùB/“™W’F§§mÏuü<Ôpu%i‹ _A óxíçóÊá™nvUç)7O&'\^A p õ2“Ó¹ —-Pmò0Äl‡sVÃõD>eÑžžp©—²˜Z«7BL¡`99Öz™ì<$K'›í˜óPWÞêi½5\µt;¸QŠÕ켚»R,k³CM‡ëŽÌ Qc^¼Áúª†zÄYAÂÁËD¦@þ¾ñ³¾OàB´C „›¨™EFpaô;íPe&óš=«$õ )O%Žò3›û/y ‘lj>:»„8 »Âþ 1ÎP\d¦f ¸yS¶Q-öÑY|œnæ5¼WSí)º V#ÄÙNe^Ùã*òC±úì«=æ,Àµ=ÞJQpP ˆUz/ W4—¸Á”¿=@g4\½íÐOÔsyœ.ÐÁ‹'€Ú+ãX´Çc…ìë2R µ¾m4ì –NH°³½‡ƒº&Gg¹ÝtÎç“A//<—Í€¹kúænPA3cÄŰÃßÌIN ÃŽ¶¿*Ôpf¶óz|äQÚZh÷§0$\Åð¶n{€Y³3cãÄðÐ×ÔdÜê!p[{|Z5o¸|MÅo7›6nÐÀ \„ÖŒ·±…Êøù6¼hõÓ_¯ÔM|F‘Àå5ÉÜoË ßœsöf _€´¬¼ˆA¶j7a¡É¹Í‚}—F¿d³Œú%\¥¦5"DQëò àŸþøFá-„ý¼ÿÅ|ÄÀe “Ò©°*¶q³ÑP‡+—Óò*‡O‘ç tíMöSaÇ?_¤XϺôÀ€«N¡à¨¿ÝÒpÕx¤g¤B]š=W \Õ¥]É‹2×8'p•¡÷ ó8À…^Ö -À^=ÖmƒfLàR/K´‹—‰¼ßÚö€dþp±`ååÛŒ‹“yW ¼t‘[/髸Î&$6²u§‹ÐEf7ež®¼Ðw{r"©¥NûÍÂÖ{mWÂ5º@ÆuÍwö‹É_Gž-ú®ë_1Ðu`”Æ…˜<~8O[GಀU3ôRI£Ë sAà²?{ØPeøtS.YÊ­ˆ„T&X¿¡¯ËÃ2€e.Cžr¥_VÏ.d|ÈÈŠÀe:íbÎH¢À¥f„¼<{7vÀ¥fÄãa-óÕO¨¥SNªVyí¤Zlc2€Ë2WµUV¶RÖ_W*cÈ[¹í™îQúŒ4CÆ´ÇK¸,R·ÿëÏtÿþøíë<˜ùúŠ«‚GG'á /€uð¡ -lórÈ„«·]Ù?⤬á²NezCFÅ{òÎj8oÌ·8 OlÚ«Y.û¨'×åøßåÏiK'ë%øw•æ.“:ׯ­ ½¬é’‡÷$Û|££ÐvoÜ€¥S/¶ööîúö@Bpqþâ{b#ÔÚ¤€Ï¢´bö,ú¶ZMôe¿Õ£Þ¬¯©ê¨}üñm¨LÿçuŒhBœÎ~`töTrÀÍä.¸¼òÒê°êZÒ¼G7áòøßvæ„"Í»‘V¸|k§}\%3³óKÙ4©8-ŽÇ}k àâ8Ðøˆ´ÅÙ‘À•lúˆú¿ØPfÿºòB6«p:$Ž-ÑM`åe—˜ha•Ì’„vÂu4uáRãªQÉàë-Ø$ û<ôýùuúî¥CÃåÊÛb°Ì×Èn¨L¿Q%îV]Í=z à2ª g%BÉ|U÷dÌ\Yï\ê{ Æ´ÑoSêúZu>_gKÇSà*óßFhôíéíð>dœ¼Þëò$õ•ð^¥P}_ïå yCá•ð^äåŽ×ÁíûÒ@û¶4pWÙ0˜wŸìûÒ@ûÖ4°¦By”Œ?Ù÷¥ömi`3Ôe¾üüɾ/ ´oN]õQ#›°ïKíÛÒÀæ&R܆›°ïKíÛÒÀúõ”³Àߕڷ¥Mâ­µSêÞ—Ú·¥ûÒûѸªþ]i }[Øæ¾åèÇÜß—Ú·¥ûç«÷R÷¾4о- lf¸>Ù÷¥ömià.uÑNsñ¾4о9 ôÞmnê÷¥ömià¦Ñ^¤º‰w¥ömi`³6¾ ¢î'û¾4о- lênCA©}_hßš>Ü(yÙ÷¥ömi`ûzÞÆÓO58yWhß–î‘M;š†ú]i }sh«ÐLû¾4о9 ´1Ú<„ö}i }sØ^”*Saߕڷ¦©µ¶Ÿ!ñ»Ò@û¶4pOÿcšvþ}i }[Ød>7c›7¦uðÉÅ™¼1 ”ð7¦þÆ4PÂߘJøÓ@ cÈá_FîÒÀó0ñ‹2bä÷Ÿ¿a÷±WÂGö±WÀGú2©5üá´´_FþR¡WÀ¿/^Å|-üÇ3$ ¼rî#…ÙÄ+à#éÀ+à#ˆñü+à# ù+àô±ôoÿ:}sûùµbóÐc›/äÚÕÛË—*3Åæé±!ì­^†¼–:Üúù•pòêÏꥫ+8yƒdõîΜ¼u°zßl\'œ}¡-Ùïx'}!½›WýÊÑ໥%-fW}‘/—î ìÎûÂàûõ¯/´]à¢Ëäµ¥ý…oï¿ÒÎÏë÷«¾ WðªkúÝ.•>>6'åHpRÊÙ•™þ¡fÖÇΟðÃË8Êäìïî4êhÉ+eoÁ‰cœùóîZs½Ž±/£‚ïŒ1G 'Öí¹ÌÉß:ÿ”l ­:ÙnÂOšÖüJ‰.¹IÅr#?t5bðê–Ï¥kz¢íþ^ìðÜŽãZÓË}®çnœ·hî®Ýä‘p5÷ÏïÝ“øÜëäs K“„³¹ÿИ”Þª¹»ºïíE‡üöÏ9÷Æ#%sß¼9û¤Ð?|x(%ç^tšð#< £„šû!s¯Éé\ù o^ÆQЧ;Û¬4ÿAÅÆy—5¼¹ ò«²õŽM“)¼lSæ'\nœ+gÇc¶qMè“WK§7®oŒñ3©¤d\íCL—-ÚÍ9[ÆÊW5=7Ž)lMÀC1Vé{ÝÑF½n¹¾WÑ65Ë#b£[’‹1.¶×„ÍÌk¾TæÝ¸AáJe²‡æ¢&ðQ}]¬üÑó+ìŽè~~žKçZ?,5÷ú«ŸÏãóöÁzSv>zýç¯dKl{ÿ+ø_ÿŽï·®²%”ñ‘mŸûÓân²?ÑöN2ô¢il$üˆ=©þÄþ&º\º7§ármÜïQkKëÇcö®Ö±¦³{u‡/yˆ1lÞ8[GçSÚ^ð¥k—›ò–¼š’sé˜Q©®ÌÄÓ™pÑÞJS ç6©²4á¾aC³†KeÝnÒ€¡ŽÓ•u¸\:ï¢Ù/3J©Ë¥lÞ8_ºÜ¿é¥»=—úú_cô`ÚŽžz óOÍGÎn™ 1qÛÈñ 3|e W‡‰ ±5ž.°Ks{'œ/°ñÎïp½À[v .ØúêV#ÍäÂhŽÅàBÇ[ Éfîæî\:nøªå0çõ/DluãçÜ;\ØÍ=¦p³‹s¤fºœ W ìÎÖRß«V × œ­;—îã4JñÁÙ´ixýÕß_ççíÞRä\ºÿý K×`ˆÀÙþøä¼Af7·÷’€“ý1ído~¤úûË1Ïßb¹2ŸFaŽi¼b0áGÒÍìc<£h©¸äMÐp¶øè·-8|ŽÎë:Êè7¬)\†-Ö!£ÜyÌ®4#Äm?¾l+ÿÇßÓr›c!ë×px¿X@2®¨ñss1N¯Úá\vʤ‹Î=åà2Ö6Õ¸c‡ç¦Çªæ®‡Á,Ëij€ZïñЖ$œÛÍvÜT#>s“n¼Å >ÎpˆÀeöÔ¥Ne±D WSl/ „y™ãø“µ; )øySãüä›­ÝÎhêË´´¾Æˆ ž©µ ­¡ÎÔºªlˆ9ø§¯T³‚F…é{ÊÙN_T—õÜ8'UÙÜÎ~3|Gmq~j\‡ËýÉu ³L˜QÚ„K³›&î`K¢Î¸†q;nórSy+ÍZ' lŽëÎ,©Æ|µpçÒ1[÷`¤oµb~œM¸ŒPkŸÎæ¤ô¿[3Çm¾•CálÏçn°+³¾H8Ær. °Á¾®‚1¶T€/j½ECpŒUÉœe‰O=Ek¥8ê‹’ëÕŸhò•Zg#áG-¦ÞÍ$•7úëÚvø DZ¶=ù*ár!LW£WÞàö«5ãë?žÿëÂõü®ØÛ içu —+ÔDÛÌgºˆÂ¶èÍh8_ºª»Û†I0›×p¹tîÈ­ÁÒ%¯æ®CÌ”’QKרá9OáªC>—N ¾Z®Í ¥ó‰hF‡ëP#›³)‡XSO…vÂé×o#÷7SäÒùâœÇ G+¸ty›AD‡Ë¥óÕÙû–.ºÖeXÄï½Ê‹¶~â¼2,¢¿°ÅMÁyí£ºñÒ^w‡s·nÃ&\fŽù°IÚXç–«‘‰],VEçuQj ‘-€O“f}[wëÝM»‰š“m.8K\ÌaëÑ_ŸÖS»ÉÌ´ªFÅ=/bñ±I!»Œò¢àýüz‡óðºI]°g?“'¶%­P4£€ ç±gõw£tã[_—ç‡duàlœ+~^´=W>ÕŒ´]5䎆šËGµt- xz$.ÇÅУ€§ wU«@pâÊú¯PZåkd†à<þjMD“ ">Ôè¯FzéxÁÁ>¸šµÎù÷Ï]/<3“–¶ó63C¸ª©?—Ž}S#Ô³¡µÌLêÚy ç>£Ñ/C ªÏ®ô'nðl£u‹®ÃàrÔ+ΫíC3rk«/W>oº#}¢ŠÕ äÉ8ÛŸê®Â†4£½Eï"€ͨ.Ç;ç *ÅÅjof6>|÷æÚݳ‘&7•5<ÈÓ*< g"œ}5‰¹‹˜S))i¸òÖý‚HkSŽˆÍ„sÑn&ÆÁê]; 2œ\.(>°íÑŸ,ájå]{ó¬|ÍÞ·iµëçEû}¯ˆ“ CŽ?;œÏ}?Á3v6Úæµl4œg#­={†ÙˆiµÆAÇ?û1Ë?Ékð-<#ªI¬UðƒNг­ÂC›•]«!ÐpUÞI=õu]z•à?v:—‹på}5j^¹U8´2°"j6GRÝo­×ˆÕnoñeµq͚φË.DÛo)BϽœ Úȗδjü>®Öõ…Þº=2¡à=èeÉý5.1¬hÒÔ¸×>½Ä·×­ïU[&6UÇRôþ4Ÿã§Iëp`âù®+ýïÖÁG[¦3™p9“’Ì‹æà+è<‡»vûVïlc%I¸RÓîwÜ´ÂëÌ<žîp5ÆúíTÁë LE°Ž1Úãºç_VÍÈÖ8 5³w-íÒx .sJg£%u®Ï_ûà[[@Z)Úr±H{m#H8¯âìÛ`ì|Y‚)9 žp©&&‹,W5‰€Kí½í/U³ˆ5FTpµBïF¶÷óØÞÏ,šŠ½?ûÃÉΑð5mþþ™Eyèë¾=Ó?´·Þ €ÿññOö«mظþáé'enóy] ÿúóçwÂkÛ‰½øöLÿÐ’ÍÞXÇfÿÓÇ?þ÷õÏ¿ùaè^çúøÇçÿ>ý?N!«mÿO‚ŸàAb{rÀ~ü$(…q‹=~V|#m·ŠŸÃâï·ÂÁË~ªçÜ÷añ·½„ßÅÝžð»¸ÛÎ)›uEÌ‹cKŒ†#†÷ “ºÉðö¶õu¾i~lÉ!öÊ2ƒs†w´ÇíçcM=¹&i}(zðôWZž\fû OÏÀS `éêû;*/cM= H¢±þí‰þª¹þY¤£È.)±ÙØ3·x8“sMÏ?…VôÍØÒµöƒµU}æšúÇŒI¡ dêÅçI@ó¬«ÁyÂB¨Ñï-©Ûš–9…6P½²äš$ýÖWBKÕλúšÁŒ—½”Іž[{Ÿ²ø¹¦aøw¬–ºsÃL{cØ ÇšF6óâ°ÐÆÆo·DDÊ:Ihîm#ç¦ÌKÙ‘s^Zú«–ã5ep,ÚÈlÊYÕ8Ö4Î;>nf!´‘ð}Ž7#Î5”îÐk’í~ÇÊIU™õÐIyç\9©3pRGÙWÃë?KWvþ½½\¾.}ÜqÊ©|œi"4\ú¸Yèãæõe>wу~Û¢ÎY ç‡æÎ¾¾Ù“v‘fOOø]wt&\ù8_s´Œˆ})ÝäÁœðñ@Ô„KWR>.šÈË;Õ;'‡àÄÇù:÷ªðe, ñq5úNOÕȉŽœTµV=±aK'Ôf¡“j¯#ª¥ÓNªfö8©Lc:÷é¤ÌVÓ^ïLRNÊUš|vXl¨=÷9M±™NÊTxšKŠ u…B˜ŸØœÁbCáù ½LÍÄòBl¨f…pÜŽâ^Æ=ÔmÛ²YˆÍð2ÅmGB{,Jd¤†N‚’bC¼Lëä‘¡›¨zÂbÃÜ=¾an"oŠMd¥s¶(ÃÎû”“Ë ±¿Ê9Ù]V¤›°mI»ÔÕ,vå&ª±²ÐMÔTÙk8w‡=Ç|Ú:ùuÞ%# ÞÎ6€×í¥_·%dèülö@l„'tå` çwü‡-Ø8â MµIí#¡ë¬™®µþêv*l 7oô·ÿ;³¼ªÕÍ·Ë!¼iã>FK÷f¥¿]xNm˜U2K÷®ž- þRÏåV¨µV × (»†IÏhæ¢á áÙßW¥læÒ7Ä™•7ÝÚÕ™7spÙ=#ö—Ì€ôԦᕷ{ª2ÿÃh'Üfï½ò‘—ÂÄ+€®]Üev¥Õ+…¿­rrøc(Õ?ª¹$'e¦=™•_æ %U@N¨¥d%N’“#´Qä$ŽÖ` ¯bÏÉRRúÛUëwïióí"V\6yVsøØ‚¿«±Ø‚¿ÔXLê÷‘˜-܆š,É;:Ži85ÇLH¿7šÃ\{8òð££j’³ã€ ýû¯jüðrÇ1½ò<Ë%Ÿ€S£ßU.W¼òŒÐeˆY÷~ž}"õÊ‹öùí6Ϫåé·‘+¯BØÞý~4i›•Ó·’¿´ÔïÁ­³òëW¥ž“į•_«Ò"Øså™"ÍÛdë|)+y@­êGâfåW”>·²ßGQZÛ¬üúU-TØ™Ÿú|™­‰FSÃ~÷.Fl¿×ùí n##6ú}j·ú"Ðï§æ·pk¿×ý>]úÛù|¶2¶ßÛt>èo ˱nô{Í›oWf:Ðïg\góíâ!ec¿™•W_Ë©¯¥²ß‰|´pÛN8ƒvÂWÃK ½F\A‹~æk™ÎÆ ×ö{ÓÕÛ‡]ÃKWYóG=…EFÏVßþ»Œþ×vE9|Œ…©Ñ>d¢ÅHPsªÕÂ¥÷#Ö›aØ .Í¿]¨qßÍ付^ZæÝ¾sÀe ¡P­Zæïñ¡M¬4V”=âq³lIÚ¥ £Óg ‚.¾|hUœÜ#ë aËC+ ð‘7‹´‹­ÔÍ¡¿*±Õ˜ã~d%´º9´ÌgãÃsM…úŠ>ãCËUd»½F>üó5¹ˆ­ÐÃÁU¬z3Ú8egµ„Mk?»“˜CËá­!ÕK£˜¤m-ƒ‡@šÖß6?~ÛjX×¶ i6øàp›GM »ø<ƒ[ ›wôŒ€3¸Ñ°§ïBkØ3)aóí\Ãz-ènãÐæÛÅ€55¬wD›oWžì=éþvþzû.„†=ãMþ®öÇ þBûc­aÓ,ÜæpÔ$«Þ”“…£&Éд®`åq“仾Ț$ÍÝåp6ÚpÐ$ùƒmöÙ¯‘•c¦6ާtÖÞLvøq¬è€Ú8žbS…ùu£UbÃ'èAʴɯóo\e1©àüºÙ'Õl\¼óç»& )¬[i]=ûºÙ¸•…W®¢IކŽq»qžC;{ÄjzÐF7Ž'¢f2ØCbÀÇì÷TsÀö{qöОÇ9Hº«Î o˜ÃõÆ%QÚ±:¯Iþ´ÝÆÍ2«œJ¸ë[ŽûšŠ½ç¯K,ð5á‚v¤”[¢ÍÆ-xh%!Ú‘F‹¦€7N˜ÿåî.ÓïÀ<Þ8ÆA¼w¬§€;OxãD ±!‚œÌJ~½qYðnG¸|ËÙo¿6n¥ß%ׯ-rRFG·ÍÆ-ÒBmÑr›ƒk‡¶Ù¸U#Öõ0?±þZ䤫¿¢ÿWûoÅ.X¡Ó‚ÛŠÛ´ ·9/¤X8ÊØ¥x:ÈÀiÞ¡—ÿ[qÐh“<°Š}ø·¿:y`Uiño{ò€Ø8<àë¿%Lø»&,ø&„9ºœÃu+±n´àNWkò‡kþUî¦Áh$€ë¾%áIJc$†ƒ†cäaÂeZý|\wýi>Õ#—øÜFzêèXa_^U.PÉWjâØUà6NU.Pßö†*ºzŽÕÂUåB·· fVý®+Ï?ñãzâY…Za\tl ³J…`Ì#{×™ O'«¼¶d2«ÔF÷2,2‰G…î|´ð£Ë‘ÿHKú5–N•Ë`bdZ©JJd’´«)=yTCÂ"#Ê#*k7“DNCiPdê ±–1Á¾üµ?+}rd®.‘É"aÆ%,2’ÂäÕ5N$,Z¨DFÀË9<üØÁZZ:“Ùx÷.ÓÔ(W(qìÇœlÇû]j´|VJdÄ'žÅ} %b9´Èdf(§ÀºÆ­8ôÛne¼ü½óœôcw긟ßU»c9'cvqh¸aÀ »ðn›X™ÌúåùŒñv¥&/ÏþÐKMü{ße…òÆ'ÒòæåE !m‚ )†¿k¾Í‚ ›k¾­h𠀃)8vƒo4ÜjØP/÷¾´Ìýè9Ÿþ‡ª¢ËÐqŸFët çù8:);Ú$Þ5W-\—„p`¾T»tç'&‘QDÙT¾œ4ÇÍÆñ{¾ølmã#An6ZÔ'2Ü|ò8Ã-¦7NÞó1øùU™¯¼÷o\.Å×ÃíñÆ­«’â0fàUIä2Þ8þ«zNñ°WeÎn#q…ŸÚF~~UáǦ¦†7®È€Zš_U˜{¿¬ºÚ¸òÁÜ6çWá'­7N G‹ÙùUU¤“”ÍÆUqW1‰«2>Kxãê*êÌW úùUUÜÿH`Ç'VéŸý.ª´`Wôï_ß_m9ÜD–-lc^ØÈà ËJÝi/²pc(·7:.î¾ý5ñ÷L>o¾]ÊÈæ…úÛ…&¬˜V5îïÛüº¾íq£"‹yú»¦¨-ø»¦¨ ¸Ô°ÝŽs8:°Zs8jÊŒK k5ß.g­…§»ž v¼Z³¸ÌÓõ¬µQ< Ɔv[*<WÌZû`[åÆñøà"†ÐÍ¥z ÅdÙûã1ʸU¼ïLw{+ÚÖ3ïÈxßYvßvfÓúG•V›mêõ¾ 3=„MÍ!…;‹B×  <ê1h³ïçïÈfÜt›k߯ t¸U{×]û>ÛØô•otpÁ’E¿ò*õ¾O;»xpmíû´Ì£o ¼¼Aø§N-ζ¨èûÞ¼§Í¾3û½›ïW›H14¼ïœ@%º¦@ó¢‚9 ›}—Šp 8Ÿ¨à}—N‚Š)×0°Ù÷t egÝgçÀkßÓŒ6쾺Ù÷4c†¡†B&6ÑM#S6û¾Þ¾öË2¬}O¬Ü—¼Ù÷õ«Fùòϳʅô”C-u³ï¼°ñê–iC£1Þ÷Ì¢ÀÝbñ¦¤áãQ¹à7÷¼,@ôe“w® MJsI»–CÔ6û>—ÆÀ¤¸ö=O/d.«:Oïûêr×ÿÚLh#œÝ¿ÛfßY]drÖ¾³˜G-.nö}Á‹;Ù…¨›øèŸFyµOxß9ómÍ­nZEDíÓÏ}/L÷}_ò^>°Ÿ³ ô¾ážaœVüÁ£ÛFÓöÎMdê¬Í©Þ÷ro¯ï¦H`÷|™7m,.ù;—å)Çcí;{~®)nö½}©‘É{alsùëô¾¯_Õè+`_{B¡Myß”-ŸOeûYäÑÂ5ŸŸæÀ |žÁ Ÿ_nŸm<ŽÁM§Ÿ6|>”ºùv^“Êö2òæÛ‘9ðŸ×ß®êZ0Ÿ_ ô·ó¸YÈ>_«¿k¸î‚¿4\W3u?«2ÜŽà-ùÃnꮆÚ>Û‰©»ÝI3>á’w×1wMÔ¨©».õ1ê³F}LžM3®Vžg´ö«’@¢í¨ü„WžE…ˆrȈ+LÙŠW^ÔË„â!WŽÑ\yÙ¬ƒî„XFvÇП~Û”ÍÊOâìÆ|&Ô¬£–‘&¼Yù•VÓ—þª 圖žbIs&³^yî-L§šÐé¸c¾EÊxåYð§9—1[u^yY/Ó6l5¥W^6Õ¨w®§›‡èÛfå'u--W_? >©mV~•òhv– «ô£p®Úëâ\yž0ÓbÌ(O·6·9ó,¬Ó¼Û´5îÇ&á•—mQ½ÌÑò!E¸òŒ<ΖŠð+çÓfå'y¬c”P„‚[iØzåÙ¯j ÔÃvÕg§ÐïÿûuŸñ’Q.Ë©<-ÜÖæ¸Ée™±H·þº¸ëŠlD†åÓÖšà #}žÊFdVÑ­o¥å¹%¢ÍV©„EFûä«„\ÑŽ±&‹ g-TÜm#%_°ÈH×T,]¤`µ Ⱥ­ wÓêweÙˆÌüÕ¤Bˆ]t/…²™Ìs Sì¢ïˆ_.OéÙdÕÛ|ÚÃñ²ÚýóiÏ”“³[æ÷?ý)ànZ‘ .ÈÉáÊ æ€{ääúÕý‡6Õ¸®>ÑÍN#?ä¿K³Ü†¿¼IÇuxª~ºIÇuÇ"ûu6îX`’ǘô¸Lä+¯Òuœ‹Òã"\ùàÀ›Íë2:6?t%ò&›—R¿ÎžšœPdòÎG2yðòz¼fì‚U"vjT×,\qk&èÔ`­B&\““á_ ÕdÊ? ë¢þù×Þ¸³¼tüêÍËàZ`©R±+û×1¸ØxÁ­À.5±àV`S°{yáZ`ÓÆÌp½<ØÓ ÌŒs<xºØ{Ž˜Ø£¹Î”w·;“˜À·‚ =劬À_…6Nì‘•sµ5»… =+Š‚ØsÔ†×ðçg5ö¶óéPf¼wÌŽ»áÆiÍ_Ó9ù¿;òß©Mep)ïõxIlËÄžnæ»B'¦=´FÞ…€¼G68ó¹¿ñ¶˜wöâ6ò>U$ƒ›‚w9™‚ö³1ƒyw-mrU§)ÄàÖ{à<”w·jB\ËûÕ«Ó(hÑËky¿+V¬‚žúÃÿV’Zòî× 0ò~ì[#,ï«ØG¬¼–w XÞ¸òBÞ}ðËû’8ql¤¼»*–÷Õ›wŸŸõëì/KJÉ{_Ò`­)‹éâZ2Ðï£À-5 Oï4 ÖM®‘[T×ú½ë"8OêHiÕp#ïaøÑ¼{êwàôU~ÛNê¼Æô‚ô¼ÕÊ›Ámñ~¢]8/Xø+‹÷O5eáFWÚµ¿›7ýíÜc–*®PK±ÄÍ· ‡[­›pÞ¼¨õ·ÿ{ñ¾è< ¿]µðÁœ6NWç„??Ëÿ4z}T¡–\¶//ç||ÊÇìpÎcùu n5anPùÕZ;[¯žŸmИ#ï¨Ád¾]ïwM8¼¼¦úžüH:œƒ—\ýFULÈÀÝ‚Ï =5É#7j½³–§£¹âc^½rµI±CwB²ß.;ÿ÷Á^èîóeu€W'Ü}÷±ÑÅc™Åã¾í¦”ßêŽ;"eV`eñþ‘ñBÙTßû:òëVr Þ¸™á懟5çé‘ßl\<WuDî>f<˜˜Ÿ’k¥E¼qÜ[è©yTàF-¤ÍÆ¥¥eFƒ¿ôÎ¥[ ¥ÕÆÉý€›ëvÆ•àÆ §`7B3ðö»"ƲٸÕ=/ô%NÚ[èiÌÜ-5m6nµj5ó®J¬7/+)Õ—ΣÃÍ[Œñc| Í­j\µqÜ)XϸŒª|;î¡ñÆ1oa_"b‘WÃc¼qYšq›Þ¼a#q²PævÖÈ­Lf½q™[Á¦¨Å~‰uYª›c­}s¹ƒÈÜxôú¤ÝÆå{j§ 5gãG.«]ÆÏ/ûÆDwíÀߺ1ѼmÜIÏ*`gpk²DÚžIÌ\û;÷ÜEB§ãE¼¼¢F¹ì"¡èåm_£Û{ ¼)dÚ,¨\¨x„º_ž½t8ª9åÍÒñÒÂRwÔ\7K‡h¡ ¤Ú—~–5úýÈÇ«ÔHµEJ]¸,ñÆD¿æ£±R>B§Ë‹Áÿ:jÉ–sébñ®]’çY$óò¨oá™ÑúŸ¿ýy–OcÄJ4ÇFÓ·püìJœøú,*´ü+Oæ|6aÜ0&û,NË᪫ÒèÑgë&FÓâ+€/ö×/¤Ñ¤ŽÒÛ¹_ÿu5¤Zp9¡ÅŸç‰¾ØoÁd7NµnŠñn®Ëáð…nÆe´pÈk«8 ¼H)ƒ‹ÊÑà M òÅ‘§káš<ú³e„å‹ìeu®Y12}6¬ÒŸ9‹lÜ8\,Ôœâݸàë‚Ó(D޳úžÃE :÷3çQKçÜ|º(ÎÝ@ƒ¦º5ÒD‚§îÇŠT7ï( qTµ3 ?o­HwËUµÑ ›ß\V‚”Þ½¸¿J¶:BR_V"‘­5ú€ZMuk¤áËJLJ rÚÑI<ÀËJpÚŽf—Õ,»èܼ¼f¾eü¬¬óĺ.ä˜Ë沚ý¨CŠÙÙiV±Y#õe•V¦yÿÙ¢Ñ&eµ|Ô—ÕÌÂ-5 W>"ëÝü.ysYñ…3ßæw 5£:ܬ‹dpCÛ)l†œ®b^—´]6ãúgçêäpMÛCÆLùiÙËÚî;1×Dfׄ¼k Âáû„¾ÝòTPø^4ã’K÷vˆnÂ÷5¢—Wáû™Wi:óíÏã?E%r9ÓqõÓ~ÛÔ•~Ãû¯|\u9%4éc4[^>êWŒÚ^.†Q| Fóí YÇÙ¨Ää,†¸ÌÀ WãÌØM‹KþgpáÑìgãÌx9ה熕éÄ—Nú*GÝÄZÓE7c(.¸äž¾•è«ýƒ…ÿ*Fbôe÷%ZVyúÎøvî’<?hõ9Fxf¸t²x?²<)42¦^Cć–—Óv Ÿ>€AŸ5¬N¡êÐ.ýL¥AdC¹ªg…NòÐ åX¿‹ÄœY!U­ÊL$BYƒ×ÈE}hW+ï1Ô<ù1¢5ombÔõlí{®i&°#|hÅ<Ïp¥ëøÇÑK2x|h9|Ø{]ÐÊ-T‡–q›~f ·I‰Ùí-£n™ƒQg{QÛ†T#6‚ÒþŽ‹ä‚ÿñŸ}¯À½F²­_³pëps;‡Û,tbpÐ-3ÿ›ÃÁµÃ­‚ùßnâåµÃ-nKêféxi¡Ï8ÜÎî>›¥7¿s¸¹ºY:¡Æ}ü7‡›^:îpK9þ›ÃM/p¸ù확~–Aþ®eò•Á®;toö]ætýžSK„C™­ ×}ȱ®ÈjÛɵ_-ž¸þ×ÌËþÊ: Eоd@ê˜ÜgáÂc6 ™3ñ¸Ì‚w3‰èŠ,ë1ëÆm½,\°‹¾òÉÑÜQQñèfë¶tÚå5TáÝl³³‹n¤¤fá¦ü1]u‘ªA9•À¾Û!æ8³vÒÌÓ­g«ø3þ+ë!rÚÿkœ4_:/íçÚ]• ÜgåN“˜q¸ 0#qú¬úa\ý*å¾áÔ<*¨ˆuˆ"X^VéÎrãtmw6ËZ…Œq_º“F!XÑì<”‚ÝIÍ^•È·ä ‘& ¿¶wzwüðh&@Æ\ \6»Â­1ÍzÁ™bª6mv9‡²wwÕ†ðõ»‚ZÜ,k¢žÎZàsG³´. ¬l@w%Frø V~bJ`e³Í– C'•FX`eQçΡ“XHM|GWŒ3‘]þ•8Æ¿ ù¬†ÕôÍÄPµqRú²ØõäÏÎ&Û—~5˜Ý%‰±šPHõKd¾òT%E n¿M_]R_È1yVÊ¥bá/ŒXU„oµIp3ˆ•0á[¤”¿¼õÛÔm­)€«pkŒiÓD}¹}Ü$û–±Û'ôò&[wU.¤…¡•¼qû4xlô€W·ðšÌË??ˬN<]ú]hk]®¯+ïB¥Žær}È8l-ufiªf$æˆ#¬ã ·p]ÐÚY­‡©o)5óí’ס)%¼nL©žÞƒ¯8ÃíðcëVJܬ¼ðJלÊ3Ð ^y1À=_Ѥ,cD·Ç+/ÁPƒ^#ÖSµò"®¶M©*8´’PqÿP®œ›/u³òËkÔµIΈY. ¯<ÔÖR‚]Ð[Ë%ã•çü+•\L8ïãøªP7g^L¡ñ%Af5ßà•O"«³6\‘ ö]S£Ñ1"¢FDËùðu—c6¼±U¤Ž2è¾W+ÏPl!}ýÍGîYÀ+ŸE*1ˆuª–ñÊ‹ÀWbµÀ‚ôÔðÊKf i5ûòšÂøÑ1,AÖâW²Ð×M’ØAû[EN§~˜çUùû__7%¥#­2¢’Ò¾sÓ`p]¡V‚ßT¬@¸är¬®Pk3€Îà¦B--Ç ¯Xé7èì,$àªbåtušFW¼›yU±ÒuaFja”®¸¬XÉýR‚+Xe°q’œœ.X±ÒzºªX¡»¼ÎƤfc"¹òÿH¿šN{ØõèåU7­ƒ¿}ØÌÎ3ûþéÓÿ÷Û/ßDÉÉÕÊ»ÿFäåûÕ&e …SF¥,¡ßÁÂùCF›yò— üù9žf¤ÊZ¸©‡mž@å›ïfÊ,pãp= /\3LåÛjD6á–uék‰Ñ{#2º î í3{ŸOŽé_dž~î|ÕZ2à6‡]Ÿí·« /ÁÕkè!ÿwÇlÜäýÜ‘gåR„iZeõ³bð±?üÇL œÖ_ À55 !Â4­¾ñ³:O®<ç6äçð;‘5NÝ´e8\Ž‘éû{|û¹%-–ü6VYò}[òK3f¨T¿ë mPñ¤Û|Ù¬â•ïXâ&ÆS á•—Ý Žñ´5DP¯àQµ5â•þŠ34(»3/ß±âù‹níT+/IHΘœ8{UZ¦26•{²YùEa(®Ä°_¾m»ƒŽÃ )ÌèkáÆQ©ý[(‡Á …qiÓl&?fp뉨{"b*n âî ÁÏþÛüåEž ëÓ¨)Ìx×YÆ"ôDÔÅüu¡œËÖE+¯(L ›æc9Ã¥†šËS7žˆp³AÖ§qŸÇò…÷µ^³9é rj WL娱IņrMJ®"6ùºý•¿ÖèUÖ°7¡¥j(nC,gžÃ9ѹüdÛ´Ea&„rB¬ˆÛ¤Ðš9u’ÂÐhÛsÆÜÏ-‰‚˜Õf_^Swû¥…‰‰ìÓM(g|"ÒŒ.% çï8¼%!³¶0²ïz+¯C9-oP×ÙÂÍðZÝ¿e(Ç• V^0 òn–™nS[YÙŒJdDÕy Œ¸MH‰2Ntr †r ¡3¯hV'Ld85±Èˆy†©VÊ©½¼HÈúùˆ†ì°ÈÈPN\zø‡(­ZF{aüˆ/·¹%"c¥#*‘‘ÑfoÉéÎÁc‘Þ’|%É(þåGß8,2ÜÕÓÿ¯`•ÐÆ)å¹MÝwò„EF$Éœu@(gùW´È°ÒªqU[j4ˆÓ,vèÚsG’R#jÓAÂàšåÛ¿b¨ÑêóÀà†Mbf¨ÑdV þ:jtEó\ibÀÔ( o·Aš‹×ï¸ Ò¸½wgrÔ÷eM+ËE¬¼¢Fyr›-5’+/¼;zw¤sHE*òî\gBíwgt<:³å~ŠÜÜBž¼sˆÌ}Ï+fÕ%f%Cþü¾cV>]‘_•$SýjmÊàŠù+áßf¹´ÖÀËóO—+® g 7ua1Áà¾íÁœy“ Jâæšð§ÖàÂ9ÉQZÇ›uQjxã¤(À$™”SHxãDžIjQ®ÜZªxã8jµA¯Q—†VñÆñ™tw•1½ŒbIxãøËÓY6&á6·|Kþ*j3¾¥nfû¶Ù¸É¿† çHÕ87ŽS®1¶oœp!Ýß®‰Y\ý»ÔÆqnSCÄ,ïÞ¸$Ê/z ã[‡™“ñƱº°Òu vM¹ÅçÕÆÉ®„]S¬ ”Þ8žJÓøÆ%¶(©ÔÍÆ±,*aI\–™]oœJ®Ðg5ÚÎá“&AÆ6ÊÞ¸,îy¢]ö áãŽ1OÞcbæjÅ'ê·‚§xˆ³K›c•ñÄ¢é_TaØNâViš‘ß_>ïè›íy`’rZ#¾\Ñ·Áî796ÌÇðyKßâÙ’Ð7·IÊ©Â$å¼jÜÌÀ969Gôò:8—¯Þ3*ÇfHLpIßR£”‘g‹šCO×Á¹±sˆ¾y=zº¢o®éÛhŽWžÓ·Ü¹†ÇIÊkn­86‚¾ùn«š3÷<þS:§¯˜èÚètm¾]¦ÒûYOAñïVò®†xw×gKþRçãàéüå;ÿêrE ç(% ×™8WPë³Ênù’?oøW¿Ï²+ˆ·¯®øW WµñUœE4òàÛ:מLŠÎq×¥àŠ@õ…ókK8}+«¬ŸÁ%Í¢Ú‰J™[˜U×èåM/¸}V©6³t LË7˜áSÂÒ„rãE]ÓÕ³òů&aJd8Ñiñòî(jäcj ‹L’©‡Á¹¸’0”ÈÏ–c"“x4ÝïD†¨0ì2Û[):Jdø'†Ú2$PÅÙÛÆ¨Öß¾ 5Þ~'2«2žê™Kyn‰ 0±y,22 v]V"=éò2`‘‘¹¼¹cK„c,æˆE†·§pí;ù}QÜêÚ«DFN ~ô³ûJÛ›÷õK4lD&ó¨] @ºÈ¬~KýwMƒâ]Ióû_ª¸œMüóë®:¼+RT.Úò1¸êêwˆÜ‡MW¿Œàòs™ž­O Nèåuuxö¸«_ <ýX!ÞÕ¯x\Þ\"´tvN Ê:®A¸tÿÀ(UÞÝUgˆpé<á®~#P®áÏÏRwK>Ω;HÍÝì¾ïNýš =µQýªkþã¯ßäî†ê?Ø®~¾ÓÊj¾Ý’ˆXj™_%Ê‹Vùþ‰"×Õ{8Ä#¦å_p‘|ÓÕ{jó«¢HŬ.ûê¹ZNbbG+—Rm÷DtK¨Í¯•oœÌ¡ d”ÔhAZ×E­6N”ëd6yfÁ»!´ÆæÈ“=ƒËå_QWð¨bHxãÄøùt‡ t#æÍÆqmê5£{|•ˆMø©ãÔÆ1¸÷pÃûyê~~ÿ¿íMKÍz:[dX8èŸÚ°}ègŤ€R3V·ýÕföŒ~y¼ k½(ôË«™L`+‹òæåEŽm‡32K÷<þ“[<9g*0O‘Ê,ÀšpÛ‚4ŸÓSý•ÿ»ŸŽ!NÉ¿ÿ$‡«G—¬tfO¸¹ëŽ®‹ó«˜¨Í þò¦CÝ4õ ¼<H·9êh%6¿J ,Z¶ ƒ+›#Q©Ýuà xã„×5§]-ÙSgywtWïXþï~|ÙT9ãþTï…Ýuã¾@ß.y]pÅWT4åY£k—Á¹á®ºT*­‰ >Vˆñ:Ï9’Ž"mÍvcpížéÖ?¬5ïžX<–ÒÂ~d|l’Ð2WOøM¤>6I¨á«ÝòX1ÈÂÏËJ~×ÔÒÜÓ&xldiU½úê)^ç[n9‘ fx·š>62ÌA›ðKu>ÁÅ )­ŒÉdžxúYÂzÏLOé>ÿ±'¥!ÿ)epsQ·º¹¨s©þé5„=î ûÝË RZã¿‘RýòN ÷WÎëÍË N»5ÀíÒ=ÿä÷¼.%tƒ—§çdÂÍEM)\ÄŒÿ»ǰ¿j—ÎÜÇW85·+™™Ê¯^žgˆúVÚÔs>¦PñËË’+Nü»£›pñ¿<7Óó9ÐZеÎÚõò¢•EN°jLkNµzyA ï2Rþïö[¬ÓùÉiÕË‹$K¿^^¦&®"Võò‚<ÞÖ„v¡–~yÕ¬s½<»mƹ!üò2N¾Kâ[e¤p¾}„ˆ›5ƒ¿0BÄO7–nÄM¾ÙñòêR!ú×!âåí¬Ž k_þùYZ‘4ÎV³´ð(^žû>áÖ_çKŽ ]\Ô ÎŸÞ/•L ϵËm5Ò˜pÐuÑ7íùU|FDÿ¨ ^^ð:ß\ ÇBÁUD¬^&0z¿lbç{`é´ ëμW{Û¸:øjãxÕ¹kT1K,œ§6N2 ²›H;sCÔÆñ¥&̬ú’Ü8™»C3ƒ¤ÿ[áC„ôÀ¯V¡ n¹‚¯;zàÁÓMéNÂbMË,ž®X@l„YÀRãòå ˆíld¶ŒÅ ~–ò3¸=¡Aà#mÊnY@HÁ#§S·ãf²ƒKo{£àC‚, ûíçËs«¬åì7, &üòÂ…äœG¾¥nÌÌ„zyfVQ)³€ÖÒæå¹²w®.ä\MÜÔË ‹Ç]Aí5br©^žÉ%¹3v$n €ï–ÂV•…Ýôú²ÄúÇœŽ#ŒùÑØè6×þóó›p>Ô5m­۴“…]nÈ ³3¸r%´vW뤑Rfî„›³Ùé[‰ó«¢ú*ûôñ‰Q}" þ$6)„»R&ãù•…+er|":´©æÕÐêËÏ­_Íù_mµÓúòsk®Õÿ2£…ÁMËîÔ6æZ¨»——W%mnSMè—,-à‹ÃM;ìP7SÐêä þ<þ“KFtu¦5ÿ!ÛÔµ›p9íè9äétMýßw9ò§åY2ÏàZÔ ö×­ÚWÚ`´k*Ð-——3˜Áù·8‡KvZè*^:¦ jе ]ß6·Y:Ùtè¢0cé8<­üTµtÜ÷½Ãùè}Q#^:á–ó6LêJ¢¼t,Vœ’‹0rs›¥ ©k‚Á^—ÃêwùŽ1;$¦^Çf,øC® /g¨Þň•_/pfŸq¦Ó"'jé˜9]ãé·î¾Àº¬Ê¥-¡Ý¬ð”î>¿:]©¥“¿º&ûŽ¥“á—êñÒ‰¼¥7Ñ›T2^:R®»dmtÛðoÿ8äÒm¦ -[óÇïÏ«ê#ªøy|.Ë–>ž&)èßÅ-–Óï|(Òßùà »ãéŸ~ýñíwQ{³rÖËúõÏŸ¿‹J¿täGô?üòÛÿ‰?¸üë‘.ë91âÓ—?¾­ã‡ùî-üË?ò_y•óÛ㫾=n¿=¾êÛãîÛ㫾=î¾=¾êÛãæÛ™Äúºr½Õ·ó±‡ƒC­og Œy•dëoO‡×·ó?8 ›oOüÛçWýø¶&:oaó퉻_gž ˆ)}ã7ßžå·çõí™×›%Ú|{æ¤ôÌÎ8¿ç®É@úÛ³Hž)ëÛ3ÿöY娿ýÊŸéÒç·–Õ‚ËøÛ‹üv¿¾½…ß|{ÛKëÛ ÿªÉ¬ô·ó_ƒB¯o/ìÛWŽ€þö¿ݭ3_Ù·³¾mêÛ«øöÊö½rßCn›o¯ìåËY×r~;ÿCÈ;y翺ª+Îo¯üÛiwæÙ¯Fïšùí1®äwòÞÄ·—º¾½ñt(°ãÛ›ÈsOëÛÏDNuóíMéãúöƾÞ6Ç·³_ù•-÷ß?ÿÚÊÉ]±½þ£ã4ÜÐëfmú?¿ü÷2÷žŸçJ¡ç7΀¢áÆ~)Þû{ÐÛÝN>Xø—ÿé^¬p:t?Á³øŒÃ…]tºKÙE£X"[¸*q%ž.¤¿ýW¤¼üWýŽáJ’‘có½¿åË«oñ䈪«ÌQ ž.32ܸÛÏ?üøMš”ñcq¸žœÙêEpeºÕB -™pq™209ÚUøveRvz{)ù+}á]ö.ÍéÑlíp%ôÃ/ÎC¿÷ʺýgžççgu´×™×ÙË«ZaÁÍÑîçæ*uU§ÙSkáúhŸ²òGt <ý·ßyŠôg\OW§9uSµX8?Ú#³kä3~@ “r¼ýÝ®ŠÏúÕÌFåpxíš8\ Øè‡#,Wëg<]IF¢PLOêf6xº’ Ow7! OGýnû.$ÇÈn:‚²èÛ•dŒ.wÐÛ^©ÝÉbã¤d”.Õ„„¡ßuÉÀd”D7%øgžú‘Hý– ¡&ŽÊ¨y'MŒÒÃ?y¦Ò‘¡1ÃʵdŒÜsæÇÒÅt›?®/ý.W%#µ ž®nm¢äÀÙ<ÁÂÕÙŒ]Η-ÊžF› r¸*¸ìÊär¶è{žÈ•—'صJàÐvUo7—xºr͆³¡»9´±ÃÑËëxQ¾n}»œÍËÿò㛣|ê²#KÚw¾#ÿÌXÃó³;¼pS˜“QÜ^çc`’½ÎÏlÕfá’ƒ!ZŠñÎuð/?äÓébê4“[Ê„ÁõÑwïÍ.:ûO×T#´Ðy¢ÎìÀ·+®PŠ»’×ôèg‹W‡‹fΣ>Oq¯àpY4âŒ-ÀÑÏîÇ þóûêÔùs .8ŽîÎJXðß~ýó?¿ý!gTœ•ñã?ÄœÝw}´©3“<~þ*ެ†ûÛçI}~‡vQ¯öíÒ_p+±\u 5á|Cß®(L謿` SØ8%°1Ñ5HI l×}èå…ÀžÃ!… aÖgs¸Ò±z¿¡04/ê ŸÀN¸س»b@;æ¹™o7º(¤t^VJ`ö¸÷m35Èó³T&/Ø5܃”ÜšÓ¹Dh(»Î«…¹¤;ïOˆ¢®ÝàJIEb‘ fMŒfѵï‘óJ`ãÐR®,“1æ!o$™\ ,…‘À¦­ÉàZ`ûeƒ6´ié2¸1Óï”I.ÉÇÒÍ¡°rß…α\¤TU¥u^\ëá~£%Èëú[!¸*>s·¹¦%¹ßB`ßµX_òŽ%YñXCÕÛ|2+oõp=GÖI©ñ÷ËOiz~þöíû«L¡cQ5\»ÏŽ¢‡…8]’ƒ…ËTš‘…tÉ»º’[ž-çòþñÐ2 Ê{ðùÎvp)ï-» ôy…ëÖånÞgtKàÛµ¼—€;ßô«jZù|åµ[ÎGL‰có`ã´¼—»Šw¾9 x9áO—bí©ÝUƒR’k}oáJA‡xûSµ$‡Yò(Žk_5,É :m®Mz %™ÈŠÌûô„[±ŽçL +ÉCOh¸ëByêá)càÑÏWéa?:Ði¸åÇÎèïžpâwtALÀEqVŸ ×ò3úB‘éŠ<[¸ìÉy¦^@æë½OWò»2jHd¨_+ÉÂu=—¨!ÉèºlÝI ®¼oýBËÈûÖ—´L ß8¥ðJLIF)ðéÊÖôýÞóP2º5ü’qídT:ƒ]F2JŽ^í¥&š¬ß'C•gs¯ðº¹µ|@¿ݘ”1ÓµÀZ•å×ò3æœâ‘Ÿ† ƒ+œc$™ïj‡ÂáŠÇfr¥Bê|p-—…¨ ¹íä‹…+½V;!IЩž]ß.J X±ŽË¡‹RsÁµS½ë5‚7† ö]4„ûx¬°‡7ÏN2rßÿ|×?*MØ÷dúä\©Å@¾À8µFàÛµÝÚ)ŒCQ]Nu¾òÚn=C9/Ü -Á½Ê/5Ü ?NKp[KöÐJ»õpù©3nþ×õå—¯Ò—e ~^p«/ýé%“ò~¤°Ïì7œ”òî[\&ƒ›øph8>[©Î…ÿãÐÉñÒX&><{0p¸1Oï¢j='>ÐôS‰—W‚uß š¡®´[ׂ5&-@§mý|Å·+ÁJÉCË‘V>•€«oIW’¿ñͶ%®+·#>ü¢`Mø[+• áV°.l‚h!-ÝWÂËìè&V^JÆå•‘0d¿¼|ét¬ìr0jaðŒMøû(æ„[ŠIõ¬°Z&Oß„•ÛÙÐj™àﺘæ‰z~–æÏ. é0Ï0ƒË9YÃ7ë2r¶ ÞPÁË‹1s€©î?|þ»Î-ÒÃYs•Õ¨ä¨AZÀÊ+‹4¶3¦Ìñõ®i ×ÊkRZ:uš¡v]Ríuq9Ð4ü}×Å„Ûë¢ËŒÇº3Tótu]Œµ»®JLÉÉMsmŠÃó³Ô2/Ò0Æ,¸±H‡³%o’çÆ1¸ºÂpõ@ [ɸ¾²s(aÀÇ8›[ ¸ôÍ’ËWæI À•A;:4aS•Ê ®Çºt›£¢{$úÂcpc3œ¨ðisö+‡ëK¥¸‹Uòì™ãº¨håÍ¥jÚæRZ¸èÈ~¦í&”íäbæV1¸º.²—-cr)©€o×ì"Ç.¯‹Øí8°òšwÙej‡ìͱyßu1á€wgäÚ=GË›SgØE­þÔq&öšVÞß<Ïýºøùå5×…÷klÛ‚£¡KAkë4/rÂà:BoÿŠ¡³$‡«[r»R³”$÷ ]§nÁ5!ï,ÀC§SœÓ'8Üø–n‰ØëÚ÷Ÿ»l‡Ú®Óš{LpÍçûÙÎȆm4'›r¸ÍBª«ÞY‰&à* )7 êí÷´YºwŠÌÏ/ÛhHõØç£ýv£a]»<'6]!L9Äó³ l5lìGž4ÜŠLêuŽ“Ó2¸Nu>DœÇÐî¶£®“Ƹ?¤;k À•`Q«¦+Œá¢ÕÂÅmóñðÖ[·ÏqæW˜„Á…м.$q5Æ™,ÁàÚ››âÝ®F«È6‹\«ÈÑZ lðqŠ ƒkÞí}N0,êg{iqldRC«¡$×–ÀÓuŒ'Þñ-ÓD·8°tÚÁmTdÊféÞ'ïTä]CòNf錊ìâ^vó®Cûue;|ýöýuø(’ÑpË»éÎ3ÑòÞfcoWòr½Ž)‰X±#þtUuíîÈ®äÝÓœâÌáš8_üÍEk$ðíÆL¿“!•î ±– ¾]Šu)õÒïÚÍK³Ã•íë3¯åB/oä"VЫo¨xº’÷|g/+yÀÆé,ã)À"¤Vxº$Îc…/n£/‚ÎMÀÊkâìé.ÿ’ASG-Üø¨ëQ°ü¢zÂßÝT›•8ÝDGò³ þô;ô~ùy ŸŸµ–ÙæÌû2£vcë9RJÉ{gÄ“Ó2¸¦ÄÕoä½_udá*ا;k]ç)\çwó‡C]ô€ÁME-0¿¨¥Š^^EU})PH/ž®LÕÎùCÀ.¯œÀÓuFˆ-ÂüáÎÈ Øw)—Ù»†Ó“<6:=iNm×./7‡Õp¸æÝþîkaþÁ™Ÿ‚žpàòòq“ž4O-¸%äq¥Ê΃3Ò“¾¾6=©‘†ÏÖÅŒÀ–•.ÊàÚ Q–MzË­Úfçv·-‘ÛÅÝ{WÚºÝÙ¦ÊCÔ•X×Qp³Œ»¹-\ÚÃc*ñ¨«Üû£X•²•J09*'žöuç/÷Ð8¥Æ}'`ß•¶¦p÷uÕ·BœC\±sw'lê*áát²píÙŠ÷¥¢ƒÈÝ€ßn¬ñŠÛ†1AÑÂmDÙW7m’4ü½©YÛ[¡œùž 5+DsêlÜ,ÏaÚÿ̃óü,ÎÐKÅ¡Lszbì­ÐíéýÝn6;àpSÖ\|e@Cb-\ß 5X Ãp¥Ó»®o·2Íi×:½Ü µ: W.2ƒ žôñÈ#ª¨(Ô»ÙëÕX/¹ÔbM\‹u¿<"tŒÕœÁÊ›¨wŽºC_Õfá:ê=ºÖAzÝ|§Îø¥ »ÏbX’ÁW^Ý¥þkñÀ„¿…^ÏaÚ èµÏ0·*ÑÒ„s³ŸŸÉ{1žíWkˆoß¶åy·ÀrI>#-X¸ö¾åڠú›òóØ0¸Vö%¤Œs)Ó¼møËK±îäºAk<‰G®ÃáãJD)Ò>ÏÞ¦®•}ºgqOöÚwþí‚Ãw³ä&÷Úœ.iuSYp)°ýB‹vî[O×­;:Åg£°òÚ+îï•×éQ%lá¶—€>ýoàéšO/Œ–äÎüûôð„v2Hwnbžn«ûòJ˜mxžŸûúºJs?Â$®s‡£)AEÚMùi92¸*êq(‚Ä9ÌnQ®¸µìaˆ¨ßÉÂU|8„ša )çÁ·+uºHœ;õõèÛůúµ+¢×Í»•ã¼àš^ÏK¯#Xy-½£ÿÔÃ-Í£-ö]èá”cn.ŸWéß8­‡ëu©˜"¾Õ߀Õ™ÔH`ûÿ\ÀƙҟÓG÷rŽó ƒNÁ¾<ÞŠÝ\Áµl­v…˜æÑž;ÿü,?‹È‹Ú:ÏkwbL²·oùR·&›k©7¡«;ÇÀdsµàº)TMWìI»¹ê:› ®”r7OC‚‰•9W^^%m¹»¾[±è0òµ-\…®:½ŠíTè*D?ëb8\ÛÀwGw¥nû•R Ú¸¿uCXÐÔ¿½•×-Îr¹JK´ºxÿ®Æêö`á³{ ƒué_½YþuKÕ®<ªá8´­™/+Þº^Þ¤Œu26íÿÏ«“ìç×ÉeÈ4“¶&ƨÛÐÏβŒ«{ƒk¹¤;iK4ÿ³pRÎÐiå’›ÛËàº|ŸB…dÇÔ÷háRÝ„uÕô#!=[¸TʾÖp±h.ÖgE+obO±˜’óLep¥/kK¤/G¿Ì^^J¨ÖõwË:¸”^?¸N‹ö«£(_y¡/Gp%1ÀcjÀNê¼îŽ×±§˜ ŠH÷õ…p%Ö¥Õ»X·]\ Ìàºqh™½v•/:ùžn|ÑwTVG•ÈM*Èàš,—Ö`ç)ŸWmƒ›VqÔöf¹¾])e¢»]‡°‹FT¶x´ï:áó®©Ój<´émdp¥­‡G³`míKc/¯Œcw³4Û¸*§káéå0ö[pM–‹;Z†½¬­oø´u_xót+üùl—RH|²K§µuìtlõâû{5üûßo…Ó§25ÖÄ€D“{¬’ )û”-ÜÔDTÜ»¯ ×>¯<Çç©ÎS~æ3¸)ß÷öÀîêr^¨ n +}‚uýäW‹'—©wãî¡o…®rš…ë[¡…ÛºÕ $}/¯³Ìú º†ùV^¥Ÿù.Ó\°¿Ã°!pݨÁ[¡Ÿ9b½7ÿÞzÂ=î:_ò²9\5%èÆr™1ñ<Ý´³ ÈeÖ‰NÈvßûõïßpáÍS»ÿÀå=ÓBÃMïÎ’ÎûX7Œ¥1wgöX^Ý}þÜ8Ãd'ÙC›4 ·Û•FKy¶¯dp-°!]«LC9øt]êÔEêáã¾°p-°Éo:¾–情ë’5z\´Ø9jµpÓº€@ìé(SI ,ÖÖùN£Ð¢Ø%ÀumbªØ›5r¯½…K¹$"ãç¸Rú\këP×­cüDpã´:aFÆBÎ~»Ö„¥+Ò© îïêšP$üÀãêû>1ÖëÔ-4Ø÷ªÛ„Ó‚`pS\X=á\L¦L\GŽÝÌÍÒfï*÷ap-XÃÍŒ‹Ð·kù¡æ6ÝÇC/¯5QÛô¼ ÀÍѾ‹ÌÔÑŽ•fØŽ»R&#©Ú~Õ%ðtí÷ÉívÅé€éœŽ¸àZgŒNÙç<ø~+|áj‚r\ºè†¿â:ƒR¸ª…~ÿòA1GËX ï¿’!Î/ÒJÊåÕ‘—Á•ÆêfkBþ¤P k¥<—NËeÿÆYš27E~A.‹_%IcÍÓ‘mã:quÜ”$¹\p bZáµ?w Ïß×®é<µÂÞ ®KÓp å²¶y¸\·@¥!ÅìÚ`êK·ˆe1Fϸ–Ë ³˜F«’0)&ƒ+*Ø®A¿V. ­Ø [:ÝlÇ_A]]Õ3z![¸iév¸1‚åK&³òF°F¯iØ:ŠÊ*ˆšßõü,¬ï|¨'ÏJ&ùó÷}\þ}WG;µÙ¡@©‰nYTW—þvh,“UfÏàÆ)—¿BŸ§–§ûY|ûߺ %Ùt{tu gpì ûƒæ¼& 0¸² úéȸyS¥l–Îjƒ„Âê¢yyÛÁ>Ÿ=AÌ©kmµSY/oîã~ä§`Ý_ßïc™¸¿]kô e•žá…dá&Í%;hòtÞÂÍl‡;úcÆ9Ô]à/¯FIÛøhS/o˜J"Ôúv¤aW°têº{8˜È´rt\Þ›!ÄzeÐë‚çæ<øv›¾y\¨Úvæhk¸r†] ;ÃVOé ΰ|XO†j¿Ú‹Îïz~–,mhQn8<õmOÐj~nƒïãnšÌª¶uÄѪU5ÂàzšJt 7›öa¦3¸¢äÃ"×l ñòªÕOKánâ³Z¾,¸.“¬we±v`1úÆà2÷çh¶@¸’XyÅA\¿7¡£)„9˜Ãõ¥ïó!°õ' 7&ÀH ˆõ¢loáŸ~ù“ÃSK-ÜàðRW÷ ×D'Ÿ6¡å6cv†•3쪀£ÈkݘK~ ìüÏM±^~鉥N©aÖ?j ,Ü4¹-R%Š¡¬ž« nüÒ¡Õ›k®<ƒkÜS†Ú«óîjáJ.;IK°W7ÓŒ\ËeË´™L”ÐË+ú6¶ó§Š+¯g3Ž\ḣÖÀËkén—¾áuTбѭ;C†*²v=ãÁÊ+y§3È ä½X¸%y÷4aÃë¨Ø3oS¡;ª×å4›oÌ7~~Vý÷þ¯\&u#q)—ˆ'ׇbpíÀêÄ M*Œx^ ®û³'‡<ך²p¥<œHHdE‡ž®ƒ)ñÊÖ¶ åÊŸþÓŒ]¨¸(Nïƒks:äZ‘0dÊÀµd¤ê€}\v Àµdäs€°‘ŽNCn”TW‘(©s h¶píæÊ.ôlÕ5}oÂÈx6+wŒéž¨ß‘dNK«½èÑNêñÿî1Ýÿüöç—˜ùòŠRÁ³£CÐpЀä’[õ n:ÜFT²ò¤jáÚOå&ï)²pÙ˜o\p—«GGlÆÔ, ×}ÔK¸‡rü%kùkq`é´¿¢Õp÷óïÁ·k£.ÜeëJ.»¹áÆ}Õm¾Q(´[ k‚#_y=±õnïn« ‚«øK¼ %Ö¾$ôò‚¥¶w[-d­MôÍíèqffÖ‡´ªªûþç™û?_æˆ>å¥ì'ÆZO­&ÜQѯÜ×%/à ½®­¬:º×áº3'LÒ|˜fƒëY;ýÒÇ^2¿:ï0¸>›¾´`ãIUÀU8ÐÇŒ´åÕ‘ÁÍÙŒõ¡ÔVÿ¾òêlöÃÐq†n+¯»Äd*Ð7Ë Ú·l*&xhÇ8ÎÚQé,ù°/ ¯yócû.ö³‰'¶º•<ÍàÚáýÝUPñ¯PZOÿ]Ôm›-™Aúñ4hɵ'"ݶLÓ„àfl]~=öŠ–’bð¯ªÀŽRÆ7š]Y¸l¾q8,<¤oiÍdp=Á1¥«>Oed9ÿ®´Á %®Ÿælá · ì¸äGŒ¬¼–8¶õ×Wƒ+àÐmpÞófúqN~¹Mÿü¶÷KÖ¸‘¸n+Nýþ¿Õö÷¯lûK›d "3SÂõ´´4ã nZúË´0N‚ ap-tÖ6žì4½0ÿûùeÛhÛÑfâçð¿mßÞ»ìž6£Ÿÿã“e3±ZЙ?²¦¼s¸2æ;j˜ô¬œn×g>5K¨º’šA4×g¾tæJÁË›¾%i™#×<›•7G{XÓG÷ÿfœpþ';Úç¯>ÿþí"Zë¿îŸ8çnP’ñÁ/\ÿeàF•qøùqÁ¯ÿ2pñ¿kø§/Ÿ.øõ_.þw ÿúã~ùù_oyùÿü¸—nþ×[–î?óéÿyßÓ拏ÿõ†¥[v· ̬‹oÿôeÓêôåWÁ?ùÛY¤ÜFׯЭPêœlÏázªÆÈ¦øôKz÷OÔuý}éò7‡Òsw·OÆÚ­±8Üø¯¨úx|ôÑϧßL“±ý·ŽådáZÙw¦‘Á·û1³x.Ýmèë Ôîé‡&u®ÜF©]·å·?Õþô4_þÖ’J_¾ðíip ×!—TZOƒ!ÖÒݪXwQØ?=»”Š…«o¯©6´ò#Îw»z:üRñ¦eûôQ¦_,\?ý@döf†é'óí«yaå“s®Ÿ®ªPýôÎíÛzù‹ø«Ršž>ú•' W½ÈŠŠV¾„z×™|ò·A¡#+/œùÎ0½…ëÖ…%ž\A{í"3¯‹››éHê ûÞ&Gäp³ïWÊ‹>ó}áh.Ým ÷öé¡ÍÉ®%Î]ýÎõ·ÇáúŸðŸ÷ua¦jìž}ÍnnrHÞKns¶ü'ûMÞýÊwk/X¸zzŠW‘¿‘÷X–Ä}×Å×WÞ6£`³X¸®vè¿JhßGSœ¹ï7¥·#¶OϹ¸iOrµëÔO/-¬‹ú¶t.Ìþéclb¶p­ß³wðéä礸Oþ¶G´5þÂÓë¬èãpõt³øàÊ—˜¦¼ßP }ñÔÍö¼®gXçË Ÿ>2ïæÊßíŒú=ÿõÛ+Wžq›×·«±€§ûJ^—ÕâRÁ®—ž·Yp-q],‘¼†Ô~›;ަ:^xz¬KÞ\K\¿P+xú˜š°îºÛÁ£cØ/踑Ðkázå©yȬZ y ì]Q¥j«^úö)[¸f•éòD軎úE0á·¡¯3f^ºmbp-ïå¬f4Z&wÍë)ýv ^OK'Mà~æÿœÔèϯo‡ß¯¬ÉÉ+á·ÿAGR_ ¿½¦ïâëà·ûBW(¼~;9´»ãupzÌ ¤·™‡Ð¤™y÷‰3é­fàSËuºŒ?Ñcf ½Í ìOµËó¢¦ÇÌ@z³FÅØ|úcf ½Ù ÌÃ|3zÌ ¤·™ƒ”ެ‚õô‡Ì@z›8N<­S÷˜Ho3¥³qUù‡Ì@z›8¾ÝÕç·?fÒÛÌÀãñ]{Í3ÿ˜Ho6S7S¦ó3émfàqê2­ëâ13Þh÷M+þ˜Ho3».·u×=fÒ›ÍÀQͧÀ>fÒ›ÍÀNÔ£ë²zÄ ¤7›.ÎÊàOô˜Ho6;S^7zÌ ¤7›1ÅÖEýHo6;å™-[ûeõHo6Ç5½öý13Þn†BÓ¥ÇÌ@z³˜C™áð~l2émfà8u5—uÏ?fÒÛÌÀã¶ñaq›7šãºy™o45üf †¿Ñ Ôð7šþF3PÃßhJøçiû3ð &~6— ãþñ_Ø}ì•ði}Cìði>Kj º5ìçiÿShÿô§ëžÿüm3ó_àí†ÿ P^ùíÓ„ÖÄ+àÓæÀ+à“Ä>ÿ ødဿbéø°ôßÞþt>sûç—W?ýºi?³9´»ÙËàÔÝñ¸Ïl.å×7›ûÔ±!{»É/Úï¸õó+álêÏnÒÕKp6ƒd7wç%8›u°›ïVþ¦ŸyKöÍ¿]ŸYïæ]¿rwsßW‹Ù]_ä—î3ìÎûo§.Í|›ßpg¯×Þ´ãêýWÞó«ü~×7á%ø]5ý3ŒŽç硤"#'­]]™ù>>ŠùÎ_ðSËD¾;÷Üq‡Fîò*À9‰"gþª]ª7ŠìËlàGÆX䎎©2WþÖõ§2FBÏR׿ҴâÜÚn¥SY©XóDi6:éBúǯ¥ z½#ób§æ^KWG&Ðpûí>\ êÛƒsÅ<Ý|{çóG÷$ýí™b¸Ãy .¾ÝÇn¶t´’ß!ëÛûn_ß.ö½Ûq©]½›äyðo·Ï‚ËcÓW¨Û;W¢¡ø#w…µ;2ÂáCIñÓ‘œ_Õ¢|éÂL¦çp³ò5ÂSGyzܬ¼Ëõ¨øüé×ÿûýç:6a´U2ßÞõãç|<=QôíHkîøô…Gc¤ €ÿçóùÃ\k©Í‡tÒvíÏ ol2Ý Iøº½åG? ?) [ˆœïÑÚzéRuÁÂõ:ÒÙ$É l˜i5 nÖ±[Et-0[:?œC.Fë8Ò޶ réFLueÂ;a½–nPW~#ú|ÝIòh»‘™4üd¾lË8ܰ¼×jáúâ£pôÖ²òžgýü‚륋!û£&NŸºÚš‹ÀåÒÕÑ?Ì.݇§jÉþŸùö#OqD0æ;vZ{-ð ¸ìŠÈîî® tÆ¡KÖáºá'?fwGWK)Àemï‚Ëö1Änx ¢Õp½Àýru‡dè³Yº&J À•ŒG:›?¸_w×ÒÉ‹¯ß>£rŽRñ¼¾ý†«{óPMa5cáŸç7 ®ZÞãlµà@cu³ùüößÖ¥”GtÍYxÿÕ¿¬ÇÓÑ™âZº_¿³¥}üsp±?Ýf]»uŒÝIÎöÇ?ÑzH'€7%èTPR‚¶&lÅ4›á/øi»‰û1ßãÙ~ð2;ãqø°žÄ!HÙCµ8Æ“X¸xù~8jºª>Ì¥?G!s¸8Çå¾¹ôݬúXp#)»# 6Vþ—ÿ®›ËSÍi¬¿§Âû[’Yé4*^ø·ç싆KrÑÏf„ß^jpMÙ|¿Üá·Ç°4V¿î®——dyˆub}ð¡iþL¸¼7»Ê¡R®‚®ÆWˆyÑ!×$ü>u†ˆæ–5ÜÒ¡r6ì»*Î?‘J5´¥/oø•ðýutKoåºP?¯›6vŽ˜ÀË ±ö鉯@+ Ö]dS®À?}á’•â¼T„¼—Zi颾¬×ÆIžÔϦ»Ú–ȥⒸ®÷§öö˜fù´XÚ‚ëk·ž½ÀCŽå— Ü)AvgQ¨¼*?´q[-ÓÁÙû³j¶¥óh¬—ï7ܵtâ®{"O™•ßó[,΀‚k†Ú|¹z\òwd3®‘+.øšš‚UŦáÈø ˜”ºýažnÈXL®4 ‹F‹ÊuU2¸$cýdÒ’Œ¯·‰6<:\•ÐVYö£Á‡×ðÓ%ÃM€®ž„F$ût{wD‡y,É¡®Âw¾zÛXL|èæi˜“Óû ýüë>\?ÿ‡+ß]甊¤UU°àz…ŽÞ5kÚØÁÞ¼…Ë¥ë²ëV&É»házéÂi[ƒ¥+Ñ|»¥˜¥o–näww?WåkéÔË÷›Ëy´t±0ɸá–jTõvPkù¡]pþô~6c½Go襋-¸ä g7$¸tÕ-qÃõÒÅ®ìcK—Ãè«1oÄo·/M:/¨?‚bÉegàÒ÷ÑÕxCÂá·ÓLäápm9ÖZ6lfw…—7×ÈI ¹‘aç}Q:‡¨àëJ£8Öbø`ÕDõÊÀ…ùÓ ƒänöwÖGßF’Œ_fUgÅ·]$øq¿Žk¨È.iYÃ%½§.ÑÕã«Ø’á(Z,`Á%÷ìúnv’ÑjÜðt½qñœGª6îìä×4üª×¼V>÷³9z"~°;šº-ŸÍÒ ðõ™©œÓ;.xèDZ+gªìþ2«bgf.ù×èEY4‰øØÙ_gvé¤ÃžB·Z—§õÛ÷Ÿ·\~ÿ)®´â®¢j)°aÖâ5üŒ&Fž –ôèxr‰,œoïǧ0²ø"¶ ˜Yuà £È#¯Ç²´Î=WR—Ú€†»8Æ­u+ô«þZ:yéûÎP¯¾ÈÚ2ék5\ꌾt9µDÐáÐÕxµp#?ÙAùhb•5ÜÒàvú+® éEîG–™×p½òµE+Ò¯\°ÂðÓûÓÕUrH2ÆHóœIFW91„è‘+.÷ûf™ÓSI=ìû½{õc”We§uÝ _§2Qʾ_‰µ±–ÖJ±p£­ï°ñ ‡×¹áVcÕTíÊ÷OSÅ£†›•§¾shåûv‹ë`]tòðù‰¿ÿuKÆsŠé]C¾O¾,ɸá€'¥+ÂÿÝ3x´ê‚`±¤Y%a'hÈàéZ~r>ŒnàeK°n¸YÇ1An.0ã cDY+.=:#?–]»_ç­ýU²)W2r†EbŽô~FãùAw‡4eØtθÜ÷ÝÕ“î¦èš'qko®žN•3 ò¤ÈÀÍ ÕB3Áè¾õ× ÉCÐ÷êî?©V¨õ5j܅府ù¿Û—.®oáj‡ýŸ6îÂ-ÜÆˆôÃ÷󼆛u ñœ&lŽà ›ÀÅUv…ÿòí6¡GN… õ Ѫ®Î³øò·oh%YôÇv®ï-\Éx.wLñZà ,¶þíÛÖÅè_Ýz7ÜÞ£©:ÁyÍ^p½ÀãG´.úŸSKýZª_çÎzq/ÅÀÍ6ŒÉé\y–>°àjúÌæK1{`p¦fáúœOd'ɯ`Ì ·ì¤Òk“·k7&RÐpsÎ}n-"[5õÝ]ûóyæ}|+ßa’S3% —·ëQÍu‡¤çÅ…‘ObáúÓ g*÷Mvl\íqÅè½*¯áÀ®JÐýFcvLÕp³òaŒN+ß­w·níþÊ·_îOåì·‡DE*< ÞpùíGÏÓê×,}ëRYpiŒ.ßZ#]ó þu¸ÄCžúµ2|ùØï…¨áR°ÎÑB:‡"Yøh‚Å.¾1­šob©ÌRþë7¬r¢;ó Ì·Ç|šŽµ¿ßNÅ¿‹Ë*ß“ÅDUè‚ÿÖYé·ß…ÀÖC_ö?üù“ÿaLämþËoÿ'~åŽñ“ý_|âXC9üËßXÚÈè Y?œøó§pvú»ðb䆥)¿ýòë—ÿû¯Œ5fäo¿üþ×§ÿO&zÝËá}ßÿÒ1¦ëò³0üÇoŸTÆN^¯%FÔ4?Þ‘7ÅM½–œ²_^w½»¾ýx-9Ñ*jø»2ìü]v.£ÃRŽ@âÎ-ñŽòð°/šìÓu.Z¤qî>€Ô»šòí¸p™‡—é¬Q;×4±bš-+øËó_}|4´­Æ¡‰‡˜ÊíÚK×8}‘¨6×4 ÇBBð?¿ò‡Œ Èeó?ÔP̱98 ßßå=×ôúS>•YÒ*–n,pšI]ž&Ú¹¦i©Ÿ6BMpï¨PÕ%xlŠðL-ÙµšèÖw usl毺µG|QÊr®ö%½O]·Owj¢_VÕ„Ëw’&‡K5qÞçø_w~º,U¯è6ož.G{lŒ¸j^þÓ§?þï·_¾‰O?|Ã+ñ‡ð¶Go_^Zù£9c­— ,2®‘Юê6²¿ÃÊ‘×_ª€§+‡ug0w”_‘­k^/¯Ô„ lÊ*ÿw›KðÛ•Á=p:^Þ;yzÁµÓé|ŽÑþ©†šæ]7áÚ`*¹rl¤þMs0Þ‚ŸÛË”I¨Õ‡¹£L”6±üÛÇörƒ©øk¾ÚØQþšľ÷íMâd_S•ÇŽrõÓ–óÁÇö&~lò]R¡ 1*èåÇöò§SK*?š#¡9\iÂÐÎd=¥üÎe lÓ„¾ßIcΰвÇF›k£ .¥¹£YdUûˆ63kbHìÜQ¡½¶+~åY3‹KmÜØÞ,m޵£Bõ.·XaǵËõ1vTü»ÍmV‹\`ù¶+Ôø˜ùh4÷ð‰Ýlf±‰Æ ì2§SÞ»‰‡•Ô9úãøÃç?¸’:wÅÂ-ããÆá6ýp¸µe.%em™©"|¤è(ç’ߨȹïúÛe·¶º¾] ñqóíAÆÀ±#oÆÆÍ· E 9-Ýñíâåcà zYRþ®ÂÊWa%‡¿£°’õ³1¹´Égo·žÃQù%Îg/Óo3á*_g8hÎx©N·S‚jpP~ùT\¦É[ø—ßþüïúU7%è(8w”©ÞD1VûíÒ£Iv_ä„Ç‚öÅû&Ud×1WPI)hOÁ öP¤»:Wgb±ïJO阓º±"£9´ÆŠ<æõ­M‹Ï§\2ظ±½i+%°BÞ·Ñ-x,°ü!t´º“röÍ,2’3ÛÑeÜæQ§¸Xþ˜VØŽæ¹£TfƲØù«j«mîháqØæ¬~‹:瘙•/,·°–Œô»ïZê†ùß×­{¿P†úÝÏÎFn<'Áeì9¡É*Üê÷Ëù`õ{O7ú=fÚ¤@ÍËJ»èHÚ"Ôïa–*™oƒ˜ý&j))ýíÁÐB ß½§Í·‹XqÙäYÑ™ Wßž©oÔïÃPHnCÍ V¼ }4Ô]øŒ ʇ1A®=yøÑQ¹ÁÙÐÀ…~ýW5~x¹¡^yžå’OÀ©1:CäŠWž±º 1£ß)Î.nzåEûüv›gÕòôÛÈ•—Ž”ÐïGo†¶Yù4}K!ùKAKýÜJA7+¿~Uê9ïõZùµ*-=Wž)ÒܹM¶Î‡AJWò€ZyÆFŽEú݇íÊË8y.ØÁ>»©•ϲK…'¤ßkÇûÍÊÏ:s‚‘~/ő߬|^·àb^+?õ{J1Û;Wži²Ñ"ú|I)â•ç,€Îl^¥ß/W^Äß)“ÕïWl®¼úQ$¤ßK?Qq³ò+JŸ[Ž Ùï£æ£mV~ýª*ìÌOýN¾ÌΣgØN¿÷ÿ=bû}dçpi´ÑïSË0¸Õï~?5¿…[û½îì÷iËèoçStbÈØ~oÓù ¿]$,ǺÑï5o¾]™é@¿ŸqÍ·‹‡”ýNdVþ]mãü¥¶qJ¿·9ŒžÃM]e» ^P?9 ¥È•KÜŠ:tk:'\ÛïiÌÀ…+G?9WóG=…EFKDßþ»Œþ×vE9üãS·£}ºUã­„ 5w Z-\ªq?b½† J´§Õ¸ïfò]«*-ónß¹ à2†P¨V-ó¶\ÜêÐfVf+J„ñ¸">´KAG?f@fo-}hUœÜ#ë aËC+tt®!íb+ushç¯Jl5fà¸Y ­n-3À‡×j®©P‘sj¢>´\E¶ÛkÄáÃ?_“‹øÐ C¹ú‚UoF§ìl¢¶ºL*Ã܇͡åŽðv[ÐBõÒ(&i›CËà!P†¦uÇß·Íß¶Ö5‡-hšõónó¨i£a猷6ï,ègp£aKA ÖgRÂæÛ¹†õ[ÐÝÆ¡Í·‹18kXïˆ6ß®<Ù zÒýíü!õö] {Æ›4ü]ÝEü…î¢ÚCN-d G=H±êM9Y8êAг¸}6/{~صpЃhî.‡³€ƒ¤l/½~P#¼q<Å ³öf²Ã{dEÔÆñƒx¶Û°v¿îyµq‚¤L›ü:ŸñÆ%Q“ N./u·qéΟïš$¤°6n¥tõìëfãV^¹Š>$=8ú¥ÅíÆMxîä15@Ú(pöxãxò@ j&ƒýä0M!µqÌ~O5l¿ç9QJoç }Û+æ ñnã¡7.‹Òޏ1ìc ››eV9•üڸ帯 ïûظÌ_.hGJ¹Ù‹Z; Bh%@;Òè€ðÆ ó¿Ü­veúý˜ÇÇ8ˆ÷ŽuÉ´#ï$Ny5Öc\“˜Þ¸"x·£M^~-›[é÷DÉǵq‹œ”Ñ0i³q‹ƒ´Pp+\;´ÍÆ­±®‡yw÷õ‡Ôê$']ý½ý¿BØ+vÁ ÜæÐ>-ÀÂmŽÀ¡•qZ€…£]Z§ƒœàzù¿ 6ɫ؇û«“V•ÿö·'ˆÓɾþ[òÀ„¿«±÷‚¿¡±w˜f9\wêéF n$³{s¸ÉP¨9~ØuüpÝϧ$ÿa×ñ[ÃQ¥¸ v¿5\7Õh>Õ#—øÜFzjt3ˆÌ^^U.PÉWjâØUà6NU.Pßö†*ºzŽÕÂUåB·· fV Hœ¬\ø8f x‡='± cc˜U*™UW¥ÉPðt²ÊkK&³J¯ú8)2™G…î|´ðš‚ XzЯéP°Èˆ …|ÕþëÄÈ´R•”ȸޔŒ¼ ª!a‘åµ$Ë™ŽpSiPdD‘ü¨@¡ ªàå¯ýYé“#su‰ OJ(:Úè×i^M™9Y´P‰Œ€Z["X‹CKg2ïÖ@&ó!´€E†1«‘¾ ™,[F‰L±./2©vãŒã%v[„mÉú‡C¿íVÆËß;Ï y긟ßU»c9'cvqhÂK¥¸aÞmb+“Y¿<ŸÛ®ÔÄãåÙZ`©‰ﻬPÞøDZÞ¼¼ˆ!¤Mp!ÒðwXp£asÍ—£Í•p0dâÃn®„†ƒ©JõrïKËüh!Ÿþ‡ÔqwzžRR‰%38ÈÇѨÔQÀ‰wÍU ×%!,O©PReYÕ—EFÑ=AÖÇù˜ãfã²( ÌÁØÆG‚Üìc¦7Nd¸ùäq†[L nœ0”GüüªÂ}ÞW¼qE¸YH‹ÿaøðÆ­«’â0fàUÉZ¨ã¿ªg“|{Uö…÷xã*?µüüªÊMM o\ß×WUæÞ/³ªÞ¸úÁÜ6çWUá'­7®JKæðY_Õ”Ó o\w“¸&²¨ËfãÚ*êÌW úùUMÜÿÉãkÒ>û]ˆÿÝÏ¡%cBÍ›ã難›èÀ² …mÌ tY©;íEn åòFÇżùö×Äßó¢n¾]ÊÈæ…úÛ…&¬˜V5îïÛüº¾íq£"‹yú»†-ø»† ¸Ô°Ô•ެN¡ŽzžÂÀ|Wæåå(£ðT»Xž©JjzQ£nÌÓõ(£Q< ¦òu[*<WŒ2ú`;QÆñøà"†Ðµh½fαìýñ©´Ñ#ï;SÄÝÞŠÁNÞ‘ñ¾³ì¾1K(˜´þQ¥Õfh½ï†õ­âšC ›}çì"»F¸æ0VÚìûù;r£×-ÇæÚ÷ë(ÝnÕÞu×¾Ï66}å[ \ð£dѯ¼J½ïÓÎýÿ¹¶ö}ZæÑ·Öh³ïÞ©EpU×ô}﨧;3û½›ï5ÂØDŠ¡á}ç*Ñ5d•|<ºm„;ó‡xjÇ&¼ïÒIP¤\í°Ù÷| egÝgçÀkßóŒ6쾺Ù÷¶Í¾Ïߥ1$®}/Ó ™ËªÎÓû¾ºÜuã¿6ÚGÃáÔ6ûÎê"“k´öÅýÜ÷ÊÔxß÷%ïõÛøÙj]ï{U5¥–©tÛhÚîÓ7&˜:ó]è}¯÷öúnŠvÏ×yÓÆâ’ßì{]žÒq<Ö¾³ççšâfßÙÛ—™¼WÆ6—¿NïûúUg“–kßמPh•-=Æçé1>OñyzŒÏÓc|žãóôŸ§Çø<=Æçé1>OÏ–Ìôl<Ó°½…¿ŽÏ_”^Ã5Ÿï|¼œiŠÏ—Î-¬ÈH>žb.L¶w]Md¡ßé|>ÁD.ùüˆ ÃçÃè$ŽÍ»ù<=Æç òyß ¡ºIŠ\MЛù|Hq³ïïn£&ôª\|~tªî¯U6û>‹}Z,gw™,Ôžùvûþ¯|~Ty­’½ï ž»Áf•ô}§Üã€÷ý|žãó„ù|¾‰ë"¢3ñïûëø¼àudùüOO£ã6âócþH›}Ÿ¥F­_6¥>ŸŸ÷oÞìû¿òù_‘P½ï<ÊgøüÈ"²+ÿn>OñyÂ|¾ë(G¸DÙYvñ&>O´Ù÷2éü°ã âó}éýnß'£.}ß>OݧìÊfß_Ãç;³J›}_ðïúwY]cŒ~#ïïàóôŸ'ìŸ-·Ã†ÏÇ„÷ýµ|>lö}ñùÎÇÏù̚χ’ÃN¿×•ˆBF|~ÌÔ ´Ù÷×ðù¡6ûÎø¼‹¼ó@‚ØúÿÝOõϧŒ²÷ÏV%®ùü4^àó nøü ãnóëÜtôiÃçC©›oçeî9¡ìýƒxäÍ·#sà>¯¿]Õ©c>¿‘éoçyp!oø|­þ®Yô þÒ,zåyï§®X¸X_ò‡Ýz ·#™Æ„ävH}7dÒÌhpéG¯cL©¨VCê\0êc2v5ŒúÔžf(S­<¯Pós\…(œ¼á•gY^D9dèûN+«S­¼¨ÅC®ÜÕÁ•Ä9’φìŽyŒ땟Žp7Æ¢æ{µÿÁÞ6&M¾/ýµïœÓv [Rޝ<þ§SMèòº1B0e¼ò,™«¤"ÄVGb~Â+/ëßYO'ÁVSJpåe“¼³Óˆr¢o›•ŸÔµ´\}ý€úâ¥ff•»‰ÎBùöæR«½.Ε缮ŘQÝ]'lnsæYšVón3¦„V±Zy9¦Õ¿¹)•—Ô³xo ß±r>mV~’Ç:&ïe@øú~®²J½òìWµ…x]W]±²Û†Óïô˜~§Çô;=¦ßé1ýNéwzL¿ÓcúÓïô6ýîGÃH·£¸Q¸Ñï´©O§ŸVê÷Ñ@%5ût©ßóS¿¯Ñïëß[6ˆ€wWrL¯ü;ô;½Q¿WZ…Ìjå…~!¿B¿ÓN¿{ F¿û®?|my³òsKN5“…~'¨ßk__ï~ïxuÉoVþúި߻e^^yÙ·ÄWèwÚé÷~@€;©«˜5M¯üœ3\V)¾B¿c¯ÑØ·R€~1xWñÊ¿C¿Ó›ôûÙ׸á•Wýië+ô;íô{n é÷XÖ0,½òS¿Ç–ÎÉ}ÿ¦ß±ß†¨ÞuR¿§Q.s›ïÿûu_¡–ÃÜù߸í_—vµg³v€Ám<.͕gpK»þ´>ÓæÛE!Z,pçÿ°ûv¡H)oJÌf¦“þvQIÖê¦ú~6ßÓß.jÿwýi·™ðçg9òšú#bú}Œ¡œµÀ®ûÓú:fZšÚ³ÃyM-Y¸î‚ãf{_·Z÷3¸©¾§ˆ«ïó+¼à¦ õÛŠ>ØÆv)j•d©FJ(~_K³+/»Øä¨eš[ÂKÌFcz°t²=N¨áj¢xCîú+Z8H§u윥ײ‚§ë¸YJ› n®™•GÜ jç[m­¼hGA5dþ§nA»ಉNîw•¡cQºuÛ"Þ]'„? î:)Å„E†wèïf`1µgã¢î6¨Ç"#* RL8Em¥m(‘p—qóü’)nDf•‚Πþ½«¯š|؈ «¯57ÀF» *‘YMò|+-Ï-mñK%,2¢9O¾Z>*Ú1ÖÄc‘áì¢…Š»ãÆæ3™J d)X-JÁRa½¸Y÷ûÑêj#2óWcð1!ïA7ðR(‘)¼8%À.úެ>'N± zŒ]Ðcì‚cô» ÇØ=Æ.è1vA± zŒ]ÀlŸÑœ!ÔMoWš…¿š]¤êÍËkváëè0 Ø…‹5¦à¯eãßµpÁ.F—¼Ì®Ê=» Çؽ‰]ŒÎò1WðtÍ.ri¯`´c¡¢É>~Ìñ`åE‹¾®Iœì"S()a‘y» ÇØÅ&a¦çý†]ÔŒEæuìb% i‘a, »jÙ…3ñ\ÚˆÌkØE^ÃmµÈLvû®‡×° zŒ]ÐÙ±æ.£cóC÷%ÞôöaiØ_ç7íú Èä)î®ãìËÿúë§ß8…‰]°Ê&dR]³pÅm: ÉC&lpÀ„kr2 Ø/å}sFpÁ³$±¯ßh'°sN¨Ø5øÁµÀvîHÕÂÀžÃë‘Àò}§­ÀºlöH‰àûN[½y]¡ùËs=åÝ[=g«—{Ü ©Y=.A–Nì¹?dö¬— hå™ÀžwØëpåÿá¿ ¢Gk‹‚ŽÍùºÚ  =MÓp%°Gq`(@`skd—Îl‰­U(°Ý! ×ë‹Ãër5p#°®Å¶ëýY©ôýç_ûèÀݤE÷¯[£u\ ,U*V`åø97i'°Ëk´àV`S€KÉA¸Ø°_`åó—×ëC€ëkO7öÑb6§© ÜjØY+¤¶!¸ØLX`=Ú8-°©^S‰ÀB¸XÛF`ÃTþ<þSLàéשaUc;ï˜ã军ØDk>]ÎöïŽöuÔ¦†ep)ïõxIÚˆ <]ðéGË{‡ÖÈ{£p' y½Ý#[ù­‚Nס5 zõú`p#ïgƒ  ©‚§y§wŒºZ¸•÷€tN\Ë{Ø0êÈo›½‚¾¬ #ï„V^+èn2e(ïÉùfáFAç±¼ç W^Ë{ô=-)¹ò\ÞGêhÜ(h7 ºµŒåœYy#ï¹îbåýØøl–NË{çãt•¼,ïH¿û§RJ%ÚrŸ,\Ëû ®PÞ£/æÛ¼gŸfZ.ï£?ùlHÕßxÛ{ÿf•V¿{7ýi]ŽXÞýÌhepKÈn{ ¼…[÷¾óPÞÝÊêp-ï×h]#ï«f„¿¼‘÷«Á¬µ '«äpMÈC+˜ÇÙxÁ¼SÛò•Å-V^Ë;…¼S€+/ô{·xêFÞCBÇFÉ{uCÈ«yùçg©aG»q_~ïKÌ¡5]l»z.ðùqÙ¤fáâéÝNÕáà‚[}\óùÎ=±¼3Gë„y#MÈ»'Z©¾Õïw<Îèw—Š…œ|Ùà9[¸•wª;‚¥3ò~›ZÞÝâu n ð´Ñ×òîÊFÞÑÓ¼§w3Ž’w-•w2‡ÖÈ{W˜Ïw˼š§[yw ârU\VH¿_âŽS•º‚p-ï·®AZ!ì 7òîG;Rd¿ÊÓ~ÿöíûV¿çR¡æîvB¶p;['Ñ.{?Xø+g뜛báÆÎ®´›NÛvßD¸7Oq6¬Ðß."àµn²÷§Èèoÿ÷Ù:b0þv5a;™ãÌ=˜ðçñŸ<þ>FqŸ‡V5O.Û—ÿõWž­Zðôy?2©-ÜZº¹A²[k5û¦×•h§Ï#R™o—³uº¥;®c“ÖO~ôYð8\äø¦Õ!ƒø{>'ôt6ÖÜÅ’mq_y:æ„T¼q,N^®)f¦³| É~û¹q¬;î¨í(°¸/®ùqjãDüý>6º·{fé÷bãäˆ<ò ÄßGb¼X9[ç(`§lú]ø:Úß­^zãÒŠGJhvÕ¾r~³qéÌS¯#%ç3ÊkF5H+-âãá{O×ÕžZH›Ë‹UŽù» ×&»th„N ˜ïÊ/Á“£÷(x˜ïwEŒe³q«±DèKœtøÞÓSŠ¡Ô´Ù¸5¹¯Õ̇®ð}côÆåsãèÈê,Á”ħÐÜ–¡6ŽGé«»üó¢1ýá÷Ïo ß÷%r›ÒÂæ2Þ¸"Ý´¸ô †Ä©:·»O„ï)ö‹ n6®poa°äb¿Äº,ÕÍÆ­–>—»&”ÇõQÜ´Û¸rïOí¤ÚŽGÙH‰L`é1nCqzŒÛÐc܆ã6ô·¡Ç¸ =Æmè1nCoä6­±šÐ7Ü&Õô n³«Lì×±Yƒ­¶ÕxpÂ_Çm|-ÆRöþ>nC†Û|¤øTêèHe¸Mz*£WHÁ÷nCoä6%¬¹Bjã·¡Wq›]acqåÖäV5½qÿÆmâÓH1®m³qoç6d¸Mß¹¾ñþÌ9ѽyÛÈ mxãÞÁmèÜ&ö÷ xãTË®ô n³«‹Œž[¼°±„²Ù¸á6ÚÓÈP¦´Ù¸·s2ܦ«ÁÎaÊ9‘Yr›Ð7´¬¼ µqïà6ôFnãcª„7Nr›–^Ámv©‰>:B܆xM¨Ú¸ã6ᩤ¨l6îí܆,·9®Ä+¬£»ã†®9=ûöð· q›ð· q›ð· q›ð· q›ð· q›ð· q›ðnCÝÉkx=‡¿Û„·p›ØmØ~ÕV¼qïà6á1nã6á1nÞÂmü¨ˆÈ±l6îíÜ&¼…Û„§æR-oÜ;¸MxŒÛ„ǸMxŒÛ„·p›19€2í6îíÜ&¼…ÛŒÁ£Ã8Þ¸wp›ð· q›ð· oá6ýª-ävWåÛ¹Mx·q1¦é)ýñóË6&Õ(œ¢IÜÎD“žÕ]‡ÁmjI¤ éIàåuq¹´+) ±âå5ºy¥FèåMùÙÏJe‹¦i³t¢|Ýp¦•Ѫ——”jÎDy³t|bc©»ŠÔ\7K‡h¡­Hµ/ÿü,G÷#¯‘‹¢ÿü~W£ËÉÉ# ܯy]ý¨ËÃà:‡ÞÌçs¤ÍÒ Jœ^ÃçÃc|>@>?œ^Ô^ÁçÃc|><ÆçÃc|>àyR£'g{Ÿñù­£µ¤ú >ãóá1>ãóá1>ãóá1>ÞÄçŸ\M)T 'Ÿoâó§î5‡öÝ|><ÆçÃc|><ÆçÃc|><ÆçÃc|>`>ŸÆ ÐWðùðŸßù¨S8ݼÿÂçÃc|><ÆçÃc|><ÆçÃc|><ÆçÃù<¹‚í;ù|x+Ÿ÷­ÖÍeõv>ãóá1>ãóá1>·Zk|þ¼®,ÜðùR7|>q‰‹{>_·I ®ýóµøÍ€WW#zyÅçKÛñùº[:ÎçS@ÝF¡nÞ-§Ä5ìrbÞ,àÝž¶9 ›¥ ,ù ÄÍ|XŽáó5oø|´ûþn>ãóñ1>ãóqÇç‘æóŽ¢>7 -Ÿ aÌ™ð÷ñùøF>?J¡—g|¾›,¾¿%>ßwuÑÂßÉçãc|>>Æçãc|>¾Õ?߯ótÁçGÎ0µã+ø|„|ž*…»ØçE>ãóòùÎÎ 7Áç?vÅßÉ&Exê~¬y ÁÇÂK¶|>>Æçãc|>>Æçãc|>îøü•ºÀù¼w]`IPâøF>_)—´¹¬ÞÎçãÛø|?ó>]ðù’Çü9Àçkêç&l.«·óùøŸñùøŸoöÏ;¢Íe5 ’FWÉÚ^Áç#æó¹î|ØòùøŸ˜ÏÇæR|¾sžÒêæ²š¿ #©ýŸÿöýç6ß&A¦ÎZÿ1¸¡í6L}‘R—´ýìö<ï"™Ã5mGM™®Öðàå mw„“ŒÉƒoׄœB"HÈû†f´tŠŸ½:5!?£ péþÑ Ë›® 5¢—W}JgyMÈWkß ÿÉ)q+g¿J™d<ú\wÓÚkxÿƒ«.§äÕîÿóÊ!_pŨ»O–Qwaè¶i4ßn5u8Tä~”WXgÂ%ó=†×»Ù%]\d y´I9×”7Qï}K's‰ÃÕ¯ò\ÓE7c(.¸Ê ñT"ÌöHœd•‡gËÜ]}LÙßÎS†Ç¹‰d’JÜÍ´t‚ý À»ß'ÆÔkˆøÐ²lÞþ³+ŸV¦ùvFìãæÐ.ýL¥Í÷ 媞åÏËC+Ô=3‘3«Ç¾W-Ë>.%œ©ÿ.ÕÍ¡ÍëÔJ`Bë“ï†\È›C›uÍÔæša;‡–ÿª¯ÐZÓUËÛ÷$­¨dÎCvA«‰º:´ŒÛä+iÙELž6‡–)èÎŒâ{Qk0¬Hû›É‚Óc šSÐô áïRÐô˜‚¦Ç4=¦ i« }|…‚¦Ç4=¦ ém :ÖR¸¼oê }r.½BAoê É¬Ò šSÐô˜‚¦Ç4!Ý­ÿ®'°‚¦hEæ ºÄìÁ·¿OAÓc šSÐô6M)Á3otKô  K‰ÅûÛl4=¦ é1M)hB úɵ˜c€ :¬pêоNA¯ŽÐúо]AÓ úÿl»¤úv±™[Èà6ÃÍí2Üæ@g·³ÎÖÜ]†ƒëˆ˜o)ÿ[†›xyá·CÐêféøuŸ7±4{:é¥+~—áæêfé‚,´ú· 7½t¼b%åøonzéD†›ße¸5³òÏϲ»a×2÷d;’«ÙwÙ±ë÷œî»NÕ*«`á"ðu4ôxl_s\¾âé!·±®º¢þùëï~c£ÒFÕmô ºXì™—!-ßU\&^ظౄ ÑY6¤åŸBË54좯|r4wTLvwÓÉÌ–NǤ†*œ;ÊØÅ˜…Õ,\wzk!Tm³[Bû.8Èê(¥¢M‡òkæé¨”øìWyîèý§á Ï.¥Çý\»kB+*ùQ“P'1ãpAaÆTꇱ†÷ý ¯D.Wª’â6±QÄËg¨uÁ„Q¡.Ém#°™çNìp=ÆXŒ–ÿª„Rp¼§Ù«J jŒ“…_Û»µ¹6%NP£.ì«€] ìê3S+p¦˜êêK¬veceïœar¥6»æÇutÔ¿Ÿ;Z¤uIX`E\†®‰>ˆ•_¤T ¬¨vG\Ri„V„_‚ 8â’XU‰|vÏ;wt çVmv@:ëOVȧ`5¬¦o~tÓi¯LžÀ®‡¤~WyTÈÜ—¾°o§·óºà-ü •Èœ×Ñc¼Ž6¼®¬-/ñ:zŒ×ÑÛy]h›¥{]%²«›¥{;¯Ã~›nîÅR_Áëè1^Gñ:z#¯+±Ú§¿›×Ñ[y]Y· 7¯£Çx=Æëè1^Gñ:ì5êwÍÝ*äe^Gñº]û»Îú¿ð:zŒ×Ñc¼Žãuô¯£7òº8æ``}¯£7ó:âF`ßÎëè1^Gñ:zŒ×Ñc¼zÌváê+x=Æë¶ÝóÎ-ÿÆëè1^Gñ:z€×}ÝM=8¯+X‘ê—È|å½÷ºãqvjáTÐ__š ЩP™…[ö‡¦˜7‹®Ù_$Lø)å/oãq¾CõWu«1&Ü»…óÜL-ô-ãp^.èåMAkÝÍ®p餻/´²›rÒà±Q´pÎÊ4á¼d^þùYŽ)éâJ!›Ôöq©+¤õu5W³Pr¹Ç ËøZZ+®§ ÷¾,ÂnÅÂ-$†ï -ô)5óí’×uf5þ^WZÎ3*ôl8¢v.%ÄØº•7+ÏéÛ5…\&[¬´RðÊ'ÎÚó•–)³ÃKhkg ·ä¤ELN|‰þNrBo#'G[@ðw‘zŒœÐ†œ$—6Þ¨PÁ·rÝkÈ =FNh×m#Åò rB‘Âä¤_¬ô€ý¡°>'_W'pMNºÌÕ9)®R†‹÷•6䤸&'î,æµä„’ÝwMNbÈIg\Ñ%—ä¤3›æ-9ýê–©V>ñ„™»VȸµàñÊsr≕¥’à•ç¹ÄñÌ-Dä$¼òIZ,°B­VÞ­;ÿ r²Ét ]d뎜lV¾HÉØÌj"«ã49éÛRCä„FúfåY>ÔDNªktŸùßÿ™N‡ÑàA/¯Ño2Ï«’Áõ|Øüf4„KrrÞèà|Ø6+ÔÜ̇M„ÊÆyªèÛÍ|Ø|õ³’äD$Bó—Wó »¡ž?€ù°Á­Q.çÃæn1ÁyÐýŽV—ääŒß|@óa[€OWóaéžNk¡gþ¼\ùdÐ/ÏÉt@//É Ë£–ää8fß?}úãÿ~ûå›,:ݼý7bš‚_#V'ÜP˜áÎÍÀàØÐï‹`áü!£ô“üåŸÿüÇW ©X¸v¼t‰;¹œzë}ç À g· Ô¥ZÍ·[Ô xXKŒÞ‘Q%þ£É=;ÖMÈ<ýÜžm]kÉ€ÛA‡l¿]R£.X5´¹%Ìñ2:Ë5 û#ªï]™2ظ±?üsR£nƒ—×Ô(„ 5êÆH„+Ϲ ùIDaü8u“×qøØŸë÷dLkKx~¶[Õ÷JdDºkÁ° LÐÆñ‡tDÙ]¤tl‰òÈT,2œÃøó¢>·„¿VYó&”ÈdèÆ¡²=I JɈô6>^‹LæFþì½ÿËŠ&>µqUz,2œœÄû¶Q~›ä$,2ÂñBÑÏ-áIà1Ö‚EFÀý¦ÅëÈa‘ètï£i …°È(µqû¬i•Zdøïèð*¢M'mI‘Yq3—cc+´õîœ|,ª¥6 7ª6 ”O\2¶ÞP=&P‹º2¸õîĆTW%¾"¸™JÁŽ€'§o´#P¥AEuMæpE Êé͵ªF®Æ¡wçìŽ b³ÄÊ+åè½tôdŠ®ü"P©¤ÊÛÐrx@§N¨C™\ôÍö^òæå:W>å;ëή ÔpÖ7‚*®ƒU!Š™+Òs(»˜ P£5C/o T­›’·O·jäþ  %·Êû»M PcO5"c ”«!"UC‰Þ~» P猣ò Eˆ@ ´« ¨Am¨Z¸$P‡²NåÁÓ5¢rüÁt ®<'P½†*¦Z\¨Nñ:[ʵTBÂ"ÃSæ¸0M Jä´ÞJ F¦žÐÔâ5D¨1Ê+Ø‹¨R1J9@‘Q „ZAjHl݈ #Pý®DªänZE ƒ+ÁÀ—Ï-V,2EF_â+mTª5#5º™nD†e¿Œ–leG <™9T6jÄd¹ýžR¿ñ‹ðÒÉ8áÙ“)Ö—N(ûœGú}¤?¶ÍÒ1?H$Ö.ûA¿}X/ï(ƒk5ï ÔZÓÊ™gp­Æ}›Æ¼RãkÄ$ƒ[5¾zPs5S`ÍI°äzTãÔз5~ZãV»åÈàp¥Æãy¡5+øv­ÆãÙ=̪ñÈfƒ~ßúAFIVã©4¸òL4‘\±_¥âØH5žaGƒà&sh­ï¦A³jü˜tc_Þªq–Zü›ÇŽŒTjpÙ¨q“rAp­Æ3‘Uã§•o-˜™bEjüx¼†k5Þ¥Ýü˨ñ8b x鸾ÌwÌýe5¾é¨SC½,R®Æ»ÈѼt2™…EøkæØpéd¦m-dÕø865ÇÍÒ-W‚¥oH÷[,f¼t"f’S|…Ǿ€NÒj¶j¼¿VŠË‘¡–N¨ñBŪñË—NøÚ¬ “j|<~·tëñ5ÍÃŽ­Í©ú2\¨—Õø®%N¹ÓÒ¤Ù'×j¼ÔŒÓ[[pédÐ#¥Õøxüfé–5ûé¸õù­5žk*PW?=E nÔx+~c#¸±ÆK »Òi7j/„’Q "ç€ Ð\W&a®¼è˜·&Ë©•ç%Î]&”Å’›ÎÔÊ3®àRkYù!¯lSµòü}ˆ8SÞ¬ L!ðò6˜R3ΉˆÓ"à:˜RqR)K÷á//J†O} ½0ã \w³ a0¥.Gƒ¿®*犺£•W&!/Ì9 .ðÂPs¹l‚)nr"`Ré9 ÕÀŸÇŠ˜I­‘ 9¡4ù ×Le´ŠKÅ&•ž×€«ÜÑ|u¿þÊ_«s›jªnªr|¨È=C¬7#‡ÿùU¶"ÈmXn℃ªœ€c1)´fN¤0ôDýJ inI¾¥ÚìËk ãîEab"ûtS•3>1 tÑ4º´X8Çð Ù¬ÊɫښÁuUNË'N7u³…›€å„ –›=óšQ¿ó=â6µ•Õ5K‰Œ+(Cn“e,2ÜW“Kh8©”ЙW4kLÎ\"éQ®a‘áI©VX•S+zy“Tš2L*í·’8’…+ú6âÖ›>6,®ùyë}‹1'Lß ÜvRN°~$Q×c2¦o9Gôò:í<˜v> žà’¾õËm†LDÎmh?döHniõp3d&ój}Î_^S£›˜ij”bKg†LÜ“Ëõ¬àr²pãÙJ›Þ@£0Zy5Ë;\‘ç—WO®<ï‘L¡–†©Ñò-‰c#©Q_ \‘V³ 7ÔhŒš ˆQMÑ|»¢FÇ%DR©Ú,\Q£V#Ù)þ)ðÊ,=5òä-Üd­‡U`-Cñ”ŒÈ×Ô˜”#‹ªCpA|õ.KžF”$UûòÊ·D!º©‘k%Y¸j-Ô­áKM(jÔ_Ýe — ˆ\ÉîbV/S#<µý¼kq¢º³W%ÈZ/Ù#j”}ô7Ž{ (7g©Ñ‡§±¡…°Èpj4* 5}¶°ÈÈùš)¯…ÔBÆ"#ˆ¼ÖúC*%º†EæuÔˆRÀ"#>±»>ž¿>Ý3{©Q\]@´ÈÌ_u •sµÔèZz,2²&Ž FG]Á"SxäÕ]ƈ¢F~t Â"Ã\H©Ü}Á_¦FÛ¶JÙãîˆÝKPd$5JqÓý8Û«ÒR£p¶T7Ôhtظ/«þÆxrùH`¹&!ýþ—Jg_=x\ϸFΛ†IÇ›Y¸œÿpž”tÅ'` ¸|Ç\fÎÖ''ôòzºçÝ*A&] C!ƒ§+¸ìñxÎnZ:NNN«åèxt¨x¸tÿÀVj<§ï´!Â¥SðÈÉñ¯Ú§??K5î;=p÷eõ‡tj4»ïŠƒ¥Y©z0F3t~Ñ,üÇ_¿é¨7¼áãÓˆ¥WóíˆD\ T¤_ £3xùþ‰"©Ú³ê‘“M3{FÀEÅ}gĩͯâ!­Î7œëá#Ê’6ÁŸ¶’oÔÆñ›B¾Í¯ÕT9Þ8½)Þ¦ |о.Vmœl˜›Ñ^G”>f‚'U™¿BOê MÔÞ8yßuG\\m•ñÆqmj\_%²ný¤FjãÜ÷cW7) \d豋š»¨é­õ¸…ü•5†¿ó¢¦Ç.jzì¢ÞÌQ>tñ+.jÚ\ÔþòEM]Ô›Ú›Á€Ú+.jzì¢ÞÕÞô»2¿â¢¦7]ÔÇŠàﺨéÍu´+ÿî‹zWî&­/_ÔôØE +@Î\²øŠ‹šÞtQÆHÙlÜ;.jzëEíÚL«ùùýÿ¶”˜"hÀuÍ¢·puÓÁ1ÎÕ×XÀù…z<¤â;ÔÏî"ú僈MTìJ[CßõË‹Œ}òàÌø0-hýòÂ_ç Þuc4„†?ÿäQ»‘»SPžU- 4ܸ¦|&:ÿÀÿÝO­–å«dðïßÅúR¼Ý>²öÑeßÀÍ]J¢<¿ŠÅºµýç/ošà”"ï}/Ïòñ)×1¾{~‡çcpåJ£ÐÝu4ƺâ‰ß9˜mÝV­Ú¸,ØÛ5Qÿ»ŸF»¾œñƉ”nïQõ!C#4RÎn®´ØOW2 ðG/<7]^®îº1è<6,>Ô˜.máüåG“Šr}WAÊØ%Þ¼¼¹ëº‘~\Ô碰»n$¡o—6lp…Õ“óBAV Êà2™~$šœUiæ0øX!fú£5ûEðò:fX[†í=‡ßesl¸ ;–šÀlN‰:6üBmñª¥W‰êÞ­N‰êØd¡†¯°ÎX”Ì ¸.¤=îãšî¡Ð.Àc#ÇÕâ碈æI¹e|l«lxì§cCîÔ±‘Ue´I—®.âcÃ.ê‘`ŒþñhV>6âég5hðÔƒÓc5=vQÓc5=vQÓc5=vQoJÕqÙ½â¢Þ‘Rrù55=vQoHéð ¥W\Ôô¶‹:ކ/ÁÂ_Qgôôw^ÔôÆ‹º_#»cóŽ‹û*}¿zÅE½£Ä!\í#_¾¨é±‹š¶s!¯jö—/jzãE=ÚÁ'|l^yQÇͱyÇEMo¾¨ëlbøŸÏì=¥!ÿ›÷€ÁÍE}÷D3už™þIöuq´6ÕÍË ïAÿæ=Ð/ÏáÔ2¼ÁGUÀæå…óa¾·K÷<þS´Õïæ{BT»¤8ãqn.jšcÌø¿ûñ©´ZíÒ™û¸À«£HYIHøåySYßJaQ F¿¼›sµÎÿîǧ”‹Ïøåy?‡§îÔ2Ã:êåyoÒ4ã2’­Ž±… ¿¼°ßï¸üßí·˜+¹üò¢/«_//»™®Ñ}êå…•»}tÝGøååeÖ˳ÛfœÂ//ûGìú~ ‘¡Çnzì¶Á¾Êów¯¸mè±Û†»mh›,´AÛ¥{õmS6Ãnn›0l¡WÜ6›\â®…#PFiMuQ/ÿï·M¿-bI ¿¼(‡òW>íË· $fgµn]r¨øå_qÛt¢]}À//ËŠ¯8ìË·Í.%µž†êl—îµ·Íh®ÐrÅ//‚ÈÞ·WÜ6;nÓÏÍvLÃ}l¾ÿ´ã6# |sÛLZÈà 26•®Àm$â{dX§èåÕ¥B´‹yÌD)ñòÊuuÚ°/ÿü,ƒ 4ÎV³Fè1ç}ò ·M5ºh ùâ¢fpþô~©dj%ã{¤Ø}·)+ýRÉó«Ø=ÒZ°û®­ÈÑò$À˜GÈuÎ3pUØX¯°z¿lb·.ÁÒéІ#ÜquDLÞ8&ïÙ5*È L¬ô@mœ´·J€×P·Eoܺ“|ßÜ„í¸¾¤7NvТÊN=&Öô˜XÓcbM‰5=&Öô˜XcßÒ¨iõbM‰õ.­Óþô ±¦·‰u?Ø«³€¿K¬éÍbSÃ÷±Þd¢ÅÄ»íÅšë]/âàçþô`ë‰ð³~ï&Õ`pkøºó1xðt32(mXÿJsOWäþî eÈýbçòå•+!6 Ö‡Ådžþü,å'¸zQ®„üô¶O¸u%„Ye‰V.>ÿvE߯'š¨ÝýU®èÛñ‰èÐf¿rõ:œÛwzlß7$õê‹ÿoûNíû.¦ÛÚÕÜýå}§·í»ïœ”<øö÷í;½qß;ëŸ>ßß¿üÜæ«9¿Kƒ˜µô nüÝDucª"¸è.r||ÛÇÏÖ//I)mò#rݼ¼°‡VÐ.:wœ}†ptÍÕiMLøóøO.ÑÕ™‹/²(FõKÐðQóþSŽ£¾»ÂþßwQØ-™Ùæ‘Á-ïÆçýš®ÆàŠ„œ¯‚1E‘W’%ƒóoùãÝÅÒ(â¥c‚US¬¥Wôms›¥Ý+üe,Ž¥ãðQ9Š—ŽCÚL³®}»â Tï@…–ä´Ú{ª¥cõf)¹‹CŠ9á¥ãfz« Œ1Y /ÿUªWpn,øÃ꣖Nt%K©l²3BÅK'2=2»çEǯEJÕÒ±xDgÞ’ÍΠfåý\:Ñ‚ÔÍž2;ï¦'jé䯮Æcéd GõxéDÿ.69©d¼tªT#à쌀nþíÇÆ9 ä‰-=¦eè1-CizLËÐcZ†Ó2ô˜–¡Ç´ æu¥•;áe-Ciz«–Ék„ˆZºwhzLËàò•Ô.´WhzLËЛ´ÌQ•7K÷-CiìK¦‘­^¡eè1-CoÒ2Òo£–îZ†Ó2›IDl'Ë•Œ—îZ†Þ¬eܬCøþãw›_ ©q AóÙ55k¸qæN3ðwÁ•³cVäæÚï¢GŇþi<ýÓ¯?¾ý.U­jöõòŸ~ýóçïb,ÞÕÀñÓ¯¿üöâ®Dÿúã“ËrLÑüíÓ—?æüñlü\-üË?ù]yÔBÎoO¯úö´ýöôªoO»oO¯úö´ûöôªoO›og¼Ð×ÕY[};—ëa©¯og=Ñòí®¿=‹˜l\ßÎÿà(l¾=óo?cÅç·gþí9o¾ÿªëØùí…û.²Û|{‘ßž×·öí>ÑæÛ w}œµµç·óN®µøÍ·ó_E’×·þíÁo¾ÿ*Pšß^Y¦y .ão¯òÛýúö*bŽ~óíUl/­o¯ü«|Ù|;ÿU<n×·WöU‹ëoç¿:›ÑŸßÞØ·”s̯†£$}»’ŒþÓT*µ»g„Ø8)¥K5!aèw]2p#£5Ðý«yêGo­?°d5q |˜wÒÄ(1ÂMgűÊ3՜õdŒÊ!sæÇÒÅ9ŒŽÃõ¥ß加d¤VÁÓÕ­Ý góLÈ ®Îfìp¾üçÎ7.´›ks¸j–Þ•ÉåÕÐ÷ü˜eáòû£Ï08´q´+OàéÊrèÐÆG/¯Ó>òu+èëÜål^þ—ß¾ÿùMê²£|RÚ‘‡}xÿ™¡ãçgE~á:§Ð)”†Ûë¼[öÙ^ç§c¡Y¸ä GÖJA‡–b¼›ðø—ªÿÐ5~[æÎê¦2ap}´Ã=ÑV³‹N1ÁÓ5Õ-tžh¥Òˆ¥“\¡w•ŽêÑÏÁç®ÍŠc}žb#—!I|ÞˆÝÆ þóûüÔwtGÌGw§ó.øo¿þùŸßþÐS]ï?ü˜Ç ®6u¦q’Çϲ­ñ»îoŸ'õùYÚýE=ÜÇ·ï|Á­dÄ3‰Ied>¾yQ3¸º¨ãÈx†&Ì@ñt)%Ôϼ) Wg~Ì L¶Ç™ÂáŠÂŒzª†(Œ‹s¶‡+51bJ\š½8\Iœ¯õ2˜”šp¾¡oW&tÖ_0…)lœؘèJ¤VÛuzy!°Ç}Þ … aŽâp¥ bõ~Cah^Ôþ>p#°ÞÕ3̨vŒÿntQH鼬”Àÿà´t§y~–Ê䛣†Ûá°àÖœÎ%BCÙ­D7rIwœE?|¨ À•’ŠÄB.Ü1ÂTÐ ®íì˜n›ã7Õºk) W–I·l®þV’ ÀµÀR¸†^)#™¼…kí— ØÐ¦¥ËàÆL¿ –¹$K—ï°ƒÜw¡‡s,)UÍû:/‹®õp¿Ñäuý­\õès·¹¦%y ¼+¯Äú’w,ɎŪÞÚîêËWb}¶= H’GcŠûå§4=?ûöýU¦Ð±¨®ÝgG¨Î#y]’ƒ…ËÌÈþŒ{¸´ºº¼Nσsyÿxh™å=ø|§¸”÷–] ú¼ È•¼Ç’.NktKàÛµ¼wnzö«jZù|åµ[îN^3·æÁÆiy/w§8>µêèé¼È ºëÑ?2#I®ýõ½…+âíOÕ’jCÇFŠu 5,É :m®Mz %™ÈŠÌûô„[±Žt–DF=™—7b]hù»§8t±–æÚVw‹eºQ&Æòã¾Ðß=<á.ÄoèÛ€‹âìýT,\ËÿÒ"Óy¶p!?WŽd¾Þ{ðt%?1ßü•ÈP¿V’… êz.QC’ÑuÙº“\yßú…†:{%CÄÆ)…Wb‚iD¥À§+[Ó÷{ÏCÉètÔðwJÆ  Ï#êz­h¸u£Ô4ågÈçgy6÷ ¯›[Ëôû×I3¥UYÎóâcp-?䯢"òÓ°apEƒsŒä!ó]28\ñØL®TH]ƒ¯®å²Ð¥±”\RÿöbáJ¯ÕNHtªg—À·s‚{„,c±ŽË¡‹RsÁµS½ë5‚7† ö]̹þx¬°‡7Ïá"rßÿ|wSš°ïÉt£0¸R‹îb.í[jÀ·k»µS‡¢ºœê|åµÝz†r^$¸þ‚K`ã¬Z¤rhkKp[KöÐJ»õpù©3nþ×õå—¯Ò—ÅÍú•·úrôŒ4ò~T¢Í4 7Âï.窔wߺÒ,ÜćCÃñáØÖ½¹à\ø?/eâóU5‡óôni¨ÄzxK½¼¬ûVÐ uå·r¸¬nÞtÚv³¬¼¬”<´i%. ¸ ð–®t°hvwçp-X¹ñákÂ_+XgލYy¤U /‡´|tóD=?K#é… Z˜HÜÑ:Ww2ÔØîI®%.†K+‘ñ)¹báJ_úpg˜JMèGê*xºŒsã38ócäo‚O—ª,»+d.V9w„VyGëÈ´p!ÃyZFÂËò%V^JFýž0d¿¼|ét¬ìr0jaðŒMøû(æ„•s6TZ&góòFåÄvΆ³Z&ø»ã?óD=?Kóg—…tžÓ7;16œQÝPÂðñtö[¸äžcˆÚuUꄎ~œÉÂ÷lÅEœÐáÝ´‹ÜøPË•Œ¯´LÍU,\QÌäòU®ÕOœ-u8\é"JùöÉ+V™BBßþ]—j$,°>Ï0ƒsŠylŸw,8-MÍ_þçwñ«xgÈÉÙáç¿ àÜ"=œ5WýŠJޤ¬¼²Hc»{›` yðòZ‘Öp­¼&¥Õ¡S§j×%Õ^—MÃßw]L¸½.ÒiÌÛë¢_b®®‹±v×U©ƒ)9¹i®Mqx~–ZæRf»æ7ép¶äMÒâÜ8W·B(wW@­a+9×·Bv% øÝ´·8\úfiôoÅé/!¸2hÇ lª2C™Á¥ i$;\‰{ê‰~…ð\çØ '*¼GZ˜(×—Jq«äÙ3ÇuQÑÊ›K%Ô´Í¥´p~©\Ä e;¹˜*’ÁÕu‘=ï1®3HÀ¡Uì"Ç.¯‹Hs>‡kÞíò• ¤©vÈÞ›÷]xw>b1 H³ÔÄ„vQ«?uœ‰½¦•÷7Ïs¿.~~yÍuá»È%G B—‚ÖÖi^ä„Áu„6ÞþCÊŒ?2¸º(·+5KIrßÐuê\òÎN‘apÍ»½Ï †Eýìr$ŽLjèbU"”äÚxºŽñÄ;¾ef –Nà!¸ŠLÙ,Ýûä}Â¼ç† ðÑÖ_Êìâ^vó®Cûue;|ýöýuø(’ÑpË»éÎ3ÑòÞæ¬gWòr½Ž)‰X±#þtUuíÒ­äÝwK <]çk¶»¹r¾Ý˜éw2¤Ò!ÖRÁ·K±.¥^ú]»yiE½\YоÞ9óZÞ)ðòFÞ)bíêôð§+yÏwö²’÷ÎI lœÎ2.ñº*uR« <]çc¨‡Aç&`å5qöt—É‹ _óžn|Ôõ¨}ÑG=áoÉnªÞÀí­Pc†9óc¨ëýòó@>?k-³Í™÷eFí&ÆÖs¤”2’÷Έ'§epM‰«ßÈ{¤)° ®ò‡}º³ÖužbqÀuþpŒæ‡ºèƒ›,ŠZ`~QK½¼ŠªúRî*YÒß˧+Sµk‰KÇ—WNàé: #Äaþpgäì»”Ëì]ÃéI žÔ+è0¬Y¸æÝþn aþÁ™Ÿ‚žpàò:Kl€‚^Iïn y\©²óàŒô¤¯¯MOj¤áÀ³u±#°e¥‹2¸6hG”e“^Ár«¶Yƹň¶‹û¼Ò8\iëvg›*¹®R Wb]GÁ Ì2¦Ù6ŽÃ¥=yD…z7[×r¸ë%—Z¬‰€k±î—G„ޱš3XyõÎ1¢@wè«Ú,\G½G{8H¯›/àÔ¿4a÷Yì† €£»Ô-˜ð·Ðë•I0á€^Ÿ!a›KIKÎÍ~~$ïÅx¶_­!¾}Û–çÝË%ùŒ`´`áÚû–kƒënÊÏcÃàZÙ—2Î¥Ló¶á//ź“ë­ñT‹O×áðq%¢iŸçP×Ê>¥[hOvŽKþí‚Ãw³ä&÷Úœ.iz"\ l¿Ðâ†ûÀÓuëŽÎÁAñÀÙh¬¼öŠû{åu@zT [¸-Ç% ‡¯Þö`å;Ÿ^-Éœù÷éá ìœvŸ¥•»3ᶺ/¯„Ù†çùù·¯¯«4÷#L¢á:çq8šT¤ÔY¸*êq(‚Ä9̶L®¸µìaˆÈå•i»à*>BÍ0”s‰àÛ•º ] $ÎúzôíâWýÚŒÑëæÝJ•]pM¯gޥ׬¼–ÞÑèêá6‡6È}zxÌy„n.ŸWéß8­‡ëu©˜"¾Õ߀Õ™ÔH`ûÿ\ÀƙҟÓG÷rŽó u*æ)²lë†[Cײ=´:ØbšG{îüó³ð¼¼$ÖýNÉŽJJÂÙËuÞÚ . ¢-Ü^7.‡ƒ+u;ZøF˜(’VĆÁõ­ÐÕ5v•UÄà:kd¶ÔQ…§1ŠÏÂR.¸Votr ®ÅzœA˜–Ú” ׯqmêᲊľKã8ÞíÃtéB™C¤ÅÊ+ã8ß-[L_Kàå¥XûØG†bíVÀ‡¯ü•æw¿(Öþ¶ k³t(KÌÁÒ…arØ•71-¿šÌ€Æó³¨LyÉjö³Çò‚±¦jÅú8usR"‡ë˜Vç¡8í£¬ön ®{dŒæ¦P¬ãj¥ÄàR¬i4†©@¬}(K_2¸VöÅ_ß®¶ßÇ|ûw§•AéÂhâ[ xºÉ ½¿]iëܨ€ÓÂßI…òÞJ§tzÌä+4§ãÊ„æÇF¹È[,°'NJ};°­±3l4)§„ŒÈÜTT$óòï#álëè±3¬ºj¾ÝÚÖ1O3eîé󳈀¼¨­ó¼v'Æ${û–/uk²¹–Êapººs L6WK®›BÕtÅž´›«®³ÉàJ)wó4$˜X™sõàåUÒ–»ë»‹#_ÛÂUèªÑ{rš ]…èg] ‡køn®Ôm¿RJA÷·îo šFXyÝâ,"¨nGÀ¿«i…€º=XølFÁàFÝFúWoÖ„¿¥R°4ótTÃQa+ŒRV¼u½¼IëdlÚÿŸW'Ùϯ“Ëi&mMŒQ·¡ŸœeW÷>×rIwÒ–.hÿgá6¤œ¡ÓÊ%7·—Áuù>… ;Éz(Z¸T·aD]5ýHHÏ.•²¯õÆÅújä VÞÄžb+0$ç™ËàJ_Ö.–H_Ž~™¼¼ •P+¬ëï–up)½~pœíWGQ¾òB_ŽàJ8xÔ¼ùöw:­>ß¶¤ŠiÓ’jå·N¸Mõ`•sSº¾!ÿ/5²™õ„<Ö©ì¤ÎëîXp{Š© ˆt__Wb]Z½ €uÛŵÀ ®‡–ÙkWù¢“àéÆ}GeuT‰Ü¤‚ ®Éri vžòyÕV1¸iG-`o–‹àÛ•R&ºÛu»hDe‹Gû®>ïš:­ÆC›ÞFWÚzx4 ÖÖn±4öòÊ8v7K³«xºþ‘^cO±e×d¹¸£eØËÚú†¿A[綈Π·Ú:p ‰Ové´¶ŽŽ­^|¯’ÿû­púT(j8H4¹ç™²OÙÂMMDÅ=°½T,\û¼òœ;­:OùU˜Ïà¦|ßWØ»«Ëy¡2¸)¬ô Öõ“_-ž\¦Þ»‡ ¼ºÊi®o…nëV7ô ¼¼Î2ë+DèVæXy•~æc¸LsÁþÆÀu o…~æˆõÞü{ë ÷¸ë|ÉËräpÕ” _ÈeÖ¿|eæóÓíìt™õu/Õ<ý·_ÿþýþPÏJœã\ÞûG‘yºé=ÐYÒy놱4ÜÌË«»ÏŸg˜ì${h“¦áV`»Ò(P`»iQ,\ lHWã*ÓP>]—:u‘zø¸/,\ lò›Ž¯¥ù`áºd-vŽZ-Ü´. {:ÊTRK§µu¾Ó(´(vIp]›˜*öfÜkoáR.‰È¸Æ9®”>×Ú:Ôuë?ÑÜ8­Ng˜Ñ„±³ß®5aÉi¶öšßÕ5¡H†yÇÕ÷}b¬×©[h°ïU· §Áস°z¹˜L™,¸Ž»™›¥ÍÞUîÃàZ°†› ¡o×ò3úAp¼¼ÖXDmÓó>47Gû.2SG;Vša;þíJ™Œ¤VthûU—ÀÓµß'·Û§¦s á‚&ÙIÙÄß~ájb`™csüê‡þÕñ‡ß¿üGPL?Gsqxÿ•tÑ9_J+)—)g W«3TØy*”â§·d-–˾B³4enŠšÿ‚\¿J’&Æš§#ÛÇuâ ê.¸)Ir¹àÄ´Âk?~îž¿¯]Óy*¬Èä‚ëÄt'h¹¬m.×-P©DH1»6˜ú’Áí¢GYŒÑ3®å²Â,¦Ñª$LŠÉàŠ ¶k¢®•ËB+6È–N7ÛñWPWWõŒ^ÈnZºµK2”`ùBÞ¬¼,ê"€$£ïÈ*ˆšßõü,¬ï|¨'ÏJ&ùó÷}\þ}WG;µÙ¡@©‰nYTW—þvh,“UfÏàÆ)—¿BŸ§–§ûY|ûߺ %Ùt{tu gpì ûƒæ¼& 0¸² |·@pó¦JÙ,Õ±Õ†³dVhd­»°œs]Í©kmµSY/oîã~ä§`Ý_ßïc™¸¿]kô e•žá…dá&Í%;hòû5ΑÃÍl‡;úcÆ9Ô]à/¯F‘ÖøhS/o˜J"Ôúv¤aW°têº{8˜È´rt\Þ›!ÄzeÐë‚çæ<øv›¾y\¨€Â,«y•3ìlìJ¸rbeaL8p†UBG{ ˜~Äù]ÏÏ’¥íí1 Cà ‡ïW~NÐj~nƒïãnšÌ$t¶uÄѪU5ÂàzšJt 7›s]-\Q òÎa‘‰k6xyÕê§¥ð7ñ™F×e’õ®,Ö,Fß\æþÍ@R+¯8ˆë÷&t4…0çîr¸¾ô}>³~ 7&ÀHO"Äú?Xø§_$õ½:eàð’Y—¤×D'ÅÅ€·ñÔÌË•3쪀£ÈkÝ~ ìüÏM±^~鉥N©aÖ?j ,Ü4¹-R%Š¡¬ž« nüÒ¡Õ›k†ÀÜXãž2Ô^wW WrÙIZ‚½z(¸™fÌàZ.[¦Íd¢„^^Ñ·±=À˜?U,Xy=›qä"@c>´^^«Hw»ô ¯£‚ŽnÝ2T‘ÃgëÁÊ+y§3ȉT䬛p 7ÓëWÈØTèN€*äuyu»oüü¬úîý_¹Lê:1FâR.O®+ÅàÚÕ‰šT2.±y]0¸îÏžò _jÊÂu–òp"!‘Izº¦Ä+XÛ2l”+úO3v¡â: 8½o ®ÍékEÂ){×’‘ªvöqÙ%×’‘ÏÂöÌ[HÕ’:cTRƒÛx ×n®Ô®é{Ú³U½=óFd<›•;fOÔïH2§¥Õ^ôÆh'õø÷˜î~ûóË Ì|yE©àÙÑ!h8è @ rÉ­â7n#*Ù?yRµpí§òwCF“÷Y¸lÌ7.¸ËÕ£#6cj–…ë>ê%ÜC9þ’µüµ8°tÚ_Ñ/W8€»Ÿ¾]uá.[WrÙÍ¥7î«nóB¡ÝbXùÊ뉭w{w[=P\Å_âmØ(±ö%¡—,m´¸;°Øj!{hm¢onG33³>¤UUýÛ÷?§ÈÜÿù2Gô)/e?1Özj5ᎊ~å.0¸.y~HèumeÕÑ-¸ÿÓ9a’æÃ4«\ÏÚé—>ö’ùÕy‡ÁõÙô¥{Ïzkpô1ãmy%¬1¸9›1£þ/”ÚêÿÂW^Í~8:ŽÃÐ-`åu—˜|„\¬o–´ nÙTLðÐŽ;pÆ#þœµ£"'h{ÏŸcꚆ۾‹ýl≭ÌCÈàÚÑMGùW(-‚§ÿ.ê6ÈÍ–ÇÌ =’ÁVÏ#מˆtwÚ2=L‚›±qtùAôØ+ZJŠÁ¿ª;JKÜhveá²ùÆá°ð¾¥5GÁõÇ”®ú<•‘qäü¸Òc<(”¸~š³…ƒÞ*°ã’1°òZâüÙÖ_K\ ®€Ck´ÁyÏ›éÇ9ùå6ýóÛÞ/}XãJâÎvÂ÷Êÿoµýýß+ÛþR\VÙÿ~~ÙŠÌL ×ÓÒRnZúË´0N‚ ap-tÖ6žì4CëÿûùeÛhÛÑfböàåµ/ Ö0éiÓ…ô?Þ1Y6«ù#+aÊ;‡+c¾S †IÏÊéfp}æSs°„ª+©Dcp}æ[Agþ Ä¼¼é[‘–9rÍí¡µG›Üä_?þߌÎÿdGûüÕçß¿]Dký×ýçÜ-J2>0ø%€ë¿ ܨ2ÿï/?.øõ_.þw ÿôåÓ¿þËÀÅÿ.á_Ü/?ÿë-/ÿŸ÷ÒÍÿzËÒýg>ý?ï{ú½tó¿Þ°tËîV8¿øöO_6­N_~ü“¿EÊmtý Ý ¥ÎÉö®§j„p^»ŸþaIïþ‰º®¿ºOþæPzîîöéÃX»5‡?âµàO>úùô›‚i2¶ÿöѱœ,\+ûÎ42øv?fÏ¥» }”Ú=ýФÁ•Û(µ³ë¶üö§’(­—¿µ¤Ò—/|{ÄÂuÈ%•–ÁÓÇ`ˆõô[ë. û§g—R±põí5Õ†V~ÄùnWO‡_*ÞT£lŸ>Êô‹…ë§ßˆÌ¾ÓÌ0ýäo¡}5/¬|rÀõÓÃUª¿}tX/UJóÂÓG¿òdáªÙAQѾwŠGóØÜ…ެ¼pæ‡WÝÂuëÂO® W¾v‘™×ÅÍÍt$õ…}o“#r¸Ù÷+åE}{­yæ~ò·5d|ÜÛ§‡6'Kp¸–8wõ;×߇ëÂÞ×…™ª±{zô5[¸¹mÈ!y/ÕͬÝOþö š.¼û•§Ù€‚ÃÕÓS¼Šüõ©«]-51¯‹¯¯¼mFÁf±p]íЕÐÓGëé)27¥·#¶OϹ¸iOrµëÔO/-¬‹ú¶t.Ìþé.QÍ®õ{ö>üœ÷Éßöˆ¶Æ_xz}®žNc\ùÓÜ÷;ªB¡/žºÙž—Ãõ ë|ùôÓGæÝ\ù»Q¿ç¿~{åÊ3n³àú¶q5ðô³?Õ¼¬®— v½ôôÀ¸Í‚k‰ëb‰äµ8¯Ê;ަ:^xz¬KÞ\K\'1HÞ‡™ÍXåÏ)ï?_'ïÑMsÃõÊSóhßë葹(ñçɨ?¿îécÄr¶pÍ*Óå‰0ò>nêùò—¡¯3f^ºmb̮彤 9mîš×/Rú·}ÉÙÓÅËK¸Ÿù?'5úóëÛá÷+kròJøíБÔWÂo/…黸:øí¾Ð ¯„ßNíîxœ3émfàqlÓ̼ûD™ôV3°“Ò:]ÆŸè13Þfö§ÚåÛ…ô‰3éÍf`g&3è=fÒ›ÍÀ<¼Á÷eE™ô63ð$¥ÄžþHo3lj'¢uê3émfàxz%Ç–î!3ÞlÆTÊ4é13Þfßµ×”¸ÇÌ@z£8>>6šK÷˜Ho3S—i]™ôF3p|» Kâ3éÍf`ðÎ-‰{Ì ¤7›¹_Áq~ûcf ½Ù ìD=ú¸.«GÌ@z³Øé⬠þD™ôf3°3ååp£ÇÌ@z³SŒa]Ô™ôv3°“?7î13Þlvj2Æ~¢ÇÌ@z£xwržûHo6S·Ä–Ä=fÒ›ÍÀ!‰Kâ3émfàqÛø°nÚ7šãºy™o45üf †¿Ñ Ôð7šþF3PÃßhJøçiû3ð &~6— ãþñ_Ø}ì•ði}Cìði>Kjº®‹ÏÓþ¦Ð ðëžÿüm3ó_àí†ÿ P^ùíÓ„ÖÄkžþåÛóJø$ñ€Ï¿âå' „ü+χ¥ÿöö§ó™Û?_{lžîžŸÙÚÝìe¿ÙÅg6—òëŽÍýílÈÞn2䋇ö;nýüJ8›ú³›tõœÍ ÙÍÝy Îfìæ{øÓ,¼ûÌ[²o总Ӟ>³ÞÍ»~åàé·Ÿö3k1»ë‹ŒN]º—î3ìÎûZåí7]&_¾iÿÆÕû¯¼çWùý®oÂKð?ú3ÿm5Îfx‰ò™!:2³as¾í¸?_>-/~êªpÑŽÄ3Gkð¡aùC¼õÎKÜ%ÝÝÍîóßü~½ü¨8á/Ÿï&ñ™$6á¿}úõÇ·õ³AßÎ1¶ýþä=2€ÿòÛÿ‰_½Úû¾þøÄÿ°Ú’qø—?¾Ý¿:{éûþåÇŸ?Åâ!úÜ)…?þôÛ/¿~ù¿ÿòµë¦æÑ@õ—ßÿúôÿñ?¤zSbï"ó—Ø :6nü¡_¢üÓüð¿}¿:‹¯×M#€ïÈËTR‹ëµdß+øò:õúöãµd™¨áÏã?ù±‰­]Èù>>Š9™§ŸÌ*‰ ±­©~báKðqÓ&n(—¬Èœ[â-\‰Œ÷þ°&ŒÈ¢¬áWfãõ»òiäïìÅyhÇÔéÛG-à#1­ìe:½Fçšff^Ò "ó—ç¿êOß¶Rù3÷”–’ÀÒõÎøÏ®ìر¦YT°tc³Hk¾†P5ðP̱9˜?¼âá=¸ÖôúSzêèt2‹¥ œ§ ílÌz­éüƒoy¦tëC[ا·xµkæAäæï ’>´E¦ö®œì"l‹øÐ‘ÚËÌKþ‡¾ô›C+à¹Î5ïweÝÚëwôc¿èi­i™!-JdOݵÀe9r:‚ çšVñå-àC[™{¦ ÍZÓÊu\Aß>Xü*_•~cM«(L)Zþ+®*DZ¦ÁC[?țү5­SÞsÌÎom]ÞÂzÖÚ]kZ™‹Ûñ£Ç”=¦¤è1%E))zLIÑcJŠSR•Ô˜i~U=i^G5U ½’r\` (©ü”Z:I©VRµË›¯þ>%E))z›’’‚+%E>ÆW()Ú)©pôL•J*>µ˜³…k%•S9ßþ›’¢Ç”=¦¤+©~OSÃJªÅ€í¿+©CGQÝÚ©¤|Égë@­¤¨¶9ÝÚ·+)zLIѕԀRñ¡•Jêjaò²’¢­’Ê(©n^FÚÚ¥¤º ÙÒ¿)©¯üwgIõíPIÅÜ(©T+PRg ï üS«²ëòé£- xºÖqg£ã¼_æƒk7ÆqC·bòÛUé9‚äú*¥üз‹§*ÖUä`¯áÏã?Ù§Âkü ÿÃðJ·+o ±ï$ZÇùxGÿ9\û.†ê¸âoWç‚kC¬•Úª1Ä||êÚ¹Øo—:.öoïßæ¢0-“ý"äìåù¯>>u é.SHYRaõ÷K§-)GÐ’­ÏÌÒ%•B–Tå܆ûRRÞ=•~™ûb”Tèwh™Êõ±á÷y¬e›¥¤|‡ß}wô±áj¢Ý“é…–9oA ‡¿Ô2avî0ǦÜþ¼’R(VË„§¾¢®úͱ™Z¦ËZ~χp6Ñdži™Ôo• mŠmsl„š¸;5Qïäul„šp­ [¦k¨b/j­&j-t\1ZMÐXRöòô˜š ÇÔ=¦&è15A© zLMÐcj‚SØJ©¶–°šH1Yø«ÕDN>j¸V®ÑYS-ÕDYÂ%'Ÿš ·©‰Î«œ &îëâe5±µe\Bj—í©“¶LëVd·FÚ+Ô=¦&°12Þ=†šˆøØ¼NM$»qZM¤Üï”hÔ=u[dN 5Çæíj‚Þ¨&BzÀÇFª‰^¡&h«&îo—j‚X­&J­™Ò¿©‰ßþücgM¸k¾€Q.O[†Á¥š8_ßàë®ÓO—‰pÝàÃË›§Ëû¬\5/ÿéÓÿ÷Û/ßÄxÜó£Ó&v½ëíËËãǧÖj½Ây#›„¯É8aá#u-Pî— Í¤î„ìJ <}äpŸUˆ¡Î¬ö‡Ö5/——ÖDhíš^<ÂÃüßm.ÁoWÁŸè«ÕÃaWîüù~µzœT©?üS 5Í»nµ_­äocD¸Ò:'­“ÓNø¹½L™„Zý”ÈôGi4ýuìÛÇör¿ZñiMìæ ™)ö½oo'ûšÙ0v”«ŸæxúØÞÌM¾4 wÌ B/?¶—?ZªØ‘7Np¸Ò„¡Ÿ®f•ß'l`ã˜&ôO£;A(À‘—(=6Ú«7jìií(S?Cb#ØÂœNCbçŽ íµXñ+ßÖŽq ¡ÛËÕ%vå¦Yë³Xáîk¬©øw›Û¬ð)råØ ¬Pã¾Æh4÷ÈiËÁ®vy ‰EnÄCbœSRô˜’¢Ç”=¦¤h«¤ûýß”=¦¤è1%E))lËŒ,ô %E[<1•×()Ú))‘’Ê¡)æéZIåZ¯PRô˜’¢Ç”=¦¤èMJê‰êêL/à¯UR#ËÂ_§¤Æ¿K%€JjŒ)!”Tì°kþ>%E))zLIÑcJjÒêVäk”m•Tz’¢’*¹Y%5Ü!†À.]tHì¿)©ÿüü†-©³ûåñ‡Ïp%u‡››äÙë–íÃíRRÖá6U$ƒþãÇO•Íå7*rî»þvY°\×·‹6y>n¾]N!Ì8)!ä¸ùv¡H#aOœCKw|»xùذ‚^î¾ ~© ¥æÉd>ô»®¤YRºà2óáãSõÍ_"óMnûˆµp¥ }º*е† a6êåpÝRĉ¾ÝÝu8\y )—ì‘îty&Ä.øçO¿þßïâÔ…3¤Õÿðãç|<£´jðO_˜†áó3°òé×ÿüï?,%5å91•ÿüöçׯJçŽÇsG™êMcµß.³3ˆR»¦ qøPо8°qߤŠì†è™UJ„… {X{¤m\ƒ½Á¾ÿ)³>Ü=ŸÙº:£9´F‘ö{ú˜Ï|íh^N§”K7¶wjØœú5_ÖŽ®´œC#Û›çöÆL™íèüC*ÍÛ›öÜ^¦Lj£‹”ŠtÁ¹fë-°KA‡|[ šy:H˜9äZ`¹*+ä*Ò°>¯ÀŠX¡ )×MÒHðX`ùCèœaug?~#°…eyå#ÃíÚÑåÍ5…ÀòÇ´׎–¹£T\¥ÀÎ_…PÏÙ{çŽJ?ít´*e¿Š¹ÆfrN>>ù)a­BIøµ£"˜˜ÒF`ù¯ºdàXdg'„Vº‰v2wQlP`%º„¸vt圤Èɵ½óW=9ŠkGyÊÊ ¤j­«D ¥#EíÚÑùO#̸àô³¢Ç˜=Ƭè1fE1+zŒYÑcÌŠcVô³¢Ç˜=Ƭ ïbè2 ¸Ô¨àÁÂ_Ǭ®À¼†+fÕW¨œ³+$³݈lþJfUû©! —Ì*÷ǧò fE1+zŒYÑ›˜U¿¬Ö`:±ï:ˆ\® /3+Ú1«pt×1ÌŠ å6N0«Ø¿<ÆW0«ÿŸ´·ÝÒãĶOÅ'à^ ?ãlÏ$«ã$¯í™Ìsþ'òB}!è®jöþ“5}ËUHºB›¬ŠO¬Èj+·A‘m…ýYÁYÁYMbŒì;#eÞ³­°÷Èꪲ¢¶‘¢Ã`Um¦«½Ì}²¢â%ÒDaY•Þš¼GV°FV°FVðˆ¬ö¢NÁVØ>˜ý ²šßïMYQôž' Ûž‚õãoØdåi¿ø ÈÊñÕ)çõç/<ŒYí•J´¸>Xña’$vŨ…øGÈJˆ÷dµkÖ„¬®Ì‡ñÛß'«:¨9M¾½ïÃ4˳†î#d5~{w&…0!« †®^£–§75©æ¸n#ÿP<¬¯ýçGñ½d„<bÚKY×!>Ë„ =puOmâú\&GNôàÖcrï ¨¸È\·ªô ÅÈ–¸  º./Éôlh“í‘ïŽuÎÆZòÕÁfΓ‘˜(˜‰Ð.»ÉÈsw’°Ï6¨ÀæÈw? í°OÌ‘'#ßNÿ#Æ 8b¦µÆõp²¥¨e`#ìCµÏN°G^8è²—¸F^`h öÈ qŒ>E‹|-Dn|#ÕƒÍ ¬—†ˆ”åšoÜÀùj&§F¾ADÍÍ /IÛÁÊ8òâø>3gƒ —Q™X t‚™üCÝþ—#{ä»$¾,Ö|ç{ÃÌÚô×uDVgçßãÄÚtÒÉ[þ1b˜Œ|‹œxâŒÚ¿×A½š¤¨‘oœ"[þÝ»nÕÁš‡5ÿkþÖü;¬ùwXóï°æßaͿÚ‡gþbÙà¡Wþ#Ýðï³¼‹¼GTPƒsŒyý;"\;©7ý;Øþ˜B6ü;1ƒ{ä?àßᙯ—m<Û#ÏýVoø÷Y{m¯iÊÖ&#ß'Ê&ò ÿnöÇ”­àæ–>Œüü;<óïࣩ2Ê¿GŒ7üû,u!±ô2ÍA‡2*<ùö”Úƒnøw˜øw—ŽpßàßÙ;­qöïðÈ¿—×ò'#ßßÙupÿÏöïå%í“fmiGÿ|!Þðï0ñï‚åß]ŽçÿøÏ·iö~6ý»Ç«Æ‹W'#èØ>ëϨódäÛ¯R¡±æ/ÿ^¨òªC^ÅaͿÚ‡5ÿkþÖü;¬ùwXóï°æßaÍ¿Ã3ÿ޵hq}S|ï­óŽŸíß 8ZþDÞÅ%>úw,;U„þÝÞ¿Sm’nøwXóïðÈ¿á {ä;ÿnø÷Ùþ½¨Yû÷X[ÜOFþÚ¿×FªÎßðï`ûwdŸø†‡5ÿÏü{íš¼=òQ'Ƚçßgû÷°/›Á¿o±8&#ùwÇœˆoøw{ÿîsÆþÖü;<òïu Ý¢ÄÃÈ÷þ=Åþ}ZŒ+˜ñyHŽ&#ßü»»“zÏ¿Oöï1†äßóïÿ÷}ZËË;";>Ÿ®oâ:³1ÃÄ¿_^Fˆkÿdø÷ÝókqŸO³øü•º0~»l±GÈv|>_Ëfüö®,%¥‰O<ùö! oø÷ÝL¾½{HœÄçÔÈ¿Öÿ” Œ\‡þ“*w¹•ÁÔ#¿÷\™8 ¹uJ…øèß1‹Œ‰HA=]ßíÈ{F«ŠÏû/[w‰ñùPYÌfÒajá>)ÞÇç«|ºÆTd úßþ[/ò*#Å?¿DŸH?]oÓcÕ°»›‰’ïݸ¯·àØLûãŒh|{çÆ}òÌ“õÌì’!ÞçÆòŠÞrÜ ë Ùxš,Úö”²Q xÃÃNްOñ÷<,¬yXpæIuÙ@CšxØLö¢}ßÃnÖåÉ¢.ÒÛÁk¨µ$ãdÑÞñ°Ð*üøuº‡-û;F à q]h&öj±*ŵ‡åYŒúº#&Ä•‡‘ »ßÓš|»ô°ÞÛ1êà¯×øí]Zo{Xï&ß>ä‚MbÔŒß.’ÎÓÎÃî72Fñ××þ~œÏÉ™N}Ó2m-bv‰×ë¶z¦âš•w­„»ïm%f(Ú›Ûpâc&1d3xÍ>©‘/šñkË£ã„èÎã¼ÿÑe;‘7Ä¿|{ØXK^£nž»`KdC¼sãÉ¥ŒÚsûš¦쉓—ðø¬ùÐY-æ»åÏ'/áÑò2RÐ){â:<Çqž.@çÙž8y‡/ï¹FmÃdâZ[‰œðô2uâZI­:ƉkeêâQ¹Çƒ-„KÓ‰kí*0» <ȱ˜oOœ¼^‡mâºôVßf˜8!‰Ñ>ÞO&N2H™v»ò€§«¦Ó0q±;›Ø6bzgÎ-Ÿvœ¸«,‡ˆÁ·‰k©í)Dm牋âjÈ%ÞmìCà`2qMs h`G(&С=q]€=·¡>ívuÍž8Á ¾ö¸·ÐÛÕÂaâºfù< á„í‰K]dkÛIp=N&®•1Øë×'2ç¨õ'. xL™¬‹s…µ1O&®õÚ(~ø ïwlãCNN`m`m`m`m`m`m`m`m`màÛ_Vhñûl“¥µ§lBRóÞ³Mx)û•k;ð&ÛÀ3¶ñµëâwئÊCf°'îlÏØ¶ ðÃÄÝbti2q·Ø¦»ÉÄ]lSCÌgц7Ùž±M­¯îa2qï²MÓv}˜¸° À F|N&ûjVM¾'Óª Ó 8™v»ÀnÀ ˜pRÏÃÜ€Xƒ“I» @8¶#œ¸ˆÆÄÝ„ªš˜ ñ»pŒ‰» '\6FþœÔJW)Ø*ó8§pBN¢Ñ¤ß„OgÊÊÛpb×l,Þ[u¼'Ó¢ žò 8™mð!߀0á$m55oÀ ¬Á Lऀ³7á„[fã 2wà$Ö‚X¶ÊÜ‚U朴4­QeÞ…“HYVûg–²Þï>îç÷¡µ®å°þ±C›'¤ ]$C\Ñ…w“¤PeRþ™åœP>ª*m//þQTUúÇn¡¾ßÝœØdž¼|—¼&YÕÈ×J#ÿt¡‹7Òm®ªÊÔþ££¸ÚþsÌW¡’ºÖº±UÖ⃇)šujW"5òÊÃ7ÓõU²fg0Ÿþgï"ÏÊBÃ:ˆÊÿB\>äó ×îöÍ…²‹MZ|¬^ŒØRÔ:'9¡=qÂÒF<ÑhhŠä‰i2qrË :p¿ÕöÉì‰ëí|0ïÔë–Áœ¸ÎΗé¡ë«dŒÚ{Ÿì‰KÝy§È%î®×eHöÄ5S BÀ4•Ží‰“¿J{M'm* Ø—åªÍ௯Êý&4Û'UKv]_•E^eô1Ù—?)k³Uîq˜×I#ŠÿÀš9‡5skæÖÌ9¬™sX3ç°fÎí S¬Wé†9‡5s>Ù0ìu£ß3çðÈœoÜÙøöšsxjÎ9FoOÜÌùÛóÕ§ýmskæ|Ší‘ã sÏÌyÑ`OÜÌ9<5çâ^Ë0q0ç`šs_Ë‘„æÖÌ9Xæ|?®½zþöíñêB¤ÅUÎV vAAÙlFˆk£ÓÌÎ/¯"„yâ ˆ'ß~çÆƒçÉ·B+ö'›ÍŒßÞùŒ4‰ýAë=ùÛ´&øDgÕÓ__»‹][ÎV0r¶öè]Åû{a{Ï’C3d1ÔÏõ|‹õÄ©­Ea©d{™ò³]ŽãÌŸÌv/|YÄKü÷ýhi_AܦüA4¡M/™¼Óó^¶½¿·keôRÚœ—ce·˜O_¢K†¸ŒnwºÓu®ù‡¨ÅRŸ ñ.k½lÒÑAT\ýL/±²c²ç]¸,ωP§|mN.±=ï¢bKq„‡–¥XkO²òöÞžw¼‹Œ”¯}ÍOæ]úáÚÞü®VoOæ}ÿ¸—º-Ú–Í1ïÇ?_BÎIÛºcÞ_áÖ¢ø,µÓR¾|mÐç[­œqÞ¯ÓO,ÿçr›÷Ö(×çœa2ï­W ÖVŸ†z¯eÞ‹õ0™w¸tiﯬ3Æa¶ç]¢FâOc!ØÏÛ)=Næ½KùrŒvÆX€hÏ{t›Ð„Hq6ïñTʧ”…¾Çë~C­Ø’&ó¯LNLAeŒ•eSÖÃtÞÛÛ§b,±Í»»B<™÷ö« |d„‹j³Ÿá…1Å4™wÙlC&3áŒÛ aÞ“ÈÍ-lßì|³â·ÙOì|êOÇ`rÓÏ2#¾qœßô›Ùùëw¡àã¶×<æ=]¹![EõqÞS;¯%¸TÂV•‰!Oæ]t .C›w‘‰–¢£É¼7ñò]ëö³¯·'ƒö¼w¡„3xWç=w÷OôÓ÷yÏ—yoúž?‰‰÷­)x?ïy¸È©™v;¶¬Í¸…MìE±7i2ïùÊ}.ÐŽÂÎçËÒRtÁOæ=·#¢º<Ú¼‹çs 4™wñöq÷°Ç¼gA›Ñ…ɼ·_%Ú[’óÞæ0'1t°Æó°Æó°Æó°Æó°Æó°Æó°Æó°Æó°Æó°ÆóvlÉ zÍó{á¯ÅïñüqJ?Š<_x<î'‹ÏÇÂZezžÇâ¨î`xWÜwþò|½do=½çùš×ŒŠçË.“±l>Ìó°Æóvù — Úå'бC{Þïñ|‹êó~pw®}zŽj³Ï2«E ãdޯ͙âÞñ´¿Â‘_<álÞßåùZ™»•罉sÙ°©¶ÜeÞ!8´çý<k®¿ÑÑž÷{<ßújóþœçqçñ!Ï— å8™wÑq>EÝíÕày\ãy\ãy´y¾| àº>>ÏÙž÷›<üdÞŸó<®ñ<>ãùÚ:Íæ]ˆÇ Ï㦥ɼ?çy\ãy|Êóµ¤ÇdÞ³Îñ]ž/“2Í· lÕHÚ:wyþÚ¼ÁóB\ñ|K`œ^â=Ïïooó<Æ4ùvÙŠˆƒU#©º?äÉ·[Û7x~üö¡—Íó˜aòíòBò„çSR⯯}“àzÉåÌì@2ÒEV—øˆíië9geÒøØ®¯qÝ£(š=ŠÊk]1êK\c;]õÜjCݲÃÂQ¼Ï‹IÅÌ÷ýØ.V®«²!Þu±)$EÔ(„+ûryY㸘Jø¤K/C(´ öÈ‹ëjÍ\€ÈöÈw=Š0z“•‹›sä»>H­L°€Ý2ô xù+±¥^ç‹Ñ¸—Ê´µQ…Ëл¨˜¶xؘØy™÷v71h.ܶG^ÜJË-i¤>×–dÞù¾aF›VCæÈwÒe÷:dÛãù<ù ]cæ½FÒˆ›ÅKe€ÉÈ_TYØ-+ªôµYYÒæbyYf(ñ'£rs67Yóâ¾Yöûµd#ŸÃçl|ÈvᲿ#sä{x g…& |ÛÈù0ù —ÝÀèZaîqäůRÆhp]q]$W¬ùwXóï°æßaͿÚ‡5ÿkþÖü;¬ùwxèß3EôZ\ùw¶Jí(ÿ>ë P’•¯MlCfõò½ç—PkÆßñïvœ‘ŒÖââ"S`{ä?àßá¡çââÈùοò ÿ>éAèÊ+ê`–/þç̓‘çs]ü ƒ¿áßí„©Œ¯÷Ê¿— xr-r2Œüü;<òï[c.I•Ó„9Ò ÿ>»×âc#œT{?fšŒ|<ƒÌ5d膷Oë¼Åhøw¬9“=òðïðÈ¿o}Xc°G¾÷Иnøw˜úwimš|±B&#ùwÊ!‡xÿÛç°é,Ñû÷Pë~ˆoÇ5ÿŽkþ×ü;®ùw\óï¸æßqÍ¿ãšÇ5ÿŽÏü;;I‹+ÿáÎþ-ÿ¾÷–ö7ü;®ùw´ý{Döñ†Ç5ÿŽÏü»çbi£=ònøwœùw0öïÚ¿ãšGÛ¿S ÐöïþjÓ;~{×A'ÅÛ\⯯]1»ZŒ‰ ÿ^p­µ¦¾Ä{ÿ¾Õm‹QÉû\§!->Þ‡Óû°ù:⪇ÝÀ((qՉЗåøá%p­Éiˆw%ïB"8¶o>œbÖ#ßQÀG™ášY /¸«ƒ‚º¾"&ôQ9þ­“|Ô*ÓWÌ+xêÌYÛðé*ª!Ÿ®òbB4ñÀ»¬ÄV„fgÅœ²³F^àA¨BPÙ ïW€“ ñ¾Í"[¥¶ÿuPbn}ø•‘ý‘>YýC `«L”{†xLœüw«¡¼­2]õг-·â†vÍjP™¾àÛÜÀ1ãDeZͺÚ{Ìè"PÜW-Ñ7QÑE %Î7Ô¦!'*¯ò9f¾¦¤ÏçH`«L×¾‘SVܰUð1G^>¤ÒEÆdÝöÜõØ*Ó§–M5{ÍT™¾fœ ú¾ŽŒrœ¨Ìõ«À­}cßRÀ8QQ ÏŸu?{º(3âY¨ ¬Ñ¬Ñ¬Ñ¬Ñ¬Ñ¬Ñ¬Ñ¬Ñ¬Ñ¬ÑÅäv&â<ÉæY‹ß§ @?Š«.Ì RN]Ô¤‚ ñ»tQÿ]-ÞÑEí£ÌÂTÎéÖèžÑ…¯ùql<}¤ Žù]ÀŒ. ˜t²kâº&ÎÅ“ønÐ…}¸°?Ä  Œ!Ø*óº€5º˜\pãàÂ$!6&¶Uæ]°WtáØ%M¾,Úä]˜¨Ìº¨ÿîDe.º 2ëx‡.`.à]ÔE’­2=]Ä;tSºðÉ¢ —>F•¹~E¡Ì¯¿A0¡‹ú‹.BŒÒÒâ]à]à]à]à]à]à]à]à]à]Lî †õÜ»åÔ¢ ñÛtY/ÚÓ>¤‹ ñÒ®Ñ>£ `‚1ò}Í­ýºõ ºÀ]8Ç7è×è'tQ`ß  \£ \£‹Éu›Î[Š.Z݃AeîÑEÀ4Q™çtO颼ýLežÓ®Ñ>¢‹­K¯ ´NOF¢K7èbv2þº7é×èÂ>©É¼Þ£‹2,æÉÈæÞ·d¡¡ÉÐÖ¿çªi.Ä;Ù 7çíßÿúò³w1jñN¶›%Ûtp²‰{C¼ƒ“ãWçþ×ÃÉuÛ‰Ÿè€5µì½‹²ñòªG‘c3£Â~ºêQ䨾]8hñm€©¿•cCk7RåÈE¯£ ô82Gþý;Â$mCÜ@—Ëfhqä¤ő¸Ä}Š¿¾+”4µÔ´ Öü—/_•CE±"Ù Ée->°M-cfÂ%´&Á—ø'õòä±íƒêºW̾ý 3…õg®Ñ¨°Þ{->*laG˜(,%-®v¯Zm)¬œw˜*¬c­°Û… 9ï0UX—m…u)//v×w¯vÓ4^¾SØÍ*„¬v¯[h ]§°ûü€VؽzZ#/v·u†Â0GþòWxZ›NaA±–Íþ!ptƒëv_6yvÃJŒ†ÂrΑÔÈ+…”s2ÖÅ Z|TX­°5óbW ë2eSakç%1ï8SØËÖmüD¹Ë&®Ögœ(¬õt­°0ó°´¸¡°`+lB²Ä•ÂÒDaÑøv­°G_¥°ÞzºRX¸ÈQa¯Å•Â:&[a Z#?*¬ã‰ÂJS‰…%ˆi¢°.YËfPØ};`yX=ïÊÖ¢dyØ‚‹zÑ »+­q6¡àd=(ã³½¼¡° ±Ð®õ±Y;Sa½hUûýççÉBn¦°-q¢‰ ¢VØ+µ¸RX‚™‡m‡ÈM\+l@Sa¡5ƒïÄG… hòZ)0ùò£ÂWf*¬Ü ñ‰=Û Ëá"j!®‘ø* 4(l¶ÄµÂ2Ø ë­‰6$ʶšâ£ÂzÊ‹^-Ú×úŸÝ"4rzai/q}!)Zþ»µí&ä ‰…xï Óö’v¦eã郾û²4mI+¬rÐð¼ûßé;ùHŒü”¨Ã±hQ‡àµ¸Ò÷½‹á !OWú‰f[à¤Åµ¾£MÔ€,ñQßq²&imæD}lÿ•¾ƒ5ò£ƒöØÔ÷à|ÖâÊAóÌA3›#?ê;ù‰ƒ¾BýÈK}÷ÁÜOÅ•ƒÎ™m}§F^é;—ŵ¾ï‡‘jè}ß"~G%±·õÝrÿcL“´Z|Ô÷º×´¯,zTâJßÙ‡óæB§ï@ $†n äxº‰QßI¾¼ 䇗º¡ïÓó¸=ÞÔwÐâZ߯U×é{1BÉW!¯ Û/¯ô=äIÈK®ù)ç‰Lj†ø}}'käG}‡4Ñ÷Ì‘—úŽ Lô=˜ËæÇäåG}oÖ.q¥ïÅ‹Vµ½Î⣾÷Ç­ ­ïÞ—ú/™Ñ‘käI/Ú±ûöžiGÌÀ«oWú^¶GFk¯ï¾Áë¢SyãYqž+ì£yþÚMñ±$çµ TúîÁxºÞ€çYÏÄë0QˆëówçMÿ^X7X⣾û`ë{+ñ*_^é;†‰¾_a)>êû~åĈ˜Ñ•Ž+Ä•¾CžDÌອӼÒwœè; 9òÏ—½âlŽÁZ6ƒ¾#¦IÄ,©—}퉺¸ï£ÅóeHQ-Ú½5u÷+ÙØ¿oö¼ïž^¶ù´—ˆ1n­M‰÷ï°WQÓú^;åŽâJß±VÁ±ôʇšø”çÏ„åß]ˆZ\ÜÀÇIÀíª/Ä€[šÜP‹7{ÿ^ëãXâ·nd<Ý8ÒšDÈ=C§nˆvÀ­„¸Ž‡YÀÍyp‹³€[4G¾×÷€<;ÒòÖ²ôÝ;?ÑwP‹Vé{b{ÿ^c˜êéZß‹“Akcï ©g-.Ÿ~¨;ÚúîSÐâ*^Ã$ÀN^‰+}¯WBÙŠ×!0ˆ5?°C˜è»tÐÓ»Ë3}GãéZßÏt­ï^‹úîgGØ`‰+}‡‰¾K¶y#ÀN¶¾·èRüE¾ö‰Xq3ÆÓu¼Î剾[↾Ïü»´´³;ì……Í;YËf °Ó4À®æ]ë»ÏGªÒ¨ïŽ¢šwC߯\£AßSð¤Åïéû¡ñZ\é;ºI|¾%‰]âú@\´ãóØ:yýý÷÷)ÏsL&©¶úuM\mÀÃÙ¯[ë@-®œ­b»ÆjqGß#'VBì•’:~»Ì) ̤‘ *N ßÞ¥¤¦ôÉ.ÖÑÊ& ßÞÅ烕õ±kÓäÛåÓ³Ÿd}Е |‰¿Öÿ” ±.û£Ý÷ÿéT&8Ö/ÿ勯GÍéÊh‹m¶Ì!®#ÙœÍ`VJIÍ»Q¬#aV©®þ¥éõíåW¿þ"«ÔWüRÕïÁ×–àÑïJz`Œ{˜wLˆEô­_·ÿ×õŸÁ½ÔkpºVg| œ${âDÞkÌé¨{P'N¤¤ýíûĉ6ïµ”‹y™×C¤lO\wÝæ\6CB¬gQm£›¸®ÖGb2bk ­°Çĉ2óX•¯÷©v§m¥ûlj㖼IpVMì2e!•‘ó“‰ã½,EÚJn‘nGU‹¿ä˜Éž8™Oë!ûkâd>mÆ0™¸Øv‘ä˜÷pjÓÉÄui³„`fÊØ æÄui³ÈG™Ó>S¶ü¯Dq2q­N<–!V5D<¼˜Âdâ.ñ²ä9y+Ÿ6׊“‰‹ûÄÁv‰;â˜hû™^0×ä7{âdÚlrGÂL¸Ô%â0Ù'òiË9³ÒH-öäí‰Ký1¬OK8Ѹ¾éµèòiŠ! ÉÄ%yˆºÁ+#Vt)M&®U€÷Ï»B2ѶÎa˜M\:ç'Iº!ÔV%&’:XcXcXcXcXcXcXcXcXcxÈ6ņjqÅ6g¡’·ÙfVh´L;×xrÊ­/ð%~m<׎A½!þ1¶Å6Ÿ^bª fÛ„—XKÿG{â>À6ðmsôöÄul·ØfV§”¯Þ:Û¤àZ“ÓqâÞcz©wþRžLÜs¶Å6eæÊÄû= ¼g›Úÿ½¼~¶'îlÙ9Æ‰Æ 5à ¶™•9Å€¤Ùf«Q†q2qï°Í§üR¯ B˜LÜs¶Å6Å †‰Ák¶Á2¡±%B÷¶‡lSVDŽöÄõl“à ¶)ÛD°Ød ¸aâÞc|‰!!ÄÉÄ=gÐl³™Ä#mcl^Åszñí´Æ6´Æ6´Æ6´Æ6´Æ6´Æ6´Æ6´Æ6´Æ6ôŒmÀdCüƒlC3¶q‘o° ­± ­± ­± ­± =c ÆlOÜ؆flãdÀmÊ6´Æ6´Æ6´Æ6´Æ6ômRL€öÄ}€mhÆ6$]ä”mhmhmhmhmèÛlï'÷¶¡)Û„;lCklCklCklƒklƒklƒklƒklƒklƒklƒklƒklƒklƒkq\c\‹Ûà¶—‘ ñ± >az)ê}²'îlƒkq\c\‹Ûà¶ñµÆ SœLÜs¶Á'lƒ/[ƒÖhOÜØ×â6¸Æ6¸·Á'ló)¾” …ÙÄ=g|Â6ðÂH>{â>À6¸·Á5¶Áµ¸ >a›b*k·Ë™©|Î6øŒm\­#.žÖØ&¬±MXc›°Æ6amÂÛ„5¶ klÖØ&¬ÅmÂÛ„µ¸MXc›°Æ6amÂÛ„µ¸MXc›°· klÖØ&¬±MXc›°· klÖâ6amÂÛ„5¶ klÖâ6amÂZÜ&¬±MXc›°À6?~þ1Í%Î@æÝ@€ „¸ºÈÈ6ô´&hB\_$˜@O0^~¼".Ìjó^9äÝËhtrF#ëåG4/¯QK4B†ÉÐI8¡D63µJ#ãÐÙµyGfž øÅ4+íËi2têÒ¾úå_ëÊÚ¼‰´þ?»ÕŠRâ_¾Hñš½_Ì<©[Ÿk&s¸L¥«ç¹t˜‹Ÿ¿üÓý!Ó»âã•_Í®…µ£Ÿzyíäÿýøõ¯ó³<¾@t‰Ô²Ó¥qûÙþ‡ß¿½J¬„¬õ½üê[‡—‚½ÙóÈuŸ°L 7¦•âÝÍ…Tì1_}Fä”70“âþjƒ¾œèëb¬ÊG]—y…¸¬Küù%×*hp­'fT6bAO\]\’þh¿…½¯'|…h™ ñ «¾æ¤±pë?†x]\òW¸÷XѼèZEh!>ÂcYÛÞäÅz³] ݾ¸.ú«}>½.kì÷ Þ˜¸º¸Dã¦@G{Ùm=]½š\.Г ñ®£—WôüIWEæ²̧×ÅÕ˜6GïPAiY7\D0WÝV;9{¨ ´Þýw‘´ø¾¸ýeðÇ>®®' ¥âªÑ`¬:(ÍGißo=­Öbd«®-$¾Ö“|º.ÛÆ*öhdææÐ4VÓ†´Õl<ÖS<™´°ñòc¦y¬?‹m=5(&ŽcuUnÆ@ìè“.é©,yš«ë!Tm=5Ôœ)OŒÕÕÓÒkÕVÝѧªl¿#OŒ•,š½W€ßדÀ: †‡ÝW׳úÜ„JñZÖ˜ƒž¸}q%±¶Åý¸®Ù¥÷Ñ6V© ¥l£6X¶nän؇Î*mLܾ¸.pŽe+£äõ/ib¬DÙéòò±­§Ö%Ë‹»B£±º~ÅL9%ƒÔˬ1àÄX‰í@òNó|-ž3ãÄX]¿*‹&%³œuñîYŒ<>æy’§<Ïwx×xMž¯[ž« Õ[<ãy(ߎ†ømž÷­$”¿Ÿí½ Ý]ž¯º÷1ž&ÏcAJ7x><äù2$9š«îÏGãÌX}€çÃχIÓÂþχÏ3¥OŒÕsž&Ï{D†tƒçƒÝ±‘‰ŽŽoó|XãùðçC¤lcu“ç)ÚÆêϳ1t·yžb˜«ç<,ž¯¿ËÞßàùð„çëŠÀV~4Vïñ|øØJ¸ñÙðòp£öþa®´¸æù4‰Ï¹ƒ¦9ϧi’±ómR”¡;ñDÖË<óŒçO†Žº<_/ðlè$'œÄçx2tw{˜æ(O†ŽDÒ/Ê6âxæÉÐu/Ïž'=ïæyZãyZ‹ÏÓZ|~v=§­ú}ÇóÕMå2.y¿ŸA,¶Š ñÅçé!ÏC¡UëåÏ—-Kñ‘`ñ|qÜÉ‘ÿ`|žÖxžÖâ󴟧§<_̈zzÇóµ¾ddºŸ'“ç!úpƒçi->O&ÏûœB€‘çËþ0¢G sÕ]Ià[x”%à¦ñyZãyZãyZ‹ÏÓZ|ž¦ñùFž÷®(,tHLãó 8†‰±zŸ§g<_Ö<™Oïx>–]:DƒçS¨]Ð&Æêy|žÖxžÖâ󴟧çñym¨{ž§ V”òø<Ù<Ï9ÊàÔçi->O6ÏSvŒø|až˜ÓÄX]¿ª´!߈Ïó3ž¯7äÐñŒç¯Ûyoò<¯ñÏy¾le$Yñ3žãó¼Æó¼Æó¼Ÿçµø<ÏâóLxƒçùa|~ày^‹ÏóϳÉó©èe€<Ïkñy^ãy^‹ÏóZ|žó|tab¬nðüŸç5žçµøÐÃkLYœæE‡†øpw³¶Ð!‹*½74®§ÊÏõ¤Úo‹VE‰ËæÔ‘ñí²¤G]7ªXÇâ.Ûkè:ú«¢Q¬£zB²­@£ò3oÔÑ(O/È7Y´-Þ1»Vµ0 ³½hcŸ™ÈЬ>oóž¼¹hcWW"‡d0SÙü»&‹6 7!Ðã=3òdÑF®|ì¤ê ¤n ìÀ^´òW#]cÚz¤”9 èíE›$8ç@&]”áíE+؆»B]ôÁ‡qÑ ]ȈŒ@^Í`Ò†z¤€º‹ôÚ¿ïÄ&5Ö4¬9hø€ƒ6Å?ä aÍAÚƒ†5 Sí醃†5 kž9è›1²tpF#Ií 'ýeÊï8hXsаæ aÍAƒå Ëî¿ø ÛAi•yà #±7¾ýcÖ4¬9hxæ ksrGö¢ítpÃAOZ´x—!ßpаæ aÍAÚƒÛAøÃd:hl±ÊaѾxæ8Y´Ï4¬9h\sиæ ñ¡ƒÞ¾ÞÿƒÆ5k×ôì ¹ Æ5kŸ8hÿ‚D¢fctrîÎzr¼zYzê qÍA£í )íu ßsиæ ÑpоÚcÏl:hj¹Bü¶ƒ^¯ù;h|è 1§ö¢ý€ƒÆgšsb?Y´ÒA—] ÞpÐæ]àMžîì qÍAãÄAÚžþžƒÆ5¦ƒ†PF(Úš·í=MzÞ?ì ñ¡ƒv¹Iýù¯o³·Ç0KA¿V×%bܬDÌu*ć¢×Û‘Ú{WJ…ø˜‚îsà÷®”v/?^)¥YÊÊe.Æ¡#¹ìx’‚®fÖãÐu%ý¬DŒK“¡ëܸ§÷®”ŽC'K>¦÷®”ŽC×])õ³+¥YükýOéÆÑñ‘4Ò¥¬lÕu’š÷/_¤xñïÎÍÈP̱iõZ¼ËL©>ÙÉ(œ@‹™)´aÉ(HJe~ÿöãû_·ÜWËV[µ¸Ë.,ê5ß眛‚Å ‰˜âD”&¢Î9)h”9a6Ä;º(#\3*<¯÷î: C7&TWxͨ ‹T²[ÜgŠo‡ç\‡^‹?(å-¹Ö¸&\à ®ƒ5®ƒç\‡y2t÷Jy»4ºç\g¬”íÅtƒë`ë`ëà!×Ejé¸Büƒ\¸ns Gñs¬q¬q¬q¬q}¬SlÍÙkãm®ƒ5®ƒYÜ3ÜÞá:Xã:Xã:Xã:Xã:xÈuÅX·ö\O¹³¡2å:Xã:Xã:Xã:XãºÉ‘–‡½¢Ô{\k\3®;º½Ãu°Æu°Æu°ÆuøŒëjIg -þ ¤³ä:\ãºYIç²èîÄëpëð×U8 <º{%]š Ýs®›Çrwâu¸Æu¸ÆuøŒëÀ—ý¡!~Ÿë¿¯ã Åos],棸®Àų¹®ØyçÈ¿Çu>8Ädˆ÷\WlÕqoâm®Ã5®C“ë|áŸD7¸nÖ¸^ϸÁu³¾À!lÁ‡÷¸m®«ç°¬¸îÓKv˜Ì‘︎É]fßä:»*rŽ1¦¤¹®^ĉÉÛ û®ÃG\·-[aorõôû\GŒ…}ŸëŠ­…½~"Á9q=×¹è& û>×1xŸp¢°M<Ñ~Cí=®Ã5®³OBË‚‡Ì7¸nÚV§¿Íuf[áý2°¿ÁuöAª‡Ù\ç³'ç' Û~…!‚¿Áuve`¨1+“ëêÁú9ïßþþnŸÃîÛP“ë|Û qÅugžÕ÷¿¾üœ\Þâ:ÏJvæR ´¸¦?dû€6:²ÄGú#°¯A©|yg• àÛ\4Äú# vSc‘¦%Ä·®øÛiZ­—W•Ó ͉q1Gž¤iesÙ Xèܤ'2õò¯¯ßúl,ô€¬j TÇŸZªÒ%Þca ûDJÁ¨vî+e4±°n͵ø€…>7ó·]úï¹®¸‰ú`q]f¾BR¼ã:ÏÅŒ˜ÄVv)4y‰o5Nݾ¯»Ó˜c´Gž%µó‘ñÒ_˘}òöÈK|«ók[=ï±G^ãÆ”ÑÌò*Þg6ò  Ê–ÉB.Î^/•åU¼ ³1àËI #/à„sÆÕôÚQ UËF^òWˆÕözÙ1MÖ|GVɳIV@ÈöÈKq¿ßDÖd•œÏ“‘op’kÍ ÀïШfOúlAOÑ`¼$ ÊÔ%î}Lí‘ïbV{uñvwm¹›Ùù¾U¡ =)¢=ò]óaGÑ fAœ®ù'.„`G£|k/;޼¢½þ¼J+‹YšJx 'à™µ¸†“L6œøHZüƒpÏàd«Š–ø‡àÖà&pÜtRp‚Éøv'äîÀ ¬Á ÌÚŠ7àÖàl8)æBÔ|ˆ¢aÄ%®á¤¨RšÁIÔâÃ]í²Ë38I†ø'n¯Š¬á(äQ|„ŠUá 8)ÄE.â=œ²É^ÃI5ô­ø0ò,¡Ï"-ª²PFo¼„¢Æ êéÄyy‰›ö;#œ´Gžû‹Yê³|–¶u#œ`. ›5œlg¬<y'e7BVاø¸˜í‘—pÂp8©NœOh¼„“‚óþœ€ '… Ò¾œx{ä%œ¸¸µ†¦ˆ“‘oA˜ 8)#×.2#/àБ'Pä“=ò]x&’®0s êdä%œxvþœLÎãÐaàœLF¾OÓ dà h7‰+4/×¼ŒÈxŒ“‘yé/þÝzi°‰ãc8!i.Þ=SpÒ¢…Büƒp‚#'µDYâ‚\ƒœÁ LÊ´¸‚éœàœØjõ< îDNp NІŸ NBñ ~WpRôaç߆³Gj1‰1ºhÃI·1ÔöͧK8©FÅ#Nnß{0G~¸} 8Ùrˆ¬—ïáDT×éád¿ò2ŠýúçÿýúËßÝ+†½ÆKùdÒj ÔË+„©gͬàd;]޵¸|H- þHøýÏo½8†¨Å¶)û­#nóõ×.‡É×n †ø@@¸—öÕYD!%õí:<ƒ! I-ÔŠ¬^âCáç— ígÎÉ¿~ùwËö©¥¢A=}ŸyÅ?¥ÈÛl¬¿}@£âŸ8‘ÿn-í }ßç§«Éì™ÇEÙ˜¸:?ò9Q2ѨìÃŒ—Ñq·ñ˜ÈùŽmü·éqꪻ¸NŠ×ù¹Ò°‹¤íÛ÷)‘E\«É<¨Œì3\FÅ6{›*kâäC ŸdU§¤o'bƒÊÈ_…|œIÕ)‘¯™¢­2q¸]açñdò¦ÊôÑ&0¡ZŽÙ¨2Qž@øÔ¦$¶4-ßj: *##'tZ›jf=Ø*Ó ùkJdå¢m•é•ìÂÂ5l•éS|ž„}B[eú„˜œIy-n¡©0;¶„‰Ê´¤Ç”ÅMž<  P©ìµ¸¨”½ PÅÅ%-®¢;˜¼ P-®&Äut‡²PÅ•ød‰WõÎlë ¶l,‰o0¨˜M€‚ÄÙúö ¢Á¨DÒ›GO{Íl4*%kâ@í±ä ¶1Bsä@R ‰¼ Ph­º 6grà›îÈáÕ˵!^$ j&+ñ j&A ¨åGq ’ PÄÒ‘NN® çU vGãå5@»A_ðúé j†¨P!(q PÞŸÍH;€*[|HJe4@¹tœ •0’×ßÞÔ¶ŸÆx À¨*í’™G]Ð’ïjsÖaPÞxúP'yÔ0˜#/ÊŸÍÊ@QHÉïª ž‹Ù(—CÄ`«ŒøåDlT$‰íð êõ:[ed¶u<ѵ¨ÞAm¨-€Š“¶ÑT™¾M&«öR @š¨Œ¨b+-€Š|µ¥jßo™Y9õ<Ù*“úÔºP0¨Ž½fP{I)¶UF\¹ª7ã  ¼­2}Zó,4ÕúÿŒ*#¾/3Ô>õ•7É2±`œD |´#PÀ¤EÄ @•-aœC¼¨ MJZDœE ˆã±Ú€'ø`‰Çc!ÚE21?;Úz-ñ ŠÕÏ6@å ñ ÊìTj‰ÝÈ÷å÷l9 \JæÈ €ª{qžÕñ/œp6ŽÇ¶ëfÙâ ŠÙG  R½1Šk€*¯swöU¯_Þ¨l´Ó5!Þò)h€ú/õ†‚!®Š¼}­åî\âF*Öµå–D5t  0ƒ·"PzyP} @ÅÙøö!Uó¨¨ ½ï#PÛ? €*Ó¼ñt Pþ¥|yH8(gÌ{+m¿0ðÉl*ÆzÍ+€r99   £  Pà$ Š`[eºtêÏîÇ9Ø*#ûr‚²ŠI[Õ—« ÞáÆ{€ò0Ù*3”· š*Óá94"P• òDe¢ŒÁ8 €“~úPûÅd "Ù*ÓóΊ[¨À1z[eÚ¯°îåaPœl•éŠÈ.éÑç‰Ê€ªÿg\ÆÚrzâDed,ï[ ëÙ^íA•-€ò„¢¤íô¯XÔháeˆZ|(ð l€BK\Ta+UoË¡%>á!Ø…²„õô¯¦Æ[å=cè€*ËÿªØ4&->\÷ý€ .{kä{€r‘É('KÚÚGx¯[fWÿò.Z/?Tq˜çª œ~ºq„x)î#PÕâ  Os.Åk~!x->„\‘ŽF©6:ˆdˆYH)˜gp ê0Ûgp›ANÞ!•íVFõôtbÊ;¶ïC'Ù&sHöÐu‡hñp¤R¼æÕ~«öÐÉ@SöFt >ádèú4¢ƒ€†èDcÍkRñ×ÕªNʧ»0ºv Vcù:áß ‘·‡®c8.7IñÏ/e«—h2tÒYƒ;ÀyˆÂËæ Óc,Hâä7vpõÄ-¨(°…ñ˜œV™ž|=Ü+%îC—ºôaöÐõçP€×Љ²3—ÍPÏ'†£€vïß‹©@{èú,c°ý{hwŸû¡ëëdï›åßëåÖ<:qD Š|ÛI[â£íÆÛñ²Ý89+Mx·Ç¨ÅG7^lÚnrÒâÚ·ÖîÒ—m™h)`$1Ý8dëÛ•Ùv㎼õ탧I¤ÞŒ7¾}tã´7åÓnœZx³ùÁsž¸ñ zAL’ê% +rü»Ö²éÝ8›}0¶ì¦ ­q”|Òn¼î˜@¿¼vãþÌû{ÛÛ'AeÇîH2àÅCíwoˆnœÌüaȨ­q Á샱=~Wñ bT¾Ü8Õd {褿äp¤½íÆ'ª¦˜ŒC,>Æ¡=týU%‘R!_«öœ7‡®¿G"h7^—Mbš ] %øZ°ÒrãÅŠÛC×%p nÜ>LÁbТÎF)¯¨ C×¹ñÑÈàÝsÌ¡ë/B'¶²Q|}ülèÚãSY´`¹ñz28Yu¿Än¸ñY§©£¹Mç¢Ld]çÆcbûòrNd]Ÿ5Òpãõñ“¡»ñ²:įpæÆÏþèÆ  ²WnüìÉ4ºqÑêczœá“ÃÉm¹Ÿg…ñöì@S|<ΰvã{«OãÛµó8£øa6ž>ºñàÑÛnLF¾!L!…M„@y2òׯPˆÁD˜”쑺 ‘‰0µ»‚=òï#Ì–X–Ñù$Cl„{仲%{qkax2òÝ™ ³y¹¶LJ˜Œ|‹ÂÔÊÚb„fÍ„UãÇ˵.JFœ¦„]/»!(mÒì0¥¬ÉÝdÔâa¼ÿd”Nó9»d‰Ãh¦Ø/?¦äL„¡ wã“ÃJ”ÙDDg|ûˆ0é$ •Ú˜\°F~D˜«0ëˆ0ÀæÈËÒiÄgÅ|0­eócòò#´\˜Kü˵#ÂxÒOWÜ#YQ˜²+sY‹ßŒÂPy™B\" ÖŒ&?CFÔâã`’óè²úv…0®Lõaj…)C¼¿C‹9 G*«Ñ§äƒ=ò]Ñù³2Ë€0ÅC°G~@ërGên?l]š&¢·G¾«¼FÎOnÇzšŒ¼@˜2uÞŒÂø.æ;¹Ü‘q¿¡¦¶Ð²G>vK;Da Ò²=ò±'o L!“'#ßò6 (d}Æeœ¬yù«"žì{¯”f#/9«»dû{“‘o'A)ì•”5ÂKÀöÈwu]1±F˜ÃTÛ#' ë­{äÛ¯B½ºã'c=]! ú<;"J“‘S6ãhFaÄ-¼qäå1X‹ƒüò÷ßÓÛØŒÂ`º¶”B\ÝÎHG²7 ¬ q…0W6ŠJë¼ò´„¸ÎIlßΠ-ñ1­3ÙõAÄÍmùòÝõÖÝ_›Iõ ñ±6™ù ©Åñ{ÖŽükä„ ÖAÒ6ql]wÙqœäƒXâêv†YdKÒâ¯õ?»ìÍ«ÄÆ_p…µ/ñ1ØR[†h\o­ç`ˆ·XùˆKù"_«°M-2™´øØvÇ'Ö ˆ Rü¯!Rt Ã3¢ÌÄ%nXof…:ÉjÕõS/à†ŒmJ¸;KY¿ü…qgµ¨±,lýt}½µ|"~2*„Ú H‹Ëw¬)+Ȭs(àv3XˆÖ2OΡ õ?â*õØÎ6uY¯ù‘€ l[=l“rl]w•érVΜˆ‘mB¶U&vy¨‹Çî¡)k͘……ÊÈèNÙ®e[eºTšÉ: ª5ÙV™îzk`³>H±ò`«Ì CæÍ ÃËŒ7S|­ú˜¯)éŠÎ·"áƒÊô5Ê<›AœÔ¸{P™þ~*šW½kÑ·AedÂMùÿhÄ€l/£Ž±|7)]ÛvùƒÊôy@1Ùe« ¨šj Có>½ñâ’ÝÙseA‹ëTY´o¼øuâúÆKÈ4òI‹WÁ¾ñ’%˜Ío¼D˜Üx‘#?¿ñÂ`§Ê¶BÙR|L•u”ìTYÆÐ©Òigå5•*ÛªÒt#?¢‘K³‹«ÁùîÆKD³TÙ`-›!U6'²Ñ(F5ï•r&JfÜ&„¬ž®Si2FÿÉ*†P‹häÎkôš×¥Ó‚‹l Q*#É+ø£ èˆF1é—×hTþ/YhD>eõt•cƒa/۫ЈR&Ð/?FwˆˆL4r9ß®*¤#Æ0¢‘ r's4²jÏÖ›0Þ˜÷˜3°3xU7¢î.Ò 5ò=Õ„M6“oê•V[e¤ƒO1›MPܺTF¢yQm°/Ýl«Lì.sESäkd¶ÊÈVQw#M¸6RòÎÛ*3 ‘}ð…¢Ÿw£ÔZh®š¸:P»Žóµ~ÇMüÞÚ±!°ÄÇœ Bû@ ­o×åÎŽÓ@ãfâ¹ùִͬ‰j`çµãÖnäÇ Öß;PëG¾»™åÍ›YýÅ®nÙ jɺ™u¬‰Qܪ G糟]ŸÅQ¿ü—/ßÿó¥C#wž¨ S¼îé ññ<·d’Uò-ÕOˆj5GÀª–æ}ÎÙxyù‰5/ÆqJ&3•Ýjq]U6x“™ —)…5ÊòyÕ¢» ©­ªÒµŠô5q]ЩUç&®¿¿…lç öÄu=ƒ‚hl'ÏùrË&Ž»mvFëÆWEêdO\3®û0›¬Å`O\W¯Ÿ ™dUæ-L&NÔëOèÉÊHò˜}žLœ,7KGe¢úU]¹ÙÀlO\GVç·«T¥D`Oœd›v&˜0òhOœÙ[åf·Ãq¶'®á[qÈ6r¹v à[-â |« bµ¸oy†o^‹ø†‘ÑÄ·¨–Æ7ïM| äƒ!ÞáÔ³0ñ­ êdâ$¾áy‚1à[€í‰ë(S6ñÙùß¶šjæi $ {âîâÙ'_¾›øFÁñdâdÎ=p²ñ­õÉ'î·bË ¾¥j쉋ÝUJ&;®–˜ì‰ëoŸ‰þòäÝd⺇œô7\–s‰R°'î.¾=q}Olw/Î &'š2e"£*ÀÆo>N&îgŒp”µñ&×× vɸNJG߀\6ñ ÚE‚a⺔¯€ÞúVŒy0 *@vÖÓG|ó>š‡§^4üîF~h¶éã¤[9NF^žrYœ“nå­p·lúf›¦Í6š¸×úŸÝ1#D³"BÙ”©oï‹PoóC9YdU‹:ÿþó¿¥Õ4V#|†A”Xâòå ½šT€´øØQʇdׄ ­NÝ%®kByvÑ ŸÕ·O†øpú™ò5%’"2xãÛ;€ÚǾ•î’®âCü+ûp„Qê”ÈÃÓÂ͆x%ƒâÈŽz òå Yùd¾¼*»€.›cAÜV8Åõ¥Ãº'´È*b;‡ê'®/ žÎÒÚ}ÑìX´m•éÚ'ë`ÒSÈÁV™¾XjFŸ¶´ûüt·Ç—õþ‰Ÿ©Œ(ôg‡ U¡µšT¦Ë¬OÙ.)ʼnÓDe'åcÇ£Ûh{âz€‚´÷ܧ¤;@¤«œé 2}aÉÜÚºôA D[eº0#_§¤‹l“­2âWxÌ»|ùϵa1Eo«Lêw”þ“].SÏ»‘>¶§àêÈVhõ°F•I2- ÁB£èIú¸ÉÁ¤?²—53ïµøˆFhÞFÜO&³WhäÙhDR㦓Á[‘-—Ckr߉‘-;¯Œ}4Ä`6¢Q 2†n@£²¡ô`Ln-àƒW“aÒ+skäóc£Q;”íG^ QíP³F-HÐ-›ÊÙå2±Õ|¼ÄÕÞh¡¤@êÛ4Ú÷Óâµø€Fe›:g¾öÄe…ø}4ò൸ªÇ€­úqŸIÙc—¸nïÁ‰ÌÄ0Í´¥xšJÞ1j4z©I.!é—KJ!‰)‘(›È Å‡ö]˜ùp•Ww¬Åû&_.²;ïJ¼‰Ff÷¯ÃÖÚ%œ6•F=†(3·±'æÄÉpv`Ê„F°UF" ;oךªÁ%[ebW Ö¡_E&[eºü/t…Ée[eî¡´U¦Ï¬‡8¹gÈ;ôÃÄ34’«nzèwž›õh„ÞGö–ø5 vkÒº"Œ—шŽë„#•AaC|@£àÀlMŠ>I$žúåµÓôn䇨‘óömÄzº`޼@£b©ˆìC?¬eÓ£ÒqܪШU¿ÄG4*n’5‚Zž}×Q£V·²ZCÁ£ïѨ ‹EO³zýÅ7Ј&h”£WõL4ª}J”Ê h´“¥häº-°}jWŸÁ`¡QÌ1ýò#Õ¼…F>Z¼G£\¬ñÅïÐh£eçµxß8­F¢ý4jdŒ¼Šh´Å¼H=]Î%—²…F¡vS1'®C£Ã\(4ª ¶ÊH8)äk6Cñ彨V™®Š”£h å$Êýõ*#kMaôºÒ¼p ì“­2ñÒDe:4r0¹gr79vK ²‰F…Zf*sýªx¨ÝÖé¨Q=u°U¦;zÊ5íW惭2‚mÐñQãbD#bʶʴ_[CÇvàm4š¶ƒc IÔHF{ý.FÅRâDe$1ƒU¨¡ì"¯¬œòÆ~R¡œNùÛ‡Vž ñŽmö0±Qbüx3-ޱͱn­ë„[èÆïß‘ãuñë ÖËwõ9·è˜•2²ñôm„Hz)³ÀææfÀ:·Ù•?Ú¶è‡9tÿ’ÞɸXLmB2‡nFÜfûWõÓ__{7îs"wîãþjèy×Õ"RTxð¹vwö×M!þã¿¿Žùè^qÃçâ !ë5oÔqÚwRûW‰Œ. ÎÆË—Oì*)yoÕÉ.;¡V—µïÊlCð!__%ůäZ!.ýðçš?&iÍ)¶'.vTéóõUý{{âºÖã²rRŸ_¨ömF{âúÎ圕÷ú\9q½+£c>˜`(pì‰ë·ªg±Á!m){â¤7ÀtdgÔ¯êî“û+j4Lœ÷Á®UèZé³"k†Ö 5<5ÔÕ [â7 µ-þAC k†Ö 5L u SÜ0Ô01Ô—øÛ†Ö õ¤à^Ùë¼a¨aÍPO î¹c#ö¶¡†g†ºìý#'KüC†ê–Ê?LÜ õä SéojX3Ô03Ôç%Š· 5<4ÔÛ•l{â>`¨á¹¡¾vÐE× 5®j|l¨?½˜â÷ õV–Æxùj\3Ô¸f¨qf¨Ë^ð†¡FÛP¿Ô B7 5®êIù¯bÐnj\3Ô³ò_9Þ0ÔøÌP×jò)Yâ2ÔøÔPÇ _þÆzR„ŠÊâ7 5®êY*L.Þ0ÔøÐPCL~2q0ÔøØPÇKa~ÿ¿iìÈè𺹀,íV”À>qñD–¸4¨û¹ŽmC[Ç¡ñå©Ë¯Kv:ˆËiòò]Ñ ð–­«‡//òù…“w±}U×?«å” ñ!Á!À~ŸIÙ:ÀÖ0r˜¸®ö +B¾]oùóÇ¢­_Õý»-³q˜¸ÔßZŸµŠ1ï°fë`ÍÖÁÌÖyà¶Öl¬Ù:˜ÙºýNÏ{¶žÙºÚd1*qmëR<Àìm[k¶n²/F [7)‘0r4mäµøm<µuu‹eOÜ[©•û&®³uœÃ [k¶n¶ppÝÛ¶nVG xX»-‹Hœ&î¶ۺķ㚭Ã5[‡¦­ÛËܰu¸fëpÍÖÍö°nv*ÔÛ:|fë ÖAVC§l¸|ì&Þ¶u¸fëÌ=ì^nØ:;m£ìAȘ­+;¼¨Å?hëð¡­ó9…lOÜ[—‚ŸM\WîŽyÛÖáš­›ía9ú;¶nv鶶ɲm]Ëê&î¶Û:º )—ݱ½‡ÝS[&¶îÊúâ½­Û5±uWô@>}4i&-&!Xâêæ°aÅö?X/?š´˜ì€Dõí¯¯]Èë’G6nÌJ\á}ÍŸÆ‚[µ w¥ KñëüÙ–å»lŽþyÓ†¤ÅåËמõ¡•9G5OkW\G€¹ аbõr õí}¼]å»eÉQWˆ÷Å/ja´;E'à¨Åë‰x#"î+6´æ/?æø§Ìf£écž,ÙO§½î]†e#¯&>krô…%|ÝCÛË&vnØ·A‰rÙøËI ËFÚãâ ìì±zñÎ\6±OœÀ6(]áÎl/›>ËëèÕÜ÷ ܪÆg{ÙôEúéjñj|j¨SŽÙ^60Ôö:æZ2송žÅ.0:¸a¨qÍPãÌPïWNÞ3ÔøÐPgÌ4Y6÷ u¶—Í 5>6Ô­cÝ¿~ÿs~|ü^˜Wˆ+CÓÄPóU2¢¿æmÖf|ù.Ì›è½0ïøòR2›¼–[š¼ü0o VŽâ¯õ?¥÷䂉¢æÃ%®Ã¼P§üw?¿”mTÒC§ì1‡Øz¾wµ jg,ûåEˆ¢Þ?ÌÖÁ|YNì——áØäŽÎ&Ý¿ûù%pôl¿¼,ÜÉÑ™U-}ŠnòòòŠYm‹g…Ê´]×놗ï­á¨(%ÿÝbÅ\lý1‡——&-úöòcvòò]8–&XnÍ¿†—ï¶—Ö¦®°_¾ï«íd¡bÃÅ¢…5kkÖÆ>@ßwÃÚÀšµ5kÓ«FÓ v=t·­MÌ¡µÏ¾Ä•µAïS¼am&EZŠ&³~0ˆ>JÃË¿omе xË /ßÕ™óÇÍÄ·­¹ƒÞ˨ÙL"c²_þ†µš°™ì—ïËíÇyo[›Y­´oÄ kƒèí—¿cm"åRëÚ %˜vâRk|¨Ö.gžLÜÔzrÇÒEÄ|C­qM­gù©¯s¨òL3<’¹™÷î*V ÄõÎÞ§ÙA…7žÞ©õ®¾öf¾]àíž>ìÙÏö´jÏÞ6ÝýËçG‘É^­÷‚ð£øëk¯?è[çÉã•v‰ëó<›& åÞ·6ñB¼¿!ëÖÜTØÚ%Ø//χóy|9©ÀVömxù.=Ü9o廘®…áåÅ/”£}‘cðöËKYS6Í;2µ…‚ýòÝÙ«;rhÇŒp¡—ÃË ½çœÝi £/kÏ5.ñôi¬iÌ4®»‘7Õ8x¦qÅJPC§5Ž#Ò ƒ§ýåʆ—¿¡q\“0²ýòÝ  ù†ÆÁSK¤—Ím«E ³·_¾Ó8Šá†ÆÁc£ æ×4Ÿi\—‹×4×4n—Fóé¨qøHãàc”«n—Fw4Ÿj\h•Q‡—Wãü {n•‡—ï»-‰—Ÿk>Õ¸èr´_þ†ÆaMo öËw÷@Ï‚ùok>Ö8¸ØæûŸÓà*z;£Ïņ®§øëk—:W>‘ÏëÿúÙE8RjÝú.qÞ6ŠÒìÆl˜ê'ªd»ó«´ø°aÚ>ÑZ´LpåÔqX›wX›÷IÕ¸²_cÞamÞg9óyoAõ޼óyß¿ÊøöÍ;<œ÷í«š8®Í;®Íû$@RLR¢óŽkó>»ÀK)ÓyÇgó¾•ñí›w|4ïÇWâ¿ýñszÔùYÖúUeBˆ«„€4 Zâ]+‰½mî$Óìåûí?LÒÙ/,_¾‹<¢ f¶xצa¬Mî¼§+®v‰¿Öÿ”šA.]m®»¤÷zôŠ£x-pþ³¿ó¾çZ|ùòß»*‚>óup,ÄGKËΣ}¿´õâý!óQtnLzçvyYˆËo¯÷ò]ˆfr± É:aPS ­lø2mn2tjø#,W‡NЇÖ%{:Ù‚ýèLj\nJÖ·ì éÌ+5¹ŒI´‡NÔ¬ ÁÙÉH„` ˆÖkýV@ÔâÊöÐuöÓ‘KY‡®û§lDâèâ¢{“=t]b> ;ßu¾l›‘aèDBG¢ýš‰N¦¼ZT C×Õud'ÓûÖükºþWÏסësæ“·‡®KÕ™ì”ûÙº¡Ç$ÚÉôhYùíŸ+D8˜TÈI,ZXó2°æe`ÍËÀš—5/k^Ö¼ ¬y›ç#s ºáe`ÍËÀS/S¬ÚC÷/k^Æ."îeßó2°æeà©—A “U÷/k^Æ>Œ/ÿë~‰õ=/k^žz™ÚKÞºxXó2“ú]XCÙ7¼ ¬yxîeP¼<®y\ó2¸æepÍËàš—Á5/ƒk^×¼Œ}ÿ7%:ûÝ¿íepÍËàS/ƒ¢=tð2¸æe¬âcþ…jÓ^ºáepÍËàS/ž'«î^×¼ŒR^=¸áepÍËàc/ô·ØËàš—™TNKEÝó /ƒk^{™Öéûߜ٦aŸúOºUAm‘•ø×¯þ߯¿ü-/‡çãâvýÌ9a'b•‡x þÖ7cøì_êÓ¿~ùñ÷o²×,·ºëíå¿~ùëço]ïÖ°ÝN*øå×ÿëþà"âß~tM]5ÿë×?~ü¸lðöUÁâüøëg÷+Âp};ßúvž~;ßúvž};ßúvž};ßúvž|»ÐX_Ý—ýíQ~úKÎíÛE›EfcÑîß»Kjß.ÿà'ßå·ï¹Ÿû·÷ÅÂäÛ£üvð×·ËK.eâ'ßžúoçöíI|»0ùö$ì{eÔýÛ“üªè'ß.µ—¸<¾=ɯ ³y—¿:«¾×ßäöíœÑ±ýí¹ÿvß¾=w9„~òí¹›^hßžåW]d5~»üùо=÷_5ùöîW×'þû¯ÿÎzúÑ~ÁúË—òeëFq…Y ýu§¡üj’YOñ¼$ööC&Gƒ±–yi¿šåù†½Ï{™CE:Olþ÷Ë¿ ÌëëõŸ½üòåÛŸÿ®zŸÌÕÄ‘×&Á»óüùË,‡tög–âü§?+–`wÝ÷[,_X2iñŽô÷ä°H¿8þÄZüû¾t¨^¸gßžþøõßË—ÿ6¾#ù ¿ý÷[ÊgãýËߎ´SÏïö€pfdtO﫹j­ö?üøµß$ó^ççŸnèr¢VHV±FÈÖÐýÚ;)“ýÅÕ‚{Æ·›¤@tÃëk7Õ>0gB)ÞoË'îµðËâïÖƒ'ºŠ þïZϯ¯ÃÒnk~ìq„tâjWK»¬ÖjöuÕjñqi£?.YûÖZYÂxú¯¿ÉFJ5þxú°šùóê‚—K»Ö ®Õ±÷?üì¾*ÖVmZ|húî}>ª[ ÊPLOï5£–8ªŽmâËš7ž>hFhFyˆ7ó»ä3]´›¸^3ª5KŠ­ J\iF À篮U_Û-ýikFç&êÐùË&]2ƒÏ¨Ùéˆ÷ *|zâ£f:örÍoÉFáz)>ý¢W`jFkß%Å« µë»^›Û{¡)>¬M* °¿ü/w@ñºZ"Åk‹ðÞ™áƒÑÎ8cäûì·áÆ¢-.*›îéC°ùȘíÖÊÞ³7ù° £9wÌêåùñ÷÷¿þî}ÙV¼l\´Å‘Æs/ô¿+èõµK z܆3ÿ¾‰ksîã±ê:s¾ ý¹â=ƒléÞÑZ´µ›;âüZÒ8´V3¸æL„ø¸´ŽÆ¨#]`ŽÆÓGÔÀ½ažZOÐrл¡ëY!Fw$ØÑÇË" ñaqÁUïo\O”Áï›Ö›-G‘‹Ñ"–Í Žâ?¿ÿ)WÝvåk+µ`,GwÞƒkâ¿~ùë_¿þ)ÅÑïÓê~ŒÅÇ¥ …4vxü½/\uðüök¥¾¾v‹vn¨kœö R7q­ŒØ^—¶¶bI‹†šêUAa0÷º§÷š1EsÍ{ µø°æ#àA@#¶Ó•\(Å„©ÕŒ²…0Žò*•⃛¨‡ ÞÔ¸pUV•âƒÆù”Ž Óà&¶Hž õGa¢3&nPX g¨tPØâû¬—ïv³çÙD,;!Öâƒ7 ´·ë3.C}‰La/q¥°Þñ^¼lTØí£¸òEÂn¬…­g]×N÷ò ¯¯½3ycÏ‘ðLyiâz;̲͑kù¸R\éåÈèTÑ×`e0Ä'E Î6Än¢^è ->î³)œ{Ž_‡Řov&egsTÕš †ø¨°€È–¢Çk¯)ÄG…-ÆÆVX¼ºHqµM?ËJMÞ†ŽÏø~?ïf:ËÂ=Ž —‘!>úábÑ‚Éuå­,ñ¡•‘;·k£&+dÌû¨Ö‡¾Ûš<ŠÛjmºÞÔ ô×~¸þÊÒäZö|ùK›^_ÿþûû­­Ð6¨£ø>ÛÎļ¥ïT4µxŸè^ž‘} Ap-²%Ä¥¾Þ¼L0õ=Ÿç÷x¯ï™]2ôn @‹úN1L«tÆ·ú^Ø$šúõ˗#?†å<ÙHLÙ7ê{ß}è¾þú­SßàD>½WëÚR-MNåõ½4ÒO5S¶–M¯Öå)mMÖª·kŒš  Uæcú×jM{³@­Éõ£¸Rë|ùáKŠZ÷Ûµ©.;–+ŒrÉh>.aÆ»k$ÜïÔ¯ú[ Fˆb¯¼µø¨?þU¦8rÖâþÉ&ùzï§úCÅeKe &±kñ]÷!Ê–f_ÖlR¢oÅ Y PêÆ+@"'npx‘‚yó4FóéÃ^Ó»çMÍ(hÅ?¨§¸ÖŒ˜·h»ÖŒ˜õ¢Õa”à `ývj¿6ç¯l·Z è·o“-%1<º2æËð ñQàÌåWGDþÚØñƒ™¼I¾!]ó#ÄŽåb`’‰®è“!>êe<z åÛ£üZ*@Ì z»¿"Å%àî'ÇQ.«/ Ù¡ƒêů ¸„ɘwé·Ç‡c?<n+·ÙÏû?݉Ÿw4OXæäŠÉ ñÁ-Ö²–æ9ä Æ·ûÖ‚æ9¤T—#?î[÷£œ7÷¸H¼Vþú+pszÑöûÖ-ä/Ÿqò_ñ—ü¸å/£»®¡6qí/kÇ¥ïÛ…òë0_Š+åwGpµ×wŸË$kqu>ŒÙ>¦“—Êÿ¹úd:<–:¾j7Kqµ==Š j]£%`½ü X§U µ%’JñQ±ÊöÌ mb4F~T¬¼¹s„–!Ô‰¼1¤`Ç€®&¸R|T,ÎÛùð›Šu‰?P¬œZ6Z±ê¯¬C4 -Fw­¨××~“ôÆ!^­Ö›¸:D+¬îÐ$TÊç½2)>jáᇕñå«¢üe-Ue/ûš#j<½ÓŒ}âÙXóʾÈ|zïÊØIê ‚Í¡]ÎyB;DG“»ÚIñN3jð3[Ê@ÕØ#ßkÖjë–2°o¼rèÆ³²#À8*ƒüu‰ 1/qÃåD@ÛËÄË‘^âÊåP>r•”—Á²·8įõúÚofYHÛÆóJf¹dôqFrÇB§ Ÿ÷`¿ïÙÓDJ)Z”R|ðEøŒÉT0Xßþ}¼l…­ÝT´¸DÌmzΪ4C°¥rC2^^W·†aþ`Ï_~ÿ®þ]C\îH·`ÍqQdHŽªÐbŒü°#¥œ‰íÃðÆËŽ´¦šPšœµêFB-¾$isqÐFñ™‹KÜp¤<‰ÕÔ?Œâƒ¹¨cw˜Êñ0…ƒ»¶k—:¼¾ö^æ (Å«YZW;ÒláIÒâ5qB|° Ïž£‡Mà ñÑ*°sV€'r×~KŠ÷±Y¨Ý“ìô †ø°¡­ý¾í­ªØ( ñ>„ô²5¯´ìùv„'ÄÇ›D5íHÆ+%ÄG£ÝA•2{f3ÉyeT0…i.¥—Fe—?û×õ‡².®Ü*!>˜ ö²ë˜Ab,Ú.˜NñÞ\PÙÇ#?r·ã#AhDmd¯–ÍÇÌÅ%>˜‹ãL›‹ã£¸¢‹”üîãÔÙkhy×z.æâçwÌ…÷5Y|·„=îN¹Á‰Oh錯(<ˆ×ù£¬p>R³M.ÚV]¼P€7ƒN®°©W±¥3@2(,Sjóþs–íò1q£ç®]R ñ‘çËÚfk›Á]96B\g!=·ö‹†×é§²8{4]o±Ójè>¨2?ÿ˜ž†0Ú@^ÿ0Š+ëò9Ñé Wžÿ]Kâõu8*˜zX*KFq­2ÁšDÍt1­AG²óòYëPŠI ÅØ¡å;SD2ÄÅ‚œ’™®àê… -ÞY›ºjè°Ï¶æÛ1‰ï\äa,KDW²„£¹Î飋¼šàJñÑE Ȗ¢§Ke„øÈÝÞs0EËvÀZ6}RCQ«H¦&§Œ§gr·?+5¨„cÍÌA_ↃΓ„ÿú‡Q\9µTÙkáÔô¤owÓ“2ŒâFdël5*llé¢B|ÜÐÖS–Iz…È­šfs>ë³õ [Ôý QHñÁ[ç3Ûtˆû*ÕâƒZ§záÆÌ2.ÛEÒâý~¸l8øLÔÂûõ²„œ}½©d&GÕkY‹ðBP`¹q_ ˜÷Á[ž}?G«@W)ŒN| sw&lŽ·„kÐI‹‘-:Êxˆœ¯FÝ¢wãÉn|ƒÚ1û÷oÓ[Ñ'óܬ,gõô¦fÙVa3ÛfdkÿÃ(®ÏÍ8^#t-œ××n ½uyãµ¾d´U(ûéhÆ»«ÏÒâêZsôѼT5V‹V!šä°®!>øôâë³Iç9^Ûi!>úôx&ÔŽÒÜr‘…xÇIŸ·<¢d] õîªD.ŵnz9ª5â£ZãAf`,1#¯N½ù°ÇÃA7ÖU¯ÅÇSïZ‡ÍÄë죱êT\ìð•‰!®6Ý1½{yà‚×-îy‰x½_Ö¹”Ð<á5Ù¯¯ä½yží[iˆ¿ÿž^Ï;Vjò~‚‘Q‹Ñ7NÙ Xׄ1Ö⣳ØÎ¥ —µ‘/ß«uëlîÆCŠÎxúx^M¢•"í9FC|tö!œÞ`Œd§+p)¿½cø²-9á~ÜNÇpE"„x¯°Å Ñ„Î}FãécéŽÂàÆå½ÐŠ1òcTÜŸ#?H×[ÂZ\_ÇÃM¡Œ‘èüŠÂŒšLÆšÿ˜¾Äé½r¡q ]þ0ŠëÛ}Ü®2<¯¯¿~»wÓÜ×c’Q|Ìy¬¦`:R(‹´øp©§žC ÎÅž“¸BÝš›GDÅ^->œ#&6’˜#ß>¸[, Mp.èë­oï~UÌæQ¿xÀëì]Ëqnâ#^_96¯ÉùQ{kE9Óçp-ínÞ;? E›a®bÒœñtå‡ÓaTÔ%¾Vß@Š~¸fR[ [þçhLœºú³ÇèÞÎq>ÅŸ¤b^]¯š¸¡½n3iZa]f½hÇîÚîJf9gþõµ‹¼¼¥Ö®ŒŒKƺºƒ½œ.«-Äû‹†Û¥-ó°«Øc´øànk­\2EB;±â£U(îÚ>ìŠíN³F®’:Ë÷`ˆ+§í»zµ’jñQ­½wh&†…|i†7Ç)“é‡c»<ÐÍ{¿9¦³|Øxu!â “#?lŽù,Ù¢.ñå`¼|¯ÖžÊò`S­];ð‘#ÿÇ¿çw¿©Ö—ø]µÞ!Q‰›ã=mPï‡]»æØ^^iùVìà:Ðx}ín¦¼µköW1ã&n¨5$­Ö{Ê+–&ÄÇ3­Â¡vÚGlåÝ„øX#£V5ÕšÚñ€ïÕº­?~§Öcó—B|töÑß>*,]Uç»oÿ>æi±qu¡VËÑxºÊ =¿}ðÖ\»jñQù ‘$SßsDcâŸN >™Ûé²yÊÆ²B䙢Y'¶¾ÝØ[ÛÁ°Z¤Ì˜¸AùkoùÉŠ ^þc~‰{k˜„ÈëFq½·&¾¶)ל¾¾v' ozk¾Ìî%£’½}æÃݪl®ær„¸:º:s T6W†øX*…ãìi s¥¶6…øà”Ëöƒ™XÉœ¼ñòCÒ–;ïw5_[‹GWDÏ–ÃýÑ’¿îÅHñq|Ö(ÜmYt1Z÷ÏXßмÐT¾=#?–8ãx\-Ým=€7Ä¿M{#îv£ðZ\¹[‚w£Y—ø“›‚ÕÐYw8ФèÛyk{y•2V`ìÚÿÿÞ*Éþ~O/‘áJÚºd”»Å²ì,KjÕû„ø¨—p&mšêÿkq}¤ÌfЪl@®éâãõ}ÀdV’õ´xïn7`´ªjúšÎZ¼wÊ>%<(Zªõ~‹"#¯Îž(G3„ùJ⃿LE--Yëe¢ñòÃáQÄ”Ì{ýegM†x¯½¾²‚í[EQ9ò¿¬ À ìãìÕ·0hõû÷iIª½zŸQ’Jì~ŸU¼`qÓãš”â/»#ÿOo²¹î^2FÄ:$´ƒÔÜlGÏž(DëDºŒ¯)>¨uÌé¼<–]l,ÄÇ¡ñªµ;Ä¢ƒGãé*}žÊާJà.â#,ÇœÍÊSžÛÝ*!®JÅAF;šåÈøöÁ)œå:º}Q=•Þš÷1áó¼S7ºqÌW´QˆÞºF4£í­]£4ñòÃæØ”¦ Wãé£ò×ôróì‰2â#,G·• {Û[ŸâO6ÇœÔÓÍñ^ŒÕH!ñAÝè­©àX+g÷O+ ùÏûVa©\ë’1MÎFAêHÙÖâêND²k`{Oµøóâ³úøXyÊ·‹ùB\]ß÷ɬ]ÜåeP…¸ºXéƒy¯|+ñ$ÄûÔ»j{ šV¡¸œ¬ÅG«ñÜÝŽ$}6^~Ì2+#–U¨Û'cä‡ô3OxlÍ;úÛ66†øX(›V¡¬9µ7ÿ™F½]u¾¶†´¾}(JP6_VȬ|yËÌ—7–³C3dVfQÍû¯_þùí‡töžjõÒÙSë3ÔÄUíBI»= ÆBí$sÕXnÕ}þšÃúJ²›7É£¸VØâ4¢©°ÀWùJ!>*,†£p•*(g>}¼êTTÆôÛ½Ðâ£Â?©ø³G->LäíK‹…Q“W¥ À8{Ú®©„l Ýè­ùL£U±h²!>ÞM¬WZ-]s¯½ïõ²BÛwœ©¥ô ñÑ[#ZU·¶öÙWA«=¦/™ K›\ÇvòÛgR“Z­E[L]0ž>Æ}8c°L¯~M\“d™Þ½¤Û÷ŸH7Q6~zâ¶_IŸ|´R*OÿWòA/›íW}@¶Ã|å¤j8kñÁc•o÷VŒÑ_Ñ’6t£^–·¿®¦\“R;Zý¼¥—Ñ·+I—ŒÞžÖl û\‡Ú¡nWW’Gû bhÇk?~Ξ?Í®ª<…íd²‰WÙp0êeÊ×ââc ÔbÜMÄ,Þàò—B\7 B³•Em=cˆz™Ì,¦Zª/Äâ æ£u­ÖËílP ÝXlLJºã­žZ Y‹«’n{ƒ¥Xµªy¥X@>™¥£ ¶ Q×w½¾öÖg1Ô³Â(nt&òÙÌß÷ÔâûB|XÚ!_ 7QvÉŒþ™v¨v&íš½WxÄ+Æõ”ù ?wßþÏxÌJ²)±U âF²«Y”¹›â׈]¼)«¡ÓÞ æø˜Âˆ×Ææ×áÂú+kÕåÜÊ©´—Wö¸,ùK±Î¯/ö¸ÏœÛc—³7ôÁÊ*Ý‚Wi.ìÌ-m@絸êípžþ¨vé:]/?´ª½£í¥ h¼¼"•VéÛOJÆÐ +¸lÑÛ CËÑiâ½ÝD,k+[³óÆ·ëôÍÍ êE ­ˆâ%>Ãö®`]që‹t‰ë£«ú+ 5зò¢×w½¾ö”6_´[+ŒQ\1<”iæ®ý5qBÜ`xÓ—­Éu«Gˆ{k²O«Ú­!>vS!—íbÓ…ñX‹¨Þ9[e¨õê^~(õ“~²‹ø\F!>^“LçÍâ1€%ðMˆ÷¹?[±°/@#?0ˆ+vÓ 4!^ n¥øhô=o ;¨Ì¾"ÔªS[€z÷Ú[Ô_sêP‹ýå/)ŠEÌç~ôå±BÖâ#èP o²MYNaW.§î«Ð>Enèj§íCa¯ÿ|7źť/ãªSÈ6õ×;PZ\9w¤ƒ*bl5W…¸ŠKcN“0×u.ÄÕnܛޫpwÒâƒ^H f­@w¥ ñQ/3ä3Q°^~À·:=Æf~w±ÆÈ½k.‚¹™Çœ—]¤;CúŠë ZËf,݉lºÈTüŒ7F~ÐwØ9-™ÔÄiÈýtºæºú‡Q\§BJ&×q¸Šo\oüú:Ô œÇ¿8^èzÉ( ÉîœÚ9”X̬N%5]î2B|¬Ïœ>Ü”³”kÉR™ä¬§‡)td{ÑÊU>ý§j»ì{@tEß„ø¸FNÉRö†ø¨!9cŸ}œThñQ3xo ¬×¼oIó—øà¤{®TÝg;ý탓ڻžF3²•P‹+•ñ¢Wnm8~E ~³4Ã`ZhåEO™1H]ÿïlÓý¿_ÿú£Ìüqãªà^ÑGq£. Ù(È×.‡4qUá–¬+û;'%->Æ©üYQå=‚ï óUÃy„zÆ›Ú5K‹uÔ#žM9þÛßåOÑC7Æ+rÊfî²þ½ñíã¦Ïkëƒ^–í™÷m,óm…–Cëà(G~ìØz–w×·¢%>œ¿Ð¹±ÔÚÇ`½|Giµ,ÀYEßÒ‹V'úrÞjœ =ë·’IW¤è×ï]*sþçÛŒè7gÉèÝSNÁ®¨è[¼Ô8¤u-Ûá ÅÇã83'TÒ<^Û*!>öÚ)Fߎ’ùVyGˆkÓÇŒz9î÷­ÁŽ=±] [AF!®Ö&±UÿBnõ_äÈk³,N´–cÝèFcäÇ*1 ь͊ m×4EÁ\´Å•´Ö_×ÝÑnç7µó{%§<Šëº‹emÚ[]Kžâc$Âû³ªàÀ_[õ¿ì;ÝŸ_À]%ņtKk5„ø‰g¥-UÃ4Xâªmq±í4'%Ä¿ ì °­qµØ•ï‹ol oâ[h}…øØÁ1„ã~Þ‘±åüâƒ7¨íAM+«™µ¸Q[Ŭ¸äë1ò£Æù½¬ÿ¨q©_jqå v;¯ºsð¨TÆŠKo»q¥qÅ\¬ÿ´²¿ÿ¹Yö ›(qCe®”ð±[Z¸Î…¸*]è­… ´Ó!>jœ­µU$;\GëÿùùǴжƒIDöÆË±JmèÉWë?²br_L,EkÍoY —¾Kña3_(ÛÐÓrº…ø¸æCvæªâ¤®C4!>®ù­5¿!1/¯ê–åe¶\sV#¯Iº+¼ùÿ®sÂë?ÅÒÞõûo Õþëü‰sîT€A3> ñCÛ)qåʤø¿ùqˆÿ¥Ä»ÿ}ÿúÇ×Cüø/%Þýï½ø·çË_ÿõäåÿõãºë¿ž Ý¿®§ÿëcO?‡îú¯C×öÝc”Y¾ùÓÛžvL_¾%þÕŸÁ¢!ltüʲ 1]í¥øØUq7»_ÿ'’Þý _nê¾ú“¡Æ¾»Ó§×ÍÚ鱤¸Š#§òéõñäÉ_O?l„±ù·×Šå ÅGg_Hƒo÷µgñ5tçF<”š=}ó¤ÎÂF!ïU·ûo)þʵ—?½äà/ßøöPD‹G.!f6ž^C´§Ÿ®x¬¢0:»¢¾=…”­‘¯ç|g¨§ˆ.^ÝF™>½^ÓZ||úÙ€HÍ;\¦_ýÉc¬æ‘/gˆOÇãVèøíµÂ@{ùü‡«4o<½Ö+Z|¨E¶!ª5ïÌײ97ãÉÊk¾¦×âcéÂH;+Œ#ŸŠÊ\æâd³ñ$õyÏ#Jq5ïGÊËðí)ñ•CøÕŸ»!ãž>óÕYBŠçŽzçã·S ý_â?Os¡ºjÌžN>±WÖœ¥ï1ûÐ^þŒ ª*¼ó‘/»=ÔâÃÓ—ü»§oëÒõôo—¹øvÓÚÔ ›Q‹·ʯ‚ùípå³õ'ÒëÓ§37kâª<ÉQ®s\u³Æê›3vÍo<ÝH¬ÅGÿÎÞ™O¯ z×·Ÿû‘q7þÆÓÓu£OŠO‡Ú‹ÏyrÐàäïÓA«º~ÓUw•ç•âck>bã·c¦f¬ÎrFÅÎûûæÈ ¶i⣵q‰¢ñôÚR ›±:ޏ†Ã®·žŽ‚mšø¨qE--}÷™®—?ÏÑÆ„Ž7žN©é{5.HÖ·×¶ Ma^úþóž¾SMèÕâãÈCöÖ¼ÇÚ¥¸-›ß¿E|ßüöâ"Y‹TŽHDoëʲ+Ëñ?7úcÆÌ[Ö†Èõ=6™–‹çõ Jÿ¹˜öó郡–[à²æÿºÐè¯oÏÅÏWá䦸ORoŠŸQ Uwñžø¾o(Ü?ƒc¸ãž8¬máÙ6p[µáʼû kÛ@xº ,Pš®ñWXÛ³m`yz½»|†¾ÂÚ6oA´±ý kÛ@x¼ ä >÷2°¶ „gÛÀj¨S­v‰/máÙ6°®xh«nm϶õé œº¥m <ÞRˆñÚÃÚ6žm·/ÞëÒ¸µm <ÜÖ§+ãò+¬máÙ6p[u Í\¬máá6°~»Kù_ÛÂÃm`±uµ|Å5tkÛ@x¼ ,w•õÿ kÛ@x¼ ,<}µ7¬Æje·T¹ðzùµm <ÞRh·I œ,máñ6°êks‘kÛ@x¾ ôšÆ­máñ6°¬l^fmØb¼6b°¶ „ÇÛÀ2mWiȲl–¶ðpX mN¡!ñÒ6žmë·mnËËGä¶x¸ ÅnGñ‡ÛÀQüá6p¸ Ån{ñ߯½Ÿ± <WFLãþùo³úØMñk÷elÄnˆ_Û'c'59Öüï×þÇØ ½!~0íïOºb¾#žOñï?Í”›ß~m!ŒÝħÿñÃlÛsSü‚xƒço¼üEáßyÙ,ý×çO—=·Þ]6/§­û]ô¡õ^6ÄÏŒ±ßE_Êo–Í).šìÍ:C¾%Þõ€{..ºþÌ:]½%.zÌúî¼%.zÌú{(ñº•;W(É>é#`LÜ™<ð»¨Ý<«Wn<Ý]óÞJÌÎê"O?Óž~—U@ÿþXed¹ÀI•É·-í?öíý›v¾]¿ŸÕMxKüÏòÌÿÕÍæ^ _¢5SÅ–ùÜÇ5ñýåYœ›WØÒÝXÎZІxõ°ò!eÏ‘Î\0–!‘Šf§ø÷¿/_oœÈ—çóS÷‡>Iìÿõë—·Ÿmu-¶ Xåý”¨52³!þ˯ÿ×ýj¯Õ^þðíÇWù‡V–LŠÿñãÇßç¯ö®LÛË×?üõ³ûC8“ª_ Rø½7ö/_þø¿˱+[Í­àø/¿ý÷ëÿ'ÿPöЬŋÊü·› Ø&®þ¡QùwêNüǯ_»_í—×êŠFdC|{GyM%dj¯Õ×½2_~ÌC=¾}{­¾Æ â¯õ?岡œ©îYœIõô¬Xš¤³×Tå†nàc2Ä«¥e™X|–…íTfŸ¯Å•ñÞo» ¥2ž¯ Ñ&~d6¿‹/5¾e/^‹¶v>7àxMAä–½ {ÔhÓ(¶—@çNJ¾¼üUÙñ”ÙÉ-•?ÊHiŒÁº2Àñ“üÙ‘[Ç4Jks•ïÄÿúÖýÊç£ USù‡„Q-›m€åÃ}­RÙÆôøSx)ô 2wCW8^.ó^˜õÓë>3ódÑ&ñ陎rÍòŸ_j½°óPi\´©Oím9Ù©wïd/ÚÔ¥³Ç6¦ò.Í­üUÙ0…sLÓ§î~§É¢=~/DÅÐCÓtiA½êŽN-øÀ{ùÉ}Ls÷åíE›[€$¥ig]¹[uÖ·×î~ÅÇM¿:¦òí^þ¸h寷ë˜vâÀ\´ùSÿ«ÜÆ4_úÎÄÎOmnÑ´ߵ;Æ4‹·Kbâ`ÍIÁš“‚5'kN Öœ¬9)XsR`:)_GG“ë …¤Åï;)’k 'Å/!‡JG'•оùdˆÌIÁš“‚GNªþ  ñÁI?®%¿í¤`â¤\Ž œ½dbÖ⣓â÷Æ·ï9)XsR°æ¤ÀvRÈç%Iå¤2¡½ho:)€É¢½œ”¼—¤|µAW‹ö¹“‚5'T=L${ÑöNê(aò¶“‚©“ÚîTNªl/ f‹¶9©²‡Ìá='õíÏÏvReÍ’é¤ÑWN*¤d8©½¬/üsteÇú§×²4ÆÓG·W1P>Î×™Ó⣫í¸M×Î&úo.˜î-HޝœŸõíÝÓë-V2]dm`?Š¿ÖÿŸõkºBç2*^¼Úˆ5HFçé :Iñ1vQc¦‹þ¬CÛÄÇXŽ)'µóôR¼sÔßÞû8*ß^>_ƒ"|ûäâåå¯>¿鎭а“BôÄ;)æNª–>SC§@bc'•$ÛÈooNÊ»š°Œ[åçÞIa±¡ñêP>.iÏ)Ŷlš“òEü¬»3.é&òu»Uz™Ý z{ÙHñW3½ ^%‹Ô²Igí•Þäabñ»^¿|äøù¥˜”t¨LÍ&‘cRNhñšº ˆ‹Q+)A!ëE+-^sdÌ Ó•U þÝ• ×½|¿›(&ñè^\‡å¿›]0¿}8ü!Ÿ´ÿ¨»xæÏ7qíLRÚÔ·÷þ%a —­»ÄǸZäLçf¤ ¥•m}º˜öß§W8LÉ·F‰ÂÔ[I{^W‹>´ŽÝòà!ó^¦7v+یƎÔÑxzÞ(—  š†­Ôk؆x™^ùtÈ!Ù¼d‰žóÞ ÅØ#­2½'ôÅ&Õ*VF /‚^6cT¯Þ±‡pͨp?UcÉVØ$‚NUc¯í¼×Ta»_ùÜë»Ó&sâêôÊ_¥kFS×g¢°]¸/r+'×ý»ÙM¶‹)J…•˜*lçÆ Ä òÜ5§[€}TØ-Ü4Ö #nÛÄaÍIÁš“‚5'kN fNj׸÷œ¬9)XsR°æ¤ì½LýÀ7œXNjïh{ÇIÁÌI9²œ¤Íê飓â„9Ñ 'kN Öœ¬9)xæ¤ †«hV'~×IÕ ,-~ÏImÿ°Ccâ:'UÛ”€7œ•ðYi¤ÿ˜“‚5'kN ÖœÔìH+;‡7œLT¸ã¤`ê¤h'UÃH8QØæ‹6}ÏIýëçßöNj?xÛþðûŸÒIí³¢ÅUÀÍÓ$yàªu+ÅuÀípR:àv¹H!þûŸ?~Ù\~â"¯y¿½¿°œÚ·wµ3=M¾½ïB8IJ@¦É·wŽ”ÀŽÄ9kè¶oï^ž²í [¸ï}íR …ìAe>l¶îºRÚÄû̇Ï/Ég47ü»Ÿöí V‹Ú‡ãúèa¯B½R|ÌîôvâD»B.Ňh!pdoùN©oÿýë—ÿû­[u¸i•?üøy=ê™TLÙÿú‡ð°à ï+_¿üë?ÿ)©¯Ž©Rü_ÿúwûU,ìmF…ë @”ô·÷Ù!]ФxuÐÅ ÷wï"ËFH4ôŒý” ï<ìÖ­´]yÿ«ÏúpgfêÔ§v{ŽöLæcFc :ŽlL\ÞËÃr(f>¶mi̘Á¯Ó¯é%†=ßfŸÑë!f¯-í>½Â™¤ ”vé •¹®Ò£Â&qõ}nše:^9ä£ÂJWÁ%ËÃzn+ƒÂJqb'I#èm…•½„öõ–ñDa“Èòâ-Ãí˜Ñåp¦°ò19R›ÑtÍ(D—`¢°×¯kKÍkFeœ¶Œ]°VüŠ8QV9'µ®Q†l…Í“ðíVw˜ÂDa寊fØg‘ž<Û Û‡‰Ñ2S l*l/ÍÛŒ¶œ“€œÓ{ýªÐ“j3*SV(óDas»"ÃâÞgôúCÁq„ÆÁYÁYÁYÁYÁYÁYÁYÁYÁYÁYÁYÍRRcHÞNIõ€Zü>Y!…Q| «2Bqï]Ñ“UÍÈÈWg¹Nü&Y%lAf!Þ“—Çoç°ï‘¬‘¬‘<"«_+üGcÞÇCäxtPx›¬&‡Èu ÍYAŽÆÄudEåˉnØdUÜxbEV[áŠl+ìÈ ÖÈ ÖÈÊŒ]ì/À$+])ö}²:T~¢°¬ƒ¬j3]íeî“/‘& ÛȪö¯ÃdkdkdÉÊsæ`+lŸ ÌþYMïÙ“EV½ç‰Â¶§`ýød6Yù²ÑÍY9¾:å¼þüå‡1«½R‰×+ÛÄYIbWŒZˆ„¬„xOVÛ©PšÕ•ù0~ûûdU5§É·÷}˜Â${ÌºÕøíÝ™„¬‚ºzZžÞÔ¤šãºüCñ°¾öŸÅ÷’òTˆi’UÀ.„øH@,f$ôÀÕ=µ‰ Ë{êÂ=¸õ˜Å{*.2×­ª=H1²%.h»jlAφ6ÙùîXçl¬%ÿPlæ<y‰‚yúÛ|ùØdF#쳨›#ßý¨XJ0Ã>eJx2òíô?b É€È!hëá¤^î+ž°Õ>;Áyá Ë^àyT %Ø#/6¢OÑŠÈÔ&šl|w|Oln`½ltx&&‹8_ÍäÔÈ7ˆÀìhnx)HÚVÆ‘Ç÷™9ܹŒÊÄÚHˆ Ìäêö¿–Ó¶G¾KâËbÍwŽßŸ•ÄÆ‘ï¯ëˆ¬Îοljµé¤aÇBåß#†Éȷȉ'ÞlÝàß·ß'#ß9E¶ü{aRâ°æßaͿÚ‡5ÿkþÖü;¬ùwXóï°æßá™'líܤ¸òï醟å]DôÑ jpŽ1â£G„k'õ¦Û¿7ÐÿNÌàÁùøwxæßrNd|ì·BxÿÏ2ØÑ{;øP¶æ0ù–8Q6ùoøw+ø°X([ÁÌ- |ùøwxæß}v-ëcù>=ã ÿ>K]ˆ!˜qPF…'#ßži¿ûÿž‡‰wéиÁ¿³wZã>ìßᡯ—>&k¾??qpÿÏöïpêûx2¬-íèß¡€/Äþ&þÏyïý»Ë1_—?þómš½Mÿîñªñ"ÄÕÉÊP}ÝÐâÚ¿#Oü;OWþlÿî/c5~{WÎô¨w1úwt&ßÞuqödŸŒ4'5~û¼iûwïaòíÝU°8©¶—Ê\⯯]òæK=1LlœŒ”e®Ã…K¼Ïý¬qôäEz^w2ÒîŒq}áX&ê³IP-Zíßk_kÿžk}œQ|Ì áš-ÿž(A2Ä;ÿNåW銔žâµkaígì‘—59ʦ#‡ÅJ;NöÈ €ã[ïßÅyÜ0òý 5´KBéÍ‘ïr”±ÊØ"'5as2òñÊÊÁà ÿŽõ8'#ß~ÓÞ,öù6*™ …ÝG^8R®Å—õáB½ßî#/(ÀKæþÝqž¬ùþG;5±*éG¾“.~ÜÜ¿'ôË÷þ½®ÍÚdØòï1:ð“‘o%=‹©m#ù÷ˆõÄí#/ϨódäÛ¯R¡±æ/ÿ>^uÈ«8¬ùwXóï°æßaͿÚ‡5ÿkþÖü;¬ùwxæß±˜ÊZ\ßÏ|ÿ›û÷mm‚Ÿ'‘wq‰þËNᆷ÷ï„Þ¹tÿÚ‡gþˆ®~‘ãÈwþ(Üðï³äŒÁŒÏÇÚâ~2ò×þ½6Ruþ†Û¿#ûÄ7ü;¬ùwxæßË&¤—™^=ˆH7üûlÿNÙþ}‹Å¹0ùË¿;æD|ÿÛûwŸ0Þðï°æßᑯ‡ÁÛ#ßû÷oøwsÿ~xx3>ÉÑdä›÷qwRïù÷Éþ=Y^oú÷ÿû>­å呟O×· qÙ˜aâß//#ĵ2üûîùµ¸ŽÏ§Y|þ"êñÛe‹=B¶ãóù:\¿½+KIiâßO¾}Ãþ}7“oï'ñy5ò¯õ?e#סÿ¤Ê]ne0õÈï=Df#>+çïè£!>úwÌ"ãEbRPâ:1a@+>ïS¼lÝ%>ÆçCqd1›I‡µëŽ!ÞÇç«|ºÆTxX’ãÛëïE^åq¤øç—èé§ëm:]þ}¼™)iñÞûz ÎöÜ ŒoïܸO>@°NÖ3³K†xŸË+zód½È{{ÑJGJÉ*wY£Fˆd/Úæ É×Bæ¼Øo/Úá¡·4§v½_´} omÀ‹çŽi²hS‹¯gÓAW"Ï9M­°×¬“kL»-pKþ­t‘ù<’â5¿.Gö¢ÍÝ.;ƒízÙš¸!ް·Xµ œ…0Y´2‘-Ÿ'à}è¼– ΓE+ÄÁyñtXó°°æaaÍÚ‡…5 kÖ<,¬yXXó°ðÌÄVMKˆ«Ê² úÜÃNNÀ]LŽ [3ÈZóê<%vtÃÚ;è½ôßð°°æaÁô°Xöé¢3\çaÙzúmRÌÆ·÷–=ól»8^²†î¦‡ÝäíEû Ï<¬çàR°mW!À%¼áag[`t ër¡Rš,Úö”²Q xÃÃNްOñ÷<,¬yX°=lmi9ÙÜr&{ÑÞó°)ÃdÑ Y£V–‡­µ$ãdÑÞñ°Ð*üøuº‡uÙÙ1jgˆëB£0ñ°„†¸ö°<‹Q_ 3B\yØÉð°û=­É·Kë½£þ yßÞu¡õ¶‡õ`òíC.Ø$F}áÁøíò!IV_®í⯯ýý8Ÿ“?2ú¦eÚZÄì®×mõLÅ5+¹‡M!x-Þ5Û’CÈ.\P xÐâc&1dópº˜yõô¢¿¶<:.N*º3Óéß´ÇCÙNdg‰ù.ö°±(–¼FÝ4°£& ;´'® °Ç#à6Ô§Ý®®Ù'¤¸wí}ÊlO\×,#goà 1Ú×=dÏ=0NÖCH“‰keÌ™sR'NdÎQë;0N\ð˜2Yç kcžL\ëµQ¯€Á6>ä$áÖØÖØÖØÖØÖØÖØÖØÖØÖØž±ÍÖÎkñûl“¥µ§lC Õ·÷l^Ê~åÚ¼É6ðŒm|íz@†ø¶©òì‰ûÛÀ#¶©¾³ŒŠ=q·Ø]šLÜ-¶q­tÀ8qÛÔóyú&ÛÀ3¶©õÕ=L&î]¶©sÚ.°÷¶glãˌƉÆÝcÖ*s—mök<8™¸‹m0{ö|ƒmàÛP-eeœ¸wÙ¦ö)!šLÜØ²MM¨˜hÜ=¶ .Ú÷>Ûþg2q­ö>©‰ï± m'ÎWê‚ JSÙ«`6er-Ä-ÄÇj5ïõ“*(ý¹šZކøÀ_!#qb«9Ô¢5 J{³ònxp‰Wµþåß  ²i˫ܧD@O"w]1/?T„†ÈGÉÇ:%Cwc↊ÐóAVCEèâž)iñ¡"4ÐÙoBupï qñ‰Ÿ_êæ’1IÑZ6ЬB“¬È…`Œ|ÑC Ü¦ä"«ë•I[edowÞÆR}A3°U¦ Ïì¸UIçb¦1Ú*Ó•æãô,‹ÚEæAeä¯âÞͪ/é\«.@Â`«Lw¨”bÐÌ´ìb6U¦¿ƒ™Y“û`¢2­,e­ÚTF^YŒÑ[ez„ápMIwµ°…¼•éÄã1tuJ:jqÖЩºFûܨ{`ZZù‰…¬B½Ll£QËxT¦ûĽi‚qaõ·«C%€ԦD<*ÖNÌ;¬Á ¬Á ¬Á ¬Á ¬Á ¬Á ¬Á ¬Á ¬Á ¬Á <„“bm´ø'ð 8™t»HoÀÉ´êätN¦U(ùp&œÔó°7àÖàdÒ®Žmà'.¢1q7áËÏ¿ 'À˜¸Ûp‚­ˆºù;pR+]ùV)tP™À <…r&ý&|:SVÞ†»ßDù_Éó 8™mð”oÀÉ´hÃÞvð=8NÒVSóœÀœÀN 8{N¸e6*sN“ó¶ÊÜ‚Uæ}8ÙéÄOTæ]8y”e¹f)+eDzû¸Ÿß‡ÖºN”ÃúÇÏ._ºëhc¤‹dˆ+ºðn’ ¢LÊ?³œÊGU¥íåÅ2ŠÚ>ÿØ-Ô÷»›“›Ì“—ï’7Ã$«3 ùZi䟮"tñFgràŸ}áAöqWÛŽù*TòO×Z7"“!>xؘ¢Y÷ v%R#¯íZ÷¯Êò ÔûdO\îÎ;E.qw½®u³&®™J j‘MS àØž8ù«½½ YÔ1ûÖl¬Ù:X³u°fë`ÍÖÁš­ƒ5[gï&b­FJ7l¬ÙºÉn`/ªüž­ƒg¶.brÆ·ÐÖÁS[WþålOÜlÝ„iSmärÃÖÁš­›1m"ĶžÙ:_V“´u°fëà±­ãÖ;ï·oï ÕÞºZ\eû´ SN’mJ„¸¶ˆ1ÍŒ hq[Ê8 'ñäÛïÜbð<ùö!¶dEd›’ñÛ;ƒš&Q#h] ›VÛŸhbi£zúëkw%hËö F¶Ï÷‰£x£hïvGÛ8ù\OFXOÜ`¨ë܃Ñ(d¿bæµøhkù"ó‘lµyŠÿþ¯­—)`1*.îiÿú!Ú—¦— µ`kâ_¿üÞ.$á qTÙ>Þ½äÚo"â2¶´ÝN×þU<êuëé]¾s-#žöÔQ«ó3Ö6âÆ²Ùç]ØsÏÅØéd¡Í$¶ç]Ôú(^âpR²ˆgíf•[ù0ïÂË$´Ðu¤5Ì{×îÛe3jTïžÅɼï¿ó¹V„>êíó~þñ¥x¸'ó~•Ë÷Þ:}²P~Að„³y¿ÎÍÊŽ]nó."n¹¬罉—}\T àʼCphÏ»y¹´wæÕ¹F¡ù÷aÞ¥@º„èç­+1Næ]–3‰ÌFŸ‘ãlÞ÷þÐ/¡é¹‹§É¼Ÿ•F L|Ü ‰ïóžÎì±Tãu8™÷«PI.Æ&&•kÄ/uðdÞÛÛ§b,±Í{Aælç]æCyöŸ†:¥ŸaË"Ò#¿Ï»L)ÂÉLU*@ìyÏ"«³€o³óZŠßf?±ó]7’@FÈk?ï!{Þ»wŒÓ;b&ó~þ.”w§-Ì{Ì{¾f´n­góÞ2ʼÜdª¼vq2ï¢\pÚ¼‹¦BVa2ïM<;rJû*©‰ˆäËã×á×á×á×á×á×á×á×á×áס¹‡‰ípØN„ø}®km‰.ñs®q>ä:ï[Mf)Þq]-Ôó ®Ã5®Ã5®C“ë V¿Ÿ\p )Øó~ëÀádÞŸs®q>⺗Z$ÓdÞ›8Þà:\ã:\ã:4ûÇáL“òˆö¼ßã:Œi2ïϹ׸r]™PŽ“y=îRÔýe ®Ã5®Ã5®ÃÉÝf)èÌÙž÷›\a2ïϹ׸ŸqËµÜÆdÞ…x G­Î7¸®LÊ4^ØJÿÚJ’¹îÂÂ7¸Nˆ+®k§Ó5!®úû0Ầïã·Ë"¸¬ÛyÕ "O¾ÝÂÂ7¸nüö¡Š­Íu­Íèøí2• yÂu))ñ××¾=MM¯MlµÏÒåa/ñßÒVíÜ:Ž…mX‹«ê¸l%oPyŬ.qo…a@!W-¯Z·ÊK¼¿EÇ/¡V3ÑÕqý¶j â]õ¼\öÙ+²‚B«Ü’‡‘—ÕuŠ©„OºèOíÓ‰`¼H”*îÍXX€Ö½nù®:.¡ÍLÅ\€9ò@ŒH zjKdŸô¼÷^8'gUÇMA[›ñŠ*ãë½b›b¨“kvyy¨ToÉÒ¥j³¤ÀöÈ‹|¨\K½™'ë‘g#Ÿú”a²©%„`Ž|‡0þŒÓöØQ«gšŒ|:7#m‚Ñݦžf€ÉÈ·;úNTw›Ï7Ñ»d¼¼à–‰ÌšAÅq»Éš™NÙï ±:‹;þv+8„v÷:ná¾~ä{iòA;þz¹#LFþ‚Ê!£»Í  k%¡Æ‘õ‡R «;m¨©bÙàšÇ5ÿŽkþ×ü;®ùw\óï¸æßqÍ¿ãšÇgþݧH1kqåß#ð ÿŽ3ÿ}ºáßqÍ¿£íß#²ìä5õï¸æßñ™/3ší‘ïü{¼æþgþ=œÆêMÿŽkþmÿNñì±ò¶Ç5ÿŽý;ÇÖ4aù±Åý ÿŽSÿNá†Ç5ÿnGB$BºáßqÍ¿ãCÿ^ÛP’=ò}÷ùoøwœú÷³Ôç›þ×ü;Nü;æ£UÇþýû¾Ì/y1Zþ}sžZ\w· 4¹¾uØ…¸>—‘7•†œE-®Îe¬;­g˜|{w—k«ñ¢ü{už³oï)ðä–ÖU-süöî2VN¶o­yÆoïjû̺Ó6¶¹Ä__»kVõÆ Ÿ'¡¿õ·»©5M¸ÄÇî´¾˜ÚÔõ­Ï5ˆ 9hñ ¤4;—¹ð@ˆ«ê:@vuÚ {W|SíóI·½q”(XâÝe¬N…íËâoÿ®—=l·¼û¡Ò>%ò–Vp×­ 9t}iß²‹óñ“n[ë¹ø/Òâò!åá©ÎœµýÏ1$cäÕù [Íëë)¡ËjèŒ":WÍÆ¾æoȼ1ò]àâF½Ù¼>¸œdˆ÷€·‡|ÒÍë0†`«Œ¬ Œˆôɪ [eäÙ„‹ÇÄÉ·êÀÁÛ*#8e°¹!&¶U¦¿ ¶e2¥ÿZáÁQeD…~vI×·ñeѦvvTQß&%Î7ìÿîDe®:eûœ°M‰ŒûW´²U¦+,ÌGÈ;ê˜x[e$]dLfoܲ™¶U¦?‚ˆ6]Ô^ƨð—ÁìGâø~T™Ö['8foÐEÙÓTö凷‡táCŒ(†×è×è×è×è×è×è×è×è×è×èÂÎúÀÊíºhÅ´…ø=ºØûˆ«§˜.ð!]Dˆhˆ.p.ð]×Ù®”ʧKº8J•Ü ‹Yð¡ìóã ºÀ5ºÀ ]ÔâÉ7è×è×èÂLœxñe¯'‰‰£­2÷è"ú8Q™çtO颺è‰Ê<§ \£ |HDÐV™Ž.¢K7èb»(C 7è×èÂŽ]kã¼GeXÌØÅVæ<\j¶?xC¼c÷ý¯/?»?´ÖºB¼ƒ“íW!j8ÙþÐRR›x'ǯÎ?üOþÁ·VøðòûíûZ¶?´¬ñòa¶_m[¡Z¶X/ßշي넬Ùf b:cè¶Ýü€†ží-QJ޼  íå=iè9þ`Žüÿ䯰+éúA±–Íþ!p&êÐh_6y}®µöñòÅMäIü—/_•C‘rN&Û¸x ñmÊf±Ûì‹-qKÓ:ÅG8©-ZN¶¥g6'… æg ëBúdV”r.hq¥°>ãDa­§k…œ),hqCaÁVØ„d‰+…¥‰Â¢ñíZa[ØJa½õt¥°þ¨é4*¬£àµ¸RXÇd+¬ hü¨°Ö.E™Jœ(,AL…uÉZ6ƒÂîtaìeŒyv+‚FÉPØèÈëE;(ì®´Ù¾Zè0iñQao/o(,ø8ŠIà{®“¥°^TM,â4UXH¶‡u´¸RX—y¢°žµ¸VXïg k¼¼¡°ÞTX 9t4WX˜(¬%n(,Ù ëØúöQaOS©µ¸VXŒ…sä•ÂâLaÑùNacž),YËf(@w¡°j޵˜ Ë‘ƒSß®ùïÖ’!.õÝ¿ÄÓDßk¯g->軯›ESßÉ£WúÎ>\䥾×"$†nJÔØÖw’/oõʾ¡ïÓøüž²bê;hq­ïתëô½¡dŠ+™µýòJßC6Óþú5?%ê̶ƒÆˆ†ø}}'käG}‡4Ñ÷Ì‘—úŽ Lô=˜ËæÇäåG}o…‰.q¥ïÅ‹²‡½Î\[àK\ë |6Òúî q©ïð’ä[j»^´c%×ý¶©ï¢Sç%®ô½ìÎè¾ûZESŒ<Íša9˜è{k‚&ÄUMfïãDßÉWþÝãLߥ¥ùñôAß!³õòZß}œè»KÆË+}'´œ⣾Ggë;´¤P!®ôýÌ£VúŽ`ŽüPM+›#/õ³‹hŸšâJß)…‰¾;?Š+}GL¶¾#¨‘ïõÝo9Üçi üw7•A‹÷pzAôvÄÌ·ÂÂB|äù²!°“Œ½¡qj¾}¿Ö÷ýxâ|ùòÆSž?Ðõü:Lâj3}o›P!nDÌÒLßQ‹p4y¾}²ÄoGÌÈxº.áî&!nOÆÐ鈢½o]„¸q‡YÄÌyµ³ x4G¾Û€û€<Ówo-›Aß½ó“÷µ»Ä__ûtU™#z(Î^ƒêéªR{q%¢~]_ñ²´B\>ýóK¤´Û:sÿ´¸Ú¿Ç0‰7¢¾Ä•¯IÜlíß±Þ|kâó9„÷nBܸÍô§$à&ÄïÜö)KüyÀM¾üý€[Ȇ¸¸åYÀÍxz§ïÇÐÏnÖË àÖ|§ï°—Œx3àÖ-›1BNþ½€Û%®õÝg$SßE5£hø(ÿP˳kñ{ú~h¼×ñ:7 °·¤‘K\ÇëÈÙñºBAˆÏì~æß=jq­ï”g'b Åµ¾[%ƒ•¾?°ûNeÞ°û‰¾»l¼¼Öw˜è;XâJßa¢ïÞy`“#lsâ }ŸÅë&#ßë{bœé;XËFØaâß%”ÒDß]æhë; ↾ûì­}=X÷Zü¾oçïB|ìÄRáhŸ'õíZßË;fƒç÷T§ó¶Îßߧͬ9&sgx…>„¸nf`vµøÍfÖûœjq•›& ±WJêøí2§4$»)R «’Øøí]JjJ“ë´ßþ~3ë®÷øíòéyÖ‰®dàKüµþ§LˆuÙÕ°‡¦HÁ±~ù/_¤xÍ IÑî¦ ÛmÜ&>jF­ze¯SJjÞµfDOÙHuÍ){Tâ}3ëO/µF}Ôu̸ÖG ì ñîÒmmÄ‚Ö=Û²­ç†ø¿Îoü ôS-§¥n㆗X&4G{âDÞk̉ÌnI„Àž8Q½^¶6¯Û ÀöÄu×màX6c¿"÷a»‰ëbœÁÆ.!6•Uf' †•WT…È<ÕR!Ʋ ‘ùšÉìLYHeäüdâŽ;»P&ÞïA§þ2/½äšÊœí‰“ù´þlG5ôT‚Œa2q©E–¨ÖC±îá kÕó†‰êÈ3S¶lnƒ9q}½±ŒLÙí¦-ÆÉĵŠ_X†8¨|ÚüRÓê!L&î/Kž“·òi³èb6NÜyå—ŠÆîý¤ú»ÀX&4¶ì¾aâdÞkrG†[×liËœc²'NäÓsêÌ»À¾žãÚ×÷¬ÎÁ̧%œh\8ŸEغ|ÚÂÃâ"ó0q¢dàI"Ñ_Ê’Cˆ“‰kµ¼<_ud¢íVV fwfÝ“xevé¸õwñœ^|;­± ­± ­± ­± ­± ­± ­± ­± ­± =b›ê{#-þA¶¡ÛìI¡ï± ­± ­± ­± ­± =b›z›ÄYâdš±ÍU%õM¶¡5¶¡5¶¡5¶¡5¶¡‡l˰d{â>À64e›³\Æ›lCklCklCklCklCÙ¦&´N&îlCS¶‘P:eZcZcZc^c^c^c^c^c^c^c^c^c~·!×oÿÙb›=Î 7؆'lÉ£Å6èZCçKü&Ûø—P§7Äï± äbÁlÃ/¾dÖ}…hëð&÷¶ágqÈÜyž± A¸Á6À6ümBp!Ù×WYmÄçlÃS¶A«Ê xòæÈßax)Æ"ãLãÞe›­r £ÉÄÃ[t°Š´äºOÇ5¶Á5¶Á5¶Á5¶Á5¶Á5¶Á5¶Á5¶Á5¶Áµ3)\‹ÛàÚ™>axÉ‘ÉÿXÜŸÄmè¥lE¢OöÄ}€mpíL ×â6¸v&…Oâ6¾Öxi}lj{·Á'q|ÙZmD{â>À6¸v&…kq\;“Â'ló)¾” …ÙÄ=Ûà“¸MqÐnr°'îlƒkgR¸·Áµ3)|Æ6Å…03•Ïã6ø,nãˆBOklÖØ&¬±MXc›°Æ6amÂÛ„5¶ klÖΤÂÛ„µ3©°Æ6amÂÛ„5¶ kgRamÂÚ™TXc›°Æ6amÂÛ„µ3©°Æ6aíL*¬±MXc›°Æ6amÂÚ™TXc›°v&ÖØ&¬±MXc›¸Æ6qmâÛÄ5¶‰klר&®±M\c›¸Æ6qíL*®Iŵ3©ø€m>¥â†ä ñIÅ'gRPü{zÑ~˜mâÚ™T\;“ŠkgRñÉ™T¬½–‰p2qÏϤâƒ3©2qÅÎBöÄ}€mâÚ™T\;“ŠkgRñ ÛÐÇy¦qÏϤâ“3)_;Ef{â>À6qíL*®Iŵ3©ø„müKе~Êd➟IÅggRŠ >ÔŸLϤ2¥}w¬LZ\Õ9až@OkÁ&Ä{êŒÐs9)!Þ_wÞŽ@ü'»ïÀ¥ïÝËhtrF#ëåG4Œ[ ‚ÉÐude.ØÌ Ódèì¾#3O†NvVŒí­áã8tê¶úå_ëʾ‰wC]›˜K²*H‰ù"ÅëÍÄbæIÝx¬Íëc€¨Å‡¦HµÔÇnm~þòOW?%ÓuµPŠ«r&Ñ®P† ÔËk0+±™‹ýøõ¯ó³<¾@tI/›ß Ym?Ûÿðû·W‰«3âßšøæŸ³×½±L ³6ã­ÌT+]SJµ¹è诶Ì9=V.àÛ6b壮pŸ—=>¿äZ’®õ$€ÊF,艫‹KÒ¹ã:­/¦Ë6Ž ñ §œ¬ã¼„梭‹K‚b&/–}†ñò#<–µíM^L­ˆzº}q]‘­ÚeÔ³¢J¿÷õÆÄÕÅÕz.”-Ãy ü­‰Cq~ØÚŒJqÁžP¶Bž½ÆÍO/\–ƒùôº¸Óæè¯Ú> J+äÆ6ýªûÑúBd_öéA'J•ÕI‹ï‹KÐ_/Ö“„RQ6a0V”æ£mÁ·žV«% ÛXÉvTàw]Oòé•ìlc•ú°XL[lØ|èUßVb¯¶q¬§tî& |ÓÄX5(­?‹m=5(-›Žcuu¥À@ìè“nWQ¼>#MŒÕõª¿‚¶žjΔ'Æê"_W¬U[u?Z‹P¶ß‘'ÆJ6Ù»ÛìëI@)ÃÃî‹«;±<7¡R¼¶là 'n_\Y¬-dQë£òìÀ6V}¿î”mÔ`ÛXå>Ì‹Ÿì6ZüX\WP0–­LŒ׿¤‰±-5ÊËǶž®?„Â<'Æêú—½DJ©—YcÀ‰±ÛäæùÚþ$gƉ±º~UK*'³UGñîY ]xÌó“W<Üàù°ÆóÁæùZoð|Xãùð˜ç[gÞqè$3¦<Öx>Ø<_V7Ç<Öx>¬ñ|Xãù`ò|±5p4Ãz›çg‡È­Ò žŸ"§ýÛßãù`u1ó5Xy„:ßæùð„çá%yŠl=ýc< ž‡ZTÙÜàù`ò|Yùχ5žx¾!ŸŒ§ßæyß* ñÛ<[§6twy¾–­MlLÜÇx>˜<¥<ò|’ÍUw‡çcM™«ð|Xãù`7€ …èó ž3žgJ7xÞ<ß#¢wx>˜<_oñ|xÆóe1µ@ëh¬žó|0yÞ#2¤<ìîuõø„oð|Xãùðˆçë1lÒvþÏS´Õû<àÅÄXÝàyŠ`b¬žó|°x¾þ.{ƒçÞ¯+[õûÑX½Çóuâc+__ÄãÏÇ5žk<Mž¯öªH¨x>®ñ|\ãù¸Æóqç£ÁóÅ"zðx'>×x>®ñ|\ãùI~„Ï”ò žk®ñ|\ãù¸ÆóqçãÏÇ5žÏâóH98ãéäùø”ç¹]£nC÷Qžk<×x>®ñ|\ãù¸Æóqç£Éó…ÚÞ‰ÏÇ5žŸåœ`LáÏÇ5žk<×x>®ñ|\ãù¸Æóñ!ÏÇ mcõžÏxþEöÕsžk<×x>®ñ|\ãùYí¾òp£¯Ða®´¸æù4K2–'b4çù4M2Öâc{}šð|"ëåžyÆó‰'Cº<_S¥x6t‰Nòm€x2tw{˜æ(O†.ˆdb¼vR#Ïgž ]÷ò<áyÒóþaž§5ž§µ|ZË·™ÌiëZØñ|uS¹ŒKÅïæÛ¼ [ņøÇòmè!ÏC¡UëåÏ—-Kñ‘`ñ|qÜ-·Pˆ0߆ÖxžÖòmh-߆çÛø¤ì|Çóµ.%ddº‘oC&ÏCôáÏÓZ¾ ™<ïsÚo¬t<_ö‡=™«îJßî·ÅD7òmhçiçi-߆Öòmhšo“qäyïŠÂB‡Äô0ß&Ç01VÏómèÏ—5OæÓ;ž‹±5x>…Zédb¬žçÛÐÏÓZ¾ ­åÛÐó|›Àc•Ï®îþó|²yžs”Á‡)ÏÓZ¾ ÙÏk<Ï6Ï—i¿š"½Åó¼Ÿç5žçµ|^‹Ïóã|ÕÓoóüŸç5žçµøÏy¾Õ»Õ žâó¼Æó¼Ÿç‡<ŸÊ‘&Æê=ž×ñù´ÆóiçÓÏ';>_D™§<ŸÖx>­ñ|Zãù´ÆóÉÌ·‰1å˜oð|Zãù´ÆóiçÓZ¾MZãù4+ÂFûý÷wx>­ñ|Zãù´ÆóiçÓϧ5žOkù6içÓ#žßn¼2Ôæù´ÆóiçÓϧ5žOk<ŸÖx>­åÛ¤5žO³|›‚¾7x>­ñ|Zãù´ÆóiçÓϧ5žOkù6içÓcž'cõœçÓϧ5žOk<Ÿxþïï?§}À€IêÅË$-®°®¤‘Ô” ñÛ·õöMWçLñÛqBêØj¸‰—WØ~$ÿ«¢~ào0€ äeBÙºÈC$È÷ìsèú ­Î“ äm/Ó½|äEcÙr@õí¯õ?%ç¸×=è‹úÕpRY¶~/¿âõ(’Cðj'ˆ‘µø@Ô>8§Ëe({SRß®ˆºøg´Jÿ•¥Ü®]\â=ùÖtt ë` 4Ä» em¸­’Ø>¦J¹úh ]_»8¼Æ4Šì¼èÐØ3CälQeÙDj•é©òsÍ<õÛ¢UQbý•4"¿]–è«ëæ,Æ%¯¦¬”m‚5týU ñ“.,\H=!Ù‹V„:ËÏŽÚ¼}Y=— òMm;?‡˜ËêÐȵÅç!Ø‹¶¨tæÃçmÞ“7­$« f*ó&JÀ ‹6µU!$z¼gFž,Ú$ЕT”ÜmØ‹VþÊc¤kLscÚòUèíEÛ¥Ý&¶éÛVhX´‚mø¨å¥écŠ“E+t!#2æë'‹6Ë]¤×þ}'6'4®9h\sÐøÐAo_o‰ÈA㚃Æ5kzVAÎwÇA㚃Æ5OtÙbQAê¬ÅG]‹±ÞpГpÅÐËòõSkmMi/áþžƒÆ5†ƒ®U•È1™š2-~ÛASÒkþÃ:hÌ)€½h?à ñ‘ƒ~áÝnbV ,ÂzV ¬ìó k':Ц2ï9h\sÐh:èB@0©<‹ì¼½hï9èvéc\´Ï4>tÐ.³tдæ iÍAÓÓt lXârдæ iÍAÓšƒ¦ÉºÜpдæ iÍAÓ /…9"->8èb“\¼á 'wF<_EÔ{]\/+ñÁA×9»;šÖ4­9h24Ô¶Ï‘ÁtÐ9kñÛAOÜXä¾JÎh9èX”%þ1Mkšž8h_Åsðö¢•eæ!Ýpг»Ƀ頋 ‹³E+te šÖ4­9h²ô •—`:èªLö¢½å !Cš,Záa={´´Ïàx²h:è?ÿõmâöfWJ¯¡⺄;ÎJ¸#hñ¡‰Ív¤öé1B|¼RÏRV"X/?–ˆ¡YÊÊeiÇ¡ rÙñäJi¸ÀCúM‡²ÒÐhºÐÿ|z§DÌ8tA¸ŠéÓ;%bÆ¡ëJÄøY‰˜¬Fþµþ§tã6$ð.ee«~ŸÔ¼ù"Å‹çpF USã–¶!Ļ̔:qà“ŒÂ ´ø˜™BÞ,þ²e£ÄQü÷o?¾ÿõwË qµÅž‘Œò’ œè5ßçœø‚F ²ÓG§¦x”QçœøÌœô¢颌|ppͨà†â'®S`1tcÒHu…׌ ºHÅRg->ÜÝ,––“N)¦*¶þ2R\2È®1FßÀ-$«§µX`ó°ÇŒ¶°D$vÁºNʺvgKåo]ÒHYt>âÂDðμ•YcÂ`Îû²5O½~i°M-²£­°²¿_QL3m£hrž(là\Àެ “…i¢°’m"æB%ddm*­ìŒíPÉJÈÐ.ò˜Þ+?»|i\‡F„8NV¤m„“ÁLRÙ¢M¶•3ášÐdä]Ä-kd¢°×¯ÊÈãvÕhŸÑÜï.ÁVØ.q¢PÀ5£âüÜù¶¶»¿Λ)!f°¶Ë@‡vJ„áa­z$ûåý}F[×Î1ÀDa[†BAÒÀFæø€ÚÃŽøæk+-ƒØöAœ(l{H(¶Ê2º–¡âÛñ×ÕÝ-КGr®qݬ5OYt|ƒëpëð×U8 <º{­y\š Ýs®›¬š¬˜ßþA®Ã5®Ãg\â÷¹®ßâ÷¸®.§ Åos],棸®ì£“ÁuÅÎ;G†ø=®óµ!`2Ä{®+¶ ù×áסÉu>&Ÿè×á¤gbMã»Áu8ë™HÁßà:´¹®¨±âºO/¹Ð…9ò×1¹,Ã}S®³»ÛäcJŸŒ–‹TöwÞVØp>㺚o™¢­°7¹Îzú}®Cô…}ŸëŠ­…m#C‹ë\ô …}Ÿë|+3*lODù×á×™GZeußà:œrÝñô·¹§\'gtÊuö‰˜‡ÚÓà:Ÿ=9?QØö+ ü ®³;¼@Y™\ç2Éy§5®£5®£5®›”€«ûwºÁu´Æu´Æu´Æu´Æud^1#ò>ä\Gk\Gk\Gϸ‹ïcÖâä:zÊu¥µ¡5®£5®£5®£5®£5®#“ë Ä=Ëë=®£5®£ ×oWÌÞã:Zã:Zã:Zã:Zã:zÈu!¢5ïä:zÊuÐÁ ­q­q­q­q­q}Z6r¾Áu´Æu4m¥íé×Ñ×Ñ×Ñ×}ûû»}»Ÿ¤Ú\ç/)Ä×…¼ÓÅ÷¿¾ôÌä¯ã{!®ó¬RšÔ@ãéšþpÒc›-ñ‘þlàkP*_^çY%ø6× ñ‘þÜÁu ø0ß¾ pwG_Ž©üGëåU§4Á–gÕ|߉;ФsŸ»ê×uËfÀBçÒ$M+¨—}ýÖgceq­Rü!Š+—x…Ûqž ɨÊ\£ó´º¼Ÿ¯ÐÇ0ò‚¬Êf@\£Ž-a&böÉy™$–÷¬NMl˜Ú#/sÁâ~ª³¼ÊªK“‘ #ŠÂf\Ûñ4ÏF>н YdU@ÌöÈ'iÐà8Do¶;ŸÐyÉ_€ìÕözÙ1MF^¦’Çd’Uy+o¼³ý`’·J¡ãÈ78¡ L•‘k…JÆ‘oY^ Б=e£@ÉùŽ€"éKÜÇ NF^¢‘gçÛÝžc+Ò2Œ¼|zí aCO#«aäs¯d'‰y=q#¸”Q®y =ãdäE®wÕ+I,Xkà Isñîa¢‚“äBüƒp‚Ïà¤2²Ä?'¸'8ƒ&˜F£´¸‚éœàœØg‘õ(øœàœ  '¾ì¿ƒ'e+ü(®à¤8èÃο 'hÁI1‰1ºhÃI”NÊ<‹Ü’?̘U=ò N(f™S*›êÖw'¯lÞ.œD5Rí‘þ=ç œT6ÉöÈË “£pb&ba#Ž&œsh|ì²÷[6o_ê³%ÿ#ßà¤VQ‹F<¨.: ÉÈGAÔ€`¤iÕ»}³5/áyÉ ¾£J´á2Ä|NЮ–™ö)úÊöÈ÷·¸L8¡§G¾A–åaÂIÍ»›|ƒ“˜0 N|mda¼ÄØcVœlc:³6]܆2߀“ÉyW·á$»‰µé/¢Eo‰ïvR8“àšpÃdäåc y Nª â´'ôN0â„z'õ"Œ)þ!8¡58¡58¡œ¤7à„ÖàļàVOÔ\¤pBkpB8Ad#r²í­¥ƒ&NÎÞ:ïÁ‰ÝS)2r`ÂI(;-ÞÃÉvìxµhG8)vÎHi9 X<$âœ{ƒœ Ö z{ä%œ€dÁ‰ÐNjý¼pbŸˆq¨ÍPm8!JöÈK8 &9L^kœ‚ÈIÑqWhù'>¡Väf¶G^ÂÉ¡° N"&˜Œ¼Ä`º'vkžÂÅÛp’Û#ßÝŸENÐCšŒ|ZXIàeä8¦ÉÈ 8!–5Û¿[8Ÿƒ=òƒõL8aâ`¼Äƒ2vñœØ‡JeÑyò&œx7ùNv42Ó€âdäe>—Á‚“Bú™'#/"'¼_hUp"wR¿ý÷ÛôXǃ'yÊK‹wp²5lÌ^ÃÉfײâ N0y '}ÌJˆk8¡¬áä¥úmŸ,ñᡳòx¶ÃÄ ÈåËK8Ù®²‘dz•[ÊÖ·K8)óS;3h8Ù|×U·Pˆwp²—|D '´X×ÁI5*‚Ò[½cBs䜼€ ‰Œ1[‡Õ«'r·l~ȇº@´á„¼zù¯_ÿü¿_ùûS»Ù‘ò›îZ¾'Vâc|¥lÿ9k8Ù²óem„¸|H- gEèßÿüÖ‹7ºâéP¨»Ðí_í"‰!/?îùu:‹(xýt}vT,jÁA‰…Ÿ+]ø³7î¿~ùwËö)Ûçö¹Ä÷ù‘WüÝÞ¥td›ò?GòúÛ;„Ùöª¯)iÙ>± *CWçG&õdw Ñx\T̘1ïu~Ú¯BdŠvIç²=4ž>¢Äm¡k4*;`0G¾c›J¾F"NYu!%C¼ÎÏu½¸ØTFž …VqbP™$y>+¶ÙŽÊ(­2‚€€Ï°O’>GÛ:u¨Tž‘ðš7H¨ µ(ÏqR90š*Ów-ô -è©›&*#J[™Ú”´ûqŒ†¥Ýç§?; ÁB£z¼œl•É}Ú]S"+œ¶Êtâ)Ù§M„m•dUûÀF;좷U¦ÏÊ™…}8ÍTF Ñáe†T˜cê'*#.¸eb1ÀæÑÓV©Ý“På÷Ò"â ÊÎ$NŽž‚!ÞÔF&%-¢yô´ñÑZ?>ø`‰Ñm€"ãåUtçè27TD´Ä{€*V?Û•C6ÄG€*?b Z€nä{€òƒ P.%sä@•¥‘xVÞÑZ6=@g#º³eKg?еqoD  RÍâÅ5@•×y1ûª×/oT6 ZpHˆ9Ùζ@}‚—š`gˆ+€"o§a·¼˜KÜhÐ`„}vŠPC§ 3x6вS/¯* Á¨XðÄøö!¶Tó(ᣠ½ïjÿ¢•G]6ù@Z\”)_NÊóÞ'UïeÉL€âÑy P.'gdò†xPà$ Š`[e’|y :­f÷ãl•‘m% AÙŤ­:øbÎÑ(_0“­2@y À¡©2CƒhG¬'*“„9ggpÒOj¿WcT@$[e:â#êm€Â@ñ¤ò@èvºhÖ½?eo¹¬‘–í+©ì:ýïÈ%WDðL¦b%÷þѨ\ÓA˜ ž†±È Á¹¢ŽOËw2 øÅZâ„Ef6 ‚…)E¦Ïc›Ef.+ †Ýjï´™4ªó耪m“±ÈL Bž`pÎ»Ž±ÈLç;”[PÌù+a­#,2¹™·Æ'âÙ€òXd&Š{šã\ –4ÇiÊÚà°Å./Df(Ùò™zK[Â;¦0Þuihi» ᕇh@Ûž5\P6·8”ð@QN® (ê3aÇ^¹Ãpï|4 (£o—T±ay Š²³èÛgªØŽØUKêÀ·KÊEç å%´ò³U+e¡U‹!áʨZÚ„e ²&{BŽŒÌÌ >Óø‡Ç ê³Í#™ð‚ÆëŒoEã'3^ºÎÖÌeƒøÊ*ÄŒ—.Î>}Üù¦¬|†K'R^,˜þUÐjéz¯èZ;@€ÆM±ùcÂK7‡\¬U4~ò¸ÇK7ÀËìô¾ _@°Å‚ÃK7Ó¸q°ö¹(›—nv˜Œ²QluýÅÅÒõ˜I¬Ò!‡h^º‰/Ù¼h|±t㤩À§f¢q[Ý;q!°3ŸcEã^ë:”5á5)-—®Óx1Æ{Ñ"œQó2¤ñú —4ÎñtéKw&¸¢ñÀyq Üe8ƒŒGÕ>åÓÇ‹Í2œA'Ô•NãËK&Ôš xyIãEñ&Hã)ðò’ƳiœÓ0 vÎÀ㬡‚˜àʥȩXy‹Û¸›™Æ[¥“J¨,T·N¨ ˆÆ%½tšÆëŸ·qàBXuÖ‡¤qË/Ù:#€KO&tÔZUõtˆ6XDãÑG¯6NÞÆ«SÜgDã6gïðÒMc§’I7h•ëTïsJgψƭ­ãç³Y,Ý\qœÞƧrËv~ª‡úìÀq±tíW)–kQB4žyÆK7ò%5ä?£qäÒ§Ú'$R4ž^¨ðk`¼tsUN€I¥µÃM€K7çDd˜TjMm&¶Xºî¹/oŸ¤qG1à¥Ës¥y¾AãÓx°‰¼¦q*×qï,^º¹! -nãÖf¸t3›¼h"’b^,]/«‰±wÑùòçÒ©üy+“4ž};Ú\Ò¸¿ ”S½«´.iœÂÕ UÒ8·æŠ\Ñ8SDNuŸ»—l‚ ¿ªr$3„«¬sÎÄ”Nußoe#|¦qç}Š0+œOWiG¢»¦ñb8{´ò‚ÆSʘÆc øÌ+?:ÕùT*€Æ{UÎtlfÏÆâÛ8õxDƒ#§º9²æ¼€"ÖÞª§+Μb=Uóžcp4||H!{W û G°=È9Àçò—Z‡0Ô?N5¿ŽXÃU·´c𓾦»î`lpàzWåéœoPn,D>Y¡ŽHòmåÇŽ".ú€W~L> ›,ªæ-¦QHxåÏ}‘ëŒç8Òg^¶¤¢v=ÎË,²èñÊOÝÒçe–Óèòb凙˜Å:·:­à1¤.ØÅÊ7_@µ<ɵ•OSF¬óxåçùNç·‹V#6-Îü”—™ž/P+_ñʧ!˜Ró­N‚ðÊOÝÒ†jëɺf¡Ê•Lt”ͪ„"ˆpã&$Q5}ÛÊ6ˆïY båÇ캼o²š·¶&Æ+?e}-tëêÕÖbåóèfŠÎcã$kyG5¿ÉãPA÷É•Ÿâ4i}liò‹•X>‘ É² ¦øŒ»“سÓpÝtÞa/ÌP^1À• ÃaLáñt¬ƒ)×zãûXÖ .M˜E0…ýh,ƒ)W4Dš0åBk\˜0Ö†)Xàå… 3”WHÆSF+/M˜qMçÜD W~¨ ©}Y¼_˜0& c#Lqqm¹¦' Gŵ6 †kA”„kÆøŒ¼0µ¢< ¿gÂ|xɹ§y ðÑ„‰/±6ŸQ–¹uÚ—&L¹˜,¢,Þ¨§ëÚLV}ø˜ôÊ«ÄÇ¡Õ& [ŸðÊO¦þôŠK¦ª!¼ò7¼0éÑè¯|l9+.± ¸óš'ôòjäоձ6æÅÊÇá>lRD&ŒK`ßUqGŒ)d„ 㕟†þdã  ã#g¼ò7LWì^JxåS3Ûk¸'[h†$¼ò“ ãn ËÁ¤ÅÊI+É¡y<º ^¬|ÕN š0”ÍBÛLþ6za<¹…¶¹aÂXO6/ÎüöÁ–,ÀׂÃ+?™0Gè˜0Ö­V~Jû0ЄylÉbå‡)Û© |úûïeu†IÀ säu¸Nëd\a»wt€ëê ¿Êi\›0‘puFn\4Áe>H¤EuFfðò*­óÌÈPi½Uõ—iÆá|b€¥S Ö®þl*­³÷®™V^惴„iÂ46˜W~ªÎˆlh•Öéѱi9áòÖbv«}­ÿœªX³s 'ÞgõtÐý•£…å­ìk¸¨b-ZóL°_«Ø6©\·¬†ËkÞDa*¦_gƒ.Ë[mfaŠI¿¼7•ÿKÈ=ãlÊêéÒ„©}wRß’±¸#e­m´Æ9ç ãLŽàÛUt©(\õ¦›í||Çš²RÏ¡8T¹í§ás*„Lžå­œ:™³ÂÖä…Çy°ò“D5¹Ù6¡¦H;,2#Û§˜áØ&ë,™±³½³CO¹Á,2SïÙ|&òŒ¯UL#.¦a‘Må)¨ê c±ÈLå­ãÌ)E',DF4Xcìݱ}Z“™f답-™&âD»ÑÙÞ/œ81c‘™ [Îg“ittäuXdÆ„›òÿÐDÔG„ ‘̬jã­úƒX‹EfJ¸9º_ Þwm@¥hòî”C†[U¼pJ‹Š—<ª‹eÅ {‡slzõå×/!,L£–:7ÀµiäQïYëÙxàÒ4:áÊ4J£qòFÅ ž!m2zyiEr¨êÚk¸Ê±Ifaõ´Áiå…iäÒ"U¶Ï½W~¬x)Ö­ W\™FÁÓ¢â%«C«M£sl®jŒ_®ÿ¬ž®M#¦ÑP8À…iäc>3àiD.Z§¹²q"Wµ=ºO×?lÄ3ÞªSZ§9ï‘iÄå@ªS'M£T;Nzm=bƒ ¬üìÝ©V)ÁŽùMŒ.M£ò‰™F.Y+L#Ô{¶ŽGcM#~)ª*[<Тg —¦™…i\ùÙ9Tžm=0ŠMõ¾ ÓèhîKÈ4ª y-™ñW6¥ M#´¶¦ÑeÓ¾m-ª}Š>Œ(ð•ÊíŸ-™¹óáÜù ¼l–qîNQ),D¦›FÕe¡iTÓ˱Ȉ¾ú¸á~ìãW„ÈL¦‘µöêéQK¨°ÈÜ1\Ñ‹Lr”¯2|<Ú8eãÕPë4›"3fø¤6myòÕÎÃË/«ˆ¢!lM—·ô9ì5âÞl€+Ó(ƈM#›£†ƒž(ý¸ÆòÇKèUD¸«,E –NWe»¨"bðtå5rqÑÓ#Dðt•»ã̢؎ü¾ |}Å`OW~0rýt·ª" èØӈϞ¶Ú4oR›Fb@ ëImÕ=­Å"“æê1†¦‘ëY’BdƇDsfÓÈb‘û™„««Ùhù.ßd™É4J‹´fâˆEfnŠ-㜠èíBdzêO9³{‚q„Ef4’Ïv‘½™<×,&hmå±ÈÜ0ª/‹‹LoŠV¶‡"È:xb!2sõ˜Ãa·Ú:}!2ƒiT³â>À>)±taÏe@-åEuI pi…äq¿ØZ¶¤á*'È®L#ê3;ün@Í›^«:ÁeNaӈɸ2’…Öµ•^pa¥L£ÓM­áÒ4ª5L8'¨;Z§•W}RüÏjóÊ5§5Å…]Ó±ù.š¼ä…×h`zÁAN§ƒ Ëo¦vgÁyuê~ùåÛX Æãj/դᲪ„"²¬ba)ÖðÙ4ª½µ:þ”‚†ŸXóbŠÈeh3™Þru€ë®²±ÍÔK-\Ï5²†¥Yï¬ð9¥èjylܳ=¡IlÜd@c4'¯‘óoÜ43(#Ç‚±ÐÊÏTä-Œ´Q"‡7®fá‘÷-+ÓSÉÄÆMífã²qçš×Hnܘ´E!¡Œ$Ë}R•ܸž‘ÄÎß6nôFUE€7.Må„ÁaŸU¯7W` 2Æ?8k7>$ÑU0V6y¼qÝ|ãb\VVÛbâ›»úgœÐDÁ¦ÅÆ Mi³sr²ÄÊÅÆõ„&Žt¶7¬_5fL‹›ì¯«á«rf’Òæ9“‘ÅVŒÒ¼Ø¸É|³Ža ŽÙ.Tå˜NeÉ.RºûP±qÓË“Yt«šetý|¹ ánµÔmZ¹qyÈÝä‘L–mîBðÐ|s½ÙíWíþùô¯è“<]™o&®ºÕŽúøÙ _ѳÆ"¸4ß좰¾× Œ/¯‚~§í©ºÕ¦ä\LÃ.¦à_ìè¸Ê‡òW¥•ÿlD+/Í7ãô›W~ ú¥œWùP“ ² ú•¸ðl%«–˜oœƒ6ß^¬Q¿¼0ߪ38{Bæ›K½&n€ËÄïêʆæ÷®.ò¡(^ÙsЯ¼º%¿g¾†·†+óÍ>Ž6ß8Gµò`(@LN›oG]ðÉ|³®œÙ„Ì7v1¼qSùýÕêMšo¶O®7™o‡ñ¨Í7ž¬~†æ[õc0£h`±úMÀwÏ|óŽðÆMæÛqUæÛ9‚t±qqL`´šoÈ/6®ý*§j»Bó­¨JÆ79Æ<åMÞ¯$.Í©?pÜ%g‹ä]˜oņq(f˜¦aÏwÏ|cvxãÆ_…c.‹6ßìä á…ù†l¬1½&ùÛÅÆ 3Â1Z›oE7Ï«´Í·i±q³”4ßlZmÜø«tT| óíË/·ÂwÏ|æ0ßLŽØ|ó‘7Þå<6ßú°¹qÝ|KLvØ·6àÃh4p—y!/ÒÙ¸Ngna¾¹¨á7“5Ôk!\ X´7Ì–ÀËËq—&â¾HÅ@@ß.¼o|MËTya¼Ì¯“Ží ]0­¼jo~˜œW~ Læj¦-r¶²EÇF&¯Që:}Ô ËŠ¼+3E˜oåÊáÔ™×æ›¿rs¥ùV]Î.½oE›ï[µß E Ý“¢N{ßÒKä!®9Àù†#–…¦\šot\€ù69m6ßì9ì\{ßÊÊY{$¿äÚù zß(M*Í-Ì·šµ…Ì7öÁ0޸ɺzÄHó­6 Æ7dvQ Ç+ó-Öö„ÆÞ¸Ù|ìna¾E¼qã˶ÅÞ7ê%rãóÈ,Ì7£µjíHæèC+Ì·#äiñƉA 8cÌöYbãf'h¾E(ï¢wû+•4ßÜK`Û³¦ÄÆ óWæÛbã&óí(æ›ç´Ø¸q$TN{ߢ[I\jÓ£ch¾qŠ ‰›Ç]âa›å«Èá›, k´¯2ß–—'ëœ-xV]ãw×|#¼qSÍb^™oN¿<0ߌ]˜o¤2ß<…žS÷e<µgö²î º\pá}+Ë‹ªϦœ.Í·rm^˜o}NÃWæ›·Èûf²Ï- 6Á…ùÛ 6¸jkyÌÍÑÓʽs`éä°Mò– ùVl¯á*xê³¢rèY¬_pðôÜh¾Ù8žW~0ßè!üÐ|³Ý‘1›yئs‹¶–Ü{36økýçh¥=òˆeE©;2|nB}Þù°¬<²Qÿýøgv^,3ÿ¨]¦ ž>¾|±¿<çUO(KVÃeúXæ˜a!wç]ƒëQ!9‡ì/FnðÙ}–¬ ܶd°.ÒÐ{xyÙ7Ý0ÞcNºŠ^ÃŨ)6ù̱©[2>½XÎAÃçT&sÕJ|™,«š´•ÁÓÿÃÎ[Lª2ZUêæ—ÅJK°Ó‚u–àÆf…Ãß­ceC#a‘§ecqO¨êÃ"“&ºõþê EÎ3™ñḛ́ߥљŒEf0 Ø^ƒ®TK)BO×™õ„ý_¾7–"Ó ¨Žé zŒfaq¿™n@‘ ©mÉhÔ5Å"37–$='ëºpa‘ÉS}í"3û¿¬Å"3vmˆîœÒ5¾üÇ—ZA-™ÉN ÖãF ž<™9³ÞÃ݆ÀdÕÔ ‘Éc@#2Üà$(p^™FÖáv™1W¦Qia…¬ájùÑÀ™Fã©[&¯ØžH¹/wØ`\ÎßòxŒf=àå¥iä\†¦QMpayC0åžmʬá*0™W¦QøO+/æ‹«k®ü`Måöl•{$¡c3›Fìΰ2z§÷—¦Q¡QJšFµº„ Ó¨îOÌþƒž¬U{(XÖðÙ4*9»mŠù[5Àiä¦QŽ®ú10AÓ¨˜lA‰Œî5•xÔóƒid†ìå/‹Èb}F dÅ£×//M£Ú‡ ™F6{K>›F™Ÿ>ÅÉ4zXËÆjø<ä«f\žæ0ÀÊ«¦š‡/MÿrêéÚ3ed•·ònÜdêB™FnXdFã„Ò"™~h'Dff\ü€zMe™4–ÂD«§ŽÐKH>Ø„EF˜F‹q$”"3™F¦w˜L#g2-Df0ŒšFÅjY‰LûUípf­6ªq¢Ã"39‡²‹Ú4:Jæ=™1Ë]~ti¹à2™þ«¢kÜyxÛ4ZŽ. ä´it¤n'(2bæIðÐ4*š’"3šF‡²RÊ-2 +¿ úeÇ0gklŒ7À¥iTëöp£•Õ*èÇ>¯L#^^›FybdÎÁ…×È3nÔà{Ðñå¥iÄ{ʧ{¦‘¹º¨ Óˆr=f« Ÿ·Œs¶§ˆV^ý²cl™Ñá†Ûp¦Ú(ká5"ŸÐ±™M#º*1•idZ:a=Œ#ã¡id-«C«M#²¬M#záb37h‡M#WÛ9èœy['Vø¨á÷½FÁY WE‡ŽpÔ.R‡VO>3G¨2ŠÙ‘2€OQ»Ú¨*Xh92`édØí´ë´i”&óÀÁɦ)ÄxæÌÏ^#[G# ŸË ¹r‘]™F <]šFc½ÿdð%§öLT;Fá)ÓˆÇêãiã&Óˆ)f`UGÙa‘Í€ÚÔrÏS"3ý꘡#M£œ¡„EfÌš¢cš‰ »Õ´°ÈÜó¹DXd&—×Ñx $½gë"“†£]‚¦9Í2Ò4âÌ.:ì5êM…ÈL†Oúº|YÄÍŠAC€¦Q4ì°È ѵrâ¯æcošFËqp!Fì52ZÞan{Ö¦ÑCäœ[ˆÌh9½F5ñzzyc»²â.ïÁïÿˆöž½åÝŸl›‡ålÀ””óÍ4|²mÎó¥m›3ª…àó;†˜ÚœÐËË„¦kJlB•{BÓ¬/ð6hãä¸Zº1¤u°™6NNž‚K÷?Q³Z%Ô[hb—NÀ=i‰pê鯯3ÛœŽSW…áOÑJﻪÈsDQ{N>¾$϶rðïÿü*Ë õÄÔ5ë#'õí`ð¹³¹}ÕÀ°!ÀË—OœšLZ‹F}T³Î%ŸÚl“·gmTýªNÜj£øÈÃkù—_äÅÄ^6.6.M7›ÛWÍ͈˜ðÆMÞï5I}|q6f¼qs^LÈŠ½>ÖòanÜÜM(ql_5jJÛG‹›½ø&ê'Ê1ãÙ€ÓÙ›´~Õ<ö3[¼q¼Xí”0 ,í)jÚSÔô¬¢®ZÁo*j §¢¦=EM{ŠšŠºÞ¦n(jZ(ê[QÓž¢^õ".¿ó75í)êE/b“SŒ75=§¨«©l3‚¿KQÓÓŠšÝbãÞ¡¨¸¾f‡ÜPÔ´§¨Wq9œ“±ßVÔô¤¢¶u Þ¸w(jzZQ‡<œ:ÞSÔ¼§¨ùiE]®i~OQ?:ö—Ÿ¢æ=EÍ{ŠšWŠúÃK¼¡¨+ê—Zß}CQóž¢^tFåàÃl­¨yOQ/;£ÞSÔü”¢~ÜìÑË¿SQó³Š:ãðƽCQãZ»Z–oÓ EÍ{Šöç<¢7w,j~RQG³Ø¸w(j~^QÓpêÜž¢v{ŠÚ=­¨í !ø]EÀß©¨Ýž¢v{ŠÚ­5½¤ŠÚ-µ»&›¼­¨Ýž¢ÆåP>š+§ômEíöõªOc2.ÜPÔî9‹º ’Cðw)j÷¬¢öYÃß­¨qU YcÒ‹Úí)êe·À|f2¿­¨Ý“ŠºèÀ¼Ø¸w(j÷´¢î“$|û¿¥“™®ÌÆs Ó[p¡i¯‘Ì kÐ6ûê‘›ˆuhŸn+_~T•­ÝŸ,i09-^ÞO;o‘®« vañòSÝ„ÅFi‘9µt¯õŸ£UYÛtEäÀåà[ŠZƒ«`¯ t&ŒÿÝ/åZoüÛ·Ïsà¥*§ðð#\¥áJוõÉܾj(l¬mß¼üìÍ%öÃ`੬²†àãC>¾„TÛ_´¯šf5§Ööm€‹p«§Ø‡òMj¶$7ê:{Õì ¿€‰É&¼qiJ§òý«º²"zÛ±qS  5)ë€q¸qsï±£vóøªI×åœðÆMulq¨ƒû>>¤êã|ÚúUÓׇ7nÒiÎ/Æ÷&N{ºŽöt­t¥pC×Ñž®£=]G+]GÙÝÐuôœ®³dQp­ëR< ³·uí麅§´\E’½¡ë`¥Òã! ¶Ú)&©ÏþN]GOêºbk7ëBlÜ]W ÅÞ¸I×…3‡üm]G{ºnå) ÁÐ ]·ê×çCX íÉÿbãÞ¡ëèi]×KJ œ÷tïé:6ø¢\knè:ÞÓu¼§ëVÎF³ ßÏºŽŸÓuŬ+¯t™|Þ&ÞÖu¼§ëÎF:5íÏt.=(feus£Èðž®ãgu]ò~_×Åz±Ç7*+O羿­ëxO×­†ëù†®[5·Š†Öu½2QlÜ;t?­ëØ §Îíé:·§ëÜÊ®sæÎÖíé:·§ëÜÊ®ËþÎÖ=§ë2¯_^ëºÚòs{ºnᯣàr¸¡ëp _Ó^=Ôu‘ƒÓðwê:÷¬®+KñÆÝÐuµ)9¼q“²¢loè:·§ëVþ:´ þ™®[t‚q”°ëŽk¤Å÷]çžÖuÔöû?¿bÝ‘ô»Ðu­ÛÆŸuÝñ«…®kžÒñéR¥y‡´Ø1è½¼ì4BH‹@//UZ\(ªo}ÜûiŠ… àêªêÎ\⹋ÚÃ_gZÆËwXëÎkà·¡T¨(Ó‹ûøøòuNULœQ9‡«u•®t#ξ-Ê ëj'1ôísl‚MfÊ È™|ûÜ‘­^±Yh5e5Àë ±‰ÚWR‡6Š­5ÂàåeuE‚Sœ…R™ð±™¬¿˜†6†©¬âØLuG8onöcÓ+âØ¤‰†Ï$±º(i<6¶‘”86£>N>ãéÛEà›)#ÕÝ EíÅÜÓuı™s?Ó¢~o› ŽÍ\¹@‹ž[É8|lE]»#° ¬|¬Å$Öe|læÊQ‹‹ Ê™µN{Ššö5í)jÚSÔ´§¨iOQüÊNW‡¿7õÊÙXþ÷;ŠšöõÂÙèÊÑ´75=§¨ËŦ¨á÷u@O§¢¦§uÕÓ”›w(jœÕY›ä\ßVÔ+W'óY©ô¶¢¦=E½puÚrs75=©¨ËM†>67µ[›w(jz^QÛáé¼§¨yOQóž¢æ=EÍ{Šš÷5Ê«´/®¶€s7õÂSj™èŽ¢æ=E½ð”–_¹|CQó3ŠÚ>®‡>hø=E}:t4üŠšŸUÔÉÍ;5Îêäè¯Áo+ꕟöŸý3EÍ{ŠšWŠú¨ÿ™¢æ'uÙ‘èð±¹§¨3|lÞ¡¨ùiEíGׇÛSÔnOQ»=EíöµÛSÔnOQ£¼Jzñ5/2ÜPÔ 7o9ÞßPÔnOQ/ܼœTäŸ)j÷œ¢Ž!¾ý®EmM]nOQ»guô¼86ïPÔ8«3kÎlÞ·õÊÉìlºcQ»=E ÌçèŠÚ=¥¨}4£ÃÇæ–¢®-Æð±y‡¢vO+jךóüöåÏuN)‡ŸÅã¸RÔ9-uˆ Áïætm#_~ŠÇ%÷³xœ|ù~Í‘ÜúD‹—¿“{P#èþZÿ9êy[Ì/œ×qh¦Ýà ÇgLjüï~|‰9%½tJ‡Ó0‘¶Æ/?¤ÉׯŽ•”’é1ñòS s’ÔôßýøâCl­>ÅËSÛB4„“˜/?Õ„ïPò€£žÍ+^~ŠˆùÛËZ¬°Dfüò£J‹¶¿üœöxù)nÖê&DZ€-mC¼¼è0Ó_~Ð6õÜ~ùiüƒ8ƒ¸9Z œö´ íiœÕyü¡=mC{Ú†–J–õïzénk›˜½ã áJÛ°½øýmm³è~_XØÁá‘…ùW/CÛxÏ>züò£eEölùø¶¶®Îª²ó8|O)á—¿¡mŠY–óâåçYËgŽÙÛÚfÕD=1PñLÆ/GÛÄrh3~ù©ÜÆÚ|CÛ¬¼…ᘄ´ ‡–÷´ ïi^äÕJñÚ†÷´ ïi^ä½QÄ­—±/©„S§µM çষµÍ¢¡tŒœp÷,/ñò?Õ6ö…bò£i´hª\îøñ޶Y%Fº£ ºÖ6¡//CÛ8_{Qà—Ÿ}^&ÜÐ6°/ñÑ›i@qñò7´ žW+?i›îh›•Ë+m¶1#Üíi·§mV™µÜù†¶q{ÚÆíi›Ufã•Èzénjz ¾HK¸ží½cÛ,z´&o{/îIÛÔqßøåoh›ä’µ‹—]^É{CÛ,œNub†ÚÆeñËßÐ6Á›ž®#^~4Nœ9§;¿­m­>kkß…¶!¿XùÚ†8÷Þûâå§’“ñجµÍÊo“|W•snanõïß¾}^ùmêP¦…¶i.¯ò¨kîӥѨŽÓóŽ^^("·ÈnÃq¦—v“Vnúå__çTdªg+k{m\㚺hpUò[¶ÍY¨GE=Àǧ¥(ÇÅ)¶1 ®{6žæÁñUƒÉ™õ¾K¹ÍµÛ9Jä`á·Ë®Èé,îŸ^”Ë ¸´mjÅÌ‡Å­ÅÆ…M¦ˆ\Ü~&6.Íá¼ ¯Xu~0Þ¸®“lÙ\}ÔeI nÜì£.—¡þ+ÚkÚkÚkÚkÚkÚkÜá¯RNÌ7ÄšöÄšVbíÏþCo‹5='Öå²åCBðw‰5=-Ö=Ü*6îb½èðçØÄ;bM{b½ìð×,•_ñžXóžXóžXóžXóžXóžXã~p.Ç8¯Åš÷Äz‘xdù›þ3±æçÄš‹ ’Ñ·¿O¬ùI±6eM2Þ¸wˆ5ã\|kx˜œ±kÞëU‰&¥8°µÛk·'ÖnO¬ÝžX»=±v{b»‡%_'ÏÞk·'Ön%ÖÖ‡bížëP‡OZ—X»§Åš’Ç÷±Æy&¶XYî[»=±^v‹ín]þËœËúè i¸vØÙ´Êv°àé“Xâ‹}t½5ÝôtáŠs™°+®ûÒæ—I ç”­Y¬þMõô××Y~Ø$&X‘—,·2 ×I ìÙ¢òak] ô ð¹÷_®þ}ìŠËÆyüòc’Y§/M'58_~*6Æ¢*áÚ”€ñËYb#,}³™+?šÁ½-ŸèþRþñËO™¶æ¬˜”õ¿ƒ\Š—ä’Ì‘>†«úáåiOâèy‰ó<ý}G{G+‰›zM-%Žž“¸¢¥=©¥Ó"»GÏJ\´œñË߸:¤‹2~ùyXÌ7$Žž’¸GzRZ¼ü ‰+g9¤ÅÊO熦k‰£§$îa~dž÷$ŽŸ“¸Ç=ý}Ç{· n3l&%ŽŸ’8záÇS· n³¥;ÇÏJœ·ŽñËÿTâì‹OŽãâå§T?¼üZâøY‰ Ñ'üò7$޲XfUMâVý|f‰ã§%®Ç‡ ÆíIœ{Z⦥s{çö$nà=r&qî‰sut4±¨ià|%h¿-qîY‰cë/ÿS‰£—8W/?J\HñŽÄ¹g%Î;Jøå.qÇš]¬üÔg뚎þ¶Ä¹g%Ž7Å÷Ë(%[œVP'˜JøëëTñRN]¸Ú9üöc ¤rÓe ×qBï }€£_©•ºpQo“óUÇ#\<Ì7kpu6ƒ;&ˆ_ÅWé§×OŒâQœÐÇ!N8|»pQÔOT52×Wi¸pQ<>Úz§«§½}§½}_ŒŠŠi,Yï;ííûª'Aæœnì;=·ï6ºœøö÷í;=¹ï.¹î[úþƒ÷ö÷ö}i`º’YÞÞwÞÛwix,Qv7öŸÛwGÜo‘ã·¿oßù©}¯_ó çÝÞ¾»½}Ç®èè\)ðæ¾»½}wË}wñƾ»çö=Vyßþ¾}wÏï{ûößÿø±ì¯fìªÈ¸e›p•qI”ጵŸö7/j׸ժʗŸ­´¨>n×ùòSŒ‡±AŽá—÷SdrÑ77µFƒ¿ÖŽ’áʯÕ(×),áušõ¹o®=;˜þß·ÿÌI¬¡epɰµ%,^¶Þ’† «ŸC0Ö(‡Þp€ß^û]Ö²8õËK7iò.ET¼\¶Í,–nöŸºt#ÜÛÖÎA,ÝÀ¤¶Üßaƒóº¤/ÝT£|•II.kñÒ so¼78·©X‹¥CO9y8¸Æ ×@±tÓe$¥oué¦?„”ñÒW!g†V”s7!Nxéæì3‹+t¸_BÅÒ ±É]@Û7O/ÝXHÆyXûlM¶xéæ_¨K7÷¢H/Ý”Yo8ÂÚ"K/Ýœ{–¶«ÚgFÚfüöÕ$6´èâÙ‹Ï †öX†öX†öX†öX†öX†öX†öX†öX†Vv  ×,C{,Cϲ ;—ñÒ½ƒeheðïüª5]BßþN–¡gY¦¨‘„—î,C{,³èl—m2ùËÐËÐÓ,cóbéÞÁ2´Ç2‹ åÊãÒ –¡=–¡§Y&ŽûÎ{,Ã{,Ã{,Ã{,Ã{,Ã{,Ã{,Ã{,ƒûê%Êlã –á=–ágYÆöÎ7béÞÁ2¼Ç2h€‰}© CºÁ2¼Ç2üËzÈâ¥{ËðËà¶|å¢zå¼Í2¼Ç2ü,˘îtK÷–á=–YL_‰žÛfÍ2¼Ç2üË43¨ ·Ç2neÜ˸=–q{,ãöXÆí±ŒÛc䣿¢¨9GƒeÜ˸gYf(.K÷–q{,ƒFÇÐKÑ‡Öæ,ãöXÆ=y—)vCb¼tï`·Ç28×;QtuƒeÜ˸§Y†Ùã¥{˸=–Ásol9t«æ¯˸=–qOße“úýj§õËÿ÷Ÿ)*åëèÜÖü ÿüùÏÿûõÓßýéu´ïÊü}Ê!F?½†ž~^þö¥>ýó/ßÿîy¨ òêå?ÿò×ñWÆû‡¼—?|úõÿ¦?˜èüë÷Ïã¯\:†t}þãû÷¦ƒ}0Xºò«¿~L¿òηo·¾=.¿=Þúö¸úöxëÛãêÛã­o‹oKÁ¦èÿôíc…u:öoO÷ßž¦š)׿}üƒ!^|{¿ý¨å:¾=ßδøöôaüxnßžÇl’Þ¦K|{ž¿=ôoÏ÷[O‹oÏc÷˜kw|{¿*ÚÅ·¿:”ßž‡ê'¿}ü•kÖßþúg‘Nåœ?;‰—ß(y—pej$¶-s¨üjQîâÕÏäí‡,’obíܵ*Iõlî|É*Ó#º<,×*+ò9åí‡à´‚Gƒ·s¹þ÷é?çMáõµýsV7¿üòõÏÿˆF‹×Æw¸2}£µgòÁOLV©O—q3Âÿøïœ_á.Wéßó]¦¶•I>™ÔG"!“º0ì•ê4¿ý÷—É&.ÆÁÐßý¸Ëðò_å;ò™Hýû?_çö"&fôòâÛÙûþåÏùä3§Ï½À«avÎOùþë|i‡k„ÿøôï´t99= ²¦“DÊhéÆkàyü .=&:ß.n#Þ¹3©tîœ^¾y^Fø|+ŸxŒG/‡:Ö¹xÝFþ×Îóë«8ÚýÌ‹ÓÌì.»°ÃÕÑ.çæ£)N³­§VÃåÑf{¶8ÄÚ×<ý×ß¿7±Zyz>]œfïìUó;ÂÇ£]Ç)Ö!¢Ç~L_ƒ»2¡GøŸ¿‰OÌgò†¢7xú,µ‰ç©Ò„0P9óàéB2<ñiËÆøå†ž.$Ã’?3¡'a¨”íU6;íû$–#0åÑ}»Œò SØ«9ƒ›%£R!a(ºÎ+¸’ŒXç-¿j§þõu®Ü$c¢‰ºt¶é¤†œQ“ÁŠ­D†B¸n‹#\J†oLøû´ïÁùËøáRéÛk¢”” ŸxºÐÚåp6ïuù(F¸8›®ÀñòŸþž¬žÈùòˆŽðo?þdÂêy"V~>Áå>k\‡¶PTº<$ÓÓ…WÃÐÅmXQ2€Ë"Œpj©ÎMêå?}ÿûÛ_®PÌsph ‘Æ+ýò-±óõuÊñ|Cû« \‡ku^Gøju~4Ì>Û :Ɉ-9w™«üïóÓÉ0:Íd:™ py´™BÕ?|—py´©X‡ñøež¦hkŠëÛÛI}}íZQW‡h³úFK†;JŠD¾ôçÙõŠÚÕЄáte¶LOŸ%#rŠðÌ[ö.j¸8ó‘ø´€¤ÙîZ®ø&Lí9™‘ c\¾|’#\ÐDõâ[(q¾Í5áBâlJç…IЄ±}»0a¸Xý›0Ñ€ë<¥Œ¶pzùI`úmp%°¶ÐL@ûøƒ„+.bïe%¶•ÚM·1ÈëëL&oÜ9_“B;\_§[Ï!Ц i¸’Kºú¤N¢h«Wи )GCa¸MÔJh§áòžíüuç˜ÖU–Òpq3)7›3W\K2¸XbH`¹·êáR`‹²ÁË­ÉëW×ôkXÇ(É¥ —#}Þ÷‰‡ƒ»¦çÍ’\Í:à’‡‹FóЮ+o…à³XË3@»Î-ö]Šõ)ïX’%‹5¤ÞÔÒ×<\…$¹eº^¾IÓëë$Xo\…‹*áÒ}ö>Y$ï®H2kø\·Tž‘OyŠ Èkól ðQÞ?>XÆCyg®@ùŸå=“Aš€4\È»‹þ´iA÷}àRÞ‹m¡¼×Q”`å¥[Î:l»lÁÆIy/†ï±tŸý:­©íÆÉøôY¬-e$§òúVÃA³»ü©R’9etlf±.O¡Œ%Ù£S'¯kÍ<’L¤Eæ}ÝàZ¬=BIZ’ë$\‰u¤V‹ÿ¿&E¬çëÚ’‡Ë¥¹QFÛÇe# ¿»zÂ|¿GGD\ÇÜèáR~,Ÿö—™BäAÃ'ù9£öÐòµÖ‚§ ùq…Œ2ªÍô4|2]%ÊH2 —uÔáÂûVš_—46ɸq‚ð¢ó°eKŒðéâ®i‹Þ³P2r›Ðá ®%#懷]KFýƒ„k7JòÔX¿7 u>›kÂ+×­îúýëâJé ,©,„¦ø¸”²g‹ "²íb3À…j©´|}jû3À…Š‚IÐte›\Êe¤“±„\Rùö¨á‚×R1HïÏû°4pCëN2ïû¿SD \­–=i>ù.h‘éj&}K9øvyo-&ŒCQêNõqåå½õå¼ià6ø.%§V^ ý4psöúÐÎ÷Ö‡È6θì¿Â—£)ø_ÆZ8.áš/ë¼d%ï¾0l‚†+á7§su–w›Ë $k¸ŠsÆña—cÒðQø?VNv'c©øpή®§×8_!ÖÕ[Bèå…`]ZAZ¨=cs„KÁb˶)0Xy)XÞ[xs¤žŠ3ÁE€7ÒÁ> ¼†KÁ ù~S°ü ÁòÞ¨c£Ëí T}÷ѵõú:_’Þ¢±k>ù†QA´b«†ª+§^Ã¥Ä9>yXˆŒ-_5\ðeíñŠÂ˶&c‚§O’ql|gÞR¹Á§ÏTÌHRŠ—NRΡÞÑTóÚ4|’Œê<ç0¸ªìÀÊÏ’ÁuÖ!†`{€w\:+;ŒRì`5øûLÌ”‰1ËDRpE9.Ÿ QŠe¸Ü-Nx;Q¯¯óõg•…ô¸x¶d–†ÑáŒd΀Â$ g¿†Ï¶§-&â©*eBG9ΤáÂöÌÑ8œÐaM» påCgz¹`®ÃÇ5\˜˜Þ„³.@ÒkMÜG¸à"òáòÉ «Ò³GßþMx,°6´0ÖMÌÇö\ vÂÙRí†^~p®~ï2*—’"øvi]wÁguáÊ=¬¼´»M8„¤©]ÇÆIøûÔEƒ uqÆÁ´º8ÿ áʺHɧb¯¾çýµó\ÔÅ?î¨ kkFº„£¡“ åí4tãd€Ë­»ü+Ê<ˆ-þ8À…V ÏÔ,!ÉeCû©ëpi+ÀB§“óÍm:À•oér .±×p!°)Ÿ'™»ÜM À¥=_Îv@wØL¦åØ p…&Þ}-ú9ÂERÈg,FRoÑÓjéÞ)2?þXFCcƒ¼þAÂÚ|zNtºBkþ¿v$^_E¨`ɰ®y’p-2ÞC‹:¸fÓp™j,;œÇ³×p™ÔP”#îL‘€ Á¢|õ¦“nŸZõ¡á“¶©§6‘vû<Î|“ ð‰"OÅ€$.9×’%¸ôæzwM’™[Q—YÌ€Œ–­k"3À¥Ýmmð0,Z®èØÌI E¬¢ƒ’\d <]ÆxÜß’ÑÏrK'/àÌfA‘>¨¥{Ÿ¼78’wœžôøƒ„+Š,âž}ŽªšlÏ,BÞ­5\ÎÏ"e¡B*ü£áêš~%C îd×JɦoŸÅ:Ætò»tó’mŽ—.nÐ6µúa!ïÄ ^^É;9LÐ&5ïÁøt!ïáÊ^ò^lR'³Œ£;U¥,BÊɃ§Ï†s]a¶PÛ¬¼4œÛh¡Šš'ðtå£Né†oú¨ü™ì¦^+ñuJ–ø.ƒ?E‡^/ßäë«d™eμ-j×0ºžÃ{¼‹¸Ù´\šÄÉ.äÝQØ.ò‡­¿²Öežb4 à2Ø9ó‡9uó`€«,Ša~Qö ½¼ˆªÚ¯*•¹¤¼—OWÕbóŸ§\^Áƒ§Ë$ vÙÁüáb‘G°ï³\k2NOòðØÈô¤L˜ ¹˜làå¥Ým¯–*áœù÷tƒ‚΋„ÿú ׹멲íàÔô¤¯wÓ“2I8ðlV€ØØÓE¸¼ÐÖ(Ë"½bÈ­Zf‡c°½Ø"îÍE1Â[ç+ÛTxÈmu•j¸ëT n`–q¹.: ŸïÃå®D]áÞ¯Å.ȾV*Áä¨Zö—5\:‹EˆÆm1"À¾ ¶&v§kJj×zNLpa›+aSV W§“†KÏ–»”Š "ç6An:´ò6žðÄHö®‡Ù¿}]VD›`ܬgõô÷¦fa­ðPÛгuüAÂuÜ,ĶBí༾Ngè­âŽí:Ý0Z+”ût„þîÊY®Ê𣰠¨J¬†K­PÇ’!­ÀÕÂpÁé…ë3´Îsl×é.9=^ µ2 º•6À';éã#(¡¢PkÚ`‰.ĺ˥k"p)ÖEy8èK!€•WQïpêcèæ²ªYÃeÔ»6<ƒæu¶œ:å—&ì>såbàêÒÓO‹üóºû=˜×G1°Î¥¤Î„m³__'#ïÍx¶í­!þþ{Yžw ì(ÉG#³†Kï[H:¬kÂXÐpIö‘}À¹”¾i›ñåg±.Æu†·qŸ¢O—áðªQŠ´ 1¸${ï/6žìÖ)~úöɆ/ג˸—×éè›'b€Ï[š[Xç63xºlÝQ‡(~4Z+/½âöZy®U®ËqÑŒ½Ãÿž.­óæ…‘’ìÀ™78H-A@ºüAÂuu_è ­ Ïëë¯_ïUšÛ&‘p™óXM)å6m„‹¢ž‡"h8}î4\$pùz5‡!¢¢/¼†‹ø0s 0BtàÛÝr€ çbúZôíÓ¯j?¹„ÌëlMÏqîpi^·m^;°òRzkë6ÈÃÙ·£=íûÄþXÑÐÍUTšOW<œN¥¢Šøzƒ.x¸fR#-ÿs§JÝÛ9Îü™TLÓ ¤×´2ØÅη£Ývþõuò¼¼%Öä[FFà҅èqörjZ{€Ï…†¢-ì*úØx t[›Ò:˜(â{Äf€K­Pè»b¯ à2k¤µÔ…k À)G\«W;9±†K±¶Ö0L ó¹IÆ——ã”äáØ‹¦}Ÿ/Çîj&K"7gظòâr®–-ªˆ/{ðò³X[WŽG€bmzÀg\ù?Djü‘ßý¦X7ø]±>ŒD’pp9>Òõ}Øô2Çþò*¦e{³ƒÐx}*SÞº5ÛÖ5¸ÃXSÒb}6¹ .cZÅÅi±·wà²GFm× ÅÚõðÀŸÅšjc˜ÄÚrì|9À%ÙG{~»X—[‡´ñÛ¿É<­Jj[ÚÁÓUVèõí‚­C¦6N ±H”÷lœàt®¡Aò:].Oá"Ï.ž8ÞôíànaµIØ8!ü1,zâ„^)Øàï3ÂÜ­iá"¯p}·v¡Î~ôPõo7Ù:4µÛ0*ÙÛæpÒ­Êæê”3ÀUèêÊ1PÙ\Ù¸l •ü{’n®ÔÏæ¤\®§ìabeÉ‚—I[æªïV4×|m ¡«bˆžÅv"tÅζº˜.ïÀW3pA·E¥Äˆ6î_Ùß4•oÏ`åe‹³ÏÒI·5àÓøá¡tû°Âi¸¢[G?õf5ø3•‚‘ÕÒ¡†VtŒ=ÞÚ_^¥Œc¬Ýÿ¿ôN²_îÉ%jI[ £è–k£alE÷î}\Ê%]I[² ©þ¿†ër€N«riÛ;Àeù>q‚d­er>ÓíÃ`D]5mMH>“²M‰O+z룊ƒ•W±'—#Ì ¡¥ÇpÁ—©ˆ%âËÚ/“ÁË‹àQä”`]¹Y;Ÿ¥×V[§EÛÞQt\ù‰/kp"<ÊV}û;V_¾-[RÝû@KªÁa÷eÕñ" •mS _N!ÿo5²iõ„ <Ö>1vR‡®;:\Æžœ("]ÖÂ…XÇœ®`ÙvÑ´üã.‡ÆÖkWø¢½eðt勾¢²2ªD¦™‚\Ë1gØyʆ^[5ÀU«8ÊŒ½YÆo¤Ltµë˜îE5*-Úw™ðyÕÔIçܼ\°uõhFÌÖ¦[iÃˋ˱¹¬4ݸʃ§Ká¯éå0öärpi,Góhö6[_ðg.Ç!©§ƒËñÑŒ¤X¯—N²µ+æXog÷oo ùïϵÂáSiŒÕ0 ÑäšÈ£BÊÖ W5 ÷À¶ÖQÔpéó W÷qÙyÊöÂü®Ê÷m‚=° ]FÖpUXi=¬ë'Û[< ð9õ®êŠP+ÊÉ.µBæëv+HÚ ^^f™•"¤êõ ¬¼H?³ŽÏ«ùdý=.6D.{e¨Ê™£¡÷æ¿KO¸Å]çcè7Ç.š”Ër™•/ï™ùãÆÉvvŒ]f9’†ÿúË¿¿Éžã9¼¬þa${×út¸ê=P¬¤Cˆ±TG¶´˽»Ï_ gØÜIöÁ&YµÀÒˆP`)´ö•\ ,û³q•j(Ÿ.Kü5ò^5IJŽ4\ ¬·‹Ž¯1[ÖpÙ@29‹‹‹š4\µ. {z”©ø –N²u¸Ò(¤(IpY›XKZA×Ük«á³\V#"àg×Sú¸dkfÔuë1~"¸rZÎ0Å„.öŽp.™0ßZ{µï*L8%üa»Þ÷½a´×©ÜÐ`ß«r'l7ˆ®Š “%œ‹9I‡Ëȱi¹YòÚÛË}¸¬êfÆ‚EèÛ¥üP6‹îãœÀËKÆ"Ê‹ž÷œ\í«ÈLm—¨…íÆodR“ZÑ¡­ƒÁÓ¥ß'äË'¦m°^‡kK’âÃcðkÑ Œ4QÔyPOüjä :ÓÀ-OÿmrY¼üjvQ°ˆ¤jxÐpÁXåÛ-jÃ1Úæ-éK'å²¼}+Mi›RÇfý¸%—Ñö’¤†Ñ×Óšmã:®u;\•$™q ¢ïáµï?V„g/µ«:OqLv¸,AôW”˔Ûáà²jQîÐÄ,lÐør€ëD GYÔÑ3.å2Á,¦Úª„›‰9À…)˜Ï±Z.#õØà°t²ÙŽ=ƒº²ª§öBÖpÕÒíp£«N*U+¯‹œM°uÅ^Õ¾ëõun°¾ò¡v–—p0™Èf˜¿o]÷ïpq´}n M”›EBp¡ô¯´Cu3éeö\]@âé¯ç)‡æ~ž¾ý_Y †’lŠBì]Â8Hv…ýACèͦ¸¸AØrÁÍ›µtš ÜÑBH{#·‹Mƒkwaý:u9÷v*ýå•>.G¾ ÖõõEÏY€k}lrVpà ÷(«ô/x Wi.ÁÀ+@g5\Ív¸¢?jœCjÑ…ñåÅ :¤mbðòÊRñ„ZßÖ4ì–Nœàr=d‹ }ÏÑéðYo2»tfÐË‚çl,øv¾ùP¨âÐ<ž%\;Ãlzx tè*ô¹H ®CWõWÈÔ`ÛÛ‹¶ïz}­´õ¡}ŒÂpeÃSÙvoÍlÛÆ p`ÃC}\®&­ªg€ƒ»µÃѪ^52Àå4g2n6]l¼ áÂÔ k ×gM//ZýdÏpŸæ`à²L2]•ÅÒ5˜o|Îýy4[ \I V^Ø ¦èMèhbn“dG¸Tú6<Zýêéâ pŽÍFV¿F;ðÏŸþ«^ øúï}aƒ†KCÇñÀÕmÜR€ìUìî¤áB.‹‘æa¯bÓÒŒ¸”Ëh1™È£—æ[Ýp™?@ÃålÆš‹/óœ3xyI‘æré+»Ž":6²u'H‘©ðŒ+/äŽ §¤ÈCâ%\y|´N×v]ýƒ„ëTèb%h×ßšo´7~}ý×þ¯›éÚ0Jâ|ˆON=5À¥«fhRIM—kêb€ËþìÞ ÏðIS.³”« ‰Œ'gÐÓe0ÅÀò.3ŒrŸþC]H¸Èõ‚ô—×i)!a,€KÉðÉ€{ö©Ðp)á ¬9®Ö@I¸ ©SŸ#’²ÁŸHê˜z¡g+±†+‘±Ã¬Ü:Õ¼y ~G’lÚÜ›Ú^餮ÿwéþ߯ýÑ3Ü(<::°„ƒ¾ÄpPñ¦‡t¸êpëPÉþa'% —~*{5dTyOŽIÃçÆ|Uqž®±©S³4\öQ| åøg®åOÑ€¥“þŠœ2À]οß./u|•­ ¹,×%7î«lóB¡åÆÐ'8Ž+/'¶^íÝuõ@Dpq×ÅFˆµ½üd¥Õ¶W]-¤­Nô ùÑãL̬´Ljž¢_¿ýÕDæúçÛ6¢õ¡“}ÃèÛSNwT´=wa€Ë’—ꇄ^×{]‡Ëð?]™*ižÛµj€ËY;Eéc/™íw¸<›6fÖÇñ¨·&á@ënÐzCƮΦ ¨ÿ ùÜû¿Œ+/Îf9œŒŽc½èF°ò²KL }³Ã…¶Ãµ5å<<´…Jºë¯V;:[‚Ö%á)´Ë|Ã辋ål≭¦'Op鉰öê*(ì/޽Áú_¸¦ûã ™Öòx¸>’ÁzÏ£.=þê´¥z˜zWcãèôƒÈ±WÔIj€vä–¸ÚìJÃçæ‡……æ›ïs¸œàèýYŸ'229ÿ.Ø Ž…WNsÐpÐ[v\²5ÆV^Jœ=ÚúK‰+VV‡V±Á¡çÕôãà-+‘A~éÇm\I\¶~ÁÿÛÛþþ÷fÛ_*¶Ip 2-%\NKó-þ8ÀUëB{^-”“ GC¸” ºFk+O¶o¡õÿþøcÙhÛÐbb°àå¥/À¥ÌØèÉ-úùß±còÜL,EtæY MÞG¸¸Ì(c£§çtpyæ}6°„ªTð.Ï|ŽèÌ?Lb^^õ-qˆe¹æA­¼&“ÈݵûÿZœ°ýs8Úǯ¾üþ÷ihõ]?1Æ\ $ãÃ?°ÿKÁ•ðÿ|ú~ÂÏ)øô¿Køç?>Ÿðó_ >ýï3üë÷ëåÛ¿žyùß¾_K×þõÌÒýÖžþÛûž~-]û×K×ïÝÊëÔßúéýN+n·÷àŸíå,n£óWH+ÄÔ&Ûp9UƒùP»Ÿÿ7$½Û*\]ê>Ûˆ’sw—O¯—µ‹±F¸ò#žQ‹ñéõñÎ:Ûž~™`Ò[{íXN.ɾX|»­3‹ÛÒ]}”Z=ýÁ¤Á…ÛÈç£ëöüí/…¯Lù‹%_¾ñí¾Ú .C.>æž^Cô§_T,»(¬ŸŒ÷QÃÅ·'Ÿ2Zùç»Âÿ~R¼ªFY>½–éG —O¿©}§–aúÙ^v„ôÕ¼±òeã\>ϪPùíµÃ@ùÓð¥4o<½ö+÷.z‘=LT´ï!8jÇæºPÈÈÊg¾X˜VÃeëÂè[A®|*"ÓÔÅe›ÉHêûž›8ÂÕ¾Ÿ)/òÛËÂQ[ºë6¤|Ü˧sn“%F¸”8sö;—ßîªë¿Á\êBMÕX=ÝÙ4\i2HÞÓ£¹ð¿ü‚ª ïzåËm5\<Ý»³È_i›û·mêâëMmS 6\V;”_yðô˜©å³¶—I¯G,ŸB—¸WíIÎvrå}ÈvPV_ (^{ãéÆS .ù=XŸ^ôÚ·_÷yãé©Uôpñtª³øàÊ»©+ÆÉßA«¾~ËS×ÚóŽp9Ã:œ¾ùíœ]WVW;£¢ç¿þ}såۦå¶1É)y¿š½·»B\"ØõÖÓy°m:\J\K$ïÖ×÷ýУɄŽ7žîR—÷—W*’÷Ç„ØF‘—ƒGưßบЫárå)[hYEޱÑÄUQ%j«ÞúöB‘AÃ¥UéOO„<ó>ÚÁ¢>/ú2cæ-mã\Ðp)ïÑhӆ¼¶¥ÿØù°=}>´Ó¸œù¿šiô××çá×+Kãä&üò?ÈHêMøå¥P}ïÁ/÷…¬P¸ ¿œÒÝqN{×@zîø8¶¾eÞ}¦½k ={ ,Fij.ãÏ´w ¤ç®åéµvùr!}¦½k =} ¤aŒígÚ»ÒÓ×ÀP½Á—¢¦½k =w ¬ª2Õn` ¾u ¤ç®õÄQ?u{×@zîXŸžÈ K·u ¤§¯ÎÇØ®À´w ¤ç®/ìÕ$nïHO_}¹¦4çí]é¹kàãÔêêbïHO^ëÆÛA×í]éék å¢ÛÒí]éék`‘¸ÖÖÿ3í]éék`±§Ûxê¬v®ôô5ÐU»°½üÞ5ž¾–[X«&)ÆÉÖ5ž¾Vyí¹w ¤'¯GÓT×V~ïHO_k±u—÷½k ½ãhSW•{×@zúè Ãù~l¶®ôô5} ¾w ¤ç®U×yËݶyòX—ŽC¿ÎÜþq÷ؼ\ý¥¾ shW³—üªUý2Ì¥üúı‰WÞÅ?ËùÃwàÓ ¸çáÃÔŸÕ¤«·àà ’ÕÜ·àìƒÕ|°òW2ý—±%ûbŽ€_®Î/CïæU¿r z~ZÌ®ú"¿¥¬Æ. _ž?6c»ÀE—É·5í¿¸zÿ¦žïå÷«¾ oÁÿüöý÷ÿÕ«îQèGƒü*šþ0çY5ø¯ŸùþwÿÙ£5Ä£†©üá¯ãj›É àŸ~ý¿éWG»óò‡¯ß?è½Føß¿ÿ}ýêQ&b¢õýÿ`Ãuh_ +ÛÇŸ~ýôËÿ÷ŸáãM¹­=Ê=?ýþÏçÿoüC¹† /§îŸñW†áõE0—]7Á¿ÿúyúÕQ·w¾ÖÔw!øãÇJŸ]­¹u|y™Êy~ûãµæ6-NÂ_ë?Çcãr>›yøøÉ¯ž~'qëk\S¥Þiácðª¬â˜Ky´£;ŒÝøaÚ«áÕ®‹Sjïà d Žèbª_-f:üL<_Õ”òžØmÜ|Ýa'xÍâ‹=˜Ç˱¦iP“ä|Ö/?þª\Êîäž ŸFgc¼\ÓÒ•Ncõ‹;L뚦ñÔ´¡ü¯¯Ó¯lö}MÇ?$ŽêØ<8Íê<kzþÉ¿øÐý´ÓÒÕNÝ€ÈGoÓsMÛl!,m>=»³ãñø‡/µåÖ—‘‡6ÏÙ±=­9O™>´y<š½›ð×é&­íø«rçðךæ¹zÅðâО¿£犢§¾¦¹E…ȓϋC›ûý=xtí)TÚS¨´§PiO¡ÒžB¥=…J{ •B}ôhâ ꣷ¼O~_¡Ê>+Ôðâ³?ªT¤BM1X›ü} •ö*=©P·6+\(T²gêÛ •B}La{ÚY¡º—ìBÐp©PƒÇœÓŸ)TÚS¨´§P +T¶)/jvŒí=…/mS¨¶°åCd¤B¥”ÛÔkuh— •÷*ï)TÞS¨¼§PyO¡ðÏŸÿü¿_?ý=¸µ«W~©i%«Ý¥¦Õp¤véÊÅ„±ÀÚ]jZ j÷ìU½Ô´ŽÕîRÓJ8V»KM«¿©Ý¥¦K7©]ªm{óRÓj8R»XÓ:BKÔîRÓ8P»KM‹­T»KM‹­T»HÓ&7)ÔñÐJµ»Ô´ðÐfáê KM»8´BíþLÓ~ýó?+_@Y_5­ã«Ðv„+MëSšöh¬áeH}|þa~zíMž.õÑÊB)j[s4\*ê:“*ê š¿]Tshί}ûôôZÊì ž/×|õò¯õŸÃ§S-dN-~‡”n²zå•+Á19U°uW Èú˜Ë·'hù†tEÓ;\ºrL9)W‚u/…<¢þöY»òíE'å¶(ƒ =¦;¾üø«/E›tè£'TK'}† ­ýïÔÒ)…jÏ>ÁÒÆÏøí]¡ZS³ÖÙjÊEÞcS/Íhå¹û±é:´¶l¼š/Éc3ª´Ùk%xL@±øØŒðìR ºÅ±É—S7zÏQÛžüBžM²‹cÓ4bfãÚŦüŠö4"íiDÚÓˆ´§iO#ÒžF¤=H{úŠ•3-4¢w^ÃïkÄÖ ¯Ã¥F4™ŽòY#rÍŠîþÉþ>HÏiDN®MzŸ–NjDKé†F¤•Fä€F´1:}êf3ã¾Xiù†F¤=ˆoãÖšpÎÑácsC#>’«VǦiDŠNqJ#ÒK± ÛdTul–‘÷4"ïiDÞÓˆ¼§yO#òžFä=¸öœB¤*%ëM­*í‹ë ÒG8Ò›KU)áà2ï­[ªJ Çzs©*%ëÍ¥ªß>èÍZCn’_«J GzªJF3 ÝÆ/½¹T•ôæRUâc#õ&P•5ÃÚ%|l¤Þ\ªJxlf/¦ñi©*ÇFèÍŸ©Ê_ÿúsu.KPUšpõ2ᳪÞ!)ZT<4­$©ÀÅWO—$çäní‘í‘í‘=GRT{©2€ß%)¶Ào“T<8mÜDRuXY@R.xk2€¿¤h¤h¤h¤ oéh‹É7HŠ–$åï-IŠœ&©z9fÇ í\ôØ$Å{$Å{$Å{$Å{$Å+’ Ùß )Þ#)Þ#)Þ#)$U;ÐegùIñIñ‚¤‚KéIñIñIñIñIñs$"wÇËIñ³$eZ‹þiãÞGR¼GR¼GR¼GR¼GRŒoRµY¾AR¼GR+wßì%^’oÔo?þÆî¾£Qýã_þIêØ W‘ëyŠm,Åב‘“¤td¤Qäÿòç÷¢jÄ.(²í»üö¹·Pêßæ<¼Å·ÏÃÎäàß>©#21héß>7”Ϙ {\¦Á__§dÈrM÷Ù’JŸ,}ëþÒás.åÇ—d³=/bÏÛþÈæÒpAÐÖŸÍ¢$Ã=kHÃUQŽ8é½w{á"zC! 6¦*ìð/Ÿù¿ß§SÇg’å碭Úã©Þ{ÒÿüÇÀ°Tì{þá·ÿþ6”¾ùàÈjø¿þõŸþ«XlG mGêõä\Òß>§xù|ºyGx%hÛ øß3EÇaG'òcË>1lÅG)÷ cK1÷ý¯9´Nõ[D›œÚ8Êþ!qçŽ6ò«C~cW··1lðEÍ;Ús?CàL^·7µíuŽpÞ±£í>f«5í±½c&g¦Ó(L«ÍÕº|IíÍ™mî³TÆSN1b©,’Iˆamèp!°“¯2ç´Èü¡¨`k]»05øÑÚq g@Yÿ9!SÃ%E–C)’‚W+‚²Æ:@‘UÞŒZù™"‹BÍÕO(²ð{ >Pdõ•— €"Ü—ñÊO1Ýköø‡ªsÈ‹•XÆwÕéŠüT×ÝgbåÓ”ÆÏ÷N§W~ÎðɆ¡Ï7æ+ßóS#GŸ{Qö^KÜLeU›U€Ï×Õy¸¯ü˜´GɱòI¹Bq¯üØf%Úݱ5 "á•Ïó50Ë}l4Ë„d‡r*>µ5ï>ßþûÜD$å³™Äÿømrúé:-Èã SJ>“IÍ7 0HS£qàÛ'2±Ézò(-‡`€ÏIÕ±¼¢…™hoñ¡®äšëU zqh;g8ë½e˜p6ô݇V´Û°ˆ&Bê=çC;q¥àc̸ÓâÐæŠÉðÊRíœÓâб˜š¥ÙE{l@{l@{l@{l@{l@{l@{l@{l@{l@ϱãÍ[ W-¥˜ó 6 ˜Ä€ jùˆQg^öS*Šï@ÿ×ÑS*Ü`ÚcÂ%6É_#Ñôôûl@À·Ïl,û€Bö…$Zº›lðÀãCû6 çØÀ–5 Ú©õ“I|ƒ V¬Z¼ØÀdf뇶?¥˜öžo°Á"1ìï¿â=6à=6à=6à=6à=6à=6à=6à=6€ÝOGÕ’&$sÆ’&|Îÿâ[Ò„†#Îø»'R+9cI8cIŽ9cIúÛgÀÌ®hZyÀKšpÍ.К&ÀÒÎXÒ€ÎXÒ>´’3–4m‡?†¯º%MàC+9Ó¿8´‚3–4±8´‚3~Fß]ºL68œA½Øt€ëéE´  Ç®i"¬ÂÍ;:ÀMÄèMuç‹oiÂZÎð¶…3ä·dBÓ„5D‹o鼋pFã8ùíãCÒHšhâhV ᯯsñ¿ÍÉž%óð£²m=„×à¢wÀcüÑÐäet!ùœ’†ÿøôïÜj÷¨i¾¥>Šx€Ë4á:@§ sKØlð"¿ö$çðÂÍùýÏýñTnóÙXÿåÛàBŠD4¶üê,S(6ŸX&™”¯R˜elÍ¡¥LxãÆ¦Á»üAŽ^ª+ïz¹§Ø¸±©€ó Oô( éñÆMTæ}À=lÀ7¦e·šÜä,-6®ÏQΉ/ùn\oŸêlêÅÆõ¹ñµ6³×ÃnqËëÚ9Ÿ{åXÔˆÅ7öà£gžõäÞ‹UlÜ3ñ)0L ³äW7R¤Owɳ½’FlÜøÃS¼áÕÆµ¹QÁG¾ÂXuãz%fòQëùsãòPÉÌc¬ýÁû=-6®Ã9GÏ€"}QfXyÚ£HÚ£HÚ£HÚ£HÚ£HÚ£HÚ£HÚ£HÚ£HzŽ"Ë 'Z«á÷)2ëCûErò >S¤ Ùñ•Cû&EÒsicê¡Û~‡"+žr ¼qï HzŽ"¹\3|Æw‹"¹ß&ÄÆÝ£HCa±q"k àê<ø&EÒsYGüYZlÜO)²îiïÂ&6îIÏQd¹˜G³¸{8ã»E‘®' ÈkÉ¹Ü´Ã Š¤ç(ÒeßS1åÆý”" >:7<÷(’÷(’÷(’÷(’÷(’÷(’÷(’÷(ò¤8¿äN ÇDºäN Ÿd;V"îp@¤Kî”pP”cZr§„c"]r'€"]r'€"]r'Þ8I¤KîÄ7’ALgâ7âN¼q’H—Ü 7nruæÖpçbã‘.¹s±q‚H—ܹØ8A¤KîÄ'‰tÉxã.säbZr'Þ8I¤Kî„7ikU¸s±q‚H—ܹØ8A¤Kî\l&Ò¢kßè@w¶øWPÙ0½Ãuo‡k":hç áº·ÃC#âvŽz;,ÂyÊÆ§ƒÞ`;kÐËÿ+3á _J6}ûí¦-j7}ûóM¦“Mì"9½7}hð××yúWXŸÊ.toíè¼ÿÿþ2m{mpðÌ4c˜iæÊ²wGÙ'¯áÒe1Óìc•Ø\и¤#>ú¤zuhAû¼ÌŒ¢>ôëZƒW±þôŸÎùÜ-ȶ-ˆ4Û$ë—CÉ(†3¤n‰˜q6N %£²íùJV´¼K.†’‘Ë;ƒ“ÏàÃ'~|©>=ƒ³]DÇF±µºÁxçXù¹g„%ïrß’FоØUm±ÒÉ\ݸDn»- OXd¦6wDpªXQÓ±ÈL“ÏB¦¨{«ï-f„ÈL¿ºŽÍøUµ÷_õQ`‘™âš)zÍÃdʘ¡Èä9gË[”ôN ¼ü¹?}2JJ3ìí1!í1!í1!í1!í1!í1!í1!í1!í1!í1!=É„åhÒpÁ„ …Lˆgž”KU8g_¼Í„Ë”Ó &\•"¶ùdÂS=‹…ÞfBÚcÂÅ ib:³g$šÈ`ãn2!; Þø]&ôD`ãî3¡3 ¬ü&¬Í}-;EæLHÏ2¡3l±ÈL7R?´©_3!œ:RW96ö.;Z—o0á²CàQšø3&$È„iœ S~Å{LÈ{LÈ{LÈ{LÈ{LÈ{LÈ{LÈ{LÈ{LøÓ©#ˆ"%óå’"5ñå’"5ñ%ðùÖ‘'&8àË%Ej8âKH‘žz:æË%EJ8æË%Eê—G|¹¤H G|¹¤H Ÿù2÷üaD‘ørI‘:²‡h— 6ðå’"±ÈH¾\R$É—KŠÄ"#ùP¤Ëµ©'É—KŠÄ"#ùS$ëS‡ùògùãÓ¿«4T²öд?¾ÍôãÌБý_ì÷|èc·à¸àŠã¬YT+ÐÐ#ùßU©Ëg³ÛÇËÈÂâå'6 ° æ°xù©ªÀ/Ê <“„×›ÿN#¬Š¶»ŽÍŸ“aèùïÂ÷‚o¹ÿË |ìs½F¸Pçñ•#Bxlûl÷WêœÊÏlûª±ckÈŸþ笯¶âÂ}æRðñ!_‚cCŒ•`¯aàrÂs¯•˜”`¾N7ˆuäëªZ¿jRCÁ-6nt`9çtÅ£™jºÕþ»œÿ`=,Ç­M5<ܸI©ÔöˆýW´§hO+ОV =­@{Zö´íiì)GÓº;Zö´ÂÂBµHì†V ç´‚§]ÐðwjzV+ødoÜ;´¾SHöl ñ¶V =­@«î•É ¿â=­À{Z÷´ïiÞÓ ¼§Ö7Ò³Ê © ǺÜ ËeÏG›ABí¥;–êBÑî€wœ³‚cݱTàÛÝa_8˜«I%Rhé´îXª ׺£ÜÂR]à“º¨‹º$ô¦iã¤îXª ¼qRwà0VO:ùõ÷¯OwÕÆ)p•ÚØ½o“_mœù;ÀµR‰i¥GHÕ“-sXhß~§Ž: ‹oN6ä>gþÊoŸtRZ¸ÏúNùíS^fr eÕÓ__§BèG£Ùÿ‡k+Jø\G}Lˆ%=Gãc̽qê^”³É ßßQ~o5\*+r@ÊÊxpl¾üöýÛ_×㉋ęx¤qÿöý?ŸÚ8½DO±…r:üó/_z6¿¸‰Uö¿5/¹Žeõ>ºÏ=žRk–óÇÐ.°V´¢§Oetu˜âé}æs|ä—Ä ›cßegCr¬sº2¼ïCSÁ¢OOëoœâQö½(1kñ¾Í 9,Z‚k—:±ïs_†$Ã1¯öýøÍu.Þý<÷ýúÄÇ9Åž·ÆëÙÅkúê˜ó˜_˜Š9¿Ú÷–·ÁåÿLîû>áro†'÷½ÃCÌÑÓAʾS oïûàâ3)Ÿ}eʤwœñ¾$åÉ…r†ÈÇjô(˜Ø÷<¥P û>µ6à}Ÿ“NãtKy±ïWKC*ïÛ±ïùʈMÕ%É‹}osQ61©”Éðòàç°Ø÷þö©(Kîûž?z?Ê}Ó:;Ç4›ä#½Xk§•ç=~ç=~ç=~ç=~ç=~ç=~ç=~ç=~ç=~ç=~Çý|˺_U”ÐÇü6¿»ìÔ·¿›ßyßùI~·6úà¿×fÀ1ßàwÞãwÞãw³éìøÝ'÷ý¿‡èûþ<¿ó¿óSü^Žc¹A»Å¾wx¹‚:¾Áï¼Çï¼Çï¸ÅŒ-ú0®J""ã}¿Çï&¬äýy~ç=~ç'ù½lhˆ‹}ïüRÔÓ–¿»=~w{üîöøÝíñ»Ûãw·ÇïnßÝ¿»¥³‘iIüŽ­€%ñk8²ñŸ" GVÀ’ø%Xþ±^˜ø%[KâWph,‰À°$~ GVÀ’øñ¾K+`Iüxߥˆß¥Èã}—VÀ’øá¾ÏV»¼$þž +`Iü‹}VÀ’øû.¬€%ñ/ö]XKâÇû.­€%ñã}—VŠˆE—‰ñ¾K+`Iüpß'+Àž½X!ñ/ö]XKâ_ì»°–Ä¿Øwa,‰±ïØ (›²ôâû€<¦T8 —V@3"Þ°¸²zØm™Á;Àg+àx{lpL‹o‡óTÙà°øvdD¼aÈoÓu°ÀM¥Éo3m¨°RRð××yjuÍ+£ h¼a×î[ .i<=&N¼%Ãí¢<ÀÕpž€JÆ…WpMãÜfˆ <\G\úÔËÏ-‹7Î=Î>N eŸ&%äbyf«–ŠJ =wZ¬üØvÔrBÝPÉ*%¼òCºhQ `nU1a^ùi8ã‰ÔõFsóʧùZÅY1¡}‰Ù¦+þÊW#/JCM‘IkÙO.•õµVq\ÑÇåÔØÅÊAÙ²Âþƒn“jcÑÔ¯üškÊ&Lù²+? çÉÑa*óÞÕŸ©Ì\£&.ªs²[¬|¾,ÔÊwÞ.úðâ3Ñbå{C¸ÊXšeª Â}âpóËðËðËðËðËðËðËðËðËðS,óhˆ­ŸXæò)¾Í2‹>6eå8ß`ÞcÆ,9Øxƒexeø9–±µ¸)╟XÆÃžÛ’eVhlN|ƒexepÏíäâ5mùm–á=–á'YƵd.±òÓ…ÉØ|ƒexÉ2×UõM–á=–ÁM;ã'o³ŒÛc·Ç2neÜ˸=–q{,ãöXÆí±ÌÚ£éÜ’~$sÑ’~|®M¯}‚Ó’~4q¦Ÿ0²Œ!Ç‹‹–ôà€‹–ô£áˆ‹–ôƒW^rÑ’~ðÊðhrðKúÁ+/¹HÓÏé7Z¬¼à¢%ý,V^pÑ’~+/¸hI?xå%-é¯ü8Lè €`úÁ+/¹ÒOmA·XyÁEKúY¬¼à¢%ý,VsÑ·ÿþ²îÒqÑCÑk¸ž†íÝ¢ê¼9.¸Ž®Ö"I_ÃUtÍÓ"¿+ùíS º‹ˆ‹cß>)} ‹âòœß>Õ焹¨ò–ß>µåE*çá}ŠÀk=m¸æüü>÷s¦9ë|¦œG‰s<ÿÝÕãLÙkøÌEÖ’½ºu¨¸Y  pÕß“îm=©oWS†RýAOî}~[ûÉ>U‡ûäÈÃѤÿ®†\tÌ :RŽ-SK|Ÿ=.Ý<‹ˆ[}zL;ŽZdæâòòð”ZÃì–K…ã"xºŒo…˜!IY“ÌÌN)òÙ’+? )Š©Žh$åM±€ÏCŠ‘$õ sô‹Ì8ʈ¯!Erz‘÷Îc‘ÇQ›huÿ•:ÆÜ÷5BdÆÓêÎÅTSÀ"3צLeÞD·™aJj0Iw§¶/5neüBd†›)… ¨ìøï.D¦ Óve×yøDÞ£2Þ£2Þ£2Þ£2Þ£2Þ£2Þ£2Þ£2Þ£2Þ£²E"hˆiq­b²IÃïSEµïï¦2~’Ê"EðwRïQ?GeTþÃ=}¤²³‹â *[ùþ’Gˆ.©Œ÷¨l1oÏ×qM7¨Œ÷¨Œ÷¨l‘Kic^9SˆXdnQY픲™ç©ŒŸ¥²òö+‘YR™Û£2·GenÊÜ•¹=*s{Tæö¨ÌíQÙÚChÃ’ã$Þ’ã4jç0ÎâŸoÉq® Ï„«{%à8 Ç„·ä8„·ä8 Ç„·ä8½tˆð–V~nLQt’ç%Çi8"<ÌqÓmÜ™õÝmÉqoÉqŽoÉqXd$á-9‹Œ$<Àq\HŽ‹Œ$¼%ÇA‘™ ï¿‚9n!2‚ð–·Ax?㸲,ðºv4“8iBvÅ4‡øÄ„æ•ù Èoýòcþï¶3?À'Š<~Åš"®‹¤áEž¿ºþð¿ñu@‚‹—74Õ<’ÞÁ·ODzÀ“æÎÇ¢ §OM5¿:ûRN ûàýf¾ ðÇ¿2Áiê=öÑÊ<ÜÛZ ê=ÿWþã¯E@Ð碠có]<äaý‚ûþú*Ò˹¤(²(jãMPK÷Ë/Ÿ‹ÿq¸Œ»N.ˆ´Ž¯·0gz̽Áeúþƒ¢¯ÄüO£(Ú¡á~»¥ÀØã^ÕÀškƒ†kµv%°àåÀZ(°äšžŸàJ`i!°Öaí³ÝG¸ØKU*%b ×Ëq!°W^ ,¯–áÊOë™AP`:6¢‰îµt@`Õ¾k%‚bLNÁ…ÀÖªGÝš²¯áJ`™qÎÖÐN¾Á¥éú X(°uª^³.~ü³dX¾R5¤Àº~‹ìp•r\F€ÀR+Èàêzdø m¹U\ ,9$°ÖÛáJ'-¿¼XŸaþŠ1hå•À怖³°Ã•À†Ã:Ghå¥ÀRZ¬÷påGeïÈ/ÖÃcó}ñò£ÀÆI’ð×úÏéK1ö&º³ë¢å4¸Ì¸,kÓ!ïã·6”.WXå^r(w‘Œ“dœ>´²ïôÑP'ÉØ¨N’wW§¨y·ÁÙ0¬ü*¯ÌZÈ{“=ÀUŸykãBÞ€+‚¶¼’÷V=6Àµ¼Ûˆär@/¯åÝÆ…¼›^^É»cLÐÁ—ò –wê9´\Éû•¨ä ®¼h 8\Fw•å=d»¼ \Éû‘–†ä½.¸’w¶tvõSòÞ§p6¸tMåì½'%ï‡ÈG¯á³AîÊ]×.’â “†K~wiÑÆÃR÷Û\pe?¾_Ëûq»¾^¾¼ñúMþgùùBÞûed€¿Ç à÷ òƒ< ÁŸ7ÈÇ—¿o·”û® ò¼2ÈÁÓ'y?—~e£—‡A>¯üdÓÑäMƒ|:6òíìÏ ò}-ê‡ÛÈûCDµïj®D=šô•k½Ë>>½\Ó]2´í9Õ•†k{Þ,.à}8{ƒk{ÞlÏ[6~xúúny!ï–5\Ë»Ë+i¸–wnÈûÓp;‰Ìp»w“ÁËky§…¼‚+y§…¼[´òú~µÝUòŽà@ÞíJÞñÊÏòž¯äбQpÂünF’r y/W¡ˆåš—¸Á¼_}s…¼Û3€ß“÷S4\Α9Ç££û»s®å½W¡Nüþè€ÒR¯ÿþ¶´çCLÐR'î©×®.à¾:U'®£ÀÕ‰{ªá* œˆQàΓß>R}ƒŸ¼k7)ùíS6¥EHk'¿] h&ñÁž‹oŸžWƒŸ\/v¸à¯õŸc°×d{v#|¹Œ¨—ÿå—þñ%ä ªy·¾Üa³†KɘZ˜Œ—RRpР6§Â¸9eË ~Nc•JÔ­éBí|ãƒð©N„c4@|·˜ùÁ€ÿv}ãGr/1ÕF)ª€Ä¿Ä²¡9â¸1§³Ç˜üäØáZ×*"ØtΤ¬OÈÍ%bßµa('œ6n ö:6(¡)•SçW7tñTo9ëj= 86²ÅŒ­Qz ¢À”j=ábãÎ2*oKè\â^rÌg¼qc¬Ø^Ã'ÅD(Êì—ûM³œMò(i7ÔZz¼q¢E¬‡Q`“{-ä´q3š.¯Ñ~TŠp\l\oßÂe‰½ ç—š2B~±q ^Ž|H…‡ó0³TnÜU¥Rîßñ˜9—¯pÙÐhy ©°G‘a"ÃE†=Š {ö(2ìQdأȰG‘á9ŠdçºU9Àu÷D7(2¬(òH×QɦOÊmð›i_|ÕÁÀïQ$å:õ ÀŠ /¶ÈuÐÝÙÝc.dZlÜ;(2´ï¦ÈðEZN½«ŸØ¸¹¿ÚÐhM‘a‘(U¸%{Î.ÝŠ EcóbãnPd49ùÅÆ]é_¬ËuNcg½”UڣȴG‘i"ÓE¦=ŠL{™ö(2íQdZæ“[r§„c"]r§†Ën†[r§†#"ÕÜy¤“(8&Ò%w8 Ò%w8 Ò%wj8"Ò%wâ“DºäN¼q—¤xô´Á܉7N)¾^Ç‹DºäÎÅÆ "]rçbã‘.¹s±q‚H—܉7Né’;ñÆ  å1vÉxã$‘bé’;'ˆtÉ‹DºäÎÅÆ-‰Ôï©ß#R¿G¤~Hý‘ú="õ{Dê÷ˆÔïÝ5ýž;Öï¹cýž;Ö?sפ—C¯®áïsÇúgܱîÅ;mÂ÷Ž»¦ßsÇú=w¬ßsÇúgܱ¶Vëô9°rãžwÇúgܱü’ï£:ÅÆ½ã®é÷ܱ~Ïë÷ܱþ™»æ‡XÇÓjãžwÇúgܱô GæáÛãEÆ=ŠŒ{÷(2îQdܣȸG‘q"ãEÆ=wlÜsÇÆ=wl|‚"?¤j”R²þ>wl|ÆK…&²×‡öÝ÷ܱqÏ÷ܱñwl¬³:œãÅÆ=ïŽO¸cËÆ9ŸÉ{¼qï È¸çŽ{îØ¸çŽÏPd±9Ű’¸çݱñw¬­ý}”UޣȼG‘y"óEæ=ŠÌ{™÷(2ïQdÞsÇæ=wlÞsÇæ=wlÞsÇfÐÚá"ÒîØ¼çŽÍ°wìA¤7ܱyÏ›÷ܱyÏ›÷ܱ¸c/"½áŽÍ{îØlÖDzÛ÷ܱyÏ›÷ܱyÏ›;ö"ÒîØ¼çŽÍæ§DúýÇKwl¾;ŠþåÜ$ WÕnÑfØ>·`€Ït;õH’ Û. |.r9&À-–ZÄôò‚‡/#Bó°_-Ý4™q, y¸·¿—K72aà„ º3•K‡[,I‚¦°Xº‘ì}ˆ¸\­÷¯—K‡lÝ¡I¿ükýçè´ Ñ½¼§y“eåŠRSð_~á5½¨§òÜëü¹:´QÃE³ÁTðGyêOÿNUtuĀˢ6a‡¦Ú]½¼¾('Êçü¹_ÿº>Ërmpžœ:6 °•0Ã5-ãëëøYÔÇð¯þÐùÙ†ºóS*6D@OŸrñS­#C«?Ô¡˜6x7" ™˜`­“FDUVµð³•æð±‹ÔÇ—r4åvž#«ß뛆Z>{…~ž#‚Ë!ødj+«õ¨œ­ ú×ðz¸FcÙ/ú×÷ú“.mr¶-´AŠÓû~®æ°®³¬v„ÛG/âÀÆÕÃÕ»HËÓå~žÚLL“ÙµæV#|0aè…‹ áPŸÆ¨'Ûͧn´“r´­Â³Û6åÜ”%Éžºï½¹U¶õ¦¬CÍ/ÑÆ¸RVƒ‘Éž~51,³v¡¬&C'§ÜÎÓð‡ZÓã°²›ïsHýußûXo.G;¹ޱ°ç {ޱ°˜ {ޱU/ wfì&—5E`iò-…'c‰Bô eõ¼c,<ç³…àÓ'û+¹ôL®T‡ÐòBY-í¯´g¥=û+íÙ_ ;Æ c,gï%‡^þ]öWÚ³¿Òžý•ö쯓1³=ß°¿ÒžýõF»pÃ1–öcéIÇØ#b©áïtŒ¥gc‘Fë/iÇX³Òn8ÆrŒVÚ ÇXÚsŒ%ì{XiKà À•vÃ1–öciÏ1†{…áËޱ´çK‹ iŸ_f`åï9Æà ÀßçKÏ9Æà e¥- 3 §c,í9ÆÒ“ޱGÄ+«w8ÆÒ³Ž1šã°•vÃ1–ÌÚJ»áK{ޱc‡•¶4ÌÊJXi7 ³O{†Ù§=ÃìÓžaö fÙÓ8xi˜}Ú3Ì>ífŸö ³O{†Ù'`˜Ñ {Ç0û´g˜}ÚsŒ}ÚsŒ}2ëÀä ÇØ§=ÇØ§u÷wÃ1öiÏ1öiÏ1öiÏ1öiÏ1öiÏ1öiÏ1öé)ÇØ‹Ôðw:Æ>=ë+OgµtïuŒ}ÚsŒ}ÚsŒ}ÚsŒ}ÚsŒ}ÚsŒ}ÚsŒ}ÂcÀä ÇØ§=ÇØ§UƘ!ºáû´çû´çû´çû´çûôsÇØßß~ð*cÌAËÊöÑÉ\™YtÙ Ò²êFğͬcz 9y \šY°eŽKËðòÊÌB€ß. (b4Á籦èÛ•å£Ô‘ï—nŠ,o)_Ýöœ^^LðI×\Hi@«o­ÿ ¨Íyßš;XRŸbsÁ˯øÇÚ¶Ê{0Á§êÊÔîÙ\X@6”ôñ…Ë]©oWP1ŸêIPŽrO4lðÙRy´z+T Œ¢:‹À§Ö….VbÇšFD`o#Xº¹Ã×BmM»yà8ðÑV°uò§€¬ë²+?Zk…f$}ûØ; žGº½NA§bÖ!øÄÖUk{РÎÉ>´CŒ§`g·¹øß¤BÑ‹C›û·Ç\N‡¦ÈJ3VË»fÂì+&üøØ÷dᡘ0Eƒ’oÊeÍø´8´¹+‹H>’²6M²z¿\5âöÈÄ푉{’LWb™¸=2q{dâöÈÄ-êçëæ™¸=2q{dâž!“ÚìÃ[ö.ȤȈ`h2Y̶²>;ÔL• MdR­û`î‰Û#·G&’Iyu˰Í™‚†ß#“*1‘-øö©2#2)6¿ñþ>2q{dâž![2ú„mžVˆÜ 2YއŠ1 2):,®í@&æqü32q·ÈÄß#ÿ<™XBðw‘‰ß#¿G&~Lü’L(Ý ¿G&~s·´d Ç”³d Ÿ)'q­”Z²Œ†#Ê,ãzj|ƒcÊY² €ÊY²Œ„cÊY² Xy@9Še¨ÐD¹˜8¢œ%ËH8¸¿X K–K(gÉ2(gÉ2øÐJÊY² >´r8F2vÉ2øÐJÊW–ÂêÐ ÊY²ÌâÐ ÊùËüùÛוÿ«˜ˆ‹ø£kß>ÀUü1„°¨˜l±×.t¾˜^ò¸¬˜à*1ŸíO+&§——“n «¥ôqy8Ž?úÐ .åÒME‡Þ-*&MZ,ÝÄEÖý¬bR.Ý÷Îü´bR.ÝôòvU1™ÕÊ¿¾Îs®‹F ¤|=–.©}ŸÇd. >{B)÷EÏ·¡>…ëÆ‘M8²Ø{F pftG“[šX`¥­°4 ÀŠI#ÇÔh,VØ Kó`!°ÂVXš ¶ÂÏ̃¯á‚GòÂè刱G6¥zùÙ xèél…ÃËija’>Yµj#£)œ®Ú´¯ü@¤9_u¢Xˆ2ÛŒW~´‚3N•ÕªÎZÛ¨š Ê)8Èï®Ï+?Ï#ÌïƒA®|ïäW;V û{=tä+Ÿ†”VbqòšŸ½:óãHg6ÃÊqòš¬‡W~òEQÌÔŠŠÀi±òA×yX©·ÈkÀ+?R¬5½oÂÜ#¦gXË•fy•ã¢éeéœ]­|šÇbXyD‘ÖåQY¹=ŠtOS$G'Eº')²&@ø»(ÒíQ¤Û£H·¢È”èEº=Št¸}±+ÿ»»A‘n"Ý‚"ËeO—ù>này¤ ‡)² Ý H)2ÖJd‚é){ Ÿ)òQ ƒÛ¬«Ï¼¤È¢-èê7Ý==M.(Ò$Ï€"ËÅØèC«)Ò%D‘6N$åi‘‚?£HìGä³Í˜"{æXù‘"½ó{ȳO‹•ïTf f@‘å*ô·+Š,7‹d&ίüH‘§À*ŠŒœh±ò#Qpw(ÒAŠ,æAŽSd2¯üTI=áÛiN«3Ÿ‡DÐ4! ×À¢ÒbåŠ<VO¸Ìv´iýEú§)rb¿G‘þIŠŒÑŽzÞïQ¤ß£H¿G‘~A‘eÞ¤H¿G‘~Ñá¿Vkß H¿G‘oø¨qgõe©—WwMr‰0w–+i¸$Òrñ€;Ë 'š áê®™³‡>êr—QK§‰”£%Äž¬e WDZžnâN¦|&R›Rvˆ;SNÌxåÓ˜?œÎ¦‚;ë-à•O’ qgùKxå'"µ9@ît½Je^ù!'ûX|ÀÅ.ŠÑ-V¾iѧ”!wÚ`W+ßR¸ ZÍ=^ù‘aƒõ s'G‡W~$Ò²rp§#Ó[J‰•Ÿˆôšó3_/1på'"µÇ(<Á5Ÿ=Z¬üàŽă¸³èZ¬|'ÒP§™œ¿úýœ¹ýhHbÁ¬›‡ƒ=øD¤õÂÃ9.ܱÀ'"}4#@¤mÞ. |"Ò@¤µMŠo ÿ\©aÜG}O3ÛÇ—WDzv%Ÿˆôb‰ô¥Žœ{(TA¤Õ]ç3€ODúh@DAé£ew‹ŸL+?é£?{M¤‡uàÊw"})G#…Eu’m u:6ßLJX é#ÖÛ\’ >é±ïîè T~3Rdª%[.‰ÔÁ8[M<|t÷a R‡==[_þœ(’©_U¸ðæºhÏšÅÏ¿ðZ£“bpÁÃÌÎâX±3ễ†î&€JÙG <ª¥ ¢j‰MY÷Û§ÿô0®óŒzùcÒè.·Ñ†5ÑǾ]°5¥MmK†-$ÁVÃëþLåIa.X2@]û3ÔéR} $èòû>{ªCxÓ àéŠn‹}jP¸µž:g¼îOkEdÍCÓ[2öE²º‰‡FæY.i܆à±ÈŒÝ“(˜.2c¸58­mt´6ó¹òuKúÓmí8ž°Èä)ÿ$Z­íñÒYdæüîcž›àájx ‘Ƀ:&õ-iˆÒøt·"h‹Ò©v" —]ýgš ëW¹Q`ÝŠ ÷‹›nÌ® Ú9@бf¬$Ÿ_ÞÍ>A÷|µñåG‚~ì;e˜gE­¼ èl  SðàÛ%AÇì"&h­¼ èäxAÐáÊ-»9;Îà#—+¢c#Úd‡ :+ဠÙ$DБƒÞwEÐÉ"#ºæÇÅѦuk‚N -8óÊ—Ìí¢<t(JÔEWM8™«\Õ±‰ß¨iv¹þ»ì%\tä6 i$èzËÖÇFt¹Q&‹:¤^¸=|ûDÐÁ:ã¥Ó÷dh Ÿº¢9Y@о”ð‘ }ÙžsÒ}$çf W½=9ìŠvZ`5A;$è²ñ àA?šž2"èbh³Ã"3üÊ™4ºG†õÉG,2yâç„ ÚGÃXdW4û”H4¿XKœ°ÈÌ, ãšÞÖr™Ùaí^”C‘Ø´™<ªó«tz"èP]ññ ‚6‡ºÐ'£Ô¯:Ø€ :™¤áŠ )[|ƒŽãUÈ/ š@ƒŽ—”¢m¿$h‹oÐ.#¸"è£ç¾Aפ]’±+:Ž1¿ è”’‡CÌhåAGoÐÅTpå‡ÖÍ&šcT"hѱ™ Úz»pEsPûÚ‹º˜´Y:EБ{HІŒÓð»7h*·«áÂaÍtä :eãzs’. ÚÆm‚:´À“Ý:½Ïm“jãT‹eÃÞG@Ð…à‚WK§šSfxƒd,¼A{>¯Bo´_´·=Ùõ2C>t®·|ìâú{ pIÐ5d š€ª”mrö4yÍ>tÍkyØ’énœ(b‘–C¶ ´5„EæA«Ðc‘:¯š_ÊY4H`AûDð]ôC‘™ᇫS´Ï¤O&è[:ÕHÐå4õ•ÿûÛÊÅ]l#A[o|ÐpIÐîê"¥šŒÕpIÐ6-°ô ½¼"h"ÚÖª[—.nZT*Qß. ÚD‚]n‡<]4{ËÝ MöCG¥‹;º A;2èé‚ M`‹ ÚS€+?¸¸ë@ÛȠ뛉 «BðmCb ìAÐå7SÆq4I-"èòê§¼ðvL>2¬-÷­b„hu(—P»‡-}ÔåéÖ37ôm[ù¨mME ›™YÁg"}t?>&$K7r§íÝÎÅÒW›ì·¥›ò¡z›z±tÝK\tB†äg‹ /Ý\ú“p]qYù —nB÷»ÌH~ËŽVK—zý‰;|ÇÒMÝó{RXºÙlm[ºÁÿëë-/]H®?rè,YÂK7Ek£E9Ef´¼k’òÉâvŒÃÀ/¹tÝ›}ðÃ'.¼¹Å ¸2‡Õ?h¸ä"ާGSr‘ëù+\qQ8/Lê²8vs\{s#Bå-q¹ˆ‚‹Ë"¹/‹CÎÖøò’‹Âé—\”‚//¹¨h¹(E^^rQö ÛÊ£•\›A>.à1Á•«_R1Uæ"?´å[ys{Ζº,Ú¡) öæžo‰¸È»[-梳³ä"«á#q¹˜P:S@.²\Ô…³1¸ä¢`¼´–G¨§ƒ9‹f Ö¹¨Üe¼Ú8y©«>AŸÙrqxé¦vŒét„¿ÍE(7—kv“á,¹ÈÚ—jKC¼ts‘Kbt£©ýê²Ç…?ÂnÊSêbà¸Xºö«“ㄸ(9òŒ—nTú|”-ýŒ‹G“ª#<œG.Jµ9ÆK7§à8°¥ÈLpéæcB!ÇÚé*äÕÒuÇ¥ yd¿â¢£xYsM‡k™C˼à"oÀÓU­u+.-•¥ãò ÎÍ÷".×ô‘‡—ŽK:ÃcŠ‹,Z:ÅE>c.Š ½¼à"*ré Åîÿà‚‹¬ñß‹ØÑ/¹ˆhÁE —n¼KhÅEãÕ¯¸Èž&ŒºqVßîE4X¨c™ 夞®¹¨Ð{‘‡\”9»”¹—*®Ö¸ä"wÖJH."CêÔ>„¸è‘ \Ü‹^²7!â¢rcïE~ÁEѶ–Ãoq‘‡\D1$çUGxæ˜ñÒ%?¬‚É—n¾U9³XÙ“\sòÉ".Š¡×BŠ¥›:np‘‡\DÑ#*%¹Â´8us+®)"“#\:Ѭ y˜þ’ÅÅÒu](§ë:›_þ\6®±:D3}êî—÷"]”<ðty/"—i¨ì¸â"¶Ý‹Š‘‡¾]qÆ>:üò’‹òÆ\Tl˜vká3•C”q– ³ß®‚h>á,ŸZ:â´ò‚‹’‹˜‹ú}^ùñ^ä‚ó„¹(µZ–éØ|_¼¼à"¢¬VùèÌ¡æ0V¹˜8ýtÅE¡Õo‰zv¶…±øø:F³ÜQãB($=y\39[(GVLf —±²ìÉ/œw^:Õ$¿ê¤„òWB-žðéZUc”äÚÊתÔ'Ÿ‰•Océ UãÅ&ýòs¬ð]1þ2œÚ9yÆ+ß;ñ{O˦}`‹Xù©©€3váûKi±òC'~sL–WQ0_ÌʸXùžGšùH=V~dB²œðÊçéh{Ø.ÀÆ^p)V~Œ‚••CõdCOC+ß[ôûZÂÄ‹ëZ\œù©b2?Ž pö‹•ŸÚ÷‰w"»Vï»r0–£5j…•ƒÑg—º³Ópu©»2.å¥nȸàŠHËýtA¤.h¸v0ft©óÆ÷Ðú—Dºp0²¹hé`¼<„’H9‘pA¤¦‹Õàå奮g\J"õ”ÑÊK"ûNѪláÊé¢uuKf‘Dj:6‚HŒK@¤vÔIËtQg!‘Öb õòšHÏ^é#% ¿I¤9–›iøœtRKvmÐDzØ´àé’HÓáJžGöêÐê«_¦‘ú˜ôÊ«¬ÐÄÇ¡ÕDÊÖ'¼òSMƒ?óú%‘V5„W^iDSì9båS Fºò› ‘Û$ᕟºï.}à¸ÌŽ+Ÿ†xšI¨=nu8ë}Wùž±|d@DR4ŒW~ê—ƒDê#g¼ò7ˆÔùÐo¤båóà œá¬›f!¼ò‘º„»ó°sn±òãÅ39ÔÆ¶°‡'^¬|÷ŽÖâ¾á!+ï¨?VHiJ£¸JëôWq $Ò@£¸Jë$òqA¤#,½£”i»’OpI¤”1‘òhä-½£)3&Rз "-Ö}„7Rêùy\©ó)c"¥ÑF\zGc«l”Dê\ù±~aŒŒÓ:ë›™HÏÖÚ€HMR‡yG9 "-Ç!G WDê]"n¤3‘†"µ ÄÖ5àé#‘¦*×a^ôðÉ<]µ¹‹Ñb·iÐ/¯ây©ð‚Dê-#øL¤Tö‡‘Ö‘¯üԧΜ7I¤µ ¯ü "M9¸œðÊw"Í.øˆo¤Þ˜„W~êCpPjcËn±òHË#$M¤UïEij— ‘–ÿ°Å+Ÿ§£}Ƈe‡ hB¤_žL ˆÔÛìƒÅ+ýÊ•{kô¨ÍÝcíŒÃ+?©áEV+ßù2ó1ÿTiêÉ…rå‡N°LM.?ýý÷*ý’SZ¤_æöŽ\¥_òÙÔ\)õÒÑ®Ó/[;yfl!𮉴6™Ò/Ëe¼Éå—aF‰”R+§_^§_XÀh2zy™òRv7C"­k¯áªÃ@2¸>Âõðÿ´ò‚H]Z¤¼ôóÊé—µ÷"Ìá*ý2xZ¤_¶I” þZÿ9Õ)ž2T7»¢iY=tä¹*ŽUc*3ÀE„ù¬_«0lª½Ÿ5\tà”‡<ºîó­=ÍÀ)è=/`ܸ9BÝ1ÈRt1*ýBdòÔƒÁZèXÎ -dk—MBuŠÅÒ§²5òK3ÙÞeRˆLn56\>p˜Æ8tc ‘™Øš#ðK-òBdÆoô…n˙á]æãzƒÓlï¤<ÀUmHv‹|\ËQÃumH¦A'ðtMÐŒêÙ(. š=&h?ê:¿® I˜ ‰Ð· ‚æˆ;ýÓq4ÛWʵŠq>n/8›V^4çA;¼òƒÇ¹ˆu0‹Ð­ÇÇF´aÆÝ»[58$hÚ{£—N´KWO5™&šð˜ )å A—c“5\_§‡é_C‡bw(µc^Æí­ÕpU€büÂamGMë)T) ºH\OkpEÐT{B‚6L`ã$AWmõ¶r£{fÑHÀñ1(ñgíqÓy—2(l©‰].¯ÓÙ:èÉÎ9(8pkS„ÙiM«ºÖ$hŸ}Ä"3)™ …*Û…ÈL}5¿”í#’¸{]§ù°™Ü" ‰jSìï¶š"5AÛ£jµëÂBd†êâ Ú†Øû¶ÿø¶l$ìôSŒžÆ2\uúáó' ÚöC;ÀUHØD^x²›q2Àïz²C´­Á—!akqHØôöß?¾­=Ù1°I½oûåè2v‰¡'»X•¤á’ y2zÆtâˆV^60þgžìyåGOvÊÙ,’”»¢žŽ ÛÕ :Yµt($|^Êo&‚Q¿ü/¿|ûï/3_ãÑs÷é.3°¬c‡˜;rÏóà3ÛªÍ3ðd—W·àã'Ö°¨ )ãÔ,\õ²«@)«¥ ûbrP Ûo‘#|îäÊ™MmãÒ”Þ¸‘ k×Èïƒ]'6.MW!&tì¼Ã7F½+"·lÞ¸n„GþdîbÓÞ¸©“EZ07Ñbã†N~ñ˜,¯2»,ò‹ëóO“‹gÿ‰úU“‡ÜxÆ7ݳ=*CÞ¯$n¾«ž&± þB}HÞç{vQhÉ!Gxv~˜Ë2oÜ0}µèªàáÜôÖbã¦vBGÏTÄï9,6nè÷W§5¡xvM«±‹úým1üjåGwÎá kG6h¸=“±Ý&puMÏÑ­Z8D ¿éGwäØB¸¼¦çE ‡l ¼¼ì˜M(SVôíòš~åÔ© ëÞÜd€K+ÀÑ¢…ƒ &¢•W-ÂÏüèóÊ~ô\Ù~ÏF§N]Óc^´Š”$YÆ#+ X®Ž%\[ÞflXÎIÃÅe¾*pŒ² ¨á“P'a„³#Ïœ1V»¦ áÀ À~ôBf.­:lO`«¾tŒ£¦~,fÃU3@Y±–½Kxãf+ å•ñÆMí#ã´4r9,6n°Êë/¬£µj_Aæèµ#¬€ÃoñÆV@ GÓmo÷/6nîlϰÛ`Í b¼qy*¦òÕëÓáV¯¬€ÅÆå9]!`+À…¼Ø¸±ëoNÀ 8Ê­$.µFq\¡•³¾vV@H¨áÒ¢‘ÓÐÆs€ëæ«‚eb¯á7õåÛ-zym$ZDÓ£/¯|,×¾¹಑“Ï}¾÷$àÊ ˆvá †.þø¶nžáÒÏœõóÊOuVé Th+À'tl„àâ*«Í©}G]ôËudB¿°ŠÀåÓ†++À`/~™\dµŸ¢UVÀ‡\.\!²†ßóNðíÒ 8Ó“´@ìÔ©ÓVÛÄØ `|¶LŠ[DñÆMeÍG¹´¶ŠÀ¼q“`S@V€Þ/6n°<JÊ H/>%¯%î)_€V•À  EWÿ™HWMƒ#3¬ò²µ½ÂbãzãdýÙg[ø¢g&¼q“K?è (§ÑD¼q‘cõÔö.âÂÙ.!_€¡ZsðÆÝô¬6nzyîuî³`-6nl-œSľ€žˆ 7n(„K¶}â§/«ˆ€­—þ¸÷¦|YEl†ò¶-±=˜òeà£öX½‘Ó×½ÿêýÏu"”Ep5=/A+ P¼¼ìýï\FV•E+/{ÿ{C0§®(ÚžqùeÈW[gcÑÓeïcqn{u=•|‘¢sØ`ûüºéØÌ½ÿÙ±5œ‡“Ú¸×úÏiü]¤ šœ÷êÐβŽÁ›Ù£*¯"ÔŽ4üÛ&—>™¨“Óãµ]b _¾Ðx1®Éá"±!ôËÊ¥Oñ¨lÔ4žƒ–8]mŽ(˜»Sû#øÜ 2Ÿ1÷cKÒ”š½~yY V;|P¸.c V^Ö‚Õé mKÆ*nkŒÕð¹q­³}K‚®yi`åUs“+§N76vêéš­c \=VèÛZüŸêB9ë%TXdÆé:´Š¹í„ÈL¥dÆEXm];Æ`‘ÉcëÕûläaz © ‹ÌÀÃl#ÈÃub™¹yá˜;gý튇“ñ!#®­×V"“; W]×µòÉgÇxÏЇ`€K®Yàø6N<]ñ°Ï+î™õ_¾½1$Eæc1=³Ep9ƒ‡q™ï=WÆ——<̦ÎÕO÷.xØ\­ÓW1j¸ª1³¼’Ç)¢•·ñ¼’ç\ùá6žj{ÞŒy˜|BÇF É»òú[§–Nðð1ˆW[Û>C·Á5“eÍõ]`ì¬.xØÕJ4}¶ö¥¨ÑpÀëöaÎj¸JN?æNiCÅË—•S=fx˜Ê±É>]§Ë¥ˆÎ[™äaG&ë——÷áÓˆÐ<œ&.rpB@mµ“£æá[»³ ŸsЋrÕNàé’‡ÇR¥ÉºHNí;èâ˜óXË2mÜÄÃL1£‹2×1¶Xd¦{k>çÐÈ›nîÙ(Bd¦_E΀‡3Õ¯Ç"3ÆÆ‹€W<—5‹ŒàáEƒN—‹LÖ^Pë5\wÙ%ÈÃä4ËHæÌ.û³òЧVå%x¸°¸×pÉÃå§#¸âav‹ 9ŽAÃ5Ûx8åÌÖ!¸äaƒ½â.G//y˜<ŒS±3€Ï<ìkž=äáèGÉðK^ŒÚ‰i´€–^ñ^ñ=\ùq^NœWÓäÇ«ÅrÞ•Ÿ§š¦dRûŽRØ) ‹r+Ž¿,ÝÚÉ& Úøl5|fkg=1$hŸÜè À9èåpðYñ":iàé’­Éa‚æàÔ©™ê9 Zoüòš­ª1«þl5¸bëpv¿Ðí²K'Ùº˜t±ÊŒK7ßš_¥½*ݼ¤Z«5\°umrä1A³a W™êœ)nÙf¸òß§ÀÁñòš mc3Â'¶é´=ÕE™£q„Ef$¼dŒ…e3])±_ºŽ1ìimh†=¿Áçw ±Í|ø|®²ÏÂùtÙM%÷ì³þX¡qh|´ASäáü#´tEž\ª)ò¼µÀ¥ûßø«zeCYçv:¸t.'Y§Ÿþú:Ó„Í©ß&þýLô¾«4n¶ÞëÎ^u,ÛÖÍn€ÿç×ùÔ\cÁG’úXStrRß’„3ê=kÚ¢ÿƒ àåË'¦iÛ-ò§šz×ß >µæ"oϳúUc앺ïo€z¾'…$PÓ³xãòäë·¹}ÕÜUƒ oÜè÷Œ6éDžÅj©æÞ¸9‰)hUùñåA°7.˜uÊð‰¼§ÒxO¥ñÓ*­(e¿§Ò½?ÀË¿O¥ñžJã=•Æ+•Vîý7Tc•öBé†Jã=•†+S(;çó •Æ{*mÕc©6¼¡Òø)•V»>ôÌÈ þ.•ÆO©´c`á{‡J[tú)±tC¥ñžJ[uú¡ØÜÚåWnO¥¹=•æžViö…ü®JË àïTinO¥¹=•æV*^Ò •æ*Í]cßVi0Éÿðd¸¥®“p¬ø€®s9“ñ®ßR×i8R|X×§àXñ-uxùyrG±)-u†#Å·Ôul9oÝR×ᓊ麘‹xã¤â[ê:¼qRña]çi86~O×ù=]çŸÖuôâü¦®c;ê:¿§ëüž®ó{ºÎ¯t 7t_èºV ÿ¶®[;m]¾¡ëüsº®ìG&‹àïÒuþ)]w¶K“ðwë:œë\tŽoè:¿§ëVÍ3ж°7tN×Õ±zéÞ­ëüSºîˆP]+ÿãÛÿ-Ýgä@¥#öD.”Õ#œ‚S1m«Ê™à£Nz„˜VC}t“|ùQÛ¤œ€9&Ð-^>LKdqŒ§*äË¿¢ŒX¦îlð×úϱx „@Ð5e™›¡ÁU˜Ä¦x^ׯÿîÇ—œ¢iUÑüÛ·Ïsb¥3^GYÎ’®, š¾ŸÚW™õÔ#‹ãËÏ~ªB ǤÖä}€ùøRmkÖ¾jŽŸ0€‹@…§˜`þ½MDŒ7nÔ ö*®)bŸÞ¸èúû?¿b‡ÃQ ´P­r{€ÏêâøÕB]´`×øt©¼CþÉ£;zy¡.ŬŽ? ——Z!.Œ½û~ƒ¿¾Nž¼J–t: AÁ¥­àkOƒðAö!x4T4ÍÍ5Â…ÃÌY-÷mÈ%~è¡^ò5ÀÇ—¯ã(2“³H½¼vC–«A_”AÔŽ<èÛg7d±{¯.ìs”¥,IëV0Àçžµf‹ñ4ºráO¯+4¸!k6~d\’pYq¶UVz¤œˆñ±/ ué¡ãr˜ü$ŽÍXrïãÕVyî`Ë×{|l¦ñ«û¢äñØØfý‰c3*«t RVµQåè‡Oä=Ä{:‰÷tïé$ÞÓI¼§“Ú \ˆÌÆ:iáî°µyæ Ä{:iáîàì<ÝÐIüœNÊÅzKQÃïé¤ó®©áïÔIü¬NŠLŒÍ;tΘ©ó^Î|é·uÒÊÙrÎú™Nâ=Ä+dÝð+·§“ÜžNr{:Éíé$·§“ÜžNr¸ü¥Öº:iál±.{C'¹=´p¶p"goè$÷ŒN²/!×®C~×N*·ªÑRq{:É=«“‚µ‚ÛÓI°AayGsMí}['­\=Φ;v’ÛÓInáΩÅ˯üžNò{:Éïé$¿§“üžNzÃWÃKe%áXseØå5i®¥²Òp¤¹–ÊJÑæ‚Ê*šQ©x³¾á-•Xº¹¶=ÚcVVh嵿Z*+ Gšk©¬$\k.—]*+|l¤æ‚Ê*y^©¹–Ê ©¹–Ê ©¹ ²J¹IÜo_þ\g¶pø™_z€+e•ÓBYõñž|®ÿª¿[%Ø¥ÅËO~éä~æ—–/?¯¦èR‹YŸhñòS¶Ý²4K/Ýkýç¨Ò¬3ÞTŒ¹{K\é$¶ŽÿÝ/1§¤—Ni›ƒÃ.$ê-èÄË™lµgWFq(.Ç6â—ŸÛsäðôßýøâCl]ÜÄËϳ¢‡ù¸64/?¶eªƒ‰‘'…žü)^~*‚µgöÀøß-[t`füòSÂÚa€ðra¹ç=å=åE É^ÃÝßXÞXÞX^’Þ(<ÒKwS`k7¢Álop-°å6Î7vÑ/Fî]D¦H…ÖfB¼üOÖ¾”í“”ÄËO ªGÿ⟠ì*kÄ]A|Ø¥ÅËßXW^>~ùÙ—pf̼-°°ÚѾçÉ{gEíöÖí ì*ÄæñÌ/Öí ¬ÛØU>Èe5zéàm",%YÂÕ¥ÁPŽ@’ÇÙF Gb$9ùžVÐàZ¬íñÇ’Œ_~´çc4p'×,jñòR¬‘$×ù¾üº=zÓaIÆ/?ØÝuƒ,¢Þò¿'‡_^Š5¢ÞÚyàËÏbÝûç•_ù=±ö{b½Jè¨e*7ÄÚßëUBÇ$zé XÇbûö0•ÃÁˆ ëŒŒ¬áwÅ:SmÏEã:Ýßk|M÷u<;L wu¬~ù[b]nùøå'±¦@tC¬qF†/ºÇC‹Ú7þY±v=j~ù9ñ‚ZN÷·oŸW÷as¸µ‘X·´õò´‹µa×éX¨»õéÕC//¤—È-2°ZmÕôòÂygÒ*ÑJ¿üëëœÑDu{²vËÕz×$£ÁUa~l„évЈ||z‘Ë@×DiuÓíBÛàZ.Sæ$&›3ë}—N6›kÏVp.*©·˜à¢uT:ËTƧyu™X:i^׌vX³•S ¼qÓèÀLÐ1V”y åˆ%ËY‹­ê2¼q]¬mÙ\}òeI nÜ\¬šâ°?¼'Ö¼'Ö¼'Ö¼'Ö¼'Ö¼'ָ߆K1›;bÍ{b½H>(|yÖZ¼-Öü”Xxaî³À&ø»ÄšŸkÎoÜ;Äz1P4±Œ7Äš÷ÄzÝoà ìöÄÚ퉵Ûk·'ÖnO¬ÝžXÃÑŽ/‰=¡qJ¬ÝžX/.Ƕƅnˆµ{Ž­}º_Nðw‰µ{V¬Sf‹7îbïÖ6¤£eþÏÄÚí‰õênM}ðzù•ßk¿'Ö~O¬ýžXû=±ö{bgµåhñ ±ö{b½ºÛdN¬C$"—Xû§ÅÚ&Æ÷±^ŒüÊÁ„pC¬ýžX/{£ö¡å?°Œ5[vÐfMº5Àµg¬µù–•ÐÍû0>}ëãWØÖ[¯MO>/— û¼ºÓj~ù¹àyêá þ ᯯ³ü°IL l-†±®k•B<%CT!YëZ!ÏŸÛždâ£k0(e†ðË©)9\%T3ÝfוŠxùy8úõEµÅ9ã—rK(F —ú&‡_~ì¤Yäöh2©O1/?%Ѻ¡°r!—â幤Ó× føØqãxOâø9‰{ g àéï“8Þ“¸e´—aã)qüŒÄUÿqΣĭ¢½léŽÄñ³çú¼Xñò?•8ûâÉõ؆xù)=Ã/¿–8~N⪣×~ùG1Y YWl ‰ãg%Žòxêܞŧ%.z§Ä¹=‰[†k­¡çž‘8.Fi0FÁµÄÕ*™çž•8 )á—ÿ©ÄÕ(rÙöÅËW®ew$Î=-q}À³xùŸK܇]k4$^~êÊq7|[âÜÓͰò~OâüÓV%%žþ>‰ó{·êÅWŒ~Câü3ç^('Òp%q5änHœVâÊitøåoH\¤ìƒÃ/?uÃKÎÞ8ÿ”ÄÅv‹—¿Áq.Õ$tüòs û`¯%Î?-qÃM÷ûe”’-Žß×9lþú:åÉ—Sèô@ýöcЦ:DÂUã·èr ðHœ–Ž5ÀE–~ÎÉBÇØ:5¸:›EžM ÆD÷ë«ôÓë'&ñ‰( P{%øvᢨŸ¨Ò쯯Òpá¢x|":´.ø8¼<ïí;ïíû"Dì‡N¿ë}ç½}çUe}ÌñƾóSûþR(‘3xùwî;?½ïv”w··ïnoßq¤!V—âyw{ûî–ûîí}wÏí{46ç¾»§öýȬŒî÷öÝïí;vE'oÚ¬ƒ7÷ÝïíûÂíÂ1óñgûîŸÛ÷d«Ý¾ý}ûw—[_ñßÿø±l>c쪀±Íyà*µ‘(-Â/>M]|||^ôµäv—‘/æD¯Eec»È—Ÿb<Œ r Ÿ&>Ì¿´èk™Z£Á_ë?GÉpåW„*ɦÖ/ Áë¶s_K{Räÿ}ûÏœlÔp¡i‹IÊÖ?Ú>¦~€ «¿N2Õå&ä4|üöÚ)ËøˆEÑöénbé†àOò.Ábí²mf±tóMù €Ô¥áÞ¶ˆ¥XºÁ“]³?±$§„¾]Ü9(]Å\R’ËšD¼tCÿoï .¯ ¡],Ý4}/y8˜ÅnI¥bé¦ë:aÖ¥›þRÆK7Î:(Ê*a×9sÂK7U_†AÏà~ K7$•&wtAý'8Oç=UÉ{ª’÷T%ï©JÞS•¼§*yOUòžªÄy¢3Gߟ©JÞS•ü¤ªä½ÃK÷UÉ{ª’a ;y›ÜUÉ{ª’ŸU•ɧˆ—÷T%NÉ+ª*s¸¡*yOUò“ªÒä<ªJ·§*Ýžªt{ªÒí©J·§*Ýžªt{ªÒí©JtçÚ¿¡*ÝžªtϪÊÔg¦ˆ¥{‡ªt{ªñQí~|E…ÞV•nOUº§TåQ ìðÒ½CUº=U Óëm&CUº=UéžV•~\y¿§*ýžªô{ªÒï©J¿§*ýžª|£¶Ð.u¨„c…ºÔ¡Ž*Сև>ähzºV¨KªáH¡®t¨•p­P=û´Ô¡xé¤B]êP¼tR¡Z»#‡—N*Ô¥ÅK'êB‡r†K'ú9»Ô¡xé¤B]êP¼tR¡s3â´8uR¡.u(^:©PW:ÔÃ¥›»õMß¾ÿnà¬Â‡‡Æ}Ðóújƒ÷^=vÁµV¨é­§3ø÷1™ ÉX ¯NÛßçÒíK}úç_¾ÿÝÿò8óäÕËþå¯㯌÷cùç_ÿoúƒ‰À¿~ÿ<þÊ¥c¨Æç?¾oZåñUýhð?¾ÿõcü• ƶoO·¾=-¿=Ýúö´úötëÛÓêÛÓ­oO‹oçRÔ(0þöqzõ×÷oÏ÷ßž§j׿}üƒ!^|{¿ý¨‚8¾=ßüâÛ‡_YßÒ_þó×?Ðe\y‘Né-¿Qg^ÂgÄÈME”_ÁÈï#+ÂßyÈ¢0rïn]~µ 3&:»j¾ýUœ0ôòýò+¿¤VXØYPl|Ýþ÷é?§aøúÚþ9‹Ü/¿|ýó?¢ÙÚe|v¸²a¢µgèêǧ?&ó§«Ža„ÿñß9:WŽÝIF³éZ{w$ Ÿ ¥#ƒ…mTl+n„ûï/“¥Ó²z¾ÿúaºðò_å;ò™øúû?ÓWëâÚÞùåÅ·óÙHðËŸóÈ_Öãôô¹ÿdáË«‡ü÷_g³Ò]I#üǧ§¥ËÉéùE5)£¥û.êßÛš-ÊŽ€o6¦wŽu÷ËÇEÛ\ùÒ#|¶¯Ë'c"ËáŸÎƒu.^Iþ×Îóë«8ÚýÌËy±ì®BÝWG»œ›sJ‹8ͶžZ —G»h±ŒÌþ²ï žþëïãPÚZ·t͈™O³wö²ÛGøx´ëlSg‚Ä÷ÓWÅà®ÄþçoâóÙ^C,61xú,µ‘ß9ðBQ›ó8Â…døbZ1. ž.$Ã’?óè&a¨ MìE_Ó¾O’a9²ñk¶µEß.$£<Ä”ãDù²J§›%#©&$ E×yW’=]—ÂÿµS_§óþ‰%c¢‰ºt¶é¤†œQS ÒÉXBd¨QÒp)}Xáïs³ç/ëq„K¥_䊠døœÀÓ…Ö.GЀ³ùx¯Ë{7ÂÅÙtEŽ—ÿô÷ßÓÆq¾æŠðo?þd°Ïpy/V~>ÁÖÔðàЊJÍ Ÿ.œ8Î~ÀâкG//Sxé¤:/VˆzùOßÿþö×ßã¥#˜‡#DÚB¤ñJÞù_K z}2„ÞPçÄþJíp­Îm9?þð}úYuêäѦbiÆã—ùŽdkùòõíí¤¾¾N‡v­¨«g늓t¸– Ïùê³,=sIÃ…¢váš'MNWïéé³dDNžyËÞE g>Ÿ4Û]Ë4á„©ý22aŒË—·~„ š¨¾Y %ηŽû#\HœMé¼0 š¨ÍÞÀ· †‹Õ± ÓÊ_F¸XçéôÞ -܇^~؇>ÏЄár .ØÀ¥«÷“2a¨)êŸÀ6¸XkÎO)°Ö´–º®¸ˆ½?”•ØCh7ÝÆ ¯¯3™¼qçH­¾Ãõu:D/ʦO«áJ.érxO¢h«g̸ )G¬cîÜFÐ\Þ³¿î³À:ÓZpq3)7›³†CK2¸Xâ3B,[nwÍ.¶(,°œÛMw€«kº¿ìºï¿ÎK.gò¼ïwUóH‹]æ\òpÑhÚuå­\Œ5×uMJrÑB`ߥXŸòŽ%Y±XkI>F*¸æá”·=%ɵcìõòMš^_'Ázã*ôXT —î³ÇlG‹äÝIf Ÿ³ÞË3ò)ïBymž­>ÊûÇËx(ïlÃà³¼ç` èC† ywÑŸ6­"èìÁ·Ky/¶I„ò[<|Zyé–³›Ä.[°qRÞ‹á{,Ýç_¿Nkj»q2>}k[ ‘$ׯïVÃA³»ü©R’¹ ·žŽÍ,Öå)”±${têäu­™R’‰´È¼ \[ÔÎCIv”Õ©Sb)4nâPÄz¾®-y¸ÜXš¥a´}\6ú»«'À'ñ«|˸(ŽÁ;QÃ¥üX>í/)2…ȃ†Oòs†_¡åk­Oòã e$2TÔŠ×ðÉt=–(#É(\ÖuR‡ ï[QhhVn]ÒØ$ãÆ Â‹ÎÃ1§‹»¦-zÏBÉ(h'á . ï¨3Æg­zyíFIžšë÷f¡ÎgsMxåºÕ}@¿]\)] s%•…Ðß—òCö,ÐV!"Û.6\˜ÁÁ9²Ðòõ©íÏvl cµéÊ6¸”ËH'c ¹¤òíQï¥bxèTƃo ÜGðõ·1 lå"Ÿ k¸tª^#hà:N`ßGZ|<ÞŸ÷aiàG íû¿SD \8–=i>ù.h‘éj÷$}K9øvyo-&ŒCQêNõqåå½õå¼ià6ø]÷ÑË"©§ká§l Û4äìõ¡ý"âäµzãŒËþ+|9š‚oðe4­£U‡k¾¬“ü”¼?º ° ®„ßœÎÕYÞmv¶³u‡«ø0gv- }„Âÿ±r²;KŇspu=½†_ ±®ÞB//ëÒ ÒBí¹Ì#\ Ö9ôA;mËå ¬¼,ï-¼9ROG™à"Àý9æNù€bð.+äG|øMÁjðÛ7DZù_‡ Á:’ÜÐÍѲï>ºv¢^_çKÒA4vÍ'ß0*ˆVluÃÐB­‰.%ÎñÉÃBd¬÷&j¸àK[= /Ûšbž>IƱñœyKå^Ÿ>SY0g I*\:I9W„VxG“iÓjGø$ÕyÎW‹šY\Uv`ågÉà:' C°=À;.Œ•F) v°¿ü}&fƒÊ *,›ªlpE9.SZ4˰mÑv¢^_çëÏ* éqñlÉ, £ÃÉœ…I>Î~ ŸmO[LÄSUÊ„ŽrœIÅ홣q8¡Ã¶þy#\ùPãYx!X† |»01½ gR¤×ZpÁEäÃå“V¥g¾ý›Ì"÷X`mha¬>š˜G®ì{Ζj7$ðòƒsõã13õ0?}ù¦þ»>ÞHΚ³VI$GÙ^³2›ùFêò5 VSÈ‚——Dšx‘€Ÿ :uÒB-\’´º8hþ>uÑàZ]]…£Ÿ¾Ž\¨‹ºv§ª”Á”àM»®5qx}Yæ £”Û`ïW7Òêl ‹¤Å¶q\h®®Ȱ‰ €K­® `á›uµNÀgß,ÕñK8ý…=€‹ ­uiqU.Ê|v!Õd‡3qOèg{o€Ë›êD…z$só@ p©Tâ5á(—RÃG¥ràÏ šÊã¢åV p¡.‚åq.%EðíÒº.šGWîq`å¥Ým‚‹ÐÔæVxÑáïS "6á¦v›ÁÛáʺHɧb¯¾çýµó\ÔÅ?î¨ [DÎ+8J: ZÞNC7N¸ŒÐºË¿¢ÌƒØâ\h ùLÍ’\6´Ÿº—y±,t:9ßܦ\ù–.‰ØàÒÕ£„ MùÜ8Éܵñ!€K{¾œí€î°™ŒK®³ÀÔë£N«E?G¸ÈB Ù2¤^Óeuø;EæÇK‘9Ö I½¼bX“OωNWàF‘íH¼¾ŠPÁ’a]olÜáZd¼=K¥E\³i¸L5–ÎcÈ×”û.“вcÄ©Vwh¸,Ê)Át…b7–à“¶©§ö*ë)òqæ{˜d€Oy*$qɹ–,1À¥7×»k.…¤ÈVs2Â%E3 #eëšÈ piw[< ‹–ë:6sRC«è $§ìÁÓeŒÇ]ñ-ý,x°tòΨƒÊãÔù –î}òÞà úéíBÞCV§NQd÷ä±›·Ú¯=Ûáëßßî]Àk‘Œ„k»›®<)ïåŠD.äC:*‰è±£ñésTÕä«ùŸw[nbàéÒp¦kΩP!9ß®®éW2¤àNv)&ðí³XǘN~—n^²-‚1ÀÅ Ú¦+g^Ê;1ƒ—WòN´IÍ{0>]È{¸²—…¼›”ÀÆÉ,ãèNU)‹ròàé³á\Wø´m¤"(¶ Xyi8[ºÊ¿fEPÔ<§+uz´*yÓGÝàO’kò¯S²ÄùMjü):ôzùv __%Ë,sæmlQ»†ÑõÞû€ä½XÄͦàÒ$Nv!Àp‘?lý•µ.ó£a—ùÃÎ9˜?Ì©›\eQ¤ó‹²OèåETÕÆxU©Ì å½ xº¸ªº6Z¹¼‚O—I첃ùÃÅ"`ßg¹ Ödœžä᱑éI™0As1ÙÀËK»ÛÚ´Høgþ}Ýà€ “ÃroœZ:m»ž*ÛNMOúz7=©ç@}ûºôlV€ØØÓE¸¼ÐÖ(Ë"½bÈ­Zf‡ìØ"îÍE1Â[ç+ÛTxÈmu•j¸ëT n`–q¹.: ŸïÃå®D]áÞ¯Å.ȾV*Áä¨Zö—5\:‹EˆÆm1"À¾ ¶&v§kJj×ú.Lpa›+aSV W§“†KÏ–»”Š "— 4øvuOŒ« ¼ëaöo_—UÑ&7+ÇY=ý½©YK­]ŽP+ôÉ®ãf!¶jçõu:CopëWÓáZ+”ût„þîÊY®Ê𣰠¨J¬†K­Ã9®.€ N/\Ÿ¡užc»NpÉéñJ¨•éÐs‘ød'}|ä%TjMkK>Â…Xw¹”bMÄ.Å:ø³³·tŒ¥ÀÊ«¨w8õ±tsí¨á2ê]ÛXAó:·Yx\ú¥ »Ï\¹˜¸ºtÇôÓâƼfV§˜×ê\JêLØ6ûõu2òÞŒgÛÞâï¿—åy—ÀŽ’|D02k¸ô¾…”¡Ãº\åÛ±à’ì#û€s)}Ó6ãËÏb]Œë oã>Ež.ÃáU%¢ibpIöÞ_l =Ù©9.ÇoŸlør-¹Œ{yŽ­­ÙŸ¶(4·°ÎmfðtÙº£Øà xàh´V^zÅíµò2 ]«„5\—㢙h‡ÿ <]ZçÍ #%Ù3ÿ>np6Gó&mSã¸×Õ}¡' ´6<¯¯²#ÏÒ:¯a —9ÕÑä!‘R9¤á¢¨§Æ¡ÎEŸ;  \¾^Íaˆ¨è ¯á">Ìœ $…øvA·\ Bù˜¾}ûô«¢6]Bæu¶¦ç8w¸4¯[Ž6¯Xy)½)èÖ®:3Ú÷‰‡}±¢¡›«¨4ž®x8JEñõþ#\ðpͤF[þç6N•þ>º·sœ/ø<ìz(§Áe|ø_(°¦Ä^^»Øµ¾dÿk;ÿú:y^Þë¢:‚„£Ò…èqörjZ{€Ï…†¢-ì*úØx t[[:˜(â{Äf€K­Pè»b¯ à2k¤µÔ…k À)G\«W;9±†K±¶Ö0L ó¹IÆ——ã”äáØ‹¦}ÿWwƒ¥ ‘›3l\yq9WËUÄ—=xùY¬­+Ç#@±6=à3®ü"5þÈï~S¬ü ±ö®5Mip˜a Kê•C¯¼ŠiÙÞì 4^_§Ê”·nͶõÓîp Ö”´XÍ›/m€Ë˜V±CqÚGìíݸì‘Q[VB±v½•ÒŸÅšjc˜ÄÚrì|9À%ÙG{~»Ø¢µ-øöo2O+€Ò…5“:‚§«¬ÐëÛ[‡Llœþb‘$(ï92Ø8Áé.Mð:íZ_åéØyvöÄñ> owkì «MÊÀÆ áaÑ'd¯^þ}Fxƒƒ»õQ7®ÓÎ*¸¾[»Ðg?z¨úÇ·›lšÚm•ìms8éVesuÊà*tuå¨l®ì\6…JþŒ=I7Wêgs€ R.×Sö0±2„dÁË‹¤-sÕw +šk¾¶†‹ÐU1D¯A²sèŠm.ïÀW›|A·E¥Äˆ6î_Ùß4Õʰò²ÅYˆgi‰¤Û€ðobrs$@·+<‘†+ºuôSoVƒ?S)Ø‹ÞÕpdhEÇØã­ýåUÊX1ÆÚýÿKï$ûåž\r fé7Œ¢[¶WWteE÷î}\Ê%]I[² ©þ¿†ër€N+ãMÛÞ.Ë÷‰ì$k-“Óð™n#êªikBzÐð™”mJ|ZÑ£XU¬¼Š=¹aH-=v€ ¾LE,_Ö~™ ^^"§ëúËÍÚø,½¶Ú 8-ÚöŽ¢ãÊO|Y€áàQ¶êÛßé´úòmÙ’Ê8X×o«V‘pê1Tz´M)|9…ü?¼ÕȦÕ6 ðXûÄØIºîèp{r>¢ˆtY_bsŠ`ÎЙ•§á²qhl½v…/Ú[OW¾è+*+£Jdš)8À¥±s†§lèµU\µŠ£ÌØ›eøvAÊDW»Žé^ô˜ûfѾ˄ϫ¦NÒ8çæmà‚­«G3b¶6ÝJ^^\ŽÍe¥éÆU<] M/‡±'—€Kc9šG˰·Ùú‚?ÁÖ!×lòã̃ëõÒI¶vÅë½øþí $ÿý¹V8|*±$š\³ªTHÙú áª&"áØÖ:Š.}^áê>.;OÙ^˜?ÀUù¾M°v¡ËÈ® +­‡uýd{‹§>§ÞUÝCj…B9YÃ¥VÈ|ÝneI›ÁËË,³²B„´B½>•égÖñy5Ÿ¬¿ÇņÀe  µB9s4ôÞüwé ·¸ë| ýæ8ÂES‚rùB.³òå=3Ü8ÙÎŽ±Ë,%Ï þë/ÿþþ}~.×wýa”wÇV/ê=P¬¤Cˆ±TÇ–´˽»Ï_ gØÜIöÁ&YµÀrŽpÞ_Y»Ö¾r€Ke6®R åàÓe©SÈÃ}¡áR`½]t|Ù²†Ë’ÉY\´XlÔ¤áªuØÓ£LÅg°t’­Ã•F!E±H2€ËÚÄZÒŠºæ^[ Ÿå²×8»žÒ7À%[3£®[ñÀ•Óêp†)&t‘ŒþvÉ„1øÖÚ«}WaÂ)æ ûØõ¾ï £½Nå†û^•;a»A pU\˜,á\ÌL:\FŽMËÍ’×Þ^î3À¥`ÅköŒ,Bß.åçì@ºs//‹(/zÞspu´¯"3q´]¢¶¿]IMjE‡¶ÎEO—~ŸÙã€i9ÙáÚ’$χøíÇ#Mc§Vþñ«‘3jçÛ#Ýá÷?~›LÌ¡÷ù/¿aÕ³Õ¢ ©z§ô>1Öa {@R£mÞ’¾tR.Ë µÒ”¶)ulÖ[rm/Ij}=5/ž5 Ýƒº®J’Lˆ¸Ñ÷ðÚ÷+³—ÚU§¸G&;\– ú+á@ÊeÊíp pÙµ(whb6h|9Àõ"†£,êè—r™`SmUÂÍÄàÂÌçHP-—‘zlpX:ÙlÇžA]YÕS{!k¸jév ¸‚uÖ®J8¬£bY™o{ATû®××¹ÁúʇzØY^ÂÁd"›aþ¾uÝ¿?ÀÅÑö¹u(4Qn Á…Ò¿ÒÕͤ—Ùpu‰§¿Bž§šûyúöe1J²) ±w à Ùö ¡O@àâac¸yS¢ –N³‡” ‡0ýt%c‘Ç ÈRîíTúË+}\Ž|¬ëë‹>ž³×úØä¬àÀAïQVé^ð®Ò\‚Wþ:€Îj¸šípEÔ8‡Ô¢ ãË‹@uÚ.>ÚÄà啥⠵¾­iØ ,8ÁLWUé{ŽN‡Ïz“Ù¥3ƒ^iJÃe–ru"!‘ñÔÓXǧË`Š;3€å]få:>ý‡»pëé.¯Óç¥A C `\J†OܳÊθ”Œp ÖgÞö¹Ó .HêÑ_䬦ŸHªÞ²»Àpéæ*';#’ªm’\‰ŒfåÖ©æÍõ;’ `ÓæÞÔöÂH'uý¿kL÷ÿ~ýë˜ùãF©àÑÑ%ô †ƒ‚Œ7½8¤ÃU‡[‡Jö;)i¸ôSÙ«!£Ê{rL>7櫚ïtõȈMš¥á²zäk(Ç?s-Š,ôW­ p—óoÁ·ËK_eëB.ËuÉÁû*Û|£Ph¹1ô ŽãÊˉ­W{w]=\Ä_Üu±bm£G/?Yiµ-ÀÕEW éC«}C~ô8S3ëÙõIÊ¿~û«‰ÌõÏ·mDëÝÑ0úö”“ÇmÏ]à²ä¥ú!¡×5Ç^G×á2üOWæ„JšçFö\ÎÚ)J{Élï¼3ÀåÙ´1³>ŽG½5¸Zpƒ¶Ð2pu6]@ý_ÈçÞÿe\yq6ËádtëE7‚•—]bA/ Ú×Ö”óðÐÚZlq±Á_­vtr–,õü1Ì.K¸î»XÎ&žØjzòô—žk¯®‚ÂþâØ¬ÿ…kº?¾i-‡ é#¬÷<àÒá¯N[ª‡©Gp56ŽN?ˆ{E¤øWQ`G>`‰«Í®4|n¾ñpXXh¾ù>Gp€Ë ŽÞŸõy"#ã‘óà‚ êxP(qå4 ½U`Ç%[c<`å¥ÄÙ£­¿”¸Ä&‚C«ØàÐójúqð¶»Mÿú{í—~ÜÆ•ÄÕÖm×¾ÿ··ýýïͶ¿Tl“ á@dZJ¸œ–æ[üq€«Ö…ö¼Z('A† p)tÖVžlßBëÿýñDzѶ¡ÅÄ`ÁËK_€K™±Ñ“MÒpÙL,EtæY MÞG¸¸Ì(c£§çtpyæ}6°„ªT ¢ pyæsDgþa;ðòªo‰#˜½Y”EP+¯ÉÄ÷: ïÿ¯Å Û?‡£}üêËVÿ×õcÌ%B2> ðSû¿\QÙÿϧï'üü—‚Oÿ»„þãó ?ÿ¥àÓÿ>ÿ~¿^¾ýë™—ÿíûµtí_Ï,Ýoí鿽ïé×Òµ=±týÞ-3ƒâ[?½ßiÅíöü³½œEÂmtþ i…˜Údû.§j0j÷óÿ†¤wûB…ë¯KÝg{ÙPrîîòéõ²v1ÖW~Ä3j1>½>ÞÙVÁøÙ^&˜4ÆÖß^;–“†K²/–FßnëÌâ¶t×EÿÿgíݲëÈqmÑ®¸Ö¾ÉO§Ë©ôòµ\•yúß‘Kƃ Y!î³Ï‡GiÍŒ˜xø¡”öôÝ’nÎÒF¡]·ço¨öj/YIf/_ùöÐ| çG.!•žÞCŒ§_¦˜wQП·’„³oÏ!´òíœï:€¯ðÓÄ‹Û(êÓÛ5ý$áüé×"±ï¶W˜~1—Ás5¯¬|Ý8çOwç­PþôêÛ—ñò§ãϮҼòô֯ݕ„à\ã¶³ß9ºo©ÿÿuÑ…˜ª¡=Ý›%\°Ý¾gë{ꋹò‚¢ ¯¾ò5ÚpöôàÏKþœmZb« í÷NßßÈ6íÂf’p~Û¡þ* ¦­&r©Ë¥—#Ô§Ç84nÀE{’³]çôôöü1¡‘Õ÷ Ô¾òô-Ø%œÛ÷h6heÊFÌÄðhü•§ç~£ÂÙÓm›Å‡žž·PºÂ^ ì(ôU©ëíy)œÏ°Žg.`^ùºð£y@%êï\´SWžø6ÎÙfË>¡§·Ã˜¾q×;ìzíéŽø6Î5®ª%ÒwcbŸŠùÅ\çh¼ ã•§û<ô}À¹Æ¥`‘¾ïb»‰¼<ü û× z%œ¯¼-Ê|r) ©ûÚ=ê¯o{z±%œ{•áÌD°§§Êÿ¶?ý ôyÅÌklã}”p®ï)DèÓÆjyÍpJÿé>í?ð錬h\eþ¹»FÏßïïWæÎÉáWþŸ¤¾~e)DßÅ·Á¯ô¿¡ðFø•äà鎷ÁíZh؆^y÷Å®…önøPbî)ã/v- ´÷ÂÀúôvwùJ!}±ka ½Z2Æö‹] íí00¶lðEÔv- ´÷ÂÀF•¹uëð¥0ÐÞ ›Äï·}.øZhï…GüßWÕ—_ í½0°}{uM|ÿöµ0ÐÞ ÷ÇWëÕ5n- ´÷ÂÀöðhz×»Ú{aà.uѺX íÍ0ð »îÛØµ0ÐÞm)e,ÝZho‡û`áþôµ0ÐÞ ëÓMê5¬VÂ@{; l£ÖL·2ka ½ºãPص0ÐÞ ëÓ}‹:Q/…öfx4Míá¿] íí0°]¶L»Úw„uS†¾/…övèSê-ªØ,…öfØÄÎõ+©õå—Â@{/ lV&7|››a`[:G8p3 äð›a ‡ß 9üfÈá7Ã@¿Îð¯=öaày˜øU9Æýûv{#¼G_ {¼‡O ’Òá§Ìíñ…^Ÿù×ÊTÌßÀËÿù  ¼ñÛ{¢‰7À{ Â7À»üù7À»ò7Àé°ôÏ÷ŸNgnÿz«Ø<\ŽÙW2‡V›½ à×åÿ¯d.å÷bs -²§M†| >Í€»'S´IW¯ÁÉ mîÎkp2ë@›ïVþ2‘_iKveŽ€_õWÒ»YëWÎá¤×áWÒbVë‹üêÒ}…Ýyóò±?´ TºL¾Î´ÿàÛûoäùqý^ë›ðüïŸ/ýÛJ»Ž‹™:ä×5 ésU‡þòÇËñ³æ“`ëžÑ?´6“À?}þÏô«£ÝyýÃ÷—/ô£³…{yùѵßÙ¯¾µ?<ÿºþpô[¾ÊÙŸªU¶ûŸ>úãÛÉÇ7ôñ‡¿þ÷åÿ£ý~6…W©ûýÕf÷Šðö‡ÊCôÛå×Mð—Ï_¦_÷öÎךú.ßß‘ÞôÅך[GÁ—祜‘¼ÖܦÅsøSû'›§‡îôŒIÖƒ•?œ“LÕú×ÔLï´ð)x#+òtSgÓÝiGòué›_—§ÒÞÝ!ß+3å9›®v~ž¿‹¡„£¨ú,ûëB›S4&x«âˣ؉—cM ù*ë¯>õôåé¯jÐPw§ŒjøB“é²°ÓÒÕ.ôö‹? LÛšxÓÝ&øówú«v Â÷5¥È. ±Ù¸Leßn¿æ{®éù'ÿP|Œ~.p\œŽ±|çšö?˜c$p·¦ïnMßÝš¾»5}wkú~À¿|ùû?Ÿ?ý D»™=W‰‰€Ã1+¨D áˆغïrã0+¨DÀဎø‡cVP‰€Ã1+¨D ¿±‚J`é&V0ÅmçÝDŽXAÏ×MKXA%×Y¡ךà³õ¼»®ØP¸`…3`…£ „×þŹãüÃüôÖ•<“Êq‰UŠiR+áœTÚ4VH*#55;»_tt ?¿Š± úöéé퓇œÔæsøSû'Uþv…)÷ÌÉ`›ê9¹òœ;‚MT´'žÒœq‡kcŽ%]ì' ×që€ÏÜ‘öÑÚû]‰‰.Œk§ÿ)'Üáë·¿ßÄ<…(lÙ\úòôW*ól!}oCлB—Ž)•.¨ï­óøv¡ü×øYßÃIÉK©›•¿TÚõÅK/À=l9 ¦ÂÝš¾»5}wkúîÖôÝ­é»[Ów·¦ïÈ9œWˆ€Ã1+"h×fºÐœs/BDÀáÒ‰ðÇØ7LŽYA%Ǭ øvÊ {Î5{•$±&ã3øvÀ *¸Î ŸŸÿÖ¼€ÖW²Â¯JA ŸYáP_¬°C´ùÓçóK¨°»Ü(OŸûÊìÜoY¼Ý–€}gŒ“pFiUnöº%Ii¦¨™6ŽPšÙX»ÂòÀ¦†É¦Ge>6íj”%qk”æÖ(Í­Qš[£4§RšÏo 4·FinÒÜ¥9Hi¥´6/o 4·FiÐÑ9 Àâ(Í­Qš[£4·FinÒÜ=J‹m‚¿ÒÜ]JÛúÃiãÞGiî÷”öç¯ØK;¢ìøú7¥´ƒÔ$\ÄnÆ+ÜÞþˆÂeìf²»uB%ð¯¿üš_žRÎóoŸkØóøöy(´W¾}LqfØE¯|ûD»Þâ nCK·ûܸ¤`:‘c‡?=Miâ“C9G…Ìég›B¯2ð9Ë\C?SÌ9ïâǼí6÷nvÎèÜ„ÍDÄÇÎõÞMÎO«|)J^Ú\u)œÅ—6¦hóXMY*óõËÿùëÉ2§t4ݪxùõĽ©Z²à_¾>¶U÷õËþ÷OrÄš]/N§ðoŸŸǯb}üú;Jˆ:Xï³üö9ùmm(gc| otÞ`ÀerÕ·¼¡¶!Ã…ÃgB5õí±qœPO)Z'„ºß³ò'Ï„êc´Æâ•ŸW¿Xú‡¦¯%eå '…èÏÓ*žÝàÆqâ 19Éu{ÉF¸òñ•ã¹äºâŒUV~¤œµ¶®³%©q3ñ퇜ÉÄu®DKànëÜ×¹5®sk\çָέq[ã:·Æu¯¸®I%AÇŒ¨’ „Ï.f}B8  ”pĈ8ÛGÏ 8fD•0¢J‚ŽQ%A¼òœUÄ+O’«ÑnF'A¼òœ% îªä¢²òŒUTVž1¢J‚ÊÊcFüößïêÙx²2¢q€‹`Þmóö™Já’ÏxX2¢OŒè£Uêq»)ãß>Ýñ<Ën9#¶ÊHåÛçÁFóÃ…áßλ0#c•oŸG )E¿öjù5àOOÓa׃ñ5â LßY9ŸÏÊöŽn†gÐ(?§%\Üœ3*xÕ®u“:\z[Lˆëœ'9ߟ‰Ï>´i¢Î"®ËmÄ2€OÄçÙÆ.xkåÚš¼¼ò´èw &€pzKq‹¯¹RÎu®e ¢²òãW.š3q¹¯üX•â'…uk\çָέq[ã:·ÆunëÜ×¹5®Ó½?oUäp̈* JøÌˆÉ¥Í•%1"&Á-ˆ§cFTIÀ#ª$à€UÄ+ÏQ%A¼ò¶lÎqãˆñÊsF„$‹-ÊÊ3FTIPYyƈ* *+ñ??ÕûmPއû —G9Å*ŒØõ’À%#ZñàJ —ñpÖâá®XüÛ§}.âx¸ô`žût·Ê+·±©ðoga/`Äã JùöyŠ¡[+Vþ©ý“ziq»†àN·±ö+[rå6äÄ&†:Lñn¤\T!¹óìuæ:ãâéò0%b®k©úkD߀‹°7ç¸yx˜ÒÙ8%¾£ )ö5¥' mð øö¿æ*¤\ÎI®ÞZåf/Ÿ.ªµìe‹DPDOŸ)͘²Å)Í`‘~ûDi&" hƒ -Ý|œ‘ª¾@ifǸ[#+·FVn¬ÜY¹5²rkdåÖÈÊ­‘•î¾¹¢²‡cJSY ÀçŠKÛæ;«,&áˆÒ ‹…‡cJSY À¥©,Æá˜ÒT“ߎ( ¥åRÞœ+(Me19ºã6«þWõqDjmw¯ \ÞW³ ¥yà’Ò¢‘fðò‚ÒRò€ÒŽr åÛ§a^G¤54°Ê·OM ¦4³Y«|;;7P"ÒÎÇüÛ§™W.`¢´£Æ†ÃŸžæšS²9OçënuÛÆ‰@‡³’—ýÂ)^poBì ·®4S¡»ñ RšÞóó )—éÇñe‡WÍøV)oá”Tª‡«R0Þ8ÎÇ*Û;¨§S°²qŒU V6Žñ±JÁÊÆa>®*ûJÕáYNòcDÒn`Àe½Žõj‰Ž„Ëz]±p‰Ž„£z­DÇ‚§ƒz\¢c6ôòÿ0ÞtÅ*…<£Oýö7òô`~úöû…<ÓÆñB“WÈÓáOOó5ÇÖâèî>_ÞlõÝNJÝÑ@•n{+Z—7«‘±Î.oº´Y|Y¨©¬„sïÜæcÆ|y³Ú’J* Àyµ-øò¦uA-èRq¶VáI‚‡óØáM­?=:Oí¢ í[Bø8ûѯ‰¼<»}iS<[]µ-a $ÀƱۗÖÙ3•Àn_º-9°qìö¥õ%!¿Û™v{ÀÉ'¶ùqÁl—Y 6N~Øó_2EA[l•Ÿë€ªqm\Û’ÒM¤7ΩskLëÖ˜Ö­1­[cZ·Æ´niÝÓº5¦ukLûJɤW)˜Ã1«,áˆU –pÄÇÀ!¯®÷À«,áˆ1oÑp8æc•‚9ó±JÁòå«,áˆU –ð™s]¹+¿(À«Ì့hT §óq ´¤mƵþõ“õ(W'8oHÚÃiN¨À¡*-) ÿG˺úrÖ ï/OþP©AÿGïLl£’$(Qyùé¼((IÁYo%ÇÿL÷íÑÜwn Ò„¶FL‰ÃE!OÓÌ·L@—7)œqG+DÁ|ëà V^p‡5ÛÙÈiŽH‹Å§ÿ=+ÿuç„ÉTªuNÒf¥¹M9weËίÑ97NÁ¦ë°òònMeܚʸ5•qk*ãÖTÆ­©Œîì~7Ö%ÇŠìp6nd")–ªKŽ Úábxy¬Xª.o'ŠeZJÿzy¤Khé¤b©ºÄáÀ”¹¾BŸÿú~»¤ÂŽöº.²â#6˜¼~Ú €ÀA¿LU㬄‹ ¸¨è¥Ê·¿¥¤"Z•og!rîi'þí“öfŹ·£Ð_jE¬5Ù+jÄÓŸžæ¦Û-ùÀùãáx ±™K*Ž{ãVÞ‡úز®Qnœ¸#°Ï©Ãùîq•ŒÀESÎX`‹ÿÍP‡ýóeôª²®M£KÇAÒŸ/¤=U~HÁ¦žÈð/|îÁÇd84ÛCi—µ€Sç¾òBˆW û—oßHAmâ–œdÅ+8U?VÜ<ýè²Ë@lŽ}'ö¶üÞÉtùÎ*9â}'e·•yN'‚ÞÆúØû~ï‚íû”¹ÏV™<rÀûN‰/nÅÂt¹3`ãŽ}?~gJ]¡räþÎ}¿þéÁ»’“²ïå: )>}†ætyypÖx§í{—íœÛÊØ÷QÎëK)^Ù÷÷5jvü–WÝwmèî[…û5ž÷k<ï×xÞ¯ñ¼_ãy¿Æó~çýÏ{Ý}³ªàpl T áÈRýß‹„#k —·c7w´€€Ã±5P €€Ck Ö@5ެjð¾sk ¼ïÜà­¥slß¹5P ÜwÖ[kOÖc ì;³ªPöYÕ(ûάj”}ÇÖ nŠêõ‡ˆjaöÁ!^¹5èÆäk@àÂŒ€V= pÑÀËŸ”•o§×Ýb@µ0íVµ‹Ê·#còŠ5àßÎî«ak0·ño§ç.*Ö gzš»˜Êæ6Êéª:ßý¯çtž]kbú7AŒVÂÅu·dáßúZ;йµÒ!¯ŠYÁQ¼ü\Bk¨(ïüš]jlðéº[I.žµo”iíƒMqœ±•§ËÆeTHmC¥T‹Wž$¿­=§K‹Á^±‡W~ºî`!ufo,\ù2óYɈ­+Yu»£²ò½Å ù¸FÇ“ê9ÕhÍ++?~åÓæE³Âæ¡T©1äé~ëü×ù5®ók\ç׸ίq_ã:¿Æuªçk|TIÃ1#ª$àó=¸J‰Á«$(áˆa†ÃnRl0#ª$à€U”pĈ* â•猨’ ^yßrÈI%A¼òœ1 :j"=H\Œ¨’ ²òŒUTV3âÏÿþ¡×ƒD÷·oí.» ¯TzôäË\€×f$õª¹€ õÀ¢Í¿}*ûðénßê´oŸ¨ÇF¥ £×ðoŸê6ŠrH3Z8ðoŸê°µXÃtøÓÓTx±g]Ïñžl£÷[-:œ·º2¹¤ÿÝ¥ÕD g9ßÀàXn4ï'pQðl=fÄ’{Am‡‹kt¹5 ø » ´á8>Ud„ìmH€+™'à´Ö~îHX[BK5Âè@—n¾lç²;Ñ¡Æ-I•™ :êÃsÛ9”ŽMqŒ“£O§¼yÞ\…Ti¶"¾4Œñ5Œ1­g°+?ÝÂKÙš€¨2lÕ{ŸoáµÓmérO`¹ˆÐú5ªôkTéרүQ¥_£J¿F•~*ýUêiÓàUåpL¨*‡J8"TÀ¡Ñ— x: T•C9ª½¨‡r8&T•CªÊ¡Ž UåP¹tˆPU+Ïš3ø˜¢Ê¡Žsèf X:@¨*‡8 T•C%üB­Ë}ÏC±2®EÞ6ŸhwêÊÁÇ?Ÿÿø5ÿwÇïxòÀñ+'ùxÿÃ8‡úŽ'œ¿ºþð/ýƒÉãD€ÂÙËo(e>ú€oŸXû€¢Þ=}*eÞe@÷×ÝÈô6R¾/0ýÕÁ„òcßZyBúÇ˃"¦ópåÿ¥¿ò6kp. ›ö¬Í“ûþô4Ón[ /}ÚÊ ­w†Xù?þøò™öŸØyT;•ñYÂk·xDÌf¥Êðã¦ÝÈûÇ|NGöÝ« kÂ.v+QQX%\*¬1šÂ‚— k ÂZß­Á k…Ep °+ìh_Aá\a/ª k­“p©°.) káÊ …ušÂ:¸ò“†芦°‰ »ºp-PX±ïRa­… ó6.Ju8SØŸ‹·xxx%z ë\ »eËáÜOjÏHPaÛEó¦ÿúŸjaÝ•2æ ëGÈ2à"+~ŒÃ k{©,‹ˆg3EQØ~Ò@àRa{¥IaM0Â')¿¼PØP`}ÛÐÊ …-+¬KÀ…ÂFÍÂzoÑÊs…µYQØàÊS…­ª ŠÂ(6/ÊËS…=œ“ÌáOíŸSÀÔæàÈÛ>GߪÈáâ^etþ ˜è·]ã±Å8ÕwûP¢Û<.G4^ -¿ís´·R’õýÂL‡ }÷f»ú Mún"WáÚùÖ¶YEßÝæ$\Üî3&)úî\hã4}ïÕ.õÝ$¤ï¶DôòRßMRô}Ëàå…¾{‡ tÜ"€s}OÖw;N” \èûu0)ôÝY¸òìZ F„í„+Oõ=–-9ån!‚ }?ŽÇ¾o†Ã…¾;cÏÒx¡ï£1E‡‹–l­~Lêû¡ò)HøìûçŒR¡°9+áܾû¬”+÷]8äû÷K}?Ne¯—¯o¬GÐ6üÎ!'pà+ú>‚CNàosÈãiü¾CN_þíy/@¡péÍ!OŸôý\zÍ!G/ÿ‡|^ùÉ!·Æçß9䓨ðÚ›ß9äþô4{Ô{ÚÆ£Û¼õ?›Ä¾‹Û¼M4Ѱv¸œ>½†é>oÉü + —þü¦à£kV‡KÞoØŸ7nôï®p=7NÑwã$\êû9òd̬„K}G-ï…¾ßÀͤ2¯àFÑ÷­€——ún}·.ôÝ*únÐÊËüºx'ôÁ¾MßñÊÏúž£ÓôÝ"±¸Åö}£FÊ+ú^C¡„õÝöŽúއ‹´ðÛf ›¾ŸÊ áüöþ9ä Åï^,Ôw{t«åö}¯Øï% ?~FÍŸ {êÖ—}ê‚ÕêÕœ„¿±Oݱ§.޳ÕfTô³#þíôÔ.dÜn#ø~Ùûtè—³R¯Ö/µñoÿ}Ÿº©ÉÿvÖˆ›Èa¤:üéioÛBE0d¢}z FÄËÏÓq?>Ä’šÆøPWdÌ$p‘ж^µ¨—žƒ‹w½ìi:3,nÍ}:|nGWã÷vÒ,¯Ô™‡à|+ÏëÕ\JÇ`~˜h‹Ù)¼Ï¨øhcë&l£…l~o5’•£U%ûø´Ûð.X‹7Ž\nÕŒ :£IDÈ oÜtWâÈÛȆ‘×N7ßœó×-•é01·_FÙ8r[!؈nASbÎÊÆËíHôƒoE€ãŠ3߸³ÜÍÚ‡ªV!ɳH÷à“¡B›×˜6¯1m^cڼƴyióÓæ5¦ÍkL›Õ⎤S0‡c>V)XÂYe°óµ4˜‡H8âcLÁiK‡ùX¥`|¬R0€>V)X«Œ7Žó±JÁxã%µV¬I¥`¼qœ1nô|㫬lãc•‚•c|¬R°²q*§5>Nk|œÖø8­ñqZãã´ÆÇiÓ§5Ï7­y¾iÍóMkžoºáù~È•ÒHÑ…¿ÏóMw<_ûC Rhßíù¦5Ï7­y¾iÍóMw<ß´w7ôNÙ¸ûžoºáùÖó¡Ø@lQYcڲƴeiËÓ–5¦-kL[Ö˜¶¬1mYó|Ëšç[Ö<ß²æù–5Ï·€²æ‹ßàù–5Ï·À+u¿Áó-kžoYó|Ëšç[Ö<ß²é|üÏ·¬y¾ÜÈc|üòë›êù–«½«Š®Ï.j8Òf1Q»é.»#z«õa5àìè6ú¼i£MúÙÞôòŒÎcÒn© ——£Mh¹¥ób­²tÓTd§ðü½²tø– çy•¥K—c ª’œo‡ó¥C¦L^r‘/ÿô4·X61ù³*›yªnøÜ¡¹²´gâô¦ZÓZçH8³%ÀÉ(­iO?&¡p^ªa6.[ñò`„h>Z,ÿùòùùú,ãlý½bÃŒI›mRNÇù¯ßŸ¦æØ£™…ð:ЉàòL®¦(¢§³ù)¶DÐBn¿~b2€[T9i‹Æxn‹ÚõáV΃„Ó‹8ªhx[º<[äíè~L6ŽÍeñ~;)¼Ú¢êÄà“ŪÆ:d¤\õaºóHàSKϽ-yP&BSU禬Ê6žB–û~W¹Òg­ó€‰ÂƵ÷vô„¢ׄk\Ä©Ì5à;íL´çSpb mÕ8<œ¬•í8e™¥ŽšÛ’L¯[&²ÊM]’’ Ô½ŒûAÅ´¦èàâP2)Q²*k&²¬™È²f" 6‘Ùlo2‘eÍD–5YÖLdY3‘Õ1˜‡\6ãß`"Ëš‰Ô¦¢ÛNdžTµ )ªw6[HI‘!Um§„#C mgc:RÕv 84¤ªíp`HUÛ àÀª¶À!Um'‡cCªÚN¹qȪ¶S™!uΜR‡l'€CªÚNsÈÃÞ°ÛN°òÀª¶À!Um'aHUÛ ÅFRÕvJøë†4«`sĆ´ä,áhÔº’tàéÀêIA g†´*µÚ!{ôò|ŒfÑ iŽÊÒ¥ÉÕðÐÆBÍxÖ iOÞ‰œ¢ÊÒMÏX5§¨,]5SÊ%i±f‰ÊÒMS8£bH½ÜwdHsyƒ!Ík†4ß3¤G*áï4¤ù®!S°˜¥!ý°7.5±¼ÁfdH+[s½jHóš!ÍØ¶Y¢•XkTÚ&(Ÿ ið1Ÿ= ^7¤yÍæ5CŠ Žˆô †4¯Ò¬ÒSà†ôƒ‰­µ4o6¤6[g€¿Ïæ{†Ô”‚…bóçȺ¦ìzΗ$m̓«ÒœÁ·¿nH?­ÒOk†ôÓš!ý„ i ¶ä7ÒOk†ôÓš!ý´fH?­ÒOÀÚ˜¸hÞbH?­ÒOkIÛOkIÛOÊÓx¾!iûi-iûIIÚ†¢j"9ü­IÛÓDøû’¶Ÿn&mw àÀ^ª&RÂß™´ý´–´ýt3i»ÇšþΤí§[IÛãÐ\<ÛË7$m?Á¤ía/ß´ý´–´ý“¶‡½TM$”:a/g"üü¥ÞMÖBãgFÛ–Ð:ßàyŸ-á²'p^ÕfRô¿;²Ÿ^žÙ{µ÷rV–Žî0'HBì'þ|é¦Sïà•#û-+K7ñ¦ñ¿;²çK×O¼7&ü¶ª/ÝôòF;²/b埞æU{㙢à³ì*WŠ}ŸTÞŒ¡4²®ÿ¾;>åAÚÆY­µÐ¨+#pžñfí…Âh_Üá_¿“ÁvûØoºŒ’šS*áS†£´5šwÀ)}HÁ1>ñ±Ï.3¦5v.øÄÚ­˜×ž£ÓØ-•ç)ŠìÌh1Cˆ:›Ñ܇Àysô§ë:Þl2(\ ‰à2Êž}(âéàÔûxùsG‡K|”RÇI?VCJÏxúJk{V~²ÑoesÀTaÌ.À}'9†’RʰvÚûÔï0UxX3aÍL„53”éd7û3ÖÌDX3aÍL„53 ™Èm@ù[ÌDX3Ðï>D©öƒÃ±1Q퇄OƤe>·ó‰j?8ÉÞûã`ûÁáØ˜¨öÀ1Qí€c¢ÚÇÆDµrå‘1AöÃï€Ø c¢Ú GÆߤ§ªcé 1QíXy`LTû7NÕ~¸nL¾ÿøùÛ-Ò˜tÅ"pÕ˜LÝÒæ±!.“8Y;­í LàÒ丨#¹Éñ[™a éËË$Ž>À…ÉñVµ2.º#æ¬ä€bB//ªŒ³b‹Fg^yZeìý–´|wbÃlѶ)×2m/ÿô4·;3¦ò^§µ»1*½Ê¥ÃEO5_Êyƒ}>ÓÍ©””$|l’Æãê¦0æz¸è~| (!KÙÄ·Ï6£ÚÁäl4ÀL¬GðÉfÔ˜,¬Aµ›Úcå íV[meéOÛ’4n2³•§6£¯‰Ïv>æŠdn3B©Z£ ï}Æ+OSHᘳ¢‰Ñoœ¯ü¨I­n·+€Î½'Ù7¾ò#SdΡdòÆd›³=àa¨Ãm¢ž¸.¬u¸IÔ)Ê6a¨ÃQ‡5¢ Q®{•¨ÃQå:HŸ'ò:Q‡5¢z«C ¾ÅâÅË3:0Ög »bVߦX çtn¢EcÁš"Æ áœÎ«0hHc(F‡ƒñÛ.$ÄàÁŽn¨.è¼>ÝDÄàÎæ„à3›œ‹G žKv¯<¡óÖ­< w)ÚˆWžLÿªAY €Á+ëñÊOtnJ„ îõi•\ÿÕÊ•3xµÎ)yeåW>½¦ù27Ñh+?Ó8sÿëZ—âúÃSGl±ýŽó.ÅÍUù€º;ßZç]ŠA¡ó^cCà¢K±÷hêHu|ÏDLpÖ¥8x÷u)¦ ¡/ϺWµÆSGì°Ã>w)ŽÙäøt)®ÿsßλ§âñ˜ ¼E‹V~îR\íîJnFÁÀ¼òôR‚+Þ¿ûÈ %$6SWrc·‚§ŽT÷O-Ïó|vR©¿¡D\”ûÎé|Ë&âöÅ•{*ÀéC*WÞ<‹!¿þý}†™n{]Þ3•0õ^ŽÖú„à|H¤³8…ä’bÏ#е€jã|:œÕ<6Úu^öH6Í”H±9ö‡-†|öƒŸy¾*Ã8õ&ß>ÙŒ]±ÎF4Ó·•µ©°ÇþÐ$N¤Ýè‰?_ýªl%¼íÏõ«P·'§‚íîsCŠ„‹jÆ`q7o¥¾ Òß|HdaªÔ¹ä¼íϨyleÂäWA±[Ä3*lÊÎH¸°Q™AUÕ:K¸°¶(3*R°.­¥49'ï"‚sk Ì¤ñÁ…58Š×DÏúªÕ,·õ!;÷)% çÖ çk¬ ³)RÙ š5H!@kPóWžTÖomžbR¬Á–ØÌÖÀ­9–‹bß‘s¿d b“…Ô kܑޔÖ`³›—p` ²¶c$œ…mÀ¥Ö U'Ï2" çÖÀD‡­Á¸MÒáÒ8ç¡509D±q¢¾F½òŽZ\ bé„5p¹œ+Ï­=ÕÈ·³Âw–P½n ‚b ‚±06ðvŒó!ðÙ”TéXé­5*qœ[ƒ­¤€kÛmÌpå‰5ØjDX 5°U_ €kÐR÷mŠT¯R'˜¸˜áQãH“ðŸjlà’ÅLüù œ[µ e´°R ìPª§:0Î"8³ÖGh Hš‹¾<Ÿ`ϰŠO0Éq/Ϭ3Åá e9màå¹5(!â &.¾o?õ &°.óú“áÊ“ºÌ‡l& Ëþ»Hlæ‰E=Í%¬6âØà˜éTβÁÉx›åÒ k`]ÈW]æÄóÕ‡}BçÞ=Ä×[1Úĸ‡b¼I Àyª'GóO€wâéà^r Ñy%« 6޳vó0ÃX:šT/¤%î¼tSedî—3“++léJ_º‹½&¦5桺€¬@®fË1­*¡ÕBžà *¥iwÄ\R–nô:L5š& 4B=N‘%¡Úi…Ôܹs ¡† <]äÎ×Õz „zå+f÷ÚUc‚sBUF¼ZSÐËsB jÊèå¡Ú²9 5 /À¡š- ‹«{‹ªuP ÕZ…P\::ªØh­F¨Ö"±a„jN;Ì“-Æñí€P·µ¥ JO—„Z½ˆ *€Ï„ZZâ? Bõ®µ• Î Õ› µº˜Bê@ÁÍ1ʛς¬nIÎÅ•°Åb¡ne̳bKG 5™«mï«„ ¡ZWÒÙ{ƒj ׊K/]™ 'Œ…®k›‡K7W¶Øà¡ÖˆCn'ÔTòȰWÇ]óPC±˜PKê:\ê•æ„JÀÎ=Të¢B¨£7Kµ B [Á×çc‚Õ…¿Ð—ç„z¹˜ŒPÛ•n°òŒP}„ÙëÝ–¡—ç„:ÀŒPCè•ÓÊ3BÍ´øs\ \y’½n÷Ƀ23;o‰ÍL¨Ù¤ ÕŽ1ó޲×ö8›3U3’//5V¡ÐÞv­GÂéCÚ…ò6¸d"*'ŒÞ(>§%Ú1¹‰`/ðq Gà¢xPFð¦Q+Þá’v‹-å¥CÊråE’:»Ch•§®3!㕟bóp^oe‡‘¶Ñ^yrY÷­DpH¡Ú"‡W¾ôÓŸVt,zyQ‚xÄ„°ßŒSV~°v´[N(áP#¹ï"ýœRNäWš\C?é<{KÎÁ$é<Úà$\Ðù1›Ñ9å$Õ?¶Ù:ôÉçtÞ‡–2:Źôå9çâ0›ˆ¾Ñ¹+9ÁÃH;òˆÎé܇ŒG$·ûŒh姘:®<½·´y[pú¹ýw‘ØÌt~^ƒt>*[:ùÇ1":¯âP‡ :¯a¯ ¨¶Ä¦Ñä•ÀË;ó­¦;S%§tžl, ß#máx:Ÿ¸jR–½÷BlDZ"»”,¤ó`œð™Î«Žct^w4¼ò´°ZRé¼U%à•ç’Ïxå$ óq‡ƒ­üT’ST*Ê£WV~Ðyõ{#¸´¯Š3ÊÊ:¯JÝ?ñÓjþ¸÷nftÆÉ s:÷Æ+§‰£¾‚ÀEþ8%…ÎGÛk—tîJwäSFp‘?Ƨ‰6õð‡¾¼È£äx:ÏŸLw”˜ÀÓÅi¢ßpº£m ZyFç>*°CŠpåiº£}º×òljÍLçѹ€Ó±wTèptš:¯¿™Ní(ÖëpIç5$Ä¥‚uí\œ9^³±Øib ‹L–ðé«9È.£‘j±ÍùqNs*ÛCI•¶#>f“œçTÎe è$8¡q¢-€)~Cµ%Á… ‡ûCO«sO½,/(¬:ð1ã¨0%pvšX gú–ÐDDV¢Å{ç0¥š2RÉFábk` Ø8qš¯S žü.¾ •çÖ ÏÊáÖÀã•'Îý–JÜ”\MÀbìAý|l ‚+­AAÖ „M.°>‡ì5pq⤀­Í%Eh ªØ §ïxrç‘” æ‘ gG–n;Îï5ÆH¸8²ÜŽ ZÏI֠Ƴ×ý¢ÉTKVlœ°6Çh¡5¨q6Ø8n 6,.AÝ$œ[w\ÿ5ÐÄj Ϙù(4D œW ”³£J‰"ˆcŽ€°Éy‡6n¶­¶ß‰øõS‹ ¼÷8sïǸ—׈ Ž Z' Ö $¯Õ–$ clà­Ý>&8·E©-),¸FtÝy䩞J+èÛ¹5¸²dr^̸ñë§x«Ô–øÑ¤oZyQ[Ì+OcƒÒº3`k0ÿ“Ø0kJÄÖ õãÀ©ckP3Õ–Ûä:ü?~þ÷¹ZÎ Í„…ŠÎl†qGŸ;f&Z ãf“„³>8•<Œ9 Vÿ˜£„ÓOléŽ-fÔÈÀyâßúÝJk`ÇôõˆÙÃLQ[9àì ÖíÒŽ›Ì„ë. Û¸ÉØC âæðÆÍ}lqhéµÁ_ÊmÓê‚;›Dl‚©>ˆÅGG…Ú#7+ÍDœ‹7n*TL'š¬ËÚÆ‘²ukGÓzn`ì&ÙFÔÕØmL¨¿ÒB‹V… ‚óÐ"F¥P‘Ô¡¸¬«AwRO¯_ÂßZ„ê>¡——Æ$[%Ñ”vÈ^ì;¨<263vô”rÚ¸éªS ‹ âyW—”ì»4ä~>Ìx¾õÁ•pÎóu‰²Âó.xÞ]ù/Ql”¢„Kž7Ýu-etÛàœç7«ÜuM¼<çy`ªÆz©øÌó¡š@žO¡d —<ñétÊÔªACNJÐPR€+OﺖìŠÒuÞ˜„ĆÝu½Ž3D±Ñ˜´Ðáà<Âì3Uߪ.q¸ôú³É€-#álGÕ¸“¬˜Ù3ÒŸlk– @ÞFIútÑÖÌ'h\ôBê@IRJøòÒDt:½7ñr‡ kËvZqàGΗ|;·1ŸmKÙäŽv’ã%|²ûU"ïVmÙ¦‘ !pf Zq žãäÝæ$\;¸bñ]W—<\ù—)®*ÅA`b>Yƒ˜›osþª¾¾Sšû«'î_ÿc§Ó¦n8χÛï)ál Èî~€S@><@øüŽ1õ«Y_þî蘞֦/Ï¢ÁS@Ê8P ð}…h»›dâÔX¬F´-ÝÔx'î` Èî‚Á¥›§€T‹ø¸]÷pé(üÁF‡o›¶ £þô4s’)Ùo×-ð¿ç^0Eî»ÌÉÛ£;ÖÌu­«€3½ä˜À_þ÷y–š«¡É<ßôkàâÛ‘œlÿ*:a#GÁË×Oœzâ“@ŽÁdg·€àSý¤ æä7è»WôÝ¥‘à¬ï^úcJŽYo½ô ‚KVP‰@Â+`"=W;³‚Jàåç‘‘­·U‰@Â+¨DÀá°Ä¬PXc…°Æ á6+Øàodg(+„5Vk¬ÖXAâX!(¬Ü›XAÊlÈo`…pB‹9‚¿‹Â]VÞ‰}7+àóˆú‚Gäw¬ÖXA-u*½šþ×Ïÿ¨Î½õ vôl9&á`Ä_ Û*_|ÖÞóº(j'¬¾|šŠµ†¾%+/?Í ±§;FÌÎ_>Í× ?àÖ^V,ÝSû'mÕc´ h†kã ‡Ëax[9/lÒÿîLJÒÊჄÿüùe®`ôh¼»'w%\èõÑøþU…zý#ÉF_~ö¢K¸Î ù:ï{¹Ó‡Ô˜=÷yí«æTBw5œÅìÁ¦ŒGzVV p¿¦2~MeÀ.ˆ£JŸ~;P,U—$)–ªK.óÇf\̯Ž!vßö²mfDÏ8š'§(V/t§Oçú<Ћޛeèå™þ ê¥çYmÓËsýIJ`c“øö§§)‚x°Õ;0½é['fçšá¼=®ÆÏõ_ûõ—Íf5jöluý“NÛø¸‡ªYÂéË·ë/‰ ×ä~g.ôÇ¥ãÂÙ±(DeZ°‡¾}Ü– 2RÅZ×YÀçZ²Vlä€÷wºÞVˆ„?íz…L®îG9Öƒ—çç÷çåaÊlÜzHYá~MãüšÆù5ókç×4ίiœÇ'´qKç=Ò×5NñþŒ/ç¸×5ίiœâýÕ/Ïþ çïhœyˆ­±¾•ð·iÜ^ß«Ïüçïj\°Tãšƅ5 kÖ4.¬iÜ+ÞŸWU‘ñ^Ul·¡饪ŠŽôRUE Gz Uч,žŽõRUE°t³^zSÎ@¤Šhå¥^ªª(áH/UUäp©—õ¯íýóëßzêÐÅßu.ô²dE/G’ >uíø_Ëõgåå§ .ûßuüå)Ü*#¿LÈVyùiŠŽz2/—î©ý“jo›ú€SzÌ„âp¡~.dzb†þw?¶Æ”Y.P¬”ŽF *˽ȟ½<Éý…Ö¿¨L ·Æ, öòSêýêñ7ýwÛ”ãd"~y|ùâ•DFÊdéüšÌû5™×ríü 2ï×dޯɼ–û{åtZ.2eÖªÊÀáÜb…v\„{;¶ùÒŽ4)Cn“8\jFK׫ʀ_ž“6ÒNhvÙw:g/Ï5)C»£YàËOšáb!ŠÖ4#¬i†–âkÇÀoÐŒ°¦aM3´ß+'´ré fø7h.|5ÎÌ„™ˆÎPé75£´ .4£52KoÐ ìf¹ Që©1R¶ÊË¿I3ª—†_~ž|î»þóç§Îuu^ÑŒ®X’ßkÆ KŸ.rÜÞC™o zy¦Öz%­Ýÿ§—çP³–½–/ÿô4§‰mŠÅ™´ÊFß…«ÃÙ±Pë`TPÈ™Tœ>½Šv´W‹&Ú­³dàp)Úîhs|=ý,Nî;3Li÷ÒPYµcžÜgåË×8:úô*ò¾Æ`鸟tZ,YVP#ˆ2à~MæýšÌû5™÷k2ï×dޯɼW†nµá¤oy¿&óŠ£cìqFú;™÷÷d¾u Áß%óþ¶ÌK¾=¬É|X“ù°&óaMæÃšÌ¿2æÎ©ÊÀáX3> ¾ï.ú„àR3Tep¤PÌ(.ìp¬ª2€—§šÑ32«­)ƒ„#ÍP•Ã¥f¤ÜÛ¥Õÿ€š)2ÎC¯ßl½UËÀ(ñðÖs¨ôé“f€½þq`z:sî}±Ø¹ÞùüòsªÇ¡qÀç4 zš…«þ¯Î‚®§Õqo#´9\¦zœ9 ­Ø|s]ƒ„Ïõ“Å:ƒEÛº´)/Os¨%FÜvªßlðËÓT äåË$u½v”½Ñk¢­•Ão1†7ˆöoò¾.Ú(ÙâÛ+^QL´[ºÀß)ÚZ²¥xŸß ÚŠv°g»Z™†´Ùüòïm-ÙRÍA÷¦^~©é§Í[N]::üéi:s¬»­9>ñÏ_ÓmÆÜ®Úr¸¸ê´%î<÷»{™$³ÏR²Á—Ki„ü\lo«Évý« û*ùôö‰…}"¼ÇÇ€úíbTÏÙ™uzúùUÎüÍýѾ{¿y÷kûî×öÝ©jV oØw¿¶ïÐbG+é ûîïí{Lõõ3øö÷í»¿»ï.Z²òamßÃÚ¾+ÎMRGÌLûÖö]¡sï‹˾‡{û^i:DôíïÛ÷pwßm£é¿ýR _7£õ‚(ÇMÓØÑß§V2Ç!åÞ’ËÚËO9Z?éìå§ŒŽÃ†OmZŽ)ˆÊ½¥Ü}jÿ¤šQõ¸ßuý{nÇ•»Âvxëöñk¾·dÎ)Òÿùù8ŸmÇ~Kàs…C´!%تט`¬„3ÊŸÁ>+¾ºž^Âé··zö-ì§U  v8léhó€àsB5EuÛ6eéæšð³ì£-…Ó«éÙÒ‘úŠØ¢¨É9£ogî›Í&'¨ÉuM^:rç1„ ^T§¿o÷kúî×ôݯé»_Ów¿¦ï~Mßýš¾û5}ÇumÌÜö}÷kúîïê{ÁÙÒ½Cßýš¾ãLD]`Òôݯ黿¥ïGOCòíaMßÚ¾‡5}kúÖô=¬é{PÛ€lF%Ǭ „#V@DPZZ=]²‚JŽXA#Ãá’¬+F%¼tœT"ÀKÇYõ6¼tœT"ÀKÇYA!‚~„7/]™oÇŽRš—¿6ØÃdïš3壑Ãeò®ây:]CzY丑xë„·À毹_ÙGóОþå—Ñ~™1óáþò_þxþõ×Ôg8ìåðõŸ>ÿgúþýËß_¦Æ”>w§¿|{y¡³Z—ü(áß^ž»Ü©ãœý×~SÞôíEýöò¦o/Ú·—7}{Ѿ½¼éÛËüí篟ÿ§$ïZ¾ãP€ú±ï.”?‘ÆúõWZ¦¨~p|ÃC”ɘF»›ú+œ–(Îogoˆ×¢ÐX¬±ù©±ÿ~z<ïÓSÿç,üñýïGÖèò\؉dÌ™}øõiêñoB¾Ú_Pø·ÿÎ ŸÏOü1»¦®\–ðÉÕÙŸ6m=J8PÐÞÇÅ‹ÏÌ=ˆàå¿ówtçÁæ_ÿ›gŸ™M®¼hhºyçáè´½;xú|-g‹æšÿõòy6Ýþê¢@á¿>ý3-]É^vQhù¤Ô0¦¥{a} ®qŽsµêVꎀogv¼M“ý[)ôvaPøìÃÔO´»cW…’ã}º }ÿíòüôÄD{ÈÿíRßZeý5c2méL礎a6£åÏòÙ¬©Œ}&4…sͽèñ¯¹†Ý÷ZY ç¤P•šJOg¬]Ep²¹¿×æS8“M_àxùyg;L¼êÇ(|îOÝŒ‰Kç­ÝÀÊÏl¶²§g¡­&*_I†éé,Pvñ¼&É„ÖW8zy~ OVàtÞpø§—?ŸÌžó^;Ç…¶Òt¿üÛOvžž¦CžWèܺpu[pIçæÊMMt~ ×*>û û]¶„„Özuv™àß^æ§Û3ZdÒl·aLœ‹¶³ÁAÎ] W¼Còd«g¾ù )Mq$#š~³˜Â™pÙ~!Ë“/ÀçæmèÊy’3¢ ×µÿõóo&u)ì'_R·>¢iÀ?ÿñüçç¿§ñÛÞ×oÿÃËôk„ÔqѶ® dl/ÿu¾ì`Z%éõô.©OO“ÐêDݲWBuÀ¥føëÄsÖ¥–èDMàŒ¨}¼ZòpÆåë^óôôY3’Ë Ê¼q}Þ…3™O­= tÛ}?,¦pæÂ´é¹0m²Dpf&ZþË@ ½…339Ÿ3­¬|;sa\õúvaÒ6Ž)¬oí¼‘ÂVÛ‡^~RØÏ ta\„¢„3kà³1Š ÓO øû¶Ã…ší,áå k¶~_zÀ…-r!dŶåi{¤Û-ÈÓÓlL^‰9Æè§—átLÊ[éƒY)\襽’Š“*š–¸ ÎŒ”·§sBöã~- hçq¶WÌñ™õ2®VJÂYdÒ&%FE“-€s…µÎE¤°Î¸k8WXVXWz¤Kà"L—_÷òy^ºxå:ç}Ÿìpô×µNÖø­úeÀ¹®Œ _z:ïï¶]á×äÊB`ß¹ZŸúŽ5™Ã±ZKMÞÿÃQhœ´Ã¹ìÑžÐäh{»Á»6==ýøñóM¡Ð¾¨ÎÓgûôXƒôÝWMv>.µ9è§¾3"¨úÚ3[NõýãneÔwgâuö4Ág}/qËÀ@L`%œé»Oáôi….|;×÷tMæúžBòéÊó´œñØ%öÅ€ãú^ß1Ùž®©Î }ú¬ÖÆ–‘&çúúF™vþʧrMv¹ ±™Õº>ŬÉI׺{À5ÙZ©2ï3Ð.=joö3G©ÉÞ!uB­“Ýwu¨j=‡kª®KO£tŒôÛVE&c|R¿fo])Š£Q’p®?ÆþW™jÈ£„Oús^マ¯éÐ)œé¯Æ¨ •±•V‚„O®ë±DiFµeƒ“œeß*¡E”}«Kšz‚„n3xÉx…*%øtkšÊ{jF  =‡¿S3.87xGÕ=¶qƈ——i”lO`ýÕ=ÔY6uƒWí‘úë»RúhÏæ¦,ÆN|ÎõÇšó’™8"2=°!pæGﭞ@áÌvKÊ k“œëe²§Åbzië·' gv-W‡$À¤zì¥ÛNÜý\ôº«D¶Ù¢P6'á<©^íš…®wìû4@õã¾Â:¸±¦˜÷ýŸéD †sã˜%¬{ÒsòÎÌ¢³&Ás([ŠßÎãÖêÀs(›GR®<[£œWÜ«ƒÛ”!eñt©üöè'$ÜR‚Ú9n=¦ˆv›qùÕ^~{y“½Lcœö€K{Ù }ÿØŒn‹.”;“«³¾›âͰÖ.·]Áçþ¤,áTù?6›ìO‹%·Kpž¦ ÍmË–XôòL±.Vàê(z¤p®Xg/%™´Í½èqúv¦X!9VJ ÎxS8§žˆPï²Oá\±bÙχ_U¬säx$8œ)Ö1EަM>¿è¼KÔÓÓ$½rˆæz—ׇhÕWïmÂþfYñë~…sóî´ÃLeL[’pf/Mzt¼llö<}ÒŒcã#yck\Ÿ>›²¸Iâ "Â¥ã&ç:¡eÙÑÜJ$|ÒŒ–<¿z80e𩈚V~ÖŒJh|V†hÆ/]:~Vv&¹2âuøû\Ì&'î¦ X™Ô©²Ã…Éñå,ÇVÆ™~Ò%êéi´*¤=ðìÅ,#3òv(LÊðñHöKøì{¶\'Uò‚Ž*ÎV™ïYÒæqA‡Ùz\Dà"‡šÎ mfe\Ńog.fØây™˜›ß{¶P8³E6Ä+'ϼÊàúöŸ¼R7`…5±c8u1÷íqçÙ+K¶4¿!ƒ—ÿõsú•7y ‡çÿ]§鞬9/5°â¨æ´€•g©/ÅG|˜ÒGÓS87¤Ù)EÎyCRÇ=ÔjKäm‡+Æá—tQ¹ Ÿ~†qpÜáŒ.ÚÚTÉSbØz¸ÖÕáéi¶2¯8¥Îôoï‘¶dKTŠûÆ8c×R=ÐÂf»8g…¸m¨`Àx¿õx‹ÂçܬÝâYy'Ê_\pП•P•Ê>§Z±ÃY¸ÇxÄ›q„Gà¼Æ¦%Q!×3PÎI%m§WI«gvºÈhå©\£øP-¥„Oì?Y6t([‹^[EàŒ.¢q)áZJ›À·sï"ú >Ó…¯qXyîw×pÅF\‰gGôéó©êVÌy۔黩‘x:wœíÕ>œAÌÞ‚oaúU Él§ó9eðí³Z§”OûÎÓ¼Öô g´ÉWÍ<×wëxy¡ïÖc½åž= Ogú¯êe¦ï­­%Ø8^eœüI•üRÉ<}vœÛ Ÿ¾ '‚ꛀ•玳±×õ¯™*Í[ðt‘£Î6ü.GÝá7²ïòïS±Ä|ò›÷Û$òð§rèõò] Ÿž¸•QkæMê§v#ïs„"Ò÷êwŸ–À¹Kœ¢ïÞv…%pV?lÂUµÎëÓæœ×{ïaý°ËÃ= pQE‘¬/jã°ÁÓÙ©ªI麥2ߩﵧ³Pµ5Ãw8åx:/Âp¾xX?\=òö}ÖËh¶‚Ë“^žT,6ЮÍù’pîw“•‚ óï3Ð tö8C6/àÒ!÷£T¶ N+OúþÖò¤Qõó»šÙ:½¡°i”‹8hÛ)‹R^Aj«Ô*ãXÎyeLa«º÷…3k]®jS–!7-U*áL­s»p«Œk¸è%|އkÀ¯B]–Þo—%$œûvS GµkEÂy"¼zP™qS°ïÌZ[w 5ç¬à{[€ μóí*Øä·„[ÒIÂyfË_¤Â‘KŸ=3 -Ƴ÷ ‚Çì?¿«· ®¡šüܬгxú{K³TVH5*ƒ¬0º[¸<7‹©¯Pœ§§I†^»<àR§;F²B§Ìw7›%áâZs2 ^j+ᜲwð‚œk.€3›^m}ÞyI=œ&pnÓÓUPˤã¨E&ðÉOú¸×et)Ôl½³$…3µzÉÕÚZà\­c8›3òÄXެ¼8õŽÞ£ƒnWWµH8?õn­‚ {]LR'òÒ§Ï| L\Ý)ÿöò@‡ßq¯RÜëÃÊZJ;,aßì§§ÉÉ{õ<ÛŒÖ?~¨×ó.…¥š|œ`'á<ûs ëÊw±!pnì“ ×R†Î6ôågµ®ÎuÑxÈ}Ú…óãðF‰¨DÚÄ”œû.kÀ3Ù¹'.é·O>| K.瞇ө·Ž¢ðYa+¡yÅ;o3œµî¨>8¸òoàéÜ;ïY®ÉÈüûìp‡ƒéíè-$½sÛm\‡ËÛ}q ô6÷Î ¸Zãwˆ*_ gçÃÎå’bL|;3·®*@‚Žsu} úöéW•6}Fîu1Û¨qpî^÷é^{°ò\{sÜ`Z»úO]´§}Ÿìp¨^4LsUJÛÀÓ…ÎÎáK|£¿…3;Ü*©‘ÂÖÿ9WŽÝë5Îü†öã(§Ãùùð¡¿Pa·¥ÐòÃ.2$üß¾óOOSæå5µ®Ô9]]HW/ç¾B>_4Ü/mÁîÊÇ[pfn[;G EÂ8±!pÎ Õ\ãî4î8¯é-uØÂƒ1À…QNø®^ëää$œ«µ1›ƒ…a¡tÍ pçâ¡NãòÀ´ïspì¯öaüêBr=FWžÇñjÙ".ñ•^~Vkã«xD¨ÖÛ8ð¡+ÿ•Æõݯªu‡ßPëà{Ó”‡ÖðêB 9äÊ‹3-3šô§§éfÊkQ³éw¨µÍR­w©ë£ø(œŸiU?—}¤ÑÞÀyŒÖQªµ­”|VkÛÃd ÖÆ¥a/ œûdÎoç [YÛ€oÿÉë´"¸ºð±UR'ðtQz};³Ö±ô¨Ε?^ƒ¹¾—äÀÆ1›î£5†Ó5x*@lXмø{â„Ñ·ƒØ'ÃZ“2°qLùÛ¨EåFE/ÿ>'¼ÃAl}Üá´7âÛelícSúž>=M' ¯ZëØi·cD±·)ñ4·¢šk˜GWW¨æ*ÀyS¨γ'žæÊC6 œåžº +c̼<+ÚÚ®ûÝÌ‹v­^[ÂÙÑUuDÏËvìèÊyÓO@(œÇÀñ‹ëû&ÃØÕ\vB%pq±Òx¯ßšÑâ‰ÀçÒ»Æ=6AV¨&§H8g…â®è–74¼<¯2«+d+´ð ¬<+?3Þ¡ùäýíµÎ{È Uæ,é½ùš 7¸ë|Š#r¤pÖ” _(eV¿|TæÓãíìN™e32:þùþz¡Êïjøï¯?P}÷ÎÈ¥½ª—tð1okÛTÞcyt÷yV’as'ÙÝš— ë ²Ã{ÐÝÛW8WXÎÆU¢¡|:¿êTUÚá/$œ+l0JÇ×TŒ“pÞ@2{ƒ/-V5K¸h]`ÁÙÓ~M%°tÜZÇ«Œ‚«bÕdçwÛ•Vd [íµ‘ðY/›ñg?Júœ[kçP×­}üDp‘´:’aÂúd7ùíܦzk¯þ]ÕNÅ0¯øÇ~ô}ï™uªì{UcÂA¸¸\˜Åµ˜Ä˜ 8?9Þzm{ÇuçŠÕÒÌX±,úv®?g"Ð}ÜeðòÜbY[”ž÷®¸íë’mŸû8¡éÛ™1‰þTÉ”1¨ºTF;•ñò‚«Èwź¾¾òñ\¨óñVŠ€ƒ}@U¥ÇñBpQæ7ò·tFÂÅl‡ëôGŒsÈýt¾<Ô&šbѶ¼¼ðT‚E­o[vKÇ$ØÙ«‡ƒ¸F΀ϼYýŒ|VÐó Ïe3àÛeùæN¨À…••.“a&Œ9)³«‘ûí×( v5œíEûw==Í^š.´û( >¼­Û`ÔìLß8><äãšô[=bkO«Æ­çÓTüVp³iãz83WÚmÃ*ãG‹§éåY«ŸÜÜħ' œ_“Ì×ÍbžÀ"îϵ?{³‹/@ZVžù [åM˜hrn³`ß9雸+,ôú‡‹À4Kмþ­„ À¿|zþ{Î'íçìû(<úaH œEÆôÌ·i[2 ð;\˜œW9|Š<&ÐõÍOOÓìæWK¬G^ºcÀU§P°×ßî@I¸h”–™^V'-À^=Öm½Ì˜À¹^–h•ÉD½Uùƒv¿üKŠÞ̓­¶þ 꾘ˇâswÕ§·`í²X.òˆç©}z{¼7ýãs¹`ÜÓ¿½u,·Î}õ4"øvÓf÷¥»}~(¥=}·¤‚³´Q(G×íùÛª½ÚÆË_V’ÙËW¾=4DÂù‘KH%‚§·Áãé—)æ]ô§Ç-„$áìÛsÈ­|;ç»à+ü4ñâ6ŠúôvM?I8ú5€Hì»í¦_ÌåGð\Í++_7ÀùÓÝy+”k\°½‡C}ùÓñgWi^yzëW$œõ"Û]Tôím´©¿àW@ÁOV^‘ù–<—pÞº0ùÃWO¯*ÓéâòÍøIê+û^Âxùû~–¼ð•7Å”¾òW4$rÜêÓ]é“%(œkÜvö;çßî[ê¿Ã]t!¦jhO÷&G lc7¤ï­û±ë/åE^}åk´ç$œ==øó’?g›TI¸?ý{§‹ïod›va3I8¿íPÓV9ŒÔåÒËêÓc7à¢=ÉÙ®szz{þÐÈêû†:êOß‚ÍQ¹}fƒV¦lÄL\ñÆ_yzî7ú(œ=ݶY|èéy ¥+ìuÊŽB_•ºÞž—Âù ëxæ敯 ?šT¢þ~ÁEû1uå‰o3àœm¶ìzz;Œéwq±Ã®×žîˆo3à\ãªZ"}7&ö©˜_ÌuŽÆ :^yºÏCßœk\ éû>!¶›È+ÁÃϰ_±q­ WÂùÊÛb Ì'—Òº¯Ý£þú¶§·ËQ¹WÎL{zªüoûÓ¯@ŸW̼Æ6ÞG çúžB„>m¬–× §ôŸ âOgdECà*óÏÝ5zþ~~½2wNÞ¿òü$õð+K!ú.¾ ~¥/ø …7¯$Ow¼ n×Â@{/ ÜÅ6ôÊ»/v- ´wÃÀ‡sO±ka ½Ö§·»ËW é‹] íí0Ð’1¶_ìZho‡±eƒ/¢¶ka ½6ªÌ­X‡/…ö^Ø$~¿ísÁ×Â@{/ Ü}ÓgvÕ—_ í½0°}{(aíZhï…ûã«õêß¾Ú{a`“y“úÁä»Ú{aà.uÑŽ•_ íÍ0°‘ë ±¾Øµ0ÐÞÝ6:³V3±ÚÛaà>X¸oÜZho†õé&õšÇFV+a ½¶QkCæ×Â@{; t9Æ¡°ka ½Ö§û)t¢^ íÍ0ðhšÚûÚÛa`»l=˜v- ´ïë¦t™_ íí0ЧÔ[8T±Y íÍ0°‰ëWRëË/…ö^¸Ûwã†os3 lKçân†~3 äð›a ‡ß 9üfÈá7ÃÀþµÇ~ <¿ #Ǹ?Âîco„÷è bo€÷ð DR:üá”ù¯=þ¡Ð+ðÓ!ÿúC™Šùx¹à?Á”7~{!@4¡Â̓¹žþíŽíy#¼;ñÀŸÃËw/8äox:–þùþÓéÌí_o›‡«Vï+™C«Í^ð«-ÆW2—òû ±¹„– ÙÓ&C¾ŸfÀ݇“©?Ú¤«×àd‰6wç58™u Í÷+™È¯´%»2GÀ/ú+éݬõ+çpÒëð+i1«õE~ué¾ÂyùØŸNÚ*]&_gÚðíý7òü¸~¯õMx þ÷Ï—¿þm…eÇEBòëÐô‡¹ÎªÃ?ùãåÇøYó€ŽI°õÏ¿èZ›ÉàŸ>ÿgúÕÑî¼þáûËú‡Ñً¿½¼ü¸~µŸ`¸x<ýÛËó/ú“¯–OÕ*5uŸ?ýñí?äã·­í×=?ýõ¿/ÿýCè÷³)¼JÝÿè¯6»W„·?T¢Ø.¿n‚¿|þ2ý긷w¾ÖÔw¡øþŽô¦G(~¼ÖÜ: ¾eodE~Uâ5Ý­9»ÓŽäë¶(…7¿®L¥½»C¾W –sͯ›³8ðü]|%EÕgÙ_Úœ¢1À[_ÀÖÒ_¹5Ùtk²éÖdӭɦ[“ÍþåËßÿùüé hÛètUh9K°*´Ž$­ ©_ô˜à@‚U¡åp)Á[Ù‚*´Ž%øwB[ãP}¶ ­wÀ…ІœÐ]b$¼.ð/.Úçæ§· Þàé\æû€BæMK¨J8—ù6ØÊüˆòçogW5ŽfÞçW1e@ß>=}ŸfU¦‚åð§öO*›ûèó„e¨FØÈ•ç¢öCC(Í&t#p&Ú®MŒ…ÒìsK7‹vÚ§ïeç“4×RS NDÛ×o/þÊ<¶_¹5Ñvk¢íÖDÛ­‰¶[m·&ÚnM´uk°Ÿ®a™çp¬BæÍƒó©PÑÖèÜ\COÌs¸TwÜçÀ2ÏáX~'óŸŸÿÖè¼õZ„2¿Å«z†Âg™?„‹ãØ8þô9§Ÿ‘8¶žjQyúÜkÑ`'bËâåg±9™›ƒ*Û *"6›7òå{VClJÉù «ZbŒ®Ië)á- C(šr^ylùêVOoiê+8ïÆ©uœ+XðòWvdæ#ýïVç~û,ó>$àÂ4ß(]¥.e¾Ê–2o¢«2+žÎ]˜˜]ÙoLr¦ÍÁ¼Škܭɼ[“y·&ónMæ&óf_ºßɼ[“y·&ónMæ”ùÊå†\.×eޭɼÆóÁ¸ò™w 2_£ÌóÇ5ãý_ÿ¦2H½„ ߯x%ÖìM(\ú6§ÌKߦkýûå×üòTæq¤Ë¿}® ËãÛçQ‹^ùö¹ÝsÄ1¬‹^ùöI/½ÅNφ–nÿöy¶VÁú><«zšÚ“C9pϲM¡×î øW×ÈãG%Ú”º(ÆH8Ów6‘Â:7eç9 ’Î"‚6× i gþ—)¤Šußä¾ýòÇþúEâᔎVõ/¿¾¿0Uª+þåQXÛ&†§ãþ÷O’¸ÌUj¬„ûüü8~ë㯊¾ö+·¦ÖnM­ÝšZ»5µvkjíÖÔÚ­©µ[Sk5â9¦ëb}çp¬üª¾K8R~Uß%)?JŸE—xy¤üª¾s8Sþó»ªïŽ•_ÕwÊÿ;}ÿõéÛM3~TÉH¸t]÷’<”¢è¹?¾ø¬ïÇÌaEß{Þ“ûïõ½i{ÉÊ·Ï}5‚’»@K÷}çß>yýÎ*úÄÒµyVÔ?®ñÒÕ|œþ¡ÕÐ¶Ž ~”+P¿;ú $¬«ÔV§¸H8׸ϱH\ãlïÜ9ààÈ%a Û&‰§Ïgœ³ÇÆqs>¥hœhÜ^ é²°>FkÜ­iœ[Ó8·¦qnMãܚƹ5skçÖ4N·°Á©ªÈáX/UU”ðÙ¦6´×«ª(áH/±*nRæ±^ªªà@/UU”ðWôòÛ¿«‰Ëcb±ÔKã®ë .<_·EìùÚ ž.õòt¥^zðt¡—>ZåP¶ŸüòoŸŠRϳW®—n Vùö¹³Çžï sþí,Ñ„õÒ ãziŽ“  —öº£<àOOS¢éÁøêGàÓn%…vøœ§Ú¯ ›sTó=}tÀe®ÿlªÉnGëó—g9X\ãœ'át‡ÏêgÚøg‘Æå6 À'õóÎl[¾þpÁ[?†v+¼¼[Ó8·¦qnMãܚƹ5skçÖ4έiœn ÷sM¬ŠŽõRUE Ÿõ2†ú˜¤ª¢„#½„ª˜svŽõRUEz©ª"€ëzùŸŸjEFërŒ=ÔÞ½’Âe¨XE/»t¸ÔKë^+áÒCÍš‡Ú·—ûÔ`ÝEì¡–î^óoŸŠ|Vô2GåÛ™# ôòÈ`)ß>· W©_®žÆæU“p¤~Pã|ï00àXýTp ~¿Ó¸—Ϫ)Ûʆ]Lk»½$pYeóÀ¥ÆEÍÅìge.4.%4îHY+ß>5µ5ØÅ ¦»˜üۧ˹kœÙ¬U¾%E³DåÛ§Þç—s?iÜ!wþô4Ÿ˜R¥Þ‰Ò¬½ðn¤;:œ;ì%\W¹¤Š„·ÛSí‚ñØÅtÃ8O¶øcXH¶ô1^5ãóH…‡W¸=¬ªxü6o÷1]ÀÿøI<ÉdíQÎÖ¤œœðIaó–Ë•\¥ [ñ¶D"6nMaݚº5…uk ëÖÖ­)¬[SX·¦°ª‰<ŠY°&s8VkU“%|RkÓ4ËeU“¨µªÉêïó•FšÌáX­UMp Öª&¸®Öuç_9f<3÷ÿ0Å"å¼.F¬WOC$\ìûƒOC$h§!àÛÑÑ> 1zù˜ú¹b•3“Q‡M¿ýÍg&Ýó¾ýþ™É´qüÌÄäß™tøÓÓ\G×Ê­ÏáÔs¦hsÎY?®5Ómoç°:°r••pVèÒfq±Qóç%œû ÁmVVVJÊ!&ç3¶àê@ë‚Z^•°7r‚uˆ[ÏSuxSëOƒê——@VÈ­©µ[Sk·¦ÖnM­ÝšZ»5µvkjíÖÔÚ­©5¬>ÏBU}çp¬üª¾K8R~Uß%)?ª.ÖÚà@ùU}—p¤üЉ°‰ªµNïÊÿ;}¯>Wõ›_?Ù…¦Q!7Áù=Òîbr…Í.ö˜®T±w/O»•³vayò‡âHíÂ?úågǹDååç—J )8±ò­HàŸ© ¯ešËì·úê&q¸8ôHuƒ¼pp›wœFm"…3Ù¬Nb‚7’šãÌáB6Û„¾qÊÿ[.·&\nM¸Üšp¹5árkÂ¥_;#b©ãp,‚àº[ë‹×ó“ŽDP•: G"ˆ= <. üõÝßÍÉÛØ5ƒÀEÂa¸0“sBë¥ ÜÑÌš8Z žJqQZ¯}û[ròÑš¨|;óTBë¥ù·O¢¤©ß>eK²Wd>‰§#™O‡2ßÅo ‡.´Î‡!›Qe·=ÕCà´hëcköaŲ/e$ \$¶s¬¸!‹Ø8p]Áï÷Ï9LÇŸ¬k “|ú9néü䇪«qz_G®ß=ø˜¬+?%ÌöPbt”_VÂã(‡Â¿|ûFNº[SBy^Á©„$_žƒ}tÙå!\uSTV¥!÷þ¼^Â9+tRy…\°Â°jXEàâ„ +¸¤};­@‰¥!Ûn•oG¤ò +ðog%$˜\ï"¿}š:VÈYÀÑÅïtø_s•¥©ênÅ·ó>¶8Ƴ¾gGz˜Pø\2æJ:»ˆˆÒ”„žÎ³m(ÔwäÒÍÚûÁ¶cÆ(OêâCؼ‰N´×qQ•X©æ½{¨NõÒ>ØGØ[Ã:¯&¢S®'õŒË’±à•TB/ &pi­½ÖQ¡‡½.¬uЊ§ÇóoŸ‡&åz’Ó¾}R•ŒA<ù·O‰’•ã•oŸ'´âéÁIެõ™1˜BþÛJ€ÅÊ‹þ:¾F?OW"¥ áô!J ͺíܸ¨KŸÎ­õÙ5[Ø~4Òá °l ¨Æ³zOYn/,Û|ö!\@ÈÞ†às‰u²É%QU½÷¹'®Æw|ŸðÈôdœ!Üz–ŒÀ'µÞ÷½úþóù_ó·Ge>éûñ+'õ}ÿÃp¯¿ãëˆç¯®?üKÿPC àìå· $÷?8ðí+ð,‰à8+OŸŒû¯ ¸k±“X0¾/0ýÕA;®óZyB*Ç˃€öü\ù鯼M€mÎEAbóÂ’µžrߟžØ5áº@> }o€r‘+4¦œº >x@G¾:K8c…VÑ„o“\@‡s/zç›,R|óÜõ÷ªÂZ °Ç‚„ …ÝJTÖD — kŒ¦°à娰Öwd‚ …µŠÂ"8PXv\Ž¢p®°U …µÖI¸TX—…µpå…Â:Ma\ùIaCtESXĆ(\KVì»TXk¡ÂÆì¬ÇöÁçâ-n P‰>K¸PXçVØÑ¯©Ã¹nÏHPa[Éʵò?ýOµ°îŠö¸Âúá¸hŽ @amO›¸ð¨7S…í7 \*l¯IÖ“!\p’bañË … JK ­¼Pرºä\(lÔ,¬÷­”è6¯ÜÆòRhùÜQŒãìRÄÓ…¾{Sÿ?ÐwkœMV^KMm›Uô½ü¦pqænLRôݸ0ÐÆiú¾ —únÒw["zy©ï&)ú¾eðòBß½Ã:nÀ¹¾§ ë»M|»Ð÷+§(ôÝY¸ò숈#Âv•§úË–œrâàBßÌÒ÷n ;\è»3ö<ãú>JÜ:\­¿WK¦ÿî®ò)HøìûçLÆú¾9+áܾûcÊÐw“ÄÆ ‡|ÿ~©ïGBõzùúÆzmÃïr¹¢ï#!ð÷8äþ6‡ü0žÁï;äôåßî÷s —yÑrðôIßÏ¥×rôòïpÈ畟rk|þC>‰  ½ùCÞáOO³G½§m<ª±im†Ä¾‹›&šèRõÞ­ÀI8}z Ó}>¸Žà]I¸ôç7-ß„ØHÞoØŸ7n äéznœ¢ïÆI¸Ôw_´Œ™•p©ïèRµÐ÷Û¸™Tæ•Ü(úNWþ•Ü*ún\è»UôÝ •—x°Š¾#8Ðw£é;^ùYßstš¾[$6"·Ø¾oÔHyEßk(”°¾Û~fØá@ßq…­Môð·éû© ÎkêΖ:²‚d¦J-~·›+À¾ï…ׯýøñ3jþ|L ¸ ¸¼ñ¬vÔì$ü7^Ž=•pq¤•­Ö¡ŸMðoŸâ"Øà{ ÿöéP)g娹Áòoÿý—éºÿvvq›H?ÎK/øÓÓÜóÎnÅ€6íÓk0"^~n™÷ñ!–œ¶ˆ‘]ö.RÑ6à “sûî~nõ¼+­©¿xú|±¥Æïí$SÜ13æ!8äÊó£f—ÒѺƒVÙR™Àxï‚ðÑÆcŠNœAû½8x^Sؼ¦°yMaóšÂæ5…Ík ›×6¯)lVÏ ½®ÉŽÕZÕd çõRBã2æn7ŽÔׂ•MÀ±Z«š à@­UMp Öª&KøëjÖÔ:­©uZSë´¦ÖiM­ÓšZ§5µNkjÖìpZ³Ãiͧ5;œnØáùÁ¤úZÀßg‡Ó;lr( mYSز¦°eMa˚–5…-k [Ö¶¬)lY³ÃeÍ—5;\ÖìpY³ÃÔ‚]jý;\Öìp%ž“Z¿üú¦Úárݨ`c68ç[i³XßG)Ë[DÞ*úÞ •ÀYZ;ú¼i $zÞszyÆ 1i¢èåe Z @Y¡X«,ÝÔ“ÐeL[ôÊÒá QN6*K—{ù¾±Æ)—›FÑ;_:Ĉ²ÀT¾üÓÓ|)ÔÄäÏûu¬³D0Ù ø|§´e ‚ ^d¶>¶VèyOg¤Rõ/ÈëyíܨøžB¢p~Œežÿè²/Ò\ñ¨ýóåóó·1 ÌV¿Ù ±aœÔ:H”ÓŒÿñõûÓt·àßÜ>´&‚ÂÕ\-¢§³.¶Ä(ï‰|h·QLðAi•“¶ÖW™SZk•ØŽzûa<Ï­…«hŒ™hõWeÒÊ¥•5J+˜Ò²ÙÞDieÒÊ¥•5J+k”VPNÞ<ä²ÿJ+k”¦ûIÅ«\Çá˜øT®p@| .r¥‘pD|*×I8">èf…1'¨Ã1ñ©\'àøT®p@|*×8 >•ë߸.«÷isÄ\Wr–pÔ S ל—pÀuY ×$œq]]wõ‚Oöèåyÿ¯¢q]ŽÊÒåÉxÈu±P¦Í×õ°JD{>*KÇZ?«Ñž²tÝ}K)—¤¹o%*K7µ‹ ×y¹ï¯Üæ}ëò×å[\wúuþN®Ëw¹.Æ$V~⺶u¥.Ry×eÄum‚ƒ¹r@¯r]^㺌¹®5ã–~]cðÖ~À'® >æ³ëïë\÷ië>­qݧ5®û„¹®[ò¸îÓ×}ZãºOk\÷ië>®³Õ¼»hÞÂuŸÖ¸îÓZ¨úi-Tý„»šíîÛBÕOk¡ê'­Ë·?z@ã𷆪'‹øûBÕO7CÕÅPšÊbþ ¥ýøùK­.¿¨Š™ãâ æ²N™ÿ8ô’Àgæš;ºýËjh!œ3WïgÂÈÊÓòò‚¹PùØÙYUÂ9'YðÄû*µ-ã¤<ऩ£Û¼tÿÒÌ}kÕ­Ôwg^žÕõÛá¢Ã¹ßþÔþ95MIœìXƒ÷H¸lJ/ ÍÌ­„ƒÖ¨ñw9_çÇX&Eÿ»œïôò<çëÕF'YY:Ú€ÈD„ØSÆ|馴iðJÎwËÊÒMjmüïr¾|ézÄ{cÂo±øÒM/o´œo+ÿô4—[·Å³Q#ïWVUYìû\­]Õ:†à å”M÷P œwKïN„×?’œ‡ÞløžUؒи¯ßIó²½}‘¯R ˆ ™àúØ„Ÿœ{SÝK箾 ”.R𣠜Â'ºðÙ9'ûr„͹ à©TBÍ ë¯Â©„5R k¤”äj²›}©„5R k¤ÖH%¬‘J€¤R ŽKo!•°F*ªqlfÇÔ£²„3êÉ9ymPÊ6 ìÌQ!Ù†Ã1õ¨là€zT¶p@=¿c›ï?~þ¶Ùšd›Ñ_}ÀU¶™n¢Í-¿\†,´FEþÊxOîÛxC@-¦¡A•ôåeÈz7MÜ\p’·* I¸¸yš³ñÄ„^^œzg…¬FÈ2¯<=õö~KZ&¢@±áÃE7m¸h/ÿô4_%3¦*FyÏ­JÏu¸¸¯Ö°ZÍ©””$œÙ6Æ*G9ÁöÉ›.:K=mXù™TÚi“³Ñ 5öÀ'R1~ËÁº¨$²Q¡ ktnÓŤqa.ÂMºHÉP™ktÖè"¬ÑEPèbhÜ«tÖè"(E2½cØëtÖè"è­Ï3â‘-/^žÏ’0Ög ï½zŸŠ•pN*&Z4K"WB’p1À±œùîÛ$2"æ‚£6Ð×Ü©™G‚÷;\J}º‰ˆGœÍ ÁgR19÷êÀ¿þ§Ý†7ÆàîV¶Œ!-ÎoÃ7Ú†·áë·G ç·áA!•ÞkšÀÅmxïQw«äÛ™ ‚³ÛðÁ;x>˜ÞžŠ¾<» o¢UÎ^Gþ‹ÂçÛð1›Ñmøú?ðíü6|*·£#³—¦•ŸoÃWÖÅÝ/ÌÖƒùyåi5Š+Þzx¾†[ ‰ÍÔýÂØ­àîVÕgómެkÜI¥þ†ÒErQî»P“MÜ2º&ïL2^ÂéCÚ<{±~ý{žoc€ÌËQ!5® â–ý‡ø`­OΛÝ:‹ã-—ŒP‹6Ô­¶2­ïT‡óæð­ñšGó¬¡Q± Ûl÷ÚiÃuŒ„ ¶‰J/½*6YÂÛ³nAfflK¶±àæ¡Ð."8g¥·–/.Øæ8½7ªÔ°tœmêC”ÄKJ`ã8Ûä|µ§bl“"%ê ±M ²MuA\yR²¥J–Ia›-!±™ÙƨӴ\ûÓ3±M ®©l“\v²Mýïz lSÛØRŒ‘pæèÄ–0l“jçÇ…s¶¹æü ¶5P< S bCFôu¸¨ÛØ\¸ZkOlcB¡ÐO˜ÔN?.fØj×´?H8g›³á¾d?gçlc¢ÖÉ ë¾Ý ˜*;‹àŒmêC Û`‘¾<ïôCDl³å¸—glS·ÝáN~9màå9Û”q§—m@+Ï:ýÀå£9V†+ON”² ›ÒÙk ¾™ÄfîìÕƒE0»Ïq8òmvº(Olãm–K'‡ïÕÀä:Qžx¤Ú¨quô'tNÜCt8'Ƶ&%çSŽæîÄïÄÓAAíáÏ ºH!±qœ6Ætú« ±‚ °ÿWsœ„‹4Šs +R(ò]M£¯±‚õ.Xá fÄ•XB@pÎ J?_k zyÎ ¡`VH½sÒ–G]󧯪ŸT¼ÃutíKÂ'µKs’íå—.êèBQü$?2P_¾Rµ[PÕnrã(t‚ó::‡Ëaœ•Ñ—çutÎè¬}zpVGW£XÙÒzÏ$ çœTiW©Úu9¡•gœTÔªÝV}ýé•kŽ>¤¢ÔÑ…ŒÄ†Uí^ù/Qµk¼Xº§öϹö´l83ÜŠG9|>ªÞ÷Ǹº T¢sÙJø‘J¿É;jŽNî©]F*íν„sR©1VVHÁ©¸+ô§U)J¸$“Qqn)Îx礢 Âô%9ðòœTl€Á—­NHð™TBËGARI££;KR‰8±œòfÐÊó#ð¤8:%¸ò´8·dW”,Æ$$6¬8÷ʉӪbž£âÜd$ÛÏâäzÂÀç†K¦µ-UŽrF[Ì k*ÖT&ÜVûàü*ã U™°¦2aMešʨ=ÊÂC|ƒÊEe’{“ʨ&ò8ÎøÊ„{*ã}-€'ø»T&ÜU{ÐðëçT3q5GC$ôåS~{y‚™‡°ûMk©Óë øËçé$)ÐÆ&(/φEaÇlxüåé¯JКÚX±tOퟡÆç$’„ËvÕ§=3úßýø°‘ þóç—ùËow€HÎoIîþY¡°&\aM¸‚&\½ÙÔ«ÂÖ„+¬ WP„k´{zU¸ôô¦óªÔq8Áæ-«R'áHU©“p$‚ˆÒÚ”/3àqMêâšÔÅ5©‹kRפ.®I]\“º¤Î<˜œS€½klóë üRïJ]iíj¢±!=zñ+R7:º8ê`§HÝèìMžÎ…+xä¾åQèåy;z Ž—Ù˜!úò\¸’âÙ$¾ýéirtl6WÇ$æYy£€ËÍÎ;'Î9öj”­_ø§ðY¸Œ/áÚ8çãîQg §/ߪQRv0£éÉ}µÂÕjNÈþ„5á kÂÖ„+¬ WX.Ýz£J‡c”&²É]Þ‚„#T¥N‘ªR'áH¡ÔÙ­wOþóëßzlàâï ) ©+Y‘ºQÊ<ÁgCÚ2EZ¤›•—Ÿ iö¿3¤üå)Ü*M¡ÚL4ååɯ^IâÈ¥CBˆ´þ† ­©–,p8gDWÎ>©òæPk)áô!RÉÙÀ9+ž.;¨˜Ñç®þ*¬ WX.-6h9•7WX®°&\ZlðJºC.®üႱ©ÁA*ÐK‹nTÌø[…«ØÜï-u¸tÆ¢é!@uóîOÙú|eÚ€œ#ž.<}[õ’~ÿÓË3²ö·ýþ§——mý^¾üÓÓì,Û‹–°þ%ú¾?.Û©Äœ“ri±ë%Ó§lãï®Ò`&íÞRàp)íÎäøUX“ް&aM:št„5éйÃUl8˼kì–\Ê*6ŽdŠM]“ëå+Fu‡ŒóЙ1f…À¥aêðÌѽ;èÓ'±9ÄÛ¢ØÅfz:39¾Xlr†Í˜_~ög® (³Ø—Ð9:á‡É™·¤Ú1'á¢éJëPkK\ ½D”ÀYüoÌQ–ÃsçÅV‹8\H‡m/9~Ö¤#Ü“ŽÝ×àé°&ÚùËcxƒtè¤ì¤7ßHvÛp²Òg[üÒ¡9$yëõI5zS]§uXK};üéiŠëBDkŽwüóëMoxºì¨ØN¸”‰^ûCà, -%h”ÛtQÃáb…¼‹t…ÂÚ é2´%ué8¯#ògrk|-áhÕ¥“p´Žpélð¾ýRS›Ñ²C½Ð„ÀE(55îù-\4˜´Ué´£Y{ù<_WÒF£U){ùÉiröÃoSð—§üæ²2Ý*wîèð§öÏérHý•Ei#kr—ùŸ‡Xí–ÅØC/ÿósž²RbÓ |ócu ¼Ëßú9Z gÄçbÜ`u”¯&ÃK8ýö–nßÂ^ )“Kn³déšІ5¡ kBÖ„6¬ mXZD•×1*ÍŽE[•f G¢ ¥9´Ñôt)Úª4K8mMš ‡KW°ø¢½üµá9{krPгßzpiÊl²—)û‹–£ä¸sû×Ö­õ_ÓÙ|ÉÚžþå—Ñúã8zCŽ—ÿòÇ󯿦KÁœøôù?Ó¶äüûËTèëóQñåÛËË1ýu/ÁÓ¿½<ÿ¢¿2£#Öãóÿ&æxžôÕ߈oçp™ Œ¾›õWø ¼†¤!¸7<$hÙ2yˆräiÚPÜ7<$by ãáßO'‹>=õÎÁ#­p8\(|2æô~}šî:™¯Ömþí¿¼å%œí¸µqYÂ'V9Ò%IkD%œ_Ô²ÙÙÊ—ÏŒç#xùïü=ùâóUuÓûïÏ/ϾÝyxÓ}¿‡ž>ŸÕ˜ðœ†W‰~æ`õÜ£p>Ÿª\×Äæãx›SŒ¦¥{ùÅ[¡ËnûÏš>Èy‚Ï„¼wòìj¯jÛ®.…ÏÆ¨~¢Ý-tþILlq‰M—ç§'&ÚCæyµžóWÝú€ Ñ®rs2 “æÖ:K8mg"ôøÚÔyðôÏÑ’@SÚH8$ÍÁ›ËÈQ8í{3˜/'¶f×QÂyÉ¿)Ö"eH­‘„ÏšQEó¸éî'…ž.z@¸ŒOóMNàéL3Ú=-ûL‡¡_w˜ö}Ò ã’Û¬T†½};ÓŒú³™8S†l{ztÚ¸Y3RÕj‹”a{\hF öAÿo—úVÔú7ÖŒÉL쳌;'u ³-V½&ò2•±±·ˆ¢p®Á_G“ͧG¾ô¥pNúg¿©¡dðtÆÚU7 ›û{]ÞÎdÓW8^~n›²%W®k Ÿï¼4câäùÖçUÂg 6[ÙÎÛ,³ÐVÕK¦§óI××D&´­o6zyž&‹'+p:oø9üÓË2­ðð÷#O.´{ ÇË”õ¤ÌÓÓ”Ÿy…έ × ®—tnÒ)uMŠ„Ï>È^ŸÐÚê½YŸ:iîC’f» cBà\´ z®$ðtîj¸ãJ¬'»õy(ÓÒ;BJGE¡dÄË$ gÂUWÈã´«/Àçø}ˆƒƒŒØ[rø¯Ÿ3©‹yïù"űbñôÏ<ÿùùïéÊåvtÄnx™¥$!´\´­kýMÚËJ‡ª×_?êzz—Ô§§Ihu¢®ðv¥w\j†¿:=κÔjÎ:Q8#jßNË  ãúaÙôôY3ÒÙ“ZÆÿ­I „3™OöêÇÍÝvß³ÁÎ\˜v£¶žj·Uƒ„33Ñj\èõrÎ4Îä|LÌLl¦ og.Œ«^Â.LÚÀÆ1…õÁæ‚¶Ú>ôò“Âî|^  ã\ŸÊAáÌølŒâÂôÎ þ>…íp¡°¦å¤ÂîlÕí{‡ [äB8ÈŠ)lK¸õH·[§§Ù˜¼sŒÞ.ÃéxÍfª¸•ÞçˆÂ…^ÚóFÇ¬Š† /ŸàÌHy{:'TaÄM7ÐÎãl®˜ã3»’ç øv™´Ž1QÑd à\aí1û\(¬3®ÇšÎÖÅ€vŒl¥p¦‡Ë¯{ù£ô¹âs3×md¶œêûÇ£E:ÔwgúŒ¿ >ë{‰[ú`+áLß} §O+ t àÛ¹¾Wßö«­TÕ£|ºò<-g`¹^&{Z,>:ª~{’pf×ruHàË·¾}rÙÁ’L\6[Êæ$œ'Õ«]³ÐÁõ½‰)…OÀ>î+l ƒ{…yßÿ™Nb87ŽYº'='OàÌ,º>à“ç–J±àÛyÜZ]xeóHªÓ•çqëq”óªƒÛá7\›œåp·ž=¥ƒ[JB;Ç­Gg²n3.ÿ¯ÚËo/o²—iëåµ.íe»‡'ôýcK0º-J¸PþíL®ÎúnJ@Š„‹óaWðù°/ƒ7œ*ÿÇ}òÁi±Äùp).ÂÓ”¡¹mÙ‹^ž)ÖÅ ÜC%XÎë¼Å$“¶¹7ž¾)VFŽ•Ò‚³ÞÎÖ`"Ô[HP8W¬xLE{U±:ü†b5—Ãb…=?)ÑZë΋λD==ÍAÒ+‡hÎ÷œ|LjC´ê«_-c˜‡êËu…¹ÆywÚa¦2­’pf/Mzt¼llö<}ÒŒcã#yck\Ÿ>›²¸Iâ "Â¥ã&ç:¡eÙÑÜJ$|ÒŒ–h~|¿´Eá|ÞFˆWNžy•Áôí?yÉeÀ kb?Æ"ðy\GËÍn%[šßÁËOͪ÷¶¥‡ó8·€<þ»N#Ò=Ys–X³â¨æ´€•g©/WS\q˜Ò#Q87¤Ù)ÕªyCRÇ=ÔjK²¤‹3Æá†ô¨Ä‘tQ•Ih£‹¶v'UòÔ¶®uuxzš­Ì+N©3ýÛ;FD¤-Ù•¢Å¾qÎXÁ%c ´°¹_T¤pÎ ñêïÎr³Þ÷Á¡|ÎÍÖÀ(\þ″€Öø¬„ª$P&p>Ü´F&ñˆ7ãÀyMK¢B)}Ê …sRIÛéUÒꙣ4­¼ wÂQ-¥„OMq?Y6t(Û· gt;cQKiøvî]DÁgºð­Ã´„s¿»ÍD€®¶‹FˆÍûè¢Ã]CW=vµÇ)X‡ ï"gsØ8qöFÝ_—çJ¿¾½….Z…upT thÆáœ8?¡õW~E¸©Ÿ?8cËYšÅ4¹nèºçyõ L:ùÐÓ¦.rKW‚„)lôùºIáLas97Ž[î›Zçþ|•íˆbØb{Ç~ —UHçÆ Ók†Ô8«BŠå<‹á¦·ò´XºwªÌ¯oêiˆ?F-ÈÓb¤~}S,ìVÎ̉,WpÝDv‘xzbGª…õUä-‡K• æ¼Ä=êØ‡\P8/ÝŽûÒ Ž¡” ἨÁog'f;srÀ™bÙ’3,W¨NO·2>±ÍÇ=)/Ó>&à铉<‰i\ö¾K¸ÊéO—X˜ÈÒ/%87‘6d4¦ ©è*CàÜï6WãQ~,ZÃ$6sQCU«ä¡&çÀÓù¿Î·D“¿´¥ã¸s›b"CK÷>}ïp¤ï—').LdU÷pšwí÷QíðýÇÏ·àí’ ‡K¿Û^u&\ßkˆd%œé{åð•ˆqvDŸ>ŸªnŜי¾›‰§sÇùlo-ˆ foÁ·‹0ý*†d¶Óùœ2øöY­Û¼qÓ¼Öô g´ÉWÍ<×wëxy¡ïÖc½åž= Ogú¯êe¦ïíö1Ø8^eœüI•üRÉ<}vœÛ Ÿ¾ '‚ꛀ•玳±×õ¯™¸¤Lá"G}Ìj5GÝáwª›lûN~·Pþ´¡Ð'¼ äÓ·2jÍü˜Ú8àò>G!"}¯q÷i œ»ÄÙ(ú^9ÐJ8«6áªZçuŠisÎ뇫gë‡]î‹*Šœ`}Q ½<;U5)]·Tæ õ½6ðtªVŸÿ´q"åx:/Âp¾xX?\=òö}ÖËh¶‚Ë“^žT,6Юµ£”pîw“•‚ óï3Ð ôш¤¼úú—¹¥²]pZyÒ÷·–'Ëá ³uzBaÓ(%pжS¥¼‚ÔV©UƱx¶ª{OQP8³Öåª6ercGN‘À™Zg{]—æUƶÏM¤ð9®Gtpìbi—%$œûvS GµkEÂy"¼zP™qãû< gÖÚº«c?gßÛLpæoWÁ&¿%Ü’NÎ3[þ"~ˆ\z×ÇIhy4ž¾Uü8fÿù]½UL†çfUœÅÓß[š¥²B )ñ¹Y*Ahœ<7‹©¯Pœ§§I†^»<àR§;F²B§Ìw7›%áâZs2 ^2}È…sVÈÞÁ r®y¸ÎlzµõpÌj,©‡ÓÎmzº jùtµÈ>ùI÷:¢Œ.…š­7×¢p¦ÖC/¹Z[뜫u%c9F°òâÔ;ž|̺]]Õ"áüÔ»õ|îu1 HÈK[œ>ó50pt§üÛË~ǽ×´:¸×ÇplYKi‡%ì›ýô49y¯žg›ÑâÇõzÞ¥°T“Œâ$œgßb.0a]Cù.6Î}r!âZÊÐÙ†¾ü¬ÖÕ¹.0mƒ„óãðF‰¨DÚÄ”œû.kÀ3Ù¹'.é·O>| K.瞇ө÷¢ðYa+¡yÅ;£í&8kÝQ}ppyàh´VžgÅ͵òü@ºÝ–py×;|äßÀÓ¹wÞ³0\“=ù÷ÙáÞùqaxçã–W‡ËÛ}q ô6ìJãNóª‘ÞR‡(<c\å„ïêµNNN¹Z·›Û°0,”®΃ã\<´Ãi\˜ö}ŽýÕ>Œ_]H®'Ãèʳà8^-[Ä%¾ÀËÏjm|Õz>tå¿ýSS§ÖþVµ>U–ÃZ'Õº…råÅ™–ÍúÆÓÓt3嵨¹ŠMàp Ö6KµÞ¥®÷â§p~¦LÆei´w#pÞ#£uT„jíG+%ŸÕÚ¶Æ0¨µqiØKçÆ>]“½¹ÂúÒ;¤ÑoÿÉë´"¸ºð±UR'ðtQz};³Ö±Ø6Ž+¼&p}/Éc6ÝGk2 §kðT€Ø°yñ öÄ !¢o±5N†µ&e`ã˜ò·Y ÊŠ ^þ}Nx‡ƒdØQ-ÂéÄËËØÚÇÎ}OŸž¦W­uì´Û1¢ØÛ”xš[QÍ5L‹£««Æ@Ts•à¼)TçÙOså!›ÎŒr O]€…•1f^žmm×ýnæE»V¯-áìèª:¢çe;vtå¼é÷b(œÇÀñçzi¯¢-~¡©ýŸ„Ë#å“V[Øúö8¿¾o]†dqÖKølnw‡uÕ4­ =Jøl”MÎîô¢©Z·(XyqöäK‚5 1ŽÌËW­ãE®j‰ìeë—éÀ˳ãär†÷úkdí|Ö^Ó|\mFGQºò“½lÀÙâãbÄ·¿3iõUíxQ²‡·(Lõa‡ËRrÓ£oJµ—Ó‘ÿ‡×Ùôû„2Ö!;œ¤Žƒ;œŸ=ùЉt]_gjJ¾.ó¶‹[¯?&pÞ84õ^»,ŒO¹èëT–Ÿ*Ù­»‚ÎåT ì¯;uÜŒ»>w„™µnÍ„­õ6,yyo——&Wðt®ü­¼ž=ùœ;ËiÛ[†½n­/ø kC?épprlŒÇ%$&È¥ãÖÚWwlôâûg4üç÷¬päTºÅêPhbBÀGÊ&D w"2î]¿Ü& ç9¯xuç§Ì¸˜Oàâú¾É°v5—ÉI¸¸Xi¼×oÍhñDàsé]ã› +T“S$œ³BqWtËHš^žW™Õ²ˆZøVž•ŸïÎÐ|òþöÀÆZç=€ d…*s–ôÞüGÍ„Üu>Å9R8kJL™Õ/•ùtãx;;‡SfÉG/¤îóÿüõB•ß…²Çnû¨¾{W¬Ñ{ zI󆱶MÕè=–GwŸg%6w’Ý­Iáp©°Õh$¨°6öö•ζ~¼ùÊÁ§ó«NUe ÞùB¹Â£t|MÅ8 ç $³7øÒ¢Y ­ ,8{Ú¯©„–Ž[ëx•QpU¬š àünbÈ8›Õj¯„ÏzÙœˆˆï8ûQÒGàÜZ;‡ºníã' €‹¤Õ‘ –Ð'»Éoç–0UsÛõòú®j §b˜Wüc?ú¾wŒÌ:Õ ö½ª1a \\.ÌÆâZLbLœŸo½6‹‡½ãºsÅjif¬X};×[6¥û¸Ëàå¹Å²¶(=ï]p!Ú×%3&Ú>Û~lG¿“èÏ#e~Ó¶ôÉ…Îó>±\©8~`³XyéIV­ÞçtUVøFÍ„u}Ӏᅳl:Êþúöçäb’é/^5'„ŽiÂHµ"ðôÉb.jFÊ¥ú¿[±t\/ë õ«)}SØpÆWô2™q%©cdxÚª-𹎇º.®$m1á+ˆa¯½üÒ ž¹hWtžrãdrÀùÄpp½Ì¥ ó¨•Ü¡‹Y··ÛK—ˆeÑFÏ8×Ë «˜Z«×]Lg®`9ççI½Lãb ]:ÞlÇœ‡ºüVOë…,ᢥ[9¯á1Ūž§\y¡X6ÃË„ûfÓ¸Õ¿ëéin°®åP?+p8˜Ld ¬ß7~ä÷ œ‰vuP¯\35²ÈÎHÿ*;‘ɸfOà"Ig¾‚ËS‰c Â׿µÓxw•Þ1Æ„Ñ%œÀA±+ì㘀Bà,‚05ÁÍ›²bé¤5pf+(cÐR°…Ãeº0o0¿_=ÄÑNe¼¼àã*ò]±®¯gSÜ_ãã­ ú€ªJã… á¢Ìåš’Çš3Î ¸˜ípþˆq¹Ÿ.Зg#€ÚhJ,ÚÖ—žJ°¨õm+ÃÎ`é˜;{õp èÑð™7óù¬ çžËfÀ·ËòÍP ³õlV‡Ëd˜9:‚d؈;$ìG÷ÛàžGìßõô4{iºÐî£08\øð¶n{€Q³3}ãøðkhÒoõ8ˆ­=>­·FœOSñ[Áͦ«ë%œ¹ÖlV?fM/ÏZý”à>à&>=ÁHàüšd¾nóqß|®ýÙ›-X|Ò:°òÌÙÊæ`¢©Í/ûÎIßÄ]a±×Ïá"0m«ôú÷ à_>=O‰¦ÏТþ£Ý3œ;:æ¸/|›*ñòéÂä´¸ÊáSä1®OÞ}zš†ð¾Zb=òÒ®:…‚½þvJÂEã‘+"eªèÒè¹Jà"/íJVÒ\}å \DãÆFh½ªß%œéeuÒìÕcÝÖËŒ œëe‰V™LÐË3÷­mæ VžÏflµ0˜w¥€—ç&r»Rú¯Ó¸¨ØðÖ.B™«1`噾Ûã™È$^^:y6Yx‡Ð¸”ÅËËRèêeè×ÅЯ:õ7f“½_ËÅÔ]׎bòxpçPÎXÕ1C“JZ¹\§ çýÙÆ2ç™’p^¥Ü’HHe‚õz:?Lñg0eÈ(Wúô_bìBÆ÷€|Ͼ8§]Ì)C´Ñ8׌7gïdœkF<3™?¿‹Ã…‘j­U32R&†Ñ„áÛ/ÅHµ™Pf¶ò¨øïp¡2†ÌÊí#ÒÙLõ¡À§FÀy’ºý¿kL÷¿ŸŸ¿ƒ™oo¸*xttpúXma—C\t¸õèÊþá'e çy*s5duO~t°ð¹1_c¾3ÕÃOlÚÔ, ç}Ô“»†rüo¾ËŸÓ–Žç+J.pw•¾uÎô²†KnÜwÞæ…Vƒ1&8Ò•ç[¯öîòö@Bpvþâ¯À†©µI½ü䥵¶Wy[H ­,ôe¿Õ#fÖ׳B~>w•¹þùºhBƾcdôTrÀͨ] p~å¥å!aÖµ¤qnÀùñ¿½*'DѼëaóY;•ôq–ÌŒÎ;ÎeÓ¤â¤8÷­-€³ã@ã#nÐGCF²é#êÿbCý_èÊ3Ù¬Âé8¶@7•ç]b¢…Y2KÚ—Þ”@hÏåe žûÝÑÙ*~Я„çØƒùŽ‘}«l≭Û(ž&pž‰0æê*Èü/—Fƒõg|§ûãƒÝzËcîÅ`£çóLD¸:m‰¦ÁÅØ8{æAøØ+;ŒgìlˆXãZ³+ Ÿ›oì Ý·0æ8ŸàÂy?Udì5ÿάA 5®Js”pÐ[v\2팬<×8s´õç—Ý–€Ð kPàíÍÖ×b¤MŸèyé=fboàzÂÿ;Úþþ÷m­‰Œÿþú¦ªL/ çÓÒBÊ\´.4gh!’ã4„À¹fØk´¶Èd‡~´þß_ßÔFÛ›U† F^žçÚå\ìô”~úù_Ú1yn&–’ù½*¡ë;…³`¾º@;=£¦›À¹Ì‡²Á+TÕHõC4ç2_’ùÝ%öàåE߬Ì^kÅÊ Ñ6•Ñz^úÿõsÂþO"Úǯ¾þõãt´Æ¿®ŸlÛv)ÓŒ~*àø—€ SFáŸ^Nøù/ŸþwÿòíË ?ÿ%àÓÿ>ÿ¿\/ßÿuçåÿ|¹–®ÿëÎÒýÙŸþçûž~-]ÿ×¥q·ˆÀñéO1-‹nßÿb®dK¿B¬rŸlOá|ª†sí~ù—½›[mýÔ}1—ÅçîªOoÁÚe±(\äÏS úôöxo¼éO¿\0îŒéßÞ:–[ çÆ¾z|»i3‹ûÒ]>?”Òž¾[Ò ÁYÚ(”£ëöüíÕ^mãå/+Éìå+ßš"áüÈ%¤ÁÓÛ`ˆñôËó. úÓãB’pöí9ä‚V¾ó]Çÿ~šxqE}z»¦Ÿ$œ?ý@$öÝö Ó/æò#x®æ••¯àüéî¼Êžîª@\3õåOÇŸ]¥yåé­_9€³^d»‹Šô=çpÙË/æ (øÉÊ+2_=L#á¼uaò‡¯ÀW>W•étqùfü$õ•}/ÝG¤p±ïgÉ _y·õF¶_Ì ‰·útWúd ç·ýÎù·û–úïð_]ˆ©ÚÓ½ÉQÂÛØ é{N% ¦½ò‚¢ ¯¾ò5ÚpöôàÏKþœmJõœûËïtñýlÓ.l& ç·ê¯bÚj"‡‘º\z9"@}zŒCã\´'9ÛuNOoÏãY}ï\÷¶§·áŠQ¹}fƒV¦lÄL\ñÆ_yz6Ceœ=ݶY|èéy ¥+ìuÊŽB_•ºÞž—Âù ëxæ敯 ?šT¢þ~ÁEû1uå‰o3àœm¶ã¸xzköÞ7î:âb‡]¯=ÝßfÀ¹Æ…£*¯¼1±OÅüb®s4^ÐñÊÓ}ú>à\ãR°Hß÷ ±ÝD^ ~†ýŠk½ÎWÞe>¹”†Ô}íõ×·=½XŽνÊpf"ØÓSåÛŸ~ú¼bæ5¶ñ>J8×÷"ôi£ïç„Í)ýgrä錬h\eþ¹»FÏßïïWæÎÉáWþŸ¤¾~e)DßÅ·Á¯ô¿¡ðFø•äà鎷ÁíZh؆^y÷Å®…önøPbî)ã/v- ´÷ÂÀúôvw¹»Äv- ´·Ã@KÆØ~±ka ½Æ– ¾ˆÚ®…ö^ب2·n`¾Ú{a`“xkíºµ0ÐÞ Û·§¸]ëË/…ö^ØöÝlýHø‹] í½0p_ú4‚P»Ú{aàáä±tka ½îRí ‹µ0ÐÞ w¶ ¾/ÝZho‡Î¸^ÃQÍÄRho‡û`á¾qka ½Ö§›ÔkY­„övØF­™neÖÂ@{; t9Æ¡°ka ½Ö§û)t¢^ íÍ0ðhšÚûÚÛa`»l=˜v- ´ïë¦t™_ íí0ЧÔ[8T±Y íÍ0°‰ëWRëË/…ö^جL0nø67ÃÀ¶t.ŽpàfÈá7Ã@¿røÍ0Ão†~3 œá_{ìÂÀó0ñ« 1rŒû÷#ì>öFx¾@ öxŸ@$¥ÃN™ÿÚã ½?ò¯?”©˜¿— þó,@yã·÷D*Ü<Øëéß^àØž7»üù7¼|÷ÂCþ†§ÓaéŸï?ÎÜþõíö¾“9´Úìe ¸.Ú~%s)¿ß›KhÉ=m2äkðiÜ}8™ú£Mºz Nfhsw^ƒ“YÚ|°ò—‰üJ[²+süò¨¿’ÞÍZ¿r'½¿’³Z_äW—î+ìÎû›—ýé¤] Òeòu¦ýßÞ#Ïë÷Zß„Wà?¾ü<&køüå—ÿžàç, C¯«oîÈo¶ýÓùß2CrIƒ‡þ+Ó\ßñ‡8/.]¥~žÆ™]8®ùžÈã@-»+Ñ*ࣄ7FçøK+´2=>,n»ì;…￲ýW)û½þüƒ%ž¾÷Ip? ¿Íäé¡ÿÁµ©~ <ö_Ù˜(<õ?´¹ÚËçû¸÷—:ÿÐ/øì78ÆÒ$6ûÆÙ„g›½nÃÇ À]/-©á÷Ñ-‰M)±ø¬À‘:¾ü,6¹”äµ§§!›Õ#ÏBlvyìqœ€—!›Æ›óÛ?}þO_”}’RAOo¿²ãW>¤8þàÆZ«jîǯê;úñ‡®K›-ñÊ x¿j3àÆÒøCLAƒçñ«à yù2þà Zy¤Xª.)p¦Xª.)p¦Xª.)p¦Xª.)p¦XíŸþøöŸÇkQZy]2aÀ-иª29ÇD¹Î^¨ÿ«NwKuãmáWÿMŠ9+ðpýªÝ·Ü׸VJï*+à©õäxܹš4®ý¡>Ý$^z=T0ÉE qÆdcзO×:lîïÂ5δŸ¤ÀýøUkŠ4®D»y>4® ‚õHãrÌVƒËmê"Ò¸”](þ>³kg×4ήiœ½¥q¡Úý¯J§ýXr8ü¦kÄá7]#¿éq8r¨Æ]N4®˜–äÐ8›Ç Q÷ã¸5»Ë@k ½ÅŸ€÷²Þ)n®q­DÖàà °&Ó§w³­«&XùIãö¾þ¥3i+[PàŽÈÙ“ëf«ºÐï`x ‡ :¥]ã* õ¶–žÆ¯¬…·Ÿ)iß>4®®û1ŠrÒ8ÿÒhvKàǯú •TÕÒŽ?t*6Ù Áû å¼]ØÎ?ôEÉÕz;~ÕW(•³Ýù‡¾()ýé}…’I~?@?ÿÐ%6 ,Ý·¿~ý˜Øf„kýXò»9ü¦ßÍá7ýn¿éwsøïýîÝív>yÍíÈïnnwÌ ÜÖ«F'/`w»­ƒT¿»¹Ý®(ðLxo‚Njn·—ðÙ 0ÍšÈIí¬§œä椒Uà„“R*q’ßü¦½<á$ç2æ¤ØG øà$»]ãgNªn@ÉÉG''™5N2kœdÖ8ɼ‰“–"¿™pøÍÈ„ÃoF&þûÈ$TS#€OœZ‰Oœœ-YƒwNªâÙ˘ûI¾M&RàqT™Ôo/‚“Ú_œ78©Íh ˆ“\Õ¸¬À'¹íh86q’ÙZÀTLðwr’]ã$»ÆIv“ìkœÔÎm¿üýŸÏŸ~:†öU'üåËRPÇá7ƒ:¿ÔqøÍ ŽÃŸïÞrU'á³^ÖÐÉ% TqËm,¬÷£#*nÕé‡ÇQ-—6¶\[]§JÏãWgS¦Š{qîU·Dà“^ƇÖ T1V¸Óàê®çÞw‡«bð1E§Àû Sü!uL}}/°òL/«w›ö}\}5Ï^{ù®—¾†Íéùo//š{@V~ÿ•Žn Ü‘ÿy³A²ÚküaÕ®K |Õ®Xレv]Rà}…Åb³ëR‡/…k~3\ãð›á‡ß ×8üæ1 …¿ã˜„Ão“pøÍc¿yLBàˆU VàŒU VàŒU VàŒU VàŒç‡ê•#ŸùX¥`ÎøX¥`ÎøX¥`ÎøX¥`¹tS¶™(XeÊÇÛ̬±ÍÄÇíwÛ̬±ÍÌÇ„m& þ ±ÍÄÇ'Ûô_-…ª~3Tåð›¡*‡ß U9üæ!…¿ãÃo¢qøÍC4¿yˆFàïãc»ÆÇvíÛ;|lmeZ¢„¿“íÛ5>¶k|lOlCùXg›™ ÛP>ÖÙ†òñÄ6”u¶¡|<± åcm(_lsþêÏÇ¥hœÃoFã~3çð›Ñ8‡Ãh¼µºêb÷ÿ'áû¯º UµrÎ?t± [u=5x—!os9Ííþ‡Ð}ú8ï2TÑñʵ?t±±uã{úŒÃópT\.^>W%Œ¥[ «8üfXÅá7Ã*¿VqøÍ°ŠÂßVqøÍ°ŠÃo†U~3¬"p¤Xª.)p¦Xª.)p¦Xª.)p¦Xª.)p¦X¿«>ûóqÉqæð›Ž3‡ßtœ9ü¦ãÌá7g ‡ãÌá7g¿é8søMÇ™Àß§qvMãìšÆÙ5³·4ŽUŸu88Î þñšõ²æ@½¬9P/kÔËMê $œŠàáÆ§ ¤®ýÏÁX îGP(I©{ð5^Î=v ön,G3ûYêêÿÞ aTà=2q¾˜X€ÔµápI®üûŽ3׎3׎3׎3׎3׎3׎3׎3׎3Öüî—5¿ûeÍï~Yó»_Öüî—5¿ûeÍï~Yó»_Öüîìw_J¯R°g|¬R°g|¬R°g|¬R°g|üÛãŒÇµãŒÇµãŒÇµãŒÇµãŒÇµãŒÇµãŒÇµãŒÇµãŒÇ7g¬Ee/kQÙËZTö²•½¬Ee/kQÙËZTö²•½¬Ee/8*{;Û5>¶k|l×øØÞácqœñ¸vœñ¸vœñ¸vœñ¸vœñ¸vœñ¸vœñ¸vœñ¸vœñøêq Ó­í×èþ|^;çx^;çx^;çx^;çx~C˜Þ†j y2íÿ$|ÿÕ.Ûþoü¡ËSô[ŸÇ#à]¸B¨bëÆFrÈç0qø®vÆêÇÒÈ-¹8òž Þ…ËÆ’6òÔ¦Z ±Y;çx^;çx^;çx^;çx^;çx^;çx^;çx^;çx^;çp¤Xª.)p¦Xª.)p¦Xª.)p¦Xª.)p¦X¿=çx^;çx^;çx^;çx^;çx^;çx^;çx^;çx^;çx^;çð÷iœ]Ó8»¦qvMãì-cç_þîÁó/Å5j˜\£Ñ߀Á‰käü¹òûÆò-Œ›Þ…ËXcNû¾ÿaÈS5?Ý=àð!\­‡.y:apŸ{(ÄáC¸LuÜ݇ß5 úG¹a’-5 2m‚¢Uà£ú,n†^Ëg.„~¯’ÃGõ™=Å‹‚3c]Ôž>ªÏjH¯‘ ã¾;#ðùòfx¶Æ;š5á2kÂeքˬ —¹+\)úâ$œ WtÆTÍXùØ'>„+Ä”ámWà ¯À‡p™’NkÀ…ËĨ½<®v V3nžp’AÂÕø4o£×?vM¸ìšpÙ5á²kÂeo —qÉIø$\ûõKƒ…Ë“öa N„«Æ½ Wk¥¯À©p-ïpyŸ8®0s¹’åË3áÊÞÚÑtè·&\nM¸Üšp¹5árw…«juöΘ+äè±pUW.+p*\Öb³hC¶ œ ×§Â5ŽX9œ W,V./_~.[?±¨×¯×|®Ç5ŸëqÍçz\ó¹ßâs͵JÆ–îwø”"(ÁD#Ën?´«ü¾Ç—îIöÙ†²â¦ï5øH‘œYñ­ŽÚ˳§jüÎûSV¼.]<ÇÊ›5±1kbcÖÄÆ¬‰¹)6>µé>>‹MŽÕéJHlŒ)Æ*ð!6Í¡ÏHlR6×Xp= ¶`\”bsÜq |pR›†š¡Ø˜P$œqR²y3ãíšpÙ5á²kÂeׄËÞ.›C2΄kÿ._Ò¸Ïáž›®`ár¦7,ãp"\Ö8 9i³!+ðLƒMZeYh|™äËÏq {ðM8û¯Üšp¹5árkÂåÖ„ËÝ®==”}p&\n+9BáÚl¶ |W.6Bƒ—ª§“8®-‡„+T¾(p*\­¦ã趘œ W;Ó ¸8wëšñ²æf½¬¹Y/knÖËš›õr;µÕ¦Kyðtv±2g¿û0}ã^ÔÔ–MÕC>¼‰¶>|ø­Lð!u-­¡Á‰ïítB|xSzÒê§¶®¼éyýüK+Pý‡ÔxÖ_Mª¡Œ?¥kò¤À‡ÂîÂ5þ0v—'>–n®ñ‡±t»<)ð±t»p?Œ¥Ûå©Ã͚ƙ53kgÖ4îf¾¯‘¨+`é˜ÆÕ°&“«÷W½LN4®*v€gûti$/—<Œš7ï²'W= Eã‚>i\j³/SH¿×8³¦qfMã̚ƙ5³kg×4ήiœ]Ó¸»IÐv²BVÞ*W=ß-!«ž¯/ ܘÎYƵ“«Àã|Ì5Η8ѸºÀjÜ–‰Â"·Ý´#Çdû½ÆÙ5³kg×4ÎþŸhò=ûéܧÏsk¨—´5÷¡—AS½ìgó1}Œ£âŒÃÉ™½égó1}h)zNªdR¼ôr>¦¯lnµoz¹e— ï¹ÅÐCJgzYM‰zé¬íê8|XB“’ƒ¾ggûÕx'z\ôR/wÅ,AS½Œ4ý<éeO7kbcÖÄÆ¬‰YsSlZ¢87í;¡ózé‡{™p¦µÏuUŸN鼘„é|qpøDç9)bcäʳ3­-ÚQ§òé³].»&\vM¸ìšpÙ»ÂÕþwðt&\­Þ!Bá ®÷åçp"\5Àœ”"Ú8!\Öx,\Îh/O…˦€…+mòå'ár&çPŒ–…”æÖ¤Î­I[“:·&uî®ÔUªJFÂçcúýÀÈA©³&z>y¨4¤ ô} œH‹9c©ÛÐÒ ©3F‘ºhäË¿V½öýåK_àþo&\zרœë ü?øÿ>Üà‘·y.¸¸àCá盉I%Îÿw6:Ð~€wæK ^jàp¯]jðR‡GíRC‚—8FUíCö„Ê\sõ$œÇóø<2ð…ϳ0æ`ãóFj—σ*ÃÇç‘!Tl|T>> ¡bãó€ÊœÕ› ”PùLr¾>¦¿°±0£ãŸGᣠ3:^ðñy>:±±0cà ŸGá£ãE s |±0i£ªœR¿é”røM§”Ão:¥>O¶Ûçß {Œ¼Sàc²Ý>ÿÐÅ1òNi›ûü»`ŠuJ9|ÐÅ>ÿXØcä„óaQód;Bl²FÓd;Bl²Bód;2ŠM¶SèbžlGè‚M¶ƒtšFÖ'»™¢ÀoÓ…Y£ ³Ff.–r¿ésøM‡œÃo:ä>ÛGÓº8¦Ñ)ð1tnMèâ˜F§À‡w±¦ÞÅ1Næûh:@Ç4: gtÁ†Î ºàCç C·Αqrlè¦ 6tnÐ:‡é‚ #ãäØÐ9@®Šö–Á Ìøà«{6îta×è®хý?¡ pÒP<³µ²pøÍ…Ão†,~3d!p> c‘A†_L#2”„(‘A†_L#2·È ÷bèˆ Åmç#2 ½aåÒMŠB»—V@•‹¯Ÿ5ŠU¿(n;ï)5œ“yD†â¶óžRq\-™Fd(n;ï)5ºEÍ#2·}ô”’}RçápöÃÐ4•uSõäÞÀË󦩬›ê >ŽÂ©°nªƒTøp8 +gÍXŠL8üfdÂá7#¿™Pø;Òå~3]Îá7Óå~3]NàïcD³ÆˆfÍ#̈%ØÍÉ!n¶2b»Ð¡Ào3¢YcD³Æˆæ#žD W~bÄ“>È6y(ð0Î#+HF<û™*ðѶtgÀˆ(ðq­ff…¥à‹Ão_~3øâð›Á…¿ã4„Ãož†pøÍÓ¿yBàïcD»Æˆví#Âà+=X›Î$ÛĈáÁÕ°*{~›í#Ú5F´·ñ"¹ò¬qèÎ €"PàaÜëOWÑÜ8ô Þ‡¬ð4݉@÷îXlÄÌRäÈá7#G¿9røÍÈ‘ÀçQ0|F̘þ2ψ™á£E›ÈÝi:#f†ÇnnÙŒ˜1ýež3ÃG‹46#¦ [Ϧ2-Ä~36à𛱇ߌ (ü±‡ßŒ 8üflÀá7cŸÌ›5™7k2oþodþ]¥4m.Ò‚óÈá7G¿éˆœˆ0f̰"&"Œ+_óDèƒÈ‰e\…œ&"¬e¯ײ×kÙëǵìõãZöúq-{ý¸–½~\Ë^?¾){½æ¡¾¬y¨/kêËš‡ú²æ¡¾¬y¨/kêËš‡ú‚=Ô·3¢YcD³Æˆfײ×kÙëǵìõãZöúq-{ý¸–½~\Ë^?®e¯ß”½^ @^Ö—µäe-yY @^Ö—µäe-yÁÈÛÑ®1¢]cD»ÆˆkÙëǵìõãZöúq-{ý¸–½~\Ë^?®e¯ײׯf¯aHi]?riãVÒÚÏkiíçµ´öóZZ{ÀçÉ|$Ȉy$È CÑØH1m 2ÃG¾‚1™áy¤;æ‘ cس’Ö~^Kk?¯¥µŸ×ÒÚÏkiíçµ´öóZZûy-­=àï“y³&ófMæÍÿÌ¿/­ý¼–Ö~^Kk?¯¥µŸ×ÒÚÏkiíçµ´öóZZûy-­=àïS»¦2vMeìšÊ,¥µÛ kåY‡Á¹õàä]L“£(œxsëÁqK’OŽ¢ð.6¼õà>9ŠÂ‡Ø°ÖƒtÄß<9êÞÅâc&”÷öQ¨”fŸ ¥ÀG)Í> •Òì3¡x&ma\Ä3.ÚL(gLk\6ɦm—/7:ViIlؘ̚5±1kb£µpØG?!±Ù§=)ðQµ~Bb³O{RàDlÚè'$6û´'NĦµ\‚bÓnß87Ð>žÍŒxó²êÙltlÏ’ØØ5±±kbc×ÄFkc°u’bsÎqRàDlü•äbÓæ8)p"6m¨¿iO§bã=nmGf±8›ÐÎÇÐ@Ñvò»ÑYFKbãÖÄÆ­‰[§ˆÍ>® ±Í>¡I±q¡d,6–¸N›Ó»b£Ã©Øô±Õ\l"X:>(Þ¦ ŠÎntBÓ‚Ø<®ù6k¾ÍãšoCà¬ÒcÄ$­çì%ÞſĭÇì%>îhP¢uŸ½¤ÀI™pÄôMœð£…Ããšsò¸æœ<®9'kÎ Ïû~LRû~ ORàcß÷IJhßi»@û¾OR’û~ORàd´V›¤ìÇð$gtQƒ@¿@¥¢ €–ÄÆ®‰]»&6JaØ1# ‰ÍþîÇé@² ¨9Æ")p"6mF›6Iºh“  Ø´±HÎ"è͵ÞÄ@Øê‘ªtkbãÖÄÆ­‰[óÎéGHlöG œˆM˸!±Ù)p"6mú›6ðH±Ù§a±ÙÈB‡ÅÆÔ7tˆM¬ž¶ ûîÒ< Âõ²æÂ¼¬¹0/k.Ì‹–ž9†¡›Nû\#NÊǶ«#ó|÷¹F œŒ mCŽç»Ï5Rà¤qnr=_7ý^pzæ­Y=òt1ÚáÃ)6l´Ã>óA“¥ëb3vÐÄfí@ĆvPĆvbÃF;ð>K*cÖTƬ©ŒYSœš:§!•Ù)pOÜ,“°Ê´ÁD œ¨L›RôN]HÞ)p¢2mJT™6˜HÀY#§úðdeß·¾ê̶§¿Oe̚ʘ5•1k*c×TÆ®©Œ]S»¦2Ú}Ú}ÌR™}²÷4YïA{ö3A¯À㔬ÇCòÚd!>ìrx€ÍŒ^þQšù– –ÙÜôP\Ü<ظ÷©Œ]S»¦2öÿDeû6 ÑÁ=HÙØ„Y±‚§Š5M‡²|€r(;MŠÅ)u óØ2²‹ ÂîÛ>')Ö>H[Ôæ![´Ràtúd ÊôIµ—'™ˆ6p+V´tÍÒ¾›µ}7kûnÖö]kÙ²úûîèÆi>È>èçž:´§Óˆ¹à)+m¶§„š6¯j–p–rû˜pªš¼ß6:ßfIlìšØØ5±±kb£öµh#|ØìS{8›6ŠM›Ú£À©žŽE©ØX£½<g;lÁÊ3±)¡R%jYlÝŒãp˜J ³X–„Ë­ —[.·&\Ê!Ú1©çž„¼9N„«MêQœÀòð¹nÜúqZÝx„uãž´ºñ ëÆ9¼€ºq6óˆ …³™ûd` Ža |Ì|Ø'C…=†A(ð1óaŸ öAƤ€“…ß~sxÐ ¿#,üæð¤~gXøÍá~³ÊíVÒ à¬rÛ_A¯Ün%Ý <Îõݰr»•t+ð<×wÃÊmZå2àH6UqTàL6UqTàL6UqTàL6Á½££&[À¹ ÃGøHÑÚhsxÐ ´#,Ðæð¤hgX Íáh³ ëVz às…õ^‡ +¬[éµs6¬°Žtê•UD{¯Ã†Ö­ôZÂß'ÚvM´íšhÛ[¢}¹FβdbÔ΂¹åð›æ–Ãoš[Gæ–Åû§±Á9Qˆ¶¥åû>†_ìu> ámˆŽÃ/ö‰:@´!:ÎC€yVéSÏfå ѳrF~’ÏÊ¢Ígå±lVí1+gík Ž€³3“c$ÎÐŽ~ïS¯ÀÇMó½i=¸Szô©Wàã¦ùÞ´Ü)=úÔ+ðÑŽ~oZÿ¡·£wÐ?nÃ/Ü,¿éfqøM7‹Ãïfcl|žV³Ï´ {Œ±QàqPB›ilÑ1ÆFñš›uŒ±‘p>ebžVC–M«ÑvšVC–M«QvžVCK°i5ŠÂ^Ój˜ÂshœŸØìCi~¯°fMa͚š5…]r9ü¦óÈá7Gÿ½óx ’ðy^Ì>U(ì1HFw…=¦Ê »’Qà“Ž©2À4º}Œ„3…eób†Âòy1ÐyäóbÈ$6/+,›3–Ï‹Á ÛçÅL {M‚ðIa¯±0¿WX»¦°vMaíÿ‰Â¢/…ŽÞXpœ9ü¦ãÌá7gÿ}žêhÓ-á¼wëÙN-ö6Ý œtãn=»QbyoÓ­Ài™}²ðvÆÞ¦[À'=ï™G[(¼;ïg2 4ŸØBá£m ëg’F ;›ØBá£m ëg2:•ð‰-îªx ð4­Ûsx ¿¹„–5­S„–µhBËšÖ)B;7­cƒY–üc¿ésøMÿ˜Ão¦!)üiH¿™†äð›iHGÔ£²gÔ£²gÔ£²gÔØæè''àõ\ÍåT¶QàŒzT¶QàŒzT¶QàŒz> †plè Uk?~5· ãn.zBáqdpç¶q‰Õ<ô„ÂGw8Ö6® J›†ž,9÷~Ó¹çð›Î=‡ßÌ Sø;2Ã~33Ìá73Ãþ>¶±klcרÆÞb›«W›€Ols5nû=ÛØ5¶±klco± (ØF¶d #©Îж‘-ÙzÓ1P°lÉ6š­Ñ–l­¬`!æàð›1‡ßŒ98ÆS÷£»»„³&î{«÷²‰ûÑÝ]GrS°ÐËv©›Ÿ½»»Ïô¿ d÷£»;™{°à”røM§”Ão:¥~Ó)¥ðw8¥~Ó)åð›N)#ÙTÅQ3ÙTÅQ3ÙTÅQ3ÙüÝÙø€¿v6Þ ,x@~Óâð›‡ßô€(ü‡ßô€8ü¦Dàïm»&ÚvM´í-ÑfgãÏÆqî/:¸`%÷·f‡_ÖìðËM;|yg>÷2>:ËËÏg“c>zïÁåç£É±öŽÇàòóÑäXÀß—û{\Ëý=®åþ×rk¹¿ÇµÜßãZîïñM¹¿57ëeÍÍzYs³^Öܬ—57ëeÍÍzYs³^°›uiÊ6 œQÊ6 œQÊ6 œQÏosk¹¿ÇµÜßãZîïq-÷÷¸–û{\Ëý=®åþÖ<ß—5Ï÷eÍó}Yó|_Ö<ß—5Ï÷eÍó}ÁžïÛÙÆ®±]c{‹mxîïq-÷÷¸–û{\Ëý=®åþ×rk¹¿Ç¥Ü_‡ƒ© ¾ëh7‡V2„ÏkÂçµ áó"“©öÑ([Âç~ØG×ì²öÑ([¡{×ì¼öÕ([íÝ»fàý°¯FÙ¤…üJ†ðy-Cø¼–!|^Ë>¯eŸ×2„ÏkÂG²©Š£g²©Š£g²©Š£g²ùÛ áó›2„ÏkÂçµ áóZ†ðy-Cø¼–!|^Ë>¯eü}¢m×DÛ®‰¶½%Ú`@À¿ñ9£Ÿ#°´ïfmßÍÚ¾›»û¾Op¶ïû¸T±OPàcß÷qpßÛ„NZs·qpß[Gçv ÝTù €¥}·kûn×öÝÞÞ÷Öâ_ÂçÆ”G¿¸ïžÜïfp²ï­ß?Ü÷Öâ_Ó}÷›Áûî}p¶ï¼“¿¥ÇMS'ÿ¥}wkûîÖöÝÝÝ÷½G¿„3}ßöÃ}w£»5‡Ó}·ó¼%·Xœîû§ûó铬ÿèÍ[ñ/ìûãš}\³ïo±ïóÉïÞd_Âç.ÇGÇ}™ÿ:›ì+ð¾ïGÇ}ÿ:šì+ð‘ Û;îƒü×ÑdŸôT_Ú8³¶qfmãÌÍ;ºäKø¼qGË|´q{—|>6Žôí™7nï’¯ÀÇõ¤½eþ4!ÚMnSXÞ ¿+¬h†¿´ïvmßíÚ¾Û»û¾·¹—p¶ïûÏÀ¾mîx$^¿+xß[›{Nö½õ¼‡ Ûúà 8‹Êx7ûq×›w³_Úw·¶ïnmßÝ­}¿úÔK8Û÷½i=Ü÷mt©àð±ï{Óz¸ï­O½'ûÞšÖ£}ßûÔ 8ÛwÞŽ¾ï»hG¯ÝÕ“U^ÖÌøËšY3ã/·Ãô£Ñ¼„³zö½ë<¸P~4šWàÃ}Û»Î#÷mo4¯ÀI¸2ÁI¸Öh^Àa®æwéòtÑÐwêô;•¼ }ŸúŠN¿Ce”}ŸúòN¿cQ”}g }÷}'-´—DÛ¬‰¶Yí›™ˆ³!¼„3Ñ޻ãÈdo¯À‰h·îðP´[CxN{í&G¶†ðÎ'ð¾ïWJö}_m³&ÚfM´Í›DÛ®‰¶]m»&Úw“-Gãv çm¤[w$Ú{ãvNÚ ›©»iÝÙ·+ði¤Á†E»5npÖb€÷g·W‰‚èϾ$ÚvM´íšhÛ×D[ñTzØÛxÓ(óS[Ñy©ÌOÝnÇAï¼NátêõÔívÈ<ï¼NáäÀ´w»ežÊÞS]™Ìï Ö!·žê œŒñh Ö¡Ì·žê œN¾q´Ð>{ª“ÚKgÖ6άmœ¹¹qGSt ç禕'dÕš¢+ðidQPæ¯dõ锬ŠÁ3^mÚ$œ%xïó~$zŸ/í»]Ûw»¶ïöî¾ï]Í%œíûÞâî{ëj®Àɾ·çØH£§ûn2wÇùòlßyóòxŠæåjà¹%ÒÄzI:Üšt¸5épw¥coK.árÙ'"ìmÉøäÂPçžHGkK®À‰t¸«XOHǾý]gë8~-]ÿ7Ûwýhý¿¯õÀþà ûøoá#Ÿ„ºÿ>êAp÷qÇ«FÈ·Ýǧÿ,ï>î`q.í>®ÂÏum1çîã¾÷Àö`™ä\?`ý$‡G­~2ÁúIÏZýdõ“Κڲn·£íÜív†ÿ˜u»}lçn·3|4µeÝnG[ÞȬ¼,€ °’ãV™`$‡g­²ÀH gŒ­ÎV0úáùrxœëƒï¥ <ÏuŽÁ[i£„¿Olؘ̚ÿ±aeëG¡"²ï¼³·”:P›`m"‡G­61ÁÚDÏZmbµ‰Ί [ "*.Ü«xœKÔU‡ <Ï%ˆHêöªC ŸÔÙ5©³kRg‘ÔI÷ÀA÷ µ^°2~ÓÊpøM+Cá³ëº÷Ö–ÞêÙN[ìÛÞ[HÝÑN[“&¼­·6º£¶„s§tîšMºu²®Ù:¥¬köÈñ®ÙPêx×lÒ^—uÍRw5ǹ䣶M9÷ÖàîÎÑ­S¼{ëNpwçèÖ©ÀÇ Þ½uç‡Þ”ÓCǬ5á]p8ü¦{Àá7Ý ŸûVïÝ­Q ­øè[½w·*s4´Và£ÑüÞÝúhƒKÝçÝnç¾ÕDeXßjMe¦¾ÕDeXßjEeæ¾Õ¤Á-ë[ UæhOrÔ{Gj~[e̚ʘ5•Yòm8ü¦oÃá7} Ÿ;Gïý¥Ê-¥øè½÷—*s´”VàÃÊìý¥•9ZJK8SÖ9z¨ ï }Þ9šô„f£±Ê°ÎÑCexçh 2Wƒh¡2WOh~[eìšÊØÿ•‘Y½fMH#Ú÷Ãoºo~Ó}#pÞßpn|HZN•$o|HZNˆ7>¤e´ñ!ô€dÿ–C6Qïf(›¼Kœ¯5+ð4ßq²)z7CÙý[d–!›déX–=i-» œYøP¬]¸P„]žøP¬Y¸–¼4¿é¥qøM/Âß‘Äáð›I¿™Ä!ð÷©µYSk³¦Ö«õÑ(E¨õÕEßVk³¦ÖæžZËöÇH­E ”8n$±öÇP­y ”LXan ÕšiÆ’'Éá7=I¿éIRø;²d~3KÆá7³dþ>µ¶kjm×Ôz’WG¡ÖW~[­íšZÛ[j ú µ–½FâH²>Ã@­e¯‘~ùYôj-º_.ù±~Óåð›~,Ï]*yûÊјrn_9ÃÇtÖ¾2‘»´}å Ïãvùܾ²Ðû„SgÖ?‰ÃoúI~ÓO¢ðwøI~ÓOâð›~¿Olؘ̚ÿ±y×aWëzº`Æ9ü¦çð›fœÂßaÆ9ü¦çð›fœÀß'uvMêìšÔ-vu8j©KúO®åTÖlÑËš-zÁ¶èr+ä ¬¬¡´E²¡Üh77”öH4”•«sC¹µœÊãZNåq-§ò¸–Sy\Ë©<®åTß”SYó^Ö|…—5_áeÍWxYó^Ö|…ì+¼]­ÍšZ›5µ^Ë©<®åT×r*k9•ǵœÊãZNåñM9•5gìeÍ{YsÆ^Öœ±—5gìeÍ{ÁÎØÛÕÚ®©µ]S뵜ÊãZNåq-§ò¸–Sy\Ë©<®åT_Í©÷ìÍIЕdËóZ²åy-Ù2àsÃ?Þ plÉÜ p†Î¹¬àèœ;wœá#~aÇ–ð&—+É–çµdËóZ²åy-Ùò¼–ly^K¶ øûÄÆ¬‰ù¿›÷%[ž×’-ÏkÉ–çµdËóZ²åy-Ùò¼–lð÷I]“:»&uKÉ–Ö×Ò€Wãç;óÞ™çð¨Ý™OðÎ<‡gíÎ|wæ ü%áG«Q>ʦö¾£è°ko5ªÀ3½rïî­FœÑï(:.˜òŽ¢KgÖ6άmœvƒdoŠ6nïªÀÇ)åÞ8mÜÞ+T“kCÑÆí½Bœóœí6ø³G1þ”|8Úm*ðQ¼÷ÞDɇ½Ý&iθ´òfmåÍÚÊ+'¿GóL°òG¿L>V~ož‰Vž^(çð±ò{óL¹òg¿Lg*ÃÛbv•m1—6ήmœ]Û8åðôè~‰6nÿ‹S™öî—`㎆— œl\ë~ 7®5¼pæÏó¾–ãÎïk¹´qnmãÜÚÆ9˜h=ÛW¢Û;V*p²q-F·w¬TàdãZûJ¸q­c¥€³ã)ûƉƔک÷Ü pa{_ÖLÙËš){ѵ£ÿ$ªMÜ[N*ðHûƒDèƒì-'8i ÞúOÂÁßg“§‹VdS²éDmÜÔŠLô(¢­lÜÜŠŒ÷(ßÎÛï-IY“:³&u8Ö<[C"©Û»A*ðáùî­!¡Ôµn œH]k ùv KÞ 8»ŽÈ›>^IÙôqIêÌšÔ™5©³kRgפήIV‡½wmDR·7jTà‘¦]¤ X:Yáa…‡'­Â'à /¨Â‡•èéÇÎJtæéÇi®ÝQày.ä%:dú1£íUwT³íUwT³íuŠÓüáç–÷ø“Ò*q"¬Äáð¤UâdX‰ÃáUâ°R2@˜ÂçR6@8Í56 <Ï7°”&ÒÎ’vM:ìštØ[ÒÁFø8 {E/¾Úåð›´Ëáˆv™›µwÙpêf-÷€t]öøè ¶·Üû€:ƒµ.{ν©¹™i`Äšé!éÍôFÈÏ›éAéÍô&é¸Úä 8KÅ=ó>€>E{#>îìÝŒ@%ôÑÀH;{7£½OQ€¾Bë ¶`ð8ü¦Áãðß¼£Ï€Ïíìö¦w@h>w <µhMï¥}î$œ·àšÛÙ¡eíì4¡ÚÙ¡eí졽ÚÙ1¡=Õ 8Ïäí]ë~/´fMhÍšÐ.Ùa¿i‡9ü÷vøè4àsC¹½íÚ£ÓœïB{´CL»wš“p&´¬¡ÜZÞPÚaÞPŽ´Šc å°Ðö†r“Ð^­â|Ú«oÜï…Ö® ­ý?ZÐÎl´©Ú‚Áá7ÿ}ìvt‘pÞ$¦µ’AÙ¬½{Œ'MbZ+”îØ»Çø$Còú±Ç×àg§×+}ÒÀ^dá7÷" ¿¹Iø{‘…ßÜ‹ü=éðcÒáoI‡9½>àðôçï³¢¤‰HÇìñ|Ó?7º®)6D}å÷÷¨ü~potð÷"Òc鱈ôÇXDúc,"ýq)"Ûðæ± oÛðæ± oÛðf¼á=%ª ý¡*CàF^F¤?Æ"Òc鱈ôÇXDúc,"óæ1/`óæ1/`ófì\W?¦2þ–ÊØˆôÇXDúc,"ý1‘þ‹H E¤;¼÷“| ’–i$ný5·þºà')ª’‡I×T%B“žªäÁaBàïÕFhòa©Jž&‚ g$ný5·þ‹[Å­¿ÆâÖŽ>/ý¢n>/ý¢n>ï˸õ×¥¸õ×XÜúk,ný5·þ‹[Å­ü=éðcÒáoI‡[]©ºZÙrÒìùÒÍ`6ƒYxaÍ`6ƒYxÍ`gÅ®ÿ% Óʳo D^e/¼ÒðÁ@ÔÁ’Z¢¡£¡Ã ­¼wwå7 ¡nV~ãByƒBˆÀ•ßø„àʯBÜšGÃt4ù[¦ ¡•÷c+ïo¯üÊÔûk<'‡W>Šk+¿Á•_9€:¸YyKõ³¯|Gõ3´òalåÃÝ•ßH|z¸‘ùÑ®üJâCàrå½ÇÖÆ‹"Ún c WÏÁÊa¹zVþǘÿqÅÎë“á…§‡kŠ%  x°ðø¾òJD@±±ðÊ—¡¥scKçn.݃F§‡ë¥{pê ¥ÛhtüXºS-ÝF£ÓÁÐZ¶œ]h;¶œ¡•÷c+ïï®üƃÓÃÍÊo?+ÿàÁ!ð*< Ððʯ<8Üøˆ–îæ(·¶t7C+ÆV>ÜZù'‘M7+¿±ÚÀ•ŸŽn ?V~cµ+¿Ùtp³ò–¯f_ùޝ&±®Ð ‰G¾ÏoIï‰'H´ñ–¸Ú‹¼Ôyã-éàoù±+%ÉóÝ÷¿ÍÊó£÷ÿ=#Éøp@Oò~Dxˆžä%üÈØ`z’dó:âÝô$Ꟶô$ 2Hz ÿZ—®[[Ó“`øFÑ‘?`>\'Ê L”[xe‰òånø A!D^A#D½{Ÿé.0Ómá•eºÌtK¸IUë+€ŠÎaxÕ md†ä@þÞÊ»ÿ›•7e.öž“Ð+Dÿá@ºÀ$´…W–„n0 -á&‹¬oÑ):½LàUçšÁ‡S·èø{Î}8>\¿M$¸M¬üÖÆÂoZ ×^ÀF¾Ñoü_|~D¤ùb(Øø6z¸Ýß5­†hã6´îï†VãÄ,­øpOö pDñ Ì ð¢{ºAÅÙ£›À›îé>ºµ3éÖ2Ô~ÓPK¸&¶Øè/€¾?/ü ¶Øè/€Ø</z¸¥ÐÄBl ±El!ÄÆ[@±yðW ³‹²‚Ào‹›¡mÂÂon®©%6 6Î ?¨%6 6ΉnÄÆPKbc©%à6a©%i„¡–bódèÄæIAà·ÅÆÿŸˆ â†H’à``+³ð›[™€Û¶[Ý[H?.qœm?n#ý¸p3é[i%w€Ÿ×¶ÒTJî?ïÑJÓ÷ˆËáw7½0ærøª›d¼‡¡ËÂoîXþFhaá7C O6ݘl:,›ö‚ô¤ÛTü¶lº{²Ùó# ÙìºQ*åG€²i¤ch[´ð›Û¢„¿=YøÍèIÀß“M?&›p[ìoùNº„Ào˦¿%›€ˆÈfßöQ)Í®1yhWµð›»ª€ëbÛY\Hg±†WÖYÜhßùÀžaá7÷ cϰð›{†€¿·òîÿfåß:ŽZ{º ª…ß4¨þ†Aµð›UÀßûp~ìà GípU*®ˆîçOÌ&ÍØ&õ}Ž…ô9B›Ô÷96Òç8æéÿóôŒyú?Æ<ý—<ý1«=YíyÌjÏcV{ÆVûºlº1ÙóôŒyú?Æ<ýcžþKžþØÆ4mLóØÆ4mL3Þ˜®Ë¦“Í1Oÿǘ§ÿcÌÓÿ1æéÿ8õô?à¥]¾Êöå‘à×XpÀu/¦mÒ,¤ISÃ+kÒl´…w$ø5ü ~…ü½•wÿ7+ÿ^ðk,ø5ü ~…ü½çÇ>ÜP°¶ÝæX¥¬Ë— íX–ðÊÊ—íX¾—Ìô"xÕÉè8jëEîàFæmËq¢-ÇCKçÆ–Ž°lÅhé¶fb¯º³-ÝÖLÜÁ­¹0=Éö -[:VB²µÀ[&ç¼êÖ`¸tk7p7Kg›~múZº0¶t,ÝÖÛ‹¤nkç%ðª{{ñÒya¬^:Ûµ›h×îÀÒý³unNжæ\ÐG÷èÇ%ðª›sCþèǽ£CïîÆÞo>ºkÁ»?j ¼êîZôî[Cm7bcûfí›Z:?¶tä€ñÑ‹–n{BàU·Ç‚¥{tÄvpã]ØÆ×D_‡–.Œ-]€!ðW+Zº­¥•À«îoEK·µ´vp³t¶s5ÑÎUv6;å,:x3i3sß ª(›¸õ¤xÕ ªh7ØzR;ø[ž¯½ëSíc…¶žJxeíc6}87öá°óøÕ;Š>ÜÖ.JàU÷ŽÂ·¶‹vpSTg»Bí úpnìÃù±çÇ>Ëßom°óníä$ðªÛ:aûØÚÉÙÁMY›mØL´asèÃùÿ“ ªŸä½ï¸FÚ´PÚ— ŽúªFû2±A5wÞÝqIàU·_Âní¢/nzw7öî¬lÊÜ:_tË$WÝ?Ix Ô­óÐG´‘‰vF-[:ZÕ£ï}/ºç‘À«n€„Kgî}‡Kg[mm¤ŽN”ÝC Ƙ„½öæõ¢› ¼êFbvÕÍëŽÎÚ˜Eobf½‰™ö&²|Ä€ƒÞÄ—ðÃ;G½‰/áÇ©+îMÌöl¶ëMÌg½‰&Ñdob>ëMÌ åE÷&fÞ›X>`ÂGg‚*íM”ð2A¦SÊÞ}^`§”¹û¼é*Ñâ&ß§r*m.ì'oR9&cn/8£yp›NÒôp´BtQ¼õMf&¯ÙÝÿ] AµM€ýƒ”K¥M€peÊÅäLÌÞp-•lÓÉ”þÞû[ ®Ð.ÈíšõÔÏ‘ú™ËÞ ¸¿»é6¼n7&ÝmWi·Z`Ñm§ÜB]P„go¡®º³…À›ns9X m—0=þÚôt÷@CͰ÷@7Ý×Ãm’îw«´ß}¸PЇënb†šaobfÎ}¸!“fá¯MZw2üpö.ä¦[Ñz¸ùp¦ã¬ÒŽ3hÒŽŽ3õáÀmÄàÃõ·³çÿO>¨lq^v] T íÏt÷Ü» ïnº©¡ƒ«ÏÐW‚fÚó%á•U45ÚóUH)§ºÿ¨êOo¤µkÈnZøM—MÂßpÙ ýîÞúÎóÝ»[i{õw™ïNàF`™¤i›’Ÿ·²bÊFÚ¦†Ì®…ßô$%ü ORÀßûîþÖwW«‚ïÞ_dþ»¿õÝAKøî}¡bƒ…Škh>`-ÚcÕúÐÝNZ`냹´éžѳ2`¬,ü¦±’ð7Œ•€£¢‹Bà­ï9‹/øY|¹6‡ X ¿i$ü « àï-°¿µÀà’Ë“ø’4ܨ¶?é¦^>-Nוßö–ʦKÂ;ø{~Ò1?éǘŸôã’Ÿ4fzæ1Ó3™ž›ž¾/ Òž ²/àÔOú1æ'ýó“~ŒùIcq³ˆó˜Eœ±E¼þÝý­ï.üñ“~ŒùI?†ü¤Þ[ípˆöš©ñ¦~]°ÚªŠ¼»3¯ *r{g^Óåå¢üÄ›ú5æMýó¦8Z!º(ÞúüSoê×%oêט7õkÌ›ú5æMð÷ØßZ`põÚëÓúµ˜¿|Àò]—Si#ƒ„7P—s–,û/9\²w§5Ý¢ÐÁ¤ÙN„L;†ÞÝÝ}w{{~ws{YÓ=Üj™i%È´•`èÝýíw7÷‡¡wïîkºI ƒ›w·½™ö ½{¸ûîö/üÝÍ ^MWùwpÛãiŠù3-æx÷Wô]GŽö-$uwh5]¦/*Ò‡&ïnN¾»Å NÞÞbÕt}7ΖÓgZN?ôîþî»Û{¤ð»›{¤š.”ïàfDzõð™Öý{¸õîà&'üîæ&§¦+Ý;¸yw[ОiA;ñ¢K)‹ºVh¾½ww)ᑹK©éRõý™W.Œ½+ƒUõ±•V¤KxÓõ±¢üyhoú ýuDxÍuDM—”wp“Ķ•ã™VŽ-°»´À~lï:$Ý>xÍ>M—~wp“l¶Þ™Vx-°?[`l;B”µÛ2Ê)¬F´ÒÚm o FÔÞl.ÅÁ+o.Åiº*[ MÞÝœ|w- ™| WòØki K`«§3­žzw÷ÝíÅ0øÝÍÅ0M×EwpKÖkÊŸ3-fÛ⤠‡V(Ü]!{5KaZ¬­·W³ l‹kÍrõË…Õ/Z¿ÌÎå>Ô/¿„>ª_~ ?ÎTpýr±'/]ýr9«_.ðÐWÖ/—³úåŠuýráõËõ|êÑFë—+,@65¢á‚Ñû#ÍF +>“Ôd0MVöð±É›cqKÇRhmpÿîà´±ÑÚàŠ 5ŸJÓçˆ=ü½w÷èÝ{sQhÙî€ÔI¸6¨æ’Œ¦ r{¸5•ºî¶Ñº[ðîý5EWÔxÓÅ~G_¥…³*#áºòÕ\ÑtIl·u’ºòµÑÊW¸töª†¢kZ üöÒ iœ„ëÚSsYBÓE©=Ü,©=m´ö,]]AÑU¥þîÒû|•j-à¶L—‰5R&õ²¯j(´ú®ÐQÕЗ%hÊþ Ët‘çöJøž€¿·À/°%³,ºb€À_.p_@‰خЎKø»ª€¿·ÀPÇ{FÆ¢SóþjA¥"Xà®flHÇ\×vÙ¢¯F«êôGÂßЛü[ãZ±6 Úþ†h ø{ï>ä0îpT”×deÙÈþƒe³/¿i¤üflÿù1¶ÿü¸´ÿŒéÏ<¦?3ÖŸë <¶ÿüÛ~\ÚÆ”tSÒ+éõÛ~Œí??N÷\Û嚬®Ù˜¸.“±õ3(lL¿Æ6¦>6ù÷6¦_cÓ¯±é€¿÷îCÓZT?`ÂHg’-iºw Ó‘«Âgk’ ­Iš<;?3ô¦MWup+u¦¨¨Ð¢¢¡É³0C0Út¹P7“·UA…V M>ɊϦë}:¸-è5e=…–õ L^À'iH6›.Ø¥-C£ÞÒ\6]qÓÁÍÒÙšB k†&OœpK4ÙtÉL7¶ÎVÆZ34ù“Žê±éš—n&oK[ -m©¤ýyr²>càgfÎ-ÙbÓE+ü­½HŒÞ%ðUf¿ÑÒ‰¡wÇ»AÇWØt=I7Göl¤Ð²‘¡w÷cïÎÎ} å_ӥܜíÚŠŽB+:þ/ÞiFª¢tç\Lv»Ñ ¬†5¯é’ Q¼04:;ø4¼uM×TtpcôméD¡¥C“§‡Šš9®é¢ˆnÉ%LíC¡µìäÅ…"ʆ^‘ø3–»­éª†þ–Ý\ ª(^¨¬x¡Òâx~8(^x ?öKT¼ð~ÄE¸x¡Úè©+^¨gÅ 8Èâ…zV¼PA&V/T^¼Ð>`d¯?\à !;×1» º Yû ƒ€sŽA¬A½´U 5ÉØÚdžìÎ WCS—ÍõŒò[-4G‘ŽWsýžtLRp„¸™|Çåøàr:Ÿü]éèØ”ðä÷”´š<à3“—|F—&rÊ!ɬî=ï…Z&ÙÊWšnäT]æ~‡ ‰€£7“ïxmúÏ úµ»k•W²0~iò€œL^6›Ó`uf¼nž/¥Ce¥ ¿ÉЇp4È«à€Ÿíkêkàûø¥9šŒ“û…õ`#¿ù}ž±IO{\ÒÞ1!˜±Ȝ˩öþÓÞ1阱tÐÉÊ€íÝá ±öøtõp_Ê:à7]÷c:~ÀÑ /uü×%ÿ5¦ãüÒAóök/oÍ5´xrÉÙþ/Tå>UQiªâæè¶ÿŽns •æîŽn:áè6YPi²àæè¶ŽnOû+=í9ºÞYt®» ïú`áäíy{¥çí7G·¨`ôþÀ¼Òó;£ƒ^P8º=ñ®ôÄ›X×IŸ9ß®®ÎѽTzdÝ>ð ¥Ø¡ï*ßÐæØ-Wz´|eŽwMD׿ØWz|2G,­q:Û>à)ÝVçn»Æ6¨ãöxµÒãÕ›£ÛÖ28º=­ô|”i™òzˆ›s´Í]Z¶j6qÀyoëþß³c¶œ/á‡Dœ/á‡×ƒ8›õºÎvvÀÙ ƒ,8ÛÙgg[ú€“ÀÎnZÝ·ßÿ÷ßÿ÷?¿·²¥ìêö±·?Ÿ¾´ÃAø¬õìåY~åÙ ­ný,páv²ÿ*AJ [ÿ$A¸äøU$ƒÔÅ›klávã}¤þM*„ÛAüþ«Li“ÏŽ Ò ÜrˆGaƒ,«ñ ‹çá³ùÕñ&• ’Òv¯z“ê ܼ‰;Þ·¡A„šÁA„ÛAö,íïý•dž¼Èp…}›²ð°Ëê‚ǃ¸Çx±yÇàißgJs1ö+~–¦¬ ~¼yï7ZůGåábNÀXyÊþë+þg5£nß¿÷æ8:àÛ¯üñ«e/õǃphôÅ?+´|·é¡eÿùõï¿ÅƒÅ½®héÖ_KçC¬íxp,ó15K—ó—µÚˆ¥ i|-\,{¸f_äÒ5:y¹tɇã\:ÿ4Èÿþ©¤î'Wk¬qN4î'Ñ8 '÷“hœ…ûI4ίhܺ]÷p«qÉÇ5níð%p!6.–‚5®ìñÄÏ‹.õ÷øðžÀ¥Ø8WˆÆeWç¼{0Cw—ÂòEÜh\uµô·ª\Ü ['YZ€ý~ø“kœ÷ÁA[ä†M^.]ökÜÞ¦sˆ”.ë-;诠?þøÏïÿ•¿Zk¶ëÿÏߊî[ŠÏv¯¾°“Ao™ŽþõµÍw—ðü¿©i-¶6Zøüë?«_•´åbû·šö%\¿â– >~õ%xFå?ÿaæ8egáËgøß?ô¯Ôhýä§]¸$ü_ó§ùÕv^^qªn^qÕ­´ÁÿúçÿèwÏÀçÿ§GOI¸¾î¡r_¾œg1§1ÿÎXóAtÌãiÌÑ1ÄÄ<žÆ<|óàALÌãiÌÑ1DÇ<žÆ<|óàALÌãiÌÑ1DÇ<žÆÅáà"N-¸Ð ÿH÷šá\ò.5#;‡5cYSWšQ˜fìm¦?©fÄú`áë†e_òhé´f×b‚š‘[Œ.V¨6›ˆE‰%—š‘dt 5#DGàr…Šs*ð½Ý41„?‹!üÓõ,†ðg1„—ÁŸÅ¾û¼6†ðg1„ºážÅþ,†ðý+‚¬cCøg áY áÏbÿŒ!<‹!üY ^QÇþ,†ðÏÂó"ß(°"Ð"|禋!È :†4†àƒÈbbˆ@c>ˆŒ!ð &†4†àƒÈ‚ ¢cˆ@c>ˆŒ!ð &†4†àƒÈ‚ ¢cˆ@c6ˆŽ!È :†4† o¢b0ȉÓÅ|C°_©"Ò" Ä‡!2!L|˜¢Ò"ÀÄÇá))Wç+:èá«“sÅ®Nt‰À³ˆ«Ó*W*`WGð¼ øº/Q¤‚€@ƒ€S&H4ø T…„ê  ‘ À ­Z?&´þžÐnþ¹£÷þyˆÄ??*š R•…À¥¥M(cõÈTWB * ] mZ¾»{-´aLhØІ¡ý©v؟܉ô % ,­=HÉô %À,­9H©ô %À,-Úõˆ¤‡[¡]ÏK ¥]H<ëó,´GqôÏ÷à¹t½{G×B›õIH '!XhÍIH¢'!DhõIH¡'!LhÉ“ª“?&´~Lhý˜ÐúÛB›J(=Ü íò†»M¾³´5÷ &W>md>­ﮄv=`i­½Z?&´~Lhý˜Ð†1¡ cBÆ„6ÜÚØ\éá} 6‘@,ˆ² îé+Ÿ¶6WB+]b%´‚+K»¬.t¬Ð†1¡ cBF„vþþûOkàw}Z¿ëÓ8Úõ4zÿp‹»–ŽXæ€o¿Šò@4„ãÁñáÖ~AGàLJ‹yz ­¾QÆÇè2WQî䛘¼øp¹f4yˆùš‘¥uÑ•ãèCÀµÐ–¤Š¸Žw­æJàYœ¶»˜‘Ð:çỡM-6(´Áí|6?Õw¿oi ü®¥5ð»–ÖÀ_ mZëçr×BësžÉA%´‹@¸£î'ÚÇ—‡B–ÛxßÝ?Ϭ´Ð.ß}Ϻÿ¤B[K}V]*¡õnZ^ À•к-}Š„6µ°Ÿþ¤B– 2A¡Í¹2¸ÚZ‰ÐÆÜtí_èO4MÞ.œåíÂ3ýXÞ.œåíB'\6oÎòv¡÷ëLÞ.œåíÂ3õXÞ.œåíBÿŠ o@0¯óvá,ožy»Àòvá,ožy»Àòvá,o‡^QçíÂYÞ.<óvçí¢ÈGD–·‹4o?€KÐåíÈ :oiÞŽ"óvx“·‹4oÇ‘y;<ˆÉÛEš·ãƒÈ¼Dçí"ÍÛñAdÞbòv‘æíø 2oGÑy»Hóvl·#ƒè¼]¤y;ú&*o9ñ/º¼Dæíد”çhÞ.¢â=ëyš·‹°xÏxÞæí"ˆ÷ºâ½D‹÷"9Y‹ì8XïEv²&‹÷-Þ‹bc9܈¤o‘&Þ",2ÇÁ™&Þ".ÒÇÁ•&Þ".ZƒE¦cH¸ü˜pù1áòP¸¾ÒhäØ6DÏ:ºc·^u&äàZ¸òʸòZ¸ü˜pù1áò—„+Œ W®0&\ ךîÂ'UÕ7Ï:Ý…-W —/WDp-\E'²"Md W®pI¸â˜pÅ1áŠc™pùZHj?ùDàêì~jäì^ÈfäÂå ;»w®…«æ,;i™pÅ1áŠcÂ/ W®4&\iL¸®D:\‘ÀÕûD:Âqy‘WµyzvÆž\ —òð½®4&\iL¸Òáú©\êŸDèÐ÷©ç!á cÂ. W®8&\qL¸"?Šh•U×dáuwè/Ua‡~Í–)¼®8&\qL¸â%áJc•Ƅ+ uèCª;ômò.…kbÑb ‰ÀU´X™p©\æÐ‡eôxÁr¥1áJc•.×Z¥0-øÝhÑÀïF‹\× K"«5‰gµ&±“[kÏjMbﶘZ“xVkŸå‘՚ijZ“Ø¿"¨5‰àÔJךijZ“ø¬5‰¬Ö$žÕšÄg­Idµ&ñ¬Ö½¢®5‰gµ&ñYky­I9ôÄjM­5I`‹íjMÈ ºÖ$ÑZ>ˆ¬5Áƒ˜Z“DkMø ²ÖbjM­5áƒÈZ2ˆ®5I´Ö„"kMð ¦Ö$ÑZ>ˆ¬5!ƒèZ“DkMØ ºÖ„ ¢kM­5¡o¢jMÀ '~@Wk‘µ&ìWʓʹÖ$¡2mëÉVZk’`™öált½ƒºÉ;‘³eÕä]h“w"qŽjòn´É;‰áØîÛ¤ŠE-I¸PZ'. -I¸æT'.Íç}w?öÝý½ïÞ÷I³ïîHSˆé“N4aEšBtŸ4ùîM5:'ZÇ1ôÝýØwcß=Œ}÷pû»›VcòÝu«q¡­ÆLßUš´ÑVcøÝýÈÙDK,†¾{ûîqì»Ç±ïo÷µ,¢‡wß=yR(ù#ýîѳ“x_\wïUõC¢ÕCß=Ž}÷4öÝÓØwO÷¿»¬‰Jô»ÖüW¦JàU—/ôßýë˸þî!«Â„D †¾{ùî?•gõ“;™–$ÔÉd‘*-9H°“‰wÓO¾»îÎ/º˜€À«®,Àú®»ó‰¾GU3hÍ@"½DêüºÐšòÝõùu£iÝ¡ïîǾ»¿ýÝMƒ;ùîºÁ½èˆÌ×’At¾6Ó|-Dækñ &_›i¾–"óµd¯Í4_ËÑùZ2ˆÎ×fš¯¥o¢òµ`“-ºË×òAd¾–ýJù…æk3*´þ_£ùÚLz\UsÑ™X¯:-‹wÝÜŸ…i?܈ÅÉ„k¦ ׌‹÷ôl¥ ׌ë«ÖY‘žú>~ìûxø}ºþø¢3¦^uú”˜g×ßÇ•Í41:ô}ü¥ïƾOû>}Ýb^tf“À«NsbýÑ-æøû„¬º2M`}ŸpéûıïǾOdßGwiÚ¥ÙôDºKŸe·žòëïǾO¼ô}ÒØ÷Icß'ÑïÃÈÂM£3û>ªÑ¹ÑFgü}rT ÁL‚Cß']ø>?Õÿ“;!…æý2ªþ¶çæýÈ÷ѽ…ö “ïãÙ a¦W˜èW‰»Lw™Ô_«ƒ½Jwäû¬{"Í3ô}üØ÷¡þn·-´Ý–ùªÝ¶Ñv[ü}JP ¶LlCßÇ_ú>aìû„±ïCýݱZhÇ*û>ªcµÑŽUü}Z…þAŸú>áÒ÷‰cß'Ž}ŸÈýkr7¨iú¤þu ¯ °°f.Ü^Ÿ8ö}â¥ï“ƾOû>Ô?Ð}“…öM²ï31ÿM÷MBý 9©ÄR¦‰¥¡ï“.|Ÿ5 1â¿ø]ÿí€ëD€m=,´õ0Ãi=l´õħ¹"ÿ­Oáïc@•&€ð÷Ù@"]0¢?~WØ÷±Ý{…vïÁïc»÷íÞ#þS‰šL5ðûØDM¥‰ü}¶DJ¨dpÇ–ÎÇä³|L~ëg–Égù˜ 8ºu>&Ÿåcr¿˜|L>ËÇägJ#³|L>ËÇäþA>&ƒXJçcòY>&?ó1™åcòY>&?ó1™åcòY>½¢ÎÇä³|L~æc2ÏÇqÎ\X>¦Ð|Lù†¾ËÇAt>¦Ð| Dæcð &Sh>†"ó1x“)4Ñù2ˆÎÇšáƒÈ| Ääc ÍÇðAd>† ¢ó1…æcØ :CÑù˜Bó1ôMT> r²•vù>ˆÌǰ_)ªÒ|LA5b¿î:Zt\!&ª®Ñ¸"l󱫯*…&T .iÑZØ-¿·t}[:GŠFM^ºêT®£Ð\ÇÐÒ…±¥ ·—δa‘¥ÓmX¶aá¥kºÞ¶Ð4ÄÐÒű¥‹·—Ît2±¥SLv2Á¥ k “_/][º4¶téþÒéf ¶tUyëf ¼t‹Ó”Ûë¥K#K÷SÙùŸ|/ªôX¾ ú»“¥3ý4dét?M£ý4Dê²:W/ô\½ 8u®Ñè¹íÐÒùÛKgZRÈÒé–”F[RðÒù¢Ž¼ =òZº0¶táöÒ™®êœl›éêÀKg®æ-ô4zhéâØÒÅûK§#¨sBÈàMcZºeíjšÂ륋cK—Æ–.Ý^:Ó[À¶‰FبMo”º¸ ã©K#K·žŽì°—Nßuåùß™òüFËó‰KÓ,ggš¥·uæL³œi–ç±`agšåìL³ô¯Î4 p1õ™f9;Ó,Ï3ÍÂÎ4ËÙ™fyživ¦YÎÎ4Ñ+ê3Írv¦Yžgš…ŸiVqVSÙ™f¥gšõ˜ÇîL“ ¢Ï4+=ÓäƒÈ3M<ˆ9Ó¬ôL“"Ï4ñ æL³Ò3M>ˆ<Ó$ƒè3ÍJÏ4ù òLbÎ4+=ÓäƒÈ3M2ˆ>Ó¬ôL“ ¢Ï4É úL³Ò3Mú&êL r²Ëugš|y¦É~¥¼FÏ4+©RUEâ‰Wa\ë¨ëCÉJ%+N³®º8zE_±«³n´Î¿¢×‡‡•^yÅ0öн¢.Un´T¿bЇ|•ò]yÅ8öŠ‘½¢®öm´Ú¿bÔ‡q•Æ]yÅ4öЉ¾"£¼2³ø“>4«ôÐìõ+þTææ'·iž‘WÔ5§Öœ’¯¨·*=ܪ¤j Å$Îq†^‘š]¶ÙhÙ&~Ŭ¡*=„ºòŠa쩹ѕV>âWlš›þ°èÊ+ƱWŒ|Ó w“šâAôŠߢW‡:•ê\yÅ4öŠÔÜèú»FëïàWŒI¾Tzøòú×s†‹zÀu¤oKØ-a#[¿>$©ô¿âvH"ÎF¾"{E[Öh17ú0£Òà øŠÃ uèP‡§>³¨ggõúVvfQÏÎ,*`$ÐgõìÌ¢öªlÎ,êÙ™E}†ý•YÔ³3‹Ú¿"8³¨`‡×gõìÌ¢>Ï,*;³¨ggõyfQÙ™E=;³@¯¨Ï,êÙ™E}žYT~fÑD,ÖØ™E£g혛îÌ‚ ¢Ï,=³àƒÈ3 <ˆ9³hôÌ‚"Ï,ð æÌ¢Ñ3 >ˆ<³ ƒè3‹FÏ,ø òÌbÎ,=³àƒÈ3 2ˆ>³hôÌ‚ ¢Ï,È úÌ¢Ñ3 ú&êÌ r²ug|yfÁ~õ¤«IÑ…TMXÇv:Y:4‘ß½¯E£ç¤Î –ïŽnÊyðèEß4×h{wtSƒG¯UEц˜·G×E%pô¸nFíÕè?•Ôý¼4º©ËÀïÞ&{6˜ÝÝ”6àwwN……ÆLwG7ÕxtÓŒÞh8s{t`G£/Ãç6…×£§Û£›5|÷´†í/ß} ^ʼòÏ»4/±6±"™×!ÈO5úÏ £w™R¢qME EDzvLÚïog~{ºùýíÌïo EûýíÌïo½Ô¿¿ùýíé:7æ÷·3¿¿õ¯üþ ŸöûÛ™ßßž~c~;óûÛÓïoÌïog~?zEí÷·3¿¿=ýþýþÿþù×ï?~_¸ÿùý?ÿñŸ‹û˜Ì ZÌÿù—|ðmgPðåO,ðúàÿRv—í¿‹üþõ€ÿãß«,ë_­ûåòàÇï³y;x?ÈoOAýï‚?ijAj?äó×Ï}åoýo 1ø¢gósï?g´Žÿø÷ªŒéâ ÿyÀÞ„ÿ¿¿þ˜§ÿ÷7ßš~E÷íy ôÿ>¯Ágÿë?àzQÖ{ú*€Ûï³Ø»çßÁíW<ùkþ±ÿŠ|;G7íAåÿû¼Ÿ ü¯¿þ¹ÃÿiT™ŧ±[àîð?/ƒ‚kð™À¿_›EYöøüœüçï;üó÷Ÿ·' Î&ÿ×íð?ÿumòÓÓwUðÎV†CIÿÚõÇßÝ}ÅïWà|?¯NWèŸÇ+þó_ÿßÝÉÿõ¯ìðÝ—ÍïWàôÝÿù}^} 'ÿZp-Æo->®Öúü}yô/bœëê~_‹5¿à^‘|èwßãZÿù9ÿGÁûV6øÏy±\úïá›áól鼜úó~(5ùÕŸðh_[ÿÝ÷59ú:HЃ|ìÿnxµtÛ ‘M>^š|d“W<©ß™¼ä•¶“įWß«×ÈäUóï·zL^¶Æîå³Ýä eä1yU€÷-ÉËZµ°ñ ý»º©ñ ÿ<Ú­€µÚ5ºèáÐ.ƒ¼ÚÏkB;¡ý<Z÷p+Ï„öS-Ý|Mh——L>²ÉÇK“lòXhí䯭û#™<Ú™í'Z÷Í¿Z;ùKBû-îúþ×?™Ð~s í7ßbߨk¦ò0Ôbt+uß¶xíëß%¦RŒÞ™ÊذÔíÞ_7ùk¦’N>²ÉSi&/¥.D¥î›§“¿`*ižL>÷Þãß%¦ÒL^J]ŒJÝš£ÞárS2Ùßkìá›ç{Eêü·ÚÀèÝý|÷?O¤îO&uë dƒ>¼ 3ù+Rw2ùÈ&ϤîO"uþ[ž°Ô}÷ÀLþ‚Ôùµp“L^däcòLêþ¤RWs!¶îy¸ôß%â9ñ*#‘ºà[ÄsEê–·O`ô^ê£oÿ.‘:1º‘ºu&u‘LþŠÔL>²É©3“Or ŸˆÔ¶òWÜÂõ_&“WRü1y"ufò†Œ„HÝ!ó?þEwØðu\Øí°å™–ð-Pö,óJä€wÑ c¥Å1‘Ñ=\=°Ñý¿øÒ‘0ð[aàßðkÛ„÷`t°Bû¿Ë⸿NÞÝßx÷mkÛ|d“gqÜ_Ô9i­…lò—œ“R2™|FÖfýwY÷Ý&ò3ëvŸü?O¶âmbÙŸsßÎm®H]ø60:•ºõß%R÷Oªqë /¥ÎLþŠÔL>²É©3“—ÎIñå¥Ô™É_rN¢dòPêÖ—H™¼”º6µ—R÷¯pç$Vrzpì2|;¯»&u!€Ñ{©{¬üöï©£wR¨Ô2ùkRG'Ùä‰Ô™ÉK©kI]dò—¤.çH&ŸµïyLžH™¼’ºÆ¤n÷.¾ŸI ÿ—]&öp.uÆ9Y«[Àè]øŸÒ+©“£d„„ÿO*Çnò‘M>^š|d“ÇRg'ŸÔ¹ ÿcc“‡R·þ»òÐéľŸI]Œ¯¤ÎN^÷|“ðßeÇñ»Ê û“ ºß3è—1›A÷{rÛ³ º?É CºË ³A<¤vð³At¿gÐ=Ë û“ ºß󸞥ÀýIÝC¿ÿ\‚ù?ˆ›•<ÜðÜ7|¿z$O"$ܬзTê±IlôÀF—Flôpiô ûåÙè‘/nìÛG¿‘úoS*=É!&O _®dô×Û­ûV÷ŠÍnô,Çðâ¸\ÚÍýÑntc?À>ü-·ÀF/²’9Db7Óÿç‰Êx×ÐÃ/Ö»Õš'×*³Øfyˆã¡“gG­2§£6z¸4úk•9=²Ñã¥Ñ_©ŒÛ*u÷ƒ ;º¸©:$z|–Ùw¿”U­{ŽÇŽžU&¨~0וŒþZeoEF/ÂÑpôômwp?O…©L ï2å0VübXå?gH%\©Œ[½!¨2n­“$£¿V™ÓÑ=\ýµÊœŽÙèñÒè¯U¦Å:*cF?+.’ÝÊ|k%³Ñ¯ì2%Û„]ì2-°]¦f&uT&ÇØÊ ÅZ6B¨2+ÑÔÿü¨Ì·˜`rnYÕ´'çüzšä8’pëº.Æv™JF¿à˜ØèáÒè—²,|ôÈF—F혩ã3;zR^;;ó-žŒ~-Ió-’Ñ3¨áèw™Ì¤î‚c&Oßìè¥ Ñ.³þã_t—¹pd,àïäx$ܸoå¹EZ-àF±¾åü¬cÉ0:ÈA¿®ÏJM^ùu‰øuÛ´öò—¿˜±JÍ5h¬Bu®‡_N­9× ì¾%Y|£Ê_¦LF¿b¬NFlôpiô+ÆêdôÈF—F¿`¬–/z8¥fô$>o«G‘-E2úcõ-_Éè ð1x²¿ÇJF¿EºÖØèEư²^MÕ‚ÕrÿüW™±Ê´Ã·9àWó[˪‡ÿüU™êØÁKe£_P™³Ñ=\ý‚ÊœÙèñÒè¢È6•VÉèBer eŽßJ‰dô+*ÓrËdt¡21EâçZÉèWT&äÀF¿J‘TI~ó©ªnŸ»á¦Ûçnm®éöy׸}·>K¶Ý>·Apë¶ÛnŸÓ#ãÎvtÝ>/á3?º}nŸ{U‡]·ÏKøLà߯À­h»}îEe]·ÏK8›ü£]箃kº}°ÛnŸ{¾\×íóÎøóÚèt…þy¼âõªÓíónúÿ«Ûç^Wuû|mØrëVÝ>üñ¯ÿùa¾îÓ ?@Îbõ«Õä×ÁÊá{øÚ<­“‰áÑôûÏÿ1ÉÄø<•ðµåXÏñÙþûÍ¿‹&¿¶«úùéɰsxZÒçBýP8WöèL ;\׳»R5ÒzøÖZ¢œ&Ù`k‰€£Öª&ú–>X×ô-}°V%2ùÄ&Ÿ.M>±ÉgRG§'ŸYk‰>idò…ù\¶–ØÉ›+ÛŽÉWRG§'_Yk‰&DÖ)Dhe?”ÚnM?ZÕ……öóšÐÎDh?O„Vµa¡ýTK7_ZÛõRhg"´Ÿ'B«&…ÖNþŠÐvýP/…v&BûÉ…V÷Ca¡µ“¿$´¢ê?gBˆÐÆÒÃß²´ÿ¹ ´ß\xú ÞÙã@r¤îÐw9ù_?nj1ú:Ǩçø-øžµ+ßkÆ—¾¯Ó"vþ?TfVº´t‰-]º´t×¶ ºt™-]¾´t™-]¾´t+¬Ó*rVÁ“¥+êìghÝÎÜÖ-Þ¤Ô÷ß¾•D–®Ê¥ûÊVéÝk1b㥓æ¢}oÓ‚×5tK×”IJÇÒ ¦ÕÉe&u‚e,ªÃï¦6‰,â»9Òg&­á}XÔx~þgl~ϤÉ÷»57i Mþ¾Iû<5i"³‚MÚç©Ik¯LÚç{&-ÝE“Æ–î¦Iû<5ibéò¥¥Ëléò¥¥»fÒ&¶t×LZqdénš´ObÒVƒd>›´OjÒÜJþʤ}Þ5i«EK…-Ý%“–s"K‡MÚ_ójÒò·†½´üÍõð®pœ´íÛaµÅèÖôY{Mü$1ºq‡ÖApl¾U2ù+íÉä›|¾4ùÌ&Ÿ/M¾°Æñ .zåÉä‹#úcòÄW0“¿*ß|†±ÿV™<Ô ½‡õ ŠL¾¡ÃþÿÎÿ໵{րأ_¿õðnSV!?NæËÑA™Ë«ýÒÂ#ƒ§KðÄà8nµð¬ëT>XDJàEš¼ <-¼ÂJ‘qü¼šoë*K¿XD (+ãÅø`å±`tÀ‹ñÁ¨0Èä¯ÅÑÉ'6yrg&/O5߆ªo¥“¿p×óm°£8Á·AŽâÌä«j×)Ðru|$™œ¾p§Û¡§¬`FEPV0©û“IæÛˆ°ÝÇNþŠÔL>±É3©û“HáÛÐT•Lþ‚Ôõ|ĤI¾ &uR©S|ÊÖI¾ ϳ‘H]𥜒õÁs©”DêÄè]Å&¯ÅŒdòW¤îdò‰MžH™|f¥œš ƒ­ü•´ƒ8½¶“WR'ù6ˆÔ™ÉWV‹i®õPœx‡U|ªÀðm„1Æ‹ð6ã…ýJOêÉè‘ÙèLa¿e¼tkHézø¥KÀ;¦V›•Èè×–ŽŽÙèþÇ_téÉÐjª’}ô«• ‹Â0:®Vã FïÞ]Úy"6fò×ü::ùÄ&ÏR¬yæ×%Éx‘aÕ»ü%¿.„L&_¡^ÿ]–bý‹ÙºeòŽÙ:ÍxA¤®â¶£* wŠ){¶RÊ$Áè€Rä¥Ô™É_‘º“É'6y"ufòÒ¯ST%DêÌä/ùu–ªä…Ô­ÿ.‘:3y•ôT%Dê¶îâ×IªM5ê{øÅ®6ÀöÁ¤N°}©£J‘œvòפŽN>±É©3“—R§¨Jt“L “¿$u–ª„øu’ª„H™¼’ºÆ¤ÎP•¼Æú~Eê‹Pм’:9: ù`,"dò‰M>]š|b“ÇRg'¯(E99±T%/¤Î²ˆXª"u’ªK¼¾ê‘œœT%‹Ðò¶"uSèá—mßï>S£÷INwÁÖy~rX’#“¿xrÂ&ŸØä©­óÌÖ¥Èl]kdò—l—¶ŽÇ°µ^°uÔ¯«‘Ùº}›x0Üà7E£>Cv‚œ‹M°š 'ìÜ5¡ÀÜ5˜jô€÷ƒX‚6ˆgƒÔ~6ȃ 'ì90ýoû|-AN% †áSñ?rNÓŒgðÏù‡ûƒ˜žÆ2A~5ɹ8Sp½Bå››páEþ3ýE =²Ñã¥Ñ/X®³Ñ=]=³Ñó¥Ñ3=_ýuŠuññ\Èdôr Z„¥é[u‘Œn± ke(•Œ^÷!‚¯’íã€ÇÅ &2úë íZ9‘ÙÊ·#ôª¹ÀÚ…uÏpŠÝGãŠÑJuFF«0Æ)Æ8¥Â§T㔺•¤9=±ÑÓ¥Ñ3S™,\<Ëh…Ö0Z)ÿ8W2úkO0ZÜ ìIk£e´ ,„¶g´BåÖ†ÑJ¹×†ˆ©Œ'Ǧ†Ñ*ŒqJ…1N©0Æ)Æ8¥îdÓOGOlôtiôW*­€ÊXF+|aG¿Ôc­lDPŒV&&íè¯U0Z•±ŒVøäÁîƒUF1ZÉ]Æ2Z…1N©0Æ)Æ8¥Â§Ô€ötôÄFO—F­2€ÑªS™žÑJöß[F«;ñ0`´‚»Œf´Òwr0©» 2=£RÃhUeÖ-Iø'T™o­>?œP™5Wº,iíáUfÍ60úu• 1‘ѯì2'£_R>ú•]ædôK*ÃG­2Ë?š”Ê|ÞR™µ¼{b£_Q™X”Ê|ÞS™ef%“Ñ/¨LJ®²•¿¢2q’çñ.³ju»Ìâû àoî2ž8f­MDeŽZ=;úý]ÆÇL/~—ñÄ1Ó£§K£ßßeú ²O·IE9IÉ>ÕèÉ>Ùè‘/~­À”ŽžØèéÒè¯OÌT©Ý |°2ú¥úÔoÁ“ÑÃê!£_81“õ©vôŠªgxɃ/óí’/§¼U§ç£ñ“œž¬xŒŠ`á&ÕQÂM*‘7E5ºÀ?߯Žð‹+¿˜º„F·+¿Ÿ×½XùO\Ið­][ùO´ò9•…LþÒÊoÓ:àžÉ|Ldå§âzøå•ÏJlü]™ ÁûôK¹²òþ¼òÙ•+2Ïb™uŽ$/£àTæ±µq+‹h§"\¯ʼYy(óvé++ÿɬMòdž¹Ädåu÷1×H ×Hï£_¦N‚[žT—qƒ&÷U£_¢æ£G6z¼4ú×èdôÄFO—F¿à-152z–ž¯'ÅvŠØX~Á5ú§©’ÑÕ™U"ÔŠØX~%™èÒÈè2ÎN©Õ³ÄÆDerÄ*c‰Ãµp£cÔÂaŒZøV1ýÙ艞.~!™ØC•ÑÄÆRe,±ñ­ZüžØ¨Œ%6V×ÐÖJF¿¢2±1TMl,UÆߥv4ÄÆwIö ±ñ»tg n£|Klü.‘‚÷‡šØøV±]Olü>øƒØø.+€!6¾×ÞÝ¿„Ïþý Üúˆ–ØøÞPGlüÎ&ÿ`&¾ëàbc,Á–Øøž/׿€óþ¼6:]¡¯x½ÇÌ¿Û,ôEl|¯ë£#66 6Ö_×p‡'±±ú•$6Ög8†Ø8<‰u¸ 6VpKlžÄÆzŽ‚ØXÿ»hò+±±"*±ÄÆÆçBÄÆ¸ÆùA1w¸&q¤Ç¬õð›N9M’nS?ð=‘Ú|0Îa0y@@üñ‚íFŽˆ?ç0™ü…*ã³Ég6ù‚»3ÌäU›ÜAÒGB©S?p“˜!6Ž„€X5Üa&ßTCSDu¾±1ZIl¬¶[ClŒ…V*b¡ý¼&´3ÚÏ¡UÜÀXh?ÕÒÍׄÖ¿Ú™íç‰ÐªÉc¡µ“¿"´±ñK¡‰Ð~r¡ÕÄÆXhíä/ ­%6fBˆÐbã÷-í.- pÀ üÁHƒÑä{ºÍ—†ZŒ„?i0XyÀ üÁ6ÉÒe¶tùÒÒe¶tùÒÒ]Û&èÒ¶tåÒÒ¶tåÒÒUt® Hƒ±q{‘aUšì Y:½Iµ̰YYº&—N7x~l—Nš ElÜðÁÿ™¹hxëHƒßßãÞ3`òˆ—™‹†&ß\|žš ‘µÀæâóÔ\´Wæâó=sÁ–`KwÓ\|žš ±tåÒÒ¶tåÒÒ]3[ºkæÂ¿m.>‰¹èHƒ±¹ø¤æÂcsñà6ÅæBòJïÂò. ïßÿçÏågÇÜ×ÿÅKŒºqŒQ7Ž1êÆ1FÝ8ƨq»§œ|¹4ùÂ&_qh&üj£í…2¿2õ’ÉÑþ@ÚÊÔK&ßä^´×¨=ˆY±l*F]yÆ`u#ܱ.SâÆ1JÜx“—Â3ƒã€É‹.Çú`¡W]Oõ*â±ð ¢Ô¨ðójF]y‚euã&>@JóíkÏ£æÛFvK&í ˆN>³É“3 3yÅ&uUü…3 žQ— F]rd&¯nØô"òeÔ%þqÈäàÒ0êÆ;ÝÖ=)-3*‚”–IÝŸLê4£®!»%“¿"u'“ÏlòLêþ$Rgu5Ùm%“¿ u=£.1i’Q—IÝŸT꣮²u†Q——G"u ÀoT,RZ&u‚”–H0ß2©‹dòW¤îdò™MžH™¼-XÍp`+å¼»cÔ%R'u‰Ô™ÉëcíL¤Î0êâV1êªVdèÇ8mã§­ý uÚÉ艞ØèLauÍp€5Ãþ>§m|›ÓÖŒ~méè艞ðè5*‘:’ìuã­ÄŽ”–Ù:AJËr{ñw—vžˆ™ü5¿ŽN>³É³ÜÞ_žùuŠQWSñ±É_òë,£.óë£.ËíýÅlfÔÕ¶N³©«x‡íuã*¾ž”ö…Ôú<0:`¾})ufòW¤îdò™MžH™¼ôë£.‘:3ùK~eÔ}!uë¿K¤ÎL^¶KF]"uI%ñë$£®¾¬Ö÷ð‹Í›€”–I ¥%R'FÌ·/˜dìä¯I|f“'Rg&/¥N1êê^°@&Iê,£.ñë$£.‘:3y%uIaÔ};ÇóýŠÔ²[0:`¾}%urtÀ|ûÁÈnÉä3›|¾4ùÌ&¥ÎN^1ß&rrbu_H%»µŒºDê$£.–:;y)uŠQW=0ŒºDê$£®’:è{ÏÖu¤´¬üÅ]°užŸœVþâÈä/žœ°Ég6yjë<³uŠQW³+42ùK¶Î2ê©“ŒºÔÖQ¿N1êê#5£.>pSŒºÊá3ŒºqgÔ½Øë­uãNvûüAv‹[Åx?ˆeÔeƒx6Híàgƒ<uãΨ sã¶Ý2êF¿7”¸øFÜ£nó«wï;D‰tœL¾°É3éø“H‡!ûÔ<œ•Lþ‚tôdŸÄv8MÎÈŽ #‘Žà7Š) ¯%“ÁkI¤CŒÈ3™tD2ù+Òq2ùÂ&O¤ÃL^û›¬œ1°•¿rÞבréš<ï,ŠG&‚Ï‘H‡F~¼ w°“¿&tò…MžH‡™¼”EF©Û3™ü%é°d”ÄŸÙÝÕïgÒñúÄúûé|Ž`t@îøJ:äè€Üñƒñ9’É6ùriò…MK‡¼"wL$R¶¤‘/¤Ãò9ZÒH"Q“üéäŽJ: ¹ã=ÛÑñ#²Œ‚»`;<”K 82ù‹‘2›|a“§¶Ã3Û¡Èuq#“¿d;,¹#‘޽âóÁ¢ˆB £rH cÚI/¶jÆ´ó#ê_ FܵxÀûA, #ijAj?äA˜vFXãc;+- #ÊÛEœx{0¦³ëÒÎàF9l" £: ïáïePÄèïÓ ¦1Ä4Fƒ˜ÆhÓ bºIƒHG¯lôziôÊF'YC3z"alǿڑ0"û¶‘0*J8W)DÕGahÓa#"LcD„iŒˆðÖ1óÙè…^.^Y†àîìhQBÜÐ *Ï,W2úë½Ð &Ô¡iÕgNsº1¡õä¨È¦1*À4F˜Æ¨ÓàÌÙéè…^.þJh!!ZKDˆƒM;ú¥bYKD˜`Õ£""ÄQèƒ ­¢”–ÖR¦12¾4FÆ—ÆÈøÒß0åtôÂF/—F-´€ °Úž×Lv¬Y*À;Q „–Vóšéký4›ZCÆIGÆ—ÆèðÒ^£ÃKctxw„ötôKBËG-´€ŒïŽÐ2¾{BÛ‘ñÝZCÆç±¥5tx‚Ï®£ÃKc„tiŒ.Ò¥1BºKë‰{ G/—F¿oi=v ·—ÚŽoÄÒzbi5·—ršæöBBké$¡¼%¤Kc”piŒ.QÂ¥1J¸Kë?ï -ý¾¥õŸ7…¶#¤±´þóžÐ*Bº ZZM 'Ù\,%\#eKc¤liŒ”-‘²Ý-C¢£6z¹4úëÓƒžŽ”ÓGFýi(ánV1YJ8ˆiJ8\8û`{»”@Àß)o’pÀõÁh·ÀäûÙ+Þ£ƒ"(h¨;R6h¨9|èIÙÞ®Žð‹+HÙc‚º²òŸø]“²ñ•ÿD+oIÙ²žœü¥•ïIÙðÊ+R6u€!e»·ò)Û=™ïHÙc?»°òþ¼òš”Ê<ó¨55XÖÓRÌbDæ±µéIÙÞ®”ð«2ß‘²%Æ~veå?™µ‘¤lTæ™[HV²AçD“²I¦:KÊ–ÆhÑÒ-Z£EKc´h÷êOF/lôriô ÎIOÊ–Ç“&e“© KÊv«œ±'e#gÉ“·¨¦ˆÐ戅ÖÒ¢¥1b²4FL–ƈÉÒ1Ù­2É³Ñ ½\ýBj£§EƒB«iѤÐZZ´[U–=-ZK‹ÖÔÉîò¿b²» †˜ì°3¸5-1ÙíA¼U51Ùi™J§½1ÙKøLàb²»†˜ì^ËXGLö>ø÷+pë'Yb²{'1ÙK8›üƒ˜ìž«Ñ“½€ówÿ¼6:üFLv·´Þ“½[{ýELv¯8·#&3. &SÞµ%&KOb2õ+IL¦ 1Yz“éÚBAL¦à–˜,=‰Éô1™þwÑäWb2Õ?l‰ÉŒC‚ˆÉGÍF”w¸îçu¤d¿õð-Dy’ÞG?ð=œnÎ00y@ öñŠâFŒÄ>g™üö€“Éß%™1“W©¶ŒýXÉsöÝ%g˜ÚL gþîŠ%÷Ïkß}&ßýóä»+Ú-R´¨–n¾öÝ-gØËï>“ïþyòÝÕäIÕ¡™ü•ï.8ÃäBì»òÝ ×ûúþ„Cv A¼@ªéÑoÖ£Êïx³>órŪ,¼YLêZùž†çƒ‰#YºÊ–®^ZºÊ–®^ZºÆ–®]ZºÆ–®]Zº†‹ÈÏ4£a‹Øñf½oÇ4ãóT3Òã¤ïª^iÆç{šFGUL3ZùûšñyªéƒqR‘¥«léꥥ»¨lé.j[:¬¢"¬Š Jî– ŠˆöWåÄIƒƒI}0î(} Œ; ¼; ’zÕ¡`'_Ùäë¥É76ùviò ò 3ŸWIÉÀIehß.3Aå1&¨|“ ŠÂ+ƒcgÌÂL§?àk&¨¤*–c¿XÈ”2clú`¥æ`tÀØôÁHšÈä¯Itò•MžIfòŠá@2A©Zq1ù?¹K2 Ž IS>çÂ|Ų”ÇX–òËR¾É²D'_Ùäë¥É7vZ¯úÎ÷—¼fYªŠm‡}Dòy ËR¾YŸdˆŠ˜áDED/Åè€ ‰E2ù+zy2ùÊ&OôÒL^{'¬Bè $ÙH€°AUHª‡Ã å1 ¢<@A¤F¿Òñ2za£6:“y]â“`‰€¿OA”ߦ 2£_[::za£<úF„C¤Ž•vH/vƒW FyŒÁ(1å› Ftò•M¾^šü…Ý`cF"“×<š‡|ÞŠwƒŽÁèÅç}EA”Ç(ˆòQ¾IAD'_Ùäë¥É_Úì‹/dòäónd#d³—Dúš oágŸ÷‡PãÊcBù&‡|e“¯—&éó¶VÈäuÑpP\2oŸÞ}û¼bô÷I€ò P¾ID'_Ùäë¥ÉÃÏÛ‘%G&¯:Ê[Rd0äóJ õy Јöz‰]dñÉc,>ù&‹|e“¯—&I{S,dòº¹ª)ž bÅâ£6eÃâ“wŸ‹"šÅ'ï;úW‚Å7šð~ËâÃñlÚÁÏy°øäÅ&Äm3ŒeñAYCÃÓŸ|vÀüAˆ‚u\±ø¨sÈþÞ1³ý}<Æ£“ÇxtòNãÑÉ7ytèèÞ.ÞôèŠÑ{÷ŠGGÞ·òÄèˆïæƒQ܀ɾ›vÆGF/lôriôÂF¯—F¯lôziôÊF'åftAÒ´²í|À»~ýäÉèÊ;l;ÿ<.ON ßMcœÉcŒ3yŒq&1ÎÜÉœŽ^ÙèõÒ诜Èw²¯–ïÇ,î,6ŠqFÚ$Ë8ó¶S+FG|ŒWL0Ã|0o—Œ^ØèåÒè…^/^ÙèõÒè•Nl’}®[Bg“ž¬dtÙ2 yi>¡pf˜twÌ0CÂõ‰„ëÑÙE¸>‰p…xI¸>‘pÙÑ贄 ½^½²Ñë¥Ñ+ ×'®«ÁáúDÂeùc<¶\†ÁEP°t .#ÂåïY®S˜<`Z¹ \þžå:½°Ñë¥Ñ_[®ÓÑ+ —¿c¹ž,dt!\†ç[.ô"9+-ÓÊpݳ\Ý3Ë/m‹þžå:½°Ñë¥Ñ_[®ÓÑ+ ×Ë„‹X.ÉDzqS@Ë¥Qd+µeDÉcœ$yŒ“$q’ä1N’»%tôÊF¯—F¿pÙ3¢BÉÈØŸŠWÄo'üŠ DŒuL|°|:Ô%À±ã$b"bÏIòvÁ‚€_\yÀI’••Ç»á$á+ÿ‰VÞr’=-8ùK+ßs’à•Wœ$Š’Ôp’Ü[ùŽ“äžÌwœ$™‘\Xyÿ^yÍIBeÞ™×ÌEOKk™ÇÖ¦ç$y»HG¯Ê|ÇI’ùÇ••ÿdÖFr’P™'{[yÀIÝÍI"‰Z,'ÉÛ5>btÄòÁèBÀäwÈ+þ!£6z¹4za£×K£W6z½4ze£³®º¿ïùñÅ\ò˜V²2º<&Ì%ÿdN„á‘Âe¹CÞ®0£#ŽFë&8>>Xé½°Ñ贄 ½^½²Ñë¥Ñ+—ý8yÙF p­¤"dt)\;ÃÈÇÇÝVjÃñq·#×p|¼€ƒ–M·Ñ“åø¸=‚÷Á—æøÈw.´ï9>^Âgp|Üíõ0ùÎ…=ÇÇKøLà߯À­ßa9>îÅÖÇÇK8›üƒã#ß"ôê8>^Àù»^N~ãøÈwˆzŽ|ƒp|¼€Ów?ö¹³Žå­ZŽüäøP¿’:d7ùÉñ¡+LJ‚[ŽüäøÐsúßE“_9>Tg˜åø0Žâø ëe@ÙáºSË}šØÖ÷ÎfµÁËžýÀ[ø™ÛòФ£Œ‘t”1’Žr“¤ƒN¾±É“–ô³'I:Ôn`H:ð‡S-éøÃ}Ž}¸Oõîo²l”1–r“eƒNþÒ‡÷¸ÿçìÃòá ËÆû÷Ÿ³^jÜ1:¢³ø` àÝÅëÓ£Óï,ÐY°j×€V¾oÚ©ïfé[ºvié[º3 "u ›‹ŽÁâ}s1&uŸ§R3_= “ºöJê>ß“:0:¢Š`R×ÐÊß—ºÏS©KŒ‚,]cKwÆ¥N±CH[gÙ!:±ù’›ðªpVŒŽX>q€ƒúØFÜÞ°8¼ª|µ“ològÄ xåqƒôë,qCjýà>À§¤/'ÙD ¯ ^/Áƒ7À¥Ó” Ò#·” åFÍ$`5(Œ:áƒUC‚ÑuÂcK “¿B*r2ùFù“ïE!“˜ÃP'”×õÖŒ´âOf4û@ !þçEÒŠŽ:¡0ŠR²L'ߨäžüÖ[Ï¢½HVÞ°¼XùW´eŒ– ŒÑ”›´tòM¾áÉo­ùب(ZUèkh Ê1@ P£W6z½4ze£W6:ZåÏ0Ë/àï”·‰Ìè×–ŽŽ^Ùè¾u·©#§;-Ay²dÇ3ñ¥“ýDêä?cxw \$ëG'ߨäžü?Oô½bKÛ1”×ù<²òÿ¤ú®›î˫ɣÄÙkæïNW¾K‰ÑÉ76y²ò[Ó0Ùãd3¿æõ~F¶È‹4Åè¨éþUË‹„ÿë¢wÑ5ó³•/¤Ê’N¾±É78ùïg+ÿúŒáûØÊ‹ÑQ?ükpºò ¼;臵òvòM¾ÁÉ?:©ÉÊËxµò¦~Dæ=÷¨;Íuþ¯ëuïZÕ/ȼçu`§¹Nµ—s¨îtµ˜îô²w§_¬ÚÕÝéeo׿Ý騣>àý ¶; âÙ µƒŸ òèN/{w:$jµ…ɶ;šör|Ä÷èN/gD gðG›1V?Õ®[zø{Ç\bô÷ûÃËXxë/cýáe¬?¼\êǾœêWeS¦?üíó 1úûÚe¬C»Œuh—›ÚtôÆFo—F×›§Wºìóz$™í2Ö#]Æz¤ËXt둾s\x:zc£cóÑìŠ?œê‘–zi{¤ßözÄèïw)—±.å2Ö¥\nv)Óѽ]½éÑU»)ú¼¦K9gI]—òÐçýDŸ÷NŸpë.c}ÂåfŸ0½±ÑÛ¥Ñ5³²nø„ŸW÷ ‹Þ®Oxäóú{Ú zeËX§nëÔ-7;ué诵÷tô¦GW-—èóšN]Éwc;u‡>ï=íݪe¬W¶ŒõÊ–›½²tô×Ú{:zÓ£«žI¨½ºWV¶øØ^Ù·3IbtÔÓúÁÚXÁäéÅ ÅDF¯lôziôÊFo—Folôvitœ4f¾}|-à狼$4Ò}°®E0yÐ<úÁ’1`tÔ‚.u×Ó ]êD\ê¾§õíl—€_\yÐÓZX#Ý••'Š¥{ZùÊ¢•·=­UO NþÒÊ÷=­xåUO«¢32=­÷V¾ëi½'ó]OkaÍ£VÞÿW^÷´R™÷DæugeÕÓR™Dæ±µé{ZßÎðJøU™ïzZ k½²òŸÌÚÈžV*óþóÖʃžV¸ëžVÙèk{ZßN‹Ñßï*-c]¥e¬«´Üì*¥£76z»4zÓ£«ö@òysÄŸ×v•¾…£¿ß×YÆú:ËX_g¹Ù×IGolôviô¦GW}çe– _÷u¾„ÏþhÌ,oÞy©àÖ‡·}åÍë¼t_g¹s\ß×ù>ø£¯ónÁ¨éë,·îrêú:_Âgÿ~n÷^Û×Yn±u}/álò¾Îrëâ“®¯óœ¿ûçµÑéä·¾ÎróZÓ×YÞ¼6⫯³Üº– ëë4¶ôu*Íöu–g_§ú•ìëÔa«éë,ϾN³} nû:˳¯SÏQôuêM~íëTå嶯Ólݨ¯ó¬·±îp]îí>HyTëá[¿Úbe—Y…ý>;üU{ »hõ_~°–K§÷¦‚–K°t¯ú/ÉËþKeµMÿ%^`ÕP…øsl?ÕÏרö_¾\à™,ðçÉÛ>I¶À,°é“|_‚ÿs¶ÀáãÒ•ÚuìJí:v¥v»R»Ž]©]/5$’ÏÛ°þt ‰ïëÏØçý<ý¼ï…®c÷B×±{¡ëؽÐõRçþ¼ªóOj¯íü#ß'¼,J£¿µr»Z¹^êÐÃ+¤:ôäm;ô*”óËzu¬Å®ŽµØÁw×-vÒ9²-v/v¿W=ru¬G®ŽõÈÕK=rÄ<†Lü7Ó#WÏÓ§¯nè­c7ôVVÜõÁÚ×À»¿êecn$+dzÙêë $Y¡ctÔsÆV(8Hõ}°63ðî¯zΰ–©ž3U8ezÎêX×WèúR£76z»4zc£76:.…+0 'àïw}Õ·»¾Ìè×–ŽŽÞØè ¾5N©#‘g×sV_§În“­c·ÉVvvÿÁÚÁÀ»¿ê #+T±åêzÃ^ØöW²Ö± Y+;þþ`m[àÝ_õpÛ.{¸4q·ð3ïþÕ¦uìNÓʪt>X{x÷W½Vo‡OßÇVHŒþþµ /V´AwÕEVHöD•“ž¨ò܃ºx³æ=êz¢ê¥Þ¥ }AÕ»TOz—êÞ»t‘ó_÷.Õ½­¨²Þ¥zÒ»„0Û»ÄñlÚÁÏyô.Õ½w©²Þ¥zÒ»„LóQ=é]ªg45gðG VÕ»TNz—ÞÔÅèïwÕ±î¡:Ö=T/uáÝ^u•“î¡·#91úûý;u¬§ŽõïÔKý;l=q8MÿÎÛ‡ btÔgóÁZkÀäiÇö?OøŸxíèíÒèg}6xUŸM9é³y{'£¿ßéRÇ:]êX§K½Ô邨tº”“N—¡þÄ|½×¤ŽõšÔ±^“z©×.°î5)'½&# ìïI0è·¨cÝu¬Û£^êö@ lº=ÊI·ÇÐß“`ÐñPÇú-êX¿E½Ôo%X÷[”“~‹·O;Åèïw<Ô±Ž‡:ÖñP/u<¼}(#àï–J8(³þ`5í`ò µàƒ‚ÑÁ‘êí®ã¡Âë²IoßñðöY«€_\yÐñPY™õ••'¢­;ÚIÇXyÛñÐN:n­|ßñ€W^u<”“އ{+ßu<Ü“ù®ã¡²Ö‚ +ïÿÀ+¯;ÚIÇ\y]wßN:ˆÌckÓw<¼_ð«2ßu«Ãm;¼±äzRƒÜö¿Æ*8ÛI r{]"{v=K»ž…¼»,®'åÁøÝUyc;)~ûÝ?Õ»¿yà {÷@ÞÝTî¾ÿÝÿsöîñãÒ5m욎6vMYº†Å¦«Š}_lÆ–îóté.Þ5ÑÆîšÀK§*NëIÅ)y÷è>.]×ÐÆ®kÀ“WÅ õ¤´ÁÏ{¹´UsÂÉëjÎzRÍÙ^'`ÚI5gcU—— -‰Æ…L6)ShÙ^§çÎøüÛŸ?Ûa#™¼©l¯OÏ(ñÛ%>UžXOÊ_LžG¡bô‹g^¼ ˜ü«2BüŠ¿b_F8òŠž¾" ´gÖ`ò¯ÊýÈW$N^Wî÷B^±´·1–v2ùŠõ§«Äk¯cÕ3¢ó6FtN”_ÉÕ“"¹ö:çrÆÞƸÂßvt¾M^Œþ>Ý6™¼,-«'¥e#+ïùžq‘±ºÁIU}µ“ª¯¶W}]«\7U_m/Èj¬ê«T}á-ÇV}±A<¤vð³AU_m¯új¬ê«T}!gÙ”mµ“ª¯vÖ¢t”.a VU_õ¤êëmgYŒþ~ÝU»Tw…m»ª»ª'uWo;vbô÷+ŸÚ¥Ê'öŠžì½¦òémÇ[Œþ~íQ»T{„_QÕÕ“Ú£·M­ýýêŸv©ú½¢©þ©'Õ?C¯ø‰¿âõú›v©þ¾¢®¿©'õ7#¯èï}EPÓ.UÀ W40õ¤fèï}EPƒÒ.Õ À¯¨kPêI ÊÛѦýý*v© äí€`‡¿°‰Ñ߯Ãhcuo«;üýwÿDï~§¢UBàwW•õ¤bäÝýøÝ¯×"´±ZòݱÌ÷µCïþyëT´±jhÒt5@=©xûôBŒþ~>¾]ÊÇ“WÌ¿¢ÍÇ¿}Æ!F?#ÞÎ3âÇ3ù+Émg™ÜöÌä6–Émg™ÜöÌä6–Émg™ÜöÌä6–Émg™ÜöÌä¶³L®”É…áâ?ÿøþû¯ÿYÿúÜþÚDSG›_¼L+µBàAýÊ¢|ðt:xRùÀ|<ÈòAf£ù«TU=ðÞä¯6ïñóÏùrQ–!…¾ýÊ¿ PùëA8l~ó%x<~|òǃtÍâ}%ð|üjŠIŒ^‰¹D¯‡d6—òñ ÍHþó?z…œsǃcQÜTЇÛ~į¶ãëÁ±(S >ø±BS!ŽE™J lôc…¦C=‹²,}ñ~¬Ð[û›_jQ¶À‰ÚF©þxä$´Û¯¢üÕöÿ}=HâALlô,5‰Ñ—õb%ð*å¼ÉW÷håÿïÆjf†z>1ÔN õ|b¨%œêùÄPK81Ô󉡖pb¨ge†b£o¿òÂ"†-øzpÈStÎG?„+”ëñ SÙŠ'ðC¸¶ÃžãÁ!O>5Ÿ ü.¿Äx<8äÉ/ò Äf1V33Ô󉡖pb¨çC-áÄPÏ'†Z‰¡žO µ„C=Ÿêùãø1Ô󉡖pb¨çC-áÄPÏ'†Z‰¡žO õ¼«YêP}­Ç/”Á=y:xðêÂñ@èÒ{yORã&1zÞx ^„×]J;§ÇÅT \(VÍ›kô÷óÐPÿýŸŸ_v~ý êí1ÔŽ õö€jG†z{@ µ#C½= †ÚÀ/yÔµ¹n<ꚣ/È£®NXZ?„«Äz˜J¹ñçR\&páQ·Ü ò¨“Ë¥ø!\KD<ò¨ãb,Øz<ß{Ôëv!¸°I~ò±÷¨W^c%pa“–Wô½G½>ˆ…^¤ûVrïQo»Odpe“ZCõúZÀé˜cùp®÷¨×WÏ%¸pË”|ïQ/Rô•À…óòäzzs7áÒýR1‡[6“Ü{Ôë’¸€ÄFzÔ_â=j?åLàAü¨øŒ<êEœ\$p±BmÊzÔ¥†Jàb…• È£vÉ6ù&V¾n2ÿ÷óÌPÏ»±š™¡žO µ„C=Ÿj '†z>1ÔN õ|b¨%ü’GœëáÖ£n)èQ—Éy?„+úæ#ô¨k ™À…}(УnYIñ¨s*zÔ‹«ÄÆxÔÊPÏ'†yÔÆPÏ'†yÔÆPÏ'†yÔÆPÏ'†yÔÆPÏ'†yÔÆPÏ'†yÔÆPÏ'†yÔÆPÏ'†yÔÆPÏ'†{Ô9¸–zú‘# .ÎãÔò¨sXB)ÐâùFäQ§àw×uZ"åØ{Ô›µ(ìÝ…TÒV×ö÷óÐPÿúëóËίAC½= †ÚÀ‘¡ÞCmàÈPoˆ¡6pd¨·ÄPø5:¸n=ê)OУ.9¢Ñíu«ö¨ƒ;bXµìÐ£Ž‹C_ \xÔa?|0gÔ%4 6ýu«ðŒºù)¸´IÞetFíržÀ¥MšbEgÔ.øÌF—6)ֈΨݺ˸È;¯ñö¨'¤2Æ£žZœò¨—ÖG‡CÕ=ß]{ÔS ÅxV§3 yÔSÊ>xUç.zÔ1d$6úŒÚÇøÜa¥G½žÄ•P \xÔ!à3jï}*ž¤×Þ2ô¨k«lòEn‘%a:7O࣎Ófëþ~þ‚êy7V33Ô󉡖pb¨çC-áÄPÏ'†Z‰¡žO µ„_;£.`tëQ/’ϨŸ8x”g ŸQg&o=êÅ7ÁgÔ%+cE<ê(¶ åQ»˜ØôgÔ­Â3jc¨Éµ4Ô󉡯gÔÊPÏ'†ŸQ+C=ŸjèQkC=ŸjìQ+C=ŸjìQ+C=ŸjxF­ õ|b¨±G­ õ|b¨±G]–Ï“ÑuY>h&páQ×è*ö¨[‰.²ôËúèQŒ¸ð€Š—þ¼tz‚òë°GjØfü÷óÐPÿãç__v~ý êí1ÔŽ õö€jG†z{@ µ#C½= †ÚÀ¯xÔKl\{¸ö¨-gàQ¯%óG kàñ(é)W}´â<ý®º*ò¨K©L?„+/^?¨úØŠN’ðîŒÚExF½DÀ•Àƒ<|¨ŸQ;¸töŒzÊžQO-°Ñeެʚ™*+žÁÕÑGØ£vG±€›3êe—ÀgÔ«ËEà²À¡’3j—áäÍõä<£žj-‘À…¡.œQgQ,$àÚ£S’‡ÌòĬeGà£n2ºÞ£.©6u"µ_|£HàEžêM®÷¨7ï$±Ñ…G½Ä +æïç/˜¡žwc53C=Ÿj '†z>1ÔN õ|b¨%œêùÄPKø%º¨ïŽ=ê’Ó3¹ =êâS­.¼€¼Ÿ”j:µ–# /À×G—]¸ð­È£)M@lú3jáµ1ÔäŒZêùÄP³3ja¨çCMΨ¥¡žO 5=£> õ|b¨Éµ4Ôó‰¡&gÔÒPÏ'†šœQKC=ŸjâQKC=ŸjìQ/_Ç7äQ·ÅFbÛ=êeê±ø±BÕûÉ÷õ¦ÊS#ð"üyï=ò¨WžÞ„TÚÓPsú¿ÿ˜¿ìüú4ÔÛb¨ êí1ÔŽ õö€jG†z{@ µ_:£öÀ͵_\âˆÎ¨}j1x”Ûx­È£ö.6ºÅ =êÅŠE+äZõö¤8×õâR·‚Ψ—ptíQ/¿ÊyÔ˃R<É_PõñõI \®PrÖQûèÙä›\àíÌêïç/˜¡žwc53C=Ÿj '†z>1ÔN õ|b¨%œêùÄPKø%Úe×ÃGíRv°êcñ™œ'ð(]O\õá¼™À¥kT*¬úXËï+ áªW},‰MwF- õ|b¨ñµ2Ôó‰¡&uÔÒPÏ'†šÔQKC=ŸjvF- õ|b¨Éµ4Ôó‰¡&gÔÒPÏ'†{ÔÊPÏ'†šxÔÒPÏ'†{Ôëù|BõâRû@àAµœäQ/æJö¨ÍèYFPê´G=Õ,«¸¥.¹ÄÞ]*VÜ·ÿ~þê??¨³JwüfÑØÖù‹ËÎ~ïûîàá@ǽÞFø‹¿­Ö£ÙGÀÿµò ÉÃàGÓú׃ãüwq*)<ÈEÂU¼š¼4VN,Дro‚·×Ú‹Ä,<ˆ_…{¼>pÀ»wŸ¾2#êÝ·:ì]l,<Èz¦©öïþ8<à¿Æ¾û¯±ï¾ÃÿµLÉwÏ¥¼H¤ÊàAUå´ãx÷uZ>ôÝ}÷nÞ}•nÞ}«ÞÏ.ßýYš¨ß}ë”:àßÿ¾ùÝ« OÊ£ö_•âdx|÷2ÅÂFO‡p…"ã¸,¾ÇÑ™háåø:5gßŇ¿mݸ¾x;>[)éË\¬œ_*‚Ž`òÛ¯deJý}{ "hdÀ-<ªJñx¿¥2ëŽêݑʬ¿rÉ÷*óÛVÊ <‰_y9zšX½ˆ_yÙZX¾9oâÕŸ-䨏 &oÄÆ¥çy—¦Z \úóåË5²b³È,]5ÝÖŠÄfj ½»›©&_¡ØLG™ÖŸŸÿø÷Ð.£áAÚ”A?ƦñÀE˜þøì²LKü»®¡ÝáýçýrÈí¥$—ý‹¥Êº·=¤žÀå^ä}ì]âå›Bpáoæüé@éCæmƒ=¼·›¡ö+ôèLI.W¨ íýV ~}kúy Ü|k4yÙž*àúM}¤`òƒG‘É×gõè«fˆëwX=óÛ£ð›LÞåÞMÞùŠ&¿iöábþWŸÉ•w1u‡‚랪ôÎ\ÊД*ô|×Îâ®C€eÝ}IÐó¼“ïdsú¢!0Ú»öz'—ƒ8ñyüWÆ­d…æ“’ð7Vh[¡yl…æ +ô}L†¾¿–¡nò1ôpû&ÁûD&_Äî7öy¿¿þ¼ç“ŸG&ÿÓá¤Ç:¼£¯”Tûùñ ÇGqWàGlÓG9_ÀüaÿûA˜tˆ}§ÜþwÿšYow¸ýï¾R<9õ—=½þýŸþÐOžðÍÑú¹zR'ÍöôWgÜ_í_=Ó3PèàêŒû«æ±çqª ®Î¸‹`{2×Êôp•fü"uê}9ÅöÔÁesyŠ¥W¶¦JàYd§“(Í˜×æ(¯¢M«œfLþy ©àª>ÏÒ5ý€À£rÕlr™rÊ.=ý½„Ê$[Š .=ýœ*N –‚¾»â[zxSÀ‚K7«ƒ+Fø–özÏ.K^`žp{à\–¼Ä\?0ßÒÓ Wp4|KA? pYîóô¢mß·Ÿ(\¶¤: /2•“\Ò*•apÙâ"‚ÿ[™º•žÚÐüíYNò Ú­ÍÌLåÌM¥‚S9sS©àÄTÎÜT*81•37•óamtKjŒ ѧø–:¸hF‰>”è‹Ç©FÏ¢—Et *^—#ƒ ’—Xs§%k—‹ß]WÈYÂ$j*œ˜Ê™›J'¦ræ¦RÁ‰©œ¹©œk33S9sS©àÄTÎÜT*81•37• NLåÌMå|XEl¤‚~@à’$¬ÉT›lÀ*ð»b£X£ÿ€\FÍ X­æˆrp>× í¦r£úyÀ-±‘f<¦Ò‘©ì¹ŒvSiáÈTö\F•Á‘©´\FÂT xçUîý[Ö«Ü:¸¨Œ¬~jÈ«¬)…Là¢d ÷ hÉ{V•‘ë5ЫÌ> wÿi=+IYô²²¾TØèáw’°.Ì…Ÿ&=\m .Ë÷‹¬}kªL8ø/ãQû) ¯R0atp™r™dí›dÔ‰»µ±pY´K@Õg®ì g\6×aõ™Ûùà\µmXΡ x” 5ÃN á]X¸x÷µJz•58¯²)TN^ö>7d묩\/:…¦2|‹âÝçÃÚÌÌTÎÜT*81•37• NLåÌM¥‚S9sSI½Ê½îÏz•;çP?Äf Xjƒ^å²óf^eN“ƒ ¡E—|É5UìU¦‚Þý§õ¬$i5•Ы4¦ræ¦z•ÆTÎÜTB¯Ò˜Ê™›JâU*S9sS ½Jc*gn*¡WiLåÌM%ô*©œ¹©$^¥aý ú‹&$Ÿr@^ežr.žeS§lÈ|>;‡hMHÍ7¼Ê•{0˜Êîæ·ä>šõ›J G¦²çóÙM¥…#SÙóùTG¦ÒòùS)à½W˜WùìïàQvÒdèU–VJ&ð,ŽC³Ç^åÚí@ૌÕa¯2U‡Þ½;«”´=A? p€·,ÝBÅU81¸4ÏÚ7KÈS&ÏàÒ\ÄáY¥ Hl:¯R¹…A? pYš¥S* AþMX¸ª õw ‡Èà²ù,eÒÓKpC¯£yw‚~@àb›ˆÞèU†ØË-RÁ‹ôVc&ð*…«ÖÞ«|ìptk*‹#¦²‰¥›k33S9sS©àÄTÎÜT*81•37• NLåÌM%?«,쬲0¸8«,Þã³ÊTš'páU†8Á³Êµ—Á…WYüDÎ*Cß½?«”Ä9ÔT²³Ji*gn*ÙY¥4•37•ä¬R™Ê™›JêU*·šJâU*S9sSI¼Je*gn*‰W©LåÌM%ñ* óMÐ\¤2—ºA¯²•ÄF©Ìì|†¸>B•Ñ^åòæ’]tàNOþ¾©Ü(_pKp£™o°©´pd*{N›ÝTZ82•=§Mepd*-§0•n½Ê•àz•óM?¨k|NQ׸ÅÛ¬ žÒòìåac9š Z›ü›ÖrÅðzÄïÞUJêš xÔ6 žUº?µƒËL¨/ŸUîMH\àSó„8-õ*]"g•;#BÛDrŸUFüÝ-?zóø¬2¸Äàb›XŒ9«ÜïoTpíUî™ ¸jYñz•-ìp 3¥˜÷-_¯ªˆÕ¡³JïBFKgLeü¶¿»6•í[R7Öff¦ræ¦RÁ‰©œ¹©Tpb*gn*œ˜Ê™›JêU–Ú°W¹sÏtp±ÃV':EžJŒ.û¨‹«È«Ì¥&øÊ‡ ½Ê”|ðî¬R’ÇPSÉÎ*¥©œ¹©dg•ÒTÎÜTÒ³Ja*gn*©W)LåÌM%ñ*•©œ¹©dg•ÒTÎÜT²³Ji*gn*‰WiØ_‚~@àâ»7_¡W¹%¸d¶ 5"¯².ni ðãÝKp5÷^åvïrFK÷†©ÜhOpKò¢Ù_°©´pd*{^—ÝTZ82•=¯Kepd*-¯‹0•ÞUúêñYåÎþÒÁ%‰[s˜¾¥L…ÁÅ›Tã]‘çA‰ÁEá„k "ºTÁíY¥¢o ú‹ 4§ÑYå”÷ŽÉ.‚м—ëü´<Ù…Á%ýª‹¤®2f´tÝYe¨ä¬òÙ€ÕÁe[ɘ%äÈàâÝCLžU†½é°ƒKª‘–±W9yøá:šÉ¿ôW4+fÀW¢…@à’Ò :èU®sgpE³â2¬«ô.1•ëÍϸ6Ýðù°633•37• NLåÌM¥‚S9sS©àÄTÎÜTR¯Òe’ßùW:¸ô.Z€ðÅßK™À³ôAÌ€/[dpÙ§›HÜ9ÞÝžU*j*ÉY¥2•37•ä¬R™Ê™›JVW)MåÌM%?« •œU†JàÄTÎÜT²³Ji*gn*ÙY¥4•37•Ä«4$A? puϨsÛdoöéàòœ6¥ö¹Möç.ÏiwBÃm’S ~ÛTn"“ÿè=+Û£ôâ7Svˆëàhqîࢃý`ÂP, j”®;ý,ÊqŒ˜Ž~œ)n4+Çï/ÉäI²l^ú‹æÿ••©·´ª÷¹ƒgÙç<^ºÉÕÞ-â_äáS©žÀEœ]r@K·•ÛìïþkLê~Iݯ Rg8HŽK8%Ürhø±tkÒÂxç੦ãA–ù¸„–Nëû¶•"}_ë¸ÅèCBûkLh]Z½ò-L7+oÈc¢øÏ»¥íàI.ÑWø¯W~ËÌG0ùwVþûßC2oàd¾N;»[?(f}í°Ê¿××uðƒb&/c€k²~{t öð®ßÇüyvî™.ë.žì­†ćì\ÄïþyZhX@¼s‰ÁeÝ…«˜ÄøÝ­Ø—°Ø”øÂøK…]„ÂàÂT.;iþ@¬2±:31däϯüÍ÷ðžÁA’éX&¸¼›ÇLsœwpËá¦Ti}@àªy&:d“¦6)–;mÒT“¬²WN¸Hàò‰°I«¾{4zÇôæ+¬HJ^rð(¸xÅõûФX§DàUÆøò‚Xy¶shòÆ&­Õ!Ð&­\n&Ï€ÉֵǼƒKv*#²I‹G Ëׄï”EÊpò‡MÊß–ýî(ºZåÇl’³I~Ì&ù{6)Šš-76iû²IÑ•˜ \2²EL3j(ÀE—cö莼õ\íàH’psmôTɵÑS­•À“Á†mRÝë:¸.Á~RÉ¡¸,i>“*É„Þý—q'yq³ºJmöÛ¤X¾¥.æÈF—6)T|ïsh­¼)†¬uÂ×Ì­\}8/nžjT6Éc›TŸG‡Ö&•T\ݘš ¶IaBK§mRȵ%E¼—ä¢ìH&á’$“Ô&)8±I3·I NlÒ9KdÙC2)lÒJIàÂ&­\’°óz¥$pa“jŒð:¸>ÀäGßýX"$ƒT,‘4vSp»ÍŸYï—ÞQ¼= pµ_ÊÎë¬T‰ÀÕ~ÙD5£Ú"«'p¹_¶©\ˆÝæK±ÛìÆl’³InÌ&¹;6imEÉSíá¦Âzû²I¾îeD\¶{Æ‘Mòy À«,·™²IÞþÌØ$»ÍëŽõ:rkÁzm’…#›ÔóYW¿”w³´Õ8ï¦X¯mõÊgMà²×;xƽñY¸èõ^É­ÑyÒÆg à€åÝzÚê€Ù©%mµmK[㋦­–Ì–¶:@ÁâÈy’åÆçI3zÁšeá’{9VØu»±¬¸ØLŠjÚ›Éʲ à†ÐïNžáþó‡hár¿ S@çIÞe_¼¨¥K0ïÖBa“—ûe*Æn+M*‚ëØMÓK?OÂßµInÌ&¹1›äîØ¤•Ï$–ÖÃÍ÷ö+d“–.GÚ›Ú‰RRüÐ$ï¶`ñÈ&-“Jhô® R P Ë‹zÓ“ÔÜÔ”½<¶ƒ+Â>Wз[ÖŽÁ%szªÀ&­šákpÃ/µþêráOÍxVï¡M*)6—¯˜äèÒ&׆H¸É»åÝK3y·\‘ÊØ¼[.äÝ ltñŠ)l“b ŽÀÅ+·SñI›´Z$Éòn‹=Z‚[å'ù1›äÇl’³IþžMZ 4ºÍ»µ*éE$g}PÛ-Ê»}YX ŽÓF ¯êˆÜÁ¼Ûâ½57y7÷¼Ï½#ÃËŸ픰MÊGôdáR´½KÐ&ÅPØä¥hヲÀUVÞÔ8E…,-íT\šÝ`-€3÷²à¼›KÅyh“¢‡KglR\\h“Ö.¹ªö¸ÕÖ'eŸ\Ö'5‡m’÷S&psë;¶Iʼ¶I)Ʀ¯$ì¶tÁFw G ·mˆk8¨MRpb“fn“üRÞÍÞ£ón sÓml¸¬OR=Pª>ib£ ›´ð0ï¶^°àຠ”wëïÑøº yÝ`Þ­»GƒÆn0ïfb·ó‹0ðy’Ç”Å&vƒy7»Íü²–HF\K!pQÏB‹è<)µUÆ0Çê…Øm¾»ÍnÌ&¹1›äÆl’»c“¶ëï”fà¼Ûö+d“BŽ>¸dgHÖ„åyÉ»—£ƒy·šåyÌ»™Ømæ±É»©Ømæ±É»©Ømæ±É»©Ømæ±Ì»™Ømæ±É»©Ømæ±É»©Ømæ±É»ÅÔ ®Hǹ…Ë’«È&-Qh.6“è*´I¡¥è\ì—Ëw b·ùRì6û1›äÇl’³IþžMò%)‘äÝÊ~›©É»­\£®±Á¼[rjËÁy7JÀ6É­)nòn2v›yìFòn*v›yìFòn*v›yìFòn*v›yì†ón:v›yìFòn*v›yìFòn*v›yìFònËv'/ ‹ú 7ú úIq*.lR¨¹àú¤3 ›\Ìb·ùuìö¸+'°ë¿>Ð_ݽ`\ÿ%îÃ6É‘Mêoüª ~-ïf.ö"y·€ónë_.úÝÖë¿ÐyÒv㋼ÛzýÌ»­7~8¸¿‹œq7OªÁÃó¤îb/xž¤/ö’½Ø ž'·Õ¼º™‹Ôqãû^·{h\–`y $+‹há²+Dxž´ÝCà&ï¶Dón)4OàInx¡Â¼[ ….öËp}jîæ 7)ZS&±[A2ßÅnò®çIø»6ÉÙ$7f“Ü›´eÔ”=¦y·IÞ­4Ï2íbo“‰·Là*ïVÉ»åàÝw 䌻—~ÒÎ>nϸ]*®Ò7ìŒ;–Hà*}ã Ê»-¡—Cïno ܽ4k“œ®®ÀЏ·¤$uÝm;‹•µIG!¶„›´Dí°·d{@àò prøŒ»§˜®ŽÌ*8ã~“WGf1A?©ìôc~ؤ¸‘(Íðc6ÉÙ$?f“ü=›´?)ôpÛƒ»þ öàºã* 6iÙ³pÞ­¥w.θÓN¥alÒ¢ À­MÚ…ËÚ¤X\¦oÊûÝÖ$¸$W¥Š3¯8¢½ãÜŒRÁmn-øÓš#ƒgez´I¥ÅHàª3l‚õIS®[ &Ì °> pÉ C„6i5.7“ÅxáZ×"‹çkAuÜ«Q’7Y¢¼ÛÃ,9}çc`÷‘~ +H»‹J¹T\TJm’‚›4s›¤à×úÝÌM£¤ß­à~·õ R|RGäòþú8±Ñ…Mr“ÇýnåÈÊJ8¸P”œq·Jà$v›yìÆúÝôM£4v#ýn*v;¿*”Ôqã èMìFòn*v›yìFòn*v›yìFònå`y5—€Æã 9 <:!ûˆÎ“Š -¸¼¯,—„Γrh‰M^òèL¤ßMÇnó¥Ømvc6ÉÙ$7f“Ü›´¶¹á±¼Ûú+˜w‹“tƒiÞÍ7xûñ"ñÒKcýnM”랢"CœwÓ±ÛÌc7–w“±ÛÌc7–w“±ÛÌc7–w“±ÛÌc7’wS±ÛÌc7Öï&c·™Çn¬ßMÆn3ÝXÞ­M5À3îõ‹ý²¦æaoI,êêfÜïcÎÐ&Eï#pY;·gß.HçI;Ñ |‚ÇéèÇýnû}¾¯î.Çy7uõ¹¼fÂÅBàêÊ<Òï¶ÞÔKàU:y¤ßm½©ÀÍ宨ï¶= páû$)á/ÀtÄ­^ä><Áó¤å{ºDàb¿Œ•ðL®Wí"¸ŽÝôåÏ“ðwm’³InÌ&¹;6©WkœwÛ~…θ[͵ø!Kü}¸Yò»·éð¢-¼ŠÞâ¡M*¥(½¤ýn>“ZŸ \h¯Ò¨diSƒ í= Ì÷â„0¸ð(Zõ÷–„‚VÞö–„‚{KBžÀe†w¸·Ä=_.Yb+®pS‰nòneÂýnÛ>|®>ÁZ€ü²—4X P+,¼I•IùBì6_ŠÝf?f“ü˜Mòc6Éß³I+Ý €›´ý Ö'µ&£'’w‹5Ì °,=ƒK^€è æò4 çÝtì6óØåÝdì6óØåÝdì6óØñLÊØmæ±Ì»™Ømæ±ëw“±ÛÌc7Öï&c·™Çn$ïV¦©`›´> p±_¶PäXÌ#pÉ Pp¿[^ÓÅ.yŽã¨³Øm~»ý÷óó$|ûÙ¤í¶IŽlÒöÛ$ G6i{€m’…_êw;ϼëwÛ5CŸ'ùe3ª.k¦9Ý|Ê™.ù¸}‚œnË&Ž–®;Oš29ãž2ƒ‹¬yNžq¯l .²æygé7÷–,N"ƒ ›´ÄX•ô»´ò]¿[Àw)-ç \¼bÈæÝ¦]¼bð×qû¶«µ„«K¡W|üI_\¾¢oø.¥°_qÞÁå5ЦR¼•¯tòòSÃ5“îZy{¥ÿ&ØÙ$7f“ܘMrwlÒÆ“À»›3îíWÈ&¹æs pyòR3¼sÒ-!!pIyQì-qÉ·w)¥ì`oÉú€À%suJØ&¥€VÞÚ¤ä&Øï¶x>¸dÓ%ãÞ’'o{KBÆw)…T"KíÝOk“¦ —6ÉM¸ßÍ%>nîRò±Á3îí'ù«¹o·Óo¯è}!6é(z´pñŠ+÷¬™ô“G+/lÒbŽÖNP9ˆ³I~Ì&ù1›äoÚ¤tð' ¸µI²9D—¹ä \Ú¤ýNc“s.JS…<“Î>œ½s2MøI_\ˆö¶fh“bu‰À%›þ~ªµIG#©…+6}ç‰MŠèÃu6Ifã¥M Hl:›äe·´IŸ…KímäÎIŸ3úpÖ&M­b›45—6i*ØOò\yc“VŠ)h“Üq»œ…K›”C&6)!™×6i‰zå+ÎGø33›4s›¤àÄ&ÍÜ&)8±I3·I ~)ïæävKón.Ã3n—Ž›h-\6=FÌ3é– ›.mRÅ<“Χ>\wž4erÆ­b7Òï¦b·™Çn¤ßMÅn3ÝØýn2v›yìÆûݾKIÇn¬ßMÆn3ÝX¿›ŒÝf»‘¼›[«@ÐyÒö€ÀåÅ|sº¹ux/ªS0£ó¤©=ž./æ ¤fRÇnó¥Ømvc6ÉÙ$7f“Ü›´õ.H?‰äݶ_A›äbÉ.Oƒ‡y·ÅµÀ¥´ÜMšÚÑäí]J"v›yìÆîw“±ÛÌc7v¿›ŒÝf»±¼›ŒÝf»ÑûÝDì6óØõ»ÉØmæ±ëw“±ÛÌc7’w›–Àöàn<É_MÐ&M¹´Dàr3‰Þ9¹ô°Ñåf’¼»»Í—b·ÙÙ$?f“ü˜Mò÷lÒTs‹=ÜØ¤íWÈ&-äÉ»­ýáÐOZóµžÀeÛ”b%mS¥:7wNÊØmæ±»ßMÆn3ÝØýn2v›yìÆòn2v›yìFûÝTg>ÝX¿›ŒÝf»±~7»ÍìaËo_¹ ÿe^q’—ÞGý€À“ú•8¨Íò¿?{ý:x¿Úyt~é·šªg£‹WœD•ŒÇÅÑ£‹“—ç¯>ìaËö ÖLàòÃí=¸â°åñÝŸ•¼Ê¯ëÅäå‡ÛiÑ4üߺÖ5ˆ«d½|–nûëCýï±ÿþ?.ÿ€ü S“Ÿå%ËRlªÜ‡£~@àbkMâ¸C¬iMÕ¸Xື¦ˆ ú·íªÒZ \,pnEt~K±q‚‹Ýúù«»A?¾h).^Ñ·*B‹"5ٳѥ¾g9y)6{õ‚ËÝÚèûÌõ}F·g}Ÿ¹¾+8Ñ÷™ë»‚}W.µ ÁÅnýüՇݠ·5ÏâÝ“¬oµ^,FàâÓTÄäÅ[ÅÝuÕð·ô}Þõ}¾­ïûedÝþî×#B´¿o\ˆw® ý}1”OŠÁ~,ðšEnÝþ¾=©ÁÛ‡ô"j¿¿?> zw•í}ü îï)FWbãk·¿?bbpñŠS,¡ÛßàÒ‰ý}³Iûãb> piÒ²+p_|¦Jàr' ’·Tn~îé8wpùŠ^6‰·Ši×w 7ûûú+¸¿Çøs}gû»Ô÷™ë;Úß­¾«·*ùY-¤àf_÷÷’ Øˆý}ûUHx_ýE—†:'¼¿/qúpïéû¼ëû|[ßwÒã>~_BÕ ã÷°§r:¸Ð÷àr€ñ»/»¾[¸4¨Î;¿»ø¬ªîà"~ŸBqdr*x·¿·÷÷VŸ¼~\ˆMKS„û{;Ì……Wñ8¿—ŽHÁÍþ¾Ö“Àý}}@àIþJÞÔåƒ)¸xEçC†ûûbÂÙèâÝ”püƒCBk÷÷à Þßý®°. µhÑÑ^Kó•À¥IÛï®±û{ÈpòVß[%úž»ï¾ýuUß“øpdŸ²ŸÚß·.8»Ð`ü¾žU¸ô|s 0~OÇ›…Ë€©†‚÷÷ÚÐäíþ^›ƒû{­žÁÕEÂñ{=N,¼¢Mê§Ùüö7û»Ô÷™ë;Ûߥ¾Ï\ßÙþ.õ}æúÎâw©ïæÃ9—§í_¿úè åO\îïUž£‹·*1F—n îï9àÑßÒ÷y×÷ù¶¾ïä* ~/>ãø½ì§žÄ¯ör¿×'×H—ñ{)x¯;ySû{Þ¯Áµçó‡ÔI¸=Ÿw2ü—Êpx•.5#KŽ© ÇÙ……K͈1áøÝ=»X¼‹ß‹'ñûónº®üùHüþ,DèàÊŸ——ÊŸO•ÀÊM˜ý½ìei nö÷õWp/{CWþ|LpÏ-{×þ|…û{jPꬾGÑ‚+õÝM¹›üö×k}(¼BËâ÷Ú$[tÔ\øóµø½ºÒ\è{ñòŠY¡ïy¯ éàò¼nÏ—ª¢ž‡6¸ªðyü îïnO5wðŒ¶ÈŸvó+lt©ï~Š0~wû%¯ ÞÅïÅ“ø½08Ñ÷™ë;ße–žê;Ûߥ¾«ýÝùŠ„ÖìïÎW¿/ ?y—±¦ÌqRÉ.cÍ)D´¿»i¿vAÃßÒ÷y×÷ù¶¾ïMÝþ¾^PÑþ¾= på@ex>¿L}O"[¸4¨ŽœÏOG:ÏÂ¥Aõ¥±ý=x¿¿'²¿‡@àRßSdßC! Wû»$B“úî+Z:³¿O¹âóùép,<É_|>¿ò¸¸ÌÇe÷÷åÃU—ù¸ðþ>ågá·‚›ý}ýÜß×£4W¯Üß§<±ÑÕ+Ê6-õVŽnô}ªûó~ê¤nûëª?ïÅwgñ{œ<<Ÿß¸Ü&ZM0~{Ûl—ÛDÎ8~GbÅÂåÉ~z`òï.¹ à&ÿî’Ãù÷EaK}©àýýˆã,¼ª@9áýÝU´tf—ú>s}gû»Ô÷™ë;Í¿ }Ÿ¹¾Óü{ x__Àmüî@ünN,\~8püîvö‹.?ÜäúøýY»€àoéû¼ëû|Wßÿüüã÷íw5ôõuÏžÄo¦ìÐþž}{š‹.ëëòWÑî¿~ü®zd\BðíWQÿêxp§©?á×¾J—¤‚apXª´M?õ¡Ðó‹Ò…”$¥a–ðgJ«ƒ«ÔÆ×)q·tû=Þ-Ýó2/³tëi–'pÑ«Zžá€^ºMf÷wÿ5&u¿Æ¤îשûû׿ÕÒåR{øö«¨u<8–.gç=Kç|úÚ"·òÚ÷ÐÒuÇ}÷9úÐþÚ_„V¯üªnV~ûU¿òëÞ›(:xVM¬üFÁäßYùïɼ_ùºV ø±•-ú:)-Þ%?6輌ñµòß~× B1÷ðíWQÿêx „b@£o¿’ÀÙ ¸dýÝ^:¸¼¢Ü%—·’»ClÄ»wr.áï^B:àCgà/5n}°ßÛÞÁ…­K“ä“tÜ›¦:¸paö‹ »ïîrìáÝww_ç6æ»»ìC&pÙ}üdý5ßÝÅæÙèêÊÕ)Âïîw:õîï|÷ü{Hß <é­¬Ó÷çîàŠ=iûrˆ=éñ€Àу°qo ±œ{x/_­½@<}:¸º€ëé˜Ix4 E4y{b6CÝ’?àC kàIï„`‹|l~.#žåWNe£~@àLJ+%ËÎk9ºŸJïÍy¨Ä‚‡Jà’éºTòábAK÷·ûýsHæ ü®Ìp³t[ÛZºí'ù£ˆ–n#Éï>$6~Wlxÿ»ËžÔ¯ pÙ|ée*UƹàVa§/ëNa§g¸ƒKö—g]e§°S+›>ÌÊÏ|åÉ¡“Zù™¯ü<¶òóØÊÏc+?¬ü÷1™ÿ>&óßO¤.‡oŠÀ7#}wáÏÿ—Ÿ{RÑ*=ê1¡ý>&´ßOÄæÒÒÍcK7,ÝO§rRÊ5šx«uôãÝ:uÄ}~ ô‡_üüaÿûÚt¼Ã¿ŒDg.¸ýï þ5³~Ûáö¿Køs½y̹Âïüü󇥕ùê–ÞÚ*W™ø|ü7Ãö An Ï€›a{P 7ƒ…WÀͰ=h›AÀ;á’Pzøñ€À³}L^’W¼ß¹3,\2Û'Ú·¾­Ýó Áû{§ÜG%çãKÊ¢VÛ¼j*§Là’»ÜMî^5•"‚ÿ²—‹N¹ï¯VNi—F%µØåw¿6X¯òW1÷ýWî7D¿.Ê.줸¼z•i}Ý=ã\]=Sóº+Êï¹H WG•þ[vÐäo“œ¼Ów7¦ïnLßÐ÷%J>J•4f7Y¸¸XeÊ †Çæ]\b“l9«Ä=RpÃwÙbè«>ž\Po´Ò÷©MÊÚ8¨ïkŸz†ú^w§TÁ-“eò€ñûëKªý7Ãd¹~W$T„]w±àÀ5aåâYå¾íâù€À¥¥-©/ÛØìá—¼`µ6¤ïëER§ô}Õö'­˜Ð÷¼iMMNÞé»Ów?¦ïê{ô.C2îí‹KK\‰ø6®‡Ô.ng¯ûíZßC>®p˹]ký@Wn¯\2?•†õ½î)ì.õ}ªx/9±éþ“Cûûö€À¥¾OÞb»,<›Nß3a®Š!¨mÑU¤ïÛW–ÖG¤ï’ÈÏ•¥-®×÷/[‹àFßÃ侇\›üîaLߨ¾‡1}PßCvîïÛ7Ÿ§RÒ÷ÅζJàBßýÞfeô}Ù'Ðèoê{Ó÷0¦ïé{¬Dßc%pIèV’Çúž'W„näFè<‚}¯ ùó_\®|ÌXßë~FÝÁe0RJ…û{ É#¸Ñ÷ì+Ðw¿Ä ½ÆõÕXÅ%1Çùˆ³gffnœX…™['VaæVa>âl}êeoGÒ\xÑ'Â^ˆƒBÑ«ìeÇŠ¡Æˆàý e}ïfå+8‰ògå+8‰ògåÏGœ=³(æQ¾‚“(æQ¾‚“(æQþ|ÄÙ’ê0¦Pü`7ܸ›&k?…Ø„„4ÎP®†«'Wx\y7ÁÑߊòg7¦ïnLßݘ¾; ïë¥`yª€2u{@ࢨ§û%ˆ.ŠzòÒw¿leÀ 3ªŒògå+8‰ògå+8‰ògåÏ黎ògå+8‰ògå+8‰ògåÏê{È%9¤ïÛÎcÞ Ã´¾/›xepá<†ûf¬ÍyÌ’ù÷¢üÙé»Ów?¦ïë»/­@}_¸ÐwŸ$ïºÐwWk"p¡ïkéûâ}MnÙÙ…×?s¯_Á‰×?s¯_Á‰×?s¯öpWQþÌ£|'QþÌ£|'QþÌ£üÙC}÷mo²×ú¾= p!6-K¸›Zb%páœxu…Ø&’J=ÍcQþÆô=Œé{Ó÷õ}Q¬ ÷÷í —¸Åâ¾/ê® u€úîJmê{nj‹ cúÆô=Œé{`ú+Ñ÷X œDù3òœDù3òç€õ½dIJžô—%_¾€ý}óøƒ‹m"‰¬Ò÷P•??åϯ£üBñ1Èö'² Ûl,Y…í¶ ެÂö[ïrùêô-é~Èf­^¾²YS lôãó®LHðì¯|î þӦýG¹üí‹@Ù»Ò3®~µ0¸Ü‹¦É÷g›IlnÏþ<âJW‚<ËÁÌí­×BVö¸ît±úìÏ•ãB) ×g>Nòð.é.;@ªèìÏ79— µÁ³?pci¸ŽòÝ·ˆoó ߢ\y7¦ïnLßݘ¾ã\~v±4tÖ¿= pqü´3w(jÆo+g¶'ðãÃ¥Ô"Ìå§õvwïjwj!µ;µ¸paj M›Ìïõè\º0“+è¬ 5+‚ÿú¾âx'-Õ·Rn\ú_Sƒgýë[E—“O25('Ÿàè&—_wÆäòëáÂXx–Þ_®0—_‚Ï.ïgŽ25(ïgNÞ!¸Ô÷UÛÁM¹‹®G甹ðcúîÇôÝé;Éå·*«g’~@àâ8¶…jõ¶GÊ\à\~LqJ°vÇ7çÜäöÜNrdr{.+ssù‹h'¬ïùˆ³-\HÝ"[ ê{ ðÝM펫²ø&é.ÕÎ#`ô} tÙèRe²ÏPßSqhél­Þ~y±­Õ;’.;ý¦ ×îÄ”"ËZ½Òp­^8îÚTp£ïû‰¦Ö÷c“£‡1}cúÆô=ÚÂjwv‚§.\âèC„µ;nR¡Éå/1CëõýqŒFïö÷Éþž"K©ó’ÿQJ]© .ûK'À°¼Inö÷âÞß×.·Èʼn€úžSfpi¬Ê䡾ǪÌÎå;ßZ‚ûûú€ÀÅä}Í êûÚ„Gàbò‹ELPßÃp£ïíy@¢õ½ÖÒk\å‡*…k>âì™Y…™['VaæVAÁ‰U˜¹U ¹üäÎå'¹“\~šR…gý±ím&\UðJiá„ãÈXÂÚt¸÷(—o¢|˜Ë7QþÌ£|˜Ë7QþÌ£|’ËWQþÌ£|˜Ë7QþÌ£|˜Ë7QþÌ£|’Ë/©Êä\Ò\4z$'ëe£GÀE£Ç"\æòsòHlÞ‹òg7¦ïnLßݘ¾ã\þ²Ûâ+™·.“²{¼¥_Ö¬l`p•”­PßÃÈ9ïjwj!µ;2Ê'¹|åÏ<Ê'¹|åÏ<ʇ¹|åÏ<Ê'¹|åÏ<Ê'¹|åÏ<Ê'¹ü´^|‹ô}{@à2XL5À³þÅ!¯.ƒÅTàY SA+ÿ^”?û1}÷cúîÇôäòKÂ×o\ì2%¸ õÝge¨I.?9õ݇€›ÜžŒògå“\¾Šògå“\¾Šògåã\¾Žògå“\¾Šògå“\¾Šògå“\~̪Z.é.ô=Usù1F¦Ã\þÖMâ¬Ýiu‚£¿åÏaLߨ¾‡1}¤v'V¬ïë—µ;>‘Ú½M \þæ•ÊÛÑeíNhòÝþž"ÙßS$påÏ<Ê'¹|åÏ<ʇ¹|åÏ<Ê'¹|åÏ<Ê'¹|åÏ<Ê'¹üPË„kõÖžeg–õzÅ¥@àUVôÉÒ^¡ïÁW+ÊŸ_GùÛuIA¶?‘UØ`«`áÈ*l°U°pd¶Ø*xŸË,—¿ïÃ.rùÞg˜Ë/­6zÑ^ö8—ïbFðîì¯Urö·wYxVeƒžýµ•¿ƒË@yržý- ‡à]O+¤g¯¥´pY~œïú£.y߯-\–'©Lƒ,?ÁM.ññ2Ìå¯\l&Ùsù)ÎcÜG“Ë÷¥¢¥ë¢üâH”ÿ¼Óoƒ»1}wcúîÆôæò[$¹ü \åò Ô÷Ô¦Àà H¤/?ù£X»Ü^ $··ï.½þÅõʽ£fËÂåFXn/ôî¿ ©À4ü2¤Ë—ú¾{¾Fßk™À¥¾‡ s{‹¥öht£ïîÉæhõݹV\I¶ Ïúý"5À«:}ùK¼ä!\{ËnÒGùq#ùRçÇôÝé»ÓwœËO> Þ¯.Nñ—Æú¾˜êFà"\+{ݸÉå§™^Á­¾Çš°¾Ge.H.?–ÉáÜžO™ÀeFY•þ(îØâÜòpÔ`.}@à²üx¿ÇÒêû~•D¯R­åå«Rß“òmp_þ™xs{ëù“ʽœB$piisñPßcuèÝõþ¾(¼÷hßv^ü Æô=Œé{Ów’˯®á\~Õ.1îË‹dgX«³/.ö÷¸ï2&—w^=Sߨ¾‡1}ǹü%Šx_¸Ô÷ýšk£ï¥9¯J­Ö÷©¡É}OJB«ïq§$ìàbå×NY¨ï!V6zU Œ÷w?$uv¥¡ý=­ÌçnA‹YhÆ|ÄÙ3³ 3· N¬ÂÌ­‚‚«0s«Àûò ëË— Ìúò{ŠûòÓ‘´pá„8Á¾üè&àÝÙ_«äì¯U'QþÌ£|Ö—/£ü™Gù4—¯’ñ4Ê'¹|åÏ<Ê'¹|åÏ<ʇ¹ü­¥Â¾½¯.sù¡Á¾üŽg —¹ü0ÁÜ^N~÷÷¢üÙé»Ów7¦ï$—C„gýÛ‡¶qšÎå{%´$—ï‡8ži) Éw¹½HnOFù,—/£ü™Gù,—/£ü™Gù$—¯¢ü™Gù¬/_Fù3òY_¾ŒògåÓ\¾Ïçò}Î.sù%˜Û«GžÃÂe.¿Dsù^YÚ±(öcúîÇôÝé;Éå·‰ôå7½Ë\~­S†¹½ÒB pÉà ìÓõ‹Ü ¸ÕwáõÏÜëg¹|éõÏÜëg¹ü J¨×Ïrù2ÊŸy”Ïúòe”?ó(ŸõåË(æQ>Ìåoéôœàþ¾> p¡ïÞ{¬ïSS» Îå‡Zƒ¹½œKCð·¢ü9Œé{Ó÷0¦ï$—ŸJ¼;éà³¶pÕ`Ô÷ÅÓgp™ËWÞ…L¿¸äüM}cúÆôçòU”?ó(ŸõåË(æQ>ëË—QþÌ£|šË¯Ñã\~žÀe.?¦€sù »…Ë\~ˆçòãü­(~åÿãç_ÏÔàö'² Ûl,Y…í¶ ެÂö[·¹üE„+Ìå¯ü¸ u1ùqn;ïseðýó:—½ ð,cBs{>´¼Ê’<‡õ}1ÁÁ•¾×â{}wÓZ›{Ðö¬ð0¦ïaLߨ¾ã\~‰ÎÃý}{@à"ýæØ/Î¥Fà"ýRbÂwf… €¿©ïaLߨ¾²¿{ñþî=ƒK}w®~ ;³Doº…K}ßo™7ú>%ÄÆè»Ÿ&Ø—¿= ð¬ZŸq­žsžÁ«j}Æ}ùµa¸Ô÷àW«‚ô½&½¿ãŠýõšwáÍGœ=3«0s« àÄ*ÌÜ*(8± 3· 4—_dc}Ò\X…ªï„UXoZ'ð*qð¬?—£WB»¾|I_¾cpåÏ<Êg}ù2ÊŸy”Osù"ÊŸy”Orù*ÊŸy”Ïúòe”?ó(÷廵Øõå?øq84…)ã>ÝÖƒ‹`1–9xkK í{QþìÆôÝé»ÓwœËÏ>‡Îú·.*ö×ö1¤ï‹9 •Àû^.öé¦åfÂûò}&µ;>8‰ògå³\¾Œògå3Ž}åÏ<Êg}ù2ÊŸy”Ïúòe”?ó(Ÿäò—˜ÐCŽíË`qçcÐgýK°˜«`ëû,Âw/ÊŸý˜¾û1}÷cúŽsù+S{Fú¾= pY„ÑÜßc…ÁeFK„w'úàý:è»úî$—/½þ™{ý,—/½þ™{ý0—o¢ü™Gù¬/ß«[Ái”Ïúòe”?ó(Ÿôå—ÐæÝ Í1¸ ]Á¼;‹¾—Á¢Ï°v'‡”‘Ô½åÏaLߨ¾‡1}ǹüèóõ}{@àŠ}ÏÁý=N»®…Ë"ŒR0ïN>xw$¼×wÏôݸÔ÷©V¨ïK8Âàêάæ?àY9 ¸ÝßE”?ó(ŸõåË(æQ>ëË—QþÌ£|’ËϵL‡c{@àÂ-¬“wП_¯N&p¡ï>á;5R›*ý­(~åÿ÷ó35¸ý‰¬Âö[ GVa{€­‚…#«°=ÀVAÀ»¾|_=îË÷ÕxV©œŠÎþ|9x‘,\&iöZ}öç£OnÏþ¦Lr{SÎ.ŠdÖ&1tö·ì&ÁE‘LÞ¯Â3÷k.Á ‚w}ùݯ¹L.&JÆ÷k†\L>Ä„ï× >#¸¹_s1Û°g{@àròÙgtö7…ƒÂ×ÂåäCýÙßöd¯nRpå¸o°¢o½•C¾»Ów7¦ïnLßq.ßµ˜`no{@à²ÉÅçûö\Í .9àÊs{n‰ã"€ÛûtSv°oo}@àòrª”°¾§—Îè{rìËßêÎÜöé†ìpŸn€“·úžJÄús&p©2Šá_ê»›Ðä¾ûa.{@àòÚO_`noòÇ%E.ƒÉYÿn)kC*öý´Qú¾¨ú$¼€îÇôÝé»ÓwœËwI°m*}-u.Ï’sÀwj8m¨q.婃}ù.¤êü§nuM“ûû×——Sµ 9·×&åDàòrª”‰¾¼Ó÷艾GOàRß‘FQš\êû0}÷-¢•·ú¦Šõ=L•ÀÅä½Ç¹½­t›Àµ¾CÞµ­¾'‡ôÝ­wóxÓ÷0¦ïaLßq.Q¬ïÔØ¸n±)8·> ð¬T&à=.J¡¥{\¬2MERhéÌ'5næÇö8©q3×8š7sC{ÜsƒïKK¾¸\yŸÀn'žÀåÊ»„Ï*ÝÔ‚¿¥qó®qó]ûóóŒã¶ßÕÐÃãgñ›);´Çe¿avpYs’¿ðýø]u.¸„àÛ¯’þÕñà ò[‚ËÂàÇ•kƒ¨€Ë– ]eV8,ئŸ2êkÙ¸He¦$/˜)þ<=èàê˜÷«ú²[ºýf ï–îÙõd–n±<‹ÜòôiõÒm2»¿û¯1©û5&u¿.HÝß¿þ­–.—Ú÷_%ý«ãÁ±t9ïæ¢ƒK·›t<KBBK×ûrìäèCBûkLh]Z½ò«6¸YùíWýʯÿyïééàEU8D°òkp“gå¿ÿ=$ó~AæëZV@àÇ&µèklèĬx—ü_ß~×L=_µ…Ûƒ¤¸¤WÖœl$½ú~Çj—ôêÏð{ éÕ]ð¾âeB͇+!ð!•1ð—*³>…Á…±JSõοm—x÷á\ŽøÃ¹ \Þ3ú<`7ÎDÊ\6_6чs¯z÷w>Ü?þ=¤qžõfÒ·£í.»š·ÂÀç?F>R²Rsîáýwÿª§í¿ûó𡃫ûçž®‘üîJõˆ&oÏm&b*[ò|Hã <ë½lR¿ ¾>W…ê¿­<Шñôñ€ÀWJö 1å‘Ü(=¼·´_»LoiC%pIþ$¶ï>\,héÞùp¿ÉüïŸC2ÀÍÒmM hé¶./Œ|6$é¥Û¨Ä»‰ÍïŸCbsÀûwwìÝ]&ð¬~åÉ»‡#ø/¬Ÿ4 €«c¾¸8džàÕ1_ÅÈ=ÜFú m\òd·Ú>àX9e—TÓnBÜ—Ò-Tð_jއWi﹚ÒNo`áªñ´ôE¡®)°\Š!}Ö«íË0ÝW÷Xl]¬;+†…Ë0}ŠGþ]ê‚ÿ–ч3—¿í,Ýë¯Ü˜b¹1Årwk 4ÅuIn8ë¶_!ÅJSÞÛÑ-\ÜDÑ\ÊH±¢`(—pCEÙvé0ltMK‡ƒŠ5µR¬©M©¸h®©‚®ÙÙϤà¿ômÖë¯>é\ò¾xUÛ˜t.Ö ½»Q¬£ÝÙ(Öú€Àý}ÌP±VÊ{Wô÷!ÅZÕ*7?+¯Å/S“+äÇË)–¿§XÑïE–nkûR¬èJÌ.kÚ¯öÑŠj(À-çc­õ]Á¾> pI]SV¬ºç5;¸T¬©Âkcˆð_fWÝÉI¬b-‡À%IEm+ÖÁ£)áF±ÖŠ5¨Xë—6©k½î‚.wÕ¶7 Å „+Å ¹6ù}˜b…1Å ÷+dc7еý )VH¥w©ÄÜ +üÞ­ ào*VS¬p[±"½S¬ˆw¬xÜäbáR±ò„¯=ˆ!£Ñ jsSAе= p©X;Ó•Q¬Z¢'p¹t^”©(ÅÊN^*–wÁ5\¦²ø¡Â&ÍGø33›¹Æ)8Ѹ™kœ‚ÓÇ\QFOó=ÍJlb„ g1z»)¸ØÊâÌ}D'>ẫ¯ÙÃK_3¾œ_3¾f˧w¬íYÇ&I„b9¿»V,ßrt‚¯ùRð5‡1Å cŠî)ÖâÞJ~P±¶_!År-GàÂçZä“Ù—ƒvTÂßT¬0¦Xá¶bE4z§XïX:øRp|Í<øšV¬igæ6Š5¹)¸°›­"2¯ÕSi“#p¡X%´t!øš‚¯€èßþD·=ÀgáHã¶Xã,üRæë8pð.óU¼T¦V?5?¾OMêJ›ã“¬´ hôŸ6Åä=Ê|m\D9Þ•Úw<*_¼ÉbüÉã㎽µDÁíq‡Ÿ:îXþÙ݉°ð*MZ…Ç®î|e ®;|Ú¯ÍÕÇÛsŒ5tÜáãÁRláré| 0ørß"zw|…oQ¾¢S,7¦XîŽb}›²‹¥õpsޏý )Öbgs$p!Á©MðöÕ´ö`ò}J¹’R®…ÀÅv[“ 0¥\ö:Ç.·ÛI’áI/`ï†Wp}ÝÒö+¤X®Ö^Õä#T¬’"úpæ€~ñ!pæ«îå\.]–„¯rZ{ƒi—st)ÖªV±"ø¡X‹REçš\`?¦X~L±ü=ÅŠ­"¸Í|µÚ2Ì|µ Ì.Ê|=Ž—L)§8¥³ôn';0ôn';èàB:rJX±ò=Yx“õ .Á”²«½»I)¯¿‚еøž .•?á{̃¶‚ÛZ:‘Z WÞÖjäw,—œÚ/=©Õ•(])VбI«Æ+Œ)V¸©X~'dð.¥\PJy{"‹S[÷,víRÊÍ5ïv¬ÉŽ•"«Jž˜¡bÅR\Uò¸w¬âSp³c­¿‚ŠU¦ê \*ÿ~ωQ¬T&7ŠR„®àö€ÀÅCt0¥ì‘ƒ°p1G|ÅŠ¥}…«.Q3¾b”È|„?3Ó¸™kœ‚›¹Æ)ø¥ÌWr®‡w™¯ä:îHâÎ —ÕQªHUGMhôŸ6Åä=Ê|™à f¾Lð5óà f¾Lð5óà‹d¾Tð5óà f¾Lð5óà f¾Öðvª¹?îøz@à"¶žÔíy¢´¨f¾¶æ¾KÁ×|)øšÝ˜b¹1ÅrwkMNÌ×ö+¤X!G \¶š§SÊ!Dyª3_&øšyðE2_*øšyðE2_*øšyð3_&øšyðE2_*øšyðE2_)„\Ñ9âö€À…Ýô5ÀsÄ´ìRÀ…ݬ)Ç Á×|)øšý˜bù1Åò÷Ë—$\–ùZ3_âA —[CÆ·OúäÔ~I2_2øšyðE2_*øšyðE2_*øšyð…3_:øšyðE2_*øšyðE2_Kpì©Õð‰ÀU­Fp¤V#yŠ÷Œçið5_ ¾æ0¦XaL±ÂMÅò±‚Éw)åX±byŸË”rB)åÍŠ`òýŽ•"Ù±R$p|Í<ø"™/|Í<ø‚™/|Í<ø"™/|Í<ø"™¯%v *Öú€À‹ì'÷¦”›pæ+”äË…àk¾6Zò|ûiÜökœ…#Û`³ðk™¯½ZÀûÌWÀ™/$ó-\¸ê­˜ù*){4zwÜÑ*9îØSÕ.±óÕ"É|•FàU&¾Bìë‘ú“ïèk ô5¸ôsÆŠ•]*.÷Œ€èW™÷û…ÇþËô¥©ó}©XΗ…&5âÖ”z\¯.áF±\©0óµ= ð"} 3_~™}$ð&ÍžÇ>bq±"ø¡Xq£DPÒáÇË)–¿§Xɇz¸m¦\›)—Т¸P¬%Ê™¯rÔÎI¸U¬XV¬Xé NÐû” ¼É£lp3e-hél3e-°VcMÆ3xUúã b•#€›ú²¿»9 _¸ôc“ð€>·\ˆnBô«fyàjÇŠßvÂÌíWaL±Â˜b…{Š«ö¦H櫺†›)Kq™ÀÅ©F̾À+j³Æ+Œ)V¸£X[GSD£›kýV,—W©?.aÅJ‚ÅŠ‘4SÆP«ƒË¥7êÌW…Kg+¸€ KPŽN€;Vú¢.샯’0*óþÌLãf®q N4næ§à×z¾Jéá}ÏWÁ=_‹I .N’:ß[Yˆ½;îh•wHsÁz¾dð5óà‹õ|ÉàkæÁÍ|‰àkæÁÉ|©àkæÁéù*kw‘œ°pÁ§Rœ,Àát¬!¸ˆ­§ý’—Óàk¾|ÍnL±Ü˜b¹;еvéj°ÌW ž#.Š!] šùò²³¥Éé¡âÌ—¾f|±Ì— ¾f|±Ì— ¾f|‘Ì— ¾f|±ž/|Í<øb™¯eË™¯õËŠ†2__eq.+ª«‚¯ùRð5û1ÅòcŠåï)–oÚì’ÌW›HÏW­S&pÙLÙBÀÍ”±T·Š%|Ä™ûˆ,ó%}Ä™ûˆ,ó%}Ä™_,ó%ƒ¯™_¬çK_3¾Xæ+äàýú€À…C¼ƒ=_qÙí »ÙŠ‚¯ùRð5‡1Å cŠn*V* LÞ*Öú«À™¿>J.ûН8ó¥÷Ë0¦XaL±ÂÅê‚/’ùRÁ×̃/Öó%ƒ¯™_¬ç«•”q—rïn»”nÿ_´='—]Ê{ùÙið5_Ûe…øö'Ò¸íÖ8 G·=ÀgáW2_Î€ÛÌ×ú+pÜá|N»M²ðzüÊgÈv¸ÞeßÐè]Ï—‹¤çËE—Ìbâ®Cu sÜuØÁ…U8î:üÕÕÿÕ#ÃsD·¸i…À¥UȤç+4FW4ákýYçˆ_¼Èêµ }ÃbF* ›J.0øŠß|Fp|µoM~7¦XnL±ÜÅú6µ¶_ó%áæqû:Gl5×BàÇgh)7XA¿8Îx—Rö™¤”}&p!ÁËNá9¢Ÿƒ ^d³ºPлÛÖ”PpkJÈÁ¸<°ó·¦,a«p“ùZTÜL¹> pÄiD}9Š8,\†n?S9kUªýP¬E©ÒòòW~L±ü˜bù{ŠUcˆ`òF±¶_ÁZ¦Hà¢Ky Ý"¬ÕÈ%ïùyQ,×\H°+л£ÙÂ%ETõ ¶¦„i¯“pÓš¦ ·¦,²ÍàRùcÅ­)®·]ʪØ"ë.+ÅÐp—òA'aáB±êùZ«ß |W,7m^6ùŠaL±Â˜b…{ŠU¢SÂ…3_Û¯b•ué\œÚ:‡SʹĄào*VS¬pG±6¡‡p»cy±b9W \º«®ÅrÁbyqª¡Ëg¸òF±|ô¸ÊåÇâÌ—_‹|€bïZ£X5¥-ÿÒ_Ë6îÅ»ÏGø33›¹Æ)8Ѹ™kœ‚_Ê|¹ÙÓÌW© #.²ì [/Ç›2‚¥ë{¾\$=_2øb=_ú¢y|±ž/|Í<ø¢™/|Í<øb=_2øšyðEz¾VBØóµ= ð#¶žÊTÐq‡[YÙØè"¨‡Âž_ó¥àkvcŠåÆËÝQ¬õ¦¹ }x’ùÚ~…+¯uà.Ëk¨è€>åâÑè]JÙg’Rö™ÀIð5óà‹e¾dð5óà‹±ÊàkæÁëù’Á×̃/˜ùZÝó’n¦,™ÁEÅ}òrZ5:é“ÌWi”öÁ×|)øšý˜bù1Åò÷k¥Üp£XÛ¯`­Fk͸ȓÔXp—ò²vÞóó6¢XÒGd™/é#ÎÜGd™/é#Î<ø‚™/|Í<øb=_2øšyðE2_KtÛ"¬ÕX¸pHò„[SJ(ò˜˜d¾r«Õ_¾æKÁׯ+Œ)V¸§XË^=¸Q¬íW óµÝîP \Þá (¢Tj¤–â¼W,Ï˸T¬©V¨XÓÁ7háŠøºy¼c©à ³êàkæÁÌ|™àkæÁÉ|•à 6ŠåŽR Š5eTõ¸/*¸P¬Å» Á×<|ý÷óóûiÜökœ…#Û`³ðK=_~ïõð®çËWŽ;|i®¸<Î $eó)g4º=î˜29 Ÿr&p‘ÔÍû¥8ær‡ƒ‹¤nVuéë Ñ»w=__î |wSèrÄ—;„#÷$áær‡Ðð9âö€Àå[—;,ÁƒË9fRvøá¾¡w·7ëùoòݘb¹1ÅrwkcJI`òæqûR¬ÅÊï•.íqÍðÖ”µA¢¸½5%e+è×.©§SŠ•snáB:’›0)ÛZ¤à¶5%d|QH%¸”`•w“B{Ð}H¸Q,ß¾5e}@àEþ*CR¶5sÆàb޾öe?yôîB±Z;¥lú1ÅòcŠåo*V:˜lÜ*–¬t7tx!¸T¬ä`—²‹¡87è¥ýRs^Ú¯Íîà’zºeHʶvÜ$—ÔÓŠM)VDK×)VôX±´Z“ž¯°SÜZÅ:üc ·Š•Q¬åKÅŠ ßóå#…KÅòðr”U±úîZ±Z)VS¬0¦Xá¦b…Ü*VPÌÕŠor.CóÖT,XºnÇŠÓˆ®\*VµS<îV±p©X~ŠD±|ðN±·qÏv·ç6.Whç]Þ÷8 —•åEÎRžŽ`DÂ;¾xâÏÕïüùˆ?ÿ¼t¨ƒ+ß&zhç«{6«*¸±ó믠_d6¸ …JiÐΗ# Tp#ó{¹‚‘y7å¾ýu5†-bòÌŸ¯-dèϯ\ø6µ~‰q ™?nèP'ï›ÜEWÇð_A;´WtðŠ,íOkC ½óç‹'þ¼”yîχDüy)óÜŸÙy·xÄÀµß~ÏmÖ&gŸ7ÄV‘_V®¡É¿'óó.óóm™ßk;;?euqÖ¼H©ËðÜfm¸).O¶:·yØàà½OÄ·@àRæSÄÎï~„;?íÄUÆÎ‹ã> /òWŸÛL9—g•Ù÷vþyŒ àŠüìñ+hç×<;Ë9–ŒÏmçMÞÊüT ömö{løö×Uß&ˆÉ3>NžÛl\e0äµq*i‘#« Fð|Þ%Wܜϯ¿Âv>É¥£v>¦‚íüΆ§àÆÎK™Ÿ¹Ì3;/e~æ2OÏç…Ì›0#£ÉÞ`ç¿6¿Jà:æ(П?.­Óð·d~Þe~¾+ó~þ€þüö»ú<ìóñ›);dç³oO•éà2›¿x<þõãwUÉé‚o¿ÊúWǃƒd 2 ƒd!kÛ†x é_Â$à0·M?õnáó 'b  ãGO¿>zÖupuäõÕqÜ-Ý~>/áÝÒ=ÏçÍÒ­Q¨'pQmZžŽ™^ºMf÷wÿ5&u¿Æ¤îשûû׿ÕÒåR{øö«¬u<8–.gç=KçüóvÑíXºZº.ü$ürô!¡ý5&´¿.­^ùUܬüö«~å×ÿ<ÕJàUe<#Xù…˜ü;+ÿýï!™7ð 2_×d${Ñ¢¯_E|ÿúþó»îõ޹‡o¿ÊúWÇÑëw†ç.z½— VÀE¯·ßƒP5ù.…í^ùÒ’y)óëƒP\X›ô,]èVÞåØÃ»•w_=2få]ö!¸lôxRœ™•w±y0ú[+ÿɼmÎ;™Zp·¼Ðêë£ 9̪9÷ðþó~Uyõ_ôwpE†_À}ôßG4y{z0cµ_-´Â‡TÆÀ‹Þ À6ñ› CQpEbõÛÊãzd¾øñáJÉ>™í˜¹ôðÞ"~ÙùÞ†Jà’Ö¯TòábAK÷·ûýsHæ ü®Ìp³t[ñ)ZºíËK*¦ˆ–nkï>$6~Wlxÿ»Ë^Ô¯fÐ¥µ=(°KËÂ+èÒÚ4Ø¥%àÝYA†= py'gŠð>’âýÞ¸-á=‰»ûè¯ðy< pÉ#Øjû€¼í9¡wÿeo’tgùu\êej±'©xìQn.äq9ô9©ç—÷]z—?Еé{V÷mp7&´nLhÚõ¾Ë½?ÎÞrï÷»>,\ÞrŸäè‹Í%4º!6j1ôyØçW·ëF‡„vjSªn™Uöòû_úÖ«õË–yïËbVYWÀÍ¥Ù‹Z÷!ÖóKJ—=ZwÐÍ*¸ÚUdA×l^KŽû9W¸Z?&´ mô.ãäý^åÕÁå]’%Bš®¸v¸% ªµ~ ËÒÖ.ûÔKÃB[“²6ZÚ„YÚíK¡"¼ºiyu¸òFh§½õÀíú€À«â¸pPh'ïÑä­Ð†É!¡ y/¿ßàaLhØÐ(´!»-íö€ÀÅ­q©Ô€„6ÄÜ*€¿)´aLhÚX‰ÐÆJà²Õ»$…6On¨ªZÎ íö€Àå.“rEB;µãþG7B›}Bë]p½ØôYú¦¤c>\×™‰öÌE[Á‰hÏ\´çÃuÕG 1–x©l”VAÁ…=Ž>ÁÛš£?˜;$¼gÐî Õ{ÏWÁ‰ç;sÏw>\×™y¾3÷|œx¾3÷|çÃuU·„ KÅ‹~@àòèp÷€~ÿÔ ®ü{žïìÆ„Ö ­B»rSç Ü„üõ€ÀEƲùàýâ\D7¬2Òó¹ç«àÄó¹ç;;$´Úó¹ç«àÄó¹ç;; ´_×|÷Bûõ€À…¹ð%÷åT›_‹Cð·<ßÙ ­Z…Ö—V Ð®\íz ZWeÌ1{diµ1s'BÁ‰1s'böÐÒ*Ïw枯‚Ïwæžïì‰Ð†D„6$OàÂ}[/fABÂ^6«áoy¾sÚ0&´ íâædhi·.6è äZdV†ksÚ0&´ m¬Dhc%pâùÎÜótÂâXäl\ÞTí',´+ï.‚¿åùί=ß­ÿ1Èö'íím G¢½=À¢-àÝ™o•´ÈE? pqiVõ¼Ñ³¦ƒUY»;ܽGg¾Û¾§w¥§Ÿx¥KÁµçë¾E|;{øå»»1¡ucB‹Ï|óâ'5t±= ðcéÓÁýÎÛ­~“ð.QQ ITì×¶[¸Ø j=–[UÍ^þ¢àæ‚ææ+¾ ¹§®.÷¢©Á“ˆuZÀÍñÙzg=<>[¸½à“×\FN í*²±·Ç‹ÀFçš|w?&´~LhÉ™ï¥Cùí‹ ¡…²kÛ#%óäÌ×ímŠæøÌímŠ\f˜RÂB›×UÂíåÇUfŠ~@àReö#´%ôîFhs) íú€Àå»gYJ&ßÝMhé¬ÐV+^„6ÅØ¤Æ…1¡ cBH¢¢°DEQúŽÎ|·Ÿ…n¯ÝQðÎÒÊ›vŠ~@à²2øYÒm…6–ŠàÆÒŸ°¥]¸½L[Úœ2‚¡û%«FhãqG«…ËÛ‹}PhÃÿ_Ú¿%InëÐÂðûñÏAp†x'Ýår¹öîK–k×9óŸÈ'êBä‚ÄÌ´_*Z@„@ ¼`­È‚ÖA›œFAçÕD6mæ{\½þ¶ò”Øœ¤ÐžäÐfêBhOrh‹{¾N)¼çë”ÔéÁ±‹p'¦rdž©7ÚZ£=ß*ó…{¾Uæ;É™¯°çË2ßIÎ|ážo•ùNræ ÷|¢Þ1‚ˆõ NÖ^ -ê¢q) õ‡2ßI=´ê¹ Å{¾ÆŒÝ¿<ÔÉzØ[èàóAêÍAE ÂAÍ|…=_–ùNræ ÷|«Ìw’3_aÏ—e¾“œùÂ=ß[Æp'by ¨“éÂG•8`ëe¾“~.hõsA+ìù‡qñ—‚:¥Ñ4* ÕÞ& ^mŸÑÌw’3_aÏ—e¾“œùâ=_žùNræ+ìù²Ìw’3_¸ç›Ñ v}ºv°a×ê$hµ‹8hÇ_Üc™ïdž Zó\Ðá ÂbÌùå N*´*›¬Œ4Ó:+Ì´Î êBæ;É™/Üó­2ßIÎ|…=_–ùNræ+ìùÚ<©¡ ]êd¡l’pº¦ D¦þPæ;]g¾ ,ßÚÈò' íåíZ…öò‡6Qo÷|´ç[vÅku’iíážoH! Ö›E]ŠÂ¢®ÜªÕégÜ.êRAaêÍEž„‹<%y¬Õé±µ1Ëc2%ï¦êÕžo4Š2ð‚:=²\Ôép¤íL½Î|ƒ2ßCtQWÏ­z.hÅ=ßd…=ßdu¶ç`к4¤ÞlŸE#lŸE#¨³-$ƒÖ+€ú¯ê–±Vp'by ¨Ó UmŒy¾ Zí}‚A›êôKh-¼ç;/a½Fê|> d¾v)ßba£Ÿ Zý\Ðâ=_§ ª¨Øê$ÿšsD´£v ¨×Ak£ÃAk£ÔéRÞ>Óõ½¾œƒÁ—Óc0‚:=¶.à¯uи&¦^mŸE«ðAE~ ¨Ó¼»l\VÛgÁGÔÙL;G­F\i9nYëæ¹ 5Ï­°ç˺ÚóüïùÚ‡ô Þ€úƒAkž Z¼ç;'7Ï´ù Nƒ¶€|WA’BêUÐBJý Nû…Ó5{@3õj¦5!¡™Ö¹± ›6óu)9i:R×I íIm¦.„ö$‡¶|Ï7H÷|CÔihkïùrvªÞ,êRut`I÷|iæ;É™¯¸çË6mÅÌWØóe™ï$g¾Â=ßym`-ZÔ-uR[“õhQ¼sPý¡ÌwRÏ­z.h…=_k,܉XêôâÞˆØï–ÛQì½+iû,aûŒf¾Òž/Í|'9óö|Yæ;É™¯tÏ—f¾“œùJ{¾Ú¸±<Ôéö™¢84}s¶þPæ;éç‚V?´Âžo…{¾‰Ï6žoæÁ—Ó“1@½Z’DLr!íùÒ$b’“iÏ—f¾“œùJ÷|iæ;É™¯°çk­woŸyuzdoµyÿ,Bõ‡2ßÉ<´æ¹ ö|]p¸¢"?Ôi1JÙ6­‚vNúƒAkž Z¼çË2ßIÎ|¥{¾4óäÌWÚóÉ Ú‘í1H{¾ù:$¼ç› ÜW(ó®3ߢmdù…öò‡v­ŽB{y€C›¨×{¾J‡÷|ÕQX«@²Ú;Êä3aWDêÍ=_e…{¾åìµV'sRò‡÷|Õ‘Qõ_Í5"ឯ*»0µ:=LQß>³¸ï|Q—qüáöÙò@P§é[!¶ƒ1ÑBužùÚ›ö0óM·D]§ž Zõ\Ðâ=ß|§îù.õÃui^C@’ä|ÉA¨zsP¡½pP¡½ Nñ l°p'B°ïõ•I„+“Çý¯Z´n¼Á·ÏŒV ¨W€$:%pûl{ ¨ÓëI €ä/y](nLýڰѤ6óÖÍÿÓ§Ÿ Zý\Ðâ=ß8¯ÊàöÙò@PôÓ¯LÆ9o¶@½EÑIBв÷.ìùªñöÙœE Ö«+“fñ•ISø@u:d^2GDÕ늊®¨,hµPQátŠSgAƒnƒV íA¢êæ¹ 5Ï-Þó Vi8Ó.u²=3Œ ¶CPŠ}ãÌsAkž Z#Ì´Z[<ÓjQáØ¨8 è§Ù.ðÞë 5Rñ°õ*hgÏã™6=R§Ak´6É£ ŽÏ´8ó;d:ŸŽÔu’B{’C›© ¡=É¡-îùzQ7ð‚:ÝyT ohî)ßóUV¸ç«$u!óäÌWÜó%™ï$g¾Âž/Ë|'9óÅ{¾J‚;B–‚:!¯Ð°f‡4Òùxz.óÔsA«ž Z¼çëçq­ÐNÄò@P'·T# ÚyP›Ô›ƒ í…ƒ íu!óäÌWÂv ™ï$g¾Ò=_šùNr拱æÅJ ^NÏõH¥PÅñR* _Üc™ï¤Ÿ Zý\Ðâ=ߌOàQÐ.uZá–œi3òRoQt’´ì½ {¾4‰˜ä$îùV™ï$g¾Ò=_ÍàfÅÌWØó£ÇeòËA|ãR¹¤\®;F¤þPæ;™ç‚Ö<´xÏ×j? ]ê¬ÂMÁ™ÖŽG-1UoƒVKA+©Ó c„A;§'H½žiIæ;É™¯tÏ—f¾“œù {¾Á&çà‘p~ ¨S¸YOׂJ. õ‡2ßé:ó]èúÖF–?Qh/ph×ê(´—8´‰zsÏWGïùêr‰©V§uIE´¨Ó¡ð(3õzQ7zaûlô^P' Þ¸}–g4¤ÞÜó5`_É€juÒº öo‘zØ7g®pÏwy ¨SÐážïhPZ¦Î3ßAÝà\†4¡Æ«ç‚V=´xÏW%ëàöÙò@P§—dÊIPuûLEÔk”Iç¼}–ê¢É9´®°@1õúÊd¡i¬¯LØz´.X´Ö£Ö« ÍÔ(0hóA¶®¼29¥ :?ƒÓ³Þñ:’ù8«ëç‚V?´xÏW¹4 Zr1¬V§ëlo0 ɼG­W Ônçe©A¨Ý(ªÓÙ&yX&Ÿ/|: Þ­ÕBÐZ-¨Ó°);uÐêr¿ˆªWA«ƒÆA« o£Î¨g4Ü>µW©×Aë Ú91bAkž Zó\Ðâ=_eœ€$ËA®³í¨Pz tJ¨×3­õ$?ÔiÐ:|º6Ú~’ª7A«…ËéóAm¹ÉY­P¯ƒÖ˜ˆƒÖ˜(¨G*%Ì´¹Ö©WA«ÀÆØ´:™6hyæ»–¸iò~¦#u¤ÐžäÐfêBhOrh‹{¾Ê ØŠ~H…=_å’Å›ÊY‡Z¯u$óäÌW¸çË2ßIÎ|å{¾Fì£Á%Ýó¥™ï$g¾ÛaÝf ʤ2ZP§“ÊèaÅñ²ª?”ùNê¹ UÏ-ÞóÍGeÛay ¨Ó½à•I¥”}oP&Iæ;É™¯„çK3ßIÎ|E<_’ùNræ+Ýó¥™ï$g¾Â=ß1A¨—‚:»°©áNÄ·Hý¡ÌwÒÏ­~.hñžïÜwŒí°<Ô™ëÆ€‚vvE­W Ô4óäÌWÂó¥™ï$g¾â=_’ùNræ+Ýó¥™ï$g¾Âžo¦E‚vtZPô^fÀ÷|Ç©?”ùNæ¹ 5Ï-Þóȱ–‚:uݨ`Ðüí¢ÙŸˆçk=$ᙯ„çK3ßIÎ|¥=_šùNræ+Ýó¥™ï$g¾Âžïè†û_ê45òÏ´Þzdüc™ït™ùþ.Ì,|Y•w†ƒQ-8éþ@PDJnŸ…Úïg¯L.«þXfP¨¾=Ô#Ò)4˪?Ö÷€ú¯ªõ œ-«¶‚zdRíý¯õß¡çɲj}=à¦íþ@PT °¨-Æý¶Wÿà=Œ³dcŒí‹[þØ·ÅuííòQYu¨O#`­^Ø‹Ñwx{ ¨“¾ÇèÚ³×勨“)mޱ­lÜê4êÆš)m¥ÚŒÈx:¥UQ7ÉQÇÔ…¨›ä¨›FRHú¬÷`[^ê¤ïÁ¤ö–Ëò Pqõ‡¢n*Q7Ýu‘´™ë´2à‚öþ@P'ž×J4×ÍÉÅ~LÂÔ¿W$¸£C¥âëAxÞYëÚ-¤?(‡S'sÝ´Þµ×÷‚:y¯œëŒQëÕ\猆üæËAö] ç:Wιzu*Qg÷CóC}ùë:êÖ°ÛyÈ40>×å/¡Á5sÝþ@P'_Xím@s].f±@ý{5Û¸¬9¶‚:õü8&8×Ùè"PÿUÍ´$ê&9êÐ\WGÝ$G4×%œëòA´žl4p®K¥¢•«?uS‰ºéî¨+Hm^7§Fæuù N¢Î(p0¹m‰:ªÞÌu) sÝ~-­Q§žc}q#j½šëT!¨æºü@PTÊZ8×)[¯óº¨Îë¢ ‚:Íë‚O8¯+7¬¹zuàJÞ°šÔêË__Øq¯æý]ª`›¹nôzTh®[ê¤ï^ìµfq¿ÌÔë¹.&…çºÂÒ¨³¬R+8×Å‚ÚÀÔ«¹ŽFÝ$G4×Ѩ›ä¨“溂†s]~ ¨Ó¾—Úµj®‹V#×=uS‰ºéî¨+( ¯ Úã¼.”¬²VDÊV˜%¯‹ûÕ,¦^¯a ;n½†=RâZ¾wï œëÔ<€z“×-äuå½×êì kœ×•ÄŒªWs]´”9ð‚::"œëb©ãáêUÔYïÌgr¹F}ù«w5‘ˆç¥¼.&ãa^—êä ƒ×Í_‰ÔٶܨRc} ¨³ÙTjìÓPoòº …¼ŽFœ×'äu4ꄹ.Y4×-uâyë•Gsݼ† è½?uS‰ºéî¨+7/š¹nôˆâb ¨G®agÓËŽUoç:'ÍuNPgsæ:WàT½šëÆò‘ªæºÑ‹ê‘J¼† ÔS¯æºùéá\—ê´õèœë[®^E]Ö®¿°LõP_þêýÂò⤼Ύ®a—‚:ï):˜×ͳêÕ~r ï×å‚::7<×YúÞ¥¹ŽFÝ$G4×Ѩ›ä¨“òºÙFœ×å‚:í»5æus¦Œ,ê¦uÓ½Q÷×ËÌë¹hqÚö@PDfô Íu^' Zÿñö'»¢Üó˃ÀêG=àœS¢~Ôæ7BÔáùb¦óèNÐò@P'{•óŠQgäGûa/Uoú¾C;6}/¸HúÑ÷q ÛU~Ö÷ïx￞{￞{ï‡úß¿>Xßý–”. ¨}÷^mØ3˃£ïJ(}f|³’2ÂJÊh}¨?6¿ž ›C½rÝR‹\·<Ô#‘Ù냸ëV8 `ü#®{ýýTÔUêQóÎ}«þãõû+¯~±äAàuRýb÷ƒ•åA¢uù ¨·ç2Êa×…cÀ¾þ~*ê*õ˨ËLêë”·ØuÊ[Ab>jã‘ëÔQ2ÏŒÄuÿ|<u•zäSZ{­y9€?&+¢Î€sò¨6€kp{ ¨­çJ À5¸î'ùV½}qÛñ}ûâöÅH£Î äö/,}qËíŽd‘ñõ:n¦‹Âï”ÕŸŠùJ=ò Ì´RJ¦Î.®þ1c ¨FÜêÇ‹ Þ\7½B«ÞNVÛLÛNV& ê&"DáÅÙ€\÷È‹ûó婘ÿó婘?Ô+×-·ë–‚:«±Èuù"}*lþ|y*lõ¶ïJê»ò‚zdRZè»9rÚ/xÛgÝßhOÛAìíi»÷Ѫ×õ8nËÿ:£ ·h£Îj,ÑjbyíÊõzÀŽ@G3`Ç}ó¡Qg%Z°£'ž‡7^*ÏO²ç…4óü${~zÎóÓsžŸžóüôŒç_Ÿ‹ù×çbþõ$ê6hà¶ïÖê¬DSì{ôÀøfïB çï4)}.h_Ÿ Úד°érÝôœë¦g\÷]áÓÿu{ ô*·~ôý»ÂG]êÇÒ³]„n—µ¿}«ÿ=ß©-êÛ$ÑL‡zýïL}³¬ýÆõúß©úîoP´Ý4ÿóÛ÷¿Þêb¡íÎïr-3ÇÄËúgÕ—^T¯Õ¸¨Þ@0„ÀEÔùáÂ*…j,ƒu¥$›ª·ðyjhuׂ:I;rÚ¯µ·@£Põ_¬‘#1«ñƃö“ªWH£ªàYWà¢ù NK§ów¶q2è›‡ê‰ ¨7´0Z£’*!;$UB2É ‰°CÂ’INHàÉr]ˆÒDþ@P'´|ÚøÐ‘L] ɤž‹uOtä%Z ea‡d‘BÑaüÁ2AÕ›ý³„ý3:é ;$,!™ä„îT É$'$ÂI&ü†;$ËA¦lÉ뎄dêJH&ý\tèû¢CG?xÒI–‚;$Á¨ÔFö á˜'$ KH&9!Á;$)ƒwW“2‚:™]})ö>MH¦®„d2ÏE‡¹3:´ õfÿÌFú ’¥êÍÜA:Å„DØ!a É$'$p‡¤JH&9!vHlpFÇò@P' }8X™Î’鉄d€XÕ—?QØ,pØÔê};$Fµêí‰Á;$ZSjmùIŠB›¢ N? ~ÔÂI_ @½9éKp•3 FÔ¶Zkñ8•CÒZ ¬¤à9ðBŽ<ß$$‰:X=êžèXö>’mÕÛ’d…’Œo×ÀÑkàhuúÉñ^£UΜOPÖxa‡d‘ÂÑ¡4j½fØtNTÓ•Y¡V§…@Fy8©e#R§Dù²+å–ßWÊF‡¾/:ÜÜGÓª×7Œ²¼a4ìP¯£ÃF‡£ã`5«Õ)Ëd¹Vß0Š_ß0š¥`tDo‘zµžÓ¼Îušõ$ëÐÜ1‡‡ÖHÍöVÊB)ó\t˜û¢ÃF>· ;$±|ªý³”êF‡¹':òëÕ©WsG–ÂÑ¡¼êõ‰ Þ!á&i‡¤Ü£¨çæ]ççF!!ñΓ¾OGF1Ia3ÉaÃÔûî„Ъ·wH¾C2 Ô›<6E!¥A+Ý!¡ É$'$â IH&9!îDå ¼C²<Ô)|Ъ#!™º’I=êžèȧ”†æ\Ò‰5®rŒGÔ›5p4˜&$Ò MH&9!vHXB2É ‰°CâLT®óA|”= ÉÔ•Lú¹èÐ÷E‡N|ø ;$iîÄ8ã›è ŸœIþäH;$ô“3É ‰´CB’INHàÉŠ’æŽí NfWWn‹Ÿ&$SWB2™ç¢ÃÜ.8ÐzY ”/P0:Ì=ÑÑ$$ KH&9!‘vH”´C¢\”Ôé¥ðr[ü4!™žHHà¸U}ù…Íò‡M­Þ³C¢tˆ­z½C’¥@«´wZõ扲ÂeuZŠÀðø†꿚ãD¸ÊQNÙÔyk¼¦8Ò‘?ÔémñÏW2s¤Î’tKÔCê¹èP÷DÇmL©ÀMQõj•³H¡UNŠ> ÞìŸi/ìŸ1 ;$Ú‹o ˜€Z¯o ˜€o o4P¯¢c,×âªèÈuã÷|DÇNsÔèh9ï÷•ò£Ñ¡ï‹Ž8'¢ õ*:)¸»j °2So+ô’T¡—uJíUHë«[œuîT¤õ<êb@êÕþYpFÇò@P§‡ZÚy Ÿ3Êc—‚:­Óß!É|”H½‚¯aÄÕûJùÑèP÷DÇR{ç@ëÕ*g‘BÑ¡’¦¬œÒÊ<]A„Pîg ‡ä`ž®o ¨^ß ÌÓ<:\°@½ŠŽŒ^£#?ÔÕ¯Â×3)4R?¢£eˆÞWÊF‡¾3:\ ¼äÂÉ"£#ßÙêJ ¥xfæÏÉAñÜD‡EÆ7Ña5ŽFk.ìä=ù Î`u¢Ã)¤Î¢£¢bÞWÊF‡¹3:Ìq¢MÔëè0ÎÀ,e,åqH—2qŒKYÂ!±.Hs%C–vH(—2…<ßD‡1G‡1’z¢RÒÜq,ä˜:‹Ž…óÙX6.§#£˜¤°™ä°aê];$ŠÎÚâ‰òp ¬\2 ¨×yìè…50KH„;$,!™ä„D¾Cbm–à*zLY“cÊZSž&$SWB2©ç¢CÝyáè'GØ!Y¤`t¨‡ÌÔk,’LrB"áЄd’‡„$$“œ;$„é±âNOœœïŒ)Œ¦#!™º’I?ú¾è£O¶U¯¢c‘BÑ1?P¯PjhB2É ‰„CB’INHÄ;$$!™ä„DØ!Óè"ŽŽÑEAz( ·xB2u%$“y.:ÌÑ çU¯£#KÁ蘧MÔ빃$$“œH8$4!™ä„DÚ!¡ É$'$ÂÉ\€ûgËAzȦؑL'$¿ ˆ^KÃŒ"‰häuBUJ­GMÄföÚU¦NóÍMj@DlF8ªþ«j„PØÿ¬Èé½ ž˜f·V#ãk†\«ÉefÊkBD꜊†qÐ3ÔcÆA¿ª/ ì¿uÀ"þ>g)…}h‡õJEKläuJŒ]Kq»¼85F ^Q¡e©Q¡ÍA€ú¯ŠG—¼÷I~ïL]xïÌø ;U¯¸Ì²Ô€¸ÌB¤1?=÷Þ§òÞ§»ß{„T´†Þˉü N\§• &Ôv¨³õå*Ç»³©7\²tÓ*ò‚: ./0b»²•ÍÔ«ñîÈN87ÞÔ«÷NyØ+‘F}ù«ó½C¦TÞ¶d°z'©©ù_óAÒ­{Hií8‰<(´ß¤àxwãŽ7ÅÔ6Wº6ß;ïõ{gNËN+S¯xZÇõø…Í#ª¤®\ý¡÷>•÷>ÝýÞKSû}Ÿ?¤±iy ¨“÷ne…fã}/Š`êÍxO Ž÷cYÅÔ«ñN©Ì9+£2—ÆûAe^÷r¬ÊÔëñ^ŽUëï{rP½~ï$¯ãïr‘oã=ÿÕûÞc¢Tæp¼/D÷ä¶×£Ô) ¯2iè¡°Æ{Á—«)ì£Fꀩ~ÀäôœÂwúÞ9}òÈu5ý,¿ï±÷rõ‡ÞûTÞût÷{/×õ0Õ<þ¾Wôp¼ú y!ŸgôŒDÞ ¸â…ï;'‘—¾ïçóÇS¯YàËGÍ_v8¸zõÞ)7#£¬Xàà °À ï]+FeŽ¿ïœ>ò‚:%{èûhÜNÍφbD­¶váû´ .¼wæ§ËdEÕ«ï{–Bã]9e"Rè½Oå½Ow¿÷rø„éÖÑxoxØA>ÏxØ/ˆÔÅñî„ñn P|é¦HçDê_zÀù|Í„ŽÇ;'RgL蜇]xšÍóz&tižßÏb~—=>Lx¿ï5:þ¾LèTæxýΙÐé{wœwNe.¾wi¼Ó÷ÎgQ'}ß³ü¾«y€ÔzïSyïÓ½ï}¥óƒDÇ:´—Z.rø}?دÈÄ U]äR _XÆ)w$JÒ³r2qP­Jùy¯ØÀã™øaüBN±Ÿðü¯Ï_Ðy‡¡å¤®ÙÀãžoÐz“”!)­è¼Ÿxq¿:^Ü7ì{EçM¨ÌóÍHÐú#}ÏœÔO¼÷J¾÷ BmBA¹Ô€µ3Ó6h½Ùl$¬Ð¬ï¡öï½R‡ïý‚[è;#Ô¦xÚ Öé{æe~â½WêÇ{'ŒØ”ÖàªSÃ|üîÂûÛª#æjÁ§œÒ:@Jë6Ù#2¾rpÅ\ýDpUê‰JY=ôPOpí£¦ >¼ ·êˆaZ°œz8˜ROŸ;xêpðŸ|+H1qVêU¤ =Ñ0Ò*†iv?Ï2Žç ¾EñÅ êÕ[z8ž%ã4~¹7O‰ŠÁÁdÃwùA,< iëI3Nt8Ó0»U@눇vEÒ çŽ…*˜ ƒ#¼†ÖVô°èõÐôœ‡¦ç<4uxèõ¹z툡 Òcá;ÁˆÙÝkh|³HÒ¡GEzüDt¼vDÇkñS}Ÿžé{f-F'©5í0½ÌR±£ ».õ#o3rÆZÌî9֬Š?ÎZ,ªo–µ“3c-–Ôwƒ»˜Œµ8 õ½6J’blX‹c?í0b-Ž»ðÐBÚáxo0 ŽÀ"¹ö°k€ÔÙ ma\ƒ¯¤a~Êó xþŒÒ·aŽsïÉzkJߨÏÉ‹(}¡çÛû¤N=¿2Ý5ž‡l»Oy^CÏËt¹ Ûn”xOïÓÐåÆ~¾[D— =¯<ÅZHüR¯åy#yqÉ"*ZèùÑ%=Ÿ õÊó \ì¤lµz[;:0¼+uh”øûDÙ×PÆÆ~ÎWD%jסřœ¯ñÒVÀù·ÄQ_ÓIØÕúLê9Ï+àùS>ÕšŽ5J´©dJ­ùTc?!*âSEž·i5òüò©?ô5˜ôsž×Øó2Wi@­#ÒÉa«4\¥±Ÿlq•"Ï›”t@ž_ õ‡¾“yÎózþ„´¦}ÊóFò<"òD< Ðó>fÀ®£Aê} ¦ë¯ÁÊÛ%ò´ñ¥5|±ŸpñuF‰W­ ZÂÍØÏ˜‰7Ñ×Z'퀙¢Eêük¹†à× áÂ|Êóxm “Y6\˜Qâ¬Ve™e¼²&³„žWe\VžWǸdêÔó+ÇSãyÈ3ù”ç…µLYóLF‰f¨ QdìgzDD‘0CΫf(8*Ƙzåù8:äù–Ãñ)ÏaU¤UYÍá%®E!æ0¾ŸE±&a„žwÁ%èùü©WžON#Ï/tDµ:à&:ØVÒ¼(1W ˆ¬ª!KŒýl‡ˆ,1J¤†hmвÆ~ºBÄvQ½t:Ì µg…zîk0©ç<×'L‚5a”…UYÅ$™áªÌùó¤åRèk0éçÀ?@êÔó+=ò|t<æ…Sä`gy‰[Á€ ‚œØÏpƒr¢Dd#œT 7±Ÿ¢1Ü€¯µÒf4èfËú©?ô5˜ÔsžÇk™=¦!Ÿ‰IŒ°*«Øcb?ý bAyÒüÅrpm°<@ê} &ýœçñÚ@dfi‰]¤{tIºG—€z/µJÃÌ×álsUëá`œAê} &óœçñÚ@`=A¤)’çµäy Ô»hKë ô¼Ò£‚žWÿˆ«?ô5˜®¿+KE” â„ß°“Ä~zÄN%üµ®éEb??¢‰¤P†×ÌÞ#㫯A†GÅ% 5óÇSžÇkƒꎚù#J øîuMÝû¹7uô¼!w{9üþ1¡2u¾jÖ´º)NoY5žò<^œÐbÔ¬Qb¿€• -Fìçµ@´Ðó:™=Ÿ õÚóN!Ï·ŒOy¯ N('jÆŠ(1Kà˜¯)'b?g¢œÀžwJð¼S©WžW ÷ÜÁ—ku€Äœç7ˆN÷€ ¹jˆØÏ퀨!¢DဿÖ5·Cì'g@Üèk­œð”y€ÔúLê9ÏãµÁ oBM»%z|÷ºæMˆýĈ7z~ž¹°çó¤þÐ×`ÒÏy¯ Î8 *Jƒ(QÀJ†“ ö“ N‚¹œ‡•ˤþÐ×`2Ïy¯ Îðþ+º€(Áú㘯ñþc?`?Âû‡ž)Á›åRèk0]~ ~—’@ ¿?@Äý —ŸÜý¹ÖG¸ü-¾n ¬Ï¡Ó=P¯‘ñK5Jœ[ªQ¸:‡{b鬲¾BÆDÆ–ÐFéžË““¯ @hF52>9gï‚¶¯ñ[„ÛÚ^ôü4¶„$‹‰V®µ>!õ‡ñ@½Þ¡ÃcTgï.z^ˆy5& 1€–Hý!ÏOÅóÓÝž/W¸0 ;œçk|v)æSbžã³Ë8ê†Nçë€qoy½ 3nzíyÈ|Ó"¤Ç"¤Ëž§®b¾BHOüPï8Gé2’ù€ÁË9Ä9žç“òÎóùRÈóSñüt·çËÑ$†"Çó|…Q.ä6da”Kó|ÐÂ<ÏAÆñ<ŸF‹Y@ò¤^yž¢E3$Ì %<%\ô¼Ö‰‚Mãyž£„'þ¨÷À|#”pižZ˜ç9Ì7žçJÛ÷Hý!ÏOÅóÓÝž/[nŽÅ|ƒÓ-Ƽ“bÞu€§=`m´c~LóM~€Ô+ÏSÄd6ÛTHÙq€HÙòlc5\Æóçù××!W€+eVZØ5ªnŸðüë‰ëºŒŸž1>#Ô¢M§b–žËTµhÙ¥~ämvÁjc•­2„Ú‚–#ÔŠê›eítÁj%õÝßच!ÔF¤¾Á¬& r肘M’ìÐ…›Úé|K8 f;e÷ ©ó¾7P°wta¹& ²uècM¨ŽÔ*B|X}BêG!æê]]lAS“„Ð9t¡žÂ.j….šª³.¶à¦wu±E'½·‹¼(ì¢RälœuÑk¨N»¸âÆ¡e¯RÖsàÐ$!ö ]ÈŸIøº ;BáñÆÇŽA:u ÒIÝÓE±™$$Í¡ #3¡’Vå¢ê¤S× ô]l°,“œ8tQ&XÁ8 ;éÔ5H's_[ÐÈ{»h‘zî£uƒtzb® „IRº“„»8t!*‚/iFG Ҍ҄Ôù m€ïè"B>LÀáÐ]»¨ÍhAW*¤~t"ÞÕÅb0IH‚CF üÌ$z[‚u1Ž©³.¶P€÷u±ÁòKdßÐÆ»èLùV`%¤Îº¸ ,Á d¯‚cXqI·ºpò’‡7tÝ¡/©š±¶cN]ƒtR÷tÒ% wnèB”Cs°O!ÆŽA:u ÒIß×Åù-IoCtì¢u£ê¤S× Ì]l Ö’„¤6ta¤Á|ÈÈÕgƒtzb®^I‚ºàË’„R6táá/©ÒQ¤µÞ Ò fìŽ."œ°$Á ]@_ Ö/ÓÝšÄ:h#R§¥lÏë®.¶€\IBºµ`Gc`>´ £ uö[଻ºØ"_ÝÑE]%|Ižj3 RgoqÁ$iéDâ²R’Ð`†.T©$G ]°PpMÒƒtꤓº§‹¾)I(MCþœƒç¹2u Ò©kNú¾.¶8II庀Žàš4x:éÔ5H'sg@¢;ºˆ…`UªcNO Òð&I CØO’0}†.´ü%§»©óAÚ€òÜÑE„ª“$𜡠'Aô›hÛ.îHýè"D¿¹«‹-|´GŸ†.üø%MÆ{ÔÅK©—.b˜™»ºØâÄÜÑEô‚ó¡Ö¤{Ñ>Rg]\*øáÆQt ‹ã¤_Òƒ%IP+Cˆ \“ÂnéÔ5H'uOØI’0M†.´0«ÑŽÆw Ò©kNú¾.¶¨"Ò}º`AÐg&ÍÚºcN]ƒt2÷u±…ïº(,»kü œòÓÓA:=1HWxˆ$•´]ÐIBÀº°-„°HÉÁAš‹‘zuF\CXÜÑE„A‘$¨‰¡ DvÑëa¢” ‚‘úÑEˆq_°‡$a: ]h ¸‹Ê¡‹N!uÖÅ”á¾.6¨ IOº``µOB•F­ó..õ®pãÈi 3ƒ´óKZ#$ ˜`è‚Ôº"ï¤S× Ô=]DÐIBºjûá¬FaóžÒ©kNú¾.¶5øI*µºŠèD)á[¬éÔ5H'sg›b÷$Õ´]ÕꨋsÊu ÒéñAú»ÜÞÀåæCO!yëÅq%xR¨ó±Èë‘ãI%xº·<°ræ$|w•r'±b×b§}G‰©?Ö÷©ô}º»ï嬗\wS'±f¾÷ãþS¯ûNkrãI5tº»:Ò’Þ$=w•3'±jÖ©)¿/Ÿ˜úc}ŸJß§»û^vÆqÙqWAqë†á{wF¡Ö›¾'é†:¯NwV+^Ò›ÄÂß®’Þ$Vîâš\ã P¬ïSéûtwßË>.½í*ªMbí,®ŠÕÁõºï´63žTŦ{«b÷3øßeyŒ‹_»ÊZ“X½ Ç»÷û®•¾O÷ö}-®”K²ºŠ+“XÕÔUyÕúEy£4U©€—7^QŸøDë¹Bðªï†RZH–ñ¤Àðªï‚O´ž‹ì.ú~Uâ—ÄJ>a#h½¶±ªä»ðÐU)^+î:lœ:lü“äI­»ºJæ’Ø“®š·$Xu­¥®Ú´$Bu—]7òÚÑ“‹"0i ×Bª^]uñ¢Šë‰Ös$e¨Ê°’\ÅñÓ{Ô ¶jYW:«âJ xW:«âJ(ÎYW:©âÂõN¼Š+!õÏï_Ÿ‹ƒ†ÿþ÷óßïëŸÛ1Ïbqiýó÷+} bÜçàC}–šþ.RlR›ñ/ôÁhÃ^!õùöúKhÝXg"T÷qŸƒ?ÿùAõ ­·^(ø>_¦¥ÖÕºÔãž8êßæ!ÃÔÝèöCÖÏ_b#*o.ÁFL³=Ôפ6Î/hïɛ܈v®uÄÚ•}ÿùP_U±¬?•ž¼HŒV-4ôß¾}ü÷•õ„4RÔ›žŒ¾Ülû|“1Þ؈RÑÔêUOŒÞ½àâóõ_7þæ}Xu×!Gê[Ú¿9‡zåÔÜNŽØ_÷¦þ!¾,µkÃnXº¸CêÀÛqß3›‡ìß{#ÌÛëà_ýøòûWy nÉ_)êìeÍóItój1Gíûë·÷6KnJû v¨ÏRÓ¿?6)mnóÈHKUÔüàõ{yAú¦•/·‡˜úߟÛß„pK£sûí”ÏŸo0 ÖÜA-~¾ýà}?f>¢þóí/þ®ã1²þ¦˜[Ú™&ÒþÈ £¯Õ›FTžaW©ÿþü½Í¢¯?¿Ù¾=Ðü n$uÛ¥îÀdîû¿Å¬-r‡wýïïC½ü]·ž`ãkuÓÑú³Q9X[õ¼ÍK¥”¹%aB‡úïçŒÿ}Ïç!eoN0~Oº¨zc¼ê1þý9ãßçWåxKÛƒwNæÔãݳ~jüYÐîÆW>gÓ¨Ïsð÷O.5ͺ¹=ŽªÓ¬ikÜAãç” õKã[³ö\ýP¯mœ‡›‰ë÷ç˜U«_Øøí~•1µ:°Q§5:¾ÙøíÚÆŸ%îÚ$Að“M\ÇÌõ³ÄG;üX ‰ê¯‡ú«¤þ*«“ñó.©¿KêÅ÷ÍkàïGP//¥‰óC=?ZŸJzÑDZi}~ õýPÿ”Ô?eõo‡ú7Iý›¨þñëoµêüzûõ×ïï ´½}ûõN3’ÚªVÿ÷×ûwÕl–)}g#yÛj¿pw¨çF´Üˆ¹¯‘<»¥2Æ‹znÄÈØ»ɘȵznÄŠüõ*6ò‡Ûùë7y`oÁwíÍ7oŽØøñë7±‘TŸ3õ,¥ék_î'Î^ÿy$79AÝ/~ä'»zù»ný•ü.GªÎ»8ÿç6©‹õUOš.ÂF¨ú÷_¿«y[-~T†Òðï+iýUj]ì"Uÿ^©­×¿[Zÿ(v.[tÔ½¢Áu¨7]üc3þ³Cý¿ÿ¥+®MÈ6K±-f#0þ­m}‚ÊÁ°‹Àó­zãÇŽ.•º‹*£]¸«.Rãå.–Øq¾ÚX·ž9œK®NÔÿ+ÍCËM~4ì·»>ÞŽYÿMœÆÞø„œË›kõçÕ¢8뿳~#6êZ=7¢åFÌÝŒ~_ê¹#7bïo¤œkê¹qÖ;^éžõ›!—Ñml«þPDYÿMüh¼Uzó@=K±™ïf÷y÷í7“¦íCý{3²nÛÄù&MÛe4Rf•7qZ ê?Þ>zFìr¶jAëò´ðv2?îÙ\³ Ô«*¯˜¬/ŸèU&8º×»”˜å|ã×·×—Ò켫¿üúoµ×·åöë×ïÿòLt^æ”É£¨ÿ;ÿU †ò…Ÿ¥ôs6êÖÆ?t¼Ù1¥eYxa£.6êÍs6ìÇáã—]Í M±ÑœØhŸ³ÑBÿpcÞþ¼¶Ñ­h㗳ȸ’þúö%ÚøEâñ‹­®õMkd㜻êÿ~Äã—½6jÁÆt3¦ÃF]lÔ'6šçl4­ètSq3áÚFSl4'6Úçl´ÀØ0ÊlŠ×6Úb£¯¯/{#ÍÐØ'anüÚÞö+7bN±w»kC_«ÏØ“Fܽ؛r©VŸq'øû_|(A_ÔçFüI#›>ø­=üñó­J^nÕÿËÔÿ¸´¡ÿ¥ºFÀ«ÚÇl3ÈÉN(¾7§’3@ýßßä€pýz²øöúé*)Ÿ>é=AUûÉg{*´nT‘:oÝ„¤­ª[ÿcžö\¾Ø±©ëçú®ïëûü2Æùk°ŸQ¿êçú®ïìû¼ôs&î×…ßËb¡ÝÙØ¯í¼ÿ Vé›wÆï{ïÅb`vß“@Ÿ$ã… èסž HÐZŸ^íeª‡zû¹õ~Åo6ƬÙQUõfÈìõ«ÍQjZm¼‘Œ7Æ7C樞Ϳk«ßm[¯‡Ln ™ãd¼ë2ÞKÆû.ã½d|è2>HÆlüÛ¡ž›XÔsuobÔy½¹´Q§ÂÂt¨·Q·4·Q—`ãd¼¹0¾ºRN×V¿Û¶Þu²ñN2Þuï%ã}—ñ]Q'$ã…¨ËEâx®SѤ£´šF2GÌ¿HQ§Ç  Œ:S`õvM¸U¸·ËÀüo$ãÍ…ñíb±Ô×WsÝò»më¹[5W‘²ñN2Þuï%ã}—ñ^2>t$ã6þíEšëT0Ö]EÝ›u*nHBMÔÑ!#GÝyÐF]~€7’ñæÂø6ê àB5×-¿Û¶Þu²ñN2Þuï%ã}—ñ]Q'$ã…¨{y{K¡…Î*^xõf)dæåœëŒqeÄõv?Ø£ny€7’ñæÂøv~k½Z m¿Û¶Þ½.ï$ã]—ñ^2Þwßµ“-$ãC—ñQ2>vßµ—,Ÿ$ã…¥ÐôýOq38Y¶¦´ e‹¢¨7#ë¨áž¢rq¯ ;ÔÛÜ3KáÍà´_­Õ­¤n»Ô¤îºÔ½¤î»Ôƒ¤$õoÒ‹Û¦žÅæ´Ì—‰º¨7/._-QµcîPGw8ÆË}›JÝJê¶KÝIê®KÝKê¾K=HêAR¹ïÅ ·œèëZ½Ù V“ÝÅ‹{yîŽ<÷â^ž{q/Ͻ¸—g^\©*/Ž¡H,PVíöþ°¢Wµê4óÝ·š÷înÞ9cšÖù{W7;¯· >0Z…ZGèâ±?À}7RßMWßMÛwOç­[©uÛÕº•Zw]­;©u×Õº“Z÷]­{©ußÕº—Z]­©õÐÕzZ]­G©õØÕz”ZO]­'©õÔÕzªZ/¸-ÿ£Á ¡.”PºC½ÝŠ6cˆøÌ°àDêèÑ[ø1Ɉzµzû1a¸{¦êUÛ÷z9»¿2¨õjð×®³®k¿EÌx×e¼“Œ÷]Æ{Éxße|Œ]ÆÉøØe|”Œ]Æ'ÉøÔe|Âüš^˺è÷/ò¹ýCçÈfÈè9ËRÚ4êu~lbôÊ—B)]ê½æUY´ú*e*©b–©ÌÂêVR·]êNRwXýåûÿÁÛ(ÃÍ™ –í%gçç[E½ž“¼$tøt~¹¶\Å,êÿýïôÿè…MýZô>0Õl¼‘Œ7Ưضõzeýݶu¶±¼5R~×uï$ã]—ñ^2Þwï…FÞþ‘¢ÃÛiH® Òêut¸1­ŸœfEGSnõ::毚ߎ±xt¬°ñF2Þ\_GGi½Žü»m빑Žè83ÞIÆ».ã½d¼ï2^ˆŽ 4 §]•¡fM=wdü[åýب×kà9†7.ù*ŸY¸b­¾bôj^¿˜[ß@v×'Þ-_ÙŠ+êÈõ-¥µ°ÙÝÜæ%wa`gêdwùûào:ó¾¦åÁ÷—_ÛG#㙆äSŒ7­ñõ7cõiëy¢^|ôÝtõÝH}7]}7RßMOß­ÔwÛÕw+öÝvõÝJ}·]}·RßmOßÔw×Õw'öÝuõÝI}w]}wRß]Oß½ÔwßÕw/öÝwõÝK}÷]}÷Rß=ì{cB'óC…¶Í æ&Qo>·1”è,¿‹ÔðÙæyª¾„Å»6ÞJÆÛ.ã­d¼ë2ÞIÆ».ã½d¼ï2ÞãFÞŽõ?=ßáÌÑ‹#æ‡z'Ym̈ò$5ºBy¨C~0°¿¿Á¯×êõÕà ¤ÝT½jû^ÅÐÒEpg·ÎÊ×Ù ×Õ7‹+ã]—ñN2Þwï%ã}—ñA2>t$ãc—ñQ2>vŸ$ãS—ñ 6òyVPÃÖêí ë÷rÄÏë ªm#ZY_«77ÎôŽ0¤œßG=IŒŸ_0rÚjJ°r~ý ì®$0òݹQCÊùm£³»NŸÒU©•V†”óó|*U«ã#*ñTŠ0¤CŽíØi¸c÷YíØá½ìÏëÅ^SÖêxy±öû|ní÷y±ö# )§|Ÿ)aHSL5 k8 V“0NOîÌ£2HÔ)‚º•Ô]—ºoÔ›ó«Ë™C½ÙjªiXöFÛÊ ¬êöÊÆ…ù{ ‡zkcEÖ"½JR}gB­ÎFZ²iY ©¢¥RŒ¬…Oå)ãÆó9‘µpãY‹d¼ê1þý9ãß!´ËP‘µ° ãd-’ñ”¬E0þ,´¢š¬‚-Td-ì'kAØÚ8¬ ®ÉZ®ŒoÍbd-ÐuYKmV­~aã·ûmäd-’”¬E´ñÛµ?KÜNJÖ¶8Y‹0üX ‰ê¯0«¿Êêdü¼Kêï’zñ=àd¡ïGP//p²P²©õéoÌÄ[§PUßõOIýSVÿv¨“Ô¿‰ê ÛÊ¢³ƒ´¡½Q~hÚªV¿$k¹¯‘†¬¥4rJÖrW#-YKi䔬åÞF*²–ÒÈ)Y‹Ô#k9Ôd-›zõæÌdÒ’µìêYÊÐ×NÉZ,MvYË®^þ®[%¿Ë㑪ó.Y µQì"l„ª/´&ºIÜ7&¾€¢d-¥‹Rëb©ú÷J“µÀÖ?Š] ‹Œ¬Eãà:Ô›.2&“ õ•™ ²`Y×µìÆ¿}ˆŒ=•ƒaç[õ€3窋E¥îbEÖ"t‘/w±Ä6ˆsJý@7*²–Mý¿Ò<´<0ìg)Y˦þ&Nco|B®ÈZÖi슬åîF8YKi䔬åÞF*²–ÒÈ)YËÝp²–ÒÈ)Y‹Ô%kaKNÖòLDYÿMüh44,¨g)~LEÉZ¨”؈0mêß›‘EÉZðÄYö[@#Œ¬O DýÇÛGψmÈZ®§…·“ù‘’µÔ{E¥š¡Z²–}‚cûÆ5‡0;ïê Qߌ¼:-d-˶PÏ,.µúB«À¼•i>†—§Œ×Àø¥ᶬ©ñ½K­~fü9½ËSÆÁøÁÆ›ž_y_jõ3ãÏy_ž2Þã}¸“VÎëÊø¦V?3þœ_“„`ã¿HÌW4j%ÖYÐ¥ýÂS«×ƯT"CSÌSÆk`¼v·fÏ[düB!S«ŸN!ó”ñF𼉷çŒpËÔêgÆŸsË¡u²û%þws·º1±À¬½Û»ÕçYDïaóîîT÷³ñΖ[¹ù~—†s6šêd¨bâ1à qÖ —Ä›:@.ÒpeÓÔM£+5›¾cj¡ƒJ‡¸î*s\2z„J‡´þ•iý*Òú#T:¤õG¨tHëPéÖ¡Ò!­?B¥CZ„J‡´þ•iý„JÇ  “áT: ˆŽSé˜ax†Næ©Yáã¹Yáã¹Y¹®¦¼$–ì:+¹Î^¸ÏƒÄrZ”7ƒÄrÓª?6©0×yÉu¾Ëu^rïr]\º\$×….×Ý?'1×EÉu±ËuQr]ìr]’\—º\—$×¥.×PÞFí ¥¼¡¥°å†gh_ð”¶0Û  (sáê¦QGSÚ¾Iw¨cbœAb£Á®«©i‰»ÎJ®³®ÃÔ4ƒÄFӶލi‰¦UïžÒd×yÉu¾Ëu^rïr]\º\$×….×uMi²ë¢äºØåº(¹.v¹.I®K]®K’ëR—ëN¨iˆT̓ò¤ššO*œš¦&©Õç–Áú›[†¨?Â-ƒGF·L¥%õˆÕsU”ðâ85&+nNMƒ_§¦©Igjõǹeð‹ëæ–Á/®›[¿¸.n™J=Jê«çz4ðâZjr‰¸¢¦A/¦$:E3Ð Ü2`Ãánð%¼‡[,ùïá–“{¸eÀ¢ûn0n™MêQzœ#Ž~…™j‘€2錠nè'g9ÀGÁµzê˜fXcpß­Ôw{ÑwL!3H¬1më½YÚ‰ñ^2Þw$ãC—ñ=yÒ‰ñQ2>vŸ$ãS—ñ'2æ8x„…E6Dü½ÌÜ2‚:Ù²;Ð… þ^vsÀû¼½0ÄupÀàÏm7Œ°QÛËCŒ¿—¦2>JÆÇ.ã#näíz”«EˆM“4äý^hu›™Žfè šb³—)æÞØD­?Î#Äf/S̽±)/SÌ››ÌøØe¼›¹¤ϛ݌.4¸()££!QWÑÑà”€ÓÑÔL1Øx+o/ŒÇ´1ƒÄÓ¶Ž<‰)ï%ã}—ñA2>t$ãc—ñQ2>bãß^¤±›ÑG]EGc𸔣ŽÑÑÔL1Øx+o/ŒÇ´1ƒÄÓ¶Þu²ñ^2Þw$ãC—ñ]Q'%ã…¨ËÔhõt£ ŒºšŽ†ì–Tt4˸‡{*5¯þwóÉÜ{µþ8Ÿ þwóÉÜ{˜/ÿŸ þwóÉÜ{/ÿŸŒ´ƒËødŽý¤šO'œO¦fŠ©Õ'„ÁSe7!ŒýõÂ๮“æO)}cêQRÿ&½8NKB°+>üâ8ŸLM8R«?N#^è#„¦‹^Bñœ½‡æ›4Þ™z”Ô_î{q-Ÿ ÞÁå|2â‹{yîŽ<÷â^ž{q/Ͻ¸—g^\Æä*/î1N’ÛNþÞŸ xï§|2öÈmŠ:¦:]Hßat!}„Ñ…´þ£ H‰›Ö}Wë0ºÖat!­?Âè2ê¦õØÕú#Œ.¤õG]Hë0ºÖO]ЉZMŽQÓÔê-:X&n;ÙêEP7:¼WÓ´.2º\R² ¹;(Y„¯A/%‹°Tí¥dAçywP²“^Ja©ÚKÉ‚Žï d.‡ôR²€‘(Yö¥à>ea&[©Õù؉[@î‰ÕEJL¶‚·­ñ˜l«;IÝw©ûJxÀ ‡~î¸ñ¿ò³€©getÔM£~Iܲ½ŸG™WÐÞìÌ+páŸy…ÿó Ú›­]ÆÉø ÿö6½¤(ø¼h!na³R½ê¦Q¿dtaÓOÉbŽ:­G(Y„°é¥daÓOÉBŒï›3ãƒd¼6òNçÕKÍDR«·Œ.œê…ì›VT/›ë¶”Kº“åÉãt'»úƒt'ÄøGèNÚ¹î.ºÚ÷èNhß ;!}„=pÝ íût'´ïо?BwÒ~&î¢;¡}€î„öýNº“ªïAê{èê{ûºú¤¾‡®¾©ïö=C9¡Sï¡Âý®YXZuDÉ2H,,H½¥d$l¼“Œw]Æ;Éxße¼—Œ÷]ÆÉøÐe|À¼ˆexPjõ:Oª©^ŽŒº¦z‘úŒ;¸-åÚÁ­áâk–¶ïˆ’eXX°ëœä:wá:LÉ2H,,Øx/ºŒ’ñ¡Ëø(»Œ’ñ©Ëø$ÂÂr^TZã7ç+áû±Ã§Pf¿À ¦áäŽÚguëÝH·Þ©zÅÂr~ï_‡'4*ç7‹ûÔÛ{Ö¥DhTp#œ……ÝYI…•D¾ ªÇBsûù&7ÂXX¤× Þ4tó EYXÎo]Qµ_zü”¯ŒÚî¸ Ÿ×—lήø|J7„Z–óS|–S«ãƒñ,‡Ð¨œoΞÑmV›txÿùóz]uÆBùY¥iw²P~>·,û¼X–•dz±Ï‹lŒÐ¨À)¦‹Aí³šÜqæp¬`²•AâWÔ¤î»ÔC£ÞìÍCÑÙZ½9ÐX¸ZÐŽPMϲ·XX‰xEPwÆÉ†Z½-Ê$.ÐøŠ·Ezq”=¤ú2…Z¡Y´¼-46+ÞRËÉð})o ÿ0Þ–§Œÿ}ÏgAÆÛÂg¼-’ñªÇø÷猇8"CÅÛ¢‘ó¶HÆSÞÁø³˜87jÞˆPñ¶°œ·ålkã¸ê¤âm¹2¾5‹ñ¶@×U¼-µYµú…ßî·‘ó¶H6RÞÑÆo×6þ,qèY(o [çsÞaø±Õ_!¼W•ÕÉøy—Ôß%õâ{@ÏBß ^^  g¡¼-RëÓ߈·N!ª¾꟒ú§¬þíPÿ&©Õâ•EgãiC{cÿ0,´U­~ÉÛr_# oKiä”·å®FZÞ–ÒÈ)o˽T¼-¥‘SÞ©ÆÛr<¨y[6õêÍ ˜Ô¤åmÙÕ³”¥¯ò¶8š3Þ–]½ü]·þJ~—Ç#Uç]*Þj£ØEØU_NL“êo¤&|ÉEy[J¥ÖÅ.Rõï•:çm­»@o‹ÁÁu¨7]d¤&ê+IA%dÁB°ámÙûÉ{*Ã.Ï·ê?}ÎU‹JÝÅŠ·Eè"5^îb‰m甂n9T¼-›ú¥yhy`ÙÏ:B¼²©¿‰ÓØŸ+Þ–u»âm¹»ÎÛR9åm¹·‘Š·¥4rÊÛrw#œ·¥4rÊÛ"5By[Ø„ó¶<dÖ? #‹êYŠŸ9QÞ*%6"LÛ‡ú÷fdQÞ®Ø%Ø#ÎÛ&•>õ…xEÚ dô8Ñ)ê—¼-w6Ró¶ìœó¶ÜÝçmÙ9çm¹×]oËÞÈ9oËÔ¼-{#ç¼-w¿xÎÛ²7rÎÛbü[”·…'ጷeS¯‰W8o M^9o U7w •xÅ Ñ?0öc“½åmÙND~ÿE/Ÿ3îsPùѺ} °¯xÄ,´Þò¶ Ö9w‰9˜Rrnd¼-÷]ßÙwuÓÞ„Úy%^y¼ïúξ«L}¢¢"¼-Âá>e)ÿnæ¤2”"–÷r$ÏÏÝkÞsô'h]ªèWÞ7Ž`볺›[·”·åõ…-(ŒŠò¶Ü¡>ë»TnE­¼-wµ´·;ÞâÊÛr—z2ÚZÊã`‡áœ|¤:ªx[ì0H%Ã%ÍÀ¦ ~CÃq³æm¡ê¶Qç—3·;NºVÇD Cs qÝ#Ì)ö¸–ôs iýæÒú#Ì)¤õG˜SHë0§ÖaN!­?œBZ„9…´~œb‡Ðp憙ƙSì0vŸ$ãS—ñ 7òvH!Þ‰«Ø|“c“³i¨ãŠMCˆMƦQódÔê˜õbˆ.Ú¾wÇ&j³^\Åæ››ÌøÐe|WlÊÆGÉøØe|’ŒO]Æ ±™K£ñ¼ÙMHAƒ‹l16 u›þZs6šèï$ãÝ…ñ˜õbˆ.ÚÖÿÀ ]`ãƒd|è2>JÆÇ.ã£d|ê2>IÆ'lüÛ‹4#vRਫØ4,—rÔ16šèï$ãÝ…ñ˜õbˆ.ÚÖ»£N6>HƇ.ã£d|ì2¾+êdã“d¼u™˜-ljbia³«7ë—ŠMƒìDTlË´LðíkžŒZ³^ ÑEÛ÷îZÔ:f½®Ø¹ñA2>tßuÄ*%ãc—ñI2>uÂz!íb2Ö‹cO¥f½ÀIg½¨ù,jõÇi+ð”ÖM[!di½´xN꤭øSJ³˜z’Ô¿I/Ž“'LáŠõ¿8ÎzQÓ"ÔêÓVˆ¼}´°ÏH{h+¾Iã’©‹#îå¾ײ^à]LÎz!¾¸—ç^ÜËs/îå¹÷òÜ‹{yæÅe ¤òâc~ 9`~àï°^€÷~ÊzáT9ì*ê˜Übèà }„w‚ôýÞ Òú#¼ umZ]­?Â;AZ„w‚´þïÈ|›ÖSWëðNÖOx'йÎÜ hŸªá {¨ï„t,$òN¨ÑÔê˜^b(!pßÔwwÑwÌ1H”mëˆb(!°ñA2>t%ãc—ñQ2>uŸ$ãO(!öä³*´¬c§XÔµ”ö\3? œÄøG8ˆº—ÔC—z¨Ô 5\5WÔ5ð}­ÞpPV”eVh(!`~\QBÔdµ:¦n$¶†¶ïˆºaذë¼ä:á:LÝ0Hl Øø »Œ’ñQ0þí)l5€½Po=*Jˆ6 %^VqJˆšì¡VÇÔ ƒÄÖÐöQ7 [v—\ç/\‡©‰­ß6gÆGÉx!l2þ&œÎ+Jˆš± Vo™8%Ùü«(!6× ¬ —´Ë“ÇivõiˆñÐ"´sÝ]´´ïÐ"о?@‹@úþ-B{~-íû´´ïÐ"¾?B‹Ð~&î¢E }€öýNZ„ªïQê{ìê{û»ú¥¾Ç®¾G©ïö=£Ä £Û¡!®ÙZuDÝ0Hl H½¥n$¶l¼—Œ÷]Æ{ÉøÐe|Œ]ÆGÉøØe|ļkvDž0H| µz'Õ”GF]SBH§U&†A"{¨Õ1uà ±5´}GÔ ƒÄÖ€]ç%×ù ×aê†AbkÀÆÉøØe|”Œ]Æ'ÉøÔeü uÃyU[ áÚP7€JÛ†º_ˆú¬®/[éú2U¯¨Î/ã{Í„{áü†iŸz{]Q7àF8u» Á©ð­žšºAh„Q7H¯A¼ÖVS7œ_ñ›Šœº÷¤¦n8¿ÑqvŸäSºŽÒR7œoÝã‰ZŸNˆ„{á|ïÚÖêg[¸Ÿ×ëŸ3V¹Ï*º“Uîó¹åÓçÅò‰p/<ž5}^dM„{N1]ŒHŸÕ$Œ¿ð+fh$RAÝKê¡K=6ê ûÁÔ¿7#‹Ò@à‰³ìö€F žˆú·žÛÐ@\O o'ó#¥H½ŠJ5Cµ4ûÇv­k<avÞÕÆuCÁê ÄòlÁ6gÞê¥xÊx Œ_:@i öÝNDqiü9 ÄSÆÁxFÁw8 Ä¥ñç4Ooñ Yg44—ÆŸÓ@@ãk<lü‰ù ˜Ò@Ð¥}Mï§xÊx Œoh ¨ñ5 Ä¥ñç4OoÏ3ˆ2` Ä¥ñç4Ooñ DYˆˆKãÏi ¶Ö›qI©è5ëŠbSÿbbþæ,¡B`Ná4{ë_]­74°õy­›j½¡x¦õ/ÜzÞ w#ì{Cçã ¬ž=â4`\ö©/<ÒV cÀ‰NQ¿¤¸³‘šboäœâîF8 ÄÞÈ9 Ľîªh öFÎi îl¤¦Ø9§¸ûÅsˆ½‘s;àߢ4< g4›zÍãÀi hòÊi ¨º½kh¬<þ‘›ì- ĪžÉÈ…sF…`ªà•ÛÔW «…Ö[Ô:§B°Ç“Õc©¾Xy﻾³ïjIìl <÷]ßÙ÷¹õÍ~<ø^š­2{Œï uI|/Çûü ¿¦°GtR…€c¥À{c°õÙxJö¸Ò@Ü¥ û}š•âõ| ýÈu¥¸C]çÓ¹°ï­4w©«y5`¥wÃpÎeP U4n$ƃá3}SØ4 nþ¸wYÓ@Puר£*H¯juŒ*?t1×=BÄàŽ+N1Ö!b ­?BÄ@Z„ˆ´þiý"Òú ƒÀ&À‰Ü'bpÃð ›ÀS#ã㹑ññÜÈ`®«‰ä»ÎK®ó®ÃãgH@ë€ñ`HZõÇs]”\»\%×Å.×%Éu©ËuIr]êrÝ ãi„ÁöSÆZ‡X1¸ax¶ËŠñ€äoã—'Œz µ:&6$6캚Z`ذë¼ä:á:L-0HlmëˆZ`ØZõîq)».J®‹]®‹’ëb—ë’äºÔåº$¹.u¹î„Z€HÕþè‹US à‘±S (kר‹Ô˜4ï[ã1iV’zìR’zêR?aÞg°$Íç øýì èýìËÓC]dÀÜØxß¹°zÔc—z”ÔS—ú Qx?-Q¹ X ÷sNuÌ0t ýƒ÷sÒ?x?÷ ýƒ÷sÒ?x?é“zí'Ò?í¨þ…ÄAFúWZ×êÐ@øqß½ÔwÑwŒÈ?H üm뽟îã£d|ì2>IƧ.ãOùݱVc×$x­ÞGä's{…È/¬"µ_«cäüAËoûŽÐÉ ,».H® ®ÃÈùƒ–’ñ©Ëø$–¿©#Xù«°y“ƃå„Ô ,_–_Ãà×êÔ~pìÛ¾w‡ jƒÚ_…Í›6ÌøØe|WØÈÆ'Éø{<ÛtCÁÓ÷NYgŽ= ˆ Ç^HÕŽ} 1÷’ñþÂxŒ7?Hómëù{ æ±ñQ2>vŸ$ãS—ñ'xóxRé†lÇÑQáÍ;Ú»:JWUÞ<žTº㉇ŒÇ“J7`<žTºã‰ñÆãI¥0åÇ5p¸”ïêM\Æ“…g/…ͺ?ƒ¡àku ì>HXîmß»ÏrPëØ}¸â¢âÆGÉøØe|×aŒl|’Œ?Ár—¶–û±ì­±Üq²c¹Ãe¯ªÕE,wŒÒŽ÷­ñ¥«I=v©GI=u©Ÿ@¶ ï‡#ÌÏ ²¿Ù^cz×êc®‹GA}˜ëÂÀêÅ\OSú0×ïò|‹¹Ž7„8æºèù—ç<ÿòœç_žóüË3žÏè#Åó‡“ï0ç/€¦ƒwšËÒ¢¨clô¡¶œôýØr@‘¾_–“Ö-ÙyÓzìjýØr5­§®Ö-ÉýÞ:F»Ìw@w£ƒ¶œl4U°åÒ&µ [®šÖ1:ù !Šã¾{©ïþ¢ï^|ÅÛÖ¼ø !Šcã£d|ì2>IƧ.ãOàÅÝQº[z— ,Zxqw®ŽQć|pbü#øàD=Hê±K=Vêf®±*˜éD¹VoI…9¼x½ ¼8Ìå*xñ8¼VÇ0àƒ„üÝöÁ€ò7v]\.\‡aÀ ù%ãS—ñI2> Æ¿ý#… ƒ™vêÍ6q/^¦ÇK/^‡×ê|¿Û¾#ðABþÆ® ’ëÂ…ë0 ø !cã;ÂæÌø$/„MƈƒÓy/^£_×ê-Š8‡'[E¼øæ:¡ûb{yò8Äö®þ Ä61þˆív®» b›öýˆmÚ÷ ¶IߨnÏóî‚Ø¦}b›öýˆmÒ÷G ¶ÛÏÄ]Û´ï@lÓ¾ß ±]õ=I}O]}ObßSWß“Ô÷ÔÕ÷$õ=Á¾gôt¢6T@™5òw«Ž`À ù©·0àƒ„ü’ñ¡Ëø »Œ’ñ±Ëø$ŸºŒO¸‘·cm€¸ {»V¯ó¤^üȨkxqélÚ0HÀáµ:†$äï¶ï|¿±ë‚äºpá: >HÈߨø(ŸºŒO’ñ'Èßçe5j_ƒü Š«äo|»ãóúÊe«^!ŸßÄ t÷ù³>õö4±BþŽoò7;ªæÈßøDü-4¿¥× ÞÑ©‘¿Ï/E€}9Žü{R# 0äo|²ÿ)] h‘¿Ï÷Ÿñ®z­Ž·ØÅ]uÝ}¾Eˆ7>kõ³]ÐÏë¥ÉyÐg•éÜIôùÜÊæóbeC »Oh>/Ý §˜.â‹ÏjrÇßÔ|¦· $õØ¥žõðºFþÆ[/ò÷±ß^#ã­—ù{·|¦· zºÈ‘¿….räoJÁ‘¿….VÈßRPüéê+juV Ú"Ó8¯¿Iý Cˆ£ÈßüÓ¿Ÿ2þ÷a<ŸQò77ž!KÆ«ãߟ3þVáò7‹YŽü-O‘¿ãÏF†€Ú\#ÃRÅ ù›=àÈß(ÿ[Çײ+äï+ã[³ò7t]…ü]›U«_Øøí~9ò·d#EþmüvmãÊ÷¯ý@²=Ç•O1íè‡úëÏï¾Nµ-›TùÌÕ¹U_#E笑Ÿe¨rŠaî4Ñÿ,‘ ÊéhÕ_!ÔW•ÕÉLð.©¿Kê%ŠT94A½„€*§æRëÓß €·Nkj«¾꟒ú§¬þíPÿ&©ÕòEgÃËné†„íØ Uµú%†ù}4楑S ó»i1ÌK#§æ÷6Ra˜—FN1Ì¥F†ùñ Æ0ßÔ«77`€ïÃ|WÏRž¾vŠaè¢a˜ïêåïºõWò»<©:ïâPa˜SÅ.ÂF¨ú‚öíšÐðÍ¢ütQj]ì"Uÿ^©s sØúG± t‘a˜;\‡zÓEð}¡¾öVB, óÝø·Ⱦr0ì"ð|«þ@É_u±¨Ô]¬0Ì….Rãå.–ØqN‘éFL…a¾©ÿWš‡–žý,Å0ßÔßÄiìOȆù:]a˜ßÝÇ0/œb˜ßÛH…a^9Å0¿»Ža^9Å0—¡æl1Å1ÌŸ‰2뿉Üõ,ų(†9•¦íCý{3²(†9ž8˾h„a˜ãi¨ÿxûè± †ùõ´ðv2?R s‘¦¨T3T‹a¾Oplÿ½£fç]´6ælË¡Â0_ž-À¼Ì[½æO¯ñK(†ù¾o‹0Ì/?Ç0Êx#Ï0Ìù~ Ç0¿4þÃü)ã-0¾Á0'ëŒÃüÒøs sh| Fÿ"1_¡ S sºIQc˜Cãû1ÌŸ2^ã sj|a~iü9†ùSÆÁó ü X€a~iü9†ùSÆ[`|ƒa^bÃüÒøs ó­õf\Roz—»Â0ßÔ¿ªÎû[X7à2ê,s Ç0ß[ÿêj½Á0Zw7Aë †ù3­ ­çMýíx¾ê{ƒaîÐ|\!-³GÃܵã²O}!—¶”5NtŠú%†ùÔæ{#çæw7Â1Ì÷FÎ1ÌïuW…a¾7rŽa~g#5†ùÞÈ9†ùÝ/žc˜ïœc˜»ÿÅ0çI8Ã0ßÔkrŽaN“WŽaNÕÝ]Cc!whô Iû8.h1Ì7ƒßÑ[í ÇÛGmIEg5!wø´·Þb˜£Ö9Ž·#Ge)¨²„üñ¾ë;ûžk½Úw,VòÇû®ïìû¼²5JÃüüœgAÒ.ÿn2€¡Þ×,ïä‡ÞF¨1Ì9† .y†aŽ7Ž`ëêæÇ`l¢æw¨Ï™§‰qÏ"V ó»Ôç™ßëúV ó»Ôm2±@ »»Õ}Ô:R8h? ç@ÜÕÉP…aî‡A‚ë.á†7u€wšË5†9U÷:*‰L¦VÇ€ÌCŠ8qÝ#(âþ¸¬õŠ8iýqÒú#(â¤õGPÄIë'(â~6Gg`GEÜÃ3PØOÅæÇs±ùñ\l2×Õp݃„Ð]$×… ×á$„nÐ:€ë$„îVý±Ðf®K’ëR—ë’亄nÒw3Mºi)_…Ðí‡á˜ióB7ÉN*„nógÝ jYˆy†Ð]£_c×ÕP؃„~]$×… ×a(ìAB¿n[GP؃„~ݪwǼìº$¹.u¹.I®;A¿&Æé¶Ä£B¿ÆQw‚~­ XKQÇ ×C|µðï…¯^\/|µð!­à«søjG2<_|_M­ŽQª‡üiÁÁ½øÓ‚ƒ{ñ§WøÓÀÁ-þ4¹&WáO#ŸãO—ñSÔ1ÌôÐ |€4pð=ÒÀÁ@z“zD×*iËPH ßµiëkuŒ=HØÎ¸ïAê{¸è;z$lç¶õÞ/ˉñI2þÛÙû 5 ò !ØÖêí{çØÎdâ«°…ža;ר͵:Æ`$Øå¶ïLw`—±ë¢äºxá:ŒÁ`^!‚{yïr] Ì‹WʘWtÝËs®{yÎu/ϸ.W÷×=†.K> ]–{ ëÏŸ"ëzãu  ;t`Û’¾?‚m ¾é¤ï—ض¤õG°mA.×´žºZÛ¤{ë¤í`ÝïŠVb ¶-YhWضÒ˜Œm«›Ö1„í ÁÎ⾩ïá¢ïƒv`gÛÖí ÁÎbã“dü ì¬?n´äÖ¢¾Â©` ;ëÏÕ1ºìÐKŒ7–¨GI=u©§JÀÂ\»‚­Á5kõ–áŽÃΖÕÀÎÂT£¨#\¬ƒúnWag/qcÑÎ帱¤õGpcÑØ¸±hçòÜXá½3üP¡ÞlmU¸±å½7¸±8ÅÜÕù{ßÞ¼©ÕEÜØKàWá½÷¿Â÷ÞüêËd¿ ï½øN¨ðkKZ«·ø®ø•,Ú+àWqm½5 PÕZC¤**P©ƒ„ŠÚª#ˆÔABEÅž’çÃ…ç1Dê ¡¢ }RßCW߃Ð÷ØÕ÷(õ=öõ=J}]}RßcWߣÐ÷ÔÕ÷$õ=õõ=I}O]}ORßSWßeˆT´‘>Tˆb5zi«Ž L ½©·P¦ƒ„^Š’ñ±Ëø(ŸºŒO’ñ'è¥`'¼A±¬¡=kõúk]£—‰Y^*Mç6ºÇ‚mwÔq5°hÛw„2:HÀ¢ØuQr]¼pF$`Qlü Êèù5ËW§Aן”Q|~ùy}3¦U¯PFÏï}àë(&ôüZBŸz{ˆP¡Œ »Á e”$q”Q|‚X£Œ 0”Qé5ˆ§Ð5Êèùq"Ø!á(£¸'5ʨÐCÅoŸÒ¹]‹2z¾‡wku¼Ý(î0˜ÐóͼU«ŸíG}¾ý+ .ÜæÏjòÀ“û|‰A0 ÷RP’z:Wo ¨U¢÷Ó¥ã‚{)¨s &Z:Ö¸—»ñÞr-õÊÌš^qÜK¼:®p/)t2ǽīã÷Rz½}±šwC­ÎªZÜK:Ê*ÜKr!˜¡ŠPÜK>Ù1Ü˧Œÿ}ÏÇ8ýäÆ3ÜKÉxÕcüûsƿú‘¡Â½d1Ëq/%ã)î¥`üÙÈþjÜKXPá^²÷e$[Õ4¾Â½¼2¾5‹á^B×U¸—µYµú…ßî·‘ã^J6RÜKÑÆo×6þ§|âÛƒ¤Üg€{¹uq¤ôheôŸò«¿ö}³F~–à-)îeÐDÿ³D:€·¤£AT…å‰\ýUV'3Á»¤þ.©—(ð–4Òõ^Þ’â^J­O£ú5Þ:­T©ú~¨Jꟲú·Cý›¤þMT_€+ c±¤z¢gƒTÕê—¸—÷5Òà^–FNq/ïj¤Å½,œâ^ÞÛH…{Y9Ž”a¸—ǃ÷rS¯ÞÜ€A![ÜË]=KúÚ)îe¤»8 ÷rW/×­¿’ßåñHÕy‡ ÷’Ú(v6BÕ„Hßìtm |iDq/K¥ÖÅ.Rõï•:ǽ„­»@î¥ÇÁu¨7]d ê+È[%dÁyJƒ{¹ÿö!‚ŸV†]žoÕøÑ«.•º‹î¥ÐEj¼ÜÅÛ Î)ŠÝ¨p/7õÿJóÐò °Ÿ¥¸—›ú›8½ñ ¹Â½\§±+ÜË»ḗ¥‘SÜË{©p/K#§¸—w7Âq/K#§¸—R#÷’-¦8îå3Afý7ñ£Ñ Zz ž¥ø ޤRb#´}¨oFŽÄg9a0ÜK<-õo=#¶Á½¼žÞNæGŠ{) ˜•j†jq/÷ Ží׆Â켫3P¯÷’m9T¸—˳Ìy«÷ò)ã50~éŽÜOýîå¥ñ縗Ooãî%ß/ḗ—ÆŸã^>e¼Æ7¸—dÑà^^Ž{ ¯ ±ñ_$æ+$:Š{I7)jÜKh|?îåSÆk`|ƒ{I¯q//?ǽ|Êx#xžá^– p//?ǽ|Êx Œop/ËB à^^Ž{¹µÞŒKŠýH/“V¸—›ú Ænà ûó‹;…ã^î­uµÞà^ÂÖçFÖÛauë îå3­áÖóž¾2°ï î¥Góq…ÎÇqÜKߎË>õ¸RÚ dð‡8Ñ)ê—¸—w6Rã^îœã^ÞÝǽÜ9ǽ¼×]îåÞÈ9îåÔ¸—{#縗w¿xŽ{¹7rŽ{¹<¿Eq/yÎp/7õ¸’ã^Òä•ã^Ru×ÐX+=ýC_<Ž ZÜËU=£/’û¶ ûчUcpD}?/§ ¸õ÷µÎ±¯É¼üp>1ÜËÇû®ï컺٤õ¾õ¹W>Þw}gßÕ͇öMÍ÷ësž}±ü»ÉÕlÖRÜKpϠƽôGb¾’(G°õY=kîåêúæu ý¼K=¤1j†{y—úœŽÆ»;Õçï«M>i‚@†á¼±:ªp/Ã0HÃ%@Þ¦ ä¶àq-°Æ½¤ê¡QG8k*ÖêBpè@ž$®{y2ׇAž$­?‚ž‹Žç¢ƒ¹®†x$TGìº(¹.^¸ÇÐ ¡:‚ÖÄã ¡:¶ê¤†SH!iqMñ†áœB\Ä#ùW8¸0Äã]±VÇHŽƒŸˆ]Wc)|"v]”\/\‡± >±ma)|b«~¥H¤a{á¼ÂRį÷ K±#u ™8t€! Ÿ†^0DÁC¢à!†èÉgŸƒ!b€!ª2¿uŒy8t  êE3ªÕ1háÐGJÆÇ ã1(Þ á൭_€âáÐæÈnáB0P¼€£cWG xÂjÕ°t8´9®\W×ö½ŽµŽÁ놼:ô¹­AפÏí®Þ|U+¼:’ËUxu’çõ=_#ÆaÏsÈ·J®í{÷v jãÊ PrÒr‚AÉ©` %‡çã3(¹¶uŒ7t`ÁIˉN,8i9Á±àq@3‚€SaÁaq,¸ª¬VÌMÜ.és»«ï-˜^(p07±ï/Ïõý噾ç*ÈÒ÷ÇÉÈ„ ɸëpÝ9[( QEƒ® xh¤ïà¡ éû%iý<4ð±ß['°Zh |&Êc<4²‚¨ðФ%´Œ‡VÑq…ÇñÐj¨2Ü÷(õ=^ôã– TYÛúnY8n$诂³)A‹[ÎÕÛ× L8ÃNpË6!x²AB$ÃêIR?A$ƒÙT?*\¢Õˆd%´D2øÁ;C$ N×êxlÀÂpߣÔ÷xÑwŒ6H`amëÈaÂûéEÏÂKè 9¬¼Ÿ9 '$9ly?ΘZ„ ¨î{”ú/ú޾ Ô«mýá N=ý8Sh5Ò |‘eN…ð%­FÖóµK¬åÑã(W»úƒ(W›ú£(WÄó \Ѿ?€rEûþÊíû(W¤ï \Ѿ?€rEûþÊí»Œr…v°† (*ÀBªŽÐ¨ € ©·hTƒ@…O’ñ©Ëø4*°Õ@*ÕPMµzý¨Ñ¨ŽrF%M=ë5BŒ3U«cÔ¨AŠjûŽP£ ( ».I®;Š:¿Q¢7@Qà¾P…·Å?¯O [õ (êüH Ÿô¤§ó£>õv÷®ŠözPÛ]å@Qx÷»Ša@QÒk7j ¨ó­p°tä@Q¸'5P”Њ›џÒ^v u¾M€7?ju¼"n~¤§óU,^›×êg õÏ·…¡Ñ‘÷YMJxÞ=0 0Ô A@ ê ÜM®ù¯T¹Ru¨7 ‚ íE,P‚ú± ¨ñ vìÓ != ê]]äxPB9¹ãxPB+<(é-RT¢jz µ:»SØâAÑÁTáA‘ÛC¬Ú–âAñ9áA=eüïÃx>”7žáAIÆ«ãߟ3þÞæ*<(³J2žâA ÆŸ §Æƒ‚·+<(ö€ãA¡ÄcmßE¨ð ®ŒoÍbxPÐuTmV­~aã·ûmäxP’J´ñÛµÿ)_òviàšöYàAm]\ šZCü§|§êz_#E笑ŸeØ'Š4Ñÿ,‘`ŸèhÕ_áµ}®þ*«“™à]R—ÔKØ'i‚z /ûDñ ¤Ö§¿Ñ­rÞ:½ÖZõýPÿ”Ô?eõo‡ú7Iý›¨¾:-:öP;H7T¡À©ªÕ/ñ îk¤Áƒ*œâAÝÕH‹U9Ńº·‘ ª4rŠ%5Âð Ž5Ô¦^½¹ƒ%µxP»z–ŠôµS<¨D÷QÔ®^þ®[%¿Ë㑪ó.µQì"l„ª/ÈI¡ÙÚÀ’ø ˆâA•.J­‹]¤êß+uŽ[ÿ(v.2<¨€ƒëPoºÈÀ’.ÔWð“JÈ‚Ý÷j7þíC« »<ߪÿ°\W],*u+<(¡‹Ôx¹‹%¶AœStºPáAmêÿ•æ¡åAd?Kñ 6õ7q{ãr…µNcWxPw7Âñ J#§xP÷6RáA•FNñ în„ãA•FNñ ¤F([Lq<¨g"‚ÌúoâG£Azò@=Kñ½|ŠE¥ÄF„iûPÿÞŒ,Š…'β•axPxZ ê?Þ>zFlƒu=-¼ÌJ@÷,*Õ ÕâAíÛø­}„ÙyWg` Ûr¨ð –g È óV/ÔSÆk`üÒŠµŸ#<¨KãÏñ ž2ÞÆ3<(¾_Âñ .?ǃzÊx Œoð È:£Áƒº4þ _û`ã¿HÌW-ŠnRÔxPÐø~<¨§Œ×ÀøŠ_ãA]Žõ”ñFð<Ã*àA]Žõ”ñßàA•…Àƒº4þjk½—‰^Ò«ð 6õ/.n:˜HÌ)joý««õ ·ž[A­7xPÏ´þ%´žÇu‚}oð š+ÔöˆãA…v\ö©/€NÒV ƒ‰NQ¿Äƒº³‘joäêîF8ÔÞÈ9Ô½îªð öFÎñ îl¤ÆƒÚ9ǃºûÅs<¨½‘s<¨E üŃâI8ÃÚÔk@'ŽE“WŽEÕÃ]Cct hô •è8.hñ VõŒJDnQ2L¤pVi£Ý¾j_>mÀ­·xP¨uމŽE£²³v €N÷]ßÙ÷ymé£õ‘:=Þw}gßõm ÊZŠu~γ …cìY«bQ''8ô:AŽéÁEeösì*À#غ¾y£CRêu“ïèfeîVI—;‚+Ôêö6ÎŽÛÓ€ê.u“Œ) S†sP£êd¨ÂƒŠÃ A —°5›:¨ eˆ?ÇżŠªÇF•.šP«c`Ÿ¡‘‰¸îD¦xÜ:AdŠÃ`…8"«/æˆLqžzêý|<÷~>ž{?Ìu5ôÑ ¡a×%Éu'hGq dE;¢ÚQ†g {ð‹«ÐŽÈg¦B;Â/£­·ðÇFƒ ’v] +4HHBØuIrÝ ’—Œ§½,\! a×a$¡ýd­Žƒ†( aR© €„.r( @f|„»xTl,êñgèÀòºXaù€.¶X>äâJ…僺(aù¬], ¨cÈž¡Œt€ñÄã~ñ#€4xЍÀxH¥ZÆ#L'`<%q(êsgprpß“Ô÷œœx¤«5¢Ì A™Ôê€G“áäñSáäŸE†“S#àÔêÏf lÚ¾_àÙÄa_®<ô&{ˆãÙd„ ÏFðó©‘jjuŒ;3HP3mß/pgp uC·Dx÷¶Â!}¯pg„ïé!a°ñI2þGÇ5‰ê©“AÂDüzwu  ì¥VÇÐ-ƒ„ÖÒöýºMÎ5þˆ49ïêÍ\A·ooÝ"yhN‘ ”¥VÇ+ƒ„ªÒöýbEʳÄÊñ…®!Vðq±¢KRÔ1’ÊБ"åY#Eè"Ç !ÕöF î"ÇH©@jõÇANî2¾9Á9yÆø\‚SŒ ©ƒŒq€ÔÁûPJ@ßOQJ¸ß]?Ô1ÉÐBúþN˜ßö¾´ ”_ß•òƒ'„dPNˆ”žË8!{}סŽá@ Â÷=I}?ðˆÇ%’ìb@ÈIø4´ñ\,CµuƒÎQ«?ŽÁ?‹ý80­¬18JØ4pB=ÁàPÇš²¨c¨A‚ÇÀ}ORßOà1×õBDàŒ¼‚Ç(®kà1ð·è#¨F£` rî{’ú~‚\G\?~JÆä ’åUÈR26'4CøÃòèqô†]ýAô†MýQôâùGÐhß@o }½ö]Fo@ëÀ¡@ˆðZ*UG( ƒ¬€Ô[”…¡X,ät€u V¯çŽXá˜ik`id8yÝ@ ±®a®1Ú¾_ œBÔ•W 8 kð>ÊçõF"Þß$ç»l}êí"– \§«8 ¯ÕqF.&á¤Üý<—Ãj­~–®~¾ý+¼†.Ï*Òð`: áqQü ÕÁ×ê-„´J=e­ƒÔ ‚^×üÍ—¿®ƒßåîƒTá^«ã½2Ðø\á.¨S¨=4¾ªp—E¨*ܯŒoÍbîÐuU…{mV­~aã·ûmäî’´Â]´ñÛµÿ)9_›þ±âó}Vî[—âóˆ’Äÿ”oKµßÞÙHÑ9kägA V¸'Xó³D:(d§£AT…‘¸ú«¬Nf‚wIý]R/Q Ùi¤ ê%¼@!;­p—ZŸþF·txëô*CÕ÷CýSRÿ”Õ¿êß$õo¢úR¢¾èlÕÔí Ýê¤#¤ªV¿¬p¿¯‘¦Â½4rZá~W#m…{iä´ÂýÞFª ÷ÒÈi…»Ô«pä64¯pßÔ«77àòï¶Â}WÏR‰¾v%͸‘V¸ïêåïºõWò»UQç]ª wj£ØEØU_jÁc³èßÊ¿ùª…V¸—.J­‹]¤êß+u^á[ÿ(v.² ÷ˆƒëPoºÈÊ¿/Ô×rÎJÈ‚]º¦Â}7þíC„9¨ »<ߪÿ@W],*u« w¡‹Ôx¹‹%¶AœÓzYºj¯*Ü7õÿJóÐò ±Ÿ¥î›ú›8½ñ ¹ªp_§±« ÷»áî¥‘Ó ÷{©*ÜK#§îw7Â+ÜK#§îR#´Â-¦x…û3Afý7ñ£ÑÔ®{ ž¥ø~'­p§Rb#´}¨oF­pÇgÙl° w<-õo=#¶©p¿žÞNæGZá.à•j†j+Ü÷ Žm Ö¥ÊÂ켫³ò½¦Âm9Tî˳¥l“y«·Âý)ã50~é­pßÏ’P…û¥ñçîOoãY…;ß/áî—ÆŸW¸?e¼Æ7îdÑT¸_^á¯K•±ñ_$櫚SZáN7)ê wh|…ûSÆk`|SáN¯+Ü/?¯pÊx#xžU¸— *Ü/?¯pÊx Œo*ÜËB T¸_^á¾µÞŒKZåMï°Tî›ú óLO*Ü™Sx…ûÞúWWëM…;l}nd¿ÂÌ[o*ÜŸiý ·ž‡uð°ïM…{DóqU‡Ëñ ÷ØŽË>õ¥D]Ú d…Î8Ñ)ê—îw6RW¸ïœW¸ßݯpß9¯p¿×]U…ûÞÈy…ûÔî{#çîw¿x^á¾7r^á¾Hߢî< gî›z]¢Î+ÜiòÊ+Ü©z¼kh¬%êþÕYÇm…ûVÂöû/zŠUyÇã°Êú8î9ÌZ¢ñin½­pG­ó*ïÒºÏÕª´®Ÿë»¾³ïêæ£.7¾×õÇû®ïë{>å´Úïêï×çJø“ÊǦõÓÇ\ä—ŽCÀº–oè` SD[¡˜ÎÕÛž½A ÚCRfç·Î2»]]äé®ßOSbGïY‰¡f%†Ûû9«$|ûGêbO9\Q©®ë.6¥€x‚:),;!‡úiÅ_®½‚!Ø_8†¾RMÉùüU%{ÒWÊù5/ªÞ–G—­íê–­mêek(Ïúy{Ó0t”—D©“|öP¯ã±./;FY]^&¾E ʼYyÙçÅbh8‡gú¼øšˆßÈZ0‡óúüÏ‹‰^ü|Õêg߲Ϸuà}’èƒà¨xºb%C (žì*PÔV±€âÉ®®~J¤P¡ËFNã)ØÈiRþÝßlJi?z'§ôº.ÜIdèj›öò‘µp'Áý!ØúüƒÒ†îÜ¡înÑjß[ wîP÷sâ:–Ýõpç.u§ƒÓŒšòõ°\áÎ)Ðï¦õ7æ?Þÿz%›·ô«4g,Çú%™#©¿mêÊäò¨\äpl(r¦ê÷iñPyùç×ç´KÙ|y ,­òƒb–šW-FyݪÿûûÏŸ¥ss^­9àËï¼(VåúV4.„Výw^}ªãH¾¢°9å¤GÚŸÍ$#îpÖÎGaÄérù*z·–¼¬#N—yJ%o•0⊇”Žq½*»Ž8ÍFœFÜ*Ì<°²ï·<˜Caˆ¨FœÞMLÑø%„·§÷ÝdíŒÚoèÔ#N·#nÍ=èƒÜ}8âöÐÎã2²…c(–Ñé±5~—<qÇP,ïÝ«L² #e¦+»0Rvaº² #e¦+»0Rva®²‹e\šã´O…¥$vŠlé®Mû[Æ¥©Çå>Í1ã< F4âò¸4åéöTGSʬ3è¹ ¬"•Yé—…ì6–J¯æœ~ô­ç×eØrÕcÉì—ü|œ}Š¿qß7©4ÊÔè¬:Æ’Ùƒ6—'µÆoË짉~þÊ8WÆ’©ÆqóÀ2l`­Ÿ‰u,™òõ²Á‹ß¸bcrÁ/_·±Äš·Ò7îxqÑëå½ocÉv}ã¬ô³]ß8+}ãl×7ÎJß8Ûõ³Ò7Î‡Ú£Ö ~ãØv•^óùe,Ù®oÜî85¯–Ç`×Ö×±dË6™µÈóëÀ²å½ÇyŸŽ±d÷±d’qè¹ ,ÒE—’ˆm,Ñ~݌ß +}&,‹9g„ÏD1Þ&ƒ>¢¹?›´>–ò™°<š…Ï„“>®ë3á¤Ï„ëúL8é3áº>NúL¸óÏÄ´lûÓŒGк® Ýý3'¹æjÝf_ƒÖížWÖ«$eV®dz ÉAëÊgbN*½‚Ö‘qi ZÖ¯›´N Zdz'm1Þig—"å-h‰ñsRÚÄüv–Û¨Žhv]‹‘â`2°Í;k¢öÒDí»&j/MÔ¾k¢öÒDí»&jßLÔK4³}vcÎm¼”Ûu¥ÓÍ$!·)®K:¨DrOv]¼qBnãËDísê;Dóœt€Ùf mÖÉ›/Ñ컲 ϯš#š‹Y.Èø5´ý±Ši¡vÞ¢ÙŸ¸-´=¸&ôIÂqçüBµ0Qi¢]u&êÐ5Qi¢]u&êÐ1Q3xS‰:tMÔ»Œ›»>‹é#š‹ë| ÁIu8öWT\.hmÑ\=‡„´éŽ«SÁsDsàÑŒ'ê MÔìÁÐÆüÚÅF¯œ]á Öhe+MÏa£„‰: ë{9š:òm&ê MÔ±k¢ŽÒD»&ê(MÔ±k¢ŽÒD»&êˆ'j~ÛÊ u”&êÝ%ó—a¢>X¢uˆ!ÑK=R¬ ×ÐŽÇÞÅüzÈ"4Ñ<§=I˜¨£0QÇ®‰šA5ZG–Ŭy 8š(LÔ±¬ UtËT‰¨ŠÄì"JËÀÔ´I ÚÔ´I ÚÔ´I ÚÔ´ ,—r·ÇŽãMØxa·`ÆÛq`C€˜ßNo*©ãÀæRý÷¯oÿÂÖ—cú 8éX§ºhzë¤óƒ•|¬óÁ[×Û±Îüàÿ’ FC×-§BTÝÄ]ýõÿ²ÑÁ#­©j=ÜŽã¢êA«^!,Z÷uúQ× ‡Jôæ×8–C%^h£…¹.Is­á¶¡\(kæºT>Cy¿Os]*Çë>ze…¹.퓊òήH×¹.÷Fæo†´á–„¹.]ÌuÛ”VZ÷) ¢Õ6‹¥}›Wÿå¼ù@³VÌ­)=ÉGe&¤æ3ÑÇùõŵmm[‘FÔÙŽˆrH½.ëPVû*ŘT Õùf^×?xØz{/\¯êík Õ¤n;Ô¿¤Ö¿ºZÿ’ZÿêjÜÅÓVWšûsV¥›êÕkŸß[B—Ö¼WíR¨¾u¦|ŒËžUsSLÅåÅ}ûõùó¯|}ãû¯aù{yÈîOäK7» ÞÔRÇÁ¥×·œ ÄVŠ]¦Xïs,H¹\ŠÝ¬˜ão#h‘Þ¬0³cÌÜbj¤Ø5‹å¯v±kË…–ìbw.)³Tìéͱ:ßDž çFË~lº-ÛO@Ê’í;{K¹²¡sýNÂRl]n–ѤÂö<œþVdÙ±$Å>,n© ‘s ‡0ι`ÀRû9ÛlWöªÃRû Bšcb»U¤¶±áòöJùÃRÔ_Î, G µ/Ð\@G¡{FìüÍËR›¿\¾ºV [0†4™òçˆÖXjóWr·Ë|<–"sIš£Ghq‹¯ÑÜ¢Ý0.€”g_“›`×_sÞ¨óo),µÅ—2§R©œgŒaö—³‰.®Ï‡1b©Í_ÆÝbFuJXÊ–Ú#ë,Š/º)Ÿ lÆ"ÄR4¾ìx¤ýRÜŒÅR„> #¶9,µ/¬æ•‘Ε$x^Õ凿9Ç&¥ =â½%ƒ¥l¹ô—ˆâžỎkšÓ›1`)¿Ÿ{-3Ó(´¸o…„yõÇ6Ý™Ðñf”,µçv)ñŠ_2¹œc©Ëù‹ž.Êó=µ‘ç/¶.Î_lcQœ¿Ø8ÑE±<±Ë@ËÝÓtHZ¤2š„¥,9ù³Éz,åèi7ún³sõ.ª¬DÈÆQø-JL’¢ XŠVA«„¬£Ç_ŸÌ_)j‡¥,ù©9-¤¹U ç/vB²‰,ÓœØ&^˜gòà$)VѤ—C³¿ÿ/•úûׯýŠ£š£ãj=Ú²´ùû¨LŒQø­Õ«:abX÷ݔݦÁù«à­_ªŠ€”Û¦¯ñfæŸ)¿ML&ÜÆel©°¦ÎnŸWtR‹«WÑ©Ú*A*m¾|c%Œªõ×?<žŠÁx,µÅjœ—4.®L@j»"3æL xõŸc.TóWaž0GIÊ•}‹æï`—ßbÂä rã(H…m57Æ š±TÜÞvþ¦Ío@JÛgÈd¨w¥Ûøš^ÙEèùã®ÇRº|;ŒW.F,µÍÎfä¯Ej›|þvä…–rGF>Îßá·È æo¤`ý6Ì+Ð<6´ð[±d¡cœçû€¥RÉ£ófÉ`¸Ôë_Ÿ/Ä«ùÖ€ÑXJ—¬Cë—¯;2%SHnΚ„ßÚóB3;,åJöhâœ×*,åKþ5†m] ¤B‰‰¹9­OìË:ç>,µ·çQ;ŽëÅêjžøýF×î¹bxu‘Ò´Pm͆€Ô~92Í “IQø-KkEE)G63n*R{ö8íL°T82ÑÑ£÷¸H …èBú˜ÊþDtÎ,-~~©÷Ÿ¾ýþ¿Ô­ù’‹ u¸5ÚÛr-I™}ÓÄì9&’²´ÖÙVêÇÏ7f× ]‹”¦¿µ|a”aW´´ ůßzùõ“Ù¥×ú $EîsÏk++Hº†ìúûßþ†jq‘ÒÛÛ¤H‹ówT RÄ* ©ÿüÎßP 7AJïó}ðÛIv™|©TÚìJ7·¯æ*©ïŸ?¸]sô RÄ_y ¤ F+HYº7¯Ô_¿«ˆžçsAоÇtó‚±k\÷1‘”¥K d×ôRÙ#g‘ÒûMz‹”¡cÖI-2» x?¦ni‹ÝͶZ’âÛV²¬€Ù¢(üªfLw¤V»¢Ê9&œ )b—Y+«‘”ÝwN˱ãÉ.Oc5€ßzù§CÅê"¥Ù’¤¸ïµ e˧}ÄcûãûT}ÒMbsá‚gƒ¤èW! ë)Ë.À€¸ÿýù­CÈ_‹”&ŸŽ[Š‚”Ùß ‹Ø‹”¥Ÿ4ôE^¥›É ¥‰·Öµ;’b'Bh¾_¤,»{¬ÿ÷Õ\ˆ~k‘Òôóè ÅæBí)úM»¡ùëõ¥Šûµ2I‘øš§h/H:™-H±¬ÅÄÇÏÒòîœ ¥ÉÕÐ[H‚”¡‡£$eYº ìšþ­r¯n‚Ôa—5p¾_¤ ý ’”e›>hžøýoå/_‹yF£±½Hñ,- R¥x$ó×Ï¿tÌ‹ÍM<š™)–›D-H±ÜĢܷޝ€¾?x|å%¤XyÏ(ý–-«4Á_ÿü¯ò—Gv-Rô;ä]‹‹/#Iñ¸wèmWvYs¤4s„¤¶ùÞ‹™Õ"ÅÞcòì×Ê.” -R4¾Ês)_óŠ. RÌ®€V†Õ|W™Õæ_‹”aëG©E6ß´2ü÷wG.·Hi¶Ðq‚Ô¶ú· di‹Ë'Ðèøó½ÚKRzÿ°—Ó$eè× Íä‹󗃫ß:/L7AJ³ÉW Rfï³Û=$Åòœ~ëßß1» œ¿)’álh‘2ôÊʧÿñÕ‰‚_˜EŠF\á/Ræj<.R–]ÿvýýþ³Šhô…Y¤ô>Ó;…çœEÊÐÄ­~ÿ~­¾(¢):&˜Gg)Ãèã·O¾ Pe‹»Ø¬ ŲG‹rò©Ê'"šï)ÍË eö¹ËH_¾ï¼Eåà—ï{i1Yq -Rt• w}~Oÿð-…ûøÏÖ¢ç´D «“,uQ§|ª.HÙuúŠ·”£ÐRîø )8-RžÜ1„yá"ޱaàþÄ"»Q#üv,RÇq`Ú2¶ ûªþ|#X1jN0]»þª2ø™¢kãS+õ7/‰ù¬Iµû÷¯êß?)‚ˆ¾Eï]ß?Лps‹ØõÁnô¼‚iÏ;f©ß TfÎ~°~^á)³Æ™öägþ­ï³+kZ©¿~¿q©Qƒ>Îkd&å ²kzá¿•ùK€Ô¿ßùo­Äµ•Ôœms)¥¿~0¯Î߃Þ㜉©”)’=ô×oÚbþ:&à‰9ï ¾÷vô¨Å9gbÖG¥Ô¼ÂgÖÛà@äÌëm96¡ÈÉ£LÊ`ýœ3‘14ÎsI{ò3[ÿ~H…[>£Dþú1½0YC_E*ŒÕ97á£6:ÐÇŒ=G¥\Jhl¿³Ó­›×¨ÅùûÈ#gt`tÌ™ÿ-Ô7z¯6¿Ç86_«WMç/½T¿iÝJñù+î6SxÕtþZ.¥DZ)6åý/“T+Åæ¯[>¤Ô@ŠÎ_¹..&(Eç¯ Ìî­i¥èüµÎ˜ H±ùë6´¨@‹|þºY¥}l¥øü5/¿ÖÛE•›¿nÚi“€ïÙü•xlþÊ÷'ò¿tÂZïËURtþÊ‘“ñïÐ˜ÐÆÐ"¿ôÊ8Zäó×Íj7±ù+ÙèÁo±ù+³¨®Œ•›¿æoB ´Hç/7g¡ÞZ4ÒÞY¬fŒJô[dþÊà¸J‡ÆÐ‘ÒÉêEô/ö¶Rèm³ùë¦ìð›¿rIY0 îÙü5g&IY«tþšgò|e£•bóWfqµªµ~É¿tÙé Æ9•°”9ö…´Ñí.Ù*eËVÎ<•D-üÖqË"„à”ð[þ¨0PÆ;A*”kÆ«Ðî̯R[ºêã-Z•¤>¦ãŒµ˜grM>ÈÆÙd‘2ÇEÅ9¤]ÀR–Üz4ºÝÛ^¥ýÉa)Ëé1‚õÇm??'ÈAŠ%c0È_8Ýb° ùþo p–wa,Šœ¿´&‰ˆSlO V)[ö{‚7Á,åʆµŸgh#ü–?–ÚÆFe±Ô~‹'fòUc–Še¿Ç…9ãìÚüôb½RùëN·o¢/>jwWV){ìº1€¯è"åŽÕ½u½Ç,åË*-¸@Ö±H…á8›Ó: ÖÇr>9šyÒ±X*ÑCQ ¾|Ë:M“-D—°”9.·,ØXÊÇëQ-H·oçeZPKùòn‚m¤BCvþ¦!ßg©XVÛËÒJèc*gó§Jƒïö²bÕ$AΘ5Xêð—³É£÷øqTó,Ë€ù?¥Í)€ŽKù«¹^{ì %Vç¬P KÅ«ÆG멃ò2¯j¡õ¿ÜÊ jj,š ³”9VµV‡à°”=VÑúQa)G¶F…f“,u ¥ÌI´»¸“<¢¯U–ŠÇ9yš§¡ÅT^¶ÊP ¾ò*@ßk K™ãÚàÜG°îX¤ìqõËÌSŽÃR®œšè ÈÒ)_ÎÒõ×V‹T(·|æ4­­©X®tÌ €K¥r=ç¾f³o^ó—NNyAê£6.X,e‹TÊ寂Ô1ge–:æ¯95ñJ°+;nÎ%°ú]¤â±;aRò K¥ãBŠŸ'`×_Ölö—±ÁF,uÀv¦Œ/HþŠÚÆh°”;N;“ uøK¥GG–:ü5Çs+°EêðW˜×Ñ^ðÄá/¥üè€T^#ë#§9…YŠÀœ:;"»²Ôá¯y&´(ÇÌR‡¿Ì8GÁ.\R°sj°T8Š~sº*Xée£»RùˆÆq^‚Ñ‘w Žù>„Ù© Kù½òsžã±”-Rù®2šs²Ô8'ÁD,u`²ÍcÈ¢U@– GDÏHô†²T<":Dí„ÓÑsÒ¾|yßD-&àoý{䫹öi4(ÿÊRö˜sF;¢1”¥Ü1çhå‚ÇR¾Œ¡˜‚G£#K…cÎS»b9åŸ?h#š}'Bó=§µgCyéð—Ÿ?ChE‘¥ÍßЄæÂ,eËJÉ#H9r—|ÃYR‡¿¬±£Ôb8V³X¬Ç*ÀÏæ,•ŽU€£E«L’¯æS²¨Ð·ãÉWC†ð('ÿAòÕx[JÝ)wl¦Ï«_m±”/‘£sj"üV8"GkWø$_GY˜!ÿ H&™ÍdNaÀ{Ì»Šú¸òdçDZ2eM>'…õ1KÙ²*÷ì>b)WVå&ã„ßòeU®MÔQa©PVå&ιð[±¬ÊÕhÐå"uT»ÎKrƒö`òþª>ªa|Ð8'?ÆcšW¢Êœé÷‘¯Îk…yÙ)W"'Do“Т/‘Mµ ÊîóÑ¡7ôqpBé%sájî ~2ã<3Ù„â+ï4ë28¼ž—†K™ãL7àoZ–²ežˆÖÚ ´èÊè˜_¢û¾‹”/{>'iK…R]CJè랥b©´Ðs†)ÙuTëϳ—†û«t¿0γ´ÇR$ÿ²ó¯ ¿Eò/mK™R6îÄc@Ên |“ÙÍʲÔ_Æä{¢”ß~ÊfF íÔd©°Þ#Ï^µ²T\móÍYjñWô&WÍ`©|6§â«Ô°Ô±oµcÂRÇþý±Ծ¿Ð%Hyz[nÔB‹á¸eéC”úK¦0O«N),µïßÏ£V'­'ò)¥>öjíœo[,eŽz’< –²Å÷cÞäóXÊ•`²*¿åËØ¶1g:X*ß«¼ ˆX*–ûù£Ž#ÊɳT:Nð¬…{Èù¼–Ì_ó­³Ô‘…eI¥Žü+©ÌD„¥\I³ÆÄTª¼U>¥ô)¿Žªe5…¥âqQÙi‡ös²T*ò<ßhžÈ'×úØ'ó¨¤Ì±O>†–²ÇL8G*Ú7ÉR®diãìT´‹‘¥|Ù«µyc+b©PöjgÇ[å°T,{µ6xÖÈ„ÙÒä=+ÑÛÎgø¤Djþ5´îÈRÇþýìyxö›¥,)­±XÊ»>)ï*`©c?'_þ@1‘¥ŽýœQ„ãqe+f0¿~ýû9…+|›áðWÎWÑ&KþS‚+é,uœwä““ H¹ã^‡Iøüñ÷_ä¼cœ?É^ Çá¼uø”ò÷_Çxœçœ ÍH¥ã¤Ì[x²˜ïuP^±9¤–:ü¥ÜC ¤Í‹€è5–:ü´ÒVø­Ã_jÌ'1XêðWάÐ\˜¥˜qe6Ô uà:G3ZdW¾á¢É‘aHèË—¥ 93Œ0ëÈR–œF˜Ye)GÏ a^˜¥ü@ µ`W g†nú¹ÐiëS™ qpÝ‘ïúùêøKñ¥çˆÐ‚‰¯dÚsÏRG|EíáZ!Kñ¥Íü‰Z äŽÛñet&ûÂR”É{^-€·ýíàaÌ«_=_ߺ§Ï$ó­X¿tÏ9ˆ®­¾ÔAuAit—l‘ò%7ñBnòí“ñ äs|Áúx\©1³Ç–J%7™× |ù4¹ÿ•÷æÌÌäšÜÿZêtG“„»°Ç~ô¼îðà¤L“û_9ãË;[B‹þØS˜¿V ÕäþW>Ó™³ ©Åxl‰Î˰®Éý¯¼'ê_Mïå Y¡{ šÞÿš¿|\Ê`©c :YÔäþW>  ºã¦Éý¯¼¥;ˆPDÓû_yÔÎo[c©#¾ælÛ(‡¥,©QÝ÷%÷¿r¦ rVŽ¥ü‘ûºhŒ`×qßDeàaÁ®#¾bΆ»}û¼ y´¦÷¿æ‘6g0`ŽÖôþW¾;<‘Fïé…Õ̾šÞÿÊkeÑMqzÿ+×´sªéý¯y¤Í«&ä{zÿ+߯}ì:ò{7ǽ1øÆÿqÀå V‹¥ŽýhåÙ£¦÷¿æ÷8DѽmzÿËf¤cå)On=ztkS“û_‡Rð¹ÿµyn¸Ã@*e”ãüíj=pòèIÓû_KE4çÐû_ü:Ñ£÷Xê ÌU`Þb©ƒdmN«à™Þÿòº­X5½ÿ•oü›4 vôóâ­25¹ÿ•MÑzT=@î-¨°I¡ø"÷¿òæ\¨°¹_¨Lt‚Ôq¿PÍË_'Ô°óý˜Éiëû…Ú´sªÉý¯|Çm^3ÁÈ!÷¿r¡ÎÆz¤(°‰£ÂR–¬2u’¤]e4cÒû_ûJK²ÊƒOX*’U¦W^°+‘U¦…_dzÿkvW´cꇈ¿\°¨&ƒÞÿÊßÚäÐè ÷¿òÞv„ß!zÿ+#ÛîcjzÿKçìq BeNË(ØEüº5 éý¯!ß%Kh¾§÷¿fÍ¡Š*Ïèý¯\jà @ï-Û>Vºû_óyž&ŒÐâá¯ù{¬‚ð[‡¿¬óA }<ü•‰Ðè ÷¿r}šÖÓû_³ÔœŠ¢÷HïÍsô¨5¸‹¡éý¯ü†ô*½ÿ•·å¢wÓ5½ÿ•÷å‚÷‚õ‘¼ \±Dïå}¹àPÆGïÍ_… lñ_š¯fÔwT-Fïå*¹AAÊ‘Šë€Î·5¹ÿ•ÝmÆÅR–ê*ô%÷¿rõ€G%T’ûÑycËà BM¾È³ùB!;èý¯y<æ›7 K‘ùËk7 ¿E毈kðÈý¯e‹* RdþòÕ”irÿ+ï€;›ÐŒIïå©\ч¥ -Z6(g¢÷¿\&ƒB§nú«WðÊ*'üÖ‘OŒai‚ÔQß3UŸÐâ‘OŒów[ú­#ŸZÁ5½ÿeçLtNÊ–"û9FpƪÉý¯ì §Ð-}MîåýœÌ¦±”?îèÎ3tjbÉ~N>Ò¬'û9ÎÙ`©c?'Ìnµ××ó×<„Ì`Èý¯L#6†Q"çCsš†2rÿ+ßõÉÅúKù#¢MÒ£ð[áxÞÁ9‡ÜÿʯÑtcV“û_9¢ç•¨U¸Ò˜Ü¿ç) a)rÿ>?h,uÜg až~)rÿÞ£„ hrÿ~ž¤QCîåû÷£†{äþW¾ãfÆܼÑäþW¾ãáMÍîÍë¡×jzÿkÈg'Î õÛÇ|?„zÛôþW.O#šåèý¯ŒÃaÐí5MïåýÕˆn4jzÿk^åC·ˆ¥ÒqàB@c›ÜÿZ*7Œ…ëÇãþ—Ê“I0(K;î )£ y¬/÷¿®ðœt ñXî-?æò½'Á®°ÁJÍ9“ÎK ,×3¤qæ}ò‚TZ{òî¨ ôþWfúŠ "%÷¿òœ3æòM,Eê‡Æ¨aæ~ÜÿšG‡IK÷£MÊ›|X*7#f¯¡oíqÿk©èu³]‚TÙs9¨}ÐôþW¾ŽiнMîå?¿#…¥Ê}—A6P^Xî :f:ù\S‚¥üöKaþ*(ƒ¾0åþ—²6£ã&T¹¡Ëý¯y\x1¾Êý/=j—WÒ覸&÷¿æÏ¶š$š'Èý¯|óYçâ,e›ÏJJre›<¸û_zÌÔÌp¿ÜÿÊüVsÁI™&÷¿Ì˜¯ç(´2$÷¿L®1Ðñ‚Þÿšc5§|KrûCiôµ"÷¿–ÏÝ÷Õäþ×RãFd=¹ÿ•ÏNBTðœïî¯Îc{´ÂoER3Â]rÿk©À± õ‘ÞÿRE@Á˜ ÷¿t>éwhl“û_ù “œƒ™ûqÿ+/ù”•ð[þ¨‰ÍŒ´‚]Gþ5&cQLÐû_ÃR2 È%G½•Kó”) —|u^ÄŒKþ2s¶"–²d.ÌY–"ùêücÎc)Oî¦0ë ÷¿òé|€w 4¹ÿ•Ï‘ç壬?üƒ2(VÙý¯[Î&ÐMïe`œ9¤Žý—ï¸,uìçx£Ä=ÙöUpƤ÷¿V¶s#´ɾ¯Ñ™ÞÿZ6~ºÀîÝt¾îë±”!8H! ]kzÿkö½²! RŽ¢8YôM£÷¿æ7äô*½ÿ•ñ† ªçÓôþWFã›Wï‚'¢ùåLZa\â/­Êïéý¯Yj”ËÑû_³#æ‘öjéý¯e‡U@kzÿkÝ¡„§óäþ׺C™„ߊäŽ[€»QôþײCiÑoÑû_*ašïéý¯œÖ»֚ÞÿR ² ÜÛ>î-s¡3h…OïÍ«¹ù›0 øLÔ鸋Aî-sá¼4ìJ)Ôñ(³b÷¿æÕœSèn½ÿ5KÍ“!Êsèý¯9¾ÜèÑØ¦÷¿ò\-Ü&÷¿òPÓF -’ø2I)AŠŒÇ8Û%x"‘3ƒnÖkzÿk¹ ‡ª–5½ÿ•oÂ9¸š£÷¿–›ppÇÞÿʧJ£ï#¹ÿµÜ„spç”ÞÿZnÂ9%ô1’{p¹$K÷s’wëínÆÙÈð¿2Äì-Z)zëIÏ«mZO†õ”/¸Ø\tÝJq„#—¸A‹×G™´"UURlwظy…ìâ.jþ( E‘KòEKët¿EÎk3“\¾0×JÑSÊŒº Öû…•ÇfÈ®·À‘À%ãFð[¼ߎaŒÀ_¼ú\Ï-&ð†x͵ə•m¥ÈN³Ê7\F="‘ýÕL0ªF ¤è®bÊãë®O«d/-Ÿ‹¦u¨ß#© Ì7áæ¡~‹î›,€®å¯eÕbj=ñDÖÓ5òr18Ddý±2\öMbTÈ÷¬F¥Ñ'ÆÐ‘²6Úˆ"ú»eFAyÆ3ö°‹ßsÏ÷å4Šhv»;³‚;«ì›–æ¬c-Ò™ÜÞülVhPZß|ô2³Dá÷ >:ïà·„ï ~5¯l½n±¨ß9|ô¦Ó"0¿søèœ+„–…ôÃG/HÇ-Êô{=ìÌ{\ŠÁ¯ÎYGÃøÃG/™aËÇúÎáW×ài­çð«ùfÇšq)ϰžÁ¯fâ`…ßüªÍõ¨>zÙ…Ôäw ¿ºÞ_Óà=2øU›×V5ù¯nïql=ÁáW×óùö·8|ô²§Ûò#¿søè|aNùVŠÃGçìDû¶~5ãl9m[Ìçw ¿ºæi~¿Eá£3Ka@þ¢ð«ÛZG·¿UA>/If3û¾Ó ìËÇV§v&g°ùk5g|­½¬¼B¬ŒÌ\Š]Ñͬ­f½À¥h“omæd»•bp|s.g¶ý‰JŠ^B\F­3­]ôêݲÉ7¦6ÏyçÎ2øõºúåRìšU®ˆÛð¶¹»\”÷ÒÔʯÀ¥Ø•šÌehŒRô"Éü†¼rÀ÷ìúDF³11¶Öÿà^Í+…67y§Gåsj’S€öË÷^%0Aû)KÑ&£ªY£Û ùft©¸bcUï‘ ÃÝZ]ùž&0™ hC†æRô¸c¹ÑAæþN;ÏKùܽµ‹nmçÙkþðm¬ÒfXê(Ö™©C_4˜3ßæïuqÝœ¸·kd>,7I@Î;-aY’wZÂ’w½¸ï´„%{uŽç€¥<‰è9Àn1eÎæìJ•#Ö| 1$ÁúrÄò©›nï€×s¡‰ój!@)C¢pvà‘¢%,ùFöœ=.ZÂ’O ¬ñKù£tÞ h½Ó–|ÆZ€ ùNKX2ºTr ú–°h›oü« s>@_|§%,ÅÉFÝî ½Ó–Ìà§½jO›ßi KÆ@˜ç^`=-a± ê‚ko¸¼“–Œ×áóK‚ReË=St[?âß*WD2‡DJ &Ø÷1g¢gëAgÈž1Dü[Å_é–oYµ'ï´„Å„[ œÖ¼Ó›æ¼=zÀ³HKX|^•k­±]åLeŒì™I ˼vœçÂîßóL!¯š‚kwÉÞi K®vÕ¨*þ–°äUfÐø–°¨ES9Ü¢?Ê Õì/À{JKXtæDÉWþ¡Ô±…¬s–éq‹åJ`¾¯ò6RUÎdã–¶R”É;ó°X(EüMû˜ï´„e¡M6b)â¯dG4GÓ–½øKÅ#îç•UT¸ÅtÄ}ÈßílRgs" xÊX ˺ÆqÏJXÖ4ÀâßrÕúQC©ºÄ·Hý•·=”ŠL* v¥.ÔÐwˆåÑ>×+€›âï´„å\Ê‘£ŒŽíÉõ;-aÑùf—ˆÂï´„e™ ¸ÏôNJX2»eÆ.1AJX2f} ™ÜJJ„4`À·¶ZQÌiÀÈ~g%,ë6,øvЖµ(Vùž–°¬‡:vÄ¿E ‚ò5¥Â@7"˜1i ˲ Yõ–°ä}Ìg&¶¶Úà,”2´TwãXj¥È7'C ÿ–;ŒŸ3#H‘+ºc.sP*ÙÐ<ÌÀ —wZ¢bÞ{¨ ï´„eΆæT[µgs|•¹ì®¤öø;+aqówh^•G(eii wWÞi ‹Zêt@Uü;ƒ0ÎH˜O°›äGAª”ÄÚŒ¡g/ 2ßÚæ”"ù½ Ü$y§%,ËêWçЖ\FSðwZÂ2gäó§àG¿Ó“Q¦çµ–*GÒùD ! ¿“–ÁÏÙ¶ ¦­(©÷åb4¬th ËR…›¥,ɬò-j¥ÊxÔ¹zÜB|g%,ë%ãöžÕ;)aYÜ!$ÚwRÂ2øŒÀ<‚âwRÂ2Ä|xª\DYíºãfó®u€RrPGPÌßi K^˜T1þÎJXæxù; ¥ÊzÛfº9ƒ²4ZÂr…=@…|§%,!óüdZ:(U(©r¥^D;[Õ^mP¹ìJ™c7*奴‡RÅ_ã‚»ÒÞª{§%,&/†òå(U比ù;îÊ;-aqÏ.z¾wRÂ2x¿`4Zl=Éïsu ÈW«]ë”~”"ùÄü…;§¤„%ï“›Á,GKX2Þ¶žó/¥È~aæ lëßY ‹Ë·RP–FKXòö5jÄ-’ý¤G€:Ê÷ï}FjÆï¤„%çaNÝÁx$%,™ázT 0N¾%,Ã<Ýd<>?b»ü¶7œÆ›q1‚] al2»‹€áî½”° n×·\碰]iÛIsãÑ·ƒŸdÌy4BÚ{§%,yÒÑ) üž–°¸…í̘¤„%ïvºœÔz(U »¼í$Xìßgä’$üÖi9{bô³Ç°T0Î×H Ú—cg: •cˆ”° bµ•A滑Ũe¹ ª-Þ–93¬uwïÞK Ë¡½óž•±Xjƒ|ÖfÌaPŽYJXæcš]!þVÚ t 0D½Ó–ŒFïçèÇRt¿pŒ½mRÂ’9ÏÂõy§%,yçÁ8€eñNKXì‚ЪþÞi ËœËåj‹€NX¾Ø©n¦>wPÊÐ{ p¿Ó–­t6àß"$£Ÿ3°¥<ݳöYõ–°¬{Öh·€–°lo,öD¢{Ö¹(¶=uã§àù†4ø*°ƒ|­.9­¡”eó€Mö•,€i€Oç•ä}y‹vtY‰Árõ}kY‰A®PMRÒƒåRõÍ͈o¿~óÛEÃf¼A)½?Ï\¸H+µyõk×{ÛXjóêÎ.7SÛ[Á‹ÔæÕ?æœÜ‡yÁ¥6¯þ3¶ŸIKm^ý#ïçä‚¥V¯þ1òríƒú˜6)»`c©ö=¶^V¯¶RúøŠ¯¶Ræ˜MŠW[©×A¼ÚJ¹c¥S¼ÚJùã¼¶xµ• d—l÷j+Uà:ˆW[©²—F¼Êî¸}¼þV•W‡Å«µ”îúçcì’R]R=-N¯c—”ê’êiñï7Õ%Õeý[—õ]-N]-þý«Ëú_=¿õúÕ9_}¿e:¤ÞºZ|ëjñ­«Åé«ë uÙ5uÙõç‹ê’êû-ÜG6ûÎc»êcRšŸáçÚL(ÅiÁg1(e+©ö·þþ5Ö-ð[ͺJÕÖ(U[o ”½îã,å@Ùý™}On!ªÑ€Üd‘2Dj^à,E3Q=/Ô,”rÌô±ýÖ.Rž™V‹T B^ -ÒâÍy1Úfî‹T¢RèîÊçßoì=Þ\Ð-v÷"Å2Qø~)zÒ¯-`tX¤»54–â7IÆö l‘ ì‚ ÈM)VìêBÂ-Rù`Qò14çà,R†^ÈA½H±•Μv(å¨ÔN2)_Aµ{|‹T`+°±=ç[¤¨¿\¾¥¨¿¬^O¤ØŒùò}ê˜}g)Ý%eº¤l—”ë’ò]R¡K*B)¾úöú篟T&ß¡€RÓÀ¶DÀéÖ·ßÿ~g¿eo`/-K±ßÊ{M­Ô¯¿_~r)pŠ”¥Øoe6¹VêŸïÿäRàžU–b¿•‹¼Z©¯¦ê·À*3KUv]Œ¿^Þ˜]™Ù<@)nW¸% õ‹÷1£^@©Ê÷àL篗×ßì·ò®.”ª~K#©>~^Fa–â}T7ä¯?yL„¸˜¥Øo团ȫ_ì·2/(”š¸Wáo½~Õq¥xgË€ÔwÅã+Z,Åã+¸FêwÚìœg'«”í’r]R¾K*tIÅ.©Ô!ůQÊvI¹.)ß%º¤b—Tº’ÊS4K‘çD'`)Û%庤|—Tè’Š]R©Cjbž¸†ôUÊvI¹.)ß%º¤b—Tº’ÊŸZî‰h)Û%庤|—Tè’Š]R©CªŠ €-³JÙ.)×%廤B—Tì’JWR9ebK07jAÊvI¹.)ß%º¤b—TꚪM…›ÇR¶KÊuIù.©Ð%»¤Ò•TN}ùš_˜EÊvI¹.)ß%º¤b—Tꚸ'‚$e»¤\—”ï’ ]R±K*µRl—lYÂT¥-ªÇ²„aR¹r¹•úUIÍŸ+ÕJÍ‹“JÊj$UÿV[µ¼,NªmÅvuYœtüÖ¼8©ú˜ ÔT—n ¯~Õ^…¾ÿªìšå€'¾j»´CRÕoÍ ÛVj^œp»¢¹!©ª Ùõ‹aà.ì*e»¤\—”ï’ ]R±K*uHM]ž˜º<1uybêòÄÔ剩ËS‡'òØ6]R¶Cjêú-èU¶—öóû×'¹¡‘z{ýÕœQ4¨1?ÿùURñÖ —ü|™xÅ¥S뎗úUI-;­]­T»_øó×KÔ[-•ëú©×ë>"¯~Ôvm³—úýúwõ[æÖ ÿüüùöÑH©ÖúÖ.ÐÇï_RûÝ!õõ³§Å—·—©éûŸ]Rߺ¤zZü5½öXÿýÿtõñ(ŲŽe¤ñA«<–âƒÖRÕ žÃRŒ¡VŠO…J°žO…Jc©Ô!õQŸeŽXÊvI¹.)ß%º¤b—Tº”Ê#ÍtIÙ.)×%廤B—Tì’ºöDžML—”í’r]R•'nJUžPø·*Oh,•.GmþÖšK»²”í’r—Ög)ß%º¤b—Tº”ÊùDå ‹¥l×o¹Ë7”¥|—T¸œå²T5c,U͘ 9gâžpKUߥ¸'ˆ¥<ï¢ x–bžPNø-æ Ðo½½tÌYÊvI]ÇD–ò—ßÇ,Åc RÜ£ •.ý•s¦kOd)Û%庤®gÌ,u=Od©ë3K]Ϙ9/ìñÄ·.O|ëòķޝh– ]R±K*uxõ¥Ë/]žxéòÄK—'^º<ñÒ剗O|43æ`°”½Œ¯fÆ”¤|—Tè’Š]R×£#¯t®c"KÙ.©j ¦½õ´Hù«û…‹T{ ­T¼œs²ÔuLäÕ\Ç·c–²]R—w(©ë3KUù„ /#:K]ÇD^±ö|Eÿwa[)×%Õá‰YªÃ³T‡'f©KO|æë~—̪Ìû0¶u`Ÿt—ì\ÊtIÙ.)×%Uªâsýv°-ã÷g½Â×ö±T<òY;:t£1gîÕÝ»ö<í³Ý/”¤L—”í’ªf&pG¬tnJU3S‹|ù™3÷Ý.Üâü‚ÚZÊOº'z.eº¤l—”ë’ò]RÔÖßÚÚæÏz¥“+%#”¢ãQäÕ¼ `ñ¥R»gõYï!ËR¦KÊvI¹.)v!(]A)v!HA*VK¾Ö«¿š<'¥”²]R¬!Ý4”bcȦvŽ^¤øÊ0ëßjë½ko¦.R¶KŠZï4¸C¹Hùj‰ Tà+÷øþ¥æ°ê¥t—”é’²]R®ê#¶žy"C´@©Pé¯ÖžH·—ì³9a¥L—”í’â}óJ1좸5°Hñˆ¾om>RÕ²Ké.)Ó%e»¤\—”ï’ W·¨)¾×qõ0Yª:<u:õW!¿o(¥»¤L—”í’r]R¾KŠ´FZ»2Dsa»24à “Ï“‰7Å?ù)eF|ÔK:I(ã°”¥Í:…¥gåð3Ÿ‹²˜Ðh&§§§wØè ”2l;àP.R–¦9á·A©­Ìþ|«ç‰yöÕPJwI™.)Û%庤|—Aïψè1B©È÷Òþ­Ä?C-kE› m¹I+e»¤øW4Ý<”ò|mðo…jh°ÚlhËMZ)Û%UPPˆï[)ž¯ÞZÎ&Êß0ø,}T Çl¥ô¥Ô[ý[[Æ×J髼ð›Æ•HÇ`2â˜jëÀ6©ükÚ¹ ³R‹C¹I™%à}¼…Ѫv¼IÙõ0gÌD!IRË;Š "gÛšÅMjyG&dä8½d×F~ž±ôçÕ\뉗≅!ݦZL¥MJ/#1†…r¶E„Ú¤Ìr„a¤=P÷»IÙõ)fuÀÒ½I¹5M·…°ÍR+ |ŒZ=9-H­Ñò À4Ôÿýýïw^σct‚”î’ZÆ­vaÒÇ1Rv+ç:¹èŒ åÖ÷¨æ™Ä„£Mj·ÑÜb–ú¸zÂd §°Î7©HA¥ñÿ^ˆ¿2öÚ^ V_ˆ¿®¤Ìú3v·•¤¶14g£[ÊMÊí'i!Í¿%Y cÍó¸“Z,óÜ“»0çÇs ¶Õ®›Ô2“›3:1àaÙ¤–™\™ ÝG/ýÖ:“‡9î34–ô[ëLîÜ-:pt7©‚¾6f2é·¶™<ãPâ‘ö÷_úÂ,Rë̤3×ò([O"Ç‚ZðM*°lÌ…µ'´¹)AJÓ='ý–)Ȩ%©c Íc[IRŽ$>IR”‘ìGoR´¬0üïµË¯]žxíòÄk—'^»<ñÚå‰×.Oüýòçî 5ç˜*‘• ¥WË3â~B_ÑUjõDšÇ¶Ñ€¹j“²{:®U8”›Tñ„ÉÃ[’¢,xb• Å¥Î/]žxéòÄK—'^º<ñÒ剗.O¼tyâï·|tÄñf©utØ1#C§)¶ïƒÞз¿;Æã*u5W©«ñ¸J]ÇUêj<®RWãq•ºœ™jO 4ˆMŠb !ß¿O¬Rh•ùÊ=±`ÐH¿EKõàüUyb˜ÃÂR´Tožxi3ÒQj™ÉçoËÍ먂¤¥Ì¹LÒ‚Ôâ/?Ï&*F‚ å†}›lg¤ARëLîÃM%F-H­þòv^®Úä‘TÙ©16Ÿóo'RHjݽ˛…!­ìÎHjÉó=E3Ï¿R‹ÛÌ4›?ØÚsQº{—Ï'U˜_‘ô[käd¯}¿IZ×t_ÑzÏ*þ RzŸ"2³ȆèîÝ6†Æ(HY²·­½d—£{ÛQ’¢||·ëÝ»³‹K½vyâµË¯]žxíòÄk—'^»<ñÚå ²{·åÑÈd÷nH>ón%k)³ï¦Û1F¶{—³G?ÂQKö¬Œº¹yÕ¢ åÉÉ¢B¹ݳZ½ <ñÒ剗.O¼tyâ¥Ë/]žxéòÄK—'šÝ»Ìª%Héãöç¼Zð‚”a÷:ÀoÕ;5p<ÒÝ;y<þÍwj„ñXíÞ ã±Þ½Ãã±Þ½Ããñïf§ÎLÍžÕ€f¦f÷.ŽJâcQ¢»wÖJ¿E÷¬àüÕîÞÌ ìÞ¡ñØxÜA»w+,’¢¦pÔ6»wFK¿E=¢$E=aຶٽk«v÷NÝ$©Õ:ï‘ÛuoI™}1áç¬eiÕî]ÞÒ‘Zd'×¢Í}Ç$IÑÜס¼°Ú³ÒN<‡îÞé|ý &©íŽHÞõQ ì)ÐÝ»ù·Fáz›ìYÍImTóÊP²Þ領*¯vïæȶÛÝ;ßb‰±Ý;7¯|B}¤»w6ßÏÝîÂ")»ïÌ‹òä%)·Oâz–+Šz÷.ßåM‚Û½kOʾÞþœþþsñD˜¿@·…z³9ßþúýëãoŠÿcFPÿñöñ»øt^Iç¼¶"n‘Òô Õ5-ROÂ-òÊ °3¿Hñ;ààÂ"Åñ‚ð[UýcÀ¿U!Kx,•.¥~ýõzxuŽ{ìÕ,U˜«òé):Ë\¤K¤ÍGs J•úÇ̃çbÀR…¹jžpòòQC)cŽóâWáßÚY"çõã8/ÛÛ‹ÔÎ\e\¦(ÜÔ‹ÔÎ\Ü23)…ý®îÂz_•XÍŒòyhÏ)³Ïõ³õÁ§¶zs‘²{Ø/Ä¡c{f¸H¹ý~[>ï˜ßRWüóch«Ÿ©Í«6[ïÒØÞƒY¤â^f¨ëÛ›©‹ÔæÕ`M¾9îè~¼¾¨º¾£­~Z¤L—”í’r]R¾K*tIÅ.©Ô!¥»ü¥»ü¥»ü¥»ü¥»ü¥»ü¥»ü¥»üeºüeºüeºüeºüeºüeºüeºüeºüe»üe»üe»üe»üe»üe»üe»üe¡¿*&¹.f´×Ó%e¯9p>¾ºf̯®ó«kÆüêš1¿ºf̯®ó«kÆüêš1¿ºf̯®ó«kÆüêš1¿ºf̯®ó«kÆüêš1¿ºf̯®ó«kÆüêš1¿ºf̯®ó«kÆüêš1¿ºf̯®ó«kÆüêš1¿ºf̯®ó«kÆüêš1¿ºf̯®ó«kÆ|}}©9Û©EŠÃ¦»è TM¯  To T²¡T~ÝÞ \¤ªúm…¥ªúmƒ=Á±êní½¡¯Ú«·±½µHq¯Ží]ÅEÊp)¡EË¥ÚÚÓEŠyõ¦Z̈EÊs©¶*k‘b^½é„ûȼ:/“-”ªªâ°þ«ö*à3\¤¸W5xÛŸœk9á‚ßÊRºKÊtIÙ.)×%廤B—Tì’JR|þZn"B)Ý%eº¤l—”ë’ò]R¡K*vI¥©c¾7ó¬d-¸åºHé.)Ó%e»¤\—”ï’ ]R±K*uH±ï£É¥™Jé.)Ó%e»¤\—”ï’ ]R±K*uHì¨ÑÞl®GŽPJwI™.)Û%庤|—Tè’Š]R©Cªf“M —ËRºKÊtIÙ.)×%廤B—Tì’J@Šeȯêå×÷ |­å£X¥8ƒI­Ôï_<ËÍ:,U%Ò­”nìùý*¥/¥»D)}±VX=aŠtˆ¡]¬Rö8÷ d¢«Tì˜sèÚÊÙUªÎÞb}›Ë­Rá8—çd[ŠGñºE³Y¥ÊÇc^¿xe]Ù_¦Mp·¥Žƒë\"¡ –:<1ÚÛZ¤Uêð„VÊ[¡ÅpÄiŒ®=aY¥b‘š]ï½`W:®;ÄyÚh¾¢kš#šm2àmk³T2¦]é¬RŽ\ã(´è©4§c K…ciƒ•¬äâJÐFø­tHG`=‰|ÅÂè¶l•:u&™÷±Ë.ˆP‘ˆê•«- ôÝtý”ôãÛ?~‘ÿþµûñ׿ÿñýåÜ~ú¶ûŸþÓï¿þßýùO/ï‡ýåç¿ÿþë¿ýåþéÇ_ÿóõó·Ëe¹\þµÈ'¨O¤>±úTÔ§ª>}œêœPç„:'Ô9¡ÎùõéûoK“ç÷ß >-P¿SŸR¿SŸV¿SŸ–¢~§>-UýN}Z–6k¨O ÔïÔ§…ÔïÔ§…ÕïÔ§¥¨ß©O‹ª 깫z»ªç®ê¹«z»ªç®ê¹«z»ªç®ê¹«z»ªç®ê¹«z»ªç®ê¹«z»ªç®ëI*ORy’Ê“Tž¤ò$•'©ýtÓ;?Ý4¤ùDê«OE}ªêSCÏ×9¡Î uN¨sBꜤÎIꜤÎIꜤÎIꜬÎÉꜬÎÉꜬÎùõéo?½~ÿïëÓ/êÓ¯{ûiÿýþéÇû§o¿û?ŸÞ>Æý¸|$×~‚úD_Ÿ~9®ßç'¨O¤>±úTÔ§ª>ݯßqN¨sBêœPç„:'©s’:'©s’:'©s’:'«s²:'«s²:'«s~}úÇ?Ûzþã‡úô϶žï¿#õ»¢~WÔïšz~êœPç„:'Ô9¡ÎIꜤÎIꜤÎIꜤÎÉꜬÎÉꜬÎÉêœ_ŸÞþûÁø½o?µõ|Sµ~Sµ~?’Ô‘¤Ž$udQGudûé3¨\ rÊ*¨\ rÊ*¨\ r!• ©\HåB*R¹Ê…T.¤r!• ©\XåÂ*V¹°Ê…U.¬ra• «\XåòõiÿïÏß~_îWìö êÝ»Ìþý²ükQŸŽ#ÿ)¿»:~÷Cýî‡üîó,Pç„:'Ô9¡Î uN¨s’:'©s’:'©s’:'©s²:'«s²:'«s²:'«su΢ÎYÔ9‹:gQç,êœU³ªsVuΪÎYÕ9Ûß}E!P„@E!P„@E!P„@E!P„@E!P„@E!P„@E!P„@E!P„@E!P„@E!P„"„!¤!E)BHBŠR„"„!¤!E)BHBŠR„"„!¤!E)BHBŠR„"„!¤!E)BHBŠR„"„!¤!E)BHBŠV„°"„!¬aE+BXŠV„°"„!¬aE+BXŠV„°"„!¬aE+BXŠV„°"„!¬aE+BXŠV„°"„!¬aE+BÞ?ýôëÛÿüññ•ÞËç—lÿy¿”ÇWxÇ·/ÿëö'Úý(„Ž"÷¨¯¯àŽ/㚣^–ËKwøË12‰áïFÉ|aÌ2ßÎQ/Ç_»Í/p)ÍpšþBG… ÂhŠ0*$Ñþþ§¥TˆŒ ‘TÈ>ŠÜ£¾¾\=¾fí%LÆ|e8Ãßÿx–ù²1–ùr†–Bp†– ñhŠlTH†#1ür)R¡bT¨H…ì£È=êëkóã ô^ÂŘ¯ GbøåRe¾Õ˜I•ùÖ U Q3DT©PM±’áH ÿì8L£kDŽ"÷¨/Cä°FF²£kàðRæ†v 6”Ñ5†GźÆäðs×ÀadF×Àá(Í ÿì8¬9£kDŽ"÷¨/«ë0½F²£kàpÉæ†v æ£Ñ5†GźÆäðs×ÀaýdF×ÀáÎ ÿì8 Y£kDŽ"÷¨/ó°3G²£kàð?ç†v –³Ñ5†GźÆäðs×ÀaêŽdF×ÀáO ¿›qíO§äéþ¢3§£Ž ¿üùÌñn‚ØÃïæÈc¿<°¯ÿ¹^𺢜‡ß=®ã,—õ~Ô¿¿y9¾Y9Êð·`Ž/õ‚Zpþã ÖK•jcXm¹X0.Ö1œ†3‘ßuŽ’ d9†³qIÉJåå°¾ìáwKÌ­öËK¹¼^ÏÃï>ç€/Ç7+GþΑ/¼Ôóð‡5<¬¶\,6.Ö1¼D”áQ¤AŽáÕ¸¤ÅJåå0<íáw#Ô«6.u»®å<üîuˆðr|³r”áoÁ?²$®çá9j"ê°Úr±ª#èhê÷¸Ãq:ê,èý ª8ÃïÆv¦ Ô¬߬eø[0Ç^?@¨ô«­úŒ~€c‹ŒÑúG©~£àØycú0•£8ÃïÛ2ý¡~`åøfå(ÃßÂ9>ö„úA¿ÚªÀè86Fý ”ê0úŽýV† S9ú3ü¾‰%ÓêVŽoVŽ2ü-˜c¯ ÔúÕVýÀtjê÷r‡ãtÔYÐûAT?p†ß7%eú…ú•㛕£  æØëêýj«~@F? c{£ÑúG©~@F? cפ!èÃTŽ~à ¿oEËô õ+Ç7+GþÎñ±P¨ô«­úý€ŽM­F?è¥úý€Ž½²† S9ú3ü¾1Ó(Ô¬߬eø[0Ç^? P?èW[õKйý©ßØŽÓQgAïQýÀ~ßPšéêVŽoVŽ2ü-˜c¯p¨ô«­úý€­éF?è¥úý€S9ú3ü¾8Ó8Ô¬߬eø[8ÇÇ~À¡~Я¶êlô>nH0úAÿ(ÕØè|Üç`ú0•£8Ãï›Ç3ý€CýÀÊñÍÊQ†¿sìõõƒ~µU?è^¬#Ç@÷¿î3éMñ~·JûÓÌpñU:K`ø×ý0íOÃùºÑî¸å.ât†wæþr»Z÷ÛõúÃ!Ñ‘‰?:Œè÷Ì:9­ˆÎpkîd$/Ñ‘‰?:Œè÷Ì:9’Îpkîl$/Ñ‘‰?:Œè÷Ì:9 ‡ÎpkîÅH^¢#~tÑï™urú áÖÜ«‘¼DG&:üè0¢ß3ëä8´:ÃûÑ%G ‚L„‚,__­—Ÿ|‡ã¬ÚðU†ìâ¸áy2:üè0¢ß3ëä84 :Ã=Õ†!»èæ‰?:Œè÷Ì:9}ŒÎpOµaÈ.º9F¢Ã#ú=³NŽC[ 3ÜSm²‹nŽ‘èð£Ãˆ~Ϭ“ãЭè ÷T†ì¢›c$:üè0¢ß3ëä8üò¿3< Úè¦ ‚Påë ðïò“ïCœU›|Õ&CvéxüÃdtøÑaD¿gÖÉqøµ~g¸§ÚdÈ.usŒD‡Fô{f‡nCg¸§ÚdÈ.usŒD‡Fô{f‡_Þw†{ªM†ìR7ÇHtøÑaD¿gÖÉqè)t†{ªM†ìR7ÇHtøÑaD¿gÖÉqø}gx@µ©›J$BA–¯¯©¿ËO¾[pVmöU› Ùåãa8“ÑáG‡ýžY'Çá—ïážj³!»ÜÍ1~tÑï™urzážj³!»ÜÍ1~tÑï™ur~ÅÞî©6²ËÝ#ÑáG‡ýžY'Çá7ÿážj³!»ÜÍ1~tÑï™ur~‘ÞPmî¦ ‚@|ÿãö¸’ãÁ%í©^?ÆÜŸvÒ/^32£á —íú÷ùŒÌßvøò8¼s³ÀçU|t*êõ²œ‡?«ôú™ü×óbìäïÏ‘ÑG½ê¹)§áÔ>Üiýã&„N…nÉwîNxÁÃðs…ÞE×í¥W”åu}ŒþÓØwx§FpÁ€ Fpa×÷?H¢Ó(:ÑI¢Ó(:h“6hïz¡ýÂׇáq‹¶›|–M6iÄ&lRŸÍ—e½,xéÍJ±IÂ&l²ÐÁ#:Ø ƒ…ÑÁ›E¢—QôbD/½Œ¢ƒÍâ³Y 6Ç÷_ŒØ|^Îýê–M$ÜYÑÉñW1à*¸¶ËëV^zi)¸ŠÀU ¸ª\Þ:º¼Õ¸¼U.o]ÞjÀu{ÀÔñ¨©QO‡ÑÓq<›jÔÓa´EÄõt=½ÃG¸§ÃïéNò÷'z:ŒžŽãQa#Ý„ÑÓÑ»ÝD÷t=ÏõtÏ.4z:ŽgŽz:ŒžŽã!e£ž£§ãx:Ù¨§Ãèé8g6êé0Ú¢ƒ6hï\ ÷tø=ÝI>Ë& ›4b“ 6©ÏæLOG÷Ÿß¹§ãxÎܨ§Ãèé8L7êé0z:Ž'Òz:ŒžŽãv£ž£§;lƒÍñ=4áž¿§ÃèéèÝC£{:ŒžŽçz:ºÿÎ=ÇÃG=FOÇñ4ÁQO‡ÑÓéx8ਧ“ÑÓéxšà¨§“Ñéx°ì¨§“ÑÓû7í„{:ù=ÝIþþ¬ÆQO'£§ÓñpÇ‘n’ÑÓ©wËîédôtz®§Óñ `£§Óñ”ÈQO'£§ÓñXÉQO'£§Óñ<ÉQO'£§ÓñÊQO'£-:h“öøî£pO'¿§;ÉgÙ$a“Fl’Á&õÙœééÔýçwîét<tÔÓÉèétÈh3L;_™ F3¡™@f‚ÑLœ ™,,ׄGׄr7Àè£ÐÁ|Ñ6™v¾2Œf#B3Ì£™8A3YŠ\“2º&Å(×xkŒ> MÌm iç+3Áh&0‚ 4ÈL0š‰$0“¥Ê5©£kRr7Íè£ÐÁ|ÑÖšv¾2Œf#B3Ì£™8A3Y¾vÁxë.ØÃ;ÛiÎ 'øë.gxgÓÍyáÝå ·g™‰½îr†Û3Y ×Ä\w9Ã;mÎ 'øë.gxg;ÎyáÝå ·g™‰½îr†Û3YH®‰¹îr†w¶àœNð×]ÎðÎFó þºËnÏ2{Ýå ·g²°\sÝå ïlÎ9/œà¯»œá-<ç…üu—3Üž d&öºËnÏd)rMÌu—3¼³mç¼p‚¿îr†w6÷œNð×]Îp{&™Øë.g¸=“¥Ê51×]ÎðΆžó þºËÞÙös^8Á_w9Ãí™@fb¯»œáöL–¯:Þº‹ìá­>ç…ùë.gxgCÐyáDþºËnÏ2{Ýå ·g²@®‰¹îr†w6N䯻œá­Bç…ùë.g¸=ÈLìu—3ÜžÉBrMÌu—3¼³=è¼p"Ýå ïl":/œÈ_w9Ãí™@fb¯»œáöL–kb®»œáCç…ùë.gxg{ÑyáDþºËnÏ2{Ýå ·g²¹&æºËÞÙRt^8‘¿îr†w6N䯻œáöL 3±×]Îp{&K•kb®»œáÍFç…ùë.gxgKÒyáDþºËnÏ2{Ýå ·g²|íòÖ]lïlC:/œØ_w9Ã;›•Î 'ö×]Îp{&™Øë.g¸=“rMÌu—3¼³Aé¼pbÝå ïlc:/œØ_w9Ãí™@fb¯»œáöL’kb®»œá­Kç…ûë.gxgƒÓyáÄþºËnÏ2{Ýå ·g²°\sÝå ïlj:/œØ_w9Ã;[ŸÎ 'ö×]Îp{&™Øë.g¸=“¥È51×]ÎðÎv§ó‰ýu—3¼³)ê¼pbÝå ·g™‰½îr†Û3Yª\sÝå ïl„:/œØ_w9Ã;ۥΠ'ö×]Îp{&™Øë.g¸=“õÎë{þùùï¿ÿúÇoiºPm—W¯Ö.°Ç=h¸^Ð.œ^­ý]Éï[Ø>†ïMôÐc^TôÏá¯JÒ…Ø›#÷7¾·@”óðÇw7œ‚P$tŸB¹\ÏÃ&} ÂMÈŽ¿õ²•óðǧ[êä˜æv1ûjí¹³¹pƒ 7ná!n Ü Ã BÜ@¸A†„¸pƒ 7qó±–ê Ú?^­ŽŽÞ@ô½ÁÞDŸ×„ô{“ã¼Þ ¤7½AFoÒˆÞ £7é͘›—KiÿP{µö“:z#Ü Ã „d¸Aˆ7Èpƒ7ná!n Ü Ã BÜ|ü:ìSKûgñ«µ{×ѽ¡ŒÞÐÞDŸ×j¸16(ïMŽózC 7ÆnÑÊè 5ÜÖ“è eô†nŒo' n®í—¯Ö^iGo„d¸pƒ 7qánâ 2Ü Ä „d¸Aˆ›ï`O±è gô†Eo8£7¼7Ñçõ†CzÃ{“ã¼ÞpHoXô†3zÃ!½aÑÎè ‡ôÆàæ¸  2Ü@¸A†7Èpƒ7ná!n Ü Ã BÜ@¸A†„¸ùø~qا¨ý:óÕºëÂÑ›"zS2zSö&ú¼Þ”†ß´±79ÎëMi¸¡ñEÑ›’Ñ›ÒpCc;^ô¦dô¦4ÜÐøÛÐßS 2Ü@¸A†7Èpƒ7ná!n Ü Ã BÜ@¸A†„¸ùøî|¸¾¹¶_Õ¿Zw9zSEojFoêÞDŸ×›Ò›º79ÎëM éM½©½©!½©¢75£75¤77em‘Wëþ-Go„d¸pƒ 7qánâ 2Ü Ä „d¸Aˆ››?…>7W( sþ_XùS˜ó§¨¾7ÑCO _äÇð€?…)J?ÇásxÀŸÂœ?E—í<<àOaÒŸZÊyxÀŸÂ`}sUþæü©†7Èpánâ 2Ü Ä „d¸Aˆ7Èpƒ77j 7«ö§0çOµzÑdô{}^oÒìMŽózƒÞ@ô½AHo zƒŒÞ ¤77׫ò§0çOµz#Ü Ã „d¸Aˆ7Èpƒ7ná!n Ü Ã BÜÜü©7”?…9ªÕ½¡ŒÞÐÞDŸ×j¸±ý)LùSJo¨áÆö§0çOµzC 7¶?…Ij)çáj¤7«ò§0çOµz#Ü Ã „d¸Aˆ7Èpƒ7ná!n Ü Ã BÜÜü©7‹ò§0çOµzâ7œÑÞ›èózÃ!½á½Éq^o8¤7,zýáÞ°è gô†Czcp³UåOaΟjõF¸A†7Èpƒ7ná!n Ü Ã BÜ@¸A†„¸¹ùS#nVåOaΟjõ¦ˆÞ”ŒÞ”½‰>¯7¥áÆö§0åO)½) 7¶?…9ªÕ›ÒpcûS˜ô§–rð§Fßßlʟœ?Õêpƒ 7ná!n Ü Ã BÜ@¸A†„¸pƒ 7qsó§F뛢ü)ÌùS­ÞTÑ›šÑ›º7Ñçõ¦†ô¦îMŽózSCzSEojFojHoªèMÍèM é͘›Ó;¯˜ó§Z½ná 2Ü Ä „d¸Aˆ7Èpƒ7ná!nnþ üpVþÍùSåäOÑŒ?õ>chƒ‰æîŸZ/õ<<àOÑŒ?õaž®çáЦü©ë…ÊyxÀŸ¢)êõÂå<<àO ¸YIùS4çO•“?E3þ”â 2Ü Ä „d¸Aˆ7Èpƒ7ná!nnþÔ€¬ÊŸ¢9ªœü)šñ§´Þ`o¢Ïë Bzƒ½Éq^oÒˆÞ £7é DoÑ„ôÆà†WåOÑœ?UNþÍøSZo„d¸Aˆ7Èpƒ7ná!n Ü Ã BÜÜü)rïg ÑÊè ‰ÞPFoho¢Ïë 5ÜØþÍøSZo¨áÆö§hÊŸRzC 7¶?ESþ”Òj¸±ý©Ñú¦*Šæü©rò§hÆŸÒz#Ü Ã BÜ@¸A†„¸pƒ 7qánâææOÖ7›ò§hΟ*'Šfü)­7¼7Ñçõ†CzÃ{“ã¼ÞpHoXô†3zÃ!½aÑÎè ‡ôÆà†7åOÑœ?UNþÍøSZo„d¸Aˆ7Èpƒ7ná!n Ü Ã BÜÜü)rïg(¢7%£7Eô¦dô¦ìMôy½) 7¶?E3þ”Ö›ÒpcûS4åO)½) 7¶?ESþ”Ò›ÒpcûS£õö§hΟ*'Šfü)­7 2Ü Ä „d¸Aˆ7Èpƒ7ná!nnþ |MRþÍùSåäOÑŒ?¥õ¦îMôy½©!½©{“ã¼ÞÔÞTÑ›šÑ›Ò›*zS3zSCz3ææRåOÑœ?UNþÍøSZo„d¸Aˆ7Èpƒ7ná!n Ü Ã BÜÜü)ööQÜü)žò§èõäOñŒ?õ>š´?ÅsþÔ;8çáЧü©÷ô<<àOñÜýSªŽŸÃþÏøS7‹ö<<àO±ë‡ 7Èpán Ü Ã BÜ@¸A†„¸pƒ 7qánâææO±wßÝÍŸâ)Jé DoÑìMôy½AHo°79Îë BzÑdô!½è 2zƒÞ ¹Y. )Чü)¥7 2Ü@¸A†„¸pƒ 7qánâ 2Ü ÄÍÍŸrûÔÍŸâ)Jé ‰ÞPFoho¢Ïë 5ÜØþOùSJo¨áÆö§xîþ)UdžÛŸâJë 5ÜØþÔ@o^7åOñ”?¥ôF¸A†7Èpƒ7ná!n Ü Ã BÜ@¸A†„¸¹ùS<Ø_¬ý)žò§”Þ°è gô†÷&ú¼ÞpHoxorœ×é ‹ÞpFo8¤7,zýáÞðXo@ÊŸâ)Jépƒ 7ná!n Ü Ã BÜ@¸A†„¸pƒ 7qsó§F}ª*Чü)¥7Eô¦dô¦ìMôy½) 7¶?ÅSþ”Ò›ÒpcûSåULeòù~§Û¯JÈŸ*s÷O雴бü©2åO½ÔËrð§Ê”?Uõã¹ bùSŽŸA¸A†7Èpánâ 2Ü Ä „d¸Aˆ7Èpƒ77ª„îŸ*Sþ”ÒˆÞ £7Ø›èózƒÞ`orœ×„ô¢7Èè BzÑdô!½±¸Ù”?U¦ü)¥7 2Ü@¸A†„¸pƒ 7qánâ 2Ü ÄÍÍŸ*?œ•?U¦ü)¥7$zC½¡½‰>¯7ÔpcûSeîþ)}“š –?U¦ü)¥7ÔpcûSeÊŸªúqˆÜ±ü©âÞÏ Ü Ã „d¸pƒ 7qánâ 2Ü Ä „d¸Aˆ››?UB÷O•)Jé ‹ÞpFoxo¢Ïë ‡ô†÷&Çy½áÞ°è gô†Czâ7œÑé }JûSeÊŸRz#Ü Ã „d¸Aˆ7Èpƒ7ná!n Ü Ã BÜÜü©QŸ‚ò§Ê”?¥ô¦ˆÞ”ŒÞ”½‰>¯7¥áÆö§ÊÜýSú&-4A,ªLùSJoJÃíO•)ªêÇ!rÄò§Š{?ƒpƒ 7ná 2Ü Ä „d¸Aˆ7Èpƒ7ná!nnþT Ý?U¦ü)¥7Uô¦fô¦îMôy½©!½©{“ã¼ÞÔÞTÑ›šÑ›Ò›*zS3zSCzS ŸAß?U¦ü)¥7 2Ü@¸A†„¸pƒ 7qánâ 2Ü ÄÍÍŸª¡çûÕIêªý©:÷þ©WeË4у¾æõrð§ê”?U.k9øSuΟÚ.å<<àOÕ©çû-z&ܱü©7«ö§ê¤?uÕþT{ÿÔ«²ešèÓÜ Ä „d¸Aˆ7Èpƒ7ná!nnþÔ€è÷OÕIêªý©:÷þ©WeË4Ñçõ!½ÁÞä8¯7é DoÑ„ô¢7Èè BzcpÃÚŸª“þÔUûSuîýS¯Ê–i¢ÏëMˆ7Èpƒ7ná!n Ü Ã BÜÜü©êî¿!ÑÊè ‰ÞPFoho¢Ïë 5ÜØþTò§”ÞPÃíOÕ9j»”óð€?U§žï·è™pÄò§Ü\YùSuÒŸºjªÎ½êUÙ2Môy½ qánâ 2Ü Ä „d¸Aˆ››?5Zß°ò§ê¤?uÕþT{ÿÔ«²ešèózÃ!½á½Éq^o8¤7,zýáÞ°è gô†CzcpS´?U'ý©«ö§êÜû§^•-ÓDŸ×›7ná!n Ü Ã BÜ@¸A†„¸¹ùSÕÝSDoJFoŠèMÉèMÙ›èózSnlªNùSJoJÃíOÕ9j»”óð€?U§žï·è™pÄò§ªû>_án Ü Ã „d¸Aˆ7Èpƒ7ná!n Ü Ã BÜÜü©Ñú¦*ªNúSWíOÕ¹÷O½*[¦‰>¯75¤7uorœ×›Ò›*zS3zSCzSEojFojHo nÚ·+‰Þd¸pƒ 7ná!n Ü Ã BÜ@¸A†„¸pƒ 7qsó§Ö?µNúSUûSëìýS¬ ¦õ¹÷O­!j}îýSkÈŸZŸ{ÿÔò§ÖçÞ?µ†ü©5ôþ©uÒŸªÚŸZgïŸbe0­Ï½j ùSësïŸZCþÔúÜû§Ö?µ>÷þ©5äO­¡û§ÖIªjj½Š•Á´>÷þ©5äO­Ï½j ùSësïŸZCþÔúÜû§Ö?µ†Þ?µNúSUûSëìýS¬ ¦õ¹÷O­!j}îýSkÈŸZŸ{ÿÔò§ÖçÞ?µ†ü©Õ}?‰ÞPFoHô†2zC{=÷þ©5äO­Ï½j ùSësïŸZCþÔúÜû§Ö?µzÏ¡…pƒ 7náÂMþýSkÈŸZŸ{ÿÔò§ÖçÞ?µ†ü©õ¹÷O­!ju÷³è gô†Eo8£7¼7ÑsïŸZCþÔúÜû§Ö?µ>÷þ©5äO­Ï½j ùS«{?ƒpƒ 7náÂMþýSkÈŸZŸ{ÿÔò§ÖçÞ?µ†ü©õ¹÷O­!j ùSë¤?Uµ?µÎÞ?ÅÊ`ZŸ{ÿÔò§ÖçÞ?µ†ü©õ¹÷O­!j}îýSkÈŸèÍU?ßoô§ªö§ÖÙû§XLësïŸZCþÔúÜû§Ö?µ>÷þ©5äO­Ï½j ùS£¿§ ü©uÒŸªÚŸZgïŸbe0­Ï½j ùSësïŸZCþÔúÜû§Ö?µ>÷þ©5äO­îþán Ü Ã „›üû§Ö?µ>÷þ©5äO­Ï½j ùSësïŸZCþÔÕ]ß|ø ×çÎùS× ”Átó§®§Ç^CþÔuΟÚNþÔ5äO]çîŸZ›?k¿†ü©ëÔóýNåâ&ˆåO]]½nò÷O]çü©†7Èpƒ7ná!n Ü Ã BÜ@¸A†„¸¹ùSW÷ù7½Iß?uó§Z½ÁÞDŸ×„ô{“ã¼Þ ¤7½AFoÒˆÞ £7éÁͱ.†p“¿ê:çOµz#Ü Ã BÜ@¸A†„¸pƒ 7qánâææO ¸i= Ñ›ôýS×9ªÕÚ›èózC 7¶?uó§¶“?u ùS×¹û§Z½¡†ÛŸºN=ßïT.n‚XþÔh}£ý©ës÷O]çü©Vo„d¸Aˆ7Èpƒ7ná!n Ü Ã BÜÜü)·OÝü©ës÷O]çü©Voxo¢Ïë ‡ô†÷&Çy½áÞ°è gô†Czâ7œÑéÅMQþÔõ¹û§®sþT«7 2Ü Ä „d¸Aˆ7Èpƒ7ná!nnþÔÕÛ·uó§®ÏÝ?uó§Z½){}^oJÃíO]çü©íäO]CþÔuîþ©VoJÃíO]§žïw*7A,jô½_UþÔõ¹û§®sþT«7 2Ü Ä „d¸Aˆ7Èpƒ7ná!nnþÔÕ½Ÿ¡ŠÞ¤ïŸºÎùS­ÞÔ½‰>¯75¤7uorœ×›Ò›*zS3zSCzSEojFojHo,nVåO]Ÿ»ê:çOµz#Ü Ã BÜ@¸A†„¸pƒ 7qánâææOmnHùSÛ”?õž3”?µMùSÚÞÚ›è1n¶“?µ…ü©mÆŸZ^ÏÏ÷ÛBþÔöÜû§¶?µMùS›~]7A,jÀ kj›ò§Zn Ü Ã „d¸Aˆ7Èpƒ7nòïŸÚBþÔ6åOmúu]nnþÔæ>ÿ¢7Èè DoÑìMôy½AHo°79Îë BzÑ›ôû§¶?µMùS›~]WDo,nôýSÛ”?¥ôF¸A†7Èpƒ7ná!n Üäß?µ…ü©mÊŸÚôëº"zCÆú¦*j›ò§”Þè eô†ö&ú¼ÞPÃíOm3þ”Öj¸±ý©í¹÷Om!j›ò§6ýº.n‚XþÔæÞ¯)Ü Ã „d¸pƒ 7qánâÂMþýS[ÈŸÚ¦ü©M¿®+ÀÍÍŸrûÔÍŸÚ¦ü)¥7,zýὉ>¯7ÒÞ›çõ†Czâ7é÷Om!j›ò§6ýº®ˆÞXÜlÊŸÚ¦ü)¥7 2Ü@¸A†„¸pƒ 7qá&ÿþ©-äOmSþÔ¦_×Ñ›b¬o®ÊŸÚ¦ü)¥7Eô¦dô¦ìMôy½) 7¶?µÍøSZoJÃíOmϽj ùSÛ”?µé×uqÄò§6÷yé 2Ü@¸A†7Èpƒ7ná!n Üäß?µ…ü©mÊŸÚôëºÜÜü©QŸº*j›ò§”ÞTÑ›šÑ›º7Ñçõ¦†ô¦îMŽózSCzSEoÒïŸÚBþÔ6åOmúu]½sÓ¾_S¸A†7Èpánâ 2Ü Ä „›üû§¶?µMùS›~]—ÏÍmüvãæÇ_ÿ£¨yyy}?ê÷ÿý¯ÏCßx}ÿï½êoÿýt®ÿ‹ü¢[³‡á4Îöð¿ýòãý¨¥¹|åõõVÛ/púE8=õý×?~üõcªüörûùöËoï‘þ³´ÿN–Ïs>õ¯© Ž¢ÀQÐ_ê¥#.ƒs©ˆËºöŽ¢Ð)4G Í‘CsäÐ94Çšc ͱ„æXCs¬¡9ÖÐ?XEˆU„XEˆU„XEˆU„XEˆU„XEˆU„XEˆU„XEˆU„XEˆU„XEˆUgŽ?}(¸n!sýô!ç‘£(tÔù;•÷¿þ:G•ÐQ5tÔÙKÏ‘Bs¤Ð)4G Íññ¨¿ý§9êßÿx׸ÎRLëvTï )}®_~,ËŠ‡sýû[ÿ¨s^å…@^ßÿ Ð¹¨{.}Ô/?(4G Í‘CyqhŽ%t®šc dÿïo%4ÇÊ«òúd!VáÎqé®t{¬"@á: £(t. Í‘Bs¤Ð9”‡æXBç*¡9–ÐKhŽ5”WíæÕÓU:ÿ5Ö9 îQŸ¬RˆU éêcÄ«b•B¬RˆUr5‡•ød•B¬RHWýz•ÐKhŽ%tk(¯ºŽ¬rHW9¤«b•CºÊ!]å«b•C¬rHW9Ä*‡Xå®rHW9Ä*‡t•CºÊ!]}8êçý¶ûóŸþ?÷O³7g¼DyLP-1.10.4/Data/Netlib/maros-r7.mps.gz0000644000175200017520000203266610430174061015763 0ustar coincoin‹ÜK®9maros-r7.mpsŒýKŽ,Û’d öÈ9Ä* ̼¿ÍD¡z€YóI½ûQ&2S!ÂñÎsøs2;j&L¶e-ÕÿùýÿÏëÿùÿ×ý¯ÿýÿú¯ýþÿõ¿þŸÿýþÿí?ÿÝÅ¿ÿ™ÿþgýûŸãßÿœÿþçú÷?÷¿ÿyþýÏûù:Ïçù|Åø|Éø|Íø|Ñø|Õø|Ùø|Ýø|áø|åü|åìëç+çç+çç+çç+çç+çç+çç+çç+×ç+×ç+Wÿ>_¹>_¹>_¹>_¹>_¹>_¹>_y|¾òø|åñùÊ£Ÿ¯<>_y|¾òø|åñùÊãó•çç+ÏÏWžŸ¯_y}¾òú|åõùÊûó•÷ç+ïÏWÞŸ¯¼?_y¾òîKîó•÷ç+ïÏW>Ÿ¯|>_ù|¾òù|åóùÊçó•Ïç+Ÿ¾š?_ù|¾òý|åûùÊ÷ó•ïç+ßÏW¾Ÿ¯|?_ù~¾òíAÁ¤ô¨<=+OËÓÓòô¸<=/OÌÓóôÈ<ý=hû{` 1‘IÌ$†S‰±ì¹ŒÌHÌ|žÍèጞÎèñŒžÏèžÐèžÑ(KÓè9ÔèIÕèYÖèi×h¯þ=±Ñ#=³ÑC=µÑc=·Ñƒ=¹1Q‘ý=zx£§7z|£ç7z€£'8z„£g8zˆc¡‡û{ôGrô$Grô,Gsô4Gsô<ÇFÙ÷÷葎žé衎žê豎žëèÁŽžìèÑŽƒ;JžîèñŽžïèžðèžñè!žò¸¸má¾Õ7®žóì9Ïžóì9Ïžóì9Ïžóì9Ïžó Üû{ôœgÏyöœgÏyöœgÏyöœ'Ó¸¿îÁ¸ ã.ŒÛ0îø÷œgÏyöœgá6ßߣç<{γç<{γç<{γç<{γç<v‰þ=çÙsž=çÙsž=çÙsž=çÙsž=ç9±°ô÷è9Ïžóì9Ïžóì9Ïžóì9Ïžóì9Ï…­¨¿GÏyöœgÏyöœgÏyöœgÏyöœgÏyn¬^ý=zγç<{γç<{γç<{γç<{Îó`¿ëïÑsž=çÙsž=çÙsž=çÙsž=çÙsžK$¶È^#{Ϋç¼zΫç¼zΫç¼zΫç¼zÎ+°ªö÷è9¯žóê9¯žóê9¯žóê9¯žóê9¯Ä>Üߣç¼zΫç¼zΫç¼zÎ 7VnìÜ´t÷÷ÀÚ½‹76o¬Þ=çÕs^=çÕs^›}žóê9¯žóê9¯žóê9¯žóê9¯žóšøó¡¿GÏyõœWÏyõœWÏyõœWÏyõœWÏy-üÒߣç¼zΫç¼zΫç¼zΫç¼zΫç¼6þêïÑs^=çÕs^=çÕs^=çÕs^=çÕs^mõ÷è9¯žóê9¯žóê9¯žóê9¯žóê9¯‹?éð7]ÿQ×s>zÎGÏùè9=ç£ç|ôœžóÑs>8ö÷è9=ç£ç|ôœžóÑs>zÎGÏùè9‰¿Nû{ôœžóÑs>zÎGÏùè9=ç£ç|ôœÂŸÀý=zÎGÏùè9=ç£ç|àolü‘¿²ñg6ýÝßiãOmü­?¶{ÎGÏùè9=ç£ç|Lü1ßߣç|ôœžóÑs>zÎGÏùè9=ç£ç|,œô÷è9=ç£ç|ôœžóÑs>zÎGÏùè9Çý=zÎGÏùè9=ç£ç|ôœžóÑs>zÎÇÁÙGžóÑs>zÎGÏùè9=ç£ç|ôœžóqqÀ‚–>bé9Ÿ=ç³ç|öœÏžóÙs>{ÎgÏùì9Ÿcœþ=ç³ç|öœÏžóÙs>{ÎgÏùì9Ÿ=ç3qVÔߣç|öœÏžóÙs>{ÎgÏùì9Ÿ=ç³ç|¤ú{ôœÏžóÙs>{ÎgÏùì9Ÿ=ç³ç|öœÏS¯þ=ç³ç|öœÏžó‰S5«á\ k8Y££µþ8\ÃéŽ×zÎgÏùì9Ÿ=ç³ç|öœÏ…ó»þ=ç³ç|öœÏžóÙs>{ÎgÏùì9Ÿ=çsã°¿GÏùì9Ÿ=ç³ç|öœÏžóÙs>{ÎgÏù<8‰ìïÑs>{ÎgÏùì9Ÿ=ç³ç|öœÏžóÙs>/Ž;qÞÙž=ç«ç|õœ¯žóÕs¾zÎWÏùê9_=ç+p¨Úߣç|õœ¯žóÕs¾zÎWÏùê9_=ç«ç|%Nnû{ôœ¯žóÕs¾zÎWÏùê9_=ç«ç|õœ¯ÂñpžóÕs¾zÎWÏùê9_=ç«ç|õœ¯žó5pÝߣç|õœ¯žóÕs¾zÎWÏùê9_=ç«ç|Mt÷÷è9_=ç«ç|áé8IÇQ:ÎÒq˜N§éý=pžŽõžóÕs¾zÎWÏùê9_=ç«ç|mÙ÷÷è9_=ç«ç|õœ¯žóÕs¾zÎWÏùê9_Ïú{ôœ¯žóÕs¾zÎWÏùê9_=ç«ç|õœ¯‹‡xúÐzÎwÏùî9ß=ç»ç|÷œïžóÝs¾{ÎwàGžóÝs¾{ÎwÏùî9ß=ç»ç|÷œïžóxŽÒߣç|÷œïžóÝs¾{ÎwÏùî9ß=ç»ç|Öô÷è9ß=ç»ç|÷œïžóÝs¾{ÎwÏùî9ßO„ú{ôœïžóÝs¾{ÎwÏùî9ß=ç»ç|÷œï‰ÇNý=zÎwÏùî9ß=ç»ç|÷œïžóÝs¾{Î÷³­þ=ç»ç|ãÉáÙžáéŸáù=@ëïGh=ç»ç|÷œïžóÝs¾{ÎwÏùî9ßOéú{ôœïžóÝs¾{ÎwÏùî9ß=ç»ç|÷œï‹GxØ{ÎOÏùé9?=ç§çüôœŸžóÓs~zÎOàcžóÓs~zÎOÏùé9?=ç§çüôœŸžó“xªÙߣçüôœŸžóÓs~zÎOÏùé9?=ç§çüö÷è9?=ç§çüôœŸžóÓs~zÎOÏùé9?Ïgû{ôœŸžóÓs~zÎOÏùé9?=ç§çüôœŸ‰‡Àý=zÎOÏùé9?=ç§çüôœŸžóÓs~zÎÏ“æþ=ç§çüôœŸžóÓs~zÎOÏùé9?=çgãqvžóƒgåxXާåx\Žçåx`Ž'æxdNÏÌû{ôœŸžóÓs~zÎOÏùé9?=ç§çüôœŸ‹óx2ßæ{ÎoÏùí9¿=ç·çüöœßžóÛs~{ÎoàñžóÛs~{ÎoÏùí9¿=ç·çüöœßžó›` ú{ôœßžóÛs~{ÎoÏùí9¿=ç·çüöœßÈÐߣçüöœßžóÛs~{ÎoÏùí9¿=ç·çüÐý=zÎoÏùí9¿=ç·çüöœßžóÛs~{Îï’ÑߣçüöœßžóÛs~{ÎoÏùí9¿=ç·çü.pý=zÎoÏùí9¿=ç·çüöœßžóÛs~{Îï\ÒߣçüöœßžóÛs~{ÎoÏùí9¿=ç·çü,ý=@Ç@„ 02€d@É&Cœ @"e•!V†`¢e—!^†€3O–ƒïhæ5ó›yÀÍ<g3ЙìÌxæI¢€ðÝÀÏ<h4š ͈æEó£yÀÑBøˆá#ˆ(>Âøˆã#H>Bùˆå#˜h>Âùˆç# ˆ>Búˆé#¨¨>ÂúÀõÀ¾Ù@ûl_î Ð}¼/À÷¿á@ü"‰­G—€ò `~Î/úH¿êIL/A½Lõâ»×K`/‘½„öÛKp/ºØ_€û €ò/€þØ¿ü ÿø_€ÿ €0€À `€ €€0€XÀ  8`€ "0€˜À X`€ €20€ØÀ x`€ ‚B0€Á$ ˜`€ €‚R0€ XÁ, ¸`€ ƒb0€ ˜Á4 Ø`€ €ƒr0€ØÁ< ø`€ „‚0€ÂD a€#Œ"S]”0À`ÂMÀ Ðg€ú `Ÿî3~ÈÏú`?ðg€þ àŸþ3€Ð`@h€ ` 4‚HÐ `A0h€ à 4„Ʀw` ·` ÷` 7a wa ·a ÷aà7bÀw£·b@— С<4À‡Ñ!@DŒh P¢L4À‰@Ñ)@E¬h Т\4À‹€Ñ1@FÌh P£l4ÀÀÑ9@Gìh У|4ÀÒ8ô~Iè0¤ˆ4@‘0ÒGI$i% °¤˜4@“pÒOJDi) 0¥¨4@•°ÒWKdi- °¥¸4@—ðÒ_L„i1 0¦È4@™0ÓgM¤i5 °¦Ø4@›pÓoNÄi9 0§è4@°ÓwOäi= °§ø4@ŸðÓ8ô¾.ôÆ.ôÎ.ôÖ.ôÞ.ôæ.ôî.ôö.üþ.ønè ¨5£hÔŽàQ@j€H ©&5¥¨Ô–àR`j€L  ©65§èÔžàS€j€P ªF5©(Õ¸ôîk耪R5€ªXÕ¬ U¸j€W «b5€¬˜Õ´ VØj€[ €«r5€®ØÕ¼ Wøj€_ ¬‚5€°ÖÄ Xk€c €¬’5€²XÖÌ Y8k€g ­¢5€´˜ÖÔ ZXk€k €­²5€¶ØÖÜ [xk€o ®Â5€¸×ä \˜k€s €®Ò5€ºX×ì—Þ-ŠÞ.ŠÞ/ŠÞ0ŠÞ1ŠÞ2ŠÞ3ŠÞ4ŠÞ5Šß6ŠÞ7 oEïEoEïEoEïEoEïEo …w÷šà^Ük‚{Mp¯ î5Á½&¸×÷š½—#ÞL Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^3èÝèøíèðÝè éèéè-éè=éèMéè]éèméÐ%Aï ›ôîwønèp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&½Ÿ%½¡%½£%½¥%½§%½©%½«%½­%½¯%½±%½³%½µ%½·%½¹%½»%½½%½¿%½Á%½Ã%½Å%¿Ç%½É%¿Ë%¾½Ï%½Ñ%½Ó%½Õ%½×%½Ù%º„Þî’Þï’Þð’Þñ’Þò’Þó’Þô’Þõ’Þö’Þ÷’Þø’Þù’Þú’Þû’Þü’Þý’Þþ’Þÿ’Þ“Þ“Þ“Þ“Þ“Þ“Þ“Þ“Þ“Þ “Þ “Þ “Þ “Þ “Þ“Þ“Þ“Þ“Þ“Þ“Þ“Þ“Þ“Þ“Þ“Þ“Þ“Þ“Þ“Þ“Þ“Þ“Þ “Þ!“Þ"“Þ#“Þ$“Þ%“Þ&“Þ'“Þ(“Þ)“Þ*“Þ+“Þ,“Þ-“Þ.“Þ/“Þ0“Þ1“Þ2Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šEïZ.÷šà^Ük‚{Mp¯YôιôÖ¹ôÞ¹üæ¹ønôö¹ôþ¹ôºôºôºèp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½æ ÏÀ@—€{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šƒÞ›Þ›Þ‘›Þ’›ß“ßÞ•›Þ–›Þ—›Þ˜]î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½æ¤OÔA—€{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^sÒ»üÓÛüÓûüÓýÓ;ýó[ýã»Ñ›ýÓ»ýÓÛý£KÀ½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½æ¢ÏçB—€{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük.úìúðúôúøúüúþ|7ú út ¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½æ¦OûC—€{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{ÍMŸHDIDŸIDJDŸJDKDŸKÄL„ïFM„.÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½æ¡ÏE—€{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯yèsÎèƒÎè“Îè£Îè³ÎèÃÎèÓÎèãÎøóÎðÝÐ%à^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½æ¥O"F—€{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5Á½&¸×÷šà^Ük‚{Mp¯ î5/}z"}|"}~"}€"}‚"}„"}†"}ˆ"}Š"Œ"}Ž">H‘>I‘>J‘>K‘>L‘>M‘>N‘>O‘>PŸ¨îµÀ½¸×÷Zà^ Ük{-p¯îµÀ½¸×÷Zà^ Ük{-p¯îµÀ½¸×zèsÍñ1‹à^ Ük{-p¯îµÀ½¸×÷Zà^ Ük{-p¯îµÀ½¸×÷Zà^ Ük{-p¯îµÀ½¸×÷Zà^ Ük{-p¯îµÀ½¸×÷Zà^ Ük{-p¯îµÀ½¸×÷Zà^ Ük{-p¯îµÀ½¸×÷Zà^ Ük{-p¯îµÀ½¸×÷Zà^ Ük{-p¯îµÀ½¸×÷Zà^ Ük{-p¯îµÀ½¸×÷Zà^ Ük{-p¯îµÀ½VЧ³òdzâ»Ñ´Ò'´ÒG´Òg´Ò‡´Ò§´ÒÇ´¢KÀ½¸×÷Zà^ Ük{-p¯îµÀ½¸×÷Zà^ Ük{-p¯îµþá^ÿçþ×ÿ|¥ÿ÷ÿúÿþßÿãþïÿüþó?ÿ¿øoÿþÏõÿ†ÿ‰ÿþב?þoÿý/fìïŸÕÏxýüÿzþºúç¿ÿ_)¾Éµÿs'ÿþ&ÿ~÷¯x½ýSþú/†ùû®Öœùòÿùg}ÅKý„†ù !>Í¿qÈã_ÿçË¿ñŸüW¼Ôx˜ðPÿFü€—ùÇOùÿK­·ü߯ê+^ê÷3ÌïgŠ<ý~–ùý ¾ÍK\ú%ÖÜëí%þýÚ¿â¥~½Ãüz—úýà׻̯w©—ˆ_ï1¯½Cß/ñóÚ˼vćzíÓ¼vÄ—zíÛ¼vÄzí×¼ö#qýÚ‡yíG¿öe^ûQ¿8¼öc^;âW½öxôk¿òׯ}š×~Õ/¯}›×~Õ/¯ýš×Žø¯—H¯=ôkïÐ÷Kü¼öe^;â[½öc^;âW½öŸ¯êçkGü×K¤×žæµ‡úÅõkßøÅáµ_÷ÚCüâ赇y툧zíe^{ª_\¿öã^{Š_^ûï‰ûñÚSüâèµ§y툗zíüöR¿¸~í×½ö¿8zía^{‰_½ö2¯ñ¡^û4¯}¨_\¿ö߯êÇkâG¯=ÍkâG¯}˜×ŽøT¯}™×>Õ/¯=ÌkŸâG¯½ÌkŸâG¯}š×ŽøR¯}›×¾Ô/¯=Ík_âG¯}˜×¾Ä/Ž^û2¯ñ­^û1¯}«_^{™×¾Å/Ž^û4¯}‹_½öm^;âG½ök^ûQ¿8¼öa^û¿8zí˼ö#~qôÚyíˆ_ñÚÓìuú~‰ýÚ§yíWüâèµoóÚ¯øÅÑk¿æµw<Õ^—f¯ËGýâðÚ—~íßêµýÚ)~Õ9ˆÙëOµ×¥Ùë2Ô/¯}›×âG¯ýš×âG¯ÝìuW{]š½.SýâðÚyí)~qtÔ^7Ì^7BýâðÚÍ^Gqµ×•Ùëj¯f¯£¸Úë†ÙëFª_^»Ùë(®öºaö:ćÚë†Ùë(®öºaöºQê‡×nö:ćÚë†Ùë(®öºaö:Š«½n˜½n õ‹ocö:ćÚë†Ùë(®öºaö:Š«½n˜½®Cß/±_»Ùë(®öºaö:Š«½n˜½Žâj¯f¯ëÐ÷Kì×nö:Š«½n˜½Žâj¯f¯£¸Úë†Ùë:ôýûµ›½Žâj¯f¯£¸Úë†Ùë(®öºaöº}¿Ä~íf¯£¸Úë†Ùë(®öºaö:Š«½nš½n\õ‹Ãk7{ÅÕ^7Ì^Gqµ× ³×!>Õ^7Í^7õ‹Ãk7{ÅÕ^7Ì^Gqµ×M³×!>Õ^7Í^7CýâðÚÍ^Gqµ× ³×!>Õ^7Í^Gqµ×M³×MÔò8ÌòˆøTËã4Ë#ÅÕò8ÍòHqµt-Þ*íŸßèW¼Ô\7—Gþâ>s¹Ü\v|˹,3—Gýâ0—ÓÌåQ÷ Ìå6syÞq<—×ÌeÇ—ùk^Õ›û¯÷ ~ùõþó{ÿŠ—ëáÆú¾ÿzi¬—ë+½Ÿ±>n¬¯üõöX›¿/)®þ¾œæïKŠ«¿/§ùûñ¥þ¾\æïËõ¨ß{ ± îßHúg¼T+ Ó KÚcÝ Ë´Â’öX·Â1­°”=F­0u+Ð?~©Vغ(~T+\Ý ˆ¯G´Â Ý 7¯PWdzÖx½:þ¾l¾â¥Je˜RA|ªRY¦TߪTŽ)į*•/ ˆJ…þñêðbšÃ Š«Ã‹i/_êðb™Ã Š«Ã‹e/h!uÙ”»lpx¡.›é.›Ž/uÙlwÙtü¨ËæºË7ºlÂ\68ûPÏó¦yžGqõ攘âê”ø˜SâSª.pÙ˜SbŠ«Sâ4§ÄW§ÄiN‰)®N‰Ëœ#^ꔸÌ)1â[osJŒøQ§ÄÇœS\sJLquJ|Ì)ñª.pÙ˜SbŠ«Sâ4§ÄW§ÄiN‰/uJ\攘âꔸÌ)1â[sJŒøQ§ÄÇœS\sJLquJ|Ì)ñ™ª.pÙ˜SbŠ«Sâ4§ÄW§ÄeN‰/uJ\攘âꔸÌ)1âGsJLquJ|Ì)1ÅÕ)ñ1§ÄW§ÄÇœŸ¥ê—9%¦¸:%NsJŒx©Sâ2§ÄW§ÄeN‰)®N‰Ëœ#~Ô)ñ1§ÄW§ÄÇœS\sJLquJ|Ì)ñÙª.pÙ˜SbŠ«Sâ2§Äˆ—:%.sJLquJ\攘âꔸÌ)1âGsJLquJ|Ì)1ÅÕ)ñ1§ÄW§ÄÇœŸ£ê—9%F¼Ô)q™SbŠ«Sâ2§ÄW§ÄeN‰)®N‰Ëœ#~Ô)ñ1§ÄW§ÄÇœS\sJLquJ|Í)ñ¹ª. óšSbÄK—9%¦¸:%.sJLquJ\攘âꔸÌ)1âGsJLquJ|Ì)1ÅÕ)ñ1§Äˆ_uJ|Í)ñ}T]à²1§ÄW§ÄeN‰)®N‰ËœS\—9%¦¸:%.sJŒøQ§ÄÇœS\sJLquJ|Í)1âW_sJ|CÕ.sJLquJ\攘âꔸÌ)1ÅÕ)q™SbŠ«SâaN‰?ê”ø˜SbŠ«SâcN‰¿ê”øšSbŠ«SâkN‰oªºÀecN‰)®N‰ËœS\—9%¦¸:%.sJŒøP§ÄÜ#~Ô)ñ1§ÄW§Äל#~Õ)ñ5§ÄW§ÄלßRuËÆœS\—9%¦¸:%.sJLquJ<Ì)1âCsJŒøQ§ÄÇœ#~Õ)ñ5§ÄW§ÄלS\_sJ|‡ª \6攘âꔸÌ)1ÅÕ)q™Sbć:%攘âê”x˜SbÄ:%¾æ”ñ«N‰¯9%¦¸:%¾æ”˜âê”øšSâ;U]à²1§ÄW§ÄeN‰)®N‰‡9%F|¨SâaN‰)®N‰‡9%FüªSâkN‰)®N‰¯9%¦¸:%¾æ”˜âê”øšSâ»T]à²1§ÄW§ÄeN‰ê”x˜SbŠ«SâaN‰)®N‰‡9%FüªSâkN‰)®N‰¯9%¦¸:%¾æ”˜âê”øšSâ»U]à²1§ÄW§ÄÜ#>Ô)ñ0§ÄW§ÄÜS\sJŒøU§ÄלS\_sJLquJ|Í)1ÅÕ)ñ5§Ä÷¨ºÀecN‰ê”x˜SbŠ«SâaN‰)®N‰‡9%¦¸:%æ”ñ«N‰¯9%¦¸:%¾æ”˜âê”øšSbŠ«Sâx}Ù\Uxï>sJŒøP§ÄÜS\sJLquJ<Ì)1ÅÕ)ñ0§Äˆ_uJ|Í)1ÅÕ)ñ5§ÄW§Äל#þëêàË&äeÓ¡¯«—9%¦¸:%攘âê”x˜SbŠ«SâaN‰)®N‰‡9%FüªSâkN‰)®N‰¯9%¦¸:%þyAü¼lÿuuðe“æ² Q¸lÒ]6!þÁe3ÜeïÛ]6Ë]6ñZ|ÙwÙt\ÏÇ]6!ê—Ív—M¼×]6×]6ñ^|Ù„¹lOuÙ”¹lRÔ.›r—MŠ?FpÙLwÙäûvA—Ív—M¾Ö_6×]6ŸøT§Ä3Üe“¢.pÙwÙä{]à²ù½]ü¼lò½.ø²IsÙ ^ê²æ²)Q¸l†»lJü1‚Ëf¹Ë¦Þ· ºlŽ»lêµ.è²™»l>ñ©N‰gºË¦D]ಹ÷ºàË&ÌeSïuÁ—M™Ëñ¡.›i.›!ê—Ít—ÍŒà²Ùî²ïÛ]6×]6ãµ.ø² wÙt\Ïr—ÍuÑ—Íï âçe3Þë‚/›4—Íx¯ ¾l†¹lŸê²Yæ²™¢.pÙ,wÙLñÇ.›ã.›ù¾]ಙ»læk]ðe“î²é¸:%žÃ]6SÔ]6a.›ù^|Ù”¹læ{]ðe3ÍeƒøR—Í6—ÍuËf»Ëf‰?FpÙ\wÙ¬÷í‚.›p—Íz­ ¾lÊ]6W§ÄsºËf‰º Ë&Íe³Þë‚/›a.›õ^|Ù,sÙ ¾ÕesÌe³E]à²9î²Ùâ|TÇã.›ý¾]Ðe“î²Ù¯uÁ—Íp—MÇÕ)ñ\î²Ù¢.è²)sÙì÷ºàËfšËf¿×_6Û\6ˆuÙ\sÙœOü×=ÏÉ׿aÿ¾ž¾âãí,ùí.ß:…ø|;K~¹l~|êÅßÎ’ÿÛÛgƒÒ§NQüí,ùõ²¡O¢øÛYòëeCŸ:E?ù_—MêÔïˆ?uŠãëûâz鑟:Åñó}q½\6?>uŠâñ˜‹ëŠ‹+ξ/ŸáùïU÷ê(z>®Ò®ø‹•–®ÒîûÅE•6\¥Ý׋‹+m¹J»êâêJ;®Ò®º¸PiÓTÚUÚ6•vß;‰+íšJ»ïUZ˜£èxÄU÷œS¯ŸLú÷åø/Õˆó1ØñªÓ4"â¥q˜FD|ªF\¦ߪiDįlÄ©¿¸_W5âÖHñ£ñêFD<шº)nλ?_áûÕ>×fÙk³ŒåµîÚ ñÇ<®Ír×f¼oçtmNwmv|©ks»k³ãG]›×]›Ÿøz䵹̵ïÛ9_›Ç\›ˆ_qmÆc®ÍŽG¨k3͵‰¸9TT½Y÷_Ùáí¢ýŠu³Ÿîfßñ©Žô§;ÒG\éOw¤¸:ÒŸîHqu¤?Ý‘~Ç—:Ò_îH¿¸ß×&nöGßì)~ÅÍ>Ì‘>⡎ôÃéS\é‡9Ò툹ÆkÓþu5Ňêãiûø_²Ëõq‰‹}<]×ûEK}¼]—(Tôñu}\ê¢íOò×ÇOÙÇÇôq‰‹}éãz¿h¹Óôq½^´?úx˜>FÜñ­ne×ÞÊŽ¬¾•ýþ𼟷²# ·²ëneGli}+[áneç}°èVVîVv^‹oeÓÝÊŽ¬¾•mw+;j°p+æVvÄ`Ñ­l™[Ùy¿ñ­ì˜[Ùy,º•¥y’ú }?ºê7¢±wåsƒ'nÚ‰»â¸m'îª[Ùgâ¾>¦ôÇÄáq š¸twÅC©ž¸åž"㵫§ÈË=EF\=E^î)2âê)òrO‘WO‘—{ŠL?yõ9ÌSdŠ«§Èaž"S\=EóñTO‘Ó¦š¸¥'Žâ[MÜÑGñ+&. F—rÁÒ<OõpÈ‹¸Ïbþ¸m'.ÄMª'îÚ‰ ±bâÒM\ÇKMÜpâ&…‰sâJ£[N£C\itËitˆ+n9q¥Ñm§Ñá'KMÜ6ï7)ž¸k&.ÞoRs2sÒñ«˜“ë˜Äsrs‚¸bN®cNWÌÉuÌ âêÀí:æd>â&Eg˜Š+ædæ„âŠ9™†9A|*ædæd†z Üç˜ÄsRŽ9A\1'嘓ŽÅœ Çœ ®˜“ᘓŽ_Åœ\Çœ ®˜“ë˜Äsrs‚¸bN®cNWnñs2 sBqÅœLÜÌTO{âs‚¸bNÊ1'ˆ+æd8æ¤ãC1'Ã1'ˆ+æd8æ¤ãW1'×1'ˆ+æä:æqÅœ\Çœ ®˜“똓Ž &.ÌÄ¥¸IÑÄæ„âŠ9™†9A|*ædæ„âŠ9™†9™¥ž÷Ä9æqÅœ”cN:>s2s‚¸bN†cNWÌÉpÌIǯbN®cNWÌÉuÌ âŠ9¹Ž9A\1'_³´ßþñ_ƒ…‰K3q%nR4q†9A|*ædæ„âŠ9™†9¡¸bN¦aNæPO{âs‚¸bN†cN:>s2s‚¸bN†cNWÌÉpÌIǯbN®cNWÌÉuÌ âŠ9¹Ž9éøÏÁú1qa&ñTWf↸Iaâ¦aNŸŠ9™†9¡¸bN¦aN(®˜“i˜“9ÕSàž8Çœt|(æd8æqÅœ Çœ ®˜“á˜Äs2sÒñ«˜“ë˜Äsrs‚¸bN~ߤ~NÜ|½Iý˜¸4‡x©‰f⦸IÑÄæ„âŠ9™†9¡¸bN¦aN(®˜“i˜“¹ÔSàþpÇœt|(æd8æqÅœ Çœ ®˜“á˜Äs2sÒñ«˜“ë˜ÄsrsÒñ_ƒÅfâÖëMêÇÄ•™8暸i&n‰›MœaN(®˜“i˜Š+ædæ„âŠ9™†9ù„¾Ÿ÷Ä9æqÅœ Çœ ®˜“á˜Äs2s‚¸bN¦cN:~srs‚¸bN~ÍÒ¯‰ÛïIñÄ¥™¸ýz“ú1qÃLâSMÜ2·ÅMŠ&Î0'WÌÉ4Ì Ås2 sBqÅœLỤ̈ž÷Ä9æqÅœ Çœ ®˜“á˜Äs2sÒñ©˜“阓Ž_Åœ\Çœtü÷öGfâÎû_Rs2 sBqÅœLÜP\1'Ë0'ˆ/Åœ,ܬPO{âs‚¸bN†cNWÌÉpÌIǧbN¦cNWÌÉtÌIÇM\š‰ qÜG7ÌÄÅû_RÞÈ”÷GZÿůø|#SÞ&îïQüŽ¿‘)¯÷¸¿Fñ;þF¦¼MÜߣø#SÞ&îïQüþÉÿš¸¿çòm-ü{_âû{._&îŸQ|‰ßï¹üž¸ÿeßñx!S^'îõ²‰x!S^'î¯Qüޝ2åmâþÅ—ø ™òr÷úg_â/dÊËÄý3Š/qC¦¬©ær¯¿ñ°ÿÊ·ýж ¶t|*°e:°q¶L¶ ®À–éÀÄØ2Ø‚Ÿü¯¹¤é27Ò)ÎéFzÌt¾Ï%ÝHÀ-ˆ‡[€-W`K°ñ¥À–eÀŠ+°e°…â lYl¡¸[–[ÖûŸŸÝÎ×ýk’¿â%ïÃ×݇—ØïÃ3Ü}x‰Å}¸Ü}x‰Å}xºûð‹ûðq÷áŽ_y^æ>¼ÄÀÒ}ø˜ûðzXºÇcîÃKÜHé>œæ>¼ÔÀâ><þಉ˜â>¼Â܇—Xº—¹¯÷åûð4÷áõ:°?îÃÛ܇7ôÌêOÊQc]v¬@Qc=7Ö[â`¬ÓõǦëáÆz‹ýc½ÜXwü¨±¾n¬?ñõȱÞf¬·xÒ@c}ÍXï÷Cë0cxª±.3Öˆ5Öó.›ˆ¥Æ:ÍXï÷CëaÆñ©Æz™±F|«±>f¬7ˆÎ:âvÛc=ìX7å"Ç:ÜXu»í±.7ÖGÜn1ÖÓuÇ—ëíÆúˆÛmõzÜXâ+äX3ÖGüÝŠ±ŽÇŒõy¿ÝòX§ë#n·4ÖÃŒõQ·[ŒõúƒË&b«±.3ÖGÜni¬§ë#þn¥±Þf¬ÏëíöÇX_3Ö߆ZWÜn{¬§ëO|ɱN7ÖWÝn{¬‡ë+n·ëåÆúŠ-c}ÜX_q»ÅX‡뎧ëkÆúŠg&4ÖaÆú¾ßny¬ËŒõ·[ëiÆúªÛ-ÆzÿÁeqÔX3ÖWÜni¬—ëûz»ý1ÖÇŒõ}½ÝòXïÇŒuÇ·ö#n·=ÖËuÇ·ë2cï>ÔXO3Öˆ/5ÖÛŒ5âGõ5cÝñj¬ÓŒ5â¥Æ:=Öÿ=½4Ö©Çšâ¥Æz豦øTc½ôXS|«±>pÙD\5ÖS5âk©±Þz¬)~ÔX_=ÖˆïGu豦¸!šv¨3îU_o_cý÷¼Å·:"?ãSñTÓñTˆ+žj:ž qÅSMÇSu|)žj9ž qÅS-ÇSáЧ ÃSQ\ñTax*Š+ž* OEqÅS…á©(®xª4<âKñTËðTW<Õ2<â[ñTÛðTW<Õ6<ÕN1ïÿùÍýsη"øŠoµ»ô;ÉÈ-`º- å¼¶€í¶€óŽ-àº- ż÷°Âm)æ[Àp[@ǧÜÒl)æ¶€a¶€|ŸwÞ–ÙRÜÆi 8f H5ï½äó—Md¨-`›- żÓpÍâ¯fl;̯óþc (³ n˜¯]j øÏoq½µÂßuñ/µD»D”j…Ï["J´–¬!®€µé€µŽ/¬-¬!®€µå€5ݶ°†ß{(`- °Fq¬…Ö(®€µ0ÀŰ–XC<°–XC|)`m` ñ­€µm€5Š+`m`â XÛXÛ X{Î3ÞŸ³ÿÕ#_ñR;Ȱ;ÈuÑ;ÈW]üØAÀ=©ÄÑvŸŠ¶›Ž¶ëøR´Ýr´⊶[޶C\ÑvËÑvˆKÚ. mG?yEÛ…¡í(®h»0´Åm—†¶C<m—ù—M¤¢í–¡íߊ¶Û†¶£¸¢í¶¡í(®h»mh;ŠÚnOõ”ÿS*eKeŠÇ]*Ó– ˜/U*áJ¥ã©Jå¸R™Ÿù·TÖãJeªçy]*éJeŠ¿LP*ÕJÇ—*•íJ¥ãG–Ê4¥2ÅÁ?•Ê6¥2ßþ¹T®)üÞU*aJñT¥RpÙDQ*û1¥2ÅÁ?•JšRA¼T© S*ˆOU*Ë” â†Ü éëR¶T–xèÑ¥²l©,±j TÒ•JÇK•Šã;¾¸ˆ¸â—ãW<âr<"âŠG\ŽGD\òˆaxDúÅ)1 HqÅ#¦áOÅ#¦á)®xÄpÙD*qñ­xÄmxDŠ+q‘âŠG܆G¤¸á· »T¦-•-‡.•mKe‹U¥R®TðY^¢T–£!ñW4är4$⊆\ކD\ÑËш+r9²ã[ÒahHüäCÑahHú½+2 IqEC¦¡!)®hÈœpÙD*rñ­hÈmhHŠ+r’⊆܆†¤¸¡!·Â»T–-•#Ìt©[*G¬(•áJo¥Jű˜_ŠÅ\ŽÅD\±˜Ë±˜ˆ+s9qÅbnÇbâ'YÌ0,&~ò¡XÌ4,&â©XÌ4,&Å‹™†Å¤¸b1sýÁe©XÌmXLÄ·b1·a1)®XÌmXLŠ+sñcXÌ­`Ê.•mK¥? O•ʵ¥rŪR™®T€µ©Rq$(^»"A—#AW$èr$(âŠ]ŽíøV$èv$(â’ C‚â'ŸŠMC‚R\‘ iHPŠ+4 JqE‚æþƒË&R‘ Û ˆoE‚nC‚R\‘ Û W$è1$(âÇ G¡œ]*Ç•Jǯ*•¯Ç7\*ç«Je™RA|«RqjÇ—âP—ãPWêr*âŠC]ŽCÅ/Nq¨Ûq¨ˆK5 ‡ŠŸ|*5 ‡JqÅ¡¦áP)®8Ô4*Ňšç.›HÅ¡náÒE«8Ôm8TŠ+uñ£8Ôc8TŠõó¾I‘O©\[*!ß T•JˆU¥²]©tü¨R®TB¢]ŸRY®TB=•íR9®TBüýÒ¥²W*!V ”J¹Réø¥¦TBœjP©”)•x_5¸T¦)•«•Ê6¥jÕ@©Ü?¸l¢U*Ë”JˆUƒJå˜R qªR9)•x]5~”JšRAÜÀ®Gá¦]*_«ÆRIñø¥’®TR¬(•ãJ¥ãW•Šce;¾+»+‹¸be—ce;¾+»+‹¸be·ce—¬lV?ùT¬lV–⊕MÃÊR\±²iXYŠ+V¶ž?¸lþ¹Â_KŰ²tÍ+VvVñ£XÙcXYŠ+VöV–↕=¥H‘.•p¥Râñ J¥\©”X5P*וÊ'ž*•åJ¥ÔªÑ¥r\©”z*û)•ý¸R)ñ÷ J%]©”X5P*Ó•JÇ—,•2¥RâTƒJešR©÷UƒKe›R)±jP©\S*¥V ”JüÁe•ªTŽ)•«Jå<¦TJœjP©¤)•z]5~”Ê0¥‚¸!j‚RQ*éJeˆÇ7(•áJeˆUï›åˆÚާ"j—#j;¾Q»QÛñ­ˆÚíˆZÄQ»Q‹¸"j·#j—Dm¢¿¸TDm¢–⊨MCÔR\µeˆZºhQ[ù—M”"j·!j?Ѝ=†¨¥¸"j!j)®ˆÚcˆZŠ¢ö((¥R®T¦x|ƒR™®T¦X5P*ލE\µËµ_Š¨ÝŽ¨íøVDívD-⊨ݎ¨E\µÛµˆK¢6 QK—"jÓµWDm¢ñRDm¢–⊨­úƒË&JµÇµˆEÔCÔR\µÇµWDí1D-Å Q{”ŠR®T–x|ƒRY®T–X5P*ލE\µËµߊ¨ÝލE\µÛµˆ+¢v;¢qEÔnGÔ".‰Ú4D-~煮Ú4D-ÅQ[†¨¥‹VµeˆZŠ+¢¶Æ\6ÿé U*†¨Eü(¢ö¢–⊨=†¨¥¸"j!j)nˆÚ£ T”Êt¥²Åã”Êv¥²ÅªRqD-⊨ݎ¨íøVDívD-⊨ݎ¨E\µÛµˆ+¢v;¢¶ãGµiˆZüÞSµiˆZÄKµeˆZŠ+¢¶ QKqEÔÖüƒË&JµÇµˆEÔCÔR\µÇµWDí1D-Å Q{”ŠRY®TŽx|ƒR9®TŽX5P*ލE\µÛµߊ¨ÝލE\µÛµˆ+¢v;¢qEÔGÔvüH¢6 Q‹ß{*¢¶ Q‹x)¢¶ QKqEÔ–!j)®ˆÚZpÙD)¢ö¢ñ£ˆÚcˆZŠ+¢ö¢–⊨=†¨Eü¢ö((¥²]©\ñø¥r]©\±j TQ‹¸"j·#j;¾Q»Q‹¸"j·#jWDívDmÇ"j#j—Dm¢¿÷RDm¢–⊨-CÔR\µeˆZŠ+¢¶ö\6QЍ=†¨¥‘QDí1D-ÅQ{ QKqEÔ^CÔ"~ Q{”ŠR9¦T¿¢TÒµOEÔ¦#jWDívDmÇ·"j·#jWDívD-⊨ݎ¨íøQDíqD-â’¨-CÔâ÷^Ѝ-CÔR\µeˆZŠ+¢¶ QKqEÔÖùƒË&JµÇµˆEÔCÔR\µÇµ4°Š¨½†¨¥¸!j¯‚RQ*וJˆÇ7(GÔ"®ˆÚtD-⊨ݎ¨íøVDívD-⊨ݎ¨E\µÇµ?Ѝ=ލE\µeˆZ\6¥ˆÚ2D-ÅQ[†¨¥¸"j˵WDmÝ?¸lb(¢ö¢–&NµÇµWDí5D-âWµ×µ7DíUP*Þù͵OEÔ¦#jWDm:¢qEÔnGÔv|+¢v;¢qEÔnGÔvü(¢ö8¢qEÔGÔ".‰Ú2D-.›RDm¢–⊨-CÔR\µeˆZŠ+¢v<pÙÄPDí1D-âGµÇµ4°Š¨½†¨¥¸"j¯!j)nˆÚ« T”Š#jWDm:¢qEÔ¦#j;^Š¨ÝŽ¨íøVDívD-⊨=ލíøQDíqD-⊨=ލE\µeˆÚ[âTƒJŵWDm¢–⊨-CÔ">Q;â.›Ѝ=†¨Eü(¢ö¢ñ«ˆÚkˆZŠ+¢ö¢–↨½ JE©8¢qEÔ¦#jWDm9¢¶ã¥ˆÚíˆÚŽoEÔnGÔvü(¢ö8¢qEÔGÔ"®ˆÚãˆZÄ%Q[†¨½CœjP©¢–⊨-CÔR\µÃµˆEÔŽüƒË&†"j!j¿Š¨½†¨¥¸"j¯!j)®ˆÚkˆZŠ¢ö*(¥âˆZÄQ›Ž¨íx)¢¶Q‹¸"j·#j;¾Q{QÛñ£ˆÚãˆZÄQ{Q‹¸"j#j—Dm¢öNqªA¥bˆZŠ+¢¶ Q‹øPDí0D-ÅQ;ê.›Ѝ½†¨Eü*¢ö¢–⊨½†¨¥¸"j¯!j)nˆÚ« T”Š#jWDm:¢¶ã¥ˆÚrD-⊨ݎ¨íøQDíqD-⊨=ލE\µÇµˆ+¢ö8¢qIÔ–!jï§T*†¨¥¸"j‡!jЍ†¨¥¸"jÇøƒË&†"j¯!j¿Š¨½†¨¥¸"j¯!j)®ˆÚkˆZŠ¢ö*(¥âˆZÄQ›Ž¨íx)¢¶Q‹¸"j#j;~Q{Q‹¸"j#jWDíqD-⊨=Ž¨íø•Dm¢önqªA¥bˆZć"j‡!j)®ˆÚaˆZŠ+¢vÌ?¸lb(¢ö¢ñ«ˆÚkˆZŠ+¢ö¢–⊨½†¨¥¸!j¯‚RQ*ލE\µéˆÚŽ—"j˵ˆ+¢ö8¢¶ãGµÇµˆ+¢ö8¢qEÔGÔ"®ˆÚëˆÚŽ_IÔ–!jï§(•aˆZć"j‡!j)®ˆÚaˆZŠ+¢v¬?¸lb(¢ö¢ñ«ˆÚkˆZŠ+¢ö¢–⊨½†¨Å¼?†¨½ JE©8¢qEÔ¦#j;^Ѝ-GÔ"®ˆÚãˆÚŽEÔGÔ"®ˆÚãˆZÄQ{QÛñ«ˆÚëˆZÄ%Q[†¨½WœjP©¢–⊨†¨¥¸"j‡!j)®ˆÚ±ÿಉ¡ˆÚkˆZį"j¯!j)®ˆÚkˆZŠ ¢öW]ü*•ž÷Gµý¾I‘.CÔR\µeˆZÄKµeˆZŠ+¢ö¢ñ£ˆÚcˆZŠ+¢ö¢–⊨=†¨Eü*¢ö¢–â’¨š¨EüwwP©h¢–㊨š¨å¸"j‡&j9®ˆÚqþಉ¡ˆÚ«‰ZŠ_EÔ^MÔr\µWµ4°Ï£JEµOS* JE©\W*!ß T•JˆU¥²]©t\µg¸R €}Je¹R õT¶Kå¸R ñ÷K—Ê}\©„X5P*åJ¥ã’¨aJ%Ä©•J™R‰÷UƒKešR ±jP©lS*¡V ”ÊýƒË&¦"jï2¥bÕ R9¦TBœjt©üZ5~•J¼®?J%M© ^¦T”Š=}\©¤x|ƒRIW*)V ”Êq¥ÒqEÔžéJ%%ö)•íJ%ÕSÙ.•ëJ%Åß/(•p¥’bÕ@© W*—DíHS*)N5¨T†)•|_5¸T–)•«•Ê1¥’jÕèR™Ï\61Q{·)•«•Ê5¥’âTƒJ%L©äëªñ£TÊ” âÃ”Š‚RQ*áJ¥Äã”J¹R)±j T®+•O|(¢ö,W*%°O©W*¥žÊ~Jå>®TJüý‚RIW*%V ”Êt¥ÒqIÔŽ2¥RâTƒJešR©÷UƒKe›R)±jP©\S*¥V ”JüÁeSµ÷˜R)±jt©ü®‹Ÿ¥RâTƒJ%M©Ôëªñ£T†)ħ)¥¢TÒ•ÊoP*ÕÊ«F—Êx\©|âCµg»Rû”Êu¥2ÔSÙ.•p¥2Äß/(•r¥2ĪRY®T:.‰Ú1L© qªA¥²L©Œ÷UƒKå˜RbÕ@©ÌÇ”ÊP«J%ÿಉ©ˆÚ{M© ±jP©„)•!N5¨TÊ”Êx]5~”Ê4¥‚ø2¥¢ T”J¹R™âñ JeºR™bÕ@©„+•Ž+¢öW*S`ÿ–Ê}\©LõT¶K%]©Lñ÷ Je¸R™bÕ@©lW*—D혦T¦8Õ RÙ¦TæûªÁ¥rM©L±jP©„)•©V ”JýÁeSµ_uñ£T¦X5¨TҔʧT*ÔÊ|]5~”Ê2¥‚ø6¥¢ T”Êp¥²Äã”Êr¥²ÄªRIW*WDí¹®T–À>¥®T–z*Û¥R®T–øû¥2]©,±j TŽ+•ŽK¢v,S*KœjP©S*ë}Õ R™)•%V *•4¥²ÔªRpÙÄœªT”Ê«•J™RYâTƒJešRY¯«ÆRÙ¦T?¦T”ŠR™®T¶x|ƒRÙ®T¶X5P*åJ¥ãЍ½+•-°O©¤+•­žÊv© W*[üý‚RY®T¶X5P*וJ£‘¿ÿ€G©lS*[œjP©\S*û}ÕàR S*[¬T*eJe«U¥2ÿà²ùÏïI•JšRÙbÕ R¦T¶8Õ RY¦Töëªñ£TŽ)į)¥¢T–+•#ß TŽ+•#V ”Êp¥ÒqEÔÞp¥r$ö)•r¥rÔSÙ.•éJ刿_P*Û•Ê«F—J|ýÍÎ¥Òdåï?àQ*ǔʧ(•ù˜R9ï«—JšR9bÕ R¦TŽZ5P*ë.›˜[•J™R9bÕ R™¦TŽ8Õ RÙ¦TÎëªñ£T®)•ŽÇcJEA©(•íJåŠÇ7(•ëJåŠU¥2]©t\µ7]©\ €}Je¸R¹ê©l—Êr¥rÅß/(•ãJåŠUƒJ%L© žªT®)•+N5¨T”Ê}_5¸Tʔʫ•Ê4¥rÕªRÙpÙÄ<ªT†)•+V *•eJåŠS *•cJå¾®\*ñ˜Réx¢6”ŠRqD-⊨ލíøPDípD-⊨½Ž¨íøUDíuD-⊨½Ž¨E\µ×µÿÝT*©K…â%Je¢ñ©ˆÚiˆZŠ+¢v¢–⊨†¨¥¸"jçùƒË&æU¥bˆÚxĪA¥bˆZŠU*†¨E<Q†¨¥¸!jCA©(GÔv|(¢v8¢qEÔGÔ"®ˆÚëˆÚŽ_EÔ^GÔ"®ˆÚëˆZÄQûµƒü(•«•J™RA|¨R1D-âSµÓµWDí4D-ÅQ; QKqEÔÎû—M¬G•Š!j#ĪA¥bˆZŠ+¢6 Q‹x(¢6 QKqCÔ†‚R»T†#j;>Q;Q‹¸"j‡#jWDíuDmǯ"j¯#jWDíuDmÇw•J˜RI±jP© S*ˆOU*†¨E|*¢v¢–⊨†¨¥¸"j§!j)®ˆÚõüÁe+T©¢6R¬T*†¨E<Q†¨¥¸"jõ7Dm((¥âˆZÄQ;Q‹¸"j‡#j;>Q{QÛñ«ˆÚëˆZÄQû».~–J‰¿_¨TÒ”J‰UƒJešRA|©R1D-âSµÓµWDí4D-ÅQ; Q‹øRDíŠ?¸lb¥*CÔF‰U¥†¨E<Q†¨¥¸"jõ7Dm((¥âˆZÄQ;Q‹¸"j§#j;>Q{QÛñ«ˆÚëˆÚŽ=•E©„)•!þ~¡R)S*C¬T*Ë” â[•Š!jŸŠ¨†¨¥¸"j§!j)®ˆÚeˆZÄ—"jWþÁeóŸKY•Š!jcˆUƒJŵWDm¢–⊨ CÔRܵ¡ T”Š#jWDípDmǧ"j§#jWDíuDmǯ"j¿!.•©žÊ¢TҔʿP© S*S¬T*Û” âG•Š!jŸŠ¨†¨¥¸"j§!j_Ѝ]†¨¥¸"jWýÁeKµaˆÚŽÿî*CÔR\µaˆZŠ+¢6 QKqCÔ†‚RQ*ލE\µÃµŸŠ¨Ž¨E\µ×µÿîŽ.•0¥²ÔSY”J™RYâï*•iJe‰UƒJå˜RAüªR1D-âSµÓµWDí2D-âKµËµWDírÙ,EÔ†!j;þ»;¨T QKqEÔ†!j)®ˆÚ0D-Å Q JE©8¢qEÔGÔv|*¢v:¢qEÔ~`?®Ž-°.•4¥²ÕSY”Ê0¥²Åß/T*˔ʫ•Ê5¥ÒñPDí4D-âSµÓµˆ/EÔ.CÔR\µËµWDíšrÙ,EÔ†!j;þ»;¨T QKqEÔ†!j)®ˆÚ0D-Å Q JE©8¢qEÔGÔv|*¢v:¢ñ)KŸ €u©”)•£žÊ¢T¦)•#þ~¡RÙ¦TŽX5P*aˆZÄCµÓµˆOEÔ.CÔ"¾Q» QKqEÔ.CÔR\µkýÉe³Q†¨#V *CÔR\µaˆZŠ+¢6 Q‹x¢6”ŠRqD-⊨ލíøTDítD-âK–Š;q»ëR¦T®z*‹RY¦T®øû…Jå˜R¹bÕ R1D-ÅQ; Q‹øRDí2D-ÅQ» QKqEÔ.CÔR\µkÿÉe³Q†¨+V *CÔR\µaˆZŠ+¢6 Q‹x¢6üõ;xö]¯¥òwÛ|ÅÇwûV*·ÍW|¾q·o¥òwÛ|Ç߸ۿÿ‹7Ôöûµ?/çrï¥òŸ¶y‰Ïïêy}\ûWÛ¼Ä÷wõ¼•Êßmó¿ßÕóV*·Íw<^¸Ûþ‹Ôö;¾^¸Û·Rù»m^â/ÜíK©üÓ6/ñîömù»m^â/Üík©ì÷ü—ÍzAm¿â_¥òWõ¼•Êßmóánߎ;þn›—ø wû]*ÿ¶Íw<_¸Ûþ ƒÚfˆ¶©|þ¾Œÿ+ßjè+>©;©Ûñ©HÝéH]Ä©;©‹ø‘9ÉÃî«mzZz¢øVÐÑů؀ºˆ‡"uúW¤î2¤.âK‘ºËºW¤î2¤.Å©» ©KqEê®û'—ÍV¤nR7C´ m@†Ô¥¸"uÓºˆ§"uÓº7¤n6z§:©l')V¶;i:зãS¾Ó¾ˆ+Ðw:Ðñ+;ÉfJ.­;i›NJõ°tM'¥ø³Š:É€¾W oЗâ ô]ôE|)ÐwЗâ ô]ô¥¸}—})®@ßýüÉe³èôÅÀ†}À¾ˆ§}Ó€¾W oЗâôÍ~óZÕIÃv’BmÑIŽF\qÂÓqˆ+Nx:N¸ãë‘dγԢƒN:¦“J=kîN à #Šà S\qÂa8aŠ+NxNñ¥8áe8aŠ+NxN˜âŠ^†F|+NxÇŸ\6[qÂa8á,±è “Òpˆ§â„ÓpÂWœpN˜â†Î&uU'MÛIŠÔE'9Ìq…O‡#®0ãå0㎯dŽ!s¨EtM' õ¨d0cŠ+Ì8 fLq…‡ÁŒ)®0ãe0cÄ—ÂŒ—ÁŒ)®0ãe0cŠ+ÌxÌñ­0ãrÙl…‡ÁŒ;þ»z¨“ fLq…§ÁŒ)®0ã4˜1Å fœMêªNZ¶“è‹Nr”2âŠRžŽRîøR”òr”2â);ɼ/@Nµèt'…¡”E)‡¡”)®(å0”2Å¥†R¦¸¢”—¡”_ŠR^†R¦¸¢”—¡”ߊRÞ†R¦¸¢”wýÉe³¥œ†Rîøïê¡N2”2Å¥œ†R¦¸¢”ÓPÊ7”òç+|UOwÒ¶¤8at’ƒœWót3þñ r^rF¼d'¹ÃÊ¥t’œ)® ç03Åär¦¸‚œÃ@ÎWó23âKAÎË@ÎWó63â[AÎÛ@ÎWórÙl9§œ;þ»z¨“ äLq9§œ)® ç43Å äœ[=å¿õÏc»ýVV_ñ£ 9$°E'5$0—ƒ¶8ãnH`¥ƒ¶ê¤$°†ƒ'Œ§½ØÞù@QØ¢“ Ä4ÀV{ c -: @>Ø¢“8Øâ/@û1À~ï$‚vH`¿vC{H`«NêËf/ lÕI dH`‹N$Ó@ûý/†¶ö{'1$`àé<¢¬þó’ÿþ‘CµØWü¨ýëÚýKÑÏØ¿º¸B·§C·;¾º½º¸D·Ã‚YV½t›â ݃nS\¡ÛaÐmŠ+t; ºx*t{tñ¥ÐímÐmÄ·B··A·)®ÐímÐmŠ+t{¯?¹l¶B·Ó ÛyDYÑþeÐmŠ+t; ºMq…n§A·/ƒnçUÜÓ8{¾UÚß]÷/µ¾]»¾_VëÛrëÛUûW¯oÇ­oW1½¾ ·¾]Ui½¾-·¾)xšÖ·2ëÛ•äQ¯oÓ¬oWT­oÛ¬oWœSa}ËǬoWT­oiÖ·+* ëÛ~ÌúvÅß„´¾¥Yßî{¥ñú6Ìúv_+íÇú¶ÌúvU¥a};f}»ªÒ°¾M³¾]Qi´¾m³¾Ý÷ý‹×·kÖ·û^i´¾•!ÊëQ<Õ§ëÊu]LJêºß-ö£ë \³ê:dzw|*ž}:ž½ãKñìËñìˆ+ž}9ž^»âÙÃðìW<{žâŠgóS\ñìixvÄSñìixvÄ·âÙ·áÙ)®xömxvŠ+ž}žâŠg߆g§¸âÙ·áÙ1ï©xö4<;ÅÏž†g§¸âÙËð숗âÙËðìŠÓútݰ]âñ%º.\×5Û›ªëŽëºP‹Ù§ëÖãº.Ñ]·\×u|«®;®ëN]7M×…$¥ºë¶éº‹uÝ5]‡_Ü£º.M×!^ªë†éº‹u]š® ñ·&uÝ0]ïkr×-Óuñº˜ýèºcºñ+.›ó˜® ±˜Q×mÓu!ë©ë®éºx_̸ëÂt⩺Îpò•ŠÿútÝ´]—â±(º.]×53\ªë®ëºT‹Yw]¸®KÅZt×m×u?ªë®ë:…šS×-Óu) ¬îºcº.Åb†®ËÇt]Š?B©ëÊtâCuÝ4]—b1£®+Óu)hêºiº._³]·M×åëbö£ë®éºŽõäê„麋uÝ1]—ï‹u]=¦ëò}1ã®KÓuˆ—ê:ÃßW)®ìÓuËvÝ'¾eוëºf‘‡èºõ¸®+µ˜u×¥ëºRÏK»ëŽëºŽ_Ñuûq]§vêºmº®$ÙÕ]wMוX̨ëÂt]‰?B©ë†é:ħêºeº®ÄbF]7Lוx@]·L×Õû‰wÝ1]W¯‹wÝyL×uü„êº4]Wb1£®»¦ëJ< ® Óuõ¾˜qוé:ćê:Ãõ׋Ywݶ]7Ò]7\×áœUׅ뺡³îºr]×ñ¡ºîº®ûÄ÷£º.\×)4žºî˜®’ût]>¦ë†X̨ëÒtÝ„R×MÓuˆ/ÕuÛtÝ‹uÝ4]7Þ3îºmºn¼Ÿ˜q×]Óuãu1ûÑuaºqõHë”éº!3t]=¦ëÆûbÆ]—¦ëÆûbÆ]7L×!>U×_àúÆÝ>]wl×õ;{Ë®›®ë~«®K×uS-fÝuÃuÝTR?]·×uý£ ÕuéºN!÷Ôu×tÝ‹u]˜®›b1£®+ÓuSüJ]·L×!¾U×ÓuS,fÔuËtÝ2©ëŽéºù~bF]wÓuóu1ûÑuiºqõHë ÓuS,fÔuaºn¾/fÜueºn¾/fÜuÓtâKuñ>¡oîÓu×vÝRÐHwÝr]&[u]¹®[j1ë®›®ë–zÚ]®ë>ñªëÊuBùqÑæcºn‰ÅŒº.M×-±˜Q× ÓuKüJ]·M×!~T×]ÓuK,fÔuÛtÝ2©ë®éºõ~bÆ]¦ëÖëbö£ëÊtâê‘Ö™¦ë–X̨ëÒtÝz_̸ë†éºõ¾˜q×-ÓuˆoÕuÆoø„¾9¸O×ýn±Ÿ]·4Ò]·]×uü¨®szDÇ—Ò#–Ó#WzÄvzDÇ·Ò#¶Ó#ðÚS2§Ñ#(®ôˆ4zÅ•‘F ¸Ò#ÒèWzD=ñ­ôˆmôŠ+=â=‚.Z¥G£GP\éÇèW´ŽÑ#:þUiè:£GP\éeôŠ+=¢ŒAq¥G”Ñ#êˆÅ ]®ëŽ‚FºëŽëºŽ_ÕuÓuÝQ‹YwÝv]wÔƒÔîºr]÷‰ï¡ºnº®SŠu]š®;b1£®¦ëŽX̨ë–éº#þ¥®»¦ë:^êº0]wÄbF]wM×ñ(“º.L×÷3îº2]w^³]7M×!®imºîˆÅŒºn˜®;ï‹wÝ2]wÞ3îºcºñ+ºno¢®XÌÐuéºî*h¤»îº®kZyËy_Ê›XΛ@\yÛyßÊ›ØÎ›À.Õ!so‚âÊ›HãMP\yi¼ Š+o¢Œ7A—ò&ÊxˆoåMãM ~”7qŒ7AqåMãMP\yÇxW´Žñ&0q¥¼‰2ÞÅ•7QÆ› ¸ò&ÊxˆåM ãMŒG,fèº2]‡ø]—Λx_pÕuΛèøRÞÄrÞDÇ·ò&¶ó&WÞÄvÞýäÕ!so‚âÊ›HãMP\yi¼ Š+o¢Œ7x)o¢Œ7øQÞÄ1ÞÅ•7qŒ7AqåMãMP\yÇxW´Žñ&0q¥¼‰2ÞÅ•7QÆ› ¸ò&†ñ&ʛƛ!3tÝp] é®sÞĆ­ºÎy_Ê›ØÎ›èøVÞÄvÞâÊ›ØÎ›À.Õ!so‚âÊ›HãMP\yi¼ ºl”7QÆ› ¸ò&ÊxˆåMãMP\yÇxWÞÄ1ÞÅ•7qŒ7AqõHëoWÊ›(ãMP\ye¼ ćò&†ñ&(®¼‰a¼‰‘b1C×M×u© ‘î:çM €Ðªëœ7Ññ­¼‰í¼ Ä•7±7¸ò&¶ó&ð£KuȜƛ ¸ò&ÒxWÞDoñRÞDo‚âÊ›(ãM ~”7qŒ7AqåMãMP\yÇxWÞÄ1ÞâW=Һƛ ‰SÞDo‚âʛƛ@|(obo‚âʛƛ%3tÝr]W é®sÞDÇSyÛyßÊ›ØÎ›@\yÛyˆ+oâ8o?ºT‡Ìi¼ Š+o"7x)o¢Œ7AqåM”ñ&(®¼‰2ÞâGyÇxWÞÄ1ÞÅ•7qŒ7AqåM\ãM ~Õ#­k¼ L\)o¢Œ7A«¼‰a¼ Š+obo‚âʛƛC,fèºíºn(h¤»ÎyOåMlçMt|+ob;oqåMlçMtü(oâ8o?ºT‡Ìi¼ Š+o¢Œ7x)o¢Œ7AqåM”ñ&(®¼‰2Þ]uÊ›8Æ› ¸ò&Žñ&(®¼‰c¼ įò&®ñ&(®i]ãM`âJyÃxˆåM ãMP\yÃxWÞÄ0ÞĘb1C××uSA#ÝuΛèx*ob;o¢ã[yÛyˆ+oâ8o¢ãGyÇyøÑ¥:dNãM ^Ê›(ãMP\ye¼ Š+o¢Œ7AqåM”ñ&?Ê›8Æ› ¸ò&Žñ&(®¼‰k¼ åM\ãMP\=ҺƛÀÄ åM ãMP\yÃxWÞÄ0ÞÅ•71Œ71–XÌÐu×uÝRÐHwó&WÞÄvÞDÇ·ò&¶ó&WÞÄqÞDÇò&Žó&ð“OuÈ\Æ›@¼”7QÆ› ¸ò&ÊxWÞDo‚âÊ›(ãMÐE«¼‰c¼ Š+oâoñ«¼‰k¼ Š+oâo‚âê‘Ö5Þ&n(obo‚âʛƛ ¸ò&†ñ&(®¼‰a¼‰±Åb†÷%vÞDÇSyé¼ Ä•7±7Ññ­¼‰í¼ Ä•7qœ7Ññ£¼‰ã¼ üäK2—ñ&(®¼‰2ÞÅ•7QÆ› ¸ò&ÊxWÞÄ0ÞâGyÇxWÞÄ5ÞŒò&®ñ&(®¼‰k¼ Š«GZ×x˜¸¡¼‰a¼ Š+obo‚âʛƛ ¸ò&†ñ&Æ‹ºÎyˆ+o"7¸ò&¶ó&:¾•7±7¸ò&Žó&:~”7qœ71ŽX̨ëŒ7AqåM”ñ&(®¼‰2ÞÅ•7QÆ›@|(oboñ£¼‰c¼ įò&®ñ&(®¼‰k¼ Š+oâo‚âê‘Ö5Þ&n(obo‚âʛƛ ¸ò&†ñ&(®¼‰i¼‰qÅb†®sÞâÊ›HçMt¼”7±7Ññ­¼‰í¼ Ä•7qœ7Ññ£¼‰ã¼‰qÅbF]g¼ Š+o¢Œ7AqåM”ñ&(®¼‰a¼ ćò&†ñ&?Ê›¸Æ›@ü*oâo‚âÊ›¸Æ› ¸ò&®ñ&(®i]ãM``‡ò&†ñ&(®¼‰a¼ Š+oboñ©¼‰i¼‰ùˆÅ ]ç¼ Ä•7QΛèx)ob;o¢ã[yÛy?Ê›8Λ@\yÇyó‹uñ&(®¼‰2ÞÅ•7QÆ› ¸ò&†ñ&ʛƛ@ü*oâo‚âÊ›¸Æ› ¸ò&®ñ&(®¼‰k¼ Š«GZ×x4°Ê›Æ› ¸ò&†ñ&(®¼‰i¼ ħò&¦ñ&fˆÅ ]ç¼ Ä•7QΛèx)ob;o¢ã[yÇy?Ê›8Λ@\yÇy3ÄbF]g¼ Š+o¢Œ7AqåM”ñ&ʛƛ ¸ò&†ñ&¿Ê›¸Æ› ¸ò&®ñ&(®¼‰k¼ Š+oâo‚ââ‘ÖÌt]ˆÅŒºÎxWÞÄ0ÞÕ…ò&¦ñ&(®¼‰i¼‰™b1C×9oqåM”ó&:^Ê›ØÎ›èøQÞÄqÞâÊ›8Λ@\yÇy3ÅbF]g¼ Š+o¢Œ7AqåM ãM >”71Œ7AqåM ãM ~•7q7AqåM\ãMP\y×xWÞÄ5Þ&îyT×o‚æ]yÃxWÞÄ4ÞâSyÓxWÞÄ4ÞÄ,±˜¡ëœ7¸ò&Êy/åMçMtü(oâ8oqåMçM ®¼‰ë¼‰Yb1£®3ÞÅ•7QÆ›@|(obo‚âʛƛ ¸ò&†ñ&¿Ê›¸Æ› ¸ò&®ñ&(®¼‰k¼ Š oâ«ÅöÛ?þ«ÒÐuÆ›@|(obo‚êByÓxWÞÄ4ÞÅ•7171‡XÌÐuΛ@\y弉ޗò&Žó&:~”7qœ7¸ò&Žó&:~•7q71‡X̨ëŒ7AqåM ãM >”71Œ7AqåM ãMP\yÃxˆ_åM\ãMP\y×xWÞÄ5ÞFæyT×o‚⩺ÎxˆåMLãM >•717AqåMLãMP\yÓxsŠÅ ]ç¼ Ä•7QΛèx)oâ8o¢ãGyÇyˆ+oâ:o¢ãWy×ysŠÅŒºÎxˆåM ãMP\yÃxWÞÄ0ÞÅ•71Œ7øUÞÄ5ÞÅ•7q7AqáMü^Ì~vÝ|]Ì~tñ&(^ªëŒ7øTÞÄ4ÞÅ•717AqåMLãMP\yÓxs‰Å ]ç¼‰Ž—ò&Êyˆ+oâ8o¢ãGyÇyˆ+oâ:o¢ãWy×ys‰Å ]7Œ7øPÞÄ0ÞÅ•71Œ7AqåM ãMP\yÃxˆ_åM\ãMP\y×x™çQ]g¼ Чê:ãMP|¨®3ÞâSyÓxWÞÄ4ÞÅ•717AqåMLãMÌ-³îºrÞDÇKyå¼ Ä•7qœ7Ññ£¼‰ã¼ Ä•7q7Ññ«¼‰ë¼‰Žñ´è:ãMP\yÃxWÞÄ0ÞÅ•71Œ7AqåMLãM ~•7q7AqáMüj±_]·ßO̸ëŒ7AñR]g¼ ŠOÕuÆ›@|*obo‚âÊ›˜Æ› ¸ò&¦ñ&(®¼‰i¼‰O蛃ë®sÞâÊ›(çM ®¼‰ã¼‰ŽåMçM ®¼‰ë¼‰Ž_åM\çMÌ#3ê:ãMP\yÃxWÞÄ0ÞÅ•71Œ7øTÞÄ4ÞâWy×xóˆG™ÔuÆ› xª®3ÞŇê:ãMP|©®3ÞâSyÓxWÞÄ4ÞÅ•717AqåM,ãMÌ+3tó&WÞD9o¢ãCyÇy?Ê›8Λ@\y×y¿Ê›¸Î›˜W,fÔuÆ› ¸ò&†ñ&(®¼‰a¼ Š+oboñ©¼‰i¼ įð&~·ØÏ®»âQ&uñ&(^ªëŒ7Añ©ºÎxߪëŒ7øTÞÄ4ÞÅ•717AqåMLãM ¾”7±Œ7±±˜¡ëœ7¸ò&†ó&:>”7qœ7Ññ£¼‰ã¼‰Ž_åM\çM ®¼‰ë¼‰õˆÅŒºÎxWÞÄ0ÞÅ•71Œ7AqåMLãM >•717Ññß•F]g¼ Чê:ãMP|¨®3ÞÅ—ê:ãMPü¨®3ÞâSyÓxWÞÄ4ÞÅ•7±Œ7øRÞÄ2ÞÄ ±˜¡ëœ7¸ò&†ó&:>”7qœ7Ññ£¼‰ë¼‰Ž_åM\çM ®¼‰ë¼‰b1£®3ÞÅ•71Œ7AqåM ãM >•717AqåMLãMtüw¥Q×o‚⥺ÎxŸªëŒ7Añ­ºÎxWÞDoñ©¼‰i¼ Š+oboñ¥¼‰e¼ Š+obob¥XÌÐuΛ@\yÃyÊ›8ΛèøUÞÄuÞâÊ›¸Î›@\y×y+ÅbF]g¼ Š+obo‚âÊ›˜Æ›@|*obo‚âÊ›˜Æ›X)3ê:ãMP|¨®3ÞÅ—ê:ãMPü¨®3Þ⡼‰0ÞâSyÓxWÞÄ2ÞâKyËxWÞÄ2ÞÄ*±˜¡ëœ7¸ò&†ó&:>”7q7Ññ«¼‰ë¼ Ä•7q7¸ò&â7ÿ£ëJ,fÔuÆ› ¸ò&†ñ&ŸÊ›˜Æ› ¸ò&¦ñ&(®¼‰i¼‰Ub1£®3Þŧê:ãMP|«®3ÞÅ•7Æ›@<”7Æ›@|*oboñ¥¼‰e¼ Š+obo‚âÊ›XÆ›XC,fè:çM ®¼‰á¼‰ŽåM\çMtü*oâ:oqåM\çMtü«ÒÐuaºnˆÅŒºÎxWÞÄ4ÞâSyÓxWÞÄ4ÞÅ•717±†X̨ëŒ7Añ¥ºÎx?ªëŒ7x(o"Œ7AqåM„ñ&ŸÊ›XÆ›@|)obo‚âÊ›XÆ› ¸ò&–ñ&Ö‹ºÎyˆ+ob8o¢ãCy×y¿Ê›¸Î›@\y¿[ìg×5?ÿåôt×¥éº)3ê:ãM >•717AqåMLãMP\yÓxWÞÄ4ÞÄšb1£®3ÞÅ·ê:ãMP\ya¼ ÄCya¼ Š+o"Œ7øRÞÄ2ÞÅ•7±Œ7AqåM,ãMP\yËxk‰Å ]缉ŽåM çM ®¼‰ë¼‰Ž_åM\çM ¾d×…éºÆï¿œžîº2]·Äb†®›Æ›@|*obo‚âÊ›˜Æ› ¸ò&¦ñ&(®¼‰i¼‰µÄbF]g¼ ŠÕuÆ›@<”7Æ› ¸ò&ÂxWÞDoñ¥¼‰e¼ Š+obo‚âÊ›XÆ› ¸ò&–ñ&Ö‹YwÝpÞDLJò&†ó&WÞÄuÞDǯò&®ó&ß²ëÒt]ã÷_NOwÝ0]·ÅbF]g¼ Š+obo‚âÊ›˜Æ› ¸ò&¦ñ&(®¼‰e¼‰µÅbF]g¼ Š+o"Œ7x(o"Œ7AqåM„ñ&(®¼‰0ÞâKyËxWÞÄ2ÞÅ•7±Œ7AqåM,ãM|Bß\wó&WÞÄpÞâÊ›¸Î›èøUÞÄuÞâGv]™®kzÿËéé®›¦ëŽX̨ëŒ7AqåMLãMP\yÓxWÞÄ4ÞâKyËxëˆÅŒºÎxˆ‡ò&ÂxWÞDo‚âÊ›ãMP\ya¼ Ä—ò&–ñ&(®¼‰e¼ Š+obo‚âÊ›ØÆ›XW,fè:çM ®¼‰á¼‰ŽOåM\çMtü*oâ:oñ+»n˜®kzÿËéé®[¦ë®X̨ëŒ7AqåMLãMP\yÓxWÞÄ2ÞâKyËxëŠÅ ]Æ›@<”7Æ› ¸ò&ÂxWÞDo‚âÊ›ãM ¾”7±Œ7AqåM,ãMP\yËxˆoåMlãMìG,fè:çM ®¼‰é¼‰ŽOåM\çMtü*oâ:o¢ã_RÑuSwŗ꺭»ñ©¼‰i¼ Š+obo‚âÊ›˜Æ› ¸ò&–ñ&_Ê›XÆ›èøïJ£®3ÞÅ•7Æ› ¸ò&ÂxWÞDo‚âÊ›ãM ¾”7±Œ7AqåM,ãMP\yÛxˆoåMlãM싺Îyˆ+ob:o¢ãSy×y¿Ê›øÝb?».ÔƒTtÝ2]‡øV]wL×…X̨ëŒ7AqåMLãMP\yÓxˆ/åM,ãMP\yËxÿ]iÔuÆ› ¸ò&ÂxWÞDo‚âÊ›ãMP\yi¼ Ä—ò&–ñ&(®¼‰e¼ Ä·ò&¶ñ&(®¼‰m¼‰b1C×9oqåMLçMt|*oâ:o¢ã_‹º.L×¥zŠ®Û¦ë?ªë®éº‹uñ&(®¼‰i¼ Š+oboñ¥¼‰e¼ Š+obob§X̨ëŒ7AqåM„ñ&(®¼‰0ÞÅ•7Æ›@<•7‘Æ›@|)obo‚âÊ›ØÆ›@|+obo‚âÊ›ØÆ›Ø%3tó&WÞÄtÞDǧò&¾·]Wj1C×¥éºRRÑuÇtâWt]oñ©¼‰i¼ Š+oboñ¥¼‰e¼ Š+obo‚âÊ›XÆ›Ø%3ê:ãMP\ya¼ Š+o"Œ7AqåM¤ñ&OåM¤ñ&_Ê›XÆ›@|+obo‚âÊ›ØÆ› ¸ò&¶ñ&ö‹ºÎyˆ+ob:o¢ãsÊ® ÓuC-fèº2]7ÔƒTtÝ5]×ñPÞDoñ©¼‰i¼ Š+oboñ¥¼‰e¼ Š+obo‚âÊ›XÆ›ØC,fÔuÆ› ¸ò&ÂxWÞDoñTÞDo‚âÊ›HãM ¾”7±7øVÞÄ6ÞÅ•7±7AqåMlãMì)3tó&WÞÄtÞDÇç’]—¦ë¦ZÌÐuÃtÝTR»ëÂxˆ‡ò&ÂxˆOåMLãM ¾”7±Œ7AqåM,ãMP\yËxWÞÄ2ÞÄžb1£®3ÞÅ•7Æ› ¸ò&Òxˆ§ò&ÒxWÞDoñ­¼‰m¼ Š+obo‚âÊ›ØÆ› ¸ò&¶ñ&ö‹ºÎyŸÊ›˜Î›@|Ë®+ÓuK-fèºiºn©©è:ãM Ê›ãM >•7±Œ7øRÞÄ2ÞÅ•7±Œ7AqåM,ãMP\yËx{‰ÅŒºÎxWÞDoñTÞDo‚âÊ›HãMP\yi¼ Ä·ò&¶ñ&(®¼‰m¼ Š+obo‚âÊ›ØÆ›ØM°ÿú±çùçôòû«¿âóÍ®x¥Iþ*Áïø›]ñ÷ñ&T|ÿãsp5âëÆöW ¾Ä×w#¾>aý«¿ãñbW¼vÝ_%ø±+Þºîï«ù;¾^ìŠwDí?%ø±+Þºîï|‰¿Ø¯{Ý_%ø±+ÞºîïüŽï»â­ëþ.Á¯øï®û»ßþý»¿ãùbW¼tÝ?%ø±+¾»îßÙKüÅ®xíº×Ë&óÅ®xíº¿Jð;¾_슷®û»_â/vÅËÆöO ¾Ä_슗®û§_âÆ®ØG4b='þ©ó·ªüŠO%gL'g ®äŒéä į\§YÚþ°Ñ¦Ì'Ú ^êmÊ|¢ ÅÕ'Ú”ùDŠ«O´)ó‰6ˆõ‰6Ç|¢ ÅÕ'Úó‰6WŸhsÌ'ÚP\}¢Í1ÎÕ'ô½ŠzØ¢>ƒè¢^¶¨á©¢NWÔG¬Ä(jg|!®Œ¯åŒ/Ä¥ñÆø¢×®Œ¯0ÆÅ•ñ•ÆøB<•ñ•ÆøB|+ãkã‹âÊøÚÆø¢¸2¾¶1¾(®Œ¯mŒ/Ä2¾Ž1¾Î+1µ1¾/e|•1¾(®Œ¯2ÆÅ•ñUÆø¢¸2¾Ê_ˆe|c|Q\_Ç_WÆ×1ÆÅ•ñuñu®Z‰?E=mQ·s¥ŠzÛ¢nu'UQ—+ê+VbµóÍW¾Ùr¾YÇ·ôÍÂøfxí¡|³0¾Å•o–Æ7£Ÿ¼òÍÒøfˆoå›mã›Q\ùfÛøfW¾Ù6¾Å•ovŒo†øQ¾Ù1¾Ù¹b%FQ—ñÍ/囕ñÍ(®|³2¾Å•oVÆ7£¸òÍÊøfˆå›ã›Q\ùfÇøfW¾Ù1¾âWùf×øf÷Q+ñ§¨—+êŽoUÔÇuÇ÷1Šz˜¢îøR¶Ûr¶âÊvÛÎvÃk—¶[Û ¯=”íÆvC<•í–Æv£¸²ÝÒØnˆoe»mc»Q\ÙnÛØnW¶Û6¶Å•ívŒí†øQ¶Û1¶[Ç÷1µ±Ý(®l·2¶Å•íVÆv£¸²ÝÊØnW¶[Û ñ£l·cl7Š+ÛíÛâÊv»ÆvCü*ÛíÛí†Z‰?E½mQâGõµEÝÚÒPE=]Q‡X‰QÔεC\¹vÛ¹vßÒµ ãÚᵇríÒ¸vˆ§ríÒ¸vW®]×ñ­\»m\;Š+×n׎âÊµÛÆµCü(×î׎âʵ;Ƶëøï>¦¢6®Å•kWƵ£¸ríʸvW®]׎âʵƵCü(×î׎âʵ;ƵCü*×î׎âʵ»Æµû„¾WâOQ[Ô)°.êŸ 5>KHõrEb%FQ;ÓqeúmgúáG'M¿0¦^{*Ó/éGqeú¥1ý(®L¿4¦â[™~Û˜~W¦ß6¦Å•éwŒé‡øQ¦ß1¦Å•éwŒéwS¬ÄTÔÆô£¸2ýʘ~W¦_ÓâÊô+cú!>”é7Œé‡øQ¦ß1¦Å•éw釸U¦ß5¦Å•éwé÷ }¯ÄŸ¢¾¶¨K`(êpE aLõvE]b%FQ»ÏÏB\}~ÖvŸŸÕñ-??+Íçgáµ§úü¬4ŸŸEqõùYi>?‹âêó³Ê|~ÖU²µùü,Š«ÏÏÚæó³?êó³Žùü,Š«ÏÏ:æó³(®>?ë˜ÏϺ%Vb*jóùYWŸŸUæó³(®>?«ÌçgQ\}~Ö0ŸŸ…øPŸŸ5Ìçg!~ÔçgóùYˆ_õùY×|~ÅÕçg]óùYWŸŸuAø }¯ÄŸ¢þ"™õØŠ:]QÃåRE}\Q±£¨€ˆ¸·;¾¥€˜F@ÄkO% ¦)®Ä4"â¥Ä2"ý─¸€Hq% # "~”€xŒ€Hq% # R\ ˆÇˆwˆ•˜ŠÚˆWb‘âJ@,# ">”€8Œ€Hq% # "~”€x€ˆøUâ5"Å•€x€Hq% ^# Þ©Vâ.êpE=¶¢.WÔ?ª¨¯+ê)Vbµûä2ÄÕ'—m÷Éeßò“ËÒ|rýèÔ'—¥ùä2Š«O.+óÉeˆ—úä²2Ÿ\v•„GEm>¹Œ~ïê“ËŽùä2Š«O.;æ“Ë(®>¹ì˜O.£¸úä²c>¹ìN±SQ›O.£¸úä²2Ÿ\FqõÉeÃ|râC}rÙ0Ÿ\FqõÉeÃ|râW}rÙ5Ÿ\FqõÉe×|rÅÕ'—]óÉeWŸ\v™x—Z‰»¨ÓõØŠz¸¢îøEÎLìøRfârfbÇ·2·3—fb3¯=•™˜ÆL¤¸2˘‰ô‹Sfb3ñ­ÌÄcÌDÄ21)®ÌÄcÌDŠ+3ñ3‘âÊL<ÆL¼K¬ÄTÔÆL¤¸2˘‰ˆe&c&R\™‰Ã˜‰Wfâ0f"âW™‰×˜‰Wfâ5f"Å•™x™Hqe&^c&Þ­Vâ.êrE½¶¢ž®¨ÛÖQfb:3±ãK™‰Û™‰ßÊLÜÎLD\š‰iÌDúÉ+31™Hqe&–1/e&–1?ÊL<ÆL¤¸21)®ÌÄcÌDŠ+3ñ3‘âÊL¼ÆLÄ5_ÊL,c&R\™‰Ã˜‰ˆe&c&R\™‰Ã˜‰Wfâ0f"âW™‰×˜‰Wfâ5f"Å•™x™Hqe&^c&Þ£Vâ.êáŠúlE½\Qãs¹TQ;3±ã[™‰Û™‰ˆ+3q;3qi&¦1ñ£Ke&¦1)®ÌÄ2f"ýÞ•™XÆLDü(3ñ3‘âÊL<ÆL¤¸21)®ÌÄcÌDį2¯1qÍ—2˘‰ˆe&c&R\™‰Ã˜‰Wfâ0f"Å•™8Œ™ˆøUfâ5f"Å•™x™Hqe&^c&R\˜‰õ3ñ^µwQOWÔW`(ê튖–*jg&v|+3q;3qe&ng&vüH31™ˆ]*31™Hqe&–1/e&–1?ÊL<ÆL¤¸21)®ÌÄcÌDŠ+3ñ3ñ«ÌÄkÌD\ó¥ÌÄaÌDć2‡1)®ÌÄaÌDŠ+3q3‘âÊLÆLDü*3ñ3‘âÊL¼ÆL¤¸2¯1;þ«¹¨µ™Ø¡ï•¸‹z颦øVE}tQ#žÊLLc&"¾•™¸™Hqe&c&"~¤™˜ÚL¤]*31µ™HñRfbi3‘ãÊL,m&Rü(3ñh3‘ãÊL<ÚLä¸269®ÌÄ«ÍDŠ_e&^m&Ò5?”™8´™Èqe&m&r\™‰C›‰WfâÐf"Ç•™8´™Hñ«ÌÄ«ÍDŽ+3ñj3‘ãÂLüYÁ?‹ñ_}ÌE¦¨C­Ä]ÔÛulE}]Q·­£ÌÄœ®¨C¬Ä(êኺãÊL<ኺ­Li&æ1Ej%Çu(lE½LQ#®ÌÄ:¦¨C¬ÄTÔÓuˆ•˜Šz›¢±SQ_SÔ!Î.¨¨Ó5âÊL¼Ãuˆ•˜Š:MQ‡'¨¨‡)êx?%æ¢^¦¨ãu%þQÔÇ5âÊLœ)ê+1õ6Eï+1õ5Eï+1u˜¢Fb%¦¢NSÔG¬ÄTÔÃõ+1õ2E}ÄÙõ5EÝ×üó¨¢SÔG¬ÄTÔ×õàu˜¢>ï§Ä\ÔeŠú¼®Ä?Šzš¢F\™‰s›¢>b%¦¢¦¨ÏûJÌE½LQŸ÷•˜‹ú˜¢F\™‰ñ˜¢¾j%®¨¯À6PÔÛuÛ:ÊL¬rE}ÅJŒ¢NWÔWfâ¹®¨?ñ+ÍÄZ¦¨¯Z‰QÔÇõUØŠz˜¢†‘ªÌıLQ_±SQ—)ê+Vb*êiŠúŠ•˜Šz›¢¾â좋úwÿ,ê¾æŸPE¦¨¯X‰QÔó1E}8AE¦¨ïû)1õ0E}_WâE½LQ#®ÌÄyLQ_±SQOSÔ÷}%æ¢Þ¦¨ïûJÌE}MQw<”™ÆLŒG­Ä]ÔÎLD\™‰éÌÄŽ—2Ë™‰?ÊL<ÎLD\™‰×™‰¿ÒL,c&Æ£Vbµ1ÊLÆL¤¸2‡1¿ÊL¼ÆL¤¸2¯1)®ÌÄkÌDŠ_UÔÆLÄ5ÿ¤*jc&ÒÄ)3q3‘âÊLœÆL¤¸2§1)®ÌÄiÌDŠ+3q3uñLUÔÆL¤øVEmÌDŠ+31Œ™ˆx(31Œ™¡Vâ.jg&"®ÌÄtfbÇK™‰åÌÄŽe&g&"®ÌÄëÌÄŽ_i&–1#ÔJÜE=Œ™ˆøPfâ0f"Å•™8Œ™ˆøUfâ5f"Å•™x™Hqe&^c&â¢}UÔÆL¤x©¢6f"âS™‰Ó˜‰Wfâ4f"Å•™8™Hqe&Nc&R\™‰Ë˜‰¨‹g©¢6f"Å*jc&"ÊL c&R\™‰aÌÄHµwQ;3qe&–3;^ÊL,g&vü(3ñ83qe&^g&vüJ3±Œ™Øñ¯•EmÌDŠ+3q3‘âÊLÆLDü*3ñ3‘âÊL¼ÆL¤¸0WðÏ¢NqvAEmÌDŠUÔÆLD|*3q3‘âÊLœÆL¤¸2§1)®ÌÄiÌDÄ—2—1QÏVEmÌDŠ+31Œ™ˆx(31Œ™Hqe&†1£ÔJÜEíÌÄ(m ¨™ˆ¸2Ë™‰?ÊL<ÎLD\™‰×™‰¿ÒLÆLìø×JŒ¢6f"Å•™8Œ™Hqe&Nc&"~•™x™Hqe&^c&â¢}UÔÆL¤xª¢6f"ŧ*jc&">•™8™Hqe&Nc&R\™‰Ó˜‰Wfâ2f"âK™‰Ë˜‰Ô6Gµ1e&†1)®ÌÄ0f"Å•™ÆLŒ¡VâOQ—3;^ÊL,g&"®ÌÄrfbÇ23Wfâufbǯ4‡1c¨•EmÌDŠ+3q3ñ©ÌÄiÌDį2¯1).ÌÄ/ÂíGQ±SQ3‘⥊ژ‰_ª¨™ˆøTfâ4f"Å•™8™Hqe&Nc&"¾”™¸Œ™Hqe&.c&¢.e&†1©¬”™ÆL¤¸2؉Wfb31¦Z‰»¨™ˆ¸2Ë™‰ˆ+3±œ™Øñ£ÌÄãÌDÄ•™x™Øñ+ÍÄaÌĘj%FQ3‘âÊLœÆLD|*3q3ñ«ÌÄkÌĘb%¦¢6f"ÅSµ1)>TQ3‘â[µ1ŸÊLœÆL¤¸2§1)®ÌÄeÌDÄ—2—1)®ÌÄeÌDÔE(31Œ™Hqe&†1)®ÌÄ0f"Å•™ÆLŒ¥Vâ.jg&"®ÌÄrf"âÊLÎLìøQfâqfbǯ2¯3—fâ0fb,µ£¨™Hqe&Nc&">•™8™ˆøUO…c&vü›8î¢6f"ÅKµ1)>UQ3‘âGµ1ŸÊLœÆL¤¸2§1_ÊL\ÆL¤¸2—1)®ÌÄeÌD*+e&†1)®ÌÄ0f"Å•™ÆL¤¸2؉±ÕJÜEíÌDÄ•™XÎLìøPfâpfbÇ2¯3;~•™x™ˆ¸4‡1c«•EmÌDŠ+3q3ñ©ÌÄiÌÄØb%¦¢6f"ÅSµ1)>TQ3‘âKµ1)®ÌÄ0f"âS™‰Ó˜‰Wfâ2f"âK™‰Ë˜‰Wfâ2f"Å•™¸Œ™ˆ¶ e&†1)®ÌÄ0f"Å•™ÆL¤¸2؉qÔJÜEíÌDÄ•™XÎLìøPfâpfbǯ2¯3Wfâuf"âÒLÆLŒ£Vbµ1)®ÌÄiÌDħ2§1㈕˜ŠÚ˜‰/UÔÆL¤øTEmÌDŠoUÔÆLD<”™ÆLD|*3q3ñ¥ÌÄeÌDŠ+3q3‘âÊL\ÆL¤¸2—1Ñ6¡ÌÄ0f"Å•™ÆL¤¸2؉Wfb31®Z‰»¨™ˆ¸2Ë™‰ÊLÎLìøUfâuf"âÊL¼ÎLìxüÆqQÔÆLD|(3q3‘âÊLœÆLD|*3q31®X‰©¨™Hñ¡ŠÚ˜‰_ª¨™Hqe&†1e&†1ŸÊL\ÆLD|)3q3‘âÊL\ÆL¤¸2—1)®ÌÄeÌD´M(31Œ™Hqe&†1)®ÌÄ0f"â©ÌÄ4fb>j%î¢vf"âÊL,g&v|(3q83±ãW™‰×™‰ˆ+3ñwÿ(êŽÇoEmÌDć2‡1ŸÊLœÆL¤¸2§1ó+1µ1)>UQ3‘â[µ1)®ÌÄ0f"â¡ÌÄ0f"âK™‰Ë˜‰Wfâ2f"Å•™¸Œ™Hqe&.c&R\™‰Ë˜‰h›Pfb3‘âÊL c&R\™‰iÌDÄS™‰iÌÄ µwQ;3qe&–3;>”™8œ™Øñ«ÌÄëÌDħ,ê0EÝ~ÜoEmÌDć2§1ŸÊLœÆL¤¸2§13ÄJLEmÌDŠ/UÔÆL¤øQEmÌDÄC™‰aÌDŠ+31Œ™ˆøRfâ2f"Å•™¸Œ™Hqe&.c&R\™‰Ë˜‰WÏ ·1Ñ6¡ÌÄ0f"Å•™ÆLD<•™˜ÆL¤¸2Ó˜‰™j%î¢vf"âÊLÎLìøPfâpfbǯ2¯3_²¨Óuûq¿q\µ1ŸÊLœÆL¤¸2§1)®ÌÄiÌÄL±SQ3‘â[µ1)®ÌÄ0f"â¡ÌÄ0f"Å•™ÆLD|)3q3‘âÊL\ÆL¤¸2—1)®ÌÄeÌDÄ·z½™ˆ¶ e&†1)®ÌÄ4f"â©ÌÄ4f"Å•™˜ÆLÌR+qµ3;>”™8œ™ˆ¸2‡3;~•™x™ˆø–E]¦¨[¯ûãvQOc&">•™8™Hqe&Nc&R\™‰Ë˜‰Yb%¦¢6f"Å*jc&"ÊL c&R\™‰aÌDŠ+31Œ™ˆøRfâ2f"Å•™¸Œ™Hqe&.c&R\™‰Û˜‰ˆoõ z3eÊL c&"žÊLLc&R\™‰iÌDŠ+31™˜C­ÄŸ¢ÎLìøPfâpf"âÊLÎLìøUfâuf"âGõ0EÝzÝoEmÌDħ2§1)®ÌÄiÌDÄ—2—1sˆ•˜ŠÚ˜‰Wfb3ñPfb3‘âÊL c&R\™‰aÌDÄ—2—1)®ÌÄeÌDŠ+3q3ñ­ÌÄmÌDŠ«gÐÛ˜‰(«Pfb3ñTfb3‘âÊLLc&R\™‰iÌÄOè{%î¢vf"âÊLÎLD\™‰Ã™‰¿ÊL¼ÎLDüÊ¢ž¦¨ÛÎû㢨™ˆøTfâ4f"Å•™¸Œ™ˆøRfâ2fbN±SQ3ñPfb3‘âÊL c&R\™‰aÌDŠ+31Œ™ˆøRfâ2f"Å•™¸Œ™Hqe&nc&"¾•™¸™Hqõ z31§X‰©¨™Hqe&¦1)®ÌÄ4f"Å•™˜ÆLü„¾Wâ.jg&"®ÌÄáÌDÄ•™8™Øñ«ÌÄëÌÄŽñu(êeŠñ­ŠÚ˜‰ˆOe&Nc&R\™‰Ë˜‰ˆ/e&.c&æ+1&.Œ™ˆx(31Œ™Hqe&†1)®ÌÄ0f"Å•™ÆLD|)3q3‘âÊL\ÆLD|+3q3‘âÊLÜÆL¤¸z½™Øñ¯>FQ3‘âÊLLc&R\™‰iÌDŠ+31™˜[­Ä]ÔÎLD\™‰Ã™‰ŸÊLœÎLìøUfâï þYÔmçýæëPÔÛ5âGµ1ŸÊLœÆL¤¸2—1_ÊL\ÆLìø—ô¢6f"Å•™ÆL¤¸2؉Wfb3‘âÊLLc&"¾”™¸Œ™Hqe&nc&"¾•™¸™Hqe&nc&R\=ƒÞÆLÌ-Vb*jc&R\™‰iÌDŠ+31™Hqe&¦1󨕸‹Ú™‰ˆ+3q83±ãS™‰Ó™‰ÿâQÔaŠñTE}LQ#~UQ3ñ©ÌÄiÌDŠ+3q3ñ¥ÌÄeÌÄDQ‡1e&Nc&">•™8™ˆøRfâ2f"Å•™¸Œ™XX‰©¨™Hqe&†1)®ÌÄ0f"Å•™˜ÆLD<•™˜ÆLD|+3q3‘âÊLÜÆL¤¸2·1)®ÌÄmÌDŠ«gÐÛ˜‰õˆ•˜ŠÚ˜‰Wfb3‘âÊL,c&"^ÊL,c&V¨•¸‹Ú™‰ˆ+3q83±ãS™‰Ó™‰b%¦¢¦¨Ÿª¨™ˆx(3q3ñ©ÌÄeÌDÄ—2—1)®ÌÄeÌÄ ±SQ3‘âÊL c&R\™‰aÌDÄS™‰iÌDŠ+31™ˆøVfâ6f"Å•™¸™Hqe&nc&R\™‰Û˜‰WÏ 1+ÄJLEmÌDŠ+31™ˆx)3±Œ™Hqe&–1+ÕJÜEíÌDÄ•™8™Øñ©ÌÄéÌÄJ±SQOSÔˆ/UÔÆLD<”™8™ˆøRfâ2f"Å•™¸Œ™Hqe&.c&VŠ•˜ŠÚ˜‰Wfb3‘âÊLLc&"žÊLLc&R\™‰iÌDÄ·2·1)®ÌÄmÌDŠ+3q3‘âÊLÜÆLDü¨gÐǘ‰•b%¦¢6f"Å•™XÆLD¼”™XÆL¤¸2˘‰Uj%î¢vfbǧ2§3Wfâtfb•X‰©¨—)jÄ·*jc&"ÊL\ÆLD|)3q3‘âÊL\ÆL¤¸2·1«ÄJLEmÌDŠ+31Œ™ˆx*31™Hqe&¦1)®ÌÄ4f"â[™‰Û˜‰Wfâ6f"Å•™¸™Hqe&c&"~Ô3ècÌÄ*±SQ3ñRfb3‘âÊL,c&R\™‰eÌÄj%þõtfbǧ2§3Wfâtfb ±SQoSÔˆUÔÆLD<”™¸Œ™ˆøRfâ2f"Å•™¸Œ™ˆøVfâ6fb ±SQ3‘âÊLLc&"žÊLLc&R\™‰iÌDŠ+31™ˆøVfâ6f"Å•™¸™Hqe&nc&"~”™xŒ™Hqõ ú3±†X‰QÔeÌDÄK™‰eÌDŠ+3±Œ™Hqe&–1?¡ï•¸‹Ú™‰ˆ+3q:3qe&Ng&Ö+1õ1EøUEmÌDÄC™‰Ë˜‰ˆ/e&.c&R\™‰Û˜‰ˆoe&nc&Ö+1µ1Oe&¦1)®ÌÄ4f"Å•™˜ÆL¤¸2Ó˜‰ˆoe&nc&R\™‰Û˜‰Wfâ1f"âG™‰Ç˜‰WÏ 1;þÕÇ(jc&R\™‰eÌDŠ+3±Œ™Hqe&–1?¡ï•¸‹Ú™‰ˆ+3q:3qe&.g&Ö+1õ5EÝñPfb3‘âÊL\ÆLD|)3q3‘âÊLÜÆLD|+3q3±–X‰1qiÌDÄS™‰iÌDŠ+31™Hqe&¦1)®ÌÄ4f"â[™‰Û˜‰Wfâ6f"âG™‰Ç˜‰Wfâ1f"ÅÕ3ècÌÄZb%¦¢6f"Å•™XÆL¤¸2˘‰Wfb3±¶Z‰»¨™ˆ¸2§3;¾”™¸œ™X[¬Ä(ê0f"â¡ÌÄ0f"Å•™¸Œ™ˆøRfâ2f"Å•™¸™ˆøVfâ6fbÇ¿¤µ1)®ÌÄ4f"Å•™˜ÆL¤¸2Ó˜‰Wfb3ñ­ÌÄmÌDŠ+3ñ3ñ£ÌÄcÌDŠ+3ñ3‘âêô1fbÇ¿úEmÌDŠ+3±Œ™Hqe&–1)®ÌÄ2fbµwQ;3qe&Ng&v|)3q93±ã_¼3ŠÚ˜‰Wfb3‘âÊL\ÆLD|)3q3‘âÊLÜÆLD|+3q3±ŽX‰©¨™Hqe&¦1)®ÌÄ4f"Å•™˜ÆLD¼”™XÆLD|+3q3ñ£ÌÄcÌDŠ+3ñ3‘âÊL<ÆL¤¸z}Œ™XG¬ÄTÔÆL¤¸2˘‰Wfb3‘âÊLÆL¬«Vâ.jg&"®ÌÄéÌÄŽ/e&.g&Ö+1µ1)®ÌÄ0f"â©ÌÄeÌDÄ—2—1)®ÌÄmÌDÄ·2·1늕˜ŠÚ˜‰Wfb3‘âÊLLc&R\™‰eÌDÄK™‰eÌDÄ·21?ÊL<ÆL¤¸21)®ÌÄcÌDŠ«gÐǘ‰uÅJLEmÌDŠ+3±Œ™Hqe&–1ÊLÆLZ‰»¨™ˆ¸2§3;¾”™¸œ™8±SQ3‘âÊLLc&"žÊL\ÆLD|)3q3ñ­ÌÄmÌDŠ+3q3qFQ3‘âÊLÆL¤¸2‡1)®ÌÄaÌÄOè{%î¢vf"âÊL\ÎLD\™‰Û™‰c‰•˜ŠÚ˜‰ˆ§2Ó˜‰Wfâ6f"â[™‰Û˜‰Wfâ1f"âG™‰Ç˜‰c‰•WÆLD¼”™XÆL¤¸2˘‰Wfb3‘âÊL,c&"~”™xŒ™Hqe&c&"~•™x™Hqe&^c&R\=ƒ¾ÆLìøW£¨™Hqe&c&R\™‰Ã˜‰Wfâ0fâØj%î¢vf"âÊL\ÎLìøVfâvfâØb%FQ§1Oe&¦1)®ÌÄmÌDÄ·2·1)®ÌÄcÌDÄ21;þ%} ¨™Hqe&–1)®ÌÄ2f"Å•™XÆL¤¸2‡1?ÊL<ÆL¤¸2¯1¿ÊL¼ÆL¤¸2¯1)®žA_c&vü«QÔÆL¤¸2‡1)®ÌÄaÌDŠ+3q3qµwQ;3qe&.g&v|+3q;3±ã_¼3ŠÚ˜‰Wfb3‘âÊLÜÆLD|+3q3‘âÊL<ÆLDü(3ñ3q±SQ3‘âÊL,c&R\™‰eÌDŠ+3±Œ™ˆøPfâ0f"âG™‰Ç˜‰ˆ_e&^c&R\™‰×˜‰Wfâ5f"ÅÕ3èkÌÄŽõ1ŠÚ˜‰Wfâ0f"Å•™8Œ™Hqe&Nc&Ž«Vâ.jg&"®ÌÄåÌÄŽoe&ng&Ž+Vb*jc&R\™‰iÌDÄK™‰Û˜‰ˆoe&nc&R\™‰Ç˜‰ˆe&c&Ž+Vb*jc&R\™‰eÌDŠ+3±Œ™Hqe&c&">”™8Œ™ˆøQfâ5f"âW™‰×˜‰Wfâ5f"Å•™x™Hqõ ú3q\±SQ3‘âÊLÆL¤¸2‡1ŸÊLœÆLœZ‰»¨™ˆ¸2—3;¾•™¸™8±SQ3‘âÊL,c&"^ÊLÜÆLD|+3q3ñ£ÌÄcÌDŠ+3ñ3q>b%¦¢6f"Å•™XÆL¤¸2˘‰Wfâ0f"âC™‰Ã˜‰ˆ_e&^c&R\™‰×˜‰Wfâ5f"Å•™x™Hqõ ú3q>b%¦¢6f"Å•™8Œ™Hqe&Nc&">•™8™8C­Ä]ÔÎLD\™‰Ë™‰ßÊLÜÎLœ!Vb*jc&R\™‰eÌDÄK™‰Û˜‰ˆoe&c&"~”™xŒ™Hqe&c&Î+1µ1)®ÌÄ2f"Å•™XÆLD|(3q3‘âÊLÆLDü*3ñ3‘âÊL¼ÆL¤¸2¯1)®ÌÄkÌDŠ‹gÐõ3q†X‰©¨™Hqe&c&">•™8™Hqe&Nc&ÎT+qµ3WfâvfbÇ·2·3gŠ•˜ŠÚ˜‰Wfb3ñRfâ6f"âG™‰Ç˜‰Wfâ1f"Å•™xŒ™8S¬ÄTÔÆL¤¸2˘‰Wfâ0f"âC™‰Ã˜‰Wfâ0f"âW™‰×˜‰Wfâ5f"Å•™x™Hqe&^c&vü«QÔÆLD|(3q3‘âÊLœÆLD|*3q3‘âÊLœÆLœ¥Vâ.jg&v|+3q;3qe&ng&Î+1µ1)®ÌÄ2f"â¥ÌÄcÌDÄ21)®ÌÄcÌDŠ+3ñ3q–X‰©¨™Hqe&–1ÊLÆL¤¸2‡1)®ÌÄaÌDį2¯1)®ÌÄkÌDŠ+3ñ3‘âÂLüªàýöÿêcµ1ÊLÆLD|*3q3‘âÊLœÆL¤¸2§1çP+ñ§¨·3;¾•™¸™ˆ¸2·3ç+1µ1)®ÌÄ2f"â¥ÌÄcÌDÄ21)®ÌÄcÌDį2¯1ç+1µ1)®ÌÄaÌDć2‡1)®ÌÄaÌDŠ+3q3ñ«ÌÄkÌDŠ+3ñ3‘âÊL¼ÆLìøÏ>þQÔÆL¤xª¢6f"âC™‰Ó˜‰ˆOe&Nc&R\™‰Ó˜‰Wfâ4fâ'ô½wQ;3qe&ng&"®ÌÄíÌÄ9ÅJLEmÌDŠ+3±Œ™ˆx)3ñ3ñ£ÌÄcÌDŠ+3ñ3ñ«ÌÄkÌÄ9ÅJLEmÌDć2‡1)®ÌÄaÌDŠ+3q3‘âÊLÆLDü*3ñ3‘âÊL¼ÆL¤¸0¯Ä?‹z¾®Ä?ŠÚ˜‰/UÔÆLD|*3q3‘âÊLœÆL¤¸2§1)®ÌÄiÌÄOè{%î¢vf"âÊLÜÎLD\™‰Ç™‰s‰•˜ŠÚ˜‰ˆ—2˘‰Wfâ1f"âG™‰Ç˜‰Wfâ5f"âW™‰×˜‰s‰•E=Œ™ˆøPfâ0f"Å•™8Œ™Hqe&c&R\™‰Ã˜‰ˆ_e&^c&R\™‰×˜‰ÿÕÇ\ÔÆL¤xª¢6f"Ň*jc&">•™8™Hqe&Nc&R\™‰Ó˜‰Wfâ4fâÜj%î¢vf"âÊLÜÎLìøQfâqfâÜb%FQ—1/e&–1)®ÌÄcÌDÄ21)®ÌÄkÌDį2¯1;þ%} ¨™Hqe&c&R\™‰Ã˜‰Wfâ0f"Å•™8™ˆøUfâ5f"Å…™ø«‚õ~?%æ¢6f"ÅKµ1)>UQ3ñ©ÌÄiÌDŠ+3q3‘âÊLœÆL¤¸2§1çQ+qµ3WfâvfbÇ23;þÅ;£¨™Hqe&–1)®ÌÄcÌDÄ21)®ÌÄkÌDį2¯1ç+1µ1)®ÌÄaÌDŠ+3q3‘âÊLÆLD|*3q3ñ«ÌÄkÌÄŽÿ>¢ ¢6f"ÅSµ1)>TQ3‘âKµ1ŸÊLœÆL¤¸2§1)®ÌÄiÌDŠ+3q3q^µwQ;3qe&ng&vü(3ñ83q^±SQ3‘âÊL,c&">”™xŒ™ˆøQfâ1f"Å•™x™ˆøUfâ5fâ¼b%¦¢6f"Å•™8Œ™Hqe&c&R\™‰Ó˜‰ˆOe&Nc&"~…™ø»‚õàµ1)^ª¨™Hñ©ŠÚ˜‰ߪ¨™ˆøTfâ4f"Å•™8™Hqe&Nc&"¾”™¸Œ™¸µwQ;3qe&ng&vü(3ñ83q=b%¦¢6f"Å•™8Œ™ˆøPfâ1f"âG™‰Ç˜‰ˆ_e&^c&R\™‰×˜‰ë+1µ1)®ÌÄaÌDŠ+3q3‘âÊLœÆLD|*3q3±ã¿û˜ŠÚ˜‰OUÔÆL¤øPEmÌDŠ/UÔÆL¤øQEmÌDħ2§1)®ÌÄiÌDŠ+3q3ñ¥ÌÄeÌÄj%î¢vf"âÊLÜÎLìøQfâqfâ ±SQ3‘âÊLÆLD|(3ñ3ñ£ÌÄkÌDį2¯1)®ÌÄkÌÄb%¦¢6f"Å•™8Œ™Hqe&c&">•™8™Hqe&Nc&vüwSQ3‘⥊ژ‰Ÿª¨™Hñ­ŠÚ˜‰Wfb3ñ©ÌÄiÌDŠ+3q3ñ¥ÌÄeÌDŠ+3q3q¥Z‰»¨™ˆ¸23;~”™xœ™¸R¬ÄTÔÆL¤¸2‡1ÊL<ÆLDü*3ñ3‘âÊL¼ÆL¤¸2¯1WŠ•˜ŠÚ˜‰Wfâ0f"Å•™8™ˆøTfâ4f"Å•™8™¸R¬ÄTÔÆL¤øPEmÌDŠ/UÔÆL¤øQEmÌDÄC™‰aÌDħ2§1)®ÌÄeÌDÄ—2—1)®ÌÄeÌÄUj%î¢vfbÇ23Wfâqfâ*±SQ3‘âÊLÆLD|(3ñ3ñ«ÌÄkÌDŠ+3ñ3‘âÂLÌǘ‰«ÄJLEmÌDŠ+3q3ñ©ÌÄiÌDŠ+3q3‘âÊLœÆL\%Vb*jc&R|ª¢6f"Å·*jc&R\™‰aÌDÄC™‰aÌDħ2§1_ÊL\ÆL¤¸2—1)®ÌÄeÌÄ5ÔJü)êãÌÄŽe&g&"®ÌÄãÌÄ5ÄJLEmÌDŠ+3q3ñ¡ÌÄkÌDį2¯1)®ÌÄkÌÄŽõ1ŠÚ˜‰ˆe&c&R\™‰Ó˜‰ˆOe&Nc&R\™‰Ó˜‰Wfâ4fâb%¦¢6f"Å—*jc&Rü¨¢6f"â¡ÌÄ0f"Å•™ÆLD|*3q3ñ¥ÌÄeÌDŠ+3q3‘âÊL\ÆLü„¾Wâ.jg&"®ÌÄãÌDÄ•™xœ™¸¦X‰©¨™Hqe&c&">”™x™ˆøUfâ5f"Å…™ø»‚ujO¨¢6f"âC™‰Ã˜‰ˆOe&Nc&R\™‰Ó˜‰Wfâ4f"Å•™8™¸¦X‰©¨™Hñ­ŠÚ˜‰Wfb3ñPfb3‘âÊL c&"¾”™¸Œ™Hqe&.c&R\™‰Ë˜‰Wfâ2fâ'ô½wQ;3qe&g&"®ÌÄëÌĵÄJLEmÌDć2‡1)®ÌÄkÌDį2¯1)¾TQ3±ã_}Œ¢6f"âC™‰Ó˜‰ˆOe&Nc&R\™‰Ó˜‰Wfâ4f"Å•™8™¸–X‰©¨™Hñ£ŠÚ˜‰ˆ‡2؉Wfb3‘âÊL c&"¾”™¸Œ™Hqe&.c&R\™‰Ë˜‰Wfâ2fâÚj%î¢vf"âÊL<ÎLìøUfâufâÚb%FQc&">”™8Œ™Hqe&^c&"~•™x™Hñ­ŠÚ˜‰ÿêcµ1ŸÊLœÆL¤¸2§1)®ÌÄiÌDŠ+3q3‘âÊL\ÆL\[¬ÄTÔÆL¤¸2؉ˆ‡2؉Wfb3‘âÊL c&"¾”™¸Œ™Hqe&.c&R\™‰Ë˜‰Wfâ2fâ:j%î¢vf"âÊL<ÎLìøUfâufbÇ¿xgµ1)®ÌÄaÌDŠ+3ñ3ñ«ÌÄkÌDŠUÔÆLìøW£¨™ˆøTfâ4f"Å•™8™Hqe&Nc&R\™‰Ó˜‰ˆ/e&.c&®#Vb*jc&"ÊL c&R\™‰aÌDŠ+31Œ™Hqe&†1_ÊL\ÆL¤¸2—1)®ÌÄeÌDŠ+3q3q]µwQ;3qe&g&vü*3ñ:3q]±SQ3‘âÊLÆLD|*3ñ3ñ«ÌÄkÌDŠ_UÔÆLìøW£¨™ˆøTfâ4f"Å•™8™Hqe&Nc&R\™‰Ë˜‰ˆ/e&.c&®+Vbu3ñPfb3‘âÊL c&R\™‰aÌDŠ+31Œ™ˆøRfâ2f"Å•™¸Œ™Hqe&.c&"¾•™¸™¸µwQ;3qe&g&vü*3ñ:3q?b%¦¢6f"Å•™8™ˆøTfâ5f"âW™‰×˜‰ÿÂ6PÔÆL¤øREmÌDħ2§1)®ÌÄiÌDŠ+3q3‘âÊL\ÆLD|)3q3±ã¿û˜ŠÚ˜‰Wfb3‘âÊL c&R\™‰aÌDŠ+31Œ™ˆøRfâ2f"Å•™¸Œ™Hqe&nc&"¾•™¸™¸C­Ä]ÔÎLD\™‰Ç™‰¿ÊL¼ÎLÜ!Vb*jc&R\™‰Ó˜‰ˆOe&^c&"~…™ø»‚u(lEmÌDŠoUÔÆLD|*3q3‘âÊLœÆL¤¸2§1_ÊL\ÆL¤¸2—1;þ»©¨™Hqe&†1)®ÌÄ0f"Å•™ÆL¤¸2Ó˜‰ˆ/e&.c&R\™‰Ë˜‰ˆoe&nc&R\™‰Û˜‰;ÕJÜEíÌDÄ•™x™Øñ«ÌÄëÌÄb%¦¢6f"Å•™8™ˆøTfâ5fbÇ¿Vbµ1)žª¨™Hñ£ŠÚ˜‰ˆOe&Nc&R\™‰Ó˜‰Wfâ2f"âK™‰Ë˜‰Wfâ2fâN±SQ3‘âÊL c&R\™‰aÌDŠ+31Œ™ˆx*31™ˆøRfâ2f"Å•™¸™ˆøVfâ6f"Å•™¸™¸K­Ä]ÔÎLìøUfâuf"âÊL¼ÎLÜ%Vb*jc&R\™‰Ó˜‰ˆOa&~‘Ì?ŠºÔJŒ¢6f"ÅKµ1)®ÌÄ0f"âS™‰Ó˜‰Wfâ4f"âK™‰Ë˜‰Wfâ2f"Å•™¸Œ™¸K¬ÄTÔÆL¤¸2؉Wfb3‘âÊLLc&"žÊLLc&"¾”™¸Œ™ˆøVfâ6f"Å•™¸™Hqe&nc&î¡VâOQ_g&vü*3ñ:3qe&^g&î!Vb*jc&R\™‰Ó˜‰ˆÏ©ŠÚ˜‰{¨•EmÌDŠUÔÆLD<”™ÆLD|*3q3‘âÊL\ÆLD|)3q3‘âÊL\ÆL¤¸2—1÷+1µ1)®ÌÄ0f"Å•™ÆLD<•™˜ÆL¤¸2Ó˜‰ˆ/e&nc&"¾•™¸™Hqe&nc&R\™‰Û˜‰ŸÐ÷JÜEíÌDÄ•™x™ˆ¸2¯3÷+1µ1)®ÌÄiÌDÄçREmÌÄ=ÕJŒ¢6f"Å•™ÆLD<”™ÆLD|*3q3ñ¥ÌÄeÌDŠ+3q3‘âÊL\ÆL¤¸2—1÷+1µ1)®ÌÄ0f"Å•™˜ÆLD<•™˜ÆL¤¸2Ó˜‰ˆoe&nc&R\™‰Û˜‰Wfâ6f"Å•™¸™ø }¯Ä]ÔÎLD\™‰×™‰ˆ+31~?PûQÔK¬ÄTÔÆLD|*3q3‘â[µ1÷R+1ŠÚ˜‰Wfb3ñPfb3ñ©ÌÄeÌDÄ—2—1)®ÌÄeÌDŠ+3q3‘âÊL\ÆLÜK¬ÄTÔÆL¤¸2؉ˆ§2Ó˜‰Wfb3‘âÊLLc&"¾•™¸™Hqe&nc&R\™‰Û˜‰Wfâ6fâÞj%î¢vf"âÊL¼ÎLìøï>¦¢SÔ[¬Ä(êiÌDħ2§1)~TQ3qoµ£¨™Hqe&†1e&†1_ÊL\ÆL¤¸2—1)®ÌÄeÌDŠ+3q3‘âÊLÜÆLÜ[¬ÄTÔÆL¤¸2Ó˜‰ˆ§2Ó˜‰Wfb3‘âÊLLc&"¾•™¸™Hqe&nc&R\™‰Û˜‰Wfâ6fâ>j%î¢vf"âÊL¼ÎLìøï>¦¢NSÔG¬ÄTÔÆL¤¸2§1)~UQ3qµ£¨™Hqe&†1e&†1_ÊL\ÆL¤¸2—1)®ÌÄeÌDŠ+3q3ñ­ÌÄmÌÄ}ÄJLEmÌDÄS™‰iÌDŠ+31™Hqe&¦1)®ÌÄ4f"â[™‰Û˜‰Wfâ6f"Å•™¸™Hqe&c&î«Vâ.jg&"®ÌÄëÌÄŽÿîc*ê2E}ÅJLEmÌDŠ+3q3ñõ¨¢6fâ¾j%FQ3‘âÊL c&"ÊL c&"¾”™¸Œ™Hqe&.c&R\™‰Ë˜‰Wfâ6f"â[™‰Û˜‰ûŠ•EÆLD<•™˜ÆL¤¸2Ó˜‰Wfb3‘âÊLLc&"¾•™¸™Hqe&nc&R\™‰Û˜‰ˆe&c&žG­Ä]ÔÎLD\™‰×™‰ÿÝÇTÔC5âS™‰Ó˜‰Wfâ2f"â+TQ3ñH&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdâtÿ?Ô¿^2ÿ3ÔžmÄPwêÊ õ•¡žpÇP‹LŒœdâ™Xù&™ØD&ÞI'q µÈÄÈI&6‘‰•w’‰]dbå›dâ™9ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ#2ñN8‰c¨E&FN2±‹LŒœdb™Xù ™8D&FN2qˆL¬üL¼"+¿$¯ÈÄÈI&^‘‰‘“L¼"¸†ºÉP/x¶C=d¨+¿4ÔO†zÁIC-21r’‰[dbå›db™xÄ5Ô"#'™ØE&VÞI&v‘‰•o’‰[dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄ»à$Ž¡™9ÉÄ.21r’‰Cdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰WdâÝt×Pwê Ï6b¨§ u冺‰L¬|‘L\"+ß$·ÈÄÈI&6‘‰wÓI\C-21r’‰]dbådb™Xù&™xD&V~H&‘‰‘“L<"#'™xD&FN2ñˆL¼Nâj‘‰‘“Lì"+$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&ÞC'q õ¡>ðl#†zÉPóF2±‰L¬|‘LÜ"+ß$·ÈÄÈI&6‘‰÷ÐI\C-21r’‰]dbådb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#21r’‰Wdâ=pÇP‹LŒœdâ™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñ^:‰k¨§ õ…g1Ô[†ú›7’‰Mdbå›dâ™9ÉÄ-21r’‰Mdâ½t×P‹LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL¬ü’L¼"ï…“8†Zdbåƒdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&>‘‰÷ÑI\C½d¨<Ûˆ¡>2Ôß¼‘Ll"+ß$·ÈÄÈI&n‘‰•’‰Mdâ}t×P‹LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñŠL¬ü’L¼"¸†zˆL¬|L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™Xù#™øD&¾Ä5Ô›‡:òCC}y¨+o$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø>t×P‹L¬¼“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñŠL¬ü’L¼"¿ùÏ=Ž¡™9ÉÄ!21r’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&>‘‰•?’‰Odâkt×PêÏ6b¨Ÿ õ7o$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™øÄß¡î"+ï$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄoþsc¨E&FN2qˆLŒœdâ™9ÉÄ!21r’‰Sdbå—dâ™9ÉÄ+2±òG2ñ‰LŒœdâ™ø:Ä5ÔW†ºÃ³ê&2±òF2±‰L¬|“LÜ"#'™xD&V~H&6‘‰ßü×I\C-21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$¯ÈÄÊ/ÉÄ+21r’‰WdâëpÇP‹LŒœdâ™9ÉÄ!21r’‰Cdbå“dâ™Xù%™xE&FN2ñ‰L¬ü‘L|"#'™øD&¾A'q õ“¡ðl#†Zdbä$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™øÍÄ5Ô"#'™ØE&FN2qˆL¬üL<"#'™xD&V~I&^‘‰‘“L¼"#'™xE&¾'q µÈÄÈI&‘‰‘“L"#'™8E&V>I&N‘‰•_’‰Wdbådâ™9ÉÄ'21r’‰Odâ›t‡º‰L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“L<"+?$»ÈÄ7é$®¡™9ÉÄ.2±òA2qˆL¬üL<"#'™xE&V~I&^‘‰‘“L¼"#'™xE&¾ 'q µÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰•_’‰Odbådâ™9ÉÄ'21r’‰Odâ[t×P‹LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™Xù!™ØE&¾E'q µÈÄÈI&‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñ-8‰c¨E&FN2qˆLŒœdâ™Xù$™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™ø6Ä5Ô"#'™ØD&FN2±‹L¬|“LÜ"+?$ÈÄÈI&v‘‰oÓI\C-21r’‰Cdbåƒdâ™Xù!™xE&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL|Nâj‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&¾C'q µÈÄÈI&6‘‰•w’‰]dbå›dâ™Xù!™xD&FN2±‹L|‡Nâj‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰‘“L|"ß“8†Zdbä$§ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰ïÒI\C-21r’‰Mdbådb™Xù!™xD&FN2ñˆLŒœdb™ø.Ä5Ô"#'™8D&V>H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"+$ŸÈÄwá$Ž¡™Xù$™8E&FN2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r‰ó#2ñ=:‰k¨E&FN2±‰L¬¼“Lì"+?$ÈÄÈI&‘‰•_’‰]dâ{t×P‹LŒœdâ™Xù ™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñ‰L¬ü‘L|"߃“¸†zŠL¬|’Lœ"#'™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™øÍìq5ËÄoôû$®¡f™˜9ÉÄÆ21òN2±³LŒüL<,3'™xY&F~I&v–‰•ÿ:‰k¨Y&F>H&–‰™“L,#¿$/ËÄÌI&^–‰™“L¼,3'™øX&FþH&>–‰•ÿÜãj–‰™“Lœ,3'™8Y&fN2q²LÌœdâd™ù#™øX&fN2ñ±LÌdâ¿üïPWþcs¨» u£“¸†úÈP7x¶Cýd¨¿y'™Ø— uƒ“8†zÊP7z_WCÝd¨¿ù%™Ø¯ u£“ø;Ôã#CÝèÙF õ–¡®œdâ¸2Ô Nâê%CÝà$Ž¡>2Ô Nâê'CÝà·‹ê.C]9ÉÄ7e¨œÄ1Ô]†ºÁÉê)CÝþþ•8‡zËP·?Oâ†úÊPWN2q}d¨œÄ1ÔG†ºý}çP?êö÷IœCÝd¨+ï4ÔC†ºÓI\C}e¨;<Û¨¡îêoÞI&ö-CÝá$Ž¡^2ÔÞ×ÕPwêo~I&ö'CÝé$®¡n2ÔžmÔPêÊI&Ž'CÝá$Ž¡Þ2ÔNâê+CÝá$®¡~ê¿]ÄPêÊI&¾%CÝá$Ž¡2ÔNÄP/êþ÷¯Ä9ÔG†ºÿyÿ3ÔO†ú›/’‰«ÉPw8‰c¨¯ uÿû$®¡þù+ñ¿CÝÿ>‰s¨» u僆zÊP:‰k¨Ÿ õ€g1ÔM†ºr’‰ýÈP8‰c¨· õ ÷u5ÔC†ú›_’‰ã#C=è$®¡î2ÔƒžmÔP_êÊI&Î õ€“8†úÈP8‰c¨Ÿ õ€“8†ºÉPøí"†zÊPWN2ñmê'q õ”¡ðp"†zËP¿%Ρ¾2ÔãÏ“8‡z}d¨¿ù"™¸º õ€“8†úÉP¿Oâê&C=þ>‰s¨‡ u哆zÉPO:‰¿CÝ?2ÔžmÄPwêÊI&ö+C=á$Ž¡>2Ô“Þ×ÕPOêo~I&Ž&C=é$®¡2Ô“žmÔP?êo>I&Î&C=á$Ž¡¾2ÔNâê÷‘¡žpÇPwê ¿]ÄP/êÊI&¾#C=á$Ž¡^2ÔNÄPêù÷¯Ä9ÔO†zþyÿ3ÔM†ºr’‰kÈPO8‰¿C=?êù÷IœCÝe¨çß'qõ”¡®|ÑPoêE'q u“¡^ðl#†zÈPWN2±?ê'q õ•¡^ô¾®†zÉPóK2qtêE'q õ”¡^ôlã;Ôó#CýÍ'ÉÄÙe¨œÄ1ÔO†zÁICÝd¨œÄ1ÔC†zÁo1Ô[†ºr’‰ïÊP/8‰c¨· õ‚‡1ÔW†zýý+q õúÈP¯?O↺ËPWN2qMê'q u“¡^ŸÄ9ÔC†zý}çP/êÊ7 õ‘¡Þt×Pwê Ï6b¨§ uå$ÇG†zÃICýd¨7½¯«¡Þ2Ô•“LC†zÓI\C½d¨7=Û¨¡n2Ôß|’LœC†zÃI\Cý>2ÔNâê.C½á$Ž¡ž2Ô~»ˆ¡>2Ô•“L|O†zÃIC}d¨7<œˆ¡~2Ôûï_‰s¨› õþó$þg¨‡ uå$×’¡ÞpÇPwêý÷IœC=e¨÷ß'qõ–¡®üÐP_êC'q õ¡>ðl#†zÉPóA2q4ê'q õýÈPz_WC}d¨+'™8¦ õ¡“¸†zËPz¶QCÝe¨¿ù$™8§ õ“8†ºÉP8‰c¨‡ õ“8†zÉPøí"†úÊPW2q|>2ÔNâê+C}àáD õúÈPŸ¿%Ρî2ÔçÏ“øŸ¡ž2Ô•“L\[†úÀIC=d¨Ïß'qõ’¡>ŸÄ9ÔG†ºòKCýd¨/Ä5ÔS†ú³ê-CýÍÉÄÑe¨/œÄ1ÔM†úÒûºê+C]9Éıd¨/Ä5ÔG†úÒ³ê!CýÍ'ÉĹd¨/œÄ1Ô]†úÂIC=e¨/œÄ1Ô[†úÂo1ÔO†úKÌ>ê&C}á$Ž¡~2ÔNÄP7êû÷¯Ä9ÔC†úþyÿ3ÔK†ºr’‰ëÈP_8‰c¨§ õýû$ΡÞ2Ô÷ï“8‡úÊPWN2±}d¨Ä5ÔK†úÁ³ê#CýÍÉÄ1d¨œÄ1Ô]†úÑûºê'CýÍÉıe¨Ä5ÔW†úѳê)CýÍ'ÉĹe¨œÄ1ÔC†úÁIC½d¨œÄ1ÔG†úÁoß¡þ9ÁÿõW¨} u—¡~p×P¯ õƒ‡1Ô]†úýý+qõ”¡~žÄÿ õ–¡®œdâº2ÔNâê%Cýþ>‰s¨ õûû$Ρ~2Ôß¼‘Ll"Û‡Nâj‘‰‘“Lì"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™Ø>t×P‹L¬|’Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&Fþh¨E&~óñé4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&FN2q‰Ll8‰c¨E&F~h¨E&FN2±‰L¬¼‘Ll"[£“¸†Zdbä$»ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™Xù#™8D&¶F'ñw¨§ÈÄÊ'ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odâ7ÿu8×P‹LŒ|ÐP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™9ÉÄ-2±58‰c¨E&F~i¨E&VÞH&6‘‰‘“Ll"[§“¸†Zdbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™Xù#™8D&~ó_'q µÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘ƒLü9Áÿu‡ß.b¨E&F>i¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L¬|“LÜ"[‡“8†Zdbä$›ÈÄÊÉÄ&21r’‰Mdbt×P‹L¬|L"#'™8D&V~I&^‘‰‘“L|"+$§ÈÄoþë$®¡™9ÉÄ)21r’‰Kdbådâ™9ÉÄ'2ñ›ÿÜãj‘‰‘wj‘‰‘/j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄ6à$Ž¡™Xy#™ØD&FN2±‰LŒœdb™Ø&Äß¡"+$‡ÈÄÈI&‘‰•_’‰Wdbä$ŸÈÄÊÉÄ)2±M:‰k¨E&FN2qŠL¬|‘L\"+$ŸÈÄÈA&þzáöÏPO8‰c¨E&F>h¨E&F¾i¨E&V¾H&.‘‰‘“L\"#'™¸D&V¾I&n‘‰‘“LÜ"Û„“¸†º‰L¬¼‘Ll"#'™ØD&FN2±‰Ll‹Nâj‘‰‘“L"#'™8D&V~I&^‘‰‘“L|"+$§ÈĶè$®¡™9ÉÄ%2±òE2q‰L¬ü‘L|"¿ùïÇß¡™y§¡™ù¤¡™ù¡¡™Xù"™¸D&FN2q‰LŒœdâ™Xù&™¸E&FN2q‹Lüæ¿ö¸†Zdbä$›ÈÄÈI&6‘‰‘“Ll"Û¦“¸†Zdbä$‡ÈÄÈI&N‘‰•_’‰Wdbådâ™9ÉÄ)2±m:‰k¨E&FN2q‰L¬|‘L\"+ôUè#2ñ›ÿ~qüj‘‰‘j‘‰‘/j‘‰‘_j‘‰•/’‰Kdbä$—ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄoþkk¨E&FN2±‰LŒœdb™9ÉÄ&2±:‰k¨E&FN2qˆL¬|’Lœ"+¿$ŸÈÄÊÉÄ'21r’‰Sdb;t×P‹LŒœdâ™Xù"™¸D&~ó_裆Zdbä†Zdb䓆Zdb䛆Zdbä$›ÈÄÊÉÄ%21r’‰[dbå›dâ™9ÉÄ-21r’‰[dâ7ÿµÇ5Ô"#'™ØD&FN2±‰LŒœdb™Ø.Ä5Ô"#'™8D&V>I&N‘‰•?’‰Odbä$ŸÈÄÈI&N‘‰íÒI\C-21r’‰Kdbå‹dâ™Ø.œÄ1Ô"#4Ô"#_4Ô"#?4Ô"+o$›ÈÄÊÉÄ%2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dâ7ÿµÇ5Ô"#'™ØD&FN2±‰LŒœdb™ØÄ5Ô"#'™8D&V>I&N‘‰•?’‰Odbä$ŸÈÄoÞ?$§ÈÄÊ'ÉÄ)21r’‰Kdbå‹dâ™ØœÄ1Ô"#Ÿ4Ô"#ß4Ô"#'™ØD&VÞH&6‘‰•/’‰[dbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄöà$Ž¡™9ÉÄ&21r’‰Mdbådb™Ø?t×P‹LŒœdâ™Xù$™8E&VþH&>‘‰‘ƒLü9Áÿ õ7ï’‰Sdbå“dâ™Xù"™¸D&FN2q‰Lì8‰c¨E&F¾h¨E&F~h¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&FN2q‹Lì8‰c¨E&FN2±‰LŒœdb™Xy'™ØE&öF'q µÈÄÈI&‘‰•O’‰Sdbådâ™ù¢¡™øÍû‡dâ™Xù$™¸D&V¾H&.‘‰‘“L\"{ƒ“8†Zdb䛆Zdbä—†Zdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dbäô úˆLì Nâj‘‰‘“Ll"+ï$»ÈÄÈI&v‘‰½ÓI\C-21r’‰Sdbå“dâ™Xù#™øD&F¾i¨E&~óþ!™8E&V¾H&.‘‰‘“L\"#'™¸D&ö'q µÈÄÈ µÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰•ú}D&ö'q µÈÄÈI&v‘‰•w’‰]dbä$»ÈÄ>è$®¡™Xù$™8E&FN2qŠL¬ü‘L|"#?4Ô"¿yÿL\"+_$—ÈÄÈI&.‘‰‘“LÜ"û€“8†Zdbä—†Zdbådb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$ÈÄÊ}ƒ>"û€“8†Zdbådb™9ÉÄ.21r’‰]dbŸt‡zŠL¬|’Lœ"#'™8E&VþH&>‘‰‘_j‘‰ß¼H&.‘‰•/’‰Kdbä$—ÈÄÊ7ÉÄ-2±O8‰c¨E&FN2±‰L¬¼‘Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹L¬üL<"#§oÐGdbŸp×Pw‘‰•w’‰]dbä$»ÈÄÈI&v‘‰}ÑI\C-21r’‰Sdbä$§ÈÄÊÉÄ'21òGC-2ñ›÷ÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&ö'q µÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&‘‰•’‰Gdbäô úˆLüæ¿ö¸†Zdbä$»ÈÄÈI&v‘‰‘“Lì"û¦“¸†Zdbä$§ÈÄÈI&.‘‰•?’‰Odâ7ÿõ¾®†Zdbä$—ÈÄÊÉÄ%21r’‰[dbå›dâ™Ø7œÄõ×D&VÞH&6‘‰‘“Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&V~H&‘‰‘“L<"#§oÐGdâ7ÿµÇ5Ô"#'™ØE&FN2±‹LŒœdb™ØÄ5Ô"#'™8E&V¾H&.‘‰•?‰?'øß¡>ô¾®†Zdbä$—ÈÄÊÉÄ%21r’‰[dbå›dâ™øÍ¡j‘‰‘“Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üL<"#'™xD&FNß ÈÄoþkk¨E&FN2±‹LŒœdb™9ÉÄ.2±_:‰k¨E&FN2qŠL¬|‘L\"¿ù¯÷Î5Ô"#ï4Ô"#'™¸D&V¾H&.‘‰‘“LÜ"+ß$·ÈÄ~á$Ž¡™9ÉÄ&21r’‰Mdbä$›ÈÄÊ;ÉÄ.2±òM2q‹L¬üL<"#'™xD&FN2ñˆLŒœ¾A‘‰ßü××P‹LŒœdb™9ÉÄ.21r’‰Cdbt×P‹LŒœdâ™Xù"™¸D&ö'q µÈÄÈ µÈÄÊÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&ö'q µÈÄÈI&6‘‰‘“Ll"#'™ØE&VÞI&v‘‰•o’‰Gdbå‡dâ™9ÉÄ#21r’‰Gdbäô úˆLìNâj‘‰‘“Lì"#'™ØE&V>H&‘‰ãC'q µÈÄÈI&N‘‰•/’‰KdâøÀIC-21r’‰Mdbådâ™Xù"™¸D&V¾I&n‘‰‘“LÜ"ÇNâj‘‰‘“Ll"#'™ØD&FN2±‹L¬¼“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&FNß ÈÄñ“8†Zdbä$»ÈÄÈI&‘‰•’‰Cdâht×P‹LŒœdâ™Xù"™¸D&Ž'q µÈÄÈI&6‘‰•7’‰Kdbå‹dâ™Xù&™¸E&FN2q‹L Nâj‘‰‘“Ll"#'™ØD&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&FNß ¯ÈÄÑà$Ž¡™9ÉÄ.2±òA2qˆLŒœdâ™8:Ä5Ô"#'™¸D&V¾H&.‘‰£ÃIC-21r’‰Mdbådâ™Xù&™¸E&FN2q‹LŒœdâ™8:œÄ1Ô"#'™ØD&FN2±‹L¬¼“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL¬üÒ7è+2qt8‰c¨E&FN2qˆL¬|L"#'™8D&ŽA'q µÈÄÊÉÄ%21r’‰KdâpÇP‹LŒœdb™Xy#™¸E&V¾I&n‘‰‘“LÜ"#'™xD&Ž'q µÈÄÈI&6‘‰•w’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L¼"+¿ô úŠLNâj‘‰•’‰Cdbä$‡ÈÄÈI&‘‰cÒIüê%2±òE2q‰LŒœdâ™8&œÄ1Ô"#'™ØD&VÞH&n‘‰•o’‰[dbä$·ÈÄÊÉÄ#2qL8‰c¨E&FN2±‹L¬¼“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆL¬ü’L¼"#§oÐWdâ˜p×P‘‰•’‰Cdbä$‡ÈÄÈI&‘‰cÑI\C-21r’‰Kdbä$—Èıà$Ž¡™9ÉÄ&2±òF2q‹L¬|“LÜ"#'™xD&V~H&‘‰cÁIC-2±òN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Wdbå—dâ™9}ƒ¾"¿ù¯=®¡™9ÉÄ!21r’‰Cdbä$‡Èıé$®¡™9ÉÄ%21r’‰[dâØpÇP‹L¬¼‘Ll"#'™¸E&V¾I&n‘‰‘“L<"+?$Èıá$®¿¸.2±òN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#2±òK2ñŠLŒœdâ™9}ƒ¾"¿ù¯=®¡™9ÉÄ!21r’‰Cdbä$‡ÈÄqè$®¡™9ÉÄ%2±òM2q‹LNâê&2±òF2±‰LŒœdâ™Xù&™¸E&FN2ñˆL¬üL<"¿ù/ôQC-21r’‰]dbä$»ÈÄÈI&v‘‰‘“L"+?$ÈÄÈI&^‘‰•_’‰Wdbä$¯ÈÄÈéô™øÍíq µÈÄÈI&‘‰‘“L"#'™8D&ŽK'q µÈÄÈI&.‘‰•o’‰[dâ7ÿõÞ¹†Zdbä$›ÈÄÈI&n‘‰•o’‰[dbä$ÈÄÊÉÄ#2q\8‰c¨E&FN2±‹LŒœdb™9ÉÄ.2±òA2qˆL¬üL<"+¿$¯ÈÄÈI&^‘‰‘“L¼"#§oÐWdâ7ÿµÇ5Ô"#'™8D&FN2qˆLŒœdâ™8Ä5Ô"#'™¸D&V¾I&n‘‰ãÁIC-21r’‰Mdbådâ™Xù&™¸E&FN2ñˆL¬üL<"ǃ“8†Zdbä$»ÈÄÈI&v‘‰‘“L"+$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ+21rú}E&Ž'q µÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄù¡“¸†Zdbä$—ÈÄÊ7ÉÄ-2q~à$Ž¡™9ÉÄ.2±òN2q‹L¬|“LÜ"+?$ÈÄÈI&‘‰ó'q µÈÄÈI&v‘‰‘“Lì"#'™8D&V>H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"#§oÐWdâüÀIC-21r’‰Cdbä$§ÈÄÊ'ÉÄ)2q6:‰k¨E&FN2q‰L¬|“LÜ"gƒ“8†Zdbä$»ÈÄÊ;ÉÄ-2±òM2ñˆL¬üL<"#'™xD&Î'q µÈÄÈI&v‘‰‘“Lì"+$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"#§oÐOdâlpÇP‹LŒœdâ™Xù$™8E&FN2qŠLœNâj‘‰‘“LÜ"+ß$·ÈÄÙá$Ž¡™9ÉÄ.2±òN2q‹L¬üL<"#'™xD&FN2ñˆLœNâj‘‰‘“Lì"#'™8D&V>H&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&Vþèô™8;œÄ1Ô"#'™8E&V>I&N‘‰‘“Lœ"ç “¸†Zdbå›dâ™9ÉÄ-2q8‰c¨E&FN2±‹L¬¼“L<"+?$ÈÄÈI&‘‰‘“L¼"瀓8†Zdbä$»ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&>‘‰•?úýD&Î'q µÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄ9é$þõ™Xù&™¸E&FN2q‹LœNâj‘‰‘“Lì"+ï$ÈÄÊÉÄ#21r’‰Gdbå—dâ™8'œÄ1Ô"#'™8D&V>H&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&VþH&>‘‰‘Ó7è'2qN8‰k¨§ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈĹè$®¡™9ÉÄ-21r’‰[dâ\pÇP‹LŒœdb™Xy'™xD&V~H&‘‰‘“L¼"+¿$¯ÈĹà$Ž¡™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ'2±òG2ñ‰LŒœ¾A?‘‰ßü××P‹LŒœdâ™9ÉÄ)21r’‰SdâÜt×P‹LŒœdâ™9ÉÄ#2qn8‰c¨E&VÞI&v‘‰‘“L<"+?$ÈÄÈI&^‘‰•_’‰WdâÜp×_Ü™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœ¾A?‘‰ßü××P‹LŒœdâ™9ÉÄ)21r’‰Sd⑉‘Ó7è'2ñ›ÿÚãj‘‰‘“Lœ"#'™8E&FN2q‰LœNâj‘‰‘“LÜ"+?$ÈÄùà$Ž¡™9ÉÄ.2±òA2ñˆL¬üL<"#'™xE&V~I&^‘‰óÁIC-21r’‰Cdbä$‡ÈÄÈI&N‘‰•O’‰Sdbå—dâ™Xù#™øD&FN2ñ‰LŒœdâ™9}ƒ~"烓8†Zdbä$§ÈÄÈI&N‘‰•/’‰KdâúÐI\C-21r’‰[dbå‡d♸>pÇP‹LŒœdâ™Xù ™xD&V~H&‘‰•_’‰Wdbä$¯ÈÄõ“8†Zdbä$‡ÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰‘Ó7è'2q}à$Ž¡™9ÉÄ)21r’‰Kdbå‹d♸Ä5Ô"#'™¸E&V~H&‘‰«ÁIC-21r’‰Cdbåƒdâ™Xù!™xE&V~I&^‘‰‘“L¼"Wƒ“8†Zdbä$‡ÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰‘Ã7èù™¸œÄ1Ô"#'™8E&V¾H&.‘‰‘“L\"W§“¸†Zdbä$ÈÄÊÉÄ#2qu8‰c¨E&FN2qˆL¬|L<"+¿$¯ÈÄÈI&^‘‰‘“L¼"W‡“8†Zdbä$‡ÈÄÈI&N‘‰•O’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰ßü××P‹L¬|’Lœ"#'™¸D&V¾H&.‘‰‘“L\"× “¸†Zdbå‡dâ™9ÉÄ#2q 8‰c¨E&FN2qˆL¬|L¼"+¿$¯ÈÄÈI&^‘‰‘“L|"×€“8†Zdbä$‡ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈA&þšàó×?þ××P‹L¬|’Lœ"+_$—ÈÄÈI&.‘‰‘“L\"פ“ø;ÔGdbå‡dâ™9ÉÄ#2qM8‰c¨E&FN2qˆL¬|L¼"+¿$¯ÈÄÈI&^‘‰•?’‰OdâšpÇP‹LŒœdâ™Xù$™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™øÍÿÝã†Zdbä†Zdbå“dâ™Xù"™¸D&FN2q‰LŒœd♸Ä5Ô"#'™xD&FN2ñˆL\ Nâj‘‰‘“L"+$¯ÈÄÊ/ÉÄ+21r’‰Odbåd♸œÄ1Ô"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#™øó$þw¨×Ÿ'ñ?C-21òAC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰KdâÚt×P‹LŒœdâ™9ÉÄ+2qm8‰c¨E&V>H&‘‰‘“L¼"+¿$¯ÈÄÈI&>‘‰•?’‰OdâÚp×PO‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰ßüÇçP‹LŒ¼ÓP‹LŒ|ÒP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸Ä5Ô"#'™xD&V~I&^‘‰ëÀI\C=D&V>H&‘‰‘“L¼"+¿$¯ÈÄÈI&>‘‰•?’‰Odâ7ÿ…>j¨E&FN2qŠLŒœdâ™9ÉÄ)21r’‰Kdbådâ™9ÈÄüc¨Ïß¿çP‹LŒ|ÐP‹LŒ|ÑP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸.Ä5Ô"#'™xD&V~I&^‘‰ßü×{çj‘‰‘“L"#'™xE&V~I&^‘‰‘“L|"+$ŸÈÄuá$Ž¡™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ%2±òG2ñ‰Lüæ?¢ˆ¡™y§¡™ù¤¡™ù¦¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ-2q=:‰k¨E&FN2ñˆL¬ü’L¼"׃“8†Zdbä$‡ÈÄÊ'ÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&®'q µÈÄÈI&N‘‰‘“Lœ"#'™¸D&V¾H&.‘‰•?‰?'øß¡~ðp"†Zdb䃆Zdb䋆Zdb䇆Zdbå‹dâ™9ÉÄ%21r’‰Kdbå›d♸?t×P‹LŒœdâ™Xù%™xE&îœÄ1Ô"#'™8E&V>I&^‘‰•_’‰Wdbådâ™9ÉÄ'2qà$Ž¡™9ÉÄ)21r’‰Sdbä$—ÈÄÊÉÄ%2ñ›ÿÜãj‘‰‘wj‘‰‘Oj‘‰‘oj‘‰‘_j‘‰•/’‰Kdbä$—ÈÄÈI&n‘‰•o’‰[dânt×P‹LŒœdâ™Xù%™xE&î'q µÈÄÈI&N‘‰•O’‰Wdbå—dâ™Xù#™øD&FN2ñ‰LÜ Nâj‘‰‘“Lœ"#'™8E&V¾H&.‘‰‘“L\"¿ùÏ=Ž¡™ù ¡™ù¢¡™ù¡¡™9ÉÄ&2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LÜNâj‘‰‘“L¼"+¿$¯ÈÄÝá$Ž¡™9ÉÄ)2±òI2ñŠL¬ü‘L|"#'™øD&FN2ñ‰LÜNâj‘‰‘“Lœ"#'™¸D&V¾H&.‘‰‘“L\"w‡“8†Zdb䓆Zdb䛆Zdbä—†Zdbådb™Xù"™¸D&FN2q‹L¬|“LÜ"#'™¸E&îA'q µÈÄÊ/ÉÄ+21r’‰WdâpÇP‹LŒœdâ™Xù$™øD&VþH&>‘‰‘“L|"#™8>"÷€“8†Zdbä$§ÈÄÊÉÄ%21r’‰Kdbä$—ÈÄ=à$Ž¡™ù¢¡™ù¡¡™9ÉÄ&2±òF2±‰L¬|‘L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"÷¤“ø;ÔWdbå—dâ™9ÉÄ+2qO8‰c¨E&FN2qŠL¬|’L|"+$ŸÈÄÈI&>‘‰ßü××P‹L¬|’Lœ"#'™¸D&V¾H&.‘‰‘“L\"#'™¸D&î 'q µÈÄÈ7 µÈÄÈ/ µÈÄÊÉÄ&21r’‰Mdbå‹dâ™Xù&™¸E&FN2q‹LŒœd♸Ä5Ô"#'™xE&FN2ñŠLÜ Nâj‘‰‘“Lœ"+Ÿ$ŸÈÄÊÉÄ'21r‰?'øß¡þ µO£¡™Xù$™8E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰LÜ Nâj‘‰‘j‘‰‘“Ll"+o$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"÷¦“¸†Zdbä$¯ÈÄÈI&>‘‰{ÃIC-2±òI2qŠLŒœdâ™Xù#™øD&F¾i¨E&~ó_{\C-2±òI2q‰L¬|‘L\"#'™¸D&FN2q‰LŒœd♸7œÄ1Ô"#¿4Ô"+o$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&îC'q µÈÄÈI&^‘‰•?’‰Odâ>p×PO‘‰•O’‰Sdbä$ŸÈÄÊÉÄ'21òCC-2ñ›ÿÚãj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"#'™¸E&î'q µÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"÷¥“¸†Zdbä$¯ÈÄÊÉÄ'2ñ›ÿzï\C-21r’‰Sdbä$ŸÈÄÊÉÄ'21òKC-2ñ›ÿÚãj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"+ß$·ÈÄ}á$Ž¡™Xy#™ØD&FN2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰Gdâ~t×P‹LŒœdâ™Xù#™øD&î'q µÈÄÈI&N‘‰•/’‰Odbådâ™ù£¡™øÍíq µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&n‘‰•o’‰[dâ~p×P7‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"+?$ÈÄ󡓸†Zdbä$¯ÈÄÊÉÄ'2ñ|à$Ž¡™9ÉÄ%2±òE2ñ‰L¬ü‘L|"¿ù¯g5Ô"#ß4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸E&V¾I&n‘‰ßüçÇP‹LŒœdb™9ÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$ÈÄÊÉÄ#2ñ4:‰k¨E&FN2ñŠL¬ü‘L|"Oƒ“8†Zdbä$—ÈÄÊÉÄ'2±ò2ñçÿ;ÔžmÔP‹LŒüÐP‹L¬|‘L\"#'™¸D&FN2q‰L¬|“LÜ"#'™¸E&~óŸ{C-21r’‰Mdbä$›ÈÄÈI&6‘‰‘“Lì"+ß$·ÈÄÈI&n‘‰•’‰Gdbä$ÈÄÓé$®¡™9ÉÄ'2±òG2ñ‰L<Nâj‘‰‘“L\"+_$ŸÈÄoþë$®¡™y§¡™ù¥¡™Xù"™¸D&FN2q‰LŒœdâ™Xù&™¸E&FN2q‹L<Nâj‘‰‘“Ll"#'™ØD&FN2±‰L¬¼“Lì"+ß$·ÈÄÈI&‘‰•’‰Gdbä$ÈÄ3è$®¡™Xù#™øD&FN2ñ‰L<Nâj‘‰‘“L\"+_ ½dþg¨Ä5Ô"#4Ô"#'™ØD&V¾H&.‘‰‘“L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"Ï€“8†Zdbä$›ÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÊ7ÉÄ-2±òC2ñˆLŒœdâ™9ÉÄ#2ñL:‰¿CýD&VþH&>‘‰‘“L|"Ï„“8†Zdbä$—ÈÄÊ×¢¡™x&Ä5Ô"#Ÿ4Ô"+o$›ÈÄÊÉÄ%21r’‰[dbå›dâ™9ÉÄ-21r’‰[dâ™pÇP‹LŒœdb™9ÉÄ&2±òN2±‹LŒœdb™Xù&™xD&V~H&‘‰‘“L<"#'™xD&žE'q µÈÄÈI&>‘‰‘“L|"Ï‚“8†Zdbä$—ÈÄÊצ¡™xÄ5Ô"#'™ØD&VÞH&6‘‰•/’‰Kdbå›dâ™9ÉÄ-21r’‰[dbä$·Èijà$Ž¡™9ÉÄ&21r’‰]dbådb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰GdâÙt×P‹LŒœdâ™9ÈÄþ™x6œÄ1Ô"+_$—ÈÄÈ µÈijé$®¡™9ÉÄ&2±òF2±‰L¬|‘LÜ"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&ž 'q µÈÄÈI&6‘‰•w’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"Ï¡“¸†Zdbä$ŸÈÄoþsc¨E&V>I&.‘‰•/’‰Kdbä—†Zdâ9t×P‹LŒœdb™Xy#™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LŒœdâ™xœÄ1Ô"#'™ØE&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL<—Nâj‘‰‘“L|"¿ùÏ=Ž¡™Xù"™¸D&FN2q‰LŒüÑP‹L<—Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰•’‰Gdâ¹pÇP‹L¬¼“Lì"#'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ+2ñ<:‰k¨E&FN2ñ‰Lüæ?÷8†Zdbå‹dâ™9ÉÄ%2±òý¡¡™xÄ5Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“L<"+?$ÈÄóà$®¡î"+ï$»ÈÄÈI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&V~I&^‘‰÷C'q µÈÄÈI&>‘‰ßüçÇP‹L¬|‘L\"#'™¸E&V¾ µÈÄû¡“¸†Zdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰Gdbå‡dâ™øÍîq µÈÄÈI&v‘‰‘“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñŠL¬ü’L¼"o£“¸†Zdbä$ŸÈÄoþsc¨E&V¾H&.‘‰‘“LÜ"+߆Zdâmt‡º‰L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&V~H&‘‰‘“L<"¿ùÏ=Ž¡™9ÉÄ.21r’‰]dbä$»ÈÄÈI&‘‰•’‰Gdbä$ÈÄÊ/ÉÄ+21r’‰Wdâít×P‹LŒd⿟ õ÷} µÈÄÊÉÄ%21r’‰[dbå{ÐP‹Lüæ¿Nâj‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™xD&V~H&‘‰‘“L<"o‡“8†Zdbä$»ÈÄÈI&v‘‰‘“Lì"+$‡ÈÄÊÉÄ#21r’‰Wdbå—dâ™9ÉÄ+2ñ:‰k¨E&~óŸÏ6b¨E&F¾i¨E&V¾H&.‘‰‘“LÜ"+ß$›ÈÄoþë$®¡™9ÉÄ&21r’‰]dbå›dâ™9ÉÄ-2±òC2ñˆLŒœdâ™9ÉÄ#2ñ8‰c¨E&FN2±‹LŒœdb™9ÉÄ!2±òA2qˆL¬üL<"+¿$¯ÈÄÈI&^‘‰‘“L¼"邏øÿ¡þõ’ùŸ¡žðl#†Zdb䇆Zdbå‹dâ™9ÉÄ-2±òM2±‰L¼“Nâj‘‰‘“Ll"+ï$»ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™9ÉÄ#21r’‰GdâpÇP‹LŒœdb™9ÉÄ.2±òA2qˆLŒœdâ™Xù!™xE&V~I&^‘‰‘“L¼"#'™xE&ÞE'q µÈÄÈ; µÈÄÈ/ µÈÄÊÉÄ%21r’‰[dbå›db™xÄ5Ô"#'™ØE&VÞI&v‘‰•o’‰[dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄ»à$Ž¡™9ÉÄ.21r’‰Cdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰WdâÝt×P‹LŒ|ÐP‹LŒœdb™Xù"™¸D&V¾I&n‘‰‘“Ll"煉¸†Zdbä$»ÈÄÊ;ÉÄ.2±òM2ñˆL¬üL<"#'™xD&FN2ñˆLŒœdâ™x7œÄ1Ô"#'™ØE&V>H&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL¼‡Nâj‘‰‘Oj‘‰•7’‰Mdbå‹dâ™Xù&™¸E&FN2±‰L¼‡Nâj‘‰‘“Lì"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰‘“L¼"ï“8†Zdbä$‡ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰÷ÒI\C-21òEC-2±òF2±‰L¬|“LÜ"#'™¸E&FN2±‰L¼—Nâj‘‰‘“Lì"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰•_’‰Wdâ½pÇP‹L¬|L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ'2ñ>:‰k¨E&F¾i¨E&VÞH&6‘‰•o’‰[dbä$·ÈÄÊÉÄ&2ñ>:‰k¨E&FN2±‹L¬¼“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xE&V~I&^‘‰÷ÁI\C=D&V>H&‘‰‘“L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠL¬ü‘L|"߇Nâj‘‰‘j‘‰•7’‰Mdbå›dâ™9ÉÄ#2±òC2±‰L|:‰k¨E&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xE&V~I&^‘‰ßüçÇP‹LŒœdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$ŸÈÄÊÉÄ'2ñ5:‰k¨E&F~i¨E&VÞH&6‘‰•o’‰[dbä$ÈÄÊÉÄ&2ñ5:‰¿CÝE&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"+¿$¯ÈÄÈI&^‘‰ßüçÇP‹LŒœdâ™9ÉÄ!21r’‰Cdbä$§ÈÄÊ/ÉÄ+21r’‰Wdbådâ™9ÉÄ'2ñu:‰k¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&‘‰•’‰Mdâ7ÿu×P‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ+2±òK2ñŠLŒœdâ™ø:œÄ1Ô"#'™8D&FN2qˆLŒœdâ™Xù$™8E&V~I&^‘‰‘“L|"+$ŸÈÄÈI&>‘‰oÐI\C-2±òF2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üLì"¿ù¯“¸†Zdbä$»ÈÄÈI&‘‰•’‰Gdbä$ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄ7à$Ž¡™9ÉÄ!21r’‰Cdbä$§ÈÄÊ'ÉÄ)2±òK2ñŠL¬ü‘L|"#'™øD&FN2ñ‰L|“NâïP7‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø&Ä5Ô"#'™ØE&V>H&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄ7á$Ž¡™9ÉÄ!21r’‰Cdbå“dâ™9ÉÄ)2±òK2ñ‰L¬ü‘L|"#'™øD&FN2ñ‰L|‹Nâj‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“L<"+?$»ÈÄ·è$®¡™9ÉÄ!2±òA2qˆL¬üL<"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&¾'q µÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"ߦ“¸†Zdbä$›ÈÄÈI&v‘‰•o’‰[dbå‡dâ™9ÉÄ.2ñm:‰k¨E&FN2qˆL¬|L"+?$¯ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰oÃIC-21r’‰Cdbå“dâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä$ŸÈÄwè$®¡™9ÉÄ&2±òN2±‹L¬|“L<"+?$ÈÄÈI&v‘‰ïÐI\C-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+21r’‰Odâ;pÇP‹LŒœdâ™Xù$™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'2ñ]:‰k¨E&FN2±‰L¬¼“Lì"+?$ÈÄÈI&‘‰‘“Lì"ߥ“¸†Zdbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbådâ™ø.œÄ1Ô"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&F2q}D&¾G'q µÈÄÈI&6‘‰•w’‰]dbå‡dâ™9ÉÄ#2±òK2±‹L|Nâj‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&>‘‰•?’‰Odâ{p×PO‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"¿ù=Ρf™ø~ŸÄ5Ô,3'™ØX&FÞI&v–‰‘’‰‡ebæ$/ËÄÈ/ÉÄÎ2±ò_'q 5ËÄÈÉÄÁ21s’‰ƒebä—dâe™˜9ÉÄË21s’‰—ebæ$ËÄÈÉÄÇ2±òŸ{CÍ21s’‰“ebæ$'ËÄÌI&N–‰™“Lœ,#$ËÄÌI&>–‰™ƒLüw‚ÿêÊìqu—¡nt×PêÏ6b¨Ÿ õ7ï$û’¡npÇPOêFïëj¨› õ7¿$û•¡nt‡z|d¨=Û¨¡Þ2Ô•“LW†ºÁIC½d¨œÄ1ÔG†ºÁICýd¨üvCÝe¨+'™ø¦ uƒ“8†ºËP7x8C=e¨Ûß¿çPoêöçIüÏP_êÊI&® uƒ“8†úÈP·¿Oâê'CÝþ>‰s¨› uå†zÈPw:‰k¨¯ u‡g5Ôý#CýÍ;Éľe¨;œÄ1ÔK†ºÓûºê.CýÍ/ÉÄþd¨;Ä5ÔM†ºÓ³ê#C]9ÉÄñd¨;œÄ1Ô[†ºÃIC}e¨;œÄ5Ôï#CÝá·‹ê!C]9ÉÄ·d¨;œÄ1ÔC†ºÃÉê%CÝÿþ•8‡úÈP÷?Oâ†úÉPóE2q5ê'q õ•¡îŸÄ5Ô?%þw¨ûß'qu—¡®|ÐPOêA'q õ“¡ðl#†ºÉPWN2±ê'q õ–¡ô¾®†zÈPóK2q|d¨Ä5Ô]†zгê+C]9ÉÄù‘¡pÇPê'q õ“¡pÇP7ê¿]ÄPOêÊI&¾-C=à$Ž¡ž2ÔNÄPoêñ÷¯Ä9ÔW†züyçP¯ õ7_$W—¡pÇP?êñ÷IœCÝd¨Çß'qõ¡®|ÒP/êI'ñw¨ûG†z³ê.C]9ÉÄ~e¨'œÄ1ÔG†zÒûºê)CýÍ/ÉÄÑd¨'Ä5ÔC†zÒ³ê'CýÍ'ÉÄÙd¨'œÄ1ÔW†zÂI\Cý>2ÔNâê.C=á·‹ê%C]9ÉÄwd¨'œÄ1ÔK†zÂÉê#C=ÿþ•8‡úÉPÏ?O↺ÉPWN2q ê 'ñw¨×ç#C=ÿ>‰s¨» õüû$Ρž2Ô•/ê-C½è$®¡n2Ô žmÄPêÊI&ö'C½à$Ž¡¾2Ô‹Þ×ÕP/êo~I&Ž.C½è$®¡ž2Ô‹žm|‡z~d¨¿ù$™8» õ‚“8†úÉP/8‰c¨› õ‚“8†zÈP/øí"†zËPWN2ñ]ê'q õ–¡^ðp"†úÊP¯¿%Ž¡^êõçIüÏPwêÊI&®)C½à$Ž¡n2Ôëï“8‡zÈP¯¿Oâê%C]ù¦¡>2Ô›Nâê.C½áÙF õ”¡®œdâøÈPo8‰c¨Ÿ õ¦÷u5Ô[†ºr’‰cÈPo:‰k¨— õ¦g5ÔM†ú›O’‰sÈPo8‰k¨ßG†zÃICÝe¨7œÄ1ÔS†zÃo1ÔG†ºr’‰ïÉPo8‰c¨ õ†‡1ÔO†zÿý+qu“¡ÞžÄÿ õ¡®œdâZ2ÔNâê.C½ÿ>‰s¨§ õþû$ΡÞ2Ô•ê+C}è$®¡2ÔžmÄP/êo>H&Ž&C}à$®¡¾êCïëj¨ uå$Ç”¡>t×PoêCÏ6j¨» õ7Ÿ$甡>pÇP7ê'q õ¡>pÇP/ê¿]ÄP_êÊA&ÎÏG†úÀIC}e¨<œ¨¡^êó÷¯Ä9Ô]†úüyÿ3ÔS†ºr’‰kËP8‰c¨‡ õùû$Ρ^2Ôçï“8‡úÈPW~i¨Ÿ õ¥“¸†zÊP_x¶C½e¨¿ù ™8º õ…“8†ºÉP_z_WC}e¨+'™8– õ¥“¸†úÈP_z¶QC=d¨¿ù$™8— õ…“8†ºËP_8‰c¨§ õ…“8†zËP_øí"†úÉP‰ÙçCCÝd¨/œÄ1ÔO†úÂÉê&C}ÿþ•8‡zÈPß?Oâ†zÉPWN2qê 'q õ”¡¾ŸÄ9Ô[†úþ}çP_êÊI&¶ õ£“¸†zÉP?x¶C}d¨¿ù ™8† õƒ“8†ºËP?z_WCýd¨¿ù#™8¶ õ£“¸†úÊP?z¶QC=e¨¿ù$™8· õƒ“8†zÈP?8‰c¨— õƒ“8†úÈP?øíâ;Ô?'øß¡þ µO£¡î2ÔNâêõ‘¡~ðp"†ºËP¿¿%Ρž2ÔïÏ“øŸ¡Þ2Ô•“L\W†úÁIC½d¨ßß'qõ‘¡~ŸÄ9ÔO†ú›7’‰MdbûÐI\C-21r’‰]dbåƒdâ™Xù%™xE&FN2ñ‰L¬ü‘L"Û‡Nâj‘‰•O’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈ µÈÄo>?†Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰í'q µÈÄÈ µÈÄÈI&6‘‰•7’‰Mdbkt×P‹LŒœdb™Xù ™8D&V~I&^‘‰‘“L|"+$‡ÈÄÖè$þõ™Xù$™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰Lüæ¿çj‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"#'™¸E&¶'q µÈÄÈ/ µÈÄÊÉÄ&21r’‰Mdbët×P‹LŒœdâ™Xù ™8D&V~I&^‘‰‘“L|"+$‡ÈÄoþë$®¡™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r‰?'øß¡îðÛE µÈÄÈ' µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰•o’‰[dbëpÇP‹LŒœdb™Xy#™ØD&FN2±‰LlƒNâj‘‰•’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™øÍÄ5Ô"#'™8E&FN2q‰L¬ü‘L|"#'™øD&~óŸ{C-21òNC-21òEC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰[dbå›dâ™ØœÄ1Ô"+o$›ÈÄÈI&6‘‰‘“Ll"Û¤“ø;ÔCdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™8E&¶I'q µÈÄÈI&N‘‰•/’‰Kdbådâ™9ÈÄ_/Üþê 'q µÈÄÈ µÈÄÈ7 µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÊ7ÉÄ-21r’‰[db›p×P7‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰mÑI\C-21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™ØÄ5Ô"#'™¸D&V¾H&.‘‰•?’‰Odâ7ÿýâø;Ô"#ï4Ô"#Ÿ4Ô"#?4Ô"+_$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄÈI&n‘‰ßü××P‹LŒœdb™9ÉÄ&21r’‰MdbÛt×P‹LŒœdâ™9ÉÄ)2±òK2ñŠL¬ü‘L|"#'™8E&¶M'q µÈÄÈI&.‘‰•/’‰Kdbå¾ }D&~óß/Ž¿C-21òAC-21òEC-21òKC-2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LŒœdâ™øÍíq µÈÄÈI&6‘‰‘“Ll"#'™ØD&¶C'q µÈÄÈI&‘‰•O’‰Sdbå—dâ™Xù#™øD&FN2qŠLl‡Nâj‘‰‘“L\"+_$—ÈÄoþ }ÔP‹LŒ¼ÓP‹LŒ|ÒP‹LŒ|ÓP‹LŒœdb™Xù"™¸D&FN2q‹L¬|“LÜ"#'™¸E&FN2q‹Lüæ¿ö¸†Zdbä$›ÈÄÈI&6‘‰‘“Ll"Û¥“¸†Zdbä$‡ÈÄÊ'ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ)2±]:‰k¨E&FN2q‰L¬|‘L\"Û…“8†Zdb䃆Zdb䋆Zdb䇆Zdbådb™Xù"™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹Lüæ¿ö¸†Zdbä$›ÈÄÈI&6‘‰‘“Lì"Û£“¸†Zdbä$‡ÈÄÊ'ÉÄ)2±òG2ñ‰LŒœdâ™øÍLJdâ™Xù$™8E&FN2q‰L¬|‘L\"Ûƒ“8†Zdb䓆Zdb䛆Zdbä$›ÈÄÊÉÄ&2±òE2q‹L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™ØœÄ1Ô"#'™ØD&FN2±‰L¬¼“Lì"û‡Nâj‘‰‘“L"+Ÿ$§ÈÄÊÉÄ'21r‰?'øŸ¡þæãC2qŠL¬|’Lœ"+_$—ÈÄÈI&.‘‰ý'q µÈÄÈ µÈÄÈ µÈÄÈI&6‘‰•7’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰ý'q µÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÞè$®¡™9ÉÄ!2±òI2qŠL¬ü‘L|"#_4Ô"¿ùøLœ"+Ÿ$—ÈÄÊÉÄ%21r’‰KdbopÇP‹LŒ|ÓP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LŒœ¾A‘‰½ÁIC-21r’‰Mdbådb™9ÉÄ.2±w:‰k¨E&FN2qŠL¬|’Lœ"+$ŸÈÄÈ7 µÈÄo>>$§ÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÞá$Ž¡™ù¡¡™9ÉÄ&2±òF2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2±òCß ÈÄÞá$Ž¡™9ÉÄ.2±òN2±‹LŒœdb™ØÄ5Ô"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odb䇆Zdâ7’‰Kdbå‹dâ™9ÉÄ%21r’‰[dbpÇP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™Xù¡oÐGdbpÇP‹L¬¼“Lì"#'™ØE&FN2±‹Lì“NâïPO‘‰•O’‰Sdbä$§ÈÄÊÉÄ'21òKC-2ñ›ÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&ö 'q µÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰•’‰Gdbäô úˆLìNâê.2±òN2±‹LŒœdb™9ÉÄ.2±/:‰k¨E&FN2qŠLŒœdâ™Xù#™øD&Fþh¨E&~óñ!™¸D&V¾H&.‘‰‘“LÜ"+ß$·Èľà$Ž¡™Xy#™ØD&FN2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ#2±òC2ñˆLŒœ¾A‘‰ßü××P‹LŒœdb™9ÉÄ.21r’‰]dbßt×P‹LŒœdâ™9ÉÄ%2±òG2ñ‰Lüæ¿Þ×ÕP‹LŒœdâ™Xù"™¸D&FN2q‹L¬|“LÜ"û†“¸þâšÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÊÉÄ#21r’‰Gdbäô úˆLüæ¿ö¸†Zdbä$»ÈÄÈI&v‘‰‘“Lì"û¡“¸†Zdbä$§ÈÄÊÉÄ%2±ò2ñçÿ;Ô‡Þ×ÕP‹LŒœdâ™Xù"™¸D&FN2q‹L¬|“LÜ"¿ù/ôQC-21r’‰Mdbä$›ÈÄÈI&6‘‰‘“Lì"+ß$·ÈÄÈI&‘‰•’‰Gdbä$ÈÄÈéô™øÍíq µÈÄÈI&v‘‰‘“Lì"#'™ØE&öK'q µÈÄÈI&N‘‰•/’‰Kdâ7ÿõÞ¹†Zdbä†Zdbä$—ÈÄÊÉÄ%21r’‰[dbå›dâ™Ø/œÄ1Ô"#'™ØD&FN2±‰LŒœdb™Xy'™ØE&V¾I&n‘‰•’‰Gdbä$ÈÄÈI&‘‰‘Ó7è#2ñ›ÿÚãj‘‰‘“Lì"#'™ØE&FN2qˆLìNâj‘‰‘“Lœ"+_$—ÈÄþà$Ž¡™ù ¡™Xy#™¸D&V¾H&.‘‰‘“LÜ"+ß$·ÈÄþà$Ž¡™9ÉÄ&21r’‰Mdbä$»ÈÄÊ;ÉÄ.2±òM2ñˆL¬üL<"#'™xD&FN2ñˆLŒœ¾A‘‰ýÁIC-21r’‰]dbä$»ÈÄÊÉÄ!2q|è$®¡™9ÉÄ)2±òE2q‰L8‰c¨E&FN2±‰L¬¼‘L\"+_$—ÈÄÊ7ÉÄ-21r’‰[dâøÀIC-21r’‰Mdbä$›ÈÄÈI&v‘‰•w’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄÈéô™8>pÇP‹LŒœdb™9ÉÄ!2±òA2qˆLNâj‘‰‘“Lœ"+_$—ÈÄÑà$Ž¡™9ÉÄ&2±òF2q‰L¬|‘LÜ"+ß$·ÈÄÈI&n‘‰£ÁIC-21r’‰Mdbä$›ÈÄÊ;ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄÈéô™8œÄ1Ô"#'™ØE&V>H&‘‰‘“L"G§“¸†Zdbä$—ÈÄÊÉÄ%2qt8‰c¨E&FN2±‰L¬¼‘L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"G‡“8†Zdbä$›ÈÄÈI&v‘‰•w’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰•_ú}E&Ž'q µÈÄÈI&‘‰•’‰Cdbä$‡ÈÄ1è$®¡™Xù"™¸D&FN2q‰LNâj‘‰‘“Ll"+o$·ÈÄÊ7ÉÄ-21r’‰[dbä$ÈÄ1à$Ž¡™9ÉÄ&2±òN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Wdbå—¾A_‘‰cÀIC-2±òA2qˆLŒœdâ™9ÉÄ!2qL:‰¿C½D&V¾H&.‘‰‘“L\"Ç„“8†Zdbä$›ÈÄÊÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&Ž 'q µÈÄÈI&v‘‰•w’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰•_’‰Wdbäô úŠLNâê!2±òA2qˆLŒœdâ™9ÉÄ!2q,:‰k¨E&FN2q‰LŒœdâ™8œÄ1Ô"#'™ØD&VÞH&n‘‰•o’‰[dbä$ÈÄÊÉÄ#2q,8‰c¨E&VÞI&v‘‰‘“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñŠL¬ü’L¼"#§oÐWdâ7ÿµÇ5Ô"#'™8D&FN2qˆLŒœdâ™86Ä5Ô"#'™¸D&FN2q‹LNâj‘‰•7’‰Mdbä$·ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™86œÄõ×E&VÞI&v‘‰‘“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&V~I&^‘‰‘“L¼"#§oÐWdâ7ÿµÇ5Ô"#'™8D&FN2qˆLŒœdâ™8Ä5Ô"#'™¸D&V¾I&n‘‰ãÀI\CÝD&VÞH&6‘‰‘“LÜ"+ß$·ÈÄÈI&‘‰•’‰Gdâ7ÿ…>j¨E&FN2±‹LŒœdb™9ÉÄ.21r’‰Cdbå‡dâ™9ÉÄ+2±òK2ñŠLŒœdâ™9}ƒ¾"¿ù¯=®¡™9ÉÄ!21r’‰Cdbä$‡ÈÄqé$®¡™9ÉÄ%2±òM2q‹Lüæ¿Þ;×P‹LŒœdb™9ÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&Ž 'q µÈÄÈI&v‘‰‘“Lì"#'™ØE&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdbäô úŠLüæ¿ö¸†Zdbä$‡ÈÄÈI&‘‰‘“Lœ"Ç£“¸†Zdbä$—ÈÄÊ7ÉÄ-2q<8‰c¨E&FN2±‰L¬¼“LÜ"+ß$·ÈÄÈI&‘‰•’‰GdâxpÇP‹LŒœdb™9ÉÄ.21r’‰Cdbåƒdâ™Xù!™xE&V~I&^‘‰‘“L¼"#'™xE&FNß ¯ÈÄñà$Ž¡™9ÉÄ!21r’‰Cdbå“dâ™8?t×P‹LŒœdâ™Xù&™¸E&ΜÄ1Ô"#'™ØE&VÞI&n‘‰•o’‰[dbå‡dâ™9ÉÄ#2q~à$Ž¡™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbäô úŠLœ8‰c¨E&FN2qˆLŒœdâ™Xù$™8E&ÎF'q µÈÄÈI&.‘‰•o’‰[dâlpÇP‹LŒœdb™Xy'™¸E&V¾I&‘‰•’‰Gdbä$ÈÄÙà$Ž¡™9ÉÄ.21r’‰]dbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbäô ú‰Lœ Nâj‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰³ÓI\C-21r’‰[dbå›dâ™8;œÄ1Ô"#'™ØE&VÞI&n‘‰•’‰Gdbä$ÈÄÈI&‘‰³ÃIC-21r’‰]dbä$‡ÈÄÊÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄÊ}ƒ~"g‡“8†Zdbä$§ÈÄÊ'ÉÄ)21r’‰Sdât×P‹L¬|“LÜ"#'™¸E&Î'q µÈÄÈI&v‘‰•w’‰Gdbå‡dâ™9ÉÄ#21r’‰WdâpÇP‹LŒœdb™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ'2±òGß ŸÈÄ9à$Ž¡™Xù$™8E&FN2qŠLŒœdâ™8'Äß¡Þ"+ß$·ÈÄÈI&n‘‰sÂIC-21r’‰]dbådâ™Xù!™xD&FN2ñˆL¬ü’L¼"ç„“8†Zdbä$‡ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÊÉÄ'21rúýD&Î 'q õ™Xù$™8E&FN2qŠLŒœdâ™8Ä5Ô"#'™¸E&FN2q‹Lœ Nâj‘‰‘“Lì"+ï$ÈÄÊÉÄ#21r’‰Wdbå—dâ™8œÄ1Ô"+$‡ÈÄÈI&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™øD&VþH&>‘‰‘Ó7è'2ñ›ÿÚãj‘‰‘“Lœ"#'™8E&FN2qŠLœ›Nâj‘‰‘“LÜ"#'™xD&Î 'q µÈÄÊ;ÉÄ.21r’‰Gdbå‡dâ™9ÉÄ+2±òK2ñŠLœNâú‹"+$‡ÈÄÈI&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"+$ŸÈÄÈI&>‘‰‘Ó7è'2ñ›ÿÚãj‘‰‘“Lœ"#'™8E&FN2qŠLœ‡Nâj‘‰‘“LÜ"+?$ÈÄyà$®¡î"+ï$»ÈÄÈI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+2ñ›ÿB5Ô"#'™8D&FN2qˆLŒœdâ™9ÉÄ)2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœ¾A?‘‰ßü××P‹LŒœdâ™9ÉÄ)21r’‰Sdâ¼t×P‹LŒœdâ™Xù!™xD&~ó_ïk¨E&FN2±‹LŒœdâ™Xù!™xD&FN2ñŠL¬ü’L¼"ç…“8†Zdbä$‡ÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÊ/ÉÄ+2±òG2ñ‰LŒœdâ™9ÉÄ'21rúýD&~ó_{\C-21r’‰Sdbä$§ÈÄÈI&.‘‰óÑI\C-21r’‰[dbå‡dâ™8œÄ1Ô"#'™ØE&V>H&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+2q>8‰c¨E&FN2qˆLŒœdâ™9ÉÄ)2±òI2qŠL¬ü’L|"+$ŸÈÄÈI&>‘‰‘“L|"#§oÐOdâ|pÇP‹LŒœdâ™9ÉÄ)2±òE2q‰L\:‰k¨E&FN2q‹L¬üL<"×Nâj‘‰‘“L"+$ÈÄÊÉÄ#2±òK2ñŠLŒœd♸>pÇP‹LŒœdâ™9ÉÄ!21r’‰Sdbå“dâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'21rúýD&®œÄ1Ô"#'™8E&FN2q‰L¬|‘L\"W£“¸†Zdbä$·ÈÄÊÉÄ#2q58‰c¨E&FN2qˆL¬|L<"+?$¯ÈÄÊ/ÉÄ+21r’‰WdâjpÇP‹LŒœdâ™9ÉÄ!2±òI2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'21rø½>"Wƒ“8†Zdbä$§ÈÄÊÉÄ%21r’‰Kdâêt×P‹LŒœdâ™Xù!™xD&®'q µÈÄÈI&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰WdâêpÇP‹LŒœdâ™9ÉÄ)2±òI2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'2ñ›ÿÚãj‘‰•O’‰Sdbä$—ÈÄÊÉÄ%21r’‰Kdât×P‹L¬üL<"#'™xD&®'q µÈÄÈI&‘‰•’‰Wdbå—dâ™9ÉÄ+21r’‰OdâpÇP‹LŒœdâ™Xù$™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÈÄ_|þúÇÿÚãj‘‰•O’‰Sdbå‹dâ™9ÉÄ%21r’‰Kdâšt‡úˆL¬üL<"#'™xD&® 'q µÈÄÈI&‘‰•’‰Wdbå—dâ™9ÉÄ+2±òG2ñ‰L\Nâj‘‰‘“Lœ"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"¿ù¿{üÏP‹LŒ¼ÓP‹L¬|’L\"+_$—ÈÄÈI&.‘‰‘“L\"×¢“¸†Zdbä$ÈÄÈI&‘‰kÁIC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"ׂ“8†Zdbå“dâ™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä žÄÿõúó$þg¨E&F>h¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L\›Nâj‘‰‘“L<"#'™xE&® 'q µÈÄÊÉÄ!21r’‰Wdbå—dâ™9ÉÄ'2±òG2ñ‰L\Nâê)2±òI2qŠLŒœdâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'2ñ›ÿØãj‘‰‘wj‘‰‘Oj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"ס“¸†Zdbä$ÈÄÊ/ÉÄ+2q8‰k¨‡ÈÄÊÉÄ!21r’‰Wdbå—dâ™9ÉÄ'2±òG2ñ‰Lüæ¿ÐG µÈÄÈI&N‘‰‘“Lœ"#'™8E&FN2q‰L¬ü‘L|"#™øc‚ õùûWâj‘‰‘j‘‰‘/j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"×¥“¸†Zdbä$ÈÄÊ/ÉÄ+2ñ›ÿzï\C-21r’‰Cdbä$¯ÈÄÊ/ÉÄ+21r’‰Odbåd♸.œÄ1Ô"#'™8E&FN2qŠLŒœdâ™Xù"™¸D&VþH&>‘‰ßüçO1Ô"#ï4Ô"#Ÿ4Ô"#ß4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸E&®G'q µÈÄÈI&‘‰•_’‰WdâzpÇP‹LŒœdâ™Xù$™xE&V~I&^‘‰‘“L|"+$ŸÈÄõà$Ž¡™9ÉÄ)21r’‰Sdbä$—ÈÄÊÉÄ%2±ò2ñçÿ;ÔNÄP‹LŒ|ÐP‹LŒ|ÑP‹LŒüÐP‹L¬|‘L\"#'™¸D&FN2q‰L¬|“LÜ"÷‡Nâj‘‰‘“L<"+¿$¯ÈÄý“8†Zdbä$§ÈÄÊ'ÉÄ+2±òK2ñŠL¬ü‘L|"#'™øD&îœÄ1Ô"#'™8E&FN2qŠLŒœdâ™Xù"™¸D&~óŸ{C-21òNC-21òIC-21òMC-21òKC-2±òE2q‰LŒœdâ™9ÉÄ-2±òM2q‹LÜNâj‘‰‘“L<"+¿$¯ÈÄÝà$Ž¡™9ÉÄ)2±òI2ñŠL¬ü’L|"+$ŸÈÄÈI&>‘‰»ÁIC-21r’‰Sdbä$§ÈÄÊÉÄ%21r’‰Kdâ7ÿ¹Ç1Ô"#4Ô"#_4Ô"#?4Ô"#'™ØD&V¾H&.‘‰‘“L\"+ß$·ÈÄÈI&n‘‰»ÓI\C-21r’‰Wdbå—d♸;œÄ1Ô"#'™8E&V>I&^‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰»ÃIC-21r’‰Sdbä$—ÈÄÊÉÄ%21r’‰KdâîpÇP‹LŒ|ÒP‹LŒ|ÓP‹LŒüÒP‹L¬¼‘Ll"+_$—ÈÄÈI&n‘‰•o’‰[dbä$·ÈÄ=è$®¡™Xù%™xE&FN2ñŠLÜNâj‘‰‘“Lœ"+Ÿ$ŸÈÄÊÉÄ'21r’‰Odbä çGdâpÇP‹LŒœdâ™Xù"™¸D&FN2q‰LŒœd♸œÄ1Ô"#_4Ô"#?4Ô"#'™ØD&VÞH&6‘‰•/’‰Kdbå›dâ™9ÉÄ-21r’‰[dâžt‡úŠL¬ü’L¼"#'™xE&î 'q µÈÄÈI&N‘‰•O’‰Odbådâ™9ÉÄ'2ñ›ÿÚãj‘‰•O’‰Sdbä$—ÈÄÊÉÄ%21r’‰Kdbä$—ÈÄ=á$Ž¡™ù¦¡™ù¥¡™Xy#™ØD&FN2±‰L¬|‘LÜ"+ß$·ÈÄÈI&n‘‰‘“LÜ"÷¢“¸†Zdbä$¯ÈÄÈI&^‘‰{ÁIC-21r’‰Sdbå“dâ™Xù#™øD&F2ñçÿ;Ô_¡öi4Ô"+Ÿ$§ÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰{ÁIC-21òCC-21r’‰Mdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dâÞt×P‹LŒœdâ™9ÉÄ'2qo8‰c¨E&V>I&N‘‰‘“L|"+$ŸÈÄÈ7 µÈÄoþkk¨E&V>I&.‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"÷†“8†Zdbä—†Zdbådb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄ}è$®¡™9ÉÄ+2±òG2ñ‰LÜNâê)2±òI2qŠLŒœdâ™Xù#™øD&F~h¨E&~ó_{\C-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbä$·ÈÄ}à$Ž¡™9ÉÄ&2±òF2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dâ¾t×P‹LŒœdâ™Xù#™øD&~ó_ïk¨E&FN2qŠLŒœdâ™Xù#™øD&F~i¨E&~ó_{\C-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbå›d♸/œÄ1Ô"+o$›ÈÄÈI&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2ñˆLÜNâj‘‰‘“L¼"+$ŸÈÄýà$Ž¡™9ÉÄ)2±òE2ñ‰L¬ü‘L|"#4Ô"¿ù¯=®¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ-2±òM2q‹LÜNâê&2±òF2±‰LŒœdb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbå‡dâ™x>t×P‹LŒœdâ™Xù#™øD&žœÄ1Ô"#'™¸D&V¾H&>‘‰•?’‰Odâ7ÿõl£†Zdb䛆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-2ñ›ÿÜãj‘‰‘“Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&žF'q µÈÄÈI&^‘‰•?’‰OdâipÇP‹LŒœdâ™Xù"™øD&Vþ@&þœà‡ºÑ³j‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰•o’‰[dbä$·ÈÄoþsc¨E&FN2±‰LŒœdb™9ÉÄ&21r’‰]dbå›dâ™9ÉÄ-2±òC2ñˆLŒœdâ™x:Ä5Ô"#'™øD&VþH&>‘‰§ÃIC-21r’‰Kdbå‹dâ™øÍÄ5Ô"#ï4Ô"#¿4Ô"+_$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄÈI&n‘‰§ÃIC-21r’‰Mdbä$›ÈÄÈI&6‘‰•w’‰]dbå›dâ™9ÉÄ#2±òC2ñˆLŒœdâ™xÄ5Ô"+$ŸÈÄÈI&>‘‰gÀIC-21r’‰Kdbå d⯗Ìÿ õ “¸†Zdb䃆Zdbä$›ÈÄÊÉÄ%21r’‰Kdbå›dâ™9ÉÄ-21r’‰[dâpÇP‹LŒœdb™9ÉÄ&21r’‰]dbådb™Xù&™¸E&V~H&‘‰‘“L<"#'™xD&žI'ñw¨ŸÈÄÊÉÄ'21r’‰Odâ™pÇP‹LŒœdâ™XùZ4Ô"Ϥ“¸†Zdb䓆Zdbådb™Xù"™¸D&FN2q‹L¬|“LÜ"#'™¸E&FN2q‹L<Nâj‘‰‘“Ll"#'™ØD&VÞI&v‘‰‘“Lì"+ß$ÈÄÊÉÄ#21r’‰Gdbä$Èijè$®¡™9ÉÄ'21r’‰OdâYpÇP‹LŒœdâ™XùÚ4Ô"Ï¢“¸†Zdbä$›ÈÄÊÉÄ&2±òE2q‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™xœÄ1Ô"#'™ØD&FN2±‹L¬¼“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL<›Nâj‘‰‘“L|"#™8>"φ“8†Zdbå‹dâ™ù¡¡™x6Ä5Ô"#'™ØD&VÞH&6‘‰•/’‰[dbå›dâ™9ÉÄ-21r’‰[dbä$·Èijá$Ž¡™9ÉÄ&2±òN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Gdâ9t×P‹LŒœdâ™øÍîq µÈÄÊ'ÉÄ%2±òE2q‰LŒüÒP‹L<‡Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰‘“L<"Ï“8†Zdbä$»ÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰çÒI\C-21r’‰Odâ7ÿ¹Ç1Ô"+_$—ÈÄÈI&.‘‰‘?j‘‰çÒI\C-21r’‰Mdbådb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2±òC2ñˆL<Nâj‘‰•w’‰]dbä$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xE&žG'q µÈÄÈI&>‘‰ßüçÇP‹L¬|‘L\"#'™¸D&V¾?4Ô"Ï£“¸†Zdbä$›ÈÄÊÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰Gdbå‡dâ™xœÄ5Ô]dbådb™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÊ/ÉÄ+2ñ~è$®¡™9ÉÄ'2ñ›ÿÜãj‘‰•/’‰Kdbä$·ÈÄÊw£¡™x?t×P‹L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2ñˆL¬üL<"¿ùÏ=Ž¡™9ÉÄ.21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&^‘‰•_’‰Wdâmt×P‹LŒœdâ™øÍîq µÈÄÊÉÄ%21r’‰[dbå»ÓP‹L¼NâïP7‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÊÉÄ#21r’‰Gdâ7ÿ¹Ç1Ô"#'™ØE&FN2±‹LŒœdb™9ÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠL¼Nâj‘‰‘ƒLü÷3áÏ¡þâ¾Ï¢¡™Xù"™¸D&FN2q‹L¬|j‘‰ßü×I\C-21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$ÈÄÊÉÄ#21r’‰GdâípÇP‹LŒœdb™9ÉÄ.21r’‰]dbåƒdâ™Xù!™xD&FN2ñŠL¬ü’L¼"#'™xE&ÞA'q µÈÄoþóÙF µÈÄÈ7 µÈÄÊÉÄ%21r’‰[dbå›db™øÍÄ5Ô"#'™ØD&FN2±‹L¬|“LÜ"#'™¸E&V~H&‘‰‘“L<"#'™xD&Þ'q µÈÄÈI&v‘‰‘“Lì"#'™8D&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdâtÿ?Ô¿^2ÿ3ÔžmÄP‹LŒüÐP‹L¬|‘L\"#'™¸E&V¾I&6‘‰wÒI\C-21r’‰Mdbådb™Xù&™¸E&FN2ñˆL¬üL<"#'™xD&FN2ñˆL¼Nâj‘‰‘“Lì"#'™ØE&V>H&‘‰‘“L"+?$¯ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄ»è$®¡™y§¡™ù¥¡™Xù"™¸D&FN2q‹L¬|“Ll"¸†Zdbä$»ÈÄÊ;ÉÄ.2±òM2q‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™xœÄ1Ô"#'™ØE&FN2qˆL¬|L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL¼›Nâj‘‰‘j‘‰‘“Ll"+_$—ÈÄÊ7ÉÄ-21r’‰MdâÝt×P‹LŒœdb™Xy'™ØE&V¾I&‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"8†Zdbä$»ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰÷ÐI\C-21òIC-2±òF2±‰L¬|‘LÜ"+ß$·ÈÄÈI&6‘‰÷ÐI\C-21r’‰]dbådb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#21r’‰Wdâ=pÇP‹LŒœdâ™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñ^:‰k¨E&F¾h¨E&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&6‘‰÷ÒI\C-21r’‰]dbådb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2±òK2ñŠL¼Nâj‘‰•’‰Cdbä$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™øD&ÞG'q µÈÄÈ7 µÈÄÊÉÄ&2±òM2q‹LŒœdâ™Xù!™ØD&ÞG'q µÈÄÈI&v‘‰•w’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$¯ÈÄÊ/ÉÄ+2ñ>8‰k¨‡ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰•?’‰OdâûÐI\C-21òCC-2±òF2±‰L¬|“LÜ"#'™xD&V~H&6‘‰ïC'q µÈÄÊ;ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$¯ÈÄÊ/ÉÄ+2ñ›ÿÜãj‘‰‘“L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™Xù#™øD&¾F'q µÈÄÈ/ µÈÄÊÉÄ&2±òM2q‹LŒœdâ™Xù!™ØD&¾F'ñw¨»ÈÄÊ;ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbå—dâ™9ÉÄ+2ñ›ÿÜãj‘‰‘“L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠL¬ü‘L|"#'™øD&¾N'q µÈÄÈI&6‘‰•7’‰Mdbå›dâ™9ÉÄ#2±òC2±‰Lüæ¿Nâj‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xE&V~I&^‘‰‘“L¼"_‡“8†Zdbä$‡ÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÊ/ÉÄ+21r’‰Odbådâ™9ÉÄ'2ñ :‰k¨E&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&‘‰•’‰]dâ7ÿu×P‹LŒœdb™9ÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™øœÄ1Ô"#'™8D&FN2qˆLŒœdâ™Xù$™8E&V~I&^‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰oÒIüê&2±òF2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üLì"ߤ“¸†Zdbä$»ÈÄÊÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™ø&œÄ1Ô"#'™8D&FN2qˆL¬|’Lœ"#'™8E&V~I&>‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰oÑI\C-21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™øÄ5Ô"#'™8D&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄ·à$Ž¡™9ÉÄ!21r’‰Sdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r’‰OdâÛt×P‹LŒœdb™9ÉÄ.2±òM2q‹L¬üL<"#'™ØE&¾M'q µÈÄÈI&‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñm8‰c¨E&FN2qˆL¬|’Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™øÄ5Ô"#'™ØD&VÞI&v‘‰•o’‰Gdbå‡dâ™9ÉÄ.2ñ:‰k¨E&FN2qˆL¬|L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&FN2ñ‰L|Nâj‘‰‘“Lœ"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&¾K'q µÈÄÈI&6‘‰•w’‰]dbå‡dâ™9ÉÄ#21r’‰]dâ»t×P‹LŒœdâ™Xù ™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL¬ü‘L|"ß…“8†Zdbå“dâ™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈA&îÈÄ÷è$®¡™9ÉÄ&2±òN2±‹L¬üL<"#'™xD&V~I&v‘‰ïÑI\C-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ'2±òG2ñ‰L|Nâê)2±òI2qŠLŒœdâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odâ7ÿ±Ç9Ô,¿Ñ†šebæ$ËÄÈ;ÉÄÎ21òC2ñ°LÌœdâe™ù%™ØY&Vþë$®¡f™ù ™8X&fN2q°LŒü’L¼,3'™xY&fN2ñ²LÌœdâc™ù#™øX&Vþsc¨Y&fN2q²LÌœdâd™˜9ÉÄÉ21s’‰“ebädâc™˜9ÉÄÇ21s‰ÿNð¿C]ù=Ρî2ÔNâê#CÝàÙF õ“¡þædb_2Ô Nâê)CÝè}] u“¡þæ—db¿2ÔNâïP u£g5Ô[†ºr’‰ãÊP78‰c¨— uƒ“8†úÈP78‰c¨Ÿ uƒß.b¨» uå$ß”¡npÇPwê'b¨§ uûûWâê-CÝþ<‰ÿê+C]9ÉÄõ‘¡npÇPêö÷IœCýd¨Ûß'qu“¡®¼ÓPêN'q õ•¡îðl£†ºd¨¿y'™Ø· u‡“8†zÉPwz_WCÝe¨¿ù%™ØŸ u§“¸†ºÉPwz¶QC}d¨+'™8ž u‡“8†zËPw8‰c¨¯ u‡“¸†ú}d¨;üvC=d¨+'™ø– u‡“8†zÈPwx8C½d¨ûß¿çPêþçIüÏP?êo¾H&®&CÝá$Ž¡¾2Ôý†úç¯Äÿuÿû$Ρî2Ô•ê)C=è$®¡~2ÔžmÄP7êÊI&ö#C=à$Ž¡Þ2ÔƒÞ×ÕPêo~I&Ž õ “¸†ºËPz¶QC}e¨+'™8?2ÔNâê#C=à$Ž¡~2ÔNâê&C=à·‹ê)C]9ÉÄ·e¨œÄ1ÔS†zÀÉê-C=þþ•8‡úÊP?Oâêõ‘¡þæ‹dâê2ÔNâê'C=þ>‰s¨› õøû$Ρ2Ô•Oê%C=é$þuÿÈPOx¶CÝe¨+'™Ø¯ õ„“8†úÈPOz_WC=e¨¿ù%™8š õ¤“¸†zÈPOz¶QCýd¨¿ù$™8› õ„“8†úÊPO8‰k¨ßG†zÂICÝe¨'üvC½d¨+'™øŽ õ„“8†zÉPOx8C}d¨çß¿çP?êùçIüÏP7êÊI&®!C=á$þõþ|d¨çß'qu—¡žŸÄ9ÔS†ºòEC½e¨Ä5ÔM†zÁ³ê!C]9ÉÄþd¨œÄ1ÔW†zÑûºê%CýÍ/ÉÄÑe¨Ä5ÔS†zѳïPÏ õ7Ÿ$g—¡^pÇP?ê'q u“¡^pÇPê¿]ÄPoêÊI&¾+C½à$Ž¡Þ2Ô NÄP_êõ÷¯Ä1Ôë#C½þ<‰ÿê.C]9ÉÄ5e¨œÄ1ÔM†zý}çPêõ÷IœC½d¨+ß4ÔG†zÓI\CÝe¨7<Ûˆ¡ž2Ô•“Lê 'q õ“¡Þô¾®†zËPWN2q êM'q õ’¡Þôl£†ºÉPóI2qê 'q õûÈPo8‰c¨» õ†“8†zÊPoøí"†úÈPWN2ñ=ê 'q õ‘¡Þðp"†úÉPï¿%Ρn2ÔûÏ“øŸ¡2Ô•“L\K†zÃICÝe¨÷ß'qõ”¡ÞŸÄ9Ô[†ºòCC}e¨Ä5ÔC†úÀ³ê%CýÍÉÄÑd¨œÄ5Ô÷#C}è}] õ‘¡®œdâ˜2Ô‡Nâê-C}èÙF u—¡þæ“dâœ2ÔNâê&C}à$Ž¡2ÔNâê%C}à·‹ê+C]9ÈÄõùÈP8‰c¨¯ õ‡5Ôë#C}þþ•8‡ºËPŸ?Oâ†zÊPWN2qmê'q õ¡>ŸÄ9ÔK†úü}çPêÊ/ õ“¡¾t×POê Ï6b¨· õ7$G—¡¾pÇP7êKïëj¨¯ uå$Ç’¡¾t×PêKÏ6j¨‡ õ7Ÿ$ç’¡¾pÇPwê 'q õ”¡¾pÇPoê ¿]ÄP?ê/1û|h¨› õ…“8†úÉP_x8CÝd¨ïß¿çPêûçIüÏP/êÊI&®#C}á$Ž¡ž2Ô÷ï“8‡zËPß¿Oâê+C]9ÉÄö‘¡~t×P/êÏ6b¨ õ7$Ç¡~pÇPwêGïëj¨Ÿ õ7$Ç–¡~t×P_êGÏ6j¨§ õ7Ÿ$ç–¡~pÇPê'q õ’¡~pÇPê¿]|‡úçÿ;Ô_¡öi4Ô]†úÁI\C½>2ÔNÄPwê÷÷¯Ä9ÔS†úýyÿ3Ô[†ºr’‰ëÊP?8‰c¨— õûû$Ρ>2Ôïï“8‡úÉPóF2±‰Ll:‰k¨E&FN2±‹L¬|L"+¿$¯ÈÄÈI&>‘‰•?’‰CdbûÐI\C-2±òI2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™ù£¡™øÍ×§ÓP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™9ÉÄ%2±}à$Ž¡™ù¡¡™9ÉÄ&2±òF2±‰LlNâj‘‰‘“Lì"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™ØÄß¡ž"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰ßü×á\C-21òAC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbä$·ÈÄÖà$Ž¡™ù¥¡™Xy#™ØD&FN2±‰LlNâj‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™øÍÄ5Ô"#'™8E&FN2qŠL¬ü‘L|"#'™øD&F2ñçÿ;Ô~»ˆ¡™ù¤¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2±òM2q‹LlNâj‘‰‘“Ll"+o$›ÈÄÈI&6‘‰mÐI\C-2±òA2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘Lœ"¿ù¯“¸†Zdbä$§ÈÄÈI&.‘‰•?’‰Odbä$ŸÈÄoþsc¨E&FÞi¨E&F¾h¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‹L¬|“LÜ"Û€“8†Zdbådb™9ÉÄ&21r’‰Mdb›t‡zˆL¬|L"#'™8D&V~I&^‘‰‘“L|"+$§ÈÄ6é$®¡™9ÉÄ)2±òE2q‰L¬ü‘L|"#™øë…Û?C=á$Ž¡™ù ¡™ù¦¡™Xù"™¸D&FN2q‰LŒœdâ™Xù&™¸E&FN2q‹LlNâê&2±òF2±‰LŒœdb™9ÉÄ&2±-:‰k¨E&FN2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘Lœ"Û¢“¸†Zdbä$—ÈÄÊÉÄ%2±òG2ñ‰Lüæ¿_‡Zdbä†Zdb䓆Zdb䇆Zdbå‹dâ™9ÉÄ%21r’‰[dbå›dâ™9ÉÄ-2ñ›ÿÚãj‘‰‘“Ll"#'™ØD&FN2±‰Ll›Nâj‘‰‘“L"#'™8E&V~I&^‘‰•?’‰Odbä$§ÈĶé$®¡™9ÉÄ%2±òE2q‰L¬üÑW¡ÈÄoþûÅñw¨E&F>h¨E&F¾h¨E&F~i¨E&V¾H&.‘‰‘“L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"¿ù¯=®¡™9ÉÄ&21r’‰Mdbä$›ÈÄvè$®¡™9ÉÄ!2±òI2qŠL¬ü’L|"+$ŸÈÄÈI&N‘‰íÐI\C-21r’‰Kdbå‹dâ™øÍ¡j‘‰‘wj‘‰‘Oj‘‰‘oj‘‰‘“Ll"+_$—ÈÄÈI&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰ßü××P‹LŒœdb™9ÉÄ&21r’‰Mdb»t×P‹LŒœdâ™Xù$™8E&VþH&>‘‰‘“L|"#'™8E&¶K'q µÈÄÈI&.‘‰•/’‰Kdb»pÇP‹LŒ|ÐP‹LŒ|ÑP‹LŒüÐP‹L¬¼‘Ll"+_$—ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰ßü××P‹LŒœdb™9ÉÄ&21r’‰]db{t×P‹LŒœdâ™Xù$™8E&VþH&>‘‰‘“L|"¿ùüLœ"+Ÿ$§ÈÄÈI&.‘‰•/’‰Kdb{pÇP‹LŒ|ÒP‹LŒ|ÓP‹LŒœdb™Xy#™ØD&V¾H&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"Ûƒ“8†Zdbä$›ÈÄÈI&6‘‰•w’‰]dbÿÐI\C-21r’‰Cdbå“dâ™Xù#™øD&F2ñçÿ3Ôß|~H&N‘‰•O’‰Sdbå‹dâ™9ÉÄ%2±à$Ž¡™ù¢¡™ù¡¡™9ÉÄ&2±òF2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™9ÉÄ-2±à$Ž¡™9ÉÄ&21r’‰]dbådb™ØÄ5Ô"#'™8D&V>I&N‘‰•?’‰Odb䋆Zdâ7Ÿ’‰Sdbå“dâ™Xù"™¸D&FN2q‰Lì Nâj‘‰‘oj‘‰‘_j‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰‘Ó7è#2±78‰c¨E&FN2±‰L¬¼“Lì"#'™ØE&öN'q µÈÄÈI&N‘‰•O’‰Sdbådâ™ù¦¡™øÍç‡dâ™Xù"™¸D&FN2q‰LŒœdâ™Ø;œÄ1Ô"#?4Ô"#'™ØD&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&V~èô™Ø;œÄ1Ô"#'™ØE&VÞI&v‘‰‘“Lì"û “¸†Zdbå“dâ™9ÉÄ)2±òG2ñ‰LŒüÐP‹LüæóC2q‰L¬|‘L\"#'™¸D&FN2q‹LìNâj‘‰‘_j‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“L<"+?ô úˆLìNâj‘‰•w’‰]dbä$»ÈÄÈI&v‘‰}ÒIüê)2±òI2qŠLŒœdâ™Xù#™øD&F~i¨E&~óù!™¸D&V¾H&.‘‰‘“L\"+ß$·ÈÄ>á$Ž¡™9ÉÄ&2±òF2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-2±òC2ñˆLŒœ¾A‘‰}ÂI\CÝE&VÞI&v‘‰‘“Lì"#'™ØE&öE'q µÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈ µÈÄo>?$—ÈÄÊÉÄ%21r’‰[dbå›dâ™ØœÄ1Ô"+o$›ÈÄÈI&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™xD&V~H&‘‰‘Ó7è#2ñ›ÿÚãj‘‰‘“Lì"#'™ØE&FN2±‹Lì›Nâj‘‰‘“Lœ"#'™¸D&VþH&>‘‰ßü×ûºj‘‰‘“L\"+_$—ÈÄÈI&n‘‰•o’‰[dbßp×_\™Xy#™ØD&FN2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™Xù!™xD&FN2ñˆLŒœ¾A‘‰ßü××P‹LŒœdb™9ÉÄ.21r’‰]db?t×P‹LŒœdâ™Xù"™¸D&Vþ@&þœà‡úÐûºj‘‰‘“L\"+_$—ÈÄÈI&n‘‰•o’‰[dâ7ÿ…>j¨E&FN2±‰LŒœdb™9ÉÄ&21r’‰]dbå›dâ™9ÉÄ#2±òC2ñˆLŒœdâ™9}ƒ>"¿ù¯=®¡™9ÉÄ.21r’‰]dbä$»ÈÄ~é$®¡™9ÉÄ)2±òE2q‰Lüæ¿Þ;×P‹LŒ¼ÓP‹LŒœdâ™Xù"™¸D&FN2q‹L¬|“LÜ"û…“8†Zdbä$›ÈÄÈI&6‘‰‘“Ll"+ï$»ÈÄÊ7ÉÄ-2±òC2ñˆLŒœdâ™9ÉÄ#21rú}D&~ó_{\C-21r’‰]dbä$»ÈÄÈI&‘‰ýÑI\C-21r’‰Sdbå‹dâ™ØœÄ1Ô"#4Ô"+o$—ÈÄÊÉÄ%21r’‰[dbå›dâ™ØœÄ1Ô"#'™ØD&FN2±‰LŒœdb™Xy'™ØE&V¾I&‘‰•’‰Gdbä$ÈÄÈI&‘‰‘Ó7è#2±?8‰c¨E&FN2±‹LŒœdb™Xù ™8D&ŽÄ5Ô"#'™8E&V¾H&.‘‰ã'q µÈÄÈI&6‘‰•7’‰Kdbå‹dâ™Xù&™¸E&FN2q‹L8‰c¨E&FN2±‰LŒœdb™9ÉÄ.2±òN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™9}ƒ>"ÇNâj‘‰‘“Lì"#'™8D&V>H&‘‰£ÑI\C-21r’‰Sdbå‹dâ™8œÄ1Ô"#'™ØD&VÞH&.‘‰•/’‰[dbå›dâ™9ÉÄ-2q48‰c¨E&FN2±‰LŒœdb™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™9}ƒ¾"Gƒ“8†Zdbä$»ÈÄÊÉÄ!21r’‰Cdâèt×P‹LŒœdâ™Xù"™¸D&Ž'q µÈÄÈI&6‘‰•7’‰Kdbå›dâ™9ÉÄ-21r’‰[dâèpÇP‹LŒœdb™9ÉÄ.2±òN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2±òKß ¯ÈÄÑá$Ž¡™9ÉÄ!2±òA2qˆLŒœdâ™8Ä5Ô"+_$—ÈÄÈI&.‘‰cÀIC-21r’‰Mdbådâ™Xù&™¸E&FN2q‹LŒœdâ™8œÄ1Ô"#'™ØD&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñŠL¬üÒ7è+2q 8‰c¨E&V>H&‘‰‘“L"#'™8D&ŽI'ñw¨—ÈÄÊÉÄ%21r’‰Kdâ˜pÇP‹LŒœdb™Xy#™¸E&V¾I&n‘‰‘“LÜ"+?$ÈÄ1á$Ž¡™9ÉÄ.2±òN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#2±òK2ñŠLŒœ¾A_‘‰cÂI\C=D&V>H&‘‰‘“L"#'™8D&ŽE'q µÈÄÈI&.‘‰‘“L\"Ç‚“8†Zdbä$›ÈÄÊÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&Ž'q µÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&^‘‰•_’‰Wdbäô úŠLüæ¿ö¸†Zdbä$‡ÈÄÈI&‘‰‘“L"Ǧ“¸†Zdbä$—ÈÄÈI&n‘‰cÃIC-2±òF2±‰LŒœdâ™Xù&™¸E&FN2ñˆL¬üL<"dž“¸þâºÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÊ/ÉÄ+21r’‰Wdbäô úŠLüæ¿ö¸†Zdbä$‡ÈÄÈI&‘‰‘“L"Ç¡“¸†Zdbä$—ÈÄÊ7ÉÄ-2q8‰k¨›ÈÄÊÉÄ&21r’‰[dbå›dâ™9ÉÄ#2±òC2ñˆLüæ¿ÐG µÈÄÈI&v‘‰‘“Lì"#'™ØE&FN2qˆL¬üL<"#'™xE&V~I&^‘‰‘“L¼"#§oÐWdâ7ÿµÇ5Ô"#'™8D&FN2qˆLŒœdâ™8.Ä5Ô"#'™¸D&V¾I&n‘‰ßü×{çj‘‰‘“Ll"#'™¸E&V¾I&n‘‰‘“L<"+?$ÈÄqá$Ž¡™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ!2±òC2ñˆL¬ü’L¼"#'™xE&FN2ñŠLŒœ¾A_‘‰ßü××P‹LŒœdâ™9ÉÄ!21r’‰Sdâxt×P‹LŒœdâ™Xù&™¸E&Ž'q µÈÄÈI&6‘‰•w’‰[dbå›dâ™9ÉÄ#2±òC2ñˆLNâj‘‰‘“Lì"#'™ØE&FN2qˆL¬|L"+?$¯ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈéô™8œÄ1Ô"#'™8D&FN2qˆL¬|’Lœ"ç‡Nâj‘‰‘“L\"+ß$·ÈÄù“8†Zdbä$»ÈÄÊ;ÉÄ-2±òM2q‹L¬üL<"#'™xD&ΜÄ1Ô"#'™ØE&FN2±‹LŒœdâ™Xù ™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠLŒœ¾A_‘‰ó'q µÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÙè$®¡™9ÉÄ%2±òM2q‹Lœ Nâj‘‰‘“Lì"+ï$·ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdâ™8œÄ1Ô"#'™ØE&FN2±‹L¬|L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠLŒœ¾A?‘‰³ÁIC-21r’‰Cdbå“dâ™9ÉÄ)2qv:‰k¨E&FN2q‹L¬|“LÜ"g‡“8†Zdbä$»ÈÄÊ;ÉÄ-2±òC2ñˆLŒœdâ™9ÉÄ#2qv8‰c¨E&FN2±‹LŒœdâ™Xù ™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™Xù£oÐOdâìpÇP‹LŒœdâ™Xù$™8E&FN2qŠLœƒNâj‘‰•o’‰[dbä$·ÈÄ9à$Ž¡™9ÉÄ.2±òN2ñˆL¬üL<"#'™xD&FN2ñŠLœNâj‘‰‘“Lì"+$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™øD&Vþèô™8œÄ1Ô"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"礓ø;Ô[dbå›dâ™9ÉÄ-2qN8‰c¨E&FN2±‹L¬¼“L<"+?$ÈÄÈI&‘‰•_’‰WdâœpÇP‹LŒœdâ™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™Xù#™øD&FNß ŸÈÄ9á$®¡ž"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"碓¸†Zdbä$·ÈÄÈI&n‘‰sÁIC-21r’‰]dbådâ™Xù!™xD&FN2ñŠL¬ü’L¼"ç‚“8†Zdbåƒdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$ŸÈÄÊÉÄ'21rúýD&~ó_{\C-21r’‰Sdbä$§ÈÄÈI&N‘‰sÓI\C-21r’‰[dbä$ÈĹá$Ž¡™Xy'™ØE&FN2ñˆL¬üL<"#'™xE&V~I&^‘‰sÃI\qCdbåƒdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbådâ™9ÉÄ'21rúýD&~ó_{\C-21r’‰Sdbä$§ÈÄÈI&N‘‰óÐI\C-21r’‰[dbå‡dâ™8œÄ5Ô]dbådb™9ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&~ó_裆Zdbä$‡ÈÄÈI&‘‰‘“L"#'™8E&V~I&^‘‰‘“L|"+$ŸÈÄÈI&>‘‰‘Ó7è'2ñ›ÿÚãj‘‰‘“Lœ"#'™8E&FN2qŠLœ—Nâj‘‰‘“LÜ"+?$ÈÄoþë½s µÈÄÈI&v‘‰‘“L<"+?$ÈÄÈI&^‘‰•_’‰Wdâ¼pÇP‹LŒœdâ™9ÉÄ!21r’‰Cdbå“dâ™Xù%™xE&VþH&>‘‰‘“L|"#'™øD&FNß ŸÈÄoþkk¨E&FN2qŠLŒœdâ™9ÉÄ%2q>:‰k¨E&FN2q‹L¬üL<"烓8†Zdbä$»ÈÄÊÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Î'q µÈÄÈI&‘‰‘“L"#'™8E&V>I&N‘‰•_’‰Odbådâ™9ÉÄ'21r’‰Odbäô ú‰LœNâj‘‰‘“Lœ"#'™8E&V¾H&.‘‰ëC'q µÈÄÈI&n‘‰•’‰GdâúÀIC-21r’‰Cdbåƒdâ™Xù!™xD&V~I&^‘‰‘“L¼"×Nâj‘‰‘“L"#'™8D&FN2qŠL¬|’Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&FNß ŸÈÄõ“8†Zdbä$§ÈÄÈI&.‘‰•/’‰Kdâjt×P‹LŒœdâ™Xù!™xD&®'q µÈÄÈI&‘‰•’‰Gdbå‡dâ™Xù%™xE&FN2ñŠL\ Nâj‘‰‘“L"#'™8D&V>I&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&Fß ÷GdâjpÇP‹LŒœdâ™Xù"™¸D&FN2q‰L\Nâj‘‰‘“L<"+?$ÈÄÕá$Ž¡™9ÉÄ!2±òA2ñˆL¬ü’L¼"#'™xE&FN2ñŠL\Nâj‘‰‘“L"#'™8E&V>I&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&~ó_{\C-2±òI2qŠLŒœdâ™Xù"™¸D&FN2q‰L\ƒNâj‘‰•’‰Gdbä$ÈÄ5à$Ž¡™9ÉÄ!2±òA2ñŠL¬ü’L¼"#'™xE&FN2ñ‰L\Nâj‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#™øk‚Ï_ÿø_{\C-2±òI2qŠL¬|‘L\"#'™¸D&FN2q‰L\“NâïP‘‰•’‰Gdbä$ÈÄ5á$Ž¡™9ÉÄ!2±òA2ñŠL¬ü’L¼"#'™xE&VþH&>‘‰kÂIC-21r’‰Sdbå“dâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odâ7ÿwÿj‘‰‘wj‘‰•O’‰Kdbå‹dâ™9ÉÄ%21r’‰KdâZt×P‹LŒœdâ™9ÉÄ#2q-8‰c¨E&FN2qˆL¬|L¼"+¿$¯ÈÄÈI&>‘‰•?’‰OdâZpÇP‹L¬|’Lœ"#'™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒdâÏ“øß¡^žÄÿ µÈÄÈ µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰kÓI\C-21r’‰Gdbä$¯Èĵá$Ž¡™Xù ™8D&FN2ñŠL¬ü’L¼"#'™øD&VþH&>‘‰kÃI\C=E&V>I&N‘‰‘“Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&~ó{œC-21òNC-21òIC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdâ:t×P‹LŒœdâ™Xù%™xE&®'q õ™Xù ™8D&FN2ñŠL¬ü’L¼"#'™øD&VþH&>‘‰ßüú¨¡™9ÉÄ)21r’‰Sdbä$§ÈÄÈI&.‘‰•?’‰Odbä Lð¡>ÿJœC-21òAC-21òEC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdâºt×P‹LŒœdâ™Xù%™xE&~ó_ïk¨E&FN2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"×…“8†Zdbä$§ÈÄÈI&N‘‰‘“Lœ"+_$—ÈÄÊÉÄ'2ñ›ÿü‰"†Zdbä†Zdb䓆Zdb䛆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$·ÈÄõè$®¡™9ÉÄ#2±òK2ñŠL\Nâj‘‰‘“L"+Ÿ$¯ÈÄÊ/ÉÄ+21r’‰Odbåd♸œÄ1Ô"#'™8E&FN2qŠLŒœdâ™Xù"™¸D&Vþ@&þœà‡úÁÉj‘‰‘j‘‰‘/j‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰•o’‰[dâþÐI\C-21r’‰Gdbå—d♸?pÇP‹LŒœdâ™Xù$™xE&V~I&^‘‰•?’‰Odbä$ŸÈÄý“8†Zdbä$§ÈÄÈI&N‘‰‘“L\"+_$—ÈÄoþsc¨E&FÞi¨E&F>i¨E&F¾i¨E&F~i¨E&V¾H&.‘‰‘“L\"#'™¸E&V¾I&n‘‰»ÑI\C-21r’‰Gdbå—d♸œÄ1Ô"#'™8E&V>I&^‘‰•_’‰Odbådâ™9ÉÄ'2q78‰c¨E&FN2qŠLŒœdâ™Xù"™¸D&FN2q‰Lüæ?÷8†Zdb䃆Zdb䋆Zdb䇆Zdbä$›ÈÄÊÉÄ%21r’‰Kdbå›dâ™9ÉÄ-2qw:‰k¨E&FN2ñŠL¬ü’L¼"w‡“8†Zdbä$§ÈÄÊ'ÉÄ+2±òG2ñ‰LŒœdâ™9ÉÄ'2qw8‰c¨E&FN2qŠLŒœdâ™Xù"™¸D&FN2q‰LÜNâj‘‰‘Oj‘‰‘oj‘‰‘_j‘‰•7’‰Mdbå‹dâ™9ÉÄ-2±òM2q‹LŒœd♸Ä5Ô"+¿$¯ÈÄÈI&^‘‰{ÀIC-21r’‰Sdbå“dâ™Xù#™øD&FN2ñ‰LŒdâúˆLÜNâj‘‰‘“Lœ"+_$—ÈÄÈI&.‘‰‘“L\"÷€“8†Zdb䋆Zdb䇆Zdbä$›ÈÄÊÉÄ&2±òE2q‰L¬|“LÜ"#'™¸E&FN2q‹LÜ“NâïP_‘‰•_’‰Wdbä$¯ÈÄ=á$Ž¡™9ÉÄ)2±òI2ñ‰L¬ü‘L|"#'™øD&~ó_{\C-2±òI2qŠLŒœdâ™Xù"™¸D&FN2q‰LŒœd♸'œÄ1Ô"#ß4Ô"#¿4Ô"+o$›ÈÄÈI&6‘‰•/’‰[dbå›dâ™9ÉÄ-21r’‰[dâ^t×P‹LŒœdâ™9ÉÄ+2q/8‰c¨E&FN2qŠL¬|’L|"+$ŸÈÄÈA&þœà‡ú+Ô>†Zdbå“dâ™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2q/8‰c¨E&F~h¨E&FN2±‰L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LÜ›Nâj‘‰‘“L¼"#'™øD&î 'q µÈÄÊ'ÉÄ)21r’‰Odbådâ™ù¦¡™øÍíq µÈÄÊ'ÉÄ%2±òE2q‰LŒœdâ™9ÉÄ%21r’‰KdâÞpÇP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœd♸Ä5Ô"#'™xE&VþH&>‘‰ûÀI\C=E&V>I&N‘‰‘“L|"+$ŸÈÄÈ µÈÄoþkk¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰LŒœd♸œÄ1Ô"#'™ØD&VÞH&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LÜ—Nâj‘‰‘“L¼"+$ŸÈÄoþë½s µÈÄÈI&N‘‰‘“L|"+$ŸÈÄÈ/ µÈÄoþkk¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L¬|“LÜ"÷…“8†Zdbådb™9ÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&‘‰ûÑI\C-21r’‰Wdbåd♸œÄ1Ô"#'™8E&V¾H&>‘‰•?’‰Odbä†Zdâ7ÿµÇ5Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸E&V¾I&n‘‰ûÁI\CÝD&VÞH&6‘‰‘“Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹L¬üL<"χNâj‘‰‘“L¼"+$ŸÈÄó“8†Zdbä$—ÈÄÊÉÄ'2±òG2ñ‰Lü濞mÔP‹LŒ|ÓP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™Xù&™¸E&~óŸ{C-21r’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“L<"+?$ÈÄÓè$®¡™9ÉÄ+2±òG2ñ‰L< Nâj‘‰‘“L\"+_$ŸÈÄÊÈÄŸüïP7z¶QC-21òCC-2±òE2q‰LŒœdâ™9ÉÄ%2±òM2q‹LŒœdâ™øÍîq µÈÄÈI&6‘‰‘“Ll"#'™ØD&FN2±‹L¬|“LÜ"#'™¸E&V~H&‘‰‘“L<"O§“¸†Zdbä$ŸÈÄÊÉÄ'2ñt8‰c¨E&FN2q‰L¬|‘L|"¿ù¯“¸†Zdbä†Zdbä—†Zdbå‹dâ™9ÉÄ%21r’‰[dbå›dâ™9ÉÄ-2ñt8‰c¨E&FN2±‰LŒœdb™9ÉÄ&2±òN2±‹L¬|“LÜ"#'™xD&V~H&‘‰‘“L<"Ï “¸†Zdbådâ™9ÉÄ'2ñ 8‰c¨E&FN2q‰L¬|Lüõ’ùŸ¡t×P‹LŒ|ÐP‹LŒœdb™Xù"™¸D&FN2q‰L¬|“LÜ"#'™¸E&FN2q‹L<Nâj‘‰‘“Ll"#'™ØD&FN2±‹L¬¼“Lì"+ß$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄ3é$þõ™Xù#™øD&FN2ñ‰L<Nâj‘‰‘“L\"+_‹†Zdâ™t×P‹LŒ|ÒP‹L¬¼‘Ll"+_$—ÈÄÈI&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰gÂIC-21r’‰Mdbä$›ÈÄÊ;ÉÄ.21r’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™xÄ5Ô"#'™øD&FN2ñ‰L< Nâj‘‰‘“L\"+_›†ZdâYt×P‹LŒœdb™Xy#™ØD&V¾H&.‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"Ï‚“8†Zdbä$›ÈÄÈI&v‘‰•w’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰gÓI\C-21r’‰Odbä çGdâÙpÇP‹L¬|‘L\"#?4Ô"Ϧ“¸†Zdbä$›ÈÄÊÉÄ&2±òE2q‹L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™x6œÄ1Ô"#'™ØD&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL<‡Nâj‘‰‘“L|"¿ùÏ=Ž¡™Xù$™¸D&V¾H&.‘‰‘_j‘‰çÐI\C-21r’‰Mdbådb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-21r’‰Gdâ9pÇP‹LŒœdb™Xy'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2ñ\:‰k¨E&FN2ñ‰Lüæ?÷8†Zdbå‹dâ™9ÉÄ%21òGC-2ñ\:‰k¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&V~H&‘‰çÂIC-2±òN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$¯ÈÄóè$®¡™9ÉÄ'2ñ›ÿÜãj‘‰•/’‰Kdbä$—ÈÄÊ÷‡†Zdâyt×P‹LŒœdb™Xy#™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2ñˆL¬üL<"σ“¸†º‹L¬¼“Lì"#'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™Xù%™xE&ÞÄ5Ô"#'™øD&~óŸ{C-2±òE2q‰LŒœdâ™Xùn4Ô"ï‡Nâj‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&‘‰•’‰Gdâ7ÿ¹Ç1Ô"#'™ØE&FN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ+2±òK2ñŠL¼Nâj‘‰‘“L|"¿ùÏ=Ž¡™Xù"™¸D&FN2q‹L¬|wj‘‰·ÑIüê&2±òF2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&FN2ñˆLüæ?÷8†Zdbä$»ÈÄÈI&v‘‰‘“Lì"#'™8D&V~H&‘‰‘“L<"+¿$¯ÈÄÈI&^‘‰·ÓI\C-21r‰ÿ~&ü9Ô_Ü÷Y4Ô"+_$—ÈÄÈI&n‘‰•ïAC-2ñ›ÿ:‰k¨E&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&FN2ñˆL¼Nâj‘‰‘“Lì"#'™ØE&FN2±‹L¬|L"+?$ÈÄÈI&^‘‰•_’‰Wdbä$¯ÈÄ;è$®¡™øÍ>Ûˆ¡™ù¦¡™Xù"™¸D&FN2q‹L¬|“Ll"¿ù¯“¸†Zdbä$›ÈÄÈI&v‘‰•o’‰[dbä$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄ;à$Ž¡™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ!2±òC2ñˆL¬ü’L¼"#'™xE&FN2ñŠL¼“Nâÿ‡ú×Kæ†z³j‘‰‘j‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ&2ñN:‰k¨E&FN2±‰L¬¼“Lì"+ß$·ÈÄÈI&‘‰•’‰Gdbä$ÈÄÈI&‘‰wÂIC-21r’‰]dbä$»ÈÄÊÉÄ!21r’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™xÄ5Ô"#ï4Ô"#¿4Ô"+_$—ÈÄÈI&n‘‰•o’‰Mdâ]t×P‹LŒœdb™Xy'™ØE&V¾I&n‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"ï‚“8†Zdbä$»ÈÄÈI&‘‰•’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰wÓI\C-21òAC-21r’‰Mdbå‹dâ™Xù&™¸E&FN2±‰L¼›Nâj‘‰‘“Lì"+ï$»ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰GdâÝpÇP‹LŒœdb™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñ:‰k¨E&F>i¨E&VÞH&6‘‰•/’‰[dbå›dâ™9ÉÄ&2ñ:‰k¨E&FN2±‹L¬¼“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&FN2ñŠL¼Nâj‘‰‘“L"+$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&ÞK'q µÈÄÈ µÈÄÊÉÄ&2±òM2q‹LŒœdâ™9ÉÄ&2ñ^:‰k¨E&FN2±‹L¬¼“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&V~I&^‘‰÷ÂIC-2±òA2qˆLŒœdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$ŸÈÄûè$®¡™ù¦¡™Xy#™ØD&V¾I&n‘‰‘“LÜ"+?$›ÈÄûè$®¡™9ÉÄ.2±òN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù%™xE&Þ'q õ™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+2±òG2ñ‰L|:‰k¨E&F~h¨E&VÞH&6‘‰•o’‰[dbä$ÈÄÊÉÄ&2ñ}è$®¡™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù%™xE&~óŸ{C-21r’‰Cdbä$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L|"+$ŸÈÄ×è$®¡™ù¥¡™Xy#™ØD&V¾I&n‘‰‘“L<"+?$›ÈÄ×è$þu™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆL¬ü’L¼"#'™xE&~óŸ{C-21r’‰Cdbä$‡ÈÄÈI&‘‰‘“Lœ"+¿$¯ÈÄÈI&^‘‰•?’‰Odbä$ŸÈÄ×é$®¡™9ÉÄ&2±òF2±‰L¬|“LÜ"#'™xD&V~H&6‘‰ßü×I\C-21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$¯ÈÄÊ/ÉÄ+21r’‰WdâëpÇP‹LŒœdâ™9ÉÄ!21r’‰Cdbå“dâ™Xù%™xE&FN2ñ‰L¬ü‘L|"#'™øD&¾A'q µÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ#2±òC2±‹Lüæ¿Nâj‘‰‘“Lì"#'™8D&V~H&‘‰‘“L<"+¿$¯ÈÄÈI&^‘‰‘“L¼"߀“8†Zdbä$‡ÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÊ/ÉÄ+2±òG2ñ‰LŒœdâ™9ÉÄ'2ñM:‰¿CÝD&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&‘‰•’‰]dâ›t×P‹LŒœdb™Xù ™8D&V~H&‘‰‘“L¼"+¿$¯ÈÄÈI&^‘‰‘“L¼"ß„“8†Zdbä$‡ÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÊ/ÉÄ'2±òG2ñ‰LŒœdâ™9ÉÄ'2ñ-:‰k¨E&FN2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üLì"ߢ“¸†Zdbä$‡ÈÄÊÉÄ!2±òC2ñˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™øœÄ1Ô"#'™8D&FN2qŠL¬|’Lœ"#'™8E&VþH&>‘‰‘“L|"#ÿ{¹‘lG‚ ªRñOê¯ØlæexW¥™ô¦¼‘‰‘“L|"#'™øD&¾C'q µÈÄÈI&6‘‰•w’‰]dbå›dâ™Xù!™xD&FN2±‹L|‡Nâj‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰‘“L|"ß“8†Zdbä$§ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰ïÒI\C-21r’‰Mdbådb™Xù!™xD&FN2ñˆLŒœdb™ø.Ä5Ô"#'™8D&V>H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"+$ŸÈÄwá$Ž¡™Xù$™8E&FN2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r‰çGdâ{t×P‹LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"+¿$»ÈÄ÷è$®¡™9ÉÄ!2±òA2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™Xù#™øD&¾'q õ™Xù$™8E&FN2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'2ñ“ÿÚãj–‰ŸèïI\CÍ21s’‰ebädbg™ù!™xX&fN2ñ²LŒü’Lì,+ÿs×P³LŒ|L,3'™8X&F~I&^–‰™“L¼,3'™xY&fN2ñ±LŒü‘L|,+ÿ½Ç1Ô,3'™8Y&fN2q²LÌœdâd™˜9ÉÄÉ21òG2ñ±LÌœdâc™˜9ÈÄ'øß¡®ü×çPwêF'q õ‘¡nðl#†úÉPòN2±/ê'q õ”¡nô¾®†ºÉPòK2±_êF'ñg¨Ç u£g5Ô[†ºr’‰ãÊP78‰c¨— uƒ“8†úÈP78‰c¨Ÿ uƒß.b¨» uå$ß”¡npÇPwê'b¨§ uûþ+qõ–¡n_Oâ†úÊPWN2qýÈP78‰c¨ uû~çP?êöý$Ρn2Ô•wê!CÝé$®¡¾2ÔžmÔP÷êOÞI&ö-CÝá$Ž¡^2ÔÞ×ÕPwêO~I&ö'CÝé$®¡n2ÔžmÔPêÊI&Ž'CÝá$Ž¡Þ2ÔNâê+CÝá$®¡~?2Ô~»ˆ¡2Ô•“L|K†ºÃIC=d¨;<œˆ¡^2Ôýû¯Ä9ÔG†º=‰ÿê'CýÉÉÄÕd¨;œÄ1ÔW†º?‰k¨ÿJüïP÷ï'qu—¡®|ÐPOêA'q õ“¡ðl#†ºÉPWN2±ê'q õ–¡ô¾®†zÈPòK2qüÈP:‰k¨» õ g5ÔW†ºr’‰óG†zÀIC}d¨œÄ1ÔO†zÀICÝd¨üvC=e¨+'™ø¶ õ€“8†zÊPx8C½e¨Ç÷_‰s¨¯ õøzçP¯êO¾H&®.C=à$Ž¡~2ÔãûIœCÝd¨Ç÷“8‡zÈPW>i¨— õ¤“ø3ÔýG†z³ê.C]9ÉÄ~e¨'œÄ1ÔG†zÒûºê)CýÉ/ÉÄÑd¨'Ä5ÔC†zÒ³ê'CýÉ'ÉÄÙd¨'œÄ1ÔW†zÂI\Cý~d¨'œÄ1Ô]†zÂo1ÔK†ºr’‰ïÈPO8‰c¨— õ„‡1ÔG†z~ÿ•8‡úÉPϯ'ñ?CÝd¨+'™¸† õ„“ø3ÔççG†z~?‰s¨» õü~çPOêÊ õ–¡^t×P7êÏ6b¨‡ uå$û“¡^pÇP_êEïëj¨— õ'¿$G—¡^t×POêEÏ6>C=d¨?ù$™8» õ‚“8†úÉP/8‰c¨› õ‚“8†zÈP/øí"†zËPWN2ñ]ê'q õ–¡^ðp"†úÊP¯ï¿ÇP¯êõõ$þg¨» uå$×”¡^pÇP7êõý$Ρ2ÔëûIœC½d¨+ß4ÔG†zÓI\CÝe¨7<Ûˆ¡ž2Ô•“L?2ÔNâê'C½é}] õ–¡®œdâ2Ô›Nâê%C½éÙF u“¡þä“dâ2ÔNâê÷#C½á$Ž¡î2ÔNâê)C½á·‹ê#C]9ÉÄ÷d¨7œÄ1ÔG†zÃÉê'C½¿ÿJœCÝd¨÷דøŸ¡2Ô•“L\K†zÃICÝe¨÷÷“8‡zÊPïï'qõ–¡®üÐP_êC'q õ¡>ðl#†zÉPòA2q4ê'q õý‘¡>ô¾®†úÈPWN2qLêC'q õ–¡>ôl£†ºËPòI2qNê'q u“¡>pÇPê'q õ’¡>ðÛE õ•¡®dâþù‘¡>pÇP_ê'j¨× õùþ+qu—¡>_Oâ†zÊPWN2qmê'q õ¡>ßOâê%C}¾ŸÄ9ÔG†ºòKCýd¨/Ä5ÔS†ú³ê-CýÉÉÄÑe¨/œÄ1ÔM†úÒûºê+C]9Éıd¨/Ä5ÔG†úÒ³ê!CýÉ'ÉĹd¨/œÄ1Ô]†úÂIC=e¨/œÄ1Ô[†úÂo1ÔO†úCÌ~~h¨› õ…“8†úÉP_x8CÝd¨ï÷_‰s¨‡ õýzÿ3ÔK†ºr’‰ëÈP_8‰c¨§ õý~çPoêûý$Ρ¾2Ô•“Ll?2ÔNâê%CýàÙF õ‘¡þäƒdâ2ÔNâê.Cýè}] õ“¡þädâØ2ÔNâê+CýèÙF õ”¡þä“dâÜ2ÔNâê!Cýà$Ž¡^2ÔNâê#Cýà·‹ÏPÿžà‡ú#Ô~ u—¡~p×P¯ê'b¨» õûþ+qõ”¡~_Oâ†zËPWN2q]ê'q õ’¡~ßOâê#Cý¾ŸÄ9ÔO†ú“7’‰Mdbû¡“¸†Zdbä$»ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™Xù#™8D&¶:‰k¨E&V>I&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#4Ô"?ùþé4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&FN2q‰Ll?pÇP‹LŒüÐP‹LŒœdb™Xy#™ØD&¶F'q µÈÄÈI&v‘‰•’‰Cdbå—dâ™9ÉÄ'2±òG2qˆLlNâÏPO‘‰•O’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄOþçp®¡™ù ¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%21r’‰[dbkpÇP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&¶N'q µÈÄÈI&‘‰•’‰Cdbå—dâ™9ÉÄ'2±òG2qˆLüäNâj‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#™ø{‚ÿê¿]ÄP‹LŒ|ÒP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™Xù&™¸E&¶'q µÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄ6è$®¡™Xù ™8D&FN2qˆL¬ü’L¼"#'™øD&VþH&N‘‰ŸüÏI\C-21r’‰Sdbä$—ÈÄÊÉÄ'21r’‰Odâ'ÿ½Ç1Ô"#ï4Ô"#_4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸E&V¾I&n‘‰mÀIC-2±òF2±‰LŒœdb™9ÉÄ&2±M:‰?C=D&V>H&‘‰‘“L"+¿$¯ÈÄÈI&>‘‰•?’‰Sdb›t×P‹LŒœdâ™Xù"™¸D&VþH&>‘‰‘ƒLüóÂퟡžpÇP‹LŒ|ÐP‹LŒ|ÓP‹L¬|‘L\"#'™¸D&FN2q‰L¬|“LÜ"#'™¸E&¶ 'q u™Xy#™ØD&FN2±‰LŒœdb™ØÄ5Ô"#'™8D&FN2qˆL¬ü’L¼"#'™øD&VþH&N‘‰mÑI\C-21r’‰Kdbå‹dâ™Xù#™øD&~ò¿/Ž?C-21òNC-21òIC-21òCC-2±òE2q‰LŒœdâ™9ÉÄ-2±òM2q‹LŒœdâ™øÉÿìq µÈÄÈI&6‘‰‘“Ll"#'™ØD&¶M'q µÈÄÈI&‘‰‘“Lœ"+¿$¯ÈÄÊÉÄ'21r’‰SdbÛt×P‹LŒœdâ™Xù"™¸D&Vþè«ÐÈÄOþ÷Åñg¨E&F>h¨E&F¾h¨E&F~i¨E&V¾H&.‘‰‘“L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"?ùŸ=®¡™9ÉÄ&21r’‰Mdbä$›ÈÄvè$®¡™9ÉÄ!2±òI2qŠL¬ü’L|"+$ŸÈÄÈI&N‘‰íÐI\C-21r’‰Kdbå‹dâ™øÉÿ j‘‰‘wj‘‰‘Oj‘‰‘oj‘‰‘“Ll"+_$—ÈÄÈI&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰ŸüÏ×P‹LŒœdb™9ÉÄ&21r’‰Mdb»t×P‹LŒœdâ™Xù$™8E&VþH&>‘‰‘“L|"#'™8E&¶K'q µÈÄÈI&.‘‰•/’‰Kdb»pÇP‹LŒ|ÐP‹LŒ|ÑP‹LŒüÐP‹L¬¼‘Ll"+_$—ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰ŸüÏ×P‹LŒœdb™9ÉÄ&21r’‰]db{t×P‹LŒœdâ™Xù$™8E&VþH&>‘‰‘“L|"?ùú!™8E&V>I&N‘‰‘“L\"+_$—ÈÄöà$Ž¡™ù¤¡™ù¦¡™9ÉÄ&2±òF2±‰L¬|‘LÜ"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&¶'q µÈÄÈI&6‘‰‘“Ll"+ï$»ÈÄþC'q µÈÄÈI&‘‰•O’‰Sdbådâ™9ÈÄßüÏPòõC2qŠL¬|’Lœ"+_$—ÈÄÈI&.‘‰ýNâj‘‰‘/j‘‰‘j‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"ûœÄ1Ô"#'™ØD&FN2±‹L¬¼“Lì"{£“¸†Zdbä$‡ÈÄÊ'ÉÄ)2±òG2ñ‰LŒ|ÑP‹Lüäë‡dâ™Xù$™¸D&V¾H&.‘‰‘“L\"{ƒ“8†Zdb䛆Zdbä—†Zdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dbäô úˆLì Nâj‘‰‘“Ll"+ï$»ÈÄÈI&v‘‰½ÓI\C-21r’‰Sdbå“dâ™Xù#™øD&F¾i¨E&~òõC2qŠL¬|‘L\"#'™¸D&FN2q‰LìNâj‘‰‘j‘‰‘“Ll"+o$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"+?ô úˆLìNâj‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰}ÐI\C-2±òI2qŠLŒœdâ™Xù#™øD&F~h¨E&~òõC2q‰L¬|‘L\"#'™¸D&FN2q‹LìNâj‘‰‘_j‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“L<"+?ô úˆLìNâj‘‰•w’‰]dbä$»ÈÄÈI&v‘‰}ÒIüê)2±òI2qŠLŒœdâ™Xù#™øD&F~i¨E&~òõC2q‰L¬|‘L\"#'™¸D&V¾I&n‘‰}ÂIC-21r’‰Mdbådb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbå‡dâ™9}ƒ>"û„“¸†º‹L¬¼“Lì"#'™ØE&FN2±‹Lì‹Nâj‘‰‘“Lœ"#'™8E&VþH&>‘‰‘?j‘‰Ÿ|ýL\"+_$—ÈÄÈI&n‘‰•o’‰[db_pÇP‹L¬¼‘Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&FNß ÈÄOþgk¨E&FN2±‹LŒœdb™9ÉÄ.2±o:‰k¨E&FN2qŠLŒœdâ™Xù#™øD&~ò?ïëj¨E&FN2q‰L¬|‘L\"#'™¸E&V¾I&n‘‰}ÃI\qMdbådb™9ÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbå‡dâ™9ÉÄ#21rú}D&~ò?{\C-21r’‰]dbä$»ÈÄÈI&v‘‰ýÐI\C-21r’‰Sdbå‹dâ™Xù™ø{‚ÿêCïëj¨E&FN2q‰L¬|‘L\"#'™¸E&V¾I&n‘‰Ÿüú¨¡™9ÉÄ&21r’‰Mdbä$›ÈÄÈI&v‘‰•o’‰[dbä$ÈÄÊÉÄ#21r’‰Gdbäô úˆLüäö¸†Zdbä$»ÈÄÈI&v‘‰‘“Lì"û¥“¸†Zdbä$§ÈÄÊÉÄ%2ñ“ÿyï\C-21òNC-21r’‰Kdbå‹dâ™9ÉÄ-2±òM2q‹LìNâj‘‰‘“Ll"#'™ØD&FN2±‰L¬¼“Lì"+ß$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈéô™øÉÿìq µÈÄÈI&v‘‰‘“Lì"#'™8D&öG'q µÈÄÈI&N‘‰•/’‰KdbpÇP‹LŒ|ÐP‹L¬¼‘L\"+_$—ÈÄÈI&n‘‰•o’‰[dbpÇP‹LŒœdb™9ÉÄ&21r’‰]dbådb™Xù&™xD&V~H&‘‰‘“L<"#'™xD&FNß ÈÄþà$Ž¡™9ÉÄ.21r’‰]dbåƒdâ™8~è$®¡™9ÉÄ)2±òE2q‰L?pÇP‹LŒœdb™Xy#™¸D&V¾H&.‘‰•o’‰[dbä$·ÈÄñ'q µÈÄÈI&6‘‰‘“Ll"#'™ØE&VÞI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"#§oÐGdâø“8†Zdbä$»ÈÄÈI&‘‰•’‰Cdâht×P‹LŒœdâ™Xù"™¸D&Ž'q µÈÄÈI&6‘‰•7’‰Kdbå‹dâ™Xù&™¸E&FN2q‹L Nâj‘‰‘“Ll"#'™ØD&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&FNß ¯ÈÄÑà$Ž¡™9ÉÄ.2±òA2qˆLŒœdâ™8:Ä5Ô"#'™¸D&V¾H&.‘‰£ÃIC-21r’‰Mdbådâ™Xù&™¸E&FN2q‹LŒœdâ™8:œÄ1Ô"#'™ØD&FN2±‹L¬¼“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL¬üÒ7è+2qt8‰c¨E&FN2qˆL¬|L"#'™8D&ŽA'q µÈÄÊÉÄ%21r’‰KdâpÇP‹LŒœdb™Xy#™¸E&V¾I&n‘‰‘“LÜ"#'™xD&Ž'q µÈÄÈI&6‘‰•w’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L¼"+¿ô úŠLNâj‘‰•’‰Cdbä$‡ÈÄÈI&‘‰cÒIüê%2±òE2q‰LŒœdâ™8&œÄ1Ô"#'™ØD&VÞH&n‘‰•o’‰[dbä$·ÈÄÊÉÄ#2qL8‰c¨E&FN2±‹L¬¼“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆL¬ü’L¼"#§oÐWdâ˜p×P‘‰•’‰Cdbä$‡ÈÄÈI&‘‰cÑI\C-21r’‰Kdbä$—Èıà$Ž¡™9ÉÄ&2±òF2q‹L¬|“LÜ"#'™xD&V~H&‘‰cÁIC-2±òN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Wdbå—dâ™9}ƒ¾"?ùŸ=®¡™9ÉÄ!21r’‰Cdbä$‡Èıé$®¡™9ÉÄ%21r’‰[dâØpÇP‹L¬¼‘Ll"#'™¸E&V¾I&n‘‰‘“L<"+?$Èıá$®¿¸.2±òN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#2±òK2ñŠLŒœdâ™9}ƒ¾"?ùŸ=®¡™9ÉÄ!21r’‰Cdbä$‡ÈÄqè$®¡™9ÉÄ%2±òM2q‹LNâê&2±òF2±‰LŒœdâ™Xù&™¸E&FN2ñˆL¬üL<"?ùôQC-21r’‰]dbä$»ÈÄÈI&v‘‰‘“L"+?$ÈÄÈI&^‘‰•_’‰Wdbä$¯ÈÄÈéô™øÉÿìq µÈÄÈI&‘‰‘“L"#'™8D&ŽK'q µÈÄÈI&.‘‰•o’‰[dâ'ÿóÞ¹†Zdbä$›ÈÄÈI&n‘‰•o’‰[dbä$ÈÄÊÉÄ#2q\8‰c¨E&FN2±‹LŒœdb™9ÉÄ.2±òA2qˆL¬üL<"+¿$¯ÈÄÈI&^‘‰‘“L¼"#§oÐWdâ'ÿ³Ç5Ô"#'™8D&FN2qˆLŒœdâ™8Ä5Ô"#'™¸D&V¾I&n‘‰ãÁIC-21r’‰Mdbådâ™Xù&™¸E&FN2ñˆL¬üL<"ǃ“8†Zdbä$»ÈÄÈI&v‘‰‘“L"+$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ+21rú}E&Ž'q µÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄùC'q µÈÄÈI&.‘‰•o’‰[dâü“8†Zdbä$»ÈÄÊ;ÉÄ-2±òM2q‹L¬üL<"#'™xD&Î8‰c¨E&FN2±‹LŒœdb™9ÉÄ!2±òA2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™9}ƒ¾"çœÄ1Ô"#'™8D&FN2qŠL¬|’Lœ"g£“¸†Zdbä$—ÈÄÊ7ÉÄ-2q68‰c¨E&FN2±‹L¬¼“LÜ"+ß$ÈÄÊÉÄ#21r’‰GdâlpÇP‹LŒœdb™9ÉÄ.2±òA2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+21rúýD&Î'q µÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÙé$®¡™9ÉÄ-2±òM2q‹LœNâj‘‰‘“Lì"+ï$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÙá$Ž¡™9ÉÄ.21r’‰Cdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbå¾A?‘‰³ÃIC-21r’‰Sdbå“dâ™9ÉÄ)2q:‰k¨E&V¾I&n‘‰‘“LÜ"瀓8†Zdbä$»ÈÄÊ;ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ+2q8‰c¨E&FN2±‹L¬|L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™Xù£oÐOdâpÇP‹L¬|’Lœ"#'™8E&FN2qŠLœ“NâÏPo‘‰•o’‰[dbä$·ÈÄ9á$Ž¡™9ÉÄ.2±òN2ñˆL¬üL<"#'™xD&V~I&^‘‰sÂIC-21r’‰Cdbåƒdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbådâ™9}ƒ~"ç„“¸†zŠL¬|’Lœ"#'™8E&FN2qŠLœ‹Nâj‘‰‘“LÜ"#'™¸E&Î'q µÈÄÈI&v‘‰•w’‰Gdbå‡dâ™9ÉÄ+2±òK2ñŠLœ Nâj‘‰•’‰Cdbä$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L|"+$ŸÈÄÈéô™øÉÿìq µÈÄÈI&N‘‰‘“Lœ"#'™8E&ÎM'q µÈÄÈI&n‘‰‘“L<"熓8†Zdbådb™9ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Î 'qýÅ ‘‰•’‰Cdbä$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰•?’‰Odbä$ŸÈÄÈéô™øÉÿìq µÈÄÈI&N‘‰‘“Lœ"#'™8E&ÎC'q µÈÄÈI&n‘‰•’‰Gd⑉•?’‰Odbä$ŸÈÄÈI&>‘‰‘Ó7è'2q>8‰c¨E&FN2qŠLŒœdâ™Xù"™¸D&®:‰k¨E&FN2q‹L¬üL<"לÄ1Ô"#'™8D&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+2qýÀIC-21r’‰Cdbä$‡ÈÄÈI&N‘‰•O’‰Sdbådâ™9ÉÄ'21r’‰Odbä$ŸÈÄÈéô™¸~à$Ž¡™9ÉÄ)21r’‰Kdbå‹d♸Ä5Ô"#'™¸E&V~H&‘‰«ÁIC-21r’‰Cdbåƒdâ™Xù!™xE&V~I&^‘‰‘“L¼"Wƒ“8†Zdbä$‡ÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰‘Ã7èó#2q58‰c¨E&FN2qŠL¬|‘L\"#'™¸D&®N'q µÈÄÈI&‘‰•’‰GdâêpÇP‹LŒœdâ™Xù ™xD&V~I&^‘‰‘“L¼"#'™xE&®'q µÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"?ùŸ=®¡™Xù$™8E&FN2q‰L¬|‘L\"#'™¸D&®A'q µÈÄÊÉÄ#21r’‰GdâpÇP‹LŒœdâ™Xù ™xE&V~I&^‘‰‘“L¼"#'™øD&®'q µÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘ƒLü3ÁçÛ?þÏ×P‹L¬|’Lœ"+_$—ÈÄÈI&.‘‰‘“L\"פ“ø3ÔGdbå‡dâ™9ÉÄ#2qM8‰c¨E&FN2qˆL¬|L¼"+¿$¯ÈÄÈI&^‘‰•?’‰OdâšpÇP‹LŒœdâ™Xù$™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™øÉÿÝã†Zdbä†Zdbå“dâ™Xù"™¸D&FN2q‰LŒœd♸Ä5Ô"#'™xD&FN2ñˆL\ Nâj‘‰‘“L"+$¯ÈÄÊ/ÉÄ+21r’‰Odbåd♸œÄ1Ô"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#™øû$þw¨×דøŸ¡™ù ¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2qm:‰k¨E&FN2ñˆLŒœd♸6œÄ1Ô"+$‡ÈÄÈI&^‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'2qm8‰k¨§ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄOþks¨E&FÞi¨E&F>i¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L\‡Nâj‘‰‘“L<"+¿$¯ÈÄuà$®¡"+$‡ÈÄÈI&^‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'2ñ“ÿA5Ô"#'™8E&FN2qŠLŒœdâ™9ÉÄ%2±òG2ñ‰LŒd⯠þ5Ôçû¯Ä9Ô"#4Ô"#_4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&®K'q µÈÄÈI&‘‰•_’‰Wdâ'ÿóÞ¹†Zdbä$‡ÈÄÈI&^‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'2q]8‰c¨E&FN2qŠLŒœdâ™9ÉÄ)2±òE2q‰L¬ü‘L|"?ùïŸ(b¨E&FÞi¨E&F>i¨E&F¾i¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‹L\Nâj‘‰‘“L<"+¿$¯ÈÄõà$Ž¡™9ÉÄ!2±òI2ñŠL¬ü’L¼"#'™øD&VþH&>‘‰ëÁIC-21r’‰Sdbä$§ÈÄÈI&.‘‰•/’‰Kdbådâï þw¨<œˆ¡™ù ¡™ù¢¡™ù¡¡™Xù"™¸D&FN2q‰LŒœdâ™Xù&™¸E&î:‰k¨E&FN2ñˆL¬ü’L¼"÷œÄ1Ô"#'™8E&V>I&^‘‰•_’‰Wdbådâ™9ÉÄ'2qÿÀIC-21r’‰Sdbä$§ÈÄÈI&.‘‰•/’‰Kdâ'ÿ½Ç1Ô"#ï4Ô"#Ÿ4Ô"#ß4Ô"#¿4Ô"+_$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄÝè$®¡™9ÉÄ#2±òK2ñŠLÜ Nâj‘‰‘“Lœ"+Ÿ$¯ÈÄÊ/ÉÄ'2±òG2ñ‰LŒœd♸œÄ1Ô"#'™8E&FN2qŠL¬|‘L\"#'™¸D&~òß{C-21òAC-21òEC-21òCC-21r’‰Mdbå‹dâ™9ÉÄ%2±òM2q‹LŒœd♸;Ä5Ô"#'™xE&V~I&^‘‰»ÃIC-21r’‰Sdbå“dâ™Xù#™øD&FN2ñ‰LŒœd♸;œÄ1Ô"#'™8E&FN2q‰L¬|‘L\"#'™¸D&î'q µÈÄÈ' µÈÄÈ7 µÈÄÈ/ µÈÄÊÉÄ&2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹L܃Nâj‘‰•_’‰Wdbä$¯ÈÄ=à$Ž¡™9ÉÄ)2±òI2ñ‰L¬ü‘L|"#'™øD&F2qÿˆLÜNâj‘‰‘“Lœ"+_$—ÈÄÈI&.‘‰‘“L\"÷€“8†Zdb䋆Zdb䇆Zdbä$›ÈÄÊÉÄ&2±òE2q‰L¬|“LÜ"#'™¸E&FN2q‹LÜ“NâÏP_‘‰•_’‰Wdbä$¯ÈÄ=á$Ž¡™9ÉÄ)2±òI2ñ‰L¬ü‘L|"#'™øD&~ò?{\C-2±òI2qŠLŒœdâ™Xù"™¸D&FN2q‰LŒœd♸'œÄ1Ô"#ß4Ô"#¿4Ô"+o$›ÈÄÈI&6‘‰•/’‰[dbå›dâ™9ÉÄ-21r’‰[dâ^t×P‹LŒœdâ™9ÉÄ+2q/8‰c¨E&FN2qŠL¬|’L|"+$ŸÈÄÈA&þžà‡ú#Ô~ µÈÄÊ'ÉÄ)2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdâ^pÇP‹LŒüÐP‹LŒœdb™Xy#™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœd♸7Ä5Ô"#'™xE&FN2ñ‰LÜNâj‘‰•O’‰Sdbä$ŸÈÄÊÉÄ'21òMC-2ñ“ÿÙãj‘‰•O’‰Kdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈĽá$Ž¡™ù¥¡™Xy#™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2q:‰k¨E&FN2ñŠL¬ü‘L|"÷“¸†zŠL¬|’Lœ"#'™øD&VþH&>‘‰‘j‘‰ŸüÏ×P‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™9ÉÄ-2q8‰c¨E&FN2±‰L¬¼‘Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœd♸/Ä5Ô"#'™xE&VþH&>‘‰ŸüÏ{çj‘‰‘“Lœ"#'™øD&VþH&>‘‰‘_j‘‰ŸüÏ×P‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™Xù&™¸E&î 'q µÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“L<"÷£“¸†Zdbä$¯ÈÄÊÉÄ'2q?8‰c¨E&FN2qŠL¬|‘L|"+$ŸÈÄÈ µÈÄOþgk¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‹L¬|“LÜ"÷ƒ“¸†º‰L¬¼‘Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&ž:‰k¨E&FN2ñŠL¬ü‘L|"ÏœÄ1Ô"#'™¸D&V¾H&>‘‰•?’‰Odâ'ÿól£†Zdb䛆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-2ñ“ÿÞãj‘‰‘“Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&žF'q µÈÄÈI&^‘‰•?’‰OdâipÇP‹LŒœdâ™Xù"™øD&Vþ@&þžà‡ºÑ³j‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰•o’‰[dbä$·ÈÄOþ{c¨E&FN2±‰LŒœdb™9ÉÄ&21r’‰]dbå›dâ™9ÉÄ-2±òC2ñˆLŒœdâ™x:Ä5Ô"#'™øD&VþH&>‘‰§ÃIC-21r’‰Kdbå‹dâ™øÉÿœÄ5Ô"#ï4Ô"#¿4Ô"+_$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄÈI&n‘‰§ÃIC-21r’‰Mdbä$›ÈÄÈI&6‘‰•w’‰]dbå›dâ™9ÉÄ#2±òC2ñˆLŒœdâ™xÄ5Ô"+$ŸÈÄÈI&>‘‰gÀIC-21r’‰Kdbå d⟗Ìÿ õ “¸†Zdb䃆Zdbä$›ÈÄÊÉÄ%21r’‰Kdbå›dâ™9ÉÄ-21r’‰[dâpÇP‹LŒœdb™9ÉÄ&21r’‰]dbådb™Xù&™¸E&V~H&‘‰‘“L<"#'™xD&žI'ñg¨ŸÈÄÊÉÄ'21r’‰Odâ™pÇP‹LŒœdâ™XùZ4Ô"Ϥ“¸†Zdb䓆Zdbådb™Xù"™¸D&FN2q‹L¬|“LÜ"#'™¸E&FN2q‹L<Nâj‘‰‘“Ll"#'™ØD&VÞI&v‘‰‘“Lì"+ß$ÈÄÊÉÄ#21r’‰Gdbä$Èijè$®¡™9ÉÄ'21r’‰OdâYpÇP‹LŒœdâ™XùÚ4Ô"Ï¢“¸†Zdbä$›ÈÄÊÉÄ&2±òE2q‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™xœÄ1Ô"#'™ØD&FN2±‹L¬¼“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL<›Nâj‘‰‘“L|"#™¸~D&ž 'q µÈÄÊÉÄ%21òCC-2ñl:‰k¨E&FN2±‰L¬¼‘Ll"+_$·ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰gÃIC-21r’‰Mdbådb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄsè$®¡™9ÉÄ'2ñ“ÿÞãj‘‰•O’‰Kdbå‹dâ™ù¥¡™xÄ5Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"#'™xD&ž'q µÈÄÈI&v‘‰•w’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"Ï¥“¸†Zdbä$ŸÈÄOþ{c¨E&V¾H&.‘‰‘“L\"#4Ô"Ï¥“¸†Zdbä$›ÈÄÊÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dbå‡dâ™x.œÄ1Ô"+ï$»ÈÄÈI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñŠL‘‰Ÿü÷ÇP‹L¬|‘L\"#'™¸E&V¾ µÈÄûC'q µÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$ÈÄÊÉÄ#2ñ“ÿÞãj‘‰‘“Lì"#'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™Xù%™xE&ÞF'q µÈÄÈI&>‘‰Ÿü÷ÇP‹L¬|‘L\"#'™¸E&V¾; µÈÄÛè$þ u™Xy#™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹L¬üL<"#'™xD&~òß{C-21r’‰]dbä$»ÈÄÈI&v‘‰‘“L"+?$ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÛé$®¡™9ÈÄ?þêîûY4Ô"+_$—ÈÄÈI&n‘‰•ïAC-2ñ“ÿ9‰k¨E&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&FN2ñˆL¼Nâj‘‰‘“Lì"#'™ØE&FN2±‹L¬|L"+?$ÈÄÈI&^‘‰•_’‰Wdbä$¯ÈÄ;è$®¡™øÉ?Ûˆ¡™ù¦¡™Xù"™¸D&FN2q‹L¬|“Ll"?ùŸ“¸†Zdbä$›ÈÄÈI&v‘‰•o’‰[dbä$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄ;à$Ž¡™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ!2±òC2ñˆL¬ü’L¼"#'™xE&FN2ñŠL¼“Nâÿ†úÏKæ†z³j‘‰‘j‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ&2ñN:‰k¨E&FN2±‰L¬¼“Lì"+ß$·ÈÄÈI&‘‰•’‰Gdbä$ÈÄÈI&‘‰wÂIC-21r’‰]dbä$»ÈÄÊÉÄ!21r’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™xÄ5Ô"#ï4Ô"#¿4Ô"+_$—ÈÄÈI&n‘‰•o’‰Mdâ]t×P‹LŒœdb™Xy'™ØE&V¾I&n‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"ï‚“8†Zdbä$»ÈÄÈI&‘‰•’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰wÓI\C-21òAC-21r’‰Mdbå‹dâ™Xù&™¸E&FN2±‰L¼›Nâj‘‰‘“Lì"+ï$»ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰GdâÝpÇP‹LŒœdb™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñ:‰k¨E&F>i¨E&VÞH&6‘‰•/’‰[dbå›dâ™9ÉÄ&2ñ:‰k¨E&FN2±‹L¬¼“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&FN2ñŠL¼Nâj‘‰‘“L"+$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&ÞK'q µÈÄÈ µÈÄÊÉÄ&2±òM2q‹LŒœdâ™9ÉÄ&2ñ^:‰k¨E&FN2±‹L¬¼“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&V~I&^‘‰÷ÂIC-2±òA2qˆLŒœdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$ŸÈÄûè$®¡™ù¦¡™Xy#™ØD&V¾I&n‘‰‘“LÜ"+?$›ÈÄûè$®¡™9ÉÄ.2±òN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù%™xE&Þ'q õ™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+2±òG2ñ‰L|?t×P‹LŒüÐP‹L¬¼‘Ll"+ß$·ÈÄÈI&‘‰•’‰Mdâû¡“¸†Zdbådb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Wdbå—dâ™øÉïq µÈÄÈI&‘‰‘“L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñ‰L¬ü‘L|"_£“¸†Zdbä—†Zdbådb™Xù&™¸E&FN2ñˆL¬üLl"_£“ø3Ô]dbådb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#2±òK2ñŠLŒœdâ™øÉïq µÈÄÈI&‘‰‘“L"#'™8D&FN2qŠL¬ü’L¼"#'™xE&VþH&>‘‰‘“L|"_§“¸†Zdbä$›ÈÄÊÉÄ&2±òM2q‹LŒœdâ™Xù!™ØD&~ò?'q µÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L¼"+¿$¯ÈÄÈI&^‘‰¯ÃIC-21r’‰Cdbä$‡ÈÄÈI&‘‰•O’‰Sdbå—dâ™9ÉÄ'2±òG2ñ‰LŒœdâ™øÄ5Ô"+o$›ÈÄÈI&6‘‰•o’‰[dbä$ÈÄÊÉÄ.2ñ“ÿ9‰k¨E&FN2±‹LŒœdâ™Xù!™xD&FN2ñˆL¬ü’L¼"#'™xE&FN2ñŠL|Nâj‘‰‘“L"#'™8D&FN2qŠL¬|’Lœ"+¿$¯ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄ7é$þ u™Xy#™ØD&FN2±‰L¬|“LÜ"#'™xD&V~H&v‘‰oÒI\C-21r’‰]dbåƒdâ™Xù!™xD&FN2ñŠL¬ü’L¼"#'™xE&FN2ñŠL|Nâj‘‰‘“L"#'™8D&V>I&N‘‰‘“Lœ"+¿$ŸÈÄÊÉÄ'21r’‰Odbä$ŸÈÄ·è$®¡™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ#2±òC2±‹L|‹Nâj‘‰‘“L"+$‡ÈÄÊÉÄ#2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdâ[pÇP‹LŒœdâ™9ÉÄ)2±òI2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'2ñm:‰k¨E&FN2±‰LŒœdb™Xù&™¸E&V~H&‘‰‘“Lì"ߦ“¸†Zdbä$‡ÈÄÊÉÄ!2±òC2ñŠL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™ø6œÄ1Ô"#'™8D&V>I&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰L|‡Nâj‘‰‘“Ll"+ï$»ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdb™øÄ5Ô"#'™8D&V>H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"#'™øD&¾'q µÈÄÈI&N‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"ߥ“¸†Zdbä$›ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ.2ñ]:‰k¨E&FN2qˆL¬|L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&VþH&>‘‰ïÂIC-2±òI2qŠLŒœdâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä ïÈÄ÷è$®¡™9ÉÄ&2±òN2±‹L¬üL<"#'™xD&V~I&v‘‰ïÑI\C-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ'2±òG2ñ‰L|Nâê)2±òI2qŠLŒœdâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odâ'ÿµÇ9Ô,?Ñß“¸†šebæ$ËÄÈ;ÉÄÎ21òC2ñ°LÌœdâe™ù%™ØY&Vþç$®¡f™ù ™8X&fN2q°LŒü’L¼,3'™xY&fN2ñ²LÌœdâc™ù#™øX&Vþ{c¨Y&fN2q²LÌœdâd™˜9ÉÄÉ21s’‰“ebädâc™˜9ÉÄÇ21s‰ÿNð¿C]ù¯=Ρî2ÔNâê#CÝàÙF õ“¡þädb_2Ô Nâê)CÝè}] u“¡þä—db¿2ÔNâÏPêFÏ6j¨· uå$Ç•¡npÇP/ê'q õ‘¡npÇP?ê¿]ÄPwêÊI&¾)CÝà$Ž¡î2Ô NÄPOêöýWâê-CݾžÄÿ õ•¡®œdâú‘¡npÇPêöý$Ρ~2ÔíûIœCÝd¨+ï4ÔC†ºÓI\C}e¨;<Û¨¡î?2ÔŸ¼“Lì[†ºÃIC½d¨;½¯«¡î2ÔŸü’LìO†ºÓI\CÝd¨;=Û¨¡>2Ô•“LO†ºÃIC½e¨;œÄ1ÔW†ºÃI\Cý~d¨;üvC=d¨+'™ø– u‡“8†zÈPwx8C½d¨û÷_‰s¨ uÿzÿ3ÔO†ú“/’‰«ÉPw8‰c¨¯ uÿ~×Pÿþ•øß¡îßOâê.C]ù ¡ž2ÔƒNâê'C=àÙF u“¡®œdb?2ÔNâê-C=è}] õ¡þä—dâø‘¡t×PwêAÏ6j¨¯ uå$ç õ€“8†úÈP8‰c¨Ÿ õ€“8†ºÉPøí"†zÊPWN2ñmê'q õ”¡ðp"†zËPï¿çP_êñõ$Ρ^?2ÔŸ|‘L\]†zÀICýd¨Ç÷“8‡ºÉPï'qõ¡®|ÒP/êI'ñg¨û õ„g1Ô]†ºr’‰ýÊPO8‰c¨ õ¤÷u5ÔS†ú“_’‰£ÉPO:‰k¨‡ õ¤g5ÔO†ú“O’‰³ÉPO8‰c¨¯ õ„“¸†úýÈPO8‰c¨» õ„ß.b¨— uå$ß‘¡žpÇP/ê 'b¨ õüþ+qõ“¡ž_O↺ÉPWN2q ê 'ñg¨ïÏ õü~çPwêùý$Ρž2Ô•/ê-C½è$®¡n2Ô žmÄPêÊI&ö'C½à$Ž¡¾2Ô‹Þ×ÕP/êO~I&Ž.C½è$®¡ž2Ô‹žm|†zþÈPòI2qvê'q õ“¡^pÇP7ê'q õ¡^ðÛE õ–¡®œdâ»2Ô Nâê-C½àáD õ•¡^ß%Ž¡^?2ÔëëIüÏPwêÊI&®)C½à$Ž¡n2ÔëûIœC=d¨×÷“8‡zÉPW¾i¨ õ¦“¸†ºËPox¶C=e¨+'™8~d¨7œÄ1ÔO†zÓûºê-C]9ÉÄ1d¨7Ä5ÔK†zÓ³ê&CýÉ'ÉÄ9d¨7œÄ5ÔïG†zÃICÝe¨7œÄ1ÔS†zÃo1ÔG†ºr’‰ïÉPo8‰c¨ õ†‡1ÔO†zÿ•8‡ºÉPï¯'ñ?C=d¨+'™¸– õ†“8†ºËPïï'qõ”¡ÞßOâê-C]ù¡¡¾2Ô‡Nâê!C}àÙF õ’¡þäƒdâh2ÔNâêû#C}è}] õ‘¡®œdâ˜2Ô‡Nâê-C}èÙF u—¡þä“dâœ2ÔNâê&C}à$Ž¡2ÔNâê%C}à·‹ê+C]9ÈÄóó#C}à$Ž¡¾2ÔNÔP¯êóýWâê.C}¾žÄÿ õ”¡®œdâÚ2ÔNâê!C}¾ŸÄ9ÔK†ú|?‰s¨ uå—†úÉP_:‰k¨§ õ…g1Ô[†ú“’‰£ËP_8‰c¨› õ¥÷u5ÔW†ºr’‰cÉP_:‰k¨ õ¥g5ÔC†ú“O’‰sÉP_8‰c¨» õ…“8†zÊP_8‰c¨· õ…ß.b¨Ÿ õ‡˜ýüÐP7ê 'q õ“¡¾ðp"†ºÉPßï¿çPêûõ$þg¨— uå$ב¡¾pÇPOêûý$ΡÞ2Ô÷ûIœC}e¨+'™Ø~d¨Ä5ÔK†úÁ³ê#CýÉÉÄ1d¨œÄ1Ô]†úÑûºê'CýÉÉıe¨Ä5ÔW†úѳê)CýÉ'ÉĹe¨œÄ1ÔC†úÁIC½d¨œÄ1ÔG†úÁoŸ¡þ=ÁÿõG¨ý4ê.Cýà$®¡^?2ÔNÄPwê÷ýWâê)Cý¾žÄÿ õ–¡®œdâº2ÔNâê%Cý¾ŸÄ9ÔG†ú}?‰s¨Ÿ õ'o$›ÈÄöC'q µÈÄÈI&v‘‰•’‰Cdbå—dâ™9ÉÄ'2±òG2qˆLl?t×P‹L¬|’Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&Fþh¨E&~òóÓi¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰LŒœdâ™Ø~à$Ž¡™ù¡¡™9ÉÄ&2±òF2±‰LlNâj‘‰‘“Lì"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™ØÄŸ¡ž"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰ŸüÏá\C-21òAC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbä$·ÈÄÖà$Ž¡™ù¥¡™Xy#™ØD&FN2±‰LlNâj‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™øÉÿœÄ5Ô"#'™8E&FN2qŠL¬ü‘L|"#'™øD&F2ñ÷ÿ;Ô~»ˆ¡™ù¤¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2±òM2q‹LlNâj‘‰‘“Ll"+o$›ÈÄÈI&6‘‰mÐI\C-2±òA2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘Lœ"?ùŸ“¸†Zdbä$§ÈÄÈI&.‘‰•?’‰Odbä$ŸÈÄOþ{c¨E&FÞi¨E&F¾h¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‹L¬|“LÜ"Û€“8†Zdbådb™9ÉÄ&21r’‰Mdb›t†zˆL¬|L"#'™8D&V~I&^‘‰‘“L|"+$§ÈÄ6é$®¡™9ÉÄ)2±òE2q‰L¬ü‘L|"#™øç…Û?C=á$Ž¡™ù ¡™ù¦¡™Xù"™¸D&FN2q‰LŒœdâ™Xù&™¸E&FN2q‹LlNâê&2±òF2±‰LŒœdb™9ÉÄ&2±-:‰k¨E&FN2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘Lœ"Û¢“¸†Zdbä$—ÈÄÊÉÄ%2±òG2ñ‰Lüä_†Zdbä†Zdb䓆Zdb䇆Zdbå‹dâ™9ÉÄ%21r’‰[dbå›dâ™9ÉÄ-2ñ“ÿÙãj‘‰‘“Ll"#'™ØD&FN2±‰Ll›Nâj‘‰‘“L"#'™8E&V~I&^‘‰•?’‰Odbä$§ÈĶé$®¡™9ÉÄ%2±òE2q‰L¬üÑW¡‘‰Ÿüï‹ãÏP‹LŒ|ÐP‹LŒ|ÑP‹LŒüÒP‹L¬|‘L\"#'™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&~ò?{\C-21r’‰Mdbä$›ÈÄÈI&6‘‰íÐI\C-21r’‰Cdbå“dâ™Xù%™øD&VþH&>‘‰‘“Lœ"Û¡“¸†Zdbä$—ÈÄÊÉÄ%2ñ“ÿA5Ô"#ï4Ô"#Ÿ4Ô"#ß4Ô"#'™ØD&V¾H&.‘‰‘“LÜ"+ß$·ÈÄÈI&n‘‰‘“LÜ"?ùŸ=®¡™9ÉÄ&21r’‰Mdbä$›ÈÄvé$®¡™9ÉÄ!2±òI2qŠL¬ü‘L|"#'™øD&FN2qŠLl—Nâj‘‰‘“L\"+_$—ÈÄvá$Ž¡™ù ¡™ù¢¡™ù¡¡™Xy#™ØD&V¾H&.‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"?ùŸ=®¡™9ÉÄ&21r’‰Mdbä$»ÈÄöè$®¡™9ÉÄ!2±òI2qŠL¬ü‘L|"#'™øD&~òýC2qŠL¬|’Lœ"#'™¸D&V¾H&.‘‰íÁIC-21òIC-21òMC-21r’‰Mdbådb™Xù"™¸E&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LlNâj‘‰‘“Ll"#'™ØD&VÞI&v‘‰ý‡Nâj‘‰‘“L"+Ÿ$§ÈÄÊÉÄ'21r‰¿'øŸ¡þäû‡dâ™Xù$™8E&V¾H&.‘‰‘“L\"ûœÄ1Ô"#_4Ô"#?4Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&ö8‰c¨E&FN2±‰LŒœdb™Xy'™ØE&öF'q µÈÄÈI&‘‰•O’‰Sdbådâ™ù¢¡™øÉ÷ÉÄ)2±òI2q‰L¬|‘L\"#'™¸D&ö'q µÈÄÈ7 µÈÄÈ/ µÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄÈéô™ØœÄ1Ô"#'™ØD&VÞI&v‘‰‘“Lì"{§“¸†Zdbä$§ÈÄÊ'ÉÄ)2±òG2ñ‰LŒ|ÓP‹Lüäû‡dâ™Xù"™¸D&FN2q‰LŒœdâ™Ø;œÄ1Ô"#?4Ô"#'™ØD&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&V~èô™Ø;œÄ1Ô"#'™ØE&VÞI&v‘‰‘“Lì"û “¸†Zdbå“dâ™9ÉÄ)2±òG2ñ‰LŒüÐP‹Lüäû‡dâ™Xù"™¸D&FN2q‰LŒœdâ™ØœÄ1Ô"#¿4Ô"+o$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™xD&V~èô™ØœÄ1Ô"+ï$»ÈÄÈI&v‘‰‘“Lì"û¤“ø3ÔSdbå“dâ™9ÉÄ)2±òG2ñ‰LŒüÒP‹Lüäû‡dâ™Xù"™¸D&FN2q‰L¬|“LÜ"û„“8†Zdbä$›ÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÊÉÄ#21rú}D&ö 'q u™Xy'™ØE&FN2±‹LŒœdb™ØÄ5Ô"#'™8E&FN2qŠL¬ü‘L|"#4Ô"?ùþ!™¸D&V¾H&.‘‰‘“LÜ"+ß$·Èľà$Ž¡™Xy#™ØD&FN2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ#2±òC2ñˆLŒœ¾A‘‰ŸüÏ×P‹LŒœdb™9ÉÄ.21r’‰]dbßt×P‹LŒœdâ™9ÉÄ%2±òG2ñ‰LüäÞ×ÕP‹LŒœdâ™Xù"™¸D&FN2q‹L¬|“LÜ"û†“¸þâšÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÊÉÄ#21r’‰Gdbäô úˆLüäö¸†Zdbä$»ÈÄÈI&v‘‰‘“Lì"û¡“¸†Zdbä$§ÈÄÊÉÄ%2±ò2ñ÷ÿ;Ô‡Þ×ÕP‹LŒœdâ™Xù"™¸D&FN2q‹L¬|“LÜ"?ùôQC-21r’‰Mdbä$›ÈÄÈI&6‘‰‘“Lì"+ß$·ÈÄÈI&‘‰•’‰Gdbä$ÈÄÈéô™øÉÿìq µÈÄÈI&v‘‰‘“Lì"#'™ØE&öK'q µÈÄÈI&N‘‰•/’‰Kdâ'ÿóÞ¹†Zdbä†Zdbä$—ÈÄÊÉÄ%21r’‰[dbå›dâ™Ø/œÄ1Ô"#'™ØD&FN2±‰LŒœdb™Xy'™ØE&V¾I&n‘‰•’‰Gdbä$ÈÄÈI&‘‰‘Ó7è#2ñ“ÿÙãj‘‰‘“Lì"#'™ØE&FN2qˆLìNâj‘‰‘“Lœ"+_$—ÈÄþà$Ž¡™ù ¡™Xy#™¸D&V¾H&.‘‰‘“LÜ"+ß$·ÈÄþà$Ž¡™9ÉÄ&21r’‰Mdbä$»ÈÄÊ;ÉÄ.2±òM2ñˆL¬üL<"#'™xD&FN2ñˆLŒœ¾A‘‰ýÁIC-21r’‰]dbä$»ÈÄÊÉÄ!2qüÐI\C-21r’‰Sdbå‹dâ™8~à$Ž¡™9ÉÄ&2±òF2q‰L¬|‘L\"+ß$·ÈÄÈI&n‘‰ãNâj‘‰‘“Ll"#'™ØD&FN2±‹L¬¼“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&FNß ÈÄñ'q µÈÄÈI&v‘‰‘“L"+$‡ÈÄÑè$®¡™9ÉÄ)2±òE2q‰L Nâj‘‰‘“Ll"+o$—ÈÄÊÉÄ-2±òM2q‹LŒœdâ™8œÄ1Ô"#'™ØD&FN2±‰L¬¼“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆLŒœ¾A_‘‰£ÁIC-21r’‰]dbåƒdâ™9ÉÄ!2qt:‰k¨E&FN2q‰L¬|‘L\"G‡“8†Zdbä$›ÈÄÊÉÄ%2±òM2q‹LŒœdâ™9ÉÄ-2qt8‰c¨E&FN2±‰LŒœdb™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù¥oÐWdâèpÇP‹LŒœdâ™Xù ™8D&FN2qˆLƒNâj‘‰•/’‰Kdbä$—ÈÄ1à$Ž¡™9ÉÄ&2±òF2q‹L¬|“LÜ"#'™¸E&FN2ñˆLNâj‘‰‘“Ll"+ï$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xE&V~éô™8œÄ1Ô"+$‡ÈÄÈI&‘‰‘“L"Ǥ“ø3ÔKdbå‹dâ™9ÉÄ%2qL8‰c¨E&FN2±‰L¬¼‘LÜ"+ß$·ÈÄÈI&n‘‰•’‰Gdâ˜pÇP‹LŒœdb™Xy'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™Xù%™xE&FNß ¯ÈÄ1á$®¡"+$‡ÈÄÈI&‘‰‘“L"Ç¢“¸†Zdbä$—ÈÄÈI&.‘‰cÁIC-21r’‰Mdbådâ™Xù&™¸E&FN2ñˆL¬üL<"Ç‚“8†Zdbådb™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$¯ÈÄÊ/ÉÄ+21rú}E&~ò?{\C-21r’‰Cdbä$‡ÈÄÈI&‘‰cÓI\C-21r’‰Kdbä$·Èıá$Ž¡™Xy#™ØD&FN2q‹L¬|“LÜ"#'™xD&V~H&‘‰cÃI\q]dbådb™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbå—dâ™9ÉÄ+21rú}E&~ò?{\C-21r’‰Cdbä$‡ÈÄÈI&‘‰ãÐI\C-21r’‰Kdbå›dâ™8œÄ5ÔMdbådb™9ÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&~ò?裆Zdbä$»ÈÄÈI&v‘‰‘“Lì"#'™8D&V~H&‘‰‘“L¼"+¿$¯ÈÄÈI&^‘‰‘Ó7è+2ñ“ÿÙãj‘‰‘“L"#'™8D&FN2qˆL—Nâj‘‰‘“L\"+ß$·ÈÄOþç½s µÈÄÈI&6‘‰‘“LÜ"+ß$·ÈÄÈI&‘‰•’‰Gdâ¸pÇP‹LŒœdb™9ÉÄ.21r’‰]dbåƒdâ™Xù!™xD&V~I&^‘‰‘“L¼"#'™xE&FNß ¯ÈÄOþgk¨E&FN2qˆLŒœdâ™9ÉÄ)2q<:‰k¨E&FN2q‰L¬|“LÜ"ǃ“8†Zdbä$›ÈÄÊ;ÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&Ž'q µÈÄÈI&v‘‰‘“Lì"#'™8D&V>H&‘‰•’‰Wdbå—dâ™9ÉÄ+21r’‰Wdbäô úŠLNâj‘‰‘“L"#'™8D&V>I&N‘‰ó‡Nâj‘‰‘“L\"+ß$·ÈÄù'q µÈÄÈI&v‘‰•w’‰[dbå›dâ™Xù!™xD&FN2ñˆLœ?pÇP‹LŒœdb™9ÉÄ.21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+21rú}E&Î8‰c¨E&FN2qˆLŒœdâ™Xù$™8E&ÎF'q µÈÄÈI&.‘‰•o’‰[dâlpÇP‹LŒœdb™Xy'™¸E&V¾I&‘‰•’‰Gdbä$ÈÄÙà$Ž¡™9ÉÄ.21r’‰]dbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbäô ú‰Lœ Nâj‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰³ÓI\C-21r’‰[dbå›dâ™8;œÄ1Ô"#'™ØE&VÞI&n‘‰•’‰Gdbä$ÈÄÈI&‘‰³ÃIC-21r’‰]dbä$‡ÈÄÊÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄÊ}ƒ~"g‡“8†Zdbä$§ÈÄÊ'ÉÄ)21r’‰Sdât×P‹L¬|“LÜ"#'™¸E&Î'q µÈÄÈI&v‘‰•w’‰Gdbå‡dâ™9ÉÄ#21r’‰WdâpÇP‹LŒœdb™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ'2±òGß ŸÈÄ9à$Ž¡™Xù$™8E&FN2qŠLŒœdâ™8'ÄŸ¡Þ"+ß$·ÈÄÈI&n‘‰sÂIC-21r’‰]dbådâ™Xù!™xD&FN2ñˆL¬ü’L¼"ç„“8†Zdbä$‡ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÊÉÄ'21rúýD&Î 'q õ™Xù$™8E&FN2qŠLŒœdâ™8Ä5Ô"#'™¸E&FN2q‹Lœ Nâj‘‰‘“Lì"+ï$ÈÄÊÉÄ#21r’‰Wdbå—dâ™8œÄ1Ô"+$‡ÈÄÈI&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™øD&VþH&>‘‰‘Ó7è'2ñ“ÿÙãj‘‰‘“Lœ"#'™8E&FN2qŠLœ›Nâj‘‰‘“LÜ"#'™xD&Î 'q µÈÄÊ;ÉÄ.21r’‰Gdbå‡dâ™9ÉÄ+2±òK2ñŠLœNâú‹"+$‡ÈÄÈI&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"+$ŸÈÄÈI&>‘‰‘Ó7è'2ñ“ÿÙãj‘‰‘“Lœ"#'™8E&FN2qŠLœ‡Nâj‘‰‘“LÜ"+?$ÈÄyà$®¡î"+ï$»ÈÄÈI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+2ñ“ÿA5Ô"#'™8D&FN2qˆLŒœdâ™9ÉÄ)2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœ¾A?‘‰ŸüÏ×P‹LŒœdâ™9ÉÄ)21r’‰Sdâ¼t×P‹LŒœdâ™Xù!™xD&~ò?ïk¨E&FN2±‹LŒœdâ™Xù!™xD&FN2ñŠL¬ü’L¼"ç…“8†Zdbä$‡ÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÊ/ÉÄ+2±òG2ñ‰LŒœdâ™9ÉÄ'21rúýD&~ò?{\C-21r’‰Sdbä$§ÈÄÈI&.‘‰óÑI\C-21r’‰[dbå‡dâ™8œÄ1Ô"#'™ØE&V>H&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+2q>8‰c¨E&FN2qˆLŒœdâ™9ÉÄ)2±òI2qŠL¬ü’L|"+$ŸÈÄÈI&>‘‰‘“L|"#§oÐOdâ|pÇP‹LŒœdâ™9ÉÄ)2±òE2q‰L\?t×P‹LŒœdâ™Xù!™xD&®8‰c¨E&FN2qˆL¬|L<"+?$ÈÄÊ/ÉÄ+21r’‰Wdâú“8†Zdbä$‡ÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰‘Ó7è'2qýÀIC-21r’‰Sdbä$—ÈÄÊÉÄ%2q5:‰k¨E&FN2q‹L¬üL<"Wƒ“8†Zdbä$‡ÈÄÊÉÄ#2±òC2ñŠL¬ü’L¼"#'™xE&®'q µÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"#‡oÐ÷GdâjpÇP‹LŒœdâ™Xù"™¸D&FN2q‰L\Nâj‘‰‘“L<"+?$ÈÄÕá$Ž¡™9ÉÄ!2±òA2ñˆL¬ü’L¼"#'™xE&FN2ñŠL\Nâj‘‰‘“L"#'™8E&V>I&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&~ò?{\C-2±òI2qŠLŒœdâ™Xù"™¸D&FN2q‰L\ƒNâj‘‰•’‰Gdbä$ÈÄ5à$Ž¡™9ÉÄ!2±òA2ñŠL¬ü’L¼"#'™xE&FN2ñ‰L\Nâj‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#™øg‚Ï·üŸ=®¡™Xù$™8E&V¾H&.‘‰‘“L\"#'™¸D&®I'ñg¨ÈÄÊÉÄ#21r’‰GdâšpÇP‹LŒœdâ™Xù ™xE&V~I&^‘‰‘“L¼"+$ŸÈÄ5á$Ž¡™9ÉÄ)2±òI2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'2ñ“ÿ»Çÿ µÈÄÈ; µÈÄÊ'ÉÄ%2±òE2q‰LŒœdâ™9ÉÄ%2q-:‰k¨E&FN2ñˆLŒœd♸œÄ1Ô"#'™8D&V>H&^‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'2q-8‰c¨E&V>I&N‘‰‘“Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&F2ñ÷IüïP¯¯'ñ?C-21òAC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰KdâÚt×P‹LŒœdâ™9ÉÄ+2qm8‰c¨E&V>H&‘‰‘“L¼"+¿$¯ÈÄÈI&>‘‰•?’‰OdâÚp×PO‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰Ÿü×çP‹LŒ¼ÓP‹LŒ|ÒP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸Ä5Ô"#'™xD&V~I&^‘‰ëÀI\C=D&V>H&‘‰‘“L¼"+¿$¯ÈÄÈI&>‘‰•?’‰Odâ'ÿƒ>j¨E&FN2qŠLŒœdâ™9ÉÄ)21r’‰Kdbådâ™9ÈÄ_ük¨Ï÷_‰s¨E&F>h¨E&F¾h¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L\—Nâj‘‰‘“L<"+¿$¯ÈÄOþç½s µÈÄÈI&‘‰‘“L¼"+¿$¯ÈÄÈI&>‘‰•?’‰OdâºpÇP‹LŒœdâ™9ÉÄ)21r’‰Sdbå‹dâ™Xù#™øD&~òß?QÄP‹LŒ¼ÓP‹LŒ|ÒP‹LŒ|ÓP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸Ä5Ô"#'™xD&V~I&^‘‰ëÁIC-21r’‰Cdbå“dâ™Xù%™xE&FN2ñ‰L¬ü‘L|"׃“8†Zdbä$§ÈÄÈI&N‘‰‘“L\"+_$—ÈÄÊÈÄßüïP?x8C-21òAC-21òEC-21òCC-2±òE2q‰LŒœdâ™9ÉÄ%2±òM2q‹LÜ?t×P‹LŒœdâ™Xù%™xE&î8‰c¨E&FN2qŠL¬|’L¼"+¿$¯ÈÄÊÉÄ'21r’‰Odâþ“8†Zdbä$§ÈÄÈI&N‘‰‘“L\"+_$—ÈÄOþ{c¨E&FÞi¨E&F>i¨E&F¾i¨E&F~i¨E&V¾H&.‘‰‘“L\"#'™¸E&V¾I&n‘‰»ÑI\C-21r’‰Gdbå—d♸œÄ1Ô"#'™8E&V>I&^‘‰•_’‰Odbådâ™9ÉÄ'2q78‰c¨E&FN2qŠLŒœdâ™Xù"™¸D&FN2q‰Lüä¿÷8†Zdb䃆Zdb䋆Zdb䇆Zdbä$›ÈÄÊÉÄ%21r’‰Kdbå›dâ™9ÉÄ-2qw:‰k¨E&FN2ñŠL¬ü’L¼"w‡“8†Zdbä$§ÈÄÊ'ÉÄ+2±òG2ñ‰LŒœdâ™9ÉÄ'2qw8‰c¨E&FN2qŠLŒœdâ™Xù"™¸D&FN2q‰LÜNâj‘‰‘Oj‘‰‘oj‘‰‘_j‘‰•7’‰Mdbå‹dâ™9ÉÄ-2±òM2q‹LŒœd♸Ä5Ô"+¿$¯ÈÄÈI&^‘‰{ÀIC-21r’‰Sdbå“dâ™Xù#™øD&FN2ñ‰LŒdâù™¸œÄ1Ô"#'™8E&V¾H&.‘‰‘“L\"#'™¸D&î'q µÈÄÈ µÈÄÈ µÈÄÈI&6‘‰•7’‰Mdbå‹dâ™Xù&™¸E&FN2q‹LŒœd♸'ÄŸ¡¾"+¿$¯ÈÄÈI&^‘‰{ÂIC-21r’‰Sdbå“dâ™Xù#™øD&FN2ñ‰Lüäö¸†Zdbå“dâ™9ÉÄ%2±òE2q‰LŒœdâ™9ÉÄ%2qO8‰c¨E&F¾i¨E&F~i¨E&VÞH&6‘‰‘“Ll"+_$·ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈĽè$®¡™9ÉÄ+21r’‰Wdâ^pÇP‹LŒœdâ™Xù$™øD&VþH&>‘‰‘ƒLü=ÁÿõG¨ý4j‘‰•O’‰Sdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈĽà$Ž¡™ù¡¡™9ÉÄ&2±òF2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2qo:‰k¨E&FN2ñŠLŒœd♸7œÄ1Ô"+Ÿ$§ÈÄÈI&>‘‰•?’‰Odb䛆Zdâ'ÿ³Ç5Ô"+Ÿ$—ÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰{ÃIC-21òKC-2±òF2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dâ>t×P‹LŒœdâ™Xù#™øD&î'q õ™Xù$™8E&FN2ñ‰L¬ü‘L|"#?4Ô"?ùŸ=®¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%21r’‰[dâ>pÇP‹LŒœdb™Xy#™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2q_:‰k¨E&FN2ñŠL¬ü‘L|"?ùŸ÷Î5Ô"#'™8E&FN2ñ‰L¬ü‘L|"#¿4Ô"?ùŸ=®¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2±òM2q‹LÜNâj‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™xD&îG'q µÈÄÈI&^‘‰•?’‰Odâ~pÇP‹LŒœdâ™Xù"™øD&VþH&>‘‰‘?j‘‰ŸüÏ×P‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™Xù&™¸E&î'q u™Xy#™ØD&FN2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-2±òC2ñˆL‘‰‘“L|"Ï€“8†Zdbä$—ÈÄÊÈÄ?/™ÿêA'q µÈÄÈ µÈÄÈI&6‘‰•/’‰Kdbä$—ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄ3à$Ž¡™9ÉÄ&21r’‰Mdbä$»ÈÄÊ;ÉÄ.2±òM2q‹L¬üL<"#'™xD&FN2ñˆL<“NâÏP?‘‰•?’‰Odbä$ŸÈÄ3á$Ž¡™9ÉÄ%2±òµh¨E&žI'q µÈÄÈ' µÈÄÊÉÄ&2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LŒœdâ™x&œÄ1Ô"#'™ØD&FN2±‰L¬¼“Lì"#'™ØE&V¾I&‘‰•’‰Gdbä$ÈÄÈI&‘‰gÑI\C-21r’‰Odbä$ŸÈijà$Ž¡™9ÉÄ%2±òµi¨E&žE'q µÈÄÈI&6‘‰•7’‰Mdbå‹dâ™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2ñ,8‰c¨E&FN2±‰LŒœdb™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™x6Ä5Ô"#'™øD&F2qÿˆL<Nâj‘‰•/’‰Kdb䇆ZdâÙt×P‹LŒœdb™Xy#™ØD&V¾H&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"φ“8†Zdbä$›ÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰çÐI\C-21r’‰Odâ'ÿ½Ç1Ô"+Ÿ$—ÈÄÊÉÄ%21òKC-2ñ:‰k¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&FN2ñˆL<Nâj‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&žK'q µÈÄÈI&>‘‰Ÿü÷ÇP‹L¬|‘L\"#'™¸D&Fþh¨E&žK'q µÈÄÈI&6‘‰•7’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄÊÉÄ#2ñ\8‰c¨E&VÞI&v‘‰‘“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™xÄ5Ô"#'™øD&~òß{C-2±òE2q‰LŒœdâ™Xùþ¡¡™xÄ5Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“L<"+?$ÈÄóà$®¡î"+ï$»ÈÄÈI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&V~I&^‘‰÷‡Nâj‘‰‘“L|"?ùï=Ž¡™Xù"™¸D&FN2q‹L¬|7j‘‰÷‡Nâj‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&‘‰•’‰Gdâ'ÿ½Ç1Ô"#'™ØE&FN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ+2±òK2ñŠL¼Nâj‘‰‘“L|"?ùï=Ž¡™Xù"™¸D&FN2q‹L¬|wj‘‰·ÑIüê&2±òF2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&FN2ñˆLüä¿÷8†Zdbä$»ÈÄÈI&v‘‰‘“Lì"#'™8D&V~H&‘‰‘“L<"+¿$¯ÈÄÈI&^‘‰·ÓI\C-21r‰ÿ~&ü=ÔÜ÷³h¨E&V¾H&.‘‰‘“LÜ"+߃†Zdâ'ÿs×P‹LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ#2±òC2ñˆLŒœdâ™x;œÄ1Ô"#'™ØE&FN2±‹LŒœdb™Xù ™8D&V~H&‘‰‘“L¼"+¿$¯ÈÄÈI&^‘‰wÐI\C-2ñ“ÿ~¶C-21òMC-2±òE2q‰LŒœdâ™Xù&™ØD&~ò?'q µÈÄÈI&6‘‰‘“Lì"+ß$·ÈÄÈI&n‘‰•’‰Gdbä$ÈÄÈI&‘‰wÀIC-21r’‰]dbä$»ÈÄÈI&‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™x'Äÿ õŸ—Ìÿ õ„g1Ô"#?4Ô"+_$—ÈÄÈI&n‘‰•o’‰Mdât×P‹LŒœdb™Xy'™ØE&V¾I&n‘‰‘“L<"+?$ÈÄÈI&‘‰‘“L<"ï„“8†Zdbä$»ÈÄÈI&v‘‰•’‰Cdbä$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ+2ñ.:‰k¨E&FÞi¨E&F~i¨E&V¾H&.‘‰‘“LÜ"+ß$›ÈÄ»è$®¡™9ÉÄ.2±òN2±‹L¬|“LÜ"+?$ÈÄÈI&‘‰‘“L<"#'™xD&Þ'q µÈÄÈI&v‘‰‘“L"+$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"煉¸†Zdb䃆Zdbä$›ÈÄÊÉÄ%2±òM2q‹LŒœdb™x7Ä5Ô"#'™ØE&VÞI&v‘‰•o’‰Gdbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄ»á$Ž¡™9ÉÄ.2±òA2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdâ=t×P‹LŒ|ÒP‹L¬¼‘Ll"+_$·ÈÄÊ7ÉÄ-21r’‰Mdâ=t×P‹LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆLŒœdâ™xœÄ1Ô"#'™8D&V>H&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL¼—Nâj‘‰‘/j‘‰•7’‰Mdbå›dâ™9ÉÄ-21r’‰Mdâ½t×P‹LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL¬ü’L¼"ï…“8†Zdbåƒdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&>‘‰÷ÑI\C-21òMC-2±òF2±‰L¬|“LÜ"#'™¸E&V~H&6‘‰÷ÑI\C-21r’‰]dbådb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ+2±òK2ñŠL¼Nâê!2±òA2qˆLŒœdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbådâ™ø~è$®¡™ù¡¡™Xy#™ØD&V¾I&n‘‰‘“L<"+?$›ÈÄ÷C'q µÈÄÊ;ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$¯ÈÄÊ/ÉÄ+2ñ“ÿÞãj‘‰‘“L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™Xù#™øD&¾F'q µÈÄÈ/ µÈÄÊÉÄ&2±òM2q‹LŒœdâ™Xù!™ØD&¾F'ñg¨»ÈÄÊ;ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbå—dâ™9ÉÄ+2ñ“ÿÞãj‘‰‘“L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠL¬ü‘L|"#'™øD&¾N'q µÈÄÈI&6‘‰•7’‰Mdbå›dâ™9ÉÄ#2±òC2±‰LüäNâj‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xE&V~I&^‘‰‘“L¼"_‡“8†Zdbä$‡ÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÊ/ÉÄ+21r’‰Odbådâ™9ÉÄ'2ñ :‰k¨E&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&‘‰•’‰]dâ'ÿs×P‹LŒœdb™9ÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™øœÄ1Ô"#'™8D&FN2qˆLŒœdâ™Xù$™8E&V~I&^‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰oÒIüê&2±òF2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üLì"ߤ“¸†Zdbä$»ÈÄÊÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™ø&œÄ1Ô"#'™8D&FN2qˆL¬|’Lœ"#'™8E&V~I&>‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰oÑI\C-21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™øÄ5Ô"#'™8D&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄ·à$Ž¡™9ÉÄ!21r’‰Sdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r’‰OdâÛt×P‹LŒœdb™9ÉÄ.2±òM2q‹L¬üL<"#'™ØE&¾M'q µÈÄÈI&‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñm8‰c¨E&FN2qˆL¬|’Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™øÄ5Ô"#'™ØD&VÞI&v‘‰•o’‰Gdbå‡dâ™9ÉÄ.2ñ:‰k¨E&FN2qˆL¬|L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&FN2ñ‰L|Nâj‘‰‘“Lœ"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&¾K'q µÈÄÈI&6‘‰•w’‰]dbå‡dâ™9ÉÄ#21r’‰]dâ»t×P‹LŒœdâ™Xù ™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL¬ü‘L|"ß…“8†Zdbå“dâ™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈA&¾‘‰ïÑI\C-21r’‰Mdbådb™Xù!™xD&FN2ñˆL¬ü’Lì"ߣ“¸†Zdbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Odbådâ™øœÄ5ÔSdbå“dâ™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄOþks¨Y&~¢¿'q 5ËÄÌI&6–‰‘w’‰ebä‡dâa™˜9ÉÄË21òK2±³L¬üÏI\CÍ21òA2q°LÌœdâ`™ù%™xY&fN2ñ²LÌœdâe™˜9ÉÄÇ21òG2ñ±L¬ü÷ÇP³LÌœdâd™˜9ÉÄÉ21s’‰“ebæ$'ËÄÈÉÄÇ21s’‰ebæ ÿà‡ºò_{œCÝe¨Ä5ÔG†ºÁ³ê'CýÉ;Éľd¨œÄ1ÔS†ºÑûºê&CýÉ/ÉÄ~e¨ÄŸ¡?2ÔžmÔPoêÊI&Ž+CÝà$Ž¡^2Ô Nâê#CÝà$Ž¡~2Ô ~»ˆ¡î2Ô•“L|S†ºÁICÝe¨<œˆ¡ž2Ôíû¯Ä9Ô[†º}=‰ÿê+C]9ÉÄõ#CÝà$Ž¡>2ÔíûIœCýd¨Û÷“8‡ºÉPWÞi¨‡ u§“¸†úÊPwx¶QCÝd¨?y'™Ø· u‡“8†zÉPwz_WCÝe¨?ù%™ØŸ u§“¸†ºÉPwz¶QC}d¨+'™8ž u‡“8†zËPw8‰c¨¯ u‡“¸†úýÈPwøí"†zÈPWN2ñ-ê'q õ¡îðp"†zÉP÷ï¿çPêþõ$þg¨Ÿ õ'_$W“¡îpÇP_êþý$®¡þý+ñ¿CÝ¿ŸÄ9Ô]†ºòAC=e¨Ä5ÔO†zÀ³ê&C]9ÉÄ~d¨œÄ1Ô[†zÐûºê!CýÉ/ÉÄñ#C=è$®¡î2ÔƒžmÔP_êÊI&Îê'q õ‘¡pÇP?ê'q u“¡ðÛE õ”¡®œdâÛ2ÔNâê)C=àáD õ–¡ß%Ρ¾2ÔãëIœC½~d¨?ù"™¸º õ€“8†úÉPï'qu“¡ßOâê!C]ù¤¡^2Ô“NâÏP÷ê Ï6b¨» uå$û•¡žpÇPêIïëj¨§ õ'¿$G“¡žt×PêIÏ6j¨Ÿ õ'Ÿ$g“¡žpÇP_ê 'q õû‘¡žpÇPwê ¿]ÄP/êÊI&¾#C=á$Ž¡^2ÔNÄPêùýWâê'C=¿žÄÿ u“¡®œdâ2ÔNâÏP¿Ÿêùý$Ρî2ÔóûIœC=e¨+_4Ô[†zÑI\CÝd¨<Ûˆ¡2Ô•“LìO†zÁIC}e¨½¯«¡^2ÔŸü’L]†zÑI\C=e¨=Ûø õü‘¡þä“dâì2Ô Nâê'C½à$Ž¡n2Ô Nâê!C½à·‹ê-C]9ÉÄwe¨œÄ1Ô[†zÁÉê+C½¾ÿJC½~d¨×דøŸ¡î2Ô•“L\S†zÁICÝd¨×÷“8‡zÈP¯ï'qõ’¡®|ÓPêM'q u—¡Þðl#†zÊPWN2qüÈPo8‰c¨Ÿ õ¦÷u5Ô[†ºr’‰cÈPo:‰k¨— õ¦g5ÔM†ú“O’‰sÈPo8‰k¨ß õ†“8†ºËPo8‰c¨§ õ†ß.b¨ uå$ß“¡ÞpÇPê 'b¨Ÿ õþþ+qu“¡Þ_Oâ†zÈPWN2q-ê 'q u—¡ÞßOâê)C½¿ŸÄ9Ô[†ºòCC}e¨Ä5ÔC†úÀ³ê%CýÉÉÄÑd¨œÄ5Ô÷G†úÐûºê#C]9ÉÄ1e¨Ä5Ô[†úгê.CýÉ'ÉÄ9e¨œÄ1ÔM†úÀIC=d¨œÄ1ÔK†úÀo1ÔW†ºr‰÷çG†úÀIC}e¨<œ¨¡^?2Ôçû¯Ä9Ô]†ú|=‰ÿê)C]9Éĵe¨œÄ1ÔC†ú|?‰s¨— õù~çPêÊ/ õ“¡¾t×POê Ï6b¨· õ'$G—¡¾pÇP7êKïëj¨¯ uå$Ç’¡¾t×PêKÏ6j¨‡ õ'Ÿ$ç’¡¾pÇPwê 'q õ”¡¾pÇPoê ¿]ÄP?ê1ûù¡¡n2ÔNâê'C}ááD u“¡¾ß%Ρ2Ô÷ëIüÏP/êÊI&®#C}á$Ž¡ž2Ô÷ûIœC½e¨ï÷“8‡úÊPWN2±ýÈP?:‰k¨— õƒg1ÔG†ú“’‰cÈP?8‰c¨» õ£÷u5ÔO†ú“?’‰cËP?:‰k¨¯ õ£g5ÔS†ú“O’‰sËP?8‰c¨‡ õƒ“8†zÉP?8‰c¨ õƒß.>Cý{‚ÿêPûi4Ô]†úÁI\C½~d¨<œˆ¡î2Ôïû¯Ä9ÔS†ú}=‰ÿê-C]9ÉÄue¨œÄ1ÔK†ú}?‰s¨ õû~çP?êOÞH&6‘‰í‡Nâj‘‰‘“Lì"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™Ø~è$®¡™Xù$™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒüÑP‹Lüä÷§ÓP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™9ÉÄ%2±ýÀIC-21òCC-21r’‰Mdbådb™ØÄ5Ô"#'™ØE&V>H&‘‰•_’‰Wdbä$ŸÈÄÊÉÄ!2±5:‰?C=E&V>I&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"?ùŸÃ¹†Zdb䃆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈÄÈI&n‘‰­ÁIC-21òKC-2±òF2±‰LŒœdb™Ø:Ä5Ô"#'™8D&V>H&‘‰•_’‰Wdbä$ŸÈÄÊÉÄ!2ñ“ÿ9‰k¨E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒdâï þw¨;üvC-21òIC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbå›dâ™Ø:œÄ1Ô"#'™ØD&VÞH&6‘‰‘“Ll"Û “¸†Zdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™8E&~ò?'q µÈÄÈI&N‘‰‘“L\"+$ŸÈÄÈI&>‘‰Ÿü÷ÇP‹LŒ¼ÓP‹LŒ|ÑP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™Xù&™¸E&¶'q µÈÄÊÉÄ&21r’‰Mdbä$›ÈÄ6é$þ õ™Xù ™8D&FN2qˆL¬ü’L¼"#'™øD&VþH&N‘‰mÒI\C-21r’‰Sdbå‹dâ™Xù#™øD&F2ñÏ ·†zÂIC-21òAC-21òMC-2±òE2q‰LŒœdâ™9ÉÄ%2±òM2q‹LŒœdâ™Ø&œÄ5ÔMdbådb™9ÉÄ&21r’‰Mdb[t×P‹LŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™8E&¶E'q µÈÄÈI&.‘‰•/’‰Kdbådâ™øÉÿ¾8þ µÈÄÈ; µÈÄÈ' µÈÄÈ µÈÄÊÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-21r’‰[dâ'ÿ³Ç5Ô"#'™ØD&FN2±‰LŒœdb™Ø6Ä5Ô"#'™8D&FN2qŠL¬ü’L¼"+$ŸÈÄÈI&N‘‰mÓI\C-21r’‰Kdbå‹dâ™Xù£¯B?"?ùßÇŸ¡™ù ¡™ù¢¡™ù¥¡™Xù"™¸D&FN2q‰L¬|“LÜ"#'™¸E&FN2q‹Lüäö¸†Zdbä$›ÈÄÈI&6‘‰‘“Ll"Û¡“¸†Zdbä$‡ÈÄÊ'ÉÄ)2±òK2ñ‰L¬ü‘L|"#'™8E&¶C'q µÈÄÈI&.‘‰•/’‰Kdâ'ÿƒ>j¨E&FÞi¨E&F>i¨E&F¾i¨E&FN2±‰L¬|‘L\"#'™¸E&V¾I&n‘‰‘“LÜ"#'™¸E&~ò?{\C-21r’‰Mdbä$›ÈÄÈI&6‘‰íÒI\C-21r’‰Cdbå“dâ™Xù#™øD&FN2ñ‰LŒœdâ™Ø.Ä5Ô"#'™¸D&V¾H&.‘‰íÂIC-21òAC-21òEC-21òCC-2±òF2±‰L¬|‘L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&~ò?{\C-21r’‰Mdbä$›ÈÄÈI&v‘‰íÑI\C-21r’‰Cdbå“dâ™Xù#™øD&FN2ñ‰Lüäç‡dâ™Xù$™8E&FN2q‰L¬|‘L\"Ûƒ“8†Zdb䓆Zdb䛆Zdbä$›ÈÄÊÉÄ&2±òE2q‹L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™ØœÄ1Ô"#'™ØD&FN2±‰L¬¼“Lì"ûÄ5Ô"#'™8D&V>I&N‘‰•?’‰Odbä Oð?CýÉÏÉÄ)2±òI2qŠL¬|‘L\"#'™¸D&ö8‰c¨E&F¾h¨E&F~h¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&FN2q‹Lì?pÇP‹LŒœdb™9ÉÄ.2±òN2±‹LìNâj‘‰‘“L"+Ÿ$§ÈÄÊÉÄ'21òEC-2ñ“Ÿ’‰Sdbå“dâ™Xù"™¸D&FN2q‰Lì Nâj‘‰‘oj‘‰‘_j‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰‘Ó7è#2±78‰c¨E&FN2±‰L¬¼“Lì"#'™ØE&öN'q µÈÄÈI&N‘‰•O’‰Sdbådâ™ù¦¡™øÉÏÉÄ)2±òE2q‰LŒœdâ™9ÉÄ%2±w8‰c¨E&F~h¨E&FN2±‰L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹L¬üÐ7è#2±w8‰c¨E&FN2±‹L¬¼“Lì"#'™ØE&öA'q µÈÄÊ'ÉÄ)21r’‰Sdbådâ™ù¡¡™øÉÏÉÄ%2±òE2q‰LŒœdâ™9ÉÄ-2±8‰c¨E&F~i¨E&VÞH&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2ñˆL¬üÐ7è#2±8‰c¨E&VÞI&v‘‰‘“Lì"#'™ØE&öI'ñg¨§ÈÄÊ'ÉÄ)21r’‰Sdbådâ™ù¥¡™øÉÏÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&ö 'q µÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰•’‰Gdbäô úˆLìNâê.2±òN2±‹LŒœdb™9ÉÄ.2±/:‰k¨E&FN2qŠLŒœdâ™Xù#™øD&Fþh¨E&~òóC2q‰L¬|‘L\"#'™¸E&V¾I&n‘‰}ÁIC-2±òF2±‰LŒœdb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰Gdbå‡dâ™9}ƒ>"?ùŸ=®¡™9ÉÄ.21r’‰]dbä$»Èľé$®¡™9ÉÄ)21r’‰Kdbådâ™øÉÿ¼¯«¡™9ÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&ö 'qýÅ5‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰•’‰Gdbä$ÈÄÈéô™øÉÿìq µÈÄÈI&v‘‰‘“Lì"#'™ØE&öC'q µÈÄÈI&N‘‰•/’‰Kdbådâï þw¨½¯«¡™9ÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&~ò?裆Zdbä$›ÈÄÈI&6‘‰‘“Ll"#'™ØE&V¾I&n‘‰‘“L<"+?$ÈÄÈI&‘‰‘Ó7è#2ñ“ÿÙãj‘‰‘“Lì"#'™ØE&FN2±‹Lì—Nâj‘‰‘“Lœ"+_$—ÈÄOþç½s µÈÄÈ; µÈÄÈI&.‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-2±_8‰c¨E&FN2±‰LŒœdb™9ÉÄ&2±òN2±‹L¬|“LÜ"+?$ÈÄÈI&‘‰‘“L<"#§oÐGdâ'ÿ³Ç5Ô"#'™ØE&FN2±‹LŒœdâ™ØÄ5Ô"#'™8E&V¾H&.‘‰ýÁIC-21òAC-2±òF2q‰L¬|‘L\"#'™¸E&V¾I&n‘‰ýÁIC-21r’‰Mdbä$›ÈÄÈI&v‘‰•w’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™9}ƒ>"ûƒ“8†Zdbä$»ÈÄÈI&v‘‰•’‰Cdâø¡“¸†Zdbä$§ÈÄÊÉÄ%2qüÀIC-21r’‰Mdbådâ™Xù"™¸D&V¾I&n‘‰‘“LÜ"ÇœÄ1Ô"#'™ØD&FN2±‰LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆLŒœ¾A‘‰ãNâj‘‰‘“Lì"#'™8D&V>H&‘‰£ÑI\C-21r’‰Sdbå‹dâ™8œÄ1Ô"#'™ØD&VÞH&.‘‰•/’‰[dbå›dâ™9ÉÄ-2q48‰c¨E&FN2±‰LŒœdb™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™9}ƒ¾"Gƒ“8†Zdbä$»ÈÄÊÉÄ!21r’‰Cdâèt×P‹LŒœdâ™Xù"™¸D&Ž'q µÈÄÈI&6‘‰•7’‰Kdbå›dâ™9ÉÄ-21r’‰[dâèpÇP‹LŒœdb™9ÉÄ.2±òN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2±òKß ¯ÈÄÑá$Ž¡™9ÉÄ!2±òA2qˆLŒœdâ™8Ä5Ô"+_$—ÈÄÈI&.‘‰cÀIC-21r’‰Mdbådâ™Xù&™¸E&FN2q‹LŒœdâ™8œÄ1Ô"#'™ØD&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñŠL¬üÒ7è+2q 8‰c¨E&V>H&‘‰‘“L"#'™8D&ŽI'ñg¨—ÈÄÊÉÄ%21r’‰Kdâ˜pÇP‹LŒœdb™Xy#™¸E&V¾I&n‘‰‘“LÜ"+?$ÈÄ1á$Ž¡™9ÉÄ.2±òN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#2±òK2ñŠLŒœ¾A_‘‰cÂI\C=D&V>H&‘‰‘“L"#'™8D&ŽE'q µÈÄÈI&.‘‰‘“L\"Ç‚“8†Zdbä$›ÈÄÊÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&Ž'q µÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&^‘‰•_’‰Wdbäô úŠLüäö¸†Zdbä$‡ÈÄÈI&‘‰‘“L"Ǧ“¸†Zdbä$—ÈÄÈI&n‘‰cÃIC-2±òF2±‰LŒœdâ™Xù&™¸E&FN2ñˆL¬üL<"dž“¸þâºÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÊ/ÉÄ+21r’‰Wdbäô úŠLüäö¸†Zdbä$‡ÈÄÈI&‘‰‘“L"Ç¡“¸†Zdbä$—ÈÄÊ7ÉÄ-2q8‰k¨›ÈÄÊÉÄ&21r’‰[dbå›dâ™9ÉÄ#2±òC2ñˆLüäÐG µÈÄÈI&v‘‰‘“Lì"#'™ØE&FN2qˆL¬üL<"#'™xE&V~I&^‘‰‘“L¼"#§oÐWdâ'ÿ³Ç5Ô"#'™8D&FN2qˆLŒœdâ™8.Ä5Ô"#'™¸D&V¾I&n‘‰ŸüÏ{çj‘‰‘“Ll"#'™¸E&V¾I&n‘‰‘“L<"+?$ÈÄqá$Ž¡™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ!2±òC2ñˆL¬ü’L¼"#'™xE&FN2ñŠLŒœ¾A_‘‰ŸüÏ×P‹LŒœdâ™9ÉÄ!21r’‰Sdâxt×P‹LŒœdâ™Xù&™¸E&Ž'q µÈÄÈI&6‘‰•w’‰[dbå›dâ™9ÉÄ#2±òC2ñˆLNâj‘‰‘“Lì"#'™ØE&FN2qˆL¬|L"+?$¯ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈéô™8œÄ1Ô"#'™8D&FN2qˆL¬|’Lœ"çÄ5Ô"#'™¸D&V¾I&n‘‰óNâj‘‰‘“Lì"+ï$·ÈÄÊ7ÉÄ-2±òC2ñˆLŒœdâ™8à$Ž¡™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbäô úŠLœ?pÇP‹LŒœdâ™9ÉÄ)2±òI2qŠLœNâj‘‰‘“L\"+ß$·ÈÄÙà$Ž¡™9ÉÄ.2±òN2q‹L¬|“L<"+?$ÈÄÈI&‘‰³ÁIC-21r’‰]dbä$»ÈÄÊÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄÈéô™8œÄ1Ô"#'™8D&V>I&N‘‰‘“Lœ"g§“¸†Zdbä$·ÈÄÊ7ÉÄ-2qv8‰c¨E&FN2±‹L¬¼“LÜ"+?$ÈÄÈI&‘‰‘“L<"g‡“8†Zdbä$»ÈÄÈI&‘‰•’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰•?úýD&Î'q µÈÄÈI&N‘‰•O’‰Sdbä$§ÈÄ9è$®¡™Xù&™¸E&FN2q‹LœNâj‘‰‘“Lì"+ï$ÈÄÊÉÄ#21r’‰Gdbä$¯ÈÄ9à$Ž¡™9ÉÄ.2±òA2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Odbå¾A?‘‰sÀIC-2±òI2qŠLŒœdâ™9ÉÄ)2qN:‰?C½E&V¾I&n‘‰‘“LÜ"ç„“8†Zdbä$»ÈÄÊ;ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Î 'q µÈÄÈI&‘‰•’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰•?’‰Odbäô ú‰LœNâê)2±òI2qŠLŒœdâ™9ÉÄ)2q.:‰k¨E&FN2q‹LŒœdâ™8œÄ1Ô"#'™ØE&VÞI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+2q.8‰c¨E&V>H&‘‰‘“L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñ‰L¬ü‘L|"#§oÐOdâ'ÿ³Ç5Ô"#'™8E&FN2qŠLŒœdâ™87Ä5Ô"#'™¸E&FN2ñˆLœNâj‘‰•w’‰]dbä$ÈÄÊÉÄ#21r’‰Wdbå—dâ™87œÄõ7D&V>H&‘‰‘“L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&VþH&>‘‰‘“L|"#§oÐOdâ'ÿ³Ç5Ô"#'™8E&FN2qŠLŒœdâ™8Ä5Ô"#'™¸E&V~H&‘‰óÀI\CÝE&VÞI&v‘‰‘“L<"+?$ÈÄÈI&^‘‰•_’‰Wdâ'ÿƒ>j¨E&FN2qˆLŒœdâ™9ÉÄ!21r’‰Sdbå—dâ™9ÉÄ'2±òG2ñ‰LŒœdâ™9}ƒ~"?ùŸ=®¡™9ÉÄ)21r’‰Sdbä$§ÈÄyé$®¡™9ÉÄ-2±òC2ñˆLüäÞ;×P‹LŒœdb™9ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Î 'q µÈÄÈI&‘‰‘“L"#'™8D&V>I&N‘‰•_’‰Wdbådâ™9ÉÄ'21r’‰Odbäô ú‰Lüäö¸†Zdbä$§ÈÄÈI&N‘‰‘“L\"磓¸†Zdbä$·ÈÄÊÉÄ#2q>8‰c¨E&FN2±‹L¬|L<"+?$ÈÄÈI&^‘‰•_’‰Wdâ|pÇP‹LŒœdâ™9ÉÄ!21r’‰Sdbå“dâ™Xù%™øD&VþH&>‘‰‘“L|"#'™øD&FNß ŸÈÄùà$Ž¡™9ÉÄ)21r’‰Sdbå‹d♸~è$®¡™9ÉÄ-2±òC2ñˆL\?pÇP‹LŒœdâ™Xù ™xD&V~H&‘‰•_’‰Wdbä$¯ÈÄõ'q µÈÄÈI&‘‰‘“L"#'™8E&V>I&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"#§oÐOdâú“8†Zdbä$§ÈÄÈI&.‘‰•/’‰Kdâjt×P‹LŒœdâ™Xù!™xD&®'q µÈÄÈI&‘‰•’‰Gdbå‡dâ™Xù%™xE&FN2ñŠL\ Nâj‘‰‘“L"#'™8D&V>I&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&Fß ßÈÄÕà$Ž¡™9ÉÄ)2±òE2q‰LŒœd♸:Ä5Ô"#'™xD&V~H&‘‰«ÃIC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœd♸:œÄ1Ô"#'™8D&FN2qŠL¬|’Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰Lüäö¸†Zdbå“dâ™9ÉÄ%2±òE2q‰LŒœd♸Ä5Ô"+?$ÈÄÈI&‘‰kÀIC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœd♸œÄ1Ô"#'™8D&V>I&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&F2ñÏŸoÿø?{\C-2±òI2qŠL¬|‘L\"#'™¸D&FN2q‰L\“NâÏP‘‰•’‰Gdbä$ÈÄ5á$Ž¡™9ÉÄ!2±òA2ñŠL¬ü’L¼"#'™xE&VþH&>‘‰kÂIC-21r’‰Sdbå“dâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odâ'ÿwÿj‘‰‘wj‘‰•O’‰Kdbå‹dâ™9ÉÄ%21r’‰KdâZt×P‹LŒœdâ™9ÉÄ#2q-8‰c¨E&FN2qˆL¬|L¼"+¿$¯ÈÄÈI&>‘‰•?’‰OdâZpÇP‹L¬|’Lœ"#'™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒdâï“øß¡^_Oâ†Zdb䃆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—Èĵé$®¡™9ÉÄ#21r’‰WdâÚpÇP‹L¬|L"#'™xE&V~I&^‘‰‘“L|"+$ŸÈĵá$®¡ž"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"?ù¯=Ρ™y§¡™ù¤¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2q:‰k¨E&FN2ñˆL¬ü’L¼"ד¸†zˆL¬|L"#'™xE&V~I&^‘‰‘“L|"+$ŸÈÄOþ}ÔP‹LŒœdâ™9ÉÄ)21r’‰Sdbä$—ÈÄÊÉÄ'21r‰¿&ø×PŸï¿çP‹LŒ|ÐP‹LŒ|ÑP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸.Ä5Ô"#'™xD&V~I&^‘‰ŸüÏ{çj‘‰‘“L"#'™xE&V~I&^‘‰‘“L|"+$ŸÈÄuá$Ž¡™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ%2±òG2ñ‰Lüä¿¢ˆ¡™y§¡™ù¤¡™ù¦¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ-2q=:‰k¨E&FN2ñˆL¬ü’L¼"׃“8†Zdbä$‡ÈÄÊ'ÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&®'q µÈÄÈI&N‘‰‘“Lœ"#'™¸D&V¾H&.‘‰•?‰¿'øß¡~ðp"†Zdb䃆Zdb䋆Zdb䇆Zdbå‹dâ™9ÉÄ%21r’‰Kdbå›d♸è$®¡™9ÉÄ#2±òK2ñŠLÜ?pÇP‹LŒœdâ™Xù$™xE&V~I&^‘‰•?’‰Odbä$ŸÈÄý'q µÈÄÈI&N‘‰‘“Lœ"#'™¸D&V¾H&.‘‰Ÿü÷ÇP‹LŒ¼ÓP‹LŒ|ÒP‹LŒ|ÓP‹LŒüÒP‹L¬|‘L\"#'™¸D&FN2q‹L¬|“LÜ"w£“¸†Zdbä$ÈÄÊ/ÉÄ+2q78‰c¨E&FN2qŠL¬|’L¼"+¿$ŸÈÄÊÉÄ'21r’‰OdânpÇP‹LŒœdâ™9ÉÄ)2±òE2q‰LŒœdâ™øÉïq µÈÄÈ µÈÄÈ µÈÄÈ µÈÄÈI&6‘‰•/’‰Kdbä$—ÈÄÊ7ÉÄ-21r’‰[dâît×P‹LŒœdâ™Xù%™xE&î'q µÈÄÈI&N‘‰•O’‰Wdbådâ™9ÉÄ'21r’‰OdâîpÇP‹LŒœdâ™9ÉÄ%2±òE2q‰LŒœd♸;œÄ1Ô"#Ÿ4Ô"#ß4Ô"#¿4Ô"+o$›ÈÄÊÉÄ%21r’‰[dbå›dâ™9ÉÄ-2q:‰k¨E&V~I&^‘‰‘“L¼"÷€“8†Zdbä$§ÈÄÊ'ÉÄ'2±òG2ñ‰LŒœdâ™9ÈÄû#2q8‰c¨E&FN2qŠL¬|‘L\"#'™¸D&FN2q‰LÜNâj‘‰‘/j‘‰‘j‘‰‘“Ll"+o$›ÈÄÊÉÄ%2±òM2q‹LŒœdâ™9ÉÄ-2qO:‰?C}E&V~I&^‘‰‘“L¼"÷„“8†Zdbä$§ÈÄÊ'ÉÄ'2±òG2ñ‰LŒœdâ™øÉÿìq µÈÄÊ'ÉÄ)21r’‰Kdbå‹dâ™9ÉÄ%21r’‰KdâžpÇP‹LŒ|ÓP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&V¾H&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰{ÑI\C-21r’‰Wdbä$¯ÈĽà$Ž¡™9ÉÄ)2±òI2ñ‰L¬ü‘L|"#™ø{‚ÿêPûi4Ô"+Ÿ$§ÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰{ÁIC-21òCC-21r’‰Mdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dâÞt×P‹LŒœdâ™9ÉÄ'2qo8‰c¨E&V>I&N‘‰‘“L|"+$ŸÈÄÈ7 µÈÄOþgk¨E&V>I&.‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"÷†“8†Zdbä—†Zdbådb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄ}è$®¡™9ÉÄ+2±òG2ñ‰LÜNâê)2±òI2qŠLŒœdâ™Xù#™øD&F~h¨E&~ò?{\C-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbä$·ÈÄ}à$Ž¡™9ÉÄ&2±òF2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dâ¾t×P‹LŒœdâ™Xù#™øD&~ò?ïk¨E&FN2qŠLŒœdâ™Xù#™øD&F~i¨E&~ò?{\C-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbå›d♸/œÄ1Ô"+o$›ÈÄÈI&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2ñˆLÜNâj‘‰‘“L¼"+$ŸÈÄýà$Ž¡™9ÉÄ)2±òE2ñ‰L¬ü‘L|"#4Ô"?ùŸ=®¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ-2±òM2q‹LÜNâê&2±òF2±‰LŒœdb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbå‡dâ™x~è$®¡™9ÉÄ+2±òG2ñ‰L‘‰Ÿüϳj‘‰‘oj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄOþ{c¨E&FN2±‰LŒœdb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰Gdbå‡dâ™xÄ5Ô"#'™xE&VþH&>‘‰§ÁIC-21r’‰Kdbå‹dâ™Xù™ø{‚ÿêFÏ6j¨E&F~h¨E&V¾H&.‘‰‘“L\"#'™¸D&V¾I&n‘‰‘“LÜ"?ùï=Ž¡™9ÉÄ&21r’‰Mdbä$›ÈÄÈI&v‘‰•o’‰[dbä$·ÈÄÊÉÄ#21r’‰Gdâét×P‹LŒœdâ™Xù#™øD&ž'q µÈÄÈI&.‘‰•/’‰Odâ'ÿs×P‹LŒ¼ÓP‹LŒüÒP‹L¬|‘L\"#'™¸D&FN2q‹L¬|“LÜ"#'™¸E&ž'q µÈÄÈI&6‘‰‘“Ll"#'™ØD&VÞI&v‘‰•o’‰[dbä$ÈÄÊÉÄ#21r’‰Gdât×P‹L¬ü‘L|"#'™øD&ž'q µÈÄÈI&.‘‰•/‰^2ÿ3ÔƒNâj‘‰‘j‘‰‘“Ll"+_$—ÈÄÈI&.‘‰•o’‰[dbä$·ÈÄÈI&n‘‰gÀIC-21r’‰Mdbä$›ÈÄÈI&v‘‰•w’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™x&ÄŸ¡~"+$ŸÈÄÈI&>‘‰gÂIC-21r’‰KdbåkÑP‹L<“Nâj‘‰‘Oj‘‰•7’‰Mdbå‹dâ™9ÉÄ-2±òM2q‹LŒœdâ™9ÉÄ-2ñL8‰c¨E&FN2±‰LŒœdb™Xy'™ØE&FN2±‹L¬|“L<"+?$ÈÄÈI&‘‰‘“L<"Ï¢“¸†Zdbä$ŸÈÄÈI&>‘‰gÁIC-21r’‰KdbåkÓP‹L<‹Nâj‘‰‘“Ll"+o$›ÈÄÊÉÄ%2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dâYpÇP‹LŒœdb™9ÉÄ.2±òN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2ñl:‰k¨E&FN2ñ‰LŒdâù™x6œÄ1Ô"+_$—ÈÄÈ µÈijé$®¡™9ÉÄ&2±òF2±‰L¬|‘LÜ"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&ž 'q µÈÄÈI&6‘‰•w’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"Ï¡“¸†Zdbä$ŸÈÄOþ{c¨E&V>I&.‘‰•/’‰Kdbä—†Zdâ9t×P‹LŒœdb™Xy#™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LŒœdâ™xœÄ1Ô"#'™ØE&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL<—Nâj‘‰‘“L|"?ùï=Ž¡™Xù"™¸D&FN2q‰LŒüÑP‹L<—Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰•’‰Gdâ¹pÇP‹L¬¼“Lì"#'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ+2ñ<:‰k¨E&FN2ñ‰Lüä¿÷8†Zdbå‹dâ™9ÉÄ%2±òýCC-2ñ<:‰k¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™xD&V~H&‘‰çÁI\CÝE&VÞI&v‘‰‘“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆL¬ü’L¼"ïÄ5Ô"#'™øD&~òß{C-2±òE2q‰LŒœdâ™Xùn4Ô"ïÄ5Ô"+o$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“L<"+?$ÈÄOþ{c¨E&FN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Wdbå—dâ™xÄ5Ô"#'™øD&~òß{C-2±òE2q‰LŒœdâ™Xùî4Ô"o£“ø3ÔMdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-2±òC2ñˆLŒœdâ™øÉïq µÈÄÈI&v‘‰‘“Lì"#'™ØE&FN2qˆL¬üL<"#'™xD&V~I&^‘‰‘“L¼"o§“¸†Zdbä ÿýLø{¨?¸ïgÑP‹L¬|‘L\"#'™¸E&V¾ µÈÄOþç$®¡™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰Gdbå‡dâ™9ÉÄ#2ñv8‰c¨E&FN2±‹LŒœdb™9ÉÄ.2±òA2qˆL¬üL<"#'™xE&V~I&^‘‰‘“L¼"ï “¸†Zdâ'ÿýl#†Zdb䛆Zdbå‹dâ™9ÉÄ-2±òM2±‰LüäNâj‘‰‘“Ll"#'™ØE&V¾I&n‘‰‘“LÜ"+?$ÈÄÈI&‘‰‘“L<"8†Zdbä$»ÈÄÈI&v‘‰‘“L"+$‡ÈÄÊÉÄ#2±òK2ñŠLŒœdâ™9ÉÄ+2ñN:‰ÿê?/™ÿê Ï6b¨E&F~h¨E&V¾H&.‘‰‘“LÜ"+ß$›ÈÄ;é$®¡™9ÉÄ&2±òN2±‹L¬|“LÜ"#'™xD&V~H&‘‰‘“L<"#'™xD&Þ 'q µÈÄÈI&v‘‰‘“Lì"+$‡ÈÄÈI&‘‰•’‰Wdbå—dâ™9ÉÄ+21r’‰Wdâ]t×P‹LŒ¼ÓP‹LŒüÒP‹L¬|‘L\"#'™¸E&V¾I&6‘‰wÑI\C-21r’‰]dbådb™Xù&™¸E&V~H&‘‰‘“L<"#'™xD&FN2ñˆL¼ Nâj‘‰‘“Lì"#'™8D&V>H&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&ÞM'q µÈÄÈ µÈÄÈI&6‘‰•/’‰Kdbå›dâ™9ÉÄ&2ñn:‰k¨E&FN2±‹L¬¼“Lì"+ß$ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰wÃIC-21r’‰]dbåƒdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄ{è$®¡™ù¤¡™Xy#™ØD&V¾H&n‘‰•o’‰[dbä$›ÈÄ{è$®¡™9ÉÄ.2±òN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™9ÉÄ+2ñ8‰c¨E&FN2qˆL¬|L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™x/Ä5Ô"#_4Ô"+o$›ÈÄÊ7ÉÄ-21r’‰[dbä$›ÈÄ{é$®¡™9ÉÄ.2±òN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù%™xE&Þ 'q µÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L|"¸†Zdb䛆Zdbådb™Xù&™¸E&FN2q‹L¬üLl"¸†Zdbä$»ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Wdbå—dâ™xœÄ5ÔCdbåƒdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÊÉÄ'2ñýÐI\C-21òCC-2±òF2±‰L¬|“LÜ"#'™xD&V~H&6‘‰ï‡Nâj‘‰•w’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&^‘‰•_’‰Wdâ'ÿ½Ç1Ô"#'™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ'2±òG2ñ‰L|Nâj‘‰‘_j‘‰•7’‰Mdbå›dâ™9ÉÄ#2±òC2±‰L|NâÏPw‘‰•w’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÊ/ÉÄ+21r’‰Wdâ'ÿ½Ç1Ô"#'™8D&FN2qˆLŒœdâ™9ÉÄ)2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰L|Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™øÉÿœÄ5Ô"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñŠL¬ü’L¼"#'™xE&¾'q µÈÄÈI&‘‰‘“L"#'™8D&V>I&N‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'21r’‰Odât×P‹L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“L<"+?$»ÈÄOþç$®¡™9ÉÄ.21r’‰Cdbå‡dâ™9ÉÄ#2±òK2ñŠLŒœdâ™9ÉÄ+2ñ 8‰c¨E&FN2qˆLŒœdâ™9ÉÄ)2±òI2qŠL¬ü’L¼"+$ŸÈÄÈI&>‘‰‘“L|"ߤ“ø3ÔMdbådb™9ÉÄ&2±òM2q‹LŒœdâ™Xù!™ØE&¾I'q µÈÄÈI&v‘‰•’‰Cdbå‡dâ™9ÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ+2ñM8‰c¨E&FN2qˆLŒœdâ™Xù$™8E&FN2qŠL¬ü’L|"+$ŸÈÄÈI&>‘‰‘“L|"ߢ“¸†Zdbä$›ÈÄÈI&6‘‰•o’‰[dbä$ÈÄÊÉÄ.2ñ-:‰k¨E&FN2qˆL¬|L"+?$ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰oÁIC-21r’‰Cdbä$§ÈÄÊ'ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä$ŸÈÄ·é$®¡™9ÉÄ&21r’‰]dbå›dâ™Xù!™xD&FN2±‹L|›Nâj‘‰‘“L"+$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰WdâÛpÇP‹LŒœdâ™Xù$™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'2ñ:‰k¨E&FN2±‰L¬¼“Lì"+ß$ÈÄÊÉÄ#21r’‰]dâ;t×P‹LŒœdâ™Xù ™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠLŒœdâ™øœÄ1Ô"#'™8E&V>I&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰L|—Nâj‘‰‘“Ll"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$»ÈÄwé$®¡™9ÉÄ!2±òA2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™Xù#™øD&¾ 'q µÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘ƒLl?ùãýêG'q µÈÄÈI&6‘‰•w’‰]dbå‡dâ™9ÉÄ#2±òK2±‹L|Nâj‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&>‘‰•?’‰Odâ{p×PO‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"?ù¯=þg¨ õ'ú{×P³LÌœdbc™y'™ØY&F~H&–‰™“L¼,#¿$;ËÄÊÿœÄ5Ô,#$ËÄÌI&–‰‘_’‰—ebæ$/ËÄÌI&^–‰™“L|,#$ËÄÊïq 5ËÄÌI&N–‰™“Lœ,3'™8Y&fN2q²LŒü‘L|,3'™øX&f2ñß þw¨+ÿµÇÿ u—¡np×PêöýÙF õ³¡þ/ï$û²¡nßOâêiCÝà}] u³¡þ/¿$ûµ¡np†züØP7x¶QC½m¨?9ÉÄqm¨Û÷“8†zÙP·ï'q õ±¡nßOâêgCݾÿvCÝm¨?9ÉÄ7m¨Û÷“8†ºÛP·ï'b¨§ uûú+qõ¶¡nßNâ†úÚPr’‰ëdžº}?‰c¨ uûzçP?êöõ$þg¨› uå†zÈPw8‰k¨¯ uÿþl£†ºÿØPÿ—w’‰}ÛP÷ï'q õ²¡î𾮆ºÛPÿ—_’‰ýÙPw8‰k¨› u‡g5Ôdžú““Lφº?‰c¨· uÿ~ÇP_êþý$®¡~?6Ôýûo1ÔÆú““L|ˆº?‰c¨‡ uÿþp"†zÙP÷¯¿çPêþí$þg¨Ÿ õù"™¸š uÿ~ÇP_êþõ$®¡þý+ñ¯¡î_O↺ËPW>h¨§ õ€“¸†úÙPïÏ6b¨› õ''™Ø õø~ÇPoêïëj¨‡ õù%™8~l¨œÄ5Ô݆zÀ³êkCýÉI&Îêñý$Ž¡>6ÔãûICýl¨Ç÷“8†ºÙPï¿]ÄPOêON2ñmêñý$Ž¡ž6ÔãûÉêmC=¾þJœC}m¨Ç·“8‡zýØPÿ—/’‰«ÛPï'q õ³¡_O↺ÉP¯'ñ?C=d¨+Ÿ4ÔK†zÂIüêþcC=¿?Ûˆ¡î6ÔŸœdb¿6ÔóûIC}l¨'¼¯«¡ž6Ôÿå—dâh6ÔNâêaC=áÙF õ³¡þ/Ÿ$g³¡žßOâêkC=¿ŸÄ5Ôïdžz~?‰c¨» õüþÛE õ²¡þä$ß±¡žßOâêeC=¿?œˆ¡>6Ôóë¯Ä9Ôφz~;‰ÿêfCýÉI&®aC=¿ŸÄŸ¡þ=Á¿†z~=‰ÿê.C=¿žÄÿ õ”¡®|ÑPoê'q u³¡^ߟmÄPêON2±?êõý$Ž¡¾6Ô Þ×ÕP/êÿòK2qtê'q õ´¡^ðlã3Ôódžú¿|’LœÝ†z}?‰c¨Ÿ õú~ÇP7êõý$Ž¡6Ôëûo1ÔÛ†ú““L|׆z}?‰c¨· õúþp"†úÚP¯¯¿ÇP¯êõí$þg¨» õ''™¸¦ õú~çP7êõõ$þg¨‡ õúzÿ3ÔK†ºòMC}d¨7œÄ5Ô݆z¶C=m¨?9ÉÄñcC½¿ŸÄ1ÔφzÃûºêmCýÉI&ŽaC½á$®¡^6ÔžmÔP7êÿòI2qêýý$®¡~?6ÔûûICÝm¨÷÷“8†zÚPïï¿]ÄPêON2ñ=êýý$Ž¡>6ÔûûÉêgC½¿þJœCÝl¨÷·“øŸ¡6ÔŸœdâZ6ÔûûIœCÝe¨÷דøŸ¡ž2ÔûëIüÏPoêÊ õ•¡>p×PêóýÙF õ²¡þ/$G³¡>ßOâêûcC}à}] õ±¡þä$Ç´¡>p×PoêÏ6j¨» õù$™8§ õù~ÇP7êóý$Ž¡6ÔçûIC½l¨Ï÷ß.b¨¯ õ'™ø~~l¨Ï÷“8†úÚPŸï'j¨× õùú+qu·¡>ßNâ†zÚPr’‰kÛPŸï'qõ¡>_Oâ†zÉPŸ¯'ñ?C}d¨+¿4ÔO†úÂI\C=m¨ï÷g1ÔÛ†ú¿|L݆ú~?‰c¨› õ…÷u5Ô׆ú““LˆúÂI\C}l¨/<Û¨¡6Ôÿå“dâ\6Ô÷ûICÝm¨ï÷“8†zÚPßï'q õ¶¡¾ß»ˆ¡~6ÔÿÏïq u³¡¾ßOâêgC}¿?œˆ¡n6Ô÷ë¯Ä9ÔÆú~;‰ÿêeCýÉI&®cC}¿ŸÄ9ÔS†ú~=‰ÿê-C}¿žÄÿ õ•¡®üÁP·ê'q õ²¡~ߟmÄPêÿòA2q ê÷ý$Ž¡î6ÔÞ×ÕP?êÿòG2qlê'q õµ¡~ðl£†zÚPÿ—O’‰sÛP¿ï'q õ°¡~ßOâêeCý¾ŸÄ1Ôdžú}ÿíâ3Ô¿'ø×P¿ÿ†ºÑPwê÷ý$®¡^?6ÔïûÉênCý¾þJœC=m¨ß·“øŸ¡Þ6ÔŸœdâº6ÔïûIœC½d¨ßדøŸ¡>2ÔïëIüÏP?êOÞH&6‘‰íNâj“‰•“Lì&ÿÇ×½Ü8–QuIü“þ;6³)fJ͘M]äèñ oÞH&6“‰7ß$·ÉÄÈI&“‰7?$›ÉÄò“8†ÚdâÍ;ÉÄn21r’‰ÝdâÍÉÄc21r’‰Çdbä$ÉÄÈ µÉÄ¿üwÓP›L¼ù ™8L&FN2q˜LŒœdâ0™9ÉÄa21r’‰Ãdbù¼Oâ<Ô“‡:勆zóP§üÀP‘‰‘’‰Edb)pÇP›LŒœdb5™xóF2±™L¼ù&™¸M&FN2ñ˜L¼ù!™ØL&–'ñên2ñædb7™9ÉÄn2ñæ‡dâ1™9ÉÄc21r’‰Çdâ_þÏáCm21òFCm2ñæƒdâ0™9ÉÄa21r’‰Ãdbä$‡ÉÄÈI&N“‰¥¼Oâ<ÔK†º2Ôåy µÈÄ”“L,"K…“8†Údbä$›ÉÄ›7’‰ÍdâÍ7ÉÄm21r’‰ÇdâÍÉÄf2ñ/ÿç$Ž¡6™9ÉÄn21r’‰ÝdâÍÉÄc21r’‰Çdbä 'øg¨ëû·‹4Ô&#ï4Ô&o>H&“‰‘“L&#'™8L&FN2q˜L¼ù$™8M&–ú>‰óPoêú<‰óP‘‰‘’‰EdbÊI&‘‰¥ÁICm2ñædb3™9ÉÄf2ñæ›dâ6™9ÉÄc2ñæ‡db7™ø—ÿsÇP›LŒœdb7™9ÉÄa2ñæ‡dâ1™9ÉÄc2ñ/ÿÝã4Ô&#¯4Ô&#4Ô&o>H&“‰‘“L&#'™8L&FN2qšL¼ù$™8M&–ö>‰óPêö<‰¿†ZdbÊI&‘‰)'™XD&–'ñêf2ñædb3™9ÉÄf2ñæ›dâ6™9ÉÄc2ñæ‡db7™X:œÄ1Ô&#'™ØM&Þ|L&o~H&“‰‘ƒLüç…Û÷P÷÷Iœ†Údbä†Údb䓆ÚdâÍÉÄa21r’‰Ãdbä$‡ÉÄ›O’‰Ódbä$§ÉÄÒß'qê"21òB2±ˆLL9ÉÄ"21å$‹ÈÄ2à$Ž¡6™9ÉÄf21r’‰ÍdâÍ7ÉÄm21r’‰ÇdâÍÉÄn2± 8‰c¨M&FN2q˜L¼ù ™8L&ÞüL<&ÿò_ß¡6™y¥¡6™y§¡6™ù¢¡6™xóA2q˜LŒœdâ0™9ÉÄi2ñæ“dâ4™9ÉÄi2±Œ÷Iœ‡ZdbÊI&‘‰)'™XD&¦œdb™X&œÄ1Ô&#'™ØL&FN2±›L¼ù&™¸M&ÞüL<&#'™ØM&– 'q µÉÄÈI&“‰7$‡ÉÄ›ú*ô1™ø—ÿûâøµÉÄÈ µÉÄÈ µÉÄÈ7 µÉÄ›’‰Ãdbä$‡ÉÄ›O’‰Ódbä$§ÉÄÈI&N“‰e¾Oâ<Ô"SN2±ˆLL9ÉÄ"21å$‹ÈIJà$Ž¡6™9ÉÄf2ñædb7™xóM2ñ˜L¼ù!™xL&FN2±›L, Nâj“‰‘“L&o>H&“‰ù?è#†Údb䕆Údbä†Údb䓆Údbä$‹ÉÄ›’‰Ãdbä$§ÉÄ›O’‰Ódbä$§ÉÄÈI&N“‰e½Oâ<Ô"SN2±ˆLL9ÉÄ"21å$‹ÈIJá$Ž¡6™9ÉÄf2ñædb7™xóC2ñ˜LŒœdâ1™9ÉÄn2±l8‰c¨M&FN2q˜L¼ù ™8L&–ý>‰ÓP›LŒ¼ÑP›LŒ|ÐP›LŒ|ÑP›L¼y!™XL&Þ|L&o>I&N“‰‘“Lœ&#'™8M&FN2qšL,û}ç¡™˜r’‰EdbÊI&‘‰)'™XE&–'q µÉÄÈI&6“‰7ï$»ÉÄ›’‰Çdbä$ÉÄ¿|H&v“‰7ï$»ÉÄÈI&“‰7$‡ÉÄrÞ'qj“‰‘wj“‰‘Oj“‰‘“L,&o^H&“‰7$§ÉÄ›O’‰Ódbä$§ÉÄÈI&N“‰‘“Lœ&ËyŸÄy¨E&¦œdb™˜r’‰Edbä•db™X?pÇP›LŒœdb3™xóN2±›L¼ù!™xL&F2ñw‚¿‡ú/ß’‰ÝdâÍ;ÉÄn2ñæƒdâ0™9ÉÄa2±~Þ'qj“‰‘j“‰‘/j“‰‘“L,&o^H&“‰7Ÿ$§ÉÄÈI&N“‰‘“Lœ&#'™8M&FN2qšL¬Ÿ÷Iœ‡ZdbÊI&‘‰)'™XE&F^I&V‘‰µÀICm21r’‰ÍdâÍ;ÉÄn2ñæ‡dâ1™ù ¡6™ø—ïÉÄn2ñædâ0™xóA2q˜LŒœdâ0™XËû$NCm21òICm21òMCm2ñæ…db1™9ÉÄb2ñæ“dâ4™9ÉÄi21r’‰Ódbä$§ÉÄÈéô2™XËû$ÎC-21å$‹ÈÄÈ+ÉÄ*21å$«ÈÄZá$Ž¡6™9ÉÄn2ñædb7™xóC2ñ˜LŒ|ÒP›LüË÷‡db7™xóA2q˜LŒœdâ0™9ÉÄa2±Ö÷Iœ†Údb䋆Údbä$‹ÉÄ›’‰Ådbä$‹ÉÄ›O’‰Ódbä$§ÉÄÈI&N“‰‘“Lœ&o¾èô2™Xëû$ÎC-21å$«ÈÄÈ+ÉÄ*21å$«ÈÄÚà$Ž¡6™xóN2±›LŒœdb7™xóC2ñ˜LŒ|ÑP›LüË÷‡dâ0™xóA2q˜LŒœdâ0™9ÉÄi2±¶÷Iœ†Údb䛆ÚdâÍ ÉÄb21r’‰Ådbä$‹ÉÄ›O’‰Ódbä$§ÉÄÈI&N“‰‘“L\&o¾èô2™XÛû$ÎC-21òJ2±ŠLL9ÉÄ*21å$«ÈÄÚá$¾CÝM&Þ¼“Lì&#'™ØM&ÞüL<&#ß4Ô&ÿòý!™8L&Þ|L&#'™8L&Þ|’Lœ&kŸÄi¨M&FN2±˜L¼y!™XL&FN2±˜LŒœdb1™xóI2qšLŒœdâ4™9ÉÄi2ñæ‹dâ2™9}ƒ^&kŸÄi¨«ÈÄÈ+ÉÄ*21å$«ÈÄ”“L¬"뀓8†Údbä$»ÉÄÈI&v“‰7?$ÉÄÈ µÉÄ¿|H&“‰7$‡ÉÄÈI&N“‰7Ÿ$§ÉÄ:Þ'qj“‰7/$‹ÉÄÈI&“‰‘“L,&#'™XL&Þ|’Lœ&#'™8M&FN2q™L¼ù"™¸L&FNß —ÉÄ:Þ'qj‘‰)'™XE&¦œdb™˜r’‰UdbpÇP›LŒœdb7™9ÉÄa2ñæ‡dâ1™ø—ÿó¾.†Údbä$‡ÉÄ›’‰Ãdbä$§ÉÄ›O’‰Ódbï“8þâŠÉÄ›’‰Ådbä$‹ÉÄÈI&“‰‘“L,&o>I&N“‰‘“Lœ&o¾H&.“‰‘“L\&#§oÐËdbï“8µÈÄ”“L¬"SN2±ŠLL9ÉÄ*2±.8‰c¨M&FN2±›L¼ù ™8L&Þü€LüàŸ¡^ð¾.†Údbä$‡ÉÄ›’‰Ãdbä$§ÉÄ›O’‰Ódâ_þúˆ¡6™9ÉÄb21r’‰Ådbä$‹ÉÄÈI&V“‰7Ÿ$§ÉÄÈI&.“‰7_$—ÉÄÈI&.“‰‘Ó7èe2±®÷Iœ‡ZdbÊI&V‘‰)'™XE&¦œdb™X7œÄ1Ô&#'™ØM&Þ|L&ÿòÞ;ÇP›LŒ¼ÒP›LŒœdâ0™xóA2q˜LŒœdâ4™xóI2qšL¬û}§¡6™9ÉÄb21r’‰Ådbä$‹ÉÄ›W’‰ÕdâÍ'ÉÄi2ñæ‹dâ2™9ÉÄe21r’‰Ëdbäô z™L¬û}ç¡™˜r’‰UdbÊI&V‘‰)'™ØD&Ö'q µÉÄÈI&v“‰7$‡ÉÄzÞ'qj“‰‘7j“‰7/$‡ÉÄ›’‰Ãdbä$§ÉÄ›O’‰Ódb=ï“8 µÉÄÈI&“‰‘“L,&#'™XM&Þ¼’L¬&o>I&.“‰7_$—ÉÄÈI&.“‰‘“L\&#§oÐËdb=ï“8µÈÄ”“L¬"SN2±ŠLŒ¼‘Ll"ÛNâj“‰‘“Lì&o>H&“‰íó>‰ÓP›LŒœdb1™xóB2q˜L¼ù ™8L&Þ|’Lœ&#'™8M&¶Ïû$NCm21r’‰Ådbä$‹ÉÄÈI&V“‰7¯$«ÉÄ›/’‰Ëdbä$—ÉÄÈI&.“‰‘“L\&#§oÐËdbû¼Oâ<Ô"SN2±ŠLL9ÉÄ&21òF2±‰LlNâj“‰‘“Lì&o>H&“‰­¼Oâ4Ô&#'™XL&Þ¼L&o>H&N“‰7Ÿ$§ÉÄÈI&N“‰­¼Oâ4Ô&#'™XL&FN2±˜L¼y%™XM&FN2±šL¼ù"™¸L&FN2q™LŒœdâ2™9ÉÄe21rú½M&¶ò>‰óP‹LL9ÉÄ*21òF2±‰LL9ÉÄ&2±U8‰c¨M&FN2q˜L¼ù ™8L&¶ú>‰ÓP›LŒœdb1™xóB2q˜L¼ù$™8M&FN2qšLŒœdâ4™Øêû$NCm21r’‰Ådbä$«ÉÄ›W’‰Õdbä$«ÉÄ›/’‰Ëdbä$—ÉÄÈI&.“‰‘“L\&o¾éô6™Øêû$ÎC-21å$›ÈÄÈÉÄ&21å$›ÈÄÖà$Ž¡6™xóA2q˜LŒœdâ0™ØÚû$NCm21r’‰ÅdâÍ ÉÄi2ñæ“dâ4™9ÉÄi21r’‰Ëdbkï“8 µÉÄÈI&“‰7¯$«ÉÄÈI&V“‰‘“L¬&o¾H&.“‰‘“L\&#'™¸L&FN2q›L¼ù¦oÐÛdbkï“8µÈÄÈÉÄ&21å$›ÈÄ”“Ll"[‡“øõ0™xóA2q˜LŒœdâ0™Øúû$NCm21r’‰ÅdâÍ ÉÄi2ñæ“dâ4™9ÉÄi2ñæ‹dâ2™Øúû$NCm21r’‰ÕdâÍ+ÉÄj21r’‰Õdbä$«ÉÄ›/’‰Ëdbä$—ÉÄÈI&.“‰7ß$·ÉÄÈéô6™Øúû$NCÝD&FÞH&6‘‰)'™ØD&¦œdb™ØœÄ1Ô&#'™8L&FN2q˜Llã}§¡6™9ÉÄb2ñæ…dâ4™xóI2qšLŒœdâ2™xóE2q™Llã}§¡6™xóJ2±šLŒœdb5™9ÉÄj21r’‰ÕdâÍÉÄe21r’‰Ëdbä$·ÉÄ›o’‰Ûdbäô z›Llã}ç¡™˜r’‰MdbÊI&6‘‰)'™ØD&¶ 'q µÉÄÈI&“‰‘“Lœ&Û|ŸÄi¨M&Þ¼L,&#'™8M&Þ|’Lœ&#'™¸L&Þ|‘L\&Û|ŸÄñWM&Þ¼’L¬&#'™XM&FN2±šLŒœdb5™xóE2q™LŒœdâ2™xóM2q›LŒœdâ6™9}ƒÞ&Û|ŸÄy¨E&¦œdb™˜r’‰MdbÊI&6‘‰mÁICm21r’‰ÃdâÍ'ÉÄi2±­÷IC]L&Þ¼L,&#'™8M&Þ|’Lœ&#'™¸L&Þ|‘L\&ÿòÐG µÉÄÈI&V“‰‘“L¬&#'™XM&FN2±™L¼ù"™¸L&FN2q›L¼ù&™¸M&FN2q›LŒœ¾Ao“‰m½Oâ<Ô"SN2±‰LL9ÉÄ&21å$›ÈĶá$Ž¡6™9ÉÄa2ñæ“dâ4™ø—ÿóÞ9†Údbä$‹ÉÄÈI&N“‰7Ÿ$§ÉÄÈI&.“‰7_$—ÉĶß'qj“‰‘“L¬&#'™XM&FN2±šL¼y#™ØL&Þ|‘L\&o¾I&n“‰‘“LÜ&#'™¸M&FNß ·ÉĶß'qj‘‰)'™ØD&¦œdb™˜r’‰]db;pÇP›LŒœdâ0™xóI2qšLlç}§¡6™9ÉÄb2ñæ•dâ4™xóI2qšLŒœdâ2™xóE2q™Llç}§¡6™9ÉÄj21r’‰Õdbä$›ÉÄ›7’‰ÍdâÍÉÄm2ñæ›dâ6™9ÉÄm21r’‰Ûdbäô z›Llç}ç¡™˜r’‰MdbÊI&6‘‰‘w’‰]dbÿÀICm21r’‰ÃdâÍ'ÉÄi2±Þ'qj“‰‘“L¬&o^I&N“‰7Ÿ$§ÉÄ›/’‰Ëdbä$—ÉÄþyŸÄi¨M&FN2±šLŒœdb5™9ÉÄf2ñædb3™xóM2q›LŒœdâ6™9ÉÄm21r’‰Ûdbäô z›LìŸ÷Iœ‡ZdbÊI&6‘‰)'™ØE&FÞI&v‘‰½ÀICm21r’‰ÃdâÍ'ÉÄi2±—÷Iœ†Údbä$«ÉÄ›W’‰ÓdâÍ'ÉÄe2ñæ‹dâ2™9ÉÄe2±—÷Iœ†Údbä$«ÉÄÈI&V“‰7o$›ÉÄÈI&6“‰7ß$·ÉÄÈI&n“‰‘“LÜ&#'™¸M&FNß ÉÄ^Þ'qj‘‰)'™ØD&FÞI&v‘‰)'™ØE&ö 'q µÉÄÈI&N“‰7Ÿ$§ÉÄ^ß'qj“‰‘“L¬&o^I&N“‰7_$—ÉÄÈI&.“‰‘“L\&{}ŸÄi¨M&FN2±šLŒœdb3™xóF2±™LŒœdb3™xóM2q›LŒœdâ6™9ÉÄm21r’‰ÛdâÍ}ƒ>&{}ŸÄy¨E&¦œdb™y'™ØE&¦œdb™ØœÄ1Ô&o>I&N“‰‘“Lœ&{{ŸÄi¨M&FN2±šL¼y%™¸L&Þ|‘L\&#'™¸L&FN2q›Lìí}§¡6™9ÉÄj2ñædb3™9ÉÄf21r’‰ÍdâÍ7ÉÄm21r’‰Ûdbä$·ÉÄÈI&“‰7?ô ú˜Lìí}ç¡™y'™ØE&¦œdb™˜r’‰]dbïpß¡ž&o>I&N“‰‘“Lœ&{ŸÄi¨M&FN2±šL¼y%™¸L&Þ|‘L\&#'™¸L&Þ|“LÜ&{ŸÄi¨M&FN2±™L¼y#™ØL&FN2±™LŒœdb3™xóM2q›LŒœdâ6™9ÉÄm2ñæ‡dâ1™9}ƒ>&{ŸÄi¨»ÈÄÈ;ÉÄ.21å$»ÈÄ”“Lì"û€“8†Údbä$§ÉÄÈI&N“‰}¼Oâ4Ô&#'™XM&Þ¼’L\&o¾H&.“‰‘“LÜ&o¾I&n“‰}¼Oâ4Ô&oÞH&6“‰‘“Ll&#'™ØL&FN2±™L¼ù&™¸M&FN2q›LŒœdâ1™xóC2ñ˜LŒœ¾A“‰}¼Oâ<Ô"SN2±‹LL9ÉÄ.21å$»ÈÄ>á$Ž¡6™9ÉÄi21r’‰ËdbŸï“8 µÉÄ›W’‰Õdbä$—ÉÄ›/’‰Ëdbä$·ÉÄ›o’‰ÛdbŸï“8þâšÉÄ›7’‰Ídbä$›ÉÄÈI&6“‰‘“Ll&o¾I&n“‰‘“LÜ&o~H&“‰‘“L<&#§oÐÇdbŸï“8µÈÄ”“Lì"SN2±‹LL9ÉÄ.2±/8‰c¨M&FN2qšL¼ù"™¸L&öõ>‰c¨«ÉÄ›W’‰Õdbä$—ÉÄ›/’‰Ëdbä$·ÉÄ›o’‰Ûdâ_þúˆ¡6™9ÉÄf21r’‰Ídbä$›ÉÄÈI&v“‰7ß$·ÉÄÈI&“‰7?$ÉÄÈI&“‰‘Ó7èc2±¯÷Iœ‡ZdbÊI&v‘‰)'™ØE&¦œdb™Ø7œÄ1Ô&#'™8M&Þ|‘L\&ÿòÞ;ÇP›LŒœdb5™9ÉÄe2ñæ‹dâ2™9ÉÄm2ñæ›dâ6™Ø÷û$NCm21r’‰Ídbä$›ÉÄÈI&6“‰7ï$»ÉÄ›o’‰ÛdâÍÉÄc21r’‰Çdbä$ÉÄÈéô1™Ø÷û$ÎC-21å$»ÈÄ”“Lì"SN2qˆLìNâj“‰‘“Lœ&o¾H&.“‰ý¼Oâ4Ô&#'™XM&Þ¼‘L\&o¾H&.“‰‘“LÜ&o¾I&n“‰ý¼Oâ4Ô&#'™ØL&FN2±™LŒœdb7™xóN2±›L¼ù&™xL&ÞüL<&#'™xL&FN2ñ˜LŒœ¾A“‰ý¼Oâ<Ô"SN2±‹LL9ÉÄ.21òA2qˆL8‰c¨M&FN2qšL¼ù"™¸L&ŽÏû$NCm21r’‰ÍdâÍÉÄe2ñæ‹dâ2™xóM2q›LŒœdâ6™8>ï“8 µÉÄÈI&6“‰‘“Ll&#'™ØM&Þ¼“Lì&o~H&“‰‘“L<&#'™xL&FN2ñ˜LŒœ¾A“‰ãó>‰óP‹LL9ÉÄ.21å$‡ÈÄÈÉÄ!2q8‰c¨M&FN2qšL¼ù"™¸L&Žò>‰ÓP›LŒœdb3™xóF2q™L¼ù"™¸M&Þ|“LÜ&#'™¸M&Žò>‰ÓP›LŒœdb3™9ÉÄf2ñædb7™9ÉÄn2ñæ‡dâ1™9ÉÄc21r’‰Çdbä$ÉÄÈátù|>2Ôå}ç¡™˜r’‰]dbäƒd♘r’‰Cdâ¨pÇP›LŒœdâ2™xóE2q™Lõ}§¡6™9ÉÄf2ñædâ2™xóM2q›LŒœdâ6™9ÉÄm2qÔ÷Iœ†Údbä$›ÉÄÈI&v“‰7ï$»ÉÄÈI&v“‰7?$ÉÄÈI&“‰‘“L<&#'™xL&Ž«ó~ö8 u‘¡®ï“8µÈÄ”“L"#$‡ÈÄ”“L"Gƒ“8†ÚdâÍÉÄe21r’‰Ëdâhï“8 µÉÄÈI&6“‰7o$·ÉÄ›o’‰Ûdbä$·ÉÄÈI&“‰£½Oâ4Ô&#'™ØL&Þ¼“Lì&#'™ØM&FN2±›L¼ù!™xL&FN2ñ˜LŒœdâ1™9ÈÄ&x½þãÿÙã4ÔU†º½Oâ<Ô"#$‡ÈÄ”“L"SN2qˆLNâ;ÔËdâÍÉÄe21r’‰Ëdâèï“8 µÉÄÈI&6“‰7o$·ÉÄ›o’‰Ûdbä$·ÉÄ›’‰Çdâèï“8 µÉÄÈI&v“‰7ï$»ÉÄÈI&v“‰‘“Lì&o~H&“‰‘“L<&#'™xL&Žþ:‰¿‡ºÈPG^i¨› uŸÄi¨‡ÈÄÈÉÄ!21å$‡ÈÄ”“L"Ç€“8†Údbä$—ÉÄÈI&.“‰c¼Oâ4Ô&#'™ØL&Þ¼‘LÜ&o¾I&n“‰‘“L<&o~H&“‰c¼Oâ4Ô&oÞI&v“‰‘“Lì&#'™ØM&FN2±›L¼ù!™xL&FN2ñ˜LŒdâïIü3Ôãuu•¡Ž¼ÑPwêñ>‰óP‹LL9ÉÄ!21å$‡ÈÄ”“L"Ç„“8†Údbä$—ÉÄÈI&n“‰c¾Oâ4Ô&oÞH&6“‰‘“LÜ&o¾I&n“‰‘“L<&o~H&“‰c¾Oâên2ñædb7™9ÉÄn21r’‰Ýdbä$»ÉÄ›’‰Çdbä$ÉÄ1Ÿ¿ u‘¡ž¯“ø{¨› uä†zÈPÏ÷Iœ‡ZdbÊI&‘‰)'™8D&¦œdâ™8œÄ1Ô&#'™¸L&Þ|“LÜ&ÇzŸÄ1ÔÍdâÍÉÄf21r’‰ÛdâÍ7ÉÄm21r’‰ÇdâÍÉÄc2ñ/ÿ}ÄP›LŒœdb7™9ÉÄn21r’‰Ýdbä$‡ÉÄ›’‰Çdbä &øw¨×óW⯡®2Ôëuu—¡Ž|ÐPOêõ>‰óP‹LL9ÉÄ!21å$‡ÈÄ”“L"dž“8†Údbä$—ÉÄ›o’‰Ûdâ_þÏ{çj“‰‘“Ll&#'™¸M&Þ|“LÜ&#'™xL&ÞüL<&Ç~ŸÄi¨M&FN2±›LŒœdb7™9ÉÄn2ñæƒdâ0™xóC2ñ˜Lûýp"u‘¡ÞÏ_‰¿†ºÉPï×Iü=ÔC†:òIC½d¨÷û$ÎC-21å$‡ÈÄ”“L"SN2qŠLNâj“‰‘“L\&o¾I&n“‰ã¼Oâ4Ô&#'™ØL&Þ¼“LÜ&o¾I&n“‰‘“L<&o~H&“‰ã¼Oâ4Ô&#'™ØM&FN2±›LŒœdâ0™xóA2q˜L¼ù™ø;Á?C}Þ'òPWêóü•øk¨» õyÄßC=e¨#_4Ô[†ú¼Oâ<Ô"SN2qˆLL9ÉÄ!21òI2qŠLœ8‰c¨M&FN2q™L¼ù&™¸M&ÎÏû$NCm21r’‰ÝdâÍ;ÉÄm2ñæ›dâ6™xóC2ñ˜LŒœdâ1™8?ï“8 µÉÄÈI&v“‰‘“Lì&#'™8L&Þ|L&çç}ç¡.<Ô)¯4Ô‡:å†zðP§|ÒP/ê”oêÃCù ™8D&¦œd♘r’‰Sdbä“dâ™8 œÄ1Ô&#'™¸L&Þ|“LÜ&gyŸÄi¨M&FN2±›L¼y'™¸M&Þ|“L<&o~H&“‰‘“L<&gyŸÄi¨M&FN2±›LŒœdb7™xóA2q˜LŒœdâ0™8Ëû$ÎC]e¨ËûáDê.C]ž¿ õ”¡.¯“ø{¨· u䆺ˆLŒ|L"SN2qˆLŒ|’Lœ"SN2qŠLœNâj“‰‘“LÜ&o¾I&n“‰³¾Oâ4Ô&#'™ØM&Þ¼“LÜ&o~H&“‰‘“L<&#'™xL&Îú>‰ÓP›LŒœdb7™9ÉÄa2ñæƒdâ0™9ÉÄa2qÖ÷Iœ‡ºÉP×÷É<ÔC†º>%þê%C]_'ñ÷Pê›’‰Edbäƒd♘r’‰Sdbä“d♘r’‰SdâlpÇP›L¼ù&™¸M&FN2q›Lœí}§¡6™9ÉÄn2ñædâ1™xóC2ñ˜LŒœdâ1™9ÈÄó1™8Ûû$NCm21r’‰ÝdâÍÉÄa21r’‰Ãdbä$‡ÉÄÙÞ'qê.CÝÞ'òPOêöü•øk¨· u{Ä_C]D&F^H&‘‰‘’‰Cdbä“d♘r’‰SdbÊI&N‘‰³ÃI|‡z›L¼ù&™¸M&FN2q›Lœý}§¡6™9ÉÄn2ñædâ1™xóC2ñ˜LŒœdâ1™ø—ÿ³Ç1Ô&oÞI&v“‰‘“L&o>H&“‰‘“L&#'™8L&Îþ>‰óPêþ~8‘‡zÉP÷ç¯Ä_C}d¨ûë$þj‘‰)'™XD&F>H&N‘‰‘O’‰SdbÊI&N‘‰)'™8E&Î'q µÉÄÈI&n“‰‘“LÜ&çxŸÄi¨M&FN2±›L¼y'™xL&ÞüL<&#™ø;Á?Cý'Ô>…†ÚdâÍ;ÉÄn2ñæƒdâ0™9ÉÄa21r’‰Ãdbä$‡ÉÄ9Þ'qê)C=Þ'òPoêñü•8u™y!™XD&¦œdb™ù$™8E&¦œd♘r’‰SdbÊI&N‘‰sÂICm21r’‰Ûdbä$ÉÄ9ß'qj“‰7ï$»ÉÄÈI&“‰7?$ÉÄÈ' µÉÄ¿üŸ=Ž¡6™xóN2q˜L¼ù ™8L&FN2q˜LŒœdâ0™9ÉÄa2qÎ÷Iœ‡zÉPÏ÷É<ÔG†z>%þj‘‰)'™XD&¦œdb™ù$™8E&¦œd♘r’‰SdbÊI&N‘‰sÁICm21r’‰ÛdâÍÉÄc2q®÷ICÝM&Þ¼“Lì&#'™xL&ÞüL<&#_4Ô&ÿòö8†ÚdâÍÉÄa21r’‰Ãdbä$‡ÉÄÈI&“‰‘“Lœ&çzŸÄy¨· õz?œHC]D&F^H&‘‰)'™XD&¦œdb™ù$™8E&¦œd♘r’‰SdbÊI&N‘‰sÃICm21r’‰ÛdâÍÉÄc2ñ/ÿç½s µÉÄÈI&v“‰‘“L<&o~H&“‰‘oj“‰ù?{Cm2ñæƒdâ0™9ÉÄa21r’‰Ãdbä$‡ÉÄ›O’‰ÓdâÜï“8õ‘¡Þï‡y¨E&¦œdb™˜r’‰EdbÊI&‘‰‘O’‰SdbÊI&N‘‰)'™8E&¦œdâ™8œÄ1Ô&#'™¸M&ÞüL<&çyŸÄi¨M&FN2±›L¼ù ™xL&ÞüL<&#?4Ô&ÿòö8†ÚdâÍÉÄa21r’‰Ãdbä$‡ÉÄÈI&N“‰7Ÿ$§ÉÄyÞ'qê"21òB2±ˆLL9ÉÄ"21å$‹ÈÄ”“L,"#Ÿ$§ÈÄ”“Lœ"SN2qŠLŒ|‘L\"×Nâj“‰‘“LÜ&o~H&“‰ëó>‰ÓP›LŒœdâ0™xóA2ñ˜L¼ù!™xL&þåÿ<Ûˆ¡6™ù¤¡6™xóA2q˜LŒœdâ0™9ÉÄa21r’‰ÓdâÍ'ÉÄi2q}Þ'qj‘‰)'™XD&¦œdb™˜r’‰EdbÊI&‘‰‘O’‰SdbÊI&N‘‰)'™¸D&F¾H&.‘‰«ÀICm21r’‰ÛdâÍÉÄc2q•÷Iœ†Údbä$‡ÉÄ›’‰ÇdâÍÈÄß þêÏ6b¨M&F¾h¨M&Þ|L&#'™8L&FN2q˜L¼ù$™8M&FN2qšL\å}ç¡™˜r’‰EdbÊI&‘‰)'™XD&¦œdb™ù$™8E&¦œdâ™ù"™¸D&¦œd♸*œÄ1Ô&#'™xL&ÞüL<&W}ŸÄi¨M&FN2q˜L¼ù ™xL&þåÿœÄ1Ô&#¯4Ô&#ß4Ô&o>H&“‰‘“L&#'™8M&Þ|’Lœ&#'™8M&®ú>‰óP‹LL9ÉÄ"21å$‹ÈÄ”“L,"#¯$«ÈÄÈ'ÉÄ)21å$—ÈÄÈÉÄ%21å$—ÈÄÕà$Ž¡6™xóC2ñ˜LŒœdâ1™¸Úû$NCm21r’‰ÃdâÍÈÄ^2uƒ“8†Údbä†Údbä$‹ÉÄ›’‰Ãdbä$‡ÉÄ›O’‰Ódbä$§ÉÄÈI&N“‰«½Oâ<Ô"SN2±ˆLL9ÉÄ"21å$«ÈÄÈ+ÉÄ*21òI2qŠLŒ|‘L\"SN2q‰LL9ÉÄ%2qu8‰ïP“‰7?$ÉÄÈI&“‰«¿Oâ4Ô&#'™8L&Þ| j“‰«ÃICm21òNCm2ñæ…db1™xóA2q˜LŒœdâ4™xóI2qšLŒœdâ4™9ÉÄi2qõ÷Iœ‡ZdbÊI&‘‰)'™XD&F^I&V‘‰)'™XE&F>I&.‘‰‘/’‰KdbÊI&.‘‰)'™¸D&®'q µÉÄÈI&“‰‘“L<&×xŸÄi¨M&FN2q˜L¼ù˜4Ô&×€“8†Údbä$‹ÉÄ›’‰ÅdâÍÉÄa2ñæ“dâ4™9ÉÄi21r’‰Ódbä$§ÉÄ5Þ'qj‘‰)'™XD&¦œdb™y%™XE&¦œdb™ù"™¸D&¦œd♘r’‰KdbÊI&.‘‰kÂICm21r’‰Çdbä ÷Çdâšï“8 µÉÄ›’‰Ãdb䋆ÚdâšpÇP›LŒœdb1™xóB2±˜L¼ù ™8M&Þ|’Lœ&#'™8M&FN2qšLŒœdâ4™¸æû$ÎC-21å$‹ÈÄÈ+ÉÄ*21å$«ÈÄ”“L¬"#_$—ÈÄ”“L\"SN2q‰LL9ÉÄ%2q-8‰c¨M&FN2ñ˜LüË÷8 µÉÄ›w’‰ÃdâÍÉÄa21òMCm2q-8‰c¨M&FN2±˜L¼y!™XL&Þ|’Lœ&#'™8M&FN2qšLŒœdâ4™9ÉÄe2q­÷Iœ‡ZdbÊI&V‘‰‘W’‰UdbÊI&V‘‰)'™XE&F¾H&.‘‰)'™¸D&¦œd♘r’‰KdâÚpÇP›LŒœdâ1™ø—ÿîqj“‰7$‡ÉÄÈI&“‰‘j“‰kÃICm21r’‰ÅdâÍ ÉÄb2ñæ“dâ4™9ÉÄi21r’‰Ódbä$§ÉÄ›/’‰ËdâÚï“8µÈÄÈ+ÉÄ*21å$«ÈÄ”“L¬"SN2±ŠLŒ|‘L\"SN2q‰LL9ÉÄ%21å$·ÈÄuà$Ž¡6™9ÉÄc2ñ/ÿÝã4Ô&o>H&“‰‘“L&o>?4Ô&ד8†Údbä$‹ÉÄ›’‰ÅdâÍ'ÉÄi21r’‰Ódbä$§ÉÄÈI&.“‰7_$—ÉÄuÞ'qê*21òJ2±ŠLL9ÉÄ*21å$«ÈÄ”“L¬"#_$—ÈÄ”“L\"SN2q‰LŒ|“LÜ"÷Nâj“‰‘“L<&ÿòß=NCm2ñæƒdâ0™9ÉÄi2ñæ³ÐP›LÜ8‰c¨M&Þ¼L,&#'™XL&Þ|’Lœ&#'™8M&FN2qšLŒœdâ2™xóE2q™LÜŸ÷Iœ‡ZdbÊI&V‘‰)'™XE&¦œdb™˜r’‰Udbä‹d♘r’‰KdbÊI&n‘‰‘o’‰[dâ.pÇP›LŒœdâ1™ø—ÿîqj“‰7$‡ÉÄÈI&N“‰7Ÿ•†Údâ.pß¡.&o^H&“‰‘“L,&o>I&N“‰‘“Lœ&#'™8M&Þ|‘L\&#'™¸L&îò>‰óP‹LL9ÉÄ*21å$«ÈÄ”“L¬"SN2±‰LŒ|‘L\"SN2q‰LŒ|“LÜ"SN2q‹LÜNâj“‰‘ƒLüþLøÏPÿá¾Ï ¡6™xóA2q˜LŒœdâ4™xóÙh¨M&þåÿœÄ1Ô&#'™XL&FN2±˜L¼ù$™8M&FN2qšLŒœdâ2™xóE2q™LŒœdâ2™¸ëû$ÎC-21å$«ÈÄ”“L¬"SN2±ŠLŒ¼‘Ll"#_$—ÈÄ”“LÜ"#ß$·ÈÄ”“LÜ"wƒ“8†Údâ_þûl# µÉÄÈ' µÉÄ›’‰Ãdbä$§ÉÄ›O’‰Ådâ_þÏICm21r’‰Ådbä$«ÉÄ›O’‰Ódbä$§ÉÄ›/’‰Ëdbä$—ÉÄÈI&.“‰»½Oâ<Ô"SN2±ŠLL9ÉÄ*21å$›ÈÄÈÉÄ&21òE2q‰LŒ|“LÜ"SN2q‹LL9ÉÄ-2qw8‰ÿ†úŸ—ÌßCÝßÏ6ÒP›LŒ|ÑP›L¼ù ™8L&FN2qšL¼ù$™XL&î'q µÉÄÈI&“‰7¯$«ÉÄ›O’‰Ódbä$—ÉÄ›/’‰Ëdbä$—ÉÄÈI&.“‰»¿Oâ<Ô"SN2±ŠLL9ÉÄ*21òF2±‰LL9ÉÄ&21òE2q‹LŒ|“LÜ"SN2q‹LL9ÉÄ-2q8‰c¨M&F^i¨M&F¾i¨M&Þ|L&#'™8M&Þ|’L,&÷€“8†Údbä$«ÉÄ›W’‰ÕdâÍ'ÉÄi2ñæ‹dâ2™9ÉÄe21r’‰Ëdbä$—ÉÄ=Þ'qj‘‰)'™XE&¦œdb™y#™ØD&¦œdb™ù&™¸E&¦œd♘r’‰[dbÊI&n‘‰{ÂICm21òFCm21r’‰ÅdâÍÉÄa2ñæ“dâ4™9ÉÄb2qO8‰c¨M&FN2±šL¼y%™XM&Þ|’L\&o¾H&.“‰‘“L\&#'™¸L&FN2q™LÜó}ç¡™˜r’‰Udbädb™˜r’‰MdbÊI&6‘‰‘o’‰[dbÊI&n‘‰)'™¸E&¦œd♸œÄ1Ô&#ï4Ô&o^H&“‰7$§ÉÄ›O’‰Ódbä$‹ÉĽà$Ž¡6™9ÉÄj2ñæ•db5™xóE2q™LŒœdâ2™9ÉÄe21r’‰Ëdbä$·ÉĽÞ'qj‘‰)'™ØD&FÞH&6‘‰)'™ØD&¦œdb™ù&™¸E&¦œd♘r’‰[dbÊI&n‘‰{ÃICm21òACm2ñæ…db1™xóI2qšLŒœdâ4™9ÉÄb2qo8‰c¨M&FN2±šL¼y%™XM&Þ|‘L\&#'™¸L&FN2q™LŒœdâ2™xóM2q›LÜû}ç¡™y#™ØD&¦œdb™˜r’‰MdbÊI&6‘‰‘o’‰[dbÊI&n‘‰)'™¸E&¦œd♸œÄ1Ô&#Ÿ4Ô&o^H&“‰7Ÿ$§ÉÄÈI&N“‰7_$‹ÉÄ}à$Ž¡6™9ÉÄj2ñæ•db5™xóE2q™LŒœdâ2™9ÉÄe21r’‰ÛdâÍ7ÉÄm2qŸ÷Iœ†º‰LŒ¼‘Ll"SN2±‰LL9ÉÄ&21å$›ÈÄÈ7ÉÄ-21å$·ÈÄ”“LÜ"#?$ÈÄó“8†Údb䋆ÚdâÍ ÉÄb2ñæ“dâ4™9ÉÄe2ñæ‹db1™x>pÇP›L¼y%™XM&FN2±šL¼ù"™¸L&FN2q™LŒœdâ2™9ÉÄm2ñæ›dâ6™x>ï“8µÈÄ”“Ll"SN2±‰LL9ÉÄ&21å$›ÈÄÈ7ÉÄ-21å$·ÈÄ”“L<"#?$ÈÄSà$Ž¡6™ù¦¡6™xóB2±˜L¼ù$™8M&FN2q™L¼ù"™XL&ž'ñêj2ñæ•db5™9ÉÄj2ñæ‹dâ2™9ÉÄe21r’‰ËdâÍ7ÉÄm21r’‰Ûdâ)ï“8µÈÄ”“Ll"SN2±‰LL9ÉÄ&21å$»ÈÄÈ7ÉÄ-21å$·ÈÄÈÉÄ#21å$ÈÄSá$Ž¡6™9ÉÄb2ñæ…db1™xóI2qšLŒœdâ2™xóE2±˜LüËÿ9‰c¨M&FN2±šLŒœdb5™xóE2q™LŒœdâ2™9ÉÄm2ñæ›dâ6™9ÉÄm2ñÔ÷Iœ‡ZdbÊI&6‘‰)'™ØD&¦œdb™y'™ØE&F¾I&n‘‰)'™xD&F~H&‘‰)'™xD&ž'q µÉÄ›’‰Ådbä$‹ÉÄ›O’‰Ódbä$—ÉÄ›/’‰Õdâ_þÏICm21r’‰Õdbä$›ÉÄ›/’‰Ëdbä$—ÉÄ›o’‰Ûdbä$·ÉÄÈI&n“‰§½Oâ<Ô"SN2±‰LL9ÉÄ&21å$»ÈÄÈ;ÉÄ.21òM2q‹LŒüL<"SN2ñˆLL9ÉÄ#2ñt8‰ïP“‰7/$‹ÉÄÈI&“‰7Ÿ$§ÉÄÈI&.“‰7_$«ÉÄÓá$Ž¡6™9ÉÄj2ñædb3™xóE2q™LŒœdâ6™xóM2q›LŒœdâ6™9ÉÄm2ñô÷Iœ‡ZdbÊI&6‘‰)'™ØD&FÞI&v‘‰)'™ØE&F¾I&‘‰‘’‰GdbÊI&‘‰)'™xD&ž'q µÉÄÈI&“‰‘“L,&o>I&N“‰‘“L\&o¾H&V“‰gÀICm21r’‰ÍdâÍÉÄf2ñæ‹dâ2™xóM2q›LŒœdâ6™9ÉÄm21r’‰Ûdâï“8µÈÄ”“Ll"SN2±‹LŒ¼“Lì"SN2±‹LŒüL<"SN2ñˆLL9ÉÄ#21å$ÈÄ3á$Ž¡6™9ÉÄb21r’‰ÕdâÍ'ÉÄi2ñæ‹dâ2™9ÉÄj2ñL8‰c¨M&FN2±™L¼y#™ØL&Þ|‘LÜ&o¾I&n“‰‘“LÜ&#'™¸M&FN2q›L<ó}ç¡™˜r’‰Mdbädb™˜r’‰]dbÊI&v‘‰‘’‰GdbÊI&‘‰)'™xD&¦œdâ™xœÄ1Ô&#'™XL&Þ¼’L¬&o>I&.“‰7_$—ÉÄÈI&V“‰gÁICm21r’‰ÍdâÍÉÄf2ñæ›dâ6™9ÉÄm21r’‰Ûdbä$·ÉÄÈI&“‰g½Oâ<Ô"SN2±‹LŒ¼“Lì"SN2±‹LL9ÉÄ.21òC2ñˆLL9ÉÄ#21å$ÈÄ”“L<"φ“8†Údbä$‹ÉÄ›W’‰ÕdâÍÉÄe21r’‰Ëdbä$«Éijá$Ž¡6™9ÉÄf2ñædb3™xóM2q›LŒœdâ6™9ÉÄm21r’‰ÛdâÍÉÄc2ñì÷Iœ‡Zdbädb™˜r’‰]dbÊI&v‘‰)'™ØE&F~H&‘‰)'™xD&¦œd♘r‰å#2ñ8‰c¨M&FN2±˜L¼y%™XM&Þ|‘L\&#'™¸L&Þ|“L¬&Ï“8†Údbä$›ÉÄ›7’‰ÍdâÍ7ÉÄm21r’‰Ûdbä$·ÉÄÈI&“‰7?$ÉÄsÞ'qê.21òN2±‹LL9ÉÄ.21å$»ÈÄ”“Lì"#?$ÈÄ”“L<"SN2ñˆL¼ù÷ 5ËÄ¿èß“8†ZdbÊI&‘‰‘W’‰Udbä‹d♘r’‰[dbä›db™xóNâj‘‰‘7’‰MdbÊI&6‘‰‘o’‰[dbÊI&n‘‰)'™¸E&¦œdâ™ù!™xD&ÞüwóP³LÌ9ÉÄÎ21ç$;ËÄœ“Lì,sN2±³LLù!™xX&æœdâa™˜s‰åÃ21òï=þê*C]à$Ž¡^6Ôåýl# õ±¡þË+ÉÄ:l¨Ëû$NCÝm¨ ¼¯‹¡.6Ôù&™X· u“øuûØPx¶C=m¨oN2±mêò>‰ÓPêò>‰ÓP/êò>‰ÓPêòþí" uµ¡¾9ÉÄÓm¨Ëû$ÎC]e¨ËûáDê.C]ž¿ õ”¡.¯“ø{¨· uä$ÇG†º¼Oâ<ÔK†º2Ôåy u‘¡Ž¼ÒP7ê 'q õ¶¡®ïg1ÔõcCý—W’‰uÚP×÷Iœ†zØPWx_C]m¨ÿòM2±ê 'q u±¡®ðl#†zÙPßœdb;6Ôõ}§¡ž6Ôõ}§¡Þ6Ôõ}ÇPŸ u}ÿv‘†ºÙPßœdâ6Ôõ}ç¡n2Ôõýp"õ¡®Ï_‰¿†zÉP××Iü=ÔG†úæƒdâ(2Ôõ}ç¡Þ2Ôõy§¡þù•øg¨ëó$þê*Cy£¡î2Ô NâêcCÝÞÏ6ÒPꛓL¬Ë†º½Oâ4ÔÓ†ºÁûºêfCý—o’‰ícCÝà$Ž¡®6Ô žmÄPoꛓLìêö>‰ÓP/êö>‰ÓPêö>‰ÓPêöþí" u·¡¾9ÉÄ3m¨Ûû$ÎCÝe¨ÛûáDê)CÝž¿ õ–¡n¯“øk¨ÇG†úæƒdâ¨2Ôí}ç¡>2Ôíy u‘¡nÏ“øk¨› uä†zÈPw8‰ïP× u?ÛHC]m¨oN2±nêþ>‰ÓP/êïëb¨» õ_¾I&¶bCÝá$Ž¡n6ÔžmÄP꿼“Lìņº¿Oâ4ÔÛ†º¿Oâêó±¡îï“8 uµ¡îïß.ÒPꛓL<ˆº¿Oâ<ÔC†º¿Nä¡^2Ôýù+ñ×Pêþ:‰¿‡ºÈPGN2q4êþ>‰c¨&øg¨ûó$þê*CÝŸ'ñ×PwêÈ õ”¡pÇPêñ~¶‘†ºÙPßœdb=6Ôã}§¡Þ6ÔÞ×ÅPê¿|“LlÕ†zÀICÝm¨<Û¸CÝ?6Ôy'™Ø« õxŸÄi¨ õxŸÄi¨‹ õxŸÄi¨› õxÿv‘†zÚPßœdâÙ6Ôã}硞2Ôãýp"õ–¡Ï_‰óP õxÄßC]e¨#'™8º õxŸÄy¨‹ õxžÄ_CÝd¨Çó$þê!Cù¤¡^2ÔNâêjC=ßÏ6ÒPwꛓLlêù>‰ÓPê ïëb¨§ õÍI&¶fC=á$Ž¡6ÔžmÄP꿼“Lì͆z¾Oâê󱡞ï“8 uµ¡žï“8 u·¡žïß.ÒP/ꛓL<džz¾Oâ<ÔK†z¾Nä¡>2Ôóù+ñ×Pêù:‰¿‡ºÉPGN2q êù>‰óPWêù<‰¿†ºËPÏçIü5ÔS†:òEC½e¨œÄ1Ô͆z½Ÿm¤¡6Ôy#™ØŠ õzŸÄ1ÔûcC½à}] õ²¡¾9ÉÄÖm¨œÄ1ÔÓ†zÁ³êjCý—w’‰½ÛP¯÷Iœ†ºØP¯÷Iœ†ºÙP¯÷Iœ†zØP¯÷oi¨· õÍA&þï}d¨×û$ÎC½e¨×ûáDêñ‘¡^Ï_‰¿†ºÊP¯×Iü=Ô]†:r’‰cÊP¯÷Iœ‡ºÉP¯çIü5ÔC†z=O⯡^2Ô‘oê#C½á$Ž¡î6Ôûýl# õ´¡þËÉÄVm¨÷û$NC]l¨7¼¯‹¡Þ6Ô7'™Ø† õ†“8†zÙPox¶CÝl¨ÿòN2±êý>‰ÓPWêý>‰ÓPwêý>‰ÓPOêýþí" õ±¡¾Äì÷Ñê"C½ß'qê#C½ß'òPêýü•øk¨› õ~ÄßC=d¨#'™8– õ~ŸÄy¨» õ~žÄ_C=e¨÷ó$þê-C9ÉÄò‘¡>pÇPêó~¶‘†zÙPÿådbk6Ôç}§¡®6ÔÞ×ÅPê¿üLlÓ†úÀIC½m¨<Ûˆ¡î6Ôy'™Ø§ õyŸÄi¨› õyŸÄi¨‡ õyŸÄi¨— õyÿvq‡úw‚†ú µßDc¨« õyŸÄi¨ÇG†ú¼Nä¡®2Ôçù+ñ×Pwêó:‰¿‡zÊPGN2qlêó>‰óPêó<‰¿†zÉPŸçIü5ÔG†úæ…db™X>pÇP›LŒœdb5™xóF2±™L¼ù&™¸M&FN2ñ˜L¼ù!™ØL&–œÄ1Ô&oÞI&v“‰‘“Lì&o~H&“‰‘“L<&#'™xL&F~p¨ u¹Bí÷ÑêÆCù ™8D&¦œd♘r’‰CdbÊI&‘‰)'™8D&–Ïû$ÎC-21勆ZdbÊI&‘‰‘’‰Edb)pÇP›LŒœdb5™xóF2±™L¼ù&™¸M&FN2ñ˜L¼ù!™ØL&–'ñên2ñædb7™9ÉÄn2ñæ‡dâ1™9ÉÄc21r’‰Çdb)ïß.òPWêÈ u—¡.ï“8µÈÄ”“L"SN2qˆLL9ÉÄ!21å$§ÈÄRÞ'qj‘‰)ß4Ô"#/$‹ÈÄ”“L,"K…“8†Údbä$›ÉÄ›7’‰ÍdâÍ7ÉÄm21r’‰ÇdâÍÉÄf2ñ/ÿç$Ž¡6™9ÉÄn21r’‰ÝdâÍÉÄc21r’‰Çdbä 'øg¨ëû·‹<ÔM†:òNC=d¨ëû$ÎC-21å$‡ÈÄ”“L"SN2qˆLŒ|’Lœ"K}ŸÄy¨E&¦œdb™y!™XD&¦œdb™XœÄ1Ô&oÞH&6“‰‘“Ll&o¾I&n“‰‘“L<&o~H&v“‰ù?'q µÉÄÈI&v“‰‘“L&o~H&“‰‘“L<&K{ŸÄy¨‹ u{ÿv‘‡ºËPG>h¨§ u{ŸÄy¨E&¦œd♘r’‰CdbÊI&N‘‰‘O’‰Sdbiï“8µÈÄÈ ÉÄ"21å$‹ÈÄ”“L,"K‡“øu3™xóF2±™LŒœdb3™xóM2q›LŒœdâ1™xóC2±›L,Nâj“‰‘“Lì&o>H&“‰7?$ÉÄÈA&þóÂí{¨ûû$ÎC]e¨ûû·‹<ÔC†:òIC½d¨ûû$ÎC-21å$‡ÈÄ”“L"#Ÿ$§ÈÄ”“Lœ"KŸÄi¨‹ÈÄÈ ÉÄ"21å$‹ÈÄ”“L,"Ë€“8†Údbä$›ÉÄÈI&6“‰7ß$·ÉÄÈI&“‰7?$»ÉÄ2à$Ž¡6™9ÉÄa2ñæƒdâ0™xóC2ñ˜L,ã}ç¡.2Ôã}ç¡n2ÔãýÛEê)Cù¢¡Þ2Ôã}ç¡™˜r’‰CdbÊI&N‘‰‘O’‰SdbÊI&N‘‰7ÿÝã4Ô"SN2±ˆLL9ÉÄ"21å$‹ÈÄ2á$Ž¡6™9ÉÄf21r’‰ÝdâÍ7ÉÄm2ñæ‡dâ1™9ÉÄn2±L8‰c¨M&FN2q˜L¼ù ™8L&Þü€Lüw‚¿†z¾Oâ<ÔU†z¾Oâ<Ô]†z¾»ÈC½d¨#ß4ÔG†z¾Oâ<Ô"SN2qˆLŒ|’Lœ"SN2qŠLL9ÉÄ)2ñæ¿{œ†ZdbÊI&‘‰)'™XD&¦œdb™XœÄ1Ô&#'™ØL&Þ¼“Lì&o¾I&“‰7?$ÉÄÈI&v“‰eÁICm21r’‰ÃdâÍÉÄa2±¬÷Iœ‡ºÈP¯÷Iœ‡ºÉP¯÷Iœ‡zÈP¯÷oy¨· u䆺ˆLŒ|L"SN2qŠLŒ|’Lœ"SN2qŠLL9ÉÄ)2ñæ¿{œ†ZdbÊI&‘‰)'™XD&¦œdb™X6œÄ1Ô&#'™ØL&Þ¼“Lì&o~H&“‰‘“L<&#'™ØM&– 'q µÉÄÈI&“‰7$‡ÉIJß'qê*C½ß'qê.C½ß'qê)C½ß¿]ä¡>2Ô7/$‹ÈÄÈÉÄ!21òI2qŠLL9ÉÄ)21å$§ÈÄ”“Lœ"oþ»Çi¨E&¦œdb™˜r’‰EdbÊI&V‘‰åÀICm21r’‰ÍdâÍ;ÉÄn2ñæ‡dâ1™9ÉÄc2ñ/?’‰ÝdâÍ;ÉÄn21r’‰ÃdâÍÉÄa2±œ÷Iœ‡ºÉPŸ÷Iœ‡zÈPŸ÷Iœ‡zÉPŸ÷oi¨‹ÈÄÈ ÉÄ"21òA2qŠLŒ|’Lœ"SN2qŠLL9ÉÄ)21å$§ÈÄrÞ'qj‘‰)'™XD&¦œdb™y%™XE&ÖœÄ1Ô&#'™ØL&Þ¼“Lì&o~H&“‰‘ƒLüàï¡þËχdb7™xóN2±›L¼ù ™8L&FN2q˜L¬Ÿ÷Iœ‡ºóP§|ÐPOê”/êÍCòCC-21òB2±ˆLŒ|’Lœ"SN2qŠLL9ÉÄ)21å$§ÈÄ”“Lœ"ëç}ç¡™˜r’‰EdbÊI&V‘‰‘W’‰Udb-pÇP›LŒœdb3™xóN2±›L¼ù!™xL&F>h¨M&þåçC2±›L¼y'™8L&Þ|L&#'™8L&Öò>‰óPêò>‰óP/êò>‰óPêòþí"µÈÄ”“L,"#Ÿ$§ÈÄ”“Lœ"SN2qŠLL9ÉÄ)21å$—ÈÄZÞ'qj‘‰)'™XD&F^I&V‘‰)'™XE&Ö 'q µÉÄÈI&v“‰7ï$»ÉÄ›’‰Çdb䓆Údâ_~>$»ÉÄ›’‰Ãdbä$‡ÉÄÈI&“‰µ¾Oâ<ÔS†º¾Oâ<Ô[†º¾Oâ4ÔEdbä…db™˜r’‰Edbä“d♘r’‰SdbÊI&N‘‰)'™8E&F¾èô™Xëû$ÎC-21å$«ÈÄÈ+ÉÄ*21å$«ÈÄÚà$Ž¡6™xóN2±›LŒœdb7™xóC2ñ˜LŒ|ÑP›LüËχdâ0™xóA2q˜LŒœdâ0™9ÉÄi2±¶÷Iœ‡zÉP·÷Iœ‡úÈP·÷Iœ‡ZdbÊI&‘‰)'™XD&F>I&N‘‰)'™8E&¦œd♘r’‰Kdb䋾A/‘‰µ½Oâ<Ô"#¯$«ÈÄ”“L¬"SN2±ŠL¬Nâ;ÔÝdâÍ;ÉÄn21r’‰ÝdâÍÉÄc21òMCm2ñ/?’‰ÃdâÍÉÄa21r’‰ÃdâÍ'ÉÄi2±ö÷Iœ‡zËP÷÷Iœ†ºˆLŒ¼L,"SN2±ˆLL9ÉÄ"21òI2qŠLL9ÉÄ)21å$§ÈÄÈÉÄ%21åô z‰L¬ý}§¡®"#¯$«ÈÄ”“L¬"SN2±ŠL¬Nâj“‰‘“Lì&#'™ØM&ÞüL<&#?4Ô&ÿòó!™8L&Þ|L&#'™8M&Þ|’Lœ&ëxŸÄy¨ õxŸÄy¨E&¦œdb™˜r’‰EdbÊI&‘‰‘O’‰SdbÊI&N‘‰)'™¸D&F¾H&.‘‰)§oÐKdâÍ÷8 µÈÄ”“L¬"SN2±ŠLL9ÉÄ*2±N8‰c¨M&FN2±›LŒœdâ0™xóC2ñ˜LüËÿy_Cm21r’‰ÃdâÍÉÄa21r’‰ÓdâÍ'ÉÄi2±Î÷IœþâŠÈÄÈ ÉÄ"21å$‹ÈÄ”“L,"SN2±ˆLŒ|’Lœ"SN2qŠLŒ|‘L\"SN2q‰LL9}ƒ^"oþ»Çi¨E&¦œdb™˜r’‰UdbÊI&V‘‰uÁICm21r’‰ÝdâÍÉÄa2ñædâïÿ õ‚÷u1Ô&#'™8L&Þ|L&#'™8M&Þ|’Lœ&ëzŸÄy¨E&¦œdb™˜r’‰EdbÊI&‘‰)'™XE&F>I&N‘‰)'™¸D&F¾H&.‘‰)'™¸D&¦œ¾A/‘‰7ÿÝã4Ô"SN2±ŠLL9ÉÄ*21å$«Èĺá$Ž¡6™9ÉÄn2ñæƒdâ0™ø—ÿóÞ9†Údb䕆Údbä$‡ÉÄ›’‰Ãdbä$§ÉÄ›O’‰ÓdbÝï“8µÈÄ”“L,"SN2±ˆLL9ÉÄ"21òJ2±ŠLŒ|’Lœ"#_$—ÈÄ”“L\"SN2q‰LL9}ƒ^"oþ»Çi¨E&¦œdb™˜r’‰UdbÊI&6‘‰õÀICm21r’‰ÝdâÍÉÄa2±ž÷Iœ†Údbä†ÚdâÍ ÉÄa2ñæƒdâ0™9ÉÄi2ñæ“dâ4™XÏû$ÎC-21å$‹ÈÄ”“L,"SN2±ŠLŒ¼’L¬"#Ÿ$—ÈÄÈÉÄ%21å$—ÈÄ”“L\"SNß —ÈÄzÞ'qj‘‰)'™XE&¦œdb™y#™ØD&¶œÄ1Ô&#'™ØM&Þ|L&Ûç}§¡6™9ÉÄb2ñæ…dâ0™xóA2q˜L¼ù$™8M&FN2qšLlŸ÷Iœ‡ZdbÊI&‘‰)'™XD&¦œdb™y%™XE&F¾H&.‘‰)'™¸D&¦œd♘r’‰KdbÊéô™Ø>ï“8µÈÄ”“L¬"SN2±‰LŒ¼‘Ll"[“8†Údbä$»ÉÄ›’‰Ãdb+ï“8 µÉÄÈI&“‰7/$‡ÉÄ›’‰ÓdâÍ'ÉÄi21r’‰Ódb+ï“8µÈÄ”“L,"SN2±ˆLŒ¼’L¬"SN2±ŠLŒ|‘L\"SN2q‰LL9ÉÄ%21å$—ÈÄ”Ó7è-2±•÷Iœ‡ZdbÊI&V‘‰‘7’‰MdbÊI&6‘‰­ÂICm21r’‰ÃdâÍÉÄa2±Õ÷Iœ†Údbä$‹ÉÄ›’‰ÃdâÍ'ÉÄi21r’‰Ódbä$§ÉÄVß'qj‘‰)'™XD&¦œdb™y%™XE&¦œdb™ù"™¸D&¦œd♘r’‰KdbÊI&.‘‰‘oú½E&¶ú>‰óP‹LL9ÉÄ&21òF2±‰LL9ÉÄ&2±58‰c¨M&Þ|L&#'™8L&¶ö>‰ÓP›LŒœdb1™xóB2qšL¼ù$™8M&FN2qšLŒœdâ2™ØÚû$ÎC-21å$‹ÈÄÈ+ÉÄ*21å$«ÈÄ”“L¬"#_$—ÈÄ”“L\"SN2q‰LL9ÉÄ-21òMß ·ÈÄÖÞ'qj‘‰‘7’‰MdbÊI&6‘‰)'™ØD&¶'ñêa2ñæƒdâ0™9ÉÄa2±õ÷Iœ†Údbä$‹ÉÄ›’‰ÓdâÍ'ÉÄi21r’‰ÓdâÍÉÄe2±õ÷Iœ‡ZdbÊI&V‘‰‘W’‰UdbÊI&V‘‰)'™XE&F¾H&.‘‰)'™¸D&¦œdâ™ù&™¸E&¦œ¾Ao‘‰­¿Oâ4ÔMdbädb™˜r’‰MdbÊI&6‘‰mÀICm21r’‰Ãdbä$‡ÉÄ6Þ'qj“‰‘“L,&o^H&N“‰7Ÿ$§ÉÄÈI&.“‰7_$—ÉÄ6Þ'qj‘‰‘W’‰UdbÊI&V‘‰)'™XE&¦œdb™ù"™¸D&¦œd♘r’‰[dbä›d♘rú½E&ÞüwÓP‹LL9ÉÄ&21å$›ÈÄ”“Ll"Û„“8†Údbä$‡ÉÄÈI&N“‰m¾Oâ4Ô&o^H&“‰‘“Lœ&o>I&N“‰‘“L\&o¾H&.“‰m¾OâôWE&F^I&V‘‰)'™XE&¦œdb™˜r’‰Udbä‹d♘r’‰Kdbä›d♘r’‰[dbÊéô™xóß=NC-21å$›ÈÄ”“Ll"SN2±‰Ll Nâj“‰‘“L&o>I&N“‰m½Oâêb2ñæ…db1™9ÉÄi2ñæ“dâ4™9ÉÄe2ñæ‹dâ2™ØÖû$ÎC-21å$«ÈÄ”“L¬"SN2±ŠLL9ÉÄ&21òE2q‰LL9ÉÄ-21òM2q‹LL9ÉÄ-21åô z‹L¼ùï§¡™˜r’‰MdbÊI&6‘‰)'™ØD&¶ 'q µÉÄÈI&“‰7Ÿ$§ÉÄ¿üŸ÷Î1Ô&#'™XL&FN2qšL¼ù$™8M&FN2q™L¼ù"™¸L&¶ý>‰óP‹LL9ÉÄ*21å$«ÈÄ”“L¬"#o$›ÈÄÈÉÄ%21òM2q‹LL9ÉÄ-21å$·ÈÄ”Ó7è-2ñæ¿{œ†ZdbÊI&6‘‰)'™ØD&¦œdb™ØœÄ1Ô&#'™8L&Þ|’Lœ&ÛyŸÄi¨M&FN2±˜L¼y%™8M&Þ|’Lœ&#'™¸L&Þ|‘L\&ÛyŸÄy¨E&¦œdb™˜r’‰UdbÊI&6‘‰‘7’‰Mdbä‹dâ™ù&™¸E&¦œd♘r’‰[dbÊéô™ØÎû$ÎC-21å$›ÈÄ”“Ll"#ï$»ÈÄþ“8†Údbä$‡ÉÄ›O’‰Ódbÿ¼Oâ4Ô&#'™XM&Þ¼’Lœ&o>I&N“‰7_$—ÉÄÈI&.“‰ýó>‰óP‹LL9ÉÄ*21å$«ÈÄ”“Ll"#o$›ÈÄÈ7ÉÄ-21å$·ÈÄ”“LÜ"SN2q‹LL9}ƒÞ"ûç}ç¡™˜r’‰MdbÊI&v‘‰‘w’‰]db/pÇP›LŒœdâ0™xóI2qšLìå}§¡6™9ÉÄj2ñæ•dâ4™xóI2q™L¼ù"™¸L&FN2q™Lìå}ç¡™˜r’‰UdbÊI&V‘‰‘7’‰MdbÊI&6‘‰‘o’‰[dbÊI&n‘‰)'™¸E&¦œd♘rú}D&öò>‰óP‹LL9ÉÄ&21òN2±‹LL9ÉÄ.2±W8‰c¨M&FN2qšL¼ù$™8M&öú>‰ÓP›LŒœdb5™xóJ2qšL¼ù"™¸L&FN2q™LŒœdâ2™Øëû$ÎC-21å$«ÈÄ”“Ll"#o$›ÈÄ”“Ll"#ß$·ÈÄ”“LÜ"SN2q‹LL9ÉÄ-21òCß ÈÄ^ß'qj‘‰)'™ØE&FÞI&v‘‰)'™ØE&ö'q µÉÄ›O’‰Ódbä$§ÉÄÞÞ'qj“‰‘“L¬&o^I&.“‰7_$—ÉÄÈI&.“‰‘“LÜ&{{ŸÄy¨E&¦œdb™y#™ØD&¦œdb™˜r’‰Mdbä›d♘r’‰[dbÊI&n‘‰)'™xD&F~èô™ØÛû$ÎC-21òN2±‹LL9ÉÄ.21å$»ÈÄÞá$¾C=M&Þ|’Lœ&#'™8M&öþ>‰ÓP›LŒœdb5™xóJ2q™L¼ù"™¸L&FN2q™L¼ù&™¸M&öþ>‰óP‹LL9ÉÄ&21òF2±‰LL9ÉÄ&21å$›ÈÄÈ7ÉÄ-21å$·ÈÄ”“LÜ"#?$ÈÄ”Ó7è#2±÷÷Iœ†º‹LŒ¼“Lì"SN2±‹LL9ÉÄ.2±8‰c¨M&FN2qšLŒœdâ4™ØÇû$NCm21r’‰ÕdâÍ+ÉÄe2ñæ‹dâ2™9ÉÄm2ñæ›dâ6™ØÇû$ÎC-21òF2±‰LL9ÉÄ&21å$›ÈÄ”“Ll"#ß$·ÈÄ”“LÜ"SN2ñˆLŒüL<"SNß ÈÄ›ÿîqj‘‰)'™ØE&¦œdb™˜r’‰]dbŸpÇP›LŒœdâ4™9ÉÄe2±Ï÷Iœ†ÚdâÍ+ÉÄj21r’‰ËdâÍÉÄe21r’‰ÛdâÍ7ÉÄm2±Ï÷IœþâšÈÄÈÉÄ&21å$›ÈÄ”“Ll"SN2±‰LŒ|“LÜ"SN2q‹LŒüL<"SN2ñˆLL9}ƒ>"oþ»Çi¨E&¦œdb™˜r’‰]dbÊI&v‘‰}ÁICm21r’‰ÓdâÍÉÄe2±¯÷IC]M&Þ¼’L¬&#'™¸L&Þ|‘L\&#'™¸M&Þ|“LÜ&ûzŸÄy¨E&¦œdb™˜r’‰MdbÊI&6‘‰)'™ØE&F¾I&n‘‰)'™xD&F~H&‘‰)'™xD&¦œ¾A‘‰7ÿÝã4Ô"SN2±‹LL9ÉÄ.21å$»Èľá$Ž¡6™9ÉÄi2ñæ‹dâ2™ø—ÿóÞ9†Údbä$«ÉÄÈI&.“‰7_$—ÉÄÈI&n“‰7ß$·Éľß'qj‘‰)'™ØD&¦œdb™˜r’‰Mdbädb™ù&™¸E&F~H&‘‰)'™xD&¦œd♘rú}D&ÞüwÓP‹LL9ÉÄ.21å$»ÈÄ”“L"û“8†Údbä$§ÉÄ›/’‰Ëdb?ï“8 µÉÄÈI&V“‰7o$—ÉÄ›/’‰Ëdbä$·ÉÄ›o’‰Ûdb?ï“8µÈÄ”“Ll"SN2±‰LL9ÉÄ.21òN2±‹LŒ|“L<"#?$ÈÄ”“L<"SN2ñˆLL9}ƒ>"ûyŸÄy¨E&¦œdb™˜r’‰]dbäƒdâ™8>pÇP›LŒœdâ4™xóE2q™LŸ÷Iœ†Údbä$›ÉÄ›7’‰ËdâÍÉÄe2ñæ›dâ6™9ÉÄm2q|Þ'qj‘‰)'™ØD&¦œdb™˜r’‰]dbädb™ù!™xD&¦œd♘r’‰GdbÊI&‘‰)§oÐGdâø¼Oâ<Ô"SN2±‹LL9ÉÄ!21òA2qˆLNâj“‰‘“Lœ&o¾H&.“‰£¼Oâ4Ô&#'™ØL&Þ¼‘L\&o¾H&n“‰7ß$·ÉÄÈI&n“‰£¼Oâ<Ô"SN2±‰LL9ÉÄ&21òN2±‹LL9ÉÄ.21òC2ñˆLL9ÉÄ#21å$ÈÄ”“L<"Sß ËGdâ(ï“8µÈÄ”“Lì"#$‡ÈÄ”“L"G…“8†Údbä$—ÉÄ›/’‰Ëdâ¨ï“8 µÉÄÈI&6“‰7o$—ÉÄ›o’‰Ûdbä$·ÉÄÈI&n“‰£¾Oâ<Ô"SN2±‰LL9ÉÄ.21òN2±‹LL9ÉÄ.21òC2ñˆLL9ÉÄ#21å$ÈÄ”“L<"oþ»Çi¨E&FÞI&v‘‰)'™8D&F>H&‘‰)'™8D&Ž'q µÉÄ›/’‰Ëdbä$—ÉÄÑÞ'qj“‰‘“Ll&oÞH&n“‰7ß$·ÉÄÈI&n“‰‘“L<&G{ŸÄy¨E&¦œdb™y'™ØE&¦œdb™˜r’‰]dbä‡d♘r’‰GdbÊI&‘‰)™ø;Áëùÿ»Çi¨E&FÞI&v‘‰‘’‰CdbÊI&‘‰)'™8D&Ž'ñêe2ñæ‹dâ2™9ÉÄe2qô÷Iœ†Údbä$›ÉÄ›7’‰ÛdâÍ7ÉÄm21r’‰ÛdâÍÉÄc2qô÷Iœ‡ZdbÊI&v‘‰‘w’‰]dbÊI&v‘‰)'™ØE&F~H&‘‰)'™xD&¦œdâ™xó¯=þj‘‰)¯4Ô"#ï$‡ÈÄÈÉÄ!21å$‡ÈÄ”“L"Ç€“8†Údbä$—ÉÄÈI&.“‰c¼Oâ4Ô&#'™ØL&Þ¼‘LÜ&o¾I&n“‰‘“L<&o~H&“‰c¼Oâ<Ô"#ï$»ÈÄ”“Lì"SN2±‹LL9ÉÄ.21òC2ñˆLL9ÉÄ#21å N⟡¯“ø{¨E&¦¼ÑP‹LŒ|L"SN2qˆLL9ÉÄ!21å$‡ÈÄ1á$Ž¡6™9ÉÄe21r’‰Ûdâ˜ï“8 µÉÄ›7’‰Ídbä$·ÉÄ›o’‰Ûdbä$ÉÄ›’‰Çdâ˜ï“8 u™y'™ØE&¦œdb™˜r’‰]dbÊI&v‘‰‘’‰GdbÊI&‘‰7ÿÞ㯡™˜òJC-21å†Zdbäƒd♘r’‰CdbÊI&‘‰)'™8D&Ž'q µÉÄÈI&.“‰7ß$·ÉıÞ'q u3™xóF2±™LŒœdâ6™xóM2q›LŒœdâ1™xóC2ñ˜Lë}ç¡™˜r’‰]dbÊI&v‘‰)'™ØE&¦œdâ™ù!™xD&¦dâ÷ÿõzþJü5Ô"SÞh¨E&¦|ÐP‹LŒ|L"SN2qˆLL9ÉÄ!21å$‡Èıá$Ž¡6™9ÉÄe2ñæ›dâ6™ø—ÿóÞ9†Údbä$›ÉÄÈI&n“‰7ß$·ÉÄÈI&“‰7?$Éıß'qj‘‰)'™ØE&¦œdb™˜r’‰]dbäƒdâ™ù!™xD&Þüç'Š<Ô"S^i¨E&¦¼ÓP‹LLù¤¡™ù ™8D&¦œd♘r’‰CdbÊI&N‘‰ãÀICm21r’‰ËdâÍ7ÉÄm2qœ÷Iœ†Údbä$›ÉÄ›w’‰ÛdâÍ7ÉÄm21r’‰ÇdâÍÉÄc2qœ÷Iœ‡ZdbÊI&v‘‰)'™ØE&¦œdâ™ù ™8D&F~@&þLðÏPŸ÷É<Ô"SÞh¨E&¦|ÐP‹LLù¢¡™ù ™8D&¦œd♘r’‰Cdbä“dâ™8?pÇP›LŒœdâ2™xóM2q›LœŸ÷Iœ†Údbä$»ÉÄ›w’‰ÛdâÍ7ÉÄm2ñæ‡dâ1™9ÉÄc2q~Þ'qj‘‰)'™ØE&¦œdb™˜r’‰Cdbäƒdâ™xóŸ=ÎC-21商ZdbÊ; µÈÄ”Oj‘‰)ß4Ô"#$‡ÈÄ”“L"SN2qŠLŒ|’Lœ"g“8†Údbä$—ÉÄ›o’‰Ûdâ,ï“8 µÉÄÈI&v“‰7ï$·ÉÄ›o’‰ÇdâÍÉÄc21r’‰Çdâ,ï“8µÈÄ”“Lì"SN2±‹LŒ|L"SN2qˆL¼ùÏç¡™˜òFC-21僆ZdbÊ µÈÄ”“L,"#$‡ÈÄ”“L"#Ÿ$§ÈÄ”“Lœ"g…“8†Údbä$·ÉÄ›o’‰Ûdâ¬ï“8 µÉÄÈI&v“‰7ï$·ÉÄ›’‰Çdbä$ÉÄÈI&“‰³¾Oâ<Ô"SN2±‹LL9ÉÄ!21òA2qˆLL9ÉÄ!2qÖ÷Iœ‡ZdbÊ; µÈÄ”Oj‘‰)ß4Ô"#/$‹ÈÄÈÉÄ!21å$§ÈÄÈ'ÉÄ)21å$§ÈÄÙà$Ž¡6™xóM2q›LŒœdâ6™8Ûû$NCm21r’‰ÝdâÍ;ÉÄc2ñæ‡dâ1™9ÉÄc21r‰ÿÿùG†º½Oâ<Ô"SN2±‹LŒ|L"SN2qˆLL9ÉÄ!2q¶÷Iœ‡ZdbÊ µÈÄ”/j‘‰)'™XD&F^H&‘‰‘’‰Cdbä“d♘r’‰SdbÊI&N‘‰³ÃI|‡z›L¼ù&™¸M&FN2q›Lœý}§¡6™9ÉÄn2ñædâ1™xóC2ñ˜LŒœdâ1™8¯Pû%¿1ÔE†º¿Oâ<Ô"SN2qˆLŒ|L"SN2qˆLL9ÉÄ!2qö÷Iœ‡ZdbÊ' µÈÄ”oj‘‰‘’‰EdbÊI&‘‰‘’‰Sdbä“d♘r’‰SdbÊI&N‘‰sÀICm21r’‰Ûdbä$·ÉÄ9Þ'qj“‰‘“Lì&oÞI&“‰7?$ÉÄÈA&þNðÏP_¡öK~c¨« õxŸÄy¨E&F>H&‘‰)'™8D&¦œd♘r’‰Cdâï“8µÈÄ”/j‘‰)'™XD&F^H&‘‰)'™XD&F>I&N‘‰)'™8E&¦œd♘r’‰SdâœpÇP›LŒœdâ6™9ÉÄc2qÎ÷Iœ†ÚdâÍ;ÉÄn21r’‰ÇdâÍÉÄc21ò‰C]d¨/pû%¿1ÔM†z¾Oâ4ÔCdbäƒd♘r’‰CdbÊI&‘‰)'™8D&Îù>‰óP‹LLù¦¡™y!™XD&¦œdb™˜r’‰Edbä“d♘r’‰SdbÊI&N‘‰)'™8E&Î'q µÉÄÈI&n“‰7?$ÉĹÞ'q u7™xóN2±›LŒœdâ1™xóC2ñ˜LŒ|áPWê Ü~Éo u—¡^ï“8µÈÄ”“L"SN2qˆLL9ÉÄ!21å$§ÈĹÞ'qj‘‰)'™XD&F^H&‘‰)'™XD&¦œdb™ù$™8E&¦œd♘r’‰SdbÊI&N‘‰sÃICm21r’‰ÛdâÍÉÄc2ñ/ÿç½s µÉÄÈI&v“‰‘“L<&o~H&“‰‘oê&C}}Ü/ù¡2Ôû}ç¡™˜r’‰CdbÊI&‘‰)'™8D&F>I&N‘‰s¿Oâ<Ô"#/$‹ÈÄ”“L,"SN2±ˆLL9ÉÄ"21òI2qŠLL9ÉÄ)21å$§ÈÄ”“L\"ç“8†Údbä$·ÉÄ›’‰Çdâ<ï“8 µÉÄÈI&v“‰7$ÉÄ›’‰Çdb䇺ËP_÷K~c¨§ õyŸÄy¨E&¦œd♘r’‰CdbÊI&N‘‰‘O’‰Sdâ<ï“8 u™y!™XD&¦œdb™˜r’‰EdbÊI&‘‰‘O’‰SdbÊI&N‘‰)'™8E&F¾H&.‘‰ë'q µÉÄÈI&n“‰7?$ÉÄõyŸÄi¨M&FN2q˜L¼ù ™xL&ÞüL<&מm¤¡<Ô)Ÿ4Ô‹‡:òA2qˆLL9ÉÄ!21å$‡ÈÄ”“Lœ"#Ÿ$§ÈÄ›ÿìqj‘‰)'™XD&¦œdb™˜r’‰EdbÊI&‘‰‘O’‰SdbÊI&N‘‰)'™¸D&F¾H&.‘‰«ÀICm21r’‰ÛdâÍÉÄc2q•÷Iœ†Údbä$‡ÉÄ›’‰ÇdâÍÈÄß þêÏ6ÒPOêÈ õ–¡.ï“8µÈÄ”“L"SN2qˆLŒ|’Lœ"SN2qŠL¼ùÏç¡™˜r’‰EdbÊI&‘‰)'™XD&¦œdb™ù$™8E&¦œdâ™ù"™¸D&¦œd♸*œÄ1Ô&#'™xL&ÞüL<&W}ŸÄi¨M&FN2q˜L¼ù ™xL&® 'qê"C]áÙFê%Cù¦¡>2Ôõ}ç¡™˜r’‰CdbÊI&N‘‰‘O’‰SdbÊI&N‘‰«¾Oâ<Ô"SN2±ˆLL9ÉÄ"21å$‹ÈÄÈ+ÉÄ*21òI2qŠLL9ÉÄ%21òE2q‰LL9ÉÄ%2q58‰c¨M&ÞüL<&#'™xL&®ö>‰ÓP›LŒœdâ0™xó2ñŸ—ÌßCÝà$NC]e¨<ÛHC½e¨#?0ÔEdbäƒd♘r’‰Cdbä“d♘r’‰SdbÊI&N‘‰«½Oâ<Ô"SN2±ˆLL9ÉÄ"21å$«ÈÄÈ+ÉÄ*21òI2qŠLŒ|‘L\"SN2q‰LL9ÉÄ%2qu8‰ïP“‰7?$ÉÄÈI&“‰«¿Oâ4Ô&#'™8L&Þ| ê"CÝá$NCÝd¨;<ÛHC}d¨o^H&‘‰‘’‰CdbÊI&N‘‰‘O’‰SdbÊI&N‘‰)'™8E&®þ>‰óP‹LL9ÉÄ"21å$‹ÈÄÈ+ÉÄ*21å$«ÈÄÈ'ÉÄ%21òE2q‰LL9ÉÄ%21å$—ÈÄ5à$Ž¡6™9ÉÄc21r’‰Çdâï“8 µÉÄÈI&“‰7‡ºÊP8‰ÓPwêÏ6b¨‹ÈÄÈ ÉÄ"21òA2qˆLŒ|’Lœ"SN2qŠLL9ÉÄ)21å$§ÈÄ5Þ'qj‘‰)'™XD&¦œdb™y%™XE&¦œdb™ù"™¸D&¦œd♘r’‰KdbÊI&.‘‰kÂICm21r’‰Çdbä ÏÇdâšï“8 µÉÄ›’‰Ãdbä ‡ºÉPO8‰ÓPê Ï6ÒP‹LŒ¼L,"#$§ÈÄÈ'ÉÄ)21å$§ÈÄ”“Lœ"SN2qŠL\ó}ç¡™˜r’‰Edbä•db™˜r’‰UdbÊI&V‘‰‘/’‰KdbÊI&.‘‰)'™¸D&¦œd♸œÄ1Ô&#'™xL&þå¿{œ†ÚdâÍ;ÉÄa2ñæƒdâ0™ùÆ¡î2Ô Nâ4ÔS†zÁ³4Ô"#/$‹ÈÄÈ'ÉÄ)21å$§ÈÄ”“Lœ"SN2qŠLL9ÉÄ%2q­÷Iœ‡ZdbÊI&V‘‰‘W’‰UdbÊI&V‘‰)'™XE&F¾H&.‘‰)'™¸D&¦œd♘r’‰KdâÚpÇP›LŒœdâ1™ø—ÿîqj“‰7$‡ÉÄÈI&“‰‘ê!C½á$NC½d¨7<ÛHC-21òB2±ˆLŒ|’Lœ"SN2qŠLL9ÉÄ)21å$§ÈÄÈÉÄ%2qí÷Iœ‡Zdbä•db™˜r’‰UdbÊI&V‘‰)'™XE&F¾H&.‘‰)'™¸D&¦œd♘r’‰[dâ:pÇP›LŒœdâ1™ø—ÿîqj“‰7$‡ÉÄÈI&“‰7Ÿê)C}à$NC½e¨<ÛHC-21òB2±ˆLŒ|’Lœ"SN2qŠLL9ÉÄ)21å$—ÈÄÈÉÄ%2q÷Iœ†ºŠLŒ¼’L¬"SN2±ŠLL9ÉÄ*21å$«ÈÄÈÉÄ%21å$—ÈÄ”“L\"#ß$·ÈÄý“8†Údbä$ÉÄ¿üwÓP›L¼ù ™8L&FN2qšL¼ù,8Ô‹‡zà$NC}x¨#/$‹ÈÄ”“L,"#Ÿ$§ÈÄ”“Lœ"SN2qŠLL9ÉÄ%21òE2q‰L¼ùÏç¡™˜r’‰UdbÊI&V‘‰)'™XE&¦œdb™ù"™¸D&¦œd♘r’‰[dbä›d♸ œÄ1Ô&#'™xL&þå¿{œ†ÚdâÍÉÄa21r’‰ÓdâÍgÅ¡Þ2ÔNâê"21òB2±ˆLL9ÉÄ"21òI2qŠLL9ÉÄ)21å$§ÈÄÈÉÄ%21å$—ÈÄ›ÿìqj‘‰)'™XE&¦œdb™˜r’‰UdbÊI&6‘‰‘/’‰KdbÊI&.‘‰‘o’‰[dbÊI&n‘‰»ÂICm21r‰ßŸ ÿê?Ü÷4Ô&o>H&“‰‘“Lœ&o>õ‘¡®p§¡™˜r’‰EdbÊI&‘‰‘O’‰SdbÊI&N‘‰)'™¸D&F¾H&.‘‰)'™¸D&îú>‰óP‹LL9ÉÄ*21å$«ÈÄ”“L¬"#o$›ÈÄÈÉÄ%21å$·ÈÄÈ7ÉÄ-21å$·ÈÄÝà$Ž¡6™ø—ÿ>ÛHCm21òICm2ñæƒdâ0™9ÉÄi2ñæeb™¸œÄi¨E&¦œdb™˜r’‰Udbä“d♘r’‰Sdbä‹d♘r’‰KdbÊI&.‘‰»½Oâ<Ô"SN2±ŠLL9ÉÄ*21å$›ÈÄÈÉÄ&21òE2q‰LŒ|“LÜ"SN2q‹LL9ÉÄ-2qw8‰ÿ†úŸ—ÌßCÝßÏ6ÒP›LŒ|ÑP›L¼ù ™8L&FN2qšL¼ùD™XD&î'qj‘‰)'™XD&F^I&V‘‰‘O’‰SdbÊI&.‘‰‘/’‰KdbÊI&.‘‰)'™¸D&îþ>‰óP‹LL9ÉÄ*21å$«ÈÄÈÉÄ&21å$›ÈÄÈÉÄ-21òM2q‹LL9ÉÄ-21å$·ÈÄ=à$Ž¡6™y¥¡6™ù¦¡6™xóA2q˜LŒœdâ4™xó‰2±ˆLÜNâ4Ô"SN2±ŠLŒ¼’L¬"#Ÿ$§ÈÄÈÉÄ%21å$—ÈÄ”“L\"SN2q‰LÜã}ç¡™˜r’‰UdbÊI&6‘‰‘7’‰MdbÊI&6‘‰‘o’‰[dbÊI&n‘‰)'™¸E&¦œd♸'œÄ1Ô&#o4Ô&#'™XL&Þ|L&o>I&N“‰‘£L,"÷„“8 µÈÄ”“L¬"#¯$«ÈÄÈ'ÉÄ%21òE2q‰LL9ÉÄ%21å$—ÈÄ”“L\"÷|ŸÄy¨E&¦œdb™y#™ØD&¦œdb™˜r’‰Mdbä›d♘r’‰[dbÊI&n‘‰)'™¸E&î'q µÉÄÈ; µÉÄ›’‰ÅdâÍÉÄi2ñæ“dâ4™9ÊÄ"2q/8‰ÓP‹LL9ÉÄ*21òJ2±ŠLŒ|‘L\"SN2q‰LL9ÉÄ%21å$—ÈÄ”“LÜ"÷zŸÄy¨E&¦œdb™y#™ØD&¦œdb™˜r’‰Mdbä›d♘r’‰[dbÊI&n‘‰)'™¸E&î 'q µÉÄÈ µÉÄ›’‰ÅdâÍ'ÉÄi21r’‰Ódbä(‹ÈĽá$NC-21å$«ÈÄÈ+ÉÄ*21òE2q‰LL9ÉÄ%21å$—ÈÄ”“L\"#ß$·ÈĽß'qj‘‰‘7’‰MdbÊI&6‘‰)'™ØD&¦œdb™ù&™¸E&¦œd♘r’‰[dbÊI&‘‰ûÀICm21òICm2ñæ…db1™xóI2qšLŒœdâ4™xó…2±ˆLÜNâ4Ô"SN2±ŠLŒ¼’L¬"#_$—ÈÄ”“L\"SN2q‰LL9ÉÄ-21òM2q‹LÜç}§¡n"#o$›ÈÄ”“Ll"SN2±‰LL9ÉÄ&21òM2q‹LL9ÉÄ-21å$·ÈÄÈÉÄ#2ñ|à$Ž¡6™ù¢¡6™xóB2±˜L¼ù$™8M&FN2q™L¼ùB™XD&žœÄi¨E&F^I&V‘‰)'™XE&F¾H&.‘‰)'™¸D&¦œd♘r’‰[dbä›dâ™xóŸ=ÎC-21å$›ÈÄ”“Ll"SN2±‰LL9ÉÄ&21òM2q‹LL9ÉÄ-21å$ÈÄÈÉÄ#2ñ8‰c¨M&F¾i¨M&Þ¼L,&o>I&N“‰‘“L\&o¾P&‘‰§ÀIC]E&F^I&V‘‰)'™XE&F¾H&.‘‰)'™¸D&¦œdâ™ù&™¸E&¦œdâ™xóŸ=ÎC-21å$›ÈÄ”“Ll"SN2±‰LL9ÉÄ.21òM2q‹LL9ÉÄ-21òC2ñˆLL9ÉÄ#2ñT8‰c¨M&FN2±˜L¼y!™XL&Þ|’Lœ&#'™¸L&Þ|¡L,"O…“8 µÈÄ”“L¬"SN2±ŠLŒ|‘L\"SN2q‰LL9ÉÄ-21òM2q‹LL9ÉÄ-2ñÔ÷Iœ‡ZdbÊI&6‘‰)'™ØD&¦œdb™y'™ØE&F¾I&n‘‰)'™xD&F~H&‘‰)'™xD&ž'q µÉÄ›’‰Ådbä$‹ÉÄ›O’‰Ódbä$—ÉÄ›/”‰Udâip§¡™˜r’‰UdbÊI&6‘‰‘/’‰KdbÊI&.‘‰‘o’‰[dbÊI&n‘‰)'™¸E&žö>‰óP‹LL9ÉÄ&21å$›ÈÄ”“Lì"#ï$»ÈÄÈ7ÉÄ-21òC2ñˆLL9ÉÄ#21å$ÈÄÓá$¾C]L&Þ¼L,&#'™XL&Þ|’Lœ&#'™¸L&Þ|¡L¬"O‡“8 µÈÄ”“L¬"#o$›ÈÄÈÉÄ%21å$·ÈÄÈ7ÉÄ-21å$·ÈÄ”“LÜ"OŸÄy¨E&¦œdb™˜r’‰Mdbädb™˜r’‰]dbä›dâ™ù!™xD&¦œd♘r’‰GdâpÇP›LŒœdb1™9ÉÄb2ñæ“dâ4™9ÉÄe2ñæ eb™xœÄi¨E&¦œdb™y#™ØD&F¾H&.‘‰‘o’‰[dbÊI&n‘‰)'™¸E&¦œdâ™xÆû$ÎC-21å$›ÈÄ”“Lì"#ï$»ÈÄ”“Lì"#?$ÈÄ”“L<"SN2ñˆLL9ÉÄ#2ñL8‰c¨M&FN2±˜LŒœdb5™xóI2qšL¼ù"™¸L&FŽ2±ŠL<Nâ4Ô"SN2±‰LŒ¼‘Ll"#_$·ÈÄÈ7ÉÄ-21å$·ÈÄ”“LÜ"SN2q‹L<ó}ç¡™˜r’‰Mdbädb™˜r’‰]dbÊI&v‘‰‘’‰GdbÊI&‘‰)'™xD&¦œdâ™xœÄ1Ô&#'™XL&Þ¼’L¬&o>I&.“‰7_$—ÉÄÈQ&V‘‰gÁIœ†ZdbÊI&6‘‰‘7’‰Mdbä›d♘r’‰[dbÊI&n‘‰)'™¸E&¦œdâ™xÖû$ÎC-21å$»ÈÄÈ;ÉÄ.21å$»ÈÄ”“Lì"#?$ÈÄ”“L<"SN2ñˆLL9ÉÄ#2ñl8‰c¨M&FN2±˜L¼y%™XM&Þ|‘L\&#'™¸L&FŽ2±ŠL<Nâ4Ô"SN2±‰LŒ¼‘Ll"#ß$·ÈÄ”“LÜ"SN2q‹LL9ÉÄ-21òC2ñˆL<û}ç¡™y'™ØE&¦œdb™˜r’‰]dbÊI&v‘‰‘’‰GdbÊI&‘‰)'™xD&¦dbýˆL<Nâj“‰‘“L,&o^I&V“‰7_$—ÉÄÈI&.“‰7ß(«ÈÄsà$NC-21å$›ÈÄÈÉÄ&21òM2q‹LL9ÉÄ-21å$·ÈÄ”“L<"#?$ÈÄsÞ'qê.21òN2±‹LL9ÉÄ.21å$»ÈÄ”“Lì"#?$ÈÄ”“L<"SN2ñˆL¼ù÷ 5ËÄ¿èß“8†ZdbÊI&‘‰‘W’‰Udbä‹d♘r’‰[dbäebe™xóNâ4Ô,SÞH&6–‰9'™ØX&¦|“LÜ,sN2q³LÌ9ÉÄÍ21ç$ËÄ”’‰‡ebä?{œ‡šebÎI&v–‰9'™ØY&æœdbg™˜s’‰ebÊÉÄÃ21ç$ËÄœƒL¬–‰‘ïñ×PWê'q õ²¡.ïgi¨ õ_^I&ÖaC]Þ'qênC]à}] u±¡þË7Êĺe¨ œÄ1Ôí#C]àÙFê)C9ÉĶe¨Ëû$ÎC=d¨Ëû$ÎC½d¨Ëû$ÎC}d¨Ëû·‹<ÔU†:r’‰§ËP—÷Iœ‡ºÊP—÷É<Ô]†º<%þê)C]^'ñ÷PoêÈI&Ž uyŸÄy¨— uyžÄ_C}d¨Ëó$þê"Cy¥¡n2ÔNâêmC]ßÏ6b¨ëdžú/¯$ë´¡®ï“8 õ°¡®ð¾.†ºÚPÿåeb=2ÔNâ4ÔE†ºÂ³4ÔK†:r’‰íÈP×÷Iœ‡zÊP×÷Iœ‡zËP×÷Iœ†ú|d¨ëû·‹<ÔM†:r’‰gÈP×÷Iœ‡ºÉP×÷É<ÔC†º>%þê%C]_'ñ÷Pê›’‰£ÈP×÷Iœ‡zËP×çIœ†úçW⟡®Ï“øk¨« u䆺ËP78‰c¨ u{?ÛHC]l¨oN2±.êö>‰ÓPOêïëb¨› õ_¾Q&¶ uƒ“8 u•¡nðl# õ–¡ŽœdbÿÈP·÷Iœ‡zÉP·÷Iœ‡úÈP·÷Iœ‡ºÈP·÷oy¨» uä$Ï”¡nï“8u—¡nï‡y¨§ u{þJü5Ô[†º½N⯡ê›’‰£ÊP·÷Iœ‡úÈP·çIü5ÔE†º=O⯡n2Ô‘wê!CÝá$¾C]?6Ôýýl# uµ¡¾9Éĺm¨ûû$NC½l¨;¼¯‹¡î6ÔùF™ØŠ u‡“8 u“¡îðl# õ‘¡¾y'™Ø‹ uŸÄy¨· uŸÄi¨ÏG†º¿Oâ<ÔU†º¿»ÈC=d¨#'™x– uŸÄy¨‡ u?œÈC½d¨ûóW⯡>2Ôýuu‘¡Žœdâh2Ôý}ÇPÿLðÏP÷çIü5ÔU†º?O⯡î2Ô‘ê)C=à$Ž¡.6Ôãýl# u³¡¾9ÉÄzl¨Çû$NC½m¨¼¯‹¡6ÔùF™Øª õ€“8 u—¡ðl#†ºd¨oÞI&ö*C=Þ'qê#C=Þ'qê"C=Þ'qê&C=Þ¿]䡞2Ô‘“L<[†z¼Oâ<ÔS†z¼Nä¡Þ2Ôãù+qêñ‘¡¯“ø{¨« uä$G—¡ï“8u‘¡Ï“øk¨› õxžÄ_C=d¨#Ÿ4ÔK†zÂIC]m¨çûÙFênC}s’‰ícC=ß'qêcC=á}] õ´¡¾9ÊÄÖd¨'œÄi¨‡ õ„gi¨‹ õÍ;ÉÄÞd¨çû$NC}>2Ôó}ç¡®2Ôó}ç¡î2ÔóýÛEê%C9ÉÄsd¨çû$ÎC½d¨çûáDê#C=Ÿ¿ u‘¡ž¯“ø{¨› uä$Ç¡žï“8u•¡žÏ“øk¨» õ|žÄ_C=e¨#_4Ô[†zÁICÝl¨×ûÙFêaCý—7’‰­ØP¯÷IC½?6Ô Þ×ÅP/ꛣLl]†zÁIœ†zÊP/x¶‘†ºÊPß¼“Lì]†z½Oâ<ÔE†z½Oâ<ÔM†z½Oâ<ÔC†z½»ÈC½e¨#™X>êõ>‰óPoêõ~8‘†z|d¨×óW⯡®2Ôëuu—¡Žœdâ˜2Ôë}ç¡n2Ôëy õ¡^Ï“øk¨— u䛆úÈPo8‰c¨» õ~?ÛHC=m¨ÿòF2±Uêý>‰ÓPê ïëb¨· õÍQ&¶!C½á$NC½d¨7<ÛHCÝd¨oÞI&ö!C½ß'qê*C½ß'qê.C½ß'qê)C½ß¿]ä¡>2Ô—˜}>4ÔE†z¿Oâ<ÔG†z¿Nä¡.2Ôûù+ñ×P7êý:‰¿‡zÈPGN2q,êý>‰óPwêý<‰¿†zÊPïçIü5Ô[†:r’‰å#C}à$Ž¡6Ôçýl# õ²¡þËÉÄÖl¨Ïû$NC]m¨¼¯‹¡>6ÔùA™Ø¦ õ“8 õ–¡>ðl# u—¡¾y'™Ø§ õyŸÄy¨› õyŸÄy¨‡ õyŸÄy¨— õyÿvCý3Á?C}…Ú§ÐPWêó>‰ÓP õy?œÈC]e¨ÏóW⯡î2Ôçuõ”¡ŽœdâØ2Ôç}ç¡2Ôçy õ’¡>Ï“øk¨ õÍ ÉÄ"2±|à$Ž¡6™9ÉÄj2ñædb3™xóM2q›LŒœdâ1™xóƒ2±‰L,8‰ÓP‹LŒ¼“Lì"SN2±‹LŒüL<"SN2ñˆLL9ÉÄ#21准ZdâÍ˧ÒP‹LŒ|L"SN2qˆLL9ÉÄ!21å$‡ÈÄ”“L"Ëç}ç¡™˜òEC-21å$‹ÈÄÈ ÉÄ"2±8‰c¨M&FN2±šL¼y#™ØL&Þ|“LÜ&#'™xL&Þü Ll"K“8†º‹LŒ¼“Lì"SN2±‹LŒüL<"SN2ñˆLL9ÉÄ#2ñ濇sj‘‰)o4Ô"#$‡ÈÄ”“L"SN2qˆLL9ÉÄ!21å$§ÈÄRÞ'qj‘‰)ß4Ô"#/$‹ÈÄ”“L,"K…“8†Údbä$›ÉÄ›7’‰ÍdâÍ7ÉÄm21r’‰ÇdâÍÊÄ&2±T8‰ÓP‹LL9ÉÄ.21å$»ÈÄÈÉÄ#21å$ÈÄ”ƒLü™àŸ¡®ïß.òP‹LLy§¡™ù ™8D&¦œd♘r’‰CdbÊI&‘‰‘O’‰Sdb©ï“8µÈÄ”“L,"#/$‹ÈÄ”“L,"Kƒ“8†ÚdâÍÉÄf21r’‰ÍdâÍ7ÉÄm21r’‰ÇdâÍÊÄ.2±48‰ÓP‹LL9ÉÄ.21å$‡ÈÄÈÉÄ#21å$ÈÄ›ÿìqj‘‰)¯4Ô"S>h¨E&F>H&‘‰)'™8D&¦œd♘r’‰Sdbä“dâ™XÚû$ÎC-21òB2±ˆLL9ÉÄ"21å$‹ÈÄÒá$¾CÝL&Þ¼‘Ll&#'™ØL&Þ|“LÜ&#'™xL&Þü Lì"K‡“8 µÈÄ”“Lì"#$‡ÈÄÈÉÄ#21å _¸}uŸÄy¨E&¦¼ÑP‹LLù¤¡™ù ™8D&¦œd♘r’‰Cdbä“d♘r’‰Sdbéï“8 u™y!™XD&¦œdb™˜r’‰EdbpÇP›LŒœdb3™9ÉÄf2ñæ›dâ6™9ÉÄc2ñæeb™XœÄi¨E&¦œdâ™ù ™8D&F~H&‘‰7ÿçÅq µÈÄ”Wj‘‰)ï4Ô"S¾h¨E&F>H&‘‰)'™8D&¦œdâ™ù$™8E&¦œdâ™xóß=NC-21å$‹ÈÄ”“L,"SN2±ˆL,Nâj“‰‘“Ll&#'™ØM&Þ|“LÜ&o~H&“‰‘£Lì"Ë„“8 µÈÄ”“L"#$‡ÈÄÈ}úˆL¼ù?/Žc¨E&¦¼ÑP‹LLù ¡™˜òMC-21òA2qˆLL9ÉÄ!21òI2qŠLL9ÉÄ)21å$§ÈÄ›ÿîqj‘‰)'™XD&¦œdb™˜r’‰EdbYpÇP›LŒœdb3™xóN2±›L¼ù&™xL&ÞüL<&#G™ØE&–'qj‘‰)'™8D&F>H&‘‰7ÿEi¨E&¦¼ÒP‹LLy§¡™˜òIC-21å$‹ÈÄÈÉÄ!21å$§ÈÄÈ'ÉÄ)21å$§ÈÄ”“Lœ"oþ»Çi¨E&¦œdb™˜r’‰EdbÊI&‘‰eÃICm21r’‰ÍdâÍ;ÉÄn2ñæ‡dâ1™9ÉÄc21r”‰]dbÙp§¡™˜r’‰Cdbäƒdâ™Xöû$ÎC-21å†ZdbÊ µÈÄ”/j‘‰‘’‰Edbäƒdâ™ù$™8E&¦œd♘r’‰SdbÊI&N‘‰7ÿÝã4Ô"SN2±ˆLL9ÉÄ"21å$«ÈÄrà$Ž¡6™9ÉÄf2ñædb7™xóC2ñ˜LŒœdâ1™X.pûyŽ›†Zdbädb™˜r’‰Cdbäƒdâ™XÎû$ÎC-21å†ZdbÊ' µÈÄ”“L,"#/$‹ÈÄÈÉÄ)21òI2qŠLL9ÉÄ)21å$§ÈÄ”“Lœ"ËyŸÄy¨E&¦œdb™˜r’‰Edbä•db™X?pÇP›LŒœdb3™xóN2±›L¼ù!™xL&F2ñw‚¿‡º^àöó7 µÈÄÈ;ÉÄ.21òA2qˆLL9ÉÄ!2±~Þ'qj‘‰)4Ô"S¾h¨E&¦œdb™y!™XD&F>I&N‘‰)'™8E&¦œd♘r’‰SdbÊI&N‘‰õó>‰óP‹LL9ÉÄ"21å$«ÈÄÈ+ÉÄ*2±8‰c¨M&FN2±™L¼y'™ØM&ÞüL<&#8ÔE†úú¸Ÿç¸i¨E&FÞI&‘‰‘’‰CdbÊI&‘‰µ¼Oâ<Ô"S>i¨E&¦|ÓP‹LŒ¼L,"SN2±ˆLŒ|’Lœ"SN2qŠLL9ÉÄ)21å$§ÈÄ”Ó7è%2±–÷Iœ‡ZdbÊI&‘‰‘W’‰UdbÊI&V‘‰µÂICm21r’‰ÝdâÍ;ÉÄn2ñæ‡dâ1™ùÄ¡®2Ô×Çý<ÇMC-21òA2qˆLL9ÉÄ!21å$‡ÈÄZß'qj‘‰)_4Ô"SN2±ˆLŒ¼L,"SN2±ˆLŒ|’Lœ"SN2qŠLL9ÉÄ)21å$§ÈÄÈ}ƒ^"k}ŸÄy¨E&¦œdb™y%™XE&¦œdb™XœÄ1Ô&oÞI&v“‰‘“Lì&o~H&“‰‘/ê&C}yÝÏsÜê!21òA2qˆLL9ÉÄ!21å$§ÈÄÚÞ'qj‘‰)ß4Ô"#/$‹ÈÄ”“L,"SN2±ˆLŒ|’Lœ"SN2qŠLL9ÉÄ)21å$—ÈÄÈ}ƒ^"k{ŸÄy¨E&F^I&V‘‰)'™XE&¦œdb™X;œÄw¨»ÉÄ›w’‰Ýdbä$»ÉÄ›’‰Çdb䇺ËP_^÷ó7 µÈÄÈÉÄ!21å$‡ÈÄÈ'ÉÄ)2±ö÷Iœ‡ZdbÊI&‘‰‘’‰EdbÊI&‘‰)'™XD&F>I&N‘‰)'™8E&¦œdâ™ù"™¸D&¦œ¾A/‘‰µ¿Oâ4ÔUdbä•db™˜r’‰UdbÊI&V‘‰uÀICm21r’‰Ýdbä$»ÉÄ›’‰Çdbä‡zÈP_÷ó7 µÈÄÈÉÄ!21å$§ÈÄÈ'ÉÄ)2±Ž÷Iœ‡Zdbä…db™˜r’‰EdbÊI&‘‰)'™XD&F>I&N‘‰)'™8E&¦œdâ™ù"™¸D&¦œ¾A/‘‰7ÿÝã4Ô"SN2±ŠLL9ÉÄ*21å$«ÈÄ:á$Ž¡6™9ÉÄn21r’‰ÃdâÍÉÄc2±Nx_—†zÊPG¾h¨E&F>H&‘‰)'™8E&F>I&N‘‰u¾OâôWD&F^H&‘‰)'™XD&¦œdb™˜r’‰Edbä“d♘r’‰Sdbä‹d♘r’‰KdbÊéô™xóß=NC-21å$«ÈÄ”“L¬"SN2±ŠL¬ Nâj“‰‘“Lì&o>H&“‰7? 'øg¨¼¯KC½d¨#ß4Ô"#$‡ÈÄ”“Lœ"#Ÿ$§ÈÄ›ÿ¢4Ô"SN2±ˆLL9ÉÄ"21å$‹ÈÄ”“L¬"#Ÿ$§ÈÄ”“L\"#_$—ÈÄ”“L\"SNß —ÈÄ›ÿîqj‘‰)'™XE&¦œdb™˜r’‰UdbÝpÇP›LŒœdb7™xóA2q˜L¬û}ç¡.2ÔÞ×¥¡Þ2Ô‘j‘‰‘’‰CdbÊI&N‘‰‘O’‰SdbÝï“8µÈÄ”“L,"SN2±ˆLL9ÉÄ"21òJ2±ŠLŒ|’Lœ"#_$—ÈÄ”“L\"SN2q‰LL9}ƒ^"oþ»Çi¨E&¦œdb™˜r’‰UdbÊI&6‘‰õÀICm21r’‰ÝdâÍÉÄa2±ž÷Iœ‡ºÊPx_—†úÈPß¼L"#$‡ÈÄ”“Lœ"#Ÿ$§ÈÄzÞ'qj‘‰)'™XD&¦œdb™˜r’‰Udbä•db™ù$™¸D&F¾H&.‘‰)'™¸D&¦œd♘rú½D&Öó>‰óP‹LL9ÉÄ*21å$«ÈÄÈÉÄ&2±}à$Ž¡6™9ÉÄn2ñæƒdâ0™Ø>ï“8uã¡Ny‡¡."#/$‡ÈÄÈÉÄ!21òI2qŠLL9ÉÄ)2±}Þ'qj‘‰)'™XD&¦œdb™˜r’‰Udbä•db™ù"™¸D&¦œd♘r’‰KdbÊI&.‘‰)§oÐKdbû¼Oâ<Ô"SN2±ŠLL9ÉÄ&21òF2±‰LlNâj“‰‘“Lì&o>H&“‰­¼Oâ<Ô]†ºÀûº4Ô"#/$‡ÈÄÈÉÄ)21òI2qŠLL9ÉÄ)2±•÷Iœ‡ZdbÊI&‘‰)'™XD&F^I&V‘‰)'™XE&F¾H&.‘‰)'™¸D&¦œd♘r’‰KdbÊéô™ØÊû$ÎC-21å$«ÈÄÈÉÄ&21å$›ÈÄVá$Ž¡6™9ÉÄa2ñæƒdâ0™Øêû$ÎC=d¨+¼¯KC-21òB2qˆLŒ|’Lœ"SN2qŠLL9ÉÄ)2±Õ÷Iœ‡ZdbÊI&‘‰)'™XE&F^I&V‘‰)'™XE&F¾H&.‘‰)'™¸D&¦œd♘r’‰Kdb䛾Ao‘‰­¾Oâ<Ô"SN2±‰LŒ¼‘Ll"SN2±‰Ll Nâj“‰7$‡ÉÄÈI&“‰­½Oâ<ÔS†ºÁûº4Ô"#/$§ÈÄÈ'ÉÄ)21å$§ÈÄ”“L\"[{ŸÄy¨E&¦œdb™y%™XE&¦œdb™˜r’‰Udbä‹d♘r’‰KdbÊI&.‘‰)'™¸E&F¾éô™ØÚû$ÎC-21òF2±‰LL9ÉÄ&21å$›ÈÄÖá$¾C=L&Þ|L&#'™8L&¶þ>‰óP/êïëÒP‹LŒ¼Lœ"#Ÿ$§ÈÄ”“Lœ"#_$—ÈÄÖß'qj‘‰)'™XE&F^I&V‘‰)'™XE&¦œdb™ù"™¸D&¦œd♘r’‰Kdbä›d♘rú½E&¶þ>‰ÓP7‘‰‘7’‰MdbÊI&6‘‰)'™ØD&¶'q µÉÄÈI&“‰‘“L&ÛxŸÄy¨· õ€÷ui¨E&F^H&N‘‰‘O’‰SdbÊI&.‘‰‘/’‰Kdbï“8µÈÄÈ+ÉÄ*21å$«ÈÄ”“L¬"SN2±ŠLŒ|‘L\"SN2q‰LL9ÉÄ-21òM2q‹LL9}ƒÞ"oþ»Çi¨E&¦œdb™˜r’‰MdbÊI&6‘‰mÂICm21r’‰Ãdbä$§ÉÄ6ß'qê#C=á}]j‘‰)'™8E&F>I&N‘‰)'™¸D&F¾H&.‘‰m¾OâôWE&F^I&V‘‰)'™XE&¦œdb™˜r’‰Udbä‹d♘r’‰Kdbä›d♘r’‰[dbÊéô™xóß=NC-21å$›ÈÄ”“Ll"SN2±‰Ll Nâj“‰‘“L&o>I&N“‰m½Oâ4ÔEdbä…db™˜r’‰Sdbä“d♘r’‰Kdbä‹dâ™xó_ô‘†ZdbÊI&V‘‰)'™XE&¦œdb™˜r’‰Mdbä‹d♘r’‰[dbä›d♘r’‰[dbÊéô™xóß=NC-21å$›ÈÄ”“Ll"SN2±‰LlNâj“‰‘“L&o>I&N“‰m¿Oâ<Ô"SN2±ˆLL9ÉÄ)21òI2qŠLL9ÉÄ%21òE2q‰Llû}ç¡™˜r’‰UdbÊI&V‘‰)'™XE&FÞH&6‘‰‘/’‰Kdbä›d♘r’‰[dbÊI&n‘‰)§oÐ[dâÍ÷8 µÈÄ”“Ll"SN2±‰LL9ÉÄ.2±8‰c¨M&FN2q˜L¼ù$™8M&¶ó>‰óP‹LL9ÉÄ"21òJ2qŠLŒ|’Lœ"SN2q‰LŒ|‘L\"ÛyŸÄy¨E&¦œdb™˜r’‰UdbÊI&6‘‰‘7’‰Mdbä‹dâ™ù&™¸E&¦œd♘r’‰[dbÊéô™ØÎû$ÎC-21å$›ÈÄ”“Ll"#ï$»ÈÄþ“8†Údbä$‡ÉÄ›O’‰Ódbÿ¼Oâ<Ô"SN2±ŠLŒ¼’Lœ"#Ÿ$§ÈÄÈÉÄ%21å$—ÈÄþyŸÄy¨E&¦œdb™˜r’‰UdbÊI&6‘‰‘7’‰Mdbä›d♘r’‰[dbÊI&n‘‰)'™¸E&¦œ¾Ao‘‰ýó>‰óP‹LL9ÉÄ&21å$»ÈÄÈ;ÉÄ.2±8‰c¨M&FN2q˜L¼ù$™8M&öò>‰óP‹LL9ÉÄ*21òJ2qŠLŒ|’L\"#_$—ÈÄ”“L\"{yŸÄy¨E&¦œdb™˜r’‰Udbädb™˜r’‰Mdbä›d♘r’‰[dbÊI&n‘‰)'™¸E&¦œ¾A‘‰½¼Oâ<Ô"SN2±‰LŒ¼“Lì"SN2±‹LìNâj“‰‘“Lœ&o>I&N“‰½¾Oâ<Ô"SN2±ŠLŒ¼’Lœ"#_$—ÈÄ”“L\"SN2q‰Lìõ}ç¡™˜r’‰UdbÊI&6‘‰‘7’‰MdbÊI&6‘‰‘o’‰[dbÊI&n‘‰)'™¸E&¦œdâ™ù¡oÐGdb¯ï“8µÈÄ”“Lì"#ï$»ÈÄ”“Lì"{ƒ“8†ÚdâÍ'ÉÄi21r’‰Ódboï“8µÈÄ”“L¬"#¯$—ÈÄÈÉÄ%21å$—ÈÄ”“LÜ"{{ŸÄy¨E&¦œdb™y#™ØD&¦œdb™˜r’‰Mdbä›d♘r’‰[dbÊI&n‘‰)'™xD&F~èô™ØÛû$ÎC-21òN2±‹LL9ÉÄ.21å$»ÈÄÞá$¾C=M&Þ|’Lœ&#'™8M&öþ>‰óP‹LL9ÉÄ*21òJ2q‰LŒ|‘L\"SN2q‰LŒ|“LÜ"{ŸÄy¨E&¦œdb™y#™ØD&¦œdb™˜r’‰Mdbä›d♘r’‰[dbÊI&n‘‰‘’‰GdbÊéô™Øûû$NCÝE&FÞI&v‘‰)'™ØE&¦œdb™ØœÄ1Ô&#'™8M&FN2qšLìã}ç¡™˜r’‰Udbä•dâ™ù"™¸D&¦œdâ™ù&™¸E&öñ>‰óP‹LŒ¼‘Ll"SN2±‰LL9ÉÄ&21å$›ÈÄÈ7ÉÄ-21å$·ÈÄ”“L<"#?$ÈÄ”Ó7è#2ñæ¿{œ†ZdbÊI&v‘‰)'™ØE&¦œdb™Ø'œÄ1Ô&#'™8M&FN2q™Lìó}ç¡™y%™XE&¦œdâ™ù"™¸D&¦œdâ™ù&™¸E&öù>‰Ó_\™y#™ØD&¦œdb™˜r’‰MdbÊI&6‘‰‘o’‰[dbÊI&n‘‰‘’‰GdbÊI&‘‰)§oÐGdâÍ÷8 µÈÄ”“Lì"SN2±‹LL9ÉÄ.2±/8‰c¨M&FN2qšL¼ù"™¸L&öõ>‰ÓPW‘‰‘W’‰UdbÊI&.‘‰‘/’‰KdbÊI&n‘‰‘o’‰[dâÍÑGj‘‰)'™ØD&¦œdb™˜r’‰MdbÊI&v‘‰‘o’‰[dbÊI&‘‰‘’‰GdbÊI&‘‰)§oÐGdâÍ÷8 µÈÄ”“Lì"SN2±‹LL9ÉÄ.2±o8‰c¨M&FN2qšL¼ù"™¸L&öý>‰óP‹LL9ÉÄ*21å$—ÈÄÈÉÄ%21å$·ÈÄÈ7ÉÄ-2±ï÷Iœ‡ZdbÊI&6‘‰)'™ØD&¦œdb™y'™ØE&F¾I&n‘‰‘’‰GdbÊI&‘‰)'™xD&¦œ¾A‘‰7ÿÝã4Ô"SN2±‹LL9ÉÄ.21å$‡ÈÄ~à$Ž¡6™9ÉÄi2ñæ‹dâ2™ØÏû$ÎC-21å$«ÈÄÈÉÄ%21òE2q‰LL9ÉÄ-21òM2q‹Lìç}ç¡™˜r’‰MdbÊI&6‘‰)'™ØE&FÞI&v‘‰‘o’‰Gdbä‡d♘r’‰GdbÊI&‘‰)§oÐGdb?ï“8µÈÄ”“Lì"SN2±‹LŒ|L"ÇNâj“‰‘“Lœ&o¾H&.“‰ãó>‰óP‹LL9ÉÄ&21òF2q‰LŒ|‘L\"#ß$·ÈÄ”“LÜ"Çç}ç¡™˜r’‰MdbÊI&6‘‰)'™ØE&FÞI&v‘‰‘’‰GdbÊI&‘‰)'™xD&¦œd♘rú}D&ŽÏû$ÎC-21å$»ÈÄ”“L"#$‡ÈÄQà$Ž¡6™9ÉÄi2ñæ‹dâ2™8Êû$ÎC-21å$›ÈÄÈÉÄ%21òE2q‹LŒ|“LÜ"SN2q‹Lå}ç¡™˜r’‰MdbÊI&6‘‰‘w’‰]dbÊI&v‘‰‘’‰GdbÊI&‘‰)'™xD&¦œd♘røýÿ_˜ uyŸÄy¨E&¦œdb™ù ™8D&¦œdâ™8*œÄ1Ô&#'™¸L&Þ|‘L\&G}ŸÄy¨E&¦œdb™y#™¸D&F¾I&n‘‰)'™¸E&¦œdâ™8êû$ÎC-21å$›ÈÄ”“Lì"#ï$»ÈÄ”“Lì"#?$ÈÄ”“L<"SN2ñˆLL9ÉÄ#2ñæ¿{œ†Zdbädb™˜r’‰Cdbäƒd♘r’‰CdâhpÇP›L¼ù"™¸L&FN2q™Lí}ç¡™˜r’‰Mdbädâ™ù&™¸E&¦œd♘r’‰Gdâhï“8µÈÄ”“Ll"#ï$»ÈÄ”“Lì"SN2±‹LŒüL<"SN2ñˆLL9ÉÄ#21å 'x=ÿã÷8 µÈÄÈ;ÉÄ.21òA2qˆLL9ÉÄ!21å$‡ÈÄÑá$¾C½L&Þ|‘L\&#'™¸L&Žþ>‰óP‹LL9ÉÄ&21òF2q‹LŒ|“LÜ"SN2q‹LŒüL<"GŸÄy¨E&¦œdb™y'™ØE&¦œdb™˜r’‰]dbä‡d♘r’‰GdbÊI&‘‰7ÿÚãï¡™˜òJC-21òN2qˆLŒ|L"SN2qˆLL9ÉÄ!2q 8‰c¨M&FN2q™LŒœdâ2™8Æû$ÎC-21å$›ÈÄÈÉÄ-21òM2q‹LL9ÉÄ#21òC2ñˆLã}ç¡™y'™ØE&¦œdb™˜r’‰]dbÊI&v‘‰‘’‰GdbÊI&‘‰)™øsÿ õxÄßC-21å†Zdbäƒd♘r’‰CdbÊI&‘‰)'™8D&Ž 'q µÉÄÈI&.“‰‘“LÜ&Ç|ŸÄy¨E&FÞH&6‘‰)'™¸E&F¾I&n‘‰)'™xD&F~H&‘‰c¾Oâ4Ô]dbädb™˜r’‰]dbÊI&v‘‰)'™ØE&F~H&‘‰)'™xD&Þü{¿†ZdbÊ+ µÈÄ”wj‘‰‘’‰CdbÊI&‘‰)'™8D&¦œdâ™8œÄ1Ô&#'™¸L&Þ|“LÜ&ÇzŸÄi¨›ÈÄÈÉÄ&21å$·ÈÄÈ7ÉÄ-21å$ÈÄÈÉÄ#2ñæ¿è# µÈÄ”“Lì"SN2±‹LL9ÉÄ.21å$‡ÈÄÈÉÄ#21å ¿'øw¨×óW⯡™˜òFC-21僆Zdbäƒd♘r’‰CdbÊI&‘‰)'™8D&Ž 'q µÉÄÈI&.“‰7ß$·Éıß'qj‘‰)'™ØD&¦œdâ™ù&™¸E&¦œdâ™ù!™xD&Žý>‰óP‹LL9ÉÄ.21å$»ÈÄ”“Lì"#$‡ÈÄÈÉÄ#2ñæ??Qä¡™˜òJC-21å†ZdbÊ' µÈÄÈÉÄ!21å$‡ÈÄ”“L"SN2qŠLNâj“‰‘“L\&o¾I&n“‰ã¼Oâ<Ô"SN2±‰LŒ¼“LÜ"#ß$·ÈÄ”“L<"#?$ÈÄqÞ'qj‘‰)'™ØE&¦œdb™˜r’‰Cdbäƒdâ™ù™ø3Á?C}Þ'òP‹LLy£¡™˜òAC-21勆Zdbäƒd♘r’‰CdbÊI&‘‰‘O’‰SdâüÀICm21r’‰ËdâÍ7ÉÄm2q~Þ'qj‘‰)'™ØE&FÞI&n‘‰‘o’‰[dbä‡d♘r’‰Gdâü¼Oâ<Ô"SN2±‹LL9ÉÄ.21å$‡ÈÄÈÉÄ!2ñæ?{œ‡ZdbÊ+ µÈÄ”wj‘‰)Ÿ4Ô"S¾i¨E&F>H&‘‰)'™8D&¦œdâ™ù$™8E&Î'q µÉÄÈI&.“‰7ß$·ÉÄYÞ'qj‘‰)'™ØE&FÞI&n‘‰‘o’‰Gdbä‡d♘r’‰Gdâ,ï“8µÈÄ”“Lì"SN2±‹LŒ|L"SN2qˆL¼ùÏç¡™˜òFC-21僆ZdbÊ µÈÄ”“L,"#$‡ÈÄ”“L"#Ÿ$§ÈÄ”“Lœ"g…“8†Údbä$·ÉÄ›o’‰Ûdâ¬ï“8µÈÄ”“Lì"#ï$·ÈÄÈÉÄ#21å$ÈÄ”“L<"g}ŸÄy¨E&¦œdb™˜r’‰Cdbäƒd♘r’‰Cdâ¬ï“8µÈÄ”wj‘‰)Ÿ4Ô"S¾i¨E&F^H&‘‰‘’‰CdbÊI&N‘‰‘O’‰SdbÊI&N‘‰³ÁICm2ñæ›dâ6™9ÉÄm2q¶÷Iœ‡ZdbÊI&v‘‰‘w’‰Gdbä‡d♘r’‰GdbÊA&–ÈÄÙÞ'qj‘‰)'™ØE&F>H&‘‰)'™8D&¦œdâ™8Ûû$ÎC-21僆ZdbÊ µÈÄ”“L,"#/$‹ÈÄÈÉÄ!21òI2qŠLL9ÉÄ)21å$§ÈÄÙá$¾C½M&Þ|“LÜ&#'™¸M&Îþ>‰óP‹LL9ÉÄ.21òN2ñˆLŒüL<"SN2ñˆL¼ùï§¡™y'™ØE&¦œdâ™ù ™8D&¦œd♘r’‰Cdâìï“8µÈÄ”Oj‘‰)ß4Ô"#/$‹ÈÄ”“L,"#$§ÈÄÈ'ÉÄ)21å$§ÈÄ”“Lœ"瀓8†Údbä$·ÉÄÈI&n“‰s¼Oâ<Ô"SN2±‹LŒ¼“L<"#?$ÈÄ”ƒLü™àŸ¡¾BíSh¨E&FÞI&v‘‰‘’‰CdbÊI&‘‰)'™8D&¦œdâ™8Çû$ÎC-21勆ZdbÊI&‘‰‘’‰EdbÊI&‘‰‘O’‰SdbÊI&N‘‰)'™8E&¦œdâ™8'œÄ1Ô&#'™¸M&FN2ñ˜Lœó}ç¡™y'™ØE&¦œdâ™ù!™xD&¦|ÒP‹L¼ùï§¡™y'™8D&F>H&‘‰)'™8D&¦œd♘r’‰Cdâœï“8µÈÄ”oj‘‰‘’‰EdbÊI&‘‰)'™XD&F>I&N‘‰)'™8E&¦œd♘r’‰Sdâ\pÇP›LŒœdâ6™xóC2ñ˜Lœë}§¡î"#ï$»ÈÄ”“L<"#?$ÈÄ”/j‘‰7ÿÝã4Ô"#$‡ÈÄ”“L"SN2qˆLL9ÉÄ!21å$§ÈĹÞ'qj‘‰)'™XD&F^H&‘‰)'™XD&¦œdb™ù$™8E&¦œd♘r’‰SdbÊI&N‘‰sÃICm21r’‰ÛdâÍÉÄc2qî÷Iœ‡ZdbÊI&v‘‰)'™xD&F~H&‘‰)ß4Ô"oþ»Çi¨E&F>H&‘‰)'™8D&¦œd♘r’‰Cdbä“dâ™8÷û$ÎC-21òB2±ˆLL9ÉÄ"21å$‹ÈÄ”“L,"#Ÿ$§ÈÄ”“Lœ"SN2qŠLL9ÉÄ%2q8‰c¨M&FN2q›L¼ù!™xL&Îó>‰óP‹LL9ÉÄ.21òA2ñˆLŒüL<"S~h¨E&ÞüwÓP‹LŒ|L"SN2qˆLL9ÉÄ!21å$§ÈÄÈ'ÉÄ)2qž÷Iœ†ºˆLŒ¼L,"SN2±ˆLL9ÉÄ"21å$‹ÈÄÈ'ÉÄ)21å$§ÈÄ”“Lœ"#_$—ÈÄõ“8†Údbä$·ÉÄ›’‰Çdâú¼Oâ<Ô"SN2qˆLŒ|L<"#?$ÈÄ›ÿ>ÛHC-21哆Zdbäƒd♘r’‰CdbÊI&‘‰)'™8E&F>I&N‘‰7ÿÙã<Ô"SN2±ˆLL9ÉÄ"21å$‹ÈÄ”“L,"#Ÿ$§ÈÄ”“Lœ"SN2q‰LŒ|‘L\"W“8†Údbä$·ÉÄ›’‰Çdâ*ï“8µÈÄ”“L"#$ÈÄÈÈÄŸ þêÏ6ÒP‹LLù¢¡™ù ™8D&¦œd♘r’‰Cdbä“d♘r’‰SdâÍö8µÈÄ”“L,"SN2±ˆLL9ÉÄ"21å$«ÈÄÈ'ÉÄ)21å$§ÈÄÈÉÄ%21å$—ÈÄUá$Ž¡6™9ÉÄc2ñæ‡dâ1™¸êû$ÎC-21å$‡ÈÄÈÉÄ#2ñæ¿'qj‘‰)¯4Ô"S¾i¨E&F>H&‘‰)'™8D&¦œdâ™ù$™8E&¦œd♸êû$ÎC-21å$‹ÈÄ”“L,"SN2±ˆLŒ¼’L¬"#Ÿ$§ÈÄ”“L\"#_$—ÈÄ”“L\"Wƒ“8†ÚdâÍÉÄc21r’‰Çdâjï“8µÈÄ”“L"# _2uƒ“8 µÈÄ”7j‘‰)'™XD&F>H&‘‰)'™8D&F>I&N‘‰)'™8E&¦œd♸Úû$ÎC-21å$‹ÈÄ”“L,"SN2±ŠLŒ¼’L¬"#Ÿ$§ÈÄÈÉÄ%21å$—ÈÄ”“L\"W‡“øõ1™xóC2ñ˜LŒœdâ1™¸úû$ÎC-21å$‡ÈÄÈÇ ¡™¸:œÄi¨E&¦¼ÓP‹LŒ¼L,"#$‡ÈÄ”“Lœ"#Ÿ$§ÈÄ”“Lœ"SN2qŠL\ý}ç¡™˜r’‰EdbÊI&‘‰‘W’‰UdbÊI&V‘‰‘O’‰Kdbä‹d♘r’‰KdbÊI&.‘‰kÀICm21r’‰Çdbä$ÉÄ5Þ'qj‘‰)'™8D&F>& µÈÄ5à$NC-21å$‹ÈÄÈ ÉÄ"21òA2qˆLŒ|’Lœ"SN2qŠLL9ÉÄ)21å$§ÈÄ5Þ'qj‘‰)'™XD&¦œdb™y%™XE&¦œdb™ù"™¸D&¦œd♘r’‰KdbÊI&.‘‰kÂICm21r’‰Çdbä ËççƒÚ÷PÏ÷Iœ‡Zdbäƒd♘òEC-2qM8‰ÓP‹LL9ÉÄ"21òB2±ˆLŒ|Lœ"#Ÿ$§ÈÄ”“Lœ"SN2qŠLL9ÉÄ)2qÍ÷Iœ‡ZdbÊI&‘‰‘W’‰UdbÊI&V‘‰)'™XE&F¾H&.‘‰)'™¸D&¦œd♘r’‰KdâZpÇP›LŒœdâ1™¸.¯ûùG-ÒPêõ>‰ÓP‘‰‘’‰CdbÊ7 µÈĵà$NC-21å$‹ÈÄÈ ÉÄ"21òI2qŠLL9ÉÄ)21å$§ÈÄ”“Lœ"SN2q‰L\ë}ç¡™˜r’‰Udbä•db™˜r’‰UdbÊI&V‘‰‘/’‰KdbÊI&.‘‰)'™¸D&¦œd♸6œÄ1Ô&#'™xL&®Ëë~þQ‹4ÔU†z¿Oâ<Ô"SN2qˆLLù¡¡™¸6œÄi¨E&¦œdb™y!™XD&F>I&N‘‰)'™8E&¦œd♘r’‰Sdbä‹d♸öû$ÎC-21òJ2±ŠLL9ÉÄ*21å$«ÈÄ”“L¬"#_$—ÈÄ”“L\"SN2q‰LL9ÉÄ-2q8‰c¨M&FN2ñ˜L\—×ýü£i¨› õyŸÄy¨E&¦œdâ™ùüÐP‹L\Nâ4Ô"SN2±ˆLŒ¼L,"#Ÿ$§ÈÄ”“Lœ"SN2qŠLL9ÉÄ%21òE2q‰L\ç}§¡®"#¯$«ÈÄ”“L¬"SN2±ŠLL9ÉÄ*21òE2q‰LL9ÉÄ%21å$—ÈÄÈ7ÉÄ-2qà$Ž¡6™9ÉÄc2q_÷óZ¤¡î<Ô‘’‰CdbÊI&N‘‰‘ÏBC-2qà$NC-21òB2±ˆLL9ÉÄ"21òI2qŠLL9ÉÄ)21å$§ÈÄ”“L\"#_$—ÈÄ›ÿìqj‘‰)'™XE&¦œdb™˜r’‰UdbÊI&V‘‰‘/’‰KdbÊI&.‘‰)'™¸E&F¾I&n‘‰»ÀICm21r’‰Çdâ¾:ïçµHC=d¨Ëû$ÎC-21å$§ÈÄÈg¥¡™¸ œÄ1ÔEdbä…db™˜r’‰Edbä“d♘r’‰SdbÊI&N‘‰‘/’‰KdbÊI&.‘‰7ÿÙã<Ô"SN2±ŠLL9ÉÄ*21å$«ÈÄ”“Ll"#_$—ÈÄ”“L\"#ß$·ÈÄ”“LÜ"w…“8†Údbä ¿?þ3Ô÷ýü£i¨§ u}ŸÄy¨E&¦œdâ™ùl4Ô"oþ{§¡™˜r’‰EdbÊI&‘‰‘O’‰SdbÊI&N‘‰)'™¸D&F¾H&.‘‰)'™¸D&îú>‰óP‹LL9ÉÄ*21å$«ÈÄ”“L¬"#o$›ÈÄÈÉÄ%21å$·ÈÄÈ7ÉÄ-21å$·ÈÄÝà$Ž¡6™¸ÛûÙFê"Cù¤¡^2Ôí}ç¡™˜r’‰Sdbä“db™xóß“8 µÈÄ”“L,"SN2±ŠLŒ|’Lœ"SN2qŠLŒ|‘L\"SN2q‰LL9ÉÄ%2q·÷Iœ‡ZdbÊI&V‘‰)'™XE&¦œdb™y#™ØD&F¾H&.‘‰‘o’‰[dbÊI&n‘‰)'™¸E&î'ñßPÿó’ù{¨ûûÙFê*Cù¢¡Þ2Ôý}ç¡™˜r’‰Sdbä“db™¸;œÄi¨E&¦œdb™y%™XE&F>I&N‘‰)'™¸D&F¾H&.‘‰)'™¸D&¦œd♸ûû$ÎC-21å$«ÈÄ”“L¬"#o$›ÈÄ”“Ll"#_$·ÈÄÈ7ÉÄ-21å$·ÈÄ”“LÜ"÷€“8 u‘¡ïgy¨› u䛆úÈP÷Iœ‡ZdbÊI&N‘‰‘O’‰Edâp§¡™˜r’‰Udbä•db™ù$™8E&F¾H&.‘‰)'™¸D&¦œd♘r’‰Kdâï“8µÈÄ”“L¬"SN2±‰LŒ¼‘Ll"SN2±‰LŒ|“LÜ"SN2q‹LL9ÉÄ-21å$·ÈÄ=á$NC]e¨çûÙFê.Cù¡."#$‡ÈÄÈ'ÉÄ)21å$‹ÈÄ=á$NC-21å$«ÈÄÈ+ÉÄ*21òI2q‰LŒ|‘L\"SN2q‰LL9ÉÄ%21å$—ÈÄ=ß'qj‘‰)'™XE&FÞH&6‘‰)'™ØD&¦œdb™ù&™¸E&¦œd♘r’‰[dbÊI&n‘‰{ÁIœ†ºÉP¯÷³<ÔC†úæ…db™ù ™8E&F>I&N‘‰)'™XD&î'qj‘‰)'™XE&F^I&V‘‰‘/’‰KdbÊI&.‘‰)'™¸D&¦œd♘r’‰[dâ^ï“8µÈÄ”“Ll"#o$›ÈÄ”“Ll"SN2±‰LŒ|“LÜ"SN2q‹LL9ÉÄ-21å$·ÈĽá$NCÝe¨÷ûÙFê)C}óB2±ˆLŒ|’Lœ"SN2qŠLL9ÉÄ"2qo8‰ÓP‹LL9ÉÄ*21òJ2±ŠLŒ|‘L\"SN2q‰LL9ÉÄ%21å$—ÈÄÈ7ÉÄ-2qï÷Iœ‡Zdbädb™˜r’‰MdbÊI&6‘‰)'™ØD&F¾I&n‘‰)'™¸E&¦œd♘r’‰Gdâ>p§¡2Ôçýl#õ’¡¾y!™XD&F>I&N‘‰)'™8E&F¾H&‘‰ûÀIœ†ZdbÊI&V‘‰‘W’‰Udbä‹d♘r’‰KdbÊI&.‘‰)'™¸E&F¾I&n‘‰û¼Oâ4ÔMdbädb™˜r’‰MdbÊI&6‘‰)'™ØD&F¾I&n‘‰)'™¸E&¦œdâ™ù!™xD&žœÄi¨'uÊ õ桎¼L,"#Ÿ$§ÈÄ”“L\"#_$‹ÈÄó“8 µÈÄÈ+ÉÄ*21å$«ÈÄÈÉÄ%21å$—ÈÄ”“L\"SN2q‹LŒ|“LÜ"oþ³Çy¨E&¦œdb™˜r’‰MdbÊI&6‘‰)'™ØD&F¾I&n‘‰)'™¸E&¦œdâ™ù!™xD&ž'qê%C]ÞÏ6òPê›’‰Edbä“d♘r’‰Kdbä‹db™x œÄ1ÔUdbä•db™˜r’‰Udbä‹d♘r’‰KdbÊI&.‘‰‘o’‰[dbÊI&n‘‰7ÿÙã<Ô"SN2±‰LL9ÉÄ&21å$›ÈÄ”“Lì"#ß$·ÈÄ”“LÜ"#?$ÈÄ”“L<"O…“8 õ–¡®ïgi¨‹ÈÄÈ ÉÄ"21òI2qŠLL9ÉÄ%21òE2±ˆL¼ùïIœ†ZdbÊI&V‘‰)'™XE&F¾H&.‘‰)'™¸D&¦œdâ™ù&™¸E&¦œdâ™xêû$ÎC-21å$›ÈÄ”“Ll"SN2±‰LŒ¼“Lì"#ß$·ÈÄ”“L<"#?$ÈÄ”“L<"Oƒ“8 õ‘¡nïgy¨E&¦œdb™ù$™8E&¦œdâ™ù"™XE&Þü÷$NC-21å$«ÈÄ”“Ll"#_$—ÈÄ”“L\"#ß$·ÈÄ”“LÜ"SN2q‹L<í}ç¡™˜r’‰MdbÊI&6‘‰)'™ØE&FÞI&v‘‰‘o’‰[dbä‡d♘r’‰GdbÊI&‘‰§ÃIC]D&F^H&‘‰)'™XD&F>I&N‘‰)'™¸D&F¾H&V‘‰§ÃIœ†ZdbÊI&V‘‰‘7’‰Mdbä‹d♘r’‰[dbä›d♘r’‰[dbÊI&n‘‰§¿Oâ<Ô"SN2±‰LL9ÉÄ&21òN2±‹LL9ÉÄ.21òM2ñˆLŒüL<"SN2ñˆLL9ÉÄ#2ñ 8‰ÓP‹LL9ÉÄ"21å$‹ÈÄÈ'ÉÄ)21å$—ÈÄÈÉÄ*2ñ 8‰ÓP‹LL9ÉÄ&21òF2±‰LŒ|‘L\"#ß$·ÈÄ”“LÜ"SN2q‹LL9ÉÄ-2ñŒ÷Iœ‡ZdbÊI&6‘‰)'™ØE&FÞI&v‘‰)'™ØE&F~H&‘‰)'™xD&¦œd♘r’‰Gdâ™p§¡™˜r’‰EdbÊI&V‘‰‘O’‰Sdbä‹d♘r’‰Udâ™p§¡™˜r’‰Mdbädb™ù"™¸E&F¾I&n‘‰)'™¸E&¦œd♘r’‰[dâ™ï“8µÈÄ”“Ll"#ï$»ÈÄ”“Lì"SN2±‹LŒüL<"SN2ñˆLL9ÉÄ#21å$Èijà$NC-21å$‹ÈÄÈ+ÉÄ*21òI2q‰LŒ|‘L\"SN2±ŠL< Nâ4Ô"SN2±‰LŒ¼‘Ll"#ß$·ÈÄ”“LÜ"SN2q‹LL9ÉÄ-21å$ÈijÞ'qj‘‰)'™ØE&FÞI&v‘‰)'™ØE&¦œdb™ù!™xD&¦œd♘r’‰GdbÊI&‘‰gÃIœ†ZdbÊI&‘‰‘W’‰Udbä‹d♘r’‰KdbÊI&V‘‰gÃIœ†ZdbÊI&6‘‰‘7’‰Mdbä›d♘r’‰[dbÊI&n‘‰)'™¸E&F~H&‘‰g¿Oâ<Ô"#ï$»ÈÄ”“Lì"SN2±‹LL9ÉÄ.21òC2ñˆLL9ÉÄ#21å$ÈÄ”ƒLl‘‰çÀIœ†ZdbÊI&‘‰‘W’‰Udbä‹d♘r’‰Kdbä›db™xœÄi¨E&¦œdb™y#™ØD&F¾I&n‘‰)'™¸E&¦œd♘r’‰Gdbä‡dâ™xÎû$NCÝE&FÞI&v‘‰)'™ØE&¦œdb™˜r’‰]dbä‡d♘r’‰GdbÊI&‘‰7ÿÞ㯡f™øý{§¡f™˜s’‰…ebÊ+ÉÄÊ21å‹dâb™˜s’‰›ebÊ7ÉÄÊ21òß“8 5ËÄ”7’‰ebÎI&6–‰)ß$7ËÄœ“LÜ,sN2q³LÌ9ÉÄÃ21å‡dâa™ùÏç¡f™˜s’‰ebÎI&v–‰9'™ØY&æœdbg™˜òC2ñ°LÌ9ÉÄÃ21ç ¿&øg¨#ÿÞ㯡®2ÔNâ4ÔK†º¼Ÿmä¡>2Ô7¯$ë¡.ï“8u—¡.ð¾. u‘¡¾ù&™X· u“8†º}d¨ <ÛHC=e¨#'™Ø¶ uyŸÄy¨‡ uyŸÄy¨— uyŸÄy¨ uyÿv‘‡ºÊPGN2ñtêò>‰óPWêò~8‘‡ºËP—ç¯Ä_C=e¨Ëë$þê-C9ÉÄñ‘¡.ï“8õ’¡.Ï“øk¨ uyžÄ_C]d¨#¯4ÔM†ºÂIœ†zËP×÷³4Ôõ#C}óJ2±Nêú>‰óPê ïëÒPWê›o’‰õÈPW8‰ÓPê Ï6ÒP/êÈI&¶#C]ß'qê)C]ß'qê-C]ß'qêó‘¡®ïß.òP7êÈI&ž!C]ß'qê&C]ß'òPêúü•øk¨— u}ÄßC}d¨o>H&Ž"C]ß'qê-C]Ÿ'qêŸ_‰†º>O⯡®2Ô‘7ê.CÝà$NC}d¨ÛûÙFê"C9Éĺd¨Ûû$ÎC=e¨¼¯KCÝd¨o¾I&¶ uƒ“8 u•¡nðl# õ–¡ŽœdbÿÈP·÷Iœ‡zÉP·÷Iœ‡úÈP·÷Iœ‡ºÈP·÷oy¨» uä$Ï”¡nï“8u—¡nï‡y¨§ u{þJü5Ô[†º½N⯡ê›’‰£ÊP·÷Iœ‡úÈP·çIü5ÔE†º=O⯡n2Ô‘wê!CÝá$Ž¡®êþ~¶‘‡ºÊPGN2±nêþ>‰óP/êïëÒPwê›o’‰­ÈPw8‰ÓP7êÏ6ÒPê›w’‰½ÈP÷÷Iœ‡zËP÷÷Iœ†ú|d¨ûû$ÎC]e¨ûû·‹<ÔC†:r’‰gÉP÷÷Iœ‡zÈP÷÷É<ÔK†º?%þê#CÝ_'ñ÷PêÈI&Ž&CÝß'q uû|d¨ûó$þê*CÝŸ'ñ×PwêÈ õ”¡p§¡.2Ôãýl#u“¡Žœdb=2Ôã}ç¡Þ2ÔÞ×¥¡2Ô7ß$[•¡p§¡î2ÔžmÄP÷ õÍ;ÉÄ^e¨Çû$ÎC}d¨Çû$ÎC]d¨Çû$ÎCÝd¨Çû·‹<ÔS†:r’‰gËP÷Iœ‡zÊP÷É<Ô[†z<%ÎC=>2Ôãuu•¡Žœdâè2Ôã}ç¡.2Ôãy u“¡Ï“øk¨‡ u䓆zÉPO8‰ÓPWêù~¶‘‡ºËPGN2±}d¨çû$ÎC}d¨'¼¯KC=e¨#'™Øš õ„“8 õ¡žðl# u‘¡¾y'™Ø› õ|ŸÄi¨ÏG†z¾Oâ<ÔU†z¾Oâ<Ô]†z¾»ÈC½d¨#'™xŽ õ|ŸÄy¨— õ|?œÈC}d¨çóW⯡.2Ôóuu“¡Žœdâ2Ôó}ç¡®2Ôóy u—¡žÏ“øk¨§ u䋆zËP/8‰ÓP7êõ~¶‘‡zÈPß¼‘LlE†z½Oâ4Ôû#C½à}]ê%C9ÉÄÖe¨œÄi¨§ õ‚gi¨« õÍ;ÉÄÞe¨×û$ÎC]d¨×û$ÎCÝd¨×û$ÎC=d¨×û·‹<Ô[†:r‰õó‘¡^ï“8õ–¡^ï‡i¨ÇG†z=%þê*C½^'ñ÷PwêÈI&Ž)C½Þ'qê&C½ž'ñ×Pêõ<‰¿†zÉPG¾i¨ õ†“8 u—¡Þïgy¨§ õÍÉÄVe¨÷û$ÎC]d¨7¼¯KC½e¨#'™Ø† õ†“8 õ’¡Þðl# u“¡¾y'™Ø‡ õ~ŸÄy¨« õ~ŸÄy¨» õ~ŸÄy¨§ õ~ÿv‘‡úÈP_böùÐPêý>‰óPêý~8‘‡ºÈPïç¯Ä_CÝd¨÷ë$þê!C9Éıd¨÷û$ÎCÝe¨÷ó$þê)C½Ÿ'ñ×PoêÈI&– õ“8 õ¡>ïgy¨— õÍÉÄÖd¨Ïû$ÎC]e¨¼¯KC}d¨o~H&¶)C}à$NC½e¨<ÛHCÝe¨oÞI&ö)C}Þ'qê&C}Þ'qê!C}Þ'qê%C}Þ¿]ÄPÿLðÏP_¡ö)4ÔU†ú¼Oâ4Ôã#C}Þ'òPWêóü•øk¨» õyÄßC=e¨#'™8¶ õyŸÄy¨‡ õyžÄ_C½d¨Ïó$þê#C}óB2±ˆL,8‰ÓP‹LL9ÉÄ*21òF2±‰LŒ|“LÜ"SN2ñˆLŒüLl"ËNâ4Ô"#ï$»ÈÄ”“Lì"#?$ÈÄ”“L<"SN2ñˆLLù¡¡™xóú©4Ô"#$‡ÈÄ”“L"SN2qˆLL9ÉÄ!21å$‡ÈÄòyŸÄy¨E&¦|ÑP‹LL9ÉÄ"21òB2±ˆL,Nâ4Ô"SN2±ŠLŒ¼‘Ll"#ß$·ÈÄ”“L<"#?$›ÈÄRà$Ž¡î"#ï$»ÈÄ”“Lì"#?$ÈÄ”“L<"SN2ñˆL¼ùïᜆZdbÊ µÈÄÈÉÄ!21å$‡ÈÄ”“L"SN2qˆLL9ÉÄ)2±”÷Iœ‡ZdbÊ7 µÈÄÈ ÉÄ"21å$‹ÈÄRá$NC-21å$›ÈÄÈÉÄ&21òM2q‹LL9ÉÄ#21òC2±‰L¼ùïIœ†ZdbÊI&v‘‰)'™ØE&F~H&‘‰)'™xD&¦dâÏÿ u}ÿv‘‡ZdbÊ; µÈÄÈÉÄ!21å$‡ÈÄ”“L"SN2qˆLŒ|’Lœ"K}ŸÄy¨E&¦œdb™y!™XD&¦œdb™XœÄi¨E&FÞH&6‘‰)'™ØD&F¾I&n‘‰)'™xD&F~H&v‘‰7ÿ=‰ÓP‹LL9ÉÄ.21å$‡ÈÄÈÉÄ#21å$ÈÄ›ÿìqj‘‰)¯4Ô"S>h¨E&F>H&‘‰)'™8D&¦œd♘r’‰Sdbä“dâ™XÚû$ÎC-21òB2±ˆLL9ÉÄ"21å$‹ÈÄÒá$Ž¡n"#o$›ÈÄ”“Ll"#ß$·ÈÄ”“L<"#?$»ÈÄÒá$NC-21å$»ÈÄÈÉÄ!21òC2ñˆLL9ÈÄßnßCÝß'qj‘‰)o4Ô"S>i¨E&F>H&‘‰)'™8D&¦œdâ™ù$™8E&¦œdâ™Xúû$NC]D&F^H&‘‰)'™XD&¦œdb™XœÄi¨E&¦œdb™˜r’‰Mdbä›d♘r’‰Gdbä‡db™XœÄi¨E&¦œdâ™ù ™8D&F~H&‘‰7ÿçÅq µÈÄ”Wj‘‰)ï4Ô"S¾h¨E&F>H&‘‰)'™8D&¦œdâ™ù$™8E&¦œdâ™xóß=NC-21å$‹ÈÄ”“L,"SN2±ˆL,Nâ4Ô"SN2±‰LL9ÉÄ.21òM2q‹LŒüL<"SN2±‹L,Nâ4Ô"SN2qˆLŒ|L"#?ôUè#2ñæÿ¼8Ž¡™˜òFC-21僆ZdbÊ7 µÈÄÈÉÄ!21å$‡ÈÄÈ'ÉÄ)21å$§ÈÄ”“Lœ"oþ»Çi¨E&¦œdb™˜r’‰EdbÊI&‘‰eÁIœ†ZdbÊI&6‘‰‘w’‰]dbä›dâ™ù!™xD&¦œdb™XœÄi¨E&¦œdâ™ù ™8D&Þü}¤¡™˜òJC-21å†ZdbÊ' µÈÄ”“L,"#$‡ÈÄ”“Lœ"#Ÿ$§ÈÄ”“Lœ"SN2qŠL¼ùï§¡™˜r’‰EdbÊI&‘‰)'™XD&– 'qj‘‰)'™ØD&FÞI&v‘‰‘’‰GdbÊI&‘‰)'™ØE&– 'qj‘‰)'™8D&F>H&‘‰e¿Oâ<Ô"SÞh¨E&¦|ÐP‹LLù¢¡™y!™XD&F>H&‘‰‘O’‰SdbÊI&N‘‰)'™8E&¦œdâ™xóß=NC-21å$‹ÈÄ”“L,"SN2±ŠL,Nâ4Ô"SN2±‰LŒ¼“Lì"#?$ÈÄ”“L<"o^>$»ÈÄÈ;ÉÄ.21å$‡ÈÄÈÉÄ!2±œ÷Iœ‡ZdbÊ; µÈÄ”Oj‘‰)'™XD&F^H&‘‰‘’‰Sdbä“d♘r’‰SdbÊI&N‘‰)'™8E&–ó>‰óP‹LL9ÉÄ"21å$‹ÈÄÈ+ÉÄ*2±~à$NC-21å$›ÈÄÈ;ÉÄ.21òC2ñˆLL9ÈÄŸ þê›—ÉÄ.21òN2±‹LŒ|L"SN2qˆL¬Ÿ÷Iœ‡ZdbÊ µÈÄ”/j‘‰)'™XD&F^H&‘‰‘O’‰SdbÊI&N‘‰)'™8E&¦œd♘r’‰Sdbý¼Oâ<Ô"SN2±ˆLL9ÉÄ*21òJ2±ŠL¬Nâ4Ô"SN2±‰LŒ¼“Lì"#?$ÈÄ”j‘‰7/’‰]dbädâ™ù ™8D&¦œdâ™XËû$ÎC-21哆ZdbÊ7 µÈÄÈ ÉÄ"21å$‹ÈÄÈ'ÉÄ)21å$§ÈÄ”“Lœ"SN2qŠLL9}ƒ^"kyŸÄy¨E&¦œdb™y%™XE&¦œdb™X+œÄi¨E&¦œdb™y'™ØE&F~H&‘‰)Ÿ4Ô"o^>$»ÈÄÈÉÄ!21å$‡ÈÄ”“L"k}ŸÄy¨E&¦|ÑP‹LL9ÉÄ"21òB2±ˆLL9ÉÄ"21òI2qŠLL9ÉÄ)21å$§ÈÄ”“Lœ"#_ô z‰L¬õ}ç¡™˜r’‰Udbä•db™˜r’‰Udbmp§¡™y'™ØE&¦œdb™ù!™xD&¦|ÑP‹L¼yùL"#$‡ÈÄ”“L"SN2qŠL¬í}ç¡™˜òMC-21òB2±ˆLL9ÉÄ"21å$‹ÈÄÈ'ÉÄ)21å$§ÈÄ”“Lœ"SN2q‰LŒ|Ñ7è%2±¶÷Iœ‡Zdbä•dbýo{¹­mG‚ ê’ø'ýw¬G­Ê«·# @% gs‰LŒœdb™9ÉÄ.2±O8‰k¨§ÈÄÊ'ÉÄ)21r’‰Sdbådâ™ù¥¡™ø›·’‰Kdbå‹dâ™9ÉÄ%2±òM2q‹Lìóû$Ρ™9ÉÄ&2±òF2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-2±òC2ñˆLŒœ¾A‘‰}~ŸÄ1Ô]dbådb™9ÉÄ.21r’‰]db_pÇP‹LŒœdâ™9ÉÄ)2±òG2ñ‰LŒüÑP‹LüÍÛÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&öõ}çP‹L¬¼‘Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&FNß ÈÄßüïÇP‹LŒœdb™9ÉÄ.21r’‰]dbßpÇP‹LŒœdâ™9ÉÄ%2±òG2ñ‰LüÍÿ¾¯‹¡™9ÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&öý}Ç\™Xy#™ØD&FN2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™Xù!™xD&FN2ñˆLŒœ¾A‘‰¿ùß=Ž¡™9ÉÄ.21r’‰]dbä$»ÈÄ~à$Ž¡™9ÉÄ)2±òE2q‰L¬üLü3Á†úÀûºj‘‰‘“L\"+_$—ÈÄÈI&n‘‰•o’‰[dâoþ}ÄP‹LŒœdb™9ÉÄ&21r’‰Mdbä$»ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™9ÉÄ#21rú}D&þæ÷8†Zdbä$»ÈÄÈI&v‘‰‘“Lì"û…“8†Zdbä$§ÈÄÊÉÄ%2ñ7ÿûÞ9†Zdbä†Zdbä$—ÈÄÊÉÄ%21r’‰[dbå›dâ™Øï÷IœC-21r’‰Mdbä$›ÈÄÈI&6‘‰•w’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™9}ƒ>"ó¿{C-21r’‰]dbä$»ÈÄÈI&‘‰ýÁIC-21r’‰Sdbå‹dâ™Øß÷IœC-21òAC-2±òF2q‰L¬|‘L\"#'™¸E&V¾I&n‘‰ý}ŸÄ9Ô"#'™ØD&FN2±‰LŒœdb™Xy'™ØE&V¾I&‘‰•’‰Gdbä$ÈÄÈI&‘‰‘Ó7è#2±¿ï“8‡Zdbä$»ÈÄÈI&v‘‰•’‰Cdâø“8†Zdbä$§ÈÄÊÉÄ%2qü|ŸÄ9Ô"#'™ØD&VÞH&.‘‰•/’‰Kdbå›dâ™9ÉÄ-2qü|ŸÄ9Ô"#'™ØD&FN2±‰LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆLŒœ¾A‘‰ãçû$Ρ™9ÉÄ.21r’‰Cdbåƒdâ™8œÄ1Ô"#'™8E&V¾H&.‘‰£}ŸÄ9Ô"#'™ØD&VÞH&.‘‰•/’‰[dbå›dâ™9ÉÄ-2q´ï“8‡Zdbä$›ÈÄÈI&6‘‰•w’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰‘Ó7è+2q´ï“8‡Zdbä$»ÈÄÊÉÄ!21r’‰CdâèpÇP‹LŒœdâ™Xù"™¸D&Žþ}çP‹LŒœdb™Xy#™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&Žþ}çP‹LŒœdb™9ÉÄ.2±òN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2±òKß ¯ÈÄÑ¿Oâj‘‰‘“L"+$‡ÈÄÈI&‘‰cÀIC-2±òE2q‰LŒœdâ™8Æ÷IœC-21r’‰Mdbådâ™Xù&™¸E&FN2q‹LŒœdâ™8Æ÷IœC-21r’‰Mdbådb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$¯ÈÄÊ/}ƒ¾"Çø>‰s¨E&V>H&‘‰‘“L"#'™8D&Ž 'q õ™Xù"™¸D&FN2q‰Lóû$Ρ™9ÉÄ&2±òF2q‹L¬|“LÜ"#'™¸E&V~H&‘‰c~ŸÄ9Ô"#'™ØE&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&V~I&^‘‰‘Ó7è+2qÌï“8†zˆL¬|L"#'™8D&FN2qˆL Nâj‘‰‘“L\"#'™¸D&Žõ}çP‹LŒœdb™Xy#™¸E&V¾I&n‘‰‘“L<"+?$Èı¾Oâj‘‰•w’‰]dbä$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L¼"+¿$¯ÈÄÈéô™ø›ÿÝãj‘‰‘“L"#'™8D&FN2qˆLNâj‘‰‘“L\"#'™¸E&Žý}çP‹L¬¼‘Ll"#'™¸E&V¾I&n‘‰‘“L<"+?$Èı¿Oâøë"+ï$»ÈÄÈI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"+¿$¯ÈÄÈI&^‘‰‘Ó7è+2ñ7ÿ»Ç1Ô"#'™8D&FN2qˆLŒœdâ™8œÄ1Ô"#'™¸D&V¾I&n‘‰ã|ŸÄ1ÔMdbådb™9ÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&þæÑG µÈÄÈI&v‘‰‘“Lì"#'™ØE&FN2qˆL¬üL<"#'™xE&V~I&^‘‰‘“L¼"#§oÐWdâoþwc¨E&FN2qˆLŒœdâ™9ÉÄ!2q\8‰c¨E&FN2q‰L¬|“LÜ"ó¿ïc¨E&FN2±‰LŒœdâ™Xù&™¸E&FN2ñˆL¬üL<"Çý>‰s¨E&FN2±‹LŒœdb™9ÉÄ.2±òA2qˆL¬üL<"+¿$¯ÈÄÈI&^‘‰‘“L¼"#§oÐWdâoþwc¨E&FN2qˆLŒœdâ™9ÉÄ)2q<8‰c¨E&FN2q‰L¬|“LÜ"Çû>‰s¨E&FN2±‰L¬¼“LÜ"+ß$·ÈÄÈI&‘‰•’‰Gdâxß'qµÈÄÈI&v‘‰‘“Lì"#'™8D&V>H&‘‰•’‰Wdbå—dâ™9ÉÄ+21r’‰Wdbäô úŠLïû$Ρ™9ÉÄ!21r’‰Cdbå“dâ™8à$Ž¡™9ÉÄ%2±òM2q‹Lœ?ß'qµÈÄÈI&v‘‰•w’‰[dbå›dâ™Xù!™xD&FN2ñˆLœ?ß'qµÈÄÈI&v‘‰‘“Lì"#'™8D&V>H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"#§oÐWdâüù>‰s¨E&FN2qˆLŒœdâ™Xù$™8E&Î'q µÈÄÈI&.‘‰•o’‰[dâlß'qµÈÄÈI&v‘‰•w’‰[dbå›dâ™Xù!™xD&FN2ñˆLœíû$Ρ™9ÉÄ.21r’‰]dbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbäô ú‰Lœíû$Ρ™9ÉÄ!2±òI2qŠLŒœdâ™8;œÄ1Ô"#'™¸E&V¾I&n‘‰³ŸÄ9Ô"#'™ØE&VÞI&n‘‰•’‰Gdbä$ÈÄÈI&‘‰³ŸÄ9Ô"#'™ØE&FN2qˆL¬|L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL¬üÑ7è'2qöï“8‡Zdbä$§ÈÄÊ'ÉÄ)21r’‰SdâpÇP‹L¬|“LÜ"#'™¸E&Îñ}çP‹LŒœdb™Xy'™xD&V~H&‘‰‘“L<"#'™xE&Îñ}çP‹LŒœdb™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ'2±òGß ŸÈÄ9¾Oâj‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰sÂI\C½E&V¾I&n‘‰‘“LÜ"çü>‰s¨E&FN2±‹L¬¼“L<"+?$ÈÄÈI&‘‰•_’‰Wdâœß'qµÈÄÈI&‘‰•’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰•?’‰Odbäô ú‰Lœóû$Ž¡ž"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"ç‚“8†Zdbä$·ÈÄÈI&n‘‰s}ŸÄ9Ô"#'™ØE&VÞI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+2q®ï“8‡Zdbåƒdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$ŸÈÄÊÉÄ'21rúýD&þæ÷8†Zdbä$§ÈÄÈI&N‘‰‘“Lœ"熓8†Zdbä$·ÈÄÈI&‘‰sŸÄ9Ô"+ï$»ÈÄÈI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+2qîï“8þã†ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÊÉÄ'21r’‰Odbäô ú‰LüÍÿîq µÈÄÈI&N‘‰‘“Lœ"#'™8E&Î'q µÈÄÈI&n‘‰•’‰Gdâ<ß'q u™Xy'™ØE&FN2ñˆL¬üL<"#'™xE&V~I&^‘‰¿ù_ôC-21r’‰Cdbä$‡ÈÄÈI&‘‰‘“Lœ"+¿$¯ÈÄÈI&>‘‰•?’‰Odbä$ŸÈÄÈéô™ø›ÿÝãj‘‰‘“Lœ"#'™8E&FN2qŠLœNâj‘‰‘“LÜ"+?$ÈÄßüï{çj‘‰‘“Lì"#'™xD&V~H&‘‰‘“L¼"+¿$¯ÈÄy¿Oâj‘‰‘“L"#'™8D&FN2qˆL¬|’Lœ"+¿$¯ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈéô™ø›ÿÝãj‘‰‘“Lœ"#'™8E&FN2q‰LœNâj‘‰‘“LÜ"+?$ÈÄù¾Oâj‘‰‘“Lì"+$ÈÄÊÉÄ#21r’‰Wdbå—dâ™8ß÷IœC-21r’‰Cdbä$‡ÈÄÈI&N‘‰•O’‰Sdbå—dâ™Xù#™øD&FN2ñ‰LŒœdâ™9}ƒ~"çû>‰s¨E&FN2qŠLŒœdâ™Xù"™¸D&®8‰c¨E&FN2q‹L¬üL<"×Ï÷IœC-21r’‰Cdbåƒdâ™Xù!™xD&V~I&^‘‰‘“L¼"×Ï÷IœC-21r’‰Cdbä$‡ÈÄÈI&N‘‰•O’‰Sdbådâ™9ÉÄ'21r’‰Odbä$ŸÈÄÈéô™¸~¾Oâj‘‰‘“Lœ"#'™¸D&V¾H&.‘‰«ÁIC-21r’‰[dbå‡d♸Ú÷IœC-21r’‰Cdbåƒdâ™Xù!™xE&V~I&^‘‰‘“L¼"Wû>‰s¨E&FN2qˆLŒœdâ™Xù$™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™9|ƒ?"Wû>‰s¨E&FN2qŠL¬|‘L\"#'™¸D&®'q µÈÄÈI&‘‰•’‰Gdâêß'qµÈÄÈI&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdâêß'qµÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"ó¿{C-2±òI2qŠLŒœdâ™Xù"™¸D&FN2q‰L\Nâj‘‰•’‰Gdbä$ÈÄ5¾Oâj‘‰‘“L"+$¯ÈÄÊ/ÉÄ+21r’‰Wdbä$ŸÈÄ5¾Oâj‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#™øw‚Ïçÿwc¨E&V>I&N‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰kÂI\C}D&V~H&‘‰‘“L<"×ü>‰s¨E&FN2qˆL¬|L¼"+¿$¯ÈÄÈI&^‘‰•?’‰Odâšß'qµÈÄÈI&N‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰¿ù?{üïP‹LŒ¼ÓP‹L¬|’L\"+_$—ÈÄÈI&.‘‰‘“L\"ׂ“8†Zdbä$ÈÄÈI&‘‰k}ŸÄ9Ô"#'™8D&V>H&^‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'2q­ï“8‡Zdbå“dâ™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä ÿœÄ†z}ÄÿµÈÄÈ µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰kÃIC-21r’‰Gdbä$¯Èĵ¿Oâj‘‰•’‰Cdbä$¯ÈÄÊ/ÉÄ+21r’‰Odbåd♸ö÷IC=E&V>I&N‘‰‘“Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&þæÿîñ?C-21òNC-21òIC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdâ:pÇP‹LŒœdâ™Xù%™xE&®ó}ÇP‘‰•’‰Cdbä$¯ÈÄÊ/ÉÄ+21r’‰Odbådâ™ø›ÿE1Ô"#'™8E&FN2qŠLŒœdâ™9ÉÄ%2±òG2ñ‰LŒdâ¿üw¨Ïç¯Äÿ µÈÄÈ µÈÄÈ µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰ëÂIC-21r’‰Gdbå—dâ™ø›ÿ}ïC-21r’‰Cdbä$¯ÈÄÊ/ÉÄ+21r’‰Odbåd♸î÷IœC-21r’‰Sdbä$§ÈÄÈI&N‘‰•/’‰Kdbådâ™ø›ÿù‰"‡Zdbä†Zdb䓆Zdb䛆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$·ÈÄõà$Ž¡™9ÉÄ#2±òK2ñŠL\ïû$Ρ™9ÉÄ!2±òI2ñŠL¬ü’L¼"#'™øD&VþH&>‘‰ë}ŸÄ9Ô"#'™8E&FN2qŠLŒœdâ™Xù"™¸D&Vþ@&þ™à?Cý¾NäP‹LŒ|ÐP‹LŒ|ÑP‹LŒüÐP‹L¬|‘L\"#'™¸D&FN2q‰L¬|“LÜ"÷œÄ1Ô"#'™xD&V~I&^‘‰ûçû$Ρ™9ÉÄ)2±òI2ñŠL¬ü’L¼"+$ŸÈÄÈI&>‘‰ûçû$Ρ™9ÉÄ)21r’‰Sdbä$—ÈÄÊÉÄ%2ñ7ÿ³Ç9Ô"#ï4Ô"#Ÿ4Ô"#ß4Ô"#¿4Ô"+_$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄÝà$Ž¡™9ÉÄ#2±òK2ñŠLÜíû$Ρ™9ÉÄ)2±òI2ñŠL¬ü’L|"+$ŸÈÄÈI&>‘‰»}ŸÄ9Ô"#'™8E&FN2qŠL¬|‘L\"#'™¸D&þæö8‡Zdb䃆Zdb䋆Zdb䇆Zdbä$›ÈÄÊÉÄ%21r’‰Kdbå›dâ™9ÉÄ-2qw8‰c¨E&FN2ñŠL¬ü’L¼"wÿ>‰s¨E&FN2qŠL¬|’L¼"+$ŸÈÄÈI&>‘‰‘“L|"wÿ>‰s¨E&FN2qŠLŒœdâ™Xù"™¸D&FN2q‰LÜýû$Ρ™ù¤¡™ù¦¡™ù¥¡™Xy#™ØD&V¾H&.‘‰‘“LÜ"+ß$·ÈÄÈI&n‘‰{ÀIC-2±òK2ñŠLŒœd♸Ç÷IœC-21r’‰Sdbå“dâ™Xù#™øD&FN2ñ‰LŒdbÿ™¸Ç÷IœC-21r’‰Sdbå‹dâ™9ÉÄ%21r’‰Kdâß'qµÈÄÈ µÈÄÈ µÈÄÈI&6‘‰•7’‰Mdbå‹dâ™Xù&™¸E&FN2q‹LŒœd♸'œÄ5ÔWdbå—dâ™9ÉÄ+2qÏï“8‡Zdbä$§ÈÄÊ'ÉÄ'2±òG2ñ‰LŒœdâ™ø›ÿÝãj‘‰•O’‰Sdbä$—ÈÄÊÉÄ%21r’‰Kdbä$—ÈÄ=¿Oâj‘‰‘oj‘‰‘_j‘‰•7’‰Mdbä$›ÈÄÊÉÄ-2±òM2q‹LŒœdâ™9ÉÄ-2q/8‰c¨E&FN2ñŠLŒœd♸×÷IœC-21r’‰Sdbå“dâ™Xù#™øD&F2ñÏÿê_¡öÓh¨E&V>I&N‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"÷ú>‰s¨E&F~h¨E&FN2±‰L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LÜNâj‘‰‘“L¼"#'™øD&îý}çP‹L¬|’Lœ"#'™øD&VþH&>‘‰‘oj‘‰¿ùß=Ž¡™Xù$™¸D&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰LÜûû$Ρ™ù¥¡™Xy#™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2q8‰c¨E&FN2ñŠL¬ü‘L|"÷ù>‰c¨§ÈÄÊ'ÉÄ)21r’‰Odbådâ™ù¡¡™ø›ÿÝãj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"#'™¸E&îó}çP‹LŒœdb™Xy#™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2q_8‰c¨E&FN2ñŠL¬ü‘L|"ó¿ïc¨E&FN2qŠLŒœdâ™Xù#™øD&F~i¨E&þæ÷8†Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈÄÊ7ÉÄ-2qßï“8‡Zdbådb™9ÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&‘‰ûÁIC-21r’‰Wdbåd♸ß÷IœC-21r’‰Sdbå‹dâ™Xù#™øD&Fþh¨E&þæ÷8†Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-2q¿ï“8†º‰L¬¼‘Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&ž8‰c¨E&FN2ñŠL¬ü‘L|"ÏÏ÷IœC-21r’‰Kdbå‹dâ™Xù#™øD&þæŸmÄP‹LŒ|ÓP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™Xù&™¸E&þæö8‡Zdbä$›ÈÄÈI&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™xD&V~H&‘‰§ÁIC-21r’‰Wdbådâ™xÚ÷IœC-21r’‰Kdbå‹dâ™Xù™øg‚ÿ uƒg1Ô"#?4Ô"+_$—ÈÄÈI&.‘‰‘“L\"+ß$·ÈÄÈI&n‘‰¿ùŸ=Ρ™9ÉÄ&21r’‰Mdbä$›ÈÄÈI&v‘‰•o’‰[dbä$·ÈÄÊÉÄ#21r’‰GdâépÇP‹LŒœdâ™Xù#™øD&žþ}çP‹LŒœdâ™Xù"™øD&þæOâj‘‰‘wj‘‰‘_j‘‰•/’‰Kdbä$—ÈÄÈI&n‘‰•o’‰[dbä$·ÈÄÓ¿Oâj‘‰‘“Ll"#'™ØD&FN2±‰L¬¼“Lì"+ß$·ÈÄÈI&‘‰•’‰Gdbä$ÈÄ3à$Ž¡™Xù#™øD&FN2ñ‰L<ãû$Ρ™9ÉÄ%2±ò2ñïKæ‡zÀIC-21òAC-21r’‰Mdbå‹dâ™9ÉÄ%2±òM2q‹LŒœdâ™9ÉÄ-2ñŒï“8‡Zdbä$›ÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÊ7ÉÄ-2±òC2ñˆLŒœdâ™9ÉÄ#2ñL8‰k¨ŸÈÄÊÉÄ'21r’‰Odâ™ß'qµÈÄÈI&.‘‰•¯EC-2ñL8‰c¨E&F>i¨E&VÞH&6‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄ3¿Oâj‘‰‘“Ll"#'™ØD&VÞI&v‘‰‘“Lì"+ß$ÈÄÊÉÄ#21r’‰Gdbä$Èijà$Ž¡™9ÉÄ'21r’‰OdâYß'qµÈÄÈI&.‘‰•¯MC-2ñ,8‰c¨E&FN2±‰L¬¼‘Ll"+_$—ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰g}ŸÄ9Ô"#'™ØD&FN2±‹L¬¼“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL<Nâj‘‰‘“L|"#™Ø~D&žý}çP‹L¬|‘L\"#?4Ô"φ“8†Zdbä$›ÈÄÊÉÄ&2±òE2q‹L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™xö÷IœC-21r’‰Mdbådb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄsà$Ž¡™9ÉÄ'2ñ7ÿ³Ç9Ô"+Ÿ$—ÈÄÊÉÄ%21òKC-2ñ8‰c¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&FN2ñˆL<çû$Ρ™9ÉÄ.2±òN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Gdâ¹pÇP‹LŒœdâ™ø›ÿÙãj‘‰•/’‰Kdbä$—ÈÄÈ µÈÄsá$Ž¡™9ÉÄ&2±òF2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™Xù!™xD&žû}çP‹L¬¼“Lì"#'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ+2ñ<8‰c¨E&FN2ñ‰LüÍÿìqµÈÄÊÉÄ%21r’‰Kdbåû‡†ZdâypÇP‹LŒœdb™Xy#™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2ñˆL¬üL<"Ïû>‰c¨»ÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰•_’‰Wdâý“8†Zdbä$ŸÈÄßüÏçP‹L¬|‘L\"#'™¸E&V¾ µÈÄû'q µÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$ÈÄÊÉÄ#2ñ7ÿ³Ç9Ô"#'™ØE&FN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ+2±òK2ñŠL¼ Nâj‘‰‘“L|"ó?{œC-2±òE2q‰LŒœdâ™Xùî4Ô"oƒ“¸†º‰L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&V~H&‘‰‘“L<"ó?{œC-21r’‰]dbä$»ÈÄÈI&v‘‰‘“L"+?$ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÛá$Ž¡™9ÈÄ>þg¨qßÏ¢¡™Xù"™¸D&FN2q‹L¬|j‘‰¿ùß“8†Zdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&‘‰•’‰Gdbä$ÈÄÛ¿Oâj‘‰‘“Lì"#'™ØE&FN2±‹L¬|L"+?$ÈÄÈI&^‘‰•_’‰Wdbä$¯ÈÄ;à$Ž¡™ø›ÿy¶‘C-21òMC-2±òE2q‰LŒœdâ™Xù&™ØD&þæOâj‘‰‘“Ll"#'™ØE&V¾I&n‘‰‘“LÜ"+?$ÈÄÈI&‘‰‘“L<"ïø>‰s¨E&FN2±‹LŒœdb™9ÉÄ!2±òA2qˆL¬üL<"+¿$¯ÈÄÈI&^‘‰‘“L¼"ï„“øw¨ÿ¾dþw¨ç÷³j‘‰‘j‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ&2ñN8‰c¨E&FN2±‰L¬¼“Lì"+ß$·ÈÄÈI&‘‰•’‰Gdbä$ÈÄÈI&‘‰w~ŸÄ9Ô"#'™ØE&FN2±‹L¬|L"#'™8D&V~H&^‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰wÁIC-21òNC-21òKC-2±òE2q‰LŒœdâ™Xù&™ØD&Þ'q µÈÄÈI&v‘‰•w’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2ñ®ï“8‡Zdbä$»ÈÄÈI&‘‰•’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰wÃIC-21òAC-21r’‰Mdbå‹dâ™Xù&™¸E&FN2±‰L¼Nâj‘‰‘“Lì"+ï$»ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰GdâÝß'qµÈÄÈI&v‘‰•’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"ï“8†Zdb䓆Zdbådb™Xù"™¸E&V¾I&n‘‰‘“Ll"ï“8†Zdbä$»ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Gdbä$¯ÈÄ{¾Oâj‘‰‘“L"+$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&Þ 'q µÈÄÈ µÈÄÊÉÄ&2±òM2q‹LŒœdâ™9ÉÄ&2ñ^8‰c¨E&FN2±‹L¬¼“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&V~I&^‘‰÷~ŸÄ9Ô"+$‡ÈÄÈI&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñ‰L¼Nâj‘‰‘oj‘‰•7’‰Mdbå›dâ™9ÉÄ-2±òC2±‰L¼Nâj‘‰‘“Lì"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&^‘‰•_’‰Wdâ}ß'q õ™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+2±òG2ñ‰L|?pÇP‹LŒüÐP‹L¬¼‘Ll"+ß$·ÈÄÈI&‘‰•’‰Mdâû“8†Zdbådb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Wdbå—dâ™ø›ÿÙãj‘‰‘“L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™Xù#™øD&¾'q µÈÄÈ/ µÈÄÊÉÄ&2±òM2q‹LŒœdâ™Xù!™ØD&¾'q u™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆL¬ü’L¼"#'™xE&þæö8‡Zdbä$‡ÈÄÈI&‘‰‘“L"#'™8E&V~I&^‘‰‘“L¼"+$ŸÈÄÈI&>‘‰¯ÃIC-21r’‰Mdbådb™Xù&™¸E&FN2ñˆL¬üLl"ó¿'q µÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L¼"+¿$¯ÈÄÈI&^‘‰¯ŸÄ9Ô"#'™8D&FN2qˆLŒœdâ™Xù$™8E&V~I&^‘‰‘“L|"+$ŸÈÄÈI&>‘‰oÀIC-2±òF2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üLì"ó¿'q µÈÄÈI&v‘‰‘“L"+?$ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰o|ŸÄ9Ô"#'™8D&FN2qˆLŒœdâ™Xù$™8E&V~I&^‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰oÂI\CÝD&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&‘‰•’‰]dâ›pÇP‹LŒœdb™Xù ™8D&V~H&‘‰‘“L¼"+¿$¯ÈÄÈI&^‘‰‘“L¼"ßü>‰s¨E&FN2qˆLŒœdâ™Xù$™8E&FN2qŠL¬ü’L|"+$ŸÈÄÈI&>‘‰‘“L|"ß‚“8†Zdbä$›ÈÄÈI&6‘‰•o’‰[dbä$ÈÄÊÉÄ.2ñ-8‰c¨E&FN2qˆL¬|L"+?$ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰o}ŸÄ9Ô"#'™8D&FN2qŠL¬|’Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰L|Nâj‘‰‘“Ll"#'™ØE&V¾I&n‘‰•’‰Gdbä$»ÈÄ·á$Ž¡™9ÉÄ!2±òA2qˆL¬üL¼"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&¾ý}çP‹LŒœdâ™Xù$™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'2ñ8‰c¨E&FN2±‰L¬¼“Lì"+ß$ÈÄÊÉÄ#21r’‰]dâ;pÇP‹LŒœdâ™Xù ™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠLŒœdâ™øÎ÷IœC-21r’‰Sdbå“dâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä$ŸÈÄwá$Ž¡™9ÉÄ&2±òN2±‹L¬üL<"#'™xD&FN2±‹L|Nâj‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰•?’‰Odâ»ß'qµÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘ƒLœ?"߃“8†Zdbä$›ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™Xù%™ØE&¾'q µÈÄÈI&‘‰•’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$ŸÈÄÊÉÄ'2ñ½ï“8†zŠL¬|’Lœ"#'™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™ø›ÿ»Çÿ 5ËÄÿGÿ=‰c¨Y&fN2±±LŒ¼“Lì,#?$ËÄÌI&^–‰‘_’‰ebåOâj–‰‘’‰ƒebæ$ËÄÈ/ÉÄË21s’‰—ebæ$/ËÄÌI&>–‰‘?’‰ebåö8‡šebæ$'ËÄÌI&N–‰™“Lœ,3'™8Y&FþH&>–‰™“L|,3™øÏÿêÊÿÝㆺËP78‰c¨ uû~¶‘Cýd¨óN2±/êö}çPOêïëb¨› õo~I&ö+CÝà$®¡?2Ô žmÄPoêÊI&Ž+CݾOâê%CݾOâê#CݾOâê'Cݾ»È¡î2Ô•“L|S†º}ŸÄ9Ô]†º}?œÈ¡ž2ÔíóWâ†zËP·¯“øß¡¾2Ô•“L\?2Ôíû$Ρ>2Ôíó$þg¨Ÿ uû<‰ÿê&C]y§¡2ÔNâê+CÝ¿ŸmÄP÷êß¼“Lì[†ºŸÄ9ÔK†ºÃûºê.Cý›_’‰ýÉPw8‰c¨› u‡g1ÔG†ºr’‰ãÉP÷ï“8‡zËP÷ï“8‡úÊP÷ï“8†úýÈP÷ïß.r¨‡ uå$ß’¡îß'qõ¡îß'r¨— uÿü•øŸ¡>2Ôýë$þw¨Ÿ õo¾H&®&CÝ¿Oâê+CÝ?Oâê?¿ÿêþyÿ3Ô]†ºòAC=e¨œÄ1ÔO†z|?ÛÈ¡n2Ô•“LìG†z|ŸÄ9Ô[†zÀûºê!Cý›_’‰ãG†zÀICÝe¨<Ûˆ¡¾2Ô•“Lœ?2Ôãû$Ρ>2Ôãû$Ρ~2Ôãû$Ρn2Ôãû·‹ê)C]9ÉÄ·e¨Ç÷IœC=e¨Ç÷Éê-C=>%þg¨¯ õø:‰ÿêõ#Cý›/’‰«ËPï“8‡úÉPÏ“øŸ¡n2Ôãó$þg¨‡ u哆zÉPO8‰k¨û õü~¶‘CÝe¨+'™Ø¯ õü>‰s¨ õ„÷u1ÔS†ú7¿$G“¡žpÇPê Ï6b¨Ÿ õo>I&Î&C=¿Oâê+C=¿Oâê÷#C=¿Oâê.C=¿»È¡^2Ô•“L|G†z~ŸÄ9ÔK†z~?œÈ¡>2ÔóóWâ†úÉPϯ“øß¡n2Ô•“L\C†z~ŸÄ5ÔóçG†z~žÄÿ u—¡žŸ'ñ?C=e¨+_4Ô[†zÁICÝd¨×÷³ê!C]9ÉÄþd¨×÷IœC}e¨¼¯‹¡^2Ô¿ù%™8º õ‚“8†zÊP/x¶QC=d¨óI2qvêõ}çP?êõ}çP7êõ}çPêõýÛEõ–¡®œdâ»2Ôëû$ΡÞ2ÔëûáDõ•¡^Ÿ¿çP¯êõuÿ;Ô]†ºr’‰kÊP¯ï“8‡ºÉP¯Ï“øŸ¡2Ôëó$þg¨— u囆úÈPo8‰c¨» õþ~¶‘C=e¨+'™8~d¨÷÷IœCýd¨7¼¯‹¡Þ2Ô•“LC†zÃIC½d¨7<Ûˆ¡n2Ô¿ù$™8‡ õþ>‰c¨ß õþ>‰s¨» õþ>‰s¨§ õþþí"‡úÈPWN2ñ=êý}çPêýýp"‡úÉPïÏ_‰ÿê&C½¿Nâ‡zÈPWN2q-êý}çPwêýyÿ3ÔS†zžÄÿ õ–¡®üÐP_ê'q õ¡>ßÏ6r¨— õo>H&Ž&C}¾Oâêû#C}à}] õ‘¡®œdâ˜2ÔNâê-C}àÙF u—¡þÍ'ÉÄ9e¨Ï÷IœCÝd¨Ï÷IœC=d¨Ï÷IœC½d¨Ï÷o9ÔW†ºr‰ãçG†ú|ŸÄ9ÔW†ú|?œˆ¡^?2ÔçóW↺ËPŸ¯“øß¡ž2Ô•“L\[†ú|ŸÄ9ÔC†ú|žÄÿ õ’¡>Ÿ'ñ?C}d¨+¿4ÔO†úÂIC=e¨ï÷³ê-Cý›’‰£ËPßï“8‡ºÉP_x_C}e¨+'™8– õ…“8†úÈP_x¶C=d¨óI2q.êû}çPwêû}çPOêû}çPoêûýÛEõ“¡þ%f??4ÔM†ú~ŸÄ9ÔO†ú~?œÈ¡n2Ô÷óWâ†zÈP߯“øß¡^2Ô•“L\G†ú~ŸÄ9ÔS†ú~žÄÿ õ–¡¾Ÿ'ñ?C}e¨+'™Ø~d¨œÄ1ÔK†ú}?ÛÈ¡>2Ô¿ù ™8† õû>‰s¨» õƒ÷u1ÔO†ú7$Ç–¡~pÇP_êÏ6b¨§ õo>I&Î-Cý¾Oâê!Cý¾Oâê%Cý¾Oâê#Cý¾»¨¡þ3Á†úW¨ý4ê.Cý¾Oâêõ#Cý¾NäPwê÷ù+ñ?C=e¨ß×IüïPoêÊI&®+Cý¾Oâê%Cý>Oâ†úÈP¿Ï“øŸ¡~2Ô¿y#™ØD&¶8‰c¨E&FN2±‹L¬|L"+¿$¯ÈÄÈI&>‘‰•?’‰Cdbû“8†Zdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21òGC-2ñ7?†Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰íçû$Ρ™ù¡¡™9ÉÄ&2±òF2±‰Ll Nâj‘‰‘“Lì"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™ØœÄ5ÔSdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'2ñ7ÿ{8ÇP‹LŒ|ÐP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™9ÉÄ-2±µï“8‡Zdbä—†Zdbådb™9ÉÄ&2±u8‰c¨E&FN2qˆL¬|L"+¿$¯ÈÄÈI&>‘‰•?’‰Cdâoþ÷$Ž¡™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r‰&øÏP÷ïß.r¨E&F>i¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L¬|“LÜ"[ÿ>‰s¨E&FN2±‰L¬¼‘Ll"#'™ØD&¶'q µÈÄÊÉÄ!21r’‰Cdbå—dâ™9ÉÄ'2±òG2qŠLüÍÿžÄ1Ô"#'™8E&FN2q‰L¬ü‘L|"#'™øD&þæö8‡Zdbä†Zdb䋆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-2±ï“8‡Zdbådb™9ÉÄ&21r’‰Mdb›p×P‘‰•’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™Ø&œÄ1Ô"#'™8E&V¾H&.‘‰•?’‰Odbä ÿ¾pûw¨ç÷IœC-21òAC-21òMC-2±òE2q‰LŒœdâ™9ÉÄ%2±òM2q‹LŒœdâ™Øæ÷ICÝD&VÞH&6‘‰‘“Ll"#'™ØD&¶'q µÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&>‘‰•?’‰Sdb[pÇP‹LŒœdâ™Xù"™¸D&VþH&>‘‰¿ù^×P‹LŒ¼ÓP‹LŒ|ÒP‹LŒüÐP‹L¬|‘L\"#'™¸D&FN2q‹L¬|“LÜ"#'™¸E&þæ÷8†Zdbä$›ÈÄÈI&6‘‰‘“Ll"Û†“8†Zdbä$‡ÈÄÈI&N‘‰•_’‰Wdbådâ™9ÉÄ)2±m8‰c¨E&FN2q‰L¬|‘L\"+ôUèGdâoþŸÇ5Ô"#4Ô"#_4Ô"#¿4Ô"+_$—ÈÄÈI&.‘‰•o’‰[dbä$·ÈÄÈI&n‘‰¿ùß=Ž¡™9ÉÄ&21r’‰Mdbä$›ÈÄvà$Ž¡™9ÉÄ!2±òI2qŠL¬ü’L|"+$ŸÈÄÈI&N‘‰íÀIC-21r’‰Kdbå‹dâ™ø›ÿE1Ô"#ï4Ô"#Ÿ4Ô"#ß4Ô"#'™ØD&V¾H&.‘‰‘“LÜ"+ß$·ÈÄÈI&n‘‰‘“LÜ"ó¿{C-21r’‰Mdbä$›ÈÄÈI&6‘‰íÂIC-21r’‰Cdbå“dâ™Xù#™øD&FN2ñ‰LŒœdâ™Ø.œÄ1Ô"#'™¸D&V¾H&.‘‰í~ŸÄ9Ô"#4Ô"#_4Ô"#?4Ô"+o$›ÈÄÊÉÄ%2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dâoþwc¨E&FN2±‰LŒœdb™9ÉÄ.2±=8‰c¨E&FN2qˆL¬|’Lœ"+$ŸÈÄÈI&>‘‰¿yÿ!™8E&V>I&N‘‰‘“L\"+_$—ÈÄö¾Oâj‘‰‘Oj‘‰‘oj‘‰‘“Ll"+o$›ÈÄÊÉÄ-2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[db{ß'qµÈÄÈI&6‘‰‘“Ll"+ï$»ÈÄþ'q µÈÄÈI&‘‰•O’‰Sdbådâ™9ÈÄ?üïPÿæý‡dâ™Xù$™8E&V¾H&.‘‰‘“L\"ûÏ÷IœC-21òEC-21òCC-21r’‰Mdbådb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-21r’‰[dbÿù>‰s¨E&FN2±‰LŒœdb™Xy'™ØE&ö'q µÈÄÈI&‘‰•O’‰Sdbådâ™ù¢¡™ø›÷’‰Sdbå“dâ™Xù"™¸D&FN2q‰Lìíû$Ρ™ù¦¡™ù¥¡™Xy#™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™9}ƒ>"{û>‰s¨E&FN2±‰L¬¼“Lì"#'™ØE&ö'q µÈÄÈI&N‘‰•O’‰Sdbådâ™ù¦¡™ø›÷’‰Sdbå‹dâ™9ÉÄ%21r’‰Kdbïß'qµÈÄÈ µÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰•ú}D&öþ}çP‹LŒœdb™Xy'™ØE&FN2±‹LìNâj‘‰•O’‰Sdbä$§ÈÄÊÉÄ'21òCC-2ñ7ï?$—ÈÄÊÉÄ%21r’‰Kdbä$·ÈÄ>¾Oâj‘‰‘_j‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“L<"+?ô úˆLìãû$Ρ™Xy'™ØE&FN2±‹LŒœdb™Ø'œÄ5ÔSdbå“dâ™9ÉÄ)2±òG2ñ‰LŒüÒP‹LüÍûÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&öù}çP‹LŒœdb™Xy#™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&FNß ÈÄ>¿Oâê.2±òN2±‹LŒœdb™9ÉÄ.2±/8‰c¨E&FN2qŠLŒœdâ™Xù#™øD&Fþh¨E&þæý‡dâ™Xù"™¸D&FN2q‹L¬|“LÜ"ûú>‰s¨E&VÞH&6‘‰‘“Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2ñˆL¬üL<"#§oÐGdâoþwc¨E&FN2±‹LŒœdb™9ÉÄ.2±o8‰c¨E&FN2qŠLŒœdâ™Xù#™øD&þæß×ÅP‹LŒœdâ™Xù"™¸D&FN2q‹L¬|“LÜ"ûþ>‰ã?®‰L¬¼‘Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹L¬üL<"#'™xD&FNß ÈÄßüïÇP‹LŒœdb™9ÉÄ.21r’‰]db?pÇP‹LŒœdâ™Xù"™¸D&Vþ@&þ™à?C}à}] µÈÄÈI&.‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-2ñ7ÿ‹>b¨E&FN2±‰LŒœdb™9ÉÄ&21r’‰]dbå›dâ™9ÉÄ#2±òC2ñˆLŒœdâ™9}ƒ>"ó¿{C-21r’‰]dbä$»ÈÄÈI&v‘‰ýÂIC-21r’‰Sdbå‹dâ™ø›ÿ}ïC-21òNC-21r’‰Kdbå‹dâ™9ÉÄ-2±òM2q‹Lì÷û$Ρ™9ÉÄ&21r’‰Mdbä$›ÈÄÊ;ÉÄ.2±òM2q‹L¬üL<"#'™xD&FN2ñˆLŒœ¾A‘‰¿ùß=Ž¡™9ÉÄ.21r’‰]dbä$‡ÈÄþà$Ž¡™9ÉÄ)2±òE2q‰Lìïû$Ρ™ù ¡™Xy#™¸D&V¾H&.‘‰‘“LÜ"+ß$·ÈÄþ¾Oâj‘‰‘“Ll"#'™ØD&FN2±‹L¬¼“Lì"+ß$ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈéô™Øß÷IœC-21r’‰]dbä$»ÈÄÊÉÄ!2qüÀIC-21r’‰Sdbå‹dâ™8~¾Oâj‘‰‘“Ll"+o$—ÈÄÊÉÄ%2±òM2q‹LŒœdâ™8~¾Oâj‘‰‘“Ll"#'™ØD&FN2±‹L¬¼“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&FNß ÈÄñó}çP‹LŒœdb™9ÉÄ!2±òA2qˆL Nâj‘‰‘“Lœ"+_$—ÈÄѾOâj‘‰‘“Ll"+o$—ÈÄÊÉÄ-2±òM2q‹LŒœdâ™8Ú÷IœC-21r’‰Mdbä$›ÈÄÊ;ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄÈéô™8Ú÷IœC-21r’‰]dbåƒdâ™9ÉÄ!2qt8‰c¨E&FN2q‰L¬|‘L\"Gÿ>‰s¨E&FN2±‰L¬¼‘L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"Gÿ>‰s¨E&FN2±‰LŒœdb™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù¥oÐWdâèß'qµÈÄÈI&‘‰•’‰Cdbä$‡ÈÄ1à$Ž¡™Xù"™¸D&FN2q‰Lãû$Ρ™9ÉÄ&2±òF2q‹L¬|“LÜ"#'™¸E&FN2ñˆLãû$Ρ™9ÉÄ&2±òN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Wdbå—¾A_‘‰c|ŸÄ9Ô"+$‡ÈÄÈI&‘‰‘“L"Ç„“¸†z‰L¬|‘L\"#'™¸D&Žù}çP‹LŒœdb™Xy#™¸E&V¾I&n‘‰‘“LÜ"+?$ÈÄ1¿Oâj‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"+¿$¯ÈÄÈéô™8æ÷IC=D&V>H&‘‰‘“L"#'™8D&Ž'q µÈÄÈI&.‘‰‘“L\"Çú>‰s¨E&FN2±‰L¬¼‘LÜ"+ß$·ÈÄÈI&‘‰•’‰GdâXß'qµÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&^‘‰•_’‰Wdbäô úŠLüÍÿîq µÈÄÈI&‘‰‘“L"#'™8D&Ž 'q µÈÄÈI&.‘‰‘“LÜ"Çþ>‰s¨E&VÞH&6‘‰‘“LÜ"+ß$·ÈÄÈI&‘‰•’‰GdâØß'qüÇu‘‰•w’‰]dbä$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈéô™ø›ÿÝãj‘‰‘“L"#'™8D&FN2qˆLNâj‘‰‘“L\"+ß$·ÈÄq¾Oâê&2±òF2±‰LŒœdâ™Xù&™¸E&FN2ñˆL¬üL<"ó¿è#†Zdbä$»ÈÄÈI&v‘‰‘“Lì"#'™8D&V~H&‘‰‘“L¼"+¿$¯ÈÄÈI&^‘‰‘Ó7è+2ñ7ÿ»Ç1Ô"#'™8D&FN2qˆLŒœdâ™8.œÄ1Ô"#'™¸D&V¾I&n‘‰¿ùß÷Î1Ô"#'™ØD&FN2q‹L¬|“LÜ"#'™xD&V~H&‘‰ã~ŸÄ9Ô"#'™ØE&FN2±‹LŒœdb™Xù ™8D&V~H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘Ó7è+2ñ7ÿ»Ç1Ô"#'™8D&FN2qˆLŒœdâ™8œÄ1Ô"#'™¸D&V¾I&n‘‰ã}ŸÄ9Ô"#'™ØD&VÞI&n‘‰•o’‰[dbä$ÈÄÊÉÄ#2q¼ï“8‡Zdbä$»ÈÄÈI&v‘‰‘“L"+$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ+21rú}E&Ž÷}çP‹LŒœdâ™9ÉÄ!2±òI2qŠLœ?pÇP‹LŒœdâ™Xù&™¸E&Οï“8‡Zdbä$»ÈÄÊ;ÉÄ-2±òM2q‹L¬üL<"#'™xD&Οï“8‡Zdbä$»ÈÄÈI&v‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰‘Ó7è+2qþ|ŸÄ9Ô"#'™8D&FN2qŠL¬|’Lœ"gƒ“8†Zdbä$—ÈÄÊ7ÉÄ-2q¶ï“8‡Zdbä$»ÈÄÊ;ÉÄ-2±òM2ñˆL¬üL<"#'™xD&Îö}çP‹LŒœdb™9ÉÄ.2±òA2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+21rúýD&Îö}çP‹LŒœdâ™Xù$™8E&FN2qŠLœNâj‘‰‘“LÜ"+ß$·ÈÄÙ¿Oâj‘‰‘“Lì"+ï$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÙ¿Oâj‘‰‘“Lì"#'™8D&V>H&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&Vþèô™8û÷IœC-21r’‰Sdbå“dâ™9ÉÄ)2q8‰c¨E&V¾I&n‘‰‘“LÜ"çø>‰s¨E&FN2±‹L¬¼“L<"+?$ÈÄÈI&‘‰‘“L¼"çø>‰s¨E&FN2±‹L¬|L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™Xù£oÐOdâß'qµÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄ9á$®¡Þ"+ß$·ÈÄÈI&n‘‰s~ŸÄ9Ô"#'™ØE&VÞI&‘‰•’‰Gdbä$ÈÄÊ/ÉÄ+2qÎï“8‡Zdbä$‡ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÊÉÄ'21rúýD&Îù}ÇPO‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰sÁIC-21r’‰[dbä$·ÈĹ¾Oâj‘‰‘“Lì"+ï$ÈÄÊÉÄ#21r’‰Wdbå—dâ™8×÷IœC-2±òA2qˆLŒœdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Odbådâ™9}ƒ~"ó¿{C-21r’‰Sdbä$§ÈÄÈI&N‘‰sÃIC-21r’‰[dbä$ÈĹ¿Oâj‘‰•w’‰]dbä$ÈÄÊÉÄ#21r’‰Wdbå—dâ™8÷÷IÿqCdbåƒdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbådâ™9ÉÄ'21rúýD&þæ÷8†Zdbä$§ÈÄÈI&N‘‰‘“Lœ"ç“8†Zdbä$·ÈÄÊÉÄ#2qžï“8†º‹L¬¼“Lì"#'™xD&V~H&‘‰‘“L¼"+¿$¯ÈÄßü/úˆ¡™9ÉÄ!21r’‰Cdbä$‡ÈÄÈI&N‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'21r’‰Odbäô ú‰LüÍÿîq µÈÄÈI&N‘‰‘“Lœ"#'™8E&Î 'q µÈÄÈI&n‘‰•’‰Gdâoþ÷½s µÈÄÈI&v‘‰‘“L<"+?$ÈÄÈI&^‘‰•_’‰Wdâ¼ß'qµÈÄÈI&‘‰‘“L"#'™8D&V>I&N‘‰•_’‰Wdbådâ™9ÉÄ'21r’‰Odbäô ú‰LüÍÿîq µÈÄÈI&N‘‰‘“Lœ"#'™¸D&Î'q µÈÄÈI&n‘‰•’‰Gdâ|ß'qµÈÄÈI&v‘‰•’‰Gdbå‡dâ™9ÉÄ+2±òK2ñŠLœïû$Ρ™9ÉÄ!21r’‰Cdbä$§ÈÄÊ'ÉÄ)2±òK2ñ‰L¬ü‘L|"#'™øD&FN2ñ‰LŒœ¾A?‘‰ó}ŸÄ9Ô"#'™8E&FN2qŠL¬|‘L\"לÄ1Ô"#'™¸E&V~H&‘‰ëçû$Ρ™9ÉÄ!2±òA2ñˆL¬üL<"+¿$¯ÈÄÈI&^‘‰ëçû$Ρ™9ÉÄ!21r’‰Cdbä$§ÈÄÊ'ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r’‰Odbäô ú‰L\?ß'qµÈÄÈI&N‘‰‘“L\"+_$—ÈÄÕà$Ž¡™9ÉÄ-2±òC2ñˆL\íû$Ρ™9ÉÄ!2±òA2ñˆL¬üL¼"+¿$¯ÈÄÈI&^‘‰«}ŸÄ9Ô"#'™8D&FN2qˆL¬|’Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰LŒ¾AÏ‘‰«}ŸÄ9Ô"#'™8E&V¾H&.‘‰‘“L\"W‡“8†Zdbä$ÈÄÊÉÄ#2qõï“8‡Zdbä$‡ÈÄÊÉÄ#2±òK2ñŠLŒœdâ™9ÉÄ+2qõï“8‡Zdbä$‡ÈÄÈI&N‘‰•O’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰¿ùß=Ž¡™Xù$™8E&FN2q‰L¬|‘L\"#'™¸D&®'q µÈÄÊÉÄ#21r’‰Gdâß'qµÈÄÈI&‘‰•’‰Wdbå—dâ™9ÉÄ+21r’‰Odâß'qµÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘ƒLü;Áçóÿ»Ç1Ô"+Ÿ$§ÈÄÊÉÄ%21r’‰Kdbä$—ÈÄ5á$®¡>"+?$ÈÄÈI&‘‰k~ŸÄ9Ô"#'™8D&V>H&^‘‰•_’‰Wdbä$¯ÈÄÊÉÄ'2qÍï“8‡Zdbä$§ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄßüŸ=þw¨E&FÞi¨E&V>I&.‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰kÁIC-21r’‰Gdbä$Èĵ¾Oâj‘‰‘“L"+$¯ÈÄÊ/ÉÄ+21r’‰Odbåd♸Ö÷IœC-2±òI2qŠLŒœdâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r‰Nâ?C½¾Nâ‡Zdb䃆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—Èĵá$Ž¡™9ÉÄ#21r’‰WdâÚß'qµÈÄÊÉÄ!21r’‰Wdbå—dâ™9ÉÄ'2±òG2ñ‰L\ûû$Ž¡ž"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"ó÷øŸ¡™y§¡™ù¤¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2q8‰c¨E&FN2ñˆL¬ü’L¼"×ù>‰c¨‡ÈÄÊÉÄ!21r’‰Wdbå—dâ™9ÉÄ'2±òG2ñ‰LüÍÿ¢j‘‰‘“Lœ"#'™8E&FN2qŠLŒœdâ™Xù#™øD&F2ñß þ;ÔçóWâ†Zdb䃆Zdb䋆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈÄuá$Ž¡™9ÉÄ#2±òK2ñŠLüÍÿ¾wŽ¡™9ÉÄ!21r’‰Wdbå—dâ™9ÉÄ'2±òG2ñ‰L\÷û$Ρ™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ%2±òG2ñ‰LüÍÿüD‘C-21òNC-21òIC-21òMC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰[dâzpÇP‹LŒœdâ™Xù%™xE&®÷}çP‹LŒœdâ™Xù$™xE&V~I&^‘‰‘“L|"+$ŸÈÄõ¾Oâj‘‰‘“Lœ"#'™8E&FN2q‰L¬|‘L\"+ ÿLðŸ¡~ß'r¨E&F>h¨E&F¾h¨E&F~h¨E&V¾H&.‘‰‘“L\"#'™¸D&V¾I&n‘‰ûNâj‘‰‘“L<"+¿$¯ÈÄýó}çP‹LŒœdâ™Xù$™xE&V~I&^‘‰•?’‰Odbä$ŸÈÄýó}çP‹LŒœdâ™9ÉÄ)21r’‰Kdbå‹dâ™ø›ÿÙãj‘‰‘wj‘‰‘Oj‘‰‘oj‘‰‘_j‘‰•/’‰Kdbä$—ÈÄÈI&n‘‰•o’‰[dânpÇP‹LŒœdâ™Xù%™xE&îö}çP‹LŒœdâ™Xù$™xE&V~I&>‘‰•?’‰Odbä$ŸÈÄݾOâj‘‰‘“Lœ"#'™8E&V¾H&.‘‰‘“L\"ó?{œC-21òAC-21òEC-21òCC-21r’‰Mdbå‹dâ™9ÉÄ%2±òM2q‹LŒœd♸;œÄ1Ô"#'™xE&V~I&^‘‰»ŸÄ9Ô"#'™8E&V>I&^‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰»ŸÄ9Ô"#'™8E&FN2q‰L¬|‘L\"#'™¸D&îþ}çP‹LŒ|ÒP‹LŒ|ÓP‹LŒüÒP‹L¬¼‘Ll"+_$—ÈÄÈI&n‘‰•o’‰[dbä$·ÈÄ=à$Ž¡™Xù%™xE&FN2ñŠLÜãû$Ρ™9ÉÄ)2±òI2ñ‰L¬ü‘L|"#'™øD&F2qüˆLÜãû$Ρ™9ÉÄ)2±òE2q‰LŒœdâ™9ÉÄ%2qï“8‡Zdb䋆Zdb䇆Zdbä$›ÈÄÊÉÄ&2±òE2q‰L¬|“LÜ"#'™¸E&FN2q‹LÜNâê+2±òK2ñŠLŒœd♸ç÷IœC-21r’‰Sdbå“dâ™Xù#™øD&FN2ñ‰LüÍÿîq µÈÄÊ'ÉÄ)21r’‰Kdbå‹dâ™9ÉÄ%21r’‰Kdâžß'qµÈÄÈ7 µÈÄÈ/ µÈÄÊÉÄ&21r’‰Mdbå‹dâ™Xù&™¸E&FN2q‹LŒœd♸œÄ1Ô"#'™xE&FN2ñŠLÜëû$Ρ™9ÉÄ)2±òI2ñ‰L¬ü‘L|"#™øg‚ÿ õ¯Pûi4Ô"+Ÿ$§ÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰{}ŸÄ9Ô"#?4Ô"#'™ØD&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&î 'q µÈÄÈI&^‘‰‘“L|"÷þ>‰s¨E&V>I&N‘‰‘“L|"+$ŸÈÄÈ7 µÈÄßüïÇP‹L¬|’L\"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&îý}çP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœd♸œÄ1Ô"#'™xE&VþH&>‘‰û|ŸÄ1ÔSdbå“dâ™9ÉÄ'2±òG2ñ‰LŒüÐP‹LüÍÿîq µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰‘“LÜ"÷ù>‰s¨E&FN2±‰L¬¼‘Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœd♸/œÄ1Ô"#'™xE&VþH&>‘‰¿ùß÷Î1Ô"#'™8E&FN2ñ‰L¬ü‘L|"#¿4Ô"ó¿{C-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbå›d♸ï÷IœC-2±òF2±‰LŒœdb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$ÈÄýà$Ž¡™9ÉÄ+2±òG2ñ‰LÜïû$Ρ™9ÉÄ)2±òE2ñ‰L¬ü‘L|"#4Ô"ó¿{C-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰[dbå›d♸ß÷ICÝD&VÞH&6‘‰‘“Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹L¬üL<"ÏœÄ1Ô"#'™xE&VþH&>‘‰ççû$Ρ™9ÉÄ%2±òE2ñ‰L¬ü‘L|"ó¿Ï6b¨E&F¾i¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‹L¬|“LÜ"ó?{œC-21r’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“L<"+?$ÈÄÓà$Ž¡™9ÉÄ+2±òG2ñ‰L<íû$Ρ™9ÉÄ%2±òE2ñ‰L¬üLü3Á†ºÁ³j‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰•o’‰[dbä$·ÈÄßüÏçP‹LŒœdb™9ÉÄ&21r’‰Mdbä$»ÈÄÊ7ÉÄ-21r’‰[dbå‡dâ™9ÉÄ#2ñt8‰c¨E&FN2ñ‰L¬ü‘L|"Oÿ>‰s¨E&FN2q‰L¬|‘L|"ó¿'q µÈÄÈ; µÈÄÈ/ µÈÄÊÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-21r’‰[dâéß'qµÈÄÈI&6‘‰‘“Ll"#'™ØD&VÞI&v‘‰•o’‰[dbä$ÈÄÊÉÄ#21r’‰GdâpÇP‹L¬ü‘L|"#'™øD&žñ}çP‹LŒœdâ™Xù™ø÷%ó¿C=à$Ž¡™ù ¡™9ÉÄ&2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LŒœdâ™xÆ÷IœC-21r’‰Mdbä$›ÈÄÈI&v‘‰•w’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™x&œÄ5ÔOdbådâ™9ÉÄ'2ñÌï“8‡Zdbä$—ÈÄÊ×¢¡™x&œÄ1Ô"#Ÿ4Ô"+o$›ÈÄÊÉÄ%21r’‰[dbå›dâ™9ÉÄ-21r’‰[dâ™ß'qµÈÄÈI&6‘‰‘“Ll"+ï$»ÈÄÈI&v‘‰•o’‰Gdbå‡dâ™9ÉÄ#21r’‰GdâYpÇP‹LŒœdâ™9ÉÄ'2ñ¬ï“8‡Zdbä$—ÈÄÊצ¡™xœÄ1Ô"#'™ØD&VÞH&6‘‰•/’‰Kdbå›dâ™9ÉÄ-21r’‰[dbä$·Èij¾Oâj‘‰‘“Ll"#'™ØE&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&ž 'q µÈÄÈI&>‘‰‘ƒLì?"Ïþ>‰s¨E&V¾H&.‘‰‘j‘‰gÃIC-21r’‰Mdbådb™Xù"™¸E&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹L<ûû$Ρ™9ÉÄ&2±òN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Gdâ9pÇP‹LŒœdâ™ø›ÿÙãj‘‰•O’‰Kdbå‹dâ™ù¥¡™xœÄ1Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"#'™xD&žó}çP‹LŒœdb™Xy'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2ñ\8‰c¨E&FN2ñ‰LüÍÿìqµÈÄÊÉÄ%21r’‰Kdbä†Zdâ¹pÇP‹LŒœdb™Xy#™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹L¬üL<"Ïý>‰s¨E&VÞI&v‘‰‘“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™xœÄ1Ô"#'™øD&þæö8‡Zdbå‹dâ™9ÉÄ%2±òýCC-2ñ<8‰c¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™xD&V~H&‘‰ç}ŸÄ1Ô]dbådb™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÊ/ÉÄ+2ñþÀIC-21r’‰Odâoþgs¨E&V¾H&.‘‰‘“LÜ"+߆Zdâý“8†Zdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰Gdbå‡dâ™ø›ÿÙãj‘‰‘“Lì"#'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™Xù%™xE&Þ'q µÈÄÈI&>‘‰¿ùŸ=Ρ™Xù"™¸D&FN2q‹L¬|wj‘‰·ÁI\CÝD&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"+?$ÈÄÈI&‘‰¿ùŸ=Ρ™9ÉÄ.21r’‰]dbä$»ÈÄÈI&‘‰•’‰Gdbä$ÈÄÊ/ÉÄ+21r’‰WdâípÇP‹LŒdâ?Ÿ ÿ3Ô¿¸ïgÑP‹L¬|‘L\"#'™¸E&V¾ µÈÄßüïIC-21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$ÈÄÊÉÄ#21r’‰Gdâíß'qµÈÄÈI&v‘‰‘“Lì"#'™ØE&V>H&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+21r’‰WdâpÇP‹LüÍÿ<ÛÈ¡™ù¦¡™Xù"™¸D&FN2q‹L¬|“Ll"ó¿'q µÈÄÈI&6‘‰‘“Lì"+ß$·ÈÄÈI&n‘‰•’‰Gdbä$ÈÄÈI&‘‰w|ŸÄ9Ô"#'™ØE&FN2±‹LŒœdâ™Xù ™8D&V~H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰wÂIü;Ô_2ÿ;ÔóûÙFµÈÄÈ µÈÄÊÉÄ%21r’‰[dbå›db™x'œÄ1Ô"#'™ØD&VÞI&v‘‰•o’‰[dbä$ÈÄÊÉÄ#21r’‰Gdbä$ÈÄ;¿Oâj‘‰‘“Lì"#'™ØE&V>H&‘‰‘“L"+?$¯ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄ»à$Ž¡™y§¡™ù¥¡™Xù"™¸D&FN2q‹L¬|“Ll"ï‚“8†Zdbä$»ÈÄÊ;ÉÄ.2±òM2q‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™x×÷IœC-21r’‰]dbä$‡ÈÄÊÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄ»á$Ž¡™ù ¡™9ÉÄ&2±òE2q‰L¬|“LÜ"#'™ØD&Þ 'q µÈÄÈI&v‘‰•w’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2ñîï“8‡Zdbä$»ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰÷ÀIC-21òIC-2±òF2±‰L¬|‘LÜ"+ß$·ÈÄÈI&6‘‰÷ÀIC-21r’‰]dbådb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#21r’‰Wdâ=ß'qµÈÄÈI&‘‰•’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"ï…“8†Zdb䋆Zdbådb™Xù&™¸E&FN2q‹LŒœdb™x/œÄ1Ô"#'™ØE&VÞI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"+¿$¯ÈÄ{¿Oâj‘‰•’‰Cdbä$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™øD&Þ'q µÈÄÈ7 µÈÄÊÉÄ&2±òM2q‹LŒœdâ™Xù!™ØD&Þ'q µÈÄÈI&v‘‰•w’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$¯ÈÄÊ/ÉÄ+2ñ¾ï“8†zˆL¬|L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™Xù#™øD&¾8‰c¨E&F~h¨E&VÞH&6‘‰•o’‰[dbä$ÈÄÊÉÄ&2ñýÀIC-2±òN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ+2±òK2ñŠLüÍÿìqµÈÄÈI&‘‰‘“L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñ‰L¬ü‘L|"_ƒ“8†Zdbä—†Zdbådb™Xù&™¸E&FN2ñˆL¬üLl"_ƒ“¸†º‹L¬¼“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&V~I&^‘‰‘“L¼"ó?{œC-21r’‰Cdbä$‡ÈÄÈI&‘‰‘“Lœ"+¿$¯ÈÄÈI&^‘‰•?’‰Odbä$ŸÈÄ×á$Ž¡™9ÉÄ&2±òF2±‰L¬|“LÜ"#'™xD&V~H&6‘‰¿ùß“8†Zdbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&^‘‰•_’‰Wdbä$¯ÈÄ׿Oâj‘‰‘“L"#'™8D&FN2qˆL¬|’Lœ"+¿$¯ÈÄÈI&>‘‰•?’‰Odbä$ŸÈÄ7à$Ž¡™Xy#™ØD&FN2±‰L¬|“LÜ"#'™xD&V~H&v‘‰¿ùß“8†Zdbä$»ÈÄÈI&‘‰•’‰Gdbä$ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄ7¾Oâj‘‰‘“L"#'™8D&FN2qŠL¬|’Lœ"+¿$¯ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄ7á$®¡n"+o$›ÈÄÈI&6‘‰•o’‰[dbä$ÈÄÊÉÄ.2ñM8‰c¨E&FN2±‹L¬|L"+?$ÈÄÈI&^‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰o~ŸÄ9Ô"#'™8D&FN2qˆL¬|’Lœ"#'™8E&V~I&>‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰oÁIC-21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™øœÄ1Ô"#'™8D&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄ·¾Oâj‘‰‘“L"#'™8E&V>I&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&¾ 'q µÈÄÈI&6‘‰‘“Lì"+ß$·ÈÄÊÉÄ#21r’‰]dâÛpÇP‹LŒœdâ™Xù ™8D&V~H&^‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"ßþ>‰s¨E&FN2qˆL¬|’Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™øœÄ1Ô"#'™ØD&VÞI&v‘‰•o’‰Gdbå‡dâ™9ÉÄ.2ñ8‰c¨E&FN2qˆL¬|L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&FN2ñ‰L|çû$Ρ™9ÉÄ)2±òI2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r’‰Odâ»pÇP‹LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"#'™ØE&¾ 'q µÈÄÈI&‘‰•’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄÊÉÄ'2ñÝï“8‡Zdbå“dâ™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈA&®‘‰ïÁIC-21r’‰Mdbådb™Xù!™xD&FN2ñˆL¬ü’Lì"߃“8†Zdbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Odbådâ™øÞ÷IC=E&V>I&N‘‰‘“Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LüÍÿÝ㆚eâÿ£ÿžÄ1Ô,3'™ØX&FÞI&v–‰‘’‰‡ebæ$/ËÄÈ/ÉÄÎ2±ò¿'q 5ËÄÈÉÄÁ21s’‰ƒebä—dâe™˜9ÉÄË21s’‰—ebæ$ËÄÈÉÄÇ2±ò?{œCÍ21s’‰“ebæ$'ËÄÌI&N–‰™“Lœ,#$ËÄÌI&>–‰™ƒLüg‚ÿ uåÿîñ?CÝe¨œÄ1ÔG†º}?ÛÈ¡~2Ô¿y'™Ø— uû>‰s¨§ uƒ÷u1ÔM†ú7¿$û•¡np×PêÏ6b¨· uå$Ç•¡nß'qõ’¡nß'qõ‘¡nß'qõ“¡nß¿]äPwêÊI&¾)CݾOâê.CݾNäPOêöù+ñ?C½e¨Û×IüïP_êÊI&®êö}çPêöyÿ3ÔO†º}žÄÿ u“¡®¼ÓPê'q õ•¡îßÏ6b¨û õoÞI&ö-CÝ¿Oâê%CÝá}] u—¡þÍ/ÉÄþd¨;œÄ1ÔM†ºÃ³ê#C]9ÉÄñd¨û÷IœC½e¨û÷IœC}e¨û÷ICý~d¨û÷o9ÔC†ºr’‰oÉP÷ï“8‡zÈP÷ï‡9ÔK†ºþJüÏPêþuÿ;ÔO†ú7_$W“¡îß'qõ•¡îŸ'q õŸ_‰ÿ uÿ<‰ÿê.C]ù ¡ž2ÔNâê'C=¾ŸmäP7êÊI&ö#C=¾Oâê-C=à}] õ¡þÍ/ÉÄñ#C=à$Ž¡î2ÔžmÄP_êÊI&Îêñ}çPêñ}çP?êñ}çP7êñýÛEõ”¡®œdâÛ2Ôãû$Ρž2ÔãûáDõ–¡Ÿ¿ÿ3ÔW†z|Äÿ õú‘¡þÍÉÄÕe¨Ç÷IœCýd¨ÇçIüÏP7êñyÿ3ÔC†ºòIC½d¨'œÄ5ÔýG†z~?ÛÈ¡î2Ô•“LìW†z~ŸÄ9ÔG†zÂûºê)Cý›_’‰£ÉPO8‰c¨‡ õ„g1ÔO†ú7Ÿ$g“¡žß'qõ•¡žß'q õû‘¡žß'qu—¡žß¿]äP/êÊI&¾#C=¿Oâê%C=¿NäPêùù+ñ?Cýd¨ç×IüïP7êÊI&®!C=¿Oâêõó#C=?O↺ËPÏÏ“øŸ¡ž2Ô•/ê-C½à$Ž¡n2ÔëûÙFõ¡®œdb2Ôëû$Ρ¾2Ô Þ×ÅP/êßü’L]†zÁIC=e¨<Û¨¡ž?2Ô¿ù$™8» õú>‰s¨Ÿ õú>‰s¨› õú>‰s¨‡ õúþí"‡zËPWN2ñ]êõ}çPoêõýp"‡úÊP¯Ï_‰s¨× õú:‰ÿê.C]9ÉÄ5e¨×÷IœCÝd¨×çIüÏPêõyÿ3ÔK†ºòMC}d¨7œÄ1Ô]†z?ÛÈ¡ž2Ô•“L?2Ôûû$Ρ~2ÔÞ×ÅPoêÊI&Ž!C½á$Ž¡^2ÔžmÄP7êß|’LœC†zŸÄ1ÔïG†zŸÄ9Ô]†zŸÄ9ÔS†zÿv‘C}d¨+'™øž õþ>‰s¨ õþ~8‘Cýd¨÷ç¯Äÿ u“¡Þ_'ñ¿C=d¨+'™¸– õþ>‰s¨» õþ<‰ÿê)C½?Oâ†zËPW~h¨¯ õ“8†zÈPŸïg9ÔK†ú7$G“¡>ß'q õý‘¡>ð¾.†úÈPWN2qLê'q õ–¡>ðl#†ºËPÿæ“dâœ2Ôçû$Ρn2Ôçû$Ρ2Ôçû$Ρ^2Ôçû·‹ê+C]9ÈÄùó#C}¾Oâê+C}¾NÄP¯êóù+ñ?CÝe¨Ï×IüïPOêÊI&®-C}¾Oâê!C}>Oâ†zÉPŸÏ“øŸ¡>2Ô•_ê'C}á$Ž¡ž2Ô÷ûÙFõ–¡þÍÉÄÑe¨ï÷IœCÝd¨/¼¯‹¡¾2Ô•“LK†úÂIC}d¨/<Ûˆ¡2Ô¿ù$™8— õý>‰s¨» õý>‰s¨§ õý>‰s¨· õýþí"‡úÉPÿ³Ÿê&C}¿Oâê'C}¿NäP7êûù+ñ?C=d¨ï×IüïP/êÊI&®#C}¿Oâê)C}?Oâ†zËPßÏ“øŸ¡¾2Ô•“Ll?2ÔNâê%Cý¾ŸmäPêß|LC†ú}ŸÄ9Ô]†úÁûºê'Cý›?’‰cËP?8‰c¨¯ õƒg1ÔS†ú7Ÿ$ç–¡~ß'qõ¡~ß'qõ’¡~ß'qõ‘¡~ß¿]ÔPÿ™à?Cý+Ô~ u—¡~ß'q õú‘¡~ß'r¨» õûü•øŸ¡ž2Ôïë$þw¨· uå$ו¡~ß'qõ’¡~Ÿ'ñ?C}d¨ßçIüÏP?êß¼‘Ll"ÛœÄ1Ô"#'™ØE&V>H&‘‰•_’‰Wdbä$ŸÈÄÊÉÄ!2±ýÀIC-2±òI2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™ù£¡™ø›ÏŸNC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbä$—ÈÄöó}çP‹LŒüÐP‹LŒœdb™Xy#™ØD&¶'q µÈÄÈI&v‘‰•’‰Cdbå—dâ™9ÉÄ'2±òG2qˆLl Nâê)2±òI2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™ø›ÿ=œc¨E&F>h¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰LŒœdâ™ØÚ÷IœC-21òKC-2±òF2±‰LŒœdb™Ø:œÄ1Ô"#'™8D&V>H&‘‰•_’‰Wdbä$ŸÈÄÊÉÄ!2ñ7ÿ{ÇP‹LŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÈÄ?üg¨û÷o9Ô"#Ÿ4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&V¾I&n‘‰­ŸÄ9Ô"#'™ØD&VÞH&6‘‰‘“Ll"Û€“8†Zdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™8E&þæOâj‘‰‘“Lœ"#'™¸D&VþH&>‘‰‘“L|"ó?{œC-21òNC-21òEC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰[dbå›dâ™ØÆ÷IœC-2±òF2±‰LŒœdb™9ÉÄ&2±M8‰k¨‡ÈÄÊÉÄ!21r’‰Cdbå—dâ™9ÉÄ'2±òG2qŠLlNâj‘‰‘“Lœ"+_$—ÈÄÊÉÄ'21r‰_¸ý;Ôóû$Ρ™ù ¡™ù¦¡™Xù"™¸D&FN2q‰LŒœdâ™Xù&™¸E&FN2q‹Llóû$Ž¡n"+o$›ÈÄÈI&6‘‰‘“Ll"Û‚“8†Zdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$ŸÈÄÊÉÄ)2±-8‰c¨E&FN2q‰L¬|‘L\"+$ŸÈÄßü?/Žk¨E&FÞi¨E&F>i¨E&F~h¨E&V¾H&.‘‰‘“L\"#'™¸E&V¾I&n‘‰‘“LÜ"ó¿{C-21r’‰Mdbä$›ÈÄÈI&6‘‰mÃIC-21r’‰Cdbä$§ÈÄÊ/ÉÄ+2±òG2ñ‰LŒœdâ™Ø6œÄ1Ô"#'™¸D&V¾H&.‘‰•?ú*ô#2ñ7ÿÏ‹ãj‘‰‘j‘‰‘/j‘‰‘_j‘‰•/’‰Kdbä$—ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄßüïÇP‹LŒœdb™9ÉÄ&21r’‰Mdb;pÇP‹LŒœdâ™Xù$™8E&V~I&>‘‰•?’‰Odbä$§ÈÄvà$Ž¡™9ÉÄ%2±òE2q‰LüÍÿ¢j‘‰‘wj‘‰‘Oj‘‰‘oj‘‰‘“Ll"+_$—ÈÄÈI&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰¿ùß=Ž¡™9ÉÄ&21r’‰Mdbä$›ÈÄvá$Ž¡™9ÉÄ!2±òI2qŠL¬ü‘L|"#'™øD&FN2qŠLlNâj‘‰‘“L\"+_$—ÈÄv¿Oâj‘‰‘j‘‰‘/j‘‰‘j‘‰•7’‰Mdbå‹dâ™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2ñ7ÿ»Ç1Ô"#'™ØD&FN2±‰LŒœdb™ØœÄ1Ô"#'™8D&V>I&N‘‰•?’‰Odbä$ŸÈÄß|üLœ"+Ÿ$§ÈÄÈI&.‘‰•/’‰Kdb{ß'qµÈÄÈ' µÈÄÈ7 µÈÄÈI&6‘‰•7’‰Mdbå‹dâ™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2±½ï“8‡Zdbä$›ÈÄÈI&6‘‰•w’‰]dbÿ“8†Zdbä$‡ÈÄÊ'ÉÄ)2±òG2ñ‰LŒd⟠þw¨óñC2qŠL¬|’Lœ"+_$—ÈÄÈI&.‘‰ýçû$Ρ™ù¢¡™ù¡¡™9ÉÄ&2±òF2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™9ÉÄ-2±ÿ|ŸÄ9Ô"#'™ØD&FN2±‹L¬¼“Lì"{ƒ“8†Zdbä$‡ÈÄÊ'ÉÄ)2±òG2ñ‰LŒ|ÑP‹LüÍÇÉÄ)2±òI2q‰L¬|‘L\"#'™¸D&öö}çP‹LŒ|ÓP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LŒœ¾A‘‰½}ŸÄ9Ô"#'™ØD&VÞI&v‘‰‘“Lì"{‡“8†Zdbä$§ÈÄÊ'ÉÄ)2±òG2ñ‰LŒ|ÓP‹LüÍÇÉÄ)2±òE2q‰LŒœdâ™9ÉÄ%2±÷ï“8‡Zdb䇆Zdbä$›ÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄÊ}ƒ>"{ÿ>‰s¨E&FN2±‹L¬¼“Lì"#'™ØE&ö'q µÈÄÊ'ÉÄ)21r’‰Sdbådâ™ù¡¡™ø›’‰Kdbå‹dâ™9ÉÄ%21r’‰[dbß'qµÈÄÈ/ µÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&‘‰•ú}D&öñ}çP‹L¬¼“Lì"#'™ØE&FN2±‹LìNâê)2±òI2qŠLŒœdâ™Xù#™øD&F~i¨E&þæã‡dâ™Xù"™¸D&FN2q‰L¬|“LÜ"ûü>‰s¨E&FN2±‰L¬¼‘Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹L¬üL<"#§oÐGdbŸß'q u™Xy'™ØE&FN2±‹LŒœdb™ØœÄ1Ô"#'™8E&FN2qŠL¬ü‘L|"#4Ô"óñC2q‰L¬|‘L\"#'™¸E&V¾I&n‘‰}}ŸÄ9Ô"+o$›ÈÄÈI&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™xD&V~H&‘‰‘Ó7è#2ñ7ÿ»Ç1Ô"#'™ØE&FN2±‹LŒœdb™Ø7œÄ1Ô"#'™8E&FN2q‰L¬ü‘L|"ó¿ïëb¨E&FN2q‰L¬|‘L\"#'™¸E&V¾I&n‘‰}ŸÄñ×D&VÞH&6‘‰‘“Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&V~H&‘‰‘“L<"#§oÐGdâoþwc¨E&FN2±‹LŒœdb™9ÉÄ.2±8‰c¨E&FN2qŠL¬|‘L\"+ ÿLðŸ¡>ð¾.†Zdbä$—ÈÄÊÉÄ%21r’‰[dbå›dâ™ø›ÿE1Ô"#'™ØD&FN2±‰LŒœdb™9ÉÄ.2±òM2q‹LŒœdâ™Xù!™xD&FN2ñˆLŒœ¾A‘‰¿ùß=Ž¡™9ÉÄ.21r’‰]dbä$»ÈÄ~á$Ž¡™9ÉÄ)2±òE2q‰LüÍÿ¾wŽ¡™y§¡™9ÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&öû}çP‹LŒœdb™9ÉÄ&21r’‰Mdbådb™Xù&™¸E&V~H&‘‰‘“L<"#'™xD&FNß ÈÄßüïÇP‹LŒœdb™9ÉÄ.21r’‰CdbpÇP‹LŒœdâ™Xù"™¸D&ö÷}çP‹LŒ|ÐP‹L¬¼‘L\"+_$—ÈÄÈI&n‘‰•o’‰[dbß'qµÈÄÈI&6‘‰‘“Ll"#'™ØE&VÞI&v‘‰•o’‰Gdbå‡dâ™9ÉÄ#21r’‰Gdbäô úˆLìïû$Ρ™9ÉÄ.21r’‰]dbåƒdâ™8~à$Ž¡™9ÉÄ)2±òE2q‰L?ß'qµÈÄÈI&6‘‰•7’‰Kdbå‹dâ™Xù&™¸E&FN2q‹L?ß'qµÈÄÈI&6‘‰‘“Ll"#'™ØE&VÞI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"#§oÐGdâøù>‰s¨E&FN2±‹LŒœdâ™Xù ™8D&Ž'q µÈÄÈI&N‘‰•/’‰Kdâhß'qµÈÄÈI&6‘‰•7’‰Kdbå‹dâ™Xù&™¸E&FN2q‹Líû$Ρ™9ÉÄ&21r’‰Mdbådb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Gdbäô úŠLíû$Ρ™9ÉÄ.2±òA2qˆLŒœdâ™8:œÄ1Ô"#'™¸D&V¾H&.‘‰£ŸÄ9Ô"#'™ØD&VÞH&.‘‰•o’‰[dbä$·ÈÄÈI&n‘‰£ŸÄ9Ô"#'™ØD&FN2±‹L¬¼“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL¬üÒ7è+2qôï“8‡Zdbä$‡ÈÄÊÉÄ!21r’‰CdâpÇP‹L¬|‘L\"#'™¸D&Žñ}çP‹LŒœdb™Xy#™¸E&V¾I&n‘‰‘“LÜ"#'™xD&Žñ}çP‹LŒœdb™Xy'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ+2±òKß ¯ÈÄ1¾Oâj‘‰•’‰Cdbä$‡ÈÄÈI&‘‰cÂI\C½D&V¾H&.‘‰‘“L\"Çü>‰s¨E&FN2±‰L¬¼‘LÜ"+ß$·ÈÄÈI&n‘‰•’‰Gdâ˜ß'qµÈÄÈI&v‘‰•w’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰•_’‰Wdbäô úŠLóû$Ž¡"+$‡ÈÄÈI&‘‰‘“L"Ç‚“8†Zdbä$—ÈÄÈI&.‘‰c}ŸÄ9Ô"#'™ØD&VÞH&n‘‰•o’‰[dbä$ÈÄÊÉÄ#2q¬ï“8‡Zdbådb™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$¯ÈÄÊ/ÉÄ+21rú}E&þæ÷8†Zdbä$‡ÈÄÈI&‘‰‘“L"dž“8†Zdbä$—ÈÄÈI&n‘‰cŸÄ9Ô"+o$›ÈÄÈI&n‘‰•o’‰[dbä$ÈÄÊÉÄ#2qìï“8þãºÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÊ/ÉÄ+21r’‰Wdbäô úŠLüÍÿîq µÈÄÈI&‘‰‘“L"#'™8D&Ž'q µÈÄÈI&.‘‰•o’‰[dâ8ß'q u™Xy#™ØD&FN2q‹L¬|“LÜ"#'™xD&V~H&‘‰¿ù_ôC-21r’‰]dbä$»ÈÄÈI&v‘‰‘“L"+?$ÈÄÈI&^‘‰•_’‰Wdbä$¯ÈÄÈéô™ø›ÿÝãj‘‰‘“L"#'™8D&FN2qˆLNâj‘‰‘“L\"+ß$·ÈÄßüï{çj‘‰‘“Ll"#'™¸E&V¾I&n‘‰‘“L<"+?$ÈÄq¿Oâj‘‰‘“Lì"#'™ØE&FN2±‹L¬|L"+?$ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈéô™ø›ÿÝãj‘‰‘“L"#'™8D&FN2qŠLNâj‘‰‘“L\"+ß$·ÈÄñ¾Oâj‘‰‘“Ll"+ï$·ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™8Þ÷IœC-21r’‰]dbä$»ÈÄÈI&‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™9}ƒ¾"Çû>‰s¨E&FN2qˆLŒœdâ™Xù$™8E&Î8‰c¨E&FN2q‰L¬|“LÜ"çÏ÷IœC-21r’‰]dbådâ™Xù&™¸E&V~H&‘‰‘“L<"çÏ÷IœC-21r’‰]dbä$»ÈÄÈI&‘‰•’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄÈéô™8¾Oâj‘‰‘“L"#'™8E&V>I&N‘‰³ÁIC-21r’‰Kdbå›dâ™8Û÷IœC-21r’‰]dbådâ™Xù&™xD&V~H&‘‰‘“L<"gû>‰s¨E&FN2±‹LŒœdb™Xù ™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™9}ƒ~"gû>‰s¨E&FN2qˆL¬|’Lœ"#'™8E&Î'q µÈÄÈI&n‘‰•o’‰[dâìß'qµÈÄÈI&v‘‰•w’‰[dbå‡dâ™9ÉÄ#21r’‰Gdâìß'qµÈÄÈI&v‘‰‘“L"+$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"+ô ú‰Lœýû$Ρ™9ÉÄ)2±òI2qŠLŒœdâ™8œÄ1Ô"+ß$·ÈÄÈI&n‘‰s|ŸÄ9Ô"#'™ØE&VÞI&‘‰•’‰Gdbä$ÈÄÈI&^‘‰s|ŸÄ9Ô"#'™ØE&V>H&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñ‰L¬üÑ7è'2qŽï“8‡Zdbå“dâ™9ÉÄ)21r’‰Sdâœp×Po‘‰•o’‰[dbä$·ÈÄ9¿Oâj‘‰‘“Lì"+ï$ÈÄÊÉÄ#21r’‰Gdbå—dâ™8ç÷IœC-21r’‰Cdbåƒdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbådâ™9}ƒ~"çü>‰c¨§ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈĹà$Ž¡™9ÉÄ-21r’‰[dâ\ß'qµÈÄÈI&v‘‰•w’‰Gdbå‡dâ™9ÉÄ+2±òK2ñŠLœëû$Ρ™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ'2±òG2ñ‰LŒœ¾A?‘‰¿ùß=Ž¡™9ÉÄ)21r’‰Sdbä$§ÈĹá$Ž¡™9ÉÄ-21r’‰GdâÜß'qµÈÄÊ;ÉÄ.21r’‰Gdbå‡dâ™9ÉÄ+2±òK2ñŠLœûû$Žÿ¸!2±òA2qˆLŒœdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+2±òG2ñ‰LŒœdâ™9}ƒ~"ó¿{C-21r’‰Sdbä$§ÈÄÈI&N‘‰óÀIC-21r’‰[dbå‡dâ™8Ï÷ICÝE&VÞI&v‘‰‘“L<"+?$ÈÄÈI&^‘‰•_’‰Wdâoþ}ÄP‹LŒœdâ™9ÉÄ!21r’‰Cdbä$§ÈÄÊ/ÉÄ+21r’‰Odbådâ™9ÉÄ'21rúýD&þæ÷8†Zdbä$§ÈÄÈI&N‘‰‘“Lœ"ç…“8†Zdbä$·ÈÄÊÉÄ#2ñ7ÿûÞ9†Zdbä$»ÈÄÈI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+2qÞï“8‡Zdbä$‡ÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÊ/ÉÄ+2±òG2ñ‰LŒœdâ™9ÉÄ'21rúýD&þæ÷8†Zdbä$§ÈÄÈI&N‘‰‘“L\"烓8†Zdbä$·ÈÄÊÉÄ#2q¾ï“8‡Zdbä$»ÈÄÊÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Î÷}çP‹LŒœdâ™9ÉÄ!21r’‰Sdbå“dâ™Xù%™øD&VþH&>‘‰‘“L|"#'™øD&FNß ŸÈÄù¾Oâj‘‰‘“Lœ"#'™8E&V¾H&.‘‰ëNâj‘‰‘“LÜ"+?$ÈÄõó}çP‹LŒœdâ™Xù ™xD&V~H&‘‰•_’‰Wdbä$¯ÈÄõó}çP‹LŒœdâ™9ÉÄ!21r’‰Sdbå“dâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'21rúýD&®Ÿï“8‡Zdbä$§ÈÄÈI&.‘‰•/’‰KdâjpÇP‹LŒœdâ™Xù!™xD&®ö}çP‹LŒœdâ™Xù ™xD&V~H&^‘‰•_’‰Wdbä$¯ÈÄÕ¾Oâj‘‰‘“L"#'™8D&V>I&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&Fß ×ÈÄÕ¾Oâj‘‰‘“Lœ"+_$—ÈÄÈI&.‘‰«ÃIC-21r’‰Gdbå‡d♸ú÷IœC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœd♸ú÷IœC-21r’‰Cdbä$§ÈÄÊ'ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä$ŸÈÄßüïÇP‹L¬|’Lœ"#'™¸D&V¾H&.‘‰‘“L\"×€“8†Zdbå‡dâ™9ÉÄ#2qï“8‡Zdbä$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ'2qï“8‡Zdbä$‡ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈA&þàóùÇÿÝãj‘‰•O’‰Sdbå‹dâ™9ÉÄ%21r’‰Kdâšp×P‘‰•’‰Gdbä$ÈÄ5¿Oâj‘‰‘“L"+$¯ÈÄÊ/ÉÄ+21r’‰Wdbåd♸æ÷IœC-21r’‰Sdbå“dâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰OdâoþÏÿ;Ô"#ï4Ô"+Ÿ$—ÈÄÊÉÄ%21r’‰Kdbä$—Èĵà$Ž¡™9ÉÄ#21r’‰GdâZß'qµÈÄÈI&‘‰•’‰Wdbå—dâ™9ÉÄ'2±òG2ñ‰L\ëû$Ρ™Xù$™8E&FN2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÈÄ?'ñŸ¡^_'ñ¿C-21òAC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰KdâÚpÇP‹LŒœdâ™9ÉÄ+2qíï“8‡Zdbåƒdâ™9ÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&®ý}ÇPO‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰¿ù¿{üÏP‹LŒ¼ÓP‹LŒ|ÒP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸œÄ1Ô"#'™xD&V~I&^‘‰ë|ŸÄ1ÔCdbåƒdâ™9ÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&þæÑG µÈÄÈI&N‘‰‘“Lœ"#'™8E&FN2q‰L¬ü‘L|"#™øïÿêóù+ñ?C-21òAC-21òEC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰KdâºpÇP‹LŒœdâ™Xù%™xE&þæß;ÇP‹LŒœdâ™9ÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&®û}çP‹LŒœdâ™9ÉÄ)21r’‰Sdbå‹dâ™Xù#™øD&þæ~¢È¡™y§¡™ù¤¡™ù¦¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ-2q=8‰c¨E&FN2ñˆL¬ü’L¼"×û>‰s¨E&FN2qˆL¬|’L¼"+¿$¯ÈÄÈI&>‘‰•?’‰Odâzß'qµÈÄÈI&N‘‰‘“Lœ"#'™¸D&V¾H&.‘‰•?‰&øÏP¿ï‡9Ô"#4Ô"#_4Ô"#?4Ô"+_$—ÈÄÈI&.‘‰‘“L\"+ß$·ÈÄý'q µÈÄÈI&‘‰•_’‰Wdâþù>‰s¨E&FN2qŠL¬|’L¼"+¿$¯ÈÄÊÉÄ'21r’‰Odâþù>‰s¨E&FN2qŠLŒœdâ™9ÉÄ%2±òE2q‰LüÍÿìqµÈÄÈ; µÈÄÈ' µÈÄÈ7 µÈÄÈ/ µÈÄÊÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-2q78‰c¨E&FN2ñˆL¬ü’L¼"wû>‰s¨E&FN2qŠL¬|’L¼"+¿$ŸÈÄÊÉÄ'21r’‰Odânß'qµÈÄÈI&N‘‰‘“Lœ"+_$—ÈÄÈI&.‘‰¿ùŸ=Ρ™ù ¡™ù¢¡™ù¡¡™9ÉÄ&2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LÜNâj‘‰‘“L¼"+¿$¯ÈÄÝ¿Oâj‘‰‘“Lœ"+Ÿ$¯ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÝ¿Oâj‘‰‘“Lœ"#'™¸D&V¾H&.‘‰‘“L\"wÿ>‰s¨E&F>i¨E&F¾i¨E&F~i¨E&VÞH&6‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-21r’‰[dâpÇP‹L¬ü’L¼"#'™xE&îñ}çP‹LŒœdâ™Xù$™øD&VþH&>‘‰‘“L|"#™8D&îñ}çP‹LŒœdâ™Xù"™¸D&FN2q‰LŒœd♸Ç÷IœC-21òEC-21òCC-21r’‰Mdbådb™Xù"™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&î 'q õ™Xù%™xE&FN2ñŠLÜóû$Ρ™9ÉÄ)2±òI2ñ‰L¬ü‘L|"#'™øD&þæ÷8†Zdbå“dâ™9ÉÄ%2±òE2q‰LŒœdâ™9ÉÄ%2qÏï“8‡Zdb䛆Zdbä—†Zdbådb™9ÉÄ&2±òE2q‹L¬|“LÜ"#'™¸E&FN2q‹LÜ Nâj‘‰‘“L¼"#'™xE&îõ}çP‹LŒœdâ™Xù$™øD&VþH&>‘‰‘ƒLü3Á†úW¨ý4j‘‰•O’‰Sdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈĽ¾Oâj‘‰‘j‘‰‘“Ll"+o$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"÷†“8†Zdbä$¯ÈÄÈI&>‘‰{ŸÄ9Ô"+Ÿ$§ÈÄÈI&>‘‰•?’‰Odb䛆Zdâoþwc¨E&V>I&.‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"÷þ>‰s¨E&F~i¨E&VÞH&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LÜNâj‘‰‘“L¼"+$ŸÈÄ}¾Oâê)2±òI2qŠLŒœdâ™Xù#™øD&F~h¨E&þæ÷8†Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈÄÈI&n‘‰û|ŸÄ9Ô"#'™ØD&VÞH&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LÜNâj‘‰‘“L¼"+$ŸÈÄßüï{çj‘‰‘“Lœ"#'™øD&VþH&>‘‰‘_j‘‰¿ùß=Ž¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2±òM2q‹LÜ÷û$Ρ™Xy#™ØD&FN2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰Gdâ~pÇP‹LŒœdâ™Xù#™øD&î÷}çP‹LŒœdâ™Xù"™øD&VþH&>‘‰‘?j‘‰¿ùß=Ž¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ-2±òM2q‹LÜïû$Ž¡n"+o$›ÈÄÈI&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&V~H&‘‰çNâj‘‰‘“L¼"+$ŸÈÄóó}çP‹LŒœdâ™Xù"™øD&VþH&>‘‰¿ùßg1Ô"#ß4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸E&V¾I&n‘‰¿ùŸ=Ρ™9ÉÄ&21r’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&‘‰•’‰GdâipÇP‹LŒœdâ™Xù#™øD&žö}çP‹LŒœdâ™Xù"™øD&Vþ@&þ™à?CÝàÙF µÈÄÈ µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÊ7ÉÄ-21r’‰[dâoþgs¨E&FN2±‰LŒœdb™9ÉÄ&21r’‰]dbå›dâ™9ÉÄ-2±òC2ñˆLŒœdâ™x:œÄ1Ô"#'™øD&VþH&>‘‰§ŸÄ9Ô"#'™¸D&V¾H&>‘‰¿ùß“8†Zdbä†Zdbä—†Zdbå‹dâ™9ÉÄ%21r’‰[dbå›dâ™9ÉÄ-2ñôï“8‡Zdbä$›ÈÄÈI&6‘‰‘“Ll"+ï$»ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™9ÉÄ#2ñ 8‰c¨E&VþH&>‘‰‘“L|"Ïø>‰s¨E&FN2q‰L¬|Lüû’ùß¡pÇP‹LŒ|ÐP‹LŒœdb™Xù"™¸D&FN2q‰L¬|“LÜ"#'™¸E&FN2q‹L<ãû$Ρ™9ÉÄ&21r’‰Mdbä$»ÈÄÊ;ÉÄ.2±òM2q‹L¬üL<"#'™xD&FN2ñˆL<Nâê'2±òG2ñ‰LŒœdâ™xæ÷IœC-21r’‰KdbåkÑP‹L<Nâj‘‰‘Oj‘‰•7’‰Mdbå‹dâ™9ÉÄ-2±òM2q‹LŒœdâ™9ÉÄ-2ñÌï“8‡Zdbä$›ÈÄÈI&6‘‰•w’‰]dbä$»ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ#2ñ,8‰c¨E&FN2ñ‰LŒœdâ™xÖ÷IœC-21r’‰KdbåkÓP‹L< Nâj‘‰‘“Ll"+o$›ÈÄÊÉÄ%2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dâYß'qµÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"φ“8†Zdbä$ŸÈÄÈA&Ž‘‰gŸÄ9Ô"+_$—ÈÄÈ µÈijá$Ž¡™9ÉÄ&2±òF2±‰L¬|‘LÜ"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&žý}çP‹LŒœdb™Xy'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2ñ8‰c¨E&FN2ñ‰LüÍÿìqµÈÄÊ'ÉÄ%2±òE2q‰LŒüÒP‹L<Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰‘“L<"Ïù>‰s¨E&FN2±‹L¬¼“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™x.œÄ1Ô"#'™øD&þæö8‡Zdbå‹dâ™9ÉÄ%21òGC-2ñ\8‰c¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&V~H&‘‰ç~ŸÄ9Ô"+ï$»ÈÄÈI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñŠL<Nâj‘‰‘“L|"ó?{œC-2±òE2q‰LŒœdâ™Xùþ¡¡™xœÄ1Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“L<"+?$ÈÄó¾Oâê.2±òN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbå—dâ™xà$Ž¡™9ÉÄ'2ñ7ÿ³Ç9Ô"+_$—ÈÄÈI&n‘‰•ïFC-2ñþÀIC-2±òF2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ#2±òC2ñˆLüÍÿìqµÈÄÈI&v‘‰‘“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñŠL¬ü’L¼"oƒ“8†Zdbä$ŸÈÄßüÏçP‹L¬|‘L\"#'™¸E&V¾; µÈÄÛà$®¡n"+o$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰•’‰Gdbä$ÈÄßüÏçP‹LŒœdb™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ#21r’‰Gdbå—dâ™9ÉÄ+2ñv8‰c¨E&F2ñŸÏ„ÿê_Ü÷³h¨E&V¾H&.‘‰‘“LÜ"+߃†Zdâoþ÷$Ž¡™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰Gdbå‡dâ™9ÉÄ#2ñöï“8‡Zdbä$»ÈÄÈI&v‘‰‘“Lì"+$‡ÈÄÊÉÄ#21r’‰Wdbå—dâ™9ÉÄ+2ñ8‰c¨E&þæžmäP‹LŒ|ÓP‹L¬|‘L\"#'™¸E&V¾I&6‘‰¿ùß“8†Zdbä$›ÈÄÈI&v‘‰•o’‰[dbä$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄ;¾Oâj‘‰‘“Lì"#'™ØE&FN2qˆL¬|L"+?$ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄ;á$þê¿/™ÿêùýl#‡Zdb䇆Zdbå‹dâ™9ÉÄ-2±òM2±‰L¼Nâj‘‰‘“Ll"+ï$»ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™9ÉÄ#21r’‰Gdâß'qµÈÄÈI&v‘‰‘“Lì"+$‡ÈÄÈI&‘‰•’‰Wdbå—dâ™9ÉÄ+21r’‰Wdâ]pÇP‹LŒ¼ÓP‹LŒüÒP‹L¬|‘L\"#'™¸E&V¾I&6‘‰wÁIC-21r’‰]dbådb™Xù&™¸E&V~H&‘‰‘“L<"#'™xD&FN2ñˆL¼ëû$Ρ™9ÉÄ.21r’‰Cdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰WdâÝpÇP‹LŒ|ÐP‹LŒœdb™Xù"™¸D&V¾I&n‘‰‘“Ll"8†Zdbä$»ÈÄÊ;ÉÄ.2±òM2ñˆL¬üL<"#'™xD&FN2ñˆLŒœdâ™x÷÷IœC-21r’‰]dbåƒdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄ{à$Ž¡™ù¤¡™Xy#™ØD&V¾H&n‘‰•o’‰[dbä$›ÈÄ{à$Ž¡™9ÉÄ.2±òN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™9ÉÄ+2ñžï“8‡Zdbä$‡ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰÷ÂIC-21òEC-2±òF2±‰L¬|“LÜ"#'™¸E&FN2±‰L¼Nâj‘‰‘“Lì"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰•_’‰Wdâ½ß'qµÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L|"8†Zdb䛆Zdbådb™Xù&™¸E&FN2q‹L¬üLl"8†Zdbä$»ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Wdbå—dâ™xß÷IC=D&V>H&‘‰‘“L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠL¬ü‘L|"ßœÄ1Ô"#?4Ô"+o$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø~à$Ž¡™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù%™xE&þæö8‡Zdbä$‡ÈÄÈI&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™øD&VþH&>‘‰¯ÁIC-21òKC-2±òF2±‰L¬|“LÜ"#'™xD&V~H&6‘‰¯ÁI\CÝE&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"+¿$¯ÈÄÈI&^‘‰¿ùŸ=Ρ™9ÉÄ!21r’‰Cdbä$‡ÈÄÈI&N‘‰•_’‰Wdbä$¯ÈÄÊÉÄ'21r’‰OdâëpÇP‹LŒœdb™Xy#™ØD&V¾I&n‘‰‘“L<"+?$›ÈÄßüïIC-21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$¯ÈÄÊ/ÉÄ+21r’‰Wdâëß'qµÈÄÈI&‘‰‘“L"#'™8D&V>I&N‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'21r’‰OdâpÇP‹L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“L<"+?$»ÈÄßüïIC-21r’‰]dbä$‡ÈÄÊÉÄ#21r’‰Gdbå—dâ™9ÉÄ+21r’‰Wdâß'qµÈÄÈI&‘‰‘“L"#'™8E&V>I&N‘‰•_’‰Wdbådâ™9ÉÄ'21r’‰Odâ›p×P7‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø&œÄ1Ô"#'™ØE&V>H&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄ7¿Oâj‘‰‘“L"#'™8D&V>I&N‘‰‘“Lœ"+¿$ŸÈÄÊÉÄ'21r’‰Odbä$ŸÈÄ·à$Ž¡™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ#2±òC2±‹L| Nâj‘‰‘“L"+$‡ÈÄÊÉÄ#2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdâ[ß'qµÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"߆“8†Zdbä$›ÈÄÈI&v‘‰•o’‰[dbå‡dâ™9ÉÄ.2ñm8‰c¨E&FN2qˆL¬|L"+?$¯ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰oŸÄ9Ô"#'™8D&V>I&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰L|Nâj‘‰‘“Ll"+ï$»ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdb™øœÄ1Ô"#'™8D&V>H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"#'™øD&¾ó}çP‹LŒœdâ™Xù$™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'2ñ]8‰c¨E&FN2±‰L¬¼“Lì"+?$ÈÄÈI&‘‰‘“Lì"ß…“8†Zdbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbådâ™øî÷IœC-2±òI2qŠLŒœdâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä ÷ÈÄ÷à$Ž¡™9ÉÄ&2±òN2±‹L¬üL<"#'™xD&V~I&v‘‰ïÁIC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ'2±òG2ñ‰L|ïû$Ž¡ž"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&þæÿîñ?CÍ2ñÿÑOâj–‰™“Ll,#ï$;ËÄÈÉÄÃ21s’‰—ebä—dbg™Xùß“8†šebäƒdâ`™˜9ÉÄÁ21òK2ñ²LÌœdâe™˜9ÉÄË21s’‰ebädâc™XùŸ=Ρf™˜9ÉÄÉ21s’‰“ebæ$'ËÄÌI&N–‰‘?’‰ebæ$ËÄÌA&þ3Á†ºò÷øŸ¡î2Ô Nâê#CݾŸmäP?êß¼“LìK†º}ŸÄ9ÔS†ºÁûºê&Cý›_’‰ýÊP78‰k¨Ç uƒg1Ô[†ºr’‰ãÊP·ï“8‡zÉP·ï“8‡úÈP·ï“8‡úÉP·ïß.r¨» uå$ß”¡nß'qu—¡nß'r¨§ uûü•øŸ¡Þ2Ôíë$þw¨¯ uå$× uû>‰s¨ uû<‰ÿê'CÝ>O↺ÉPWÞi¨‡ u‡“8†úÊP÷ïg1ÔýG†ú7ï$û–¡îß'qõ’¡îð¾.†ºËPÿæ—db2ÔNâê&CÝáÙF õ‘¡®œdâx2Ôýû$ΡÞ2Ôýû$Ρ¾2Ôýû$Ž¡~?2Ôýû·‹ê!C]9ÉÄ·d¨û÷IœC=d¨û÷Éê%CÝ?%þg¨ uÿ:‰ÿê'Cý›/’‰«ÉP÷ï“8‡úÊP÷Ï“8†úϯĆºžÄÿ u—¡®|ÐPOê'q õ“¡ßÏ6r¨› uå$û‘¡ß'qõ–¡ð¾.†zÈPÿæ—dâø‘¡pÇPwêÏ6b¨¯ uå$ç õø>‰s¨ õø>‰s¨Ÿ õø>‰s¨› õøþí"‡zÊPWN2ñmêñ}çPOêñýp"‡zËPÏ_‰ÿê+C=¾Nâ†zýÈPÿæ‹dâê2Ôãû$Ρ~2Ôãó$þg¨› õø<‰ÿê!C]ù¤¡^2ÔNâêþ#C=¿ŸmäPwêÊI&ö+C=¿Oâê#C=á}] õ”¡þÍ/ÉÄÑd¨'œÄ1ÔC†z³ê'Cý›O’‰³ÉPÏï“8‡úÊPÏï“8†úýÈPÏï“8‡ºËPÏïß.r¨— uå$ß‘¡žß'qõ’¡žß'r¨ õüü•øŸ¡~2Ôóë$þw¨› uå$סžß'q õþù‘¡žŸ'ñ?CÝe¨ççIüÏPOêÊ õ–¡^pÇP7êõýl#‡zÈPWN2±?êõ}çP_êïëb¨— õo~I&Ž.C½à$Ž¡ž2Ô žmÔPÏêß|’Lœ]†z}ŸÄ9ÔO†z}ŸÄ9ÔM†z}ŸÄ9ÔC†z}ÿv‘C½e¨+'™ø® õú>‰s¨· õú~8‘C}e¨×ç¯Ä9ÔëG†z}Äÿu—¡®œdâš2Ôëû$Ρn2Ôëó$þg¨‡ õú<‰ÿê%C]ù¦¡>2ÔNâê.C½¿ŸmäPOêÊI&Žêý}çP?ê ïëb¨· uå$Ç¡ÞpÇP/ê Ï6b¨› õo>I&Î!C½¿Oâê÷#C½¿Oâê.C½¿Oâê)C½¿»È¡>2Ô•“L|O†zŸÄ9ÔG†z?œÈ¡~2ÔûóW↺ÉPﯓøß¡2Ô•“L\K†zŸÄ9Ô]†zžÄÿ õ”¡ÞŸ'ñ?C½e¨+?4ÔW†úÀIC=d¨Ï÷³ê%Cý›’‰£ÉPŸï“8†úþÈPx_C}d¨+'™8¦ õ“8†zËPx¶CÝe¨óI2qNêó}çP7êó}çPêó}çP/êóýÛEõ•¡®dâúù‘¡>ß'qõ•¡>ß'b¨× õùü•øŸ¡î2Ôçë$þw¨§ uå$×–¡>ß'qõ¡>Ÿ'ñ?C½d¨ÏçIüÏPêÊ/ õ“¡¾pÇPOêûýl#‡zËPÿæƒdâè2Ô÷û$Ρn2ÔÞ×ÅP_êÊI&Ž%C}á$Ž¡>2ÔžmÄPêß|’LœK†ú~ŸÄ9Ô]†ú~ŸÄ9ÔS†ú~ŸÄ9Ô[†ú~ÿv‘Cýd¨‰ÙÏ u“¡¾ß'qõ“¡¾ß'r¨› õýü•øŸ¡2Ô÷ë$þw¨— uå$ב¡¾ß'qõ”¡¾Ÿ'ñ?C½e¨ïçIüÏP_êÊI&¶ê'q õ’¡~ßÏ6r¨ õo>H&Ž!Cý¾Oâê.Cýà}] õ“¡þÍÉıe¨œÄ1ÔW†úÁ³ê)Cý›O’‰sËP¿ï“8‡zÈP¿ï“8‡zÉP¿ï“8‡úÈP¿ïß.j¨ÿLðŸ¡þj?†ºËP¿ï“8†zýÈP¿ï‡9Ô]†ú}þJüÏPOê÷uÿ;Ô[†ºr’‰ëÊP¿ï“8‡zÉP¿Ï“øŸ¡>2Ôïó$þg¨Ÿ õoÞH&6‘‰íNâj‘‰‘“Lì"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™Ø~à$Ž¡™Xù$™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒüÑP‹LüÍ×O§¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%21r’‰Kdbûù>‰s¨E&F~h¨E&FN2±‰L¬¼‘Ll"[ƒ“8†Zdbä$»ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™Xù#™8D&¶'q õ™Xù$™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LüÍÿÎ1Ô"#4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&FN2q‹Llíû$Ρ™ù¥¡™Xy#™ØD&FN2±‰LlNâj‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™ø›ÿ=‰c¨E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒd⟠þ3Ôýû·‹j‘‰‘Oj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"+ß$·ÈÄÖ¿Oâj‘‰‘“Ll"+o$›ÈÄÈI&6‘‰mÀIC-2±òA2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘Lœ"ó¿'q µÈÄÈI&N‘‰‘“L\"+$ŸÈÄÈI&>‘‰¿ùŸ=Ρ™y§¡™ù¢¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ-2±òM2q‹Llãû$Ρ™Xy#™ØD&FN2±‰LŒœdb™Ø&œÄ5ÔCdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™8E&¶ 'q µÈÄÈI&N‘‰•/’‰Kdbådâ™9ÈÄ¿/Üþêù}çP‹LŒ|ÐP‹LŒ|ÓP‹L¬|‘L\"#'™¸D&FN2q‰L¬|“LÜ"#'™¸E&¶ù}ÇP7‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰mÁIC-21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™ØœÄ1Ô"#'™¸D&V¾H&.‘‰•?’‰OdâoþŸÇ5Ô"#ï4Ô"#Ÿ4Ô"#?4Ô"+_$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄÈI&n‘‰¿ùß=Ž¡™9ÉÄ&21r’‰Mdbä$›ÈĶá$Ž¡™9ÉÄ!21r’‰Sdbå—dâ™Xù#™øD&FN2qŠLlNâj‘‰‘“L\"+_$—ÈÄÊ}ú™ø›ÿçÅq µÈÄÈ µÈÄÈ µÈÄÈ/ µÈÄÊÉÄ%21r’‰Kdbå›dâ™9ÉÄ-21r’‰[dâoþwc¨E&FN2±‰LŒœdb™9ÉÄ&2±8‰c¨E&FN2qˆL¬|’Lœ"+¿$ŸÈÄÊÉÄ'21r’‰Sdb;pÇP‹LŒœdâ™Xù"™¸D&þæÑG µÈÄÈ; µÈÄÈ' µÈÄÈ7 µÈÄÈI&6‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄßüïÇP‹LŒœdb™9ÉÄ&21r’‰Mdb»pÇP‹LŒœdâ™Xù$™8E&VþH&>‘‰‘“L|"#'™8E&¶ 'q µÈÄÈI&.‘‰•/’‰Kdb»ß'qµÈÄÈ µÈÄÈ µÈÄÈ µÈÄÊÉÄ&2±òE2q‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™ø›ÿÝãj‘‰‘“Ll"#'™ØD&FN2±‹LlNâj‘‰‘“L"+Ÿ$§ÈÄÊÉÄ'21r’‰Odâo>H&N‘‰•O’‰Sdbä$—ÈÄÊÉÄ%2±½ï“8‡Zdb䓆Zdb䛆Zdbä$›ÈÄÊÉÄ&2±òE2q‹L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™ØÞ÷IœC-21r’‰Mdbä$›ÈÄÊ;ÉÄ.2±ÿÀIC-21r’‰Cdbå“dâ™Xù#™øD&F2ñÏÿ;Ô¿ùü!™8E&V>I&N‘‰•/’‰Kdbä$—ÈÄþó}çP‹LŒ|ÑP‹LŒüÐP‹LŒœdb™Xy#™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LŒœdâ™Ø¾Oâj‘‰‘“Ll"#'™ØE&VÞI&v‘‰½ÁIC-21r’‰Cdbå“dâ™Xù#™øD&F¾h¨E&þæó‡dâ™Xù$™¸D&V¾H&.‘‰‘“L\"{û>‰s¨E&F¾i¨E&F~i¨E&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&FNß ÈÄÞ¾Oâj‘‰‘“Ll"+ï$»ÈÄÈI&v‘‰½ÃIC-21r’‰Sdbå“dâ™Xù#™øD&F¾i¨E&þæó‡dâ™Xù"™¸D&FN2q‰LŒœdâ™Øû÷IœC-21òCC-21r’‰Mdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[db凾A‘‰½ŸÄ9Ô"#'™ØE&VÞI&v‘‰‘“Lì"û€“8†Zdbå“dâ™9ÉÄ)2±òG2ñ‰LŒüÐP‹LüÍçÉÄ%2±òE2q‰LŒœdâ™9ÉÄ-2±ï“8‡Zdbä—†Zdbådb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$ÈÄÊ}ƒ>"ûø>‰s¨E&VÞI&v‘‰‘“Lì"#'™ØE&ö 'q õ™Xù$™8E&FN2qŠL¬ü‘L|"#¿4Ô"óùC2q‰L¬|‘L\"#'™¸D&V¾I&n‘‰}~ŸÄ9Ô"#'™ØD&VÞH&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&V~H&‘‰‘Ó7è#2±Ïï“8†º‹L¬¼“Lì"#'™ØE&FN2±‹Lì Nâj‘‰‘“Lœ"#'™8E&VþH&>‘‰‘?j‘‰¿ùü!™¸D&V¾H&.‘‰‘“LÜ"+ß$·Èľ¾Oâj‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“L<"+?$ÈÄÈéô™ø›ÿÝãj‘‰‘“Lì"#'™ØE&FN2±‹LìNâj‘‰‘“Lœ"#'™¸D&VþH&>‘‰¿ùß÷u1Ô"#'™¸D&V¾H&.‘‰‘“LÜ"+ß$·Èľ¿Oâøk"+o$›ÈÄÈI&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"+?$ÈÄÈI&‘‰‘Ó7è#2ñ7ÿ»Ç1Ô"#'™ØE&FN2±‹LŒœdb™ØœÄ1Ô"#'™8E&V¾H&.‘‰•?‰&øÏPx_C-21r’‰Kdbå‹dâ™9ÉÄ-2±òM2q‹LüÍÿ¢j‘‰‘“Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üL<"#'™xD&FNß ÈÄßüïÇP‹LŒœdb™9ÉÄ.21r’‰]db¿pÇP‹LŒœdâ™Xù"™¸D&þæß;ÇP‹LŒ¼ÓP‹LŒœdâ™Xù"™¸D&FN2q‹L¬|“LÜ"ûý>‰s¨E&FN2±‰LŒœdb™9ÉÄ&2±òN2±‹L¬|“LÜ"+?$ÈÄÈI&‘‰‘“L<"#§oÐGdâoþwc¨E&FN2±‹LŒœdb™9ÉÄ!2±?8‰c¨E&FN2qŠL¬|‘L\"ûû>‰s¨E&F>h¨E&VÞH&.‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-2±¿ï“8‡Zdbä$›ÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ#21rú}D&ö÷}çP‹LŒœdb™9ÉÄ.2±òA2qˆL?pÇP‹LŒœdâ™Xù"™¸D&ŽŸï“8‡Zdbä$›ÈÄÊÉÄ%2±òE2q‰L¬|“LÜ"#'™¸E&ŽŸï“8‡Zdbä$›ÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰‘Ó7è#2qü|ŸÄ9Ô"#'™ØE&FN2qˆL¬|L"Gƒ“8†Zdbä$§ÈÄÊÉÄ%2q´ï“8‡Zdbä$›ÈÄÊÉÄ%2±òE2q‹L¬|“LÜ"#'™¸E&Žö}çP‹LŒœdb™9ÉÄ&2±òN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#21rú}E&Žö}çP‹LŒœdb™Xù ™8D&FN2qˆLNâj‘‰‘“L\"+_$—ÈÄÑ¿Oâj‘‰‘“Ll"+o$—ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÑ¿Oâj‘‰‘“Ll"#'™ØE&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&V~éô™8ú÷IœC-21r’‰Cdbåƒdâ™9ÉÄ!2q 8‰c¨E&V¾H&.‘‰‘“L\"Çø>‰s¨E&FN2±‰L¬¼‘LÜ"+ß$·ÈÄÈI&n‘‰‘“L<"Çø>‰s¨E&FN2±‰L¬¼“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù¥oÐWdâß'qµÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄ1á$®¡^"+_$—ÈÄÈI&.‘‰c~ŸÄ9Ô"#'™ØD&VÞH&n‘‰•o’‰[dbä$·ÈÄÊÉÄ#2qÌï“8‡Zdbä$»ÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÊ/ÉÄ+21rú}E&Žù}ÇP‘‰•’‰Cdbä$‡ÈÄÈI&‘‰cÁIC-21r’‰Kdbä$—Èı¾Oâj‘‰‘“Ll"+o$·ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™8Ö÷IœC-2±òN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Wdbå—dâ™9}ƒ¾"ó¿{C-21r’‰Cdbä$‡ÈÄÈI&‘‰cÃIC-21r’‰Kdbä$·Èı¿Oâj‘‰•7’‰Mdbä$·ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™8ö÷Iÿq]dbådb™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbå—dâ™9ÉÄ+21rú}E&þæ÷8†Zdbä$‡ÈÄÈI&‘‰‘“L"Ç“8†Zdbä$—ÈÄÊ7ÉÄ-2qœï“8†º‰L¬¼‘Ll"#'™¸E&V¾I&n‘‰‘“L<"+?$ÈÄßü/úˆ¡™9ÉÄ.21r’‰]dbä$»ÈÄÈI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+21r’‰Wdbäô úŠLüÍÿîq µÈÄÈI&‘‰‘“L"#'™8D&Ž 'q µÈÄÈI&.‘‰•o’‰[dâoþ÷½s µÈÄÈI&6‘‰‘“LÜ"+ß$·ÈÄÈI&‘‰•’‰Gdâ¸ß'qµÈÄÈI&v‘‰‘“Lì"#'™ØE&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdbäô úŠLüÍÿîq µÈÄÈI&‘‰‘“L"#'™8E&Ž'q µÈÄÈI&.‘‰•o’‰[dâxß'qµÈÄÈI&6‘‰•w’‰[dbå›dâ™9ÉÄ#2±òC2ñˆLïû$Ρ™9ÉÄ.21r’‰ÿãÛ^nkÛ‘ ˆº$þIÿëQ«òêíÐD‰ÂÙ\]dbä$‡ÈÄÊÉÄ!2±òC2ñŠL¬ü’L¼"#'™xE&FN2ñŠLŒœ¾A_‘‰ã}ŸÄ9Ô"#'™8D&FN2qˆL¬|’Lœ"çœÄ1Ô"#'™¸D&V¾I&n‘‰óçû$Ρ™9ÉÄ.2±òN2q‹L¬|“LÜ"+?$ÈÄÈI&‘‰óçû$Ρ™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbäô úŠLœ?ß'qµÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÙà$Ž¡™9ÉÄ%2±òM2q‹Lœíû$Ρ™9ÉÄ.2±òN2q‹L¬|“L<"+?$ÈÄÈI&‘‰³}ŸÄ9Ô"#'™ØE&FN2±‹L¬|L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠLŒœ¾A?‘‰³}ŸÄ9Ô"#'™8D&V>I&N‘‰‘“Lœ"g‡“8†Zdbä$·ÈÄÊ7ÉÄ-2qöï“8‡Zdbä$»ÈÄÊ;ÉÄ-2±òC2ñˆLŒœdâ™9ÉÄ#2qöï“8‡Zdbä$»ÈÄÈI&‘‰•’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰•?úýD&Îþ}çP‹LŒœdâ™Xù$™8E&FN2qŠLœNâj‘‰•o’‰[dbä$·ÈÄ9¾Oâj‘‰‘“Lì"+ï$ÈÄÊÉÄ#21r’‰Gdbä$¯ÈÄ9¾Oâj‘‰‘“Lì"+$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™øD&Vþèô™8Ç÷IœC-2±òI2qŠLŒœdâ™9ÉÄ)2qN8‰k¨·ÈÄÊ7ÉÄ-21r’‰[dâœß'qµÈÄÈI&v‘‰•w’‰Gdbå‡dâ™9ÉÄ#2±òK2ñŠLœóû$Ρ™9ÉÄ!2±òA2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+2±òG2ñ‰LŒœ¾A?‘‰s~ŸÄ1ÔSdbå“dâ™9ÉÄ)21r’‰Sdâ\pÇP‹LŒœdâ™9ÉÄ-2q®ï“8‡Zdbä$»ÈÄÊ;ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Îõ}çP‹L¬|L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™Xù#™øD&FNß ŸÈÄßüïÇP‹LŒœdâ™9ÉÄ)21r’‰SdâÜpÇP‹LŒœdâ™9ÉÄ#2qîï“8‡Zdbådb™9ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Îý}ÇÜ™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœ¾A?‘‰¿ùß=Ž¡™9ÉÄ)21r’‰Sdbä$§ÈÄyà$Ž¡™9ÉÄ-2±òC2ñˆLœçû$Ž¡î"+ï$»ÈÄÈI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+2ñ7ÿ‹>b¨E&FN2qˆLŒœdâ™9ÉÄ!21r’‰Sdbå—dâ™9ÉÄ'2±òG2ñ‰LŒœdâ™9}ƒ~"ó¿{C-21r’‰Sdbä$§ÈÄÈI&N‘‰óÂIC-21r’‰[dbå‡dâ™ø›ÿ}ïC-21r’‰]dbä$ÈÄÊÉÄ#21r’‰Wdbå—dâ™8ï÷IœC-21r’‰Cdbä$‡ÈÄÈI&‘‰•O’‰Sdbå—dâ™Xù#™øD&FN2ñ‰LŒœdâ™9}ƒ~"ó¿{C-21r’‰Sdbä$§ÈÄÈI&.‘‰óÁIC-21r’‰[dbå‡dâ™8ß÷IœC-21r’‰]dbåƒdâ™Xù!™xD&FN2ñŠL¬ü’L¼"çû>‰s¨E&FN2qˆLŒœdâ™9ÉÄ)2±òI2qŠL¬ü’L|"+$ŸÈÄÈI&>‘‰‘“L|"#§oÐOdâ|ß'qµÈÄÈI&N‘‰‘“Lœ"+_$—ÈÄõ'q µÈÄÈI&n‘‰•’‰Gdâúù>‰s¨E&FN2qˆL¬|L<"+?$ÈÄÊ/ÉÄ+21r’‰Wdâúù>‰s¨E&FN2qˆLŒœdâ™9ÉÄ)2±òI2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™9}ƒ~"×Ï÷IœC-21r’‰Sdbä$—ÈÄÊÉÄ%2q58‰c¨E&FN2q‹L¬üL<"Wû>‰s¨E&FN2qˆL¬|L<"+?$¯ÈÄÊ/ÉÄ+21r’‰Wdâjß'qµÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"#‡oÐûGdâjß'qµÈÄÈI&N‘‰•/’‰Kdbä$—ÈÄÕá$Ž¡™9ÉÄ#2±òC2ñˆL\ýû$Ρ™9ÉÄ!2±òA2ñˆL¬ü’L¼"#'™xE&FN2ñŠL\ýû$Ρ™9ÉÄ!21r’‰Sdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r’‰Odâoþwc¨E&V>I&N‘‰‘“L\"+_$—ÈÄÈI&.‘‰kÀIC-2±òC2ñˆLŒœd♸Æ÷IœC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœd♸Æ÷IœC-21r’‰Cdbå“dâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä ÿNðùüãÿîq µÈÄÊ'ÉÄ)2±òE2q‰LŒœdâ™9ÉÄ%2qM8‰k¨ÈÄÊÉÄ#21r’‰Gdâšß'qµÈÄÈI&‘‰•’‰Wdbå—dâ™9ÉÄ+2±òG2ñ‰L\óû$Ρ™9ÉÄ)2±òI2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'2ñ7ÿgÿj‘‰‘wj‘‰•O’‰Kdbå‹dâ™9ÉÄ%21r’‰KdâZpÇP‹LŒœdâ™9ÉÄ#2q­ï“8‡Zdbä$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&®õ}çP‹L¬|’Lœ"#'™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒd⟓øÏP¯¯“øß¡™ù ¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2qm8‰c¨E&FN2ñˆLŒœd♸ö÷IœC-2±òA2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"×þ>‰c¨§ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄßüß=þg¨E&FÞi¨E&F>i¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L\Nâj‘‰‘“L<"+¿$¯ÈÄu¾Oâê!2±òA2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"ó¿è#†Zdbä$§ÈÄÈI&N‘‰‘“Lœ"#'™¸D&VþH&>‘‰‘ƒLüw‚ÿõùü•øŸ¡™ù ¡™ù¢¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2q]8‰c¨E&FN2ñˆL¬ü’L¼"ó¿ïc¨E&FN2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"×ý>‰s¨E&FN2qŠLŒœdâ™9ÉÄ)2±òE2q‰L¬ü‘L|"ó??QäP‹LŒ¼ÓP‹LŒ|ÒP‹LŒ|ÓP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸œÄ1Ô"#'™xD&V~I&^‘‰ë}ŸÄ9Ô"#'™8D&V>I&^‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'2q½ï“8‡Zdbä$§ÈÄÈI&N‘‰‘“L\"+_$—ÈÄÊÈÄ?üg¨ß÷Éj‘‰‘j‘‰‘/j‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰•o’‰[dâþ“8†Zdbä$ÈÄÊ/ÉÄ+2qÿ|ŸÄ9Ô"#'™8E&V>I&^‘‰•_’‰Wdbådâ™9ÉÄ'2qÿ|ŸÄ9Ô"#'™8E&FN2qŠLŒœdâ™Xù"™¸D&þæö8‡Zdbä†Zdb䓆Zdb䛆Zdbä—†Zdbå‹dâ™9ÉÄ%21r’‰[dbå›d♸œÄ1Ô"#'™xD&V~I&^‘‰»}ŸÄ9Ô"#'™8E&V>I&^‘‰•_’‰Odbådâ™9ÉÄ'2q·ï“8‡Zdbä$§ÈÄÈI&N‘‰•/’‰Kdbä$—ÈÄßüÏçP‹LŒ|ÐP‹LŒ|ÑP‹LŒüÐP‹LŒœdb™Xù"™¸D&FN2q‰L¬|“LÜ"#'™¸E&î'q µÈÄÈI&^‘‰•_’‰Wdâîß'qµÈÄÈI&N‘‰•O’‰Wdbådâ™9ÉÄ'21r’‰Odâîß'qµÈÄÈI&N‘‰‘“L\"+_$—ÈÄÈI&.‘‰»ŸÄ9Ô"#Ÿ4Ô"#ß4Ô"#¿4Ô"+o$›ÈÄÊÉÄ%21r’‰[dbå›dâ™9ÉÄ-2q8‰c¨E&V~I&^‘‰‘“L¼"÷ø>‰s¨E&FN2qŠL¬|’L|"+$ŸÈÄÈI&>‘‰‘ƒL\?"÷ø>‰s¨E&FN2qŠL¬|‘L\"#'™¸D&FN2q‰LÜãû$Ρ™ù¢¡™ù¡¡™9ÉÄ&2±òF2±‰L¬|‘L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"÷„“¸†úŠL¬ü’L¼"#'™xE&îù}çP‹LŒœdâ™Xù$™øD&VþH&>‘‰‘“L|"ó¿{C-2±òI2qŠLŒœdâ™Xù"™¸D&FN2q‰LŒœd♸ç÷IœC-21òMC-21òKC-2±òF2±‰LŒœdb™Xù"™¸E&V¾I&n‘‰‘“LÜ"#'™¸E&î'q µÈÄÈI&^‘‰‘“L¼"÷ú>‰s¨E&FN2qŠL¬|’L|"+$ŸÈÄÈA&þ™à?Cý+Ô~ µÈÄÊ'ÉÄ)2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdâ^ß'qµÈÄÈ µÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰{ÃIC-21r’‰Wdbä$ŸÈĽ¿Oâj‘‰•O’‰Sdbä$ŸÈÄÊÉÄ'21òMC-2ñ7ÿ»Ç1Ô"+Ÿ$—ÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰{ŸÄ9Ô"#¿4Ô"+o$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&î'q µÈÄÈI&^‘‰•?’‰Odâ>ß'q õ™Xù$™8E&FN2ñ‰L¬ü‘L|"#?4Ô"ó¿{C-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbä$·ÈÄ}¾Oâj‘‰‘“Ll"+o$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&î 'q µÈÄÈI&^‘‰•?’‰Odâoþ÷½s µÈÄÈI&N‘‰‘“L|"+$ŸÈÄÈ/ µÈÄßüïÇP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™Xù&™¸E&îû}çP‹L¬¼‘Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ#2q?8‰c¨E&FN2ñŠL¬ü‘L|"÷û>‰s¨E&FN2qŠL¬|‘L|"+$ŸÈÄÈ µÈÄßüïÇP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™Xù&™¸E&î÷}ÇP7‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"+?$ÈÄó'q µÈÄÈI&^‘‰•?’‰Odâùù>‰s¨E&FN2q‰L¬|‘L|"+$ŸÈÄßüï³j‘‰‘oj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄßüÏçP‹LŒœdb™9ÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$ÈÄÊÉÄ#2ñ48‰c¨E&FN2ñŠL¬ü‘L|"Oû>‰s¨E&FN2q‰L¬|‘L|"+ ÿLðŸ¡nðl#†Zdb䇆Zdbå‹dâ™9ÉÄ%21r’‰Kdbå›dâ™9ÉÄ-2ñ7ÿ³Ç9Ô"#'™ØD&FN2±‰LŒœdb™9ÉÄ.2±òM2q‹LŒœdâ™Xù!™xD&FN2ñˆL<Nâj‘‰‘“L|"+$ŸÈÄÓ¿Oâj‘‰‘“L\"+_$ŸÈÄßüïIC-21òNC-21òKC-2±òE2q‰LŒœdâ™9ÉÄ-2±òM2q‹LŒœdâ™xú÷IœC-21r’‰Mdbä$›ÈÄÈI&6‘‰•w’‰]dbå›dâ™9ÉÄ#2±òC2ñˆLŒœdâ™xœÄ1Ô"+$ŸÈÄÈI&>‘‰g|ŸÄ9Ô"#'™¸D&V¾@&þ}ÉüïP8‰c¨E&F>h¨E&FN2±‰L¬|‘L\"#'™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&žñ}çP‹LŒœdb™9ÉÄ&21r’‰]dbådb™Xù&™¸E&V~H&‘‰‘“L<"#'™xD&ž 'q õ™Xù#™øD&FN2ñ‰L<óû$Ρ™9ÉÄ%2±òµh¨E&ž 'q µÈÄÈ' µÈÄÊÉÄ&2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LŒœdâ™xæ÷IœC-21r’‰Mdbä$›ÈÄÊ;ÉÄ.21r’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™xœÄ1Ô"#'™øD&FN2ñ‰L<ëû$Ρ™9ÉÄ%2±òµi¨E&ž'q µÈÄÈI&6‘‰•7’‰Mdbå‹dâ™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2ñ¬ï“8‡Zdbä$›ÈÄÈI&v‘‰•w’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰gÃIC-21r’‰Odbä çÈij¿Oâj‘‰•/’‰Kdb䇆ZdâÙpÇP‹LŒœdb™Xy#™ØD&V¾H&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"Ïþ>‰s¨E&FN2±‰L¬¼“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™xœÄ1Ô"#'™øD&þæö8‡Zdbå“dâ™Xù"™¸D&F~i¨E&ž'q µÈÄÈI&6‘‰•7’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄÈI&‘‰ç|ŸÄ9Ô"#'™ØE&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL<Nâj‘‰‘“L|"ó?{œC-2±òE2q‰LŒœdâ™ù£¡™x.œÄ1Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"+?$ÈÄs¿Oâj‘‰•w’‰]dbä$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xE&ž'q µÈÄÈI&>‘‰¿ùŸ=Ρ™Xù"™¸D&FN2q‰L¬|ÿÐP‹L<Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&‘‰•’‰Gdâyß'q u™Xy'™ØE&FN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#2±òK2ñŠL¼?pÇP‹LŒœdâ™ø›ÿÙãj‘‰•/’‰Kdbä$·ÈÄÊw£¡™xà$Ž¡™Xy#™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™Xù!™xD&þæö8‡Zdbä$»ÈÄÈI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xE&V~I&^‘‰·ÁIC-21r’‰Odâoþgs¨E&V¾H&.‘‰‘“LÜ"+߆Zdâmp×P7‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÊÉÄ#21r’‰Gdâoþgs¨E&FN2±‹LŒœdb™9ÉÄ.21r’‰Cdbå‡dâ™9ÉÄ#2±òK2ñŠLŒœdâ™x;œÄ1Ô"#™øÏgÂÿ õ/îûY4Ô"+_$—ÈÄÈI&n‘‰•ïAC-2ñ7ÿ{ÇP‹LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ#2±òC2ñˆLŒœdâ™xû÷IœC-21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Cdbå‡dâ™9ÉÄ+2±òK2ñŠLŒœdâ™xœÄ1Ô"ó?Ï6r¨E&F¾i¨E&V¾H&.‘‰‘“LÜ"+ß$›ÈÄßüïIC-21r’‰Mdbä$»ÈÄÊ7ÉÄ-21r’‰[dbå‡dâ™9ÉÄ#21r’‰Gdâß'qµÈÄÈI&v‘‰‘“Lì"#'™8D&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdâpÿõß—Ìÿõü~¶‘C-21òCC-2±òE2q‰LŒœdâ™Xù&™ØD&Þ 'q µÈÄÈI&6‘‰•w’‰]dbå›dâ™9ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ#2ñÎï“8‡Zdbä$»ÈÄÈI&v‘‰•’‰Cdbä$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ+2ñ.8‰c¨E&FÞi¨E&F~i¨E&V¾H&.‘‰‘“LÜ"+ß$›ÈÄ»à$Ž¡™9ÉÄ.2±òN2±‹L¬|“LÜ"+?$ÈÄÈI&‘‰‘“L<"#'™xD&Þõ}çP‹LŒœdb™9ÉÄ!2±òA2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñn8‰c¨E&F>h¨E&FN2±‰L¬|‘L\"+ß$·ÈÄÈI&6‘‰wÃIC-21r’‰]dbådb™Xù&™xD&V~H&‘‰‘“L<"#'™xD&FN2ñˆL¼ûû$Ρ™9ÉÄ.2±òA2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdâ=pÇP‹LŒ|ÒP‹L¬¼‘Ll"+_$·ÈÄÊ7ÉÄ-21r’‰Mdâ=pÇP‹LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆLŒœdâ™xÏ÷IœC-21r’‰Cdbåƒdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄ{á$Ž¡™ù¢¡™Xy#™ØD&V¾I&n‘‰‘“LÜ"#'™ØD&Þ 'q µÈÄÈI&v‘‰•w’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄÊ/ÉÄ+2ñÞï“8‡Zdbåƒdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&>‘‰÷ÁIC-21òMC-2±òF2±‰L¬|“LÜ"#'™¸E&V~H&6‘‰÷ÁIC-21r’‰]dbådb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ+2±òK2ñŠL¼ïû$Ž¡"+$‡ÈÄÈI&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&VþH&>‘‰ïNâj‘‰‘j‘‰•7’‰Mdbå›dâ™9ÉÄ#2±òC2±‰L|?pÇP‹L¬¼“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñŠL¬ü’L¼"ó?{œC-21r’‰Cdbä$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L|"+$ŸÈÄ×à$Ž¡™ù¥¡™Xy#™ØD&V¾I&n‘‰‘“L<"+?$›ÈÄ×à$®¡î"+ï$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄßüÏçP‹LŒœdâ™9ÉÄ!21r’‰Cdbä$§ÈÄÊ/ÉÄ+21r’‰Wdbådâ™9ÉÄ'2ñu8‰c¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&‘‰•’‰Mdâoþ÷$Ž¡™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Wdbå—dâ™9ÉÄ+2ñõï“8‡Zdbä$‡ÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÊ/ÉÄ+21r’‰Odbådâ™9ÉÄ'2ñ 8‰c¨E&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&‘‰•’‰]dâoþ÷$Ž¡™9ÉÄ.21r’‰Cdbå‡dâ™9ÉÄ#2±òK2ñŠLŒœdâ™9ÉÄ+2ñï“8‡Zdbä$‡ÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÊ/ÉÄ+2±òG2ñ‰LŒœdâ™9ÉÄ'2ñM8‰k¨›ÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ#2±òC2±‹L|Nâj‘‰‘“Lì"+$‡ÈÄÊÉÄ#21r’‰Wdbå—dâ™9ÉÄ+21r’‰Wdâ›ß'qµÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰•_’‰Odbådâ™9ÉÄ'21r’‰Odâ[pÇP‹LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™Xù!™ØE&¾'q µÈÄÈI&‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñ­ï“8‡Zdbä$‡ÈÄÈI&N‘‰•O’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰oÃIC-21r’‰Mdbä$»ÈÄÊ7ÉÄ-2±òC2ñˆLŒœdb™ø6œÄ1Ô"#'™8D&V>H&‘‰•’‰Wdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄ·¿Oâj‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&¾'q µÈÄÈI&6‘‰•w’‰]dbå›dâ™Xù!™xD&FN2±‹L|Nâj‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰‘“L|"ßù>‰s¨E&FN2qŠL¬|’Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™ø.œÄ1Ô"#'™ØD&VÞI&v‘‰•’‰Gdbä$ÈÄÈI&v‘‰ïÂIC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2±òG2ñ‰L|÷û$Ρ™Xù$™8E&FN2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r‰çGdâ{pÇP‹LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"+¿$»ÈÄ÷à$Ž¡™9ÉÄ!2±òA2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™Xù#™øD&¾÷}ÇPO‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"ó÷øŸ¡f™øÿè¿'q 5ËÄÌI&6–‰‘w’‰ebä‡dâa™˜9ÉÄË21òK2±³L¬üïICÍ21òA2q°LÌœdâ`™ù%™xY&fN2ñ²LÌœdâe™˜9ÉÄÇ21òG2ñ±L¬üÏçP³LÌœdâd™˜9ÉÄÉ21s’‰“ebæ$'ËÄÈÉÄÇ21s’‰ebæ ÿ™à?C]ù¿{üÏPwê'q õ‘¡nßÏ6r¨Ÿ õoÞI&ö%CݾOâê)CÝà}] u“¡þÍ/ÉÄ~e¨œÄ5ÔãG†ºÁ³ê-C]9ÉÄqe¨Û÷IœC½d¨Û÷IœC}d¨Û÷IœCýd¨Û÷o9Ô]†ºr’‰oÊP·ï“8‡ºËP·ï‡9ÔS†º}þJüÏPoêöuÿ;ÔW†ºr’‰ëG†º}ŸÄ9ÔG†º}žÄÿ õ“¡nŸ'ñ?CÝd¨+ï4ÔC†ºÃIC}e¨û÷³êþ#Cý›w’‰}ËP÷ï“8‡zÉPwx_CÝe¨óK2±?ê'q u“¡îðl#†úÈPWN2q<êþ}çPoêþ}çP_êþ}ÇP¿êþýÛEõ¡®œdâ[2Ôýû$Ρ2ÔýûáDõ’¡îŸ¿ÿ3ÔG†ºÄÿõ“¡þÍÉÄÕd¨û÷IœC}e¨ûçICýçWâ?CÝ?O↺ËPW>h¨§ õ€“8†úÉPïg9ÔM†ºr’‰ýÈPï“8‡zËPx_C=d¨óK2qüÈP8‰c¨» õ€g1ÔW†ºr’‰óG†z|ŸÄ9ÔG†z|ŸÄ9ÔO†z|ŸÄ9ÔM†z|ÿv‘C=e¨+'™ø¶ õø>‰s¨§ õø~8‘C½e¨Çç¯Äÿ õ•¡_'ñ?C½~d¨óE2quêñ}çP?êñyÿ3ÔM†z|žÄÿ õ¡®|ÒP/ê 'q uÿ‘¡žßÏ6r¨» uå$û•¡žß'qõ‘¡žð¾.†zÊPÿæ—dâh2ÔNâê!C=áÙF õ“¡þÍ'ÉÄÙd¨ç÷IœC}e¨ç÷ICý~d¨ç÷IœCÝe¨ç÷o9ÔK†ºr’‰ïÈPÏï“8‡zÉPÏï‡9ÔG†z~þJüÏP?êùuÿ;ÔM†ºr’‰kÈPÏ†úüüÈPÏÏ“øŸ¡î2Ôóó$þg¨§ u勆zËP/8‰c¨› õú~¶‘C=d¨+'™ØŸ õú>‰s¨¯ õ‚÷u1ÔK†ú7¿$G—¡^pÇPOêÏ6j¨ç õo>I&Î.C½¾Oâê'C½¾Oâê&C½¾Oâê!C½¾»È¡Þ2Ô•“L|W†z}ŸÄ9Ô[†z}?œÈ¡¾2ÔëóWâêõ#C½¾N⇺ËPWN2qMêõ}çP7êõyÿ3ÔC†z}žÄÿ õ’¡®|ÓPê 'q u—¡ÞßÏ6r¨§ uå$Ç õþ>‰s¨Ÿ õ†÷u1Ô[†ºr’‰cÈPo8‰c¨— õ†g1ÔM†ú7Ÿ$ç¡Þß'q õû‘¡Þß'qu—¡Þß'qõ”¡Þß¿]äPêÊI&¾'C½¿Oâê#C½¿NäP?êýù+ñ?CÝd¨÷×IüïPêÊI&®%C½¿Oâê.C½?Oâ†zÊPïÏ“øŸ¡Þ2Ô•ê+C}à$Ž¡2ÔçûÙFõ’¡þÍÉÄÑd¨Ï÷IC}d¨¼¯‹¡>2Ô•“LS†úÀIC½e¨<Ûˆ¡î2Ô¿ù$™8§ õù>‰s¨› õù>‰s¨‡ õù>‰s¨— õùþí"‡úÊPW2qÿüÈPŸï“8‡úÊPŸï‡1ÔëG†ú|þJüÏPwêóuÿ;ÔS†ºr’‰kËPŸï“8‡zÈPŸÏ“øŸ¡^2Ôçó$þg¨ uå—†úÉP_8‰c¨§ õý~¶‘C½e¨óA2qtêû}çP7ê ïëb¨¯ uå$Ç’¡¾pÇPê Ï6b¨‡ õo>I&Î%C}¿Oâê.C}¿Oâê)C}¿Oâê-C}¿»È¡~2Ô¿Äì燆ºÉPßï“8‡úÉPßï‡9ÔM†ú~þJüÏPêûuÿ;ÔK†ºr’‰ëÈPßï“8‡zÊPßÏ“øŸ¡Þ2Ô÷ó$þg¨¯ uå$Û õƒ“8†zÉP¿ïg9ÔG†ú7$Ç¡~ß'qu—¡~ð¾.†úÉPÿædâØ2ÔNâê+CýàÙF õ”¡þÍ'ÉĹe¨ß÷IœC=d¨ß÷IœC½d¨ß÷IœC}d¨ß÷o5Ô&øÏPÿ µŸFCÝe¨ß÷IC½~d¨ß÷Éê.Cý>%þg¨§ õû:‰ÿê-C]9ÉÄue¨ß÷IœC½d¨ßçIüÏPê÷yÿ3ÔO†ú7o$›ÈÄö'q µÈÄÈI&v‘‰•’‰Cdbå—dâ™9ÉÄ'2±òG2qˆLl?pÇP‹L¬|’Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&Fþh¨E&þæû§ÓP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™9ÉÄ%2±ý|ŸÄ9Ô"#?4Ô"#'™ØD&VÞH&6‘‰­ÁIC-21r’‰]dbåƒdâ™Xù%™xE&FN2ñ‰L¬ü‘L"[ƒ“¸†zŠL¬|’Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&þæçj‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"#'™¸E&¶ö}çP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&¶'q µÈÄÈI&‘‰•’‰Cdbå—dâ™9ÉÄ'2±òG2qˆLüÍÿžÄ1Ô"#'™8E&FN2qŠL¬ü‘L|"#'™øD&F2ñÏÿêþýÛEµÈÄÈ' µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰•o’‰[dbëß'qµÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄ6à$Ž¡™Xù ™8D&FN2qˆL¬ü’L¼"#'™øD&VþH&N‘‰¿ùß“8†Zdbä$§ÈÄÈI&.‘‰•?’‰Odbä$ŸÈÄßüÏçP‹LŒ¼ÓP‹LŒ|ÑP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™Xù&™¸E&¶ñ}çP‹L¬¼‘Ll"#'™ØD&FN2±‰LlNâê!2±òA2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘Lœ"Û„“8†Zdbä$§ÈÄÊÉÄ%2±òG2ñ‰LŒdâßnÿõü>‰s¨E&F>h¨E&F¾i¨E&V¾H&.‘‰‘“L\"#'™¸D&V¾I&n‘‰‘“LÜ"Ûü>‰c¨›ÈÄÊÉÄ&21r’‰Mdbä$›ÈĶà$Ž¡™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ'2±òG2qŠLl Nâj‘‰‘“L\"+_$—ÈÄÊÉÄ'2ñ7ÿÏ‹ãj‘‰‘wj‘‰‘Oj‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&n‘‰•o’‰[dbä$·ÈÄßüïÇP‹LŒœdb™9ÉÄ&21r’‰MdbÛpÇP‹LŒœdâ™9ÉÄ)2±òK2ñŠL¬ü‘L|"#'™8E&¶ 'q µÈÄÈI&.‘‰•/’‰Kdbå¾ ýˆLüÍÿó⸆Zdb䃆Zdb䋆Zdbä—†Zdbå‹dâ™9ÉÄ%2±òM2q‹LŒœdâ™9ÉÄ-2ñ7ÿ»Ç1Ô"#'™ØD&FN2±‰LŒœdb™ØœÄ1Ô"#'™8D&V>I&N‘‰•_’‰Odbådâ™9ÉÄ)2±8‰c¨E&FN2q‰L¬|‘L\"ó¿è#†Zdbä†Zdb䓆Zdb䛆Zdbä$›ÈÄÊÉÄ%21r’‰[dbå›dâ™9ÉÄ-21r’‰[dâoþwc¨E&FN2±‰LŒœdb™9ÉÄ&2±]8‰c¨E&FN2qˆL¬|’Lœ"+$ŸÈÄÈI&>‘‰‘“Lœ"Û…“8†Zdbä$—ÈÄÊÉÄ%2±Ýï“8‡Zdb䃆Zdb䋆Zdb䇆Zdbådb™Xù"™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LüÍÿîq µÈÄÈI&6‘‰‘“Ll"#'™ØE&¶'q µÈÄÈI&‘‰•O’‰Sdbådâ™9ÉÄ'2ñ7_?$§ÈÄÊ'ÉÄ)21r’‰Kdbå‹dâ™ØÞ÷IœC-21òIC-21òMC-21r’‰Mdbådb™Xù"™¸E&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹Llïû$Ρ™9ÉÄ&21r’‰Mdbådb™Øà$Ž¡™9ÉÄ!2±òI2qŠL¬ü‘L|"#™øg‚ÿêß|ýLœ"+Ÿ$§ÈÄÊÉÄ%21r’‰Kdbÿù>‰s¨E&F¾h¨E&F~h¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&FN2q‹Lì?ß'qµÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÞà$Ž¡™9ÉÄ!2±òI2qŠL¬ü‘L|"#_4Ô"óõC2qŠL¬|’L\"+_$—ÈÄÈI&.‘‰½}ŸÄ9Ô"#ß4Ô"#¿4Ô"+o$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"#§oÐGdboß'qµÈÄÈI&6‘‰•w’‰]dbä$»ÈÄÞá$Ž¡™9ÉÄ)2±òI2qŠL¬ü‘L|"#ß4Ô"óõC2qŠL¬|‘L\"#'™¸D&FN2q‰Lìýû$Ρ™ù¡¡™9ÉÄ&2±òF2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2±òCß ÈÄÞ¿Oâj‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰}ÀIC-2±òI2qŠLŒœdâ™Xù#™øD&F~h¨E&þæë‡dâ™Xù"™¸D&FN2q‰LŒœdâ™ØÇ÷IœC-21òKC-2±òF2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰Gdb凾A‘‰}|ŸÄ9Ô"+ï$»ÈÄÈI&v‘‰‘“Lì"û„“¸†zŠL¬|’Lœ"#'™8E&VþH&>‘‰‘_j‘‰¿ùú!™¸D&V¾H&.‘‰‘“L\"+ß$·ÈÄ>¿Oâj‘‰‘“Ll"+o$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"+?$ÈÄÈéô™Øç÷ICÝE&VÞI&v‘‰‘“Lì"#'™ØE&ö'q µÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈ µÈÄß|ýL\"+_$—ÈÄÈI&n‘‰•o’‰[db_ß'qµÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&‘‰•’‰Gdbäô úˆLüÍÿîq µÈÄÈI&v‘‰‘“Lì"#'™ØE&ö 'q µÈÄÈI&N‘‰‘“L\"+$ŸÈÄßüïûºj‘‰‘“L\"+_$—ÈÄÈI&n‘‰•o’‰[dbßß'qüÇ5‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰•’‰Gdbä$ÈÄÈéô™ø›ÿÝãj‘‰‘“Lì"#'™ØE&FN2±‹LìNâj‘‰‘“Lœ"+_$—ÈÄÊÈÄ?üg¨¼¯‹¡™9ÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&þæÑG µÈÄÈI&6‘‰‘“Ll"#'™ØD&FN2±‹L¬|“LÜ"#'™xD&V~H&‘‰‘“L<"#§oÐGdâoþwc¨E&FN2±‹LŒœdb™9ÉÄ.2±_8‰c¨E&FN2qŠL¬|‘L\"ó¿ïc¨E&FÞi¨E&FN2q‰L¬|‘L\"#'™¸E&V¾I&n‘‰ý~ŸÄ9Ô"#'™ØD&FN2±‰LŒœdb™Xy'™ØE&V¾I&n‘‰•’‰Gdbä$ÈÄÈI&‘‰‘Ó7è#2ñ7ÿ»Ç1Ô"#'™ØE&FN2±‹LŒœdâ™ØœÄ1Ô"#'™8E&V¾H&.‘‰ý}ŸÄ9Ô"#4Ô"+o$—ÈÄÊÉÄ%21r’‰[dbå›dâ™Øß÷IœC-21r’‰Mdbä$›ÈÄÈI&v‘‰•w’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™9}ƒ>"ûû>‰s¨E&FN2±‹LŒœdb™Xù ™8D&Ž8‰c¨E&FN2qŠL¬|‘L\"ÇÏ÷IœC-21r’‰Mdbådâ™Xù"™¸D&V¾I&n‘‰‘“LÜ"ÇÏ÷IœC-21r’‰Mdbä$›ÈÄÈI&v‘‰•w’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄÈéô™8~¾Oâj‘‰‘“Lì"#'™8D&V>H&‘‰£ÁIC-21r’‰Sdbå‹dâ™8Ú÷IœC-21r’‰Mdbådâ™Xù"™¸E&V¾I&n‘‰‘“LÜ"Gû>‰s¨E&FN2±‰LŒœdb™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™9}ƒ¾"Gû>‰s¨E&FN2±‹L¬|L"#'™8D&Ž'q µÈÄÈI&.‘‰•/’‰Kdâèß'qµÈÄÈI&6‘‰•7’‰Kdbå›dâ™9ÉÄ-21r’‰[dâèß'qµÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"+¿ô úŠLýû$Ρ™9ÉÄ!2±òA2qˆLŒœdâ™8œÄ1Ô"+_$—ÈÄÈI&.‘‰c|ŸÄ9Ô"#'™ØD&VÞH&n‘‰•o’‰[dbä$·ÈÄÈI&‘‰c|ŸÄ9Ô"#'™ØD&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñŠL¬üÒ7è+2qŒï“8‡Zdbåƒdâ™9ÉÄ!21r’‰Cdâ˜p×P/‘‰•/’‰Kdbä$—ÈÄ1¿Oâj‘‰‘“Ll"+o$·ÈÄÊ7ÉÄ-21r’‰[dbå‡dâ™8æ÷IœC-21r’‰]dbådb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbå—dâ™9}ƒ¾"Çü>‰c¨‡ÈÄÊÉÄ!21r’‰Cdbä$‡Èıà$Ž¡™9ÉÄ%21r’‰KdâXß'qµÈÄÈI&6‘‰•7’‰[dbå›dâ™9ÉÄ#2±òC2ñˆLëû$Ρ™Xy'™ØE&FN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ+2±òK2ñŠLŒœ¾A_‘‰¿ùß=Ž¡™9ÉÄ!21r’‰Cdbä$‡Èıá$Ž¡™9ÉÄ%21r’‰[dâØß'qµÈÄÊÉÄ&21r’‰[dbå›dâ™9ÉÄ#2±òC2ñˆLûû$Žÿ¸.2±òN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#2±òK2ñŠLŒœdâ™9}ƒ¾"ó¿{C-21r’‰Cdbä$‡ÈÄÈI&‘‰ãÀIC-21r’‰Kdbå›dâ™8Î÷ICÝD&VÞH&6‘‰‘“LÜ"+ß$·ÈÄÈI&‘‰•’‰Gdâoþ}ÄP‹LŒœdb™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ#21r’‰Wdbå—dâ™9ÉÄ+21rú}E&þæ÷8†Zdbä$‡ÈÄÈI&‘‰‘“L"Ç…“8†Zdbä$—ÈÄÊ7ÉÄ-2ñ7ÿûÞ9†Zdbä$›ÈÄÈI&n‘‰•o’‰[dbä$ÈÄÊÉÄ#2qÜï“8‡Zdbä$»ÈÄÈI&v‘‰‘“Lì"+$‡ÈÄÊÉÄ#2±òK2ñŠLŒœdâ™9ÉÄ+21rú}E&þæ÷8†Zdbä$‡ÈÄÈI&‘‰‘“Lœ"ǃ“8†Zdbä$—ÈÄÊ7ÉÄ-2q¼ï“8‡Zdbä$›ÈÄÊ;ÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&Ž÷}çP‹LŒœdb™9ÉÄ.21r’‰Cdbåƒdâ™Xù!™xE&V~I&^‘‰‘“L¼"#'™xE&FNß ¯ÈÄñ¾Oâj‘‰‘“L"#'™8D&V>I&N‘‰óNâj‘‰‘“L\"+ß$·ÈÄùó}çP‹LŒœdb™Xy'™¸E&V¾I&n‘‰•’‰Gdbä$ÈÄùó}çP‹LŒœdb™9ÉÄ.21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+21rú}E&Οï“8‡Zdbä$‡ÈÄÈI&N‘‰•O’‰SdâlpÇP‹LŒœdâ™Xù&™¸E&Îö}çP‹LŒœdb™Xy'™¸E&V¾I&‘‰•’‰Gdbä$ÈÄÙ¾Oâj‘‰‘“Lì"#'™ØE&V>H&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&FNß ŸÈÄÙ¾Oâj‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰³ÃIC-21r’‰[dbå›dâ™8û÷IœC-21r’‰]dbådâ™Xù!™xD&FN2ñˆLŒœdâ™8û÷IœC-21r’‰]dbä$‡ÈÄÊÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄÊ}ƒ~"gÿ>‰s¨E&FN2qŠL¬|’Lœ"#'™8E&Î'q µÈÄÊ7ÉÄ-21r’‰[dâß'qµÈÄÈI&v‘‰•w’‰Gdbå‡dâ™9ÉÄ#21r’‰Wdâß'qµÈÄÈI&v‘‰•’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L|"+ô ú‰Lœãû$Ρ™Xù$™8E&FN2qŠLŒœdâ™8'œÄ5Ô[dbå›dâ™9ÉÄ-2qÎï“8‡Zdbä$»ÈÄÊ;ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Îù}çP‹LŒœdâ™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™Xù#™øD&FNß ŸÈÄ9¿Oâê)2±òI2qŠLŒœdâ™9ÉÄ)2q.8‰c¨E&FN2q‹LŒœdâ™8×÷IœC-21r’‰]dbådâ™Xù!™xD&FN2ñŠL¬ü’L¼"çú>‰s¨E&V>H&‘‰‘“L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñ‰L¬ü‘L|"#§oÐOdâoþwc¨E&FN2qŠLŒœdâ™9ÉÄ)2qn8‰c¨E&FN2q‹LŒœdâ™8÷÷IœC-2±òN2±‹LŒœdâ™Xù!™xD&FN2ñŠL¬ü’L¼"çþ>‰ã?nˆL¬|L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠL¬ü‘L|"#'™øD&FNß ŸÈÄßüïÇP‹LŒœdâ™9ÉÄ)21r’‰Sd⑉•?’‰Odbä$ŸÈÄÈI&>‘‰‘Ó7è'2q¾ï“8‡Zdbä$§ÈÄÈI&N‘‰•/’‰Kdâú“8†Zdbä$·ÈÄÊÉÄ#2qý|ŸÄ9Ô"#'™8D&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+2qý|ŸÄ9Ô"#'™8D&FN2qˆLŒœdâ™Xù$™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰LŒœ¾A?‘‰ëçû$Ρ™9ÉÄ)21r’‰Kdbå‹d♸œÄ1Ô"#'™¸E&V~H&‘‰«}ŸÄ9Ô"#'™8D&V>H&‘‰•’‰Wdbå—dâ™9ÉÄ+2qµï“8‡Zdbä$‡ÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰‘Ã7èó#2qµï“8‡Zdbä$§ÈÄÊÉÄ%21r’‰KdâêpÇP‹LŒœdâ™Xù!™xD&®þ}çP‹LŒœdâ™Xù ™xD&V~I&^‘‰‘“L¼"#'™xE&®þ}çP‹LŒœdâ™9ÉÄ)2±òI2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'2ñ7ÿ»Ç1Ô"+Ÿ$§ÈÄÈI&.‘‰•/’‰Kdbä$—ÈÄ5à$Ž¡™Xù!™xD&FN2ñˆL\ãû$Ρ™9ÉÄ!2±òA2ñŠL¬ü’L¼"#'™xE&FN2ñ‰L\ãû$Ρ™9ÉÄ!2±òI2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r‰'ø|þñ÷8†Zdbå“dâ™Xù"™¸D&FN2q‰LŒœd♸&œÄ5ÔGdbå‡dâ™9ÉÄ#2qÍï“8‡Zdbä$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&®ù}çP‹LŒœdâ™Xù$™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™ø›ÿ³ÇÿµÈÄÈ; µÈÄÊ'ÉÄ%2±òE2q‰LŒœdâ™9ÉÄ%2q-8‰c¨E&FN2ñˆLŒœd♸Ö÷IœC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"×ú>‰s¨E&V>I&N‘‰‘“Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&F2ñÏIüg¨××IüïP‹LŒ|ÐP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸6œÄ1Ô"#'™xD&FN2ñŠL\ûû$Ρ™Xù ™8D&FN2ñŠL¬ü’L¼"#'™øD&VþH&>‘‰kŸÄ1ÔSdbå“dâ™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odâoþïÿ3Ô"#ï4Ô"#Ÿ4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&®'q µÈÄÈI&‘‰•_’‰Wdâ:ß'q õ™Xù ™8D&FN2ñŠL¬ü’L¼"#'™øD&VþH&>‘‰¿ù_ôC-21r’‰Sdbä$§ÈÄÈI&N‘‰‘“L\"+$ŸÈÄÈA&þ;Á‡ú|þJüÏP‹LŒ|ÐP‹LŒ|ÑP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸.œÄ1Ô"#'™xD&V~I&^‘‰¿ùß÷Î1Ô"#'™8D&FN2ñŠL¬ü’L¼"#'™øD&VþH&>‘‰ë~ŸÄ9Ô"#'™8E&FN2qŠLŒœdâ™Xù"™¸D&VþH&>‘‰¿ùŸŸ(r¨E&FÞi¨E&F>i¨E&F¾i¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‹L\Nâj‘‰‘“L<"+¿$¯ÈÄõ¾Oâj‘‰‘“L"+Ÿ$¯ÈÄÊ/ÉÄ+21r’‰Odbåd♸Þ÷IœC-21r’‰Sdbä$§ÈÄÈI&.‘‰•/’‰Kdbåd⟠þ3ÔïûáDµÈÄÈ µÈÄÈ µÈÄÈ µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÊ7ÉÄ-2qÿÀIC-21r’‰Gdbå—d♸¾Oâj‘‰‘“Lœ"+Ÿ$¯ÈÄÊ/ÉÄ+2±òG2ñ‰LŒœd♸¾Oâj‘‰‘“Lœ"#'™8E&FN2q‰L¬|‘L\"ó?{œC-21òNC-21òIC-21òMC-21òKC-2±òE2q‰LŒœdâ™9ÉÄ-2±òM2q‹LÜ Nâj‘‰‘“L<"+¿$¯ÈÄݾOâj‘‰‘“Lœ"+Ÿ$¯ÈÄÊ/ÉÄ'2±òG2ñ‰LŒœd♸Û÷IœC-21r’‰Sdbä$§ÈÄÊÉÄ%21r’‰Kdâoþgs¨E&F>h¨E&F¾h¨E&F~h¨E&FN2±‰L¬|‘L\"#'™¸D&V¾I&n‘‰‘“LÜ"w‡“8†Zdbä$¯ÈÄÊ/ÉÄ+2q÷ï“8‡Zdbä$§ÈÄÊ'ÉÄ+2±òG2ñ‰LŒœdâ™9ÉÄ'2q÷ï“8‡Zdbä$§ÈÄÈI&.‘‰•/’‰Kdbä$—ÈÄÝ¿Oâj‘‰‘Oj‘‰‘oj‘‰‘_j‘‰•7’‰Mdbå‹dâ™9ÉÄ-2±òM2q‹LŒœd♸œÄ1Ô"+¿$¯ÈÄÈI&^‘‰{|ŸÄ9Ô"#'™8E&V>I&>‘‰•?’‰Odbä$ŸÈÄÈA&{|ŸÄ9Ô"#'™8E&V¾H&.‘‰‘“L\"#'™¸D&îñ}çP‹LŒ|ÑP‹LŒüÐP‹LŒœdb™Xy#™ØD&V¾H&.‘‰•o’‰[dbä$·ÈÄÈI&n‘‰{ÂI\C}E&V~I&^‘‰‘“L¼"÷ü>‰s¨E&FN2qŠL¬|’L|"+$ŸÈÄÈI&>‘‰¿ùß=Ž¡™Xù$™8E&FN2q‰L¬|‘L\"#'™¸D&FN2q‰LÜóû$Ρ™ù¦¡™ù¥¡™Xy#™ØD&FN2±‰L¬|‘LÜ"+ß$·ÈÄÈI&n‘‰‘“LÜ"÷‚“8†Zdbä$¯ÈÄÈI&^‘‰{}ŸÄ9Ô"#'™8E&V>I&>‘‰•?’‰Odbä ÿLðŸ¡þj?†Zdbå“dâ™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2q¯ï“8‡Zdb䇆Zdbä$›ÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈĽá$Ž¡™9ÉÄ+21r’‰OdâÞß'qµÈÄÊ'ÉÄ)21r’‰Odbådâ™ù¦¡™ø›ÿÝãj‘‰•O’‰Kdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈĽ¿Oâj‘‰‘_j‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"÷“8†Zdbä$¯ÈÄÊÉÄ'2qŸï“8†zŠL¬|’Lœ"#'™øD&VþH&>‘‰‘j‘‰¿ùß=Ž¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%21r’‰[dâ>ß'qµÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"÷…“8†Zdbä$¯ÈÄÊÉÄ'2ñ7ÿûÞ9†Zdbä$§ÈÄÈI&>‘‰•?’‰Odbä—†Zdâoþwc¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L¬|“LÜ"÷ý>‰s¨E&VÞH&6‘‰‘“Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœd♸œÄ1Ô"#'™xE&VþH&>‘‰û}ŸÄ9Ô"#'™8E&V¾H&>‘‰•?’‰Odbä†Zdâoþwc¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‹L¬|“LÜ"÷û>‰c¨›ÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰•’‰Gdâù“8†Zdbä$¯ÈÄÊÉÄ'2ñü|ŸÄ9Ô"#'™¸D&V¾H&>‘‰•?’‰Odâoþ÷ÙF µÈÄÈ7 µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&n‘‰•o’‰[dâoþgs¨E&FN2±‰LŒœdb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰Gdbå‡dâ™xœÄ1Ô"#'™xE&VþH&>‘‰§}ŸÄ9Ô"#'™¸D&V¾H&>‘‰•?‰&øÏP7x¶C-21òCC-2±òE2q‰LŒœdâ™9ÉÄ%2±òM2q‹LŒœdâ™ø›ÿÙãj‘‰‘“Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹L¬üL<"#'™xD&ž'q µÈÄÈI&>‘‰•?’‰Odâéß'qµÈÄÈI&.‘‰•/’‰Odâoþ÷$Ž¡™y§¡™ù¥¡™Xù"™¸D&FN2q‰LŒœdâ™Xù&™¸E&FN2q‹L<ýû$Ρ™9ÉÄ&21r’‰Mdbä$›ÈÄÊ;ÉÄ.2±òM2q‹LŒœdâ™Xù!™xD&FN2ñˆL<Nâj‘‰•?’‰Odbä$ŸÈÄ3¾Oâj‘‰‘“L\"+_ ÿ¾dþw¨œÄ1Ô"#4Ô"#'™ØD&V¾H&.‘‰‘“L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"Ïø>‰s¨E&FN2±‰LŒœdb™9ÉÄ.2±òN2±‹L¬|“LÜ"+?$ÈÄÈI&‘‰‘“L<"Ï„“¸†ú‰L¬ü‘L|"#'™øD&žù}çP‹LŒœdâ™XùZ4Ô"Ï„“8†Zdb䓆Zdbådb™Xù"™¸D&FN2q‹L¬|“LÜ"#'™¸E&FN2q‹L<óû$Ρ™9ÉÄ&21r’‰Mdbådb™9ÉÄ.2±òM2ñˆL¬üL<"#'™xD&FN2ñˆL< Nâj‘‰‘“L|"#'™øD&žõ}çP‹LŒœdâ™XùÚ4Ô"Ï‚“8†Zdbä$›ÈÄÊÉÄ&2±òE2q‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™xÖ÷IœC-21r’‰Mdbä$»ÈÄÊ;ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$Èijá$Ž¡™9ÉÄ'21r‰ëGdâÙß'qµÈÄÊÉÄ%21òCC-2ñl8‰c¨E&FN2±‰L¬¼‘Ll"+_$·ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰gŸÄ9Ô"#'™ØD&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL<Nâj‘‰‘“L|"ó?{œC-2±òI2q‰L¬|‘L\"#¿4Ô"Ï“8†Zdbä$›ÈÄÊÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dbä$ÈÄs¾Oâj‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&ž 'q µÈÄÈI&>‘‰¿ùŸ=Ρ™Xù"™¸D&FN2q‰LŒüÑP‹L<Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰•’‰Gdâ¹ß'qµÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L¼"σ“8†Zdbä$ŸÈÄßüÏçP‹L¬|‘L\"#'™¸D&V¾h¨E&ž'q µÈÄÈI&6‘‰•7’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$ÈÄÊÉÄ#2ñ¼ï“8†º‹L¬¼“Lì"#'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™Xù%™xE&Þ8‰c¨E&FN2ñ‰LüÍÿìqµÈÄÊÉÄ%21r’‰[dbå»ÑP‹L¼?pÇP‹L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2ñˆL¬üL<"ó?{œC-21r’‰]dbä$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L¼"+¿$¯ÈÄÛà$Ž¡™9ÉÄ'2ñ7ÿ³Ç9Ô"+_$—ÈÄÈI&n‘‰•ïNC-2ñ68‰k¨›ÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbå‡dâ™9ÉÄ#2ñ7ÿ³Ç9Ô"#'™ØE&FN2±‹LŒœdb™9ÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠL¼Nâj‘‰‘ƒLüç3á†ú÷ý,j‘‰•/’‰Kdbä$·ÈÄÊ÷ ¡™ø›ÿ=‰c¨E&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&FN2ñˆL¼ýû$Ρ™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠL¼Nâj‘‰¿ùŸg9Ô"#ß4Ô"+_$—ÈÄÈI&n‘‰•o’‰Mdâoþ÷$Ž¡™9ÉÄ&21r’‰]dbå›dâ™9ÉÄ-2±òC2ñˆLŒœdâ™9ÉÄ#2ñŽï“8‡Zdbä$»ÈÄÈI&v‘‰‘“L"+$‡ÈÄÊÉÄ#2±òK2ñŠLŒœdâ™9ÉÄ+2ñN8‰‡úïKæ‡z~?ÛÈ¡™ù¡¡™Xù"™¸D&FN2q‹L¬|“Ll"ï„“8†Zdbä$›ÈÄÊ;ÉÄ.2±òM2q‹LŒœdâ™Xù!™xD&FN2ñˆLŒœdâ™xç÷IœC-21r’‰]dbä$»ÈÄÊÉÄ!21r’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™xœÄ1Ô"#ï4Ô"#¿4Ô"+_$—ÈÄÈI&n‘‰•o’‰Mdâ]pÇP‹LŒœdb™Xy'™ØE&V¾I&n‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"ïú>‰s¨E&FN2±‹LŒœdâ™Xù ™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™x7œÄ1Ô"#4Ô"#'™ØD&V¾H&.‘‰•o’‰[dbä$›ÈÄ»á$Ž¡™9ÉÄ.2±òN2±‹L¬|“L<"+?$ÈÄÈI&‘‰‘“L<"#'™xD&Þý}çP‹LŒœdb™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñ8‰c¨E&F>i¨E&VÞH&6‘‰•/’‰[dbå›dâ™9ÉÄ&2ñ8‰c¨E&FN2±‹L¬¼“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&FN2ñŠL¼çû$Ρ™9ÉÄ!2±òA2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdâ½pÇP‹LŒ|ÑP‹L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰‘“Ll"ï…“8†Zdbä$»ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Gdbå—dâ™xï÷IœC-2±òA2qˆLŒœdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$ŸÈÄûà$Ž¡™ù¦¡™Xy#™ØD&V¾I&n‘‰‘“LÜ"+?$›ÈÄûà$Ž¡™9ÉÄ.2±òN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù%™xE&Þ÷}ÇP‘‰•’‰Cdbä$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"+$ŸÈÄ÷'q µÈÄÈ µÈÄÊÉÄ&2±òM2q‹LŒœdâ™Xù!™ØD&¾8‰c¨E&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xE&V~I&^‘‰¿ùŸ=Ρ™9ÉÄ!21r’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&>‘‰•?’‰OdâkpÇP‹LŒüÒP‹L¬¼‘Ll"+ß$·ÈÄÈI&‘‰•’‰Mdâkp×Pw‘‰•w’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÊ/ÉÄ+21r’‰Wdâoþgs¨E&FN2qˆLŒœdâ™9ÉÄ!21r’‰Sdbå—dâ™9ÉÄ+2±òG2ñ‰LŒœdâ™ø:œÄ1Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$ÈÄÊÉÄ&2ñ7ÿ{ÇP‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ+2±òK2ñŠLŒœdâ™øú÷IœC-21r’‰Cdbä$‡ÈÄÈI&‘‰•O’‰Sdbå—dâ™9ÉÄ'2±òG2ñ‰LŒœdâ™øœÄ1Ô"+o$›ÈÄÈI&6‘‰•o’‰[dbä$ÈÄÊÉÄ.2ñ7ÿ{ÇP‹LŒœdb™9ÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™øÆ÷IœC-21r’‰Cdbä$‡ÈÄÈI&N‘‰•O’‰Sdbå—dâ™Xù#™øD&FN2ñ‰LŒœdâ™ø&œÄ5ÔMdbådb™9ÉÄ&2±òM2q‹LŒœdâ™Xù!™ØE&¾ 'q µÈÄÈI&v‘‰•’‰Cdbå‡dâ™9ÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ+2ñÍï“8‡Zdbä$‡ÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÊ/ÉÄ'2±òG2ñ‰LŒœdâ™9ÉÄ'2ñ-8‰c¨E&FN2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üLì"ß‚“8†Zdbä$‡ÈÄÊÉÄ!2±òC2ñˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™øÖ÷IœC-21r’‰Cdbä$§ÈÄÊ'ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä$ŸÈÄ·á$Ž¡™9ÉÄ&21r’‰]dbå›dâ™Xù!™xD&FN2±‹L|Nâj‘‰‘“L"+$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰WdâÛß'qµÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"ß“8†Zdbä$›ÈÄÊ;ÉÄ.2±òM2ñˆL¬üL<"#'™ØE&¾'q µÈÄÈI&‘‰•’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄÈI&>‘‰ï|ŸÄ9Ô"#'™8E&V>I&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰L|Nâj‘‰‘“Ll"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$»ÈÄwá$Ž¡™9ÉÄ!2±òA2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™Xù#™øD&¾û}çP‹L¬|’Lœ"#'™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÈÄû#2ñ=8‰c¨E&FN2±‰L¬¼“Lì"+?$ÈÄÈI&‘‰•_’‰]dâ{pÇP‹LŒœdâ™Xù ™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñ‰L¬ü‘L|"ßû>‰c¨§ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰¿ù¿{üÏP³Lüôß“8†šebæ$ËÄÈ;ÉÄÎ21òC2ñ°LÌœdâe™ù%™ØY&Vþ÷$Ž¡f™ù ™8X&fN2q°LŒü’L¼,3'™xY&fN2ñ²LÌœdâc™ù#™øX&Vþgs¨Y&fN2q²LÌœdâd™˜9ÉÄÉ21s’‰“ebädâc™˜9ÉÄÇ21s‰ÿL🡮üß=þg¨» uƒ“8†úÈP·ïg9ÔO†ú7ï$û’¡nß'qõ”¡nð¾.†ºÉPÿæ—db¿2Ô Nâêñ#CÝàÙF õ–¡®œdâ¸2Ôíû$Ρ^2Ôíû$Ρ>2Ôíû$Ρ~2Ôíû·‹ê.C]9ÉÄ7e¨Û÷IœCÝe¨Û÷Éê)CÝ>%þg¨· uû:‰ÿê+C]9ÉÄõ#CݾOâê#CÝ>Oâ†úÉP·Ï“øŸ¡n2Ô•wê!CÝá$Ž¡¾2ÔýûÙF uÿ‘¡þÍ;Éľe¨û÷IœC½d¨;¼¯‹¡î2Ô¿ù%™ØŸ u‡“8†ºÉPwx¶C}d¨+'™8ž uÿ>‰s¨· uÿ>‰s¨¯ uÿ>‰c¨ß uÿþí"‡zÈPWN2ñ-êþ}çPêþýp"‡zÉP÷Ï_‰ÿê#CÝ¿Nâ‡úÉPÿæ‹dâj2Ôýû$Ρ¾2Ôýó$Ž¡þó+ñŸ¡îŸ'ñ?CÝe¨+4ÔS†zÀICýd¨Ç÷³ê&C]9ÉÄ~d¨Ç÷IœC½e¨¼¯‹¡2Ô¿ù%™8~d¨œÄ1Ô]†zÀ³ê+C]9ÉÄù#C=¾Oâê#C=¾Oâê'C=¾Oâê&C=¾»È¡ž2Ô•“L|[†z|ŸÄ9ÔS†z|?œÈ¡Þ2ÔãóWâ†úÊP¯“øŸ¡^?2Ô¿ù"™¸º õø>‰s¨Ÿ õø<‰ÿê&C=>Oâ†zÈPW>i¨— õ„“¸†ºÿÈPÏïg9Ô]†ºr’‰ýÊPÏï“8‡úÈPOx_C=e¨óK2q4ê 'q õ¡žðl#†úÉPÿæ“dâl2Ôóû$Ρ¾2Ôóû$Ž¡~?2Ôóû$Ρî2Ôóû·‹ê%C]9ÉÄwd¨ç÷IœC½d¨ç÷Éê#C=?%þg¨Ÿ õü:‰ÿê&C]9ÉÄ5d¨ç÷I\C}~d¨ççIüÏPwêùyÿ3ÔS†ºòEC½e¨œÄ1ÔM†z}?ÛÈ¡2Ô•“LìO†z}ŸÄ9ÔW†zÁûºê%Cý›_’‰£ËP/8‰c¨§ õ‚g5ÔóG†ú7Ÿ$g—¡^ß'qõ“¡^ß'qu“¡^ß'qõ¡^ß¿]äPoêÊI&¾+C½¾Oâê-C½¾NäP_êõù+qõú‘¡^_'ñ¿CÝe¨+'™¸¦ õú>‰s¨› õú<‰ÿê!C½>Oâ†zÉPW¾i¨ õ†“8†ºËPïïg9ÔS†ºr’‰ãG†zŸÄ9ÔO†zÃûºê-C]9ÉÄ1d¨7œÄ1ÔK†zóê&Cý›O’‰sÈPïï“8†úýÈPïï“8‡ºËPïï“8‡zÊPïïß.r¨ uå$ß“¡Þß'qõ‘¡Þß'r¨Ÿ õþü•øŸ¡n2Ôûë$þw¨‡ uå$×’¡Þß'qu—¡ÞŸ'ñ?C=e¨÷çIüÏPoêÊ õ•¡>pÇPêóýl#‡zÉPÿæƒdâh2Ôçû$Ž¡¾?2ÔÞ×ÅPêÊI&Ž)C}à$Ž¡Þ2ÔžmÄPwêß|’LœS†ú|ŸÄ9ÔM†ú|ŸÄ9ÔC†ú|ŸÄ9ÔK†ú|ÿv‘C}e¨+™x~~d¨Ï÷IœC}e¨Ï÷Éêõ#C}>%þg¨» õù:‰ÿê)C]9Éĵe¨Ï÷IœC=d¨ÏçIüÏP/êóyÿ3ÔG†ºòKCýd¨/œÄ1ÔS†ú~?ÛÈ¡Þ2Ô¿ù ™8º õý>‰s¨› õ…÷u1ÔW†ºr’‰cÉP_8‰c¨ õ…g1ÔC†ú7Ÿ$ç’¡¾ß'qu—¡¾ß'qõ”¡¾ß'qõ–¡¾ß¿]äP?ê_böóCCÝd¨ï÷IœCýd¨ï÷Éê&C}?%þg¨‡ õý:‰ÿê%C]9ÉÄud¨ï÷IœC=e¨ïçIüÏPoêûyÿ3ÔW†ºr’‰íG†úÁIC½d¨ß÷³ê#Cý›’‰cÈP¿ï“8‡ºËP?x_Cýd¨óG2qlê'q õ•¡~ðl#†zÊPÿæ“dâÜ2Ôïû$Ρ2Ôïû$Ρ^2Ôïû$Ρ>2Ôïû·‹ê?üg¨…ÚO£¡î2Ôïû$Ž¡^?2ÔïûáDu—¡~Ÿ¿ÿ3ÔS†ú}Äÿõ–¡®œdâº2Ôïû$Ρ^2Ôïó$þg¨ õû<‰ÿê'Cý›7’‰Mdbû“8†Zdbä$»ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™Xù#™8D&¶8‰c¨E&V>I&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#4Ô"óóÓi¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰LŒœdâ™Ø~¾Oâj‘‰‘j‘‰‘“Ll"+o$›ÈÄÖà$Ž¡™9ÉÄ.2±òA2qˆL¬ü’L¼"#'™øD&VþH&‘‰­ÁI\C=E&V>I&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"ó¿‡s µÈÄÈ µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰‘“LÜ"[û>‰s¨E&F~i¨E&VÞH&6‘‰‘“Ll"[‡“8†Zdbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™Xù#™8D&þæOâj‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#™øg‚ÿ uÿþí"‡Zdb䓆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈÄÊ7ÉÄ-2±õï“8‡Zdbä$›ÈÄÊÉÄ&21r’‰MdbpÇP‹L¬|L"#'™8D&V~I&^‘‰‘“L|"+$§ÈÄßüïIC-21r’‰Sdbä$—ÈÄÊÉÄ'21r’‰Odâoþgs¨E&FÞi¨E&F¾h¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‹L¬|“LÜ"Ûø>‰s¨E&VÞH&6‘‰‘“Ll"#'™ØD&¶ 'q õ™Xù ™8D&FN2qˆL¬ü’L¼"#'™øD&VþH&N‘‰mÂIC-21r’‰Sdbå‹dâ™Xù#™øD&F2ñï ·‡z~ŸÄ9Ô"#4Ô"#ß4Ô"+_$—ÈÄÈI&.‘‰‘“L\"+ß$·ÈÄÈI&n‘‰m~ŸÄ1ÔMdbådb™9ÉÄ&21r’‰Mdb[pÇP‹LŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™8E&¶'q µÈÄÈI&.‘‰•/’‰Kdbådâ™ø›ÿçÅq µÈÄÈ; µÈÄÈ' µÈÄÈ µÈÄÊÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-21r’‰[dâoþwc¨E&FN2±‰LŒœdb™9ÉÄ&2±m8‰c¨E&FN2qˆLŒœdâ™Xù%™xE&VþH&>‘‰‘“Lœ"Û†“8†Zdbä$—ÈÄÊÉÄ%2±òG_…~D&þæÿyq\C-21òAC-21òEC-21òKC-2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LŒœdâ™ø›ÿÝãj‘‰‘“Ll"#'™ØD&FN2±‰LlNâj‘‰‘“L"+Ÿ$§ÈÄÊ/ÉÄ'2±òG2ñ‰LŒœdâ™ØœÄ1Ô"#'™¸D&V¾H&.‘‰¿ù_ôC-21òNC-21òIC-21òMC-21r’‰Mdbå‹dâ™9ÉÄ-2±òM2q‹LŒœdâ™9ÉÄ-2ñ7ÿ»Ç1Ô"#'™ØD&FN2±‰LŒœdb™Ø.œÄ1Ô"#'™8D&V>I&N‘‰•?’‰Odbä$ŸÈÄÈI&N‘‰íÂIC-21r’‰Kdbå‹dâ™Øî÷IœC-21òAC-21òEC-21òCC-2±òF2±‰L¬|‘L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&þæ÷8†Zdbä$›ÈÄÈI&6‘‰‘“Lì"Ûƒ“8†Zdbä$‡ÈÄÊ'ÉÄ)2±òG2ñ‰LŒœdâ™ø›ï’‰Sdbå“dâ™9ÉÄ%2±òE2q‰Llïû$Ρ™ù¤¡™ù¦¡™9ÉÄ&2±òF2±‰L¬|‘LÜ"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&¶÷}çP‹LŒœdb™9ÉÄ&2±òN2±‹Lì?pÇP‹LŒœdâ™Xù$™8E&VþH&>‘‰‘ƒLü3Áÿõo¾H&N‘‰•O’‰Sdbå‹dâ™9ÉÄ%2±ÿ|ŸÄ9Ô"#_4Ô"#?4Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&öŸï“8‡Zdbä$›ÈÄÈI&v‘‰•w’‰]dbopÇP‹LŒœdâ™Xù$™8E&VþH&>‘‰‘/j‘‰¿ùþ!™8E&V>I&.‘‰•/’‰Kdbä$—ÈÄÞ¾Oâj‘‰‘oj‘‰‘_j‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰‘Ó7è#2±·ï“8‡Zdbä$›ÈÄÊ;ÉÄ.21r’‰]dbïpÇP‹LŒœdâ™Xù$™8E&VþH&>‘‰‘oj‘‰¿ùþ!™8E&V¾H&.‘‰‘“L\"#'™¸D&öþ}çP‹LŒüÐP‹LŒœdb™Xy#™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™Xù¡oÐGdbïß'qµÈÄÈI&v‘‰•w’‰]dbä$»ÈÄ>à$Ž¡™Xù$™8E&FN2qŠL¬ü‘L|"#?4Ô"óýC2q‰L¬|‘L\"#'™¸D&FN2q‹Lìãû$Ρ™ù¥¡™Xy#™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ#2±òCß ÈÄ>¾Oâj‘‰•w’‰]dbä$»ÈÄÈI&v‘‰}ÂI\C=E&V>I&N‘‰‘“Lœ"+$ŸÈÄÈ/ µÈÄß|ÿL\"+_$—ÈÄÈI&.‘‰•o’‰[dbŸß'qµÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰•’‰Gdbäô úˆLìóû$Ž¡î"+ï$»ÈÄÈI&v‘‰‘“Lì"û‚“8†Zdbä$§ÈÄÈI&N‘‰•?’‰Odbä†Zdâo¾H&.‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-2±¯ï“8‡Zdbådb™9ÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$ÈÄÊÉÄ#21rú}D&þæ÷8†Zdbä$»ÈÄÈI&v‘‰‘“Lì"û†“8†Zdbä$§ÈÄÈI&.‘‰•?’‰Odâoþ÷}] µÈÄÈI&.‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-2±ïï“8þãšÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÊÉÄ#21r’‰Gdbäô úˆLüÍÿîq µÈÄÈI&v‘‰‘“Lì"#'™ØE&ö'q µÈÄÈI&N‘‰•/’‰Kdbåd⟠þ3ÔÞ×ÅP‹LŒœdâ™Xù"™¸D&FN2q‹L¬|“LÜ"ó¿è#†Zdbä$›ÈÄÈI&6‘‰‘“Ll"#'™ØE&V¾I&n‘‰‘“L<"+?$ÈÄÈI&‘‰‘Ó7è#2ñ7ÿ»Ç1Ô"#'™ØE&FN2±‹LŒœdb™Ø/œÄ1Ô"#'™8E&V¾H&.‘‰¿ùß÷Î1Ô"#ï4Ô"#'™¸D&V¾H&.‘‰‘“LÜ"+ß$·ÈÄ~¿Oâj‘‰‘“Ll"#'™ØD&FN2±‰L¬¼“Lì"+ß$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈéô™ø›ÿÝãj‘‰‘“Lì"#'™ØE&FN2qˆLìNâj‘‰‘“Lœ"+_$—ÈÄþ¾Oâj‘‰‘j‘‰•7’‰Kdbå‹dâ™9ÉÄ-2±òM2q‹Lìïû$Ρ™9ÉÄ&21r’‰Mdbä$»ÈÄÊ;ÉÄ.2±òM2ñˆL¬üL<"#'™xD&FN2ñˆLŒœ¾A‘‰ý}ŸÄ9Ô"#'™ØE&FN2±‹L¬|L"ÇœÄ1Ô"#'™8E&V¾H&.‘‰ãçû$Ρ™9ÉÄ&2±òF2q‰L¬|‘L\"+ß$·ÈÄÈI&n‘‰ãçû$Ρ™9ÉÄ&21r’‰Mdbä$»ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Gdbäô úˆL?ß'qµÈÄÈI&v‘‰‘“L"+$‡ÈÄÑà$Ž¡™9ÉÄ)2±òE2q‰Líû$Ρ™9ÉÄ&2±òF2q‰L¬|‘LÜ"+ß$·ÈÄÈI&n‘‰£}ŸÄ9Ô"#'™ØD&FN2±‰L¬¼“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆLŒœ¾A_‘‰£}ŸÄ9Ô"#'™ØE&V>H&‘‰‘“L"G‡“8†Zdbä$—ÈÄÊÉÄ%2qôï“8‡Zdbä$›ÈÄÊÉÄ%2±òM2q‹LŒœdâ™9ÉÄ-2qôï“8‡Zdbä$›ÈÄÈI&v‘‰•w’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰•_ú}E&Žþ}çP‹LŒœdâ™Xù ™8D&FN2qˆLNâj‘‰•/’‰Kdbä$—ÈÄ1¾Oâj‘‰‘“Ll"+o$·ÈÄÊ7ÉÄ-21r’‰[dbä$ÈÄ1¾Oâj‘‰‘“Ll"+ï$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xE&V~éô™8Æ÷IœC-2±òA2qˆLŒœdâ™9ÉÄ!2qL8‰k¨—ÈÄÊÉÄ%21r’‰Kdâ˜ß'qµÈÄÈI&6‘‰•7’‰[dbå›dâ™9ÉÄ-2±òC2ñˆLóû$Ρ™9ÉÄ.2±òN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#2±òK2ñŠLŒœ¾A_‘‰c~ŸÄ1ÔCdbåƒdâ™9ÉÄ!21r’‰CdâXpÇP‹LŒœdâ™9ÉÄ%2q¬ï“8‡Zdbä$›ÈÄÊÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&Žõ}çP‹L¬¼“Lì"#'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™Xù%™xE&FNß ¯ÈÄßüïÇP‹LŒœdâ™9ÉÄ!21r’‰CdâØpÇP‹LŒœdâ™9ÉÄ-2qìï“8‡Zdbådb™9ÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&Žý}Ç\™Xy'™ØE&FN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠLŒœ¾A_‘‰¿ùß=Ž¡™9ÉÄ!21r’‰Cdbä$‡ÈÄqà$Ž¡™9ÉÄ%2±òM2q‹Lçû$Ž¡n"+o$›ÈÄÈI&n‘‰•o’‰[dbä$ÈÄÊÉÄ#2ñ7ÿ‹>b¨E&FN2±‹LŒœdb™9ÉÄ.21r’‰Cdbå‡dâ™9ÉÄ+2±òK2ñŠLŒœdâ™9}ƒ¾"ó¿{C-21r’‰Cdbä$‡ÈÄÈI&‘‰ãÂIC-21r’‰Kdbå›dâ™ø›ÿ}ïC-21r’‰Mdbä$·ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™8î÷IœC-21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™9}ƒ¾"ó¿{C-21r’‰Cdbä$‡ÈÄÈI&N‘‰ãÁIC-21r’‰Kdbå›dâ™8Þ÷IœC-21r’‰Mdbådâ™Xù&™¸E&FN2ñˆL¬üL<"Çû>‰s¨E&FN2±‹LŒœdb™9ÉÄ!2±òA2qˆL¬üL¼"+¿$¯ÈÄÈI&^‘‰‘“L¼"#§oÐWdâxß'qµÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄù'q µÈÄÈI&.‘‰•o’‰[dâüù>‰s¨E&FN2±‹L¬¼“LÜ"+ß$·ÈÄÊÉÄ#21r’‰Gdâüù>‰s¨E&FN2±‹LŒœdb™9ÉÄ!2±òA2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™9}ƒ¾"çÏ÷IœC-21r’‰Cdbä$§ÈÄÊ'ÉÄ)2q68‰c¨E&FN2q‰L¬|“LÜ"gû>‰s¨E&FN2±‹L¬¼“LÜ"+ß$ÈÄÊÉÄ#21r’‰Gdâlß'qµÈÄÈI&v‘‰‘“Lì"+$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"#§oÐOdâlß'qµÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÙá$Ž¡™9ÉÄ-2±òM2q‹Lœýû$Ρ™9ÉÄ.2±òN2q‹L¬üL<"#'™xD&FN2ñˆLœýû$Ρ™9ÉÄ.21r’‰Cdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbå¾A?‘‰³ŸÄ9Ô"#'™8E&V>I&N‘‰‘“Lœ"瀓8†Zdbå›dâ™9ÉÄ-2qŽï“8‡Zdbä$»ÈÄÊ;ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ+2qŽï“8‡Zdbä$»ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&>‘‰•?úýD&Îñ}çP‹L¬|’Lœ"#'™8E&FN2qŠLœNâê-2±òM2q‹LŒœdâ™8ç÷IœC-21r’‰]dbådâ™Xù!™xD&FN2ñˆL¬ü’L¼"çü>‰s¨E&FN2qˆL¬|L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠL¬ü‘L|"#§oÐOdâœß'q õ™Xù$™8E&FN2qŠLŒœdâ™8œÄ1Ô"#'™¸E&FN2q‹Lœëû$Ρ™9ÉÄ.2±òN2ñˆL¬üL<"#'™xE&V~I&^‘‰s}ŸÄ9Ô"+$‡ÈÄÈI&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™øD&VþH&>‘‰‘Ó7è'2ñ7ÿ»Ç1Ô"#'™8E&FN2qŠLŒœdâ™87œÄ1Ô"#'™¸E&FN2ñˆLœûû$Ρ™Xy'™ØE&FN2ñˆL¬üL<"#'™xE&V~I&^‘‰sŸÄñ7D&V>H&‘‰‘“L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&VþH&>‘‰‘“L|"#§oÐOdâoþwc¨E&FN2qŠLŒœdâ™9ÉÄ)2q8‰c¨E&FN2q‹L¬üL<"çù>‰c¨»ÈÄÊ;ÉÄ.21r’‰Gdbå‡dâ™9ÉÄ+2±òK2ñŠLüÍÿ¢j‘‰‘“L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"#'™øD&FNß ŸÈÄßüïÇP‹LŒœdâ™9ÉÄ)21r’‰Sdâ¼pÇP‹LŒœdâ™Xù!™xD&þæß;ÇP‹LŒœdb™9ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Îû}çP‹LŒœdâ™9ÉÄ!21r’‰Cdbå“dâ™Xù%™xE&VþH&>‘‰‘“L|"#'™øD&FNß ŸÈÄßüïÇP‹LŒœdâ™9ÉÄ)21r’‰Kdâ|pÇP‹LŒœdâ™Xù!™xD&Î÷}çP‹LŒœdb™Xù ™xD&V~H&‘‰‘“L¼"+¿$¯ÈÄù¾Oâj‘‰‘“L"#'™8D&FN2qŠL¬|’Lœ"+¿$ŸÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈéô™8ß÷IœC-21r’‰Sdbä$§ÈÄÊÉÄ%2qýÀIC-21r’‰[dbå‡d♸~¾Oâj‘‰‘“L"+$ÈÄÊÉÄ#2±òK2ñŠLŒœd♸~¾Oâj‘‰‘“L"#'™8D&FN2qŠL¬|’Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&FNß ŸÈÄõó}çP‹LŒœdâ™9ÉÄ%2±òE2q‰L\ Nâj‘‰‘“LÜ"+?$ÈÄÕ¾Oâj‘‰‘“L"+$ÈÄÊÉÄ+2±òK2ñŠLŒœd♸Ú÷IœC-21r’‰Cdbä$‡ÈÄÊ'ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä$ŸÈÄÈáôý™¸Ú÷IœC-21r’‰Sdbå‹dâ™9ÉÄ%2qu8‰c¨E&FN2ñˆL¬üL<"Wÿ>‰s¨E&FN2qˆL¬|L<"+¿$¯ÈÄÈI&^‘‰‘“L¼"Wÿ>‰s¨E&FN2qˆLŒœdâ™Xù$™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™ø›ÿÝãj‘‰•O’‰Sdbä$—ÈÄÊÉÄ%21r’‰KdâpÇP‹L¬üL<"#'™xD&®ñ}çP‹LŒœdâ™Xù ™xE&V~I&^‘‰‘“L¼"#'™øD&®ñ}çP‹LŒœdâ™Xù$™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÈÄ¿|>ÿø¿{C-2±òI2qŠL¬|‘L\"#'™¸D&FN2q‰L\Nâê#2±òC2ñˆLŒœd♸æ÷IœC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠL¬ü‘L|"×ü>‰s¨E&FN2qŠL¬|’Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LüÍÿÙã‡Zdbä†Zdbå“dâ™Xù"™¸D&FN2q‰LŒœd♸œÄ1Ô"#'™xD&FN2ñˆL\ëû$Ρ™9ÉÄ!2±òA2ñŠL¬ü’L¼"#'™øD&VþH&>‘‰k}ŸÄ9Ô"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#™øç$þ3Ôëë$þw¨E&F>h¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L\Nâj‘‰‘“L<"#'™xE&®ý}çP‹L¬|L"#'™xE&V~I&^‘‰‘“L|"+$ŸÈĵ¿Oâê)2±òI2qŠLŒœdâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'2ñ7ÿwÿj‘‰‘wj‘‰‘Oj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"ד8†Zdbä$ÈÄÊ/ÉÄ+2qï“8†zˆL¬|L"#'™xE&V~I&^‘‰‘“L|"+$ŸÈÄßü/úˆ¡™9ÉÄ)21r’‰Sdbä$§ÈÄÈI&.‘‰•?’‰Odbä ÿà¿C}>%þg¨E&F>h¨E&F¾h¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L\Nâj‘‰‘“L<"+¿$¯ÈÄßüï{çj‘‰‘“L"#'™xE&V~I&^‘‰‘“L|"+$ŸÈÄu¿Oâj‘‰‘“Lœ"#'™8E&FN2qŠL¬|‘L\"+$ŸÈÄßüÏO9Ô"#ï4Ô"#Ÿ4Ô"#ß4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸E&®'q µÈÄÈI&‘‰•_’‰Wdâzß'qµÈÄÈI&‘‰•O’‰Wdbå—dâ™9ÉÄ'2±òG2ñ‰L\ïû$Ρ™9ÉÄ)21r’‰Sdbä$—ÈÄÊÉÄ%2±ò2ñÏÿê÷ýp"‡Zdb䃆Zdb䋆Zdb䇆Zdbå‹dâ™9ÉÄ%21r’‰Kdbå›d♸à$Ž¡™9ÉÄ#2±òK2ñŠLÜ?ß'qµÈÄÈI&N‘‰•O’‰Wdbå—dâ™Xù#™øD&FN2ñ‰LÜ?ß'qµÈÄÈI&N‘‰‘“Lœ"#'™¸D&V¾H&.‘‰¿ùŸ=Ρ™y§¡™ù¤¡™ù¦¡™ù¥¡™Xù"™¸D&FN2q‰LŒœdâ™Xù&™¸E&î'q µÈÄÈI&‘‰•_’‰Wdânß'qµÈÄÈI&N‘‰•O’‰Wdbå—dâ™Xù#™øD&FN2ñ‰LÜíû$Ρ™9ÉÄ)21r’‰Sdbå‹dâ™9ÉÄ%2ñ7ÿ³Ç9Ô"#4Ô"#_4Ô"#?4Ô"#'™ØD&V¾H&.‘‰‘“L\"+ß$·ÈÄÈI&n‘‰»ÃIC-21r’‰Wdbå—d♸û÷IœC-21r’‰Sdbå“dâ™Xù#™øD&FN2ñ‰LŒœd♸û÷IœC-21r’‰Sdbä$—ÈÄÊÉÄ%21r’‰Kdâîß'qµÈÄÈ' µÈÄÈ7 µÈÄÈ/ µÈÄÊÉÄ&2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LÜNâj‘‰•_’‰Wdbä$¯ÈÄ=¾Oâj‘‰‘“Lœ"+Ÿ$ŸÈÄÊÉÄ'21r’‰Odbä ÏÈÄ=¾Oâj‘‰‘“Lœ"+_$—ÈÄÈI&.‘‰‘“L\"÷ø>‰s¨E&F¾h¨E&F~h¨E&FN2±‰L¬¼‘Ll"+_$—ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄ=á$®¡¾"+¿$¯ÈÄÈI&^‘‰{~ŸÄ9Ô"#'™8E&V>I&>‘‰•?’‰Odbä$ŸÈÄßüïÇP‹L¬|’Lœ"#'™¸D&V¾H&.‘‰‘“L\"#'™¸D&îù}çP‹LŒ|ÓP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&V¾H&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰{ÁIC-21r’‰Wdbä$¯ÈĽ¾Oâj‘‰‘“Lœ"+Ÿ$ŸÈÄÊÉÄ'21r‰&øÏPÿ µŸFC-2±òI2qŠL¬|‘L\"#'™¸D&FN2q‰LŒœd♸×÷IœC-21òCC-21r’‰Mdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dâÞpÇP‹LŒœdâ™9ÉÄ'2qïï“8‡Zdbå“dâ™9ÉÄ'2±òG2ñ‰LŒ|ÓP‹LüÍÿîq µÈÄÊ'ÉÄ%2±òE2q‰LŒœdâ™9ÉÄ%21r’‰KdâÞß'qµÈÄÈ/ µÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰ûÀIC-21r’‰Wdbåd♸Ï÷IC=E&V>I&N‘‰‘“L|"+$ŸÈÄÈ µÈÄßüïÇP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™9ÉÄ-2qŸï“8‡Zdbä$›ÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰ûÂIC-21r’‰Wdbådâ™ø›ÿ}ïC-21r’‰Sdbä$ŸÈÄÊÉÄ'21òKC-2ñ7ÿ»Ç1Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&V¾I&n‘‰û~ŸÄ9Ô"+o$›ÈÄÈI&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2ñˆLÜNâj‘‰‘“L¼"+$ŸÈÄý¾Oâj‘‰‘“Lœ"+_$ŸÈÄÊÉÄ'21òGC-2ñ7ÿ»Ç1Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸E&V¾I&n‘‰û}ŸÄ1ÔMdbådb™9ÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÊÉÄ#2ñüÀIC-21r’‰Wdbådâ™x~¾Oâj‘‰‘“L\"+_$ŸÈÄÊÉÄ'2ñ7ÿûl#†Zdb䛆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-2ñ7ÿ³Ç9Ô"#'™ØD&FN2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ#2±òC2ñˆL< Nâj‘‰‘“L¼"+$ŸÈÄÓ¾Oâj‘‰‘“L\"+_$ŸÈÄÊÈÄ?üg¨<Ûˆ¡™ù¡¡™Xù"™¸D&FN2q‰LŒœdâ™Xù&™¸E&FN2q‹LüÍÿìqµÈÄÈI&6‘‰‘“Ll"#'™ØD&FN2±‹L¬|“LÜ"#'™¸E&V~H&‘‰‘“L<"O‡“8†Zdbä$ŸÈÄÊÉÄ'2ñôï“8‡Zdbä$—ÈÄÊÉÄ'2ñ7ÿ{ÇP‹LŒ¼ÓP‹LŒüÒP‹L¬|‘L\"#'™¸D&FN2q‹L¬|“LÜ"#'™¸E&žþ}çP‹LŒœdb™9ÉÄ&21r’‰Mdbådb™Xù&™¸E&FN2ñˆL¬üL<"#'™xD&ž'q µÈÄÊÉÄ'21r’‰Odâß'qµÈÄÈI&.‘‰•/‰_2ÿ;ÔNâj‘‰‘j‘‰‘“Ll"+_$—ÈÄÈI&.‘‰•o’‰[dbä$·ÈÄÈI&n‘‰g|ŸÄ9Ô"#'™ØD&FN2±‰LŒœdb™Xy'™ØE&V¾I&n‘‰•’‰Gdbä$ÈÄÈI&‘‰gÂI\CýD&VþH&>‘‰‘“L|"Ïü>‰s¨E&FN2q‰L¬|-j‘‰gÂIC-21òIC-2±òF2±‰L¬|‘L\"#'™¸E&V¾I&n‘‰‘“LÜ"#'™¸E&žù}çP‹LŒœdb™9ÉÄ&2±òN2±‹LŒœdb™Xù&™xD&V~H&‘‰‘“L<"#'™xD&ž'q µÈÄÈI&>‘‰‘“L|"Ïú>‰s¨E&FN2q‰L¬|mj‘‰gÁIC-21r’‰Mdbådb™Xù"™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹L<ëû$Ρ™9ÉÄ&21r’‰]dbådb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰GdâÙpÇP‹LŒœdâ™9ÈÄý#2ñìï“8‡Zdbå‹dâ™ù¡¡™x6œÄ1Ô"#'™ØD&VÞH&6‘‰•/’‰[dbå›dâ™9ÉÄ-21r’‰[dbä$·Èij¿Oâj‘‰‘“Ll"+ï$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&ž'q µÈÄÈI&>‘‰¿ùŸ=Ρ™Xù$™¸D&V¾H&.‘‰‘_j‘‰çÀIC-21r’‰Mdbådb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-21r’‰Gdâ9ß'qµÈÄÈI&v‘‰•w’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"Ï…“8†Zdbä$ŸÈÄßüÏçP‹L¬|‘L\"#'™¸D&Fþh¨E&ž 'q µÈÄÈI&6‘‰•7’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄÊÉÄ#2ñÜï“8‡Zdbådb™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&^‘‰çÁIC-21r’‰Odâoþgs¨E&V¾H&.‘‰‘“L\"+ß?4Ô"σ“8†Zdbä$›ÈÄÊÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰Gdbå‡dâ™xÞ÷ICÝE&VÞI&v‘‰‘“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆL¬ü’L¼"ïœÄ1Ô"#'™øD&þæö8‡Zdbå‹dâ™9ÉÄ-2±òÝh¨E&Þ8‰c¨E&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™xD&V~H&‘‰¿ùŸ=Ρ™9ÉÄ.21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&^‘‰•_’‰WdâmpÇP‹LŒœdâ™ø›ÿÙãj‘‰•/’‰Kdbä$·ÈÄÊw§¡™xœÄ5ÔMdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-2±òC2ñˆLŒœdâ™ø›ÿÙãj‘‰‘“Lì"#'™ØE&FN2±‹LŒœdâ™Xù!™xD&FN2ñˆL¬ü’L¼"#'™xE&Þ'q µÈÄÈA&þó™ð?Cý‹û~ µÈÄÊÉÄ%21r’‰[dbå{ÐP‹LüÍÿžÄ1Ô"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2ñˆL¬üL<"#'™xD&Þþ}çP‹LŒœdb™9ÉÄ.21r’‰]dbåƒdâ™Xù!™xD&FN2ñŠL¬ü’L¼"#'™xE&Þ'q µÈÄßüϳj‘‰‘oj‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ&2ñ7ÿ{ÇP‹LŒœdb™9ÉÄ.2±òM2q‹LŒœdâ™Xù!™xD&FN2ñˆLŒœdâ™xÇ÷IœC-21r’‰]dbä$»ÈÄÈI&‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™x'œÄ¿Cý÷%ó¿C=¿ŸmäP‹LŒüÐP‹L¬|‘L\"#'™¸E&V¾I&6‘‰wÂIC-21r’‰Mdbådb™Xù&™¸E&FN2ñˆL¬üL<"#'™xD&FN2ñˆL¼óû$Ρ™9ÉÄ.21r’‰]dbåƒdâ™9ÉÄ!2±òC2ñŠL¬ü’L¼"#'™xE&FN2ñŠL¼ Nâj‘‰‘wj‘‰‘_j‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ&2ñ.8‰c¨E&FN2±‹L¬¼“Lì"+ß$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰w}ŸÄ9Ô"#'™ØE&FN2qˆL¬|L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL¼Nâj‘‰‘j‘‰‘“Ll"+_$—ÈÄÊ7ÉÄ-21r’‰MdâÝpÇP‹LŒœdb™Xy'™ØE&V¾I&‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"ïþ>‰s¨E&FN2±‹L¬|L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™xœÄ1Ô"#Ÿ4Ô"+o$›ÈÄÊÉÄ-2±òM2q‹LŒœdb™xœÄ1Ô"#'™ØE&VÞI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"#'™xE&Þó}çP‹LŒœdâ™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñ^8‰c¨E&F¾h¨E&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&6‘‰÷ÂIC-21r’‰]dbådb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2±òK2ñŠL¼÷û$Ρ™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Odâ}pÇP‹LŒ|ÓP‹L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰•’‰Mdâ}pÇP‹LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñŠL¬ü’L¼"ïû>‰c¨‡ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰•?’‰Odâû“8†Zdb䇆Zdbådb™Xù&™¸E&FN2ñˆL¬üLl"ßœÄ1Ô"+ï$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L¼"+¿$¯ÈÄßüÏçP‹LŒœdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$ŸÈÄÊÉÄ'2ñ58‰c¨E&F~i¨E&VÞH&6‘‰•o’‰[dbä$ÈÄÊÉÄ&2ñ58‰k¨»ÈÄÊ;ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbå—dâ™9ÉÄ+2ñ7ÿ³Ç9Ô"#'™8D&FN2qˆLŒœdâ™9ÉÄ)2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰L|Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø›ÿ=‰c¨E&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™Xù%™xE&FN2ñŠL|ýû$Ρ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ'ÉÄ)2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰L|Nâj‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø›ÿ=‰c¨E&FN2±‹LŒœdâ™Xù!™xD&FN2ñˆL¬ü’L¼"#'™xE&FN2ñŠL|ãû$Ρ™9ÉÄ!21r’‰Cdbä$§ÈÄÊ'ÉÄ)2±òK2ñŠL¬ü‘L|"#'™øD&FN2ñ‰L|Nâê&2±òF2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üLì"ß„“8†Zdbä$»ÈÄÊÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™øæ÷IœC-21r’‰Cdbä$‡ÈÄÊ'ÉÄ)21r’‰Sdbå—dâ™Xù#™øD&FN2ñ‰LŒœdâ™øœÄ1Ô"#'™ØD&FN2±‰L¬|“LÜ"#'™xD&V~H&v‘‰oÁIC-21r’‰Cdbåƒdâ™Xù!™xD&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL|ëû$Ρ™9ÉÄ!21r’‰Sdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r’‰OdâÛpÇP‹LŒœdb™9ÉÄ.2±òM2q‹L¬üL<"#'™ØE&¾ 'q µÈÄÈI&‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñíï“8‡Zdbä$‡ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰ïÀIC-21r’‰Mdbådb™Xù&™xD&V~H&‘‰‘“Lì"ß“8†Zdbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbä$ŸÈÄw¾Oâj‘‰‘“Lœ"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&¾ 'q µÈÄÈI&6‘‰•w’‰]dbå‡dâ™9ÉÄ#21r’‰]dâ»pÇP‹LŒœdâ™Xù ™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL¬ü‘L|"ßý>‰s¨E&V>I&N‘‰‘“Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒdâû™øœÄ1Ô"#'™ØD&VÞI&v‘‰•’‰Gdbä$ÈÄÊ/ÉÄ.2ñ=8‰c¨E&FN2qˆL¬|L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™øD&VþH&>‘‰ï}ŸÄ1ÔSdbå“dâ™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄßüß=þg¨Y&þ?úïICÍ21s’‰ebädbg™ù!™xX&fN2ñ²LŒü’Lì,+ÿ{ÇP³LŒ|L,3'™8X&F~I&^–‰™“L¼,3'™xY&fN2ñ±LŒü‘L|,+ÿ³Ç9Ô,3'™8Y&fN2q²LÌœdâd™˜9ÉÄÉ21òG2ñ±LÌœdâc™˜9ÈÄ&øÏPWþïÿ3Ô]†ºÁIC}d¨Û÷³ê'Cý›w’‰}ÉP·ï“8‡zÊP7x_CÝd¨óK2±_ê'q õø‘¡nðl#†zËPWN2q\êö}çP/êö}çPêö}çP?êöýÛEu—¡®œdâ›2Ôíû$Ρî2ÔíûáDõ”¡nŸ¿ÿ3Ô[†º}Äÿõ•¡®œdâú‘¡nß'qõ‘¡nŸ'ñ?Cýd¨ÛçIüÏP7êÊ; õ¡îpÇP_êþýl#†ºÿÈPÿædbß2Ôýû$Ρ^2ÔÞ×ÅPwêßü’LìO†ºÃICÝd¨;<Ûˆ¡>2Ô•“LO†ºŸÄ9Ô[†ºŸÄ9ÔW†ºŸÄ1ÔïG†ºÿv‘C=d¨+'™ø– uÿ>‰s¨‡ uÿ~8‘C½d¨ûç¯Äÿ õ‘¡î_'ñ¿Cýd¨óE2q5êþ}çP_êþyÇPÿù•øÏP÷Ï“øŸ¡î2Ô•ê)C=à$Ž¡~2ÔãûÙFu“¡®œdb?2Ôãû$ΡÞ2ÔÞ×ÅPêßü’L?2ÔNâê.C=àÙF õ•¡®œdâü‘¡ß'qõ‘¡ß'qõ“¡ß'qu“¡ß¿]äPOêÊI&¾-C=¾Oâê)C=¾NäPoêñù+ñ?C}e¨Ç×IüÏP¯êß|‘L\]†z|ŸÄ9ÔO†z|žÄÿ u“¡Ÿ'ñ?C=d¨+Ÿ4ÔK†zÂI\CÝd¨ç÷³ê.C]9ÉÄ~e¨ç÷IœC}d¨'¼¯‹¡ž2Ô¿ù%™8š õ„“8†zÈPOx¶Cýd¨óI2q6êù}çP_êù}ÇP¿êù}çPwêùýÛEõ’¡®œdâ;2Ôóû$Ρ^2ÔóûáDõ‘¡žŸ¿ÿ3ÔO†z~Äÿu“¡®œdâ2Ôóû$®¡~??2Ôóó$þg¨» õü<‰ÿê)C]ù¢¡Þ2Ô Nâê&C½¾ŸmäPêÊI&ö'C½¾Oâê+C½à}] õ’¡þÍ/ÉÄÑe¨œÄ1ÔS†zÁ³êù#Cý›O’‰³ËP¯ï“8‡úÉP¯ï“8‡ºÉP¯ï“8‡zÈP¯ïß.r¨· uå$ß•¡^ß'qõ–¡^ß'r¨¯ õúü•8‡zýÈP¯¯“øß¡î2Ô•“L\S†z}ŸÄ9ÔM†z}žÄÿ õ¡^Ÿ'ñ?C½d¨+ß4ÔG†zÃICÝe¨÷÷³ê)C]9ÉÄñ#C½¿Oâê'C½á}] õ–¡®œdâ2ÔNâê%C½áÙF u“¡þÍ'ÉÄ9d¨÷÷ICý~d¨÷÷IœCÝe¨÷÷IœC=e¨÷÷o9ÔG†ºr’‰ïÉPïï“8‡úÈPïï‡9ÔO†zþJüÏP7êýuÿ;ÔC†ºr’‰kÉPïï“8‡ºËPïÏ“øŸ¡ž2Ôûó$þg¨· u准úÊP8‰c¨‡ õù~¶‘C½d¨óA2q4êó}ÇPßêïëb¨ uå$Ç”¡>pÇPoêÏ6b¨» õo>I&Î)C}¾Oâê&C}¾Oâê!C}¾Oâê%C}¾»È¡¾2Ô•ƒL¼??2Ôçû$Ρ¾2ÔçûáD õú‘¡>Ÿ¿ÿ3Ô]†ú|Äÿõ”¡®œdâÚ2Ôçû$Ρ2Ôçó$þg¨— õù<‰ÿê#C]ù¥¡~2ÔNâê)C}¿ŸmäPoêß|L]†ú~ŸÄ9ÔM†úÂûºê+C]9Éıd¨/œÄ1ÔG†ú³ê!Cý›O’‰sÉPßï“8‡ºËPßï“8‡zÊPßï“8‡zËPßïß.r¨Ÿ õ/1ûù¡¡n2Ô÷û$Ρ~2Ô÷ûáDu“¡¾Ÿ¿ÿ3ÔC†ú~Äÿõ’¡®œdâ:2Ô÷û$Ρž2Ô÷ó$þg¨· õý<‰ÿê+C]9ÉÄö#Cýà$Ž¡^2ÔïûÙFõ‘¡þÍÉÄ1d¨ß÷IœCÝe¨¼¯‹¡~2Ô¿ù#™8¶ õƒ“8†úÊP?x¶C=e¨óI2qnê÷}çPê÷}çP/ê÷}çPê÷ýÛE õŸ þ3Ô¿Bí§ÑPwê÷}ÇP¯ê÷ýp"‡ºËP¿Ï_‰ÿê)Cý¾Nâ‡zËPWN2q]ê÷}çP/ê÷yÿ3ÔG†ú}žÄÿ õ“¡þÍÉÄ&2±ýÀIC-21r’‰]dbåƒdâ™Xù%™xE&FN2ñ‰L¬ü‘L"ÛœÄ1Ô"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘?j‘‰¿ùýé4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&FN2q‰Ll?ß'qµÈÄÈ µÈÄÈI&6‘‰•7’‰MdbkpÇP‹LŒœdb™Xù ™8D&V~I&^‘‰‘“L|"+$‡ÈÄÖà$®¡ž"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰¿ùßÃ9†Zdb䃆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈÄÈI&n‘‰­}ŸÄ9Ô"#¿4Ô"+o$›ÈÄÈI&6‘‰­ÃIC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñ‰L¬ü‘L"ó¿'q µÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘ƒLü3Á†ºÿv‘C-21òIC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbå›dâ™Øú÷IœC-21r’‰Mdbådb™9ÉÄ&2± 8‰c¨E&V>H&‘‰‘“L"+¿$¯ÈÄÈI&>‘‰•?’‰Sdâoþ÷$Ž¡™9ÉÄ)21r’‰Kdbådâ™9ÉÄ'2ñ7ÿ³Ç9Ô"#ï4Ô"#_4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸E&V¾I&n‘‰m|ŸÄ9Ô"+o$›ÈÄÈI&6‘‰‘“Ll"Û„“¸†zˆL¬|L"#'™8D&V~I&^‘‰‘“L|"+$§ÈÄ6á$Ž¡™9ÉÄ)2±òE2q‰L¬ü‘L|"#™ø÷…Û¿C=¿Oâj‘‰‘j‘‰‘oj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰•o’‰[dbä$·ÈÄ6¿Oâê&2±òF2±‰LŒœdb™9ÉÄ&2±-8‰c¨E&FN2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘Lœ"Û‚“8†Zdbä$—ÈÄÊÉÄ%2±òG2ñ‰LüÍÿó⸆Zdbä†Zdb䓆Zdb䇆Zdbå‹dâ™9ÉÄ%21r’‰[dbå›dâ™9ÉÄ-2ñ7ÿ»Ç1Ô"#'™ØD&FN2±‰LŒœdb™Ø6œÄ1Ô"#'™8D&FN2qŠL¬ü’L¼"+$ŸÈÄÈI&N‘‰mÃIC-21r’‰Kdbå‹dâ™Xù£¯B?"óÿ¼8®¡™ù ¡™ù¢¡™ù¥¡™Xù"™¸D&FN2q‰L¬|“LÜ"#'™¸E&FN2q‹LüÍÿîq µÈÄÈI&6‘‰‘“Ll"#'™ØD&¶'q µÈÄÈI&‘‰•O’‰Sdbå—dâ™Xù#™øD&FN2qŠLlNâj‘‰‘“L\"+_$—ÈÄßü/úˆ¡™y§¡™ù¤¡™ù¦¡™9ÉÄ&2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LŒœdâ™ø›ÿÝãj‘‰‘“Ll"#'™ØD&FN2±‰LlNâj‘‰‘“L"+Ÿ$§ÈÄÊÉÄ'21r’‰Odbä$§ÈÄvá$Ž¡™9ÉÄ%2±òE2q‰Ll÷û$Ρ™ù ¡™ù¢¡™ù¡¡™Xy#™ØD&V¾H&.‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"ó¿{C-21r’‰Mdbä$›ÈÄÈI&v‘‰íÁIC-21r’‰Cdbå“dâ™Xù#™øD&FN2ñ‰LüÍÏÉÄ)2±òI2qŠLŒœdâ™Xù"™¸D&¶÷}çP‹LŒ|ÒP‹LŒ|ÓP‹LŒœdb™Xy#™ØD&V¾H&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"Ûû>‰s¨E&FN2±‰LŒœdb™Xy'™ØE&ö8‰c¨E&FN2qˆL¬|’Lœ"+$ŸÈÄÈA&þ™à‡ú7??$§ÈÄÊ'ÉÄ)2±òE2q‰LŒœdâ™Ø¾Oâj‘‰‘/j‘‰‘j‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"ûÏ÷IœC-21r’‰Mdbä$»ÈÄÊ;ÉÄ.2±78‰c¨E&FN2qˆL¬|’Lœ"+$ŸÈÄÈ µÈÄßüüLœ"+Ÿ$—ÈÄÊÉÄ%21r’‰Kdboß'qµÈÄÈ7 µÈÄÈ/ µÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄÈéô™ØÛ÷IœC-21r’‰Mdbådb™9ÉÄ.2±w8‰c¨E&FN2qŠL¬|’Lœ"+$ŸÈÄÈ7 µÈÄßüüLœ"+_$—ÈÄÈI&.‘‰‘“L\"{ÿ>‰s¨E&F~h¨E&FN2±‰L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹L¬üÐ7è#2±÷ï“8‡Zdbä$»ÈÄÊ;ÉÄ.21r’‰]dbpÇP‹L¬|’Lœ"#'™8E&VþH&>‘‰‘j‘‰¿ùù!™¸D&V¾H&.‘‰‘“L\"#'™¸E&öñ}çP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™Xù¡oÐGdbß'qµÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄ>á$®¡ž"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä—†Zdâo~~H&.‘‰•/’‰Kdbä$—ÈÄÊ7ÉÄ-2±Ïï“8‡Zdbä$›ÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÊÉÄ#21rú}D&öù}ÇPw‘‰•w’‰]dbä$»ÈÄÈI&v‘‰}ÁIC-21r’‰Sdbä$§ÈÄÊÉÄ'21òGC-2ñ7??$—ÈÄÊÉÄ%21r’‰[dbå›dâ™Ø×÷IœC-2±òF2±‰LŒœdb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰Gdbå‡dâ™9}ƒ>"ó¿{C-21r’‰]dbä$»ÈÄÈI&v‘‰}ÃIC-21r’‰Sdbä$—ÈÄÊÉÄ'2ñ7ÿû¾.†Zdbä$—ÈÄÊÉÄ%21r’‰[dbå›dâ™Ø÷÷IÿqMdbådb™9ÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbå‡dâ™9ÉÄ#21rú}D&þæ÷8†Zdbä$»ÈÄÈI&v‘‰‘“Lì"û“8†Zdbä$§ÈÄÊÉÄ%2±ò2ñÏÿêïëb¨E&FN2q‰L¬|‘L\"#'™¸E&V¾I&n‘‰¿ù_ôC-21r’‰Mdbä$›ÈÄÈI&6‘‰‘“Lì"+ß$·ÈÄÈI&‘‰•’‰Gdbä$ÈÄÈéô™ø›ÿÝãj‘‰‘“Lì"#'™ØE&FN2±‹LìNâj‘‰‘“Lœ"+_$—ÈÄßüï{çj‘‰‘wj‘‰‘“L\"+_$—ÈÄÈI&n‘‰•o’‰[db¿ß'qµÈÄÈI&6‘‰‘“Ll"#'™ØD&VÞI&v‘‰•o’‰[dbå‡dâ™9ÉÄ#21r’‰Gdbäô úˆLüÍÿîq µÈÄÈI&v‘‰‘“Lì"#'™8D&ö'q µÈÄÈI&N‘‰•/’‰Kdbß'qµÈÄÈ µÈÄÊÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&ö÷}çP‹LŒœdb™9ÉÄ&21r’‰]dbådb™Xù&™xD&V~H&‘‰‘“L<"#'™xD&FNß ÈÄþ¾Oâj‘‰‘“Lì"#'™ØE&V>H&‘‰ãNâj‘‰‘“Lœ"+_$—ÈÄñó}çP‹LŒœdb™Xy#™¸D&V¾H&.‘‰•o’‰[dbä$·ÈÄñó}çP‹LŒœdb™9ÉÄ&21r’‰]dbådb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#21rú}D&ŽŸï“8‡Zdbä$»ÈÄÈI&‘‰•’‰CdâhpÇP‹LŒœdâ™Xù"™¸D&Žö}çP‹LŒœdb™Xy#™¸D&V¾H&n‘‰•o’‰[dbä$·ÈÄѾOâj‘‰‘“Ll"#'™ØD&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&FNß ¯ÈÄѾOâj‘‰‘“Lì"+$‡ÈÄÈI&‘‰£ÃIC-21r’‰Kdbå‹dâ™8ú÷IœC-21r’‰Mdbådâ™Xù&™¸E&FN2q‹LŒœdâ™8ú÷IœC-21r’‰Mdbä$»ÈÄÊ;ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄÊ/}ƒ¾"Gÿ>‰s¨E&FN2qˆL¬|L"#'™8D&Ž'q µÈÄÊÉÄ%21r’‰Kdâß'qµÈÄÈI&6‘‰•7’‰[dbå›dâ™9ÉÄ-21r’‰Gdâß'qµÈÄÈI&6‘‰•w’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L¼"+¿ô úŠLãû$Ρ™Xù ™8D&FN2qˆLŒœdâ™8&œÄ5ÔKdbå‹dâ™9ÉÄ%2qÌï“8‡Zdbä$›ÈÄÊÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&Žù}çP‹LŒœdb™Xy'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™Xù%™xE&FNß ¯ÈÄ1¿Oâê!2±òA2qˆLŒœdâ™9ÉÄ!2q,8‰c¨E&FN2q‰LŒœdâ™8Ö÷IœC-21r’‰Mdbådâ™Xù&™¸E&FN2ñˆL¬üL<"Çú>‰s¨E&VÞI&v‘‰‘“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñŠL¬ü’L¼"#§oÐWdâoþwc¨E&FN2qˆLŒœdâ™9ÉÄ!2ql8‰c¨E&FN2q‰LŒœdâ™8ö÷IœC-2±òF2±‰LŒœdâ™Xù&™¸E&FN2ñˆL¬üL<"Çþ>‰ã?®‹L¬¼“Lì"#'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆL¬ü’L¼"#'™xE&FNß ¯ÈÄßüïÇP‹LŒœdâ™9ÉÄ!21r’‰Cdâ8pÇP‹LŒœdâ™Xù&™¸E&Žó}ÇP7‘‰•7’‰Mdbä$·ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™ø›ÿE1Ô"#'™ØE&FN2±‹LŒœdb™9ÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠLŒœ¾A_‘‰¿ùß=Ž¡™9ÉÄ!21r’‰Cdbä$‡ÈÄqá$Ž¡™9ÉÄ%2±òM2q‹LüÍÿ¾wŽ¡™9ÉÄ&21r’‰[dbå›dâ™9ÉÄ#2±òC2ñˆL÷û$Ρ™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ!2±òC2ñˆL¬ü’L¼"#'™xE&FN2ñŠLŒœ¾A_‘‰¿ùß=Ž¡™9ÉÄ!21r’‰Cdbä$§ÈÄñà$Ž¡™9ÉÄ%2±òM2q‹Lïû$Ρ™9ÉÄ&2±òN2q‹L¬|“LÜ"#'™xD&V~H&‘‰ã}ŸÄ9Ô"#'™ØE&FN2±‹LŒœdâ™Xù ™8D&V~H&^‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘Ó7è+2q¼ï“8‡Zdbä$‡ÈÄÈI&‘‰•O’‰Sdâü“8†Zdbä$—ÈÄÊ7ÉÄ-2qþ|ŸÄ9Ô"#'™ØE&VÞI&n‘‰•o’‰[dbå‡dâ™9ÉÄ#2qþ|ŸÄ9Ô"#'™ØE&FN2±‹LŒœdâ™Xù ™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠLŒœ¾A_‘‰óçû$Ρ™9ÉÄ!21r’‰Sdbå“dâ™8œÄ1Ô"#'™¸D&V¾I&n‘‰³}ŸÄ9Ô"#'™ØE&VÞI&n‘‰•o’‰Gdbå‡dâ™9ÉÄ#2q¶ï“8‡Zdbä$»ÈÄÈI&v‘‰•’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰‘Ó7è'2q¶ï“8‡Zdbä$‡ÈÄÊ'ÉÄ)21r’‰SdâìpÇP‹LŒœdâ™Xù&™¸E&Îþ}çP‹LŒœdb™Xy'™¸E&V~H&‘‰‘“L<"#'™xD&Îþ}çP‹LŒœdb™9ÉÄ!2±òA2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2±òGß ŸÈÄÙ¿Oâj‘‰‘“Lœ"+Ÿ$§ÈÄÈI&N‘‰sÀIC-2±òM2q‹LŒœdâ™8Ç÷IœC-21r’‰]dbådâ™Xù!™xD&FN2ñˆLŒœdâ™8Ç÷IœC-21r’‰]dbåƒdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$ŸÈÄÊ}ƒ~"çø>‰s¨E&V>I&N‘‰‘“Lœ"#'™8E&Î 'q õ™Xù&™¸E&FN2q‹Lœóû$Ρ™9ÉÄ.2±òN2ñˆL¬üL<"#'™xD&V~I&^‘‰s~ŸÄ9Ô"#'™8D&V>H&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&VþH&>‘‰‘Ó7è'2qÎï“8†zŠL¬|’Lœ"#'™8E&FN2qŠLœ Nâj‘‰‘“LÜ"#'™¸E&Îõ}çP‹LŒœdb™Xy'™xD&V~H&‘‰‘“L¼"+¿$¯ÈĹ¾Oâj‘‰•’‰Cdbä$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L|"+$ŸÈÄÈéô™ø›ÿÝãj‘‰‘“Lœ"#'™8E&FN2qŠLœNâj‘‰‘“LÜ"#'™xD&Îý}çP‹L¬¼“Lì"#'™xD&V~H&‘‰‘“L¼"+¿$¯ÈĹ¿Oâø"+$‡ÈÄÈI&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"+$ŸÈÄÈI&>‘‰‘Ó7è'2ñ7ÿ»Ç1Ô"#'™8E&FN2qŠLŒœdâ™8œÄ1Ô"#'™¸E&V~H&‘‰ó|ŸÄ1Ô]dbådb™9ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&þæÑG µÈÄÈI&‘‰‘“L"#'™8D&FN2qŠL¬ü’L¼"#'™øD&VþH&>‘‰‘“L|"#§oÐOdâoþwc¨E&FN2qŠLŒœdâ™9ÉÄ)2q^8‰c¨E&FN2q‹L¬üL<"ó¿ïc¨E&FN2±‹LŒœdâ™Xù!™xD&FN2ñŠL¬ü’L¼"çý>‰s¨E&FN2qˆLŒœdâ™9ÉÄ!2±òI2qŠL¬ü’L¼"+$ŸÈÄÈI&>‘‰‘“L|"#§oÐOdâoþwc¨E&FN2qŠLŒœdâ™9ÉÄ%2q>8‰c¨E&FN2q‹L¬üL<"çû>‰s¨E&FN2±‹L¬|L<"+?$ÈÄÈI&^‘‰•_’‰Wdâ|ß'qµÈÄÈI&‘‰‘“L"#'™8E&V>I&N‘‰•_’‰Odbådâ™9ÉÄ'21r’‰Odbäô ú‰Lœïû$Ρ™9ÉÄ)21r’‰Sdbå‹d♸~à$Ž¡™9ÉÄ-2±òC2ñˆL\?ß'qµÈÄÈI&‘‰•’‰Gdbå‡dâ™Xù%™xE&FN2ñŠL\?ß'qµÈÄÈI&‘‰‘“L"#'™8E&V>I&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"#§oÐOdâúù>‰s¨E&FN2qŠLŒœdâ™Xù"™¸D&®'q µÈÄÈI&n‘‰•’‰Gdâjß'qµÈÄÈI&‘‰•’‰Gdbå‡dâ™Xù%™xE&FN2ñŠL\íû$Ρ™9ÉÄ!21r’‰Cdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r’‰Odbäð úýˆL\íû$Ρ™9ÉÄ)2±òE2q‰LŒœd♸:œÄ1Ô"#'™xD&V~H&‘‰«ŸÄ9Ô"#'™8D&V>H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰«ŸÄ9Ô"#'™8D&FN2qŠL¬|’Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰LüÍÿîq µÈÄÊ'ÉÄ)21r’‰Kdbå‹dâ™9ÉÄ%2q 8‰c¨E&V~H&‘‰‘“L<"×ø>‰s¨E&FN2qˆL¬|L¼"+¿$¯ÈÄÈI&^‘‰‘“L|"×ø>‰s¨E&FN2qˆL¬|’Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒdâß >Ÿüß=Ž¡™Xù$™8E&V¾H&.‘‰‘“L\"#'™¸D&® 'q õ™Xù!™xD&FN2ñˆL\óû$Ρ™9ÉÄ!2±òA2ñŠL¬ü’L¼"#'™xE&VþH&>‘‰k~ŸÄ9Ô"#'™8E&V>I&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&þæÿìñ¿C-21òNC-2±òI2q‰L¬|‘L\"#'™¸D&FN2q‰L\ Nâj‘‰ÿãÛÞr+Ë•$ˆNI|“óŸXߟVxª¶Ù ÈJŽÀÙ\‘“L<"#'™xD&®õ}çP‹LŒœdâ™Xù ™xE&V~I&^‘‰‘“L|"+$ŸÈĵ¾Oâj‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘ƒLüsÿêõuÿ;Ô"#4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&® 'q µÈÄÈI&‘‰‘“L¼"×þ>‰s¨E&V>H&‘‰‘“L¼"+¿$¯ÈÄÈI&>‘‰•?’‰OdâÚß'q õ™Xù$™8E&FN2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™ø›ÿ»Çÿ µÈÄÈ; µÈÄÈ' µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰ëÀIC-21r’‰Gdbå—d♸Î÷IC=D&V>H&‘‰‘“L¼"+¿$¯ÈÄÈI&>‘‰•?’‰Odâoþ}ÄP‹LŒœdâ™9ÉÄ)21r’‰Sdbä$—ÈÄÊÉÄ'21r‰ÿNðß¡>Ÿ¿ÿ3Ô"#4Ô"#_4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&® 'q µÈÄÈI&‘‰•_’‰Wdâoþ÷½s µÈÄÈI&‘‰‘“L¼"+¿$¯ÈÄÈI&>‘‰•?’‰Odâºß'qµÈÄÈI&N‘‰‘“Lœ"#'™8E&V¾H&.‘‰•?’‰Odâoþç'Šj‘‰‘wj‘‰‘Oj‘‰‘oj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“LÜ"׃“8†Zdbä$ÈÄÊ/ÉÄ+2q½ï“8‡Zdbä$‡ÈÄÊ'ÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&®÷}çP‹LŒœdâ™9ÉÄ)21r’‰Kdbå‹dâ™Xù™øg‚ÿ õû~8‘C-21òAC-21òEC-21òCC-2±òE2q‰LŒœdâ™9ÉÄ%2±òM2q‹LÜ?pÇP‹LŒœdâ™Xù%™xE&îŸï“8‡Zdbä$§ÈÄÊ'ÉÄ+2±òK2ñŠL¬ü‘L|"#'™øD&îŸï“8‡Zdbä$§ÈÄÈI&N‘‰‘“L\"+_$—ÈÄßüÏçP‹LŒ¼ÓP‹LŒ|ÒP‹LŒ|ÓP‹LŒüÒP‹L¬|‘L\"#'™¸D&FN2q‹L¬|“LÜ"wƒ“8†Zdbä$ÈÄÊ/ÉÄ+2q·ï“8‡Zdbä$§ÈÄÊ'ÉÄ+2±òK2ñ‰L¬ü‘L|"#'™øD&îö}çP‹LŒœdâ™9ÉÄ)2±òE2q‰LŒœdâ™ø›ÿÙãj‘‰‘j‘‰‘/j‘‰‘j‘‰‘“Ll"+_$—ÈÄÈI&.‘‰•o’‰[dbä$·ÈÄÝá$Ž¡™9ÉÄ+2±òK2ñŠLÜýû$Ρ™9ÉÄ)2±òI2ñŠL¬ü‘L|"#'™øD&FN2ñ‰LÜýû$Ρ™9ÉÄ)21r’‰Kdbå‹dâ™9ÉÄ%2q÷ï“8‡Zdb䓆Zdb䛆Zdbä—†Zdbådb™Xù"™¸D&FN2q‹L¬|“LÜ"#'™¸E&î'q µÈÄÊ/ÉÄ+21r’‰Wdâß'qµÈÄÈI&N‘‰•O’‰Odbådâ™9ÉÄ'21r‰÷Gdâß'qµÈÄÈI&N‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰{|ŸÄ9Ô"#_4Ô"#?4Ô"#'™ØD&VÞH&6‘‰•/’‰Kdbå›dâ™9ÉÄ-21r’‰[dâžp×P_‘‰•_’‰Wdbä$¯ÈÄ=¿Oâj‘‰‘“Lœ"+Ÿ$ŸÈÄÊÉÄ'21r’‰Odâoþwc¨E&V>I&N‘‰‘“L\"+_$—ÈÄÈI&.‘‰‘“L\"÷ü>‰s¨E&F¾i¨E&F~i¨E&VÞH&6‘‰‘“Ll"+_$·ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈĽà$Ž¡™9ÉÄ+21r’‰Wdâ^ß'qµÈÄÈI&N‘‰•O’‰Odbådâ™9ÈÄ?üg¨…ÚO£¡™Xù$™8E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰LÜëû$Ρ™ù¡¡™9ÉÄ&2±òF2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2qo8‰c¨E&FN2ñŠLŒœd♸÷÷IœC-2±òI2qŠLŒœdâ™Xù#™øD&F¾i¨E&þæ÷8†Zdbå“dâ™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2qïï“8‡Zdbä—†Zdbådb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄ}à$Ž¡™9ÉÄ+2±òG2ñ‰LÜçû$Ž¡ž"+Ÿ$§ÈÄÈI&>‘‰•?’‰Odb䇆Zdâoþwc¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰LŒœd♸Ï÷IœC-21r’‰Mdbådb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄ}á$Ž¡™9ÉÄ+2±òG2ñ‰LüÍÿ¾wŽ¡™9ÉÄ)21r’‰Odbådâ™ù¥¡™ø›ÿÝãj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"+ß$·ÈÄ}¿Oâj‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™xD&î'q µÈÄÈI&^‘‰•?’‰Odâ~ß'qµÈÄÈI&N‘‰•/’‰Odbådâ™ù£¡™ø›ÿÝãj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄý¾Oâê&2±òF2±‰LŒœdb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbå‡dâ™x~à$Ž¡™9ÉÄ+2±òG2ñ‰L‰s¨E&FN2±‰LŒœdb™9ÉÄ&2±òN2±‹L¬|“LÜ"#'™xD&V~H&‘‰‘“L<"Ï€“8†Zdbådâ™9ÉÄ'2ñŒï“8‡Zdbä$—ÈÄÊÈÄ¿/™ÿê'q µÈÄÈ µÈÄÈI&6‘‰•/’‰Kdbä$—ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄ3¾Oâj‘‰‘“Ll"#'™ØD&FN2±‹L¬¼“Lì"+ß$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄ3á$®¡~"+$ŸÈÄÈI&>‘‰g~ŸÄ9Ô"#'™¸D&V¾ µÈÄ3á$Ž¡™ù¤¡™Xy#™ØD&V¾H&.‘‰‘“LÜ"+ß$·ÈÄÈI&n‘‰‘“LÜ"Ïü>‰s¨E&FN2±‰LŒœdb™Xy'™ØE&FN2±‹L¬|“L<"+?$ÈÄÈI&‘‰‘“L<"Ï‚“8†Zdbä$ŸÈÄÈI&>‘‰g}ŸÄ9Ô"#'™¸D&V¾6 µÈijà$Ž¡™9ÉÄ&2±òF2±‰L¬|‘L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&žõ}çP‹LŒœdb™9ÉÄ.2±òN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2ñl8‰c¨E&FN2ñ‰LŒdâù™xö÷IœC-2±òE2q‰LŒüÐP‹L<Nâj‘‰‘“Ll"+o$›ÈÄÊÉÄ-2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dâÙß'qµÈÄÈI&6‘‰•w’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"Ï“8†Zdbä$ŸÈÄßüÏçP‹L¬|’L\"+_$—ÈÄÈ/ µÈÄsà$Ž¡™9ÉÄ&2±òF2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™9ÉÄ#2ñœï“8‡Zdbä$»ÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰çÂIC-21r’‰Odâoþgs¨E&V¾H&.‘‰‘“L\"#4Ô"Ï…“8†Zdbä$›ÈÄÊÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dbå‡dâ™xî÷IœC-2±òN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$¯ÈÄóà$Ž¡™9ÉÄ'2ñ7ÿ³Ç9Ô"+_$—ÈÄÈI&.‘‰•ïj‘‰çÁIC-21r’‰Mdbådb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ#2±òC2ñˆL<ïû$Ž¡î"+ï$»ÈÄÈI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&V~I&^‘‰÷Nâj‘‰‘“L|"ó?{œC-2±òE2q‰LŒœdâ™Xùn4Ô"ïœÄ1Ô"+o$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“L<"+?$ÈÄßüÏçP‹LŒœdb™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$¯ÈÄÊ/ÉÄ+2ñ68‰c¨E&FN2ñ‰LüÍÿìqµÈÄÊÉÄ%21r’‰[dbå»ÓP‹L¼ Nâê&2±òF2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&FN2ñˆLüÍÿìqµÈÄÈI&v‘‰‘“Lì"#'™ØE&FN2qˆL¬üL<"#'™xD&V~I&^‘‰‘“L¼"o‡“8†Zdbä ÿùLøŸ¡þÅ}?‹†Zdbå‹dâ™9ÉÄ-2±ò=h¨E&þæOâj‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™xD&V~H&‘‰‘“L<"oÿ>‰s¨E&FN2±‹LŒœdb™9ÉÄ.2±òA2qˆL¬üL<"#'™xE&V~I&^‘‰‘“L¼"8†ZdâoþçÙFµÈÄÈ7 µÈÄÊÉÄ%21r’‰[dbå›db™ø›ÿ=‰c¨E&FN2±‰LŒœdb™Xù&™¸E&FN2q‹L¬üL<"#'™xD&FN2ñˆL¼ãû$Ρ™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ!2±òC2ñˆL¬ü’L¼"#'™xE&FN2ñŠL¼Nâß¡þû’ùß¡žßÏ6r¨E&F~h¨E&V¾H&.‘‰‘“LÜ"+ß$›ÈÄ;á$Ž¡™9ÉÄ&2±òN2±‹L¬|“LÜ"#'™xD&V~H&‘‰‘“L<"#'™xD&Þù}çP‹LŒœdb™9ÉÄ.2±òA2qˆLŒœdâ™Xù!™xE&V~I&^‘‰‘“L¼"#'™xE&Þ'q µÈÄÈ; µÈÄÈ/ µÈÄÊÉÄ%21r’‰[dbå›db™xœÄ1Ô"#'™ØE&VÞI&v‘‰•o’‰[dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄ»¾Oâj‘‰‘“Lì"#'™8D&V>H&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&Þ 'q µÈÄÈ µÈÄÈI&6‘‰•/’‰Kdbå›dâ™9ÉÄ&2ñn8‰c¨E&FN2±‹L¬¼“Lì"+ß$ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰wŸÄ9Ô"#'™ØE&V>H&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL¼Nâj‘‰‘Oj‘‰•7’‰Mdbå‹dâ™Xù&™¸E&FN2±‰L¼Nâj‘‰‘“Lì"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰‘“L¼"ïù>‰s¨E&FN2qˆL¬|L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™x/œÄ1Ô"#_4Ô"+o$›ÈÄÊ7ÉÄ-21r’‰[dbä$›ÈÄ{á$Ž¡™9ÉÄ.2±òN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù%™xE&Þû}çP‹L¬|L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ'2ñ>8‰c¨E&F¾i¨E&VÞH&6‘‰•o’‰[dbä$·ÈÄÊÉÄ&2ñ>8‰c¨E&FN2±‹L¬¼“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xE&V~I&^‘‰÷}ŸÄ1ÔCdbåƒdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÊÉÄ'2ñýÀIC-21òCC-2±òF2±‰L¬|“LÜ"#'™xD&V~H&6‘‰ïNâj‘‰•w’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&^‘‰•_’‰Wdâoþgs¨E&FN2qˆLŒœdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Odbådâ™øœÄ1Ô"#¿4Ô"+o$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™øœÄ5Ô]dbådb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#2±òK2ñŠLŒœdâ™ø›ÿÙãj‘‰‘“L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠL¬ü‘L|"#'™øD&¾'q µÈÄÈI&6‘‰•7’‰Mdbå›dâ™9ÉÄ#2±òC2±‰LüÍÿžÄ1Ô"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñŠL¬ü’L¼"#'™xE&¾þ}çP‹LŒœdâ™9ÉÄ!21r’‰Cdbå“dâ™Xù%™xE&FN2ñ‰L¬ü‘L|"#'™øD&¾'q µÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ#2±òC2±‹LüÍÿžÄ1Ô"#'™ØE&FN2qˆL¬üL<"#'™xD&V~I&^‘‰‘“L¼"#'™xE&¾ñ}çP‹LŒœdâ™9ÉÄ!21r’‰Sdbå“dâ™Xù%™xE&VþH&>‘‰‘“L|"#'™øD&¾ 'q u™Xy#™ØD&FN2±‰L¬|“LÜ"#'™xD&V~H&v‘‰oÂIC-21r’‰]dbåƒdâ™Xù!™xD&FN2ñŠL¬ü’L¼"#'™xE&FN2ñŠL|óû$Ρ™9ÉÄ!21r’‰Cdbå“dâ™9ÉÄ)2±òK2ñ‰L¬ü‘L|"#'™øD&FN2ñ‰L| Nâj‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“L<"+?$»ÈÄ·à$Ž¡™9ÉÄ!2±òA2qˆL¬üL<"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&¾õ}çP‹LŒœdâ™9ÉÄ)2±òI2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'2ñm8‰c¨E&FN2±‰LŒœdb™Xù&™¸E&V~H&‘‰‘“Lì"߆“8†Zdbä$‡ÈÄÊÉÄ!2±òC2ñŠL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™øö÷IœC-21r’‰Cdbå“dâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä$ŸÈÄwà$Ž¡™9ÉÄ&2±òN2±‹L¬|“L<"+?$ÈÄÈI&v‘‰ïÀIC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+21r’‰Odâ;ß'qµÈÄÈI&N‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"ß…“8†Zdbä$›ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ.2ñ]8‰c¨E&FN2qˆL¬|L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&VþH&>‘‰ï~ŸÄ9Ô"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&Fþ-ÿ7."߃“8†Zdbä$›ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™Xù%™ØE&¾'q µÈÄÈI&‘‰•’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$ŸÈÄÊÉÄ'2ñ½ï“8†zŠL¬|’Lœ"#'™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™øÿùŸ=þg¨Q&þFÿ=‰c¨Q&þ““Ll(3ï$;ÊÄÌÉă2ñŸœdâE™˜ù%™ØQ&Fþ÷$Ž¡F™˜ù ™8P&þ““L(3¿$/ÊÄr’‰eâ?9ÉÄ‹2ñŸœdâC™˜ù#™øP&Fþgs¨Q&þ““Lœ(ÿÉI&N”‰ÿä$'ÊÄr’‰ebædâC™øON2ñ¡Lü'ÿ–‰ÿNð¿C]ùŸ=þg¨» uƒ“8†úÈP·ïg9ÔO†ú7ï$û’¡nß'qõ”¡nð¾.†ºÉPÿæ—db¿2Ô Nâêñ#CÝàÙF õ–¡®œdâ¸2Ôíû$Ρ^2Ôíû$Ρ>2Ôíû$Ρ~2Ôíû·‹ê.C]9ÉÄ7e¨Û÷IœCÝe¨Û÷Éê)CÝ>%þg¨· uû:‰ÿê+C]9ÉÄõ#CݾOâê#CÝ>Oâ†úÉP·Ï“øŸ¡n2Ô•wê!CÝá$Ž¡¾2ÔýûÙF uÿ‘¡þÍ;Éľe¨û÷IœC½d¨;¼¯‹¡î2Ô¿ù%™ØŸ u‡“8†ºÉPwx¶C}d¨+'™8ž uÿ>‰s¨· uÿ>‰s¨¯ uÿ>‰c¨ß uÿþí"‡zÈPWN2ñ-êþ}çPêþýp"‡zÉP÷Ï_‰ÿê#CÝ¿Nâ‡úÉPÿæ‹dâj2Ôýû$Ρ¾2Ôýó$®¡þû+ñŸ¡îŸ'ñ?CÝe¨+4ÔS†zÀICýd¨Ç÷³ê&C]9ÉÄ~d¨Ç÷IœC½e¨¼¯‹¡2Ô¿ù%™8~d¨œÄ1Ô]†zÀ³ê+C]9ÉÄù#C=¾Oâê#C=¾Oâê'C=¾Oâê&C=¾»È¡ž2Ô•“L|[†z|ŸÄ9ÔS†z|?œÈ¡Þ2ÔãóWâ†úÊP¯“øŸ¡^?2Ô¿ù"™¸º õø>‰s¨Ÿ õø<‰ÿê&C=>Oâ†zÈPW>i¨— õ„“¸†ºÿÈPÏïg9Ô]†ºr’‰ýÊPÏï“8‡úÈPOx_C=e¨óK2q4ê 'q õ¡žðl#†úÉPÿæ“dâl2Ôóû$Ρ¾2Ôóû$Ž¡~?2Ôóû$Ρî2Ôóû·‹ê%C]9ÉÄwd¨ç÷IœC½d¨ç÷Éê#C=?%þg¨Ÿ õü:‰ÿê&C]9ÉÄ5d¨ç÷Iü;Ô'øÏPÏÏ“øŸ¡î2Ôóó$þg¨§ u勆zËP/8‰c¨› õú~¶‘C=d¨+'™ØŸ õú>‰s¨¯ õ‚÷u1ÔK†ú7¿$G—¡^pÇPOêÏ6j¨ç õo>I&Î.C½¾Oâê'C½¾Oâê&C½¾Oâê!C½¾»È¡Þ2Ô•“L|W†z}ŸÄ9Ô[†z}?œÈ¡¾2ÔëóWâêõ#C½¾N⇺ËPWN2qMêõ}çP7êõyÿ3ÔC†z}žÄÿ õ’¡®|ÓPê 'q u—¡ÞßÏ6r¨§ uå$Ç õþ>‰s¨Ÿ õ†÷u1Ô[†ºr’‰cÈPo8‰c¨— õ†g1ÔM†ú7Ÿ$ç¡Þß'q õû‘¡Þß'qu—¡Þß'qõ”¡Þß¿]äPêÊI&¾'C½¿Oâê#C½¿NäP?êýù+ñ?CÝd¨÷×IüïPêÊI&®%C½¿Oâê.C½?Oâ†zÊPïÏ“øŸ¡Þ2Ô•ê+C}à$Ž¡2ÔçûÙFõ’¡þÍÉÄÑd¨Ï÷IC}d¨¼¯‹¡>2Ô•“LS†úÀIC½e¨<Ûˆ¡î2Ô¿ù$™8§ õù>‰s¨› õù>‰s¨‡ õù>‰s¨— õùþí"‡úÊPW2ñýüÈPŸï“8‡úÊPŸï‡1ÔëG†ú|þJüÏPwêóuÿ;ÔS†ºr’‰kËPŸï“8‡zÈPŸÏ“øŸ¡^2Ôçó$þg¨ uå—†úÉP_8‰c¨§ õý~¶‘C½e¨óA2qtêû}çP7ê ïëb¨¯ uå$Ç’¡¾pÇPê Ï6b¨‡ õo>I&Î%C}¿Oâê.C}¿Oâê)C}¿Oâê-C}¿»È¡~2Ô¿Äì燆ºÉPßï“8‡úÉPßï‡9ÔM†ú~þJüÏPêûuÿ;ÔK†ºr’‰ëÈPßï“8‡zÊPßÏ“øŸ¡Þ2Ô÷ó$þg¨¯ uå$Û õƒ“8†zÉP¿ïg9ÔG†ú7$Ç¡~ß'qu—¡~ð¾.†úÉPÿædâØ2ÔNâê+CýàÙF õ”¡þÍ'ÉĹe¨ß÷IœC=d¨ß÷IœC½d¨ß÷IœC}d¨ß÷o5Ô&øÏPÿ µŸFCÝe¨ß÷IC½~d¨ß÷Éê.Cý>%þg¨§ õû:‰ÿê-C]9ÉÄue¨ß÷IœC½d¨ßçIüÏPê÷yÿ3ÔO†ú7o$›ÈÄö'q µÈÄÈI&v‘‰•’‰Cdbå—dâ™9ÉÄ'2±òG2qˆLl?pÇP‹L¬|’Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&Fþh¨E&þæï§ÓP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™9ÉÄ%2±ý|ŸÄ9Ô"#?4Ô"#'™ØD&VÞH&6‘‰­ÁIC-21r’‰]dbåƒdâ™Xù%™xE&FN2ñ‰L¬ü‘L"[ƒ“¸†zŠL¬|’Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&þæçj‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"#'™¸E&¶ö}çP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&¶'q µÈÄÈI&‘‰•’‰Cdbå—dâ™9ÉÄ'2±òG2qˆLüÍÿžÄ1Ô"#'™8E&FN2qŠL¬ü‘L|"#'™øD&F2ñÏÿêþýÛEµÈÄÈ' µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰•o’‰[dbëß'qµÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄ6à$Ž¡™Xù ™8D&FN2qˆL¬ü’L¼"#'™øD&VþH&N‘‰¿ùß“8†Zdbä$§ÈÄÈI&.‘‰•?’‰Odbä$ŸÈÄßüÏçP‹LŒ¼ÓP‹LŒ|ÑP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™Xù&™¸E&¶ñ}çP‹L¬¼‘Ll"#'™ØD&FN2±‰LlNâê!2±òA2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘Lœ"Û„“8†Zdbä$§ÈÄÊÉÄ%2±òG2ñ‰LŒdâßnÿõü>‰s¨E&F>h¨E&F¾i¨E&V¾H&.‘‰‘“L\"#'™¸D&V¾I&n‘‰‘“LÜ"Ûü>‰c¨›ÈÄÊÉÄ&21r’‰Mdbä$›ÈĶà$Ž¡™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ'2±òG2qŠLl Nâj‘‰‘“L\"+_$—ÈÄÊÉÄ'2ñ7ÿÏ‹ãj‘‰‘wj‘‰‘Oj‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&n‘‰•o’‰[dbä$·È;Oâj‘‰‘“Ll"#'™ØD&FN2±‰LlNâj‘‰‘“L"#'™8E&V~I&^‘‰•?’‰Odbä$§ÈĶá$Ž¡™9ÉÄ%2±òE2q‰L¬üÑW¡‘‰¿ù^×P‹LŒ|ÐP‹LŒ|ÑP‹LŒüÒP‹L¬|‘L\"#'™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&¶ý}çP‹LŒœdb™9ÉÄ&21r’‰Mdb;pÇP‹LŒœdâ™Xù$™8E&V~I&>‘‰•?’‰Odbä$§ÈÄvà$Ž¡™9ÉÄ%2±òE2q‰LüÍÿ¢j‘‰‘wj‘‰‘Oj‘‰‘oj‘‰‘“Ll"+_$—ÈÄÈI&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰í|ŸÄ9Ô"#'™ØD&FN2±‰LŒœdb™Ø.œÄ1Ô"#'™8D&V>I&N‘‰•?’‰Odbä$ŸÈÄÈI&N‘‰íÂIC-21r’‰Kdbå‹dâ™Øî÷IœC-21òAC-21òEC-21òCC-2±òF2±‰L¬|‘L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&¶û}çP‹LŒœdb™9ÉÄ&21r’‰]db{pÇP‹LŒœdâ™Xù$™8E&VþH&>‘‰‘“L|"óûC2qŠL¬|’Lœ"#'™¸D&V¾H&.‘‰í}ŸÄ9Ô"#Ÿ4Ô"#ß4Ô"#'™ØD&VÞH&6‘‰•/’‰[dbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄö¾Oâj‘‰‘“Ll"#'™ØD&VÞI&v‘‰ýNâj‘‰‘“L"+Ÿ$§ÈÄÊÉÄ'21r‰&øß¡þÍïÉÄ)2±òI2qŠL¬|‘L\"#'™¸D&öŸï“8‡Zdb䋆Zdb䇆Zdbä$›ÈÄÊÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dbä$·ÈÄþó}çP‹LŒœdb™9ÉÄ.2±òN2±‹Lì Nâj‘‰‘“L"+Ÿ$§ÈÄÊÉÄ'21òEC-2ñ7¿?$§ÈÄÊ'ÉÄ%2±òE2q‰LŒœdâ™ØÛ÷IœC-21òMC-21òKC-2±òF2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-21rú}D&öö}çP‹LŒœdb™Xy'™ØE&FN2±‹LìNâj‘‰‘“Lœ"+Ÿ$§ÈÄÊÉÄ'21òMC-2ñ7¿?$§ÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÞ¿Oâj‘‰‘j‘‰‘“Ll"+o$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"+?ô úˆLìýû$Ρ™9ÉÄ.2±òN2±‹LŒœdb™ØœÄ1Ô"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odb䇆Zdâo~H&.‘‰•/’‰Kdbä$—ÈÄÈI&n‘‰}|ŸÄ9Ô"#¿4Ô"+o$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™xD&V~èô™ØÇ÷IœC-2±òN2±‹LŒœdb™9ÉÄ.2±O8‰k¨§ÈÄÊ'ÉÄ)21r’‰Sdbådâ™ù¥¡™ø›ß’‰Kdbå‹dâ™9ÉÄ%2±òM2q‹Lìóû$Ρ™9ÉÄ&2±òF2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-2±òC2ñˆLŒœ¾A‘‰}~ŸÄ1Ô]dbådb™9ÉÄ.21r’‰]db_pÇP‹LŒœdâ™9ÉÄ)2±òG2ñ‰LŒüÑP‹LüÍïÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&öõ}çP‹L¬¼‘Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&FNß Èľ¾Oâj‘‰‘“Lì"#'™ØE&FN2±‹LìNâj‘‰‘“Lœ"#'™¸D&VþH&>‘‰¿ùß÷u1Ô"#'™¸D&V¾H&.‘‰‘“LÜ"+ß$·Èľ¿Oâø‹k"+o$›ÈÄÈI&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"+?$ÈÄÈI&‘‰‘Ó7è#2±ïï“8‡Zdbä$»ÈÄÈI&v‘‰‘“Lì"û“8†Zdbä$§ÈÄÊÉÄ%2±ò2ñÏÿêïëb¨E&FN2q‰L¬|‘L\"#'™¸E&V¾I&n‘‰¿ù_ôC-21r’‰Mdbä$›ÈÄÈI&6‘‰‘“Lì"+ß$·ÈÄÈI&‘‰•’‰Gdbä$ÈÄÈéô™ØÏ÷IœC-21r’‰]dbä$»ÈÄÈI&v‘‰ýÂIC-21r’‰Sdbå‹dâ™ø›ÿ}ïC-21òNC-21r’‰Kdbå‹dâ™9ÉÄ-2±òM2q‹Lì÷û$Ρ™9ÉÄ&21r’‰Mdbä$›ÈÄÊ;ÉÄ.2±òM2q‹L¬üL<"#'™xD&FN2ñˆLŒœ¾A‘‰ý~ŸÄ9Ô"#'™ØE&FN2±‹LŒœdâ™ØœÄ1Ô"#'™8E&V¾H&.‘‰ý}ŸÄ9Ô"#4Ô"+o$—ÈÄÊÉÄ%21r’‰[dbå›dâ™Øß÷IœC-21r’‰Mdbä$›ÈÄÈI&v‘‰•w’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™9}ƒ>"ûû>‰s¨E&FN2±‹LŒœdb™Xù ™8D&Ž8‰c¨E&FN2qŠL¬|‘L\"ÇÏ÷IœC-21r’‰Mdbådâ™Xù"™¸D&V¾I&n‘‰‘“LÜ"ÇÏ÷IœC-21r’‰Mdbä$›ÈÄÈI&v‘‰•w’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄÈéô™8~¾Oâj‘‰‘“Lì"#'™8D&V>H&‘‰£ÁIC-21r’‰Sdbå‹dâ™8Ú÷IœC-21r’‰Mdbådâ™Xù"™¸E&V¾I&n‘‰‘“LÜ"Gû>‰s¨E&FN2±‰LŒœdb™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™9}ƒ¾"Gû>‰s¨E&FN2±‹L¬|L"#'™8D&Ž'q µÈÄÈI&.‘‰•/’‰Kdâèß'qµÈÄÈI&6‘‰•7’‰Kdbå›dâ™9ÉÄ-21r’‰[dâèß'qµÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"+¿ô úŠLýû$Ρ™9ÉÄ!2±òA2qˆLŒœdâ™8œÄ1Ô"+_$—ÈÄÈI&.‘‰c|ŸÄ9Ô"#'™ØD&VÞH&n‘‰•o’‰[dbä$·ÈÄÈI&‘‰c|ŸÄ9Ô"#'™ØD&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñŠL¬üÒ7è+2qŒï“8‡Zdbåƒdâ™9ÉÄ!21r’‰Cdâ˜p×P/‘‰•/’‰Kdbä$—ÈÄ1¿Oâj‘‰‘“Ll"+o$·ÈÄÊ7ÉÄ-21r’‰[dbå‡dâ™8æ÷IœC-21r’‰]dbådb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbå—dâ™9}ƒ¾"Çü>‰c¨‡ÈÄÊÉÄ!21r’‰Cdbä$‡Èıà$Ž¡™9ÉÄ%21r’‰KdâXß'qµÈÄÈI&6‘‰•7’‰[dbå›dâ™9ÉÄ#2±òC2ñˆLëû$Ρ™Xy'™ØE&FN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ+2±òK2ñŠLŒœ¾A_‘‰c}ŸÄ9Ô"#'™8D&FN2qˆLŒœdâ™86œÄ1Ô"#'™¸D&FN2q‹Lûû$Ρ™Xy#™ØD&FN2q‹L¬|“LÜ"#'™xD&V~H&‘‰cŸÄñ×E&VÞI&v‘‰‘“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&V~I&^‘‰‘“L¼"#§oÐWdâØß'qµÈÄÈI&‘‰‘“L"#'™8D&Ž'q µÈÄÈI&.‘‰•o’‰[dâ8ß'q u™Xy#™ØD&FN2q‹L¬|“LÜ"#'™xD&V~H&‘‰¿ù_ôC-21r’‰]dbä$»ÈÄÈI&v‘‰‘“L"+?$ÈÄÈI&^‘‰•_’‰Wdbä$¯ÈÄÈéô™8Î÷IœC-21r’‰Cdbä$‡ÈÄÈI&‘‰ãÂIC-21r’‰Kdbå›dâ™ø›ÿ}ïC-21r’‰Mdbä$·ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™8î÷IœC-21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™9}ƒ¾"Çý>‰s¨E&FN2qˆLŒœdâ™9ÉÄ)2q<8‰c¨E&FN2q‰L¬|“LÜ"Çû>‰s¨E&FN2±‰L¬¼“LÜ"+ß$·ÈÄÈI&‘‰•’‰Gdâxß'qµÈÄÈI&v‘‰‘“Lì"#'™8D&V>H&‘‰•’‰Wdbå—dâ™9ÉÄ+21r’‰Wdbäô úŠLïû$Ρ™9ÉÄ!21r’‰Cdbå“dâ™8à$Ž¡™9ÉÄ%2±òM2q‹Lœ?ß'qµÈÄÈI&v‘‰•w’‰[dbå›dâ™Xù!™xD&FN2ñˆLœ?ß'qµÈÄÈI&v‘‰‘“Lì"#'™8D&V>H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"#§oÐWdâüù>‰s¨E&FN2qˆLŒœdâ™Xù$™8E&Î'q µÈÄÈI&.‘‰•o’‰[dâlß'qµÈÄÈI&v‘‰•w’‰[dbå›dâ™Xù!™xD&FN2ñˆLœíû$Ρ™9ÉÄ.21r’‰]dbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbäô ú‰Lœíû$Ρ™9ÉÄ!2±òI2qŠLŒœdâ™8;œÄ1Ô"#'™¸E&V¾I&n‘‰³ŸÄ9Ô"#'™ØE&VÞI&n‘‰•’‰Gdbä$ÈÄÈI&‘‰³ŸÄ9Ô"#'™ØE&FN2qˆL¬|L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL¬üÑ7è'2qöï“8‡Zdbä$§ÈÄÊ'ÉÄ)21r’‰SdâpÇP‹L¬|“LÜ"#'™¸E&Îñ}çP‹LŒœdb™Xy'™xD&V~H&‘‰‘“L<"#'™xE&Îñ}çP‹LŒœdb™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ'2±òGß ŸÈÄ9¾Oâj‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰sÂI\C½E&V¾I&n‘‰‘“LÜ"çü>‰s¨E&FN2±‹L¬¼“L<"+?$ÈÄÈI&‘‰•_’‰Wdâœß'qµÈÄÈI&‘‰•’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰•?’‰Odbäô ú‰Lœóû$Ž¡ž"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"ç‚“8†Zdbä$·ÈÄÈI&n‘‰s}ŸÄ9Ô"#'™ØE&VÞI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+2q®ï“8‡Zdbåƒdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$ŸÈÄÊÉÄ'21rúýD&Îõ}çP‹LŒœdâ™9ÉÄ)21r’‰SdâÜpÇP‹LŒœdâ™9ÉÄ#2qîï“8‡Zdbådb™9ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Îý}Ç_Ü™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœ¾A?‘‰sŸÄ9Ô"#'™8E&FN2qŠLŒœdâ™8œÄ1Ô"#'™¸E&V~H&‘‰ó|ŸÄ1Ô]dbådb™9ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&þæÑG µÈÄÈI&‘‰‘“L"#'™8D&FN2qŠL¬ü’L¼"#'™øD&VþH&>‘‰‘“L|"#§oÐOdâ<ß'qµÈÄÈI&N‘‰‘“Lœ"#'™8E&Î 'q µÈÄÈI&n‘‰•’‰Gdâoþ÷½s µÈÄÈI&v‘‰‘“L<"+?$ÈÄÈI&^‘‰•_’‰Wdâ¼ß'qµÈÄÈI&‘‰‘“L"#'™8D&V>I&N‘‰•_’‰Wdbådâ™9ÉÄ'21r’‰Odbäô ú‰Lœ÷û$Ρ™9ÉÄ)21r’‰Sdbä$—ÈÄùà$Ž¡™9ÉÄ-2±òC2ñˆLœïû$Ρ™9ÉÄ.2±òA2ñˆL¬üL<"#'™xE&V~I&^‘‰ó}ŸÄ9Ô"#'™8D&FN2qˆLŒœdâ™Xù$™8E&V~I&>‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘Ó7è'2q¾ï“8‡Zdbä$§ÈÄÈI&N‘‰•/’‰Kdâú“8†Zdbä$·ÈÄÊÉÄ#2qý|ŸÄ9Ô"#'™8D&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+2qý|ŸÄ9Ô"#'™8D&FN2qˆLŒœdâ™Xù$™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰LŒœ¾A?‘‰ëçû$Ρ™9ÉÄ)21r’‰Kdbå‹d♸œÄ1Ô"#'™¸E&V~H&‘‰«}ŸÄ9Ô"#'™8D&V>H&‘‰•’‰Wdbå—dâ™9ÉÄ+2qµï“8‡Zdbä$‡ÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰‘ƒþߘÈÄÕ¾Oâj‘‰‘“Lœ"+_$—ÈÄÈI&.‘‰«ÃIC-21r’‰Gdbå‡d♸ú÷IœC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœd♸ú÷IœC-21r’‰Cdbä$§ÈÄÊ'ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä$ŸÈÄõ«ó~~h¨E&V>I&N‘‰‘“L\"+_$—ÈÄÈI&.‘‰kÀIC-2±òC2ñˆLŒœd♸Æ÷IœC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœd♸Æ÷IœC-21r’‰Cdbå“dâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbäß2ñ?|¾þñÿÙãj‘‰•O’‰Sdbå‹dâ™9ÉÄ%21r’‰Kdâšp×P‘‰•’‰Gdbä$ÈÄ5¿Oâj‘‰‘“L"+$¯ÈÄÊ/ÉÄ+21r’‰Wdbåd♸æ÷IœC-21r’‰Sdbå“dâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odâš_'ñ¿C-21òNC-2±òI2q‰L¬|‘L\"#'™¸D&FN2q‰L\ Nâj‘‰‘“L<"#'™xD&®õ}çP‹LŒœdâ™Xù ™xE&V~I&^‘‰‘“L|"+$ŸÈĵ¾Oâj‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘ËÄ¿'ñŸ¡^_'ñ¿C-21òAC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰KdâÚpÇP‹LŒœdâ™9ÉÄ+2qíï“8‡Zdbåƒdâ™9ÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&®ý}ÇPO‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰kþJüÏP‹LŒ¼ÓP‹LŒ|ÒP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸œÄ1Ô"#'™xD&V~I&^‘‰ë|ŸÄ1ÔCdbåƒdâ™9ÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&þæÑG µÈÄÈI&N‘‰‘“Lœ"#'™8E&FN2q‰L¬ü‘L|"#ÿ–‰&øïPŸÏ_‰ÿj‘‰‘j‘‰‘/j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"×…“8†Zdbä$ÈÄÊ/ÉÄ+2ñ7ÿûÞ9†Zdbä$‡ÈÄÈI&^‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'2qÝï“8‡Zdbä$§ÈÄÈI&N‘‰‘“Lœ"+_$—ÈÄÊÉÄ'2qÝï‡9Ô"#ï4Ô"#Ÿ4Ô"#ß4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸E&®'q µÈÄÈI&‘‰•_’‰Wdâzß'qµÈÄÈI&‘‰•O’‰Wdbå—dâ™9ÉÄ'2±òG2ñ‰L\ïû$Ρ™9ÉÄ)21r’‰Sdbä$—ÈÄÊÉÄ%2±ò÷-ÿNðŸ¡~ß'r¨E&F>h¨E&F¾h¨E&F~h¨E&V¾H&.‘‰‘“L\"#'™¸D&V¾I&n‘‰ûNâj‘‰‘“L<"+¿$¯ÈÄýó}çP‹LŒœdâ™Xù$™xE&V~I&^‘‰•?’‰Odbä$ŸÈÄýó}çP‹LŒœdâ™9ÉÄ)21r’‰Kdbå‹d♸¾Oâj‘‰‘wj‘‰‘Oj‘‰‘oj‘‰‘_j‘‰•/’‰Kdbä$—ÈÄÈI&n‘‰•o’‰[dânpÇP‹LŒœdâ™Xù%™xE&îö}çP‹LŒœdâ™Xù$™xE&V~I&>‘‰•?’‰Odbä$ŸÈÄݾOâj‘‰‘“Lœ"#'™8E&V¾H&.‘‰‘“L\"wû>‰s¨E&F>h¨E&F¾h¨E&F~h¨E&FN2±‰L¬|‘L\"#'™¸D&V¾I&n‘‰‘“LÜ"w‡“8†Zdbä$¯ÈÄÊ/ÉÄ+2q÷ï“8‡Zdbä$§ÈÄÊ'ÉÄ+2±òG2ñ‰LŒœdâ™9ÉÄ'2q÷ï“8‡Zdbä$§ÈÄÈI&.‘‰•/’‰Kdbä$—ÈÄÝ¿Oâj‘‰‘Oj‘‰‘oj‘‰‘_j‘‰•7’‰Mdbå‹dâ™9ÉÄ-2±òM2q‹LŒœd♸œÄ1Ô"+¿$¯ÈÄÈI&^‘‰{|ŸÄ9Ô"#'™8E&V>I&>‘‰•?’‰Odbä$ŸÈÄÈA&¾‘‰{|ŸÄ9Ô"#'™8E&V¾H&.‘‰‘“L\"#'™¸D&îñ}çP‹LŒ|ÑP‹LŒüÐP‹LŒœdb™Xy#™ØD&V¾H&.‘‰•o’‰[dbä$·ÈÄÈI&n‘‰{ÂI\C}E&V~I&^‘‰‘“L¼"÷ü>‰s¨E&FN2qŠL¬|’L|"+$ŸÈÄÈI&>‘‰¿ùß=Ž¡™Xù$™8E&FN2q‰L¬|‘L\"#'™¸D&FN2q‰LÜóû$Ρ™ù¦¡™ù¥¡™Xy#™ØD&FN2±‰L¬|‘LÜ"+ß$·ÈÄÈI&n‘‰‘“LÜ"÷‚“8†Zdbä$¯ÈÄÈI&^‘‰{}ŸÄ9Ô"#'™8E&V>I&>‘‰•?’‰Odbä ÿLðŸ¡þj?†Zdbå“dâ™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2q¯ï“8‡Zdb䇆Zdbä$›ÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈĽá$Ž¡™9ÉÄ+21r’‰OdâÞß'qµÈÄÊ'ÉÄ)21r’‰Odbådâ™ù¦¡™ø›ÿÝãj‘‰•O’‰Kdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈĽ¿Oâj‘‰‘_j‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"÷“8†Zdbä$¯ÈÄÊÉÄ'2qŸï“8†zŠL¬|’Lœ"#'™øD&VþH&>‘‰‘j‘‰¿ùß=Ž¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%21r’‰[dâ>ß'qµÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"÷…“8†Zdbä$¯ÈÄÊÉÄ'2ñ7ÿûÞ9†Zdbä$§ÈÄÈI&>‘‰•?’‰Odbä—†Zdâoþwc¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L¬|“LÜ"÷ý>‰s¨E&VÞH&6‘‰‘“Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœd♸œÄ1Ô"#'™xE&VþH&>‘‰û}ŸÄ9Ô"#'™8E&V¾H&>‘‰•?’‰Odbä†Zdâoþwc¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‹L¬|“LÜ"÷û>‰c¨›ÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰•’‰Gdâù“8†Zdbä$¯ÈÄÊÉÄ'2ñü|ŸÄ9Ô"#'™¸D&V¾H&>‘‰•?’‰Odâoþ÷ÙF µÈÄÈ7 µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&n‘‰•o’‰[dâùù>‰s¨E&FN2±‰LŒœdb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰Gdbå‡dâ™xœÄ1Ô"#'™xE&VþH&>‘‰§}ŸÄ9Ô"#'™¸D&V¾H&>‘‰•?‰&øÏP7x¶C-21òCC-2±òE2q‰LŒœdâ™9ÉÄ%2±òM2q‹LŒœdâ™xÚ÷IœC-21r’‰Mdbä$›ÈÄÈI&6‘‰‘“Lì"+ß$·ÈÄÈI&n‘‰•’‰Gdbä$ÈÄÓá$Ž¡™9ÉÄ'2±òG2ñ‰L<ýû$Ρ™9ÉÄ%2±òE2ñ‰LüÍÿžÄ1Ô"#ï4Ô"#¿4Ô"+_$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄÈI&n‘‰§ŸÄ9Ô"#'™ØD&FN2±‰LŒœdb™Xy'™ØE&V¾I&n‘‰‘“L<"+?$ÈÄÈI&‘‰gÀIC-2±òG2ñ‰LŒœdâ™xÆ÷IœC-21r’‰Kdbå dâß—Ìÿõ€“8†Zdb䃆Zdbä$›ÈÄÊÉÄ%21r’‰Kdbå›dâ™9ÉÄ-21r’‰[dâß'qµÈÄÈI&6‘‰‘“Ll"#'™ØE&VÞI&v‘‰•o’‰[dbå‡dâ™9ÉÄ#21r’‰Gdâ™p×P?‘‰•?’‰Odbä$ŸÈÄ3¿Oâj‘‰‘“L\"+_‹†Zdâ™pÇP‹LŒ|ÒP‹L¬¼‘Ll"+_$—ÈÄÈI&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰g~ŸÄ9Ô"#'™ØD&FN2±‰L¬¼“Lì"#'™ØE&V¾I&‘‰•’‰Gdbä$ÈÄÈI&‘‰gÁIC-21r’‰Odbä$ŸÈij¾Oâj‘‰‘“L\"+_›†ZdâYpÇP‹LŒœdb™Xy#™ØD&V¾H&.‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"Ïú>‰s¨E&FN2±‰LŒœdb™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™x6œÄ1Ô"#'™øD&F2ñþˆL<ûû$Ρ™Xù"™¸D&F~h¨E&ž 'q µÈÄÈI&6‘‰•7’‰Mdbå‹dâ™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2ñìï“8‡Zdbä$›ÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰çÀIC-21r’‰Odâoþgs¨E&V>I&.‘‰•/’‰Kdbä—†Zdâ9pÇP‹LŒœdb™Xy#™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LŒœdâ™xÎ÷IœC-21r’‰]dbådb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄsá$Ž¡™9ÉÄ'2ñ7ÿ³Ç9Ô"+_$—ÈÄÈI&.‘‰‘?j‘‰çÂIC-21r’‰Mdbådb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2±òC2ñˆL<÷û$Ρ™Xy'™ØE&FN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰WdâypÇP‹LŒœdâ™ø›ÿÙãj‘‰•/’‰Kdbä$—ÈÄÊ÷ µÈÄóà$Ž¡™9ÉÄ&2±òF2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™Xù!™xD&ž÷}ÇPw‘‰•w’‰]dbä$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"+¿$¯ÈÄû'q µÈÄÈI&>‘‰¿ùŸ=Ρ™Xù"™¸D&FN2q‹L¬|7j‘‰÷Nâj‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&‘‰•’‰Gdâýù>‰s¨E&FN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Wdbå—dâ™xœÄ1Ô"#'™øD&þæö8‡Zdbå‹dâ™9ÉÄ-2±òÝi¨E&Þ'q u™Xy#™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹L¬üL<"#'™xD&Þö}çP‹LŒœdb™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ#21r’‰Gdbå—dâ™9ÉÄ+2ñv8‰c¨E&F2ñŸÏ„ÿê_Ü÷³h¨E&V¾H&.‘‰‘“LÜ"+߃†Zdâoþ÷$Ž¡™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰Gdbå‡dâ™9ÉÄ#2ñöï“8‡Zdbä$»ÈÄÈI&v‘‰‘“Lì"+$‡ÈÄÊÉÄ#21r’‰Wdbå—dâ™9ÉÄ+2ñ8‰c¨E&þæžmäP‹LŒ|ÓP‹L¬|‘L\"#'™¸E&V¾I&6‘‰¿ùß“8†Zdbä$›ÈÄÈI&v‘‰•o’‰[dbä$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄ;¾Oâj‘‰‘“Lì"#'™ØE&FN2qˆL¬|L"+?$ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄ;á$þê¿/™ÿêùýl#‡Zdb䇆Zdbå‹dâ™9ÉÄ-2±òM2±‰L¼Nâj‘‰‘“Ll"+ï$»ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™9ÉÄ#21r’‰Gdâß'qµÈÄÈI&v‘‰‘“Lì"+$‡ÈÄÈI&‘‰•’‰Wdbå—dâ™9ÉÄ+21r’‰Wdâ]pÇP‹LŒ¼ÓP‹LŒüÒP‹L¬|‘L\"#'™¸E&V¾I&6‘‰wÁIC-21r’‰]dbådb™Xù&™¸E&V~H&‘‰‘“L<"#'™xD&FN2ñˆL¼ëû$Ρ™9ÉÄ.21r’‰Cdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰WdâÝpÇP‹LŒ|ÐP‹LŒœdb™Xù"™¸D&V¾I&n‘‰‘“Ll"8†Zdbä$»ÈÄÊ;ÉÄ.2±òM2ñˆL¬üL<"#'™xD&FN2ñˆLŒœdâ™x÷÷IœC-21r’‰]dbåƒdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄ{à$Ž¡™ù¤¡™Xy#™ØD&V¾H&n‘‰•o’‰[dbä$›ÈÄ{à$Ž¡™9ÉÄ.2±òN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™9ÉÄ+2ñžï“8‡Zdbä$‡ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰÷ÂIC-21òEC-2±òF2±‰L¬|“LÜ"#'™¸E&FN2±‰L¼Nâj‘‰‘“Lì"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰•_’‰Wdâ½ß'qµÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L|"8†Zdb䛆Zdbådb™Xù&™¸E&FN2q‹L¬üLl"8†Zdbä$»ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Wdbå—dâ™xß÷IC=D&V>H&‘‰‘“L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠL¬ü‘L|"ßœÄ1Ô"#?4Ô"+o$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø~à$Ž¡™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù%™xE&¾Ÿï“8‡Zdbä$‡ÈÄÈI&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™øD&VþH&>‘‰¯ÁIC-21òKC-2±òF2±‰L¬|“LÜ"#'™xD&V~H&6‘‰¯ÁI\CÝE&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"+¿$¯ÈÄÈI&^‘‰¯}ŸÄ9Ô"#'™8D&FN2qˆLŒœdâ™9ÉÄ)2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰L|Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø›ÿ=‰c¨E&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™Xù%™xE&FN2ñŠL|ýû$Ρ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ'ÉÄ)2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰L|Nâj‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø›ÿ=‰c¨E&FN2±‹LŒœdâ™Xù!™xD&FN2ñˆL¬ü’L¼"#'™xE&FN2ñŠL|ãû$Ρ™9ÉÄ!21r’‰Cdbä$§ÈÄÊ'ÉÄ)2±òK2ñŠL¬ü‘L|"#'™øD&FN2ñ‰L|Nâê&2±òF2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üLì"ß„“8†Zdbä$»ÈÄÊÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™øæ÷IœC-21r’‰Cdbä$‡ÈÄÊ'ÉÄ)21r’‰Sdbå—dâ™Xù#™øD&FN2ñ‰LŒœdâ™øœÄ1Ô"#'™ØD&FN2±‰L¬|“LÜ"#'™xD&V~H&v‘‰oÁIC-21r’‰Cdbåƒdâ™Xù!™xD&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL|ëû$Ρ™9ÉÄ!21r’‰Sdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r’‰OdâÛpÇP‹LŒœdb™9ÉÄ.2±òM2q‹L¬üL<"#'™ØE&¾ 'q µÈÄÈI&‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñíï“8‡Zdbä$‡ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰ïÀIC-21r’‰Mdbådb™Xù&™xD&V~H&‘‰‘“Lì"ß“8†Zdbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbä$ŸÈÄw¾Oâj‘‰‘“Lœ"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&¾ 'q µÈÄÈI&6‘‰•w’‰]dbå‡dâ™9ÉÄ#21r’‰]dâ»pÇP‹LŒœdâ™Xù ™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL¬ü‘L|"ßý>‰s¨E&V>I&N‘‰‘“Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒdbû™øœÄ1Ô"#'™ØD&VÞI&v‘‰•’‰Gdbä$ÈÄÊ/ÉÄ.2ñ=8‰c¨E&FN2qˆL¬|L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™øD&VþH&>‘‰ï}ŸÄ1ÔSdbå“dâ™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄßüß=þg¨Y&þôß“8†šebæ$ËÄÈ;ÉÄÎ21òC2ñ°LÌœdâe™ù%™ØY&Vþ÷$Ž¡f™ù ™8X&fN2q°LŒü’L¼,3'™xY&fN2ñ²LÌœdâc™ù#™øX&þæ÷8‡šebæ$'ËÄÌI&N–‰™“Lœ,3'™8Y&FþH&>–‰™“L|,3™øÏÿêÊÿÝㆺËP78‰c¨ uû~¶‘Cýd¨óN2±/êö}çPOêïëb¨› õo~I&ö+CÝà$®¡?2Ô žmÄPoêÊI&Ž+CݾOâê%CݾOâê#CݾOâê'Cݾ»È¡î2Ô•“L|S†º}ŸÄ9Ô]†º}?œÈ¡ž2ÔíóWâ†zËP·¯“øß¡¾2Ô•“L\?2Ôíû$Ρ>2Ôíó$þg¨Ÿ uû<‰ÿê&C]y§¡2ÔNâê+CÝ¿ŸmÄP÷êß¼“Lì[†ºŸÄ9ÔK†ºÃûºê.Cý›_’‰ýÉPw8‰c¨› u‡g1ÔG†ºr’‰ãÉP÷ï“8‡zËP÷ï“8‡úÊP÷ï“8†úýÈP÷ïß.r¨‡ uå$ß’¡îß'qõ¡îß'r¨— uÿü•øŸ¡>2Ôýë$þw¨Ÿ õo¾H&®&CÝ¿Oâê+CÝ?Oâê?¿ÿêþyÿ3Ô]†ºòAC=e¨œÄ1ÔO†z|?ÛÈ¡n2Ô•“LìG†z|ŸÄ9Ô[†zÀûºê!Cý›_’‰ãG†zÀICÝe¨<Ûˆ¡¾2Ô•“Lœ?2Ôãû$Ρ>2Ôãû$Ρ~2Ôãû$Ρn2Ôãû·‹ê)C]9ÉÄ·e¨Ç÷IœC=e¨Ç÷Éê-C=>%þg¨¯ õø:‰ÿêõ#Cý›/’‰«ËPï“8‡úÉPÏ“øŸ¡n2Ôãó$þg¨‡ u哆zÉPO8‰k¨û õü~¶‘CÝe¨+'™Ø¯ õü>‰s¨ õ„÷u1ÔS†ú7¿$G“¡žpÇPê Ï6b¨Ÿ õo>I&Î&C=¿Oâê+C=¿Oâê÷#C=¿Oâê.C=¿»È¡^2Ô•“L|G†z~ŸÄ9ÔK†z~?œÈ¡>2ÔóóWâ†úÉPϯ“øß¡n2Ô•“L\C†z~ŸÄ5ÔíçG†z~žÄÿ u—¡žŸ'ñ?C=e¨+_4Ô[†zÁICÝd¨×÷³ê!C]9ÉÄþd¨×÷IœC}e¨¼¯‹¡^2Ô¿ù%™8º õ‚“8†zÊP/x¶QC=d¨óI2qvêõ}çP?êõ}çP7êõ}çPêõýÛEõ–¡®œdâ»2Ôëû$ΡÞ2ÔëûáDõ•¡^Ÿ¿çP¯êõuÿ;Ô]†ºr’‰kÊP¯ï“8‡ºÉP¯Ï“øŸ¡2Ôëó$þg¨— u囆úÈPo8‰c¨» õþ~¶‘C=e¨+'™8~d¨÷÷IœCýd¨7¼¯‹¡Þ2Ô•“LC†zÃIC½d¨7<Ûˆ¡n2Ô¿ù$™8‡ õþ>‰c¨ß õþ>‰s¨» õþ>‰s¨§ õþþí"‡úÈPWN2ñ=êý}çPêýýp"‡úÉPïÏ_‰ÿê&C½¿Nâ‡zÈPWN2q-êý}çPwêýyÿ3ÔS†zžÄÿ õ–¡®üÐP_ê'q õ¡>ßÏ6r¨— õo>H&Ž&C}¾Oâêû#C}à}] õ‘¡®œdâ˜2ÔNâê-C}àÙF u—¡þÍ'ÉÄ9e¨Ï÷IœCÝd¨Ï÷IœC=d¨Ï÷IœC½d¨Ï÷o9ÔW†ºòo™ø¿ÿK~d¨Ï÷IœC}e¨Ï÷Éêõ#C}>%þg¨» õù:‰ÿê)C]9Éĵe¨Ï÷IœC=d¨ÏçIüÏP/êóyÿ3ÔG†ºòKCýd¨/œÄ1ÔS†ú~?ÛÈ¡Þ2Ô¿ù ™8º õý>‰s¨› õ…÷u1ÔW†ºr’‰cÉP_8‰c¨ õ…g1ÔC†ú7Ÿ$ç’¡¾ß'qu—¡¾ß'qõ”¡¾ß'qõ–¡¾ß¿]äP?ê_böóCCÝd¨ï÷IœCýd¨ï÷Éê&C}?%þg¨‡ õý:‰ÿê%C]9ÉÄud¨ï÷IœC=e¨ïçIüÏPoêûyÿ3ÔW†ºr’‰íG†úÁIC½d¨ß÷³ê#Cý›’‰cÈP¿ï“8‡ºËP?x_Cýd¨óG2qlê'q õ•¡~ðl#†zÊPÿæ“dâÜ2Ôïû$Ρ2Ôïû$Ρ^2Ôïû$Ρ>2Ôïû·‹ß¡þ;Á†úW¨ý4ê.Cý¾Oâêõ#Cý¾NäPwê÷ù+ñ?C=e¨ß×IüïPoêÊI&®+Cý¾Oâê%Cý>Oâ†úÈP¿Ï“øŸ¡~2Ô¿y#™ØD&¶8‰c¨E&FN2±‹L¬|L"+¿$¯ÈÄÈI&>‘‰•?’‰Cdbû“8†Zdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21òGC-2±ý µŸNC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbä$—ÈÄöó}çP‹LŒüÐP‹LŒœdb™Xy#™ØD&¶'q µÈÄÈI&v‘‰•’‰Cdbå—dâ™9ÉÄ'2±òG2qˆLl Nâê)2±òI2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™ØÚ÷o9Ô"#4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&FN2q‹Llíû$Ρ™ù¥¡™Xy#™ØD&FN2±‰LlNâj‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™ø›ÿ=‰c¨E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒü[&þà?CÝ¿»È¡™ù¤¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2±òM2q‹Llýû$Ρ™9ÉÄ&2±òF2±‰LŒœdb™ØœÄ1Ô"+$‡ÈÄÈI&‘‰•_’‰Wdbä$ŸÈÄÊÉÄ)2ñ7ÿ{ÇP‹LŒœdâ™9ÉÄ%2±òG2ñ‰LŒœdâ™ØÆ÷IœC-21òNC-21òEC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰[dbå›dâ™ØÆ÷IœC-2±òF2±‰LŒœdb™9ÉÄ&2±M8‰k¨‡ÈÄÊÉÄ!21r’‰Cdbå—dâ™9ÉÄ'2±òG2qŠLlNâj‘‰‘“Lœ"+_$—ÈÄÊÉÄ'21òo™øŸnÿõü>‰s¨E&F>h¨E&F¾i¨E&V¾H&.‘‰‘“L\"#'™¸D&V¾I&n‘‰‘“LÜ"Ûü>‰c¨›ÈÄÊÉÄ&21r’‰Mdbä$›ÈĶà$Ž¡™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ'2±òG2qŠLl Nâj‘‰‘“L\"+_$—ÈÄÊÉÄ'2±­ï“8‡Zdbä†Zdb䓆Zdb䇆Zdbå‹dâ™9ÉÄ%21r’‰[dbå›dâ™9ÉÄ-2ñ7ÿ»Ç1Ô"#'™ØD&FN2±‰LŒœdb™Ø6œÄ1Ô"#'™8D&FN2qŠL¬ü’L¼"+$ŸÈÄÈI&N‘‰mÃIC-21r’‰Kdbå‹dâ™Xù£¯B?"Ûþ>‰s¨E&F>h¨E&F¾h¨E&F~i¨E&V¾H&.‘‰‘“L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"ó¿{C-21r’‰Mdbä$›ÈÄÈI&6‘‰íÀIC-21r’‰Cdbå“dâ™Xù%™øD&VþH&>‘‰‘“Lœ"Û“8†Zdbä$—ÈÄÊÉÄ%2±ï“8‡Zdbä†Zdb䓆Zdb䛆Zdbä$›ÈÄÊÉÄ%21r’‰[dbå›dâ™9ÉÄ-21r’‰[dâoþwc¨E&FN2±‰LŒœdb™9ÉÄ&2±]8‰c¨E&FN2qˆL¬|’Lœ"+$ŸÈÄÈI&>‘‰‘“Lœ"Û…“8†Zdbä$—ÈÄÊÉÄ%2±Ýï“8‡Zdb䃆Zdb䋆Zdb䇆Zdbådb™Xù"™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LüÍÿîq µÈÄÈI&6‘‰‘“Ll"#'™ØE&¶'q µÈÄÈI&‘‰•O’‰Sdbådâ™9ÉÄ'2ñ7?$§ÈÄÊ'ÉÄ)21r’‰Kdbå‹dâ™ØÞ÷IœC-21òIC-21òMC-21r’‰Mdbådb™Xù"™¸E&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹Llïû$Ρ™9ÉÄ&21r’‰Mdbådb™Øà$Ž¡™9ÉÄ!2±òI2qŠL¬ü‘L|"#™øg‚ÿêßüýLœ"+Ÿ$§ÈÄÊÉÄ%21r’‰Kdbÿù>‰s¨E&F¾h¨E&F~h¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&FN2q‹Lì?ß'qµÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÞà$Ž¡™9ÉÄ!2±òI2qŠL¬ü‘L|"#_4Ô"ó÷C2qŠL¬|’L\"+_$—ÈÄÈI&.‘‰½}ŸÄ9Ô"#ß4Ô"#¿4Ô"+o$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"#§oÐGdboß'qµÈÄÈI&6‘‰•w’‰]dbä$»ÈÄÞá$Ž¡™9ÉÄ)2±òI2qŠL¬ü‘L|"#ß4Ô"ó÷C2qŠL¬|‘L\"#'™¸D&FN2q‰Lìýû$Ρ™ù¡¡™9ÉÄ&2±òF2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2±òCß ÈÄÞ¿Oâj‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰}ÀIC-2±òI2qŠLŒœdâ™Xù#™øD&F~h¨E&þæï‡dâ™Xù"™¸D&FN2q‰LŒœdâ™ØÇ÷IœC-21òKC-2±òF2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰Gdb凾A‘‰}|ŸÄ9Ô"+ï$»ÈÄÈI&v‘‰‘“Lì"û„“¸†zŠL¬|’Lœ"#'™8E&VþH&>‘‰‘_j‘‰¿ùû!™¸D&V¾H&.‘‰‘“L\"+ß$·ÈÄ>¿Oâj‘‰‘“Ll"+o$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"+?$ÈÄÈéô™Øç÷ICÝE&VÞI&v‘‰‘“Lì"#'™ØE&ö'q µÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈ µÈÄßüýL\"+_$—ÈÄÈI&n‘‰•o’‰[db_ß'qµÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&‘‰•’‰Gdbäô úˆLüÍÿîq µÈÄÈI&v‘‰‘“Lì"#'™ØE&ö 'q µÈÄÈI&N‘‰‘“L\"+$ŸÈÄßüïûºj‘‰‘“L\"+_$—ÈÄÈI&n‘‰•o’‰[dbßß'qüÅ5‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰•’‰Gdbä$ÈÄÈéô™ø›ÿÝãj‘‰‘“Lì"#'™ØE&FN2±‹LìNâj‘‰‘“Lœ"+_$—ÈÄÊÈÄ?üg¨¼¯‹¡™9ÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&öó}çP‹LŒœdb™9ÉÄ&21r’‰Mdbä$»ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™9ÉÄ#21rú}D&þæ÷8†Zdbä$»ÈÄÈI&v‘‰‘“Lì"û…“8†Zdbä$§ÈÄÊÉÄ%2ñ7ÿûÞ9†Zdbä†Zdbä$—ÈÄÊÉÄ%21r’‰[dbå›dâ™Øï÷IœC-21r’‰Mdbä$›ÈÄÈI&6‘‰•w’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™9}ƒ>"ó¿{C-21r’‰]dbä$»ÈÄÈI&‘‰ýÁIC-21r’‰Sdbå‹dâ™Øß÷IœC-21òAC-2±òF2q‰L¬|‘L\"#'™¸E&V¾I&n‘‰ý}ŸÄ9Ô"#'™ØD&FN2±‰LŒœdb™Xy'™ØE&V¾I&‘‰•’‰Gdbä$ÈÄÈI&‘‰‘Ó7è#2±¿ï“8‡Zdbä$»ÈÄÈI&v‘‰•’‰Cdâø“8†Zdbä$§ÈÄÊÉÄ%2qü|ŸÄ9Ô"#'™ØD&VÞH&.‘‰•/’‰Kdbå›dâ™9ÉÄ-2qü|ŸÄ9Ô"#'™ØD&FN2±‰LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆLŒœ¾A‘‰ãçû$Ρ™9ÉÄ.21r’‰Cdbåƒdâ™8œÄ1Ô"#'™8E&V¾H&.‘‰£}ŸÄ9Ô"#'™ØD&VÞH&.‘‰•/’‰[dbå›dâ™9ÉÄ-2q´ï“8‡Zdbä$›ÈÄÈI&6‘‰•w’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰‘Ó7è+2q´ï“8‡Zdbä$»ÈÄÊÉÄ!21r’‰CdâèpÇP‹LŒœdâ™Xù"™¸D&Žþ}çP‹LŒœdb™Xy#™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&Žþ}çP‹LŒœdb™9ÉÄ.2±òN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2±òKß ¯ÈÄÑ¿Oâj‘‰‘“L"+$‡ÈÄÈI&‘‰cÀIC-2±òE2q‰LŒœdâ™8Æ÷IœC-21r’‰Mdbådâ™Xù&™¸E&FN2q‹LŒœdâ™8Æ÷IœC-21r’‰Mdbådb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$¯ÈÄÊ/}ƒ¾"Çø>‰s¨E&V>H&‘‰‘“L"#'™8D&Ž 'q õ™Xù"™¸D&FN2q‰Lóû$Ρ™9ÉÄ&2±òF2q‹L¬|“LÜ"#'™¸E&V~H&‘‰c~ŸÄ9Ô"#'™ØE&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&V~I&^‘‰‘Ó7è+2qÌï“8†zˆL¬|L"#'™8D&FN2qˆL Nâj‘‰‘“L\"#'™¸D&Žõ}çP‹LŒœdb™Xy#™¸E&V¾I&n‘‰‘“L<"+?$Èı¾Oâj‘‰•w’‰]dbä$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L¼"+¿$¯ÈÄÈéô™ø›ÿÝãj‘‰‘“L"#'™8D&FN2qˆLNâj‘‰‘“L\"#'™¸E&Žý}çP‹L¬¼‘Ll"#'™¸E&V¾I&n‘‰‘“L<"+?$Èı¿Oâø‹ë"+ï$»ÈÄÈI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"+¿$¯ÈÄÈI&^‘‰‘Ó7è+2ñ7ÿ»Ç1Ô"#'™8D&FN2qˆLŒœdâ™8œÄ1Ô"#'™¸D&V¾I&n‘‰ã|ŸÄ1ÔMdbådb™9ÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&Žó}çP‹LŒœdb™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ#21r’‰Wdbå—dâ™9ÉÄ+21rú}E&þæ÷8†Zdbä$‡ÈÄÈI&‘‰‘“L"Ç…“8†Zdbä$—ÈÄÊ7ÉÄ-2ñ7ÿûÞ9†Zdbä$›ÈÄÈI&n‘‰•o’‰[dbä$ÈÄÊÉÄ#2qÜï“8‡Zdbä$»ÈÄÈI&v‘‰‘“Lì"+$‡ÈÄÊÉÄ#2±òK2ñŠLŒœdâ™9ÉÄ+21rú}E&þæ÷8†Zdbä$‡ÈÄÈI&‘‰‘“Lœ"ǃ“8†Zdbä$—ÈÄÊ7ÉÄ-2q¼ï“8‡Zdbä$›ÈÄÊ;ÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&Ž÷}çP‹LŒœdb™9ÉÄ.21r’‰Cdbåƒdâ™Xù!™xE&V~I&^‘‰‘“L¼"#'™xE&FNß ¯ÈÄñ¾Oâj‘‰‘“L"#'™8D&V>I&N‘‰óNâj‘‰‘“L\"+ß$·ÈÄùó}çP‹LŒœdb™Xy'™¸E&V¾I&n‘‰•’‰Gdbä$ÈÄùó}çP‹LŒœdb™9ÉÄ.21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+21rú}E&Οï“8‡Zdbä$‡ÈÄÈI&N‘‰•O’‰SdâlpÇP‹LŒœdâ™Xù&™¸E&Îö}çP‹LŒœdb™Xy'™¸E&V¾I&‘‰•’‰Gdbä$ÈÄÙ¾Oâj‘‰‘“Lì"#'™ØE&V>H&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&FNß ŸÈÄÙ¾Oâj‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰³ÃIC-21r’‰[dbå›dâ™8û÷IœC-21r’‰]dbådâ™Xù!™xD&FN2ñˆLŒœdâ™8û÷IœC-21r’‰]dbä$‡ÈÄÊÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄÊ}ƒ~"gÿ>‰s¨E&FN2qŠL¬|’Lœ"#'™8E&Î'q µÈÄÊ7ÉÄ-21r’‰[dâß'qµÈÄÈI&v‘‰•w’‰Gdbå‡dâ™9ÉÄ#21r’‰Wdâß'qµÈÄÈI&v‘‰•’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L|"+ô ú‰Lœãû$Ρ™Xù$™8E&FN2qŠLŒœdâ™8'œÄ5Ô[dbå›dâ™9ÉÄ-2qÎï“8‡Zdbä$»ÈÄÊ;ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Îù}çP‹LŒœdâ™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™Xù#™øD&FNß ŸÈÄ9¿Oâê)2±òI2qŠLŒœdâ™9ÉÄ)2q.8‰c¨E&FN2q‹LŒœdâ™8×÷IœC-21r’‰]dbådâ™Xù!™xD&FN2ñŠL¬ü’L¼"çú>‰s¨E&V>H&‘‰‘“L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñ‰L¬ü‘L|"#§oÐOdâoþwc¨E&FN2qŠLŒœdâ™9ÉÄ)2qn8‰c¨E&FN2q‹LŒœdâ™8÷÷IœC-2±òN2±‹LŒœdâ™Xù!™xD&FN2ñŠL¬ü’L¼"çþ>‰ã/nˆL¬|L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠL¬ü‘L|"#'™øD&FNß ŸÈÄßüïÇP‹LŒœdâ™9ÉÄ)21r’‰Sd⑉•?’‰Odbä$ŸÈÄÈéô™ø›ÿÝãj‘‰‘“Lœ"#'™8E&FN2qŠLœNâj‘‰‘“LÜ"+?$ÈÄßüï{çj‘‰‘“Lì"#'™xD&V~H&‘‰‘“L¼"+¿$¯ÈÄy¿Oâj‘‰‘“L"#'™8D&FN2qˆL¬|’Lœ"+¿$¯ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈéô™ø›ÿÝãj‘‰‘“Lœ"#'™8E&FN2q‰LœNâj‘‰‘“LÜ"+?$ÈÄù¾Oâj‘‰‘“Lì"+$ÈÄÊÉÄ#21r’‰Wdbå—dâ™8ß÷IœC-21r’‰Cdbä$‡ÈÄÈI&N‘‰•O’‰Sdbå—dâ™Xù#™øD&FN2ñ‰LŒœdâ™9}ƒ~"çû>‰s¨E&FN2qŠLŒœdâ™Xù"™¸D&®8‰c¨E&FN2q‹L¬üL<"×Ï÷IœC-21r’‰Cdbåƒdâ™Xù!™xD&V~I&^‘‰‘“L¼"×Ï÷IœC-21r’‰Cdbä$‡ÈÄÈI&N‘‰•O’‰Sdbådâ™9ÉÄ'21r’‰Odbä$ŸÈÄÈéô™¸~¾Oâj‘‰‘“Lœ"#'™¸D&V¾H&.‘‰«ÁIC-21r’‰[dbå‡d♸Ú÷IœC-21r’‰Cdbåƒdâ™Xù!™xE&V~I&^‘‰‘“L¼"Wû>‰s¨E&FN2qˆLŒœdâ™Xù$™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™9|ƒn?"Wû>‰s¨E&FN2qŠL¬|‘L\"#'™¸D&®'q µÈÄÈI&‘‰•’‰Gdâêß'qµÈÄÈI&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdâêß'qµÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"ó¿{C-2±òI2qŠLŒœdâ™Xù"™¸D&FN2q‰L\Nâj‘‰•’‰Gdbä$ÈÄ5¾Oâj‘‰‘“L"+$¯ÈÄÊ/ÉÄ+21r’‰Wdbä$ŸÈÄ5¾Oâj‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#™øw‚Ïç?þïÇP‹L¬|’Lœ"+_$—ÈÄÈI&.‘‰‘“L\"ׄ“¸†úˆL¬üL<"#'™xD&®ù}çP‹LŒœdâ™Xù ™xE&V~I&^‘‰‘“L¼"+$ŸÈÄ5¿Oâj‘‰‘“Lœ"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"óöøß¡™y§¡™Xù$™¸D&V¾H&.‘‰‘“L\"#'™¸D&®'q µÈÄÈI&‘‰‘“L<"×ú>‰s¨E&FN2qˆL¬|L¼"+¿$¯ÈÄÈI&>‘‰•?’‰OdâZß'qµÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈA&þ9‰ÿ õú:‰ÿj‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"׆“8†Zdbä$ÈÄÈI&^‘‰kŸÄ9Ô"+$‡ÈÄÈI&^‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'2qíï“8†zŠL¬|’Lœ"#'™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LüÍÿÝã†Zdbä†Zdb䓆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈÄuà$Ž¡™9ÉÄ#2±òK2ñŠL\çû$Ž¡"+$‡ÈÄÈI&^‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'2qï“8‡Zdbä$§ÈÄÈI&N‘‰‘“Lœ"#'™¸D&VþH&>‘‰‘ƒLüw‚ÿõùü•øŸ¡™ù ¡™ù¢¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2q]8‰c¨E&FN2ñˆL¬ü’L¼"ó¿ïc¨E&FN2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"×ý>‰s¨E&FN2qŠLŒœdâ™9ÉÄ)2±òE2q‰L¬ü‘L|"ó??QäP‹LŒ¼ÓP‹LŒ|ÒP‹LŒ|ÓP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸œÄ1Ô"#'™xD&V~I&^‘‰ë}ŸÄ9Ô"#'™8D&V>I&^‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'2q½ï“8‡Zdbä$§ÈÄÈI&N‘‰‘“L\"+_$—ÈÄÊÈÄ?üg¨ß÷Éj‘‰‘j‘‰‘/j‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰•o’‰[dâþ“8†Zdbä$ÈÄÊ/ÉÄ+2qÿ|ŸÄ9Ô"#'™8E&V>I&^‘‰•_’‰Wdbådâ™9ÉÄ'2qÿ|ŸÄ9Ô"#'™8E&FN2qŠLŒœdâ™Xù"™¸D&þæö8‡Zdbä†Zdb䓆Zdb䛆Zdbä—†Zdbå‹dâ™9ÉÄ%21r’‰[dbå›d♸œÄ1Ô"#'™xD&V~I&^‘‰»}ŸÄ9Ô"#'™8E&V>I&^‘‰•_’‰Odbådâ™9ÉÄ'2q·ï“8‡Zdbä$§ÈÄÈI&N‘‰•/’‰Kdbä$—ÈÄßüÏçP‹LŒ|ÐP‹LŒ|ÑP‹LŒüÐP‹LŒœdb™Xù"™¸D&FN2q‰L¬|“LÜ"#'™¸E&î'q µÈÄÈI&^‘‰•_’‰Wdâîß'qµÈÄÈI&N‘‰•O’‰Wdbådâ™9ÉÄ'21r’‰Odâîß'qµÈÄÈI&N‘‰‘“L\"+_$—ÈÄÈI&.‘‰»ŸÄ9Ô"#Ÿ4Ô"#ß4Ô"#¿4Ô"+o$›ÈÄÊÉÄ%21r’‰[dbå›dâ™9ÉÄ-2q8‰c¨E&V~I&^‘‰‘“L¼"÷ø>‰s¨E&FN2qŠL¬|’L|"+$ŸÈÄÈI&>‘‰‘ËÄÿý§ŠLÜãû$Ρ™9ÉÄ)2±òE2q‰LŒœdâ™9ÉÄ%2qï“8‡Zdb䋆Zdb䇆Zdbä$›ÈÄÊÉÄ&2±òE2q‰L¬|“LÜ"#'™¸E&FN2q‹LÜNâê+2±òK2ñŠLŒœd♸ç÷IœC-21r’‰Sdbå“dâ™Xù#™øD&FN2ñ‰LÜ¿Bí燆Zdbå“dâ™9ÉÄ%2±òE2q‰LŒœdâ™9ÉÄ%2qÏï“8‡Zdb䛆Zdbä—†Zdbådb™9ÉÄ&2±òE2q‹L¬|“LÜ"#'™¸E&FN2q‹LÜ Nâj‘‰‘“L¼"#'™xE&îõ}çP‹LŒœdâ™Xù$™øD&VþH&>‘‰‘ËÄ¿üg¨…ÚO£¡™Xù$™8E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰LÜëû$Ρ™ù¡¡™9ÉÄ&2±òF2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2qo8‰c¨E&FN2ñŠLŒœd♸÷÷IœC-2±òI2qŠLŒœdâ™Xù#™øD&F¾i¨E&î_àöÓi¨E&V>I&.‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"÷þ>‰s¨E&F~i¨E&VÞH&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LÜNâj‘‰‘“L¼"+$ŸÈÄ}¾Oâê)2±òI2qŠLŒœdâ™Xù#™øD&F~h¨E&î_àö3h¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰LŒœd♸Ï÷IœC-21r’‰Mdbådb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄ}á$Ž¡™9ÉÄ+2±òG2ñ‰LüÍÿ¾wŽ¡™9ÉÄ)21r’‰Odbådâ™ù¥¡™¸}ÜϤ¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2±òM2q‹LÜ÷û$Ρ™Xy#™ØD&FN2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰Gdâ~pÇP‹LŒœdâ™Xù#™øD&î÷}çP‹LŒœdâ™Xù"™øD&VþH&>‘‰‘?j‘‰û×Çý,j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄý¾Oâê&2±òF2±‰LŒœdb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbå‡dâ™x~à$Ž¡™9ÉÄ+2±òG2ñ‰L‘‰§}ŸÄ9Ô"#'™¸D&V¾H&>‘‰•¿o™øw‚ÿ uƒg1Ô"#?4Ô"+_$—ÈÄÈI&.‘‰‘“L\"+ß$·ÈÄÈI&n‘‰¿ùŸ=Ρ™9ÉÄ&21r’‰Mdbä$›ÈÄÈI&v‘‰•o’‰[dbä$·ÈÄÊÉÄ#21r’‰GdâépÇP‹LŒœdâ™Xù#™øD&žþ}çP‹LŒœdâ™Xù"™øD&ž'q µÈÄÈ; µÈÄÈ/ µÈÄÊÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-21r’‰[dâéß'qµÈÄÈI&6‘‰‘“Ll"#'™ØD&VÞI&v‘‰•o’‰[dbä$ÈÄÊÉÄ#21r’‰GdâpÇP‹L¬ü‘L|"#'™øD&žñ}çP‹LŒœdâ™Xùú–‰ÿyÉüïP8‰c¨E&F>h¨E&FN2±‰L¬|‘L\"#'™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&žñ}çP‹LŒœdb™9ÉÄ&21r’‰]dbådb™Xù&™¸E&V~H&‘‰‘“L<"#'™xD&ž 'q õ™Xù#™øD&FN2ñ‰L<óû$Ρ™9ÉÄ%2±òµh¨E&ž 'q µÈÄÈ' µÈÄÊÉÄ&2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LŒœdâ™xæ÷IœC-21r’‰Mdbä$›ÈÄÊ;ÉÄ.21r’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™xœÄ1Ô"#'™øD&FN2ñ‰L<ëû$Ρ™9ÉÄ%2±òµi¨E&ž'q µÈÄÈI&6‘‰•7’‰Mdbå‹dâ™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2ñ¬ï“8‡Zdbä$›ÈÄÈI&v‘‰•w’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰gÃIC-21r’‰Odbä ßÈij¿Oâj‘‰•/’‰Kdb䇆ZdâÙpÇP‹LŒœdb™Xy#™ØD&V¾H&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"Ïþ>‰s¨E&FN2±‰L¬¼“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™xœÄ1Ô"#'™øD&þæö8‡Zdbå“dâ™Xù"™¸D&F~i¨E&ž'q µÈÄÈI&6‘‰•7’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄÈI&‘‰ç|ŸÄ9Ô"#'™ØE&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL<Nâj‘‰‘“L|"ó?{œC-2±òE2q‰LŒœdâ™ù£¡™x.œÄ1Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"+?$ÈÄs¿Oâj‘‰•w’‰]dbä$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xE&ž'q µÈÄÈI&>‘‰¿ùŸ=Ρ™Xù"™¸D&FN2q‰L¬|ÿÐP‹L<Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&‘‰•’‰Gdâyß'q u™Xy'™ØE&FN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#2±òK2ñŠL¼?pÇP‹LŒœdâ™ø›ÿÙãj‘‰•/’‰Kdbä$·ÈÄÊw£¡™xà$Ž¡™Xy#™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™Xù!™xD&þæö8‡Zdbä$»ÈÄÈI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xE&V~I&^‘‰·ÁIC-21r’‰Odâoþgs¨E&V¾H&.‘‰‘“LÜ"+߆Zdâmp×P7‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÊÉÄ#21r’‰Gdâoþgs¨E&FN2±‹LŒœdb™9ÉÄ.21r’‰Cdbå‡dâ™9ÉÄ#2±òK2ñŠLŒœdâ™x;œÄ1Ô"#™øÏgÂÿ õ/îûY4Ô"+_$—ÈÄÈI&n‘‰•ïAC-2ñv8‰c¨E&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&FN2ñˆL¼ýû$Ρ™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠL¼Nâj‘‰¿ùŸg9Ô"#ß4Ô"+_$—ÈÄÈI&n‘‰•o’‰MdâpÇP‹LŒœdb™9ÉÄ.2±òM2q‹LŒœdâ™Xù!™xD&FN2ñˆLŒœdâ™xÇ÷IœC-21r’‰]dbä$»ÈÄÈI&‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™x'œÄ¿Cý÷%ó¿C=¿ŸmäP‹LŒüÐP‹L¬|‘L\"#'™¸E&V¾I&6‘‰wÂIC-21r’‰Mdbådb™Xù&™¸E&FN2ñˆL¬üL<"#'™xD&FN2ñˆL¼óû$Ρ™9ÉÄ.21r’‰]dbåƒdâ™9ÉÄ!2±òC2ñŠL¬ü’L¼"#'™xE&FN2ñŠL¼ Nâj‘‰‘wj‘‰‘_j‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ&2ñ.8‰c¨E&FN2±‹L¬¼“Lì"+ß$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰w}ŸÄ9Ô"#'™ØE&FN2qˆL¬|L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL¼Nâj‘‰‘j‘‰‘“Ll"+_$—ÈÄÊ7ÉÄ-21r’‰MdâÝpÇP‹LŒœdb™Xy'™ØE&V¾I&‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"ïþ>‰s¨E&FN2±‹L¬|L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™xœÄ1Ô"#Ÿ4Ô"+o$›ÈÄÊÉÄ-2±òM2q‹LŒœdb™xœÄ1Ô"#'™ØE&VÞI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"#'™xE&Þó}çP‹LŒœdâ™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñ^8‰c¨E&F¾h¨E&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&6‘‰÷ÂIC-21r’‰]dbådb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2±òK2ñŠL¼÷û$Ρ™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Odâ}pÇP‹LŒ|ÓP‹L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰•’‰Mdâ}pÇP‹LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñŠL¬ü’L¼"ïû>‰c¨‡ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰•?’‰Odâû“8†Zdb䇆Zdbådb™Xù&™¸E&FN2ñˆL¬üLl"ßœÄ1Ô"+ï$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L¼"+¿$¯ÈÄßüÏçP‹LŒœdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$ŸÈÄÊÉÄ'2ñ58‰c¨E&F~i¨E&VÞH&6‘‰•o’‰[dbä$ÈÄÊÉÄ&2ñ58‰k¨»ÈÄÊ;ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbå—dâ™9ÉÄ+2ñ7ÿ³Ç9Ô"#'™8D&FN2qˆLŒœdâ™9ÉÄ)2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰L|Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø:œÄ1Ô"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñŠL¬ü’L¼"#'™xE&¾þ}çP‹LŒœdâ™9ÉÄ!21r’‰Cdbå“dâ™Xù%™xE&FN2ñ‰L¬ü‘L|"#'™øD&¾'q µÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ#2±òC2±‹L|Nâj‘‰‘“Lì"#'™8D&V~H&‘‰‘“L<"+¿$¯ÈÄÈI&^‘‰‘“L¼"ßø>‰s¨E&FN2qˆLŒœdâ™9ÉÄ)2±òI2qŠL¬ü’L¼"+$ŸÈÄÈI&>‘‰‘“L|"ß„“¸†º‰L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“L<"+?$»ÈÄ7á$Ž¡™9ÉÄ.2±òA2qˆL¬üL<"#'™xE&V~I&^‘‰‘“L¼"#'™xE&¾ù}çP‹LŒœdâ™9ÉÄ!2±òI2qŠLŒœdâ™Xù%™øD&VþH&>‘‰‘“L|"#'™øD&¾'q µÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&‘‰•’‰]dâ[pÇP‹LŒœdâ™Xù ™8D&V~H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"ßú>‰s¨E&FN2qˆLŒœdâ™Xù$™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™ø6œÄ1Ô"#'™ØD&FN2±‹L¬|“LÜ"+?$ÈÄÈI&v‘‰oÃIC-21r’‰Cdbåƒdâ™Xù!™xE&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL|ûû$Ρ™9ÉÄ!2±òI2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r’‰Odâ;pÇP‹LŒœdb™Xy'™ØE&V¾I&‘‰•’‰Gdbä$»ÈÄwà$Ž¡™9ÉÄ!2±òA2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™9ÉÄ'2ñï“8‡Zdbä$§ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰ïÂIC-21r’‰Mdbådb™Xù!™xD&FN2ñˆLŒœdb™ø.œÄ1Ô"#'™8D&V>H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"+$ŸÈÄw¿Oâj‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#™ØD&¾'q µÈÄÈI&6‘‰•w’‰]dbå‡dâ™9ÉÄ#2±òK2±‹L|Nâj‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&>‘‰•?’‰Odâ{ß'q õ™Xù$™8E&FN2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'2ñ7ÿwÿj–‰ÿý÷$Ž¡f™˜9ÉÄÆ21òN2±³LŒüL<,3'™xY&F~I&v–‰¿ùNâj–‰‘’‰ƒebæ$ËÄÈ/ÉÄË21s’‰—ebæ$/ËÄÌI&>–‰‘?’‰ebåö8‡šebæ$'ËÄÌI&N–‰™“Lœ,3'™8Y&FþH&>–‰™“L|,3™øÏÿêÊÿÝㆺËP78‰c¨ uû~¶‘Cýd¨óN2±/êö}çPOêïëb¨› õo~I&ö+CÝà$®¡?2Ô žmÄPoêÊI&Ž+CݾOâê%CݾOâê#CݾOâê'Cݾ»È¡î2Ô•“L|S†º}ŸÄ9Ô]†º}?œÈ¡ž2ÔíóWâ†zËP·¯“øß¡¾2Ô•“L\?2Ôíû$Ρ>2Ôíó$þg¨Ÿ uû<‰ÿê&C]y§¡2ÔNâê+CÝ¿ŸmÄP÷êß¼“Lì[†ºŸÄ9ÔK†ºÃûºê.Cý›_’‰ýÉPw8‰c¨› u‡g1ÔG†ºr’‰ãÉP÷ï“8‡zËP÷ï“8‡úÊP÷ï“8†úýÈP÷ïß.r¨‡ uå$ß’¡îß'qõ¡îß'r¨— uÿü•øŸ¡>2Ôýë$þw¨Ÿ õo¾H&®&CÝ¿Oâê+CÝ?Oâê?¿ÿêþyÿ3Ô]†ºòAC=e¨œÄ1ÔO†z|?ÛÈ¡n2Ô•“LìG†z|ŸÄ9Ô[†zÀûºê!Cý›_’‰ãG†zÀICÝe¨<Ûˆ¡¾2Ô•“Lœ?2Ôãû$Ρ>2Ôãû$Ρ~2Ôãû$Ρn2Ôãû·‹ê)C]9ÉÄ·e¨Ç÷IœC=e¨Ç÷Éê-C=>%þg¨¯ õø:‰ÿêõ#Cý›/’‰«ËPï“8‡úÉPÏ“øŸ¡n2Ôãó$þg¨‡ u哆zÉPO8‰k¨û õü~¶‘CÝe¨+'™Ø¯ õü>‰s¨ õ„÷u1ÔS†ú7¿$G“¡žpÇPê Ï6b¨Ÿ õo>I&Î&C=¿Oâê+C=¿Oâê÷#C=¿Oâê.C=¿»È¡^2Ô•“L|G†z~ŸÄ9ÔK†z~?œÈ¡>2ÔóóWâ†úÉPϯ“øß¡n2Ô•“L\C†z~ŸÄ5ÔýçG†z~žÄÿ u—¡žŸ'ñ?C=e¨+_4Ô[†zÁICÝd¨×÷³ê!C]9ÉÄþd¨×÷IœC}e¨¼¯‹¡^2Ô¿ù%™8º õ‚“8†zÊP/x¶QC=d¨óI2qvêõ}çP?êõ}çP7êõ}çPêõýÛEõ–¡®œdâ»2Ôëû$ΡÞ2ÔëûáDõ•¡^Ÿ¿çP¯êõuÿ;Ô]†ºr’‰kÊP¯ï“8‡ºÉP¯Ï“øŸ¡2Ôëó$þg¨— u囆úÈPo8‰c¨» õþ~¶‘C=e¨+'™8~d¨÷÷IœCýd¨7¼¯‹¡Þ2Ô•“LC†zÃIC½d¨7<Ûˆ¡n2Ô¿ù$™8‡ õþ>‰c¨ß õþ>‰s¨» õþ>‰s¨§ õþþí"‡úÈPWN2ñ=êý}çPêýýp"‡úÉPïÏ_‰ÿê&C½¿Nâ‡zÈPWN2q-êý}çPwêýyÿ3ÔS†zžÄÿ õ–¡®üÐP_ê'q õ¡>ßÏ6r¨— õo>H&Ž&C}¾Oâêû#C}à}] õ‘¡®œdâ˜2ÔNâê-C}àÙF u—¡þÍ'ÉÄ9e¨Ï÷IœCÝd¨Ï÷IœC=d¨Ï÷IœC½d¨Ï÷o9ÔW†ºr‰íçG†ú|ŸÄ9ÔW†ú|?œˆ¡^?2ÔçóW↺ËPŸ¯“øß¡ž2Ô•“L\[†ú|ŸÄ9ÔC†ú|žÄÿ õ’¡>Ÿ'ñ?C}d¨+¿4ÔO†úÂIC=e¨ï÷³ê-Cý›’‰£ËPßï“8‡ºÉP_x_C}e¨+'™8– õ…“8†úÈP_x¶C=d¨óI2q.êû}çPwêû}çPOêû}çPoêûýÛEõ“¡þ%f??4ÔM†ú~ŸÄ9ÔO†ú~?œÈ¡n2Ô÷óWâ†zÈP߯“øß¡^2Ô•“L\G†ú~ŸÄ9ÔS†ú~žÄÿ õ–¡¾Ÿ'ñ?C}e¨+'™Ø~d¨œÄ1ÔK†ú}?ÛÈ¡>2Ô¿ù ™8† õû>‰s¨» õƒ÷u1ÔO†ú7$Ç–¡~pÇP_êÏ6b¨§ õo>I&Î-Cý¾Oâê!Cý¾Oâê%Cý¾Oâê#Cý¾»¨¡þ3Á†úW¨ý4ê.Cý¾Oâêõ#Cý¾NäPwê÷ù+ñ?C=e¨ß×IüïPoêÊI&®+Cý¾Oâê%Cý>Oâ†úÈP¿Ï“øŸ¡~2Ô¿y#™ØD&¶8‰c¨E&FN2±‹L¬|L"+¿$¯ÈÄÈI&>‘‰•?’‰Cdbû“8†Zdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21òGC-2ñ7o?†Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰íçû$Ρ™ù¡¡™9ÉÄ&2±òF2±‰Ll Nâj‘‰‘“Lì"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™ØœÄ5ÔSdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'2ñ7ÿ{8ÇP‹LŒ|ÐP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™9ÉÄ-2±µï“8‡Zdbä—†Zdbådb™9ÉÄ&2±u8‰c¨E&FN2qˆL¬|L"+¿$¯ÈÄÈI&>‘‰•?’‰CdbëpÇP‹LŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÈÄ?üg¨û÷o9Ô"#Ÿ4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&V¾I&n‘‰­ŸÄ9Ô"#'™ØD&VÞH&6‘‰‘“Ll"Û€“8†Zdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™8E&¶'q µÈÄÈI&N‘‰‘“L\"+$ŸÈÄÈI&>‘‰¿ùŸ=Ρ™y§¡™ù¢¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ-2±òM2q‹Llãû$Ρ™Xy#™ØD&FN2±‰LŒœdb™Ø&œÄ5ÔCdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™8E&¶ 'q µÈÄÈI&N‘‰•/’‰Kdbådâ™9ÈÄ¿/Üþêù}çP‹LŒ|ÐP‹LŒ|ÓP‹L¬|‘L\"#'™¸D&FN2q‰L¬|“LÜ"#'™¸E&¶ù}ÇP7‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰mÁIC-21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™ØœÄ1Ô"#'™¸D&V¾H&.‘‰•?’‰OdâoþŸÇ5Ô"#ï4Ô"#Ÿ4Ô"#?4Ô"+_$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄÈI&n‘‰¿ùß=Ž¡™9ÉÄ&21r’‰Mdbä$›ÈĶá$Ž¡™9ÉÄ!21r’‰Sdbå—dâ™Xù#™øD&FN2qŠLlNâj‘‰‘“L\"+_$—ÈÄÊ}ú™ø›ÿçÅq µÈÄÈ µÈÄÈ µÈÄÈ/ µÈÄÊÉÄ%21r’‰Kdbå›dâ™9ÉÄ-21r’‰[dâoþwc¨E&FN2±‰LŒœdb™9ÉÄ&2±8‰c¨E&FN2qˆL¬|’Lœ"+¿$ŸÈÄÊÉÄ'21r’‰Sdb;pÇP‹LŒœdâ™Xù"™¸D&þæÑG µÈÄÈ; µÈÄÈ' µÈÄÈ7 µÈÄÈI&6‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄßüïÇP‹LŒœdb™9ÉÄ&21r’‰Mdb»pÇP‹LŒœdâ™Xù$™8E&VþH&>‘‰‘“L|"#'™8E&¶ 'q µÈÄÈI&.‘‰•/’‰Kdb»ß'qµÈÄÈ µÈÄÈ µÈÄÈ µÈÄÊÉÄ&2±òE2q‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™ø›ÿÝãj‘‰‘“Ll"#'™ØD&FN2±‹LlNâj‘‰‘“L"+Ÿ$§ÈÄÊÉÄ'21r’‰Odbûn?$§ÈÄÊ'ÉÄ)21r’‰Kdbå‹dâ™ØÞ÷IœC-21òIC-21òMC-21r’‰Mdbådb™Xù"™¸E&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹Llïû$Ρ™9ÉÄ&21r’‰Mdbådb™Øà$Ž¡™9ÉÄ!2±òI2qŠL¬ü‘L|"#ÿ–‰'øß¡î¿Àí‡dâ™Xù$™8E&V¾H&.‘‰‘“L\"ûÏ÷IœC-21òEC-21òCC-21r’‰Mdbådb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-21r’‰[dbÿù>‰s¨E&FN2±‰LŒœdb™Xy'™ØE&ö'q µÈÄÈI&‘‰•O’‰Sdbådâ™ù¢¡™Ø}ÜÉÄ)2±òI2q‰L¬|‘L\"#'™¸D&öö}çP‹LŒ|ÓP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LŒœ¾A‘‰½}ŸÄ9Ô"#'™ØD&VÞI&v‘‰‘“Lì"{‡“8†Zdbä$§ÈÄÊ'ÉÄ)2±òG2ñ‰LŒ|ÓP‹Lì¿>î‡dâ™Xù"™¸D&FN2q‰LŒœdâ™Øû÷IœC-21òCC-21r’‰Mdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[db凾A‘‰½ŸÄ9Ô"#'™ØE&VÞI&v‘‰‘“Lì"û€“8†Zdbå“dâ™9ÉÄ)2±òG2ñ‰LŒüÐP‹L쿼î‡dâ™Xù"™¸D&FN2q‰LŒœdâ™ØÇ÷IœC-21òKC-2±òF2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰Gdb凾A‘‰}|ŸÄ9Ô"+ï$»ÈÄÈI&v‘‰‘“Lì"û„“¸†zŠL¬|’Lœ"#'™8E&VþH&>‘‰‘_j‘‰ý—×ýL\"+_$—ÈÄÈI&.‘‰•o’‰[dbŸß'qµÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰•’‰Gdbäô úˆLìóû$Ž¡î"+ï$»ÈÄÈI&v‘‰‘“Lì"û‚“8†Zdbä$§ÈÄÈI&N‘‰•?’‰Odbä†ZdbÿÕy?$—ÈÄÊÉÄ%21r’‰[dbå›dâ™Ø×÷IœC-2±òF2±‰LŒœdb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰Gdbå‡dâ™9}ƒ>"ó¿{C-21r’‰]dbä$»ÈÄÈI&v‘‰}ÃIC-21r’‰Sdbä$—ÈÄÊÉÄ'2±ox_C-21r’‰Kdbå‹dâ™9ÉÄ-2±òM2q‹Lìûû$Ž¿¸&2±òF2±‰LŒœdb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-2±òC2ñˆLŒœdâ™9}ƒ>"ó¿{C-21r’‰]dbä$»ÈÄÈI&v‘‰ýÀIC-21r’‰Sdbå‹dâ™Xùû–‰'øÏPx_C-21r’‰Kdbå‹dâ™9ÉÄ-2±òM2q‹LüÍÿ¢j‘‰‘“Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üL<"#'™xD&FNß ÈÄßüïÇP‹LŒœdb™9ÉÄ.21r’‰]db¿pÇP‹LŒœdâ™Xù"™¸D&öû}çP‹LŒ¼ÓP‹LŒœdâ™Xù"™¸D&FN2q‹L¬|“LÜ"ûý>‰s¨E&FN2±‰LŒœdb™9ÉÄ&2±òN2±‹L¬|“LÜ"+?$ÈÄÈI&‘‰‘“L<"#§oÐGdâoþwc¨E&FN2±‹LŒœdb™9ÉÄ!2±?8‰c¨E&FN2qŠL¬|‘L\"ûû>‰s¨E&F>h¨E&VÞH&.‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-2±¿ï“8‡Zdbä$›ÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ#21rú}D&ö÷}çP‹LŒœdb™9ÉÄ.2±òA2qˆL?pÇP‹LŒœdâ™Xù"™¸D&ŽŸï“8‡Zdbä$›ÈÄÊÉÄ%2±òE2q‰L¬|“LÜ"#'™¸E&ŽŸï“8‡Zdbä$›ÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰‘Ó7è#2qü|ŸÄ9Ô"#'™ØE&FN2qˆL¬|L"Gƒ“8†Zdbä$§ÈÄÊÉÄ%2q´ï“8‡Zdbä$›ÈÄÊÉÄ%2±òE2q‹L¬|“LÜ"#'™¸E&Žö}çP‹LŒœdb™9ÉÄ&2±òN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#21rú}E&Žö}çP‹LŒœdb™Xù ™8D&FN2qˆLNâj‘‰‘“L\"+_$—ÈÄÑ¿Oâj‘‰‘“Ll"+o$—ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÑ¿Oâj‘‰‘“Ll"#'™ØE&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&V~éô™8ú÷IœC-21r’‰Cdbåƒdâ™9ÉÄ!2q 8‰c¨E&V¾H&.‘‰‘“L\"Çø>‰s¨E&FN2±‰L¬¼‘LÜ"+ß$·ÈÄÈI&n‘‰‘“L<"Çø>‰s¨E&FN2±‰L¬¼“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù¥oÐWdâß'qµÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄ1á$®¡^"+_$—ÈÄÈI&.‘‰c~ŸÄ9Ô"#'™ØD&VÞH&n‘‰•o’‰[dbä$·ÈÄÊÉÄ#2qÌï“8‡Zdbä$»ÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÊ/ÉÄ+21rú}E&Žù}ÇP‘‰•’‰Cdbä$‡ÈÄÈI&‘‰cÁIC-21r’‰Kdbä$—Èı¾Oâj‘‰‘“Ll"+o$·ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™8Ö÷IœC-2±òN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Wdbå—dâ™9}ƒ¾"ó¿{C-21r’‰Cdbä$‡ÈÄÈI&‘‰cÃIC-21r’‰Kdbä$·Èı¿Oâj‘‰•7’‰Mdbä$·ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™8ö÷Iq]dbådb™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbå—dâ™9ÉÄ+21rú}E&þæ÷8†Zdbä$‡ÈÄÈI&‘‰‘“L"Ç“8†Zdbä$—ÈÄÊ7ÉÄ-2qœï“8†º‰L¬¼‘Ll"#'™¸E&V¾I&n‘‰‘“L<"+?$ÈÄßü/úˆ¡™9ÉÄ.21r’‰]dbä$»ÈÄÈI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+21r’‰Wdbäô úŠLüÍÿîq µÈÄÈI&‘‰‘“L"#'™8D&Ž 'q µÈÄÈI&.‘‰•o’‰[dâ¸ß'qµÈÄÈI&6‘‰‘“LÜ"+ß$·ÈÄÈI&‘‰•’‰Gdâ¸ß'qµÈÄÈI&v‘‰‘“Lì"#'™ØE&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdbäô úŠLüÍÿîq µÈÄÈI&‘‰‘“L"#'™8E&Ž'q µÈÄÈI&.‘‰•o’‰[dâxß'qµÈÄÈI&6‘‰•w’‰[dbå›dâ™9ÉÄ#2±òC2ñˆLïû$Ρ™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ!2±òC2ñŠL¬ü’L¼"#'™xE&FN2ñŠLŒœ¾A_‘‰ã}ŸÄ9Ô"#'™8D&FN2qˆL¬|’Lœ"çœÄ1Ô"#'™¸D&V¾I&n‘‰óçû$Ρ™9ÉÄ.2±òN2q‹L¬|“LÜ"+?$ÈÄÈI&‘‰óçû$Ρ™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbäô úŠLœ?ß'qµÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÙà$Ž¡™9ÉÄ%2±òM2q‹Lœíû$Ρ™9ÉÄ.2±òN2q‹L¬|“L<"+?$ÈÄÈI&‘‰³}ŸÄ9Ô"#'™ØE&FN2±‹L¬|L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠLŒœ¾A?‘‰³}ŸÄ9Ô"#'™8D&V>I&N‘‰‘“Lœ"g‡“8†Zdbä$·ÈÄÊ7ÉÄ-2qöï“8‡Zdbä$»ÈÄÊ;ÉÄ-2±òC2ñˆLŒœdâ™9ÉÄ#2qöï“8‡Zdbä$»ÈÄÈI&‘‰•’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰•?úýD&Îþ}çP‹LŒœdâ™Xù$™8E&FN2qŠLœNâj‘‰•o’‰[dbä$·ÈÄ9¾Oâj‘‰‘“Lì"+ï$ÈÄÊÉÄ#21r’‰Gdbä$¯ÈÄ9¾Oâj‘‰‘“Lì"+$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™øD&Vþèô™8Ç÷IœC-2±òI2qŠLŒœdâ™9ÉÄ)2qN8‰k¨·ÈÄÊ7ÉÄ-21r’‰[dâœß'qµÈÄÈI&v‘‰•w’‰Gdbå‡dâ™9ÉÄ#2±òK2ñŠLœóû$Ρ™9ÉÄ!2±òA2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+2±òG2ñ‰LŒœ¾A?‘‰s~ŸÄ1ÔSdbå“dâ™9ÉÄ)21r’‰Sdâ\pÇP‹LŒœdâ™9ÉÄ-2q®ï“8‡Zdbä$»ÈÄÊ;ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Îõ}çP‹L¬|L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™Xù#™øD&FNß ŸÈÄßüïÇP‹LŒœdâ™9ÉÄ)21r’‰SdâÜpÇP‹LŒœdâ™9ÉÄ#2qîï“8‡Zdbådb™9ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Îý}Ç_Ü™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœ¾A?‘‰¿ùß=Ž¡™9ÉÄ)21r’‰Sdbä$§ÈÄyà$Ž¡™9ÉÄ-2±òC2ñˆLœçû$Ž¡î"+ï$»ÈÄÈI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+2ñ7ÿ‹>b¨E&FN2qˆLŒœdâ™9ÉÄ!21r’‰Sdbå—dâ™9ÉÄ'2±òG2ñ‰LŒœdâ™9}ƒ~"ó¿{C-21r’‰Sdbä$§ÈÄÈI&N‘‰óÂIC-21r’‰[dbå‡dâ™8ï÷IœC-21r’‰]dbä$ÈÄÊÉÄ#21r’‰Wdbå—dâ™8ï÷IœC-21r’‰Cdbä$‡ÈÄÈI&‘‰•O’‰Sdbå—dâ™Xù#™øD&FN2ñ‰LŒœdâ™9}ƒ~"ó¿{C-21r’‰Sdbä$§ÈÄÈI&.‘‰óÁIC-21r’‰[dbå‡dâ™8ß÷IœC-21r’‰]dbåƒdâ™Xù!™xD&FN2ñŠL¬ü’L¼"çû>‰s¨E&FN2qˆLŒœdâ™9ÉÄ)2±òI2qŠL¬ü’L|"+$ŸÈÄÈI&>‘‰‘“L|"#§oÐOdâ|ß'qµÈÄÈI&N‘‰‘“Lœ"+_$—ÈÄõ'q µÈÄÈI&n‘‰•’‰Gdâúù>‰s¨E&FN2qˆL¬|L<"+?$ÈÄÊ/ÉÄ+21r’‰Wdâúù>‰s¨E&FN2qˆLŒœdâ™9ÉÄ)2±òI2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™9}ƒ~"×Ï÷IœC-21r’‰Sdbä$—ÈÄÊÉÄ%2q58‰c¨E&FN2q‹L¬üL<"Wû>‰s¨E&FN2qˆL¬|L<"+?$¯ÈÄÊ/ÉÄ+21r’‰Wdâjß'qµÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"#‡oÐÿû “¡nß'qµÈÄÈI&N‘‰•/’‰Kdbä$—ÈÄÕá$Ž¡™9ÉÄ#2±òC2ñˆL\ýû$Ρ™9ÉÄ!2±òA2ñˆL¬ü’L¼"#'™xE&FN2ñŠL\ýû$Ρ™9ÉÄ!21r’‰Sdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r’‰Odâoþwc¨E&V>I&N‘‰‘“L\"+_$—ÈÄÈI&.‘‰kÀIC-2±òC2ñˆLŒœd♸Æ÷IœC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœd♸Æ÷IœC-21r’‰Cdbå“dâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä ÿNðùüÇÿÝãj‘‰•O’‰Sdbå‹dâ™9ÉÄ%21r’‰Kdâšp×P‘‰•’‰Gdbä$ÈÄ5¿Oâj‘‰‘“L"+$¯ÈÄÊ/ÉÄ+21r’‰Wdbåd♸æ÷IœC-21r’‰Sdbå“dâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰OdâoþÏÿ;Ô"#ï4Ô"+Ÿ$—ÈÄÊÉÄ%21r’‰Kdbä$—Èĵà$Ž¡™9ÉÄ#21r’‰GdâZß'qµÈÄÈI&‘‰•’‰Wdbå—dâ™9ÉÄ'2±òG2ñ‰L\ëû$Ρ™Xù$™8E&FN2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÈÄ?'ñŸ¡^_'ñ¿C-21òAC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰KdâÚpÇP‹LŒœdâ™9ÉÄ+2qíï“8‡Zdbåƒdâ™9ÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&®ý}ÇPO‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰¿ù¿{üÏP‹LŒ¼ÓP‹LŒ|ÒP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸œÄ1Ô"#'™xD&V~I&^‘‰ë|ŸÄ1ÔCdbåƒdâ™9ÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&þæÑG µÈÄÈI&N‘‰‘“Lœ"#'™8E&FN2q‰L¬ü‘L|"#™øïÿêóù+ñ?C-21òAC-21òEC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰KdâºpÇP‹LŒœdâ™Xù%™xE&®û}çP‹LŒœdâ™9ÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&®û}çP‹LŒœdâ™9ÉÄ)21r’‰Sdbå‹dâ™Xù#™øD&þæ~¢È¡™y§¡™ù¤¡™ù¦¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ-2q=8‰c¨E&FN2ñˆL¬ü’L¼"×û>‰s¨E&FN2qˆL¬|’L¼"+¿$¯ÈÄÈI&>‘‰•?’‰Odâzß'qµÈÄÈI&N‘‰‘“Lœ"#'™¸D&V¾H&.‘‰•?‰&øÏP¿ï‡9Ô"#4Ô"#_4Ô"#?4Ô"+_$—ÈÄÈI&.‘‰‘“L\"+ß$·ÈÄý'q µÈÄÈI&‘‰•_’‰Wdâþù>‰s¨E&FN2qŠL¬|’L¼"+¿$¯ÈÄÊÉÄ'21r’‰Odâþù>‰s¨E&FN2qŠLŒœdâ™9ÉÄ%2±òE2q‰LüÍÿìqµÈÄÈ; µÈÄÈ' µÈÄÈ7 µÈÄÈ/ µÈÄÊÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-2q78‰c¨E&FN2ñˆL¬ü’L¼"wû>‰s¨E&FN2qŠL¬|’L¼"+¿$ŸÈÄÊÉÄ'21r’‰Odânß'qµÈÄÈI&N‘‰‘“Lœ"+_$—ÈÄÈI&.‘‰¿ùŸ=Ρ™ù ¡™ù¢¡™ù¡¡™9ÉÄ&2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LÜNâj‘‰‘“L¼"+¿$¯ÈÄÝ¿Oâj‘‰‘“Lœ"+Ÿ$¯ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÝ¿Oâj‘‰‘“Lœ"#'™¸D&V¾H&.‘‰‘“L\"wÿ>‰s¨E&F>i¨E&F¾i¨E&F~i¨E&VÞH&6‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-21r’‰[dâpÇP‹L¬ü’L¼"#'™xE&îñ}çP‹LŒœdâ™Xù$™øD&VþH&>‘‰‘“L|"#™Ø~D&îñ}çP‹LŒœdâ™Xù"™¸D&FN2q‰LŒœd♸Ç÷IœC-21òEC-21òCC-21r’‰Mdbådb™Xù"™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&î 'q õ™Xù%™xE&FN2ñŠLÜóû$Ρ™9ÉÄ)2±òI2ñ‰L¬ü‘L|"#'™øD&þæ÷8†Zdbå“dâ™9ÉÄ%2±òE2q‰LŒœdâ™9ÉÄ%2qÏï“8‡Zdb䛆Zdbä—†Zdbådb™9ÉÄ&2±òE2q‹L¬|“LÜ"#'™¸E&FN2q‹LÜ Nâj‘‰‘“L¼"#'™xE&îõ}çP‹LŒœdâ™Xù$™øD&VþH&>‘‰‘ƒLü3Á†úW¨ý4j‘‰•O’‰Sdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈĽ¾Oâj‘‰‘j‘‰‘“Ll"+o$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"÷†“8†Zdbä$¯ÈÄÈI&>‘‰{ŸÄ9Ô"+Ÿ$§ÈÄÈI&>‘‰•?’‰Odb䛆Zdâoþwc¨E&V>I&.‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"÷þ>‰s¨E&F~i¨E&VÞH&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LÜNâj‘‰‘“L¼"+$ŸÈÄ}¾Oâê)2±òI2qŠLŒœdâ™Xù#™øD&F~h¨E&þæ÷8†Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈÄÈI&n‘‰û|ŸÄ9Ô"#'™ØD&VÞH&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LÜNâj‘‰‘“L¼"+$ŸÈÄ}¿Oâj‘‰‘“Lœ"#'™øD&VþH&>‘‰‘_j‘‰¿ùß=Ž¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2±òM2q‹LÜ÷û$Ρ™Xy#™ØD&FN2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰Gdâ~pÇP‹LŒœdâ™Xù#™øD&î÷}çP‹LŒœdâ™Xù"™øD&VþH&>‘‰‘?j‘‰¿ùß=Ž¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ-2±òM2q‹LÜïû$Ž¡n"+o$›ÈÄÈI&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&V~H&‘‰çNâj‘‰‘“L¼"+$ŸÈÄóó}ÿßör\Ë®$AT%âè¯X÷ä1ãð–»nÆ ÃÒvaåP‹LŒœdâ™Xù"™øD&VþH&>‘‰¿ùßg1Ô"#ß4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸E&V¾I&n‘‰¿ùŸ=Ρ™9ÉÄ&21r’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&‘‰•’‰GdâipÇP‹LŒœdâ™Xù#™øD&žö}çP‹LŒœdâ™Xù"™øD&Vþ@&þ™à?CÝàÙF µÈÄÈ µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÊ7ÉÄ-21r’‰[dâoþgs¨E&FN2±‰LŒœdb™9ÉÄ&21r’‰]dbå›dâ™9ÉÄ-2±òC2ñˆLŒœdâ™x:œÄ1Ô"#'™øD&VþH&>‘‰§ŸÄ9Ô"#'™¸D&V¾H&>‘‰¿ùß“8†Zdbä†Zdbä—†Zdbå‹dâ™9ÉÄ%21r’‰[dbå›dâ™9ÉÄ-2ñôï“8‡Zdbä$›ÈÄÈI&6‘‰‘“Ll"+ï$»ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™9ÉÄ#2ñ 8‰c¨E&VþH&>‘‰‘“L|"Ïø>‰s¨E&FN2q‰L¬|Lüû’ùß¡pÇP‹LŒ|ÐP‹LŒœdb™Xù"™¸D&FN2q‰L¬|“LÜ"#'™¸E&FN2q‹L<ãû$Ρ™9ÉÄ&21r’‰Mdbä$»ÈÄÊ;ÉÄ.2±òM2q‹L¬üL<"#'™xD&FN2ñˆL<Nâê'2±òG2ñ‰LŒœdâ™xæ÷IœC-21r’‰KdbåkÑP‹L<Nâj‘‰‘Oj‘‰•7’‰Mdbå‹dâ™9ÉÄ-2±òM2q‹LŒœdâ™9ÉÄ-2ñÌï“8‡Zdbä$›ÈÄÈI&6‘‰•w’‰]dbä$»ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ#2ñ,8‰c¨E&FN2ñ‰LŒœdâ™xÖ÷IœC-21r’‰KdbåkÓP‹L< Nâj‘‰‘“Ll"+o$›ÈÄÊÉÄ%2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dâYß'qµÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"φ“8†Zdbä$ŸÈÄÈ¿eâÿ/£Èij¿Oâj‘‰•/’‰Kdb䇆ZdâÙpÇP‹LŒœdb™Xy#™ØD&V¾H&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"Ïþ>‰s¨E&FN2±‰L¬¼“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™xœÄ1Ô"#'™øD&ž_^÷óCC-2±òI2q‰L¬|‘L\"#¿4Ô"Ï“8†Zdbä$›ÈÄÊÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dbä$ÈÄs¾Oâj‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&ž 'q µÈÄÈI&>‘‰ç—×ý4j‘‰•/’‰Kdbä$—ÈÄÈ µÈÄsá$Ž¡™9ÉÄ&2±òF2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™Xù!™xD&žû}çP‹L¬¼“Lì"#'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ+2ñ<8‰c¨E&FN2ñ‰L<¿¼î§ÓP‹L¬|‘L\"#'™¸D&V¾h¨E&ž'q µÈÄÈI&6‘‰•7’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$ÈÄÊÉÄ#2ñ¼ï“8†º‹L¬¼“Lì"#'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™Xù%™xE&Þ8‰c¨E&FN2ñ‰L¼¿:ïgÐP‹L¬|‘L\"#'™¸E&V¾ µÈÄû'q µÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$ÈÄÊÉÄ#2ñ7ÿ³Ç9Ô"#'™ØE&FN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ+2±òK2ñŠL¼ Nâj‘‰‘“L|"ï¯Îû™4Ô"+_$—ÈÄÈI&n‘‰•ïNC-2ñ68‰k¨›ÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbå‡dâ™9ÉÄ#2ñ7ÿ³Ç9Ô"#'™ØE&FN2±‹LŒœdb™9ÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠL¼Nâj‘‰‘ËÄ?þg¨qßÏ¢¡™Xù"™¸D&FN2q‹L¬|j‘‰¿ùß“8†Zdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&‘‰•’‰Gdbä$ÈÄÛ¿Oâj‘‰‘“Lì"#'™ØE&FN2±‹L¬|L"+?$ÈÄÈI&^‘‰•_’‰Wdbä$¯ÈÄ;à$Ž¡™xÇ÷³j‘‰‘oj‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ&2ñ7ÿ{ÇP‹LŒœdb™9ÉÄ.2±òM2q‹LŒœdâ™Xù!™xD&FN2ñˆLŒœdâ™xÇ÷IœC-21r’‰]dbä$»ÈÄÈI&‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™x'œÄÿêÿ¼dþw¨ç÷³j‘‰‘j‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ&2ñN8‰c¨E&FN2±‰L¬¼“Lì"+ß$·ÈÄÈI&‘‰•’‰Gdbä$ÈÄÈI&‘‰w~ŸÄ9Ô"#'™ØE&FN2±‹L¬|L"#'™8D&V~H&^‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰wÁIC-21òNC-21òKC-2±òE2q‰LŒœdâ™Xù&™ØD&Þ'q µÈÄÈI&v‘‰•w’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2ñ®ï“8‡Zdbä$»ÈÄÈI&‘‰•’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰wÃIC-21òAC-21r’‰Mdbå‹dâ™Xù&™¸E&FN2±‰L¼Nâj‘‰‘“Lì"+ï$»ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰GdâÝß'qµÈÄÈI&v‘‰•’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"ï“8†Zdb䓆Zdbådb™Xù"™¸E&V¾I&n‘‰‘“Ll"ï“8†Zdbä$»ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Gdbä$¯ÈÄ{¾Oâj‘‰‘“L"+$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&Þ 'q µÈÄÈ µÈÄÊÉÄ&2±òM2q‹LŒœdâ™9ÉÄ&2ñ^8‰c¨E&FN2±‹L¬¼“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&V~I&^‘‰÷~ŸÄ9Ô"+$‡ÈÄÈI&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñ‰L¼Nâj‘‰‘oj‘‰•7’‰Mdbå›dâ™9ÉÄ-2±òC2±‰L¼Nâj‘‰‘“Lì"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&^‘‰•_’‰Wdâ}ß'q õ™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+2±òG2ñ‰L|?pÇP‹LŒüÐP‹L¬¼‘Ll"+ß$·ÈÄÈI&‘‰•’‰Mdâû“8†Zdbådb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Wdbå—dâ™ø›ÿÙãj‘‰‘“L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™Xù#™øD&¾'q µÈÄÈ/ µÈÄÊÉÄ&2±òM2q‹LŒœdâ™Xù!™ØD&¾'q u™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆL¬ü’L¼"#'™xE&þæö8‡Zdbä$‡ÈÄÈI&‘‰‘“L"#'™8E&V~I&^‘‰‘“L¼"+$ŸÈÄÈI&>‘‰¯ÃIC-21r’‰Mdbådb™Xù&™¸E&FN2ñˆL¬üLl"ó¿'q µÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L¼"+¿$¯ÈÄÈI&^‘‰¯ŸÄ9Ô"#'™8D&FN2qˆLŒœdâ™Xù$™8E&V~I&^‘‰‘“L|"+$ŸÈÄÈI&>‘‰oÀIC-2±òF2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üLì"ó¿'q µÈÄÈI&v‘‰‘“L"+?$ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰o|ŸÄ9Ô"#'™8D&FN2qˆLŒœdâ™Xù$™8E&V~I&^‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰oÂI\CÝD&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&‘‰•’‰]dâ›pÇP‹LŒœdb™Xù ™8D&V~H&‘‰‘“L¼"+¿$¯ÈÄÈI&^‘‰‘“L¼"ßü>‰s¨E&FN2qˆLŒœdâ™Xù$™8E&FN2qŠL¬ü’L|"+$ŸÈÄÈI&>‘‰‘“L|"ß‚“8†Zdbä$›ÈÄÈI&6‘‰•o’‰[dbä$ÈÄÊÉÄ.2ñ-8‰c¨E&FN2qˆL¬|L"+?$ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰o}ŸÄ9Ô"#'™8D&FN2qŠL¬|’Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰L|Nâj‘‰‘“Ll"#'™ØE&V¾I&n‘‰•’‰Gdbä$»ÈÄ·á$Ž¡™9ÉÄ!2±òA2qˆL¬üL¼"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&¾ý}çP‹LŒœdâ™Xù$™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'2ñ8‰c¨E&FN2±‰L¬¼“Lì"+ß$ÈÄÊÉÄ#21r’‰]dâ;pÇP‹LŒœdâ™Xù ™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠLŒœdâ™øÎ÷IœC-21r’‰Sdbå“dâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä$ŸÈÄwá$Ž¡™9ÉÄ&2±òN2±‹L¬üL<"#'™xD&FN2±‹L|Nâj‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰•?’‰Odâ»ß'qµÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘ƒL?"߃“8†Zdbä$›ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™Xù%™ØE&¾'q µÈÄÈI&‘‰•’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$ŸÈÄÊÉÄ'2ñ½ï“8†zŠL¬|’Lœ"#'™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™ø›ÿ»Çÿ 5ËÄÿEÿ=‰c¨Y&fN2±±LŒ¼“Lì,#?$ËÄÌI&^–‰‘_’‰ebåOâj–‰‘’‰ƒebæ$ËÄÈ/ÉÄË21s’‰—ebæ$/ËÄÌI&>–‰‘?’‰ebåö8‡šebæ$'ËÄÌI&N–‰™“Lœ,3'™8Y&FþH&>–‰™“L|,3™øÏÿêÊÿÝㆺËP78‰c¨ uû~¶‘Cýd¨óN2±/êö}çPOêïëb¨› õo~I&ö+CÝà$®¡?2Ô žmÄPoêÊI&Ž+CݾOâê%CݾOâê#CݾOâê'Cݾ»È¡î2Ô•“L|S†º}ŸÄ9Ô]†º}?œÈ¡ž2ÔíóWâ†zËP·¯“øß¡¾2Ô•“L\?2Ôíû$Ρ>2Ôíó$þg¨Ÿ uû<‰ÿê&C]y§¡2ÔNâê+CÝ¿ŸmÄP÷êß¼“Lì[†ºŸÄ9ÔK†ºÃûºê.Cý›_’‰ýÉPw8‰c¨› u‡g1ÔG†ºr’‰ãÉP÷ï“8‡zËP÷ï“8‡úÊP÷ï“8†úýÈP÷ïß.r¨‡ uå$ß’¡îß'qõ¡îß'r¨— uÿü•øŸ¡>2Ôýë$þw¨Ÿ õo¾H&®&CÝ¿Oâê+CÝ?Oâê?¿ÿêþyÿ3Ô]†ºòAC=e¨œÄ1ÔO†z|?ÛÈ¡n2Ô•“LìG†z|ŸÄ9Ô[†zÀûºê!Cý›_’‰ãG†zÀICÝe¨<Ûˆ¡¾2Ô•“Lœ?2Ôãû$Ρ>2Ôãû$Ρ~2Ôãû$Ρn2Ôãû·‹ê)C]9ÉÄ·e¨Ç÷IœC=e¨Ç÷Éê-C=>%þg¨¯ õø:‰ÿêõ#Cý›/’‰«ËPï“8‡úÉPÏ“øŸ¡n2Ôãó$þg¨‡ u哆zÉPO8‰k¨û õü~¶‘CÝe¨+'™Ø¯ õü>‰s¨ õ„÷u1ÔS†ú7¿$G“¡žpÇPê Ï6b¨Ÿ õo>I&Î&C=¿Oâê+C=¿Oâê÷#C=¿Oâê.C=¿»È¡^2Ô•“L|G†z~ŸÄ9ÔK†z~?œÈ¡>2ÔóóWâ†úÉPϯ“øß¡n2Ô•“L\C†z~ŸÄ5ÔãçG†z~žÄÿ u—¡žŸ'ñ?C=e¨+_4Ô[†zÁICÝd¨×÷³ê!C]9ÉÄþd¨×÷IœC}e¨¼¯‹¡^2Ô¿ù%™8º õ‚“8†zÊP/x¶QC=d¨óI2qvêõ}çP?êõ}çP7êõ}çPêõýÛEõ–¡®œdâ»2Ôëû$ΡÞ2ÔëûáDõ•¡^Ÿ¿çP¯êõuÿ;Ô]†ºr’‰kÊP¯ï“8‡ºÉP¯Ï“øŸ¡2Ôëó$þg¨— u囆úÈPo8‰c¨» õþ~¶‘C=e¨+'™8~d¨÷÷IœCýd¨7¼¯‹¡Þ2Ô•“LC†zÃIC½d¨7<Ûˆ¡n2Ô¿ù$™8‡ õþ>‰c¨ß õþ>‰s¨» õþ>‰s¨§ õþþí"‡úÈPWN2ñ=êý}çPêýýp"‡úÉPïÏ_‰ÿê&C½¿Nâ‡zÈPWN2q-êý}çPwêýyÿ3ÔS†zžÄÿ õ–¡®üÐP_ê'q õ¡>ßÏ6r¨— õo>H&Ž&C}¾Oâêû#C}à}] õ‘¡®œdâ˜2ÔNâê-C}àÙF u—¡þÍ'ÉÄ9e¨Ï÷IœCÝd¨Ï÷IœC=d¨Ï÷IœC½d¨Ï÷o9ÔW†ºr‰ýçG†ú|ŸÄ9ÔW†ú|?œˆ¡^?2ÔçóW↺ËPŸ¯“øß¡ž2Ô•“L\[†ú|ŸÄ9ÔC†ú|žÄÿ õ’¡>Ÿ'ñ?C}d¨+¿4ÔO†úÂIC=e¨ï÷³ê-Cý›’‰£ËPßï“8‡ºÉP_x_C}e¨+'™8– õ…“8†úÈP_x¶C=d¨óI2q.êû}çPwêû}çPOêû}çPoêûýÛEõ“¡þ%f??4ÔM†ú~ŸÄ9ÔO†ú~?œÈ¡n2Ô÷óWâ†zÈP߯“øß¡^2Ô•“L\G†ú~ŸÄ9ÔS†ú~žÄÿ õ–¡¾Ÿ'ñ?C}e¨+'™Ø~d¨œÄ1ÔK†ú}?ÛÈ¡>2Ô¿ù ™8† õû>‰s¨» õƒ÷u1ÔO†ú7$Ç–¡~pÇP_êÏ6b¨§ õo>I&Î-Cý¾Oâê!Cý¾Oâê%Cý¾Oâê#Cý¾»¨¡þ3Á†úW¨ý4ê.Cý¾Oâêõ#Cý¾NäPwê÷ù+ñ?C=e¨ß×IüïPoêÊI&®+Cý¾Oâê%Cý>Oâ†úÈP¿Ï“øŸ¡~2Ô¿y#™ØD&¶8‰c¨E&FN2±‹L¬|L"+¿$¯ÈÄÈI&>‘‰•?’‰Cdbû“8†Zdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21òGC-2ñ7ï?†Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰íçû$Ρ™ù¡¡™9ÉÄ&2±òF2±‰Ll Nâj‘‰‘“Lì"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™ØœÄ5ÔSdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'2ñ7ÿ{8ÇP‹LŒ|ÐP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™9ÉÄ-2±µï“8‡Zdbä—†Zdbådb™9ÉÄ&2±u8‰c¨E&FN2qˆL¬|L"+¿$¯ÈÄÈI&>‘‰•?’‰Cdâoþ÷$Ž¡™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r‰&øÏP÷ïß.r¨E&F>i¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L¬|“LÜ"[ÿ>‰s¨E&FN2±‰L¬¼‘Ll"#'™ØD&¶'q µÈÄÊÉÄ!21r’‰Cdbå—dâ™9ÉÄ'2±òG2qŠLüÍÿžÄ1Ô"#'™8E&FN2q‰L¬ü‘L|"#'™øD&þæö8‡Zdbä†Zdb䋆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-2±ï“8‡Zdbådb™9ÉÄ&21r’‰Mdb›p×P‘‰•’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™Ø&œÄ1Ô"#'™8E&V¾H&.‘‰•?’‰Odbä ÿ¾pûw¨ç÷IœC-21òAC-21òMC-2±òE2q‰LŒœdâ™9ÉÄ%2±òM2q‹LŒœdâ™Øæ÷ICÝD&VÞH&6‘‰‘“Ll"#'™ØD&¶'q µÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&>‘‰•?’‰Sdb[pÇP‹LŒœdâ™Xù"™¸D&VþH&>‘‰¿ù^×P‹LŒ¼ÓP‹LŒ|ÒP‹LŒüÐP‹L¬|‘L\"#'™¸D&FN2q‹L¬|“LÜ"#'™¸E&þæ÷8†Zdbä$›ÈÄÈI&6‘‰‘“Ll"Û†“8†Zdbä$‡ÈÄÈI&N‘‰•_’‰Wdbådâ™9ÉÄ)2±m8‰c¨E&FN2q‰L¬|‘L\"+ôUèGdâoþŸÇ5Ô"#4Ô"#_4Ô"#¿4Ô"+_$—ÈÄÈI&.‘‰•o’‰[dbä$·ÈÄÈI&n‘‰¿ùß=Ž¡™9ÉÄ&21r’‰Mdbä$›ÈÄvà$Ž¡™9ÉÄ!2±òI2qŠL¬ü’L|"+$ŸÈÄÈI&N‘‰íÀIC-21r’‰Kdbå‹dâ™ø›ÿE1Ô"#ï4Ô"#Ÿ4Ô"#ß4Ô"#'™ØD&V¾H&.‘‰‘“LÜ"+ß$·ÈÄÈI&n‘‰‘“LÜ"ó¿{C-21r’‰Mdbä$›ÈÄÈI&6‘‰íÂIC-21r’‰Cdbå“dâ™Xù#™øD&FN2ñ‰LŒœdâ™Ø.œÄ1Ô"#'™¸D&V¾H&.‘‰í~ŸÄ9Ô"#4Ô"#_4Ô"#?4Ô"+o$›ÈÄÊÉÄ%2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dâoþwc¨E&FN2±‰LŒœdb™9ÉÄ.2±=8‰c¨E&FN2qˆL¬|’Lœ"+$ŸÈÄÈI&>‘‰¿yû!™8E&V>I&N‘‰‘“L\"+_$—ÈÄö¾Oâj‘‰‘Oj‘‰‘oj‘‰‘“Ll"+o$›ÈÄÊÉÄ-2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[db{ß'qµÈÄÈI&6‘‰‘“Ll"+ï$»ÈÄþ'q µÈÄÈI&‘‰•O’‰Sdbådâ™9ÈÄ?üïPÿæí‡dâ™Xù$™8E&V¾H&.‘‰‘“L\"ûÏ÷IœC-21òEC-21òCC-21r’‰Mdbådb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-21r’‰[dbÿù>‰s¨E&FN2±‰LŒœdb™Xy'™ØE&ö'q µÈÄÈI&‘‰•O’‰Sdbådâ™ù¢¡™ø›·’‰Sdbå“dâ™Xù"™¸D&FN2q‰Lìíû$Ρ™ù¦¡™ù¥¡™Xy#™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™9}ƒ>"{û>‰s¨E&FN2±‰L¬¼“Lì"#'™ØE&ö'q µÈÄÈI&N‘‰•O’‰Sdbådâ™ù¦¡™ø›·’‰Sdbå‹dâ™9ÉÄ%21r’‰Kdbïß'qµÈÄÈ µÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰•ú}D&öþ}çP‹LŒœdb™Xy'™ØE&FN2±‹LìNâj‘‰•O’‰Sdbä$§ÈÄÊÉÄ'21òCC-2ñ7o?$—ÈÄÊÉÄ%21r’‰Kdbä$·ÈÄ>¾Oâj‘‰‘_j‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“L<"+?ô úˆLìãû$Ρ™Xy'™ØE&FN2±‹LŒœdb™Ø'œÄ5ÔSdbå“dâ™9ÉÄ)2±òG2ñ‰LŒüÒP‹LüÍÛÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&öù}çP‹LŒœdb™Xy#™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&FNß ÈÄ>¿Oâê.2±òN2±‹LŒœdb™9ÉÄ.2±/8‰c¨E&FN2qŠLŒœdâ™Xù#™øD&Fþh¨E&þæí‡dâ™Xù"™¸D&FN2q‹L¬|“LÜ"ûú>‰s¨E&VÞH&6‘‰‘“Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2ñˆL¬üL<"#§oÐGdâoþwc¨E&FN2±‹LŒœdb™9ÉÄ.2±o8‰c¨E&FN2qŠLŒœdâ™Xù#™øD&þæß×ÅP‹LŒœdâ™Xù"™¸D&FN2q‹L¬|“LÜ"ûþ>‰ã?®‰L¬¼‘Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹L¬üL<"#'™xD&FNß ÈÄßüïÇP‹LŒœdb™9ÉÄ.21r’‰]db?pÇP‹LŒœdâ™Xù"™¸D&Vþ@&þ™à?C}à}] µÈÄÈI&.‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-2ñ7ÿ‹>b¨E&FN2±‰LŒœdb™9ÉÄ&21r’‰]dbå›dâ™9ÉÄ#2±òC2ñˆLŒœdâ™9}ƒ>"ó¿{C-21r’‰]dbä$»ÈÄÈI&v‘‰ýÂIC-21r’‰Sdbå‹dâ™ø›ÿ}ïC-21òNC-21r’‰Kdbå‹dâ™9ÉÄ-2±òM2q‹Lì÷û$Ρ™9ÉÄ&21r’‰Mdbä$›ÈÄÊ;ÉÄ.2±òM2q‹L¬üL<"#'™xD&FN2ñˆLŒœ¾A‘‰¿ùß=Ž¡™9ÉÄ.21r’‰]dbä$‡ÈÄþà$Ž¡™9ÉÄ)2±òE2q‰Lìïû$Ρ™ù ¡™Xy#™¸D&V¾H&.‘‰‘“LÜ"+ß$·ÈÄþ¾Oâj‘‰‘“Ll"#'™ØD&FN2±‹L¬¼“Lì"+ß$ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈéô™Øß÷IœC-21r’‰]dbä$»ÈÄÊÉÄ!2qüÀIC-21r’‰Sdbå‹dâ™8~¾Oâj‘‰‘“Ll"+o$—ÈÄÊÉÄ%2±òM2q‹LŒœdâ™8~¾Oâj‘‰‘“Ll"#'™ØD&FN2±‹L¬¼“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&FNß ÈÄñó}çP‹LŒœdb™9ÉÄ!2±òA2qˆL Nâj‘‰‘“Lœ"+_$—ÈÄѾOâj‘‰‘“Ll"+o$—ÈÄÊÉÄ-2±òM2q‹LŒœdâ™8Ú÷IœC-21r’‰Mdbä$›ÈÄÊ;ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄÈéô™8Ú÷IœC-21r’‰]dbåƒdâ™9ÉÄ!2qt8‰c¨E&FN2q‰L¬|‘L\"Gÿ>‰s¨E&FN2±‰L¬¼‘L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"Gÿ>‰s¨E&FN2±‰LŒœdb™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù¥oÐWdâèß'qµÈÄÈI&‘‰•’‰Cdbä$‡ÈÄ1à$Ž¡™Xù"™¸D&FN2q‰Lãû$Ρ™9ÉÄ&2±òF2q‹L¬|“LÜ"#'™¸E&FN2ñˆLãû$Ρ™9ÉÄ&2±òN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Wdbå—¾A_‘‰c|ŸÄ9Ô"+$‡ÈÄÈI&‘‰‘“L"Ç„“¸†z‰L¬|‘L\"#'™¸D&Žù}çP‹LŒœdb™Xy#™¸E&V¾I&n‘‰‘“LÜ"+?$ÈÄ1¿Oâj‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"+¿$¯ÈÄÈéô™8æ÷IC=D&V>H&‘‰‘“L"#'™8D&Ž'q µÈÄÈI&.‘‰‘“L\"Çú>‰s¨E&FN2±‰L¬¼‘LÜ"+ß$·ÈÄÈI&‘‰•’‰GdâXß'qµÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&^‘‰•_’‰Wdbäô úŠLüÍÿîq µÈÄÈI&‘‰‘“L"#'™8D&Ž 'q µÈÄÈI&.‘‰‘“LÜ"Çþ>‰s¨E&VÞH&6‘‰‘“LÜ"+ß$·ÈÄÈI&‘‰•’‰GdâØß'qüÇu‘‰•w’‰]dbä$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈéô™ø›ÿÝãj‘‰‘“L"#'™8D&FN2qˆLNâj‘‰‘“L\"+ß$·ÈÄq¾Oâê&2±òF2±‰LŒœdâ™Xù&™¸E&FN2ñˆL¬üL<"ó¿è#†Zdbä$»ÈÄÈI&v‘‰‘“Lì"#'™8D&V~H&‘‰‘“L¼"+¿$¯ÈÄÈI&^‘‰‘Ó7è+2ñ7ÿ»Ç1Ô"#'™8D&FN2qˆLŒœdâ™8.œÄ1Ô"#'™¸D&V¾I&n‘‰¿ùß÷Î1Ô"#'™ØD&FN2q‹L¬|“LÜ"#'™xD&V~H&‘‰ã~ŸÄ9Ô"#'™ØE&FN2±‹LŒœdb™Xù ™8D&V~H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘Ó7è+2ñ7ÿ»Ç1Ô"#'™8D&FN2qˆLŒœdâ™8œÄ1Ô"#'™¸D&V¾I&n‘‰ã}ŸÄ9Ô"#'™ØD&VÞI&n‘‰•o’‰[dbä$ÈÄÊÉÄ#2q¼ï“8‡Zdbä$»ÈÄÈI&v‘‰‘“L"+$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ+21rú}E&Ž÷}çP‹LŒœdâ™9ÉÄ!2±òI2qŠLœ?pÇP‹LŒœdâ™Xù&™¸E&Οï“8‡Zdbä$»ÈÄÊ;ÉÄ-2±òM2q‹L¬üL<"#'™xD&Οï“8‡Zdbä$»ÈÄÈI&v‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰‘Ó7è+2qþ|ŸÄ9Ô"#'™8D&FN2qŠL¬|’Lœ"gƒ“8†Zdbä$—ÈÄÊ7ÉÄ-2q¶ï“8‡Zdbä$»ÈÄÊ;ÉÄ-2±òM2ñˆL¬üL<"#'™xD&Îö}çP‹LŒœdb™9ÉÄ.2±òA2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+21rúýD&Îö}çP‹LŒœdâ™Xù$™8E&FN2qŠLœNâj‘‰‘“LÜ"+ß$·ÈÄÙ¿Oâj‘‰‘“Lì"+ï$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÙ¿Oâj‘‰‘“Lì"#'™8D&V>H&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&Vþèô™8û÷IœC-21r’‰Sdbå“dâ™9ÉÄ)2q8‰c¨E&V¾I&n‘‰‘“LÜ"çø>‰s¨E&FN2±‹L¬¼“L<"+?$ÈÄÈI&‘‰‘“L¼"çø>‰s¨E&FN2±‹L¬|L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™Xù£oÐOdâß'qµÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄ9á$®¡Þ"+ß$·ÈÄÈI&n‘‰s~ŸÄ9Ô"#'™ØE&VÞI&‘‰•’‰Gdbä$ÈÄÊ/ÉÄ+2qÎï“8‡Zdbä$‡ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÊÉÄ'21rúýD&Îù}ÇPO‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰sÁIC-21r’‰[dbä$·ÈĹ¾Oâj‘‰‘“Lì"+ï$ÈÄÊÉÄ#21r’‰Wdbå—dâ™8×÷IœC-2±òA2qˆLŒœdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Odbådâ™9}ƒ~"ó¿{C-21r’‰Sdbä$§ÈÄÈI&N‘‰sÃIC-21r’‰[dbä$ÈĹ¿Oâj‘‰•w’‰]dbä$ÈÄÊÉÄ#21r’‰Wdbå—dâ™8÷÷IÿqCdbåƒdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbådâ™9ÉÄ'21rúýD&þæ÷8†Zdbä$§ÈÄÈI&N‘‰‘“Lœ"ç“8†Zdbä$·ÈÄÊÉÄ#2qžï“8†º‹L¬¼“Lì"#'™xD&V~H&‘‰‘“L¼"+¿$¯ÈÄßü/úˆ¡™9ÉÄ!21r’‰Cdbä$‡ÈÄÈI&N‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'21r’‰Odbäô ú‰LüÍÿîq µÈÄÈI&N‘‰‘“Lœ"#'™8E&Î 'q µÈÄÈI&n‘‰•’‰Gdâoþ÷½s µÈÄÈI&v‘‰‘“L<"+?$ÈÄÈI&^‘‰•_’‰Wdâ¼ß'qµÈÄÈI&‘‰‘“L"#'™8D&V>I&N‘‰•_’‰Wdbådâ™9ÉÄ'21r’‰Odbäô ú‰LüÍÿîq µÈÄÈI&N‘‰‘“Lœ"#'™¸D&Î'q µÈÄÈI&n‘‰•’‰Gdâ|ß'qµÈÄÈI&v‘‰•’‰Gdbå‡dâ™9ÉÄ+2±òK2ñŠLœïû$Ρ™9ÉÄ!21r’‰Cdbä$§ÈÄÊ'ÉÄ)2±òK2ñ‰L¬ü‘L|"#'™øD&FN2ñ‰LŒœ¾A?‘‰ó}ŸÄ9Ô"#'™8E&FN2qŠL¬|‘L\"לÄ1Ô"#'™¸E&V~H&‘‰ëçû$Ρ™9ÉÄ!2±òA2ñˆL¬üL<"+¿$¯ÈÄÈI&^‘‰ëçû$Ρ™9ÉÄ!21r’‰Cdbä$§ÈÄÊ'ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r’‰Odbäô ú‰L\?ß'qµÈÄÈI&N‘‰‘“L\"+_$—ÈÄÕà$Ž¡™9ÉÄ-2±òC2ñˆL\íû$Ρ™9ÉÄ!2±òA2ñˆL¬üL¼"+¿$¯ÈÄÈI&^‘‰«}ŸÄ9Ô"#'™8D&FN2qˆL¬|’Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰LŒ¾A‘‰«}ŸÄ9Ô"#'™8E&V¾H&.‘‰‘“L\"W‡“8†Zdbä$ÈÄÊÉÄ#2qõï“8‡Zdbä$‡ÈÄÊÉÄ#2±òK2ñŠLŒœdâ™9ÉÄ+2qõï“8‡Zdbä$‡ÈÄÈI&N‘‰•O’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰¿ùß=Ž¡™Xù$™8E&FN2q‰L¬|‘L\"#'™¸D&®'q µÈÄÊÉÄ#21r’‰Gdâß'qµÈÄÈI&‘‰•’‰Wdbå—dâ™9ÉÄ+21r’‰Odâß'qµÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘ƒLü;Áçóÿ»Ç1Ô"+Ÿ$§ÈÄÊÉÄ%21r’‰Kdbä$—ÈÄ5á$®¡>"+?$ÈÄÈI&‘‰k~ŸÄ9Ô"#'™8D&V>H&^‘‰•_’‰Wdbä$¯ÈÄÊÉÄ'2qÍï“8‡Zdbä$§ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄßüŸ=þw¨E&FÞi¨E&V>I&.‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰kÁIC-21r’‰Gdbä$Èĵ¾Oâj‘‰‘“L"+$¯ÈÄÊ/ÉÄ+21r’‰Odbåd♸Ö÷IœC-2±òI2qŠLŒœdâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r‰Nâ?C½¾Nâ‡Zdb䃆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—Èĵá$Ž¡™9ÉÄ#21r’‰WdâÚß'qµÈÄÊÉÄ!21r’‰Wdbå—dâ™9ÉÄ'2±òG2ñ‰L\ûû$Ž¡ž"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"ó÷øŸ¡™y§¡™ù¤¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2q8‰c¨E&FN2ñˆL¬ü’L¼"×ù>‰c¨‡ÈÄÊÉÄ!21r’‰Wdbå—dâ™9ÉÄ'2±òG2ñ‰LüÍÿ¢j‘‰‘“Lœ"#'™8E&FN2qŠLŒœdâ™Xù#™øD&F2ñß þ;ÔçóWâ†Zdb䃆Zdb䋆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈÄuá$Ž¡™9ÉÄ#2±òK2ñŠLüÍÿ¾wŽ¡™9ÉÄ!21r’‰Wdbå—dâ™9ÉÄ'2±òG2ñ‰L\÷û$Ρ™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ%2±òG2ñ‰LüÍÿüD‘C-21òNC-21òIC-21òMC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰[dâzpÇP‹LŒœdâ™Xù%™xE&®÷}çP‹LŒœdâ™Xù$™xE&V~I&^‘‰‘“L|"+$ŸÈÄõ¾Oâj‘‰‘“Lœ"#'™8E&FN2q‰L¬|‘L\"+ ÿLðŸ¡~ß'r¨E&F>h¨E&F¾h¨E&F~h¨E&V¾H&.‘‰‘“L\"#'™¸D&V¾I&n‘‰ûNâj‘‰‘“L<"+¿$¯ÈÄýó}çP‹LŒœdâ™Xù$™xE&V~I&^‘‰•?’‰Odbä$ŸÈÄýó}çP‹LŒœdâ™9ÉÄ)21r’‰Kdbå‹dâ™ø›ÿÙãj‘‰‘wj‘‰‘Oj‘‰‘oj‘‰‘_j‘‰•/’‰Kdbä$—ÈÄÈI&n‘‰•o’‰[dânpÇP‹LŒœdâ™Xù%™xE&îö}çP‹LŒœdâ™Xù$™xE&V~I&>‘‰•?’‰Odbä$ŸÈÄݾOâj‘‰‘“Lœ"#'™8E&V¾H&.‘‰‘“L\"ó?{œC-21òAC-21òEC-21òCC-21r’‰Mdbå‹dâ™9ÉÄ%2±òM2q‹LŒœd♸;œÄ1Ô"#'™xE&V~I&^‘‰»ŸÄ9Ô"#'™8E&V>I&^‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰»ŸÄ9Ô"#'™8E&FN2q‰L¬|‘L\"#'™¸D&îþ}çP‹LŒ|ÒP‹LŒ|ÓP‹LŒüÒP‹L¬¼‘Ll"+_$—ÈÄÈI&n‘‰•o’‰[dbä$·ÈÄ=à$Ž¡™Xù%™xE&FN2ñŠLÜãû$Ρ™9ÉÄ)2±òI2ñ‰L¬ü‘L|"#'™øD&F2±ÿˆLÜãû$Ρ™9ÉÄ)2±òE2q‰LŒœdâ™9ÉÄ%2qï“8‡Zdb䋆Zdb䇆Zdbä$›ÈÄÊÉÄ&2±òE2q‰L¬|“LÜ"#'™¸E&FN2q‹LÜNâê+2±òK2ñŠLŒœd♸ç÷IœC-21r’‰Sdbå“dâ™Xù#™øD&FN2ñ‰LüÍÿîq µÈÄÊ'ÉÄ)21r’‰Kdbå‹dâ™9ÉÄ%21r’‰Kdâžß'qµÈÄÈ7 µÈÄÈ/ µÈÄÊÉÄ&21r’‰Mdbå‹dâ™Xù&™¸E&FN2q‹LŒœd♸œÄ1Ô"#'™xE&FN2ñŠLÜëû$Ρ™9ÉÄ)2±òI2ñ‰L¬ü‘L|"#™øg‚ÿ õ¯Pûi4Ô"+Ÿ$§ÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰{}ŸÄ9Ô"#?4Ô"#'™ØD&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&î 'q µÈÄÈI&^‘‰‘“L|"÷þ>‰s¨E&V>I&N‘‰‘“L|"+$ŸÈÄÈ7 µÈÄßüïÇP‹L¬|’L\"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&îý}çP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœd♸œÄ1Ô"#'™xE&VþH&>‘‰û|ŸÄ1ÔSdbå“dâ™9ÉÄ'2±òG2ñ‰LŒüÐP‹LüÍÿîq µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰‘“LÜ"÷ù>‰s¨E&FN2±‰L¬¼‘Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœd♸/œÄ1Ô"#'™xE&VþH&>‘‰¿ùß÷Î1Ô"#'™8E&FN2ñ‰L¬ü‘L|"#¿4Ô"ó¿{C-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbå›d♸ï÷IœC-2±òF2±‰LŒœdb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$ÈÄýà$Ž¡™9ÉÄ+2±òG2ñ‰LÜïû$Ρ™9ÉÄ)2±òE2ñ‰L¬ü‘L|"#4Ô"ó¿{C-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰[dbå›d♸ß÷ICÝD&VÞH&6‘‰‘“Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹L¬üL<"ÏœÄ1Ô"#'™xE&VþH&>‘‰ççû$Ρ™9ÉÄ%2±òE2ñ‰L¬ü‘L|"ó¿Ï6b¨E&F¾i¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‹L¬|“LÜ"ó?{œC-21r’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“L<"+?$ÈÄÓà$Ž¡™9ÉÄ+2±òG2ñ‰L<íû$Ρ™9ÉÄ%2±òE2ñ‰L¬üLü3Á†ºÁ³j‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰•o’‰[dbä$·ÈÄßüÏçP‹LŒœdb™9ÉÄ&21r’‰Mdbä$»ÈÄÊ7ÉÄ-21r’‰[dbå‡dâ™9ÉÄ#2ñt8‰c¨E&FN2ñ‰L¬ü‘L|"Oÿ>‰s¨E&FN2q‰L¬|‘L|"ó¿'q µÈÄÈ; µÈÄÈ/ µÈÄÊÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-21r’‰[dâéß'qµÈÄÈI&6‘‰‘“Ll"#'™ØD&VÞI&v‘‰•o’‰[dbä$ÈÄÊÉÄ#21r’‰GdâpÇP‹L¬ü‘L|"#'™øD&žñ}çP‹LŒœdâ™Xù™ø÷%ó¿C=à$Ž¡™ù ¡™9ÉÄ&2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LŒœdâ™xÆ÷IœC-21r’‰Mdbä$›ÈÄÈI&v‘‰•w’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™x&œÄ5ÔOdbådâ™9ÉÄ'2ñÌï“8‡Zdbä$—ÈÄÊ×¢¡™x&œÄ1Ô"#Ÿ4Ô"+o$›ÈÄÊÉÄ%21r’‰[dbå›dâ™9ÉÄ-21r’‰[dâ™ß'qµÈÄÈI&6‘‰‘“Ll"+ï$»ÈÄÈI&v‘‰•o’‰Gdbå‡dâ™9ÉÄ#21r’‰GdâYpÇP‹LŒœdâ™9ÉÄ'2ñ¬ï“8‡Zdbä$—ÈÄÊצ¡™xœÄ1Ô"#'™ØD&VÞH&6‘‰•/’‰Kdbå›dâ™9ÉÄ-21r’‰[dbä$·Èij¾Oâj‘‰‘“Ll"#'™ØE&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&ž 'q µÈÄÈI&>‘‰‘ƒLl?"Ïþ>‰s¨E&V¾H&.‘‰‘j‘‰gÃIC-21r’‰Mdbådb™Xù"™¸E&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹L<ûû$Ρ™9ÉÄ&2±òN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Gdâ9pÇP‹LŒœdâ™ø›ÿÙãj‘‰•O’‰Kdbå‹dâ™ù¥¡™xœÄ1Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"#'™xD&žó}çP‹LŒœdb™Xy'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2ñ\8‰c¨E&FN2ñ‰LüÍÿìqµÈÄÊÉÄ%21r’‰Kdbä†Zdâ¹pÇP‹LŒœdb™Xy#™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹L¬üL<"Ïý>‰s¨E&VÞI&v‘‰‘“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™xœÄ1Ô"#'™øD&þæö8‡Zdbå‹dâ™9ÉÄ%2±òýCC-2ñ<8‰c¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™xD&V~H&‘‰ç}ŸÄ1Ô]dbådb™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÊ/ÉÄ+2ñþÀIC-21r’‰Odâoþgs¨E&V¾H&.‘‰‘“LÜ"+߆Zdâý“8†Zdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰Gdbå‡dâ™ø›ÿÙãj‘‰‘“Lì"#'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™Xù%™xE&Þ'q µÈÄÈI&>‘‰¿ùŸ=Ρ™Xù"™¸D&FN2q‹L¬|wj‘‰·ÁI\CÝD&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"+?$ÈÄÈI&‘‰¿ùŸ=Ρ™9ÉÄ.21r’‰]dbä$»ÈÄÈI&‘‰•’‰Gdbä$ÈÄÊ/ÉÄ+21r’‰WdâípÇP‹LŒdâ?Ÿ ÿ3Ô¿¸ïgÑP‹L¬|‘L\"#'™¸E&V¾ µÈÄßüïIC-21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$ÈÄÊÉÄ#21r’‰Gdâíß'qµÈÄÈI&v‘‰‘“Lì"#'™ØE&V>H&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+21r’‰WdâpÇP‹LüÍÿ<ÛÈ¡™ù¦¡™Xù"™¸D&FN2q‹L¬|“Ll"ó¿'q µÈÄÈI&6‘‰‘“Lì"+ß$·ÈÄÈI&n‘‰•’‰Gdbä$ÈÄÈI&‘‰w|ŸÄ9Ô"#'™ØE&FN2±‹LŒœdâ™Xù ™8D&V~H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰wÂIü;Ô_2ÿ;ÔóûÙFµÈÄÈ µÈÄÊÉÄ%21r’‰[dbå›db™x'œÄ1Ô"#'™ØD&VÞI&v‘‰•o’‰[dbä$ÈÄÊÉÄ#21r’‰Gdbä$ÈÄ;¿Oâj‘‰‘“Lì"#'™ØE&V>H&‘‰‘“L"+?$¯ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄ»à$Ž¡™y§¡™ù¥¡™Xù"™¸D&FN2q‹L¬|“Ll"ï‚“8†Zdbä$»ÈÄÊ;ÉÄ.2±òM2q‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™x×÷IœC-21r’‰]dbä$‡ÈÄÊÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄ»á$Ž¡™ù ¡™9ÉÄ&2±òE2q‰L¬|“LÜ"#'™ØD&Þ 'q µÈÄÈI&v‘‰•w’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2ñîï“8‡Zdbä$»ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰÷ÀIC-21òIC-2±òF2±‰L¬|‘LÜ"+ß$·ÈÄÈI&6‘‰÷ÀIC-21r’‰]dbådb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#21r’‰Wdâ=ß'qµÈÄÈI&‘‰•’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"ï…“8†Zdb䋆Zdbådb™Xù&™¸E&FN2q‹LŒœdb™x/œÄ1Ô"#'™ØE&VÞI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"+¿$¯ÈÄ{¿Oâj‘‰•’‰Cdbä$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™øD&Þ'q µÈÄÈ7 µÈÄÊÉÄ&2±òM2q‹LŒœdâ™Xù!™ØD&Þ'q µÈÄÈI&v‘‰•w’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$¯ÈÄÊ/ÉÄ+2ñ¾ï“8†zˆL¬|L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™Xù#™øD&¾8‰c¨E&F~h¨E&VÞH&6‘‰•o’‰[dbä$ÈÄÊÉÄ&2ñýÀIC-2±òN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ+2±òK2ñŠLüÍÿìqµÈÄÈI&‘‰‘“L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñ‰L¬ü‘L|"_ƒ“8†Zdbä—†Zdbådb™Xù&™¸E&FN2ñˆL¬üLl"_ƒ“¸†º‹L¬¼“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&V~I&^‘‰‘“L¼"ó?{œC-21r’‰Cdbä$‡ÈÄÈI&‘‰‘“Lœ"+¿$¯ÈÄÈI&^‘‰•?’‰Odbä$ŸÈÄ×á$Ž¡™9ÉÄ&2±òF2±‰L¬|“LÜ"#'™xD&V~H&6‘‰¿ùß“8†Zdbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&^‘‰•_’‰Wdbä$¯ÈÄ׿Oâj‘‰‘“L"#'™8D&FN2qˆL¬|’Lœ"+¿$¯ÈÄÈI&>‘‰•?’‰Odbä$ŸÈÄ7à$Ž¡™Xy#™ØD&FN2±‰L¬|“LÜ"#'™xD&V~H&v‘‰¿ùß“8†Zdbä$»ÈÄÈI&‘‰•’‰Gdbä$ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄ7¾Oâj‘‰‘“L"#'™8D&FN2qŠL¬|’Lœ"+¿$¯ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄ7á$®¡n"+o$›ÈÄÈI&6‘‰•o’‰[dbä$ÈÄÊÉÄ.2ñM8‰c¨E&FN2±‹L¬|L"+?$ÈÄÈI&^‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰o~ŸÄ9Ô"#'™8D&FN2qˆL¬|’Lœ"#'™8E&V~I&>‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰oÁIC-21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™øœÄ1Ô"#'™8D&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄ·¾Oâj‘‰‘“L"#'™8E&V>I&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&¾ 'q µÈÄÈI&6‘‰‘“Lì"+ß$·ÈÄÊÉÄ#21r’‰]dâÛpÇP‹LŒœdâ™Xù ™8D&V~H&^‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"ßþ>‰s¨E&FN2qˆL¬|’Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™øœÄ1Ô"#'™ØD&VÞI&v‘‰•o’‰Gdbå‡dâ™9ÉÄ.2ñ8‰c¨E&FN2qˆL¬|L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&FN2ñ‰L|çû$Ρ™9ÉÄ)2±òI2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r’‰Odâ»pÇP‹LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"#'™ØE&¾ 'q µÈÄÈI&‘‰•’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄÊÉÄ'2ñÝï“8‡Zdbå“dâ™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈA&Α‰ïÁIC-21r’‰Mdbådb™Xù!™xD&FN2ñˆL¬ü’Lì"߃“8†Zdbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Odbådâ™øÞ÷IC=E&V>I&N‘‰‘“Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LüÍÿÝ㆚eâÿ¢ÿžÄ1Ô,3'™ØX&FÞI&v–‰‘’‰‡ebæ$/ËÄÈ/ÉÄÎ2±ò¿'q 5ËÄÈÉÄÁ21s’‰ƒebä—dâe™˜9ÉÄË21s’‰—ebæ$ËÄÈÉÄÇ2±ò?{œCÍ21s’‰“ebæ$'ËÄÌI&N–‰™“Lœ,#$ËÄÌI&>–‰™ƒLüg‚ÿ uåÿîñ?CÝe¨œÄ1ÔG†º}?ÛÈ¡~2Ô¿y'™Ø— uû>‰s¨§ uƒ÷u1ÔM†ú7¿$û•¡np×PêÏ6b¨· uå$Ç•¡nß'qõ’¡nß'qõ‘¡nß'qõ“¡nß¿]äPwêÊI&¾)CݾOâê.CݾNäPOêöù+ñ?C½e¨Û×IüïP_êÊI&®êö}çPêöyÿ3ÔO†º}žÄÿ u“¡®¼ÓPê'q õ•¡îßÏ6b¨û õoÞI&ö-CÝ¿Oâê%CÝá}] u—¡þÍ/ÉÄþd¨;œÄ1ÔM†ºÃ³ê#C]9ÉÄñd¨û÷IœC½e¨û÷IœC}e¨û÷ICý~d¨û÷o9ÔC†ºr’‰oÉP÷ï“8‡zÈP÷ï‡9ÔK†ºþJüÏPêþuÿ;ÔO†ú7_$W“¡îß'qõ•¡îŸ'q õŸ_‰ÿ uÿ<‰ÿê.C]ù ¡ž2ÔNâê'C=¾ŸmäP7êÊI&ö#C=¾Oâê-C=à}] õ¡þÍ/ÉÄñ#C=à$Ž¡î2ÔžmÄP_êÊI&Îêñ}çPêñ}çP?êñ}çP7êñýÛEõ”¡®œdâÛ2Ôãû$Ρž2ÔãûáDõ–¡Ÿ¿ÿ3ÔW†z|Äÿ õú‘¡þÍÉÄÕe¨Ç÷IœCýd¨ÇçIüÏP7êñyÿ3ÔC†ºòIC½d¨'œÄ5ÔýG†z~?ÛÈ¡î2Ô•“LìW†z~ŸÄ9ÔG†zÂûºê)Cý›_’‰£ÉPO8‰c¨‡ õ„g1ÔO†ú7Ÿ$g“¡žß'qõ•¡žß'q õû‘¡žß'qu—¡žß¿]äP/êÊI&¾#C=¿Oâê%C=¿NäPêùù+ñ?Cýd¨ç×IüïP7êÊI&®!C=¿Oâêùó#C=?O↺ËPÏÏ“øŸ¡ž2Ô•/ê-C½à$Ž¡n2ÔëûÙFõ¡®œdb2Ôëû$Ρ¾2Ô Þ×ÅP/êßü’L]†zÁIC=e¨<Û¨¡ž?2Ô¿ù$™8» õú>‰s¨Ÿ õú>‰s¨› õú>‰s¨‡ õúþí"‡zËPWN2ñ]êõ}çPoêõýp"‡úÊP¯Ï_‰s¨× õú:‰ÿê.C]9ÉÄ5e¨×÷IœCÝd¨×çIüÏPêõyÿ3ÔK†ºòMC}d¨7œÄ1Ô]†z?ÛÈ¡ž2Ô•“L?2Ôûû$Ρ~2ÔÞ×ÅPoêÊI&Ž!C½á$Ž¡^2ÔžmÄP7êß|’LœC†zŸÄ1ÔïG†zŸÄ9Ô]†zŸÄ9ÔS†zÿv‘C}d¨+'™øž õþ>‰s¨ õþ~8‘Cýd¨÷ç¯Äÿ u“¡Þ_'ñ¿C=d¨+'™¸– õþ>‰s¨» õþ<‰ÿê)C½?Oâ†zËPW~h¨¯ õ“8†zÈPŸïg9ÔK†ú7$G“¡>ß'q õý‘¡>ð¾.†úÈPWN2qLê'q õ–¡>ðl#†ºËPÿæ“dâœ2Ôçû$Ρn2Ôçû$Ρ2Ôçû$Ρ^2Ôçû·‹ê+C]9ÈÄñó#C}¾Oâê+C}¾NÄP¯êóù+ñ?CÝe¨Ï×IüïPOêÊI&®-C}¾Oâê!C}>Oâ†zÉPŸÏ“øŸ¡>2Ô•_ê'C}á$Ž¡ž2Ô÷ûÙFõ–¡þÍÉÄÑe¨ï÷IœCÝd¨/¼¯‹¡¾2Ô•“LK†úÂIC}d¨/<Ûˆ¡2Ô¿ù$™8— õý>‰s¨» õý>‰s¨§ õý>‰s¨· õýþí"‡úÉPÿ³Ÿê&C}¿Oâê'C}¿NäP7êûù+ñ?C=d¨ï×IüïP/êÊI&®#C}¿Oâê)C}?Oâ†zËPßÏ“øŸ¡¾2Ô•“Ll?2ÔNâê%Cý¾ŸmäPêß|LC†ú}ŸÄ9Ô]†úÁûºê'Cý›?’‰cËP?8‰c¨¯ õƒg1ÔS†ú7Ÿ$ç–¡~ß'qõ¡~ß'qõ’¡~ß'qõ‘¡~ß¿]ÔPÿ™à?Cý+Ô~ u—¡~ß'q õú‘¡~ß'r¨» õûü•øŸ¡ž2Ôïë$þw¨· uå$ו¡~ß'qõ’¡~Ÿ'ñ?C}d¨ßçIüÏP?êß¼‘Ll"ÛœÄ1Ô"#'™ØE&V>H&‘‰•_’‰Wdbä$ŸÈÄÊÉÄ!2±ýÀIC-2±òI2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™ù£¡™ø›ŸNC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbä$—ÈÄöó}çP‹LŒüÐP‹LŒœdb™Xy#™ØD&¶'q µÈÄÈI&v‘‰•’‰Cdbå—dâ™9ÉÄ'2±òG2qˆLl Nâê)2±òI2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™ø›ÿ=œc¨E&F>h¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰LŒœdâ™ØÚ÷IœC-21òKC-2±òF2±‰LŒœdb™Ø:œÄ1Ô"#'™8D&V>H&‘‰•_’‰Wdbä$ŸÈÄÊÉÄ!2ñ7ÿ{ÇP‹LŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÈÄ?üg¨û÷o9Ô"#Ÿ4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&V¾I&n‘‰­ŸÄ9Ô"#'™ØD&VÞH&6‘‰‘“Ll"Û€“8†Zdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™8E&þæOâj‘‰‘“Lœ"#'™¸D&VþH&>‘‰‘“L|"ó?{œC-21òNC-21òEC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰[dbå›dâ™ØÆ÷IœC-2±òF2±‰LŒœdb™9ÉÄ&2±M8‰k¨‡ÈÄÊÉÄ!21r’‰Cdbå—dâ™9ÉÄ'2±òG2qŠLlNâj‘‰‘“Lœ"+_$—ÈÄÊÉÄ'21r‰_¸ý;Ôóû$Ρ™ù ¡™ù¦¡™Xù"™¸D&FN2q‰LŒœdâ™Xù&™¸E&FN2q‹Llóû$Ž¡n"+o$›ÈÄÈI&6‘‰‘“Ll"Û‚“8†Zdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$ŸÈÄÊÉÄ)2±-8‰c¨E&FN2q‰L¬|‘L\"+$ŸÈÄßü?/Žk¨E&FÞi¨E&F>i¨E&F~h¨E&V¾H&.‘‰‘“L\"#'™¸E&V¾I&n‘‰‘“LÜ"ó¿{C-21r’‰Mdbä$›ÈÄÈI&6‘‰mÃIC-21r’‰Cdbä$§ÈÄÊ/ÉÄ+2±òG2ñ‰LŒœdâ™Ø6œÄ1Ô"#'™¸D&V¾H&.‘‰•?ú*ô#2ñ7ÿÏ‹ãj‘‰‘j‘‰‘/j‘‰‘_j‘‰•/’‰Kdbä$—ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄßüïÇP‹LŒœdb™9ÉÄ&21r’‰Mdb;pÇP‹LŒœdâ™Xù$™8E&V~I&>‘‰•?’‰Odbä$§ÈÄvà$Ž¡™9ÉÄ%2±òE2q‰LüÍÿ¢j‘‰‘wj‘‰‘Oj‘‰‘oj‘‰‘“Ll"+_$—ÈÄÈI&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰¿ùß=Ž¡™9ÉÄ&21r’‰Mdbä$›ÈÄvá$Ž¡™9ÉÄ!2±òI2qŠL¬ü‘L|"#'™øD&FN2qŠLlNâj‘‰‘“L\"+_$—ÈÄv¿Oâj‘‰‘j‘‰‘/j‘‰‘j‘‰•7’‰Mdbå‹dâ™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2ñ7ÿ»Ç1Ô"#'™ØD&FN2±‰LŒœdb™ØœÄ1Ô"#'™8D&V>I&N‘‰•?’‰Odbä$ŸÈÄß¼ÿLœ"+Ÿ$§ÈÄÈI&.‘‰•/’‰Kdb{ß'qµÈÄÈ' µÈÄÈ7 µÈÄÈI&6‘‰•7’‰Mdbå‹dâ™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2±½ï“8‡Zdbä$›ÈÄÈI&6‘‰•w’‰]dbÿ“8†Zdbä$‡ÈÄÊ'ÉÄ)2±òG2ñ‰LŒd⟠þw¨óþC2qŠL¬|’Lœ"+_$—ÈÄÈI&.‘‰ýçû$Ρ™ù¢¡™ù¡¡™9ÉÄ&2±òF2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™9ÉÄ-2±ÿ|ŸÄ9Ô"#'™ØD&FN2±‹L¬¼“Lì"{ƒ“8†Zdbä$‡ÈÄÊ'ÉÄ)2±òG2ñ‰LŒ|ÑP‹LüÍûÉÄ)2±òI2q‰L¬|‘L\"#'™¸D&öö}çP‹LŒ|ÓP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LŒœ¾A‘‰½}ŸÄ9Ô"#'™ØD&VÞI&v‘‰‘“Lì"{‡“8†Zdbä$§ÈÄÊ'ÉÄ)2±òG2ñ‰LŒ|ÓP‹LüÍûÉÄ)2±òE2q‰LŒœdâ™9ÉÄ%2±÷ï“8‡Zdb䇆Zdbä$›ÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄÊ}ƒ>"{ÿ>‰s¨E&FN2±‹L¬¼“Lì"#'™ØE&ö'q µÈÄÊ'ÉÄ)21r’‰Sdbådâ™ù¡¡™ø›÷’‰Kdbå‹dâ™9ÉÄ%21r’‰[dbß'qµÈÄÈ/ µÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&‘‰•ú}D&öñ}çP‹L¬¼“Lì"#'™ØE&FN2±‹LìNâê)2±òI2qŠLŒœdâ™Xù#™øD&F~i¨E&þæý‡dâ™Xù"™¸D&FN2q‰L¬|“LÜ"ûü>‰s¨E&FN2±‰L¬¼‘Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹L¬üL<"#§oÐGdbŸß'q u™Xy'™ØE&FN2±‹LŒœdb™ØœÄ1Ô"#'™8E&FN2qŠL¬ü‘L|"#4Ô"óþC2q‰L¬|‘L\"#'™¸E&V¾I&n‘‰}}ŸÄ9Ô"+o$›ÈÄÈI&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™xD&V~H&‘‰‘Ó7è#2ñ7ÿ»Ç1Ô"#'™ØE&FN2±‹LŒœdb™Ø7œÄ1Ô"#'™8E&FN2q‰L¬ü‘L|"ó¿ïëb¨E&FN2q‰L¬|‘L\"#'™¸E&V¾I&n‘‰}ŸÄñ×D&VÞH&6‘‰‘“Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&V~H&‘‰‘“L<"#§oÐGdâoþwc¨E&FN2±‹LŒœdb™9ÉÄ.2±8‰c¨E&FN2qŠL¬|‘L\"+ ÿLðŸ¡>ð¾.†Zdbä$—ÈÄÊÉÄ%21r’‰[dbå›dâ™ø›ÿE1Ô"#'™ØD&FN2±‰LŒœdb™9ÉÄ.2±òM2q‹LŒœdâ™Xù!™xD&FN2ñˆLŒœ¾A‘‰¿ùß=Ž¡™9ÉÄ.21r’‰]dbä$»ÈÄ~á$Ž¡™9ÉÄ)2±òE2q‰LüÍÿ¾wŽ¡™y§¡™9ÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&öû}çP‹LŒœdb™9ÉÄ&21r’‰Mdbådb™Xù&™¸E&V~H&‘‰‘“L<"#'™xD&FNß ÈÄßüïÇP‹LŒœdb™9ÉÄ.21r’‰CdbpÇP‹LŒœdâ™Xù"™¸D&ö÷}çP‹LŒ|ÐP‹L¬¼‘L\"+_$—ÈÄÈI&n‘‰•o’‰[dbß'qµÈÄÈI&6‘‰‘“Ll"#'™ØE&VÞI&v‘‰•o’‰Gdbå‡dâ™9ÉÄ#21r’‰Gdbäô úˆLìïû$Ρ™9ÉÄ.21r’‰]dbåƒdâ™8~à$Ž¡™9ÉÄ)2±òE2q‰L?ß'qµÈÄÈI&6‘‰•7’‰Kdbå‹dâ™Xù&™¸E&FN2q‹L?ß'qµÈÄÈI&6‘‰‘“Ll"#'™ØE&VÞI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"#§oÐGdâøù>‰s¨E&FN2±‹LŒœdâ™Xù ™8D&Ž'q µÈÄÈI&N‘‰•/’‰Kdâhß'qµÈÄÈI&6‘‰•7’‰Kdbå‹dâ™Xù&™¸E&FN2q‹Líû$Ρ™9ÉÄ&21r’‰Mdbådb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Gdbäô úŠLíû$Ρ™9ÉÄ.2±òA2qˆLŒœdâ™8:œÄ1Ô"#'™¸D&V¾H&.‘‰£ŸÄ9Ô"#'™ØD&VÞH&.‘‰•o’‰[dbä$·ÈÄÈI&n‘‰£ŸÄ9Ô"#'™ØD&FN2±‹L¬¼“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL¬üÒ7è+2qôï“8‡Zdbä$‡ÈÄÊÉÄ!21r’‰CdâpÇP‹L¬|‘L\"#'™¸D&Žñ}çP‹LŒœdb™Xy#™¸E&V¾I&n‘‰‘“LÜ"#'™xD&Žñ}çP‹LŒœdb™Xy'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ+2±òKß ¯ÈÄ1¾Oâj‘‰•’‰Cdbä$‡ÈÄÈI&‘‰cÂI\C½D&V¾H&.‘‰‘“L\"Çü>‰s¨E&FN2±‰L¬¼‘LÜ"+ß$·ÈÄÈI&n‘‰•’‰Gdâ˜ß'qµÈÄÈI&v‘‰•w’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰•_’‰Wdbäô úŠLóû$Ž¡"+$‡ÈÄÈI&‘‰‘“L"Ç‚“8†Zdbä$—ÈÄÈI&.‘‰c}ŸÄ9Ô"#'™ØD&VÞH&n‘‰•o’‰[dbä$ÈÄÊÉÄ#2q¬ï“8‡Zdbådb™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$¯ÈÄÊ/ÉÄ+21rú}E&þæ÷8†Zdbä$‡ÈÄÈI&‘‰‘“L"dž“8†Zdbä$—ÈÄÈI&n‘‰cŸÄ9Ô"+o$›ÈÄÈI&n‘‰•o’‰[dbä$ÈÄÊÉÄ#2qìï“8þãºÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÊ/ÉÄ+21r’‰Wdbäô úŠLüÍÿîq µÈÄÈI&‘‰‘“L"#'™8D&Ž'q µÈÄÈI&.‘‰•o’‰[dâ8ß'q u™Xy#™ØD&FN2q‹L¬|“LÜ"#'™xD&V~H&‘‰¿ù_ôC-21r’‰]dbä$»ÈÄÈI&v‘‰‘“L"+?$ÈÄÈI&^‘‰•_’‰Wdbä$¯ÈÄÈéô™ø›ÿÝãj‘‰‘“L"#'™8D&FN2qˆLNâj‘‰‘“L\"+ß$·ÈÄßüï{çj‘‰‘“Ll"#'™¸E&V¾I&n‘‰‘“L<"+?$ÈÄq¿Oâj‘‰‘“Lì"#'™ØE&FN2±‹L¬|L"+?$ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈéô™ø›ÿÝãj‘‰‘“L"#'™8D&FN2qŠLNâj‘‰‘“L\"+ß$·ÈÄñ¾Oâj‘‰‘“Ll"+ï$·ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™8Þ÷IœC-21r’‰]dbä$»ÈÄÈI&‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™9}ƒ¾"Çû>‰s¨E&FN2qˆLŒœdâ™Xù$™8E&Î8‰c¨E&FN2q‰L¬|“LÜ"çÏ÷IœC-21r’‰]dbådâ™Xù&™¸E&V~H&‘‰‘“L<"çÏ÷IœC-21r’‰]dbä$»ÈÄÈI&‘‰•’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄÈéô™8¾Oâj‘‰‘“L"#'™8E&V>I&N‘‰³ÁIC-21r’‰Kdbå›dâ™8Û÷IœC-21r’‰]dbådâ™Xù&™xD&V~H&‘‰‘“L<"gû>‰s¨E&FN2±‹LŒœdb™Xù ™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™9}ƒ~"gû>‰s¨E&FN2qˆL¬|’Lœ"#'™8E&Î'q µÈÄÈI&n‘‰•o’‰[dâìß'qµÈÄÈI&v‘‰•w’‰[dbå‡dâ™9ÉÄ#21r’‰Gdâìß'qµÈÄÈI&v‘‰‘“L"+$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"+ô ú‰Lœýû$Ρ™9ÉÄ)2±òI2qŠLŒœdâ™8œÄ1Ô"+ß$·ÈÄÈI&n‘‰s|ŸÄ9Ô"#'™ØE&VÞI&‘‰•’‰Gdbä$ÈÄÈI&^‘‰s|ŸÄ9Ô"#'™ØE&V>H&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñ‰L¬üÑ7è'2qŽï“8‡Zdbå“dâ™9ÉÄ)21r’‰Sdâœp×Po‘‰•o’‰[dbä$·ÈÄ9¿Oâj‘‰‘“Lì"+ï$ÈÄÊÉÄ#21r’‰Gdbå—dâ™8ç÷IœC-21r’‰Cdbåƒdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbådâ™9}ƒ~"çü>‰c¨§ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈĹà$Ž¡™9ÉÄ-21r’‰[dâ\ß'qµÈÄÈI&v‘‰•w’‰Gdbå‡dâ™9ÉÄ+2±òK2ñŠLœëû$Ρ™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ'2±òG2ñ‰LŒœ¾A?‘‰¿ùß=Ž¡™9ÉÄ)21r’‰Sdbä$§ÈĹá$Ž¡™9ÉÄ-21r’‰GdâÜß'qµÈÄÊ;ÉÄ.21r’‰Gdbå‡dâ™9ÉÄ+2±òK2ñŠLœûû$Žÿ¸!2±òA2qˆLŒœdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+2±òG2ñ‰LŒœdâ™9}ƒ~"ó¿{C-21r’‰Sdbä$§ÈÄÈI&N‘‰óÀIC-21r’‰[dbå‡dâ™8Ï÷ICÝE&VÞI&v‘‰‘“L<"+?$ÈÄÈI&^‘‰•_’‰Wdâoþ}ÄP‹LŒœdâ™9ÉÄ!21r’‰Cdbä$§ÈÄÊ/ÉÄ+21r’‰Odbådâ™9ÉÄ'21rúýD&þæ÷8†Zdbä$§ÈÄÈI&N‘‰‘“Lœ"ç…“8†Zdbä$·ÈÄÊÉÄ#2ñ7ÿûÞ9†Zdbä$»ÈÄÈI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+2qÞï“8‡Zdbä$‡ÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÊ/ÉÄ+2±òG2ñ‰LŒœdâ™9ÉÄ'21rúýD&þæ÷8†Zdbä$§ÈÄÈI&N‘‰‘“L\"烓8†Zdbä$·ÈÄÊÉÄ#2q¾ï“8‡Zdbä$»ÈÄÊÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Î÷}çP‹LŒœdâ™9ÉÄ!21r’‰Sdbå“dâ™Xù%™øD&VþH&>‘‰‘“L|"#'™øD&FNß ŸÈÄù¾Oâj‘‰‘“Lœ"#'™8E&V¾H&.‘‰ëNâj‘‰‘“LÜ"+?$ÈÄõó}çP‹LŒœdâ™Xù ™xD&V~H&‘‰•_’‰Wdbä$¯ÈÄõó}çP‹LŒœdâ™9ÉÄ!21r’‰Sdbå“dâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'21rúýD&®Ÿï“8‡Zdbä$§ÈÄÈI&.‘‰•/’‰KdâjpÇP‹LŒœdâ™Xù!™xD&®ö}çP‹LŒœdâ™Xù ™xD&V~H&^‘‰•_’‰Wdbä$¯ÈÄÕ¾Oâj‘‰‘“L"#'™8D&V>I&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&Fß çÈÄÕ¾Oâj‘‰‘“Lœ"+_$—ÈÄÈI&.‘‰«ÃIC-21r’‰Gdbå‡d♸ú÷IœC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœd♸ú÷IœC-21r’‰Cdbä$§ÈÄÊ'ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä$ŸÈÄßüïÇP‹L¬|’Lœ"#'™¸D&V¾H&.‘‰‘“L\"×€“8†Zdbå‡dâ™9ÉÄ#2qï“8‡Zdbä$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ'2qï“8‡Zdbä$‡ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈA&þàóùÇÿÝãj‘‰•O’‰Sdbå‹dâ™9ÉÄ%21r’‰Kdâšp×P‘‰•’‰Gdbä$ÈÄ5¿Oâj‘‰‘“L"+$¯ÈÄÊ/ÉÄ+21r’‰Wdbåd♸æ÷IœC-21r’‰Sdbå“dâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰OdâoþÏÿ;Ô"#ï4Ô"+Ÿ$—ÈÄÊÉÄ%21r’‰Kdbä$—Èĵà$Ž¡™9ÉÄ#21r’‰GdâZß'qµÈÄÈI&‘‰•’‰Wdbå—dâ™9ÉÄ'2±òG2ñ‰L\ëû$Ρ™Xù$™8E&FN2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÈÄ?'ñŸ¡^_'ñ¿C-21òAC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰KdâÚpÇP‹LŒœdâ™9ÉÄ+2qíï“8‡Zdbåƒdâ™9ÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&®ý}ÇPO‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰¿ù¿{üÏP‹LŒ¼ÓP‹LŒ|ÒP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸œÄ1Ô"#'™xD&V~I&^‘‰ë|ŸÄ1ÔCdbåƒdâ™9ÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&þæÑG µÈÄÈI&N‘‰‘“Lœ"#'™8E&FN2q‰L¬ü‘L|"#™øïÿêóù+ñ?C-21òAC-21òEC-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰KdâºpÇP‹LŒœdâ™Xù%™xE&þæß;ÇP‹LŒœdâ™9ÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&®û}çP‹LŒœdâ™9ÉÄ)21r’‰Sdbå‹dâ™Xù#™øD&þæ~¢È¡™y§¡™ù¤¡™ù¦¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ-2q=8‰c¨E&FN2ñˆL¬ü’L¼"×û>‰s¨E&FN2qˆL¬|’L¼"+¿$¯ÈÄÈI&>‘‰•?’‰Odâzß'qµÈÄÈI&N‘‰‘“Lœ"#'™¸D&V¾H&.‘‰•?‰&øÏP¿ï‡9Ô"#4Ô"#_4Ô"#?4Ô"+_$—ÈÄÈI&.‘‰‘“L\"+ß$·ÈÄý'q µÈÄÈI&‘‰•_’‰Wdâþù>‰s¨E&FN2qŠL¬|’L¼"+¿$¯ÈÄÊÉÄ'21r’‰Odâþù>‰s¨E&FN2qŠLŒœdâ™9ÉÄ%2±òE2q‰LüÍÿìqµÈÄÈ; µÈÄÈ' µÈÄÈ7 µÈÄÈ/ µÈÄÊÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-2q78‰c¨E&FN2ñˆL¬ü’L¼"wû>‰s¨E&FN2qŠL¬|’L¼"+¿$ŸÈÄÊÉÄ'21r’‰Odânß'qµÈÄÈI&N‘‰‘“Lœ"+_$—ÈÄÈI&.‘‰¿ùŸ=Ρ™ù ¡™ù¢¡™ù¡¡™9ÉÄ&2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LÜNâj‘‰‘“L¼"+¿$¯ÈÄÝ¿Oâj‘‰‘“Lœ"+Ÿ$¯ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÝ¿Oâj‘‰‘“Lœ"#'™¸D&V¾H&.‘‰‘“L\"wÿ>‰s¨E&F>i¨E&F¾i¨E&F~i¨E&VÞH&6‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-21r’‰[dâpÇP‹L¬ü’L¼"#'™xE&îñ}çP‹LŒœdâ™Xù$™øD&VþH&>‘‰‘“L|"#™8~D&îñ}çP‹LŒœdâ™Xù"™¸D&FN2q‰LŒœd♸Ç÷IœC-21òEC-21òCC-21r’‰Mdbådb™Xù"™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&î 'q õ™Xù%™xE&FN2ñŠLÜóû$Ρ™9ÉÄ)2±òI2ñ‰L¬ü‘L|"#'™øD&þæ÷8†Zdbå“dâ™9ÉÄ%2±òE2q‰LŒœdâ™9ÉÄ%2qÏï“8‡Zdb䛆Zdbä—†Zdbådb™9ÉÄ&2±òE2q‹L¬|“LÜ"#'™¸E&FN2q‹LÜ Nâj‘‰‘“L¼"#'™xE&îõ}çP‹LŒœdâ™Xù$™øD&VþH&>‘‰‘ƒLü3Á†úW¨ý4j‘‰•O’‰Sdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈĽ¾Oâj‘‰‘j‘‰‘“Ll"+o$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"÷†“8†Zdbä$¯ÈÄÈI&>‘‰{ŸÄ9Ô"+Ÿ$§ÈÄÈI&>‘‰•?’‰Odb䛆Zdâoþwc¨E&V>I&.‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"÷þ>‰s¨E&F~i¨E&VÞH&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LÜNâj‘‰‘“L¼"+$ŸÈÄ}¾Oâê)2±òI2qŠLŒœdâ™Xù#™øD&F~h¨E&þæ÷8†Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈÄÈI&n‘‰û|ŸÄ9Ô"#'™ØD&VÞH&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LÜNâj‘‰‘“L¼"+$ŸÈÄßüï{çj‘‰‘“Lœ"#'™øD&VþH&>‘‰‘_j‘‰¿ùß=Ž¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2±òM2q‹LÜ÷û$Ρ™Xy#™ØD&FN2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰Gdâ~pÇP‹LŒœdâ™Xù#™øD&î÷}çP‹LŒœdâ™Xù"™øD&VþH&>‘‰‘?j‘‰¿ùß=Ž¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ-2±òM2q‹LÜïû$Ž¡n"+o$›ÈÄÈI&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&V~H&‘‰çNâj‘‰‘“L¼"+$ŸÈÄóó}çP‹LŒœdâ™Xù"™øD&VþH&>‘‰¿ùßg1Ô"#ß4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸E&V¾I&n‘‰¿ùŸ=Ρ™9ÉÄ&21r’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&‘‰•’‰GdâipÇP‹LŒœdâ™Xù#™øD&žö}çP‹LŒœdâ™Xù"™øD&Vþ@&þ™à?CÝàÙF µÈÄÈ µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÊ7ÉÄ-21r’‰[dâoþgs¨E&FN2±‰LŒœdb™9ÉÄ&21r’‰]dbå›dâ™9ÉÄ-2±òC2ñˆLŒœdâ™x:œÄ1Ô"#'™øD&VþH&>‘‰§ŸÄ9Ô"#'™¸D&V¾H&>‘‰¿ùß“8†Zdbä†Zdbä—†Zdbå‹dâ™9ÉÄ%21r’‰[dbå›dâ™9ÉÄ-2ñôï“8‡Zdbä$›ÈÄÈI&6‘‰‘“Ll"+ï$»ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™9ÉÄ#2ñ 8‰c¨E&VþH&>‘‰‘“L|"Ïø>‰s¨E&FN2q‰L¬|Lüû’ùß¡pÇP‹LŒ|ÐP‹LŒœdb™Xù"™¸D&FN2q‰L¬|“LÜ"#'™¸E&FN2q‹L<ãû$Ρ™9ÉÄ&21r’‰Mdbä$»ÈÄÊ;ÉÄ.2±òM2q‹L¬üL<"#'™xD&FN2ñˆL<Nâê'2±òG2ñ‰LŒœdâ™xæ÷IœC-21r’‰KdbåkÑP‹L<Nâj‘‰‘Oj‘‰•7’‰Mdbå‹dâ™9ÉÄ-2±òM2q‹LŒœdâ™9ÉÄ-2ñÌï“8‡Zdbä$›ÈÄÈI&6‘‰•w’‰]dbä$»ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ#2ñ,8‰c¨E&FN2ñ‰LŒœdâ™xÖ÷IœC-21r’‰KdbåkÓP‹L< Nâj‘‰‘“Ll"+o$›ÈÄÊÉÄ%2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dâYß'qµÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"φ“8†Zdbä$ŸÈÄÈA&ö‘‰gŸÄ9Ô"+_$—ÈÄÈ µÈijá$Ž¡™9ÉÄ&2±òF2±‰L¬|‘LÜ"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&žý}çP‹LŒœdb™Xy'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2ñ8‰c¨E&FN2ñ‰LüÍÿìqµÈÄÊ'ÉÄ%2±òE2q‰LŒüÒP‹L<Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰‘“L<"Ïù>‰s¨E&FN2±‹L¬¼“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™x.œÄ1Ô"#'™øD&þæö8‡Zdbå‹dâ™9ÉÄ%21òGC-2ñ\8‰c¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&V~H&‘‰ç~ŸÄ9Ô"+ï$»ÈÄÈI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñŠL<Nâj‘‰‘“L|"ó?{œC-2±òE2q‰LŒœdâ™Xùþ¡¡™xœÄ1Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“L<"+?$ÈÄó¾Oâê.2±òN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbå—dâ™xà$Ž¡™9ÉÄ'2ñ7ÿ³Ç9Ô"+_$—ÈÄÈI&n‘‰•ïFC-2ñþÀIC-2±òF2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ#2±òC2ñˆLüÍÿìqµÈÄÈI&v‘‰‘“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñŠL¬ü’L¼"oƒ“8†Zdbä$ŸÈÄßüÏçP‹L¬|‘L\"#'™¸E&V¾; µÈÄÛà$®¡n"+o$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰•’‰Gdbä$ÈÄßüÏçP‹LŒœdb™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ#21r’‰Gdbå—dâ™9ÉÄ+2ñv8‰c¨E&F2ñŸÏ„ÿê_Ü÷³h¨E&V¾H&.‘‰‘“LÜ"+߃†Zdâoþ÷$Ž¡™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰Gdbå‡dâ™9ÉÄ#2ñöï“8‡Zdbä$»ÈÄÈI&v‘‰‘“Lì"+$‡ÈÄÊÉÄ#21r’‰Wdbå—dâ™9ÉÄ+2ñ8‰c¨E&þæžmäP‹LŒ|ÓP‹L¬|‘L\"#'™¸E&V¾I&6‘‰¿ùß“8†Zdbä$›ÈÄÈI&v‘‰•o’‰[dbä$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄ;¾Oâj‘‰‘“Lì"#'™ØE&FN2qˆL¬|L"+?$ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄ;á$þê¿/™ÿêùýl#‡Zdb䇆Zdbå‹dâ™9ÉÄ-2±òM2±‰L¼Nâj‘‰‘“Ll"+ï$»ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™9ÉÄ#21r’‰Gdâß'qµÈÄÈI&v‘‰‘“Lì"+$‡ÈÄÈI&‘‰•’‰Wdbå—dâ™9ÉÄ+21r’‰Wdâ]pÇP‹LŒ¼ÓP‹LŒüÒP‹L¬|‘L\"#'™¸E&V¾I&6‘‰wÁIC-21r’‰]dbådb™Xù&™¸E&V~H&‘‰‘“L<"#'™xD&FN2ñˆL¼ëû$Ρ™9ÉÄ.21r’‰Cdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰WdâÝpÇP‹LŒ|ÐP‹LŒœdb™Xù"™¸D&V¾I&n‘‰‘“Ll"8†Zdbä$»ÈÄÊ;ÉÄ.2±òM2ñˆL¬üL<"#'™xD&FN2ñˆLŒœdâ™x÷÷IœC-21r’‰]dbåƒdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄ{à$Ž¡™ù¤¡™Xy#™ØD&V¾H&n‘‰•o’‰[dbä$›ÈÄ{à$Ž¡™9ÉÄ.2±òN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™9ÉÄ+2ñžï“8‡Zdbä$‡ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰÷ÂIC-21òEC-2±òF2±‰L¬|“LÜ"#'™¸E&FN2±‰L¼Nâj‘‰‘“Lì"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰•_’‰Wdâ½ß'qµÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L|"8†Zdb䛆Zdbådb™Xù&™¸E&FN2q‹L¬üLl"8†Zdbä$»ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Wdbå—dâ™xß÷IC=D&V>H&‘‰‘“L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠL¬ü‘L|"ßœÄ1Ô"#?4Ô"+o$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø~à$Ž¡™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù%™xE&þæö8‡Zdbä$‡ÈÄÈI&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™øD&VþH&>‘‰¯ÁIC-21òKC-2±òF2±‰L¬|“LÜ"#'™xD&V~H&6‘‰¯ÁI\CÝE&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"+¿$¯ÈÄÈI&^‘‰¿ùŸ=Ρ™9ÉÄ!21r’‰Cdbä$‡ÈÄÈI&N‘‰•_’‰Wdbä$¯ÈÄÊÉÄ'21r’‰OdâëpÇP‹LŒœdb™Xy#™ØD&V¾I&n‘‰‘“L<"+?$›ÈÄßüïIC-21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$¯ÈÄÊ/ÉÄ+21r’‰Wdâëß'qµÈÄÈI&‘‰‘“L"#'™8D&V>I&N‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'21r’‰OdâpÇP‹L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“L<"+?$»ÈÄßüïIC-21r’‰]dbä$‡ÈÄÊÉÄ#21r’‰Gdbå—dâ™9ÉÄ+21r’‰Wdâß'qµÈÄÈI&‘‰‘“L"#'™8E&V>I&N‘‰•_’‰Wdbådâ™9ÉÄ'21r’‰Odâ›p×P7‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø&œÄ1Ô"#'™ØE&V>H&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄ7¿Oâj‘‰‘“L"#'™8D&V>I&N‘‰‘“Lœ"+¿$ŸÈÄÊÉÄ'21r’‰Odbä$ŸÈÄ·à$Ž¡™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ#2±òC2±‹L| Nâj‘‰‘“L"+$‡ÈÄÊÉÄ#2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdâ[ß'qµÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"߆“8†Zdbä$›ÈÄÈI&v‘‰•o’‰[dbå‡dâ™9ÉÄ.2ñm8‰c¨E&FN2qˆL¬|L"+?$¯ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰oŸÄ9Ô"#'™8D&V>I&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰L|Nâj‘‰‘“Ll"+ï$»ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdb™øœÄ1Ô"#'™8D&V>H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"#'™øD&¾ó}çP‹LŒœdâ™Xù$™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'2ñ]8‰c¨E&FN2±‰L¬¼“Lì"+?$ÈÄÈI&‘‰‘“Lì"ß…“8†Zdbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbådâ™øî÷IœC-2±òI2qŠLŒœdâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä ×ÈÄ÷à$Ž¡™9ÉÄ&2±òN2±‹L¬üL<"#'™xD&V~I&v‘‰ïÁIC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ'2±òG2ñ‰L|ïû$Ž¡ž"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&þæÿîñ?CÍ2ñÑOâj–‰™“Ll,#ï$;ËÄÈÉÄÃ21s’‰—ebä—dbg™Xùß“8†šebäƒdâ`™˜9ÉÄÁ21òK2ñ²LÌœdâe™˜9ÉÄË21s’‰ebädâc™XùŸ=Ρf™˜9ÉÄÉ21s’‰“ebæ$'ËÄÌI&N–‰‘?’‰ebæ$ËÄÌA&þ3Á†ºò÷øŸ¡î2Ô Nâê#CݾŸmäP?êß¼“LìK†º}ŸÄ9ÔS†ºÁûºê&Cý›_’‰ýÊP78‰k¨Ç uƒg1Ô[†ºr’‰ãÊP·ï“8‡zÉP·ï“8‡úÈP·ï“8‡úÉP·ïß.r¨» uå$ß”¡nß'qu—¡nß'r¨§ uûü•øŸ¡Þ2Ôíë$þw¨¯ uå$× uû>‰s¨ uû<‰ÿê'CÝ>O↺ÉPWÞi¨‡ u‡“8†úÊP÷ïg1ÔýG†ú7ï$û–¡îß'qõ’¡îð¾.†ºËPÿæ—db2ÔNâê&CÝáÙF õ‘¡®œdâx2Ôýû$ΡÞ2Ôýû$Ρ¾2Ôýû$Ž¡~?2Ôýû·‹ê!C]9ÉÄ·d¨û÷IœC=d¨û÷Éê%CÝ?%þg¨ uÿ:‰ÿê'Cý›/’‰«ÉP÷ï“8‡úÊP÷Ï“8†úϯĆºžÄÿ u—¡®|ÐPOê'q õ“¡ßÏ6r¨› uå$û‘¡ß'qõ–¡ð¾.†zÈPÿæ—dâø‘¡pÇPwêÏ6b¨¯ uå$ç õø>‰s¨ õø>‰s¨Ÿ õø>‰s¨› õøþí"‡zÊPWN2ñmêñ}çPOêñýp"‡zËPÏ_‰ÿê+C=¾Nâ†zýÈPÿæ‹dâê2Ôãû$Ρ~2Ôãó$þg¨› õø<‰ÿê!C]ù¤¡^2ÔNâêþ#C=¿ŸmäPwêÊI&ö+C=¿Oâê#C=á}] õ”¡þÍ/ÉÄÑd¨'œÄ1ÔC†z³ê'Cý›O’‰³ÉPÏï“8‡úÊPÏï“8†úýÈPÏï“8‡ºËPÏïß.r¨— uå$ß‘¡žß'qõ’¡žß'r¨ õüü•øŸ¡~2Ôóë$þw¨› uå$סžß'q õúù‘¡žŸ'ñ?CÝe¨ççIüÏPOêÊ õ–¡^pÇP7êõýl#‡zÈPWN2±?êõ}çP_êïëb¨— õo~I&Ž.C½à$Ž¡ž2Ô žmÔPÏêß|’Lœ]†z}ŸÄ9ÔO†z}ŸÄ9ÔM†z}ŸÄ9ÔC†z}ÿv‘C½e¨+'™ø® õú>‰s¨· õú~8‘C}e¨×ç¯Ä9ÔëG†z}Äÿu—¡®œdâš2Ôëû$Ρn2Ôëó$þg¨‡ õú<‰ÿê%C]ù¦¡>2ÔNâê.C½¿ŸmäPOêÊI&Žêý}çP?ê ïëb¨· uå$Ç¡ÞpÇP/ê Ï6b¨› õo>I&Î!C½¿Oâê÷#C½¿Oâê.C½¿Oâê)C½¿»È¡>2Ô•“L|O†zŸÄ9ÔG†z?œÈ¡~2ÔûóW↺ÉPﯓøß¡2Ô•“L\K†zŸÄ9Ô]†zžÄÿ õ”¡ÞŸ'ñ?C½e¨+?4ÔW†úÀIC=d¨Ï÷³ê%Cý›’‰£ÉPŸï“8†úþÈPx_C}d¨+'™8¦ õ“8†zËPx¶CÝe¨óI2qNêó}çP7êó}çPêó}çP/êóýÛEõ•¡®dâüù‘¡>ß'qõ•¡>ß'b¨× õùü•øŸ¡î2Ôçë$þw¨§ uå$×–¡>ß'qõ¡>Ÿ'ñ?C½d¨ÏçIüÏPêÊ/ õ“¡¾pÇPOêûýl#‡zËPÿæƒdâè2Ô÷û$Ρn2ÔÞ×ÅP_êÊI&Ž%C}á$Ž¡>2ÔžmÄPêß|’LœK†ú~ŸÄ9Ô]†ú~ŸÄ9ÔS†ú~ŸÄ9Ô[†ú~ÿv‘Cýd¨‰ÙÏ u“¡¾ß'qõ“¡¾ß'r¨› õýü•øŸ¡2Ô÷ë$þw¨— uå$ב¡¾ß'qõ”¡¾Ÿ'ñ?C½e¨ïçIüÏP_êÊI&¶ê'q õ’¡~ßÏ6r¨ õo>H&Ž!Cý¾Oâê.Cýà}] õ“¡þÍÉıe¨œÄ1ÔW†úÁ³ê)Cý›O’‰sËP¿ï“8‡zÈP¿ï“8‡zÉP¿ï“8‡úÈP¿ïß.j¨ÿLðŸ¡þj?†ºËP¿ï“8†zýÈP¿ï‡9Ô]†ú}þJüÏPOê÷uÿ;Ô[†ºr’‰ëÊP¿ï“8‡zÉP¿Ï“øŸ¡>2Ôïó$þg¨Ÿ õoÞH&6‘‰íNâj‘‰‘“Lì"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™Ø~à$Ž¡™Xù$™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒüÑP‹LüÍçO§¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%21r’‰Kdbûù>‰s¨E&F~h¨E&FN2±‰L¬¼‘Ll"[ƒ“8†Zdbä$»ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™Xù#™8D&¶'q õ™Xù$™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LüÍÿÎ1Ô"#4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&FN2q‹Llíû$Ρ™ù¥¡™Xy#™ØD&FN2±‰LlNâj‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™ø›ÿ=‰c¨E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒd⟠þ3Ôýû·‹j‘‰‘Oj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"+ß$·ÈÄÖ¿Oâj‘‰‘“Ll"+o$›ÈÄÈI&6‘‰mÀIC-2±òA2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘Lœ"ó¿'q µÈÄÈI&N‘‰‘“L\"+$ŸÈÄÈI&>‘‰¿ùŸ=Ρ™y§¡™ù¢¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ-2±òM2q‹Llãû$Ρ™Xy#™ØD&FN2±‰LŒœdb™Ø&œÄ5ÔCdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™8E&¶ 'q µÈÄÈI&N‘‰•/’‰Kdbådâ™9ÈÄ¿/Üþêù}çP‹LŒ|ÐP‹LŒ|ÓP‹L¬|‘L\"#'™¸D&FN2q‰L¬|“LÜ"#'™¸E&¶ù}ÇP7‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰mÁIC-21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™ØœÄ1Ô"#'™¸D&V¾H&.‘‰•?’‰OdâoþŸÇ5Ô"#ï4Ô"#Ÿ4Ô"#?4Ô"+_$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄÈI&n‘‰¿ùß=Ž¡™9ÉÄ&21r’‰Mdbä$›ÈĶá$Ž¡™9ÉÄ!21r’‰Sdbå—dâ™Xù#™øD&FN2qŠLlNâj‘‰‘“L\"+_$—ÈÄÊ}ú™ø›ÿçÅq µÈÄÈ µÈÄÈ µÈÄÈ/ µÈÄÊÉÄ%21r’‰Kdbå›dâ™9ÉÄ-21r’‰[dâoþwc¨E&FN2±‰LŒœdb™9ÉÄ&2±8‰c¨E&FN2qˆL¬|’Lœ"+¿$ŸÈÄÊÉÄ'21r’‰Sdb;pÇP‹LŒœdâ™Xù"™¸D&þæÑG µÈÄÈ; µÈÄÈ' µÈÄÈ7 µÈÄÈI&6‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄßüïÇP‹LŒœdb™9ÉÄ&21r’‰Mdb»pÇP‹LŒœdâ™Xù$™8E&VþH&>‘‰‘“L|"#'™8E&¶ 'q µÈÄÈI&.‘‰•/’‰Kdb»ß'qµÈÄÈ µÈÄÈ µÈÄÈ µÈÄÊÉÄ&2±òE2q‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™ø›ÿÝãj‘‰‘“Ll"#'™ØD&FN2±‹LlNâj‘‰‘“L"+Ÿ$§ÈÄÊÉÄ'21r’‰Odâo>~H&N‘‰•O’‰Sdbä$—ÈÄÊÉÄ%2±½ï“8‡Zdb䓆Zdb䛆Zdbä$›ÈÄÊÉÄ&2±òE2q‹L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™ØÞ÷IœC-21r’‰Mdbä$›ÈÄÊ;ÉÄ.2±ÿÀIC-21r’‰Cdbå“dâ™Xù#™øD&F2ñÏÿ;Ô¿ùø!™8E&V>I&N‘‰•/’‰Kdbä$—ÈÄþó}çP‹LŒ|ÑP‹LŒüÐP‹LŒœdb™Xy#™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LŒœdâ™Ø¾Oâj‘‰‘“Ll"#'™ØE&VÞI&v‘‰½ÁIC-21r’‰Cdbå“dâ™Xù#™øD&F¾h¨E&þæã‡dâ™Xù$™¸D&V¾H&.‘‰‘“L\"{û>‰s¨E&F¾i¨E&F~i¨E&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&FNß ÈÄÞ¾Oâj‘‰‘“Ll"+ï$»ÈÄÈI&v‘‰½ÃIC-21r’‰Sdbå“dâ™Xù#™øD&F¾i¨E&þæã‡dâ™Xù"™¸D&FN2q‰LŒœdâ™Øû÷IœC-21òCC-21r’‰Mdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[db凾A‘‰½ŸÄ9Ô"#'™ØE&VÞI&v‘‰‘“Lì"û€“8†Zdbå“dâ™9ÉÄ)2±òG2ñ‰LŒüÐP‹LüÍÇÉÄ%2±òE2q‰LŒœdâ™9ÉÄ-2±ï“8‡Zdbä—†Zdbådb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$ÈÄÊ}ƒ>"ûø>‰s¨E&VÞI&v‘‰‘“Lì"#'™ØE&ö 'q õ™Xù$™8E&FN2qŠL¬ü‘L|"#¿4Ô"óñC2q‰L¬|‘L\"#'™¸D&V¾I&n‘‰}~ŸÄ9Ô"#'™ØD&VÞH&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&V~H&‘‰‘Ó7è#2±Ïï“8†º‹L¬¼“Lì"#'™ØE&FN2±‹Lì Nâj‘‰‘“Lœ"#'™8E&VþH&>‘‰‘?j‘‰¿ùø!™¸D&V¾H&.‘‰‘“LÜ"+ß$·Èľ¾Oâj‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“L<"+?$ÈÄÈéô™ø›ÿÝãj‘‰‘“Lì"#'™ØE&FN2±‹LìNâj‘‰‘“Lœ"#'™¸D&VþH&>‘‰¿ùß÷u1Ô"#'™¸D&V¾H&.‘‰‘“LÜ"+ß$·Èľ¿Oâøk"+o$›ÈÄÈI&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"+?$ÈÄÈI&‘‰‘Ó7è#2ñ7ÿ»Ç1Ô"#'™ØE&FN2±‹LŒœdb™ØœÄ1Ô"#'™8E&V¾H&.‘‰•?‰&øÏPx_C-21r’‰Kdbå‹dâ™9ÉÄ-2±òM2q‹LüÍÿ¢j‘‰‘“Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üL<"#'™xD&FNß ÈÄßüïÇP‹LŒœdb™9ÉÄ.21r’‰]db¿pÇP‹LŒœdâ™Xù"™¸D&þæß;ÇP‹LŒ¼ÓP‹LŒœdâ™Xù"™¸D&FN2q‹L¬|“LÜ"ûý>‰s¨E&FN2±‰LŒœdb™9ÉÄ&2±òN2±‹L¬|“LÜ"+?$ÈÄÈI&‘‰‘“L<"#§oÐGdâoþwc¨E&FN2±‹LŒœdb™9ÉÄ!2±?8‰c¨E&FN2qŠL¬|‘L\"ûû>‰s¨E&F>h¨E&VÞH&.‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-2±¿ï“8‡Zdbä$›ÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ#21rú}D&ö÷}çP‹LŒœdb™9ÉÄ.2±òA2qˆL?pÇP‹LŒœdâ™Xù"™¸D&ŽŸï“8‡Zdbä$›ÈÄÊÉÄ%2±òE2q‰L¬|“LÜ"#'™¸E&ŽŸï“8‡Zdbä$›ÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰‘Ó7è#2qü|ŸÄ9Ô"#'™ØE&FN2qˆL¬|L"Gƒ“8†Zdbä$§ÈÄÊÉÄ%2q´ï“8‡Zdbä$›ÈÄÊÉÄ%2±òE2q‹L¬|“LÜ"#'™¸E&Žö}çP‹LŒœdb™9ÉÄ&2±òN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#21rú}E&Žö}çP‹LŒœdb™Xù ™8D&FN2qˆLNâj‘‰‘“L\"+_$—ÈÄÑ¿Oâj‘‰‘“Ll"+o$—ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÑ¿Oâj‘‰‘“Ll"#'™ØE&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&V~éô™8ú÷IœC-21r’‰Cdbåƒdâ™9ÉÄ!2q 8‰c¨E&V¾H&.‘‰‘“L\"Çø>‰s¨E&FN2±‰L¬¼‘LÜ"+ß$·ÈÄÈI&n‘‰‘“L<"Çø>‰s¨E&FN2±‰L¬¼“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù¥oÐWdâß'qµÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄ1á$®¡^"+_$—ÈÄÈI&.‘‰c~ŸÄ9Ô"#'™ØD&VÞH&n‘‰•o’‰[dbä$·ÈÄÊÉÄ#2qÌï“8‡Zdbä$»ÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÊ/ÉÄ+21rú}E&Žù}ÇP‘‰•’‰Cdbä$‡ÈÄÈI&‘‰cÁIC-21r’‰Kdbä$—Èı¾Oâj‘‰‘“Ll"+o$·ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™8Ö÷IœC-2±òN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Wdbå—dâ™9}ƒ¾"ó¿{C-21r’‰Cdbä$‡ÈÄÈI&‘‰cÃIC-21r’‰Kdbä$·Èı¿Oâj‘‰•7’‰Mdbä$·ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™8ö÷Iÿq]dbådb™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbå—dâ™9ÉÄ+21rú}E&þæ÷8†Zdbä$‡ÈÄÈI&‘‰‘“L"Ç“8†Zdbä$—ÈÄÊ7ÉÄ-2qœï“8†º‰L¬¼‘Ll"#'™¸E&V¾I&n‘‰‘“L<"+?$ÈÄßü/úˆ¡™9ÉÄ.21r’‰]dbä$»ÈÄÈI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+21r’‰Wdbäô úŠLüÍÿîq µÈÄÈI&‘‰‘“L"#'™8D&Ž 'q µÈÄÈI&.‘‰•o’‰[dâoþ÷½s µÈÄÈI&6‘‰‘“LÜ"+ß$·ÈÄÈI&‘‰•’‰Gdâ¸ß'qµÈÄÈI&v‘‰‘“Lì"#'™ØE&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdbäô úŠLüÍÿîq µÈÄÈI&‘‰‘“L"#'™8E&Ž'q µÈÄÈI&.‘‰•o’‰[dâxß'qµÈÄÈI&6‘‰•w’‰[dbå›dâ™9ÉÄ#2±òC2ñˆLïû$Ρ™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ!2±òC2ñŠL¬ü’L¼"#'™xE&FN2ñŠLŒœ¾A_‘‰ã}ŸÄ9Ô"#'™8D&FN2qˆL¬|’Lœ"çœÄ1Ô"#'™¸D&V¾I&n‘‰óçû$Ρ™9ÉÄ.2±òN2q‹L¬|“LÜ"+?$ÈÄÈI&‘‰óçû$Ρ™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbäô úŠLœ?ß'qµÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÙà$Ž¡™9ÉÄ%2±òM2q‹Lœíû$Ρ™9ÉÄ.2±òN2q‹L¬|“L<"+?$ÈÄÈI&‘‰³}ŸÄ9Ô"#'™ØE&FN2±‹L¬|L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠLŒœ¾A?‘‰³}ŸÄ9Ô"#'™8D&V>I&N‘‰‘“Lœ"g‡“8†Zdbä$·ÈÄÊ7ÉÄ-2qöï“8‡Zdbä$»ÈÄÊ;ÉÄ-2±òC2ñˆLŒœdâ™9ÉÄ#2qöï“8‡Zdbä$»ÈÄÈI&‘‰•’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰•?úýD&Îþ}çP‹LŒœdâ™Xù$™8E&FN2qŠLœNâj‘‰•o’‰[dbä$·ÈÄ9¾Oâj‘‰‘“Lì"+ï$ÈÄÊÉÄ#21r’‰Gdbä$¯ÈÄ9¾Oâj‘‰‘“Lì"+$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™øD&Vþèô™8Ç÷IœC-2±òI2qŠLŒœdâ™9ÉÄ)2qN8‰k¨·ÈÄÊ7ÉÄ-21r’‰[dâœß'qµÈÄÈI&v‘‰•w’‰Gdbå‡dâ™9ÉÄ#2±òK2ñŠLœóû$Ρ™9ÉÄ!2±òA2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+2±òG2ñ‰LŒœ¾A?‘‰s~ŸÄ1ÔSdbå“dâ™9ÉÄ)21r’‰Sdâ\pÇP‹LŒœdâ™9ÉÄ-2q®ï“8‡Zdbä$»ÈÄÊ;ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Îõ}çP‹L¬|L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™Xù#™øD&FNß ŸÈÄßüïÇP‹LŒœdâ™9ÉÄ)21r’‰SdâÜpÇP‹LŒœdâ™9ÉÄ#2qîï“8‡Zdbådb™9ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Îý}ÇÜ™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœ¾A?‘‰¿ùß=Ž¡™9ÉÄ)21r’‰Sdbä$§ÈÄyà$Ž¡™9ÉÄ-2±òC2ñˆLœçû$Ž¡î"+ï$»ÈÄÈI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+2ñ7ÿ‹>b¨E&FN2qˆLŒœdâ™9ÉÄ!21r’‰Sdbå—dâ™9ÉÄ'2±òG2ñ‰LŒœdâ™9}ƒ~"ó¿{C-21r’‰Sdbä$§ÈÄÈI&N‘‰óÂIC-21r’‰[dbå‡dâ™ø›ÿ}ïC-21r’‰]dbä$ÈÄÊÉÄ#21r’‰Wdbå—dâ™8ï÷IœC-21r’‰Cdbä$‡ÈÄÈI&‘‰•O’‰Sdbå—dâ™Xù#™øD&FN2ñ‰LŒœdâ™9}ƒ~"ó¿{C-21r’‰Sdbä$§ÈÄÈI&.‘‰óÁIC-21r’‰[dbå‡dâ™8ß÷IœC-21r’‰]dbåƒdâ™Xù!™xD&FN2ñŠL¬ü’L¼"çû>‰s¨E&FN2qˆLŒœdâ™9ÉÄ)2±òI2qŠL¬ü’L|"+$ŸÈÄÈI&>‘‰‘“L|"#§oÐOdâ|ß'qµÈÄÈI&N‘‰‘“Lœ"+_$—ÈÄõ'q µÈÄÈI&n‘‰•’‰Gdâúù>‰s¨E&FN2qˆL¬|L<"+?$ÈÄÊ/ÉÄ+21r’‰Wdâúù>‰s¨E&FN2qˆLŒœdâ™9ÉÄ)2±òI2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™9}ƒ~"×Ï÷IœC-21r’‰Sdbä$—ÈÄÊÉÄ%2q58‰c¨E&FN2q‹L¬üL<"Wû>‰s¨E&FN2qˆL¬|L<"+?$¯ÈÄÊ/ÉÄ+21r’‰Wdâjß'qµÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"#‡oÐëGdâjß'qµÈÄÈI&N‘‰•/’‰Kdbä$—ÈÄÕá$Ž¡™9ÉÄ#2±òC2ñˆL\ýû$Ρ™9ÉÄ!2±òA2ñˆL¬ü’L¼"#'™xE&FN2ñŠL\ýû$Ρ™9ÉÄ!21r’‰Sdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r’‰Odâoþwc¨E&V>I&N‘‰‘“L\"+_$—ÈÄÈI&.‘‰kÀIC-2±òC2ñˆLŒœd♸Æ÷IœC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœd♸Æ÷IœC-21r’‰Cdbå“dâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä ÿNðùüãÿîq µÈÄÊ'ÉÄ)2±òE2q‰LŒœdâ™9ÉÄ%2qM8‰k¨ÈÄÊÉÄ#21r’‰Gdâšß'qµÈÄÈI&‘‰•’‰Wdbå—dâ™9ÉÄ+2±òG2ñ‰L\óû$Ρ™9ÉÄ)2±òI2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'2ñ7ÿgÿj‘‰‘wj‘‰•O’‰Kdbå‹dâ™9ÉÄ%21r’‰KdâZpÇP‹LŒœdâ™9ÉÄ#2q­ï“8‡Zdbä$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&®õ}çP‹L¬|’Lœ"#'™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒd⟓øÏP¯¯“øß¡™ù ¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2qm8‰c¨E&FN2ñˆLŒœd♸ö÷IœC-2±òA2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"×þ>‰c¨§ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄßüß=þg¨E&FÞi¨E&F>i¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L\Nâj‘‰‘“L<"+¿$¯ÈÄu¾Oâê!2±òA2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"ó¿è#†Zdbä$§ÈÄÈI&N‘‰‘“Lœ"#'™¸D&VþH&>‘‰‘ƒLüw‚ÿõùü•øŸ¡™ù ¡™ù¢¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2q]8‰c¨E&FN2ñˆL¬ü’L¼"ó¿ïc¨E&FN2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"×ý>‰s¨E&FN2qŠLŒœdâ™9ÉÄ)2±òE2q‰L¬ü‘L|"ó??QäP‹LŒ¼ÓP‹LŒ|ÒP‹LŒ|ÓP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸œÄ1Ô"#'™xD&V~I&^‘‰ë}ŸÄ9Ô"#'™8D&V>I&^‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'2q½ï“8‡Zdbä$§ÈÄÈI&N‘‰‘“L\"+_$—ÈÄÊÈÄ?üg¨ß÷Éj‘‰‘j‘‰‘/j‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰•o’‰[dâþ“8†Zdbä$ÈÄÊ/ÉÄ+2qÿ|ŸÄ9Ô"#'™8E&V>I&^‘‰•_’‰Wdbådâ™9ÉÄ'2qÿ|ŸÄ9Ô"#'™8E&FN2qŠLŒœdâ™Xù"™¸D&þæö8‡Zdbä†Zdb䓆Zdb䛆Zdbä—†Zdbå‹dâ™9ÉÄ%21r’‰[dbå›d♸œÄ1Ô"#'™xD&V~I&^‘‰»}ŸÄ9Ô"#'™8E&V>I&^‘‰•_’‰Odbådâ™9ÉÄ'2q·ï“8‡Zdbä$§ÈÄÈI&N‘‰•/’‰Kdbä$—ÈÄßüÏçP‹LŒ|ÐP‹LŒ|ÑP‹LŒüÐP‹LŒœdb™Xù"™¸D&FN2q‰L¬|“LÜ"#'™¸E&î'q µÈÄÈI&^‘‰•_’‰Wdâîß'qµÈÄÈI&N‘‰•O’‰Wdbådâ™9ÉÄ'21r’‰Odâîß'qµÈÄÈI&N‘‰‘“L\"+_$—ÈÄÈI&.‘‰»ŸÄ9Ô"#Ÿ4Ô"#ß4Ô"#¿4Ô"+o$›ÈÄÊÉÄ%21r’‰[dbå›dâ™9ÉÄ-2q8‰c¨E&V~I&^‘‰‘“L¼"÷ø>‰s¨E&FN2qŠL¬|’L|"+$ŸÈÄÈI&>‘‰‘ƒLœ?"÷ø>‰s¨E&FN2qŠL¬|‘L\"#'™¸D&FN2q‰LÜãû$Ρ™ù¢¡™ù¡¡™9ÉÄ&2±òF2±‰L¬|‘L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"÷„“¸†úŠL¬ü’L¼"#'™xE&îù}çP‹LŒœdâ™Xù$™øD&VþH&>‘‰‘“L|"ó¿{C-2±òI2qŠLŒœdâ™Xù"™¸D&FN2q‰LŒœd♸ç÷IœC-21òMC-21òKC-2±òF2±‰LŒœdb™Xù"™¸E&V¾I&n‘‰‘“LÜ"#'™¸E&î'q µÈÄÈI&^‘‰‘“L¼"÷ú>‰s¨E&FN2qŠL¬|’L|"+$ŸÈÄÈA&þ™à?Cý+Ô~ µÈÄÊ'ÉÄ)2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdâ^ß'qµÈÄÈ µÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰{ÃIC-21r’‰Wdbä$ŸÈĽ¿Oâj‘‰•O’‰Sdbä$ŸÈÄÊÉÄ'21òMC-2ñ7ÿ»Ç1Ô"+Ÿ$—ÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰{ŸÄ9Ô"#¿4Ô"+o$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&î'q µÈÄÈI&^‘‰•?’‰Odâ>ß'q õ™Xù$™8E&FN2ñ‰L¬ü‘L|"#?4Ô"ó¿{C-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbä$·ÈÄ}¾Oâj‘‰‘“Ll"+o$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&î 'q µÈÄÈI&^‘‰•?’‰Odâoþ÷½s µÈÄÈI&N‘‰‘“L|"+$ŸÈÄÈ/ µÈÄßüïÇP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™Xù&™¸E&îû}çP‹L¬¼‘Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ#2q?8‰c¨E&FN2ñŠL¬ü‘L|"÷û>‰s¨E&FN2qŠL¬|‘L|"+$ŸÈÄÈ µÈÄßüïÇP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™Xù&™¸E&î÷}ÇP7‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"+?$ÈÄó'q µÈÄÈI&^‘‰•?’‰Odâùù>‰s¨E&FN2q‰L¬|‘L|"+$ŸÈÄßüï³j‘‰‘oj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄßüÏçP‹LŒœdb™9ÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$ÈÄÊÉÄ#2ñ48‰c¨E&FN2ñŠL¬ü‘L|"Oû>‰s¨E&FN2q‰L¬|‘L|"+ ÿLðŸ¡nðl#†Zdb䇆Zdbå‹dâ™9ÉÄ%21r’‰Kdbå›dâ™9ÉÄ-2ñ7ÿ³Ç9Ô"#'™ØD&FN2±‰LŒœdb™9ÉÄ.2±òM2q‹LŒœdâ™Xù!™xD&FN2ñˆL<Nâj‘‰‘“L|"+$ŸÈÄÓ¿Oâj‘‰‘“L\"+_$ŸÈÄßüïIC-21òNC-21òKC-2±òE2q‰LŒœdâ™9ÉÄ-2±òM2q‹LŒœdâ™xú÷IœC-21r’‰Mdbä$›ÈÄÈI&6‘‰•w’‰]dbå›dâ™9ÉÄ#2±òC2ñˆLŒœdâ™xœÄ1Ô"+$ŸÈÄÈI&>‘‰g|ŸÄ9Ô"#'™¸D&V¾@&þ}ÉüïP8‰c¨E&F>h¨E&FN2±‰L¬|‘L\"#'™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&žñ}çP‹LŒœdb™9ÉÄ&21r’‰]dbådb™Xù&™¸E&V~H&‘‰‘“L<"#'™xD&ž 'q õ™Xù#™øD&FN2ñ‰L<óû$Ρ™9ÉÄ%2±òµh¨E&ž 'q µÈÄÈ' µÈÄÊÉÄ&2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LŒœdâ™xæ÷IœC-21r’‰Mdbä$›ÈÄÊ;ÉÄ.21r’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™xœÄ1Ô"#'™øD&FN2ñ‰L<ëû$Ρ™9ÉÄ%2±òµi¨E&ž'q µÈÄÈI&6‘‰•7’‰Mdbå‹dâ™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2ñ¬ï“8‡Zdbä$›ÈÄÈI&v‘‰•w’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰gÃIC-21r’‰Odbä ÇÈij¿Oâj‘‰•/’‰Kdb䇆ZdâÙpÇP‹LŒœdb™Xy#™ØD&V¾H&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"Ïþ>‰s¨E&FN2±‰L¬¼“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™xœÄ1Ô"#'™øD&þæö8‡Zdbå“dâ™Xù"™¸D&F~i¨E&ž'q µÈÄÈI&6‘‰•7’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄÈI&‘‰ç|ŸÄ9Ô"#'™ØE&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL<Nâj‘‰‘“L|"ó?{œC-2±òE2q‰LŒœdâ™ù£¡™x.œÄ1Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"+?$ÈÄs¿Oâj‘‰•w’‰]dbä$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xE&ž'q µÈÄÈI&>‘‰¿ùŸ=Ρ™Xù"™¸D&FN2q‰L¬|ÿÐP‹L<Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&‘‰•’‰Gdâyß'q u™Xy'™ØE&FN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#2±òK2ñŠL¼?pÇP‹LŒœdâ™ø›ÿÙãj‘‰•/’‰Kdbä$·ÈÄÊw£¡™xà$Ž¡™Xy#™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™Xù!™xD&þæö8‡Zdbä$»ÈÄÈI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xE&V~I&^‘‰·ÁIC-21r’‰Odâoþgs¨E&V¾H&.‘‰‘“LÜ"+߆Zdâmp×P7‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÊÉÄ#21r’‰Gdâoþgs¨E&FN2±‹LŒœdb™9ÉÄ.21r’‰Cdbå‡dâ™9ÉÄ#2±òK2ñŠLŒœdâ™x;œÄ1Ô"#™øÏgÂÿ õ/îûY4Ô"+_$—ÈÄÈI&n‘‰•ïAC-2ñ7ÿ{ÇP‹LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ#2±òC2ñˆLŒœdâ™xû÷IœC-21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Cdbå‡dâ™9ÉÄ+2±òK2ñŠLŒœdâ™xœÄ1Ô"ó?Ï6r¨E&F¾i¨E&V¾H&.‘‰‘“LÜ"+ß$›ÈÄßüïIC-21r’‰Mdbä$»ÈÄÊ7ÉÄ-21r’‰[dbå‡dâ™9ÉÄ#21r’‰Gdâß'qµÈÄÈI&v‘‰‘“Lì"#'™8D&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdâpÿõß—Ìÿõü~¶‘C-21òCC-2±òE2q‰LŒœdâ™Xù&™ØD&Þ 'q µÈÄÈI&6‘‰•w’‰]dbå›dâ™9ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ#2ñÎï“8‡Zdbä$»ÈÄÈI&v‘‰•’‰Cdbä$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ+2ñ.8‰c¨E&FÞi¨E&F~i¨E&V¾H&.‘‰‘“LÜ"+ß$›ÈÄ»à$Ž¡™9ÉÄ.2±òN2±‹L¬|“LÜ"+?$ÈÄÈI&‘‰‘“L<"#'™xD&Þõ}çP‹LŒœdb™ø|ÛËmm;Q—Ä?é¿c=jU^½a@š(Q8›+r’‰Cdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰WdâÝpÇP‹LŒ|ÐP‹LŒœdb™Xù"™¸D&V¾I&n‘‰‘“Ll"8†Zdbä$»ÈÄÊ;ÉÄ.2±òM2ñˆL¬üL<"#'™xD&FN2ñˆLŒœdâ™x÷÷IœC-21r’‰]dbåƒdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄ{à$Ž¡™ù¤¡™Xy#™ØD&V¾H&n‘‰•o’‰[dbä$›ÈÄ{à$Ž¡™9ÉÄ.2±òN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™9ÉÄ+2ñžï“8‡Zdbä$‡ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰÷ÂIC-21òEC-2±òF2±‰L¬|“LÜ"#'™¸E&FN2±‰L¼Nâj‘‰‘“Lì"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰•_’‰Wdâ½ß'qµÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L|"8†Zdb䛆Zdbådb™Xù&™¸E&FN2q‹L¬üLl"8†Zdbä$»ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Wdbå—dâ™xß÷IC=D&V>H&‘‰‘“L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠL¬ü‘L|"ßœÄ1Ô"#?4Ô"+o$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø~à$Ž¡™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù%™xE&þæö8‡Zdbä$‡ÈÄÈI&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™øD&VþH&>‘‰¯ÁIC-21òKC-2±òF2±‰L¬|“LÜ"#'™xD&V~H&6‘‰¯ÁI\CÝE&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"+¿$¯ÈÄÈI&^‘‰¿ùŸ=Ρ™9ÉÄ!21r’‰Cdbä$‡ÈÄÈI&N‘‰•_’‰Wdbä$¯ÈÄÊÉÄ'21r’‰OdâëpÇP‹LŒœdb™Xy#™ØD&V¾I&n‘‰‘“L<"+?$›ÈÄßüïIC-21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$¯ÈÄÊ/ÉÄ+21r’‰Wdâëß'qµÈÄÈI&‘‰‘“L"#'™8D&V>I&N‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'21r’‰OdâpÇP‹L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“L<"+?$»ÈÄßüïIC-21r’‰]dbä$‡ÈÄÊÉÄ#21r’‰Gdbå—dâ™9ÉÄ+21r’‰Wdâß'qµÈÄÈI&‘‰‘“L"#'™8E&V>I&N‘‰•_’‰Wdbådâ™9ÉÄ'21r’‰Odâ›p×P7‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø&œÄ1Ô"#'™ØE&V>H&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄ7¿Oâj‘‰‘“L"#'™8D&V>I&N‘‰‘“Lœ"+¿$ŸÈÄÊÉÄ'21r’‰Odbä$ŸÈÄ·à$Ž¡™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ#2±òC2±‹L| Nâj‘‰‘“L"+$‡ÈÄÊÉÄ#2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdâ[ß'qµÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"߆“8†Zdbä$›ÈÄÈI&v‘‰•o’‰[dbå‡dâ™9ÉÄ.2ñm8‰c¨E&FN2qˆL¬|L"+?$¯ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰oŸÄ9Ô"#'™8D&V>I&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰L|Nâj‘‰‘“Ll"+ï$»ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdb™øœÄ1Ô"#'™8D&V>H&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"#'™øD&¾ó}çP‹LŒœdâ™Xù$™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'2ñ]8‰c¨E&FN2±‰L¬¼“Lì"+?$ÈÄÈI&‘‰‘“Lì"ß…“8†Zdbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbådâ™øî÷IœC-2±òI2qŠLŒœdâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä ÷ÈÄ÷à$Ž¡™9ÉÄ&2±òN2±‹L¬üL<"#'™xD&V~I&v‘‰ïÁIC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ'2±òG2ñ‰L|ïû$Ž¡ž"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&þæÿîñ?CÍ2ñÿÑOâj–‰™“Ll,#ï$;ËÄÈÉÄÃ21s’‰—ebä—dbg™Xùß“8†šebäƒdâ`™˜9ÉÄÁ21òK2ñ²LÌœdâe™˜9ÉÄË21s’‰ebädâc™XùŸ=Ρf™˜9ÉÄÉ21s’‰“ebæ$'ËÄÌI&N–‰‘?’‰ebæ$ËÄÌA&þ3Á†ºò÷øŸ¡î2Ô Nâê#CݾŸmäP?êß¼“LìK†º}ŸÄ9ÔS†ºÁûºê&Cý›_’‰ýÊP78‰k¨Ç uƒg1Ô[†ºr’‰ãÊP·ï“8‡zÉP·ï“8‡úÈP·ï“8‡úÉP·ïß.r¨» uå$ß”¡nß'qu—¡nß'r¨§ uûü•øŸ¡Þ2Ôíë$þw¨¯ uå$× uû>‰s¨ uû<‰ÿê'CÝ>O↺ÉPWÞi¨‡ u‡“8†úÊP÷ïg1ÔýG†ú7ï$û–¡îß'qõ’¡îð¾.†ºËPÿæ—db2ÔNâê&CÝáÙF õ‘¡®œdâx2Ôýû$ΡÞ2Ôýû$Ρ¾2Ôýû$Ž¡~?2Ôýû·‹ê!C]9ÉÄ·d¨û÷IœC=d¨û÷Éê%CÝ?%þg¨ uÿ:‰ÿê'Cý›/’‰«ÉP÷ï“8‡úÊP÷Ï“8†úϯĆºžÄÿ u—¡®|ÐPOê'q õ“¡ßÏ6r¨› uå$û‘¡ß'qõ–¡ð¾.†zÈPÿæ—dâø‘¡pÇPwêÏ6b¨¯ uå$ç õø>‰s¨ õø>‰s¨Ÿ õø>‰s¨› õøþí"‡zÊPWN2ñmêñ}çPOêñýp"‡zËPÏ_‰ÿê+C=¾Nâ†zýÈPÿæ‹dâê2Ôãû$Ρ~2Ôãó$þg¨› õø<‰ÿê!C]ù¤¡^2ÔNâêþ#C=¿ŸmäPwêÊI&ö+C=¿Oâê#C=á}] õ”¡þÍ/ÉÄÑd¨'œÄ1ÔC†z³ê'Cý›O’‰³ÉPÏï“8‡úÊPÏï“8†úýÈPÏï“8‡ºËPÏïß.r¨— uå$ß‘¡žß'qõ’¡žß'r¨ õüü•øŸ¡~2Ôóë$þw¨› uå$סžß'q õþù‘¡žŸ'ñ?CÝe¨ççIüÏPOêÊ õ–¡^pÇP7êõýl#‡zÈPWN2±?êõ}çP_êïëb¨— õo~I&Ž.C½à$Ž¡ž2Ô žmÔPÏêß|’Lœ]†z}ŸÄ9ÔO†z}ŸÄ9ÔM†z}ŸÄ9ÔC†z}ÿv‘C½e¨+'™ø® õú>‰s¨· õú~8‘C}e¨×ç¯Ä9ÔëG†z}Äÿu—¡®œdâš2Ôëû$Ρn2Ôëó$þg¨‡ õú<‰ÿê%C]ù¦¡>2ÔNâê.C½¿ŸmäPOêÊI&Žêý}çP?ê ïëb¨· uå$Ç¡ÞpÇP/ê Ï6b¨› õo>I&Î!C½¿Oâê÷#C½¿Oâê.C½¿Oâê)C½¿»È¡>2Ô•“L|O†zŸÄ9ÔG†z?œÈ¡~2ÔûóW↺ÉPﯓøß¡2Ô•“L\K†zŸÄ9Ô]†zžÄÿ õ”¡ÞŸ'ñ?C½e¨+?4ÔW†úÀIC=d¨Ï÷³ê%Cý›’‰£ÉPŸï“8†úþÈPx_C}d¨+'™8¦ õ“8†zËPx¶CÝe¨óI2qNêó}çP7êó}çPêó}çP/êóýÛEõ•¡®dâúù‘¡>ß'qõ•¡>ß'b¨× õùü•øŸ¡î2Ôçë$þw¨§ uå$×–¡>ß'qõ¡>Ÿ'ñ?C½d¨ÏçIüÏPêÊ/ õ“¡¾pÇPOêûýl#‡zËPÿæƒdâè2Ô÷û$Ρn2ÔÞ×ÅP_êÊI&Ž%C}á$Ž¡>2ÔžmÄPêß|’LœK†ú~ŸÄ9Ô]†ú~ŸÄ9ÔS†ú~ŸÄ9Ô[†ú~ÿv‘Cýd¨‰ÙÏ u“¡¾ß'qõ“¡¾ß'r¨› õýü•øŸ¡2Ô÷ë$þw¨— uå$ב¡¾ß'qõ”¡¾Ÿ'ñ?C½e¨ïçIüÏP_êÊI&¶ê'q õ’¡~ßÏ6r¨ õo>H&Ž!Cý¾Oâê.Cýà}] õ“¡þÍÉıe¨œÄ1ÔW†úÁ³ê)Cý›O’‰sËP¿ï“8‡zÈP¿ï“8‡zÉP¿ï“8‡úÈP¿ïß.j¨ÿLðŸ¡þj?†ºËP¿ï“8†zýÈP¿ï‡9Ô]†ú}þJüÏPOê÷uÿ;Ô[†ºr’‰ëÊP¿ï“8‡zÉP¿Ï“øŸ¡>2Ôïó$þg¨Ÿ õoÞH&6‘‰íNâj‘‰‘“Lì"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™Ø~à$Ž¡™Xù$™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒüÑP‹LüÍ×O§¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%21r’‰Kdbûù>‰s¨E&F~h¨E&FN2±‰L¬¼‘Ll"[ƒ“8†Zdbä$»ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™Xù#™8D&¶'q õ™Xù$™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LüÍÿÎ1Ô"#4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&FN2q‹Llíû$Ρ™ù¥¡™Xy#™ØD&FN2±‰LlNâj‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™ø›ÿ=‰c¨E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒd⟠þ3Ôýû·‹j‘‰‘Oj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"+ß$·ÈÄÖ¿Oâj‘‰‘“Ll"+o$›ÈÄÈI&6‘‰mÀIC-2±òA2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘Lœ"ó¿'q µÈÄÈI&N‘‰‘“L\"+$ŸÈÄÈI&>‘‰¿ùŸ=Ρ™y§¡™ù¢¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ-2±òM2q‹Llãû$Ρ™Xy#™ØD&FN2±‰LŒœdb™Ø&œÄ5ÔCdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™8E&¶ 'q µÈÄÈI&N‘‰•/’‰Kdbådâ™9ÈÄ¿/Üþêù}çP‹LŒ|ÐP‹LŒ|ÓP‹L¬|‘L\"#'™¸D&FN2q‰L¬|“LÜ"#'™¸E&¶ù}ÇP7‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰mÁIC-21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Odbådâ™ØœÄ1Ô"#'™¸D&V¾H&.‘‰•?’‰OdâoþŸÇ5Ô"#ï4Ô"#Ÿ4Ô"#?4Ô"+_$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄÈI&n‘‰¿ùß=Ž¡™9ÉÄ&21r’‰Mdbä$›ÈĶá$Ž¡™9ÉÄ!21r’‰Sdbå—dâ™Xù#™øD&FN2qŠLlNâj‘‰‘“L\"+_$—ÈÄÊ}ú™ø›ÿçÅq µÈÄÈ µÈÄÈ µÈÄÈ/ µÈÄÊÉÄ%21r’‰Kdbå›dâ™9ÉÄ-21r’‰[dâoþwc¨E&FN2±‰LŒœdb™9ÉÄ&2±8‰c¨E&FN2qˆL¬|’Lœ"+¿$ŸÈÄÊÉÄ'21r’‰Sdb;pÇP‹LŒœdâ™Xù"™¸D&þæÑG µÈÄÈ; µÈÄÈ' µÈÄÈ7 µÈÄÈI&6‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄßüïÇP‹LŒœdb™9ÉÄ&21r’‰Mdb»pÇP‹LŒœdâ™Xù$™8E&VþH&>‘‰‘“L|"#'™8E&¶ 'q µÈÄÈI&.‘‰•/’‰Kdb»ß'qµÈÄÈ µÈÄÈ µÈÄÈ µÈÄÊÉÄ&2±òE2q‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™ø›ÿÝãj‘‰‘“Ll"#'™ØD&FN2±‹LlNâj‘‰‘“L"+Ÿ$§ÈÄÊÉÄ'21r’‰Odâo>H&N‘‰•O’‰Sdbä$—ÈÄÊÉÄ%2±½ï“8‡Zdb䓆Zdb䛆Zdbä$›ÈÄÊÉÄ&2±òE2q‹L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™ØÞ÷IœC-21r’‰Mdbä$›ÈÄÊ;ÉÄ.2±ÿÀIC-21r’‰Cdbå“dâ™Xù#™øD&F2ñÏÿ;Ô¿ùü!™8E&V>I&N‘‰•/’‰Kdbä$—ÈÄþó}çP‹LŒ|ÑP‹LŒüÐP‹LŒœdb™Xy#™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LŒœdâ™Ø¾Oâj‘‰‘“Ll"#'™ØE&VÞI&v‘‰½ÁIC-21r’‰Cdbå“dâ™Xù#™øD&F¾h¨E&þæó‡dâ™Xù$™¸D&V¾H&.‘‰‘“L\"{û>‰s¨E&F¾i¨E&F~i¨E&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&FNß ÈÄÞ¾Oâj‘‰‘“Ll"+ï$»ÈÄÈI&v‘‰½ÃIC-21r’‰Sdbå“dâ™Xù#™øD&F¾i¨E&þæó‡dâ™Xù"™¸D&FN2q‰LŒœdâ™Øû÷IœC-21òCC-21r’‰Mdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[db凾A‘‰½ŸÄ9Ô"#'™ØE&VÞI&v‘‰‘“Lì"û€“8†Zdbå“dâ™9ÉÄ)2±òG2ñ‰LŒüÐP‹LüÍçÉÄ%2±òE2q‰LŒœdâ™9ÉÄ-2±ï“8‡Zdbä—†Zdbådb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$ÈÄÊ}ƒ>"ûø>‰s¨E&VÞI&v‘‰‘“Lì"#'™ØE&ö 'q õ™Xù$™8E&FN2qŠL¬ü‘L|"#¿4Ô"óùC2q‰L¬|‘L\"#'™¸D&V¾I&n‘‰}~ŸÄ9Ô"#'™ØD&VÞH&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&V~H&‘‰‘Ó7è#2±Ïï“8†º‹L¬¼“Lì"#'™ØE&FN2±‹Lì Nâj‘‰‘“Lœ"#'™8E&VþH&>‘‰‘?j‘‰¿ùü!™¸D&V¾H&.‘‰‘“LÜ"+ß$·Èľ¾Oâj‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“L<"+?$ÈÄÈéô™ø›ÿÝãj‘‰‘“Lì"#'™ØE&FN2±‹LìNâj‘‰‘“Lœ"#'™¸D&VþH&>‘‰¿ùß÷u1Ô"#'™¸D&V¾H&.‘‰‘“LÜ"+ß$·Èľ¿Oâøk"+o$›ÈÄÈI&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"+?$ÈÄÈI&‘‰‘Ó7è#2ñ7ÿ»Ç1Ô"#'™ØE&FN2±‹LŒœdb™ØœÄ1Ô"#'™8E&V¾H&.‘‰•?‰&øÏPx_C-21r’‰Kdbå‹dâ™9ÉÄ-2±òM2q‹LüÍÿ¢j‘‰‘“Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üL<"#'™xD&FNß ÈÄßüïÇP‹LŒœdb™9ÉÄ.21r’‰]db¿pÇP‹LŒœdâ™Xù"™¸D&þæß;ÇP‹LŒ¼ÓP‹LŒœdâ™Xù"™¸D&FN2q‹L¬|“LÜ"ûý>‰s¨E&FN2±‰LŒœdb™9ÉÄ&2±òN2±‹L¬|“LÜ"+?$ÈÄÈI&‘‰‘“L<"#§oÐGdâoþwc¨E&FN2±‹LŒœdb™9ÉÄ!2±?8‰c¨E&FN2qŠL¬|‘L\"ûû>‰s¨E&F>h¨E&VÞH&.‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-2±¿ï“8‡Zdbä$›ÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÊ7ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ#21rú}D&ö÷}çP‹LŒœdb™9ÉÄ.2±òA2qˆL?pÇP‹LŒœdâ™Xù"™¸D&ŽŸï“8‡Zdbä$›ÈÄÊÉÄ%2±òE2q‰L¬|“LÜ"#'™¸E&ŽŸï“8‡Zdbä$›ÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰‘Ó7è#2qü|ŸÄ9Ô"#'™ØE&FN2qˆL¬|L"Gƒ“8†Zdbä$§ÈÄÊÉÄ%2q´ï“8‡Zdbä$›ÈÄÊÉÄ%2±òE2q‹L¬|“LÜ"#'™¸E&Žö}çP‹LŒœdb™9ÉÄ&2±òN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#21rú}E&Žö}çP‹LŒœdb™Xù ™8D&FN2qˆLNâj‘‰‘“L\"+_$—ÈÄÑ¿Oâj‘‰‘“Ll"+o$—ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÑ¿Oâj‘‰‘“Ll"#'™ØE&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&V~éô™8ú÷IœC-21r’‰Cdbåƒdâ™9ÉÄ!2q 8‰c¨E&V¾H&.‘‰‘“L\"Çø>‰s¨E&FN2±‰L¬¼‘LÜ"+ß$·ÈÄÈI&n‘‰‘“L<"Çø>‰s¨E&FN2±‰L¬¼“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù¥oÐWdâß'qµÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄ1á$®¡^"+_$—ÈÄÈI&.‘‰c~ŸÄ9Ô"#'™ØD&VÞH&n‘‰•o’‰[dbä$·ÈÄÊÉÄ#2qÌï“8‡Zdbä$»ÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÊ/ÉÄ+21rú}E&Žù}ÇP‘‰•’‰Cdbä$‡ÈÄÈI&‘‰cÁIC-21r’‰Kdbä$—Èı¾Oâj‘‰‘“Ll"+o$·ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™8Ö÷IœC-2±òN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Wdbå—dâ™9}ƒ¾"ó¿{C-21r’‰Cdbä$‡ÈÄÈI&‘‰cÃIC-21r’‰Kdbä$·Èı¿Oâj‘‰•7’‰Mdbä$·ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™8ö÷Iÿq]dbådb™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbå—dâ™9ÉÄ+21rú}E&þæ÷8†Zdbä$‡ÈÄÈI&‘‰‘“L"Ç“8†Zdbä$—ÈÄÊ7ÉÄ-2qœï“8†º‰L¬¼‘Ll"#'™¸E&V¾I&n‘‰‘“L<"+?$ÈÄßü/úˆ¡™9ÉÄ.21r’‰]dbä$»ÈÄÈI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+21r’‰Wdbäô úŠLüÍÿîq µÈÄÈI&‘‰‘“L"#'™8D&Ž 'q µÈÄÈI&.‘‰•o’‰[dâoþ÷½s µÈÄÈI&6‘‰‘“LÜ"+ß$·ÈÄÈI&‘‰•’‰Gdâ¸ß'qµÈÄÈI&v‘‰‘“Lì"#'™ØE&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdbäô úŠLüÍÿîq µÈÄÈI&‘‰‘“L"#'™8E&Ž'q µÈÄÈI&.‘‰•o’‰[dâxß'qµÈÄÈI&6‘‰•w’‰[dbå›dâ™9ÉÄ#2±òC2ñˆLïû$Ρ™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ!2±òC2ñŠL¬ü’L¼"#'™xE&FN2ñŠLŒœ¾A_‘‰ã}ŸÄ9Ô"#'™8D&FN2qˆL¬|’Lœ"çœÄ1Ô"#'™¸D&V¾I&n‘‰óçû$Ρ™9ÉÄ.2±òN2q‹L¬|“LÜ"+?$ÈÄÈI&‘‰óçû$Ρ™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbäô úŠLœ?ß'qµÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÙà$Ž¡™9ÉÄ%2±òM2q‹Lœíû$Ρ™9ÉÄ.2±òN2q‹L¬|“L<"+?$ÈÄÈI&‘‰³}ŸÄ9Ô"#'™ØE&FN2±‹L¬|L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠLŒœ¾A?‘‰³}ŸÄ9Ô"#'™8D&V>I&N‘‰‘“Lœ"g‡“8†Zdbä$·ÈÄÊ7ÉÄ-2qöï“8‡Zdbä$»ÈÄÊ;ÉÄ-2±òC2ñˆLŒœdâ™9ÉÄ#2qöï“8‡Zdbä$»ÈÄÈI&‘‰•’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰•?úýD&Îþ}çP‹LŒœdâ™Xù$™8E&FN2qŠLœNâj‘‰•o’‰[dbä$·ÈÄ9¾Oâj‘‰‘“Lì"+ï$ÈÄÊÉÄ#21r’‰Gdbä$¯ÈÄ9¾Oâj‘‰‘“Lì"+$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™øD&Vþèô™8Ç÷IœC-2±òI2qŠLŒœdâ™9ÉÄ)2qN8‰k¨·ÈÄÊ7ÉÄ-21r’‰[dâœß'qµÈÄÈI&v‘‰•w’‰Gdbå‡dâ™9ÉÄ#2±òK2ñŠLœóû$Ρ™9ÉÄ!2±òA2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+2±òG2ñ‰LŒœ¾A?‘‰s~ŸÄ1ÔSdbå“dâ™9ÉÄ)21r’‰Sdâ\pÇP‹LŒœdâ™9ÉÄ-2q®ï“8‡Zdbä$»ÈÄÊ;ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Îõ}çP‹L¬|L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™Xù#™øD&FNß ŸÈÄßüïÇP‹LŒœdâ™9ÉÄ)21r’‰SdâÜpÇP‹LŒœdâ™9ÉÄ#2qîï“8‡Zdbådb™9ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Îý}ÇÜ™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœ¾A?‘‰¿ùß=Ž¡™9ÉÄ)21r’‰Sdbä$§ÈÄyà$Ž¡™9ÉÄ-2±òC2ñˆLœçû$Ž¡î"+ï$»ÈÄÈI&‘‰•’‰Gdbä$¯ÈÄÊ/ÉÄ+2ñ7ÿ‹>b¨E&FN2qˆLŒœdâ™9ÉÄ!21r’‰Sdbå—dâ™9ÉÄ'2±òG2ñ‰LŒœdâ™9}ƒ~"ó¿{C-21r’‰Sdbä$§ÈÄÈI&N‘‰óÂIC-21r’‰[dbå‡dâ™ø›ÿ}ïC-21r’‰]dbä$ÈÄÊÉÄ#21r’‰Wdbå—dâ™8ï÷IœC-21r’‰Cdbä$‡ÈÄÈI&‘‰•O’‰Sdbå—dâ™Xù#™øD&FN2ñ‰LŒœdâ™9}ƒ~"ó¿{C-21r’‰Sdbä$§ÈÄÈI&.‘‰óÁIC-21r’‰[dbå‡dâ™8ß÷IœC-21r’‰]dbåƒdâ™Xù!™xD&FN2ñŠL¬ü’L¼"çû>‰s¨E&FN2qˆLŒœdâ™9ÉÄ)2±òI2qŠL¬ü’L|"+$ŸÈÄÈI&>‘‰‘“L|"#§oÐOdâ|ß'qµÈÄÈI&N‘‰‘“Lœ"+_$—ÈÄõ'q µÈÄÈI&n‘‰•’‰Gdâúù>‰s¨E&FN2qˆL¬|L<"+?$ÈÄÊ/ÉÄ+21r’‰Wdâúù>‰s¨E&FN2qˆLŒœdâ™9ÉÄ)2±òI2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™9}ƒ~"×Ï÷IœC-21r’‰Sdbä$—ÈÄÊÉÄ%2q58‰c¨E&FN2q‹L¬üL<"Wû>‰s¨E&FN2qˆL¬|L<"+?$¯ÈÄÊ/ÉÄ+21r’‰Wdâjß'qµÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"#‡oÐûGdâjß'qµÈÄÈI&N‘‰•/’‰Kdbä$—ÈÄÕá$Ž¡™9ÉÄ#2±òC2ñˆL\ýû$Ρ™9ÉÄ!2±òA2ñˆL¬ü’L¼"#'™xE&FN2ñŠL\ýû$Ρ™9ÉÄ!21r’‰Sdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r’‰Odâoþwc¨E&V>I&N‘‰‘“L\"+_$—ÈÄÈI&.‘‰kÀIC-2±òC2ñˆLŒœd♸Æ÷IœC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœd♸Æ÷IœC-21r’‰Cdbå“dâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä ÿNðùüãÿîq µÈÄÊ'ÉÄ)2±òE2q‰LŒœdâ™9ÉÄ%2qM8‰k¨ÈÄÊÉÄ#21r’‰Gdâšß'qµÈÄÈI&‘‰•’‰Wdbå—dâ™9ÉÄ+2±òG2ñ‰L\óû$Ρ™9ÉÄ)2±òI2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'2ñ7ÿgÿj‘‰‘wj‘‰•O’‰Kdbå‹dâ™9ÉÄ%21r’‰KdâZpÇP‹LŒœdâ™9ÉÄ#2q­ï“8‡Zdbä$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&®õ}çP‹L¬|’Lœ"#'™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒd⟓øÏP¯¯“øß¡™ù ¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2qm8‰c¨E&FN2ñˆLŒœd♸ö÷IœC-2±òA2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"×þ>‰c¨§ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄßüß=þg¨E&FÞi¨E&F>i¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L\Nâj‘‰‘“L<"+¿$¯ÈÄu¾Oâê!2±òA2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"ó¿è#†Zdbä$§ÈÄÈI&N‘‰‘“Lœ"#'™¸D&VþH&>‘‰‘ƒLüw‚ÿõùü•øŸ¡™ù ¡™ù¢¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2q]8‰c¨E&FN2ñˆL¬ü’L¼"ó¿ïc¨E&FN2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"×ý>‰s¨E&FN2qŠLŒœdâ™9ÉÄ)2±òE2q‰L¬ü‘L|"ó??QäP‹LŒ¼ÓP‹LŒ|ÒP‹LŒ|ÓP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸œÄ1Ô"#'™xD&V~I&^‘‰ë}ŸÄ9Ô"#'™8D&V>I&^‘‰•_’‰Wdbä$ŸÈÄÊÉÄ'2q½ï“8‡Zdbä$§ÈÄÈI&N‘‰‘“L\"+_$—ÈÄÊÈÄ?üg¨ß÷Éj‘‰‘j‘‰‘/j‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰•o’‰[dâþ“8†Zdbä$ÈÄÊ/ÉÄ+2qÿ|ŸÄ9Ô"#'™8E&V>I&^‘‰•_’‰Wdbådâ™9ÉÄ'2qÿ|ŸÄ9Ô"#'™8E&FN2qŠLŒœdâ™Xù"™¸D&þæö8‡Zdbä†Zdb䓆Zdb䛆Zdbä—†Zdbå‹dâ™9ÉÄ%21r’‰[dbå›d♸œÄ1Ô"#'™xD&V~I&^‘‰»}ŸÄ9Ô"#'™8E&V>I&^‘‰•_’‰Odbådâ™9ÉÄ'2q·ï“8‡Zdbä$§ÈÄÈI&N‘‰•/’‰Kdbä$—ÈÄßüÏçP‹LŒ|ÐP‹LŒ|ÑP‹LŒüÐP‹LŒœdb™Xù"™¸D&FN2q‰L¬|“LÜ"#'™¸E&î'q µÈÄÈI&^‘‰•_’‰Wdâîß'qµÈÄÈI&N‘‰•O’‰Wdbådâ™9ÉÄ'21r’‰Odâîß'qµÈÄÈI&N‘‰‘“L\"+_$—ÈÄÈI&.‘‰»ŸÄ9Ô"#Ÿ4Ô"#ß4Ô"#¿4Ô"+o$›ÈÄÊÉÄ%21r’‰[dbå›dâ™9ÉÄ-2q8‰c¨E&V~I&^‘‰‘“L¼"÷ø>‰s¨E&FN2qŠL¬|’L|"+$ŸÈÄÈI&>‘‰‘ƒL\?"÷ø>‰s¨E&FN2qŠL¬|‘L\"#'™¸D&FN2q‰LÜãû$Ρ™ù¢¡™ù¡¡™9ÉÄ&2±òF2±‰L¬|‘L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"÷„“¸†úŠL¬ü’L¼"#'™xE&îù}çP‹LŒœdâ™Xù$™øD&VþH&>‘‰‘“L|"ó¿{C-2±òI2qŠLŒœdâ™Xù"™¸D&FN2q‰LŒœd♸ç÷IœC-21òMC-21òKC-2±òF2±‰LŒœdb™Xù"™¸E&V¾I&n‘‰‘“LÜ"#'™¸E&î'q µÈÄÈI&^‘‰‘“L¼"÷ú>‰s¨E&FN2qŠL¬|’L|"+$ŸÈÄÈA&þ™à?Cý+Ô~ µÈÄÊ'ÉÄ)2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdâ^ß'qµÈÄÈ µÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰{ÃIC-21r’‰Wdbä$ŸÈĽ¿Oâj‘‰•O’‰Sdbä$ŸÈÄÊÉÄ'21òMC-2ñ7ÿ»Ç1Ô"+Ÿ$—ÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰{ŸÄ9Ô"#¿4Ô"+o$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&î'q µÈÄÈI&^‘‰•?’‰Odâ>ß'q õ™Xù$™8E&FN2ñ‰L¬ü‘L|"#?4Ô"ó¿{C-2±òE2q‰LŒœdâ™9ÉÄ%21r’‰Kdbä$·ÈÄ}¾Oâj‘‰‘“Ll"+o$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&î 'q µÈÄÈI&^‘‰•?’‰Odâoþ÷½s µÈÄÈI&N‘‰‘“L|"+$ŸÈÄÈ/ µÈÄßüïÇP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™Xù&™¸E&îû}çP‹L¬¼‘Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ#2q?8‰c¨E&FN2ñŠL¬ü‘L|"÷û>‰s¨E&FN2qŠL¬|‘L|"+$ŸÈÄÈ µÈÄßüïÇP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™Xù&™¸E&î÷}ÇP7‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"+?$ÈÄó'q µÈÄÈI&^‘‰•?’‰Odâùù>‰s¨E&FN2q‰L¬|‘L|"+$ŸÈÄßüï³j‘‰‘oj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“LÜ"+ß$·ÈÄßüÏçP‹LŒœdb™9ÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$ÈÄÊÉÄ#2ñ48‰c¨E&FN2ñŠL¬ü‘L|"Oû>‰s¨E&FN2q‰L¬|‘L|"+ ÿLðŸ¡nðl#†Zdb䇆Zdbå‹dâ™9ÉÄ%21r’‰Kdbå›dâ™9ÉÄ-2ñ7ÿ³Ç9Ô"#'™ØD&FN2±‰LŒœdb™9ÉÄ.2±òM2q‹LŒœdâ™Xù!™xD&FN2ñˆL<Nâj‘‰‘“L|"+$ŸÈÄÓ¿Oâj‘‰‘“L\"+_$ŸÈÄßüïIC-21òNC-21òKC-2±òE2q‰LŒœdâ™9ÉÄ-2±òM2q‹LŒœdâ™xú÷IœC-21r’‰Mdbä$›ÈÄÈI&6‘‰•w’‰]dbå›dâ™9ÉÄ#2±òC2ñˆLŒœdâ™xœÄ1Ô"+$ŸÈÄÈI&>‘‰g|ŸÄ9Ô"#'™¸D&V¾@&þ}ÉüïP8‰c¨E&F>h¨E&FN2±‰L¬|‘L\"#'™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&žñ}çP‹LŒœdb™9ÉÄ&21r’‰]dbådb™Xù&™¸E&V~H&‘‰‘“L<"#'™xD&ž 'q õ™Xù#™øD&FN2ñ‰L<óû$Ρ™9ÉÄ%2±òµh¨E&ž 'q µÈÄÈ' µÈÄÊÉÄ&2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LŒœdâ™xæ÷IœC-21r’‰Mdbä$›ÈÄÊ;ÉÄ.21r’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™xœÄ1Ô"#'™øD&FN2ñ‰L<ëû$Ρ™9ÉÄ%2±òµi¨E&ž'q µÈÄÈI&6‘‰•7’‰Mdbå‹dâ™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2ñ¬ï“8‡Zdbä$›ÈÄÈI&v‘‰•w’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰gÃIC-21r’‰Odbä çÈij¿Oâj‘‰•/’‰Kdb䇆ZdâÙpÇP‹LŒœdb™Xy#™ØD&V¾H&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"Ïþ>‰s¨E&FN2±‰L¬¼“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™xœÄ1Ô"#'™øD&þæö8‡Zdbå“dâ™Xù"™¸D&F~i¨E&ž'q µÈÄÈI&6‘‰•7’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄÈI&‘‰ç|ŸÄ9Ô"#'™ØE&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL<Nâj‘‰‘“L|"ó?{œC-2±òE2q‰LŒœdâ™ù£¡™x.œÄ1Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"+?$ÈÄs¿Oâj‘‰•w’‰]dbä$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xE&ž'q µÈÄÈI&>‘‰¿ùŸ=Ρ™Xù"™¸D&FN2q‰L¬|ÿÐP‹L<Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&‘‰•’‰Gdâyß'q u™Xy'™ØE&FN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#2±òK2ñŠL¼?pÇP‹LŒœdâ™ø›ÿÙãj‘‰•/’‰Kdbä$·ÈÄÊw£¡™xà$Ž¡™Xy#™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™Xù!™xD&þæö8‡Zdbä$»ÈÄÈI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xE&V~I&^‘‰·ÁIC-21r’‰Odâoþgs¨E&V¾H&.‘‰‘“LÜ"+߆Zdâmp×P7‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÊÉÄ#21r’‰Gdâoþgs¨E&FN2±‹LŒœdb™9ÉÄ.21r’‰Cdbå‡dâ™9ÉÄ#2±òK2ñŠLŒœdâ™x;œÄ1Ô"#™øÏgÂÿ õ/îûY4Ô"+_$—ÈÄÈI&n‘‰•ïAC-2ñ7ÿ{ÇP‹LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ#2±òC2ñˆLŒœdâ™xû÷IœC-21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Cdbå‡dâ™9ÉÄ+2±òK2ñŠLŒœdâ™xœÄ1Ô"ó?Ï6r¨E&F¾i¨E&V¾H&.‘‰‘“LÜ"+ß$›ÈÄßüïIC-21r’‰Mdbä$»ÈÄÊ7ÉÄ-21r’‰[dbå‡dâ™9ÉÄ#21r’‰Gdâß'qµÈÄÈI&v‘‰‘“Lì"#'™8D&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+21r’‰Wdâpÿõß—Ìÿõü~¶‘C-21òCC-2±òE2q‰LŒœdâ™Xù&™ØD&Þ 'q µÈÄÈI&6‘‰•w’‰]dbå›dâ™9ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ#2ñÎï“8‡Zdbä$»ÈÄÈI&v‘‰•’‰Cdbä$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ+2ñ.8‰c¨E&FÞi¨E&F~i¨E&V¾H&.‘‰‘“LÜ"+ß$›ÈÄ»à$Ž¡™9ÉÄ.2±òN2±‹L¬|“LÜ"+?$ÈÄÈI&‘‰‘“L<"#'™xD&Þõ}çP‹LŒœdb™9ÉÄ!2±òA2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñn8‰c¨E&F>h¨E&FN2±‰L¬|‘L\"+ß$·ÈÄÈI&6‘‰wÃIC-21r’‰]dbådb™Xù&™xD&V~H&‘‰‘“L<"#'™xD&FN2ñˆL¼ûû$Ρ™9ÉÄ.2±òA2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdâ=pÇP‹LŒ|ÒP‹L¬¼‘Ll"+_$·ÈÄÊ7ÉÄ-21r’‰Mdâ=pÇP‹LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆLŒœdâ™xÏ÷IœC-21r’‰Cdbåƒdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄ{á$Ž¡™ù¢¡™Xy#™ØD&V¾I&n‘‰‘“LÜ"#'™ØD&Þ 'q µÈÄÈI&v‘‰•w’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄÊ/ÉÄ+2ñÞï“8‡Zdbåƒdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&>‘‰÷ÁIC-21òMC-2±òF2±‰L¬|“LÜ"#'™¸E&V~H&6‘‰÷ÁIC-21r’‰]dbådb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ+2±òK2ñŠL¼ïû$Ž¡"+$‡ÈÄÈI&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&VþH&>‘‰ïNâj‘‰‘j‘‰•7’‰Mdbå›dâ™9ÉÄ#2±òC2±‰L|?pÇP‹L¬¼“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñŠL¬ü’L¼"ó?{œC-21r’‰Cdbä$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L|"+$ŸÈÄ×à$Ž¡™ù¥¡™Xy#™ØD&V¾I&n‘‰‘“L<"+?$›ÈÄ×à$®¡î"+ï$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄßüÏçP‹LŒœdâ™9ÉÄ!21r’‰Cdbä$§ÈÄÊ/ÉÄ+21r’‰Wdbådâ™9ÉÄ'2ñu8‰c¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&‘‰•’‰Mdâoþ÷$Ž¡™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Wdbå—dâ™9ÉÄ+2ñõï“8‡Zdbä$‡ÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÊ/ÉÄ+21r’‰Odbådâ™9ÉÄ'2ñ 8‰c¨E&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&‘‰•’‰]dâoþ÷$Ž¡™9ÉÄ.21r’‰Cdbå‡dâ™9ÉÄ#2±òK2ñŠLŒœdâ™9ÉÄ+2ñï“8‡Zdbä$‡ÈÄÈI&‘‰‘“Lœ"+Ÿ$§ÈÄÊ/ÉÄ+2±òG2ñ‰LŒœdâ™9ÉÄ'2ñM8‰k¨›ÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ#2±òC2±‹L|Nâj‘‰‘“Lì"+$‡ÈÄÊÉÄ#21r’‰Wdbå—dâ™9ÉÄ+21r’‰Wdâ›ß'qµÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰•_’‰Odbådâ™9ÉÄ'21r’‰Odâ[pÇP‹LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™Xù!™ØE&¾'q µÈÄÈI&‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñ­ï“8‡Zdbä$‡ÈÄÈI&N‘‰•O’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰oÃIC-21r’‰Mdbä$»ÈÄÊ7ÉÄ-2±òC2ñˆLŒœdb™ø6œÄ1Ô"#'™8D&V>H&‘‰•’‰Wdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄ·¿Oâj‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&¾'q µÈÄÈI&6‘‰•w’‰]dbå›dâ™Xù!™xD&FN2±‹L|Nâj‘‰‘“L"+$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&^‘‰‘“L|"ßù>‰s¨E&FN2qŠL¬|’Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™ø.œÄ1Ô"#'™ØD&VÞI&v‘‰•’‰Gdbä$ÈÄÈI&v‘‰ïÂIC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2±òG2ñ‰L|÷û$Ρ™Xù$™8E&FN2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r‰çGdâ{pÇP‹LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"+¿$»ÈÄ÷à$Ž¡™9ÉÄ!2±òA2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™Xù#™øD&¾÷}ÇPO‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"ó÷øŸ¡f™øÿè¿'q 5ËÄÌI&6–‰‘w’‰ebä‡dâa™˜9ÉÄË21òK2±³L¬üïICÍ21òA2q°LÌœdâ`™ù%™xY&fN2ñ²LÌœdâe™˜9ÉÄÇ21òG2ñ±L¬üÏçP³LÌœdâd™˜9ÉÄÉ21s’‰“ebæ$'ËÄÈÉÄÇ21s’‰ebæ ÿ™à?C]ù¿{üÏPwê'q õ‘¡nßÏ6r¨Ÿ õoÞI&ö%CݾOâê)CÝà}] u“¡þÍ/ÉÄ~e¨œÄ5ÔãG†ºÁ³ê-C]9ÉÄqe¨Û÷IœC½d¨Û÷IœC}d¨Û÷IœCýd¨Û÷o9Ô]†ºr’‰oÊP·ï“8‡ºËP·ï‡9ÔS†º}þJüÏPoêöuÿ;ÔW†ºr’‰ëG†º}ŸÄ9ÔG†º}žÄÿ õ“¡nŸ'ñ?CÝd¨+ï4ÔC†ºÃIC}e¨û÷³êþ#Cý›w’‰}ËP÷ï“8‡zÉPwx_CÝe¨óK2±?ê'q u“¡îðl#†úÈPWN2q<êþ}çPoêþ}çP_êþ}ÇP¿êþýÛEõ¡®œdâ[2Ôýû$Ρ2ÔýûáDõ’¡îŸ¿ÿ3ÔG†ºÄÿõ“¡þÍÉÄÕd¨û÷IœC}e¨ûçICýçWâ?CÝ?O↺ËPW>h¨§ õ€“8†úÉPïg9ÔM†ºr’‰ýÈPï“8‡zËPx_C=d¨óK2qüÈP8‰c¨» õ€g1ÔW†ºr’‰óG†z|ŸÄ9ÔG†z|ŸÄ9ÔO†z|ŸÄ9ÔM†z|ÿv‘C=e¨+'™ø¶ õø>‰s¨§ õø~8‘C½e¨Çç¯Äÿ õ•¡_'ñ?C½~d¨óE2quêñ}çP?êñyÿ3ÔM†z|žÄÿ õ¡®|ÒP/ê 'q uÿ‘¡žßÏ6r¨» uå$û•¡žß'qõ‘¡žð¾.†zÊPÿæ—dâh2ÔNâê!C=áÙF õ“¡þÍ'ÉÄÙd¨ç÷IœC}e¨ç÷ICý~d¨ç÷IœCÝe¨ç÷o9ÔK†ºr’‰ïÈPÏï“8‡zÉPÏï‡9ÔG†z~þJüÏP?êùuÿ;ÔM†ºr’‰kÈPÏ†úüüÈPÏÏ“øŸ¡î2Ôóó$þg¨§ u勆zËP/8‰c¨› õú~¶‘C=d¨+'™ØŸ õú>‰s¨¯ õ‚÷u1ÔK†ú7¿$G—¡^pÇPOêÏ6j¨ç õo>I&Î.C½¾Oâê'C½¾Oâê&C½¾Oâê!C½¾»È¡Þ2Ô•“L|W†z}ŸÄ9Ô[†z}?œÈ¡¾2ÔëóWâêõ#C½¾N⇺ËPWN2qMêõ}çP7êõyÿ3ÔC†z}žÄÿ õ’¡®|ÓPê 'q u—¡ÞßÏ6r¨§ uå$Ç õþ>‰s¨Ÿ õ†÷u1Ô[†ºr’‰cÈPo8‰c¨— õ†g1ÔM†ú7Ÿ$ç¡Þß'q õû‘¡Þß'qu—¡Þß'qõ”¡Þß¿]äPêÊI&¾'C½¿Oâê#C½¿NäP?êýù+ñ?CÝd¨÷×IüïPêÊI&®%C½¿Oâê.C½?Oâ†zÊPïÏ“øŸ¡Þ2Ô•ê+C}à$Ž¡2ÔçûÙFõ’¡þÍÉÄÑd¨Ï÷IC}d¨¼¯‹¡>2Ô•“LS†úÀIC½e¨<Ûˆ¡î2Ô¿ù$™8§ õù>‰s¨› õù>‰s¨‡ õù>‰s¨— õùþí"‡úÊPW2qÿüÈPŸï“8‡úÊPŸï‡1ÔëG†ú|þJüÏPwêóuÿ;ÔS†ºr’‰kËPŸï“8‡zÈPŸÏ“øŸ¡^2Ôçó$þg¨ uå—†úÉP_8‰c¨§ õý~¶‘C½e¨óA2qtêû}çP7ê ïëb¨¯ uå$Ç’¡¾pÇPê Ï6b¨‡ õo>I&Î%C}¿Oâê.C}¿Oâê)C}¿Oâê-C}¿»È¡~2Ô¿Äì燆ºÉPßï“8‡úÉPßï‡9ÔM†ú~þJüÏPêûuÿ;ÔK†ºr’‰ëÈPßï“8‡zÊPßÏ“øŸ¡Þ2Ô÷ó$þg¨¯ uå$Û õƒ“8†zÉP¿ïg9ÔG†ú7$Ç¡~ß'qu—¡~ð¾.†úÉPÿædâØ2ÔNâê+CýàÙF õ”¡þÍ'ÉĹe¨ß÷IœC=d¨ß÷IœC½d¨ß÷IœC}d¨ß÷o5Ô&øÏPÿ µŸFCÝe¨ß÷IC½~d¨ß÷Éê.Cý>%þg¨§ õû:‰ÿê-C]9ÉÄue¨ß÷IœC½d¨ßçIüÏPê÷yÿ3ÔO†ú7o$›ÈÄö'q µÈÄÈI&v‘‰•’‰Cdbå—dâ™9ÉÄ'2±òG2qˆLl?pÇP‹L¬|’Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&Fþh¨E&þæû§ÓP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™9ÉÄ%2±ý|ŸÄ9Ô"#?4Ô"#'™ØD&VÞH&6‘‰­ÁIC-21r’‰]dbåƒdâ™Xù%™xE&FN2ñ‰L¬ü‘L"[ƒ“¸†zŠL¬|’Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&þæçj‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"#'™¸E&¶ö}çP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&¶'q µÈÄÈI&‘‰•’‰Cdbå—dâ™9ÉÄ'2±òG2qˆLüÍÿžÄ1Ô"#'™8E&FN2qŠL¬ü‘L|"#'™øD&F2ñÏÿêþýÛEµÈÄÈ' µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰•o’‰[dbëß'qµÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄ6à$Ž¡™Xù ™8D&FN2qˆL¬ü’L¼"#'™øD&VþH&N‘‰¿ùß“8†Zdbä$§ÈÄÈI&.‘‰•?’‰Odbä$ŸÈÄßüÏçP‹LŒ¼ÓP‹LŒ|ÑP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™Xù&™¸E&¶ñ}çP‹L¬¼‘Ll"#'™ØD&FN2±‰LlNâê!2±òA2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘Lœ"Û„“8†Zdbä$§ÈÄÊÉÄ%2±òG2ñ‰LŒdâßnÿõü>‰s¨E&F>h¨E&F¾i¨E&V¾H&.‘‰‘“L\"#'™¸D&V¾I&n‘‰‘“LÜ"Ûü>‰c¨›ÈÄÊÉÄ&21r’‰Mdbä$›ÈĶà$Ž¡™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ'2±òG2qŠLl Nâj‘‰‘“L\"+_$—ÈÄÊÉÄ'2ñ7ÿÏ‹ãj‘‰‘wj‘‰‘Oj‘‰‘j‘‰•/’‰Kdbä$—ÈÄÈI&n‘‰•o’‰[dbä$·ÈÄßüïÇP‹LŒœdb™9ÉÄ&21r’‰MdbÛpÇP‹LŒœdâ™9ÉÄ)2±òK2ñŠL¬ü‘L|"#'™8E&¶ 'q µÈÄÈI&.‘‰•/’‰Kdbå¾ ýˆLüÍÿó⸆Zdb䃆Zdb䋆Zdbä—†Zdbå‹dâ™9ÉÄ%2±òM2q‹LŒœdâ™9ÉÄ-2ñ7ÿ»Ç1Ô"#'™ØD&FN2±‰LŒœdb™ØœÄ1Ô"#'™8D&V>I&N‘‰•_’‰Odbådâ™9ÉÄ)2±8‰c¨E&FN2q‰L¬|‘L\"ó¿è#†Zdbä†Zdb䓆Zdb䛆Zdbä$›ÈÄÊÉÄ%21r’‰[dbå›dâ™9ÉÄ-21r’‰[dâoþwc¨E&FN2±‰LŒœdb™9ÉÄ&2±]8‰c¨E&FN2qˆL¬|’Lœ"+$ŸÈÄÈI&>‘‰‘“Lœ"Û…“8†Zdbä$—ÈÄÊÉÄ%2±Ýï“8‡Zdb䃆Zdb䋆Zdb䇆Zdbådb™Xù"™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹LüÍÿîq µÈÄÈI&6‘‰‘“Ll"#'™ØE&¶'q µÈÄÈI&‘‰•O’‰Sdbådâ™9ÉÄ'2ñ7_?$§ÈÄÊ'ÉÄ)21r’‰Kdbå‹dâ™ØÞ÷IœC-21òIC-21òMC-21r’‰Mdbådb™Xù"™¸E&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹Llïû$Ρ™9ÉÄ&21r’‰Mdbådb™Øà$Ž¡™9ÉÄ!2±òI2qŠL¬ü‘L|"#™øg‚ÿêß|ýLœ"+Ÿ$§ÈÄÊÉÄ%21r’‰Kdbÿù>‰s¨E&F¾h¨E&F~h¨E&FN2±‰L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&FN2q‹Lì?ß'qµÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÞà$Ž¡™9ÉÄ!2±òI2qŠL¬ü‘L|"#_4Ô"óõC2qŠL¬|’L\"+_$—ÈÄÈI&.‘‰½}ŸÄ9Ô"#ß4Ô"#¿4Ô"+o$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"#§oÐGdboß'qµÈÄÈI&6‘‰•w’‰]dbä$»ÈÄÞá$Ž¡™9ÉÄ)2±òI2qŠL¬ü‘L|"#ß4Ô"óõC2qŠL¬|‘L\"#'™¸D&FN2q‰Lìýû$Ρ™ù¡¡™9ÉÄ&2±òF2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-2±òCß ÈÄÞ¿Oâj‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰}ÀIC-2±òI2qŠLŒœdâ™Xù#™øD&F~h¨E&þæë‡dâ™Xù"™¸D&FN2q‰LŒœdâ™ØÇ÷IœC-21òKC-2±òF2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰Gdb凾A‘‰}|ŸÄ9Ô"+ï$»ÈÄÈI&v‘‰‘“Lì"û„“¸†zŠL¬|’Lœ"#'™8E&VþH&>‘‰‘_j‘‰¿ùú!™¸D&V¾H&.‘‰‘“L\"+ß$·ÈÄ>¿Oâj‘‰‘“Ll"+o$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"+?$ÈÄÈéô™Øç÷ICÝE&VÞI&v‘‰‘“Lì"#'™ØE&ö'q µÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈ µÈÄß|ýL\"+_$—ÈÄÈI&n‘‰•o’‰[db_ß'qµÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&‘‰•’‰Gdbäô úˆLüÍÿîq µÈÄÈI&v‘‰‘“Lì"#'™ØE&ö 'q µÈÄÈI&N‘‰‘“L\"+$ŸÈÄßüïûºj‘‰‘“L\"+_$—ÈÄÈI&n‘‰•o’‰[dbßß'qüÇ5‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰•’‰Gdbä$ÈÄÈéô™ø›ÿÝãj‘‰‘“Lì"#'™ØE&FN2±‹LìNâj‘‰‘“Lœ"+_$—ÈÄÊÈÄ?üg¨¼¯‹¡™9ÉÄ%2±òE2q‰LŒœdâ™Xù&™¸E&þæÑG µÈÄÈI&6‘‰‘“Ll"#'™ØD&FN2±‹L¬|“LÜ"#'™xD&V~H&‘‰‘“L<"#§oÐGdâoþwc¨E&FN2±‹LŒœdb™9ÉÄ.2±_8‰c¨E&FN2qŠL¬|‘L\"ó¿ïc¨E&FÞi¨E&FN2q‰L¬|‘L\"#'™¸E&V¾I&n‘‰ý~ŸÄ9Ô"#'™ØD&FN2±‰LŒœdb™Xy'™ØE&V¾I&n‘‰•’‰Gdbä$ÈÄÈI&‘‰‘Ó7è#2ñ7ÿ»Ç1Ô"#'™ØE&FN2±‹LŒœdâ™ØœÄ1Ô"#'™8E&V¾H&.‘‰ý}ŸÄ9Ô"#4Ô"+o$—ÈÄÊÉÄ%21r’‰[dbå›dâ™Øß÷IœC-21r’‰Mdbä$›ÈÄÈI&v‘‰•w’‰]dbå›dâ™Xù!™xD&FN2ñˆLŒœdâ™9}ƒ>"ûû>‰s¨E&FN2±‹LŒœdb™Xù ™8D&Ž8‰c¨E&FN2qŠL¬|‘L\"ÇÏ÷IœC-21r’‰Mdbådâ™Xù"™¸D&V¾I&n‘‰‘“LÜ"ÇÏ÷IœC-21r’‰Mdbä$›ÈÄÈI&v‘‰•w’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$ÈÄÈéô™8~¾Oâj‘‰‘“Lì"#'™8D&V>H&‘‰£ÁIC-21r’‰Sdbå‹dâ™8Ú÷IœC-21r’‰Mdbådâ™Xù"™¸E&V¾I&n‘‰‘“LÜ"Gû>‰s¨E&FN2±‰LŒœdb™Xy'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™9}ƒ¾"Gû>‰s¨E&FN2±‹L¬|L"#'™8D&Ž'q µÈÄÈI&.‘‰•/’‰Kdâèß'qµÈÄÈI&6‘‰•7’‰Kdbå›dâ™9ÉÄ-21r’‰[dâèß'qµÈÄÈI&6‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"+¿ô úŠLýû$Ρ™9ÉÄ!2±òA2qˆLŒœdâ™8œÄ1Ô"+_$—ÈÄÈI&.‘‰c|ŸÄ9Ô"#'™ØD&VÞH&n‘‰•o’‰[dbä$·ÈÄÈI&‘‰c|ŸÄ9Ô"#'™ØD&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñŠL¬üÒ7è+2qŒï“8‡Zdbåƒdâ™9ÉÄ!21r’‰Cdâ˜p×P/‘‰•/’‰Kdbä$—ÈÄ1¿Oâj‘‰‘“Ll"+o$·ÈÄÊ7ÉÄ-21r’‰[dbå‡dâ™8æ÷IœC-21r’‰]dbådb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbå—dâ™9}ƒ¾"Çü>‰c¨‡ÈÄÊÉÄ!21r’‰Cdbä$‡Èıà$Ž¡™9ÉÄ%21r’‰KdâXß'qµÈÄÈI&6‘‰•7’‰[dbå›dâ™9ÉÄ#2±òC2ñˆLëû$Ρ™Xy'™ØE&FN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ+2±òK2ñŠLŒœ¾A_‘‰¿ùß=Ž¡™9ÉÄ!21r’‰Cdbä$‡Èıá$Ž¡™9ÉÄ%21r’‰[dâØß'qµÈÄÊÉÄ&21r’‰[dbå›dâ™9ÉÄ#2±òC2ñˆLûû$Žÿ¸.2±òN2±‹LŒœdb™9ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#2±òK2ñŠLŒœdâ™9}ƒ¾"ó¿{C-21r’‰Cdbä$‡ÈÄÈI&‘‰ãÀIC-21r’‰Kdbå›dâ™8Î÷ICÝD&VÞH&6‘‰‘“LÜ"+ß$·ÈÄÈI&‘‰•’‰Gdâoþ}ÄP‹LŒœdb™9ÉÄ.21r’‰]dbä$‡ÈÄÊÉÄ#21r’‰Wdbå—dâ™9ÉÄ+21rú}E&þæ÷8†Zdbä$‡ÈÄÈI&‘‰‘“L"Ç…“8†Zdbä$—ÈÄÊ7ÉÄ-2ñ7ÿûÞ9†Zdbä$›ÈÄÈI&n‘‰•o’‰[dbä$ÈÄÊÉÄ#2qÜï“8‡Zdbä$»ÈÄÈI&v‘‰‘“Lì"+$‡ÈÄÊÉÄ#2±òK2ñŠLŒœdâ™9ÉÄ+21rú}E&þæ÷8†Zdbä$‡ÈÄÈI&‘‰‘“Lœ"ǃ“8†Zdbä$—ÈÄÊ7ÉÄ-2q¼ï“8‡Zdbä$›ÈÄÊ;ÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&Ž÷}çP‹LŒœdb™9ÉÄ.21r’‰Cdbåƒdâ™Xù!™xE&V~I&^‘‰‘“L¼"#'™xE&FNß ¯ÈÄñ¾Oâj‘‰‘“L"#'™8D&V>I&N‘‰óNâj‘‰‘“L\"+ß$·ÈÄùó}çP‹LŒœdb™Xy'™¸E&V¾I&n‘‰•’‰Gdbä$ÈÄùó}çP‹LŒœdb™9ÉÄ.21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+21rú}E&Οï“8‡Zdbä$‡ÈÄÈI&N‘‰•O’‰SdâlpÇP‹LŒœdâ™Xù&™¸E&Îö}çP‹LŒœdb™Xy'™¸E&V¾I&‘‰•’‰Gdbä$ÈÄÙ¾Oâj‘‰‘“Lì"#'™ØE&V>H&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™xE&FNß ŸÈÄÙ¾Oâj‘‰‘“L"+Ÿ$§ÈÄÈI&N‘‰³ÃIC-21r’‰[dbå›dâ™8û÷IœC-21r’‰]dbådâ™Xù!™xD&FN2ñˆLŒœdâ™8û÷IœC-21r’‰]dbä$‡ÈÄÊÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄÊ}ƒ~"gÿ>‰s¨E&FN2qŠL¬|’Lœ"#'™8E&Î'q µÈÄÊ7ÉÄ-21r’‰[dâß'qµÈÄÈI&v‘‰•w’‰Gdbå‡dâ™9ÉÄ#21r’‰Wdâß'qµÈÄÈI&v‘‰•’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L|"+ô ú‰Lœãû$Ρ™Xù$™8E&FN2qŠLŒœdâ™8'œÄ5Ô[dbå›dâ™9ÉÄ-2qÎï“8‡Zdbä$»ÈÄÊ;ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Îù}çP‹LŒœdâ™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™Xù#™øD&FNß ŸÈÄ9¿Oâê)2±òI2qŠLŒœdâ™9ÉÄ)2q.8‰c¨E&FN2q‹LŒœdâ™8×÷IœC-21r’‰]dbådâ™Xù!™xD&FN2ñŠL¬ü’L¼"çú>‰s¨E&V>H&‘‰‘“L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñ‰L¬ü‘L|"#§oÐOdâoþwc¨E&FN2qŠLŒœdâ™9ÉÄ)2qn8‰c¨E&FN2q‹LŒœdâ™8÷÷IœC-2±òN2±‹LŒœdâ™Xù!™xD&FN2ñŠL¬ü’L¼"çþ>‰ã?nˆL¬|L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠL¬ü‘L|"#'™øD&FNß ŸÈÄßüïÇP‹LŒœdâ™9ÉÄ)21r’‰Sd⑉•?’‰Odbä$ŸÈÄÈI&>‘‰‘Ó7è'2q¾ï“8‡Zdbä$§ÈÄÈI&N‘‰•/’‰Kdâú“8†Zdbä$·ÈÄÊÉÄ#2qý|ŸÄ9Ô"#'™8D&V>H&‘‰•’‰Gdbå—dâ™9ÉÄ+2qý|ŸÄ9Ô"#'™8D&FN2qˆLŒœdâ™Xù$™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰LŒœ¾A?‘‰ëçû$Ρ™9ÉÄ)21r’‰Kdbå‹d♸œÄ1Ô"#'™¸E&V~H&‘‰«}ŸÄ9Ô"#'™8D&V>H&‘‰•’‰Wdbå—dâ™9ÉÄ+2qµï“8‡Zdbä$‡ÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰‘Ã7èó#2qµï“8‡Zdbä$§ÈÄÊÉÄ%21r’‰KdâêpÇP‹LŒœdâ™Xù!™xD&®þ}çP‹LŒœdâ™Xù ™xD&V~I&^‘‰‘“L¼"#'™xE&®þ}çP‹LŒœdâ™9ÉÄ)2±òI2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÉÄ'2ñ7ÿ»Ç1Ô"+Ÿ$§ÈÄÈI&.‘‰•/’‰Kdbä$—ÈÄ5à$Ž¡™Xù!™xD&FN2ñˆL\ãû$Ρ™9ÉÄ!2±òA2ñŠL¬ü’L¼"#'™xE&FN2ñ‰L\ãû$Ρ™9ÉÄ!2±òI2qŠLŒœdâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r‰'ø|þñ÷8†Zdbå“dâ™Xù"™¸D&FN2q‰LŒœd♸&œÄ5ÔGdbå‡dâ™9ÉÄ#2qÍï“8‡Zdbä$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™Xù#™øD&®ù}çP‹LŒœdâ™Xù$™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™ø›ÿ³ÇÿµÈÄÈ; µÈÄÊ'ÉÄ%2±òE2q‰LŒœdâ™9ÉÄ%2q-8‰c¨E&FN2ñˆLŒœd♸Ö÷IœC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"×ú>‰s¨E&V>I&N‘‰‘“Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&F2ñÏIüg¨××IüïP‹LŒ|ÐP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸6œÄ1Ô"#'™xD&FN2ñŠL\ûû$Ρ™Xù ™8D&FN2ñŠL¬ü’L¼"#'™øD&VþH&>‘‰kŸÄ1ÔSdbå“dâ™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odâoþïÿ3Ô"#ï4Ô"#Ÿ4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&®'q µÈÄÈI&‘‰•_’‰Wdâ:ß'q õ™Xù ™8D&FN2ñŠL¬ü’L¼"#'™øD&VþH&>‘‰¿ù_ôC-21r’‰Sdbä$§ÈÄÈI&N‘‰‘“L\"+$ŸÈÄÈA&þ;Á‡ú|þJüÏP‹LŒ|ÐP‹LŒ|ÑP‹L¬|‘L\"#'™¸D&FN2q‰LŒœd♸.œÄ1Ô"#'™xD&V~I&^‘‰¿ùß÷Î1Ô"#'™8D&FN2ñŠL¬ü’L¼"#'™øD&VþH&>‘‰ë~ŸÄ9Ô"#'™8E&FN2qŠLŒœdâ™Xù"™¸D&VþH&>‘‰¿ùŸŸ(r¨E&FÞi¨E&F>i¨E&F¾i¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‹L\Nâj‘‰‘“L<"+¿$¯ÈÄõ¾Oâj‘‰‘“L"+Ÿ$¯ÈÄÊ/ÉÄ+21r’‰Odbåd♸Þ÷IœC-21r’‰Sdbä$§ÈÄÈI&.‘‰•/’‰Kdbåd⟠þ3ÔïûáDµÈÄÈ µÈÄÈ µÈÄÈ µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÊ7ÉÄ-2qÿÀIC-21r’‰Gdbå—d♸¾Oâj‘‰‘“Lœ"+Ÿ$¯ÈÄÊ/ÉÄ+2±òG2ñ‰LŒœd♸¾Oâj‘‰‘“Lœ"#'™8E&FN2q‰L¬|‘L\"ó?{œC-21òNC-21òIC-21òMC-21òKC-2±òE2q‰LŒœdâ™9ÉÄ-2±òM2q‹LÜ Nâj‘‰‘“L<"+¿$¯ÈÄݾOâj‘‰‘“Lœ"+Ÿ$¯ÈÄÊ/ÉÄ'2±òG2ñ‰LŒœd♸Û÷IœC-21r’‰Sdbä$§ÈÄÊÉÄ%21r’‰Kdâoþgs¨E&F>h¨E&F¾h¨E&F~h¨E&FN2±‰L¬|‘L\"#'™¸D&V¾I&n‘‰‘“LÜ"w‡“8†Zdbä$¯ÈÄÊ/ÉÄ+2q÷ï“8‡Zdbä$§ÈÄÊ'ÉÄ+2±òG2ñ‰LŒœdâ™9ÉÄ'2q÷ï“8‡Zdbä$§ÈÄÈI&.‘‰•/’‰Kdbä$—ÈÄÝ¿Oâj‘‰‘Oj‘‰‘oj‘‰‘_j‘‰•7’‰Mdbå‹dâ™9ÉÄ-2±òM2q‹LŒœd♸œÄ1Ô"+¿$¯ÈÄÈI&^‘‰{|ŸÄ9Ô"#'™8E&V>I&>‘‰•?’‰Odbä$ŸÈÄÈA&{|ŸÄ9Ô"#'™8E&V¾H&.‘‰‘“L\"#'™¸D&îñ}çP‹LŒ|ÑP‹LŒüÐP‹LŒœdb™Xy#™ØD&V¾H&.‘‰•o’‰[dbä$·ÈÄÈI&n‘‰{ÂI\C}E&V~I&^‘‰‘“L¼"÷ü>‰s¨E&FN2qŠL¬|’L|"+$ŸÈÄÈI&>‘‰¿ùß=Ž¡™Xù$™8E&FN2q‰L¬|‘L\"#'™¸D&FN2q‰LÜóû$Ρ™ù¦¡™ù¥¡™Xy#™ØD&FN2±‰L¬|‘LÜ"+ß$·ÈÄÈI&n‘‰‘“LÜ"÷‚“8†Zdbä$¯ÈÄÈI&^‘‰{}ŸÄ9Ô"#'™8E&V>I&>‘‰•?’‰Odbä ÿLðŸ¡þj?†Zdbå“dâ™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%2q¯ï“8‡Zdb䇆Zdbä$›ÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈĽá$Ž¡™9ÉÄ+21r’‰OdâÞß'qµÈÄÊ'ÉÄ)21r’‰Odbådâ™ù¦¡™ø›ÿÝãj‘‰•O’‰Kdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈĽ¿Oâj‘‰‘_j‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"÷“8†Zdbä$¯ÈÄÊÉÄ'2qŸï“8†zŠL¬|’Lœ"#'™øD&VþH&>‘‰‘j‘‰¿ùß=Ž¡™Xù"™¸D&FN2q‰LŒœdâ™9ÉÄ%21r’‰[dâ>ß'qµÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"÷…“8†Zdbä$¯ÈÄÊÉÄ'2ñ7ÿûÞ9†Zdbä$§ÈÄÈI&>‘‰•?’‰Odbä—†Zdâoþwc¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L¬|“LÜ"÷ý>‰s¨E&VÞH&6‘‰‘“Ll"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœd♸œÄ1Ô"#'™xE&VþH&>‘‰û}ŸÄ9Ô"#'™8E&V¾H&>‘‰•?’‰Odbä†Zdâoþwc¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‹L¬|“LÜ"÷û>‰c¨›ÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰•’‰Gdâù“8†Zdbä$¯ÈÄÊÉÄ'2ñü|ŸÄ9Ô"#'™¸D&V¾H&>‘‰•?’‰Odâoþ÷ÙF µÈÄÈ7 µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&n‘‰•o’‰[dâoþgs¨E&FN2±‰LŒœdb™9ÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰Gdbå‡dâ™xœÄ1Ô"#'™xE&VþH&>‘‰§}ŸÄ9Ô"#'™¸D&V¾H&>‘‰•?‰&øÏP7x¶C-21òCC-2±òE2q‰LŒœdâ™9ÉÄ%2±òM2q‹LŒœdâ™ø›ÿÙãj‘‰‘“Ll"#'™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹L¬üL<"#'™xD&ž'q µÈÄÈI&>‘‰•?’‰Odâéß'qµÈÄÈI&.‘‰•/’‰Odâoþ÷$Ž¡™y§¡™ù¥¡™Xù"™¸D&FN2q‰LŒœdâ™Xù&™¸E&FN2q‹L<ýû$Ρ™9ÉÄ&21r’‰Mdbä$›ÈÄÊ;ÉÄ.2±òM2q‹LŒœdâ™Xù!™xD&FN2ñˆL<Nâj‘‰•?’‰Odbä$ŸÈÄ3¾Oâj‘‰‘“L\"+_ ÿ¾dþw¨œÄ1Ô"#4Ô"#'™ØD&V¾H&.‘‰‘“L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"Ïø>‰s¨E&FN2±‰LŒœdb™9ÉÄ.2±òN2±‹L¬|“LÜ"+?$ÈÄÈI&‘‰‘“L<"Ï„“¸†ú‰L¬ü‘L|"#'™øD&žù}çP‹LŒœdâ™XùZ4Ô"Ï„“8†Zdb䓆Zdbådb™Xù"™¸D&FN2q‹L¬|“LÜ"#'™¸E&FN2q‹L<óû$Ρ™9ÉÄ&21r’‰Mdbådb™9ÉÄ.2±òM2ñˆL¬üL<"#'™xD&FN2ñˆL< Nâj‘‰‘“L|"#'™øD&žõ}çP‹LŒœdâ™XùÚ4Ô"Ï‚“8†Zdbä$›ÈÄÊÉÄ&2±òE2q‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™xÖ÷IœC-21r’‰Mdbä$»ÈÄÊ;ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbä$Èijá$Ž¡™9ÉÄ'21r‰ëGdâÙß'qµÈÄÊÉÄ%21òCC-2ñl8‰c¨E&FN2±‰L¬¼‘Ll"+_$·ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰gŸÄ9Ô"#'™ØD&VÞI&v‘‰‘“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆL<Nâj‘‰‘“L|"ó?{œC-2±òI2q‰L¬|‘L\"#¿4Ô"Ï“8†Zdbä$›ÈÄÊÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dbä$ÈÄs¾Oâj‘‰‘“Lì"+ï$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&ž 'q µÈÄÈI&>‘‰¿ùŸ=Ρ™Xù"™¸D&FN2q‰LŒüÑP‹L<Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰•’‰Gdâ¹ß'qµÈÄÊ;ÉÄ.21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L¼"σ“8†Zdbä$ŸÈÄßüÏçP‹L¬|‘L\"#'™¸D&V¾h¨E&ž'q µÈÄÈI&6‘‰•7’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$ÈÄÊÉÄ#2ñ¼ï“8†º‹L¬¼“Lì"#'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™Xù%™xE&Þ8‰c¨E&FN2ñ‰LüÍÿìqµÈÄÊÉÄ%21r’‰[dbå»ÑP‹L¼?pÇP‹L¬¼‘Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2ñˆL¬üL<"ó?{œC-21r’‰]dbä$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L¼"+¿$¯ÈÄÛà$Ž¡™9ÉÄ'2ñ7ÿ³Ç9Ô"+_$—ÈÄÈI&n‘‰•ïNC-2ñ68‰k¨›ÈÄÊÉÄ&21r’‰Mdbå›dâ™9ÉÄ-21r’‰[dbå‡dâ™9ÉÄ#2ñ7ÿ³Ç9Ô"#'™ØE&FN2±‹LŒœdb™9ÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠL¼Nâj‘‰‘ƒLüç3á†ú÷ý,j‘‰•/’‰Kdbä$·ÈÄÊ÷ ¡™ø›ÿ=‰c¨E&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™Xù!™xD&FN2ñˆL¼ýû$Ρ™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠL¼Nâj‘‰¿ùŸg9Ô"#ß4Ô"+_$—ÈÄÈI&n‘‰•o’‰Mdâoþ÷$Ž¡™9ÉÄ&21r’‰]dbå›dâ™9ÉÄ-2±òC2ñˆLŒœdâ™9ÉÄ#2ñŽï“8‡Zdbä$»ÈÄÈI&v‘‰‘“L"+$‡ÈÄÊÉÄ#2±òK2ñŠLŒœdâ™9ÉÄ+2ñN8‰‡úïKæ‡z~?ÛÈ¡™ù¡¡™Xù"™¸D&FN2q‹L¬|“Ll"ï„“8†Zdbä$›ÈÄÊ;ÉÄ.2±òM2q‹LŒœdâ™Xù!™xD&FN2ñˆLŒœdâ™xç÷IœC-21r’‰]dbä$»ÈÄÊÉÄ!21r’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™xœÄ1Ô"#ï4Ô"#¿4Ô"+_$—ÈÄÈI&n‘‰•o’‰Mdâ]pÇP‹LŒœdb™Xy'™ØE&V¾I&n‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"ïú>‰s¨E&FN2±‹LŒœdâ™Xù ™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™x7œÄ1Ô"#4Ô"#'™ØD&V¾H&.‘‰•o’‰[dbä$›ÈÄ»á$Ž¡™9ÉÄ.2±òN2±‹L¬|“L<"+?$ÈÄÈI&‘‰‘“L<"#'™xD&Þý}çP‹LŒœdb™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñ8‰c¨E&F>i¨E&VÞH&6‘‰•/’‰[dbå›dâ™9ÉÄ&2ñ8‰c¨E&FN2±‹L¬¼“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&FN2ñŠL¼çû$Ρ™9ÉÄ!2±òA2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdâ½pÇP‹LŒ|ÑP‹L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰‘“Ll"ï…“8†Zdbä$»ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Gdbå—dâ™xï÷IœC-2±òA2qˆLŒœdâ™9ÉÄ!21r’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$ŸÈÄûà$Ž¡™ù¦¡™Xy#™ØD&V¾I&n‘‰‘“LÜ"+?$›ÈÄûà$Ž¡™9ÉÄ.2±òN2±‹L¬üL<"#'™xD&FN2ñˆLŒœdâ™Xù%™xE&Þ÷}ÇP‘‰•’‰Cdbä$‡ÈÄÈI&‘‰‘“L"+¿$¯ÈÄÈI&^‘‰‘“L¼"+$ŸÈÄ÷'q µÈÄÈ µÈÄÊÉÄ&2±òM2q‹LŒœdâ™Xù!™ØD&¾8‰c¨E&VÞI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xE&V~I&^‘‰¿ùŸ=Ρ™9ÉÄ!21r’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&>‘‰•?’‰OdâkpÇP‹LŒüÒP‹L¬¼‘Ll"+ß$·ÈÄÈI&‘‰•’‰Mdâkp×Pw‘‰•w’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÊ/ÉÄ+21r’‰Wdâoþgs¨E&FN2qˆLŒœdâ™9ÉÄ!21r’‰Sdbå—dâ™9ÉÄ+2±òG2ñ‰LŒœdâ™ø:œÄ1Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$ÈÄÊÉÄ&2ñ7ÿ{ÇP‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ+2±òK2ñŠLŒœdâ™øú÷IœC-21r’‰Cdbä$‡ÈÄÈI&‘‰•O’‰Sdbå—dâ™9ÉÄ'2±òG2ñ‰LŒœdâ™øœÄ1Ô"+o$›ÈÄÈI&6‘‰•o’‰[dbä$ÈÄÊÉÄ.2ñ7ÿ{ÇP‹LŒœdb™9ÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™øÆ÷IœC-21r’‰Cdbä$‡ÈÄÈI&N‘‰•O’‰Sdbå—dâ™Xù#™øD&FN2ñ‰LŒœdâ™ø&œÄ5ÔMdbådb™9ÉÄ&2±òM2q‹LŒœdâ™Xù!™ØE&¾ 'q µÈÄÈI&v‘‰•’‰Cdbå‡dâ™9ÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ+2ñÍï“8‡Zdbä$‡ÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÊ/ÉÄ'2±òG2ñ‰LŒœdâ™9ÉÄ'2ñ-8‰c¨E&FN2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üLì"ß‚“8†Zdbä$‡ÈÄÊÉÄ!2±òC2ñˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™øÖ÷IœC-21r’‰Cdbä$§ÈÄÊ'ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä$ŸÈÄ·á$Ž¡™9ÉÄ&21r’‰]dbå›dâ™Xù!™xD&FN2±‹L|Nâj‘‰‘“L"+$‡ÈÄÊÉÄ+2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰WdâÛß'qµÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰‘“L|"ß“8†Zdbä$›ÈÄÊ;ÉÄ.2±òM2ñˆL¬üL<"#'™ØE&¾'q µÈÄÈI&‘‰•’‰Cdbå—dâ™9ÉÄ+21r’‰Wdbä$¯ÈÄÈI&>‘‰ï|ŸÄ9Ô"#'™8E&V>I&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#'™øD&FN2ñ‰L|Nâj‘‰‘“Ll"+ï$»ÈÄÊÉÄ#21r’‰Gdbä$»ÈÄwá$Ž¡™9ÉÄ!2±òA2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™Xù#™øD&¾û}çP‹L¬|’Lœ"#'™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÈÄû#2ñ=8‰c¨E&FN2±‰L¬¼“Lì"+?$ÈÄÈI&‘‰•_’‰]dâ{pÇP‹LŒœdâ™Xù ™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñ‰L¬ü‘L|"ßû>‰c¨§ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÈI&N‘‰•?’‰Odbä$ŸÈÄÈI&>‘‰¿ù¿{üÏP³Lüôß“8†šebæ$ËÄÈ;ÉÄÎ21òC2ñ°LÌœdâe™ù%™ØY&Vþ÷$Ž¡f™ù ™8X&fN2q°LŒü’L¼,3'™xY&fN2ñ²LÌœdâc™ù#™øX&Vþgs¨Y&fN2q²LÌœdâd™˜9ÉÄÉ21s’‰“ebädâc™˜9ÉÄÇ21s‰ÿL🡮üß=þg¨» uƒ“8†úÈP·ïg9ÔO†ú7ï$û’¡nß'qõ”¡nð¾.†ºÉPÿæ—db¿2Ô Nâêñ#CÝàÙF õ–¡®œdâ¸2Ôíû$Ρ^2Ôíû$Ρ>2Ôíû$Ρ~2Ôíû·‹ê.C]9ÉÄ7e¨Û÷IœCÝe¨Û÷Éê)CÝ>%þg¨· uû:‰ÿê+C]9ÉÄõ#CݾOâê#CÝ>Oâ†úÉP·Ï“øŸ¡n2Ô•wê!CÝá$Ž¡¾2ÔýûÙF uÿ‘¡þÍ;Éľe¨û÷IœC½d¨;¼¯‹¡î2Ô¿ù%™ØŸ u‡“8†ºÉPwx¶C}d¨+'™8ž uÿ>‰s¨· uÿ>‰s¨¯ uÿ>‰c¨ß uÿþí"‡zÈPWN2ñ-êþ}çPêþýp"‡zÉP÷Ï_‰ÿê#CÝ¿Nâ‡úÉPÿæ‹dâj2Ôýû$Ρ¾2Ôýó$Ž¡þó+ñŸ¡îŸ'ñ?CÝe¨+4ÔS†zÀICýd¨Ç÷³ê&C]9ÉÄ~d¨Ç÷IœC½e¨¼¯‹¡2Ô¿ù%™8~d¨œÄ1Ô]†zÀ³ê+C]9ÉÄù#C=¾Oâê#C=¾Oâê'C=¾Oâê&C=¾»È¡ž2Ô•“L|[†z|ŸÄ9ÔS†z|?œÈ¡Þ2ÔãóWâ†úÊP¯“øŸ¡^?2Ô¿ù"™¸º õø>‰s¨Ÿ õø<‰ÿê&C=>Oâ†zÈPW>i¨— õ„“¸†ºÿÈPÏïg9Ô]†ºr’‰ýÊPÏï“8‡úÈPOx_C=e¨óK2q4ê 'q õ¡žðl#†úÉPÿæ“dâl2Ôóû$Ρ¾2Ôóû$Ž¡~?2Ôóû$Ρî2Ôóû·‹ê%C]9ÉÄwd¨ç÷IœC½d¨ç÷Éê#C=?%þg¨Ÿ õü:‰ÿê&C]9ÉÄ5d¨ç÷I\C}~d¨ççIüÏPwêùyÿ3ÔS†ºòEC½e¨œÄ1ÔM†z}?ÛÈ¡2Ô•“LìO†z}ŸÄ9ÔW†zÁûºê%Cý›_’‰£ËP/8‰c¨§ õ‚g5ÔóG†ú7Ÿ$g—¡^ß'qõ“¡^ß'qu“¡^ß'qõ¡^ß¿]äPoêÊI&¾+C½¾Oâê-C½¾NäP_êõù+qõú‘¡^_'ñ¿CÝe¨+'™¸¦ õú>‰s¨› õú<‰ÿê!C½>Oâ†zÉPW¾i¨ õ†“8†ºËPïïg9ÔS†ºr’‰ãG†zŸÄ9ÔO†zÃûºê-C]9ÉÄ1d¨7œÄ1ÔK†zóê&Cý›O’‰sÈPïï“8†úýÈPïï“8‡ºËPïï“8‡zÊPïïß.r¨ uå$ß“¡Þß'qõ‘¡Þß'r¨Ÿ õþü•øŸ¡n2Ôûë$þw¨‡ uå$×’¡Þß'qu—¡ÞŸ'ñ?C=e¨÷çIüÏPoêÊ õ•¡>pÇPêóýl#‡zÉPÿæƒdâh2Ôçû$Ž¡¾?2ÔÞ×ÅPêÊI&Ž)C}à$Ž¡Þ2ÔžmÄPwêß|’LœS†ú|ŸÄ9ÔM†ú|ŸÄ9ÔC†ú|ŸÄ9ÔK†ú|ÿv‘C}e¨+™x~~d¨Ï÷IœC}e¨Ï÷Éêõ#C}>%þg¨» õù:‰ÿê)C]9Éĵe¨Ï÷IœC=d¨ÏçIüÏP/êóyÿ3ÔG†ºòKCýd¨/œÄ1ÔS†ú~?ÛÈ¡Þ2Ô¿ù ™8º õý>‰s¨› õ…÷u1ÔW†ºr’‰cÉP_8‰c¨ õ…g1ÔC†ú7Ÿ$ç’¡¾ß'qu—¡¾ß'qõ”¡¾ß'qõ–¡¾ß¿]äP?ê_böóCCÝd¨ï÷IœCýd¨ï÷Éê&C}?%þg¨‡ õý:‰ÿê%C]9ÉÄud¨ï÷IœC=e¨ïçIüÏPoêûyÿ3ÔW†ºr’‰íG†úÁIC½d¨ß÷³ê#Cý›’‰cÈP¿ï“8‡ºËP?x_Cýd¨óG2qlê'q õ•¡~ðl#†zÊPÿæ“dâÜ2Ôïû$Ρ2Ôïû$Ρ^2Ôïû$Ρ>2Ôïû·‹ê?üg¨…ÚO£¡î2Ôïû$Ž¡^?2ÔïûáDu—¡~Ÿ¿ÿ3ÔS†ú}Äÿõ–¡®œdâº2Ôïû$Ρ^2Ôïó$þg¨ õû<‰ÿê'Cý›7’‰Mdbû“8†Zdbä$»ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™Xù#™8D&¶8‰c¨E&V>I&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#4Ô"óóÓi¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰LŒœdâ™Ø~¾Oâj‘‰‘j‘‰‘“Ll"+o$›ÈÄÖà$Ž¡™9ÉÄ.2±òA2qˆL¬ü’L¼"#'™øD&VþH&‘‰­ÁI\C=E&V>I&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"ó¿‡s µÈÄÈ µÈÄÊÉÄ%21r’‰Kdbä$—ÈÄÈI&.‘‰‘“LÜ"[û>‰s¨E&F~i¨E&VÞH&6‘‰‘“Ll"[‡“8†Zdbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™Xù#™8D&þæOâj‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#™øg‚ÿ uÿþí"‡Zdb䓆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$—ÈÄÊ7ÉÄ-2±õï“8‡Zdbä$›ÈÄÊÉÄ&21r’‰MdbpÇP‹L¬|L"#'™8D&V~I&^‘‰‘“L|"+$§ÈÄßüïIC-21r’‰Sdbä$—ÈÄÊÉÄ'21r’‰Odâoþgs¨E&FÞi¨E&F¾h¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‹L¬|“LÜ"Ûø>‰s¨E&VÞH&6‘‰‘“Ll"#'™ØD&¶ 'q õ™Xù ™8D&FN2qˆL¬ü’L¼"#'™øD&VþH&N‘‰mÂIC-21r’‰Sdbå‹dâ™Xù#™øD&F2ñï ·‡z~ŸÄ9Ô"#4Ô"#ß4Ô"+_$—ÈÄÈI&.‘‰‘“L\"+ß$·ÈÄÈI&n‘‰m~ŸÄ1ÔMdbådb™9ÉÄ&21r’‰Mdb[pÇP‹LŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™Xù#™8E&¶'q µÈÄÈI&.‘‰•/’‰Kdbådâ™ø›ÿçÅq µÈÄÈ; µÈÄÈ' µÈÄÈ µÈÄÊÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-21r’‰[dâoþwc¨E&FN2±‰LŒœdb™9ÉÄ&2±m8‰c¨E&FN2qˆLŒœdâ™Xù%™xE&VþH&>‘‰‘“Lœ"Û†“8†Zdbä$—ÈÄÊÉÄ%2±òG_…~D&þæÿyq\C-21òAC-21òEC-21òKC-2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LŒœdâ™ø›ÿÝãj‘‰‘“Ll"#'™ØD&FN2±‰LlNâj‘‰‘“L"+Ÿ$§ÈÄÊ/ÉÄ'2±òG2ñ‰LŒœdâ™ØœÄ1Ô"#'™¸D&V¾H&.‘‰¿ù_ôC-21òNC-21òIC-21òMC-21r’‰Mdbå‹dâ™9ÉÄ-2±òM2q‹LŒœdâ™9ÉÄ-2ñ7ÿ»Ç1Ô"#'™ØD&FN2±‰LŒœdb™Ø.œÄ1Ô"#'™8D&V>I&N‘‰•?’‰Odbä$ŸÈÄÈI&N‘‰íÂIC-21r’‰Kdbå‹dâ™Øî÷IœC-21òAC-21òEC-21òCC-2±òF2±‰L¬|‘L\"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&þæ÷8†Zdbä$›ÈÄÈI&6‘‰‘“Lì"Ûƒ“8†Zdbä$‡ÈÄÊ'ÉÄ)2±òG2ñ‰LŒœdâ™ø›ï’‰Sdbå“dâ™9ÉÄ%2±òE2q‰Llïû$Ρ™ù¤¡™ù¦¡™9ÉÄ&2±òF2±‰L¬|‘LÜ"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&¶÷}çP‹LŒœdb™9ÉÄ&2±òN2±‹Lì?pÇP‹LŒœdâ™Xù$™8E&VþH&>‘‰‘ƒLü3Áÿõo¾H&N‘‰•O’‰Sdbå‹dâ™9ÉÄ%2±ÿ|ŸÄ9Ô"#_4Ô"#?4Ô"#'™ØD&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰‘“LÜ"#'™¸E&öŸï“8‡Zdbä$›ÈÄÈI&v‘‰•w’‰]dbopÇP‹LŒœdâ™Xù$™8E&VþH&>‘‰‘/j‘‰¿ùþ!™8E&V>I&.‘‰•/’‰Kdbä$—ÈÄÞ¾Oâj‘‰‘oj‘‰‘_j‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰‘Ó7è#2±·ï“8‡Zdbä$›ÈÄÊ;ÉÄ.21r’‰]dbïpÇP‹LŒœdâ™Xù$™8E&VþH&>‘‰‘oj‘‰¿ùþ!™8E&V¾H&.‘‰‘“L\"#'™¸D&öþ}çP‹LŒüÐP‹LŒœdb™Xy#™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2q‹LŒœdâ™Xù¡oÐGdbïß'qµÈÄÈI&v‘‰•w’‰]dbä$»ÈÄ>à$Ž¡™Xù$™8E&FN2qŠL¬ü‘L|"#?4Ô"óýC2q‰L¬|‘L\"#'™¸D&FN2q‹Lìãû$Ρ™ù¥¡™Xy#™ØD&FN2±‰LŒœdb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ#2±òCß ÈÄ>¾Oâj‘‰•w’‰]dbä$»ÈÄÈI&v‘‰}ÂI\C=E&V>I&N‘‰‘“Lœ"+$ŸÈÄÈ/ µÈÄß|ÿL\"+_$—ÈÄÈI&.‘‰•o’‰[dbŸß'qµÈÄÈI&6‘‰•7’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÈI&n‘‰•’‰Gdbäô úˆLìóû$Ž¡î"+ï$»ÈÄÈI&v‘‰‘“Lì"û‚“8†Zdbä$§ÈÄÈI&N‘‰•?’‰Odbä†Zdâo¾H&.‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-2±¯ï“8‡Zdbådb™9ÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$ÈÄÊÉÄ#21rú}D&þæ÷8†Zdbä$»ÈÄÈI&v‘‰‘“Lì"û†“8†Zdbä$§ÈÄÈI&.‘‰•?’‰Odâoþ÷}] µÈÄÈI&.‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ-2±ïï“8þãšÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÈI&6‘‰•o’‰[dbä$·ÈÄÊÉÄ#21r’‰Gdbäô úˆLüÍÿîq µÈÄÈI&v‘‰‘“Lì"#'™ØE&ö'q µÈÄÈI&N‘‰•/’‰Kdbåd⟠þ3ÔÞ×ÅP‹LŒœdâ™Xù"™¸D&FN2q‹L¬|“LÜ"ó¿è#†Zdbä$›ÈÄÈI&6‘‰‘“Ll"#'™ØE&V¾I&n‘‰‘“L<"+?$ÈÄÈI&‘‰‘Ó7è#2ñ7ÿ»Ç1Ô"#'™ØE&FN2±‹LŒœdb™Ø/œÄ1Ô"#'™8E&V¾H&.‘‰¿ùß÷Î1Ô"#ï4Ô"#'™¸D&V¾H&.‘‰‘“LÜ"+ß$·ÈÄ~¿Oâj‘‰‘“Ll"#'™ØD&FN2±‰L¬¼“Lì"+ß$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈéô™ø›ÿÝãj‘‰‘“Lì"#'™ØE&FN2qˆLìNâj‘‰‘“Lœ"+_$—ÈÄþ¾Oâj‘‰‘j‘‰•7’‰Kdbå‹dâ™9ÉÄ-2±òM2q‹Lìïû$Ρ™9ÉÄ&21r’‰Mdbä$»ÈÄÊ;ÉÄ.2±òM2ñˆL¬üL<"#'™xD&FN2ñˆLŒœ¾A‘‰ý}ŸÄ9Ô"#'™ØE&FN2±‹L¬|L"ÇœÄ1Ô"#'™8E&V¾H&.‘‰ãçû$Ρ™9ÉÄ&2±òF2q‰L¬|‘L\"+ß$·ÈÄÈI&n‘‰ãçû$Ρ™9ÉÄ&21r’‰Mdbä$»ÈÄÊ;ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰Gdbäô úˆL?ß'qµÈÄÈI&v‘‰‘“L"+$‡ÈÄÑà$Ž¡™9ÉÄ)2±òE2q‰Líû$Ρ™9ÉÄ&2±òF2q‰L¬|‘LÜ"+ß$·ÈÄÈI&n‘‰£}ŸÄ9Ô"#'™ØD&FN2±‰L¬¼“Lì"#'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñˆLŒœ¾A_‘‰£}ŸÄ9Ô"#'™ØE&V>H&‘‰‘“L"G‡“8†Zdbä$—ÈÄÊÉÄ%2qôï“8‡Zdbä$›ÈÄÊÉÄ%2±òM2q‹LŒœdâ™9ÉÄ-2qôï“8‡Zdbä$›ÈÄÈI&v‘‰•w’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰•_ú}E&Žþ}çP‹LŒœdâ™Xù ™8D&FN2qˆLNâj‘‰•/’‰Kdbä$—ÈÄ1¾Oâj‘‰‘“Ll"+o$·ÈÄÊ7ÉÄ-21r’‰[dbä$ÈÄ1¾Oâj‘‰‘“Ll"+ï$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xE&V~éô™8Æ÷IœC-2±òA2qˆLŒœdâ™9ÉÄ!2qL8‰k¨—ÈÄÊÉÄ%21r’‰Kdâ˜ß'qµÈÄÈI&6‘‰•7’‰[dbå›dâ™9ÉÄ-2±òC2ñˆLóû$Ρ™9ÉÄ.2±òN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#2±òK2ñŠLŒœ¾A_‘‰c~ŸÄ1ÔCdbåƒdâ™9ÉÄ!21r’‰CdâXpÇP‹LŒœdâ™9ÉÄ%2q¬ï“8‡Zdbä$›ÈÄÊÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&Žõ}çP‹L¬¼“Lì"#'™ØE&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™Xù%™xE&FNß ¯ÈÄßüïÇP‹LŒœdâ™9ÉÄ!21r’‰CdâØpÇP‹LŒœdâ™9ÉÄ-2qìï“8‡Zdbådb™9ÉÄ-2±òM2q‹LŒœdâ™Xù!™xD&Žý}Ç\™Xy'™ØE&FN2±‹LŒœdb™9ÉÄ.2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠLŒœ¾A_‘‰¿ùß=Ž¡™9ÉÄ!21r’‰Cdbä$‡ÈÄqà$Ž¡™9ÉÄ%2±òM2q‹Lçû$Ž¡n"+o$›ÈÄÈI&n‘‰•o’‰[dbä$ÈÄÊÉÄ#2ñ7ÿ‹>b¨E&FN2±‹LŒœdb™9ÉÄ.21r’‰Cdbå‡dâ™9ÉÄ+2±òK2ñŠLŒœdâ™9}ƒ¾"ó¿{C-21r’‰Cdbä$‡ÈÄÈI&‘‰ãÂIC-21r’‰Kdbå›dâ™ø›ÿ}ïC-21r’‰Mdbä$·ÈÄÊ7ÉÄ-21r’‰Gdbå‡dâ™8î÷IœC-21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™9}ƒ¾"ó¿{C-21r’‰Cdbä$‡ÈÄÈI&N‘‰ãÁIC-21r’‰Kdbå›dâ™8Þ÷IœC-21r’‰Mdbådâ™Xù&™¸E&FN2ñˆL¬üL<"Çû>‰s¨E&FN2±‹LŒœdb™9ÉÄ!2±òA2qˆL¬üL¼"+¿$¯ÈÄÈI&^‘‰‘“L¼"#§oÐWdâxß'qµÈÄÈI&‘‰‘“L"+Ÿ$§ÈÄù'q µÈÄÈI&.‘‰•o’‰[dâüù>‰s¨E&FN2±‹L¬¼“LÜ"+ß$·ÈÄÊÉÄ#21r’‰Gdâüù>‰s¨E&FN2±‹LŒœdb™9ÉÄ!2±òA2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™9}ƒ¾"çÏ÷IœC-21r’‰Cdbä$§ÈÄÊ'ÉÄ)2q68‰c¨E&FN2q‰L¬|“LÜ"gû>‰s¨E&FN2±‹L¬¼“LÜ"+ß$ÈÄÊÉÄ#21r’‰Gdâlß'qµÈÄÈI&v‘‰‘“Lì"+$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰‘“L¼"#§oÐOdâlß'qµÈÄÈI&‘‰•O’‰Sdbä$§ÈÄÙá$Ž¡™9ÉÄ-2±òM2q‹Lœýû$Ρ™9ÉÄ.2±òN2q‹L¬üL<"#'™xD&FN2ñˆLœýû$Ρ™9ÉÄ.21r’‰Cdbåƒdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbå¾A?‘‰³ŸÄ9Ô"#'™8E&V>I&N‘‰‘“Lœ"瀓8†Zdbå›dâ™9ÉÄ-2qŽï“8‡Zdbä$»ÈÄÊ;ÉÄ#2±òC2ñˆLŒœdâ™9ÉÄ+2qŽï“8‡Zdbä$»ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$¯ÈÄÈI&>‘‰•?úýD&Îñ}çP‹L¬|’Lœ"#'™8E&FN2qŠLœNâê-2±òM2q‹LŒœdâ™8ç÷IœC-21r’‰]dbådâ™Xù!™xD&FN2ñˆL¬ü’L¼"çü>‰s¨E&FN2qˆL¬|L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠL¬ü‘L|"#§oÐOdâœß'q õ™Xù$™8E&FN2qŠLŒœdâ™8œÄ1Ô"#'™¸E&FN2q‹Lœëû$Ρ™9ÉÄ.2±òN2ñˆL¬üL<"#'™xE&V~I&^‘‰s}ŸÄ9Ô"+$‡ÈÄÈI&‘‰‘“L"#'™8D&V~I&^‘‰‘“L¼"#'™øD&VþH&>‘‰‘Ó7è'2ñ7ÿ»Ç1Ô"#'™8E&FN2qŠLŒœdâ™87œÄ1Ô"#'™¸E&FN2ñˆLœûû$Ρ™Xy'™ØE&FN2ñˆL¬üL<"#'™xE&V~I&^‘‰sŸÄñ7D&V>H&‘‰‘“L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&VþH&>‘‰‘“L|"#§oÐOdâoþwc¨E&FN2qŠLŒœdâ™9ÉÄ)2q8‰c¨E&FN2q‹L¬üL<"çù>‰c¨»ÈÄÊ;ÉÄ.21r’‰Gdbå‡dâ™9ÉÄ+2±òK2ñŠLüÍÿ¢j‘‰‘“L"#'™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñ‰L¬ü‘L|"#'™øD&FNß ŸÈÄßüïÇP‹LŒœdâ™9ÉÄ)21r’‰Sdâ¼pÇP‹LŒœdâ™Xù!™xD&þæß;ÇP‹LŒœdb™9ÉÄ#2±òC2ñˆLŒœdâ™Xù%™xE&Îû}çP‹LŒœdâ™9ÉÄ!21r’‰Cdbå“dâ™Xù%™xE&VþH&>‘‰‘“L|"#'™øD&FNß ŸÈÄßüïÇP‹LŒœdâ™9ÉÄ)21r’‰Kdâ|pÇP‹LŒœdâ™Xù!™xD&Î÷}çP‹LŒœdb™Xù ™xD&V~H&‘‰‘“L¼"+¿$¯ÈÄù¾Oâj‘‰‘“L"#'™8D&FN2qŠL¬|’Lœ"+¿$ŸÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈéô™8ß÷IœC-21r’‰Sdbä$§ÈÄÊÉÄ%2qýÀIC-21r’‰[dbå‡d♸~¾Oâj‘‰‘“L"+$ÈÄÊÉÄ#2±òK2ñŠLŒœd♸~¾Oâj‘‰‘“L"#'™8D&FN2qŠL¬|’Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&FNß ŸÈÄõó}çP‹LŒœdâ™9ÉÄ%2±òE2q‰L\ Nâj‘‰‘“LÜ"+?$ÈÄÕ¾Oâj‘‰‘“L"+$ÈÄÊÉÄ+2±òK2ñŠLŒœd♸Ú÷IœC-21r’‰Cdbä$‡ÈÄÊ'ÉÄ)21r’‰Sdbådâ™9ÉÄ'21r’‰Odbä$ŸÈÄÈáôý™¸Ú÷IœC-21r’‰Sdbå‹dâ™9ÉÄ%2qu8‰c¨E&FN2ñˆL¬üL<"Wÿ>‰s¨E&FN2qˆL¬|L<"+¿$¯ÈÄÈI&^‘‰‘“L¼"Wÿ>‰s¨E&FN2qˆLŒœdâ™Xù$™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒœdâ™ø›ÿÝãj‘‰•O’‰Sdbä$—ÈÄÊÉÄ%21r’‰KdâpÇP‹L¬üL<"#'™xD&®ñ}çP‹LŒœdâ™Xù ™xE&V~I&^‘‰‘“L¼"#'™øD&®ñ}çP‹LŒœdâ™Xù$™8E&FN2qŠLŒœdâ™Xù#™øD&FN2ñ‰LŒœdâ™9ÈÄ¿|>ÿø¿{C-2±òI2qŠL¬|‘L\"#'™¸D&FN2q‰L\Nâê#2±òC2ñˆLŒœd♸æ÷IœC-21r’‰Cdbåƒdâ™Xù%™xE&FN2ñŠL¬ü‘L|"×ü>‰s¨E&FN2qŠL¬|’Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LüÍÿÙã‡Zdbä†Zdbå“dâ™Xù"™¸D&FN2q‰LŒœd♸œÄ1Ô"#'™xD&FN2ñˆL\ëû$Ρ™9ÉÄ!2±òA2ñŠL¬ü’L¼"#'™øD&VþH&>‘‰k}ŸÄ9Ô"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"#'™8E&VþH&>‘‰‘“L|"#™øç$þ3Ôëë$þw¨E&F>h¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L\Nâj‘‰‘“L<"#'™xE&®ý}çP‹L¬|L"#'™xE&V~I&^‘‰‘“L|"+$ŸÈĵ¿Oâê)2±òI2qŠLŒœdâ™9ÉÄ)21r’‰Sdbådâ™9ÉÄ'2ñ7ÿwÿj‘‰‘wj‘‰‘Oj‘‰•/’‰Kdbä$—ÈÄÈI&.‘‰‘“L\"ד8†Zdbä$ÈÄÊ/ÉÄ+2qï“8†zˆL¬|L"#'™xE&V~I&^‘‰‘“L|"+$ŸÈÄßü/úˆ¡™9ÉÄ)21r’‰Sdbä$§ÈÄÈI&.‘‰•?’‰Odbä ÿà¿C}>%þg¨E&F>h¨E&F¾h¨E&V¾H&.‘‰‘“L\"#'™¸D&FN2q‰L\Nâj‘‰‘“L<"+¿$¯ÈÄßüï{çj‘‰‘“L"#'™xE&V~I&^‘‰‘“L|"+$ŸÈÄu¿Oâj‘‰‘“Lœ"#'™8E&FN2qŠL¬|‘L\"+$ŸÈÄßüÏO9Ô"#ï4Ô"#Ÿ4Ô"#ß4Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸E&®'q µÈÄÈI&‘‰•_’‰Wdâzß'qµÈÄÈI&‘‰•O’‰Wdbå—dâ™9ÉÄ'2±òG2ñ‰L\ïû$Ρ™9ÉÄ)21r’‰Sdbä$—ÈÄÊÉÄ%2±ò2ñÏÿê÷ýp"‡Zdb䃆Zdb䋆Zdb䇆Zdbå‹dâ™9ÉÄ%21r’‰Kdbå›d♸à$Ž¡™9ÉÄ#2±òK2ñŠLÜ?ß'qµÈÄÈI&N‘‰•O’‰Wdbå—dâ™Xù#™øD&FN2ñ‰LÜ?ß'qµÈÄÈI&N‘‰‘“Lœ"#'™¸D&V¾H&.‘‰¿ùŸ=Ρ™y§¡™ù¤¡™ù¦¡™ù¥¡™Xù"™¸D&FN2q‰LŒœdâ™Xù&™¸E&î'q µÈÄÈI&‘‰•_’‰Wdânß'qµÈÄÈI&N‘‰•O’‰Wdbå—dâ™Xù#™øD&FN2ñ‰LÜíû$Ρ™9ÉÄ)21r’‰Sdbå‹dâ™9ÉÄ%2ñ7ÿ³Ç9Ô"#4Ô"#_4Ô"#?4Ô"#'™ØD&V¾H&.‘‰‘“L\"+ß$·ÈÄÈI&n‘‰»ÃIC-21r’‰Wdbå—d♸û÷IœC-21r’‰Sdbå“dâ™Xù#™øD&FN2ñ‰LŒœd♸û÷IœC-21r’‰Sdbä$—ÈÄÊÉÄ%21r’‰Kdâîß'qµÈÄÈ' µÈÄÈ7 µÈÄÈ/ µÈÄÊÉÄ&2±òE2q‰LŒœdâ™Xù&™¸E&FN2q‹LÜNâj‘‰•_’‰Wdbä$¯ÈÄ=¾Oâj‘‰‘“Lœ"+Ÿ$ŸÈÄÊÉÄ'21r’‰Odbä ÏÈÄ=¾Oâj‘‰‘“Lœ"+_$—ÈÄÈI&.‘‰‘“L\"÷ø>‰s¨E&F¾h¨E&F~h¨E&FN2±‰L¬¼‘Ll"+_$—ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄ=á$®¡¾"+¿$¯ÈÄÈI&^‘‰{~ŸÄ9Ô"#'™8E&V>I&>‘‰•?’‰Odbä$ŸÈÄßüïÇP‹L¬|’Lœ"#'™¸D&V¾H&.‘‰‘“L\"#'™¸D&îù}çP‹LŒ|ÓP‹LŒüÒP‹L¬¼‘Ll"#'™ØD&V¾H&n‘‰•o’‰[dbä$·ÈÄÈI&n‘‰{ÁIC-21r’‰Wdbä$¯ÈĽ¾Oâj‘‰‘“Lœ"+Ÿ$ŸÈÄÊÉÄ'21r‰&øÏPÿ µŸFC-2±òI2qŠL¬|‘L\"#'™¸D&FN2q‰LŒœd♸×÷IœC-21òCC-21r’‰Mdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰[dâÞpÇP‹LŒœdâ™9ÉÄ'2qïï“8‡Zdbå“dâ™9ÉÄ'2±òG2ñ‰LŒ|ÓP‹LüÍÿîq µÈÄÊ'ÉÄ%2±òE2q‰LŒœdâ™9ÉÄ%21r’‰KdâÞß'qµÈÄÈ/ µÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰ûÀIC-21r’‰Wdbåd♸Ï÷IC=E&V>I&N‘‰‘“L|"+$ŸÈÄÈ µÈÄßüïÇP‹L¬|‘L\"#'™¸D&FN2q‰LŒœdâ™9ÉÄ-2qŸï“8‡Zdbä$›ÈÄÊÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÈI&n‘‰ûÂIC-21r’‰Wdbådâ™ø›ÿ}ïC-21r’‰Sdbä$ŸÈÄÊÉÄ'21òKC-2ñ7ÿ»Ç1Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸D&V¾I&n‘‰û~ŸÄ9Ô"+o$›ÈÄÈI&6‘‰‘“Ll"#'™ØD&V¾I&n‘‰‘“LÜ"#'™¸E&FN2ñˆLÜNâj‘‰‘“L¼"+$ŸÈÄý¾Oâj‘‰‘“Lœ"+_$ŸÈÄÊÉÄ'21òGC-2ñ7ÿ»Ç1Ô"+_$—ÈÄÈI&.‘‰‘“L\"#'™¸E&V¾I&n‘‰û}ŸÄ1ÔMdbådb™9ÉÄ&21r’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰[dbä$·ÈÄÊÉÄ#2ñüÀIC-21r’‰Wdbådâ™x~¾Oâj‘‰‘“L\"+_$ŸÈÄÊÉÄ'2ñ7ÿûl#†Zdb䛆Zdbå‹dâ™9ÉÄ%21r’‰Kdbä$·ÈÄÊ7ÉÄ-2ñ7ÿ³Ç9Ô"#'™ØD&FN2±‰LŒœdb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ#2±òC2ñˆL< Nâj‘‰‘“L¼"+$ŸÈÄÓ¾Oâj‘‰‘“L\"+_$ŸÈÄÊÈÄ?üg¨<Ûˆ¡™ù¡¡™Xù"™¸D&FN2q‰LŒœdâ™Xù&™¸E&FN2q‹LüÍÿìqµÈÄÈI&6‘‰‘“Ll"#'™ØD&FN2±‹L¬|“LÜ"#'™¸E&V~H&‘‰‘“L<"O‡“8†Zdbä$ŸÈÄÊÉÄ'2ñôï“8‡Zdbä$—ÈÄÊÉÄ'2ñ7ÿ{ÇP‹LŒ¼ÓP‹LŒüÒP‹L¬|‘L\"#'™¸D&FN2q‹L¬|“LÜ"#'™¸E&žþ}çP‹LŒœdb™9ÉÄ&21r’‰Mdbådb™Xù&™¸E&FN2ñˆL¬üL<"#'™xD&ž'q µÈÄÊÉÄ'21r’‰Odâß'qµÈÄÈI&.‘‰•/‰_2ÿ;ÔNâj‘‰‘j‘‰‘“Ll"+_$—ÈÄÈI&.‘‰•o’‰[dbä$·ÈÄÈI&n‘‰g|ŸÄ9Ô"#'™ØD&FN2±‰LŒœdb™Xy'™ØE&V¾I&n‘‰•’‰Gdbä$ÈÄÈI&‘‰gÂI\CýD&VþH&>‘‰‘“L|"Ïü>‰s¨E&FN2q‰L¬|-j‘‰gÂIC-21òIC-2±òF2±‰L¬|‘L\"#'™¸E&V¾I&n‘‰‘“LÜ"#'™¸E&žù}çP‹LŒœdb™9ÉÄ&2±òN2±‹LŒœdb™Xù&™xD&V~H&‘‰‘“L<"#'™xD&ž'q µÈÄÈI&>‘‰‘“L|"Ïú>‰s¨E&FN2q‰L¬|mj‘‰gÁIC-21r’‰Mdbådb™Xù"™¸D&V¾I&n‘‰‘“LÜ"#'™¸E&FN2q‹L<ëû$Ρ™9ÉÄ&21r’‰]dbådb™9ÉÄ.2±òC2ñˆLŒœdâ™9ÉÄ#21r’‰GdâÙpÇP‹LŒœdâ™9ÈÄý#2ñìï“8‡Zdbå‹dâ™ù¡¡™x6œÄ1Ô"#'™ØD&VÞH&6‘‰•/’‰[dbå›dâ™9ÉÄ-21r’‰[dbä$·Èij¿Oâj‘‰‘“Ll"+ï$»ÈÄÈI&v‘‰‘“Lì"+?$ÈÄÈI&‘‰‘“L<"#'™xD&ž'q µÈÄÈI&>‘‰¿ùŸ=Ρ™Xù$™¸D&V¾H&.‘‰‘_j‘‰çÀIC-21r’‰Mdbådb™Xù&™¸E&FN2q‹LŒœdâ™9ÉÄ-21r’‰Gdâ9ß'qµÈÄÈI&v‘‰•w’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"Ï…“8†Zdbä$ŸÈÄßüÏçP‹L¬|‘L\"#'™¸D&Fþh¨E&ž 'q µÈÄÈI&6‘‰•7’‰Mdbå›dâ™9ÉÄ-21r’‰[dbä$·ÈÄÊÉÄ#2ñÜï“8‡Zdbådb™9ÉÄ.21r’‰]dbä$»ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&^‘‰çÁIC-21r’‰Odâoþgs¨E&V¾H&.‘‰‘“L\"+ß?4Ô"σ“8†Zdbä$›ÈÄÊÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-21r’‰Gdbå‡dâ™xÞ÷ICÝE&VÞI&v‘‰‘“Lì"#'™ØE&FN2±‹L¬üL<"#'™xD&FN2ñˆL¬ü’L¼"ïœÄ1Ô"#'™øD&þæö8‡Zdbå‹dâ™9ÉÄ-2±òÝh¨E&Þ8‰c¨E&VÞH&6‘‰‘“Ll"+ß$·ÈÄÈI&n‘‰‘“LÜ"#'™xD&V~H&‘‰¿ùŸ=Ρ™9ÉÄ.21r’‰]dbä$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&^‘‰•_’‰WdâmpÇP‹LŒœdâ™ø›ÿÙãj‘‰•/’‰Kdbä$·ÈÄÊw§¡™xœÄ5ÔMdbådb™9ÉÄ&2±òM2q‹LŒœdâ™9ÉÄ-2±òC2ñˆLŒœdâ™ø›ÿÙãj‘‰‘“Lì"#'™ØE&FN2±‹LŒœdâ™Xù!™xD&FN2ñˆL¬ü’L¼"#'™xE&Þ'q µÈÄÈA&þó™ð?Cý‹û~ µÈÄÊÉÄ%21r’‰[dbå{ÐP‹LüÍÿžÄ1Ô"#'™ØD&FN2±‰L¬|“LÜ"#'™¸E&FN2ñˆL¬üL<"#'™xD&Þþ}çP‹LŒœdb™9ÉÄ.21r’‰]dbåƒdâ™Xù!™xD&FN2ñŠL¬ü’L¼"#'™xE&Þ'q µÈÄßüϳj‘‰‘oj‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ&2ñ7ÿ{ÇP‹LŒœdb™9ÉÄ.2±òM2q‹LŒœdâ™Xù!™xD&FN2ñˆLŒœdâ™xÇ÷IœC-21r’‰]dbä$»ÈÄÈI&‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™x'œÄ¿Cý÷%ó¿C=¿ŸmäP‹LŒüÐP‹L¬|‘L\"#'™¸E&V¾I&6‘‰wÂIC-21r’‰Mdbådb™Xù&™¸E&FN2ñˆL¬üL<"#'™xD&FN2ñˆL¼óû$Ρ™9ÉÄ.21r’‰]dbåƒdâ™9ÉÄ!2±òC2ñŠL¬ü’L¼"#'™xE&FN2ñŠL¼ Nâj‘‰‘wj‘‰‘_j‘‰•/’‰Kdbä$·ÈÄÊ7ÉÄ&2ñ.8‰c¨E&FN2±‹L¬¼“Lì"+ß$·ÈÄÊÉÄ#21r’‰Gdbä$ÈÄÈI&‘‰w}ŸÄ9Ô"#'™ØE&FN2qˆL¬|L"#'™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL¼Nâj‘‰‘j‘‰‘“Ll"+_$—ÈÄÊ7ÉÄ-21r’‰MdâÝpÇP‹LŒœdb™Xy'™ØE&V¾I&‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"ïþ>‰s¨E&FN2±‹L¬|L"#'™8D&FN2qˆL¬ü’L¼"#'™xE&FN2ñŠLŒœdâ™xœÄ1Ô"#Ÿ4Ô"+o$›ÈÄÊÉÄ-2±òM2q‹LŒœdb™xœÄ1Ô"#'™ØE&VÞI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L<"#'™xE&Þó}çP‹LŒœdâ™Xù ™8D&FN2qˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñ^8‰c¨E&F¾h¨E&VÞH&6‘‰•o’‰[dbä$·ÈÄÈI&6‘‰÷ÂIC-21r’‰]dbådb™Xù!™xD&FN2ñˆLŒœdâ™9ÉÄ#2±òK2ñŠL¼÷û$Ρ™Xù ™8D&FN2qˆLŒœdâ™9ÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Odâ}pÇP‹LŒ|ÓP‹L¬¼‘Ll"+ß$·ÈÄÈI&n‘‰•’‰Mdâ}pÇP‹LŒœdb™Xy'™ØE&V~H&‘‰‘“L<"#'™xD&FN2ñŠL¬ü’L¼"ïû>‰c¨‡ÈÄÊÉÄ!21r’‰Cdbä$‡ÈÄÈI&‘‰•_’‰Wdbä$¯ÈÄÈI&^‘‰•?’‰Odâû“8†Zdb䇆Zdbådb™Xù&™¸E&FN2ñˆL¬üLl"ßœÄ1Ô"+ï$»ÈÄÈI&v‘‰•’‰Gdbä$ÈÄÈI&‘‰‘“L¼"+¿$¯ÈÄßüÏçP‹LŒœdâ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ/ÉÄ+21r’‰Wdbä$ŸÈÄÊÉÄ'2ñ58‰c¨E&F~i¨E&VÞH&6‘‰•o’‰[dbä$ÈÄÊÉÄ&2ñ58‰k¨»ÈÄÊ;ÉÄ.21r’‰]dbå‡dâ™9ÉÄ#21r’‰Gdbå—dâ™9ÉÄ+2ñ7ÿ³Ç9Ô"#'™8D&FN2qˆLŒœdâ™9ÉÄ)2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰L|Nâj‘‰‘“Ll"+o$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø›ÿ=‰c¨E&FN2±‹LŒœdb™Xù!™xD&FN2ñˆLŒœdâ™Xù%™xE&FN2ñŠL|ýû$Ρ™9ÉÄ!21r’‰Cdbä$‡ÈÄÊ'ÉÄ)2±òK2ñŠLŒœdâ™Xù#™øD&FN2ñ‰L|Nâj‘‰•7’‰Mdbä$›ÈÄÊ7ÉÄ-21r’‰Gdbå‡db™ø›ÿ=‰c¨E&FN2±‹LŒœdâ™Xù!™xD&FN2ñˆL¬ü’L¼"#'™xE&FN2ñŠL|ãû$Ρ™9ÉÄ!21r’‰Cdbä$§ÈÄÊ'ÉÄ)2±òK2ñŠL¬ü‘L|"#'™øD&FN2ñ‰L|Nâê&2±òF2±‰LŒœdb™Xù&™¸E&FN2ñˆL¬üLì"ß„“8†Zdbä$»ÈÄÊÉÄ!2±òC2ñˆLŒœdâ™Xù%™xE&FN2ñŠLŒœdâ™øæ÷IœC-21r’‰Cdbä$‡ÈÄÊ'ÉÄ)21r’‰Sdbå—dâ™Xù#™øD&FN2ñ‰LŒœdâ™øœÄ1Ô"#'™ØD&FN2±‰L¬|“LÜ"#'™xD&V~H&v‘‰oÁIC-21r’‰Cdbåƒdâ™Xù!™xD&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL|ëû$Ρ™9ÉÄ!21r’‰Sdbå“dâ™9ÉÄ)2±òG2ñ‰LŒœdâ™9ÉÄ'21r’‰OdâÛpÇP‹LŒœdb™9ÉÄ.2±òM2q‹L¬üL<"#'™ØE&¾ 'q µÈÄÈI&‘‰•’‰Cdbå‡dâ™Xù%™xE&FN2ñŠLŒœdâ™9ÉÄ+2ñíï“8‡Zdbä$‡ÈÄÊ'ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄÈI&>‘‰ïÀIC-21r’‰Mdbådb™Xù&™xD&V~H&‘‰‘“Lì"ß“8†Zdbä$‡ÈÄÊÉÄ!2±òK2ñŠLŒœdâ™9ÉÄ+21r’‰Wdbä$ŸÈÄw¾Oâj‘‰‘“Lœ"+Ÿ$§ÈÄÈI&N‘‰‘“Lœ"+$ŸÈÄÈI&>‘‰‘“L|"#'™øD&¾ 'q µÈÄÈI&6‘‰•w’‰]dbå‡dâ™9ÉÄ#21r’‰]dâ»pÇP‹LŒœdâ™Xù ™8D&V~I&^‘‰‘“L¼"#'™xE&FN2ñŠL¬ü‘L|"ßý>‰s¨E&V>I&N‘‰‘“Lœ"#'™8E&FN2qŠL¬ü‘L|"#'™øD&FN2ñ‰LŒdâû™øœÄ1Ô"#'™ØD&VÞI&v‘‰•’‰Gdbä$ÈÄÊ/ÉÄ.2ñ=8‰c¨E&FN2qˆL¬|L"+¿$¯ÈÄÈI&^‘‰‘“L¼"#'™øD&VþH&>‘‰ï}ŸÄ1ÔSdbå“dâ™9ÉÄ)21r’‰Sdbä$§ÈÄÊÉÄ'21r’‰Odbä$ŸÈÄßüß=þg¨Y&þ?úïICÍ21s’‰ebädbg™ù!™xX&fN2ñ²LŒü’Lì,+ÿ{ÇP³LŒ|L,3'™8X&F~I&^–‰™“L¼,3'™xY&fN2ñ±LŒü‘L|,+ÿ³Ç9Ô,3'™8Y&fN2q²LÌœdâd™˜9ÉÄÉ21òG2ñ±LÌœdâc™˜9ÈÄ&øÏPWþïÿ3Ô]†ºÁIC}d¨Û÷³ê'Cý›w’‰}ÉP·ï“8‡zÊP7x_CÝd¨óK2ñœÝ]œ»œë©d'hý”¦áù&ë–XÝV6x¼@.¾Íh¹ú±û‡º‘'qêñ‡º‘ŸmÀ¡vq¨3g2q,q¨ÛûIŒ‡ÚÄ¡nï'1ꇺ½ŸÄx¨·8Ôíýgx¨»8Ô™3™¸§8Ôíý$ÆCÝÅ¡nïN࡞âP·çŸj‡º½žÄ߇z‰C9“‰ö‡º½ŸÄx¨Cêö|ê-u{>‰¿u‡:óÎõ‡º“'1ê%uÿluÿˆC}óÎdbwq¨ûûIŒ‡ÚÄ¡îä÷up¨»8Ô7_L&ö-u'Ob8ÔMêN~¶‡:ġΜÉıšîï'1j‡º¿ŸÄx¨—8Ôýý$†C½?âP÷÷Ÿ]à¡âPgÎdâ6q¨ûûIŒ‡zˆCÝß?œÀCmâP÷çŸê‡º¿žÄ߇z‹C}sc2Ñš8Ôýý$ÆC½Ä¡îÏ'1êŸ?%þ9Ôýù$þ:Ô]êÌ;ÔSêAžÄp¨·8Ôãý³ <ÔMêÌ™Lì!õx?‰ñP»8Ôƒü¾õ‡úæ‹ÉÄñ‡z'1ê.õ ?Û€C½Ä¡ÎœÉÄù‡z¼ŸÄx¨Cêñ~ã¡ÞâP÷“u‡z¼ÿìõ‡:s&·‹C=ÞOb<ÔSêñþáj‡z<ÿ”øëP/q¨ÇëIüu¨í#õÍÉDëâP÷“õ‡z<ŸÄ_‡º‰C=žOâ¯C=Ä¡Î|²CmâPOò$ÎCÝ?âPÏ÷Ï6ðPwq¨3g2±/q¨çûIŒ‡:Ä¡žä÷up¨§8Ô7_L&Ž&õ$Ob8ÔCêI~¶‡z‹C}óÉdâlâPÏ÷“õ‡z¾ŸÄp¨÷Gêù~ã¡îâPÏ÷Ÿ]à¡6q¨3g2q‡8Ôóý$ÆCmâPÏ÷'ðP‡8Ôóù§Ä_‡z‹C=_OâïCÝġΜÉDâPÏ÷“8õþ|Ä¡žÏ'ñסîâPÏç“øëPOq¨37v¨]j#Ob8ÔMj{ÿlõ‡:s&û‡ÚÞOb<ÔKj#¿¯ƒCmâPß|1™8º8ÔFžÄp¨§8ÔF~¶‘‡z~Ä¡¾ùd2qvq¨íý$ÆC½Å¡¶÷“u‡ÚÞOb<ÔCj{ÿÙj‡:s&÷‡ÚÞOb<Ô.µ½8‡z‰CmÏ?%ÆCmq¨íõ$þ>Ô]êÌ™L´)µ½ŸÄx¨›8Ôö|ê!µ=ŸÄ_‡ÚÄ¡ÎÜÙ¡q¨<‰áPwq¨ýý³ <ÔSêÌ™Lq¨ýý$ÆC½Å¡vòû:8Ô.uæL&Ž!µ“'1j‡ÚÉÏ6àP7q¨o>™LœCj?‰áPï8Ôþ~ã¡îâPûûIŒ‡zŠCíï?»ÀCâPgÎdâÞâPûûIŒ‡:Ä¡ö÷'ðPoq¨ýù§Ä_‡º‰Cí¯'ñ÷¡âPgÎd¢™8Ôþ~ã¡îâPûóIüu¨§8Ôþ|j‡:ó`‡z‰CäI ‡zˆCïŸmà¡6q¨o>˜LMêx?‰áP¯8ÔA~_‡:ġΜÉÄ1Å¡ò$†CíâPùÙê.õÍ'“‰sŠCï'1ê&u¼ŸÄx¨‡8Ôñ~ã¡6q¨ãýgx¨—8Ô™™¸>q¨ãý$ÆC½Ä¡Ž÷'àPÛGêxþ)ñסîâPÇëIü}¨§8Ô™3™h.u¼ŸÄx¨‡8Ôñ|j‡:žOâ¯CâPg¾Ø¡ÞâP/ò$†C=Å¡^ïŸmà¡vq¨o>˜L]êõ~ã¡nâP/òû:8ÔKêÌ™L&õ"Ob8Ô!õ"?Û€C=Ä¡¾ùd2qš8Ôëý$ÆCÝÅ¡^ï'1ê)õz?‰ñP»8Ôëýgx¨·8Ô—˜}>ìP7q¨×ûIŒ‡z‹C½Þ?œÀCÝÄ¡^Ï?%þ:ÔCêõzj‡:s&-Ä¡^ï'1ê)õz>‰¿µ‹C½žOâ¯C½Ä¡ÎœÉÄö‡z“'1j‡z¿¶‡:Ä¡¾ù`2q q¨÷ûIŒ‡º‹C½ÉïëàPoq¨o¾™L.õ&Ob8ÔKêM~¶‡zŠC}óÉdâtq¨÷ûIŒ‡zˆC½ßOb<Ô&õ~?‰ñP‡8Ôûýgy¨NðÏ¡¾BíÓØ¡îâPï÷“µ}Ä¡ÞïNà¡îâPïçŸê)õ~=‰¿µ‹C9“‰¶Ä¡Þï'1j‡z?ŸÄ_‡:Ä¡ÞÏ'ñסÞâPß¼1™Ø„Llò$†C-d"äL&v!3L&!3_L&.!!g2q ™˜ùf2q™Ø>äI ‡ZÈÄÌ'“‰SÈDÈ™LœB&f¾™LÜB&BÎdâ2r&·‰ov¨…L¼ùútv¨…LÌܘL4!!g2Ñ„L„œÉD2r&MÈDÈ™L4!Ûçý$ÆC-d"äÁµ‰3™Ø„L̼1™Ø„Ll<‰áP ™9“‰]ÈÄÌ“‰CÈÄÌ“‰KÈDÈ™LÜB&f¾™LB&¶FžÄy¨§‰™O&§‰3™8…LÌ|3™¸…L„œÉÄ-d"äL&n!oþûp†C-d"äƒj!37&MÈDÈ™L4!!g2Ñ„L„œÉD2r&]ÈÄÖÞOb<ÔB&B¾Ø¡21óÆdb2r&›‰­“'1j!!g2q™˜ù`2q™˜ùb2q ™9“‰[ÈÄÌ7“‰CÈÄ›ÿ>‰áP ™9“‰SÈDÈ™LœB&f¾™LÜB&BÎdâ2r"NðÏ¡îï?»ÀC-d"ä“j!37&MÈDÈ™L4!!g2Ñ„L„œÉD21sg2Ñ…Llýý$ÆC-d"äL&6!3oL&6!!g2± ™Øyá21óÁdâ2r&‡‰™/&—‰3™¸…LÌ|3™8…L¼ù‰3™8…L„œÉD21óÍdâ2r&·‰7ÿ¹Çx¨…L„¼³C-d"䯵‰™“‰&d"äL&š‰3™hB&BÎd¢ ™˜¹3™èB&¶ñ~ã¡21óÆdb2r&›‰3™Ø„Ll“<‰óP!3L&!!g2q™˜ùb2q ™9“‰[ÈÄÌ7“‰SÈÄ6É“µ‰3™8…LÌܘL4!3ßL&n!!'2ñ÷n߇z¾ŸÄx¨…L„|°C-d"ä剙“‰&d"äL&š‰3™hB&fîL&º‰3™èB&¶ù~ánB&fÞ˜LlB&BÎdb2r&›‰ÍÈ“µ‰3™8„L„œÉÄ!dbæ‹ÉÄ%d"äL&n!3ßL&N!›‘'1j!!g2Ñ„LÌܘL4!3ßL&n!oþÏ/ŽóP ™yg‡ZÈDÈ';ÔB&BìP ™˜¹1™hB&BÎd¢ ™9“‰.dbæÎd¢ ™9“‰.dâÍï1j!!g2± ™9“‰MÈDÈ™LlB&6'Ob8ÔB&BÎdâ2r&§‰™/&—‰™o&·‰3™8…LlNžÄp¨…L„œÉD21sc2Ñ„LÌ|³Uè#dâÍÿùÅqj!!ìP ™¹±C-d"ä‹j!37&MÈDÈ™L4!3w&]ÈDÈ™Lt!!g2Ñ…L¼ùï=†C-d"äL&6!!g2± ™9“‰MÈÄäI ‡ZÈDÈ™LB&f>™LœB&f¾˜LÜB&f¾™LÜB&BÎdâ2±yá2r&MÈÄÌÉD2ñæ¿èµ‰wv¨…L„|²C-d"äε‰3™Ø„LÌܘL4!!g2Ñ…LÌÜ™Lt!!g2Ñ…L„œÉD2ñæ¿÷µ‰3™Ø„L„œÉÄ&d"äL&6!Û"Ob8ÔB&BÎdâ21óÉdâ21óÍdâ2r&·‰3™8…Ll‹<‰áP ™9“‰&dbæÆd¢ ™ØÖûIŒ‡ZÈDÈ;ÔB&BnìP ™y°C-dbæÉÄ&dbæÆd¢ ™˜¹3™èB&BÎd¢ ™9“‰.d"äL&º‰7ÿ½Çp¨…L„œÉÄ&d"äL&6!!g2± ™Ø6yá2r&‡‰™O&§‰™o&·‰3™¸…L¼y|˜LœB&f>™LœB&BÎd¢ ™˜¹1™hB&¶ý~ã¡2òɵ‰;;ÔB&BÎdb21óÆdb21sc2Ñ…LÌÜ™Lt!!g2Ñ…L„œÉD2r&]ÈĶßOb<ÔB&BÎdb2r&›‰™w&»‰ýCžÄp¨…L„œÉÄ!dbæ“ÉÄ)dbæ›ÉÄ-d"äD&þœàïC}óø0™8…LÌ|2™8…LÌܘL4!!g2Ñ„LìŸ÷“µ‰;ÔB&BìP ™9“‰MÈÄÌ“‰MÈÄÌÉD2r&]ÈDÈ™Lt!!g2Ñ…L„œÉD2±ÞOb<ÔB&BÎdb2r&»‰™w&»‰½‘'1j!!g2q™˜ùd2q ™˜ùf2q ™¹±C-dâÍãÃdâ21óÉd¢ ™˜¹1™hB&BÎd¢ ™ØÛûIŒ‡ZÈDÈj!!_ìP ™˜yc2± ™9“‰MÈÄÌÉD2r&]ÈDÈ™Lt!!g2Ñ…L„œmÐ!dboï'1j!!g2± ™˜yg2± ™9“‰]ÈÄÞÉ“µ‰3™8…LÌ|2™8…LÌ|3™¸…L„ÜÙ¡2ñæña2q ™˜¹1™hB&BÎd¢ ™9“‰&dbïï'1j!!v¨…L„œÉÄ&dbæÉÄ&d"äL&6!3w&]ÈDÈ™Lt!!g2Ñ…L„œÉD21ó`t™ØûûIŒ‡ZÈDÈ™LìB&fÞ™LìB&BÎdb2±ò$†C-dbæ“ÉÄ)d"äL&N!3ßL&n!!v¨…L¼y|˜L4!37&MÈDÈ™L4!!g2Ñ…Lìãý$ÆC-d"ä‹j!3oL&6!!g2± ™9“‰MÈÄÌÉD2r&]ÈDÈ™Lt!!g21„LÌ<ØB&öñ~ã¡21óÎdb2r&»‰3™Ø…Lì“<‰óPO!3ŸL&N!!g2q ™˜ùf2q ™ùb‡ZÈěLJÉD21sc2Ñ„L„œÉD21sg2Ñ…Lìóý$ÆC-d"äL&6!3oL&6!!g2± ™9“‰MÈÄÌÉD2r&]ÈDÈ™Lt!3&CÈDÈÙB&öù~áîB&fÞ™LìB&BÎdb2r&»‰ÝÈ“µ‰3™8…L„œÉÄ)dbæ›ÉÄ-d"ä›j!o&MÈÄÌÉD2r&]ÈÄÌÉD2±ÛûIŒ‡ZÈÄÌ“‰MÈDÈ™LlB&BÎdb2r&›‰™;“‰.d"äL&º‰3™B&fL&†‰³ :„L¼ùï=†C-d"äL&v!!g2± ™9“‰]ÈÄîäI ‡ZÈDÈ™LœB&BÎd¢ ™˜ùf2q ™xóßß×Á¡2r&MÈÄÌÉD2r&]ÈÄÌÉD2±ûûI ÿ‹kB&fÞ˜LlB&BÎdb2r&›‰3™Ø„LÌÜ™Lt!!g2Ñ…LÌ<˜L !!g21„L„œmÐ!dâÍï1j!!g2± ™9“‰]ÈDÈ™LìB&ö Ob8ÔB&BÎdâ21sc2Ñ„LÌ|™øs‚uß×Á¡2r&MÈÄÌÉD2r&]ÈÄÌÉD2ñæ¿èµ‰3™Ø„L„œÉÄ&d"äL&6!!g2± ™˜¹3™èB&BÎdb™˜y0™B&BÎdb™9Û CÈÄ›ÿÞc8ÔB&BÎdb2r&»‰3™Ø…Lì‹<‰áP ™9“‰SÈÄÌÉD2ñæ¿¿w†C-d"äj!!g2Ñ„LÌܘL4!!g2Ñ…LÌÜ™Lt!ûz?‰ñP ™9“‰MÈDÈ™LlB&BÎdb21óÎdb21sg2Ñ…LÌ<˜L !!g21„L„œÉÄ2r¶A‡‰7ÿ½Çp¨…L„œÉÄ.d"äL&v!!g2q™Ø7yá2r&§‰™“‰&dbßï'1j!!ìP ™˜yc2Ñ„LÌܘL4!!g2Ñ…LÌÜ™Lt!û~?‰ñP ™9“‰MÈDÈ™LlB&BÎdb21óÎdb21sg21„LÌ<˜L !!g21„L„œÉÄ2r¶A‡‰}¿ŸÄx¨…L„œÉÄ.d"äL&v!3L&!LJ<‰áP ™9“‰SÈÄÌÉD2q|ÞOb<ÔB&BÎdb21óÆd¢ ™˜¹1™hB&fîL&º‰3™èB&ŽÏûIŒ‡ZÈDÈ™LlB&BÎdb2r&»‰™w&»‰™“‰!d"äL&†‰3™B&BÎdb™9Û CÈÄñy?‰ñP ™9“‰]ÈDÈ™LB&f>˜LB&ŽFžÄp¨…L„œÉÄ)dbæÆd¢ ™8ÚûIŒ‡ZÈDÈ™LlB&fÞ˜L4!37&]ÈÄÌÉD2r&]ÈÄÑÞOb<ÔB&BÎdb2r&›‰™w&»‰3™Ø…LÌ<˜L !!g21„L„œÉÄ2r&CÈDÈÙ½„Líý$ÆC-d"äL&v!3L&!!g2q™8:yá2r&MÈÄÌÉD2qô÷“µ‰3™Ø„L̼1™hB&fîL&º‰3™èB&BÎd¢ ™8úûIŒ‡ZÈDÈ™LlB&BÎdb21óÎdb2r&»‰™“‰!d"äL&†‰3™B&BÎdb™˜ùbô2qô÷“µ‰3™8„LÌ|0™8„L„œÉÄ!dâäI ‡ZÈÄÌÉD2r&MÈÄ1ÞOb<ÔB&BÎdb21óÆd¢ ™˜¹3™èB&BÎd¢ ™9“‰!dâï'1j!!g2± ™˜yg2± ™9“‰]ÈDÈ™LìB&fL&†‰3™B&BÎdb™9“‰KÈÄÌÛ —‰c¼ŸÄx¨…LÌ|0™8„L„œÉÄ!d"äL&!Ç$Oâ<Ô&dbæÆd¢ ™9“‰&dâ˜ï'1j!!g2± ™˜yc2Ñ…LÌÜ™Lt!!g2Ñ…LÌ<˜L !Ç|?‰ñP ™9“‰]ÈÄÌ;“‰]ÈDÈ™LìB&BÎdb21ó`21„L„œÉÄ2r&CÈÄÌ“‰KÈDÈÙ½„Lóý$†C=„LÌ|0™8„L„œÉÄ!d"äL&!‡‘'1j!!g2Ñ„L„œÉD2qØûIŒ‡ZÈDÈ™LlB&fÞ˜Lt!3w&]ÈDÈ™L !3&CÈÄaï'1j!3ïL&v!!g2± ™9“‰]ÈDÈ™LìB&fL&†‰3™B&BÎdâ21óÅdâ2r¶A/!oþ{áP ™9“‰CÈDÈ™LB&BÎdâ2q8yá2r&MÈDÈ™Lt!‡¿ŸÄx¨…L̼1™Ø„L„œÉD21sg2Ñ…L„œÉÄ21ó`21„Lþ~Ãÿ⺉™w&»‰3™Ø…L„œÉÄ.d"äL&v!3&CÈDÈ™L !3_L&.!!g2q ™9Û —‰7ÿ½Çp¨…L„œÉÄ!d"äL&!!g2q™8‚<‰áP ™9“‰&dbæÎd¢ ™8âý$†CÝ„L̼1™Ø„L„œÉD21sg2Ñ…L„œÉÄ21ó`21„L¼ù/ú€C-d"äL&v!!g2± ™9“‰]ÈDÈ™LB&fL&†‰3™¸„LÌ|1™¸„L„œÉÄ%d"älƒ^B&Þü÷á2r&‡‰3™8„L„œÉÄ!dâXäI ‡ZÈDÈ™L4!3w&]ÈÄ›ÿþÞµ‰3™Ø„L„œÉD21sg2Ñ…L„œÉÄ21ó`21„Lëý$ÆC-d"äL&v!!g2± ™9“‰]ÈÄÌ“‰CÈÄ̃ÉÄ21óÅdâ2r&—‰3™¸„L„œmÐKÈÄ›ÿÞc8ÔB&BÎdâ2r&‡‰3™8…L›<‰áP ™9“‰&dbæÎd¢ ™8öûIŒ‡ZÈDÈ™LlB&fÞ™Lt!3w&]ÈDÈ™L !3&CÈıßOb<ÔB&BÎdb2r&»‰3™8„LÌ|0™8„LÌ<˜L\B&f¾˜L\B&BÎdâ2r&—‰³ z ™8öûIŒ‡ZÈDÈ™LB&BÎdâ21óÉdâ2q~È“µ‰3™hB&fîL&º‰óó~ã¡2r&»‰™w&]ÈÄÌÉD21ó`21„L„œÉÄ2q~ÞOb<ÔB&BÎdb2r&»‰3™8„LÌ|0™8„LÌ|1™¸„L„œÉÄ%d"äL&.!!g2q ™9Û —‰óó~ã¡2r&‡‰3™8…LÌ|2™8…Lœ<‰áP ™9“‰&dbæÎd¢ ™8ÛûIŒ‡ZÈDÈ™LìB&fÞ™Lt!3w&CÈÄ̃ÉÄ2r&CÈÄÙÞOb<ÔB&BÎdb2r&»‰™&‡‰3™8„LÌ|1™¸„L„œÉÄ%d"äL&.!!g2q ™9Û ·‰³½ŸÄx¨…L„œÉÄ!dbæ“ÉÄ)d"äL&N!g'Ob8ÔB&BÎd¢ ™˜¹3™èB&Îþ~ã¡2r&»‰™w&]ÈÄ̃ÉÄ2r&CÈDÈ™L !g?‰ñP ™9“‰]ÈDÈ™LB&f>˜LB&BÎdâ21óÅdâ2r&—‰3™¸„L„œÉÄ%dbæ›mÐ[ÈÄÙßOb<ÔB&BÎdâ21óÉdâ2r&§‰s'1j!3w&]ÈDÈ™Lt!çx?‰ñP ™9“‰]ÈÄÌ;“‰!dbæÁdb™9“‰!d"äL&.!çx?‰ñP ™9“‰]ÈÄÌ“‰CÈDÈ™LB&BÎdâ21óÅdâ2r&—‰3™¸„L„œÉÄ-dbæ›mÐ[ÈÄ9ÞOb<ÔB&f>™LœB&BÎdâ2r&§‰s’'qj21sg2Ñ…L„œÉD2qÎ÷“µ‰3™Ø…L̼3™B&fL&†‰3™B&f¾˜L\B&Îù~ã¡2r&‡‰™&‡‰3™8„L„œÉÄ!dbæ‹ÉÄ%d"äL&.!!g2q ™˜ùf2q ™9Û ·‰s¾ŸÄp¨§‰™O&§‰3™8…L„œÉÄ)dâ4ò$†C-d"äL&º‰3™èB&N{?‰ñP ™9“‰]ÈÄÌ;“‰!dbæÁdb™9“‰KÈÄÌ“‰KÈÄiï'1j!3L&!!g2q™9“‰CÈDÈ™LB&f¾˜L\B&BÎdâ2r&·‰™o&·‰³ z ™xóß{ ‡ZÈDÈ™LœB&BÎdâ2r&§‰ÓÉ“µ‰3™èB&BÎdb™8ýý$ÆC-dbæÉÄ.d"äL&†‰™“‰!d"äL&.!3_L&.!§¿ŸÄð¿¸!dbæƒÉÄ!d"äL&!!g2q™9“‰CÈÄÌ“‰KÈDÈ™L\B&f¾™LÜB&BÎdâ2r¶Ao!oþ{áP ™9“‰SÈDÈ™LœB&BÎdâ2qyá2r&]ÈÄ̃ÉÄ2qÆûI ‡º ™˜yg2± ™9“‰!dbæÁdb™9“‰KÈÄÌ“‰KÈÄ›ÿ¢8ÔB&BÎdâ2r&‡‰3™8„L„œÉÄ)dbæ‹ÉÄ%d"äL&n!3ßL&n!!g2q ™9Û ·‰7ÿ½Çp¨…L„œÉÄ)d"äL&N!!g2q ™8yá2r&]ÈÄ̃ÉÄ2ñæ¿¿w†C-d"äL&v!!g21„LÌ<˜L !!g2q ™˜ùb2q ™8×ûIŒ‡ZÈDÈ™LB&BÎdâ2r&‡‰™O&§‰™/&—‰™o&·‰3™¸…L„œÉÄ-d"älƒÞB&Þü÷á2r&§‰3™8…L„œÉD2qnò$†C-d"äL&º‰™“‰!dâÜï'1j!!g2± ™˜ù`21„LÌ<˜L !!g2q ™˜ùb2q ™8÷ûIŒ‡ZÈDÈ™LB&BÎdâ2r&§‰™O&§‰™/&·‰™o&·‰3™¸…L„œÉÄ-d"älƒÞB&Îý~ã¡2r&§‰3™8…LÌܘL4!íCžÄp¨…L„œÉD21ó`21„L´ÏûIŒ‡ZÈDÈ™LB&f>˜L !3&CÈÄÌ“‰KÈDÈ™L\B&Úçý$ÆC-d"äL&!!g2q™9“‰SÈÄÌ'“‰SÈÄÌ7“‰[ÈDÈ™LÜB&BÎdâ2r&·‰³ z ™hŸ÷“µ‰3™8…L„œÉD21sc2Ñ„L´FžÄp¨…L„œÉD21ó`21„L´ö~ã¡2r&‡‰™&CÈÄ̃ÉÄ%dbæ‹ÉÄ%d"äL&.!­½ŸÄx¨…L„œÉÄ!d"äL&!3ŸL&N!!g2q ™˜ùf2q ™9“‰[ÈDÈ™LÜB&BÎdâ2r²Aï‰ÖÞOb<ÔB&BÎdâ21sc2Ñ„L„œÉD2Ñ:yá2r&CÈÄ̃ÉÄ2ÑúûIŒ‡ZÈDÈ™LB&f>˜L !3_L&.!!g2q ™9“‰KÈDëï'1j!!g2q™9“‰SÈÄÌ'“‰SÈDÈ™LœB&f¾™LÜB&BÎdâ2r&·‰3™¸…L¼ùï=†C-dbæ“ÉÄ)d"äL&š‰™“‰&d"äL&š‰6È“µ‰™“‰!d"äL&†‰6ÞOb<ÔB&BÎdâ21óÁdâ21óÅdâ2r&—‰3™¸…L´ñ~ã¡2r&‡‰™O&§‰3™8…L„œÉÄ)dbæ›ÉÄ-d"äL&n!!g2q ™9‘‰¿'8žÿÿ½Çp¨…LÌ|2™8…LÌܘL4!!g2Ñ„L„œÉD2Ñ&yç¡!3&CÈDÈ™L !m¾ŸÄx¨…L„œÉÄ!dbæƒÉÄ%dbæ‹ÉÄ%d"äL&.!3ßL&n!m¾ŸÄx¨…L„œÉÄ)dbæ“ÉÄ)d"äL&N!!g2q ™˜ùf2q ™9“‰[ÈDÈ™LÜB&Þüëj!!ïìP ™˜ùd2Ñ„LÌܘL4!!g2Ñ„L„œÉD2ÑŒ<‰áP ™9“‰!d"äL&†‰fï'1j!!g2q™˜ù`2q ™˜ùb2q ™9“‰[ÈÄÌ7“‰[ÈD³÷“µ‰™O&§‰3™8…L„œÉÄ)d"äL&N!3ßL&n!!g2q ™9‘‰?OâŸCm¯'ñ÷¡2òÁµ‰™“‰&d"äL&š‰3™hB&BÎd¢ ™hNžÄp¨…L„œÉÄ2r&—‰æï'1j!3L&!!g2q ™˜ùb2q ™9“‰[ÈÄÌ7“‰[ÈDó÷“õ21óÉdâ2r&§‰3™8…L„œÉÄ)dbæ›ÉÄ-d"äL&n!oþ}¿µ‰wv¨…L„|²C-dbæÆd¢ ™9“‰&d"äL&š‰3™hB&Z'1j!!g21„LÌ|1™¸„L´x?‰áP!3L&!!g2q ™˜ùb2q ™9“‰[ÈÄÌ7“‰[ÈÄ›ÿ¢8ÔB&BÎdâ2r&§‰3™8…L„œÉD21óÍdâ2r"¿OðçŸj!!ìP ™¹±C-dbæÆd¢ ™9“‰&d"äL&š‰3™hB&Ú"Ob8ÔB&BÎdb™˜ùb2q ™xóßß;á2r&‡‰3™¸„LÌ|1™¸„L„œÉÄ-dbæ›ÉÄ-d¢­÷“µ‰3™8…L„œÉÄ)d"äL&N!37&MÈÄÌ7“‰[ÈÄ›ÿüj!!ïìP ™ùd‡ZÈDÈj!37&MÈDÈ™L4!!g2Ñ„L„œÉD2Ñ6yá2r&CÈÄÌ“‰KÈDÛï'1j!!g2q™˜ùd2q ™˜ùb2q ™9“‰[ÈÄÌ7“‰[ÈDÛï'1j!!g2q ™9“‰SÈDÈ™L4!37&MÈÄÌ7‘‰?'øçPï÷'ðP ™ù`‡ZÈDÈj!!v¨…LÌܘL4!!g2Ñ„L„œÉD21sg2Ñ…Lôyá2r&CÈÄÌ“‰KÈDÿ¼ŸÄx¨…L„œÉÄ)dbæ“ÉÄ%dbæ‹ÉÄ%dbæ›ÉÄ-d"äL&n!ýó~ã¡2r&§‰3™8…L„œÉD21sc2Ñ„L¼ùÏ=ÆC-d"äj!!ŸìP ™¹³C-d"ä‹j!37&MÈDÈ™L4!!g2Ñ…LÌÜ™Lt!½‘'1j!!g21„LÌ|1™¸„Lôö~ã¡2r&§‰™O&—‰™/&·‰™o&·‰3™¸…Lôö~ã¡2r&§‰3™8…LÌܘL4!!g2Ñ„L¼ùÏ=ÆC-d"äƒj!!7v¨…L„<Ø¡2r&›‰™“‰&d"äL&š‰™;“‰.d"äL&º‰ÞÉ“µ‰3™¸„LÌ|1™¸„Lôþ~ã¡2r&§‰™O&—‰™o&·‰3™¸…L„œÉÄ-d¢÷÷“µ‰3™8…L„œÉD21sc2Ñ„L„œÉD2ÑûûIŒ‡ZÈDÈ';ÔB&BîìP ™ùb‡ZÈÄÌ“‰MÈÄÌÉD2r&]ÈÄÌÉD2r&]ÈDäI ‡ZÈÄÌ“‰KÈDÈ™L\B&úx?‰ñP ™9“‰SÈÄÌ'“‰[ÈÄÌ7“‰[ÈDÈ™LÜB&BNdâú™èãý$ÆC-d"äL&N!37&MÈDÈ™L4!!g2Ñ„Lôñ~ã¡2rc‡ZÈDȃj!!g2± ™˜yc2± ™˜¹1™hB&fîL&º‰3™èB&BÎd¢ ™è“<‰óP/!3_L&.!!g2q ™èóý$ÆC-d"äL&N!3ŸL&n!3ßL&n!!g2q ™xóß{ ‡ZÈÄÌ'“‰SÈDÈ™L4!37&MÈDÈ™L4!!g2Ñ„Lôù~ã¡2rg‡ZÈDÈ;ÔB&fÞ˜LlB&BÎdb21sc2Ñ…LÌÜ™Lt!!g2Ñ…L„œÉD2Ñ<‰áP ™9“‰KÈDÈ™L\B&º½ŸÄx¨…L„œÉÄ)dbæ“ÉÄ-dbæ›ÉÄ-d"äD&þœàŸC}…Ú§±C-dbæ“ÉÄ)dbæÆd¢ ™9“‰&d"äL&š‰3™hB&º½ŸÄx¨…L„<Ø¡2r&›‰™7&›‰3™Ø„LÌÜ™Lt!!g2Ñ…L„œÉD2r&]ÈDwò$†C-d"äL&.!!g2q ™èþ~ã¡21óÉdâ2r&·‰™o&·‰;;ÔB&Þü÷á21óÉd¢ ™˜¹1™hB&BÎd¢ ™9“‰&d"äL&š‰îï'1j!!_ìP ™˜yc2± ™9“‰MÈDÈ™LlB&fîL&º‰3™èB&BÎd¢ ™9“‰.d¢yá2r&—‰™o&·‰ï'1ê)dbæ“ÉÄ)d"äL&n!3ßL&n!!v¨…L¼ùï=†C-dbæÆd¢ ™9“‰&d"äL&š‰3™hB&BÎd¢ ™èñ~ã¡2r&›‰™7&›‰3™Ø„L„œÉÄ&dbæÎd¢ ™9“‰.d"äL&º‰3™èB&ú"Ob8ÔB&BÎdâ21óÍdâ2ñæ¿¿w†C-d"äL&N!!g2q ™˜ùf2q ™ùb‡ZÈÄ›ÿÞc8ÔB&fnL&š‰3™hB&BÎd¢ ™9“‰&dbæÎd¢ ™èëý$ÆC-dbæÉÄ&d"äL&6!!g2± ™9“‰MÈÄÌÉD2r&]ÈDÈ™Lt!!g21„LôMžÄp¨…L„œÉÄ%dbæ›ÉÄ-d¢ï÷“µ‰3™8…LÌܘLÜB&f¾™LÜB&B¾Ù¡2ñæ¿÷µ‰™“‰&d"äL&š‰3™hB&BÎd¢ ™˜¹3™èB&ú~?‰áP7!3oL&6!!g2± ™9“‰MÈDÈ™LlB&fîL&º‰3™èB&BÎd¢ ™˜y0™B&Ƈ<‰áP ™9“‰KÈÄÌ7“‰[ÈÄø¼ŸÄx¨…L„œÉD21sc2q ™˜ùf2q ™xóߟmÀ¡2rg‡ZÈÄÌÉD2r&MÈDÈ™L4!!g2Ñ…LÌÜ™Lt!oþsñP ™9“‰MÈDÈ™LlB&BÎdb2r&›‰™;“‰.d"äL&º‰3™B&fL&†‰ÑÈ“µ‰3™¸„LÌ|3™¸…LŒö~ã¡2r&MÈÄÌÉÄ-dbæ›ÈÄŸüs¨ùÙj!!v¨…LÌܘL4!!g2Ñ„L„œÉD21sg2Ñ…L„œÉD2ñæ?÷µ‰3™Ø„L„œÉÄ&d"äL&6!!g2± ™˜¹3™èB&BÎd¢ ™˜y0™B&BÎdb™<‰áP ™9“‰[ÈÄÌ7“‰[ÈÄèï'1j!!g2Ñ„LÌܘLÜB&Þü÷I ‡ZÈDÈ;;ÔB&B¾Ø¡21sc2Ñ„L„œÉD2r&]ÈÄÌÉD2r&]ÈÄèï'1j!!g2± ™9“‰MÈDÈ™LlB&fÞ™LìB&fîL&º‰3™B&fL&†‰3™B&Æ Ob8ÔB&f¾™LÜB&BÎdâ21ÆûIŒ‡ZÈDÈ™L4!37"Éü}¨yá2òÁµ‰3™Ø„LÌܘL4!!g2Ñ„LÌÜ™Lt!!g2Ñ…L„œÉD21ÆûIŒ‡ZÈDÈ™LlB&BÎdb2r&»‰™w&»‰™;“‰.dbæÁdb™9“‰!d"äL&†‰1É“8õ21óÍdâ2r&·‰1ßOb<ÔB&BÎd¢ ™˜¹;ÔB&Æ$Ob8ÔB&B>Ù¡21óÆdb21sc2Ñ„L„œÉD21sg2Ñ…L„œÉD2r&]ÈĘï'1j!!g2± ™9“‰MÈÄÌ;“‰]ÈDÈ™LìB&fîL&†‰™“‰!d"äL&†‰3™B&†‘'1j!!g2q ™9“‰[Èİ÷“µ‰3™hB&fnε‰aäI ‡ZÈDÈ™LlB&fÞ˜LlB&fnL&š‰™;“‰.d"äL&º‰3™èB&BÎd¢ ™ö~ã¡2r&›‰3™Ø…L̼3™Ø…L„œÉÄ.dbæÁdb™9“‰!d"äL&†‰3™B&†“'1j!!g2q ™9‘‰ñ21üý$ÆC-dbæÆd¢ ™y°C-db8yá2r&›‰™7&›‰™“‰.dbæÎd¢ ™9“‰.d"äL&º‰3™èB&†¿ŸÄx¨…L„œÉÄ&dbæÉÄ.d"äL&v!!g2± ™˜y0™B&BÎdb™9“‰!d"äL&†‰äI ‡ZÈDÈ™LÜB&Þüçã¡21óÉd¢ ™˜¹1™hB&B¾Ø¡21‚<‰áP ™9“‰MÈÄÌ“‰MÈÄÌÉD2r&]ÈDÈ™Lt!!g2Ñ…L„œÉÄ21âý$ÆC-d"äL&v!3ïL&v!!g2± ™9“‰]ÈÄ̃ÉÄ2r&CÈDÈ™L !!g21„LŒEžÄp¨…L„œÉÄ-dâÍî1j!37&MÈDÈ™L4!!ßìP ™‹<‰áP ™9“‰MÈÄÌ“‰MÈÄÌÉD2r&]ÈDÈ™Lt!!g2Ñ…LÌ<˜L !c½ŸÄx¨…L̼3™Ø…L„œÉÄ.d"äL&v!!g2± ™˜y0™B&BÎdb™9“‰!d"äL&.!c“'1j!!g2q ™xóŸ{Œ‡ZÈÄÌÉD2r&MÈÄÌýõ‰±É“µ‰3™Ø„L̼1™Ø„LÌÜ™Lt!!g2Ñ…L„œÉD2r&CÈÄ̃ÉÄ21öûI ‡º ™˜yg2± ™9“‰]ÈDÈ™LìB&BÎdb21ó`21„L„œÉÄ2r&CÈÄÌ“‰KÈÄõ!Ob8ÔB&BÎdâ2ñæ?÷µ‰™“‰&d"äL&º‰™{c‡ZÈÄõ!Ob8ÔB&fÞ˜LlB&BÎdb21sg2Ñ…L„œÉD2r&]ÈDÈ™L !3&CÈÄ›ÿÜc<ÔB&BÎdb2r&»‰3™Ø…L„œÉÄ.dbæÁdb™9“‰!d"äL&.!3_L&.!W#Ob8ÔB&BÎdâ2ñæ?÷µ‰™“‰&d"äL&º‰™{g‡ZÈÄÕÈ“8u21óÆdb2r&›‰™;“‰.d"äL&º‰3™èB&fL&†‰3™B&Þüçã¡2r&»‰3™Ø…L„œÉÄ.d"äL&!3&CÈDÈ™L !3_L&.!!g2q ™¸:yá2r"¿fÂõÅ}c‡ZÈÄÌÉD2r&]ÈÄÌ}°C-dâÍŸÄp¨…L„œÉÄ&d"äL&6!3w&]ÈDÈ™Lt!!g21„LÌ<˜L !!g21„L\ýý$ÆC-d"äL&v!!g2± ™9“‰]ÈÄÌ“‰CÈÄ̃ÉÄ2r&—‰™/&—‰3™¸„L\ƒ<‰áP ™xóŸŸmà¡2rg‡ZÈÄÌÉD2r&]ÈÄÌÉÄ&dâÍŸÄp¨…L„œÉÄ&d"äL&v!3w&]ÈDÈ™Lt!3&CÈDÈ™L !!g21„L\ãý$ÆC-d"äL&v!!g2± ™9“‰CÈÄÌ“‰CÈÄ̃ÉÄ21óÅdâ2r&—‰3™¸„L\“<‰ï¡þý%ó÷¡žïŸmà¡2ò`‡ZÈÄÌÉD2r&]ÈÄÌÉÄ&dâšäI ‡ZÈDÈ™LlB&fÞ™LìB&fîL&º‰3™B&fL&†‰3™B&BÎdb™¸æûIŒ‡ZÈDÈ™LìB&BÎdb21óÁdâ2r&‡‰™“‰KÈÄÌ“‰KÈDÈ™L\B&BÎdâ2qyá2òε‰/v¨…LÌܘL4!!g2Ñ…LÌÜ™LlB&.#Ob8ÔB&BÎdb21óÎdb21sg2Ñ…LÌ<˜L !!g21„L„œÉÄ2r&CÈÄeï'1j!!g2± ™9“‰CÈÄÌ“‰CÈDÈ™LB&f¾˜L\B&BÎdâ2r&—‰3™¸„L\NžÄp¨…L„|°C-d"äL&6!37&MÈÄÌÉD2r&›‰ËÉ“µ‰3™Ø…L̼3™Ø…LÌÜ™L !3&CÈDÈ™L !!g21„L„œÉÄ2qùûIŒ‡ZÈDÈ™LìB&f>˜LB&BÎdâ2r&‡‰™/&—‰3™¸„L„œÉÄ%d"äL&.!W'1j!!ŸìP ™˜yc2± ™˜¹1™èB&fîL&º‰3™Ø„L\AžÄp¨…L„œÉÄ.dbæÉÄ.dbæÁdb™9“‰!d"äL&†‰3™B&BÎdâ2qÅûIŒ‡ZÈDÈ™LB&f>˜LB&BÎdâ2r&‡‰™/&—‰3™¸„L„œÉÄ%d"äL&.!×"Ob8ÔB&BnìP ™˜yc2± ™˜¹3™èB&BÎd¢ ™9“‰MÈĵȓµ‰3™Ø…L̼3™Ø…LÌ<˜L !!g21„L„œÉÄ2r&CÈÄÌ“‰KÈĵÞOb<ÔB&f>˜LB&BÎdâ2r&‡‰3™8„LÌ|1™¸„L„œÉÄ%d"äL&.!!g2q ™¸6yá2rg‡ZÈÄÌ“‰MÈÄÌÉD2r&]ÈÄ̃ÉÄ&dâÚäI ‡ZÈDÈ™LìB&fÞ™LìB&fL&†‰3™B&BÎdb™9“‰KÈÄÌ“‰KÈĵßOb8ÔCÈÄÌ“‰CÈDÈ™LB&BÎdâ2r&‡‰™/&—‰3™¸„L„œÉÄ%dbæ›ÉÄ-dâþ'1j!!v¨…L̼1™Ø„LÌÜ™Lt!!g21„LÌ<˜LlB&îyá21óÎdb2r&»‰™“‰!d"äL&†‰3™B&BÎdâ21óÅdâ2ñæ?÷µ‰3™8„L„œÉÄ!d"äL&!!g2q™˜ùb2q ™9“‰KÈDÈ™LÜB&f¾™LÜB&îFžÄp¨…L„|±C-dbæÉÄ&dbæÎd¢ ™9“‰!dbæÁdb2q7ò$ÎCÝ…L̼3™Ø…L„œÉÄ.dbæÁdb™9“‰!d"äL&†‰™/&—‰3™¸„L¼ùÏ=ÆC-d"äL&!!g2q™9“‰CÈDÈ™LœB&f¾˜L\B&BÎdâ21óÍdâ2r&·‰»“'1j!!g2± ™˜yc2± ™˜¹3™èB&BÎdb™˜y0™Ø„L¼ù‰3™Ø…L„œÉÄ.dbæÁdb™9“‰!d"äL&.!3_L&.!!g2q ™¸ûûIŒ‡ZÈDÈ™LB&BÎdâ2r&‡‰™O&§‰™/&—‰3™¸…LÌ|3™¸…L„œÉÄ-dâäI ‡ZÈÄÌ“‰MÈDÈ™LlB&fîL&º‰3™B&fL&v!oþû$†C-d"äL&v!!g2q™˜y0™B&BÎdb™˜ùb2q ™9“‰KÈDÈ™L\B&îñ~ã¡2r&‡‰3™8„L„œÉÄ)dbæ“ÉÄ)dbæ‹ÉÄ%dbæ›ÉÄ-d"äL&n!!g2q ™¸'yç¡nB&fÞ˜LlB&BÎdb21sg2Ñ…L„œÉÄ21ó`2± ™¸'yá2r&»‰™&‡‰™“‰!d"äL&.!3_L&.!!g2q ™9“‰KÈÄ=ßOb<ÔB&BÎdâ2r&‡‰™O&§‰3™8…LÌ|1™¸…LÌ|3™¸…L„œÉÄ-d"äL&n!·‘'1j!!g2± ™9“‰MÈÄÌÉD2r&CÈÄ̃ÉÄ.dâ6ò$†C-d"äL&!3L&!3&CÈÄÌ“‰KÈDÈ™L\B&BÎdâ2r&—‰ÛÞOb<ÔB&BÎdâ2r&§‰™O&§‰3™8…LÌ|3™¸…L„œÉÄ-d"äL&n!!g2q ™¸<‰áP ™9“‰MÈDÈ™LìB&fîL&º‰™“‰!d"äL&v!·“'1j!!g2q™˜ù`2q™˜y0™¸„LÌ|1™¸„L„œÉÄ%d"äL&.!!g2q ™¸ýý$ÆC-d"äL&!3ŸL&N!!g2q ™9“‰SÈÄÌ7“‰[ÈDÈ™LÜB&BÎdâ2r&·‰;È“µ‰3™Ø„L̼3™Ø…LÌÜ™L !3&CÈDÈ™LìB&î Ob8ÔB&BÎdâ21óÁdâ21óÅdâ2r&—‰3™¸„L„œÉÄ%d"äL&n!w¼ŸÄx¨…L„œÉÄ)dbæ“ÉÄ)d"äL&N!!g2q ™˜ùf2q ™9“‰[ÈDÈ™LÜB&BÎdâ2q/ò$†C-d"äL&6!3ïL&v!3&CÈDÈ™L !!g2± ™¸yá2r&‡‰™&‡‰™/&—‰3™¸„L„œÉÄ%d"äL&.!3ßL&n!÷z?‰ñP ™˜ùd2q ™9“‰SÈDÈ™LœB&BÎdâ21óÍdâ2r&·‰3™¸…L„ü-Çç#dâÞäI ‡ZÈDÈ™LlB&fÞ™LìB&fL&†‰3™B&f¾˜LìB&îMžÄp¨…L„œÉÄ!dbæƒÉÄ!dbæ‹ÉÄ%d"äL&.!!g2q ™9“‰[ÈÄÌ7“‰[ÈĽßOb8ÔSÈÄÌ'“‰SÈDÈ™LœB&BÎdâ2r&§‰™o&·‰3™¸…L„œÉÄ-dâÉîñס¦2ñFÿ>‰áPS™ø•3™Ø¨Lļ3™Ø©LÄ<˜L *¿r&•‰˜/&;•‰ÿ>‰áPS™ˆù`2qP™ø•3™8¨LÄ|1™¸¨LüÊ™L\T&~åL&.*¿r&7•‰˜o&7•‰ÿÜc<ÔT&~åL&N*¿r&'•‰_9“‰“ÊįœÉÄIe"æ›ÉÄMeâWÎdâ¦2ñ+ËÄïü}¨3ÿ¹Ç_‡º‹CÝÈ“uˆCÝÞ?ÛÀC½Å¡¾yg2±›8Ôíý$ÆC=Å¡nä÷up¨›8Ô7_L&ö%u#Oâ<Ôã#u#?Û€CíâPgÎdâXâP·÷“µ‰CÝÞOb<Ô!u{?‰ñPoq¨ÛûÏ.ðPwq¨3g2qOq¨ÛûIŒ‡º‹CÝÞ?œÀC=Å¡nÏ?%þ:Ô.u{=‰¿õ‡:s&í#u{?‰ñP‡8Ôíù$þ:Ô[êö|ê&uæê!u'Ob8ÔKêþþÙêþ‡úæÉÄîâP÷÷“µ‰CÝÉïëàPwq¨o¾˜Lì[êNžÄp¨›8ÔüluˆC9“‰c‹CÝßOb<Ô.u?‰ñP/q¨ûûI ‡zÄ¡îï?»ÀC=ġΜÉÄmâP÷÷“õ‡º¿8‡ÚÄ¡îÏ?%þ:Ô!u=‰¿õ‡úæÆd¢5q¨ûûIŒ‡z‰CÝŸOâ<Ô¿Jüs¨ûóIüu¨»8Ô™v¨§8Ôƒ<‰áPoq¨Çûgx¨›8Ô™3™ØCêñ~ã¡vq¨ù}ê!õÍ“‰ã#õ Ob8Ô]êA~¶‡z‰C9“‰ó#õx?‰ñP‡8Ôãý$ÆC½Å¡ï'1ê&õxÿÙê)uæL&n‡z¼ŸÄx¨§8Ôãýà <Ô.õxþ)ñס^âPדøëPÛGꛓ‰ÖÅ¡ï'1ê-õx>‰¿u‡z<ŸÄ_‡zˆCùd‡ÚÄ¡žäIœ‡ºÄ¡žïŸmà¡îâPgÎdb_âPÏ÷“uˆC=ÉïëàPOq¨o¾˜LMêIžÄp¨‡8Ô“ülõ‡úæ“ÉÄÙÄ¡žï'1ê%õ|?‰áPï8Ôóý$ÆCÝÅ¡žï?»ÀCmâPgÎdâq¨çûIŒ‡ÚÄ¡žïNà¡q¨çóO‰¿õ‡z¾žÄ߇º‰C9“‰6Ä¡žï'ñ=Ô¿'øçPÏç“øëPwq¨çóIüu¨§8Ô™;Ô.µ‘'1ê&µ½¶‡zˆC9“‰}‹Cmï'1ê%µ‘ß×Á¡6q¨o¾˜L]j#Ob8ÔSj#?ÛÈC=?âPß|2™8»8Ôö~ã¡ÞâPÛûIŒ‡º‰Cmï'1ê!µ½ÿ쵋C9“‰{‰Cmï'1j‡ÚÞ?œÀC½Ä¡¶çŸã¡¶8Ôözê.uæL&Ú‡ÚÞOb<ÔMj{>‰¿õ‡ÚžOâ¯CmâPgîìP‡8ÔNžÄp¨»8ÔþþÙê)uæL&Ž8Ôþ~ã¡ÞâP;ù}j‡:s&LJÚÉ“µ‰Cíägp¨›8Ô7ŸL&Î!µ¿ŸÄp¨÷Gj?‰ñPwq¨ýý$ÆC=Å¡ö÷Ÿ]à¡q¨3g2qoq¨ýý$ÆCâPûû‡x¨·8ÔþüSâ¯CÝÄ¡öדøûPq¨3g2ÑLj?‰ñPwq¨ýù$þ:ÔSj>‰¿µ‹Cy°C½Ä¡ò$†C=Ä¡Ž÷Ï6ðP›8Ô7L&Ž&u¼ŸÄp¨×Gê ¿¯ƒCâPgÎdâ˜âPyávq¨ƒülu‡úæ“ÉÄ9Å¡Ž÷“u‡:ÞOb<ÔCêx?‰ñP›8Ôñþ³ <ÔKểLÜŸ8Ôñ~ã¡^âPÇû‡p¨í#u<ÿ”øëPwq¨ãõ$þ>ÔSêÌ™L4‡:ÞOb<ÔCêx>‰¿µ‰CÏ'ñסq¨3_ìPoq¨yážâP¯÷Ï6ðP»8Ô7L&Ž.õz?‰ñP7q¨ù}ê%uæL&‡z‘'1ê‡z‘ŸmÀ¡âPß|2™8Mêõ~ã¡îâP¯÷“õ‡z½ŸÄx¨]êõþ³ <Ô[êKÌ>v¨›8Ôëý$ÆC½Å¡^ïNà¡nâP¯çŸê!õz=‰¿µ‰C9“‰âP¯÷“õ‡z=ŸÄ_‡ÚÅ¡^Ï'ñס^âPgÎdbûˆC½É“µ‰C½ß?ÛÀCâPß|0™8†8Ôûý$ÆCÝÅ¡Þä÷up¨·8Ô7ßL&‡z“'1ê%õ&?Û€C=Å¡¾ùd2qº8Ôûý$ÆC=Ä¡Þï'1j‡z¿ŸÄx¨Cêýþ³‹<Ô?'øçP_¡öiìPwq¨÷ûI ‡Ú>âPï÷'ðPwq¨÷óO‰¿õ‡z¿žÄ߇ÚšΜÉD[âPï÷“µ‰C½ŸOâ¯CâPïç“øëPoq¨oÞ˜LlB&¶yá2r&»‰™&‡‰™/&—‰3™¸…LÌ|3™8„Llò$†C-dbæ“ÉÄ)d"äL&N!3ßL&n!!g2q ™9“‰[ÈDÈ7;ÔB&Þ|:;ÔB&fnL&š‰3™hB&BÎd¢ ™9“‰&d"äL&š‰íó~ã¡2ò`‡ZÈDÈ™LlB&fÞ˜LlB&¶FžÄp¨…L„œÉÄ.dbæƒÉÄ!dbæ‹ÉÄ%d"äL&n!3ßL&![#Oâ<ÔSÈÄÌ'“‰SÈDÈ™LœB&f¾™LÜB&BÎdâ2r&·‰7ÿ}8á2òÁµ‰™“‰&d"äL&š‰3™hB&BÎd¢ ™9“‰.dbkï'1j!!_ìP ™˜yc2± ™9“‰MÈÄÖÉ“µ‰3™8„LÌ|0™8„LÌ|1™¸„L„œÉÄ-dbæ›ÉÄ!dâÍŸÄp¨…L„œÉÄ)d"äL&N!3ßL&n!!g2q ™9‘‰?'øçP÷÷Ÿ]à¡2òɵ‰™“‰&d"äL&š‰3™hB&BÎd¢ ™˜¹3™èB&¶þ~ã¡2r&›‰™7&›‰3™Ø„Llƒ<‰áP ™˜ù`2q™9“‰CÈÄÌ“‰KÈDÈ™LÜB&f¾™LœB&Þü÷I ‡ZÈDÈ™LœB&BÎd¢ ™˜ùf2q ™9“‰[ÈÄ›ÿÜc<ÔB&BÞÙ¡2rc‡ZÈÄÌÉD2r&MÈDÈ™L4!!g2Ñ…LÌÜ™Lt!Ûx?‰ñP ™˜yc2± ™9“‰MÈDÈ™LlB&¶IžÄy¨‡‰™&‡‰3™8„LÌ|1™¸„L„œÉÄ-dbæ›ÉÄ)db›äI ‡ZÈDÈ™LœB&fnL&š‰™o&·‰™øû ·ïC=ßOb<ÔB&B>Ø¡2rg‡ZÈÄÌÉD2r&MÈDÈ™L4!3w&]ÈDÈ™Lt!Û|?‰áP7!3oL&6!!g2± ™9“‰MÈÄfäI ‡ZÈDÈ™LB&BÎdâ21óÅdâ2r&·‰™o&§‰ÍÈ“µ‰3™hB&fnL&š‰™o&·‰7ÿçÇy¨…L„¼³C-d"ä“j!!v¨…LÌܘL4!!g2Ñ„L„œÉD21sg2Ñ…L„œÉD2±ÙûIŒ‡ZÈDÈ™LlB&BÎdb2r&›‰ÍÉ“µ‰3™8„L„œÉÄ)dbæ‹ÉÄ%dbæ›ÉÄ-d"äL&N!›“'1j!!g2Ñ„LÌܘL4!3ßlú™xó~qœ‡ZÈDÈ;ÔB&BnìP ™ùb‡ZÈÄÌÉD2r&MÈÄÌÉD2r&]ÈDÈ™Lt!›¿ŸÄx¨…L„œÉÄ&d"äL&6!!g2± ™Ø‚<‰áP ™9“‰CÈÄÌ'“‰SÈÄÌ“‰[ÈÄÌ7“‰[ÈDÈ™LœB&¶ Ob8ÔB&BÎd¢ ™˜¹1™hB&Þü}À¡2òε‰Ov¨…L„ÜÙ¡2r&›‰™“‰&d"äL&º‰™;“‰.d"äL&º‰3™èB&¶x?‰ñP ™9“‰MÈDÈ™LlB&BÎdb2±-ò$†C-d"äL&!3ŸL&N!3ßL&n!!g2q ™9“‰SÈĶȓµ‰3™hB&fnL&š‰m½ŸÄx¨…L„|°C-d"䯵‰;ÔB&fÞ˜LlB&fnL&š‰™;“‰.d"äL&º‰3™èB&BÎd¢ ™ØÖûIŒ‡ZÈDÈ™LlB&BÎdb2r&»‰m“'1j!!g2q™˜ùd2q ™˜ùf2q ™9“‰[ÈÄ›¯“‰SÈÄÌ'“‰SÈDÈ™L4!37&MÈĶßOb<ÔB&B>Ù¡2rg‡ZÈDÈ™LlB&fÞ˜LlB&fnL&º‰™;“‰.d"äL&º‰3™èB&BÎd¢ ™ØöûIŒ‡ZÈDÈ™LlB&BÎdb21óÎdb2±È“µ‰3™8„LÌ|2™8…LÌ|3™¸…L„œÈÄŸü}¨o¾>L&N!3ŸL&N!37&MÈDÈ™L4!ûçý$ÆC-d"䯵‰;ÔB&BÎdb21óÆdb21sg2Ñ…L„œÉD2r&]ÈDÈ™Lt!!g2Ñ…LìŸ÷“µ‰3™Ø„L„œÉÄ.dbæÉÄ.dboäI ‡ZÈDÈ™LB&f>™LœB&f¾™LÜB&BnìP ™xóõa2q ™˜ùd2Ñ„LÌܘL4!!g2Ñ„Lìíý$ÆC-d"äε‰/v¨…L̼1™Ø„L„œÉÄ&dbæÎd¢ ™9“‰.d"äL&º‰3™èB&BÎ6è2±·÷“µ‰3™Ø„L̼3™Ø…L„œÉÄ.dbïäI ‡ZÈDÈ™LœB&f>™LœB&f¾™LÜB&BîìP ™xóõa2q ™˜¹1™hB&BÎd¢ ™9“‰&dbïï'1j!!v¨…L„œÉÄ&dbæÉÄ&d"äL&6!3w&]ÈDÈ™Lt!!g2Ñ…L„œÉD21ó`t™ØûûIŒ‡ZÈDÈ™LìB&fÞ™LìB&BÎdb2±ò$†C-dbæ“ÉÄ)d"äL&N!3ßL&n!!v¨…L¼ùú0™hB&fnL&š‰3™hB&BÎd¢ ™ØÇûIŒ‡ZÈDÈ;ÔB&fÞ˜LlB&BÎdb2r&›‰™;“‰.d"äL&º‰3™èB&BÎdb™˜y° :„Lìãý$ÆC-dbæÉÄ.d"äL&v!!g2± ™Ø'y硞B&f>™LœB&BÎdâ21óÍdâ2òŵ‰7_&MÈÄÌÉD2r&MÈÄÌÉD2±Ï÷“µ‰3™Ø„L̼1™Ø„L„œÉÄ&d"äL&6!3w&]ÈDÈ™Lt!!g2Ñ…LÌ<˜L !!gt™ØçûI ‡º ™˜yg2± ™9“‰]ÈDÈ™LìB&v#Ob8ÔB&BÎdâ2r&§‰™o&·‰ov¨…L¼ùú0™hB&fnL&š‰3™èB&fîL&º‰ÝÞOb<ÔB&fÞ˜LlB&BÎdb2r&›‰3™Ø„LÌÜ™Lt!!g2Ñ…L„œÉÄ21ó`21„L„œmÐ!db·÷“µ‰3™Ø…L„œÉÄ.d"äL&v!»“'1j!!g2q ™9“‰&dbæ›ÉÄ-dâÍ_‡ZÈDÈ™L4!37&MÈDÈ™Lt!3w&]ÈÄîï'1ü/® ™˜yc2± ™9“‰MÈDÈ™LlB&BÎdb21sg2Ñ…L„œÉD21ó`21„L„œÉÄ2r¶A‡‰ÝßOb<ÔB&BÎdb2r&»‰3™Ø…LìAžÄp¨…L„œÉÄ)dbæÆd¢ ™˜ù&2ñçÿê ¿¯ƒC-d"äL&š‰™“‰&d"äL&º‰™;“‰.dâÍÑj!!g2± ™9“‰MÈDÈ™LlB&BÎdb21sg2Ñ…L„œÉÄ21ó`21„L„œÉÄ2r¶A‡‰=ÞOb<ÔB&BÎdb2r&»‰3™Ø…Lì‹<‰áP ™9“‰SÈÄÌÉD2ñæ¿¿w†C-d"äj!!g2Ñ„LÌܘL4!!g2Ñ…LÌÜ™Lt!ûz?‰ñP ™9“‰MÈDÈ™LlB&BÎdb21óÎdb21sg2Ñ…LÌ<˜L !!g21„L„œÉÄ2r¶A‡‰}½ŸÄx¨…L„œÉÄ.d"äL&v!!g2q™Ø7yá2r&§‰™“‰&dbßï'1j!!ìP ™˜yc2Ñ„LÌܘL4!!g2Ñ…LÌÜ™Lt!û~?‰ñP ™9“‰MÈDÈ™LlB&BÎdb21óÎdb21sg21„LÌ<˜L !!g21„L„œÉÄ2r¶A‡‰}¿ŸÄx¨…L„œÉÄ.d"äL&v!3L&!LJ<‰áP ™9“‰SÈÄÌÉD2q|ÞOb<ÔB&BÎdb21óÆd¢ ™˜¹1™hB&fîL&º‰3™èB&ŽÏûIŒ‡ZÈDÈ™LlB&BÎdb2r&»‰™w&»‰™“‰!d"äL&†‰3™B&BÎdb™9Û CÈÄñy?‰ñP ™9“‰]ÈDÈ™LB&f>˜LB&ŽFžÄp¨…L„œÉÄ)dbæÆd¢ ™8ÚûIŒ‡ZÈDÈ™LlB&fÞ˜L4!37&]ÈÄÌÉD2r&]ÈÄÑÞOb<ÔB&BÎdb2r&›‰™w&»‰3™Ø…LÌ<˜L !!g21„L„œÉÄ2r&CÈDÈÙ½„Líý$ÆC-d"äL&v!3L&!!g2q™8:yá2r&MÈÄÌÉD2qô÷“µ‰3™Ø„L̼1™hB&fîL&º‰3™èB&BÎd¢ ™8úûIŒ‡ZÈDÈ™LlB&BÎdb21óÎdb2r&»‰™“‰!d"äL&†‰3™B&BÎdb™˜ùbô2qô÷“µ‰3™8„LÌ|0™8„L„œÉÄ!dâäI ‡ZÈÄÌÉD2r&MÈÄ1ÞOb<ÔB&BÎdb21óÆd¢ ™˜¹3™èB&BÎd¢ ™9“‰!dâï'1j!!g2± ™˜yg2± ™9“‰]ÈDÈ™LìB&fL&†‰3™B&BÎdb™9“‰KÈÄÌÛ —‰c¼ŸÄx¨…LÌ|0™8„L„œÉÄ!d"äL&!Ç$Oâ<Ô&dbæÆd¢ ™9“‰&dâ˜ï'1j!!g2± ™˜yc2Ñ…LÌÜ™Lt!!g2Ñ…LÌ<˜L !Ç|?‰ñP ™9“‰]ÈÄÌ;“‰]ÈDÈ™LìB&BÎdb21ó`21„L„œÉÄ2r&CÈÄÌ“‰KÈDÈÙ½„Lóý$†C=„LÌ|0™8„L„œÉÄ!d"äL&!‡‘'1j!!g2Ñ„L„œÉD2qØûIŒ‡ZÈDÈ™LlB&fÞ˜Lt!3w&]ÈDÈ™L !3&CÈÄaï'1j!3ïL&v!!g2± ™9“‰]ÈDÈ™LìB&fL&†‰3™B&BÎdâ21óÅdâ2r¶A/!‡½ŸÄx¨…L„œÉÄ!d"äL&!!g2q™8œ<‰áP ™9“‰&d"äL&º‰ÃßOb<ÔB&fÞ˜LlB&BÎd¢ ™˜¹3™èB&BÎdb™˜y0™B&?‰áq]ÈÄÌ;“‰]ÈDÈ™LìB&BÎdb2r&»‰™“‰!d"äL&†‰™/&—‰3™¸„L„œmÐKÈÄáï'1j!!g2q™9“‰CÈDÈ™LB&Ž Ob8ÔB&BÎd¢ ™˜¹3™èB&Žx?‰áP7!3oL&6!!g2Ñ…LÌÜ™Lt!!g21„LÌ<˜L !oþ‹>àP ™9“‰]ÈDÈ™LìB&BÎdb2r&‡‰™“‰!d"äL&.!3_L&.!!g2q ™9Û —‰#ÞOb<ÔB&BÎdâ2r&‡‰3™8„L‹<‰áP ™9“‰&dbæÎd¢ ™xóßß;á2r&›‰3™èB&fîL&º‰3™B&fL&†‰c½ŸÄx¨…L„œÉÄ.d"äL&v!!g2± ™˜ù`2q™˜y0™B&f¾˜L\B&BÎdâ2r&—‰³ z ™8ÖûIŒ‡ZÈDÈ™LB&BÎdâ2r&§‰c“'1j!!g2Ñ„LÌÜ™Lt!Ç~?‰ñP ™9“‰MÈÄÌ;“‰.dbæÎd¢ ™9“‰!dbæÁdb™8öûIŒ‡ZÈDÈ™LìB&BÎdb2r&‡‰™&‡‰™“‰KÈÄÌ“‰KÈDÈ™L\B&BÎdâ2r¶A/!Ç~?‰ñP ™9“‰CÈDÈ™LB&f>™LœB&Îyá2r&MÈÄÌÉD2q~ÞOb<ÔB&BÎdb21óÎd¢ ™˜¹3™èB&fL&†‰3™B&ÎÏûIŒ‡ZÈDÈ™LìB&BÎdb2r&‡‰™&‡‰™/&—‰3™¸„L„œÉÄ%d"äL&.!!gô2q~ÞOb<ÔB&BÎdâ2r&§‰™O&§‰³‘'1j!!g2Ñ„LÌÜ™Lt!g{?‰ñP ™9“‰]ÈÄÌ;“‰.dbæÎdb™˜y0™B&BÎdb™8ÛûIŒ‡ZÈDÈ™LìB&BÎdb21óÁdâ2r&‡‰™/&—‰3™¸„L„œÉÄ%d"äL&.!!gô2q¶÷“µ‰3™8„LÌ|2™8…L„œÉÄ)dâìäI ‡ZÈDÈ™Lt!3w&]ÈÄÙßOb<ÔB&BÎdb21óÎd¢ ™˜y0™B&BÎdb™9“‰!dâìï'1j!!g2± ™9“‰CÈÄÌ“‰CÈDÈ™LB&f¾˜L\B&BÎdâ2r&—‰3™¸„LÌ|³ z ™8ûûIŒ‡ZÈDÈ™LœB&f>™LœB&BÎdâ2qò$†C-dbæÎd¢ ™9“‰.dâï'1j!!g2± ™˜yg21„LÌ<˜L !!g21„L„œÉÄ%dâï'1j!!g2± ™˜ù`2q™9“‰CÈDÈ™LB&f¾˜L\B&BÎdâ2r&—‰3™¸…LÌ|³ z ™8ÇûIŒ‡ZÈÄÌ'“‰SÈDÈ™LœB&BÎdâ2qNò$ÎCíB&fîL&º‰3™èB&Îù~ã¡2r&»‰™w&CÈÄ̃ÉÄ2r&CÈÄÌ“‰KÈÄ9ßOb<ÔB&BÎdâ21óÁdâ2r&‡‰3™8„LÌ|1™¸„L„œÉÄ%d"äL&.!3ßL&n!!gô2qÎ÷“õ21óÉdâ2r&§‰3™8…LœFžÄp¨…L„œÉD2r&]ÈÄiï'1j!!g2± ™˜yg21„LÌ<˜L !!g2q ™˜ùb2q ™8íý$ÆC-dbæƒÉÄ!d"äL&!!g2q™9“‰CÈÄÌ“‰KÈDÈ™L\B&BÎdâ21óÍdâ2r¶Ao!§½ŸÄx¨…L„œÉÄ)d"äL&N!!g2q ™8<‰áP ™9“‰.d"äL&†‰ÓßOb<ÔB&fÞ™LìB&BÎdb™˜y0™B&BÎdâ21óÅdâ2qúûI ÿ‹B&f>˜LB&BÎdâ2r&‡‰3™8„LÌ|1™¸„L„œÉÄ%dbæ›ÉÄ-d"äL&n!!gô2qúûIŒ‡ZÈDÈ™LœB&BÎdâ2r&§‰3È“µ‰3™èB&fL&†‰3ÞOb8Ô]ÈÄÌ;“‰]ÈDÈ™L !3&CÈDÈ™L\B&f¾˜L\B&Þü}À¡2r&‡‰3™8„L„œÉÄ!d"äL&N!3_L&.!!g2q ™˜ùf2q ™9“‰[ÈDÈÙ½…Lœñ~ã¡2r&§‰3™8…L„œÉÄ)dâ\äI ‡ZÈDÈ™Lt!3&CÈÄ›ÿþÞµ‰3™Ø…L„œÉÄ21ó`21„L„œÉÄ%dbæ‹ÉÄ%dâ\ï'1j!!g2q™9“‰CÈDÈ™LB&f>™LœB&f¾˜L\B&f¾™LÜB&BÎdâ2r&·‰³ z ™8×ûIŒ‡ZÈDÈ™LœB&BÎdâ2r&MÈĹɓµ‰3™èB&fL&†‰s¿ŸÄx¨…L„œÉÄ.dbæƒÉÄ21ó`21„L„œÉÄ%dbæ‹ÉÄ%dâÜï'1j!!g2q™9“‰CÈDÈ™LœB&f>™LœB&f¾˜LÜB&f¾™LÜB&BÎdâ2r&·‰³ z ™8÷ûIŒ‡ZÈDÈ™LœB&BÎdâ21sc2Ñ„L´yá2r&]ÈÄ̃ÉÄ2Ñ>ï'1j!!g2q™˜ù`21„LÌ<˜L !3_L&.!!g2q ™hŸ÷“µ‰3™8„L„œÉÄ!d"äL&N!3ŸL&N!3ßL&n!!g2q ™9“‰[ÈDÈ™LÜB&BÎ6è-d¢}ÞOb<ÔB&BÎdâ2r&MÈÄÌÉD2Ñyá2r&]ÈÄ̃ÉÄ2ÑÚûIŒ‡ZÈDÈ™LB&f>˜L !3&—‰™/&—‰3™¸„L´ö~ã¡2r&‡‰3™8„LÌ|2™8…L„œÉÄ)dbæ›ÉÄ-d"äL&n!!g2q ™9“‰[ÈDÈßôø|„L´ö~ã¡2r&§‰™“‰&d"äL&š‰ÖÉ“µ‰3™B&fL&†‰ÖßOb<ÔB&BÎdâ21óÁdb™˜ùb2q ™9“‰KÈDÈ™L\B&Z?‰ñP ™9“‰CÈDÈ™LœB&f>™LœB&BÎdâ21óÍdâ2r&·‰3™¸…L„œÉÄ-d¢]÷ù°C-dbæ“ÉÄ)d"äL&š‰™“‰&d"äL&š‰6È“µ‰™“‰!d"äL&†‰6ÞOb<ÔB&BÎdâ21óÁdâ21óÅdâ2r&—‰3™¸…L´ñ~ã¡2r&‡‰™O&§‰3™8…L„œÉÄ)dbæ›ÉÄ-d"äL&n!!g2q ™ù[&þs‚ãõÿøî1j!3ŸL&N!37&MÈDÈ™L4!!g2Ñ„L´IžÄy¨CÈÄ̃ÉÄ2r&CÈD›ï'1j!!g2q™˜ù`2q ™˜ùb2q ™9“‰KÈÄÌ7“‰[ÈD›ï'1j!!g2q ™˜ùd2q ™9“‰SÈDÈ™LœB&f¾™LÜB&BÎdâ2r&·‰6_OâïC-d"äj!3ŸL&š‰™“‰&d"äL&š‰3™hB&š‘'1j!!g21„L„œÉÄ2Ñìý$ÆC-d"äL&!3L&.!3_L&.!!g2q ™˜ùf2q ™hö~ã¡21óÉdâ2r&§‰3™8…L„œÉÄ)dbæ›ÉÄ-d"äL&n!!ËÄß'ñÏ¡¶×“øûP ™ù`‡ZÈÄÌÉD2r&MÈDÈ™L4!!g2Ñ„L4'Ob8ÔB&BÎdb™9“‰KÈDó÷“µ‰™&‡‰3™¸„LÌ|1™¸„L„œÉÄ-dbæ›ÉÄ-d¢ùûI ‡z ™˜ùd2q ™9“‰SÈDÈ™LœB&BÎdâ21óÍdâ2r&·‰æÏ?%þ:ÔB&BÞÙ¡2òɵ‰™“‰&d"äL&š‰3™hB&BÎd¢ ™hAžÄp¨…L„œÉÄ21óÅdâ2Ñâý$†C=„LÌ|0™8„L„œÉÄ%dbæ‹ÉÄ%d"äL&n!3ßL&n!oþ‹>àP ™9“‰SÈDÈ™LœB&BÎdâ2r&MÈÄÌ7“‰[ÈDÈß2ñçÿêxþ)ñס2òÁµ‰;ÔB&fnL&š‰3™hB&BÎd¢ ™9“‰&d¢-ò$†C-d"äL&†‰™/&—‰7ÿý½3j!!g2q™9“‰KÈÄÌ“‰KÈDÈ™LÜB&f¾™LÜB&Úz?‰ñP ™9“‰SÈDÈ™LœB&BÎdâ21sc2Ñ„LÌ|3™¸…L´õþáj!!ïìP ™ùd‡ZÈDÈj!37&MÈDÈ™L4!!g2Ñ„L„œÉD2Ñ6yá2r&CÈÄÌ“‰KÈDÛï'1j!!g2q™˜ùd2q ™˜ùb2q ™9“‰[ÈÄÌ7“‰[ÈDÛï'1j!!g2q ™9“‰SÈDÈ™L4!37&MÈÄÌ÷[&þžàŸC½ß?œÀC-d"äƒj!!7v¨…L„<Ø¡21sc2Ñ„L„œÉD2r&MÈÄÌÉD2Ñ?äI ‡ZÈDÈ™L !3_L&.!ýó~ã¡2r&§‰™O&—‰™/&—‰™o&·‰3™¸…LôÏûIŒ‡ZÈDÈ™LœB&BÎdâ2r&MÈÄÌÉD2Ñ?ï'1j!!ïìP ™ùd‡ZÈDÈj!!_ìP ™˜¹1™hB&BÎd¢ ™9“‰.dbæÎd¢ ™è<‰áP ™9“‰!dbæ‹ÉÄ%d¢·÷“µ‰3™8…LÌ|2™¸„LÌ|1™¸…LÌ|3™¸…L„œÉÄ-d¢·÷“µ‰3™8…L„œÉÄ)dbæÆd¢ ™9“‰&d¢·÷“µ‰v¨…L„ÜØ¡2ò`‡ZÈDÈ™LlB&fnL&š‰3™hB&fîL&º‰3™èB&z'Ob8ÔB&BÎdâ21óÅdâ2ÑûûIŒ‡ZÈDÈ™LœB&f>™L\B&f¾™LÜB&BÎdâ2r&·‰ÞßOb<ÔB&BÎdâ2r&MÈÄÌÉD2r&MÈDïï'1j!!ŸìP ™¹³C-d"ä‹j!3oL&6!37&MÈDÈ™Lt!3w&]ÈDÈ™Lt!}'1j!3_L&.!!g2q ™èãý$ÆC-d"äL&N!3ŸL&n!3ßL&n!!g2q ™9‘‰û#d¢÷“µ‰3™8…LÌܘL4!!g2Ñ„L„œÉD2ÑÇûIŒ‡ZÈDÈj!!v¨…L„œÉÄ&dbæÉÄ&dbæÆd¢ ™˜¹3™èB&BÎd¢ ™9“‰.d¢Oò$ÎC½„LÌ|1™¸„L„œÉÄ%d¢Ï÷“µ‰3™8…LÌ|2™¸…LÌ|3™¸…L„œÉÄ-dâÍï1j!3ŸL&N!!g2Ñ„LÌܘL4!!g2Ñ„L„œÉD2ÑçûIŒ‡ZÈDÈj!!_ìP ™˜yc2± ™9“‰MÈÄÌÉD21sg2Ñ…L„œÉD2r&]ÈD7ò$†C-d"äL&.!!g2q ™èö~ã¡2r&§‰™O&·‰™o&·‰™øs‚õjŸÆµ‰™O&§‰™“‰&d"äL&š‰3™hB&BÎd¢ ™èö~ã¡2ò`‡ZÈDÈ™LlB&fÞ˜LlB&BÎdb21sg2Ñ…L„œÉD2r&]ÈDÈ™Lt!ÝÉ“µ‰3™¸„L„œÉÄ-d¢ûûIŒ‡ZÈÄÌ'“‰SÈDÈ™LÜB&f¾™LÜB&BîìP ™xóß{ ‡ZÈÄÌ'“‰&dbæÆd¢ ™9“‰&d"äL&š‰3™hB&º¿ŸÄx¨…L„|±C-dbæÉÄ&d"äL&6!!g2± ™˜¹3™èB&BÎd¢ ™9“‰.d"äL&º‰äI ‡ZÈDÈ™L\B&f¾™LÜB&z¼ŸÄp¨§‰™O&§‰3™¸…LÌ|3™¸…L„<Ø¡2ñæ¿÷µ‰™“‰&d"äL&š‰3™hB&BÎd¢ ™9“‰.d¢ÇûIŒ‡ZÈDÈ™LlB&fÞ˜LlB&BÎdb2r&›‰™;“‰.d"äL&º‰3™èB&BÎd¢ ™è‹<‰áP ™9“‰KÈÄÌ7“‰[ÈÄ›ÿþÞµ‰3™8…L„œÉÄ-dbæ›ÉÄ-d"ä‹j!oþ{áP ™˜¹1™hB&BÎd¢ ™9“‰&d"äL&š‰™;“‰.d¢¯÷“µ‰™7&›‰3™Ø„L„œÉÄ&d"äL&6!3w&]ÈDÈ™Lt!!g2Ñ…L„œÉÄ2Ñ7yá2r&—‰™o&·‰¾ßOb<ÔB&BÎdâ21sc2q ™˜ùf2q ™ùf‡ZÈÄ›ÿÞc8ÔB&fnL&š‰3™hB&BÎd¢ ™9“‰.dbæÎd¢ ™èûý$†CÝ„L̼1™Ø„L„œÉÄ&d"äL&6!!g2± ™˜¹3™èB&BÎd¢ ™9“‰.dbæÁdb™ò$†C-d"äL&.!3ßL&n!ãó~ã¡2r&MÈÄÌÉÄ-dbæ›ÉÄ-dâͶ‡ZÈDÈj!37&MÈDÈ™L4!!g2Ñ„L„œÉD21sg2Ñ…LŒÏûIŒ‡ZÈDÈ™LlB&BÎdb2r&›‰3™Ø„LÌÜ™Lt!!g2Ñ…L„œÉÄ21ó`21„LŒFžÄp¨…L„œÉÄ%dbæ›ÉÄ-db´÷“µ‰3™hB&fnL&n!3ßD&þœàŸCÝÈÏ6àP ™y°C-dbæÆd¢ ™9“‰&d"äL&š‰™;“‰.d"äL&º‰ÑÞOb<ÔB&BÎdb2r&›‰3™Ø„L„œÉÄ.dbæÎd¢ ™9“‰.dbæÁdb™9“‰!dbtò$†C-d"äL&n!3ßL&n!£¿ŸÄx¨…L„œÉD21sc2q ™xóß'1j!!ïìP ™ùb‡ZÈÄÌÉD2r&MÈDÈ™Lt!3w&]ÈDÈ™Lt!£¿ŸÄx¨…L„œÉÄ&d"äL&6!!g2± ™˜yg2± ™˜¹3™èB&BÎdb™˜y0™B&BÎdb™ƒ<‰áP ™˜ùf2q ™9“‰[ÈÄï'1j!!g2Ñ„LÌ܈Lüý%ó÷¡äI ‡ZÈDÈ;ÔB&BÎdb21sc2Ñ„L„œÉD21sg2Ñ…L„œÉD2r&]ÈÄï'1j!!g2± ™9“‰MÈDÈ™LìB&fÞ™LìB&fîL&º‰™“‰!d"äL&†‰3™B&Æ$Oâ<Ô[ÈÄÌ7“‰[ÈDÈ™LÜB&Æ|?‰ñP ™9“‰&dbæfìP ™“<‰áP ™ùd‡ZÈÄÌ“‰MÈÄÌÉD2r&]ÈÄÌÉD2r&]ÈDÈ™Lt!c¾ŸÄx¨…L„œÉÄ&d"äL&6!3ïL&v!!g2± ™˜¹3™B&fL&†‰3™B&BÎdb™FžÄp¨…L„œÉÄ-d"äL&n!ÃÞOb<ÔB&BÎd¢ ™˜¹9;ÔB&†‘'1j!!g2± ™˜yc2± ™˜¹1™hB&fîL&º‰3™èB&BÎd¢ ™9“‰.dbØûIŒ‡ZÈDÈ™LlB&BÎdb21óÎdb2r&»‰™“‰!d"äL&†‰3™B&BÎdb™NžÄp¨…L„œÉÄ-d"äD&®‰áï'1j!37&MÈDȃj!ÃÉ“µ‰3™Ø„L̼1™Ø„LÌܘLt!3w&]ÈDÈ™Lt!!g2Ñ…L„œÉD21üý$ÆC-d"äL&6!3ïL&v!!g2± ™9“‰]ÈÄ̃ÉÄ2r&CÈDÈ™L !!g21„LŒ Ob8ÔB&BÎdâ2ñæ?÷µ‰™O&MÈÄÌÉD2òŵ‰äI ‡ZÈDÈ™LlB&fÞ˜LlB&fîL&º‰3™èB&BÎd¢ ™9“‰.d"äL&†‰ï'1j!!g2± ™˜yg2± ™9“‰]ÈDÈ™LìB&fL&†‰3™B&BÎdb™9“‰!db,ò$†C-d"äL&n!oþsñP ™˜¹1™hB&BÎd¢ ™ùf‡ZÈÄXäI ‡ZÈDÈ™LlB&fÞ˜LlB&fîL&º‰3™èB&BÎd¢ ™9“‰.dbæÁdb™ëý$ÆC-dbæÉÄ.d"äL&v!!g2± ™9“‰]ÈÄ̃ÉÄ2r&CÈDÈ™L !!g2q ™›<‰áP ™9“‰[ÈÄ›ÿÜc<ÔB&fnL&š‰3™hB&fîv¨…LŒMžÄp¨…L„œÉÄ&dbæÉÄ&dbæÎd¢ ™9“‰.d"äL&º‰3™B&fL&†‰±ßOb8Ô]ÈÄÌ;“‰]ÈDÈ™LìB&BÎdb2r&»‰™“‰!d"äL&†‰3™B&f¾˜L\B&®yá2r&·‰7ÿ¹Çx¨…LÌܘL4!!g2Ñ…LÌÜ;ÔB&®yá21óÆdb2r&›‰™;“‰.d"äL&º‰3™èB&BÎdb™˜y0™B&®ÏûIŒ‡ZÈDÈ™LìB&BÎdb2r&»‰3™Ø…LÌ<˜L !!g21„L„œÉÄ%dbæ‹ÉÄ%dâjäI ‡ZÈDÈ™LÜB&Þüçã¡21sc2Ñ„L„œÉD21sïìP ™¸yç¡nB&fÞ˜LlB&BÎdb21sg2Ñ…L„œÉD2r&]ÈÄ̃ÉÄ2r&CÈÄÕÞOb<ÔB&BÎdb2r&»‰3™Ø…L„œÉÄ!dbæÁdb™9“‰!dbæ‹ÉÄ%d"äL&.!W'Ob8ÔB&BNdâ×LøÏ¡¾¸ïcìP ™˜¹1™hB&BÎd¢ ™˜¹v¨…L¼ù‰3™Ø„L„œÉÄ&dbæÎd¢ ™9“‰.d"äL&†‰™“‰!d"äL&†‰«¿ŸÄx¨…L„œÉÄ.d"äL&v!!g2± ™˜ù`2q™˜y0™B&BÎdâ21óÅdâ2r&—‰k'1j!oþó³ <ÔB&BîìP ™˜¹1™hB&BÎd¢ ™˜¹3™Ø„L¼ù‰3™Ø„L„œÉÄ.dbæÎd¢ ™9“‰.dbæÁdb™9“‰!d"äL&†‰k¼ŸÄx¨…L„œÉÄ.d"äL&v!!g2q™˜ù`2q™˜y0™B&f¾˜L\B&BÎdâ2r&—‰k’'ñ=Ô¿¿dþ>Ôóý³ <ÔB&BìP ™˜¹1™hB&BÎd¢ ™˜¹3™Ø„L\“<‰áP ™9“‰MÈÄÌ;“‰]ÈÄÌÉD2r&CÈÄ̃ÉÄ2r&CÈDÈ™L !×|?‰ñP ™9“‰]ÈDÈ™LìB&f>˜LB&BÎdâ21ó`2q ™˜ùb2q ™9“‰KÈDÈ™L\B&.#Ob8ÔB&BÞÙ¡2òŵ‰™“‰&d"äL&º‰™;“‰MÈÄeäI ‡ZÈDÈ™LìB&fÞ™LìB&fîL&º‰™“‰!d"äL&†‰3™B&BÎdb™¸ìý$ÆC-d"äL&v!!g2q™˜ù`2q™9“‰CÈÄÌ“‰KÈDÈ™L\B&BÎdâ2r&—‰ËÉ“µ‰v¨…L„œÉÄ&dbæÆd¢ ™˜¹3™èB&BÎdb2q9yá2r&»‰™w&»‰™;“‰!dbæÁdb™9“‰!d"äL&†‰3™B&.?‰ñP ™9“‰]ÈÄÌ“‰CÈDÈ™LB&BÎdâ21óÅdâ2r&—‰3™¸„L„œÉÄ%dâ ò$†C-d"ä“j!3oL&6!37&]ÈÄÌÉD2r&›‰+È“µ‰3™Ø…L̼3™Ø…LÌ<˜L !!g21„L„œÉÄ2r&CÈDÈ™L\B&®x?‰ñP ™9“‰CÈÄÌ“‰CÈDÈ™LB&BÎdâ21óÅdâ2r&—‰3™¸„L„œÉÄ%dâZäI ‡ZÈDÈj!3oL&6!3w&]ÈDÈ™Lt!!g2± ™¸yá2r&»‰™w&»‰™“‰!d"äL&†‰3™B&BÎdb™˜ùb2q ™¸ÖûIŒ‡ZÈÄÌ“‰CÈDÈ™LB&BÎdâ2r&‡‰™/&—‰3™¸„L„œÉÄ%d"äL&n!×&Ob8ÔB&BîìP ™˜yc2± ™˜¹3™èB&BÎd¢ ™˜y0™Ø„L\›<‰áP ™9“‰]ÈÄÌ;“‰]ÈÄ̃ÉÄ2r&CÈDÈ™L !!g2q ™˜ùb2q ™¸öûI ‡z™˜ù`2q™9“‰CÈDÈ™LB&BÎdâ21óÅdâ2r&—‰3™¸„LÌ|3™¸…LÜò$†C-d"äÁµ‰™7&›‰™;“‰.d"äL&†‰™“‰MÈÄý!Ob8ÔB&fÞ™LìB&BÎdb21ó`21„L„œÉÄ2r&CÈDÈ™L\B&f¾˜L\B&îÏûIŒ‡ZÈDÈ™LB&BÎdâ2r&‡‰3™8„LÌ|1™¸„L„œÉÄ%d"äL&n!3ßL&n!w#Ob8ÔB&B¾Ø¡21óÆdb21sg2Ñ…L„œÉÄ21ó`2± ™¸yç¡îB&fÞ™LìB&BÎdb21ó`21„L„œÉÄ2r&CÈÄÌ“‰KÈDÈ™L\B&îö~ã¡2r&‡‰3™8„L„œÉÄ!d"äL&N!3_L&.!!g2q ™˜ùf2q ™9“‰[ÈÄÝÉ“µ‰3™Ø„L̼1™Ø„LÌÜ™Lt!!g21„LÌ<˜LlB&Þü÷I ‡ZÈDÈ™LìB&BÎdb21ó`21„L„œÉÄ2r&—‰™/&—‰3™¸„LÜýý$ÆC-d"äL&!!g2q™9“‰CÈÄÌ'“‰SÈÄÌ“‰KÈDÈ™LÜB&f¾™LÜB&BÎdâ2qò$†C-dbæÉÄ&d"äL&6!3w&]ÈDÈ™L !3&»‰7ÿ}á2r&»‰3™8„LÌ<˜L !!g21„LÌ|1™¸„L„œÉÄ%d"äL&.!÷x?‰ñP ™9“‰CÈDÈ™LB&BÎdâ21óÉdâ21óÅdâ21óÍdâ2r&·‰3™¸…LÜ“<‰óP7!3oL&6!!g2± ™˜¹3™èB&BÎdb™˜y0™Ø…LÜ“<‰áP ™9“‰]ÈÄÌ“‰CÈÄ̃ÉÄ2r&—‰™/&—‰3™¸„L„œÉÄ%dâžï'1j!!g2q™9“‰CÈÄÌ'“‰SÈDÈ™LœB&f¾˜LÜB&f¾™LÜB&BÎdâ2r&·‰ÛÈ“µ‰3™Ø„L„œÉÄ&dbæÎd¢ ™9“‰!dbæÁdb2qyá2r&‡‰™&‡‰™“‰!dbæ‹ÉÄ%d"äL&.!!g2q ™9“‰KÈÄmï'1j!!g2q™9“‰SÈÄÌ'“‰SÈDÈ™LœB&f¾™LÜB&BÎdâ2r&·‰3™¸…LÜNžÄp¨…L„œÉÄ&d"äL&v!3w&]ÈÄ̃ÉÄ2r&»‰ÛÉ“µ‰3™8„LÌ|0™8„LÌ<˜L\B&f¾˜L\B&BÎdâ2r&—‰3™¸„LÜþ~ã¡2r&‡‰™O&§‰3™8…L„œÉÄ)dbæ›ÉÄ-d"äL&n!!g2q ™9“‰[ÈÄäI ‡ZÈDÈ™LlB&fÞ™LìB&fîL&†‰™“‰!d"äL&v!w'1j!!g2q™˜ù`2q™˜ùb2q ™9“‰KÈDÈ™L\B&BÎdâ2r&·‰;ÞOb<ÔB&BÎdâ21óÉdâ2r&§‰3™8…LÌ|3™¸…L„œÉÄ-d"äL&n!!g2q ™¸yá2r&›‰™w&»‰™“‰!d"äL&†‰3™Ø…LÜ‹<‰áP ™9“‰CÈÄÌ“‰CÈÄÌ“‰KÈDÈ™L\B&BÎdâ2r&—‰™o&·‰{½ŸÄx¨…LÌ|2™8…L„œÉÄ)d"äL&N!!g2q ™˜ùf2q ™9“‰[ÈDÈ™LÜB&BNdbû™¸7yá2r&›‰™w&»‰™“‰!d"äL&†‰™/&»‰{“'1j!!g2q™˜ù`2q™˜ùb2q ™9“‰KÈDÈ™L\B&BÎdâ21óÍdâ2qï÷“õ21óÉdâ2r&§‰3™8…L„œÉÄ)dbæ›ÉÄ-d"äL&n!!g2q ™xóï{üu¨¹L<Ñ¿Ob8Ô\&bÎdbã2òÎdbç2ò`21¸LÄœÉÄÅe"ä‹ÉÄÎebæ¿Ob8Ô\&B>˜L\&bÎdâà2òÅdââ2s&—‰˜3™¸¸LÄœÉÄÍe"ä›ÉÄÍeâÍï1j.1g2qr™ˆ9“‰“ËDÌ™Lœ\&bÎdâä2òÍdâæ2s&7—‰˜™øu‚uæß÷øëPwq¨yáq¨Ûûgx¨·8Ô7ïL&v‡º½ŸÄx¨§8Ôü¾u‡úæ‹ÉľġnäIœ‡z|Ä¡nägp¨]êÌ™LKêö~ã¡6q¨ÛûIŒ‡:Ä¡nï'1ê-u{ÿÙê.uæL&î)u{?‰ñPwq¨Ûû‡x¨§8Ôíù§Ä_‡ÚÅ¡n¯'ñ÷¡^âPgÎd¢}Ä¡nï'1ꇺ=ŸÄ_‡z‹CÝžOâ¯CÝġμ³C=Ä¡îäI ‡z‰CÝß?Û€CÝ?âPß¼3™Ø]êþ~ã¡6q¨;ù}ê.õÍ“‰}‹CÝÉ“u‡º“ŸmÀ¡q¨3g2qlq¨ûûIŒ‡ÚÅ¡îï'1ê%u?‰áPï8Ôýýgx¨‡8Ô™3™¸Mêþ~ã¡âP÷÷'ðP›8Ôýù§Ä_‡:Ä¡î¯'ñ÷¡ÞâPßܘL´&u?‰ñP/q¨ûóI ‡úçO‰u>‰¿u‡:óÁõ‡z'1ê-õxÿlu‡:s&{ˆC=ÞOb<Ô.õ ¿¯ƒC=Ä¡¾ùb2q|Ä¡äI ‡º‹C=ÈÏ6àP/q¨3g2q~Ä¡ï'1ê‡z¼ŸÄx¨·8Ôãý$ÆCÝÄ¡ï?»ÀC=šΜÉÄíâP÷“õ‡z¼8‡ÚÅ¡Ï?%þ:ÔKêñzjûˆC}sc2Ѻ8Ôãý$ÆC½Å¡Ï'ñסnâPç“øëPq¨3ŸìP›8Ô“<‰óP÷8Ôóý³ <Ô]êÌ™LìKêù~ã¡q¨'ù}ê)õÍ“‰£‰C=É“õ‡z’ŸmÀ¡ÞâPß|2™8›8Ôóý$ÆC½Ä¡žï'1êý‡z¾ŸÄx¨»8Ôóýgx¨MêÌ™LÜ!õ|?‰ñP›8Ôóýà <Ô!õ|þ)ñסÞâPÏדøûP7q¨3g2ц8Ôóý$ÎCÝ>q¨çóIüu¨»8Ôóù$þ:ÔSêÌj‡ÚÈ“u‡ÚÞ?ÛÀC=ġΜÉľš¶÷“õ‡ÚÈïëàP›8Ô7_L&Ž.µ‘'1ê)µ‘Ÿm䡞q¨o>™Lœ]j{?‰ñPoq¨íý$ÆCÝÄ¡¶÷“õ‡ÚÞv‡ÚšΜÉĽġ¶÷“µ‹CmïNà¡^âPÛóO‰ñPÛGj{=‰¿u‡:s&mŠCmï'1ê&µ=ŸÄ_‡zˆCmÏ'ñס6q¨3wv¨Cj'Ob8Ô]jÿlõ‡:s&ÇGj?‰ñPoq¨ü¾µ‹C9“‰cˆCíäI ‡ÚÄ¡vò³ 8ÔMê›O&ç‡ÚßOb8Ôû#µ¿ŸÄx¨»8Ôþ~㡞âPûûÏ.ðP‡8Ô™3™¸·8Ôþ~ã¡q¨ýýà <Ô[jþ)ñסnâPûëIü}¨‡8Ô™3™h&µ¿ŸÄx¨»8Ôþ|ê)µ?ŸÄ_‡ÚÅ¡Î<Ø¡^âPyáâPÇûgx¨Mê›&G‡:ÞOb8Ôë#uß×Á¡q¨3g2qLq¨ƒ<‰áP»8ÔA~¶‡º‹C}óÉdâœâPÇûIŒ‡º‰Cï'1ê!u¼ŸÄx¨MêxÿÙê%uæo™8>Ÿ8Ôñ~ã¡^âPÇû‡p¨í#u<ÿ”øëPwq¨ãõ$þ>ÔSêÌ™L4‡:ÞOb<ÔCêx>‰¿µ‰CÏ'ñסq¨3_ìPoq¨yážâP¯÷Ï6ðP»8Ô7L&Ž.õz?‰ñP7q¨ù}ê%uæL&‡z‘'1ê‡z‘ŸmÀ¡âPß|2™8Mêõ~ã¡îâP¯÷“õ‡z½ŸÄx¨]êõþ³ <Ô[êKÌ>v¨›8Ôëý$ÆC½Å¡^ïNà¡nâP¯çŸê!õz=‰¿µ‰C9“‰âP¯÷“õ‡z=ŸÄ_‡ÚÅ¡^Ï'ñס^âPgÎdbûˆC½É“µ‰C½ß?ÛÀCâPß|0™8†8Ôûý$ÆCÝÅ¡Þä÷up¨·8Ô7ßL&‡z“'1ê%õ&?Û€C=Å¡¾ùd2qº8Ôûý$ÆC=Ä¡Þï'1j‡z¿ŸÄx¨Cêýþ³‹{¨OðÏ¡¾BíÓØ¡îâPï÷“µ}Ä¡ÞïNà¡îâPïçŸê)õ~=‰¿µ‹C9“‰¶Ä¡Þï'1j‡z?ŸÄ_‡:Ä¡ÞÏ'ñסÞâPß¼1™Ø„Llò$†C-d"äL&v!3L&!3_L&.!!g2q ™˜ùf2q™Ø>äI ‡ZÈÄÌ'“‰SÈDÈ™LœB&f¾™LÜB&BÎdâ2r&·‰ov¨…LlW¨}:;ÔB&fnL&š‰3™hB&BÎd¢ ™9“‰&d"äL&š‰íó~ã¡2ò`‡ZÈDÈ™LlB&fÞ˜LlB&¶FžÄp¨…L„œÉÄ.dbæƒÉÄ!dbæ‹ÉÄ%d"äL&n!3ßL&![#Oâ<ÔSÈÄÌ'“‰SÈDÈ™LœB&f¾™LÜB&BÎdâ2r&·‰­½ÿ쵉v¨…LÌܘL4!!g2Ñ„L„œÉD2r&MÈDÈ™Lt![{?‰ñP ™ùb‡ZÈÄÌ“‰MÈDÈ™LlB&¶NžÄp¨…L„œÉÄ!dbæƒÉÄ!dbæ‹ÉÄ%d"äL&n!3ßL&!oþû$†C-d"äL&N!!g2q ™˜ùf2q ™9“‰[ÈDÈß2ñ÷ÿêþþ³ <ÔB&B>Ù¡21sc2Ñ„L„œÉD2r&MÈDÈ™L4!3w&]ÈÄÖßOb<ÔB&BÎdb21óÆdb2r&›‰m'1j!3L&!!g2q™˜ùb2q ™9“‰[ÈÄÌ7“‰SÈÄ›ÿ>‰áP ™9“‰SÈDÈ™L4!3ßL&n!!g2q ™ØÆûIŒ‡ZÈDÈ;;ÔB&BnìP ™˜¹1™hB&BÎd¢ ™9“‰&d"äL&º‰™;“‰.dbï'1j!3oL&6!!g2± ™9“‰MÈÄ6É“8õ21óÁdâ2r&‡‰™/&—‰3™¸…LÌ|3™8…Ll“<‰áP ™9“‰SÈÄÌÉD21óÍdâ2ò·Lüçn߇z¾ŸÄx¨…L„|°C-d"ä剙“‰&d"äL&š‰3™hB&fîL&º‰3™èB&¶ù~ánB&fÞ˜LlB&BÎdb2r&›‰ÍÈ“µ‰3™8„L„œÉÄ!dbæ‹ÉÄ%d"äL&n!3ßL&N!›‘'1j!!g2Ñ„LÌܘL4!3ßL&n!›½ŸÄx¨…L„¼³C-d"ä“j!!v¨…LÌܘL4!!g2Ñ„L„œÉD21sg2Ñ…L„œÉD2ñæ¿÷µ‰3™Ø„L„œÉÄ&d"äL&6!›“'1j!!g2q™9“‰SÈÄÌ“‰KÈÄÌ7“‰[ÈDÈ™LœB&6'Ob8ÔB&BÎd¢ ™˜¹1™hB&f¾Ù*ô2±ùûIŒ‡ZÈDÈ;ÔB&BnìP ™ùb‡ZÈÄÌÉD2r&MÈÄÌÉD2r&]ÈDÈ™Lt!oþ{áP ™9“‰MÈDÈ™LlB&BÎdb2±yá2r&‡‰™O&§‰™/&·‰™o&·‰3™8…LlAžÄp¨…L„œÉD21sc2Ñ„Llñ~ã¡2òε‰Ov¨…L„ÜÙ¡2r&›‰™“‰&d"äL&º‰™;“‰.d"äL&º‰3™èB&Þü÷á2r&›‰3™Ø„L„œÉÄ&db[äI ‡ZÈDÈ™LB&f>™LœB&f¾™LÜB&BÎdâ2r&§‰m‘'1j!!g2Ñ„LÌܘL4!Ûz?‰ñP ™ù`‡ZÈDÈj!!v¨…L̼1™Ø„LÌܘL4!3w&]ÈDÈ™Lt!!g2Ñ…L„œÉD2ñæ¿÷µ‰3™Ø„L„œÉÄ&d"äL&v!Û&Ob8ÔB&BÎdâ21óÉdâ21óÍdâ2r&·‰7ß&§‰™O&§‰3™hB&fnL&š‰m¿ŸÄx¨…L„|²C-d"äε‰3™Ø„L̼1™Ø„LÌܘLt!3w&]ÈDÈ™Lt!!g2Ñ…L„œÉD2±í÷“µ‰3™Ø„L„œÉÄ&dbæÉÄ.dbÿ'1j!!g2q™˜ùd2q ™˜ùf2q ™9‘‰?'øûPß|˜LœB&f>™LœB&fnL&š‰3™hB&öÏûIŒ‡ZÈDÈj!!v¨…L„œÉÄ&dbæÉÄ&dbæÎd¢ ™9“‰.d"äL&º‰3™èB&BÎd¢ ™Ø?ï'1j!!g2± ™9“‰]ÈÄÌ;“‰]ÈÄÞÈ“µ‰3™8„LÌ|2™8…LÌ|3™¸…L„ÜØ¡2ñæûÃdâ21óÉd¢ ™˜¹1™hB&BÎd¢ ™ØÛûIŒ‡ZÈDÈj!!_ìP ™˜yc2± ™9“‰MÈÄÌÉD2r&]ÈDÈ™Lt!!g2Ñ…L„œmÐ!dboï'1j!!g2± ™˜yg2± ™9“‰]ÈÄÞÉ“µ‰3™8…LÌ|2™8…LÌ|3™¸…L„ÜÙ¡2ñæûÃdâ21sc2Ñ„L„œÉD2r&MÈÄÞßOb<ÔB&BìP ™9“‰MÈÄÌ“‰MÈDÈ™LlB&fîL&º‰3™èB&BÎd¢ ™9“‰.dbæÁ6è2±÷÷“µ‰3™Ø…L̼3™Ø…L„œÉÄ.dbäI ‡ZÈÄÌ'“‰SÈDÈ™LœB&f¾™LÜB&BìP ™xóýa2Ñ„LÌܘL4!!g2Ñ„L„œÉD2±÷“µ‰/v¨…L̼1™Ø„L„œÉÄ&d"äL&6!3w&]ÈDÈ™Lt!!g2Ñ…L„œÉÄ21ó`t™ØÇûIŒ‡ZÈÄÌ;“‰]ÈDÈ™LìB&BÎdb2±Oò$ÎC=…LÌ|2™8…L„œÉÄ)dbæ›ÉÄ-d"ä‹j!o¾?L&š‰™“‰&d"äL&š‰™;“‰.dbŸï'1j!!g2± ™˜yc2± ™9“‰MÈDÈ™LlB&fîL&º‰3™èB&BÎd¢ ™˜y0™B&BÎ6è2±Ï÷“u21óÎdb2r&»‰3™Ø…LìFžÄp¨…L„œÉÄ)d"äL&N!3ßL&n!!ßìP ™xóýa2Ñ„LÌܘL4!!g2Ñ…LÌÜ™Lt!»½ŸÄx¨…L̼1™Ø„L„œÉÄ&d"äL&6!!g2± ™˜¹3™èB&BÎd¢ ™9“‰!dbæÁdb™9Û CÈÄ›ÿÞc8ÔB&BÎdb2r&»‰3™Ø…LìNžÄp¨…L„œÉÄ)d"äL&š‰™o&·‰7ÿý}j!!g2Ñ„LÌܘL4!!g2Ñ…LÌÜ™Lt!»¿ŸÄð¿¸&dbæÉÄ&d"äL&6!!g2± ™9“‰MÈÄÌÉD2r&]ÈÄ̃ÉÄ2r&CÈDÈÙB&Þü÷á2r&»‰3™Ø…L„œÉÄ.dbò$†C-d"äL&N!37&MÈÄÌ7‘‰?'øçPù}j!!g2Ñ„LÌܘL4!!g2Ñ…LÌÜ™Lt!{¼ŸÄx¨…L„œÉÄ&d"äL&6!!g2± ™9“‰]ÈÄÌÉD2r&CÈÄ̃ÉÄ2r&CÈDÈÙB&Þü÷á2r&»‰3™Ø…L„œÉÄ.db_äI ‡ZÈDÈ™LœB&fnL&š‰7ÿý½3j!!ïìP ™9“‰&dbæÆd¢ ™9“‰.dbæÎd¢ ™Ø×ûIŒ‡ZÈDÈ™LlB&BÎdb2r&›‰™w&»‰™;“‰.dbæÁdb™9“‰!d"äL&†‰³ :„L¼ùï=†C-d"äL&v!!g2± ™9“‰CÈľɓµ‰3™8…LÌܘL4!û~?‰ñP ™ù`‡ZÈÄÌ“‰&dbæÆd¢ ™9“‰.dbæÎd¢ ™Ø÷ûIŒ‡ZÈDÈ™LlB&BÎdb2r&»‰™w&»‰™;“‰!dbæÁdb™9“‰!d"äL&†‰³ :„Lìûý$ÆC-d"äL&v!!g2± ™˜ù`2q™8>äI ‡ZÈDÈ™LœB&fnL&š‰ãó~ã¡2r&›‰™7&MÈÄÌÉD21sg2Ñ…L„œÉD2q|ÞOb<ÔB&BÎdb2r&›‰3™Ø…L̼3™Ø…LÌ<˜L !!g21„L„œÉÄ2r&CÈDÈÙB&ŽÏûIŒ‡ZÈDÈ™LìB&BÎdâ21óÁdâ2q4ò$†C-d"äL&N!37&MÈÄÑÞOb<ÔB&BÎdb21óÆd¢ ™˜¹1™èB&fîL&º‰3™èB&Žö~ã¡2r&›‰3™Ø„L̼3™Ø…L„œÉÄ.dbæÁdb™9“‰!d"äL&†‰3™B&BÎ6è%dâhï'1j!!g2± ™˜ù`2q™9“‰CÈÄÑÉ“µ‰3™hB&fnL&š‰£¿ŸÄx¨…L„œÉÄ&dbæÉD21sg2Ñ…L„œÉD2r&]ÈÄÑßOb<ÔB&BÎdb2r&»‰™w&»‰3™Ø…LÌ<˜L !!g21„L„œÉÄ2r&CÈÄÌÛ —‰£¿ŸÄx¨…L„œÉÄ!dbæƒÉÄ!d"äL&!Ç Ob8ÔB&fnL&š‰3™hB&Žñ~ã¡2r&›‰™7&]ÈÄÌÉD2r&]ÈDÈ™L !Çx?‰ñP ™9“‰MÈÄÌ;“‰]ÈDÈ™LìB&BÎdb21ó`21„L„œÉÄ2r&CÈDÈ™L\B&f¾Ø½„Lãý$ÆC-dbæƒÉÄ!d"äL&!!g2q™8&yç¡6!37&MÈDÈ™L4!Ç|?‰ñP ™9“‰MÈÄÌ“‰.dbæÎd¢ ™9“‰.dbæÁdb™8æûIŒ‡ZÈDÈ™LìB&fÞ™LìB&BÎdb2r&»‰™“‰!d"äL&†‰3™B&f¾˜L\B&BÎ6è%dâ˜ï'1ê!dbæƒÉÄ!d"äL&!!g2q™8Œ<‰áP ™9“‰&d"äL&š‰ÃÞOb<ÔB&BÎdb21óÆd¢ ™˜¹3™èB&BÎdb™˜y0™B&{?‰ñP ™˜yg2± ™9“‰]ÈDÈ™LìB&BÎdb21ó`21„L„œÉÄ2r&—‰™/&—‰³ z ™xóß{ ‡ZÈDÈ™LB&BÎdâ2òebþßròò…{,"ä šˆ3€è ¿|ñ €˜yc± €9ˆ.bæÎ¢ €9ˆ!bæÁb€8üýò…ÿau3ï v!g± €9ˆ]DÈ@ì f †ˆ3€ f¾@\ BÎâr65/oþ{vá €9ˆCDÈ@ þýKHÿüΊÿçÿüíÿþÿÿŸþ¾òãŠùù `-ÿû׈ü™Åüï^jÅüïŸâ{1ÿûgKQÌÿþÏ*æÿÿá]Ìÿ~uíSËÏW×jù߯®õZþ÷«k£”ÿýOÄ?mÖò¿_Ý?ÿ²ôÿ˜ÿýêþù÷NÿÇüïW÷Ï¿Â÷?濺þm¨ÿ1ÿûÕýó/–üùyÔ¾:;j¶öÕÙ¹uµ¯ÎŽ0¨}u~~÷Zûêüü«öÕùù@í«ó³\Õ¾:¿’]Ëïå×òû<¨åWŽÖòã™j_Ÿÿ¶öÕÅùígí«‹ó‹¤ÚWg'¯}uqÖ›ÚWçÏk_]œÿÒ­}uŸáfí«ûûXÿ3k_ÝßWüŸYûêþ¾õÿÌÚW·Î»®öÕýýO…?³öÕýýoˆ?³öÕýý/?³öÕýýO?³öÕýý•?³öÕ­¿_Õ¾ºõ÷«³ÚW·þ~uVûêþþç¬öÕýýgwÿXí«Ûç¿&j_ÝߢìÕ¾º¿ÿpΫ}uÿ9‡?Vûêþþ%ã¬öÕýý«oÿxí«ûû2þñÚW÷÷¯ û㵯îï_^óÇK_]ÿûW*üñYËÿ~unµüü7¬×ò¿_G-ÿûÕùªå¿:ßµüïWŸZþ÷«‹VËÿ~uÑkù߯.j_Ýßÿnÿµ¯îï·ÿ‰ÚW÷÷¿ÛÿDí«kçONj_Ýßÿnÿµ¯îï·ÿ‰ÚW÷÷¿Ûÿ¬ÚW÷÷¿Ûÿ¬ÚWwþÝæUûêο&ºj_Ýù7îVí«;ÿòÒª}uçßYµ¯îü-õ«öÕ¿;yÕ¾ºó7z®ÚWwþž¹]ûêÎß~´k_Ýù;9ví«;R|×¾ºãwí«;ªf×¾ºó[ï]ûêÎ/wí«;¿‹Ùµ¯î¬µ»öÕû§ÄŸR~þ”øÓJùùSâO/åçO‰?£’Ÿm¢}f)?Jü±R~þ”øã¥üü)ñ'JùùSâÏ*åçO‰?»”Ÿ¯®•¾ºÜ&J_ÝÝ&Zé«»ÛD+}uw›h¥¯în­ôÕÝm¢•¾º»M´ÒWw·‰Vúêî6ÑJ_ÝÙ&þýG~ÿ·ü|u½ôÕÙ]ÄJ_ÝÙ&þýgzþ§ülÿþãÿ[~¾º^úêÎ6ñï_´û¿åç«ë¥¯îlÿþ¥dÿ[~¾º^úêÎ6ñï_àð¿åç«¥¯îlÿb·ÿ-¿;lé«;ÛÄ¿? þßòóÕÒWw¶‰]ñ¿åç«¥¯îlm”¾º³M´QúêÎ6Ñfé«;ÛD›¥¯îlm–¾º³M´YúêÖ]ÿK_ÝÙ&Ú,}ug›h³ôÕm¢ÍÒWw¶‰6K_ÝÙ&Ú,}ug›hVúêÎ6ѬôÕm¢Yé«;ÛD³ÒWw¶‰f¥¯nßßœ”¾º³M4+}ug›hVúêÎ6ѬôÕm¢Yé«;ÛDóÒWw¶‰æ¥¯îlÍK_ÝÙ&šW¾ºq¶‰æ³”Ÿ¯Î­”ß_:y)?_G)?_¯R~¾:ߥü|uñ)åç«‹VÊÏW½”Ÿ¯.J_ÝÙ&Z”¾º³M´(}ug›hQúêÚý}]é«;ÛD‹ÒWw¶‰¥¯îlm•¾º³M´UúêÎ6ÑVé«;ÛD[¥¯îlm•¾º³M´UúêÎ6ÑVé«;ÛD[¥¯®ß_u–¾º³M´UúêÎ6Ñvé«;ÛDÛ¥¯îlm—¾º³M´]úêÎ6Ñvé«;ÛDÛ¥¯îlm—¾º³M´]úêÎ6Ñvé«÷·Ä¥¯îR£Ò61Î6ÑKÛĸn¢´MŒ³MôÒ61Î6ÑKÛÄ8ÛD/mãl½´MŒ³MôÒ61Î6ÑKÛÄ8ÛD/mãl½´MŒyÁ^úêÎ6ÑKÛÄ8ÛD/mãl½´MŒ³MôÒ61Î6ÑKÛÄ8ÛD/mãl½´MŒ³MôÒ61®›(m㺉Ò61ÒM”¾ºë&JÛĸn¢´MŒë&JÛĸn¢´MŒë&JÛĸn¢´MŒë&JÛÄ8ÛD/mãl½´MŒ³MôÒ61üjÒWw¶‰^Ú&ÆÙ&zi›g›è¥mbœm¢—¶‰q¶‰^Ú&ÆÙ&zi›g›è¥mbœm¢—¶‰q¶‰^Ú&ÆÙ&zi›ë±ÒWw¶‰^Ú&ÆÙ&zi›g›è¥mbœm¢—¶‰q¶‰^Ú&ÆÙ&zi›g›è¥mbœm¢—¶‰q¶‰^Ú&ÆÙ&zi›ûÊÄÒWw¶‰^Ú&ÆÙ&zi›g›è¥mbœm¢—¶‰q¶‰^Ú&ÆÙ&zi›g›è¥mbœm¢—¶‰y¶‰^Ú&æÙ&zi›˜Ÿëa½”Ÿ¯®´M̳MôÒ61Ï6ÑKÛÄ<ÛD/mól½´M̳MôÒ61Ï6ÑKÛÄ<ÛD/mól½´M̳MôÒ61ÛUØ¥¯îl½´M̳MôÒ61ÛýK™J_]»ÿØxé«k÷_Ð-}uíþ»Ž¥¯®ç?VVÊóßÀ)å÷_f(}uýþ}᥯®_û_úêúý»K_]Ͽ˫”ß§½ôÕå¿\úêòß´,}uù/­•¾:ø×‡Jyþ«¥üþ]饯.ÿßÒW—¯dé«Ë¿ªôÕü'îKyþÃË¥üþ›–¥¯nÞi­ôÕÍûïÿ”¾ºyÿUŠÒW7ó¯Z/åù7ø–òû÷J–¾ºyÿ&±ÒW7ïßsRúêfþ»Í¥<ÿ5ÑJn÷߸+}uvÿå¥ÒWg÷ß)}uvÿ–úÒWg÷ïN.}uvÿFÏÒWw¶‰QÚ&æÙ&Fi›˜vÿvÒWw¶‰QÚ&æÙ&Fi›˜g›¥mbžmb”¶‰y¶‰QÚ&æÙ&Fi›˜g›¥mbÞ¿Ó©´MÌûw:•¶‰yÿN§Ò61óït*}u÷ït*móþN¥mbÞ¿Ó©´MÌûw:•¶‰yÿN§Ò61ïßéTÚ&æÙ&Fi›˜g›¥mbžmb”¶‰y¶‰QÚ&溓Xé«;ÛÄ(mól£´M̳MŒÒ61Ï61JÛÄ<ÛÄ(mól£´M̳MŒÒ61Ï61JÛÄ<ÛÄ(mól£´MÌ}ÿþºÒWw¶‰QÚ&æÙ&Fi›˜g›¥mbžmb”¶‰y¶‰QÚ&æÙ&Fi›˜g›¥mbžmb”¶ ;ÛÄ(mv¶‰QÚ&ìsÿÖD/åç«+mv¶‰QÚ&ìl£´MØÙ&Fi›°³MŒÒ6ag›¥mÂÎ61JÛ„mb”¶ ;ÛÄ(mv¶‰QÚ&¬Ý¿«³ôÕmb”¶ ;ÛÄ(mv¶‰QÚ&ìl£´MØÙ&Fi›°³MŒÒ6ag›¥mÂÎ61JÛ„mb”¶ ;ÛÄ(mÖïß[úêÎ61JÛ„mb”¶ ;ÛÄ(mv¶‰QÚ&ìl£´MØÙ&Fi›°û/¥—¶ »ÿ~oi›°û¯J–¶ »ÿÖYi›°û/ð”¶ ÷ï%.}ug›˜¥mÂÎ61KÛ„mb–¶ »ÿÞDi›°³MÌÒ6ag›˜¥mÂÎ61KÛ„mb–¶ ;ÛÄ,mv¶‰YÚ&lÞ¿ »ôÕmb–¶ ;ÛÄ,mv¶‰YÚ&ìl³´MØÙ&fi›°³MÌÒ6ag›˜¥mÂÎ61KÛ„mb–¶ ;ÛÄ,mf÷ï`/}ug›˜¥mÂÎ61KÛ„mb–¶ ;ÛÄ,mv¶‰YÚ&ìl³´MØÙ&fi›°³MÌÒ6ag›˜¥mÂÎ61KÛ„ùý›ÿK_ÝÙ&fi›°³MÌÒ6ag›˜¥mÂÎ61KÛ„mb–¶ ;ÛÄ,mvÿ½‰Ò6a÷ß›(mvÿ½‰Ò6a÷ß›(m–ÿÞDé«»ÿÞDi›°ûïM”¶ »ÿÞDi›°ûïM”¶ »ÿÞDi›°³MÌÒ6ag›˜¥mÂÎ61KÛ„mb–¶ ;ÛÄ,m¶ï¿rRúêÎ61KÛ„mb–¶ ;ÛÄ,mv¶‰YÚ&ìl³´MØÙ&fi›°³MÌÒ6ag›˜¥mÂÏ61KÛ„Ÿmb–¶ ÿÜ[ÇKùùêJÛ„Ÿmb–¶ ?ÛÄ,m~¶‰YÚ&ül³´MøÙ&fi›ð³MÌÒ6ág›˜¥mÂÏ61KÛ„Ÿmb–¶ o÷_t*}ug›˜¥mÂÏ61KÛ„Ÿmb–¶ ?ÛÄ,m~¶‰YÚ&ül³´MøÙ&fi›ð³MÌÒ6ág›˜¥mÂÏ61KÛ„÷û¾º³MÌÒ6ág›˜¥mÂÏ61KÛ„Ÿmb–¶ ?ÛÄ,m~¶‰YÚ&ül³´MøÙ&fi›ð³MÌÒ6ág›˜¥mÂÇý×ëJ_ݸÿz]é«;Û„•¶ ?Û„•¶ ?Û„•¶ ?Û„•¶ ¿ÿvi›ð³MXi›ð³MXi›ð³MXi›ð³MXi›ð³MXi›ðyÿÍÄÒWw¶ +m~¶ +m~¶ +m~¶ +m~¶ +m~¶ +m~¶ +m~¶ +m~¶ +m~¶ +mn÷_ê,}ug›°Ò6ág›°Ò6ág›°Ò6ág›°Ò6ág›°Ò6ág›°Ò6ág›°Ò6ág›°Ò6ág›°Ò6ág›°Ò6á~ÿ}ØÒWw¶ +m~¶ +m~¶ +m~¶ +m~¶ +m~¶ +m~¶ +m~¶ +m~¶ +m~¶ +m¾î¿J\úêÎ6a¥mÂÏ6a¥mÂÏ6a¥mÂÏ6a¥mÂÏ6a¥mÂï¿…]Ú&üþ[Ø¥mÂï¿…]Ú&üþ[Ø¥mÂï¿…]Ú&<ÿ-ìÒWwÿ-ìÒ6á÷ßÂ.m~ÿ-ìÒ6á÷ßÂ.m~¶ +m~¶ +m~¶ +m~¶ +mq¶ +mq¶ +mñ¹ÿ»—òóÕ•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„•¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰8Û„—¶‰u¶ /mël^Ú&ÖÙ&¼´M¬³Mxi›Xg›ðÒ6±Î6á¥mbmÂKÛÄ:Û„—¶‰u¶ /mël^Ú&ÖÙ&¼´M¬³Mxi›Xg›ðÒ6±Î6á¥mbmÂKÛÄ:Û„—¶‰u¶ /mël^Ú&ÖÙ&¼´M¬³Mxi›Xg›ðÒ6±Î6á¥mbmÂKÛÄ:Û„—¶‰u¶ /mël^Ú&ÖÙ&¼´M¬³Mxi›Xg›ðÒ6±Î6á¥mbmÂKÛÄ:Û„—¶‰u¶ /mël^Ú&ÖÙ&¼´M¬³Mxi›Xg›ˆÒ6±Î6¥mbm"JÛÄ:ÛD”¶‰u¶‰(mëlQÚ&ÖÙ&¢´M¬³MDi›Xg›ˆÒ6±Î6¥mbm"JÛÄ:ÛD”¶‰u¶‰(mëlQÚ&ÖÙ&¢´M¬³MDi›Xg›ˆÒ6±Î6¥mbm"JÛÄ:ÛD”¶‰u¶‰(mëlQÚ&ÖÙ&¢´M¬³MDi›Xg›ˆÒ6±Î6¥mbm"JÛÄ:ÛD”¶‰u¶‰(mëlQÚ&ÖÙ&¢´M¬³MDi›Xg›ˆÒ6±Î6¥mbm"JÛÄ:ÛD”¶‰u¶‰(mëlQÚ&ÖÙ&¢´M¬³MDi›Xg›ˆÒ6±Î6¥mbm"JÛÄ:ÛD”¶‰u¶‰(mëlQÚ&ÖÙ&¢´M¬³MDi›Xg›ˆÒ6±Î6¥mbm"JÛÄ:ÛD”¶‰u¶‰(mëlQÚ&ÖÙ&¢´M¬³MDi›Xg›ˆÒ6±Î6¥mbm"JÛÄ:ÛD”¶‰u¶‰(mëlQÚ&ÖÙ&¢´M¬³MDi›Øg›ˆÒ6±Ï6¥mbŸm"JÛÄ>ÛD”¶‰}¶‰(mûlQÚ&öÙ&¢´Mì³MDi›Øg›ˆÒ6±Ï6¥mbŸm"JÛÄ>ÛD”¶‰}¶‰(mûlQÚ&öÙ&¢´Mì³MDi›Øg›ˆÒ6±Ï6¥mbŸm"JÛÄ>ÛD”¶‰}¶‰(mûlQÚ&öÙ&¢´Mì³MDi›Øg›ˆÒ6±Ï6¥mbŸm"JÛÄ>ÛD”¶‰}¶‰(mûlQÚ&öÙ&¢´Mì³MDi›Øg›ˆÒ6±Ï6¥mbŸm"JÛÄ>ÛD”¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmb•¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmb•¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmb•¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmb•¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmb•¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmb•¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmb•¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmb•¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmb•¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmb•¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmb•¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmb•¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmb•¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmb•¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmb•¶‰}¶‰UÚ&öÙ&Vi›Øg›X¥mbŸmbU¶‰ù9ÛĪlÿåç««lÿåç««lÿåç««lÿåç««lÿåç««lÿåç««lÿåç««lÿåç««lÿåç«‹ÒWw¶‰¥¯îl+J_ÝÙ&V”¾º³M¬(}ug›XQúêÎ6±¢ôÕmb­ÒWw¶‰µJ_ÝÙ&Ö*}ug›X«ôÕmb­ÒWw¶‰µJ_ÝÙ&Ö*}ug›X«ôÕmb­ÒWw¶‰µJ_ÝÙ&Ö.}ug›X»ôÕmbíÒWw¶‰µK_ÝÙ&Ö.}ug›X»ôÕmbíÒWw¶‰µK_ÝÙ&Ö.}ug›X»ôÕmbJ_ÝÙ&ö§ôÕmbJ_ÝÙ&ö§ôÕmbJ_ÝÙ&ö§ôÕmbJ_ÝÙ&ö§ôÕmbJ_ÝÙ&ö§ôÕmb·ÒWw¶‰ÝJ_ÝÙ&v+}ug›Ø­ôÕmb·ÒWw¶‰ÝJ_ÝÙ&v+}ug›Ø­ôÕmb·ÒWw¶‰ÝJ_ÝÙ&v/}ug›Ø½ôÕmb÷ÒWw¶‰ÝK_ÝÙ&v/}ug›Ø½ôÕmb÷ÒWw¶‰ÝK_ÝÙ&v/}ug›Ø½ôÕmbÒWw¶‰=J_ÝÙ&ö(}ug›Ø£ôÕmbÒWw¶‰=J_ÝÙ&ö(}ug›Ø£ôÕmbÒWw¶‰=J_ÝÙ&ö,}ug›Ø³ôÕmbÏÒWw¶‰=K_ÝÙ&ö,}ug›Ø³ôÕmbÏÒWw¶‰=K_ÝÙ&ö,}ug›Ø³ôÕmb[é«;ÛĶÒWw¶‰m¥¯îlÛJ_ÝÙ&¶•¾º³Ml+}ug›ØVúêÎ6±­ôÕmb[é«;ÛĶÒWw¶‰í¥¯îlÛK_ÝÙ&¶—¾º³MìÒ6ÑÎ6±KÛD;ÛÄ.míl»´M´³MìÒ6ÑÎ6±KÛD;ÛÄ.míl»´M´³MìÒ6ÑÎ6±KÛD;ÛÄ.míl»´M´³MìÒ6ÑÎ6±KÛD;ÛÄ.míl»´M´³MìÒ6ÑÎ6±KÛD;ÛÄ.míl»´M´³MìÒ6ÑÎ6±KÛD;ÛÄ.míl»´M´³MìÒ6ÑÎ6±KÛD;ÛÄ.míl»´M´³MìÒ6ÑÎ6±KÛD;ÛÄ.míl»´M´³MìÒ6ÑÎ6±KÛD;ÛÄ.míl»´M´³MìÒ6ÑÎ6Ñ>¿ãÄÿ–ÇÍ[%_7ï•|ß|ò³M´Ïï8ñ¿åíæVÉûͽ’›G%Ÿ7_•Ün¾+ùýêZå«›÷«k•¯nÞ¯®U¾ºy¿ºVùêì~u­òÕÙýêZ嫳ûÕµÊWg÷«k•¯ÎîW×*_ݯ®U¾:»_]¯|uv¿º^ùêì~u½òÕÙýêzå«óûÕõÊWç÷«ë•¯ÎïW×+_߯®W¾:¿_]¯|u~¿º^ùêü~u£òÕùýêFå«óûÕÊWç÷«•¯.îW7*_]ܯnT¾º¸_ݨ|uq¿ºQùêâ~u£òÕÅýêFå«‹ûÕÍÊW÷«›•¯.îW7+_]ܯnV¾ºu¿ºYùêÖýêfå«[÷«›•¯nݯnV¾ºu¿ºYùêÖýêfå«[÷«³ÊW·îWg•¯nݯÎ*_ݺ_U¾º}¿:«|uû~uVùêöýê¬òÕíûÕYå«Û÷«³ÊW·ïWg•¯n߯Î+_ݾ_W¾º}¿:¯|uû~u^øêúç~u>+ùýêÜ*ùýêÜ+ùýê<*ùýê|UòûÕù®ä÷«‹O%¿_]´J~¿ºè•ü~uQùêÚýê¢òÕµûÕEå«k÷«‹ÊW×îW•¯®Ý¯.*_]»_]T¾ºv¿ºUùêÚýêVå«k÷«[•¯®Ý¯nU¾º~¿ºUùêúýêVå«ë÷«[•¯®ß¯nU¾º~¿ºUùêúýêVå«ë÷«Û•¯®ß¯nW¾º~¿º]ùêúýêvå«÷«Û•¯nܯnW¾ºq¿º]ùêÆýêvå«÷«Û•¯nܯnW¾º»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²Mô»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²Mô»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²Mô»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²Mô»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²Mô»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²Mô»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²Mô»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²Mô»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²Mô»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²Mô»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²Mô»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²Mô»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²Mô»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²Mô»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²Mô»M´Ê6Ñï6Ñ*ÛD¿ÛD«lýn­²MŒ»M´Ê61î6Ñ*ÛĸÛD«lãn­²MŒ»M´Ê61î6Ñ*ÛĸÛD«lãn­²MŒ»M´Ê61î6Ñ*ÛĸÛD«lãn­²MŒ»M´Ê61î6Ñ*ÛĸÛD«lãn­²MŒ»M´Ê61î6Ñ*ÛĸÛD«lãn­²MŒ»M´Ê61î6Ñ*ÛĸÛD«lãn­²MŒ»M´Ê61î6Ñ*ÛĸÛD«lãn­²MŒ»M´Ê61î6Ñ*ÛĸÛD«lãn­²MŒ»M´Ê61î6Ñ*ÛĸÛD«lãn­²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MŒ»MôÊ61î6Ñ+ÛĸÛD¯lãn½²MÌ»MôÊ61ï6Ñ+ÛļÛD¯lón½²MÌ»MôÊ61ï6Ñ+ÛļÛD¯lón½²MÌ»MôÊ61ï6Ñ+ÛļÛD¯lón½²MÌ»MôÊ61ï6Ñ+ÛļÛD¯lón½²MÌ»MôÊ61ï6Ñ+ÛļÛD¯lón½²MÌ»MôÊ61ï6Ñ+ÛļÛD¯lón½²MÌ»MôÊ61ï6Ñ+ÛļÛD¯lón½²MÌ»MôÊ61ï6Ñ+ÛļÛD¯lón½²MÌ»MôÊ61ï6Ñ+ÛļÛD¯lón½²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MÌ»MŒÊ61ï61*ÛļÛĨlón£²MØÝ&Fe›°»MŒÊ6aw›•mÂî61*Û„ÝmbT¶ »ÛĨlv·‰QÙ&ìn£²MØÝ&Fe›°»MŒÊ6aw›•mÂî61*Û„ÝmbT¶ »ÛĨlv·‰QÙ&ìn£²MØÝ&Fe›°»MŒÊ6aw›•mÂî61*Û„ÝmbT¶ »ÛĨlv·‰QÙ&ìn£²MØÝ&Fe›°»MŒÊ6aw›•mÂî61*Û„ÝmbT¶ »ÛĨlv·‰QÙ&ìn£²MØÝ&Fe›°»MŒÊ6aw›•mÂî61*Û„ÝmbV¶ »ÛĬlv·‰YÙ&ìn³²MØÝ&fe›°»MÌÊ6aw›˜•mÂî61+Û„ÝmbV¶ »ÛĬlv·‰YÙ&ìn³²MØÝ&fe›°»MÌÊ6aw›˜•mÂî61+Û„ÝmbV¶ »ÛĬlv·‰YÙ&ìn³²MØÝ&fe›°»MÌÊ6aw›˜•mÂî61+Û„ÝmbV¶ »ÛĬlv·‰YÙ&ìn³²MØÝ&fe›°»MÌÊ6aw›˜•mÂî61+Û„ÝmbV¶ »ÛĬlv·‰YÙ&ìn³²MØÝ&fe›°»MÌÊ6aw›˜•mÂî61+Û„ÝmbV¶ »ÛĬlv·‰YÙ&ìn³²MØÝ&fe›°»MÌÊ6aw›˜•mÂî61+Û„ÝmbV¶ »ÛĬlv·‰YÙ&ìn³²MØÝ&fe›°»MÌÊ6aw›˜•mÂî61+Û„ÝmbV¶ »ÛĬlv·‰YÙ&ìn³²MØÝ&fe›°»MÌÊ6aw›˜•mÂî61+Û„ßmbV¶ ¿ÛĬl~·‰YÙ&ün³²MøÝ&fe›ð»MÌÊ6áw›˜•mÂï61+Û„ßmbV¶ ¿ÛĬl~·‰YÙ&ün³²MøÝ&fe›ð»MÌÊ6áw›˜•mÂï61+Û„ßmbV¶ ¿ÛĬl~·‰YÙ&ün³²MøÝ&fe›ð»MÌÊ6áw›˜•mÂï61+Û„ßmbV¶ ¿ÛĬl~·‰YÙ&ün³²MøÝ&fe›ð»MÌÊ6áw›˜•mÂï61+Û„ßmbV¶ ¿ÛĬl~·‰YÙ&ün³²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MøÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¬²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²MÄÝ&¼²M¬»Mxe›Xw›ðÊ6±î6á•mbÝmÂ+ÛĺۄW¶‰u· ¯lën^Ù&ÖÝ&¼²M¬»Mxe›Xw›ðÊ6±î6á•mbÝmÂ+ÛĺۄW¶‰u· ¯lën^Ù&ÖÝ&¼²M¬»Mxe›Xw›ðÊ6±î6á•mbÝmÂ+ÛĺۄW¶‰u· ¯lën^Ù&ÖÝ&¼²M¬»Mxe›Xw›ðÊ6±î6á•mbÝmÂ+ÛĺۄW¶‰u· ¯lën^Ù&ÖÝ&¼²M¬»Mxe›Xw›ðÊ6±î6á•mbÝmÂ+ÛĺÛDT¶‰u·‰¨lënQÙ&ÖÝ&¢²M¬»MDe›Xw›ˆÊ6±î6•mbÝm"*ÛĺÛDT¶‰u·‰¨lënQÙ&ÖÝ&¢²M¬»MDe›Xw›ˆÊ6±î6•mbÝm"*ÛĺÛDT¶‰u·‰¨lënQÙ&ÖÝ&¢²M¬»MDe›Xw›ˆÊ6±î6•mbÝm"*ÛĺÛDT¶‰u·‰¨lënQÙ&ÖÝ&¢²M¬»MDe›Xw›ˆÊ6±î6•mbÝm"*ÛĺÛDT¶‰u·‰¨lënQÙ&ÖÝ&¢²M¬»MDe›Xw›ˆÊ6±î6•mbÝm"*ÛĺÛDT¶‰u·‰¨lënQÙ&ÖÝ&¢²M¬»MDe›Xw›ˆÊ6±î6•mbÝm"*ÛĺÛDT¶‰u·‰¨lënQÙ&ÖÝ&¢²M¬»MDe›Xw›ˆÊ6±î6•mbÝm"*ÛĺÛDT¶‰u·‰¨lënQÙ&ÖÝ&¢²M¬»MDe›Xw›ˆÊ6±î6•mbÝm"*ÛľÛDT¶‰}·‰¨lûnQÙ&öÝ&¢²Mì»MDe›Øw›ˆÊ6±ï6•mbßm"*ÛľÛDT¶‰}·‰¨lûnQÙ&öÝ&¢²Mì»MDe›Øw›ˆÊ6±ï6•mbßm"*ÛľÛDT¶‰}·‰¨lûnQÙ&öÝ&¢²Mì»MDe›Øw›ˆÊ6±ï6•mbßm"*ÛľÛDT¶‰}·‰¨lûnQÙ&öÝ&¢²Mì»MDe›Øw›ˆÊ6±ï6•mbßm"*ÛľÛDT¶‰}·‰¨lûnQÙ&öÝ&¢²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«²Mì»M¬Ê6±ï6±*ÛľÛĪlûn«°MØçn«°Mü—߯®°Mü—߯®°Mü—߯®°Mü—߯®°Mü—߯®°Mü—߯®°Mü—߯®°Mü—߯®°Mü—߯.*_ÝÝ&VT¾º»M¬¨|uw›XQùêî6±¢òÕÝmbEå«»ÛÄŠÊWw·‰µ*_ÝÝ&Öª|uw›X«òÕÝmb­ÊWw·‰µ*_ÝÝ&Öª|uw›X«òÕÝmb­ÊWw·‰µ*_ÝÝ&Öª|uw›X»òÕÝmbíÊWw·‰µ+_ÝÝ&Ö®|uw›X»òÕÝmbíÊWw·‰µ+_ÝÝ&Ö®|uw›X»òÕÝmbíÊWw·‰ý©|uw›ØŸÊWw·‰ý©|uw›ØŸÊWw·‰ý©|uw›ØŸÊWw·‰ý©|uw›ØŸÊWw·‰ý©|uw›ØŸÊWw·‰Ý*_ÝÝ&v«|uw›Ø­òÕÝmb·ÊWw·‰Ý*_ÝÝ&v«|uw›Ø­òÕÝmb·ÊWw·‰Ý*_ÝÝ&v«|uw›Ø½òÕÝmb÷ÊWw·‰Ý+_ÝÝ&v¯|uw›Ø½òÕÝmb÷ÊWw·‰Ý+_ÝÝ&v¯|uw›Ø½òÕÝmb÷ÊWw·‰=*_ÝÝ&ö¨|uw›Ø£òÕÝmbÊWw·‰=*_ÝÝ&ö¨|uw›Ø£òÕÝmbÊWw·‰=*_ÝÝ&ö¨|uw›Ø³òÕÝmbÏÊWw·‰=+_ÝÝ&ö¬|uw›Ø³òÕÝmbÏÊWw·‰=+_ÝÝ&ö¬|uw›Ø³òÕÝmbÏÊWw·‰m•¯înÛ*_ÝÝ&¶U¾º»Ml«|uw›ØVùêî6±­òÕÝmb[å«»ÛĶÊWw·‰m•¯înÛ*_ÝÝ&¶W¾º»Ml¯|uw›Ø^ùêî6±+ÛD»ÛÄ®lín»²M´»MìÊ6Ñî6±+ÛD»ÛÄ®lín»²M´»MìÊ6Ñî6±+ÛD»ÛÄ®lín»²M´»MìÊ6Ñî6±+ÛD»ÛÄ®lín»²M´»MìÊ6Ñî6±+ÛD»ÛÄ®lín»²M´»MìÊ6Ñî6±+ÛD»ÛÄ®lín»²M´»MìÊ6Ñî6±+ÛD»ÛÄ®lín»²M´»MìÊ6Ñî6±+ÛD»ÛÄ®lín»²M´»MìÊ6Ñî6±+ÛD»ÛÄ®lín»²M´»MìÊ6Ñî6±+ÛD;ÛDÿT¶‰v¶‰þ©lílýSÙ&ÚÙ&ú§²M´³MôOe›hg›èŸÊ6ÑÎ6Ñ?•m¢m¢*ÛD;ÛDÿT¶‰v¶‰þ©lmÞ¯®²M´y¿ºÊ6Ñæýê*ÛD›÷««lÍîWWÙ&šÝ¯®²M4»_]e›hv¿ºÊ6Ñì~u•m¢Ùýê*ÛD³ûÕU¶‰f÷««lÍîWWÙ&šÝ¯®²M4¿_]e›h~¿ºÊ6Ñü~u•m¢ùýê*ÛDóûÕU¶‰æ÷««lÍïWWÙ&šß¯®²M4¿_]e›h~¿ºÊ6Ñâ~u•m¢Åýê*ÛD‹ûÕU¶‰÷««l-îWWÙ&Zܯ®²M´¸_]e›hq¿ºÊ6Ñâ~u•m¢Åýê*ÛD[÷««lmݯ®²M´u¿ºÊ6ÑÖýê*ÛD[÷««lmݯ®²M´u¿ºÊ6ÑÖýê*ÛD[÷««lmݯ®²M´}¿ºÊ6Ñöýê*ÛDÛ÷««lm߯®²M´}¿ºÊ6Ñöýê*ÛDÛ÷««lm߯®²M´}¿ºÊ6Ñöýê*ÛDÿܯ®²MôÏýê*ÛDÿܯ®²MôÏýê*ÛDÿܯ®²MôÏýê*ÛDÿܯ®²MôÏýê*ÛDÿܯ®²MôÏýê*ÛDo÷««l½Ý¯®²Môv¿ºÊ6ÑÛýê*ÛDo÷««l½Ý¯®²Môv¿ºÊ6ÑÛýê*ÛDo÷««l½Ý¯®²Mô~¿ºÊ6Ñûýê*ÛDï÷««l½ß¯®²Mô~¿ºÊ6Ñûýê*ÛDï÷««l½ß¯®²Mô~¿ºÊ6Ñûýê*ÛDÿýM®$»Îæö Ü9ÔÒRšlÀ­Ûð½ó‹3«‚ïú‚Éo¿½ƒ³J;2# Q$.DcºuŒMèBÔ16¡ QÇØ„.DcºuŒM(lB›PØ„06¡° alBaÂØ„Â&„± …Mc ›Æ&6!ŒM(lB›PØ„06¡° alBaÂØ„Â&„± …Mc ›Æ&6!ŒM(lB›PØ„06¡° alBaÂØ„Â&„± …Mc ›Æ&6!ŒM(lB›PØ„06¡° alBaÂØ„Â&„± …Mc ›Æ&6!ŒM(lB›PØ„06¡° alBaÂØ„Â&„± …Mc ›Æ&6!ŒM(lB›PØ„06¡° alBaÂØ„Â&„± …Mc ›Æ&6!ŒM(lB›PØ„06¡° alBaÂØ„Â&„± …Mc ›Æ&6!ŒM(lB›PØ„06¡° alBaÂØ„Â&„± …Mc ›Æ&6!ŒM,Ø„06±`ÂØÄ‚Mc 6!ŒM,Ø„06±`ÂØÄ‚Mc 6!ŒM,Ø„06±`ÂØÄ‚Mc 6!ŒM,Ø„06±`ÂØÄ‚Mc 6!ŒM,Ø„06±`ÂØÄ‚Mc 6!ŒM,Ø„06±`ÂØÄ‚Mc 6!ŒM,Ø„06±`ÂØÄ‚Mc 6!ŒM,Ø„06±`ÂØÄ‚Mc 6!ŒM,Ø„06±`ÂØÄ‚Mc 6!ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒM,Ø„26±`ÊØÄ‚M(c 6¡ŒMlØ„26±aÊØÄ†M(c6¡ŒMlØ„26±aÊØÄ†M(c6¡ŒMlØ„26±aÊØÄ†M(c6¡ŒMlØ„26±aÊØÄ†M(c6¡ŒMlØ„26±aÊØÄ†M(c6¡ŒMlØ„26±aÊØÄ†M(c6¡ŒMlØ„26±aÊØÄ†M(c6¡ŒMlØ„26±aÊØÄ†M(c6¡ŒMlØ„26±aÊØÄ†M(c6¡ŒMlØÄblbÃ&c6±›Ø°‰ÅØÄ†M,Æ&6lb16±a‹±‰ ›XŒMlØÄblbÃ&c6±›Ø°‰ÅØÄ†M,Æ&6lb16±a‹±‰ ›XŒMlØÄblbÃ&c6±›Ø°‰ÅØÄ†M,Æ&6lb16±a‹±‰ ›XŒMlØÄblbÃ&c6±›Ø°‰ÅØÄ†M,Æ&6lb16±a‹±‰ ›XŒMlØÄblbÃ&c6±›Ø°‰ÅØÄ†M,Æ&6lb16±a‹±‰ ›XŒMlØÄblbÃ&c6±›Ø°‰ÅØÄ†M,Æ&6lb16±a‹±‰ ›XŒMlØÄblbÃ&c6±›Ø°‰ÅØÄ†M,Æ&6lb16±a‹±‰ ›XŒMlØÄblbÃ&c6±›Ø°‰ÅØÄ†M,Æ&6lb16±a‹±‰ ›XŒMØÄblâÀ&c6±›8°‰ÅØÄM,Æ&lb16q`‹±‰›XŒMØÄblâÀ&c6±›8°‰ÅØÄM,Æ&lb16q`‹±‰›XŒMØÄblâÀ&c6±›8°‰ÅØÄM,Æ&lb16q`‹±‰›XŒMØÄblâÀ&c6±›8°‰ÅØÄM,Æ&lb16q`‹±‰›XŒMØÄblâÀ&c6±›8°‰ÅØÄMlÆ&lb36q`›±‰›ØŒMØÄflâÀ&6c6±›8°‰ÍØÄMlÆ&lb36q`›±‰›ØŒMØÄflâÀ&6c6±›8°‰ÍØÄMlÆ&lb36q`›±‰›ØŒMØÄflâÀ&6c6±›8°‰ÍØÄMlÆ&lb36q`›±‰›ØŒMØÄflâÀ&6c6±›8°‰ÍØÄMlÆ&lb36q`›±‰›ØŒMØÄflâÀ&6c6±›8°‰ÍØÄMlÆ&lb36q`›±‰›ØŒMØÄflâÀ&6c6±›8°‰ÍØÄMlÆ&lb36q`›±‰›ØŒMØÄflâÀ&6c6±›8°‰ÍØÄMlÆ&lb36q`›±‰›ØŒMØÄflâÀ&6c6±›8°‰ÍØ„Á&6c›ØŒMlb36a°‰ÍØ„Á&6c›ØŒMlb36a°‰ÍØ„Á&6c›ØŒMlb36a°‰ÍØ„Á&6c›ØŒMlb36a°‰ÍØ„Á&6c›ØŒMlb36a°‰ÍØ„Á&6c›ØŒMlb36a°‰ÍØ„Á&6c›ØŒMlb36a°‰ÍØ„Á&6c›ØŒMlb36a°‰ÍØ„Á&6c›ØŒMlb36a°‰ÍØ„Á&c›8ŒMlâ06a°‰ÃØ„Á&c›8ŒMlâ06a°‰ÃØ„Á&c›8ŒMlâ06a°‰ÃØ„Á&c›8ŒMlâ06a°‰ÃØ„Á&c›8ŒMlâ06a°‰ÃØ„Á&c›8ŒMlâ06a°‰ÃØ„Á&c›8ŒMlâ06a°‰ÃØ„Á&c›8ŒMlâ06a°‰ÃØ„Á&c›8ŒMlâ06a°‰ÃØ„Á&c›8ŒMlâ06a°‰ÃØ„Á&c›8ŒMlâ06a°‰ÃØ„Á&c›8ŒMlâ06a°‰ÃØ„Á&c›8ŒMlâ06a°‰ÃØ„Á&c›8ŒMlâ06a°‰ÃØ„Á&c›8ŒMlâ06a°‰ÃØ„Á&c›8ŒMlâ06a°‰ÃØ„Ã&c›8ŒM8lâ06á°‰ÃØ„Ã&c›8ŒM8lâ06á°‰ÃØ„Ã&c›8ŒM8lâ06á°‰ÃØ„Ã&c›8ŒM8lâ06á°‰ÃØ„Ã&c›8ŒM8lâ06á°‰ÃØ„Ã&c›8ŒM8lâ06á°‰ÃØ„Ã&c›8ŒM8lâ06á°‰ÃØ„Ã&c›8ŒM8lâ06á°‰ÃØ„Ã&c›8ŒM8lâ06á°‰ÃØ„Ã&Œ± ‡Mc›0Æ&6aŒM8l›pØ„16á° clÂaÆØ„Ã&Œ± ‡Mc›0Æ&6aŒM8l›pØ„16á° clÂaÆØ„Ã&Œ± ‡Mc›0Æ&6aŒM8l›pØ„16á° clÂaÆØ„Ã&Œ± ‡Mc›0Æ&6aŒM8l›pØ„16á° clÂaÆØ„Ã&Œ± ‡Mc›0Æ&6aŒM8l›pØ„16á° clÂaÆØ„Ã&Œ± ‡Mc›0Æ&6aŒM8l›pØ„16á° clÂaÆØ„Ã&Œ± ‡Mc›0Æ&6aŒM8l›pØ„16á° clÂaÆØ„Ã&Œ± ‡Mc›0Æ&6aŒM8l›pØ„16á° clÂaÆØDÀ&Œ±‰€Mc›0Æ&6aŒMl›؄16° cl"`ÆØDÀ&Œ±‰€Mc›0Æ&6aŒMl›؄16° cl"`ÆØDÀ&Œ±‰€Mc›0Æ&6aŒMl›؄16° cl"`ÆØDÀ&Œ±‰€Mc›0Æ&6aŒMl›؄16° cl"`ÆØDÀ&Œ±‰€Mc›0Æ&6aŒMl›؄36° gl"`ÎØDÀ&œ±‰€M8c›pÆ&6áŒMl›؄36° gl"`ÎØDÀ&œ±‰€M8c›pÆ&6áŒMl›؄36° gl"`ÎØDÀ&œ±‰€M8c›pÆ&6áŒMl›؄36° gl"`ÎØDÀ&œ±‰€M8c›pÆ&6áŒMl›؄36° gl"`ÎØDÀ&œ±‰€M8c›pÆ&6áŒMl›؄36° gl"`ÎØDÀ&œ±‰€M8c›pÆ&6áŒMl›؄36° gl"`ÎØDÀ&œ±‰€M8c›pÆ&6áŒMl›؄36° gl"`ÎØDÀ&œ±‰€M8c›pÆ&6áŒM$l›HØ„36‘° gl"aÎØDÂ&œ±‰„M8c ›pÆ&6áŒM$l›HØ„36‘° gl"aÎØDÂ&œ±‰„M8c ›pÆ&6áŒM$l›HØ„36‘° gl"aÎØDÂ&œ±‰„M8c ›pÆ&6áŒM$l›HØ„36‘° gl"aÎØDÂ&œ±‰„M8c ›pÆ&6áŒM$l›HØ„36‘° gl"aÎØDÂ&‚±‰„Mc ›Æ&6ŒM$l"›HØD06‘°‰`l"aÁØDÂ&‚±‰„Mc ›Æ&6ŒM$l"›HØD06‘°‰`l"aÁØDÂ&‚±‰„Mc ›Æ&6ŒM$l"›HØD06‘°‰`l"aÁØDÂ&‚±‰„Mc ›Æ&6ŒM$l"›HØD06‘°‰`l"aÁØDÂ&‚±‰„Mc ›Æ&6ŒM$l"›HØD06‘°‰`l"aÁØDÂ&‚±‰„Mc ›Æ&6ŒM$l"›HØD06‘°‰`l"aÁØDÂ&‚±‰„Mc ›Æ&6ŒM$l"›HØD06‘°‰`l"aÁØDÂ&‚±‰„Mc ›Æ&6ŒM$l"›HØD06‘°‰`l"aAØ„]°‰ lâÝQGØÄ»9¢Ž°‰wsDaïæˆ:Â&ÞÍu„M¼›#ê›x7GÔ6ñnލ#lâÝQçLÔÁ&™¨ƒM„3Q›g¢6ÎDl"œ‰:ØD8u°‰&ê`LÔÁ&"˜¨ƒMD0Q›ˆ`¢6ÁDl"‚‰:ØDu°‰&ê`LÔÁ&"™¨ƒMD2Q›ˆd¢6ÉDl"’‰:ØD$u°‰H&ê`‘LÔÁ&"™¨ƒMD2Q›È‹‰:ØD^LÔÁ&òb¢6‘u°‰¼˜¨ƒMäÅDl"/&ê`y1Q›È‹‰:ØD^LÔÁ&R˜¨ƒM¤0Q›Ha¢6‘ÂDl"…‰:ØD u°‰&ê`)LÔÁ&R˜¨ƒM¤0Q›He¢6‘ÊDl"•‰:ØD*u°‰T&ê`©LÔÁ&R™¨ƒM¤2Q›He¢6‘ÊDl"u°‰\LÔÁ&r1Q›ÈÅDl"u°‰\LÔÁ&r1Q›ÈÅDl"u°‰\LÔÁ&r3Q›ÈÍDl"7u°‰ÜLÔÁ&r3Q›ÈÍDl"7u°‰ÜLÔÁ&r3Q›ÈÍDl"u°‰wÿZSÌMÑ¿òßÕ£¿auê¨ûû»³¹›¯þbþk’ü§ýkþõšXÃïÞg¹_纯þõš˜‚6~{MÄ×­›F•mžùõîÿ½ß¿g§®²M¿_‘þ¯¯ëSÀ/~¸¯™Þu?ïßs¸×ðÝûTíûýï‘ÉÞ×Éž¾{|Åæ=$þO}Ý÷léù÷Ý¿æA_glÞßûQ·‰Ì÷nl¾{?JûLdê4¦íŽgÝò6•øŠ=^=Z7}®»yö F•}Êïu¢²‰vëâš®ÞÓ‰­Õ|õùôÝŸéÄûÃ/¿›Ÿö0ÌÞÚƒu§_óa~Í£íýÀ~Mh½¦lâkÞJ¯tbê놉§ûÃ÷tâý¹¦æí‰µˆ»y‹:ókjní×wïéÄš^‘}îæopýûÃóÖɘMôÉ1¹o]K'^‘ÓÕ[:ñwàüï«?KãÕ[:áZWo¯X÷é‡kéÄ{ЧÀ-x¬ñê-ê®zÞ[:!g|Þ{:áë~âZ:ñâ)lz:w(»?°2}ø–NHÖoéÄ{h4=2-x?÷ßý=áã‡ïï‰}w-x©N·®¥ïž÷¾zO'tz¿KO'rßì3x÷bÓ Zz:±Ï}ëz:1ެ¤¥/;õáÛ«ã×—©åªßúº°é»÷t"ïÁ‰ôtâLcy¦Ÿ±ÍóÖnݶiÊËú»êê§ÿîã¤S{Ãn¯«÷[·ÇïÞú:¿êêÙ÷©»héÄ; ½¯þL'ÞßݧßÒ‰w2rǼ·[g1ݺžNìŠù¾)czEötâÝÑßÍ¿';§æ1g‘ÒÓ‰÷[kšîëcâ¸;«ïáæÐ¼G]½"{:¡ã¨²¥¯]£‹žN¨ŒW·>} {:±eºu}<G]K'^küÝû²•SÏ{¶¨ ›دu'y‡MO'æiÞ–Núù–NHÆtç{:‘õĵtâ=HºÊžNì{ÞFZ:ñŠiâE[6ñTÜ3¥W»uç›÷LìžÞ×¾,§;¯=›Ø÷ì¶lâýÝÇ)îuvwÔÚ&¼öؼOœjž½Ÿæ¨;N„Ù=Á.½ùtëz6ñþÐwóÕ“‘éÃwœ°û‘ÑŽ¾ÖÔüë5Q:Ð'¹}j}†£®žßYÊ€ ý½ç.´û¶N´¶lâÂÞaÓ²‰×ñé‡kÙÄë\uõg"ö啕õ¿8õïßм¿aO}øìƒž VžÙÄK×¾¸ŽãÄ‹vœ°›ó´g:͘iÏ&¶ì»y_SØôlâVÞÍý{whÞI,ëê}H<½e´gŸ.íßz;åïÚ²‰wF½îæ«§ÓïÞ³ ½ÇuÚ³ ™Ž–uuoŸ}ŒºÝsØ; ÕŽn¨uœ0»o]Ë&Þùâtõ¯l➟׆ï´pl¾{hWóžÃÚôÀž¯¾î¾uÏlâõþ!§°é8±ñݳϘ‰2û­»]F[6ñ&N¿{É÷3p_½ãDÊôÈØ×¸šŸÓ­3ûNUÿýÁû$æxõ>8‰;æ;N¬iÎJýú~•ýûCïëFƒvíôtmz6±ÇΪg¯ê¨[6ñ~¿OÝEÏ&ÖU¾=°kìm¼G]=ïþ•þOLljuOïkË&Þ£Žе¿eîïíÖù4W©=›ÐzI}e3ßÛ×ýÝÜûÌÇøÝ£ÄÝ]tœÇóú•MØ}ç³Ï×·®gZ1Ÿ}Òi”vœxg'wó¯v Ú–M¼ßd÷ï+Ä·ÍÛ|Ýgðïù=RN\½Kû×Û¬«¿a' \Ý&䘭«GéÔ¼M°{ÚÝüô‘ú´pâúJÄê÷Dlœî[WŸêćÏîúÓ­ûÊ&ä^õÑlâýŽ›>|Ë&^^Wfï'yJF–|E]­x9ý»¯©yg;—Y-›x§Ä25o·nK}øöÀæ4c¶¾ÖÔÖ‡ïÙ„ÄôÝ»Mì{âeõlbO½Íê6Qãùõe×ôÝÕ¾gõþý¡½&dŒùžMì; \úµJlœ¬¾Ô)k¥SÏ&bêç×joX¿ç¨WË&^1®têK3Ͻ`fõ¥Nácó_fNVÏ&rbÕm"м¥ÿk\$öÌ&>sVwØôlâLcÚÕmÂnÆ]}©Ó{›ÝúººzMŒÏû—MD]½¯Mô±y×­ ›Ýnݘ¿¯–M¼¬¸W¸õ7ìô‚^-›xeïïÞwöÇž~÷žM¯«÷I§›·7챺ºwç›úùnzO}¬g6ñNa§ùºe-ý—›óÖ—MŒß½/u:7¨-ëú¿¦ž¶g5åµZ6!:­=XÝ&¼:jë}Ý”I-ëú¿ë»÷öLÝE·‰÷{/Œl‰ØÉ©¯ó_fNV[êôN¦ÿe÷ÔÇê6¡cOûe÷$óòu1~÷>srOó®n1ÙÄêÙÄ©—T´©Îq<¿¾lbWó/¯Þoݬèì”®/›¸×¬è‰ØüÝûÌÉ=¢^=›ðñ‘Éî°»ÖÓJ—‘éêßÙD5ooØ¥ãÕû¸®Â¦Û„Œ#«–M¼¢Â¦/uòñwoÙÄ«&ÜV_êäÓÀl÷•NymvÏ&ö4<ØÝ&jEë¾¾Òÿi-ñõËàdw›¸¦ìû²o?ù÷‡¾ÒÉÇ«÷lâNBwÏ&râ¼Ý³ ¿ðÝW:Í˰[6!zg»ÙÄûÖWÿzÃÞ«¸ûJ'¿»ô ö{`¶ûJ§˜fÈwßàWs»g[Ç%èý½%tkML³F»g5²ÚÚsØ)ØÚÆuëÆ…Ý³‰qÕÇþÚ8q“ÖÖžˆM“»erÖó}¥ÓžF•»eïîâ›–Mȸlcw›x?ÁwóžˆM#«Ým¼®þ•ML¿{· « íÙ„N¹ÌþZét/€ß}ã„ĸs¡EÜ£‹ÝW:ùôŽÛ»/»ß2{·¨“¹y`ï~~÷îcóïNwóžMŒû&ºMøºoÝîQ7¥Bûë0²Û ÷ׯ‰ñwÿ>Mìþî}ãÄè2û|½aï'®ÛÄj»g×½ta÷lâw¬ôlbÕóÞlâï|аá¥å°µPjw›ˆI¶}­Ã¾»‹¶ÒImì*ík§ÓýŠìÙĘï–MÀãv_é”cOÛmÂîü}Û×ÒÄ)æ¿l↕ݲ‰WŽ»2ûJ§}j«Q_›Óÿ²‰{¿ÌþÊ&ƱMÏ&²¶Yõlâ\ã‡ÿÊ&îÞÆ["㱞Mè=Õ¹¿6NŒ¿{ß8±îò}pcó¾\'ëê°'@ß=›¿ûºè·nš9Ù=›ˆUÍûÌÉ´ædg{`¯zâºMœ3}÷–MÈULË&T§t`ç/„½ûƉÈñê_ËuîîkãÄ|õžˆÕû½¯t:S?z6á÷¸î\_ bmjÞß°w |ÚJ§×¸ý\_ûëªyOĦ$ôô•Nëªæ}ñÿ´²ñô•Nzkàéû&öÔÛœžMè=ísz6¡“Ÿï}z7ï '¦ ·óµÒIëêý5acsëÓ±uõžþÇøá£ßàºz_;M¼mì¹×ÏŸnãÚƒ£ý½{›£}¾nOQ§½¯Ûuõ>_7MyžM¬{²ñô•Nk¼ó}vÜÛ.N·‰qD}z6Q»´ÎúJÿ§ï¾úrUÍûÒÄiâ嬯¶¶ÓžþæžnÝ—MÜÙÄYþ=fšw‡]uõ>_7 Ï×J§;ý?=›¸¦×ÄiÙ„Jí×Í1^½otòj~u·nwn½çiÏþÂé©Ÿï šò^ísúŽˆ3­99}ASM÷ž'Ì]eOj[å9}Yÿ4²:}{D)ð9_ç¦'®-hú›4üûC±ùøáûÉ=?ú¦‘uŽ} ßîïÞÕaLN_Єž¶«ƒÇ¸ýkÿý¼÷5Lã†ÖÓ“†UlÏ^“ž¾ )víÞ:ùþt‚¨Õ¼§«Ã¸úxßãêê»÷´Ów÷Ó' îÎû$¦þk‚ä¾u_k˜¦,òt‚(Â>ÑצŸéwïÛ#®zM´<á¥26ÿ:]¨®¾û´ÍôÀöM^OÜצ3Ýù/‚À‡ÿ:9gzÞ¿v[߇´œ¾ÁZÇß "îÓuÎWž0¶qúöˆò÷“û?äq§' uõvë"Æ«·×„WÌ÷6m«<™îC®6bó鑱ž4Ø=?oWŸ:ŸÞqÖ·Gœ:ó¡ïˆX2^ýô)+¹›Û÷›{hî-ṃ֮¯×DNÍ{Òp?°Öó„=m=°¯³›n—1éL8í 4ù:á¾ó=OX:6ïYþ½©Óäk½ætç;AT l=OÐñ4­Nõ–±¯5LÓk¾4UóÖ×­iãƒé×V°ûέaÊñêýPŽ{ªÓzž26oQW¬c]ÂÆßoÝ=8±uý‡)/ëIC J­­aÒ¬% ¢Õ]tu÷EZ'ˆ×=ª´ž'Œ“¶†¥%ÿþðµ6}üîýd‰;›°–'¼ßÓ‡ïIùß2Ö×0ù”AÛA܉˜õ<Áöxõ>~OuÚþš:¯ÞwÑÕñ8=›טYÏ&Nm_ÃdÓÖZ6¡zo»°£ßâ24ïw5o·îš`Åz6¡vßù–Mèˆ v¾Ž½ªsúƹù»÷u¯÷€Üz61ž,dÖªïjÞ²SŸF•Ö³‰­w_÷µ†iJÀ­o¨=#f_ç«M?\_ÐT|o=›P?|{Ã"h½ÏÿN#+ûÚa÷wïÙ„O§&Z'ˆƒ«ï>#3^½¿&VgÕ·0ï÷žMì{ŽÚ¾Ôa|Eöív/M´–M¨ŽC£žM¬{©’Å6Cóõ=öü÷‡Ýºùñ(°¾ ÉN]ýë ;~ø¯ãLîß½ï¯Î56ïû™îµF–×}Äý῎kOQûÚl}ï—±¯lÂÇæßÇ^ÝÍûŽˆiíõl"îYbë;"lš)µ/‚¸oÙÄ;5^Ó!lýÖÝï8ïÙĸݿŽnº·˜ùW61­)õžMؽcÅ¿vDL#jï÷A£ÞOkºöxÝ÷™œ÷tí7óºôöZï;"ÆS]Ö·ýûC{Mä4íã ®;‡uéÖ5íý÷–M¨Þé€÷lâÄtü]ßl}îNÞÕášçñžMäA{_äӦïÙĺû:ׯ#‡¦£ÿÚfë¿k‚þý¡ «vä¿s×a÷×ÐükÝëýá{6Ó¼¯¯M9wÐ~Ö´§ íñºOœðžM̾„ÝKVüëð×ixàë+ý¿Ã¦þšÓÖ{6ñºgÌ|_ÿÁ¤¼gáռϜL“NÞ "îØwOĦÝ:Þ4å=áæ_ÙÄ´õÀ÷×Tçý»÷5Lã‡ïS6=›·QûùZ2\§evëò±yÏaë¸Ëf:¾ ý|¥ÿuõ6K,Ó”—Ÿ¯“`î®g{þî}ïæ=oã-›ÐkR!ÿÚqoòrû:†cúðýè&½×Yù×á¯Sê-›X^oؾ†)Æ[×7[¯]¾§ÿÓ ¹w›°zA­ašòwÿ¶‰;h[6!g{Ï&¼Æ6=›ˆIÿ½Û„Þí_û«Ç˜ïÙ„ßË6Ü¿D˜b¾/hª\ÆûiMkì.z6±o÷žM¬iµ÷ÍÖR£‹¾#â5ÞºøJιý—Žº/hª£>½¯a:ÓÒï6!÷¤“÷lBÇÞ¦ÛD-ól³Ä9úöˆ¼g ½eórïÙÄÙu2pß87ÍÛxÏ&êäÿÊ&¦™RϯÃþ5ëúž Î%î·î^C-›Ðq@=›Ð{Qh|íˆñê}æä~EFÏ&túáâúZFWÍûáSG×aÛ}&sÇÄé-òµÚú¾u_§5騼Nî©Îèg¿þÒü´ŒçY…ØxÇ…|mÊ©ó¨û²þiz?ºMXG­=›fѲ ­å¸Ñ³‰qßDè×jëûÖ}•’Ðñê_›wóÖ×£‹øÚ«GïĦ˜ïG7Eþµ#b|âúfk¹ÓÀX_¯‰=5ïGrÞý|ô5LKÆæý5qo=ˆ/›¸Æߦ:-ëêýP¿i­Q¬/ý¿دR¦ß}K¿úý»oí¾;ýp_ š*æ¿JILsÔñµÙº¾{ß±§‰ÖøZéT¿û×þêiï@´ÍÖZ'À½&¦îk¥Ó½ 6ºMè$#ñUWâ–Ðè;"|¾zOÄN]½/œ˜VóÆùZ8qíéì4²ŠnUc%Z6ñ~ùMß½o¸nо#ÂÆ“ÿûfëÚV=›È›Ÿyâ%̾±jhÞÒÿË«yŸtš¦÷£guŒyx?çzšö ÿÚ€XÍõ{À74o Õ—WÙ‚ç­[ãy•ñ]‘º®Þ·0ÅØ¼‰ë‰ëg¿ŽÇß…çw¾õ÷ñµ]s Úøºu÷#óUJbš¯‹èSõ‚î§5…WÿštªßXOYdô•NvÏ]D³ •ñ‡ëÛ#®úÝ¿JILë.¢g^¯‰žM¬i<_¥…oˆü:ÀtzMäפS5›·qÞ°_;"¦40úJ'½ûº¼†sC©ùž ù÷ý“Ù7[ËMØyuÖ+}|ewÔeÛ_­ç¯ÞW[ïúð½Â4®Ë¯£›îÁIöJãI¡Ùnª£Àò+›˜p!ÛÑM²î9«”¯}8S™’¾Ò©NÓJù:…slîÝãöݼç°ó‡ÿ:0쎺¾ÒɧY£ìÙDX‘}GDNs©_K¯»yKÿ÷´c%ûöˆz¿gË&T§Y£Ô¯eØwØ´lBu¾zö‰­»y¯$qMÏ{®~&Ç­ÿÙ÷WŸ‰6²¯tŠzdÖ×2ìñê}?Ó®«[ܧަgµ31×W_7ݺ~l­úÈÝ—ëLÃÂÜá×ÿþЉ]Óâÿì+â^GÝ&lJÿók³õ©ÿuäÐôÝ{6áR¾Eݘg³ ÅkâkßÄô’ÊžMÔ.­ì6¡SþžÝ&ê`á<ý có~ëî³ì•$Î4Áž}³µz5ï}ßýë`‰»»°ë{Rc¨'%ßYþ¿?|í¯ž¾{·‰ª±’}µ¯È¯}÷îûì6±ç«EÝý»¦››÷•N÷±ô/Lœz›žM¼_Swó~â4®Ë~¬TWÙ÷MøxëZ6¡Rï÷–M¬5­úÈîß½e;ÖøÝ³½Ÿï ölÙÄ÷Œä×A°·ÇeË&¶N;•²eûܓٲ‰uM“Ù² õû`¢ì6q¦5äÙW:{ò!ãk¾nüðmp¢÷æýì6±§9«ì+¼Þ2Ù×Oû"ó+›¨êuùå°có¾HÌ«~\_$6Íœä×A°÷’Ôüª$1áBöƒ`kïÀ眜ç6ÆpÏtBܞ鄌KÐßÿj=_eUùz¦jsù¹g:!øðöìm¦ ·÷¿zÞ;»»‹÷úé/óÕ³u*Q•û®ÿg‡}ÿ+i3[uõg:!㑟z~ϰ©"h×3¹ÚõL'$Í­½;ÇïþUÎZªy»)Ó Z®gÖ ×®[×…\ã­Ó._u-Qð£î™5HÅý™ÿiËùêÏ;tðÝŸ‰‚øXÁízf REÞèC¶ñÃ?³­3ÞhbŽ%ŸYÃñ«¾û3Qp™Ãæ™5¼(­æçù‡±†ÚõÌ¢Ö¿ÿð¸ui2FÝ#kx'ÀxÞŸ‰Â{¨<ÞùgÖpêØÃÏ`äñŽÓ±fâõÌ4«fâõLd¥÷®–5ÔâÀÏbÿçóóÕ­]¤¢î™(Ì+Þÿ*Z¯P½Í3QÐqhôþ^m2·nÝ3Qqüû_}í¨æ« VÇîâ´.Ípõóìlþðímàhî-É™¯íUV¿û3QK°]Öo]=°ÏDá= ¯Þ²¯ŠWc‡sÕ#kxýÞ¦% ±ç«?!/è¾%bî*[Ö<½Æš‰×3kãu矉‚œ=>qÞ^¤Qþ™(Ì[N>aò¼ó^/©Îg|`½½&~jãúÓ¿mþðÑF@hží-3ÞùgÖ ^õã®g¢ð”ÎÍŸ}ݪR›W´ÛXÜözf ºPVøkKÄø–yf æè¨Ÿ‰‚ëóñ|MÔLéûùèFÎü’zd b+ê‰{$ ŸÅ>coóÈädú¼‰Â;¹ëE^¬Aü £~$ Ÿòâã­{d ïÑ[Ö­Ëþ†›ÇóÎãÖ=) •VÍúÝ¡VQã–'Œg:I«f-yo|¯jÖçI«fý÷MxÿáùšØ1xkãy©æÞ1›·4ÿ^O+­šµŒ{…¤U³–Ú¹ ½šuÎŬŸIƒA-ìç{­¹ùnc¸z»uóïþLô¬úážì ã±HÒªY¿öU¥´ÙÄçŒ1lÚþˆ@-ìG6ñ9c¼zË&våq­šõ{Ì3þî-›Ð¬¯}™pŽÍ¿Î=¬æ ö÷üÝûV´-›ø%lžÙ„l4o‹˜ö˜Ë´jÖ/¯ZØ­šµìi«‘´jÖ¢õŽkÕ¬ÿ›;5·ö&ÔjÞ·Íß½ ‰«¨q«fý~–ÆÿÌ&Ö–Šù–MŒGI«fªuõG6ñ¾Ãó÷È&Ä®JÄžÕ¬%t¬û¬fýο7®î$2æâõlâý ïääYÍúó‡ñÃ?² ½Ê&äYÍú=*œ?ü#›G ôg5ë÷œïü3›È\ýàÆÿÈ&>%-ë»·-öËտ䫚·DlîëžÙÄÿxE6v ¼J«f½¤²‰VÍZdz÷¥U³L¼´jÖïGkn¾¿fõî?œö’÷f¾ðá½­»˜›?oÝÂÏvµ°[5ëwYþ«þÜØYeŸê¬ߨa«Yëû纳‰g5ký{æÔ\“£ùz¾ÞÇÙ³šµ.¼¤žÕ¬ß‰¹Íþñ†õ:JžÕ¬õØ8$~V³~ÿÇWÞº˜¶˳šõg»ò=®{V³–¹à£´jÖ§–¨‰vuûùVÍú=©;ßÕa|E¶jÖk]hîmZaüá¤Í×EVó6_7Ž*{5ë: FZ5ë—£‹^Í:²î|Ë&bZ½/­šõû»àê§õ¡ó‡ïoX4¾&ìÌÍŸ}ï ÚnãóÞªYÿtV­šõký|«fý²¨ß½/b’¹ù³¯‹š»xV³þwzËÔÜÚ{ͽ½eÆç½e;ñÝ["fãÛV4å©°Ù]Ä®±ùóÖUqiÕ¬_9¾ [5ëWm»g5ëÏàbþðöøW©øðí ;N÷õjÖkãêmªsþáž6âõÒªYŸ[5ë854Ò–MØ/Í÷svßÑü´?ŒÝÅ#›xaÄü#›xßÈÑߟլßÿ1üîlâó‡ñ‡{dê˜1{V³~Çù ûÈ&Þ—¬ôÿYÍú]×|õçC£g5ë÷M™;«G6ñîÜkŽúYÍú3.™g6‘~þ™MØx@´jÖëà‡k61.Y‘VÍúvWØ´-ãZ#éÕ¬}¡ù3›ðk|¿ûóÝŠæÏ×ÄxF«ôjÖ¶ñÝŸ}ÝžcþkDÝùVnÏ]e«?W§çI¯fýKWùÌ&^ZØ«Yû(#½šõBoÓ·DÌ?\? 㺶%bNÀ[5ë×ÁóþÌ&^ãqXò¬fý³’YžÕ¬_ï¡ó|õç­Kt•ÙæëÆéý^Í:+ ìÕ¬}¾uO›Lq·jÖ:î—VÍúïlîýi‹}rlþŒºS©P«fýgsÔ­šõ;‡¸ªùs‚}<=OV_дÑü)b2 ŸÕ¬?Ýþ®æÏlbþážÕ¬ßïÅ ›g5ë÷ËhìmžÕ¬ßï[«ÿÈ&>‹Çæ«ï'ÖÖÐèYÍúý2š¿»<±:QJžÕ¬ß^ç-‹Ôjþxþ߼cÔ=²‰÷H'ª¹>oÝœA?«Y¿¿ Õ‡d’csyV³þ<1h~þÏÍÛTguV­šµÄ+­šµ®]´jÖký|«f­µ©Sz5ë=Nu¶jÖR‡*K«fýK:ЫYÃeZ5ëù¸ yV³~IÍ+ÏjÖ/‡FÏjÖ¯ÚèÕ¬ùî­šµ.´jÖ/›ïü×I°uëZ61î—‘ïjÖõ»·ŠcviÕ¬_Š;ÿ½%blÞëÏÕ­ÛÏùº=øG6ñ©ß^ÌybbúØ]œ¶ñÔÕÛJ§yEë:_'KTó^gìmN_¼™Õü9src›VÍZÀ:­šõû‰¿{«?·k=m«f=Ÿ{ ­šµ‚öig|`íÙ×íZgõ¬fýþê97·ÖÏ×ïnÏ×ÄxÒˆ<«Y¼{&bãFfyV³ÖŸe™ÏjÖï±ê¸XèYÍúý.Âèâ‘M¼‡ãÈêYÍúý.BÔ=²‰wÎòKs{~EDÝ#›xçUãò¼g5ëwêXk ŸÕ¬õ—EàÏjÖb§>«YË/Óû­šõÁJ§VÍzåhR­šõº0²ŠÖ×ó´ÏjÖŸÞ¦‚¶e{Ïß=ÚÐW>°!cжýXs²z61šT«fý‚´jÖótyV³þÙÈ,ÏjÖïþ߯G&ŸoXLó>«YªÏÏß½ï@¬ß½m°w¬H¯fýªU^­šõËdzg5ëŸó.¤W³¶q©R«fým´jÖ¯ç¨{5kLy=«Y¿þnœ›šÇ3Y¬ü½U³~Ùܼ­tZ÷öyéÕ¬Çê´òUͺÒÿ^ÍÚÇ\¦U³–¨ô¿W³^güáz]‰À‡<°ÛlþðÏõu×BóG"6×H•g5ëO}×jþÌ&>‹ÇæÏlK•žÕ¬?Ó}ã‡×çk¢ªUʳšµšýòá­½e¤šû3Áó¸g5kµª/#ÏjÖš6ŽmžÕ¬ß/©âûg5ë÷KjÌežÕ¬uy͘=«Yëþåy_Ï[·jló¬f­k<¿NžÕ¬%âÞ}/ÏjÖò¾¥ó‡Nuj½¤Z5k9c6Ñ«Y¿jló¬fýî‚}ì*ûnëRàVÍz.!­šõg­R5o˜8 x«f-uð ì¾obœ%Þ}ßD½ez5kó÷^ÍÚjpÒ«Yçضo"kdÕ«YÈK¯f]ç”J«fýÊù»ŸçVjHü¬fý9¥kŒùóÌa¯JÄZ5ë×¼(ôYÍú3WYß½eg\<ЪY¿`‘½šõw¨}U³®T¨W³þ3®lìÕ¬÷‡o[NFXiÕ¬VyµjÖ¯ñ°yV³þ·löþÃ3êb]4›øéiÛ¾‰yÅK«fý³ÉëYÍúÓoaóÈ&$óÔf{Ïo™g6±ãBóç|ލô¬fýΟ+xV³V1 |V³VÇšÒg5ë÷xzþðlâý´lBß]Ý6lâÖº‹g5ë÷Ç·Y=«YV¦ ùóÖù¸íâYÍZßï’úð)mÜ0>2ùœ$†FÏ}6!­šuT…ViÕ¬×Ùsó~t3š{Ãéù»G[Ø‚ÿ|ÃÆ8ÑÚ«Y{m³êÕ¬ç ·^ͺJ°I¯f-cתYÿÌYõjÖêssûzÝxöuk|âZ5k‰êëZ5k½Æw\«f­»Æu­šµŒçJ«fƒÈ¤W³ÖÑãz5ëÄ­k+æn­šµÔ!êÒªYÿ‰qŽºW³Æ#ÓªYÏÕç¥U³þã5®ûªf=¾eZ5ë—Ö²VÍú5ò–ó}vS5?mRc¼um¥S®Šùf³A·jÖO©æÏ[7÷6­šõ;S­ö‘M|^äã_-«A鳚µšŒk‰ŸÕ¬ß9GmòzV³þ$9óÕŸ"æWÎ×­_>|z5îL\cØüsp2ï@o5¯_X,ÔË\uĤ׼®sJ¥—¹>cgÕj^ÿYÕ×µ2ׯ3ö´Ïš×ŸSRëwo+æð­æõßùÔûÏYâ¥coÓN‚•Ó¶2×:ˆ‘Vóú3ãq7®tÚ>.h5¯ßÃù ›ç.ì3ó¬y­Šé¾g™ëϲ¿±¯kÙŽŒ°–M\cþ¬yý~ÔR¥g™ëwÌÍwþ¹ ÛªÞ„<Ë\kØ8ª|Ö¼V¯s åYæúýîÌùêϩΟŽú¹obë8¢~Ö¼þwQ¿ûsßÄ‘qCë³æµnLu>Ë\úÿ1lžû&kNže®?cžñ‘ydò³}¾•¹^óê¾VóúgQh/s#¤öš×»P©•¹þ³ÇQe«yýúy`›Mä8ùÐk^o¼&¾JIŒUË&~zÚ¶o"Ç-f½æ5fNz™ë­ó‡o˰kÃK+s-k˜µ3ïwoSó#ÓÎtÒZ–ÙË\Ï:Ðk^W1kie®?ëvÇæ}pRQ×öMÌŒÛk^ãÄÈVæú5Tò¬yýYÔSLÛ7qÆ™Ò^óZkÞ¦—¹K6H¯y½ðÈdKÿǃ‰ZÍëÏ—©æmp²çߢ®&je®÷—.´š×£Bže®?«?§ßýYóZ/©ŽúYæúý’³ o»°±²ñYæZC§òsò¬yýþWµŽúYæúˆkž5¯ß£ºJÄže®ß/¿qYæ³æµú14ÿŸ·nÉ|îÁ³æõ;aª¡‘·}cI&yÖ¼~¿"+{–¹V_㺋gÍëÏsVóÓÞqãwî›P­—Ô³Ìõg†ŒÍŸQW…¤•¹~ç—ã×Oˆ­3­ÌµÌ1ßj^¿¬–iµ2ׯytáý„Ø ÍŸ»udZí¯ 4öu®ó‡o}ÝÏwöu>¾ezÍëU£Ê^æz˰[Íë—ÖDk+sýÒqad¯yý§hÃÛ.l_R¾~Ù™ØÊ\Ï#¤Õ¼~§,óm¶Í¿{[éä58ée®cœîë5¯WÍœô2×g›~Blm¾Ê\¿Æ;¿û¶ž¸¶o"æö¹Òéïûmædœ|è5¯ëyée®çõó­æõû±¬°yÚÄ; oÝÓ&~öA?Ë\6½Íy®9±Ÿÿ\s’c"ö¬yýÙˆV¿{Û…½ç¾®ï®‰Ï2×j3¬÷M¼ßÃuëžû&b>›÷Yóú}õ{Û71–§‘gÍkµU³ÄÏ2ת1¿ãžû&.ô³Ìõgiñø~o+²Jµ2×gÎ&zÍkQ4oÇ&üòáŸì©qû96¡×¼ÎUö2×3a÷š×QÛmZ™ëÏ)ncóv0Þ2ñ_ëh5¯QZže®_s-li5¯_‰˜og:鸦´Õ¼~U‘ie®ß¹ÌøÃµ}£Êç.ìOÂ76Î×YÙD+sýй·iû&#ê羉ϹHcó¶ø¿&^že®?‹B§öYóúõÙÿ¿ÞhÇaËï{Ík8ÙË\Ǹž¶×¼Æ°°—¹k"K«yýZ?ÍûYówfÐRÍÛ"±1 m5¯WUl”Væ:|ìçŸ5¯?kH¼š?^××Y=k^T¨î¼´Ã:ÆyÚgÍkÝfhþœ¯›SàgÍë÷¿J|÷çTç¼åäYóZÏ©¡Ñ³Ìõ;½‡ÄÏš×ï|«zÚg™ë÷;nÍWNu¢³z–¹V×qdõ¬yýNËߟe®õ³ÁblÏ>Ÿ^3®5j5¯Ï®=à­Ìõ'S›÷ùº]ÍÛ2옯ގt®‰—Væú³úglÞŽ¯¯e­Ìõ§†çؼš¨øðm»Žì~öuRóuÏ2ׯ5–Ò–gÍë×gpSÍŸ¯‰yzÿYóúõÙäYÍÛ¤ÓHZ½æõ¾põg"1_ý™Ãž¸¶o⌻2{Ík©E#­ÌõkÖÀ¯š×øÝŸÙÄk>öðYóúsJ}÷óÜ™8€“hû&®ÄÕÛš“QB{Íë}ðÝ›ÃÎU;!vÕš“Væús€ñؼ-ˆEgõ´‰¿ã§æÍ&*ie®u^Ýj^o«Ai+sm[æÿ<ç$kTù,sý îñêÏlBp´ï³ÌõgÁåóÏlb¼¤ž»°íUèYóúý¬Y£g™ë÷vî矻°ß¯åúݽ-MÜówŠ– ?Ë\–õ¿{´ ìÚ羉#ó#óÜ7±°üþYæú·ÍûÏš×:®ïþ´‰ð_®n-c©Îêiëú¥ùã]˜¯ke®?ÝÒÔ<Ûnšhíe®_£A·š×‚•­Ìõ/»´ZÍëOájÞ÷ÃŽaÓöMààÁ^æÚæ·Ì3›T»ˆ–Møø‚Ϋ¿aïßÊ\¿Öš›÷ùºUÍÛ|Ýx\¯yíµ=¿vaï±yËa¾/ˆ±y/š`Õ¼s2îHm5¯_XsÒË\Ï›>zÍk«Îª•¹þ{nþËr^æz¶‰Vóúµ+–¹~ý­95y;6a|ǵš×ªu U/s=¦Ýj^+B·2×GFH}Ö¼þTЪ;ÿÈ&>+ž×Øüyòÿ©¥ÈÏ2×ï Vææm{] že®uqHü¬yý¾HiŸe®?g„éØüùšÀqÏ2×úÉ±ÆæÏU»6}dÛ7×ü៉ÿ?Ë\ëŠqíÁ³æµ~Žä­æÏÅÿó†—Vó:±æ¤•¹6Ó¹ù3êvõó­ÌõŸ™uZÍë×ÿhþ\K<Öƒ–^óÇ =Ë\¿~9÷ [6u/sýgœ-ì5¯O [™ë_¶}Õ¼®t/s=o-l5¯?KZ«y+7ùˇo"†·Ìù/眴š×óìûmáĸt!¿ÎtªG¦í›ø3&à½æõŸÊߟe®_¿œž­z¶]´2ׯ“ó‡oé­òêe®g‹l5¯?•?ªy;6aœîë5¯ÿÔLi+sýòù÷z«vß·2×2ŸÙk^£ÊI+sý¬ŒÍŸCb«y›VæZæõ6­æõ²:ª•¹^ó$s«y½± »•¹Îg‰Ÿ5¯?G8և穉ó‘PÏš×úÙt_ÍŸ‡uÌûãž5¯uíÊ&že®?§"½Ísß„Eå2Ï2×ïW䏿$Û.쟮²í›XsÌ?÷M¬ o™ç¾‰Kæ1í³zéÂÕƒ™ µš×甀·2×k®ÔÙj^ÿ€ëe®s”êÕ²‰¼ËЫŸé4m)Õ«ÛÄ}t¿¶*×/fÌ´•¼~­»§Õ«ï–¹yÛ{/ÖVåZÆ9+í%¯ÓѼ-œðñÖµ’×µ¶P{•ëKÇßvaKÔwoÙÄŸiz_Ÿ%¯_ŸÃ;ªyKÄbþðuW÷¶e¾z<[ßË´ôY ûõÎbjÞvaD]ß7q·Nûöºz«7áÓû]{-ìs¯xÑV ûom¶©y«J|ïÚÐV [Ça¡^_'ÄÖo»°Ç©Úka_Wíj§C´ÕÂÖZš¨­ögOÒØ|#jmµ°çí6Úja/±ºóO›8{¾uO›ðóÏlâŽã·Û©‰^WîÂ¾ŽŽÌ#›øŒ%³š¯¶Vh¼uÏ}W¬ºóÏ}ïx Úç¾ ©½Àú¬…ý¯jÎÔü1KìµÑIŸµ°?ÙŒßý‘M|¶­ÖÕŸÙ„g¼h«…½ÖUWÿª…=†M?!vÕ[æ´cÖüá­M}Ô#ÓvaÇëW-l¯ß½kó­k»°_VWoÙĶ1æ{6!uëZ-ì”±£î»°OÝ:ë‡uŒQg½¯«ß½í–=ø–M¬ê*[-ì­ã÷¾G¬šûó¶qd¥­öËqçŸÕëÞƒÚñÖy«­£Õ]´}nãóîs¥Níµ°×5Æ|[éT3¥ÚkaGÿi¯…­Rß=a¯¹y_šXWïû&æG¦ï›ØõÃ=mâS'xlní%U·®Û„ÏWoûaµFmßĸÂM¯V½®J6è³öçêã‡Ïö†EGm£“ŒÝÅÓ&ÎÏ úin6í3›HÅ÷¬^÷~Œ¿{«^÷Ó×=÷Mìk1}ÖÂþ¾qÿpÏZØŸ=Ý26¼awM¼è³ö礹56ßÏ9‚ûÌmµ°ßáäcógöZ«­¶ŽSÚja¯:lS[-ìÏ)_SóvBì%uõ–MŒ5‘õ«võ6­ög²rlþ|MÔIbÚja¯åãïÞNˆ}>|cÉ&T¾ª×jÞœœo]Ë&j/°JÛ7qæ¨kÙDÜkÌ´×Âv™›·NÕ×I?ÓÉÇïÞva—Ak¯…=õ©­ö«öh«…ýÏ`×V ûOhmß…=¦À­¶Ôâ@mµ°õŒ)p¯…}¬¢®g2~÷Õ^7.h«…ýAå±y[š˜hÞ–ëØøÝÛ.ì:€N[-lÝsWù´‰÷sUßýiËÆ™“g-ìÕ‡î?´Ú:1_Ýæ4ðY ûßy Sóøåyoû&Æ}‘ú¬…ý9é~EJÛ7!ó­kÙÄOOûÌ&θ0R[-ì¨3mµ°CrnnmØæÞúªù»÷‰uçŸÙ„Ù56·vÖ®«?³‰-6Þºg6± ¿»ý—ô¿ÕÂ~gªõ¼·•Në—ß&Ø/4o‡ëîù÷ö–íµ°õŒ?\Û…­Zï§&Ž1ïm\Wòg-ìŽUË&ª,‘¶ZØŸ=Çcó–ˆáçí¬Î‡ÏlBï÷–M,›?³ ­:b*=›8cOÛöMœDóvV§ÍÍû öŠù–MœùwfŸ•çÕ¼õuómËIeÐÏZØŸ¥scÐf[8ÑÅ3›Ð±"³¶ZØŸ)‹jÞع·é»°½ž÷l¬ÏÍ­ý«zdž6¡9‰Ÿ6¡µ]¥ÙDŒ“ÚëMÔ+R[õ:9sóV¼¾f´­tSm+j¶j³ Ÿ]Ÿµ°?KG£š÷³:¯±y«{¯dVmÙÄGÔÚÎtÊ«š·lb#êV {­ŠùV {ùØ]´ZØ[ï/úU {Íþ¹ ¶–ak«…½®iE«öZØç^‚®Úlâ'™[-ì×®×D«…ý'ç®­tÚÕÛ´ZØ/g‰Ÿµ°?3[uçµ81Nq·ZØ/Û¸zÛJ¿ß›Md9l«…ý·ÜÑмeu¹¶ZØKçïÞ²‰ZÙ¨­öò5FÝ3›X?oØ~¦ÓÜÛ´]Ø+põÞ×Aës‘Síµ°%ÇÞæ™M¼jËöZØk½M«…e½ö™ï|Û…½Woóuó;îY½NÃöZعçßëÀè¢í¾æYÛ…¸ómßÄgN´é^=í3›ø|®±y+ÁV‹FZ-ìODŒÍ[‹®2Û|Ýï|[éôóšhõ&||IõZØYµZØÆŠÌÚjaf«ùjÊ(có¶3±ò¸V û3°›·ú°Žæí5¡óÕ;a£ysØqh´šMàý¾Ú¾‰5¾"WÛ7¡5s²Ú ±:ÎQ¯¶o¨´ú¾‰qÒi5›ÀZ£g-ì?¿ òê'Ä:>|aÓlâO¥ÀÏZØÿ ÇNÍ›þ× ùj6!ã*¯ÕNˆ­B!Úja¿óÕŸQ›hµ°ßoØù»÷¥‰õõZØrƶ­tòêç{-lÏñ»¯~¸îªæýt1êz6auëV×+ÜÖê‡ëÖ×l⚊ßéZ}ibTóüJ±†æ»ç°õÀ¶ZØãYúU ß½ïÂ'­ögÓn5o9옶Zؼ†­ökžd^mßDí ÕÕ²‰3w•-›¨Õ¼Úkaë8õñ¬…ý y{`Çñ|«…“ÿµÕÂ~é8$nµ°QÄ\[-ì×<ÕÙja¿0ÅÝja¿dŒÍ§ak«…ý®Ž¾­t²Z»ú.ìqPºÚ.ì…ßV:%Øtµ}Y‹…Vß71N´®~B,†í„X™»‹VoBŠuV;!Öæ;ÿ•MÔwo'ÄžqdµšM8>¼?±3®£^Í&¤¬VoBÆ¥JÏZØŸ· >|[_7âÂjg:íÓ®è˰Ç®Ÿ‹¶ÛÄüá›M¬š«lµ°õ—w\ôõuuç£m9™{›vBlÅ­­¶ÎKÐ[-l­ŠÚka¯yHÜÎtª:¡Újaÿ‰‘´V³ /{ÖÂþ< ãïþÌ&^ñsõvÎÉüÀ¶ZØU KWÛ…}¯ÈÝöMÔqÖÚkaïñÝ}ßDõó»W¯ûåêÏcÚýµoÂÆæíœ“ÀÕý?t»ÙÄ|÷¶pbLÀ[-ì?èëz-ì=.èµ°ßc jÞnݸw`÷lÂÑü´³ñÖµêuRkNZ-ìù4-mµ°?˧«ù™¯Û½ÞÄ®;¯ý`¢ñê-›8Rß]ûTçܼ‰XM}ìfƥȻ­tªÝ÷º[õºñX$ÝÚsØSÍÛ;.ÜÍ&ªºîfcyYݽÞD½ev?ÓiìmvË&ÝEË&Tçæm{­|Øí„Øw®<6oú¿Ð¼®3vÔ­öÏèb;†M«…5(íµ°ÇãmµÕÂþ;|»ÿÐ{›^ »2©V ûÃÅcóhsŠõÃõ]Øs_wÚÁDøîO›Ðñ$1mµ°ßà ÚfÆ¥J½6Þï­öû‡;có–þÿ|ø6®›{Úv¦FV­öŸœï|Û7¡xâºMœ¹y;ÒAÛlâÏ£®ÙD®£½¶ÎOÜ×.ìúáZ6qÆÕ}­6ÕV [dîçÛ¾‰]KÔz-ì3ÿpmß„ÔDk«…=Ÿ²¢­¶`@¾ÛJ§=®-Üm6î¾ {yœÔïÞ²‰?ãüün6Q…¼u·be~ޣߺºzË&öÜ×}ehÞ÷þ1ý­ m61O}ìnRw¾é4o1ÛmßÄ)‹ÜÍ&þŒéÿ³öK°Ék·b¯yd•ítZoÓjaÿýÃÔüuYÙD«…ý)†76o·îà÷SGƒîµ°£æi[-ìÏÒ×±yëëjáÄ黰dzÓW:]hÞëð¹y›t*“jµ°ßÜüÝÛF'“jÞ :OGFh«…ýgÕ[¦ÕÂþ-46oCbójÞVuÎßý™M¼0$nµ°_{ÜäÕjaÿ‰]ôZØãùóÚjaN~®æmáÄøÀöZدJFZ-l«êéÕë´Â¦e6fR½ö¾ ÑV ûµÆ/½¶VÛjaŽá›G3„zâž6¡6Μ´ZØjQaóÌ&>J46ï 'êê«ÍœŒiàiõ&^•AŸÕØùÃ?oý\ý¹ ;çÞfµú°Õ×¾ob¾umßÄUC£ÓlbýÒ¼LTAÛlb<çDO³‰?õ’:m¥“¤ušMH-Ã>­ÞÄšo]³‰-hÞrØ1nµ°?vwó^obœ·iµ°µª”j¯…=qú.lEó6$±^ {×jÞV [f mµ°?µªy×½Í#›øÄV5oÙÄì2½öU fN;ÓIGXiµ°qj¢¶ZØŸ…Scó¶Ò©±V ûÏšcÞú‚Øê*›MÌZ-ìW&¶ZØ|~ölÂjò¡ÕÂþ³rüÝ[6Å­öß‚CSóöš(Â>}¥“ξšˆ¨kÙÄ—aŸè;ë~ÎÉøá›M^R½ÞÄ™¯Þöþã»7›˜w¤ž~Blm§=Í&æ5¥§íÂÆê¾g-ì¿ë§æ½z]çO³ çëžµ°_ºÑQ?³ ‹œêiÙÄv4o3'ó ô«z>|‹ºqûiÙÄ®…§e>JíêÇ&ÜwÞZ61¿&žµ°_?먟µ°?r›·Eb‰«·UÓ¡‹j-›À¼M«…ý²1êZ-ìÏ‹µš· öñ5a=›¨åy½ö<4²¾Ò©FÔ­¶œ3_½šXëi[-ì÷ˆxüÝÙÄ'ñjÞªœŒÝjaÿÙå°Öwa¯ÈV ûUeJ´×Âkmh«…-Ø}ßja&àÆæ½hBݺ¾oâš¯Þ ÄÔײ‰3n)mµ°ÿàxœV û—9êV û¥µ »×¶±£nµ°ß¨úð-›˜·UZË&¬¦¼Z-ì¿Es§æ}-1š·ÁÉ´­Þ„¾{ß71þpÝ&*ýoµ°ÿžÒ55oìeÐÖlBÆÅÖ² dÐÖlbÞ/ó¬…ýÙ¼¯ÕüùÀÚÜ]<³ ÅÚk+l|IÙé{ÿïáµlbÞ+dÍ&´¶[³‰ùÀ kÙÄ4?mÐ3>qÍ&DѼ͜Œ»2­¯t 4o}Ý8²2ë«:«³²~Ìé´m¥“Ôdc«…ýšÏöiµ°ßOF}øfÇçß1¼"û™N>_=~kÞOˆ›û\‚M[-ìϺݱ¹¶Ác]ýy¦Ó;ÉX.îãmµ×Â~kNZ-ì¿g+ÞèŰƠí6Qk̬W¯§¸¿ja×b¡^ û5¿"[6ù³öûÖYd«…ýÒÚ+Ôka‡ÏÞ~Y5›ØãŒ™5›ÀwÏ–EŽw¾eXíÓkaÏØka[ªÔjaÿÑ57oÛë ÔZ-l1ýïµ°±‰»ÕÂþ3–%Rûm¥“µ•N2nh}ÖÂþL„ßÞÛJ'‡FÞ² «Wä³ö§lŒÍÛJ§Z®ãÍ&dìë¼eøîÞwaÙ„·}&øðù樽Ÿ[£ oÙÄŸQBŸµ°?ƒÇ¨æ}ËIŽÍ۪Κ»ð¶ÒéÚó‡o·®†ÄÞlâý£ŒÍ[_w¡y»uã ºÕÂþc•·ZØ¿œkÔja¿ß2W5ï県¿{_éT.ÓjaË|4P¯…í5?ßjaŽS›·…µ[ÇÛJ'ÇuÞ³‰š|èµ°e<ö°×ÂÞµT©ÕÂþ<Ëcó6ÁŽ }f¯y—–·]ØUV[-l‹Yk«…ý9p¼šçydZõ:¬!ïµ°ÿŒ=m¯…½kOèW-ìqª³×ÂÆ¡‹½¶Œ©P¯…U^­ößÙ¨©y;«ÏûîKǘ?m-qåï­öû‡¯ÞêM`ŽºÕÂ~ÍÃÂg-ì—àІg-ì×oaÓêMÔÑýêm¥Ó|ݳög¿2>|;çd¾ó­Þ„ÕÑÞëMŒkN¼eؼïmßļŽÚ­o9ÁÕOY½M³‰ª¥¥ÏZØ¿þpmßDâw·g_·æ˜oÙαÞÎtš·Y¹÷M55±×ÂŽÊãžµ°_íš·™“‚Ôè61Žmâü²ª³ÕÂ~Æ íõ&j²±×ÂÞswÑlbWØja«ÌÝEË&pfã³ö§hÂxçŸÕë>'ÂWóÓ°jìií98‘æ}ÒinÞwaã»÷I§ñ‘iÙ„Ö®Ìhõ&Dææm¥Ó®°éû&æWä3›PL°Gß7‘só¶ª]eÛ7¡c -›Àa›ÏZد_¶GÛ7‘xd¢Ÿs27×Y…¢ï›ðñ‘iû&ý|;Ói³Ä­¶\µÅ¬ÕÂþmlÓvacDÝja¿öXž&Ú™N¨¥ÕkaïùÎ÷3pçÛ ±ó4o¯…½š7LSàV {ycÖkaÏGFD[é$è¬Z6ñgÌã²eYëióË&öؼõuõ–éµ°cœ´ZØ/¬`ÖÂþ,ú˜¯þìëN y[s2¾ß[-ì?¨'•W?¿núáz-l¯T¨ÕÂ~§ÀãÕÛJ§hÞú:Ÿ›·•Nµ<¯×ÂÞãµV û3-_Íý«›š?«×íêç³ëcÐ>ka¿>‡éßÍ›MÄxFk«…ýs´oöbÇDìY û³š«~÷¾obìm²Ÿé´puo°žcó¶Ñ Qײ‰?ãÀ,[6áµ31û™Nãˆ:ÛJ'«Ã¸²»ÆdäY ûsˆNýî«ÍÏÏ{Ë&þTþžmöüšÈÕw&â»·YâÑß[-ì?8@¾ÕÂþ»ßrjÞ—ëÔwïÙĸ²±×ÂŽÛ´Zد°¹¹Í“ÙÎtÚó#Ólëi[-ì_ëhµ°?‹Dïæm¥“‹FZ-ì÷ ®˜ïµ°Ç\¦ÕÂ~¡¾ÌW-ì=øvëJÄòôÁÉøÈ´]Ø/D];ÓiÞ±Òja*²ßÍ­¯9o=—a+z›–M̧iõZØHB[-ìÏ†Ž±ù³¯;‰«·7ìž›·ÃuqçÛ ±óqÖ­öÏ­öšW2÷ZØŽÿ\é´uÜNû¬…ýú,Ú¯æ§åïóÕÛ­Û¸z×tö}ˆyoQ7.Œlµ°_8.£ÕÂþå\âì»°ëØ„l'ÄÎg}d[é´WoS1ø~âš·v\†ý¬…ý™î«®²e>ȳe†ÑEþ—3سe?ƒÒg6ñšw&fÛ7‘«º‹v¦Ó5z«…ýg'®Þ¶œüòÝÛ‘Î5cÖja¿tZ$¶®kÞ­³z-ì˜Vy­V «¼ÖÕëMèܼ¯\½_7ýp«Õ¹Ï9Y½¶L‹ÀW«…ý:÷äÃjµ°çZ«ÕÂ~U1¬Õjaÿ­¢15o b7š·[7õ¹.éÛë´š7ÂÖñwo6±³~8ib®ù»GâêϩΕÖÕ³‰;[ÏZØ/‘ùw×~v…öµÄãwoÙ„ïúðí„Ø±²Ïjµ°—Þ;Ð׳öKÇ£BÖ³ökË=G½žµ°_ºç°YÍaïÉÆÕja¿Ÿ÷1lúJ§SL[é4έ«gZw¾­tF®V û³¤µšûÔMÍ۪Ϋn]_é´Ç°i'Ä*¦Ÿé4GÝî“NuõýÄ®«eu:îzÖÂþ,Eæ훨ÅBëjÙDÆø»·zWÏ6{<Æ|³ Gó^½nWo6±­™¶ [cüîÏlâ³ê¾šŸöÝÇ mÙÄA_×ó„5þî}{DÖwKÆß½/h’ºú׎ˆñ÷"uzÏ­Våú5n«\­äõ;jëÎ÷<áï|#ˆDж<á—ç½% ï}þw¼z_Є¶­azÇÄØ¼grê»·ýÕc5«ÕK^×äÃzV¹~öù Û4Õv›õ¬rý9R`üá¼­ÛÕ<žQ÷Ë ú™4|ŽÏ¨æúœ0›ßqÏíëçgŠõËû=NûŠÕÏGŸNŸ¸ž4àyïò¥Só¶*uËÆÝy«•¼þ»ÑüþC[›>wÔmASÕ_­ÊõŸ3?°Ùº4«~¾å /£®% zª·ik˜tŽùF»úyig¿ŽGÄ,iIú'^–4u˜_ÒŽn’{Ù’¦ãù6«•¼ÆnÜÕª\4qlþ|‘Ö¹KúÙ¯6øüšSü÷‡V—N¦ƒÈÖ³äõKÑ×I?ûuìi[ÉëÏJ¶jÞ†c*ÔJ^¿V Ìz•ëy`ÖJ^¿ªÄê’~Z“Ìß½zmuõ¶†É÷Ø\¿áëþƒþ‡®²•¼þS“NKúiMã€\¾ŠÔ]Õ¼o&™¶ éUɈôJsØt‚¨y¯r-2Æüj…ÖW…Íê»úǨkÁæ=ŽžU®?¯ÈñÖ5‚¨ªÄëYåú³Øôóáÿÿïÿþ¿ýÿÿ·ÿÏÿòëéTÞ¨JDyLP-1.10.4/Data/Netlib/sc50a.mps.gz0000644000175200017520000000141610430174061015212 0ustar coincoin‹ K®9sc50a.mps˜]nÛ0„ß ø¼@íõóh¤Z v€8E{ÿ“TI‹pG.¤§l¢O3äpäÀ÷ËíZ¾®Çs/çÓÛë¯ÇùTî¥Ü.¿ܶ_JÙ~9n—À¤0Ù6]¿&‡©Â4Á4ÃS˜Ö8Éxð"àEÀ‹€/2Ã^¼(xQð¢àE &ð¢àEÁ‹‚]`/^ ¼x1ðbx1ðbàÅÀ‹­qrðâàÅÁ‹ƒ/^a/çÅ!#‡}©›—ç×—Ÿ·ûÇyÞ®mø<Äí8—péPÚÉŽ¡ƒ×pÓÓî.å"ÒÑ>%"FEd¨\dûCŸÿ÷"(p=Å•x²]Þj7 ÜUé³¢ˆX"R[»“»&šd²$1µ—Fr×L“‘õ.Y& M.ŠÈx—l½+Ý‘>þa€¬pMp¡+)½±Ç•zŒ%—¤äO²ã"½%îJð$kq*K.IÉžd-•¶ú—4«áZû%—‰>+Šhò&i¸NÉ]3M2Iú×pÍ2YhrQDÇ#¸f™¬49‘#¸&ëÕ‘î ˆ$-U¡ë+ŠXò&i¸ÍÉ] M.fbIÿnY&+MDänI&6Òä@Dàž¬×„î ˆ$-5¥ëß‘€Çwd3þ‹_ïß.ï—ó韮ëþDyLP-1.10.4/Data/Netlib/scsd1.mps.gz0000644000175200017520000002430110430174061015312 0ustar coincoin‹´K®9scsd1.mps]IŽ-¹‘ÜPwˆ 0ñ8Ű,HzÑ** }ÿ›t¾Ÿ‘Aº™QÐB¥ “ùHwú@úŸüóËÏ?ýí¯¿çßû÷¿þï¯ß[þ\–þúúçóß>?Ë_ÿ’¿þ­ ÿvþ­ +Ãßêð·:ü­ kÃßúð·>ümþ¶Û†¿mÃßöáoûð·cøÛqÿ[~Ýÿ–‡yÉüäa^ò0/y˜—<ÌKæ%ó’‡yÉüäa^ò0/y˜—<ÌKæ%ó’‡yÉüäa^Ê0/e˜—2ÌKæ¥ óR†y)ü”a^Ê0/e˜—2ÌKæ¥ óR†y)ü”a^Ê0/e˜—2ÌKæ¥óR‡y©Ã¼Ôa^ê0/u˜—:ÌKæ¥óR‡y©Ã¼Ôa^ê0ö:Œ½c¯ÃØë0ö:Œ½}ŽöoÿúßÿþóÏ·2ùü§þÚ2¯r©•åöOþX. sûßSþ˜áߺf„}Õ p d¦R±âI½4£B%(À™JÃBªs$íÒã • Bf* iΑôËê(T‚B™©¬Ê.Š þm‘öH€!3•m’?Zn%×¾NÓ•>¶×–_ë¶ÏðÊÏW|ÿ@àÒb /p$ÇdÁµ‘ì#ÇòQêúùѱ‹yÜÖÊöËFðñ'ýhmûãmˆû×ÿnÀ¿¾Jßða$^޳†9&Â1Yð}â0’cäX?òZʶ­â·NGÛ×ý—àãz¬_øí‚§t~|Éø†#qsœ„4È1QŽÉ€ãï#ɯ‘cûÈ¥æW_+˜Çíóôúë,6ÀÇy,Ÿ_Ô;<¿¾‡¨Á¿¾J?ðûHü'! rL”cÒáçWÇs$Y1ñ¶¦ÿ}®ª£B™©ïîOhc¾áêˆk¶ ß×üë+¬#ü¤àfމrL:üü êÚ\gŽ{Ùß_—Å|à ‹™+·3üë+l³Ü 7,¦%½Ø#i³]_½÷\€Å¬åÕ¿¼·>YÌÞÛöå|;è篨ÂϯÒ7|‰—ã,¤aމpLü丌Ï‘ôY‹þZÙý讓Çnœ²YnŽ …Ó’^ì‘tÛ«-Ìó.wo¬0Ï»3Ï» QxÞŽÈóᘠøÇ(<ïJ] »3GÝ´êò³âBÜò³*uŠs$?+.À-?« é1ªbêÝ ©ì4¸²Ãd•> ÐvŽHUމp\,øÊ¬FuåÜhp¯Þ] ªæ“§™¹G/ð+#wÙ G2»íJVvt¨ i&!q!„ÌTއ³}Á­q(ó(2sð79®Ú9&Æ1Ype$³ãÞýÜÐPßÞ‰ÿñt€†rsÄ*FpL„c2à?#ÐPÒ‡‘'-ECÝ|¶sæËYúYhE¸9r¸±sæËYúYp$Åû[㟡Ìóè̹ÍpžŒpÄ˹ÌóèÌ]6È‘ì¬j»’Ц.TÕQ!„ÌTÚÃÙ¾àÖŠhÊ‚~\íáªmc¢“ÿÉ1¢Ñîþ ni¨®ìëɇ!*¦?Ô¢ rLŒc2à|$:wˆ:7ÍåÄ…¸å4qòGñËÆ‚¤í~to¬ºie!Ú²@2Æá‚¤’c¢¾²k'´ûéÆl÷£{c^ÞÆŽ`MžüŽpD pL„ãbÁ7¦k›+¿Ó”¹ÏëÑ™ßpš päð¿2òd r$qØXc·4Þq!„LTæ“¿{¶/¸±"¾½þí ßÄÍq¡pcEXÒ‹=’lÇ/iyR»Ÿü‹±Òâ¨&Oþ Æàˆ‚¤€c"ž3‹±6pò—çECÝNþt=e9 ï®/G·ÖcQ–³ðNàHª×bBCqËï4=•t8ÏAE8Bƒ;sLÞ¾t \¼ØYŽhkމp\ 8ßôpù‚´Hæ¸û‚G8¸üÕGÇ%IŽ\üáòWZúz7ËôúÂ᪯ p«¾ööÀ=ÛÜZ]™GÇí¿Ç…­aH7nÿå¨hÑqúõ ÇÏ<M¯Â3‰à‡8Ê<à˜(ÇÅ€gÁÏ/PÑ$¬} í„ãÇÏä=o^ˆÅ q”pL”ãbÀ ±˜ùåÉÒN8~ÜÀÈ 8ËpF8‹‰8&g¶aŽÒbæ—Çï ¬N8¾†eøμ“GÇ×Ù ÿ­AŽd"ºiÌhQë 7ª®p£ê*g=±•:‘ ž•ÄB{$À³’"9©ØÔ‘Ôù¤àY “œTìÆ@êHÚ\n©…xV}'»1:’>ê!• ÏÊf<©Øh©Ó ÿî=Ƕl\€!3û/š¸=á8)zÁYÚx„³Äm„ãBá8¹â¹’c¢“g݇>¿*vgît}Á±C³\M-™Ëw‡Ö}(Ä8]’c¢“/¬ûÐû+»1¦éK¾:{rUà@ÈL¥xwB³ödô5Û…ïë ^ ×~Ž Rp3ÇD9&^ ׵žO£YÌRM‹Y*·3¼Tn³Ü 7,¦%½Ø#±;ûÐ6N8~¼ââÈž÷à…uŠp—ÈÇD8&^X÷¡÷WvgíäQºyò(]Ù ýj%¬ì,/G|òᘠxa™¹\ôt´åp—Çà–ÇXôÇ+#qxŒq!nyŒ…:sÕ9‡Çà–ÇX„3‡|VqÂqÙÆg—cF8ë>áÈá¸üeâ¸XðU™»1-j=áƒ3Tq!„ÌTö‡³}Á­±+ó8ycä'Ý®Ú9&Æ1Ypm$vgš?á8¹<{cœuŠpDöpL„c²à·ÅîìÃÓKåî±îC…&· ð¥çááˆáˆT5à˜ÇÅ‚³îCï¯97Ü«w¨ªyÁdÁif.À‘Ãqɦ‘»l#™»1½¾pÂǤ™<†Ä…82S9Îö·Vġ̣ÈÌÁßäx¸jä˜ÇdÁ•‘”×ÃÝÁ U^\Á j(7G¬bÇD8&^^\C»³¦¡n> [%óå,ý,´"Ü9ÜX%óå,ý,8’âý­ñÏPØ£ÍFÎm†ó¼`„#^Î…=~mä.äHv–ÝHÓô‚ª:*À™J{8ÛÜZMYPÂÏ‚+¢=\µ rL”cÒá¥)+¢?ÜýÜÒP]ÙדCTL¨Eä˜ÇdÀùHš^új97ÍåÄ…¸å4qòGñKö(Ô Ç.Í'ÿdÀY÷¡G$•å¸pÖ}èý•ÝÙ‡>ŠqÂñƒÂ;1à¬ûP„#Rp€c" κ½¿räwš²1wVoäwœf9_30òd r$a7¢ÕNø˜ ‘Æ;.À‰Jy=œí n¬ˆòâó(³@è7qs\(ÜX–ôbÄîì“iyR»ŸüY÷¡B‹£š<ùƒk€# ’މp\ xa݇Þ_Ù}4 u;ùÓõX”å,¼¸"¼9ÜZEYÎÂ;#©^‹ Å-¿ÓôTÒá<á îÌ1yód rÄG‡b7Ò4½,éCª:*À™J8ÛÜZ]YPÂ;+¢?\µ rL”cÒá¼²‹ó2ªbg”žpüø'8Ó«pÖ}(Ä”ÊKމr\ 8ë>ôþÊîìCh;áøñ³ù¼œ 8ë>â|#É1QŽ‹g݇Þ_9nùhËygÏØ·|œÞD pDjpLÎÛR sª»r 4hÑïÇí®æ;’§‡GÇOT9™9â‰(vc ~%¹ƒd€4yq!„ÌTìÎ>Úκ—ÙÎ*™ï,p¦;ËÍï,Á1Ž‹/™ï¬bwöÉ´€¤ßÏˬûP¡å+]ž—oàˆ|#À1Ž‹/¬ûÐû+Ç-ECÝÎË]½‰” 8¿ àÈᆆ*•k(ÏM¤îÊ%te97Ö¤ÒÈ%ÌpžïˆpÄj¡±fŸFN¦AŽDÁÙTM/Š® ª p d ²ê²rsÿ‚gå@{$À³r•á¤b7RG²O*L%(À³RärR±©#9æ àJP€g%ûE¥Ø´‘”×\P¨D…xVŽ]'»1|buÝŽŽ pëvô*ì=:IÓ VëÝÞ¯jœq1à<Îà¸P8¾fÄBäHFâˆáÑÊõnïY÷![¥½Æ0ÀrÇD8&ΫöWpóXFhªw½Û{Ö}¨ÐDó Î$2áÂ’c¢“/¬ûÐû+»³¯­÷"ë>ThpoQN‹pá5É1QŽI‡Ö}(oz‰©u Ù\爸·Î5ñÅ9Ç9".À­sÄFM|õÄsŽˆ pë± ,-²ÞîQ‹-\˹¹j99—´;j97W-çF¯³ÝJôJòæº3àÖ¹MØh÷l_pkETe±Ç…­aH/öHqZê´Ým4ë>Ä#zeEœÇÑy pL„c2à¼*u÷ÑäY‡¦—¶»f݇ Mnmà!ÏcŽà<&9&Ê1éðºå]/b²Œ÷î²¾q!nY߯â‰ÇúÆ…¸e}w×mpúøà~·l{8¯±»òŽh“Ž‘¼ÆîÊkì.ÿœîwÿ|×*í®B€#‡ã’MG­ÒîŠ!ìô’Ãý€A/ªí®›q!nݤ؅esÏö·VDSæÑqc=Àq¡pkEÒ‹=’þp÷_pKCuEÁ9Þ8 p$*¦Ûª+ ÎñÆÙ¡§É-“w¸lV\€[6뵫ò¬Cz=îö€u*ô™ÙxŒò<áT’c¢^X÷¡÷WŽ›uôù£ãnX÷¡B_:P.^ì¬G´5ÇD8.œ¿oz¸|AZ$sÜ}Á#œ‹?\þj€#‡ã’$G.þpù«-}½›ez}ápÕׯ…¸U_{{àží n­ˆ®Ì£ãö_€ãBáÖŠ0¤·ÿÊ T4‰è8}Šú„ãgž¦Wá¬ûPˆ£ Áމr\ 8ë>T^ ¢IX#ú@Û ÇŸÉ{Þ:œu q”pL”ãbÀY÷¡òòdé '?n`dœe8#ÅD“3 Û0Gi1ËËãwÐ V'_Ã2ügÞI„#‡ãël†ÿÖ G2vc ZÔzª«Bܨº*YO,d¥Nä‚g%±Ð ð¬¤HN*vc u$u¾°©…xVÂ$'»1:’6—@*A!ž•CßIÅn ¤Ž¤ÏzH%(À³²O*vc ZêtÂϯXÙÔ!„ÌTì¼hâö„ã¤ègiãÎ·Ž …ãäòÄ1Ypm$ö}‚?á8¼}ÁY`„³;?ŽèP8&Â1Ypvççý•ÝÙ‡†…N8¹\p”á¬ûPˆ#8äJމrLœuúüªÚ}¸ÓõÇͼR—ﯬûPˆ#pº$ÇD9&^Y÷¡÷Wvc MÓ×ǰ*ª:*À™Jñîþ„6f-ìÉèk¶ ß×¼®#ü¤àfމrL:¼®k«}ŸF³˜µš³Vng.x­Üf¹9.nXLKz±Gbwö¡lœpüxÅÅ‘=ï1À+ë>á.‘!މpL¼²îCï¯ìÎ>ÚÉ£vóäQ»²~àµ+;ËËŸ<ÇD8&^»¢¡VÅ*¦ã…OEÝœgŠ„Íý&~ÅóèpÍЦœ~àuã'7Ç›ÇD8&^7~‚«»wÇ&¸™vaåÎyqÜ•½ø¯»²¯Ý¨”vaåǤÃë®èÇcÞ±Ÿ§£µ½ÖÃgåÛÊŠmø×C±3^Ž …[VÎ^Ì‘4’Šï,æñ!àH÷|\[® ÿ¿ǨtGª‹IȽÀÇ áW ..À­\ÑŸrŒÄƒ‹ p+Whx¬:GâˆÁÅ…¸ƒ+"<†¢B¬Äí„ãB¸ ήŽpÖÏ-‘ÃqAáÄq±à«2v«5zMà„á1à¢Æ…82SÙÎö·VÄ®Ìãß"?éþpÕ6È11ŽÉ‚k#±{¥Ñ’¢ŽËuæø–gýÜ"‘G8&Â1YpÖÏíó«j÷Jã ûro±~n•– ƒ“§êGË”å˜txeýÜÞ_eïo†Ì¿8ÒÀWÑ5¼"üárž9&ÊqÑá5óUíVkš¦á1¨ª£B™©Ô‡³}Á­Q•%bppEÔ‡«¶AމrL:¼VeEؽÒ4‹y‹o1‹Y·3s| Û,7Ç…Â ‹iI/öHì^iôA¬Ž›’18^Y?·GËᘠxeýÜÞ_­^k„ Å*æ¯b1W1Èúnv8PSp"Ø•eP€!3•ýát]pü›ÌÑ*þÓB?éþpÝ4Ì1ŽÉ€ÿÄÑŠ8¼û/Á­q›%¢~‡²³DD îR7Ǫ˜CØ,Â1éðïˆÒvíeGý›Õ^¦Íj/nNÜÒ9ܰFíÅÈW½lÞ cUW*.À­8TÕ‘sŒÄ‡Š p+UEŒóè¬Þƒ4´›{®i„³~—Žè( 8&Âq±à¬ßåû+G•M'×{ˆ¨ª•hÉ‚ÓZ°GÇ—„Œj¹9’‰°[QÒ ³'|,Ó’G‡¸Bf*ÇÃÙ¾àÖŠ8”yµ`ð79®Ú9&Æ1Ype$õõp÷_pCCÕWp"Æ5”›#V1‚c"“¯/®¡ªÝKRÓP·[5óå,ãPhE¸9r¸±kæËYÆ¡àHŠ÷·Æ?CamBŒ*¯Î+Ñ"ñr.¬ÝŠQ-× G²³ìV”š¦!"¨ª£B™©´‡³}Á­Ñ”%âPpE´‡«¶AމrL:¼6eEô‡»ÿ‚[ª+ûzŠñÓjÑ9&Æ1pu$«íWæl×{ˆ¨²ˆZDð–¥Z¬®š­ÊÂ/õ^³UÕº²dÀy]Y€# ¿ŽÉYûÖ0G½©"„Bmš‚!"¨,ƒB™©gû‚[+âPÔãÁ+âx¸jæ˜ÇdÀëÁWD{=ܾëQ[…v¿_:…cå1Kä›~Õ þ4Wô&.À­èM‘´ÒØ3Í'?SyÂñ"zcÀY?àGtá¸XpÖøý•£>ˆ&"Û=°ÒÔ¦dÁiQ€#‡ã‹ÿFUƒÉDØ­zéÓ1'|,ð‘7.À‰J}=œí n¬ˆúâó(«ˆÐoâæ¸P¸±",éʼnÝk·Ð Cíaý€+½®ÔddœéQúpL„ãbÀ+ëüþÊi¨[d„®Ç¢,g½+ÂˑíõX”å,¢7p$Õk1¡¡¸Õ5½†)ép^Ãá îÌ1yë¬äˆÕnÕ«izyÉ©ê¨Bf*ýál_pkEteA‰è \ýáªmc¢“çw›¬ ½¦¡VýÑŸ’(¼ØÆ{óÚ,¬ª7±"D=ÆÆ½¼92BŒŽ›#6y›X„ã¢Ã¿c<Ðúî^ :7u¶ßW4Ãy S€#vÇ䬳j˜#twëa¨4'+PY…82Qi¯‡³}ÁÑ^|¶ÝÒ9Üø­Û‹‘ï"ž€ÞÝ`-•N8nWb*œõKq{Hމr\ 8ë—þþÊ·f-%N8n×0Ç’§·¦#R’å¸pzû¼»Þ%¢æ¾ß]};)YpúvR€#:6ŽÉù¾SÃÁ ®»jQhÒ«ßÃ]­—IœV¬8r8~Tרéi#žˆj·2ç(vPL"ÍT\€!3»¹¶³nñ¶³jæ; Ä<ÀÎrsÄ;KpL„ãbÀkæ;«Ú½È ½ ÑïñÖ/½Òë!]ÆÀA:ÀãÇD8.¼²~éï¯ï)êOèêÛIÉ€ó׋9ÜÐPµr åy;©»jQº²œÛ<ÎZ”Îëe"±Zhó<:kzäHœÝÊ\ÕôâRTÕA!„ÌTVû¥Ž^ú¸àh¼ã¤…¤}†£ñ~Œ«k³+šŽØl±):BÄ<à.õräpKGlŠŽ18’Ýk³°ªÞ…Žð½24ÃùKHŽØäíBGø^kj#1އ׃‚ÎM=„í÷Õ¢Ìp^/àˆDÁ19kzæÝÝö²Ã:´$êPxw>ésX›ëĸ·^AÜ„×ãží n­ˆªÌ£#›à¸P¸µ" éʼn#Sµqµóz6æáÒÔ†:‘ˆÓ`€#²l€c"“ç÷è7ð ôiAÓv÷z6æáÒrª xfÒÃp®ä˜(ǤÃ+Mlµâ¿5þÖyáOê‚×ã:O\Û›í$jºÖñ b\€[¯ nÀ‡qN×Ç¿‰ÌT©ðº+»t¸nä˜(ǤÃë®h»Ãö5›uØ6ëP4½£¯H€ãBá–Í2¤s$žûßóW·»§³õÇϾ`@:‡OÖKGäwýÚ¥åÜì.ï$.À-ïd§ŽCñÄãÄ…¸åì®÷Ï©ZØï'ÿ=\i¸»* ‘z#•†»«Òpwe„hk¿g„öðíÊÝ•µ päp|ÉÜq»rwe­vúlÕÝ£¤ì®·±âBÜzk'÷l_pkE4eo´8.n­Cz±GÒîþ ni¨®(8GŸÄG¢bº­¡º¢à}wà8ÈÓ‘¦¡Výù†’(¼Ø[cóÎ6žˆm‰3¿3Ãy*Â/¨mžgž¬AŽdmﶦéZÇÛXq!n½µƒ“¿s¶/¸µ"eAÉ7ÚÑŠ8®Ú9&Ê1éðzðÑ^·ï7l£= à kÄßh?ô‹=–Kp¸Îôq!néð‰Œ•Ñ‚Ïã~^>X©T³,FIŸ0†T‚B<+e'•f^?PGÒæ ¤JP€g%hxRéæwu$}.†T‚B<+‡•“ÊjV4!Aø,ÝîSJ/{œp|‘ˆ0 8‹‚E8.Ž/¤‘º9’‘Ø&Z–vÂqÉ—°«œ¥ø#‘£8&Â1YpV*ñþÊ~Ÿ†¦O8N³I»ªÃY×§Gà¸KމrLœuÏúüJÞo”1HÊ·(ؤ‘18ã‰H§pÆ’18A¾èÅv–¹/.{à–½.z3ÇHö:.À-{]¨)­Î‘8ìu\€[öºƒ‹¬+7=áE/]I^ôÞ÷W›}t`— O¸qçæ7îܼ¿ÚN×Ç¿‰ý¶Áß•ßd¸näyÛp$#qxµ¬€ä„ãâ ù¶gɸGtŠá˜,8Kj~~åxµŸ§ÊÝþrŠi/vÀˆH§pœüÖw&_õrËäU—ÍŠ pËfUý9VÇH6+.À-›U=W8éÓZõÞ@˜6aŠA; ѹêòYASZøÖhÕF­.5À‘Ãqù˜]µ8’‰Øm³Ì®šTW—âBܨĮ²°{¶/¸µ"eí{¢Ž …[+Â^Ì‘8ê&xª÷Þ'xÖö{<鎕‡ýOmzÂÐ2Í¥éãBÜÒô ”ÎIÛÏÿ«÷fc•u  )¼g\›ç> },£í¾XŸàº)+Bf%…É pD&pL„ãbÁÙ#µ¹üš°Ú}µpV²¹|£GÇåެdsùF¼ÙØÝ˜±äêêhö@€õyUösÏö7V½s‘ÎáÆoMïÜÔ *dd’=êYï ðƒ™-(ØI! TÈuP!•0{§­XO±Êžà©¨û4ŽÀPHމr\ 8ë)V»++®ëÖ¡5@W37É‚ÓÌM€#²3€crf—æìLwqÙÅ‚:´èê9­ÒÅ*YR:õVÉ’Òé¯U²y±Z{²Z{²Z{¶¸>[¿¢,+PVMeµOYíSV”Õeé]Y-RõOKŸõOKfŸ…Oë7/–$.–$.–$®W«dñÙYÔ;«µE½³Úp³¨÷ÖoöŸ½¥ÍÞú•»Us°´2Xß~,^~ìo?féiõâ§Õ¾§¥Û§ÕÚ§¥Û§EáiõÛʵÊéÿ»™=À,uV‰Y%n•„U’VIå?“‚YꬳJÜ* «$ÒájÚçávÊ?> ôý0KÓ·ƒõÍ.­ÒÉ*­_QÖ7e~;¼ëR—ÎfÍÃÃúöm•þBéñå–„U’&îhñâ”.&îØ[ßìÒ`þæéh•ÎVIY¥J£N7“žQšj2«ÄMêgK.翦<•õ+Ê¢à|ë­o½õ+VûŒÒTÓþö49ûú1ÛwùcÖ4Jã¯8ߘùíz5¿]-I\¹Uf©;X¥“Uê¬Ro•îVi0Ûp;™r¹Y¿y³l¢·¬ Wf‹zËæ{Kfiüfi¥·x¹[}Å(5ÒTóhþæÝâìnõÛû`•&n°Z;X}z°ìz°Z;X­¾¬š_&ŸƒeÉFiúûÛù›w“ë‡å5VMíù¾ÆØ¦M]þ3Jßæ(ó}°JG«dÅKßVló­Ì¸îûËÂY~÷û¦¬ÒÅ*™#úwÿa•¬_éVÉúÍþË*Yz›ÂÃ*Y\ß­Ò`Q¬ß¬ß|î’eÏÃæ§Òðm–¦oýíb•¾ÍÒT³³¾uÖ7fý ³j2«&·jr«&·j «¦°j «¦´jJ«æRê²ìôþ(òüÿòÿ9Ü.ß×nšÒdK06‰D‡ez”½±<Ó±8üs^´¼Eð5BYë°œKÉËLÆïŽ_]ø6(iÊ¢­ùZkœ`LÊÐS ‚Ç‹ËcÃj_ã&à¢h$™wH¾…Q)/XF1_¶m¹ÁOÀü)‘ùñCŽá6óó<2ò3Ÿåm¦ ßú \¸Óĉó†~4Q%ë§ŽôS‰&®µO? ˜gÉÌ@pÄ|Qe”y`žóóg°Žs¢q½åŒóÁ]ãÊ›RÖ1æÏãb9!yÛlÎ ºsªäGî™Dp‡ù¼i ÞD™÷K~Ô%y>ú$¾é]èTºä‹ºEpÄ|]³6Ƽ uë™zPòê ÌŸS™/d#Üe¾-YÜlNú¤¨Í+pJ½àP•ò2_Œÿ‹2õ6¤C•.<ÜÄšØ%ëgô7ŽÆŒ¼m£=àd›¨~îÀüýú©1?Q‡ pÌüÈ»ðè‡#x¸‰àzK×OY#8r»m;ÛP¸‰¡1CDûOÔûdæÇ^Íy®ªŒx= "æv»Ó{GÆN%Õb)µ¦ðE‚O>øº0GŸ,|2{%ød‘à“…ƒOŠy3ødáàÓǼ|²@ðÉ’‚O >Y8øôè‚O>÷è‡ó,™y;øô0Á' Ÿ^æÓ‚OÕÏgQµp8ÿ­)rà‘¸…‡ã–¾.‹q Ç-ÄÅ_‰[xÒÐÏ#C?ýd¡Ÿ‡‡~_‡~úyxè÷0C?ýæÍ¡Ÿ†~ž4ôÇkõIF?u ‘ÔDRIHD:w ¾î$H„;‰W:Hê@"ÒD¸‘M4:w _S:PÌ÷iÌÛ¨÷é§ãQæ{/ófr'â÷Mäõ"ÉGÄûõð±µwÝÆN0g#Z×plmµ€æ¼D넸ò1Žàó:uB(+“¢Á„ßb)µÎIϾßBîY&¹gqÏ2ìžøºµO¸gvÏ”-_qÏ2É=ˈ{–a÷L6ÑpÏ2ìž}MLŒodÄwɰïò0¾K†}—‡yÓwÉ€ï’I¾K&ù®¨Ñaãm!mâÚv¥ì¼x÷ œœ½çç¯ÀÀÅ+p pùüÌ_^aþÌ_^aþÌ_^a~Í+Óf/·„²ÖšL¦ÓÊ~G@[®UëÏûæ%>Þ‘¿X–é·4RýÏm‘¯›®¿zà¢Ì›²©\8&òÖæk„ðyÝVµ×Cžó¶­W"Ÿk—NèŠò˜ )Øê">×¼/s™7U%jƒú¨âÔ³\4-k ê ~Hi{%…¨ øàGÚm®)j:Y-ÎcÑ‚ð3ÀÏqø4”´%7$¤@B*—yÍ˺4¨+ ‡7Õ¨) ýLiv:á.n#m±Q_óòt†^Ί¼fu]kæùÃ#Iò¬¨¤Aý¨Ç©1¯ÊÚ€ÿøßÅÕMÑlð5·PgÆác…0àà" Ÿ\‡`Ûþäçš½¨ócÔ›œE+tÛjkûQ¥è½j‹ÊPܬ.>öKV”¿ü’äÒdÑ2Ýö)çRçbFà%Ï%çµI½ê}JÛë¶i̶RŒ–ó=¦%:n’?SÚ> ®àzÜéœ$º†KÃæO ÷S’âêRJ£¿¯;2ðWÌæKYñR+n‰EðWLt%¯Á¯¹¯: 6—ÅH]Ö&óà<ÞãF³‘UmŒ„gpV縳bbœ8VE£©ŸÁÛœ£îBŒý]”l~ÍßÕ™¼qÉW£Ÿ7\åïRà¬gãHª§@q*Iq¬m+ÃÛ¨¨G{“ÕÈ|#Œþ® ¿«>¥í¬•ÌaÕ¢Ké°Y.›Ò0› Þ%Áy›·#ûó0Ÿä.X3põ'P¦øù²ª[®vJ¼Ö)Ø #l! CqS6¶ÎÒŽÃ+YF_áðWÞÔµÑö ô÷ K ¦ÈÈ —Ù1Ï û{•×#½õkõzŽ= O{os{›¬¶© wq)m=-3Œ¶;lð.!p#3Q†ä»ÀO)=®©em˜MÃD×¥E²5ü|î¢K )¯ŸkÚ¾Nàw™¦­ý½Ké°ãÉ¥ÐÞævÚ¼Íí”6àÜpÔ7hû-¡íå8DVܘŒô0ãéIކץÑöƒ^¥À哾n…Ã_Qê²­]c\Ÿ4Ê´U]=®‡1.^çÅJƒzÔû꣫ª!²< ÞØF»ÊõÔ†>¿w5/Ì!r…Ã_ѹŒÐ̯'Aô™”a¢–FL{‡˜6 ^Rù"ê{Úɫڰù;f÷´Yd͹Y Ða‡SZLÛšôù×RXÔaú?¨4É·…aótØøŽS)£ÃÐaÓ¨óº’&ó_ÀüW|ìr†Íoð.ÎÇt-¸1D€?R¦EÅ„4Úþ€¶?RÇã¦ä€zRdÅY[¢{ÀÂËã=ia¬®£Ë<`ÑéqN3­÷õ,”>•×Þf=<¥Q%8êq.²z›í|•ù^–»žÎùé´¬°ŸèuÏíH:µ´{=}ÆáŸ~øÇc]o§õ‰$›ú8éÛtMÉ5†Ž×.Þòm¢¬áÛI*]GHη&þÝx\OÎGy\Tá®5§ÆáåCÀÍ&*û€\c¹«ú؈¨DÇ€hëeN¬S­rÄ+PšG€oçö4‹c°¿›6°ÅàM±üÌ<‡ºV8yfB»Ä ûswG{4•ºuáÈï²¼‘2s]íÛ8±žÖ„ü€à¥˜àDnùÊ‹{jg?}´ŽÆtô œ`^Ì'“ˆ½+¤¸ÈpHánÇä·Ý. '¨—¼ÎÈ­  Þ¿× Ôíº#¢ÿüñ: w6rßx•·ÛîDÿÞ‘î"‡ˆ§-Û®aÿ>‘á"IäOëwÛä¢níÅÃj#Ú)—g;~¿µPmó2îlÚOvÞ°LŸ¦×¿[óíÜ€ï-w³ÁqËHžåÛ6†o—âÄ%4yA‰à?:8SWÖO™·å¶pªáΦýÓ~ÌV«û½€e+‚»YcÛšp¥ÕÛy<‰ ìü™lçzP7àŽ€ó¢eu‰ ~iÁãïr™s¾]ÈôK ~gÁo¬Ê›’#êA ‡ß%ÝãûäáÑnâ(ài¾BpG ¸pz02|!àQ¾EÞT5!àIÂuƒà„€g‘€3n x’/›Oì:žV!8!`9Ÿ&Ç ŽÕ0Êq[ˆ1“»Þæßuán™]kð˜~Ç-xð xMª¨û,xØgÁÃ/-xb«ÂÌÓƒÑZëpX3àÜmI»FS›é_E‘×>\P@SÏ&xs²mùèÇZÿp‰Lµ2³qá„ -WðÐfƒà¶ MáTË ÿ|ÑÖñ6Ž~å|ðÄ]¥›³Á ß± _·‹»²Pð´²0Ö"­c´ÍÁØ:–CëÍÅ´~¾B¾CÐÖ!8bž°ŽœÕ”ï˜à„Ìm'ôNP§Œ`ãÌh+@>Üè5ž·ó$k¸º‡ÛºDp4(³rYM»¡«±Ú-ÏÆ€»zŸka½Ïë\Эˆî¿¼wWp4Gc¼iéÉÃp"{[o›àî&¾¿i"Ï}úyîÓÏsŸ~X¤à¨cUˆ:Z¼ŸRjÁ}¶yïN¨V9÷Ë#úÀ9f^¡Zãý<÷éà¿ñ\–Æ4œð\²Lñ\wŸçZtYÓî"8ö\ëbö\ ¯0󮃪›e*Eú$'Tæ3Z'T¹…C¦Oš\¦N;¨,âTžûzÆ(—å˜E7M.ËÙh?Ü8vŒ¢kw3†Þ¦Ä1Êæ3 îêgb¾’y’5ÃÌ»ñæ"£Œ<åfxHU!zÜÒaQcÆr0ÀñD®X& D‡¥p Gî¢XW‡•”y[ D}{¦÷wg³zš_Âx©áxµ¿˜Wû· ÌþJÀßϾdtÖJK¾ÿ»Kòþ’ä5ü%Éœp¦ßñ·=YòÌ”<Àigúfv’:\m@ ecˆšÑBÙŽ“p”VŒŽ>ÃwX¾‡Ùl±ìÊëiY›X:™¬Žpõ'`›Ì¿é¿5ónú§Ñ øÙfmí—ïçÀöŠÃUp÷hc¾{ù'´ýùJÛŸñ¶?mÆÛþTÁ-ùWÚ>j[Ýv%{xO ¾Á–šºÅ¨§-õ®<¦­áÓ0ÊYÓ¸p‡•©«x†¨O Ø!ÖÔ߻ඟ"]ÄX§ô¬ÚÊ:gî¦+ñ"oçu¹#^­o$‚Ëzó,”J~`¥ ÷gN¿DÌoo>™žó¶'ŒÍ˜1Ep”(6Ærž-ÎjG#KÉ«†¶à‘1þš?“,øÙí³ŽnŸutû¬:i™OïNA»,»RzGpÂæËÝi½#8i1ßñÜç;4õЮîûa=6øK|ð;6,xˆQ'޵¶_û`+ÿïÞ“Õó­iY2õ÷ÀþÍûsO/co’Qúú†#Yës“6^m©«ù"ebï—'Ðp”Ö:]Dy‚éüž@p¼9X”QOðíBl¨7÷FÛº-1yV³’òÓd¾Bpì dSÇ<†ã„»‚W™¯ÿ¸pº3ŬãyÚ¥w Iïþ’ÞîªWë½UxÕ#8©^ϾΙxú?iÔ…Ó?óù$'Õ›é$i½?÷éý¹OïÏ}zîÓûó½Ë1ÿ¢ÞŸ¿×ûäçܯ÷€Ÿ?ðõg6_OWCÍ{bî>=E®!Žw ‹ŠÚh+§eGÉh¬Z$8Ì£áÛ“®æªÈœ1êjtŽø*wO˜[ÝÎ%uA‰îórŠødTtbŸèD\t" º Žmž5Ë=þH(uS!æÑÉiË“GE'÷‰NND'ý¢[é{°‘«áHt _vb;´SÁKÄ|PÀ•òtëjô§Kö¨)à7&çS/ÁüVñ¼ª1Ü+àÀ¡3 ÇñWS/ÆŽºÚ®;1àx_¨™_é Švƒðxº…ÌÐ×p¼R[,tÑ5Ó-;-‚‹çó<¥•NûXÒ…£vsjá| ÚN\od…˜WúÔ˜hó%ÏçÞYÑù GÓü)ƒ,ÃKÃsbsáîÐuÑ”„ã{_i¥혲Å6‡Q¦tàí¼ž?£WR$kˆÍÌ)¹Š wŽ$Ž-¬šþyÎÊV¸³:g Ì‹ ÎH8·+0ug $…Xöïî†Þ´ô‚àÀ“–%ŽÞíq•Ä¢Cymù’’îz…ioC`½Û^aÞo'‡¤DÔÝýÚ%©œÜæ +ޏ½ê ž¿snG"G\Aï -*YáçÓzåÕ±æá;+ÞnOÀð‡[«¹$Ãk‘s Ç>©\ü1N^`zpäK˜EtE§-4œÈXº Þªƒ{ ¸;˜L)ÓždY¸SÅ€£A™7KÛÏiÀ‰[Ë´Ù8Ùe˜'L› ™‘Ö\Ô¸íîCbyïQõ£#Ûe\lŸq±}ÆÅöÛg\Ìc\“5.7.0.¶Ï¸Ø>ãb)Æ¥öy.µÏs©}žKíó\jŸçRAÏ5.÷\*à¹Ô>Ï¥öy.•ä¹”Úg\jŸq©}Æ¥ö—Úg\*`\’GKÅ+0Ãø‹Æ¥ö—J2®}âÚ7,ª}âÚ7,ª}â ‹%gQ㊋ ]4üEãÚ7,ª¤a±ßg\ý>ãê÷W¿Ï¸ú}ÆÕ³€çZ¶×BÆÕÇ«W¿Ï¸ú}ÆÕ'WwZo8&îâ%‘A9~hòÉÌ¢Í<‰• §òµ‹š6.î­áDªû²<ŠX çª5¼óÝëæê=3nâÑp´ÈÀŠ9Íÿ£sïLËfž¸eš¶Žé 1LZÉ(j:Ù\ÀÒcÇöéíÓ;Û§w¶Oï'ÕK¬ŒYÝZÃ_Ó;Û§w¶Oïj½S&yKßL3Ž%ZïGcF> ˜Ö»„kuž>LÁñõkù’7Õ"I G;¼£ˆ$¥¸I& '.f÷(n}£×Ë—%?œ’>ÝœOmDåB/*j8‘Õ]Õä0nœô8±ô¨ï‰ñ®IN o’O/.Piþ\æºÇœØt×[ 7Ï-ŸýO¿Þ§Žˆýµô¤º ÉE(›å„7Þ'©áHÀÑŠ5 ??þT6€·Êë$›^ùÓ‰û}ÉÌÞkáu"]óçÀ÷ñ4åÞÎlà–'€;D¦Í½bYƤÐomW¯´]‘mŸÓËVf[¼”Æu~¿jûœf)XéÂm"K–å²kJ¾>³„ƒûªÍ댊çÇ%‚еb¾6‚ÚQ«[ÿp»LS.éµ7ådKÈÖ\ïëožk6餺iøiutél^×Ü“dS@ÿPW'IJ§ŽÕÛÔUIt™iS—3Râ²·šÌ‹ž>9‚¿¤8µOq'ÒŸ9›%TÒ°í%NèG”™O%®Xr׊S´âVͱ˜âžGâÞ*™× •ÖVMd!¸3ʈé=¦Š¤àáþ’âþòq‡>rÜwE!'O5Äô®á¡„ö>p^ÁûrŠu¤É£Þ±ó5¥G½ZBgO¿œõÛÐêm!WCñze#iõÖEãÂ)-V¾ó ñ—+7©lUµxö;T&âÇQÎ~YT™/<@Ô#GÎ<êmØ’éN©vÍ5«—%©^ÆZŽàX½ÕÜ(õêþ£êm¸G½§¢áè’öQ¿­G½M‰à„z—ùpð´žú]ïÝâ/ ÆžÝ>çÜísÎÝ>çÜÔ›tÚÈÛ{EãQ/k1ü¥pèÙyá)ÚÍ|.¢<.t_rgxÕ8‹œ/ð#Þ¨&àÄi#=»í}óËkœú5@àD>VuXÇqI—MÞÔ8Eî­nçGÓÜI ,󪙵ܕ"k’߈§·ôô0àGzYBòyûuØvºUÁÝ僱ÿ,·Nññô¦Ep4ŸO –Èݶû^îÒ“cüAÏ­‡“礔9•Û8§p"xkÍ/Є¯ÞàÄÕ½ëSÔÌ…Yóÿ]M÷iñ¹O‹Ï¸ƒhñÐâ‘­/¸á%¢"ïøœïF®œÚ¶àžød ¸ùÚͲQHº1‰àÈU¬¥òŒ- œØBgË6åÑÝ¿l¸1MÉ=&2z›¥Àp|Í9ðÁ+›4Ü»DD¥XtÔ•Ml;9¨˜èˆõè—Ç{. …ñ.^°Øc´jŸÑª}F«âFɼˆ­ ­Úg´jŸÑª}F«ö­Úg´jŸÑÃ.£Õp¯Ñ’æˆà¤mf>stáı„u,:Ç%‚+T«˜·½ikFð»o°'­ÁIÓÎ|ÖŒ™ÿŵžXï´ig>kvá´ig>kFpÒ´3Ÿ5#xÈ´áî9û¨!c¢}±Æ7NSÚº¨üè<20N# ¼Eû&YÎj¨ã;ðŒý&çƒ5ó¾èjl¥ës­øÚ¯z¹Ð›xI‘CöÀ‰ˆoÛ í{¡ƒÿÙXãÐäŸõMXâyJÉ9ÕÇë\Àév€ËÚÒïž“K??룮xxzç‰ö0Œ@ÃÝ`9/EÅéÝbC??ÞÇe§û3üÎó(”r4ÜyLÚ¬5½Uññ$ž'²”õÝA­¯@­ Ôºj]¡ÖÕ_ëþ³Õºÿ)ž¯~ŠÙ¬7 Ÿ_9 ¯F4 N玼\õÉŸ?½‰´Á½Ïú_Ó˜ l…_}+J×C ‰¼ÿðHÝúii~tû_[Ë,'è4œØ¨\ÖZqºÛVz¿{h{Hb~öPÛ iÂQ€ ç·Š&æóóóï9SË0ôˆN3ïšöôVKƒà¸‰íÝôø6M ŸšØÝ&úr„J£gt‘Žu w¬.Ú±Æ_؈\_é½×$" òHµ¡¶hþã±!¿-¼ZdmÓ>ÜfþÇÓùçP´Ö¾r­uÿIíãe»%Vk¸;Pج¨ü|óľ²ˆ[Ø n—°®oaS¹ìñclbO]MkXÚ‡÷¢˜is¦3%5ÜÏÌ®ð£~Äç§77öð/|RÜ׸[•îŽÝ&ƒÚj *±/’p·/Z¬Œ~t#âõ*—‘K‘+¹&º.‹È5…È„úðªôUj†=!Å[BHq Þ©jƒÏ2€‰ôÛõ®´«Îbð À/¯À¯¿¾ÿZŸ€¦ÃZÂè§]ZQb8š,s±½hþ8F&™føOŽxÜ^ú»zÓh8²ó) 6šÈ+!¸ûÔ„_ð™ž"!¾OBÜ#!¶Ü©‚Ù?¸p_̧nŒ&Š_Kh[0àh¥ŒñšQ# ÊQì“£ðÈqyÁ3_4pá„¥•YKîãQR}qÒU#<ºnu‚G^˜DÊ}<–‹šNûgL 8e[zØG~ê–/xº§=ßÿ»§eï¤òÿQ¹àÏC~RvK¶ÌÔÿ~Ü3§UΚ…Aà‡o‡È4½!©ëYÿÌüe¡~ 0 0pó—0ó`þâcþ`¾[¨wæ»ó÷0ß…™ï€ù.‰ºÃ<[¨³ó,À<À=̳0ó ˜g>ɳó|¡ÎÌóó÷0ÏÃÌs`!©;Ì/×D€y`àæE˜yÌ óÂü¿¸pˆ¼ç&Ê…Gh¢ 4àž&Êp%4QúŒKâ&ÞÕðï?·ïî8þÿ観"ŸKãç#r¬˜vjuIµXR-žTK$Õ’)µ.I/I/Iݽ)ºzdh­uúkÔúcgó±:oÅœmy¹µˆë·fÃûÓßïÿþóÿû^B½ÍDyLP-1.10.4/Data/Netlib/boeing2.mps.gz0000644000175200017520000001374410430174061015633 0ustar coincoin‹ìJ®9boeing2.mps¥]ÝrÞ*¯>_3ë|¼gê±$0öaò6«_¿i“N“®=ûþodã_˜˜ÅEáA€„y_Ÿ~¾tç¿ç·—ï¯ßðï¿~¿ýïûßuߺî÷Ë¿/¯^ö§§ÇÛãíýcyzíº·çÿ¾<>¾ÿëŸ~tÝ?^~<ýûôc“|ÿ¿÷¯/¿>ÜÏï?Η¼G¿žÞß_¿ý>jûýøÇ?záõñöºî‚ìéÇ?Ç“góoÆÿ@ô7FSô·9Ð0 ôñÓ3{zÄO–IZ&icI€wþ„ñÓ3+{feü-¸ŒµÓ?±2öNbïdüS\Æcœ‘c’ŽI:&9¿ó§¸¾™áfÖΙ¿%n'²þDÖƒÈúl@¦#d:B&i˜¤a’†IŽïü ã'†ŸYKÌh˜Ø;'öΉ½sbïœØ;'¦ÍõüðÎË(~bz˜†g&É´2ðú±$ëy`=¬çõ¼ŠßÉôàŸXKÔßÑ;—'^Fìɰ'?=³·<³·<³·<³·<³·<Ø[x;ì-ö–GüdŒ1BÆ#dq@Æd­FÖjd­Æ¨ÕÈzY"ë €I“X>X>X>X/=X/=XO<¿÷xûñççëòßþ߯­Cð”‚;ÕÎvÁM:ÿÿËRÂG¨‹þAß>Qxë4)üp–Î*V©.Œ;þ^ ß| HèK"máSÝ8¸¤¸HÕQ„à’qŠ]ðΠܱ;~†û #¹.¸¯RuÜ1¸Ž:w*r§6îô9î1…+ܽTw ŽÆ}õÊÜß¡ eÚzÈ´Í Ó63Lp4ôÂ|ù1³ð¡ËpG—Âë¹Ãd­€ î«TLlŽû×f“‚6ŠÐFÚ(Bn0)l£ø‰õ úq'›Â9Å/»TElÁN)jë!jÔ6(8é9Š‹³­S´”¡h)…×S´#Ø1… Š«TüãžEg ¡"´Q„6ŠY†IaÅO¹*£æ.(®Ru±Á\/¯6îÔ¦^jS/å–±]jÛŒÜÞhœð{¾Æ /ø›ŒJ1‚o¡4Õ]¢jîÐÆîzá'¼à…_r‡òÓ¹OEîØÆïzá'¼à…_rÇšÔw Ã÷#zY¢¶¢¶™Am3#l4Lná³i›¦mf˜œü7“ãžßŒS†û8¥ðjî]ïhð„»¯c‘êBè.Ç=ì@–cˆEh£m¡bvácRØFñSë›#m #x•ª£Ø²¾å÷µÜ©M½Ô¦^ºØ>mqàÌ$¥ÜE6…‚"pIq‘êBD=G1Ú[<³üÞ¢–"´Q„6Šó̘¶QÄ6ŠØF1;I™µQ¤6ŠÔF1ëEìRÛ)ÌíÝ ¿Ê8á…PÆ&£RŒàoy“‚6ŠÐFÚ(Â…»»IaEl£ˆm1œú(RÅÏÌÅ%àè<¥¸IÕQ¤\Ä¢»8SHáŸÜlpÓÖu¦mt˜¶Ña.üþMʶQ´mmE’!ró§Ê×Žá ¿çžð‚c¸Éä(†Såìéâ&m¡"´Q„W ˆmoomNxaksIC>Ÿ¾µ™‹ê¥6îÔÆÚ¸·,á…=On"—Âë¹p`S¸à¾Ju!7(Ç=ìyÀæ‡vaÏSIÚ(BEÈ m&…m±"¶QÄ‹c“-ÙêöÁß ¿wlr Ç&›ŒJ1‚Ž6)h£wOÅNxáTì’"ä¢HÝÅNaƒcwlãŽmÜÃN!cLQïÔÆÚ†6µ mºpõ7)ÓFÑ|&w½käR¸ÈÝX¥ê(š\ŠFwVLá&'•w£¯c:'ü^Lç„b:›L®‡"7òã<ïF×R„6ŠÐF.\ÉM Û(bEl£ˆá–Ej£Hm©âU®ä&eÚ(š6Ц¢¹H(Û²Çoûý'üžÇx ã&“£¥DEŠÐFÚ(BEŸ*(bEl£ˆm³^“¢6ŠŸ‹¯&v<ôœÆMªŽ"Ýôž lt½ž1±„ ¬€ïŸ òï2ºð5*ÿ#…߯ˆ®;>@-4ÚZã÷\ÙøêàÅÆ/ß¶–|óš“ÊO¼MŠÇàŠà)ÅÃó#Ç=À/ŠtýØ<Å\X¤¾ñÐÖx¸h|V?… ÚÁà·× ?¾ÞÒ{~¼jüñ ®&õh›ü¶Éÿ¨ü(4Úwò?j'ÿUãÚ RØFŠG>š ¥³x™bY?¾±/HQER)n ™ Å3Ÿ3ÀK×—Ë?>jÎÆT€›6î¦m›+îXän§Ñ9©óõh3_Zó•§Ø`¾mæëQk¾ŠÇ¶ÆkkÇ®¢^j|qbÅñúâà¢6ŠÔ¦º¢˜›?mîţͽxÔºW?nñ(HAE¸k¾Nx™âT¤áR‘‚¶QÄ»æë„)ÂP¤ˆá“ÌyJÆ|>4¨çNm#˜ÊÜ×ÛDÊ?n)H™6Цm›+ŠXÔO°ÐÙŽÈEéüZ?e(™ <¡Ø™# Å=¥$…×Rè“ÔäGp.þVßxhk<\5~*6Û¯­GR‡\QNH€_Z;âTÿüò˜‹¬ÕS¤6ýP™b~þ²Îjà·Â+Zr»/,4Úm‡«Æ»Ìà*dŠÕ7þöÌ8áåÆÏW?îl+HQEj£HeŠyÇ;IËÏŸüÞO«/çONÀSŠGè_PŒNü¸ÔH×¢Ík1¿÷«m<´5®?mǶÆc¹ñùÁU86¬i|€ßjü ?n¿Ê™ÅRã¡­ñÐÖx¸j|nKZ8ê«o<¶5¯oЧ¶Æ+ êy —6>>Ä ðRãóa²äO_P¿ýþúñýçwºv¨ä¸‘–›ÂeG¤R¯Ÿ«dÉ£JáZos©71‰–ÅÏßÞŒÚÙײ @ WŽð7ËR¡ÊÙŸ *èÇ(=Of„Iëùµ …‹™áwij­ëysÕóñb6íyarö¥KîuMï=éq´)\ôüar*zÞä Sèùœ-ÈmS ÏlS|A Oz~îg¿È­I¨Ô®]‚&·)£·EäDí|›Bë6ÇNÝuû]ˆ¨=™2£÷º@ÉXðo3L²öôâÌÈñok–žZ¬NÍdÙuÚèÀ S¶Ãõ½Ðµ)Ûẫޅëõ pÌŒ:Ì:Lá‡Ü8cݨÃÚQ`z7ÆÐç»§©Ÿ¬‹< ,Ž:Tï[Ý,¡òI–/HáWzÇrÏ—7_e½c›Þ)£wÊéR¸Ð»wá­­Ó;ô®Düb à|ïf½wŽ D5\o—•<³ÍÂ*É«4ˆÚ¯ôNåž¿Øú-RÒãbn²3Ù Rx¢ŸElsî+ôc®ôÃvè$œ/çûª­²zkâ¢}ëú9ì°ÐÏZ¯ôc ú¹Þ9‚uZú×M¤êg)Há2ö1ÎUúÉDŽü¾nâàg†1s gë¦Ã~ÀqÔÖMìG;’pq«~´nR~ݤë„\Søñ£5ÊÂW ZðüÍ »”æÏΨn@–‚.§Ÿ1uê5õŠÈ‹ÔŒ¼PïŒÕò?ý–ß¡›R¸È‚gÓòÓ®Ýà‹‰eÂ/ñäô“ÙÀÓhV‡QnS–‚.·)ó`*¶)ÙÀ‚|oMï—æÁ¦pþaaï¦ IN¿¥w‡™$\ÜÜRµ‡°ß&?·æOÁ;Él#ÁíÌe/HáB?`ÈÎuú1ý$óGë`i¾üfĺõćÏ¿hã4›ÂEFå6Â6rùA²Oo#]&´e©3c-Há2t°Úµ«žwêÌ8Ó«øÌ˜­ÿo™R8›ÖùUsG£ÍŒÉ„‹ëºÂqˆó)¼à‘—×$— j3Ö‚.Ƽ£¹&huÖžéy1æe×I›1ôó³b3lo¦ažR¸H‹£õr4§pÝ4t×Ö`Ö1kiÍ[ R¸´ÖΘšÐɬ[ƒ#eùeÐOf¤έôvpN=¤Á8'áâ’«È›óÎØ|½‰-M™¹bÊÌÄ\pÆ*6±³¾I‚ÝÍz_ R¸X놳G¿¨ÔžÑ»ðÒ¤âÔ猓9ôË„s4Ù.昗6ç½´ùz“Tš°sÓ„E5Ö¹XÒÑ)ñý½ …'Š3ýàæ¹âÜ õXgw\’잦~ÎSp>a÷¢‡ÍyLbKˆgO¼‹¹7df«©ø¡Ôž^4Å:²çn×çnɉšÒu…`eqÂ"èÎ LÛ¶Wº…KA &­![§w¬Õ{g|íóŒc gzÇE?³ ‡±s2x+c$\ÜTå¶c&ÞyÕ®pá¥~´s7ƒÆ©.ÌZÂ…~ìÞ©Óô“Dµ&%áÀúUAžþ,g s:¸(üÐøgÏÝ0„õ’ã5¦*èGIõ€eíÑâ±[A O]˜~6“­œæªçM±çå†i_ºDÏ{Ch½-³)\ô|å† CÀ.ÙUl²E;ü®-:k¿g‹vø][tÔ~Óµ§¿›ç€`>¯mQbe”®+ä€äKa‡7Ø¢~׵߳E;ü®-:áâOêr@0çõ×å€àn‹.õÓ`‹vø][tÖ~Ïð›¶h‡oú¹‘‚¹#¦ºl²E;ü®-:k¿g‹øM[´ÃEÏ׿€`n_T¼LSðn‡ß Þµß Þíð»Á».~)-ïäj“•xEd 2·Ííð†àÝ¿¼;k¿¼;à7ƒw;\|’ïähNáJÄ€ íQs³\nÐNlö‚~7½é¬ý^zÓ¯MoZbýŒMéMgíéowÅnÖ˜MobðLzSr—È®+FŠJ^Ú˜û¤ÎK÷ô¦ÌUë†6sýô×"ÃÞ ã¬Eׂ~7½é¬ý^zÓ¯MoòÞÅ„ñ—-cXPÇLd8¹Q?Ž ïð+½c¹ç•Sþj½c›ÞIÙÔ‘µ3h›ºµ …ßMo:k¯KoÒ×޴Õ›ŽBzSr¹QœÞ´Ã¯ôNåžW’ ŽÈpþ·bwxCÞÓ¿›÷tÖ^—÷¤)®!ïi‡ ÅÅ!}¦8ÒßáWŠ3åžWò6ê75%Díð» Qgí÷¢vøÝ„¨.~7Zi§üJ;]o§åšÂu·Ë­¡žÿ=³]ª!!j‡ßMˆ:k¿—uÀo&Dípqë›—S~^N×{B9ãRøÅôƒA›~Ô£38io-Hábú9?rŽ)µk?2¯M?°côÝÓo¦i…'Óϯ Àòy‡p>äŽÀ‡ü8ƒSU0 üîìÝáº;t½oáY?©®ySÝ媰À5kíÀ€z¿¤p¯p³uT7êLaÔ%«‚6lÔUÁN”Yf˜R¸¸NŒÀùx§ª@ îw•~µ¨`[–%¶eYb[–%¶eY†9Ü‘^×Ê8U ¿š½Ø–e‰mY–Ø–e‰mY–!P 7µ€×‡†…hÝÛ–Ô.máxÎW&PkÌ„®"óHÔžw'O½_O£OëA Ôד÷hÔ¼ÝÁ«„$\üöHdnMÞÜšl\!wxÔÉž/ÄÊSÆ´¼L˜Ø-__k3n-HáòÃqã`ªÓ»)è]¸ÁRqF9íüîtVN{-ú]’Máâº*fðLÞà™ìö4w4¢ô|Ù®yoY›—c?8²Jø`/Há‰~ÆÞy$çX¥öäõÜL(PŒ÷Tfµ³ Ìà'/Œšlûq¦a–ðõ÷¹Ôy™þHh4/8åঠn«ì¥ðòW=Ùp!ƒë‰¤¥<ÔÏæ¡–V…×’«.c~+Ö¹Âåšdûa¬ãÞ R¸¸Ädt•cÞÆ|²&iƒV¬Iè}íy–wëyçÜoËl ·îGk¿’‘­I œrpS·U>ˆ]÷3wYiÙ;=eQœÓŽ,÷‚.Ö:4£Íù F©]è jkÝ48;¦ðt­›&c5Äúf±¾þXf­ÃüZÇà”ƒ›2<i½Z¬ðj±ÒA Ï®6%ˆÁõÕ¦p€8yçóè¹%Æ«w&e±Ú RxG\F×zÒ]1hMaЊÅJŽ:u±šFÒ+'àâ÷3ØjƒùÅŠÁ)7ex~ÐWÔ=«®wÞIÔ®!Ý R¸L ²nÂ˽&™#LÖŠøþ’ G~uµ³xw£xVˉ϶k¾üùéköx!5¥4ßQ·ïë­8³z£öZÂEÏ»¡f—C&Èvô¼¸ @vÜs,1>5ȶĢ  ‹ª}/ËÀË›y mhCÛІ¶¡ mCÂІO2yÀ »ñ’5Xá-CÚ†6´ mhÚ†6|ú“ÉžÛÿþÏû&êÿØßF†åߢ$ñ¯³·[} W:Ó®pån§3Ÿ ª]ÞÅcÖ쥯?S7ˆðU*^#‘,žpækÑà©q[*9 ØÚkÁêpVÉóOÆ7:C <õðà gïµàxêªAßi¿fíu8£h†9wS†l¼fÜ•—Ã¥[A9?Óèð¤›[Yœ—{+› hµgdé|:<¡HW¾VW6†Û°‘?m¨é]þ€Œ\ÔŽF ýmpÑ,£Lù+ Gí²S$\qS×6þ~zýör,mËßЩkˆŸ ½¶ltÆÍá¼­8÷ê²±¼WÂÓž‚zuÙ€ÐÑ<ÉÖ„Å…±‚°¸p8¯d0½ºl„Kšbx:’—JÔe£›PÂÕ¡¨>:.Ž‹á¢ƒý^N}Ø.gÈÜë£O­]ŠÏo^¿.ƒìÇ[÷}±¯–’ð#§¡Ý.Ÿüó«$åÿ­RÚ»"{øeξ «ÞE1¾lóQ{U½ËT½Ëˆw1©pƒ{²BkRX%Eâ`D“2×R¶ª]¶ª]¶ª]¶¦]ûeŽ5îWÿUHQUíJ4&'Uñ®ª^…ºþrUïrUïš«Þ5×¼ «ôˆUzÄ*=b•÷O&¯F4V{¬÷XÕ.SU£©z×XÅq¬ªq¬â8Vµkª™C{¶ßÕXªæãPõ®*mC•ÁTµ«FÇ©X¹]ÇÊ•V½ +Þ…CMßcU»ŽðÉÕ»@y×Ëë×§§¿ÿú)” 1Ý¿DyLP-1.10.4/Data/Netlib/coindatanetlib-uninstalled.pc.in0000644000175200017520000000023211507632744021400 0ustar coincoindatadir=@ABSBUILDDIR@ Name: Netlib Description: Netlib models URL: https://projects.coin-or.org/svn/Data/Netlib Version: @PACKAGE_VERSION@ Libs: Cflags: DyLP-1.10.4/Data/Netlib/bnl1.mps.gz0000644000175200017520000006026210430174061015137 0ustar coincoin‹ïJ®9bnl1.mps¥}[’与å›õ´pÁ÷gÝÌœš˜›73,"ݺzÿ—ä.$Òõ•*×  qøùë¯ÿüXÎÿþõë§ùïÿúüý?_ÿý_˯eùý¯ÿwûÇßËòí›YͺôèÉ¢'‡ž~ý{hhŸ=YôäГGO=Eô”ÐS®ŸêÞPï ¨÷Ô{ê½õÞ€zo@½7 ÞPï ¨÷Ô{ê½õÞ€zo@½7 ÞPï ¨÷®Êå;*—ï¨\¾£rùŽÊåûY.¥/Ô—êËõå7¿®§Ò³êÙõìÜõZ=Ýûù;îÿþùû³ÄçöèÉžñ¹=¹ó·Ÿÿù?ÿú<ÿÊÏÿù¬úëÛ¬gÝž|áyÏ+w.¿þþ0õoµG÷,(ËÜq¿¿×%qÏ9€r œsþ†p¥¬Kz¼‰Êú7*ëŸ?~”e'@Ù Pv”e'@Ù Pv”e'@Ù Pv”e'@Ù Pv”e'@Ù Pv”e'@Ù Pv”e'@Ù Pv”e'@Ù Pv”e'@Ù Pv”e'@Ù Pv”e'@Ù Pv”e'@Ù Pv‚#;ÝZÀõ_¿¾×¨n+÷\(WÊU€rÕãÍÿ¼ÿºž=Øõãï¿n=X8óØõ¬ =åúɬõœoÞZ.¬=9ôäÑS¬ŸŒAO€žÐß4èoš€žXÑÂYô[8Ÿ>~|BÉèûÔO€~žùè¯ëž.Р'ô& 7ϼy³HŸY¤Ïé3@ú >»ÇËöäÏ7ïjÍ"µH­Rkö| v³H»Y¤Ý,Òni7‹´Ûã·{†Ÿzòè)ÖO¶rô„þ¦AÓô”ê§GrB8‹~{ÄÄ]Z¤?-ÒŸéO‹ô§EúÓ"ýi‘þ´Hžjôú­wóí÷Ïë~miÙÒØ×ÖfMÙ±Tÿ™ËRÖÚªÿÿf.'|_Ñ"áowøŸû+õßíáÇBR †´”2ü÷¿þßÒüwÙ›íöÖõtñʹx\¼žI* ùw)ø•…÷¾ïùÁ)÷žbÙÒÝÃÅdž”ÎÈcE‘âxƒßð·;ü£ã¸KÄθH‘w¶…?Öö©ºþýýáâc_Moä;ïâ Η㭸òïRðߛZ¤áB8ÿ~?]|ç\|\|»ø.¸Xàוֹ[+íà’‹gwó›ën~ ÝÍo±Á»°—‚q.vý\vÕ‚á‚‹_?ÿú÷Aà±Üß5¦ÇÊ¿ ¬HÒoýûþÖcgBgä±I¡”ÏMf8 î˜âº¥¨{e=¶îtÅõX'eàû.ª².7ñ·—€?¶u.>ÖWÑÿ÷nV•õ‡ïŸ†,`ÑúNx=ö ÛàœASäwŒþØe…Їïm™^Àbò@‘71¦… íÖ:äoÖ×´0´L §8‚{¼uìSì9îÍ @Ó `¡É›ØÂ×ê·À,TØ\Àg‡y¾zpšãÂÑjáÇö—vÝrß}Ï¢ÛŒ<¶W?˜œ:xÛW¾Ù[Jj‚") ü±W½µÁ[)‘÷Á"ïlsäAGʶÛ.?öÖQwaàÈÅåbÐ[¶sqKXyo¤.Z‹¶ìîRåb¼ÐpäâÙßßrœ' G¾…ӞЗÞúc{¯À1÷‘¶‘Ìv®²®rÙŒÍ4“ÚÅ·Ëi¸Ô˜Œ£“;çâÝEãÊþvôZU‹†¯ŸÍŠ¢Ûá òžè{ŽAç|禎`‹»› Þ—ãMÝ3]íòÐýÿœý³†|’Ã7Ò N7å¥l¤àII‰ÐC]t€Qå2Ð%b0\ÊZf²TûÌWÃÖy)b`ÜâZøã;üÖTž€’ˆ‹!ê‡IÄàÈú‹µ-\!”ÀQäqpI䎼 %1¸\ù\…—Sà;;¡$¹èu.ú¡P’$Pc±œ‚Ày²pä[8íÉ2# ›fbMi­PªÁU5X3JR3)ðÚÅVNÙ@5&,”$ƒÎÅ0JÑñµ¸uqŠnl‡+ÈÇ¡d“*Î7ø Î%¡´Ái=Dð¦ <ëÈç!yI(ÙÌé¡e¦õºU;üõèØàc¡ä¬*—9]"v–KYËŒ*p)—9§Š!çÆ @JÎ …’C%[.†¬P?ž"¿½·”ï¨ §x,6c8%%ÓÂ)¨>Î.P.â”\ :ÃØÅFgµðÇÓ/H};ß;%ùu¾Ç±ïRó‹´ïqN¦¹Ä¹¸p^µpÚÅ…óª…äë¾]ÒoÞöAÛ*3¡â6¸¢âv¸\q­dká½ï›2›v>Q K6É÷¤ó=ƒ¶Ñr-üql‚P½YÕíú¬s1 .Žß&V kƒ+Ö§uáB•|«ø \š@ Fç¢Ñ¹h8õ¸p —¦Ù¨B0€*w¸‚²¬ ^•ÓƒN¶„±l±‚` ^¥JCÐÅfÐÅfàTé Q.Fp‘-Ž‹M'T/3Ü\õF•* q&É…D¹ˆ#Xr1é\L*UÒ0‚c@î|ïT©ä{ÖùžUª4dN|2¾ãiÁ¸r..œW-\ÑzãʉOš|ã{ô}жªT¨¸èU½J•Fv´HúÞN$¦•j°X• ¾op…ï;üuUšÖrlŸU“Qu»Éè\4*Uš@Õ°6¸¢a%ªRIoxŒ¼vMVç¢Õ¹h‡ªTÒ›.õ0ÉéBÐéBЩTiŠªœžt²%e‹4U”"'>§rzJºØÔͶ¤¤R¥.Åf.Ý£çd‹ç«7?Ó=Þ’WÄsÙ™ìÝ%YZ¶¼õä?ωûg'Ónÿ•sT¹vXßwx÷5Â#6©B1®…¿¾ n Päq»”ȃŽXP—Z/$]t$]tÌì<4Ö¨r™Õ%â²çæ•©Ë .å2 ª²0nü‚ú,¨K1dK"Ž\ E¡~,½ÀÓc€cニ»©DGN]Rä?Ïu炇*'ü‚;Êw›’ïNç»ûßÝÐw‡wÛ&.•£÷ƒ¡UွGðDváæâéú ꜽ®€ý¸€…AÖ¦€›úñSìK‚O\óK|nðîKÀ7ë/ÜÆlZøãœå÷—ägVvøX¦ù@¹ˆ[™äbйÆ.ò+;üóܹ÷ì~ãcç{7Ì‘|:ßãØw!ûùHû>9÷‰sqá¼já´‹ çU 'ÈOîg1ÁöAÛŒ„ŠÛàŠŠÛàƒŠVvxïûì~S-õ%nÄ$ùžt¾§qÐò+¦,õYª7«ºÝ ®q1 .Ž\Õ’Ü+ +®ª†ÇûY,ð®8³ŸÅD£sÑè\œØÏÂÏ»Vpa}ÁDP…àW„àCPÕE¯ÊéQ'[âX¶X~êßDÕ~ƒ.6ƒ.6UûY*¸Á9—»Å˜ØD?4Õ»Á»ãêƒE¬Ø¿ef¿„5Sª4Ï||£F¹ˆ"Xpq‡¿îâ¹È«Ò>ˆàdØåX†ÓÅV•оïfì;ßü`5Ãý,Ø÷ˆáÀ¹¸p^µpÚE®ç2-|°Ÿ%Á÷Øm£JÅŠ‹ºŠ‹ÃŠTéìg©}oæñ¡,ŠÕ."U*ùn@å»qÐòªÊ¢XZ#VÓíîp‹Vpq¨J¡,w½Ô°6¸¢aU'<¼°Ÿ¥‚×õÓhWØrP¸èu.zÍ~– .õ0&èB0èB0 BPT¥`²*§›¬#?–-ÂT”ÕLv?‹”ÓaUÅ&¬ªØ„U£J+¸›å ôaøC,v8uî_ 3²ÀÌÈJŠ#A‰#Œ9 º`¨ CbÈvä;](‘·cò‚°;v? ÀqŽV (³ò¹¯÷V™IE—‡E'I+ÈCiø#œ ¬ƒîp&‰<½†ë]ÐFe%*¾ƒ²^Õø­8ŽÅ ªàªŽUxEx]B­:±QÇ1ªäEKÍÄ&]-¦A-ÊúÀUçìÆ DJðÎ ¼Ô9;PU¯U†.p©zËé †;áÁ€PÀÌÄÀT†fNOhßrGG7æ(dèrü ϯ'B9þÀpç‰äý˜¼¡Ëù˜üÜ‚ ¸Àqäöò@ '¬O®è7}½·Z(:o†E'eho(ò³KrPÖÐ w*H>Œë]ÈÐÕ"¸0{QÖº_jü> Ǻ¬6¿\>Wµ„™Ÿfò¸Ï:Žy¼,ÅoªàR«ªÃ:¨E9C«êœÃ8´Ýn }a‚SUopª ÜL”Ñ ÷½±B{͇ eW¯d=h¾L€4^Ö –/ºT†xÜWÀ†ÿZj‡?3:~ë­÷IÎ\\œÉ½v߆{Ü¥W혳n7Ií±s¾…wWWܼwôN<ï:ø>Üæi÷ ¶ù`¢#:ò0&ò¶'ØçjfÈ[y;&Ÿ…°±SÁÅ„ö.núOÞ°&>à'÷{ˆ œ¼`[˪ßâo“Qq,c?BÅGeÎHÙ ÎnyÁº“îE—Ó•ý¡L[‹QÇ1ê82S$ G¦5Àd¤éZƒ+­Á²JÔú•IFyŠ£_Uý9ÝNà(}1ÁtéÏ*ðaˆÖ[UZõ–ëÃ⥽Ûî௧Õm‡º"­z§#ïTiuß8ÿzZÝàò^•V™óÍ[ALYdhwð÷—³I03i5XG«ãhgÒjp:#N•VCRÖ¸„‚Ž|˜I«!ë8fÇ<“V£‘ÒêcÔµ†jK°V#HiuÌta&­Fé»ò ŽºÆÝLZ-Û‹MýÂÑ;Óù¶…S) Сš1Óÿê;÷”º×Oõqòá)·¬ÜÂ5.‹a&EÇø„‹Gîná£ÎÅÈ%ò©ù–d)ßêS¸‹µÀ‰¶˜ò_D+³œj‹v™IêÉëÈ{y?&/D] O’w±…Ó¹þͶp…XHéIòh‘×Ò§Í—|–¼¤"ÊyC/‘ÏFEž².d·ª¬»‰ØRCÙN õvê¼Y>N Žºq;^~²ßY§OqlSƒG˜I e×ôÇ>5wÎ=ÁѪRƒËù{~£V¾…“3Jn*5x£²îÍØºPqtÖal=ÉÖÇ©Á;GfSHöS©¡ì ~ÍzZ—Rƒ×Ŧgb3»©ÔPvÒ¾dÞI ÇÛãÔt±I_—„­ ©!’7íÞrï¾_ýJýÐÂé!m±ÎïavqféÚEKsÜK•âˆf~v8»òMô—„]tºâ¾¹Ktßq ¾…³ÑÍ[ûœèÇñψc¶ªZÌv¦÷ÙCGfu>…©rÌa¢}9¶ê{Ö²‚PòܹÎÌLú2½TôVzŠc#”vøˆc8¦)Žù ŽPÚá#Žü„ã§9Î%oÇ~£ÇŽ/Ÿc³·GDàºàâT-&U ºÄ¬dÅ™A°÷«Êº_ÇÖ½`½tõå:n¿pl,û=9††ûý[Ô÷>TSX3[ÙïAÇqf~Ô—»å'8ö²ß[GÕü¨¯æ Â8·i˜ÐÂÉE 33?êƒQYfl]ÈÁé¬3;•Cš™{ôåRæ×¬Ç¡uaîÑ]½Ó;òoAkfæ}\UÖ¹#ÂÓíâÓ|u[÷”õo__7«û ¯_߮ǿš´xÿÁR öߘÑð·;üÏý•¾³ªáWâ­åüÁ¢YÅÔÁÿü¡á]¡\LzÜwôízú~å|¿ ¾_‡Ö‰¿KÁ¯,üÊ]ïKÈûY.`ͽ·ùõ÷Ã÷_3¾ß }¿ÁïÖ øÛþÁ’¯áù}ƒÆ}—ÎÞ»híãàóßß.þþθxÿtñg¤p|ð÷¯Þ þ‹Íï|õÖð¦zÏ#&ÿð%ôûýôýóý]ðý}ìû»à{¿s¾¿_%ò'¼õ}ký#ßÏ.í7×¥ýº´ß_Bpùãµ/Á÷ÿâ|ÿºJäOxÛ¬ïKI’ï?¯iÿí~ª~oýöƒŸ‚ôÖ›½ìš­;n¿çþŸÿó¯[Úé­àŸ’õó­/ÖÅ7ÎÅ·ÊÈcd9]¼~3| }±.žF¾~þõoó0b8ŽÀU‚²¯ÿúõÝðãèZÂúR[7ù~7¼õï;Çí \2ÜÐ…jªÆGÁÝÊ•ã¿ïT#Km¤Z°ÅF Ü1awýñϽº¯?˜þâþÙ_ÜàÛ M}qÙ7 ùw øõÇçý_M9^ÿóþëj躮àÇ[–Z ÞÞ2«Šã£„> Y×#Žw¸Äq÷c«¢¿>ß¿Uë²Þ¿lÚL³m¦ïÏo¯…N·¬å<Š«çÛ¼ƒwµxS]ØE \41Þ/C1ñÄsM §8>Vê¯{UQÕ°ÿ57h×N·krþ`#ÙÂïÇ×!OàÔ6oƒ™Œà0 oØ~ÀiŽ G«…‹ÁÚ³WŽ qªøe»‘—‚{Æ“v&KKpÿX\Öü€ŽßºÃ[±±ÝÅJ^9´}Mš[øçQôÁg ,óåÒ“¯>y8ÉÓç¦ÁjÙ“gk8ºì ¥q6pÑê\´§‹ôậ‹ñBÃù¹¼Û[ŽódáÈ·pÚšãÒ[?Þâ9½½•ûHCÇœª!ëª!?827ºcñ²V —“qTcªC•]4Nå¢9«¹Ñýæ¢áëç± äÅnl‡+È{¢×ï9Uœ“·xà8çot?à}9š²êÂ!«Gÿ¬!‡äù5¹N7åΟ¾ û°šèHºèH„èꢌ*—.ƒáRÖ2“¥ œ?Éõè¼1DÞâÑ4öF÷~4úFw9O@IÄÀÅõÃ$b –˶ÍsZ¸B(£Èãà’È;y7Jbpðèy9¾s±J’‹^ç¢ %I8vË)œ' G¾…Óž,3ɱi&Öô‘Ö %¡¬QUƒ5C¡$5“¯]lå” TcÂBIr1è\ C¡_‹ýY/vc;\A>Î%›TqN]gÒĹ$”lâôYÀøÌú<ëÈç!yI(ÙÌé¡e¦õ>¶ ½;üõèØàc¡ä¬*—9]"v–KYËŒ*p)—9§Š!êÈá¶Bɹ¡Pc¨$bËÅê‡Ú½w{-+Šû‰4ÕtX\Cìà””L § Zø8O¸@¹ˆCPr1è\ cÙÝÉü.wý RßÅÎ÷NgI¾Gïqì»Ôü"í{œ“i.q..œW-œvqá¼jáùºo—ô›·}жÊL¨8oUWªÌU¿±û€÷¾WýÈ Ö'ªÁbÉ&ùžt¾§q⛦ø½„²P½YÕí’;"Ÿp1 .Ž_XU +¬ª†VN.TɷНÀ¥ ´}ϨÂE£sÑpêqá:.M³P… ùqô|„ ,+ƒWåô “-a,[¬ ƒW©Òt±t±8UºpB”†‹\d‹ãbÓ Õ)I½îgüÌToT©Òg’\H”‹8‚%“ÎŤR¥! #8&¡äÎ÷N•J¾gïY¥JCæÄ'ã;žŒ+çâÂyÕ­7®œø¤É7¾Gßm«J…Š£Î$¢â¢W©ÒÈŽIßۉĴR «RÁ÷´ª|O«J•¦³Þ£0bJFÕí&£sѨTiUÃJ jX †ªTÒ›#¯]÷Õ.Z‹v¨J%½YàR“œ..J•¦¨ÊéI'[ÒX¶HSE)râs*§§¤‹MÝlKJ*UZàRlæÒ=zN¶x¾z3õ!á%ÂñBãû­„¢µ¼+wI––-o=ùÏsâþÙÉ4cŠïk—õ}‡w=b“Ø&ká¯/¨yÜ.%ò #šõ ø1¥1¶s±‹MÉE«sÑjÔ+xàÔqœ' G¾…ÓžÌLÈš²å-ðWcri­@–ª!ëª!kÔ+xàÔMµ;%p:Xpqƒ+\„ñÎÃÀ/¨›jßÉ+Ýxù™‡¦Ú8òJœCƹ° nÊÆvA=ð ꢎ|’Ôwø`A]j½tÑ‘tÑ1³óÐX£ÊeV—ˆËž›W¦.+¸”Ë,¨bȸð ê;|° .Å-‰8r1…ú±än€5Óc€cï>'½©DGN]Rä?Ïu炇*'ü‚;Êw›’ïNç»ûßÝÐw‡wÛ&.•£÷ƒ¡Uaı'² 7O×\PçìuìÇ, ²vø3ÜÔŸ*`_|âš_âCpƒw%¾Y¡7f§] ¿Ž£N~fåÀø™ý,ÆÊEÜÊ$ƒÎÅ0v‘_9ØáŸçνg÷³;ß»aŽä{ÔùǾ ÙÏGÚ÷É!¸Oœ‹ çU §]\8¯Z8A~r?‹ ¶Úv`$TÜWTÜTœ°r`‚¥|ŸÝÏbª¥¾Ä˜$ß“Î÷4Z~åÀ”¥>+¨ÒjEï•nwƒk\Ì‚‹ãWµ$÷JÃ"ŠšoXq¼ŸÅ?àŠ3ûYL4:Îʼný,ü¼kÖLUFP…àCPÕE¯ÊéQ'[âX¶X~êßDÕ~ƒ.6ƒ.6UûY*¸ÁE¶d.6³P½‘:æÍ2‡`$ƒgì")[nå§TiœÙÏbb¢\Ä,¹˜t.¦±‹‚*%ÉåTiÌï*•|Ï:ßóØw©ùeÚ÷IUšVÎÅ…óª…Ó..œW-œ ?«J“U¥BÅmpEÅ%?¬8I•&Où>­JóJ5X¬Jß7¸Â÷ > ZA•æRï–¯ÞjÁö•nwƒk\4‚‹cUšAÕ°2¨Vïg©K¾U¥fTi¶:­ÎÅñ~+ô›.©Òìt!èt!è!(«ÒU9=ëdKË–6[·p…*ÍI›I›ªý,\ŒàS¶˜•‰MôC[½™8ñª>*ÐÊýyºó%:7¥JóÌ197j”‹(‚wøë.îð‘‹¼*ÝáƒN†mP ;]lU©è»ÑùnÆ¾ó± «î²Æ¾G ÎÅ…óª…Ó..œW-|°Ë:Á÷Øm£JÅŠ‹ºŠ‹ÃŠT)¬q¸Ëºö½Ù]e«Ví"R¥’ïT¾-¯J¡lÕJ«`ÄjºÝ®qÑ .U)”MX/5¬ ®hXÕ¹c/ì²®àuý4ÚöãÅ.z‹^³Ëº‚K=Œ º º ƒU)˜¬Êé&ëÈe‹0Ue»ËZÊé°ªbVUlªQ¥\ŠÍr´šáŽ3üÑj;œðÄ3#+ÌŒ¬ 8â”8˜£  †º0D!†lG¾Ó…y;&/;°CaøCJÇqáhµð2 Q Ÿûzo•™TtyXt’´‚<”V?XÊî,Ã*‘·n\ï‚6*û£Bà;(ëUßzãXÜØ  ®ê°¯WÔI×%Ôªu£J^¸ÔLlÒÕbÔ¢¬œQuÎnœ@¤ïÌ0ÁK³Uõ:Peè—ª·œée¸sÇ LNÛ†˜íT†fÎôjßrGG7æ(dèr(— ϯ'B9”Ëp§cŠäý˜¼¡Ë©Z˜üÜ‚ ¸Àq\8Z-œ°>¹¢ÞôõÞfh¡è¼”¡½¡ÈÏ.ÉAÙÙi¸³*Eòa\ïB†®¶f ³eæKßGã8C—=/—OãU-afÀ§™<c/KñÛØ+¸”ÇêªÅ°jQÎÐÁª:ç0N m·ÛÂ__‚àTÕœ*C7åx$Ãíd¬PÀ^ó¹-„@YÇÕ+Yšïe!7Ë]*C<îlÃÿß¿õÖû$W]û)æ^»¶]Œ¾ãØ.U^èCFQlîðîrÛ÷ûÜVÿ}ˆwõ%Ãwø>üøÈîŸ}uä·Û–çȃŽ<ŒÉ¼íÉÃãº× òVGÞŽÉg!lìTpeòž*³7³þNÌ7¬‰xçÉý"0â³"Þ °m޲~‹¼ÍstFűŒý@•9#åûDöC ¬ÓÓ8{·9SBNWBôçÛm-FǨãÈL‘4ÉÖ`Üq…ǘ£®5¸ÒذÁzR¦Ù4ÙüªâèÏé~pGékÝ Ž ãHì‹è¶ÞªÒª·\¾êîÝv=­nßM*Òªw:òN•V÷Ï9_O«\CÞ«Ò*ó9góVSÚüýålÌLZ¥G\ó­Ž£I«ÁéŒ8UZ AJYã :òa&­†¬ã˜uóLZ¥¿4{¤Õ!Ǩk Õ‡jBZ ¥Õ1GÐq„™´¥ÓŽ&8êSt3iµ|ôfêïbޙη-¼Oqÿ.‚p14c¦þÕwî)/t¯Ÿ:ëãäÃS.nY¹…k\ :ÃLŠ.ß¶M¸xäî®q1ê\Œ\"ŸšoI–òý¡>»æ>¥N´Åtÿ"Z™íàT[¤+Ú®6yy¯#ïÇä…¨Ká9òÉ›Nsäú7ÛÂb!¥§È»ìm ×”|–¼¤"ÊGU/‘ÏFEž<³ A^äç¬ÍZ¸†üDƒtGù–hŠ|°Z¸†¼“I~®Áæ€I:òaL^P*û‡PÜ@"Y;ŽÌdŽË>›©üþ)7‚Ÿ°žÆÖ…žvÿJˆ‚OXÏcëÂ:ç‰<ìVê\ÆS®öà ˆ®…“ù2¡·¢ÎHœÈknM:#é™Äôæ/¾îݶ©ø ë.cëfe*Gò¬Ù'Œ0Ÿm¢uÒ}¼ø”c[ø°Cv[³™6bnmÆwðaÇéLÒI̲2~ë\õ„zOýѽ‡bŽÚ뾑‘èw¡‰ˆ<Ñ :XŸâØŒ¥v¸‚cµ÷]h¾eóúÇn0ä¨ÍëÏp4šÑŒƒH‘g&[oÑ­ä;¼qÝ"2,3Ý+dõ<¶.Tœ]UÖí:¶ždëãÞÙÂS›[ã½Â8JÝvÙšýšu?.!¡?·ÏÅf°!·ð‘u¡£/š'¬ßDe\S Y2€[UÖÝDl ©¡l§†z;uÞÏ;§GݾÚK-?ÁÅDïZø858xŠc›v¸‚#̤†²kz‚cŸÈ›ŸàhU©ÁeŠü=¿Q+߉Ntÿg"5x£²NoêÅÖ…Šó ³cëI¶>N Þé8’«>ƒ›J eOðkÖãк”¼.6É»T/>…©IWvÒ¾d=ׂÙý‰Ôt±I]âÙZRC¤úö›ý^ÊoWê‡Ni‹u~³‹3K×.Zšã^ªG4ó³Ã‰•ožî;. »èt%ä¸Á*Ýw\‚oáÄltóÖ>'úÅqü3âHŸÂ4]‹Õ)LB- Žä—~Ÿ›(Ç&ÊÑ—c; ¾ýk- a %Ož»qIÞÃÌ$¡/ÓKõÎáÛàÐ[é)ŽPÚá#ŽAà˜¦8æ'8vBi‡8òŽ;œæ8#”¼ñyvœ²F4Gï ;¹ÐÃÑaÞDuzŠòqÊz5A3cÝÅ -œÖsÖ­Î:;­8gý™z7œoá´Ö˜³žòÝ[[8¡5.U’­'õÄ,ÁLZ/ÝEuù^Ø·È©Á_Ð¥Èõ ³@5þÕÃÌ1d¾š]z…£]Çù¯Q½Ÿ#Ñ×ZH_ûrãÐkä͘¼ÐÛñA`˜|Äð¨#‡ä…ïA½†U“oNlð– mVÝ7w¡xúƒ­ã[¸~¾†;]Ð:6hÑ[ 3ãàâ?yõeæ&>ËçØ¯qôãâÏÃñåslöN³\×\œªÅ¤ T—èa¨›ÚZàýª²î×±u/X/Ýc}å£Û¯ÁË~OŽ¡á’½Ã=;ÓÂǃƒj k†c+û=è8ÎÌzoŸàØË~ouU󣾚ƒ ãܦaB 'Æ,Ç)ÃùQŒÊ:ý¶.ä‰àtÖé+»Í~ìîpîч¨³‡Ö…¹GtõHñ×ujîÑÇUe¹¸&Y¿pãu[÷”õÿÝ/)§Û®ýgÞ÷ƒ› 6üãVÏv5]{oh™­IüúññãV2ußß*WÒÇŽpržÖgna²oáwŽ p,sYŽ£¥&½*øÁÑ9®·n7Ø~ýøýþV+p,‡¨;Ž£8º“£q\Ò%¬ G~çè޾»¾ãè…ºö'G?ä/`BláwŽ^àˆÛ©ŽA(Çpr CŽù~ýøû¯/XƒÀ1öwˆ¶£PŽñä‡í%p-ü^ŽQàH\èÖrLÇtrLÇŸÿ³õ}u¯òSg½KîböO¤®¿®ß`MùLÜyÒÏù|’ï…Rw.þ[€Ç\D·ÝB¸Uƒ­Ègž¼!ÎsoÈã0ù¾“7kG~;Õà’÷¹³Þ’w·Áü¾vp7«@ž8˜®%/¤,s¦,c&šŸI)´ð#´²ªó·¹”e„”eΔe`¢ËÆû~ç(¤¬êm.eáŽgÊ2Ô·êÍÙµð;G!e×#ÓqtÇ3e™™”åÖÐÁï…”eÎþÜŒûó[2XSnáÝ–üün]èè ñL)¡ƒV¢F\Þ÷ç&åX¬ ½ µ™´±+oè9ƒdÓi„žˆ -­u#X'·‰ÞÔÍ~@æ.ù@hãàúùúÖº¬¶p11U¾ QÄlZkÝ Ö=¹EöX¿û.H j¥$pÖƒ`ZH¾Iïí3…‡u!æáÌüÐgþ¿>ß¿úÜ´'–ÚW[ò1¿¯B´›áÖZVˆyjâÖ‡ïÇÜëÝ 1Vbª [‚uj£LºøýòÉ»uúÀ»o__·RÝÇ)_ß®†æ?1ƒozŒ†ßÉ,cý„_‰·–ó‡6¡¤þç 'Â<ؾ]O߯œïWÁ÷ëÐ:ñw)ø•…_ù¢«à} æƒçîIê×ßßýÍø~ÿôý¿['àowøK¾†tä÷Ðý£Žœú7ÞEÓïïg\¼ÿ@ºxƒ³FB y!ÿ.ÿÎÅæw¾zkxS½§ù×Ðï÷Ó÷wÎ÷wÁ÷÷±ïï‚ïþÎùþ~•ÈŸðÖ÷­õ|?»´ß\—ö[èÒ~ ÁRXÈ¿KÁ¿8ß¿®ùÞ6ëÛ`Ñ|ÿøyýHûo÷«{ë·ü< ·ÞìÅ“·³5ð|À¡no}ÿÔ‘ÿ’¿~ãŽÐÝàCò"ü‹%ÿÆ‘§á˜ü‚És¾±äßjò$üëç_ÿ6ë†#ë <wýׯï’õc®—°¾ÔÖÉ’Gð°R—·Ü­3ðßÉß§8,9÷&z/75æ(¸cªw{ëàHYj#Õ©¹ØH;¦ý\üs¯áë¦ã»ÿ@v|7øv2qßñ]Ö5›cäøƒïø üúãóþ¯¶þóþëjè ¨àÇ[ŽÚ˜½½eVÇG }²®Gïp‰ãîÇ6Sv³ØBòþE¿Ô˜ œmLÄ^Å[¶pºÉ-çÔu8¯&tð®/`±‹@¹hbL ×”[8é‰å8šNq„³ 6ç©j8ö¨ÚuÓíš«†ÐÂïǶ#Oห£ Á›xÍò†-àœæ¸p´Z¸È¬ý0«åÊq!nÓº ÇÏFpÏyr{ë‘Óýã¨Üs—šqÖÿÙË᱘j«éot^xó:ôúo5ÛM‘b®;qn;W¥…ÁD7n…Í•Gá÷ä«ãÆäAGNòôiåvµì}/5œ?ÓÜ®EÚÊ|(ùÀE«sÑž.ÒWÚ´.Æ çwÐØ=cÓž,ùN{Bs\zëÇ[üå"v},ÕÑå"ƒjȺjÈŽí–SÒE¼™´†Ké±n=©® ‘]4Nå¢9«¡ÝµY\4|ý<>¾x±Ûá òžÈ9=Ç ŠsúîLçíÕ&-¼/GSöÚ[áj“£ÖCòüNØN7åÎßyb×ǂӫёtÑ‘É×EU.]"Ã¥¬e&K8ÊÑy)bˆ¾;7€ÄmØ;à÷HknY™ÊP1p1Bý0‰èCÐ’ÐÂB E—DÞéÈ»¡Pƒë„GÏË)ð‹P’\ô:ýP(I¨À±‹XNAàÎ.P.â”\ :ÃØEö›à~—»þ©ïbç{§³$ߣÎ÷8ö]j~‘ö=ÎÉ4—8ΫN»¸p^µp‚|Ý·KúÍÛ>h[e&Tœ·ªŠ«®2â*Žÿœú€÷¾W×ëÊ Ö'ªÁbÉ&ùžt¾§qвŸ*ð{ e¡z³ªÛ¥¾C|ÆÅ,¸8V|ûÁ×VXU +¬œ.\¨’o_Khû—š ÎEéDžëTh¸4Í@‚Ô‘dO„`€Aʲ2xUN:ÙƲŠ‚1x•* A›A›S¥ 'Di¸ÁE¶8.6P½ôA…éØ27®Þ¨R¥!Î$¹(qK.&‹I¥JCFpLBÈï*•|Ï:ß³J•†Ì‰OÆw<-WÎÅ…óª…+Zo\9ñI“o|¾ÚV• GÝöDÅE¯R¥‘-’¾·‰i¥,V¥‚ïiUùžV•*Mg½GaÄ”ŒªÛMFç¢Q©Òª†•@Õ° U©¤7 É ê;|° .µ^HºèHºè˜Ùyh¬Qå2«KÄeÏÍ+S—\ÊeT1daÜøõ>XP—bÈ–D¹ŠBýP_ûÞ„pôä ÇØÃ»¯ro*Ñ‘S—ùÏsݹà¡Êã ÿ€àŽòǦä»ÓùîÆ¾Áw7ôÝáݶ‰†K%äèý`hUqlà‰ìÂÍÅÓõÔ9{]ûq ƒ¬þL7õã§ Ø—Ÿ¸æ—øÜàÝ'‘oÖ_<=ŠõζðûwåÜ_’ŸY9Øác™æå"ne’‹Açb»È¯ìðÏsçÞ³ûYŒïÝ0Gò=ê|cß…ìç#íûäÜ'ÎÅ…óª…Ó..œW-œ ?¹ŸÅÛm;0*.XUÅmðAÅ +;¼÷}v?‹©–ú7b’|O:ßÓ8hù•S–ú,Õ›UÝî׸˜Ç®jIEÏ<ݰâx?‹~Àgö³˜ht.‹ûYøy× .¬/˜ªŒ  Á .† <ª‹^•Ó£N¶Ä±l±üÔ¿‰ªý,&]l]lªö³Tp1‚‹lÉ\lf¡z#ušÎ›eÎ~ðç ÞÄ­ã”*3ûYLL”‹8‚%“ÎÅ4vQP¥±$¹ü‚*¹ó½S¥’ïYç{û.5¿Lû>©JÓʹ¸p^µpÚÅ…óª…ägUiò}жªT¨¸ ®¨¸ä‡'©Òä)ß§Ui^©‹U©àûWø¾ÁGA+¨Ò\ê]ȪՂí+Ýî׸hǪ4ƒªaeP5¬<ÞÏR—|«J3̨Òlu.Z‹ãý,Vè7 \R¥ÙéBÐéBÐ BPV¥9ªrzÖÉ–<–-m¶ná Uš“.6“.6UûY*¸Á§l)·!4±‰~h«7'^ÕgYY¹£o=<.«Ò|!î%Þ»íþzZݾ›T¤Uïtä*­îŸs¾žV7¸†¼W¥UæsÎæ­ ¦,2´;øûËÙ$˜™´JޏžàhuíLZ NgÄ©ÒjRÊ—PБ3i•>7sžcÖqÌ3i•þÒì‘V‡£®5Tª i5‚”VÇAÇfÒj”N;šà¨kLÑͤÕòÑ›©¿‹=zg:ß¶ðÖÅ£XzC3fÚá_}ç¾ïÐ¥zýÔY'ßžrqËÊ-\ãbйfRtù¶mÂÅ#w·p‹QçbäùÔ|K²”ïõItè@ KÈ é ÿE´2ÛÁ©¶h—™¤ž¼Ž¼×‘÷còBÔ¥ð$yÈ-œæÈõo¶…+ÄBJO‘ß6m¶pMɧaÉK*¢|TõùlTäÉS0›°äE~®ÁBp¹…kÈO4XAw”o‰fÈߊ>Ø®!ïÆäA’Ÿk°¼káòaL^P*û‡PÜ@"Y;ŽÌtŽKõÑ­‚ˆØ?EâFðÖÓØºÐÓî_ qCð ëyl]Cç<‘‡ÝJËxÊUb8dÖ'óeBoE‘8‘×ÜštFÒ3‰éÍ_|Ý=ºmSñÖ·°mádAåHž5û„æ³M´NêÌSqkï9µða‡ì¶fó„'ÑYÓ‡§3Ig$1ËÊØÈ¹ê õžú£{Åœ!¹Ëû"D¿ MDä‰nÐÁúÇf,µÃ«½ïBó-›×'8vƒ!Gm^†£ÑŒfDŠ<;Ùj‚÷-¼q™ „e¦{…¬³žÇօг«Êº]ÇÖ“l}Ü;[x†c{k¼£W¸G©Û.[³_³îÇ%$ôçö¹Ø¼Ðl Y:ú²¡yÊz²Æµð‘u!¸UeÝMĦÊvj¨·Sçý¼£qjpÔáÛ¡½äòÓM;×ÂÇ©ÁÁSÛÔ°Ãa&5”]ÓûÔ@Þ„üG«J .Säï!øXùNt¢ÎÅ©Ôàʺ7cëBÅyÐY‡±õ$[§ïtÉÕ²™J eOðkÖãк”¼.6}¦­{7•ÊNÚ—¬“;i/ɬs©!èb3Àغ"Õ·ßlìOß®Ô-œÒëüfg–®]´4ǽT)Žhæg‡÷­àTßq˾ît%D†b÷#iˆ¾ã| 'f£›·ö9Ñ/ŽãŸGú¦éZ¬NajqŸ=Tp$Wç­Mnªs˜(G_Ží€úö¯µ,„ ”<}î†7)ÎLú2½TôVzŠc#”vøˆc8¦)Žù ŽPÚá#Žü„ã§9Î%obxÔ‘CòÂ÷ ÞŽêÉ7'6xK†6«î›»P<ùÁƾԱpý| wº ulТ·@gÆÁÅòêËÌM4|–ϱ_ãèÇ1ÄŸ‡ãËçØìf¸®¸8U‹I¨Ž”•iŸ6‚½_UÖé¯$°u/X/Ýc}å£Û¯ÁË~OŽ¡á’è})×Âǃƒj k†c+û=è8ÎÌzoŸàØË~ouU󣾚ƒ ãܦaB 'zê°NÍú`TÖƒ[òDp:ëäÜcدDÏ=úuÖãк0÷胮Þ¹n¾BJ3s>®*ë‘þŠ—\ÌxÁAgÆÖ=eý÷ AöÓmÿºšu?*¶i°÷C«É¬ZÁ¿÷oíƒÍo«YÝJJ‚oɇ[VM½'Gà8‚À±œG8Åq s,sÙN^Ü­[jÒ«‚T&Nôr ÿýc/!+xRQwG'pt'G7äè..>nÇ)ð;G'pôÝåðGOucüàè‡í%ú[ø£8†3AˆGâb⣴K<Ùz뉿ÅcÆžÄþѶ£PŽñ¤‡å·®Öø~/Ç(xB\èÖrLÇtrLÇŸÿ³õ}u»~‹©³Þz/Çõ‚Ëõº“OùLÜyÒÏù|’ï…Rw.þ[€Ç\D·äÓ%Ú=ßÞÉgž¼!ÎsoÈã0ù¾“7kG~;Õà’÷¹³N”üšÂIÞ¬yâ`º–¼È›“¼™èÆâ­P[øÚFHlÕùÛÀq#œa‚£1±ƒß9 ‰­:@›KYø‡†ã™²Ì0es €…‡9S–R–qÝ12G'pŒ„qî¾õ06¶ð»ÞîÕï­Á”:h%Nôça_§¹ÓàÔfÒÆ:¬2œºIy‰Ãº?Å+pâñ gOãž`ÛlÁ]?_ßú.„ 8J‘˜dcñ]‚ûÓwÏùîßO¡~Âwð µ^8%p g“™&“Ë]83?ô™ÿǯÏ÷ob“ržlõÖŸù„˜ßW!ÚÍp§ï;-»ÊpB‰¦ãà³½Þ%xX‰©&l= àDÇ—R‰:nØáâå¬ÊÃE33\´CøÇ6€`•†.šË¾“b0\43ÃE;„Aà¨.šj¸h)øaÝÊÖûáâÛÅzK1\4ÕpÑ®ŽãèŽôpñ½¥.šj¸h)øÁÑ éáâÅà‚ ‡‹Çºá`¸hf†‹v?< ‚'Šá¢©†‹–‚Ö£l½.š¶ÃES íš8ŽIà˜ÈQárÁ£BS -?8fc&þâê·4ƒ?S þ¬YŽFÈ ÛoýoSWè-ÅÏTcãY+ļ=cÞr1o…;ãÙ X§õÀY¤õo__·òÚ…û×·«¡tÿןŸKûßÃzý¹Jom3ó´‘»‹Çu7‚_‰·Ê¢éNÌ;­ñžà¿]Ï‚¸2q• â„_¥‚¸žž„Òú¿²ð+_W¶ .빩÷×ßO~ýÍį¿ù‚¨áWé­;ÂÈÛÝÈëI g ‚Ø·|+ðßßþùNpÜ_¡|oáW~¾Å–¶ßÏ¢Œ¼ðßùº®àBÓøý^ â)ˆw¡ ÞKA¼óñ>.ˆw¡ ü+ˆ÷«äâLA|•‚øb âK(ˆ¯R_|AðÑ-8÷M¿¿„‚(ð/® ¾®’‹ññóú‘Ž‚øŸíJDÂÈí?è­7{Ù×Y»+¼x>àÇzho}ÿÔ‘ÿ’¿~ãîYÙàCò"üë´ÞrþÖBr<á×ÿ<ºÄœžúñO§¨(ø?¢ªÞÚ.Ìé{Ô˺†°ŸØJXëáן÷µõŸ÷_Wúh̪²þpñÓ¡"Zß o«"÷A+æï‡ÃIM¹ÀÙ¦L¨Äu…N7øå¼Í¨ŽóÕ„Þ•ü“E÷·€rq;Tsá:’N{Âq4-œâøøØùº×U û_sƒ_àtƒçª¡ƒßoCžìÓ}p]Àg‡yÃðNs\8Z-\äÖ~ªZê~­ž]Ìz0‚{ΓÛ[ÇÀŸî8Gµˆàž»›³þÏ^ë}ÜU+¥èê©ætÒÞ*»›nÙçnÁiëo°øçLôÍUNøNÏí­©'_Ý\5 :òp’§/¾r«e¯­áüõXGšl\Ä÷[ \´:íé"};jëb¼ÐpþcŒ£÷¡=Y8ò-œö„æ¸ôÖ·ø{*ÝúXo«9¢{*ÕuÕÛ¯Iñw‰5\jLåìIu›¥ì¢q*ÍY í€ÅEÃ×Ïã;þ»±® Ós ª87açí-™-¼/GS>ÛvÂ-™Gÿ¬!‡äù*8Ý”O8}¦[ëZ¯FGÒEG"$_`T¹ t‰ —²–™,UàüUœG祈!€qhîèlá÷Hk.ìœÊP1p1Bý0‰èï½É¹…+„8Š<.‰¼Ó‘wC¡$× ž—Sà;;¡$¹èu.ú¡P’$Pc±œ‚Ày²pä[8íÉ2# ›fbMi­PªÁU5X3JR3)ðÚÅVNÙ@5&,”$ƒÎÅ0JQH36^ìÆv¸‚|œJ6©âܦaœKBÉ&N‘Œ/¿Á³Ž|’—„’ÍœZfZïã ‘£c‡¿|,”œUå2§KÄÎr)k™‘@.å2çT1Dß‹€ ”œ %1†J"¶\ Y¡~ˆãW¶·Ruë]5×;8%%ÓÂ)¨>Î.P.â”\ :ÃØEöx©~—»þ©ïbç{§³$ߣÎ÷8ö]j~‘ö=ÎÉ4—8ΫN»¸p^µp‚|Ý·KúÍÛ>h[e&Tœ·ªŠ«nÅå*Ž?™ë€÷¾oÊlJØùD5X,Ù$ß“Î÷4ZöÔ«~/¡,ToVu»Ô‘6ϸ˜ÇŠoßIøzà «ªa…•Ó… Uò­â+pi-‹Fç¢áÔãÂu*4\šf   Aêtë'B0À eY¼*§l cÙbÁ¼J•† ‹Í ‹ÍÀ©Ò…¢4\Œà"[›N¨^úÌûã ͉ê*UâL’ ‰rG°äbÒ¹˜Tª4¤aÇ$4€ÜùÞ©RÉ÷¬ó=«TiÈœød|ÇÓ‚qå\\8¯Z¸¢õÆ•Ÿ4ùÆ÷èû mU©PqÑ«*.z•*ìh‘ô½HL+Õ`±*|O«Ê÷´ªTi:ë= #¦dTÝn2:J•&P5¬ª†•`¨J%½Yà1òÚu¿[á¢Õ¹h‡ªTÒ›.õ0ÉéBÐéBЩTiŠªœžt²%e‹4U”"'>§rzJºØÔͶ¤¤R¥.Åf.Ý£çd‹ç«7Jž¯°gâÖ÷[òŠõQüwxWîrÞõë„£Þøç9qÿìdš1Å÷ÀµËÀú¾Ã»ï°±Ilðõküõuc€"Û¥DtäA³ ^Á?¦4Æv.v±)¹hu.ZÍ‚zü‚º1ŽódáÈ·pÚ“™ YS¶¼~àjLî#­ÈR5d]5dÍ‚zü‚º©v§N .‚S¹ã‡ÏЦÚwòJ7^G~fç¡©6޼çôÆ為)GØõÀ/¨ˆ:òqH^XPßáƒu©õBÒEGÒEÇÌÎCc*—Y]".{n^™º¬àR.³ Š! ãÀ/¨ïðÁ‚ºC¶$âÈÅPꇼðÏ¡g¦sŒ=¼ûv÷¦9uI‘ÿ<× ª<žðî(ßqlJ¾;ïnì{|wCßÞm›h¸TBŽÞ†V…ÇžÈ.Ü\<]?pA³×°°0ÈÚáÏpS?~ª€}Ið‰k~‰Á Þ}ùfý…Þ˜½Ý-×Âã(ò¸ýH䃎|!ÅOTpi4ãcçb7N‘\Œ:ãø )~K£Ÿ8OŽ| §=¡9.½õñh&Ø>ÒÚqŠP Áªª!ØñRüL|—SµÀ–¸qŠäbÒ¹˜Æ_HP?YÕmp ù<3N©V²^‰ó¸ã\§”•, x823án¢Ñ‘7CòÒ8%®)ÏL¥›ªèØàŠèˆ03N‰^•Ë¢.—µ¾6eM͹UK…Âh&] …qÆ)1Œ¿òD,‰8s1”…ú‰Ô)2o–½Þ ›®J1QäqpI䓎| ¥Ì ¥˜¦B0w.vBIr1ë\Ìc¡”y¡óŒPJ+çÉ‘oá´'4Ç¥‡…Rò}¤µBI¨† ®¨†äÇB)óB)Íì7y¥J‚‹\áb^ÇBÉòõS­É½Òmp y3#”2¨â<Ã0Î%¡”*Çi¡”­Ž¼’—„R¶\SžJÙé¢Ãé¢ÃÍ¥U¹,ëqŽ\ÊšJ9Î¥œt1”Æ @J9…’DþLÄåhú&†Ðmýdâ\ þܦæSÿþºPº¥È£àÈïð×Éïð×W¾+x2¬œ‚r&ÒéI+”DÎE£Yù®àØÅˆßΓ…#ßÂG1ÊÑG‰ï©a}¤5BI¬†¨«†¨Yù®àµ‹œ‚²¤ö %ÉÅ ®p±ÚF ¥´òµX6ˆ¼Òíp y;!” ìðx)ÎÓœ¹e‡»òVvåöS‰使Ì>Xù–Z¯ ºèºèB LVå2“u³f廂K¹ VU ‘'NŸ¹³ÃBIŠ¡r&’áÎm2ü™H;¼'oBËÄW7f¦£ 8â’8˜#ÿÙ c(D!:lG¾S:y;&/D0Øáw/?]p¿Ñ„æ¸p´ZøàÕò¹¯÷VHE—‡E'|y²Ã_žþD@(Û* wÖŸDžÞVëÿtÊÆ†ø®ÇzUã·^à86¨‚«:¥ç…7*x¼>°QÇ1j¾¾¨àR3±IW‹iP‹r‚wFÕ9»q‘F›Î ¿:gªêu ù€¡‚KÕ[ã1ÜA„&¸ú¤!C»™e{pŽâˆƒ@âèÆ… ]NÓ±áùé0(§éîX;‘¼“2t9“ŸûÄ\à8.­NXŸ<ð¼éë½ÍÐBÑy3,:)C{C‘Ÿ=±ÊÆ-Ã2'’ãz2tÙye… €²óê¥Æï£Àqœ¡Ë¦¨—‚˧a†¶ÂØÜ§™<cŸÚÁï?­àR«ªÃ:¨E9C«êœÃ8´Ýn W ÁƒSUopª ÜL”sM w(‹±B«öŸB”u\½’õ šîOãSo‚å‹.•!w¨„á?¾ÝáÏŒŽßzë}’3gr¯Ý¿ê8n–¬6`[·›$î$tѶð÷û'ýÆn’vð? |øÕ€Ý¿×èÈíyБ‡1ù ·=y¸À>W3CÞêÈÛ1ù,„ .ò´°uߥC\ø†5ñï<¹ßD|@À{V®V=ÞrFÅÑÇ2ö!TpT挔‹¸MŸëô4Îê&KÈéJˆþŨãu™)’†#ÙѯÖÇ9ŽºÖàJk°¬µž”ikÈ0Åѯ*޾¬8£ô™ÝGÐq¤¿ÒÃgëZoUiÕ[®_ˆ«F÷n»ƒ¿žV·žiÕ;y§J«ûwX¯§Õ ®!ïUiÕû™´Ä”E†v9›3“VƒÕq´:Žv&­§3âTi5)eK(èȇ™´Jx7Ï1ë8æ™´JóH«CŽQ×Ê5RZ ¥Õ1GÐq„™´¥cJ&8êSt3iµ|ÛcêOëŽÞ™Î·-¼w1®Þ.†f̴ÿúÎ=å…îõSg}œ|cxÊÅ-+·p‹Açb˜IÑå   ÜÝÂ5.F‹‘KäSó-ÉR¾?ÔgßÕš(³ôIzò_D+³œj‹v™IêÉëÈ{y?&/D] Ï‘¿%¹Nsäú7ÛÂb!¥§ÈÃ} ×”|–¼¤"ʧ2/‘ÏFEž<¾® A^ä'l ¶…kÈO4XAw”ÏP^+y§#ïÆäA’Ÿk°ÛÇ-\C>ŒÉ Jeÿ¸†›èjÇ‘™ÎqP- K"bÿî…ÁOXOcëBO»¸Â Á'¬ç±ua g>u+u Ú)W{©îBnád¾Lè­¨3'òš[“ÎHz&1½ù‹¯»G·mž·~ë“mádAåHù„æü`´NêÌsaÒ[ø°Cv[³yˆó‘0Ñq:“tF¸ÏÖ°‘sÕêMñG÷:ŠíðžJ>0D¿ MDä‰nÐÁúÇf,åè]íÓaè,]Ù¼>Á± 9zóúâÈO8îpšãŒPòÆSäY­~ëÉ ßƒzÇw…ÚRœ mVÝ7—xKï÷K®Ÿ¯áN´Ž ZôèŒÀ8¸øO^}™¹‰†Áò9öký8†øóp¼ÉA€ë€‹Sµ˜TêHYé÷ÝYãA°÷«Ê:ý•¶îë¥{¬ïjs»É±ì÷ä.‰Þ±ÑjáãÁA5…5ñ•ýtgæG½·Opìe¿·:ŽªùQ_ÍA…qnÓ0¡…"Ñæ©¥3ŒÊz0cëBžNg¾k7ø<3÷èCÔYCëÂÜ£ºz§wä¨ïàç}\UÖãøäóv<€à ³>>ºðÿÝ/DØÏkýëjV»š®ÁÞB&³jÿÞ¿u¡¾â‡Kp‘ò§uଃ`½å ÖyÜr|‡—kwl' î×RUÞ1yOx¿ì^‘g¥ßáÄÝÚ­u'X'Ú»¹Äìm±îë¾»=¹³î©î¢À{ëþèõïÖ½`=œõ¸zB½wr%DÖûÆÁc1^ë{|'ûº©ò= ¾7!µÖ“`ý¸ iël=\KüþƒÃ?´ð¾„²ÙÉ_¯;ù$ÏÄ ù,§îÁx @o²o\ ¿sÌ‚«àao÷u÷oLœ.öä7MÐÂïT„.‚Ú_ÈÙöž[×Â# 48e p²ÙBotÑ *-wkƒ›(.Þ¶ð»'Bì3Þ‡'žóÄ žÐ³"+V:pæ[àò-ù–¾ÄÚ†„kî?~}¾3SG:ß*ȶð£!ºö)àv'gdS$ZøQ'Vˆ®°ÃyÞHtZøa$pF «¼/‡î—•·(ïoWX8©¼o¾Ø±ò6å}·.ÁÊûÿxü«m˜ò~»õ£®PÞøÇã_´u<Þ ®PÞøÇã_´u4Þ3˜<­¼EŒò6å}§%ÁÊûÿxü‹ö-25¾+”÷þñøW'¤órÁÖÒùÿxü‹¶^ÿà/®†kDñþñøiÝ  †+TíþñøYï Ü ¸BÕ>àÑÖ™a1:Uû€<þE[G]¥ÅÖªöÿxü‹¶îð~'?ã1xhìÛûý­RqÖ_¬/?$´öÉXGù|!_gãtë†x©¸/®X¯7䙕ó½nqñ*x€¡oq÷·ê zëËÅw·ž_´ptÍÑÓ? \á9ëè~”Ãúõã×߸½ª»€ú­í|[~°Ô.ìN§ h:H ¥ _YŸHÀ¥ ˜JÐô >•&Òpiêw+¸•ñI0•&€K0•&€Ku@ܸ‡@öu8:î'óݘHutlŸÿžuo—œ§ÓL¥ àÒDû‘+ŒïLš€©4QGÇ–aƒ+i¦Òpi¢þ€Kõ[6?zZ´‹w½<¸¿åÏå’÷»h?„Òͺ"TœKB,?¤ª \9x•& ”Žºn2ùb² ¼øž2‚ÛÒ}'k9¸«s‘­à¾äˆÌúŽÒ\Šïušpç„i ¯ÓDu»à4‘.ކ—4qs1˜#Müý×-žÐ$ÂãäÝ¿%“ë7À³söR~@ÙËXŽúã£èŽê‘Ø aý¶°ößÙÞÀ“ÅÀÀѤnHåü¡Ÿ¥áO(˜òLÁÑÓZÁùäx©“Îêþ:ëø£€{Éo? áîë¡ykÿáãÇ'R«·$å{øþVßY?àIšÈÀñ7Êš¦¯ºÊmj£pÜ2TÞ1÷ÐGKÁÒðú”–èmW´n©“³^ha\~H#‹$×-Å’ùݶ¶‚7’‹{R˜ÙFrõMæþV$µ­3웿„DÃ[ýU~@ÚÆ2ä[ýU~°cYh‘þº¥ØX~h$ oõWùÁU¥íôWù¡‘\”<°X™s⦢gàþ*? €‰×-#žñÚNr1ðT©¯ãþŠã‡VrÑp§²²äbà–”…K.k©¬L“el‘\VfwýU5Ã~Å>çx=:ë÷·\ýRÙÌ^g¯·ís3ëv±ê2½Ø”h8º€ùáûÕåŸÛ`•WQƒ-¾—ìõf"u÷·*¡óã¢:{ÝÈ;ƺíõüñCDÝ]×Õ á!‰Q?²„µ'÷·õ·1~Ñ´¶’Äöæ­*m‘Ä›…t*꺳ÚÖ:¯gN ] üìŶyFQÛJ›5—É[Ib»+uîêI£µ‚ûO¬ïHÛK)ºZç xŽ%1ëu½saÈI|¤÷vïË µØÝæDzU¹¿Uui·Øôîü¡"ÿv‹‰DÊ[‹ðÑ-Äæ‚›8HáÖ6k'vJœXFœ4;b˜iŸf‡ ú nBœ M›‹žÚ?qËq†ƒÓâÄ5℞trœ8qMú1–ÓâÄM‰׈“Ê÷qâq²– O3âÄqâÄM‰›´"·½cØvk'®'Ö1ð*h}v‰ÚøÂЇŠœòÀM‰—¼:r'N'Nš=çh'N'NÜ”8q8ùùçû‚ÿ:ë?ÿ¼·o¥uÿ ôÏ×Òþ×O>üúûgß×"ý}m~·¿Kæ÷fCZõ¥]«™¸ï¢®Ýðth&Ž”÷ÔΕ]31ðF@›?nšé¼A¥ƒW*Cà~ÇÅ1üï6ìj¡V»IiÔ-W?”U¿©ä–º© ‹C;Äêt¶zµ <=ÙØž“Êéõñ)ÑööþÚ“RÝÊ^O#æKö4¼ô´f4T§<Íd¹e|„q— Ž4SäàÁéÓ·xñÝÛ¢ë\£™cMû_J¾Zm‚ítªþõ§mïÆÆËþCÛÞ}ò]Ø\üÓü[^î? ?`ÂÚw×®Ks°÷6×¶Û>`'àysXïû: xëâm@LnpÜ–ß©*-§*«=0of[™ÿïÿúñëû_þúïÿúÿš~6Æ DDyLP-1.10.4/Data/Netlib/80bau3b.mps.gz0000644000175200017520000042702610430174061015454 0ustar coincoin‹èJ®980bau3b.mps¤}[vã8ÏíûYëŸCM µÄ;ùX¾äâØ©X©”óyþ9’cÁÜŠBq?™]ÚI€rK¯¿Û_ô_lW¿?Ìêÿþ_÷çôþÿï×þׯÕzûûõ÷Çzl½þ~|ÎZOÝSÞzÏZ§·y=< õžµ^¡u\ç­Swk}ünšõÇkßz¼¶ºýëøo¯‡ÍMBßzÍ[½À¬u|þ ­uÞ‚'OûLºé ¤«æÏú£[žÔð¤†' >¯ Ovðd.ïÏ>ÿ·泃ùìòÑ*И)И)И)И)И)И)И)И)И)И)И)И)И)И)И)ИiИiИiИiИiИiИiИiИiИiИiИiИiИiИiИИИИИИИИИИИИИИИИИYИYИYИYИYИYИYИYИYИYИYИYИYИYИYИ9И9И9И9И9И9И9И9И9И9И9И9И9И9И9И9ИyИyИyИyИyИyИyИyИyИyИyИyИyИyИyИÐXÐXÐXÐXÐXÐXÐXÐXÐXÐXÐXÐXÐXÐXÐXÐXEÐXEÐXEÐXEÐXEÐXEÐXEÐXEÐXEÐXEÐXEÐXEÐXEÐXEÐXEÐX%ÐX%ÐX%ÐX%ÐX%ÐX%ÐX%ÐX%ÐX%ÐX%ÐX%ÐX%ÐX%ÐX%ÐX%ÐX¥Qc¯¿~=ýÙïÿ÷õO¿Ÿžš¦[ ZZZZZZZZ)kí׿?>7ë[ëõwÖzêžòÖ{ÖR€S€S€S€Ó€Ó€Ó€Ó€3€3€3€3€³€³€³€³€s€s€s€s€ó€ó€ ðoaòo¯û[+“žLðo)ÿ·ÍïÃãZïYëZÇuÞ:uYKÁ“êíõ1kNNƒt Ò5üM SÃßÔð7 üMÓÀß4ð7 üMÓÂß´ð7-üM ÅÂ_qðWüÅAÏüMÓÃßôð7=üMÅÃ_ ðWü•%À_ ðW"ü•%Â_‰ðW"ü•%Á_IðWÌR‚¿™ò¿Ù©ÕúæÁúÖkÞZo²–†'5<©áIOxÒÀ“ž´ð¤…'<éàIOzxÒÓž ðd€'Cþä»zÿÓ4×rüþã÷ïSÓl¡uû·U—·6ëüÉ¡•ýÛ_ø·¿ù¿=îp½¢³"¶nOî>òÛA?_àß^àßöÐ:lnV×·^óÖëá1o½æshÝþÊÛ´@ÂñùwöWŽÏë¼:ûûÓ´uû›3ý}ô>9û7õ;»m*Цm*Цm*Цm*Цm*Цm*Цý)ИÚÈö§iëö$èHŽhEVhEèAÁÌ+˜y 3¯aæ5̼†¹Ö0׿ZÃ\k˜k s­a®/­Û¿ÁÌk˜y ëHïNÓÖíIЊ­hЊ­hXcÖ˜†5¦Aô§Aô§AV•m^Z·¿ºÕ°Æ4hÚ€n èÖ€n èÖ€n èÖ€nÍv›·@Ó4m@Ó4m@Ó4m@Ó—Vöo0"л½Ðû¥•ý< z7 wz7 wz7 wz7 wz7 wz7 wz7¨wXáæ3ב›°`l‚§µ`!,Ä‚…X° bÁB,Xˆ ±`l‚MX° 6aÁ&,Ø„›°`l‚MX° 6aÁ&,Ø„›°`l‚MX° 6aÁ&,Ø„›°`¬À8°zw wzw w÷@ïôî@ïôî@ïôî@ïôî@ï2+÷rš¶nO‚M8° 6áÀ&Ø„›p`l½<ÈÈØ‹{q`/ìŽ8°öâÀBÜiÿžý°6áÁ3x°âÁB"ˆ$}+—§aDe6F¤aDF¤aD6F±jc`DúÖZùˆ æô­\žA<Ú‘‘AÛDµ…Y‘…YD ¾•˳0"ˆN #²0" #²0"ˆj #‚·q0"ˆU}ë­|DúV.ÏÁˆ VmŒÈÁˆŒÈÁˆ ÆmŒ"ÞÆÃˆ<ŒÈÈ<Œ"^ßÊåyDÇy‘‡yDчyQ€Q€ÄÛ¾•Ë 0"ˆÅ›# 0¢# 0"ˆá›# 0¢#Š0¢#Š0"ˆÌ}+—aDµ7FaDFaDí7FaD F±¿o¡•bxßÊå%Ä÷M‚%Q‚%æ F”ò=¬×[h½æ­ü¯<¬ù¿màß6ðo[ø·-üÛüÛüÛ#üÛ#üÛüÛüÛ3üÛ3üÛþmÿv€;À¿ýyù“kúáO®Í‡?¹Æþìàßr=üÉuôð'×Êß·ç¼u„' ô÷ ýTò–3ò¾8ø7÷'ËF¯>òÖã>oåsö¸‚'Wðä ž\Ókxìì,ëq ¸-àÀÎòUõø¸Gü7ø+Oðä<ùO>ÓÏðä3<¹ƒ'wðäž|'_àÉxrOîáÉ=BžõhA‚…¿ ùË£ƒ'< yÁ#ÄÔGˆGþJ„¿~þ1Á“ žÿùžï üĬÔ'X©O žtyëõá#[Å`ÅýØX~?+h鼕÷ú¬Í?+ø›°Rÿ¬àoºýëö¬Û?kÀÁ*þÓoòòü• ü• âþîÏ[ÖRð7Õï÷¼Hký£áIØWý}Õ½…üMýäòÖkÞOÝåó¢OØÊ5f /$À:úcN²¬ª?°Óøk쬱?öt€VþÀúû™ÿÈüÿ8˜X©`¥þq0¤{yùÈËÿxçAø‚?äy_y5ÿ¬ùOØb þ HO&oísû¿ô'@ÏÂ_ø7è'x°?àÁþÄ}nàÏþ€?û9æðnâþ¼ä­¼/¬¸N­àßryZÓùìvPéÔþJÞ³ª1ÊýKßÒykö a}Éç¬ouy+ÏÈ:ÈžúÖ ´ ×Héï /¯Ìvê/< s­a®5Ì5ø¬NÃ\ƒëÀƒuæØYИÁùXgAcOtOtôàòl­s È<:Z<¤ƒ<¤ƒÌ£ƒ dçòü¬ƒ dȾ•Ï'Ô#ûV¾ ÙÁž¹ƒêdç`>át®s`×,Ù%{˜AsÙSçaÎ —ê —ê¡•æþ]ÁˆV0¢Œh#ZÁˆV0¢Œh#ZÁˆV0¢Œnõ­´>¡•h #ZÈÖ0¢5Œh #ZÈÖ0¢5Œh #ZÈÖ0¢5Œn:ý…›N}+ÑF´m`DÑF´m`DÑF´m`DÑF´m`D[Ñvý­'h=Ck­hí¡u€Ö´ŽÐê õ­hýƒÖ ZŸÐú´ò±?ÀØ`ì0öûŒýÆþc€±?ÀØ`ì0öûÃú/´> õZ'h}BëÐÊgâfâ1?è[OÐz†ÖZ/ÐÚCë­7h¡ÕAëZÿ u‚Ö'´òñ=Áøž`DO0¢'ÑŒè Fô#z‚=Áˆž`DO0¢'ÑŒè Fô#z†=ÈžaDÏ0¢gÑ3ŒèFô #z†=ÈžaDÏ0¢gÑ3ŒèF´ƒíÀw0¾ŒoãÛÁøv0¾ŒoãÛÁøv0¾ŒoãÛÁøv0¾ŒïÆ÷#z½Àˆ^`D/0¢Ñ ŒèFô#z½Àˆ^`D/0¢ÑF´‡íaD{ÑF´‡íaD{ÑF´‡íaD{ÑF´‡íaDpfÚ·NÐÊq ÆwžÿÂç¾µƒÖ ´öÐ:@ë ZGhuÐz‡Ö?h …cÈÇ®aDpçù/Üyî[;h½@k­´Þ u„V­whýƒÖ ZŸÐÊGd`DpæÝ·ž õ ­´^ µ‡ÖZoÐ:B«ƒÖ;´þAë­Ohåã³0>¸GÝ·ž¡µƒÖ ´öÐ:@ë ZGhuÐz‡Ö?h õ ­|DF·ªÿ­꾵ƒÖ ´öÐ:@ë ZGhuÐz‡Ö?h õ ­|DFäaDFäaDFäaDp§­o½Aë­ZïÐú­´>¡•(ÀˆŒ(ÀˆŒ(ÀˆŒî´õ­7h¡ÕAëZÿ u‚Ö'´òEQ„ÁÝó¾µƒÖ ´öÐ:@ë ZGhuÐz‡Ö?h õ ­|D F”Àó%Øç$-Ü`ï[;h½@k­´Þ u„V­wh}@ë´NÐú„Öÿ •ÍÄÔ‰> ôµ ¨}@õçª?p+þîÁ÷-- --›·òû|Ã;–òÖ+ü[ÒóÛ"•|@æñ™Çdk|@®ñ'¶pG¾o)hihh壅Ûôp ãNP?Œr”ÈC> ù€<ä2È<>à”ônÌ÷-- -­||p·~x›OÞ‚Ñ©准ÑBþòYÉd%•|@òyÈœE~Àmú¾¥ ¥¡e •îÝï°É[0Z8 ü00ZÈf> cù€Œå2–ÈQ> Gù€“»¸iß·´4´ ´òÑÂüáí,y F 'iF ™NßÂÛAëZ{h½A+;œ}Àü¾¥ ¥¡e •nïo!É[0v8õúp0vȉúþÛZ/ÐÚCë ZùØáœënï÷-- -­|ìpÏx÷FÞ‚±Ã)Ô‡‡±CöôÒdH!}@Nô9Ñœ4}ÀÍþ¾¥ ¥¡e •8Û#òŒN~>Œ2«¾…ÿ¶ƒÖ ´öÐzƒÖZóÌ0ú–‚–†–V>ÀÞ·`&€ða& #û€Ìê2«Ȭ> —ú€\ê¸Àè[ ZZZùhW0¼ oÁh-ð‘òÑžox†Ó¹3œÎáÌí yÖNÙÎpÊv†S¶3œ²á”í §lgà7žWÐO8s;ÙÛNÒÎpvv†³³3œáìì ggg8;;ÃÙYßÊû¹†~ÂIÚNÒÎp>v†±3œˆáDì 'bg8;ÉØNÄúVÞÏ ôÎÇÎp>v†S¯3œsáœë ç\g8ç:Ã9×ιÎpÎÕ·ò~n¡ŸpÎu†s®3œ^á¼ê çUg8¯:à ÕN¨ÎpBu†3©¾•÷óú gRg8“:ÃIÓΖÎp¶t†³¥3œáüè çGg81ê[y?¡Ÿpbt†£3œáäç '?g8ù9ÃÉÏN~Îpòs†“Ÿ¾•÷ó ú '?g8Ï9à ÎNpÎp‚s†œ3œàœáç '8}+ïÙ3ô NpÎp.s†“˜3œÄœá$æ '1g8‰9ÃIÌNbúVÞ³ô NbÎps†ó•3œ¨œáDå '*g8Q9ÉÊNTÎp¢Ò·ò~¾@?á|å ç+g859Ã9ÉÎIÎpNr†s’3œ“œáœä ç$}+ïçú §&g859ÃYÈN?Îpúq†Ó3œ~œáôã §g8ýè[y?a†Ž3œpœáÜâ Õƒ3œTœá¤â gg88kÿ Üø3œMœálâ 'gØéŸáŒá g g8U8Ã9Âøög`µŸáá çg88Ã>ü çg88à Àjþg`ÊŸ~†€3œœ¡®†]ò*ùg¨äŸ¡v†jý8îg`’Ÿ¡v†Úý*ògصž¡†üjðg¨ÁŸ¡†ü˜ëgà‡Ÿ¡"†ŠüêìgØaž¡²~†Êú*ëg¨¬Ÿ¡²~†Êúøèg`}Ÿ¡Î~†:ûªçgØž¡^~†zùêåg¨—Ÿ¡^~†zùXægàrŸ¡z~†êùjâgØÇ¡ ~†*øªàg¨‚Ÿ¡ ~†*ø¸ãg`hŸ¡î}†º÷ªÙgØs¡~}†úõ*Ög¨XŸ¡b}†õ9g„¿¿øøÅýN·sMóûÚÚªõ¡×·–þ0YË|Xh¹¬e'-­µÜ¤³–‡ó“KY+À¿ÅßÐÊŸLôoŸ›ß«÷ýÃØ2вÐrÐòРЊÐJ×ÖúÏþãð:|Ç»ÿï÷µ¤ûnöõ›ßÿ©&E~ݪþ·ï71…)|<  ‡þk¢s¿nÙ?´QÏÁÍä)ÝÎòP~„+꼚vÞYûëVÄÏ:ŸZ5…ÅýLHHþ׭Οýƒ2n>í¼¥—;¯©ózÚyÕ~]ï¼›ÂÇÊ}>óÊüºñóΫ4ÿÖyýëVçŸï¼¡Î›¼ó—Þ_g¾u^©)|,Äç×ê×­&7sð‚Ù˜ï#ÜRçídæCJ_Ò-c6–¤[ìüÐ{ûëVbÏ¥'?ÿÖùðëV…‡ÎÓŠsÔy7é|´í׊s“ÎS?……q˜yýëV#‡™sðo÷¿netè¼áž:ï§6ŸÌ×Ôùïf£§ð±² 6Ÿ~ÝŠÜ0óf>í¼¥O;¯©ó: óº1êj´á»«LSøX¨oÝjÖùÌ߬.‡ë|øu+kçÿ`¨ó‘:§ 6¦/³‰ßÌ&†)|¬-ç3ïÕ¯[™f^ÍÁÍ·>þºU¢çÍ&QçÓdæÛÑlÒ÷™wSøX*Î;o̯[ÕfÞÌÁ¿Ù¼ûu+,Cç¯z_]?”7üzí}¬³ þ¥ÌåÙÿ4m£MœÂ÷ô+‡ßž¾æ6ü:õ¿$Bß5…ïé׬Ëçë.#é „üÒ¶7Î)|O¿æ…¼“w‰úÙvSøž~Í Q‹ub;§_óBFl¢E:QŒNÔRhÕèh§ð=ýšr—NéD1:Ñ÷éD“N4£}ŸN4éD3:Ñ÷éD“N4£}ŸN4éD3:1÷éÄN £sŸN éÄ0:1÷éÄN £sŸN éÄ0:±÷éÄ’N,£{ŸN,éÄ2:±÷éÄ’N,£{ŸN,éÄ2:q÷éÄ‘N£wŸNéÄ1:q÷éÄ‘N£wŸNéÄ1:ñ÷å]žtâøûò.O:ñŒNÂ}# 4’ÀŒ$Ü7’@# ìH†ÿ[®q沉ÙÓ#sðxßDDšˆÈLD¼o""MDd&"Ý7’D#IÌHÒ}#I4’TÉõËÑï×þ—HHMšÂ÷ô« 䄼ÏÙÓ#³ðW‚¿Î¿m\zw“õñ ßÓ¯Y!—_„ô¿Bš¶õc5ñßÓ¯Y!—ï_„ô¿– ¹Â÷ôkNˆºoºM—b¦ëëëàßÿ–jŒö×íâø}³­h¶3Ûê¾ÙV4ÛŠ™m}ßÒ´€4³€t}iféû,B“EhÆ"tÝ"4cú>‹Ðdš±}ŸEh²ÍX„¹Ï" Y„a,ÂÔ-Â0aî³Ca‹0u‹0ŒE˜û,ÂEÆ"Ì}aÈ" cö>‹°d–±[·ËX„½Ï",Y„e,ÂÞ§RK*µŒJí}*µ¤R˨ÔݧRG*uŒJ]]¥ŽQ©»O¥ŽTꕺú"wÌ"w÷Y„#‹pŒE¸û,‘E8Æ"ü}áÉ"•FRidTïSi$•FF¥é>•&RibTšê*MŒJÓ}*M¤ÒĨ4ÕCqbBqºÏ"YDb,"Ýg‰,"•-âòšòFõOu_Ÿÿ,é/¥Õà­¿Ja¤ï/=ØÖIß3Ò/’~½ö¿$gã½CMz ßÓ¯y!¯$äõ'B^IÈkYÈå³÷!ý/I6Ùÿû ¾§_óB^.øÔç§ðýׯ’NÞ>– ‰j­šÂ÷_¿ŠBî3»·bøº,¿§GfáÇçßWeõ¿D×.ý¾§_!k²Y„iL˜Â÷ôk^™ÝQdvÊ7±USøž~Í yZ¢2z ßÓ¯Y!§¥a¹m¬1Søž~Í Q”y¨’Ù)ÆìT1ó0)]ò‹x+†Ÿ¾¶†IoÌ}é¡ôÆ0é¹/½1”Þ&½1÷¥7†Òä7†ÒqðƦ)|ÿõ«¤“÷…qF7mvÖc(½1\zC5󓚇¡š‡ajæsaXV¦IÁNá{ú5'ÄR¢f¥‰šñÖMáû¯_œ×«ùUj™Uj‹‰šO£YétFarFaéŒÂ2g–²Aû“DÍR6h™DÍR‰Èþ¤Dd©DTòzßH^«B(å´?I9-¥œ–I9-¥œVZ‡2Z©)üé릜_‘eRNK)§xˆÁÜ\ª¥”Ó2)§Ý-\¾¡qmÐSøþë'd³l$λ)\ äQHž/˫िÜ'½˜-’]vHtÙ!1—]vHâËÐÙË]vHÌe‡ô¿…#Áˉ.;$æ²CR …ÄÞ©y5…ïé×w!ëác(ëíìöD©¯”æò½”möoÿ}‡÷O=Nžš y­ ye„¼’ÒH×›¥Bfà3Bò®<¾wï¥éº~(çñ½<]WxÿT÷^ž®ÝÇïÓvÑWÈåk<¼I#뾑òQîJ÷þX‰™ɯïð™‘dBTݺc]ЬK1Ö¥êÖ¥ëRd]б.U·.µ©Ãg„ä]éÞl¿^eýgýÑHŽæ”òSøðÉ„oÓõÕGNY=ü´Dºi”3q ¿~°áÒkö¨{Td!ûû&xàýÏ&x¿h‚uÚà¦ðë ò—J×õµ¨™µ¨i-jf-êú2ÑÌ2Ñ´L4³LtÝ?jÆ?jòšñšÖ¢þ‰©hZ‹º´5§,Z‹ú'kQÓZÔ¥µX‘^[‹šY‹šÖbUÈk]È+#äuöeÃ(dŸ¯ ^ï¦Åý"-â‚×´àõþZ4õo˜ohÁfÁ›ú‚7Ì‚7´à ³àM}ÁfÁZð†Yðfÿ!ã ö ~}ƒlYÈnNHéM—wì‚‘P}ƒW„ë2?1zC®Ë”\—áÌŽ\—ù‰ë2äºLÉuU¤×\—a\—!×UòZòÊy}‘( Ùß§Å«ë2ûhÑÖ‡eœ‡%çaçaë™»e2wK™»e2w[÷PvS‡ÏÉ»RßZf_hi_h™}¡­»A˸AKnÐ2nÐî äæ-¹A»¯™ýNcƒú5÷FÕoB^g߈Bj¾Ö2¾Ö’¯­Œd77Õ«ý¯¹÷>~R 9tûW`ɡےC·œ+¨»T˸TK.•âêþÆ1þÆ‘¿qŒ¿quWàWàÈ8Ƹº+pŒ+pä ã \Ý8Æ8rŽqnÿ!·Uêȸ=+¤¶J³J­RVÈÛÇËìHšÔ^)Ü—·/•„\á×·¿pBxW0}ÅÓ7!¯³¯˜É…+p?qŽ\+¹Ç­Òº+pŒ+pä *Bö÷ ñšø¸ý†èëŽÈ3ŽÈ“#òŒ#òõÄÇ3‰§ÄÇ3‰¯{;¿©Ãg„ä]y•å›ÇåÊáƒï:ùE¯=(ÍcÝ×zÆ×zòµžñµ¾î<<ã<<9Ï8__YžYYžV–gl;Ôm;0¶ȶcÛ¡nÛ±í@¶ÛuÛ›:|FHÞ•ºuƺYW`¬+Ô#y`"y H˜Hö?r‹ä"yسBj‘<0‘2+>î ä¶â#­ø¸g…ÔV|dV|¤Ï ©¯øÈ¬øH+>¾U„ð+>2+>ÒŠÌŠõ™iÅGnÅÿýx˜ÕI²¾½2˜éºÂ‡ÛîåéJu·’·’È­$Æ­¤º[IŒ[IäVãVRÝ­¤M>#$ïJÝ­$Æ­$r+‰q+©^SKLM-QM-1•¨T/w%¦Ü•¨ÜÅ ©¯øÄ¬øD+>1+>Õcbc¢Å˜˜Å˜ê‰9(HtPŠ›ÍïßïëCK¿¾oÁ›ßþâü¾~|~ý‚¿ö¿ª;¸ÿš~aŒáèï…|^#âØ­®m“Üø èo×Ò¯ÅS·yX~Ó¯ªâ¼k| à+9Ü ·§Gô´–ík”o¾Y×}Â9Þ¾‚¶ à}ôòN¼•Ã/ÇË™³ºÂÃ/^?jVȬuضñÖâ i1¼7ÎÔD3däÒûel²r¸ŽM01—>:Ôá×lst¨"øwÛªþÝ6G‡*ƒ³ÍÑ¡Êàßlst¨"øwÛ)o›£Û Úæèv%ðÛÝ®HúwÛÝ®þÝ6»÷ßô«n›¹L9€¯äp×—2 àk9¼Ï¼±ß,€›Æ{ß.€ë&ªèÞÊá¿.o™ŽSxÕ6»w5+dÞ6UŸ¶g ÉÒ‹àJk죑ÃM^r©nåpÀwüí~Ó¯ºmÆÆ$°Í¿ÝJïmÓù¨¾–ÃmŸ«„ðþËÚ¦ÕàÛÒM£‚Féíéƒm:3…Wmóo§f…Ì—nŒ àz| ûhäðÞ6mhQº•Ã{ÛLZÝàÛý˜o¿ê…>,i¾’ÃuhlÌbúZ/€›F;ƒß,€«&ã¾]ïwxà-? ÿP¶º+|ºmb‹CT³BæÕÛöê ¨½îZ‡ú1r¸JýÚwàvÜ6!…\?c¾¹•lbõ½W`\c¾)‚«~oaæÇ|SVFæô·´—ÁõP…µß.‚ûäpì-¯Úæ>õ\1*%xJÍ ™W¯n¬5àz\%lÀûÕ«4N°•Ãût3Eç3ø˜o¿ê~Óäþð•ÞûÍ>£P_/€›Æª¨¾‘ÃÏ—²ljmHW½SÑ(½eàUÛ¼À¿ùMc‹3¤f…Ì;>Õ´–ߘoÊàýVʵhFïýf¿WEévÜ6©÷»|Lš¶¥7Áïcº:üªª7öéP2à+9Üû@¾–ÃÞu†Ò7 à¦ié }WÐVÿåtŸ-+€· à—÷yƒ6z-§5+d~Ÿîúœ ¢-†ÿgû„ÑM†hÀ‡¨š-¬dåð¡0m³\{G[©p+Õ¦,eÛÑVj'ÜJ™¼ª¾£­”Þ=ª,bíh+µî…¢1ß.€÷EÔ8u­~ñ©öü0ü*ÛæŽ¶R;áVJ™Ì¸v´•’À¿6SY`ÚÑVJöR¦EéVÞù~+bºYÇþqÜ ¿$<¼Ën ? ¿Ê¼|xoé׬oýÍÁÇ”zÿ(;ê—øJ6›1(€¯ÀûåLøFÒžàÀ· ¤›áT ¥· ¤SïXÂåÕ;¦ÔS!ó&¨{áQ?Z ¿àM¶á@fô¶ ¾EéVï7\Êú\?­ŸîðÓ3òáWÝ´‡—Äeµ„´Zï·m«¾–õol´à›ða§œ À·‹àF…ðVþBƒŠ{—˜ö˜‘O…Ì×ý<êG/‚7™`³Þ¯]?™`+‡oŒr&Ÿ¡1ö¿fM››ºÃzt=ïù3åÀÿk¢›Â‡§Ò䩬Ìüú›îzü.á–ßëãXH|•D¿8¸Ž,x •ÕohÀ×rxŸUê~|#‡»Æ›¾]w¦ÍvL¯”8ˆà¿†Ã‰lõ¾RâðúÈëGÍ ™µ`×ç~mfCH/÷i±7r¸ê -J·røà:tv¶øúø¼úM¿ê<|«µ_-€‡^¿¥¯Àýõ ô{Ùvom—À£S ¥· ¼juø7 ¶)hO©Y!ã Æ·×Kà^·*܈á^÷y Àí¸mZç@úëoù»Þ¶’¿9fä"xŸrù~sÌÈEð~èýÔ¡ôn›äóÛ%ðL‹ðE·]°¸._%~sÌÈ_%I­í£˜GUÊÈ¥ðÖhX~¯f \Õ¢t+‡›áOYÖóJùëlF^àN˜Æ¼ýU’|¦Æ)\cÞ.‚‡&h\cÞ.‚ûÆY\cÞ.„+m&ß.·­Ç7æí"ø¯Þñaâ0æí5ý¨Y!0æíBxðÀ˜· áÆáóvÜöîQAâðñ·-Ù¹$ú]à‡oOýÊžú³WÙðkñíŽnŒv¢+Ÿ}rÓZ ð•nc£Úì ½££"ø/Û6!+ttcT.樬à×ÑQ<ô©ÕÞ.èü×ú§ðÃð‹×šRªx{“] éèÆ¨ Þ¯¿”¥VÝ•ÁÍðM ´+‡ë>ûlUÊàcrÓ‰nŒ¶½s÷à+9ÜÇhÉ|-‡—6}‹ðÞÛf¢‡_AÛÒ{¼Î JÝí„7F‡OYOáUÛ“›Ntg34ÖZœ!-†ÙvŒ7 ¤Ûá¬'ØÊáCÉ-/wt”ԉ΂ÇÒÇ£¤Nx­N·Þ|-‡üdQúF×jðíx¯·éÔµ :I=¾Á«¶9%u¢{qn¸Oì®Áµ6àf\÷–­P?Vïý¦U‘fHmK•h[ŠI Ѷ”hc4pÎÌ­œ¥ˆ¶¥J´-ÅжѶT‰¶¥Œ"Ú–Q—¼éw;QDÛ’ÁXàk9ÜšÆf—mѶ„ð!ºÅKE´-%%%zcÊÔ2pÁÌ«Yø¼Í§áŠ8óz<6Æ´8v³>\s¾ÝQDÛ’Á‡UÙ6EmK•h[ìÔmKÉh[éRAøJwý64Þ²4E´-¼E1„oÀmÍmªˆ¶%„›&ùÛ=KE´-%¥mÙæv(¬ˆ¶¥˜+ÞŠh[JFÛ2MQ/€ëÌ©näðaa…‰zíxÛû$PïèPe´­o¶9:Tmë›mŽUFœúf›£C•Á¿ÙæèPeðo¶9:T)mkb›c åmst»2ÚÖ7ÛÝ® þÍ6G·+£m}³ÍÑíÊàßlóZüS"îQÐPq5À· àCÕ)€·rø¥´­Ó^µÍëQÉxW¶I©ÅÒ‹àmv°£ˆ¶%„·Mj'Ò­n.ïF¼Á‰¶¥DÔ¥˜†“ð•Þ›¶ËˆSŠh[2¸Wm#v~#‡»Ð¸¶Eé[9|ÈHÌDzËÀÃ?”­nž¶u¡ßdx¢m)óɹFû€CÔbx·º±Ѷ„ÒÛFÛÛU8E´-¡tsq]|Ì7EÔ¥Þ¸¼wà+9|ð›¬cÌ7EðËõö`¾Y÷M;¿•ÿ+2mK oÁ2 àm??VÜŠáÇR>ö1ßQ—z¿U0_Éá½i§àÀ×rxï7ƒMà9¼÷›1£ë)¢m á¾÷iA¼eàUÛœ£m™áD{¢5+¤ä7ûÅ‹3¤Àmc 7 à}¾©5ΕÇW>%ðÚcÒT¢m±L´-%£mõ;UŸ•‰¶%ƒÔ—Í<ѶdðÞ6SÊv#DÛÂûη;¿]¿ðȱó킱_¾§ù ~Ø(†¶¥ˆ¶¥DÌ'7Ð]#Q/€«FÙ‰~ŒnÃð9Zp+‡_x#YX$Ú–qB;<ÀWrøð&7•픉¶%ƒÛ8¤Cà›p×wÞ`ç· à¶÷ YÌ Ú–’Ò¶L“HmK1´-E´-%£m |â„êÕ àývÂj죑Ã{¿iÃnÀ‡3—,a$Ú–’Ó¶n„SE´-ÅÜàWDÛR%Ú–b.×+¢m)÷È }U‰¶%ƒ›á[sYh[2ø…¬~{ň"Ú–’²¾’º]RDÛÃmPz+‡WïXÂåÕ;¦Ô2âÔ@ض¨-†_ð¶E¸Y ½ßpMávtÕë7;·#Ú–*Ѷ*¦=fä"î‘ísbÀWr¸1É©øZױω­øfÜ7ÑG„oÁõà­~)SØ4…WM{ÌÈeÄ©~?«³cY¢m‰á¦5¨^³Þ¦0±+†ÿ·ýùâco‰¶ÅNѶT‰¶¥Ú–"Ú–bh[Šh[ªDÛb—Ѷ”ˆ{¤Ú>ñÍ<Ѷ”õ¥|žmK i[©ÍÞÿ¤ˆ¶%…÷«'ÛtmK 7¶5ØùVÿÕ‡•ô>w™f¢5+dvø›pˆz ¼Ù;vѶDð µÆ&”nåÒûM]²Ù1Ѷ”ˆº”Sk¾’ǃgm¾–ÃýpŸD+€o–Àµ á[9|`(¯Þ2ðªÕÍÓ¶ŒÓ…¨Y!…»ù)¹6\/Çq'Ѷ¤pëÚ‰t+‡_ÞË–\ý-¿b7ÜLÎÞ3£ˆ¶¥„¬/k]„™]Ëá~ણq½näð¯Ã=˜º×íxˆœþÒÛ‰ ýæ+üªf…”8ý–‡¨—ÀsûhÄð¯œEéV.Ý6m›Àov˜ºÃ&¸¦1oqúʉ¶%ƒÇÞ†”w_Ëáýú1­‡!¾oäp?œ…ðíxÔÚ#¼]0u}Ê5ÑÏ»L?jVH!òïêö×KàÎi‹p#†_nåÒmttùú™£m]í\ý®´-ÅжѶT‰¶ÅÞÑ&Ú–qüP3ËÂѶdp×/?••ƒ‰¶%ƒï’J¥oÀÛ~W•ÝÊ#Ú– ~)øe¥p¢m©ŸÐ¶ѶC?PDÛR2âÔPÈvžDÛÂC“TvN´-%e}©pã-*¢mÉà: gA¹~ÆäFFÛ2MëtøJwªÏ­Z ðµnM¿/‹(}³Þ6.µà[9|x ~ƬQDÛRbÚ–jÂ^µÍ1¹é„w6[eÀõxl´vØG³î†+Ÿ8ÁVïmÓe/^UDÛR"î‘W2`›ãQR'¼VçØæx”Ô ßÁ×g•(}#‡÷Š3Îj€oÀã`Ú à­~-ZLáUÛ’dÄ©~Û­]¸^o½Â 6 àÃkcN°•õoBöòQM´-]¢mi&%ÐDÛÒ²ÑÐÜÞª‰¶¥K´-Íж4Ѷt‰¶¥Œ&Ú––Ѷl£²#M´-|xïj¼å›šh[2øp))(„oäðá"Kè5Ѷ´”õe½CxËÀ3¯fá¥hàý-ÔDÛÒRÚVôgÀûLßEœy+‡ëáâ…süêÒt‰¶ÅNѶ´”¶âm'¦‰¶%ƒ]©J_/€ÛÐdŸIÓDے‡·jaç·røåßíå;šh[ZNÛº}@mK3W¼5Ѷ´”¶¥²;ôšh[ZJÛ2mæP‰¶¥¥´-í ÂíøÀ^¸%¢šh[ZJÛšØæèPeÔ¥o¶9:Tü›mŽUŸÚæèP¥¬¯‰mŽUNÛÛ)o›£Û•Ò¶&¶9º])mkb›£Û•Ò¶&¶9º])mkb›×⟖Ҷ†×|%‡¼­à¾–Ãû>¿ÿ¬‰¶¥¥´-—}ØSmKKi[>;´×DÛÒRÚÖðÒ¨)¼j›×⟖Ҷ‚Õàz|xßb 7 àíðv Ô•Ãj|ö¢XM´--¥m%§,ÀWrøå}JÁ|-‡»v¨ü+€oäðÞ6“רùí"xþ>1M´--§m9=…WmóºAÔ2â”ë7ð`\× ¢–Ò¶´¾U.5Ѷ´ôc]­q¨+‡÷¶™²cYM´--£mõû˘I'Ú– ÚË»ò¾–ÃÝe£¾YwýF! ôí¸ò{ËÀÃ?”­®ôµ-oÒí.¨&Ú––§Ìð¶GT¯^×Ï^’«‰¶%ƒÛ~'¦n¬ÖDÛ’Á‡’³ùØÇ|SF]r¡É*Öšh[ZJœ²&[—DÛ’Á/Ü ¾YïVÒàÛEð6ì|ËÀ«¶9KÛ¾(<¥f…”ʮƃqù¦8e‡»<7 ¤ëFÙ‰qY9\»¦Í^R¨‰¶¥e¬Jz(Y|%‡‡~3’ÕŒ5ѶdpoÛ‚ßóMï*õŠK(}»`ì}²¬JoxÕ6çh[±Š—ZmKˈSCÕÖj€ëp—x5Ѷ„pÕÄ~sÌ7Eð>]56æÒǤ©DÛb'˜h[ZFÛo7¾ª&Ú– î‡WXd…O¢mÉà½mEs{¿ƒ&Ú–î†Ï1aç· àçeogàšh[ZNÛŠßà‡á¯5+¤p•粟¸Ã/¶³2Ѷdðáí¬& ÜÊá—÷;ÞŒ4Ѷ´Œ¶¥ýh€¯äðÞ+„övL©‰¶¥¥´­¨o/ÕDÛÒRÚVÈ^ý«‰¶¥¥´­üƒâšh[ú'_ÛÒDÛÒ mKmKKi[)#¶i¢miÙ粆7e§]DÛÒRÚVÊÎé5Ѷ„ðá ÙÊ Ú––Ó¶nwH4Ѷ4sƒ_mK—h[š¹\¯‰¶¥¥´-o³³¢mÉà¹%ûô¶&Ú––Ò¶’u à›ðáÓ·WXh¢mi)mË»„ðvÁØ¿©w,áòêSjqj¸¦ &8¦ÔRÖ—Ï^³¡‰¶¥ÅßúÊ3r¢mÉà* ûé˜Á;Z?ó××*¦=fä2ÚÖð¡1ï¾’ÇïçÚ¬@´-\§>,šðÍxhtHß.€÷›M×j€· Æ>жR˜Â«¦=fä2┾ìá®ÀûÕ›Z0®w³~ùÖN°•ÃUì“Ú”Kco‰¶ÅNѶt‰¶¥Ú–&Ú–fh[šh[ºDÛb—Ѷ´˜¶•½}ZmKKi[&»¯‰¶¥…Ä©R¶!&Ú–n­ò(}+‡쇼LF´-!¼ñ±ÍŠÜDÛÒÌbM´--ä]©¤&Bôx W:ˆ¶¥…ëò:N¬ÃÊáÃ+/ó“M¢mi!m«ß/Ýîæk¢mÉàC-"ºðµÞÛ¦UÁ|³n[o<À·Kà:ª„oxÕêæi[}Ú¡p‚Õ¬’mº0™`½Þ£"Àî—BvŠ@´--¤m™ü•šh[Â+vÃËÅ`eŒ¹¶eúÍ1#Ò¶´B¿9fäRÚ–6¥oŒ}Ø·`Ú‹n'öËýæ+üªf…”­c"D/Ûh-Z‡YocœX‡•ÃÍÀ*Ûì(0Éh[“ îDiÌÛ¥´-ïµøJ=:û˜&Ú–Ò¶Œi­øFÞ¶`JßÊá=>dŸ›ÓDÛÒRÚVj³J ѶªúQ³BJ¼«, ÑKàÖ[ cÞ.üÚVÊßo§‰¶¥…´­>kP m v.‰~WÚ–fh[šh[ºDÛbïhmKËh[¦qyÑ‹h[2¸î¶d‡xDÛ’Á/ïSN(}³>¼³6«ÉmK WyRK´--¥mé&+FmK3ôM´-Ý ïlšüHh[ZÊúryÍ™h[ZJÛ Öã Y9\‡{ä3ø˜ÜÈh[ýúËh[šh[2¸ÓÃ@ ðµnm¿­‹(}³®†¯¸j€oÀ>¤Voåð/ã SxÕ6ÇäFÄ|²Ã¦=«ZmKKY_*9œ`³Þo›3Ú–&Ú– ®c¿µq¹mŽGIRÚV¿¡_Éᮟºërßã9| 4æ¶I´-#¥mi<:T÷è›mŽUúµ­‰mŽUúµ­‰mŽUÊ»šØæèP¥_ÛšØæèPå´­6NáUÛÝ®”w5±ÍÑíÊàßlst»á«&¶9º])mkb›×⟑q‚jtŠ_ÉáÃ;Þqê®Å?#¥mµ lóZü3RÞULQ|»Þ¶§®]0uCùÜÆ)¼j›×⟑Ҷ”r8Áz|ørªÅ 6 àmïzN°•Ãê·§`›× ¢‘qzÛŒ· s†h[2¸‹Ãg_=À×rxo›&) ð͸ïÓ¡Ûñ ѶŒôk[ƵoLÝ×ÑÐ^µÍëÑHyWÖi¢ÀûÐà&ê5 àmc•R·rxo›6û4­!Ú–‘}ïjx™BøJ ky®M´-|˜ùt;O7DÛ°¾ Ѷ„ð¶‰Î!¼eà‡áÊVW¢m©5QÍ )ÖìíFˆ!Ú– >pL@¸Y¿ÜP·r¸î=—ÊF¢mï*ôp“¾’Ãû„ÄfLaC´-!\ûwðÍx¿¬Ý¾•ÇM¬÷8ö–Wms†¶õŸ¾èp†Ô¬ÒF[ç®Àcã£U7 à¾ñj· àíð‰Ü6Ç|SFœò1!|%‡;3¼§Ö|-‡Dý6€oäð¡hZ”¾] } %9œº–Wms޶å³o3¢móIMýæ˜oJ‰SZM&؈á_Ec…låÒû…ÕjOð˜4•h[ìmËȸGÑ6y®M´-Ün7s|DÛ2â¯m©_ÕmËHyWÚܪõ†h[Fúµ-•}ƒÏmËüäk[†h[†¡m¢m1mKeqh[RøÀNAý1|øÚ–‰¸•ÃûŒ"ºÛE/C´-#£m™Æd/¾7DÛ’Á]j\^˜&Ú–ÞÇô6aç7rx?uºUß.€70޽•ÃáGµ Ѷ CÛ2DÛ2;á0ŒŸÑ à“Ѷ„p58.œ!+‡÷_›½»×mËHi[}X5SøaøUž`¢m™mË0—ë ѶŒŒ¶¥‡szð•núÝŒ¾½\ÜmKï3¾Jß,€‡Êí¾]÷Sá­þ]½c —Wï˜RKi[)ûtƒ!Ú–n½E¸Y7Ï^@cˆ¶%ƒ«¡P•‰¶eJ´­Ši¹Œ¶5ЮœøJ7Ãé„ _/€·³ ¥oäða/”]5DÛÃÛìc6†h[FJÛêÓ&7…WM{ÌÈeÄ©ÐØì{d†h[FÊúJœó˜‘Ëà¶IÉâ Y9\¥mž›ö{K´-vꈶeJ´-Ãж Ѷ CÛ2DÛ2%Ú»üˆ¶e„¼+¯SfÁDÛ’Á‡Ï ªcÔmKïS›ü5(†h[2øå›(Ù Ú–nm0ØùVÿ¯i}~Yƒh[†¹Blˆ¶e„Ä)c¦úÑKàÚd51DÛ2²¯mÙÞ~³b ѶdÒMB^b'Ú–Q—T;$Þ à+9ü×p?ðv÷ÛmË?ÖÕ*“í׈¶e„¼+çó`Dے­IÖ¼eàU«›¥mý> }T³B WûR°®´-)\E;±#‡»>«‹ áVïÓŸŸ<mËyWqâ7ÇŒ\ú¹,~sÌÈ¥Ä)5v~#‡»>íhÁo޹ÞÇd« J_t;ÑMüæ+üªf…ÔÛÛ–ßñª—ÀƒõgȈáëj-J·r馱ÝnG©;ü`‚;Q`óv!ï*E `ÌÛ…¼+‚_ËáÃk§ð>|/NEðíxïÚJot¾O÷üõeˆ¶UÕšRü^\öµGC´-)¼_>-ÎÃ/ÄE§Qº•K7õXs´­«K¢ß•¶eÚ–!Ú–)ѶØ;ÚDÛ22ÚÖð‚º¬äF´-Ü Gð7Ú–!Ú– n/—úPúf|¨·gGˆDÛ2Òo}s#~¢m™N|c43.¢m†~`ˆ¶e:á•Ï~kŽ3¤ÀVk‹ú1r¸ MÐgÈÊá:5&?C'Ú–‘Ѷïª#ÀWr¸ëó~ï,À×r¸uƒi£ô͸n\º½ÍÙmËHY_!¿¶E´-#¥m™Æ»)¼j›cr#¥m¥ŒTnˆ¶%†+ËoLnd´­>vkp+‡ë>sÈÞnˆ¶ed´­áµ¯møJ΂b²_Ëá—»º ¥oÀ/|;ð­>\ ʸ †h[FJÛ>U6…Wms% ð͸GéÛp7¼0ÇÞÊá×Úå^µÍkñÏŠ¿¶¥³dŒh[Vüµ-í"ÀÍøPû˜Ì•ǯmiŸÛæuƒh…´-Ý ã»neðác[>"|½>|m«µß,èüð¹-‡cßÊáÃ×¶ìmgo‰¶e|m+NáUÛ¼n­ük[· ?–h[Vþµ-ãnÀ‡¯mip+‡_¾¶u»2`‰¶ee´­Kq)|%‡Æ•]3³DÛ’Á‡ê…½Ý³DÛ’Áû¼CéÛðØ¤¬bm‰¶eK´-ËÜŽ·ó´-Ó«'ûÖ·%Ú–•§†ïÐßΔ-Ѷ¬ô{WÖÞ®¡[¢m á_§Ž·røpÏR»\ú˜oJi[1ÊDÛ²RÚVÌNL-Ѷdð·#Jß,Þ6!Y ðí"¸Ê–h[¶D󻯾m«×nþ"EK´-+¥m¹±z¼m[ p³ÞÇ¥6x€Ûð¶I:æcóMm«OWQú˜oʘO©QÙ+F-Ѷ¬w¥ú©OßÈáƒãË ,DÛÃUrà-¯Úæm«ßËè<ã#Ú–1ŸÇgªW/€÷{Õì:‹%Ú–n‡/h¢z­Þ›¶ÍÞf‰¶eK´-v‚‰¶ee_Û2½[¸qu-Ѷ¬”¶ÕÆÛõ\K´-+¥mùìØmËJyWùç~,Ѷ„ðÞççn—h[VJÛbÖ~~ñúQ³BŠŸËÊ^"i‰¶%„·Mlo¯q°DÛ²RÚ$ËDÛ²RÚ–÷·Ã2K´-+¥mÅ\:Ѷ¬”¶•R–MmËJi[Á+ìüFï§Îå§)DÛ²RÚ–Ï ÓDÛ²;ñVêööBK´-Ëж,Ѷ¬”¶å³7`Z¢mY)m+xp³®ðÔƒh[VJÛ‚Ѷ¬œ¶•eDÛ²Ì ~K´-[¢mYær½%Ú–•Ò¶BöK´-+¥mùv¢mÉàÃ%¨À7 àaø´3Jß.€÷ cˆ(½•ÿ«w,áòêSjqjøî‹I× ànxyu¸YÒ–„Ò­®bãSÈ¥w´~毯UL{ÌÈe´­á±ò_ÉáÃ[6óÈO´-+¥m%ïÀ7røp%e #ѶÄpk4Â[9üÒ¶,Ѷ*¦=fäRÚVô …èEpÓÞnšX¢mYéǺŒq àVWixÏEnÚcì-Ѷة#Ú–-Ѷ,CÛ²DÛ² mËmË–h[ìò#Ú–ò®‚rÙѶ¬ð{WÚg_ɵDÛ²Bâ”im¦¢mÉà¶_¼!;="Ú–Cö‘PK´-+¤mi?ºvþ2ÍD?jVH‰?l–úmK ÷!xœ`³nlFœ²DÛ²BÚ– Îç3t¥mYá×¶|›½IÄmË yW±‹àk9|HÛAøf \ESw¥mIá­7­xËÀ«V7ÿµ­~W°jVHé“*VgyѶ¤ð¨uBõš%pÛN;oåðáýÚõóú[~Å.4Úàâ3ré÷®úÍ1#—§úÍ1#½‹-Ž}»î|¿¹ðv¢óÓ©“øÍ1#ò®lõê%p½Ç 6bø€oÃd‚­\úðæyô›&!m '¸¦1oÒ¶Ú”PÈûJއU‹ðµîú!FXcÞ.„keµøv \©ìmÁ–h[2øÃñÚdêdúQ³BJ|S*àµ>\»j-N°Ã¼ËÞ¶m‰¶e…´-g ,€m«ŸGIô»Ò¶,CÛ²DÛ²%Ú{G›h[VFÛÒMÈËÁDÛ’Á]¿qÙ!8Ѷ¬˜w•}†ØmËJ?—•“Ê-Ѷdðá£3êöA$K´-+¥m©&;Ÿ&Ú–eè–h[Vú¹,¸ºD´-1¼µ gÈ,€÷*yœ!+‡ïZqYA–h[VFÛÒýúk#ÀWrøpT¡¬øZ·ºIÉ£ôÍxÛïËZûVïmÓf/³DÛ²RÚ–jLœÂ«¶9&7ðUû>p½>¼b1;!Ú–î†w$j€[9|¨y•ëg\¶Jß.€ŸðKà­~ÙñY;…Wms¼,ÕÞÞ|∶%„ë>ÉËG´-!|ø^ï-‹vDÛrñ'oŸÂÃ/^?jVH‰³ïº;¢m9)ï*ElÀC¿2&Ò­~!¨G˜¡Ñ¡Š¸Gßmst¨á»&¶9:ÔðÝ ÛêF˜ÃOlst¨ésÑ6G‡*¥mMls ¤¼mŽnw#|ùÁÄ6G·+å]Mlst»a?±ÍÑíJà3¶y-þ9÷È9¼EøJw¶ Æ€¯åp;¼/Îh€oÀMßùÛ™²#Ú–>|Ä ¼•Ã/wdoI¸#ÚVÅ6¯Å?'#Nõë'Þn¼9¢m9)ï*fÕ!G´-¼·Í˜4Z‡Ã/7Ì3î‘#Ú–qzÛ ¤_7ˆ2¸s¯'|-‡ÛËëÀ7 à¦ñ­Žß.€ë&8S×ÊáÛôa ¯Úæuƒè¤Ä©ÔBh¸nÅðÖëp#‡›Ë¹J·bøÅ6ýíýéŽh[NFÛrU7¶¬#Ú– ~ù¡M¾Yïv«À· àºÑÌfÌ7K´­ŠmÎm+™èp†Ô¬â;³ï‚8¢m9é×¶\šL°‘ÇW}ùÉ[9\_Šò¹mŽIS‰¶ÅN0Ѷœ”¶Õ§Úà+9|Èvý䈶头-c|y5K‰¶%„÷ë2û6¦#Ú–Û‰·Ræü0ü*Û&ѶœŒ8u©²E€k1ü«LТ~Œ\úp™&Òíé}ÒÕÞÞþ鈶头-Õ˜oðÃð«<ÁDÛr%Ú–c.×;¢m9m«í×OVe#Ú– >äÄííþ³#Ú–“ò®’¹]BtDÛrRÞU¿× ß.€»Þ·g'rDÛrRÚÖD½c —Wï˜RKyWÊœ!½n‡oÞ ~̸n¢S8CVW}ä&×OGëgþúZÅ´ÇŒ\FÛ>½ ¦=fä2Þ•éÇn À×rø°ÕÍ>Êàˆ¶%„ûáê¹øvÜdTlG´-'¥m©&…)¼jÚcF.%N…Ø¢~ô"¸Î# Ѷ„pÓXãÀ­®†·çÄ|†ÆØ[¢m±SG´-W¢m9†¶åˆ¶åÚ–#Ú–+ѶØåG´-'üÚ–2&ÛpmË i[¾ÍóB¢m9éç²’J(}³®¿ÝÍwDے•É^Z儴-•l«¦ð¹Ë4ý¨Y!¥Û×FOô£ÅðËõk3™!#—n/_¹Å²r¸iœ‹YÞN´-'¥m¹ì‚Ÿ#Ú–“Ò¶¬ËJEDÛrRÚ–‰^|³®U^K Ú–Þ&gÞ2ðªÕÍÓ¶‚Í‹ÜDÛrRÚVÈމꈶ%…G—} ÑmK ·F¹p+‡/í˘OŽh[NHÛh#_Éá~ø¾pV'&Ú–²¾t4 ¥oäðásY!€i¿n—ÀûtÓƒâ–ÜNü¯é¦USxÝ‚_Õ¬ÝÕ¹‰zõ¸wÉ‚q½š%p£Æ²rø°á×à7; L"ÚÖt‚;Q`óv!mËLƼ]HÛŠ­ÄaÌÛ¥ŸËr>¡ô͸I-øö1o—²¾¢Kà­þ_ÓÚ‰~ÞeúQ³B îQÅü•h[Nü¹¬à=À\z¿üT«q†¬n†×õ˜§m]ì\ý®´-ÇжѶ\‰¶ÅÞÑ&Ú–“Ѷ†øìr Ѷdp§“ŸàmËIi[Vg»:¢m9)m+'†:¢mÉà—[ÖYô#Ú–ëÄ7FµŸÂÃ/^?jVHé¾ Ùæh["ø×‹[oìG´-'¥m¹ì­±Žh[NJÛòæö]G´-'¥mõi¡øJwÃÍšˆðµn‡ï¶(ðÍxÛXŸtmËIi[>d¡h[®ßmÃ^µÍ1¹‘Ò¶bFúwDÛÃsJ®#Ú–“Ò¶Œ³ àV¿|¾=æ¶9%Éh[mã²oË8¢m9)mKe|HG´-'¥my<À7røðâUt*ãQ’®5˜öXÎ’Ó¶¼™Â«¶9%IyWÖÛp½>§B¸Y·Më"­>¼~-Ýn>y¢mùmË3)'Ú–nŒÚÞ¸ìÞ )Ѷ8¥¾‘Ãm¿°2"«'Ú–—rÎtH(½eà‚™W³ðÒѾ±·‹žh[BøðþŠ3 àºQÙ»{<Ѷ¼”õüm鉶åK´-vꈶ奴-—ÝÑöDÛòRÚ–¶™ÙmËKi[­3(}³®áÓ€žh[^JÛ2þv+ÂmËËi[ÊOá‡á¯5+¤xŸ+{q—'Ú–—Ò¶‚¾å žh[B¸ïw)™S!Ú– >œ-†6ŸàÑ¡Ji[Ûª”¶5±ÍÑ¡Ji[Ûª”¶5±ÍÑ¡Ji[Ûªœ¶¥ü^µÍÑíJi[ÛÝ®”¶5±ÍÑíÊàßlst»á'o'¶y-þymËÔ˜ð•î†â{k¾–ÃíðÒ³ˆÒ7 àzø ‘øV¿Ø¶Æ©kÀÛœH—Øæµøç¥´-݃õDÛòRÚ–u'ØÈáfxÏyÀ!Z9|¸`ž½ ×mËKi[­nÀWrøp¿;OD‰¶åÅß» ¥oÀM£¬õß.€o0÷à­~¹kxûrª'ÚVÅ6¯D/å]Y àºAÂ[(my¢mÉàÃï4‘nåðá æúvªë‰¶åEÔ¥òCøJ÷v¸ð ¾–Ã{Ó6yL'Ú–—~ë+foñDÛ’ÁmjR¾Ï Ú–/Ѷp©[ìüv\õ^Á€· ¼j›ó´-­4XǘoŠ˜O—Ú'p-†_ðíí²“'Ú–Lúðš€ì3öžh[2øð–€ìÓžh[^D]Šz8O_Éá}J ²{bžh[2¸nyFìüf|8ÏÐà[9| ·dT_O´-_¢mUls޶u¹ ç#<¥f…”¸-Ê:„ëðv ;€9ÜU[‹c¾)ýÖ—òǤ©DÛb'˜h[^FÛWï{K´-vꈶåK´-Ïж<Ѷ|ÓÞ€m^i[R¸1Z€oÁÛ¼ŽB´-_¢mU¬n޶õßðÖJŸà)5+¤DNQÙY=Ѷ¼˜8 ª×Èá¦IZkì¼]o]‹¶ùú[~ÅnÆ6_WrøŒm¾®åðÛ|Ý,³Í×í"øÔ6—ÝNüfu¯¿9fäRâÔÔ6_õø7Û|5røŒm¾Ú%ð©mv˜D´­éw¢À4æíBÚ–n-$cÞ.¤mù~€¯åðáU-,€1oó®T²ß.«~ýE€·rø¯áR„QS¸@?jVH)qwÂmËK¿¶¬ö7Kà^9XcÞ.ýÚVL°æi[;—D¿+mË3´-O´-_¢m±w´‰¶å¥´­6d5g¢my)mKÛlgC´-/¥mŸ%mË‹i[yÅh[^úµ­¨,޽•Ã/ûÞlÛL´-ÏÐ<Ѷ¼˜¶¥= Ñ à½ÌX­žh[^JÛ²!¢~¬>|à>e%¢mymë›mŽÉ”¶5±Í1¹‘Ò¶&¶9&7RÚÖÄ6ÇäFJÛšØæ˜Ü, m©)¼j›crÓ ¯|NlsLn¤´­‰mŽÉ”¶5±Í1¹‘Ò¶&¶9%Ii[у~Æ£$)mËf/"ñDÛòRÚV´Ö|#‡÷ŠSQaç· àq Û€·rø%õðf ¯Úæx”$¥mÁ ¢my)m+æ×ꈶ奴-m&C´røPÕ·¤)m+”h[I Ѷ‚pc¤Œºåíh[¡DÛ m+m+”h[aÀ¢m…µøeÝ·3Ú@´­ ý\V›mIѶ„ð!bY”¾‘ÿ^×¾] }xYwDxËÀ3¯fáå×pß^ˆ¶%‚_ßÃínHM›ý¢m áÃk¸C.ýêÒB‰¶ÅNѶ‚”¶eB¦w¢mÉà_×VÀ×røðõ{;¸DÛ RÚV¿d4À· :?ÜíØùvüòî„0…†_¼~Ô¬2À -‡ Ìí€,m+Hi[!cð¢m1m+ûtc ÚVÒ¶&¶9:Tué›mŽUFœúf›£C•Ò¶&¶9:TYç¿ÙæèPå´-¦ðªmŽnWJÛšØæèv¥´­‰mŽnWJÛšØæèvÅ´-´Íkñ/Hi[.¹ð•>Ôí’u ÚVÒ¶B´ØùÍé½qF0®kñ/HY_­‰àíéjŒ™Â«¶y-þ1m«õ8D½Þïä 6røåÍ -J·rø—K¿nƒŒ¶å›äa]^7ˆ2ø…·uc¼¢m1mËìüf|ø2GHß.€noÒùvÁØÛÔ~ ¯ÚæuƒÄ´-c°z|ø2‡G¸‘Ã/_æ€ÅÝ )mK§,Y&ÚVñ®.ïœAøJÿzçŒøzüòΙðþõ΄oÁuöé†@´­P¢mæv|˜§m©>2¨lI´­ a>]]N°ÿÞ9“e=DÛ RÞU›ñ‰Ѷdð¯wÎäcóÍ­ðÝ#6ð•>|{!8ðõøðá•6|³>|Ô$súDÛ’ÁûeB«Þ2ðªmÎѶ|cbVü DÛ ÒÏeõgH/€Ç~iÜÞoˆ¶%„¦íÀíxÛ§«*·Í1ß”ñ®†uç¾’Ãj’Iàk9¼Êý^(|³®†ÏV(€oåðá@Ã8ð–Wms޶eš˜ÐoŽù¦„ùtÙÍ8‡p-†!{\ Ú–>|—:â[9|¸ÞîCÞù1i*Ñ¶Ø &ÚVÒ¶bÌöBDÛ Ò¯m{;DÛ RÚVÊ>ʈ¶¤´-“½\<m+H¿¶eTDx+‡ÿº¼=;Lá‡á¯5+¤DÛÒQcõx;œ…"ÜÈáv8hnåð>!ÑÙ·¾Ѷ‚Œ{䇥ᾒÃ2>ðµÞ=d¯. DÛ ÒÏeåŸDÛ‘Tˆ¶ä_ÛÊ2 ¢m†¶ˆ¶¤¼«6ûfM Ú–>T ²Ѷ‚ôk[Ú´(ÝÊáñ…¹½<4m+Èi[™qm+07øѶB‰¶˜Ëõh[Aö¹¬Ôûöä¾Z×ë À×røð~TmÀ7 à®÷­YÖC´-1\ÅIç[9ü»zÇ.¯Þ1¥–ó®T¸^WÑà›ð^½&à[9\õêuÐùŽÖÏüõµŠi¹Œ¶Õ6Ið•n†—ÊiðµÞof”Ž à›ð~+f&ðí¸kbÆ´DÛ RÚVÿÿã^5í1#—ò®Lö"Ò@´-!ÜŸUH7 à}ìS¸•ÃFbJù±·DÛb§Žh[¡DÛ m+m+0´­@´­P¢m±Ëh[AÄ=òÞìšL ÚVÒ¶´I·ï¢m)流n¾‘Ç£E3o—À£ x+‡ÿ×=fyѶs…8m+‰SÁ©Iõ¸wn7KàF¥¬ÞA´­ ¤m—²´…h[Aøµ­ ³7U¢má×¶RÛ¶_Ëá~ R{„o–Àû-G–ömK W&/¢m+”h[«›ýÚ–jZã<¥f…̪×÷¾9{ãg ÚV~m+Ù‰t³nýt‚­n{ý˜ð×ßò+v¡iÛ~sÌÈ¥´­dnïZ DÛ Òï])ô\cF.„;•õѶ¤ð>ã _t;Ñ;ô›cX¬Xð«šRò\&ûx| Ú–®mt7røPçUà7ÇŒ\JÛòüfGIDÛšNp' LcÞ.â]j°Æ¼]HÛ²Á@â0æíBâ” ¸Æ¼]Ê»ÒÉ |»ÞêÞÊáÿ _„@ý¼Ëô£f… Û­Â>ê%ðhZ‡p³n#.€1oÒ¶úÕ `ž¶u±sIô»Ò¶CÛ DÛ %Ú{G›h[AJÛr>+Jm+Hi[Þfwu‰¶¤´­ÐfU¢m)m+åÕd¢mÉà^i”Þ.€·ò¬›ÂÃ/^?jVHéZ1Ùú!ÚVÒ¶œÉ²G¢m)m+8‡p+‡ëáM<ÙÅ)¢m)mK{•¾’ÇOŸ´­øZ¾—À:ÆäFJÛ ÚF€oåð^ï}dÀ©kåð_ø%¸@´­ŠmŽÉ”¶¥¬Á Ö à±ß—ip³îšÞíâ[9|ø\ö©×@´­ ¥m›ÀWr¸MÞÔ|½>¼Ìy€oäðAqí0ˆ¶¤´-c£x+‡ÿ5>MáUÛ’$̧¯wíG¢Åð m+{F ÚVÒ¶TPàV×¾qáVÏDÛŠ%ÚVdR‚H´­(ýÚVÈÞG‰¶K´­Èж"Ѷb‰¶L$ÚV”Q—|c²70E¢mÉà: À× à}Jž@F¢m á}ÈÉ’H´-ü×ðâ<‡Ò[.˜y5 /ÿ¸ö¶™‰DÛÃ[±óf|`/œ:+‡+×$u«~G¢mÅm‹:¢mEm+ ßMÖ_ÉáÎ6Þ'„¯åp;ÔoÔ˜H´-!Ü ¯¦‰ß.€ëa ŽðVÿºëe§ðÃð‹×šRºX೯úD¢mE)ë+$…p#‡÷‘l8 ¸•Ã{—fÍm‹‰¶e´­o¶9:TÙ×¶¾ÙæèPe¼«o¶9:ÔôÕ h›£C•²¾&¶9:T)mkb›c åmst»2ÚÖ7ÛÝ®”õ5±ÍÑíÊh[ßlst»2ÚÖ7Û¼ÿ¢Œ¶ÕÃ5×µø'ƒ;߇[…ðµnÃð­/ð>Pý­6‰¶%”Þ›–ØùvôKõ1NáUÛ¼ÿ¢Œwuù ªW/‚·IY€9| à;“nÀÒ˜Ë;Ý Fm«ßÀG°ÍëQ>­á=Â×røðö<À7 àÃGøv|¸HÔ€·røÅ6'3/±Íë1n„¯ˆ7­‹×bøÅ8íí®T$Ú–LúPÖó1Ü.€·Ã5ÚÛ m+J©K®½½ß!mK®G”¾–Ã^Oön‹H´-¼ÿÃë"¾] Ýß^ðoøaø‡²ÕÍÓ¶lcÆ|ŠDÛŠ2æÓÅ·ãëEpcÎYï3Šì ‘h[2¸òCJOð˜oʨKª q*mKWòö5§H´-!|¸ËãQúfÜ4)9ûvѶ¤Ò>¥x»~¹¾ª§ðÃð‹×šRâ]¥6`µnS³k2‘h[QJÛÒ!¡t+‡„ƔՈ¶w­T«nÇü‘h[2ø`\íí¤/mKxä6ó›DÛŠÒÏeYí°óÛðá~Æíza$ÚV”m+ ·DÛŠ m+m+Š?—Õ¶¨^½®š˜½b$m+Ji[ù+"Ѷ¢ôk[*û˜Z$ÚV”Ó¶2Ó&ÚVdnðG¢mÅm+2—ë#Ѷ¢ìk[ªßÍgL´-Ü8«ŽDÛ’Áõ𞌠¾Yïw‹&Ûm+Ji[IMÆÞÊáßÕ;–pyõŽ)µôk[6ûm$ÚV”Ò¶bRØG³>|Ù<‹üDÛŠRÚVòYý™h[±DÛª˜ö˜‘K¿¶e£ò_ÉáCFž}‡.mK2òì%‘h[Qúµ-“}K*m+JY_ýÐÞÊá_××Ô^5í1#—~mKG‡}Ô àÃý3‹p³>¼Â%€[9|ÈÈ£ËM{Œ½%Ú;uDÛŠ%ÚVdh[‘h[‘¡mE¢mÅm‹]~DÛŠBÚ–IêFl‹DÛŠBÚVÛºÛ«"Ѷ¢¶ÕF5oäðÓ·KàÞ{…ðVÿ5¼ò܃Ï]¦™èGÍ )~ïÊ¢—À{çjn–À• ýX9Ü4Ú˜ì.Ѷ¢ºúMøJw}dHÙò#ÚV~ïʇ6ÛÑmK 7!»þ‰¶%ƒ÷x'oxÕê _Û²áÆyŽDÛŠRæSk\¸^W*z¢‘Ç »²Øy+‡ëásYY­‡h[Qøµ­ øÍ1#Ò¶œBÇ7fäBâ”÷fß,·Kà:jƒðE·3FOáu ~U³BJÆ•‚Ã>êEðü3ª‘h[QÈ»ŠÊMôcåp}¡Då~³£À$ûÚÖd‚;Q`óv!mË9LƼ]HÛRghÌÛ¥¼«¤&ðÞï·¼rß.‡Éúóvá×¶Ô$qóöš~Ô¬a; y»îz‡p³®m˜èÇÊáÃÉ>&…¯m v.‰~WÚVdh[‘h[±DÛbïhm+Êh[ª±ÙgT#Ѷdp›†cN„¯ÀnÉDúF^®²’Ѷ„ðØÄ6 ÝDÛŠRÚÖðZÕ)ü0üâõ£f…”Š’}r“®ÀC?ÁYe€h[B¸EþѶdð¡°l“m«íP«¾’Ã{Ûtf_/€«&eœ³H´­(å]éü^Ѷ„ð8l™ÞÊá—ÿùM¢mUlsLn:áÍ öQ/€û&¹€p³Þ;÷4ѕÇ/€GI"î‘>—Žoé2*¼•Ã/©GV¥&ÚVÅ6Ç£$)ï*äW¢m‰ámöùöH´-!Ü G}¨+‡ëáM$·£¤D´­T¢m%&%HDÛJ¢Ñ¯¦MúFêKDÛJ%ÚVbh[‰h[©DÛJ &m+‰¨Kap»·SžD´-Ü÷{ÒìÍu‰h[2øå ¥oäp§z½+ ðíxÛ´ÙWðѶR‰¶Uy5 /Ý h³p›ˆ¶%„‰NÂΛð!S¹o'¢mÉàf(e€â®.-•h[ìÔm+I¿¶åã-KKDÛ’Á‡— ‡[®ˆ¶%ƒÛ~›}•$m+IyW:ÞŽ¾Ѷ„p5|X@¼•Ã!5&m+1W¼Ѷ’”wå3wžˆ¶%‚_.iG3däÒ‡<É&œ!+‡ï·71—>:Té×¶&¶9:Tmë›mŽUFœúf›£C•ò®&¶9:Ôp 0±ÍÑ¡þ„¶•ˆ¶U±ÍÑíJyWÛÝ®>c›£Û•~mkb›£Û•~mkb›×â_’ѶBÓkð•îzãRF|-‡¯ 7á›p3œûaç· àz¸­äÞÊá¿¶•ˆ¶U±Íkñ/I¿¶•B–mK WZcÞïr”ƒÕ{-þ%é×¶|ßqÝ &m+GÚà+9¼·Mç£øZ·¡Ï$Â7røpÙ°ÕàÛÒM£‚FéíéHÛJD󻯾uƒ˜6»†ýV\/€¡Ac>”w²ïê$¢m%é×¶’Î6 DÛJ"êR¾ês+$¢mÉàý&)ÅÛ5ÚD´-Ü ðÛ-éD´-!¼Ÿùì#‡‰h[Bx;ÀÀ[~þ¡lu¥¯mÙ`o‡ö‰h[IÄ|¾ÅžQåѶ„ð¡vèP?f|ÐG¸•ÃÍO9|Ì7EÔ¥0|÷8*€¯äpš ½øZï§.Z‡ð͸ëó™ ¾]Þàœpì-¯ÚæmkøÂ¨38D5+¤ÀW5MòØG-†è6ß§mKÞfæ-—]ï+š>æ›"êRTÑ­øJ÷}@{€¯åð>%È™‰h[Bxðìí,4m+I?fÌím‰h[©D󻯾mkˆÉÖ£~Ô¬·Å(CÔrøð.µì=‰h[Bx¿ø­ÆÎ[9|x ]9|LšJ´-v‚‰¶•¤´-“}¶"m+‰i[ÙA{"ÚV’~m+§¬%¢m%1m+Þˆ‰h[B¸Î-À[9|˜½Æù)ü0üâõ£f…i[ùV—h[IJÛJ­Æ>špßä/ßMDÛJÒ¯mµêvÌŸˆ¶•v­T›²m$Ѷ’ôk[F„¯åp;ÜŽÏ2}¢m%)ï*æ~“h[Iüµ­8™ºVÿõõvó)ü0ü*Û&Ѷ’”¶¥LVã#Ú–~ýÞV¸‘Ã/¯ÿlQº•w~øÚVÌΈ¶•ä´­,äm+17øѶR‰¶•˜Ëõ‰h[IÆ»òCâ`¾’ÇÍföYøD´­$%N™`À7røð.Ãp»“ˆ¶%”nJoHÿ¦Þ±„Ë«wL©¥ß»ê÷è-†_ð&Kˆ¶%”Þ6Á·(ÝÊáÊ7}Ê–ë§£õ3}­bÚcF.ã]õ‘Wßî˜&¢m ájÈøÀ×rø@)Ì^|Ÿˆ¶%„¯ŸIàÛEp£Bx+‡_ÒmTܻĴnj\Lœ2õ£ÁóWM$¢m áà h&låðá4Ù{¿ѶR‰¶ÅNѶR‰¶•ÚV"ÚVbh[‰h[©DÛb—Ѷ’ˆ{”šÖ›,õ%ÚV’²¾¼ÍÒJ¢mÉà—¯ueUP¢m%!ë+ë±óÛ%ð U׈¶%ì|㔉ßàs—i&úQ³B ßòmÌnÃmK ·)¿ÎB´-)¼MÙ‚Ѷ’¶•¼ËŽçˆ¶•dÔ¥Ô¯ ¾’ÃCcMÔàk9|xLö=˜D´-aç‡I ð­ÞÛ&$µDÛJ%ÚVÅêf¿¶Õ¸ÐZ O©Y!%ÛôÙ»D´-üòú)×¢u˜%Ò•MgÈÊáv œjûëoù»8œ€€ß3ráǺtJà7ÇŒ\vÁ¯OÙ‚ÇÎoäp7pÎv~»îC ŽoáíDëÍwxÝ‚_Õ¬‚u¸œ°ˆ¶%…[ë5¸žW³Þ:~sÌÈ_Eû3|*)_X¦îðƒ îDiÌÛEÜ£8\:0æíBÖ—ò¸Æ¼]Æ|ò}Þ `ÌÛ…¬/[…ß.;Ÿp‚ßÛï“&ó.КR²`‡îqÌÛ…p“¿ß.m+I¿õåqŒy»~á=zXs´­«K¢ß•¶•ÚV"ÚV*ѶØ;ÚDÛJ2ÚÖ媯øJ·±ßógç,DÛJÂï]©F{”¾‘ÃûM»Ï¾2ˆ¶%„‡&Æ,+%ÚV’Ò¶Ts{cn"ÚVbè‰h[IÊ»RÙ«¨Ѷ„pßô¦inÀÍðþAÔ•Ãõå]ùù ÉìsYi(˜[€¯äp;¼¾08€¯åð_—[c à9üòFã,©%Ú–šàœt˜ñjÙÃÇïõW¡í@¿¾ÏÐðÔŽžÚ1O½ÐS/ÌS{zjÏ<õFO½•ŸºÞµ<Я٧®)Ñ~Í>ÕÑß꘿õAO}”ŸR4«Š™UE³ª˜YU4«Š™UE³ª˜YU4«Š™UE³ª˜YU4«Š™UE³ª˜YU4«Š™UM³ª™YÕ4«š™UM³ª™YÕ4«š™UM³ª™YÕ4«š™UM³ª™YÕ4«š™UM³ª™Y54«†™UC³j˜Y54«†™UC³j˜Y54«†™UC³j˜Y54«†™UC³j˜Y54«†™UK³j™Yµ4«–™UK³j™Yµ4«–™UK³j™Yµ4«–™UK³j™Yµ4«–™UK³j™Yu4«Ž™U·~ §¸¿µ£§vÌS/ôÔ óÔžžÚ3O½ÑSå¹w4÷Ž™{Gsw4÷Ž™{Gs÷4÷ž™{Osï×ÜßÚÑS;æ©zê…yjOOí™§Þè©òÜ{š{Ï̽§¹÷ÌÜ{š{Ï̽§¹÷ÌÜšûÀÌ} Y ̬šÕÀÌj Y ̬šÕÀÌj Y ̬šÕÀÌj Y ̬šÕÀÌj¤Y̬F²è¸æþÖŽžÚ1O½ÐS/ÌS{zjÏ<õFO½1Oý¥§þ–Ÿ" EFC‘4 EÒPd4IC‘ÑP" %FC‰æ>1sŸhî3÷‰æ>1sŸhî3÷‰f51³šhV3«‰f51³šhVSqVëßëçõ¦ùúµÉŸÞœÇGXøãþøøû¼ô_Mòi|„…ÏJ—Â?JÒ];ÿÁÀÿ•àQ¹ñ^è¼ þ¿zçÿÇÀÏõ™?³ðêÌ—ájýt•®JV×?¯ðÇŸÀŸëÒŸYxU:?ÌÇ? ÇGxWï|Ç«çàïóÒozWÌŠS´`UÉlxøGIúhóŠY°j}ªwþÄ«çàÿ«w¾¼`5-]Ò»fl^Ó’Ñ%½óðçºôg^•ÎÁóðÛ’ÑÌ’Ñ´d˜Îw,¼Úyþ1/ý¦wÍ­&³aàe³1¤8S»afÞâLiì<ü0¿)Î0Š3¤8¦ó ¯vžƒÌK¿Í¼agHq ¼¬8KëÝ–Æn™ki½ÛÒØyxW—Þ±ðªtþ>/ýæi-&,E[rÔ<ü£$}Tœeôn)Ê0?±ðjç9øÿêç¬î\ïü™…W;_†;²yW²:Ç­#›w%«ãáÏuéÏ,¼*ƒæá7WéWéhÁ2ïXxµóüc^úÍê³d-W²:ÇØ¼£%ãJVÇÃÿWï|yÉx»/Á=3vOÒxYz 題ô@ÒxYz¤%KV›äçcIï‘qÔ‘ÆKÌØ#íßciÿ™ x$£e:bàŸuéŸ üõ±sŠ;×;_vÔ‰ôžJzOŒÞ9+Þ1ð÷yø­ó‰1›Df“JS—³I¤wFú‰ÿ¯.ý ü\—^TÜæ÷æñup•߯Ê4m«ÆGªðþWñjéa£êB#D‘ÅÑu!š¢Iˆf„˜ºÃ1$Ä0Bl]ˆe„Xb!®.Ä1B qŒ_â!ž„xFH¨ Œ@B#$Ö…DFH$!‘’êB#$‘ò=ïC§6ïsBTÛX;>RBðþ¾D5j¼övyj÷0;’_ºq!xÿkò–‡áÝZÙS¯¿›ÂKKµDÈÞÿBBé0’”=õçïœÿ†·I„\àý/¸k]ÿ©á|!óÖƒ³){jÖºþSëÌ$Bæ­+çòéšµ®AˆédÞºp$»‡‚u /š±®áEo#ÃùÿîV +»‚ƒ¾mͺ¾vdaßàU!ߥh$øŒïj}>Þ‚ï² )ø®Û{Ô.O|—ޤ`]©ßCxyªà»|cDHÁwÁH^¬ËÌ»úÞuµÉNá3+>ïÊëï‚u ¯˜š±®&¥ÔÚ)¼*¤à ûØf~ͺ¾ ì^2o]öé/)|ÆwÙl5½þž·®‹¯—)ù.rŬ+4ÚH„”|W>’?ç­kȈæc|¿˜Í>®IWþü-$w%/Ü„ÕSxUH!¹s}v6·û5…W…dïVÒ¯ù´Íš)¼*¤+­“Iáßó.gGÆå©‚u©~ÙI„ÌZ×$‘è ‘ñ—mÜlš:è$MáÓ‘LºÒ•¶® ¾`]ÉOáU!ëê|š·.z5ß ^R°®H‘ñ›u¥0…W…äðVù9Å»›0…W…Ì[×ðVõK ÿf]Ø•÷Ç¢uÙT÷]WøŒ ç]y,ZרxÎw]áU!EëjuÝw]áU!Eë2¡î»®ðª‚ué~êçÝʯïðªBøí½œþUu}W8/D×+šÙ˜jªHh¦"¡ë‰Š«â5S‘ÐõŠDEÈUñš©HèzE¢"äªxÍT$t½"QrU¼f*º^‘¨¹ú.ÍT$t½"¡™Š„¦Š„f¶¯º^‘À§Ö… ]¯HT„Ì[ø]¯HT„Ì[ìãu½"Q2o]P‘ÐõŠDEȼuáHê ÍT$4U$4³}ÕõŠ„f*š*!µŠ„>ã»²Š„®W$*B ¾+ßÇëzE¢"¤`]yEB×+!ß#©W$4S‘ÐT‘ÐÌöU×+š©HhªHT„Ô*š©HhªHT„Ô*øŒïÊöñº^‘¨)ù®¬"¡ë‰Š’ïÊGR¯Hh&«×T‘ÐÌöU×+šÉê5U$*Bj Ídõš*!µŠ„f²zM‰ŠZEBÿžwåi¹®W$*Bf­k’HÔ+š©HhªHhfûªë ÍT$4U$*Bj ÍT$4U$*Bj ÍT$4U$*Bj ÍT$4U$*Bj ü›uaWê ÖwQEBsÓzE‚õ]T‘¨©U$XßE‰ŠZE‚õ]T‘¨©U$4S‘ÐT‘¨©U$X×G Nˆ©W$ ³15T‘0LEÂÔ+!WŦ"aꉊ«â S‘0õŠDEÈUñ†©H˜zE¢"äªxÃT$L½"Qrõ]†©H˜zEÂ0 C Ãl_M½"!O­ +¦^‘¨™·.ð ¦^‘¨™·.ØÇ›zE¢"dÞº "aꉊyë‘Ô+†©HªHfûjê ÃT$ U$*Bj |Æwe S¯HT„|W¾7õŠDEHÁºòŠ„©W$*B ¾ FR¯H¦"a¨"a˜í«©W$ S‘0T‘¨©U$ S‘0T‘¨©U$$ðß•íãM½"QRò]YEÂÔ+!%ß•¤^‘0LVo¨"a˜í«©W$ “ÕªHT„Ô*†Éê U$*Bj Ãdõ†*!µŠ„þ=ïÊÓrS¯HT„ÌZ×$‘¨W$ S‘0T‘0ÌöÕÔ+†©HªHT„Ô*†©HªHT„Ô*†©HªHT„Ô*†©HªHT„Ô*ø7ë®Ô+¬ï¢Š„á6¦õŠ뻨"QR«H°¾‹*!µŠ뻨"QR«H¦"a¨"QR«H°®*œ[¯HXfcj©"a™Š„­W$*B®Š·LEÂÖ+!WÅ[¦"a뉊«â-S‘°õŠDEÈUñ–©HØzE¢"äê»,S‘°õŠ„e*–*–Ù¾ÚzEBŸZV$l½"Q2o]àl½"Q2o]°·õŠDEȼuAEÂÖ+!óÖ…#©W$,S‘°T‘°ÌöÕÖ+–©HXªHT„Ô*øŒïÊ*¶^‘¨)ø®|o뉊‚uå [¯HT„|Œ¤^‘°LEÂREÂ2ÛW[¯HX¦"a©"QR«HX¦"a©"QR«HHà3¾+ÛÇÛzE¢"¤ä»²Š„­W$*BJ¾+I½"a™¬ÞREÂ2ÛW[¯HX&«·T‘¨©U$,“Õ[ªHT„Ô*–Éê-U$*Bj ü{Þ•§å¶^‘¨™µ®I"Q¯HX¦"a©"a™í«­W$,S‘°T‘¨©U$,S‘°T‘¨©U$,S‘°T‘¨©U$,S‘°T‘¨©U$$ðoÖ…]©W$XßE ËmLë ÖwQE¢"¤V‘`}U$*Bj ÖwQE¢"¤V‘°LEÂRE¢"¤V‘`]U$8!®^‘pÌÆÔQEÂ1 W¯HT„\„«W$*B®ŠwLEÂÕ+!WÅ;¦"áꉊ«âS‘põŠDEÈÕw9¦"áê ÇT$U$³}uõŠ„>µ.¬H¸zE¢"dÞºÀ/¸zE¢"dÞº`ïꉊy낊„«W$*Bæ­ GR¯H8¦"á¨"á˜í««W$S‘pT‘¨©U$$ðß•U$\½"QRð]ù>ÞÕ+!ëÊ+®^‘¨)ø.I½"ᘊ„£Š„c¶¯®^‘pLEÂQE¢"¤V‘pLEÂQE¢"¤V‘Àg|W¶wõŠDEHÉwe W¯HT„”|W>’zEÂ1Y½£Š„c¶¯®^‘pLVï¨"QR«H8&«wT‘¨©U$“Õ;ªHT„Ô*ø÷¼+OË]½"Q2k]“D¢^‘pLEÂQEÂ1ÛWW¯H8¦"á¨"QR«H8¦"á¨"QR«H8¦"á¨"QR«H8¦"á¨"QR«HHà߬ »R¯H°¾‹*ŽÛ˜Ö+¬ï¢ŠDEH­"Áú.ªHT„Ô*¬ï¢ŠDEH­"ᘊ„£ŠDEH­"Áº>ªHpB|½"ᙩ§Š„g*¾^‘¨¹*Þ3 _¯HT„\„¯W$*B®Š÷LEÂ×+!WÅ{¦"á뉊«ïòLEÂ×+ž©HxªHxfûêë |j]X‘ðõŠDEȼu_ðõŠDEȼuÁ>Þ×+!óÖ _¯HT„Ì[ޤ^‘ðLEÂSEÂ3ÛW_¯Hx¦"á©"QR«HHà3¾+«HøzE¢"¤à»ò}¼¯W$*B Ö•W$|½"QRð]0’zEÂ3 O Ïl_}½"ᙊ„§ŠDEH­"ᙊ„§ŠDEH­"!Ïø®lï뉊’ïÊ*¾^‘¨)ù®|$õŠ„g²zO Ïl_}½"ᙬÞSE¢"¤V‘ðLVï©"QR«Hx&«÷T‘¨©U$$ðïyWž–ûzE¢"dÖº&‰D½"ᙊ„§Š„g¶¯¾^‘ðLEÂSE¢"¤V‘ðLEÂSE¢"¤V‘ðLEÂSE¢"¤V‘ðLEÂSE¢"¤V‘À¿Yv¥^‘`}U$<·1­W$XßE‰ŠZE‚õ]T‘¨©U$XßE‰ŠZEÂ3 O‰ŠZE‚u}T‘à„„zE"0Ó@‰ÀT$B½"QrU|`*¡^‘¨¹*>0‰P¯HT„\˜ŠD¨W$*B®ŠLE"Ô+!WߘŠD¨W$S‘T‘Ìö5Ô+øÔº°"ꉊyë¿ê‰Šyë‚}|¨W$*Bæ­ *¡^‘¨™·.I½"˜ŠD ŠD`¶¯¡^‘LE"PE¢"¤V‘Àg|WV‘õŠDEHÁwåûøP¯HT„¬+¯H„zE¢"¤à»`$õŠD`**Ù¾†zE"0‰@‰ŠZE"0‰@‰ŠZEBŸñ]Ù>>Ô+!%ß•U$B½"QRò]ùHê‰Àdõ*Ù¾†zE"0Y} ŠDEH­"˜¬>PE¢"¤V‘LV¨"QR«HHàßó®<-õŠDEȬuM‰zE"0‰@‰Àl_C½"˜ŠD ŠDEH­"˜ŠD ŠDEH­"˜ŠD ŠDEH­"˜ŠD ŠDEH­"!³.ìJ½"Áú.ªHncZ¯H°¾‹*!µŠ뻨"QR«H°¾‹*!µŠD`**!µŠëú¨"Áùû{ý´¾Œ·ÿõ{öKËÃ#,üØ”žº>rüöwoðçõî .Áw,|_ƒïYø±ç: é{„«/ý 0Sw é‘ôËß½Á»ºâ:FzG3¿û|ìüñ'ð÷ùÎÓGª‡GXølçåðÙÎKáÿÖ/WøËì‡Ù‡GXxAº ~ªO݉…WÇÎÁ?ëcÿdáoWøÛÏàÕ©ãàçºÙœYøüzë3_†¯ÈQ¯Jë}Å8ê9êUÉQ¯_·"G½*¹Êã¨W䍸ž…kp®ó’^pÔ+ÆQ¯ÈQ¯JŽzÅ8ê9jFq#½£™ßý >vþøøû|çoF»b\åŠõª´âjðÙÎKᣣ^•œÕŠñ´+rÔ«’·áá§úÔXxuìü³>öOþv…¿ý ^:~®›Í™…ϯw1¼:óeøšõº´Þ׌£^“£^—õšñukrÔë’«\3ŽzMŽšïYø±ç: éG½fõšõºä¨×Œ£^“£f×1Ò;šùÝÏàcç?¿Ïwþf´kÆU®ÉQ¯K+®Ÿí¼>:êuÉY­O»&G½.y~ªO݉…WÇÎÁ?ëcÿdáoWøÛÏàÕ©ãàçºÙœYøüzë3_†oÈQoJë}Ã8ê 9êMÉQo_·!G½)¹Ê ã¨7䍸ž…kp®ó’^pÔÆQoÈQoJŽzÃ8ê 9jFq#½£™ßý >vþøøû|çoF»a\å†õ¦´âjðÙÎKᣣޔœÕ†ñ´rÔ›’·áá§úÔXxuìü³>öOþv…¿ý ^:~®›Í™…ϯw1¼:óeø–õ¶´Þ·Œ£Þ’£Þ–õ–ñu[rÔÛ’«Ü2ŽzKŽšïYø±ç: éG½eõ–õ¶ä¨·Œ£Þ’£f×1Ò;šùÝÏàcç?¿Ïwþf´[ÆUnÉQoK+®Ÿí¼þ±~¸Âñl°qaû /H—ÁÇ0±-¹Ê-ãç·&¶%_ÇÃOuÅXxuæ9øg}ìŸ,üí û¼:uüu³ù ¯š ?×—Ì™…Ïû:1¼ª÷2ü‚ÔCÉ×=0Aê‚ÔC)H=0~þ‚ÔC)L<0Aê‚ß³ðc Îuþ@Ò Aê R¤JAê R¤ÅuŒôŽf~÷3øØùãOàïó¿í&(H=”V\ >Ûy)| R%oóÀD™ R%oÃÃÇ õPrÔL”y  õPò´<üTW܉…WgžƒÖÇþÉÂß®ð·ŸÁ«SÇÁÿW7›ÿ±ðªÙðð¿WøßŸÀÏõwfáó®R ¯šMþH1î±ä*™7À·WøöÛå(1üõáÂ!˜R eà{~¬Á¹ÎHz!>2ô‘éc)>2ô‘)c#½«[G^³ŽŽÔ»ûYÇ:þþ>?C·å÷ÈÄË^¡:üÛ ]¤çOÍμ³3$…Aù±˜™¨úHAù±Yxø©®Ÿ ¯ê§¯éçTŸ`NÈg½ŸUøLû Οªj‘òv…¿ý ^5~®/€3 Ÿ÷ÁbxU½eøEè§’~bBìϧRð|bâÏϧRøzb‚çO¾gáÇœëü¤‚ç<Ÿ(x>•‚ç<Ÿ(x2ŠëéÍüîgð±óÇŸÀßç;3Ú'Æé?QÈy*­¸|¶óRøržJÎꉉOržJÞ†‡ŸêSwbáÕ±sðÏúØ?YøÛþö3xuê8ø¹n6g>¿ÞÅðêÌ—áÏ䨟Këý™qÔÏ䨟KŽú™ñuÏ䨟K®ò™qÔÏ䍸ž…kp®ó’^pÔÏŒ£~&Gý\rÔÏŒ£~&GÍ(®c¤w4ó»ŸÁÇΟïüÍhŸWùLŽú¹´âjðÙÎKᣣ~.9«gÆÓ>“£~.y~ªO݉…WÇÎÁ?ëcÿdáoWøÛÏàÕ©ãàçºÙœYøüzë3_†ïÈQïJë}Ç8êÕ¼v¥ý–ÎW5v v¥h°cꎢÁ®äwL4ØQ4`à{~¬Á¹ÎHz!ì˜h°£h°+Eƒ v ëèé]Ý:êðšut¤ÞÝÏú8ÎÐñ'ð÷ùº-¿ãôwTóbf¨çk*;Šk»’ƒª ™!)|Œk»’oß1iGqmWrÎ<üT×ω…WõS‡×ôsªO0'ä³ÞÇÏ*œ¯yí(B3Zä…¼]áo?ƒW€ƒŸë àÌÂç}°^UoþBú¥äƒ_˜ûBÁó¥<_˜øóBÁó¥¾^˜àùBÁ“ïYø±ç: é…àùÂÏ ž/¥àùÂÏ žŒâ:FzG3¿û|ìüñ'ð÷ùÎߌö…qú/r^J+®Ÿí¼>†œ—’³zabÆ …œ—’·áá§úÔXxuìü³>öOþv…¿ý ^:~®›Í™…ϯw1¼:óeøžõ¾´Þ÷Œ£Þ“£Þ—õžñu{rÔû’«Ü3ŽzOŽšïYø±ç: éG½gõžõ¾ä¨÷Œ£Þ“£f×1Ò;šùÝÏàcç?¿Ïwþf´{ÆUîÉQïK+®Ÿí¼>:ê}ÉYíO»'G½/y~ªO݉…WÇÎÁ?ëcÿdáoWøÛÏàÕ©ãàçºÙœYøüzë3_†Ҧaúd÷)ÚÔ}Ò®ŒòÉ‘ìÊ…Uò\Š 9ŠBŽ*…ÅxmE!G•œ¾bBŽ¢ÃÀ÷,üXƒs?ôBÈQLÈQrT)ä(&ä( 9Œâ:FzG3¿û|ìüñ'ð÷ùÎß–Ÿbœ¾¢£J¾£Ÿí¼>†Ur»Š‰ŠBŽ*ùM~ªO݉…WÇÎÁ?ëcÿdáoWøÛÏàÕ©ãàçºÙœYøüzë3_†krÔº´Þ5ã¨59j]rÔšñušµ.¹JÍ8jMŽšïYø±ç: éG­G­ÉQë’£ÖŒ£Öä¨ÅuŒôŽf~÷3øØùãOàïó¿­f\¥&G­K+®Ÿí¼>:j]rVšñ´šµ.y~ªO݉…WÇÎÁ?ëcÿdáoWøÛÏàÕ©ãàçºÙœYøüzë3_†rÔ¦´Þ 㨠‡›RÖ/ó'ž†¢)EÃ8TCÑÀ”ü±a¢¡hÀÀ÷,üXƒs?ôB40L40 L)&ŠŒutŒô®nuxÍ::Rïîg}gèøøûü Ý–Ÿaœ¾¡ópf†êp~kn(®™’ƒª ™!)|Œk¦äÛ ˜ Å5SrÎ<üT×ω…WõS‡×ôsªO0'ä³ÞÇÏ*œ¯¼ŠÐŒy!oWøÛÏàU#ààçú8³ðy,†WÕ[†[ŠÐ¶äƒ-b-O[ ž–‰?–‚§-…/ËOKÁ“ïYø±ç: é…ài™ài)xÚRð´Lð´<ÅuŒôŽf~÷3øØùãOàïó¿­eœ¾¥cK+®Ÿí¼>†[rV–‰–BŽ-y~ªO݉…WÇÎÁ?ëcÿdáoWøÛÏàÕ©ãàçºÙœYøüzë3_†;rÔ®´Þã¨9jWrÔŽñu޵+¹JÇ8jGŽšïYø±ç: éGíGíÈQ»’£vŒ£vä¨ÅuŒôŽf~÷3øØùãOàïó¿­c\¥#GíJ+®Ÿí¼>:jWrVŽñ´Žµ+y~ªO݉…WÇÎÁ?ëcÿdáoWøÛÏàÕ©ãàçºÙœYøüzë3_†{rÔ¾´Þ=ã¨=9j_rÔžñužµ/¹JÏ8jOŽšïYø±ç: éGíGíÉQû’£öŒ£öä¨ÅuŒôŽf~÷3øØùãOàïó¿­g\¥'GíK+®Ÿí¼>:j_rVžñ´žµ/y~ªO݉…WÇÎÁ?ëcÿdáoWøÛÏàÕ©ãàçºÙœYøüzë3_†rÔ¡´Þã¨9êPrÔñuu(¹ÊÀ8ê@ŽšïYø±ç: éGGÈQ‡’£Œ£ä¨ÅuŒôŽf~÷3øØùãOàïó¿m`\e GJ+®Ÿí¼>:êPrVñ´u(y~ªO݉…WÇÎÁ?ëcÿdáoWøÛÏàÕ©ãàçºÙœYøüzë3_†GrÔ±´Þ#ã¨#9êXrÔ‘ñu‘u,¹ÊÈ8êHŽšïYø±ç: éGGÉQÇ’£ŽŒ£Žä¨ÅuŒôŽf~÷3øØùãOàïó¿md\e$GK+®Ÿí¼>:êXrV‘ñ´‘u,y~ªO݉…WÇÎÁ?ëcÿdáoWøÛÏàÕ©ãàçºÙœYøüzë3_†'rÔ©´Þã¨]÷I¥£f œ¿Ð‘(¤R4HŒCM RÉ'&$Š |ÏÂ58×ùI/DƒÄDƒDÑ •¢Ab¢A¢hÀXGÇHïêÖQ‡×¬£#õî~ÖÇq†Ž?¿ÏÏÐmù%Æé'ºîÃÌPÎ_'I×RÉAÕ„ÌÎ>¾>•^ç˜×¸'z |*½Î›‡Q5•"KbÂb¢¨šJ¡‡ŸêÖqbáUë¨ÃkÖqª«—òYïãgÎ_6J”0Zä…¼]áo?ƒW€ƒÿ¯¾þÇ« €ƒŸë‹ÿÌÂçã^5®"üü»ü«æë×jÖ9T៷zÿØ?dÜÈå©cSú[×GŠšà5!Ïõ‘<3#yž‰jmlþÔ8’矌äyv$ß…¤šÄ I!ÉA4’ë:ùd„HëŠ+£^ÈQ ä\×É™" ¬+ ¬ŒNx!õÀº¦Àº.9È5X×XãVÖX×¥ÀºfÂÑš+/ä¹>’gf$ϳ#Q¾qÁåO#yþÉHžgGò]Hª I¬$r ‘D#Àº¦ÀÊÌvÇÌv'²›Žúxü™£HÈ8ÛÝOf»›í©÷ù麭å5óÖXã_×X×%‡QrùWÉè_×LÌ[S` LÌ[S`]—œxMÈQ äT×ɉréäT× /D¢“ϺN>!Ÿó®O7ÁÇü©ªNx!Gs]'gFÈy~$®QQåOUu 9V…l(°nJrÃÖ Vϸ• ÖM)°n˜p´¡ÀÊ y®ä™ÉóìH¢UùSãHž2’çÙ‘|’jB+$ „h$ÑH °n(°2³Ý1³Ý‰ì¦£>&ä(2Îv÷“Ùîfg{*ä}~ºnkyÃļ VÏø× ÖMÉaÔ„Bþ•F2ú× ó6X=ó6X7%'^r9Õurb„œD:9Õu ‘èä³®“OFÈgÁõõ#äOUu 9 „œë:93BÎ…‘cTþTU'¼cUÈ–ë¶ä ·L`ÝŠë–ë¶X·L8ÚŠë–+3’gf$’Àº¥Àº-Å<~$’Àº¥ÀÊI¬$r ‘D#Àº¥ÀÊÌvÇÌv'²›Žúxü™£HÈ8ÛÝOf[X·X·%‡±ebÞVX·X·%‡QrùWÉè_·LÌÛŠë–ë¶äÄkBŽ!§ºNNŒ“H'§ºNx!|ÖuòÉ‘Ö-VF'¼£@ȹ®“3#DX·XðBêõëCÉA>0õkdÜÊÖ‡R`}`ÂÑV^Ès}$ÏÌHžgGbšà”ÊŸGòü“‘<ÏŽä»T’X!I ä@#9ˆFõ+3Û3ÛÈn:êãñgBŽ"!ãlw?™ínv¶§BÞç§ë¶–˜˜÷@52þõëCÉaÔ„Bþ•F2ú×&æ=P`LÌ{ ÀúPrâ5!GS]''FÈI¤“S]'¼‰N>ë:ùd„|ÎŽD71&—?UÕ /ä(r®ëäÌ9œ¸5„Tu 9V…R`MŒ[y¤ÀúX ¬L8z¤ÀÊ y®ä™ÉóìHš`œÖùSãHž2’çÙ‘|’jB+$ „h$ÑH °>R`ef»cf»ÙMG}<þLÈQ$dœíî'³ÝÍÎöTÈûütÝÖò#ó)°&Æ¿>R`},9Œš£@È¿ÒHFÿúÈļG ¬‰‰yXKN¼&ä(rªëäÄ9‰trªë„"ÑÉg]'ŸŒÏy×ç¼7>ªª^ÈQ ä\×É™rž‰ï7“!ªª^ȱ*ä‰ÂÑSÉA>1áèIŽž(=•"ÅŽžDáè‰Â#$±B’@ÈFrÂÑ…#f¶;f¶%áè‰ÂÑS)Õ„EBÆÙî~2Û’pôDáè©´Ìž˜Hñ$ GOŽžJˬ&ä(ò¯4’Ñ+=1‘âIŽž(=•\_MÈQ äT×ɉréäT× /D¢“ϺN>!’pôDáˆÑ /ä(r®ëäÌ‘„£' GŒNx!õpôLáè¹ä Ÿ™pôLáè7n‹ÛFµ:êØ”þÖõ‘r8z¦pT’jB+$ „h$ÑH =S8bf»cf»›íÿ&#é¨ÇŸ 9Š„Œ³Ýýd¶»ÙÙž yŸŸ®Û xf"Å3…£ßŒWz¦pô\Zf5!G¥‘Œ^陉ÏŽ~3‘â™ÂÑsÉõÕ„BNuœ!'‘NNuðB$:ù¬ëä“ò9;å]þTU'¼£@ȹ®“3#ä!’—ì)°2:á…BÎuœ!’—ì)°2:á…Ô_F (°ª’ƒTL`U2U)d*&Ð( †ŒôgFú3Iþ™ôTƒ'~ é‘tMŠB3öŽ{GÒ?ƒcï~2ö÷ùÎßlS1>\QP%Óæá§ºô ¯Jçàçºô3 ¯J/Ã5-X]2Í,XM V—¬f–Œ¦ËHf¤?“ôçŸIO5xbà’~I‡«iÁ2cw$ýø3ø8öî'cŸïüÍê4³â4-X]2Z~ªK?±ðªt~®K?³ðªô2ÜЂ5%³1Ì‚5´u5LânhY›Ò²6ÌÂ2´uå…<×GòÌŒäyv$XI5ä"Lió#yžÉw!©&$±B’@ÈFrÜ!wÃÌvÇÌv'²›Žúxü™£HÈ8ÛÝOf»›í©÷ù麭RÃx(C[WÃì` ¹ASr5!GS}$'FÈI4’S}$¼ÉHÎõ‘pžó<;, rÏÌHx!ǪKNÜ–£eœ¸%'n¶äÄmɉ[ÆõYrâ¼çúHž™‘<ÏŽÄ76%•?5Žäù'#yžÉw!©&$±B’@ÈFrœ¸%'ÎÌvÇÌv'²›Žúxü™£HÈ8ÛÝOf»›í©÷ù麭eËøWKNÜ2^É’·%‡Qr9ÕGrb„œD#9ÕG ‘Œä\É™ržIï^¶ùSÕ‘ðBŽU!Žœ¸+-FÇ8q'ÊÄ9qWrâŽq}N”‰;râÌHž™‘H2qGNÜ•ü+?I&îȉ3B+$ „h$ÑHÀ‰;râÌlwÌlw"»é¨ÇŸ 9Š„Œ³Ýýd¶%™¸#'îJÃ1þÕ‰2qGNÜ•FMÈQ ä_i$ãY‚cÎw"æ|ÇÑ!’+XÔ„BNuœ!'‘NNuðB$:ù¬ëä“ò9;¼8áè‰Ñ /ä(r®ëäÌ‘ìŽVF'¼úîÈS`õ%é™ÀêE»#OÕ—«g‘íŽ<Vf$ÏÌH$»#OÕ—b?ÉîÈS`e„$VH9ÐH¢‘@`õX™Ùî˜ÙîDvÓQ?r g»ûÉlKvGž«/9 ÏÄŸù~»¨$ðùÔ(5þºd*ðY«³½æ¬Dú§*Ì|T£Þ?9ø¼âW©$ð’âBðø¼¯3ýz£Õ•m~½þP?ïÕWçûGø©dóÆÛ+üÄÁKYekDpSÐÞj ¼äiÁKžÖ…$ÏÚü`72é¡à*CM],d•ášÏóðÏß…±{ã®ðO¾ªìã*ðuuêXø¦0ušŒ–…o K&(ÑØg£L£B42øŒôØ oEÒua;àhêJù¼O"ÅÙRfåEðR>ß¶¢ÎûRbæES Þ&ʬ.V½ /åó©õU¸Z?Í.Xã¿àß^„ðù|¾ßˆ]£L¾.-§%ðM!¾‡VIà³ Öé&DQçfáÃ&4Ià³pÛ¤%ðYw‘úÓ|Þl´s¸ž“®†ÝD”Áçý¼²"¸™•®)%®Âç3ÓŠlÞÎJ7ýÔ|6HõÞJd6³¾î‚Áç÷q½·‘IŸßÇ¥¦õ¢ Ii’y›ù}œiLtþY•ŒVæáó¾N¹(€æ+'©OÈÇwàà«‚»°¤8>ëi½ê§ÎHೞևÆ9\–Œ‹Bø¼ÙØÖJàóÎÊeŠ«Àg·À½£)Ί1i ¼°ï—{Àç7à±1NIॠ¸5¢©›ß€÷ŽÚ‹¦.Ò¥EzŸu6ö»ÉØ»ßoÓ’Ÿï8øª wK!’…¯Kz§ÍÂ7…Ã…DcgáÛ‚â¬I((ÎjÑÔ=òºVi ü©PdVÉJàÏ¥´Py |WJ ¨ó/Õ´…ïgá¾1I4ó󎺥cÜ*|>¯³A$½”UÚ`eðB^gDÒËY¥“Áçëu-9j^Ï*+ðyé©­+Ôç“lìóYeèwR"Å…BRjS’Àã|J¿`“Ѹ.­÷"馸R¸-™Á]¡ðbc¬Âuqûlûåm4³Ò…í¿i{O›$p]ášÓVáóc×m`n ù¼1AŸsÞ6×»<üùwáHË\ ­šÙöÿ6_1S”ÓVàëÂ&Ô]ÝE¾)¤F)‰¤ÏWÌr³aá…]äx^Ϧ…>ö™•’ÀgÓÂÐ6Έ¦î¹Z$}vÁk&9¼pŒÛz \ÏK×62ø¼§mÉÛ°ðú‚­Àg+fÃE+ Üü|ð"ŹB€Ï&*p_Ðʉà¡^4öùÔh¸ú šùT RV2u…’W¿p£§=pðÒáB²^/.8#‚Ï»Ê~Å)Qç·…âÃÍÛ°ð‡BµÐ‘ôÇ<9‘ô§‚ŸÏe*ðçÂØP˜`á»Â¸õVŸßAÇF%ï ð”‚~(Z]MÝë,|ðÓNÿS R,¼T!÷:Èàó3ŸDF« [`ãµ >_psZduf>DºF&Ý\¥ ¢™Ÿßþ§áÙ2xáž•uÞ¶ã]â ÜàQ‹_òŠ2_ {+³ùÒfD¹úÔ™ÒºO®›ÃìeLi Üg×ý{n r{MÈ+p[°ºtõó¸+Ì|{­Wà%†Z "é³fãRã¯p^HJ}ã®6o˜mJI©¥w^ªUê< Ÿw•C¹ÐKà¶$“$pWØA›ë’©À}©ZDðP Ð<¼+]1q\qŸ_°® ø|€îÝ…Ò2ølˆ Y 7…õn¢‘ÀKg6‰¦Î•Ö;- Ÿ5×K—MÝ¬Ùø>H%‰ôs¡m¢õþÁÁu¡øZ|VqÞ4ªÕø¬â¼Ë¬® ·…Û¼}^6Þ|°Ìц-ÜæÒº+o¢_—.^½M¾)Àƒø¶`óãÍÆ ü¡"½ý±t5ñß+ð§’Ñü¹Pl™ÈølÁm¨÷µ¢™)\˜ÑJ¤÷}éÂLuþPº0cDŠ›2¡Ïˆ¯ÕÂ*|ž;`“hìºpù¼ WÏgjØBKà¶t \‹àEJiÁ}á²6"« xŒ¢©‹…í@+3›TÌ.$ v¾jFÛqð‚Ñ­£ ^xYGÁ‹·÷ÉÛ°pSU /ÞtŠIwÕ ÅÂ}î[‘ôP2,<¢ŒòVO…ÄÌ ü½tƒÝÚQqï|U‘B$ _W— /.™ÖÊà.°I×%N¨¬ó¥%3Þ9©À‹”%ðÒå@%Sœ¯®8^"´º$R\¬®8žJð(Ÿ~Ø:ªÝʼnƒ—ø°!E |]xiƒñ^ß”^Î㔾-Õ¨“hìÕÍ ¬Z ªúyþ\º_G –…ïªFËÂ_ªa‚…ïK3%Òû¡T5²¢©{-ñ¤dÒÿ®.Ü6b,ü­°Q2½ ð$“^R>´VŸgaë$šºùKb±±ÞÈàó/e Z4u¦À·Q4v[؈ÙŠs· "Wé /e2­ÈQ‡<Š:?O!ïwVOóéjZ‰ÙœK7ØW~Óˆ+nÀ}ºrF³“r%"³£7Tàºt ü&*pS<uÞu¼Þê¬À]¡ìc¯y]>ÿ¦‘¡P›$ðPÊç¯fÃà çqCécœºg® 7\°xñ¦S«Fø‡Ï§…J% ¼Td¶) à…“‘ᥠãÌw<¼p”yuxiÉŒgR¸)‘t[àª(‚»ÒÝBcðÂáBj’ÇþÁÀO…7‰%Ec?ñðBÁÍ{ ¼´ MmÀ ·>†×çIà¥ºÍøÂŠ ¼¸ µ"xi:Òç+ðRÝ&Q”aá±`6mé=U=m:Ý»ºkñÁ3FëK6ßï¿“>ïë¥[|þ@­ñFÖùY«¨À×êAîæßªdÇ«È<Ôg>Ôà³3Æ-p®ç¥;}½’Z…Ï*NÇkF]›ù™o•I/(.…kº/(ιë•Ô |>5JMô"é¡ð6-DÒcáåºã‹È*ðT؈)%‘þ¿ºÑþ‡ÏšMk[%ëy½OVW†ÇRV9Ш¿Æ™´0–nyÅÞè“^¸íÓ{j%—nqûë‰X>ÿj áuØ’±Ï—÷þÎÁKÄFo”^xµo‹Ux¡À~­TດÛhÑØMÁêT+»-œEª%pW¸[ض¢±ûªÍ³ðҥДDŠ‹Õ%ÃÂSaÉD+™ºÂ[W£Þ?8¸.úù$—Þš½^*yïp«À]¡fu[°,ÜŒÖ#‡÷ß‹: Û%ðù7ÿ/ÓŽ£Ùüãà«RÁM[ |]:ÖqIß”^sš¼¾- _óù ¼t.3^Ç­ÀKç2F&ý©ô>j+‚?— nN/)¥Èh+ðÙ½Ljx!5r!‰àfÞשñfcnçáÉh‘Õ¹BNkÈϳp_z‰z+R\(~¦D´ÞKß\heS—Jž¶•Œ}¾ìsyÜ(ýÄÁu51ãàó¯th‘vôóŸ|UúÚ…¯KW•ÈU²ðÂ^&zZïøìŠ3* \Ï/™6/›ÒгN·…äd¼$VÏï&z|M/¬÷[zÀÂCa«£hêbÁ]Œåý <½Dïçâ+bÌ?sðUu#ÆÂ×ÕõÎÂë± ¼p9‚ /lÄzÅ[ ¼ôj_¥œ^Úˆy+’î ™•Š"ÅùRNKΊ…‡ê>Ž…—ÞÍÛ&ÑØSuW†§Ò[•Zª'¦v‘ oU2Ë ´¾.¤…éZ«¬À7…³ÈàDßÞ4b¯VW—ÞÙ£–Ágý|l®{Ø \—® GÜîU:-š:[Hì•À^»Ògec/Ý`IÔùÒØy‘Þc‰…}ïx*¸‹öÊ“âáóèñVÞOÌvbX™* à]é3dÖï8øªÂ—©Àëc¯À ¤e$ðÒ¡ ù:n*W‘+p[ºŠE3_ ‘ÊIà¾jó,¼t—¸U¢Î—®ßÇ R\*]YQ«›¯G¡ämÞyø¼Õ%²:® %¯˜’^ôóV·¥+j6Jà®êiY¸¯ºJªÉ /Üúðt¸˜ý{*mFòÌŠKÌÎõÌŠ…×3+^·ù ¼`óÑKàÅOïµA/ÙüȯÀË6/‚—r›ñŃx=·aáõ܆…×s^ÏmŠð‡õz{ù·ý¢ÿþËŸz¼üÛ÷ƒî¿ŽÝÖ¯e!ö³ð¯C|ÁׯEøfÿ: Þäòuàù°a¤oëð-¨ÃøcþÈÀŸëðg~8Tw`à®yé¡ÿ…Öñ_óµM§Gnÿ`#Á7³Ò//1_ðë#³Ò¯ÿÖ?õö\´Í?ï³BúüØ|Ýž¡Gf…\ÿ­"dWÉð¢Åð%dÇŒd'É~^Yº _Ñ™òú»:Û×G8x¥þÎ ñ#׈™rý·Šë¿Í<•ÿ­î¡àU†3ª_U!é¤+kî“üã'ãUÝÁ©?Û¢CB #ÄÔ…˜?eóp$Ä1B\]ˆûSÌÀ¿>ªFϳ‘äÿø{•ŸU÷›OƒàýS{|êz2<Ò›ä ¾*H×½m~½:êq5•®Z?…÷OM¤·ák‘L¤=Â×Eéúú àÇõDºÖÆMáýSӱۯçÇ5#};ÀÕœô~‚/ùßãv*½ v Žýú¾³Çí7éšà}[ÍI¾öUQ}|鿆ÏQ»)¼jà Y…è!ý• Sø¼/ø7½+ŸÁ7óÒÍ•ãùMºŠ­žÂHWÆåðí¼t¿Žç¾KOþ\,}À»|êæ¥{ûUõý®^mì¾dì¶Íáé×˽3c×j _2ö6åzš“þk¸GQÐ{ f _4ó7ØÃŸç¤Ûaaºy›oõ7ø’™w0u»‚ôX’Ž+n·Tz S÷2/Ý´_\gÆîü¾hì6_2ûyéÖ«Pý¾HºÏmþPûõ5釥¾õþ:/=¤¤ zWùºxì17›?óÒ£q¢±ÿYlu6·º·9én°ù¹õþÕ)\¾Þ/£ÏàÇyéæú’ä9O¦ðEžVçïf}k¬ñ_×ÝçëÞçÇnuÔ’û¾Ôæû}Uÿ;/=¹¯íÓŒÍÃØÿ.ù`ò±¤{“ 6ߺ)|‰tÝæ/$úú…éÞOá‹r£Î'ÎLâüH‰ó›¿­÷§zêúĤ®O”º>1©ëS=u}b饮O¥!>1©ëS=u}bÖ¥®béyêúTO]Ÿ˜Ôõ‰RW¡tL]Ÿê©ë“º>Qê*{–º>ÕS×'&u}¢ÔU>ö,u}ª§®OŒ;¢ÔuÁÌßÜùS=u}bR×'J]å3ï`êj©keÅí–Joaêj©ë“º>Qêº`ì6_2µÔõ‰I ž(u] Ýç6_K]+ÒK}ê½–º>1©ë¥® Æs³©¥®•±ÿYluÊj©ë“º>Qê*]ïº>ÕS×'&u}¢Ôu§Õyçk©kÅ×u÷ùºZêZ‰°ïKm>K]Ÿê©ë“º>Qê*Ÿù,u}ª§®OLêúD©«\z–º>ÕS×'&u}¢ÔuAnc4ÀùÔõ‰I]Ÿ(u]`ó·õþüúø{~ìéúìÇç©Õi¯¦ðþ©’ôçïÖgðBâܺ¯CûïÒ}´SøéÚåc/fÔ_·)ç¤ë)|‰tusVÏÅŒZ_oÕ}——H··%ó\Ψm(Ì|hÍ.–Žõs1£v×K¸ß¥§[^÷Lõ‚±‡\z)£¾ˆ'Ò/Š÷Sø"½Ç|É<ÍKjVï_f7…/[q¹âžç¥'ûu“tÆæ“šÂIoó[ʨ}Izða _"ݨ^Ȩõõû3Ò•›ÂÝäî¢Q›èbAºþ_$Ýç3_Ȩmë]i½»)|ô~™[])£÷q3cSø¢±‡Ühÿ”òyW²ù¦ðEQ&äŠ+eÔÊ–¤û4…/[ï¹ôBF­.H"÷­÷RFmœ-ŒÝÄ)|‘ŸO¹Ñ–2j ¹3ßà‹ô!òoaìQ¹‚Ÿn _"ÝÛÜhKõõË*33ÿ¾ÈÓ†|쥛Ñ—¤CˆT‹õéA)£6_×çój _¶ârén~ìÖ¹B^§‚—E™<9ñóÒ{á…(£ušÂIwyçütocaìZ™)|YŒËáq^z°±Ój«§ðEÒ!L¤yéѨ’ޓ—¤ï û¸‹æ¿à;æpaW؈õS®ðÝ´ó­USxUHa¿eìuˆS!Æ·a ŸòÿVɶ.ƒö[ÖÝ­ÿ>DÂ.–>|ØÔåðmiì± ÝÞv{;Úo‰¥÷{ŸÁ U|› ÒCPSøé­Ï;ÿX:½ù"·×fþq¡ôÖǘÁ û-BAºm;hì·“«]q¿¯o—›H¿ˆ7Sø"é!‡ï ÒÓuÏ1cui _2óÁæëý¥´Ûó¶¤w?…/»Ég~_ÚíéÒØ]šÂIOùØ û-•š×»Qf _2óÆæK¦°ß²éë]33oâ¾hìm>öÂ~+%_²y“¦ð%žÖšÜÏ¿•v{³+nÈ’šÂ—Ì|vxWÜoÑ>û›tVw\<ö”ë½›—Þ':¡0ó:Ná‹"lÊla¿Õg¨…§”—̼ƒ[:Á­™»†ûwq„5¹Ùö[^]og|·:›¦ðež6‡—ö[­.Ù<Œ]-^ï¥Ïî·†ü¸]@ZxÝo-˜ù ÜÎe¾ª¹î9¦7§ôp]8üñªegÅ#|Iç§p;Ÿ¶+#é¼™Ïú‡×IJ²~S’^Ø4L¤ÛYéýÜ-‘n¯S7¡¨<5ÛGs}#V­®ÐGÛÎç ZG5…WGâJ}Ó,¾¾´wÓJ2~^zŸê8‰ôP”.²¡0/Ý5­Hz,í‹ S7‘çlhÐ#¤Á©4DëªB^Šg¤q¬f½|ó®·£õ:#})¹ˆ—ouÄÛu’—âÖ<¥ë©ÅË÷zRšÂ—H7·½ÛKùŒ´½ÚæwéÚOáˤ» ^:#mmIúíÀç…öìBé_; ^Ú³k=§÷/ÕMá‹Æð©½~ðõûس{@/´g_ ÝåFûX¨¸¯OsÍYŸÂÙ|Ìõ^Ú³_?4#Ý«)|‘Þm/íÙÛ¶du>Má‹ÆòWس'ŸJëÝ…)|‰tëò™/íÙcÑÛX3…/[ïùÌ—öìmÒ¥™÷Sø²™Ïý|éÖ¡/J7i _¶ârÅöìNûÒÌ'=…/{ÊÇ^سûë kf¤·a _4ö”[Ý[éÎc,øºìJÅ íÙ—è=—^س·&”ôîì¾hÅ©^Ú³‡òŠSSø2½çŠ+ìÙ×Eo£§ðEzoó™/ìÙ]´%«óv _fuùØ {ö0žά÷8…/³º|êJ{ví QFƒÙ¨åÙ…øüžÝšÂÌ[§ðEc77ìžý…Ù4¼÷ì}Rjg;ßFë§ðot^Ïwžöì•ΛÒÙx˜_qméfiç£67ì–¿Òy[ª–„ÂÌ'È*íâÎpÃÖ*/œÌ›hæ:ÿUçšÂ—Ø|À [$¨t¾t°¯¯×g\¥›Â¾ðó§C¥ó¥{*–ü<,ذ8ÂÂ<ÌwžJ•Η®´©”œ€Ÿ÷mBS¡€u}•ÿÜXMዦîvd_.}\ßÅÿ¸ÿ~|™¦ðþ©’ôý÷²¶Ëà¥ëáí• ³ÿvŒu;‡ÚSéC,½‡› ^(}´æšï¿ß‰ø_"áÅëáZKf~³Hú7ø¶H÷´éæüçc/•>Ú+árÏøº=•>äÒ^¸®àÆ‹"ߤ[û ¾hì17ÚBé£OJ½dæŸëà…ÒG/-~_qßá‹ÆÞæS·+’öéÞNዤëÜê ¥euAïùlO¥¹tgsx¡ô¡ü5-ü.ý¶ÞSéC®÷ìèv_(} 7BÉæÁhKÇŽðÒu£la½‡0…/‰21æz/]÷®àç­rSø¢±¼t]ÁÇÒŠ»mÀ÷TúX0v•›M©ôÑšÂØµ Sø’±#¼t=\·…±ëà§ðEÒ^*}]Œqßà‹¢ŒÉ­®TúH×KqßÇ öïâ±¼TúIH3V—¦ð%V—BnuªÓªbnS§–Ç÷pþƒ{æƒ{*},˜y˜ºÒ}ƒV‡ÒÌÛ)|ÑØ]>ó…⃥gÚ0…/;À ÕcMÉ×i=…/»ÊWº˜?Ra¾KGí–=_q¥ý»*fV*Máòø~}/mÀG"ÎLŒóSøÏm¾°ƒö×ÏŽÖâ{\¬w€—.æëhJYešÂí"oðCq®Ÿ«y<|›ùõí@;èsCáPØ(_îïÏ é}Z˜Âç…|Á¿%·ó“Cy£|ýtÚwé)†)|‰t„6ÊÃ]äù noµ¥m”åÒýmÓpøÿ¤}[vÜ6ÓíT<¯qm9Q"µ©ŽlÿÉürÈnÍë²)æ!ÖZbi ( 6€*°DÙÄ¥àë¦í!¥^|WÛC”M "¶mOqup±×÷—dmÅÀÏ;›Ø‰3|8,Oß6ñ]è÷k?X>ã鶯¶Œ4> ¢ß†×Jœ¹ Rñ\Û]/¾§íæ¡ß_™k5Vغu܈ïÚ>¯MÇñak 3êBéÅ÷9ÖÚ/9>l-ãÖÅ”^|úƒ8ÇMÉÌ„BèÅwY>®GǃÏ\Û׋ï›Î×mgøpŒ†i{ñ]KÙƒø?ÌEËÌuCޮ߅þ þΠ'ÃX>»Ø‹ïê÷{|üƒåÃÓ*Ρ?L?÷Ï6kô_\âÄ ~l/Û™^|—åí—*n˜~ëðÇî âAœ¹ 0gw0–h»Ù‹žâ£8Á‡ç£øhôÇ%ráÃ8ú`탸|à‡p8÷ƒ¡ÓæT§üê†èF§qå{qù*€¢<ÃÆ'1sÝjÓöGcãJø¦ø+:zî®…wŒ‹éÅw¸—OüåÊo–w•úIåÚ¿½8¾mÅåEyfÇÀZ‘¡¡Ñ¡ì+:&®Ø7:ÂÃbŸvÏ›Ù=ˆËûŠò™K ¨ÜM6–U ‰BVÁ2ñÂÖûØ6FÎt£°õ>òGënYrÆmV´ïÅ÷ ?Š?19 µ¶é(›nÙ1Pšø9M´ÓÄÕ¦ÕØ6vøAüîü~Ù–…kcÛÀÑÅ™k—¡­øOÎÀMäÊý,+#øùØæ*×c»QØTÛÆÀ?ˆsåõ–¾Ò½ë^.GÀÈ^èîµîN#G–ÿ§™&®’®ÆÆÿU¸ªhu“Ùˆï°ãºDóÈÞøj–Ë(\ñÍWš8rgë˜/ŽLg­Ò}F†´ÏÜq9^Ø¶Äø^|W…¶G–´ûzImÜÄY%öâª!þaN‹OÇÉ@¥ßãr«[¿#{Mß./|jM|ß‹¾ªâ>2ÜÜŸŠ<ƒž]/®˜«Xb@@~ímb|XM¸ úé¼¾+86 ¢?^xy žŠc×V|×Zö0ŸÓGÒw¬tw>,0åW…lÇF‚qåW×®FéB»gL—J/¾½çΔÝÀÌ éa÷{ÛÂzÌsWÊS1ˆË„ýÃfmy†!úš¼3 ûFccˆŸ Àî’aæ$3”^|—Ã>ˆs·²Mf<÷À@òî1ÿ ÎÝÊŽ5º—¶0ñõŠ%™‘~Ìužîeë,w™æ>wØÍ³‹÷yÓêS$îtq׋§ûñ©ç§Ý¼x¯ß®é±Ÿ¾Úf-âÛ''󃸬¼"nÙêgæMï—Ûí}«æëϽ¸ ÂL¡nl÷ö«WD|›ÀÁZr©kÉ\à öâ2Hà·©óí‘æç°Ù»_œ m›:[v7ñ úÐУ>TâV¼MµIO[/kn’ùЦvÙfË›*¾n#>}µ™Q—mÐ,X¾ðWXÒâ¤eã¤÷[Ý¥íT•í Ìm¦.=z.kt¦þEË6Û=ºÐ‹èeñ2ý‰Û¥s z¸[¾´ª zX.h(èÜÖ–2èwÇ*m «lo¢Bmçî¶Ô ´² ­L/Nµ}‰tn «,»KJÛÿ<ÖvfoË…e/›ãÈa#þù~çö¶‚áF5½8Ñözf£ s—^lfÐÓƒåÿfÚž–Í]»ôb–$mÛÍFœB_ò(ôWng-1£nõL^i›^Älù3÷Þ×ödC/NµÝB3íîÊMbú}U1³´Ý°mÛ—› :séŹe'p;Ï׋Sè²1ý£œ¥Ÿ¿²ÝWíªÕí+r7k¶Ò äaKs5¡÷6qZ•/ºÝ‰Þr›øt¿Ýßb&~}új|îUÕo_…}:“zñ#:ZÇvmþíÛßFCß:/K÷êM|úê±%)”™?aÝä*.¡Ç¿kN“§^ñ{šhVõXšø¦‰Ñ§[*„>}õØ C4í½ó·ï_Ç©iÔé„=Ýž¼˜?aAªøôÕ[÷Õÿº¯¨u¾’1k_ûÄÄe<ÊèsúN_Z6Hoâ=ºm&ô‹ŒN‚Óm“AG÷*ÈÛd¡7Òë¿õvi_]دÌןšcNŸ¨âÓWÃn J[þÁí+{ Ä’ ÷'co_ùc žÉæ$ ´¹w|³sú&®êöµø46î MüÇüÓF•›ø»aG×UüIFÿÞ…$ÿ;Ù^üzÞ¢çSö·íòïöâ ¢m‡Ý¾*r%ñbèÔ‚ÁÞ®oÏŸðâïÓTýNbýÕo5´³¿ûõºÜiâóWýâÝ2gKˆZy¿×ò©'”/Cä,Ÿ ñO+ö)¯­‰SÊnØxKˆZùṯ’â~¿iŽåº8-Ä–ÛÜÄÌ?±SÄõ+»Ä±@äê6§ëí±­&>}µÉæ¹¶mtô÷Íûµ¸¦cا£‹±§T¹m{‰èþ÷­¯}¿c˜[!‡&>}õx1ÈÌ/]ÜÄ;ÓE{_ËVâ¿t:žn‹‘ÿý«ÿ…}·;”?Ísc/Þ+?ë~»à±UÞµÛ‘kñO+ï÷)ïÚ%»&Þ+ò¦Ü6ʇÒÞ\‹?›bòmçˆl!®51ìjbŠe#N5ñv¹eÓDF|ÓÄÛI½ÞÄ 51´x(ñP˜ÿ–!(®âÈÿ–°4lZÒ¡ËAq‚â*~]žaúN!¶EM|Öñ¡ôæÜf˜°yh)[B\ÓÑîÓ1xÛ‹:.w…·:–®{-¤£ßiÇÄ:ZgÚÚ±¯ÅÉ™áV°DW>ìTþ¾‰š/n•¿mTÊß9éJüq;{Ö>aÊËA—*.³Â ð½*.ƒÄ6EaŠ¿ióPæ¡*N€Ô™ næÊ]ž‡¢0Uñ#èò<û;£¶ 7ñYÇn‹³ qû’u$Ä5í>]b ­cl…:Ö⚎~§SìÅ7:º¸TIìt¼2â+Û|»­+ö*_zqBùå°)âÝqCvÁ`ÊËó*.ÏCQ˜‡ª¸ ’þrÚîÔô /~µ * TŸ¿ÚÄl7OŸtÄ×SâÜ “~õ™÷'Oˆ÷:µêY·¯äY0 ³`?ÒħcM|‚š(Oµ©;Mr«ƒÇ*>¢;Ø ·7oɶâ}¢­Ö,d8C|Únw¶ý~ÖXÅɶ¬ívÛö¹ñ·[,zÛí±¶ûm¿u|/Þ·ý¬Ék»gúôŒ›øØ¡§enW=ÃC ;G‡Ùˆ÷š•´ g„c [ ÍèÙc …’²(ML\K0¤£¼’ª:fYGa!^‰ÊISHSÈgu¸ÏÍ)ö¦Uñé«~*.„múDEŸ¾êŽÑ}hùÅ·¯ìN[!É&N鸩:ZZG÷h¿CÇ«’qJÇêè·:Þ ùðUØiÇûK§t\ío]¾"V½<ýúùëù+}°Þà]¾"¶l®E=ÒÃWOÐWß©¯l«N¿|õ¡×\+<|õ'¥ý©»Z¾z†¾ú úêoHûèo½B¶?“–pùѪ?(½\{ƒeùj$¿ ±<|õioÉ¿eÚŒyûÊAˆž9­TÑòU ÿV»®°|!K$ÈöúªˆÑ¬,aëiùá«oÐWOÐWß¡¯þ€¾úúêúê/è«¿¡¯^ ¯^¡¯ÎÐW? ¯Fè«7è+ }å ¯<ôU€¾ŠÐW ú*C_í«÷§oãw6.ü"¿š;‹_¾R¼œJY}E†¨Kõõ«ßÈßúù‹ü[%[»úÊ@z9}e¡¯ô•‡¾Â´ÐW ùÊC–ð%!Ñ—ßÍè÷FNÎÝö¥Ÿ¾¾ÿ) ÿ¤ÑÍpGÿ) ÿ¤Ð'pãoé O_þË¢}tat˜Ö½†F+qat}tat˜6: 7:Œ0:Œ>:Œ0:L†FFF¦Ã#Œ«+ŒÛº×r£Ã £c%.Œ«+ŒÛF‡åF‡F‡ÕG‡F‡m£Ãr£Ã £Ãê£Ã £Ã¶Ña¹Ña…ÑáôÑá„ÑáZ÷:nt8at¬Ä…ÑáôÑá„ÑáÚèpÜèpÂèpúèpÂèpmt8nt8at8}t8at¸6:7:œ0:¼>:¼0:|ë^Ï/ŒŽ•¸0:¼>:¼0:|ž^^^¾Ï/Œ¯/ŒßF‡çF‡FGÐGGFGhݸфѱFGÐGGFGh£#p£#£#è£#£#´Ñ¸Ñ„ÑôÑ„ÑÚèÜèÂèˆúèˆÂ舭{#7:¢0:VâÂèˆúèˆÂèˆmtDntDat$ÝBI°PjMLœ…’`¡•¸`¡¤[( JÍB‰³P-4žOÌQÖí:Êöïæú”ð]y@Îí¦‰g¦‰ù–ò&¢g}daäÖ‹™Y+qad}daä627²`¡¢[¨*­‰…³P,´,Tt ÁB¥Y¨p*¼…¾ýñüƒÁ×ëX_Îí½ýîÇ÷nç 2£|ý±ºü?{2í‹«øO=œ®u›Ïíý'ƒ¾ÓÙ¢—šk5‰ÏEh'ÿ>‹ÿzߊŸ?yúq_<ÃɛЋoöÖýÉd÷ðÕÓ1'äf¡Q°Ð?OW' =}ë,®š~ñO—¥ãÅŸ® ËOk/ÜßíÅßïUÇLjÄÍY_ÝTY~Úª"ˆ›Ö׆ë#tƒúÚ´¾þ<ˆÜ×Fèks™üœYñnõ&ñ¯ë)ÂdK/>ÅÏׯžsû„Õñ‰S勊ކ³á†³FšiÃÙpÃÙÃÙ´á,‚´ál¤ñ؆³á†³$nõiÛ Ó¶mÓ¶å¦m+LÛVŸ¶­0mÛ6m[nڶ´m›+[ÎˬàereÛ\ùó ²+[Á•­îÊVpeÛ\YØ»¼}%»²\Ù6W¶œ+‹èÍ•-çÊVð2Û\Ùr®lW¶Í•EæÊVòÅæÊ–seIÜé®ìWvÍ•çÊNpe§»²\Ù5Wvœ+;Á•]seÇy™¼ÌA®ìš+Dve'¸²Ó]Ù ®ìš+ Í·¯dWv‚+»æÊŽse½¹²ã\Ù ^æš+;ΕàÊ®¹²Ò\ÙI¾Ø\Ùq®,‰{Ý•½àʾ¹²ç\Ù ®ìuWö‚+ûæÊžse/¸²o®ì9/ó‚—yÈ•}såσȮìWömœ{nœ{aú6Î=7ν0Î}ç"Hç^¨mœ{nœKâAçAç¡óÀó Œó ó ŒóÐÆyàÆyÆyhãΓ0ÎSç‰çIç©óÄ Á$ ÁóÔÆùçAäqž„qžÚ8OÜ8OÂLmœ'nœ'aœ§6ÎE6Γ4PÛ8OÜ8—ij>γ0Îsç™çYçYçYç¹óÌó,ŒóÜÆyæ†`†`†Æynãüó ò8ÏÂ8Ïmœgnœgaæ6Î37γ0Îsç"HçY¨mœgnœKâEçEç¥óÂó"Œó¢ó"ŒóÒÆyáÆyÆyiã¼pC°C°@ã¼´qþyyœaœ‚‚”FA¤³ï¢S"PÒ(Há(ˆˆÞ\¹p®\/+Í• çÊEpåÒ\Yi®\$_l®\8WÄßÍi~ò‰|´Ûß.i¼›oOÌ“8wñé«õˆú»ù:ªâÓWß~=ÜŸpËûï) ';ØZùàAüÁ•Oað·¢FïæåÏÇš;1ZBüüþð•ó·÷´ÞJ¯Ï°[Oˆ¿ýz¨é7¤Û%§÷ÇSÄ“1¹5zÿÙ=Â8Ôç©æ¯ž¸þ‰×b™Zÿ<©ýóíW÷úD}—ü.>}õ42â]ÿ¸"!þØ?>,¯¦nû'Õ‚Åâ}ÿ ·zºÛþIõñ®Œ½]ðêúgúûg®Hö1 蟛8Ú?ÿ›ß@0¶ßvƒ\à&ÞW*$зþ3w#Ù?n0ŽèŸk…GömÏ“>ˆ?öÏŠ#ýgÈ¡PâbÿÌ’ý3Í@ÿÜÄwôë|ßöOIi‚gDã›ïÁÀsy†ÿ ýsß³|îÅ·ýƒ£ùÏð@Ÿšx×?>„B÷Mžß„Å~!™çÃæGï§±\w/Äþiâ}ÿÿæönû˜ZÿüÞ»ý:úÍì$èø d— ñÞbfÖ(ñžæ˜`iÿ‰Ùâ}ÿ¸[ò•Ò?Mü·°E²X¯ç·øûWí«¦í850BüÜïY»D²Îæ“[ ƒÿh?mÑÅóÌà›øÒEú—*þèeoÓ¨7ñù£*ÞÁ9’µž3±„ø{'îá¤óMXqè‹¢<©VêÅ;g §¶gµR&Ä>æ‰6¯¾z>¦ãs3ðó£­!¼lQžÜL˜Q¨UêQy«Ÿ/Xa~³í|Áró›ÎlÛc·Ý,²üXçdR´‘èÓÙ~âó÷±¹ïfAk—ùÍö S2!Þï_§áFŸlÏOý}z\‰ogÁpÿJ=_ûçIíŸ~ÔÜǦm{ì–;_°ýùO.‘ïúǸÛÀ]ÿ\›N¡÷ýs‹¶ýc¼w„x·Jk Ù?Å:Jy±Ôó¹êùÜ?¹¸Ü‹oݤDs~+œ/¬Ä»þI%e¦2…Þ÷OëÞ‡þ¹Fžï÷wb û'ÞÏà×âbÿüeÙýd~ûËîéŸYÇÐ %4ñMÿ ÙÄe†éâ·\R"Äÿbö¯7ýcOˆwýcJX&¨GËÛù9aB¼ÛÆI¡*/Z^=Ù‘-_Ov`Ïð)Æ^¼·üÔÆ°Ÿ}á´`­!Ĺ“~eñ«ƒï•øfæÊžž¹l°„xï)Ò+K´ëQ×ÄåþÑNv”þ±{û'¯ÿoÚ3¬³±|!׌ !þ7ê>B|Ó?‰îë-%ÞõOqÕ3zÊc|"ÄÅþQOväþ9ïZùo±oéÅ·ý“bÎtÿXoñ›¤ÅBçQUž\ù™¥Bïý'ÛLûÏ`-!.÷ÏÛ±þy;Ö?oÇúçMíŸ7UùÏ÷ÏÛ±þyCúçÛYó‰ÌÞžwÎo.­u|{fÖŸz÷bÓ?q==6ñ¾–§Ä;Ë_M ñÍ‚åj€}{VÛ¾e6¢×Ÿ¥¼Ü?ÚÉŽÒ?¯»ý'”^œèŸèÈÈl~dÕâ]ÿ„Á†/¤g˜BïûÇUf#œì¬ÄûýÑ"Ù?!¤Hˆ‹ý£žìÈýóómŸÿL¡gñ½81¿¥èø-å@ˆoú§`βîŸ&ÞOc&*rüêÜb%Þuƒ-˦bùù+iVOv”þù÷Xÿü{¬þ=Ö?ÿëŸõONv¬~²#÷ϯ½ëÏ4Á¤^|Ó?ÎÖ»³}ÿøÕáïJ¼ïŸÙ?5§Ä7a@5ðæN‡‰„x?e“€þi⿤Eî÷¦\Avnâ;úgZ#c/¾]L©Ðïi¦àñ~ƒsò?ÚVwgWâýúS í?Å”ò}˜–=â?M|þ7°vò¦ôÏÞµ‰[Ç^|;¿ùz¹²ïŸ`\"Äûø­^,ÝöÏ:@nâ› Ôuk¬_ùýzk¬‰÷þã—kÇJÿTqáäͶ“7+œ¼Ùvtf¹“7+œ¼­Ä¹“7+œ¼Ùvòf¹“7+œ¼Ùvòf¹“7+œ¼Ùvòf¹“7+œ¼Ùvtf7ÇG†šDOÞVâý—­1f0äVâEyR­Ü‹w:®OÞ¶j­Vè»xw:èÂ* h'oŸÔñ¹øÄL\Œð²îäm%μIÊ;þäÍÆÛúã„ù͵“7ÇÍoN8ysíôÉmÏnƒËmOÞ,!¾¹Ÿèo ˆë‡|?WZ‰÷Q„[è“ë&¾‰•yB¼"Êr3Çu[ÖÎeJ\˜òæƒúçIíŸ~ý\êŧ¯¸“7ן¼ 6âýãJ^ÂómÿÜÎVâ}ÿ˜@õÏõê:%ÞGÃroxÓ?«µw%.ösò6ñŸ˜€þ©'ohÿŸsêÅ·n’ëå'œ¼­Ä»$דgü'®öwVâ}ÿØåà®ó3Å´ïo†ÖÌ+ןŒ÷ÍÕ¸Ø?9ÆŠAüç&¾Ã\±®ßöO¨W{ϘBWOˆÏ?è}ÿ¸lñÿ,'£ýü6Í\”x³À,ûo®ÏŒK†j»Ø?Ìùœ=åR€þ©çspÿ”ä}/¾Æ‚]âë~e™è­!Ĺó¹¾Òd ÈÃÒ½½åC¡Ä»nC Ïç/”¶oû'ïÉþIf½þ4q±ØóS›‘þ©ç§x|0ß‹oýǺuþ3ÅÝ”ø& X¨=Ál(ñn™™ºqéáüt%¾É_ˆ™ä?ÓŽ—ûç•=ÿ‰Hÿ¼îV·ï\;CÜÄoõs¿9[ñ®²]n8‘Y"Ä;ÿ™xÊ2¿ ç§+ñÞB¡ý'{C)/ö{~š—ó¹~îZ®=´EïûgN]Hþ㋉†é‰`]úþñë豉oηí‚ÞYÞ¥@¡oö¯+;,?%­‘ìù)Ø?ÿëŸõÏ¿Çúçßcýóï±þ©âÂù©ãÎOg~Šôϯ½ëOÈëÝÙ_ôúãL äüæ¢_opþ"ן¹ƒ 3¿ ë š_Ï\|0D¢®7¤2!¾)0Q—Ø?Mü—´È±ç§Ö#û×õü^œ ¹ßú©©Õ½ÿ¸°Þaiâýs½dN÷–ïâ–Ûw›È9¯7§šx ÓúôOÎO§¯¸û‰Úý½“ÿ˜ð°ýûÙ»¡oûÇûl ñ>¾6ŽëŸ\ñ®|I†îŸâ(åûþ±™ßšøoiýaÏ·Aøéï½û×Î{Û‹ñu=aîûÇzgñ>¾N–‰¯í:ükâ]ÿ˜8Ðý¼s„x¦ u{UîŸ*þ[Ú¢ÿÍå/¸Ío»öG¯©5:z~ʒܼ‰¯£O„x_ÀÍ&>°%¾¹â¹þ˜)ñ÷>ùb¹¬ôOÿm$³™=Ùým÷îï${ñíüæ’!÷|4ëíï&¾¹ÿV˜ùÍ­O›xL L3WH–ïæ·—ÂJÿTñß–7p»â„û!®]ðpÜý'ÜY‰s÷Cœp?ĵû!Ž»â„û!®ÝqÜý'Üqí~ˆãî‡8á~ˆk<w?Äu׆Uy²•øæú‚§&Ñù„íž\æ.Šò¤Z¹ïêõ#µE2ku/.¸ßè¸ZäÚýOêøÜ Üef;CÍ‚7å qî~ˆ¤¼×3³½0¿ùv?Äsó›î‡øvGÂ÷»tv9ñÛÄ-Cˆ÷,vZÉoâýŸ\(ñÍ.ÐR™Ê÷KÃñþþAZ.ùÍþ[°„øf¼S<¯gfËýó¤öOÏOËÁûvGÂs÷CúþI« ΕxÏ’Š£û' ÷¼ã•ø†Å. p¾¿2Üow­Äû(bXœÓ?ÉQâbÿ¨™ÙrÿÔû!hÿ»*ýåÛ‰¾BYB /ÜY‰o*'ÇH÷OˆzŸ%d,Ó?ÆB¼ß¿®÷C|x›µ÷6q±þòLÿ¤+ Öúç&ŽöÏõj› ½xß?sþϲÐ{FtÆâó$zß?©PâÛû!…žß<)¾½_eIÿY×]Z‰‹ý£æoËýSï‡Àó[vÉöâÿq9vDÿ\§®@ˆs÷C6ýS|!ıùmꟘ!ÞûÏÉùmšCˆËý£åo+ýcwûß oügê¡…Á÷þãÝ` qî~ˆßܯ*Žßôϲ¿ã·Û†ïû'.¡ïf~+ëÙµ‰‹ý£æoËýsÞ¤°^ê‰~~sa)NÓ÷MÎâ›k¢Ë [Uå©þYnwmüÇ% }ã?KòìÆV…ÇVârÿ¼럷cýóv¬ÞÔþyS•ÿ|ÿ¼ëŸ7¤Ôüm¹êý¼| ½øvýì²E¿‰œSÌ„øfÿz9ßÞZ>Pâ›ÊˆËö·î¬Ä·•ÇÉø`(áE—ûGËßVúçugÿ”°æ?õ ~„Ĭ?ÞDB¼ïŸ²œÿ+‹#Ä7ùKQü«ƒKìŸ&.d&þæûílRí³o~3SHzñmÿÄäÈùÍ¥´æM¼?õËÞðf~[=z½ß\À1dÿ×ÎßÄ»•ߥ\þ©âÂÍ÷ Ü|ÈüVo¾Ãþ3_»ìÅ·ý“c]àûÏ4DB¼›ß†è™øÀJ|C0s&ý'•‡Áe©þ™ÓÆJDú§Š 7ßCÛY ÂÎZh[cÛY ÂÎÚJœÛY ÂÎZh;kÛY ÂÎZh;kÛY ÂÎZXö¶¶#x®pIà/[ñù+ˆ¼]wtl/Þ •ëííåÕðÙ"Å>÷_ÝêEhbÑ›Ø6Ј–óÐuïð¾ÿ¶ß¶„çóõúX¶Æ(å (ÿ¬*ßïØ­j¯Ä‰&2ý38B\hbÔ·ï¢0‰Æ¶}¹I4 Ûw±maÅ~ûÎ-׃c_Þoõ¾ÌJ|s=x)`û¼¯xO_]‰÷Ï?ÖâбŸ]Í}çs%Þ'¥åòQì¯oçqáùǨoÉýó¤öO¿=´z[4¶-’Èmõýãrˆ„x_Ó.Ù{›þI÷ q%¾y¾{Yb7ý“îÉÍ+ñ¾|\½¾ûÕoUz%.öz½^îŸz½ëŸkyfc{ñm7ذl EázýJ¼äÁ-ù%}ÿ¸Á8B|ûü°#ûÇ®bÌ•ø&Tq¤ÿ 9J\ìõú¶Ü?õú6Ü?6®Gp½ÂÜ÷O©õ¯ã&=ÒyBœ»¾½éç !¾y^}I^ÚøOð–ïËË\ÿĘ q¹´ëÛJÿØýãì½¼ElW˜ûþ‰·Õè,!Î]ßÞôO(ñÿÆV™‹+ñíõÆ@ÎoC‰žûG½¾-÷ÏyÜÙ?Æ{Ó‹oúgZ£ê Ð_o̱â„›ÜÄÏ£ª<µþXº&H„øæ‘‡¥|Âv~[;ÿZÔëÛJÿ¼럷cýó¦öÏ›ªüçûçíXÿ¼!ýóö‡²I!÷ÏM|Gÿ ¡˜^|;¿ùT#ÜMáò ñ¾L]à7–ÏŽßl’× jþBi;_×ÓÛM|‚'ÄåþÑ®o+ý󺳼÷©'âƒÂøOò[å‰þ©Õ¶+¡Ä7ý³äGáúöJ|Sä§ý3¤ÕÛ:+q±ÔëÛrÿüÜ;¿g6èÄü–èþ võÀÒJ¼ïŸZ}›ˆœ!¾=ÄXܯ?Äð6âý!†©ü°üü•4«‡LJÿü{¬þ=Ö?ÿëŸõÏ¿Çú§Š ‡LQ¿¾-÷O½¾ï$Ÿ{ñmÿÄàhþ3<Ч&ÞßRËí‡Mÿ¬|Wâ›0 Ø/$ó|Øühâý4–ëî…Ø?M\¸¾õëÁrÿüÞ»ý:úÍì$èø d— ñÞbfÖ(ñžæ˜`iÿY¢¯Äûþ©oOÈýÓÄ…ëÁ±bDá#¶SˆÈbDác%ÎbDá#¶CŒÈbDá#¶CŒÈbDá#¶SˆÈ]ŽÂõàØŽâf“|É!‹ÂóN+ñÍ=\G8é¼AVú¢(Oª•zñNÇõóN[µî‡è+qá sl׃?©ãs3pwNc áeÝóN+qîz°¤|ÒÏ’0¿¥v¾¸ù- ç ©í±§>É(,[Àiû¼S$Äû«*~1]ê'>›+ñÍõàe~K›¼ˆ!âýþuM¾H›òÌ÷éq%.1Kúù‚Ü?Ojÿôû£æ>6SÛcOÜùBêÏr‰„x}Û-ÕçR_wÖ }û|w&ûÇøûëP+ñ¾|]Š?öýS¬£”ûG=_û§ž/Àý“‹Ë½øÖMJ\îA%á|a%ÞõO*ËûLÛþÉúæ*QíÞþväêãJ¼ß߉*í¾ûç/þ 2¿ýe÷ôÏ­´aéÅ7ý3d³hI}újI‰ÿ‹Ù¿Þô_ùB®%BüoÔ3|„ø¦Ý?Ö[J¼/låªgl6ñ‰ûG=Ù‘ûç¼kå_ž¦ëÅ·ý“bÎtÿXoñ›¤ÅBçQUž\ù™¥Bïý'/—_7þ3XKˆËýóv¬ÞŽõÏÛ±þySûçMUþóýóv¬ÞþQ óÈýS óÀó›KkkqšÍúSï^lú'®§Ç&Þ÷_ëÒfgmˆ„øæÁr5 …yVâýÉÎPèõ'…@)/÷v²£ôÏënÿ ¥'ú':22 6{Kˆoê.u6ža }Sÿ­2ádg%Þï†Éþ «‡Wâbÿ¨';rÿü|Ûç?f®ÚÞ‹ó[ZJlâ·”!¾éŸ€m8˺šx?™¥.Ioy¿:·X‰wÝ`ë«Õˆå篤9X=ÙQúçßcýóï±þù÷Xÿü{¬þ=Ö?U\8ÙIúÉŽÜ?¿ö®?fu99µÓ®œ­wgûþñ«Ãß•ø¦þhtdÿLԜ߄ÕÀ›;&âý4–—Šærÿ4ñ_Ò"§æ‘û§æûgZ#c/¾]L©Ðïi¦àñ~ƒsò?ÚVwgWâ›ümCûOñ¥|¦eøO ó$ýäM韽;k)>ô½³6¹£ã·`\"Äûø­^,ÝöÏ:@nâ› Ôuk¬_ùýzk¬‰o>[®+ýSÅ…“·ÔNÞ’pò–ÚÑYâNÞ’pò¶çNÞ’pò–ÚÉ[âNÞ’pò–ÚÉ[âNÞ’pò–ÚÉ[âNÞ’pò–ÚÑYâ ó$áäm%ÞqÕìþ´©³¿(Ê“jå^¼Óq}ò¶UkµBßÅ»ÓAVa@;yû¤ŽÏÍÀÏO„Õž$œ¼­Ä¹“7AùŸfŽíÆíü–O~yX¸}BŒŽö»·Ÿh÷ûøúõ·9ý±ñÓtu{ýnþä4B€4ñé«_ô$úñõé뺉Î߯o7ñé«?wQO©U¹}5R:š|3ÄMÇQÐqÜ¥£±m£¸‰«:ZÊŽÓZ”oirší>;Nlqˆ½ø¬ããnçéþÞëí«‘~éðzSµ£ÝgGkî)ùM\ÕÑQv4Ã)ØÑí³ã4„ZÒuŸut:Þ‹RÞ¾¢ì8)y ^U;º=v¼=IhzqUGOÙñZø~ŸsOMhⳎ¾¯ïw×ñÛ;é×ÆÏ‰v7¿½óv\Ä%;}¶‰"GÚi.пôâ÷'ÞB‹¸„þý¡Þ]pye¡E\éÅù«Q×qt÷èè§ 5ô⚎¿Èd~¨ôzÇbÖñ—`Ç_f'%c6èÄìÜë8ê:Ž‚Žã1G@G{ÌŽö˜¹¤×ñí1;r+È£Žî˜Ý1;B~ý˳£;fG̯ÉdÎ>Ïý¾ùq~·ÚõâÊ 25ê:Ž‚Žã1GUÇç'r~4ófâ2‡? ëÌ"¾c•{ˆKñé«qM5â©Øì¾uGAÇñ˜ŽãVÇpòÉùÕWôü˜¼¹U+Óì¨ÎR\ºˆ÷:ú)žréá«Q×qtéHØqâ Ŭudâžp« ¤ÚQ¥Yå¹Å=Ž“Ëº‡¯F]ÇQÐq<¦#aG{Jk>óüÓÐvðna*óÆkÇŸÇüú'é×é˰ò™ŸLL1Ü®ÿ©:󙟌ϔâÖ_9†©”6÷ˆ:?™ñî»MóWôZhg-¢£ºŠ+ÈOOéxòóe¤ûWÇâðç}qøµÚæz˜^œž7 åOÖ‡èÄІçÝ´a£üøyåÿú‹Ž;®µ›¦þš?yø»ÿ;åЋŸo_ý±QžnU/Nì­õ ã1ǦãøG@GzÖ¶ë uœXôªñÏÛ‘›µ{ñ˜Ž‡ìÈMÎ ôlR¾Þ4 tt6ô⟷#7÷ ã1Ù‘›jA<ã׿ú”¡ãS/þy;²3j2ÓñÙ‰sòòAÎöJXxÙË¿2-ââÉÇËÃi¡‹Ù÷â {{ù°´Žîv2¬êh÷éhJZ1®E\ao/ޱãíéUG·SÇèŒëÅööòAG!Ùº˜ý>O¹q…½½Ð§×ó-¥´œ^¿§…/Àéõãxœ¹}/®GædØžr½ ëh÷éh§8ËõâÚx¤O]Í0—D@tt{tœ¤O¦WÆã«>÷¼ ãñ˜{^ú:åU/¾BsÏ«>÷È:Ú}:Zë|êÅ•¾~ÕçYG·OG“î/S4qµ¯Õ¹GÖÑïÓñqîy…æžWnî ÎV; >ó Ì=ãÑ«9üš{^é¹gšzÚíYG»OG;-4¶ׯ#?÷ÈŽnŸŽóGÓ‹+ãñÌ®3fXæð³ ãèë3¿Îœ¡¾>³}m ¤£Ý§ãã:s†úúÌßî<¢£Û£c¿Îœ¡¾þñýÇé‰Ò1œª—OH—ßõÇÄ÷k‘Ó'ãÃÞ¿¿i5ÿNGô±¢¯Aæýlw½öÓíô7Çϳø÷ïÓWëûtõÅ-9™“NzñsûiÛ??F~×`™ÓÜ¥âØüwG~Ö_Ä?{곈O_}t7Jû¯F]ÇQÐq<¦ã¨êxù0ôLp”.¼Ž‹¸èe—Ç;ÆÛ^\iÉ僙­î‘’¬£Ý§£5ÃjF]Ä•Ùêòá;¶HIÖÑíÓÑø¼º»ˆ+³Õ…]™\]=/ÂŒzù½»¯‹ß k}Í®L¶n Ë:îîë°Ú³¸@+Ó…B¤ã®¾¾…!¡WúúŸ¿¿’kÃ5Aé¦ãò ©ãò»Y•ºÚ·’Š_ÿ~ægçþ~:}£ÑÓ²µÞýÝ`JîÅ'äÜ>ašøD7qVhâmÕÚ¢ÛS\ß¶ [/¾A7a)™$/ïÜ¥‡8 KÛß…ƒð÷c—ÞÛ¥‡‡§¤ÍÄ1³]}ÅÇ[ÝDÖñÐ¥‡÷véáñ¹ëJŠ«¯³Ùë½Gt}ÕÏ=÷·†æ¯˜m3›²Ct´ûtœJ*½ø¬ãfîYÛ‘Ù6³1YDG·GÇÛ²{ñYG×õµ]åiUÜâ ŠŽ~Ÿ‡Ò‹Ï:ö>Íý+:)ÎMÁà²Õl„äÓ’âàñhÃÚŽ¿¡ñÈ%ÅM.ï:Ž‚Žã®ñ˜Ëýò£iIqŠŽLRœ\Fì¸×gŒkÅñš¸æ3tàïNÎYØÑî´£YÍΦ%Å):’~]æªÝ>;šx/“ÙÄ5¿¦ÉI™_>†ìèöÙÑÌO”ô⪎t´“±ã±¹ç72÷èIqFHŠ3-)Ž×QHŠ3LRÜLÞê¬"$Å™–Ç£w giuèkZRœØ‹LR\¯ã(è8îÒÑ®®¦›–'ëø‹áI./†p=δ¤8TÇlâ™–·éë^ÇQ×qté8:Úcv´ÇìȬ Ùѳ#³‚t:ºcvtÇìùõ/wÌŽî˜1¿f®½–°\æPìè÷ÙÑs?ô5-)N\Aؤ¸GGAÇñ˜Ž£ª#“7QZg—UNHB2-)^åâÒ–gº¤8¯ÂzûjÔuÇc:Ž[Ãü~|\}Å$Å9bGu~”âÒ–gºí£Ž£®ã(è8Ó‘°£;ùpO€4ÏlÜ“|Dì¨ÎÒ¬Ò’âLwå>¦!<|5ê:Ž‚Žã1GJGWîIš†IŠ;…¹tТãOÁŽ?ùõOÒ¯ÓÉØUÇ'ÅÙ6EùÌOÆgŠh ·?ì‚At<6’ãqò™{ý¨ù+Ï\ ·&!:ªk¡¸‚ÔýáGO%'³úêXþ¼79®øÌ³‡!”O.Åô ~ zÞ o•(oYÞ³¼¹cʲ¼=fy!¤G”wÇ,ïŽY^ˆõ1åYÞ³¼@屃çÝì ÷Ókó,±Jy“Üð¨üÚð¼›6l”?¯¼žg„„3Ó’â —\´«Äó õ5Ÿô–;ZŠŽvŽó©«_Í*¯P_3ISWÇ¥À¢£Û§£qþž¬`^¡¾>ë7gÎÂmŠ3ps¦Kúp«©3tsæ¬ßœ‘u´ût´«7Ò×gý挬£Û§£ñëà÷ Ýœ9ë7gdý>O¯ÏÐÍ™óo}< 'ìçßÇÆ#ts†M”2eÈwGAÇq×xÌ«äs†æÇóoÝgD;óèæ ŸÌ5,)ŠíN;ÑnÐUI¿Î§–¤©Øñ˜_C7gÎì:S‹‹)vtûì8ǦWu¤w6‚3Å"v<6÷@7gØÔ,[†[Ék#¤f™–šõ¹³‡–šeú{¶ýW£®ã(è8ÓqTu¼èó£fb.Àüø˜ SBʽ¸Ò’‹>÷È:Ú:wOÈ5hî¹è~-ëèöéhœ+tůõt#¤ë˜–®c¸t#ä²=]Çé:¦¥ë¨ rºŽÒuLK×1\ºŽˆþΈ†XIH¢0ïÇD[ÂŒéfVïlÏ_1G5Þ/¹oŠŽ‡D[ÂŒéÞ{IÓBµúŠ9ë„"::m 3vœ ãÚŽÌh¬Ct;NË×=­Æ¶”ygîžu:Ž‚Žã1GUG6e¥Ø%íÐ )¶¥¬ð:J‘aKY±]ÊJL÷˦ƒ„ ¢£:÷HQWK±ýISY}Ŭ×)fƒè¨úµä -ÕÂö©y¸3\6a ¡–¸G¸Ún[Ã'ûú'Ù×i®äø¨ã¨ë8 :ŽÇt©ñèãzDp©Æ›‚ØñØxüIŽÇpr±_ºŽ£ ãxLÇ‘ò™aŠ…W_1káÔÙ±ã1ŸùIúŒ;Ř¿uGAÇñ˜Ž#å×ÞçõWÜ­+±£ºŠ+HÝ¡}ÔÑ̬ô­?‹ÃŸ÷Æáa.¼Þ‹Ó1îJy7ÜkéØçcúóÞ}«üxDy{Ìòö˜å…ÈSþåí1Ë !=¢¼;fywÌòB¬)Èòî˜å€(ˆ<ïfSpRzqzÞ$”?9?@žwÓ†òãç•×SV¬b[ÊŠå®¶[áʶ”+¤ƒX=eEÕql:ŽŸÑqtÔRV¬b[ÊÊgíÈÍÚ=ÈxLÇCvä&çG-eÅ é ¶¥¬|ÖŽÜ܃ŒÇtÃ]/-vHˆíN;»º_óq¿pWÛSX +vtûìhR¸®¬âš_óér²£ÛgGcWE¶í tÆýÂ…Œ©@ãñØÜq³)}~p‹…T4û øõkW ÙoпfSúŠKÑÑîÓÑÚU!Uû ù ŸÒWR@ttûtœ"Šû íög=îÒ¼ìˆ{S¨Ìz?CqÏY{dí>íïEßíŠ{ÎzÜ#ëèöéh¼YíØŸ¡¸ç¬Ç=²Ž~ŸŽsÏŠ{Ø”¾ÕxæÇóïcãŠ{˜”¾9ð±+GAÇq×x,ÁnÐUuŸíxÌg ¸‡OéË5¦íhwÚqŠ{L/®êÈ¥ôÅ;ók(îáSúb´ˆÝ>;ÎqÏ]Õ‘‰{³¤F*v<6÷@qþÎÞ¹³í;˽sg…wî¬þÎÞ¹³í;˽sg…wîl{çÎ~æ;ÛÞ¹³Ü;wVxèÇòïÜùzš+$SÚ–Lù¹Û-™Òn»¯F]ÇQÐq<¦ã¨êxÑW&! Ð^€•éñí³!Ý ¯Ø ´2]ôY_ÖÑîÑq Þ{qeÖ¿è3ª¬£ÛgÇ)r÷teFÕ“)­Li[2¥å’)­ihõdJ+$SÚ–L©‚ÈÉ”VH¦´-™ÒrÉ”2ºúö™Þ>³íí3˽}&N‰l*gʵíBzŸ}?v)¬¥rÚ.•Ó˜{öôõ«Q×qté8R:qXëÈ\ ‹Æ@v;îõ®% Ë>Ã% ³”^PìhwÚÑÚû‹®% +:2›”±&÷*vÜí×ÙÆ^\ókŽR§ä3bG·ÏŽÆ®RC\K@Vtdjy)û¢ØñØÜó™{Ød—òâ3B²k ȼŽ]rop«ñØE;² È:Ž‚Žã.‡Uý6×e¹Ä‡—ºµN¸ŠìZ2ªcôÁç^œ˜{G]ÇQÐq<¦ãèhÙѳ#7‡÷:²£=fGnÔѳ£;fGȯ¹ÜÔŽî˜1¿fR B­ë­ØÑï³£ ë9¼% Ës8—Ið¨ã(è8ÓqTuüãCoÓOÞ÷üñ¯ã".®…Û¢Ók{ñíܳ~?Ö±IÒiX¶ÀÜëZ’4¯£½¶$i÷p°ö¿8×)]}Å$I§`!ÕùQŠ [’´ë>}É믘˜" ¶ :ªsä±-IÚuÉ”!ܯ×96IÚØ¥è“’)]K’þd_ÿ¤úúinÈãW£®ã(è8Óq$Ç£»€96IÚú:÷Èv<6’ã1Ì÷ëÜÃW£®ã(è8Óq¤|fš¢ÖÖfÖk—}3ÅŽÇ|æ'é3n®Îž¾uGAÇñ˜Ž#å×Î…µ_3ûá¹ ÐxT×ki•kIÒ®K[ «"îùWxÞË\Në^”¸ÂJyV[1ÏÇHÄó^±U~<¢¼=fy{Ìò»À”?dy{Ìòí@”wÇ,ïŽY^à#˜ò‡,ïŽY^ *ˆò‡Ìó^c‚õtzÞ$”?Mª‡ô ~€Ú<ï¥6[åÇÏ+¯'I;!Ùµ$iÇ%S:!Qѵ$i'$ ;=IZÕql:ŽŸÑqtÔ’¤€ìZ’ôgíÈÍÚ=ÈxLÇCvä&çG-IÚ È®%IÖŽÜ܃ŒÇtÝ tç‚OˆìJÇQÐqçÜ“; s›ŸbAì¸{î)¶ôâš_³É½%ÄŽ»çž”B/®êÈܹpÁAvÜ=÷dzqͯ¹;¾ÃËvÜ=÷¸´AWu¤Ùnñ9zÄŽÇæèΛïìò˜ƒ¹Ý+à×]Bü4 {qů_¹{JƒYÞUt´ût´6ÞŸÚq¯Ï° ñ>gHG·OÇÉgBèÅ•ñxÖc\!IÚ÷ÌÇg(Æ=ë1îYˆ)Î@Œ«è8:ª1®lG»Ïަø˜zqe<žõW¶£ÝiLJ÷ Ÿg=Æ•íèvÚÑ…ÁôâªÏ¨1®lG·ÏŽ1îùók5Æ•íè÷Ùñq9C1.ûV°õK'$r»óïÝ~ï™)î ­3lÒ~‰Ë›¢ŠŽ»}&ÅÜ‹k>î3aIÚWtÜ=Ý*~å„é8:jÉæŠ÷÷õêh¸%›;)‘[O6WìÈÜjÉæªŽ£ª£þÖ¶x’ÞÞÚvÜ[ÛNxkÛý—váÉ:úÿµ´‹ÿûƒAïã]N»ðL:þµØåm%öBжoéøži~óø=5Ä·t|¿Y¯íZGmûQÑÑîÓÑšUÑßÒñ½°z6ßïÝoe>l/>ëØÏ=vdj†v©a«èè÷Ùq WïÞà[:¾ß5ñ÷¯è£áùAðRíø[Ðñ÷Þñh’±½¸69²\¼ËwGAÇq×xLÞä^\Õ‘IÇ®dÄŽ{}Æš{™ ßÒñeŸá޹b-k ØÑî´ã:ß·t|EGæ=ðPh<º}vœ¦ðaƒ®ù5÷xˆnŸÍóÙ^\Õ‘¾¶wJ>DÄŽÇæžßÈÜóŽŒ?Õõzú„·ã·wÕ¯¥•˜)0‘âìnu ½P À·bsá°åRŒ®ÜûV Õ1åtçI¾Øôu¯ã¨ë8 :ŽÇtí1;ÚcvdVއìhÙ‘YA:Ý1;ºcv„üú—;fGwÌŽ˜_sï KÑÅŽ~ŸMŽ)÷âÊ Â¿Fþ ã(è8ÓqTuÔ‹x¡€oÅ„•˜/à[1q-d‹ ¶F4B»oÅà•ø!vnÅ|÷BõîɮׯF]ÇQÐq<¦ã¸ÕÑŸR)믴‚ŠÕ9\Š[Á/,¸~5ê:Ž‚Žã1·v¼½QV_q±YY }*vTçpiækE|—|Ò*‚{fc³GAÇñ˜Ž#¥£_]Ûó\áŸbXâG!AܷŸô™Ÿ¤_‡Óú-2¯UPt<æ3?-­ãº¨‚fÏT¢ˆŽÇÆãOr<º©Ëj~ä^L~ȈŽêz-­r­€ïÒs‡U’¨>Æž÷rŸ¼Aâ _(åc̃ø íy/‰Ø*?QÞ³¼=fy]`ʲ¼=fyv Ê»c–wÇ,/ðLùC–wÇ,/DùC æyƒ¹…Ü‹Óó&¡üÉÃêˆáùµyÞGm(åÇÏ+¯ðB¢½oÅ<—4ì…ƒ<ߊx!ÑÞëÅTǦãøG@G­€í}+ðY;r§ =ÈxLÇCväNA´b^H´÷­ÀgíÈÌÁñ˜Ž‡ìÈLµˆV À ‰ö¾ø¬ÙµéxÈŽìĹyÑoIÃþ¸𘤙rÜ +ì)Ðë8 :Ž»tŒæþ‰oÅÕ› ²íN;ùžë_ › z1ÅŽv§׉R¾PtToSÈvt{ìxË”Š½¸Â‚Ùb:Ž‚ŽãN‡Ü‹«:ª7>d;ú}ãññÔõºñÁ°õÔUHö/¿Í=ж€))Ýu÷ùLVÁï tãƒ-ËÙñØÜÝø`ŠÌ™Í1"vÜ=÷“zqUGæÆ‡±9!v<6÷@7>^¸S;º}vœT\Ýœyn|pÅ¢«wü;›{ l1€¡¤e’Øý+à׉öy¸ô¯_ëÅíN×Åü+ä3¯ìx–7EG·OGãŠ+½¸2ÏzŒ+$ û3ã>&»ú¼Úû9C1îYq…äkbÜ3ãž¡W/ ØÑî³£)1š^\z1ÅŽv§bÜ3ãžõW¶£ÛcÇësä«™ï Ÿg=Æ•íèöرqϘ_«1®lG¿o<>®3g(Æe‹ vyËÙ Iìþü{·_ç{‚¸?CëŒ^ @Ñq·Ï¬Šø3´Îœ¹uÆ$éèöé8­°fƒ®ŒG½€ŠøV ÀsżP ÀëżP À·bž+à…b¾ðŸ)à[1ÏðBæ«g‹X[o’Å|+ð¹Û­€ß$Úw_ºŽ£ ãxLÇQÕñ¢ÏVB»¿³Õ¥‹ŠïÅüš­ôbŠŽv§ŽëbþÍV}¶’ut{t¼…ŦWf+½€ŠøV Àsż)ïõb^(à[1D.à…b¾ð\1]-à…b¾ð\1qJd‹Ø—M!!iØ¿»pÕŠø>Ñ~MƒÙb:Ž‚Žã1Ç­Žs)Ò•+ëÅ;ºÖŠt:¦<ØÇ¯F]ÇQÐq<¦#eLJbž+0ý­! v§¼lÐg7žµêkúpÖ¢ÉnÑñ· ão³OG7kzqmó§Î¹dý>ãž?!ÎÅ?0Ë¥‹ $›‡Vü€×Qi­øAè‹Äû+Ú),0Ÿ¨ƒè¨ŽGi¤µÂ¡/,`îW{Ã3?¦aÙïQtTÇ£4ÒZÒ~è ØUaÀ'ćål*IÒ¡%IJ¯2}Üj5bâ'%M2ˆŽÇúú'Õ×sF¼±k;r{;îSÈ:ëëŸd_ÿÏu:Òëõ\¿×":ªs8«Ô=ûÐ¥¨ºÕéð|Œ+<ïæ ®XÛ‹ÓqøJùlÌ£ø íy7‰Ø(?QÞ³¼=fy]`ʲ¼=fyv Ê»c–wÇ,/Ä-˜ò‡,ïŽY^ *ˆò‡Ìó>sÝ)K®§çMBùSVO…çcÔæyµ¡”?¯¼ž„dóÐâ—8„£´Ðâƒlô„xUDZé8~FÇÐQKˆB²yh ñŸµ#7k÷ ã1Ù‘›œA´„ø $›‡–ÿY;rsp2Óñ¹©öDKˆB²yh ñŸµ#?£>‚ŒÇt;>îÿ½@ûlB|ªIWAHœ /¿Í=Ð 6!~ˆi¥ã(è8îóë˜}/®êh¹¾Ž±ã±¹ºsñ¦1xc;î{ŒK¹Wu$çž<p¡ v<6÷@w.^¸wSö±ãî¹'ÛÔ‹«:Òl7;ë3bÇcstçâU{^…ùñˆ{^ù¹çŠ{^õ˜BÖÑîÔцSy…bŠW}½–utût4¾ ©WÆã«¾Ê:ú}:>ŽÇWh-|e×Â’—ùñUð™×ßÇÆ#´ E$šÏsÏ+°öE$lîÅU¹µ0D‡Øñ˜Ï@ká+»† ÙÑî±ãò P/®êHŸ3åS‹{d;ókh-|e×Â,bG·ËŽóΤ³½¸ª#óPv9 v<6÷@káY_ …Âá ¬… ñyõDn8CkáYß 4„3°pæ÷ÎÐÀY_¯e;Úv|à×gh½>ë{²íN;ntÕ˜B¶£ÛgGãJ.½¸â×g}@¶£ÛgÇÇ=€3´pÖãÙŽ~Ÿçž3÷ðCLZÖk¡ÐE8ÿÞí׫bná Å|Á!fDÇ]>³×^\óv-Œ²ãîñ˜W1ÅZ õ‚!A(ZÁÀ BÁ  BÁÐ †®`H †„V0$|¦`HhCW0$ÙñA(Rg}¡`HhC>wûª Ûb_ºŽ£ ãxLÇQÕñ¢GJaF½‘Ò…”.P¤tÑ#¥‹°2]€HéQÇdã]ÕQ”d;Úv|ˆB.P¤tÑ#%ÙŽv§²?/P¤tÑ#%ÙŽnŸM¬éÅ•Yÿ¢GJ²Ý>;[V;(Rºè‘’lG¿ÏŽ‘ÒŠ”.z¤$Ù —ß»üúêØ%õâš_ë‘’¬ã^Ÿ™œÆ÷âšÏè‘’¬ãÞñèìêöþŠ”ôbEA(VZ±¢À+ B%Ÿ + B±¢ÐŠ© r±¢ + ­XQàŠÉèj±¢ + ­XQàŠ‰á_¬¨m EMÂû±Ëð­XQ芿ÚÊä‹=è8 :ŽÇt·:žJt«ãÑwöÂ~ô]ØoÅŠB_¬(†GG]ÇQÐq<¦#eÇí°¶6W¬È-•À;J*hÅŠ:ƒI«-a¾XÑƒŽ£ ãxLGÊŽ®LÂê+&ñ!5Ô‘íx(ñ¡+êtœèÓjâŠ}™·ëØ—¥»¿”¹beZW¢£Û§ãÜôЋÏ:ö³èý2~üöNoñøSÓ'¼Ž‹¸¤£4Ò˜2ׇƒ—^ÊlÄVfƒGÿÞÛî+qle6D 1e6zGAÇ×qÞ½ôyƒ®éȤÎùÁב&$³ÄVfµc6ñ^†(¶2íuuGAÇñ˜Ž# £=fG{ÌŽ¶ÚÑÊ:²£=fGnæ{Ôѳ£;fGȯ™ì5ØŽî˜1¿Ö’Ô;ú}v´!xÛ‹Ï:ò1nÔËl(vôûì¸ÕqTudËl¸Á,s¸Pz!¶2ÂJÜe*úâ{q%¢aËlXSÇ£¬£Ý©£µ÷ãØÊlˆ Sfc6ä¦ÝçÍ›t/ª[™ Ñgô2ŠŽ~ŸŽDZ•ÙÇ#}µp_ƒYtü-èøÛìÓÑÅ)¨èŵñȱ\¹ë8 :ŽûÆc±±Wuä®fŸ;Ú}v´ÎÄÜ‹k>ÃnÀ—;Ú=v¼ÞT¸_©âªŽ´_—“[JX(vÜë×Óx ½¸æ×ìµ½l¢ã1¿þø5[>ÇØ¥ÔfʾÄV>fSÞÐÊçÄ®¤ŠñÝW£®ã(è8ÓqÜêèO9Ü/"Sâg®Tæ bGÕ¯%oh%~zç§ß¾uGAÇñ˜Ž„çÙ9¯¿¢ãð8¤å}*ÅŽª_KÛÊ=êhOÙúøðÕ¨ë8 :ŽÇt)ƒ3«¯¸RIÙ,'/Q(Ÿ[©¤OúÌOƯóªˆmdJ%M‘ÙP ¢ã1ŸùÉøŒKn­#Wî¤Å¸²ŽÇÆãOr<ºÓ°JL‹z©$EGuWzb…RIñùØ~ÏóÞýžÁÙ¸A§÷R¾Pƒ`Ò*>ˆ ÞÏ{7‚¶ÊG”·Ç,oY^Ø!”?dy{ÌòÂÖ¢¼;fywÌòBŒŠ)Èòî˜å…Í&DùC»PÏ{w¡3Ü/2Çgij«üu®ÌþAüÀöÔóÞí©­òãç•×K%E¡ Ql¥’"WR% ‡±•JŠB¢¨—JRu›ŽãgtµRIQ(C[©¤ÏÚ‘›µ{ñ˜Ž‡ìÈMÎ Z©¤(”!Š­TÒgíÈÍÁ=ÈxLÇCvä¦ÚG­TRÊÅV*é³vägÔGñ˜Ž‡ìÈOœw¶ˆ1vÙ£J/Ä`ò±„E2÷W.ã ´GÉ–ÙHqyÒMÑÑîÔqVç#/Ðþß ÷Z¨‹ÒÑíÓѸ˜R/®°7&2dv Òvã+°gþ¶ë|Yí¤¼B{æL:þõZнë8 :Ž{t´Ù­¸ã+4Ùtü×:òv´ûìh­7±WÆ#›ŽŸÒRYT±£ÝiÇ!¡Wudž²>ÄŽnŸM iƒ®ú çשžÈvtûìh¼¹'(ÄWЯµt|ÅŽ~Ÿ÷õ_¡}ý³~~,¤íÆ3p~ü˜[ëzqůÙtüGGAÇq—ŽÑ¯Vâ–Ž¯è¨žqËv´ûìhJx°#2÷°éø:Ž‚Žã1G@Gõ^¶£ÛiG_ŒéÅ¿fÒñ{GAÇ}vtnE¼[:¾¢£zW@¶£ßgÇǹç ÝàÓñ]…4òxþ½×¯“I¶×üš]¯‡¥T’¢ãNŸ™b\›{qÍgصÐ-É£ŠŽ»Çc\mÁ¡µPOÇB:~léø‘KÇB:~ÔÓñ£Ž[:~äÒñ£Ž[:~üL:~léø‘KÇBþWäÓñÝR¤* éø±¥ã¥ãÇMª{÷Õ¨ë8 :ŽÇtU/z¤$¤íÆ )=¦›–°ŠB.P¤tÑ#%!ý9^€H©KÇfƒ®ê¨FJ²í>;šbîy"ñEJ=R’íhwÚq ŠK/®ê¨FJ²ÝN;Æa)] Hé¢GJ²Ý>;—;G@G5R’íè÷Ùñ1Rº@‘ŸŽïâ²(¤‘ÇËï½~Ýjº@‘›ŽŸŒµˆŽ»}&E׋k>ÃGJ. :î~}«òEJz:~ÒñcKÇ\:~rÕ£žŽ…tüØÒñU9? éø±¥ãG._FWÓñ£Ž[:~äÒñÅpŒMÇw¶v¯¶ß]¸jéø±KÇŸtÏ_ºŽ£ ãxLÇq«ã©LÁF\}Å\Wqa©<¤ØñÐ¥°–Žÿ ãœ?¬™tü^ÇQÐq<¦#eÇh‡û‹Ü‘KÇ?ùêÈv븙ùV#‚¾„àN),‰RéëoAÇßfg_ÇhB/®GŽûZª% e'R+ßúÌÕir/®êhi;úä"bǽ>c‚³½¸æ3\‰‘)¼·ˆí;Î:®ÏS+1¢èȽ P–DRÅŽ»ý:¸Ô‹k~Í”A™”ÌÝ>;›RéÅU¹˜/–‚ØñØÜó™{¾soÊ{¿\ÜIB±”ÔŠ¥ð:>Þdö!ß«v¦V,E´#S,¥×qtwéh†{ öÔŠ¥È:²ïŒKù·$\gO­X ªct«*²©KIÛ§ºuuGAÇñ˜Ž# £=fG{ÌŽÜÞëxÈŽö˜¹9üQGwÌŽî˜!¿fŸúíèŽÙókæ"ÙP¼Eìè÷ÙÑã7èÚNg£ô:Ž‚Žã1GUG&‰}âÍ~IOBÒpjI켎RdØ’ØÓCJR8%“ÌÃW£®ã(è8ÓqÜêèOauˆšØ$vW2dGu~”"ÖÄÞëhË}9±Iì:Ž‚Žã1 ;N, ¯¢#.‰=„X,bGu~”f•–ÄžúñœýÃW£®ã(è8Óq¤tt«S§Ä$±™ Î-s¸ØœZû'}æ'é×ñT’_ëÈ¥×ùÌOKÏ=~µÓž¹³ç‹èxl<þ$Ç£›}XÍ?™µÐº 騮…â R÷ÙuœºzXí\=‹ÃŸ÷Åá×3zq:ÆýB9“÷Cy?=ï Ð)åÇ#ÊÛc–·Ç,/Dî˜ò‡,oY^éåÝ1Ë»c–b}LùC–wÇ,/DùCìày/;¦E5ôâô¼I(?EÆÄñ´áy/mØ*?~^y=‰= â©%±'.Ù5 P©%±'!A<éI쪎cÓqüŒŽ# £–Äž„ñÔ’Ø?kGnÖîAÆc:²#79?‚hIìIHO-‰ý³väæàd<¦ã!;rSí#ˆ–Äž„ñÔ’Ø?kGfFÝ€ŒÇtËyƒ®°·ýŒ[ÖÑïÓññœé:ã~áÞ½µ`izÎÂ^~Ð7SøÁžrY®z'¡`AzθuŒnµýq¿p‰ö1ZÈŽÇ|:ãf‹SäèbG»ÓŽ&æØ‹«:’~O>.Wæ;ókèŒû…{Á.䥨bG·ÏŽÆ ÷bòé:ã~áíC^Š*(v<6÷@gܯìÜã–“P ½sÏc‘cï÷Ó+4÷¼rsO1uR(ª^¹çµK´7±Wuäæž´ú ºª£Êd;Ú½vV¬ô q¾ÈÇƒŽ£ ãxLÇÐQå3²Ý;Þ ø^\ñë3÷’ô£Ž£ ã®ñh¬r/®ê¨r.ÙŽ~Ÿçž3ĹÎ,Ÿ±õLQ(N‘ο÷úu°yƒ®ù5½^ÏJÑÑîÔqH«÷ ­×gv- ƒGtÜ=ƒõ½¸2õ"I(ò‘Z‘ÄùHB‘¤ùHB‘ÔŠ|$®ÈGŠ|¤Vä#}¦ÈGjE>Wä# Y¥‰-òaÂ’Ë’„"©ùøÜ ˆVä#mZí¾uGAÇñ˜Ž£ªãE”„béDJ>Rº@‘ÒE”„¢ éDJ‰ö!®îÚ\ Hé¢GJ²í;^Ë&­Vø )]ôHI¶£ÝiLJ]¬ )]ôHI¶£Ûgljç'Û‹+³þE”d;º}v46®˜äŠ”.z¤$ÛÑï³ãc¤t"¥Ëo}î˜äå÷±¹Ú!º°Ñœwù®ã(è¸Ïg¢‹¦WuÔçÑŽÇæh‡ˆ-–’mHˆ÷Î=&¬.œ\ ˆóBï¥S©e‰;›{ ¢ ÇÁ#vÜ=÷¬J'§ _ØÝi[3‡d;›{ "½èLŠÎ¤Vt&qEg’P‘%éEg’Pt&µ¢3*ˆ\t& EgR+:“¸¢32ºZt& EgR+:“¸¢3"=xg/H—Ú½BqŠô~ì‚t+:“ú¢3á^­+±]‚©wðd]n]u¬¾úÉ\TrÓ”¸xƒPˆ¤Šw:Î9“ÁeÚŽfµüýl•ú"æþ¾èõ«Q×qt$—–SŽÓqtôL"NKˆ—í¸·¯®÷´‚.:Ϋäʳ˜‚.½Ž£ #mÇb¦ã¨é˜™âþ”|¸Í=YH’έøAæì˜“¤Ý•^|úª¿óžÌú+˼¬—Ð[ÑÑîÓÑšâ}/>ëØÏ¢÷·óWîå€0”€èèöéhb¾WÏ-i?ofѸ֑ö™ÂR AÑÑïÑñ!<ØÑWûQ{~3›l>ÇEG!Ù<·ds^Ç.Ùܹ¼AWìÈ&›³lìgáÚynÉæ¨Ž1¤û!wnÉæŸéuuGAÇñ˜Ž# £=fG{ÌŽœ_÷:²£=fG[í(êèŽÙѳ#2÷°Éæ¨Ý1;b~ͼ‰hÜB©;ú=v¼Îâ)÷âÚüÈ=}ø¨ã(è8ÓqTuüóƒI™¯›Þtü“ßr¬ââ:óÐ×®ÄûA|WbŠ?¹múi=HˆŽvŸŽÖùûëXU\‰)þä¶À©1…¬£Û§£™è”éÅŸù“Þ^ž÷3Ô×~Ž}Lñçâ3r¾¢nÑQˆ{þü½sÃm/—º®ØÑî³£µa𽸪#æ¥0 vÜí×eH½¸æ×ÜÖí‡[DÇc~ q¦¨‰9 ®rW¡ˆDnEMx%ohEMr_ü Þ‹šd¦¨I¯ã(è8ÓqÜè8W?XZ¶¨I¨Å;ª~-yC+j’»¢&.…ǯF]ÇQÐq<¦#aÇë%—°úŠ)j’ÓRxE±£êגǶ¢&¹K™N«7´2[ÔäQÇQÐq<¦ãHéè}^}ÅŠ÷ÑWŸù)Øñç1¿þIúušì¸ZÕÙ¢&ÆY‹èxÌg~’>¦éñþžd拚„bÇŸäxt¡Ö:ÒœËæ¡¾V×q©{ö:š¹&æj?¶ßó¼w¿ÇšÕk¿ùYÚïùB9SX=©“Ÿm=ïÝÚ*?QÞ³¼=fya‡Sþåí1Ë [Gˆòî˜åÝ1Ë 1*¦ü!Ë»c–6›åíB=ïÛ…º–÷/±§çMBùSÌÎ<ŠØžzÞ·=E)?~^y½¨I †äVÔ$sŲPX ·¢&Y(’õ¢&ªŽcÓqüŒŽ# £VÔ$ Cr+jòY;r³v2Óñ¹ÉùD+j’…‚!¹5ù¬¹9¸éxÈŽÜTû¢5ÉBÁÜŠš|ÖŽìŒÚŒÇt†Ò‹+ìíEß×—uô{tì÷ÿ^ }}¦¨Éõɉe¯W(~_~܋kã‘}¸#'s×qtwé8äûã"ùÚ×g‹šä¼<€¢Øq¯Ïgs/®ù {m¼Ô=sÙŽvŸ­Y•¦Î/оþ ·¯?xÙq¯_[l/®ù5ópǬ¤GìèöØñšlm/®êÈÜí³9zÄŽÇæèìáU_ _…ùñX ‹šäáž3YÅ¿~Õ×BYG»GÇëa؃…¿~Õ×BYG·ÏŽ&¸Xzqe<¾êk¡¬£ßiLJñø ­…¯Ü·/~™{„bùõ÷ÞñXâj§ùZ _¹µ0Sî:Ž‚Žã.­)¶WuäÖÂ3bG»ÏŽvŽ¡×|†=ãvdG»ÏŽ“‹ëÅUÙµ0&ÄŽ{ý:Îôâš_sob1Avtûìh\r®Wuäî¹×ôMÅŽÇæh-<ëk¡PŒ#Ÿµð̯…gh-dŠìô:Ž‚Žã.‡Áå^\ÕQ]¯e;Ú}v´.¯NØÏÐzÍÙyÔqtÜeG;D—zqUG5¦íèöÙÑø\6èŠ_³EvuwÙÑØœ7誎jÜ#ÛÑï±c?÷œ¡¸çÌÅ=ÓÒ¿p…³0?ž›{ ¸çÌî¸Slòù÷î¹g½p†âž3÷$S×BÙŽÇæ(î9ó…MmBì¸wîyØ8CqÏ™+.Xœ‡ìxlîâž3÷Øà;îš{ú=€3÷œ™¸'–’!¿>6÷@q^ô) EŸr+ú”¹¢OY(ú”õ¢OY(ú”[ѧÌ}ÊBѧ܊>åÏ}Ê­èSæŠ>e!«;3•&Ûm@¡ Rn•>wC¬TÊ}†êú«‹ …WòˆŠŠ¸èí]iÉEŠ…6ùDÅ:šõyûŠŠ/zT,ÛÑî³ã\QÖ÷âʬÑ£bÙŽvŸ­Y•.Ï(*¾èQ±lG·ÏŽ&øÕÙኊ/zT,ÛÑí³£qëlä _ô¨X¶£ßcÇ~eº@Qñ…‹Šm2Ëê)^É—ßÇæ(*¾°Qq¬™¾B›|ù½wî±fu'àEÅlA¥}Bìxlî¢b¾ R*±ãî¹§øÔ‹«:rQq\ÞºRìxlî¢â 2æ ñ¸{îIƒïÅU™ÝÀ!¥ˆØñØÜEÅzA¥,TÊ­ Ræ *e¡ÚPÖ *e¡ Rn•T¹ R *åVP)s•dtµ R *åVP)s•ÄЛ)¨tŠƒ[^iÎB‘ü~,9£TÊ]A¥8Ü *e¶ Rl›æ²Ž‡’3ZA¥GO%…Õ‘™PP©DÇCÉ­ R§cÊCKèéfbˆX_JÎh•:Mò«tF®мQ·xƒP(·B@ù± R0éºHéxF1·B@*8D÷ðÕ¨ë8 :’KË©„€é8ª:þÒéªtƒð×®~P—$çéæŸ´ÿ ¢«¿t*(ëh÷éø˜´ÿ ¢‚¿tš%ëèöéøx¡áD³~éFÖÑïѱ#~Aæ÷ù'³—S]Èÿä—©YüI?·OÈ&.¿“AÊWŽÂd³„µå+2Vñé+n~,]aª¼*Xŧ¯zŸ‰÷Òyå+M&*˜—ÅŠŽvŽ7‚à{ñYÇϬuäBo›¢£ÛgGãüýp¶ŠÏ:n|æÞ×ßÞéDn2æSLŸð:.â’Ž}JÅ4÷5ñïOL*gHË1WùΧWq ½+‹•í½¼XW,Ä”îêuÇ]:Î÷{zqMG.•3ß–ÒYÇ_‚k*'ªcÌ«ë=¥•î*ÛlÈǯF]ÇQÐq<¦ãèhÙѳ£­v´²Ž‡ìhÙ‘›ùutÇìèŽÙòk.›µ£;fG̯™¤É¡^-Tìè÷ÙÑ$s/>ëØG41=|5ê:Ž‚Žã1GUG¦¤Ê©ÌïgÞtJX”VR^åb•VR¥t%UܪYaJªô:Ž‚Žã1Ç­ŽþTÊ*6cKªø¸¼Õ¨ØQ¥xª•TéutîÎ [RåQÇQÐq<¦#aG71ï‡ñÈ•T Ë^—bGu~”f•VR¥ô%UÖ‘_RåAÇQÐq<¦ãHéè]¹Çá\I?Má SÊl”VRå“>ó“ò빦ÊâÃW£®ã(è8Óq¤æcÂjDùCLðy¼–a¦§çÍ­òËYÓƒøŠø¼"RÊŸW^/ŸS„Ò4¥•Ï)\™"J”V>§¥iŠ^>GÕql:ŽŸÑqtÔÊç¡4Miås>kGnÖîAÆc:²#79?‚håsŠPš¦´ò9Ÿµ#7÷ ã1Ù‘›jA´ò9E(MSZùœÏÚ‘Q;ñ˜Ž‡ìÈNœ+¶ˆ‰KÉÐ"”^(/Àiác ‹T¼ëÅÌ—ÙˆKjˆ¢£Ý©ãPÒ]a˜\ ‹ù¦žAtt{t¼šÔ‹+ìMÇ7ayå²i»¥¥ã :¾v¥iV;)-_ìk6ßÚ%¼éÏåiäe•Ž_^¡ñȧãÇå’bG»ÏŽó׋+ã‘OÇê~‹lG»ÓŽÓâ{qUG.ßXÈŽnŸÍ4M/®ú —–æ–g¾;º}v4.fÓ‹«:2ii©¬uäíè÷ÙqC´½¸²+sæ^IŸhÖ¢£Z\Zª» ãcšdZ•/--Õ]ôk>Ü`:Ú:~µ¶4rÑg„íÒÑíÓÑØ¼º•ÒR´Åñxæ^ÎÎ~I‰-Bšd9ëL—Zœî \å ­3Lúóu54wGAÇãq÷œ¡u†MŽa)‹¯ØÑî³c7¡u†Ožœ±ãnŸYÇfghaÓŸs bG·ÏŽÆ¯n?–3´Îœ¹—³K;?–í¸Ë¯ûøñüókfña­#oG¿ÏŽëÌZgôôç"¤?—–þ\¸ôç"¤?=ý¹éÏ¥¥?.ý¹éÏ¥¥?—Ϥ?—–þ\¸ôç"ä`”9™|ø¦¥÷•9ý™‹øgOJñé«þ>yÿÕ¨ë8 :ŽÇtUߘ;÷ô¾é^Ç·cw:™ñuœ&$’–– .øx—|mï¥"JKíÈ'_LG»OG;Ø{qeÍ›HG·OGVÉ®¥%6‹ó9“4l§ ¯ò/YG¿OÇÇù¼% ‹óù…‹%K¬gÉBra¹ü>6¡X’M6Þ®tÇ]㱘{Y¹rbI>iØÕµ[¶ã1ŸbI>i8TÞ ÛÑî´£IÞô⪎l)! v<æ×P,)$ /…H;º}v4.׋«:2±äDm bÇcsKêIÃEH.-i¸pIÃEȨ-zÒp’†KKVAä¤á"$ —–4\¸¤a]M.BÒpiIÃ…KÖwöE·TÃ!‘´¼»~Ø’†K—4<¸Õ&å;sý°Óqté8’:«Í56±9„:†d;º~Ø›u<%ëËãW£®ã(è8Ó‘°ãDœKZGîe¼R¯öÉvA<•ûWz‚xÄKK/\‚x’¯KK/BòuÑÄ‹ ^Z‚xáÄUGUÇÿ÷Î̹«Ÿ‘ÿ¿F–ÿß;uÄN]й§U—ß úÌÔŽþ»¡ÿ†ÑÝÝBÿ÷s¤â[ò§„¾ˆŸçŸônY51nЕí„¹Í k¸,éøo³Ð¿¨…¾¬.=ØšL"¡›†npô¥í?¿}<ß"ŸÏÏß>ȉäíkÿ‹¶›7‹ÿµˆÿõ9ñ¿ñ¿añS-¾û¶ùê¶ù–6¿¨ï¢Ïâ/ úËç”]Ä_9q¿A¯u‹VâoqóÕ•“ʇ­xÙŠ¯¾:/:ž9‹ØÄ‹ø¼‰uêY‰¿…ÍWieˆq9»/e#NY{‰ ~ÎIì_ç¯~ýý˜tw“¯ý/î†¸Š›«¸áÄ"n¯â–·Š¸»Š»øé:Î…í/ìFüÃ) þ â·ëº\ÿŠÛ_¸­x"¾º6Ñ+èá*þu+n®è߈_lÅ_9ñÜýâw7Y‰—ÍWþEùxÿ¾wWñ_w+þBôâ=*èé*þÄ¡Ÿ7¿ˆa#þ‘|ù“ÁY/WñgB•«ŽÊoÄû’ ßN§ïWÿþuþ™8ûïïþÿ{¿úøwÉEüêãß-'nñ«“~wœøæ“óoÄÿ Û¯ìú««“~÷ˆßŠûøqûÕÕÇÿKÄ/ÖâW/û8ô¯[q³ÿïñÕUüÏÝWóLp/›_Üt¿:é÷È)ÿ}#î¶âÿýA€\Å_”Ž»:é÷Ä¡?)èWñÿΛ¯âÃWWÿž9?•|uÒï…VЯâÿý%´d">Í_ýù4ÿL€LSø¬Ž³øÛUüwŠøÿ]Åÿÿ?Eüê¤:NüE¿Žà?'þ,ˆÿ¹Zäþ¤§ððô';»þÙV©?8ñ¨ˆ×äOnáÅ_VñÛ ¿½ˆâ5~{áâ7Y¼Æo/\ü&‹×øí…‹ß^XçYÅo2Hß^¸øí…œ_VñÛ ¿Éè5~{áâ·vr~YÅo/\üöÂÆo/«¡ýÂÅo²ò5~{áâ·vixYÅo/\ü&£×øí…‹ß^Øyóe¿É Õý^§·â5~{áâ·vÖ~YÅo<ÈëÊÇ_9Å«¿r>.‹Wå|\¯>þÊùø+ëã¯+—Aª¿r>þÊúøëÊÇ_9—Ñ«¿r>þÊúøëÊÇ_9e}üuå㯜ËÊWå|ü•õñו¿r>.£Wå|ü•õñ×•Ë ÕÇ_‘'ë¶âÕÇ_9e}üuåã<ÈyåãgÎÇÏ¢xõñ3çã²xõñ3çã²xõñ3çãgÖÇÏ+—AªŸ9?³>~^ùø™óq½úø™óñ3ëã畟9?³>~^ùø™óqYùêãgÎÇϬŸW>~æ|\F¯>~æ|üÌúøyåã2Hõñ3ò<ÓV¼úø™óñ3ëãç•ó ?Vû0?¸}˜ëC›ì\ÛÕ¿Š×}˜Ü>Œ,^÷a~pû0²x݇ùÁíÃ<ˆÇé¿´ÿ/<~eú¯ê>ÌnæÇc¡‡NǺóƒÞÊHÄ/Öâuæ·ó€>ä½îÃl¿Zöañüø•?[öa~t‰ÛéAùºóƒÛ‡ùÑ]D|´|݇ق,û0rÇÕ}˜Ü>ŒŒ^÷a¾ ¾ûªîÃüàöaä\÷a~pû02z݇[Ò6R~p)?ؽˆ*>nÅÍ}Á¼¬‚… ,\Øyè² .\° ‹×`á ²x .\°paƒ…Ë*XAj°pá‚… ,\VÁÂ… dô,\¸`á —U°pá‚… ;]VÁÂ… dåk°pá‚… ,\VÁÂ… dô,\¸`á —U° ƒÔ`ႼZ³¯ÁÂ… .l°pY <È?«`á.Xø‡HþY ÿpÁ‚,^ƒ…¸`A¯ÁÂ?\°ð{hóÏ*Xø‡ þY ÿpÁÂ?ì¡Í?«`áîÐævŠøg,üà ÿ°>þÏ*Xø‡;´AÄs÷ÕêÐæÖIÿY ÿpÁÂ?ìþg,üÃÚÈWƒ…¸`AF¯ÁÂ?ìLðÏ*Xø‡ ä\ƒ…¸`AF¯Á‚Ø’¶ŽÿíãÿHSD[ÇÿáÖqY¼®ãÿpë¸,^×ñ¸u\m—Aê:þ·Ž‹NÚÖñ¸u\F¯ëø?Ü:.:i[ÇÿáÖñØuüŸÕ:þ·ŽËÊ×uün§ˆ¶Žÿíã2z]ÇÿáÖqÑÚ:.ƒÔuün—Åë:þ·ŽËÞ[×qä×JÇ_œŽ¿Xñ²  v+«0 pa€,^À…²x  6 («0 °IY……  ”UP¸0 °3LY……  ;E”UP¸0ÏÝW«0 °>^Va@á€Â:@Y…… 䎫a@὆…HÊ* (\ à. ÑkÀ¶äûs»küDør½„üý™ÓqÿKÿKÿ›?Ýöž¿o~aòVüoä*¾yõý~×x¯w¿m¿º¡oÕªÕª×â/bë䯛¿us“çWHßSbžÏLZÈóYo)1Ÿoë ,~O‰¹‹¿}Û|USb6¿hËÔ$ÞÖ™Ï)ßRb8q¿Ao)1wñ·¸ùª¦Äl•[ñ²_}ÕRb8‹ØÄ¶6àMlkÃ]ü-l¾J+C´µ±ñR6┵ëì<>·ïæêLöÎÔļ›ï¬3M_ù÷xñŸ¹‰ÿx"Hx¿M ás 7ñïVIïé ’>rÿñžDüî¯ ùs 7ñïžùøú÷4¬®1Ô׿Ÿ™í¸‘ÿsüóº›GTŒnËÉôÁŸÜÞÄ'?Es ä:8?Œb\Ç͇U@Ü1eÿPñÇ@®ãæÃ+ áÈ•Ä$Yø’Ž,»v H>reôýããr dÙÛ@L›0 7aa°MÜrâVwMÜqâN÷MÜsâ^Mê¯ŒŽ“¸gЯ/LÑ‘‚î¡'ýZnƒþ»½ø&:ªè?‘1ô“Eÿ¹C?9 }ûxþúV.×ݵýEfñoo_¯âßö—]˜ÅŸñ§Ï‰ÿñötÿƒÅý›»Š{N܉âáÍ_Å\PáA<¿¥«xæÄ“(^ÞòU¼pâYûún.T]¥4äH[þ[ñiªU@ì…)ì {± ˆ£[R \Á»S@< R¬ÍÈu¨¼{$\¨ê1>D $\A‚É–Dk1sÅ+HT@ lÄ@®®ñ.zÀÛ72Z8Åìnµß¾‰ ßj´ -ÉÉ€ ÄÒC8 ~òŒ{N>› %îÑ@è–Äk âŒßHgœýìxÄ¿‘Î8—ŶXKgüFFp_ækÉÁi ò,¬‚\DöÉPÀŽG<þ‰ôøiöKÀû$‚óü$C ˆÇgf‡;úA<>“oO~0XÇ#ŸϦD ä‚€0›j.aæB<>3aêP rA@·ha ˆÇnù ËFgA 䌅uÆ…i ˆ3Ö]‚@g,\˜š=f.Ä ·2ÆeGAü¤0‹VÎ A†pÑÂT DÂO=™__ß©õÄ-*Oæé/¤‰ÏIò‰ ß(/&Ÿ"òíý–p/ƒ<‘-)§ˆ<½ßrÖe‹3ª ßßoiù2ȈM§‚üñ~Kñ—A^H¸fª /ï· 2È+Ùñéä°Ñõú~«¡ ƒœ áóû­& bè!ìnë‰ bÞoÕ:dK‚äSNˆ}¿ÕôA Nk‰{¿UþA<9ºò’q¥‚ø÷[å$Ð}‚¶$¼ßJ•È ‘]q9TAâû­T‰ ’ŽùIz¿U:‘A21så÷[ݤæÐ>)ï·²'"ÈÛEkš¸Š ò“«ø\AÙ.Z.N„¹.Zÿ)‹ÖÛEËM·äºhý§,Zÿm­èNf@A®‹ÖÊ¢õßvÑ þd r]´þS­ÿ¶‹V0§¶Æ_ÅçÒ2ÈvÑš¦ùbC„–ß«ø\¼C9Â×Eë?eÑúÏ 5×uÑúOY´þÛ.Z&ÍOBbÓÊU|.&#ƒl-cN6¡}r]´þS­ÿ¶‹V;Ìu]´þS­ÿˆEËͯ¥‚-¹.Zÿ)‹ÖÛEkŠQSF[r]´þS­ÿÒ1?¹.Zÿ)‹ÖÛEËøS (ÈuÑúOY´þÛ.Zö6º0g¼.ZÿÉ‹–e™–½­ñV±Ó²4ÓšHЭh Ó²,Ó"‚0-K3­/6œ‚0-Ë2­…Îi Ó²4ÓšÈïÇ« Ó² ÓŠK† ‚0-Ë2-p#LËÒLkZRr†@¦ei¦eì©aZ–aZùT°ŽG˜–e˜–]Ž6T„iYšiMæJ˜Ÿ LËÒLk2Wr´,ô`?A˜–¥™Ö°DlîB˜–e˜–=lt!LËRL+œò#4ÕCLËRL+Ÿ²rFˆiYŠiMtn@A¦e ¦å§µ7¡æB˜–¥˜–»åÇ@¦e ¦åöt<´,Å´æ9%Fhª‡˜–¥˜Öž– LËLk2—‡0´,Á´¦–Xxt!LËRL+M |Äæ.ˆiY‚iyrm ´,Á´¬Ÿx´O¦e ¦eâ);Ô\Ó²ÓÚã'Ó²Óš¢ˆdQs!LËRLË"ìŒÓò4Óú2õý Ä‹ bZžaZH‚@¦å¦5Ô£ aZžfZS· LËÓLkâŒA˜–gδÂRêSA˜–g™Ö­dª ‚0-O3-|#LËÓLkfØA˜–§™–†0Ö„iyšiMëVÀúaZžaZA˜–g™–Ç<aZž9Óš:ë„iy–i~‚0-Ï2-‹ a„iyšiͧsØ´‚0-O0­/óŽÚ’Ϩ@LËLk¿C²…@¦å ¦5o@FaZžbZÓ<ïP„iy‚iMœÑ[aZž`ZgŒ0´<Å´Ì\Ú]ÓòÓÚ5„¦å ¦†S2¨¹¦å ¦å§Ë£ ÓòÓrþd¦>¦zˆiyêL+Ÿì€¶aZžbZnbZ(´Ä<a¿a¿ð´‚°ß@³_gêeK a¿a¿ÓèòÂ~Í~­?yÌ\û 4ûuvIdUAöö›OAØo`Øï‚9#Â~Í~q?AØo`Øo\’&U„ýþœ[öö;!Øh#4 Cì7ìw¾´2Ø9#Ä~Á~¿ØSÉhKöö;óxo#Ôñû ûëPs!ì7ü÷'uHcá>¹ÿ)ÄÛ@"æiGA®ÄJ Añxs2í„Ç‚Ç_Ñ– <><~—3"<><>Ú)²CÍ…ðø@ðø`O ]÷é# ‚ðø@ðøèNAx| x¼ §.„NJLJS6(ÂãÁãwù ÂãÁãÝœƒ‚ <>Ð'¦¦  :ÿûé+Íã'ùúô7 RÅgÿ·ò)Håñ2w75%¤òxä;s~²$¹h •ÇË 0G©<^ù“Ù[¹e˪ •ÇË ÏŒ¹–ý. ¤òxä/ft-‹–Ry¼ Bòx—PsU/ƒ¼07:ÌO*—AHïÔã+—AÎǦ•Êãe’Çû).Håñ2Éã½G;¾òx„äñ~.WT/ƒÐ<>/™þ*Håñ2Éã§e>b}Ry¼ ™‰[¡¤òx$ó“Êãe’Ç;W˜5Êãeú{âXK*A¨Sì«+bÎØx¼ Ba˜/¤òx䉢sÉZ´—A¾“G€©<^ùƒŠ…]BA*—Aˆ@§`Á>©<^!‰ÉK Ry¼ òuïÔ\×@â?% 6 âɤnÈ ¯Å6pKêf r>æñu³@Ù®'Éž"Ü’JLeíz'ÎQJLet¬O*1•Aˆõ$¦S1`ŸTb*ƒëIœfaÔ+1•@€ò4ˆˆ)PžFAˆ)PžFAˆ)PžFAˆ)PžFAˆ)PžFAHPžFAHPžFAHPžFAHPžFAHPžFAHPžFAHPžFAHPžFAHPžFAHPžFAHPžFAHYž&̦B}‘ ¦ÔRfVA¢z²<Íž!ŒDõdyš4Ÿ˜‚ õP!ËÓØŒ‚Ô#@„,O Ú'õP!®òÆæªG€2Yž& hK¦E–§qs@ýaZdyš=~‚0-¦A˜Sž&ÁΈ0-Ç$MÎ ðĉ bZ޹léëíA aZŽaZñt{RA˜–c˜Öœå LËÑLëzƒA˜–£™ÖAÞÞÓRA¦å˜=º½cª‚ LË1 zðF˜–cÊÓÄSÀÌ…0-Ç$虚\¬ LË1åiòiÀ†0´Í´&„y<´Í´f7ÁZ‚0-Ç0­ùA˜–cô`?A˜–c˜V©8´ôb­¥ LËQLËlHËÙ¯1-G0­ùê•EA¦å(¦5«@A¦å¨‹}öú3‚0-G0-oN6¢ ÓrÓšSe3 ‚0-G0-7œÌ24„!¦å(¦µg#LËQåiüÉÂæB˜–£ÊÓL—AÍ…0-G•§I;Ì…0-G0-7­XA˜–#˜–·;üaZŽ*:¿Ÿ2´üBLËLk—Ÿ LËLËÏ÷úP„i9‚i]o>£}‚0- < ¦”§‘A¦”§‘A¦”§‘A¦”§‘A¦”§‘A´6 < ‚¤µåid$­ (O#ƒ im@ya¿@ya¿@ya¿@ya¿@ya¿@ya¿@ya¿@ya¿@ya¿@ya¿@ya¿@ya¿dyšpÊ¡ Ä~©ò4ó9yAAöK–§‰ÓŠ…‚ ì7Ðì7º2@~±_²<;e‹‚ ì—,O“&~‚‚ imTyš4u¼GA´6²3åiBMšÔ@Ÿ?Ôz+Âã3Ãã‡J‚4„ÇgšÇOA¤ÏÂã3Íãgsáñ™æñ¶ii ÏLyxZAx|fÊÓ8´%Ï4Ÿo):áñ™æñ.Ö›ÏÂã3Íã}<9 áñ™)O3œÖ'ÏLyW‰©‚ðøLóxÜOŸi?/óØTðøLóøù"Ö„Çg‚Çû¹(QÐ, ñøLÝ&¦…‚ <>Ó÷…½AAŸ ?Q‡s€¦ˆÇgêÛM‹ Ú„Çg‚ÇOœÑ´%ÏT™Ùùf ‚ðøL”§‰‡;)O“ÿÛ~â' r $þS bGb6WBÍ…ìHdbG"ÌÚdG";»¦dG"ìw6 ‚°ßLÕÀ)' Ï]ûÍûÝÕ'ûÍû@<ìŒûÍûõs¥ a¿…e¿KpWD±ßÂff.˯‚°ß°ßP¯Ãi û-,û5AØoaØo®yZÂ~ Ã~}½Ñ© ì·°ÅY#‚°ßB³ßù$AØo¡Ùï|ÙAØoaN±ËÉ$a¿…a¿ õx„ý–ý‚ û- û…GÂ~ Sœuй‚°ß°ß\ Ri û-4ûí…µa¿…a¿öd±>AØoaîpÏ¥È „ý†ýÂ~‚°ß°ßRïHh û- û uËVAØo!د›Ó? ¶ÆCì·Pì7OÍ@Aö[(ö;¿h4 Cì·PÙ²ÓŠ5 -AØo¡žM' › a¿…*ÎZN~êxÈã!ö[öëÌt¡}‚°ßB°_gwô Â~ Á~§!à– ì·Pµ¢¦ÅÄ -AØo¡Ø¯&.´%û-ûÝ5­ ì·Ðì×Ã-AØo¡Øï’Q„ýŠýîé„ýŠýNäž ö[öæwÝQýþ@*Àþ`A~¬*ÀþAÔ °2He¿2ˆZV©ìWQ+ÀÊ •ýÊ jX¤²_D­+ƒT¦%ƒ¨`eÊ´dó±!\™– ¢V€•A*Ó’AÔ °2HeZ2ˆZV©LKQ+ÀÊ •iÉ jX¤2-D­+ƒT¦%ƒ¤c~R™– ¢V€•A*Ó’AÔ °2HeZ"]Ögï!Æ´dou" R™– òDÅÂnIeZ2Y6¤2-„¬;5©LKy¡‚;7xM-ª—AˆEkN\O>@ 5ª—AÎdžpêe²¬‡‡p½e+ƒ`CAAê-[„X´Œ9e öI½e+ƒ`qsÕ[¶2µhͱ Ø’Ê´d²¬s¨ŸT¦%ƒ¤c~R™– B,Z&œì‚T¦%ƒ`§Áv|eZPV±Ó*ÀÊ Ó*ÀÊ Ó*ÀÊ Ó*ÀÊ Ó*ÀÊ Ó*ÀÊ Ó*ÀÊ Ó*ÀÊ Ó*ÀÊ Ó*ÀÊ Ó*ÀÊ Ó*ÀÊ Ó*ÀÊ Ó*ÀÊ Ó*ÀÊ Ó*ÀÊ Ó"+ÀÆÓà£Öˆiq`3 ‚0-¦l‚[‚0-ªìür¢AA¦ÅT€õ ‚0-²잎G˜YÖ H@L‹¬»§%Óâ*ÀÂCaZLØ.„i1`}@ûaZLØhÑ– L‹«[P„iQ`'s 5Â´È °{üaZLØQs!L‹©›'g„â.ˆi`%1- ¬ ‚0- ¬ ‚0- ¬ ‚0- ¬ ‚0- ¬ ‚0- ¬ ‚0- ¬ ‚0- ¬ ‚0- ¬ ‚0- ¬ ‚0- ¬ ‚0- ¬ ‚0- ¬ ‚0- ¬ ‚0- ¬ ‚0- ¬ ‚0-²¬=Y¬G@ ¦EV€Í'oP„i‘`ç8(Â´È °æäa„i‘`‡“ ÁBCbZdØ)àN(´¨ °v~EA˜YvÏF˜YÖlBA¦EV€)6j.„i‘`ãs!L‹¬›¦ m Â´È °f‡Ÿ L‹¬;9£ Š !¦EU€Ýå'Ó¢*ÀÎû]A˜YÖ <­ L ¨+ˆi`e„i`e„i`e„i`e„i`eš;'ƒ¨`eš;'ƒ¨`eš;'ƒ¨`eš;'ƒ¨`e„ý`e„ý`e„ý`e„ý`e„ý`e„ý`e„ý`e„ý`e„ý`e„ý`e„ý`e„ý’`í)û€õ Ä~© °s~j Ä~É °î"Ú„ýR`§05Ú€ù Ä~É °Ã)Ô\û%+ÀÎø(HÍ“Až©²Á¡ 5wNy¡HPrhŸ <ž¬;gE[‚ðx²ìgDxAØ/SÇea¿L _PýŽ>½ûoÓW>=›¿5ƒ¼ûþx’Å“$þÞíWò2Þ©\#Œw ˆÿx4ú¯Óé=œN_i ÍâžA¿±Êm_Ä 'ýÆqɿۋÓVÑß‘ÚGï,úûªöÑ;k¡w¤ö‘ Rw=dµö‘ Rw=dµö‘ Rw=dµö‘ Rw=dµö‘ R¶ ¢Ö>’A*ÖAÎdžpeØ2ˆZûH© [QkÉ •aË jí#¤2lD­}$ƒT†-ƒ¨µdʰeµö‘ R¶ ’ŽùIeØ2ˆZûH© [QkÉ •a‹ tí£!䙫1läE£ËKæºR¶ òD^M…[R¶ BÖ>²© [!kyƒ‚T†-ƒ¼¯Å$¤²9„ÈÈõ§Áç­ŒÍÉ çcC¸²9„¬}48¤ž/Ë dí#Qz¾,ƒ¹f ºÐ>©çË2Yû7W=_–Au7Æe´%•aË ‘L?ЖT†-ƒ¤c~R¶ ’)”Pʰe²öÑ<º0sU†-µ$ 1- ö‘ ‚0- ö‘ ‚0- ö‘ ‚0- ö‘ ‚0- ö‘ ‚0- ö‘ ‚0- ö‘ ‚0- ö‘ ‚0- ö‘ ‚0- ö‘ ‚0- ö‘ ‚0- ö‘ ‚0- ö‘ ‚0- ö‘ ‚0- ö‘ ‚0- ö‘ ‚0-²öQ8å!Fhª‡˜–¥Ï2³rFˆi1µÂ€‚ L‹ª}ä§µ7¡æB˜SûÈDaZdí£=0-²öÑ<§ÄMõÓ"kíi ´˜ÚGÂÓbjYxt!L‹©}d§áÍ]Óbj¹Œ¶aZdí#?-ðhŸ L‹¬}OÙ¡æB˜YûhŸ L‹©}”,j.„i1µ"ìŒÓjI bZ@í#aZ@í#aZ@í#aZ@í#aZ@í#aZ@í#aZ@í#aZ@í#aZ@í#aZ@í#aZ@í#aZ@í#aZ@í#aZ@í#aZ@í#aZ@í#aZdí#3ÅA Óbj CqÐ, 1-¦öQp(´˜ÚG ‚0-ªö‘+1EA¦ÅÔ>" ‚0-²öÑ´,faZdí£=CaZdí#{ʰ¹¦EÖ>²§RŠó´ÈÚGa‡¹¦ÅÔ>r 5´ÈÚGÃ?A˜UûèËäŒ5´ÈÚG{üaZdí£ d@G´ÈÚGƒýaZžaZ¾®Œ^ñÓò̙֒ „iy†i õ™‚0-ÏæL LË39“åd0„iyæö`8-…È4„iyöLË9aZžaZðF˜–g˜V¨ç'´<ôæçR!„iy†i¥)¾ƒ@¦å™3­‚‚ L˳gZóx„iyæöàÔñXŸ L˳gZ Ÿ L˳gZÂÓò4ÓšïAbÓ Â´<Á´æ,-?x¨%ÓòÓš‹(†a)Y  LËLëzÕA˜–§óó¬AA¦åéü׊BA*1•A^)~Rj®JLeó1¯ÄT Ô#¹nI%¦2ALíÉ8´O*1•AÒ±>©ÄTÉäQyFA*1•A U•7ÃÎX‰©<ƒ!ˆ˜Ï`È 1žÁAb <ƒ!ƒ ÄxCAˆ)ð † ‚ à !AÀ32B‚€g0d„Ï`È  žÁA<ƒ!ƒ $xCAHð † ‚ à !AÀ32B‚€g0d„‘Ï`LüÄDMõ bžÁðAHó F„[‚ æŒ!£  bžÁ° AHó FrщêÉg0Üi »<4 CQ=ù Æž!ŒDõä3s‰š«^€•AÈg0‹¶¤^€•AÈg0l@AêX„Hd ;ÌU/ÀÊ ä3Ö£-A˜ó FŠhK¦E>ƒ±ÇO¦Å<ƒ ‚0-æŒytaæB˜P2HñÓJÉ ÓJÉ ÓJÉ ÓJÉ ÓJÉ ÓJÉ ÓJÉ ÓJÉ ÓJÉ ÓJÉ ÓJÉ ÓJÉ ÓJÉ ÓJÉ ÓJÉ ÓJÉ ÓâK™Œ€@L‹/d E bZ|É aZ|É aZ|É °O¦Å— [‚0-¾dØ„iñ%ƒ@„iñ%ƒ@s!L‹/¶aZ|É °%ÓâK-A˜_2A˜_24´ø’A`K¦Å— 2Ðò 1-¾dØ„ie6ÕpyÕ0‹ bZ™aZíê•‚0­Ì>ƒ±TÄÐ@¦•Y¦µ7i ÓÊ,Ó ´2sÙ2Ô#@ ¹l™™’AC½=¨ —-3S2h¨õV4ä²e¦/[Ú)ªÏrÙ2Óìw6W€@ö›™TÃöP‚°ß̦‚Ó Â~3sÙÒ¡-AØo¦Ù¯+5ãLAØofR c}ÎRAØo¦Ù¯5[VAØof.[5«\AØof.[ºzbª ì73©†°Ÿ ì73©†±nàh ûÍLª¡Aûa¿™ºliOnpZ~!ö›)ö;“xa¿™:gt§Á¢ ûÍûëj9l=Øo¦Ÿ&‰m Â~3uÙÒœò€¶¹l™‰Ë–qžSPä²e&.[FsrpÇ#—-3‘jèÃɤ¦Ê /¤¹2j.dG"S7:§öxdG"S7:÷L+ÈŽD¦ntNÄAØo¦nt†S†ç.„ýfêFçž>AØo¦R § vF„ýf‚ýÎõ» ‚°_ ÐŽR ö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘Aö Ú‘AöËÚq¥¨ã!öËÚñAØ/ShÇa¿L¡Q„ý2…vl.„ýÒ…v®yÐè‚Ø/Sh'¤‚ aˆý2…vð>AØ/Yh'JBAöËÚ‰0Â~™B;~@ûa¿L¡|ZAØ/YhÇž Ü„ý:Ÿ±x´%ûe íà}‚°_¦ÐŽ5(Â~™B;΢ :ûýxŠ4Óº~u‰O,HŸ™Ö‡’¦5?årI"HjLK)LKì ©k<òÿºDÿù«ºDÿOQëÉ u³@QëÉ u³@QëÉ u³@QëÉ uË j]"¤aD­K$ƒÔÍD­K$ƒÔÍD­K$ƒÔÍD­K$ƒÔÍD­K$ƒÔÍä|lZ©›2ˆZ—H©›2ˆZ—H©›2ˆZ—H©›2ˆZ—H©›2ˆZ—H©›2ˆZ—H©›2H:æ'u³@QëÉ u³@QëÉ 5A¨£òiv´C„ú¤mÈ ß¨fc†è ºY ƒ©<^ÉÔy|ñ(Håñ2H¡6 Ø+—@¾ÑÄt.áuù&‚|ƒˆé7š˜Îâ"‚Óo41uí-@ !¦ßhb:—U3BL¿ÑÄt S3‚Óo41µ©^Õ@bú&¦Ö£-Aˆé7ö{ÉÅÖ@bú&¦s œ ÄôMLC{˜SAˆé7š˜N‹cÀ:!¦ßhbŠO+1ýF“ ߊi  úÆœ˜wÂZ‚ o4 Âû!Aßh4xÌô&AS`ö B‚¾ü$š“·õÕuâ'߈€;„9ŸÑC-îoDÀ=ß2  HÀý:›_¯EÍ…Ü߈ӹ/“»—[~ÛéœdœI ŠV€Œ3‰V€Œ3‰V€Œ3‰V€Œ3‰V€Œ3‰V€Œ3‰V€Œ3‰V€Œ3‰V€Œ3‰V€Œ3‰V€Œ3‰V€Œ3ÙF2ÎddÈ8“Amt ãLA¶ÑŒ3‰ Œ3‰ Œ3‰ Œ3‰ Œ3‰ ™Œ3R„¦zhÉ8³ ‚„©dÆ™=å„‚ ÛèLÆ™³)BS=´Îdœƒ¶ÙFg2ÎâÔñÐè‚¢z&ãÌÔ\HTÏdœ¸ã‘¨žÉ8³¢z:ãÌ;Ô\È^=“qfaGöꙌ3|ZAöꙌ3ƒ {õLÆY‚ç.d¯žÉ8ÃûÙ«'3ÎìÙ¡£ Ù«g2μGAô½úßOO4u˜÷»næzzúÍ‚Tñ™:üAþæ¢ Tê ƒüŸ|çNù¿+Èÿ‰ À“ ÈýÉD}rA©›2ˆúä‚ R7 dõɤnÈ ê“ 2HÝ,AÔ'dJLeõɤSä|lWb*ƒ¨O.È •˜Ê ê“ 2H%¦2ˆúä‚ R‰© ¢>¹ ƒTb*ƒ¨O.È •˜Ê ê“ 2H%¦2H:æ'•˜Ê ê“ 2H%¦2ˆúä‚ R‰©¢?¹ ‚4b*ƒ¨O.È •˜Ê ê“ 2H%¦2ˆúä‚ R‰© ¢>¹ ƒTb*ƒ¨O.È •É ê“ 2H%A2ÈùØ®$HQŸ\Aj!PD}rA©…@eõɤ•AÔ'dZTQŸ\A*1•AÔ'dJLetÌO*1•AÔ'dJLeõɤS xrAñÓž\A¦<¹ ƒ L xrAA˜ðä‚ ‚0-àÉaZÀ“ 2´€'d„iO.È Óž\A¦<¹ ƒ L xrAA˜ðä‚ ‚0-àÉaZÀ“ 2´€'d„iO.È Óâž\p.C悘÷ä‚wÙB Óâž\€[‚0-îÉ…A˜óä‚+(´˜' ‚0-îÉ…ˆ‚ L‹{rîx„iqO.dt#L‹{rÁ -A˜÷äBD[‚0-îÉ…„¶aZÜ“ A˜÷ä ‚0-îÉØO¦Å<¹ ÚñÓâž\€'H„i†iÅ“½µ$ˆ bZ9Ój7:5„iši}iÕ4„i¦ŽÄIJ ‚0­À0­¡æi Ó ôØ)L5XŸÔ °2}ÖŸB‚@êXä/æöà’I£ §Ø>Åž–Ð\È)v`Øï4GbæBØo Ù¯q¨Ç#ì70ìžVöhöëL=Ô@öök  a¿f¿Ö×;ÜÂ~SG¢%ƒi û û«ÉC û ûm™™Â~Í~q?AØo`Øo¬imÂ~sÎh볂°ß@°ßÁle„Øo ØïÜí9.Wy5„ý‚ý~±§ìÑ– ì7ì×ÎyZ ‰ öö{-ü[@s!ì7PE'§™k@û¤^€•Aˆ@"No@zV!x¼9 í„Ç‚Ç϶Æ-Ax| xü.gDx| x|´'ïPs!<><~¾mÐÑ…ðø@ðø¹$F° ÂãÁã¯Õ*P„ÇòÄ4œ":ºI ÂãÁãwù ÂãÁãç-‰âA„Ç‚ÇÏ›+ÓT <Hd•@2ÄãDVáñ@"« ‚ðx ‘UAx<È*ƒ <Hd•A$²Ê Ye„lj¬2ÂãDVáñ@"« ‚ðx ‘UAx<È*ƒ <Hd•A$²Ê Ye„lj¬2ÂãDVáñ@"« ‚ðx ‘UAx<È*ƒ <>Óõ ‹³š…!O%²:{*Ax<™ÈšO1  §Yƒ?™ÁZhZx<•È:•´%'Yç*Š(ÂãÉDÖx25ÂãÉDÖù4mIMd•Aþ¦®W©‰¬2È ÕkPs!;d"ë¼,¢ ÈŽD¦‹NâÓ ²#A&²ÎIZ(Â~©DÖd¦ðAØ/™Èº§Oö›éÇ#"ìŒû%Yói2‚°_àéD ¤@ìx:QAØ/ðt¢ ‚°_àéDa¿ÀÓ‰2Â~§e„ýO'Ê ûžN”Aö <(ƒ ìx:QAØ/ðt¢ ‚°_àéDa¿ÀÓ‰2Â~§e„ýO'Ê ûžN”Aö <(ƒ ìx:QAØ/ðt¢ ‚°_àéDa¿ÀÓ‰2Â~©§ç2ÉÑ%hî‚Ø/õtâä‰Å¢ û-t§Q„ýºŒÓàP„ýºŒ“…Í…°ßB—qrSÇC±_òéD7_ÞAöK>èwô Â~©§ýü ‚°ßB—q20Â~ɧý)'´OöK=¸kZAØ/ùtâÄà– ì·Ðeœ¼A[‚°_òéÄ=}‚°_êéÄxMCAöK>hO©  :ûý?äÉ…ÿcAþoõäÂÿ‰ ê“ 2He¿2ˆúä‚ RÙ¯ ¢>¹ ƒTö+ƒ¨O.È •ýÊ ê“ 2He¿2ˆúä‚ RÙ¯ ¢>¹ ƒTö+ƒ¨O.È •ýÊ ê“ 2He¿2ˆúä‚ RÙ¯ r>6­Tö+ƒ¨O.È •iÉ ê“ 2HeZ2H:Ö'•iÉ ê“ 2HeZ2ˆúä‚ R™–B=¹0—jtË•¤‘ „xr!ÎÄy|‹êeg*Ÿ19¤Fõ2Õ‡Ó›«Fõ21AN mIê% è¤òMõ@ÑI™ê¢“2H-:)û$ wÀÅ> }2Üûd$¸.öÉ Hp\ì“Aà¸Ø'ƒ Áp±OA<¸Ø'ƒ \ì“Aà¸Ø'ƒ Áp±OA‚;àbŸ R6dõbŸ R6dõbŸ R6dõbŸ R6dõbŸ ‚ÜÀÅ> ¸‹}2pûd$à.öÉ HÀͽPa6A¶£ „|¡ÂD‰ê¹* R6dòhÃf硎oG2y´áÚ’z´!ƒÄüD…qТ‘ æ… —Ps!$ˆ{¡îx„q/TX!AÌ ® æªG2ýB…AAêц r>6­Ô£ „~¡©G2y´ṫmÈ éXŸÔ£ „|¡"ÃÎX6dú…Š©G<È¿O‰!AsU—+Hzú—©â3 úW)2×@êò˃ü÷ô•áñb}ú©â3ÿOùƱ_ ¤òx„{©[IÇú¤Rl„¸=8g¡ •bË …¼¾;c¥Øp{PùSàö  ‚Sàö  ‚Sàö  ‚Sàö  ‚Sàö  ‚Sàö  ‚Sàö  ‚Sàö  ‚Sàö  ‚Sàö  ‚Sàö  ‚Sàö  ‚ àö  ‚ àö  ‚ àö  ‚ àö  ‚ òöàd«˜±Yâ'äíÁyhå%Ó_Anòö༅‚ 7y{0žl.$à&oÎoÅd ùI;8“@€—Á$E+ÀË`2­/ƒÉ H´¼ &ƒ Ñ ð2˜ ‚D+ÀË`2²2/ƒÉ Èʼ &ƒ +#ð2˜ ‚lÙ/ƒÉ È–-ð2˜ ‚lÙ/ƒÉ È–-ð2˜ ‚D+ÀË`2­/ƒÉ H´¼ &ƒ Ñ ð2˜ ‚D+ÔË`ó›4Ùbë ´eK½ 6ñëTlZ…DÔË`×+¶›» -[òe°4×ïA-[O_½2A¶l©—Á¦àÎÁ È$ù2Ø tt!{ÔË`»†0²I¾ æætà®ÅeKí ‡ˆöI­(.ƒ8*à.mI­(.ƒxêVT±hKjEq$PïbÇ„‚ ûÂäË`½†A}aòe°=~‚ì “/ƒMüÚ£ì “/ƒÅS€'Hd_H<’@2Ä´€Ä#aZ@â‘ ‚0- ñHA˜x$ƒ L H<’A}a ñHAö…Ä#Ùdd_H<’Aö $É ûd„ý‰G2Â~Ä#a¿@â‘ ‚°_ ñHAØ/x$ƒ ìH<’Aö $É ûd„ý‰G2Â~™Ä#78-¿ûe\@AöK&¹9?AØ/“x´Î ’AöË$͹XKö›éšjy@[‚œŸ0‰G!¢ Èù “xäàŽGÎO˜Ä£9ÉAÎO˜Ä£Qs!;L⑇=Ù‘`ðiÙ‘`" ‚°_&ñ(ÃsÂ~™Ä#¼OöK&M$ìŒûeBAAö T—@ Ä~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~Šâ2Â~©ŠâÓr¥¨ã!öKUŸ¯=a¿dEñaZàQ„ý’Å'GŒ(Â~ÉŠâqš¸P„ýRůÿå4º ö[˜tT°! ±_²¢¸ÙÑ'û¥*Š»t* AØ/UQ<¤S„AöKVŸ # }‚°_ª¢ø®ia¿dEq{*pKö[蜠âÑ– ì—¬(¾§Oö[è÷´¬AAöKVN΢ *ûýþçÓ×ï_/۹˜r(KÞï÷?9&þãûæ«Ä .8˜+ˆQ@ì…œ…ë b¯ Vq HMøV@ÜÄ) žù²wˆ¿‚x$pæÂZ® A‰\K°>‰W¨€$®%IW¤€dd¹^­ä+HV@ é'>%¬Oʤˆ †ôø95ÓßF—A äñ†ôø/sN.‚x¼a=~Èâñ†óø©1âñ†öøëî3‚x¼¡=þݲ© oH7'ã}€@7´ÇŸŠGâñ†ôø)]ˆÇÒãíI$ñxˬñÁ/1¬b!·ŒÇg¿¤†h ˆÇ[ÚãOÉ… o?EµñxËx¼·A<Þ²kü2Aj ˆÇ[z?ù’°>A<Þ2oÊ’µ¡ oé5þ”]ÁÌ…x¼eÖøà,ÖÄã·Æ‡å.‘AäñŽñø˜–Ë–âñŽñøP–2NâñŽöø“!@ ˆÇ;&ª?™l!Äã·Æ—€u<âñŽñø4X ñxÇDõ§<`}‚x¼cÖx¬OwÌ?d!Äã½¶Æ{ÄCïµ5^A<Þkk¼‚x¼×Öx ñx¯­ñâñ^[ã5Äã½¶Æk ˆÇ{m×@÷Ú¯ ïµ5^A<>0?õÉ $ˆ òøÀìÜ™´Ô%Ò@¤Ç›Ó¬‡@Ì_ò€µñøÀñø²¬'âñõø…˜j ˆÇÆãm^6 4Äã»s7`-A<>ð;wXÇ#w&c-A<>j{õQ‰ÇGm¯^A<>j{õâñQÛ«×@Ú^½‚x|Ôöê5Ä㣶W¯ µ½z ñø¨íÕk ˆÇGm¯^A<>ik|AäñI[ã5Äã“¶Æk ˆÇ'm×@OÚ¯ Ÿ´5^A<>ik¼‚x|ÒÖx ñø¤­ñâñI[ã5Äã3éñ«E+‹ òøÌx|ˆ5 PA<>3ïsÄ@ϤÇO ÃB±5Äã3éñædír]A<>3;w9,ï˜j ˆÇgÆã³q˜¹Ï >bæB<>k¯ ŸI¿n8ñø¢y|A äñEóx ñø¢y¼‚x|Ñ<^A<¾h¯ _4×@/šÇk ˆÇÍã5Äã‹æñâñEóx ðø?ß¾ýƹì 2} €L¿5ß8g„Äí7ÎÍ q÷s HÜã\ßèApËE‘½a×Aâ7nÐC:&FÇ[Uyœ/â:H¦A¾¸«Žò8_ÄuòΈ!>¾² ³øÇWYÇ#‹EÜÊâVw²¸SĽ,îqyœ«–¿ŽóÅ>¢¬cTÄåq®êxçŠ7|0ãÜž2rçŠ7|Ùâ|þn®óùö€wŠ{®µåØlÿñ.^õz×®mê Ä-9Ùloé—r¸ˆ âÝPj‰¥Z2äxÛÔ’£ÌE÷6t¨%Nn‰S@Ôù–«µD¾å*ÇË‹¸"ßr•#„E\‘o¹Êñò"®ƒÈ·\å8b×Aä[®r±ˆë …œ ­¿)}׿× aù*­‚´äCžê!q%𙿧zä‚€ÈS½ rê?Œ"Nõ:È‘§zä:ÕX Dœêu ⎵ä:Õ8 Dœêu "Oõ*ÈuªÿP„yªWA®Sý‡² |ÈS½ rê?”áCžêUëTÿ¡,™;ÙdžðuªÿP„yªWA®S½pÈS½rÑA´¬ %à^²&ÞÅëÜïZÖ„ /Y*ˆ|£R S—¬ D¾Q©DKÖ„ âI685ÅäM¯mê PK‚Õ$@-‘ï†ê PK¢Ü'Q‰PKä ¨:ÔjCcN¸vHÀ}@Ä[®:Ôù–«Õ/™,*ˆ|Ëõ»6¿äCž…!q-¶ò,¬‚ aªýga‰ í‡< « Hpg?äYX¹ÎÂJpg?äYX¹ ò,¬‚Û¬óW2uPA.H<Ö'×YX Sí‡< ë Dž…U`[yþJœ…u ’~R°ŽGnû!ÏÂ* ;r‡{Џ‹@,ì–n1ÑéÝ)×›u Bn{$›oå+•€Û-;Ü*ˆx‡ZZBn{Ä #Q½[v¸Uñ¢¶µ„Úö˜šboË)ÔÁ-;Ü*ˆxÍFZâɹ+†‚P·ðD¼r®ƒ@- rTµD¾×®ƒ@-‰2ÓŠ H„Z"_ž×A –+cŠâ'ná'*ˆxC_Z"ßÐWøÉ’w«‚Ð[QCø‰[NT1 @AZò&®7et½A£ëC^ã!qi¹y×A.ˆ¼Æ« Èцû×xä‚€Èk¼ ‚m¸y×A.ˆ¼Æ« Èцû×xä‚€Èk¼ ‚°_÷!¯ñ:È‘×xa¿îC^ãu "¯ñ*Â~݇< ë D^ãU„ýºy×A.·Æ;ÌOöë>ä5^Aޛ܇¼Æë ÅöJ€Â~—ïbew¯¤(Ät)à¡‚Èi g\ x¨ r€Bç–*ˆœ 0­¥€‡ "§($h)à¡‚Èi ?Y x¨ r€B–*H&ï­Ló£¨ÃM‘QZ"ç|×&Œ‚€|ÈÓ $®ÜþCžVT$öò´¢‚ aªÿ§‰ ý‡<­¨ Hpç?äiEAâ.ÿ!O+*ùyZQAhÅÈÓŠ Ü3Ÿ¿:æŒHHä?äiEA¢•@¬6Õ¾â?ÞŪ(ï ‰ŒÁ@.ˆ¡/,•\€(,ˆ•/ÀZÄB Ž©—÷â "w¼6n "w¼ ‚tü›AÞ”>y³ȇì'¸¶ü†ÙOt "û‰ ‚lª…ÙOTd¿+|È~¢‚ [Qá£ëx„˜†r¬ã‘©>2ÙM.,Lë+ þã],‡ó•‚µ:È1ôÎɘêã2Õ« bU\j‰¥/ï‡ËÆe=QAÄÒ»:ÔòÊ»CBÎ~ã²h© b}_j‰—‰©W@<Ô¹ˆ°µD."¬ìH,åÆT¹ˆ°²#±”SAä"ÂÊŽÄRnL‘‹+›K¹1„Þè4Æ#qW\â.D¬T¬ƒ -ù×H\‹V⇼žè D^OT$$Šòz¢ƒ\y=QA¸+~Èë‰rA@äõDA‚»ø!¯':È‘×9gŒòz¢ƒ\y=QA­¨ø!¯'*²?äõDA¶¢"“§e—õDAv‰â‡¼ž¨ ?‰òz¢ƒüD«‘©P‡¥Fæ»X¼ï]«‘©DõKLD®‘©ÜKLD®‘©ÄÂKLD®‘©„©KL„¼¼ZÀÛED,Ä©ƒ@-‘ q*±ðRˆSI2?I H‚Ì%WûÔA –È•À”€{©ö©‚ÈÕ>¿k³RA@>ä¹ ×ÂÔô!Ï]*A¦yîRAà.}Ès— ‚Ä]éCž»T$$JòÜ¥‚ W¯Ò‡³ª¯ŒF1W‚8×Ô•Q±W ‚˜8Mž½ø¼2Ê á Ж '“{ñy=‘Aò$£-qŸìÅçYXùøú‘ŸÈŽ¿UîÑçÅ,¤^œèøZxøŸÊ_Ÿè!<UdK¯£1®t,½Ž„øüSt4ö‰ÛUÇn<žJÈ¡'Æv«õýø Rüþ­£ý0”Ž×¿õ…ôB|£c'|†×utOœ*W]××aŠIzqZ•/·`ô±¯)ñûO´ŽnékK¨BèH‹÷:6ñ^GZ\×Ñ?qª\uô½ò¡˜^œVåË-Þî”'Äï?q:YÇÐëè’éÅC¯#!~ÿ‰ÖÑ/ãÑæ"ìH‹Ãî&ÞÛ‘×ìè;zØŽ1˜^œV…¶#!~ÿ‰Ó1Ê:ÆNG_Ó‹ :ÆNGJüþ§c’uL½}J½¸ cêíHˆß¢u ÜxtÉ|!CBœ7q"$!Ä5Ÿ ËÜã‰aéèŸÈ)æ&®ëèñ–¾p_ÇXzqZº¯ ñûOœŽYÖq›E—{qAÇMlFˆß¢uŒL_ÏþGø5-¾íëE¼÷kZ\óë¸ôu„ûúa¡ˆK_G¸¯ ñûOœŽYÖ1‹sx\ú:¢}M‰ßât,²Ž}îS1½¸ c‡Sâ÷Ÿh7÷økª{ß×´81÷ÜÄû¾¦Åµ9<-ëu ¦HÇðD/Ë·þªŽ˜{Ò²^GnÑtŒOÔ²ÜÖMÇøLZ|&}Ž»¦ÅgÒç¸kj>“Ÿ¹ñÚž»ÞþÖ’Ýâ=wmâ»'Ä5~™ñènÙϺŽôx\Äu°Îdn<Ö˜BÓ‘5¦ÐtŒÀü˜—u&}¶¯ÓµœÀ} ñx›Ã3:‡çm/N«BÎá”øý'ZÇÂùŒ¹îB÷:Òâ„ÏÜÄ{iqm¿§0ãq^³ éñ¸ˆë:F`-,Ëü˜‰.…tÌOdèp×uÌZ_?ŸŸ¿¾Ýn¿>ŸÉõVžÙS IüÛÛõÙó7Nü«(þ´ˆ?}Nü·§«øœø“(îßn—;<'îDñðv»¶8q/Šç·ÛáæÄ“(^ÞnÇú…Ï’øÛ×wÃÜv_ŽN¨Ñ‹ÿx7 —!}+®¤‚,gf }§/-×íTåÌLaÎÌì-9@YÎÌÀäE d¹²¢€0gfÖbæZÎ̺âF°YÎÌDoôÙr¬o¼}A¾Õ³e „.†‘ rA@˜Êþ)Xñ“oïdb“æ–¦‚,E’5º%qÀZ‚8ã·wÏø Øñˆ3~£ï™ùî‚8ã7ò”|>YŽXK–Sr Dž…U ’è;ìxÄãŸHŸÃ¶ÛEô·'ä òø'ÚãçAì1 Bßvw.b ˆÇ?‘­0‹ ÿD{¼™«+a ÄÓy`Ö` ˆÇ?ÑoOþVZXA<þ‰ôøÉO–ú`*âñO¬ÇƒCñø'zŸ:ÞñxûNü­ÔÊ›A,äñ–ñ“2,s—‚ø‰åî#׫]2º,3ºŠ5XKÑå˜>‰yé'‚8¨OÜ;]c'ø¥O4¤OÛ'·\éGöÉÔ’h°– }â™+aX&H/‚xhÑò ;-UdÑòìÈÛ.œ ‚¬'þ{]t î4d=ñìèº%ù« ÈèòôToæŠW2Õ{ŽÎåˆ.dªÌö!ÝFWA4„7„Ýí• ‚ áÀ…Dƒ+2„Ã;SxÁ¬%Èô>¥rÛ‚TA!Þér]12„s‹÷d f.dGš:Ì7(‚DhGþ"º‡@!ÙYxÙ,Ð@!¹Y8$ C8rCØÚ C82÷Bb áÈ^D·˜¹!¬'lˆ îô„ ä‚€h  â'z†‚ø‰ž°¡€ ~’ÞƒL‚4[1Œ ÐŸ#rA@´Ô ¸õÔ ä‚€h©' âñ™ÞT›­eîÊ"H†<>s+£¿=—©ƒ\î¸iYO4Äã3ÏO2‚x|fv¸£0Äã3éñöäƒu<âñ™ñølJÄ@.³©æf.Äã3¦Å€ „M(Ç@/Üò»¼¡öVD9caq!AâŒå]~¯KAœ±pajö˜¹g,ÜÊ—  ñ“Â,Z9' ÂE S5}ÿ|úª<õûôõù' RÅ|ß|ÕÈ/ô© W?ùnùñ<äê'ß­"û‰ rõ“ïN‘ŸœSA®~òÝ+ òkp*ÈÕO¾D~¨M¹úÉ÷¨€Èo¨© W?ùžùTäzÉè{V@äçÍTë´ïE1\wwÛè|2"ˆ<Þ0µ×M0Äã ëñ·àNA<Þ(uTÄã W¥q¸0« ˆÇ®˜¸»ÕSA7ßéàÎx Äã ó¼YqàèB<Þ0ÅÄCpØèB<Þ0u¾­) A<Þ2k|ð·;ºOV±Ç[Æã³7A<Þ2!$w;ÓRA·ŒÇO¤k âñ–ñxo3‚x¼e×øe‚Ô@·LÉT_Ö'ˆÇ[ÆãM¹m{¨ ˆÇ[z?Õ{*âñ–YンXKwÊ#.ONqÇ;å}ñx§<}¢‚ ï”WITÄãò`ˆ ‚x¼S QAwʃ!*âñNy0DA<Þ)†¨ ˆÇ;å-ñx¯­ñ^ñÇ{m×@÷Ú¯ ïµ5^A<Þkk¼‚x¼×Öx ñx¯­ñâñ^[ã5Äã½¶Æk ˆÇ{m×@Êk OA Çåµñø ¼¶ ‚ ”×TÄãƒòÚ‚ ‚x|PBPAÊC*âñAy£@A<>(o¨ ˆÇåñø¨íÕG$Bµ½z ñø¨íÕk ˆÇGm¯^A<>j{õâñQÛ«×@Ú^½‚x|Ôöê5Ä㣶W¯ µ½z ñxíE¥§$‚$È㵕TÄ㵕TÄ㵕TÄ㵕TÄãµÇŽTÄãµÇŽTÄãµwˆTÄãµwˆTÄãµwˆTÄãó÷¯ò¢•E y|f<>,…nTÄã3ãñ~IrQAϤÇO K  ‚x|þN_"³öVJA<>3;w9Ü.ï« ˆÇgÆã³q˜¹Ï >bæB<>k¯ Ÿé·<æÍ _4/"H<¾h¯ _4×@/šÇk ˆÇÍã5Äã‹æñâñEóx ñø¢y¼‚x|Ñ<^A<¾h¯ÿçÛ÷ëÃÙ¤ËÎ ¾I “øõ¢8éŒøõ‰hÒÍ ñkB0é@øõ1dÒ5 qêªõõxàöŒ|P,½j­‚\¯1“ƒÒ11:Þ’<åq¾ˆë ™ùâ®:Êã|×A®o “ÃY7Ä»ùN¿/?­×›ËòšµˆÏ×£ñ:›rA@ ý*»5ˣà ˆZ"ß™ÓA –ïË9.Ï'[ÄB-‘/æé PKœÜ§€8¨%Ú«‡ÔùöŸG,â:ˆ|ûOž9qD¾ý'Ç‹¸"ßþ“ç×E\‘oÿÉóë"®ƒÐO¿[ï–· aùŠ¡´D»b¨ÌÂËÃw«€È×” r¹b¨‚È×”¹k¹b¨‚È×”ie¹b¨‚x2D˜šbiå&€ˆwt¨%Ažêƒ –È)t¨%Q€D¨%òm j ù´³Å!³°]±WAÄ+!:ÔùJˆ2Õ/×>UùJˆ2 /×>GÜÓ\ï\fa·ÜNO¡u ÂTOÈÆS½[nD<êÖA –wœ0"°ž¸%àVAÄótj‰ûF¼½eê+‹–ûȇö:ÔOÎ]±>ŸìµD¾ ƒ@- òzµD¾~ ƒ@-‰òµD¾ã ƒ@-!WÆ ´2ºeeTAÄ‹:Ôù"…²2.×£Uš ZÝB‚Tñ¶†´Ä+'9ÊʸÜÁ~÷ ˆ|’£,ZËlD>ÉQÖ“å¶ "Ÿä(Sýr[‘Or”Yx¹ƒ­‚È'9ʹÜÁVAä“eîZî`« òIŽ2­,w°ULî¦N󣦕›8";£ µD>.R¦•墷Ȩ~µ2ÊÓJX¢ú põ· rA@è‚·¶äÌ]a‰ê5+oªYÄB tU][œâ "w|Q@ "w¼ t|dN‚\X¦zytÅeG DLzÔA.ˆ¡©ƒ¹Õ=U†p\†° "fVê PK,}¦Âãâ'*ˆ˜¾©ƒ@-!O‚lBLãâŒ*ˆ˜#ªƒ@-ñòÊèµDNDÕA –ȉ¨JH´\YWAäDT%$Z®¬« r"ª-WÖU9U‰V–+ë*Í´ŒñÈz—õD³]u %Ú½xeª_îÅ¿'D¾¯ÌÂ˽xD¾¯L˽xD¾¯Ì]˽xD¾¯L+˽x„< m‚ Èm¿K/ßë PKäË÷Êܵ\¾WA’¼ž$$Aæ’oøë PKäÛʹÜðWAäþÊܵÜð—@þr@¥ã¿œ*þãÝõ_ÝUù+¤üXp$¥ÿêò÷óÇW–3 güûYÿñ±ùê믘[Qw#‚,·¢>Œbù K gA–Cÿ+‚ðG ˆA–£'‚xîÔ¡‚xdÙïúð"Ÿ¼€dÉ@þ"›XA¢²wQæ®e¿KYæ®$‚ð¹ HA–\…,‚–Ç/ EYn.ÄþmTñï¦ÿêËãWÚc§ ÈrGÑ;U@–YXÑ;U@–ÍgD{‡TYH¢½Cª€,k¼¢¿C*‚´wH5åR ä‚€hï* ÈÖß!U@–óx Dy‡T¹ Ú;¤ â'ú¡ ÈRÛ\QžÕ@.ˆöD¨‚8£þD¨ò9£þD¨rA@´'BÄõ'BÄõ'B5 ¢=ª€ Ψ¿Þ©€ Ψ¿Þ©\íõNDwF‹Ä]–±«¸ËŠ jÜ%ƒT?‘AÔ¸K©CXQã.¤aD»d:ºd5î’AêèbA^þ¼ç#¾üɤyõ¿øß£ø’øYñ%ñ³âK>âgÅ—|ÄÏŠkùˆÄßíÅu%ñ³:jùˆŠŽ ÒQËGT@2²ä#~Ê@>¢¤ã=QQò5 ¢å#* j‰–¨@-Ñò µDËGÔ@ –hùˆ ˆƒZ¢å#j PK´|DÄC Z>¢ -Q‰ˆ–¨€$DËGT@2¢å#* ÂZ>¢´DÏGAZ>¢¢å#* Ñò hùˆ ˆƒ@´|DdÉGÔ@”|D j‰–¨€¨%Z>¢µDËGT@"Ô-QZ¢å#* j‰–¨@-Ñò hùˆ H@ô|D¤å#j J>¢rA@´|DÄ@-Ñò5¨%Z>¢b¡–hùˆÔ-QqPK´|D j‰–¨€x¨%Z>¢µDËGT@Ô-QZ¢å#* j‰–¨@-ÑòµDËGÔ@ –hùˆ H†@´|D¤@æÒò5 %z>¢Òò-Q1ˆ–¨€XDËGT@¢å#* Ñòhùˆ H„@´|D$A Z>¢²ä#j J>¢µDËGT@ ¢ç#Š -QQò5 ¢å#* j‰–¨€XDËGT@¢å#* Qò5 ãõ|D¤å#j J>¢rA@´|DÄ@-Ñò5¨%Z>¢b¡–hùˆÔ-QqPK´|D j‰–¨€x¨%Z>¢µDËGT@¢å#* Ñòhùˆ H†@´|D¤@£KËGÔ@€–èùˆ"HËGT@´|DÄ@ Z>¢b!-Qqˆ–¨€xDËGT@–|D DÉGÔ@ –hùˆ H„@´|D$AæÒò5¨%Z>¢’!-Q)Èùù~ûïüÌ\ª:?‹âËí¿ÏŠ/·ÿ>+¾Üþû¬ørûï³âÚí¿3›sÕÄuåößguÔnÿ):&HGíöŸ’!åöß§ Üþ“t¼ßþÓ@”ÛÈÑnÿ) j‰vûOZ¢ÝþS@,ÔíöŸµD»ý§€8¨%Úí? j‰vûOñˆvûO ˆvûO‰ˆvûOIˆvûOɈvûO)ÐÖnÿi @KôÛ"H»ý§€h·ÿÿ_ÚÛ-ÉÑâ\£ç;b߃oàÍHþá°]m·ÿºÛÓvgžû¿ª²*¥¬%¤û¨Ãµ`‘B8‰–ý§x‰–ý§‰–ý§lÙ‰’ý§‘˜¾DËþSH’éK´ì?Äô%ZöŸB’M_¢eÿi$¦/Ѳÿ’bú-ûO#1}‰–ý§T‰–ý§4‰žý7%¹eÿi$JöŸFòÓB¢eÿ)$Îô%ZöŸFbú-ûO!ñ¦/Ѳÿ4Ó—hÙ I0}‰–ý§‘˜¾DËþSH¢éK´ì?Äô%ZöŸB’L_¢eÿi$¦/Ѳÿ’lú-ûO#1}‰–ý§Ó—hÙ‰éK´ì?…¤šH´ì?…¤™Ä¥eÿi$†/ѳÿ¦$·ì?…DËþSHœ‰DËþSH¼‰DËþSH‚‰DËþSH¢‰DËþSH’‰DËþSH²‰DËþSHЉDËþSH¶ì?DÉþÓHL_¢eÿ)$Í@¢gÿMInÙ‰’ý§‘ü´hÙ ‰3}‰–ý§x‰–ý§‰–ý§4‰’ý§‘:^Ïþ›’ܲÿ4%ûO#ùi!Ѳÿgú-ûO#1}‰–ý§xÓ—hÙ‰éK´ì?…$˜¾DËþÓHL_¢eÿ)$Ñô%ZöŸFbú-ûO!I&-ûO!É&-ûO!)&-ûO!©&-ûO!i&íÒ²ÿ4×èÙS’[öŸB¢eÿ)$ÎD¢eÿ)$ÞD¢eÿ)$ÁD¢eÿ)$ÑD¢eÿ)$[öŸF¢dÿi$¦/Ѳÿ’l"Ѳÿ’b—–ý§‘˜¾DËþSHª‰DËþSHšJòòZބІ¯g‡ûµüxQ‹xü‹Ø”3 ›¿Ýï«’ü´øé·Jr •ÏI´Ç’k@`N"\_é’M\×]¢9 ÜáN)m7Kj$Û ¬ ¶Ây»·T%ùi!‘F|²©ðuÄË$¯¯_‡ìñ»^ëW‘äZ|¨ðëœß%/fä§…DŠÎo"¹Ž“9‰4N6ÖH®ãdN‚wSs\m$×q2'n*ÅFr' ‰p£·3’ü´É@ÚH®ãD$yyسÉ_„$ÝãÿÇ‹oÙäÿkñ-›ü-¾e“ÿ¯Å·lòÿµ¸–Mê=×I¶lòÿµZ6¹ÒÆbj£–M®TÉ–Mþ? ÂM>kãžM®‘(ÙäÉO ‰–M®8Ó—hÙä‰éK´lr…Ä›¾DË&×HL_¢e“+$Áô%Z6¹Fbú-›\!‰&-›\!I&-›\!É&-›\!)&-›\!©&-›\!i&Ö²É5×èÙäS’[6¹B¢e“+$ÎD¢e“+$ÞD¢e“+$ÁD¢e“+$[6¹F¢d“k$¦/ѲÉ’dú-›\#1}‰–M®dÓ—hÙä‰éK´lr…¤˜¾DË&×HL_¢e“+$ÕD¢e“+$Í@¢g“OInÙ䉒M®‘ü´hÙä ‰3}‰–M®‘˜¾DË&WH¼éK´lrÄô%Z6¹BL_¢e“k$¦/ѲÉ’hú-›\#1}‰–M®$Ó—hÙä‰éK´lr…$›¾DË&×HL_¢e“+$Åô%Z6¹Fbú-›\!©&-›\!i&qiÙä‰áKôlò)É-›\!ѲÉg"ѲÉo"ѲÉ’`"ѲÉ’h"ѲÉ’d"ѲÉ’l"ѲÉ’b"ѲÉ’-›\#Q²É5Ó—hÙä I3èÙäS’[6¹F¢d“k$?-$Z6¹BâL_¢e“+$ÞD¢e“+$ÁD¢e“+$ÍF¢d“k$†Ž×³É§$·lrDÉ&×H~ZH´lr…Ä™¾DË&×HL_¢e“+$Þô%Z6¹Fbú-›\! ¦/ѲÉ5Ó—hÙä I4}‰–M®‘˜¾DË&WH’‰DË&WH²‰DË&WHЉDË&WHª‰DË&WHšI»´lrÄð%z6ù”ä–M®hÙä ‰3‘hÙä ‰7‘hÙä I0‘hÙä I4‘hÙä É–M®‘(Ùä‰éK´lr…$›H´lr…¤˜Ä¥e“k$¦/ѲÉ’j"ѲÉ’¦’< íZrˆ—uüéáåI->,E--®k¥(Áv…j#9Û®ná8ɺºLQ’íº„›T’³íêî@’s¤(¼K´:ã—œmW·pœÄyþ%Øv•Öl_r¶]ÝÂq’Wö%IÈ,¸ì©$g³Òϱã+ëxdV–èr²‰ëlVºñá$½K Þ%Jé2âU’óˆïv“¤ÚºÈ¾Ïñ¾DÛ`„#¾ÖœHŸxmÄû)‰7x¯xÄ2â½6â5ˈ÷Úˆ×H,#Þk#^#±Œx¯xÄ2â½6â5ˈ÷Úˆ×H,#Þk#^#±Œx¯xÄ2⥬(Ÿ·/ S’ ŒøÆ¾',u»s2‘#Þ%F"$ÀæÍ¹ÓHЈï$žvb›‰ø¾Rcâ‚#~lpg‰àÕ7®]Ы÷5]âŒ* ñµ8Ö'Š+]—‰4⹸ª`»¼ø û<â×lÚ…½z×gï…¿ÖͬÄ)IÖñk¢…HP*ÞF‚×ñ)F"iÜÖ' žã³§}¥øÉ–6ª’àŸëÊú$J;wÉD‚Füy–o%mÅ…G|÷îXŸ9ÜõÓRI„u|¢Î”íÜjÓ.<â«ç_‚G|ºÎŒ‰0âKd/Œøb$Á#~e¶KÈ‘XZ»lÙžÒ”$ #ÞÅ)J8ärŒ ñ Æ„½ú“ñKðˆ•š•$Ìñ«¿l>«$xÄÇÐØ—à9>oç´TaŽ_#s|H}ÌšHðˆ/kžã»sgëxaŽ™‘À9Þ¯×NøîA²ŽÇ#>gû4⇼ø—À»’Ý劕xéæsÖ¼ú<%É&¯>k^½Fbñê³æÕk$¯>k^½Fbñê³æÕk$¯>k^½Fbñê³æÕk$¯>k^½Fbñê³æÕk$¯>k^½FbñêqfÁ’b¹¤ùœÊ”¤ÀŽdŠrÒ—d žãÝJmWF|«ÍF‚çx—VF"dÄm¤‘Ñ96N¤Ì‚zÝïÒHðˆ÷l¿«#¾sؾøäëxaçn5Š ø¸¸ðˆ}©e"F|X™¸ê|ËV#süa˶ѹ.8*‰óT…«6â딤šF|ÕF¼FbñUñ‰eÄWmÄk$–_µ¯‘XF|ÕF¼FbñUñ‰eÄWmÄk$–_µ¯‘XF|ÕF¼FbñMËÀiS’fÊÀiZŽFbÉÀiZŽFbÉÀiZŽFbÉÀiZŽFbÉÀiZŽFbÉÀiZŽFbÉÀiZŽFbÉÀiZŽFbÉÀiZŽFbÈÀù|O7­×#Tâ5±·âÏŸO³¦t”“NÒ\ó…ç$ÎDâçRy…Ä›H¤CøÞ@‘ö#I0‘H{õîš/<'‰&’4ÿ’¤$IžkWVH²‰¤Ìµ«($ÅD"eÙúk–휤šHÚœ¤)$Í@ò(Æ-}>·Áø¨øyÇ{…ÄH>Éf¥¾äÓö%ŸéK\4|ɧíK4’0WPH‚‰$Î;>*$ÑD’æ$I!I&’<'É I6|–zÃ`ü¼ ÆÏS’'Q»²7h×Ó¦]O ‰x²eÒzÚ´K#ù«IëiÓ.D<bÑ®§M»4’¿Ò®§M»4’2¿o¥($ÅDòW“ÖÓ6iÍI¾Èó‰Å¹û²Yá/ É_Í'_¶q¢‘ü•þ²$ÎI¢BM$iN’’d"ù+çîË6N4’2') I1‘Ô9IUHªä«8N’Åïúº“¯ ‰Ÿ_Håo" ó;Õ‚BL$qîÕG…$šHþj>ùº$ÏgƬdI™IQHЉDr‰šÅ%úº¹Ds’oçpÛTø›BòW¦þÛ¦ÂÉ_9Üß6ÖHþÊáþ¶©ðœäYØ%ù†]¢çm—èY!‘ dµ,çž7©‘ˆï—Tƒv=oÚ¥‘HÚUœA»ž7íÒHÄ[“A»ž7íÒH$íÚn½J I2‘äù}Y!É&’2Ÿ‹BRL$’#‘£Á‘xÞ ¤ ƒq +ü¼Yá)ÉÓƒ’Ñ9ÏÕÜŠ??=($óŒÎy®æV\'™gtÎs5·â:É<£sž«¹×Iæó\Í­¸N2ÏèœçjnÅu’yFçÓŽÿ´øO ñ1øÛÕ¿ÇEPôÇâ: žãoK·f¤Úµ%b¨$Ø«÷í’/|œãû¢q­Çâ:I’’a°KË×x,®“$á~áXáˆÏ>ùcqDñÕ{<âC«Çâ:I¦ßнúØœ?×IªpB à9Þ³‰OÛˆ×H„ß‚Ç#Þs’f qÂ^}X¼ƒëøäé|²Ý©öä7'¹ñknÇâ:‰Ÿ“x…Ä›Hœä.;;µr,®“Ä9I¼ÛtõX\'Is’ãˆ÷ôøÊV\'És’»u¼ îX\')s’r—Ìîܱ¸NRç$Ué“j"is’¦ Æf Á×8 “Ô¾h ÇâÏOÓËžž‚Hk‚Ž?6¼~ >]C›Ã@RÞ®qRIðÑPʹ.ÑZÅu|4$„.j]©¹]㤒à'|\‹™•Ú"ÝöØ®qRI’pÈEØtl7u»ÆI%žð¹öÉѬøCŸd v$jKš¹ ‰pà;åŠÍJ þX\'#Þå¼hVZ®ñX\#íZJÄK‡ ]:l×8=E…:ã}ä ‰ÊÛ5N*‰ôhWF‹ë$8y?—ðˆÔ¬l×8©$BòþZñˆO‹+˜HpšOõ¹Ii>õX\'Á#Þ__]¿ ú:·kœT8âC&ˆOœ$›H ž~ë*xõi­Çâ:‰´s—£°sò±¸NÒæAš»T^Ÿò±¸Bòúðô'üv¢Aòú ?áìA[ñO8éZ|š‡üzzú„ó®Å§I¯OB2Áµø4CêÕ=yþ¼Ÿ__Ó°¥~-> ²¼Æ'aëìZ|ºcûšž„%òµøtûç5? ®ðµøt-ùZž„)ïZ|꘾Ö'Aµ¯Å§³Ük{Θ]‹Ï†ÌÏWÿ†ÞFwc¿ùlõ_ýËOµøó[8¢>p”t¶ÂÉåÁÜ$“¼~úìÞÜhÊg÷úé®®Aòv÷áxžÏ“âOŸÃ›ÿ(9OÑŸÃ«Ø ·âÏoþõiJr–6¬ëÜÆ Bk1µñòz|THŠ@rq·U’íIá É÷×ö&ì¬lÇŽ^Ûëw‘äZ|hÄ÷)‰´³š‰äòô¶WH¤CÒ— n•äòôvPH„§·k´‰ëòôvTH„Pæv¶I%¹xý Mêç×ãÿÇ‹Ÿ Ñ£û_‹ŸMÁ£ÿ_‹ŸmÄcø_‹Ÿùcü_‹'aôo;Ä Ô{,®“œMõcþ_Û(Y¨¼åÎ+m,¦6VLò!,§Z!©&’vDûŸñæÎz~l£_bÝc³6nŇUH~"¶u’JòÓBâà;öÕ_¯VUHœéKð©]—·TÓ— ?bYkÞ¢^!ñ¦/ï«6Ó—„ù—…$˜¾$̯»UIL_"LŸë–’h"‘Î&m4$…$™H²Ó´…X²B’M$BºQØÆIQHЉ¤Â/I×[ ªBRM$ HÖR¬4“ 7h ½kÅFbøéÁé›3XáíÁé7¯8)d r{pZ%¢!Y äöà´J„3|ÛnUPH‚‰/Çú§xƒY¹7à£Á¾F‰éKÒÜÔ'…$™¾$Í'-•Äô%yÞ'Y!ɦ/nh[Ì@%1} òr—à[°XáKq v‰Z2’˜¾¤ 9²Íbê·GÀU¼?‚+¼QHt¸»­¿¦€Í­pØî ‘À/©×+YT’Ÿèp_3˜ú°9Ü* >=’‚‘Äô%ÐáÎ#æ“°9Ü*Éü®P•Äô%Èáwh×l˜´Âæp«$Óý*Äô%Ú®œšeÒ Ų̂’ÌïÛSIL_’æóIRH’éKÒüR?•Äô%y>Çg…$›¾$ÏïWIL_gÆ’if Ų̂’H}Rm$¦/‘.ZÜBªBRM$x´6Ó̶EJ‚ ]Ó(TË—|~Å›jná“Yñ(>´™¾ùĺ{‹ žóRÞÖµN!q&é$X¶ìÿl'ÁTá$ØZ-k¨í$˜J‚O‚y¿Ý1’h"IBö«³ñí$˜J"„Oܶɔ’l"®‰ÛE¶E!)&’ 7c»y «t)n ™F•Äô%MZyXLßvÜL!IpQ@&Ö¹YIÛ¢ i$RÞÙH~ZHÞ.k׫«gú?ß“ó ‰7‘Lr'…$˜HÚ¼ã›BÒl$óŽWI,¯M¬óâYˆC…´ÍsåÌÛÈ ŽC¥íþ•ä§…Äá…‹»^¥8Ó—àmÖ\|±‘˜¾ÄãˆZ –kÞ†™J"Üδeª$¦/q(Ÿ×bYçm,«$xK/o'UÓ—ÄùÄ’hú¼,^\õ6Ó—Á®–,{¹Û¹;•{TeÝ÷e…$›HŠp÷×vv¥($ÅDR…ëë¶Ë«BRM$xç\´LGy›ŽTh…ûš ÛH _"î‹­XR¶Ã}oE!ð—l±ÂÛá>•D:Àï-r;ܧ’Çyëjqv¶Ã}*‰Co«Å¬l‡ûT‡J7™’ôÑD"­<ªÄô% ºed…$›HÊ|>) I1‰«ÌÃv*‰éKÄ0Ëjp;¦¨’à=ªà6²)$M%ùó9½]2àÒëœâ{÷ÃNòöù$¥t•-‹ääÞ>Kì·âÝ@Qìåºõ’«’lù‘ t@Ý·Wå5’-‹R! G²åZ*$xbù’©’lI~s’÷¿ëøsñçw¥ãßÿ®ãÏÅŸß•Žÿ»Ž?~W:þýï:þ\üù]éø÷¿ëøsñç÷yÇã,’¥Öíê°“Ÿ’øk¾¯B’æâÒHÎFí1)$ùï¾dË VHpZD«› k$ç9ï±ÌIÞÿ®OÎÅŸß•>yÿ»>9~Wúäýïúä\üù]é“÷¿ë“sñç÷yŸafLí’‡| S’`š…´ˆþ%«Ä23  ÁmïV¨$–™1»&5WÛ—XfF!ÎïS]³‰Äb»¤øe𗘇Jb™~Ãûßi—iú ï§]¦é7¼ÿv™¦ßðþwÚeš~Ãûßi—É ‡÷¿Ó.Óµ9>NI¢iœDmŽ×H,s|ÔæxÄ2ÇGmŽ×H,s||ÿ»>1iW|ÿ»>1ÍññýïúÄ4ÇÇ÷¿ëÓŸ° g¿^RéOiJ’L*œ„]“›YÑH,Ú•ÞÿîKLŸÞÿîK,}²¦¨ç áŒd?Lù¿—SqÙ1— ¯©¸p˜²Îª¢î‡)Ù¤šÚX¤6n +m,¦6 ‡)ÖX’j"‘=‹ ..D}P}»^ÜÍ‹;¥¸Ÿ÷Jñ0/”âq^<*Åçz®JÞ`ì:*ÏÛ˜•âs=WÛh²•ïóCÃ*ÉYÏß•Ñpq9eAL}Ñ7m‡y¾BÞ ϾäMÛaž¯÷ó¼ É|£q¾BÞÚ*$óÆù y?«Ì7µ.me‡ÙT\1ƒoÚ³JbXâ¾i;Ì*‰a‰û¦í0«$†%ì’VŸoÚó|]¹ŸSœ6EÛažû:ûB…d¾Ò™¯+÷Ó} É|¥3÷ˆöƒwseõi*®ÌËoÚ³Jb˜—ß´f•İú|Óv˜UÃìý&î0çí ÷ƒ¡øóÛtÃH:xW×uKIv ‰3‘@Y\ÝÆ‰WH¼‰È<îú4ÌŒ·ãj 'qõÛ ™¨DI𛕤$IžȬd 'íºíð¨€b"¶LWgñVnŠæ$ïóÁh*®y+†üm0ª$oEØ¿ F•Äâ­ò·Á¨’X¼aCþ6UˤÞçƒQ%±LZá}>UˤÞçƒQ%1MZïóÁ¨’Xõëg"ñó5£WH¼‰Ÿ£‰qó…ƒBL$mÞ'M!i’÷yÇ›ŠkóIzŸw¼Jb™OÒû¼ãUË|’Þ篒Xæ“ôÞþ®O,¶++y#ʈ¿Nš6%+y#ʈ¿RHæ‘}eÄߎô($óȾ2âo§m’yd_ñêoa’ydÿQÓ›f!QòFLÅ5³’•¼•ÄbV²’7¢’XÌJVòFT‹YÉJÞˆJbqS³’7¢’XlWQâáÊÂôvbÚ”¢ÄÕ5ãíÁœD‰‡›Šk^}Qâá*‰êpÿzýå„««Óê¶mô_¯jñç_w¨ÿã(/œJËÛ¦šBâM$azèâ-($ÁD"ݽy¹ðù-*$ÑD’ñóËþj…’l"Þä¬yÓ.…¤¨$ÿ==(Úuzøõ_µøÐÁÿŠM¨¹v©$ÛŒ É\»T’í¢)…d®]*Év}ˆB"»œ VI¶×’¹ «$ÛaW…d®Â*Év–kJ‚ ä8¶[·“,SgRa'Þí¹ÔH%±¨°` —²yTI,*,Èæ/§œU‹ »·$@Î6‹ V¸OòÞ&.‹ ‹VØg‰E…½¦Â~JâM*ì5ÖH,*ì5ÖH,*ì5ÖH,*ì5ÖH,*ì5ÖH,*ì5ÖH,*¤VüåÒÕS˜’“ I…·+U‹ Ñ‘p6‹ I…]²‰Ë¢ÂAPánU¼‰Ä¢ÂARá¼Ù.Ä¢ÂA|Æ%9‰E…£f…ã”$šT8jVX#±¨pÔ¬°FbQá¨YaÄ¢ÂQ³Â‰E…£f…5‹ GÍ k$NÊ;W§4%I&NÊ;W*‰E…“òΕJbQ᤼s¥’XT8IV8oKlÄ¢ÂIyLK%±¨pRÓRI *üÖÕãaö>ý\o¶â@\—låßËò––åAhc/¦{TQaÇ^öËí¤oSoű€5ößO¯åM¸£Ý×3ûkù-¾Äw+ÞÇoñ%¾ jê'ê$?-$s?Q%Ù,”B2÷U’ÍB)$s?Q%Ù,”B³SRJ—©I%¹¤Šedê'ê$?-$s?Q%Ù,”Lòçù5*Û™¯ñϳDr+Þµëˆ:Ì·3U’M»’ùv¦J²i—B2ßTI¶>™’H>ɲE_Ó”$™úDðIÆ3ôÍDbéÁ'é_’l_béi&_¼³‘è}òúÞpNGŠÛSÁᚸâz’H›å—7 U’Í»šü~J”¤«°xG×­xŸ´þüž’¨feNrUá9‰jVæ$Wž“¨feNrUá9É<€¡’ló‰B¢Ú®9ÉuœÌH2Þwè_.ƒ1OI²I»²ìE‰E»²¨]—›†U‹veI»Rñ&‹ve¬]ÝñZm}bÑ®¬=N¬‘X´K÷ê§$7¯^#Q¼zä§…Dóê‹ ë^½BbQaÝ«WH,*¬{õ ÉæÕk$ŠW¯‘ü´h^½Bb'úñS’fRaý‰x…Ä¢Âúñ ‰E…õ'â‹ ëOÄ+$íÒŸˆWHtír¯ú®O'›/ìÿ8‘äZ|ô‰›’¤¹íÒH®¾°Lâ-_âEO¾ÄOIÔ/™“\¿D"ùÏÛ—ç·ïï¤WÕ.¨ÿ~úñþ3n‡]ðÃè€ßÉ(ލ/õ¬Â ÷ñÂç•ÇïOn@N“âï(ã݇5Š{½»áÜx?m¼‡Ù·ry}°wÈ„=àÆûó3JZq|D­wÜz¾p½¦Ç‡Ïúê5Ýß!öøŽ_:-ÙTA½¼\QÛ_õvû¬·ÉgýúrEýš´~ë°™KþÏ»{ø³Õuý ¢nì&ìnì&ìnì&ìn]çîº.ºËRaÒuî&n7·»‰ÛMÄínâvq»›¸ÝLÜ¿ßý2_jüóîoâ'âoâ'âoâ'âoâ'âo£ÎOF¿u¿ëº|™Âü¤ëümÔùɨóßn"ú6ÑM üD üM üD üM üD üM üD úoïa™/Úþy75575575575575575wj.#8LÔ ÜÔ LÔ ÜÔ LÔ ü¸ÕõcR×MYÂDYÂMYÂDYÂMYÂDYÂMYÂDYúoïq™/’/¨´Ì³ÿ¼Ç‡«$®aÔŸJ–j¼)^œ(^¼)^œ(^¼)^œ(^¼)^œ(^¼)^¼W¼Ë^Gœ(^¼)^œ(^¼)^œ(^¼)^œ(^¼)^œ(^¼)^œ(^¼)^œ(^¼)^œ(^$*e•꨼̷.¨²ÌWüÿ¼§›z¦‰z¦›z¦‰z¦›z¦‰z¦›z¦‰z¦›z¦‰z¦Ï·Öž´þ¦Äi¢Äé¦ÄéÞu½ì´¦‰§›§‰§›ëš&®kº)qš(qº)qš(qúy«ë礮›ª§‰ª§›ª§‰ª§›ª§‰ª'¢žIVÏŽªË|ïåŸ÷|S¼ž^ž¾òÖå¾øË—·/õ!¯[ñ/¿î~¸/þçÀî£?|y~zV‹Ô/† ëVü…þRŸ`(þ¯/~YŸôþ¼±ÜRã]ñ±Ëzaá–|þáåù‘7Þ¥ûÆwÔËêòCÿ,þÊŠÿë+ݺ.×NÇPqN2º÷òß¡x_ܱowaÉÁo?¼žÞo ZÛ²º|_ÜDã9yyü@‹eDìm)~û_Ý’Ê}ñx(îÚâ·hñŸA¿'Vܧ¸œã“ãZ|ü´€Æg^¼ôâiûá‰÷ai¾Þ/¼ñe½<§>~àìaq€½röÞDw‘|;t‰K¨Mã$]i.ùGljÿW€Ö=>><Ÿ¾¾6.ëê.?œ~ü~;üŠŸ~|9-$›!œ££ý‡‡_§çe»[SÅ_{W9ßòå‡×o·â]™SŠÿñ´£>ßµ£^øüko–o!4Xœ|â9$\Ø—ãŠØ_{Ëã¨Ò&ºOTtK\]ÄÅ¿~¼}¢¯]ÀéòÃÛç½xÊè (þ rÜÿH~pÝ„aÉ?ý"¨ÞúrŽŠŸ{tï’¶ÄVï•ö,¡庙-çısã÷ú7…ìPã ªâêS» åöƒ÷eq%âŸH}(K]ã•hÝÒRr²Óîu]gë•}ÿÁu¡®ÉCöU»jïoêøk¯7¬¡âoßQ½{ª¿Šî…÷k]Js}¸_´®Ñ‘œ—Ú ’|ÃúúÉÒxotX—ºøà/¢kt$×%å€äÖ©OE)]¾½Ñ‘Ü-h\[Åé°nK —œóD›—ÖEï`qª¥•rm^ã6ËT:’GRÖºcU¿ñiÜ×zÑùÊ&èî*¯õ;Ÿ ût² ™JGr¯·÷ˆƒ¢#¨%§ýµñl$wÉi¢² º,}Tû›Pöâ]ikBìtX»nèÃf*+ÉÝîþA…ì•kuñÊN~èõO}Gå>Ô«Îӑ솻‰ÜÂJ‡õpëêþíû}(,­áoßQ}2é“ÔEë sµÇUa4¾Ht¡#¹ÛéÑ·:¬Ç*ΕË4QèHÎ]¦ }{¡Ãº»íÙm–¶Ð‘œÇ;±³aÝýBWnÅÙÜ™²u…ë2.àŽ×ÆSG߯ÝNµ)|Xï\»'t77Y›Â‡uLÙoÇFr½_Ñ·³aÒ.y:’ûRdi%À~'#nF©]…BÝî/ÖO õ0óéÚ,ÒïãŠÓa]û:»]µŽäµkZ •ƒß.¹ÕgvêjÇ”_Wè°Î}`^—…Žäæ—\†jCüîî”ýªcvh)Tè°nݳr-]ÙIqß›…Ô&Óa=:·•Kã³i‚Î|}Ùú=ӑܺ±ÉÈÎg:¬CŸ¤BØŠ³ zì5àf¶‚öµ{ÅåúÃ>’»Ø{×X|ÿľŒKuõ×ÈJjc!¢Æ³t_.n ðÌ]í®ñh˜ù ºôuàÅÚdæj—á4—¿±y¸ºßŠÓ‘ü!ô¹7­ËÌï®ÝmOáÚ£¤KúhhÈ9ÉtX÷îMu[Ëd6A¬óšÚ­ø>’?¤>¿£t¢Ãzìkåmß&ñ‘<¶ÀItX‡ÖÛ¸nßNGrkÃ&ØïÔqÊé¯B!sg·u¹‰MÐe‰5Äk³¨Öù±“г±ÖW3¾\eJ–ÖýÛ“Ç¢£Z·ôÕ½²Ó-¯ad'¨Ú-êæ':’CÊ O‡u·H]ðîÊNlŸ(Ú‚¿ Ø”ú7¶+;™øÇ"™‹H‡uX9m6š&èÈ&è°ø¼M‘‘ä¾.¸‘mqû’ºˆ.Ò‘œãXF‚otX»>O\7"Û➙ϰ8ß ›¥‡ :—Œ¾ý…­ßãm–‰`/ ߇u(Ýù\/Sdd#¹Oq­[Ù°nc }q‘Žä¾ Z ÒF6¬s_ó„ríQæ§ê±ä™C^bÊׯ“;÷‰ŽënlRóí&²·vï§Ã:×>ÉmC&²‘<¦´{Ù°îvþºÉéH®c ›d'úwœß,md#¹/Fj ŽËî\lyd®¶?ï#Bvj.Ò¸”âüC #¹sÇHòAš Ÿ S- ™@‡uêkØË™¹þÉç!ƒfØ@‡uÿöÞo[ãéHneh| Ãz8Äyó¨ß +­Ï’°8Yþû¾ÐÞ¬MàtÄQ¡ÀWнs·%pà®v7°ño|¡œŠ¿«@Gré>Oˆ¨ñlÝÆM;Éq„\Z„ýNfÂÞquó.Ûâî³GAa@‡uì3áuƒ=БÜ•Ûâ.gå¼Ê”î× C_ ;鸱\[oìl$7‡âq­ }é“A¾²WÛ ß« ]é.ñºŠ l=bRÅAvŠê߸m>¶Åݽž¾6¾/î¹ß½äº9äÞ4A{¾‚ö«wÑy¶ÚÒÐΉgú÷[¾§#¹/­[CýîÙÝç÷Vóõ²ÖMeŒ¸8‹A·¸)­çÁ*߇LB'ìÝíÎ)_¬7MОëa¨s¼ô»g{a±tcÔÆ³ zíc¦]Œ•g+è>{U´Sêé°uØÊzíQ¦ãj(:ºñRJ¬õÚx:Aw§²;ïÙÆ˜iº …Ä ×¥¢Ö³±®\~[Mx6’û´¢RÏ6ƺwqM]ðt$wC2âyX…î^ÔVnêH+¡";ïÙ°öÃ÷7}Ú'èÖ%EwŒA—|2d“ÜwÒíøH^Ww|=fØKãVÅ5¡ñîØÆØy©{£#9wy•ŽùÝ¥OÄáVœG…*Ú)uÌïîÆÂûkã){_ÿd.ˆ\]‹ï#yd*e‡DG‡u÷.òºíU:¶Å=œäY9æww•Oé¢´ŽŽäNßçö; €ÔœÜMtt$×Ññ°ñdÀ޹d ë8¶‚î]’ê8æw¯~¼‡z•)uµÇ ˜.ûl°mï»ÇÃm¸9¹ª#šè®ìd¼÷EN ª —}T®ëïQg´ñâØ :¿°\ÙéÞ÷xų7þãëûËãHMýüŸç¿ß^ÿ|øðñm\^¶8’–ι®?^9êD2bØ;ÎîÖûOuÎí;g·=gô¹›¤{FO뻜õçÀèï` œ±4N=ÔH]n=ÿuE^ׇT3¨+Úõ¡ I¤ƒ$ºšºÒ¡®P»ò¡]¾x ÕLër}"ªç¬˜c>JµÀXšãb,Œqĺγϱýšîëzøø¶,/»c•»Àîê: J·ÚçÝ3ÞúËM$'’|œÏ[òw¨ß5 ‰í¨—[ÀeĤ@,ü—[<®ÛªœAë)ꌫ´kä×ßÚÕWOþìQQ#¿ž|㇀vý¢Œq,C=hCÔõ‡õPså/ @»Xo§ÙA’(Ò®®ˆ ‡ï¡ÕûzÈzÈ]RÀíò\^ã¡)Ð.W¼D¯íò\^µäÅQ·:Ö5ŽÜ¿ìÉ]¡4ÐÛžIµûÛ¡ó•,ÑAßxë{¨ë|MÇ­®0¬/` ©Žò=cøô‰ïs¹—DàR-ÝAuq©vk‚láùž Ú®¶ ÔŽ D1Ù;7b'uýßo¤²O½·cCßÈzh0VTÝ/¨.†ê^g\®†ÿ|:ØÕ,Sd:ñ¡{LŒÇh²r‘iŽkÝ¡ö+ÆãXXÔ'Øúƒ¼"Ó?® 3òÕ @z¹~_E(&/7Nf€v Ôã®6}ÉŒ¾‘¢vý:22Îçä}À8Pû‚Åçs¨÷ÈHQúF6:b÷íÒ‰£½Ï°õl LäÁD::ºËá¼CŒl …º;:¢LzŸ˜Þµ@WϨGvÄ¡Æìþr‡:2r»ÚgÑ5¢ºøèø}¦D5º/ù]E~N:ÌîaAzŸ˜ÞÕ&F1½ÿ  ¾sÔðùŠi´/ËŠlNâºZñ¬˜®Žu(X§]Pdqr96u¬‹û«~„(¦Ñã„ÔœÿXìWæ>f(9ƒº8ªÛûV@»2×/·Ù‰c]Gý‚ºz¾c¯«ÏjôÐE¬o÷ÓÀHËO‡•Î%ºx”ÄÁSÈÅKžÝqÀ~e®…¾Û/ 9ùà)ôæ#IpO¡v[ŽdÔœ´€Åu•ýØ1iIõ'ÓûŽC^Z澉s ìí;¿pÖ$s¯#†„f«ŒWMGÖû#꿼.I8|cá¾É˜¸A?îu„mùÀXL«€bòWËFÐC…éWX±×Q˜~}Hz…é×H DsGášÓ]ßæQ]ÜFÇÍg‘W†óP¡úåGò ´°p-8ЕۯˆwD*³L1Œã'÷ŒgÔ#Y)4ämW6‹æqÔH¢z{äIvg¾vÜ.×fÐolÈ~¯Í¸_éÛõãà›ÀõPåúÕ Ò‰zØ©qÐÞW®_ÐÁºþp½h¤UÓ®O=Ú¯nîQí¸ãvñ†íj|¦û_xîúr#g=­À~1Ô[$4¶Ûq÷ÎÕˆêb–i„ã¼Õ±] Wã+ó9Юƒ/×5I‚îbŒUykè³èBgd¤kô•ñøG½ÇŒ\ïÇqdô¯o‡] ¤÷%ù_ÏÈa³÷GÆ_Üæ¤¿‘¯tüRÑ*³ýÛÔz†:¯‘Á¼ÝðžÂ‘‘ÍîCX¦fòÚù¨Í1"pË8Eêb¨í¨w¨Ó¸‹ûí½}e¹§q™ößOtv¿ßÅ8 °ŸH]}©PÊ=žžNŸÈÌwYý"ÔË|F>; Þ?‘Õ/Ø…½ öÖ»4^T€(ÚúŠÖ0gÔqdµWÜ®„qÝŽóPžKâjåŽ(&ûܧ!úÑ3Iø†ö.¨½®È@ßè™$\GiÔ õ'®‹È+”% í¢òòhçá4.KæòÊH¿—WèDøAQÝÅL¡BÔ7ŠÉ>ŽóS£Èºî4ߣ¨ìó6‹"Ûs_1ŠÈ~(…­Ì$¿Å­Ž(.ÕЖû8ßi쥔Ïc—O@íV®«WËõÍT×·?tݱÂÖ{È!û¹ìG20hWâZØ;2!·«B%&ÕTër?+œÆ®AÅV4:“—ˆúùþha*PªgÔË]ÜêˆbR×dŒ"R·}¬ÅtuËÇ: ò³¾Ï0™É~\ñ€ýÊL#³?‚veÖú2ÂnUcæŽÂzûxc¨ðÞöKr ¢¾PüÓˆÏ ¨û‘#ê8»G¤÷õ¨÷pU‘×È‚uæ´íÞ¤‡}ÔnAõñ.A¡N&Ô£ õÉ„r&”7¡‚ UÔH®Ó¥:PIŽE»÷ 7ԉܿÐî­Ü†z$ÚUî£[êÓŽr¡få*BÍ(Ok–ZöôÒ5ß{ *’Åå*¢{”EWêãm5”ëºzu"‰æ ª»¡v©†èBP»T]‰Ù (GPÅWµK5d_¥ºÂ­õ¡{åM@Å}°¦€%ÑýƒTß~íºZœ»Ÿ7Ô‰d5Ô#BµH¨O£ÄHt5¦µ (¢«Í5' ímat¼ýŠ{d«,ûßo©þ~ÛuÕûµTu"; 5{µëªÏ)Ií"º’`¿~¿] 9IíÚ¥êK)Q@íººú$hÎï·HæªQ]#ëX—ê@}¼íðå5©®Ó¾Íä ìíÚ¥ZƵ:j—jH-VåÈØŽ°‡Ê“¸ÏåÄB…[ëK[kP‘ä‘`KþÉä|¢>ÀØY@ÈüuMꑤÔ×ÒÔ.Õ¸]`ƒPŽ JôÊ“¬M'J"컫%Ä  "9øUV¬»:PoŽc_ñµ, v©¦ZPDWû,*ÕEìjh¹ ("ÕU’=µ«Õµ$ÕµKµÛè(É‹èjΰÇ‘ ]ªEt5»ZÔioW! ¨]ªÍ· ÕE¤KŠHUè¡"º:®)P»T³¿\´ƒP‘¬a°%ÿf𭾑Ù*~„ß72[ùîñ9Ô.Õ°WûÍVÁã‘öÍV!àÞþFg«Á mÎ72[ßöå÷UmoêÇq>H—ê@ížÕZ<\ YZ8Pd°Ö*µ‹¬zG:åJjñ¬Ö}ÌÚ=«5Ä,¡öU€ó—›%ïQ»:Pɱ6_’€"R-54E×V!gE×V~•Ptmå½Ptm›„"Rm—[ÆЬ­|‚²½t©ÔÇ[D'® ŽŽÚíj·ªµ ¨ÇÝ/ 5HuíRM]ڥšÆ‚H@ù±Å,1†=LVj *’¤Z¿âv}ýh‘ê׉N9 ¨ÓÍú†P«PäÈØÿÚP»T»Ö' v©öåãÚ”'x%=Páæçdß\Pqß³îkwñÅ$Õ›]›é—‹'j—j¬yÚõ²ëjÎ> ½Mìj5’ vµF E¥ N#n¨]ª)‡*Õ÷„è…Þ¶ØÕjWkw¤…Úíêù’·à±Í c›EÔ9¸¡ˆÈa•PžÜuV„ ûv´Ï‚T‰¿:Ò¬ ~½™vߨN KÎ0o|'0GçÝ]q- (º»²¶& èl…ÇöÛa'pRëÉlUrZɞš1£Å¼}¦»Ö])à\ûö™îZK™¼€">@YkPÄÙK­wU’€"R-xßäí3õ¬|uUbÜ÷¬V‡ýÂ7Ó*à¬äð7¶g5C=šPŸL(gBy*˜Pj,À™",Îaq¦‹3EXœ)ÂâLgа8S„Å™",Îaq,ÂâÆþWP»]>£ÙÝ=r»ê|“ÚE,@ù&ŠX€œ‹„òtE °¤µ¢uš£×«â0£EWi„eXת€"Ru)J¨G"ÔT‹€úÄf>©.*U p<Ââ‚G–Ü=2»ûì.Ék—jÉ¥`FƒgåX„åø>. (²kÝ gåX„eÜŒl£)Ââh„%w-yCj×Õ±-ä–:Þ£P$àÖ”Ù_u9Ju‘]ëä¿êh„e;[ƒô$›ð»J#,}™æ*Z[9aq]ö)&õHæ4'ôµ«Þ%'¡A•”'qÝr4Âr¾‘ÄK­»%ì®o…(‹]¥–°ts_€"Rq•PĈ« 9Ô®ú55 E¤ºV´gåx„%úX½€Ú¥š È ÚP»Tc©(OÁ™",ŽFXZ_»ã¹ƒFXÎO¢ÀY”FXúª¼W–Ù ÌÉgEöŠG+0Ç",2g‰qß a-R]qO%súr¦‹ûÆòº-ŒR]$w¥;E@‘Ü•„í°¸êP4Ðñ‹«ÎV,ÂÒgÑâ¥Öïº]qR]»®º×ÛÎaq‡KÐæ",Ïî‡Ëo (aI"Ê1TPžîç -wŒ°´Uª‹DXBê²ØUaé³ÔBaéÚÕ$‘j—„"RõY*‹°ø¥o$»+) ]2Ç#,~]“ÄiŽœ;LG#,®-îè:a"ÂÜ(G#,ã HA{|ŽFXÆåÅ!J­w;*¯â7úý(R*P i„eœkÄž°„óÝ¢ G#,¾¯2³Ðú=Ârö á¼Í",ç=J©]Ä® +aqÝ0Eò¬šÛÈ,ê}P‘D·’ÐÛ»J#,½ÅÞÞíjgŒØ¿çjäEìj_“û& v©æ‘$ öX@ð0ÏÑK\Z««Pq?F‘ðŒ)Ââh„Å«xªP'zеJŒd×§¦& >‘ ww,Âòa<Ê µk—j_4 :±ÛÕóK6Þ ( t(ÂâLG#,c#0ÀYáí°XŠÄH÷¬Ôœ·ÃN`Fb÷vÜ DùÑîí¸ˆ2o°$3ŸÝß t>`”ÅÐKO‰¦& ö}ï2Šô;aÉ%‰(²g´˜<„]a)®ˆ­ß÷¬º³o¶°vë—e`а8S„Å™",Îaq¦‹3EXœ)ÂâLoаxS„Å›",Þañ¦‹7EX¼)ÂâMoаxS„ÅÓ‹Wk#{ïy„¥ùˆVÒžŸañîxaé>S•ZO=+èxa®U’¹]Ê­Rë÷ ö>‹Ü.‹®ÒKo²Å* ö}€â¢ˆ"{VÉ£]EÏ#,Ç­<°øÜ×áy„%%‡v£ü#³«cê*Þ<…îî—ÐuOAB}"q˜Šr1<°tŽ”ya‡ð`oÓËxâ·©®¸_OjÂu",žFXÆMb« Õ=Ââ–Ý*¡Hî Î÷,ÂryTL@ ÆäñÖµ:µGXj-èl§–q½§ÔC»ÊΰäsPG@í>@·qUÄË#ñ`*ô£i„eì“ãÕ/°¸ñ¤yzèfWýÒÝU±õa¿¿Ô%÷K‰bt˜ÑbWi„%Ža›³€:íc¨»rU@=î+°V’T×'’×ãÛžFXüx>2'åoŒ½"³¡Â~!gw¤›€ºù«iÃE(S„Å¿ñÀàÒÛa'ÏC<Ââ+<­ïß;Ø—{;ìÂ[P<°ø3‚<°Œ}@˜áâßøN`€g·¼)Ââi„¥»,RP,ÆŠò=‹°Œ kŽŠÆX}rŠì®d‰õ4Âr^±Â°ŒƒT ®¤Ù–:¶Épë-«S„Å›",Þañ¦‹7EX¼)ÂâMoаS„%˜",Áa ¦K0EX‚)ÂL–`аS„%˜",a×z Qx„%àÛYÂá–°–Q_8œa‰ ÍÈEXΰ& HäzuEBzk2Šý~†¥¯ –„EWù-aÅ'É´t)HŒ$Ó2ÀhÂñ–0âÈáxKXŒŠÄ­œÂá–0_¢P{FP ÊàYaY׊€:Ož¯ ‡‹K«P$Â2 P$Ââàžhà– Za‰k+Y@Åý¦„R…~4ÌVFXúÚªAï1<²¬àXà>Sà–îFg E×V>FEÖV>×$ H{vÕ ¨]WË-¤YÁïS„%°K\\EQ·À#,µ¬(c6ðK©Xöü Ks+<ÂÒðm#GXj­N’ͳ "ê¶¶a$Q»ÊΰŒ÷Ñþ} –óÂ6Uµï®´ª„úDnìÑš@#,~„ššPžÜ±[PÞD‹va°|(ek÷`аa©çÖGEî]ÉÙEv­»ã.¡È®uXKPôÞ¸ 4Âr¾w%VEv­SÎÒ7’]ëµÀ2EX‹°Œ]2´N 4ÂÒz…™$FXüЈUªë=v}&aqcê=°Œy¨ ½Ç@#,ã•w4Â2ž3]¡N˜",ßRE§° ) ì ËùÊ. E³,àª<n Kp]ø–â:1h„e¸0Û/ÐK[j„Ñš`аaéâBq…pˆ°4£,Âr¾,¸¨Oìà* Ø]ÁPö‡‹¯Mj½+¸¬ŠÜg•KÀŒ»zˆ°¤’Š€"·Ú†(H•EX ¼Ë5",Þ7Ž– =ÑC„¥Ä$I"Ð[ZƒÔ®HïDûrÁa ,Â2ލ¢Ý»@#,ãruW%ÔãmN«%ÂyˆÝæzó“ÔúÝèkr”-h„%žO‹H|ÈC+G#,RXàÉÙ`аaqë‚3¨;û«Ð¢€";}VpêɆ·Úaé°-¿%,¶Ò$ưßÜÛåY@ÅÝýªØN˜",FX˜®¤víûqh´„ÚýÕa&¤v}"ù…) R%þª>K¨]WS ^èí}`8¢kP·µUAX¿,v•EXÚØ³rêDÜè*ŒíÝ®æñ^H–PŸöÓú>ø& ÜŽÊðô@ –¼Ä”’$‰°g¥¬ð¼h –ÇFB™",áí°˜àæí°ãîáí°÷ïÃá K¬(êÞŽ;Ð_=ÜÖœ­ø–.Ó$ÕéÙ­‚Q ðÆvCpÐ÷e·„--aŸ‰ŸaW EãVxß„Ÿaq±–( È™ë®…M@‘¸Upb]älàê–ªe`аS„%˜",Áa ¦K0EX‚)ÂL–hаDS„%š",Ña‰¦K4EX¢)ÂM–hаDS„%òwXJ‚käxˆ°¬ð^Ÿx¸% ߇¸·„E¸’އ3,+¼&ò[ÂúªÉK­'vu…·qES„%ÒK÷’ º:®'÷Q@Ñ;‚’sŠÞä„od︲Jí¢wy)‹4Â2îrheÙ-aç­yüÏ*Ò‹¯eº  Nô†#AötÅêSqM@ÑCàý‘EX.ת (zÞ zî‘FXÜùó$ È‹!½õXW ³U¤–q¯5Ì8‹,+8$Ɉ‡¬à˜£€¢YÁðþÕÈ#,ÉåÙ_Mk’YI—,1Frîž ˆ¦K¤–W€/™DaéëÚQx¤–Þ¬Þui„e\~ Ti„eÜAÕP¼6ÒKïí¾Þ–Úö]Œï‹4ÂÓ¸·ÞbWi„¥¯ÓZ¨E@vÙ{$ÆÇÛÞvYá{M‘FXÂÒ"̘ì Ëp«T—¿4êºéêº4<×òwXb÷·1ÊbWi„Åráw»ZFº\–i,  ²ßíj÷ÉËŠÖi‘FXF, ¤& H, /’%F p"#‰¬pß7š",‘FXÆcÅ>JuÈ Z Î 4Â2‰MNBí»+ÁÃq‘FX:*ù‰4Â2žÇZH#,ã$•ƒcˆFX²ïÝ ë2EX"°Œ·š“ê"'ƒút•9J”ê"‘ë 3ÒB`¦ed7®ä”P{ä:xxë{¤?ž€ãÑa‰4Â2r}V'ÕEn ð|mägX„WÖâ!Â’á ?",¾¹y„ÅExxä–䳓ê"7„—pë-v•FXÆËUðÎúH#,ÃgÝ"°WQLä!ë<ò‹Ãù«‘GXB7U@’W+éÄnWãùE-ÔzS„%ÒK\û’“Ž,Â’ÇEHA@íìk÷ï€"Y‚õå–î}ÁÞ¦–qkLˆ’$¹ -{‰ñfWÇÅ+3",‘aé^|¹*²3,¾Û/´3i„¥ûL ¾>i„Å ‘&¡Ü¾Fîî½ôûlåWx‹y¤–ó¹&A'öKªãyT¬»J#,ÕŸðP§ý¶7}PäfèÐÙßìê¸35©.·Ÿ¤r5Iíòduó¬"°„&ć"»%,Ôq‚¢,v•EXRwNrPä KnpuÂÏ°ä´ ßH_ïwN@]mNüÆÝŒ+Œ›€Ú³,üÏGv†¥ŽkÌÊa‰ü–ñl`P$ Á\Åxˆ°”,ÖEó`®u<ÜŠ>ÄC„¥wPd'p…/£Eaé­O¸] @#,}ÍÖµ(²»Òà{Òñp†e…ÑæÈ",gGGª‹f¯ÁW"?ò6¼«Èϰ¬}ÊŠd¯exR/š",Ña‰¦K4EX¢)ÂM–hаDS„%š",ÉaI¦K2EX’)Â’L–dа$S„%™",ÉaI¦Kâ–>;¢½´tˆ°ä†ì}âgXºC{|éaIÅIu9öVƒT{…ÙèÄϰŒÔú$ È+ Å¡]ëdа¤Gvûb.ð%¹ôÈn_ . í¢+ÖÒ;» (úÎ5|÷4ñKÈ0Úœx„¥¸šKü–°’Ö ÕµgZ–q},D<«D#,qi}ù[9Ãâ%ÍágX¼X=ÃâšPô ¼O4",øfèÄϰô¹v•Z³u‰A½a¶JìÞ•Œ÷1°¬¾ß‘yV0ö1°Ä\|PôEf/2’™óÚ$Iì–‹ó*îëG)K¦Kb·4xƒV¢–óc (G$ÑKi9 Ÿ)ñKtð™Ä#,±«tPû®uó ­X‹°ôUyjR]q_áE2EX°”q3òå°„qgmêq·L ÞA•h„%'SPn_°®ÅIßHV¬¾I•X„¥7 Þö–X„%¶% ßh±«,Â2üyå¶Á»#?Ã’ýZ“€"ï±z¸g•ø–ŠÏü$vKØ8 †v­°äù´Ük}¹Ž  L–Ä^ºÃHE", Þ³•x„%×çíC„¥Â3‰GXúÊ ÝŸ“x„¥yxßcb·„«8DyÝvÃxXÉÞaI4Â2ü ¸§h„eœX‚o”$añ!Àâ–<ù¹'°OÜ^@‘[ÆÃºŠÜºà Ê Nì¥ûÞBw%S„%Ñ‹_|Ÿ›€"™–f!&aéŠ[Ï#,.À öÄ#,.Â^â_aU¢–qC|M6±3,ãº$´S“L–Ä#,yÍB»X„%÷–Ó!ÂâWA^<ÂBP4ÂßJÇ <¹‘X„eŒ" L‡ Î N¦K¢–6¬ ´…ì¥ûz ¨Ç=ÿ+Á<÷D#,©¯‘áÙæD#,%X9vK˜§ Š€ ûrrYj×ÍÈëR–„!Â’h„%­ãÈ, Nûüˆ_ûL4Â2‚[ðÌu¢–°t+g>a'g:’h„¥tÿ ¾#•h„ÅçqőԮýËñŠª€z1Iu\§¶à°|ÈI˜EY„eDݪÐCû-aë²ÖUbt;Êc_ŽÝ¶Žy[BršºAöû-a%/Qh½Å®²—îûì¸x©®ÓŒð–°D#,ýÇGŠHµ;`ŠHµÂ3ý‰FX¼ïk¾Uj×-#h\ߟ€Úï^[<+˜",‰GXjWW©.²p?ÞaYaöm:DX’ƒR=DX’G1Ötx‡e-pæai­Huí;Ñûˆ¿Ñbø–¾‚;"oì6›u<+  ˆ°âñx8Ã’`Œ5n s©4E|ïÄHΰ´$T$Qpx~(™",ÉaI¦K2EX’)Â’L–dа$S„%™",ÙaɦK6EX²)Â’M–lаdS„%›",ÙaɦK>DX |,",­¡ðÌϰŒ®¤vÑì5W$Í^ƒž{>œaqðt]ægXb¯MeaÉ Þ“M–L#,çM+´šËì ËÈsE@‘=«gÑÌ#,ÝA.Y@‘=«V E^aˆ«—÷=«ˆßòÎ4ÂâÃ8ˆeoð¬2{é~©fèe~†%$˜3Ÿy„Å­ðe´Ì#,#ª (êÀ=ÑÌo  ìR]4è¢ôÄð.žlаäC„ÅÁÓ<ùa 0ù-aÍÁ­|Œ°‰°äšœ€òô|mŽŠDXðy˜|ˆ°à—r²)Â’Ù-a}lW´ È4Â’Ï‹€( v к›&µ‹äZ·m!°¬ø.±Ì#,Â{™ßVú²¶ ¨}m5®µÅ(‹]¥–s^šÐC»]-Kjí¹ga§-Ö5 (zóR‰RëÝzõ’T½y©å" Èi‹TÑnA¦–0jBë-v•EXFdEk2°Ä¥­ÍUõHn„{V™GX ÎíÌ<ÂR²÷N@í³UJ¡IŒû !%7/}#¹!Äyè ™",™FX|^BF;™EXúÚ½ ûs2°„q÷ÚÊü–°`„%ó[Âr‚7¡eaéþKï§ev†ÅÐuP75†¾…›M–Ì#,µÁSË™GXœ‡7íåC„%%h£–è ÷xˆ°$x>-",}É*µ>ÛPáÕ™½ÃR»ÍA;"ÙaÉ4Âr¾mε4ÂâFÞ#´¾‡[ÂböR»ÈKLî eañæÕfa‰û÷<ÂR× eO#,}Ðz¬÷¦K¦–./œ½–ù-aÙ­h/ó‹«íúäÃ-a Þ$”·„µ„vù3°8üEæ·„¼•i„e˜ xÆ3›",™FXRíÃ2ÒËxý ¾ ži„¥Œ!ga KÎð4O¦–Nè:Q’i„¥û&øVîL#,~¤>£øv¦–6öÜ–ª!Â’i„¥…q‘nP'’5ЪP$nUámá™FXòð1½T—Û_EqI¬Ë“yæ€gv†%–Åg‰qán<Á½m±«ì–°^WñBëw»šºÅG·öevKX:Ô§ýv)aEÁn ‹}AÔ$F¿GÝ\^½€Úß ª ¼S<Óˇ\ó"èªÅ®ÒK®ãÉ#/ NdÝ}raUáy›FXâ¸-Æa|‘ê¢{0؃9Æaôxfl¥eEö`"ŒogS&¿±w›Çõ&^@‘w›})I@Ñ—0ñŽÛÛáÝæX%‰Ãø\¥v‘W°"ÌyÈoüÝfçÚ7önóZ`öG6Åa²)“Mq˜lŠÃdS&›â0هɦ8L6ÅaŠ)SLq˜bŠÃS¦˜â0Ň)¦8L1ÅaŠ)SLq˜rx­¥»ÑR]'j1ÑNM9¼Öà_9Äaºã‘½§î*~ÒeíëZ EîiöðLF¡q˜a~½ÀhÑÕGfW¾E³ð×Zj_eEìj”QĮֵ$EÖµ¾Ü^øI—T=Êõ)ü¤‹«k–P»]í«¡Œ5Çà‡I«ÔCìöëÞð]xfÍNÐ{~û5ÌØ(‡»Ä:¬ (ú¾(|¸°8Ìx¥{Mм/“ UÃlUhÆ/­A¯ð×Zºßî$ÉÅHÕEr1*ôWË#¿ÅÕèÉÅÀwŠþZK¨>IŒäe!_ÑZ¡˜â0…ÆaÆm60û¶Ð8ÌȃIP¿hfìZ—,µ‹œÊª¹Ju‘SYÍ£ ÐBã0ãþBxs¡q˜b QB‘Ùj¤€A”Å®Ò8L§;„¢'»ïX’€"w4:©õüŽÆ„V¿…ÅaúÔoÇ+4óa$&©õì¹Ã›— {­e$ézÜ»Jã0¡¯å°5¡q7¿p¢q˜Ë{MU@‘ÙÊÃ[ò Ãô¹=Eßk КÐ8Œ×Þy©®ý½¦>8PnA1Åa {­eh1i&.y…o±‡UÁ[P ÃŒ3±e•P$º…c:…Æazo'xÓ^¡q˜ÔG|¦Ð8̸«¾ÖRLq˜òÍV±y”iY¾±Ùjí²—Pì„jPôô€KRëéé ~#»Ÿ)JíÚuÕçUlý>[¥n¤Ê‡)ìµ7Ž@µ{V)58Òqw‡Ëá.± £”åp—X-p¶:Ü%Vj•$±{V9—"µ~Ÿ­üï'/¦8Lá']Ö¯tx¦:x7Váq˜±L‹Šèê¸êE@9š¼×<ãÌÈ.ü¤ËÒ¤~¤wßE*¦8La¯µœóÉ€"·^¥æ$FòZË _Ó(4ã¤7© ÃtT†yÈåðZ‹ƒ¹…Ý%ǃãm¶ò}€b:Ň)ìµ–>AbÏŠÆaF¼û9,32# gÅ^k3Q+ŠdºUüÆ}¶Ê9Ây›ÅaF5I(’9Øü*|ã‹Iª/$bk¤ºû«ã]· 1îƒÒ{[×Ë1ˆÍ5A^/ŽÜM sW ô±™¾J¨°¿Hã`¾\aw‰ùÖçd, ‹]ew‰åŹR¹K¬Â—| ÃŒKIà­j…ÆaüÈþpã~†¸lWw‰5ï¤v…ý[•®¨.S„¥ð‹ËZr~ÒeÍ®w‰ùÊëaq؃9¾Ö3ÎÊá.1ÏêaYK *’]2ÜC¦K¡–QWë:‘Ý WM<²†ä¥º¨TK“ê¢û«ú÷<Â2v1$Ù_íË' v©vËTqo[V¦K1EXŠ)ÂRL–bаS„¥˜",Åa©¦K5EXª)ÂRM–jаTS„¥š",Õa©¦K5EX*?é2^ðŠØÕ OHÔC„Åà ªÊ",cp£L’zŒ°À\þzˆ°xhï+°t¯íÁ[‰*°$ßÔ«ì.±þ0_®ÒK—Œ²ØUöZK_ÀSË•GXÆ' HÜ*¬‚TÙF›+°„’³ôäŽÆ 3•*°Œå\lQ@íw4¶IXì*°œï…t‚í–R‹€z¤¹QABÑ›„`&\åRqŠì™‘Ü$ä}Lм‚åáÛbÕa©4ÂRÆBçX+°„e¹IŒôaQìŽFè ñK,ð¾¡J#,cãÞQi„%Œ\ ´_XY„Å/iEû«Õa©<Â’R#íaÉ ŽÚC„ÅÃW+ê1Â’ŠÔz:[Ák=DX"¶Ñ‡KóUBí³Un íOTS„¥²Ëâ+¼­²ò‹sðN¥Êïo²7E=«Šr‡ë!Ââà.•GXÖo³©<Ââ"¶9,Â2F-\[™",•FXÎ1ÚÉ*pO´òËZý*ÕE_„»õpÒ%·Ï+°¬5G©.r;‹wp C#,ãÅ\ì ™",•FX\^b„ë!aÉKqð¤q¥Î ôê½%eñTaY#Œ?Vaésm„o#Va)ݳ‚· Va[ó®áo4DX*°œOxÅ( HîJâJ#,#*Ò„Ö“ËÒG#Š,Va‰}ÕäÉ])z|4ÂÆ[ "#™­<ŒVS„¥²»ÄÖ%¯U×Ëže×(h½ñ"øÎb}avµ/æ‚ðÄ®vŸ#E²,\kR»Â£¾²ß#,íì¦A”Ůҋ‹ÑPÔé‘êš*2î Ïí9 ¨=Æœ/Q@í !Asèë‚Å­QB‘{šWø¶E¥–FB&’„)ÂR–nrœ€¢–ç´c„žªw–"µžúk“ÚEwW`|¨",ÞÁ^–o…¬¦K¥–1ó8jy„%¼æã–îÁ4©."Õ߈«‡KÑšÊ#,.EQ伺Æ" öÓ®c“ £e`аTS„¥š",Õa©¦K5EXª)ÂRM–fа4S„¥™",Íai¦K3EXš)ÂÒL–fа4S„¥ñËx¢¨ÍzBvµϰÀû£Ûñ KC+Övˆ°xx{;DXºZOÖV žwo<Â’¢Ck÷fа´Ã–W†GXJ-hg¾ϰ¸$Õõ‰î3¡\Œv<ò/ ÈþjñÁ (²èà;,ŸaÉúÍaiü ‹ mmŠø)‹Œ4Ò/è[±v¹ (GQEj—g¹N@-G¤ñ3,>‡ ³U£–ñL™_³€"ç­2|3¨ñKJ%EEÏ[… µžêj.A@ÑóVa•©®&ïÔ®«!ÃØo3EXÚá.± ½¡v¸K¬&hw‰¹]t`E'Úá.1ï²Ô.r—X­IBíûÕ·$1Fr/Ìn¦K£–Ö-ž;h„e¤¦68+ÐËx“½¸( v]M ¾ßX„åÃ8ŠP”'q>éo4ÂÒÇ£ƒ/27öZK^<¼Å¼™",FXºÞ—µµï®´ŒG-?ÃRÛ*ôµ«1Á<äÆ#,1Õ,1’XŽ67a ½.˜[Ðh„Å÷ÊQܽ™",Ý%—ÏR¶Ã]b+|í³ñ»ÄƱÌ* ö}á´kc–ƒ·¾7~—XwÒŠ$‰@n)plÓK×. ¤fа4aqu)p§¹ÑKæ: õHN+!n4ÂâÆÅöpî –1¶]¾q·«ÉÁí°´q*+JŒ·Ý•îd› ›)ÂÒh„Å-¹ÀHYã–âቒvx­Å'hW¯µ8øîV;¼Öâ°‡|x­ßiÙX„eX /¡HŒµwPƒ(‹]å–’´÷<ÂðÍ%EXFê/ŠFX ʳjÇ ̲h‡K+¡ (aÁwñ4aéýýhS„¥±3,múñêDæÇ g+a9¿‹m4°Œ1Üso4Âr¾/ Zra ÿðmÄÆÎ°´q¼NB‘û™xgj3EX;ÃÒ'HâîŸaÉ® Ü»ÆÏ°|7iã–Š3#Úá K…÷è6aéówI@í·_WüŽAcgXÒ¸ë„Å®ÒK ßäµÛUïøža£–Þús ‹°ô~l‚Þïvu¼^‰W'4ÂRƃ!Iª+ìwvyx>­±»Ä>´º²·ØUv—XÿÆ"ÖuÚûqL@ívµà{N°œæ’PûÉ ÕKMïó.:©®°ŸÔK’Í!ûn‰<eа4añø$hã–‘:ÜÝ „9ºíaÁ3ß1‚÷–€÷¿x„e\÷(1’Ó5®¸.‹àgXJ©) (â8˜­ÜgXðË/ía‰ðíÍvˆ°¤ZÌC„eõAjñ*ö¿h„e“Žë„e`а4S„¥™",Íai¦K3EXš)ÂÒp„…Ý&øùýáô°, aÔ7ê» õÄúiA=~¶ ^ž,¨7S]ï”3IÕ™¤êLRu&©:“TIªÎ$Ug’ª3IÕ›¤êMRõ&©z“T½IªÞ$Uo’ª7IÕ›¤LR &©“TƒIªÁ$Õ`’j0I5˜¤LR&©F“T£IªÑ$Õh’j4I5š¤MR&©&“TÓÉV×7ê» õIJÈ>™dŸL²O&Ù'“ì³Iöùd«ë› õÝ„úaBYdŸM²Ï&Ùg“ì³IöÅ$ûb’j1Iµ˜¤ZLR-&©“T‹IªÅ$Õj’j=ÙêúfB}7¡~˜P?M¨ß”©‡ª©‡ª©‡ª©‡š©‡šIöÍ$ûf’}3ɾ™¤ÚLRm&©6,U¶2üyz8}uË˾ã¶ÔûÓ3Êï¨2^§÷vT;n ¢"E­`gëŒJ&T¶ ~¹å¶*#˜éÔ˾{—ÖûèÃE$Ç#KðIœO•5ˆ"’ðKÌ 2þûaGåq–öп?šP'*¯’îw­Ï¨Ç5ŽôÜ.*/?NSB‘—kãî8ˆ"òòC¬Eåp¦ìŒ"š3¶NìíÍq~dºCT1IµRpëý¾ÜÕ,uýó@µÐç£Ho/-€ì3Šèý¸bÒK(ƒFÿcÒûýÆ&X“"i ŸüŒJÀÍ—gT¦(îq;£ŠelÿSM¨FQ-&Ðúct|"7ò‚—_6µP^٠㮋ɾ€û1Ï(&{"xg“=¶÷Ùš  µ&5¤ŒPÿaÖ·A;ÑQÞÒúÿIŒ3ê¸]Tï»X°…§Ó;A[!SA¨?ŽÎ¥®¢<µ¾ýD&U—a»þ°~Œ>âv%:jñ ÓQÙ„*¦vU]ö§Óˆ•óÏõ‘ÊËÃ1ÔQdNûp~Ý¢Mu}¢­Çcû4tõÉ…öþÄ4zÂÈ4º¶Jõ?Á„":á\]"Ô¯ÿPˆ ¸{팢óc7åc1µ«2 ¤QMŸaÜéËýÆîóˆú¨ÛÂŽ:QÆÞxQDszeàÜÜE4ÇA”!ê3³rÅcÔ“>ÃtÑÂqW{sÊ"UOf+î:ßPijZ%I2:†RdEt¢ÛLÜ®H=˜ÚjPDö}æÆ(¢÷}Ì.©Aó ã²âv½™7 Ëžê}ìK•ëýê¡®~%½Ý+‚óc«9Égr§ç‹®>Ô½ŽŽ:éþjG=²¹®(:ŠÙÕ ÞœÝPÔKË·žht욃eÿL4ºOp ÓQt5×§«€QT +¶˜Åfä$}#ÑB¾@¢ Ö·£¨W».pÜQD ]Y›óö@ç4ìËuÔGê y¸¶ê(¢9Ýo_°$ÞMu}¢¾Üp; ŠY_¼úí¨'ꋾV訯le^Ö>£¾±1$háÛwËÜñöC_»w[®N¨‹4¼~ì(:w, ¼s½¡HowY`F2w´ñ˜QPÄ7‘æŽ7:w¸ñÖ„€ÚǶ ~ÁíJl&ÉžùÑ¡Œ*¼õ·«R&À=«Ž¢£6wëúÅæ©.¾ÿ%i!Ýÿ’%Áö¿¼dsþP-ì>f ÊЮ?Þ2[ýa;”x•éØÚJ¶9tm%¡<óÒüxˆÅ ¨v_Z€(6§%<+ϼ´I]d¤æç& ö~ìƒÍ|þô•ùä ô¶;ê£n1;ê¤ëWG=šêúdªë3›ÓÖê!ê‰ú¾}ñ!ŠÍ ÜqvF}¥ŒØKóÌãKÝ/DëGÏ÷ïåo$šs¾ýà (uÿÞ]þÝš´­œg±)bàY,  Þg±€IogËxüZ¨®põÛQÕÄØtËä¹·½.pNóÌÛgAq?RoûCêÚ [O½íè¸SÓQtÅ:¶N¡N<ÓÑÑgQ‡[O}¦ÞÝxt<1Iâ+•D÷ q]ßh?Ž­ˆúÎöœ‡¶ðù‡©]Ϧv½˜ÚõJ×ë×3óÒrÄ€®‡&ßÈWøpæól=4žÏ¸.æ¥ù5Tµ¯‘^Qø±jÚçǼøæY±öE –=üä±¥ Qtmu6sEìDj ÜölmÕ[WÒž­­F ,C;A×VÎK­û¨G<=[[%aìÙÚÊS%A×V}í÷`<[[I+ÏÖVÒúѳՉì3½1½OpWѳÕɇàl£éêDŠ‚{¶:‡›ñx¤«“I]‘Õ%Ì¢ol~lR]i¯k<Çö›iíkºoâñèxË–™¯¯tH]%G E÷Éá’gë¡qˆXWÓ=ÑÀ|&ÉCÌ’¾10?GZwæçLê2ä<SÎC8ø9î 6ÃŒw·|PÄëÀÑšÀæ)· °Ya‚Šú:-p{/¬·³÷Ta+AªÔ2µ¾[ƒ€R}òÀ-S÷¬°Tß¼>j³9QXfM¤¸B`v" ö>-ô¶Ûrë߇é(–C…ßøô¦£˜~…ˆö†"‹5U!.Y¬I²&‘Åš¤Y!²X“d'"‹5IýY¬©»ÃñkÙºKµ£¾ê6§£¾éÖ¤£¾³uô™:ê‡IϺoÙNMלšŠ€R3\"Ûƒ‘ô>²Ý• ŠÇàþDdÑ­±,‚T¹ï }¦È¢[Ò>fdÑ-)ÖYtË»Baë©ï{^ÂÀvñ]k ŒÌúJ»‘ÙUi"2»*ù˜ñ¸‡ ãCñàI#ÚÕ&äuă]몦ºØ.ÎJ‰§_†¼´Žúhi×/ùN®‹õvrX£é®u_”·„QÞ¢¿‚ YìW˜;~%¶¶ £²¾ÿÕQÅ2ÃüªþÕô|¹xúC{»®‹Ç¨4¦3.´(še!ì®tÔ#ßypP ÿÐ=«GÔ;ŠÆùö¿:ê‰å ¹¼@ݳraiX_ÙŽ\»wÔ7ãw=O¡£~˜ŸõÜ•ŽzacHЯ?lÏ g4vÔO=JÙQÿbñmèËE ãbŒ* Ô\Œ8âCŸH†q "Mê zNMdQ$çðžhdQ¤ *›ÚUôüèÈ2ô|YàeG;ÑWî Ö‰œ¾úM̳q«UBû…½¡tð¬ð “ž•ˆŠ¦ÖöMó¬¤ù11ÏÊ þD:dñHí¢ûN˜‡_á'‘J‡œœÛ™Ø _Ú L/ gw'Ó91/Mš‘óÒ&(ÖÛ8Η˜—æŸ)±«fÑÄãÛÝ7 ^@©Þcb–Iòs³L·LК$f™¤µUb–ÉE”=µLTµŒ´?MßÈ£‡>+GGfý„ÌÁÌvšÙ•Ù΃/86—ÙÎC>»iEeðngáß(d¯®«ûe|#µx5W˜$’Ç>@a’ ûL…ïÁg~ “„¸;*›P…{Vh@e'¼¼«R»h, bO´²^1ã3•ð7ó ŒU÷ +;áåEûõσ¬ì´”Ç×Q'S]܆ѭÊö:¤|¹ÊÎIË>À?Ÿˆó˜1êчÊÎIË3ò?Ù„*&©V“T›^Wc¹ÃÒxc¹ÃR6|c¹Ã“ºõ‡Ær‡¥šÆrt]Á³Uc>¹ë‰ÎQ4î“<‹6æ“Kþjc>¹¯aƤC¾‰ˆ*¦ª¦j–ºèÎÖ˜¬bPê<ÔXüQ:óÓXî»ÎCìÞ•3ŠÎý:Ügk’Ðo,çŸcmlÿ«ÈuNŒ7S–X;œtÁù&E)³8†øIÕ,íúÅ2»Ëä”j£[óu?îò7Óš¯±5_Χ5¶æ϶\W6¡ŠE½4iUÞØŒ,G>#ãUfc3ò¤.¾s*XL~s žÓŸ‘Ó"èê?ÁTWd–\˜Ó茜…øPc3²lWÿ)&©V“TÑIcn¿>ŸNŸè½QãfŸûoì(vSU_û+÷ùñÇ «ËuE¼G}â(‡nsþùùó¡®´F€z: bBu}51>?³ot¡œQy½žžò:Gu¼r½ÿ+¯ zW÷€òqL1ÔõôkG¥„÷¿8Êw¯ö’Au¬ëatnIàëª/B9Ÿ<;ÖõÂoh‹9 vQ”ï+œÇб®×ý®ºÿëkr×@T„£†›Óα€cýüJZûàvHoLy‰÷¯P1wkrŽŠÿsC#Ëí¨¾¦ã1ao×ÓÃË“[n·…7?òRîQj¼˜ ¢O'†òã#ïmáÓ§Úo1÷el<=½<}\è h­0P'R×xy/@Ô#©«°®¨OUJÁu}¦¨ñÐ5D=Q”Ï ·þ C­­BÔWŠriÅòúFQk;nõÕ…òê« Å­êÙ„za¨ bøõjªëçBï¿÷Ëë_Lª­áºÞx]Kõ—Is~STZ+þÆw¦_®`y$¸E^¤)àÅ£ŸO_Øê(ðÐEÆP톜Ã(2†\ì "Œ"c¨ÛB|¦"ch¦„Qd }4Ò¾°1äF’[‚¨¯ –C#’±âv}gu0Úõ¨gê…µ ¼âwF½šêúÉPùþå3ê_LöYò/l eQ¿hoÕ¨ßL¿RÅí"c¨ûä¥áºÈ e<=/ ö1´†¥©~}yzØëêË!”/7P*\iݯ†Qd¤uÿ> 1ô•´1Ð@,` >ÓºúÕbFæG'q]ߩϴV‘ùѵ­fû˜í®ü`6º£à:í³Ñ#0qo3?º¥‚[ÿ/꯸ŸóƒÙè2ü ,Õ_t-ê›Àø›¢ÊÚð7Ý–\Ñòf£ckКüà6zÅóãf}»‘(×è¨íÍǨÈPI*]á…FeŽZqë ßMØšT:Kó¸õ¢œG¨gf™úzh­õ‘µ+"Ù?¼ÇÅ£Ùê™{½hàùà=Ž­ˆúÌ{H¨ë‰3¢]Ågf™,àoüÊꪷëCņ%ñ}#Ü¡|æÞã¸3RïÑ-%ão¤+ü‹¸]Ô{vž¹÷8×8ˆ¢Þc÷n׫«üÔ{ì ŠŠÛEw» t•X&ßû±bÍ¡q«àAs¸÷=ägî=~¨+òÒž™ý÷/»* H]ÝmÂu¦…-VE½GWq]‘iá Î?^P´®˜p]Üb†ê­«:\Wf±¹ Œ!æ=úPp]…Û/A ™÷\ÃuQï±K¥aÙ3½V4ó½0-¼á5PÙþ—Gû&/‡¸¨X×#ÛÿŠÈza6úœÇ‡[ÿÙTד©]_(*6”×ñÂlô¥aõ×…æŽf£Ïw $ˆúÁQ×õLQ©¢Êf£'¨WŠªéê ‹âSYõ/6»£sMõfªë‹ž®‚¼~›Pï,^‹Î±µÑ#tÔÍF—á4áº<›Ð=5è 㡽áß.5P‰îÁ`¿ð…Y9áEÀ*ÌB'7ªÒñ˜‹Ã­oÜšœgQžõtxégw?yîß ­÷|mãHÉ=*r¶Ö‚FZdŒuEòÊ“Ã<(u üa?:AÝ©Á·ã T<  D8š“XëspPïóaÕÐ)ï§rÈXÑý&O•£ÜØ=ª±Ù*Œ£Æ¢>ÒÝ;ls›­Î'(2[| d Èlƽ ¢>›êz2µë c„ã±±Ù*à7AŠîG㻨ŠÌVq„b±TPß¾à3Pd¶:_ûñ…¡àžUc³U<"ˆ¢™pãî¡Ñ=>x{Æ@‘Ù*â{}Šfñ$ls›­R„ù÷Ef«‘Ô\°NÐÙj§¤Ô>ÒRFçkÊSß·ÀX@ã«€±œkE÷:B·XW©ç>)ÁuQŸÜÅÅc©’Ùªž!D‘Ù*ôª"þƦZ“ׇ¯}Áû@&«âÉèËŽ  <ùœT‰d1/¨DµD^?~u¬]#) ÔvQ4Jù1>>¼¸e%íB+Ö Ê騟ny¤g ª„Š*êµ3¾ªŒ¯?)J¨Ë=ü:HÕI(oBÑþ ÆöEz;5${ÿ%¹å#Eëu2¡*9­_À)ï ª‘Oô°®—ŸL^®$„zëúõ¦¶ëÏa£ÈÌ×}w/ Ô:£h¤?‹íJt§öÐ@•,qèþ¼ry9 ¼ ÔÖŸQ¤õ öã•´ºâŸg&U¬…g”7ÕŤ "emz[ì54g¬®jÔõÑ„:™PT¿µÉ$‰tDnhîH\®¯3“€¢ú…^ò½ *Hªù(UØúüç7—ªŒ:™P\¿²€ò¦ºv©† åuFíRõ}ªÐÊUb¬l~:Q¾n1²åÇ —jtêdBµß( T©žQDªÝåsj—jX¡õ=£¨®&/1Vv–Iõ¨«Põ·«ÊþŒR%qFE¢9IâŒRíj{ýÎç´P%ÍÉHªg”71ŸÉ¡lå *±4¾" ØœæïÎxþëá_/¿_^?ÜíúpÔ×ç§_Ÿ‰BûT$Ôî¶ñO@}6¡ž4ÔÏÓï_¿Ÿ”Ö_PM¨“ õhB}2¡>›PO&Ôê« õÍ„únBý0¡žM¨êÕ„ò&T0¡¢ •L¨lBªšPMG¹diõÑ„:™P&Ô'ê³ õdB}1¡¾šPßL¨ï&ÔêÙ„z1¡^M(oB*šPÉ„Ê&T1¡ª ¥Ž´·ÓÏÇôÁ€Òçí3êõë·åLí ΄ò&T0¡¢ ek}6¡ŠM’ˆ&ID“$¢IÑ$‰h’D4I"™$‘L’H&I$“$’IÉ$‰d‘Äï/É‚zy5¡þXP|pK(gjÜ"Ê›PÁ„Š&”­õÙ„*T4I"š$M’ˆ&ID“$¢IÑ$‰d’D2I"™$‘L’H&I$“$’&‰_Ÿþýùë>è¨?¼Ý£Ø=o§‡‡§¯diY×ûŒÿ;Ô9P‰êzy°ÔÅPœw¨®/o_ uq”Ô®/¿Luý2ÔåLòr&y9“¼œI^Î$/g’—3ÉË™äåMòò&yy“¼¼I^Þ$/o’—7ÉË›äLò &y“¼‚I^Á$¯`’W0É+˜äMòŠ&yE“¼¢I^Ñ$¯h’W4É+šä•LòJ&y%“¼’I^É$¯d’W2É+™ä•MòÊ&ye“¼²I^ÅÔ®bjW1µ«àv1¯ãŒúAãVRë;ÊÂHQ£ñé¾®j’D5I¢š$QM=ÔLíj¦v5S»š¥]ÏOÏj]GÔˆááº~™êúÅêr÷þjG¬º´ªµÆZ× udd(¿$w×fGýëDÅÖsÔÀ¡®“©®“Zן7K»8jàšP×ÉT×é®®C9S9Sq”[|\`üùò$P'e¥óèL½íîzû|^Õu2ÕuRë2õ¶»ëíP„ºN¦ºNZ]Þd'¼ÉNx“ð&;áMZèMZèZªúåMZèMZèMZèMZèMZèMZèMZèMZèMZèMZLZLZLZLZLZLZÈQçg `4ia0ia0ia0ia0ia0ia0ia0ia0ia0ia4ia4ia4ia4ia4ia4i!G—i3ð'¢Isâ½Ï”„ºN¦ºNj]&͉wšs>'ê:™ê:ÝÕuè¡dÒ‰dÒ‰dÒ‰dÒ‰dÒ‰t´L9/-™,S2Y¦dÒ¯t¯_U¨ëdªë¤ÖeÒ¯t§_¾uLu´º²É2e“f“f“f“f“æƒeJ ­š²Isò½æ8¡®“©®“Z—Isòýj. uLu´ºŠIsŠIsŠIsŠIsŠIsŠIsŠiN+&Í)&Í)&Í)&Í)&Í)&Í)&Í)&Í©&Í©&Í©&Í©&Í©&Í©&Í©&Í©&Í©&Í©&Í©&Í©&Í©÷šã…ºN¦ºNZ]ͤ9ͤ9ͤ9ͤ9ͤ9ͤ9íè3­ç;¨ŽŒ&Ÿ©™|¦fÒÂfÚÇl&-l¦}ÌfÒÂfÚÇl&-l–}Ì_î×ëB^¯üàêûÃGúºà’Ê V¬ïϺFQ×Swu½˜êz±Ôõòüd¨‹¡ÂB ®}}0ÔÅQ×H—ý@€NÜ3žLŒ'>¶=’Ä¿L’à(‡yøÃt"xwÿîÖÛ»ãšS¶:(“TIªÎ$Ug’ª3IÕqI¬kàÝ›F‡7oÞ4:¼itxÓèð¦~ô¸ïë:©óÕZ®B]'S]ûxZZ-¨.“¼Lc(˜t"˜t"˜t"˜t"˜t"˜t"˜t"˜Æv0í`êmŽºÝzW—I¶ÞævÂǵ[™Å<3‚¹6š4'š4'š4'š4'š4'š4'š4'š4'š4'š4‡£òx­8¡ºL’0iN2õv2õv2õv2õv2õv2õv2õv2õv2õv2õv2ù ÷ã]]åy3ia3ia3ia3ia3ia3ia{åû9Þg0¶›IW›i ™ö(A ›I£ÛQ£…v™¤j²_íß&©þ1iáMu9Xký×ÇW·ß?á··ŒX]Õ+cw‰%X6¼„ÊZ]OOOþ'ñJŒõå1ü$ÁŽà2B}}Œ?÷Ù*¸VêÛcº¡ÊâB õý1猪èêÇc¹¡Î7¾6„z~¬7Ô¸)ØÃÖ¿<¶ŸDXàuˆßŸÜéåýáÏžÀm»”»¡ÆÃ÷·¡^Pþ†rmÉA`L;ªöe‡ÀXÿìR­ë}¶_G½?¼×ûÈϱ®Žj'"¯õü&Â]]îÝêòïî´K";Œ/¨°ï •e…²”1mo×ݵ+¼GC»Â{Ú×,ÔI»äº"©Ë·í~_PWVn¹ Š1‘vù¸ç1*’ó 5Þߤ}AÒC®œßN¹kWBšs‡Ê&ÙgÂX–R׊몦ºv] }@Öˆê*¨]•L¨lBYZ_ßöÖ›S0Šèª_„±]Q»@]»ì#|â‚j,V^á76Òz™±‘võ¹#¯×U•˜ôϧLJÝÞ§®ø÷­? jY//t‚ºÜOâN,÷¯ÈQ%-Î uyRWwwQ~<Ƙq]á§"ÕÊ·D¡]ÑTEÅèÙïóö¸¸75\W"ߘËâq]ÙÔ®5ÞÍB]ÅT׎òëö6"¨k÷>”1sãºÊõ‰¨áºvâ|1´Ãuí(×R½?8PLW¥od¨œ×p]ÞT׎×ß{‡êúdjE9èm_PÞT׎g¥º‚©.2†º1\=®+šêÚQÁ»rA%S]‰Ô격®†ìa]Ÿ©®ŠuQTZ#È™¨'S?²uGmum¸®`ªkGµñ  PW4Õµ£âÛýŽÈ•Lu‘~¬› êʦºÈz¨×*®«˜êÚQ¡;å.㺪©®µÄM^|vï¨/ÈN”7¡‚ M¨dBeª˜P@ªw²ÿj²«5üBl ¿šÆ#Eù¼vâ«i÷#*ö¡–"®‹Ê+ŠíÚQq•ë¢RMà.ý#*ÖU˜‘Ÿ™ìS¸¿©ýˆŠ1-«Ð.::º£#ÈkG¹!/‡ë¢££¯ =®kGÕ1j+ÖœjÒœÆ{[`l¤·W,‰§ª9ýkÀ(²sÚ†¥aT$«¦%TEú1öÁ-´‹ô nÉE|€/ï[Ô.ÕrµbÙ9õKL°õtõÛíR)£vy¥¾ªM£"]Q¤1Šhtg2:nsbEv•¡ÆRŽ´Ž¢–)T8Òj`V¡]L¿âý]úGÔäp]Ô2¹,}#ÑÕ,¬‡:ŠX&_´L u\ÑèR uU\Õû䤺ˆe A^Å$ûb’=³L‡ë"1Š><$ÙSû•‹êÚQ³¢½¡§@ëòã‘^„Jt/m)> ¨LFmóp—¬£öo ¥WÖ0ª±¹®tž2µaéjQ»æŒEyÎU¨õÍY`¬¤.aW±£ˆ-\ÚåõÝ;T¡ö+/îÞuiý€ (ª÷>áY¡P]ë&Œªt•YƒÐúFÖÜn0P•X¹îm»5c±_eD0Ь(ÆÓu£ˆ7×¥yŒ"«€ŽŠ#ñï{»BÂ(â¹—¥5(ûF=ÑñzÅ(2?úíýG€"ócx=ÔQ»$J.KôEGGï#‘ì ¹&¶«ÐèéÚîwù_~}|PÞW¸ œ åM¨`BE*™PÙ„*&T5¡š‚úÏÛ—ç·ïïÌC¾Á翟~Œ¨î;Ùp÷1éòïá}÷j7}‡ ïñ†Êð=Ö *½“ nt1”‹K+*¿“•NZ cz/;ªOD1bTÝQ¥»î¡2©KnW&uõU@Ž£Ú;Ùp˜±Ðºúx¼¥{ êûÃ.ûÒ­oĨq¸î26R× ÅôëŸ÷‡ÇÓ²|"sšÇ¨ß5Þù:ÇaލOÿ!oy—>ÃäPO¿H]}²]ªë˂ʥ-%Ô·wZׇ¥4Ôúïï¼õ! Æ—Ö®rÑœ#ê¶>tßÑ#Ô¯/¬]ã¡n€úýh—{øC{hø9 .Çúq¢XoMŒtÕ³ÞŽÝFWÔz>†|·H¬·EyõÞd¤-eí ¬·»( hN8ô¶/kF(ÚÛnì4¼·ãê„âóC_‚~ ¬·‡èQoÞÛ)\|ò;ÔA-#ÔZר™Hª\'ÚæûQÜÄzYéQL'ú"ŽÚÀuB’j׉¸ÐuZ*•º p ®ø@%»æBýá­OhL¿ú‚¢!¹5éýŠé—/9#ëú…ÇPdú5ò: $¸~õDº™~·é=МÈôË縠Ù=2ý ko<’=Ÿ·û ÓPë™~¥¼emQL¿D©rÍYã‚ìê@e2[õ1¾11ý û&‰éW¥ÆÄô«FŠêW§„c(ôË7ä¤ÏïÌö¹Õŵ0/ É>q- ›ç~D1-LÝð ‡ó Ç;ä+C‰ialí18¢Zè ¦Ÿ¬]¥9ôÜ¡¢oä¶p 0‹¦ƒ® =Ôµ°,Xò0FÕ…¬2ò:2Ó¯ÐÛBQýÊì©f>?–²¢Ög®_#¤Žêúü‡ûä!/Å=+×*ÒûÌ´°ßA?æïÌsOxÝ‘¹‡<éFuý|?øÉžiŽ[ÂüÕÌ=«¼T´¢È|•dÏ4§¯Nàú13Í^SÊÕ²ÀOÈÊf û²ü˼CdW¬…ëêHȆ(ª«]#J²/LWsMpÝQ¸•skEsmaúåjw'ŠY9×!²L…Û¯ÔEíbZØ'÷€4ºp-L½Bý9ì)T ……éjBEŒÇ•tAZX˜®Š²çZꂤZ¹gÕç=¤…•¯‘ÇñT³L~&„:Î|ŽÊu"øKœïˆâ:Ñ-­Åf¾n|ƒ+õ‡·¾ Ùªr/­Ï/1þøÃ}€ŒtµrýºÆæîPØ ¬­Iâí U¸7T¹~•®†Hö|OAêí®_ ‹”UŒjD û⢘TW<†³_—B1_®:èç4>׺ê`]O|¶däß7î¥ ÏÈ«}ÿsÛ@íG¥ÍVû_~‰‘éW-ÝùEŒL¿Æä 5®_©zd™ׯktëˆâs­${¦_n½dÕ}zy|øýðÿÿÿlDðiDyLP-1.10.4/Data/Netlib/fffff800.mps.gz0000644000175200017520000005645510430174061015621 0ustar coincoin‹K®9fffff800.mps¥½]²ã*Ò5|ß=‡=RX™úóe©J:ª/vI§^ŸxzþùdY™€¡/:´¬B+W’€Ñüóïð¥þ7>ÿ×].ÿýÏ}ù—þûŸ¯¾¾¾·ñ§zýˆú‘ŽÇ±¸³zýˆú‘ŽÇE×]tÝE×]t]ÒuI×%]—tÝA×tÝA×tÝI×tÝI×tÝ^×íuÝ^×íºÛxÅ­˜‡×.F…ÛA?¢~|·Q,ºî¢ë.ºî¢ë’®Kº.麤ëÞtÝ›®{Óuoºî ëºî ëºî¤ëNºî¤ëNºn¯ëöºn¯ëöçñûs˜ëös\Jõ Æ3ϤžÉ¨OF}2êÓQÿûëë¾u}}=Ž?o£~ýˆëë½¶ÇwÝE×]tÝE×]t]ÒuI×%]—tÝ›®{ÓuoºîM×nªîöúñ]wÐ}H×%]—t]Ru§VÕþš Q?*Ø·®û­ë~«&¶GUW¿Î¤_gÒ¯3é×éõôzHz=$ýOÓ„t׳2Ëû¿.ú¿’þ¯¤ÿëMÿ×›þ¯Ï‘¼ëÇY Ÿú¯¤Øû·â÷¿ßÿê¯qº«g0žÑx&ãyü6êÏh<“ñ¿Œú¿Œú¿Œú¿ŒúwC¯î†^Ý ½ºzu7üënø×Ýð¯»á_wƒ?wƒ?wƒ?wƒ?wÃï†?Þ ¼þx7øv7øv7øv7øv7ü÷nøïÝðß»á¿wƒŸwƒŸwƒŸwƒŸwÃßï†¿ß ¿þ~7ø|7ø|7ø|7ø|7ôánèÃÝЇ»¡wƒowƒowƒowƒowCOî†žÜ =¹zr7øv7øv7øv?ó­7þ}ãg2žµÝ ÿºþu7ük5ø¹ü\ ~®?WƒŸ«ÁÏÕàçjðs5ø¹ü\ ~®?WƒŸ«ÁÏÕàçjðs5ø¹ü\ ~®?WƒŸ«ÁÏÕàçjðs5ø¹ü\ ~®?WƒŸ«ÁÏÕàçjðs5ø¹ü\ ~®?WƒŸ«ÁÏÕàçjðs5ø¶|[ ¾­ßVƒo«Á·ÕàÛjðm5ø¶|[ ¾­ßƒoƒÁ·ÁàÛ`ðm0ø6| ¾ ߃oƒÁ·ÁàÛ`ðm0ø6| ¾ ߃oƒÁ·ÁàÛ`ðm0ø6| ¾ ߃ƒÁ‡ÁàÃ`ða0ø0| > ƒƒÁ‡ÁàÃ`ða0ø0| > ƒƒÁ‡ÁàÃ`ðaþ9êô#êGz?þÕuÿêºuÝ¿¯ºós ö×BkqüïÈèþW½² ÿ}ÿœu¯ö{øûßÿüZ¶lo~î|íKýE1Ž_Ç®À×é?ÊâëXw løk1ƒï«Ä>øâm} µ¾äµNÞÖ)Ô:åµ~ó¶~ µ~Ëk}ð¶>„ZòZŸ¼­O¡Ö§¼Ö{oë}¨õ>«u8<$oëçq°x[_B­çy·u µžçqpó¶~ µžçq0x[B­çyLÞÖ§Pëy½·õ>ÔzžÇááq(yz[Ç<ÃÅÛúj=Ïã¼­S¨õ<Û·õ[¨õ<ÃÁÛúj=Ïãpò¶>…ZÏó8ì½­÷¡Öó<Ž#ÉãÈÛ:åy-ÞÖ—PëyGämB­çyݼ­ßB­çy ÞÖ‡PëyG“·õ)ÔzžÇQïm½µžìq‹JÄ–”/ëU"Ö§äq}^׫D¬OÉãú¼<®W‰XŸ’Çõyy\¯±>%ëóò¸^%b}J×çåq½JÄú”<®ÏËãz•ˆõ)y\Ÿ—Çõ*ëSò¸>/ëU"Ö§äq}^׫D¬OÉãú¼<®W‰XŸ’Çõyy\¯±>%ëóò¸^%b}J×çåq½JÄú”<®ÏËãz•ˆõ)y\Ÿ—Çõ*ëSò¸>/ëU"Ö§äq}^׫D¬OÉãú¼<®W‰XŸ’Çõyy\¯±>%ëóò¸^%b}J×çåq½JÄú”<®ÏËãz•ˆõ)y\Ÿ—Çõ:›„Öù×ràé­÷Þ¾÷¡Ö“=îY¶ýoðÀ÷K/Ï­Yð?R#<\µ~¿Ýæy¼ß#rù:>Äõþ/MU´Ø^¯¥ ß¿…£qmÕ]¯×æëø^ŽSÀÀA‚aøþ¡w­º(¶Zðu|hÈ)`à ÁǸ9tXtM¹Õª¿ŽO"9 $ø†ßN#_ÖEý4Ð×ññ&§€ƒÃp:Ûý[Ng» $ø†/fëmq­/[%ü:>ˆå0pàc>š­CWteû‚f몀ƒÃð×eõG­­ÊF¼v_ïí‚êz© ¼T-·Ö×û¢üwëU E¹uß÷F­òÒ]»ª¨Ÿ;™®PÐ5®á&Ó/U­¯ã«\1ð‘‡[*VâæµüÛh]Õú:¾yø_³ï¶5ç°ûWÌœZ_Ç—Îbà#oO.ƒmùÌÿÊ/ç¯0QqBa¼aòÂxÃl8 ÄàÀ“u¼:Ï+¸ çå\Tpž.Ôàj^‚m8¯Ç¢Ûðt¥¯ÒòjÃyAµ5”“J8¤Ò¤ò¤î¢"Š"ÈÀ!Më OëvxP“0¤IèÕ$ÌÓ$Ì›{bž¨`ÞìóTóæ_˜çÖ?âü¿Ä4¿D¿_†æ 蟃„ ½Žt ¹ y]†¼.ŒÃäå|0’—´ÁXD^ÖøT]º¦¸–në¯Ú¥Ð†üz²;…ñÙ±ßïÔb\¹…ŒS$´ÖNp”àßßÕ!×þÝBÕŪ¸ ^¯-·ÖñZQpàϯ,†‡îùýEöåŸcŒ€ }[Iq¾¬«+óò¯¯1)\÷$àL^Ÿl² ø¨j×jÏŽ™ŠnýZT ²­ßÖë¢i»Ã±^4³ ¸n61îÞ­ÿ6_«…'³ßÔÞáî,ÍbzYçÎmÒÞ}.y¬ƒëÀK›ΑKä“ çÉ%ò‰Cm ž6Šü·Ù:ÃÌÓ$ i’ß¼2¯_0OÐQ…샎},¿DïÈSžcQhèüÔ&‡ÚeQï«Nߟ•'µ+þÛ¨Åuq?-²³=-bÍyk΋Xs^Äš}Üd¾%ÄÀÓ¥ç )à1¡Ì³ jI¹F¯r½àl\ãw‚,Õ±ü!gÉ%òÉ…§ÒB´/m 60çE¬9/bÍbÄŠ±;†ìˆEs^, ½†ÃxÃq‹ñË<ÎbÄŠy ¼ße(4tä:šóBÙ,†²pßçû;ÊèPöŠâX;j£ 8Jp Ù³ÈÆ H%ÝE}Å“Pð×Wm;Úº>^Ÿ¾µ ø¨j=·F:säçS2ÞvàÀïFë]Í{ä_†¶ øht±ÄêX%{n¢­—ÝÖzí´ÎlìŸÍ ³hEÑp œX8s¤•i·¢h8iöxû¨‘wà½QK™!fä1Ï3pæO0Fz:žñÑС3t7ÑËMŒâ&…ÈE^r‘C.(àZkóê‚f›+<×û:ÞŸ"Þ¼u:ÿ"æŒyc–_>FïÐ=j}C÷‚ÿ"Caº¢l:­½äzäÉî#Ovy²ûøLvÛº¸\€±;Íà`˜ímoqÏ™²´CµÎÏg6»ƒkwž¬Ú<Õ~ä©öƒUí—c ‡³½7(N¹‘Ç<¿ÄÃ/1Í/óDÿñ™è;žQžA³½“$ε¹¦µÉKí¼˜ñ`cF¹µ¾Hû/‹gÿåG NQp~­s1#^Šç¾Y×1ppk¯'.¯f™paYbñd·'¸°Ò:ÜhÑÉ×åIù÷º‚†?¿v¯j™Vƒ¯p øx®U`YtTÍ–ö¶:b-§ÝŸEçÖ]w1­[ÀÀG£‹/éhÎë‚-ë¾ ×÷»ÑzYMUêE·€ëÖ뢃ç;–Ç*™ñZU]j‡]Ô.À"íþ,žÝŸœD—‘©Ï­§qBœ/i¸°û³x–È5œ§¶Èfi¤…xÒ*::p–›"8H¬/ë0Oi1¤´~Ú`ˆ6~­Ã<­C^ëb펎Ý?RtÔÆ2z GyþN¡‘÷{9WÔ°pgð\F¼¢7GèZ´—RoÈ‘·ïûœd‘V1Ãñ}΋ïs^|ŸóâûìãüâÙ­Òðt©|ÃAš0ß³Ž%j(IiG¯Òª½²4¥U{eÒô€ üœV¯µåâã<øô,R[d³ O%-„H ^ÒBia΋ïs^|ÏcÌYñæraˆ\0>ç…ñ;ÐËü–&a¼&qæÅxórª öóÒTB†ó»5…Fž¼#OsÞ,`ΚPµÍ#sJðãºýcÏc¥¥›º€£§0œ¹Ș¡Îâ õ½qödð,eã³(|>žk½…ì‚/p‡n·â¬©­¥g5^kS®zߊeààÖzGëYyFÛÀIvõ¦¡ný«n‹½ÚÛ±ÞXuÛšÔÖppk½£µz­¶€®»vïZmÓxm´_þñ°f‘\"Ÿ8±p憦už\"Ÿ8H´/m 6àÐF±C$„gÙa‚³»ZTO³;æÉrir¼\há×po8Îa1Þa¹‘Çcä1mä)ä2äur\æÊÈì3tä ݵhv9¤ÝkQ]»Ö÷F­Oúء僟 O«ÇèyßN†'‹ÕcœÅH(?îF²*Dgpତ‰ÁIZ§÷‡ÃZÇ„H½?ìú¥ü°,ºKãÂ;A¡ýáÐüëY‚Úê>œYä‚™—‘ä‚xr1zü€¬ Ôf1^:!’aD±Ã¿ ”Ì“üPz,óª=ì4óâ,FÕçÇYŒªN eìƒQöñïaÝâÝO…[ÎÄ^f€U¸uàlìuÂ-3B!R»~$ít“g§ûG NQp~ÿ…Ì•ðjcÇó'¦ÈÀÁ­u¼Vœ¸¼nÂ…EEò,àòî »?tÚé&i§›„EÅ|$iQQ´EU¦6vºIŸx®ó`™[ÀÀuëPÂ{ºz7Z(žïù&vºÍ—/±P?·€ëÖ›¢¹>O TÇ7 7¤¶,IÚé&ÏN÷ N¢ËH;_çÖÓ8!΃—´\Øé&ϾvºIZëô’Vít§‘âI«èèÀYnŠtdà ±¼¬Ã<¥ÅÒúiƒ!Úøµó´y­‹µ;:vÿHmÐQËpè5åù;…FÞïqäxœ½ÆMz»…Òyr8¿ÍáËæ=‡ÿ}2œÛ÷=Ç"i}?ßç¼ø>çÅ÷9/¾Ï>Γg§›N;ÝiR©Ö¤éø8ëX¢†2p”vô*­Z;OSZµv.M˜ÀïÀÙY@`džԖ¥óàгHm‘Í.<•´"-xI y¤…9/¾Ïyñ=u0gÅ÷àN7©ýV¹a|Î ã!v —ø!;,MÂxMâÌ‹ñæåTAít§©… çwk AÕ;Ý‘ó/‹\j§;\O.FõNwÒJïtKì/; Šþî ô`žôà‡Òc™Wít§™g1ªÆ8?ÎbTµ)gŒ²§;è~ï~ÖN7vºÃ¬Â­gc¯n¹ îtßÔ®ßMÚé¾yvºOp”àç÷_nÎ-$ÂËÃM€cœXøÓ>·#/.{Zíjþt]k¿ÙKÝvnoÖâßåøjý«(¯ ¿ëÖ·ZekÜnõ;Öî;Â]$hwN";î>û@žy!ϼm^m8ÎZQ4¯}0Ïý0ä~þƼF{€?s´€!Ê£ EwQqmø¹'—ënë«é‹Bþ£ßqöÊØ,j¥è? %8…áLŒü)¢sžˆÎy":ç‰è,Š({-yr‹H»Ãœ'³Ú¼Em8o^Ñ¢ Ò цããÚciviÌs,Ìs,œóÔuÕ5f褉wäÐQ7iÅ9F)‚Ç;#»?$Ùåá(Á) /nž›Go³ÈãæQ]Ë–ÝYô^ãæÑÛ,‘kÉeÜmF]M× 1#yž‡g`šg íŸ ÚCgs½ÜÄ(nRˆ\ä%ÙäråqåÑXíO2o`µŸTžì— ÎoÉíf®x§ù¥‚ƒ$»Œ :p–‚¢Ã2pÜzô¹õCí)[ïE^i ­¤‡âå²T!´’P½–Œ—¬á Ïp0‹²Ë)ín¶ï>ûø×²ƒŽ…yŽ…ÑŽÅ0F0Kmµy›Fmÿ2s›ÍMf‘ÁX'vU›j›Áuâávûóûý9o~øôýW«‹'8JpŠ‚ó UÏ×R¼Ùýb,ÄŸààÖ:^+ N\>1m…ç[FÁå_ *Ek_{ÎË?÷‚t­j¯õ:0ÜÀ-`àã`¥Rplâ©Ö÷%Öú6¾êÖ÷-ªFßÅ n×­ï}ÆÓ ïá}k¤vàw£u,ÊJ}†çn´® ø8˜_¶0ïþ„Ï/íp÷ËÈçÑËy÷»Ì¶ËH+—çÖÓ8!΃—´\øEÏfÎS[d3‡4ÒB¸Od¾“¯ïBñÝaÿäEØ?ûÇÐy¼Ïiåû$ÇÐË{¥òOžT¾àÛ;‚÷Cn! z[§Pëþ.ÒÑEò5òÚŒnÂ,:û ž_Õixz¸Ug¥)&3ytà¬8‹q˜ƒ­Go´Vk*iÑZ­©HSLfòèÀÙ™ä—ÿ×!¯¹BˆóàŸäÍ"µE6»ðTÒBˆ´à%-䑿¼9âœ7GÌcÌYsÄà¯ê^ó™¹SÁ9o*bzÙÑì`5 ã5‰3/Æ›—Sõ«º4U áünM¡‘'ïÈÓœ7“œsf’á_Õ½f| Í7ç¼ùæœ7ß ½|`¾9çÍ7ç¨ùfèóÍ9o¾j=0ßœÃóÍcù4­|¥k›KÙ±W0p”à†ƒç—™Ã,fÊÆ/3u-{Upƒ§ñËÌaæ‚'ÙÏ(æÀWýŽ®ºÎâŒÏøe¦[ë=ã›Eq6~™9Ì’8Ïbì5~™éÖzÏøfQÛ_fªZ͵螇ÇC¿•Úá0‹äùÄÀ‰…o|ò͹Œ_fºäùÄÀA¢ xiy´‡6ÎòÎ,.ï‡"$»ƒ×îêPDšÝ1O.ð L“ ´åÂ6z ‡ñ†ãã–yµ¹—6òròº ¹.cN‡Èè7tä š4Ùƒ¢æI¼7j}Ò÷ÀY >øÙðd±zŒÞ‘÷m)kx²Xé_fJ!’ ~œ‰„PˆÎàÀYIƒ“´Nÿ23¬uLˆÔ¿ÌtýÒ~/N6EͰη#:Oš= KP#~™éTýËÌàü‹%—úef¹ ž\ŒëÓ,I(}šEbxÙQìðŸf JæIFKk^õËÌ4óâ,FÕçÇYŒªv åìƒQöñ™ º}à~ïpkùØë°»Faœ¸qc¯n¹ Ÿ¸!u7ä9qcÂQ‚S\ز!ù‹Ëu Å!n­ãµ¢à$À=ë3\ZŸ!Ïêƒ OØ…¦¼7ô鉛×uS•?-P¾®íz]¸vZ˜~0pcC_ïØØërXT;¾qàwku6ó]íkUÀÀǽ Íwâ†Ô©’NÜçÄ 'ÑeÄøSëiœ‡çÁKÚ.-ë‘gÍ‹òNÜЧ'n\Ò¤}ÓѳÜéÈÀAbxY‡yJ‹!¥õÓC´ñkæiÝG'n\»3'n>QîÄÍÉpè5åù;…FÞïqŸœ¸©;°…Ú=qóžÖ¡}Rg^dÖù#쟼û'aÍh ìÊÍôB/ï•Ê?yRÉœ¸áÞ1äÖÂС·u µîï¢{â†iä8uBÒ6KpŽ8çÍç¼9âœ7Gœ}öñž¸¡¼7”wↄ7‡8‹q˜ƒ­Go´vOÜ|­Ý7Ö“™<:ð¤7¤­x8þIÞ,R[d³ O%-„H ^ÒBi?:qÃÌç¼9bë¸7ÌÃ'nHyñ+0œó¦‚!v —'nH8q#ic^Œ7/§ 'nH™ñÎïÖyòŽü''n¸™äœ3“Œ8qCêÌ‹2cL+å~¡ýîãfìÕ %8…ái'n(ïÄ å¸!áÄMÓ8m]ª“< 'n.æ]èÆVÃ…:kßá†ѥ¬Ù¾Ÿ7ZÌ>ã¥=é{â¦Ý²<>"ìÛ'ud†%—È'N,Ü{â†òNÜPÞ‰NÜ|@îÄÍNË;!8Ëfѱ;sâæ»cž\dœ¸¡¼7$œ¸ Ç9,Æ;,7ò̉›OFžB.C^—É8qC쉛c;wׯ.ÑØ'þÄÍ}¸aƒŸ O«Çèyï¶7帡¼7ô鉛Ã8+ibðcàc’Ö±'n­cB$âæå—NðÃÊ\ß;ÒÁ7ùײ5çÄ å¸¡OOܸä‚xr1zÌž¸‰Ÿ@ñ'nLv€—ÅŽÀ‰›ô`žôdœ¸¡OOܸæåNÜ|àüì‰Ó>èµFÙ'pâ&ä~'nè³7*Ü:p6ö:á–¡à‰›éñ¾Îu’º8yÖô5œ_ÙþïÿnÅÏ_÷!ßjýþ÷ûŸb/®Šê‚ïCÒ[ß§åmŸëq‡‘ rHתÛúj·€ºtú¡ßºàËb‡ýòÔ½jUmù^œ} UÀÃA‚Qpj_µk«u«@h]‚Qpj»^ÕÖ­¡u >FÁ©>¤§R‹¾GëVк£àT½Wm[kä­¡u >Êp9,xòò>pØ·+:ðߺ֗/yWä_%ƒ(xŠÇA„Ç‘Ìyóå%—(xŠË@„ËP€´¼gˆÎ`À1Äyôró8yœG—óç(ƒÞ(ƒyQóH‹y:y¬Ã<¥¥mÈKÊ£ }@›ª½Úv§Cë(Më(Âà þþ¯šUþ›2«ü7oVù/;«ìŠKÓ¼S säËb?äÿþý˜†ŸvË[÷>6vz”ܘUšyÑiV švÿ—ŸU–¯wtýý]ÀÃA‚Qð7mÚ‹ºÀâ,ï¡u >FÁnVEÙuÇŠÁImTк£àçŸiwî»U ´.ÁÇ(¸r,ܳæÖÕº£@h]‚Qpƒ•úùÌѺU ´.ÁÇ(8ÁžM_^‚ØQÆ*Z—àcœÊW2_êµó£u«@h]‚2BR ^©„<©„<©„x©Ü(_ÛþÎÌçߊ(Š ÿò(iDÁS´"´Ždµqçó®XAo« DÁSÔ"Ô†d7_^’ ˆ‚§ÈÈraÔÂ* W0O0O˜ŒçÅ­ü”ñ03 Ì›až[cÞóüóf˜çX˜‡1Ï3(Äyòržò8Oñœ/ºW.ÔØðsºöI(£Òz‚ E°Î#çA ’l÷£V{ûýúãöÄÿ¶w+y¤á¼mÕ]Ñ=3âʆŸ¬ˆE·ï™t¶XA×ÒðKf­ôfäh(b¹÷¾qà§ÔïõërÓ>;®¯ï _™¾Â÷®åLtüðQ‚¬{žŸtSÕ²g@ø(ÁjCûJ­[µìyR>JðÃe°¨êŽ3ÜIµU-{€üðËkÑÖµ§u«–=Í ÀG ~øû“´ÆBNëV-{þ€œ€Evë hDÁG¹ÜEé Å ç¥GTÎK»ÐTâÅ2/ÜìéQÁ­!Ï­Í—— e¿4_>Á/!Ó/çÃã>_Vð´Iž‚§;¬»2,:¬š0pf® Nø—'ÉaÑ3 ˜E·§Bë þî® »ð1 N’¿£g0‹ª N„ÖäÂ]vácœ$¹@Ï,`EEœ­'¨»2ìÂÇ(8Ijƒµá5)jz+ðŠä‰ä‰Ìy³‹9ov1çÍ.òÔæ¼ÙÅœ7»È“ ˜ófsÞì"ÏßaΛ]Ìɳ‹¿j᯴ÆðW¾?ìG NQð„lâï9eyûûÓ@ݵkm¯6OFc}寱Daú{½Ÿ¶ý]"7''ЩûjÏ““Órí—?Tá𺦱…@ðpàc\ËÅ¥<‡ «@h]‚QpµF×íktWwÉø(Z—àcüP›ªØeÞtX«@h]‚QðC“p£œOøXBë|Œ‚bE«H{+U ´.ÁÇ(ø[Ò°n­«@h]‚QðתëSiwI,­Õv] ´.ÁGwQPE eà$*­¸ü×HBcƒßjÃyA5”ÃI*ß›4֜ɕJÈ“JˆJ’Å î¢"Š"(¼|‚ÖA„Ö‘¬6p%MT1áåÄ "ÄŠd¹€»¨I¢ /Ÿ 6¡6ðw^TD1à˜7³Â¼™æÍ¬ðîžr9ù;zýóüóæ6˜ç°˜7»À<üøŽy.ƒy–òbåÅ8rblïØèCä%-EÖe(‚u§Úx”–"ì.jÝq]ÚÓ>sù鵂§-û(øÉ¼p)6©¹veÑC°Ì<î»FÝî]¬Ý5ꣀ›i îÇË[' lŽ;©ø—?ìÞ͵9û»UÀÃA‚Qðƒ\MQíÇÑ+U ´.ÁÇ(øAÚ½[p~­  „Ö%ø?<ã wÝÙR© „Ö%ø(Ã!ä2àuÈsÈsˆwå ü4ë{†è üË£Äyˆ‚§p"8O2ëÜÅF—´O!-Ȥ5jaˆ›èå&æqó¸‰Ì ë“£W1O1\˜§ˆ˜Ç Ù¼v§<»S´ÝŸû2]c‰ sžðQ¡ÃyÜšä‘×µþøçIç#“¯«® ?Æ×-•ŽìªnüΪ¬KŒ™Ê~±©qâRÃW£VYÍ~È×ëzD]p9&Ÿ6üd†ç%.­R<$ø™wãÐÛóv¸U ´.ÁÇ(ø‹C›&]¯Ü!e] ´.ÁÇ(ø‹›?Škgÿ¢Õ*Z—࣠‡<ÎÜ³ÙÆTCQû¸RÇe³ÿcÖzS[d³ ç©-²™‡§"HK2mœ™ Ã:ˆ‚§°dÖµ0\Ìï.Ίˆ^ETúHŠˆ^EÄJðcR X Ôêã NëV-;] ÀG þÚü!ºŒ¹ ýƒ‰2QðQ®y~ ñ~©<Î[ë/÷³×+”Ç9ð_F-å~¢ÇÙðäXdÂ!Á± ϱ`ýGtáå<ò<fÑDÎ //×ÂÏeþÉËeþáo¥úr|(ë|ÑÃuß™om¸5=ÀýwýW7—Áúl÷ø[iZÐ?1s™×Òß•ù#U-‹ë¥9_v`ðpàc\sóbýDÇ*Z—àc\ýÊ¥m[þ·UGк£àʱš—[»BÝT¬Ý­ £à'‡­/-¯ó[к£àêw@¸_ÅÏü0ì(Z—࣠‡\€W. O. O. ^.žBP[Çe‡*ˆBÀ¿FÁÕåeg}³Î*Z—àcü}—>¼>)xý²¿¡ð.Z—࣠‡»(¨¢†2p•V¼ñâûÃ[ÞjÃyA5”ƒ$•à•JÈ“JˆJ’ÅŠ»ÕÉÖ:ˆ‚§hDhÉjÃÝêd‹DÁSÄ "ÄŠd¹€»¨I¢ /Ÿ 6¡6ðw^TD1à˜7³Â¼™æÍ¬Ø[LG¯¿cž¿cÞÜóóf˜çq˜ß1Ïe0/ÂR^Œ£¼ÇÝêtÙ¿ËÜêä’–"Hë‰2Á:ÎSmFÁ7ñÒñ+[Gк£àê¾n·¸7¨Bë|Œ‚+Ǫñ õQ ´.ÁÇ(øá°UÑVÕÕ=ƒ® „Ö%øWªeËPBë|Œ‚«ûʯZBë|Œ‚¿%m¿†ö5·9©wкe8„¤¼R yR yR ñR©DП÷ª/QàEy”´¢à)ZZG²ÚpW‘ÙbQ𱂱"Y.Üý-Wm ž¢6¡6$û;÷ÝçSÆQð¹Y.ŒZRôªæ©æ©·9wš¡w„y3 ÌskÌ›ƒ`ž_bÞ,ó óâ0æy…8O^ÎSç)žóÏÃvæ¯á¿…;ä>eAZO0¡Öyäœ"hãT’í®kýñç„Ö…K¯‹sZnÝæµÿNÊj¨~ºÁ®Vðó¯ÖËýÚ tàëù¢:Øg:_Ö v¯²+~&6Ö}hðpàcüýÁcÄË•»èA­Kð1 ~0øy*ÔºWÜ*Z—àc\]¸„û"Nã^uu­Kð1 ~ü8p¡îÊȹ.Z—àc\Ýuµ¾“Vк£à»vü(.¯ËÇ+ëx¸Q ´.ÁGyj¨Í[Gøù·ø‡¨Ø¿ÅW:âÀÿœ¿"õQGl8/*¢Žðð¹€¹ ÙaݼÈõwˆ‚§ø;Dø;Éç^|è:,DÁS"–.Ãû¥èŠó<޽PÑ Ðè ÐÌ…ŠçÞyó\óB$æqó‚æ‘óÂ}À:h.¶á¸«NBM^¡voƒüH¨)‚6©¤»{ÄŠ" 'ÊÅ/cçã[&¿ón™üfo™,¯EW"û«A´6iø[&ëý›)-s'Á«€ŸŽúí?àbŽúí{s׎ù÷Ö`UtX1_—V<$ø?X·ÿô‹ÛWBë|Œ‚Ô.7»uœÖ©¡u >Êp‘¼¤…<ÒBi!ž´ŠŽÜúmzÇ^ZÇцù5‰Ã:ˆ‚§°"XG»óäùdÀ1DôÒóhƒy´a!mŠzÅ óÄ óìŽyrA!Ñ×p”g8Š6Üû—ÂugÃí_ Ç;,EŒ¼ì2¿üñýôòXœ¿*þ-Ü2‰P2·ïënÞ2Y6ïÓ3§õº²¸v¶õÕZ–« ìœ[&ñR\Ÿ“#§õóÍQPTMûúˆ¡sYTUT<­Z_Ì5wø(ÁÕTíå|¸–¿eò¨õå\†ç…üE›ç¶Î¯âСUËRÚ|”àÇd·9Ò+¡u«–Øà£?ÖÑ”íf‹ËºÓ&ªeo‹à£WŸˆùQnÞÜ•BëV­/çÓM^ø(ÁIKÁ–,\Phݪeïªà£\ ò4 â5I©Nµé±Wõ”Ú8pó†M%=¢ÚØp^zDµáá *'*ÎÍDŒ[£¬ ÎÍDŸ©ä©‚{3‘ë—(»µ{3ÑGn yníÞLäú%<.轘ç—Üõ §`Þ`Ï\zöè ö˜ì1"Ø{ #Ën1"Üz<#<Ãð0"ày¨Ô¦ë‚ ¦xnnäÚ'ѵ ?­Z¢O^Ñw/'ýHô)Bô=ä¢Ùõ°ƒ"„Ïc^šÃV¼ëˆßmúw·é·t·)<¿±Ü¸¹uÙ^w›îç6:fñUÀÀOëˆuõþÝy±³ö nÜYñnOðÌm«€‡ƒ£àïÕëkÍÿ¬F­Kð1 ®îÀªýÚ¦*Z—àc\}ó±äî`PBë|Œ‚~YÝÅÚð± „Ö%ø× À•ûI‘*Z—àcÜ•¯#Ø;Ñàë¤ÇÜͪ.|”á+ðŠä‰ä‰Ä‹•’!~^?îìÝ*Y.˜S ŽÚ@Êp¸‹‚*j('QiÅ[òè³›`•†Úp^PE eà`JesÕw…€W*!O*!B*I+÷&XWë ž¢u¡u$«{¬+VO+ˆ+’å½ ÖUˆ‚§¨ D¨ üQG 8æÍ¬0of…y3+÷&Ø¢m•ËœÓ@Æß1Ïß1onƒy‹y³ Ìó8Ì‹ï˜ç2˜a)/ÆQ^Œso‚}Þ΃š´ä%-EÖe(‚u§Úx”–"ì.jÝû&XJ¹ –òn‚%ö&Ø×ÍÚÝÊįg±âo‚½ ðA£€›;b—’ÿ HÕ–W®uë7䗒׺w >FÁßÜlä¯4x­Kð1 ®Hº}í¢rÜŽ¡u >FÁõ&rçÖ­¡u >FÁ•ÃVöÇ©¬¡u >FÁÕª‘³Rj­KðQ†CH.À+''/Jø)ãy«‚(üË£äïOñwˆðw’=ŽÛ“²¢à) K²Ë¸{R®ÇA<Åã@ö8£† ½Ž…yŽ…yŽÅí)z)æRÌó Ì e˜GmÌ &˜ÇM ±Ž¼¬£<ÖQ4ëN5îËŸ'÷Ÿè1EÐÆ£ˆaw&‘l8]ëv~¾=éµkfR›»“^»`µ³ª÷.`àæœ¥ÊH­ßø×ÜüU4úÀ™y'ç–05õy„Ü;9‹Ëë4¢s:Vðpàc\]ý´ŸFän ; „Ö%øW7@à>t{«ÆQ ´.ÁÇ(øñã³¢;ÈeÿQ­Kð1 þ¾«[έ¡u >FÁ ßÄ!vîo!¡u >FÁß7{5¯[-­ ž¡u >ÊpÈSø@mÞ:âÀϿޯ5Üüõ¾ÒnÞÉ©DEÔÎ‹Š¨#<?Á{µìî´š¢O^Ñwï6ýHô)Bô=ä¢Ùõ°ƒ"„Ïc^šÃV¼ë±ßmJyw›{·ék€±ªÜŸjŸd³áögœ;õm,ëãî œ~íÀÝmZ´¯6æG°pÖMövѦ+· x8Hð1 ®>ÀÕun÷G­Kð1 ®öC×r÷¨¡u >FÁ_—WEUÖÜu{к£àêàRY6ümGкe8„¼ y y ñ[´¯ïÌÕÜúÅ%X[W²Ë¸³h×ã žâqáq$sÞ™E3.Qð——¡iyÏÁ€cˆóèå<æqó8ÏQh«Ò¸j½Qó¢ æ‘ótóX‡yJK!Ú—6”GЧMy|ø³µáö÷ⵎ"ìîQŠ0œèïÿ³ÊêóYå?y³Ê„Yeõœ}»{…ö4tÿ°³Ê…Ye[JpcVÙ½~KéÎ*+¨®ü|tûuí.óßw >FÁ?ÿù1wËäW«p·L6EY2ëTFк£à‡gàÛ/m­CÇa¹[&]øW‡æ›Ïv· „Ö%øÿÒ¶ÛEÁŒ2Vк£àê¼­}–Ì*Z—àcüõ3áâò:´k¶n­KðQ†CH*Á+•'•'•/•öMÊÄßqùVDQù—GIë ž¢u¡u$«{ºÃ+ˆ‚§ˆDˆÉrÁýžÐVˆ‚§¨ D¨ ÉþÎÜqéÈDÁSäd¹0jaHЫ ˜§ ˜§ LÆÓŸ–wÏÕ¸3 Ì›až[cÞóüóf˜çX˜‡1Ï3(Äyòržò8Oñœ/÷æå­3E„2Š ­'˜PëJp½ÆçÀ¥‡È—‡¼—gwäœZ:x&½#F¼£§u)il‚]„XìüѰpë;¶ÏZ_ÜW™eø(Á—·áQ‚ <ñåyÙµ¢8A¸ï=­Gq‚p¹Œåq8ìGÅÂÏwÑìµ¾˜;“<ðQ‚Ÿ^þ âá‰//qè\+ŠC„ûÞÑÓz‡0—©b9dìXý@~>é¸×âŽÔzà£?½üÅ¡*O|y‰CçZQª‚pß;zZâP„ËÔ±ª 8T\ï«Zö1Ž|”à§—?ã8Tá‰//qè\+ŠCuî{GOëQªƒp¹‘&–C ¿pp}|AÕ²Ïà£?¿ü Å¡&O|y‘C§ZQj‚pß;zZâP„Ë´±jéø–V>Ï•3p}‚FÕ²ÏÂà£?^žƒGq¨ Â_ÞåW+ŠCmî{GOëQjƒp¹‘.–C¹2P üôƒíW­/÷Š|”à'8ã8Ôá‰//éйV‡º Ü÷ŽžÖ£8Ôár#¥±!oo]›˜Ÿ£4Ò:n}…î”zbœÊÏ2×Ò³«l¾<”A8óŽâkñpÏ;ê%Jù=#„y#$mÌ ëCÜ·€É!`§ä`q„´£àŸeË!™w_‹‡{Þ1ŠC„'ŽP‡ —ÁX!;B‹C(Lù0 NøÙŒc9„A8óŽâkñpÏ;FqƒðÄŠâár#U,‡*6V‡*!\cœªÏ¢}Ë¡*gÞQ|-îyÇ(UAxâEq¨ ÂåFêX™ %pp{%e«Å¯kˆp’àç—?Á£8TáÌ;НÅÃ=ïÅ¡:O¡(ÕA¸ÜHË!s¡¼pp{%¥4cYœ$øùåOð(5A8óŽâkñpÏ;Fq¨ ÂG(ŠCM.7ÒÆrh_@øÑuk:h-Yµ¬uœ$øq[âP„3ï(¾÷¼c‡Ú êüP‡š <íüP‡š Ü{~(ŽCâ“GÞù¡GÞù¡8µAxâËGŠãP„§ŠãP„{ÏÅqH<`òÈ;?ôÈ;?Ç¡.O|ù¨óCqê‚ð´óCqê‚pïù!ñçqç‡yç‡yç‡4‡Îvê;9W]UéÛ¥uA]ÔXëë» øoÓ¼Ÿp~Ÿ×=»8§Å÷9/¾Ï¾¡ë=_/ÖpžÚ¢2p¤rôJå ž,•o8HÓ&ð;pÖ±D eà )íèUÚqgñ¬KVÚ7|dáü—éLqüz©-²ÙÂg‚Âñ}΋ïy¤…9/¾Ïyñ}΋ïy¬ó|ØŒE!rÂxHÑ«ˆ­ˆ,;0žœ&a¼&qæÅY ö1æE¯yƒ†£áünM‡[SЭùYÀœ7 ˜³fAíùø6\/|nïâ,*×ß)8KÊ5‹ÑZÃÇw­ó •tÁ6B¯’ƯÆ;–X\«NMpõku6݉›n­w´Ö_ð)»Š…ßÖ«§}ke^Ý:Ô/ÏâààÖzGkÃ&%u]9ðÞ¡ºÝ:ÃŽ×ñͲpZ?9–ªeë¦>²pß—Ïv8¬ƒ4ÖA4ëE|ÃÉyE.‘Oœ%—Í'Ž6Gph£Øñ"¸„°á<;DB0pH³;vÇ4»£mw[.Ð+/œá0ÞpœÃª¯î¤9,z68òtŒ<Gž eüùÙœ°Ë¼f€×¶ràæÐÁ¥¸\»ëkPÈKZò’6Ô÷Œ/i8ÏMQ†8Hb5úÄꀛ‘‹×ç¡«±zŒñbÅ„Hg"¡è œ•41ø1ðQÒ:#øaY`[3 ž¬u | Ã}_ÃÚk¥DMÃÓ¹ ³/í©XçÀSç_˜ÅxC.ˆ'£Çúr.‡"ôøY(ßäŒZé߉Óð(v°Òƒ³U?’œÅ¨c^œÅ¨êRÆù1Ïù1Ê>é_©Óp>öÚá–s?šÅØ+†[~нŸ8Gh½ýÜþ÷z*nln›‡Û¯bÀÇ(8Hµ~·ÛÏ}^°=Œ¿¹½‚g$¸¿u<à(ÁÑ §Nœ'¼P óò§“ÔÛUÏì­bŽ—oƒP ðòð®6¼l›rÞçÝŸü}fFè×üs,ÛápÀA‚ƒŽ%8zátÀI‚“>ê¾ }ußÇ„¾ºïcBßGÝ÷1¡ï‹îû’Ð÷E÷}Ièû¢û¾$ô}Ñ}_úNºï”ÐwÒ}§„¾“î;%ôtß)¡ï7Ý÷[Bßoºï·„¾ßtßo }¿é¾ßú>è¾ }t߇„¾ºïCBßÝ÷!¡ï“îû”Ð÷I÷}Jèû¤û>%ô}Ò}ŸúÞë¾÷ }ïußû„¾÷ºï}Bß{Ý÷þ㾓Šq”ãHÅ8J‰q¤b¥Ä8R1ŽRb©G)1ŽTŒ£”G*ÆQJŒ#ã(%Æ‘Šq”ãHÅ8J‰q¤b¥Ä8R1ŽRb©G)1ŽTŒ£”G*ÆQJŒ#ã(%Æ‘Šq”ãHÅ8J‰q¤b¥Ä8R1ŽRb©G)1ŽTŒ£”G*ÆQJŒ#ã(%Æ‘Šq”ãHÅ8J‰q¤b¥Ä8R1ŽRbÜïMÝ_}ßžÆåÓ¾køBkñ{ø+Ö‚£o#Õ ÔzÁ¨Fèh„¤Fü£M,Ú&K‚M–(›,Ú&K‚M–(›,Ú&K‚M–(›,Ú&K‚M–(›¶ %Ø„¢lBÚ&”`в i›P‚M(Ê&¤mB 6¡(›Ü´Mn 6¹EÙä¦mrK°É-Ê&7m“[‚MnQ6¹i›Ülr‹²É m2$Ødˆ²É m2$Ødˆ²É m2$Ødˆ²É m2$Ødˆ²É¤m2%Ødвɤm2%Ødвɤm2%Ødвɤm2%ØdвI¯mÒ'ؤ²I¯mÒ'ؤ²I¯mÒ'ؤ²I¯mÒ'ؤ°É%>$íúë±É%+$Uúëí?J0þHzó×3Ž”ü‘”ä¯g„þ('ÿ#i„¿ï“îû”Ð÷I÷}Jèû¤û>}Ü÷_ªï¿RúþKõýWJß©¾ÿJéû/Õ÷_)}¿«=Ì»´‡éëû]íaÞ¥=L_ßïjó.íaúú~W{˜wiÓß÷Q÷}Lèû¨û>&ô}Ô}ú>ê¾)}_tßæP¨ï‹î»÷ö}Ñ}àÞ¾/ºïÜ×÷EÛ}I°û¢í¾$Ø}Ñv_ì¾h»/ v_´Ý—»/ÚîK‚Ým÷%Áî‹¶û’`wÒv§»“¶;%Ø´Ý)Áî¤íN v'mwJ°;i»S‚ÝIÛìNÚî”`÷›¶û-Áî7m÷[‚ÝoÚߴÝo v¿i»ßì~Óv¿%Øý¦í~K°ûMÛý–`÷AÛ}H°û í>$Ø}Ðvì>h» v´Ý‡»ÚîC‚Ým÷!Áû`÷IÛ}J°û¤í>%Ø}ÒvŸì>i»O vŸ´Ý?Ïeî*—¹§ä2w•ËÜSr™»Êeîi¹L¯íÞ'ؽ×vïìÞk»÷ vïµÝû»÷Úî}‚¿÷Úî}‚¿÷Úî}‚¿÷ÚîýÇþ¾ª†á7;¨ÚŽt 8Hð1 '‡óõe¿ôLÎo“ÒªáHK§oBùú˜Ý«ÀùKÑí7BÛðÅj½Ä-ÊÕ¯Ýz·Þò¢î“>Á ë¶ÙÛñ=ƒåäq[ìÚ¢œK›Ñî{uy]x?š­Ãö??”€ ÜüNbùL†ÚòU [ïšâò¼²Ôyùs¾ZB³Í­jø²>Á¶¹À²åVÕzÆçˤžlÖÿ.n¿%JWŽuÞnã~Ŷ>’[#†çp†3jÕÏûRñHn^Õ×ê)ô®TŸ”-š®Ü¯ò>zu×Iú–àèÏkÔª/õñm›ùïVu±t\þ®[ݘ½Ã³7«_8øhÖz^úŒÇ7<˜›ûK×㜠ú›zû/æ~ÿ½€ƒÃðÿ»?݇7eërË¥Œ«„ÿy­³ÀFúM æ´Z“ýQm„Ýìûþ¢Ó»àt°\—1|oµ.eýüÈÅ×ù ùh·’ç×lød²£{Ý%Ü=gÓ·Q°ý›û=Õ.ü¯i÷+4ï{L­YPcÃ&àÓ¿¦_víÓ1÷©Ñô8¹"nÿ¯ìË«&¬«ýž_|h©ö '²p|×¹ÍæÔ¯¾? *EÇË&ò›I=GÈ\ÞjžÓÊæ] t~‹O×¶r—}öZ¨¦o›c–¯ÙÅ^PéÎoZY¹rñyÕz÷þ|ã»@)x]TíöïÖ,Õ«o”ë^Qf/¨ G}{½o ûlN½1wøýf|òºØÝ˜ RÎúá61=Ö;íoimQÊñ¸ÿ½ÖOËNûÔè•ñŸŠƒ&སÖPµ¯YåébìW˨}Áø«Ö—u7{>JðãÂí·©ú–š·BëV­/ûÎw?|”àÇ­Þ[·ÍOW¬N·£«Z_ÖÅòø(ÁÛÂëKwy*ŽÔw«Ö—ua}>JðãJòj›l“+7¾Ÿ®vWµ¾¬[ñðQ‚W—Ðm>{¹TBëV­/ë¶ý|”àÇ}ꀛˆUmÛ ­[µ¾¬+ýðQ‚÷´oóÍç̨•FÞªõe}* ]øé†üm¦]u#•§/ <óÜ^«Ä§4”]ѵÈHåéc[ÂÔm¼­Û8wš<­òßÿ óïŸëÏÿþçÿÅ»B´‰5DyLP-1.10.4/Data/Netlib/scagr25.mps.gz0000644000175200017520000002147010430174061015547 0ustar coincoin‹£K®9scagr25.mps¥ßÒãºÄïS•w˜ø¦L$¥Ë³Ùlö"ª’ÝÚ÷“3±E´,t«<ç*ŽHZíß'±‰¿ÿö·?;þûן~ûË?­ÿñÿüÇÿýëøö÷oßþëÿñøñ_ûñêÇüÿï¯ ^9¼ xõã_þö×ãÕ€÷&¼·ýxõ—ãÕž?Ùð jiPKƒZÔÒ:¼‚ZÚ„W¼Úsö€W ^A-æðÔb0/6òØ j1¨Å`^æÅa^jq¨Å¡‡yq˜‡Z|ƒæ%`^j ƒ÷`"ཞg" –€Zæ%`^:ÌK‡Z:ÔÒ¡–óÒa^:ÔÒá»Ûa^:ÌË€Z|_¬Ñ€5‘gb@-j0/æeÀ¼L¨eB-j™0/æeB-sÀ¿ó2a^&Ô²Á÷eƒ5Ú`6Ï3±A-Ô²Á¼l0/Ì˵ìP˵ì0/;Ì˵ìpMï0/;Ì˵ìùûÒyÚ£Á{–f¢î6ÐÝöèðjÀ« ¯6xµ€î6ÐݺÛ@w[ øW:¼ð ji¼—רº{Ìèn3¨t·Ì‹Á¼€î6ƒZ@wènÝm » t·9̋ü€î6Ÿð¬ènû©»ÇL€î¶€Z@w[À¼Ì èn ¨t·î6ÐݺÛ@w[‡yé0/ »­Ã÷¥Ãî¶Ÿº{ÌènP èn0/æt· ¨t·î6ÐݺÛ@wÛ„y™0/ »mÂ÷eÂî¶™Yªî¶ jÝmÌËóºÛ6¨t·î6ÐݺÛ@wÛó²Ã¼€î¶¾/;¬ènû©»ÇL€î¶=×b »¼kÀ»ºk\‹îè®îè®îZ{À«¯ –æð^À{ÞËŒi »¼k »f0/óºkÀ»ºk »ºk »ºkóâ0/ »æïÁîšgÆ4Ð]Þ5Ð]s˜—€yÝ5à]Ý5Ð]Ý5Ð]ݵ€y ˜Ð]ëð}é°F »Ö3cè®ïè®u˜—óºkÀ»ºk »ºk »ºkæeÀ¼€îÚ„ïË„5ݵ™Ó@w x×@wm¼L˜Ð]Þ5Ð]Ý5Ð]Ý5Ð]Û`^6˜Ð]Ûàû²ÃîÚžÓ@w x×@wm‡yÙa^@w x×Awt×Awt×Awî3øcÀ« q¼—×ÈAw½eÆtÐ]ÞuÐ]‡û ÷t×wt×Awt×Awt× æî38è®Û„÷6xÖÈ3c:è®ï:è®Ã}‡û ºëÀ»ºë »ºë »ºëó÷t×¾/pŸÁAw=2c:è®ï:è®Ã}‡û ºëÀ»ºë »ºë »ºëæî38è®ø¾À}Ýõ‘ÓAwx×Awî38ÜgpÐ]ÞuÐ]ÝuÐ]ÝuÐ]ß`^à>ƒƒîú߸Ïà »¾eÆtÐ]ÞuÐ]‡û ÷t×wt×Awt×Awt7xÕàU®%ï¼×á½Ì˜ºÀ»ºpŸ!à>C€îðn€îèn€îèn€îÜß ¸Ï »aï9¼ð^fÌÝ àÝÝ ¸ÏpŸ!@wx7@wt7@wt7@wîïÜgÐÝø¾À}†ÝÈŒ »¼ »÷î3ènïèn€îèn€îènÀýÝ€û º¾/pŸ!@wcdÆ ÐÝÞ ÐÝ€û ÷t7€wãwÝýÓ?þú¿ûûïv~ü÷ãÅÏG9ëÏzôåýû·õ´ç[ú¯}‡p» ïñ}¿þzl„ŸZá=ýÿ_ßã:¼á§:|ÊuFjôõ0ë“ýV¡—ÕØ¯ÂÍ¿÷o—üõþ>’šßÖC7žýõÀ- ðÇŸ³ß®Æþãßźø Å]<û Ž_+~^¿}Ÿ¶ŠŸ$û¼Èþã¿ïŸÚ®’ì¤CŽ~=r­¾Á¬Æý*ûø>ãvøë1n‘½üÿ0öß¿xWÙ·{ÙWÙ; ¿”Ço­ÿ9üR;÷{Ù½âʾ‘ð+QùêÇ÷ëËúë=üõìämû¶2Ã;„_jRÛ*Q9gï:;ѤNk¼ž/ëÛw¿ÖŽsã×fèJ;¾Æ°´>F²/íøË²Âgý“³ÂSñ_ûw·b‚¿Ïëpb+üVñd/…ïÛ7O3D~×Ú¶öiדŸ†v)|ß¾û~­\_ïá¯}!Uvò›nëì1¯µãë=üµ¥Êî$»æÂ6H¸æBþÚ|So^3× w¯/Ó\ØÈ/‹-°Û?©ÑoÕ¨¹Ö¨¹&øë=üBß2ZÙÆ³¿]eˆVî5Z™æB˜ùsñC¿“âǯ¯¹ÐÈ/¿ÍkB62Í…ð~m†40ÁÕ>/Ñ ˜+ꟜÞ `L£zÆŽË–ÇŽÀ¸Âç£(~²+Cc'¬Ý·åú).¬Aþé;ÁÕ¾/—Q‘}\;ÁÕñX®¦*;ÁÕ¡±=UøËÊU-\«al…ÏV_Cc'²;ñÍOjô[5j`¤5j`„ þz¿¾Ì\cðìoW2×l5s Œü²Œ¡‹'´›Â?*^ã )y-PMCãh50Žm™«o0«Q£ &ïÈã §F–}>tv"Sã`áiv¯†¸²uQ…ËZàжÕ8450Òì]g'—u g5j`DzæøµÒÀ8®Îy‰VÀ\ä¡V Ó¨Þ€q…ã2¤åű#0¦ð½(~gW†ÆAX{nË]\Xùkdj`œWç¾ÌØUv‚«›ÆIpu{,ów‘}'¸ºi`œD7 Œ*üåx¯¦îQÃØ ßõ•±i`œDv·E|ã“ýVi'ÙÖ°]‹sf®­óìoW2×þ¨™kÓÀ8É/Ë6tñ„vSøGÅk`ÜÈ_ÊÛ¼(„¦Mãö¨qÛÖÕ7˜Õ¨Q…¿Î•¸#'`Ü50²ìûCfgò¸k`ÜX¸FšÝ«!®ìD]w ŒQ…=Öñ×8ÔòÊ3íiö®³“Ëúç5j`܈ôìã×fHãFpuŸ—hÌEj¥p/€1ê ðÓ2¬å=1…o×Å7¶;~×À¸ÖÞ·u†Ìõ…ÕØþç]ãFpuß×™5UöWÛCã^ãêÏð×9Uöd×À¸ ×À¨Â_Ur¾—0¶Âqˆxe´Þ–ÝI‹øú'5ú­50Ò50îA¾C×âÜòÅ<ûÛUÌc?1W»ámÙ;)~èâ;)~üZñ1wµÇ¼(€¦vÃÛ²ï%0¶ÃÛòS,®%‚Õ(Q†¿Žßº#ŒM{[höÃÛB²y¼ámÙY¸FžÝ«!®p¢®ÚÛÒˆi¬Þ–Ö¶‡òÊ5ímáÙ»ÎN.ëNk”ÀˆÚq®qüÚ I`D;gŸ—hÌU?ÔÊáv ŒyTg`LḠiyqìŒ9|Å»2$0¢ ~½‡¿ŽÚ+.,²9¸iÓËŸÃ_GûUÙk\mÚôrB÷ð×Q‚Uv‚«ÚôÒˆ•´iÓ‹ ŸXf üµ^á¸}¯ mzÁKæ\£¯S?©ÑoÕzX15»çÌ\dk OW2—m5siÓK#ž³fCOhw…V¼F{ìóZ š´é¿‚'`´%{%¬F Œ*üuJéy<£6½Ðì‡é…d'ò¨M/­±p Œ4»WC\áD]µé/ë¯÷ð×a¬å”gÒ¦ž½ëìä²^á´F ŒF¤ç0½|8CàªÏK´ÊÌåõC­î­Æ4ª7`\ḠiyqìŒ)|Å»240aíÃôÒ¼úM'›ƒ›6½¼að9üur•àª6½4â&k‡é¥y…«Ä°Ð´é¥‘C š6½Èð×1ÓEñhÖÀ_ëõ1M›^ñзõÒÜ?©ÑoÕ¨‘Ö¨‘ضZ\‹sf.²µ?…§« ™+fÍ\ÚôÒˆë«ÅÐÅÚ]៯ÑÉ_Ê1¯ ¡I›^ð+xÆXòX=„ 5j`Tá¯ÃÜïÈã µé…f?L/$;‘GmziÎÂ50Òì^ q…uÕ¦¼¬¿ÞÃ_gÖ8”wPžqH›^xö®³“Ëz…Ó50‘žÃôòá i` ‚«}^¢0y¨µÂû£Æ4ª7`\ḠiyqìŒ)¼Åveh` ÂÚ‡é¥õê7lnÚôò†ÁçðW£ˆ*;ÁUmziÄMÖÓKë®ÃBÓ¦—FN/hÚô"Ã_Ý8ŠâѬ¿Ö+|ŒúÊЦ—F<ôíp­´nŸÔè·jÔÀHkÔÀHl[m\‹sf.²µ?…§« ™kŒš¹´é¥×WCOhw…V¼ÆNþRóZ š´é¿‚'`K«‡´F Œ*üÕóæŽ<ž€Q›^höÃôB²yÔ¦—ÖY¸FšÝ«!®ìD]µé/ë¯÷ðWkŸ‡6¯qH›^xö®³“Ëz…Ó50"=‡éåÃÒÀ8®Îy‰VÀ\ä¡V ß `L£zÆŽË–ÇŽÀ˜Â‹3ÚÆ® Œƒ°öazi³úM'›ƒ›6½¼að9üÕO«ÊNpU›^q“µÃôÒf…«Ä°Ð´é¥‘Ó š6½ÈðWÓ²¢øYŸ}·úÀ©¦M/xèÛáZi³}R£ßªQ#­Q#±mµíZœ3s‘­ý)|+ޏ†±Ÿ™K›^q}µmèâ í®ðÏŠ×À8É_ÊÛ¼(„&mzÁ¯à ·%ÕCZ£Fþj xGOÀ¨M/4ûþÐÙ‰Ây7"=‡éåÃÒÀ¸\]¾‘­zª»‘‡Z)|+€1ê ðÓ2¬å=1…gÛy®M/(¨_ïá¯6 ×–±ÍÁÚôò†ÁçðWÛÑ*{«¦M/¸Éì0½´Ý«ìA²k`$§˜6½ÈðWo×BѬ¿Ö+‡ˆW†iÓK#z[®•ýñI~«F Œ´F ŒÄ¶ekqÎÌE¶ö¯ð|•sÁØOÌeÚôÒˆëËCo)~üZñ÷A²Ïkh2mzÁ¯`;}¹–¯1ê Œ)Ü0Z+1‡g™±+C# ê×{ø«[z¡ ds°iÓ‹‘þiv˜^¬U¸j5®š6½q“Ùaz±Vá*1,˜6½9½À´éE†??UÉy«»¨¤p«œ2mz1â¡7[Ä·R£ßª1ô2°%0±m™]‹sf.²µ?…[Ñ,Ŭn–bÚôbÄõe6tñ„vWøgÅK`4ÒãÍl^ B“6½àWðŒ¶ä1ªo0«Q£ ~jÞ‘Ç0jÓ ÍîÈ£6½Xcáiv¯†¸²uÕ¦#ýŸì0½˜}L,ê>&¦M/<{—ÙÉÞÕNkÔÀHšLÙazùp†40ÁUŸ—hÌU?ÔÊáE§—<ª7`\á^tz9q…Gq&»240aíÃôbVý¦“ÍÁ¦M/o|N]…«ApU›^Œ¸Éì0½˜W¸J ¦M/FN/0mz‘áÏOUrîu•õS¦M/F<ô‹ø¶Ojô[5j`¤5j`$¶-‹kqÎÌE¶ö§ð(š¥XÔÍRL›^Œ¸¾,†.žÐî ÿ¬x Œ¤'ªÅ¼(„&mz1¯;½Øaz±Ê¶ÅkÔÀ¨ÂŸŸwäñŒÚôB³÷‡ÎNäQ›^ÌY¸FšÝ«!®ìD]µéÅHÿ';L/Ö‹>&Öë>&¦M/<{×ÙÉeÂYI“);L/ÎF'¸Úç%Zs‘‡Z)¼èô’GõŒ+¼^NcG`\á£8È»240aíÃôbQý¦“ÍÁ¦M/o|~ªÂÕApU›^Œ¸Éì0½X¯p•L›^Œœ^`Úô"ߟªä¼×]TRø¨œ2mz1â¡·±ˆo~R£ßªQ#­Q#±mÙ¸çÌ\dk/𥨍›¥˜6½q}ÙºxB»)ü£â50’ž¨6æµ@!4iÓ‹õºÓ‹¦«l[¼F Œ*üù©~GOÀ¨M/4û|èìDµéÅ: ×ÀH³{5Ä•¨«6½éÿd‡éÅfÑÇÄfÝÇÄ´é…gï:;¹¬S8«Q#i2e‡éåÃÒÀØ ®Îy‰VÀ\ä¡V /:½äQ½ã ŸE§—ÓØSxq&mìÊÐÀØ k¦Õo:ÙlÚôò†Áçðç§*\Wµéň›ÌÓ‹ W‰aÁ´éÅÈé¦M/2üù©JÎgÝE%…oõS¦M/F<ô¶-âŸÔè·jÔÀHkÔÀHl[¶]‹sf.²µ?‡ÍRl«›¥˜6½q}Ù6tñ„vSøGÅk`$=Qm›×…ФM/6ëN/v˜^¬²mñ50ªðç§âŽ<ž€Q›^höÃôRggò¨M/6Y¸FšÝ«!®ìD]µéÅHÿ';L/¶}Ll¯û˜˜6½ðì]g'—õ §5j`$M¦ì0½|8C'ÁÕåÙª§ºy¨•‹N/yToÀ¸Â÷¢ÓËiìŒ)¼8ÈÙÎsmzAAýz±úMg›ƒµéå ƒÏáÏì®î5®º6½q“ùaz±­ÂUbXpmz1rzkÓ‹ ~ª”óº‹J ßë§\›^Œxè}¹V¶þI~«F Œ´F ŒÄ¶åkqÎÌE¶ö§ð½h–b{Ý,ŵéňëËCßIñã׊×ÀHz¢ú2½ìu§צÛêN/~˜^¬²mñ50ªðç§üŽ<"0º6½Ðì‡é…d'ò¨M/¶±p Œ4»WC\áD]µéÅHÿ'?L/þ(ú˜x«û˜¸6½ðì]g'—õ §5j`$M¦ü0½|8C÷A²ÏK´æªjåð¢ÓKÕSx+:½œÆÀ˜Ã‹3¼±+Cã>ÉÔmÇ‹ßt'›ƒý†éeßHöýÈ>ªì5®ú Ó q“ùazñǬ²\Õ¦'§¸6½Èðç§ 9÷GÝE%…·úÀ)צ'z?\+þˆOjô[5†^V£F'¶-·kqnùâwžýí*æòV7KqmzqâúrºxB»+ü³â%0:é‰ê6¯ ¡I›^üQwzq[ò¸WÁj”À(ߟ²;òxFmz¡ÙÓ ÉNäQ›^üÁÂ%0òì^ q…uÕ¦'ýŸü0½¸}LÜë>&®M/<{×ÙÉe½Âi4™òÃôòá I`D;gŸ—h•™Ëê‡Z)ÜŠN/yToÀ¸Â½èôr;c /ÎrgW†FÔ¯÷ðç«ßt²9صéå ƒÏáÏì®:ÁUmzqâ&óÃôâVá*1,¸6½89½ÀµéE†??UɹÕ]TR¸×N¹6½8ñÐûáZqóOjô[5j`¤5j`$¶-kqÎÌE¶ö§p/š¥¸×ÍR\›^œ¸¾<†.žÐî ÿ¬x Œ¤'ªÇ¼(„&mzq«;½x,yܪo0«Q£ ±Ý‘Ç0jÓ Í~˜^Hv"ÚôâÆÂ50Òì^ q…uÕ¦'ýŸü0½x}L¼×}L\›^xö®³“Ëz…Ó50’&S~˜^>œ! ŒNpµÏK´æ"µVx^ò¨Þ€q…÷¢ÓËiìŒ)¼8È;»240:aíÃôâQý¦“ÍÁ®M/o|f¯pµ\Õ¦'n2?L/®ÂkÓ‹“Ó \›^dø³øJΣÂ{}à”kÓ‹½®û¤F¿U£FZ£FbÛòq-Ι¹ÈÖþÞ‹f)Þëf)®M/N\_>†.žÐî ÿ¬x Œ¤'ªy-PMÚôâQwzñ±ä±zAkÔÀ¨ÂŸC|Ü‘Ç0jÓ Í~˜^Hv"ÚôâÁÂ50Òì^ qe'êªM/Nú?ùazñQô1ñY÷1qmzáÙ»ÎN.ëNkÔÀHšLùazùp†40v‚«s^¢0y¨•‹N/yToÀ¸ÂgÑéå4vÆ^œ ä“];aíÃôâ£úM'›ƒ]›^Þ0øþÌ^áê$¸ªM/NÜd~˜^|T¸J ®M/NN/pmz‘áÏâ+9u•>ë§\›^œxèýp­øhŸÔè·jÔÀHkÔÀHl[¾]‹sf.²µ?…Ï¢YŠÏºYŠkÓ‹×—oCOhw…V¼FÒÕ·y-PMÚôâ£îôâÛ’Çê!­Q£ ~j¿#'`Ô¦š}èìDµéÅ ×ÀH³{5Ä•¨«6½8éÿä‡éÅ·¢‰ïuצž½ëìä²^á´F Œ¤É”¦—gHã$¸ºÏK´æ"µRxÑé%ê Wø^tz91…g9Ûy®M/(¨_ïáÏ!V¿éls°6½¼að9ü™½ÂÕ½ÆÕЦ'n²8L/¾U¸J ¡M/NN/mz‘áÏOUr¾Õ]TRø^8ÚôâÄC‡kÅ·Ç'5ú­50Ò50ÛV<®Å93ÙÚŸÂ÷¢YŠïu³”Ц'®¯x Yüþ Å_+^#é‰y-PM¡M/¾Õ^â±ä±zAkÔÀ¨ÂŸŸÚîÈ#chÓ ÍÞ:;‘Gmzñ…k`¤Ù½âÊNÔU›^œôŠÃô¢I´ºIhÓ ÏÞuvrY¯pZ£FÒd*Óˇ3¤qo$û¼D+`®ú¡V/:½äQq…Ÿ–a-ïiìŒ9¼8(»240îF¦n;†Xü¦ÙÚôò†ÁçðgöVe¯q5´éʼn›,ÓK<¬ÊNpõ†é…œ^7L/*üù©BÎãQwQYáÑê§â†é…xèc¹Vöý“ýVi‰m+ìZœsÙÚŸÂ[Ñ,%ZÝ,%n˜^ˆë+lèâ í®ðÏŠ—À¤'jؼ(„&mz‰GÝé%lÉcTß`V£FþüÔ¼#'`Ô¦šÝ:;‘Gmz‰ —Àȳ{5Ä•¨«6½éÿ‡é%¬èc^÷1 mzáÙ»ÌNö®¦pZ£Æ M¦â0½|8CÆÎÙç%ZsÕµrxÑé%ê W¸^NcG`\á^œ ή Œ(¨_ïáÏOU¿édsphÓ˟ßSWáª\Õ¦— n²8L/a®ÃBhÓKÓ B›^døóS•œ[ÝE%…{}àThÓK}Ä"¾í“ýV¡—Õ(1ˆm+âZœ3s‘­ý)Ü‹f)áu³”Ц— ®¯ˆ¡‹'´»Â?+^#é‰1¯ ¡I›^ÂêN/q˜^¢²mñ50ªðç§Æy<£6½Ðìý¡³yÔ¦—0®‘f÷jˆ+;QWmz Òÿ)ÓKDÑÇ$¢îcÚô³w\Ö)œÕ¨‘4™ŠÃôòá i`4‚«}^¢0y¨•‹N/yToÀ¸Â£èôr;ã ïÅ™@ÑÙ•¡Ñ k¦—ðê7lmzyÃàsøóS®v‚«ÚôÄM‡é%¢ÂUbXmz rzAhÓ‹ ~ª’󨻨¤ð^8ÚôÄCcßü¤F¿U£FZ£FbÛŠq-Ι¹ÈÖþ^4K‰^7K mz âúŠ1tñ„vSøGÅk`$=QcÌkBhÒ¦—ˆºÓK¦—¨l[¼F Œ*üù©~GOÀ¨M/4û|èìDµé%‚…k`¤Ù½âÊNÔU›^‚ôŠÃô£èc£îcÚô³w\Ö)œÕ¨‘4™ŠÃôòá i` ‚«s^¢0y¨•‹N/yToÀ¸ÂGÑéå4vÆ^œ “]ƒ°öaz‰^ý¦“ÍÁ¡M/o|~ªÂÕApU›^‚¸Éâ0½D¯p•B›^‚œ^Úô"ߟªä|Ô]TRø¬œ mz â¡mßø¤F¿U£FZ£FbÛŠíZœ3s‘­ý9¼h–³n–ÚôÄõÛÐÅÚMᯑôDm^ B“6½Ä¨;½Äaz‰Ê¶ÅkÔÀ¨ÂŸŸŠ;òxFmz¡ÙÓKÉ£6½Ä`áiv¯†¸²uÕ¦— ýŸB»Vx¸†1ÒÀ)´#Iå"ü‚;ΟÒÜ1²ióÃ¥ð®Ý ñn úçÿëßÿÆÿñüÿ~éÇ4¯7 ß(Â_KéݾÿÜGö|ãµHÖÇø>f¾ÖbìéöHÛÚøñFž¦iËáëÑî—Ïþ’†søzûõ£øfëdÛ[ÙÓCЯÖSöôȸmeñéÑ®E.>=|hV‡Nðz£ãœá'x½1qN¯ÃÓMÎ3Ÿî?þÕuxúsùç×~çk“þÞůMúóž|mò_œP|"q²p‰˜qá’¦“…;Dù¼pI”ÉÂ¥$\¸¬ªuñÉ„ —Ì.dá’§î°Ñ…Kv-\¸ä¤" —7þCñi+Y¸´=.m¼¬®—O ×’†Ö ×’ Âµ¼;­,¾%µ…kiA½p-m€…kÇî¶p-I,\K*V/\ËÏS¡øô\ ^¸–îzõt?›,Üñ<è¼pIÅÈÂ%IÃ…Ë7ýêâÓ_²¸péO3²pé/0\¸ã¦]¸$i¸pIÅÈÂeL…⓯–,\²âÂ%w'Y¸9Š…›óÎÂÍ­X¸¹ßY¸äÁ…K>²pÉ€ wxGèÂ%IÃ…K*F.ï%ÏÅ[»'Ö 8±vN¬pbíœX+àÄÚ81+àÄüœ˜pb~NÌ 81¿'æœXÜ‹N¬ßëœä.ódáz'ÖïÀIî¸ 7îÀInZ 7ïÀI 7ïÀ ô„…â·;p’Û7âÂmwàd5W;/Ü~Nr'/\¸ýœäFF°p¹ÇP½p¹,ÜêÂ.·›€…Ëí&ê…ƒVP¼Ý“|*>,\>°¾^¸ufõiáò™ÈõÂå’aáà<èºø(à$ÝJ. 8Y+Ò…‹Nò)~dáz'ù3²p£€“|Y¸QÀI>j†,Ü(àŽÙ©‹ß 8É'b…Û 8Y~uºp['ÙMn+à${Cë…ËNX¸l¯¬n9¬N —<õÂe;,¸—êâ['ÙhP/\6À­mÀláòžSX¸¼ç´^8Øo Åû8É[ãpá✬+ç…‹;p’wIàÂÅ8ɉqáú8ÉÏYqáÆ8É·òqáÆ8ÇÿâŸÿþŸ¿ýÏoüÃÿ̸tJ,DyLP-1.10.4/Data/Netlib/greenbeb.mps.gz0000644000175200017520000045172210430174061016061 0ustar coincoin‹NK®9greenbeb.mps¤}[–ê:ÏíûãïØ|‰/Iüuƒ¡Š „ ýoÈÉ…ÈQ$9…k?ìQY0ñŒìÈ’=åœ6åÛ þûø~{;mß¶ÿ÷ÿ¾?oÕÿý¿UûÙfó±îþ¯vèꈮJtuCW?Ó«í]ÑÕ÷ôê}ó_©éÕâòö‰®ªéÕúæÝцp‡ººN¯Ê=ºBŸÞÑjá„lv²Ó«OôÙçizuF–¨ðÕºJ§WÔúµpA–¿"»\W j½yAWÈ‚M=½ºOq‡Ëw¸Í¯6ïýÕÇjµ}í˜mNÃgÛ׺úš^½ã« ºj¦W§7tµGWGt5ýÍ—ËûúuÒzÏ솘ݳbvC\Æ«ãÇôj`vCÌnˆÙ 1»!fãgÿël½Ý<®6/èj‡®ŽèªDWºº¡«tuŸ^mQëÛ-ºB\¶¯èê ]Ðâ¹E<·'tõ‰®¾ÐÕ7ºB÷·½ «+ºªÑ²ÄYbÛ +ƒ®ìôêYéµðŠúèYâÝûº‡÷è Ýû;º÷wŒC÷þŽîïÝÑúÍd¥º£º‡Ý]¡ÞÜ¡;Ú¡ÞÜ!»ì—=Yût…Zߣöö¨…=º£=ê£w@ãó€Z8 K‘%Žˆçñ<"»QÿÏ#ê±#ê±µW¢§ª|GW‡XŸ—ârB–8!›Ð(ÿD\>îÝÑ}óŒ¬tFÖ=#.g4>¿îY÷Ým…Ú«®B}[¡Ö+Ôz…Z¿ [_ÐÝ^и¾ çé+úfZ¯Ñ˜¿¡{øAW Â5èɹ£o&ø Y"Aw›¢o¦Èº)j/E£'E÷—"›)ô› ý¦B¿©Ðo*ô› ý¦A¿iÐ,cPßô<ÔºA­d ƒúÖ 3h\4™3ºBO±E¬-ê‹îÁ¢qfÑYtGÝ‘Ewdk‹X[ÄÚ¢'Ü¢ç(GM¯ºÏ®è³ëØúíµ¿Ù]Õ_Ó«î³+úl¸:®V?/ûõ뮪ëìêqÝ•¿£ñ³ }V¡Ïnè³ú¬AŸM®Ž#ëñêŠc·|UzË¿ý¼­§ýW—Ÿõ×÷x5äo»iná¯ÞÑÕºÚ¡«èꀮŽèªDW_èªBW7tõƒ®îÓ«-º‡>CñWèŽú Å_½¡+Äz‹Xoë>CñWŸè ÝQŸwø«]¡ûë3 ¸zAwôò®Ð¯¼¢~xE÷ð†îá Y÷Ýû;êÛ÷=ºB}ûޏô™†¿BÌÞQ½£ûû@VÚ¡»Ý¡;Ú!.;tG;Ô+;Ô+;dùj}FÈÝûµ¾GííQ {t{d—>º¿²üµw@ýw8£+tGGô›GtGGÔÂÝßÙóˆîèˆFÈõíµ^¢ÖKôT•Èk”¨…=+%úÍb}B£î„ú¡ÏPàêqùDß<£ÏÎÈÖgtgô4~#{~# ~# V¨… ÝC…Ú«P Äó‚zúŠpW4&®wEOÀ qùAW úÍ;ú,AW)¾B÷ž¢_I‘%RÄ3Ew«Ðo*ô› ý¦B¿©Ðo*ô›ý¦A~Þ ~0hDÔºA­4ê ²µA¶6h\[ÄÅ¢Ñc3‹ž‹xZÄÓ"žñ´hìZôYä…-²Y†xfè73ôÍ}3G\r„ËQåèW ô+Âè›}Ó! :dA‡,è² C¬jÝ¡qæP¿;tG‡F;Íæâús:7N¯jtÕL¯ú<`Š»]¦¸éU3¹b}ÕÅúpÕÇúÓo¾£«tõ…®ÎèêÛ_õ±þxuø‚^cö ºªÑUW}<W}›\'\qr‰âäÅÉ%Š“K'—(N.Qœ\¢8¹Dqr‰âäÅÉ%Š“K'—(N.Qœ\¢8¹Dqr‰âäÅÉ%Š“K'—(N.Qœ\¢8¹Dqr‰âäÅÉ%Š“K'—Óy¸zA÷7DÍ%ŠšK5—(j.QÔ\¢¨¹DQs‰¢æEÍ%ŠšK5—ÓÕzuAWˆç;êÍwtïȂȂ;d‰ºÛâ¹Cw»Cý·Cý·Ã- ž;ÄlFÖYi¸ìQë{ÔÞÝßYpˆ¯K_—(¾.Q|]¢øºDñu‰âëÅ×%НK_—(¾.Q|]¢ø®ÐpD£àˆFÁq)—=›%ò=%j¯D함…µpBwtB÷pB#ù„zì„ú脞ÆOÄúáÎè³3ê£3âyFOÿ7ê‡odùoĺB-Tèþ*Ô^…Z¸ žô<\Ðx¹¢_¹¢‘uE¿rE¿R#Ü ñüAW úæ}– «_!»¤èWRd¥±N‘%úM…~S¡ßTè7úM…~Ó ß4hÎ1¨ ×µnPëOƒ,oå z: z: ê[ƒžM‹X[4-º‹žM‹îÈ¢;²èŽ,º#‹X[ÄÚ"Ö==9=áùk‹z%C÷—!.úf޾™£{È.G£ G¿R _)®@ßtè›YÞ!Ë;dy‡,ïåbíPëd‡F–CwäÐ8s¨Çê1‡zÌ¡shÔ94ǹj±´9B‰r‹å%Ê-J”[”(·(QnQ¢Ü¢D¹E‰r‹å%Ê-J”[”(·(QnQ¢Ü¢D¹E‰r‹ñªmïÅöW>Ó(Q¦Q¢L£D™F‰2e%Ê4J”i”(Ó(Q¦Q¢L£D™F‰2e%Ê4J”i”(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽ2;Ê4î(Ó¸£LãŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-î(·¸£ÜâŽr‹;Ê-à õJŽ˜å¨…µP ß,Ð7ú¦C½âP¯8Ô+õŠC½âÐ9ÔºC£Ü¡QçÐÝ:t·õ¦C½éPo:Ô›H‡f<‡Æ§›G3m6qGYÈe!w”…ÜQrGYÈe!w”…ÜQrGYÈe!w”…ÜQ2¹Ú¡«/tuFWßþjÈIî('¹£œäŽr’;ÊIî('¹£œäŽr’;ÊIî('¹£œäŽr’;ÊIî('¹£œäŽr’;ÊIî('¹£œä>ÍIþ}M3 õ]ÐÕ]•èê]ÙéÕµ×çþê]½¢«7t…¸l—-âÒçþê]}¡«+ºªÑÕ ]5Ó«>GðW÷ŠìùŠX¿!.ïÈÖïø³3ºBí½#Öïˆç;âùîv‡úa‡xöѽ¿BÖÝ!ëîu÷¨7û˜Ý_¡öè7÷è7÷ø7ë=º÷=YtG4^¨õ²ÙᎈõY∘•W¢o–ø›¨7KÔú õû Ùå„áêµþ‰pgôÙÝ{'û+4^¾Ñ½£;ú®¦Wj¡B-T¨*ÔÂä+z®hü îÈž)ú,E¬SÄ%E÷¢öRÄL¡ßTè7úM…~S¡ßTè7 úMƒ¼›Aã³[ýjÏ bPOd3ƒÆ™A¶6¨ÿ,bfÑskO‹¼°E¬-bm‘Í,º‹xZÔ›±¶hÌ[4Z-zr,ò´YÞ&Ó« Ým†˜eW oè›ú¦CßtÈ‚YÐ! :dA‡,èjÝ¡QçИph :4B²¼C–wÈòYÞ¡ÑãÐ3íªÙWNg®éÕ]5Ó«>rœân—)nzÕL®†X®úXÑÖÅŠÓ«tõ…®ÎèêÛ_õÑáx5D‡pU¾´±Ôôj_öWc<ø‰®Î誫>V„«>Vsˆáªû+ˆáª§WÖǘï}vFŸÑg úlruœp"#ª}<¢êÃ#Ò¬ÃUû|ŸâüÕ×ôªÿ¸pÕ4Rýú˜FªþꈮJtõ3½Ú¢_éãOõ‚®^ÑÕº: +ÔúµÞÇŸþê]}¡«+ºªÑÕ ]5èÊ +;½ê-è¯Ðo¾" ¾¢;zEwôŠxö‘ª¿BwôŽ¿yFWˆK¿~í¯.è Ýßû}zõúáqù@­ >uwhì%úè×_!KìPßîPßîÑXê£_…ZØ£ßÜã_A÷°G½y@÷~@¿y@÷wD÷wD\Žèþލõ#j½D¿R¢NÈò'tG'ô+'4>?Ño~"Ü}vF÷wFOÀ7º£ á*„«îŠFùõæú•]¥ø µž¢öRdݵ—". ý¦B¿©Ðo*ô› ý¦B¿iÐoäÏ =}Äé¯PëµnPOÔcYР±dg0ÈôlZÄÚ¢çÈ¢{°È'[tGÝ‘EwdÑYämjÝ¡öjÁ¡jÁ¡²™C6sÈfÙÌ!›9d3‡lææ¾¼þœúäéÕ]5èê>½ê#²é¯Ü.Ó_™^5“«!"ƒ«>"óŸuÙôê]íÐÕº:£«oÕÇgãÕa3W{¸‚ˆ ]ÑUW}DW}D6þæ‘ÁU‘õW‘ÁU‘M¯­CD†>;£ÏÎè³}†¯îþê8a6DHŠüÕ]ÑU‰®~¦W[ô›}¼T¡x©BñR…⥠ÅKŠ—*/U(^ªP¼T¡x©BñR…⥠ÅKŠ—*U( ªPWo¨õ>î©PÜS¡¸§BqO…âž Å=þ ÝÃ;býŽX Ö?P{èWv¨ÇvèþúئB±M…b› Å6Šm*ÛT(¶©Plã¯Ðoîño¢{Ø#+õq\ÐÐÈ: ÖÈG„;"ÖGd‰#bV"\‰¾Yâo¢QP¢ÖO¨ÇNÈ.'tï}„T¡©BR…"¤ EHþê‚®ÐXúF÷þîèÈ µP¡*ÔGjá‚Æü=GW4 ~P wdÏ}–â+t)b–¢;JQë)â©Ðo*ô› ý¦B¿©Ðo*ô›ý¦A^Ñ ÑÚG]Šº*uU(êªPÔU¡¨«BQW…¢® E]Šº*uU(êªPÔU¡¨«BQW…¢® E]Šº*uÁUZ/Ð7 d]‡¾é3‡¸8ÄÅ!.µàu²®CÖuȺY×!ëºj6¯ÔŸŠÈ*‘U("«P V¡¬B1X…b° Å`ŠÁ*ƒU(«PÔU¡¨«BQW…¢®ñjXùªPœ…®Î誩PœU¡8«BqV…⬠ÅYг*gU(ÎBŸÑggôYƒ>›\'\Çr]\ÒÝ1 /_×É¡ ïŸWt Ãôê䯆AÇ3\Óñj‹®vè꺺¡+5½ê%¥þê]} +ÔµЇþªDW_èªBWˆYFú«ûôj‹˜m³-b¶Ý£+ij*ýbÝŽþ ±î¶ôWWtU£+tG}é¯ º²Ó«Ô·/¯è µðŠîöÝѲî;º‡>¨ôWø›ˆõ;býŽÆËúÍb½C–ß!ëîÍvèŽv¨½=×{d‰=ê÷=²Äµ¾GvÙ#.}Pé¯ÐíQOïQíQýC¿y@¬ˆçÝûÙìˆpG„;¢;:¢‘|D÷pD}{D}Û >ýâR".%²u‰ž¸ýf‰~³D¿yB¬Oˆõ Ùì„îá„úá„,ÿ‰x~¢_ùD¿rFß<#ëžÑx9#fgä³ÎènÏènÏèY9£§ãµ÷zóýJ…xV׋Hýb]!Öb]!ÖâÙ WdÁ ú• z®¨õ+zª®èW®èW®]¡Þ¬ÑoÖèé¿!»ÜÍnè7Ð7ô› ò/wôÍ_!Ë'Ⱥ º£Y7E¿’¢žN—=)²`Šõ˜B-(Ô‚B-(Ô‚B-(ô›ý¦A÷nP$`/0hDÔžAí4‹ôL4² òYY ~7¨7-jÝ¢³ˆ‹EãÓ¢Þ´ÈkXÄÚ"Ö±¶ˆ™EžÏbžÈòÅ6d‹ž‹f™ õX†z,C£ C–ÈPëú•ýJ~¥@¿R È‚nùA‡Ús¨=‡Æ™CãÌ¡qæP¯8Ô+õŠCcÉ¡±äP¯¸Û,–ª?§±Ôäª?Èo/M¯n誙^}|Í~åv™þÊôꆮšÉÕËçûz<‡T ®úTÍÖ¥jÓ«tµCW{tu@W_èꌮ¾ýUŸÔõWmfó±…y¥¿RèJO¯®vzU#\põôé8 ÷°›öí ´€«÷÷‰•yUê3©¯cÕ¦jGÿÍ.¥lã¬×\õù¡« ]ÝÐUW}š W}š:¶>¤©pÕ§©#—!1^½ûÏ<8T}V¡Ïnè³ú¬AŸM®®f S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ S£ SOEÇpµE<·ˆçñòMòMòMòMòMòMòMòMòMòMòMòMòMòMòM=•€ø+ÔÞ+º÷WtoÈòïèŽÞÑo¾ão"Öïhô| _Ù!Ö;dù²î±Þ¡öh\ïѽïQOïÑÝîQ{{tï{Ôúaj”aj”a²ÄõØõØ?ÔÂÝñ> ñrD6;"ÜáŽèþŽh$ÑQoÑ= ù¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F¦F&\¡1ñZÿF½ù~³B¬+„òMòMòMòMòMòM¸BOÜ}º£ Ýѵ~AýpA­_ÐstEOã}sÈE5ÊE5ÊE5ÊE5ÊE5ÊE5ÊE5ÊEÇ«Íx j¡A6k—º£_Iðê±õJ‚î6A-¤èWR4BRÄ,EOUŠì™âßD=­P µ P µ P õ´B-Ô‚A–0ÈÖùƒÆµA­ÔºAs±A~ qfç3È.ƒúÖ¢Ö-ê?‹¸Xd ‹úÖ"Odk‹X[ÄÚ"fyS‹y"Ë[/YôtX=õòy…ž‹ž8‹ž÷ õm†ú6C£'C6ËÏýJ~¥@¿R _)­ dë·€|–Cí9ÔžC#Ò¡éЈt¨ÿê?‡úÏ¡QçШs¨ÿÜm­µ¹¨Fù­Fù­Fù­F­F­F­F­F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬F9¬FYëxuœ>UV£V£Ö÷Wºº +Äú±þ@¿ùî}‡xîuwˆçYw‡îvú¶Ï üÂí—=²à?Ôú‚âyD-‘¨½Y©¯ýÂPë'ÔÓŸh$¢ožÑ½ŸÑo~#žúf…¾yA¶®ÑÝÖ¨7dù1KP jÁ oôüdë¾PÂ_¡{0ˆ™Á- »tGõŠAÏfgù+4Ê-bmÑýYtù‹îÈ¢;²èŽ,º#‹ÆKÚ+ÐÝ:ÄÌ!.µîPëµîPë·€ìé=²§CötÈž®šù¥úsêm¦Wºº¡«fzõñ5û•Ûeú+Ó«ºj&WC<W}<á?ëâ‰éÕºúBWgÕÇý̰èªBW7tÕÀU?ßÂU?ߎ- ó-\õóm…pÕϾӫwÿMÏ f_ôY…>»¡Ïnè³}6¹:NxÊ—.LïêN«ÕûæÒ^ýó•vøìåóx-OÝ™í›^R²^Oÿòÿ¥ÝÕáö‚?øo«b„ï¾û5\åzï¾Õ­=zðZgfüÖ9òŒ÷:ùg»ÎçpŽJQ¬øÖ h½„ÖËßßb¡çp®‘8VK·Hi[ñºüökŽ…Öþóû[tÅÎÝ¢éžøë7v4s8kG7~ë œ݈UÀñàß_à_~‹ÖŽCåå4Âûe«9üñ­Whäõ;ª9œµc6~KA#J¦òæÛ1ð­OøÖgà[ðÀ_¿pD:}À?€ÊG€ÊÜÕþ wUØ9œu#•=PÙŸxšÔÎ62ô=˜k_É÷{»çñ[‡ñ[ð×3Χ_ià×'ŒZÌá쀟ò-è ÇoíÇoÁ_Ü·€pù{Â:Ñs8CØÀ·Nïc#ð×/|Œ‚ ¢Óï‘…áq‚IëT>ÑúøøŸÒßx¢“…F¬ü­O òYFL.Ÿåo&—OpðCå ®óü„뫜C®ÓÃ÷¯FjTªÍîn]4qì‚}üÖþWßúÕ¸l~ó^`p_&ºÀÀ¹<1†Í8p.0—_¾åF®`¢ëog„uš¦ãŒp…;¹#à½,®‡Ã_ ÇŒÚlßzo½¾óF˜7úå‡á[µü­;ðº?1†óÇ<ÙUta½ðGB3ù÷ÿÆÖ=|LmØoµîOlD­Ó•¯!gá_騙×*MÙÔce–À|#*¢‘| 'ðP#0×… ÿ­úcò[]-=û­Û‹Dø¿4I–²Ãí}G~ô7ða asšþEgùzX¿~uŸ ë²ÓoµƒÐ®Æå[ü²þ5ûÖ¤‘Ó~}¾uâ¾µW#Ñ`ǯ6å~ÕÝgLòýß~Äðu¢3=‡Ïùo¤¹Z1´Ö©2Ï Ñfèi— ÕÓl6NÌÎtÃäoÀ‘ÜIn ÎBÝ-æNîÄèŒëŵI“ŒÀɨ"׫ߒgÒjÿ­6Uo1³Ž¿EgR ÿ"ê9Ò[ÔÊR8¹E“‹·p&ãõßjS2ñÛ왿Å"I)œÜb¦sþÓ1Ø™Àé-fYºt‹g2Kÿ­Ï·Ð-Úÿ”Á-Nàd êáY¤OYjϽÕ:Íû)`Øî™Þb;Ðõ4DiÊ·h ß‹YšS8éE›Yþ³Ñ£NàÔ«èB­~Kž ˜ý·î[Ì2á]b(œøóv@ó5ד[ÔVÛ¥[8OÁ·¿p›þ%N7P7iú»¦¿L·ÀôwsݤéïÆÞo›·÷{cSd4ýÝÐÜPÌᤑµRÖ®(­ö‰uÚ8±ÐZ%гP·¬›øûüÞ[ß•¯Øþ™Üûîýøë{·c¾ëáÔÀí3—ñ÷^è‚ÀÉ-ê"U+æ®ÖÚ(7‡‡o±„[,}‹©Òs8íÞ45B÷Âbê>ïÞuZØ”í^­Æ,~§Ýk½Ð½žáu·ÝŒÊ†î¯ù½÷›t胅ÛKø[}Ö2ìBIð#´~Œiýh]¯[/¡õ2¦õ2âÞÓµá'hýÓú)âÞ'­_¡õkLë×н+¶õ¼ ÊGx ­×1­×rëjm…Ö“‡OêT&Ö{½É³­œi=]g¼å×´c~3æwLjQç[?¼­÷Š–g[8Óú:µBë©á`ùCŒå»¨ÖÇQ·yY¿õ­÷gp­÷¡uï%þ[kgO;ìªO>PºÈÍ>ì¶OI»)k5 æŒð ÈW1ä+‘¼²BÞ¸¢Èæp†¼éÆûÁ¿ù[ ù›@¾eŸ9G¾ÍÊòbgÈ'yÆ“OrpVÛ±õ^4ø,y'ä §Yòiî‡ À ùöæóœ#ß0Â_ük ù×ùT Ÿ©9œ’ïK¾û`„ùÏòŸù޾bÈw¬ÉæpŽ|®ò9ÜûÿŠ!ÿõ<ùt=¥IþÈÇÿ–X³ÃFå©â¾EòíƒÉz›þƒ¾nã*·•L^嬫L³Ì‘Ö9o£µàm4tøºmŒ«ÜÞBÃ&çǼwÔÛ[`ع0l ºØ6@¾‰!ß±<ào0hßbÆü›´©fÁù,Ï7‡³ä•D~ô6»rl}WF÷ð(?ð8W¹;ùS ùÓÓäÓn‰p$OÜ.æÝ5â°ÉÒ"c3£”™Ã¹a“9aØdã¨ûw[ÿwŒ ïá4ž·–!Ÿ¶Or2 _<œ#ÏfýøÂÂcLTyÜÊÞÆ¦Šµ|²9gCâB ‰GosüäÿÅÿÇ“o›HuÆ„j&Ëçp.<0ZÌ8ÃÁ×c\åQv•©f]eëlœËæpnØ$’ŸOÀò ‰!‘ý¼.Rž¼G pnØdB˜Œ*ƒî˜°GëeL2R¾ðÔ±c>OF¡›‡s–7B`–°)ßü{ ùw|7ès–|î²ÂÎá\žJ x pè÷2fØ”ñÕ.a3½V-÷tgØLz`ÇGæ¦ÈϘöó$›¢ÐœŸ7Y “Ôç)4II± ¤Àßਿcüü·ìç ²3lV$£Ä×ùE'-̰íx1mW9“Ê4;IY—CL[…Bbc¥v󘮊±|%®Ût+ìrŸÍ²qŸÝÃ#É¿ù·òoâ› r2æUâ5‡sæÖ* €ï€ü.†üN6¹c‡M‘ÀŽ˜‡GZ‚“*&¶©þ=MÞäØêßßÈCú_ŬT…Öœ_%.t¦Iëqä/0¿_bƒ‹yn¸1¯“4Kçpn’ÒÒ¢Üû²‰KL2r9ЬÒ)»bf-”ey8ûÀÒ;zÚ dЗ˜üRÊæPÏ›4ÓéÎWýø‰ý`„Ãbã%f­òò-›6ÍfgXk2Xh½|Bbi['m2è:&¯›@Ti ņi>Ê+<œ6V6㘿Áü~‹ nòŠY&ìŒd‰JÝÎ>°Fz`Çi¢Y¦‰™¤š]àe3©u;š`C­ LRÆJñ¼-ßÔ@¾Ž!_3Ç/÷¿©p6$–rØQÕ‡ûhý3lîò°ITaù…V›J÷MhéÃHKã°I¡õ4†|‰µÊø4P¥·Jœ~ùò2yËïf΢À™µÊt-¬U¶ŒpxâÒ˜6 D•† ÌZÃ9 Ã& <°Êæý`„ïü>†ü>0lœ¼Í¨ÂópnØHi` i`zò‡ò‡À7K¾{â $8K^ó0Ç¥Ó¦1!qz meòÃF™ÌÌáì*±‘V‰G¸w¡b¼ x•A81šàáq«Ä Ü…Šñ6*àmŒb3)ÕF›ÙÎYÞJë6vô6 Ü…Šñ6*àm´Îx½1¯B9¬ϧÏ+p*ÆÛ¨€·QìÒG'æ…pµmß;iû~ô6 Ü…Šñ6ê ÏÆóý¸Ã¹1ï¤xv…¸ ãmTÀÛ(%ÏÆò 熒ƼÉ;X5r1‹Nî-Œ(aÖ¯Q»·?=°Ø]Ìú¼{Xž`•IR3‡Çme:Hÿ]Ìê;Ê–×Æð‹NÖë\`õ@IÛ÷ v…¤ÿ.fõÀ•…Vž¼Î PuºòO®ÒÁvž‹Ù t•lù\±™”¶Z]P,$m¨y]åËú½ZP´VaEëïÉ’­U@ÑZùJR´V’¢uäw1äw"ùÂùÖ·nÖÆEZgÈ+¿'E>áG Œ!”-_ø¥j²¡–dÆ’Öò©OFÈ#¼òe ùR$Ÿ9Ç’/¬…àù,ÈÃ:m'E®„ÐUX-Ÿ ¡«€Z"?BW!tµ „®ÂBh–<BW!´D~"„®!ôæÈÿÄÿ-¯ÎòiÛ%)¬œ#_ÃÆg‘ŽºZPqWa·`ù©Š» ¨¸yòHÅ]TÜÕ‚Š» «¸eò©@©¸òSwPqW *î*¬âæÉ#\Pq‹äs%G*îjAÅ]…UÜÏ’Ÿ©¸ÿBþÈÇÿ–½ÍDÅ]TÜù©Š» ¨¸«wVqKä'*î* â½WqWwµ â®Â*nyØäü˜Ç*nqع0lŠ»ZPqWa÷“äç*î?ïtÔÕ‚Š» «¸…Ijªâ®*n1¶ñëóU@Å]-¨¸«°Š[ ?UqW·L^IäAK ¦ÛÅX~'X¾s Cú?#Ÿu§‹8Ò:çmøx~ª1Ûíü>†ü^$¯‡sGHHl³ÄW¤îÿFò]L<¿+ÿ4ÃîÊ?MR‚½ZÐÏWaýü“äçúù¿¯|C¾–Ǽ±œ«lS©bIÀòûàêdy3-»¨Ê.ªpÙ…HÞfl8+»Éó™Ô´ìâ0þôðÞµgÉ{8*sm¸E§T+XŸ8÷À¦Nx`Añr„)ò3ÃåV¥¹VÌ4i[î“p8m¸/9© ^ªpÁ‹˜M ^ª@Á‹¼ôQHKPvóû1&<8Êá*ŒæÂƒ¼0*›ÃÙE'#-:™I½LµP­S…«uòÓj*P­#ORZš¤¦Õ:ÕBµN®Ö‘†fCbR­#z›DŠçQµNµP­S…«u¤x~¢1«Õ:â˜Ï„µÊIµ¸‹2ÆÛ”²·ÑYθJÛ†ÄiJZçÆ|"-´&ÓR£j¡Ô¨ —‰;#©c½Í¬ÔHžaµ4ÃNKª…R£*\jÄ’Ç¥FU ÔH´|*Y•U ¥FU¸ÔH6.a3©y©ÑBâæ÷2&<(¯ò« »Ä)ÙDy =°¹ôÀæ“J¥j¡Nª ×I‰{R…æÈÏë¤äx^Z=€Eæ3¸‹sŒ·9oÄ4pÍîIµ™É-i*­UŽcþ ÁÉ9&¶9‹› Ýk¸1¯S ÁÉyû7ò c2©óîIò­Ÿ×ìEžw#ÁÉ9&¶9ÿ W޳¼S ¤Bç#˼ç˜Uâó-@žs•v]¤ ÄóçÛŸÈàýŽóßrRÌ+«¸%É *æ­Šy«p1¯HžÍaI1¯8æ”âbÞj¡˜· óŠä•@óŠÃFIc ÜrXæÍcV‰ó­œI©„ß“²yJZgÓ@+¥cÇå°Ø˜Ç¬UæµÊ‚óºOC1oX«T’ÞFA&•Ÿü9†üY¶¼ÍYË»Ì*;‡3ä­´ncaÝ&‡ý÷¿Èäe•N&É!›È’“ +f"ê¦È"f†-6ò†ZÊm¨­òuï:óp6ž—Tð¼ðÄ1l±}–¼éÞÿFZgÉgùq‚.`Š,bfØb÷$ù¬+`wQìþfypEŒ·)þ=I^¯ó¤€Ý"´3’JQ%8«f™"f’*nO’/º—Âr_qû“åªðYâB«jFðYˆç(Ü\Œ@ν3>žŸŸõñ‡Ê©‹É¤Üdzû°íë5fî#Ï+IŽ »Bµ‹ñón'›tPuÎÈ·læÀUºÐº$YQ Yqà¨]ŒŸwÿdòZ¬å]fŠ9œ#/éçd‘6R]Ì>¬;Êì䈘*pDŒH^ª ÄGÄT GÄTá#bDÉ O~~DÌpÂH£«t§€åSÍme*ë2=‡³c^*5‚uZåó.¦úÞ}Êcž­“²m «SÒ:»zK«ctá r1™”;ÈÅ¥Y›ƒ¦s8K^ÒC‘—ƒÒS¹à*yØä¬·!' Éì’øßTÒzÚÛÂá<·ðá<¼ý–|8Ï-p8Ï ÈߤÃynÃyn ‡ó܇ó䧇ó܇óHä'‡ó܇óÜç¹…çÈOç¹çÉûÃynÒá¨ä>¨„%¿B•È·ÀA%¨äYò³ƒJþBþäo1äo!ò9oy|\†HÞŸ8q —q[8.ã>.ãIòóã2þ@¾;6á¶phÃ-|hG~vhÃ-phƒ@~Z­s Úp[8´á>´A ?=´á8´á/äÁQïbüü®ü“·Ù•z`»cn ‡6܇6‡säû÷„òÿµ™=l&Žmv=Oà y;¼Áïæ¯9œ’ïÖòíð“É·=Oàܰ2hBžƒ3–oã–|wWxc>‰óÉ߯|ò·1o€¼‰!oDòëÌôïgÈX«4ò«uΓO!(5/@þ%†üK€|/bÈ[p•ç,Ÿ;ž¼‚õyóäßbÈ¿…È –·p;ÀYò°Q ]0ï@þ=†ü{€¼)ò*ŸÃYò™@>øÿˆ!ÿóFó 8K>Ƽ‡ï€ü.†ü.@>·‚«\gs8G¾,ë6æÿCþ_€|"̰áp޼Ƽ†--sòÇòÇygòÖÌá,y#O| äËòe€|!LRl.œ%¯„ao«4Û˜˜ØÆœBc^"KÜæó…ÛÀêùòŸ1ä?Åð ‚·Í À9òVôó?ùs ùsy3‡?Gà¯bÈWÀLš¤Ú‡agcÉUÚ1¶˜Ù˜ÀÌnž‰ÛàÄÍáœåûuJþ?Û-߯ßÈçBl£5i ‰…¨Ò+^,D•6&ª´/!Ë QeêÒ9œµ¼Ò@OþÈ¿Æ Y>•’‘lg-Ÿ ®Ò‰mLHlßdòy"‘7éÎZÞ –oc!$¶1!±}‘·Ò˜ÏæpÖòB2’dc2b!$¶1!±ýýüDZc^Ïá¬å`y p‰mLHlw!ËiÌsøS 8T¤ZÌlL`fËyå¤x^ÍáOyÐQ[ÌlL`fOÏ“ï4­søSÃ3 ™ Ììg€¼–¼Ÿß?£\%XÖ*mÌZ¥ýzžütØ„Ö*µÆ<,uvë´×…Uâkx•ø ä¯ÒŠÙ5°J|òWé½V‰¯ «Ä×ð*±D~²J| ¬‹äý*ñ5°J|]X%¾†W‰%ò“Uâk`•X ?]%¾V‰¯ «Ä×ð*±8l|H|]‚3–Ÿ¬_…UânÁíº°Üw /÷ñäÑrß5°Ü'›\óx¹ïº°Üw /÷‰äM!GË}2ùL ï—ûŽ@þCþ ïø1?[·É;~ÌÏÖm® ë6×ðºH¾\%^·‘É+Áònš_ðk8XiØà\"?IÀ¯üº€_à ø³Þf–€‹–÷ ø5€_ðk8Éç‚·Á ¸<ÃæÂ ‹ðëB~ 'à²åsa†E ¸ly%̰(¿.$à×p.[>•b›lg-Ÿ 3,JÀ¯ ø5œ€Kä' ø5€Ë–·‚åQ~]HÀ¯á\&o¥1ŸÍá¬å0æQ~]HÀ¯á\ ?MÀ¯\¶¼,ðëB~ 'à²å4æ‹9ü©x%à×…üNÀEòÊ Q%JÀŸó(¿.$à×pþ,ùYþü°A øu!¿†p‘¼–¼ JÀ#\å4¿.$à×pþ,ùY.“·Â˜³È—Ö?n{Êþ/Êñåý²~y|kükú­^‰6«ÎëÆæƒãËå}ý:Àá¯üpëæ÷õz*â’ñ ÷Í%Y¯ÿ­Q7äBëcyDwcïp‹ï\ëôw×é8z{‹·ßäƒQ×Á? õ_¶o ÷ öMŸŽâ\¦û÷QóÛÁ¿ õ¯_¶® s­›‰…¾¡‘ï_6’kçé D™[4cùÊËçn]­Ã_¿è^¸E±Ýûàøú:ÎfÛWa^#ü—&Éz„~ˆ—/#àïcʵ}¯bà7€ßbà À›øÇèS·_ðãøhnðÓxÌö´ÿø¿øàÇ8˜îcºÏ1ÙÝ~nž‡ï—ç ï”ÛÅšYö›Yö™%]÷sohfÙGÍ,v\ÑÙÿmfÙÇÌ,)¬¡îÿ6³ìcf–Îösxhfé¾u†FοkĬ-sè •g§/½Î­Ã£¦¯}Ôô•kM_‡úmýUuŸuýòQn3ÚGXnëíq8;“ø¡Gø·åæµ ¼àe ü¸ÞžøI‚ðr½ýäÈwc ?¦hþ»Ã~˜}Ëdv€—ÌþÉ¿uZo¿xŽÊô”c÷…Ï9*Ûï$QŽÝþàx]oëá[µÔ ×@7´ðÿoêÄ0ðÿº¬ŒÂoŽí³Ððجß¡=VJMáM ‘v^2÷Œdˆ—yëyf)|3§šðrÛÎKvø–•y 4âá[¹‘ÃÛúõ „¥FØ_ü×€ñ€·ñÜû¿Á÷üàlÈ7‡Ó£îœ|ë›up¿j¤@—àߎÕúý2À/RëÕÌÀNç–Âos“aD¹;®w»á¤ÓÐÈ.àà:xÉÁ»'KkÞ=YãAjSx)úö§w'cûsÇqºŸÂOr#û¯õ~Ëo¨ÿ7ìMÎÆãýy³ŠÂ·Òpž‘_ÆÃOëýÇ?Å´îá1­·äO|ë#œUÌáLÔÕ†+ŽR]ÛØÈ)ø0‡[œ=3ÿ­3Û— 0YÖ¤{OëÓž»ÅÎuõ+œsZ­·2ð˜x8ÍÅ|#­';ýãt íÓö²r‹ÿùƒ¾&pBEé~›tî+[ŽÅ¸ó0Ÿþ a×§!žÚ[â^‡iêt”áí=à')›ß{êWŠ»¡rúâ»!±IÁvƒËŒ"ðS ZhÈÉpCÅ/ŠÎ¤éº h2ïõ?7Bîù»©e€“©¥íF®è¸ý@­Ç»nŠþ üyüÝ Z©×ßü½wþR‹ð¯K2¦,¼K|SÖtµÔ>ª×©ÒŠ —»bæ‚ÂK’ýY>mÓÅœÀ¹|$[± Íܽ“S€ZÜG²ìvx½ ˜.sœéÚ\l h&pbº$ë@¦¦Krg(œ˜.íëôÓ¥…G™ÎÃééOëþØ.þ(´¼ F_Ó¥ª?w‹Ô…¶̸õ63¦+ ~Ôe£>d /çðáb’ü­“bÜ©ŸÀ燊´ðþÞç‹PíçãÆß´õMÀB/²…L¯e ŧ­… {=œ>—6Í„Áe8±P¡ ™ñØ• |~rI·{ë ¥Ž¶þ°Ð[ÀB4–Ü»NSC$øüÞS8*b ?÷˜(þm–ø\–×݇ÑnþAg|L[ Xè*Z¨u$nÅèêÚDß[è*Ž!í†PŸ1ŸÛQÎðc^¥1»wò­Â0îî\kÚú5`¡¾%ÀGMWŒ Âø¼¢w­2ËÁnMÕÐÖéÚgfWüã“ç>·c6œ°KÎÞéL—Íá¬ó‰·ÒBx¡Òœ}Êã(œ:d3Ì‘ôÌ‘8*Y’±ƒ@­SÚ:)Zî–ÍVÜ?~!sÚú‚§æ-Ôéêx ¥i–8}˜²!¤²‰£pb!å8 µJ2Eà¤2zmúRGrŠP^hÚú‚§–,dÉBF8穹ÇÞÓ§NÝMZž:É|.ã]ÛG¨â­4Q´õO-X(Í„¹L[ߋ׀…CÌe¦0N-dRÞB »œÀçZáîT=yWRZm}ÁSë'=u𩔉·Jra.³~2òp2Ò›­Ø0@#W«9WÛÙ±å’ óξiÝvl½••ÆÒ+nÁ>IÓ‚À©§V¶`—õ¨ð˜Â Ç4ÆU)…Kªçyû:Ë…ÏOÞj#?›¼,”h~.³&%pf¨äÂ\–ä†Âi/ænÑ|^ßI£‡ˆñLî]å´õO-YÈ<2#j¡Ä8ç©…¹,·9…S õ/_c,4É:>—ý¯3׫Ƿ®"S¬£ð§>·#-bj'8U@7xøö$¥ÝäÌe.¾Ê#!ys.ÂÃçç×NeÎ[ñÓìá È €}ž œâ1P9G¢)œ._XÃ4ÖÒÖÅ÷…$Û¹«56%ðù!¹ë´ðݰ[ºcœX¨£"8oà]ÀBÎ.Ž!€‹/% Ž!€ÏOâEcèŸ<†T"8’ "o§cHÙ\CÞBÿR?†Ò±fß|’̃bcòóã~»ã?¡‘Û³c¨cŸNÇP–äÂ2†ÂéújbÇÀÅ׫ÇÀçg OÇÐf·~­¹ÕÐÈLÅò_›uëBÏá›þuÕë5å8[ïÖœs7‡Ï·Mº:U̾G·¸·8£ouãô±¶<[îvŒÆã¶&ðÙžx·„Õ¿òi¾Ú¥{ã uølµ[éC£q¥†’ßÎ-”§…f¶$Úœ?‡ÅÇ ‚µJ+Û»ù:)àÞÏ÷»õ {§ÝÛr6þhŽb† œvïcáu¶“Õ=W‰z8é^5T>ÒÍ G['Ý›%fØùž÷hMà³îí^k8ì¶‘ͬ£¦›wo— ^{3ÿ W5Ýü[&ïÿMÿòõù£8ÂËçû½H!G8Óïjÿh¿ƒ²n?λר<åû][Gàô±Î³‚íwc ÿñpÒï&Ki¿[]8é÷Ô>¤H5™n3zïä±¶…q\¿«v¦­—ó~/†ÅìMÿÞz©ßoO÷{ê ,¥|³¹ýÖÏ›?NGGj2ƒydhëtt¨Ü8ÖÏ[?{øá:šSºtoŸÍ)y<:ºYFœÎ­ˆv=œx…n’[1¹P; Ÿ›ö±ìg™Ûfnyx ê׿'ÂÏ[•ÍáÌ4ž<5yÞĈNº×*Åûùö®r§~ÞöÕ¾äyoã*ãœ<ïùp¾=}ÞÛØQ8é^›<Xâç•£¦›wœJóDqÏ{¢Aw2ÿÌ¿ÕÎdªÞäç}{~ºßµ2VÍá´ß[—èø~×~ë,ö{j†]­ý‰Ù&ðy¿'í¸ÉX?Ÿ$~ó÷,ö»z¬ÔÎû=µNQò¤ßÛ{Tl¿' t™Âçó{6nÉÍ=x›Zç”ü¬­²þÝ»›íùýÎèÂWþ[ß1^œ À7Ûï_GýÆoÉ}˳Áðú&,œ,~‹³-†¥pðINcÄ´_ˆ§³A·¦BàÌl0l*ÓÙÀŽÀñÖy3t/¥*(y2´C»2¾·Ô]Œƒëeó¼W0–¾yÙüºßáÜ g|ÇCQBÜ…*(yÚï¦ÍL¸~oDJáó~oÓ5§…~gZ§ý®]Êö»ÍÇ—¥Là´ß’Þy¿ëÌÁæÆþ2ƒ«6©ëà›ù,£RÐò¼UÏ?ï¹­À™¨ß þ˜y’aÛÂÙloÈò铜Àlàá¤{ÄwäI¶9ìÛy8é^æ|Ôß>±ôÞI÷Vš ¼³šÀçuj[û$ÈMàÕü»H§› Þ*y6ØG¬î˜&€ucx ýžÀ˜÷pší¥B¶×……Nú½H—å÷º+Mà$ °ý@Òï™_¢ðpÒïÚ>t#$ãQmFV>úƒ÷…NÉïI¶×ûºÍ~è÷ˆÕ^;éáŒ;×F QÿøŠž œö».ø~7P¾0Se§ÜżßWþMì8ú‹!×$ýnsCá¤ßfXÚï~Mq/®î´¹ücûsCïÝRÓÍû]¹>8Ùì«;‡kD\—C\p¦ß‡s­¸U=xÞ=œf{zH”éêÔÞNà4ÛK3>êoýˆ!pºº“8þy/ *i§«;ê±U@×iaAt'izQäìêŽ.m}öZéöyt–›ÃUî÷2¢ßƒù½¼æ÷B ~ÖSË@¿+a5Wù}¨Rî÷6øÔl¿; ~¾û½ǧL¿ÙÀiø&?ï =šÀçQ¥6EA2ðu>{#w?u­oÊ@¿ŸÞ#vo¼öàœŸO…,ßÁëáLØî¸,¿ëuN³ü‚뺘''ðy¿·!Ĝи.GíáÔÏÂóÞ:+>çhô£2€8‚ ây/ßIÊÒ¥›Ó{ ß1ýîï}„oNÇ_çq…ï÷£œ¿?ž8nâW~"‹¶F±yœÎÇ3&p::\ÆçqZû1”ó¸GTIów¿ëá4S&gówk©å©B¨Kúj²fUøaSF¬êùª€oNåoû=Ég¼‚*øUüÉbðNÖúbú½Ï mFý…aWñu’Ãþ‰‡¯¦Ÿ¿·1­"pÆ+$›¿'ò¸S†5«†l=ùdäóô|¿§^´pf~Ñ3+2Œx8ÍßU¦ùx^Ãn­‡Óå“ç|þ^€ŠÂÃI\׆o¼Ÿ×V²=œnÆÛ‚[Åž9 #{ ëçÛ'!·ý¾Ìeÿæó$ûù*b½®}ò9|S=±^—8ý áõó6ªÀzR!¦ê²ÈJ\¯ë6XuFšXxâªÐzÝà¬æÏ{šd%Oý¼Q»k§Ó±"w a¬~½®šù ¶Ý.ÏÎïC"—Ïá\÷Za×.ƒµ‹‹œ¿w{Dìó®s¨›ºåõºTóy\;ÉNž÷ÖŸòyœ‚“m&pÏ«Bó»ôpHÕNâùì±éGZaÅlbºdݦ 7—@þðàîÍ%FÑCÊr h8ôcÿÄÒÍ‚ÀiÔŸ ÙžõÒÓ‹¨áè|¶gÜ´ZÔî<–c©Ë*zït6H…ÕÜNZBáóA`òG²HVõP^^æsÆ0m. Àã#boÏø* €3£#M…Ñá%:Nc…ô±I3N¹™À™_—³k¾ÊW x8É už k sï4È´ÖúaÊ™Àç#¸(†¼ˆ®õûœÐÃ/¯Ä¿õ;L›Ë·<:îÏÇ JXmøæþûXÁÂçˆRVÉÙ>°æË»+X“q9a·© –¿Ë±‚+†Õvš*Ø”½b…‡óBÒ•¤¥pNHº’´£Îm5°‹Šv4%pVHº’´£Î Iûççg¶¨hLNà‹JÐgû§ÓxÎá¼às%i<)ü$Äj< œ|®$'s‚Ï|%i< œ|®èLëÌú}Q€óŠÍÕ/Dš ŽoÈÎk1W’ü’ÀY-æJ’_8«ÅäÅ;yJá¬s%É/ œÕb®$ù%½÷íüñ³HθÐ?¬Lrç5“Ò"]Aàœf2[I2Ig5“+I&Ià¬fr%É$ œÓL¦+I&IM7[m±¹×ïwÚ¹§;§²9œ×6®$9#…sÚÆ•$g$pVÛ¸’äŒÎjW’œ‘ÀYmc›-_ëÖr¤õEqâsý3Èçp^ƒ¸’d‡.–¦p²C§ýóØFæd‡9³Ä• ;4Îj{òó”TMî}QDøt`§áD¡} quy&©R ç´‚+IHलÔñýÓÉ œÕ ®$y ³ZÁžü¼¢Ü$)¹÷E±ßÓýãw¸ÎkúV’ŒÂ9MßJ’ñ8«é[I2>g5}+IÆGଦ¯ŸýfpÓvœÃEyÏÏ?…žÃyíÝJ’ÛQ8§½[Ir;gµw+InGà¬ön%ÉíœÕÞuðro'¿ÂÎá‹â¹çý’¯‰þMÙ•$‹£pN#·’dqÎjäV’,ŽÀYÜJ’Å8«‘ëûçuÞ?EAL·(r[ˆ¯OÇ_Ày-ÛJ’¯8«e[Iò5gµl+I¾Fଖm%Éלղ­$ù½÷ù>eá`ùáT.÷O`]à¼æl%É̜՜­$™³š³•$3#pNsÆo8+ƒZIÊ'geP+IùDଠjEßÖ°nÕ8¯cZýBºôtÇ¥°h|ùlUX·’DIÎ)”V’(‰ÀY…ÒJ%8«PZ ¢$Mà¬B©ï¸ïYë™?æà‹£…ë¾ùœW­$ñ³J¢•$"pVI´’ÄCÎ)‰Š•$"pVI´’ÄC~ßÕ1ìH4õúÕ„ŸŸ=ó"…l'/þê^M˜óê¹’BoHД÷ù¦ÿ@oŠ×ïüûVùÐ7·þ§ÖŽÂzOð­2¦?Û~—^žhDSxàÍCm½³£6ÔHº¶~Ñ̇NÙ‰ú’BôðÙ› »7šbE^‡Û½ûª( …‡_ sL3cšøìýÛ-åØ¿5© ô¢ÝÖý ''éÞ»æÕ*üæÉ¯Ö­w¦ïMgé[Ïüîï—|ï…æ‹Ëfý.½-åqô¯ÝÑ ÆÍá³Öû·2«ïKý.½‰D²KKŒRøN>øÖ»{Ï÷¾ÐïRëfXZ³ä|•æ €3­gyþ›~—,ŸÙµ}'–÷ûî_RëÝL\ü¦ßsñMKèû¢­§s8íw›ÌR¿ç⛆{?Ñ7ý™9œ¶®³Ç’êB¿‹­pK^¼RxËŸäÖmò«~ZWüÉ~Òç=ÃËgéâó¾Û¬Ï©Ðïz(ç´$¸YÃÊ‚‡3ÇÅ?^ÕGÃXoôp2«®•ßyžæŒÂwðbWnq(#!·8yƒ“‡“Ī;wœ½ÅµßÏ÷p¬Õãm„ä½ÒßÃwlæ(÷b·5%Ü"x®ã&p‹:ãoÑ‹ =œDyk•s·(?z±¼Dõ¢"pæ3'ô"hv<œDf݀Ћ)m½ d ׃|‹j8 •¹EØzópæY4…ô,:'qáz8Áœ{Áxøõ ßâf·þßZ›ÉöEg²öuïnÒ̼»“oä+Ótˆ6è~s”Éóç³ôU!†Àeò4¬ôÇ&yòÝ;é‹á!Ý–n6e€<»ˆ;ìi¸Lþ@É«9œZ¾“¿21sEd€¼á-¯ Þiÿ‹aó!“ßïDËC:6ûà°)„a“+—Éï)y3‡3ÃæñÖ}`Ø®!Ë cÞêá2ù%oçpÆònxWÑáö6ÒÒ‹2ÂÚV‘9—ÈÓÑl “¸¢>ÉüÊÛ(ÑU /øÖÓŧɷ?k\QŸ”»ßx‘<{u¿g ü—仦Uî\QŸ”ýÊÛˆä0IYämžµ¼JŒ%põ!_ò6"ù4]-¼~Œ°|‚¼Íƒ<õIxÁÛÈÃF oµ&ð',ïÏÑöpE}Ò > y›íy]o…·Ò?6™˜—Oß,ð€Ó×>NbÞ:æ4…“wj=‚²Ð»6†¶žŸç߲ûŽgë´?lÜD0ÂÿýúÞµÍ œÞûx½÷œ¶ÎÜûã ñËüõ¹)TNÈ_¨… ïÖNvëa’"Ge“¬›@îpúæÇ¶‘a{á…¾£-'ðº!¯ó×$/§ýzsê¿uÚó«ßÛÇÑÃß7—d½þ·ž`‡Ã<åËz_òKÎ~¸½à}ÎÎkçã·ŽÀñ(q<8ûµÃ0Ç£Ì1w«/§/àø%qü püú›¿$Ž!GŽïͺ~ë9¾7Çþƒúåp±ýnu#À)ǵýE7"ÃãQàp†ãoúz/sÌñ#bäÇcˆ£ùÅx9ÂÑ8—Îu /†üðÀàq} ð`_×»‘c-ì¼ Çà!ޝÝCûÒq„¿fóiý¿4I¼½îÚÛêá¯rhöÖ>oÑÓ«œoÑGÃëó¸¾êþ[ŸÝ¼jî[Û*á¶Êçn«ýé·{ïy»stûëîm7NñÝ_󹿵Jý‰>XQøOu}ü5 Ú~^öä?BëǘÖÖõz±õZ/cZ/#îT(]´3¶~Šiýqï“Ö¯Ðú5¦õkèÞÛz¾£®NÜ3¶^Ç´^Ë­«µZDëT?Ö{ýϳ­œi=]g¼å×´c~3æwLjQç[?¼­÷²Àg[8Óú öàZ—Ò·°ü!Æò‡]Tëã¨Û¼¬ß/}ëý[…¸Öß/rëÞ~ëvñßZ;kú¯£õ>ý@ébÌs<ü§Þ£oµ-è>Ç;±Œð ÿCþC"_Õ¯ òmÒžÖ ùöîû=ÞûÁÿò_1ä¿DòEÖWµSòÞ”éáŒåU?lNì#¼òU ùJ6Î*ÖòÆÁáèÎŽ9±Œð¿Å¿ ä[öƒþשö–¿Éä‡zšûÁèç·c뽆òYòNÈN³äÓÜ?°çÆ|¿vb?á¯@þ5†ükˆ|*Õ4Nɯ ׉ý`„ùÏòŸù^|Áï·b³9œ#Ÿ+|÷îbãm¶_Ï“oý…žÃ#É÷y`··ùœ·¼wÛ[€|‘ ä!ºØ6@¾‰!ßsÉ(òp޼&©t|õJwêÎH>f†}“gXåú=ZJ>ÏGu°‡³–W’åÇvWŽ­ïÊòå*çmv' Š!zšüDæá‘äÁ]ìb¼Í®‡M–Û5–Ny87l2' ›qº;ƒíÑú1&¶9neocSÅ’/4DVÇm(0+¤Àlô6Ç7 ÿCþM ŸŽoàœ‘OûSô²9œ›6ôe£Êþƒîâãm޲·I5ëm:–#­sÃ&‘ü|–¿ùK ù‹ì*‡—X2äáø7ç†M&øùd<4z{¼ùk ù«èmÖŽŸ¤Z7ïûýJÀ3)á%äeL<_¾VRÇ>°y2žLàáܰéõ('öƒþäßcÈ¿Ëlš³äsgÁ{8—ÃJ ¸ü|ÝwŒ«ü–]e¡SÖÏgœìáܰтŸ×cQEWzõh½Š‰*«˜ešõóÖåV¡¨ÒHÙ(gé^Ï<’ñó•àçûHÍúy•8XtªÞ–/¤³à; ¿‹!¿“-Ÿ;ÖòE¢ÆM)´<äqULXÖmr~ѩЙ&­Ç‘¿@6q‰IF.GqØ(²KÖjXx¹Cæ†ÍøÈ\¡õk ùëQža­cW‰M‘¦ùΆRT ¹Ì ÜÅ-ÆÛÜä6VÌ2/õp.0ëwÍOìxO\óÀ6»À°ac›u–Án¼‡s“”•&©QõØ`ðhýcù»lùÇ[(™Õëu÷M(ž7R…ÖÓòi`’ê˜ðÞááqK)lm¤1;#éG`éƒ_hÍœ…L*•wFºéŒÏaÛF8 Ú4f̧IÊp“Tk8gaؤ1¯Œ0l”a³òûòûÀ°éKf¸v<šÆÃ¹a#fp¬HWñ0’?Ä?–>XòÝQ%ÀYòÒ˜×0æa~Ocƒ4èœ6ÊdfçÈKÞŽñîDéÖUŒ·Qo£R#ìI o[úPà.TŒ·Qo3¼.˜n"ð^wç,o¥µÊQ¦ÜÕ2Œäc¼ x­3~+ÓÀ˜W¡X ÌR̸ ãmTÀÛ(60ëj]Çjçb>0ë?áà.TŒ·Q‡ù,cÉ Á‰ x›Ä ÃÞ¬Þ)êGò1ÞF¼Rùl¬PõpvsAóã™¨Û ÜEãm2ÑÛŒëuÌæ‚…A›ciÝî=ƒ'.‹y`³ÝÓämfa±1Ûý<ô{3l²ÛÓäsV¾‡Ç‘w°jäbÜV^1+2–¼Ñ¶6\`ÑI)ÁUBÍäÖÁb£‹Y«t¯ò ïçµßq¯!ò©D~œ&¬¹˜E'Ø\H•°¡æÝÛŸfX+¥.f¡Õ½\%?Ã*uÜ·'å`Št13¬Û‹–OMÂ.:Y’}ç†M.É´rè8˜"]Ì ë2y­øm›AHì3¬*¤1¡‘ƒU#³èäŽò˜×† ‰M;I©9œÈ)I pØÂv1;à® lëðäuV€ªÓ•Š*;Yf½ ­Ã¢ÐÞ~K…ÖQh äkIZD¡õ‚(´‹ByòHZD¡sŽ%_X k•çÈg©@>K'RäzA]‡…ÐÂ;B×!´8æý>lB× Bè:,„,?B×!´8æµ@ ¡ë!tB³ä±º¡%ò!t-¡7?@þ'†ühyp–OÛ.C´<œ#_cÞ/uv:êzAÅ]‡UÜ‚å§*î: â')¯â®*îzAÅ]‡UÜ2ùT TÜù©Š»¨¸ëwVqó䑺¯¨¸Eò¹È#w½ â®Ã*îgÉÏTÜ!îbãm¶·ùœ·†ü^$¯­bCb›%¾œvÿ7òïbâù]ù§IjWþÉÏw özA?_‡õóO’ŸëçÿBþ ä¯1ä¯â°IÅ$àª6ð&Pç–>r!ªÔˆí`–ÙÅLR»FN'âÿ: þ—Ó@'¥£³ÚÃÚÅ>féc//}䩳œåMá`–Ù‡–>iéc|¡JwØH>f’ÚV†—)ùî5Žs8»z Y~<.j{G}ˆñó‡M`Ødšs•Ú8Ú:;l¤I Ò¬b™¼vš_úаÐz,:¥V²<„F‡3?Ç?‹ÞÆXÍ-´fk›ÀªÀÙIJK“Ôè¬àë1®òp•³\³Ë}ÝK[IëùÔ äA–y„A{ŒóG9¶Qi®……VMZçü¼´zoLï+•ê…:©:\'%Åó“:©:P'%¯ÛҺʹNª^¨“ªÃuR,y\'Uê¤þ˜!,<ÆD•G9ªTà ªÄÛä¼ÍÒÃÙå>#-÷™I™U½PäU‡‹¼¤a£Ùd„y‰®2‘Ò@TäU/yÕá"/)“š¡ë@‘—8æ3! ÄE^õB‘W.òBâi‘W(ò’7Ô2iC мÀו1®²”]¥ÎrÆÏÛî=°À^\å°~b?˜ÔˆÕ ju¸BMÜÊLë*gjr`¦¥ÀlZ¡V/T¨Õá 5ÉUN*Ôê@…šhyigÄ‹FJÈãʘ4°<‰–7Ʊëóy¯¹ôp60“¢J¬”°Ì[Ƭ—Ÿ4°Ðlh-$#åg(<0Rx0úùÜEãmÊ«ì*•a-Ÿ)ty ¹Ê\r•ãÊÉÜÅ9ÆÛœ7WÉme¶Q¥É¡ßÏ¡d$—–û@os†$ô“Þ¥¶byW©3ˆçÏ»¿‘‡)ò3Þ/r<¯µâƼ69ìI/À,‘âyXê<ÃîÀ9fsá| XžKÀíºHMZ³ü7äß1ñü·ÏO‹yë@1¯èm´ÃâbÞz¡˜·óJÃ&Ól22/æ•gXÉò¨˜·^(æ­Ãż’Ÿ7šMFæÅ¼²Ÿ—”N¨˜·^(æ­ÃżbîXËÏ‹yÿbyx⪘¶ hr^81/æýù ¬×]b–û.G9 œóÖb^yØÒ°™ ¬]b.gY²âR. Ôíëu—s€¼,¯¡ää ƒö3æ¯ò*±Î Ã=°ÆX˜e®¡1¯¤¨ôuWXl¼Æ¬U^eœÎ­å&©¼í‘lg—>Œ´ôa&UØõB x®—¢JëXQè¼\^=Z}ÇÁŽØ5fCíZt•Îq±MÑúÐlgp)žËß`мÅ̰·Àú¼ š°‹ÃFKÃ~ õŸò?2y— –Ï|ÅÊL¾#Éï¦ã«×ûú÷z¡ú¾Wß‹~ž]t"Õ÷bn¥Uß× Õ÷u¸ú^°ü´ú¾TßË«ÄFZ%žVß× Õ÷u¸ú^LFTÆ/}àêû?HVRЧ1ôô# Yáróê{yÌ+iÌO«ïë…êû:\}/‘7\TI«ïe º‘$èÓêûz¡ú¾WߋÆ“ Óê{qØH™®¾¯ªïëpõ½(œ`É“ê{™¼4æQõ}½P}_‡«ïEËçü°™UßË ¸¤ŸGÕ÷õBõ}®¾—È«ÔBhT}ÿ‡ 5îBÅxð6“êû:P}ÿ‡…VîBÅxµ -:e¼~Wß‹ä¥L Wß× Õ÷u¸ú^6lHLªïÿ°b¦À]¨o£òYÆ’ŸUß‹cÞ ÃWß× Õ÷u¸ú^$¯ò¸úþi`î"‹ñ6ÙF^«œÔ€×ê{9¶‘ö¤Põ}½P}_‡«ïŸ$?¯¾ÿ yè÷,fØd·§ÉÏ«ïÿ@>‡~Ïc†M˜¤rn[G¯J@¦•‡ÒÀTN€P*‡Y&™¤òÀ$åRVWYh »y`’RZ°¼Ò`y´y̘Ïwò>lÂ…Äf]$:ws8G^*¯SP^—ƒ£Îcü|ðóEÁyÓmÛ9œasi†#Ꞹ<æÍ~Þ)v7°u•°V™ßcž÷óýxO\óÀA?Ï­ÛäëÂB2RüÍÏ0h‹˜1_ìž$ŸuÕ÷Ûóóô{3lŠÛ“䋵J Úâo~ÞA¿»˜aã6²·™œ²‚E¡ fX6“SVj锨‹t1[™nû,yrDÌ_ÈÃÁ.æÜ÷ ŸdìΈ2)i%/ùyD H•\ŒÒɽ>Kžœoóò°‘êböa]@š*¡àŸoó‡ÖÎÊÅÈ´Ü{ ásØùù6(»pY¹˜ÀÌ}<»‰Ü…•þýͰ’*RÌ2.f’rr`6=œÇ·žw/¬‡]` Ì$ÕÇäpHÿ]ÌêÛ?Ižž,ôòÿ€ü¿òÿdò““…ð&rfŠ9œ#/éç'' ALëbBbwx–<9é/äa#ÕÅìú£ì*'Ç"Õc‘äã2W‰EªŽEªÃÇ"‰ê>žüüX¤?,÷9¤ºE«;,Ÿjnû^Y—é9œ}`¥ 5\F묚…“…šðÉB¼ý–|²P8Y¨òt²P8Y¨Y8Y¨ Ÿ,Ä‘Ÿ,ÔN’ÈONj' 5 ' 5á“…ËOOj' Iä'' 5“…š…“…šðÉBùéÉBMàd!‘¼_úh¤“…~€üO ù‘üôˆ˜&pDŒD~rDL#ó9¶.TÒ„*aɯPu8¨„'ʨ›ÀA%ÍÂA%Mø ’gÉÏ*ù ù¿Å¿…Èç¼åñA%"y¿bÖ*i*i•4 'N4á'??=q¢ œ8!ŸÖ6'š…'šð‰ùé‰Màĉ¿G½‹ñó»òOÞfWþéíÎ|hNœhÂ'NÉØ¨r¦h•ÉK®Ò‹Ba–q1“” LR9çç©4Qö6ÒZ%’&6 ÒÄ&,M,?U÷5i¢hy)“Âê¾fAÝׄÕ}ù‰@® ¨ûDòÒZåD K^.fÅÌBi æâù¹LK¶¼´'Z£ÿmÖ_}ëÿ“¼ÍÇ—Là§ïÓã/ôÙPþªæxÓüV;ÕÜþÿöZÌá œ¹AÝ_Ï“8CÞôçÏ3äSÏáùþT%Bþ¿u!ñql³ûëyògÈÛá°B¾ó¢s8%ßí­°–ox„ŸÌH¾ýëyòç†ÍðÖBBžƒ3–og3–|wWxc>‰óÉ߯|ò·1o€¼‰!oDòëÌôË} y«&@~µÎyò>ž7/@þ%†üK€¼ÍyòÖ¦s8gùþ|Z†¼¡”yòo1äßBäË[¨›8K^6 ¶´Ì;!ÿ o ¼Êçp–|&‡Ã¸Ìÿˆ!ÿóFó Ó8K>Ƽ‡ï€ü.†ü.@>·‚«\gs8G¾,zóÈÿ‹!ÿ/@>fØ ÄÿçÈ;aÌkÄš#?Æ?È;+·fgÉ| äK _Æ/ä a’Êàt€³ä•0l`oÂ@lcbbs y‰<}˜ShÌBl9¬…ÖÆÌ°vó|lÓÎ2nçÈ÷i %ÿŸmìÈocÈoäsa’Òš´ÎÆ6Bxà™-„6&<°/!Ë áAêÒ9œµ¼âyOþÈ¿Æ Y>•¢Êlg-Ÿ cÞˆmlLlcßdòy"‘7éÎZÞ –e£…ØÆÆÄ6ö=DÞJc>›ÃYË Q¥U‡…ØÆÆÄ6VŒmÆ€œózg-oËÃΈ…ØÆÆÄ6v²¼‘Æ|1‡?•IA¥’½ùk ùk€|ÎZþ¿®,s§äÿW¬Ÿ¤j _ǯä•0Iù7uœ³¼É%W cþäo1äoWYÃ&ñcþ3lƨò¥u1Ûž²ÿkʱýßáÒÍ^ë5Gþåý²~yÀÇ¿¢àÛ÷™ û¿n7ññ­Ëûúuhþš7R¾ØY#ë1Yô ÃmFE¯m?6ß7—d½þ·F&­s{wÞ¶žˆ­·fýpä™ÖJçp¶uÓ¯át û÷)ü Zÿz¾FÇÑ+žÖ¨PèàghýÓúY¼wýxz_>wëzhþz¦1·˜ö1"×úx~ÄëËøÙöE($ ¿û_š$Ö__ljfûº‹~ˆ€¿»íû%^¼Žÿü'þ1.’o?¾"àÇ1>Ù?"à§1°ÜžÞbàÿþ/~ø1þ9f‚ÛÏM ZÿŒiý,ÿcùÍ{ëà†²ä÷ø?€GXþ­}L_Já§òÖ>oÑ'ë·oÑ ßÚ/ÏÐŒç²c\¸_ž¡ ¼“÷é9<4Cïÿ6Cï#fèn;‘´5Cw~¿ÿÖÀšÀÙy®˜qÞ™.÷ðgãƒtm)<*>Ø/Çœå³b…ûå0€4ÒU°¤sx( è¾õ |ÿ®;EãNéZ±¼ͨ?Þ/!´õn?dŇ¯—õ÷[ÿ˜|½üÒuM6ÇËö§7ïü-Žy õ¨à‡ÊãçzóõVÿµô#mîÿk³§‚Àç.±MûšˆN10¿÷q·k§nÛsÜÖÛãP¾d¾Õ5²å¥ |pÈÛ2~\·Ñ@?Iðc^®·Ÿùn˜÷šÖùïPøaö-“Ù^2PøgÀÀ§õö‹ç¨L_B9vPøœ£²ýþ åØ}@á_Ž×õv8)h[KÝp tC ¿qðvœêÄ0ðÿ:ñPFá·Çz½møFlÖoŸÒFŒ5>Sx#7rx[¿„ìàaˆ^ÿëD¼ãˆh§þ÷·á‰}àlÚ0‡÷R|.@{—ã·êõûÇÐȇÔHhd„“cþ›ÞÉÏú}Ï}«ûR:øžŸ@#Þ`x/¸Þ¾ïånhÝÚû¿QÅú]"vêl x¾Özïß‚síø!ßâ÷2ü;ï8þpÎý¿µÖ 5³²l,·›ÂøÖ‰…Úiq\óðSè[»ãz78÷ÝŽ<×ÇÝ‘<×Àq/ånhzwâ~Židðq~’Ù­÷[^(öß ž˜=×ÿõn( ßJnaF~]?­÷û?Å´îá‘­K"¹| Žóã—{¶ãÑöúf9À[¾ pŽ'Vå–J±þ:ÉG ½‡3܃ü,„ú¯ÓR§¤õùBó´‘ÓÛ"Ç=™¢Ó±ºdŸø¿îõÖjÅ™.Q m}¾ цËýÞYâo£>oàT[CàÔÀÚñV°²7…ŸÈ·úã!hiæÔÀ—Ïå øø+—3p1‚]–85pž;~Û”çƒ{$EŒS\>;4dàò7ÞÿÍEì#\DšSáN œyÁÖj Ÿ¸¤ú€ÔçN ø&ØÃå§xÐÀÛÍú…7p7›¸SZ°6nTÝLàó•½n™»àÖìºãÿ…Ïí˜è¾œ™š.)F‘Þ>¯Žláý[bç»6íçã²ñ´õl·³ÐV´ÒC´L,ÔHát¶×o¡d¬ÀçoDù…|ëÛ€…^d ™^èI*·c–¨¾{Ý5]6‡³vÌ'3ž2bõˆÉÉ|^I¸¶„ÀZi¢hë ³½`¡4â!m}/^rüÒ@j CáÔB&å-•_ø¼\±{[COÞ•”VF[_˜íõ“³}š©”ÂÉpNr!²> ñp2Ò›­X®Ñt­¹éº³c_HŠ%;û¤uw’íxng¼\ˆp‹ªë´'ðí‰Yfàƒ§ÌÃÅC`’7 ùùY­'€¨é¼[¾E²À“Á"»‡ChcSÞÕ&ã!S8Q o[àâI³A |~*²ÐíY uìs §Ê’\°1~¢[‚fÑBO„ Zà󣿦ªBI‘²®VYù<œú •ç¬(+w\MáÄBòSkŒ^IOÙÿ¨…Æó'ðŒyÊÆq^í",dlNàD¿×-ó Ҏ©’’ó‰…^íb,ðl°Ð-ÆBº p:†4»UÒ[ˆÓ1¤ÒE ¼ºÅXàÙM¶Ðæ¸~Ý •>Ã^î¦ß C*óÉVÖÇúµ$òÇ™tø¿µ12¾Ù|00[Á]ÈæwSGø|½µo¦¹mˆ¶ßH»'pô­^d7¬Ïö'º#­%ð™Þ°O £ŠZ§6O)y,ªê+3Àuö»yîÑÃqœÕÁÇHtFË&ÊPò8eêÔÉŰ·™ß{’ÚÉ6ø³ý®2]è9|Óïcÿªß•ÍÝÎô{Ñ¿p”l?u……“~Ͻ.í÷tº‡/ô{ª“aØÌû½Í‹œÀgbºÖ%¥µð•7”üvn¡ü±Á=K‚׉É3CáØw¬U›Àôý¾› “BMÜųýnõTðh>Ö…$N´G3Kà´{ëõûùóžØ—òpÒ½j8o…öh^8Ú:éÞ,1ƒ rÞ£9Ó3“ÇZ¥É°Â27Jf5ݼ{SeSÙfþA›ÒÓÍ¿eò>¹ûùòù~/Ò$ŸÃ™~WC9*í÷Ü{ÚRè÷¶ÛUžòý®­#púXçYÁö»bå œô»ÞËô»…(ÀÃI¿§ö!Š'º,£÷Nk[Çõ»RÊÒÖËy¿ÃȦbHý~{ºßSg¼Öä~þö[?oXï8©yèZOä‘¡­ÓÑ¡rãX?o}Žåá‡7²½§ v~7.§äéü® ÃÎïJƒ&pâ’äñ¼¿‘ÕJˆÎ'ð@õ§¹mo›¹åáÝN_›Ÿ?oakàÌ4ž<5yÞ$ðNº×*Åûùö®r§~Þög ‘ç½Mz#pò¼çÃÁôy7ptÅNº×&–øyå¨éæ§Òà?óoµ3™êŸ÷ùyoúé~7>¥8ÓïÊ)©ß3§ýžô¯Ácü|šÓÖi¿CBKçw“¥Nýü£žf^þÐíSNçw;È·I¿[xýNÅðÀ’ùÝfŽÞûìmèÝâjŸknz¸Ôïß1Ï;¸ €o¶ß¿Žçߣý–ýüp¸3ðù¥ž œ ›bXצ?¼\y§£#íWÕ©ŸoƒMàŒŸOù<ÎÙÂ8ÍãÒ‡i)(yâçUÒo¼m¿·ÔŒÃæåùç][Çß¼l~ÝïpŽž‡sùû S#Ž@”<íw£v~ïž8 'ù»Kúiö»v)Ûï6’ŸÀi¿? ·æý®3;/1WIÿ~âíf>¨äo¯~^k gº·î‰ØÀ]¼ü|¡øx>…C'ð¹|´ë >³ ÚWÙÏ·ϧ© Î'pÒ½íØÎX?Ÿ;pÔ¯ùUC22B´3?¬yøì}fÝ-öÅ-›×€Ÿ«žï÷\h àLç†{g<8ÌqÎäïú õà LÐNkg†ÂÚï9l¾z8y¬ušóy\ë©é½“~/¬Vl¿O&© |îÎSûP°/O4Wó[ìb×®ßÛ¯ˆý¾X¯3¤À'•9]*%ô{¾ÎÃiþž ù{è8é÷"UÜóÞKT5“çÝ>6uI¿g~ÑÉÃI¿k›ñqQmÆóvð64žWŽÞûnOò÷~ŽÛìw~X¯ËÓ¬˜Ã?¯âyp•û£Üïà †™™Š“'pâçÛZqý¾òïäžÀiW «¤ßmn(œô»ÑŽ÷óƯïÅõ:¥ì£HaCïÝRÓÍû]¹>(Ýìëu‡Ãóý®à$zgú=Ë„ù^Ö2Óù=Í2~~Ï|…ÅAÌãÚçU³~¾ð:"§Ï»Køü½ðKÜNó¸$±Â:-l¬LàswîT®ùuZÕ?>{{' ïÏÁßôo˜—úý‘ÇÁ¡DÎö{!¬ÏçŠÀi¿/Wfò÷6;&pš¿?† ]§MaÁÍÙüÝB¿k §ë´cÇÑ—iM“¸àV9»N« G[¿Îó÷bÚoúr#¡ßˈ~7âºòˆë -Ìï°3Rú] û2*k)÷{›lòÏ»Ó0¿—b¿·ÌMÐu«Ä¥ÜïVöó œÀçY¤6å}2ñ˜ã<|ö®Ö>éZß”~?½GìÃzi1À¹ù}Ø dæwx`=œIÓùõº´û]'q]Rðñ|ëæ>ï÷6t‚RÏg0A{8ß áyï2< Ÿs4ÃûÌGAþîáå;Iûddszôû1¦ßý½ðÍéøëu›Â÷ûQ^¯{ž1ÓÑá2~ÝFk?æòºÍ#› ëu~cÅÃéº29»^g-µ<•ª¯ÑÅ…ˆ ?lžß‡ÕÊ|s*ÛïIž8ãTÁïÇM¶u&p²kgÓïýZ˜¡­Ól¯0ì~œNrØ õpâÒ4ã×ëÚ\F8ã’Œ]¯Käï§2 kÔ ÙDöIègÄþ{æKÙ>ƒûïÜ~\ßñŠÀécë6ÊWp}Êûïm#© »`Z'q]k9ËÏï9ìË|ÊûïºÐ†õó태SøÙÖެ!ó»ÎaKËÃËO²WÜWm>ûïçˆuZ•z™ðF^·ÑNˆëüŽØY^§Ícžæqò³¼g\ÁÇóEa)œô»3ƒ£¦ù»M)yÚïpf?渳¸N›¶4¿›é$#ðË™ˆ;úå¾Í9°N[EìË´N0ŸÃ7Õû2sQÿRG`ӂ©\gXú`Î}€U£JÜ—é¶ïY}]šXð´Uh_f˜¤æ"M²Œ’§ó»Q«»Ð)T‰Uòò~{öžvS‘…{Xx¹F¬Ój8…ËÃi÷ꇶéQ½_wòúüc­’úy¯)½îä‹Ü\ë´×ˆxÞä°w ¬Óæ…0¿ûµ‹k`vÄÒ'9£­ÓmöÇIäIÎüîÿU\§MIøu›Ä¯Û\åuZ§¾ßÛ˜‹“}™Q¦õBÖýòGÒï¶Ÿ¤6×À:í=f~7°3ðÍý÷~ÞÁ½ß~>euÔݾî.ûykXý|7"ÀQße?ï ÅëçÛÌÚ8õóyš yœ¥­S?ß²çuYAïì¿wzÜÞÏ߉î"›ŠÿÓ`¿ós8_±’*"œ-XIΖG¬¤ŠgË#VRE³å+©"‚À7³òãƒÇN&¿Ô?wp¾Œa%U.8[ư’*œ+càó-íKÍ=œ-cXI• Ζ1¬¤ÊŸq¸6ΠJ€pÿðs8_n°’* (œ+7XIΖ¬¤ gË VR…³å+zöáÚtË;søb½ÀÓý£ å8_°’*(œ+ XI•NšŒá |ºJgËVR%³e+ztâÚd¹"÷¾¨ë_òo·_ÀYù¾´®ËQÎÊ÷W’bŸÀYù>»o tNá¬|%)ö œú7'ìwÎÀ77²èŸñŸçŸ5©lü‘Ÿ§ùçg"¸™À9™ýJRÖ8·}Ã.ÔvSwJà¬Ì~%)ë œ•Ù÷ÏÏÏl¡Ö˜œÀuòO÷?à¼~%)à)œ“ï¼%pV¿ð³rø•¤€'pVß?½›ùü“ån_Ô³/ø7V©>‡ó²õ•¤T'pV¶¾’”êÎÊÖy½[žR8+[_IJugeë+I©Nï};Ê,R~/ôÏK {ÎËËW’¢œÀ9y¹°Þá«X=œ•—¯$E9³òò•¤('pN^ž®$E95Ýì)³¹÷0¯1þ­@ íT*Ü+ø bë妯²êßrˆ¯_eÿÖÉÀW’ò›ÀYøJR~8+ïÉÏžŒÂ9B~QÇýt|íT6‡ór핤ЦpN®½’ÚÎʵW’B›ÀY¹öJRh8+×îào³zÝZŽ´¾¨·~®%õÎ˪W’’šÂÅúINIMà´ NI8+«^ JjCବzEO6ïÞ!¦É½/ꢟöoNºÛÖ\žI˜”Â9ùóJR<8]VOß?â™ÀYùóJR<8+îÉÏOËi£Grï‹úå§û'ËÒ9œ—)¯e²¥pN¦¼’”ÉÎÊ”W’2™ÀY™òJR&8+S‰Ì¨éuÆýSÌἜx%)ˆ)œ“¯$1³r╤ &pVN¼’ÄÎʉWôÅkcüM_Ô?zçe¿+IéKáœìw%)} œ•ý®$¥/³²ß•¤ô%pVöÛÁ˼ N ;‡/êvŸŸrVœ”]IŠ\ çä¹+I‘Kà¬>0þ샳¼¾S<´Ô¬b”ÀYùèJRŒ8+íàgâ¹üÑ_Ô.ø·ê7p^æ¹’”ÎÊð±ù^Ðïáç€!Î;hd÷ëF¼ÀÃÏq¾=¾ÅýÖ°Bö_Q8ÿšqCe»þº4-giÉ;ŸÖj¼ãø…Ÿ€õ°™´¼vlÿ!·ž ¡Ž%…Î~%àóÖÛ¶Í£på#Ðú)Ðú ·ômßþl¦“tï]óÜ:nýKj½3}o:»¥–ÏæpæÞ Í—ÉÍú]zY×ãzK^7—à ðYëWI‡(~©ß¥aéAäjé[ªýÙL|ëݽç{_èw©u3äO–LýHlδžåùoú]²ü#¾°ïÄò~{ýKj½ó¢ÅR¿ï6ë³ðîíµ í…Œ:P‡y8ó~¡GtCæÈ5¤ÇNßZÙìá7ϳ»Ê(|pÎGù»Åö×)tïQ¼Eÿb›#}‹¤&p2¬‡ã%ç·(?nñz{Q ‡Ê3·«HÎô¢)¤^tNf–õp?׋0†<üzoq³[KoÆ}$4ÖÐ^$p&f[÷5ÝQßNàÝ|#ÿ–¦ƒ‡Ù¦îÍQ&ÏŸQÒ/^—ÉÓ‰É~äÉ·½[iØã]ð6õ†«Rõ룟óåÕ¬˜–Ø>àôe™á^öÐ+ç|v8@ ŒžèÔ°wÂr´*ÉœrLÏÑXGZ§Mcèí¸®Sî[í×òAêõC§g²Ø,á^†Öç 9I¶¨ÆÍ ËënýVößz–Š”Gß\’õúßdAwõ»9‡òe½/ßÖÜ"‡wßzû™«ƒß^f Åë|“^No#ùÓ›@~ø€'p†¼í•HAò†|6Ùv9üQ" ?È÷óZ˜ü1‚<<}ÇÝ3lîâ°¹Käõ›asšü(Bé²Ê×]gÖG~YRßѶP¢ uÿ©®¿fÎùçeO>ðð#´~Œiýh]¯[/¡õ2¦õ2âÞa¯¡Û+[?Å´~Џ÷IëWhýÓú5tïŠm=_ÇSv[8cëuLëµÜºZ[¡õqã»ÛÛy´¾ÛE´p¦õtñ–_Ð:Œù]̘ß#Foýð6¶~x‹hàLëëÔ ­ûñÛXþcùÃ.ªõqÔm^Öï—¾õá9Lëï¹uo¿u»øo­5} ÒÑzŸ~ t1*‰<ü§Þ£oµ-è~¡éÄ~0Â?€üG ù‰|aT¿RDÈ·ÁyBZ'äÛ»ïwNì#ü ÈÅÿÉ·¡vÎ’×ð~Gg,¯úasb?á¯bÈWâ°qV±–7öp†üP#~b?á7 ‹!È·ì“‚µ|›˜xËßdòƒ@ðÄ~0úùíØú°Sþ$y'ä §Yòî×ÌáܘïÓÞûÁò¯1ä_CäSü˜xz8%¿v{Oì#üÈÆÿ”ÈwôC¾Ï{³9œ#Ÿ+|÷îbãm¶_Ï“oý…žÃ#É÷y`··ùœ·¼wÛ[€|‘ ä!ºØ6@¾‰!ßí=Êæp:lÚЗ*ûF8¸‹cŒ·9ÊÞ&Õ¬·éôŽ´Î ›Dòó Xþä/1ä/²«^ÔLJš3ç†M&øùdwp†²‡s9¬”€HÀ¿Á×}ǸÊoÙU:eý|VÀ9ŽÎ -øy=Ê/;ió£õ*&ª¬6r`–iÖÏ[ïDñpvØHÙ¸mݽ‚v$ãç+ÁÏ÷BwÍúy•Àù(ÎY¾VÌ €ï€ü.†üN¶|îXˉ7<=<ÒòÇU1i`X·ÉùE§Bgš´GþÙÄ%&¹Åa£tÊ.}X«aáår ›B6ã#s…Ö¯1ä¯Gy†µŽ]%6E:¾ÕÃÙð@Š*!—¹»¸Åx››œÃfŠYæ…aÎf}EÔ‰ýàoà‰kbØf6ll³Î2xQŸ‡s“”•&©QÝÔÙ=Z¿ÇXþ.[þñÆ5fõÀÀzÝ}ŠçÏ–O¡õ4†|˜¤¥:À)Þ·ô‘ÂÖF³3’~–>ø…ÖÌYȤRyg¤›Îø¶ý`„àMcÆ|˜¤ 7Iµ†s†MóÊÃF6{ ¿!¿ ›^Ï=°ãÓ=œ6R`•¯²y$ˆ!,}°ä»'¢J€³ä¥1¯aÌÃüžÆ„i <Ð9?l”ÉÌΑ—¼ œëÙ‰O­«o£ÞF¥FØ“•œ·ô¡À]¨o£Þfx5&ÝD.àDç,o¥µÊ±`¦Ó,äc¼ x­3~+ÓÀ˜W¡X ÌR̸ ãmTÀÛ(60몡FÕº‡s± ˜õŒpp*ÆÛ¨C€|–±ä†àD¼Íð¡ûÁw¡b¼ x¥òÙX¦åáìæ‚4æÇC¸¶¸‹,ÆÛd¢·×ë˜Í ƒ6 Æ6Òº Ü{O\óÀf»§ÉÛÌÂbc¶ûyè÷,fØd·§Éçþð\#ï`ÕÈÅ,:¹­¼bVd,y£ lm¸À¢“R‚«„Ú¨­ƒÅF³Vé^äÞÏk¿3â^CäS‰ü8M8X5r1‹N.°¹*aCÍ/6º·?ͰVJ]ÌB«{¸J~†Uê5=Ô eu¸ìâIò󲋿¿ùk ù«8l’D1 ¸j‡ ¼±Ìù¥\ˆ*5$b;˜ev1“Ô®‘ÓÀIÍH¨‘Ó@'¥£³ÚÃÚÅ>féc//}䓵ʩåMá`–Ù‡–>ié–ûö0Ëìc&©}`õÀ&9K>·Ix8»z Y~|×|÷¢òGë‡?؆M¦9W©£­³ÃFš¤ 8ÀªÑ!fÑépÉk§ù¥ ëó‡À¢Sj%ËCht8ùs ù³èmŒÕÜBk¶¶ ¬œ¤´4IÎê¾îã*W90Ë5»Ü×½\Ž´Î‘O@Ô¼G´Ç˜1”c•æZXhÕ¤uÎÏK«ðæÝ¾À­^(¯«ÃåuRÒ@\X/ÔÖáÚ@!$žÖÖÚ@yC-“6Ô 6|]ã*KÙUê,gü¼mCâØË€«t'öƒIia½PØX‡ Å­ÌÔ±®rVØ(fZ ̦…õBac.l”\夰±6Š–—vF¼Ö¨„<®ŒIË“hyc»>ŸçÅxn¡‡³™U‚Ò©„eÞ2f•¸ü ¤…fÓ@k!)?CᑃÑÏ—à.ÊoS^eW9¼—X>S 2èòr•¹ä*Ç•“3¸‹sŒ·9o®’ÛÊl£J“C¿ŸCÉH.-÷Lë Iè9&‡=K9lÿÄò®RgÏŸw#Sä9f†=_äx^kÅymrØ“:_Y"Åó°Ôy†ÝsÌæÂù°<—€Ûu‘&š´gùoÈ¿câùo9žŸÖ€×pÑÛh!‡Å5àõB x®—†M¦Ùdd^.ϰ’åQ x½P^‡kÀ%?o4›ŒÌkÀe?/)P x½P^‡kÀÅܱ–Ÿ×€ÿÅòðÄU1lÐä¼pb^þòX¯»Ä,÷]Žr8©¯5àò°)¤a3>2X5ºÄ,:]βdÅ¥\¨Û Öë.çy'X^C¥Òí5fÌ_åUb†{`±0Ë\Cc^IQ%èë®°ØxY«¼Ê9[ËMR¹ƒ×5{8»ôa¤¥3)Þ¯Ž¨ÃGHQ¥u¬(t~t€¼z -´úŽƒ±k̆ڵ è*ãb›¢õ¡ÙÎ&àR<–¿Áy‹™aoõyA,4?÷@6Z6°èô­ÿÄÿ‘É»T°|æ ~dòI~70ßËÚ›P/ÚP‡mý<»èDmp+%àèІzáІ:|hƒ`ùé¡ uàÐy•ØH«ÄÓCê…Cêð¡ b2¢2~éÚðÉJ ò4F‚ž~$+¼@n~hƒ<æ•4槇6Ô ‡6ÔáC$ò†‹*é¡ ²ÝHôé¡ õ¡ uøÐqØptzhƒ8l¤L ÚP/ÚP‡m…,yrhƒL^óèІzáІ:|hƒhùœ6³Cä\ÒÏ£Cê…Cêð¡ y•AmøÃ†šw¡b¼ x›É¡ uàІ?,´*p*ÆÛ¨]hÑ)ãõóøÐ‘¼”IáCê…Cêð¡ â°aCbrhÃV̸ ãmÔ!@>ËXò³CÄ1ï„aƒm¨m¨Ã‡6ˆä•@Úð‡40w‘Åx›l#¯UNލ‡6ȱ´'…m¨m¨Ã‡6¬ ˆBS%¼àc‘þÃ:ÐY¹™–{$#|;?ée"+˜¹g7‘»°Ò?°¡V’ CEªƒYÆÅLRN̦g:ùÖóî}æ° ìB™¤ú˜œéé¿‹Y=pû'ÉÓ©þBþÿCþŸL~r ÞDÎL1‡sä%ýüä@*ˆi]LHìÏ’'§iý…’T£hu§€åSÍmß+ë2=‡³¬T¡»B$©.FÑê>å1Ï–×ÙµÉ|”û ­UæÒZe>9I¬^8ǬŸcöyzŽÙ_ȃ`ÆÅèmÜ9@Þ°ºÊL9›Îá,yiÝÆŸcö ä¿cÈ?IžÂöòP±âb ^\%?°9ëçÉ!lâ·t8Ïä¶6ºhŽkÂG ðö[òQ`Mà(°È7ÒQ`Mà(°fá(°&|G~vX8 L"?9 ¬ Ö,Ö„,?= ¬ &‘ŸÖŽkŽkÂG ä§G5£ÀDò~­²‘Žûò?1äDòÓ3šÀ™NùÉ™Nt¦ÓçØº|²P>Yˆ%¿Bç4“…xòè܃&p²P³p²P>YèYò³“…þBþäo1äo!ò9oy|²HÞ/q7“…š…“…šðÉBO’ŸŸ,ôòÝ!-ÍÂ1MøˆÁÏOˆiGÄä§Å¼Màˆ˜fመ&|DŒ@~zDL8"æ/äÁQïbüü®ü“·Ù•z`»CZš…#bšð1O’ŸóòW !‡Íôˆ˜&pDŒ4IMŽˆi¤#bj _ǯåÖXÎÛ´ñA‘ë9‘fXtâD³pâD>qB´<÷ÀÒ'þ`ùo˜"¿cfØoa†¶2-·n“´Ñ›ÃYo£$o3-!o Ø›p»àm¦ìM €]ôóN°<.`o Ø›p»´Ä=)`oìâ°QÒ ‹ Ø›…ö&\À.MR“ö&PÀ.# 3©ÂnjÀ›p ¸¸¡æçmæ5àâ°‘¶u| øÌ2?1“ÔœÃN˨›@µ´b6)£n„2êZÏcÈç›@&Å…´rAΤ¤ØU.4 • M¸rA"?©\h• ⢓¶2qåB³P¹Ð„+$??©\h• "yi7W.4 • M¸rA²ü¤r¡ T.ˆ®²¢J\¹Ð,T.4áÊqØ(6ªœW.ˆc^I3,ª\h*špå‚Û¤\lC+D˧˜Ǖ ÍBåB®\xŠ<­\ø yè÷"fØ·'ÉÓÊ…?wÐï.fظìm&âÿ&P¹ z/þoâÿfAüß„Åÿ"ù$c£Ê™ø_&/¹J¯Ÿ‡YÆÅLR.0I土§*nÙÛH ­HÅÝ,¨¸›°Š[°üTÝTÜ¢å¥L ¡›!tBKä'Zâ& „ÉK ­-1¬×¹˜å>w ¥š‹ççŠVÙòÒ†R´6 ŠÖ&¬h•,ÏîRE«¼zK«SQh³ m¢P‘¼a—>æ¢P™¼ÃVæÿ6믾õÿI~þãK&ðÓ÷éñ¸›l8&åUÍ?ðƒà·úkö­î úöÿ·×bOàXãýêþzž<Àò¦I C>ÕùΑïþ#äÿ['0êŽc›Ý_Ï“8CÞ'JòÝü5‡SòÝ–kùö‡GøÉŒäÛ¿ž'pnØ ¯Ö%ä98cù6Ž`Éwwõ€'0擘1ŸümÌ'óÈ›òF$¿ÎL¿ÐÊ7°ncäWëœ'ï3)óä_bÈ¿È÷’†¼W pÎòý!ê yâ@óäßbÈ¿…È –· Ÿ8K^6 vBÍ;!ÿ o ¼Êçp–|&‡#Íÿˆ!ÿóFó M8K>Ƽ‡ï€ü.†ü.@>·‚«\gs8G¾,3óÈÿ‹!ÿ/@>fØ *ÔΑwÂ˜× 7G Œ! wV oÍÎ’7ùÈ—@¾Œ!_ÈÂ$•ÁpgÉ+aØÀ®ØÆÄÄ6æóy¨L4§Ð˜/„ØVÌ'ÿŒ!ÿ)†Ýð¼ ,÷œ#oE?ð3?Ç?G‘7søsä^ù*†|̤Iª}æp6¶‘\¥S` ™ Ììæù¸ NÜÎY¾_·¡äÿó!±Ýùm ùm€|.Ä6Z“ÖÙXˆ*ý®…¨ÒÆD•ö%dy!ªL]:‡³–WBèÉ¿ù×ò¯!˧R2’Íá¬å3ÁUúa!± ‰í›L>O$ò&ÃYË[Áòàm,„Ä6&$¶ï!òVóÙÎZ^HFükÈ,„Ä6&$¶²Ÿò8vÌë9œµ¼,[™BbÛ]ÈòFóÅþTE3˜Ù2@^9)žWsøSc4¥3˜ÙÓóä;‰ÜþÔ°ÀÌB`fc3û ¯%oãç÷Ï(W –‡µJ³Vi¿ž'?6¡µJm…1Kö ä¯1ä¯ò9ëmþëŽY™Ã)ùÿÄ…Vë‡M äëòuhÌ Y ÉÀ9Ë›\ `ØÜ€ü-†ü-‚«L¼Ÿ¿Å¸Ê1i§ÕmOÙÿ5åØþïpé"¶õš#ÿò~Y¿<àã_Qðíû¬Ðé¿NòòøÖå}ý:4͹ÍÑk;¦éô¾¹$ëõ¿5²£[ñ­+ë-ôúàZg~רtg1ýZ9^úèþ} ÿ‚Ö¿ž7ðâ8öÙGkÔÁuð3´~Žiý,Þ»Vþ[ßÐÈ÷/ ì;‡“FºV,o`3Ê[_>wëzhþzæÄpLû´Š»÷ñ8¹×—ñ³í‹PéG~÷¿4I­¿¾Ž±Ùöu?üeäÛ÷K ¼xÿøO ¼xÿ#„íÇWü8fÛãG üàŸðÓ˜ nOo1ð=À÷1ðÿ?ü‡Ž;ÅtÜç¸p´ýÜÄÀüg ùo6ß1ÃfóÞN-Ã/ï1ð踷ÖE½”‚³‡úÖú‚Ç·¨WðßjºÇ·èãßÚ/7Œ×¶c¹_n¼“ïë9œnú™å}ýbçv|Àÿõì娧/R[ˆz:Ó½ƒéÞk:Íáìì×OÊóÜ%÷ðgc®tm)<*æÚ/Ç\œM³b…VûåЊ4ÒΦsx(´ÚÇ„V]-ÂZí—C+Úz·Ÿ>‡‡"¨Ã‹]}wŸ…¦Ã×Ëúû­ÿÖ×Ë/]×DüV¶6ï¼!ÆzTðCe;IoþñÞê¿a埸ÄÿÖzLàs—øßãÌaÃüç5“8uÛžãö°Þ‡ƒ‘ŽÌ·ºF¶\8y[ÆÀë6éá' ~ ÀËõö“#ß= }ÍÊüw‡(ü0û–Éì/™(ü3`àÓzûÅsT¦/þ¤»(|ÎQÙ^%@9vPøW€ãu½Î`ÜÖR7\ÝÐÂo¼§:1 ü¿NœQø-À±^o¾›õ"ڈѣ†w o¼¬·fø–‘ ñ2o=Ï,…oæT@­TÞÖ¯!ýz4rÀñù]%Ðoã‹÷·Á-¼ p6/›Ã{Uêe6ƒŒæj=ÎûÇÐȇÔHhd„“S9Q#?ë÷=÷­>"éý#›ã±ðÁÓ¾zgû¾—ûºõïÿ‚™ ÑíþçOÂîµµÞû·0ƒŒvüoñ{þ€·ä½à•Ôú| µè”Âé ðßj ñÃMSí\¦µf¦©ÿº÷9æþÃsäºa<ÿµÜ×»ÝpÔÖN¸Å]`éà%ï\×@~w$® ÈOà¥<ÚŸÞŽíÏ ׊ÂOr#û¯õ~Ë+®ÿTˆ3¯ò_Z›¢ð­ä”fä×…ñðÓz?ø‹ý)¦uÿˆl]R›?àûSð);~péu;Pm/äc–k¼åÛîxbåâ©”ôtG«9œ‰QägQb÷ˆŽ ߤõù6Ä´‘¶S—8î?HH?žâ0ÏFG;|Ë„¼½‡Ï7©Út¢wô̽·™Ýÿxž|–®8!o‡÷2ý£Fyï>ߤꤤv‘üi™ü)@ೡýKò§¿‘ÿzžütØ|‰ä5l¾þ6l¾Ö§7Î'ý×é%ÜŠ¥¥àÁòðÓ[ÀížÖ§=߈͕eiSeKà§@¨ÒƉ§\7t›¬ý6+ñoÿùsH&pBEé^q:D[ŽÅ¨Æ™ÀOHgo×§!‘lÿš¯C|~:råÓ?IyèüÞS¯žè;ë‹ï†Äö/¤÷î2£üH“Ú±z2ÁeØyÍMºn3¹ÌgŸGa˜O.Ð,õR¯¿?øÖ»2…þÉÛL€&9€mvëm*Üûº„Ñb)¿—;“ºE»—ß&0'p’D·nL1YpëßÔ(ôŸÂg×z8€‰žÜ°.Æ"‡ \~I³T•ÍáÌrôÄÀÇ¿øø¼Sm SkÇXÁš÷~"ßêOu£‡’L pù]!eàòo.#F°Ë2§ÎsÇ`›2pbà|páäøŽ©.¿¯ dàò7ÞÿÍEì#\DšZ¢ œ8Ms~ÛQC6…Ï ÜN¤ý@N¦™xB>ÆEìå"×?ØÃŸñÁãI­8ãƒÍ`=f S8Á®|ðM6°‡ËçÄ ð ·›õ oàn6é-4/í\7ÊW'ðùšw·MTp«ÙÝB¾£ð¹ÝäCM—£Ú}ŸŸ Ò…ÔvE÷3ÛÏÇm—ië9 Ønÿf¡­h!¥3ÅZ¨;¯Âél¯ ÞBÉxrÊ>mêï,ä[ß,ô"[Èô¤Â¶µÐX§3 uÓo¡Ü2p2† -Œ!ã-ðùñ,FÜ Jmý%`¡×¿YèUCʘÅ1ô*Y¨DÒ¢­Ï_û; ùÖ_z Xè±gDF‡GïáŒ!pòüÀ‰!S83›(þA<Ï‹±»3”{Ï_?»N`ÛrÚú[ÀBWÑBIþðCïóÑa¼…®âÒnXöeLÇÁIHQ8#Œ¡Q§0Ï_eÛ~«Ÿ ‰ò¤½s­ië×€…jø–¤­¦¦+Fqô>/ì^«Ì²C°[–7´uª¸ÈìŠwP® ð¹³¤¯f G0u¦ËæpÖŽùdÆÓBB­#™Ç£p:©›Œè•X 'C%ë °)yµNië¤v½Û£^qç<­'nÌ·¾0Û?k¡Ô™”À9‡, ‚„3~(]´ÐvÙBû€…|ë ³=o¡®T°PšåN-” Û&ÔB6qNÆrÜj ”dŠÀÉ£J|~ÜV·³ªië ³ýÓ*RKàÜž²Üi çÃE ½.[è°o}a¶—,di MàÜlÏ)Dúh!¥pÆB…0Û'ÏOrXÛGBà­4Q´õ…Ù^°Pš ñ¶¾¯ 9~i 5…¡pj!“ò‚ê |~\D÷†¸ž¼+)­Œ¶¾0Ûë'gû4S)…“áœäB§pj¡,É CáÄB*1‹¸øÊœ …>?}j¡*ô˜¼‡Q~^ópêaTžóѼ~} ?11—`!ØŠòðJzÊþG-4¾paϘ§lçÕ.ÂBœh%>eýn`!í(œú!i wb!€W» <Û,t‹±.œŽ!ÍÆF½…8C*]´À«[Œ…žÝd mŽë×½P&>(†6½`©Oë×Z(%8Î*´:iš†ý.€o6L#Œà¨Ëì½èf„Ïa­}3ÍíV·ý›Láè[]÷Øa«p¶Ý½#ÁZŸÕRô+Œ†Ñ\¯S›§”<–l÷%œà:ûÝ<÷èá8ïàã‚ÅŒ–M”¡äqä܉يAí±™ß{›0MÔRÏö»Êt¡çðM/wúU¿+›»9œé÷"UœJ¡«LÍ(œô{><Ñ~O§R/¡ßS ÃfÞï‰rENà3©~ë’ÒG¹Õ•7”üvn¡ü¡ƒšåB\63Ž}ÇZ¥Ù ÐØÍ?Ð>åéÜųýnõTBöh>Ö…¤¬´G3Kà´{ÛºûùóžX£ðpÒ½j8•öh^8Ú:éÞ,1CżGs8Mw'µJý(éÑÌ:jºy÷v‹CÃT¶™ƒvibºù·LÞ'\a?_>ßïEšäs8ÓïjH¸h¿çÞÓ–B¿·Ý®ò”ïwmÓÇ:Ï ¶ß œ³3“~7Ù°KûÝBàá¤ßSû¨*¬I²™Ñ{'µ-Œãú])eiëå¼ß‹a«|Óëõ¤~¿=Ýï©3^’x?û­Ÿ7 ,‹œŽŽÔ<Å'òÈÐÖéèP¹q¬Ÿ·>ÇòðÃQè‚ßË)y:¿«Â°ó»KlJàÄ+t“3¿w] ÑùþB¨þÐõím3·<¼¹ûkóáç-(`ÎLãÉÃQ“çÝAïá¤{­R¼Ÿoï*'pêçm¦+yÞÛ¤×8'Ï{>¼D‰>ïŽM›ÀI÷ÚäñÀ?¯5ݼãTš'Š{Þ=‘±ügþ­v&Sýóþ#?ïíO?ÝïÆ§”gú]9%õ{Fà´ßÛ¯ñ~>Íië´ß‹!¡¥ó»ÉR§~>¤óâÊNÎR8ßíPÈDú½¸é½o‰.®X2¿ÛÌÑ{ßfßʆ÷Žmz¸Ôïç§û]·É„šÃi¿·S¡ãû]{ÓÅ~Oæú}Ыø¼ßÛ³Œ‡S¯ö›ît~oƒUMàÌüžòù»³…#pš¿§ò|’Ò¦ äÉüÞÚ¡îqK'€qؼ<ï絓=|ó²ùu¿ÃyõÎ­Û *vâTAÉÓ~7:aãºÎÓR8Y·q©ÓB¿3­Ó~×Ãn/øóñ‹8í÷Çqó~×™!ÃËF\·QmšÞ¯ÛÌã•‚:þ5b~ך™î-†{g"up¯ù½P|—Âaûø¼º¤ë >· ÚWy~o86KS=žÔ4S?ÿ(“¦+2&è×üÀª! /ÚˆV =ü{On±¯Ïݼæ÷·êù~ÏhÊÎäïn¸wƃClãá̺Ͱ^G=x󻇓ÇÚ™¡,•ö{Ú,'µnã?6žo=5½wÒï…•æw?IMàswžÚ‡À•$öy¢ ¼šßb—³týþVÉý¾X§5,}œÔýv)´Ðï ø:§ë6©°nÓ%xNú½H÷¼÷,šÀÉónš/Òï™_lôpÒïÚf|ï.á×m ¿µáá4äXÜú¯ÛÄžÀ¯óu›b¨ÃÛôÕÈB¿—ýnÄuå5×Z˜ßaG¬ ô»öãTõ/¥Üïm²É?ïNÃü^ŠýÞ>2C6A×ëì”r¿[ÙÏCYÁ>Ï"µylë‰ßÀçá×’Æ ]ë›2Ðï§÷ˆýw_ypn~O…õ:¬‡3i:¿N›v¿Kàt½®àãù.ÖÍ |Þïmè8¥4žÏ`‚öp:¿ÂóÞex>çh´*Øx¾ ¬2/ßI Ü'#›Ó{ ß1ýîï}„oNÇ_¯Û¾ßòzÝã‰ã>Eá'²ífX½M¢óñ´¬ œŽ—ñë6Zû1”×mÙ]¯ójN×m”ÉÙõ:k©å©R}ýˆ..dõ¹ðæŒXŸ÷ç |s*ÛïIž8ãTÁïÃN¶ó&p²[kÓïýZ˜¡­Ól¯0ì>¬NrØ÷pâÒ4ã×ëÚ\F8ã’Œ]¯Käï§2 kÔ ø$ô3Bw‘ùJ÷Ï î‚Û‡í;^8}¬aÝFùïOYwÑ6’ z¦u×µ–³üüžÃ¦Ò§¬»Ð…6¬ŸoäœÂßÈvÞ£¸c>¿ë¶2=¼ü$¾0yóÐ]œ#ÖiUêåáyÝF;!®ó;¡gy6ŒyšÇYÈÏò>¬qÏ…¥pÒïÎ ŽšæïðzŠ œöûCùÀìÃÂw×iÓv‚æ÷ß3d~!uKY¿Ü·9Öi«ˆ}™Ö æsø¦zb_&#p.êÂBêlZP8•i ḴP°jT‰û2lƒÕU¦‰O[…öe†Ij> Ò$Ë(y:¿•±zB a%/ï·±gïi7Y¸‡…—KŒ¾.‡däðóú±jéuAà4žÏ„<ÎúC.¢ŸïÄ\|g|5ÉEöóÙc*e­¢÷Ne³©°>ßÉþ(|îÎMî2~Ö%¤ã¶åe>Ø^Sº¹üü5b}^ÃÛ-=œö»~h‰™'Š\®;y_æ±FMçw¯!¿îäü]±ë6à Oà4R`&bËÁ×]åõù¬°¹Ð'ó»kÌæ€ñ³ yâTL?l6×Àúü5"39ìÃ^ëóy!Äu~ÍêXŸðÔƒg´u*¯x Fž÷Ì«>®âú|jL¯×%~½î*¯Ï;•ä‚Þ¦`àd?n”e¾ý†ü‘ô»íƒ“Í5°>‰ë ìˆ|sÿýüîàÞïù=eë&ºØ渻<¿[ÃÖËôEúšÀéª^¡øz­@0sÌïyš ù»¥­Óù½eÏëm²‚Þ;Ñ]Œ‡3lîDo“M‹}Ò`¿óPs8_µ’* œ-‡ZIPΖC­¤ (gË¡VR³åP+©ŠÀ7³r(㓆®,f©îà|ÙÒJªT"p¶li%U*8W¶ÄçÙÚŸ@äálÙÒJªT"p¶li%U*øìäëµqUþ„û‡¯(šÃùò¢•TQDá\yÑJª("p¶¼h%U8[^´’*Šœ-/ZÑ#±×¦[Ö›Ã냞îK=çË€VRå…se@+©ò‡Àé£1|A_WùCàlÐJªü!p¶ hEOÔ^›,WäÞëx–üÛíp¶\GZO‚eHgËuVR…³å:ì~‘Ò9…³å:+©B‡À©s‚. sî¾¹‘m`ÿŒÿ<ÿü¨I%óüü8Í??¡ÕΕլ¤Jç¶íØúnêN œ-«YI•4ΖÕôÏÏÏlÞ˜œÀëbžîÿv€óå/+©â…¹ò—•Pñb œ-Y /³å/+©â…ÀÙò—þéÝÌçŸ,wsøbýʳýÓU¦Ìá|™ÊJªL¡ð“p¬:[™Bàl™ÊJªL!p®L%_I•)Ζ©tðzö»™õ€/Ö™,Ì?lÉΗ“¬¤ gËIVR ³å$¼5O)œ-'YI$Ζ“¬¤ zïÛ¹´¨"c¡^Àù²•TéAà\Ù‡°åOðp¶ìc%Uz8[ö±’*=œ+ûHWR¥5ÝÌ ÚÜϯ1óO*'R©ºà…ÖËÀ_åùgL0éü“Cþó*Ï?]yÆJªÈ p¶°’*œ-XIΖ¬¤ŠgËúèä@"3jºEýDÿs8/ó_IÊ~ çdþ+IÙOà¬Ì%)û œ•ù¯$e?³2ÿ}ØÚ€ÀuúÏÇ…žÃy9þJRàS8'Ç_I |gåø+IOà¬%)𠜕ãwðroƒ“ÂÎá‹zúçç¤hçeW’RžÂ9ÙüJRÊ8+›_IJygeó+I)Oà¬l¾ïŸ×yÿ1Ý¢î}!?=çåí+IÑN଼}%)Ú œ•·¯$E;³òö•¤h'pVÞ¾’íôÞç§ÂÁ*Ý©\îŸÀöÀyúJRž8+C_IÊsgeè+IyNàœ ß?í”çÎÊÐW’òœ¶ÞUTÁŸqûsùÎËÅW’BœÂ9¹øJRˆ8+_I qgåâ+I!Nà¬\¼÷oäÍ#†Þû¢ÞûéüT;=‡ó²î•¤ä¦pNÖ½’”ÜÎʺW’’›ÀYY÷JRr8+ëîàgâ¹ü«]¾¨Ë^ðoÕoà¼üz%)® œ•_¯$Å5³òë• ¸N œ•_¯$Å5³ò땤¸¦÷>[2¹5¨KŒóï&¿ôVÈO;e4…s2镤Œ&pV&½’”ÑÎʤW’2šÀY™t_™6ÓØÉÖ&ÀuÎÏöö£khýmx!+«`¦pNμ’ÌÎÊ™W’‚™ÀY9óJR08+gîà×Ý|ý ¡÷¾¨G~:ÿÉáLëëQŽ94«4¦pNv¼”Æ–ÀYÙñJR8+;^IJcgeÇ}ÿÌãBëÏ>ø¢nxaþ¹o~çåÁ+ILଛÙ{/4_^<ëwéÈ×¶Xòïfx€ÏZï¼J:DñKý.½_X"qKŒRø3í>øÖ»{Ï÷¾ÐïRëfÈŸ,™ú ¨œi=Ëóßô»dùG|a߉å½üáKj½ó¢Åoú=ß0?Œº/Úz:‡Ó~·ò£¥~ÏÅ÷d÷NL·ç pÚº~¼Zv©ßÅÖ¸%ïÅ-¼åOrë6ùU¿ ­«Gàn?éóžÎáŒå³tñyßmÖçTèw=ôÛ iT›μ‡ñÕ’Øh ËVN&¼µ²Ùc¾<ÏFsFá»À¤|”o±[ädoqÂc}oÑ¿ðHMà$pX«Ç«ñ- ä[¼ä^TÃñøÌ-Âꮇ3½8¸®“ˆb=¼·ˆëEC~=È·¸Ù­¿S!Æ|$4ÆÔ¾¸àL¬¾îjº£s:wwòž²4f–M dÛeòü™^ý¦‚!p™< HüËRŽ<ù¶w‹Ç?6„mSÈgvů˜Ã<\& äÕN-?¾>zS¼ë.DÞð–WP×·ÿŰùÉïw¢å! ›}pذÉËä÷”¼™Ã™a“?bøÀ°9\C–Ƽ?LÝÃeò7JÞÎáŒåÝppÅáö6RF«ŒÑ™#p‰<ͦ0+ê“̯¼]¥\å´÷iòíÏWÔ'åî7ÞF$Ͼ®dØ%ð_’ïšV¹#pE}Rö+o#’7Â$e‘·yÖò*1–ÀÕ‡@~ÉÛˆäÓ”'ï—W÷ÇË'ÈÛ<ÈSŸôÈž¼é_€| ŸýÆ'=O>å0—ívýõÁmŒzòý_,y€òÝ\f—Èü¹1?NeÛW ÿ*‘ ýù×?‘ocùp$8ëmÜ/" gÉwc~äƒDþ ¿ly€?E~,pïž÷ù°·Èœ!?¼anÉÛüeØ´ÏûH>èm$òM€|námž·¼÷Ç._#ùi’úx“Éœ6Éâ˜øSÃfuôƒ|8<Èœ!ŸfúáA„åÇœ°› GòÁð@"°üðÔ¥ðàé1ßÙþÿ<®¯Ãžð§dùþƒ«–ØúíÏ{ý†s´úMÆ3ÀŸsVÊ?q#ùàó.‘oäûz£¥çýyòp–h·öº{»ÃŽÚ®–´Qý‰>€Ö=ü§º>þš-Gý¼ìÉ~„Ö1­­ëõbë%´^Æ´^FÜ;¨ê:UàØú)¦õSĽOZ¿Bëט֯¡{Wlëùz|M'V[¯cZ¯åÖÕÚ ­‹CŠñÑú g|²u€3­·,oùu­Ã˜ßÅŒùÝ1bÔùÖocëƒ8øÉÖδ¾N­Ðú¨<ßÀò‡ËvQ­£nó²~¿ô­ïÔfZ囹uo¿u»øo­5ýªkGë}úÒÅXÓäá?õ}«Keú­õûÁÿò1ä?$ò…QýÞ8!Ÿ¤6!­òíÝ÷º§ûÁÿò_1ä¿DòEÖ¸CÉë$'­3–Wý°9±Œð ÈW1ä+qØ8«X˯ óp†üpZ݉ý`„߀ü-†üM ß²O Öò:ÕÞò7™üPªxb?ýüvl}Xúx’¼‡ò…Ó,ù®ÙÌáܘï7úNì#üÈ¿Æ ‘Oòãb£‡Sò«A×|b?áŸ@þ3†ü§D¾$2äû¾lçÈçJ ŸÃ½ƒ»ØÆx›í×óä»E‘9<’<IÞÉŸO9sÉ(õp޼&©t|yOw àH>f†}“gXåzõ%ŸÃÖ†‡³–W’åÇvWŽ­ïÊòå*çmv' Š!zšüDíá‘ä¯@þCþÊ“Oû“Ž2J¾M-38ÄËùx¾?(öÄ~0ÂÁ×íb\å®Ç|6¼*ŒfFE¸ÎùÌ c~” vg?Z?ÆfÇ­ì*mªXò…†°ð¸ E•…UŽ®òøäßbÈ¿ äÓþˆQJ>íOÎæp:æÛ¸ ‰ûF8øºcŒ«<Ê®2Õ¬«ìäóŽ´Î ›Dš¤°üÈ_bÈ_d?¯‹”'G÷x87l2a’JÆS+»„äc¼Íñ*ºÊµãgØvŽòýò6&“VFx ÙD“Œ”¯¥Ô±lžŒ'Öx87lz™ð‰ý`„¿ù÷òïò›æ,ùÜÁ«Â<œKÀ¥Õ«ßàë¾c\å·ì* ²~>+àu%Î -øy=VIvÈÖ«˜¸ÚÈQå ú ä­ƒW>{8;l¤¨rTo+pÔUŒŸ¯ÞäðÀhÖÏ«Ž™õpÎò…´ÜW|äw1äw²åsÇZ¾HÔ¸éá‘–‡$´ŠÉa«À¢Sί˜:Ó¤õ8òH….1™Ôå(¥SvÝÆZ «F—chØÒ°™+ôû5fØ\w¢·ÑY° óÆXȤ®¡a£¤Lj<¸±;Wg$cùëQ¬c×çM‘¦ùÎÆ6RH ÷~_w‹q•7yõ Ö*3_„äá\TÙŸºrb?xÀè÷&fØ4»À˜g³N7KÜM`Ø+Ͱc%MwÏ£õ{Œåï²å»3Iùu+¥÷M(1R22Z>…ÖÓòi`†Õ*ãcxÓž‡Ç-:¥°©”ÆìI¥E'~‰;sÒÀTÞ“êæb~õ ý`„àMcÆ|˜a 7Ãv2 Ã& Œye„a£ ›=ßÇ߆3Â;¾¢Êùa#E•pºVWE;’?Ä?XòÝ!1ÀYòÒ˜×0æ!8Icb›4Ûèœ6ÊdfçÈKÞÞíÒ:>ZW1ÞF¼J°8V zxܺw¡b¼ x£ØXpj¤‡s–·Rl3ÎÐÕÇŽäc¼ x­3~ÙÀ˜W¡ÀLŠ*Sˆ*¸ ãmTÀÛ(60ëNÞ+¤=œ‹møÀ¬ÿ`„ƒ»P1ÞF䳌%o4'*àm†W}ŸØF8¸ ãmTÀÛ(%ÏÆ#A<<.žÏÀ]d1Þ&½Í¸ØÈlëX´Y0¶‘àÞ3xⲘ6Û=MÞfVJ³ÝßÈC¿g1Ã&»=M>÷/Pòð8ò9äqyL˜ ­oy¯çöð¸6‡eÞ¸µÊt]hxuˆ‡³9¬$cxà`±ÑŬUº­¼ÐZð–7ÚÀvž ¬U*%LRpÊÖÁµ‹Yâv¯ò ?Ãj¿¡æ^CäS‰ü8A;Xlt1k•.°'•*aÙ¯Q»·?Å6Ø]Ìú¼{LR|l£ œÊäáq[™‚Û¸½hùÔ$ìZ¥59äq.I©\’&æÐqœ¸˜ØÆdòC™; lɈ Ä6ªÆ<¥µ‹ñóî(ymØdÄ´ášÃYQ¨’D¡Ù†‹Q}¸20IñäuV€’Ù•Šç(Ü\Œ@Î}ÉÃ&u–'ï`;Ï}…âù\ŠçÇÅ÷ ä¿cÈÈ^{åÞ]|‡ÈKÛ÷ tì¿»˜í{WÉc>gص¶ö¤\`û>‘´Ä l¬¸È×1äkYÑjrv}>Q~±à¬W’ {)òËú½^ÿ×añÿo¿%‹ÿë€ø¿òµ$þ¯âÿzAü_‡ÅÿÞNÈÖÂÎÀ9òY*ÏÒIÉI½PðR‡ ^„vZðR ^Ä1ï%+u à¥^(x©Ã/‚å§/u àEóZ ^ê…‚—:\ðÂ’Ç/u àE"?)x©…‚—Íÿ‰!ÿ#Z^'œåÓ¶KR¨8G¾ƼßXéêeê…j:\­#X~Z­SªuÄIÊWëÔjz¡Z§WëÈäS<ªÖÈO«uê@µN½P­S‡«uxòHÅ]ªuDò¹È£jz¡Z§Wë†ü^$¯­bCb›%þØ„ýßÈC@¾‹‰çwåŸ&©]ù'?ßU*Õ uRu¸NêIòó:©¿¿ùk ù«8l¦uRu NJ\úÈ…¨×IÕ uRu¸NJJ'uRu NJN”ŽÎjkû˜¥½¼ô‘OZ§–7…ƒYfZúH¤¥X«ÜÃ,³™¤öÕƒám3”|/:õpvõ@²¼-G}ˆñó‡M`Ødšs•Ú8Ú:;l¤I Ò¬b™¼vš_úа¹p,:¥V²<„F‡3?Ç?‹ÞÆXÍ-´fk›ÀªÀÙIJK“Ôè¬àë1®òp•³\³Ë}©†Wðx8G>uyaÐcÆüQŽmTška¡U“Ö9?/­hX=8BúŒY=8nåx~RRZJJåu›BZ·™–”Ö %¥u¸¤”%KJë@Ié³#„…ǘ¨ò(G•jxñ6y/„÷pv¹ÏHË}fR‘Z/ÔÃÖázXiØh6!õ°¢«L¤4ÕÃÖ õ°u¸Vʤ&eu Vó™âzØz¡¶×à !ñ´¶ÔÃÊj™´¡õ°àëÊWYÊ®Rg9ãçm÷Ž;X`/®rœØ&å´õB1o.æ·2SǺÊY1¯˜i)0›óÖ Å¼u¸˜Wr•“bÞ:PÌ+Z^ÚñB©ò¸2& ,O¢åqìú|žã»E<œ ̤¨dZ%,ó–1«Äåg ,4›Z ÉHù ŒŒ~¾wQÆx›ò*»JeXËgJA]^C®2—\å¸rrwqŽñ6çMÀUr[™mTirè÷s(É¥å>И! =Çä°g)‡íŸXÞUê âùóîoäaŠ<Ç̰ç‹Ïk­¸1¯M{RçK 0K¤x–:ϰ;pŽÙ\8ß–çp».ÒD“Öã,ÿ ùwL<ÿ-ÇóÓsêÀ¹¢·ÑB‹Ï=¨Î=¨ÃçHÃ&Ól22?÷@ža%Ë£sê…sêð¹’Ÿ7šMFæçÈ~^R:¡sê…sêð¹bîXËÏÏ=ø‹åቫbØ* =ÈyáÄü܃?¿ÀzÝ%f¹ïr”ÓÀɹuàÜyØÒ°™ ¬]b.gY²âR. Ô݉jçÈ;Áò Ü®0h¯1cþ*¯Om¨‡6È»RTém€ÅÆkÌZåUÈéÜZn’ÊÛÉæpvéÃHKfræC½pâD>qBŠ*­cE¡ó'äÕi¡Õwìˆ]c6Ô®e@WéÛ­Íæp6—ây°ü ¦È[Ì { ¬Ï b¡ùqâ°ÑÒ°E§hý'†üLÞ¥‚å3_÷#“ïHò»í“Ó6êÿOÚ•¦§®#Ñ­°¸­É¶~B&H€Ä! ×oÿ i¸$TƒƒøÓ_úásu\’J¥š¼ÐëãWîõÁêyÒé„z}°pÇ]À¯z}ü.ôúø•{}0’{}ü ½>x/±å¼Äq¯ß…^¿r¯ö2¢+ÚõqÝë㎔9ä*']½ )+t‚\Úëƒ_óš[óq¯ß…^¿r¯޼¥¬JÜëƒOA·\ zÜëãw¡×ǯÜëƒ]6T :îõÁ.î&uÝëãw¡×ǯÜëƒMœ É£^~å^y­,“}Õë㎀šu¡s´´MÔëãWèõq‡£UƒºÐ9ÚFo%§SEçÏ_÷ú`És7©ë^¿ ½>~å^ì²!MbÔëã™u¡s´~ÈWI>éõÁ®yÏ,›ë^¿ ½>~å^,yÍ¿îõqÇ5°uQåh›jÍû*£Ž¿B¯Þ¶ábRW½>~z}üʽ>n$Ÿöú¸‡<Ì{•³lªóÍäÓ^w¯aÞëœeS ‡TM…uLau iZµt T\â$JÕpÊÔ9‡T-R^‘y•q ¬…CJFòý3m³æë-‡-)“ØMijŸÂ)ò\y†òºu£çkAÏ7 µæíw)œ'ˆì7·’G ©î!-#|NÇ ÿ(/+2&¥­B£“ä¹64¤‚$1Ÿ“cæŸn%ºiÝCBØ>'î…t\¥™R£ënZwx'—ØÉ+C%Nhç+“ÂÉ ËÕB<ÎC2°ÏÉ%öüš' ]a«P¡æ?$/qÍy‰ë¨ÝïBû»_¹ýÝMäqû»{ÈCª’ÏÉtò­@Þ’­•öN¥p’<ç1 íï¾€üWù¯ÉãÞ}÷‡Z!ŸSjäOü†­I=z÷±~®-Òuï¾ß…Þ}¿rï>®¿­ÉL§´wßœ‡ë WÇ亅rÜAn‚÷Oñä:¡ƒ\ä;®ƒ\'të:Èur9Š|ÒA®:Èqä£rÐA®[è ×ÉäÉÇä:¡ƒG>ê × 亅rÜAŽ!wë„r,ùàâî¸rÿ€ü¿òÿXòq+°NhÆ‘Zu\+°yt¾!U'7¤"ɯ®ÚetBC*šüU»ŒNhHÕ-4¤êä†T·’ORÝCþ äÏ9äÏùš–üuC*–|ˆŒtBCªn¡!U'7¤º‘|ÚêòCoŸn¡³P'wbô|ÜY¨: 1äãðNè,Ô-têäÎB ù¸³P'tº‡<(êmŽžßîÒ6ÛÃ]vèíÓ-têäÎB7’O; ÝCþÈÿäÿa—MÜY¨: q‡TÔY¨ã: ýùßò¿ü†µŽÒ6½}ÐÔ&…ç­ùØ´»“xÇ›Äqg¡Nè,ÄšÄ%g_uê: urg!ΪŒ: uBg!ÞªôœU =¾€üWù/Þª¬§6¬íÍB“ÂI«ÒqV¥‹u m‘:¹-G>j‹Ô m‘xòš#·EêÚ"ur[$Ž|Ô©Ú"±ä·l®Ú"u m‘:¹-£mâ¶HЉ×6†Ó6qc¢n¡-R'·E¢©«¶HЉ%¯jÚÐ MØe£¹öªiC·Ð´¡“›6p‡TÔ´¡š6ðËÆrË&nÚÐ-4mèä¦ Ü!å¨k nÚÀJ¾ä®WMº…¦ Ü´ ezO©Ê´ios¶ût }:¹ï·aC>é{Àù*£¾Ó÷ †ÑëòõZ¸ÃR¶ .5âï°œavUjÔ-”ur©G>*5ê„R#ÖÝg˜ òu©Q·PjÔÉ¥FÜ!•uB©Kž‹Ã^—u ¥F\jÄI>*5ê„R#VÛ4ŒI|]jÔ-”ur©kWyTjÄÚóž9¤®Kº…R£N.5b7lí©6-5âõ<—{pUjÔ-”ur©»a5yIKXm£9ÃìªÔ¨[(5êäR#Î$V”IŒKXÉ+FÛ\—u ¥F\jty\jty˜÷&gÙ4çÉãR£;È{˜wŸ³lüš×ó ©mP©«çCµN'Tët Õ:\­Ã’/+ò2’Tëðä¹C*¼ÀùîsÌ/˜5uÂâ² ^ÛpÁ…«²‹n¡ì¢“Ë.ÉÇ• PvÁJž»€_W.t • \¹À‘’ÿ;¡r%Ï¢äpóú/±?JÞC]Ót^ò\ù*½[HAïätNòd§ óN§šs:ÅYÜÝBw'gq³ä-é1K³¸yòÜeÂ÷ÿ[¯Ÿãèÿãôüë'Oàǯãå/P7ÕÔQêI§?„E ðóïgòÔðMþÏOM /¡ün ÝNày;~OŠ ¯LÂ)òc—TDþ¡(aÕíç1‡¿n'p‚¼›šï!òÃù•Â1ù! MJ¾ÿ‡gøÑÎäû¿n'pjÙL_!Gä)8!ùÞŽ Éou—°æËœ5_Þ·æËûÖ¼ò6‡¼eÉ•ýóy î>+_5M>Üaí#Ì!ÿ(Ó´òT%À)É·H‚¼†„Xû äŸsÈ?KäÉ;(x8IžY6¢ÿöÈ¿äÈÛ†!¯ëN’¯òà§µ¯@þ5‡ü«´æ-³æÁwp’¼bÖ|€oü6‡üV _;FUU §È7œä!¯Ò¾ù·òoù’9a+()8EÞ3kÞ@áƒÝù}ù½@Þ;†¼³)œ$oò È€ü!‡üA ß0‡TÝ2N’×̲`¢ÛÆæØ6ö(­yŽ<”Û£´æƶïýò9ä?Xó`XŒ¶wÀ)òŽÕóo|›C¾Í"oSømä~ò§ò'Á0ã©~3¤pÒ¶áT¥›¯À 3—c˜¹õí&qoœøNI~ôÛ`òÁ$v ¿É!¿È׌mc 4‰«2ÄãX•.Ǫt’ä«Ry•ÂIÉkæÈ?ù§òO’äw©R8)ùŠQ•aÙ€IìrLb÷Ì“¯K޼U)œ”¼c$ÚÆIìrLb÷"‘wÜš¯R8)yæ2¾ØèÀ$v9&±{åõüt#×¼Iá¤ä-#y";0‰]ŽIì¶’ä-·æ›~Ó ™f.Ç0s¼öœ=¯SøMkR‘f.Ç0sÇÛÉ™•)ü¦e†™ÃÌåfîC o8mÎ÷,U ’_¥ËñUºÏÛÉÇËFòUǬypuº ÿ“CþG _“Úæaè‹”Â1ùÖÑê²ùò¿9ä¥5Ïf .#§$okÎ<€esòçògÁ?Eñ ðÏ|8õŠã]“z«9ÿq€·0z›3zËŠÎèðÔ òõÇùñ¥KáhaGÏs²?¶Åï4:üuË+ˆà¨ÆKõîs÷ɧÇù·Í#S[‹þÝU–—ÑŸžfËpó´Í¿ü=þ2×>l^¾sà¿ÿÍÿø¿xð.þ:Û'›×Ï ø~¾lö¯ðã|‘ÜŸsà;€ïràoËï¾Ïƒä9’ÿ˜ýN›uÈäÿ‚yÿÊ™÷õK´L=’^ràoϘ¸ç^Ç<mñ¹ßÌ—§ð¶Oõ»æòÞ?ðÔnÙ6"Ô®›o¡»eÛÁ‡¢“ÂiÛh<^ŠG—Êñ¿ÏhÚÝg4íx£i¬¬\0šÉ¿€ä_þ*yS¥pòôåt 2­üV“MóL¶Ý²É†F7…¯£w_0Ù¨)©š.Yf»eËŒàX7*…K–Ù.Ç2JXRx–e¶[¶ÌðèC2@ — °÷~k}~»LØÊïŸÅ×óøÔçãg”¹wè ¬_hAÌ÷S¬ÏA öÅúÔ•…3:B~è/žÁS…ü0¤¬è¡PÃñ¡8nÞ‹Í~êd¶'žÙP6fŸŽƒÍ!¾/zKh„9ø^€ŠÍE~Ø c©SúïN?`ø{ò”­Ü??`ø‡ àc±ù¤9j;‹Ý†N˜R(­ò0¶WÔ¾á”RB¾hl€‹Ý¤/vÇœÑü5st.UþßÅ]¶¥.÷ýBuc"áí ’ïm¸ý‘ÌuWÜih¤®S8a£^È'Vâ°Eçûb4zC‰é'u‰ãî™ôsç’ž¬Ž~ùz_1×Â9á.‚§¶þ:áÌŠ|÷þb8Ã_o'_ÕsatGäÝô½Yb~ôœ›ÁÓÛëÉ—ÉòO–öÉï#ÿy;ùxÙ|²äÿ´l>ï[6ŸÅñ™ÒIC²‡_‘´4l¬?> j÷Xwô ®Öޤ¿*;? ¦Jo'ߨi"ÄcŒé·‡Ð{'‚#*ڌ鲩%ÚslæT¢~,+ŽÓErçñ:ÙçǽpW>Îð#wMß]…Ôq²>éi(Ýd ¢w÷•Õ~®IýZ=ZÑ œ ©¢¿ÉUávð±g\Ðôåâê”zü-¾^éч‹þ(˜äý ÆÀ…CàŸëm±QÌ»c6®ô èŽNèíWÔý¶„%ÁÑ%ºWcš¸÷úMÏU 1<áX˜©énøQ4s…Fç¿êA¸ªªN8Ã#ïïðþv+ã,‚cO XƒÇ=†ÑSc'CÜË&0ÀùwHÞÿIÀ‡û|ÈXÁ¾ª xjòA¬`§8p=©pÔõ%0ÀùŒH>üEÀ»ûTÄ.CE¨jN„ŠàXÀjò–âìæ¸ž ¸?HÇ €EŽÈ稈ݟTÄûÏ]ð[tðìOŽà„ãZÄ 6ó $†£ì›IŸy8ߨY0ÀEÿ°+xg {ü‡_Áƒ,(gøpG«<õy÷½§W°‚fu1<piÇ} G ¸Ñݨ·pçÀT4:Ùep~jŸ€÷†n ¸¬™ìæÆ©1 XMû'm^u%!€“Ó°â$à?¼?ës³.÷öÐÈ1­¬.¬Ÿ³Ç#8–c5—aÑ©j®Œ‹á©KS©)ºf.6‰ài[žáRèV8 ñzÆ£¯ mî“І•6•^Ñ‹KWŽíUÓÐ*çÆE<ýÌøß$Fßzä%dÇ‚%TàÞKh.“‹àHBƒACK¨v­¡Æ0kÈ <íŽ4”hxFBÊãÑ =Ý'¡'~ ik×Ð'¡qqkž~0ýo £? z$t‰z¢ÕaÀT pB8Ú?а'†ö¦_Rò#xÚ aè|? 8ý\{¯ÁgwK<ú³ ¡VBe}ÑC/éê°AB?ì2~ \¢£àÈ(n¼eÖМ¨ÁÓO¿‘7Kxxscðè?‚„~á)®´‹®™£‹<í«PèÊ‘Kp ;âÑqÊQåV´‚ò †§r¬¦Óu@DW¥pRŽutâÆ%tÉÁç¸õŽu[ÑwÒRƒEÁÑR©Æþ˜¼.µŽ²,VT›µ"Rcaô…ÓþV )o‚S ™[%'ôZ”ÐfYB;ABaô…Óž–ÐP€ÍHHU5‚c USàKÈ•ÃøÎC­¡^@e¥uð˜Ë$ÒnwCþÁ£/œö7K¨QÁ©5Äì²Ú § ÃE =-Kè]P}á´ç$dKn YƒàÔiOå8Ö‚ÂpBB sÚ—‚[t{»\<¢¥JG_8í ©Š±‡Œ ³ø#Hˆs ØÆb8–U´„ ƒAO»µ %Éû¦UáÑN{sãi¯*­0ü»Ûﱪ1­´ÒU+R…›«ãÚPÇõ DZ¿ê3È·A£û£ Çõ%Ñ•„¡ýwðióŽO{í2“° ´޽5³†œVÎ5IÒUå1<í¡ÙëÊÑ;…ò€¯FßÜ*ºAA•Nl?ãiU†`Ë®,Ý¢èNJhÜ~Ÿ„PðèL÷Yt‚èJZt½RÀpbû1q~ÃZ Ç¢«ý¢nxÚ0hèÜ2ÝäZÞ#þøwÑ•ñEýVÑ©²ÑþçU7X5†ß°êò¼è¾Ñ…ÑŸrD÷Ì‹ÎVŒ§×•Á)‹‚±JkWc8ÝØÔž]äƒxÚ驨üT[êOÈXö¾yþ³èÂèm¯*kÆ±à™“P70q¾9ñúÝ=cÎ~Û¬DîÕθOú͎磬Ý.¿": +È&p$cbtÒœ¿ÃQ®ÉÔY–ÀÙ¨‰xúÕ€+ o•ÐÀ¾Æp,¡ª¬ Y‹áHBº´‹8û¡3QBO?MKè$m“†Ö0:œkNëêš¶¦Hè´æ%Äï2¦ø‰ÛeÿÚ¿4Á+b—Íëü´Í%zbwÙ b$d<†c=Äùp# ü´Í‘À«­ ¡sŽ„Lƒàx Ò6%DÀñÒjQB?s$ðêÌKh½/žvLŸ„)çm=¦ü\UɆKák?Ò¶Ó'ˆx1|D<‚㌇ðÔúµxúeê}'A$…ŒC§ À×ëWâMˆ¼¼Á}rÓfxš7ÙObe¨¤Ž~q@ó¢~õÔ°ÜLÞ}øŠCïž–nLK”&ÊÕ “¿®lë¬/ÇÌOòïÖ5è࿾óðÙ+’Ðr¥¶˜üµy>ä|6SRÔ:}÷þV%Þ:ﺂòÌ_YšwíjŸÂ‰yo”¦–öPÿ]a8š÷zª Äó®âŒHfÞ•)§e“Î{©}S#xRÑÒë=u©JüÁ&¿I%T_Ò“ ×U^Y ¿VP…VÕ”ˆ±M0á^5è¤[çÝ™8Óò2:ÞÖ™2¾ñŒVÁñô^bÇ»t¿—!ަWO­ñŒÖÇ££é­J;•"¥3ZCÇì޶µVSš5šÑÊy,ºtzÔt^®ÓjHñ‹D—>eëñV'&ëÃíóÞ¨²NáļëéV‡ç½šöÀÌ{?íºVô¼çoëºjÈy·Ð +‚£y·ÕïÅóîÀÔp4ïC‚1ïcÚ~w´­]c=5ïZk‡G?¤óÞLñøõ˜ÖÊÍûùæyWÞ†ÌÝ3èùó_õ¼-Á÷p¼:”­y¾WŽW‡®­'õ¼ ¹F©&¦!ÏwëkLŸïº±äùîKH¸ p¤†CŽ8߇)…+@DÔøa…ÍyJÞ@ÂÝú_†žwfpâ//Šíw^‚GÓë´¦õ|ÿV5‚c=ïÆ¾Íh¿÷7këí÷zúPÞïZ#Fp4½®¼lX¤çµÇ¢K'N«ºÔÔ~/MTíðéSýI¦Çýþßïý?}ó¼Ûpo81ïÚknÞ+Çó^Ž_m&ô¼ªñèxÞ›éÖŒÏw[)Çz¾œòÒä!g¦Ap|¾»©ÞÍ{pãwß ä»fÚ°è|w•Çï¾~Ožª¦o ®G87ïíÍónúË„NáxÞû£ÐÓón‚èZvÞ•5Ô¼OI±žÎ{Óô¼—eÈìlÙy×—qºß•ó“GóÞ¿£&罄ʶžÚuÕœM†æÝ…È'ƒ]Ùñ|ߴ¼åèy8&¾Þ|ýùgCžØ¾O_6$ ý(>öÅžï®™bëØà³pÊ8Ö jŒìãó½7V ‚绢ïïÞ5Áñý]]’¡ÓCÊØ“Gç{¿h§òà >æeóx»ž7úøúqýçy‡oR8å·™Rå‘"Ð &çÝš’´ëM‹áÈoã•7̼£ãy7SHüõüÕŽçýÒ5#wSyÈ–x\³~Ý_ÓG¿Mj7h)øOç»1NLo3½;a©ƒºxÎ÷FÓ÷8Ôˆà©Kr˜ úþî*X´OüùÞo8ò§”™šEp¬ç/ݰGÆÃý´æ7¬ž.¡ivGoñ·0À¿vèÇ2öõ“p¾?ŸnŸ÷ZCâ:À‰û»ŸÞÐà`Û8á·™üuXƒ—p¾8ÚÖÞNÕÛxÞkH p´­Moÿ‘ö|¯©ñ»£yow¾‡C*‚§ê\¹K-ºØ×sGÌ~J_q¸³ óþ|âç}—á§µ ¸>ŽÊã‡+43ï%èºÇ~Åøm† ‚£yo”¦öûX&cíwwI,Có^gc€£y7®¢íy«<:¾Ç9mé{œöøÝ·;ä·ϸõn+Ì{†Ÿ¶VU“ =o¬aîq *w{~ÞMCÏ»…ÎPéùþ„ÖÔ¼×Ç÷÷fò¡ywµÅp4ïÖxZÏÛر~Z­Ý%qißÝaÑ¥ó®ýh”®w‚Ÿöýýöy×ð1Ð'潪˜ó¾TÁñù®ªŠ>ß«P§üÎÞßûýjH=ß„\æÇûÝ—´ß¦ ¡Ç÷÷)ç‹òÏC@-‚§êÜëÚÐþy5ôþÞ¦O™ñS¤ë÷waÞ2îq¡¾àä¼7L\¦ÖŽçÝL®Nì·¾Ëûm.Ëûç8ZœðÛø†™wƒáØ??OŽ´ÅXGkÓÔ¤Þô{ÿIý6ÍTì·‹ö™y?dÌ»õ`×~»®1Ìù±ƒ0Çé Šlü¼÷—Mz¿{çû÷~ËL· ì¯Ó8ðóîx=µ <½E{ ë ƒßÂà?lƒ £¯¼_2â àÔù®‡ àÄ5öÓªáßEpì¯kh{~°ukOç½7'£ÛóÐŽÏ÷†Ùïà ÃSŽÖ膴ç{êBðà º—‘õñE˜÷}μ‡wŸáëãþÏ~›&Ìûž÷×]veði ?¢°›%ómJSÏMå"8^¾¢ý6Æ„5¿çý6—Ûö×…€Z€c¿¶5é¯sK§ÃëâyŸ›°lþùмàëãá¯ó^Ö%‚ZA7t6 çEp­µš˜÷Ñfñèø¶×X2kÊ"àŽ´‚Rí¯ëï2Á ­PV¤¿®ôp?ó`òQw(y \B?2ò.ªPNÿ!æ]PqØqâ5‚ãm]2~ªÈ?ø¼‹~ÅäÛ£#»®—œ£Ï÷‚J|Þ…iŒ%õ|¿‘k Fá¼KIz¾›B™~ø@9cõóúCÈ»h3ü´Z…ô5ï·1ž±ëB$´åý´õeÍã{œƒ¼åã°Ö7´=ß4ÃѼ{;)j|‡ÀDp<ï—Ì" g\ËúiU@Óñ÷Ê”‚£â¨jt÷­[ÁO{ʈËôJ°NáëÓ q™ Á)«_yú|wªÁpœ¦5¹>ˆîià5:±q™!mƒÌ«T¥M{’â2Ó!•.UV&Ïw«+2߯(¨S<ñîýÞö5íú„÷àxùÎɯ«á2ò-èys‰„:ì£nÛóss¡³Ò7«ç‡d.úgCÉÊ7¯ç«‹ƒgÊ:ß§Í*Æ??¤ýaxªÎmí+ÚOëK4q›Ãwz¸1§tý-èùŸ ÿ¼/Ø8žwsÉ%&v2TÒülù¸ÌÅGÏ÷Cþ³åïïšôÛL'<‚ãûût&,¶ÚÖŽô|ÕL_"æ]còè|÷s![zØc‘GJÅŽËfý#øç2îq¶†8ìàŸ¯Æ® >«Á??'Àc ^áÑqzÅ¥KÚïUÈúøaýóÊÚ’öוÁ_÷Ãûç½.k&ߦ!à(7§e>¢xA~æÝÆÉúGðÏÿ—c×Yˆˆ|ýßßÏwïþŸp¾+²nb°màŒû?ß%ëeÆNÁ±W¯Ñt½ŒÑ0óŸp¾×J1÷w‡GÇç{Ϟη©üî(ïbî±þåÛTq±简Ját9ÔŠ«€Bp²jÅU@!8Yµâ* œ,‡ZqPN–C­¸ (_¿&åP6\†²˜¥ùÔ9Àé²¥W©„àdÙÒŠ«TBpªl‰¾g›Ðæ(Àɲ¥W©„àdÙÒŠ«TBð¤A|a½½ªü‘燮(JátyÑŠ«(Âpª¼hÅU!8Y^´â*Šœ,/ZqEN–­pçøÂn½¾Xtóühpõœ.Zq•?N•­¸ÊÇFk邾¡òÁÉ2 WùƒàdÐ 7ž/lUkôî‹u°b*†Så+®bÁÉòW1€àdùÀŠ«@p²|`´NÞ‘e†E·˜ÿŸ1?M §ÓüW\f?†Siþ+.³ÁÉ4ÿ—ÙàdšÿŠËìGp2Í…?›WXºô|1Oÿvû 1)œNÇ_qøN¥ã¯¸ |'ÓñW\>‚“éø+.ÁÉtü~Hà½qÒ¸¾˜Oûùs•ÑΞ?Ú­¸Ly §ÒæW\¦<‚“ió+.SÁÉ´ù—)àdÚü8?Oéü4 ÝbÞûÂýô¸ÿœNo_qíN¦·¯¸Œv'ÓÛW\F;‚“éí+.£ÁÉôö—ÑŽß=Mpj¨ïýf‚ÓiÒ+.3é4é—àdšôŠËŒFp2MzÅeF#8™&=V¦%ù. m|1ÏùÖù1Wßçæï?ÓW_É f §Ò™W\3‚“éÌ+.ƒÁÉtæ—ÁŒàd:ó 6¼0¶Äリ|óý§†žÖ?{Þ>¸Ü¡ÉLc §ÒŽWL¦±Cp2íxÅe#8™v¼â2œL;^ᯎÆ…Þ‡_Ì^8þ[ÿN§¯¸Œ`'ÓƒW\F0‚“éÁ+.#Á©ôàfÅe#8™¼â2‚ü¿5*ÿøés?‹FÞ?ø3!@prÿÔLü\ŒœxJ3þkèPà„~#ów†‰ÓèÝ ûº4Š>*°ßç¿]¶ßó~Ó¤ðõ³°6ûâ…þäóêò-Ç—¢x¹úáAÃ÷ÂgðÔ!g?Šßz|á¾ÿ, b0ü—¤ŸÈrËIƒ¨ÂaøVx“uñª™/ÀÌYéŸü‡<ù6ŸìÇæÂñ5Ú×ýMc1|-~á—ç¨*†£ª<ù’ÛÀÑ9̱W>ÞÀÆŒàÂ7v[xüA£0Y¯×ß² 1Þ ‚h·0Èöσ„o…Ñž/OQÿÖäªÂßÛYa8ýí«Y¨ÿÛÍøÔ}œ¼™lI<×ôM€¿|£J¯F_ ‚ãºÊŸ·Ž—1tÉÝp Gp¤Ð*©–9ÓwÙ<Õ=CûQªuÊ”D†àéžþRqYCÛë·6XtÉŽ}(\m¨Ž;ETµ6ÀKzÞ{UÑóåøÏû¥v ŸÝZáщ‹JIÏ{½vŽç½Vž.µ4á{–Gó^] úñ¼›“Oæ½êÒ€“˜wFGÓ Æ9£xô…éUÌôš©ëþÀ¶Rþ÷éU%Ø@ަWÛ’Ê0|Rñèhz+禒֛Nìºw<°ú“€5'`MïŸ!|…à7ìŸ(CàHÀª&[‰¥“ “Ç.°Æ0-%uhÒ>Ã)[óëEï6Å'ck¨f²âúl>z€?¯M³bÊBÙmøcq÷Ê^Nwp‡:…&ÀÓÑû±í¥"ùUý(Œ>ù¹5=4[=rï> Oè®GÿäFD?ŠÎm°ä«N¼{cè¾ñèýÄ1߷חÔhêEŸÂ“ÑsWMygFWfª^rH(Mh¶úJ>¼{}y÷…yçF·“1æÐ¾l v àÄèU]ÿeÞ9É_.¾îI>äå}r£æ}ó—y¯™U§§3Ý}âÑU Çóî.u±Kó^³_‰žÞ‰®€[Àñèæòaõ¥ygGŸà}¾ ’?ò£»òOóÎŒ®/%÷÷»Já„ä+µ¸ß·ë¢U̼›©ÓŒûÆ6¼Epâ+Äw º´O pt+´«.Fx›¬æ ÷ÂmqÏ¿â}#_±P°­÷ì+†Ïßîñ–1Žn´…¾|øþúò{áÞùYÔÓw[ˆW„°c€³8©j=‚£«n1}PšEXCþóοâz[|)ÆùqñJ·ÐPõ p‰TŒ Umñ™ŽàÛ|]í2¥¦“e-øÖ{ž<ÝlrŒv[çÉcƒ$|ÅkO“ìÅ˧¨Ö‚'q}ÈWnE‡ráÓ4ΓÇäu Ç’ _ˆŠä4×^ oiÉk(8ßýaÙ¼òäw[Vò`ˆ Ëf'.›†Y6µFpžü“·)œX6õņ–Íû$yf͇¯|8OþŒÉ»NHÞO•ÞdmùZµe\­Måœ#W³ml…àë$û'm£YUéUwˆ¸™|ÿÏZ×X'Õþ/Ú†%O~GkÊÍAð?’†ÖµGpuRõ'mÃ’·Ì!å®´Í­’×¥u®_òKÚ†%¯M>Äývû É—WÚæBë¤ËíiAÛðˆ!ïŒAð$Ò"\c4%.h›ß5Õv&ø$?ÒxoÕÄ=s.püµÆÊR·Áä<éö5¶ó4QaÃeòMHŽN—‚cŽÊÓ­óhtÌÑÖ°†ž÷ů¢ž\÷Ó]èYXCÇÍ5]UR_3ï 5‚ï±÷nÎNù~ÚëãøÔ»š~X)Žþ²þ.‹â­ˆ°SuËûá±Øž **àïçÇëµ)ª±mùû÷¿â󋃿ùwŽü»@þ#¿*üXù+“È'‹Hþå{&ÿòÍùäÉœüäŸÉœ ïÆÄl™|ä;Ž|'ïò£‚’Éw>ÏOŸ™W`^àxqõ««ZzE€Só3žˆ¯xÜùG~'ßÝG~'ìŒI+ˆä÷@~Ï‘ß ä÷¶v‹ÛàÔ⪗ÉùO޼°­ž)ùOaÙÔ‹ËfÐÇ翜gö483ÛÚÕ8‹§Á™!ߌ‘ØÅÓàü—ÓàÌž4ùlÝ_NšüÀÞüå48ÿå48³§'ù©ÅöâiÀI¾C´‹ õÌ+ÔÕüC~Ðuç¿hÚ8ñî—Ó`IÓ²ïîÌ_4íù/šöÌjÚ{ÈïòuõM{þ‹¦=³š–%_º¿hZŽ|5æ&/jÚó_4í™Õ´÷HþS¼µØï›õÂ~~ج¹ý>Á)M;:€—öû§4mãþ`ýÍäYëïM ß ä+÷ë%ïlý‡3îùð‡3îùÀqœ².tý‡3n‚O=ÿKŸZo¥ èw:(« yYU2äNoª¿¨Ê[É÷B™s†ý>“µ G~Ï’ØÿAÛÜN¾™3P¾7›âó•J© äÇ>_Iò'Ö¼¯— À‰5?5Ú×üæ È?qäŸòO÷‘º‹|¿e.äå Ë8A¾©›?lX†¼-¦¸Á’Q:“RŽü;O~JdX2JyòÐóß3yùbÈ‘×× þpHݳlúcb&/RùN ÿÿJÇ“ŸŠä_?gò¯œmóúÌ“8µl–7,À©e£ü¬Ê yYÏ3äN‘ãEKzž•|S6°*gò¢UÉ‘—$oͬJ~Í/;D?öÅÏ”´õÁI~üáÇpö÷ùûý÷Y†Svÿ‹Kr‚“—Pý‡ý>“÷;G¾ãÉWFýa¿³ä/6­@~HtyÚ¾}Î)/Ã_i8£?ˆ~?®~ àÿN?—¿’xÑ¿Çú!À÷0ú>gô½0º)G?À臜ÑïõXC=Ù<ú1gôcÆ»G£ÿÀè?9£ÿHï®ÉÑëbþôéP˜0þ›3ú/?ºkV¨Ñçâࡪâ2úX_qëè'Fï·,-ù¢ÑaÍosÖüvŸ±êÂèïÏóècjý­£œ½PŽ}.´Ú¼ƒäßs$ÿ¾ÍVݦxù˜V݆ýåCXuïŸ:GO )÷ƒm3Ðz‰àc+›Âÿý¯ªüHþ0߀üSù'‰¼bÈÏ¡õÇäWSÑüa†ùòù1™ Š8E~ŒMÉfø'ÿÌ!ÿy;yUÌiƒžIþ äÏ9äÏùš–¼5.…S䛚!ÊjÓù.‡|w3ù¡<Ö¥ð<òÛÃ<úöA>À³Ö<Àó–Íöä9ä7“òÙ<üD·Ë‘üŽ“|á­Ó„)U9]8"¯†Ï€SäÇ.ðÃüÛð×íä<%ß _¾#É«fîÚàùé«Gò‡ üë4þuÊ àHòª24yå¢N‘]Gò‡ ü´žGKöo%àè„õ yç¡Ú4À òjŒÉføÈosÈoyòµ'É7¥žÎ<“üÿÊ!ÿE“2ã«Ññ‚È[]‚apBÛ¨ÂÒÚ¦ÿa†ÃyÊ9aOgAòcÊ –¼©à„=ï’¼‚E«rÖ¼ÖüT5…È÷«i®Ù pŠü =’?ÌðW ÿšCþ•'ïh“¸òn*8¹l4·lf=¯`Ç©œ «„ k© Û Î;0È•°aµµÌ!5£z(—˜ÉçRj',›±L K¾ªæo+8µlŒg–wòï9äßÛ†$?(¢F¥p’<·æ ¬yP*GÛ(AÛ˜š^6½QiS8E¾f– |”d(„¸Œ®s´´Vä²1C7²N™5#ù²8¨ £m´ m¬&OXÝ@»Ã§$響7‡ú™™|Ž¶Ñ‚¶1´Il½…5¯%ó áÖ|’u¡s´´?eˆ6loÏTŽõüP·Aêùá‡êBçhý.¯*’|ÿv)œZóžY6¥‡eêBçh-h­òÕ\2àÔ²ÑÜšŸ;ˆo*PU޶©Xm3”y‘VeU;X´•hÛζ™ß½‚WålØj{3yW¹²Iá™äaÞ«œeSo&_‡/ÿxyn^Ÿã%öœ—x0*ú2b,ø.üF0Ì4£*¡NwãÁÍës¼ÄþI _ÒzÞè¹)h€“äG~>&ü3Î!ÿÌ“Wšñ˜Yp}<ï„õ/@þ%‡ü‹ *évèaeS8E¾âLâ¹Nwãáˆô9'¬ß±’WS:.Ö6¶†Û„ìy]3wX]ÃÄÁésNXÿΓ7º!)WIì…V7ÜšÓÈïü>‡üž_óÆ’&±í)Â)òŠóU‚¦õà)õ9ŽVÏ»¸{›˜¶ç«Âyþp—Ué!.ãsÂ:þ“_6Ê;š¼·&…“VeÍY•ó؃ËËçxÌü—@Þjš|ÔÅ—D¾âÈÃÄ›×çx‰ý‰_ó5¹a ãl©S8eFÛ”àp[÷¦Q;޾f ³–'àýS×.îÆ=ß¶°¾Šà#ù6qÏ€äÑ3|ä÷9ä÷,yׄxÝ …×NWÁé„~˜á È!`ÉWÓ'gùÆ9ðUœ"_)†|ð@þ_ù,yS/qùm¼WN/†|ðY © íBâD+'Nä¯'Z!q‚&•8Ñ ‰íBâD+'NðäCþ*q‚!'N´BâD»8Ñʉ4ù«8l+$N°äC¶'څĉVNœ¸•|’8qù3?ç?KäkZò׉,ù¦fÈ_%N´ ‰­œ8q#ù4qâòÛõ<úvA>À¯Éqêé—¯ £¸¼ŽÉ«‚>aÇføÈïrÈïXòÆiòrU2w÷‘‡#r›sÂnwi›íá® ;$´ )+­œ²r#ù4eåò;0 w9V厷*ëè2F×…m<Rw’UYrV%Øó;0 w9VåN°*§¾¡˜| ßR pÒªôœUé£tv!Y¨•“…òq²P+$ ±’¯4#y°.ÞA×½ç¨Ê÷5o«ÊPÚÆX¢{_K&±æLb ÿärÈÿ°†™¯¥nRCKt“Â)U©<£*ç¶|CÒËèûÉïùCJ«Ú0×@ƒF'$o8{Þ€=¿‡SfŸsHíùCJOmùв©øx`€ä­a®vþôçæ¢;äHþÀKÞT5±lÜÐ?8$È ’Ÿ\Gò‡(¿®]Èîkåì>zÃ^e÷µBv{ tŒžÙ}8"9'ìáÈ«JëÉ;lÝ«Ê&…SÚÆqÚüó¸ rnR‡vÙ”ec¨CÊ9'ìáCÚ°–Û°°æA×rTåᇕüåS‹Hò•Ö`œ~„eSÕ̲©f£´…׿lØvÍfé·éõ¼­aÞ[骙 « ¸Ð‚eÕæf-g˜A)ZÛ˜ \^íö>òß@þ;‡ü7£©5ol ~€S'lɰ8Ñ ºÍ¹€·gAò”UéŠF•ž'ù!¹]H„nåDhfÃÆ‰Ð­ÍnØÝ ‰ÐíB"t+'Bsˆ!Ÿ&Bóö<'ù«Dèv!º•¡Y«Ò“äÓDè{Èù¯ò_ü!%B·B"4w‡¡[!º]H„nåDhVò”‹'Bß!ùïv½ÿëvòŽ6¬÷Š’¼éu(\…N™ž!o Eíç}ýç=ƒ|€c“¸vŽR•µ‡ï@8ét²œÓi^6?pƒþɹ€ÿ„€Úè`G‡TÓïä*…S’çbRÈÿ]÷/GUþã/à^1䫪ôo-mXÃmX¥ß· Éÿ­œüÏššt}¤Éÿì† Éÿ­üß.$ÿ·rò?GÞÑa4ùŸ—¼æ$'ÿ· Éÿ­œüÏ‘·Ô!…“ÿù ²å‚Èqò»üßÊÉÿì²ñ–”|’üÏ.ùû®’ÿÛ…äÿVNþg½Ä$y”üÏ“çÖüUò»üßÊÉÿ¬äkzÙ$Éÿ¼I̅﯒ÿÛ…äÿVNþçÈkE.›4ùŸ5‰kFò×ÉÿíBò+'ÿ³V“Vešü‡ëCƒºÐ9ÚFo¥k ©çÓä–|íù«äÿv!ù¿•“ÿÙeã µaÓäÿ;î°Ô…ÎÑ6ú] _U$ù$ùŸ]óžY6×ÉÿíBò+'ÿ³ä5Cþ:ùŸ]6š[óWÉÿíBò+'ÿsÞEߤÒäÞ¶1œm'ÿ· Éÿ­œü#ù4ùÿò0ïUβ©Î7“O“ÿï ßÀ¼79˦— •8QÛ¦¹oÙ40ïMβi¶7’¯†\bP•Í}˦yor–Ms¾‘|Sè¾Fàyä=Ì»ÏY6ž[6×5#ÑèÕðM™&…Sö¼fNبfÒó|NvŸßÜJ¼ÜCþÈ?æÈ—é·ÑV¡ÑIòŠ#¯¢z™v¡Z§•«un#ªuî!ÿ äŸsÈ?óä•f’…®«uî0‰‡z™v¡Z§•«uXÛ†6‰Ój>q‚»Ã†ô{¸MøœËˆ½ÕÅm ¢þU0‰éàBœ–éá”ñ9‡”ß²Ë&.5 £×Ã'ßÀÍë%×Ö‰Jà6ás.#~w#y\'uù7 ÿ–Cþ'ÕI]»¸+Û¤pŠ<—²ÕIÁUÈçܤüû­äQ‘×=ä!ÃÍç$Èù=¯*£"¯V(òbÉ+.ÇìªÈ«](òjå"/6|O“O‹¼îðxÈ9ñ9)+þ(H^*2¢¯L '7,—W Nf9'>'eÅðkžL uýýÛ(4:éú¨9×G¸µ åu­\^wy\^wyçùœh oò–Lœ¨´w*…“ä¹,îP^Q`ŸDö_7’ǵ÷‡ÌŸ“8áOü†­I=jY™aNØëÚÀn¡6°“k'xÿ_Ø µï¸ÚÀN¨ ìj;¹6!×vBm G>ª ì„ÚÀn¡6°“kòqm`'Ô²äCm`'Ôv µ\Èk;¡6#Õv\màÇ<:_¡ÖÉj$ù벋N¨P£É_•]tB…Z·P¡ÖÉj·’O*Ôî!òçòg‰|MKþºB%м:¡B­[¨Pëä µɧjw†Eûœ³æŸ¹5?äi5„žw½yPCøþùCÐó £*5änÝBy]'—×Qä“òºN(¯c$W¨uBy]·P^×Éåu ù¸¼®Êëî!§Ì6çÚîR•ÛÃ]Úf(pëÊë:¹¼îFòiyÝäw`Yír ³o˜ÅåuP^ÇnØ’3Ì®Ê뺅òºN.¯ã ³¨¼®ÊëxÃÌs†”×}ù¯ò_¼aV;O-Û[V&…“†™ã 3¸u åu\^Ç‘Êë:¡¼Ž'¯9òqy]·P^×Éåuô†½*¯ë„ò:VU*Ϩʫòºn¡¼®“Ëë=—×uBy'yÙÄ×åuÝBy]'—×qä£òºN(¯ãÈGåuP^×-”×urywÂFåuP^Ç’/™ •×Á)sÈ9¤GvÃÆjP¡ÆnXÇmØ« µn¡B­“+ÔÉÇjP¡Æ¯yË­ù¸B­[¨Pëä 5Fòq…Z'T¨±wتfî°WjÝB…Z'W¨1¶MAzp…»ljPë*Ô:¹B&U¡Ö j÷ÿòß9ä¿ùC*ªPë„ 5ö*¹CêªB­[¨Pëä 5Vò”a†+Ôîüœ2_9‡Ô׎¿Ãå¨k`Ù°>…“7)Íݤâz™n¡Z§“«umWëtBµ«*=#ùëjn¡Z§“«u¸6ªÖé„j^ò–“|\­Ó-TëtrµëâöžÚ°iµ+yÎK|]­Ó-Tëtrµ·lC>©Öáî°QµNÇTëüÆÉ9¶ÍG~ÃVô†ígÔÅÇ»\ ˆ®É‘|³æU¥¢T%ΫdU¥2Œª¼Ê«ìò*;9¯ò&ò8¯òòpÊ49‡Ts¾‘<Ϋ¼ƒ¼‡y÷9ËÆ¯ù5¥&vB^%ë· ©‰šØ-¤&vrj"K¾¬ÈC*IMäÉ+޼в¼º…³NÎ1c½^“ä“3VÛhÃh›«³n!Ǭ“sÌÉÇiZcÆJž3̮Ӵº…4­NNÓâÈG™N¦Å¸e2à”ñ9‡”?JV¥¡l›4߆—<çh½Ê·éòm:9߆“<é%Æù6üe¤æ.#qÊJ·²ÒÉ)+,yKÞ¤Ò”žùÇòyWÓäh€Sk¾ö4y © öÈ?ç–È3’w p’<£m4¸÷í É!ÿ"· C^×)œ$_1äÀ·@~›C~+¯³a‹*…Säލ²¼Œþô4Û›§müàïð—Ù Ù¼|äÀ[€·9ð€ÿäÀÏ?çÀ;€wð×ÙÚ¼~fÀ÷ó¥g³Í€gðæø–ß|Ÿ‡w?æ¼ûÇì^Ú|¬sà@þ#‡üHþ+Gòë·þl˜J§3$ÿÜÏöãš™wÐIÏýnü81û2<Õÿ —§¤«ŸáËSx®£§>á©Oö©Ý²=D(Q?ß@v²‡v÷ÙC»ûì¡Go2¤Ÿ™•léìú³ìNÒ—?Jn Nž9ãQ˜®ÚAtü;k—ag Jžegí–í,bt¸\¸dNí–Í)4ˆ)Œ6)\2§v÷™S» sJ÷÷|Ï2§vËæeÈÂöd5½>_Ïã+~>þQ‹FyS‡ýG±~#߇!=kE˜Sý³7 ‚§êµpéW„Mð0ô³Gp|€®~Rºc¸™ŒßZÀïî+«\ðR {ühEOš½ÝÏÊ‚ÕôX|ìÿÒl³=òæñ·øz¥G²uøã/ïµÀ?7›âQÑp¥ÇŠQ”ü]X?§DðôrÑ/ÁJS׆ÞJ›S…cø>†ÛÐu¤‡ÏÅw<ý.À°GÝ ûú¯1úFÐ/!;æj¡ ó^Bs†`Çš>e&K艓Ð("NBxô´ÿâ ÍMnâÑŸ = º\¬Òwï¯#Á A\àhu@IU OÏñAô+‚-‚§©öCÛ—QÀé×úÀ¬ƒãÑŸ ý°*ëË.{IW‡ úa×ñ“%JˆŽ‚§rÔ·Ìšë¶"xú%‚¡ %<¼¹1xôYF jUÓkÈÏ!ÁNm&G®¡²) 8±†ùŠºP5‚£¢ÁM±¢ºñÑ& £/è!ZBCV,#¡F9§$äi ÕÞ`8¥©]¦{+^#8ªL(ì˜'ºæÙ F_ÐCœ„lÉHHYƒà”¢<£SNH¨aôPY!xZþP¸ËAì-Uj<ú‚b$¤*FSfñGÐe "Mm‹áXBVÑ‚¤éžÖX }SGòþ€iUxô=ä8 ]Î[¼†®‰ã$d<½†Ê°IœPÈŒAã4=-ä(ªj e¡V÷ý/‰Ñô+¡’‘PÙhÿ³„UYcø *+O«E†´ýé´ÿÂWebô=ÄIȎͶ±„úÛŒCpJ5Œ¦v5†c d Ye<-I)*?¥·¤}ï{=ï1\ÒC§uñX3öoh i§}€c éº&]ñ%´báèR9)zBB~ö—DðW÷ò?tejjàéwÇ"üù©m†„,,‚GQ›¡Í!#!ã1üˆ£ÇzQB?ms$ðôã’W:çHhvÝDp¼†Lí9 p¼†´Z”ÀOç <ý‚e,¡Ã®xÚІÂVëÃ.Mt ›t½/žvL¦Úä×XßaààÛâé—I˘^1 ?º2IáëñKé „[dȪ 9tñŒÎeBOïÅ[“xÛs®m‹àhzõTˆ‹g´n<MoUÚ)š“Îh õÛ<™Þ¡)ðäíD3Z9E—N¯Òî¢×éõœ‹.}ÊÖ£Ý!ï÷ÃíóÞ(ð2œ˜w=ÙxÞkç|ŸN¯Õµ¢çÝ8àx[×UCλµ`x8šw[M<ï“Gó®Ü%¢þ‹l® ¿;ÚÖ®±žšw­µÃ£Òyo&Øzüd 7ïÿ2ö»'À u^^6,šwo‚£ywZÓû½_t5‚ãýîÆRX4ﺴÖ#8š÷zj"†çÝBµIGóîÊËÄ¡ý®=]:ïZÕ¥¦æ½4ÿ‰àÿÒ§z¦ÇyÿÇÏ{ÿOß<ï6X¨'æ]{ÍÍ{…àxÞûÇèý®j<:ž÷f²±ž·•Bp¼ßËÉ[™†ó‡5Žõ¼›‚–hÞ|q0†?¢AêŠÔó®òøÝ×ïÉSÕÔwo=™yʘwc bô$Ì{3ù(м+;wŠàxÞMëyµë<ÍŽBú|w\ÍŸøyïeGêy¥Ìœ†ÁѼ÷‹¾"ç½ö0qOkVÏ÷膘÷AÌ…y<é§<¼âm^? ó¾Ë°çmG$ÀQ4s¸³Wô¼—s¿ÅŽÏwÅœïÀàé~nÔ¼R§H€£yw¦¢íº*¥ŽæÝ¸ŠÞïV7xt¬çݴ갞׿ûv‡Î÷1{u½Û óžaÏתjR8±ß5Œž‡-³Ûóó>}èÏ»…$¬Žö{•ÒÔ¼¯ÂJ"8>ß›)¸ŽæÝÕÃѼ[ãéýnÃ-rÇÚó½õvñ´®ñ»;,ºtÞµÝíë`Ï¿ÿdØu5(j€ó>µw¡îq°ßëùécÄùeŸïª¢Ï÷^X'ÎwOï÷¦4Žíy]ZÏ+¸GðGtnjÒž7Ç£ÿ¤ç{3…ã×ã÷v˜y¼F7λíw¬Oá´o‰ôÛ”Ö¹N¬ÝP~›éž€áÈ ¨/Úæ)jˆP8: J?Ý&Ò¡zýÞ=YcÉ×´ßÆÍ™Ñüzu pc§û{²h­öpLDðÇ®›Ë–9¤çG Ëæ±ß­‡T‘¿ß•o s¾_¥°ß5ã·Ñ•Bäñ~7vº ýî œïv¿+m&«ÛórHü~w¼ž‡ØmNq{¹þ£ƒßÂàÉF¤ݼÂ~?º›çÝ s’‰y/=m× ÉYŽæ]ùÒ‘óÞ„€i€ãó]‰„=_V˜<šwÕ0v1Ãñ¼7޶ëúë{ƒáÏX'Ñón*ˆ‚¸+Ó{ÜôõÑñóþ‘ᯫBâӇ诣ü6£ÃN#8¶ëÊÉ0Ãû½QŽö{?ˆbü´Äèè|oœuô~¯áþþÁûëLc,=ïœü]ÿ/!p4ï5¸><ù ×ðQÃ1×iý!øëÚŒû»î…—‰{œñŒžž“–¿¿×eYÑ÷w†YËûm¬oh»®i†£y÷—zlÏ;…Éãy/ëŠñÛ€QÚ²÷wåššö×Ur<ý¤Ðð}”aÇ­[áþ~z¾qÞ‡\óô<À×§ç?ÇãTH?óv3åñ‚0 Ru#ø1uÇú©°  ̃GÞ\{Ñ´èh £qÇvÝœX–.ßX<:¶ë.]6hÑzâÝ‘]×ëÓqÕ¾Ò-sÊTâ¼ÓÖN‡[W\„ÁÉp늋°"8n¥õ¼ i‡N†[W\„ÁÉp늋°"ø:Äz{±”燎„¦p:,ºâ"¡N…EW\$Áɰ芋„"8]q‘P'â|Œ>|8Áãš7Ï|(&Àéð劋Xb8¾\qKÇîMkéD„!b‰àdørÅE,œ _Žó“\YúkFï¾¼u~"Àé0㊋,b8f\q‘E§ÂŒÍЉ,*'ÃŒ+.²ˆàd˜qœŸ×?kk_ŒÞJG¾œ ƒ­¸È‚“a°‘|šœÛkWôî‹q¬›ç§ àt¸jÅE¨0œ W­¸‚“᪡Bp2\µâ"TN†«Æó'[ò¾oZ¸ŸJYʧÃJ+.’„àdXiÅE’œ +­¸H‚“a¥IBp2¬´â"I~HÄ•‚Ö÷cxáæûO•úÎÏÙצÆp*ü³â">N†V\ÄÁÉðÏŠ‹ø 8þà‡nú{³Ká‹ñ››ç'”ŜӬ¸È †Saš™Ap2L³â"3N†iV\dÁÉ0ÍxÿI„bkè|à‹q– ÿAÂépÊŠ‹ `8NYq'Ã)+.‚‚àd8eÅEPœ §ŒûÕk[üî‹ñ›íël¥ûOEßêòÊ©ÏÝ\Më·!ÒàdØcÅE:œ {¬¸H‚“aÞ~'n:ÁøbÜbÁ> #)œO¬¸ˆ‚“ቑ@p2<±â"N†'V\DÁÉðÄŠ‹H ø×)=<+ˆj=OFžŸç~~N”ñ©’²ßÆB£^îK”úAÏ­S#8qJ¹†É8êW6ÔüLu¬‚?£=øºßçf_¼ÐÝ?æ:<Ü;øAÃ÷BÍòž:ä àGa_xêç†A †ó ‘>{¿{FzrÅð­ð&ëâU3«v¾6|òzžTÚ=,m³B ™‡¦X!M-‚¯ŽGU1ƒïàI­ûØgÓaŽCë-Vm€óͯ†#àò®¥“õš4¸k,‚·‚ Ú- ²ýó ¡"1À[aE´çËSÔ¿5%uœø¦ª¾iÏü »MñÉL©j¦ þ¨^¶$ÀqÇì~î¦`’Ðùa÷Ê^Næ2úaÑ€¥ðtô~l;cwB§²^ó£O9¹è;”E’èÜ»ÃS G×£r£Áúù!É"xa?ùwo •—Šæëls©'F–+j(çx2úØjÏÖ™w®kŒ™¢€è›|E’è_éчw¯/ï¾0ïÜèv2bз‹b'F¯êú/óÎI^M.ô1ÅáËp)>hÑæ/ó^³]±¦U÷‰GW)Ï»«§-³4ï5ÛÇdzw$º”3ÀñèæÒfiÞÙÑ'8úaÑÉùÑ]ù§ygF׺™Þýïw• É_ºÊIó¾]­bæÝLv¥ûF£CºS€§ãмtºÖ!Û¨€°V€£¯·^«þÂÔ±Á·Â¡¼ç_q¸%’¯X(ØÖ{öCƒ“=Þ2Á‘áPLu€Ä÷(ò{áÞùYÔSU8ñŠp=pb/Þ]b=‚#‹¢˜ ê©Y„5à?üg†§/ÅÞÞ;Ø@ü(À [½ªÚâ3Á“ïfŒM§“e-˜lë=O¾´šI*„dÒçÉcƒ$äåíiòCëáK òZ¸°­ùŠt¼Ž7_çÉ¿cò:…cÉÏ]¼ÖA»n%òL:§†Ä­Ý–Í+O~·e%†¨°lvâ²i˜eSkçÉï0y›Â‰esi%º–Íû$yfÍkåœ'Æä] '$ï"ŠHÛp7Zm™mSyçÈãÕl[!¸Æ:ÉþIÛhVUzFUÆ™–7“ª»\cTû¿h–¼³Œ¶‰»³ÜF~Z×Á5ÖIÕŸ´ KÞ2‡”»Ò6·J^Ãm#¸~eÈ/i–¼R4y[:¿Aòå•¶¹Ç:ér{ZÐ6ü²aÈ;cüÉ7Psàë¤)xµ m~×Túv ¥ß#,ª&Î=¿Àq—ŽÊR]:ß¿Gp\•aBºžÿe÷Ÿ¿rtº¬sTžæhG£c޶†5ôüQü*î©ÉRyþà§àˆãð-Or¬Bc¨ÿïˆ1çy~oú›ò+Óútîá?üðùJq pâ+dnläó~x,vÚùàèKƒ¶€hÎ÷æ 8>qŸŽO÷q|ú ǧíÌñi+}°„áp‚ãT)#r8ÁÑÍå8ßOïÀ‘û´ÔøÇñ]à8ºÕeŽïÇÙTù~ù˜9’ô\Í?0Np¬Æ §ÈàÔ\Ï;ëû¥Ž-DZ8¶÷qlÿ²_:àØqߎÀ‘þ6hÍc€orý±èM^?gޝÜŠ^ާÖãåpj=Ωßû×™ãžûÓøÃñ¸ŸáìW`Æ–àÄ+š±Ÿ†øŠ'^¾Uö}„i8rÓ0þÀq¦Á4‹Óp¦ÁÎ÷§AÁþ¢^O¬z=½2Ÿ.÷c®×’z=Ñ{’ª îôõzbÕ+ÏÑš?¨×'GÕÔAÁþ¢^O¬z=½²ßüµP¯‚UPp§¿¨×«^ïâØòr,çrìAÁ–Ôk'p쎣›K¨€ä§_R¯§¿¨×«^ùõhÜÔ+¿gŸÐ ¡NÑ'V?ò•ýƒ~d8šÂÏÆþ ¡NÑ'V?òõ_ô#/Ç9rñ46ªÞ¯¹oª¯äRϧ^Á•z€OZtø+¹M‰Ÿzï×ã>.ú[áýR¹ÀÇ…z#|øºûáãIüc¨W|þØÏO+£Ÿ4ýúÌ">gÖgN}€{®.¶ïe,®Xy0ƒœúò³¾ºüáM¤ 3H«ÁË ò›HV&9ÈJó‡æ'CY³û\0™7©æ„Ãá}Ÿÿ ®ßgN\œšøÆ‡÷½ "‹‹àÔÄÏn·á}/ƒÈâb8õ&s‚ò¤o>^îÒ7|êð×- ãéàŸðQ]ðQÚ7ŸÇ5Â¥e7¨‚#óŠWšäHÃ?þÉÁ?yø #ŽÌ+^©˜#¯ÇþBþÌ’?ÿ…ü™×=“<Ì<º¤”þ :~Ù§Ìñ<½ûI~ÅçéOò›¯ºõ¿âeü§§†"Ôè/üèÞ?uþOõWð©Šz õિ¸Â§üßï.~j2K‡‰;’?Ìk~3NÆ€–ÈxB~LŽ®1ù©¸Î¦pD¾û1{$˜áO@þ)‡ü“D^1äç h€cò«)ãüHþ0Ã?€üGùŽü˜*Jc°U §Èñã#ùà ÿòŸ9ä?o'ß_€L Ï$òçòg‰|MKÞ—Â)òMÍM»é€|—C¾»™üP/âRxùía}{È àYkàyËf{òÇòÇ›ÉG™ÇžGþ0ÿÓSUþ­äRZ[òª´Æ£S‡TU3‡ÔÜ*g¨ŸºŒ>VRÝJ>À‘ž÷•¡$_8qœ ¯Æw?’?Ìð-ßæßòä§Ï0!òM©ç•Ï$ºî”£*OgŽŒ´Bd„#EFZ!2Ò.DFZ92B’¿ŽŒ´Bd„&i…ÈH»iåÈO^1ä¯"# ù82Ò ‘‘v!2ÒÊ‘šü•£µ"#,ùàhm…ÈH»iåÈÈ­ä“ÈÈ=äÏ@þœCþ,‘¯iÉ_GFXòMÍ¿ŠŒ´ ‘‘VŽŒÜH>ŒÜA~»žGß®3Èø5ù^¡¹É OÈW…Ñ®BÇäUAŸ°ã3|äw9äw,yã4yH¹ª y»ûÈùÍ9a·‡»´Íöp׆¢BíBLª•cR7’OcRwßY¸Ë±*w¼UY+O˜º°“x'Y•%gUÎåÅCiøL>ÇªÜ VåÔ “/ËùãNZ•ž³*çö}þ§§Òê[É82|m,eÏ+ ŠœÚ°Ê3vîÓ1´%ºŒ¾ÏQ•{^UjnRÉeÄ Ñ ÉΪ„oZ Ÿ+ŸÉç¨Ê=¯*õÔ§©Êº±s I€ä­a.#vN ß@t‡ÉxÉ›ª&–ŠÓé HÞ–Ž!ôí!gÍ~Ø GÀ[!Î^Fªš¹Œ@¼ѵ9’o׬ž/Èk`¿am þºV¼ªÉ«¹ÖÐim&Ÿ£ç[NÏÎJzÙ˜ nÐíö>ò`Ó¶9&q{ÈSzÞ*AÛ´ç»ÈŸ`ÞO9Ëæ´æõ|”8Ñ ‰ü!Å‘¿Jœh'Z9q‚=¤Mœ¸‡<Ìû)gÙœÎyÊõ'î ÿó>þóžA>À±žŸ> ‰Ö|¾Là¤=o9{~ž¸0ÈrìùŸƒà«}È0kúõT¥pÊ<àÜ}Èÿƒ÷/gÃþ[³ä½bÈ÷'¬Iá„=ß³¤íy5÷03^Ú…|›VηáÖ|”oÓ ù6ìšù6­oÓ.äÛ´r¾ GÞѳ4߆—¼æ$çÛ´ ù6­œoÑ·”ªÄù6¼Þrþù8ߦ]È·iå|vÙxKJ>É·a—ánRWù6íB¾M+çÛ°p’<Ê·áÉskþ*ߦ]È·iå|Vò5½l’|Þ¶á"#Wù6íB¾M+çÛpäµ"—MšoÃÚó5#ùë|›v!ߦ•ómØ «IÛ&Í·a%ï4#ù«|›v!ߦ•ómØecH=ŸæÛ°änÍ_åÛ´ ù6­œoÃ.o¨ ›æÛ°¶Mɹ>®òmÚ…|›VηaÉWI>É·a×¼g–Íu¾M»oÓÊù6,yͿηa—æÖ|È·uás´ç´Í Í«† _ ½ ›N°šYóÐSxãücùG|IIÞôÇ»B£“äG^E¹FíB¦S+g:qä•füó×™Nw¨Ê!ר]ÈtjåL'vÍÓª2ÍtâÃ÷œm2à”ñ9‡”½õn ü¿æÉh ë­£Ðè¤aVs†Ù|‹ô-osÈ·y«)¿M¥½S)œ$ÏEÀ!”9d6¶ y•­œWÉ-›šÔ6(¯’µ* £*¯ó*Û…¼ÊVΫä2, Äy•|šVÃ¥iÅy•ÝB^e'çUNðþ)>¯²ò*; ßqy•WÙ-äUvr^%C>Ϋ센JŽ|”WÙ y•ÝB^e'çU2äã¼ÊNÈ«dɇ¼ÊNÈ«ìò*;9¯’!çUvB^%G>ʫ츼Êyt>»¯“³ûHò×)+ÝG“¿JYé„ì¾n!»¯“³ûn%Ÿd÷ÝCþ äÏ9äÏùš–üuvK>$ÈuBv_·Ý×ÉÙ}7’O³ûî ?ä×u Ù}œÝG‘O²û:!»!'ÈuBv_·Ý×ÉÙ} ù8»¯²ûî!Šz›£ç·‡»´Íöp׆ò뺅ì¾NÎ|šÝwù'»ÛfÇÛ6qv_'d÷±¶MÉÙ6WÙ}ÝBv_'g÷q¶M”Ý× Ù}¼mã9Û&Îîë²û:9»^6WÙ}ÝÇnXå™ {•Ý×-d÷urv£mâì¾NÈîã$o8Ûæ:»¯[Èîëäì>Ž|”Ý× Ù}ù(»¯²ûº…ì¾NÎîãô|”Ý× Ù},ùÝ× Ù}ÝBv_'g÷16Îîë„ì>Ö$®jÆ$¾Êîë²û:9»ÑóyÁÙ}¬¶©É_g÷u Ù}œÝG“¿Êîë„ì¾{ȃMÛæ˜ÄíY OéyœÝwù!Qª[HÓêä4-nÃFiZ¦Åf–3Ìâ4­n!M«“Ó´X×GÈtê„4-VÏsÞƒë4­n!M«“Ó´òqšV'¤iq†Y”¦Õ1iZF÷9ä=Gþ:”Ù ¡LÖ0 ¡ÌNev ¡ÌNe²äKÂc†C™‡ü^ ïCÞÙN’· yä@þCþ o˜Cª‚5€“ä5³l 6Ñ‚mcsl{”Ö…S’Ý̘üC0‰ÝÈorÈoò5cÛƒF'Mbƪ,Á•àÀªt9V¥{”$ÏX•Ê«NJ^3wØ@þ È?å’$¯¸ËH•ÂIÉWŒª ËLb—c»gž|]rä­Já¤ä#yÐ6Lb—c»‰¼ãÖ|•ÂIÉ3—‘¼Lb—c»W^ÏO÷8rÍ›NJÞ2’7“Øå˜Än+IÞrk¾Iá7]ÀçøÇ—ïâq¤þŠ9Ž>ůë·|V—U÷øýRŹã§êÛ%ŹËRœà7ÝýIqî2ç GÂ%Ź[PœÔ .Ôdì24ª*t¥R¸¤QwË bûëiÂ%½»Ëл¦hê*…Kzw—¥wkàø'½û¾î‰œ†ß†¿¸oÈ¿ïà©ÿÔaó^ô*ˆþŠûå0#?.ÁÌgØÿß›#óõ¾à‡bóA‘æ}L(NÿÝé Ož²•›àâ ÿ ÈÏO‹Í'ͱ¿ÚX’ãð†§µº˜ãð† ŠÍ/óI÷y~„ièág þP(SZþ0¤U~8þ›ŽÄUc<bÍœÃ;aÇbc§§,'ˆÇtôºr¾N©@`é°y*6nzÊqƒ< ƒø†døØû;c\]I>"ÿ0dSÏðôôIÊ1 1|ì=ýApaÙ½tÅËÛ¤íÞŽ/¿ìŽ3·†Sv~ê£x™¨¼|rƒ`¿ïP‰áØÁZÌ»ôQ/_ô5m¥ ÒÚˆñõzÓO ð¯WAmñrš3àmWO*&!ÿPxp Åð“0YýSßô ª=OxÆkáßòŠø1Êÿ°"¶ûb»r²¶ |»—á >è1cø ÇæÄ ~à_±ÿ§·G†cÿÏ1ç&”1üȲû,v:ÍçaŠ'»ÿa¬IÔ¾á”GB¾hl€‹Ýë?æŒ௙£s)NøîÈ/‚~£í'x²å‹sÔ|{A§õšïøF¥ùôkH)Nhô‡PmÁòý 0c/UȽjfg?¾ «ÃÇ=•G5ÌÃt”÷<¼± üÈ™Œé»UF.,®ã'µ:zmåÊfE½»¯¬Fð㧨Q–šÅàrL2™ú›•²UÐCë邼Î;™&8:™úi¤’Áût1Ç3âcÏ\Ïi+äjôÇßâë•~÷!õd€?þòðý+€?Œ>{ËçQÑp¥Ç²”ÉÔ¿ùì­à齡Wc0݆fjÃ)ÜŒ=?ÐM£¿½ÍÁžVíôðÆ­°Ë£ñzöÇ£¯ =ò²cø ¥Kõšƒ®IH9U‘*kGÀ‘„ÃHÈÎeQ<- þž‘òxôGABÏ‚„.w&ôî¦ôŽQ^àé»+¨Åˆáé9Ñã5ýŠ®ª<ÍJqG+"í±Ø[«ó þ,H臕PY_vYåšzGr4~²tÑQðTŽºñ–^CÐm"‚§ýû§Kxxscðè?‚„~á)®e]3'•Dð4­Ð•#—`~•Ž<ºr+zûùÃS9V¥§×¿bÑU)œ”ci+ÜzŠ-al=†c…lǾ—Ä+êÒa8Z*Õ˜+†ÉëBáÑQšÝà£YQtÁ…¾ ©i ©´„”ªjÇ›©šì`,!Wz GÒž’P/ ²ÒŽrù ;&ç 2½¡Y«Á£/hjNB¶ä$d ‚Sššònš^a8V7ã×(M]Vž& îbªxDK•¾ © ©Š9ËŒ ³ø#Hè²ÑYf‹áXBVÑ‚Lžf%!‚‘¼?`Z}AS›5µª´Âp¤­Êš9Ë\8Œ­´ÒU+Ò 0WªÖPªvã˜Ç…r"ù6htäØk+Ç­!mV”w¸„þ‰kjíÒ‡\BÙM GUͬ!§†s‰riâeQUÃÓÒÖÞÒ §É£ ¡ÒÐg™³ Á‰¥R3gYY[ dzXûE=ð4‰sȦ›,ƽ»®ñè šš“½ÜŒ°„J‡à”¦fβÚÕŽ%4ö'#$Ý:žfŠ•QWÕþ$ô.iêõ¾xÚ1é Óµ{=–߯ç¾-ž~™€õ´Î“˜àCoIšÆ¤ðõXHœBÜÚ{+ _›)<õé váØ‘Õõ6Ð0üê©AÔS˜)qÊ î¬¹è!‚'A…áZVi©9˜0sPO|¢E9ôB¡âO=/ƒÉoR Õª1„¿¤·ck¸PGðkÕ[ÁÕØK+m(Ø[eƒÞˆÆ®®×­«Ã…+-Àñ"èßp4w‰yŸcF/‚‹Ë!qÆ æèàG‹@OÕxÞëÆãÑÑ"¨J;¹¼Óy¯¡(%‚'‹`H¥˜†hÞ+øpR LÉ»fR|ëô‡zΉE—>eëQñÉZaÿ§Õq¸}u4 l€«COꯎÚ9ß§‹ÀêZÑ«Ã8àXEÔUC®kÁ>p´:úk¤¥W‡3 ‚£Õ¡Ü%.ü‹Ž† ¿;R®±žZZk‡G?¤«£™œ=ë±›·:Zÿ2t‡ÓU 'ò²ùÑêðÆ!8ZNkZwôK³Fp¬;ܘnV‡.­õŽVG=µãÁ«Ã–pò8Z®¼L/ÒÚcÑ¥«C«ºÔÔê( „c"ø¿ô©^;êquüVÇ¿¿¬Ž]†ÝaØ~GAÁ+Y‘«£Ÿ^àXw(Fw ËÁÓÕ1X-ÔÉ2z¹ ‚£Õá.·/´:ªp,8ZýÜ‘«ÃêŽW‡Ó–^ÚãwOZþºcüLÕz·åWÀ‰ü®hudصš3¢œÐfl–IéŽ9i.‚ãÕ1uúÄ«ÃBD=‚§¡ÜÁ0ÔÔêoÄŽuG3E²ÐêpµÅp´:¬ñ½:‚M¼cíŽþü¸\I×øÝ]º:´=7ë`w\\ï?' $Ù8±:¦"6Ê*Ýàød1c€°;Ê9É(‚ã“EZ#ìø´aÇvGéiÝÑ”ñݡ/n'|ƒ>‚?"ƒ¾©I»Ã4žt¥ìuÇ![}v˜ÕqȘ÷þ:àS8aoúÆ0gܼkæ6¢+ðÝøy7vü: žwoàÌ8°ó®´Û ¢Ìœq9#8¶(x­Nãþœ öb®¢ÃÄ‚F ð¤¡çx® £¯?²B‰óN{R8íŠXqÞ']+Îû€à”+B­8ï‚“®ˆç}@pұ⼞ô‰>»9š‹îyâhÇ@ §½+Î1€á”—`Å9œô¬8Ç‚“^‚ç@pÒK°Â]õÆ6ñN_óW¸Ùß×N_ŽW¸ß6qÓM7…Ó×ÞwÓÅpÖ[BÝt©Jw¹S7ÝÁÉkéZ'¯½+܇r(±0èÝé{ëêWÕ›wœ\‚pÆùÉ‘A^B1œº‘®¸K(‚£‰«¦nãô%ÁÉ銻„"8y#]½=ûCN¡w§¯”«?Ü"ož¸ N€Ó—Åw?Äp겸âî‡N^WÜýÁÉË⊻"8yY\á~©…ígÔ¥ðÅÛÞÍ6ˆoL §/u+î‡áÔ¥nÅÝ㜼ԭ¸{‚“—ºwCpòR·Â­f Óµ.…‹·²Í¾x¡³1çÀ3®B~Ð…Çð½ÿ?ÂS‡œAü(¦ò¼p©™Â ÃùõÏ~"_È‹œ4ˆ*†oÅ4öWÍ$ØÎA“O>$àI‘ÞPdg›ªùJ$šÆb¸œžÈsTÃQUž”Ž…€s 1 Þ"¸vÒ›œÖüd½^'~(D€·‚ Ú- ²ýó !¸à­°"Úóå)êß3ß7'¾~5ÀéàÌBý¯Øn¨Úš¡È|üd 1ׯ'êÇkÊ!;G¾Ç™ïº¡Š—†Œ`‹àxÙS‘îúUÒÔžîë^§–”cnÈrƒ³0ÀSÝ3ä\:eâxUÌ»a{ýïBå~<úÕîʯ7”ëVñ»—ô¼÷g¬¢ç݃àxÞ•¢F {æ’¬ôU:‡àxÞkåé0±5‚£y¯Ê1œ˜wScò¨þ»¿ë:fÞ5èq1ŽÈÅ£/L¯b¦×L‘(œ?­†ÿ}z{ëÄ#8š^mK* 7”$££é­œk˜(œ7)œØ?Ít/[°ú“€5'`MïŸÞLT~Ãþ©Gp$`U×LÑçõöÓtÅjÑ&Ì _ pJÀÖüEÀzQÀ»MñÉØª™ aÜа€,€ã62½Q19"7ü±¸{åG/§@#êY4°žŽÞm'×ÿN(iìçŽ}Š¢ EÒŽÜ»Ãë•\üÙ¯ fôAô£èpÏ"ø³>ùwo¦R/òSÑÄq—ÌNÔÔ¯?} OF+‚mý—yçŠ'ÌäAFý‹&$¼Ò£ï^_Þ}aÞ¹ÑídŒ¡>˜Eþk€£Wuý—yç$¯&.jdYÔÁ“øÉ>˜÷ÍÒ¼o×E«˜Ugô¨µÝ7¶å,‚Ur—*Sty+ e-À‘E^hW­p§¨‡è£Ê|+Üöü+uŒä+ ¦wϾâXkL¾b_ðàèfSèKÍj†E‘ß ¯øóÎÏ¢žr+‰W„È[€³hn=‚£+O1¥¥R³k(ÀÞ…¬ýmñÅUª’¹¨p¼8áL¿ê²Q[¬ÛtšþJÈÿ{Ü¡|£ïsFß £›bqôŒ~Èýñî$‚\óèÇœÑïþ£ÿäŒþ#½»&G¯‹¹‹Ñà-GÿÍý—]Žtjtøðv;>:}oàÄèjüª !ù¾X·…5¿ÍYóÛ}ƪ £M;§ÑGß­£œ½¿¸2£Ãw”ÞAòï9’ßf«nS¼|œ bJþò!¬:€÷O¿O¯W~Àá˜[®Eð!ùt.ð±cÛÕ …¯áÖè‡þäŸrÈ?IäC¾!pL~59Wä3üÈäÿàÈô5A>ö^8E~ú–ùCô±æ ùÏòŸ·“ïOx“Â3ÉŸü9‡üY"_Ó’·ðK€S䛚!ÊjÓù.‡|w3yúÒxùía}{È àYkàyËføvø…ü1‡üñfò‘s5ÀóÈï@t»Éï8ÉÞªÑgE©Jø’ÑŽ•üðÕ’üøÃü…ðù·á¯ÛÉxJ¾i|¥Iòª™;§8A~jUt$¸À¿Nóè_§ òŽ$¯*C“wÃpŠü˜žq$¸ÀOëyô1èVòŽNXÏwBàNWcŽÁ‘üa†oü6‡ü–'?ÕÀ#òM©çt€g’ÿò_9ä¿hòƒ›¶ãPˆ¼ÕÐZ)À m£ KkUŽÈSÎ {: ’s‹±äM'ìé|—ä,Z•³æ•°æ§"߯&ø°’ÖüØøäHþ0Ã_ükùWž¼£MâÊ»9êàä²Ñܲ™õ¼‚§r6¬6¬¥6l/8kœ:¤¬e©ùk:ƒï~&ŸsH©°lƘ!–|UÍ] œZ6Æ3Ë>lªÞü{ùwÁ¶!ÉЍQ)œ$Ï­yøŒ²u¡r´´©ée£Ã×x•¤mjfÙ@=üà•¿Œ®s´´Vä²1ÊÀW˜µ m¦ÌÕ#ùà u¡s´´Õä «¨ pJòޱ*!“`æÌäs´´¡Mbë-¬y-™ ·æáóšÔ…ÎÑ6ZÐ6ÚjÃööøÎ p¬ç‡ ©ç‡f8¨ £mô»@¾ªHòýýÛ¥pjÍ{fÙ”– ¨ £m´ m´fÈWsþJ€SËFsk>\îŸçÑýsùOÈ $š¹€[¸Ij¸KUz¸Aûœ ¸?ñ’¯5y“2>à”¶1Ìe¤„»Ìº?&Ú4° É·<ùö4>¬ù~°…µÔÀGòmbù‚ëý0Ãßü{ùwšüà ¨‚U“ïWMF'ÈÛàú@?Ìð=ßçß³’wMˆŒ„ÑMQV¼F'È«pA?Ìð?ä?°ä+ïIòsp‡8E~lz|$˜áÿ€ü¿òÿXò¦ Þƒ6ZOÞCwû'È— C>Üe†V»Pkå€Iþ: Ö 5šüU@­jíB@­•j eÞA~6í.Ç$Þñ&q­ ã¶ AäV"3äã r+‘YÉWš‘Øk cô|Èú8ÀyÈ9aG^UZOÞaë>dà”¶qœ¶Gë®B‡œ›Ôáƒ]6eÙêrÎÁ {ø6¬å6,¬yÐu‡Uyøa%¯µ%%_ièàÔ²©jfÙ̇¢ÔËèmΆm׬aV~;|N潕©šÙ°ðí¡hx&Ÿc˜µœa6Fhmc*pyµÛûÈùïòßü kŒ¦Ö¼±5ømN°%wÂB@­…t›soÏ‚ä)«Ò* =OòCŠZ» ×Ê r̆äZ!AŽÝ°œ—ø:A®]Hkå9nÙ0äÓ9Þžç$• ×.$ȵr‚kUz’|š wù/ ÿ•Cþ‹?¤¢¹VHãî°Q‚\+$ȵ r­œ ÇJžrqã¹;$ÿÝΣ·ämXï%yÓëP¸ œ2N m’B[9)”#o©C '…òpËEÀã¤Ðv!)´•“BÙeCEÀqR(»l çî»J m’B[9)”õ“äQR(Ož[óWI¡íBRh+'…²’¯ée“$…ò&1¾¿J m’B[9)”#¯¹lÒ¤PÖ$®É_'…¶ I¡­œÊnXMZ•iRè® êBçh½•®¤žO“BYò ·æ¯’BÛ…¤ÐVN e—7Ô†M“Bï¸ÃjP:GÛèw|U‘䓤PvÍ{fÙ\'…¶ I¡­œÊ’× ùë¤PvÙhnÍC–Wê¢ÉÑ6Íš÷(Ê{°ª‹ÆÁ!Õˆ¶ál›ùÝØqMΆm¶7’¯†¼JXóÍö>ò0ïMβiÎ7’o ]jHhÎw‘÷0ï>gÙxnÙ F@E]«Âé²Iá”a¦U Ä6þÈ?æÈ—y‡ÕV¡ÑIòŠ#¯¢<êv!‹»•³¸9òJ3¹×YÜwœ°Cu»ÅÝÊYܬª¤OØ4‹›Ãr&qÈâãÄçØ6þõV™)l.øWá„¥}•q–—]çsT¥ß²ËFMἄ|=´¹¯‘—nRœ—Xƒ—Ø¿ù·òo'ëÃïù %ÿ·Bò?K^q‰WÉÿíBò+'ÿ³1)š|šü‡Iì!êsâ°þ(H^Êݧ¯L '×<—,žTŸ‡õüš'3\oT…F'íùš³çg냛×çx‰}+·d@­ÒÞ©N’ç²û MËCPÉçĤü‰_65©mPÍ{1Œª¼®éjF:¹fd‚÷Oñ5#P3ÒùŽ«鄚‘n¡f¤“kF(òIÍH'ÔŒp䣚‘N¨éjF:¹f„‘|\3Ò 5#ù¨f¤jFº…š‘N®aÈÇ5#P3Â’5#P3Ò-ÔŒtrÍC>®鄚Ž|T3Òq5#óè|åB'W.ä¯Óq;¡r&•ŽÛ • ÝBåB'W.ÜJ>©\¸‡üÈŸsÈŸ%ò5-ùëÊ–|Hþï„Ê…n¡r¡“+n$ŸV.ÜAþísΚæÖüø™âr½yPCXçùC8¤FUjÈ1 º…²‹N.»`©¸ì¢Ê.ÉÇ• PvÑ-”]trÙC>.»è„²‹{ÈÃ)³Í9¤¶‡»Tåöp—¶ º…²‹N.»¸‘|Zvqù˜…»«rÇ[•qÙE'”]°¶ä¬Ê«²‹n¡ì¢“Ë.8Ã,*»è„² Þ0óœae_@þ+‡üo˜ÕÎSËÆö–•Iá¤aæ8ÃÌE…ÝBÙE'—]p䣲‹N(»àÉkŽ|\vÑ-”]trÙ½a¯Ê.:¡ì‚U•Ê3ªòªì¢[(»èä² î&•]tBÙ'yÙÄ×eÝBÙE'—]p䣲‹N(»`¯†1®Ë.º…²‹N.»àNبì¢Ê.Xò%³a£² 8e9‡ÔáÈnظr¡*Ø ë¸ {U¹Ð-T.trå#ù¸r¡*ø5o¹5W.t • \¹ÀH>®\è„Êö[ÕÌöªr¡[¨\èäÊƶ)Hï®\`—MÍRW• ÝBåB'W.Ðä¯*:¡ráòß@þ;‡ü7HE• P¹ÀR%wH]U.t • \¹ÀJž2ÌpåÂ’ÿ‚Sæ+çúÚñwX£u ,ûÖ§pò&¥¹›TœGÝ-dqwr7£mâ,îNÈâfU¥g$ÅÝ-dqwr7wÂFYÜÅÍKÞr’³¸»…,îNÎâfýóÞS6Íâf%Ïy‰¯³¸»…,îNÎâæ–bÈ'YÜÜ6Êâî˜,îÿÀ8ù/ǶùïÈoØŠÞ°ýŒ€ºøïx—ë£Ñ59’oÖ¼ªT”ªÄiZ¬ªTLdä:M«[HÓêä4­›Èã4­{ÈÃ)ÓäRÍùFò8MëòæÝç,¿æ×|”¦Õ iZ¬ß&¤iuBšV·¦ÕÉiZ,ù²"©$M‹'¯8ò*J×é’…:9YˆõxM’O’…XmC‡2Ód¡n!Y¨““…ÉÇÉB,ÄJž3Ì®“…º…d¡NNâÈGÉB,ĸe’…à”ñ9‡”?JV¥¡l›4e…—<çh½JYéRV:9e…“<é%Æ)+üe¤æ.#qÊJ·²ÒÉ)+,yKÞ¤Ò”ž…¿¬¿Ë¢x+®V‡aF×n&_¯òó_ÉèÄ¿«-‚“ƒØÑ7smjÿ}m ðOýó£ÛªIáÔès¨ùñc[üNƒÀ_˃(€ÈY¼ òô4¯Ûͳ‚Ñ ª,‹þð÷ øËœèµyùÉwï2௳¯uóú™ßÏúj³Í€ç{èæø–ß|Ÿ‡w?æ¼ûÇln>Ö9p ÿ‘A~·¬¹|Ȇ·)\Òo»ûôÛNÒoÍhMIúm׫ˆÐ0/Õ0µIáä+º1êý0SvÚuÈ¡Eð,íºËЮª0óÍq÷'í:<Õ íßlz §pjQù‚A¾þ4ˆ. o#ÀÑ Ã(Ž–£SÜvH¼Mþt€6ïÅf?Uá¡­|±"6ÔÑÁüß›ã?rð½?›Šü0‰cÎpúïN?`ø{ò”­Ü??`øA~~êXl>iŽý Â’‡0<å¨Ýè7Ň0üSàøSl~§§~¹iø¦¡‡Ÿ)øC¡Li øÃ.QaøYàø[l:zWa <ˆ5sVC ïøAÞŸ‹§wƺâýú‚ù0dêÎ+¢7c^Þ¦-÷ÆÀIK'…ãú `ç§>Š—iJ_>¹A°¿pvÄÇp옛;<z{îå‹V]0ˆ°"úÃi þõ*¢-^N”aØ‹¡žöLBþ¡ðàLˆá'~®‡§~èAt3ñð ýàÄAú)=ÓƒTV{r _4ŒáÂÖØî‹ív*ÌÜ2ÒÞ Zt€(ø°}!àÃöK'bøAà¸-¶G†cÿÏ1ç6º1üȲû,v:ãaŠM&Û÷a¬0Õ¾ávB¾hl€‹Ýë?æŒ௙£s9(øî(îØý4z²1û…êÆðqM ’ïÕåñJ"é×sPÐè¡!‚'äû`Æ(Qª{UÕÌ´~|V‡+Ž“©Óÿ•êðé9îyxÿbø‘³”Òwêg\X\ÇOju ¦àر¿»¯¬Fð£p÷sw´Ô,‡V’'ÓÛýÊVAÝ|¬™káßί ŽÎ¯~©Ü½þ]ÌèÃæ±øØ3·ÊÙ yäGü-¾^éwøã/ ÿܬ‹GE ¥ÇÔ~”èÒSŸy<µwû=>Æú%;4æó~Háfìƒ,ä¢lfßO³¤{xãVøªÝ¿x=»ãÑׂ„y Ù1:‚²iz Í1¹Ž$¤œªH •µ#àHBa$dç<òž¦bþ`ÏHHy<ú£ ¡gAB[½»)=‚cA”xúî r_cxªè{¼¦_ÑU‚§iEC}îh¤ý:{£tVáñèÏ‚„~X •õe—%A¡¦Gp$Gã'S…Oå¨oé5Í?"xÚûsèÚb on ýGÐ/<õ˨p,ºfv{Eð4E©Ð•#—àà9²xtìá©ÜŠÞ~¾ÁðTŽU9™»þ‹®Já¤ëH[FÑkU“»¬´ñB¶cUâué0-•jL%Âäu¡ðè( kð-¬¨Š…உG_ÐÔ´„†H=-!¥ªÁñfª&CKȕф´§$Ô ¨¬4‚£T¯Â޹¨,bpû<ú‚¦æ$dKNBÖ 8¥©)¯Ì¨é†cu3VŸRšº¬<Í'+ÜÅTñˆ–*5}AS3Rs–fñGÐe ¢³Ì6ñ„¬¢%‰(enoƒF÷GA޽¶rÜÒfEy5KøðOÇšZ»†ô}–PØÃGU3kÈi…á\Uš—WT•Ç𴔨·tÂiò(H¨4ôYæ¬Bpb©ÔÌYŸ‹áxk¿¨‡žæø ÉVfET" dk<ú‚¦æ$d/7#,¡Ò!8¥©™³¬v5†c íâ E·€§‰„EåÇ|4Ô¡·? =†Kšz½-ž~™Hç´P“R¯LcRøzì·ÇCçužÜ›‡8gíSxêU »±=7ª+êo\ ""øÕSÃN®§øFâJsR{Oüòýj앺d®‰à‰W²(‡† Tà£çe0ùM*¡Z5†ðXô†h 7â~­az3¶;d¥ {ó­làÝ÷·Ï» ·M€ãéí¹–(1£sâWÇÓ{ñ$Ž®áäõàhzõ”Žg´n<MoUÚÉœÎh å<™Þ¡;ØäŒC3ZÁgÕbøcJÞ5“NZ§?Ôsbw,ºô)[:i=6`N·â ?Ü>ïÃàļëI'áy¯Cð}:½V׊žwã<‚ãm]W 9ïÖ¡àhÞíÔ ›˜wgGó®Ü%ˆø‹ôq…ßmk×XOÍ»ÖÚáÑé¼7“‡e=ö®ææý_Æ~wºJá„://Í»7ÁѼ;­éýÞ/ºÁñ~wcr3šw]ZëÍ{=uÀónK8HÍ»+/‡ö»öXté¼kU—šš÷Ò@x"‚ÿKŸê5šçý?ïý?}ó¼[ëêNÌ»öš›÷ Áñ¼—ãgÕˆý®j<:ž÷fLì&ô¼­‚ãý^N¾ž4ž8xÃÇzÞMyThÞ]£ð»oÓ¸©+RÏ»ÊãwO>0Ü~ÆëÎÌûSƼ‰'aÞ¯ÈyWð1¿Žç½Ñ´žWPÁÓpäpÒ绫Àlâç½—©ç•2s‡Žæ½œ¾HGXl&îiÍêùÝó>hðÁxÒXmxÅ1º~æ}—aÏÛŽH€£p×யèy/çÆ+ŸïŠ9߇ÁÓý>ܨyÃ?ÁѼ»‹[éù*¥ŽæÝ¸ŠÞïV7xt¬çݴ갞׿ûv‡Î÷±™àz·æ=Þ¯Õœ•àÄ~7Ö0z¶ÌnÏÏûÔñÏ»…,Žö{•ÒÔ¼¯B«âŽÏ÷fJ?@óîj‹áhÞ­ñô~·á¹cíùÞz»xaÖøÝ]:ïÚÎÊõN°çß2ìº5À‰yŸ ö¨{ì÷Çz~êúJœïèÁñù®*ú|·ð©àNœïžÞïMi0ÛóúâCÅ7s¸GðGtnjÒž7Ç£ÿ¤ç{3…{×cãmfÞ»›çÝö;Ö§ðõa÷W¿Miápbuè†òÛL÷ GV@}Ñ6ŸHQƒ?ÀÑiPúé6‘.ÕëôîÉê“སý6¼×~½:¸±Óý=Y´V{8&"øc×ÍeËÒó£„esÈØïÖC*ÂßïÊ7†9ßÁsrö»fü6ºRˆ<ÞïÆN×´ß½óýÀîw¥ÍdUb{>Áñ=Ž×óùŠàÏé1n/×tð[8ã<é|:Ú Ãè냰ß?2ü6UH°øý6Ôý}tÜhÇç{9ÐxÞC^Áï·éQŒ¿ŽéùÆYGÏ{ ÷¸ÞoccÉy×.¡ü]'çÝÔpð¤-ûð•‹±¾wý!ømÚŒ{œVó霰çgö{¸A·ü=®.ËŠ¾Ç98 [þþn}CŸïMã0Í»¿ä?c»Î)LÏ{YWÌýŒ“–½Ç)×Դߦ2ß ðoƪFçúîq§çç}H‰m ‘àëÓóŸã2 Ü>§¬~gÈóÝ(H ŒàÇÔ-ç§šlè+8&yõlÓq™þÕ5ŸïszFº |cñèø|·—°(Z´žxwt¾÷út\u§¯tË\‡´”8ït¤-…Óa·iCp2ì¶â"mN…Ýh=oBòN€“a·iCp2ì¶â"mž|:´°Þ^E®äù¡#b)œ­¸ˆ†Sá±Cp2<¶â"bN†ÇV\D ÁÉðØ :tü’‚/Æ·nžèàtkÅE®0œ c­¸È‚c7—µt@zˆ\!8ÆZq‘+'ÃX+üuÔ¢7o5z÷Å8Ô­óÝN‡›V\„ épÓŠ‹0!8njVL„I!8nZq&'ÃM+üØáÛ5‚/Æ‹nž Î0€Óa¡ Âp*,´b"AÁɰЊ‰UN†…V\$ÁɰРn(›¯} _ŒëÜ™)UÍd°âvìØ’Ç­6û¹›‚aôW~ôrJDì‹,%€§£÷cÛ)Ø·{F? £O¹è E’uÜ»ÃS -×£r£Áàù ‚"xù>ùwo •ÿ†æë?p©[D-É‹ÚøžŒ>vœ²õ_æ«í7S” us/š¬ûJ>¼{}y÷…yçF·“ƒºø ĸNŒ^Õõ_擼š®ð¨ Qÿê'7ú E›¥yß®‹V1«ÎLö…ûF«Ò*œhâri‚„ÎÈÜçŽ_oÅT+ÜMwjQ‡à[A9ïùWn ä+ ¦wÏ¾âØ ‹|Å¡»‚£¤Ð—’vÔ0˜"¿^ñçŸE=U!¯פ'fÑ6Ü,zG'K1pR³k(ÀÞÅ¢ò/ÅZñŒ=dÀOà„ÍVŒ Um±nGð¤ñòÃøièQì…£{½çÉ—V3ÉK´à—f¸ãŸ$ǧ>_2¾âûá±ØhçE€SßH™{~?½G®[þøÇñ]à8¦ªÈß޳±üýÒÎq»û¹¥qËs8æØR/q8Á¢bß/pì8ŽoÇNâ¸(G€ëÙ¬ü~ýœ9¾ríÅ_OÇAÖÌ /Ÿü Þ?uþOÞÙÚ¼F?hÓÌe>v‰ž¾5^Îä3üÈ¿æåÈ7Ö®D¾7hæ{N€#òÇÀ E~üa†ùÏòŸ,ù¦sC1ySΕ„NH^ÝpŽä3üäO9äOì²ñnÌ-@ä‡þúU 'È[÷°±Ög Î!fÉ÷—è†\ó¾*u 'È—–!7Íí&gÍo¸5?sc '"¯SëN‘sä3|äw9äwùaÕ{‚üÊkàÔ†­³aáó¶› ÿ‘Cþƒ%1{ù!_¤Já˜ü`›‘ä‡f8¨‹M޶Ù|ÞN¾×&…g’‡·ÉÙ°›³D¾¦%ÔÅæ,áGò‡Þù.‡|w3ù!¾íRxùÇõ<úã:ƒ|€ÚF9zÃB [€ÚFIGò‡ üN™çœCê™?¤´¥©*”ï8–üà|!%?üp¿h]gàxÙxG/(ý pJòŽ1Ì p·ÙÂ¢Ýæ¬ùmÇ[•®"­J£‚¢Þvyíò³›`ó¶ŸGÛgpDÞN5s yÕ_ÿ¡V?ÀIÉ+Nòó•t¿™Gßo2È8"ßï+OJ¾†„ä§ÌƒÊ0æÁüÕšÍvÜ>gÃîù «´öœaæS8%ù’[ó`×í¿üwùo^ÛL‘â&åœIá”ä£*áò›ýÿÉ!ÿÃfž<¤Šº.-¼VÜ5p†žæÑOäoئ$¯ýtÎ2 prÙpÚVÝáÈ¿äaÈaþš\6µ¯æàz€S7)îháøqœGÿ8fp¬ç§yGªÒ*(QpJògÌ),›ÔE›£mÚ“°æ}ÍRsòx€SäkFòð•ÄÍ(ê¯=ÿÅëùþ0"¯USÎ…NmXìy3§¬m¾@×}å¨Ê/FU×äŠR•zp}Ì)7NfÖ0†Ù\u6ä²^F?å˜Ä'Á$® u“*œ‡îWN-Î{ À{p‚y?å,›ÓFZó¤a檪T)<“ü3Î!ÿÌ.›ÒÒ†ÙPí¡S8µæÎWÙ| ä·9ä·ü²™šž#É7¥†ËÀ3%ÿäßrÈ¿ÝLÞÖ´ À3É€ü!‡üá¾ {¸<ø.N9®ÓY<}‡mLeÐè™äW9äo7º¡/àк+À)“xü ë‘üáÿ†{ÜwÎ5ð{ÏjmÆ”¼lœ™³ùœÔ6 §m€<,Úïœ5ÿ}`%_WÆR'¬é¯RU §NX­™VϪòD÷“#ùþ®|E.ë´B£“ËFqËfVV¿à»øÍq}üv‚=ïêRªž sœ\6Ž[6ó†=ƒqrαmÎkVò•7¤I\…¼Ã§– \˜á`žs¬Ê3oUª)ç2!o†Èˆ­S8y“j¸›Ô')Ô²’WuCnXã Øóþó®d!ÿä¿rÈñä\0Ö56…çÙóîq>çèO‡üž_6Jäu1wÑ p‚|d˜Ãl}ò‡ò–|åÂüEFêJCdàynÍ«°æ?ügùOvÍÇuR'¡NŠ_6Ž[6qÔi¡Nê$×I1’ë¤NBG>ª“: uR§…:©“\'Åë¤NBG>ª“:1uRë@þ_ù,ùAŸcòªÿJ¤œ"ï8ò..ò:-yä"/’üu‘×I(òbÉFÛ\yмNr‘MþªÈë$y±‡Tå˜CêªÈë´Päu’‹¼òqÔI(òbÈÇuR'¡Èë´Päu’‹¼n%ŸyÝCÔÅ&GÛlÎùš–üu‘K>ÔI„"¯ÓB‘×I.òº‘|Zäuù¡Ìê´Päu’‹¼Xm£½a¯‹¼xÛ¦âl›¸Èë´Päu’‹¼8=oé6-òb$ûçOB‘×i¡Èë$y±ËÆ;zÙ\y±’wœaм`Þ·9ËfË,›áœFOÈW…ÑΣÑ)ÉÛŠ‘-”QŸä2jnÙDeÔ'¡ŒšÝ°%gU^•QŸʨOr5gÏGeÔ'¡Œš÷ÛTœß&.d>-”QŸä2jÎõáÉk *£æƒ \€2jÐu‡UyàU¥©jÂÅíz«R§ô ¨J[r¾J¸Uا…ð“\ΰQ øI¨ç×…g’‡@j›‡m÷­ùÃ}äÁ,ls¬Êöt#yÜ.ãòpÊ´9‡T+X••&Ã÷Úè{ЊVeÃY•°ß!´ÑæDFÚ³°æ©Ö*áÛžï“<ø¨Ûw«o\6ýMªR•Oáyä¿@Qåèù/þwY9 ]VX{Þ0Våu—•ÓB—•“Üe…1Ìâ.+'¡ËÊwØœï§óà$Ĥ¢¦ '¡Ë Ÿ²Â-›«.+§….+'¹Ë ¿æI/qÚeåòÏ@þ9‡ü3\°´¯2í²Â{̸¹«.+§….+'¹Ë ·l¢F%'¡ËÊ=’ãä”cÛœÞn&ŸvY¹‡<'§Ûæt¸oÃî#Gä)ç„=ÉÓAä´ËÊ=äW9äoÛD]VNB—Ö¶i8ÛæªËÊi¡ËÊIî²Ây‰£.+'¡Ë ¯mNÛÄ]VN ]VNr—Fòq—•“Ðe…=a5“ ]V@×ýä¨Ê>¨= g¬ÇË *KÏæÏÍŸ+œÉ¿ççN5ÊtE=dÎ¥pÒ¶±œmc£3§…þ6'¹¿ çtŠúÛœ„þ6ü†U܆‰X´?9kþ‡_ó÷¤UÙô§W•ÂI·å\ܳäaÑþæ¬ùß­”8¡)ïAÙ«º:…S¹Ä\@MC@í’~sr~;ÁKìjæ…xUé8Uw:-t:É…¸ rÔYè$tb7¬á6ìUg¡ÓBg¡“ÜYˆ‹Öžt:¥…xÿ|Ãùçç‰; orÈ!2BZ•zˆW)œLYáÂ÷Súæý_βùÇ/¯mS…²Êü²–WÙÿuU:-ôt:É=XÛ¦!m›´§»l¸ôëžN§…žN'¹§kÏ{Ϊ¼êéÄ.¸÷t:-ôt:É=˜š‘¸§ÓIèéÄ»û8Ûæª§Ói¡§ÓIîéÄIÞ芎^÷tâÓq9É_õt:-ôt:É=8òŽ–|ÚӉ߰šÛ°qO§ÓBO§“ÜÓ‰#o)U‰{:±ægÛ\÷t:-ôt:É=ØeCצ=ØeÃù*¯{:z:äžN|"´¥¡¯{:ñä¹5ÕÓé´ÐÓé$÷tb=fZ‘A䤧k˜yÎ0»êétZèét’{:±Ë¦¦×|ÒÓ‰÷Ïs…W=N =NrO'޼VtÖGÒÓ‰Õó5çú¸êétZèét’{:±ÚF“³´§ÓÉÿtÎQ•ZP•ƇTÚÓ‰%Ïùm®{:z:äžNì²!ýó¨§Ó5#tÎQ•ú] _U$ù¤§ï·áRV®z:z:äžN,yÍ¿îéÄ_F¸5ÕÓé´ÐÓé$÷tââ°Q‹˜“ÐÓ‰7̸›ÔUO§ÓBO§“ÜÓ‰ "פa–ötº£È«uQåh›j{³äÓžN÷Hâ2UNX§zãý6Þ1‰×=îhPÁŽ«r6lu¾YòiO§;$ßÀŽkr6l#nXJòuÑ80‰›û6l;®ÉÙ°ÍæVòvX7hô¼ ÛÀŽkr6l³½‘|UØ:4*iîÛ° ì¸&gÃ6o7’7ýšo œ×Ü·aˆ49Á…fë†E}Ìî‘GÏûÍ­äQï¾{ÈC;,ŸÓMË?òäMCFFj[BR¨”ü6y7<-4<Éo"ÞCò¬|Nš–æoR¾fм®ÞÖñÐ&ÅçtYñ¬äãÆƒW­À¬è€ÿ¸«°ÑC›ŸÓeÅÞHwM¼‡| äÛò-OÞiRòÊ•pÂ<Ïc64]<-´|<É-o"[>ÞCܼ>ÇKìO<ù¨åãIhùÈ“ç–ÍUËÇÓBËÇ“Üò‘Ñ6qËÇ“Ðò‘íéDKþªåc8/4<Ë'xÿßxð,4<ù3×xð,4écvù3?ç?KäkZò×}ÌXò¡ØYècv^ècv–û˜ÝH>ícvù¡ŸÕy¡›ÖYî¦Å’Ý´ÎB7-VÛ8NÛ\uÓ:/tÓ:ËÝ´(òI7­³ÐM‹‘|\F}ºiºiånZ ù¸›ÖYè¦uù ÿ“Cþ‡%wÓ: Ý´¸euÓ: Ý´Î Ý´Îr7-nÙDÝ´ÎB7­;$¿Ëj—c˜í¶‚yà%ù´!K>d:…†Tç…†Tg¹!C>nHuRñä5G>nHu^hHu–Rqä=e˜á†T¼ªTœªŒRRå†Tܲ‰R…†T,ùбç¯RRå†T̆R…†T¬¶i8mR¢Þçèù=¯çãžNg¡§G>êétz:z:åžN ù¸§ÓYèéÄ«JéJµÇ9/4ç9ËÍy¸6jÎsšó°’/™ËHÔœçÈçÿæÉG-bÎB‹˜;©¨‹C޶9ðÚ&nsZİ×@îZÄ´0ïmβi׬IWߟ….+¬ª¬™esÝeå¼Ðeå,wY¡É_5*9 ]Vî!ÆI›cÛ´ÛÉã.+÷]׿¨ÊöM º¬œ….+÷¯Q›ãtj÷­ùÃ}äA×µ9ª²ýæNQ£’³Ð¨„w:5œÓ)nTr^hTr–•°Ë†Òó¸QÉ=’‡ë›ã=hõË7*¹ƒü7,Úïœ5ÿÍ;ZãJä³P‰Ìž°š»Œ\U"Ÿ*‘Ïr%2·æ=íhM+‘Ù5ï{þºù¼P‰|–+‘9Û¦¦î°¸™·m,gÛØ¨œö¼PÌ{–‹y¹ÈHTÌ{ŠyÙˈeìùëbÞóB1ïY.æåý6š:¤Òb^6¬Ã]¯‹yÏ Å¼g¹˜—”üu1ïY(æå¯Ž»º¨"õ¼P{–ëa¹›TíIó ­‡e/#Š9¤®ëaÏ õ°g¹–s}Dõ°g¡–Õóšó\ÕÞêaÏr=,C>®‡= õ°œ>ª‡=sõ°àlìr|•Ý/wÂ^•”ž…’RÞoÓp~›&Êæ=/äŸå\bζQ”mƒs‰ù8,·l®r‰Ï ¹Äg9—ø6ò(—˜'_qäã\âóB.ñYÎ%¾‰<Î%¾GòpjrnRÍÛäq.ñáûÎ÷&ÇÎh턌VŽ|”ÑÚ ­ÝBFk'g´’䯓B;!£•&•Ú ­ÝBFk'g´ÞJ>Éh½‡üÈŸsÈŸ%ò5-ùëŒV–|H 턌Ön!£µ“3Zo$Ÿf´ÞA~È)í2Z;9£•%2Z;!£•Õ6ŽÓ6W­ÝBFk'g´R䓌ÖNÈhe$g}tBFk·ÑÚÉ­ ù8£µ2Zï!ÿärÈÿ°äãŒÖNÈhå–M”ÑÚ ­ÝBFk'g´rË&Êh턌Ö;$¿Ëj—c˜í¶‚yà%ù4£•%"#ÑÚ-d´vrF+C>Îh턌Vž¼æÈÇ­ÝBFk'g´rä=e˜áŒV^U*NUÆ­ÝBFk'g´rË&Êh턌V–|ÅØó×­ÝBFk'g´26Îh턌VVÛ4œ¶¹Êhí2Z;9£•#e´vBF+G>Êh턌Ön!£µ“3ZòqFk'd´òªÒpª2Îhí2Z;9£•;a£ŒÖNÈhe%_2—‘ëŒÖn!£µ“3Z9òQFk'd´ÞqH@]r´Í×6qFk'd´²×@î{ÑÚ-d´vrF+cÇiZÑʪʚY6×­ÝBFk'g´Ò䯒B;!£õò`œ´9¶M»½‘<Îh½‡<èº6GU¶oùÑÚ ­÷¯Q›ãtj÷­ùÃ}äA×µ9ª²ýæNQFk'd´òN§†s:Å­ÝBFk'g´²Ë†Òó8£õÉÃõ¿Íñ´úÆeƒ3Zï ÿ ‹ö;gÍóŽÖ8£µ2ZÙVs—‘«ŒÖn!£µ“3Z¹5ïiGkšÑÊ®yÏØó×­ÝBFk'g´r¶MMÝaqF+oÛXζ‰3Z»…ŒÖNÎhå"#QFk'd´²—ËØó×­ÝBFk'g´ò~MRiF+Öá®×­ÝBFk'g´’’¿Îh턌Vþè¸k`œÑÚ-d´vrF+w“ª=i¤­ìeD1‡ÔuFk·ÑÚÉ­œë#Êh턌VVÏkÎ{p•ÑÚ-d´vrF+C>Îh턌VÎ?e´vBFk·ÑÚÉ­ô {•ÑÚ ­¼ß¦áü6qFk·ÑÚÉ­œm£(Ûg´òqXnÙ\e´v ­œÑzy”ÑÊ“¯8òqFk·ÑÚÉ­7‘Ç­÷H®BMÎMªy»‘<Îh½#|ßÀùÞä˜ÍA"OnØ4£õÉÃm¢É¹Œ4ç%3Zï!·‰&ç2Òè›%Ÿf´ÞAÞƒ®ó9ªÒ¯yÛ&J 턌Vþ&ÅÅa¯2Z»…ŒÖNÎh½<Êh½‡ü#Ì!ÿÈ“’B;!£•%o8òW­ÝBFk'g´ÞDg´ÞCþÈ?çæm›(£µ2Zï°*=dûøœd!ÿÁJ>N 턌VöÎݤ®3Z»…ŒÖNÎh½‰<Îh½‡| äÛò-O>J 턌V–|͹û®2Z»…ŒÖNÎh½‰<Îh½‡ü ÈŸrÈŸxòQFk'd´òä¹eõÿÖÅëç8úÿ¸öõ“'ðã×ñòW¸2MŸŸ{Òé¢À?ÿ~&Oõo9HþüÔ¤ð¼ÿÛùMù@~ ¤bòá„8E~Œþ䃞ÿßË!ÿÆ’Ø3äË*…“’÷ ypïÿOyC^ß·lô]Ëf7ƒ†¿n'p‚¼m*š¼‚àùþ9ŠüCQ†\#ä]y'-šü ‰R8A^Óäcø~søëvò'$?¥iaòÃ÷&S8&?Dºiò«bž¸£É÷ÝNàÔšŸ¾‡%OÀ ÉWEÃI~Öó%èù2GÏ—÷éùò>=_‚ž/sô|yŸž/ïÓó%èù2GÏ—¬žï¹—fIÏ—÷éùòä9ä÷-›Ã}ËæäO9äO÷‘?ÝEÞ†µ9ÖJ¶Ò´¶) þn¥ [1z¾Ð³ª´°amΆµÂ†­kFòT.X~ÃÚbÜ2ˆ¼*<ä]ØG ÿ˜CþQü˜MIîq§$?úm(ÉCj¢}òO9äŸ$ó€\6c"N 'ÈOß'Ö|£ü3Î!ÿ,éyVò.…“’·œäaÍï€ü.‡ü.CÛXÈâ8E~\u„äuü;Ï!ÿΑ‡tJ^Á?pD^éB“‡TU8pûØ ÿ‘CþCR•Š‘¼F£“æ£çUÚ.#6ç2b…ËH­I“øa(Iáˆ|ÿ”¢–MÿßðÈ·9ä[IU6Œä+4:¹æÉk0ÌìÿÊ!ÿ%i–¼Oá·mØÙº°`ÛØÛÆJ¶c¬J ÉBö$Ýa+†|8a¿üwùoIU27©²>NJ¾âl ÿ äsÈÿæ,›ºJáyäR.çrÂ!U—ŒªÔxtŠ¼ÖŒël7)—s“royÆc¦!1Ò‰7)ÃØófÞ°NX—sº÷ ɇ¤P÷.Ižs:Á–q{ ¿Ï!¿Ï‘|X6{IòŒUYBš–ƒ;¬Ë¹ÃºƒtÂzÆoSèNJÞqî>Xuà1s93w¼ü„žÂIò–!¦‘ÃÌåfN0ÌjÃigR8¹l8U ¥F 3—c˜¹ÏÛÉÇËæS"ï8m†™Ë1Ìœ`˜ÕÊ1'¬R)üïËfX7 y0\Žyà$ó@Õ‹’ÿ¾Ùžò|áÝ€üOùÉõA’èÏý*…còýüÐÖ… ¶Ë±mܯ¤mÛFA)±“l‡,›3?ç?Kþyæ Ùû¿ÉÝ̃@þ_ùBLʰö¼Ká”=?ŽN·õá 79äÍí1©¢†ÊD€ß múU¦„u\NXÇYɶaÈ[«R8y“b¬JÝ6D]N4Ð9é2¢im£!—رÑÀ‡KëbÃÖsÙÅãÇK±)‡¿’U÷þ=x`‹‚"@/ëï²(ÞŠ89&Ìl^’‹}O~îõñøò]è$4:ÅQ»ùMŠâõ"ˆù¯åA $;€ÈA컼¾4 ÿ}vd ð-Œ¾½}Šâàï%_»N‘ŸUÄðÔ' ò™Ãñ“^¨«bj>Fnëÿ‚Ñ¿þöŠý?¬S8d´¹èù±³v}üØ¿—M:ÿuÓ&AÄ»«1”CJþ¢"žç Ææ‘ g ÷A•åeô§§9Íó´Í¿ü=þ2ß6/Ÿ9ðÀO9ð3ÀÏ9ðà]üÞý5çÝ÷óšØì¿2àÇÙ¹µ9îràoËï¾ÏƒèŽ9¢û˜ÃÅ›uÈäÿzáð×-ðõK6L_ràoϘ¸ç^I<>3êTÚs¯ æ§Þ‰§Hþp÷ûáÇ;#¤§rX¤Ò+†ËSXEÀS»e; IÅÍ‘pÉœÚ-›ShU4sÂÁîOæÔîæÔ᱌£áˆ›cmÞ?å’§ê1H²Æœx5^®%;+}KéóYEñ§ýË_ š¦Náä±:žöéÆ\ø­¶ *ì| ÞÝg î–mAüî¶p>Àwßý‘¼®ëN[$Œèbò·Z¢ª¨`qýÉÝ-[¢Ôü¸:…KçðT ƒ´Ä>låD b¢÷½Õªºê x–U»[¶j‰]½”\2^ß·ªø<-mø÷­Ÿ¢ÍûþŠ{>_ãq2üõ7ø°è/þýIß_#ü¯&îpµ/õ ×"|zêÐ iýBOÖì¥ÀÇ=œ_‡ýG±~#Ȯþ:êÝô|(ÌìZ‹à/ŸÄùµ"LÜ~+ Ç6EัÅf;µ»å¼H›„ãrf1<İ/«ù)WlvÓSœ·g³ ðWa÷b³ŸžÚÓæÍf#Ìõÿ áƒP=(òŸ·“—Í'KþOËæó®eÓ_q—È“.èpòï¿hgíÃTíA¸ßƒn_?ûÓ4ú‰ÙÖëG~ôõç2\ЈëÓ2ü$Àÿ[†ÿÇÃ÷?‹ð½`¢^á‡aâ6‹ð/ánqz^„Ÿžyø÷~þ-¬ºßnNv2¼ÀÏëEøY¸–uÛEx'Ü«ÔòªSªÛîŠÃ?pð­`©l–áªÛ/¾Fß¿-Ã…;åa½?÷õ½ÿúm»ÿnyøÏaþ#\ˆÏËäÏùË¢û· Ü㎲P8+ú!¶¢[Ñá4xz/ŽoÔY4$NÑ‘Ô>~}‡#8¢¢§¦Ki¸môõX? ^º+Ž{ªyÂÃÐ|ZÓçeäˆ<Îð#çKß]…\îÁÒ_‚Ów¯ª¹J.‚#AhåU°(ŽŸô\3·‘‡ø6àGÁ5vìa™VÓ®6Ç£hw\à\8ýw‡¶«4ÛâcÏ„¨W´¯õÊãð[|MWÒG.ÉÓ*æÊ¡¿f]àÈ*­¦6OÄM,R¢¯<ÜM÷é½p;ò£×÷êQýÇð£_lí#À…Ñ•àüèŸý?½VÓÚ´é6Ñ“Fà(ÍTMºI€{ÚÕÕ ·Ìèãms™<ÀÓ<ÑáÛmnE†×#¸ÞÝÿïõÇ £'zN;.}ðªÏ%²Ÿ›—âQÑWÚ±­JÇšãî<Ÿ¡ÚÑ¢ ÕŽ^qŽ‹59(ŒÃäÓÈA/¹)Ñ35ôW?‹FÇM$/>A) ½Ü1üõWÑÚæõW³ª2†&[äå…H˜Há{ò©1Š—Íæõ¾y½oÞ_ï›÷WnÞW…· Xàôô.J>Œþ*xË Øè†°™ý› øªø±xâšN ØpÔÃ"t_FÇ«ï‰Õ4˜<êÚ“lˆ5è:W#òyk{߯Ú.o¬­0ï»ûæ}wß¼ïî›÷°±&5Nf4…ÓÓ»(ù0úNð/`=ÝDÍõ&h.W-j®7AÀã§ÛÔp÷™î>SãžyßÝ7ï»Ûç]AÿÏœ8 Ÿ6†WÇâ†ÝÝ·awËvÁ„á&®25£ik‡à„¦­8M[7)œš¸±ƒ1q%°AÔd¡¢ÎCEU{D>mŠÝ¿ûèê‘'îí¾‰{[ž8É4úá'nú<0yD6NLÜØæ†ÚqÁÑÄ ‘ãÉöüFVeU¡ÑqšæÔñoÅÒV¾áTåFR•ž¥*ùa~~ßûæç—›ŸÕŸæç—›ŸBÇx³\pGý² u˜Å7qˆü†ÛXó8»±öâô†wÿ¦W1Ó;TªÔÌÕ¯ VÌôŽ….”Þ’öK›Â©í7~f75x¥p¤7GÝNÏOôîšwå)¿ÂXTa¿»»Pﮃ_AKï>ÂÓ¶¢¡gm4:¾»MŸ”G®¸þ,1N¬ÍHB†ßü—‘ WjÇ›_YMŸªªBpjó—ŽNoWAB†YcVQEo?êÝqÑ©½ËÆŸùwÿ7–c6ÖœDÁ‰5ú}¨5‡hœÝXÄ–iJ<ºÅŽ’¹»Ñý KW³±j…àÄÆ"=áÓ)œ|wù;t 'ö®&+úÁ!òÈ£Õq)Ë#̬HtFX6•¥EW‚Ÿ÷×ËftÓ Á {fÜq¸âtØK)œ0/Ñ^K”©¹^Ñ¡ê˪£¶ ¸Jk›Òï¾JÞ½"ßý ]%ï^-¼û/6aæÑÛSñX3šÖUÕÒ9à” ¶¦5­ö6…Sž"¥ÉûK¿šNÜ_ìTŠšv…Êh="ß cLñVÑŽ ð–Ïû<­ïp€g ày8/àô“B±€ùj!à?­o8_hh–vo€¶BÓ0åS8µÇ5#àz®VpBÀÍt䤟=*Œ5‘¯6(†7F¨dü´¼½ooï[ÁÛûVðvyo… ä«mÎ øIpþÞx7´iêù#8!`Ãĵó)œ°n#`à„€ÝØ}ûª°fn/‘¯Ò§”-Ã`~|=§Ã}+øpß >Ü·‚ˇÜAXÁ@>ý*ïßV0ÀOAÀçû|¾OÀçû|^VgAÀ@¾:çà'¾Zöóu_<™CÎÚ†Qp5 püM®brð㲸íë×âI3-Y&s½~MûƒòO“1ûØP¾žÁ<ž‹¾"ø=å¦Û|’é;¬­¹Ú<‚'ï>daLÙ®³hÇ‹M…GO$4|ÂØ¥•C*túOjï 훊*!îOîà¡ðkgÚØ‚b*þY'ÿ®õnîÕò¹Þ.OÜV˜¸-?qsôĈ8š¸Þ0SôÄ5 ÃñÄù)ÁO\=µFp8Á÷¸‰U¤Úu³ŽÏÞK¾a{<:ÚãýÚr¤ÚuuÙ 8V»/Á9;+M>®'îqÍOÀ‰‰«&ƒž˜8…F'voÏgn¡ ¹í^Ý¸Šœ8kJ G»×5ª"ÏK£áàh÷ªr‚£‰ëW£Gp…Sûr*Ù$Î8ÈõØ î_;fzázºãÝýõŸÙ—a[ï8÷Á¸} 9½Þ:LíËþ\‘Ók„l"òØ}0~‡h½Ü»?¹Þ2vožK€SÓÛ0»7¢{‡ÈÝ;l€†€#÷AI¶³:Ý×6À µ[YúšR;…àØ} *zzk]£'pÛ¨i÷Ž?0Ó pqz9Ók rö Mïøí:êT…käáGPÎÞ1·Pؽ~zõÅ’DÓk,˜‚vz•UVÑ×·œ;½CSDúšb”Ãä ¼·‚GßÇú LïáOÓ{|Y´v/ü §¬]2¦<ü *Àñ/§.BkÏÝd"8aíN¥•é¼+mßU/®-4ï¾³Á‘ ïsÑÚ£×”±Åæð”Ì{Ý@@ü¸_ž8A·œ:{knâ@s8¡œ5sQFc8áºoÈû¥r¥Aay–äÄUn9N™Vt°Ì;¸¢8ž¸úøN&N•ÕlsË'8}N:ÿzâø};åõÔDï¸|àhâJ)—@ŽZæý@Oܘ¹jÉû¥jä!8š¸áÈ!w\e¬ApÂ;•Kl»Ô n Ðþã˜u¿¬R8«˜8 H>‚ãûÿt=Åv¬ž¿¼à k—Œ“”.\:Wô5¥EìŽOBPCò\€$‹Ëi7ÆX×ãÌ–¸x¶ëŒéõèh×üôºJ‘Ó«CubÇá Žv\’³"8òÚ^dèXŠ<Ú~ý(d¬¿ãÔޝ)¥fü±¢œÞ¦zÓL¨Ö­àq¸8½§e·ÞIä$ºõµkÀ¡zZó神<‚ãóÒ): fÃEáÄ»õjwq2l>ö ‚£EP_Ì,ì5“'Îˉü>u5Â`'µÉǪ¿d ã%àX9ûɹ„6¬kTƒàX9O_€Æçe _Ãàxâìx¿ÜœT2qý?<þ‘6¢à“7Nn,Úï]¾¾¿ÏÅÈÃù>l…oÞïcêÚ0~Xóß{þ¼œ# 8ß§Âpâæ89­BÕ%¸ü-õû4õxk^ wƒï?ù}¾sÒFBNù÷A0‡j:<Ý›çÜál=:~Ù[C5†#÷A9ÝÝÐôÚÜFßÁkëh·^¿l*G~ßhŸõàêàßIÚˆ«§ê·õ·pƒøþSÚÈOŽS¾¬­Á)ïmíª’1$§¼µ´µ Ÿ'ŠáhhËø}‚AòÃ;åû«¹§ÝzÆa8ަhM9åÇà^ƒà?‰SÞ4ÕhË­§üÏŸœò?ËîƒAEüì…¬ ²rv,†iœp~ŸÉ#„àØª˘CpÿÙóái7%Mâ´UÝ?¬û`pIR§êp*Ïß(ˆàøT5—,ôTkùvøÙäË`cœÊ«¡¶àëñ).©h_¼0½/-7ð—btá1|/vT™Ÿú¹aƒá¿bÇÁWÍT]¾‹]ÃA‰xÒ%M æ‰Y¡ÖŽÍ׫Ã_Ä&kGÃq4ž4†9jÌq$Y6.Ô¶ëù)\û&+DÅ^« \ø|ág»¹<…¾<ücã¾>mÇÜÊG[xßÓöÏobÀ¤ðV×ó&ƒè§–*§7áMÞ`¡Œ°=ðƒ¨ÉºÁEr+ —>«øÙžùA.ÅR§³0È9‹»t[rýU*¦IˆŽÛe_àØÔdŽê”Æ‹àè󽽡F~Eb°ïý÷Ê£Ž“Ñ­Rxúêq§OÅ¢fá( ££¯¬sêù‹,yÍVJ*Zò¾iK¾v´™§êZ!8–¼ÑÌ÷;´"FGH3k¾íò»“^‘2Õ¶BpQÀÇ^-L1µ zç<Þ5(ýþN,ÁE ½3ÈOŸ1¾Ë;$@³ïîè.’C¶BpâÝé;ÄÐϬÆð½»7‹ïÞ.¿{+¼{Ço,¶B6š÷î¾ypÔTÛNŽß½[~wþsYŸ=³ÛG{Š`ºü™ðã" ù®Fß®‹wfte§J"÷þ†Ž>ç ©ti{z8²†¾I+âÓ´EÁ ðíšnŸ3啼ðîmƒß½ö{î݇Óàr”¡w/!vàíK^‘ï®ëÁéWç]°§»Þ=Àñ»_\MÄ»ÃIàí!ãÝοûAêêsß»Ÿøw7övßãä;‹àiç¡?½ûiùÝO»ÿ¼óïn¦Rüî5†8Þï“¿» _üðµ[0Sb~wz>ÀÞ3öûnS|2 UE]N…îöÈg0¦¥£^á'ʈøN¸põ'Ëq.¬ÆÆ=¤Î¸K›67ª4ÇéÛê¾{8¾òKË4¨5î™Õ4†”cS‚?+ÀwB/öÞ‚c9*®‰¾‚RÇÇr¬”]”#Àw‚Å×[ë¼+®ùäѸÛ!9Öš”cí-† ßÎþìï ,ÇškÐJÞܽ¡=ãè¹öÌ‹ß} [–c/-®Mã͵ï³Å¹øN°p‡ÝÏ4ÙQ—Odr„ÜÌwèòVÃÕäóÊüS!×$ÀEÝóÊs4œU˜,€»Ôަaôc(Ypq_Ž #Çýàî€öŒö4ÇújÏÔÚ3 Çþ>ÀéðP¼p‡ûýÔÌ\‡0k€K{æøX|6ÇÒ/Íu€£»ÉC1îxÏ\ß:ZÅtD2š´BÆÁ‰®›“ …}é…®ß:¦O äÛÄYaøV0°·¿Â+NV"zÅ~ +'ÚÎ^àHB¶¾T[½`‡{Â Ž•ŽJ.ƒ|þ>‹ºFpÄQ›Ë—1GÈ85‹u<×_ôÉ2sL?™XØð}×ßàJ›És“^SŠÿ—veë­³¼ú|?Ͻú3<&’4C“ºm–{ÿ²=Ä£Á >ÙÿÚ_ü–BIØÔ xÈñ¹+}ìÕ¶9®îåhs¨¿ãàkì#N݈£®üÝãX´jÐí#Çýýr´‚¯ aA^ã%®ÄÀÉùèÕ19nî–£{†o'Œõ-6€àè—€â9‚îÙ¹±ÞÝ˱H‹ Á‰!Õ”Vyöáݺþ¢Õ6×z÷T †ã™frz¦eÎÊ8æ˜{g¿Mò«‰¯ºÛ;¤+NôEgŒU.*àa±q¯‹׋JªÒZ…áç0©ÑL´ ÍÑÞJ^…ª«/äà¡æKŒ½åŠæ.ÀlW)M{f)Ã1/nÏB†»›Õ<„#޹1C‰Ѫø!Œw×Uî¯kÍÌ=ؾˆcæjpq´U6¬XÉxuðc’’Æ+>Ìȱ4·Ƨ­?÷å{TËôróñ)©²*Ã9øuf«¸Ê}«ìš)ôÍŸδªH«–ªå9êÂfþo–ª)¬oO1k&»UÉÇÚ”©Q!õ¤= »ÜïV 7×LÓÒ*.íU<åäØR,©±Vyåêá~Á¤_ß'Çv°µ3þd¨h£!¨äeÅ®ëî ”â¨[›/ᨠ&;Öe®àÔâà«”Wè×±ää¨n^HŽÊ­k€‡¥ Ž™*s¯ßÂÊØ)Ø;V‡ç­¦Wôšq¯îœ>bR•2*Cðí.¬mµ¿Ýsr¼e°"Í—» I€Ó'I’c«Ó,‚v¡+ëïêÜ|,Jb¬»-$UYç:!ÇTå¶BðÀ—ÞÎG Öë‘åXª[¦6>IfƆð°ˆÏÑîYÿ9†u‰\¸üé]ØgRr¿6Ú½j pÏ”E‘…pbW¿½‘ô-œ<¸yOÚ=ü?¬MQè’ëÒ=î ð°hƒ´fJZ_oÂ<…ʼÂÇ,¯È³‚ÒÚ"xX`€ç˜+ãB¢ÝXã"{©—âÏÚ=cqEt*-*“ì›"/Ë Ã¿ÑË*`Öüòg×[9­Fˆ&x8kU_E„èâswªü·AQù¥—ŽÎÉÑØŒ<+˜îÎ&­óúQ=ïà«¿Py˜Q ׯÛä'ë¿zerno?d”|8&ç6T¿î¡‘=×È^hdO#›óØÈæÌ42ü@7p©‘ï¶¿«ÓâZ¨Fü}õ&ÉGâa³ª[YûïÉËù'‘[ß__¦%º L=~µŽ¢´9Ž{cï¹’9î%ŽÝf¶'iÝàïç‘ü;7Šý y€#ò-¸w´Ò„ð®‹ïŸLßàØpcà xÈ~D»Ø ÂEއÍÈñ°á¥}Ú_vLOú˜žœš*ig­ï/Éî8×:=¡èÁ‚¸QÞ6r:2‚h-c\B|õ°bÅ.îâSZ.vÖ̉[3'aÍœÎËFñ1Šéè˜ôàR;Íw½Gï^Y½{å–\c0«w¯œN±½æ»Þ£w¯¬Þe9ö²³z—åØ;ógõîõ½{eõ.G¾Èsn)«>«Ó®¼N{`8vúâz²›]JiÎ*»ëÃÊ.+|NÙ]ïQvWVÙ±]ÌïRvׇ•Ýøf˜ŸSv×{”Ý•UvKFñ3Šã¹ÁƒK]\›d} Í0LûÖ+²‹Ç6Pbúr±‹d‹1Òƒ·vôï†ë¢….Z®‹Vè¢]ÖE»¬‹öž.¶›Æ­‹ò–ÅtàTûXƒ¹-ëÆõ¤íJá6‘£¸eq÷ÇÁr˜Ù²8Ž-Å{¶¬yyËbÈœ"ßÑQ´¬ áòQ¡Ž5DZ8Ö1a¢\æxŽWŽãUàxå9fŠÜúûpÂ>wä9ŠG.Žc#ȱԳ›{8n`>òˆžã†Ÿ˹Åpr1•OsÛên$/G y€S“ /W=gE(d8¶;¸ØÅèâ×Å¡‹Bû,Äñ8©sgEŽãx†AÝaÀ=< í2)|Æ€»(p\ÏËfÚ9¦‹n¦ïéâçjìâ'S’qøé"À‰.ZÍ8ˆò1´¢³ÀÞŽw˜oGÎ|à”;`þðî«·o„€¥eâàaŸÛ‰ÖŸ‚gŒ®[ße£‹é;À Üöþ‰ëU¿ruw|ÆÙC#yÑãÈïù*¦Ëä÷1äÇê·\´Ù걋²=ÄtàÔé­/¼-vàüäš1BFò¬ò!oòå<ù†'_jó4oÜÈËÖ CàÔäÊf'À›\Ágl˜[e†é"À©.ªòf‰âspBºxš÷üŒ} ®ï¡ïiq‡á°¨ï¾ïE®žæý%o÷lxì†÷Çö½ºgÃû[¶áýq˺ö{vÃû»gÃûc7<®ïÊÚ{6¼¿G—u1–œè÷Œ¿{6¼?vÃcɧù=Þãä'Þß]Þß=Þ»á±s³2÷lx3“knÃû»gÃûc7<ŽüPCxvÃãÈW:»gÃû»gÃûc7<Ž|Zå÷lx+C!¸¤ø›±‹ò…ÓÅnËù»g¿œS*Õ=ûåß²ý’›….ïÙ/ÿîÙ/ÿØý’í{qÏA{Qß²ÎÍì~i“óæçûyÃ9ß8ê»nÏóûåä ¢˜=øÌ¶x뢼-2]8ÑÅ!±~Îù~ãˆ{bÀ«Øn#Gq÷ã8îyŽ©¿ÓÞ áŒóýF^v¾3äN7)s_ %|Îù>r÷^ŽcÃ&*Àçv©Gy—b8n9¦z6  àÔ$0šV$Êßnäåý‡!ߪ±\ÖÁspBW¶ºC?®‡´U>ãì»(:;¹.ž….V÷„æD¨Ú*Cð™Ðœ¤NEìõ/ËPÎÎ1Âþ{Yh©ƒ?ÔzéÅ­ÜZ—µ Ó:À©Ö3æzêáwfl]Ôo\ëuLëc¶fgž­‹Wr\ëMDë›÷½,Ú×Á©Ë6îÂ)Ó8»CûïÛ‡ß7Îã0À >„ðÇnËJŸ‰Ð»(‰\í².Úe]´÷t±U=·.Êš‹é"À©.þö#ñÆ‘¸p*½;‘£¨ß8Ž{£*ï09Ž-Å{"4näeõÈ8A¾àîÁJ­Bøœ‘8r•(DZŽàè&*Àç"4FŽb„ÇñÊs4}­ly“»ÞűŽâvÀql9ö¹22ÇæŽ˜²±ÍpÜœ¥Å”Ýal ‹I?Í;{näec›!ÚpÙÙ3§ú~W¨ÿãú¼4Ág|:cÅó×ÅßE[ÝsžˆØ²üóÄ|»‚¹¯ÛΦ¹•Î ¬›Û–õû9ù€ÿ«nÿòȨñ«4rˆiä 4’ÁW?ÐÈOL#?ROôøÕ/4òÓÈ/߈Nn†p÷Ý­‘áMº8ÑH¢ ‘ 4²‰idsW#-•ýLOörOzøé°»ýË‹Íñ{²ŸéÉ^î ×H»žn_­^’÷sßÈP(…h¤3¸F¼ýêúí¾J*kúj‡OÆ)—•c”ƒÿûÝM¾êŽ6½¦?‘?Œð ßÄßpäKc{§"Ÿ*;–²upD¾í}ÿèʼnüa„Ÿü9†ü™%_×à˜|–Žö”ƒ’×ýyþDþ0Âk _ǯÙiSÙþõkDÞTåX9ÇÁ ò&cÈXX«+¿Æ¿²äoOµâ9_AÑ!'ȧ†!Åd×+ äm yË/Ø¢Ï: ȫĚÌIÞòäU_yêDþ0î°âÖ1 vÍ-Ø–½*sJòªÌ Â)É÷µ¹Nä#|äw1äwùnÉ’Þx+C8¥mrËh›ñý™õúÈÆÿdÉw'Iм÷άƒcòÝé$ßý0ÂA×­cTåúü8ù.X+„G’u±ŽÑ6ë«D¾ %ïtÝú*ïá'ò‡Þù&†|ó0ù.•Ö†ð8ò/«±õ¡†ÜƒäœÐ6ÊÒ ÖŽùºN©Ê>ÝãDþpƒ¿Áù³Ã¾ñ;¬6ô››|¬ŸçàXò]T)ùî‡ü]Cë:‚¼ÇÓ¦²ô´)`“8¹Iin“n “v3ç· ¿ÃÚœ4‰3åõ¶ÈëŠ!?ºû»ÊF·Ö?ä‘7U–SæA™©±êŽƒ“’WœäÇóôa=¶~XGwpD¾]W)ù"_-rpÊ<È3Æ<£ºÚ\#ù˜{à¬Òºâ¬Ê*„S’O¹9FéáÈÇÿæµÍð²q ´6 á”ä-£*Ó±´cW0ðÖúP:ðAòŽç|™’ÇÀö:VSupRòÜ‚…;¾ù÷òï ùî%§‚”|QAÙ6§NRÜ1ÐÀ1ðó4¶>Tø{¼ƒcU™RÛUŒ÷NI>çvØñ5¾îݯ[ë—˜{©y{¾ª Fϧ&„Sä Fòj|7«+½{ký+FU~ñª²rQ±yP¦ã-‚ƒS~›Œ™óÙX¤«ç8’Ñ6_Œ¶éŽÉ9¥mtçú_Uspʶ1cÛŒoã­k0 뫲¬Ê<£#‰­Š±œ›ƒSÓ†ó(ðÔ0îuÌ´©×Òœ'm›çcõ$ÿäßbÈ¿±Ó&5´m£Ó ¶H€Ss¾ä|•%À·@~C~ËO›¢"§M™j°ç)ù ÿCþãaò¦¨@Û<’üÈcÈ—-Øã2òpü¯c¼õU<} ,³†ü^ºÖ1ôµŽs:œ$ÏÍy°.(j£çU-x45ç»ÄsG^ÐóC5¦ùÇsœŠ9*á˜ôœ×&7!œôUÎW9Â5è:£*µ *µ¢ýó ^¡qpJÏÜI â.4è:£*µ *&̓öxö¼Þ,ºÊÔ ëtŒªÔ‚ªÌ²œÓ20çµätâNR NRtŽQ•ZP•šôUv{ÀŠÓ»E7àtŽQ•z/Ïs’¼ÉÀ¦Õ‚ªL+Ϊ¬`Ú€ºÐ1ÚF ÚFk†|§ -iÍÍy8ÃÚtl½ý×ãäŸauªÉ¸Mávàq¡‰9èº.[°Çeäa‹¬cvØú*Hž¾Ê ëÛ,!÷2u̵NÝä32Ò)¬oÃ/XË-X¿¾M=Sߦ–ëÛpN'¯¾M-Ô·aϰ%,4­oSÏÔ·©åú6Îù°¾Í‚ió ºî;FU~oy/1¹Iµö|¦ÀÍû-¨JÃ]ëí—Ç©gŠóÔrq޼Wœ§Šóðs¾äæ¼_œ§ž)ÎSËÅy˜9ïç©…â<¬a¦¹Û@¸úÙ­ÿì#È;8ö˜Ô=¬MŠ.r.„“V¥á¬ÊqÖý€è~b$ÿÃK¾¬*Ò$.Û­7ádü¼áâçGò¿°â~cì/¿`ÓTkÊ{¶ª®áT,1w'¥áNêv™ß˜M근ͤ¬Ê°¦Ó‚Mê §‰kÌaäºâïa½šNµPÓ‰ó7çAÓ^áw9^ùc **Òé¤Ê ®ï¯ß’¾äüóãÀ]3 ŸÅÏ„›Ò$îÞa†¨€“±Ü 8„eþƒqÿ3mþñÓ¦RŒ¶É]Zå?~ÚtÓƒMlðŠqÕ3¥Àj¹çtòJÕB)0>4‘“ü¤X=S ¬–K±æAIša)0vÎsñóÓR`õL)°Z.ÆFqÓÇÀ°k+îZgR ¬ž)VË¥ÀX“¸âìùI)0þZ‡ þŸ”«gJÕr)0&[Ç/V ¥Àøp.êcR ¬ž)VË¥À8É{¥Àj¡¿`9ÉOJÕ3¥Àj¹GÞÒ’KñªRsªÒ/VÏ”«åR`yC-X\ Œ5Ì8«rZ ¬ž)VË¥ÀØiCge†¥ÀØiù¸§¥Àê™R`µ\ Œâ6t÷´Ož›ó“R`õL)°Z.Æ:Zµ"¯ïƒR`¬I\q&ñ¤X=S ¬–K±Ó¦ ç|P Œ¿ÖáRJ'¥Àê™R`µ\ Œ#¯o”cõ|Á9&¥Àê™R`µ\ ŒÕ6š4ÂR` 24è:£*µ *³ŒÜ¤ÂR`,yÎo3-VÏ”«åR`ì´!¯uP)° /tŽQ•z/Ïs’|P ŒógUNJÕ3¥Àj¹K^3ä§¥Àøc 7ç'¥Àê™R`µ\ Œs}蔌ŸK-H£ÎA×å1ª2_ ÇÀ”¶çƒR` Ž9\¤æ1÷°¹éTVeX lAz]º.Q•ùöaɇ¥À–Hî"ó˜«ÌüƒŸó•eâm¦¥ÀTœÈA]ä1Ú&¿>,ù°ØÉ—°âʘ[Š –’|‘”ìùrÙ‚-aÅ•1 ¶\?JÞtóµ·`KXqeÌ‚-·’ÏS8Y¹lÁ–°âʘ[~kç| w‘å²[Âu^sX]°¨üÝÉÃ¥Rs'Uéùò¸Œ<èº2FU–×§M™´&ÜI• U%Ü¿—1×÷¥~XòºªÜ´Ñ‹ÈW ¨«=_­øÖ«šd"C’W%† s&±«šŠºŠÑóÕúQò¨äãòpµQÅÜŒT/<ù¬$/Ô “B,q%ÝŒdù̯WYÏÔ«¬åz•‘Çõ*—‡ØÂ*&4±zãUÁ¤×MëU.¸ ¬ @MSߦúd%ï׫œT3\mTŸ‹RJ+(PSÅÔ·©Î’ÇÅ6—¿ùK ù OÞjRòʦ°Ã<ÎÝ×Õê¬g*…Ör¥Ð‡ÈãJ¡KȃºŠqqW5OÞ«Z •ByòÜ´™T ­g*…Ör¥PFÛø•Bk¡R([M‹–ü¤Rh{hfêU6r½ÊÞ~Å׫l„z• o¸z•P¯²™©WÙÈõ*ò~½ÊF¨WÉ‘÷#P¯²™©WÙÈõ*ò~½ÊF¨WÉ’wY™ W¯òÿCþKÞ/<Ø…9ò^áÁF(<ØÌläƒܴñ 6BáAVò®ð`Ãü[çËß5rù;’üÓ¤‚\#”¿£ÉO*È5Bù»f¦ü]#—¿{”|Pþn ù+¿Æ¿Jä ZòÓòw,yWA®Êß53åï¹ü݃äÃòw ÈweК™"l\„%5B6~ÁrªrR„­™)ÂÖÈEØ(òA¶F(ÂÆHÞ/ÐEØš™"l\„!ïak„"lKÈÿùßò¿¼ä½"lP„mùXV»Ãl·Ìk)Û&¬cÆ’W%C~RǬ™©cÖÈuÌò~³F¨cÆ“×y¿ŽY3SǬ‘ë˜qæ¥6)\ÇŒÕ6º`´Í¤ŽY3SǬ‘ë˜q’¯(«×1ãU¥âT¥_Ǭ™©cÖÈu̸9ïÕ1k„:f,ùœ9ŒLë˜53uÌ¹Ž£mü:fPÇŒ#ïÕ1k¸:f ¨1zþÀëy¿X#”ãÈ{¥À¡X3S ¬‘K1äýR`P Œ×ó§ç3¯$T3Sª‘ Rq;¬Wª R±’O™“”WêÈÇÿæÉ{e‘¡,Ò‚öêâ£m޼¶ñË"5BY$ö ËÀ]Y¤ Œû%fÚ\V¬Iì—Ëh„ÊB¬ª,˜i3­,ÔÌTjäÊB4ùIqžF¨,´„=ŸÆèùt™žO—éùô|£çÓez>]¦çSÐóiŒžOY=ßrO³9=Ÿ.ÓóéÈcÈ—M›ã²iSù:†|½Œ|½ˆ¼kb¬‘l®im“@Ò‡‘lÎèù.‘ ,X³`°`‹‚‘¼{¶Àð Ö$ý’AäURAÜ…yò/1ä_É÷QÜ”äápJò½ß†’<Üþ›W ÿCþU2ÈiÓ‡%„p‚üP¯’˜ó¥òo@þ-†ü›¤çYÉÛNJÞp’‡9¿ò»ò»mc àù~Ö’×Nò{ ¿!¿çÈà :$¯çŸ8"¯t¢ÉM*O,¸}Ì'ÿŒ!ÿ)©JÅH^£ÖIó€Ñó 2p11‡#F†^ùç.þ?„#òíWŠš6í/3€_€ü%†üER•%#ùµNÎyFòîyYóä¿bÈIÚ†%_…ðÇìh]°mLŒmc$ÛÆ2V¥H'SKgØœ!ïvØo ÿCþ[R•ÌI*€“’Ï9ÛÈÿùßò¿1Ó*B<޼…MÊÆlRVØ¤Š”Q•·N‘ךq}€mcá$ecNRöC"ÏxÌ4DuZñ$•1ö|6.X ;¬Ùaí>Bò.¢Õî%ÉsN'X2öä1ä1’wÓæ Iž±*Sˆ1³p†µ1gX{”vØŠñÛ@ v+aû št÷Á¬™ñ˜ÙÓãä» ôN’7 y0,f6Æ0³‚aVdœ¶w¬d˜eœª„T# †™1Ììùqòþ´9Kä-§m`àÀ0³1†™ ³BYf‡U*„ß?mºy’óÀƘV2T1+ùï‡íù.HúþäbÈÿH®’üs÷ÈjÇäŸÅèyë,Ø66ƶ±¿’¶alyÐV²mLÁmR0m®@þCþ*ùç™M*­²þ»Ï™ÿ€ü¿òÿ„;©Œµçm§ìù¾u‚¼¨Ûù&†|ÓÏ,s¡æê<’üÿ‹!ÿ'F,§ml'=fÌåB)¥6òY ùìñÛÀ¤€œP€? ç»G¶F8\¨Ù˜ 5k$«’!oŒ áä–±çÔ9±pkcîa­•ŽšÖó¢¸-{û|«8A¨ÊbÌÖyù|OV=e÷¯`Éì¿;ßw’Päè}õ&ÉGâyõÒ>ªsý¸TZòc••—÷ïäehþõHë"IÇg%^¾ß“סøWØÈ5lÄÕäp šÊÑ÷îö&áGmÇž$Éæ&ˆñ_ód¹ád#¦¿5ž׺ÿ>º:øZß>> I²øþNòft:E~TÝWghäÃñLOÔþz¢Â±·ƒAë_÷v1¯B8j¤·véñ1£v}ùÜ&¿·E:þë¡E:‚ŽªßUIÉßTÄëËx}´~a.’Ðß}VišŒð/€EÀ_ÇüŒõë6¾ø>þ>øÖïçx ð:Þ¼‰€o€ü&†üî3p§Ñ­¸>íbàÿˆ~ˆƒèN1¢û/êן«8ÿŒ!ÿ5>ºµþÚDÀWïíÞ0Ô¨|Ñí>㤃·_Ùà«¢Ž’ %'¶™¡€—dy­o)]9 "IÞa#~¿ÛÖ°!œÜñú8\3€sÔLSÎVß-3ÓvófjÝ´ã«|ðÝä•ÍC8m,0¢óÉ?j$vÅ(l—ŒÄݼ‘HŽ á’-Ø}uF.w5’µ§Í,„SdÞ`=jpꤴ&„Gœ»yƒ“Xev úrpÉ®ÜoUr®çü~«o_†{Ûå§ø9ü¾ÒâWOô±a̼؟_’¯·~~¹ÞN»ñ&÷Ø iõNÖè@À;1ì_ÇÃg²ú ͼçödÓ9Žéüìn3=82qŸ“A%†;q;ŠcÊŒÇÛ½ã¸6Éz;Ôæ<ë€c‡g0<D·.G9®m²Þ _qŽ˜õNhÄÁ7B#ûd}¾:ýíÙ³3­‡’ðV¨yEÁŸÛÝSaø§ íC²>S´¢ì½ïa#ω…ŒO~湬’õeøê‚¬7Â×óðµßÎ÷ücþ!Àóð£¿Îï\Ïõ·óp+ÌàŸdý;À¹ð#ï¼U6YŸ“2¯r ¿ à7Y7t#6ï+WãFLfJ çÏ Ç÷KòþÅù’¾'Ä©?É1ü‹o¤5©¤¯ž¸CÞ þâ'0ÓpÒ©©Íw¼¹8î×ÉnMgQ='}‘´õnÍwÑÁ÷›pF oU¯÷kôÃè`=¶ E­oøÖ‹>‡ ·ž£Ó“ß ­Ÿ¸Ö7rß7Ëú¾¤õ ßú}oÕ»Ùzb‡ˆS4$­<šôœtݾjÿôŽKÑ»Íà݉‡ŸÎ9¦¶¯Z9Vùh{pÒ4rl{b†F¸Xº2{À|ì†a›‚k¦‹{a·ÆÝáD¦Ò)îLÛŽâSåà„ñzk=0»‹¥1ÂÃk=¼k÷iWàÇÝGƘv¾ çcYõUÙ©³çXW̓‡‘ÝÓ,ÙÙwú­eö0ù¼È‚#òvxÚ›=Þxð0£»ƒ´³äOóäOy€ËäNò§eäÏ“÷§Í™%×´9/š6í{Ž<é›v;ÿá‹öâ> 8„_ÞéöÕKrÞö:Ô̲^½ð­¯ÎópA#®êyx-Àÿæá<üø> ?¾ ’_Ï¿„£Iý6 ¯ßx3oxø÷aþ-̺ßùÖ…Ö¯«YøU86ÛYx#œêÔü¬S¬Ûî’ã?rð­`©æá þ1ޤÇÕ,ü(Hþë{þõ-̺í,ü[¸ïË<üÂÃ޳ðá8~ïûUèû¿yÉÿ$oÓY8YÚÒí°§eà>sFø³o„;¸pEv|Ý'§j+ëBIû`Rd^?»2ØQÑC­ðv¾wT? .ÆMNªÆs÷j’¦·[Ï‹zá'ίö]¹èüî 0?…}Ïó1ïу#AhU)gœÎôX3‡™gÿ0ãà'Á¯wja˜âÓeëÓI4[npîò9ü»]`þmòy`®¾ŸhGñÄañ›| 'Ú.lÓJÆG„Ží)íGFm>î"rž ßðp;ÇÂAîÄ·^Ü|Ã'¡õŸŒoýfªÿd\h]™.´þ®}ÊC.ë$Ë xpŽû- ]ø>;x;«“•V† ©´ ÐwŽ‚gÕðÄ :%á†i½?*ω΃‡Ñ¯Ý[€ö‰ŒLðàVè{ÿ³ù±BëÇá«Ãz[ï.$Æ”ëóú=yQô´IM_& ¥+­\!x8>]ö%Eç²[u±»Kí— *šáM×zxéÒJ®¯´‡®iÚs«A­ã¢¤·‡tP´G+w ßü*Z×m~5«¨}xFÃ÷ïïD¬I?_=—mþ´Yo–ûfÙ¸o–û†÷§ñÊUju/ 98=¼³’w­ooygº¤œÎYŽ|»gù1xàÊN ØöpTÅ=EൎVÙ§ «,1yTs¶%Y «Óu¶@äãÖvÙÂÚÎ/¬­0î»eã¾[6î»eã¾Ö`¡B¼Ýˆ†pzxg%ïZß þଇӈ¨¹>ÍeóYÍõ!¸Ó—¼qòx­¶=yT,8IÝný!¸ÈgìZÿÜþ˸ìŸ!%lÇ+^ŽliwÇŸ"„“6d€†/!h)¨Ôôº4n[/ù@À­trcú–¦Irx±Ù#mØe&]f,÷Ͳqß<<î]Æ)‚G+F÷³ã‰QDžÞ'nDCøž¸Sƒ¸B1¶\^•ŽÎXígŠÑˆ¹ áÄÀ™” ‰jÑ…F­S v°å.hHÊ"„ãq×é°c…ºÒ2˜|´©a—™v™©±dÜwËÆ}÷ø¸+xÂÁ#ȇ…ÆûÙ1»`wËìn~ÁΘ0ÜÀåYÁhÚÂ"8¡isNÓe§®Ot&.Å­6ˆ,TTÉ*É‹ ‘‹¬·}ï]=òÀ},¸ù“L£~à†ç¦É-²Dpbàú²IÔŠ³Ž®»ölÏodUæ9jG¸dñRLMnQëkNU®%UéàQªÒ‘ÿÆçwÙøü.Ÿ_n|žîŸ_n|YÆ›e;ê—U¨Ý(>q‡È¯¹…µÎ ë ¯ëû¯0¼ŠÞ.ɧ`Ž~©°b†·Ï¢ôf—ïšN-¿þ±9\$·ã‘Þìu;=>^ß5ßwUQ~…>%CpÜwÝW5!ú®_AK}ïáa™ÚgWÙkŸÝTÿ¶rŵ{I†àÄÜô$”ñ‹ÿvB„ñ¥ÁñâWFÓ»ªÊœZü©¥3”“PÆÌŽ>$*§—Õw\³v(´®®|ßÅ…e™…5F@zpbaõ~jaÄÎ.,bÉ”)nÝ`Ç@ʜݜè~……¥óœYX…Bpba‘žðá‡Nö=ãÜ:„ëGçƒ}Fp¸ùräÑì¸e4f–'ºL˜6¹¡E—‚Ÿ÷7¦Mï&¦'‚öL¿âp²n·–B8a0Þn< ‘ág=xN_”ßfµdÀUêàXÛ¤Ù÷§ ï9Ù÷göê*è{>Ó÷_lÂŒ­_êä¥`4­Íó¹}ØÁ)lAkZ]™NyŠ”&Ï/íZ(C8q~1CoøÊ@bJ8¿8ò%2ÆTß*Ú±~áCÙÎõj‘€_£;¼þ†J0Àëµ àí²¼]6ƒ·Ëfðv~o… äómÌ x-8ÿê^À%íCzr¥<8!àŒ¹gÔ¶ á„€u©WNØöÏ  ·Ô“…<òyø•2éì5˜ƒ×‚¯§>.›ÁÇe3ø¸lç7¹£0ƒ|øÊó}3àõQðu™€¯Ë|]&à뼊¸ òù5FÀ¯¯‚€õ2ëeÖˬç¬ùðµìû ðZ8ÿ¬É뎩68½V«CXØÍÁOóð“ß´ðcÃS2;œ<?á— ÷78e38ŠÕ&yÕL±¢ç[ß7¨ Ë /Ow¼û =þ3ëÒ-ëç>è—oFoe,&Öe{ÎÉá5nä<òØ}Ð?[¶Ú îƒÝ]îƒ]ŒÚÍ!nd'©]]Ñîƒ <$»Zp(͹J Gû¥Ƈp( G«·=d)Ú}`ˆ¾ãáô£†—"ª]«ËaõJj·¾gx÷?Ã[G€SÃ[2ÊÙ3<8vþôðÚ¬$àÈ;”’¥pº"›à”wpbWÍ } -¬BpìR9½z ­pSªA9÷?0à pqx1ÛAÞûQÞþ%SÊh/ÁñGØ{+Ë8@9ùáÕ·ƒÞÌ€¥d‡We} ­à{d‡·«ÇJŸB3e1ùco9½kku†÷x×ðžÞg3Âaà” '#Bº`ÿqp¼ÆÓ!“Ø”ÇJTœ8Ì ‰Ñá¸+)Ü:vEÜ<—hÜ+xuÓƒ#ÞNòJMëŠh8…ödÖÇ×`Ü‹ÂYN³F“x‘ pÊ´*¸Íåà„rÖô•šÊ4†73%é>P6ÍPßq!Þ.Jš¸\Ã!ÖÁ)Ë™¾ ­,œÀ\q»oúN¥ùhRŸŽó'øôNúvKzà¸õMƒI@¬8:îàhàÒê–ì„üðÆû‘¸>îÜîU*ˆ"tp4pÝ–C®¸<ŸQñà„»}HvÚ6á)§„2'³BÖ0À©ñ1Ì5˜³å<8öÇ–ôN¨ æPAG´Ç2nq.–ÐZC†#·Q:œÙÑðšÜ…ßGá2ÆÒÞúvÚäŽü}U©ãÎÞÁ¿ƒh0[ 9Ë«oáäø}W4Ø5‹¹kƒ i€“«—Þ ÆÇƒ—1sc‰ÖÑW·kJ¬PÝí¶ƒcíZå½z3X½Nܵ•\,'\Ñ:ø5 Vo6Ô[õ?0à pqxÿV‹ü}¼9¤Rk˜].ðÿsÈpQ' .rÿxs(¿¥wàem,n_ÙÜœý8Ú(…{à?ÞÒ·³öKagùãÍ!¥†€·¿U`[ªçU'¯F^—xÎ+ð¼—{Üþ…¡9bœX%eLòÞ<,èèÛ-À'ªÄ–ßÁ÷Ñ;õ:Ä}¼"/f‰ûÖïÁŸˆ·»W°äñË¶Ï UH¤{_Ö·¯Â¿Õÿ±^£ÖkÁÕº†F„2è/®EÀö$ƒ»¿Hâú`zÒ‰~(mV=ù€F„tþË‘oDõáUD²ú†K/CŸ/W¾‘[Vk}¹B#BZ÷E ?8Šk¡#À¥W¦Ï;߈±ÐˆõÍ6å*¶åLÙ1í?ÀqƒãH“iC悟ÂgÖUZ‘¯bµ?€ƒÇkýŒ«ïV´EcápdŠvó±·âßQù)wür­c[Ìvz—%¯ÙÒŠ–|U–Ž%_XÚ5 ŠB!8–|¦™÷È´"ZGµÍÊlÔáÛù¾“¦ÏOÚä. xϸ¯þÆ”gQNB{NÀÝ8d´Åé"%=øž˜‚³Ú3êȧÃäÚ }¿ð}·t]ê.($Gp¢ï´ß©;º~A}¯²Ù¾_æû~úÞð ‹-Êà{³lÜ=Óa†§¨Ä¾7ó}ç_=·ÌvìËÃIÃþã÷ €wwÓŠàŠÌŸ´¾]%{¦ue†äUûþàœÙ¾Þ£'‰5ýäMæ^?ppdét•I·ˆw»îàÛ]/ô,L%/ôý¦mpßK((vàúÞí·­ õ=…¸¿¬°äÙw]¤Nw±wÁ>Ö‹úîà¸ïæöîî;ì„~9Fôà|ßRÀe}¯ù¾gærÀ~Lƒàa-ûú^Ï÷½úþ³çû~óéà¾à tp¼Þó‚wãÞsð *à” Á¶¸ïèyÿÙG¬w}X4îŽ ýç)ó¼— 5qð‹Žw€óã®OÈnœ™2Ï*'k lnÑK•EŸ&: Ÿ“ÊK@øN86·»/Ëq¬c‚6Êàà6|£TiF9É[–IäàÈ ð9nxŽ©ažûq)”n‘‰Y–)Ç2…ûß /Û´Ö+ËQqO)¨,ààX޹2³røN°vÛ“ /Çœ+% y nwHŽ…&åXTÃw‚mÔž“XŽWîÔe˜;¸ý@kÆÒc]0­ó8^XŽ­´8}Y!8ëªÝÈgÇ໋¬{˜Šzêöà(!Gˆ•wp‹®ËÎÓW¹0uφçÈÞu(7X·Ÿè:§dô£K!spq]ŸŽ%#G—ãàöˆÖŒ®hŽÅdÍw­†c{ât¸Ë¸Å×b3Ö.ÓÁ¥5szIÎ%Ç1­æÆÚÁѹì9ûÌ3ÛºæZßÏ¥V,Ø@ndÑ­?·[|æŽLÅ´žiÒþë·_'*¨F ¾ItŽàø¼7<#Ù‘¿Îì÷ÂÑfû+tq°ÏQÛ¤œxBàæ#<ð~¿`wXVÑ]Tà^uð­påtàG±+°ÄtÑj'º˜åtµÊÝ´´+ÕE†üÌuIœê¢áºhC8Ý“'êF£ë;j]:‡¿£&ªFpê­‹Š™¨Íãàè(ÑF1UáÖßâQ{É(ÖÂ(‰.º{GGÏÜ3Q|æDÍŽ¢\!DÁ‡åàÔ›%§Q+G—_‰C8Ô¨ ÏüG0ÖÛƒå’Qtpâ£[š)ž¨àš¸°5¿]ëÒùxµM¾8/¬J‹'&SÓ"ø5Òö¥ƒ«->ð!x×ů©u£2ªÆéSP“%?šglçÉ#E_‚àùî P»ÉJ’üQ ŸSîÃñÁyòø¨]éŽ%ß%’<á•OAy<—”è—Æ™%¿áÉﶬä+s».¦ÍNœ6%3mÀ¸»cÚàÃ9T¸Û Ó¦¸E: Ófÿ#Iž™óò’œ'Åäm'$_ %Ðö?²¶áî»´Éiò.ÉÂÁ9òx6›Òä®±N2wiͪʊQ•e…à÷“W®0¢ƒk¬“†{Î9mÃ’·†Ñ6¾ààw’Þ˜¯\c”ߥmXò†Ù¤ìDÛ<*y:€›6†üœ¶aÉ+E“7~‘«Ç%ŸN´Í<á0,îÑ6ü´aÈ[¿ÆÏã’/áÉ7×WÚÛ9§m~WCòù–y·ì­¥<+<ŒÞK²T‘A3íù#ÍB8 >N²Ü+Özkä÷~Ž®Èµƒ£ð’öÔÝ ·®3¯ŒÑ NÊ‘nݽfèàHB¦¸¥™¾ã"„síåNÝù>Þ?Šº@pÄQg·‡Ç1G¼85Š…?Ö_ôÎ2r _øNŒÒ‚¯qŠáàœ Ob‰M ‚‡Ÿ»§¼Zý#ÇÕ½mõ|°ƒcqÔ•¿ûq‹V º}b丿_Ž6Cð5á„-È;âÄ•L89½ºŒ#ÇÍÝrt¯F¾žý’–¼[×_´ÚæZï^¶Æp<ÓLNÏ´ÌYyÇsïì·I~5ñUw]f‡<퉾茱ʯ<嵯ÚÁ¿·a}ÀÜxqÙ5S”Ä|ìšw»GrLU>¤IH§]®4Ú5£ÁÂ>²KuKNŧÝÌØŽ8šÂÞÇ£ÀÑÁŽa±@—/rzö”´)Œvů,m'ãQˆtsðã;Ú Á?±k¦J E®ë–z†àXŽi6«9׋þ}Ëh8sެ³Û åh»g8B8êI¦o:|+Ä÷;x³ +zº×LN–·­&ÇÚ¶{aÂñ¬Ué°fVBJ™ƒÛ4ì¢)¼Zx,Ç[¦k›é2„:üVQêSˆ,rð¯°Öš.2/ ”]×ãktájÈ~a÷ëÌÜ*~]¾ÅÖq>^Âuìy›¢È3ÒÆµÚ½£Y¯¸3—NÕ`’¤èwgSÔ¡3Ø(jÅÊ1½Åì¡Õç¥ áx]w¥éŸp®§ ôÙ ®j\¾¸pÕžØ}¦4Ô>Óùu¶¸±Îõ°ä>„ýÚÁ!¼TÖ÷›1vx™Óë:-‹" á„ut{;ó[8s9x¤‘´FSá•,bíž±š0:••áx¿nMŠ~‚r@OAÕŸñÌõ^ŠS^% úìêùR¦rÔIkÚ™®,ÕõD•Èð *ÔìɹÅ‚²º̆p|R1öæk3±È¼ÖuóËŸîo•›ß;à¡»`ZM)÷çîÄX!øoƒ’bJ¯‚7ÓŒÍÈÓ”I5(÷?Vó©v—ê'êŸpšrðÕ_¨̨^¿›du{áyæÝ}¿n“Õµÿê•Iñ~X])*þ¾únwÜÄö+«ýßýñ%Ùµv¢Üúþû_òr¿êà×°°K»=Œ]|Ýù=G~/ß äûw dòû‡É+—©úý~É¿Ÿòý y€#òº‹›#p‚ãnÙõêý“w“ëÊO®§ñ†üi7ÂO;Þÿ0'./fûðÇÎ xÛȉmä]—â9fÓÁ¥.®M²¾Ý6¦‹ýëÙE€£.öé„s]øê±µiJ?´öÓ†kÄB-×E+tÑ.ë¢]ÖE{OÛmæÖEy“cºp¢‹CÁÿ¹Mîá.¶ûOæ4õ¼¼O0äNO¦ïØ'nä Žéì>ñ^ùš#_ äëeäk–|7‡fÉ7@¾áÈ7ùF ß}Ëä^ò¶š•ü¦Í†›6›žüF˜6Y>kü¡9†ƒ‹ûÏnì¢lE0]8ÙEu‡ÑEߊ¸§‹è¢hEp]<]´åVÄã]„€+>cEŒ]­®‹çe£5QÇ++.u±ÝÞŽwì?oGnÿà”¡”•wì?¼ûêíßÑE²ï ¢;8[·bo]”Õ ÓE€]®ËçÔÍ’.:8ÑÅbl]ÒC·¾Ëzˆé;À©¾gæ=´¤ïNïÓ¼‚û.*(®ï®ï]çõ jQß|ßs£ŸîXÖ÷,ë?vYÿqã®Í=ËúoÙ²þcúnKo#¾uqfYÿ±Ëšë¢é½g—õß²eÍwQÍ ïa3ö]öq0}ïÖß=ZaN‰N÷h…¿eZ]vVø»G+ü±Zí»2÷h…¿eZë{“ö$œhÏ›;ÎÓç wžà„_ϪÙÃ&ÀñŠ˜1âփϜ§o]”ÓE€c¥ßvòÅ÷xíX¿¨sÛŽäE§1G~ÏîÓ½æœÆä+Ïp#/;òÇ’×I>KàÇ>HbÎ0’ùzùš'oú26sçéyy'dÈoδ™÷çü¡ic*ŸÙðn]”7<¦‹­Þ¼Áe¥?'$¤*{‡Ò\B™5>sV»(žU¹.J“ »ç¬1 Tà3ïß·;<Þ¿oœÇ{€ÇñüŽík„?t/2¶¯'n»(îÐ\í².Úe]´÷t±Ý#o]”wh¦‹'ºhËâŽúñ.£yÝ6s#/or y€Sãcï¹½‘'8öæ6¹‘¼¸ÉqäëeäkžüðhÞœÇ{$/z¼9ò@¾˜w×7<ù¼(îØ¡oäåš!¿¦—<Àšóc\¹ŸÙ¡o]”wh¦‹í©î—¤spÂnOìü½‹‘PV!øÌÉsì¢h„p]<“ÀÜc„Dèv£\èbW|æuûc¡ Å!dþœü@ÀÿÕ?·ydÔøÕ9Ä4rÉà«hä'¦‘©'züêùiä—o¤=‘ß¾Ú¯ÇF†ÇlàD#‰‚F6ÐÈ&¦‘Í]´Tö3=ÙË=éá§Ãîö/ÿÊÉ£²ŸéÉ^î ×H»žn_­lò~îBƉFº½žkÄÁÛ¯®ß²E_f²“ã𠸲±¤¨ƒÿûÝù_õVývr"§Ýfl}½‰ ïàù–ý ï"»á¥<'ÈUçNä#|äw1äwù®Ö!ù¡¶wÂù¶ó}hÛ‰üa„ùÏòŸ,ùn¿§È{ï‹88&ß]“ä»FøÈŸcÈŸ'ß…Æ…ðHòW !•È´ä è$€Sä{ø‰üa„7@¾‰!ßÍûÊ&ˆ|W?¡ áÄ«Cï°í#Œ“:ƶ©¯Â´Ñ–œ6Y¶M}]&yØßëó ÖO›¬2• áqä¨ £m” m†|2D¾]ÇcI5§È+îKFÁ9NÅ•p ´ý…"ŸWpUîàäœ×ܜͺNŨJ%¨JC©Ê®¤“­ªNf†9Ãê±8NWòu$c˜©0múd{,ù<Ë885múÚ:'ò‡¾òûò{Éž7´=Ÿ–*„“ä¹9ŸÁœ‡C¨Š9êóÃsÞ¨*ËCxäœE­bô¼ô|VÐs^Ã[;NI¾`æ|ûà ®A×éU©U©9ç3uœ2‰ fÚ¤àöÑ ëtŒªÔ‚ª4šÜ¤t©á4¡7‹Î°tŽQ•ZP•}†5•«%«²ä,œe4è:£*µ *u•‘î>%¬œ:Œ¤s¾»Â”#ùU©÷ù<'É›ÌÚNÍùŠ;€W0m@×éU©ÏÎù®ØK•‡ðÈ9ºNǨJ-¨J­Éçp‚Ö’ªÔù1C©«/sk}¨4ó yÈ«î­]MÀ3›Â àùvvÑä«3EÇèùœÕóý @¤mSXP¹hgœI<ö=]—ǨÊ|û0y›Ã³ñI&m3çóëÃä‹´ߺqð8òåal½òo@þ-†ü¯ç‡ªØ0«ª¬á¤žç¦ \iU°EV1;luf%¯Š’\°™…êUNúç9/qäÁåUÅx̪/ž¼Õ4ycKÂãìù ìUŒ¾ªyòCL>3`UV’¾à$_€äüo ù_vΗ¦ }•©v^#€S7à´äûÆÐ…v«‡À v‡­…À €·_MoFºÚu#ù~0­9ïÌ€÷äë©{ÆéyôÃ?ùC ùKÞ*E×­©l!xàù~"áG Œ!dÉçÖ]ëYRäÚ!œ"o4C~Œ^ëŠ=äÿÅÿÇ’×™»¯=×G¥ PÔ'ȧÖÒäáAœ>\§ž ªå`!nÚxÁBµ,ÄJÞ ÕB°P=,TËÁB$ùi°P- ±’Ϙ9? ªg‚…j9Xˆ&? ª…`!šü$X¨‚…ê™`¡ZbÈûñ6µ,Ä÷ãmj!X¨ž ªå`¡GÉÁBKÈ_ü5†üU"_Ð’Ÿ ±ä]¼M- Õ3ÁBµ,ô ù0Xhù.\§ž ªå`!–¼ ª…`!^Ur›8¶«±õí*‚¼ƒOÉw[ÉÐz@>o¶B­cÉ«Ää¤ä»F8èºmŒªÜîXòÙðF 2lžŽÓ<ŽüÌÂ]ŒU¹Û ¶µ”afÒR¡Ö)òªdȃE½³pcUîx«²{d˜ó:Ñ%ÜËìyÍ‘÷äꙹZãÈ«Œ6‚9֞ϙëäö㟾˼ƒãi“EÍùªÈ4jÒ69sWê»Wln­b´Í×6Z¹c ’2ÆÀ-ðaÅ“Ïúú'ò‡êâ£m¼¶ÑÃëœø0Rš±ªµƒä gU°* ºcŒä¼ä³¼ ޶U• ’(Ž‚äMÊF Îr–YÏ…ÖrP(=ç'A¡µÊÚóÜ‚uA¡GXqǘ{ä¬*RʪTèM§ÈsgØÔø­õLDk-G´rÇ@/¢µ"Zym“sÚf\2˜´—˜9Yñ'©ª*(m£ ¼Ôäàù‚™ój|y|}ýýc\8󠛥l–C´Ïe»Œw3ÿV҂͸›y‰õLÚE-§]psÞK»¨…´ þ–»P›¤]Ô3iµœvÁ‘÷BÐk!í‚—¼æ$ï§]Ô3iµœvÁ‘7Ô‹Ó.Xw7ç§iõLÚE-§]°Ó¦2¤äƒ´ vÚ¸´‹ZH»¨gÒ.j9í‚¿1ôÍÈ4í‚'ÏÍùIÚE=“vQËiÎù0íbÉœ‡ý]ŘJ0¼´‹ZH»àOR\ÔÇ$í¢žI»¨å´ ޼V†>€OÓ.Ø“TÁL›iÚE=“vQËi¬¶Ñ¤m¦],¸ Ô ëtŒªÔ‚ªÌ蛑0í‚%_r v’vQϤ]ÔrÚ;mªŒ œÒ.XÃ,­Ãl’vQϤ]ÔrÚK>ÏIòAÚ;ç+ÎKH>ﮇMª\6mJÛ(c¢>ÊãÓ%¼,!¾‹2ÆõQ-Øò¸Œ<¬¸2fÁ–×§M™´ê"ÜÊ… üueŒ»¯ÔK^W•›6zù ÔE£mª¿ÃzyR^ëYR–õQ‰—Èœyàò¤Ö@~C~ý(y”䵄ü ‰!ÿ“Ϩ@è,)L ÷°'½ùÌÏP«g2Ôj9Cí!ò8Cm ù7 ÿCþ7‰½ µZÈPãMbnÁº 5ˆ!¯bBЫOVò~†Ú$[ÇdyÂÉ`!î6÷Óëê™ôºZN¯{ˆC­‘3ÔHòÓ$¯FÈP£ÉO’¼!C­™ÉPkä µGÉjKÈ_ü5†üU"_Ð’Ÿf¨±ä]’W#d¨53jœ¡ö ù0Cmù.G¬™ÉPkä 5–¼ËPk„ 5~Árªr’¡ÖÌd¨5r†E>ÈPk„ 5Fò~’W#d¨53jœ¡Æ÷3Ô!Cmù'»Ûf·vXk)ó ÌPcÉ«’!?ÉPkf2Ô9C!ïg¨5B†O^säý4«f&É«‘“¼8É{I^äÅ.Øœ±*§I^ÍL’W#'y1sÞOòj„$/޼—äÕI^ÍL’W#'yqä½$¯FHòâÈ{I^äÕÌ$y5r’§m¼$¯FHòbɧŒUé%yÁ¤=ÆÌù#?çý<©FÈ“bMbΞwyRÝ%Fò—»Ãú™ jÄ.Ø‚‘ü4Õ¨™I5jäT#šü$Õ¨R–‡sÜ%æx9.“üqùÈ×1äëÉãT£%äÁ ¿ÄØó—«0mÒ‚š6aªÑò`Ó^bLâ‹~Pò8Õhù.¼™ AoätNÏ”a†CÐy«ÒpV¥‚ÞÌ„ 7r:ç1óBÐ!5 ³ÃNCЛ™ôFAgÈû!è‚νô† AïÂuš™`¡F"ÉOƒ…!Xˆ·m8óÎï%ˆ®Œ‘|¹âµ¢´ Žúà}•œI<‰úhf¢>9êã!ò8êc yXqeÌ‚-ù’Ú¤ÂÀ‰%äa—)c6©òú äqàÄò°Ë”1›T©–|8±€|+®ŠY°ÕŠ×6^ìA#Nð;,çtšN438ñy8±„ü ‰!ÿ“÷b!p‚%Ÿqä'ÍLàD#N€üG ù–|Çž!Ÿæ!œ”|ÅOaà4×1äõ²i£M›Ýêþõ8y€äM_Ú— ¯`‡8A¾ýŽ"ÿœ¤îJËyCÞJÓ†&ßi¢N×4y~Ûìþõ8y€’n1ù.›7„còž&ÿ”Œw2#ùö_“85ç‡ÌD,yNH>OJNò£žOAϧ1z>]¦çÓez>=ŸÆèùt™žO—éùô|£çSVÏ·ÜÓlNϧËô|zòÇòÇeÓæ¸lÚÔ@¾Ž!_/#_/"o`Áš˜k¤;œÄÚ&7#-ØœÑó‰U¥kb¬lQ0’w•… ¿`MÒ/D^%ÜÇ™ ÿCþE¼-ÉÃ9à”ä{¿ %y¸¾7¯@þ5†ü«dÓ¦óÜW!œ ?Tœ æ|©ü‹!ÿ&éyVò6„“’7œäaÎï€ü.†ü.BÛ8E¾Ÿu„䵓üÈïcÈï9òp‚ÉëÄùçŽÈ+hr“Ê nó ä?cÈJªR1’רuÒ<`ô¼*AÛÀaÄÄFŒpа!òÏ­èóŽÈ·_)jÚ´ÿ½„ 3æä/1ä/’ª,Éç¨urÎ3’×`˜™/ ÿCþKÒ6,ù*„?¶`Gë€mcbl#Ù6–±* \ß›Z:Ãæ y·Ã~ùïòß’ªdNR ¤]œ”|ÎÙ6@þÈÿÆÿ™6PÇ àqä-lR6f“²Â&U¤ŒªÔ¸uŠ¼ÖŒël ')s’²yÆc¦!`ÆŠ'©Œ±ç³qÁZØamÌk÷’wÁBv/Ižs:Á’± ˆ!ˆ‘¼›6IòŒU™B·…3¬9ÃÚ£´ÃVŒßª¨Yé ÛoФ»fxÌlŒÇÌž'ß'†p’¼aȃidÁ0³1†™ ³"ã´ÍB89m8U ±Ä 3c˜Ùóãäýis–È[NÛÀÀafc 3+f…²Ì«T¿Útó$æ1¬d¨bVòßÛóIš‚ÇÌþùŸò?’ëƒ$ÿÜîûyÇäŸÛñ¡¬u lcÛØ_IÛ0¶‚Œ+Ù6¦à6)˜6W !•üóÌ&•“LÈÝç̃@þ_ ùÂTÆÚó6„Sö|ß:AÞ@Ô‡m€|C¾áÉg–¹Ps¥ÀIþÈÿÅÿ“#–Ó66„“3ær!ƒô:›ù,†|öøm`R@Æ ÀÐóíz£.ÔlÌ…š5’UÉ7F…pò ËØó ’:-ÜÃÚ˜{Xk¥c ¦õ¼†XbËÞÃ>ßr UYŒ!è/Ÿïɪ§ìþ,™ýwçûNм½¯¾Ó$ùH<¯ÞðPÈú=p©´äǔҗ÷ïäehþõHë"IÇb¨/ßïÉëÐü+lä6â²'ˆ¦òDô½»½ÉC8ÅQÛ±'I²¹ bü×|#Ùø*˜‘˜þÖxz\ëþûèBêà[h}ûø0$Éàû;É›Ñuè@ùQEt_¡‘s Ç3=Qû²ÁôD…coÿ‚Ö¿îíb^…pÔHoíÒãcFíúò¹M~o‹tü×C‹tU¿«’’¿©ˆ×—ñúhýÂ\$¡¿û¬ÒôÖúë똣°~ÝÆÀ÷ßGÀßÇÛúý¯^ÇÀ€7ð ßÄ?Œƒº>|EÀO£_p}ÚÅÀ?þ?üÑbD÷9Þ´¯?W1p ÿCþk¬õ¾þÚDÀWï­r*ê¼ÇÀ?1p»y‹Ám¢ÇT — ‡Ý¼á€QíéÖ„pÉpØÝa8_R_ívÊ|¼Ïsðö+|UôÁF’Ýáà„Ö®2Nk…×ú–Ò\£ ’äöµ÷»·nÂÉ ¤ß×ÂÜ 8wðG­åLßÝ2«g7oõ ÖM;¾ÚÁwßÝI^Ù<„Ó{/#:Ÿü£6—jº6„K6×nÞæ"ÇG…pɴ꾺@#—»ÉÚÃ[©F2o°µßtRZ£ì·Ý¼ýF¬2;ÆP9¸d¦í·*9×s ~¿ÕâW$•N7øù%ùzëáç—;áíŒï,÷¯*ùþêá÷sÝ!6Õ#\‹ðá«c+¤Õ;=Xãyï‹`-ŸÉêƒ4ºž»<Ø'Âmw¦ÑïêÁ‘Áù<B¶`·TŽ7_Çqm’õv¨ÆùKÖÇ.¬Í`x ˆn]Ž=YÛd½¾âüëЈƒo„FöÉú0|u úÛ7"Œuÿ$á­PóŠ‚?·»§ÂðOAÚ‡d}¦i'DÙ;³ÃFž ”>üÌ7rY%ëËðÕ…Y f„oçá[~œ‡øu~àz®¸‡[aý$ëßþËMÁ~¥àírÏú+íþœ”ðÞŒ¿ Sð7Y7t#6ïëÎáFL6>‰ëþ‘÷KòþÅ•ûGD©Sp’cøßHkÔH_=q‡žüÅÏȥᤗ"„S»ÜèŠ?î×ÉnM§='ð[ó]tðý&œÓaëýý0z -hQë¾õ¢OJ­§ÅhFôä7Cë'®õÜ÷Ͳ¾/i}÷~GßO»dw"[OìB‰†¤µDG£Úƒ““ÛWíŸÞq9g·¼;ñðÓà!ÇÔöe0Ç*MQNúEFŽmOÌжC†GRY7 ûÛ\3]Ü k¼5¯'27Lq§ÊvÇ !'lÔ[ë×™cÈ‚×zxyì7Ò®À9Ž» :ŒAÚ|ÎDzê BR§¿ñ5I†t…•³'²ï ô[Ëìaòy‘+GäíðH1>zt†{ð0´ »T³³äOóäOy€ËäNò§eäÏ“÷§Í™%×´9/š6íwŽ<é«u;ÿá‹öj>%„ŸÚéöÝ19 •ù5§7µþš…“·ßઞ…+þØ}Üî’ã?rð­°gæá~\ÍÂÂÙâë{þõÍÿ/³ðï ÿ9΄qÿ7ß÷Bßm: 'ËŸ9uqÚQ»õ3gQ<û…ƒc‹Â­Œ×}rú ÖeèÕ‡z![áÙÕÿóàˆŠŠÜ„Woý¹× øIðXìlr:PÉêÏ]élMëÏ)sá'ÎMö]¹ØÙÎꙃŸÂ¾çù˜•äÁ‘ ´ÝÇ“~´‘©a7Â)_ UN…ŸÎô„bÌ¿gßüsð“à‹8µÒ6L~ûP¢}}:‰Šþ箯¿«£ œ#uò¹¢ïÞn1táyG>$ësÐ]Çs÷ÃxTÞ&Ÿæêî‰v­M˜¿É×pyáâ&±PZ]0ŽáÈɇÊA„áíín‡ãÓA0¼O|ëÅÍ›vZÿÉøÖo¦ÕO&À…Ö•àFw= œæN˜6ç–ÙJ Ë„ŠDšZ ïÁQøRFƒëÐAïå#Ü0­÷g“¹¾{ð0~®{:Á>‘—±Ü }¯º ¤¡u€ã¸A]„­w>Ø1ió¼~O^=î©é !¡t%B+ǧË?°¤è\|¼ƒ£.v×GýœGi÷N]x­‡~æVr}­.ä™n µŽËÞ …£ îVî¾ùUôœßüjVÏûðŒ†ïß߉ëõ~ ¿z"îüi³Þ,÷Ͳqß,÷ 7î]8Yos¡Z®Â»ƒÓÃ;+y×úFð–p¦KZÀÙè óàXÀ7ÇöÁW†pJÀ¶‡£ª I6¢{­ã…UöÉÄÂ*KLU­lI–ÄÂêt-ù¸…µ]¶°¶ó k+ŒûnÙ¸ï–ûnٸ5˜0¨”g7¢!œÞYÉ»Öw‚€?xëáÄ$j®AsÙ|Vs}®z½‰Šf$F#8%`Û“GåF“ÔíÖ‚€‹|VÀ®õAÀí_°Œ€Ëþi1BÀv¼SóàXÀ–pwz*B8)`CÞIû‚Ö‘‚JM¯ÛQIÔ¶õ‘ÜJ'7¦_aq‹$‡®<òÑ&]fØe&Á’qß,÷ÍÃãÞå¬!xäÀù°æl?;ž¸EäÉá}âF4„ïù›15¸+cËåU‰àèŒÕ~¦˜›N œIÉ(]hÔ:µ`[¤,B8w;VX¥+NÉG›v™©a—™KÆ}·lÜw»‚šò9p@>,UÜÏŽÙ»[¶`wó vÆ„á.Ï FÓÁ M›sš¶(C85p}ª$1p)n°AÔ`¡¢Z8I^Tˆ|X¦¹í{ïê‘îcÙÀ}Ìœdýð7<êFn‘%‚×^¡VœEp4pÝ=ã`{~#«2ÏQë8¨o¨A‰—bjr‹Z_sªr-©JR•Žü0>¿ËÆçwÙøürãót×øürã“èÌ2Þ,ëÜQ¿¬BíFñ‰8D~Í-¬uvœ]Xqx]ß…áUÌðvy sôK€3¼}Z¥7»ïÔ„pjùõ&á2›Iê \ÅéÍ^·Óããõ]ó}WåWèCð3Ç}×}]¢ïÚù´Ô÷º|vUT½ÖñÙmx¹âÚ½$CpbnzÊøÅ»!â¦RàxñÏÀ»ªÊœZü©¥ƒ¡•“PÆÌŽ>%§—Õw\õr(8²®®|ßÅ…e™…5†œypbaõ~ja—ØÎ.,bÉ”)nÝ`Ç@ʜݜè~……¥óœYX…Bpba‘žðá‡Nö=ãÜ:„ëGçƒ}Fp¸ùräÑì¸%qf–'ºL˜6¹¡E—‚Ÿ÷7¦Mï&¦'‚öL¿âp~b·–B8a0Þ.‹ ‘Ôd=xNß³ßfµdÀUêàXÛ¤Ù÷§ ï9Ù÷göê*è{>Ó÷_lÂŒ­_êä¥`4­Íó¹}ØÁ)lAkZ]™NyŠ”&Ï/íZ(C8q~1CâbX§<1%œ_ùcª¿oíX¿ðkçzµHÀ%`€Ç ༀÃGn|;òù*BÀ^¯o— x»LÀÛeÞÎ x+ÈçÛ¼|Sõq™€Ë|\&à㼊8 òá+›÷ àõQðu™€¯Ë|]&àëü ¾ òù5FÀ¯¯‚€õ2ëeÖˬç¬ùðµÒû ðZ°7‡äõÄXPÆÐávÞ™ÒÁñ#FÉàÆ9> ܯ¶É«fêK &Ðjµ Ëú8òC »ã°¥NL]·~ ¿RY9D [ôw†}ïîʆkäi„j޽ØbM‘öq.«`õìîÚ{wï½½å\…pÊ‚¢º £ ÜÁ;aï­ Ë /èö¿÷¶{gNoÅt=8¶ ªaóDÃ[‹É£ÕÛî 99¼ÆŽ5½|òxïí‹g¯vÂÞ»»kïÝÿD¬ÞÂN oɬ^“eŽM+rõv  $àhïMÉœÀ®tøÛí½­ dhå\Œ dï½*§‡·Ð)Ñz7¥Voÿ3¼‡÷¸›=w|#'&Ò}0JǺ}`zÈCÂã® 8š:½EÖ M¹ë™yp´Æó²¤ htgö1C܃£IЪvò`¤l+ÃÁ§“ ¿…DwÜ£²„©}ŒY—dE¥uÙ¿”òϺ3O…áxW­,c4Ú=òëRçŠ^—îùuŽvU£ e4uzŒÚ#».»ò(´Ñ”)‹Éxk2åý‘ç(¬Ëã]ëòdc†%N ¯2Ì‘Çyp‹¡‡W•U…ááWå­à"*œÒ®X…àhx;ã†ÜUužâÖÑð¶‡nÚhÒxš|ôÝê´ß±V'Ë/ÀÅáý¥7©)G"8kN¹"nUyÐ9ø<8V»¦ ×¥®Àhòàè¬j 튰•Æ­ã]µ¼ X톣ñé´ó5$®ø¨¯Up˜IMüª“W#/¬WÍ/,€SÁyÆD(%`<8ÞýÒÛº~õó@#†ÿй ͬŸ[•wl·§pSèàAþšê÷/< }á ¼Àðw1ýMà˜q3RvzŽäTé~)1\‡i­ˆÛW8*É VЈòí·\(C|¾™Ã6’Á)ÉÁ/ROŽ·¯hÂOdØÊ†K%Ï—+ßH6œ'ê«ÐÈ<.šid(óD†/ÎAõð)Smr¼gÜïÄ$¤œ„öœ€ûGC)w—¾'¦à¬„öŒ„:òiñ$××?¯/|ß-ßÛ=6ž#8Ñ÷¢búî*]8øõ½Êfû~™ïûEè{Ã/,68Ì÷fÙ¸;8*wbJ;Û÷f¾ï ß÷–ÙŽ­p2øòðë´O¼ÓeV+2øhÒúv•ì™Ö•éµzº›tÁѳ pƒž:2WEÂÁ‘’Üœ a‰ùÄóå9ø–y:Œx²Ç“¼Ð÷›¶Á}/áöéÀõ½Û n[ê{ ž¿¬°äÙw]¤Nw±wÁz<Ö‹úîà¸ïæV¿÷vB¿#úp¾ïG)ßbYßk¾ï™¹¹°ðINIæ„ÜÕ÷z¾ïµÐ÷Ÿ=ß÷áÙg¢ï³98^ïyA»qµØü‚B¹³áÂ÷½=ïà?ûˆõ®‹ÆÝÁqÁ„ ênÑÁµ€cÙybúª Ê|8¸¨{6<ÇŒ“£rƒp‹^7KJF?º(9×õIàX2rtq+nhÍèŠæXLÖLqךa8¶g!N‡»xY€[œæS0cín\Z3§—ä\rÓjn¬˺K rÍø­k®õ±1µbÁrpÛ Œn½»ìÈܑ题Ö3MÚýö‹àD&ú`Äà[ŒDçŽÏ{C9ÎðeÒÎošcøV8Úø.vmÉ.&®8àíbwFšyíŸU‚#ç}kÎUOäã«ù™ÓÛ’.:8ÕEÃuцpº'O”»¿ë;j}涤‹µÐEmè‰êÝó88JÜ¿g|æ,Æ®E=¢‰.‚÷ÃÁ©ª%·+G×&m5³A8ø`æµG’%£èàD%¡[^,ENM€ UóÕµ.¬VÛä‹óß©´ /$3(°çà[ü–BÒOTµÅG^[îßY˨ôÊ0ÿŽ%?nFglRçÉ#-X‚ûàáSÑÏÝa¨Wµ+IòG|N¾!Ø–ΓLJ´J‡p,ù4n-WÂ¥çÊJä¹Y—×gçÉŸò–•|eWÈJ¸‚Üm‘ßÝ1ç7<ùÝv–üN˜ó;qΗ̜ØîŽ9Ϥê¿æ|1d„í„9¿ÿ‘$Ï,X KΓ¿bò6„’¯†\ðý¬*¹kž1Ý‘/ó Á9òx)šÒä®±B5w©JÍêùŠÑóe…à÷“oÿ¬Apêp½7§*YòÖ0ªníüNòC‰ú Á5V¨ù]ª’%o˜ÖNT¥L~­Ï­ŽÇG§ƒçtNU. ¿‹˜ó-×Fòsª’%¯MÞøÉ™O›t¢*oä '_qªäçrÜß/G›!øšp ä­eâÙN޵—-?rÜÜ-GWz'Œõ-‚àèà9ÂÊÚ¹±ÞÝ˱H‹ Á‰!|áÄ(žù7¶~½³õ®f5†ã™frz¦eÎ8æ˜{gÊö7M|Õ=ã:-Í´j•ÄØ’Ô*}¤ ÁcbZ{ÖÃ1/nµ¿EkìÀqÌ2BŽÝ=gŽà0Ét•ûkF3Ò¾¥ÊˆFבãh«lX ˆc¦ÓÁÃçŽÛeíLòœ‹BG±Õ?ã?àøä¤v8‚£IPi…àÁ³Ä‰nñÞi“ëVÑ«YjËqTÊ a}˜£«2ïàÁ£ÕI—å«FŽ*5fÎRÚXŽÆŽÐ$ÈMY"xð2vkUÖ_ýŒU1¼ä%DGS•[j¬ÛÕ”ª Áwe« 4ìrÇËѨa›: /}<äØåLª0ÇÎ (³ Áƒ×ջǵ—øÏp,U:øD‚¬Ma63cY^?Ú!IC:3SQém¬ßÃùXá”̧ –ëÂr¬[u™ð^¡:J®¾¦bå˜Þ"j¡h<Àñš1º Ç:Ë]~™ƒ« 7UUðÖà÷Ú&çáMæµå^Ãî~8o(ŽŽß4×Im²?¾$»výRaľÿþ—¼œÃ¯:øõešy©;DüÐnü¦‘×íØÅW&eiøé"ÀQu{ÖÈçºðGº¡Î߯{ ¿çÈïò{ž|ÖGUÉä÷1äG³Öƒ“äo_½ŸÇ.¾Ÿ¹w½Ï|Nt±èoÂÄ.œšiU·3u}ÿäà5¯9òµ@¾^F¾È÷©“2ùÈ7ùF ßäóÙÅp‚|Öï"ù L› 7m6?<ùÍYÐ\}\’Hà­ŒL!xÛȉkät»xâ^¼ï`ºpb|´™€?ÒE¨péÁÅ.Â(ž¸Q< ‹ÿ$,~ÝGÅË]ŒEx$σK]lw€úžý§f÷ŸšëâPøinÿ©ì¢î®€œ ¯ïÙjvÿaÉn•¹ý'‚ühîzð™ý§¾gÿ©Ùý‡í¢™W$'z2T“›Ûê{öŸšÝ‘¯9ò*©¬¾cÿ©ïÙjvÿáÉÕûK¾è¯ØæöŸúžý§f÷~eÌk.€Ç­ ŸÙê{öŸšÝø.ö÷xsûOý°r.Çs¤ŸÙê{öŸšÝjÖŠH³;öŸÇ»Xn:>³ÿüdwì??§ÂG¸¸0ðv¦Ýàü29óðöˆ÷ûvÇùô÷M†£ñimÌ|v•üþñyJ*S!øÌùôÖEy|˜.œêb_jÎ>x¸‹ ^õëfÇH^œù=O^ßaÜì&ßq·>cܺ(ÛLNtÑXu‡}pãHô$½ç|:’íŽ|½Œ|Í‘ï—ÉöÁH^´8ò@¾(ï°Xò¥ÑwØ7ò²}ÀßÓfxÛgÎ>ˆXJ!¸¸yîÆ.žvÜæ¹ã»pª‹wœOw1]LKŸ1Æ.Š&×ŃÐÅìž#xÄþ3Æ?xp¡‹]ûë¶ã?„»‡=¹í?¿Ÿ“ø¿úçö¯ béßËýààhýÓúAh=Kf[?BëǘÖ}W‰á'hýÓú)¢ï^ë?ÐúOLë?Rß5Ùz‘Œ³]E¸±õߘÖùÖub™ÖLJ²×ÛíØúvÑ:À‰ÖU’Ó’OJhæü6fÎo³Îµ¾[ß¿E´p¢õDY¦õ±Öz’ßÇH~¿jfÝ:y?³nÍ´Þ\ì¬xûÕõÛû*)«ÞYÓÑ>q׆cí~ÿ÷»›|Õ[¥Ar"á¯@þ5†ü«D^1äǸK§È÷'ò‡þ ä?cÈräû›"ßÿ0ÂÏ@þCþü8ùÎ>á‘ä¯@þCþ*‘/hɛ̆pŠ|?‘?ŒðÈ71䛇Éwå*m#¿=Ž­oä%ßï†çÕò:)J“£Ö±äÛcsFJ¾ûá?~­¿#È;8"ŸU)±`³Dçåøø‘ƒ“äsŽü8ëjØßëó f̓vâôQÀh‡µy>¾@âàÔ´é/$Nä#Æ½Ž™6õkTEE-Øî’¥T!<Žü7èºïUù}äÉhÎ×ñN×½›ëDþpƒÿÂ.ó³Iýr›”ê ©PÚFu¥€B8A~x6çDþpƒ7¿cëÍoyÇ’Ï«’š6¹©@לš69c·?ÜàÕÛØzõAÞÁ Ékf‡5cI §È[Í#$ÖÕ;!ÿÎK^g9%ym ”‚ƒ“’¯8ÉW#¶È*f‡­¼ä³>vœÐ6¶Ô!œZ°Š‘¼†ChꢊÑ6ÕQÐó4ù,‡èQ§$_rs¾„9_ù:†|ÍK¾Ðä‚ͬIu'–;Zï\ÏÀkù>ÀÛ¯øx-Àk _sðZ8€×3ðZ>€óäC~rgÉ»x-Àë™x-Àiò{¾à4ù‰=_ ðzæ^ËðGÉð%ä¯@þCþ*‘/hÉOà,yw†­…x=s¯åøƒäÃøòݸž9€×ò|ÁœxÜ´éŽÀõ̼–à’àKÈÿùßò¿4ùî=‹áùí|–”åXLÔÁ1yÿX3ÇÀîü^ÏxjÙ{@J~ê=¨ï§ç=ïA-xêïA-{ÉûÞƒZðð’Ï8ÉûÞƒzÆ{PËÞ†¼ï=¨ïÁ‚isãäcÛ\XÛ¦¯€F‘ϼžêà䴱ܴ5íÆý3m.ù>‘¯t:FJ9xùDWÇH¾f%?ñÛԂ߆%o8ò¿M=ã·©e¿ cUú~›ZðÛ, ÿ [äwÌû}äÉ{~›ZðÛpä=¿MÍùm¶cë¿ÛòŽ´Mjûç¨ÑœWÝò!œ"_1z^W…çö©gœNµìt"%?u:Õ‚Ó‰#ï9jÁéTÏ8jÙéÄMÏéT N'vÎçÌ1Ð9JPeŒ¶)=¯¨MêÉtùPY§È«œ!·ÔE£mÊÉgIážBup’¼áȃÏj5¶^­"È;8žóÃì¡äóþùíN-XÎ{õ×Õ ‰!ÿ"OsÒ$ÖF¡ÖIòœªŸ@ë]õŒ£µ–­¬¶ÑÌIjêhe§ÕÌ´™8ZëGk-;Z9mã9ZkÁÑÊk›ŠÓ6àhÝùM ùÍ£æA– ç8€S&±æìyðœT°EV1;lµe§2)±Ã]}9Ð6•´ÃrV¥«²]WŨÊêƒ'Ÿé’”|•›2„SäKnÁ‚]WÁ!´Š9ÃV~ÁzþùZðϳä³`§þùzÆ?_ËþyÖž§É‡þyvÁ–œyàüóàx©bü6ÕI¼"#¶µh«< áäœÏ¹9}7oã%®>ù9¯(“ضÇçL¡Ö)m“Œ¶¨Îêä/1ä/y£©ÃH®+8Mœ$ÏyÒÜ»X©g®ujùZ‡›6©mе¹`¹Ëë¹÷¯3— Wùra€·_ñ¾Ê«p¹pòWÎWy.®3— WùráQòÁåÂòW !•È´ä§— ,y矿 — י˅«|¹ð ùðraùν¹\¸Ê— æ<Àã¦MçÞ¿Î\.\åË…ɇ— KÈÿùßò¿4ùàrá*\.0ä}/ñU¸\¸Î\.\åËRòÓË…«p¹@“Ÿ\.\…Ë…ëÌåÂU¾\`$ï_.\…Ë^ò'yÿrá:s¹p•/òþåÂU¸\X0m:÷þuærá*_.Ð vr¹p.øic¹iã_.\g.®òåKÞ].\…Ë…ä¿AQÇèùoVÏO\ÜWÁÅÍ‘÷\ÜWÁÅ}qq_e73ç}÷Upq³ä+FÛL]Ü×÷Uvq“’Ÿº¸¯‚‹›#ﹸ¯‚‹û:ãâ¾Ê.nnÚx.î«àâfç¼sq_÷uÆÅ}•]ÜÜ‚U”ªÄ.n–¼Êò÷uÆÅ}•]Ü‘Ç.nž¼áÈû.î댋û*»¸¹9ﹸ¯‚‹›]°š™6S÷uÆÅ}•]Ü,ù4' ³ÀÅÍ“çT¥sqo€ü&†ü†_°ž£õ*8ZYó@s¶ÍÄÑzq´^eG+#yßÑz­¬ä¹vêh½Î8Z¯²£•#ï9Z¯‚£•%_rÓÆ9Zá(TÅœ¤ª?ç=wßUp÷ñ’Ï9Éû·ëŒ»ï*»û8É+Ê<Àî>vΧ3ç'î¾ëŒ»ï*»ûXòFS†YèîãÉsö|êû¬šY#{ÌxûoYäîÞ³fÆcÖȳGɳ%ä¯@þCþ*‘/hÉO=f,yçtjY3ã1kdÙƒäCÙòϪ™ñ˜5²ÇlÁœxÜ´é|V͌Ǭ‘=f’=fKÈÿùßò¿4ùÀcÖ3†¼ïúhY3ã1kd)ù©Ç¬]6çÓesÞyCÞ°ä[»½ – ß.†NJ š¼‚ƒ˜yò/1ä_ò½ÇŒ oAUœ’|ÿ´ A^ƒ“Ù¼ù·òoyFò2VN’g¦Ö0pï@þ=†ü»@Þ” y]„p’|ÎWßùM ù4ç 3çÁW p’¼b漃oü6†üV _XFU&y§È—œä X2@þ#†ü‡@>evØ^N‘¯˜9ŸÏÊ€ü!†üA _Y†üøø¹ƒ“ä C^ù#?Æ? äKf“ÊÁép’¼f¦MÊ lcÛ˜“4ç9òèdNÒœ/Û¼æÈÆÿd̓nz0Ú Rœ"oY=ð ¿Ä¿D‘7!ü1ò¯|C¾ 3n“jC'mNUŽïB¬-f6Æ0³«ÇMâÖ8©B8%ùÞoƒÉ?;“Ø®ü:†üZ _0¶M–¡ÖI“˜±*ÝÅŠ«ÒÆX•öE’gT¥›6`Û“ؾñä‹”#oT'%oɃ¶±`Û“ؾKä-7çóNJž9Œ¤ùx±`Û“Ønx=?œãÈ9Ÿ…pRò†‘|p0‰mŒIl·’ä 7çËþÐ||cååý;yé)»ù{wß×´WÛç¶A¿|¿'¯þÀ÷Ç—túúÐs¢¼ýÊN¾z¾y‰©‡µÆYçàøiÅ$íã.(òãÛn/í:y¿õ}üW@žø»p©ä@¤„º%³þÚ ÒÜÁ7ÐúæÎÖõ8ëˆì¢y¯Nuÿ}¼—éàghý|gëÙx±â@TëÆ“Ð¹ÜÕHç&.C8ÕH6RùÜ&¿C#ð¯;FÑÚNŽâ­'¯ðº"ýÎ"ÕȳJÓd„ï¾~Œ€Ãë}ô;~³ð+À¯1ðàM|3úÂ×›sü0®Àõa‡·éèWêfá€"àŸ£é½þ\ÅÀ¡õψÖwó[±°ª4 áÒ²[¶ì–m ;i)˹ dµd& áQÈ.fq}»eÈ.j)GŸÊî® d±dI³ã® dµØñækw×r\ï“õyÃp|¤˜·‡™Gï’õ‰yEp„ø1YRä;1ö ÿ;ü€áûà+“Û~$~ÀðO‚üøÕ)YŸiŽíË»0<ä¨mïYÆ»0ü,püĨֿ†ã0üÃЯü9QYjøsP’cøUàø›¬º›÷;¸“q>¼yIÖføÊp‚x [/r‹á« ÜpׯÉÚ_Y®‘W¡_ótOîËîÖHð„âsæyƒ·&ÑûÇ <>¸ð|±ƒãp WÖ¿ÿê‹ÔPw5ÒîAsð¯À±NÞ¿ø7×z¸Ê ‹á×PÅäãN|Ü’-÷Xç­‘­ à:ø‘‚w+«ƒ7„w+k ¡÷áG~Ò·z{âMJ†c¢1üÄ7²;'»5Dò<\¬óñ¹O!Ѿæ¦s@>)ƒŸ’Ýf€ŸbZwðMdë\Í ¾;‰óü0´Lçç$·ýÝ$q†ð$JN;ªïVéýw!­V‘˜ÁŽO®‘VÉœ>¨0›v¢ª>JuñÙEÝ{pDEgý=Z¨ÆZŽåècôà§A69 ¦ÎÎ"Í7ì §o;vƒŸ8K)ì{zîFñd¨QtÞ¸ ÈG%­;]ù¹bŽ\÷)äŽr+a*ð°ýA'£û¼ÛØ>̉Þ'­¿ü&_ºï]TFùåáíìfàÂø¹Ý‹_ Wºªžˆ Ÿ¶ç£#Óƒ‡–l«"ú{Nd£v%P+ ?†ð! Ù¾IZŽ÷<Œoá}^Bx n;^ŒnT¿õ• ¡^B¦¿B‘D­„ÆûHŽ$¤¬ÊI ¥…%àHBeÆHȨ ÁÃ0ôÎ^1RnýEЛ ¡›úž¥‚cA¤7xØwq¿><Ü'Z¼¦»hóÁêö£~ñ£ÊÈí‰zTÎ~ëo‚„~X ¥Åm•@]©á Á‘³j°tÑQðPŽº¬ =‡ÒÑçàÁÃ*ËíW¥!Üõ<Ëpë?‚„~á+.G‹®=R< ÏJtnÉ)Øye n{OrûD/¿ªÄðPŽù•‡):Ñå!œ”cái«ŒÙ'´*ÈU–š ñB6}µj¢‹:µަJÞ‡Qaò:Q¸uÖy ž¨l çˆñ[ŸÑÔ´„º(ZBJå‚ãÅ”v0–M+ GÒ%¡V@i®…¹%¦[A)!G6íÏhjNB&å$d2§45åoé5½Âp¬nTÉhê4Gð0–.±7S¥B´Tªqë3šš‘Ê™½,³n ݦ ÚËLi0KÈ(ZBÄâÁÀ½®ÖCO¾:bZ9n}FSgjj•k…áH[¥³—Y·98ši©ÍŸH3 ›¨ÚŒRµû'.ØÉ·D­W'AŽ­¶²ÜÒÙå¯LáÕƒcM­mIz5SHêðሣ*˜9dµÂp.†,ŒILò¼Âð0ªµtÜnò"H(Íè½Ì…àÄT)˜½,- †ãQ,ªY=ð0¾± 4Ëžˆ,¬®Tw[ŸÑÔœ„Ìíd„%”Z§45³—¶Àp,!]ÐòNƒ(“¼êcñP-ôv'¬0\ÒÔ—uòRpsè¶L„ÀìÁ‘„ôm©U–a8ºDQÖл½µ¸u¶†EºõÓHü%h$ÏÍ«°u딨#4’鼯Ñ#N®ïÃãÞ_nŽe/û¸zñ¸çe†àhÜ»ÙEŒ{ûCnGã^©Œ÷"‹nxp4îUš•Ô¸·ª=Ã}Gãnu™ãÞûtpëÁþÓÍlSÝ®vXPžè>‚.–y¯øVßaܯw]pÌ8w• g<î,\Gã®óÁÛ‰ÆÝºmÑÁѸ›t<wSÁŽåàhÜs;,X4î•Õ¸ïá¦ë<½ÞU‘ã¾£á5E•S뽫w•#xPT«KàìïiV}Ù$fÜ;u¡Äq§5x§Õù§Á1üÄxâI Žà¤:â48‚Sê¼xâ48‚“êü ×|JrÛNœ>«ŸNÓ†pZí>qšÃ)µûÄhZ 'Õî§iœT»Oœ¦EpRí>á €­ý”U¨õY½ùèøt1„Óêñ‰ÓˆN©Ç'N#"8©Ÿ8ˆà¤z|â4"‚“êñ |KÚ¿Z!¸¨ßšßäÕÈã³#.pòŽâ-ºˆ0ÊìÙgŽj%EÿÖªÿS·ä¾ 8š´=ÎT~Îü'øêÓˆƒŸD÷Ý;w#4’a8)}nGâöÕöpw#*±¾¯®7š¹TKo¦Êÿ#x*Ö…z™ò …èv ei0\¾’à9s‚£Ê<zëÃÑ,æØ‡aÚöà/¢#eø …$?w­>‘¯¯?a8íÊpçqº‘Nª}=ñJú†ÓÞ€ÛW»urf¤­Êþ*˜ÈpLàÈpÝŠu8* ]ÜmøÖo{,JMJðz3î\ë¦'Æ&%¸‡N´žÅ=ãÎI^ VÊlM ]…pÔz§àʹqßþ&Å̺lpÛoþ>ÒÁѦÞg`Ÿ(ˆqp¤øºûæ'œÑéÓ±ü•ß ;i{”Œé¢Fp¢‹·[ÜE¸ðup¤v;«‹é¢Â­“e¦iö«¨TŽ.„s°ìšß;àø¶ ±·Ðûåa=xXY7Ę́÷‡úãüõÓvøðþž¼$Ý¿|¯[÷ úÁq¼Á3€g“`áÌÁ3nn¹Ö-?äg8ž9ŽÏIï@˜áx8JTΛCúzZÆ8Ñî_.’iðœÎÄøuŒiìþåni3—þü!øÐùÕå÷3}Ý®WcÚh÷/—)×Ýé~øýôp]tð.htøW0Öÿ^vÁÏIé·~[Ç<ù¤!­ŽZïVfNµÞZ÷~ëïç¾õ÷sÐDҞžð>’öì¾ê-IxÍàôý6¼—ë·×úõ›è{ˆÀG‹¾o½à5G¾–É×@¾æÈ×yh'•×úu€_9òW™üÈ_9òÓÀÖ“‡Öyò×é´ÑÞ¬{oxÑodò o8ò@ZçÉ7Ég‰q­o†Y·9£…ÕG¥ xò|(áK(ɵ+(Âÿý‚¯ºP\2‘ñ ri{øÏHžV›¢W!œ"ï•ðÈÿäÛ¶o¢û‘EçZÿáZÿ¹«õ¢uªÄÄïw}-o’jmL×e=އ¤súÝà¿çÞ×ð82ðÖ¸òZÿÖ¸Ö„Ö õ®õºõa“zÛŽ{\÷/ró÷¸î·a—™~åíqÞÝd.¼õþÝ·þþM4òtSßî‡N?_M8vZ¹~StZ!øaô¦Mᾄú|Ëù¾úzò+ôäzò+ôá{2·ÿ½¢àbOšá«FèI3íÉ'àà'üU ©ÇFøž4“ž8M=K=Ùœû¯z}>Ûž>ççöT¢?…“Ü+’̇Ռ ©Ï¥Ç;ÈA)u A)Mà¾Rš´(¥Þ+¥€#ÕÂÔ‘S GA-A-9µpÔÂÔ‘S ÇÉ4!ü|E¨…#¨…#§Ž‚Z8‚Z8 jájáÈ©¾'¿Ð“_¡'Ðß“ ©…#¨…£ Ž ŽœZ˜ö¤á'üU¨Ž ŽœZ8 jájá(¨…#¨…#§Ž‚Z8‚Z8rjá(¨…#¬¿ãCja0uFòä0 f^Ø«N’·÷ÿ!Éßohu ›N;r:í(è´#è´#§ÓŽ‚NûöÇé´?A§ýNûãtÚŸ Óþ@§ýq:mtÚè´?A§ýNûãtÚŸ Óþ@§ý :ítÚ§ÓøžüBO~…ž@#|O&p¤Óþ@§ý :ítÚ§Ó¦=Ñ!ü|Eè´?ÐiœNûtÚè´?A§ýNûãtÚŸ Óþ@-üq:íOÐi°þþbtÚÇÑé´?A§qäí=äHòè´?ÐiœNûtÚè´?N§ýñ:íã<ê´î_¤NóuZ÷Û Ó¦_y:Íÿ¡Kñ@ÿ§×ïŸAëàíù[àý*ó¾zî_)½=<)½•­_¿ÃFÆ…5wl¯õË¿pä/2ù ¿pä/yh'™’Ï}É7¼áÈ72ùÈ7ùéJ[çÉ7òŸ­‡÷Êj:i=eÅ“àÃz÷¾ê”Áz$oCø°°‚©=YÖÝoòžƒ·¬'˺‡÷Ë: ÂÀaY÷çÍx½Ñý îLUêbÐü”19‚÷—¦ôWÃâï¿êu‡÷ÕTwø?„º£ûmÐÓ¯<Ýáÿ0Õ¯‡±uÜHßú Âqë]üЭ¿÷mškÒº¯¹ø¾ðAs¹¯¦~ê>Õ\cë×o¢ïƒæš4׿pä/2ù ¿pä/yh'™’Ÿj®Þpä™|äŽüô‡@s­óä› ù‰æzÿàù?™üÿ É{ ê­o¤×‚ÔÊØ¼¡•11‡zø ½¯¦¶\0¼>(¨`ýx§™ÍÇ Ç™ãÇÑSáÇ»8žGŽ˜ÊG>„mUÜÃñÌs¼ç:§žp- ¸&ÉwÎï!_/#ÿ3CþG&ÿÃÎ`{ù’üý}vþ©è¼Òz°ó÷ð~ç82ðÀ ¯aS®¹M¹6å¶ÅšÛ”ka[¬a[¬¹m±¶Å¶ÅzÃôµ°-Ö°-ÖܶX Ûb ÛbÍm‹ù ¿pä/yh'©…m±†m±æ¶E|äŽüô‡`[¬a[äÈ75»-n>jXï5·ÔÂnPÃz¯¹Ý vƒÖ{-ì5ì5·ÔÂn@rœ*Tã™çx—Bð,àNÀžBÈÿäïW¨5(ÔšS¨µ PkP¨5§PkR¡îuÊìu1s3{ƒBí~ô±ÿÕDÏÁ}´îŸ…öC#{®‘½ÜH?ZݾŸÆ$Z?®èÜ7ÒGtMþ–ÑÅ72À‡ˆ.÷UÑ5m}Ñ5¶~ýˆ®)|Ñ5ÀkŽ|-“¯|Í‘¯òÐ:O>„O"ºø•#•É_ü•#?ý!ˆè[çÉ{pÑ5ÀŽ|#“o€|ÑoòÐ:O¾™H>ð4õðÍ-,Oéóäø 7} Môf°¬mÿ÷ûÀUbïÓ›hЛÓÉuÓ›Áßí“ù|½ÙÃ{½p¤áHo2QÀ}Á) ø¦ø2Л§7gà7½™ z3½™qz3ôfz3ôfz3ãôf&èÍ ôfÆéÍLЛè͌ӛ™ 73Л§73Aof 73Nof‚ÞÌ@ofœÞÌX½Ù ð†#ßÈä ßpä§?„ª'Õ“qª'TOª'ãTO&¨ž TOÆ©žLP=¬ñ,Fõd z2Nõd‚êÉ@õdœêÉÕCf9LM6+è ªÇrªg~S=VP=TåTTÕ3Iäð=ôíʶ z,§z¬ z,¨Ë©+¨ ªÇrªÇ ªÇ‚걜걂걠z,§z¬ z,¨Ë©+¨ ªÇrªÇ ªÇ‚걜걂걠z,§z¬ z,¨Ë©+¨ ªÇrªÇ ªÇ·1ªÇ‚걜걂걠z,§z,ï~£_Š›è:ÍÁݼáÜoÓŒâiÊÏØ:nä‰zB.Lù![Ÿ¦üLKóNS~†hÜ ïg±ï|Ð6ÓL@OÛ}Ÿh›±õë7Ñ÷AÛLáSmü’çk| äkŽ|-‡Öyò!|r@dÞèóˆù+¿rä¯A®ýä€8¶Î“¿N§Íô€(–ÎT¥@¾¡Þ\T¥@ZçÉO× U%ý>áDUòä™×_§wDÓq76„¬ Æ}^Á‘<­.6?D¯B8AÞ×óCpDþ~¯`ÿò-õ¸së¯=O¼‚Ìù¾W0xMØ™˜jWð=ßà±n Ïøä¾4õ ùlùŒÏAö[ç-›ø›s‰¿¹—øk—%þÚ»í²Ä_»,ñ×.KüµËí²Ä_»,ñ×.KüµËí²Ä_»,ñ×.KüµËí²Ä_»,ñ×.KüµËí²Ä_»,ñ×J‰¿ÞW‹ò{-ŸßÛ×$šå¸(¿×òù½®õŸ»ZGù½`QØei¼vY¯]–Æk—¥ñÚei¼vY¯]–ÆkïJãµËÒxí]i¼vY¯½+×.Kãµw¥ñÚei¼ö®4^»,×Þ•Æk—¥ñÚei¼VJãõuÏ’l]»,[×.Ëֵ˲uí²l]{W¶®]–­kïÊֵ˲uí]ÙºvY¶®½+[×.ËÖµweëÚeÙºö®l]»,[×.ËÖµR¶®oŸ,Iʵ|R®g› …¤Ü‰†Z{k—åÞÚe¹·vYî­]–{kïʽµËroí]¹·vYî­½+÷Ö.˽µwåÞÚe¹·ö®Ü[»,÷ÖÞ•{k—åÞÚe¹·Vʽèˆ)¶–O±õ5ÔŸ ¡ØÛ‰†ZIk—eÒÚe™´vY&­]–Ik—eÒÚe™´vY&­]–Ik—eÒÚe™´vY&­]–Ik—eÒÚe™´ö®LZ»,“Ö.ˤµL&mW~¸¿n3i»²¹‚ïÎìWÃâ_’Ik—eÒÚe™´vY&­]–Ik—eÒÚe™´vY&­]–Ik—eÒÚe™´vY&­]–Ik—eÒÚ»2ií²LZ»,“ÖÞ•Ik—eÒÚe™´ö®LZ»,“Ö.ˤµR&­÷Õ¢„Y»,aÖJ ³¾¼$/Öòy±ž.pòbýízIú«]–þj—¥¿Úeé¯vYú«]–þj—¥¿Úeé¯vYú«]–þj—¥¿Úeé¯vYú«]–þj—¥¿Ú»Ò_í²ôW»,ýÕJ鯾‚Z’åjù,WO= …,W_=.IfµË’Yí‚ȯA=.Ifµw%³Úeɬö®dV»,™Õ.KfµË’Yí²dV»,™Õ.KfµË’Yí²dV»,™Õ.KfµË’Yí²dV»,™Õòɬžzd“Y­”Ìê«Ç%9«vYΪ]–³j—å¬Ú»rVí²œU{WΪ]–³j—å¬Úe9«vYΪ]–³j—å¬Úe9«vYΪ]–³j—å¬Z>gÕ×0™ a؜Չ†Yšj—¥¦ÚÁï7± 5ÕÞ•šj—¥¦Ú»RSí²ÔT»,5Õ.KMµËRSí²ÔT»,5Õ.KMµËRSí²ÔT»,5Õò©©¾†±‚†aSS'fAª]–j—e Úe¨vYª]–j—e Úe¨vYª]–j—e Úe¨vYª]–j—e Úe¨vYª]–j—e Úe¨VÊ@õ]cKM-Ÿhêim6ÑÔJ‰¦¾Ö^’Oj#óI¿¶õÿþoýùszmÿ÷éýßS™öÿ_ûójÕÅ$^¬.ʵ ¾ª¬%¾:N¿R*K‰¯êào™”úê|•§ñÕ¿ð+Kü­þÕ{ŸWIµ¸¾«T†øê ±'$ñ´ød-Áþå|ÕŠõŠþVªðWo‡à«¬ úøö|¥ÒŠø PQà¯vÁœÈŒ¦¾ xiShüÕ>œ_¦"ú¸ßKQã¸ÿ F»¢¾:¾Ý#¯ã.œ÷†˜ǰÅBëôί‚íS /er¢ÅÓ1\µ1Ž'…æWN|eÃUkˆú [,©•ö‰f4õÕe…æñÕW8B%¥MêðoU%õÕ[(UE̯:œ…O”¨wè+ªÅPöª"ôêwÈ^BO|‡k;/¨¯Žw}ê/ìI¨¬$fÎÏ}EÌèþAô‰¼žˆÿ$Ô M¾¼¯öÇ—¤S­íÿ9ûÿý¬úÿÞ“ÐU‘T&Ë*„þfп@÷z¬µ©rƒÐW@ÿýü«/ßïÉ«_#àɪ }uþ|K^3ÿ«§AÃPëúä/?üU«`Ö“ìÚÌR_}'/“¯TY0-z_é"£[|Ÿü-ò«Íä+;hdôÕyÊ‹Ø »¯¾‚Ümâo}¶GÃi‹³E¥žòŠøj¾Ê‰¯Âz7Ý1ý çü[âo¡äú›v¾BYìÑG”.®´Â_õ‘§SöuÚ…_eñÕÊ®§þÖý-B§ó=_}®P‹ø«];s.SI {Óás¢ Þ’ó¤üÁM§M¾¤ú²’uÚ[;¿Ö«,‰éWí8_Y¼ë¼µ²ÿñÕç!ùÉ&_™œcœaßþ­·¿ÉW6etÎ$é³àtŽÿ•¦´I¯s¼¯ec ÚdšfÊi“I‹ýÕeú·=1h“Éߢ´ÉËWúÛ ŒÑ9þWE©3ù[†ÒßáWÃÙ-øê7øJQzâýj1c´‰ÿU–F›LþVFi€·ð«ª’ÑÓ>¼>ÿõ¤ˆ5ô…úHÌÂ×Õ{{~ŸÎ/¢ÅÕGøUfHmòrœ|esB›ü†_ex}kÇ1øê©$4f¸j)y^µ«c5í#ñU{* ¿*8mrôÇ‘Õ&Gt"¦´ÉÑ3‡•el“IJ¨µœ6ñ¾ºð(mrDÚ„°`ÞŽ÷X0“ ›é¦sü¿¥2Nç};Ýp:çè[à%§sü*-§s&’¨8ãñR•fìÿoe¹æ4“//SršÉïã°§kûð²§Öö ¿ü¯ª’±™¦KqZn2Ž%§å|öÆ06Ól‹ƒ.œ°Ï8]xœÑ˜_Ô¢át¡ÿU®8]x”}7]8ù[–Ó…s_ ºp"{>T;@“ë'l±(ßä«”³}'RÕœíëE͉AûNæWÁ·çF{ИәÃỉ¼ò‚ј“«”јS^%£1'_iÎÆœ~EØ…‡îV`š³_ºð3ù¬ý¯T¦È¿5ýê¦ïß!üJ:º•jð•Å÷®çã.y]OdÏj¹ÉßN„–›¶X’öêy3i±âÖöa%{»µêÉW”žhWGð5'ÚÕAþ-4B?Ùä+•2þÕéßʘ>~¾ßÓÇÉWÔ™ïõ|ÏW½$&_e9¹#Ÿ7³k`_ûì3ÒRhÿV<5ÁWçà«v’ðà+ÊÝj¦ðoru_©‚ÇÉW¦`vd? X>ÑaGö¾ÊtÉÝ”ùKš|Ø·'‰ÇŒ7j;åÅîîþWYÆš&-*nwŸ|ÅúÉý¯rvwŸH"åöí û’òl…UCrʧÖohŽŠÙEý¿e(ô!üê©äîÀ&_±žæéœ î­Âù5j¦é½ÕªŸÚï£2XßïwÁWOUQ‘úþUù_ÝnO§_ïžX_í$WÔr÷ÛþWUÆYµ“¿¥3ï'_eœµžYi¯(Å_åÜ\ü­‚³ çx½¢ärê¦ìeH?î¼=ÍÓ%î2Oè«”±ø¦_ŒÅ7ûUoñÍ…[Ä»Õw¿MFˆÐÑßíM¿¢väï~šþ-,Õï~ÊžØ;>ß“Õ4{33Ìêð¿Ê©;Ö~ux_©"+™Õáÿ-e9Û„WNµŸ~Uf¥ù_ewß1M‡äÖ£ÿ•¥VÇË+ʉ­˜UëË+¯ fÕúËä”ÿ+Ldµ&eâ:&ãXVÌ™oÒ¢åÎ|“>VŠÑÞWÚP±+‡¯ào)Ê&ï}iÓ¹ª™=mò•©=19\\G˜ÛLë‰ {Êø‰Z¤î·û“á´EîŽbþ«à+•2÷µo“¿¥¨›Œ=úª }ió_õÞ»){êV¤¿"N¿;¤™(›|j&ú+¬MžR&>gòåãÛªÖ‚ñ×vZ♳UÉ÷×d„JÎ8•q§³¾´§ßéê î·¿è«‚¹Ó!$1ù[ß}ÜЄ}N}µ¾¢4ùw»†‚¯ÿDÇëí=qŸíî«ß7b~QûcæÛ÷ìþ˜y.QËÅ ¹¯”* í{Û3ÿî„;[M¾bÎCûÉWE¦¹ý1óÝ…ÜÙÊÿ[dÌð?ú«d÷G?1¸PÌ Ìÿʦ)·‹z-ꔋTšŒ#u Žrü_ˆ’鳜»‘ò¿Ò9wšó¾ÊŠ’Ý3ÏyGú1w!û¢âölj칻¦ {ÃîÙ]û£/¯4çöÇ Ý¨Sûc6q6ìÙŒÇmØ}y:îñe5ù[eÉxa§Ë’Ñ‘Áß"ü_»P›H{Zvמ–ݵ§ewíi™ ƒ[Ü‚¯H^ûƒ¾Ò„·óÜÎÂ×ÝtF³û£·:qKy>µ-–¾ž0%Í0a¯snÊîÚa2ù^ô¶Ãø)̹ævëgM°;Œõ¯EÙ˜•­ŽÛcçýrûéWeÉí0Öw̧Üceoúm‡ñ¾*Sv‡±3gwT;"cý&“¯¨QõKyïp™ÒˆêP»h˜ø¯TÊîv.~u~¥Ù³•½ël奷wØ»öÿ«‚»u›¶Xp{Ç\‹ÃÞaå(ýÛÞ1‘«£í]:ÚÞ¥£í]:Ú›Íp;wXÙ;|Ó«3ëñ¦W­o¯óµ³V§ò"¢Ä^÷÷|µ9Ó_ÓO2VŠ‹¾õ¾Rÿ>͆¯¸ü!ÿ+r÷“¿¥éìKÏéBÿ«LqÞáÉß*8-Gð"ò‡Âº´–›~•1~¦)¯û}‰Jœ.œŒ¶å"þ§}äìèÉWŠ‹-˜òâ|ÈÓ¿ÅݰòBzb3+‰ž9„•Öy ^×skГ¯Jò«txˆØ •hqøê:Ûb:<ànʈ›~xúXòO¸'Šç¿:£{…·Óëê{õ¿ÿûÃ%¬DyLP-1.10.4/Data/Sample/0000755000175200017520000000000013434203623013145 5ustar coincoinDyLP-1.10.4/Data/Sample/app0110.time0000755000175200017520000000075411015552002015107 0ustar coincoinTIME APP PERIODS LP X00101 K01 ROOT I00102 D00102 STAGE-2 I00103 D00103 STAGE-3 ENDATA DyLP-1.10.4/Data/Sample/scOneInt.mps0000644000175200017520000000210710430174061015404 0ustar coincoinNAME scOnInt ROWS N obj G row1 G row2 G row3 G scrow1 G scrow2 G scrow3 COLUMNS INT1 'MARKER' 'INTORG' x1 obj 24.000 scrow1 15.000 x2 obj 12.000 scrow2 20.000 x3 obj 16.000 scrow3 5.000 INT1END 'MARKER' 'INTEND' y1 obj 4.000 row1 1.000 y1 row2 1.000 row3 2.000 y1 scrow1 -1.000 y2 obj 2.000 row1 3.000 y2 row3 2.000 scrow2 -1.000 y3 obj 3.000 row2 2.000 y3 scrow3 -1.000 RHS RHS row1 15.000 RHS row2 10.000 RHS row3 20.000 RHS scrow1 0.000 RHS scrow2 0.000 RHS scrow3 0.000 BOUNDS UP intbnd x3 7.0 ENDATA DyLP-1.10.4/Data/Sample/wedding_16.block0000644000175200017520000000672512136243266016127 0ustar coincoin0 0 1 1 2 2 3 3 4 4 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 1 46 1 47 1 48 1 49 1 50 1 51 1 52 1 53 1 54 0 55 1 56 1 57 1 58 1 59 1 60 1 61 1 62 1 63 1 64 1 65 0 66 1 67 1 68 1 69 1 70 1 71 1 72 1 73 1 74 1 75 1 76 0 77 1 78 1 79 1 80 1 81 1 82 1 83 1 84 1 85 1 86 1 87 0 88 1 89 1 90 1 91 1 92 1 93 1 94 1 95 1 96 1 97 1 98 0 99 1 100 1 101 1 102 1 103 1 104 1 105 1 106 1 107 1 108 1 109 0 110 1 111 1 112 1 113 1 114 1 115 1 116 1 117 1 118 1 119 1 120 0 121 1 122 1 123 1 124 1 125 1 126 1 127 1 128 1 129 1 130 1 131 0 132 0 133 1 134 1 135 1 136 1 137 1 138 1 139 1 140 1 141 1 142 1 143 0 144 1 145 1 146 1 147 1 148 1 149 1 150 1 151 1 152 1 153 1 154 0 155 1 156 1 157 1 158 1 159 1 160 1 161 1 162 1 163 1 164 1 165 0 166 1 167 1 168 1 169 1 170 1 171 1 172 1 173 1 174 1 175 1 176 0 177 1 178 2 179 2 180 2 181 2 182 2 183 2 184 2 185 2 186 2 187 0 188 2 189 2 190 2 191 2 192 2 193 2 194 2 195 2 196 2 197 2 198 0 199 2 200 2 201 2 202 2 203 2 204 2 205 2 206 2 207 2 208 2 209 0 210 2 211 2 212 2 213 2 214 2 215 2 216 2 217 2 218 2 219 2 220 0 221 2 222 2 223 2 224 2 225 2 226 2 227 2 228 2 229 2 230 2 231 0 232 2 233 2 234 2 235 2 236 2 237 2 238 2 239 2 240 2 241 2 242 0 243 0 244 2 245 2 246 2 247 2 248 2 249 2 250 2 251 2 252 2 253 2 254 0 255 2 256 2 257 2 258 2 259 2 260 2 261 2 262 2 263 2 264 2 265 0 266 2 267 2 268 2 269 2 270 2 271 2 272 2 273 2 274 2 275 2 276 0 277 2 278 2 279 2 280 2 281 2 282 2 283 2 284 2 285 2 286 2 287 0 288 2 289 2 290 2 291 2 292 2 293 2 294 2 295 2 296 2 297 2 298 0 299 2 300 2 301 2 302 2 303 2 304 2 305 2 306 2 307 2 308 2 309 0 310 2 311 3 312 3 313 3 314 3 315 3 316 3 317 3 318 3 319 3 320 0 321 3 322 3 323 3 324 3 325 3 326 3 327 3 328 3 329 3 330 3 331 0 332 3 333 3 334 3 335 3 336 3 337 3 338 3 339 3 340 3 341 3 342 0 343 3 344 3 345 3 346 3 347 3 348 3 349 3 350 3 351 3 352 3 353 0 354 0 355 3 356 3 357 3 358 3 359 3 360 3 361 3 362 3 363 3 364 3 365 0 366 3 367 3 368 3 369 3 370 3 371 3 372 3 373 3 374 3 375 3 376 0 377 3 378 3 379 3 380 3 381 3 382 3 383 3 384 3 385 3 386 3 387 0 388 3 389 3 390 3 391 3 392 3 393 3 394 3 395 3 396 3 397 3 398 0 399 3 400 3 401 3 402 3 403 3 404 3 405 3 406 3 407 3 408 3 409 0 410 3 411 3 412 3 413 3 414 3 415 3 416 3 417 3 418 3 419 3 420 0 421 3 422 3 423 3 424 3 425 3 426 3 427 3 428 3 429 3 430 3 431 0 432 3 433 3 434 3 435 3 436 3 437 3 438 3 439 3 440 3 441 3 442 0 443 3 444 4 445 4 446 4 447 4 448 4 449 4 450 4 451 4 452 4 453 0 454 4 455 4 456 4 457 4 458 4 459 4 460 4 461 4 462 4 463 4 464 0 465 0 466 4 467 4 468 4 469 4 470 4 471 4 472 4 473 4 474 4 475 4 476 0 477 4 478 4 479 4 480 4 481 4 482 4 483 4 484 4 485 4 486 4 487 0 488 4 489 4 490 4 491 4 492 4 493 4 494 4 495 4 496 4 497 4 498 0 499 4 500 4 501 4 502 4 503 4 504 4 505 4 506 4 507 4 508 4 509 0 510 4 511 4 512 4 513 4 514 4 515 4 516 4 517 4 518 4 519 4 520 0 521 4 522 4 523 4 524 4 525 4 526 4 527 4 528 4 529 4 530 4 531 0 532 4 533 4 534 4 535 4 536 4 537 4 538 4 539 4 540 4 541 4 542 0 543 4 544 4 545 4 546 4 547 4 548 4 549 4 550 4 551 4 552 4 553 0 554 4 555 4 556 4 557 4 558 4 559 4 560 4 561 4 562 4 563 4 564 0 565 4 566 4 567 4 568 4 569 4 570 4 571 4 572 4 573 4 574 4 575 0 576 0 577 4 578 0 579 0 580 0 581 0 582 0 583 0 584 0 585 0 586 0 587 0 588 0 589 0 590 0 591 0 592 0 593 0 594 0 595 0 596 0 597 0 598 0 599 0 600 0 601 0 602 0 603 0 604 0 605 0 606 0 607 0 608 0 609 0 610 0 611 0 612 0 613 0 614 0 615 0 616 0 617 0 618 0 619 0 620 DyLP-1.10.4/Data/Sample/configure0000755000175200017520000034547013374040606015074 0ustar coincoin#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for DataSample 1.2.11. # # Report bugs to . # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # # # Copyright 2006 International Business Machines and others. # All Rights Reserved. # This file is part of the open source package Coin which is distributed # under the Eclipse Public License. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='DataSample' PACKAGE_TARNAME='datasample' PACKAGE_VERSION='1.2.11' PACKAGE_STRING='DataSample 1.2.11' PACKAGE_BUGREPORT='https://projects.coin-or.org/BuildTools/' ac_unique_file="configure.ac" ac_default_prefix=`pwd` ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS ALWAYS_FALSE_TRUE ALWAYS_FALSE_FALSE have_svnversion DATASAMPLE_SVN_REV EGREP LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOLM4 have_autoconf have_automake have_svn BUILDTOOLSDIR AUX_DIR abs_source_dir abs_lib_dir abs_include_dir abs_bin_dir HAVE_EXTERNALS_TRUE HAVE_EXTERNALS_FALSE build build_cpu build_vendor build_os EXAMPLE_UNCOMPRESSED_FILES EXAMPLE_FILES EXAMPLE_CLEAN_FILES ABSBUILDDIR LIBEXT VPATH_DISTCLEANFILES LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # 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. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= 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 ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -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 | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$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 ;; -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 ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) 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 ;; -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=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 ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && 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'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac 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 echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 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 # 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 its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | 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 if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias # # 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 DataSample 1.2.11 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 \`..'] _ACEOF cat <<_ACEOF 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] --datadir=DIR read-only architecture-independent data [PREFIX/share] --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] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _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] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of DataSample 1.2.11:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-msvc Prefer (i)cl/ifort/link over GNU on MinGW/Cygwin. Report bugs to . _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style 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 elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF DataSample configure 1.2.11 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by DataSample $as_me 1.2.11, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { 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` hostinfo = `(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=. echo "PATH: $as_dir" done } >&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_sep= 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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$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 ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >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 # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" 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. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 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 `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 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 { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`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. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } 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 # List one file in the package so that the configure script can test # whether the package is actually there # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. # As backup, we make sure we don't loose an FLIBS if it has been set # by the user save_FLIBS="$FLIBS" # A useful makefile conditional that is always false if false; then ALWAYS_FALSE_TRUE= ALWAYS_FALSE_FALSE='#' else ALWAYS_FALSE_TRUE='#' ALWAYS_FALSE_FALSE= fi # We set the following variable so that we know later in AC_COIN_FINALIZE # that we are in a project main directory coin_projectdir=yes # Set the project's version numbers cat >>confdefs.h <<_ACEOF #define DATASAMPLE_VERSION "$PACKAGE_VERSION" _ACEOF coin_majorver=`echo $PACKAGE_VERSION | sed -n -e 's/^\([0-9]*\).*/\1/gp'` coin_minorver=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.\([0-9]*\).*/\1/gp'` coin_releasever=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\).*/\1/gp'` if test "x$coin_majorver" = x ; then coin_majorver=9999 ; fi if test "x$coin_minorver" = x ; then coin_minorver=9999 ; fi if test "x$coin_releasever" = x ; then coin_releasever=9999 ; fi cat >>confdefs.h <<_ACEOF #define DATASAMPLE_VERSION_MAJOR $coin_majorver _ACEOF cat >>confdefs.h <<_ACEOF #define DATASAMPLE_VERSION_MINOR $coin_minorver _ACEOF cat >>confdefs.h <<_ACEOF #define DATASAMPLE_VERSION_RELEASE $coin_releasever _ACEOF # We use the following variable to have a string with the upper case # version of the project name COIN_PRJCT=DATASAMPLE # Set the project's SVN revision number. The complicated sed expression # (made worse by quadrigraphs) ensures that things like 4123:4168MS end up # as a single number. # Extract the first word of "svnversion", so it can be a program name with args. set dummy svnversion; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svnversion+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svnversion"; then ac_cv_prog_have_svnversion="$have_svnversion" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svnversion="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svnversion" && ac_cv_prog_have_svnversion="no" fi fi have_svnversion=$ac_cv_prog_have_svnversion if test -n "$have_svnversion"; then echo "$as_me:$LINENO: result: $have_svnversion" >&5 echo "${ECHO_T}$have_svnversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "x$have_svnversion" = xyes; then svn_rev_tmp=`LANG=en_EN svnversion $srcdir 2>/dev/null` if test "x$svn_rev_tmp" != xexported -a "x$svn_rev_tmp" != x -a "x$svn_rev_tmp" != "xUnversioned directory"; then DATASAMPLE_SVN_REV=`echo $svn_rev_tmp | sed -n -e 's/^[0-9]*://' -e 's/\([0-9]\)[^0-9]*$/\1/p'` cat >>confdefs.h <<_ACEOF #define DATASAMPLE_SVN_REV $DATASAMPLE_SVN_REV _ACEOF fi fi # Capture libtool library version, if given. coin_libversion=2:11:1 ############################################################################# # We only need automake to generate Makefiles for the distribution # ############################################################################# # Initialize automake echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi am__api_version="1.9" ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; 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 { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # 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. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_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 ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done 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. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$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' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # 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 ( 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 rm -f conftest.file 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". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 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 $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 # AC_MSG_NOTICE([Beginning automake initialisation.]) # Stuff for automake # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } 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='datasample' VERSION='1.2.11' 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"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 # Check whether --enable-maintainer-mode or --disable-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; echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$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 coin_have_externals=no if test "$enable_maintainer_mode" = yes; then # If maintainer mode is chosen, we make sure that the correct versions # of the tools are used, and that we know where libtool.m4 is (to # recreate acinclude.m4) LIBTOOLM4= # Normally, $HOME AUTOTOOLS_DFLT=$HOME echo "$as_me:$LINENO: checking whether we are using the correct autotools" >&5 echo $ECHO_N "checking whether we are using the correct autotools... $ECHO_C" >&6 if test "${ac_cv_use_correct_autotools+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_use_correct_autotools=check fi echo "$as_me:$LINENO: result: $ac_cv_use_correct_autotools" >&5 echo "${ECHO_T}$ac_cv_use_correct_autotools" >&6 if test $ac_cv_use_correct_autotools = check; then ac_cv_use_correct_autotools=yes # Check if we have autoconf # Extract the first word of "autoconf", so it can be a program name with args. set dummy autoconf; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_autoconf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_autoconf"; then ac_cv_prog_have_autoconf="$have_autoconf" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_autoconf="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_autoconf" && ac_cv_prog_have_autoconf="no" fi fi have_autoconf=$ac_cv_prog_have_autoconf if test -n "$have_autoconf"; then echo "$as_me:$LINENO: result: $have_autoconf" >&5 echo "${ECHO_T}$have_autoconf" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_autoconf = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether autoconf is the correct version correct_version='2.59' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of autoconf" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of autoconf... $ECHO_C" >&6 autoconf --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of autoconf as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of autoconf as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable autoconf is picked up from the correct location echo "$as_me:$LINENO: checking whether autoconf is coming from the correct location" >&5 echo $ECHO_N "checking whether autoconf is coming from the correct location... $ECHO_C" >&6 autoconf_dir=`which autoconf | sed -e 's=/autoconf=='` autoconf_dir=`cd $autoconf_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $autoconf_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if we have automake # Extract the first word of "automake", so it can be a program name with args. set dummy automake; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_automake+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_automake"; then ac_cv_prog_have_automake="$have_automake" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_automake="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_automake" && ac_cv_prog_have_automake="no" fi fi have_automake=$ac_cv_prog_have_automake if test -n "$have_automake"; then echo "$as_me:$LINENO: result: $have_automake" >&5 echo "${ECHO_T}$have_automake" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_automake = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether automake is the correct version correct_version='1.9.6' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of automake" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of automake... $ECHO_C" >&6 automake --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of automake as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of automake as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable automake is picked up from the correct location echo "$as_me:$LINENO: checking whether automake is coming from the correct location" >&5 echo $ECHO_N "checking whether automake is coming from the correct location... $ECHO_C" >&6 automake_dir=`which automake | sed -e 's=/automake=='` automake_dir=`cd $automake_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $automake_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if this is the correct version of libtool (with escaped dots) if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi correct_version='1.5.22' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` if test -r $want_dir/libtool/ltmain.sh; then have_ltmain=yes : else have_ltmain=no : fi echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of libtool." >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of libtool.... $ECHO_C" >&6 if test $have_ltmain = yes; then if $EGREP $grep_version $want_dir/libtool/ltmain.sh >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of libtool." >&5 echo "$as_me: error: You don't have the correct version of libtool." >&2;} { (exit 1); exit 1; }; } fi else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: I cannot find the ltmain.sh file." >&5 echo "$as_me: error: I cannot find the ltmain.sh file." >&2;} { (exit 1); exit 1; }; } fi fi # Check if we can find the libtool file if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi if test -r $want_dir/aclocal/libtool.m4; then LIBTOOLM4="$want_dir/aclocal/libtool.m4" : else { { echo "$as_me:$LINENO: error: I cannot find the libtool.m4 file." >&5 echo "$as_me: error: I cannot find the libtool.m4 file." >&2;} { (exit 1); exit 1; }; } : fi # Check if we have an Dependencies file if test -r $srcdir/Dependencies; then coin_have_externals=yes fi # Check if subversion is installed and understands https # Extract the first word of "svn", so it can be a program name with args. set dummy svn; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svn+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svn"; then ac_cv_prog_have_svn="$have_svn" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svn="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svn" && ac_cv_prog_have_svn="no" fi fi have_svn=$ac_cv_prog_have_svn if test -n "$have_svn"; then echo "$as_me:$LINENO: result: $have_svn" >&5 echo "${ECHO_T}$have_svn" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test x$have_svn = xyes; then echo "$as_me:$LINENO: checking whether svn understands https" >&5 echo $ECHO_N "checking whether svn understands https... $ECHO_C" >&6 if test "${ac_cv_svn_understands_https+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else svn --version > confauto.out 2>&1 if $EGREP https confauto.out >/dev/null 2>&1; then ac_cv_svn_understands_https=yes else ac_cv_svn_understands_https=no have_svn=no ac_cv_prog_have_svn=no fi rm -f confauto.out fi echo "$as_me:$LINENO: result: $ac_cv_svn_understands_https" >&5 echo "${ECHO_T}$ac_cv_svn_understands_https" >&6 fi # Find the location of the BuildTools directory BUILDTOOLSDIR= if test -r $srcdir/BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/BuildTools else if test -r $srcdir/../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../BuildTools else if test -r $srcdir/../../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../../BuildTools else { { echo "$as_me:$LINENO: error: Cannot find the BuildTools directory" >&5 echo "$as_me: error: Cannot find the BuildTools directory" >&2;} { (exit better disable maintainer mode.); exit better disable maintainer mode.; }; } fi fi fi # for running automake by make, we need to have Makemain.inc available at the place where it usually can be found during run_autotools if test "$BUILDTOOLSDIR" != "$srcdir/BuildTools" ; then $LN_S `cd $BUILDTOOLSDIR; pwd` "$srcdir/BuildTools" fi # The following variable is set to the name of the directory where # the autotool scripts are located AUX_DIR=$ac_aux_dir fi # helpful variable for the base directory of this package abs_source_dir=`cd $srcdir; pwd` # Stuff for example Makefiles if test x$prefix = xNONE; then full_prefix=$ac_default_prefix else full_prefix=$prefix fi full_prefix=`cd $full_prefix ; pwd` abs_lib_dir=$full_prefix/lib abs_include_dir=$full_prefix/include abs_bin_dir=$full_prefix/bin if test $coin_have_externals = yes && test x$have_svn = xyes; then HAVE_EXTERNALS_TRUE= HAVE_EXTERNALS_FALSE='#' else HAVE_EXTERNALS_TRUE='#' HAVE_EXTERNALS_FALSE= fi # AC_MSG_NOTICE([End automake initialisation.]) ############################################################################# #Find out what the data files are and create links if this is a VPATH config# ############################################################################# echo "$as_me:$LINENO: checking whether this is a VPATH configuration" >&5 echo $ECHO_N "checking whether this is a VPATH configuration... $ECHO_C" >&6 if test `cd $srcdir; pwd` != `pwd`; then coin_vpath_config=yes; else coin_vpath_config=no; fi echo "$as_me:$LINENO: result: $coin_vpath_config" >&5 echo "${ECHO_T}$coin_vpath_config" >&6 # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # for backward compatibility # Check whether --enable-doscompile or --disable-doscompile was given. if test "${enable_doscompile+set}" = set; then enableval="$enable_doscompile" enable_doscompile=$enableval else enable_doscompile=no fi; # Check whether --enable-msvc or --disable-msvc was given. if test "${enable_msvc+set}" = set; then enableval="$enable_msvc" enable_msvc=$enableval else enable_msvc=no if test "$enable_doscompile" = msvc ; then enable_msvc=yes elif test "$enable_doscompile" != no ; then { { echo "$as_me:$LINENO: error: --enable-doscompile=$enable_doscompile not supported anymore." >&5 echo "$as_me: error: --enable-doscompile=$enable_doscompile not supported anymore." >&2;} { (exit 1); exit 1; }; } fi fi; if test "$enable_msvc" = MD; then enable_shared=yes enable_msvc=yes fi if test "$enable_msvc" = yes; then case $build in *-cygwin* | *-mingw*) ;; *) { { echo "$as_me:$LINENO: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&5 echo "$as_me: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&2;} { (exit 1); exit 1; }; } ;; esac fi files=`cd $srcdir; ls *.mps` # We need to do the following loop to make sure that are no newlines # in the variable for file in $files; do EXAMPLE_FILES="$EXAMPLE_FILES $file" done if test $coin_vpath_config = yes; then lnkcmd= if test "$enable_msvc" = yes; then lnkcmd=cp fi case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) lnkcmd=cp ;; esac if test "x$lnkcmd" = xcp; then { echo "$as_me:$LINENO: Copying example files (*.mps)" >&5 echo "$as_me: Copying example files (*.mps)" >&6;} else { echo "$as_me:$LINENO: Creating links to the example files (*.mps)" >&5 echo "$as_me: Creating links to the example files (*.mps)" >&6;} lnkcmd="$LN_S" fi for file in $EXAMPLE_FILES; do rm -f $file $lnkcmd $srcdir/$file $file done EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES *.mps" else EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES" fi # In case there are compressed files, we create a variable with the # uncompressed names EXAMPLE_UNCOMPRESSED_FILES= for file in $EXAMPLE_FILES; do case $file in *.gz) EXAMPLE_UNCOMPRESSED_FILES="$EXAMPLE_UNCOMPRESSED_FILES `echo $file | sed -e s/.gz//`" ;; esac done files=`cd $srcdir; ls *.lp` # We need to do the following loop to make sure that are no newlines # in the variable for file in $files; do EXAMPLE_FILES="$EXAMPLE_FILES $file" done if test $coin_vpath_config = yes; then lnkcmd= if test "$enable_msvc" = yes; then lnkcmd=cp fi case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) lnkcmd=cp ;; esac if test "x$lnkcmd" = xcp; then { echo "$as_me:$LINENO: Copying example files (*.lp)" >&5 echo "$as_me: Copying example files (*.lp)" >&6;} else { echo "$as_me:$LINENO: Creating links to the example files (*.lp)" >&5 echo "$as_me: Creating links to the example files (*.lp)" >&6;} lnkcmd="$LN_S" fi for file in $EXAMPLE_FILES; do rm -f $file $lnkcmd $srcdir/$file $file done EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES *.lp" else EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES" fi # In case there are compressed files, we create a variable with the # uncompressed names EXAMPLE_UNCOMPRESSED_FILES= for file in $EXAMPLE_FILES; do case $file in *.gz) EXAMPLE_UNCOMPRESSED_FILES="$EXAMPLE_UNCOMPRESSED_FILES `echo $file | sed -e s/.gz//`" ;; esac done files=`cd $srcdir; ls *.block` # We need to do the following loop to make sure that are no newlines # in the variable for file in $files; do EXAMPLE_FILES="$EXAMPLE_FILES $file" done if test $coin_vpath_config = yes; then lnkcmd= if test "$enable_msvc" = yes; then lnkcmd=cp fi case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) lnkcmd=cp ;; esac if test "x$lnkcmd" = xcp; then { echo "$as_me:$LINENO: Copying example files (*.block)" >&5 echo "$as_me: Copying example files (*.block)" >&6;} else { echo "$as_me:$LINENO: Creating links to the example files (*.block)" >&5 echo "$as_me: Creating links to the example files (*.block)" >&6;} lnkcmd="$LN_S" fi for file in $EXAMPLE_FILES; do rm -f $file $lnkcmd $srcdir/$file $file done EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES *.block" else EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES" fi # In case there are compressed files, we create a variable with the # uncompressed names EXAMPLE_UNCOMPRESSED_FILES= for file in $EXAMPLE_FILES; do case $file in *.gz) EXAMPLE_UNCOMPRESSED_FILES="$EXAMPLE_UNCOMPRESSED_FILES `echo $file | sed -e s/.gz//`" ;; esac done files=`cd $srcdir; ls *.dec` # We need to do the following loop to make sure that are no newlines # in the variable for file in $files; do EXAMPLE_FILES="$EXAMPLE_FILES $file" done if test $coin_vpath_config = yes; then lnkcmd= if test "$enable_msvc" = yes; then lnkcmd=cp fi case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) lnkcmd=cp ;; esac if test "x$lnkcmd" = xcp; then { echo "$as_me:$LINENO: Copying example files (*.dec)" >&5 echo "$as_me: Copying example files (*.dec)" >&6;} else { echo "$as_me:$LINENO: Creating links to the example files (*.dec)" >&5 echo "$as_me: Creating links to the example files (*.dec)" >&6;} lnkcmd="$LN_S" fi for file in $EXAMPLE_FILES; do rm -f $file $lnkcmd $srcdir/$file $file done EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES *.dec" else EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES" fi # In case there are compressed files, we create a variable with the # uncompressed names EXAMPLE_UNCOMPRESSED_FILES= for file in $EXAMPLE_FILES; do case $file in *.gz) EXAMPLE_UNCOMPRESSED_FILES="$EXAMPLE_UNCOMPRESSED_FILES `echo $file | sed -e s/.gz//`" ;; esac done files=`cd $srcdir; ls input.130` # We need to do the following loop to make sure that are no newlines # in the variable for file in $files; do EXAMPLE_FILES="$EXAMPLE_FILES $file" done if test $coin_vpath_config = yes; then lnkcmd= if test "$enable_msvc" = yes; then lnkcmd=cp fi case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) lnkcmd=cp ;; esac if test "x$lnkcmd" = xcp; then { echo "$as_me:$LINENO: Copying example files (input.130)" >&5 echo "$as_me: Copying example files (input.130)" >&6;} else { echo "$as_me:$LINENO: Creating links to the example files (input.130)" >&5 echo "$as_me: Creating links to the example files (input.130)" >&6;} lnkcmd="$LN_S" fi for file in $EXAMPLE_FILES; do rm -f $file $lnkcmd $srcdir/$file $file done EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES input.130" else EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES" fi # In case there are compressed files, we create a variable with the # uncompressed names EXAMPLE_UNCOMPRESSED_FILES= for file in $EXAMPLE_FILES; do case $file in *.gz) EXAMPLE_UNCOMPRESSED_FILES="$EXAMPLE_UNCOMPRESSED_FILES `echo $file | sed -e s/.gz//`" ;; esac done files=`cd $srcdir; ls app0110.* app0110R.* bug.*` # We need to do the following loop to make sure that are no newlines # in the variable for file in $files; do EXAMPLE_FILES="$EXAMPLE_FILES $file" done if test $coin_vpath_config = yes; then lnkcmd= if test "$enable_msvc" = yes; then lnkcmd=cp fi case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) lnkcmd=cp ;; esac if test "x$lnkcmd" = xcp; then { echo "$as_me:$LINENO: Copying example files (app0110.* app0110R.* bug.*)" >&5 echo "$as_me: Copying example files (app0110.* app0110R.* bug.*)" >&6;} else { echo "$as_me:$LINENO: Creating links to the example files (app0110.* app0110R.* bug.*)" >&5 echo "$as_me: Creating links to the example files (app0110.* app0110R.* bug.*)" >&6;} lnkcmd="$LN_S" fi for file in $EXAMPLE_FILES; do rm -f $file $lnkcmd $srcdir/$file $file done EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES app0110.* app0110R.* bug.*" else EXAMPLE_CLEAN_FILES="$EXAMPLE_CLEAN_FILES" fi # In case there are compressed files, we create a variable with the # uncompressed names EXAMPLE_UNCOMPRESSED_FILES= for file in $EXAMPLE_FILES; do case $file in *.gz) EXAMPLE_UNCOMPRESSED_FILES="$EXAMPLE_UNCOMPRESSED_FILES `echo $file | sed -e s/.gz//`" ;; esac done ############################################################################## # Finishing up by writing all the output # ############################################################################## ABSBUILDDIR="`pwd`" # Here list all the files that configure should create (except for the # configuration header file) ac_config_files="$ac_config_files Makefile coindatasample.pc coindatasample-uninstalled.pc" # Finally, we let configure write all the output... echo "$as_me:$LINENO: checking which command should be used to link input files" >&5 echo $ECHO_N "checking which command should be used to link input files... $ECHO_C" >&6 coin_link_input_cmd="$LN_S" case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_link_input_cmd=cp ;; esac echo "$as_me:$LINENO: result: $coin_link_input_cmd" >&5 echo "${ECHO_T}$coin_link_input_cmd" >&6 if test x$coin_skip_ac_output != xyes; then # library extension case "$CC" in clang* ) LIBEXT=a ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LIBEXT=lib ;; *) LIBEXT=a ;; esac # Define VPATH_DISTCLEANFILES to be everything that needs to be # cleaned for distclean in a vpath configuration VPATH_DISTCLEANFILES="$coin_vpath_link_files" # Take out subdirectories if their configuration concluded that they # don't need to be compiled if test x"$coin_ac_skip_subdirs" != x; then new_subdirs= for i in $subdirs; do skipme=no for j in $coin_ac_skip_subdirs; do if test $i = $j; then skipme=yes; fi done if test $skipme = no; then new_subdirs="$new_subdirs $i" fi done subdirs="$new_subdirs" fi # need to come before AC_OUTPUT if test x$coin_projectdir != xyes; then # write coin_subdirs to a file so that project configuration knows where to find uninstalled projects echo $coin_subdirs > coin_subdirs.txt else # substitute for OBJDIR, needed to setup .pc file for uninstalled project ABSBUILDDIR="`pwd`" fi 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, don't put newlines in cache variables' values. # 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. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *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 \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" 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}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ 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[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then we branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. cat >confdef2opt.sed <<\_ACEOF t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g t quote s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g t quote d : quote s,[ `~#$^&*(){}\\|;'"<>?],\\&,g s,\[,\\&,g s,\],\\&,g s,\$,$$,g p _ACEOF # We use echo to avoid assuming a particular line-breaking character. # The extra dot is to prevent the shell from consuming trailing # line-breaks from the sub-command output. A line-break within # single-quotes doesn't work because, if this script is created in a # platform that uses two characters for line-breaks (e.g., DOS), tr # would break. ac_LF_and_DOT=`echo; echo .` DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` rm -f confdef2opt.sed ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${ALWAYS_FALSE_TRUE}" && test -z "${ALWAYS_FALSE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${HAVE_EXTERNALS_TRUE}" && test -z "${HAVE_EXTERNALS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $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} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by DataSample $as_me 1.2.11, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -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 --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ DataSample config.status 1.2.11 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. 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=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; 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 if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "coindatasample.pc" ) CONFIG_FILES="$CONFIG_FILES coindatasample.pc" ;; "coindatasample-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES coindatasample-uninstalled.pc" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; 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 fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@ALWAYS_FALSE_TRUE@,$ALWAYS_FALSE_TRUE,;t t s,@ALWAYS_FALSE_FALSE@,$ALWAYS_FALSE_FALSE,;t t s,@have_svnversion@,$have_svnversion,;t t s,@DATASAMPLE_SVN_REV@,$DATASAMPLE_SVN_REV,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@mkdir_p@,$mkdir_p,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@AMTAR@,$AMTAR,;t t s,@am__tar@,$am__tar,;t t s,@am__untar@,$am__untar,;t t s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t s,@MAINT@,$MAINT,;t t s,@LIBTOOLM4@,$LIBTOOLM4,;t t s,@have_autoconf@,$have_autoconf,;t t s,@have_automake@,$have_automake,;t t s,@have_svn@,$have_svn,;t t s,@BUILDTOOLSDIR@,$BUILDTOOLSDIR,;t t s,@AUX_DIR@,$AUX_DIR,;t t s,@abs_source_dir@,$abs_source_dir,;t t s,@abs_lib_dir@,$abs_lib_dir,;t t s,@abs_include_dir@,$abs_include_dir,;t t s,@abs_bin_dir@,$abs_bin_dir,;t t s,@HAVE_EXTERNALS_TRUE@,$HAVE_EXTERNALS_TRUE,;t t s,@HAVE_EXTERNALS_FALSE@,$HAVE_EXTERNALS_FALSE,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@EXAMPLE_UNCOMPRESSED_FILES@,$EXAMPLE_UNCOMPRESSED_FILES,;t t s,@EXAMPLE_FILES@,$EXAMPLE_FILES,;t t s,@EXAMPLE_CLEAN_FILES@,$EXAMPLE_CLEAN_FILES,;t t s,@ABSBUILDDIR@,$ABSBUILDDIR,;t t s,@LIBEXT@,$LIBEXT,;t t s,@VPATH_DISTCLEANFILES@,$VPATH_DISTCLEANFILES,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # 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. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;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,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # 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 || { (exit 1); exit 1; } fi if test x"$coin_vpath_link_files" = x; then : ; else lnkcmd="$coin_link_input_cmd" if test "$lnkcmd" = cp; then { echo "$as_me:$LINENO: Copying data files for VPATH configuration" >&5 echo "$as_me: Copying data files for VPATH configuration" >&6;} else { echo "$as_me:$LINENO: Creating VPATH links for data files" >&5 echo "$as_me: Creating VPATH links for data files" >&6;} fi for file in $coin_vpath_link_files; do dir=`(dirname "./$file") 2>/dev/null || $as_expr X"./$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"./$file" : 'X\(//\)[^/]' \| \ X"./$file" : 'X\(//\)$' \| \ X"./$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"./$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test -d $dir; then : ; else { if $as_mkdir_p; then mkdir -p $dir else as_dir=$dir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dir" >&5 echo "$as_me: error: cannot create directory $dir" >&2;} { (exit 1); exit 1; }; }; } fi rm -f $file $lnkcmd $abs_source_dir/$file $file done fi { echo "$as_me:$LINENO: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&5 echo "$as_me: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&6;} if test x$coin_projectdir = xyes; then { echo "$as_me:$LINENO: Configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Configuration of $PACKAGE_NAME successful" >&6;} else { echo "$as_me:$LINENO: Main configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Main configuration of $PACKAGE_NAME successful" >&6;} fi else { echo "$as_me:$LINENO: No configuration of $PACKAGE_NAME necessary" >&5 echo "$as_me: No configuration of $PACKAGE_NAME necessary" >&6;} fi DyLP-1.10.4/Data/Sample/Makefile.in0000644000175200017520000005205513374040606015224 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 # Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 ######################################################################## # Documentation installation # ######################################################################## srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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@ DIST_COMMON = $(am__configure_deps) $(srcdir)/BuildTools/Makemain.inc \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/coindatasample-uninstalled.pc.in \ $(srcdir)/coindatasample.pc.in $(top_srcdir)/configure \ config.guess config.sub depcomp install-sh ltmain.sh missing @HAVE_EXTERNALS_TRUE@am__append_1 = Dependencies @HAVE_EXTERNALS_TRUE@am__append_2 = .Dependencies-stamp subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.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 configure.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = coindatasample.pc coindatasample-uninstalled.pc SOURCES = DIST_SOURCES = 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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(datacoindir)" \ "$(DESTDIR)$(pkgconfiglibdir)" datacoinDATA_INSTALL = $(INSTALL_DATA) pkgconfiglibDATA_INSTALL = $(INSTALL_DATA) DATA = $(datacoin_DATA) $(pkgconfiglib_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CYGPATH_W = @CYGPATH_W@ DATASAMPLE_SVN_REV = @DATASAMPLE_SVN_REV@ DEFS = @DEFS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXAMPLE_CLEAN_FILES = @EXAMPLE_CLEAN_FILES@ EXAMPLE_FILES = @EXAMPLE_FILES@ EXAMPLE_UNCOMPRESSED_FILES = @EXAMPLE_UNCOMPRESSED_FILES@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_ct_STRIP = @ac_ct_STRIP@ am__leading_dot = @am__leading_dot@ 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@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host_alias = @host_alias@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # List files that should be distributed # ######################################################################## EXTRA_DIST = $(EXAMPLE_FILES) $(am__append_1) DISTCLEANFILES = $(EXAMPLE_CLEAN_FILES) $(am__append_2) \ $(VPATH_DISTCLEANFILES) datacoindir = $(datadir)/coin/Data/Sample datacoin_DATA = $(EXAMPLE_FILES) pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = coindatasample.pc DocFiles = README AUTHORS LICENSE DocInstallDir = $(datadir)/coin/doc/$(PACKAGE_NAME) COIN_HAS_DOXYGEN = @COIN_HAS_DOXYGEN_TRUE@TRUE COIN_HAS_LATEX = @COIN_HAS_LATEX_TRUE@TRUE all: all-am .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/BuildTools/Makemain.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ cd $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ 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) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) coindatasample.pc: $(top_builddir)/config.status $(srcdir)/coindatasample.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ coindatasample-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/coindatasample-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ uninstall-info-am: install-datacoinDATA: $(datacoin_DATA) @$(NORMAL_INSTALL) test -z "$(datacoindir)" || $(mkdir_p) "$(DESTDIR)$(datacoindir)" @list='$(datacoin_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(datacoinDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(datacoindir)/$$f'"; \ $(datacoinDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(datacoindir)/$$f"; \ done uninstall-datacoinDATA: @$(NORMAL_UNINSTALL) @list='$(datacoin_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(datacoindir)/$$f'"; \ rm -f "$(DESTDIR)$(datacoindir)/$$f"; \ done install-pkgconfiglibDATA: $(pkgconfiglib_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfiglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfiglibdir)" @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(pkgconfiglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ $(pkgconfiglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done uninstall-pkgconfiglibDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ rm -f "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/. $(distdir)/BuildTools @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -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 $(SHELL) $(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__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__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) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(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 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { 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-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(datacoindir)" "$(DESTDIR)$(pkgconfiglibdir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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 mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-datacoinDATA install-pkgconfiglibDATA install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -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-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-datacoinDATA uninstall-info-am \ uninstall-pkgconfiglibDATA .PHONY: all all-am am--refresh check check-am clean clean-generic dist \ dist-all dist-bzip2 dist-gzip dist-shar dist-tarZ dist-zip \ distcheck distclean distclean-generic distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-datacoinDATA install-exec install-exec-am install-info \ install-info-am install-man install-pkgconfiglibDATA \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-datacoinDATA uninstall-info-am \ uninstall-pkgconfiglibDATA doxygen-docs: if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ doxygen doxydoc/doxygen.conf;\ fi;\ fi pdf-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/latex"; then \ if test "$(COIN_HAS_LATEX)" = TRUE; then \ cd doxydoc/latex;\ $(MAKE) pdf;\ cd -;\ fi;\ fi;\ fi clean-doxygen-docs: if test -d "doxydoc/"; then \ cd doxydoc ;\ rm -rf html latex *.log *.tag;\ fi install-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc"; \ $(INSTALL_DATA) @coin_doxy_tagname@ "$(DESTDIR)$(DocInstallDir)/@coin_doxy_tagname@";\ if test -f "doxydoc/latex/refman.pdf"; then \ $(INSTALL_DATA) doxydoc/latex/refman.pdf "$(DESTDIR)$(DocInstallDir)";\ fi;\ if test -d "doxydoc/html"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/search/" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc/search/"; \ $(INSTALL_DATA) doxydoc/html/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc";\ $(INSTALL_DATA) doxydoc/html/search/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc/search";\ fi;\ fi;\ fi uninstall-doxygen-docs: if test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/"; then \ rm -rf "$(DESTDIR)$(DocInstallDir)/doxydoc/"; \ fi if test -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; then \ rm -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; \ fi all-doxygen-docs: for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) doxygen-docs) \ fi ; \ done ; clean-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) clean-doxygen-docs) \ fi ; \ done ; install-all-doxygen-docs: all-doxygen-docs for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) install-doxygen-docs) \ fi ; \ done ; uninstall-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) uninstall-doxygen-docs) \ fi ; \ done ; install-doc: $(DocFiles) test -z "$(DocInstallDir)" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)" for file in $(DocFiles); do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ if test -f "$$dir$$file"; then $(INSTALL_DATA) "$$dir$$file" "$(DESTDIR)$(DocInstallDir)/$$file"; fi; \ done uninstall-doc: for file in $(DocFiles); do \ rm -f "$(DESTDIR)$(DocInstallDir)/$$file"; \ done ######################################################################## # Maintainer Stuff # ######################################################################## # Make sure acinclude is using most recent coin.m4 @MAINTAINER_MODE_TRUE@$(srcdir)/acinclude.m4: $(BUILDTOOLSDIR)/coin.m4 @MAINTAINER_MODE_TRUE@ cat $(LIBTOOLM4) $< > $@ # Make sure the autotools scripts are up to date @MAINTAINER_MODE_TRUE@$(AUX_DIR)/install-sh: $(BUILDTOOLSDIR)/install-sh @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/missing: $(BUILDTOOLSDIR)/missing @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.guess: $(BUILDTOOLSDIR)/config.guess @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.sub: $(BUILDTOOLSDIR)/config.sub @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/depcomp: $(BUILDTOOLSDIR)/depcomp @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/ltmain.sh: $(BUILDTOOLSDIR)/ltmain.sh @MAINTAINER_MODE_TRUE@ cp $< $@ # Take care of updating externals (if Dependencies file exists) @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@$(top_builddir)/Makefile: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@.Dependencies-stamp: $(srcdir)/Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); BuildTools/set_externals Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ touch .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@update-externals: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); svn update .PHONY: install-doc uninstall-doc update-externals test: @echo "No test available." # 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: DyLP-1.10.4/Data/Sample/app0110R.stoch0000755000175200017520000001062311015552002015407 0ustar coincoinNAME MYSMPS SCENARIOS DISCRETE REPLACE SC SCEN0001 ROOT 0.111 STG00002 RHS R0000010 2 RHS R0000011 1 RHS R0000012 2 RHS R0000013 2 RHS R0000014 3 RHS R0000015 1 RHS R0000017 2 RHS R0000018 4 RHS R0000019 1 RHS R0000020 4 RHS R0000021 2 RHS R0000022 5 RHS R0000023 1 RHS R0000024 5 RHS R0000025 2 SC SCEN0002 SCEN0001 0.111 STG00003 RHS R0000014 2 RHS R0000015 3 RHS R0000018 2 RHS R0000019 2 RHS R0000020 2 RHS R0000021 3 RHS R0000022 2 RHS R0000023 1 RHS R0000024 1 RHS R0000025 3 SC SCEN0003 SCEN0001 0.111 STG00003 RHS R0000014 3 RHS R0000017 4 RHS R0000018 2 RHS R0000019 5 RHS R0000020 2 RHS R0000021 3 RHS R0000022 1 RHS R0000023 5 RHS R0000024 1 RHS R0000025 2 SC SCEN0004 ROOT 0.111 STG00002 RHS R0000010 2 RHS R0000011 2 RHS R0000012 2 RHS R0000013 3 RHS R0000014 3 RHS R0000015 1 RHS R0000017 2 RHS R0000018 4 RHS R0000019 1 RHS R0000020 4 RHS R0000021 2 RHS R0000022 5 RHS R0000023 1 RHS R0000024 5 RHS R0000025 2 SC SCEN0005 SCEN0004 0.111 STG00003 RHS R0000014 2 RHS R0000015 3 RHS R0000018 2 RHS R0000019 2 RHS R0000020 2 RHS R0000021 3 RHS R0000022 2 RHS R0000023 1 RHS R0000024 1 RHS R0000025 3 SC SCEN0006 SCEN0004 0.111 STG00003 RHS R0000014 3 RHS R0000017 4 RHS R0000018 2 RHS R0000019 5 RHS R0000020 2 RHS R0000021 3 RHS R0000022 1 RHS R0000023 5 RHS R0000024 1 RHS R0000025 2 SC SCEN0007 ROOT 0.111 STG00002 RHS R0000010 4 RHS R0000011 2 RHS R0000012 4 RHS R0000013 5 RHS R0000014 3 RHS R0000015 1 RHS R0000017 2 RHS R0000018 4 RHS R0000019 1 RHS R0000020 4 RHS R0000021 2 RHS R0000022 5 RHS R0000023 1 RHS R0000024 5 RHS R0000025 2 SC SCEN0008 SCEN0007 0.111 STG00003 RHS R0000014 2 RHS R0000015 3 RHS R0000018 2 RHS R0000019 2 RHS R0000020 2 RHS R0000021 3 RHS R0000022 2 RHS R0000023 1 RHS R0000024 1 RHS R0000025 3 SC SCEN0009 SCEN0007 0.111 STG00003 RHS R0000014 3 RHS R0000017 4 RHS R0000018 2 RHS R0000019 5 RHS R0000020 2 RHS R0000021 3 RHS R0000022 1 RHS R0000023 5 RHS R0000024 1 RHS R0000025 2 ENDATA DyLP-1.10.4/Data/Sample/atm_5_10_1.mps0000644000175200017520000032537212136243266015434 0ustar coincoinNAME BLANK FREE ROWS N OBJROW L budget(d_DATE0) L budget(d_DATE1) L budget(d_DATE2) L budget(d_DATE3) L budget(d_DATE4) L budget(d_DATE5) L budget(d_DATE6) L budget(d_DATE7) L budget(d_DATE8) L budget(d_DATE9) E demand_def(a_ATM0,d_DATE0) L linkv(a_ATM0,d_DATE0) E demand_def(a_ATM0,d_DATE1) L linkv(a_ATM0,d_DATE1) E demand_def(a_ATM0,d_DATE2) L linkv(a_ATM0,d_DATE2) E demand_def(a_ATM0,d_DATE3) L linkv(a_ATM0,d_DATE3) E demand_def(a_ATM0,d_DATE4) L linkv(a_ATM0,d_DATE4) E demand_def(a_ATM0,d_DATE5) L linkv(a_ATM0,d_DATE5) E demand_def(a_ATM0,d_DATE6) L linkv(a_ATM0,d_DATE6) E demand_def(a_ATM0,d_DATE7) L linkv(a_ATM0,d_DATE7) E demand_def(a_ATM0,d_DATE8) L linkv(a_ATM0,d_DATE8) E demand_def(a_ATM0,d_DATE9) L linkv(a_ATM0,d_DATE9) L pickone_x1(a_ATM0) L count(a_ATM0) L ztox1(a_ATM0,t_1) L ztox2(a_ATM0,t_1) G ztox3(a_ATM0,t_1) L ztox1(a_ATM0,t_2) L ztox2(a_ATM0,t_2) G ztox3(a_ATM0,t_2) L ztox1(a_ATM0,t_3) L ztox2(a_ATM0,t_3) G ztox3(a_ATM0,t_3) L ztox1(a_ATM0,t_4) L ztox2(a_ATM0,t_4) G ztox3(a_ATM0,t_4) L ztox1(a_ATM0,t_5) L ztox2(a_ATM0,t_5) G ztox3(a_ATM0,t_5) L ztox1(a_ATM0,t_6) L ztox2(a_ATM0,t_6) G ztox3(a_ATM0,t_6) L ztox1(a_ATM0,t_7) L ztox2(a_ATM0,t_7) G ztox3(a_ATM0,t_7) L ztox1(a_ATM0,t_8) L ztox2(a_ATM0,t_8) G ztox3(a_ATM0,t_8) L ztox1(a_ATM0,t_9) L ztox2(a_ATM0,t_9) G ztox3(a_ATM0,t_9) L ztox1(a_ATM0,t_10) L ztox2(a_ATM0,t_10) G ztox3(a_ATM0,t_10) E demand_def(a_ATM1,d_DATE0) L linkv(a_ATM1,d_DATE0) E demand_def(a_ATM1,d_DATE1) L linkv(a_ATM1,d_DATE1) E demand_def(a_ATM1,d_DATE2) L linkv(a_ATM1,d_DATE2) E demand_def(a_ATM1,d_DATE3) L linkv(a_ATM1,d_DATE3) E demand_def(a_ATM1,d_DATE4) L linkv(a_ATM1,d_DATE4) E demand_def(a_ATM1,d_DATE5) L linkv(a_ATM1,d_DATE5) E demand_def(a_ATM1,d_DATE6) L linkv(a_ATM1,d_DATE6) E demand_def(a_ATM1,d_DATE7) L linkv(a_ATM1,d_DATE7) E demand_def(a_ATM1,d_DATE8) L linkv(a_ATM1,d_DATE8) E demand_def(a_ATM1,d_DATE9) L linkv(a_ATM1,d_DATE9) L pickone_x1(a_ATM1) L count(a_ATM1) L ztox1(a_ATM1,t_1) L ztox2(a_ATM1,t_1) G ztox3(a_ATM1,t_1) L ztox1(a_ATM1,t_2) L ztox2(a_ATM1,t_2) G ztox3(a_ATM1,t_2) L ztox1(a_ATM1,t_3) L ztox2(a_ATM1,t_3) G ztox3(a_ATM1,t_3) L ztox1(a_ATM1,t_4) L ztox2(a_ATM1,t_4) G ztox3(a_ATM1,t_4) L ztox1(a_ATM1,t_5) L ztox2(a_ATM1,t_5) G ztox3(a_ATM1,t_5) L ztox1(a_ATM1,t_6) L ztox2(a_ATM1,t_6) G ztox3(a_ATM1,t_6) L ztox1(a_ATM1,t_7) L ztox2(a_ATM1,t_7) G ztox3(a_ATM1,t_7) L ztox1(a_ATM1,t_8) L ztox2(a_ATM1,t_8) G ztox3(a_ATM1,t_8) L ztox1(a_ATM1,t_9) L ztox2(a_ATM1,t_9) G ztox3(a_ATM1,t_9) L ztox1(a_ATM1,t_10) L ztox2(a_ATM1,t_10) G ztox3(a_ATM1,t_10) E demand_def(a_ATM2,d_DATE0) L linkv(a_ATM2,d_DATE0) E demand_def(a_ATM2,d_DATE1) L linkv(a_ATM2,d_DATE1) E demand_def(a_ATM2,d_DATE2) L linkv(a_ATM2,d_DATE2) E demand_def(a_ATM2,d_DATE3) L linkv(a_ATM2,d_DATE3) E demand_def(a_ATM2,d_DATE4) L linkv(a_ATM2,d_DATE4) E demand_def(a_ATM2,d_DATE5) L linkv(a_ATM2,d_DATE5) E demand_def(a_ATM2,d_DATE6) L linkv(a_ATM2,d_DATE6) E demand_def(a_ATM2,d_DATE7) L linkv(a_ATM2,d_DATE7) E demand_def(a_ATM2,d_DATE8) L linkv(a_ATM2,d_DATE8) E demand_def(a_ATM2,d_DATE9) L linkv(a_ATM2,d_DATE9) L pickone_x1(a_ATM2) L count(a_ATM2) L ztox1(a_ATM2,t_1) L ztox2(a_ATM2,t_1) G ztox3(a_ATM2,t_1) L ztox1(a_ATM2,t_2) L ztox2(a_ATM2,t_2) G ztox3(a_ATM2,t_2) L ztox1(a_ATM2,t_3) L ztox2(a_ATM2,t_3) G ztox3(a_ATM2,t_3) L ztox1(a_ATM2,t_4) L ztox2(a_ATM2,t_4) G ztox3(a_ATM2,t_4) L ztox1(a_ATM2,t_5) L ztox2(a_ATM2,t_5) G ztox3(a_ATM2,t_5) L ztox1(a_ATM2,t_6) L ztox2(a_ATM2,t_6) G ztox3(a_ATM2,t_6) L ztox1(a_ATM2,t_7) L ztox2(a_ATM2,t_7) G ztox3(a_ATM2,t_7) L ztox1(a_ATM2,t_8) L ztox2(a_ATM2,t_8) G ztox3(a_ATM2,t_8) L ztox1(a_ATM2,t_9) L ztox2(a_ATM2,t_9) G ztox3(a_ATM2,t_9) L ztox1(a_ATM2,t_10) L ztox2(a_ATM2,t_10) G ztox3(a_ATM2,t_10) E demand_def(a_ATM3,d_DATE0) L linkv(a_ATM3,d_DATE0) E demand_def(a_ATM3,d_DATE1) L linkv(a_ATM3,d_DATE1) E demand_def(a_ATM3,d_DATE2) L linkv(a_ATM3,d_DATE2) E demand_def(a_ATM3,d_DATE3) L linkv(a_ATM3,d_DATE3) E demand_def(a_ATM3,d_DATE4) L linkv(a_ATM3,d_DATE4) E demand_def(a_ATM3,d_DATE5) L linkv(a_ATM3,d_DATE5) E demand_def(a_ATM3,d_DATE6) L linkv(a_ATM3,d_DATE6) E demand_def(a_ATM3,d_DATE7) L linkv(a_ATM3,d_DATE7) E demand_def(a_ATM3,d_DATE8) L linkv(a_ATM3,d_DATE8) E demand_def(a_ATM3,d_DATE9) L linkv(a_ATM3,d_DATE9) L pickone_x1(a_ATM3) L count(a_ATM3) L ztox1(a_ATM3,t_1) L ztox2(a_ATM3,t_1) G ztox3(a_ATM3,t_1) L ztox1(a_ATM3,t_2) L ztox2(a_ATM3,t_2) G ztox3(a_ATM3,t_2) L ztox1(a_ATM3,t_3) L ztox2(a_ATM3,t_3) G ztox3(a_ATM3,t_3) L ztox1(a_ATM3,t_4) L ztox2(a_ATM3,t_4) G ztox3(a_ATM3,t_4) L ztox1(a_ATM3,t_5) L ztox2(a_ATM3,t_5) G ztox3(a_ATM3,t_5) L ztox1(a_ATM3,t_6) L ztox2(a_ATM3,t_6) G ztox3(a_ATM3,t_6) L ztox1(a_ATM3,t_7) L ztox2(a_ATM3,t_7) G ztox3(a_ATM3,t_7) L ztox1(a_ATM3,t_8) L ztox2(a_ATM3,t_8) G ztox3(a_ATM3,t_8) L ztox1(a_ATM3,t_9) L ztox2(a_ATM3,t_9) G ztox3(a_ATM3,t_9) L ztox1(a_ATM3,t_10) L ztox2(a_ATM3,t_10) G ztox3(a_ATM3,t_10) E demand_def(a_ATM4,d_DATE0) L linkv(a_ATM4,d_DATE0) E demand_def(a_ATM4,d_DATE1) L linkv(a_ATM4,d_DATE1) E demand_def(a_ATM4,d_DATE2) L linkv(a_ATM4,d_DATE2) E demand_def(a_ATM4,d_DATE3) L linkv(a_ATM4,d_DATE3) E demand_def(a_ATM4,d_DATE4) L linkv(a_ATM4,d_DATE4) E demand_def(a_ATM4,d_DATE5) L linkv(a_ATM4,d_DATE5) E demand_def(a_ATM4,d_DATE6) L linkv(a_ATM4,d_DATE6) E demand_def(a_ATM4,d_DATE7) L linkv(a_ATM4,d_DATE7) E demand_def(a_ATM4,d_DATE8) L linkv(a_ATM4,d_DATE8) E demand_def(a_ATM4,d_DATE9) L linkv(a_ATM4,d_DATE9) L pickone_x1(a_ATM4) L count(a_ATM4) L ztox1(a_ATM4,t_1) L ztox2(a_ATM4,t_1) G ztox3(a_ATM4,t_1) L ztox1(a_ATM4,t_2) L ztox2(a_ATM4,t_2) G ztox3(a_ATM4,t_2) L ztox1(a_ATM4,t_3) L ztox2(a_ATM4,t_3) G ztox3(a_ATM4,t_3) L ztox1(a_ATM4,t_4) L ztox2(a_ATM4,t_4) G ztox3(a_ATM4,t_4) L ztox1(a_ATM4,t_5) L ztox2(a_ATM4,t_5) G ztox3(a_ATM4,t_5) L ztox1(a_ATM4,t_6) L ztox2(a_ATM4,t_6) G ztox3(a_ATM4,t_6) L ztox1(a_ATM4,t_7) L ztox2(a_ATM4,t_7) G ztox3(a_ATM4,t_7) L ztox1(a_ATM4,t_8) L ztox2(a_ATM4,t_8) G ztox3(a_ATM4,t_8) L ztox1(a_ATM4,t_9) L ztox2(a_ATM4,t_9) G ztox3(a_ATM4,t_9) L ztox1(a_ATM4,t_10) L ztox2(a_ATM4,t_10) G ztox3(a_ATM4,t_10) COLUMNS x1(0_ATM0,1) demand_def(a_ATM0,d_DATE0) -282.2 demand_def(a_ATM0,d_DATE1) -133.7 x1(0_ATM0,1) demand_def(a_ATM0,d_DATE2) -268.5 demand_def(a_ATM0,d_DATE3) 59.5 x1(0_ATM0,1) demand_def(a_ATM0,d_DATE4) -304.1 demand_def(a_ATM0,d_DATE5) -72.1 x1(0_ATM0,1) demand_def(a_ATM0,d_DATE6) -357.3 demand_def(a_ATM0,d_DATE7) -39.9 x1(0_ATM0,1) demand_def(a_ATM0,d_DATE8) -164.4 demand_def(a_ATM0,d_DATE9) 116.1 x1(0_ATM0,1) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_1) -1. x1(0_ATM0,1) ztox3(a_ATM0,t_1) -1. x1(1_ATM0,2) demand_def(a_ATM0,d_DATE0) -564.4 demand_def(a_ATM0,d_DATE1) -267.4 x1(1_ATM0,2) demand_def(a_ATM0,d_DATE2) -537. demand_def(a_ATM0,d_DATE3) 119. x1(1_ATM0,2) demand_def(a_ATM0,d_DATE4) -608.2 demand_def(a_ATM0,d_DATE5) -144.2 x1(1_ATM0,2) demand_def(a_ATM0,d_DATE6) -714.6 demand_def(a_ATM0,d_DATE7) -79.8 x1(1_ATM0,2) demand_def(a_ATM0,d_DATE8) -328.8 demand_def(a_ATM0,d_DATE9) 232.2 x1(1_ATM0,2) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_2) -1. x1(1_ATM0,2) ztox3(a_ATM0,t_2) -1. x1(2_ATM0,3) demand_def(a_ATM0,d_DATE0) -846.6 demand_def(a_ATM0,d_DATE1) -401.1 x1(2_ATM0,3) demand_def(a_ATM0,d_DATE2) -805.5 demand_def(a_ATM0,d_DATE3) 178.5 x1(2_ATM0,3) demand_def(a_ATM0,d_DATE4) -912.3 demand_def(a_ATM0,d_DATE5) -216.3 x1(2_ATM0,3) demand_def(a_ATM0,d_DATE6) -1071.9 demand_def(a_ATM0,d_DATE7) -119.7 x1(2_ATM0,3) demand_def(a_ATM0,d_DATE8) -493.2 demand_def(a_ATM0,d_DATE9) 348.3 x1(2_ATM0,3) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_3) -1. x1(2_ATM0,3) ztox3(a_ATM0,t_3) -1. x1(3_ATM0,4) demand_def(a_ATM0,d_DATE0) -1128.8 demand_def(a_ATM0,d_DATE1) -534.8 x1(3_ATM0,4) demand_def(a_ATM0,d_DATE2) -1074. demand_def(a_ATM0,d_DATE3) 238. x1(3_ATM0,4) demand_def(a_ATM0,d_DATE4) -1216.4 demand_def(a_ATM0,d_DATE5) -288.4 x1(3_ATM0,4) demand_def(a_ATM0,d_DATE6) -1429.2 demand_def(a_ATM0,d_DATE7) -159.6 x1(3_ATM0,4) demand_def(a_ATM0,d_DATE8) -657.6 demand_def(a_ATM0,d_DATE9) 464.4 x1(3_ATM0,4) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_4) -1. x1(3_ATM0,4) ztox3(a_ATM0,t_4) -1. x1(4_ATM0,5) demand_def(a_ATM0,d_DATE0) -1411. demand_def(a_ATM0,d_DATE1) -668.5 x1(4_ATM0,5) demand_def(a_ATM0,d_DATE2) -1342.5 demand_def(a_ATM0,d_DATE3) 297.5 x1(4_ATM0,5) demand_def(a_ATM0,d_DATE4) -1520.5 demand_def(a_ATM0,d_DATE5) -360.5 x1(4_ATM0,5) demand_def(a_ATM0,d_DATE6) -1786.5 demand_def(a_ATM0,d_DATE7) -199.5 x1(4_ATM0,5) demand_def(a_ATM0,d_DATE8) -822. demand_def(a_ATM0,d_DATE9) 580.5 x1(4_ATM0,5) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_5) -1. x1(4_ATM0,5) ztox3(a_ATM0,t_5) -1. x1(5_ATM0,6) demand_def(a_ATM0,d_DATE0) -1693.2 demand_def(a_ATM0,d_DATE1) -802.2 x1(5_ATM0,6) demand_def(a_ATM0,d_DATE2) -1611. demand_def(a_ATM0,d_DATE3) 357. x1(5_ATM0,6) demand_def(a_ATM0,d_DATE4) -1824.6 demand_def(a_ATM0,d_DATE5) -432.6 x1(5_ATM0,6) demand_def(a_ATM0,d_DATE6) -2143.8 demand_def(a_ATM0,d_DATE7) -239.4 x1(5_ATM0,6) demand_def(a_ATM0,d_DATE8) -986.4 demand_def(a_ATM0,d_DATE9) 696.6 x1(5_ATM0,6) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_6) -1. x1(5_ATM0,6) ztox3(a_ATM0,t_6) -1. x1(6_ATM0,7) demand_def(a_ATM0,d_DATE0) -1975.4 demand_def(a_ATM0,d_DATE1) -935.9 x1(6_ATM0,7) demand_def(a_ATM0,d_DATE2) -1879.5 demand_def(a_ATM0,d_DATE3) 416.5 x1(6_ATM0,7) demand_def(a_ATM0,d_DATE4) -2128.7 demand_def(a_ATM0,d_DATE5) -504.7 x1(6_ATM0,7) demand_def(a_ATM0,d_DATE6) -2501.1 demand_def(a_ATM0,d_DATE7) -279.3 x1(6_ATM0,7) demand_def(a_ATM0,d_DATE8) -1150.8 demand_def(a_ATM0,d_DATE9) 812.7 x1(6_ATM0,7) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_7) -1. x1(6_ATM0,7) ztox3(a_ATM0,t_7) -1. x1(7_ATM0,8) demand_def(a_ATM0,d_DATE0) -2257.6 demand_def(a_ATM0,d_DATE1) -1069.6 x1(7_ATM0,8) demand_def(a_ATM0,d_DATE2) -2148. demand_def(a_ATM0,d_DATE3) 476. x1(7_ATM0,8) demand_def(a_ATM0,d_DATE4) -2432.8 demand_def(a_ATM0,d_DATE5) -576.8 x1(7_ATM0,8) demand_def(a_ATM0,d_DATE6) -2858.4 demand_def(a_ATM0,d_DATE7) -319.2 x1(7_ATM0,8) demand_def(a_ATM0,d_DATE8) -1315.2 demand_def(a_ATM0,d_DATE9) 928.8 x1(7_ATM0,8) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_8) -1. x1(7_ATM0,8) ztox3(a_ATM0,t_8) -1. x1(8_ATM0,9) demand_def(a_ATM0,d_DATE0) -2539.8 demand_def(a_ATM0,d_DATE1) -1203.3 x1(8_ATM0,9) demand_def(a_ATM0,d_DATE2) -2416.5 demand_def(a_ATM0,d_DATE3) 535.5 x1(8_ATM0,9) demand_def(a_ATM0,d_DATE4) -2736.9 demand_def(a_ATM0,d_DATE5) -648.9 x1(8_ATM0,9) demand_def(a_ATM0,d_DATE6) -3215.7 demand_def(a_ATM0,d_DATE7) -359.1 x1(8_ATM0,9) demand_def(a_ATM0,d_DATE8) -1479.6 demand_def(a_ATM0,d_DATE9) 1044.9 x1(8_ATM0,9) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_9) -1. x1(8_ATM0,9) ztox3(a_ATM0,t_9) -1. x1(9_ATM0,10) demand_def(a_ATM0,d_DATE0) -2822. demand_def(a_ATM0,d_DATE1) -1337. x1(9_ATM0,10) demand_def(a_ATM0,d_DATE2) -2685. demand_def(a_ATM0,d_DATE3) 595. x1(9_ATM0,10) demand_def(a_ATM0,d_DATE4) -3041. demand_def(a_ATM0,d_DATE5) -721. x1(9_ATM0,10) demand_def(a_ATM0,d_DATE6) -3573. demand_def(a_ATM0,d_DATE7) -399. x1(9_ATM0,10) demand_def(a_ATM0,d_DATE8) -1644. demand_def(a_ATM0,d_DATE9) 1161. x1(9_ATM0,10) pickone_x1(a_ATM0) 1. ztox1(a_ATM0,t_10) -1. x1(9_ATM0,10) ztox3(a_ATM0,t_10) -1. x1(10_ATM1,1) demand_def(a_ATM1,d_DATE0) 167.1 demand_def(a_ATM1,d_DATE1) -293.3 x1(10_ATM1,1) demand_def(a_ATM1,d_DATE2) 285. demand_def(a_ATM1,d_DATE3) 247. x1(10_ATM1,1) demand_def(a_ATM1,d_DATE4) 124.8 demand_def(a_ATM1,d_DATE5) -203.1 x1(10_ATM1,1) demand_def(a_ATM1,d_DATE6) -500.2 demand_def(a_ATM1,d_DATE7) -632.8 x1(10_ATM1,1) demand_def(a_ATM1,d_DATE8) -144.3 demand_def(a_ATM1,d_DATE9) 156.1 x1(10_ATM1,1) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_1) -1. x1(10_ATM1,1) ztox3(a_ATM1,t_1) -1. x1(11_ATM1,2) demand_def(a_ATM1,d_DATE0) 334.2 demand_def(a_ATM1,d_DATE1) -586.6 x1(11_ATM1,2) demand_def(a_ATM1,d_DATE2) 570. demand_def(a_ATM1,d_DATE3) 494. x1(11_ATM1,2) demand_def(a_ATM1,d_DATE4) 249.6 demand_def(a_ATM1,d_DATE5) -406.2 x1(11_ATM1,2) demand_def(a_ATM1,d_DATE6) -1000.4 demand_def(a_ATM1,d_DATE7) -1265.6 x1(11_ATM1,2) demand_def(a_ATM1,d_DATE8) -288.6 demand_def(a_ATM1,d_DATE9) 312.2 x1(11_ATM1,2) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_2) -1. x1(11_ATM1,2) ztox3(a_ATM1,t_2) -1. x1(12_ATM1,3) demand_def(a_ATM1,d_DATE0) 501.3 demand_def(a_ATM1,d_DATE1) -879.9 x1(12_ATM1,3) demand_def(a_ATM1,d_DATE2) 855. demand_def(a_ATM1,d_DATE3) 741. x1(12_ATM1,3) demand_def(a_ATM1,d_DATE4) 374.4 demand_def(a_ATM1,d_DATE5) -609.3 x1(12_ATM1,3) demand_def(a_ATM1,d_DATE6) -1500.6 demand_def(a_ATM1,d_DATE7) -1898.4 x1(12_ATM1,3) demand_def(a_ATM1,d_DATE8) -432.9 demand_def(a_ATM1,d_DATE9) 468.3 x1(12_ATM1,3) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_3) -1. x1(12_ATM1,3) ztox3(a_ATM1,t_3) -1. x1(13_ATM1,4) demand_def(a_ATM1,d_DATE0) 668.4 demand_def(a_ATM1,d_DATE1) -1173.2 x1(13_ATM1,4) demand_def(a_ATM1,d_DATE2) 1140. demand_def(a_ATM1,d_DATE3) 988. x1(13_ATM1,4) demand_def(a_ATM1,d_DATE4) 499.2 demand_def(a_ATM1,d_DATE5) -812.4 x1(13_ATM1,4) demand_def(a_ATM1,d_DATE6) -2000.8 demand_def(a_ATM1,d_DATE7) -2531.2 x1(13_ATM1,4) demand_def(a_ATM1,d_DATE8) -577.2 demand_def(a_ATM1,d_DATE9) 624.4 x1(13_ATM1,4) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_4) -1. x1(13_ATM1,4) ztox3(a_ATM1,t_4) -1. x1(14_ATM1,5) demand_def(a_ATM1,d_DATE0) 835.5 demand_def(a_ATM1,d_DATE1) -1466.5 x1(14_ATM1,5) demand_def(a_ATM1,d_DATE2) 1425. demand_def(a_ATM1,d_DATE3) 1235. x1(14_ATM1,5) demand_def(a_ATM1,d_DATE4) 624. demand_def(a_ATM1,d_DATE5) -1015.5 x1(14_ATM1,5) demand_def(a_ATM1,d_DATE6) -2501. demand_def(a_ATM1,d_DATE7) -3164. x1(14_ATM1,5) demand_def(a_ATM1,d_DATE8) -721.5 demand_def(a_ATM1,d_DATE9) 780.5 x1(14_ATM1,5) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_5) -1. x1(14_ATM1,5) ztox3(a_ATM1,t_5) -1. x1(15_ATM1,6) demand_def(a_ATM1,d_DATE0) 1002.6 demand_def(a_ATM1,d_DATE1) -1759.8 x1(15_ATM1,6) demand_def(a_ATM1,d_DATE2) 1710. demand_def(a_ATM1,d_DATE3) 1482. x1(15_ATM1,6) demand_def(a_ATM1,d_DATE4) 748.8 demand_def(a_ATM1,d_DATE5) -1218.6 x1(15_ATM1,6) demand_def(a_ATM1,d_DATE6) -3001.2 demand_def(a_ATM1,d_DATE7) -3796.8 x1(15_ATM1,6) demand_def(a_ATM1,d_DATE8) -865.8 demand_def(a_ATM1,d_DATE9) 936.6 x1(15_ATM1,6) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_6) -1. x1(15_ATM1,6) ztox3(a_ATM1,t_6) -1. x1(16_ATM1,7) demand_def(a_ATM1,d_DATE0) 1169.7 demand_def(a_ATM1,d_DATE1) -2053.1 x1(16_ATM1,7) demand_def(a_ATM1,d_DATE2) 1995. demand_def(a_ATM1,d_DATE3) 1729. x1(16_ATM1,7) demand_def(a_ATM1,d_DATE4) 873.6 demand_def(a_ATM1,d_DATE5) -1421.7 x1(16_ATM1,7) demand_def(a_ATM1,d_DATE6) -3501.4 demand_def(a_ATM1,d_DATE7) -4429.6 x1(16_ATM1,7) demand_def(a_ATM1,d_DATE8) -1010.1 demand_def(a_ATM1,d_DATE9) 1092.7 x1(16_ATM1,7) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_7) -1. x1(16_ATM1,7) ztox3(a_ATM1,t_7) -1. x1(17_ATM1,8) demand_def(a_ATM1,d_DATE0) 1336.8 demand_def(a_ATM1,d_DATE1) -2346.4 x1(17_ATM1,8) demand_def(a_ATM1,d_DATE2) 2280. demand_def(a_ATM1,d_DATE3) 1976. x1(17_ATM1,8) demand_def(a_ATM1,d_DATE4) 998.4 demand_def(a_ATM1,d_DATE5) -1624.8 x1(17_ATM1,8) demand_def(a_ATM1,d_DATE6) -4001.6 demand_def(a_ATM1,d_DATE7) -5062.4 x1(17_ATM1,8) demand_def(a_ATM1,d_DATE8) -1154.4 demand_def(a_ATM1,d_DATE9) 1248.8 x1(17_ATM1,8) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_8) -1. x1(17_ATM1,8) ztox3(a_ATM1,t_8) -1. x1(18_ATM1,9) demand_def(a_ATM1,d_DATE0) 1503.9 demand_def(a_ATM1,d_DATE1) -2639.7 x1(18_ATM1,9) demand_def(a_ATM1,d_DATE2) 2565. demand_def(a_ATM1,d_DATE3) 2223. x1(18_ATM1,9) demand_def(a_ATM1,d_DATE4) 1123.2 demand_def(a_ATM1,d_DATE5) -1827.9 x1(18_ATM1,9) demand_def(a_ATM1,d_DATE6) -4501.8 demand_def(a_ATM1,d_DATE7) -5695.2 x1(18_ATM1,9) demand_def(a_ATM1,d_DATE8) -1298.7 demand_def(a_ATM1,d_DATE9) 1404.9 x1(18_ATM1,9) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_9) -1. x1(18_ATM1,9) ztox3(a_ATM1,t_9) -1. x1(19_ATM1,10) demand_def(a_ATM1,d_DATE0) 1671. demand_def(a_ATM1,d_DATE1) -2933. x1(19_ATM1,10) demand_def(a_ATM1,d_DATE2) 2850. demand_def(a_ATM1,d_DATE3) 2470. x1(19_ATM1,10) demand_def(a_ATM1,d_DATE4) 1248. demand_def(a_ATM1,d_DATE5) -2031. x1(19_ATM1,10) demand_def(a_ATM1,d_DATE6) -5002. demand_def(a_ATM1,d_DATE7) -6328. x1(19_ATM1,10) demand_def(a_ATM1,d_DATE8) -1443. demand_def(a_ATM1,d_DATE9) 1561. x1(19_ATM1,10) pickone_x1(a_ATM1) 1. ztox1(a_ATM1,t_10) -1. x1(19_ATM1,10) ztox3(a_ATM1,t_10) -1. x1(20_ATM2,1) demand_def(a_ATM2,d_DATE0) -58.9 demand_def(a_ATM2,d_DATE1) 106.8 x1(20_ATM2,1) demand_def(a_ATM2,d_DATE2) 18.5 demand_def(a_ATM2,d_DATE3) -41.3 x1(20_ATM2,1) demand_def(a_ATM2,d_DATE4) -117.4 demand_def(a_ATM2,d_DATE5) -156.4 x1(20_ATM2,1) demand_def(a_ATM2,d_DATE6) -22.5 demand_def(a_ATM2,d_DATE7) 134. x1(20_ATM2,1) demand_def(a_ATM2,d_DATE8) -209.7 demand_def(a_ATM2,d_DATE9) -99.6 x1(20_ATM2,1) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_1) -1. x1(20_ATM2,1) ztox3(a_ATM2,t_1) -1. x1(21_ATM2,2) demand_def(a_ATM2,d_DATE0) -117.8 demand_def(a_ATM2,d_DATE1) 213.6 x1(21_ATM2,2) demand_def(a_ATM2,d_DATE2) 37. demand_def(a_ATM2,d_DATE3) -82.6 x1(21_ATM2,2) demand_def(a_ATM2,d_DATE4) -234.8 demand_def(a_ATM2,d_DATE5) -312.8 x1(21_ATM2,2) demand_def(a_ATM2,d_DATE6) -45. demand_def(a_ATM2,d_DATE7) 268. x1(21_ATM2,2) demand_def(a_ATM2,d_DATE8) -419.4 demand_def(a_ATM2,d_DATE9) -199.2 x1(21_ATM2,2) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_2) -1. x1(21_ATM2,2) ztox3(a_ATM2,t_2) -1. x1(22_ATM2,3) demand_def(a_ATM2,d_DATE0) -176.7 demand_def(a_ATM2,d_DATE1) 320.4 x1(22_ATM2,3) demand_def(a_ATM2,d_DATE2) 55.5 demand_def(a_ATM2,d_DATE3) -123.9 x1(22_ATM2,3) demand_def(a_ATM2,d_DATE4) -352.2 demand_def(a_ATM2,d_DATE5) -469.2 x1(22_ATM2,3) demand_def(a_ATM2,d_DATE6) -67.5 demand_def(a_ATM2,d_DATE7) 402. x1(22_ATM2,3) demand_def(a_ATM2,d_DATE8) -629.1 demand_def(a_ATM2,d_DATE9) -298.8 x1(22_ATM2,3) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_3) -1. x1(22_ATM2,3) ztox3(a_ATM2,t_3) -1. x1(23_ATM2,4) demand_def(a_ATM2,d_DATE0) -235.6 demand_def(a_ATM2,d_DATE1) 427.2 x1(23_ATM2,4) demand_def(a_ATM2,d_DATE2) 74. demand_def(a_ATM2,d_DATE3) -165.2 x1(23_ATM2,4) demand_def(a_ATM2,d_DATE4) -469.6 demand_def(a_ATM2,d_DATE5) -625.6 x1(23_ATM2,4) demand_def(a_ATM2,d_DATE6) -90. demand_def(a_ATM2,d_DATE7) 536. x1(23_ATM2,4) demand_def(a_ATM2,d_DATE8) -838.8 demand_def(a_ATM2,d_DATE9) -398.4 x1(23_ATM2,4) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_4) -1. x1(23_ATM2,4) ztox3(a_ATM2,t_4) -1. x1(24_ATM2,5) demand_def(a_ATM2,d_DATE0) -294.5 demand_def(a_ATM2,d_DATE1) 534. x1(24_ATM2,5) demand_def(a_ATM2,d_DATE2) 92.5 demand_def(a_ATM2,d_DATE3) -206.5 x1(24_ATM2,5) demand_def(a_ATM2,d_DATE4) -587. demand_def(a_ATM2,d_DATE5) -782. x1(24_ATM2,5) demand_def(a_ATM2,d_DATE6) -112.5 demand_def(a_ATM2,d_DATE7) 670. x1(24_ATM2,5) demand_def(a_ATM2,d_DATE8) -1048.5 demand_def(a_ATM2,d_DATE9) -498. x1(24_ATM2,5) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_5) -1. x1(24_ATM2,5) ztox3(a_ATM2,t_5) -1. x1(25_ATM2,6) demand_def(a_ATM2,d_DATE0) -353.4 demand_def(a_ATM2,d_DATE1) 640.8 x1(25_ATM2,6) demand_def(a_ATM2,d_DATE2) 111. demand_def(a_ATM2,d_DATE3) -247.8 x1(25_ATM2,6) demand_def(a_ATM2,d_DATE4) -704.4 demand_def(a_ATM2,d_DATE5) -938.4 x1(25_ATM2,6) demand_def(a_ATM2,d_DATE6) -135. demand_def(a_ATM2,d_DATE7) 804. x1(25_ATM2,6) demand_def(a_ATM2,d_DATE8) -1258.2 demand_def(a_ATM2,d_DATE9) -597.6 x1(25_ATM2,6) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_6) -1. x1(25_ATM2,6) ztox3(a_ATM2,t_6) -1. x1(26_ATM2,7) demand_def(a_ATM2,d_DATE0) -412.3 demand_def(a_ATM2,d_DATE1) 747.6 x1(26_ATM2,7) demand_def(a_ATM2,d_DATE2) 129.5 demand_def(a_ATM2,d_DATE3) -289.1 x1(26_ATM2,7) demand_def(a_ATM2,d_DATE4) -821.8 demand_def(a_ATM2,d_DATE5) -1094.8 x1(26_ATM2,7) demand_def(a_ATM2,d_DATE6) -157.5 demand_def(a_ATM2,d_DATE7) 938. x1(26_ATM2,7) demand_def(a_ATM2,d_DATE8) -1467.9 demand_def(a_ATM2,d_DATE9) -697.2 x1(26_ATM2,7) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_7) -1. x1(26_ATM2,7) ztox3(a_ATM2,t_7) -1. x1(27_ATM2,8) demand_def(a_ATM2,d_DATE0) -471.2 demand_def(a_ATM2,d_DATE1) 854.4 x1(27_ATM2,8) demand_def(a_ATM2,d_DATE2) 148. demand_def(a_ATM2,d_DATE3) -330.4 x1(27_ATM2,8) demand_def(a_ATM2,d_DATE4) -939.2 demand_def(a_ATM2,d_DATE5) -1251.2 x1(27_ATM2,8) demand_def(a_ATM2,d_DATE6) -180. demand_def(a_ATM2,d_DATE7) 1072. x1(27_ATM2,8) demand_def(a_ATM2,d_DATE8) -1677.6 demand_def(a_ATM2,d_DATE9) -796.8 x1(27_ATM2,8) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_8) -1. x1(27_ATM2,8) ztox3(a_ATM2,t_8) -1. x1(28_ATM2,9) demand_def(a_ATM2,d_DATE0) -530.1 demand_def(a_ATM2,d_DATE1) 961.2 x1(28_ATM2,9) demand_def(a_ATM2,d_DATE2) 166.5 demand_def(a_ATM2,d_DATE3) -371.7 x1(28_ATM2,9) demand_def(a_ATM2,d_DATE4) -1056.6 demand_def(a_ATM2,d_DATE5) -1407.6 x1(28_ATM2,9) demand_def(a_ATM2,d_DATE6) -202.5 demand_def(a_ATM2,d_DATE7) 1206. x1(28_ATM2,9) demand_def(a_ATM2,d_DATE8) -1887.3 demand_def(a_ATM2,d_DATE9) -896.4 x1(28_ATM2,9) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_9) -1. x1(28_ATM2,9) ztox3(a_ATM2,t_9) -1. x1(29_ATM2,10) demand_def(a_ATM2,d_DATE0) -589. demand_def(a_ATM2,d_DATE1) 1068. x1(29_ATM2,10) demand_def(a_ATM2,d_DATE2) 185. demand_def(a_ATM2,d_DATE3) -413. x1(29_ATM2,10) demand_def(a_ATM2,d_DATE4) -1174. demand_def(a_ATM2,d_DATE5) -1564. x1(29_ATM2,10) demand_def(a_ATM2,d_DATE6) -225. demand_def(a_ATM2,d_DATE7) 1340. x1(29_ATM2,10) demand_def(a_ATM2,d_DATE8) -2097. demand_def(a_ATM2,d_DATE9) -996. x1(29_ATM2,10) pickone_x1(a_ATM2) 1. ztox1(a_ATM2,t_10) -1. x1(29_ATM2,10) ztox3(a_ATM2,t_10) -1. x1(30_ATM3,1) demand_def(a_ATM3,d_DATE0) 48.2 demand_def(a_ATM3,d_DATE1) -403.6 x1(30_ATM3,1) demand_def(a_ATM3,d_DATE2) 116.8 demand_def(a_ATM3,d_DATE3) 95.5 x1(30_ATM3,1) demand_def(a_ATM3,d_DATE4) 112.3 demand_def(a_ATM3,d_DATE5) -62.1 x1(30_ATM3,1) demand_def(a_ATM3,d_DATE6) 95.9 demand_def(a_ATM3,d_DATE7) -503.2 x1(30_ATM3,1) demand_def(a_ATM3,d_DATE8) 35. demand_def(a_ATM3,d_DATE9) 357.9 x1(30_ATM3,1) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_1) -1. x1(30_ATM3,1) ztox3(a_ATM3,t_1) -1. x1(31_ATM3,2) demand_def(a_ATM3,d_DATE0) 96.4 demand_def(a_ATM3,d_DATE1) -807.2 x1(31_ATM3,2) demand_def(a_ATM3,d_DATE2) 233.6 demand_def(a_ATM3,d_DATE3) 191. x1(31_ATM3,2) demand_def(a_ATM3,d_DATE4) 224.6 demand_def(a_ATM3,d_DATE5) -124.2 x1(31_ATM3,2) demand_def(a_ATM3,d_DATE6) 191.8 demand_def(a_ATM3,d_DATE7) -1006.4 x1(31_ATM3,2) demand_def(a_ATM3,d_DATE8) 70. demand_def(a_ATM3,d_DATE9) 715.8 x1(31_ATM3,2) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_2) -1. x1(31_ATM3,2) ztox3(a_ATM3,t_2) -1. x1(32_ATM3,3) demand_def(a_ATM3,d_DATE0) 144.6 demand_def(a_ATM3,d_DATE1) -1210.8 x1(32_ATM3,3) demand_def(a_ATM3,d_DATE2) 350.4 demand_def(a_ATM3,d_DATE3) 286.5 x1(32_ATM3,3) demand_def(a_ATM3,d_DATE4) 336.9 demand_def(a_ATM3,d_DATE5) -186.3 x1(32_ATM3,3) demand_def(a_ATM3,d_DATE6) 287.7 demand_def(a_ATM3,d_DATE7) -1509.6 x1(32_ATM3,3) demand_def(a_ATM3,d_DATE8) 105. demand_def(a_ATM3,d_DATE9) 1073.7 x1(32_ATM3,3) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_3) -1. x1(32_ATM3,3) ztox3(a_ATM3,t_3) -1. x1(33_ATM3,4) demand_def(a_ATM3,d_DATE0) 192.8 demand_def(a_ATM3,d_DATE1) -1614.4 x1(33_ATM3,4) demand_def(a_ATM3,d_DATE2) 467.2 demand_def(a_ATM3,d_DATE3) 382. x1(33_ATM3,4) demand_def(a_ATM3,d_DATE4) 449.2 demand_def(a_ATM3,d_DATE5) -248.4 x1(33_ATM3,4) demand_def(a_ATM3,d_DATE6) 383.6 demand_def(a_ATM3,d_DATE7) -2012.8 x1(33_ATM3,4) demand_def(a_ATM3,d_DATE8) 140. demand_def(a_ATM3,d_DATE9) 1431.6 x1(33_ATM3,4) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_4) -1. x1(33_ATM3,4) ztox3(a_ATM3,t_4) -1. x1(34_ATM3,5) demand_def(a_ATM3,d_DATE0) 241. demand_def(a_ATM3,d_DATE1) -2018. x1(34_ATM3,5) demand_def(a_ATM3,d_DATE2) 584. demand_def(a_ATM3,d_DATE3) 477.5 x1(34_ATM3,5) demand_def(a_ATM3,d_DATE4) 561.5 demand_def(a_ATM3,d_DATE5) -310.5 x1(34_ATM3,5) demand_def(a_ATM3,d_DATE6) 479.5 demand_def(a_ATM3,d_DATE7) -2516. x1(34_ATM3,5) demand_def(a_ATM3,d_DATE8) 175. demand_def(a_ATM3,d_DATE9) 1789.5 x1(34_ATM3,5) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_5) -1. x1(34_ATM3,5) ztox3(a_ATM3,t_5) -1. x1(35_ATM3,6) demand_def(a_ATM3,d_DATE0) 289.2 demand_def(a_ATM3,d_DATE1) -2421.6 x1(35_ATM3,6) demand_def(a_ATM3,d_DATE2) 700.8 demand_def(a_ATM3,d_DATE3) 573. x1(35_ATM3,6) demand_def(a_ATM3,d_DATE4) 673.8 demand_def(a_ATM3,d_DATE5) -372.6 x1(35_ATM3,6) demand_def(a_ATM3,d_DATE6) 575.4 demand_def(a_ATM3,d_DATE7) -3019.2 x1(35_ATM3,6) demand_def(a_ATM3,d_DATE8) 210. demand_def(a_ATM3,d_DATE9) 2147.4 x1(35_ATM3,6) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_6) -1. x1(35_ATM3,6) ztox3(a_ATM3,t_6) -1. x1(36_ATM3,7) demand_def(a_ATM3,d_DATE0) 337.4 demand_def(a_ATM3,d_DATE1) -2825.2 x1(36_ATM3,7) demand_def(a_ATM3,d_DATE2) 817.6 demand_def(a_ATM3,d_DATE3) 668.5 x1(36_ATM3,7) demand_def(a_ATM3,d_DATE4) 786.1 demand_def(a_ATM3,d_DATE5) -434.7 x1(36_ATM3,7) demand_def(a_ATM3,d_DATE6) 671.3 demand_def(a_ATM3,d_DATE7) -3522.4 x1(36_ATM3,7) demand_def(a_ATM3,d_DATE8) 245. demand_def(a_ATM3,d_DATE9) 2505.3 x1(36_ATM3,7) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_7) -1. x1(36_ATM3,7) ztox3(a_ATM3,t_7) -1. x1(37_ATM3,8) demand_def(a_ATM3,d_DATE0) 385.6 demand_def(a_ATM3,d_DATE1) -3228.8 x1(37_ATM3,8) demand_def(a_ATM3,d_DATE2) 934.4 demand_def(a_ATM3,d_DATE3) 764. x1(37_ATM3,8) demand_def(a_ATM3,d_DATE4) 898.4 demand_def(a_ATM3,d_DATE5) -496.8 x1(37_ATM3,8) demand_def(a_ATM3,d_DATE6) 767.2 demand_def(a_ATM3,d_DATE7) -4025.6 x1(37_ATM3,8) demand_def(a_ATM3,d_DATE8) 280. demand_def(a_ATM3,d_DATE9) 2863.2 x1(37_ATM3,8) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_8) -1. x1(37_ATM3,8) ztox3(a_ATM3,t_8) -1. x1(38_ATM3,9) demand_def(a_ATM3,d_DATE0) 433.8 demand_def(a_ATM3,d_DATE1) -3632.4 x1(38_ATM3,9) demand_def(a_ATM3,d_DATE2) 1051.2 demand_def(a_ATM3,d_DATE3) 859.5 x1(38_ATM3,9) demand_def(a_ATM3,d_DATE4) 1010.7 demand_def(a_ATM3,d_DATE5) -558.9 x1(38_ATM3,9) demand_def(a_ATM3,d_DATE6) 863.1 demand_def(a_ATM3,d_DATE7) -4528.8 x1(38_ATM3,9) demand_def(a_ATM3,d_DATE8) 315. demand_def(a_ATM3,d_DATE9) 3221.1 x1(38_ATM3,9) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_9) -1. x1(38_ATM3,9) ztox3(a_ATM3,t_9) -1. x1(39_ATM3,10) demand_def(a_ATM3,d_DATE0) 482. demand_def(a_ATM3,d_DATE1) -4036. x1(39_ATM3,10) demand_def(a_ATM3,d_DATE2) 1168. demand_def(a_ATM3,d_DATE3) 955. x1(39_ATM3,10) demand_def(a_ATM3,d_DATE4) 1123. demand_def(a_ATM3,d_DATE5) -621. x1(39_ATM3,10) demand_def(a_ATM3,d_DATE6) 959. demand_def(a_ATM3,d_DATE7) -5032. x1(39_ATM3,10) demand_def(a_ATM3,d_DATE8) 350. demand_def(a_ATM3,d_DATE9) 3579. x1(39_ATM3,10) pickone_x1(a_ATM3) 1. ztox1(a_ATM3,t_10) -1. x1(39_ATM3,10) ztox3(a_ATM3,t_10) -1. x1(40_ATM4,1) demand_def(a_ATM4,d_DATE0) -233.4 demand_def(a_ATM4,d_DATE1) -149.2 x1(40_ATM4,1) demand_def(a_ATM4,d_DATE2) 335.2 demand_def(a_ATM4,d_DATE3) -94.2 x1(40_ATM4,1) demand_def(a_ATM4,d_DATE4) 135.3 demand_def(a_ATM4,d_DATE5) 16.7 x1(40_ATM4,1) demand_def(a_ATM4,d_DATE6) -90. demand_def(a_ATM4,d_DATE7) -237.8 x1(40_ATM4,1) demand_def(a_ATM4,d_DATE8) -316.7 demand_def(a_ATM4,d_DATE9) 232.4 x1(40_ATM4,1) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_1) -1. x1(40_ATM4,1) ztox3(a_ATM4,t_1) -1. x1(41_ATM4,2) demand_def(a_ATM4,d_DATE0) -466.8 demand_def(a_ATM4,d_DATE1) -298.4 x1(41_ATM4,2) demand_def(a_ATM4,d_DATE2) 670.4 demand_def(a_ATM4,d_DATE3) -188.4 x1(41_ATM4,2) demand_def(a_ATM4,d_DATE4) 270.6 demand_def(a_ATM4,d_DATE5) 33.4 x1(41_ATM4,2) demand_def(a_ATM4,d_DATE6) -180. demand_def(a_ATM4,d_DATE7) -475.6 x1(41_ATM4,2) demand_def(a_ATM4,d_DATE8) -633.4 demand_def(a_ATM4,d_DATE9) 464.8 x1(41_ATM4,2) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_2) -1. x1(41_ATM4,2) ztox3(a_ATM4,t_2) -1. x1(42_ATM4,3) demand_def(a_ATM4,d_DATE0) -700.2 demand_def(a_ATM4,d_DATE1) -447.6 x1(42_ATM4,3) demand_def(a_ATM4,d_DATE2) 1005.6 demand_def(a_ATM4,d_DATE3) -282.6 x1(42_ATM4,3) demand_def(a_ATM4,d_DATE4) 405.9 demand_def(a_ATM4,d_DATE5) 50.1 x1(42_ATM4,3) demand_def(a_ATM4,d_DATE6) -270. demand_def(a_ATM4,d_DATE7) -713.4 x1(42_ATM4,3) demand_def(a_ATM4,d_DATE8) -950.1 demand_def(a_ATM4,d_DATE9) 697.2 x1(42_ATM4,3) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_3) -1. x1(42_ATM4,3) ztox3(a_ATM4,t_3) -1. x1(43_ATM4,4) demand_def(a_ATM4,d_DATE0) -933.6 demand_def(a_ATM4,d_DATE1) -596.8 x1(43_ATM4,4) demand_def(a_ATM4,d_DATE2) 1340.8 demand_def(a_ATM4,d_DATE3) -376.8 x1(43_ATM4,4) demand_def(a_ATM4,d_DATE4) 541.2 demand_def(a_ATM4,d_DATE5) 66.8 x1(43_ATM4,4) demand_def(a_ATM4,d_DATE6) -360. demand_def(a_ATM4,d_DATE7) -951.2 x1(43_ATM4,4) demand_def(a_ATM4,d_DATE8) -1266.8 demand_def(a_ATM4,d_DATE9) 929.6 x1(43_ATM4,4) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_4) -1. x1(43_ATM4,4) ztox3(a_ATM4,t_4) -1. x1(44_ATM4,5) demand_def(a_ATM4,d_DATE0) -1167. demand_def(a_ATM4,d_DATE1) -746. x1(44_ATM4,5) demand_def(a_ATM4,d_DATE2) 1676. demand_def(a_ATM4,d_DATE3) -471. x1(44_ATM4,5) demand_def(a_ATM4,d_DATE4) 676.5 demand_def(a_ATM4,d_DATE5) 83.5 x1(44_ATM4,5) demand_def(a_ATM4,d_DATE6) -450. demand_def(a_ATM4,d_DATE7) -1189. x1(44_ATM4,5) demand_def(a_ATM4,d_DATE8) -1583.5 demand_def(a_ATM4,d_DATE9) 1162. x1(44_ATM4,5) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_5) -1. x1(44_ATM4,5) ztox3(a_ATM4,t_5) -1. x1(45_ATM4,6) demand_def(a_ATM4,d_DATE0) -1400.4 demand_def(a_ATM4,d_DATE1) -895.2 x1(45_ATM4,6) demand_def(a_ATM4,d_DATE2) 2011.2 demand_def(a_ATM4,d_DATE3) -565.2 x1(45_ATM4,6) demand_def(a_ATM4,d_DATE4) 811.8 demand_def(a_ATM4,d_DATE5) 100.2 x1(45_ATM4,6) demand_def(a_ATM4,d_DATE6) -540. demand_def(a_ATM4,d_DATE7) -1426.8 x1(45_ATM4,6) demand_def(a_ATM4,d_DATE8) -1900.2 demand_def(a_ATM4,d_DATE9) 1394.4 x1(45_ATM4,6) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_6) -1. x1(45_ATM4,6) ztox3(a_ATM4,t_6) -1. x1(46_ATM4,7) demand_def(a_ATM4,d_DATE0) -1633.8 demand_def(a_ATM4,d_DATE1) -1044.4 x1(46_ATM4,7) demand_def(a_ATM4,d_DATE2) 2346.4 demand_def(a_ATM4,d_DATE3) -659.4 x1(46_ATM4,7) demand_def(a_ATM4,d_DATE4) 947.1 demand_def(a_ATM4,d_DATE5) 116.9 x1(46_ATM4,7) demand_def(a_ATM4,d_DATE6) -630. demand_def(a_ATM4,d_DATE7) -1664.6 x1(46_ATM4,7) demand_def(a_ATM4,d_DATE8) -2216.9 demand_def(a_ATM4,d_DATE9) 1626.8 x1(46_ATM4,7) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_7) -1. x1(46_ATM4,7) ztox3(a_ATM4,t_7) -1. x1(47_ATM4,8) demand_def(a_ATM4,d_DATE0) -1867.2 demand_def(a_ATM4,d_DATE1) -1193.6 x1(47_ATM4,8) demand_def(a_ATM4,d_DATE2) 2681.6 demand_def(a_ATM4,d_DATE3) -753.6 x1(47_ATM4,8) demand_def(a_ATM4,d_DATE4) 1082.4 demand_def(a_ATM4,d_DATE5) 133.6 x1(47_ATM4,8) demand_def(a_ATM4,d_DATE6) -720. demand_def(a_ATM4,d_DATE7) -1902.4 x1(47_ATM4,8) demand_def(a_ATM4,d_DATE8) -2533.6 demand_def(a_ATM4,d_DATE9) 1859.2 x1(47_ATM4,8) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_8) -1. x1(47_ATM4,8) ztox3(a_ATM4,t_8) -1. x1(48_ATM4,9) demand_def(a_ATM4,d_DATE0) -2100.6 demand_def(a_ATM4,d_DATE1) -1342.8 x1(48_ATM4,9) demand_def(a_ATM4,d_DATE2) 3016.8 demand_def(a_ATM4,d_DATE3) -847.8 x1(48_ATM4,9) demand_def(a_ATM4,d_DATE4) 1217.7 demand_def(a_ATM4,d_DATE5) 150.3 x1(48_ATM4,9) demand_def(a_ATM4,d_DATE6) -810. demand_def(a_ATM4,d_DATE7) -2140.2 x1(48_ATM4,9) demand_def(a_ATM4,d_DATE8) -2850.3 demand_def(a_ATM4,d_DATE9) 2091.6 x1(48_ATM4,9) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_9) -1. x1(48_ATM4,9) ztox3(a_ATM4,t_9) -1. x1(49_ATM4,10) demand_def(a_ATM4,d_DATE0) -2334. demand_def(a_ATM4,d_DATE1) -1492. x1(49_ATM4,10) demand_def(a_ATM4,d_DATE2) 3352. demand_def(a_ATM4,d_DATE3) -942. x1(49_ATM4,10) demand_def(a_ATM4,d_DATE4) 1353. demand_def(a_ATM4,d_DATE5) 167. x1(49_ATM4,10) demand_def(a_ATM4,d_DATE6) -900. demand_def(a_ATM4,d_DATE7) -2378. x1(49_ATM4,10) demand_def(a_ATM4,d_DATE8) -3167. demand_def(a_ATM4,d_DATE9) 2324. x1(49_ATM4,10) pickone_x1(a_ATM4) 1. ztox1(a_ATM4,t_10) -1. x1(49_ATM4,10) ztox3(a_ATM4,t_10) -1. z(50_ATM0,1) demand_def(a_ATM0,d_DATE0) 198.4 demand_def(a_ATM0,d_DATE1) 253. z(50_ATM0,1) demand_def(a_ATM0,d_DATE2) -6.7 demand_def(a_ATM0,d_DATE3) -313.5 z(50_ATM0,1) demand_def(a_ATM0,d_DATE4) -95.1 demand_def(a_ATM0,d_DATE5) 47.9 z(50_ATM0,1) demand_def(a_ATM0,d_DATE6) 318.6 demand_def(a_ATM0,d_DATE7) 34.1 z(50_ATM0,1) demand_def(a_ATM0,d_DATE8) -64.3 demand_def(a_ATM0,d_DATE9) -93.1 z(50_ATM0,1) ztox1(a_ATM0,t_1) 1. ztox2(a_ATM0,t_1) 1. z(50_ATM0,1) ztox3(a_ATM0,t_1) 1. z(51_ATM0,2) demand_def(a_ATM0,d_DATE0) 396.8 demand_def(a_ATM0,d_DATE1) 506. z(51_ATM0,2) demand_def(a_ATM0,d_DATE2) -13.4 demand_def(a_ATM0,d_DATE3) -627. z(51_ATM0,2) demand_def(a_ATM0,d_DATE4) -190.2 demand_def(a_ATM0,d_DATE5) 95.8 z(51_ATM0,2) demand_def(a_ATM0,d_DATE6) 637.2 demand_def(a_ATM0,d_DATE7) 68.2 z(51_ATM0,2) demand_def(a_ATM0,d_DATE8) -128.6 demand_def(a_ATM0,d_DATE9) -186.2 z(51_ATM0,2) ztox1(a_ATM0,t_2) 1. ztox2(a_ATM0,t_2) 1. z(51_ATM0,2) ztox3(a_ATM0,t_2) 1. z(52_ATM0,3) demand_def(a_ATM0,d_DATE0) 595.2 demand_def(a_ATM0,d_DATE1) 759. z(52_ATM0,3) demand_def(a_ATM0,d_DATE2) -20.1 demand_def(a_ATM0,d_DATE3) -940.5 z(52_ATM0,3) demand_def(a_ATM0,d_DATE4) -285.3 demand_def(a_ATM0,d_DATE5) 143.7 z(52_ATM0,3) demand_def(a_ATM0,d_DATE6) 955.8 demand_def(a_ATM0,d_DATE7) 102.3 z(52_ATM0,3) demand_def(a_ATM0,d_DATE8) -192.9 demand_def(a_ATM0,d_DATE9) -279.3 z(52_ATM0,3) ztox1(a_ATM0,t_3) 1. ztox2(a_ATM0,t_3) 1. z(52_ATM0,3) ztox3(a_ATM0,t_3) 1. z(53_ATM0,4) demand_def(a_ATM0,d_DATE0) 793.6 demand_def(a_ATM0,d_DATE1) 1012. z(53_ATM0,4) demand_def(a_ATM0,d_DATE2) -26.8 demand_def(a_ATM0,d_DATE3) -1254. z(53_ATM0,4) demand_def(a_ATM0,d_DATE4) -380.4 demand_def(a_ATM0,d_DATE5) 191.6 z(53_ATM0,4) demand_def(a_ATM0,d_DATE6) 1274.4 demand_def(a_ATM0,d_DATE7) 136.4 z(53_ATM0,4) demand_def(a_ATM0,d_DATE8) -257.2 demand_def(a_ATM0,d_DATE9) -372.4 z(53_ATM0,4) ztox1(a_ATM0,t_4) 1. ztox2(a_ATM0,t_4) 1. z(53_ATM0,4) ztox3(a_ATM0,t_4) 1. z(54_ATM0,5) demand_def(a_ATM0,d_DATE0) 992. demand_def(a_ATM0,d_DATE1) 1265. z(54_ATM0,5) demand_def(a_ATM0,d_DATE2) -33.5 demand_def(a_ATM0,d_DATE3) -1567.5 z(54_ATM0,5) demand_def(a_ATM0,d_DATE4) -475.5 demand_def(a_ATM0,d_DATE5) 239.5 z(54_ATM0,5) demand_def(a_ATM0,d_DATE6) 1593. demand_def(a_ATM0,d_DATE7) 170.5 z(54_ATM0,5) demand_def(a_ATM0,d_DATE8) -321.5 demand_def(a_ATM0,d_DATE9) -465.5 z(54_ATM0,5) ztox1(a_ATM0,t_5) 1. ztox2(a_ATM0,t_5) 1. z(54_ATM0,5) ztox3(a_ATM0,t_5) 1. z(55_ATM0,6) demand_def(a_ATM0,d_DATE0) 1190.4 demand_def(a_ATM0,d_DATE1) 1518. z(55_ATM0,6) demand_def(a_ATM0,d_DATE2) -40.2 demand_def(a_ATM0,d_DATE3) -1881. z(55_ATM0,6) demand_def(a_ATM0,d_DATE4) -570.6 demand_def(a_ATM0,d_DATE5) 287.4 z(55_ATM0,6) demand_def(a_ATM0,d_DATE6) 1911.6 demand_def(a_ATM0,d_DATE7) 204.6 z(55_ATM0,6) demand_def(a_ATM0,d_DATE8) -385.8 demand_def(a_ATM0,d_DATE9) -558.6 z(55_ATM0,6) ztox1(a_ATM0,t_6) 1. ztox2(a_ATM0,t_6) 1. z(55_ATM0,6) ztox3(a_ATM0,t_6) 1. z(56_ATM0,7) demand_def(a_ATM0,d_DATE0) 1388.8 demand_def(a_ATM0,d_DATE1) 1771. z(56_ATM0,7) demand_def(a_ATM0,d_DATE2) -46.9 demand_def(a_ATM0,d_DATE3) -2194.5 z(56_ATM0,7) demand_def(a_ATM0,d_DATE4) -665.7 demand_def(a_ATM0,d_DATE5) 335.3 z(56_ATM0,7) demand_def(a_ATM0,d_DATE6) 2230.2 demand_def(a_ATM0,d_DATE7) 238.7 z(56_ATM0,7) demand_def(a_ATM0,d_DATE8) -450.1 demand_def(a_ATM0,d_DATE9) -651.7 z(56_ATM0,7) ztox1(a_ATM0,t_7) 1. ztox2(a_ATM0,t_7) 1. z(56_ATM0,7) ztox3(a_ATM0,t_7) 1. z(57_ATM0,8) demand_def(a_ATM0,d_DATE0) 1587.2 demand_def(a_ATM0,d_DATE1) 2024. z(57_ATM0,8) demand_def(a_ATM0,d_DATE2) -53.6 demand_def(a_ATM0,d_DATE3) -2508. z(57_ATM0,8) demand_def(a_ATM0,d_DATE4) -760.8 demand_def(a_ATM0,d_DATE5) 383.2 z(57_ATM0,8) demand_def(a_ATM0,d_DATE6) 2548.8 demand_def(a_ATM0,d_DATE7) 272.8 z(57_ATM0,8) demand_def(a_ATM0,d_DATE8) -514.4 demand_def(a_ATM0,d_DATE9) -744.8 z(57_ATM0,8) ztox1(a_ATM0,t_8) 1. ztox2(a_ATM0,t_8) 1. z(57_ATM0,8) ztox3(a_ATM0,t_8) 1. z(58_ATM0,9) demand_def(a_ATM0,d_DATE0) 1785.6 demand_def(a_ATM0,d_DATE1) 2277. z(58_ATM0,9) demand_def(a_ATM0,d_DATE2) -60.3 demand_def(a_ATM0,d_DATE3) -2821.5 z(58_ATM0,9) demand_def(a_ATM0,d_DATE4) -855.9 demand_def(a_ATM0,d_DATE5) 431.1 z(58_ATM0,9) demand_def(a_ATM0,d_DATE6) 2867.4 demand_def(a_ATM0,d_DATE7) 306.9 z(58_ATM0,9) demand_def(a_ATM0,d_DATE8) -578.7 demand_def(a_ATM0,d_DATE9) -837.9 z(58_ATM0,9) ztox1(a_ATM0,t_9) 1. ztox2(a_ATM0,t_9) 1. z(58_ATM0,9) ztox3(a_ATM0,t_9) 1. z(59_ATM0,10) demand_def(a_ATM0,d_DATE0) 1984. demand_def(a_ATM0,d_DATE1) 2530. z(59_ATM0,10) demand_def(a_ATM0,d_DATE2) -67. demand_def(a_ATM0,d_DATE3) -3135. z(59_ATM0,10) demand_def(a_ATM0,d_DATE4) -951. demand_def(a_ATM0,d_DATE5) 479. z(59_ATM0,10) demand_def(a_ATM0,d_DATE6) 3186. demand_def(a_ATM0,d_DATE7) 341. z(59_ATM0,10) demand_def(a_ATM0,d_DATE8) -643. demand_def(a_ATM0,d_DATE9) -931. z(59_ATM0,10) ztox1(a_ATM0,t_10) 1. ztox2(a_ATM0,t_10) 1. z(59_ATM0,10) ztox3(a_ATM0,t_10) 1. z(60_ATM1,1) demand_def(a_ATM1,d_DATE0) 60.1 demand_def(a_ATM1,d_DATE1) 61.8 z(60_ATM1,1) demand_def(a_ATM1,d_DATE2) -61. demand_def(a_ATM1,d_DATE3) -197.7 z(60_ATM1,1) demand_def(a_ATM1,d_DATE4) 156.6 demand_def(a_ATM1,d_DATE5) -148. z(60_ATM1,1) demand_def(a_ATM1,d_DATE6) 67.9 demand_def(a_ATM1,d_DATE7) 137.5 z(60_ATM1,1) demand_def(a_ATM1,d_DATE8) 53.4 demand_def(a_ATM1,d_DATE9) 15.7 z(60_ATM1,1) ztox1(a_ATM1,t_1) 1. ztox2(a_ATM1,t_1) 1. z(60_ATM1,1) ztox3(a_ATM1,t_1) 1. z(61_ATM1,2) demand_def(a_ATM1,d_DATE0) 120.2 demand_def(a_ATM1,d_DATE1) 123.6 z(61_ATM1,2) demand_def(a_ATM1,d_DATE2) -122. demand_def(a_ATM1,d_DATE3) -395.4 z(61_ATM1,2) demand_def(a_ATM1,d_DATE4) 313.2 demand_def(a_ATM1,d_DATE5) -296. z(61_ATM1,2) demand_def(a_ATM1,d_DATE6) 135.8 demand_def(a_ATM1,d_DATE7) 275. z(61_ATM1,2) demand_def(a_ATM1,d_DATE8) 106.8 demand_def(a_ATM1,d_DATE9) 31.4 z(61_ATM1,2) ztox1(a_ATM1,t_2) 1. ztox2(a_ATM1,t_2) 1. z(61_ATM1,2) ztox3(a_ATM1,t_2) 1. z(62_ATM1,3) demand_def(a_ATM1,d_DATE0) 180.3 demand_def(a_ATM1,d_DATE1) 185.4 z(62_ATM1,3) demand_def(a_ATM1,d_DATE2) -183. demand_def(a_ATM1,d_DATE3) -593.1 z(62_ATM1,3) demand_def(a_ATM1,d_DATE4) 469.8 demand_def(a_ATM1,d_DATE5) -444. z(62_ATM1,3) demand_def(a_ATM1,d_DATE6) 203.7 demand_def(a_ATM1,d_DATE7) 412.5 z(62_ATM1,3) demand_def(a_ATM1,d_DATE8) 160.2 demand_def(a_ATM1,d_DATE9) 47.1 z(62_ATM1,3) ztox1(a_ATM1,t_3) 1. ztox2(a_ATM1,t_3) 1. z(62_ATM1,3) ztox3(a_ATM1,t_3) 1. z(63_ATM1,4) demand_def(a_ATM1,d_DATE0) 240.4 demand_def(a_ATM1,d_DATE1) 247.2 z(63_ATM1,4) demand_def(a_ATM1,d_DATE2) -244. demand_def(a_ATM1,d_DATE3) -790.8 z(63_ATM1,4) demand_def(a_ATM1,d_DATE4) 626.4 demand_def(a_ATM1,d_DATE5) -592. z(63_ATM1,4) demand_def(a_ATM1,d_DATE6) 271.6 demand_def(a_ATM1,d_DATE7) 550. z(63_ATM1,4) demand_def(a_ATM1,d_DATE8) 213.6 demand_def(a_ATM1,d_DATE9) 62.8 z(63_ATM1,4) ztox1(a_ATM1,t_4) 1. ztox2(a_ATM1,t_4) 1. z(63_ATM1,4) ztox3(a_ATM1,t_4) 1. z(64_ATM1,5) demand_def(a_ATM1,d_DATE0) 300.5 demand_def(a_ATM1,d_DATE1) 309. z(64_ATM1,5) demand_def(a_ATM1,d_DATE2) -305. demand_def(a_ATM1,d_DATE3) -988.5 z(64_ATM1,5) demand_def(a_ATM1,d_DATE4) 783. demand_def(a_ATM1,d_DATE5) -740. z(64_ATM1,5) demand_def(a_ATM1,d_DATE6) 339.5 demand_def(a_ATM1,d_DATE7) 687.5 z(64_ATM1,5) demand_def(a_ATM1,d_DATE8) 267. demand_def(a_ATM1,d_DATE9) 78.5 z(64_ATM1,5) ztox1(a_ATM1,t_5) 1. ztox2(a_ATM1,t_5) 1. z(64_ATM1,5) ztox3(a_ATM1,t_5) 1. z(65_ATM1,6) demand_def(a_ATM1,d_DATE0) 360.6 demand_def(a_ATM1,d_DATE1) 370.8 z(65_ATM1,6) demand_def(a_ATM1,d_DATE2) -366. demand_def(a_ATM1,d_DATE3) -1186.2 z(65_ATM1,6) demand_def(a_ATM1,d_DATE4) 939.6 demand_def(a_ATM1,d_DATE5) -888. z(65_ATM1,6) demand_def(a_ATM1,d_DATE6) 407.4 demand_def(a_ATM1,d_DATE7) 825. z(65_ATM1,6) demand_def(a_ATM1,d_DATE8) 320.4 demand_def(a_ATM1,d_DATE9) 94.2 z(65_ATM1,6) ztox1(a_ATM1,t_6) 1. ztox2(a_ATM1,t_6) 1. z(65_ATM1,6) ztox3(a_ATM1,t_6) 1. z(66_ATM1,7) demand_def(a_ATM1,d_DATE0) 420.7 demand_def(a_ATM1,d_DATE1) 432.6 z(66_ATM1,7) demand_def(a_ATM1,d_DATE2) -427. demand_def(a_ATM1,d_DATE3) -1383.9 z(66_ATM1,7) demand_def(a_ATM1,d_DATE4) 1096.2 demand_def(a_ATM1,d_DATE5) -1036. z(66_ATM1,7) demand_def(a_ATM1,d_DATE6) 475.3 demand_def(a_ATM1,d_DATE7) 962.5 z(66_ATM1,7) demand_def(a_ATM1,d_DATE8) 373.8 demand_def(a_ATM1,d_DATE9) 109.9 z(66_ATM1,7) ztox1(a_ATM1,t_7) 1. ztox2(a_ATM1,t_7) 1. z(66_ATM1,7) ztox3(a_ATM1,t_7) 1. z(67_ATM1,8) demand_def(a_ATM1,d_DATE0) 480.8 demand_def(a_ATM1,d_DATE1) 494.4 z(67_ATM1,8) demand_def(a_ATM1,d_DATE2) -488. demand_def(a_ATM1,d_DATE3) -1581.6 z(67_ATM1,8) demand_def(a_ATM1,d_DATE4) 1252.8 demand_def(a_ATM1,d_DATE5) -1184. z(67_ATM1,8) demand_def(a_ATM1,d_DATE6) 543.2 demand_def(a_ATM1,d_DATE7) 1100. z(67_ATM1,8) demand_def(a_ATM1,d_DATE8) 427.2 demand_def(a_ATM1,d_DATE9) 125.6 z(67_ATM1,8) ztox1(a_ATM1,t_8) 1. ztox2(a_ATM1,t_8) 1. z(67_ATM1,8) ztox3(a_ATM1,t_8) 1. z(68_ATM1,9) demand_def(a_ATM1,d_DATE0) 540.9 demand_def(a_ATM1,d_DATE1) 556.2 z(68_ATM1,9) demand_def(a_ATM1,d_DATE2) -549. demand_def(a_ATM1,d_DATE3) -1779.3 z(68_ATM1,9) demand_def(a_ATM1,d_DATE4) 1409.4 demand_def(a_ATM1,d_DATE5) -1332. z(68_ATM1,9) demand_def(a_ATM1,d_DATE6) 611.1 demand_def(a_ATM1,d_DATE7) 1237.5 z(68_ATM1,9) demand_def(a_ATM1,d_DATE8) 480.6 demand_def(a_ATM1,d_DATE9) 141.3 z(68_ATM1,9) ztox1(a_ATM1,t_9) 1. ztox2(a_ATM1,t_9) 1. z(68_ATM1,9) ztox3(a_ATM1,t_9) 1. z(69_ATM1,10) demand_def(a_ATM1,d_DATE0) 601. demand_def(a_ATM1,d_DATE1) 618. z(69_ATM1,10) demand_def(a_ATM1,d_DATE2) -610. demand_def(a_ATM1,d_DATE3) -1977. z(69_ATM1,10) demand_def(a_ATM1,d_DATE4) 1566. demand_def(a_ATM1,d_DATE5) -1480. z(69_ATM1,10) demand_def(a_ATM1,d_DATE6) 679. demand_def(a_ATM1,d_DATE7) 1375. z(69_ATM1,10) demand_def(a_ATM1,d_DATE8) 534. demand_def(a_ATM1,d_DATE9) 157. z(69_ATM1,10) ztox1(a_ATM1,t_10) 1. ztox2(a_ATM1,t_10) 1. z(69_ATM1,10) ztox3(a_ATM1,t_10) 1. z(70_ATM2,1) demand_def(a_ATM2,d_DATE0) -69.1 demand_def(a_ATM2,d_DATE1) -200.1 z(70_ATM2,1) demand_def(a_ATM2,d_DATE2) 262.6 demand_def(a_ATM2,d_DATE3) 364.9 z(70_ATM2,1) demand_def(a_ATM2,d_DATE4) -95.1 demand_def(a_ATM2,d_DATE5) -137.6 z(70_ATM2,1) demand_def(a_ATM2,d_DATE6) 206.7 demand_def(a_ATM2,d_DATE7) 104.6 z(70_ATM2,1) demand_def(a_ATM2,d_DATE8) -57.4 demand_def(a_ATM2,d_DATE9) -137.7 z(70_ATM2,1) ztox1(a_ATM2,t_1) 1. ztox2(a_ATM2,t_1) 1. z(70_ATM2,1) ztox3(a_ATM2,t_1) 1. z(71_ATM2,2) demand_def(a_ATM2,d_DATE0) -138.2 demand_def(a_ATM2,d_DATE1) -400.2 z(71_ATM2,2) demand_def(a_ATM2,d_DATE2) 525.2 demand_def(a_ATM2,d_DATE3) 729.8 z(71_ATM2,2) demand_def(a_ATM2,d_DATE4) -190.2 demand_def(a_ATM2,d_DATE5) -275.2 z(71_ATM2,2) demand_def(a_ATM2,d_DATE6) 413.4 demand_def(a_ATM2,d_DATE7) 209.2 z(71_ATM2,2) demand_def(a_ATM2,d_DATE8) -114.8 demand_def(a_ATM2,d_DATE9) -275.4 z(71_ATM2,2) ztox1(a_ATM2,t_2) 1. ztox2(a_ATM2,t_2) 1. z(71_ATM2,2) ztox3(a_ATM2,t_2) 1. z(72_ATM2,3) demand_def(a_ATM2,d_DATE0) -207.3 demand_def(a_ATM2,d_DATE1) -600.3 z(72_ATM2,3) demand_def(a_ATM2,d_DATE2) 787.8 demand_def(a_ATM2,d_DATE3) 1094.7 z(72_ATM2,3) demand_def(a_ATM2,d_DATE4) -285.3 demand_def(a_ATM2,d_DATE5) -412.8 z(72_ATM2,3) demand_def(a_ATM2,d_DATE6) 620.1 demand_def(a_ATM2,d_DATE7) 313.8 z(72_ATM2,3) demand_def(a_ATM2,d_DATE8) -172.2 demand_def(a_ATM2,d_DATE9) -413.1 z(72_ATM2,3) ztox1(a_ATM2,t_3) 1. ztox2(a_ATM2,t_3) 1. z(72_ATM2,3) ztox3(a_ATM2,t_3) 1. z(73_ATM2,4) demand_def(a_ATM2,d_DATE0) -276.4 demand_def(a_ATM2,d_DATE1) -800.4 z(73_ATM2,4) demand_def(a_ATM2,d_DATE2) 1050.4 demand_def(a_ATM2,d_DATE3) 1459.6 z(73_ATM2,4) demand_def(a_ATM2,d_DATE4) -380.4 demand_def(a_ATM2,d_DATE5) -550.4 z(73_ATM2,4) demand_def(a_ATM2,d_DATE6) 826.8 demand_def(a_ATM2,d_DATE7) 418.4 z(73_ATM2,4) demand_def(a_ATM2,d_DATE8) -229.6 demand_def(a_ATM2,d_DATE9) -550.8 z(73_ATM2,4) ztox1(a_ATM2,t_4) 1. ztox2(a_ATM2,t_4) 1. z(73_ATM2,4) ztox3(a_ATM2,t_4) 1. z(74_ATM2,5) demand_def(a_ATM2,d_DATE0) -345.5 demand_def(a_ATM2,d_DATE1) -1000.5 z(74_ATM2,5) demand_def(a_ATM2,d_DATE2) 1313. demand_def(a_ATM2,d_DATE3) 1824.5 z(74_ATM2,5) demand_def(a_ATM2,d_DATE4) -475.5 demand_def(a_ATM2,d_DATE5) -688. z(74_ATM2,5) demand_def(a_ATM2,d_DATE6) 1033.5 demand_def(a_ATM2,d_DATE7) 523. z(74_ATM2,5) demand_def(a_ATM2,d_DATE8) -287. demand_def(a_ATM2,d_DATE9) -688.5 z(74_ATM2,5) ztox1(a_ATM2,t_5) 1. ztox2(a_ATM2,t_5) 1. z(74_ATM2,5) ztox3(a_ATM2,t_5) 1. z(75_ATM2,6) demand_def(a_ATM2,d_DATE0) -414.6 demand_def(a_ATM2,d_DATE1) -1200.6 z(75_ATM2,6) demand_def(a_ATM2,d_DATE2) 1575.6 demand_def(a_ATM2,d_DATE3) 2189.4 z(75_ATM2,6) demand_def(a_ATM2,d_DATE4) -570.6 demand_def(a_ATM2,d_DATE5) -825.6 z(75_ATM2,6) demand_def(a_ATM2,d_DATE6) 1240.2 demand_def(a_ATM2,d_DATE7) 627.6 z(75_ATM2,6) demand_def(a_ATM2,d_DATE8) -344.4 demand_def(a_ATM2,d_DATE9) -826.2 z(75_ATM2,6) ztox1(a_ATM2,t_6) 1. ztox2(a_ATM2,t_6) 1. z(75_ATM2,6) ztox3(a_ATM2,t_6) 1. z(76_ATM2,7) demand_def(a_ATM2,d_DATE0) -483.7 demand_def(a_ATM2,d_DATE1) -1400.7 z(76_ATM2,7) demand_def(a_ATM2,d_DATE2) 1838.2 demand_def(a_ATM2,d_DATE3) 2554.3 z(76_ATM2,7) demand_def(a_ATM2,d_DATE4) -665.7 demand_def(a_ATM2,d_DATE5) -963.2 z(76_ATM2,7) demand_def(a_ATM2,d_DATE6) 1446.9 demand_def(a_ATM2,d_DATE7) 732.2 z(76_ATM2,7) demand_def(a_ATM2,d_DATE8) -401.8 demand_def(a_ATM2,d_DATE9) -963.9 z(76_ATM2,7) ztox1(a_ATM2,t_7) 1. ztox2(a_ATM2,t_7) 1. z(76_ATM2,7) ztox3(a_ATM2,t_7) 1. z(77_ATM2,8) demand_def(a_ATM2,d_DATE0) -552.8 demand_def(a_ATM2,d_DATE1) -1600.8 z(77_ATM2,8) demand_def(a_ATM2,d_DATE2) 2100.8 demand_def(a_ATM2,d_DATE3) 2919.2 z(77_ATM2,8) demand_def(a_ATM2,d_DATE4) -760.8 demand_def(a_ATM2,d_DATE5) -1100.8 z(77_ATM2,8) demand_def(a_ATM2,d_DATE6) 1653.6 demand_def(a_ATM2,d_DATE7) 836.8 z(77_ATM2,8) demand_def(a_ATM2,d_DATE8) -459.2 demand_def(a_ATM2,d_DATE9) -1101.6 z(77_ATM2,8) ztox1(a_ATM2,t_8) 1. ztox2(a_ATM2,t_8) 1. z(77_ATM2,8) ztox3(a_ATM2,t_8) 1. z(78_ATM2,9) demand_def(a_ATM2,d_DATE0) -621.9 demand_def(a_ATM2,d_DATE1) -1800.9 z(78_ATM2,9) demand_def(a_ATM2,d_DATE2) 2363.4 demand_def(a_ATM2,d_DATE3) 3284.1 z(78_ATM2,9) demand_def(a_ATM2,d_DATE4) -855.9 demand_def(a_ATM2,d_DATE5) -1238.4 z(78_ATM2,9) demand_def(a_ATM2,d_DATE6) 1860.3 demand_def(a_ATM2,d_DATE7) 941.4 z(78_ATM2,9) demand_def(a_ATM2,d_DATE8) -516.6 demand_def(a_ATM2,d_DATE9) -1239.3 z(78_ATM2,9) ztox1(a_ATM2,t_9) 1. ztox2(a_ATM2,t_9) 1. z(78_ATM2,9) ztox3(a_ATM2,t_9) 1. z(79_ATM2,10) demand_def(a_ATM2,d_DATE0) -691. demand_def(a_ATM2,d_DATE1) -2001. z(79_ATM2,10) demand_def(a_ATM2,d_DATE2) 2626. demand_def(a_ATM2,d_DATE3) 3649. z(79_ATM2,10) demand_def(a_ATM2,d_DATE4) -951. demand_def(a_ATM2,d_DATE5) -1376. z(79_ATM2,10) demand_def(a_ATM2,d_DATE6) 2067. demand_def(a_ATM2,d_DATE7) 1046. z(79_ATM2,10) demand_def(a_ATM2,d_DATE8) -574. demand_def(a_ATM2,d_DATE9) -1377. z(79_ATM2,10) ztox1(a_ATM2,t_10) 1. ztox2(a_ATM2,t_10) 1. z(79_ATM2,10) ztox3(a_ATM2,t_10) 1. z(80_ATM3,1) demand_def(a_ATM3,d_DATE0) 294.3 demand_def(a_ATM3,d_DATE1) 9.3 z(80_ATM3,1) demand_def(a_ATM3,d_DATE2) -45.1 demand_def(a_ATM3,d_DATE3) -128.2 z(80_ATM3,1) demand_def(a_ATM3,d_DATE4) 125.1 demand_def(a_ATM3,d_DATE5) -114.1 z(80_ATM3,1) demand_def(a_ATM3,d_DATE6) -321.4 demand_def(a_ATM3,d_DATE7) -97.6 z(80_ATM3,1) demand_def(a_ATM3,d_DATE8) -48. demand_def(a_ATM3,d_DATE9) -236.9 z(80_ATM3,1) ztox1(a_ATM3,t_1) 1. ztox2(a_ATM3,t_1) 1. z(80_ATM3,1) ztox3(a_ATM3,t_1) 1. z(81_ATM3,2) demand_def(a_ATM3,d_DATE0) 588.6 demand_def(a_ATM3,d_DATE1) 18.6 z(81_ATM3,2) demand_def(a_ATM3,d_DATE2) -90.2 demand_def(a_ATM3,d_DATE3) -256.4 z(81_ATM3,2) demand_def(a_ATM3,d_DATE4) 250.2 demand_def(a_ATM3,d_DATE5) -228.2 z(81_ATM3,2) demand_def(a_ATM3,d_DATE6) -642.8 demand_def(a_ATM3,d_DATE7) -195.2 z(81_ATM3,2) demand_def(a_ATM3,d_DATE8) -96. demand_def(a_ATM3,d_DATE9) -473.8 z(81_ATM3,2) ztox1(a_ATM3,t_2) 1. ztox2(a_ATM3,t_2) 1. z(81_ATM3,2) ztox3(a_ATM3,t_2) 1. z(82_ATM3,3) demand_def(a_ATM3,d_DATE0) 882.9 demand_def(a_ATM3,d_DATE1) 27.9 z(82_ATM3,3) demand_def(a_ATM3,d_DATE2) -135.3 demand_def(a_ATM3,d_DATE3) -384.6 z(82_ATM3,3) demand_def(a_ATM3,d_DATE4) 375.3 demand_def(a_ATM3,d_DATE5) -342.3 z(82_ATM3,3) demand_def(a_ATM3,d_DATE6) -964.2 demand_def(a_ATM3,d_DATE7) -292.8 z(82_ATM3,3) demand_def(a_ATM3,d_DATE8) -144. demand_def(a_ATM3,d_DATE9) -710.7 z(82_ATM3,3) ztox1(a_ATM3,t_3) 1. ztox2(a_ATM3,t_3) 1. z(82_ATM3,3) ztox3(a_ATM3,t_3) 1. z(83_ATM3,4) demand_def(a_ATM3,d_DATE0) 1177.2 demand_def(a_ATM3,d_DATE1) 37.2 z(83_ATM3,4) demand_def(a_ATM3,d_DATE2) -180.4 demand_def(a_ATM3,d_DATE3) -512.8 z(83_ATM3,4) demand_def(a_ATM3,d_DATE4) 500.4 demand_def(a_ATM3,d_DATE5) -456.4 z(83_ATM3,4) demand_def(a_ATM3,d_DATE6) -1285.6 demand_def(a_ATM3,d_DATE7) -390.4 z(83_ATM3,4) demand_def(a_ATM3,d_DATE8) -192. demand_def(a_ATM3,d_DATE9) -947.6 z(83_ATM3,4) ztox1(a_ATM3,t_4) 1. ztox2(a_ATM3,t_4) 1. z(83_ATM3,4) ztox3(a_ATM3,t_4) 1. z(84_ATM3,5) demand_def(a_ATM3,d_DATE0) 1471.5 demand_def(a_ATM3,d_DATE1) 46.5 z(84_ATM3,5) demand_def(a_ATM3,d_DATE2) -225.5 demand_def(a_ATM3,d_DATE3) -641. z(84_ATM3,5) demand_def(a_ATM3,d_DATE4) 625.5 demand_def(a_ATM3,d_DATE5) -570.5 z(84_ATM3,5) demand_def(a_ATM3,d_DATE6) -1607. demand_def(a_ATM3,d_DATE7) -488. z(84_ATM3,5) demand_def(a_ATM3,d_DATE8) -240. demand_def(a_ATM3,d_DATE9) -1184.5 z(84_ATM3,5) ztox1(a_ATM3,t_5) 1. ztox2(a_ATM3,t_5) 1. z(84_ATM3,5) ztox3(a_ATM3,t_5) 1. z(85_ATM3,6) demand_def(a_ATM3,d_DATE0) 1765.8 demand_def(a_ATM3,d_DATE1) 55.8 z(85_ATM3,6) demand_def(a_ATM3,d_DATE2) -270.6 demand_def(a_ATM3,d_DATE3) -769.2 z(85_ATM3,6) demand_def(a_ATM3,d_DATE4) 750.6 demand_def(a_ATM3,d_DATE5) -684.6 z(85_ATM3,6) demand_def(a_ATM3,d_DATE6) -1928.4 demand_def(a_ATM3,d_DATE7) -585.6 z(85_ATM3,6) demand_def(a_ATM3,d_DATE8) -288. demand_def(a_ATM3,d_DATE9) -1421.4 z(85_ATM3,6) ztox1(a_ATM3,t_6) 1. ztox2(a_ATM3,t_6) 1. z(85_ATM3,6) ztox3(a_ATM3,t_6) 1. z(86_ATM3,7) demand_def(a_ATM3,d_DATE0) 2060.1 demand_def(a_ATM3,d_DATE1) 65.1 z(86_ATM3,7) demand_def(a_ATM3,d_DATE2) -315.7 demand_def(a_ATM3,d_DATE3) -897.4 z(86_ATM3,7) demand_def(a_ATM3,d_DATE4) 875.7 demand_def(a_ATM3,d_DATE5) -798.7 z(86_ATM3,7) demand_def(a_ATM3,d_DATE6) -2249.8 demand_def(a_ATM3,d_DATE7) -683.2 z(86_ATM3,7) demand_def(a_ATM3,d_DATE8) -336. demand_def(a_ATM3,d_DATE9) -1658.3 z(86_ATM3,7) ztox1(a_ATM3,t_7) 1. ztox2(a_ATM3,t_7) 1. z(86_ATM3,7) ztox3(a_ATM3,t_7) 1. z(87_ATM3,8) demand_def(a_ATM3,d_DATE0) 2354.4 demand_def(a_ATM3,d_DATE1) 74.4 z(87_ATM3,8) demand_def(a_ATM3,d_DATE2) -360.8 demand_def(a_ATM3,d_DATE3) -1025.6 z(87_ATM3,8) demand_def(a_ATM3,d_DATE4) 1000.8 demand_def(a_ATM3,d_DATE5) -912.8 z(87_ATM3,8) demand_def(a_ATM3,d_DATE6) -2571.2 demand_def(a_ATM3,d_DATE7) -780.8 z(87_ATM3,8) demand_def(a_ATM3,d_DATE8) -384. demand_def(a_ATM3,d_DATE9) -1895.2 z(87_ATM3,8) ztox1(a_ATM3,t_8) 1. ztox2(a_ATM3,t_8) 1. z(87_ATM3,8) ztox3(a_ATM3,t_8) 1. z(88_ATM3,9) demand_def(a_ATM3,d_DATE0) 2648.7 demand_def(a_ATM3,d_DATE1) 83.7 z(88_ATM3,9) demand_def(a_ATM3,d_DATE2) -405.9 demand_def(a_ATM3,d_DATE3) -1153.8 z(88_ATM3,9) demand_def(a_ATM3,d_DATE4) 1125.9 demand_def(a_ATM3,d_DATE5) -1026.9 z(88_ATM3,9) demand_def(a_ATM3,d_DATE6) -2892.6 demand_def(a_ATM3,d_DATE7) -878.4 z(88_ATM3,9) demand_def(a_ATM3,d_DATE8) -432. demand_def(a_ATM3,d_DATE9) -2132.1 z(88_ATM3,9) ztox1(a_ATM3,t_9) 1. ztox2(a_ATM3,t_9) 1. z(88_ATM3,9) ztox3(a_ATM3,t_9) 1. z(89_ATM3,10) demand_def(a_ATM3,d_DATE0) 2943. demand_def(a_ATM3,d_DATE1) 93. z(89_ATM3,10) demand_def(a_ATM3,d_DATE2) -451. demand_def(a_ATM3,d_DATE3) -1282. z(89_ATM3,10) demand_def(a_ATM3,d_DATE4) 1251. demand_def(a_ATM3,d_DATE5) -1141. z(89_ATM3,10) demand_def(a_ATM3,d_DATE6) -3214. demand_def(a_ATM3,d_DATE7) -976. z(89_ATM3,10) demand_def(a_ATM3,d_DATE8) -480. demand_def(a_ATM3,d_DATE9) -2369. z(89_ATM3,10) ztox1(a_ATM3,t_10) 1. ztox2(a_ATM3,t_10) 1. z(89_ATM3,10) ztox3(a_ATM3,t_10) 1. z(90_ATM4,1) demand_def(a_ATM4,d_DATE0) 15.1 demand_def(a_ATM4,d_DATE1) 81.1 z(90_ATM4,1) demand_def(a_ATM4,d_DATE2) -331. demand_def(a_ATM4,d_DATE3) -104.3 z(90_ATM4,1) demand_def(a_ATM4,d_DATE4) -178.9 demand_def(a_ATM4,d_DATE5) -34.6 z(90_ATM4,1) demand_def(a_ATM4,d_DATE6) -13.6 demand_def(a_ATM4,d_DATE7) -184.9 z(90_ATM4,1) demand_def(a_ATM4,d_DATE8) -44.3 demand_def(a_ATM4,d_DATE9) -95.1 z(90_ATM4,1) ztox1(a_ATM4,t_1) 1. ztox2(a_ATM4,t_1) 1. z(90_ATM4,1) ztox3(a_ATM4,t_1) 1. z(91_ATM4,2) demand_def(a_ATM4,d_DATE0) 30.2 demand_def(a_ATM4,d_DATE1) 162.2 z(91_ATM4,2) demand_def(a_ATM4,d_DATE2) -662. demand_def(a_ATM4,d_DATE3) -208.6 z(91_ATM4,2) demand_def(a_ATM4,d_DATE4) -357.8 demand_def(a_ATM4,d_DATE5) -69.2 z(91_ATM4,2) demand_def(a_ATM4,d_DATE6) -27.2 demand_def(a_ATM4,d_DATE7) -369.8 z(91_ATM4,2) demand_def(a_ATM4,d_DATE8) -88.6 demand_def(a_ATM4,d_DATE9) -190.2 z(91_ATM4,2) ztox1(a_ATM4,t_2) 1. ztox2(a_ATM4,t_2) 1. z(91_ATM4,2) ztox3(a_ATM4,t_2) 1. z(92_ATM4,3) demand_def(a_ATM4,d_DATE0) 45.3 demand_def(a_ATM4,d_DATE1) 243.3 z(92_ATM4,3) demand_def(a_ATM4,d_DATE2) -993. demand_def(a_ATM4,d_DATE3) -312.9 z(92_ATM4,3) demand_def(a_ATM4,d_DATE4) -536.7 demand_def(a_ATM4,d_DATE5) -103.8 z(92_ATM4,3) demand_def(a_ATM4,d_DATE6) -40.8 demand_def(a_ATM4,d_DATE7) -554.7 z(92_ATM4,3) demand_def(a_ATM4,d_DATE8) -132.9 demand_def(a_ATM4,d_DATE9) -285.3 z(92_ATM4,3) ztox1(a_ATM4,t_3) 1. ztox2(a_ATM4,t_3) 1. z(92_ATM4,3) ztox3(a_ATM4,t_3) 1. z(93_ATM4,4) demand_def(a_ATM4,d_DATE0) 60.4 demand_def(a_ATM4,d_DATE1) 324.4 z(93_ATM4,4) demand_def(a_ATM4,d_DATE2) -1324. demand_def(a_ATM4,d_DATE3) -417.2 z(93_ATM4,4) demand_def(a_ATM4,d_DATE4) -715.6 demand_def(a_ATM4,d_DATE5) -138.4 z(93_ATM4,4) demand_def(a_ATM4,d_DATE6) -54.4 demand_def(a_ATM4,d_DATE7) -739.6 z(93_ATM4,4) demand_def(a_ATM4,d_DATE8) -177.2 demand_def(a_ATM4,d_DATE9) -380.4 z(93_ATM4,4) ztox1(a_ATM4,t_4) 1. ztox2(a_ATM4,t_4) 1. z(93_ATM4,4) ztox3(a_ATM4,t_4) 1. z(94_ATM4,5) demand_def(a_ATM4,d_DATE0) 75.5 demand_def(a_ATM4,d_DATE1) 405.5 z(94_ATM4,5) demand_def(a_ATM4,d_DATE2) -1655. demand_def(a_ATM4,d_DATE3) -521.5 z(94_ATM4,5) demand_def(a_ATM4,d_DATE4) -894.5 demand_def(a_ATM4,d_DATE5) -173. z(94_ATM4,5) demand_def(a_ATM4,d_DATE6) -68. demand_def(a_ATM4,d_DATE7) -924.5 z(94_ATM4,5) demand_def(a_ATM4,d_DATE8) -221.5 demand_def(a_ATM4,d_DATE9) -475.5 z(94_ATM4,5) ztox1(a_ATM4,t_5) 1. ztox2(a_ATM4,t_5) 1. z(94_ATM4,5) ztox3(a_ATM4,t_5) 1. z(95_ATM4,6) demand_def(a_ATM4,d_DATE0) 90.6 demand_def(a_ATM4,d_DATE1) 486.6 z(95_ATM4,6) demand_def(a_ATM4,d_DATE2) -1986. demand_def(a_ATM4,d_DATE3) -625.8 z(95_ATM4,6) demand_def(a_ATM4,d_DATE4) -1073.4 demand_def(a_ATM4,d_DATE5) -207.6 z(95_ATM4,6) demand_def(a_ATM4,d_DATE6) -81.6 demand_def(a_ATM4,d_DATE7) -1109.4 z(95_ATM4,6) demand_def(a_ATM4,d_DATE8) -265.8 demand_def(a_ATM4,d_DATE9) -570.6 z(95_ATM4,6) ztox1(a_ATM4,t_6) 1. ztox2(a_ATM4,t_6) 1. z(95_ATM4,6) ztox3(a_ATM4,t_6) 1. z(96_ATM4,7) demand_def(a_ATM4,d_DATE0) 105.7 demand_def(a_ATM4,d_DATE1) 567.7 z(96_ATM4,7) demand_def(a_ATM4,d_DATE2) -2317. demand_def(a_ATM4,d_DATE3) -730.1 z(96_ATM4,7) demand_def(a_ATM4,d_DATE4) -1252.3 demand_def(a_ATM4,d_DATE5) -242.2 z(96_ATM4,7) demand_def(a_ATM4,d_DATE6) -95.2 demand_def(a_ATM4,d_DATE7) -1294.3 z(96_ATM4,7) demand_def(a_ATM4,d_DATE8) -310.1 demand_def(a_ATM4,d_DATE9) -665.7 z(96_ATM4,7) ztox1(a_ATM4,t_7) 1. ztox2(a_ATM4,t_7) 1. z(96_ATM4,7) ztox3(a_ATM4,t_7) 1. z(97_ATM4,8) demand_def(a_ATM4,d_DATE0) 120.8 demand_def(a_ATM4,d_DATE1) 648.8 z(97_ATM4,8) demand_def(a_ATM4,d_DATE2) -2648. demand_def(a_ATM4,d_DATE3) -834.4 z(97_ATM4,8) demand_def(a_ATM4,d_DATE4) -1431.2 demand_def(a_ATM4,d_DATE5) -276.8 z(97_ATM4,8) demand_def(a_ATM4,d_DATE6) -108.8 demand_def(a_ATM4,d_DATE7) -1479.2 z(97_ATM4,8) demand_def(a_ATM4,d_DATE8) -354.4 demand_def(a_ATM4,d_DATE9) -760.8 z(97_ATM4,8) ztox1(a_ATM4,t_8) 1. ztox2(a_ATM4,t_8) 1. z(97_ATM4,8) ztox3(a_ATM4,t_8) 1. z(98_ATM4,9) demand_def(a_ATM4,d_DATE0) 135.9 demand_def(a_ATM4,d_DATE1) 729.9 z(98_ATM4,9) demand_def(a_ATM4,d_DATE2) -2979. demand_def(a_ATM4,d_DATE3) -938.7 z(98_ATM4,9) demand_def(a_ATM4,d_DATE4) -1610.1 demand_def(a_ATM4,d_DATE5) -311.4 z(98_ATM4,9) demand_def(a_ATM4,d_DATE6) -122.4 demand_def(a_ATM4,d_DATE7) -1664.1 z(98_ATM4,9) demand_def(a_ATM4,d_DATE8) -398.7 demand_def(a_ATM4,d_DATE9) -855.9 z(98_ATM4,9) ztox1(a_ATM4,t_9) 1. ztox2(a_ATM4,t_9) 1. z(98_ATM4,9) ztox3(a_ATM4,t_9) 1. z(99_ATM4,10) demand_def(a_ATM4,d_DATE0) 151. demand_def(a_ATM4,d_DATE1) 811. z(99_ATM4,10) demand_def(a_ATM4,d_DATE2) -3310. demand_def(a_ATM4,d_DATE3) -1043. z(99_ATM4,10) demand_def(a_ATM4,d_DATE4) -1789. demand_def(a_ATM4,d_DATE5) -346. z(99_ATM4,10) demand_def(a_ATM4,d_DATE6) -136. demand_def(a_ATM4,d_DATE7) -1849. z(99_ATM4,10) demand_def(a_ATM4,d_DATE8) -443. demand_def(a_ATM4,d_DATE9) -951. z(99_ATM4,10) ztox1(a_ATM4,t_10) 1. ztox2(a_ATM4,t_10) 1. z(99_ATM4,10) ztox3(a_ATM4,t_10) 1. fp(100_ATM0,DATE0) OBJROW 1. budget(d_DATE0) 1. fp(100_ATM0,DATE0) demand_def(a_ATM0,d_DATE0) 1. fp(101_ATM0,DATE1) OBJROW 1. budget(d_DATE1) 1. fp(101_ATM0,DATE1) demand_def(a_ATM0,d_DATE1) 1. fp(102_ATM0,DATE2) OBJROW 1. budget(d_DATE2) 1. fp(102_ATM0,DATE2) demand_def(a_ATM0,d_DATE2) 1. fp(103_ATM0,DATE3) OBJROW 1. budget(d_DATE3) 1. fp(103_ATM0,DATE3) demand_def(a_ATM0,d_DATE3) 1. fp(104_ATM0,DATE4) OBJROW 1. budget(d_DATE4) 1. fp(104_ATM0,DATE4) demand_def(a_ATM0,d_DATE4) 1. fp(105_ATM0,DATE5) OBJROW 1. budget(d_DATE5) 1. fp(105_ATM0,DATE5) demand_def(a_ATM0,d_DATE5) 1. fp(106_ATM0,DATE6) OBJROW 1. budget(d_DATE6) 1. fp(106_ATM0,DATE6) demand_def(a_ATM0,d_DATE6) 1. fp(107_ATM0,DATE7) OBJROW 1. budget(d_DATE7) 1. fp(107_ATM0,DATE7) demand_def(a_ATM0,d_DATE7) 1. fp(108_ATM0,DATE8) OBJROW 1. budget(d_DATE8) 1. fp(108_ATM0,DATE8) demand_def(a_ATM0,d_DATE8) 1. fp(109_ATM0,DATE9) OBJROW 1. budget(d_DATE9) 1. fp(109_ATM0,DATE9) demand_def(a_ATM0,d_DATE9) 1. fp(110_ATM1,DATE0) OBJROW 1. budget(d_DATE0) 1. fp(110_ATM1,DATE0) demand_def(a_ATM1,d_DATE0) 1. fp(111_ATM1,DATE1) OBJROW 1. budget(d_DATE1) 1. fp(111_ATM1,DATE1) demand_def(a_ATM1,d_DATE1) 1. fp(112_ATM1,DATE2) OBJROW 1. budget(d_DATE2) 1. fp(112_ATM1,DATE2) demand_def(a_ATM1,d_DATE2) 1. fp(113_ATM1,DATE3) OBJROW 1. budget(d_DATE3) 1. fp(113_ATM1,DATE3) demand_def(a_ATM1,d_DATE3) 1. fp(114_ATM1,DATE4) OBJROW 1. budget(d_DATE4) 1. fp(114_ATM1,DATE4) demand_def(a_ATM1,d_DATE4) 1. fp(115_ATM1,DATE5) OBJROW 1. budget(d_DATE5) 1. fp(115_ATM1,DATE5) demand_def(a_ATM1,d_DATE5) 1. fp(116_ATM1,DATE6) OBJROW 1. budget(d_DATE6) 1. fp(116_ATM1,DATE6) demand_def(a_ATM1,d_DATE6) 1. fp(117_ATM1,DATE7) OBJROW 1. budget(d_DATE7) 1. fp(117_ATM1,DATE7) demand_def(a_ATM1,d_DATE7) 1. fp(118_ATM1,DATE8) OBJROW 1. budget(d_DATE8) 1. fp(118_ATM1,DATE8) demand_def(a_ATM1,d_DATE8) 1. fp(119_ATM1,DATE9) OBJROW 1. budget(d_DATE9) 1. fp(119_ATM1,DATE9) demand_def(a_ATM1,d_DATE9) 1. fp(120_ATM2,DATE0) OBJROW 1. budget(d_DATE0) 1. fp(120_ATM2,DATE0) demand_def(a_ATM2,d_DATE0) 1. fp(121_ATM2,DATE1) OBJROW 1. budget(d_DATE1) 1. fp(121_ATM2,DATE1) demand_def(a_ATM2,d_DATE1) 1. fp(122_ATM2,DATE2) OBJROW 1. budget(d_DATE2) 1. fp(122_ATM2,DATE2) demand_def(a_ATM2,d_DATE2) 1. fp(123_ATM2,DATE3) OBJROW 1. budget(d_DATE3) 1. fp(123_ATM2,DATE3) demand_def(a_ATM2,d_DATE3) 1. fp(124_ATM2,DATE4) OBJROW 1. budget(d_DATE4) 1. fp(124_ATM2,DATE4) demand_def(a_ATM2,d_DATE4) 1. fp(125_ATM2,DATE5) OBJROW 1. budget(d_DATE5) 1. fp(125_ATM2,DATE5) demand_def(a_ATM2,d_DATE5) 1. fp(126_ATM2,DATE6) OBJROW 1. budget(d_DATE6) 1. fp(126_ATM2,DATE6) demand_def(a_ATM2,d_DATE6) 1. fp(127_ATM2,DATE7) OBJROW 1. budget(d_DATE7) 1. fp(127_ATM2,DATE7) demand_def(a_ATM2,d_DATE7) 1. fp(128_ATM2,DATE8) OBJROW 1. budget(d_DATE8) 1. fp(128_ATM2,DATE8) demand_def(a_ATM2,d_DATE8) 1. fp(129_ATM2,DATE9) OBJROW 1. budget(d_DATE9) 1. fp(129_ATM2,DATE9) demand_def(a_ATM2,d_DATE9) 1. fp(130_ATM3,DATE0) OBJROW 1. budget(d_DATE0) 1. fp(130_ATM3,DATE0) demand_def(a_ATM3,d_DATE0) 1. fp(131_ATM3,DATE1) OBJROW 1. budget(d_DATE1) 1. fp(131_ATM3,DATE1) demand_def(a_ATM3,d_DATE1) 1. fp(132_ATM3,DATE2) OBJROW 1. budget(d_DATE2) 1. fp(132_ATM3,DATE2) demand_def(a_ATM3,d_DATE2) 1. fp(133_ATM3,DATE3) OBJROW 1. budget(d_DATE3) 1. fp(133_ATM3,DATE3) demand_def(a_ATM3,d_DATE3) 1. fp(134_ATM3,DATE4) OBJROW 1. budget(d_DATE4) 1. fp(134_ATM3,DATE4) demand_def(a_ATM3,d_DATE4) 1. fp(135_ATM3,DATE5) OBJROW 1. budget(d_DATE5) 1. fp(135_ATM3,DATE5) demand_def(a_ATM3,d_DATE5) 1. fp(136_ATM3,DATE6) OBJROW 1. budget(d_DATE6) 1. fp(136_ATM3,DATE6) demand_def(a_ATM3,d_DATE6) 1. fp(137_ATM3,DATE7) OBJROW 1. budget(d_DATE7) 1. fp(137_ATM3,DATE7) demand_def(a_ATM3,d_DATE7) 1. fp(138_ATM3,DATE8) OBJROW 1. budget(d_DATE8) 1. fp(138_ATM3,DATE8) demand_def(a_ATM3,d_DATE8) 1. fp(139_ATM3,DATE9) OBJROW 1. budget(d_DATE9) 1. fp(139_ATM3,DATE9) demand_def(a_ATM3,d_DATE9) 1. fp(140_ATM4,DATE0) OBJROW 1. budget(d_DATE0) 1. fp(140_ATM4,DATE0) demand_def(a_ATM4,d_DATE0) 1. fp(141_ATM4,DATE1) OBJROW 1. budget(d_DATE1) 1. fp(141_ATM4,DATE1) demand_def(a_ATM4,d_DATE1) 1. fp(142_ATM4,DATE2) OBJROW 1. budget(d_DATE2) 1. fp(142_ATM4,DATE2) demand_def(a_ATM4,d_DATE2) 1. fp(143_ATM4,DATE3) OBJROW 1. budget(d_DATE3) 1. fp(143_ATM4,DATE3) demand_def(a_ATM4,d_DATE3) 1. fp(144_ATM4,DATE4) OBJROW 1. budget(d_DATE4) 1. fp(144_ATM4,DATE4) demand_def(a_ATM4,d_DATE4) 1. fp(145_ATM4,DATE5) OBJROW 1. budget(d_DATE5) 1. fp(145_ATM4,DATE5) demand_def(a_ATM4,d_DATE5) 1. fp(146_ATM4,DATE6) OBJROW 1. budget(d_DATE6) 1. fp(146_ATM4,DATE6) demand_def(a_ATM4,d_DATE6) 1. fp(147_ATM4,DATE7) OBJROW 1. budget(d_DATE7) 1. fp(147_ATM4,DATE7) demand_def(a_ATM4,d_DATE7) 1. fp(148_ATM4,DATE8) OBJROW 1. budget(d_DATE8) 1. fp(148_ATM4,DATE8) demand_def(a_ATM4,d_DATE8) 1. fp(149_ATM4,DATE9) OBJROW 1. budget(d_DATE9) 1. fp(149_ATM4,DATE9) demand_def(a_ATM4,d_DATE9) 1. fm(150_ATM0,DATE0) OBJROW 1. budget(d_DATE0) -1. fm(150_ATM0,DATE0) demand_def(a_ATM0,d_DATE0) -1. linkv(a_ATM0,d_DATE0) 1. fm(151_ATM0,DATE1) OBJROW 1. budget(d_DATE1) -1. fm(151_ATM0,DATE1) demand_def(a_ATM0,d_DATE1) -1. linkv(a_ATM0,d_DATE1) 1. fm(152_ATM0,DATE2) OBJROW 1. budget(d_DATE2) -1. fm(152_ATM0,DATE2) demand_def(a_ATM0,d_DATE2) -1. linkv(a_ATM0,d_DATE2) 1. fm(153_ATM0,DATE3) OBJROW 1. budget(d_DATE3) -1. fm(153_ATM0,DATE3) demand_def(a_ATM0,d_DATE3) -1. linkv(a_ATM0,d_DATE3) 1. fm(154_ATM0,DATE4) OBJROW 1. budget(d_DATE4) -1. fm(154_ATM0,DATE4) demand_def(a_ATM0,d_DATE4) -1. linkv(a_ATM0,d_DATE4) 1. fm(155_ATM0,DATE5) OBJROW 1. budget(d_DATE5) -1. fm(155_ATM0,DATE5) demand_def(a_ATM0,d_DATE5) -1. linkv(a_ATM0,d_DATE5) 1. fm(156_ATM0,DATE6) OBJROW 1. budget(d_DATE6) -1. fm(156_ATM0,DATE6) demand_def(a_ATM0,d_DATE6) -1. linkv(a_ATM0,d_DATE6) 1. fm(157_ATM0,DATE7) OBJROW 1. budget(d_DATE7) -1. fm(157_ATM0,DATE7) demand_def(a_ATM0,d_DATE7) -1. linkv(a_ATM0,d_DATE7) 1. fm(158_ATM0,DATE8) OBJROW 1. budget(d_DATE8) -1. fm(158_ATM0,DATE8) demand_def(a_ATM0,d_DATE8) -1. linkv(a_ATM0,d_DATE8) 1. fm(159_ATM0,DATE9) OBJROW 1. budget(d_DATE9) -1. fm(159_ATM0,DATE9) demand_def(a_ATM0,d_DATE9) -1. linkv(a_ATM0,d_DATE9) 1. fm(160_ATM1,DATE0) OBJROW 1. budget(d_DATE0) -1. fm(160_ATM1,DATE0) demand_def(a_ATM1,d_DATE0) -1. linkv(a_ATM1,d_DATE0) 1. fm(161_ATM1,DATE1) OBJROW 1. budget(d_DATE1) -1. fm(161_ATM1,DATE1) demand_def(a_ATM1,d_DATE1) -1. linkv(a_ATM1,d_DATE1) 1. fm(162_ATM1,DATE2) OBJROW 1. budget(d_DATE2) -1. fm(162_ATM1,DATE2) demand_def(a_ATM1,d_DATE2) -1. linkv(a_ATM1,d_DATE2) 1. fm(163_ATM1,DATE3) OBJROW 1. budget(d_DATE3) -1. fm(163_ATM1,DATE3) demand_def(a_ATM1,d_DATE3) -1. linkv(a_ATM1,d_DATE3) 1. fm(164_ATM1,DATE4) OBJROW 1. budget(d_DATE4) -1. fm(164_ATM1,DATE4) demand_def(a_ATM1,d_DATE4) -1. linkv(a_ATM1,d_DATE4) 1. fm(165_ATM1,DATE5) OBJROW 1. budget(d_DATE5) -1. fm(165_ATM1,DATE5) demand_def(a_ATM1,d_DATE5) -1. linkv(a_ATM1,d_DATE5) 1. fm(166_ATM1,DATE6) OBJROW 1. budget(d_DATE6) -1. fm(166_ATM1,DATE6) demand_def(a_ATM1,d_DATE6) -1. linkv(a_ATM1,d_DATE6) 1. fm(167_ATM1,DATE7) OBJROW 1. budget(d_DATE7) -1. fm(167_ATM1,DATE7) demand_def(a_ATM1,d_DATE7) -1. linkv(a_ATM1,d_DATE7) 1. fm(168_ATM1,DATE8) OBJROW 1. budget(d_DATE8) -1. fm(168_ATM1,DATE8) demand_def(a_ATM1,d_DATE8) -1. linkv(a_ATM1,d_DATE8) 1. fm(169_ATM1,DATE9) OBJROW 1. budget(d_DATE9) -1. fm(169_ATM1,DATE9) demand_def(a_ATM1,d_DATE9) -1. linkv(a_ATM1,d_DATE9) 1. fm(170_ATM2,DATE0) OBJROW 1. budget(d_DATE0) -1. fm(170_ATM2,DATE0) demand_def(a_ATM2,d_DATE0) -1. linkv(a_ATM2,d_DATE0) 1. fm(171_ATM2,DATE1) OBJROW 1. budget(d_DATE1) -1. fm(171_ATM2,DATE1) demand_def(a_ATM2,d_DATE1) -1. linkv(a_ATM2,d_DATE1) 1. fm(172_ATM2,DATE2) OBJROW 1. budget(d_DATE2) -1. fm(172_ATM2,DATE2) demand_def(a_ATM2,d_DATE2) -1. linkv(a_ATM2,d_DATE2) 1. fm(173_ATM2,DATE3) OBJROW 1. budget(d_DATE3) -1. fm(173_ATM2,DATE3) demand_def(a_ATM2,d_DATE3) -1. linkv(a_ATM2,d_DATE3) 1. fm(174_ATM2,DATE4) OBJROW 1. budget(d_DATE4) -1. fm(174_ATM2,DATE4) demand_def(a_ATM2,d_DATE4) -1. linkv(a_ATM2,d_DATE4) 1. fm(175_ATM2,DATE5) OBJROW 1. budget(d_DATE5) -1. fm(175_ATM2,DATE5) demand_def(a_ATM2,d_DATE5) -1. linkv(a_ATM2,d_DATE5) 1. fm(176_ATM2,DATE6) OBJROW 1. budget(d_DATE6) -1. fm(176_ATM2,DATE6) demand_def(a_ATM2,d_DATE6) -1. linkv(a_ATM2,d_DATE6) 1. fm(177_ATM2,DATE7) OBJROW 1. budget(d_DATE7) -1. fm(177_ATM2,DATE7) demand_def(a_ATM2,d_DATE7) -1. linkv(a_ATM2,d_DATE7) 1. fm(178_ATM2,DATE8) OBJROW 1. budget(d_DATE8) -1. fm(178_ATM2,DATE8) demand_def(a_ATM2,d_DATE8) -1. linkv(a_ATM2,d_DATE8) 1. fm(179_ATM2,DATE9) OBJROW 1. budget(d_DATE9) -1. fm(179_ATM2,DATE9) demand_def(a_ATM2,d_DATE9) -1. linkv(a_ATM2,d_DATE9) 1. fm(180_ATM3,DATE0) OBJROW 1. budget(d_DATE0) -1. fm(180_ATM3,DATE0) demand_def(a_ATM3,d_DATE0) -1. linkv(a_ATM3,d_DATE0) 1. fm(181_ATM3,DATE1) OBJROW 1. budget(d_DATE1) -1. fm(181_ATM3,DATE1) demand_def(a_ATM3,d_DATE1) -1. linkv(a_ATM3,d_DATE1) 1. fm(182_ATM3,DATE2) OBJROW 1. budget(d_DATE2) -1. fm(182_ATM3,DATE2) demand_def(a_ATM3,d_DATE2) -1. linkv(a_ATM3,d_DATE2) 1. fm(183_ATM3,DATE3) OBJROW 1. budget(d_DATE3) -1. fm(183_ATM3,DATE3) demand_def(a_ATM3,d_DATE3) -1. linkv(a_ATM3,d_DATE3) 1. fm(184_ATM3,DATE4) OBJROW 1. budget(d_DATE4) -1. fm(184_ATM3,DATE4) demand_def(a_ATM3,d_DATE4) -1. linkv(a_ATM3,d_DATE4) 1. fm(185_ATM3,DATE5) OBJROW 1. budget(d_DATE5) -1. fm(185_ATM3,DATE5) demand_def(a_ATM3,d_DATE5) -1. linkv(a_ATM3,d_DATE5) 1. fm(186_ATM3,DATE6) OBJROW 1. budget(d_DATE6) -1. fm(186_ATM3,DATE6) demand_def(a_ATM3,d_DATE6) -1. linkv(a_ATM3,d_DATE6) 1. fm(187_ATM3,DATE7) OBJROW 1. budget(d_DATE7) -1. fm(187_ATM3,DATE7) demand_def(a_ATM3,d_DATE7) -1. linkv(a_ATM3,d_DATE7) 1. fm(188_ATM3,DATE8) OBJROW 1. budget(d_DATE8) -1. fm(188_ATM3,DATE8) demand_def(a_ATM3,d_DATE8) -1. linkv(a_ATM3,d_DATE8) 1. fm(189_ATM3,DATE9) OBJROW 1. budget(d_DATE9) -1. fm(189_ATM3,DATE9) demand_def(a_ATM3,d_DATE9) -1. linkv(a_ATM3,d_DATE9) 1. fm(190_ATM4,DATE0) OBJROW 1. budget(d_DATE0) -1. fm(190_ATM4,DATE0) demand_def(a_ATM4,d_DATE0) -1. linkv(a_ATM4,d_DATE0) 1. fm(191_ATM4,DATE1) OBJROW 1. budget(d_DATE1) -1. fm(191_ATM4,DATE1) demand_def(a_ATM4,d_DATE1) -1. linkv(a_ATM4,d_DATE1) 1. fm(192_ATM4,DATE2) OBJROW 1. budget(d_DATE2) -1. fm(192_ATM4,DATE2) demand_def(a_ATM4,d_DATE2) -1. linkv(a_ATM4,d_DATE2) 1. fm(193_ATM4,DATE3) OBJROW 1. budget(d_DATE3) -1. fm(193_ATM4,DATE3) demand_def(a_ATM4,d_DATE3) -1. linkv(a_ATM4,d_DATE3) 1. fm(194_ATM4,DATE4) OBJROW 1. budget(d_DATE4) -1. fm(194_ATM4,DATE4) demand_def(a_ATM4,d_DATE4) -1. linkv(a_ATM4,d_DATE4) 1. fm(195_ATM4,DATE5) OBJROW 1. budget(d_DATE5) -1. fm(195_ATM4,DATE5) demand_def(a_ATM4,d_DATE5) -1. linkv(a_ATM4,d_DATE5) 1. fm(196_ATM4,DATE6) OBJROW 1. budget(d_DATE6) -1. fm(196_ATM4,DATE6) demand_def(a_ATM4,d_DATE6) -1. linkv(a_ATM4,d_DATE6) 1. fm(197_ATM4,DATE7) OBJROW 1. budget(d_DATE7) -1. fm(197_ATM4,DATE7) demand_def(a_ATM4,d_DATE7) -1. linkv(a_ATM4,d_DATE7) 1. fm(198_ATM4,DATE8) OBJROW 1. budget(d_DATE8) -1. fm(198_ATM4,DATE8) demand_def(a_ATM4,d_DATE8) -1. linkv(a_ATM4,d_DATE8) 1. fm(199_ATM4,DATE9) OBJROW 1. budget(d_DATE9) -1. fm(199_ATM4,DATE9) demand_def(a_ATM4,d_DATE9) -1. linkv(a_ATM4,d_DATE9) 1. x2(200_ATM0) demand_def(a_ATM0,d_DATE0) -1984. demand_def(a_ATM0,d_DATE1) -2530. x2(200_ATM0) demand_def(a_ATM0,d_DATE2) 67. demand_def(a_ATM0,d_DATE3) 3135. x2(200_ATM0) demand_def(a_ATM0,d_DATE4) 951. demand_def(a_ATM0,d_DATE5) -479. x2(200_ATM0) demand_def(a_ATM0,d_DATE6) -3186. demand_def(a_ATM0,d_DATE7) -341. x2(200_ATM0) demand_def(a_ATM0,d_DATE8) 643. demand_def(a_ATM0,d_DATE9) 931. x2(200_ATM0) ztox2(a_ATM0,t_1) -1. ztox3(a_ATM0,t_1) -1. x2(200_ATM0) ztox2(a_ATM0,t_2) -1. ztox3(a_ATM0,t_2) -1. x2(200_ATM0) ztox2(a_ATM0,t_3) -1. ztox3(a_ATM0,t_3) -1. x2(200_ATM0) ztox2(a_ATM0,t_4) -1. ztox3(a_ATM0,t_4) -1. x2(200_ATM0) ztox2(a_ATM0,t_5) -1. ztox3(a_ATM0,t_5) -1. x2(200_ATM0) ztox2(a_ATM0,t_6) -1. ztox3(a_ATM0,t_6) -1. x2(200_ATM0) ztox2(a_ATM0,t_7) -1. ztox3(a_ATM0,t_7) -1. x2(200_ATM0) ztox2(a_ATM0,t_8) -1. ztox3(a_ATM0,t_8) -1. x2(200_ATM0) ztox2(a_ATM0,t_9) -1. ztox3(a_ATM0,t_9) -1. x2(200_ATM0) ztox2(a_ATM0,t_10) -1. ztox3(a_ATM0,t_10) -1. x2(201_ATM1) demand_def(a_ATM1,d_DATE0) -601. demand_def(a_ATM1,d_DATE1) -618. x2(201_ATM1) demand_def(a_ATM1,d_DATE2) 610. demand_def(a_ATM1,d_DATE3) 1977. x2(201_ATM1) demand_def(a_ATM1,d_DATE4) -1566. demand_def(a_ATM1,d_DATE5) 1480. x2(201_ATM1) demand_def(a_ATM1,d_DATE6) -679. demand_def(a_ATM1,d_DATE7) -1375. x2(201_ATM1) demand_def(a_ATM1,d_DATE8) -534. demand_def(a_ATM1,d_DATE9) -157. x2(201_ATM1) ztox2(a_ATM1,t_1) -1. ztox3(a_ATM1,t_1) -1. x2(201_ATM1) ztox2(a_ATM1,t_2) -1. ztox3(a_ATM1,t_2) -1. x2(201_ATM1) ztox2(a_ATM1,t_3) -1. ztox3(a_ATM1,t_3) -1. x2(201_ATM1) ztox2(a_ATM1,t_4) -1. ztox3(a_ATM1,t_4) -1. x2(201_ATM1) ztox2(a_ATM1,t_5) -1. ztox3(a_ATM1,t_5) -1. x2(201_ATM1) ztox2(a_ATM1,t_6) -1. ztox3(a_ATM1,t_6) -1. x2(201_ATM1) ztox2(a_ATM1,t_7) -1. ztox3(a_ATM1,t_7) -1. x2(201_ATM1) ztox2(a_ATM1,t_8) -1. ztox3(a_ATM1,t_8) -1. x2(201_ATM1) ztox2(a_ATM1,t_9) -1. ztox3(a_ATM1,t_9) -1. x2(201_ATM1) ztox2(a_ATM1,t_10) -1. ztox3(a_ATM1,t_10) -1. x2(202_ATM2) demand_def(a_ATM2,d_DATE0) 691. demand_def(a_ATM2,d_DATE1) 2001. x2(202_ATM2) demand_def(a_ATM2,d_DATE2) -2626. demand_def(a_ATM2,d_DATE3) -3649. x2(202_ATM2) demand_def(a_ATM2,d_DATE4) 951. demand_def(a_ATM2,d_DATE5) 1376. x2(202_ATM2) demand_def(a_ATM2,d_DATE6) -2067. demand_def(a_ATM2,d_DATE7) -1046. x2(202_ATM2) demand_def(a_ATM2,d_DATE8) 574. demand_def(a_ATM2,d_DATE9) 1377. x2(202_ATM2) ztox2(a_ATM2,t_1) -1. ztox3(a_ATM2,t_1) -1. x2(202_ATM2) ztox2(a_ATM2,t_2) -1. ztox3(a_ATM2,t_2) -1. x2(202_ATM2) ztox2(a_ATM2,t_3) -1. ztox3(a_ATM2,t_3) -1. x2(202_ATM2) ztox2(a_ATM2,t_4) -1. ztox3(a_ATM2,t_4) -1. x2(202_ATM2) ztox2(a_ATM2,t_5) -1. ztox3(a_ATM2,t_5) -1. x2(202_ATM2) ztox2(a_ATM2,t_6) -1. ztox3(a_ATM2,t_6) -1. x2(202_ATM2) ztox2(a_ATM2,t_7) -1. ztox3(a_ATM2,t_7) -1. x2(202_ATM2) ztox2(a_ATM2,t_8) -1. ztox3(a_ATM2,t_8) -1. x2(202_ATM2) ztox2(a_ATM2,t_9) -1. ztox3(a_ATM2,t_9) -1. x2(202_ATM2) ztox2(a_ATM2,t_10) -1. ztox3(a_ATM2,t_10) -1. x2(203_ATM3) demand_def(a_ATM3,d_DATE0) -2943. demand_def(a_ATM3,d_DATE1) -93. x2(203_ATM3) demand_def(a_ATM3,d_DATE2) 451. demand_def(a_ATM3,d_DATE3) 1282. x2(203_ATM3) demand_def(a_ATM3,d_DATE4) -1251. demand_def(a_ATM3,d_DATE5) 1141. x2(203_ATM3) demand_def(a_ATM3,d_DATE6) 3214. demand_def(a_ATM3,d_DATE7) 976. x2(203_ATM3) demand_def(a_ATM3,d_DATE8) 480. demand_def(a_ATM3,d_DATE9) 2369. x2(203_ATM3) ztox2(a_ATM3,t_1) -1. ztox3(a_ATM3,t_1) -1. x2(203_ATM3) ztox2(a_ATM3,t_2) -1. ztox3(a_ATM3,t_2) -1. x2(203_ATM3) ztox2(a_ATM3,t_3) -1. ztox3(a_ATM3,t_3) -1. x2(203_ATM3) ztox2(a_ATM3,t_4) -1. ztox3(a_ATM3,t_4) -1. x2(203_ATM3) ztox2(a_ATM3,t_5) -1. ztox3(a_ATM3,t_5) -1. x2(203_ATM3) ztox2(a_ATM3,t_6) -1. ztox3(a_ATM3,t_6) -1. x2(203_ATM3) ztox2(a_ATM3,t_7) -1. ztox3(a_ATM3,t_7) -1. x2(203_ATM3) ztox2(a_ATM3,t_8) -1. ztox3(a_ATM3,t_8) -1. x2(203_ATM3) ztox2(a_ATM3,t_9) -1. ztox3(a_ATM3,t_9) -1. x2(203_ATM3) ztox2(a_ATM3,t_10) -1. ztox3(a_ATM3,t_10) -1. x2(204_ATM4) demand_def(a_ATM4,d_DATE0) -151. demand_def(a_ATM4,d_DATE1) -811. x2(204_ATM4) demand_def(a_ATM4,d_DATE2) 3310. demand_def(a_ATM4,d_DATE3) 1043. x2(204_ATM4) demand_def(a_ATM4,d_DATE4) 1789. demand_def(a_ATM4,d_DATE5) 346. x2(204_ATM4) demand_def(a_ATM4,d_DATE6) 136. demand_def(a_ATM4,d_DATE7) 1849. x2(204_ATM4) demand_def(a_ATM4,d_DATE8) 443. demand_def(a_ATM4,d_DATE9) 951. x2(204_ATM4) ztox2(a_ATM4,t_1) -1. ztox3(a_ATM4,t_1) -1. x2(204_ATM4) ztox2(a_ATM4,t_2) -1. ztox3(a_ATM4,t_2) -1. x2(204_ATM4) ztox2(a_ATM4,t_3) -1. ztox3(a_ATM4,t_3) -1. x2(204_ATM4) ztox2(a_ATM4,t_4) -1. ztox3(a_ATM4,t_4) -1. x2(204_ATM4) ztox2(a_ATM4,t_5) -1. ztox3(a_ATM4,t_5) -1. x2(204_ATM4) ztox2(a_ATM4,t_6) -1. ztox3(a_ATM4,t_6) -1. x2(204_ATM4) ztox2(a_ATM4,t_7) -1. ztox3(a_ATM4,t_7) -1. x2(204_ATM4) ztox2(a_ATM4,t_8) -1. ztox3(a_ATM4,t_8) -1. x2(204_ATM4) ztox2(a_ATM4,t_9) -1. ztox3(a_ATM4,t_9) -1. x2(204_ATM4) ztox2(a_ATM4,t_10) -1. ztox3(a_ATM4,t_10) -1. x3(205_ATM0) demand_def(a_ATM0,d_DATE0) -1045. demand_def(a_ATM0,d_DATE1) -1510. x3(205_ATM0) demand_def(a_ATM0,d_DATE2) -145. demand_def(a_ATM0,d_DATE3) -581. x3(205_ATM0) demand_def(a_ATM0,d_DATE4) -74. demand_def(a_ATM0,d_DATE5) -1121. x3(205_ATM0) demand_def(a_ATM0,d_DATE6) -757. demand_def(a_ATM0,d_DATE7) -843. x3(205_ATM0) demand_def(a_ATM0,d_DATE8) -915. demand_def(a_ATM0,d_DATE9) -43. x3(206_ATM1) demand_def(a_ATM1,d_DATE0) -1772. demand_def(a_ATM1,d_DATE1) -636. x3(206_ATM1) demand_def(a_ATM1,d_DATE2) -825. demand_def(a_ATM1,d_DATE3) -20. x3(206_ATM1) demand_def(a_ATM1,d_DATE4) -1262. demand_def(a_ATM1,d_DATE5) -976. x3(206_ATM1) demand_def(a_ATM1,d_DATE6) -632. demand_def(a_ATM1,d_DATE7) -586. x3(206_ATM1) demand_def(a_ATM1,d_DATE8) -655. demand_def(a_ATM1,d_DATE9) -859. x3(207_ATM2) demand_def(a_ATM2,d_DATE0) -1229. demand_def(a_ATM2,d_DATE1) -410. x3(207_ATM2) demand_def(a_ATM2,d_DATE2) -454. demand_def(a_ATM2,d_DATE3) -26. x3(207_ATM2) demand_def(a_ATM2,d_DATE4) -958. demand_def(a_ATM2,d_DATE5) -443. x3(207_ATM2) demand_def(a_ATM2,d_DATE6) -800. demand_def(a_ATM2,d_DATE7) -123. x3(207_ATM2) demand_def(a_ATM2,d_DATE8) -396. demand_def(a_ATM2,d_DATE9) -82. x3(208_ATM3) demand_def(a_ATM3,d_DATE0) -1593. demand_def(a_ATM3,d_DATE1) -1387. x3(208_ATM3) demand_def(a_ATM3,d_DATE2) -1785. demand_def(a_ATM3,d_DATE3) -3317. x3(208_ATM3) demand_def(a_ATM3,d_DATE4) -80. demand_def(a_ATM3,d_DATE5) -1642. x3(208_ATM3) demand_def(a_ATM3,d_DATE6) -815. demand_def(a_ATM3,d_DATE7) -99. x3(208_ATM3) demand_def(a_ATM3,d_DATE8) -242. demand_def(a_ATM3,d_DATE9) -1546. x3(209_ATM4) demand_def(a_ATM4,d_DATE0) -92. demand_def(a_ATM4,d_DATE1) -2282. x3(209_ATM4) demand_def(a_ATM4,d_DATE2) -404. demand_def(a_ATM4,d_DATE3) -504. x3(209_ATM4) demand_def(a_ATM4,d_DATE4) -549. demand_def(a_ATM4,d_DATE5) -185. x3(209_ATM4) demand_def(a_ATM4,d_DATE6) -624. demand_def(a_ATM4,d_DATE7) -2004. x3(209_ATM4) demand_def(a_ATM4,d_DATE8) -1659. demand_def(a_ATM4,d_DATE9) -1204. v(210_ATM0,DATE0) linkv(a_ATM0,d_DATE0) -780. count(a_ATM0) 1. v(211_ATM0,DATE1) linkv(a_ATM0,d_DATE1) -2351. count(a_ATM0) 1. v(212_ATM0,DATE2) linkv(a_ATM0,d_DATE2) -2288. count(a_ATM0) 1. v(213_ATM0,DATE3) linkv(a_ATM0,d_DATE3) -1357. count(a_ATM0) 1. v(214_ATM0,DATE4) linkv(a_ATM0,d_DATE4) -3637. count(a_ATM0) 1. v(215_ATM0,DATE5) linkv(a_ATM0,d_DATE5) -1371. count(a_ATM0) 1. v(216_ATM0,DATE6) linkv(a_ATM0,d_DATE6) -2225. count(a_ATM0) 1. v(217_ATM0,DATE7) linkv(a_ATM0,d_DATE7) -1721. count(a_ATM0) 1. v(218_ATM0,DATE8) linkv(a_ATM0,d_DATE8) -2110. count(a_ATM0) 1. v(219_ATM0,DATE9) linkv(a_ATM0,d_DATE9) -3118. count(a_ATM0) 1. v(220_ATM1,DATE0) linkv(a_ATM1,d_DATE0) -2830. count(a_ATM1) 1. v(221_ATM1,DATE1) linkv(a_ATM1,d_DATE1) -184. count(a_ATM1) 1. v(222_ATM1,DATE2) linkv(a_ATM1,d_DATE2) -282. count(a_ATM1) 1. v(223_ATM1,DATE3) linkv(a_ATM1,d_DATE3) -998. count(a_ATM1) 1. v(224_ATM1,DATE4) linkv(a_ATM1,d_DATE4) -3198. count(a_ATM1) 1. v(225_ATM1,DATE5) linkv(a_ATM1,d_DATE5) -3170. count(a_ATM1) 1. v(226_ATM1,DATE6) linkv(a_ATM1,d_DATE6) -2301. count(a_ATM1) 1. v(227_ATM1,DATE7) linkv(a_ATM1,d_DATE7) -719. count(a_ATM1) 1. v(228_ATM1,DATE8) linkv(a_ATM1,d_DATE8) -818. count(a_ATM1) 1. v(229_ATM1,DATE9) linkv(a_ATM1,d_DATE9) -1426. count(a_ATM1) 1. v(230_ATM2,DATE0) linkv(a_ATM2,d_DATE0) -2803. count(a_ATM2) 1. v(231_ATM2,DATE1) linkv(a_ATM2,d_DATE1) -1031. count(a_ATM2) 1. v(232_ATM2,DATE2) linkv(a_ATM2,d_DATE2) -23. count(a_ATM2) 1. v(233_ATM2,DATE3) linkv(a_ATM2,d_DATE3) -376. count(a_ATM2) 1. v(234_ATM2,DATE4) linkv(a_ATM2,d_DATE4) -541. count(a_ATM2) 1. v(235_ATM2,DATE5) linkv(a_ATM2,d_DATE5) -2195. count(a_ATM2) 1. v(236_ATM2,DATE6) linkv(a_ATM2,d_DATE6) -3676. count(a_ATM2) 1. v(237_ATM2,DATE7) linkv(a_ATM2,d_DATE7) -2475. count(a_ATM2) 1. v(238_ATM2,DATE8) linkv(a_ATM2,d_DATE8) -1232. count(a_ATM2) 1. v(239_ATM2,DATE9) linkv(a_ATM2,d_DATE9) -352. count(a_ATM2) 1. v(240_ATM3,DATE0) linkv(a_ATM3,d_DATE0) -853. count(a_ATM3) 1. v(241_ATM3,DATE1) linkv(a_ATM3,d_DATE1) -2310. count(a_ATM3) 1. v(242_ATM3,DATE2) linkv(a_ATM3,d_DATE2) -3542. count(a_ATM3) 1. v(243_ATM3,DATE3) linkv(a_ATM3,d_DATE3) -739. count(a_ATM3) 1. v(244_ATM3,DATE4) linkv(a_ATM3,d_DATE4) -1315. count(a_ATM3) 1. v(245_ATM3,DATE5) linkv(a_ATM3,d_DATE5) -2929. count(a_ATM3) 1. v(246_ATM3,DATE6) linkv(a_ATM3,d_DATE6) -2928. count(a_ATM3) 1. v(247_ATM3,DATE7) linkv(a_ATM3,d_DATE7) -2101. count(a_ATM3) 1. v(248_ATM3,DATE8) linkv(a_ATM3,d_DATE8) -3522. count(a_ATM3) 1. v(249_ATM3,DATE9) linkv(a_ATM3,d_DATE9) -319. count(a_ATM3) 1. v(250_ATM4,DATE0) linkv(a_ATM4,d_DATE0) -1184. count(a_ATM4) 1. v(251_ATM4,DATE1) linkv(a_ATM4,d_DATE1) -181. count(a_ATM4) 1. v(252_ATM4,DATE2) linkv(a_ATM4,d_DATE2) -1096. count(a_ATM4) 1. v(253_ATM4,DATE3) linkv(a_ATM4,d_DATE3) -1568. count(a_ATM4) 1. v(254_ATM4,DATE4) linkv(a_ATM4,d_DATE4) -2710. count(a_ATM4) 1. v(255_ATM4,DATE5) linkv(a_ATM4,d_DATE5) -1096. count(a_ATM4) 1. v(256_ATM4,DATE6) linkv(a_ATM4,d_DATE6) -3834. count(a_ATM4) 1. v(257_ATM4,DATE7) linkv(a_ATM4,d_DATE7) -4214. count(a_ATM4) 1. v(258_ATM4,DATE8) linkv(a_ATM4,d_DATE8) -1902. count(a_ATM4) 1. v(259_ATM4,DATE9) linkv(a_ATM4,d_DATE9) -3280. count(a_ATM4) 1. RHS RHS budget(d_DATE0) 5829. budget(d_DATE1) 9829. RHS budget(d_DATE2) 70. budget(d_DATE3) 841. RHS budget(d_DATE4) 4915. budget(d_DATE5) 1100. RHS budget(d_DATE6) 4915. budget(d_DATE7) 5622. RHS budget(d_DATE8) 6264. budget(d_DATE9) 243. RHS demand_def(a_ATM0,d_DATE0) 593. demand_def(a_ATM0,d_DATE1) -2177. RHS demand_def(a_ATM0,d_DATE2) 532. demand_def(a_ATM0,d_DATE3) 1962. RHS demand_def(a_ATM0,d_DATE4) -1590. demand_def(a_ATM0,d_DATE5) 799. RHS demand_def(a_ATM0,d_DATE6) -324. demand_def(a_ATM0,d_DATE7) -368. RHS demand_def(a_ATM0,d_DATE8) -532. demand_def(a_ATM0,d_DATE9) -1334. RHS pickone_x1(a_ATM0) 1. count(a_ATM0) 4. RHS ztox3(a_ATM0,t_1) -1. ztox3(a_ATM0,t_2) -1. RHS ztox3(a_ATM0,t_3) -1. ztox3(a_ATM0,t_4) -1. RHS ztox3(a_ATM0,t_5) -1. ztox3(a_ATM0,t_6) -1. RHS ztox3(a_ATM0,t_7) -1. ztox3(a_ATM0,t_8) -1. RHS ztox3(a_ATM0,t_9) -1. ztox3(a_ATM0,t_10) -1. RHS demand_def(a_ATM1,d_DATE0) -568. demand_def(a_ATM1,d_DATE1) 891. RHS demand_def(a_ATM1,d_DATE2) 2781. demand_def(a_ATM1,d_DATE3) 1922. RHS demand_def(a_ATM1,d_DATE4) -1703. demand_def(a_ATM1,d_DATE5) -517. RHS demand_def(a_ATM1,d_DATE6) -1402. demand_def(a_ATM1,d_DATE7) 438. RHS demand_def(a_ATM1,d_DATE8) 635. demand_def(a_ATM1,d_DATE9) 355. RHS pickone_x1(a_ATM1) 1. count(a_ATM1) 3. RHS ztox3(a_ATM1,t_1) -1. ztox3(a_ATM1,t_2) -1. RHS ztox3(a_ATM1,t_3) -1. ztox3(a_ATM1,t_4) -1. RHS ztox3(a_ATM1,t_5) -1. ztox3(a_ATM1,t_6) -1. RHS ztox3(a_ATM1,t_7) -1. ztox3(a_ATM1,t_8) -1. RHS ztox3(a_ATM1,t_9) -1. ztox3(a_ATM1,t_10) -1. RHS demand_def(a_ATM2,d_DATE0) -1935. demand_def(a_ATM2,d_DATE1) 1043. RHS demand_def(a_ATM2,d_DATE2) 771. demand_def(a_ATM2,d_DATE3) 480. RHS demand_def(a_ATM2,d_DATE4) 1669. demand_def(a_ATM2,d_DATE5) 29. RHS demand_def(a_ATM2,d_DATE6) -2933. demand_def(a_ATM2,d_DATE7) -627. RHS demand_def(a_ATM2,d_DATE8) 1009. demand_def(a_ATM2,d_DATE9) 2157. RHS pickone_x1(a_ATM2) 1. count(a_ATM2) 3. RHS ztox3(a_ATM2,t_1) -1. ztox3(a_ATM2,t_2) -1. RHS ztox3(a_ATM2,t_3) -1. ztox3(a_ATM2,t_4) -1. RHS ztox3(a_ATM2,t_5) -1. ztox3(a_ATM2,t_6) -1. RHS ztox3(a_ATM2,t_7) -1. ztox3(a_ATM2,t_8) -1. RHS ztox3(a_ATM2,t_9) -1. ztox3(a_ATM2,t_10) -1. RHS demand_def(a_ATM3,d_DATE0) -178. demand_def(a_ATM3,d_DATE1) 286. RHS demand_def(a_ATM3,d_DATE2) -2323. demand_def(a_ATM3,d_DATE3) 940. RHS demand_def(a_ATM3,d_DATE4) -130. demand_def(a_ATM3,d_DATE5) -1206. RHS demand_def(a_ATM3,d_DATE6) 469. demand_def(a_ATM3,d_DATE7) -969. RHS demand_def(a_ATM3,d_DATE8) -2804. demand_def(a_ATM3,d_DATE9) 3330. RHS pickone_x1(a_ATM3) 1. count(a_ATM3) 7. RHS ztox3(a_ATM3,t_1) -1. ztox3(a_ATM3,t_2) -1. RHS ztox3(a_ATM3,t_3) -1. ztox3(a_ATM3,t_4) -1. RHS ztox3(a_ATM3,t_5) -1. ztox3(a_ATM3,t_6) -1. RHS ztox3(a_ATM3,t_7) -1. ztox3(a_ATM3,t_8) -1. RHS ztox3(a_ATM3,t_9) -1. ztox3(a_ATM3,t_10) -1. RHS demand_def(a_ATM4,d_DATE0) -144. demand_def(a_ATM4,d_DATE1) 359. RHS demand_def(a_ATM4,d_DATE2) 2349. demand_def(a_ATM4,d_DATE3) -184. RHS demand_def(a_ATM4,d_DATE4) -55. demand_def(a_ATM4,d_DATE5) -698. RHS demand_def(a_ATM4,d_DATE6) -3187. demand_def(a_ATM4,d_DATE7) -1890. RHS demand_def(a_ATM4,d_DATE8) 1647. demand_def(a_ATM4,d_DATE9) 233. RHS pickone_x1(a_ATM4) 1. count(a_ATM4) 5. RHS ztox3(a_ATM4,t_1) -1. ztox3(a_ATM4,t_2) -1. RHS ztox3(a_ATM4,t_3) -1. ztox3(a_ATM4,t_4) -1. RHS ztox3(a_ATM4,t_5) -1. ztox3(a_ATM4,t_6) -1. RHS ztox3(a_ATM4,t_7) -1. ztox3(a_ATM4,t_8) -1. RHS ztox3(a_ATM4,t_9) -1. ztox3(a_ATM4,t_10) -1. BOUNDS BV BOUND x1(0_ATM0,1) 1. BV BOUND x1(1_ATM0,2) 1. BV BOUND x1(2_ATM0,3) 1. BV BOUND x1(3_ATM0,4) 1. BV BOUND x1(4_ATM0,5) 1. BV BOUND x1(5_ATM0,6) 1. BV BOUND x1(6_ATM0,7) 1. BV BOUND x1(7_ATM0,8) 1. BV BOUND x1(8_ATM0,9) 1. BV BOUND x1(9_ATM0,10) 1. BV BOUND x1(10_ATM1,1) 1. BV BOUND x1(11_ATM1,2) 1. BV BOUND x1(12_ATM1,3) 1. BV BOUND x1(13_ATM1,4) 1. BV BOUND x1(14_ATM1,5) 1. BV BOUND x1(15_ATM1,6) 1. BV BOUND x1(16_ATM1,7) 1. BV BOUND x1(17_ATM1,8) 1. BV BOUND x1(18_ATM1,9) 1. BV BOUND x1(19_ATM1,10) 1. BV BOUND x1(20_ATM2,1) 1. BV BOUND x1(21_ATM2,2) 1. BV BOUND x1(22_ATM2,3) 1. BV BOUND x1(23_ATM2,4) 1. BV BOUND x1(24_ATM2,5) 1. BV BOUND x1(25_ATM2,6) 1. BV BOUND x1(26_ATM2,7) 1. BV BOUND x1(27_ATM2,8) 1. BV BOUND x1(28_ATM2,9) 1. BV BOUND x1(29_ATM2,10) 1. BV BOUND x1(30_ATM3,1) 1. BV BOUND x1(31_ATM3,2) 1. BV BOUND x1(32_ATM3,3) 1. BV BOUND x1(33_ATM3,4) 1. BV BOUND x1(34_ATM3,5) 1. BV BOUND x1(35_ATM3,6) 1. BV BOUND x1(36_ATM3,7) 1. BV BOUND x1(37_ATM3,8) 1. BV BOUND x1(38_ATM3,9) 1. BV BOUND x1(39_ATM3,10) 1. BV BOUND x1(40_ATM4,1) 1. BV BOUND x1(41_ATM4,2) 1. BV BOUND x1(42_ATM4,3) 1. BV BOUND x1(43_ATM4,4) 1. BV BOUND x1(44_ATM4,5) 1. BV BOUND x1(45_ATM4,6) 1. BV BOUND x1(46_ATM4,7) 1. BV BOUND x1(47_ATM4,8) 1. BV BOUND x1(48_ATM4,9) 1. BV BOUND x1(49_ATM4,10) 1. UP BOUND z(50_ATM0,1) 1. UP BOUND z(51_ATM0,2) 1. UP BOUND z(52_ATM0,3) 1. UP BOUND z(53_ATM0,4) 1. UP BOUND z(54_ATM0,5) 1. UP BOUND z(55_ATM0,6) 1. UP BOUND z(56_ATM0,7) 1. UP BOUND z(57_ATM0,8) 1. UP BOUND z(58_ATM0,9) 1. UP BOUND z(59_ATM0,10) 1. UP BOUND z(60_ATM1,1) 1. UP BOUND z(61_ATM1,2) 1. UP BOUND z(62_ATM1,3) 1. UP BOUND z(63_ATM1,4) 1. UP BOUND z(64_ATM1,5) 1. UP BOUND z(65_ATM1,6) 1. UP BOUND z(66_ATM1,7) 1. UP BOUND z(67_ATM1,8) 1. UP BOUND z(68_ATM1,9) 1. UP BOUND z(69_ATM1,10) 1. UP BOUND z(70_ATM2,1) 1. UP BOUND z(71_ATM2,2) 1. UP BOUND z(72_ATM2,3) 1. UP BOUND z(73_ATM2,4) 1. UP BOUND z(74_ATM2,5) 1. UP BOUND z(75_ATM2,6) 1. UP BOUND z(76_ATM2,7) 1. UP BOUND z(77_ATM2,8) 1. UP BOUND z(78_ATM2,9) 1. UP BOUND z(79_ATM2,10) 1. UP BOUND z(80_ATM3,1) 1. UP BOUND z(81_ATM3,2) 1. UP BOUND z(82_ATM3,3) 1. UP BOUND z(83_ATM3,4) 1. UP BOUND z(84_ATM3,5) 1. UP BOUND z(85_ATM3,6) 1. UP BOUND z(86_ATM3,7) 1. UP BOUND z(87_ATM3,8) 1. UP BOUND z(88_ATM3,9) 1. UP BOUND z(89_ATM3,10) 1. UP BOUND z(90_ATM4,1) 1. UP BOUND z(91_ATM4,2) 1. UP BOUND z(92_ATM4,3) 1. UP BOUND z(93_ATM4,4) 1. UP BOUND z(94_ATM4,5) 1. UP BOUND z(95_ATM4,6) 1. UP BOUND z(96_ATM4,7) 1. UP BOUND z(97_ATM4,8) 1. UP BOUND z(98_ATM4,9) 1. UP BOUND z(99_ATM4,10) 1. UP BOUND fm(150_ATM0,DATE0) 780. UP BOUND fm(151_ATM0,DATE1) 2351. UP BOUND fm(152_ATM0,DATE2) 2288. UP BOUND fm(153_ATM0,DATE3) 1357. UP BOUND fm(154_ATM0,DATE4) 3637. UP BOUND fm(155_ATM0,DATE5) 1371. UP BOUND fm(156_ATM0,DATE6) 2225. UP BOUND fm(157_ATM0,DATE7) 1721. UP BOUND fm(158_ATM0,DATE8) 2110. UP BOUND fm(159_ATM0,DATE9) 3118. UP BOUND fm(160_ATM1,DATE0) 2830. UP BOUND fm(161_ATM1,DATE1) 184. UP BOUND fm(162_ATM1,DATE2) 282. UP BOUND fm(163_ATM1,DATE3) 998. UP BOUND fm(164_ATM1,DATE4) 3198. UP BOUND fm(165_ATM1,DATE5) 3170. UP BOUND fm(166_ATM1,DATE6) 2301. UP BOUND fm(167_ATM1,DATE7) 719. UP BOUND fm(168_ATM1,DATE8) 818. UP BOUND fm(169_ATM1,DATE9) 1426. UP BOUND fm(170_ATM2,DATE0) 2803. UP BOUND fm(171_ATM2,DATE1) 1031. UP BOUND fm(172_ATM2,DATE2) 23. UP BOUND fm(173_ATM2,DATE3) 376. UP BOUND fm(174_ATM2,DATE4) 541. UP BOUND fm(175_ATM2,DATE5) 2195. UP BOUND fm(176_ATM2,DATE6) 3676. UP BOUND fm(177_ATM2,DATE7) 2475. UP BOUND fm(178_ATM2,DATE8) 1232. UP BOUND fm(179_ATM2,DATE9) 352. UP BOUND fm(180_ATM3,DATE0) 853. UP BOUND fm(181_ATM3,DATE1) 2310. UP BOUND fm(182_ATM3,DATE2) 3542. UP BOUND fm(183_ATM3,DATE3) 739. UP BOUND fm(184_ATM3,DATE4) 1315. UP BOUND fm(185_ATM3,DATE5) 2929. UP BOUND fm(186_ATM3,DATE6) 2928. UP BOUND fm(187_ATM3,DATE7) 2101. UP BOUND fm(188_ATM3,DATE8) 3522. UP BOUND fm(189_ATM3,DATE9) 319. UP BOUND fm(190_ATM4,DATE0) 1184. UP BOUND fm(191_ATM4,DATE1) 181. UP BOUND fm(192_ATM4,DATE2) 1096. UP BOUND fm(193_ATM4,DATE3) 1568. UP BOUND fm(194_ATM4,DATE4) 2710. UP BOUND fm(195_ATM4,DATE5) 1096. UP BOUND fm(196_ATM4,DATE6) 3834. UP BOUND fm(197_ATM4,DATE7) 4214. UP BOUND fm(198_ATM4,DATE8) 1902. UP BOUND fm(199_ATM4,DATE9) 3280. UP BOUND x2(200_ATM0) 1. UP BOUND x2(201_ATM1) 1. UP BOUND x2(202_ATM2) 1. UP BOUND x2(203_ATM3) 1. UP BOUND x2(204_ATM4) 1. UP BOUND x3(205_ATM0) 1000. UP BOUND x3(206_ATM1) 1000. UP BOUND x3(207_ATM2) 1000. UP BOUND x3(208_ATM3) 1000. UP BOUND x3(209_ATM4) 1000. BV BOUND v(210_ATM0,DATE0) 1. BV BOUND v(211_ATM0,DATE1) 1. BV BOUND v(212_ATM0,DATE2) 1. BV BOUND v(213_ATM0,DATE3) 1. BV BOUND v(214_ATM0,DATE4) 1. BV BOUND v(215_ATM0,DATE5) 1. BV BOUND v(216_ATM0,DATE6) 1. BV BOUND v(217_ATM0,DATE7) 1. BV BOUND v(218_ATM0,DATE8) 1. BV BOUND v(219_ATM0,DATE9) 1. BV BOUND v(220_ATM1,DATE0) 1. BV BOUND v(221_ATM1,DATE1) 1. BV BOUND v(222_ATM1,DATE2) 1. BV BOUND v(223_ATM1,DATE3) 1. BV BOUND v(224_ATM1,DATE4) 1. BV BOUND v(225_ATM1,DATE5) 1. BV BOUND v(226_ATM1,DATE6) 1. BV BOUND v(227_ATM1,DATE7) 1. BV BOUND v(228_ATM1,DATE8) 1. BV BOUND v(229_ATM1,DATE9) 1. BV BOUND v(230_ATM2,DATE0) 1. BV BOUND v(231_ATM2,DATE1) 1. BV BOUND v(232_ATM2,DATE2) 1. BV BOUND v(233_ATM2,DATE3) 1. BV BOUND v(234_ATM2,DATE4) 1. BV BOUND v(235_ATM2,DATE5) 1. BV BOUND v(236_ATM2,DATE6) 1. BV BOUND v(237_ATM2,DATE7) 1. BV BOUND v(238_ATM2,DATE8) 1. BV BOUND v(239_ATM2,DATE9) 1. BV BOUND v(240_ATM3,DATE0) 1. BV BOUND v(241_ATM3,DATE1) 1. BV BOUND v(242_ATM3,DATE2) 1. BV BOUND v(243_ATM3,DATE3) 1. BV BOUND v(244_ATM3,DATE4) 1. BV BOUND v(245_ATM3,DATE5) 1. BV BOUND v(246_ATM3,DATE6) 1. BV BOUND v(247_ATM3,DATE7) 1. BV BOUND v(248_ATM3,DATE8) 1. BV BOUND v(249_ATM3,DATE9) 1. BV BOUND v(250_ATM4,DATE0) 1. BV BOUND v(251_ATM4,DATE1) 1. BV BOUND v(252_ATM4,DATE2) 1. BV BOUND v(253_ATM4,DATE3) 1. BV BOUND v(254_ATM4,DATE4) 1. BV BOUND v(255_ATM4,DATE5) 1. BV BOUND v(256_ATM4,DATE6) 1. BV BOUND v(257_ATM4,DATE7) 1. BV BOUND v(258_ATM4,DATE8) 1. BV BOUND v(259_ATM4,DATE9) 1. ENDATA DyLP-1.10.4/Data/Sample/block_milp.lp0000644000175200017520000000365212452373145015631 0ustar coincoin\* MILP *\ Minimize Objective: - 20 x_1.0 - 7 x_10.0 - 4 x_11.0 - 9 x_12.0 - 8 x_13.0 - 2 x_14.0 - 3 x_15.0 - 8 x_16.0 - 8 x_17.0 - 7 x_18.0 - 2 x_19.0 - 4 x_2.0 - 10 x_20.0 - x_21.0 - 10 x_22.0 - 8 x_23.0 - 6 x_24.0 - 9 x_25.0 - 5 x_26.0 - 3 x_27.0 - 8 x_28.0 - 5 x_29.0 - 3 x_3.0 - 9 x_30.0 - 7 x_31.0 - 2 x_32.0 - 2 x_33.0 - 6 x_34.0 - 10 x_35.0 - 5 x_36.0 - 6 x_37.0 - 3 x_38.0 - 7 x_39.0 - x_4.0 - 6 x_40.0 - 4 x_5.0 - 8 x_6.0 - 2 x_7.0 - 10 x_8.0 - 5 x_9.0 Subject To C_1.0: 2 x_11.0 + 8 x_13.0 + 10 x_20.0 + x_22.0 + 2 x_32.0 + 2 x_33.0 + 2 x_34.0 + 5 x_37.0 + 5 x_7.0 + 7 x_8.0 + 6 x_9.0 <= 10 C_2.0: x_13.0 + 8 x_2.0 + x_28.0 + 10 x_3.0 + 10 x_30.0 + 4 x_36.0 + 3 x_38.0 + 9 x_7.0 <= 9 C_3.0: 7 x_1.0 + 6 x_17.0 + 7 x_19.0 + 3 x_23.0 + 6 x_4.0 <= 7 C_4.0: 3 x_16.0 + 4 x_29.0 + 8 x_3.0 + 10 x_34.0 + 3 x_37.0 + 8 x_40.0 <= 11 C_5.0_1.0: 5 x_32.0 + 2 x_34.0 + 2 x_37.0 <= 4 C_6.0_1.0: 4 x_33.0 + 4 x_38.0 + 3 x_39.0 <= 5 C_7.0_1.0: 4 x_31.0 + 5 x_35.0 + 2 x_36.0 + 3 x_40.0 <= 6 C_8.0_2.0: 5 x_24.0 + 7 x_30.0 <= 5 C_9.0_2.0: 6 x_22.0 + 3 x_23.0 + 6 x_28.0 <= 5 C_10.0_2.0: 10 x_22.0 + 6 x_24.0 + 4 x_26.0 <= 5 C_11.0_2.0: 9 x_23.0 + 4 x_25.0 + 7 x_27.0 <= 4 C_12.0_2.0: 4 x_22.0 + 8 x_24.0 + 2 x_30.0 <= 5 C_13.0_3.0: 3 x_15.0 + x_21.0 <= 5 C_14.0_3.0: 5 x_16.0 + 5 x_19.0 <= 4 C_15.0_3.0: 3 x_17.0 + 4 x_20.0 <= 4 C_16.0_3.0: 7 x_16.0 + 10 x_18.0 <= 5 C_17.0_4.0: 3 x_11.0 + 6 x_14.0 + 2 x_6.0 + 3 x_9.0 <= 5 C_18.0_4.0: 5 x_3.0 + 7 x_5.0 + x_9.0 <= 5 C_19.0_4.0: 5 x_11.0 + 7 x_12.0 + 10 x_14.0 + 7 x_2.0 + 10 x_4.0 + x_8.0 <= 5 C_20.0_4.0: 2 x_10.0 + 5 x_11.0 + 5 x_13.0 + 2 x_7.0 <= 4 Binaries x_1.0 x_10.0 x_11.0 x_12.0 x_13.0 x_14.0 x_15.0 x_16.0 x_17.0 x_18.0 x_19.0 x_2.0 x_20.0 x_21.0 x_22.0 x_23.0 x_24.0 x_25.0 x_26.0 x_27.0 x_28.0 x_29.0 x_3.0 x_30.0 x_31.0 x_32.0 x_33.0 x_34.0 x_35.0 x_36.0 x_37.0 x_38.0 x_39.0 x_4.0 x_40.0 x_5.0 x_6.0 x_7.0 x_8.0 x_9.0 End DyLP-1.10.4/Data/Sample/depcomp0000755000175200017520000003710011405216230014515 0ustar coincoin#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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 outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac 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" # 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 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. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## 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). ## - 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 -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## 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. tr ' ' ' ' < "$tmpdepfile" | ## 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. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -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 -eq 0; then : else 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 ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; 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. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else 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" ;; 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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in 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.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #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 $1 != '--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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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 $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac 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. -*|$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" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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 $1 != '--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, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; 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-end: "$" # End: DyLP-1.10.4/Data/Sample/conic.mps0000644000175200017520000000334312223473003014760 0ustar coincoinNAME ROWS N obj L c1 COLUMNS x0 obj 1 c1 1 INT 'MARKER' 'INTORG' x1 obj -1 c1 10 INT 'MARKER' 'INTEND' * S1 NAME1 'MARKER' 'SOSORG' x2 obj -9 c1 5 x3 obj -6 c1 8 * NAME1 'MARKER' 'SOSEND' x4 obj 1 c1 1 x5 obj -6 c1 8 x6 obj 1 c1 1 x7 obj 1 c1 1 x8 obj -6 c1 8 x9 obj -2 c1 1 x10 obj -3 c1 1 x11 obj -1 c1 -1 x12 obj -2 c1 1 x13 obj -3 c1 1 x14 obj -9 c1 5 RHS rhs c1 10000 RANGES range c1 2000 BOUNDS LI BOUND x1 2 UI BOUND x1 3 SOS S1 set1 x2 x3 S2 set2 x4 20 x5 40 QUADOBJ x6 x6 1 x6 x7 2 x7 x7 7 CSECTION cone1 0.0 QUAD x8 x9 x10 CSECTION cone2 0.0 RQUAD x11 x12 x13 x14 ENDATA DyLP-1.10.4/Data/Sample/config.guess0000755000175200017520000012706311405216230015470 0ustar coincoin#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-05-17' # 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 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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 Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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 # 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 tupples: *-*-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 __ELF__ >/dev/null 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 ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-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'` exit ;; 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-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-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-unknown-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 ;; 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:SunOS:5.*:* | ix86xen:SunOS:5.*:*) echo i386-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-unknown-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:*:[45]) 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 __LP64__ >/dev/null 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}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-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-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-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-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu 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 ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${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-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa:Linux:*:*) echo xtensa-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; 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}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-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}-unknown-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 i386. echo i386-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-unknown-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; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-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-unknown-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 ;; 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 case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac 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 ;; 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}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-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-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-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 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 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: DyLP-1.10.4/Data/Sample/coindatasample.pc.in0000644000175200017520000000026711507632611017071 0ustar coincoinprefix=@prefix@ datadir=@datadir@/coin/Data/Sample Name: Sample Description: Sample models URL: https://projects.coin-or.org/svn/Data/Sample Version: @PACKAGE_VERSION@ Libs: Cflags: DyLP-1.10.4/Data/Sample/retail3.block0000644000175200017520000000266012136243266015535 0ustar coincoin0 3 0 53 0 103 0 153 1 4 1 54 1 104 1 154 2 5 2 55 2 105 2 155 3 6 3 56 3 106 3 156 4 7 4 57 4 107 4 157 5 8 5 58 5 108 5 158 6 9 6 59 6 109 6 159 7 10 7 60 7 110 7 160 8 11 8 61 8 111 8 161 9 12 9 62 9 112 9 162 10 13 10 63 10 113 10 163 11 14 11 64 11 114 11 164 12 15 12 65 12 115 12 165 13 16 13 66 13 116 13 166 14 17 14 67 14 117 14 167 15 18 15 68 15 118 15 168 16 19 16 69 16 119 16 169 17 20 17 70 17 120 17 170 18 21 18 71 18 121 18 171 19 22 19 72 19 122 19 172 20 23 20 73 20 123 20 173 21 24 21 74 21 124 21 174 22 25 22 75 22 125 22 175 23 26 23 76 23 126 23 176 24 27 24 77 24 127 24 177 25 28 25 78 25 128 25 178 26 29 26 79 26 129 26 179 27 30 27 80 27 130 27 180 28 31 28 81 28 131 28 181 29 32 29 82 29 132 29 182 30 33 30 83 30 133 30 183 31 34 31 84 31 134 31 184 32 35 32 85 32 135 32 185 33 36 33 86 33 136 33 186 34 37 34 87 34 137 34 187 35 38 35 88 35 138 35 188 36 39 36 89 36 139 36 189 37 40 37 90 37 140 37 190 38 41 38 91 38 141 38 191 39 42 39 92 39 142 39 192 40 43 40 93 40 143 40 193 41 44 41 94 41 144 41 194 42 45 42 95 42 145 42 195 43 46 43 96 43 146 43 196 44 47 44 97 44 147 44 197 45 48 45 98 45 148 45 198 46 49 46 99 46 149 46 199 47 50 47 100 47 150 47 200 48 51 48 101 48 151 48 201 49 52 49 102 49 152 49 202 DyLP-1.10.4/Data/Sample/bug.stoch0000755000175200017520000000060511015552002014757 0ustar coincoinNAME BUG SCENARIOS DISCRETE REPLACE SC SCEN01 ROOT 0.500 STG02 RHS C1 1.000 RHS C2 1.000 RHS C3 0.000 SC SCEN02 ROOT 0.500 STG02 RHS C1 0.000 RHS C2 1.000 RHS C3 0.000 ENDATA DyLP-1.10.4/Data/Sample/pack1.mps0000644000175200017520000000312110430174061014656 0ustar coincoin************************************************************************ * * The data in this file represents a tiny covering problem: * * Minimize or maximize Z = x1 + x2 + x3 * * Subject to: * * 1.0 <= x1 + x2 * 1.0 <= x2 + x3 * 1.0 <= x1 x3 * * where all variables are binary. * ************************************************************************ NAME EXAMPLE ROWS N OBJ G ROW01 G ROW02 G ROW03 COLUMNS INT1 'MARKER' 'INTORG' COL01 OBJ 1.0 COL01 ROW01 1.0 ROW03 1.0 COL02 OBJ 1.0 COL02 ROW01 1.0 ROW02 1.0 COL03 OBJ 1.0 COL03 ROW02 1.0 ROW03 1.0 INT1END 'MARKER' 'INTEND' RHS RHS1 ROW01 1.0 RHS1 ROW02 1.0 RHS1 ROW03 1.0 ENDATA DyLP-1.10.4/Data/Sample/ltmain.sh0000755000175200017520000057753011405216230015003 0ustar coincoin# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 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 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # 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. basename="s,^.*/,,g" # 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" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" # 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 # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # 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 "$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" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # 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. func_win32_libid () { 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 if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $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_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 () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done 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 "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # 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. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # 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 $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi 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 my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do 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 have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2005 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --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 $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # 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= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # 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= 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) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$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,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$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. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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 $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) 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 "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 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 $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "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." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </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." $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 $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </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." $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 $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built fi 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 case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$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 dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= 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 compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes 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 $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" 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*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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*) # 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 deplibs="$deplibs -framework System" 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 deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -pg pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ -t[45]*|-txscale*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 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*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # 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 ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" 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. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'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\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; 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 test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$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 test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$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 case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; 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 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 "$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) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; 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 (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac 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 ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." 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 -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; 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 newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` 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 used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi 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. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # 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 case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$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 $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE 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. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$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 $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$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 notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi 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 newlib_search_path="$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*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test 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 test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$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 -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 *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if 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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; 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*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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 "$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 module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; 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 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; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$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 $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$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:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; 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:"*) ;; *) finalize_shlibpath="$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 [\\/]*) add_dir="$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*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$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" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared 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 "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs 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 "*) ;; *) lib_search_path="$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 "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$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 tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" 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 if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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="$2" number_minor="$3" number_revision="$4" # # 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 darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; 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]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE 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 major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` 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 iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` 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 iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; 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 $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$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) ;; $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 removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` dependency_libs=`$echo "$dependency_libs " | ${SED} -e "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 temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 "*) ;; *) dlfiles="$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 "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-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 deplibs="$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. $rm conftest.c cat > conftest.c </dev/null` 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$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 newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e '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 "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $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 fi ;; 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 is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; 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 # 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$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 if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$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 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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$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" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$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 "$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 realname="$2" shift; 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 linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "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"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $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:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # 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 output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$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. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 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~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "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" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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\" 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 # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(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 "$mode" = relink; then $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 $show "${rm}r $gentop" $run ${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 $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run 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 "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $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 wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${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" # $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" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$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 "*) ;; *) finalize_rpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$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 "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # 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/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= 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*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; 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 "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" 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 rpath="$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 rpath="$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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? 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" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e '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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` 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 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #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 # 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 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ 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; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); 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 ("getcwd failed"); 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 ("getcwd failed"); 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 * 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; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # 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 variable: 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 echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ 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 >> $output "\ # 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 $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE 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 $EXIT_FAILURE fi fi\ " chmod +x $output fi 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" 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" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$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 # 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 $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_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 for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$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= 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 save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; 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 "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then 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) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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' # Libraries that this one depends upon. dependency_libs='$dependency_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 fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # 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. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; 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. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$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 "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. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi 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 $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run 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 if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run 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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` 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 file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "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) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $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" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 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 -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # 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 ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" 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) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; 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 (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$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 rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [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 --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information 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. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [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: $modename [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 -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking 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: $modename [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: $modename [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: $modename [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 rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [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 -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 -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] 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: $modename [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." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # 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 disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: DyLP-1.10.4/Data/Sample/config.sub0000755000175200017520000007772611405216230015145 0ustar coincoin#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-04-29' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # 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 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # 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. # 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) 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) os= basic_machine=$1 ;; -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*) 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 \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | 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 | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-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-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | 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-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | 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-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # 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 ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; 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 ;; cr16c) basic_machine=cr16c-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 ;; 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'm not sure what "Sysv32" means. Should this be sysv3.2? 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 ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; 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-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; 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 ;; 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 ;; 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) basic_machine=powerpc-unknown ;; ppc-*) 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) 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 ;; 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 ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; 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 ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-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[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. -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* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -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* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -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*) # 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 ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -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 ;; # 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 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) 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 ;; -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: DyLP-1.10.4/Data/Sample/afiro.mps0000644000175200017520000000637710662211140014774 0ustar coincoinNAME AFIRO ROWS E R09 E R10 L X05 L X21 E R12 E R13 L X17 L X18 L X19 L X20 E R19 E R20 L X27 L X44 E R22 E R23 L X40 L X41 L X42 L X43 L X45 L X46 L X47 L X48 L X49 L X50 L X51 N COST COLUMNS X01 X48 .301 R09 -1. X01 R10 -1.06 X05 1. X02 X21 -1. R09 1. X02 COST -.4 X03 X46 -1. R09 1. X04 X50 1. R10 1. X06 X49 .301 R12 -1. X06 R13 -1.06 X17 1. X07 X49 .313 R12 -1. X07 R13 -1.06 X18 1. X08 X49 .313 R12 -1. X08 R13 -.96 X19 1. X09 X49 .326 R12 -1. X09 R13 -.86 X20 1. X10 X45 2.364 X17 -1. X11 X45 2.386 X18 -1. X12 X45 2.408 X19 -1. X13 X45 2.429 X20 -1. X14 X21 1.4 R12 1. X14 COST -.32 X15 X47 -1. R12 1. X16 X51 1. R13 1. X22 X46 .109 R19 -1. X22 R20 -.43 X27 1. X23 X44 -1. R19 1. X23 COST -.6 X24 X48 -1. R19 1. X25 X45 -1. R19 1. X26 X50 1. R20 1. X28 X47 .109 R22 -.43 X28 R23 1. X40 1. X29 X47 .108 R22 -.43 X29 R23 1. X41 1. X30 X47 .108 R22 -.39 X30 R23 1. X42 1. X31 X47 .107 R22 -.37 X31 R23 1. X43 1. X32 X45 2.191 X40 -1. X33 X45 2.219 X41 -1. X34 X45 2.249 X42 -1. X35 X45 2.279 X43 -1. X36 X44 1.4 R23 -1. X36 COST -.48 X37 X49 -1. R23 1. X38 X51 1. R22 1. X39 R23 1. COST 10. RHS B X50 310. X51 300. B X05 80. X17 80. B X27 500. R23 44. B X40 500. ENDATA DyLP-1.10.4/Data/Sample/app0110.stoch0000755000175200017520000001170711015552002015271 0ustar coincoinNAME APP SCENARIOS DISCRETE ADD SC SCEN01 ROOT 0.111 STAGE-2 RHS D00102 -0.667 RHS D00202 -0.667 RHS D00302 -0.667 RHS D00402 -1.333 RHS D00103 0.333 RHS D00203 -1.000 RHS D00303 0.000 RHS D00403 -1.000 RHS D00104 1.333 RHS D00204 -1.667 RHS D00304 1.333 RHS D00404 -0.667 RHS D00105 2.333 RHS D00205 -1.333 RHS D00305 2.667 RHS D00405 -0.333 SC SCEN02 SCEN01 0.111 STAGE-3 RHS D00103 -0.667 RHS D00203 1.000 RHS D00303 0.000 RHS D00403 0.000 RHS D00104 -0.667 RHS D00204 -0.667 RHS D00304 -0.667 RHS D00404 0.333 RHS D00105 -0.667 RHS D00205 -1.333 RHS D00305 -1.333 RHS D00405 0.667 SC SCEN03 SCEN01 0.111 STAGE-3 RHS D00103 0.333 RHS D00203 0.000 RHS D00303 0.000 RHS D00403 1.000 RHS D00104 -0.667 RHS D00204 2.333 RHS D00304 -0.667 RHS D00404 0.333 RHS D00105 -1.667 RHS D00205 2.667 RHS D00305 -1.333 RHS D00405 -0.333 SC SCEN04 ROOT 0.111 STAGE-2 RHS D00102 -0.667 RHS D00202 0.333 RHS D00302 -0.667 RHS D00402 -0.333 RHS D00103 0.333 RHS D00203 -1.000 RHS D00303 0.000 RHS D00403 -1.000 RHS D00104 1.333 RHS D00204 -1.667 RHS D00304 1.333 RHS D00404 -0.667 RHS D00105 2.333 RHS D00205 -1.333 RHS D00305 2.667 RHS D00405 -0.333 SC SCEN05 SCEN04 0.111 STAGE-3 RHS D00103 -0.667 RHS D00203 1.000 RHS D00303 0.000 RHS D00403 0.000 RHS D00104 -0.667 RHS D00204 -0.667 RHS D00304 -0.667 RHS D00404 0.333 RHS D00105 -0.667 RHS D00205 -1.333 RHS D00305 -1.333 RHS D00405 0.667 SC SCEN06 SCEN04 0.111 STAGE-3 RHS D00103 0.333 RHS D00203 0.000 RHS D00303 0.000 RHS D00403 1.000 RHS D00104 -0.667 RHS D00204 2.333 RHS D00304 -0.667 RHS D00404 0.333 RHS D00105 -1.667 RHS D00205 2.667 RHS D00305 -1.333 RHS D00405 -0.333 SC SCEN07 ROOT 0.111 STAGE-2 RHS D00102 1.333 RHS D00202 0.333 RHS D00302 1.333 RHS D00402 1.667 RHS D00103 0.333 RHS D00203 -1.000 RHS D00303 0.000 RHS D00403 -1.000 RHS D00104 1.333 RHS D00204 -1.667 RHS D00304 1.333 RHS D00404 -0.667 RHS D00105 2.333 RHS D00205 -1.333 RHS D00305 2.667 RHS D00405 -0.333 SC SCEN08 SCEN07 0.111 STAGE-3 RHS D00103 -0.667 RHS D00203 1.000 RHS D00303 0.000 RHS D00403 0.000 RHS D00104 -0.667 RHS D00204 -0.667 RHS D00304 -0.667 RHS D00404 0.333 RHS D00105 -0.667 RHS D00205 -1.333 RHS D00305 -1.333 RHS D00405 0.667 SC SCEN09 SCEN07 0.111 STAGE-3 RHS D00103 0.333 RHS D00203 0.000 RHS D00303 0.000 RHS D00403 1.000 RHS D00104 -0.667 RHS D00204 2.333 RHS D00304 -0.667 RHS D00404 0.333 RHS D00105 -1.667 RHS D00205 2.667 RHS D00305 -1.333 RHS D00405 -0.333 ENDATA DyLP-1.10.4/Data/Sample/exmip1.mps0000644000175200017520000001304610430174061015071 0ustar coincoin************************************************************************ * * The data in this file represents the following problem: * * Minimize or maximize Z = x1 + 2x5 - x8 * * Subject to: * * 2.5 <= 3x1 + x2 - 2x4 - x5 - x8 * 2x2 + 1.1x3 <= 2.1 * x3 + x6 = 4.0 * 1.8 <= 2.8x4 -1.2x7 <= 5.0 * 3.0 <= 5.6x1 + x5 + 1.9x8 <= 15.0 * * where: * * 2.5 <= x1 * 0 <= x2 <= 4.1 * 0 <= x3 * 0 <= x4 * 0.5 <= x5 <= 4.0 * 0 <= x6 * 0 <= x7 * 0 <= x8 <= 4.3 * * x3, x4 are 0,1 variables. * ************************************************************************ NAME EXAMPLE ROWS N OBJ G ROW01 L ROW02 E ROW03 G ROW04 L ROW05 COLUMNS COL01 OBJ 1.0 COL01 ROW01 3.0 ROW05 5.6 COL02 ROW01 1.0 ROW02 2.0 * * Mark COL03 and COL04 as integer variables. * INT1 'MARKER' 'INTORG' COL03 ROW02 1.1 ROW03 1.0 COL04 ROW01 -2.0 ROW04 2.8 INT1END 'MARKER' 'INTEND' * COL05 OBJ 2.0 COL05 ROW01 -1.0 ROW05 1.0 COL06 ROW03 1.0 COL07 ROW04 -1.2 COL08 OBJ -1.0 COL08 ROW01 -1.0 ROW05 1.9 RHS RHS1 ROW01 2.5 RHS1 ROW02 2.1 RHS1 ROW03 4.0 RHS1 ROW04 1.8 RHS1 ROW05 15.0 RANGES RNG1 ROW04 3.2 RNG1 ROW05 12.0 BOUNDS LO BND1 COL01 2.5 UP BND1 COL02 4.1 LO BND1 COL05 0.5 UP BND1 COL05 4.0 UP BND1 COL08 4.3 ENDATA DyLP-1.10.4/Data/Sample/p0033.mps0000644000175200017520000001463310430174061014436 0ustar coincoin*NAME: p0033 *ROWS: 16 *COLUMNS: 33 *INTEGER: 33 *NONZERO: 98 *BEST SOLN: 3089 (opt) *LP SOLN: 2520.57 *SOURCE: Crowder-Johnson-Padberg test set * * E. Andrew Boyd (Rice University) *APPLICATION: unknown *COMMENTS: pure 0/1 IP * 5 SOS constraints * NAME P0033 ROWS N R100 L R114 L R115 L R116 L R117 L R118 L R119 L R120 L R121 L R122 L R123 L R124 L R125 L R126 L R127 L R128 L ZBESTROW COLUMNS MARK0000 'MARKER' 'INTORG' C157 R100 171 R114 1 C157 R122 -300 R123 -300 C158 R100 171 R114 1 C158 R126 -300 R127 -300 C159 R100 171 R114 1 C159 R119 300 R120 -300 C159 R123 -300 C160 R100 171 R114 1 C160 R119 300 R120 -300 C160 R121 -300 C161 R100 163 R115 1 C161 R119 285 R120 -285 C161 R124 -285 R125 -285 C162 R100 162 R115 1 C162 R119 285 R120 -285 C162 R122 -285 R123 -285 C163 R100 163 R115 1 C163 R128 -285 C164 R100 69 R116 1 C164 R119 265 R120 -265 C164 R124 -265 R125 -265 C165 R100 69 R116 1 C165 R119 265 R120 -265 C165 R122 -265 R123 -265 C166 R100 183 R117 1 C166 R118 -230 C167 R100 183 R117 1 C167 R124 -230 R125 -230 C168 R100 183 R117 1 C168 R119 230 R120 -230 C168 R125 -230 C169 R100 183 R117 1 C169 R119 230 R120 -230 C169 R123 -230 C170 R100 49 R119 190 C170 R120 -190 R122 -190 C170 R123 -190 C171 R100 183 R117 1 C172 R100 258 R118 -200 C173 R100 517 R118 -400 C174 R100 250 R126 -200 C174 R127 -200 C175 R100 500 R126 -400 C175 R127 -400 C176 R100 250 R127 -200 C177 R100 500 R127 -400 C178 R100 159 R119 200 C178 R120 -200 R124 -200 C178 R125 -200 C179 R100 318 R119 400 C179 R120 -400 R124 -400 C179 R125 -400 C180 R100 159 R119 200 C180 R120 -200 R125 -200 C181 R100 318 R119 400 C181 R120 -400 R125 -400 C182 R100 159 R119 200 C182 R120 -200 R122 -200 C182 R123 -200 C183 R100 318 R119 400 C183 R120 -400 R122 -400 C183 R123 -400 C184 R100 159 R119 200 C184 R120 -200 R123 -200 C185 R100 318 R119 400 C185 R120 -400 R123 -400 C186 R100 114 R119 200 C186 R120 -200 R121 -200 C187 R100 228 R119 400 C187 R120 -400 R121 -400 C188 R100 159 R128 -200 C189 R100 318 R128 -400 MARK0001 'MARKER' 'INTEND' RHS RHS R114 1 R115 1 RHS R116 1 R117 1 RHS R118 -5 R119 2700 RHS R120 -2600 R121 -100 RHS R122 -900 R123 -1656 RHS R124 -335 R125 -1026 RHS R126 -5 R127 -500 RHS R128 -270 BOUNDS UP ONE C157 1 UP ONE C158 1 UP ONE C159 1 UP ONE C160 1 UP ONE C161 1 UP ONE C162 1 UP ONE C163 1 UP ONE C164 1 UP ONE C165 1 UP ONE C166 1 UP ONE C167 1 UP ONE C168 1 UP ONE C169 1 UP ONE C170 1 UP ONE C171 1 UP ONE C172 1 UP ONE C173 1 UP ONE C174 1 UP ONE C175 1 UP ONE C176 1 UP ONE C177 1 UP ONE C178 1 UP ONE C179 1 UP ONE C180 1 UP ONE C181 1 UP ONE C182 1 UP ONE C183 1 UP ONE C184 1 UP ONE C185 1 UP ONE C186 1 UP ONE C187 1 UP ONE C188 1 UP ONE C189 1 ENDATA DyLP-1.10.4/Data/Sample/configure.ac0000644000175200017520000000464413374040606015446 0ustar coincoin# Copyright (C) 2006 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: configure.ac 490 2018-11-17 16:27:50Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 ############################################################################# # Names and other basic things # ############################################################################# AC_PREREQ(2.59) AC_INIT([DataSample],[1.2.11],[https://projects.coin-or.org/BuildTools/]) AC_COPYRIGHT([ Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License.]) # List one file in the package so that the configure script can test # whether the package is actually there AC_CONFIG_SRCDIR(configure.ac) # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. AC_PREFIX_DEFAULT([`pwd`]) AC_COIN_PROJECTDIR_INIT(DataSample,2:11:1) ############################################################################# # We only need automake to generate Makefiles for the distribution # ############################################################################# # Initialize automake AC_COIN_INIT_AUTOMAKE ############################################################################# #Find out what the data files are and create links if this is a VPATH config# ############################################################################# AC_COIN_EXAMPLE_FILES([*.mps]) AC_COIN_EXAMPLE_FILES([*.lp]) AC_COIN_EXAMPLE_FILES([*.block]) AC_COIN_EXAMPLE_FILES([*.dec]) AC_COIN_EXAMPLE_FILES([input.130]) AC_COIN_EXAMPLE_FILES([app0110.* app0110R.* bug.*]) ############################################################################## # Finishing up by writing all the output # ############################################################################## ABSBUILDDIR="`pwd`" AC_SUBST(ABSBUILDDIR) # Here list all the files that configure should create (except for the # configuration header file) AC_CONFIG_FILES([Makefile coindatasample.pc coindatasample-uninstalled.pc]) # Finally, we let configure write all the output... AC_COIN_FINALIZE DyLP-1.10.4/Data/Sample/tp3.mps0000644000175200017520000000162510430174061014374 0ustar coincoin* * small test problem derived from P0548 * NAME tp3 ROWS N R1001 L R1006 G ROWA G ROWB COLUMNS SET00001 'MARKER' 'INTORG' C1045 R1001 155.000000 C1045 R1006 161.000000 C1045 ROWA 1.000000 C1047 R1006 -120.000000 C1050 R1006 -68.000000 C1050 ROWB 1.000000 RHS RHS R1006 -5.000000 RHS ROWA 0.627000 RHS ROWB 0.380000 BOUNDS BV ONE C1045 1.000000 BV ONE C1047 1.000000 BV ONE C1050 1.000000 ENDATA DyLP-1.10.4/Data/Sample/tp4.mps0000644000175200017520000000232710430174061014375 0ustar coincoin* * small test problem - tp4.mps * * knapsack problem where lifted greedy cover cut * moves lp objective function value * NAME tp4 ROWS N obj L knap G r1 G r2 G r3 COLUMNS SET00001 'MARKER' 'INTORG' x1 knap 8.000000 x1 r1 1.000000 x2 knap 7.000000 x2 r2 1.000000 x3 knap 6.000000 x3 r3 1.000000 x4 knap 4.000000 x4 obj -1.000000 x5 knap 6.000000 x5 obj -100.000000 x6 knap 13.500000 x6 obj -100.000000 RHS RHS knap 22.000000 RHS r1 0.001000 RHS r2 0.001000 RHS r3 0.001000 BOUNDS BV ONE x1 1.000000 BV ONE x2 1.000000 BV ONE x3 1.000000 BV ONE x4 1.000000 BV ONE x5 1.000000 BV ONE x6 1.000000 ENDATA DyLP-1.10.4/Data/Sample/tp5.mps0000644000175200017520000000233210430174061014372 0ustar coincoin* * small test problem - tp5.mps * * knapsack problem where the greedy cover cut * approach leads to a violated min. cover * NAME tp5 ROWS N obj L knap G r1 G r2 G r3 COLUMNS SET00001 'MARKER' 'INTORG' x1 knap 8.000000 x1 r1 1.000000 x2 knap 7.000000 x2 r2 1.000000 x3 knap 6.000000 x3 r3 1.000000 x4 knap 4.000000 x4 obj -1.000000 x5 knap 6.000000 x5 obj -100.000000 x6 knap 13.500000 x6 obj -10.000000 RHS RHS knap 22.000000 RHS r1 0.900000 RHS r2 0.900000 RHS r3 0.900000 BOUNDS BV ONE x1 1.000000 BV ONE x2 1.000000 BV ONE x3 1.000000 BV ONE x4 1.000000 BV ONE x5 1.000000 BV ONE x6 1.000000 ENDATA DyLP-1.10.4/Data/Sample/lseu.mps0000644000175200017520000004211612223473003014636 0ustar coincoin*NAME: lseu *ROWS: 28 *COLUMNS: 89 *INTEGER: 89 *NONZERO: 309 *BEST SOLN: 1120 (opt) *LP SOLN: 834.68 *SOURCE: C. E. Lemke and K. Spielberg * Ellis L. Johnson and Uwe H. Suhl * John J. Forrest (IBM) *APPLICATION: unknown *COMMENTS: pure 0/1 IP * * NAME LSEU ROWS N R100 L R101 L R102 L R103 L R104 L R105 L R106 L R107 L R108 L R109 L R110 L R111 L R112 L R113 L R114 L R115 L R116 L R117 L R118 L R119 L R120 L R121 L R122 L R123 L R124 L R125 L R126 L R127 L R128 COLUMNS MARK0000 'MARKER' 'INTORG' C101 R100 7 R119 525 C101 R120 -525 R122 -525 C101 R123 -525 C102 R100 10 R119 500 C102 R120 -500 R122 -500 C102 R123 -500 C103 R100 179 R101 1 C103 R119 475 R120 -475 C103 R124 -475 R125 -475 C104 R100 186 R101 1 C104 R119 475 R120 -475 C104 R122 -475 R123 -475 C105 R100 179 R101 1 C105 R119 475 R120 -475 C105 R122 -190 R123 -190 C105 R124 -285 R125 -285 C106 R102 1 R118 -450 C107 R102 1 R124 -450 C107 R125 -450 C108 R100 6 R102 1 C108 R122 -450 R123 -450 C109 R102 1 R122 -165 C109 R123 -165 R124 -285 C109 R125 -285 C110 R102 1 R124 -150 C110 R125 -150 C111 R100 164 R103 1 C111 R118 -435 C112 R100 164 R103 1 C112 R124 -435 R125 -435 C113 R100 170 R103 1 C113 R119 435 R120 -435 C113 R123 -435 C114 R100 164 R103 1 C114 R119 435 R120 -435 C114 R121 -435 C115 R100 346 R104 1 C115 R124 -435 R125 -435 C116 R100 346 R104 1 C116 R119 435 R120 -435 C116 R125 -435 C117 R100 248 R105 1 C117 R119 435 R120 -435 C117 R124 -435 R125 -435 C118 R100 253 R105 1 C118 R119 435 R120 -435 C118 R122 -435 R123 -435 C119 R100 248 R105 1 C119 R119 435 R120 -435 C119 R122 -300 R123 -300 C119 R124 -135 R125 -135 C120 R100 346 R106 1 C120 R118 -435 C121 R100 346 R106 1 C121 R123 -400 C122 R100 346 R106 1 C122 R121 -400 C123 R100 346 R106 1 C123 R124 -100 R125 -100 C123 R127 -300 C124 R100 160 R107 1 C124 R124 -400 R125 -400 C125 R100 161 R107 1 C125 R122 -400 R123 -400 C126 R100 160 R107 1 C126 R122 -115 R123 -115 C126 R124 -285 R125 -285 C127 R100 160 R107 1 C127 R119 425 R120 -425 C127 R125 -425 C128 R100 161 R107 1 C128 R119 425 R120 -425 C128 R123 -425 C129 R100 160 R107 1 C129 R119 425 R120 -425 C129 R123 -140 R125 -285 C130 R100 160 R107 1 C130 R124 -100 R125 -100 C130 R126 -300 R127 -300 C131 R100 278 R108 1 C131 R118 -350 C132 R100 278 R108 1 C132 R124 -350 R125 -350 C133 R100 278 R108 1 C133 R121 -350 C134 R100 86 R109 1 C134 R122 -330 R123 -330 C135 R100 86 R109 1 C135 R126 -330 R127 -330 C136 R100 86 R109 1 C136 R119 330 R120 -330 C136 R124 -330 R125 -330 C137 R100 86 R109 1 C137 R119 330 R120 -330 C137 R123 -330 C138 R100 86 R109 1 C138 R119 330 R120 -330 C138 R121 -330 C139 R100 86 R119 330 C139 R120 -330 R122 -330 C139 R123 -330 C140 R100 188 R110 1 C140 R122 -330 R123 -330 C141 R100 188 R110 1 C141 R119 330 R120 -330 C141 R124 -330 R125 -330 C142 R100 188 R110 1 C142 R119 330 R120 -330 C142 R121 -330 C143 R100 85 R111 1 C143 R122 -325 R123 -325 C144 R100 85 R111 1 C144 R126 -325 R127 -325 C145 R100 85 R111 1 C145 R119 325 R120 -325 C145 R124 -325 R125 -325 C146 R100 85 R111 1 C146 R119 325 R120 -325 C146 R123 -325 C147 R100 85 R111 1 C147 R119 325 R120 -325 C147 R121 -325 C148 R100 78 R112 1 C148 R122 -300 R123 -300 C149 R100 78 R112 1 C149 R119 300 R120 -300 C149 R124 -300 R125 -300 C150 R100 78 R112 1 C150 R119 300 R120 -300 C150 R121 -300 C151 R100 78 R112 1 C151 R128 -300 C152 R100 78 R113 1 C152 R122 -300 R123 -300 C153 R100 78 R113 1 C153 R126 -300 R127 -300 C154 R100 78 R113 1 C154 R119 300 R120 -300 C154 R124 -300 R125 -300 C155 R100 78 R113 1 C155 R119 300 R120 -300 C155 R123 -300 C156 R100 78 R113 1 C156 R119 300 R120 -300 C156 R121 -300 C157 R100 171 R114 1 C157 R122 -300 R123 -300 C158 R100 171 R114 1 C158 R126 -300 R127 -300 C159 R100 171 R114 1 C159 R119 300 R120 -300 C159 R123 -300 C160 R100 171 R114 1 C160 R119 300 R120 -300 C160 R121 -300 C161 R100 163 R115 1 C161 R119 285 R120 -285 C161 R124 -285 R125 -285 C162 R100 163 R115 1 C162 R119 285 R120 -285 C162 R122 -285 R123 -285 C163 R100 163 R115 1 C163 R128 -285 C164 R100 69 R116 1 C164 R119 265 R120 -265 C164 R124 -265 R125 -265 C165 R100 69 R116 1 C165 R119 265 R120 -265 C165 R122 -265 R123 -265 C166 R100 183 R117 1 C166 R118 -230 C167 R100 183 R117 1 C167 R124 -230 R125 -230 C168 R100 183 R117 1 C168 R119 230 R120 -230 C168 R125 -230 C169 R100 183 R117 1 C169 R119 230 R120 -230 C169 R123 -230 C170 R100 49 R119 190 C170 R120 -190 R122 -190 C170 R123 -190 C171 R100 183 R117 1 C172 R100 258 R118 -200 C173 R100 517 R118 -400 C174 R100 250 R126 -200 C174 R127 -200 C175 R100 500 R126 -400 C175 R127 -400 C176 R100 250 R127 -200 C177 R100 500 R127 -400 C178 R100 159 R119 200 C178 R120 -200 R124 -200 C178 R125 -200 C179 R100 318 R119 400 C179 R120 -400 R124 -400 C179 R125 -400 C180 R100 159 R119 200 C180 R120 -200 R125 -200 C181 R100 318 R119 400 C181 R120 -400 R125 -400 C182 R100 159 R119 200 C182 R120 -200 R122 -200 C182 R123 -200 C183 R100 318 R119 400 C183 R120 -400 R122 -400 C183 R123 -400 C184 R100 159 R119 200 C184 R120 -200 R123 -200 C185 R100 318 R119 400 C185 R120 -400 R123 -400 C186 R100 114 R119 200 C186 R120 -200 R121 -200 C187 R100 228 R119 400 C187 R120 -400 R121 -400 C188 R100 159 R128 -200 C189 R100 318 R128 -400 MARK0001 'MARKER' 'INTEND' RHS RHS R101 1 R102 1 RHS R103 1 R104 1 RHS R105 1 R106 1 RHS R107 1 R108 1 RHS R109 1 R110 1 RHS R111 1 R112 1 RHS R113 1 R114 1 RHS R115 1 R116 1 RHS R117 1 R118 -190 RHS R119 2700 R120 -2600 RHS R121 -630 R122 -900 RHS R123 -1656 R124 -335 RHS R125 -1026 R126 -150 RHS R127 -500 R128 -270 BOUNDS UP ONE C101 1 UP ONE C102 1 UP ONE C103 1 UP ONE C104 1 UP ONE C105 1 UP ONE C106 1 UP ONE C107 1 UP ONE C108 1 UP ONE C109 1 UP ONE C110 1 UP ONE C111 1 UP ONE C112 1 UP ONE C113 1 UP ONE C114 1 UP ONE C115 1 UP ONE C116 1 UP ONE C117 1 UP ONE C118 1 UP ONE C119 1 UP ONE C120 1 UP ONE C121 1 UP ONE C122 1 UP ONE C123 1 UP ONE C124 1 UP ONE C125 1 UP ONE C126 1 UP ONE C127 1 UP ONE C128 1 UP ONE C129 1 UP ONE C130 1 UP ONE C131 1 UP ONE C132 1 UP ONE C133 1 UP ONE C134 1 UP ONE C135 1 UP ONE C136 1 UP ONE C137 1 UP ONE C138 1 UP ONE C139 1 UP ONE C140 1 UP ONE C141 1 UP ONE C142 1 UP ONE C143 1 UP ONE C144 1 UP ONE C145 1 UP ONE C146 1 UP ONE C147 1 UP ONE C148 1 UP ONE C149 1 UP ONE C150 1 UP ONE C151 1 UP ONE C152 1 UP ONE C153 1 UP ONE C154 1 UP ONE C155 1 UP ONE C156 1 UP ONE C157 1 UP ONE C158 1 UP ONE C159 1 UP ONE C160 1 UP ONE C161 1 UP ONE C162 1 UP ONE C163 1 UP ONE C164 1 UP ONE C165 1 UP ONE C166 1 UP ONE C167 1 UP ONE C168 1 UP ONE C169 1 UP ONE C170 1 UP ONE C171 1 UP ONE C172 1 UP ONE C173 1 UP ONE C174 1 UP ONE C175 1 UP ONE C176 1 UP ONE C177 1 UP ONE C178 1 UP ONE C179 1 UP ONE C180 1 UP ONE C181 1 UP ONE C182 1 UP ONE C183 1 UP ONE C184 1 UP ONE C185 1 UP ONE C186 1 UP ONE C187 1 UP ONE C188 1 UP ONE C189 1 ENDATA DyLP-1.10.4/Data/Sample/coindatasample-uninstalled.pc.in0000644000175200017520000000023211507632611021401 0ustar coincoindatadir=@ABSBUILDDIR@ Name: Sample Description: Sample models URL: https://projects.coin-or.org/svn/Data/Sample Version: @PACKAGE_VERSION@ Libs: Cflags: DyLP-1.10.4/Data/Sample/bug.time0000755000175200017520000000021311015552002014570 0ustar coincoinTIME BUG PERIODS LP x01 C0 STG01 x04 C1 STG02 ENDATA DyLP-1.10.4/Data/Sample/e226.mps0000644000175200017520000026741310662211140014352 0ustar coincoinNAME E226 ROWS N ...000 L ...010 E ...011 L ...012 E ...013 E ...014 E ...015 E ...016 L ...017 L ...018 L ...019 L ...020 L ...021 L ...022 L ...023 L ...024 L ...025 E ...026 L ...027 E ...028 L ...029 L ...030 L ...031 E ...032 L ...033 L ...034 L ...035 L ...036 L ...037 L ...038 L ...039 L ...040 L ...041 L ...042 L ...043 L ...044 L ...045 E ...046 L ...047 L ...048 L ...049 L ...050 L ...051 L ...052 L ...053 L ...054 L ...055 L ...056 L ...057 L ...058 L ...059 L ...060 L ...120 L ...133 L ...134 L ...135 L ...136 L ...137 L ...138 L ...139 L ...140 L ...141 L ...142 L ...143 L ...144 L ...145 L ...146 E ...147 L ...148 L ...149 L ...150 L ...151 L ...152 L ...153 L ...154 L ...155 E ...156 E ...157 L ...158 L ...159 L ...160 L ...161 L ...162 L ...163 E ...164 E ...165 E ...166 L ...167 L ...168 L ...169 L ...170 L ...171 L ...172 L ...173 L ...174 L ...175 E ...176 E ...177 E ...178 L ...179 L ...180 E ...181 L ...182 L ...183 E ...184 L ...185 L ...186 E ...187 E ...188 L ...189 L ...190 G ...191 L ...192 L ...193 L ...194 L ...195 L ...196 L ...197 L ...198 L ...199 L ...200 G ...201 L ...202 G ...203 L ...204 L ...205 L ...206 L ...207 L ...208 L ...209 L ...210 L ...211 L ...212 L ...213 L ...214 L ...215 L ...216 L ...217 L ...218 L ...219 L ...220 L ...221 L ...222 L ...223 L ...224 L ...225 L ...226 L ...227 L ...228 L ...229 L ...230 L ...231 L ...232 L ...233 L ...234 L ...235 L ...236 L ...237 L ...238 L ...239 L ...240 L ...241 L ...242 L ...243 L ...244 L ...245 L ...246 L ...247 L ...248 L ...249 L ...250 E ...251 L ...252 L ...253 L ...254 L ...255 L ...256 L ...257 L ...258 L ...259 L ...260 L ...261 E ...262 L ...263 E ...264 L ...265 L ...267 L ...266 L ...268 E ...269 L ...270 L ...271 L ...272 L ...273 L ...274 L ...275 E ...276 E ...277 E ...278 E ...279 L ...280 L ...281 L ...282 L ...283 L ...284 L ...285 L ...286 L ...287 L ...288 E ...289 L ...290 L ...291 G ...292 L ...293 E ...294 L ...295 L ...296 G ...297 L ...298 E ...299 L ...300 L ...301 L ...302 L ...303 COLUMNS .ETHSD ...269 1. ...270 1. .ETHSD ...000 -10.1974 .BUDSD ...271 1. ...293 1. .BUDSD ...000 -29.1163 .HEPTS ...267 1. ...268 1. .HEPTS ...000 -12.8462 .M28IS ...032 1. ...055 1. .TF0SD ...300 1. ...301 .63 .TF0SD ...302 .37 ...000 -4.7113 .RKDIS ...028 1. ...055 1. .ADHD1 ...056 2.857 ...133 .984 .ADHD1 ...140 1. ...000 -3.9824 .PREHT ...289 1. ...290 1. .C4LPG ...169 1. ...173 1. .C4LPG ...174 1. ...000 -2.7214 .M28SL ...033 1. ...049 1. .M28SL ...045 -.4286 ...000 -6.5884 .HEPP0 ...267 1. ...274 -1. .RKSLD ...029 1. ...031 1. .RKSLD ...045 -.2195 ...000 -4.158 .UN010 ...010 -1. .XCAPY ...182 1. .REDBA ...294 .1 ...013 -.04 .TFVIS ...051 .362 ...052 1. .TFVIS ...053 .362 ...054 .829 .TFVIS ...056 2.127 ...000 -4.3557 .T0TMX ...168 1. ...170 -.25 .T0TMX ...171 .12 ...173 1. .T0TMX ...174 1. ...000 -3.103 .EGV0L ...000 -5.9898 ...211 1. .EGV0L ...212 1. .VNNF2 ...193 -.272 ...192 -.272 .VNNF2 ...194 -.272 ...195 -.272 .C5FDP ...181 1. ...183 -1. .C5FDP ...184 -.1614 ...185 1.1614 .C5FDP ...186 1.1614 .TFNS1 ...050 1. ...051 -1. .TFNS1 ...000 .0087 .CFMSU ...261 -2.9155 ...278 1. .VN4PH ...179 1. ...198 -1. .CFMSG ...279 1. ...285 .6526 .ERV0L ...233 1. ...234 1. .ERV0L ...000 -4.4497 .PKDIS ...026 1. ...055 1. .EEV0L ...000 -5.348 ...222 1. .EEV0L ...223 1. .CS1TP ...189 -1. ...191 1. .CS1TP ...190 1. ...000 .0078 .JP5DS ...046 1. ...047 -.5 .JP5DS ...048 1. ...050 1. .JP5DS ...000 -4.0337 .DMD0S ...144 1. ...145 1. .DMD0S ...000 -3.8202 .PKSLD ...027 1.25 ...030 1. .PKSLD ...045 -.25 ...000 -4.3425 .VNSW2 ...051 1. ...189 -1. .VNSW2 ...000 .015 .TGAS1 ...134 1. ...135 1. .TGAS1 ...137 -1.667 .TGAS2 ...137 -1.367 ...134 1. .TGAS2 ...136 1. .LD1EG ...219 5.2638 ...244 7.593 .LD1EG ...000 -1. .LD2EG ...219 15.7829 ...245 18.5185 .LD2EG ...000 -1. .JP1TF ...034 1. ...050 1. .JP1TF ...301 -1. .JP1DS ...034 1. ...035 1. .JP1DS ...036 -.2 ...050 1. .JP1DS ...000 -4.5066 .JP4DS ...038 1. ...041 1. .JP4DS ...050 1. ...000 -2.7704 .VN4DB ...051 1. ...179 1. .VN4DB ...204 2. ...281 1. .VN4DB ...000 -4.3739 .T5JP5 ...037 1. ...046 -1. .T5JP5 ...047 1. ...050 -1. .T5JP5 ...000 -.0087 .J4210 ...041 1. ...042 1.062 .J4210 ...044 .0638 ...050 1. .J4210 ...000 -3.0626 .T5JP1 ...034 -1. ...036 1. .T5JP1 ...037 1. ...050 -1. .T5JP1 ...000 -.0087 .TFCAT ...054 -11.055 ...156 24.476 .TFCAT ...157 1. ...281 -2.5386 .TFCAT ...282 10.0375 .VNSW1 ...050 1. ...189 -1. .VNSW1 ...000 .0087 .ETHRF ...264 -.42 ...269 1. .ETHRF ...000 1.35 .LD1ER ...241 75.9202 ...248 19.7239 .LD1ER ...000 -1. .LD2ER ...000 -1. ...241 151.8405 .LD2ER ...249 12.3305 .LD1EE ...000 -1. ...230 14.5377 .LD1EE ...246 14.1044 .LD2EE ...000 -1. ...230 25.3995 .LD2EE ...247 12.3305 .PC4TF ...264 -.66 ...265 .66 .PC4TF ...273 1. .C5TRF ...183 1. ...264 -.7 .C5TRF ...265 .7 .CCSRF ...156 17.372 ...157 1. .CCSRF ...264 -.9 ...266 1. .CCSRF ...000 -.2 .DGHDS ...137 8.33 ...138 1. .DGHDS ...139 1.483 ...262 -9.648 .DGHDS ...264 -.014 ...265 .014 .DGHDS ...000 -5.9218 .ADHDS ...133 .982 ...137 10. .ADHDS ...140 1. ...262 -9.648 .ADHDS ...000 -3.9942 ...264 -.0126 .ADHDS ...265 .0126 .VN4RF ...179 1. ...264 -.78 .VN4RF ...265 .78 .GWG0S ...142 1. ...143 1. .GWG0S ...000 -4.0195 .DGFDG ...139 -1. ...141 1. .DGFDG ...142 1. .ADFHD ...140 -1. ...142 .7763 .ADFHD ...156 4.401 ...157 .2237 .C4VIS ...173 -1. ...200 1. .CATFI ...147 -1. ...276 -6. .CATFI ...277 -3.3 ...278 -1.6 .CATFI ...279 -.916 ...000 3.2253 .C3LPG ...167 1. ...172 1. .C3LPG ...174 1. ...202 1. .C3LPG ...000 -2.7904 .PETCF ...147 -1. ...148 1. .PETCF ...276 -18.4 ...277 .462 .PETCF ...278 -4.2 ...279 -.966 .C3MIX ...170 1. ...171 -1. .C3MIX ...172 1. ...173 -1. .C3MIX ...202 1. .CB1H1 ...147 -1. ...158 1. .CB1H1 ...276 -5.4 ...277 -3.96 .CB1H1 ...278 -1.68 ...279 -.927 .CB1H3 ...147 -1. ...159 1. .CB1H3 ...276 -7.1 ...277 9.9 .CB1H3 ...278 -1.97 ...279 -.946 .PS1LF ...147 -1. ...149 1. .PS1LF ...276 -2.5 ...277 -20.46 .PS1LF ...278 -1.6 ...279 -.861 .PS1H1 ...147 -1. ...150 1. .PS1H1 ...276 -2.8 ...277 -14.685 .PS1H1 ...278 -2.6 ...279 -.892 .PS1H2 ...147 -1. ...151 1. .PS1H2 ...276 -3.7 ...277 3.135 .PS1H2 ...278 -2.8 ...279 -.915 .PS1H3 ...147 -1. ...152 1. .PS1H3 ...276 -3.4 ...277 9.735 .PS1H3 ...278 -3.1 ...279 -.942 .PS2LF ...147 -1. ...153 1. .PS2LF ...276 -1.1 ...277 -16.5 .PS2LF ...278 -1.74 ...279 -.862 .PS2HF ...147 -1. ...154 1. .PS2HF ...276 -3.9 ...277 -1.65 .PS2HF ...278 -2.71 ...279 -.894 .GTSGB ...175 1. ...260 1. .GTSGB ...000 -2.9662 .MD0CF ...145 1. ...147 -1. .MD0CF ...276 .3 ...277 -23.1 .MD0CF ...278 -1.25 ...279 -.845 .SPSU1 ...260 .00026 ...261 1. .SPSU1 ...263 1. ...000 -.00176 .SPSU2 ...260 .00026 ...262 1. .SPSU2 ...263 1. ...000 -.00176 .C3VRF ...202 1. ...264 -.56 .PS3HF ...147 -1. ...155 1. .PS3HF ...276 -1.1 ...277 -9.9 .PS3HF ...278 -2.15 ...279 -.878 .BF0SD ...164 1. ...165 1. .BF0SD ...000 -2.6143 .C4VRF ...200 1. ...264 -.66 .C4VRF ...265 .66 .CCSF6 ...157 1. ...164 -1. .CCSVF ...156 1. ...166 -1. .FCTEM ...260 -.0029 ...283 -.0007 .FCTEM ...284 .44 ...285 -.0459 .FCTEM ...286 1. ...289 -.78 .FCTEM ...000 -.00049 .VN0ER ...188 1. ...241 -1.125 .GASRF ...260 1. ...264 -1. .G0TCF ...142 1. ...147 -1. .G0TCF ...276 1.2 ...277 -23.1 .G0TCF ...278 -1. ...279 -.832 .PC4TG ...213 64. ...214 -66. .PC4TG ...215 73. ...216 -92. .PC4TG ...217 40. ...218 -50. .PC4TG ...220 317.5 ...221 -613.2 .PC4TG ...219 .24 ...211 -1. .PC4TG ...244 -1. ...245 -1. .PC4TG ...273 1. .P0LYG ...213 1. ...214 -3. .P0LYG ...215 -17. ...216 -2. .P0LYG ...217 -24. ...218 14. .P0LYG ...220 -5.1 ...221 -19.2 .P0LYG ...219 1.29 ...211 -1. .P0LYG ...244 -1. ...245 -1. .P0LYG ...274 1. .P90BG ...256 1. ...213 -9. .P90BG ...214 7. ...215 -52. .P90BG ...216 33. ...217 -70. .P90BG ...218 60. ...220 -81. .P90BG ...221 95.8 ...219 -.7 .P90BG ...211 -1. ...244 -1. .P90BG ...245 -1. ...000 .0023 .P93BG ...213 -9. ...214 7. .P93BG ...215 -52. ...216 33. .P93BG ...217 -69. ...218 59. .P93BG ...220 -80.6 ...221 95.8 .P93BG ...219 -3.23 ...211 -1. .P93BG ...244 -1. ...245 -1. .P93BG ...257 1. ...000 .0023 .P96BG ...213 -9. ...214 7. .P96BG ...215 -52. ...216 33. .P96BG ...217 -68. ...218 58. .P96BG ...220 -80.2 ...221 95.8 .P96BG ...219 -4.94 ...211 -1. .P96BG ...244 -1. ...245 -1. .P96BG ...258 1. ...000 .0023 .P990G ...213 1.1 ...214 -3.1 .P990G ...215 22. ...216 -41. .P990G ...217 49. ...218 -59. .P990G ...220 44. ...221 -59. .P990G ...219 7.48 ...211 -1. .P990G ...244 -1. ...245 -1. .P990G ...255 1. ...000 .0023 .P99BG ...213 -9. ...214 7. .P99BG ...215 -52. ...216 33. .P99BG ...217 -67. ...218 57. .P99BG ...220 -79.8 ...221 95.8 .P99BG ...219 -6.21 ...211 -1. .P99BG ...244 -1. ...245 -1. .P99BG ...259 1. ...000 .0023 .C5TEG ...213 4. ...214 -6. .C5TEG ...215 58. ...216 -77. .C5TEG ...217 40. ...218 -50. .C5TEG ...220 70. ...221 -118.2 .C5TEG ...219 10.99 ...211 -1. .C5TEG ...244 -1. ...245 -1. .C5TEG ...183 1. ...250 1. .C5TEG ...251 -1. .LCN0G ...213 1.5 ...214 -3.5 .LCN0G ...215 40. ...216 -59. .LCN0G ...217 38. ...218 -48. .LCN0G ...220 50.2 ...221 -80.2 .LCN0G ...219 2.98 ...211 -1. .LCN0G ...244 -1. ...245 -1. .LCN0G ...250 1. ...280 1. .LCN0G ...000 .0089 .FCREC ...156 -.7977 ...260 -.0071 .FCREC ...280 -.0059 ...281 -.0039 .FCREC ...282 -.0033 ...283 .0065 .FCREC ...284 -.09 ...285 -.0564 .FCREC ...287 1. ...289 -.925 .FCREC ...000 -.00123 .FCMAR ...260 -.0017 ...276 1. .FCMAR ...280 .0036 ...281 .0024 .FCMAR ...282 .002 ...283 .0011 .FCMAR ...284 .32 ...285 .0696 .FCMBR ...156 .152 ...277 1. .FCMBR ...283 -.0023 ...280 .0006 .FCMBR ...281 .0004 ...282 .00035 .FCMBR ...260 -.0005 ...284 .042 .FCC0N ...260 .0006 ...280 -.00112 .FCC0N ...281 -.00075 ...282 -.00063 .FCC0N ...283 -.039 ...284 1. .FCC0N ...285 .1969 ...288 1. .FCC0N ...289 2.375 ...156 .6075 .FCC0N ...157 .05 ...000 .00058 .VN1ER ...187 1. ...239 1. .VN1ER ...240 -1. ...242 .4 .FCTPT ...147 1. ...156 -7.383 .FCTPT ...157 -.4 ...260 -.04495 .FCTPT ...280 -.19654 ...281 -.13103 .FCTPT ...282 -.10919 ...283 -.22573 .FCTPT ...284 4.569 ...286 -6. .FCTPT ...287 -2. ...288 -2. .FCTPT ...289 1.49 ...290 -1.3 .FCTPT ...291 1. ...292 1. .FCTPT ...000 .0186 .VNRER ...235 1. ...236 -1. .VNRER ...242 4. ...243 -8. .VNRER ...177 1. .VN7ER ...237 1. ...238 -1. .VN7ER ...242 .5 ...243 -1. .VN7ER ...178 1. .C4VEG ...213 53. ...214 -55. .C4VEG ...215 73. ...216 -92. .C4VEG ...217 40. ...218 -50. .C4VEG ...220 273.5 ...221 -525.2 .C4VEG ...219 7.34 ...211 -1. .C4VEG ...244 -1. ...245 -1. .C4VEG ...200 1. .C3VEG ...213 169. ...214 -171. .C3VEG ...215 98. ...216 -117. .C3VEG ...217 70. ...218 -80. .C3VEG ...220 762. ...221 -1478.2 .C3VEG ...219 -2.56 ...211 -1. .C3VEG ...244 -1. ...245 -1. .C3VEG ...202 1. .G0IF6 ...164 -1. ...166 -20.051 .G0IF6 ...000 4.0021 .MD0IF ...164 -1. ...166 -15.911 .MD0IF ...000 3.7167 .CFIF6 ...164 -1. ...166 -5.395 .CFIF6 ...000 3.2253 .F1V0L ...160 1. ...164 1. .F1V0L ...166 7.925 ...000 -3.1011 .F2V0L ...161 1. ...164 1. .F2V0L ...166 3.117 ...000 -2.8049 .F3V0L ...162 1. ...164 1. .F3V0L ...166 1.954 ...000 -2.7235 .F4V0L ...163 1. ...164 1. .F4V0L ...166 -1.117 ...000 -2.8146 .PETF6 ...164 -1. ...148 1. .PETF6 ...166 -6.192 .KEBF6 ...044 1. ...164 -1. .KEBF6 ...166 -27.4598 .WKEF6 ...045 1. ...164 -1. .WKEF6 ...166 -28.869 .CB161 ...158 1. ...164 -1. .CB161 ...166 -6.248 .CB163 ...159 1. ...164 -1. .CB163 ...166 -2.346 .PS1L6 ...149 1. ...164 -1. .PS1L6 ...166 -15.619 .PS161 ...150 1. ...164 -1. .PS161 ...166 -9.972 .PS162 ...151 1. ...164 -1. .PS162 ...166 -5.883 .PS163 ...152 1. ...164 -1. .PS163 ...166 -.923 .PS2L6 ...153 1. ...164 -1. .PS2L6 ...166 -15.292 .PS2H6 ...154 1. ...164 -1. .PS2H6 ...166 -9.503 .MD0F6 ...145 1. ...164 -1. .MD0F6 ...166 -15.911 .PTF0E ...224 -2.5 ...225 .5 .PTF0E ...226 -14.32 ...227 -5.7 .PTF0E ...228 9. ...229 -19. .PTF0E ...231 -4.56 ...232 16.1 .PTF0E ...230 2.01 ...222 -1. .PTF0E ...246 -1. ...247 -1. .PTF0E ...303 1. .SCNTE ...224 -.2 ...225 -1.8 .SCNTE ...226 1.64 ...227 -21.6 .SCNTE ...228 30. ...229 -40. .SCNTE ...231 21.02 ...232 -18.2 .SCNTE ...230 6.61 ...222 -1. .SCNTE ...246 -1. ...247 -1. .SCNTE ...275 1. ...000 .0005 .SCNTR ...235 -.2 ...236 -1.8 .SCNTR ...237 9. ...238 -29. .SCNTR ...239 30. ...240 -40. .SCNTR ...242 24.7 ...243 -25.6 .SCNTR ...241 -2.38 ...233 -1. .SCNTR ...248 -1. ...249 -1. .SCNTR ...275 1. ...000 .0005 .PTF0R ...235 -2.5 ...236 .5 .PTF0R ...237 -12. ...238 -8. .PTF0R ...239 9. ...240 -19. .PTF0R ...242 -3.4 ...243 13.8 .PTF0R ...241 -6.93 ...233 -1. .PTF0R ...248 -1. ...249 -1. .PTF0R ...303 1. .PC4TE ...224 66. ...225 -68. .PC4TE ...226 51.8 ...227 -71.8 .PC4TE ...228 40. ...229 -50. .PC4TE ...231 314.9 ...232 -598. .PC4TE ...230 -3.78 ...222 -1. .PC4TE ...246 -1. ...247 -1. .PC4TE ...273 1. .P0LYE ...224 3. ...225 -5. .P0LYE ...226 -16.6 ...227 -3.4 .P0LYE ...228 -24. ...229 14. .P0LYE ...231 3.1 ...232 -25.6 .P0LYE ...230 -2.69 ...222 -1. .P0LYE ...246 -1. ...247 -1. .P0LYE ...274 1. .PC4TR ...273 1. ...235 66. .PC4TR ...236 -68. ...237 75. .PC4TR ...238 -95. ...239 40. .PC4TR ...240 -50. ...242 326.5 .PC4TR ...243 -621.2 ...241 -12.74 .PC4TR ...233 -1. ...248 -1. .PC4TR ...249 -1. .P0LYR ...235 3. ...236 -5. .P0LYR ...237 -15. ...238 -5. .P0LYR ...239 -24. ...240 14. .P0LYR ...242 3.9 ...243 -27.2 .P0LYR ...241 -6.68 ...233 -1. .P0LYR ...248 -1. ...249 -1. .P0LYR ...274 1. .P900E ...225 -2. ...226 -.64 .P900E ...227 -19.4 ...228 45. .P900E ...229 -55. ...231 26.68 .P900E ...232 -17.6 ...230 5.74 .P900E ...222 -1. ...246 -1. .P900E ...247 -1. ...252 1. .P900E ...000 .0023 .P930E ...224 1. ...225 -3. .P930E ...226 3.16 ...227 -23.2 .P930E ...228 46. ...229 -56. .P930E ...231 32.98 ...232 -29.4 .P930E ...230 5.55 ...222 -1. .P930E ...246 -1. ...247 -1. .P930E ...253 1. ...000 .0023 .P960E ...224 2. ...225 -4. .P960E ...226 6.96 ...227 -27. .P960E ...228 47. ...229 -57. .P960E ...231 39.28 ...232 -41.2 .P960E ...230 5.15 ...222 -1. .P960E ...246 -1. ...247 -1. .P960E ...254 1. ...000 .0023 .P900R ...236 -2. ...237 6. .P900R ...238 -26. ...239 45. .P900R ...240 -55. ...242 30. .P900R ...243 -24.2 ...241 -1.05 .P900R ...233 -1. ...248 -1. .P900R ...249 -1. ...252 1. .P900R ...000 .0023 .P930R ...235 1. ...236 -3. .P930R ...237 11. ...238 -31. .P930R ...239 46. ...240 -56. .P930R ...242 36.9 ...243 -37.2 .P930R ...241 -1.27 ...233 -1. .P930R ...248 -1. ...249 -1. .P930R ...253 1. ...000 .0023 .P960R ...235 2. ...236 -4. .P960R ...237 16. ...238 -36. .P960R ...239 47. ...240 -57. .P960R ...242 43.8 ...243 -50.2 .P960R ...241 -1.71 ...233 -1. .P960R ...248 -1. ...249 -1. .P960R ...254 1. ...000 .0023 .F0RFF ...164 1. ...264 -1. .F0RFF ...000 .3 .P90BE ...224 -7. ...225 5. .P90BE ...226 -43.2 ...227 23.2 .P90BE ...228 -70. ...229 60. .P90BE ...231 -68.6 ...232 81. .P90BE ...230 -3.65 ...222 -1. .P90BE ...246 -1. ...247 -1. .P90BE ...256 1. ...000 .0023 .P93BE ...224 -7. ...225 5. .P93BE ...226 -43.2 ...227 23.2 .P93BE ...228 -69. ...229 59. .P93BE ...231 -68.2 ...232 81. .P93BE ...230 -5.85 ...222 -1. .P93BE ...246 -1. ...247 -1. .P93BE ...257 1. ...000 .0023 .P96BE ...224 -7. ...225 5. .P96BE ...226 -43.2 ...227 23.2 .P96BE ...228 -68. ...229 58. .P96BE ...231 -67.8 ...232 81. .P96BE ...230 -7.63 ...222 -1. .P96BE ...246 -1. ...247 -1. .P96BE ...258 1. ...000 .0023 .P990E ...224 3.5 ...225 -5.5 .P990E ...226 13.04 ...227 -33. .P990E ...228 49. ...229 -59. .P990E ...231 49.12 ...232 -59.2 .P990E ...230 4.43 ...222 -1. .P990E ...246 -1. ...247 -1. .P990E ...255 1. ...000 .0023 .P99BE ...224 -7. ...225 5. .P99BE ...226 -43.2 ...227 23.2 .P99BE ...228 -67. ...229 57. .P99BE ...231 -67.4 ...232 81. .P99BE ...230 -8.38 ...222 -1. .P99BE ...246 -1. ...247 -1. .P99BE ...259 1. ...000 .0023 .P90BR ...235 -7. ...236 5. .P90BR ...237 -50. ...238 30. .P90BR ...239 -70. ...240 60. .P90BR ...242 -72. ...243 87.8 .P90BR ...241 -10.34 ...233 -1. .P90BR ...248 -1. ...249 -1. .P90BR ...256 1. ...000 .0023 .P93BR ...235 -7. ...236 5. .P93BR ...237 -50. ...238 30. .P93BR ...239 -69. ...240 59. .P93BR ...242 -71.6 ...243 87.8 .P93BR ...241 -12.38 ...233 -1. .P93BR ...248 -1. ...249 -1. .P93BR ...257 1. ...000 .0023 .P96BR ...235 -7. ...236 5. .P96BR ...237 -50. ...238 30. .P96BR ...239 -68. ...240 58. .P96BR ...242 -71.2 ...243 87.8 .P96BR ...241 -14.06 ...233 -1. .P96BR ...248 -1. ...249 -1. .P96BR ...258 1. ...000 .0023 .P990R ...235 3.5 ...236 -5.5 .P990R ...237 24. ...238 -44. .P990R ...239 49. ...240 -59. .P990R ...242 54.6 ...243 -70.2 .P990R ...241 -2.38 ...233 -1. .P990R ...248 -1. ...249 -1. .P990R ...255 1. ...000 .0023 .P99BR ...235 -7. ...236 5. .P99BR ...237 -50. ...238 30. .P99BR ...239 -67. ...240 57. .P99BR ...242 -70.8 ...243 87.8 .P99BR ...241 -14.97 ...233 -1. .P99BR ...248 -1. ...249 -1. .P99BR ...259 1. ...000 .0023 .PS3H6 ...155 1. ...164 -1. .PS3H6 ...166 -13.855 .HCNTE ...224 -6.5 ...225 4.5 .HCNTE ...226 -34.08 ...227 14.1 .HCNTE ...228 -50. ...229 40. .HCNTE ...231 -54.04 ...222 -1. .HCNTE ...246 -1. ...232 67.9 .HCNTE ...230 2.44 ...247 -1. .HCNTE ...282 1. .HCNTR ...235 -6.5 ...236 4.5 .HCNTR ...237 -38. ...240 40. .HCNTR ...242 -56. ...243 71.8 .HCNTR ...241 -6.68 ...233 -1. .HCNTR ...248 -1. ...238 18. .HCNTR ...239 -50. ...249 -1. .HCNTR ...282 1. .LCNBE ...224 -8. ...225 6. .LCNBE ...226 -29.52 ...227 21.7 .LCNBE ...228 -56. ...229 46. .LCNBE ...231 -60.16 ...232 87.5 .LCNBE ...230 1.92 ...222 -1. .LCNBE ...246 -1. ...247 -1. .LCNBE ...281 1. ...000 .0103 .LCNBR ...235 -8. ...236 6. .LCNBR ...237 -48. ...238 28. .LCNBR ...239 -56. ...240 46. .LCNBR ...242 -69.4 ...243 93.8 .LCNBR ...241 -7.02 ...233 -1. .LCNBR ...248 -1. ...249 -1. .LCNBR ...281 1. ...000 .0103 .C5TEE ...224 6. ...225 -8. .C5TEE ...226 40.4 ...227 -60.4 .C5TEE ...228 40. ...229 -50. .C5TEE ...231 69.2 ...232 -106.6 .C5TEE ...230 6.96 ...222 -1. .C5TEE ...246 -1. ...247 -1. .C5TEE ...183 1. ...250 1. .C5TEE ...251 .20083 .LCN0E ...224 3.5 ...225 -5.5 .LCN0E ...226 26.72 ...227 -46.7 .LCN0E ...228 38. ...229 -48. .LCN0E ...231 51.56 ...232 -72.9 .LCN0E ...230 -1.19 ...222 -1. .LCN0E ...246 -1. ...247 -1. .LCN0E ...250 1. ...280 1. .LCN0E ...000 .0089 .LCN0R ...235 3.5 ...236 -5.5 .LCN0R ...237 42. ...238 -62. .LCN0R ...239 38. ...240 -48. .LCN0R ...242 59.2 ...243 -88.2 .LCN0R ...241 -10.17 ...233 -1. .LCN0R ...248 -1. ...249 -1. .LCN0R ...250 1. ...280 1. .LCN0R ...000 .0089 .G0TF6 ...142 1. ...146 -1. .G0TF6 ...164 -1. ...166 -20.051 .DACFP ...120 2.63 ...147 -.33 .DACFP ...164 .33 ...166 .49 .DACFP ...276 -2.013 ...277 3.267 .DACFP ...278 -1.0164 ...279 -.3102 .DACFP ...000 .0311 .C4VEE ...200 1. ...224 55. .C4VEE ...225 -57. ...226 51.8 .C4VEE ...227 -71.8 ...228 40. .C4VEE ...229 -50. ...231 270.9 .C4VEE ...232 -510. ...230 3.25 .C4VEE ...222 -1. ...246 -1. .C4VEE ...247 -1. .C3VEE ...202 1. ...224 171. .C3VEE ...225 -173. ...226 70.8 .C3VEE ...227 -90.8 ...228 70. .C3VEE ...229 -80. ...231 756.4 .C3VEE ...232 -1457. ...230 -6.36 .C3VEE ...222 -1. ...246 -1. .C3VEE ...247 -1. .C4VER ...200 1. ...201 1. .C4VER ...235 55. ...236 -57. .C4VER ...237 75. ...238 -95. .C4VER ...239 40. ...240 -50. .C4VER ...242 282.5 ...243 -533.2 .C4VER ...241 -5.81 ...233 -1. .C4VER ...248 -1. ...249 -1. .C3VER ...202 1. ...203 1. .C3VER ...235 171. ...236 -173. .C3VER ...237 100. ...238 -120. .C3VER ...239 70. ...240 -80. .C3VER ...242 771. ...243 -1486.2 .C3VER ...241 -15.15 ...233 -1. .C3VER ...248 -1. ...249 -1. .SCSRT ...164 -.033 ...166 -.007 .SCSRT ...180 1. ...182 1. .SCSRT ...186 1. ...260 -.079 .SCSRT ...269 -.3351 ...271 -.0347 .SCSRT ...275 -.3769 .P0LYF ...164 -.0059 ...166 -.114 .P0LYF ...260 -.0802 ...267 -.0427 .P0LYF ...271 -.0586 ...273 -.1917 .P0LYF ...274 -.4058 ...283 1. .P0LYF ...000 .1273 .VNVER ...176 1. ...189 1. .VNVER ...235 -9. ...236 7. .VNVER ...237 -40. ...238 20. .VNVER ...239 -60. ...240 50. .VNVER ...242 -71. ...243 93.8 .VNVER ...241 65.12 ...233 -1. .VNVER ...248 -1. ...249 -1. .VN2PT ...134 -5.7 ...164 -.01 .VN2PT ...166 -.151 ...196 1. .VN2PT ...199 .4762 ...264 .085 .VN2PT ...260 -.315 ...302 -.198 .VN2PT ...303 -.462 .IMPP0 ...134 -5.05 ...164 -.005 .IMPP0 ...166 -.076 ...199 .4673 .IMPP0 ...252 -.34 ...256 -.413 .IMPP0 ...264 .085 ...260 -.219 .IMPP0 ...000 3.3169 .IMPP3 ...134 -5.38 ...164 -.005 .IMPP3 ...166 -.076 ...199 .4673 .IMPP3 ...253 -.316 ...260 -.259 .IMPP3 ...000 3.3201 ...257 -.401 .IMPP3 ...264 .085 .IMPP6 ...134 -5.7 ...164 -.01 .IMPP6 ...166 -.151 ...199 .657 .IMPP6 ...254 -.288 ...258 -.372 .IMPP6 ...264 .085 ...260 -.315 .IMPP6 ...000 3.3233 .IMPP9 ...134 -5.7 ...164 -.01 .IMPP9 ...166 -.151 ...199 1.2129 .IMPP9 ...255 -.235 ...259 -.349 .IMPP9 ...264 .085 ...260 -.395 .IMPP9 ...000 3.3305 .VN3P0 ...134 -5.47 ...164 -.005 .VN3P0 ...166 -.076 ...197 1. .VN3P0 ...199 .4673 ...252 -.209 .VN3P0 ...256 -.561 ...264 .085 .VN3P0 ...260 -.2 ...000 .0481 .VN3P3 ...134 -6.13 ...164 -.01 .VN3P3 ...166 -.151 ...197 1. .VN3P3 ...199 .4673 ...253 -.212 .VN3P3 ...257 -.521 ...264 .085 .VN3P3 ...260 -.235 ...000 .0513 .VN3P6 ...134 -6.79 ...164 -.01 .VN3P6 ...166 -.151 ...197 1. .VN3P6 ...199 .4932 ...254 -.222 .VN3P6 ...258 -.471 ...264 .085 .VN3P6 ...260 -.282 ...000 .0545 .VN4P0 ...134 -5.8 ...164 -.052 .VN4P0 ...166 -.786 ...198 1. .VN4P0 ...199 .4673 ...252 -.218 .VN4P0 ...256 -.538 ...264 .085 .VN4P0 ...260 -.167 ...000 .0481 .VN4P3 ...134 -6.51 ...164 -.057 .VN4P3 ...166 -.861 ...198 1. .VN4P3 ...199 .4673 ...253 -.231 .VN4P3 ...257 -.502 ...264 .085 .VN4P3 ...260 -.188 ...000 .0513 .VN4P6 ...134 -7.21 ...164 -.081 .VN4P6 ...166 -1.224 ...198 1. .VN4P6 ...199 .5055 ...254 -.231 .VN4P6 ...258 -.442 ...264 .085 .VN4P6 ...260 -.225 ...000 .0545 .VN2P0 ...134 -5.05 ...164 -.005 .VN2P0 ...166 -.076 ...196 1. .VN2P0 ...199 .4673 ...252 -.34 .VN2P0 ...256 -.413 ...264 .085 .VN2P0 ...260 -.219 ...000 .0481 .VN2P3 ...134 -5.38 ...164 -.005 .VN2P3 ...166 -.076 ...196 1. .VN2P3 ...199 .4673 ...253 -.316 .VN2P3 ...257 -.401 ...264 .085 .VN2P3 ...260 -.259 ...000 .0513 .VN2P6 ...134 -5.7 ...164 -.01 .VN2P6 ...166 -.151 ...196 1. .VN2P6 ...199 .657 ...254 -.288 .VN2P6 ...258 -.372 ...264 .085 .VN2P6 ...260 -.315 ...000 .0545 .VN3P9 ...134 -7.45 ...164 -.015 .VN3P9 ...166 -.227 ...197 1. .VN3P9 ...199 1.1306 ...255 -.216 .VN3P9 ...259 -.427 ...264 .085 .VN3P9 ...260 -.331 ...000 .0577 .VN4P9 ...134 -7.92 ...164 -.086 .VN4P9 ...166 -1.299 ...198 1. .VN4P9 ...199 .8789 ...255 -.23 .VN4P9 ...259 -.394 ...264 .085 .VN4P9 ...260 -.279 ...000 .0577 .VN2P9 ...134 -5.7 ...164 -.01 .VN2P9 ...166 -.151 ...196 1. .VN2P9 ...199 1.2129 ...255 -.235 .VN2P9 ...259 -.349 ...264 .085 .VN2P9 ...260 -.395 ...000 .0577 .NIMP1 ...176 -1. ...177 -8.5 .NIMP1 ...178 -62.5 ...187 -100. .NIMP1 ...188 -55.95 ...000 3.4736 .NIMP2 ...000 3.1736 ...176 -1. .NIMP2 ...177 -.9 ...178 16. .NIMP2 ...187 20. ...188 -46.04 .C4FVN ...176 1. ...177 64. .C4FVN ...178 115. ...184 1. .C4FVN ...187 100. ...188 64. .WSDIS ...023 .92 ...024 1. .WSDIS ...025 1. ...176 -.08 .WSDIS ...177 -.856 ...178 -3.72 .WSDIS ...187 -4.656 ...188 -4.4312 .WSDIS ...000 -4.663 .C5TVN ...176 -1. ...177 -15. .C5TVN ...178 -100. ...183 1. .C5TVN ...184 .1614 ...187 -100. .C5TVN ...188 -60.28 .ST13T ...043 1. ...044 -.7 .ST13T ...045 1. ...176 -.3 .ST13T ...178 6.3 ...187 6. .ST13T ...188 -19.314 ...000 .0177 .VN0SC ...176 1. ...177 8.5 .VN0SC ...178 62.5 ...180 -.62 .VN0SC ...181 -.38 ...187 100. .VN0SC ...188 55.95 ...193 .652 .VN0SC ...194 .652 ...000 .0005 .VN4VN ...176 -1. ...177 -.9 .VN4VN ...178 16. ...179 1. .VN4VN ...187 20. ...188 -46.04 .VN2PH ...176 1. ...177 2.2 .VN2PH ...178 -16. ...187 22.4 .VN2PH ...188 49.12 ...194 .43 .VN2PH ...195 .43 ...196 -1. .VN3PH ...176 1. ...177 1.1 .VN3PH ...178 -30. ...187 -7.4 .VN3PH ...188 48.08 ...192 .534 .VN3PH ...195 .534 ...197 -1. .VN1SC ...176 1. ...177 11. .VN1SC ...178 94. ...180 -.419 .VN1SC ...181 -.581 ...187 100. .VN1SC ...188 59. ...192 .742 .VN1SC ...193 .742 ...000 .0005 .C4TS2 ...176 1. ...177 64. .C4TS2 ...178 115. ...187 100. .C4TS2 ...188 64. ...189 1. .C4TS2 ...210 1. ...000 -2.8721 .C5TS2 ...176 1. ...177 15. .C5TS2 ...178 100. ...187 100. .C5TS2 ...188 60.28 ...189 1. .C5TS2 ...210 1. ...000 -2.8721 .VN2S2 ...176 1. ...177 2.2 .VN2S2 ...178 -16. ...187 22.4 .VN2S2 ...188 49.12 ...189 1. .VN2S2 ...210 1. ...000 -2.8721 .VN3S2 ...176 1. ...177 1.1 .VN3S2 ...178 -30. ...187 -7.4 .VN3S2 ...188 48.08 ...189 1. .VN3S2 ...210 1. ...000 -2.8721 .VN4S2 ...176 1. ...177 .9 .VN4S2 ...178 -16. ...187 -20. .VN4S2 ...188 46.04 ...189 1. .VN4S2 ...210 1. ...000 -2.8721 .VN0S2 ...176 1. ...177 8.5 .VN0S2 ...178 62.5 ...187 100. .VN0S2 ...188 55.95 ...189 1. .VN0S2 ...210 1. ...000 -2.8721 .VN1RF ...176 1. ...177 11. .VN1RF ...178 94. ...187 100. .VN1RF ...188 59. ...264 -.71 .VN1RF ...265 .71 .VN2RF ...176 1. ...177 2.2 .VN2RF ...178 -16. ...188 49.12 .VN2RF ...187 22.4 ...264 -.74 .VN2RF ...265 .74 .VN3RF ...176 1. ...177 1.1 .VN3RF ...178 -30. ...187 -7.4 .VN3RF ...188 48.08 ...264 -.75 .VN3RF ...265 .75 .VN0RF ...176 1. ...177 8.5 .VN0RF ...178 62.5 ...187 100. .VN0RF ...188 55.95 ...264 -.72 .VN0RF ...265 .72 .C4TS1 ...176 1. ...272 50.5 .C4TS1 ...177 64. ...178 115. .C4TS1 ...187 100. ...188 64. .C4TS1 ...189 1. ...205 1. .C4TS1 ...206 .096 ...207 -.126 .C4TS1 ...208 55. ...209 -50. .C4TS1 ...000 -2.8721 .C5TS1 ...176 1. ...177 15. .C5TS1 ...272 1.5 ...178 100. .C5TS1 ...187 100. ...188 60.28 .C5TS1 ...189 1. ...205 1. .C5TS1 ...206 .05 ...207 -.08 .C5TS1 ...208 50. ...209 -50. .C5TS1 ...000 -2.8721 .VN1S1 ...176 1. ...177 11. .VN1S1 ...178 94. ...187 100. .VN1S1 ...188 59. ...189 1. .VN1S1 ...205 1. ...206 .03 .VN1S1 ...207 -.06 ...208 47. .VN1S1 ...209 -50. ...272 -2.5 .VN1S1 ...000 -2.8721 .VN2S1 ...176 1. ...177 2.2 .VN2S1 ...178 -16. ...187 22.4 .VN2S1 ...188 49.12 ...189 1. .VN2S1 ...205 1. ...206 -.06 .VN2S1 ...207 .03 ...208 -50. .VN2S1 ...209 14. ...272 -11.3 .VN2S1 ...000 -2.8721 .VN3S1 ...176 1. ...177 1.1 .VN3S1 ...178 -30. ...187 -7.4 .VN3S1 ...188 48.08 ...189 1. .VN3S1 ...205 1. ...206 -.069 .VN3S1 ...207 .039 ...208 -73. .VN3S1 ...209 45. ...272 -12.4 .VN3S1 ...000 -2.8721 .VN4S1 ...176 1. ...177 .9 .VN4S1 ...178 -16. ...187 -20. .VN4S1 ...188 46.04 ...189 1. .VN4S1 ...205 1. ...206 -.083 .VN4S1 ...207 .053 ...208 -68. .VN4S1 ...209 60. ...272 -12.6 .VN4S1 ...000 -2.8721 .VN0S1 ...176 1. ...177 8.5 .VN0S1 ...178 62.5 ...187 100. .VN0S1 ...188 55.95 ...189 1. .VN0S1 ...205 1. ...206 .006 .VN0S1 ...207 -.036 ...208 15. .VN0S1 ...209 -50. ...272 -5. .VN0S1 ...000 -2.8721 .NJP46 ...039 3.6 ...040 -4.4 .NJP46 ...041 -1. ...050 -1. .NJP46 ...176 1. ...177 6. .NJP46 ...178 26. ...187 54. .NJP46 ...188 53.08 ...189 1. .NJP46 ...000 -.0087 .NJP47 ...039 4.6 ...040 -5.4 .NJP47 ...041 -1. ...050 -1. .NJP47 ...176 1. ...177 7. .NJP47 ...178 27.5 ...187 54.8 .NJP47 ...188 53.27 ...189 1. .NJP47 ...000 -.0087 .NJP48 ...039 5.6 ...040 -6.4 .NJP48 ...041 -1. ...050 -1. .NJP48 ...176 1. ...177 8. .NJP48 ...178 29. ...187 55.6 .NJP48 ...188 53.46 ...189 1. .NJP48 ...000 -.0087 .VNFEE ...224 1.7 ...225 -3.7 .VNFEE ...226 -.26 ...227 -19.7 .VNFEE ...228 -1.8 ...229 -8.2 .VNFEE ...231 14.95 ...232 -31.5 .VNFEE ...230 12.86 ...222 -1. .VNFEE ...246 -1. ...247 -1. .VNFEE ...176 1. ...177 10.7 .VNFEE ...178 46.5 ...187 58.2 .VNFEE ...188 55.39 ...189 1. .HNGWR ...014 1. ...021 1. .HNGWR ...142 -.34 ...164 -.366 .HNGWR ...166 -.091 ...176 -.2857 .HNGWR ...177 -1.9999 ...178 -5.3997 .HNGWR ...187 -11.5709 ...188 -15.105 .HNGWR ...200 -.0043 ...202 -.002 .HNGWR ...260 -.00112 ...000 2.8145 .INGNR ...013 1. ...021 1. .INGNR ...142 -.34 ...164 -.366 .INGNR ...166 -.9088 ...176 -.2856 .INGNR ...177 -1.9992 ...178 -5.3978 .INGNR ...187 -11.5382 ...188 -15.105 .INGNR ...200 -.0044 ...202 -.002 .INGNR ...260 -.00112 ...000 2.8317 .B1MW2 ...011 1. ...019 1. .B1MW2 ...034 -.135 ...145 -.266 .B1MW2 ...154 -.152 ...164 -.21 .B1MW2 ...166 1.4839 ...176 -.2018 .B1MW2 ...177 -1.4126 ...178 -3.814 .B1MW2 ...187 -11.7448 ...188 -10.7963 .B1MW2 ...200 -.0172 ...202 -.008 .B1MW2 ...260 -.00504 ...000 2.9089 .TNTWT ...017 .746 ...058 -.29 .TNTWT ...142 -.238 ...145 -.035 .TNTWT ...158 -.242 ...159 -.048 .TNTWT ...164 -.29 ...166 3.69 .TNTWT ...176 -.1292 ...177 -.9044 .TNTWT ...178 -2.1189 ...187 -5.5427 .TNTWT ...188 -7.2107 ...200 -.0058 .TNTWT ...202 -.006 ...260 -.00336 .TNTWT ...000 3.215 .TNBWT ...017 1.111 ...057 -.205 .TNBWT ...142 -.238 ...145 -.035 .TNBWT ...158 -.237 ...159 -.138 .TNBWT ...164 -.205 ...166 2.714 .TNBWT ...176 -.1292 ...177 -.9044 .TNBWT ...178 -2.1189 ...187 -5.5427 .TNBWT ...188 -7.2107 ...200 -.0058 .TNBWT ...202 -.006 ...260 -.00336 .TNBWT ...000 3.215 .KNGWR ...299 1. ...012 -1. .KNGWR ...021 1. ...142 -.28 .KNGWR ...164 -.467 ...166 .601 .KNGWR ...176 -.2321 ...177 -1.6247 .KNGWR ...178 -4.4099 ...187 -8.9823 .KNGWR ...188 -12.0181 ...200 -.0069 .KNGWR ...202 -.005 ...260 -.00504 .KNGWR ...000 2.6929 .KNGWC ...012 -1. ...299 1. .KNGWC ...022 1. ...142 -.28 .KNGWC ...146 .28 ...164 -.467 .KNGWC ...166 .601 ...176 -.2321 .KNGWC ...177 -1.6247 ...178 -4.4099 .KNGWC ...187 -8.9823 ...188 -12.0181 .KNGWC ...200 -.0069 ...202 -.005 .KNGWC ...260 -.00504 ...000 2.6957 .TNLWT ...017 .746 ...059 -.29 .TNLWT ...060 -.03 ...142 -.238 .TNLWT ...145 -.035 ...158 -.26 .TNLWT ...159 -.03 ...164 -.29 .TNLWT ...166 3.69 ...176 -.1292 .TNLWT ...177 -.9044 ...178 -2.1189 .TNLWT ...187 -5.5427 ...188 -7.2107 .TNLWT ...200 -.0058 ...202 -.006 .TNLWT ...260 -.00336 ...000 3.215 .A5MW3 ...010 1. ...020 .111 .A5MW3 ...046 -.126 ...145 -.222 .A5MW3 ...155 -.019 ...164 -.36 .A5MW3 ...166 .3341 ...176 -.2729 .A5MW3 ...177 -1.9103 ...178 -3.8479 .A5MW3 ...187 -8.9328 ...188 -13.9793 .A5MW3 ...200 .0039 ...202 -.001 .A5MW3 ...260 -.0017 ...000 2.8771 .B5MW3 ...011 1. ...020 .111 .B5MW3 ...046 -.116 ...145 -.16 .B5MW3 ...155 -.025 ...164 -.39 .B5MW3 ...166 .0148 ...176 -.2847 .B5MW3 ...177 -1.9929 ...178 -3.8435 .B5MW3 ...187 -10.9325 ...188 -14.8044 .B5MW3 ...200 -.0083 ...202 -.008 .B5MW3 ...260 -.00504 ...000 2.9066 .T5TWT ...017 .746 ...037 -.15 .T5TWT ...058 -.29 ...142 -.088 .T5TWT ...145 -.035 ...158 -.242 .T5TWT ...159 -.048 ...164 -.29 .T5TWT ...166 3.69 ...176 -.1292 .T5TWT ...177 -.9044 ...178 -2.1189 .T5TWT ...187 -5.5427 ...188 -7.2107 .T5TWT ...200 -.0058 ...202 -.006 .T5TWT ...260 -.00336 ...000 3.215 .T5BWT ...017 1.111 ...037 -.15 .T5BWT ...057 -.205 ...142 -.088 .T5BWT ...145 -.035 ...158 -.237 .T5BWT ...159 -.138 ...164 -.205 .T5BWT ...166 2.724 ...176 -.1292 .T5BWT ...177 -.9044 ...178 -2.1189 .T5BWT ...187 -5.5427 ...188 -7.2107 .T5BWT ...200 -.0058 ...202 -.006 .T5BWT ...260 -.00336 ...000 3.215 .T5LWT ...017 .746 ...037 -.15 .T5LWT ...059 -.29 ...060 -.03 .T5LWT ...142 -.088 ...145 -.035 .T5LWT ...158 -.26 ...159 -.03 .T5LWT ...164 -.29 ...166 3.69 .T5LWT ...176 -.1292 ...177 -.9044 .T5LWT ...178 -2.1189 ...187 -5.5427 .T5LWT ...188 -7.2107 ...200 -.0058 .T5LWT ...202 -.006 ...260 -.00336 .T5LWT ...000 3.215 .B1MN3 ...011 1. ...020 .111 .B1MN3 ...034 -.116 ...145 -.306 .B1MN3 ...164 -.342 ...166 .5595 .B1MN3 ...176 -.2018 ...177 -1.4126 .B1MN3 ...178 -3.814 ...187 -11.7448 .B1MN3 ...188 -10.7963 ...200 -.0172 .B1MN3 ...202 -.008 ...260 -.00504 .B1MN3 ...000 2.9061 .QKMW2 ...026 -.1343 ...016 1. .QKMW2 ...019 1. ...027 -.235 .QKMW2 ...145 -.115 ...153 -.062 .QKMW2 ...154 -.146 ...164 -.14 .QKMW2 ...166 .5247 ...176 -.2755 .QKMW2 ...177 -1.9285 ...178 -5.2345 .QKMW2 ...187 -6.9977 ...188 -14.5023 .QKMW2 ...200 -.0125 ...202 -.009 .QKMW2 ...260 -.0028 ...000 2.9969 .IKMW2 ...026 -.1293 ...013 1. .IKMW2 ...019 1. ...027 -.19 .IKMW2 ...145 -.19 ...153 -.037 .IKMW2 ...154 -.193 ...164 -.16 .IKMW2 ...166 1.589 ...176 -.2165 .IKMW2 ...177 -1.5155 ...178 -6.5167 .IKMW2 ...187 -13.8127 ...188 -11.6585 .IKMW2 ...200 -.0095 ...202 -.002 .IKMW2 ...260 -.00112 ...000 2.8409 .JNGW2 ...015 1. ...019 1. .JNGW2 ...142 -.299 ...153 -.05 .JNGW2 ...154 -.175 ...164 -.18 .JNGW2 ...166 1.787 ...176 -.1965 .JNGW2 ...177 -1.3755 ...178 -5.8164 .JNGW2 ...179 -.085 ...187 -12.3599 .JNGW2 ...188 -10.5776 ...200 -.0065 .JNGW2 ...202 -.004 ...260 -.00224 .JNGW2 ...000 2.8236 .AKMW2 ...026 -.1143 ...010 1. .AKMW2 ...019 1. ...027 -.2 .AKMW2 ...145 -.16 ...153 -.052 .AKMW2 ...154 -.2 ...164 -.16 .AKMW2 ...166 1.5197 ...176 -.2232 .AKMW2 ...177 -1.5624 ...178 -6.071 .AKMW2 ...187 -9.7315 ...188 -11.3765 .AKMW2 ...200 -.0008 ...202 -.001 .AKMW2 ...260 -.00168 ...000 2.8796 .KN8W3 ...012 -1. ...020 .132 .KN8W3 ...299 1. ...032 -.7 .KN8W3 ...033 -.196 ...155 -.06 .KN8W3 ...164 -.437 ...166 1.0927 .KN8W3 ...176 -.1429 ...177 -1.0003 .KN8W3 ...178 -4.2156 ...179 -.08 .KN8W3 ...187 -9.7029 ...188 -7.638 .KN8W3 ...200 -.0161 ...202 -.005 .KN8W3 ...260 -.00504 ...000 2.6992 .BKMW2 ...026 -.1086 ...011 1. .BKMW2 ...019 1. ...027 -.19 .BKMW2 ...145 -.14 ...153 -.042 .BKMW2 ...154 -.187 ...164 -.21 .BKMW2 ...166 1.484 ...176 -.1963 .BKMW2 ...177 -1.3741 ...178 -4.829 .BKMW2 ...187 -11.7976 ...188 -10.5256 .BKMW2 ...200 -.0177 ...202 -.008 .BKMW2 ...260 -.00504 ...000 2.9089 .KRMN2 ...299 1. ...028 -.0777 .KRMN2 ...012 -1. ...019 1. .KRMN2 ...029 -.11152 ...145 -.12 .KRMN2 ...153 -.08 ...154 -.182 .KRMN2 ...164 -.255 ...166 2.274 .KRMN2 ...176 -.2015 ...177 -1.4105 .KRMN2 ...178 -3.9091 ...187 -9.1481 .KRMN2 ...188 -10.4982 ...200 -.0115 .KRMN2 ...202 -.005 ...260 -.00504 .KRMN2 ...000 2.7023 .QKMN3 ...016 1. ...020 .118 .QKMN3 ...026 -.1229 ...027 -.215 .QKMN3 ...145 -.155 ...155 -.075 .QKMN3 ...164 -.253 ...166 -.3722 .QKMN3 ...176 -.2755 ...177 -1.9285 .QKMN3 ...178 -5.2345 ...187 -6.9977 .QKMN3 ...188 -14.5023 ...200 -.0125 .QKMN3 ...202 -.009 ...260 -.0028 .QKMN3 ...000 2.9941 .A1GW2 ...010 1. ...019 1. .A1GW2 ...034 -.141 ...142 -.212 .A1GW2 ...153 -.054 ...154 -.2 .A1GW2 ...164 -.16 ...166 1.5197 .A1GW2 ...176 -.2286 ...177 -1.6002 .A1GW2 ...178 -3.7033 ...187 -9.5326 .A1GW2 ...188 -11.8026 ...200 -.0004 .A1GW2 ...202 -.001 ...260 -.00168 .A1GW2 ...000 2.8797 .B1GW2 ...011 1. ...019 1. .B1GW2 ...034 -.135 ...142 -.216 .B1GW2 ...153 -.015 ...154 -.187 .B1GW2 ...164 -.21 ...166 1.4839 .B1GW2 ...176 -.2018 ...177 -1.4126 .B1GW2 ...178 -3.814 ...187 -11.7448 .B1GW2 ...188 -10.7963 ...200 -.0172 .B1GW2 ...202 -.008 ...260 -.00504 .B1GW2 ...000 2.9089 .IRGW3 ...028 -.1086 ...013 1. .IRGW3 ...020 .111 ...029 -.1558 .IRGW3 ...142 -.15 ...155 -.075 .IRGW3 ...164 -.355 ...166 .5765 .IRGW3 ...176 -.2165 ...177 -1.5155 .IRGW3 ...178 -6.6249 ...187 -13.8127 .IRGW3 ...188 -11.6585 ...200 -.0095 .IRGW3 ...202 -.002 ...260 -.00112 .IRGW3 ...000 2.8381 .IKMN3 ...013 1. ...020 .118 .IKMN3 ...026 -.0983 ...027 -.172 .IKMN3 ...145 -.216 ...155 -.035 .IKMN3 ...164 -.323 ...166 .435 .IKMN3 ...176 -.2424 ...177 -1.6968 .IKMN3 ...178 -6.3266 ...187 -13.2108 .IKMN3 ...188 -12.9563 ...200 -.0076 .IKMN3 ...202 -.002 ...260 -.00112 .IKMN3 ...000 2.8383 .IKMN4 ...013 1. ...020 .139 .IKMN4 ...026 -.0983 ...027 -.172 .IKMN4 ...145 -.216 ...155 -.118 .IKMN4 ...164 -.24 ...166 1.6186 .IKMN4 ...176 -.2421 ...177 -1.6947 .IKMN4 ...178 -6.3914 ...187 -13.1702 .IKMN4 ...188 -12.9378 ...200 -.0079 .IKMN4 ...202 -.002 ...260 -.00112 .IKMN4 ...000 2.8383 .AKMW3 ...010 1. ...020 .111 .AKMW3 ...026 -.1143 ...027 -.2 .AKMW3 ...145 -.16 ...155 -.052 .AKMW3 ...164 -.36 ...166 .3341 .AKMW3 ...176 -.2232 ...177 -1.5624 .AKMW3 ...178 -6.071 ...187 -9.7315 .AKMW3 ...188 -11.3765 ...200 -.0008 .AKMW3 ...202 -.001 ...260 -.00168 .AKMW3 ...000 2.8768 .CNGW3 ...294 1. ...020 .114 .CNGW3 ...142 -.252 ...155 -.081 .CNGW3 ...000 2.38 ...164 -.493 .CNGW3 ...166 3.436 ...176 -.1409 .CNGW3 ...177 -.9863 ...178 -2.8462 .CNGW3 ...179 -.026 ...187 -7.045 .CNGW3 ...188 -7.7143 ...200 -.0031 .CNGW3 ...202 -.003 ...260 -.00056 .A5GW3 ...010 1. ...020 .111 .A5GW3 ...046 -.126 ...142 -.164 .A5GW3 ...155 -.077 ...164 -.36 .A5GW3 ...166 .3341 ...176 -.2729 .A5GW3 ...177 -1.9103 ...178 -3.8479 .A5GW3 ...187 -8.9238 ...188 -13.9397 .A5GW3 ...200 .0039 ...202 -.001 .A5GW3 ...260 -.0017 ...000 2.8771 .B5GW3 ...011 1. ...020 .111 .B5GW3 ...046 -.116 ...142 -.11 .B5GW3 ...155 -.075 ...164 -.39 .B5GW3 ...166 .0148 ...176 -.2847 .B5GW3 ...177 -1.9929 ...178 -3.8435 .B5GW3 ...187 -10.9325 ...188 -14.8044 .B5GW3 ...200 -.0083 ...202 -.008 .B5GW3 ...260 -.00504 ...000 2.9066 .INGW3 ...013 1. ...020 .115 .INGW3 ...142 -.306 ...155 -.066 .INGW3 ...164 -.334 ...166 .346 .INGW3 ...176 -.1882 ...177 -1.3174 .INGW3 ...178 -6.7376 ...179 -.09 .INGW3 ...187 -14.2279 ...188 -10.2381 .INGW3 ...200 -.0118 ...202 -.002 .INGW3 ...260 -.00112 ...000 2.8379 .A1GW3 ...010 1. ...020 .111 .A1GW3 ...034 -.141 ...142 -.212 .A1GW3 ...155 -.054 ...164 -.36 .A1GW3 ...166 .3341 ...176 -.2286 .A1GW3 ...177 -1.6002 ...178 -3.7033 .A1GW3 ...187 -9.5326 ...188 -11.8026 .A1GW3 ...200 -.0004 ...202 -.001 .A1GW3 ...260 -.00168 ...000 2.8769 .B1GW3 ...011 1. ...020 .111 .B1GW3 ...034 -.135 ...142 -.216 .B1GW3 ...155 -.022 ...164 -.39 .B1GW3 ...166 .0148 ...176 -.2018 .B1GW3 ...177 -1.4126 ...178 -3.814 .B1GW3 ...187 -11.7448 ...188 -10.7963 .B1GW3 ...200 -.0172 ...202 -.008 .B1GW3 ...260 -.00504 ...000 2.9061 .KTGW1 ...299 1. ...012 -1. .KTGW1 ...018 1. ...053 -.152 .KTGW1 ...142 -.143 ...149 -.046 .KTGW1 ...150 -.105 ...151 -.065 .KTGW1 ...152 -.065 ...164 -.255 .KTGW1 ...166 2.274 ...176 -.1388 .KTGW1 ...177 -.9716 ...178 -4.2334 .KTGW1 ...187 -9.6882 ...188 -7.423 .KTGW1 ...200 -.0162 ...202 -.005 .KTGW1 ...260 -.00504 ...000 2.6988 .KWGW1 ...012 -1. ...299 1. .KWGW1 ...018 1. ...141 -.245 .KWGW1 ...142 -.245 ...150 -.1 .KWGW1 ...151 -.065 ...152 -.065 .KWGW1 ...164 -.255 ...166 2.274 .KWGW1 ...176 -.1938 ...177 -1.3566 .KWGW1 ...178 -3.9148 ...187 -9.1474 .KWGW1 ...188 -10.144 ...200 -.0122 .KWGW1 ...202 -.005 ...025 -.05 .KWGW1 ...260 -.00504 ...000 2.6992 .KKMN1 ...299 1. ...026 -.0777 .KKMN1 ...012 -1. ...018 1. .KKMN1 ...027 -.136 ...145 -.12 .KKMN1 ...149 -.027 ...150 -.105 .KKMN1 ...151 -.065 ...152 -.065 .KKMN1 ...164 -.255 ...166 2.274 .KKMN1 ...176 -.2015 ...177 -1.4105 .KKMN1 ...178 -3.9091 ...187 -9.1481 .KKMN1 ...188 -10.4982 ...200 -.0115 .KKMN1 ...202 -.005 ...260 -.00504 .KKMN1 ...000 2.6992 .K5GW1 ...299 1. ...012 -1. .K5GW1 ...018 1. ...046 -.1 .K5GW1 ...142 -.07 ...149 -.082 .K5GW1 ...150 -.105 ...151 -.065 .K5GW1 ...152 -.065 ...164 -.255 .K5GW1 ...166 2.274 ...176 -.2377 .K5GW1 ...177 -1.6639 ...178 -4.5638 .K5GW1 ...187 -8.9851 ...188 -12.2986 .K5GW1 ...200 -.0063 ...202 -.005 .K5GW1 ...260 -.00504 ...000 2.6994 .QKGW2 ...026 -.1343 ...016 1. .QKGW2 ...019 1. ...027 -.235 .QKGW2 ...142 -.09 ...153 -.087 .QKGW2 ...154 -.146 ...164 -.14 .QKGW2 ...166 .5247 ...176 -.2755 .QKGW2 ...177 -1.9285 ...178 -5.2345 .QKGW2 ...187 -6.9977 ...188 -14.5023 .QKGW2 ...200 -.0125 ...202 -.009 .QKGW2 ...260 -.0028 ...000 2.9969 .K1GW1 ...299 1. ...012 -1. .K1GW1 ...018 1. ...034 -.11 .K1GW1 ...142 -.129 ...149 -.052 .K1GW1 ...150 -.105 ...151 -.065 .K1GW1 ...152 -.065 ...164 -.255 .K1GW1 ...166 2.274 ...176 -.1928 .K1GW1 ...177 -1.3494 ...178 -3.8946 .K1GW1 ...187 -9.1474 ...188 -10.0719 .K1GW1 ...200 -.0122 ...202 -.005 .K1GW1 ...260 -.00504 ...000 2.6992 .IKGW2 ...026 -.1293 ...013 1. .IKGW2 ...019 1. ...027 -.19 .IKGW2 ...142 -.15 ...153 -.077 .IKGW2 ...154 -.193 ...164 -.16 .IKGW2 ...166 1.589 ...176 -.2165 .IKGW2 ...177 -1.5155 ...178 -6.5167 .IKGW2 ...187 -13.8127 ...188 -11.6585 .IKGW2 ...200 -.0095 ...202 -.002 .IKGW2 ...260 -.00112 ...000 2.8409 .KNGW1 ...299 1. ...012 -1. .KNGW1 ...018 1. ...142 -.28 .KNGW1 ...150 -.082 ...151 -.065 .KNGW1 ...152 -.065 ...164 -.255 .KNGW1 ...166 2.274 ...176 -.1429 .KNGW1 ...177 -1.0003 ...178 -4.2156 .KNGW1 ...179 -.08 ...187 -9.7029 .KNGW1 ...188 -7.638 ...200 -.0161 .KNGW1 ...202 -.005 ...260 -.00504 .KNGW1 ...000 2.6989 .A4GW2 ...010 1. ...019 1. .A4GW2 ...039 -.4248 ...040 .2832 .A4GW2 ...041 -.177 ...154 -.2 .A4GW2 ...164 -.16 ...166 1.5197 .A4GW2 ...176 -.1792 ...177 -1.2544 .A4GW2 ...178 -3.7811 ...187 -10.4474 .A4GW2 ...188 -9.3901 ...200 -.0048 .A4GW2 ...202 -.001 ...260 -.00168 .A4GW2 ...000 2.8794 .AKGW2 ...026 -.1143 ...010 1. .AKGW2 ...019 1. ...027 -.2 .AKGW2 ...142 -.104 ...153 -.108 .AKGW2 ...154 -.2 ...164 -.16 .AKGW2 ...166 1.52 ...176 -.2232 .AKGW2 ...177 -1.5624 ...178 -4.955 .AKGW2 ...187 -9.7315 ...188 -11.5484 .AKGW2 ...200 -.0008 ...202 -.001 .AKGW2 ...260 -.00168 ...000 2.8796 .BKGW2 ...026 -.1086 ...011 1. .BKGW2 ...019 1. ...027 -.19 .BKGW2 ...142 -.09 ...153 -.092 .BKGW2 ...154 -.187 ...164 -.21 .BKGW2 ...166 1.4839 ...176 -.1964 .BKGW2 ...177 -1.3748 ...178 -4.8511 .BKGW2 ...187 -11.8036 ...188 -10.531 .BKGW2 ...200 -.0176 ...202 -.008 .BKGW2 ...260 -.00504 ...000 2.9089 .B4GW2 ...011 1. ...019 1. .B4GW2 ...039 -.3984 ...040 .2656 .B4GW2 ...041 -.166 ...142 -.094 .B4GW2 ...153 -.045 ...154 -.283 .B4GW2 ...164 -.21 ...166 1.4839 .B4GW2 ...176 -.146 ...177 -1.022 .B4GW2 ...178 -6.5846 ...187 -12.2932 .B4GW2 ...188 -7.976 ...200 -.021 .B4GW2 ...202 -.008 ...260 -.00504 .B4GW2 ...000 2.9086 .C4GW3 ...294 1. ...020 .114 .C4GW3 ...000 2.38 ...039 -.3504 .C4GW3 ...040 .2336 ...041 -.146 .C4GW3 ...142 -.124 ...155 -.118 .C4GW3 ...164 -.493 ...166 3.436 .C4GW3 ...176 -.1089 ...177 -.7623 .C4GW3 ...178 -2.5918 ...187 -7.2527 .C4GW3 ...188 -6.0178 ...200 -.0061 .C4GW3 ...202 -.003 ...260 -.00056 .QKGW3 ...016 1. ...020 .118 .QKGW3 ...026 -.1343 ...027 -.235 .QKGW3 ...142 -.09 ...155 -.12 .QKGW3 ...164 -.253 ...166 -.28 .QKGW3 ...176 -.2756 ...177 -1.9292 .QKGW3 ...178 -5.264 ...187 -7.0278 .QKGW3 ...188 -14.5076 ...200 -.0124 .QKGW3 ...202 -.009 ...260 -.0028 .QKGW3 ...000 2.9941 .QKGW4 ...016 1. ...020 .139 .QKGW4 ...026 -.1343 ...027 -.235 .QKGW4 ...142 -.09 ...155 -.203 .QKGW4 ...164 -.17 ...166 .3468 .QKGW4 ...176 -.2755 ...177 -1.9285 .QKGW4 ...178 -4.408 ...187 -6.9977 .QKGW4 ...188 -14.5023 ...200 -.0125 .QKGW4 ...202 -.009 ...260 -.0028 .QKGW4 ...000 2.9941 .A4GW3 ...010 1. ...020 .111 .A4GW3 ...039 -.4248 ...040 .2832 .A4GW3 ...041 -.177 ...142 -.23 .A4GW3 ...155 -.045 ...164 -.36 .A4GW3 ...166 .3341 ...176 -.1792 .A4GW3 ...177 -1.2544 ...178 -3.7811 .A4GW3 ...187 -10.4474 ...188 -9.3901 .A4GW3 ...200 -.0048 ...202 -.001 .A4GW3 ...260 -.00168 ...000 2.8766 .BKGW3 ...011 1. ...020 .111 .BKGW3 ...026 -.1086 ...027 -.19 .BKGW3 ...142 -.09 ...155 -.099 .BKGW3 ...164 -.39 ...166 1.5031 .BKGW3 ...176 -.1964 ...177 -1.3748 .BKGW3 ...178 -4.8511 ...187 -11.8036 .BKGW3 ...188 -10.531 ...200 -.0176 .BKGW3 ...202 -.008 ...260 -.00504 .BKGW3 ...000 2.9061 .B4GW3 ...011 1. ...020 .111 .B4GW3 ...039 -.3984 ...040 .2656 .B4GW3 ...041 -.166 ...142 -.094 .B4GW3 ...155 -.148 ...164 -.39 .B4GW3 ...166 1.5031 ...176 -.146 .B4GW3 ...177 -1.022 ...178 -6.5846 .B4GW3 ...187 -12.2932 ...188 -7.976 .B4GW3 ...200 -.021 ...202 -.008 .B4GW3 ...260 -.00504 ...000 2.9058 .KNGW2 ...299 1. ...012 -1. .KNGW2 ...019 1. ...142 -.28 .KNGW2 ...154 -.212 ...164 -.255 .KNGW2 ...166 .2274 ...176 -.1429 .KNGW2 ...177 -1.0003 ...178 -4.2156 .KNGW2 ...179 -.08 ...187 -9.7029 .KNGW2 ...188 -7.638 ...200 -.0161 .KNGW2 ...202 -.005 ...260 -.00504 .KNGW2 ...000 2.702 .K5GW3 ...012 -1. ...020 .114 .K5GW3 ...299 1. ...046 -.1 .K5GW3 ...142 -.07 ...155 -.12 .K5GW3 ...164 -.452 ...166 .786 .K5GW3 ...176 -.2377 ...177 -1.6639 .K5GW3 ...178 -4.5638 ...187 -8.9851 .K5GW3 ...188 -12.2986 ...200 -.0063 .K5GW3 ...202 -.005 ...260 -.00504 .K5GW3 ...000 2.6997 .K5GW4 ...012 -1. ...020 .139 .K5GW4 ...299 1. ...046 -.1 .K5GW4 ...142 -.07 ...155 -.242 .K5GW4 ...164 -.33 ...166 2.897 .K5GW4 ...176 -.2377 ...177 -1.6639 .K5GW4 ...178 -4.5638 ...187 -8.9851 .K5GW4 ...188 -12.2986 ...200 -.0063 .K5GW4 ...202 -.005 ...260 -.00504 .K5GW4 ...000 2.6997 .K1GW3 ...012 -1. ...020 .116 .K1GW3 ...034 -.11 ...142 -.129 .K1GW3 ...155 -.142 ...164 -.4 .K1GW3 ...166 1.249 ...176 -.1928 .K1GW3 ...177 -1.3496 ...178 -3.8946 .K1GW3 ...187 -9.1474 ...188 -10.0719 .K1GW3 ...200 -.0122 ...202 -.005 .K1GW3 ...260 -.00504 ...000 2.6995 .K1GW3 ...299 1. .K1GW4 ...012 -1. ...020 .139 .K1GW4 ...299 1. ...034 -.11 .K1GW4 ...142 -.129 ...155 -.212 .K1GW4 ...164 -.33 ...166 2.897 .K1GW4 ...176 -.1928 ...177 -1.3496 .K1GW4 ...178 -3.8946 ...187 -9.1002 .K1GW4 ...188 -10.0719 ...200 -.0122 .K1GW4 ...202 -.005 ...260 -.00504 .K1GW4 ...000 2.6995 .KNGW3 ...012 -1. ...020 .118 .KNGW3 ...299 1. ...142 -.25 .KNGW3 ...155 -.06 ...164 -.437 .KNGW3 ...166 .955 ...176 -.1429 .KNGW3 ...177 -1.0003 ...178 -4.2156 .KNGW3 ...179 -.08 ...187 -9.7029 .KNGW3 ...188 -7.638 ...200 -.0161 .KNGW3 ...202 -.005 ...260 -.00504 .KNGW3 ...000 2.6992 .KNGW4 ...012 -1. ...020 .139 .KNGW4 ...299 1. ...142 -.25 .KNGW4 ...155 -.167 ...164 -.33 .KNGW4 ...166 2.897 ...176 -.1429 .KNGW4 ...177 -1.0003 ...178 -4.2156 .KNGW4 ...179 -.08 ...187 -9.7029 .KNGW4 ...188 -7.638 ...200 -.0161 .KNGW4 ...202 -.005 ...260 -.00504 .KNGW4 ...000 2.6992 .K4GW1 ...299 1. ...012 -1. .K4GW1 ...018 1. ...039 -.3648 .K4GW1 ...040 .2432 ...041 -.152 .K4GW1 ...142 -.143 ...149 -.046 .K4GW1 ...150 -.105 ...151 -.065 .K4GW1 ...152 -.065 ...164 -.255 .K4GW1 ...166 2.274 ...176 -.1388 .K4GW1 ...177 -.9716 ...178 -4.2334 .K4GW1 ...187 -9.6882 ...188 -7.43 .K4GW1 ...200 -.0162 ...202 -.005 .K4GW1 ...260 -.00504 ...000 2.6988 .K4GW2 ...299 1. ...012 -1. .K4GW2 ...019 1. ...039 -.3648 .K4GW2 ...040 .2432 ...041 -.152 .K4GW2 ...142 -.143 ...153 -.096 .K4GW2 ...154 -.185 ...164 -.255 .K4GW2 ...166 2.274 ...176 -.1388 .K4GW2 ...177 -.9716 ...178 -4.2334 .K4GW2 ...187 -9.6882 ...188 -7.43 .K4GW2 ...200 -.0162 ...202 -.005 .K4GW2 ...260 -.00504 ...000 2.7019 .K4GW3 ...012 -1. ...020 .114 .K4GW3 ...299 1. ...039 -.3648 .K4GW3 ...040 .2432 ...041 -.152 .K4GW3 ...142 -.143 ...155 -.12 .K4GW3 ...164 -.416 ...166 1.192 .K4GW3 ...176 -.1388 ...177 -.9716 .K4GW3 ...178 -4.2334 ...187 -9.6882 .K4GW3 ...188 -7.43 ...200 -.0162 .K4GW3 ...202 -.005 ...260 -.00504 .K4GW3 ...000 2.6991 .KKGN3 ...012 -1. ...020 .118 .KKGN3 ...299 1. ...026 -.0777 .KKGN3 ...027 -.136 ...142 -.117 .KKGN3 ...155 -.11 ...164 -.41 .KKGN3 ...166 1.216 ...176 -.2015 .KKGN3 ...177 -1.4105 ...178 -3.9091 .KKGN3 ...187 -9.1481 ...188 -10.4982 .KKGN3 ...202 -.005 ...200 -.0115 .KKGN3 ...260 -.00504 ...000 2.6995 .K4GW4 ...012 -1. ...020 .139 .K4GW4 ...299 1. ...039 -.3648 .K4GW4 ...040 .2432 ...041 -.152 .K4GW4 ...142 -.143 ...155 -.206 .K4GW4 ...164 -.33 ...166 2.897 .K4GW4 ...176 -.1388 ...177 -.9716 .K4GW4 ...178 -4.2334 ...187 -9.6882 .K4GW4 ...188 -7.43 ...200 -.0162 .K4GW4 ...202 -.005 ...260 -.00504 .K4GW4 ...000 2.6991 .KKGN4 ...012 -1. ...020 .139 .KKGN4 ...299 1. ...026 -.0777 .KKGN4 ...027 -.136 ...142 -.117 .KKGN4 ...155 -.19 ...164 -.33 .KKGN4 ...166 2.897 ...176 -.2015 .KKGN4 ...177 -1.4105 ...178 -3.9091 .KKGN4 ...187 -9.1481 ...188 -10.4982 .KKGN4 ...200 -.0115 ...202 -.005 .KKGN4 ...260 -.00504 ...000 2.6995 .VN3HF ...176 1. ...295 -1. .VN3HF ...177 1.1 ...178 -30. .VN3HF ...187 -7.4 ...188 48.08 .VN3HF ...192 .534 ...195 .534 .VNFHF ...000 .123 ...134 -1.25 .VNFHF ...164 -.03 ...166 -.4092 .VNFHF ...260 -.246 ...295 1. .VNFHF ...296 1. ...297 1. .VNFHF ...298 -.62 RHS ZZZZZZ01 ...000 -7.113 ...010 2.284 ZZZZZZ01 ...011 1.59 ...013 3.99 ZZZZZZ01 ...014 .109 ...015 .69 ZZZZZZ01 ...017 1. ...018 5.216 ZZZZZZ01 ...019 7.233 ...020 1. ZZZZZZ01 ...021 .65 ...023 .1395 ZZZZZZ01 ...024 .1805 ...030 1.3453 ZZZZZZ01 ...035 .4207 ...038 .6665 ZZZZZZ01 ...043 .5 ...048 .1019 ZZZZZZ01 ...050 .935 ...055 .96 ZZZZZZ01 ...057 -.0098 ...059 -.2662 ZZZZZZ01 ...060 -.0104 ...120 .099 ZZZZZZ01 ...133 1.6342 ...134 1.8 ZZZZZZ01 ...135 16.5 ...136 1.5 ZZZZZZ01 ...138 .1938 ...142 -.0637 ZZZZZZ01 ...143 .6344 ...144 .6045 ZZZZZZ01 ...147 .5789 ...148 .347 ZZZZZZ01 ...150 -.0459 ...151 -.1422 ZZZZZZ01 ...152 -.2448 ...156 -12.1938 ZZZZZZ01 ...157 -.6231 ...158 -.2857 ZZZZZZ01 ...159 -.033 ...160 .2314 ZZZZZZ01 ...161 .0675 ...163 4.3845 ZZZZZZ01 ...164 -.3658 ...165 3.8254 ZZZZZZ01 ...166 3.3851 ...167 .0327 ZZZZZZ01 ...168 .0487 ...169 .0775 ZZZZZZ01 ...172 .05 ...174 .205 ZZZZZZ01 ...175 .1375 ...176 .1692 ZZZZZZ01 ...177 1.8446 ...178 9.1385 ZZZZZZ01 ...179 .0495 ...182 .631 ZZZZZZ01 ...185 .5 ...186 1.05 ZZZZZZ01 ...187 10.8308 ...188 9.5531 ZZZZZZ01 ...189 .1692 ...190 2.952 ZZZZZZ01 ...191 1.302 ...192 1. ZZZZZZ01 ...193 1. ...194 1. ZZZZZZ01 ...195 1. ...196 .1181 ZZZZZZ01 ...197 .1181 ...199 1. ZZZZZZ01 ...202 -.0095 ...204 .1107 ZZZZZZ01 ...205 .3953 ...212 .3987 ZZZZZZ01 ...223 2.908 ...234 1.9642 ZZZZZZ01 ...250 1.7 ...261 2.799 ZZZZZZ01 ...263 56.92 ...264 -1.1958 ZZZZZZ01 ...265 .44 ...266 .5 ZZZZZZ01 ...268 .0425 ...270 .1984 ZZZZZZ01 ...276 1.5231 ...277 3.9475 ZZZZZZ01 ...278 1.2884 ...279 .5186 ZZZZZZ01 ...280 -.1901 ...281 .1275 ZZZZZZ01 ...284 42. ...285 3.8 ZZZZZZ01 ...291 4.68 ...292 2.4 ZZZZZZ01 ...293 .1114 ...294 2.264 ZZZZZZ01 ...299 10.57 ...300 .2137 ENDATA DyLP-1.10.4/Data/Sample/nw460.mps0000644000175200017520000000324710430174061014546 0ustar coincoin* * small test problem from Nemhauser and Wolsey, page 460. * * knapsack problem with violated minimal covers * NAME nwp460 ROWS N obj L knap1 L knap2 COLUMNS SET00001 'MARKER' 'INTORG' x1 obj -77.000000 x1 knap1 774.000000 x1 knap2 67.000000 x2 obj -6.000000 x2 knap1 76.000000 x2 knap2 27.000000 x3 obj -3.000000 x3 knap1 22.000000 x3 knap2 794.000000 x4 obj -6.000000 x4 knap1 42.000000 x4 knap2 53.000000 x5 obj -33.000000 x5 knap1 21.000000 x5 knap2 234.000000 x6 obj -13.000000 x6 knap1 760.000000 x6 knap2 32.000000 x7 obj -110.000000 x7 knap1 818.000000 x7 knap2 797.000000 x8 obj -21.000000 x8 knap1 62.000000 x8 knap2 97.000000 x9 obj -47.000000 x9 knap1 785.000000 x9 knap2 435.000000 RHS RHS knap1 1500.000000 RHS knap2 1500.000000 BOUNDS BV ONE x1 1.000000 BV ONE x2 1.000000 BV ONE x3 1.000000 BV ONE x4 1.000000 BV ONE x5 1.000000 BV ONE x6 1.000000 ENDATA DyLP-1.10.4/Data/Sample/brandy.mps0000644000175200017520000021631410662211140015145 0ustar coincoinNAME BRANDY ROWS N 10000A E 10001A E 10002A E 10003A E 10004A L 10006A L 10007A E 10008A L 10009A L 10010A L 10011A L 10012A L 10013A E 10014A L 10015A L 10016A L 10017A L 10018A L 10019A L 10020A L 10021A L 10022A L 10023A L 10024A E 10025A E 10026A E 10027A E 10028A E 10029A E 10030A E 10031A E 10032A E 10033A E 10034A E 10035A E 10036A E 10037A E 10038A E 10039A L 10040A E 10041A E 10042A E 10043A E 10044A E 10045A E 10046A E 10047A E 10048A E 10049A E 10050A E 10051A E 10052A E 10053A E 10054A E 10055A E 10056A E 10057A E 10058A L 10059A L 10060A E 10061A E 10062A E 10063A E 10064A E 10065A E 10066A E 10067A E 10068A E 10069A E 10070A E 10071A E 10072A E 10073A E 10074A E 10075A E 10076A E 10077A E 10078A E 10079A E 10080A E 10081A E 10082A E 10083A E 10084A E 10085A E 10086A E 10087A E 10088A L 10089A E 10090A E 10091A E 10092A E 10093A E 10094A E 10095A E 10096A E 10097A E 10098A E 10099A E 10100A E 10101A E 10102A E 10103A E 10104A E 10105A E 10106A E 10107A E 10108A E 10109A E 10110A E 10111A E 10112A E 10113A E 10114A E 10115A E 10116A E 10117A E 10118A E 10119A E 10120A E 10121A L 10122A E 10123A E 10124A L 10125A E 10126A L 10127A E 10128A E 10129A L 10130A L 10131A L 10132A E 10133A E 10134A E 10135A L 10136A L 10137A E 10138A L 10139A E 10140A E 10141A E 10142A E 10143A E 10144A E 10145A E 10146A E 10147A E 10148A E 10149A E 10150A E 10151A E 10152A E 10153A E 10154A E 10155A E 10156A E 10157A E 10158A E 10159A L 10160A E 10161A L 10162A L 10163A L 10164A E 10165A E 10166A L 10167A L 10168A L 10169A E 10170A E 10171A E 10172A E 10173A E 10174A E 10175A E 10176A E 10177A L 10178A L 10179A L 10180A L 10181A L 10182A L 10183A L 10184A L 10185A L 10186A L 10187A L 10188A L 10189A L 10190A L 10191A L 10192A L 10193A E 10194A L 10195A E 10196A E 10197A E 10198A E 10199A E 10200A E 10201A E 10202A E 10203A E 10204A E 10205A E 10206A E 10207A E 10208A E 10209A E 10210A E 10211A E 10212A E 10213A E 10214A E 10215A E 10216A E 10217A E 10218A E 10219A E 10220A E 10221A COLUMNS 100001 10000A 1. 10056A -1. 100002 10000A 1. 10025A -1. 100100 10006A 1. 10008A 1. 100100 10025A 7. 10043A .003 100100 10044A .067 10045A .022 100100 10056A .01 10063A .22 100100 10064A .1 10065A .112 100100 10066A .349 10068A .125 100100 10144A .02 100101 10006A 1. 10014A 1. 100101 10025A 7.05 10043A .002 100101 10044A .012 10045A .003 100101 10047A .041 10048A .043 100101 10049A .017 10050A .09 100101 10051A .037 10056A .01 100101 10061A .006 10062A .12 100101 10065A .101 10066A .221 100101 10068A .161 10144A .02 100101 10154A .149 100103 10006A 1. 10014A 1. 100103 10025A 7.05 10043A .002 100103 10044A .012 10045A .003 100103 10047A .041 10048A .043 100103 10049A .017 10050A .09 100103 10051A .062 10056A .01 100103 10061A .007 10063A .173 100103 10064A .063 10065A .107 100103 10066A .221 10068A .161 100103 10144A .02 100109 10094A 1. 10107A 1. 100110 10006A 1. 10025A 7.6 100110 10043A .005 10044A .022 100110 10045A .005 10047A .061 100110 10048A .06 10049A .023 100110 10050A .117 10051A .074 100110 10056A .01 10061A .009 100110 10063A .17 10064A .062 100110 10065A .107 10066A .205 100110 10068A .08 10144A .02 100110 10160A 1. 100112 10006A 1. 10025A 7.24 100112 10043A .003 10044A .015 100112 10045A .005 10047A .037 100112 10048A .048 10049A .045 100112 10050A .127 10051A .052 100112 10056A .01 10061A .005 100112 10063A .164 10064A .081 100112 10065A .102 10066A .252 100112 10068A .062 10144A .02 100112 10162A 1. 100113 10006A 1. 10025A 7.17 100113 10043A .002 10044A .007 100113 10045A .002 10047A .036 100113 10048A .041 10049A .019 100113 10050A .098 10051A .058 100113 10056A .01 10061A .006 100113 10063A .179 10064A .068 100113 10065A .118 10066A .25 100113 10068A .117 10144A .02 100113 10163A 1. 100114 10014A -1. 10164A 1. 100120 10007A 1. 10010A 1. 100120 10025A 6.64 10043A .002 100120 10044A .01 10045A .003 100120 10047A .05 10048A .053 100120 10049A .022 10050A .108 100120 10051A .065 10053A .133 100120 10054A .099 10055A .263 100120 10056A .02 10057A .181 100120 10061A .012 10144A .022 100121 10007A 1. 10009A 1. 100121 10025A 5.9 10043A .001 100121 10044A .003 10045A .001 100121 10047A .021 10048A .022 100121 10049A .01 10050A .052 100121 10051A .042 10053A .122 100121 10054A .115 10055A .33 100121 10056A .02 10057A .276 100121 10061A .008 10144A .022 100122 10007A 1. 10025A 6.5 100122 10043A .001 10044A .004 100122 10045A .001 10047A .026 100122 10048A .028 10049A .013 100122 10050A .072 10051A .054 100122 10053A .158 10054A .155 100122 10055A .326 10056A .02 100122 10057A .154 10061A .011 100122 10144A .022 10167A 1. 100125 10007A 1. 10010A 1. 100125 10025A 6.64 10043A .002 100125 10044A .01 10045A .003 100125 10047A .05 10048A .053 100125 10049A .022 10050A .108 100125 10051A .065 10054A .032 100125 10055A .263 10056A .02 100125 10057A .181 10058A .2 100125 10061A .012 10144A .022 100125 10149A -2.23 10150A -.067 100126 10007A 1. 10009A 1. 100126 10025A 5.9 10043A .001 100126 10044A .003 10045A .001 100126 10047A .021 10048A .022 100126 10049A .01 10050A .052 100126 10051A .042 10054A .04 100126 10055A .33 10056A .02 100126 10057A .276 10058A .197 100126 10061A .008 10144A .022 100126 10149A -2.52 10150A -.112 100130 10007A .67 10012A 1. 100130 10025A 5.5 10044A .75 100130 10045A .25 10056A .03 100130 10144A .027 100131 10007A .67 10025A 7. 100131 10044A .05 10045A .95 100131 10056A .03 10122A 1. 100131 10144A .027 100132 10007A .67 10011A 1. 100132 10025A 7.5 10047A .7 100132 10048A .2 10049A .1 100132 10056A .01 10144A .021 100133 10006A 1. 10025A 4. 100133 10044A .75 10045A .25 100133 10056A .03 10144A .027 100133 10159A 1. 100134 10025A 8.5 10044A .05 100134 10045A .95 100140 10048A -.71 10049A -.29 100140 10151A 1. 100150 10043A -.13 10044A -.06 100150 10045A -.05 10046A -.04 100150 10047A -.04 10048A -.04 100150 10049A -.04 10050A -.14 100150 10051A -.05 10070A -.08 100150 10073A -.03 10080A -.07 100150 10081A -.03 10096A -.02 100150 10097A -.01 10098A -.01 100150 10100A 1. 10104A -.0012 100150 10105A -.0012 10107A -.08 100150 10120A -.06 100200 10017A 1. 10018A .565 100200 10041A .032 10043A .047 100200 10044A .007 10045A .027 100200 10046A .049 10056A .03 100200 10069A 1. 10070A .12 100200 10076A .134 10081A .052 100200 10086A .18 10087A .152 100200 10091A .219 10092A .032 100200 10093A .043 10144A .055 100200 10145A -1. 10146A -29. 100200 10147A -.75 100201 10017A 1.25 10018A .539 100201 10041A .032 10043A .041 100201 10044A .005 10045A .024 100201 10046A .044 10056A .03 100201 10069A 1. 10070A .12 100201 10076A .149 10081A .056 100201 10086A .193 10087A .163 100201 10091A .193 10092A .032 100201 10093A .041 10124A .81 100201 10125A .06 10126A .72 100201 10127A -.0015 10144A .058 100201 10145A -1. 10146A -29. 100201 10147A -.75 10207A .82 100203 10017A 1.5 10018A .526 100203 10041A .032 10043A .037 100203 10044A .005 10045A .02 100203 10046A .041 10056A .04 100203 10069A 1. 10070A .12 100203 10076A .16 10081A .058 100203 10086A .203 10087A .17 100203 10091A .175 10092A .032 100203 10093A .04 10124A 1.88 100203 10125A .11 10126A 1.25 100203 10127A -.0025 10144A .061 100203 10145A -1. 10146A -29. 100203 10147A -.75 10207A 1.88 100204 10017A 1. 10018A .758 100204 10041A .032 10043A .065 100204 10044A .014 10045A .045 100204 10046A .061 10056A .03 100204 10069A 1. 10070A .13 100204 10078A .164 10081A .058 100204 10086A .157 10087A .127 100204 10091A .165 10092A .032 100204 10093A .058 10144A .066 100204 10145A -1. 10146A -29. 100204 10147A -.75 100205 10017A 1.25 10018A .719 100205 10041A .032 10043A .06 100205 10044A .012 10045A .04 100205 10046A .054 10056A .03 100205 10069A 1. 10070A .13 100205 10078A .183 10081A .063 100205 10086A .169 10087A .136 100205 10091A .142 10092A .032 100205 10093A .055 10124A 1.34 100205 10125A .06 10126A .7 100205 10127A -.0008 10144A .068 100205 10145A -1. 10146A -29. 100205 10147A -.75 10207A 1.3 100207 10017A 1.5 10018A .707 100207 10041A .032 10043A .053 100207 10044A .011 10045A .037 100207 10046A .051 10056A .04 100207 10069A 1. 10070A .13 100207 10078A .196 10081A .066 100207 10086A .179 10087A .145 100207 10091A .122 10092A .032 100207 10093A .054 10124A 3.32 100207 10125A .09 10126A .76 100207 10127A -.0017 10144A .072 100207 10145A -1. 10146A -29. 100207 10147A -.75 10207A 3.27 100208 10017A 1. 10018A 1.015 100208 10041A .032 10043A .094 100208 10044A .023 10045A .066 100208 10046A .072 10056A .03 100208 10069A 1. 10070A .14 100208 10080A .177 10081A .06 100208 10086A .134 10087A .102 100208 10091A .112 10092A .032 100208 10093A .078 10144A .078 100208 10145A -1. 10146A -29. 100208 10147A -.75 100209 10017A 1.25 10018A .962 100209 10041A .032 10043A .082 100209 10044A .02 10045A .061 100209 10046A .064 10056A .04 100209 10069A 1. 10070A .14 100209 10080A .204 10081A .066 100209 10086A .146 10087A .112 100209 10091A .088 10092A .032 100209 10093A .074 10124A 1.63 100209 10125A .04 10126A .89 100209 10127A -.0009 10144A .081 100209 10145A -1. 10146A -29. 100209 10147A -.75 10207A 1.7 100212 10017A 1. 10018A .668 100212 10041A .01 10043A .07 100212 10044A .015 10045A .058 100212 10046A .058 10056A .03 100212 10064A -1. 10069A 1. 100212 10070A .094 10072A 6.1 100212 10074A -6.52 10081A .046 100212 10082A .165 10086A .159 100212 10087A .318 10091A .017 100212 10092A .01 10093A .051 100212 10136A -.215 10137A -3.18 100212 10144A .061 10208A 3.13 100213 10017A 1. 10018A .468 100213 10043A .057 10044A .01 100213 10045A .042 10046A .037 100213 10053A -1. 10056A .03 100213 10069A 1. 10070A .081 100213 10072A 3.9 10074A -12.04 100213 10081A .234 10083A .138 100213 10086A .391 10093A .036 100213 10136A -.02 10137A -5.86 100213 10144A .054 10208A 3.44 100214 10017A 1.5 10018A 1.195 100214 10041A .031 10043A .11 100214 10044A .029 10045A .079 100214 10046A .07 10056A .04 100214 10069A 1. 10070A .15 100214 10081A .065 10086A .135 100214 10087A .095 10091A .018 100214 10092A .031 10093A .091 100214 10124A 5.7 10125A -.02 100214 10126A 2. 10127A -.0012 100214 10144A .096 10145A -1. 100214 10146A -29. 10147A -.75 100214 10158A .231 10207A 5.45 100215 10017A 1.5 10018A .924 100215 10041A .032 10043A .073 100215 10044A .02 10045A .057 100215 10046A .061 10056A .04 100215 10069A 1. 10070A .14 100215 10080A .221 10081A .069 100215 10086A .156 10087A .12 100215 10091A .069 10092A .032 100215 10093A .071 10124A 4.46 100215 10125A .06 10126A 1.45 100215 10127A -.0014 10144A .083 100215 10145A -1. 10146A -29. 100215 10147A -.75 10207A 4.24 100216 10017A 1. 10018A 1.323 100216 10041A .031 10043A .137 100216 10044A .033 10045A .089 100216 10046A .083 10056A .04 100216 10069A 1. 10070A .15 100216 10081A .054 10086A .11 100216 10087A .075 10091A .066 100216 10092A .031 10093A .101 100216 10144A .093 10145A -1. 100216 10146A -29. 10147A -.75 100216 10158A .174 100217 10017A 1.25 10018A 1.234 100217 10041A .031 10043A .122 100217 10044A .03 10045A .083 100217 10046A .074 10056A .04 100217 10069A 1. 10070A .15 100217 10081A .061 10086A .124 100217 10087A .086 10091A .039 100217 10092A .031 10093A .094 100217 10124A 2.44 10125A -.02 100217 10126A 1.3 10127A -.0009 100217 10144A .094 10145A -1. 100217 10146A -29. 10147A -.75 100217 10158A .211 10207A 2.39 100218 10017A 1. 10018A .588 100218 10041A .006 10043A .064 100218 10044A .012 10045A .051 100218 10046A .051 10056A .03 100218 10069A 1. 10070A .081 100218 10072A 8. 10074A -8.03 100218 10081A .08 10082A .147 100218 10086A .385 10087A .119 100218 10091A .01 10092A .006 100218 10093A .045 10124A -.01 100218 10125A .06 10126A .26 100218 10127A -.0022 10136A -.247 100218 10137A -.27 10144A .056 100218 10154A -1. 10208A 4.27 100220 10015A 1. 10016A .64 100220 10043A .051 10044A .007 100220 10045A .021 10046A .044 100220 10056A .03 10070A .12 100220 10071A .137 10084A .18 100220 10085A .152 10090A .219 100220 10092A .032 10093A .032 100220 10098A .052 10144A .058 100220 10148A -1. 10149A -26. 100220 10150A -2.1 100221 10015A 1.25 10016A .628 100221 10043A .044 10044A .005 100221 10045A .018 10046A .039 100221 10056A .03 10070A .12 100221 10071A .152 10084A .193 100221 10085A .163 10090A .193 100221 10092A .032 10093A .031 100221 10098A .056 10124A .82 100221 10125A .07 10126A .68 100221 10127A -.0044 10144A .062 100221 10148A -1. 10149A -26. 100221 10150A -2.1 10207A .68 100223 10015A 1.5 10016A 1.099 100223 10043A .087 10044A .018 100223 10045A .046 10046A .052 100223 10056A .04 10070A .14 100223 10075A .21 10084A .156 100223 10085A .12 10090A .069 100223 10092A .032 10093A .054 100223 10098A .069 10124A 4.43 100223 10125A .1 10126A 1.48 100223 10127A -.0055 10144A .09 100223 10148A -1. 10149A -26. 100223 10150A -2.1 10207A 4.39 100224 10015A 1. 10016A .864 100224 10043A .074 10044A .014 100224 10045A .035 10046A .053 100224 10056A .03 10070A .13 100224 10073A .164 10084A .157 100224 10085A .127 10090A .165 100224 10092A .032 10093A .043 100224 10098A .058 10144A .07 100224 10148A -1. 10149A -26. 100224 10150A -2.1 100225 10015A 1.25 10016A .85 100225 10043A .065 10044A .012 100225 10045A .032 10046A .048 100225 10056A .04 10070A .13 100225 10073A .185 10084A .169 100225 10085A .136 10090A .142 100225 10092A .032 10093A .042 100225 10098A .063 10124A 1.24 100225 10125A .07 10126A .75 100225 10127A -.0037 10144A .074 100225 10148A -1. 10149A -26. 100225 10150A -2.1 10207A 1.31 100228 10015A 1. 10016A 1.192 100228 10043A .112 10044A .021 100228 10045A .054 10046A .063 100228 10056A .03 10070A .14 100228 10075A .168 10084A .134 100228 10085A .102 10090A .112 100228 10092A .032 10093A .059 100228 10098A .06 10144A .085 100228 10148A -1. 10149A -26. 100228 10150A -2.1 100229 10015A 1.25 10016A 1.113 100229 10043A .096 10044A .018 100229 10045A .049 10046A .055 100229 10056A .04 10070A .14 100229 10075A .195 10084A .146 100229 10085A .112 10090A .088 100229 10092A .032 10093A .055 100229 10098A .066 10124A 1.62 100229 10125A .07 10126A .95 100229 10127A -.0036 10144A .087 100229 10148A -1. 10149A -26. 100229 10150A -2.1 10207A 1.57 100232 10015A 1. 10016A 1.545 100232 10043A .166 10044A .031 100232 10045A .074 10046A .071 100232 10056A .03 10070A .15 100232 10084A .11 10085A .075 100232 10090A .066 10092A .031 100232 10093A .076 10098A .054 100232 10144A .102 10148A -1. 100232 10149A -26. 10150A -2.1 100232 10156A .151 100233 10015A 1.25 10016A 1.44 100233 10043A .14 10044A .028 100233 10045A .069 10046A .063 100233 10056A .04 10070A .15 100233 10084A .124 10085A .086 100233 10090A .039 10092A .031 100233 10093A .071 10098A .061 100233 10124A 2.53 10125A .04 100233 10126A 1.7 10127A -.0039 100233 10144A .102 10148A -1. 100233 10149A -26. 10150A -2.1 100233 10156A .192 10207A 2.44 100234 10015A 1.5 10016A .616 100234 10043A .039 10044A .005 100234 10045A .015 10046A .036 100234 10056A .04 10070A .12 100234 10071A .162 10084A .203 100234 10085A .17 10090A .175 100234 10092A .032 10093A .03 100234 10098A .058 10124A 2.22 100234 10125A .12 10126A 1.13 100234 10127A -.0069 10144A .065 100234 10148A -1. 10149A -26. 100234 10150A -2.1 10207A 1.98 100235 10015A 1.5 10016A .838 100235 10043A .059 10044A .011 100235 10045A .028 10046A .043 100235 10056A .04 10070A .13 100235 10073A .196 10084A .179 100235 10085A .145 10090A .122 100235 10092A .032 10093A .041 100235 10098A .065 10124A 3.55 100235 10125A .1 10126A 1.14 100235 10127A -.0058 10144A .077 100235 10148A -1. 10149A -26. 100235 10150A -2.1 10207A 3.58 100236 10015A 1.5 10016A 1.4 100236 10043A .131 10044A .027 100236 10045A .065 10046A .058 100236 10056A .04 10070A .15 100236 10084A .135 10085A .095 100236 10090A .018 10092A .031 100236 10093A .069 10098A .065 100236 10124A 5.94 10125A .06 100236 10126A 2.49 10127A -.0059 100236 10144A .104 10148A -1. 100236 10149A -26. 10150A -2.1 100236 10156A .211 10207A 5.8 100240 10017A .15 10065A -1.15 100240 10081A .15 10145A 1. 100240 10146A 32.3 10147A .357 100241 10066A -1. 10145A 1. 100241 10146A 27. 10147A .512 100242 10101A -1. 10145A 1. 100242 10146A 30.6 10147A .78 100243 10054A -1. 10145A 1. 100243 10146A 31.4 10147A 1.57 100245 10102A -1. 10145A 1. 100245 10146A 25.6 10147A 2.6 100250 10054A -1. 10148A 1. 100250 10149A 31.6 10150A 1.54 100251 10015A .05 10055A -1.05 100251 10098A .05 10148A 1. 100251 10149A 22.7 10150A 2.51 100252 10102A -1. 10148A 1. 100252 10149A 25.6 10150A 2.6 100254 10101A -1. 10148A 1. 100254 10149A 30.6 10150A .78 100270 10069A -1. 100280 10018A -.004 10041A -.004 100280 10044A -.003 10045A -.006 100280 10046A -.005 10056A -.001 100280 10070A -.004 10072A -.13 100280 10074A 1.33 10080A -.006 100280 10086A .006 10087A .019 100280 10091A -.003 10092A -.004 100280 10124A -.15 10125A -.07 100280 10126A -.12 10127A .0142 100280 10136A .088 10137A -.23 100280 10139A .025 10140A -.27 100280 10144A -.001 10147A -.32 100280 10207A -.15 10208A -.05 100281 10018A .004 10041A .004 100281 10044A .003 10045A .006 100281 10046A .005 10056A .001 100281 10070A .004 10072A .13 100281 10074A -1.33 10080A .006 100281 10086A -.006 10087A -.019 100281 10091A .003 10092A .004 100281 10124A .15 10125A .07 100281 10126A .12 10127A -.0142 100281 10136A -.088 10137A .23 100281 10139A -.025 10140A .27 100281 10144A .001 10147A .32 100281 10207A .15 10208A .05 100282 10018A -.336 10041A -.021 100282 10043A -.036 10044A -.009 100282 10045A -.007 10046A -.017 100282 10056A -.003 10070A -.03 100282 10072A 2.47 10074A 3.35 100282 10080A -.045 10081A .005 100282 10086A .018 10087A .112 100282 10091A .017 10092A -.021 100282 10093A -.026 10124A -.34 100282 10125A -.1 10126A .15 100282 10127A .0027 10136A .016 100282 10137A -4.65 10139A -.013 100282 10140A -1.18 10144A -.018 100282 10146A -5. 10207A -.34 100282 10208A 1.15 100283 10018A .336 10041A .021 100283 10043A .036 10044A .009 100283 10045A .007 10046A .017 100283 10056A .003 10070A .03 100283 10072A -2.47 10074A -3.35 100283 10080A .045 10081A -.005 100283 10086A -.018 10087A -.112 100283 10091A -.017 10092A .021 100283 10093A .026 10124A .34 100283 10125A .1 10126A -.15 100283 10127A -.0027 10136A -.016 100283 10137A 4.65 10139A .013 100283 10140A 1.18 10144A .018 100283 10146A 5. 10207A .34 100283 10208A -1.15 100290 10016A -.026 10043A -.002 100290 10044A -.003 10045A -.006 100290 10046A -.006 10056A -.001 100290 10070A -.008 10072A -.14 100290 10073A -.011 10074A -2.08 100290 10084A .003 10085A .029 100290 10090A .003 10092A -.006 100290 10093A -.001 10124A -.09 100290 10125A -.05 10126A -.04 100290 10127A .0247 10136A .121 100290 10137A -1.47 10139A .067 100290 10140A -.74 10144A -.002 100290 10150A -.5 10207A -.09 100290 10208A -.08 100291 10016A -.245 10043A -.008 100291 10044A -.008 10045A -.008 100291 10046A -.015 10056A -.003 100291 10070A -.032 10072A 4.52 100291 10073A -.048 10074A -7.83 100291 10084A .019 10085A .17 100291 10090A -.059 10092A -.025 100291 10093A -.012 10098A .001 100291 10124A -.08 10125A -.07 100291 10126A .13 10127A .0128 100291 10136A -.107 10137A -2.77 100291 10139A .015 10140A -1.54 100291 10144A -.014 10149A -5. 100291 10207A -.08 10208A 2.29 100292 10016A .245 10043A .008 100292 10044A .008 10045A .008 100292 10046A .015 10056A .003 100292 10070A .032 10072A -4.52 100292 10073A .048 10074A 7.83 100292 10084A -.019 10085A -.17 100292 10090A .059 10092A .025 100292 10093A .012 10098A -.001 100292 10124A .08 10125A .07 100292 10126A -.13 10127A -.0128 100292 10136A .107 10137A 2.77 100292 10139A -.015 10140A 1.54 100292 10144A .014 10149A 5. 100292 10207A .08 10208A -2.29 100293 10016A .026 10043A .002 100293 10044A .003 10045A .006 100293 10046A .006 10056A .001 100293 10070A .008 10072A .14 100293 10073A .011 10074A 2.08 100293 10084A -.003 10085A -.029 100293 10090A -.003 10092A .006 100293 10093A .001 10124A .09 100293 10125A .05 10126A .04 100293 10127A -.0247 10136A -.121 100293 10137A 1.47 10139A -.067 100293 10140A .74 10144A .002 100293 10150A .5 10207A .09 100293 10208A .08 100400 10043A .098 10044A .033 100400 10045A .022 10052A -1. 100400 10056A .44 10106A .838 100400 10144A .078 10168A 1. 100401 10043A .105 10044A .037 100401 10045A .024 10052A -1. 100401 10056A .44 10107A .821 100401 10144A .08 10168A 1. 100402 10043A .044 10044A -.33 100402 10045A .294 10056A .49 100402 10089A 1. 10144A .031 100402 10168A 2.5 100403 10023A 1. 10043A .098 100403 10044A .033 10045A .022 100403 10052A -1. 10056A .4 100403 10106A .838 10144A .062 100404 10023A 1. 10043A .105 100404 10044A .037 10045A .024 100404 10052A -1. 10056A .4 100404 10107A .821 10144A .063 100405 10023A 1. 10043A .116 100405 10044A .043 10045A .029 100405 10052A -1. 10056A .4 100405 10108A .798 10144A .065 100410 10024A 1. 10043A .098 100410 10044A .033 10045A .022 100410 10052A -1. 10056A .11 100410 10106A .838 10144A .067 100411 10024A 1. 10043A .105 100411 10044A .037 10045A .024 100411 10052A -1. 10056A .11 100411 10107A .821 10144A .068 100412 10024A 1. 10043A .116 100412 10044A .043 10045A .029 100412 10052A -1. 10056A .11 100412 10108A .798 10144A .07 100413 10024A 1. 10043A .1 100413 10044A .033 10045A .022 100413 10049A -.33 10052A -.67 100413 10056A .11 10106A .832 100413 10125A .33 10126A 1.16 100413 10144A .067 100414 10024A 1. 10043A .107 100414 10044A .037 10045A .025 100414 10049A -.33 10052A -.67 100414 10056A .11 10107A .815 100414 10125A .33 10126A 1.06 100414 10144A .068 100415 10024A 1. 10043A .119 100415 10044A .043 10045A .03 100415 10049A -.33 10052A -.67 100415 10056A .11 10108A .793 100415 10125A .24 10126A .63 100415 10144A .07 100440 10050A -1. 10052A 1. 100441 10051A -1. 10052A 1. 100500 10019A 1. 10022A .067 100500 10043A .053 10044A .009 100500 10045A .002 10046A .007 100500 10056A .25 10057A -1. 100500 10095A .039 10097A .148 100500 10102A .523 10105A .067 100500 10144A .058 100502 10019A 1. 10022A .06 100502 10043A .056 10044A .011 100502 10045A .002 10046A .009 100502 10056A .24 10068A -1. 100502 10095A .052 10096A .19 100502 10101A .515 10104A .06 100502 10144A .06 100503 10020A 1. 10021A .06 100503 10043A .056 10044A .011 100503 10045A .002 10046A .009 100503 10056A .19 10068A -1. 100503 10095A .052 10096A .19 100503 10101A .515 10104A .06 100503 10144A .061 100505 10020A 1. 10021A .067 100505 10043A .053 10044A .009 100505 10045A .002 10046A .007 100505 10056A .2 10057A -1. 100505 10095A .039 10097A .148 100505 10102A .523 10105A .067 100505 10144A .059 100506 10019A 1. 10022A .009 100506 10042A 1. 10043A .008 100506 10044A .001 10046A .001 100506 10051A -.053 10053A -.096 100506 10054A -.078 10055A -.061 100506 10056A .07 10057A -.041 100506 10063A -.143 10065A -.164 100506 10066A -.054 10068A -.1 100506 10080A -.21 10095A .007 100506 10096A .195 10097A .093 100506 10101A .648 10102A .021 100506 10104A .006 10105A .003 100506 10144A .047 100600 10045A -1. 10116A 1. 100601 10046A -1. 10117A 1. 100602 10043A .625 10044A -.368 100602 10045A -.562 10046A -.241 100602 10118A .018 10119A .153 100602 10204A 1. 100700 10056A .76 10116A -.663 100700 10117A -.571 10120A 1. 100700 10144A .02 100702 10056A 1.56 10060A 1. 100702 10070A -.606 10116A -.606 100702 10120A 1. 10124A 1.6 100702 10125A -3.6 10126A -12.1 100702 10127A .024 10130A 13.7 100702 10131A 16.1 10132A -.3 100702 10133A -9.9 10144A .02 100702 10207A 1.2 100796 10056A .04 10076A -1. 100796 10123A 1. 10124A 12.9 100796 10125A 3.4 10126A -.5 100796 10127A .185 10128A 1. 100796 10207A 2. 100797 10056A .04 10123A 1. 100797 10124A 8.1 10125A 5.3 100797 10126A 5.4 10127A .019 100797 10128A 1. 10158A -1. 100797 10207A -3.4 100798 10056A .04 10071A -1. 100798 10123A 1. 10124A 20.4 100798 10125A 3.4 10126A -1. 100798 10127A .416 10128A 1. 100798 10207A 6.4 100799 10056A .04 10123A 1. 100799 10124A 10.4 10125A 5.4 100799 10126A 5.3 10127A .057 100799 10128A 1. 10156A -1. 100799 10207A -3.3 100800 10044A -1. 10123A 1. 100800 10124A -4.5 10125A 65. 100800 10126A 125. 10127A .01 100800 10128A 1. 10207A -1.4 100801 10116A -1. 10123A 1. 100801 10124A -22.2 10125A 87. 100801 10126A 125. 10127A .01 100801 10128A 1. 10207A -20.2 100802 10117A -1. 10123A 1. 100802 10124A -6.6 10125A 70. 100802 10126A 125. 10127A .01 100802 10128A 1. 10207A -16.5 100803 10118A -1. 10123A 1. 100803 10124A -22.2 10125A 87. 100803 10126A 125. 10127A .01 100803 10128A 1. 10207A -20.2 100804 10119A -1. 10123A 1. 100804 10124A -6.6 10125A 70. 100804 10126A 125. 10127A .01 100804 10128A 1. 10207A -16.5 100805 10047A -1. 10056A .02 100805 10123A 1. 10124A 49.3 100805 10125A 9.7 10126A 58.3 100805 10127A .051 10128A 1. 100805 10207A 58.6 100806 10056A .03 10070A -1. 100806 10123A 1. 10124A 9. 100806 10125A 12.5 10126A 70. 100806 10127A .05 10128A 1. 100806 10207A -6.5 100807 10056A .03 10095A -1. 100807 10123A 1. 10124A 55.5 100807 10125A 12.5 10126A 70. 100807 10127A .08 10128A 1. 100807 10207A 47.3 100810 10056A .04 10078A -1. 100810 10123A 1. 10124A 12.4 100810 10125A 4. 10126A 1.5 100810 10127A .094 10128A 1. 100810 10207A .7 100812 10056A .04 10080A -1. 100812 10123A 1. 10124A 10.4 100812 10125A 4.7 10126A 3.5 100812 10127A .047 10128A 1. 100812 10207A -1.6 100813 10056A .04 10081A -1. 100813 10123A 1. 10124A 76. 100813 10125A .5 10126A -3.6 100813 10127A .16 10128A 1. 100813 10207A 50.5 100814 10056A .04 10082A -1. 100814 10123A 1. 10124A -9.8 100814 10125A 9.4 10126A 9. 100814 10127A -.008 10128A 1. 100814 10207A -33.4 100815 10056A .04 10083A -1. 100815 10123A 1. 10124A 203.7 100815 10125A 6.8 10126A 26. 100815 10127A .564 10128A 1. 100815 10207A 176. 100818 10056A .04 10073A -1. 100818 10123A 1. 10124A 18.5 100818 10125A 4. 10126A 1.1 100818 10127A .212 10128A 1. 100818 10207A 4.1 100820 10056A .04 10075A -1. 100820 10123A 1. 10124A 14.9 100820 10125A 4.7 10126A 3.1 100820 10127A .111 10128A 1. 100820 10207A .4 100821 10056A .04 10096A -1. 100821 10123A 1. 10124A 129. 100821 10125A 6. 10126A -7.5 100821 10127A .2 10128A 1. 100821 10207A 125. 100822 10056A .04 10097A -1. 100822 10123A 1. 10124A 143. 100822 10125A 6. 10126A -7.5 100822 10127A .9 10128A 1. 100822 10207A 139. 100823 10056A .04 10098A -1. 100823 10123A 1. 10124A 81. 100823 10125A .5 10126A -2.7 100823 10127A .6 10128A 1. 100823 10207A 53. 100825 10106A -1. 10123A 1. 100825 10124A 7.2 10125A 3.1 100825 10126A 3.6 10128A 1. 100826 10107A -1. 10123A 1. 100826 10124A .5 10125A 3.4 100826 10126A 4.8 10128A 1. 100826 10207A -8.5 100827 10108A -1. 10123A 1. 100827 10124A -5.8 10125A 3.8 100827 10126A 6.8 10128A 1. 100827 10207A -18.3 100835 10120A -1. 10123A 1. 100835 10124A -11.1 10125A 2.7 100835 10126A 1.2 10127A .01 100835 10128A 1. 10207A -6.5 100836 10121A -1. 10123A 1. 100836 10124A 26.1 10125A .5 100836 10126A -6. 10127A .02 100836 10128A 1. 10207A 31.5 100838 10048A -1. 10056A .02 100838 10123A 1. 10124A 62.4 100838 10125A 6.4 10126A 36.1 100838 10127A .044 10128A 1. 100838 10207A 70.8 100839 10049A -1. 10056A .02 100839 10123A 1. 10124A 91.2 100839 10125A 1.8 10126A -5.1 100839 10127A .039 10128A 1. 100839 10207A 97.1 100840 10027A 1. 10056A .295 100840 10123A -1. 10124A -20.6 100840 10127A -.115 100841 10027A 1. 10056A .395 100841 10123A -1. 10124A -25.6 100841 10127A -.115 100842 10027A 1. 10056A .495 100842 10123A -1. 10124A -29.8 100842 10127A -.115 100843 10027A 1. 10056A .595 100843 10123A -1. 10124A -33.5 100843 10127A -.115 100845 10125A -11.3 10126A -33.2 100845 10128A -1. 100846 10125A -11.5 10126A -31.2 100846 10128A -1. 100847 10125A -11.7 10126A -27.2 100847 10128A -1. 100848 10025A 50. 10125A -12.85 100848 10126A -35.75 10128A -1. 100849 10025A 50. 10125A -12.85 100849 10126A -22. 10128A -1. 100850 10044A -1. 10129A 1. 100850 10130A 8.6 10131A 13.2 100850 10132A 65. 10133A 125. 100855 10047A -1. 10056A .02 100855 10129A 1. 10130A 78.7 100855 10131A 92.2 10132A 10.2 100855 10133A 54.7 100856 10056A .03 10070A -1. 100856 10129A 1. 10130A 43. 100856 10131A 24. 10132A 12.5 100856 10133A 70. 100857 10056A .02 10129A 1. 100857 10130A 92. 10131A 105.4 100857 10132A 5.1 10133A 24.2 100857 10151A -1. 100875 10106A -1. 10129A 1. 100875 10130A 34. 10131A 31.3 100875 10132A 3.1 10133A 3.6 100876 10107A -1. 10129A 1. 100876 10130A 26.5 10131A 21.5 100876 10132A 3.4 10133A 4.8 100877 10108A -1. 10129A 1. 100877 10130A 18.5 10131A 11.2 100877 10132A 3.8 10133A 6.8 100885 10120A -1. 10129A 1. 100885 10130A .5 10131A 9.2 100885 10132A 2.7 10133A 1.2 100886 10121A -1. 10129A 1. 100886 10130A 39.8 10131A 45.5 100886 10132A .5 10133A -6. 100890 10026A 1. 10056A .323 100890 10129A -1. 10130A -18.6 100890 10131A -21.1 10134A -1. 100891 10026A 1. 10056A .423 100891 10129A -1. 10130A -23.6 100891 10131A -26.1 10134A -1. 100892 10026A 1. 10056A .523 100892 10129A -1. 10130A -27.8 100892 10131A -30.3 10134A -1. 100893 10026A 1. 10056A .623 100893 10129A -1. 10130A -31.5 100893 10131A -34. 10134A -1. 100895 10132A -11.3 10133A -33.2 100895 10134A 1. 100896 10132A -11.5 10133A -31.2 100896 10134A 1. 100897 10132A -11.7 10133A -27.2 100897 10134A 1. 100898 10025A 50. 10132A -12.85 100898 10133A -35.2 10134A 1. 100899 10025A 50. 10132A -12.85 100899 10133A -22. 10134A 1. 100900 10028A 1. 10044A -.05 100900 10056A .89 10110A -.05 100900 10120A -.889 10121A .089 100900 10144A .02 10151A -.1 101000 10056A .03 10062A -.5 101000 10063A -.5 10152A 1. 101012 10029A 1. 10051A -.4 101012 10056A .27 10062A -.25 101012 10151A -.35 101013 10029A 1. 10056A .27 101013 10061A -.4 10062A -.25 101013 10151A -.35 101021 10030A 1. 10051A -.45 101021 10056A .05 10062A -.55 101099 10031A 1. 10051A -1. 101099 10056A .03 101100 10031A 1. 10056A .03 101100 10063A -1. 101101 10031A 1. 10053A -.15 101101 10056A .03 10063A -.85 101102 10032A 1. 10056A .04 101102 10063A -.8 10064A -.2 101103 10032A 1. 10053A -.12 101103 10056A .04 10063A -.68 101103 10064A -.2 101107 10034A 1. 10056A .03 101107 10084A -.67 10086A -.13 101107 10087A -.2 101108 10034A 1. 10056A .03 101108 10084A -.38 10085A -.29 101108 10086A -.17 10087A -.03 101108 10098A -.13 101109 10034A 1. 10056A .03 101109 10086A -.85 10087A -.15 101110 10063A -1. 10072A 54.1 101110 10074A -23.6 10135A 1. 101110 10136A .072 10137A -18. 101110 10208A 42.1 101111 10064A -1. 10072A 60.7 101111 10074A .7 10135A 1. 101111 10136A .217 10137A 61. 101111 10208A 35.7 101112 10053A -1. 10072A 48.9 101112 10074A -31. 10135A 1. 101112 10136A .61 10137A -29. 101112 10208A 40.3 101113 10072A 28.5 10074A -4.2 101113 10084A -1. 10135A 1. 101113 10136A 1.9 10137A -21. 101113 10208A 26.6 101114 10072A 36. 10074A 4.3 101114 10085A -1. 10135A 1. 101114 10136A 1.95 10137A 32. 101114 10208A 22.9 101115 10072A 30. 10074A 4.5 101115 10086A -1. 10135A 1. 101115 10136A .67 10137A -16. 101115 10208A 27.8 101116 10072A 41. 10074A 11. 101116 10087A -1. 10135A 1. 101116 10136A .71 10137A 54. 101116 10208A 25.4 101117 10058A -1. 10072A 50.3 101117 10074A -20.2 10135A 1. 101117 10136A .893 10137A -16. 101117 10208A 37.3 101118 10072A 58.9 10074A -6.2 101118 10135A 1. 10136A .185 101118 10137A 26. 10154A -1. 101118 10208A 37.3 101119 10061A -1. 10072A 50. 101119 10074A -30. 10135A 1. 101119 10136A .11 10137A -39. 101119 10208A 48.2 101120 10072A 31. 10074A -18.2 101120 10081A -1. 10135A 1. 101120 10136A .16 10137A -38. 101120 10208A 36.3 101121 10051A -1. 10072A 50. 101121 10074A -30. 10135A 1. 101121 10136A .11 10137A -40. 101121 10208A 48.7 101122 10072A 28. 10074A -8.7 101122 10084A -.728 10098A -.272 101122 10135A 1. 10136A 1.55 101122 10137A -26. 10208A 28.5 101123 10056A .02 10137A -5. 101123 10211A 1. 101124 10056A .04 10137A -10. 101124 10211A 1. 101125 10033A 1. 10056A .04 101125 10135A -1. 10136A -.65 101125 10137A 10. 10211A -1. 101126 10025A 50. 10033A 1. 101126 10056A .04 10135A -1. 101126 10136A -.65 10137A 13. 101126 10211A -1. 101API 10208A -1. 101201 10035A 1. 10084A -.245 101201 10086A -.272 10141A -.483 101202 10035A 1. 10084A -.154 101202 10085A -.124 10086A -.149 101202 10087A -.114 10141A -.459 101203 10036A 1. 10090A -.13 101203 10091A -.13 10141A -.74 101204 10037A 1. 10194A -1. 101204 10195A -1.05 10196A -60. 101206 10038A 1. 10141A -1. 101207 10035A 1. 10086A -.327 101207 10087A -.25 10141A -.423 101210 10057A -1. 10138A 1. 101210 10139A 4.14 10140A 96.9 101211 10068A -1. 10138A 1. 101211 10139A .939 10140A 89.2 101213 10090A -1. 10138A 1. 101213 10139A 2.3 10140A 8. 101214 10091A -1. 10138A 1. 101214 10139A .82 10140A 8. 101215 10085A -1. 10138A 1. 101215 10139A 1.95 10140A -2.1 101216 10086A -1. 10138A 1. 101216 10139A .71 10140A 4.6 101217 10084A -1. 10138A 1. 101217 10139A 1.9 10140A -10.6 101219 10138A -1. 10139A -2.8 101219 10140A -60. 10141A 1. 101220 10092A -1. 10142A .977 101220 10143A .977 101221 10040A 1. 10068A -1. 101221 10142A .972 10143A .972 101222 10025A 50. 10057A -.7 101222 10090A -.3 10142A .947 101222 10143A .947 101224 10090A -1. 10142A .918 101224 10143A .918 101225 10043A -1. 10142A 1. 101226 10093A -1. 10142A 1. 101227 10025A 6.21 10142A 1. 101227 10169A 1. 101228 10013A 1. 10025A 4.97 101228 10142A 1. 101229 10044A -1. 10142A .636 101230 10141A -1. 10142A .943 101230 10143A .943 101231 10142A .931 10143A .931 101231 10153A -1. 101232 10085A -.5 10090A -.5 101232 10142A .915 10143A .915 101234 10143A -1. 101235 10142A -1. 10144A -1. 101236 10068A -1. 10194A 1. 101236 10195A .939 10196A 89.2 101237 10091A -1. 10194A 1. 101237 10195A .82 10196A 8. 101238 10064A -1. 10194A 1. 101238 10195A .22 10196A -4.9 101239 10041A -1. 10092A -1. 101239 10194A 1. 10195A 1.26 101239 10196A 61.5 101300 10039A 1. 10051A -.016 101300 10056A .18 10062A -.005 101300 10065A -.325 10066A -.755 101300 10084A -.065 10085A -.054 101300 10144A .042 10147A .31 101300 10153A .22 101CET 10072A -1. 101400 10057A .75 10197A 1. 101400 10203A .25 101401 10066A .075 10068A .525 101401 10198A 1. 10203A .4 101402 10057A 1. 10199A 1. 101403 10066A .17 10068A .83 101403 10200A 1. 101404 10057A -.75 10203A -.25 101404 10209A 1. 101405 10066A -.075 10068A -.525 101405 10203A -.4 10210A 1. 101406 10057A -1. 10201A 1. 101407 10066A -.17 10068A -.83 101407 10202A 1. 101408 10051A -.47 10084A -.36 101408 10090A -.17 10203A 1. 101VIS 10074A 1. 101600 10025A -17.86 10105A -1. 101601 10025A -23.21 10104A -1. 101I93 10207A -1. 102000 10001A -1. 10025A 10.5 102000 10027A 1. 102001 10025A 15. 10026A 1. 102002 10025A 50. 10031A 1. 102003 10025A 50. 10033A 1. 102004 10025A 50. 10038A 1. 102006 10025A 20. 10110A 1. 102500 10027A -1. 102502 10031A -1. 102503 10033A -1. 102504 10038A -1. 102I93 10207A 1. 103000 10031A 1. 10170A 1. 103001 10033A 1. 10171A 1. 103002 10038A 1. 10172A 1. 103003 10037A 1. 10173A 1. 103005 10145A 1. 10146A 29. 103005 10147A .75 10175A 1. 103006 10148A 1. 10149A 26. 103006 10150A 2.1 10176A 1. 103007 10044A .25 10116A .3 103007 10117A .45 10177A 1. 104003 10215A 100. 104004 10038A -1. 10183A 1. 104004 10219A 100. 104030 10059A 1. 10090A -1. 104030 10183A 1. 10216A 100. 104120 10084A -1. 10190A 1. 104120 10193A 1. 10217A 100. 104171 10148A -1. 10149A -26. 104171 10150A -2.1 10191A 1. 104171 10192A 1. 10218A 100. 104191 10084A -.6 10085A -.4 104191 10191A 1. 10193A 1. 104191 10220A 100. RHS ZZZZ0001 10006A 132.5 10007A 87.5 ZZZZ0001 10008A 8.1 10009A 55. ZZZZ0001 10010A 45. 10011A 3. ZZZZ0001 10012A 2.6 10013A 2.6 ZZZZ0001 10014A 80. 10015A 52. ZZZZ0001 10016A 30. 10017A 65.6 ZZZZ0001 10018A 45. 10019A 12.5 ZZZZ0001 10020A 15. 10021A .834 ZZZZ0001 10022A .536 10024A 20.2 ZZZZ0001 10026A 21.4 10027A 65.6 ZZZZ0001 10028A 2. 10029A 5.7 ZZZZ0001 10030A 3.3 10031A 10.3 ZZZZ0001 10032A 9. 10033A 33. ZZZZ0001 10034A 3. 10035A 4.35 ZZZZ0001 10036A .65 10037A 4. ZZZZ0001 10038A 13.4 10039A 7.2 ZZZZ0001 10040A 1.5 10042A 4. ZZZZ0001 10043A 3.5 10060A .8 ZZZZ0001 10089A 5. 10094A .2 ZZZZ0001 10100A 2. 10143A 3.5 ZZZZ0001 10144A -6.8 10152A 1.7 ZZZZ0001 10159A .6 10160A 40. ZZZZ0001 10163A 8. 10164A 14. ZZZZ0001 10167A 5. 10168A 10.6 ZZZZ0001 10169A .9 10201A 2.9 ZZZZ0001 10202A 2.5 10204A 1.06 ZZZZ0001 10209A 2.1 10210A .5 ENDATA DyLP-1.10.4/Data/Sample/exmip1.lp0000755000175200017520000000077012167773507014733 0ustar coincoin\ENCODING=ISO-8859-1 \Problem name: exmip1.mps Minimize OBJ: COL01 + 2 COL05 - COL08 Subject To ROW01: 3 COL01 + COL02 - 2 COL04 - COL05 - COL08 >= 2.5 ROW02: 2 COL02 + 1.1 COL03 <= 2.1 ROW03: COL03 + COL06 = 4 ROW04: 2.8 COL04 - 1.2 COL07 - RgROW04 = 1.8 ROW05: 5.6 COL01 + COL05 + 1.9 COL08 - RgROW05 = 15 Bounds COL01 >= 2.5 0 <= COL02 <= 4.1 0 <= COL03 <= 1 0 <= COL04 <= 1 0.5 <= COL05 <= 4 0 <= COL08 <= 4.3 0 <= RgROW04 <= 3.2 -12 <= RgROW05 <= 0 Binaries COL03 COL04 End DyLP-1.10.4/Data/Sample/atm_5_10_1.block0000644000175200017520000000172412136243266015717 0ustar coincoin0 52 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 1 52 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 2 52 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 3 52 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 4 52 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 DyLP-1.10.4/Data/Sample/share2qp.mps0000644000175200017520000006224212550667616015437 0ustar coincoinNAME SHARE2B ROWS N 000000 L 000004 L 000005 L 000006 L 000007 L 000008 L 000009 L 000010 L 000011 L 000012 E 000013 L 000014 L 000015 L 000016 L 000017 L 000018 L 000019 L 000020 L 000021 L 000022 E 000023 L 000024 L 000025 L 000026 L 000027 L 000028 L 000029 L 000030 L 000031 L 000032 E 000033 L 000034 L 000035 L 000036 L 000037 L 000038 L 000039 L 000040 L 000041 L 000042 E 000043 L 000044 L 000045 L 000046 L 000047 L 000048 L 000049 L 000050 L 000051 L 000052 E 000053 L 000054 L 000055 L 000056 L 000057 L 000058 L 000059 L 000060 L 000061 L 000062 E 000063 L 000064 L 000065 L 000066 L 000067 L 000068 L 000069 L 000070 L 000071 L 000072 L 000073 L 000074 L 000075 L 000076 L 000077 L 000078 L 000079 L 000080 L 000081 E 000082 E 000083 E 000084 E 000085 E 000086 E 000087 L 000088 L 000089 L 000090 L 000091 L 000092 L 000093 L 000094 L 000095 L 000096 L 000097 L 000098 E 000099 COLUMNS 010101 000004 65. 000005 1. 010101 000006 -1. 000007 -1. 010101 000008 -97.4 000009 -99.9 010101 000010 -83.7 000011 -85. 010101 000013 1. 010102 000004 5.5 000005 .68 010102 000006 -.96 000007 -1. 010102 000008 -84. 000009 -88.1 010102 000010 -79.4 000011 -83.2 010102 000013 1. 000064 1. 010103 000004 .8 000007 -.78 010103 000008 -87.9 000009 -82.9 010103 000010 -74.6 000011 -80.6 010103 000013 1. 000065 1. 010104 000004 4.5 000005 .27 010104 000006 -.97 000007 -1. 010104 000008 -97.9 000009 -100.3 010104 000010 -95. 000011 -98. 010104 000013 1. 000088 1. 010105 000004 1.5 000005 .12 010105 000006 -.36 000007 -.95 010105 000008 -60.6 000009 -76.3 010105 000010 -68.6 000011 -76.8 010105 000013 1. 000066 1. 010106 000000 .03 000004 6. 010106 000005 .19 000006 -.35 010106 000007 -.89 000008 -94.8 010106 000009 -96.6 000010 -83.8 010106 000011 -86.8 000013 1. 010106 000066 1.1 010107 000000 .06 000004 3.3 010107 000005 .07 000006 -.29 010107 000007 -.97 000008 -97.9 010107 000009 -100.3 000010 -95. 010107 000011 -98. 000013 1. 010107 000066 1.2 010108 000004 5.8 000005 .5 010108 000006 -.62 000007 -.98 010108 000008 -96.5 000009 -98.1 010108 000010 -80.8 000011 -81.5 010108 000013 1. 000067 1. 010120 000000 .09 000008 -2.1 010120 000009 -.7 000010 -2.3 010120 000011 -1. 000012 1. 010131 000000 -3.8 000004 -11. 010131 000005 -.5 000006 .5 010131 000007 .9 000008 100. 010131 000009 100. 000010 90. 010131 000011 90. 000012 -3. 010131 000013 -1. 000082 1. 010132 000000 -3.7 000082 -1. 010132 000083 1. 010133 000000 -3.5 000082 -1. 010133 000084 1. 010201 000014 65. 000015 1. 010201 000016 -1. 000017 -1. 010201 000018 -97.4 000019 -99.9 010201 000020 -83.7 000021 -85. 010201 000023 1. 010202 000014 5.5 000015 .57 010202 000016 -1. 000017 -1. 010202 000018 -84. 000019 -88.1 010202 000020 -79.4 000021 -83.2 010202 000023 1. 000064 1. 010203 000014 .8 000016 -.01 010203 000017 -.98 000018 -87.9 010203 000019 -82.9 000020 -74.6 010203 000021 -80.6 000023 1. 010203 000065 1. 010204 000014 1.5 000015 .12 010204 000016 -.36 000017 -.95 010204 000018 -60.6 000019 -76.3 010204 000020 -68.6 000021 -76.8 010204 000023 1. 000066 1. 010205 000000 .1 000014 2.7 010205 000015 .13 000016 -.28 010205 000017 -.79 000018 -77.9 010205 000019 -81.4 000020 -70.6 010205 000021 -74. 000023 1. 010205 000069 1. 010206 000014 5.8 000015 .46 010206 000016 -.67 000017 -1. 010206 000018 -96.5 000019 -98.1 010206 000020 -80.8 000021 -81.5 010206 000023 1. 000067 1. 010220 000000 .09 000018 -3.5 010220 000019 -1.9 000020 -3.4 010220 000021 -1.8 000022 1. 010231 000000 -3. 000014 -11. 010231 000015 -.5 000016 .5 010231 000017 .9 000018 89. 010231 000019 89. 000020 82. 010231 000021 82. 000022 -3. 010231 000023 -1. 000085 1. 010231 000089 -.25 010301 000024 70. 000025 1. 010301 000026 -1. 000027 -1. 010301 000028 -97.8 000029 -102.3 010301 000030 -94.8 000031 -99.8 010301 000033 1. 010302 000024 9.5 000025 .7 010302 000026 -.83 000027 -1. 010302 000028 -89.1 000029 -92. 010302 000030 -77.4 000031 -80.1 010302 000033 1. 000068 1. 010303 000024 2.7 000025 .13 010303 000026 -.28 000027 -.79 010303 000028 -77.9 000029 -81.4 010303 000030 -70.6 000031 -74. 010303 000033 1. 000069 1. 010304 000024 10.8 000025 .97 010304 000026 -1. 000027 -1. 010304 000028 -84.6 000029 -89.7 010304 000030 -83.6 000031 -89.4 010304 000033 1. 000070 1. 010305 000024 1.5 000025 .12 010305 000026 -.36 000027 -.95 010305 000028 -60.6 000029 -76.3 010305 000030 -68.6 000031 -76.8 010305 000033 1. 000071 1. 010306 000000 .06 000024 6.2 010306 000025 .19 000026 -.35 010306 000027 -.89 000028 -95.9 010306 000029 -97.6 000030 -85.4 010306 000031 -87.8 000033 1. 010306 000071 1.2 010307 000000 .03 000024 6. 010307 000025 .19 000026 -.35 010307 000027 -.89 000028 -94.8 010307 000029 -96.6 000030 -83.8 010307 000031 -86.8 000033 1. 010307 000071 1.1 010308 000000 .1 000024 4.5 010308 000025 .27 000026 -.97 010308 000027 -1. 000028 -97.9 010308 000029 -100.3 000030 -95. 010308 000031 -98. 000033 1. 010308 000088 1. 010309 000000 .1 000024 5.5 010309 000025 .68 000026 -.96 010309 000027 -1. 000028 -84. 010309 000029 -88.1 000030 -79.4 010309 000031 -83.2 000033 1. 010309 000064 1. 010310 000000 .1 000024 6.5 010310 000025 .48 000026 -.56 010310 000027 -.97 000028 -96.5 010310 000029 -97.1 000030 -82.2 010310 000031 -83.3 000033 1. 010310 000067 1. 010320 000000 .09 000028 -1.9 010320 000029 -.9 000030 -2.4 010320 000031 -.9 000032 1. 010331 000000 -3.7 000024 -11. 010331 000025 -.5 000026 .5 010331 000027 .9 000028 100. 010331 000029 100. 000030 90. 010331 000031 90. 000033 -1. 010331 000032 -3. 000083 1. 010333 000000 -3.5 000083 -1. 010333 000084 1. 010401 000034 70. 000035 1. 010401 000036 -1. 000037 -1. 010401 000038 -97.8 000039 -102.3 010401 000040 -94.8 000041 -99.8 010401 000043 1. 010402 000034 9.5 000035 .68 010402 000036 -.9 000037 -1. 010402 000038 -89.1 000039 -92. 010402 000040 -77.4 000041 -80.1 010402 000043 1. 000068 1. 010403 000034 2.7 000035 .09 010403 000036 -.37 000037 -.92 010403 000038 -77.9 000039 -81.4 010403 000040 -70.6 000041 -74. 010403 000043 1. 000069 1. 010404 000034 10.8 000035 .93 010404 000036 -1. 000037 -1. 010404 000038 -84.6 000039 -89.7 010404 000040 -83.6 000041 -89.4 010404 000043 1. 000070 1. 010405 000000 .03 000034 6.2 010405 000035 .15 000036 -.45 010405 000037 -.98 000038 -95.9 010405 000039 -97.6 000040 -85.4 010405 000041 -87.8 000043 1. 010405 000071 1.1 010406 000000 .1 000034 6.5 010406 000035 .45 000036 -.63 010406 000037 -1. 000038 -96.5 010406 000039 -97.1 000040 -82.2 010406 000041 -83.3 000043 1. 010406 000067 1. 010407 000034 1.5 000035 .12 010407 000036 -.36 000037 -.95 010407 000038 -60.6 000039 -76.3 010407 000040 -68.6 000041 -76.8 010407 000043 1. 000071 1. 010408 000000 .1 000034 5.5 010408 000035 .68 000036 -.96 010408 000037 -1. 000038 -84. 010408 000039 -88.1 000040 -79.4 010408 000041 -83.2 000043 1. 010408 000064 1. 010420 000000 .09 000038 -3.9 010420 000039 -1.4 000040 -3.5 010420 000041 -1.3 000042 1. 010431 000000 -2.9 000034 -11. 010431 000035 -.5 000036 .5 010431 000037 .9 000038 89. 010431 000039 89. 000040 82. 010431 000041 82. 000042 -3. 010431 000043 -1. 000086 1. 010432 000000 -2.8 000085 1. 010432 000086 -1. 000089 .75 010501 000044 56. 000045 1. 010501 000046 -1. 000047 -1. 010501 000048 -99.4 000049 -103. 010501 000050 -96.7 000051 -101.2 010501 000053 1. 010502 000044 1.8 000047 -1. 010502 000048 -87.9 000049 -91.6 010502 000050 -88.1 000051 -92. 010502 000053 1. 000072 1. 010503 000044 1.4 000047 -.54 010503 000048 -86.2 000049 -90. 010503 000050 -88. 000051 -91.3 010503 000053 1. 000073 1. 010504 000044 10.6 000045 .68 010504 000046 -.87 000047 -1. 010504 000048 -99.9 000049 -100.4 010504 000050 -80.8 000051 -81.7 010504 000053 1. 000074 1. 010505 000044 2.5 000047 -.65 010505 000048 -89.6 000049 -91.7 010505 000050 -79.3 000051 -82.1 010505 000053 1. 000075 1. 010506 000044 11.5 000045 .77 010506 000046 -.93 000047 -1. 010506 000048 -79.5 000049 -85.1 010506 000050 -80.2 000051 -86.2 010506 000053 1. 000076 1. 010507 000044 1.5 000045 .12 010507 000046 -.36 000047 -.95 010507 000048 -60.6 000049 -76.3 010507 000050 -68.6 000051 -76.8 010507 000053 1. 000077 1. 010508 000000 .03 000044 4.2 010508 000045 .08 000046 -.3 010508 000047 -.91 000048 -99.5 010508 000049 -99.9 000050 -87.6 010508 000051 -89. 000053 1. 010508 000077 1.1 010509 000000 .06 000044 4.3 010509 000045 .07 000046 -.27 010509 000047 -.9 000048 -101.4 010509 000049 -101.5 000050 -89. 010509 000051 -90.2 000053 1. 010509 000077 1.2 010520 000000 .09 000048 -1.6 010520 000049 -.8 000050 -2. 010520 000051 -.8 000052 1. 010531 000000 -3.5 000044 -10. 010531 000045 -.5 000046 .5 010531 000047 .9 000048 101. 010531 000049 101. 000050 91. 010531 000051 91. 000052 -3. 010531 000053 -1. 000084 1. 010601 000054 56. 000055 1. 010601 000056 -1. 000057 -1. 010601 000058 -97.7 000059 -100.6 010601 000060 -94.5 000061 -98.5 010601 000063 1. 010602 000054 10.6 000055 .39 010602 000056 -1. 000057 -1. 010602 000058 -98.2 000059 -98. 010602 000060 -78.6 000061 -79. 010602 000063 1. 000074 1. 010603 000054 2.5 000057 -.87 010603 000058 -87.9 000059 -89.3 010603 000060 -77.1 000061 -79.4 010603 000063 1. 000075 1. 010604 000054 3.6 000055 .27 010604 000056 -1. 000057 -1. 010604 000058 -78.8 000059 -82.7 010604 000060 -75.1 000061 -80.5 010604 000063 1. 000078 1. 010605 000054 11.5 000055 .73 010605 000056 -.98 000057 -1. 010605 000058 -78.2 000059 -82.7 010605 000060 -78. 000061 -83.5 010605 000063 1. 000076 1. 010606 000054 2. 000056 -.38 010606 000057 -1. 000058 -66.9 010606 000059 -71.4 000060 -67.6 010606 000061 -73.8 000063 1. 010606 000079 1. 010607 000054 14.6 000055 1. 010607 000056 -1. 000057 -1. 010607 000058 -74.7 000059 -79.8 010607 000060 -77.3 000061 -83. 010607 000063 1. 000080 1. 010608 000054 6.1 000055 .33 010608 000056 -.65 000057 -1. 010608 000058 -70.7 000059 -75.9 010608 000060 -69.6 000061 -75.3 010608 000063 1. 000081 1. 010609 000000 .03 000054 4.2 010609 000055 .04 000056 -.36 010609 000057 -.98 000058 -97.8 010609 000059 -97.5 000060 -85.4 010609 000061 -86.3 000063 1. 010609 000077 1.1 010620 000000 .09 000058 -3.3 010620 000059 -1.6 000060 -4.2 010620 000061 -1.7 000062 1. 010631 000000 -2.7 000054 -11. 010631 000055 -.5 000056 .5 010631 000057 .9 000058 89. 010631 000059 89. 000060 82. 010631 000061 82. 000062 -3. 010631 000063 -1. 000087 1. 010632 000000 -2.7 000085 1. 010632 000087 -1. 000089 .75 010633 000000 -2.7 000086 1. 010633 000087 -1. 010701 000090 56. 000091 1. 010701 000092 -1. 000093 -1. 010701 000094 -97.7 000095 -100.6 010701 000096 -94.5 000097 -98.5 010701 000099 1. 010702 000074 1. 000090 10.6 010702 000091 .39 000092 -1. 010702 000093 -1. 000094 -98.2 010702 000095 -98. 000096 -78.6 010702 000097 -79. 000099 1. 010703 000075 1. 000090 2.5 010703 000093 -.87 000094 -87.9 010703 000095 -89.3 000096 -77.1 010703 000097 -79.4 000099 1. 010704 000078 1. 000090 3.6 010704 000091 .27 000092 -1. 010704 000093 -1. 000094 -78.8 010704 000095 -82.7 000096 -75.1 010704 000097 -80.5 000099 1. 010705 000076 1. 000090 11.5 010705 000091 .73 000092 -.98 010705 000093 -1. 000094 -78.2 010705 000095 -82.7 000096 -78. 010705 000097 -83.5 000099 1. 010706 000079 1. 000090 2. 010706 000092 -.38 000093 -1. 010706 000094 -66.9 000095 -71.4 010706 000096 -67.6 000097 -73.8 010706 000099 1. 010707 000080 1. 000090 14.6 010707 000091 1. 000092 -1. 010707 000093 -1. 000094 -74.7 010707 000095 -79.8 000096 -77.3 010707 000097 -83. 000099 1. 010708 000000 .03 000077 1.1 010708 000090 4.2 000091 .04 010708 000092 -.36 000093 -.98 010708 000094 -97.8 000095 -97.5 010708 000096 -85.4 000097 -86.3 010708 000099 1. 010709 000000 .07 000077 1.2 010709 000090 4.3 000091 .07 010709 000092 -.27 000093 -.9 010709 000094 -101.4 000095 -101.5 010709 000096 -89. 000097 -90.2 010709 000099 1. 010720 000000 .09 000094 -3.3 010720 000095 -1.6 000096 -4.2 010720 000097 -1.7 000098 1. 010731 000000 -2.7 000090 -10. 010731 000091 -.5 000092 .5 010731 000093 .9 000094 90. 010731 000095 90. 000096 83. 010731 000097 83. 000098 -3. 010731 000099 -1. RHS RHS 000064 7. 000065 7. RHS 000066 7. 000067 21. RHS 000068 3. 000069 3. RHS 000070 3. 000071 7. RHS 000072 1.5 000073 1.5 RHS 000074 10. 000075 10. RHS 000076 8.5 000077 13. RHS 000078 1.5 000079 1.5 RHS 000080 1. 000081 1. RHS 000082 15. 000083 15. RHS 000084 20. 000085 20. RHS 000086 15. 000088 1. ENDATA NAME SHARE2B *QSECTION QUADOBJ 010101 010101 0.8849E+01 010101 010105 0.6270E+01 010101 010408 0.5408E+01 010101 010509 0.6205E+01 010105 010101 0.6270E+01 010105 010105 0.2591E+02 010105 010408 0.7510E+01 010105 010509 0.1418E+02 010105 010704 0.5939E+01 010105 010705 0.5249E+01 010408 010101 0.5408E+01 010408 010105 0.7510E+01 010408 010408 0.1270E+02 010408 010509 0.7433E+01 010509 010101 0.6205E+01 010509 010105 0.1418E+02 010509 010408 0.7433E+01 010509 010509 0.2358E+02 010509 010704 0.5230E+01 010509 010705 0.4622E+01 010704 010105 0.5939E+01 010704 010509 0.5230E+01 010704 010704 0.7815E+01 010704 010705 0.4934E+01 010705 010105 0.5249E+01 010705 010509 0.4622E+01 010705 010704 0.4934E+01 010705 010705 0.6105E+01 ENDATA DyLP-1.10.4/Data/Sample/finnis.mps0000644000175200017520000030727410662211140015162 0ustar coincoinNAME FINNIS (PTABLES3) ROWS N PRICER G 1BALHCO G 1BALCOK G 1BALOIK G 1BALOIL G 1BALGSL G 1BALDSL G 1BALDSH G 1BALDSR G 1BALGAK G 1BALGAS G 1BALALC G 1BALHYD G 1BALURN G 1BALUDP G 1BALPLU G 1BALMAG G 1BALAGR G 1BALAGS G 1BALLMF G 1BALLMS G 2BALHCO G 2BALCOK G 2BALOIK G 2BALOIL G 2BALGSL G 2BALDSL G 2BALDSH G 2BALDSR G 2BALGAK G 2BALGAS G 2BALALC G 2BALHYD G 2BALURN G 2BALUDP G 2BALPLU G 2BALMAG G 2BALAGR G 2BALAGS G 2BALLMF G 2BALLMS G 3BALHCO G 3BALCOK G 3BALOIK G 3BALOIL G 3BALGSL G 3BALDSL G 3BALDSH G 3BALDSR G 3BALGAK G 3BALGAS G 3BALALC G 3BALHYD G 3BALURN G 3BALUDP G 3BALPLU G 3BALMAG G 3BALAGR G 3BALAGS G 3BALLMF G 3BALLMS E 1CPTEC3 E 1CPTEP1 E 1CPTE14 E 1CPTE22 E 1CPTE23 E 1CPTE31 E 1CPTE51 E 1CPTS06 E 1CPTS08 E 1CPTS09 E 1CPTS21 E 1CPTS23 E 1CPTS28 E 2CPTEC3 E 2CPTEP1 E 2CPTE14 E 2CPTE22 E 2CPTE23 E 2CPTE31 E 2CPTE35 E 2CPTE51 E 2CPTS06 E 2CPTS08 E 2CPTS09 E 2CPTS21 E 2CPTS23 E 2CPTS28 E 3CPTEC3 E 3CPTEP1 E 3CPTE14 E 3CPTE22 E 3CPTE23 E 3CPTE31 E 3CPTE35 E 3CPTE94 E 3CPTE60 E 3CPTE51 E 3CPTS01 E 3CPTS04 E 3CPTS06 E 3CPTS08 E 3CPTS09 E 3CPTS21 E 3CPTS23 E 3CPTS28 E 3CPTS29 E 3CPTS80 L 1CPTIJ6 L 1CPTIJ7 L 1CPTIJ8 L 1CPTR20 L 1CPTR21 L 1CPTR23 L 1CPTR27 L 1CPTR28 L 1CPTR2D L 1CPTR2L L 1CPTRT0 L 1CPTRT1 L 1CPTRT3 L 1CPTRT7 L 1CPTRT8 L 1CPTR50 L 1CPTR51 L 1CPTR53 L 1CPTR57 L 1CPTR58 L 1CPTR5H L 1CPTR5L L 1CPTR5M L 2CPTIJ6 L 2CPTIJ7 L 2CPTIJ8 L 2CPTR20 L 2CPTR21 L 2CPTR23 L 2CPTR27 L 2CPTR28 L 2CPTR2A L 2CPTR2B L 2CPTR2C L 2CPTR2D L 2CPTR2L L 2CPTRT0 L 2CPTRT1 L 2CPTRT3 L 2CPTRT7 L 2CPTRT8 L 2CPTRTB L 2CPTRTC L 2CPTR50 L 2CPTR51 L 2CPTR53 L 2CPTR57 L 2CPTR58 L 2CPTR5A L 2CPTR5H L 2CPTR5L L 2CPTR5M L 3CPTIJ6 L 3CPTIJ7 L 3CPTIJ8 L 3CPTR20 L 3CPTR21 L 3CPTR23 L 3CPTR27 L 3CPTR28 L 3CPTR2A L 3CPTR2B L 3CPTR2C L 3CPTR2D L 3CPTR2L L 3CPTRT0 L 3CPTRT1 L 3CPTRT3 L 3CPTRT7 L 3CPTRT8 L 3CPTRTB L 3CPTRTC L 3CPTR50 L 3CPTR51 L 3CPTR53 L 3CPTR57 L 3CPTR58 L 3CPTR5A L 3CPTR5C L 3CPTR5H L 3CPTR5L L 3CPTR5M L 3GRCE35 L 2GRCT80 L 3GRCT80 G 1DEMI1 G 1DEMII G 1DEMIJ G 1DEMNY G 1DEMR2 G 1DEMRT G 1DEMR5 G 1DEMRD G 1DEMT8 G 1DEMTX G 2DEMI1 G 2DEMII G 2DEMIJ G 2DEMNY G 2DEMR2 G 2DEMRT G 2DEMR5 G 2DEMRD G 2DEMT8 G 2DEMTX G 3DEMI1 G 3DEMII G 3DEMIJ G 3DEMNY G 3DEMR2 G 3DEMRT G 3DEMR5 G 3DEMRD G 3DEMT8 G 3DEMTX L 1UTLS06 L 1UTLS08 L 1UTLS09 L 1UTLS21 L 1UTLS23 L 1UTLS28 L 2UTLS06 L 2UTLS08 L 2UTLS09 L 2UTLS21 L 2UTLS23 L 2UTLS28 L 3UTLS01 L 3UTLS04 L 3UTLS06 L 3UTLS08 L 3UTLS09 L 3UTLS21 L 3UTLS23 L 3UTLS28 L 3UTLS29 L 3UTLS80 G 1UTLEC1 G 1UTLEC2 G 1UTLEP1 G 1UTLE22 G 1UTLE23 G 2UTLEC1 G 2UTLEC2 G 2UTLEP1 G 2UTLE22 G 2UTLE23 G 3UTLEC1 G 3UTLEC2 G 3UTLEP1 G 3UTLE22 G 3UTLE23 G 1BNDEP1L G 2BNDEP1L G 1BALEWD G 1BALEWN G 1BALEID G 1BALEIN G 1BALESD G 1BALESN G 2BALEWD G 2BALEWN G 2BALEID G 2BALEIN G 2BALESD G 2BALESN G 3BALEWD G 3BALEWN G 3BALEID G 3BALEIN G 3BALESD G 3BALESN G 1EPKWD G 1EPKSD G 2EPKWD G 2EPKSD G 3EPKWD G 3EPKSD L 1EWDEC1 L 1EWDEC2 L 1EWDEC3 L 1EWDEP1 L 1EWDE14 L 1EWDE22 L 1EWDE23 L 1EWDE31 L 1EWDE51 L 1EIDEC1 L 1EIDEC2 L 1EIDEC3 L 1EIDEP1 L 1EIDE14 L 1EIDE22 L 1EIDE23 L 1EIDE31 L 1EIDE51 L 1ESDEC1 L 1ESDEC2 L 1ESDEC3 L 1ESDEP1 L 1ESDE14 L 1ESDE22 L 1ESDE23 L 1ESDE31 L 1ESDE51 L 2EWDEC1 L 2EWDEC2 L 2EWDEC3 L 2EWDEP1 L 2EWDE14 L 2EWDE22 L 2EWDE23 L 2EWDE31 L 2EWDE35 L 2EWDE51 L 2EIDEC1 L 2EIDEC2 L 2EIDEC3 L 2EIDEP1 L 2EIDE14 L 2EIDE22 L 2EIDE23 L 2EIDE31 L 2EIDE35 L 2EIDE51 L 2ESDEC1 L 2ESDEC2 L 2ESDEC3 L 2ESDEP1 L 2ESDE14 L 2ESDE22 L 2ESDE23 L 2ESDE31 L 2ESDE35 L 2ESDE51 L 3EWDEC1 L 3EWDEC2 L 3EWDEC3 L 3EWDEP1 L 3EWDE14 L 3EWDE22 L 3EWDE23 L 3EWDE31 L 3EWDE35 L 3EWDE94 L 3EWDE60 L 3EWDE51 L 3EIDEC1 L 3EIDEC2 L 3EIDEC3 L 3EIDEP1 L 3EIDE14 L 3EIDE22 L 3EIDE23 L 3EIDE31 L 3EIDE35 L 3EIDE94 L 3EIDE60 L 3EIDE51 L 3ESDEC1 L 3ESDEC2 L 3ESDEC3 L 3ESDEP1 L 3ESDE14 L 3ESDE22 L 3ESDE23 L 3ESDE31 L 3ESDE35 L 3ESDE94 L 3ESDE60 L 3ESDE51 L 1EWNEC1 L 1EWNEC2 L 1EWNEC3 L 1EWNEP1 L 1EWNE14 L 1EWNE31 L 1EINEC1 L 1EINEC2 L 1EINEC3 L 1EINEP1 L 1EINE14 L 1EINE31 L 1ESNEC1 L 1ESNEC2 L 1ESNEC3 L 1ESNEP1 L 1ESNE14 L 1ESNE31 L 2EWNEC1 L 2EWNEC2 L 2EWNEC3 L 2EWNEP1 L 2EWNE14 L 2EWNE31 L 2EWNE35 L 2EINEC1 L 2EINEC2 L 2EINEC3 L 2EINEP1 L 2EINE14 L 2EINE31 L 2EINE35 L 2ESNEC1 L 2ESNEC2 L 2ESNEC3 L 2ESNEP1 L 2ESNE14 L 2ESNE31 L 2ESNE35 L 3EWNEC1 L 3EWNEC2 L 3EWNEC3 L 3EWNEP1 L 3EWNE14 L 3EWNE31 L 3EWNE35 L 3EWNE94 L 3EWNE60 L 3EINEC1 L 3EINEC2 L 3EINEC3 L 3EINEP1 L 3EINE14 L 3EINE31 L 3EINE35 L 3EINE94 L 3EINE60 L 3ESNEC1 L 3ESNEC2 L 3ESNEC3 L 3ESNEP1 L 3ESNE14 L 3ESNE31 L 3ESNE35 L 3ESNE94 L 3ESNE60 L 1BASW L 1BASI L 1BASS L 2BASW L 2BASI L 2BASS L 3BASW L 3BASI L 3BASS G 2BALDHW G 2BALDHI G 2BALDHS G 3BALDHW G 3BALDHI G 3BALDHS G 2HPKW G 3HPKW G 1RAT001 G 2RAT001 G 3RAT001 G 1RAT002 G 2RAT002 G 3RAT002 G 1RAT003 G 2RAT003 G 3RAT003 L 1RAT004 L 2RAT004 L 3RAT004 L 1RAT005 L 2RAT005 L 3RAT005 L 1RAT006 L 2RAT006 L 3RAT006 L 1RAT007 L 2RAT007 L 3RAT007 L 2RAT008 L 3RAT008 L 2RAT009 L 3RAT009 L 1RAT010 L 2RAT010 L 3RAT010 L 1RAT011 L 2RAT011 L 3RAT011 L 2RAT012 L 3RAT012 L 1RAT013 L 2RAT013 L 3RAT013 COLUMNS 1MINHCO1 PRICER 10.330608 1BALHCO 1. 1MINHCO1 1BALEWD -.000659 1BALEWN -.000659 1MINHCO1 1BALEID -.000857 1BALEIN -.000461 1MINHCO1 1BALESD -.002834 1BALESN -.00112 1MINHCO1 1EPKWD -.00659 1EPKSD -.00659 2MINHCO1 PRICER 9.170958 2BALHCO 1. 2MINHCO1 2BALEWD -.000659 2BALEWN -.000659 2MINHCO1 2BALEID -.000857 2BALEIN -.000461 2MINHCO1 2BALESD -.002834 2BALESN -.00112 2MINHCO1 2EPKWD -.00659 2EPKSD -.00659 3MINHCO1 PRICER 7.93182 3BALHCO 1. 3MINHCO1 3BALEWD -.000659 3BALEWN -.000659 3MINHCO1 3BALEID -.000857 3BALEIN -.000461 3MINHCO1 3BALESD -.002834 3BALESN -.00112 3MINHCO1 3EPKWD -.00659 3EPKSD -.00659 1IMPHCO1 PRICER 16.167389 1BALHCO 1. 2IMPHCO1 PRICER 13.355014 2BALHCO 1. 3IMPHCO1 PRICER 10.93149 3BALHCO 1. 1EXPHCO1 PRICER -16.167389 1BALHCO -1. 2EXPHCO1 PRICER -13.355014 2BALHCO -1. 3EXPHCO1 PRICER -10.93149 3BALHCO -1. 1IMPOIL1 PRICER 27.995941 1BALOIL 1. 2IMPOIL1 PRICER 22.001038 2BALOIL 1. 3IMPOIL1 PRICER 17.248093 3BALOIL 1. 1EXPOIL1 PRICER -27.995941 1BALOIL -1. 2EXPOIL1 PRICER -22.001038 2BALOIL -1. 3EXPOIL1 PRICER -17.248093 3BALOIL -1. 1STKOIK1 1BALOIK 1. 1RAT011 -1. 2STKOIK1 2BALOIK 1. 1BALOIK -1. 2STKOIK1 2RAT011 -1. 3STKOIK1 3BALOIK 1. 2BALOIK -1. 3STKOIK1 3RAT011 -1. ZSTKOIK1 3BALOIK -1. 1EXPDSH1 1BALDSH -1. 2EXPDSH1 2BALDSH -1. 3EXPDSH1 3BALDSH -1. 1EXPDSL1 1BALDSL -1. 2EXPDSL1 2BALDSL -1. 3EXPDSL1 3BALDSL -1. 1IMPGAS1 PRICER 19.886414 1BALGAS .95 2IMPGAS1 PRICER 18.295593 2BALGAS .95 3IMPGAS1 PRICER 16.238586 3BALGAS .95 1EXPGAS1 PRICER -19.886414 1BALGAS -1. 2EXPGAS1 PRICER -18.295593 2BALGAS -1. 3EXPGAS1 PRICER -16.238586 3BALGAS -1. 1STKGAK1 1BALGAK 1. 1RAT010 -1. 2STKGAK1 2BALGAK 1. 1BALGAK -1. 2STKGAK1 2RAT010 -1. 3STKGAK1 3BALGAK 1. 2BALGAK -1. 3STKGAK1 3RAT010 -1. ZSTKGAK1 3BALGAK -1. 1IMPURN1 PRICER .537191 1BALURN 1. 2IMPURN1 PRICER .401422 2BALURN 1. 3IMPURN1 PRICER .299967 3BALURN 1. 1STKURN1 1BALURN 1. 2STKURN1 2BALURN 1. 1BALURN -1. 3STKURN1 3BALURN 1. 2BALURN -1. ZSTKURN1 3BALURN -1. 1STKUDP1 1BALUDP 1. 2STKUDP1 2BALUDP 1. 1BALUDP -1. 3STKUDP1 3BALUDP 1. 2BALUDP -1. ZSTKUDP1 3BALUDP -1. 1STKPLU1 1BALPLU 1. 2STKPLU1 2BALPLU 1. 1BALPLU -1. 3STKPLU1 3BALPLU 1. 2BALPLU -1. ZSTKPLU1 3BALPLU -1. 1STKAGS1 1BALAGS 1. 2STKAGS1 2BALAGS 1. 1BALAGS -1. 3STKAGS1 3BALAGS 1. 2BALAGS -1. ZSTKAGS1 3BALAGS -1. 1STKLMS1 1BALLMS 1. 2STKLMS1 2BALLMS 1. 1BALLMS -1. 3STKLMS1 3BALLMS 1. 2BALLMS -1. ZSTKLMS1 3BALLMS -1. 1EC3INV PRICER 2240.95752 1CPTEC3 -1. 1EC3INV 2CPTEC3 -1. 3CPTEC3 -1. 2EC3INV PRICER 1269.021484 2CPTEC3 -1. 2EC3INV 3CPTEC3 -1. 3EC3INV PRICER 542.729248 3CPTEC3 -1. 1EP1INV PRICER 2188.71875 1CPTEP1 -1. 1EP1INV 2CPTEP1 -1. 3CPTEP1 -1. 2EP1INV PRICER 1239.439453 2CPTEP1 -1. 2EP1INV 3CPTEP1 -1. 3EP1INV PRICER 530.077637 3CPTEP1 -1. 1E14INV PRICER 1783.052734 1CPTE14 -1. 1E14INV 2CPTE14 -1. 3CPTE14 -1. 2E14INV PRICER 1009.716797 2CPTE14 -1. 2E14INV 3CPTE14 -1. 3E14INV PRICER 431.830811 3CPTE14 -1. 1E22INV PRICER 1260.778809 1CPTE22 -1. 1E22INV 2CPTE22 -1. 3CPTE22 -1. 2E22INV PRICER 713.960449 2CPTE22 -1. 2E22INV 3CPTE22 -1. 3E22INV PRICER 305.343506 3CPTE22 -1. 1E23INV PRICER 4029.3042 1CPTE23 -1. 1E23INV 2CPTE23 -1. 3CPTE23 -1. 2E23INV PRICER 2281.73584 1BALAGR -11.662 2E23INV 2CPTE23 -1. 3CPTE23 -1. 3E23INV PRICER 975.842285 2BALAGR -11.662 3E23INV 3CPTE23 -1. 1E31INV PRICER .00001 1CPTE31 -1. 1E31INV 2CPTE31 -1. 3CPTE31 -1. 2E31INV PRICER .00001 2CPTE31 -1. 2E31INV 3CPTE31 -1. 3E31INV PRICER .00001 3CPTE31 -1. 2E35INV PRICER .00001 2CPTE35 -1. 2E35INV 3CPTE35 -1. 3E35INV PRICER .00001 3CPTE35 -1. 3E94INV PRICER 369.621338 3CPTE94 -1. 3E60INV PRICER 721.590332 3CPTE60 -1. 1E51INV PRICER 814.03125 1CPTE51 -1. 1E51INV 2CPTE51 -1. 3CPTE51 -1. 2E51INV PRICER 460.973877 2CPTE51 -1. 2E51INV 3CPTE51 -1. 3E51INV PRICER 197.147232 3CPTE51 -1. 3S01INV PRICER 2.182532 3CPTS01 -1. 3S04INV PRICER 2.932184 3CPTS04 -1. 1S06INV 1CPTS06 -1. 2CPTS06 -1. 1S06INV 3CPTS06 -1. 2S06INV 2CPTS06 -1. 3CPTS06 -1. 3S06INV 3CPTS06 -1. 1S08INV PRICER 2.611933 1CPTS08 -1. 1S08INV 2CPTS08 -1. 3CPTS08 -1. 2S08INV PRICER 1.4791 2CPTS08 -1. 2S08INV 3CPTS08 -1. 3S08INV PRICER .632575 3CPTS08 -1. 1S09INV PRICER 6.203342 1CPTS09 -1. 1S09INV 2CPTS09 -1. 3CPTS09 -1. 2S09INV PRICER 3.512862 2CPTS09 -1. 2S09INV 3CPTS09 -1. 3S09INV PRICER 1.502365 3CPTS09 -1. 1S21INV PRICER 5.800726 1CPTS21 -1. 1S21INV 2CPTS21 -1. 3CPTS21 -1. 2S21INV PRICER 3.284866 2CPTS21 -1. 2S21INV 3CPTS21 -1. 3S21INV PRICER 1.404856 3CPTS21 -1. 1S23INV PRICER 5.273388 1CPTS23 -1. 1S23INV 2CPTS23 -1. 3CPTS23 -1. 2S23INV PRICER 2.986242 2CPTS23 -1. 2S23INV 3CPTS23 -1. 3S23INV PRICER 1.277142 3CPTS23 -1. 1S28INV PRICER 2.109354 1CPTS28 -1. 1S28INV 2CPTS28 -1. 3CPTS28 -1. 2S28INV PRICER 1.194496 2CPTS28 -1. 2S28INV 3CPTS28 -1. 3S28INV PRICER .510857 3CPTS28 -1. 3S29INV PRICER 1.532571 3CPTS29 -1. 3S80INV PRICER 1.870049 3CPTS80 -1. 1IJ6INV PRICER 1.43445 1CPTIJ6 -1. 1IJ6INV 2CPTIJ6 -1. 3CPTIJ6 -1. 2IJ6INV PRICER .812309 2CPTIJ6 -1. 2IJ6INV 3CPTIJ6 -1. 3IJ6INV PRICER .347404 3CPTIJ6 -1. 1IJ7INV PRICER 1.43445 1CPTIJ7 -1. 1IJ7INV 2CPTIJ7 -1. 3CPTIJ7 -1. 2IJ7INV PRICER .812309 2CPTIJ7 -1. 2IJ7INV 3CPTIJ7 -1. 3IJ7INV PRICER .347404 3CPTIJ7 -1. 1IJ8INV PRICER 4.944228 1CPTIJ8 -1. 1IJ8INV 2CPTIJ8 -1. 3CPTIJ8 -1. 2IJ8INV PRICER 2.799844 2CPTIJ8 -1. 2IJ8INV 3CPTIJ8 -1. 3IJ8INV PRICER 1.197424 3CPTIJ8 -1. 1R20INV PRICER 19.863083 1CPTR20 -1. 1R20INV 2CPTR20 -1. 3CPTR20 -1. 2R20INV PRICER 11.248174 2CPTR20 -1. 2R20INV 3CPTR20 -1. 3R20INV PRICER 4.810567 3CPTR20 -1. 1R21INV PRICER 11.053495 1CPTR21 -1. 1R21INV 2CPTR21 -1. 3CPTR21 -1. 2R21INV PRICER 6.259433 2CPTR21 -1. 2R21INV 3CPTR21 -1. 3R21INV PRICER 2.677005 3CPTR21 -1. 1R23INV PRICER 53.349091 1CPTR23 -1. 1R23INV 2CPTR23 -1. 3CPTR23 -1. 2R23INV PRICER 30.210815 2CPTR23 -1. 2R23INV 3CPTR23 -1. 3R23INV PRICER 12.920424 3CPTR23 -1. 1R27INV PRICER 39.374603 1CPTR27 -1. 1R27INV 2CPTR27 -1. 3CPTR27 -1. 2R27INV PRICER 22.297272 2CPTR27 -1. 2R27INV 3CPTR27 -1. 3R27INV PRICER 9.536002 3CPTR27 -1. 1R28INV PRICER 54.491653 1CPTR28 -1. 1R28INV 2CPTR28 -1. 3CPTR28 -1. 2R28INV PRICER 30.857819 2CPTR28 -1. 2R28INV 3CPTR28 -1. 3R28INV PRICER 13.197139 3CPTR28 -1. 2R2AINV PRICER .00001 2CPTR2A -1. 2R2AINV 3CPTR2A -1. 3R2AINV PRICER .00001 3CPTR2A -1. 2R2BINV PRICER .00001 2CPTR2B -1. 2R2BINV 3CPTR2B -1. 3R2BINV PRICER .00001 3CPTR2B -1. 2R2CINV PRICER 20.4711 2CPTR2C -1. 2R2CINV 3CPTR2C -1. 3R2CINV PRICER 8.755 3CPTR2C -1. 1R2DINV PRICER .00001 1CPTR2D -1. 1R2DINV 2CPTR2D -1. 3CPTR2D -1. 2R2DINV PRICER .00001 2CPTR2D -1. 2R2DINV 3CPTR2D -1. 3R2DINV PRICER .00001 3CPTR2D -1. 1R2LINV PRICER 55.615082 1CPTR2L -1. 1R2LINV 2CPTR2L -1. 3CPTR2L -1. 2R2LINV PRICER 31.494003 2CPTR2L -1. 2R2LINV 3CPTR2L -1. 3R2LINV PRICER 13.469211 3CPTR2L -1. 1RT0INV PRICER 19.863083 1CPTRT0 -1. 1RT0INV 2CPTRT0 -1. 3CPTRT0 -1. 2RT0INV PRICER 11.248174 2CPTRT0 -1. 2RT0INV 3CPTRT0 -1. 3RT0INV PRICER 4.810567 3CPTRT0 -1. 1RT1INV PRICER 11.053495 1CPTRT1 -1. 1RT1INV 2CPTRT1 -1. 3CPTRT1 -1. 2RT1INV PRICER 6.259433 2CPTRT1 -1. 2RT1INV 3CPTRT1 -1. 3RT1INV PRICER 2.677005 3CPTRT1 -1. 1RT3INV PRICER 53.349091 1CPTRT3 -1. 1RT3INV 2CPTRT3 -1. 3CPTRT3 -1. 2RT3INV PRICER 30.210815 2CPTRT3 -1. 2RT3INV 3CPTRT3 -1. 3RT3INV PRICER 12.920424 3CPTRT3 -1. 1RT7INV PRICER 39.374603 1CPTRT7 -1. 1RT7INV 2CPTRT7 -1. 3CPTRT7 -1. 2RT7INV PRICER 22.297272 2CPTRT7 -1. 2RT7INV 3CPTRT7 -1. 3RT7INV PRICER 9.536002 3CPTRT7 -1. 1RT8INV PRICER 54.491653 1CPTRT8 -1. 1RT8INV 2CPTRT8 -1. 3CPTRT8 -1. 2RT8INV PRICER 30.857819 2CPTRT8 -1. 2RT8INV 3CPTRT8 -1. 3RT8INV PRICER 13.197139 3CPTRT8 -1. 2RTBINV PRICER .00001 2CPTRTB -1. 2RTBINV 3CPTRTB -1. 3RTBINV PRICER .00001 3CPTRTB -1. 2RTCINV PRICER 20.4711 2CPTRTC -1. 2RTCINV 3CPTRTC -1. 3RTCINV PRICER 8.755 3CPTRTC -1. 1R50INV PRICER 17.226379 1CPTR50 -1. 1R50INV 2CPTR50 -1. 3CPTR50 -1. 2R50INV PRICER 9.755052 2CPTR50 -1. 2R50INV 3CPTR50 -1. 3R50INV PRICER 4.172 3CPTR50 -1. 1R51INV PRICER 8.560434 1CPTR51 -1. 1R51INV 2CPTR51 -1. 3CPTR51 -1. 2R51INV PRICER 4.847649 2CPTR51 -1. 2R51INV 3CPTR51 -1. 3R51INV PRICER 2.073219 3CPTR51 -1. 1R53INV PRICER 53.349091 1CPTR53 -1. 1R53INV 2CPTR53 -1. 3CPTR53 -1. 2R53INV PRICER 30.210815 2CPTR53 -1. 2R53INV 3CPTR53 -1. 3R53INV PRICER 12.920424 3CPTR53 -1. 1R57INV PRICER 39.374603 1CPTR57 -1. 1R57INV 2CPTR57 -1. 3CPTR57 -1. 2R57INV PRICER 22.297272 2CPTR57 -1. 2R57INV 3CPTR57 -1. 3R57INV PRICER 9.536002 3CPTR57 -1. 1R58INV PRICER 54.491653 1CPTR58 -1. 1R58INV 2CPTR58 -1. 3CPTR58 -1. 2R58INV PRICER 30.857819 2CPTR58 -1. 2R58INV 3CPTR58 -1. 3R58INV PRICER 13.197139 3CPTR58 -1. 2R5AINV PRICER .00001 2CPTR5A -1. 2R5AINV 3CPTR5A -1. 3R5AINV PRICER .00001 3CPTR5A -1. 3R5CINV PRICER 8.755 3CPTR5C -1. 1R5HINV PRICER 101.799759 1CPTR5H -1. 1R5HINV 2CPTR5H -1. 3CPTR5H -1. 2R5HINV PRICER 57.647705 2CPTR5H -1. 2R5HINV 3CPTR5H -1. 3R5HINV PRICER 24.654495 3CPTR5H -1. 1R5LINV PRICER 17.120865 1CPTR5L -1. 1R5LINV 2CPTR5L -1. 3CPTR5L -1. 2R5LINV PRICER 9.695297 2CPTR5L -1. 2R5LINV 3CPTR5L -1. 3R5LINV PRICER 4.146439 3CPTR5L -1. 1R5MINV PRICER 17.120865 1CPTR5M -1. 1R5MINV 2CPTR5M -1. 3CPTR5M -1. 2R5MINV PRICER 9.695297 2CPTR5M -1. 2R5MINV 3CPTR5M -1. 3R5MINV PRICER 4.146439 3CPTR5M -1. 1I1YCAP 1BALHCO -.0135 1BALCOK -.4268 1I1YCAP 1BALDSL -.0323 1BALDSH -.1983 1I1YCAP 1BALGAS -.2186 1DEMI1 1. 1I1YCAP 1BALEWD -.014242 1BALEWN -.01104 1I1YCAP 1BALEID -.016781 1BALEIN -.006182 1I1YCAP 1BALESD -.048907 1BALESN -.013248 1I1YCAP 1EPKWD -.142416 1EPKSD -.113738 2I1YCAP 2BALHCO -.0165 2BALCOK -.5198 2I1YCAP 2BALDSL -.0212 2BALDSH -.1305 2I1YCAP 2BALGAS -.1977 2DEMI1 1. 2I1YCAP 2BALEWD -.014758 2BALEWN -.01144 2I1YCAP 2BALEID -.017389 2BALEIN -.006406 2I1YCAP 2BALESD -.050679 2BALESN -.013728 2I1YCAP 2EPKWD -.147576 2EPKSD -.117859 3I1YCAP 3BALHCO -.0194 3BALCOK -.6166 3I1YCAP 3BALDSL -.0102 3BALDSH -.0628 3I1YCAP 3BALGAS -.1777 3DEMI1 1. 3I1YCAP 3BALEWD -.015261 3BALEWN -.01183 3I1YCAP 3BALEID -.017982 3BALEIN -.006625 3I1YCAP 3BALESD -.052407 3BALESN -.014196 3I1YCAP 3EPKWD -.152607 3EPKSD -.121876 1IIYCAP 1BALHCO -.1313 1BALCOK -.027 1IIYCAP 1BALDSL -.2811 1BALGAS -.2555 1IIYCAP 1DEMII 1. 1BALEWD -.039358 1IIYCAP 1BALEWN -.03051 1BALEID -.046375 1IIYCAP 1BALEIN -.017086 1BALESD -.135159 1IIYCAP 1BALESN -.036612 1EPKWD -.393579 1IIYCAP 1EPKSD -.314324 2IIYCAP 2BALHCO -.1549 2BALCOK -.0318 2IIYCAP 2BALDSL -.2619 2BALGAS -.2453 2IIYCAP 2DEMII 1. 2BALEWD -.039487 2IIYCAP 2BALEWN -.03061 2BALEID -.046527 2IIYCAP 2BALEIN -.017142 2BALESD -.135602 2IIYCAP 2BALESN -.036732 2EPKWD -.394869 2IIYCAP 2EPKSD -.315354 3IIYCAP 3BALHCO -.1852 3BALCOK -.038 3IIYCAP 3BALDSL -.2695 3BALGAS -.2048 3IIYCAP 3DEMII 1. 3BALEWD -.03901 3IIYCAP 3BALEWN -.03024 3BALEID -.045965 3IIYCAP 3BALEIN -.016934 3BALESD -.133963 3IIYCAP 3BALESN -.036288 3EPKWD -.390096 3IIYCAP 3EPKSD -.311542 1IJ6CAP PRICER 15.909122 1BALDSH -1.818181 1IJ6CAP 1CPTIJ6 1. 1DEMIJ 1. 2IJ6CAP PRICER 11.88827 2BALDSH -1.818181 2IJ6CAP 2CPTIJ6 1. 2DEMIJ 1. 3IJ6CAP PRICER 8.88363 3BALDSH -1.818181 3IJ6CAP 3CPTIJ6 1. 3DEMIJ 1. 1IJ7CAP PRICER 39.002 1BALGAS -1.538461 1IJ7CAP 1CPTIJ7 1. 1DEMIJ 1. 2IJ7CAP PRICER 29.144684 2BALGAS -1.538461 2IJ7CAP 2CPTIJ7 1. 2DEMIJ 1. 3IJ7CAP PRICER 21.778656 3BALGAS -1.538461 3IJ7CAP 3CPTIJ7 1. 3DEMIJ 1. 1IJ8CAP PRICER 11.053747 1BALHCO -2. 1IJ8CAP 1CPTIJ8 1. 1DEMIJ 1. 2IJ8CAP PRICER 8.260037 2BALHCO -2. 2IJ8CAP 2CPTIJ8 1. 2DEMIJ 1. 3IJ8CAP PRICER 6.172396 3BALHCO -2. 3IJ8CAP 3CPTIJ8 1. 3DEMIJ 1. 1NYYCAP 1BALGSL -.2795 1BALDSH -.4192 1NYYCAP 1BALGAS -.3013 1DEMNY 1. 2NYYCAP 2BALGSL -.285 2BALDSH -.4275 2NYYCAP 2BALGAS -.2875 2DEMNY 1. 3NYYCAP 3BALGSL -.2915 3BALDSH -.4373 3NYYCAP 3BALGAS -.2712 3DEMNY 1. 1R20CAP PRICER 7.231423 1CPTR20 1. 1R20CAP 1DEMR2 1. 1BALEWN -.482222 1R20CAP 1BALEIN -.345555 1BALESN -.283333 2R20CAP PRICER 5.403763 2CPTR20 1. 2R20CAP 2DEMR2 1. 2BALEWN -.482222 2R20CAP 2BALEIN -.345555 2BALESN -.283333 3R20CAP PRICER 4.038016 3CPTR20 1. 3R20CAP 3DEMR2 1. 3BALEWN -.482222 3R20CAP 3BALEIN -.345555 3BALESN -.283333 1R21CAP PRICER 6.869854 1CPTR21 1. 1R21CAP 1DEMR2 1. 1BALEWD -.385555 1R21CAP 1BALEWN -.096667 1BALEID -.276667 1R21CAP 1BALEIN -.068889 1BALESD -.226667 1R21CAP 1BALESN -.056667 1EPKWD -3.855558 1R21CAP 1EPKSD -.527132 1RAT004 .311 2R21CAP PRICER 5.133575 2CPTR21 1. 2R21CAP 2DEMR2 1. 2BALEWD -.385555 2R21CAP 2BALEWN -.096667 2BALEID -.276667 2R21CAP 2BALEIN -.068889 2BALESD -.226667 2R21CAP 2BALESN -.056667 2EPKWD -3.855558 2R21CAP 2EPKSD -.527132 2RAT004 .314 3R21CAP PRICER 3.836116 3CPTR21 1. 3R21CAP 3DEMR2 1. 3BALEWD -.385555 3R21CAP 3BALEWN -.096667 3BALEID -.276667 3R21CAP 3BALEIN -.068889 3BALESD -.226667 3R21CAP 3BALESN -.056667 3EPKWD -3.855558 3R21CAP 3EPKSD -.527132 3RAT004 .317 1R23CAP PRICER 15.416441 1BALDSL -1.538461 1R23CAP 1CPTR23 1. 1DEMR2 1. 1R23CAP 1RAT005 .311 2R23CAP PRICER 11.520109 2BALDSL -1.538461 2R23CAP 2CPTR23 1. 2DEMR2 1. 2R23CAP 2RAT005 .314 3R23CAP PRICER 8.608518 3BALDSL -1.538461 3R23CAP 3CPTR23 1. 3DEMR2 1. 3R23CAP 3RAT005 .317 1R27CAP PRICER 19.469208 1BALGAS -1.538461 1R27CAP 1CPTR27 1. 1DEMR2 1. 1R27CAP 1RAT006 .311 2R27CAP PRICER 14.548593 2BALGAS -1.538461 2R27CAP 2CPTR27 1. 2DEMR2 1. 2R27CAP 2RAT006 .314 3R27CAP PRICER 10.871583 3BALGAS -1.538461 3R27CAP 3CPTR27 1. 3DEMR2 1. 3R27CAP 3RAT006 .317 1R28CAP PRICER 31.92157 1BALHCO -2. 1R28CAP 1CPTR28 1. 1DEMR2 1. 1R28CAP 1RAT007 .311 2R28CAP PRICER 23.853745 2BALHCO -2. 2R28CAP 2CPTR28 1. 2DEMR2 1. 2R28CAP 2RAT007 .314 3R28CAP PRICER 17.824951 3BALHCO -2. 3R28CAP 3CPTR28 1. 3DEMR2 1. 3R28CAP 3RAT007 .317 2R2ACAP PRICER 6.947694 2CPTR2A 1. 2R2ACAP 2DEMR2 1. 2BALEWD -.144583 2R2ACAP 2BALEWN -.03625 2BALEID -.10375 2R2ACAP 2BALEIN -.025833 2BALESD -.085 2R2ACAP 2BALESN -.02125 2EPKWD -1.445833 2R2ACAP 2EPKSD -.197674 2RAT008 .314 3R2ACAP PRICER 5.191734 3CPTR2A 1. 3R2ACAP 3DEMR2 1. 3BALEWD -.144583 3R2ACAP 3BALEWN -.03625 3BALEID -.10375 3R2ACAP 3BALEIN -.025833 3BALESD -.085 3R2ACAP 3BALESN -.02125 3EPKWD -1.445833 3R2ACAP 3EPKSD -.197674 3RAT008 .317 2R2BCAP PRICER 11.901143 2BALGAS -.833333 2R2BCAP 2CPTR2B 1. 2DEMR2 1. 2R2BCAP 2RAT009 .314 3R2BCAP PRICER 8.862661 3BALGAS -.826447 3R2BCAP 3CPTR2B 1. 3DEMR2 1. 3R2BCAP 3RAT009 .317 2R2CCAP PRICER 9.263595 2CPTR2C 1. 2R2CCAP 2DEMR2 1. 2BALDHW -.563636 2R2CCAP 2BALDHI -.403896 2BALDHS -.331169 2R2CCAP 2HPKW -2.818182 2RAT012 .314 3R2CCAP PRICER 6.922315 3CPTR2C 1. 3R2CCAP 3DEMR2 1. 3BALDHW -.563636 3R2CCAP 3BALDHI -.403896 3BALDHS -.331169 3R2CCAP 3HPKW -2.818182 3RAT012 .317 1R2DCAP 1CPTR2D 1. 1DEMR2 1. 1R2DCAP 1RAT002 -1.8 2R2DCAP 2CPTR2D 1. 2DEMR2 1. 2R2DCAP 2RAT002 -1.8 3R2DCAP 3CPTR2D 1. 3DEMR2 1. 3R2DCAP 3RAT002 -1.8 1R2LCAP PRICER 14.772768 1CPTR2L 1. 1R2LCAP 1DEMR2 1. 1BALEWD -.347 1R2LCAP 1BALEWN -.087 1BALEID -.249 1R2LCAP 1BALEIN -.062 1BALESD -.204 1R2LCAP 1BALESN -.051 1EPKWD -3.47 1R2LCAP 1EPKSD -.474419 1RAT002 1. 2R2LCAP PRICER 11.039117 2CPTR2L 1. 2R2LCAP 2DEMR2 1. 2BALEWD -.347 2R2LCAP 2BALEWN -.087 2BALEID -.249 2R2LCAP 2BALEIN -.062 2BALESD -.204 2R2LCAP 2BALESN -.051 2EPKWD -3.47 2R2LCAP 2EPKSD -.474419 2RAT002 1. 3R2LCAP PRICER 8.249092 3CPTR2L 1. 3R2LCAP 3DEMR2 1. 3BALEWD -.347 3R2LCAP 3BALEWN -.087 3BALEID -.249 3R2LCAP 3BALEIN -.062 3BALESD -.204 3R2LCAP 3BALESN -.051 3EPKWD -3.47 3R2LCAP 3EPKSD -.474419 3RAT002 1. 1R2YCAP 1BALHCO -.923936 1BALDSL -.114623 1R2YCAP 1BALGAS -1.068479 1DEMR2 1. 2R2YCAP 2BALHCO -.54554 2BALDSL -.072151 2R2YCAP 2BALGAS -1.256371 2DEMR2 1. 3R2YCAP 3BALHCO -.418028 3BALDSL -.058718 3R2YCAP 3BALGAS -1.318908 3DEMR2 1. 1RT0CAP PRICER 7.231423 1CPTRT0 1. 1RT0CAP 1DEMRT 1. 1BALEWN -.482222 1RT0CAP 1BALEIN -.345555 1BALESN -.283333 2RT0CAP PRICER 5.403763 2CPTRT0 1. 2RT0CAP 2DEMRT 1. 2BALEWN -.482222 2RT0CAP 2BALEIN -.345555 2BALESN -.283333 3RT0CAP PRICER 4.038016 3CPTRT0 1. 3RT0CAP 3DEMRT 1. 3BALEWN -.482222 3RT0CAP 3BALEIN -.345555 3BALESN -.283333 1RT1CAP PRICER 6.869854 1CPTRT1 1. 1RT1CAP 1DEMRT 1. 1BALEWD -.385555 1RT1CAP 1BALEWN -.096667 1BALEID -.276667 1RT1CAP 1BALEIN -.068889 1BALESD -.226667 1RT1CAP 1BALESN -.056667 1EPKWD -3.855558 1RT1CAP 1EPKSD -.527132 2RT1CAP PRICER 5.133575 2CPTRT1 1. 2RT1CAP 2DEMRT 1. 2BALEWD -.385555 2RT1CAP 2BALEWN -.096667 2BALEID -.276667 2RT1CAP 2BALEIN -.068889 2BALESD -.226667 2RT1CAP 2BALESN -.056667 2EPKWD -3.855558 2RT1CAP 2EPKSD -.527132 3RT1CAP PRICER 3.836116 3CPTRT1 1. 3RT1CAP 3DEMRT 1. 3BALEWD -.385555 3RT1CAP 3BALEWN -.096667 3BALEID -.276667 3RT1CAP 3BALEIN -.068889 3BALESD -.226667 3RT1CAP 3BALESN -.056667 3EPKWD -3.855558 3RT1CAP 3EPKSD -.527132 1RT3CAP PRICER 16.528961 1BALDSL -1.818181 1RT3CAP 1CPTRT3 1. 1DEMRT 1. 2RT3CAP PRICER 12.351457 2BALDSL -1.818181 2RT3CAP 2CPTRT3 1. 2DEMRT 1. 3RT3CAP PRICER 9.229751 3BALDSL -1.818181 3RT3CAP 3CPTRT3 1. 3DEMRT 1. 1RT7CAP PRICER 19.469208 1BALGAS -1.538461 1RT7CAP 1CPTRT7 1. 1DEMRT 1. 2RT7CAP PRICER 14.548593 2BALGAS -1.538461 2RT7CAP 2CPTRT7 1. 2DEMRT 1. 3RT7CAP PRICER 10.871583 3BALGAS -1.538461 3RT7CAP 3CPTRT7 1. 3DEMRT 1. 1RT8CAP PRICER 31.92157 1BALHCO -2. 1RT8CAP 1CPTRT8 1. 1DEMRT 1. 2RT8CAP PRICER 23.853745 2BALHCO -2. 2RT8CAP 2CPTRT8 1. 2DEMRT 1. 3RT8CAP PRICER 17.824951 3BALHCO -2. 3RT8CAP 3CPTRT8 1. 3DEMRT 1. 2RTBCAP PRICER 11.901143 2BALGAS -.833333 2RTBCAP 2CPTRTB 1. 2DEMRT 1. 3RTBCAP PRICER 8.893249 3BALGAS -.833333 3RTBCAP 3CPTRTB 1. 3DEMRT 1. 2RTCCAP PRICER 9.263595 2CPTRTC 1. 2RTCCAP 2DEMRT 1. 2BALDHW -.563636 2RTCCAP 2BALDHI -.403896 2BALDHS -.331169 2RTCCAP 2HPKW -2.818182 3RTCCAP PRICER 6.922315 3CPTRTC 1. 3RTCCAP 3DEMRT 1. 3BALDHW -.563636 3RTCCAP 3BALDHI -.403896 3BALDHS -.331169 3RTCCAP 3HPKW -2.818182 1RTYCAP 1BALHCO -.634921 1BALGAS -.952381 1RTYCAP 1DEMRT 1. 2RTYCAP 2BALHCO -.3125 2BALGAS -1.25 2RTYCAP 2DEMRT 1. 3RTYCAP 3BALGAS -1.538461 3DEMRT 1. 1R50CAP PRICER 1.54959 1CPTR50 1. 1R50CAP 1DEMR5 1. 1BALEWN -.248889 1R50CAP 1BALEIN -.23 1BALESN -.632222 2R50CAP PRICER 1.157948 2CPTR50 1. 2R50CAP 2DEMR5 1. 2BALEWN -.248889 2R50CAP 2BALEIN -.23 2BALESN -.632222 3R50CAP PRICER .865289 3CPTR50 1. 3R50CAP 3DEMR5 1. 3BALEWN -.248889 3R50CAP 3BALEIN -.23 3BALESN -.632222 1R51CAP 1CPTR51 1. 1DEMR5 1. 1R51CAP 1BALEWD -.176667 1BALEWN -.072222 1R51CAP 1BALEID -.212222 1BALEIN -.017778 1R51CAP 1BALESD -.604444 1BALESN -.027778 1R51CAP 1EPKWD -1.766667 1EPKSD -1.405684 1R51CAP 1RAT004 -1. 2R51CAP 2CPTR51 1. 2DEMR5 1. 2R51CAP 2BALEWD -.176667 2BALEWN -.072222 2R51CAP 2BALEID -.212222 2BALEIN -.017778 2R51CAP 2BALESD -.604444 2BALESN -.027778 2R51CAP 2EPKWD -1.766667 2EPKSD -1.405684 2R51CAP 2RAT004 -1. 3R51CAP 3CPTR51 1. 3DEMR5 1. 3R51CAP 3BALEWD -.176667 3BALEWN -.072222 3R51CAP 3BALEID -.212222 3BALEIN -.017778 3R51CAP 3BALESD -.604444 3BALESN -.027778 3R51CAP 3EPKWD -1.766667 3EPKSD -1.405684 3R51CAP 3RAT004 -1. 1R53CAP PRICER 16.528961 1BALDSL -1.818181 1R53CAP 1CPTR53 1. 1DEMR5 1. 1R53CAP 1RAT005 -1. 2R53CAP PRICER 12.351457 2BALDSL -1.818181 2R53CAP 2CPTR53 1. 2DEMR5 1. 2R53CAP 2RAT005 -1. 3R53CAP PRICER 9.229751 3BALDSL -1.818181 3R53CAP 3CPTR53 1. 3DEMR5 1. 3R53CAP 3RAT005 -1. 1R57CAP PRICER 19.469208 1BALGAS -1.538461 1R57CAP 1CPTR57 1. 1DEMR5 1. 1R57CAP 1RAT006 -1. 2R57CAP PRICER 14.548593 2BALGAS -1.538461 2R57CAP 2CPTR57 1. 2DEMR5 1. 2R57CAP 2RAT006 -1. 3R57CAP PRICER 10.871583 3BALGAS -1.538461 3R57CAP 3CPTR57 1. 3DEMR5 1. 3R57CAP 3RAT006 -1. 1R58CAP PRICER 31.92157 1BALHCO -2. 1R58CAP 1CPTR58 1. 1DEMR5 1. 1R58CAP 1RAT007 -1. 2R58CAP PRICER 23.853745 2BALHCO -2. 2R58CAP 2CPTR58 1. 2DEMR5 1. 2R58CAP 2RAT007 -1. 3R58CAP PRICER 17.824951 3BALHCO -2. 3R58CAP 3CPTR58 1. 3DEMR5 1. 3R58CAP 3RAT007 -1. 2R5ACAP PRICER 6.947694 2CPTR5A 1. 2R5ACAP 2DEMR5 1. 2BALEWD -.045429 2R5ACAP 2BALEWN -.018571 2BALEID -.054571 2R5ACAP 2BALEIN -.004571 2BALESD -.155429 2R5ACAP 2BALESN -.007143 2EPKWD -.454286 2R5ACAP 2EPKSD -.361462 2RAT008 -1. 3R5ACAP PRICER 5.191734 3CPTR5A 1. 3R5ACAP 3DEMR5 1. 3BALEWD -.045429 3R5ACAP 3BALEWN -.018571 3BALEID -.054571 3R5ACAP 3BALEIN -.004571 3BALESD -.155429 3R5ACAP 3BALESN -.007143 3EPKWD -.454286 3R5ACAP 3EPKSD -.361462 3RAT008 -1. 3R5CCAP PRICER 6.922315 3CPTR5C 1. 3R5CCAP 3DEMR5 1. 3BALDHW -.329412 3R5CCAP 3BALDHI -.304412 3BALDHS -.836765 3R5CCAP 3HPKW -1.647059 3RAT012 -1. 1R5HCAP PRICER 85.948608 1BALGAS -1.960784 1R5HCAP 1CPTR5H 1. 1DEMR5 1. 1R5HCAP 1RAT001 1. 1RAT003 1. 1R5HCAP 1RAT013 -1. 2R5HCAP PRICER 64.001907 2BALGAS -1.923077 2R5HCAP 2CPTR5H 1. 2DEMR5 1. 2R5HCAP 2RAT001 1. 2RAT003 1. 2R5HCAP 2RAT013 -1. 3R5HCAP PRICER 47.664902 3BALGAS -1.886792 3R5HCAP 3CPTR5H 1. 3DEMR5 1. 3R5HCAP 3RAT001 1. 3RAT003 1. 3R5HCAP 3RAT013 -1. 1R5LCAP 1CPTR5L 1. 1DEMR5 1. 1R5LCAP 1BALEWD -.223944 1BALEWN -.091549 1R5LCAP 1BALEID -.269014 1BALEIN -.022535 1R5LCAP 1BALESD -.766197 1BALESN -.035211 1R5LCAP 1EPKWD -2.239438 1EPKSD -1.781854 1R5LCAP 1RAT001 1. 1RAT013 -1. 2R5LCAP 2CPTR5L 1. 2DEMR5 1. 2R5LCAP 2BALEWD -.220833 2BALEWN -.090278 2R5LCAP 2BALEID -.265278 2BALEIN -.022222 2R5LCAP 2BALESD -.755556 2BALESN -.034722 2R5LCAP 2EPKWD -2.208334 2EPKSD -1.757106 2R5LCAP 2RAT001 1. 2RAT013 -1. 3R5LCAP 3CPTR5L 1. 3DEMR5 1. 3R5LCAP 3BALEWD -.217808 3BALEWN -.089041 3R5LCAP 3BALEID -.261644 3BALEIN -.021918 3R5LCAP 3BALESD -.745205 3BALESN -.034247 3R5LCAP 3EPKWD -2.178082 3EPKSD -1.733036 3R5LCAP 3RAT001 1. 3RAT013 -1. 1R5MCAP 1CPTR5M 1. 1DEMR5 1. 1R5MCAP 1BALEWD -.223944 1BALEWN -.091549 1R5MCAP 1BALEID -.269014 1BALEIN -.022535 1R5MCAP 1BALESD -.766197 1BALESN -.035211 1R5MCAP 1EPKWD -2.239438 1EPKSD -1.781854 1R5MCAP 1RAT003 1. 1RAT013 -1. 2R5MCAP 2CPTR5M 1. 2DEMR5 1. 2R5MCAP 2BALEWD -.220833 2BALEWN -.090278 2R5MCAP 2BALEID -.265278 2BALEIN -.022222 2R5MCAP 2BALESD -.755556 2BALESN -.034722 2R5MCAP 2EPKWD -2.208334 2EPKSD -1.757106 2R5MCAP 2RAT003 1. 2RAT013 -1. 3R5MCAP 3CPTR5M 1. 3DEMR5 1. 3R5MCAP 3BALEWD -.217808 3BALEWN -.089041 3R5MCAP 3BALEID -.261644 3BALEIN -.021918 3R5MCAP 3BALESD -.745205 3BALESN -.034247 3R5MCAP 3EPKWD -2.178082 3EPKSD -1.733036 3R5MCAP 3RAT003 1. 3RAT013 -1. 1RDYCAP 1BALHCO -.034892 1BALCOK -.009677 1RDYCAP 1BALDSL -.332697 1BALGAS -.371269 1RDYCAP 1DEMRD 1. 1BALEWD -.148042 1RDYCAP 1BALEWN -.082314 1BALEID -.119785 1RDYCAP 1BALEIN -.033786 1BALESD -.181214 1RDYCAP 1BALESN -.049143 1EPKWD -1.480425 1RDYCAP 1EPKSD -.421427 2RDYCAP 2BALHCO -.030143 2BALCOK -.007975 2RDYCAP 2BALDSL -.282779 2BALGAS -.410787 2RDYCAP 2DEMRD 1. 2BALEWD -.149428 2RDYCAP 2BALEWN -.083084 2BALEID -.120906 2RDYCAP 2BALEIN -.034102 2BALESD -.182909 2RDYCAP 2BALESN -.049603 2EPKWD -1.494279 2RDYCAP 2EPKSD -.425371 3RDYCAP 3BALHCO -.02846 3BALCOK -.007786 3RDYCAP 3BALDSL -.26084 3BALGAS -.411062 3RDYCAP 3DEMRD 1. 3BALEWD -.152869 3RDYCAP 3BALEWN -.084998 3BALEID -.123691 3RDYCAP 3BALEIN -.034887 3BALESD -.187122 3RDYCAP 3BALESN -.050745 3EPKWD -1.528695 3RDYCAP 3EPKSD -.435168 1T80CAP 2GRCT80 -1.227805 1DEMT8 1. 1T80CAP 1BALEWN -.1 1BALEIN -.1 1T80CAP 1BALESN -.3 2T80CAP 3GRCT80 -1.227805 2GRCT80 1. 2T80CAP 2DEMT8 1. 2BALEWN -.1 2T80CAP 2BALEIN -.1 2BALESN -.3 3T80CAP 3GRCT80 1. 3DEMT8 1. 3T80CAP 3BALEWN -.1 3BALEIN -.1 3T80CAP 3BALESN -.3 1T83CAP PRICER 5.475219 1BALDSL -1. 1T83CAP 1DEMT8 1. 2T83CAP PRICER 4.091419 2BALDSL -1. 2T83CAP 2DEMT8 1. 3T83CAP PRICER 3.057354 3BALDSL -1. 3T83CAP 3DEMT8 1. 1T8FCAP 1BALGSL -1. 1DEMT8 1. 2T8FCAP 2BALGSL -1. 2DEMT8 1. 3T8FCAP 3BALGSL -1. 3DEMT8 1. 1TXYCAP 1BALDSL -.9792 1DEMTX 1. 1TXYCAP 1BALEWD -.00208 1BALEWN -.00208 1TXYCAP 1BALEID -.002704 1BALEIN -.001456 1TXYCAP 1BALESD -.008944 1BALESN -.003536 1TXYCAP 1EPKWD -.0208 1EPKSD -.0208 2TXYCAP 2BALDSL -.9808 2DEMTX 1. 2TXYCAP 2BALEWD -.00192 2BALEWN -.00192 2TXYCAP 2BALEID -.002496 2BALEIN -.001344 2TXYCAP 2BALESD -.008256 2BALESN -.003264 2TXYCAP 2EPKWD -.0192 2EPKSD -.0192 3TXYCAP 3BALDSL -.9981 3DEMTX 1. 3TXYCAP 3BALEWD -.00189 3BALEWN -.00189 3TXYCAP 3BALEID -.002457 3BALEIN -.001323 3TXYCAP 3BALESD -.008127 3BALESN -.003213 3TXYCAP 3EPKWD -.0189 3EPKSD -.0189 3S01CAP PRICER 4.961 3CPTS01 1. 3S01CAP 3UTLS01 -.85 3S04CAP PRICER 5.710909 3CPTS04 1. 3S04CAP 3UTLS04 -.85 1S06CAP 1CPTS06 1. 1UTLS06 -.9 2S06CAP 2CPTS06 1. 2UTLS06 -.9 3S06CAP 3CPTS06 1. 3UTLS06 -.9 1S08CAP 1CPTS08 1. 1UTLS08 -.9 2S08CAP 2CPTS08 1. 2UTLS08 -.9 3S08CAP 3CPTS08 1. 3UTLS08 -.9 1S09CAP 1CPTS09 1. 1UTLS09 -1. 2S09CAP 2CPTS09 1. 2UTLS09 -1. 3S09CAP 3CPTS09 1. 3UTLS09 -1. 1S21CAP 1CPTS21 1. 1UTLS21 -1. 2S21CAP 2CPTS21 1. 2UTLS21 -1. 3S21CAP 3CPTS21 1. 3UTLS21 -1. 1S23CAP 1CPTS23 1. 1UTLS23 -1. 2S23CAP 2CPTS23 1. 2UTLS23 -1. 3S23CAP 3CPTS23 1. 3UTLS23 -1. 1S28CAP 1CPTS28 1. 1UTLS28 -1. 2S28CAP 2CPTS28 1. 2UTLS28 -1. 3S28CAP 3CPTS28 1. 3UTLS28 -1. 3S29CAP 3CPTS29 1. 3UTLS29 -1. 1S44CAP 1BALURN -1.02 1BALMAG .744 1S44CAP 2BALMAG .256 2S44CAP 2BALURN -1.02 2BALMAG .744 2S44CAP 3BALMAG .256 3S44CAP 3BALURN -1.02 3BALMAG .744 1S45CAP PRICER 2.89257 1BALURN -4.4348 1S45CAP 1BALUDP 3.4348 1BALAGR .634 1S45CAP 2BALAGR .366 2S45CAP PRICER 2.161505 2BALURN -4.4348 2S45CAP 2BALUDP 3.4348 2BALAGR .634 2S45CAP 3BALAGR .366 3S45CAP PRICER 1.615207 3BALURN -4.4348 3S45CAP 3BALUDP 3.4348 3BALAGR .634 1S46CAP PRICER .619836 1BALURN -.9841 1S46CAP 1BALPLU -.01591 1BALAGR .734 1S46CAP 2BALAGR .266 2S46CAP PRICER .46318 2BALURN -.9841 2S46CAP 2BALPLU -.01591 2BALAGR .734 2S46CAP 3BALAGR .266 3S46CAP PRICER .346116 3BALURN -.9841 3S46CAP 3BALPLU -.01591 3BALAGR .734 1S47CAP PRICER .619836 1BALUDP -.9796 1S47CAP 1BALPLU -.02045 1BALAGR .734 1S47CAP 2BALAGR .266 2S47CAP PRICER .46318 2BALUDP -.9796 2S47CAP 2BALPLU -.02045 2BALAGR .734 2S47CAP 3BALAGR .266 3S47CAP PRICER .346116 3BALUDP -.9796 3S47CAP 3BALPLU -.02045 3BALAGR .734 1S4ACAP PRICER .619836 1BALUDP -.9476 1S4ACAP 1BALPLU -.05237 1BALLMF .95 1S4ACAP 2BALLMF .05 2S4ACAP PRICER .46318 2BALUDP -.9476 2S4ACAP 2BALPLU -.05237 2BALLMF .95 2S4ACAP 3BALLMF .05 3S4ACAP PRICER .346116 3BALUDP -.9476 3S4ACAP 3BALPLU -.05237 3BALLMF .95 1S54CAP PRICER 4.752079 1BALUDP .9282 1S54CAP 1BALPLU .06318 1BALLMS -1. 2S54CAP PRICER 3.551044 2BALUDP .9282 2S54CAP 2BALPLU .06318 2BALLMS -.9 2S54CAP 1BALLMS -.1 3S54CAP PRICER 2.653554 3BALUDP .9282 3S54CAP 3BALPLU .06318 3BALLMS -.9 3S54CAP 2BALLMS -.1 1S55CAP PRICER 4.752079 1BALURN 1.047 1S55CAP 1BALPLU .004783 1BALAGS -1. 2S55CAP PRICER 3.551044 2BALURN 1.047 2S55CAP 2BALPLU .004783 2BALAGS -.8 2S55CAP 1BALAGS -.2 3S55CAP PRICER 2.653554 3BALURN 1.047 3S55CAP 3BALPLU .004783 3BALAGS -.8 3S55CAP 2BALAGS -.2 1S6HCAP 1BALGAS .95 1BALHYD -1. 2S6HCAP 2BALGAS .95 2BALHYD -1. 3S6HCAP 3BALGAS .95 3BALHYD -1. 1S71CAP 1BALGSL 1. 1BALALC -1. 2S71CAP 2BALGSL 1. 2BALALC -1. 3S71CAP 3BALGSL 1. 3BALALC -1. 1S72CAP 1BALDSH 1. 1BALDSR -1. 2S72CAP 2BALDSH 1. 2BALDSR -1. 3S72CAP 3BALDSH 1. 3BALDSR -1. 1S79CAP 1BALGAK -1. 1BALGAS .95 1S79CAP 1RAT010 2.66 2S79CAP 2BALGAK -1. 2BALGAS .95 2S79CAP 2RAT010 2.66 3S79CAP 3BALGAK -1. 3BALGAS .95 3S79CAP 3RAT010 2.66 1S7ACAP 1BALOIK -1. 1BALOIL 1. 1S7ACAP 1RAT011 2.66 2S7ACAP 2BALOIK -1. 2BALOIL 1. 2S7ACAP 2RAT011 2.66 3S7ACAP 3BALOIK -1. 3BALOIL 1. 3S7ACAP 3RAT011 2.66 3S80CAP PRICER 1.211405 3CPTS80 1. 3S80CAP 3UTLS80 -.9 3S01ACT PRICER 1.817107 3BALHCO -1. 3S01ACT 3BALGAS .665 3UTLS01 1. 3S04ACT PRICER 1.586364 3BALHCO -1. 3S04ACT 3BALALC .3 3UTLS04 1. 1S06ACT PRICER 1.497937 1BALHCO -1. 1S06ACT 1BALCOK .6 1BALGAS .1425 1S06ACT 1UTLS06 1. 2S06ACT PRICER 1.11935 2BALHCO -1. 2S06ACT 2BALCOK .6 2BALGAS .1425 2S06ACT 2UTLS06 1. 3S06ACT PRICER .836446 3BALHCO -1. 3S06ACT 3BALCOK .6 3BALGAS .1425 3S06ACT 3UTLS06 1. 1S08ACT PRICER 1.497937 1BALHCO -1. 1S08ACT 1BALCOK .64 1BALGAS .152 1S08ACT 1UTLS08 1. 2S08ACT PRICER 1.11935 2BALHCO -1. 2S08ACT 2BALCOK .64 2BALGAS .152 2S08ACT 2UTLS08 1. 3S08ACT PRICER .836446 3BALHCO -1. 3S08ACT 3BALCOK .64 3BALGAS .152 3S08ACT 3UTLS08 1. 1S09ACT PRICER 1.497937 1BALHCO -1. 1S09ACT 1BALCOK .64 1BALGAS .152 1S09ACT 1UTLS09 1. 2S09ACT PRICER 1.11935 2BALHCO -1. 2S09ACT 2BALCOK .64 2BALGAS .152 2S09ACT 2UTLS09 1. 3S09ACT PRICER .836446 3BALHCO -1. 3S09ACT 3BALCOK .64 3BALGAS .152 3S09ACT 3UTLS09 1. 1S21ACT 1BALOIL -1. 1BALGSL .16 1S21ACT 1BALDSL .32 1BALDSR .46 1S21ACT 1UTLS21 1. 2S21ACT 2BALOIL -1. 2BALGSL .16 2S21ACT 2BALDSL .32 2BALDSR .46 2S21ACT 2UTLS21 1. 3S21ACT 3BALOIL -1. 3BALGSL .16 3S21ACT 3BALDSL .32 3BALDSR .46 3S21ACT 3UTLS21 1. 1S23ACT 1BALDSL .5 1BALDSH .5 1S23ACT 1BALDSR -1. 1UTLS23 1. 2S23ACT 2BALDSL .5 2BALDSH .5 2S23ACT 2BALDSR -1. 2UTLS23 1. 3S23ACT 3BALDSL .5 3BALDSH .5 3S23ACT 3BALDSR -1. 3UTLS23 1. 1S28ACT 1BALGSL .67 1BALDSL -1. 1S28ACT 1UTLS28 1. 2S28ACT 2BALGSL .67 2BALDSL -1. 2S28ACT 2UTLS28 1. 3S28ACT 3BALGSL .67 3BALDSL -1. 3S28ACT 3UTLS28 1. 3S29ACT 3BALGSL .87 3BALDSL -1. 3S29ACT 3UTLS29 1. 3S80ACT PRICER .365152 3BALHYD .722 3S80ACT 3UTLS80 1. 3BALEWN -.2 3S80ACT 3BALEIN -.2 3BALESN -.6 1EC1WM 1UTLEC1 1. 1EWDEC1 .5 1EC1WM 1EWNEC1 .5 1EC1IM 1UTLEC1 1. 1EIDEC1 .65 1EC1IM 1EINEC1 .35 1EC1SM 1UTLEC1 1. 1ESDEC1 .716667 1EC1SM 1ESNEC1 .283333 2EC1WM 2UTLEC1 1. 2EWDEC1 .5 2EC1WM 2EWNEC1 .5 2EC1IM 2UTLEC1 1. 2EIDEC1 .65 2EC1IM 2EINEC1 .35 2EC1SM 2UTLEC1 1. 2ESDEC1 .716667 2EC1SM 2ESNEC1 .283333 3EC1WM 3UTLEC1 1. 3EWDEC1 .5 3EC1WM 3EWNEC1 .5 3EC1IM 3UTLEC1 1. 3EIDEC1 .65 3EC1IM 3EINEC1 .35 3EC1SM 3UTLEC1 1. 3ESDEC1 .716667 3EC1SM 3ESNEC1 .283333 1EC2WM 1UTLEC2 1. 1EWDEC2 .5 1EC2WM 1EWNEC2 .5 1EC2IM 1UTLEC2 1. 1EIDEC2 .65 1EC2IM 1EINEC2 .35 1EC2SM 1UTLEC2 1. 1ESDEC2 .716667 1EC2SM 1ESNEC2 .283333 2EC2WM 2UTLEC2 1. 2EWDEC2 .5 2EC2WM 2EWNEC2 .5 2EC2IM 2UTLEC2 1. 2EIDEC2 .65 2EC2IM 2EINEC2 .35 2EC2SM 2UTLEC2 1. 2ESDEC2 .716667 2EC2SM 2ESNEC2 .283333 3EC2WM 3UTLEC2 1. 3EWDEC2 .5 3EC2WM 3EWNEC2 .5 3EC2IM 3UTLEC2 1. 3EIDEC2 .65 3EC2IM 3EINEC2 .35 3EC2SM 3UTLEC2 1. 3ESDEC2 .716667 3EC2SM 3ESNEC2 .283333 1EP1WM 1UTLEP1 1. 1EWDEP1 .5 1EP1WM 1EWNEP1 .5 1EP1IM 1UTLEP1 1. 1EIDEP1 .65 1EP1IM 1EINEP1 .35 1EP1SM 1UTLEP1 1. 1ESDEP1 .716667 1EP1SM 1ESNEP1 .283333 2EP1WM 2UTLEP1 1. 2EWDEP1 .5 2EP1WM 2EWNEP1 .5 2EP1IM 2UTLEP1 1. 2EIDEP1 .65 2EP1IM 2EINEP1 .35 2EP1SM 2UTLEP1 1. 2ESDEP1 .716667 2EP1SM 2ESNEP1 .283333 3EP1WM 3UTLEP1 1. 3EWDEP1 .5 3EP1WM 3EWNEP1 .5 3EP1IM 3UTLEP1 1. 3EIDEP1 .65 3EP1IM 3EINEP1 .35 3EP1SM 3UTLEP1 1. 3ESDEP1 .716667 3EP1SM 3ESNEP1 .283333 1E22WM 1UTLE22 1. 1EWDE22 1. 1E22IM 1UTLE22 1. 1EIDE22 1. 1E22SM 1UTLE22 1. 1ESDE22 1. 2E22WM 2UTLE22 1. 2EWDE22 1. 2E22IM 2UTLE22 1. 2EIDE22 1. 2E22SM 2UTLE22 1. 2ESDE22 1. 3E22WM 3UTLE22 1. 3EWDE22 1. 3E22IM 3UTLE22 1. 3EIDE22 1. 3E22SM 3UTLE22 1. 3ESDE22 1. 1E23WM 1UTLE23 1. 1EWDE23 1. 1E23IM 1UTLE23 1. 1EIDE23 1. 1E23SM 1UTLE23 1. 1ESDE23 1. 2E23WM 2UTLE23 1. 2EWDE23 1. 2E23IM 2UTLE23 1. 2EIDE23 1. 2E23SM 2UTLE23 1. 2ESDE23 1. 3E23WM 3UTLE23 1. 3EWDE23 1. 3E23IM 3UTLE23 1. 3EIDE23 1. 3E23SM 3UTLE23 1. 3ESDE23 1. 1EC1CAP PRICER 289.256836 1UTLEC1 -4.4184 1EC1CAP 1EPKWD 24.213669 1EPKSD 24.213669 1EC1CAP 1EWDEC1 -2.714158 1EWNEC1 -2.714158 1EC1CAP 1EIDEC1 -3.528407 1EINEC1 -1.899911 1EC1CAP 1ESDEC1 -11.670885 1ESNEC1 -4.61407 2EC1CAP PRICER 216.150574 2UTLEC1 -4.4184 2EC1CAP 2EPKWD 24.213669 2EPKSD 24.213669 2EC1CAP 2EWDEC1 -2.714158 2EWNEC1 -2.714158 2EC1CAP 2EIDEC1 -3.528407 2EINEC1 -1.899911 2EC1CAP 2ESDEC1 -11.670885 2ESNEC1 -4.61407 3EC1CAP PRICER 161.520706 3UTLEC1 -4.4184 3EC1CAP 3EPKWD 24.213669 3EPKSD 24.213669 3EC1CAP 3EWDEC1 -2.714158 3EWNEC1 -2.714158 3EC1CAP 3EIDEC1 -3.528407 3EINEC1 -1.899911 3EC1CAP 3ESDEC1 -11.670885 3ESNEC1 -4.61407 1EC2CAP PRICER 289.256836 1UTLEC2 -5.049611 1EC2CAP 1EPKWD 24.213669 1EPKSD 24.213669 1EC2CAP 1EWDEC2 -2.777279 1EWNEC2 -2.777279 1EC2CAP 1EIDEC2 -3.610465 1EINEC2 -1.944096 1EC2CAP 1ESDEC2 -11.942307 1ESNEC2 -4.721376 2EC2CAP PRICER 216.150574 2UTLEC2 -5.049611 2EC2CAP 2EPKWD 24.213669 2EPKSD 24.213669 2EC2CAP 2EWDEC2 -2.777279 2EWNEC2 -2.777279 2EC2CAP 2EIDEC2 -3.610465 2EINEC2 -1.944096 2EC2CAP 2ESDEC2 -11.942307 2ESNEC2 -4.721376 3EC2CAP PRICER 161.520706 3UTLEC2 -5.049611 3EC2CAP 3EPKWD 24.213669 3EPKSD 24.213669 3EC2CAP 3EWDEC2 -2.777279 3EWNEC2 -2.777279 3EC2CAP 3EIDEC2 -3.610465 3EINEC2 -1.944096 3EC2CAP 3ESDEC2 -11.942307 3ESNEC2 -4.721376 1EC3CAP PRICER 114.669724 1CPTEC3 1. 1EC3CAP 1EPKWD 24.213669 1EPKSD 24.213669 1EC3CAP 1EWDEC3 -2.114518 1EWNEC3 -2.114518 1EC3CAP 1EIDEC3 -2.748875 1EINEC3 -1.480163 1EC3CAP 1ESDEC3 -9.092433 1ESNEC3 -3.594682 2EC3CAP PRICER 85.688248 2CPTEC3 1. 2EC3CAP 2EPKWD 24.213669 2EPKSD 24.213669 2EC3CAP 2EWDEC3 -2.114518 2EWNEC3 -2.114518 2EC3CAP 2EIDEC3 -2.748875 2EINEC3 -1.480163 2EC3CAP 2ESDEC3 -9.092433 2ESNEC3 -3.594682 3EC3CAP PRICER 64.031403 3CPTEC3 1. 3EC3CAP 3EPKWD 24.213669 3EPKSD 24.213669 3EC3CAP 3EWDEC3 -2.114518 3EWNEC3 -2.114518 3EC3CAP 3EIDEC3 -2.748875 3EINEC3 -1.480163 3EC3CAP 3ESDEC3 -9.092433 3ESNEC3 -3.594682 1EP1CAP PRICER 114.669724 1CPTEP1 1. 1EP1CAP 1UTLEP1 -4.4184 1EPKWD 24.213669 1EP1CAP 1EPKSD 24.213669 1EWDEP1 -2.714158 1EP1CAP 1EWNEP1 -2.714158 1EIDEP1 -3.528407 1EP1CAP 1EINEP1 -1.899911 1ESDEP1 -11.670885 1EP1CAP 1ESNEP1 -4.61407 2EP1CAP PRICER 85.688248 2CPTEP1 1. 2EP1CAP 2UTLEP1 -4.4184 2EPKWD 24.213669 2EP1CAP 2EPKSD 24.213669 2EWDEP1 -2.714158 2EP1CAP 2EWNEP1 -2.714158 2EIDEP1 -3.528407 2EP1CAP 2EINEP1 -1.899911 2ESDEP1 -11.670885 2EP1CAP 2ESNEP1 -4.61407 3EP1CAP PRICER 64.031403 3CPTEP1 1. 3EP1CAP 3UTLEP1 -4.4184 3EPKWD 24.213669 3EP1CAP 3EPKSD 24.213669 3EWDEP1 -2.714158 3EP1CAP 3EWNEP1 -2.714158 3EIDEP1 -3.528407 3EP1CAP 3EINEP1 -1.899911 3ESDEP1 -11.670885 3EP1CAP 3ESNEP1 -4.61407 1E14CAP PRICER 72.83078 1CPTE14 1. 1E14CAP 1EPKWD 24.213669 1EPKSD 24.213669 1E14CAP 1EWDE14 -2.998198 1EWNE14 -2.998198 1E14CAP 1EIDE14 -3.897659 1EINE14 -2.098739 1E14CAP 1ESDE14 -12.892257 1ESNE14 -5.096938 2E14CAP PRICER 54.423615 2CPTE14 1. 2E14CAP 2EPKWD 24.213669 2EPKSD 24.213669 2E14CAP 2EWDE14 -2.998198 2EWNE14 -2.998198 2E14CAP 2EIDE14 -3.897659 2EINE14 -2.098739 2E14CAP 2ESDE14 -12.892257 2ESNE14 -5.096938 3E14CAP PRICER 40.668594 3CPTE14 1. 3E14CAP 3EPKWD 24.213669 3EPKSD 24.213669 3E14CAP 3EWDE14 -2.998198 3EWNE14 -2.998198 3E14CAP 3EIDE14 -3.897659 3EINE14 -2.098739 3E14CAP 3ESDE14 -12.892257 3ESNE14 -5.096938 1E22CAP PRICER 81.611801 1CPTE22 1. 1E22CAP 1UTLE22 -6.311683 1EPKWD 24.213669 1E22CAP 1EPKSD 24.213669 1EWDE22 -5.365133 1E22CAP 1EIDE22 -5.365135 1ESDE22 -16.095398 2E22CAP PRICER 60.985336 2CPTE22 1. 2E22CAP 2UTLE22 -6.311683 2EPKWD 24.213669 2E22CAP 2EPKSD 24.213669 2EWDE22 -5.365133 2E22CAP 2EIDE22 -5.365135 2ESDE22 -16.095398 3E22CAP PRICER 45.5719 3CPTE22 1. 3E22CAP 3UTLE22 -6.311683 3EPKWD 24.213669 3E22CAP 3EPKSD 24.213669 3EWDE22 -5.365133 3E22CAP 3EIDE22 -5.365135 3ESDE22 -16.095398 1E23CAP PRICER 74.380371 1CPTE23 1. 1E23CAP 1UTLE23 -6.311683 1EPKWD 24.213669 1E23CAP 1EPKSD 24.213669 1EWDE23 -5.365133 1E23CAP 1EIDE23 -5.365135 1ESDE23 -16.095398 2E23CAP PRICER 55.581573 2CPTE23 1. 2E23CAP 2UTLE23 -6.311683 2EPKWD 24.213669 2E23CAP 2EPKSD 24.213669 2EWDE23 -5.365133 2E23CAP 2EIDE23 -5.365135 2ESDE23 -16.095398 3E23CAP PRICER 41.53389 3CPTE23 1. 3E23CAP 3UTLE23 -6.311683 3EPKWD 24.213669 3E23CAP 3EPKSD 24.213669 3EWDE23 -5.365133 3E23CAP 3EIDE23 -5.365135 3ESDE23 -16.095398 1E31CAP 1CPTE31 1. 1EPKWD 24.213669 1E31CAP 1EPKSD 24.213669 1EWDE31 -1.199279 1E31CAP 1EWNE31 -1.199279 1EIDE31 -.738504 1E31CAP 1EINE31 -.397656 1ESDE31 -2.442742 1E31CAP 1ESNE31 -.965735 2E31CAP 2CPTE31 1. 2EPKWD 24.213669 2E31CAP 2EPKSD 24.213669 2EWDE31 -1.199279 2E31CAP 2EWNE31 -1.199279 2EIDE31 -.738504 2E31CAP 2EINE31 -.397656 2ESDE31 -2.442742 2E31CAP 2ESNE31 -.965735 3E31CAP 3CPTE31 1. 3EPKWD 24.213669 3E31CAP 3EPKSD 24.213669 3EWDE31 -1.199279 3E31CAP 3EWNE31 -1.199279 3EIDE31 -.738504 3E31CAP 3EINE31 -.397656 3ESDE31 -2.442742 3E31CAP 3ESNE31 -.965735 2E35CAP PRICER 21.229065 2CPTE35 1. 2E35CAP 3GRCE35 -32. 2EWDE35 -.883679 2E35CAP 2EWNE35 -.883679 2EIDE35 -1.148784 2E35CAP 2EINE35 -.618576 2ESDE35 -3.121283 2E35CAP 2ESNE35 -1.234 3E35CAP PRICER 15.863641 3CPTE35 1. 3E35CAP 3GRCE35 1. 3EWDE35 -.883679 3E35CAP 3EWNE35 -.883679 3EIDE35 -1.148784 3E35CAP 3EINE35 -.618576 3ESDE35 -3.121283 3E35CAP 3ESNE35 -1.234 3E94CAP PRICER 61.723953 3CPTE94 1. 3E94CAP 3EPKWD 26.521011 3EPKSD 26.521011 3E94CAP 3EWDE94 -3.156 3EWNE94 -3.156 3E94CAP 3EIDE94 -4.1028 3EINE94 -2.2092 3E94CAP 3ESDE94 -13.570797 3ESNE94 -5.365198 3E60CAP PRICER 74.414856 3CPTE60 1. 3E60CAP 3EPKWD 26.521011 3EPKSD 26.521011 3E60CAP 3EWDE60 -2.114518 3EWNE60 -2.114518 3E60CAP 3EIDE60 -2.748875 3EINE60 -1.480163 3E60CAP 3ESDE60 -9.092433 3ESNE60 -3.594682 3E60CAP 3HPKW 31.56 1E51CAP PRICER 71.281189 1CPTE51 1. 1E51CAP 1EPKWD 24.213669 1EPKSD 24.213669 1E51CAP 1EWDE51 -2.840398 1EIDE51 -3.692519 1E51CAP 1ESDE51 -12.213717 2E51CAP PRICER 53.265671 2CPTE51 1. 2E51CAP 2EPKWD 24.213669 2EPKSD 24.213669 2E51CAP 2EWDE51 -2.840398 2EIDE51 -3.692519 2E51CAP 2ESDE51 -12.213717 3E51CAP PRICER 39.803314 3CPTE51 1. 3E51CAP 3EPKWD 24.213669 3EPKSD 24.213669 3E51CAP 3EWDE51 -2.840398 3EIDE51 -3.692519 3E51CAP 3ESDE51 -12.213717 1EC1WD PRICER 5.448 1BALHCO -3.637 1EC1WD 1BALDSL -.066667 1BALEWD .913 1EC1WD 1EWDEC1 1. 1EC1ID PRICER 5.448 1BALHCO -3.637 1EC1ID 1BALDSL -.066667 1BALEID .913 1EC1ID 1EIDEC1 1. 1EC1SD PRICER 5.448 1BALHCO -3.637 1EC1SD 1BALDSL -.066667 1BALESD .913 1EC1SD 1ESDEC1 1. 1EC1WN PRICER 5.448 1BALHCO -3.637 1EC1WN 1BALDSL -.066667 1BALEWN .913 1EC1WN 1EWNEC1 1. 1BASW -.77605 1EC1IN PRICER 5.448 1BALHCO -3.637 1EC1IN 1BALDSL -.066667 1BALEIN .913 1EC1IN 1EINEC1 1. 1BASI -.77605 1EC1SN PRICER 5.448 1BALHCO -3.637 1EC1SN 1BALDSL -.066667 1BALESN .913 1EC1SN 1ESNEC1 1. 1BASS -.77605 2EC1WD PRICER 4.071078 2BALHCO -3.637 2EC1WD 2BALDSL -.066667 2BALEWD .913 2EC1WD 2EWDEC1 1. 2EC1ID PRICER 4.071078 2BALHCO -3.637 2EC1ID 2BALDSL -.066667 2BALEID .913 2EC1ID 2EIDEC1 1. 2EC1SD PRICER 4.071078 2BALHCO -3.637 2EC1SD 2BALDSL -.066667 2BALESD .913 2EC1SD 2ESDEC1 1. 2EC1WN PRICER 4.071078 2BALHCO -3.637 2EC1WN 2BALDSL -.066667 2BALEWN .913 2EC1WN 2EWNEC1 1. 2BASW -.77605 2EC1IN PRICER 4.071078 2BALHCO -3.637 2EC1IN 2BALDSL -.066667 2BALEIN .913 2EC1IN 2EINEC1 1. 2BASI -.77605 2EC1SN PRICER 4.071078 2BALHCO -3.637 2EC1SN 2BALDSL -.066667 2BALESN .913 2EC1SN 2ESNEC1 1. 2BASS -.77605 3EC1WD PRICER 3.042154 3BALHCO -3.637 3EC1WD 3BALDSL -.066667 3BALEWD .913 3EC1WD 3EWDEC1 1. 3EC1ID PRICER 3.042154 3BALHCO -3.637 3EC1ID 3BALDSL -.066667 3BALEID .913 3EC1ID 3EIDEC1 1. 3EC1SD PRICER 3.042154 3BALHCO -3.637 3EC1SD 3BALDSL -.066667 3BALESD .913 3EC1SD 3ESDEC1 1. 3EC1WN PRICER 3.042154 3BALHCO -3.637 3EC1WN 3BALDSL -.066667 3BALEWN .913 3EC1WN 3EWNEC1 1. 3BASW -.77605 3EC1IN PRICER 3.042154 3BALHCO -3.637 3EC1IN 3BALDSL -.066667 3BALEIN .913 3EC1IN 3EINEC1 1. 3BASI -.77605 3EC1SN PRICER 3.042154 3BALHCO -3.637 3EC1SN 3BALDSL -.066667 3BALESN .913 3EC1SN 3ESNEC1 1. 3BASS -.77605 1EC2WD PRICER 4.457562 1BALHCO -2.9758 1EC2WD 1BALDSL -.054545 1BALEWD .913 1EC2WD 1EWDEC2 1. 1EC2ID PRICER 4.457562 1BALHCO -2.9758 1EC2ID 1BALDSL -.054545 1BALEID .913 1EC2ID 1EIDEC2 1. 1EC2SD PRICER 4.457562 1BALHCO -2.9758 1EC2SD 1BALDSL -.054545 1BALESD .913 1EC2SD 1ESDEC2 1. 1EC2WN PRICER 4.457562 1BALHCO -2.9758 1EC2WN 1BALDSL -.054545 1BALEWN .913 1EC2WN 1EWNEC2 1. 1BASW -.77605 1EC2IN PRICER 4.457562 1BALHCO -2.9758 1EC2IN 1BALDSL -.054545 1BALEIN .913 1EC2IN 1EINEC2 1. 1BASI -.77605 1EC2SN PRICER 4.457562 1BALHCO -2.9758 1EC2SN 1BALDSL -.054545 1BALESN .913 1EC2SN 1ESNEC2 1. 1BASS -.77605 2EC2WD PRICER 3.330964 2BALHCO -2.9758 2EC2WD 2BALDSL -.054545 2BALEWD .913 2EC2WD 2EWDEC2 1. 2EC2ID PRICER 3.330964 2BALHCO -2.9758 2EC2ID 2BALDSL -.054545 2BALEID .913 2EC2ID 2EIDEC2 1. 2EC2SD PRICER 3.330964 2BALHCO -2.9758 2EC2SD 2BALDSL -.054545 2BALESD .913 2EC2SD 2ESDEC2 1. 2EC2WN PRICER 3.330964 2BALHCO -2.9758 2EC2WN 2BALDSL -.054545 2BALEWN .913 2EC2WN 2EWNEC2 1. 2BASW -.77605 2EC2IN PRICER 3.330964 2BALHCO -2.9758 2EC2IN 2BALDSL -.054545 2BALEIN .913 2EC2IN 2EINEC2 1. 2BASI -.77605 2EC2SN PRICER 3.330964 2BALHCO -2.9758 2EC2SN 2BALDSL -.054545 2BALESN .913 2EC2SN 2ESNEC2 1. 2BASS -.77605 3EC2WD PRICER 2.489097 3BALHCO -2.9758 3EC2WD 3BALDSL -.054545 3BALEWD .913 3EC2WD 3EWDEC2 1. 3EC2ID PRICER 2.489097 3BALHCO -2.9758 3EC2ID 3BALDSL -.054545 3BALEID .913 3EC2ID 3EIDEC2 1. 3EC2SD PRICER 2.489097 3BALHCO -2.9758 3EC2SD 3BALDSL -.054545 3BALESD .913 3EC2SD 3ESDEC2 1. 3EC2WN PRICER 2.489097 3BALHCO -2.9758 3EC2WN 3BALDSL -.054545 3BALEWN .913 3EC2WN 3EWNEC2 1. 3BASW -.77605 3EC2IN PRICER 2.489097 3BALHCO -2.9758 3EC2IN 3BALDSL -.054545 3BALEIN .913 3EC2IN 3EINEC2 1. 3BASI -.77605 3EC2SN PRICER 2.489097 3BALHCO -2.9758 3EC2SN 3BALDSL -.054545 3BALESN .913 3EC2SN 3ESNEC2 1. 3BASS -.77605 1EC3WD PRICER 5.635665 1BALHCO -2.7278 1EC3WD 1BALDSL -.05 1BALEWD .913 1EC3WD 1EWDEC3 1. 1EC3ID PRICER 5.635665 1BALHCO -2.7278 1EC3ID 1BALDSL -.05 1BALEID .913 1EC3ID 1EIDEC3 1. 1EC3SD PRICER 5.635665 1BALHCO -2.7278 1EC3SD 1BALDSL -.05 1BALESD .913 1EC3SD 1ESDEC3 1. 1EC3WN PRICER 5.635665 1BALHCO -2.7278 1EC3WN 1BALDSL -.05 1BALEWN .913 1EC3WN 1EWNEC3 1. 1BASW -.77605 1EC3IN PRICER 5.635665 1BALHCO -2.7278 1EC3IN 1BALDSL -.05 1BALEIN .913 1EC3IN 1EINEC3 1. 1BASI -.77605 1EC3SN PRICER 5.635665 1BALHCO -2.7278 1EC3SN 1BALDSL -.05 1BALESN .913 1EC3SN 1ESNEC3 1. 1BASS -.77605 2EC3WD PRICER 4.211314 2BALHCO -2.7278 2EC3WD 2BALDSL -.05 2BALEWD .913 2EC3WD 2EWDEC3 1. 2EC3ID PRICER 4.211314 2BALHCO -2.7278 2EC3ID 2BALDSL -.05 2BALEID .913 2EC3ID 2EIDEC3 1. 2EC3SD PRICER 4.211314 2BALHCO -2.7278 2EC3SD 2BALDSL -.05 2BALESD .913 2EC3SD 2ESDEC3 1. 2EC3WN PRICER 4.211314 2BALHCO -2.7278 2EC3WN 2BALDSL -.05 2BALEWN .913 2EC3WN 2EWNEC3 1. 2BASW -.77605 2EC3IN PRICER 4.211314 2BALHCO -2.7278 2EC3IN 2BALDSL -.05 2BALEIN .913 2EC3IN 2EINEC3 1. 2BASI -.77605 2EC3SN PRICER 4.211314 2BALHCO -2.7278 2EC3SN 2BALDSL -.05 2BALESN .913 2EC3SN 2ESNEC3 1. 2BASS -.77605 3EC3WD PRICER 3.146947 3BALHCO -2.7278 3EC3WD 3BALDSL -.05 3BALEWD .913 3EC3WD 3EWDEC3 1. 3EC3ID PRICER 3.146947 3BALHCO -2.7278 3EC3ID 3BALDSL -.05 3BALEID .913 3EC3ID 3EIDEC3 1. 3EC3SD PRICER 3.146947 3BALHCO -2.7278 3EC3SD 3BALDSL -.05 3BALESD .913 3EC3SD 3ESDEC3 1. 3EC3WN PRICER 3.146947 3BALHCO -2.7278 3EC3WN 3BALDSL -.05 3BALEWN .913 3EC3WN 3EWNEC3 1. 3BASW -.77605 3EC3IN PRICER 3.146947 3BALHCO -2.7278 3EC3IN 3BALDSL -.05 3BALEIN .913 3EC3IN 3EINEC3 1. 3BASI -.77605 3EC3SN PRICER 3.146947 3BALHCO -2.7278 3EC3SN 3BALDSL -.05 3BALESN .913 3EC3SN 3ESNEC3 1. 3BASS -.77605 1EP1WD PRICER 22.382751 1BALDSH -3.3333 1EP1WD 1BNDEP1L 1. 1BALEWD .913 1EP1WD 1EWDEP1 1. 1EP1ID PRICER 22.382751 1BALDSH -3.3333 1EP1ID 1BNDEP1L 1. 1BALEID .913 1EP1ID 1EIDEP1 1. 1EP1SD PRICER 22.382751 1BALDSH -3.3333 1EP1SD 1BNDEP1L 1. 1BALESD .913 1EP1SD 1ESDEP1 1. 1EP1WN PRICER 22.382751 1BALDSH -3.3333 1EP1WN 1BNDEP1L 1. 1BALEWN .913 1EP1WN 1EWNEP1 1. 1BASW -.77605 1EP1IN PRICER 22.382751 1BALDSH -3.3333 1EP1IN 1BNDEP1L 1. 1BALEIN .913 1EP1IN 1EINEP1 1. 1BASI -.77605 1EP1SN PRICER 22.382751 1BALDSH -3.3333 1EP1SN 1BNDEP1L 1. 1BALESN .913 1EP1SN 1ESNEP1 1. 1BASS -.77605 2EP1WD PRICER 16.725754 2BALDSH -3.3333 2EP1WD 2BNDEP1L 1. 2BALEWD .913 2EP1WD 2EWDEP1 1. 2EP1ID PRICER 16.725754 2BALDSH -3.3333 2EP1ID 2BNDEP1L 1. 2BALEID .913 2EP1ID 2EIDEP1 1. 2EP1SD PRICER 16.725754 2BALDSH -3.3333 2EP1SD 2BNDEP1L 1. 2BALESD .913 2EP1SD 2ESDEP1 1. 2EP1WN PRICER 16.725754 2BALDSH -3.3333 2EP1WN 2BNDEP1L 1. 2BALEWN .913 2EP1WN 2EWNEP1 1. 2BASW -.77605 2EP1IN PRICER 16.725754 2BALDSH -3.3333 2EP1IN 2BNDEP1L 1. 2BALEIN .913 2EP1IN 2EINEP1 1. 2BASI -.77605 2EP1SN PRICER 16.725754 2BALDSH -3.3333 2EP1SN 2BNDEP1L 1. 2BALESN .913 2EP1SN 2ESNEP1 1. 2BASS -.77605 3EP1WD PRICER 12.498495 3BALDSH -3.3333 3EP1WD 3BALEWD .913 3EWDEP1 1. 3EP1ID PRICER 12.498495 3BALDSH -3.3333 3EP1ID 3BALEID .913 3EIDEP1 1. 3EP1SD PRICER 12.498495 3BALDSH -3.3333 3EP1SD 3BALESD .913 3ESDEP1 1. 3EP1WN PRICER 12.498495 3BALDSH -3.3333 3EP1WN 3BALEWN .913 3EWNEP1 1. 3EP1WN 3BASW -.77605 3EP1IN PRICER 12.498495 3BALDSH -3.3333 3EP1IN 3BALEIN .913 3EINEP1 1. 3EP1IN 3BASI -.77605 3EP1SN PRICER 12.498495 3BALDSH -3.3333 3EP1SN 3BALESN .913 3ESNEP1 1. 3EP1SN 3BASS -.77605 1E14WD PRICER 4.183896 1BALDSL -3.5971 1E14WD 1BALEWD .913 1EWDE14 1. 1E14ID PRICER 4.183896 1BALDSL -3.5971 1E14ID 1BALEID .913 1EIDE14 1. 1E14SD PRICER 4.183896 1BALDSL -3.5971 1E14SD 1BALESD .913 1ESDE14 1. 1E14WN PRICER 4.183896 1BALDSL -3.5971 1E14WN 1BALEWN .913 1EWNE14 1. 1E14WN 1BASW -.77605 1E14IN PRICER 4.183896 1BALDSL -3.5971 1E14IN 1BALEIN .913 1EINE14 1. 1E14IN 1BASI -.77605 1E14SN PRICER 4.183896 1BALDSL -3.5971 1E14SN 1BALESN .913 1ESNE14 1. 1E14SN 1BASS -.77605 2E14WD PRICER 3.126463 2BALDSL -3.5971 2E14WD 2BALEWD .913 2EWDE14 1. 2E14ID PRICER 3.126463 2BALDSL -3.5971 2E14ID 2BALEID .913 2EIDE14 1. 2E14SD PRICER 3.126463 2BALDSL -3.5971 2E14SD 2BALESD .913 2ESDE14 1. 2E14WN PRICER 3.126463 2BALDSL -3.5971 2E14WN 2BALEWN .913 2EWNE14 1. 2E14WN 2BASW -.77605 2E14IN PRICER 3.126463 2BALDSL -3.5971 2E14IN 2BALEIN .913 2EINE14 1. 2E14IN 2BASI -.77605 2E14SN PRICER 3.126463 2BALDSL -3.5971 2E14SN 2BALESN .913 2ESNE14 1. 2E14SN 2BASS -.77605 3E14WD PRICER 2.336281 3BALDSL -3.5971 3E14WD 3BALEWD .913 3EWDE14 1. 3E14ID PRICER 2.336281 3BALDSL -3.5971 3E14ID 3BALEID .913 3EIDE14 1. 3E14SD PRICER 2.336281 3BALDSL -3.5971 3E14SD 3BALESD .913 3ESDE14 1. 3E14WN PRICER 2.336281 3BALDSL -3.5971 3E14WN 3BALEWN .913 3EWNE14 1. 3E14WN 3BASW -.77605 3E14IN PRICER 2.336281 3BALDSL -3.5971 3E14IN 3BALEIN .913 3EINE14 1. 3E14IN 3BASI -.77605 3E14SN PRICER 2.336281 3BALDSL -3.5971 3E14SN 3BALESN .913 3ESNE14 1. 3E14SN 3BASS -.77605 1E22WD PRICER 1.807856 1BALPLU .016627 1E22WD 1BALMAG -12.6582 2BALPLU .007126 1E22WD 1BALEWD .4565 1BALEWN .4565 1E22WD 1EWDE22 1. 1BASW .068475 1E22ID PRICER 1.807856 1BALPLU .016627 1E22ID 1BALMAG -12.6582 2BALPLU .007126 1E22ID 1BALEID .59345 1BALEIN .31955 1E22ID 1EIDE22 1. 1BASI .047932 1E22SD PRICER 1.807856 1BALPLU .016627 1E22SD 1BALMAG -12.6582 2BALPLU .007126 1E22SD 1BALESD .654317 1BALESN .258683 1E22SD 1ESDE22 1. 1BASS .038802 2E22WD PRICER 1.350941 2BALPLU .016627 2E22WD 2BALMAG -12.6582 3BALPLU .007126 2E22WD 2BALEWD .4565 2BALEWN .4565 2E22WD 2EWDE22 1. 2BASW .068475 2E22ID PRICER 1.350941 2BALPLU .016627 2E22ID 2BALMAG -12.6582 3BALPLU .007126 2E22ID 2BALEID .59345 2BALEIN .31955 2E22ID 2EIDE22 1. 2BASI .047932 2E22SD PRICER 1.350941 2BALPLU .016627 2E22SD 2BALMAG -12.6582 3BALPLU .007126 2E22SD 2BALESD .654317 2BALESN .258683 2E22SD 2ESDE22 1. 2BASS .038802 3E22WD PRICER 1.009503 3BALPLU .016627 3E22WD 3BALMAG -12.6582 3BALEWD .4565 3E22WD 3BALEWN .4565 3EWDE22 1. 3E22WD 3BASW .068475 3E22ID PRICER 1.009503 3BALPLU .016627 3E22ID 3BALMAG -12.6582 3BALEID .59345 3E22ID 3BALEIN .31955 3EIDE22 1. 3E22ID 3BASI .047932 3E22SD PRICER 1.009503 3BALPLU .016627 3E22SD 3BALMAG -12.6582 3BALESD .654317 3E22SD 3BALESN .258683 3ESDE22 1. 3E22SD 3BASS .038802 1E23WD PRICER 1.136366 1BALAGR -1.457729 1E23WD 1BALAGS 1.457729 1BALEWD .4565 1E23WD 1BALEWN .4565 1EWDE23 1. 1E23WD 1BASW .068475 1E23ID PRICER 1.136366 1BALAGR -1.457729 1E23ID 1BALAGS 1.457729 1BALEID .59345 1E23ID 1BALEIN .31955 1EIDE23 1. 1E23ID 1BASI .047932 1E23SD PRICER 1.136366 1BALAGR -1.457729 1E23SD 1BALAGS 1.457729 1BALESD .654317 1E23SD 1BALESN .258683 1ESDE23 1. 1E23SD 1BASS .038802 2E23WD PRICER .849163 2BALAGR -1.457729 2E23WD 2BALAGS 1.457729 2BALEWD .4565 2E23WD 2BALEWN .4565 2EWDE23 1. 2E23WD 2BASW .068475 2E23ID PRICER .849163 2BALAGR -1.457729 2E23ID 2BALAGS 1.457729 2BALEID .59345 2E23ID 2BALEIN .31955 2EIDE23 1. 2E23ID 2BASI .047932 2E23SD PRICER .849163 2BALAGR -1.457729 2E23SD 2BALAGS 1.457729 2BALESD .654317 2E23SD 2BALESN .258683 2ESDE23 1. 2E23SD 2BASS .038802 3E23WD PRICER .634546 3BALAGR -1.457729 3E23WD 3BALAGS 1.457729 3BALEWD .4565 3E23WD 3BALEWN .4565 3EWDE23 1. 3E23WD 3BASW .068475 3E23ID PRICER .634546 3BALAGR -1.457729 3E23ID 3BALAGS 1.457729 3BALEID .59345 3E23ID 3BALEIN .31955 3EIDE23 1. 3E23ID 3BASI .047932 3E23SD PRICER .634546 3BALAGR -1.457729 3E23SD 3BALAGS 1.457729 3BALESD .654317 3E23SD 3BALESN .258683 3ESDE23 1. 3E23SD 3BASS .038802 1E31WD 1BALEWD .913 1EWDE31 1. 1E31ID 1BALEID .913 1EIDE31 1. 1E31SD 1BALESD .913 1ESDE31 1. 1E31WN 1BALEWN .913 1EWNE31 1. 1E31WN 1BASW -.77605 1E31IN 1BALEIN .913 1EINE31 1. 1E31IN 1BASI -.77605 1E31SN 1BALESN .913 1ESNE31 1. 1E31SN 1BASS -.77605 2E31WD 2BALEWD .913 2EWDE31 1. 2E31ID 2BALEID .913 2EIDE31 1. 2E31SD 2BALESD .913 2ESDE31 1. 2E31WN 2BALEWN .913 2EWNE31 1. 2E31WN 2BASW -.77605 2E31IN 2BALEIN .913 2EINE31 1. 2E31IN 2BASI -.77605 2E31SN 2BALESN .913 2ESNE31 1. 2E31SN 2BASS -.77605 3E31WD 3BALEWD .913 3EWDE31 1. 3E31ID 3BALEID .913 3EIDE31 1. 3E31SD 3BALESD .913 3ESDE31 1. 3E31WN 3BALEWN .913 3EWNE31 1. 3E31WN 3BASW -.77605 3E31IN 3BALEIN .913 3EINE31 1. 3E31IN 3BASI -.77605 3E31SN 3BALESN .913 3ESNE31 1. 3E31SN 3BASS -.77605 2E35WD 2BALEWD .913 2EWDE35 1. 2E35ID 2BALEID .913 2EIDE35 1. 2E35SD 2BALESD .913 2ESDE35 1. 2E35WN 2BALEWN .913 2EWNE35 1. 2E35WN 2BASW -.77605 2E35IN 2BALEIN .913 2EINE35 1. 2E35IN 2BASI -.77605 2E35SN 2BALESN .913 2ESNE35 1. 2E35SN 2BASS -.77605 3E35WD 3BALEWD .913 3EWDE35 1. 3E35ID 3BALEID .913 3EIDE35 1. 3E35SD 3BALESD .913 3ESDE35 1. 3E35WN 3BALEWN .913 3EWNE35 1. 3E35WN 3BASW -.77605 3E35IN 3BALEIN .913 3EINE35 1. 3E35IN 3BASI -.77605 3E35SN 3BALESN .913 3ESNE35 1. 3E35SN 3BASS -.77605 3E94WD PRICER 41.750214 3BALGAS -2.5 3E94WD 3BALEWD 1. 3EWDE94 1. 3E94ID PRICER 41.750214 3BALGAS -2.5 3E94ID 3BALEID 1. 3EIDE94 1. 3E94SD PRICER 41.750214 3BALGAS -2.5 3E94SD 3BALESD 1. 3ESDE94 1. 3E94WN PRICER 41.750214 3BALGAS -2.5 3E94WN 3BALEWN 1. 3EWNE94 1. 3E94WN 3BASW -.85 3E94IN PRICER 41.750214 3BALGAS -2.5 3E94IN 3BALEIN 1. 3EINE94 1. 3E94IN 3BASI -.85 3E94SN PRICER 41.750214 3BALGAS -2.5 3E94SN 3BALESN 1. 3ESNE94 1. 3E94SN 3BASS -.85 3E60WD PRICER 3.533263 3BALHCO -2.5 3E60WD 3BALEWD 1. 3EWDE60 1. 3E60WD 3BALDHW 2. 3E60ID PRICER 3.533263 3BALHCO -2.5 3E60ID 3BALEID 1. 3EIDE60 1. 3E60ID 3BALDHI 2. 3E60SD PRICER 3.533263 3BALHCO -2.5 3E60SD 3BALESD 1. 3ESDE60 1. 3E60SD 3BALDHS 2. 3E60WN PRICER 3.533263 3BALHCO -2.5 3E60WN 3BALEWN 1. 3EWNE60 1. 3E60WN 3BASW -.85 3BALDHW 2. 3E60IN PRICER 3.533263 3BALHCO -2.5 3E60IN 3BALEIN 1. 3EINE60 1. 3E60IN 3BASI -.85 3BALDHI 2. 3E60SN PRICER 3.533263 3BALHCO -2.5 3E60SN 3BALESN 1. 3ESNE60 1. 3E60SN 3BASS -.85 3BALDHS 2. 1E51WD 1BALEWD .913 1BALEWN -1.304311 1E51WD 1EWDE51 1. 1E51ID 1BALEID .913 1BALEIN -1.304311 1E51ID 1EIDE51 1. 1E51SD 1BALESD .913 1BALESN -1.304311 1E51SD 1ESDE51 1. 2E51WD 2BALEWD .913 2BALEWN -1.292807 2E51WD 2EWDE51 1. 2E51ID 2BALEID .913 2BALEIN -1.292807 2E51ID 2EIDE51 1. 2E51SD 2BALESD .913 2BALESN -1.292807 2E51SD 2ESDE51 1. 3E51WD 3BALEWD .913 3BALEWN -1.281395 3E51WD 3EWDE51 1. 3E51ID 3BALEID .913 3BALEIN -1.281395 3E51ID 3EIDE51 1. 3E51SD 3BALESD .913 3BALESN -1.281395 3E51SD 3ESDE51 1. RHS REST 1CPTEP1 12.355 1CPTE14 3.487 REST 1CPTE22 3.727 1CPTE23 2. REST 1CPTE31 1.686 1CPTE51 1. REST 1CPTS06 555. 1CPTS21 4088. REST 1CPTS23 728. 1CPTS28 445. REST 1CPTIJ6 248.21 1CPTIJ7 126.78 REST 1CPTIJ8 61.21 1CPTR20 38.95 REST 1CPTR21 24.79 1CPTR23 43.24 REST 1CPTR27 235.17 1CPTR28 52.4 REST 1CPTRT0 30.689987 1CPTRT1 61.37 REST 1CPTRT3 85.93 1CPTRT7 76.63 REST 1CPTRT8 16.63 1CPTR50 4. REST 1CPTR51 65.64 1CPTR53 34.019989 REST 1CPTR57 157.73 1CPTR58 26.34 REST 2CPTEP1 8.303 2CPTE14 2.838 REST 2CPTE22 3.727 2CPTE23 2. REST 2CPTE31 1.686 2CPTE51 1. REST 2CPTS06 229. 2CPTS21 3270. REST 2CPTS23 582. 2CPTS28 356. REST 2CPTIJ6 150. 2CPTIJ7 70. REST 2CPTIJ8 30. 2CPTR20 20. REST 2CPTR21 12. 2CPTR23 22. REST 2CPTR27 118. 2CPTR28 26. REST 2CPTRT0 15. 2CPTRT1 30. REST 2CPTRT3 43. 2CPTRT7 38. REST 2CPTRT8 8. 2CPTR50 2. REST 2CPTR51 32. 2CPTR53 17. REST 2CPTR57 80. 2CPTR58 13. REST 3CPTEP1 7.765 3CPTE14 2.838 REST 3CPTE22 2.906 3CPTE23 2. REST 3CPTE31 1.686 3CPTE51 1. REST 3CPTS06 153. 3CPTS21 2453. REST 3CPTS23 437. 3CPTS28 267. REST 3CPTIJ6 50. 3CPTIJ7 30. REST 3CPTR20 10. 3CPTR21 6. REST 3CPTR23 11. 3CPTR27 59. REST 3CPTR28 13. 3CPTRT0 7.5 REST 3CPTRT1 15. 3CPTRT3 21. REST 3CPTRT7 19. 3CPTRT8 4. REST 3CPTR50 1. 3CPTR51 16. REST 3CPTR53 8.5 3CPTR57 40. REST 3CPTR58 6.5 3GRCE35 .01 REST 1DEMI1 332.829834 1DEMII 826.959961 REST 1DEMIJ 436.189941 1DEMNY 616.079834 REST 1DEMR2 617.72998 1DEMRT 277.599854 REST 1DEMR5 287.72998 1DEMRD 417.99 REST 1DEMT8 1161.799805 1DEMTX 327.7 REST 2DEMI1 328.219971 2DEMII 827.689941 REST 2DEMIJ 397.099854 2DEMNY 626.849854 REST 2DEMR2 606.099854 2DEMRT 268.7 REST 2DEMR5 277.139893 2DEMRD 413.799805 REST 2DEMT8 1200. 2DEMTX 338.5 REST 3DEMI1 291.689941 3DEMII 855.269775 REST 3DEMIJ 376.829834 3DEMNY 634.919922 REST 3DEMR2 576.839844 3DEMRT 264.799805 REST 3DEMR5 264.829834 3DEMRD 418.579834 REST 3DEMT8 1201.599854 3DEMTX 358.9 REST 1BNDEP1L 64.659988 2BNDEP1L 24.25 BOUNDS FX BNDSET1 1MINHCO1 3084.099854 UP BNDSET1 2MINHCO1 3084.099854 UP BNDSET1 3MINHCO1 3039. UP BNDSET1 1STKOIK1 28940. FX BNDSET1 1EXPDSH1 91. FX BNDSET1 2EXPDSH1 61. FX BNDSET1 3EXPDSH1 61. FX BNDSET1 1EXPDSL1 23. FX BNDSET1 2EXPDSL1 17. FX BNDSET1 3EXPDSL1 17. UP BNDSET1 1EXPGAS1 .1 UP BNDSET1 2EXPGAS1 .1 UP BNDSET1 3EXPGAS1 .1 UP BNDSET1 1STKGAK1 12058. UP BNDSET1 1STKURN1 .1 UP BNDSET1 1STKUDP1 .1 UP BNDSET1 1STKPLU1 1.5 UP BNDSET1 1STKAGS1 .0001 UP BNDSET1 1STKLMS1 .0001 UP BNDSET1 2E35INV .0001 UP BNDSET1 3E35INV .0001 UP BNDSET1 3E94INV .0001 UP BNDSET1 3E60INV .0001 UP BNDSET1 3S80INV .001 LO BNDSET1 1IJ6CAP 248.21 LO BNDSET1 2IJ6CAP 150. LO BNDSET1 3IJ6CAP 50. LO BNDSET1 1IJ7CAP 126.78 LO BNDSET1 2IJ7CAP 70. LO BNDSET1 3IJ7CAP 30. LO BNDSET1 1IJ8CAP 61.21 LO BNDSET1 2IJ8CAP 30. LO BNDSET1 1R20CAP 38.95 LO BNDSET1 2R20CAP 20. LO BNDSET1 3R20CAP 10. LO BNDSET1 1R21CAP 24.79 LO BNDSET1 2R21CAP 12. LO BNDSET1 3R21CAP 6. LO BNDSET1 1R23CAP 43.24 LO BNDSET1 2R23CAP 22. LO BNDSET1 3R23CAP 11. LO BNDSET1 1R27CAP 235.17 LO BNDSET1 2R27CAP 118. LO BNDSET1 3R27CAP 59. LO BNDSET1 1R28CAP 52.4 LO BNDSET1 2R28CAP 26. LO BNDSET1 3R28CAP 13. UP BNDSET1 2R2ACAP .29 UP BNDSET1 3R2ACAP .58 FX BNDSET1 1R2YCAP 223.18 FX BNDSET1 2R2YCAP 218.49 FX BNDSET1 3R2YCAP 205.62 FX BNDSET1 1RT0CAP 30.689987 LO BNDSET1 2RT0CAP 15. LO BNDSET1 3RT0CAP 7.5 FX BNDSET1 1RT1CAP 61.37 LO BNDSET1 2RT1CAP 30. LO BNDSET1 3RT1CAP 15. FX BNDSET1 1RT7CAP 76.63 LO BNDSET1 2RT7CAP 38. LO BNDSET1 3RT7CAP 19. FX BNDSET1 1RT8CAP 16.63 LO BNDSET1 2RT8CAP 8. LO BNDSET1 3RT8CAP 4. FX BNDSET1 1RTYCAP 6.3 FX BNDSET1 2RTYCAP 4.9 FX BNDSET1 3RTYCAP 4.2 FX BNDSET1 1R50CAP 4. LO BNDSET1 2R50CAP 2. LO BNDSET1 3R50CAP 1. FX BNDSET1 1R53CAP 34.019989 LO BNDSET1 2R53CAP 17. LO BNDSET1 3R53CAP 8.5 FX BNDSET1 1R57CAP 157.73 LO BNDSET1 2R57CAP 80. LO BNDSET1 3R57CAP 40. FX BNDSET1 1R58CAP 26.34 LO BNDSET1 2R58CAP 13. LO BNDSET1 3R58CAP 6.5 UP BNDSET1 2R5ACAP .09 UP BNDSET1 3R5ACAP .18 FX BNDSET1 1T80CAP 8.32 FX BNDSET1 1T8FCAP 754.629883 FX BNDSET1 2T8FCAP 728.629883 FX BNDSET1 3T8FCAP 702.629883 FX BNDSET1 1S06CAP 555. FX BNDSET1 2S06CAP 229. FX BNDSET1 3S06CAP 153. UP BNDSET1 1S08CAP 115. UP BNDSET1 2S08CAP 384. UP BNDSET1 3S08CAP 458. FX BNDSET1 1S79CAP 1457. UP BNDSET1 2S79CAP 1840. UP BNDSET1 3S79CAP 2060. FX BNDSET1 1S7ACAP 3640. UP BNDSET1 2S7ACAP 4967. UP BNDSET1 3S7ACAP 4290. FX BNDSET1 1EC1CAP 9.536 FX BNDSET1 2EC1CAP 4.392 FX BNDSET1 3EC1CAP .622 FX BNDSET1 1EC2CAP 35.288 FX BNDSET1 2EC2CAP 34.874 FX BNDSET1 3EC2CAP 33.635986 LO BNDSET1 3EC3CAP 1.875 FX BNDSET1 1EP1CAP 12.355 FX BNDSET1 2EP1CAP 14.817 LO BNDSET1 2E14CAP 3.109 FX BNDSET1 1E22CAP 3.727 FX BNDSET1 2E22CAP 3.727 FX BNDSET1 3E22CAP 2.906 FX BNDSET1 1E23CAP 2. FX BNDSET1 2E23CAP 5.112 FX BNDSET1 3E23CAP 7.592 UP BNDSET1 1E31CAP 1.686 UP BNDSET1 2E31CAP 1.686 UP BNDSET1 3E31CAP 1.686 UP BNDSET1 2E35CAP .005 UP BNDSET1 3E35CAP 1. UP BNDSET1 3E60CAP 3. FX BNDSET1 1E51CAP 1.3 UP BNDSET1 2E51CAP 1.301 UP BNDSET1 3E51CAP 1.301 ENDATA DyLP-1.10.4/Data/Sample/galenetbnds.mps0000644000175200017520000000501711431323442016154 0ustar coincoin* Modified galenet with equalities converted to a pair of inequalities and * implicit bounds converted to explicit inequalities. All inequalities then * converted to less than. In other words, the classic canonical form for * conversion to dual, so that we can do an algebraic test of getDualRays * for solvers that don't return the column components. NAME galenetbnds ROWS L S1 L S2 L S3 L NODE4U L NODE4L L NODE5U L NODE5L L D6 L D7 L D8 L T14UB L T14LB L T24UB L T24LB L T25UB L T25LB L T35UB L T35LB L T46UB L T46LB L T47UB L T47LB L T57UB L T57LB L T58UB L T58LB N COST COLUMNS T14 S1 1. NODE4U 1. T14 NODE4L -1 T14 T14UB 1. T14LB -1. T24 S2 1. NODE4U 1. T24 NODE4L -1 T24 T24UB 1. T24LB -1. T25 S2 1. NODE5U 1. T25 NODE5L -1. T25 T25UB 1. T25LB -1. T35 S3 1. NODE5U 1. T35 NODE5L -1. T35 T35UB 1. T35LB -1. T46 D6 -1. NODE4U -1. T46 NODE4L 1 T46 T46UB 1. T46LB -1. T47 D7 -1. NODE4U -1. T47 NODE4L 1 T47 T47UB 1. T47LB -1. T57 D7 -1. NODE5U -1. T57 NODE5L 1. T57 T57UB 1. T57LB -1. T58 D8 -1. NODE5U -1. T58 NODE5L 1. T58 T58UB 1. T58LB -1. RHS RHS S1 20. S2 20. RHS S3 20. D6 -10. RHS D7 -20. D8 -30. RHS T14UB 30. RHS T24UB 20. RHS T25UB 10. RHS T35UB 10. RHS T46UB 10. RHS T47UB 2. RHS T57UB 20. RHS T58UB 30. BOUNDS FR BND T14 FR BND T24 FR BND T25 FR BND T35 FR BND T46 FR BND T47 FR BND T57 FR BND T58 ENDATA DyLP-1.10.4/Data/Sample/wedding_16.mps0000644000175200017520000073331512136243266015636 0ustar coincoin* ENCODING=ISO-8859-1 NAME wedding_main.lp ROWS N OBJ L Maximum_table_size_0 L Maximum_table_size_1 L Maximum_table_size_2 L Maximum_table_size_3 L Maximum_table_size_4 E Must_seat_A E Must_seat_B E Must_seat_C E Must_seat_D E Must_seat_E E Must_seat_F E Must_seat_G E Must_seat_H E Must_seat_I E Must_seat_J E Must_seat_K E Must_seat_L E Must_seat_M E Must_seat_N E Must_seat_O E Must_seat_P G _C1 G _C10 G _C100 G _C101 G _C102 G _C103 G _C104 G _C105 G _C106 G _C107 G _C108 G _C109 G _C11 G _C110 G _C111 G _C112 G _C113 G _C114 G _C115 G _C116 G _C117 G _C118 G _C119 G _C12 G _C120 G _C121 G _C122 G _C123 G _C124 G _C125 G _C126 G _C127 G _C128 G _C129 G _C13 G _C130 G _C131 G _C132 G _C133 G _C134 G _C135 G _C136 G _C137 G _C138 G _C139 G _C14 G _C140 G _C141 G _C142 G _C143 G _C144 G _C145 G _C146 G _C147 G _C148 G _C149 G _C15 G _C150 G _C151 G _C152 G _C153 G _C154 G _C155 G _C156 G _C157 G _C158 G _C159 G _C16 G _C160 G _C161 G _C162 G _C163 G _C164 G _C165 G _C166 G _C167 G _C168 G _C169 G _C17 G _C170 G _C171 G _C172 G _C173 G _C174 G _C175 G _C176 G _C177 G _C178 G _C179 G _C18 G _C180 G _C181 G _C182 G _C183 G _C184 G _C185 G _C186 G _C187 G _C188 G _C189 G _C19 G _C190 G _C191 G _C192 G _C193 G _C194 G _C195 G _C196 G _C197 G _C198 G _C199 G _C2 G _C20 G _C200 G _C201 G _C202 G _C203 G _C204 G _C205 G _C206 G _C207 G _C208 G _C209 G _C21 G _C210 G _C211 G _C212 G _C213 G _C214 G _C215 G _C216 G _C217 G _C218 G _C219 G _C22 G _C220 G _C221 G _C222 G _C223 G _C224 G _C225 G _C226 G _C227 G _C228 G _C229 G _C23 G _C230 G _C231 G _C232 G _C233 G _C234 G _C235 G _C236 G _C237 G _C238 G _C239 G _C24 G _C240 G _C241 G _C242 G _C243 G _C244 G _C245 G _C246 G _C247 G _C248 G _C249 G _C25 G _C250 G _C251 G _C252 G _C253 G _C254 G _C255 G _C256 G _C257 G _C258 G _C259 G _C26 G _C260 G _C261 G _C262 G _C263 G _C264 G _C265 G _C266 G _C267 G _C268 G _C269 G _C27 G _C270 G _C271 G _C272 G _C273 G _C274 G _C275 G _C276 G _C277 G _C278 G _C279 G _C28 G _C280 G _C281 G _C282 G _C283 G _C284 G _C285 G _C286 G _C287 G _C288 G _C289 G _C29 G _C290 G _C291 G _C292 G _C293 G _C294 G _C295 G _C296 G _C297 G _C298 G _C299 G _C3 G _C30 G _C300 G _C301 G _C302 G _C303 G _C304 G _C305 G _C306 G _C307 G _C308 G _C309 G _C31 G _C310 G _C311 G _C312 G _C313 G _C314 G _C315 G _C316 G _C317 G _C318 G _C319 G _C32 G _C320 G _C321 G _C322 G _C323 G _C324 G _C325 G _C326 G _C327 G _C328 G _C329 G _C33 G _C330 G _C331 G _C332 G _C333 G _C334 G _C335 G _C336 G _C337 G _C338 G _C339 G _C34 G _C340 G _C341 G _C342 G _C343 G _C344 G _C345 G _C346 G _C347 G _C348 G _C349 G _C35 G _C350 G _C351 G _C352 G _C353 G _C354 G _C355 G _C356 G _C357 G _C358 G _C359 G _C36 G _C360 G _C361 G _C362 G _C363 G _C364 G _C365 G _C366 G _C367 G _C368 G _C369 G _C37 G _C370 G _C371 G _C372 G _C373 G _C374 G _C375 G _C376 G _C377 G _C378 G _C379 G _C38 G _C380 G _C381 G _C382 G _C383 G _C384 G _C385 G _C386 G _C387 G _C388 G _C389 G _C39 G _C390 G _C391 G _C392 G _C393 G _C394 G _C395 G _C396 G _C397 G _C398 G _C399 G _C4 G _C40 G _C400 G _C401 G _C402 G _C403 G _C404 G _C405 G _C406 G _C407 G _C408 G _C409 G _C41 G _C410 G _C411 G _C412 G _C413 G _C414 G _C415 G _C416 G _C417 G _C418 G _C419 G _C42 G _C420 G _C421 G _C422 G _C423 G _C424 G _C425 G _C426 G _C427 G _C428 G _C429 G _C43 G _C430 G _C431 G _C432 G _C433 G _C434 G _C435 G _C436 G _C437 G _C438 G _C439 G _C44 G _C440 G _C441 G _C442 G _C443 G _C444 G _C445 G _C446 G _C447 G _C448 G _C449 G _C45 G _C450 G _C451 G _C452 G _C453 G _C454 G _C455 G _C456 G _C457 G _C458 G _C459 G _C46 G _C460 G _C461 G _C462 G _C463 G _C464 G _C465 G _C466 G _C467 G _C468 G _C469 G _C47 G _C470 G _C471 G _C472 G _C473 G _C474 G _C475 G _C476 G _C477 G _C478 G _C479 G _C48 G _C480 G _C481 G _C482 G _C483 G _C484 G _C485 G _C486 G _C487 G _C488 G _C489 G _C49 G _C490 G _C491 G _C492 G _C493 G _C494 G _C495 G _C496 G _C497 G _C498 G _C499 G _C5 G _C50 G _C500 G _C501 G _C502 G _C503 G _C504 G _C505 G _C506 G _C507 G _C508 G _C509 G _C51 G _C510 G _C511 G _C512 G _C513 G _C514 G _C515 G _C516 G _C517 G _C518 G _C519 G _C52 G _C520 G _C521 G _C522 G _C523 G _C524 G _C525 G _C526 G _C527 G _C528 G _C529 G _C53 G _C530 G _C531 G _C532 G _C533 G _C534 G _C535 G _C536 G _C537 G _C538 G _C539 G _C54 G _C540 G _C541 G _C542 G _C543 G _C544 G _C545 G _C546 G _C547 G _C548 G _C549 G _C55 G _C550 G _C551 G _C552 G _C553 G _C554 G _C555 G _C556 G _C557 G _C558 G _C559 G _C56 G _C560 G _C561 G _C562 G _C563 G _C564 G _C565 G _C566 G _C567 G _C568 G _C569 G _C57 G _C570 G _C571 G _C572 G _C573 G _C574 G _C575 G _C576 G _C577 G _C578 G _C579 G _C58 G _C580 G _C581 G _C582 G _C583 G _C584 G _C585 G _C586 G _C587 G _C588 G _C589 G _C59 G _C590 G _C591 G _C592 G _C593 G _C594 G _C595 G _C596 G _C597 G _C598 G _C599 G _C6 G _C60 G _C600 G _C61 G _C62 G _C63 G _C64 G _C65 G _C66 G _C67 G _C68 G _C69 G _C7 G _C70 G _C71 G _C72 G _C73 G _C74 G _C75 G _C76 G _C77 G _C78 G _C79 G _C8 G _C80 G _C81 G _C82 G _C83 G _C84 G _C85 G _C86 G _C87 G _C88 G _C89 G _C9 G _C90 G _C91 G _C92 G _C93 G _C94 G _C95 G _C96 G _C97 G _C98 G _C99 COLUMNS table_happiness_0 OBJ 1 table_happiness_0 _C1 1 table_happiness_0 _C10 1 table_happiness_0 _C100 1 table_happiness_0 _C101 1 table_happiness_0 _C102 1 table_happiness_0 _C103 1 table_happiness_0 _C104 1 table_happiness_0 _C105 1 table_happiness_0 _C106 1 table_happiness_0 _C107 1 table_happiness_0 _C108 1 table_happiness_0 _C109 1 table_happiness_0 _C11 1 table_happiness_0 _C110 1 table_happiness_0 _C111 1 table_happiness_0 _C112 1 table_happiness_0 _C113 1 table_happiness_0 _C114 1 table_happiness_0 _C115 1 table_happiness_0 _C116 1 table_happiness_0 _C117 1 table_happiness_0 _C118 1 table_happiness_0 _C119 1 table_happiness_0 _C12 1 table_happiness_0 _C120 1 table_happiness_0 _C13 1 table_happiness_0 _C14 1 table_happiness_0 _C15 1 table_happiness_0 _C16 1 table_happiness_0 _C17 1 table_happiness_0 _C18 1 table_happiness_0 _C19 1 table_happiness_0 _C2 1 table_happiness_0 _C20 1 table_happiness_0 _C21 1 table_happiness_0 _C22 1 table_happiness_0 _C23 1 table_happiness_0 _C24 1 table_happiness_0 _C25 1 table_happiness_0 _C26 1 table_happiness_0 _C27 1 table_happiness_0 _C28 1 table_happiness_0 _C29 1 table_happiness_0 _C3 1 table_happiness_0 _C30 1 table_happiness_0 _C31 1 table_happiness_0 _C32 1 table_happiness_0 _C33 1 table_happiness_0 _C34 1 table_happiness_0 _C35 1 table_happiness_0 _C36 1 table_happiness_0 _C37 1 table_happiness_0 _C38 1 table_happiness_0 _C39 1 table_happiness_0 _C4 1 table_happiness_0 _C40 1 table_happiness_0 _C41 1 table_happiness_0 _C42 1 table_happiness_0 _C43 1 table_happiness_0 _C44 1 table_happiness_0 _C45 1 table_happiness_0 _C46 1 table_happiness_0 _C47 1 table_happiness_0 _C48 1 table_happiness_0 _C49 1 table_happiness_0 _C5 1 table_happiness_0 _C50 1 table_happiness_0 _C51 1 table_happiness_0 _C52 1 table_happiness_0 _C53 1 table_happiness_0 _C54 1 table_happiness_0 _C55 1 table_happiness_0 _C56 1 table_happiness_0 _C57 1 table_happiness_0 _C58 1 table_happiness_0 _C59 1 table_happiness_0 _C6 1 table_happiness_0 _C60 1 table_happiness_0 _C61 1 table_happiness_0 _C62 1 table_happiness_0 _C63 1 table_happiness_0 _C64 1 table_happiness_0 _C65 1 table_happiness_0 _C66 1 table_happiness_0 _C67 1 table_happiness_0 _C68 1 table_happiness_0 _C69 1 table_happiness_0 _C7 1 table_happiness_0 _C70 1 table_happiness_0 _C71 1 table_happiness_0 _C72 1 table_happiness_0 _C73 1 table_happiness_0 _C74 1 table_happiness_0 _C75 1 table_happiness_0 _C76 1 table_happiness_0 _C77 1 table_happiness_0 _C78 1 table_happiness_0 _C79 1 table_happiness_0 _C8 1 table_happiness_0 _C80 1 table_happiness_0 _C81 1 table_happiness_0 _C82 1 table_happiness_0 _C83 1 table_happiness_0 _C84 1 table_happiness_0 _C85 1 table_happiness_0 _C86 1 table_happiness_0 _C87 1 table_happiness_0 _C88 1 table_happiness_0 _C89 1 table_happiness_0 _C9 1 table_happiness_0 _C90 1 table_happiness_0 _C91 1 table_happiness_0 _C92 1 table_happiness_0 _C93 1 table_happiness_0 _C94 1 table_happiness_0 _C95 1 table_happiness_0 _C96 1 table_happiness_0 _C97 1 table_happiness_0 _C98 1 table_happiness_0 _C99 1 table_happiness_1 OBJ 1 table_happiness_1 _C121 1 table_happiness_1 _C122 1 table_happiness_1 _C123 1 table_happiness_1 _C124 1 table_happiness_1 _C125 1 table_happiness_1 _C126 1 table_happiness_1 _C127 1 table_happiness_1 _C128 1 table_happiness_1 _C129 1 table_happiness_1 _C130 1 table_happiness_1 _C131 1 table_happiness_1 _C132 1 table_happiness_1 _C133 1 table_happiness_1 _C134 1 table_happiness_1 _C135 1 table_happiness_1 _C136 1 table_happiness_1 _C137 1 table_happiness_1 _C138 1 table_happiness_1 _C139 1 table_happiness_1 _C140 1 table_happiness_1 _C141 1 table_happiness_1 _C142 1 table_happiness_1 _C143 1 table_happiness_1 _C144 1 table_happiness_1 _C145 1 table_happiness_1 _C146 1 table_happiness_1 _C147 1 table_happiness_1 _C148 1 table_happiness_1 _C149 1 table_happiness_1 _C150 1 table_happiness_1 _C151 1 table_happiness_1 _C152 1 table_happiness_1 _C153 1 table_happiness_1 _C154 1 table_happiness_1 _C155 1 table_happiness_1 _C156 1 table_happiness_1 _C157 1 table_happiness_1 _C158 1 table_happiness_1 _C159 1 table_happiness_1 _C160 1 table_happiness_1 _C161 1 table_happiness_1 _C162 1 table_happiness_1 _C163 1 table_happiness_1 _C164 1 table_happiness_1 _C165 1 table_happiness_1 _C166 1 table_happiness_1 _C167 1 table_happiness_1 _C168 1 table_happiness_1 _C169 1 table_happiness_1 _C170 1 table_happiness_1 _C171 1 table_happiness_1 _C172 1 table_happiness_1 _C173 1 table_happiness_1 _C174 1 table_happiness_1 _C175 1 table_happiness_1 _C176 1 table_happiness_1 _C177 1 table_happiness_1 _C178 1 table_happiness_1 _C179 1 table_happiness_1 _C180 1 table_happiness_1 _C181 1 table_happiness_1 _C182 1 table_happiness_1 _C183 1 table_happiness_1 _C184 1 table_happiness_1 _C185 1 table_happiness_1 _C186 1 table_happiness_1 _C187 1 table_happiness_1 _C188 1 table_happiness_1 _C189 1 table_happiness_1 _C190 1 table_happiness_1 _C191 1 table_happiness_1 _C192 1 table_happiness_1 _C193 1 table_happiness_1 _C194 1 table_happiness_1 _C195 1 table_happiness_1 _C196 1 table_happiness_1 _C197 1 table_happiness_1 _C198 1 table_happiness_1 _C199 1 table_happiness_1 _C200 1 table_happiness_1 _C201 1 table_happiness_1 _C202 1 table_happiness_1 _C203 1 table_happiness_1 _C204 1 table_happiness_1 _C205 1 table_happiness_1 _C206 1 table_happiness_1 _C207 1 table_happiness_1 _C208 1 table_happiness_1 _C209 1 table_happiness_1 _C210 1 table_happiness_1 _C211 1 table_happiness_1 _C212 1 table_happiness_1 _C213 1 table_happiness_1 _C214 1 table_happiness_1 _C215 1 table_happiness_1 _C216 1 table_happiness_1 _C217 1 table_happiness_1 _C218 1 table_happiness_1 _C219 1 table_happiness_1 _C220 1 table_happiness_1 _C221 1 table_happiness_1 _C222 1 table_happiness_1 _C223 1 table_happiness_1 _C224 1 table_happiness_1 _C225 1 table_happiness_1 _C226 1 table_happiness_1 _C227 1 table_happiness_1 _C228 1 table_happiness_1 _C229 1 table_happiness_1 _C230 1 table_happiness_1 _C231 1 table_happiness_1 _C232 1 table_happiness_1 _C233 1 table_happiness_1 _C234 1 table_happiness_1 _C235 1 table_happiness_1 _C236 1 table_happiness_1 _C237 1 table_happiness_1 _C238 1 table_happiness_1 _C239 1 table_happiness_1 _C240 1 table_happiness_2 OBJ 1 table_happiness_2 _C241 1 table_happiness_2 _C242 1 table_happiness_2 _C243 1 table_happiness_2 _C244 1 table_happiness_2 _C245 1 table_happiness_2 _C246 1 table_happiness_2 _C247 1 table_happiness_2 _C248 1 table_happiness_2 _C249 1 table_happiness_2 _C250 1 table_happiness_2 _C251 1 table_happiness_2 _C252 1 table_happiness_2 _C253 1 table_happiness_2 _C254 1 table_happiness_2 _C255 1 table_happiness_2 _C256 1 table_happiness_2 _C257 1 table_happiness_2 _C258 1 table_happiness_2 _C259 1 table_happiness_2 _C260 1 table_happiness_2 _C261 1 table_happiness_2 _C262 1 table_happiness_2 _C263 1 table_happiness_2 _C264 1 table_happiness_2 _C265 1 table_happiness_2 _C266 1 table_happiness_2 _C267 1 table_happiness_2 _C268 1 table_happiness_2 _C269 1 table_happiness_2 _C270 1 table_happiness_2 _C271 1 table_happiness_2 _C272 1 table_happiness_2 _C273 1 table_happiness_2 _C274 1 table_happiness_2 _C275 1 table_happiness_2 _C276 1 table_happiness_2 _C277 1 table_happiness_2 _C278 1 table_happiness_2 _C279 1 table_happiness_2 _C280 1 table_happiness_2 _C281 1 table_happiness_2 _C282 1 table_happiness_2 _C283 1 table_happiness_2 _C284 1 table_happiness_2 _C285 1 table_happiness_2 _C286 1 table_happiness_2 _C287 1 table_happiness_2 _C288 1 table_happiness_2 _C289 1 table_happiness_2 _C290 1 table_happiness_2 _C291 1 table_happiness_2 _C292 1 table_happiness_2 _C293 1 table_happiness_2 _C294 1 table_happiness_2 _C295 1 table_happiness_2 _C296 1 table_happiness_2 _C297 1 table_happiness_2 _C298 1 table_happiness_2 _C299 1 table_happiness_2 _C300 1 table_happiness_2 _C301 1 table_happiness_2 _C302 1 table_happiness_2 _C303 1 table_happiness_2 _C304 1 table_happiness_2 _C305 1 table_happiness_2 _C306 1 table_happiness_2 _C307 1 table_happiness_2 _C308 1 table_happiness_2 _C309 1 table_happiness_2 _C310 1 table_happiness_2 _C311 1 table_happiness_2 _C312 1 table_happiness_2 _C313 1 table_happiness_2 _C314 1 table_happiness_2 _C315 1 table_happiness_2 _C316 1 table_happiness_2 _C317 1 table_happiness_2 _C318 1 table_happiness_2 _C319 1 table_happiness_2 _C320 1 table_happiness_2 _C321 1 table_happiness_2 _C322 1 table_happiness_2 _C323 1 table_happiness_2 _C324 1 table_happiness_2 _C325 1 table_happiness_2 _C326 1 table_happiness_2 _C327 1 table_happiness_2 _C328 1 table_happiness_2 _C329 1 table_happiness_2 _C330 1 table_happiness_2 _C331 1 table_happiness_2 _C332 1 table_happiness_2 _C333 1 table_happiness_2 _C334 1 table_happiness_2 _C335 1 table_happiness_2 _C336 1 table_happiness_2 _C337 1 table_happiness_2 _C338 1 table_happiness_2 _C339 1 table_happiness_2 _C340 1 table_happiness_2 _C341 1 table_happiness_2 _C342 1 table_happiness_2 _C343 1 table_happiness_2 _C344 1 table_happiness_2 _C345 1 table_happiness_2 _C346 1 table_happiness_2 _C347 1 table_happiness_2 _C348 1 table_happiness_2 _C349 1 table_happiness_2 _C350 1 table_happiness_2 _C351 1 table_happiness_2 _C352 1 table_happiness_2 _C353 1 table_happiness_2 _C354 1 table_happiness_2 _C355 1 table_happiness_2 _C356 1 table_happiness_2 _C357 1 table_happiness_2 _C358 1 table_happiness_2 _C359 1 table_happiness_2 _C360 1 table_happiness_3 OBJ 1 table_happiness_3 _C361 1 table_happiness_3 _C362 1 table_happiness_3 _C363 1 table_happiness_3 _C364 1 table_happiness_3 _C365 1 table_happiness_3 _C366 1 table_happiness_3 _C367 1 table_happiness_3 _C368 1 table_happiness_3 _C369 1 table_happiness_3 _C370 1 table_happiness_3 _C371 1 table_happiness_3 _C372 1 table_happiness_3 _C373 1 table_happiness_3 _C374 1 table_happiness_3 _C375 1 table_happiness_3 _C376 1 table_happiness_3 _C377 1 table_happiness_3 _C378 1 table_happiness_3 _C379 1 table_happiness_3 _C380 1 table_happiness_3 _C381 1 table_happiness_3 _C382 1 table_happiness_3 _C383 1 table_happiness_3 _C384 1 table_happiness_3 _C385 1 table_happiness_3 _C386 1 table_happiness_3 _C387 1 table_happiness_3 _C388 1 table_happiness_3 _C389 1 table_happiness_3 _C390 1 table_happiness_3 _C391 1 table_happiness_3 _C392 1 table_happiness_3 _C393 1 table_happiness_3 _C394 1 table_happiness_3 _C395 1 table_happiness_3 _C396 1 table_happiness_3 _C397 1 table_happiness_3 _C398 1 table_happiness_3 _C399 1 table_happiness_3 _C400 1 table_happiness_3 _C401 1 table_happiness_3 _C402 1 table_happiness_3 _C403 1 table_happiness_3 _C404 1 table_happiness_3 _C405 1 table_happiness_3 _C406 1 table_happiness_3 _C407 1 table_happiness_3 _C408 1 table_happiness_3 _C409 1 table_happiness_3 _C410 1 table_happiness_3 _C411 1 table_happiness_3 _C412 1 table_happiness_3 _C413 1 table_happiness_3 _C414 1 table_happiness_3 _C415 1 table_happiness_3 _C416 1 table_happiness_3 _C417 1 table_happiness_3 _C418 1 table_happiness_3 _C419 1 table_happiness_3 _C420 1 table_happiness_3 _C421 1 table_happiness_3 _C422 1 table_happiness_3 _C423 1 table_happiness_3 _C424 1 table_happiness_3 _C425 1 table_happiness_3 _C426 1 table_happiness_3 _C427 1 table_happiness_3 _C428 1 table_happiness_3 _C429 1 table_happiness_3 _C430 1 table_happiness_3 _C431 1 table_happiness_3 _C432 1 table_happiness_3 _C433 1 table_happiness_3 _C434 1 table_happiness_3 _C435 1 table_happiness_3 _C436 1 table_happiness_3 _C437 1 table_happiness_3 _C438 1 table_happiness_3 _C439 1 table_happiness_3 _C440 1 table_happiness_3 _C441 1 table_happiness_3 _C442 1 table_happiness_3 _C443 1 table_happiness_3 _C444 1 table_happiness_3 _C445 1 table_happiness_3 _C446 1 table_happiness_3 _C447 1 table_happiness_3 _C448 1 table_happiness_3 _C449 1 table_happiness_3 _C450 1 table_happiness_3 _C451 1 table_happiness_3 _C452 1 table_happiness_3 _C453 1 table_happiness_3 _C454 1 table_happiness_3 _C455 1 table_happiness_3 _C456 1 table_happiness_3 _C457 1 table_happiness_3 _C458 1 table_happiness_3 _C459 1 table_happiness_3 _C460 1 table_happiness_3 _C461 1 table_happiness_3 _C462 1 table_happiness_3 _C463 1 table_happiness_3 _C464 1 table_happiness_3 _C465 1 table_happiness_3 _C466 1 table_happiness_3 _C467 1 table_happiness_3 _C468 1 table_happiness_3 _C469 1 table_happiness_3 _C470 1 table_happiness_3 _C471 1 table_happiness_3 _C472 1 table_happiness_3 _C473 1 table_happiness_3 _C474 1 table_happiness_3 _C475 1 table_happiness_3 _C476 1 table_happiness_3 _C477 1 table_happiness_3 _C478 1 table_happiness_3 _C479 1 table_happiness_3 _C480 1 table_happiness_4 OBJ 1 table_happiness_4 _C481 1 table_happiness_4 _C482 1 table_happiness_4 _C483 1 table_happiness_4 _C484 1 table_happiness_4 _C485 1 table_happiness_4 _C486 1 table_happiness_4 _C487 1 table_happiness_4 _C488 1 table_happiness_4 _C489 1 table_happiness_4 _C490 1 table_happiness_4 _C491 1 table_happiness_4 _C492 1 table_happiness_4 _C493 1 table_happiness_4 _C494 1 table_happiness_4 _C495 1 table_happiness_4 _C496 1 table_happiness_4 _C497 1 table_happiness_4 _C498 1 table_happiness_4 _C499 1 table_happiness_4 _C500 1 table_happiness_4 _C501 1 table_happiness_4 _C502 1 table_happiness_4 _C503 1 table_happiness_4 _C504 1 table_happiness_4 _C505 1 table_happiness_4 _C506 1 table_happiness_4 _C507 1 table_happiness_4 _C508 1 table_happiness_4 _C509 1 table_happiness_4 _C510 1 table_happiness_4 _C511 1 table_happiness_4 _C512 1 table_happiness_4 _C513 1 table_happiness_4 _C514 1 table_happiness_4 _C515 1 table_happiness_4 _C516 1 table_happiness_4 _C517 1 table_happiness_4 _C518 1 table_happiness_4 _C519 1 table_happiness_4 _C520 1 table_happiness_4 _C521 1 table_happiness_4 _C522 1 table_happiness_4 _C523 1 table_happiness_4 _C524 1 table_happiness_4 _C525 1 table_happiness_4 _C526 1 table_happiness_4 _C527 1 table_happiness_4 _C528 1 table_happiness_4 _C529 1 table_happiness_4 _C530 1 table_happiness_4 _C531 1 table_happiness_4 _C532 1 table_happiness_4 _C533 1 table_happiness_4 _C534 1 table_happiness_4 _C535 1 table_happiness_4 _C536 1 table_happiness_4 _C537 1 table_happiness_4 _C538 1 table_happiness_4 _C539 1 table_happiness_4 _C540 1 table_happiness_4 _C541 1 table_happiness_4 _C542 1 table_happiness_4 _C543 1 table_happiness_4 _C544 1 table_happiness_4 _C545 1 table_happiness_4 _C546 1 table_happiness_4 _C547 1 table_happiness_4 _C548 1 table_happiness_4 _C549 1 table_happiness_4 _C550 1 table_happiness_4 _C551 1 table_happiness_4 _C552 1 table_happiness_4 _C553 1 table_happiness_4 _C554 1 table_happiness_4 _C555 1 table_happiness_4 _C556 1 table_happiness_4 _C557 1 table_happiness_4 _C558 1 table_happiness_4 _C559 1 table_happiness_4 _C560 1 table_happiness_4 _C561 1 table_happiness_4 _C562 1 table_happiness_4 _C563 1 table_happiness_4 _C564 1 table_happiness_4 _C565 1 table_happiness_4 _C566 1 table_happiness_4 _C567 1 table_happiness_4 _C568 1 table_happiness_4 _C569 1 table_happiness_4 _C570 1 table_happiness_4 _C571 1 table_happiness_4 _C572 1 table_happiness_4 _C573 1 table_happiness_4 _C574 1 table_happiness_4 _C575 1 table_happiness_4 _C576 1 table_happiness_4 _C577 1 table_happiness_4 _C578 1 table_happiness_4 _C579 1 table_happiness_4 _C580 1 table_happiness_4 _C581 1 table_happiness_4 _C582 1 table_happiness_4 _C583 1 table_happiness_4 _C584 1 table_happiness_4 _C585 1 table_happiness_4 _C586 1 table_happiness_4 _C587 1 table_happiness_4 _C588 1 table_happiness_4 _C589 1 table_happiness_4 _C590 1 table_happiness_4 _C591 1 table_happiness_4 _C592 1 table_happiness_4 _C593 1 table_happiness_4 _C594 1 table_happiness_4 _C595 1 table_happiness_4 _C596 1 table_happiness_4 _C597 1 table_happiness_4 _C598 1 table_happiness_4 _C599 1 table_happiness_4 _C600 1 MARK0000 'MARKER' 'INTORG' possible_seatings_('A',_0) Maximum_table_size_0 1 possible_seatings_('A',_0) Must_seat_A 1 possible_seatings_('A',_0) _C1 -1 possible_seatings_('A',_0) _C10 -10 possible_seatings_('A',_0) _C11 -11 possible_seatings_('A',_0) _C12 -12 possible_seatings_('A',_0) _C13 -13 possible_seatings_('A',_0) _C14 -14 possible_seatings_('A',_0) _C15 -15 possible_seatings_('A',_0) _C2 -2 possible_seatings_('A',_0) _C3 -3 possible_seatings_('A',_0) _C4 -4 possible_seatings_('A',_0) _C5 -5 possible_seatings_('A',_0) _C6 -6 possible_seatings_('A',_0) _C7 -7 possible_seatings_('A',_0) _C8 -8 possible_seatings_('A',_0) _C9 -9 possible_seatings_('B',_0) Maximum_table_size_0 1 possible_seatings_('B',_0) Must_seat_B 1 possible_seatings_('B',_0) _C1 -1 possible_seatings_('B',_0) _C16 -1 possible_seatings_('B',_0) _C17 -2 possible_seatings_('B',_0) _C18 -3 possible_seatings_('B',_0) _C19 -4 possible_seatings_('B',_0) _C20 -5 possible_seatings_('B',_0) _C21 -6 possible_seatings_('B',_0) _C22 -7 possible_seatings_('B',_0) _C23 -8 possible_seatings_('B',_0) _C24 -9 possible_seatings_('B',_0) _C25 -10 possible_seatings_('B',_0) _C26 -11 possible_seatings_('B',_0) _C27 -12 possible_seatings_('B',_0) _C28 -13 possible_seatings_('B',_0) _C29 -14 possible_seatings_('C',_0) Maximum_table_size_0 1 possible_seatings_('C',_0) Must_seat_C 1 possible_seatings_('C',_0) _C16 -1 possible_seatings_('C',_0) _C2 -2 possible_seatings_('C',_0) _C30 -1 possible_seatings_('C',_0) _C31 -2 possible_seatings_('C',_0) _C32 -3 possible_seatings_('C',_0) _C33 -4 possible_seatings_('C',_0) _C34 -5 possible_seatings_('C',_0) _C35 -6 possible_seatings_('C',_0) _C36 -7 possible_seatings_('C',_0) _C37 -8 possible_seatings_('C',_0) _C38 -9 possible_seatings_('C',_0) _C39 -10 possible_seatings_('C',_0) _C40 -11 possible_seatings_('C',_0) _C41 -12 possible_seatings_('C',_0) _C42 -13 possible_seatings_('D',_0) Maximum_table_size_0 1 possible_seatings_('D',_0) Must_seat_D 1 possible_seatings_('D',_0) _C17 -2 possible_seatings_('D',_0) _C3 -3 possible_seatings_('D',_0) _C30 -1 possible_seatings_('D',_0) _C43 -1 possible_seatings_('D',_0) _C44 -2 possible_seatings_('D',_0) _C45 -3 possible_seatings_('D',_0) _C46 -4 possible_seatings_('D',_0) _C47 -5 possible_seatings_('D',_0) _C48 -6 possible_seatings_('D',_0) _C49 -7 possible_seatings_('D',_0) _C50 -8 possible_seatings_('D',_0) _C51 -9 possible_seatings_('D',_0) _C52 -10 possible_seatings_('D',_0) _C53 -11 possible_seatings_('D',_0) _C54 -12 possible_seatings_('E',_0) Maximum_table_size_0 1 possible_seatings_('E',_0) Must_seat_E 1 possible_seatings_('E',_0) _C18 -3 possible_seatings_('E',_0) _C31 -2 possible_seatings_('E',_0) _C4 -4 possible_seatings_('E',_0) _C43 -1 possible_seatings_('E',_0) _C55 -1 possible_seatings_('E',_0) _C56 -2 possible_seatings_('E',_0) _C57 -3 possible_seatings_('E',_0) _C58 -4 possible_seatings_('E',_0) _C59 -5 possible_seatings_('E',_0) _C60 -6 possible_seatings_('E',_0) _C61 -7 possible_seatings_('E',_0) _C62 -8 possible_seatings_('E',_0) _C63 -9 possible_seatings_('E',_0) _C64 -10 possible_seatings_('E',_0) _C65 -11 possible_seatings_('F',_0) Maximum_table_size_0 1 possible_seatings_('F',_0) Must_seat_F 1 possible_seatings_('F',_0) _C19 -4 possible_seatings_('F',_0) _C32 -3 possible_seatings_('F',_0) _C44 -2 possible_seatings_('F',_0) _C5 -5 possible_seatings_('F',_0) _C55 -1 possible_seatings_('F',_0) _C66 -1 possible_seatings_('F',_0) _C67 -2 possible_seatings_('F',_0) _C68 -3 possible_seatings_('F',_0) _C69 -4 possible_seatings_('F',_0) _C70 -5 possible_seatings_('F',_0) _C71 -6 possible_seatings_('F',_0) _C72 -7 possible_seatings_('F',_0) _C73 -8 possible_seatings_('F',_0) _C74 -9 possible_seatings_('F',_0) _C75 -10 possible_seatings_('G',_0) Maximum_table_size_0 1 possible_seatings_('G',_0) Must_seat_G 1 possible_seatings_('G',_0) _C20 -5 possible_seatings_('G',_0) _C33 -4 possible_seatings_('G',_0) _C45 -3 possible_seatings_('G',_0) _C56 -2 possible_seatings_('G',_0) _C6 -6 possible_seatings_('G',_0) _C66 -1 possible_seatings_('G',_0) _C76 -1 possible_seatings_('G',_0) _C77 -2 possible_seatings_('G',_0) _C78 -3 possible_seatings_('G',_0) _C79 -4 possible_seatings_('G',_0) _C80 -5 possible_seatings_('G',_0) _C81 -6 possible_seatings_('G',_0) _C82 -7 possible_seatings_('G',_0) _C83 -8 possible_seatings_('G',_0) _C84 -9 possible_seatings_('H',_0) Maximum_table_size_0 1 possible_seatings_('H',_0) Must_seat_H 1 possible_seatings_('H',_0) _C21 -6 possible_seatings_('H',_0) _C34 -5 possible_seatings_('H',_0) _C46 -4 possible_seatings_('H',_0) _C57 -3 possible_seatings_('H',_0) _C67 -2 possible_seatings_('H',_0) _C7 -7 possible_seatings_('H',_0) _C76 -1 possible_seatings_('H',_0) _C85 -1 possible_seatings_('H',_0) _C86 -2 possible_seatings_('H',_0) _C87 -3 possible_seatings_('H',_0) _C88 -4 possible_seatings_('H',_0) _C89 -5 possible_seatings_('H',_0) _C90 -6 possible_seatings_('H',_0) _C91 -7 possible_seatings_('H',_0) _C92 -8 possible_seatings_('I',_0) Maximum_table_size_0 1 possible_seatings_('I',_0) Must_seat_I 1 possible_seatings_('I',_0) _C22 -7 possible_seatings_('I',_0) _C35 -6 possible_seatings_('I',_0) _C47 -5 possible_seatings_('I',_0) _C58 -4 possible_seatings_('I',_0) _C68 -3 possible_seatings_('I',_0) _C77 -2 possible_seatings_('I',_0) _C8 -8 possible_seatings_('I',_0) _C85 -1 possible_seatings_('I',_0) _C93 -1 possible_seatings_('I',_0) _C94 -2 possible_seatings_('I',_0) _C95 -3 possible_seatings_('I',_0) _C96 -4 possible_seatings_('I',_0) _C97 -5 possible_seatings_('I',_0) _C98 -6 possible_seatings_('I',_0) _C99 -7 possible_seatings_('J',_0) Maximum_table_size_0 1 possible_seatings_('J',_0) Must_seat_J 1 possible_seatings_('J',_0) _C100 -1 possible_seatings_('J',_0) _C101 -2 possible_seatings_('J',_0) _C102 -3 possible_seatings_('J',_0) _C103 -4 possible_seatings_('J',_0) _C104 -5 possible_seatings_('J',_0) _C105 -6 possible_seatings_('J',_0) _C23 -8 possible_seatings_('J',_0) _C36 -7 possible_seatings_('J',_0) _C48 -6 possible_seatings_('J',_0) _C59 -5 possible_seatings_('J',_0) _C69 -4 possible_seatings_('J',_0) _C78 -3 possible_seatings_('J',_0) _C86 -2 possible_seatings_('J',_0) _C9 -9 possible_seatings_('J',_0) _C93 -1 possible_seatings_('K',_0) Maximum_table_size_0 1 possible_seatings_('K',_0) Must_seat_K 1 possible_seatings_('K',_0) _C10 -10 possible_seatings_('K',_0) _C100 -1 possible_seatings_('K',_0) _C106 -1 possible_seatings_('K',_0) _C107 -2 possible_seatings_('K',_0) _C108 -3 possible_seatings_('K',_0) _C109 -4 possible_seatings_('K',_0) _C110 -5 possible_seatings_('K',_0) _C24 -9 possible_seatings_('K',_0) _C37 -8 possible_seatings_('K',_0) _C49 -7 possible_seatings_('K',_0) _C60 -6 possible_seatings_('K',_0) _C70 -5 possible_seatings_('K',_0) _C79 -4 possible_seatings_('K',_0) _C87 -3 possible_seatings_('K',_0) _C94 -2 possible_seatings_('L',_0) Maximum_table_size_0 1 possible_seatings_('L',_0) Must_seat_L 1 possible_seatings_('L',_0) _C101 -2 possible_seatings_('L',_0) _C106 -1 possible_seatings_('L',_0) _C11 -11 possible_seatings_('L',_0) _C111 -1 possible_seatings_('L',_0) _C112 -2 possible_seatings_('L',_0) _C113 -3 possible_seatings_('L',_0) _C114 -4 possible_seatings_('L',_0) _C25 -10 possible_seatings_('L',_0) _C38 -9 possible_seatings_('L',_0) _C50 -8 possible_seatings_('L',_0) _C61 -7 possible_seatings_('L',_0) _C71 -6 possible_seatings_('L',_0) _C80 -5 possible_seatings_('L',_0) _C88 -4 possible_seatings_('L',_0) _C95 -3 possible_seatings_('M',_0) Maximum_table_size_0 1 possible_seatings_('M',_0) Must_seat_M 1 possible_seatings_('M',_0) _C102 -3 possible_seatings_('M',_0) _C107 -2 possible_seatings_('M',_0) _C111 -1 possible_seatings_('M',_0) _C115 -1 possible_seatings_('M',_0) _C116 -2 possible_seatings_('M',_0) _C117 -3 possible_seatings_('M',_0) _C12 -12 possible_seatings_('M',_0) _C26 -11 possible_seatings_('M',_0) _C39 -10 possible_seatings_('M',_0) _C51 -9 possible_seatings_('M',_0) _C62 -8 possible_seatings_('M',_0) _C72 -7 possible_seatings_('M',_0) _C81 -6 possible_seatings_('M',_0) _C89 -5 possible_seatings_('M',_0) _C96 -4 possible_seatings_('N',_0) Maximum_table_size_0 1 possible_seatings_('N',_0) Must_seat_N 1 possible_seatings_('N',_0) _C103 -4 possible_seatings_('N',_0) _C108 -3 possible_seatings_('N',_0) _C112 -2 possible_seatings_('N',_0) _C115 -1 possible_seatings_('N',_0) _C118 -1 possible_seatings_('N',_0) _C119 -2 possible_seatings_('N',_0) _C13 -13 possible_seatings_('N',_0) _C27 -12 possible_seatings_('N',_0) _C40 -11 possible_seatings_('N',_0) _C52 -10 possible_seatings_('N',_0) _C63 -9 possible_seatings_('N',_0) _C73 -8 possible_seatings_('N',_0) _C82 -7 possible_seatings_('N',_0) _C90 -6 possible_seatings_('N',_0) _C97 -5 possible_seatings_('O',_0) Maximum_table_size_0 1 possible_seatings_('O',_0) Must_seat_O 1 possible_seatings_('O',_0) _C104 -5 possible_seatings_('O',_0) _C109 -4 possible_seatings_('O',_0) _C113 -3 possible_seatings_('O',_0) _C116 -2 possible_seatings_('O',_0) _C118 -1 possible_seatings_('O',_0) _C120 -1 possible_seatings_('O',_0) _C14 -14 possible_seatings_('O',_0) _C28 -13 possible_seatings_('O',_0) _C41 -12 possible_seatings_('O',_0) _C53 -11 possible_seatings_('O',_0) _C64 -10 possible_seatings_('O',_0) _C74 -9 possible_seatings_('O',_0) _C83 -8 possible_seatings_('O',_0) _C91 -7 possible_seatings_('O',_0) _C98 -6 possible_seatings_('P',_0) Maximum_table_size_0 1 possible_seatings_('P',_0) Must_seat_P 1 possible_seatings_('P',_0) _C105 -6 possible_seatings_('P',_0) _C110 -5 possible_seatings_('P',_0) _C114 -4 possible_seatings_('P',_0) _C117 -3 possible_seatings_('P',_0) _C119 -2 possible_seatings_('P',_0) _C120 -1 possible_seatings_('P',_0) _C15 -15 possible_seatings_('P',_0) _C29 -14 possible_seatings_('P',_0) _C42 -13 possible_seatings_('P',_0) _C54 -12 possible_seatings_('P',_0) _C65 -11 possible_seatings_('P',_0) _C75 -10 possible_seatings_('P',_0) _C84 -9 possible_seatings_('P',_0) _C92 -8 possible_seatings_('P',_0) _C99 -7 possible_seatings_('A',_1) Maximum_table_size_1 1 possible_seatings_('A',_1) Must_seat_A 1 possible_seatings_('A',_1) _C121 -1 possible_seatings_('A',_1) _C122 -2 possible_seatings_('A',_1) _C123 -3 possible_seatings_('A',_1) _C124 -4 possible_seatings_('A',_1) _C125 -5 possible_seatings_('A',_1) _C126 -6 possible_seatings_('A',_1) _C127 -7 possible_seatings_('A',_1) _C128 -8 possible_seatings_('A',_1) _C129 -9 possible_seatings_('A',_1) _C130 -10 possible_seatings_('A',_1) _C131 -11 possible_seatings_('A',_1) _C132 -12 possible_seatings_('A',_1) _C133 -13 possible_seatings_('A',_1) _C134 -14 possible_seatings_('A',_1) _C135 -15 possible_seatings_('B',_1) Maximum_table_size_1 1 possible_seatings_('B',_1) Must_seat_B 1 possible_seatings_('B',_1) _C121 -1 possible_seatings_('B',_1) _C136 -1 possible_seatings_('B',_1) _C137 -2 possible_seatings_('B',_1) _C138 -3 possible_seatings_('B',_1) _C139 -4 possible_seatings_('B',_1) _C140 -5 possible_seatings_('B',_1) _C141 -6 possible_seatings_('B',_1) _C142 -7 possible_seatings_('B',_1) _C143 -8 possible_seatings_('B',_1) _C144 -9 possible_seatings_('B',_1) _C145 -10 possible_seatings_('B',_1) _C146 -11 possible_seatings_('B',_1) _C147 -12 possible_seatings_('B',_1) _C148 -13 possible_seatings_('B',_1) _C149 -14 possible_seatings_('C',_1) Maximum_table_size_1 1 possible_seatings_('C',_1) Must_seat_C 1 possible_seatings_('C',_1) _C122 -2 possible_seatings_('C',_1) _C136 -1 possible_seatings_('C',_1) _C150 -1 possible_seatings_('C',_1) _C151 -2 possible_seatings_('C',_1) _C152 -3 possible_seatings_('C',_1) _C153 -4 possible_seatings_('C',_1) _C154 -5 possible_seatings_('C',_1) _C155 -6 possible_seatings_('C',_1) _C156 -7 possible_seatings_('C',_1) _C157 -8 possible_seatings_('C',_1) _C158 -9 possible_seatings_('C',_1) _C159 -10 possible_seatings_('C',_1) _C160 -11 possible_seatings_('C',_1) _C161 -12 possible_seatings_('C',_1) _C162 -13 possible_seatings_('D',_1) Maximum_table_size_1 1 possible_seatings_('D',_1) Must_seat_D 1 possible_seatings_('D',_1) _C123 -3 possible_seatings_('D',_1) _C137 -2 possible_seatings_('D',_1) _C150 -1 possible_seatings_('D',_1) _C163 -1 possible_seatings_('D',_1) _C164 -2 possible_seatings_('D',_1) _C165 -3 possible_seatings_('D',_1) _C166 -4 possible_seatings_('D',_1) _C167 -5 possible_seatings_('D',_1) _C168 -6 possible_seatings_('D',_1) _C169 -7 possible_seatings_('D',_1) _C170 -8 possible_seatings_('D',_1) _C171 -9 possible_seatings_('D',_1) _C172 -10 possible_seatings_('D',_1) _C173 -11 possible_seatings_('D',_1) _C174 -12 possible_seatings_('E',_1) Maximum_table_size_1 1 possible_seatings_('E',_1) Must_seat_E 1 possible_seatings_('E',_1) _C124 -4 possible_seatings_('E',_1) _C138 -3 possible_seatings_('E',_1) _C151 -2 possible_seatings_('E',_1) _C163 -1 possible_seatings_('E',_1) _C175 -1 possible_seatings_('E',_1) _C176 -2 possible_seatings_('E',_1) _C177 -3 possible_seatings_('E',_1) _C178 -4 possible_seatings_('E',_1) _C179 -5 possible_seatings_('E',_1) _C180 -6 possible_seatings_('E',_1) _C181 -7 possible_seatings_('E',_1) _C182 -8 possible_seatings_('E',_1) _C183 -9 possible_seatings_('E',_1) _C184 -10 possible_seatings_('E',_1) _C185 -11 possible_seatings_('F',_1) Maximum_table_size_1 1 possible_seatings_('F',_1) Must_seat_F 1 possible_seatings_('F',_1) _C125 -5 possible_seatings_('F',_1) _C139 -4 possible_seatings_('F',_1) _C152 -3 possible_seatings_('F',_1) _C164 -2 possible_seatings_('F',_1) _C175 -1 possible_seatings_('F',_1) _C186 -1 possible_seatings_('F',_1) _C187 -2 possible_seatings_('F',_1) _C188 -3 possible_seatings_('F',_1) _C189 -4 possible_seatings_('F',_1) _C190 -5 possible_seatings_('F',_1) _C191 -6 possible_seatings_('F',_1) _C192 -7 possible_seatings_('F',_1) _C193 -8 possible_seatings_('F',_1) _C194 -9 possible_seatings_('F',_1) _C195 -10 possible_seatings_('G',_1) Maximum_table_size_1 1 possible_seatings_('G',_1) Must_seat_G 1 possible_seatings_('G',_1) _C126 -6 possible_seatings_('G',_1) _C140 -5 possible_seatings_('G',_1) _C153 -4 possible_seatings_('G',_1) _C165 -3 possible_seatings_('G',_1) _C176 -2 possible_seatings_('G',_1) _C186 -1 possible_seatings_('G',_1) _C196 -1 possible_seatings_('G',_1) _C197 -2 possible_seatings_('G',_1) _C198 -3 possible_seatings_('G',_1) _C199 -4 possible_seatings_('G',_1) _C200 -5 possible_seatings_('G',_1) _C201 -6 possible_seatings_('G',_1) _C202 -7 possible_seatings_('G',_1) _C203 -8 possible_seatings_('G',_1) _C204 -9 possible_seatings_('H',_1) Maximum_table_size_1 1 possible_seatings_('H',_1) Must_seat_H 1 possible_seatings_('H',_1) _C127 -7 possible_seatings_('H',_1) _C141 -6 possible_seatings_('H',_1) _C154 -5 possible_seatings_('H',_1) _C166 -4 possible_seatings_('H',_1) _C177 -3 possible_seatings_('H',_1) _C187 -2 possible_seatings_('H',_1) _C196 -1 possible_seatings_('H',_1) _C205 -1 possible_seatings_('H',_1) _C206 -2 possible_seatings_('H',_1) _C207 -3 possible_seatings_('H',_1) _C208 -4 possible_seatings_('H',_1) _C209 -5 possible_seatings_('H',_1) _C210 -6 possible_seatings_('H',_1) _C211 -7 possible_seatings_('H',_1) _C212 -8 possible_seatings_('I',_1) Maximum_table_size_1 1 possible_seatings_('I',_1) Must_seat_I 1 possible_seatings_('I',_1) _C128 -8 possible_seatings_('I',_1) _C142 -7 possible_seatings_('I',_1) _C155 -6 possible_seatings_('I',_1) _C167 -5 possible_seatings_('I',_1) _C178 -4 possible_seatings_('I',_1) _C188 -3 possible_seatings_('I',_1) _C197 -2 possible_seatings_('I',_1) _C205 -1 possible_seatings_('I',_1) _C213 -1 possible_seatings_('I',_1) _C214 -2 possible_seatings_('I',_1) _C215 -3 possible_seatings_('I',_1) _C216 -4 possible_seatings_('I',_1) _C217 -5 possible_seatings_('I',_1) _C218 -6 possible_seatings_('I',_1) _C219 -7 possible_seatings_('J',_1) Maximum_table_size_1 1 possible_seatings_('J',_1) Must_seat_J 1 possible_seatings_('J',_1) _C129 -9 possible_seatings_('J',_1) _C143 -8 possible_seatings_('J',_1) _C156 -7 possible_seatings_('J',_1) _C168 -6 possible_seatings_('J',_1) _C179 -5 possible_seatings_('J',_1) _C189 -4 possible_seatings_('J',_1) _C198 -3 possible_seatings_('J',_1) _C206 -2 possible_seatings_('J',_1) _C213 -1 possible_seatings_('J',_1) _C220 -1 possible_seatings_('J',_1) _C221 -2 possible_seatings_('J',_1) _C222 -3 possible_seatings_('J',_1) _C223 -4 possible_seatings_('J',_1) _C224 -5 possible_seatings_('J',_1) _C225 -6 possible_seatings_('K',_1) Maximum_table_size_1 1 possible_seatings_('K',_1) Must_seat_K 1 possible_seatings_('K',_1) _C130 -10 possible_seatings_('K',_1) _C144 -9 possible_seatings_('K',_1) _C157 -8 possible_seatings_('K',_1) _C169 -7 possible_seatings_('K',_1) _C180 -6 possible_seatings_('K',_1) _C190 -5 possible_seatings_('K',_1) _C199 -4 possible_seatings_('K',_1) _C207 -3 possible_seatings_('K',_1) _C214 -2 possible_seatings_('K',_1) _C220 -1 possible_seatings_('K',_1) _C226 -1 possible_seatings_('K',_1) _C227 -2 possible_seatings_('K',_1) _C228 -3 possible_seatings_('K',_1) _C229 -4 possible_seatings_('K',_1) _C230 -5 possible_seatings_('L',_1) Maximum_table_size_1 1 possible_seatings_('L',_1) Must_seat_L 1 possible_seatings_('L',_1) _C131 -11 possible_seatings_('L',_1) _C145 -10 possible_seatings_('L',_1) _C158 -9 possible_seatings_('L',_1) _C170 -8 possible_seatings_('L',_1) _C181 -7 possible_seatings_('L',_1) _C191 -6 possible_seatings_('L',_1) _C200 -5 possible_seatings_('L',_1) _C208 -4 possible_seatings_('L',_1) _C215 -3 possible_seatings_('L',_1) _C221 -2 possible_seatings_('L',_1) _C226 -1 possible_seatings_('L',_1) _C231 -1 possible_seatings_('L',_1) _C232 -2 possible_seatings_('L',_1) _C233 -3 possible_seatings_('L',_1) _C234 -4 possible_seatings_('M',_1) Maximum_table_size_1 1 possible_seatings_('M',_1) Must_seat_M 1 possible_seatings_('M',_1) _C132 -12 possible_seatings_('M',_1) _C146 -11 possible_seatings_('M',_1) _C159 -10 possible_seatings_('M',_1) _C171 -9 possible_seatings_('M',_1) _C182 -8 possible_seatings_('M',_1) _C192 -7 possible_seatings_('M',_1) _C201 -6 possible_seatings_('M',_1) _C209 -5 possible_seatings_('M',_1) _C216 -4 possible_seatings_('M',_1) _C222 -3 possible_seatings_('M',_1) _C227 -2 possible_seatings_('M',_1) _C231 -1 possible_seatings_('M',_1) _C235 -1 possible_seatings_('M',_1) _C236 -2 possible_seatings_('M',_1) _C237 -3 possible_seatings_('N',_1) Maximum_table_size_1 1 possible_seatings_('N',_1) Must_seat_N 1 possible_seatings_('N',_1) _C133 -13 possible_seatings_('N',_1) _C147 -12 possible_seatings_('N',_1) _C160 -11 possible_seatings_('N',_1) _C172 -10 possible_seatings_('N',_1) _C183 -9 possible_seatings_('N',_1) _C193 -8 possible_seatings_('N',_1) _C202 -7 possible_seatings_('N',_1) _C210 -6 possible_seatings_('N',_1) _C217 -5 possible_seatings_('N',_1) _C223 -4 possible_seatings_('N',_1) _C228 -3 possible_seatings_('N',_1) _C232 -2 possible_seatings_('N',_1) _C235 -1 possible_seatings_('N',_1) _C238 -1 possible_seatings_('N',_1) _C239 -2 possible_seatings_('O',_1) Maximum_table_size_1 1 possible_seatings_('O',_1) Must_seat_O 1 possible_seatings_('O',_1) _C134 -14 possible_seatings_('O',_1) _C148 -13 possible_seatings_('O',_1) _C161 -12 possible_seatings_('O',_1) _C173 -11 possible_seatings_('O',_1) _C184 -10 possible_seatings_('O',_1) _C194 -9 possible_seatings_('O',_1) _C203 -8 possible_seatings_('O',_1) _C211 -7 possible_seatings_('O',_1) _C218 -6 possible_seatings_('O',_1) _C224 -5 possible_seatings_('O',_1) _C229 -4 possible_seatings_('O',_1) _C233 -3 possible_seatings_('O',_1) _C236 -2 possible_seatings_('O',_1) _C238 -1 possible_seatings_('O',_1) _C240 -1 possible_seatings_('P',_1) Maximum_table_size_1 1 possible_seatings_('P',_1) Must_seat_P 1 possible_seatings_('P',_1) _C135 -15 possible_seatings_('P',_1) _C149 -14 possible_seatings_('P',_1) _C162 -13 possible_seatings_('P',_1) _C174 -12 possible_seatings_('P',_1) _C185 -11 possible_seatings_('P',_1) _C195 -10 possible_seatings_('P',_1) _C204 -9 possible_seatings_('P',_1) _C212 -8 possible_seatings_('P',_1) _C219 -7 possible_seatings_('P',_1) _C225 -6 possible_seatings_('P',_1) _C230 -5 possible_seatings_('P',_1) _C234 -4 possible_seatings_('P',_1) _C237 -3 possible_seatings_('P',_1) _C239 -2 possible_seatings_('P',_1) _C240 -1 possible_seatings_('A',_2) Maximum_table_size_2 1 possible_seatings_('A',_2) Must_seat_A 1 possible_seatings_('A',_2) _C241 -1 possible_seatings_('A',_2) _C242 -2 possible_seatings_('A',_2) _C243 -3 possible_seatings_('A',_2) _C244 -4 possible_seatings_('A',_2) _C245 -5 possible_seatings_('A',_2) _C246 -6 possible_seatings_('A',_2) _C247 -7 possible_seatings_('A',_2) _C248 -8 possible_seatings_('A',_2) _C249 -9 possible_seatings_('A',_2) _C250 -10 possible_seatings_('A',_2) _C251 -11 possible_seatings_('A',_2) _C252 -12 possible_seatings_('A',_2) _C253 -13 possible_seatings_('A',_2) _C254 -14 possible_seatings_('A',_2) _C255 -15 possible_seatings_('B',_2) Maximum_table_size_2 1 possible_seatings_('B',_2) Must_seat_B 1 possible_seatings_('B',_2) _C241 -1 possible_seatings_('B',_2) _C256 -1 possible_seatings_('B',_2) _C257 -2 possible_seatings_('B',_2) _C258 -3 possible_seatings_('B',_2) _C259 -4 possible_seatings_('B',_2) _C260 -5 possible_seatings_('B',_2) _C261 -6 possible_seatings_('B',_2) _C262 -7 possible_seatings_('B',_2) _C263 -8 possible_seatings_('B',_2) _C264 -9 possible_seatings_('B',_2) _C265 -10 possible_seatings_('B',_2) _C266 -11 possible_seatings_('B',_2) _C267 -12 possible_seatings_('B',_2) _C268 -13 possible_seatings_('B',_2) _C269 -14 possible_seatings_('C',_2) Maximum_table_size_2 1 possible_seatings_('C',_2) Must_seat_C 1 possible_seatings_('C',_2) _C242 -2 possible_seatings_('C',_2) _C256 -1 possible_seatings_('C',_2) _C270 -1 possible_seatings_('C',_2) _C271 -2 possible_seatings_('C',_2) _C272 -3 possible_seatings_('C',_2) _C273 -4 possible_seatings_('C',_2) _C274 -5 possible_seatings_('C',_2) _C275 -6 possible_seatings_('C',_2) _C276 -7 possible_seatings_('C',_2) _C277 -8 possible_seatings_('C',_2) _C278 -9 possible_seatings_('C',_2) _C279 -10 possible_seatings_('C',_2) _C280 -11 possible_seatings_('C',_2) _C281 -12 possible_seatings_('C',_2) _C282 -13 possible_seatings_('D',_2) Maximum_table_size_2 1 possible_seatings_('D',_2) Must_seat_D 1 possible_seatings_('D',_2) _C243 -3 possible_seatings_('D',_2) _C257 -2 possible_seatings_('D',_2) _C270 -1 possible_seatings_('D',_2) _C283 -1 possible_seatings_('D',_2) _C284 -2 possible_seatings_('D',_2) _C285 -3 possible_seatings_('D',_2) _C286 -4 possible_seatings_('D',_2) _C287 -5 possible_seatings_('D',_2) _C288 -6 possible_seatings_('D',_2) _C289 -7 possible_seatings_('D',_2) _C290 -8 possible_seatings_('D',_2) _C291 -9 possible_seatings_('D',_2) _C292 -10 possible_seatings_('D',_2) _C293 -11 possible_seatings_('D',_2) _C294 -12 possible_seatings_('E',_2) Maximum_table_size_2 1 possible_seatings_('E',_2) Must_seat_E 1 possible_seatings_('E',_2) _C244 -4 possible_seatings_('E',_2) _C258 -3 possible_seatings_('E',_2) _C271 -2 possible_seatings_('E',_2) _C283 -1 possible_seatings_('E',_2) _C295 -1 possible_seatings_('E',_2) _C296 -2 possible_seatings_('E',_2) _C297 -3 possible_seatings_('E',_2) _C298 -4 possible_seatings_('E',_2) _C299 -5 possible_seatings_('E',_2) _C300 -6 possible_seatings_('E',_2) _C301 -7 possible_seatings_('E',_2) _C302 -8 possible_seatings_('E',_2) _C303 -9 possible_seatings_('E',_2) _C304 -10 possible_seatings_('E',_2) _C305 -11 possible_seatings_('F',_2) Maximum_table_size_2 1 possible_seatings_('F',_2) Must_seat_F 1 possible_seatings_('F',_2) _C245 -5 possible_seatings_('F',_2) _C259 -4 possible_seatings_('F',_2) _C272 -3 possible_seatings_('F',_2) _C284 -2 possible_seatings_('F',_2) _C295 -1 possible_seatings_('F',_2) _C306 -1 possible_seatings_('F',_2) _C307 -2 possible_seatings_('F',_2) _C308 -3 possible_seatings_('F',_2) _C309 -4 possible_seatings_('F',_2) _C310 -5 possible_seatings_('F',_2) _C311 -6 possible_seatings_('F',_2) _C312 -7 possible_seatings_('F',_2) _C313 -8 possible_seatings_('F',_2) _C314 -9 possible_seatings_('F',_2) _C315 -10 possible_seatings_('G',_2) Maximum_table_size_2 1 possible_seatings_('G',_2) Must_seat_G 1 possible_seatings_('G',_2) _C246 -6 possible_seatings_('G',_2) _C260 -5 possible_seatings_('G',_2) _C273 -4 possible_seatings_('G',_2) _C285 -3 possible_seatings_('G',_2) _C296 -2 possible_seatings_('G',_2) _C306 -1 possible_seatings_('G',_2) _C316 -1 possible_seatings_('G',_2) _C317 -2 possible_seatings_('G',_2) _C318 -3 possible_seatings_('G',_2) _C319 -4 possible_seatings_('G',_2) _C320 -5 possible_seatings_('G',_2) _C321 -6 possible_seatings_('G',_2) _C322 -7 possible_seatings_('G',_2) _C323 -8 possible_seatings_('G',_2) _C324 -9 possible_seatings_('H',_2) Maximum_table_size_2 1 possible_seatings_('H',_2) Must_seat_H 1 possible_seatings_('H',_2) _C247 -7 possible_seatings_('H',_2) _C261 -6 possible_seatings_('H',_2) _C274 -5 possible_seatings_('H',_2) _C286 -4 possible_seatings_('H',_2) _C297 -3 possible_seatings_('H',_2) _C307 -2 possible_seatings_('H',_2) _C316 -1 possible_seatings_('H',_2) _C325 -1 possible_seatings_('H',_2) _C326 -2 possible_seatings_('H',_2) _C327 -3 possible_seatings_('H',_2) _C328 -4 possible_seatings_('H',_2) _C329 -5 possible_seatings_('H',_2) _C330 -6 possible_seatings_('H',_2) _C331 -7 possible_seatings_('H',_2) _C332 -8 possible_seatings_('I',_2) Maximum_table_size_2 1 possible_seatings_('I',_2) Must_seat_I 1 possible_seatings_('I',_2) _C248 -8 possible_seatings_('I',_2) _C262 -7 possible_seatings_('I',_2) _C275 -6 possible_seatings_('I',_2) _C287 -5 possible_seatings_('I',_2) _C298 -4 possible_seatings_('I',_2) _C308 -3 possible_seatings_('I',_2) _C317 -2 possible_seatings_('I',_2) _C325 -1 possible_seatings_('I',_2) _C333 -1 possible_seatings_('I',_2) _C334 -2 possible_seatings_('I',_2) _C335 -3 possible_seatings_('I',_2) _C336 -4 possible_seatings_('I',_2) _C337 -5 possible_seatings_('I',_2) _C338 -6 possible_seatings_('I',_2) _C339 -7 possible_seatings_('J',_2) Maximum_table_size_2 1 possible_seatings_('J',_2) Must_seat_J 1 possible_seatings_('J',_2) _C249 -9 possible_seatings_('J',_2) _C263 -8 possible_seatings_('J',_2) _C276 -7 possible_seatings_('J',_2) _C288 -6 possible_seatings_('J',_2) _C299 -5 possible_seatings_('J',_2) _C309 -4 possible_seatings_('J',_2) _C318 -3 possible_seatings_('J',_2) _C326 -2 possible_seatings_('J',_2) _C333 -1 possible_seatings_('J',_2) _C340 -1 possible_seatings_('J',_2) _C341 -2 possible_seatings_('J',_2) _C342 -3 possible_seatings_('J',_2) _C343 -4 possible_seatings_('J',_2) _C344 -5 possible_seatings_('J',_2) _C345 -6 possible_seatings_('K',_2) Maximum_table_size_2 1 possible_seatings_('K',_2) Must_seat_K 1 possible_seatings_('K',_2) _C250 -10 possible_seatings_('K',_2) _C264 -9 possible_seatings_('K',_2) _C277 -8 possible_seatings_('K',_2) _C289 -7 possible_seatings_('K',_2) _C300 -6 possible_seatings_('K',_2) _C310 -5 possible_seatings_('K',_2) _C319 -4 possible_seatings_('K',_2) _C327 -3 possible_seatings_('K',_2) _C334 -2 possible_seatings_('K',_2) _C340 -1 possible_seatings_('K',_2) _C346 -1 possible_seatings_('K',_2) _C347 -2 possible_seatings_('K',_2) _C348 -3 possible_seatings_('K',_2) _C349 -4 possible_seatings_('K',_2) _C350 -5 possible_seatings_('L',_2) Maximum_table_size_2 1 possible_seatings_('L',_2) Must_seat_L 1 possible_seatings_('L',_2) _C251 -11 possible_seatings_('L',_2) _C265 -10 possible_seatings_('L',_2) _C278 -9 possible_seatings_('L',_2) _C290 -8 possible_seatings_('L',_2) _C301 -7 possible_seatings_('L',_2) _C311 -6 possible_seatings_('L',_2) _C320 -5 possible_seatings_('L',_2) _C328 -4 possible_seatings_('L',_2) _C335 -3 possible_seatings_('L',_2) _C341 -2 possible_seatings_('L',_2) _C346 -1 possible_seatings_('L',_2) _C351 -1 possible_seatings_('L',_2) _C352 -2 possible_seatings_('L',_2) _C353 -3 possible_seatings_('L',_2) _C354 -4 possible_seatings_('M',_2) Maximum_table_size_2 1 possible_seatings_('M',_2) Must_seat_M 1 possible_seatings_('M',_2) _C252 -12 possible_seatings_('M',_2) _C266 -11 possible_seatings_('M',_2) _C279 -10 possible_seatings_('M',_2) _C291 -9 possible_seatings_('M',_2) _C302 -8 possible_seatings_('M',_2) _C312 -7 possible_seatings_('M',_2) _C321 -6 possible_seatings_('M',_2) _C329 -5 possible_seatings_('M',_2) _C336 -4 possible_seatings_('M',_2) _C342 -3 possible_seatings_('M',_2) _C347 -2 possible_seatings_('M',_2) _C351 -1 possible_seatings_('M',_2) _C355 -1 possible_seatings_('M',_2) _C356 -2 possible_seatings_('M',_2) _C357 -3 possible_seatings_('N',_2) Maximum_table_size_2 1 possible_seatings_('N',_2) Must_seat_N 1 possible_seatings_('N',_2) _C253 -13 possible_seatings_('N',_2) _C267 -12 possible_seatings_('N',_2) _C280 -11 possible_seatings_('N',_2) _C292 -10 possible_seatings_('N',_2) _C303 -9 possible_seatings_('N',_2) _C313 -8 possible_seatings_('N',_2) _C322 -7 possible_seatings_('N',_2) _C330 -6 possible_seatings_('N',_2) _C337 -5 possible_seatings_('N',_2) _C343 -4 possible_seatings_('N',_2) _C348 -3 possible_seatings_('N',_2) _C352 -2 possible_seatings_('N',_2) _C355 -1 possible_seatings_('N',_2) _C358 -1 possible_seatings_('N',_2) _C359 -2 possible_seatings_('O',_2) Maximum_table_size_2 1 possible_seatings_('O',_2) Must_seat_O 1 possible_seatings_('O',_2) _C254 -14 possible_seatings_('O',_2) _C268 -13 possible_seatings_('O',_2) _C281 -12 possible_seatings_('O',_2) _C293 -11 possible_seatings_('O',_2) _C304 -10 possible_seatings_('O',_2) _C314 -9 possible_seatings_('O',_2) _C323 -8 possible_seatings_('O',_2) _C331 -7 possible_seatings_('O',_2) _C338 -6 possible_seatings_('O',_2) _C344 -5 possible_seatings_('O',_2) _C349 -4 possible_seatings_('O',_2) _C353 -3 possible_seatings_('O',_2) _C356 -2 possible_seatings_('O',_2) _C358 -1 possible_seatings_('O',_2) _C360 -1 possible_seatings_('P',_2) Maximum_table_size_2 1 possible_seatings_('P',_2) Must_seat_P 1 possible_seatings_('P',_2) _C255 -15 possible_seatings_('P',_2) _C269 -14 possible_seatings_('P',_2) _C282 -13 possible_seatings_('P',_2) _C294 -12 possible_seatings_('P',_2) _C305 -11 possible_seatings_('P',_2) _C315 -10 possible_seatings_('P',_2) _C324 -9 possible_seatings_('P',_2) _C332 -8 possible_seatings_('P',_2) _C339 -7 possible_seatings_('P',_2) _C345 -6 possible_seatings_('P',_2) _C350 -5 possible_seatings_('P',_2) _C354 -4 possible_seatings_('P',_2) _C357 -3 possible_seatings_('P',_2) _C359 -2 possible_seatings_('P',_2) _C360 -1 possible_seatings_('A',_3) Maximum_table_size_3 1 possible_seatings_('A',_3) Must_seat_A 1 possible_seatings_('A',_3) _C361 -1 possible_seatings_('A',_3) _C362 -2 possible_seatings_('A',_3) _C363 -3 possible_seatings_('A',_3) _C364 -4 possible_seatings_('A',_3) _C365 -5 possible_seatings_('A',_3) _C366 -6 possible_seatings_('A',_3) _C367 -7 possible_seatings_('A',_3) _C368 -8 possible_seatings_('A',_3) _C369 -9 possible_seatings_('A',_3) _C370 -10 possible_seatings_('A',_3) _C371 -11 possible_seatings_('A',_3) _C372 -12 possible_seatings_('A',_3) _C373 -13 possible_seatings_('A',_3) _C374 -14 possible_seatings_('A',_3) _C375 -15 possible_seatings_('B',_3) Maximum_table_size_3 1 possible_seatings_('B',_3) Must_seat_B 1 possible_seatings_('B',_3) _C361 -1 possible_seatings_('B',_3) _C376 -1 possible_seatings_('B',_3) _C377 -2 possible_seatings_('B',_3) _C378 -3 possible_seatings_('B',_3) _C379 -4 possible_seatings_('B',_3) _C380 -5 possible_seatings_('B',_3) _C381 -6 possible_seatings_('B',_3) _C382 -7 possible_seatings_('B',_3) _C383 -8 possible_seatings_('B',_3) _C384 -9 possible_seatings_('B',_3) _C385 -10 possible_seatings_('B',_3) _C386 -11 possible_seatings_('B',_3) _C387 -12 possible_seatings_('B',_3) _C388 -13 possible_seatings_('B',_3) _C389 -14 possible_seatings_('C',_3) Maximum_table_size_3 1 possible_seatings_('C',_3) Must_seat_C 1 possible_seatings_('C',_3) _C362 -2 possible_seatings_('C',_3) _C376 -1 possible_seatings_('C',_3) _C390 -1 possible_seatings_('C',_3) _C391 -2 possible_seatings_('C',_3) _C392 -3 possible_seatings_('C',_3) _C393 -4 possible_seatings_('C',_3) _C394 -5 possible_seatings_('C',_3) _C395 -6 possible_seatings_('C',_3) _C396 -7 possible_seatings_('C',_3) _C397 -8 possible_seatings_('C',_3) _C398 -9 possible_seatings_('C',_3) _C399 -10 possible_seatings_('C',_3) _C400 -11 possible_seatings_('C',_3) _C401 -12 possible_seatings_('C',_3) _C402 -13 possible_seatings_('D',_3) Maximum_table_size_3 1 possible_seatings_('D',_3) Must_seat_D 1 possible_seatings_('D',_3) _C363 -3 possible_seatings_('D',_3) _C377 -2 possible_seatings_('D',_3) _C390 -1 possible_seatings_('D',_3) _C403 -1 possible_seatings_('D',_3) _C404 -2 possible_seatings_('D',_3) _C405 -3 possible_seatings_('D',_3) _C406 -4 possible_seatings_('D',_3) _C407 -5 possible_seatings_('D',_3) _C408 -6 possible_seatings_('D',_3) _C409 -7 possible_seatings_('D',_3) _C410 -8 possible_seatings_('D',_3) _C411 -9 possible_seatings_('D',_3) _C412 -10 possible_seatings_('D',_3) _C413 -11 possible_seatings_('D',_3) _C414 -12 possible_seatings_('E',_3) Maximum_table_size_3 1 possible_seatings_('E',_3) Must_seat_E 1 possible_seatings_('E',_3) _C364 -4 possible_seatings_('E',_3) _C378 -3 possible_seatings_('E',_3) _C391 -2 possible_seatings_('E',_3) _C403 -1 possible_seatings_('E',_3) _C415 -1 possible_seatings_('E',_3) _C416 -2 possible_seatings_('E',_3) _C417 -3 possible_seatings_('E',_3) _C418 -4 possible_seatings_('E',_3) _C419 -5 possible_seatings_('E',_3) _C420 -6 possible_seatings_('E',_3) _C421 -7 possible_seatings_('E',_3) _C422 -8 possible_seatings_('E',_3) _C423 -9 possible_seatings_('E',_3) _C424 -10 possible_seatings_('E',_3) _C425 -11 possible_seatings_('F',_3) Maximum_table_size_3 1 possible_seatings_('F',_3) Must_seat_F 1 possible_seatings_('F',_3) _C365 -5 possible_seatings_('F',_3) _C379 -4 possible_seatings_('F',_3) _C392 -3 possible_seatings_('F',_3) _C404 -2 possible_seatings_('F',_3) _C415 -1 possible_seatings_('F',_3) _C426 -1 possible_seatings_('F',_3) _C427 -2 possible_seatings_('F',_3) _C428 -3 possible_seatings_('F',_3) _C429 -4 possible_seatings_('F',_3) _C430 -5 possible_seatings_('F',_3) _C431 -6 possible_seatings_('F',_3) _C432 -7 possible_seatings_('F',_3) _C433 -8 possible_seatings_('F',_3) _C434 -9 possible_seatings_('F',_3) _C435 -10 possible_seatings_('G',_3) Maximum_table_size_3 1 possible_seatings_('G',_3) Must_seat_G 1 possible_seatings_('G',_3) _C366 -6 possible_seatings_('G',_3) _C380 -5 possible_seatings_('G',_3) _C393 -4 possible_seatings_('G',_3) _C405 -3 possible_seatings_('G',_3) _C416 -2 possible_seatings_('G',_3) _C426 -1 possible_seatings_('G',_3) _C436 -1 possible_seatings_('G',_3) _C437 -2 possible_seatings_('G',_3) _C438 -3 possible_seatings_('G',_3) _C439 -4 possible_seatings_('G',_3) _C440 -5 possible_seatings_('G',_3) _C441 -6 possible_seatings_('G',_3) _C442 -7 possible_seatings_('G',_3) _C443 -8 possible_seatings_('G',_3) _C444 -9 possible_seatings_('H',_3) Maximum_table_size_3 1 possible_seatings_('H',_3) Must_seat_H 1 possible_seatings_('H',_3) _C367 -7 possible_seatings_('H',_3) _C381 -6 possible_seatings_('H',_3) _C394 -5 possible_seatings_('H',_3) _C406 -4 possible_seatings_('H',_3) _C417 -3 possible_seatings_('H',_3) _C427 -2 possible_seatings_('H',_3) _C436 -1 possible_seatings_('H',_3) _C445 -1 possible_seatings_('H',_3) _C446 -2 possible_seatings_('H',_3) _C447 -3 possible_seatings_('H',_3) _C448 -4 possible_seatings_('H',_3) _C449 -5 possible_seatings_('H',_3) _C450 -6 possible_seatings_('H',_3) _C451 -7 possible_seatings_('H',_3) _C452 -8 possible_seatings_('I',_3) Maximum_table_size_3 1 possible_seatings_('I',_3) Must_seat_I 1 possible_seatings_('I',_3) _C368 -8 possible_seatings_('I',_3) _C382 -7 possible_seatings_('I',_3) _C395 -6 possible_seatings_('I',_3) _C407 -5 possible_seatings_('I',_3) _C418 -4 possible_seatings_('I',_3) _C428 -3 possible_seatings_('I',_3) _C437 -2 possible_seatings_('I',_3) _C445 -1 possible_seatings_('I',_3) _C453 -1 possible_seatings_('I',_3) _C454 -2 possible_seatings_('I',_3) _C455 -3 possible_seatings_('I',_3) _C456 -4 possible_seatings_('I',_3) _C457 -5 possible_seatings_('I',_3) _C458 -6 possible_seatings_('I',_3) _C459 -7 possible_seatings_('J',_3) Maximum_table_size_3 1 possible_seatings_('J',_3) Must_seat_J 1 possible_seatings_('J',_3) _C369 -9 possible_seatings_('J',_3) _C383 -8 possible_seatings_('J',_3) _C396 -7 possible_seatings_('J',_3) _C408 -6 possible_seatings_('J',_3) _C419 -5 possible_seatings_('J',_3) _C429 -4 possible_seatings_('J',_3) _C438 -3 possible_seatings_('J',_3) _C446 -2 possible_seatings_('J',_3) _C453 -1 possible_seatings_('J',_3) _C460 -1 possible_seatings_('J',_3) _C461 -2 possible_seatings_('J',_3) _C462 -3 possible_seatings_('J',_3) _C463 -4 possible_seatings_('J',_3) _C464 -5 possible_seatings_('J',_3) _C465 -6 possible_seatings_('K',_3) Maximum_table_size_3 1 possible_seatings_('K',_3) Must_seat_K 1 possible_seatings_('K',_3) _C370 -10 possible_seatings_('K',_3) _C384 -9 possible_seatings_('K',_3) _C397 -8 possible_seatings_('K',_3) _C409 -7 possible_seatings_('K',_3) _C420 -6 possible_seatings_('K',_3) _C430 -5 possible_seatings_('K',_3) _C439 -4 possible_seatings_('K',_3) _C447 -3 possible_seatings_('K',_3) _C454 -2 possible_seatings_('K',_3) _C460 -1 possible_seatings_('K',_3) _C466 -1 possible_seatings_('K',_3) _C467 -2 possible_seatings_('K',_3) _C468 -3 possible_seatings_('K',_3) _C469 -4 possible_seatings_('K',_3) _C470 -5 possible_seatings_('L',_3) Maximum_table_size_3 1 possible_seatings_('L',_3) Must_seat_L 1 possible_seatings_('L',_3) _C371 -11 possible_seatings_('L',_3) _C385 -10 possible_seatings_('L',_3) _C398 -9 possible_seatings_('L',_3) _C410 -8 possible_seatings_('L',_3) _C421 -7 possible_seatings_('L',_3) _C431 -6 possible_seatings_('L',_3) _C440 -5 possible_seatings_('L',_3) _C448 -4 possible_seatings_('L',_3) _C455 -3 possible_seatings_('L',_3) _C461 -2 possible_seatings_('L',_3) _C466 -1 possible_seatings_('L',_3) _C471 -1 possible_seatings_('L',_3) _C472 -2 possible_seatings_('L',_3) _C473 -3 possible_seatings_('L',_3) _C474 -4 possible_seatings_('M',_3) Maximum_table_size_3 1 possible_seatings_('M',_3) Must_seat_M 1 possible_seatings_('M',_3) _C372 -12 possible_seatings_('M',_3) _C386 -11 possible_seatings_('M',_3) _C399 -10 possible_seatings_('M',_3) _C411 -9 possible_seatings_('M',_3) _C422 -8 possible_seatings_('M',_3) _C432 -7 possible_seatings_('M',_3) _C441 -6 possible_seatings_('M',_3) _C449 -5 possible_seatings_('M',_3) _C456 -4 possible_seatings_('M',_3) _C462 -3 possible_seatings_('M',_3) _C467 -2 possible_seatings_('M',_3) _C471 -1 possible_seatings_('M',_3) _C475 -1 possible_seatings_('M',_3) _C476 -2 possible_seatings_('M',_3) _C477 -3 possible_seatings_('N',_3) Maximum_table_size_3 1 possible_seatings_('N',_3) Must_seat_N 1 possible_seatings_('N',_3) _C373 -13 possible_seatings_('N',_3) _C387 -12 possible_seatings_('N',_3) _C400 -11 possible_seatings_('N',_3) _C412 -10 possible_seatings_('N',_3) _C423 -9 possible_seatings_('N',_3) _C433 -8 possible_seatings_('N',_3) _C442 -7 possible_seatings_('N',_3) _C450 -6 possible_seatings_('N',_3) _C457 -5 possible_seatings_('N',_3) _C463 -4 possible_seatings_('N',_3) _C468 -3 possible_seatings_('N',_3) _C472 -2 possible_seatings_('N',_3) _C475 -1 possible_seatings_('N',_3) _C478 -1 possible_seatings_('N',_3) _C479 -2 possible_seatings_('O',_3) Maximum_table_size_3 1 possible_seatings_('O',_3) Must_seat_O 1 possible_seatings_('O',_3) _C374 -14 possible_seatings_('O',_3) _C388 -13 possible_seatings_('O',_3) _C401 -12 possible_seatings_('O',_3) _C413 -11 possible_seatings_('O',_3) _C424 -10 possible_seatings_('O',_3) _C434 -9 possible_seatings_('O',_3) _C443 -8 possible_seatings_('O',_3) _C451 -7 possible_seatings_('O',_3) _C458 -6 possible_seatings_('O',_3) _C464 -5 possible_seatings_('O',_3) _C469 -4 possible_seatings_('O',_3) _C473 -3 possible_seatings_('O',_3) _C476 -2 possible_seatings_('O',_3) _C478 -1 possible_seatings_('O',_3) _C480 -1 possible_seatings_('P',_3) Maximum_table_size_3 1 possible_seatings_('P',_3) Must_seat_P 1 possible_seatings_('P',_3) _C375 -15 possible_seatings_('P',_3) _C389 -14 possible_seatings_('P',_3) _C402 -13 possible_seatings_('P',_3) _C414 -12 possible_seatings_('P',_3) _C425 -11 possible_seatings_('P',_3) _C435 -10 possible_seatings_('P',_3) _C444 -9 possible_seatings_('P',_3) _C452 -8 possible_seatings_('P',_3) _C459 -7 possible_seatings_('P',_3) _C465 -6 possible_seatings_('P',_3) _C470 -5 possible_seatings_('P',_3) _C474 -4 possible_seatings_('P',_3) _C477 -3 possible_seatings_('P',_3) _C479 -2 possible_seatings_('P',_3) _C480 -1 possible_seatings_('A',_4) Maximum_table_size_4 1 possible_seatings_('A',_4) Must_seat_A 1 possible_seatings_('A',_4) _C481 -1 possible_seatings_('A',_4) _C482 -2 possible_seatings_('A',_4) _C483 -3 possible_seatings_('A',_4) _C484 -4 possible_seatings_('A',_4) _C485 -5 possible_seatings_('A',_4) _C486 -6 possible_seatings_('A',_4) _C487 -7 possible_seatings_('A',_4) _C488 -8 possible_seatings_('A',_4) _C489 -9 possible_seatings_('A',_4) _C490 -10 possible_seatings_('A',_4) _C491 -11 possible_seatings_('A',_4) _C492 -12 possible_seatings_('A',_4) _C493 -13 possible_seatings_('A',_4) _C494 -14 possible_seatings_('A',_4) _C495 -15 possible_seatings_('B',_4) Maximum_table_size_4 1 possible_seatings_('B',_4) Must_seat_B 1 possible_seatings_('B',_4) _C481 -1 possible_seatings_('B',_4) _C496 -1 possible_seatings_('B',_4) _C497 -2 possible_seatings_('B',_4) _C498 -3 possible_seatings_('B',_4) _C499 -4 possible_seatings_('B',_4) _C500 -5 possible_seatings_('B',_4) _C501 -6 possible_seatings_('B',_4) _C502 -7 possible_seatings_('B',_4) _C503 -8 possible_seatings_('B',_4) _C504 -9 possible_seatings_('B',_4) _C505 -10 possible_seatings_('B',_4) _C506 -11 possible_seatings_('B',_4) _C507 -12 possible_seatings_('B',_4) _C508 -13 possible_seatings_('B',_4) _C509 -14 possible_seatings_('C',_4) Maximum_table_size_4 1 possible_seatings_('C',_4) Must_seat_C 1 possible_seatings_('C',_4) _C482 -2 possible_seatings_('C',_4) _C496 -1 possible_seatings_('C',_4) _C510 -1 possible_seatings_('C',_4) _C511 -2 possible_seatings_('C',_4) _C512 -3 possible_seatings_('C',_4) _C513 -4 possible_seatings_('C',_4) _C514 -5 possible_seatings_('C',_4) _C515 -6 possible_seatings_('C',_4) _C516 -7 possible_seatings_('C',_4) _C517 -8 possible_seatings_('C',_4) _C518 -9 possible_seatings_('C',_4) _C519 -10 possible_seatings_('C',_4) _C520 -11 possible_seatings_('C',_4) _C521 -12 possible_seatings_('C',_4) _C522 -13 possible_seatings_('D',_4) Maximum_table_size_4 1 possible_seatings_('D',_4) Must_seat_D 1 possible_seatings_('D',_4) _C483 -3 possible_seatings_('D',_4) _C497 -2 possible_seatings_('D',_4) _C510 -1 possible_seatings_('D',_4) _C523 -1 possible_seatings_('D',_4) _C524 -2 possible_seatings_('D',_4) _C525 -3 possible_seatings_('D',_4) _C526 -4 possible_seatings_('D',_4) _C527 -5 possible_seatings_('D',_4) _C528 -6 possible_seatings_('D',_4) _C529 -7 possible_seatings_('D',_4) _C530 -8 possible_seatings_('D',_4) _C531 -9 possible_seatings_('D',_4) _C532 -10 possible_seatings_('D',_4) _C533 -11 possible_seatings_('D',_4) _C534 -12 possible_seatings_('E',_4) Maximum_table_size_4 1 possible_seatings_('E',_4) Must_seat_E 1 possible_seatings_('E',_4) _C484 -4 possible_seatings_('E',_4) _C498 -3 possible_seatings_('E',_4) _C511 -2 possible_seatings_('E',_4) _C523 -1 possible_seatings_('E',_4) _C535 -1 possible_seatings_('E',_4) _C536 -2 possible_seatings_('E',_4) _C537 -3 possible_seatings_('E',_4) _C538 -4 possible_seatings_('E',_4) _C539 -5 possible_seatings_('E',_4) _C540 -6 possible_seatings_('E',_4) _C541 -7 possible_seatings_('E',_4) _C542 -8 possible_seatings_('E',_4) _C543 -9 possible_seatings_('E',_4) _C544 -10 possible_seatings_('E',_4) _C545 -11 possible_seatings_('F',_4) Maximum_table_size_4 1 possible_seatings_('F',_4) Must_seat_F 1 possible_seatings_('F',_4) _C485 -5 possible_seatings_('F',_4) _C499 -4 possible_seatings_('F',_4) _C512 -3 possible_seatings_('F',_4) _C524 -2 possible_seatings_('F',_4) _C535 -1 possible_seatings_('F',_4) _C546 -1 possible_seatings_('F',_4) _C547 -2 possible_seatings_('F',_4) _C548 -3 possible_seatings_('F',_4) _C549 -4 possible_seatings_('F',_4) _C550 -5 possible_seatings_('F',_4) _C551 -6 possible_seatings_('F',_4) _C552 -7 possible_seatings_('F',_4) _C553 -8 possible_seatings_('F',_4) _C554 -9 possible_seatings_('F',_4) _C555 -10 possible_seatings_('G',_4) Maximum_table_size_4 1 possible_seatings_('G',_4) Must_seat_G 1 possible_seatings_('G',_4) _C486 -6 possible_seatings_('G',_4) _C500 -5 possible_seatings_('G',_4) _C513 -4 possible_seatings_('G',_4) _C525 -3 possible_seatings_('G',_4) _C536 -2 possible_seatings_('G',_4) _C546 -1 possible_seatings_('G',_4) _C556 -1 possible_seatings_('G',_4) _C557 -2 possible_seatings_('G',_4) _C558 -3 possible_seatings_('G',_4) _C559 -4 possible_seatings_('G',_4) _C560 -5 possible_seatings_('G',_4) _C561 -6 possible_seatings_('G',_4) _C562 -7 possible_seatings_('G',_4) _C563 -8 possible_seatings_('G',_4) _C564 -9 possible_seatings_('H',_4) Maximum_table_size_4 1 possible_seatings_('H',_4) Must_seat_H 1 possible_seatings_('H',_4) _C487 -7 possible_seatings_('H',_4) _C501 -6 possible_seatings_('H',_4) _C514 -5 possible_seatings_('H',_4) _C526 -4 possible_seatings_('H',_4) _C537 -3 possible_seatings_('H',_4) _C547 -2 possible_seatings_('H',_4) _C556 -1 possible_seatings_('H',_4) _C565 -1 possible_seatings_('H',_4) _C566 -2 possible_seatings_('H',_4) _C567 -3 possible_seatings_('H',_4) _C568 -4 possible_seatings_('H',_4) _C569 -5 possible_seatings_('H',_4) _C570 -6 possible_seatings_('H',_4) _C571 -7 possible_seatings_('H',_4) _C572 -8 possible_seatings_('I',_4) Maximum_table_size_4 1 possible_seatings_('I',_4) Must_seat_I 1 possible_seatings_('I',_4) _C488 -8 possible_seatings_('I',_4) _C502 -7 possible_seatings_('I',_4) _C515 -6 possible_seatings_('I',_4) _C527 -5 possible_seatings_('I',_4) _C538 -4 possible_seatings_('I',_4) _C548 -3 possible_seatings_('I',_4) _C557 -2 possible_seatings_('I',_4) _C565 -1 possible_seatings_('I',_4) _C573 -1 possible_seatings_('I',_4) _C574 -2 possible_seatings_('I',_4) _C575 -3 possible_seatings_('I',_4) _C576 -4 possible_seatings_('I',_4) _C577 -5 possible_seatings_('I',_4) _C578 -6 possible_seatings_('I',_4) _C579 -7 possible_seatings_('J',_4) Maximum_table_size_4 1 possible_seatings_('J',_4) Must_seat_J 1 possible_seatings_('J',_4) _C489 -9 possible_seatings_('J',_4) _C503 -8 possible_seatings_('J',_4) _C516 -7 possible_seatings_('J',_4) _C528 -6 possible_seatings_('J',_4) _C539 -5 possible_seatings_('J',_4) _C549 -4 possible_seatings_('J',_4) _C558 -3 possible_seatings_('J',_4) _C566 -2 possible_seatings_('J',_4) _C573 -1 possible_seatings_('J',_4) _C580 -1 possible_seatings_('J',_4) _C581 -2 possible_seatings_('J',_4) _C582 -3 possible_seatings_('J',_4) _C583 -4 possible_seatings_('J',_4) _C584 -5 possible_seatings_('J',_4) _C585 -6 possible_seatings_('K',_4) Maximum_table_size_4 1 possible_seatings_('K',_4) Must_seat_K 1 possible_seatings_('K',_4) _C490 -10 possible_seatings_('K',_4) _C504 -9 possible_seatings_('K',_4) _C517 -8 possible_seatings_('K',_4) _C529 -7 possible_seatings_('K',_4) _C540 -6 possible_seatings_('K',_4) _C550 -5 possible_seatings_('K',_4) _C559 -4 possible_seatings_('K',_4) _C567 -3 possible_seatings_('K',_4) _C574 -2 possible_seatings_('K',_4) _C580 -1 possible_seatings_('K',_4) _C586 -1 possible_seatings_('K',_4) _C587 -2 possible_seatings_('K',_4) _C588 -3 possible_seatings_('K',_4) _C589 -4 possible_seatings_('K',_4) _C590 -5 possible_seatings_('L',_4) Maximum_table_size_4 1 possible_seatings_('L',_4) Must_seat_L 1 possible_seatings_('L',_4) _C491 -11 possible_seatings_('L',_4) _C505 -10 possible_seatings_('L',_4) _C518 -9 possible_seatings_('L',_4) _C530 -8 possible_seatings_('L',_4) _C541 -7 possible_seatings_('L',_4) _C551 -6 possible_seatings_('L',_4) _C560 -5 possible_seatings_('L',_4) _C568 -4 possible_seatings_('L',_4) _C575 -3 possible_seatings_('L',_4) _C581 -2 possible_seatings_('L',_4) _C586 -1 possible_seatings_('L',_4) _C591 -1 possible_seatings_('L',_4) _C592 -2 possible_seatings_('L',_4) _C593 -3 possible_seatings_('L',_4) _C594 -4 possible_seatings_('M',_4) Maximum_table_size_4 1 possible_seatings_('M',_4) Must_seat_M 1 possible_seatings_('M',_4) _C492 -12 possible_seatings_('M',_4) _C506 -11 possible_seatings_('M',_4) _C519 -10 possible_seatings_('M',_4) _C531 -9 possible_seatings_('M',_4) _C542 -8 possible_seatings_('M',_4) _C552 -7 possible_seatings_('M',_4) _C561 -6 possible_seatings_('M',_4) _C569 -5 possible_seatings_('M',_4) _C576 -4 possible_seatings_('M',_4) _C582 -3 possible_seatings_('M',_4) _C587 -2 possible_seatings_('M',_4) _C591 -1 possible_seatings_('M',_4) _C595 -1 possible_seatings_('M',_4) _C596 -2 possible_seatings_('M',_4) _C597 -3 possible_seatings_('N',_4) Maximum_table_size_4 1 possible_seatings_('N',_4) Must_seat_N 1 possible_seatings_('N',_4) _C493 -13 possible_seatings_('N',_4) _C507 -12 possible_seatings_('N',_4) _C520 -11 possible_seatings_('N',_4) _C532 -10 possible_seatings_('N',_4) _C543 -9 possible_seatings_('N',_4) _C553 -8 possible_seatings_('N',_4) _C562 -7 possible_seatings_('N',_4) _C570 -6 possible_seatings_('N',_4) _C577 -5 possible_seatings_('N',_4) _C583 -4 possible_seatings_('N',_4) _C588 -3 possible_seatings_('N',_4) _C592 -2 possible_seatings_('N',_4) _C595 -1 possible_seatings_('N',_4) _C598 -1 possible_seatings_('N',_4) _C599 -2 possible_seatings_('O',_4) Maximum_table_size_4 1 possible_seatings_('O',_4) Must_seat_O 1 possible_seatings_('O',_4) _C494 -14 possible_seatings_('O',_4) _C508 -13 possible_seatings_('O',_4) _C521 -12 possible_seatings_('O',_4) _C533 -11 possible_seatings_('O',_4) _C544 -10 possible_seatings_('O',_4) _C554 -9 possible_seatings_('O',_4) _C563 -8 possible_seatings_('O',_4) _C571 -7 possible_seatings_('O',_4) _C578 -6 possible_seatings_('O',_4) _C584 -5 possible_seatings_('O',_4) _C589 -4 possible_seatings_('O',_4) _C593 -3 possible_seatings_('O',_4) _C596 -2 possible_seatings_('O',_4) _C598 -1 possible_seatings_('O',_4) _C600 -1 possible_seatings_('P',_4) Maximum_table_size_4 1 possible_seatings_('P',_4) Must_seat_P 1 possible_seatings_('P',_4) _C495 -15 possible_seatings_('P',_4) _C509 -14 possible_seatings_('P',_4) _C522 -13 possible_seatings_('P',_4) _C534 -12 possible_seatings_('P',_4) _C545 -11 possible_seatings_('P',_4) _C555 -10 possible_seatings_('P',_4) _C564 -9 possible_seatings_('P',_4) _C572 -8 possible_seatings_('P',_4) _C579 -7 possible_seatings_('P',_4) _C585 -6 possible_seatings_('P',_4) _C590 -5 possible_seatings_('P',_4) _C594 -4 possible_seatings_('P',_4) _C597 -3 possible_seatings_('P',_4) _C599 -2 possible_seatings_('P',_4) _C600 -1 MARK0001 'MARKER' 'INTEND' RHS rhs Maximum_table_size_0 4 rhs Maximum_table_size_1 4 rhs Maximum_table_size_2 4 rhs Maximum_table_size_3 4 rhs Maximum_table_size_4 4 rhs Must_seat_A 1 rhs Must_seat_B 1 rhs Must_seat_C 1 rhs Must_seat_D 1 rhs Must_seat_E 1 rhs Must_seat_F 1 rhs Must_seat_G 1 rhs Must_seat_H 1 rhs Must_seat_I 1 rhs Must_seat_J 1 rhs Must_seat_K 1 rhs Must_seat_L 1 rhs Must_seat_M 1 rhs Must_seat_N 1 rhs Must_seat_O 1 rhs Must_seat_P 1 rhs _C1 -1 rhs _C10 -10 rhs _C100 -1 rhs _C101 -2 rhs _C102 -3 rhs _C103 -4 rhs _C104 -5 rhs _C105 -6 rhs _C106 -1 rhs _C107 -2 rhs _C108 -3 rhs _C109 -4 rhs _C11 -11 rhs _C110 -5 rhs _C111 -1 rhs _C112 -2 rhs _C113 -3 rhs _C114 -4 rhs _C115 -1 rhs _C116 -2 rhs _C117 -3 rhs _C118 -1 rhs _C119 -2 rhs _C12 -12 rhs _C120 -1 rhs _C121 -1 rhs _C122 -2 rhs _C123 -3 rhs _C124 -4 rhs _C125 -5 rhs _C126 -6 rhs _C127 -7 rhs _C128 -8 rhs _C129 -9 rhs _C13 -13 rhs _C130 -10 rhs _C131 -11 rhs _C132 -12 rhs _C133 -13 rhs _C134 -14 rhs _C135 -15 rhs _C136 -1 rhs _C137 -2 rhs _C138 -3 rhs _C139 -4 rhs _C14 -14 rhs _C140 -5 rhs _C141 -6 rhs _C142 -7 rhs _C143 -8 rhs _C144 -9 rhs _C145 -10 rhs _C146 -11 rhs _C147 -12 rhs _C148 -13 rhs _C149 -14 rhs _C15 -15 rhs _C150 -1 rhs _C151 -2 rhs _C152 -3 rhs _C153 -4 rhs _C154 -5 rhs _C155 -6 rhs _C156 -7 rhs _C157 -8 rhs _C158 -9 rhs _C159 -10 rhs _C16 -1 rhs _C160 -11 rhs _C161 -12 rhs _C162 -13 rhs _C163 -1 rhs _C164 -2 rhs _C165 -3 rhs _C166 -4 rhs _C167 -5 rhs _C168 -6 rhs _C169 -7 rhs _C17 -2 rhs _C170 -8 rhs _C171 -9 rhs _C172 -10 rhs _C173 -11 rhs _C174 -12 rhs _C175 -1 rhs _C176 -2 rhs _C177 -3 rhs _C178 -4 rhs _C179 -5 rhs _C18 -3 rhs _C180 -6 rhs _C181 -7 rhs _C182 -8 rhs _C183 -9 rhs _C184 -10 rhs _C185 -11 rhs _C186 -1 rhs _C187 -2 rhs _C188 -3 rhs _C189 -4 rhs _C19 -4 rhs _C190 -5 rhs _C191 -6 rhs _C192 -7 rhs _C193 -8 rhs _C194 -9 rhs _C195 -10 rhs _C196 -1 rhs _C197 -2 rhs _C198 -3 rhs _C199 -4 rhs _C2 -2 rhs _C20 -5 rhs _C200 -5 rhs _C201 -6 rhs _C202 -7 rhs _C203 -8 rhs _C204 -9 rhs _C205 -1 rhs _C206 -2 rhs _C207 -3 rhs _C208 -4 rhs _C209 -5 rhs _C21 -6 rhs _C210 -6 rhs _C211 -7 rhs _C212 -8 rhs _C213 -1 rhs _C214 -2 rhs _C215 -3 rhs _C216 -4 rhs _C217 -5 rhs _C218 -6 rhs _C219 -7 rhs _C22 -7 rhs _C220 -1 rhs _C221 -2 rhs _C222 -3 rhs _C223 -4 rhs _C224 -5 rhs _C225 -6 rhs _C226 -1 rhs _C227 -2 rhs _C228 -3 rhs _C229 -4 rhs _C23 -8 rhs _C230 -5 rhs _C231 -1 rhs _C232 -2 rhs _C233 -3 rhs _C234 -4 rhs _C235 -1 rhs _C236 -2 rhs _C237 -3 rhs _C238 -1 rhs _C239 -2 rhs _C24 -9 rhs _C240 -1 rhs _C241 -1 rhs _C242 -2 rhs _C243 -3 rhs _C244 -4 rhs _C245 -5 rhs _C246 -6 rhs _C247 -7 rhs _C248 -8 rhs _C249 -9 rhs _C25 -10 rhs _C250 -10 rhs _C251 -11 rhs _C252 -12 rhs _C253 -13 rhs _C254 -14 rhs _C255 -15 rhs _C256 -1 rhs _C257 -2 rhs _C258 -3 rhs _C259 -4 rhs _C26 -11 rhs _C260 -5 rhs _C261 -6 rhs _C262 -7 rhs _C263 -8 rhs _C264 -9 rhs _C265 -10 rhs _C266 -11 rhs _C267 -12 rhs _C268 -13 rhs _C269 -14 rhs _C27 -12 rhs _C270 -1 rhs _C271 -2 rhs _C272 -3 rhs _C273 -4 rhs _C274 -5 rhs _C275 -6 rhs _C276 -7 rhs _C277 -8 rhs _C278 -9 rhs _C279 -10 rhs _C28 -13 rhs _C280 -11 rhs _C281 -12 rhs _C282 -13 rhs _C283 -1 rhs _C284 -2 rhs _C285 -3 rhs _C286 -4 rhs _C287 -5 rhs _C288 -6 rhs _C289 -7 rhs _C29 -14 rhs _C290 -8 rhs _C291 -9 rhs _C292 -10 rhs _C293 -11 rhs _C294 -12 rhs _C295 -1 rhs _C296 -2 rhs _C297 -3 rhs _C298 -4 rhs _C299 -5 rhs _C3 -3 rhs _C30 -1 rhs _C300 -6 rhs _C301 -7 rhs _C302 -8 rhs _C303 -9 rhs _C304 -10 rhs _C305 -11 rhs _C306 -1 rhs _C307 -2 rhs _C308 -3 rhs _C309 -4 rhs _C31 -2 rhs _C310 -5 rhs _C311 -6 rhs _C312 -7 rhs _C313 -8 rhs _C314 -9 rhs _C315 -10 rhs _C316 -1 rhs _C317 -2 rhs _C318 -3 rhs _C319 -4 rhs _C32 -3 rhs _C320 -5 rhs _C321 -6 rhs _C322 -7 rhs _C323 -8 rhs _C324 -9 rhs _C325 -1 rhs _C326 -2 rhs _C327 -3 rhs _C328 -4 rhs _C329 -5 rhs _C33 -4 rhs _C330 -6 rhs _C331 -7 rhs _C332 -8 rhs _C333 -1 rhs _C334 -2 rhs _C335 -3 rhs _C336 -4 rhs _C337 -5 rhs _C338 -6 rhs _C339 -7 rhs _C34 -5 rhs _C340 -1 rhs _C341 -2 rhs _C342 -3 rhs _C343 -4 rhs _C344 -5 rhs _C345 -6 rhs _C346 -1 rhs _C347 -2 rhs _C348 -3 rhs _C349 -4 rhs _C35 -6 rhs _C350 -5 rhs _C351 -1 rhs _C352 -2 rhs _C353 -3 rhs _C354 -4 rhs _C355 -1 rhs _C356 -2 rhs _C357 -3 rhs _C358 -1 rhs _C359 -2 rhs _C36 -7 rhs _C360 -1 rhs _C361 -1 rhs _C362 -2 rhs _C363 -3 rhs _C364 -4 rhs _C365 -5 rhs _C366 -6 rhs _C367 -7 rhs _C368 -8 rhs _C369 -9 rhs _C37 -8 rhs _C370 -10 rhs _C371 -11 rhs _C372 -12 rhs _C373 -13 rhs _C374 -14 rhs _C375 -15 rhs _C376 -1 rhs _C377 -2 rhs _C378 -3 rhs _C379 -4 rhs _C38 -9 rhs _C380 -5 rhs _C381 -6 rhs _C382 -7 rhs _C383 -8 rhs _C384 -9 rhs _C385 -10 rhs _C386 -11 rhs _C387 -12 rhs _C388 -13 rhs _C389 -14 rhs _C39 -10 rhs _C390 -1 rhs _C391 -2 rhs _C392 -3 rhs _C393 -4 rhs _C394 -5 rhs _C395 -6 rhs _C396 -7 rhs _C397 -8 rhs _C398 -9 rhs _C399 -10 rhs _C4 -4 rhs _C40 -11 rhs _C400 -11 rhs _C401 -12 rhs _C402 -13 rhs _C403 -1 rhs _C404 -2 rhs _C405 -3 rhs _C406 -4 rhs _C407 -5 rhs _C408 -6 rhs _C409 -7 rhs _C41 -12 rhs _C410 -8 rhs _C411 -9 rhs _C412 -10 rhs _C413 -11 rhs _C414 -12 rhs _C415 -1 rhs _C416 -2 rhs _C417 -3 rhs _C418 -4 rhs _C419 -5 rhs _C42 -13 rhs _C420 -6 rhs _C421 -7 rhs _C422 -8 rhs _C423 -9 rhs _C424 -10 rhs _C425 -11 rhs _C426 -1 rhs _C427 -2 rhs _C428 -3 rhs _C429 -4 rhs _C43 -1 rhs _C430 -5 rhs _C431 -6 rhs _C432 -7 rhs _C433 -8 rhs _C434 -9 rhs _C435 -10 rhs _C436 -1 rhs _C437 -2 rhs _C438 -3 rhs _C439 -4 rhs _C44 -2 rhs _C440 -5 rhs _C441 -6 rhs _C442 -7 rhs _C443 -8 rhs _C444 -9 rhs _C445 -1 rhs _C446 -2 rhs _C447 -3 rhs _C448 -4 rhs _C449 -5 rhs _C45 -3 rhs _C450 -6 rhs _C451 -7 rhs _C452 -8 rhs _C453 -1 rhs _C454 -2 rhs _C455 -3 rhs _C456 -4 rhs _C457 -5 rhs _C458 -6 rhs _C459 -7 rhs _C46 -4 rhs _C460 -1 rhs _C461 -2 rhs _C462 -3 rhs _C463 -4 rhs _C464 -5 rhs _C465 -6 rhs _C466 -1 rhs _C467 -2 rhs _C468 -3 rhs _C469 -4 rhs _C47 -5 rhs _C470 -5 rhs _C471 -1 rhs _C472 -2 rhs _C473 -3 rhs _C474 -4 rhs _C475 -1 rhs _C476 -2 rhs _C477 -3 rhs _C478 -1 rhs _C479 -2 rhs _C48 -6 rhs _C480 -1 rhs _C481 -1 rhs _C482 -2 rhs _C483 -3 rhs _C484 -4 rhs _C485 -5 rhs _C486 -6 rhs _C487 -7 rhs _C488 -8 rhs _C489 -9 rhs _C49 -7 rhs _C490 -10 rhs _C491 -11 rhs _C492 -12 rhs _C493 -13 rhs _C494 -14 rhs _C495 -15 rhs _C496 -1 rhs _C497 -2 rhs _C498 -3 rhs _C499 -4 rhs _C5 -5 rhs _C50 -8 rhs _C500 -5 rhs _C501 -6 rhs _C502 -7 rhs _C503 -8 rhs _C504 -9 rhs _C505 -10 rhs _C506 -11 rhs _C507 -12 rhs _C508 -13 rhs _C509 -14 rhs _C51 -9 rhs _C510 -1 rhs _C511 -2 rhs _C512 -3 rhs _C513 -4 rhs _C514 -5 rhs _C515 -6 rhs _C516 -7 rhs _C517 -8 rhs _C518 -9 rhs _C519 -10 rhs _C52 -10 rhs _C520 -11 rhs _C521 -12 rhs _C522 -13 rhs _C523 -1 rhs _C524 -2 rhs _C525 -3 rhs _C526 -4 rhs _C527 -5 rhs _C528 -6 rhs _C529 -7 rhs _C53 -11 rhs _C530 -8 rhs _C531 -9 rhs _C532 -10 rhs _C533 -11 rhs _C534 -12 rhs _C535 -1 rhs _C536 -2 rhs _C537 -3 rhs _C538 -4 rhs _C539 -5 rhs _C54 -12 rhs _C540 -6 rhs _C541 -7 rhs _C542 -8 rhs _C543 -9 rhs _C544 -10 rhs _C545 -11 rhs _C546 -1 rhs _C547 -2 rhs _C548 -3 rhs _C549 -4 rhs _C55 -1 rhs _C550 -5 rhs _C551 -6 rhs _C552 -7 rhs _C553 -8 rhs _C554 -9 rhs _C555 -10 rhs _C556 -1 rhs _C557 -2 rhs _C558 -3 rhs _C559 -4 rhs _C56 -2 rhs _C560 -5 rhs _C561 -6 rhs _C562 -7 rhs _C563 -8 rhs _C564 -9 rhs _C565 -1 rhs _C566 -2 rhs _C567 -3 rhs _C568 -4 rhs _C569 -5 rhs _C57 -3 rhs _C570 -6 rhs _C571 -7 rhs _C572 -8 rhs _C573 -1 rhs _C574 -2 rhs _C575 -3 rhs _C576 -4 rhs _C577 -5 rhs _C578 -6 rhs _C579 -7 rhs _C58 -4 rhs _C580 -1 rhs _C581 -2 rhs _C582 -3 rhs _C583 -4 rhs _C584 -5 rhs _C585 -6 rhs _C586 -1 rhs _C587 -2 rhs _C588 -3 rhs _C589 -4 rhs _C59 -5 rhs _C590 -5 rhs _C591 -1 rhs _C592 -2 rhs _C593 -3 rhs _C594 -4 rhs _C595 -1 rhs _C596 -2 rhs _C597 -3 rhs _C598 -1 rhs _C599 -2 rhs _C6 -6 rhs _C60 -6 rhs _C600 -1 rhs _C61 -7 rhs _C62 -8 rhs _C63 -9 rhs _C64 -10 rhs _C65 -11 rhs _C66 -1 rhs _C67 -2 rhs _C68 -3 rhs _C69 -4 rhs _C7 -7 rhs _C70 -5 rhs _C71 -6 rhs _C72 -7 rhs _C73 -8 rhs _C74 -9 rhs _C75 -10 rhs _C76 -1 rhs _C77 -2 rhs _C78 -3 rhs _C79 -4 rhs _C8 -8 rhs _C80 -5 rhs _C81 -6 rhs _C82 -7 rhs _C83 -8 rhs _C84 -9 rhs _C85 -1 rhs _C86 -2 rhs _C87 -3 rhs _C88 -4 rhs _C89 -5 rhs _C9 -9 rhs _C90 -6 rhs _C91 -7 rhs _C92 -8 rhs _C93 -1 rhs _C94 -2 rhs _C95 -3 rhs _C96 -4 rhs _C97 -5 rhs _C98 -6 rhs _C99 -7 BOUNDS UP bnd possible_seatings_('A',_0) 1 UP bnd possible_seatings_('B',_0) 1 UP bnd possible_seatings_('C',_0) 1 UP bnd possible_seatings_('D',_0) 1 UP bnd possible_seatings_('E',_0) 1 UP bnd possible_seatings_('F',_0) 1 UP bnd possible_seatings_('G',_0) 1 UP bnd possible_seatings_('H',_0) 1 UP bnd possible_seatings_('I',_0) 1 UP bnd possible_seatings_('J',_0) 1 UP bnd possible_seatings_('K',_0) 1 UP bnd possible_seatings_('L',_0) 1 UP bnd possible_seatings_('M',_0) 1 UP bnd possible_seatings_('N',_0) 1 UP bnd possible_seatings_('O',_0) 1 UP bnd possible_seatings_('P',_0) 1 UP bnd possible_seatings_('A',_1) 1 UP bnd possible_seatings_('B',_1) 1 UP bnd possible_seatings_('C',_1) 1 UP bnd possible_seatings_('D',_1) 1 UP bnd possible_seatings_('E',_1) 1 UP bnd possible_seatings_('F',_1) 1 UP bnd possible_seatings_('G',_1) 1 UP bnd possible_seatings_('H',_1) 1 UP bnd possible_seatings_('I',_1) 1 UP bnd possible_seatings_('J',_1) 1 UP bnd possible_seatings_('K',_1) 1 UP bnd possible_seatings_('L',_1) 1 UP bnd possible_seatings_('M',_1) 1 UP bnd possible_seatings_('N',_1) 1 UP bnd possible_seatings_('O',_1) 1 UP bnd possible_seatings_('P',_1) 1 UP bnd possible_seatings_('A',_2) 1 UP bnd possible_seatings_('B',_2) 1 UP bnd possible_seatings_('C',_2) 1 UP bnd possible_seatings_('D',_2) 1 UP bnd possible_seatings_('E',_2) 1 UP bnd possible_seatings_('F',_2) 1 UP bnd possible_seatings_('G',_2) 1 UP bnd possible_seatings_('H',_2) 1 UP bnd possible_seatings_('I',_2) 1 UP bnd possible_seatings_('J',_2) 1 UP bnd possible_seatings_('K',_2) 1 UP bnd possible_seatings_('L',_2) 1 UP bnd possible_seatings_('M',_2) 1 UP bnd possible_seatings_('N',_2) 1 UP bnd possible_seatings_('O',_2) 1 UP bnd possible_seatings_('P',_2) 1 UP bnd possible_seatings_('A',_3) 1 UP bnd possible_seatings_('B',_3) 1 UP bnd possible_seatings_('C',_3) 1 UP bnd possible_seatings_('D',_3) 1 UP bnd possible_seatings_('E',_3) 1 UP bnd possible_seatings_('F',_3) 1 UP bnd possible_seatings_('G',_3) 1 UP bnd possible_seatings_('H',_3) 1 UP bnd possible_seatings_('I',_3) 1 UP bnd possible_seatings_('J',_3) 1 UP bnd possible_seatings_('K',_3) 1 UP bnd possible_seatings_('L',_3) 1 UP bnd possible_seatings_('M',_3) 1 UP bnd possible_seatings_('N',_3) 1 UP bnd possible_seatings_('O',_3) 1 UP bnd possible_seatings_('P',_3) 1 UP bnd possible_seatings_('A',_4) 1 UP bnd possible_seatings_('B',_4) 1 UP bnd possible_seatings_('C',_4) 1 UP bnd possible_seatings_('D',_4) 1 UP bnd possible_seatings_('E',_4) 1 UP bnd possible_seatings_('F',_4) 1 UP bnd possible_seatings_('G',_4) 1 UP bnd possible_seatings_('H',_4) 1 UP bnd possible_seatings_('I',_4) 1 UP bnd possible_seatings_('J',_4) 1 UP bnd possible_seatings_('K',_4) 1 UP bnd possible_seatings_('L',_4) 1 UP bnd possible_seatings_('M',_4) 1 UP bnd possible_seatings_('N',_4) 1 UP bnd possible_seatings_('O',_4) 1 UP bnd possible_seatings_('P',_4) 1 ENDATA DyLP-1.10.4/Data/Sample/app0110R.cor0000755000175200017520000001462611015552002015061 0ustar coincoinNAME MYSMPS ROWS N OBJECTRW L R0000001 L R0000002 L R0000003 L R0000004 L R0000005 E R0000006 E R0000007 E R0000008 E R0000009 E R0000010 E R0000011 E R0000012 E R0000013 E R0000014 E R0000015 E R0000016 E R0000017 E R0000018 E R0000019 E R0000020 E R0000021 E R0000022 E R0000023 E R0000024 E R0000025 COLUMNS C0000001 R0000001 1. R0000006 1. C0000002 R0000001 1. R0000007 1. C0000003 R0000001 1. R0000008 1. C0000004 R0000001 1. R0000009 1. C0000005 R0000002 1. R0000010 1. C0000006 R0000002 1. R0000011 1. C0000007 R0000002 1. R0000012 1. C0000008 R0000002 1. R0000013 1. C0000009 R0000003 1. R0000014 1. C0000010 R0000003 1. R0000015 1. C0000011 R0000003 1. R0000016 1. C0000012 R0000003 1. R0000017 1. C0000013 R0000004 1. R0000018 1. C0000014 R0000004 1. R0000019 1. C0000015 R0000004 1. R0000020 1. C0000016 R0000004 1. R0000021 1. C0000017 R0000005 1. R0000022 1. C0000018 R0000005 1. R0000023 1. C0000019 R0000005 1. R0000024 1. C0000020 R0000005 1. R0000025 1. C0000021 OBJECTRW 1. R0000006 -1. C0000021 R0000010 1. C0000022 OBJECTRW 2. R0000006 1. C0000023 OBJECTRW 2. R0000007 -1. C0000023 R0000011 1. C0000024 OBJECTRW 3. R0000007 1. C0000025 OBJECTRW 3. R0000008 -1. C0000025 R0000012 1. C0000026 OBJECTRW 2. R0000008 1. C0000027 OBJECTRW 4. R0000009 -1. C0000027 R0000013 1. C0000028 OBJECTRW 5. R0000009 1. C0000029 OBJECTRW 1. R0000010 -1. C0000029 R0000014 1. C0000030 OBJECTRW 2. R0000010 1. C0000031 OBJECTRW 2. R0000011 -1. C0000031 R0000015 1. C0000032 OBJECTRW 3. R0000011 1. C0000033 OBJECTRW 3. R0000012 -1. C0000033 R0000016 1. C0000034 OBJECTRW 2. R0000012 1. C0000035 OBJECTRW 4. R0000013 -1. C0000035 R0000017 1. C0000036 OBJECTRW 5. R0000013 1. C0000037 OBJECTRW 1. R0000014 -1. C0000037 R0000018 1. C0000038 OBJECTRW 2. R0000014 1. C0000039 OBJECTRW 2. R0000015 -1. C0000039 R0000019 1. C0000040 OBJECTRW 3. R0000015 1. C0000041 OBJECTRW 3. R0000016 -1. C0000041 R0000020 1. C0000042 OBJECTRW 2. R0000016 1. C0000043 OBJECTRW 4. R0000017 -1. C0000043 R0000021 1. C0000044 OBJECTRW 5. R0000017 1. C0000045 OBJECTRW 1. R0000018 -1. C0000045 R0000022 1. C0000046 OBJECTRW 2. R0000018 1. C0000047 OBJECTRW 2. R0000019 -1. C0000047 R0000023 1. C0000048 OBJECTRW 3. R0000019 1. C0000049 OBJECTRW 3. R0000020 -1. C0000049 R0000024 1. C0000050 OBJECTRW 2. R0000020 1. C0000051 OBJECTRW 4. R0000021 -1. C0000051 R0000025 1. C0000052 OBJECTRW 5. R0000021 1. C0000053 OBJECTRW 1. R0000022 -1. C0000054 OBJECTRW 2. R0000022 1. C0000055 OBJECTRW 2. R0000023 -1. C0000056 OBJECTRW 3. R0000023 1. C0000057 OBJECTRW 3. R0000024 -1. C0000058 OBJECTRW 2. R0000024 1. C0000059 OBJECTRW 4. R0000025 -1. C0000060 OBJECTRW 5. R0000025 1. RHS RHS R0000001 3. R0000002 6. RHS R0000003 10. R0000004 2000. RHS R0000005 18. R0000006 1. RHS R0000007 1. R0000008 1. RHS R0000009 1. R0000010 2.667 RHS R0000011 1.667 R0000012 2.667 RHS R0000013 3.333 R0000014 2.667 RHS R0000015 2. R0000016 3. RHS R0000017 3. R0000018 2.667 RHS R0000019 2.667 R0000020 2.667 RHS R0000021 2.667 R0000022 2.667 RHS R0000023 2.333 R0000024 2.333 RHS R0000025 2.333 BOUNDS UP BOUND C0000029 51. UP BOUND C0000030 51. UP BOUND C0000031 51. UP BOUND C0000032 51. ENDATA DyLP-1.10.4/Data/Sample/bug.cor0000755000175200017520000000103511015552002014420 0ustar coincoinNAME BUG ROWS N obj G C0 G C1 G C2 G C3 COLUMNS x01 obj 1 x01 C3 1 x01 C1 1 x01 C0 1 x02 obj 1 x02 C2 1 x02 C1 1 x02 C0 1 x03 obj 1 x03 C3 1 x03 C2 1 x03 C0 1 x04 obj 0.5 x04 C3 1 x04 C1 1 x05 obj 0.5 x05 C2 1 x05 C1 1 x06 obj 0.5 x06 C3 1 x06 C2 1 RHS RHS C0 0 RHS C1 1 RHS C2 1 RHS C3 1 ENDATADyLP-1.10.4/Data/Sample/spec_sections.mps0000644000175200017520000000405712235603020016526 0ustar coincoin*NAME Test *Author H.I. Gassmann *Date 08/Oct/2013 *Purpose This file tests the processing of the * CoinMpsIO subsystem --- it does not make * much sense as an optimization problem * but is useful to illustrate a fully loaded MPS file NAME ROWS N obj L c1 COLUMNS x0 obj 1 c1 1 INT 'MARKER' 'INTORG' x1 obj -1 c1 10 INT 'MARKER' 'INTEND' * S1 NAME1 'MARKER' 'SOSORG' x2 obj -9 c1 5 x3 obj -6 c1 8 * NAME1 'MARKER' 'SOSEND' x4 obj 1 c1 1 x5 obj -6 c1 8 x6 obj 1 c1 1 x7 obj 1 c1 1 x8 obj -6 c1 8 x9 obj -2 c1 1 x10 obj -3 c1 1 x11 obj -1 c1 -1 x12 obj -2 c1 1 x13 obj -3 c1 1 x14 obj -9 c1 5 RHS rhs c1 10000 RANGES range c1 2000 BOUNDS LI BOUND x1 2 UI BOUND x1 3 SOS S1 set1 x2 x3 S2 set2 x4 20 x5 40 QUADOBJ x6 x6 1 x6 x7 2 x7 x7 7 CSECTION cone1 0.0 QUAD x8 x9 x10 CSECTION cone2 0.0 RQUAD x11 x12 x13 x14 *BASIS * XU x6 c1 * BS x7 ENDATA DyLP-1.10.4/Data/Sample/p0201.mps0000644000175200017520000023142210430174061014430 0ustar coincoin*NAME: p0201 *ROWS: 133 *COLUMNS: 201 *INTEGER: 201 *NONZERO: 1923 *BEST SOLN: 7615 (opt) *LP SOLN: 6875.0 *SOURCE: Crowder-Johnson-Padberg test set * * E. Andrew Boyd (Rice University) *APPLICATION: unknown *COMMENTS: pure 0/1 IP * 26 SOS constraints * NAME P0201 ROWS N R1001 L R1002 L R1003 L R1004 L R1005 L R1006 L R1007 L R1008 L R1009 L R1010 L R1011 L R1012 L R1013 L R1014 L R1015 L R1016 L R1017 L R1018 L R1019 L R1020 L R1021 L R1022 L R1023 L R1024 L R1025 L R1026 L R1027 L R1028 L R1029 L R1030 L R1031 L R1032 L R1033 L R1034 L R1035 L R1036 L R1037 L R1038 L R1039 L R1040 L R1041 L R1042 L R1043 L R1044 L R1045 L R1046 L R1047 L R1048 L R1049 L R1050 L R1051 L R1052 L R1053 L R1054 L R1055 L R1056 L R1057 L R1058 L R1059 L R1060 L R1061 L R1062 L R1063 L R1064 L R1065 L R1066 L R1067 L R1068 L R1069 L R1070 L R1071 L R1072 L R1073 L R1074 L R1075 L R1076 L R1077 L R1078 L R1079 L R1080 L R1081 L R1082 L R1083 L R1084 L R1085 L R1086 L R1087 L R1088 L R1089 L R1090 L R1091 L R1092 L R1093 L R1094 L R1095 L R1096 L R1097 L R1098 L R1099 L R1100 L R1101 L R1102 L R1103 L R1104 L R1105 L R1106 L R1107 L R1108 L R1109 L R1110 L R1111 L R1112 L R1113 L R1114 L R1115 L R1116 L R1117 L R1118 L R1119 L R1120 L R1121 L R1122 L R1123 L R1124 L R1125 L R1126 L R1127 L R1128 L R1129 L R1130 L R1131 L R1132 L R1133 L R1134 COLUMNS MARK0000 'MARKER' 'INTORG' C1001 R1001 50 R1002 1 C1001 R1045 -1 R1048 -1 C1001 R1051 -1 R1054 -1 C1001 R1057 -1 R1060 -1 C1001 R1063 -1 R1066 -1 C1001 R1069 -1 R1072 -1 C1002 R1001 100 R1002 2 C1002 R1045 -2 R1048 -2 C1002 R1051 -2 R1054 -2 C1002 R1057 -2 R1060 -2 C1002 R1063 -2 R1066 -2 C1002 R1069 -2 R1072 -2 C1003 R1001 200 R1002 4 C1003 R1045 -4 R1048 -4 C1003 R1051 -4 R1054 -4 C1003 R1057 -4 R1060 -4 C1003 R1063 -4 R1066 -4 C1003 R1069 -4 R1072 -4 C1004 R1001 400 R1002 8 C1004 R1045 -8 R1048 -8 C1004 R1051 -8 R1054 -8 C1004 R1057 -8 R1060 -8 C1004 R1063 -8 R1066 -8 C1004 R1069 -8 R1072 -8 C1005 R1001 800 R1002 16 C1005 R1045 -16 R1048 -16 C1005 R1051 -16 R1054 -16 C1005 R1057 -16 R1060 -16 C1005 R1063 -16 R1066 -16 C1005 R1069 -16 R1072 -16 C1006 R1001 1600 R1002 32 C1006 R1045 -32 R1048 -32 C1006 R1051 -32 R1054 -32 C1006 R1057 -32 R1060 -32 C1006 R1063 -32 R1066 -32 C1006 R1069 -32 R1072 -32 C1007 R1001 3200 R1002 64 C1007 R1045 -64 R1048 -64 C1007 R1051 -64 R1054 -64 C1007 R1057 -64 R1060 -64 C1007 R1063 -64 R1066 -64 C1007 R1069 -64 R1072 -64 C1008 R1001 50 R1003 1 C1008 R1046 -1 R1049 -1 C1008 R1052 -1 R1055 -1 C1008 R1058 -1 R1061 -1 C1008 R1064 -1 R1067 -1 C1008 R1070 -1 R1073 -1 C1009 R1001 100 R1003 2 C1009 R1046 -2 R1049 -2 C1009 R1052 -2 R1055 -2 C1009 R1058 -2 R1061 -2 C1009 R1064 -2 R1067 -2 C1009 R1070 -2 R1073 -2 C1010 R1001 200 R1003 4 C1010 R1046 -4 R1049 -4 C1010 R1052 -4 R1055 -4 C1010 R1058 -4 R1061 -4 C1010 R1064 -4 R1067 -4 C1010 R1070 -4 R1073 -4 C1011 R1001 400 R1003 8 C1011 R1046 -8 R1049 -8 C1011 R1052 -8 R1055 -8 C1011 R1058 -8 R1061 -8 C1011 R1064 -8 R1067 -8 C1011 R1070 -8 R1073 -8 C1012 R1001 800 R1003 16 C1012 R1046 -16 R1049 -16 C1012 R1052 -16 R1055 -16 C1012 R1058 -16 R1061 -16 C1012 R1064 -16 R1067 -16 C1012 R1070 -16 R1073 -16 C1013 R1001 1600 R1003 32 C1013 R1046 -32 R1049 -32 C1013 R1052 -32 R1055 -32 C1013 R1058 -32 R1061 -32 C1013 R1064 -32 R1067 -32 C1013 R1070 -32 R1073 -32 C1014 R1001 3200 R1003 64 C1014 R1046 -64 R1049 -64 C1014 R1052 -64 R1055 -64 C1014 R1058 -64 R1061 -64 C1014 R1064 -64 R1067 -64 C1014 R1070 -64 R1073 -64 C1015 R1001 150 R1004 1 C1015 R1047 -1 R1050 -1 C1015 R1053 -1 R1056 -1 C1015 R1059 -1 R1062 -1 C1015 R1065 -1 R1068 -1 C1015 R1071 -1 R1074 -1 C1016 R1001 300 R1004 2 C1016 R1047 -2 R1050 -2 C1016 R1053 -2 R1056 -2 C1016 R1059 -2 R1062 -2 C1016 R1065 -2 R1068 -2 C1016 R1071 -2 R1074 -2 C1017 R1001 600 R1004 4 C1017 R1047 -4 R1050 -4 C1017 R1053 -4 R1056 -4 C1017 R1059 -4 R1062 -4 C1017 R1065 -4 R1068 -4 C1017 R1071 -4 R1074 -4 C1018 R1001 1200 R1004 8 C1018 R1047 -8 R1050 -8 C1018 R1053 -8 R1056 -8 C1018 R1059 -8 R1062 -8 C1018 R1065 -8 R1068 -8 C1018 R1071 -8 R1074 -8 C1019 R1001 2400 R1004 16 C1019 R1047 -16 R1050 -16 C1019 R1053 -16 R1056 -16 C1019 R1059 -16 R1062 -16 C1019 R1065 -16 R1068 -16 C1019 R1071 -16 R1074 -16 C1020 R1001 4800 R1004 32 C1020 R1047 -32 R1050 -32 C1020 R1053 -32 R1056 -32 C1020 R1059 -32 R1062 -32 C1020 R1065 -32 R1068 -32 C1020 R1071 -32 R1074 -32 C1021 R1001 9600 R1004 64 C1021 R1047 -64 R1050 -64 C1021 R1053 -64 R1056 -64 C1021 R1059 -64 R1062 -64 C1021 R1065 -64 R1068 -64 C1021 R1071 -64 R1074 -64 C1022 R1001 500 R1005 1 C1022 R1006 -1 R1045 -10 C1022 R1048 -10 R1051 -10 C1022 R1054 -10 R1057 -10 C1022 R1060 -10 R1063 -10 C1022 R1066 -10 R1069 -10 C1022 R1072 -10 R1075 1 C1022 R1081 -1 C1023 R1001 560 R1005 1 C1023 R1006 -1 R1045 -10 C1023 R1048 -10 R1051 -10 C1023 R1054 -10 R1057 -10 C1023 R1060 -10 R1063 -10 C1023 R1066 -10 R1069 -10 C1023 R1072 -10 R1076 1 C1023 R1081 -1 C1024 R1001 600 R1005 1 C1024 R1006 -1 R1045 -10 C1024 R1048 -10 R1051 -10 C1024 R1054 -10 R1057 -10 C1024 R1060 -10 R1063 -10 C1024 R1066 -10 R1069 -10 C1024 R1072 -10 R1077 1 C1024 R1081 -1 C1025 R1001 560 R1005 1 C1025 R1006 -1 R1046 -10 C1025 R1049 -10 R1052 -10 C1025 R1055 -10 R1058 -10 C1025 R1061 -10 R1064 -10 C1025 R1067 -10 R1070 -10 C1025 R1073 -10 R1075 1 C1025 R1082 -1 C1026 R1001 500 R1005 1 C1026 R1006 -1 R1046 -10 C1026 R1049 -10 R1052 -10 C1026 R1055 -10 R1058 -10 C1026 R1061 -10 R1064 -10 C1026 R1067 -10 R1070 -10 C1026 R1073 -10 R1076 1 C1026 R1082 -1 C1027 R1001 600 R1005 1 C1027 R1006 -1 R1046 -10 C1027 R1049 -10 R1052 -10 C1027 R1055 -10 R1058 -10 C1027 R1061 -10 R1064 -10 C1027 R1067 -10 R1070 -10 C1027 R1073 -10 R1077 1 C1027 R1082 -1 C1028 R1001 850 R1005 1 C1028 R1006 -1 R1047 -5 C1028 R1050 -5 R1053 -5 C1028 R1056 -5 R1059 -5 C1028 R1062 -5 R1065 -5 C1028 R1068 -5 R1071 -5 C1028 R1074 -5 R1075 1 C1028 R1083 -1 C1029 R1001 850 R1005 1 C1029 R1006 -1 R1047 -5 C1029 R1050 -5 R1053 -5 C1029 R1056 -5 R1059 -5 C1029 R1062 -5 R1065 -5 C1029 R1068 -5 R1071 -5 C1029 R1074 -5 R1076 1 C1029 R1083 -1 C1030 R1001 750 R1005 1 C1030 R1006 -1 R1047 -5 C1030 R1050 -5 R1053 -5 C1030 R1056 -5 R1059 -5 C1030 R1062 -5 R1065 -5 C1030 R1068 -5 R1071 -5 C1030 R1074 -5 R1077 1 C1030 R1083 -1 C1031 R1001 500 R1007 1 C1031 R1008 -1 R1045 -10 C1031 R1048 -10 R1051 -10 C1031 R1054 -10 R1057 -10 C1031 R1060 -10 R1063 -10 C1031 R1066 -10 R1069 -10 C1031 R1072 -10 R1078 1 C1031 R1084 -1 C1032 R1001 560 R1007 1 C1032 R1008 -1 R1045 -10 C1032 R1048 -10 R1051 -10 C1032 R1054 -10 R1057 -10 C1032 R1060 -10 R1063 -10 C1032 R1066 -10 R1069 -10 C1032 R1072 -10 R1079 1 C1032 R1084 -1 C1033 R1001 600 R1007 1 C1033 R1008 -1 R1045 -10 C1033 R1048 -10 R1051 -10 C1033 R1054 -10 R1057 -10 C1033 R1060 -10 R1063 -10 C1033 R1066 -10 R1069 -10 C1033 R1072 -10 R1080 1 C1033 R1084 -1 C1034 R1001 560 R1007 1 C1034 R1008 -1 R1046 -10 C1034 R1049 -10 R1052 -10 C1034 R1055 -10 R1058 -10 C1034 R1061 -10 R1064 -10 C1034 R1067 -10 R1070 -10 C1034 R1073 -10 R1078 1 C1034 R1085 -1 C1035 R1001 500 R1007 1 C1035 R1008 -1 R1046 -10 C1035 R1049 -10 R1052 -10 C1035 R1055 -10 R1058 -10 C1035 R1061 -10 R1064 -10 C1035 R1067 -10 R1070 -10 C1035 R1073 -10 R1079 1 C1035 R1085 -1 C1036 R1001 600 R1007 1 C1036 R1008 -1 R1046 -10 C1036 R1049 -10 R1052 -10 C1036 R1055 -10 R1058 -10 C1036 R1061 -10 R1064 -10 C1036 R1067 -10 R1070 -10 C1036 R1073 -10 R1080 1 C1036 R1085 -1 C1037 R1001 850 R1007 1 C1037 R1008 -1 R1047 -5 C1037 R1050 -5 R1053 -5 C1037 R1056 -5 R1059 -5 C1037 R1062 -5 R1065 -5 C1037 R1068 -5 R1071 -5 C1037 R1074 -5 R1078 1 C1037 R1086 -1 C1038 R1001 850 R1007 1 C1038 R1008 -1 R1047 -5 C1038 R1050 -5 R1053 -5 C1038 R1056 -5 R1059 -5 C1038 R1062 -5 R1065 -5 C1038 R1068 -5 R1071 -5 C1038 R1074 -5 R1079 1 C1038 R1086 -1 C1039 R1001 750 R1007 1 C1039 R1008 -1 R1047 -5 C1039 R1050 -5 R1053 -5 C1039 R1056 -5 R1059 -5 C1039 R1062 -5 R1065 -5 C1039 R1068 -5 R1071 -5 C1039 R1074 -5 R1080 1 C1039 R1086 -1 C1040 R1001 450 R1009 1 C1040 R1010 -1 R1048 -10 C1040 R1051 -10 R1054 -10 C1040 R1057 -10 R1060 -10 C1040 R1063 -10 R1066 -10 C1040 R1069 -10 R1072 -10 C1040 R1081 1 R1087 -1 C1041 R1001 510 R1009 1 C1041 R1010 -1 R1048 -10 C1041 R1051 -10 R1054 -10 C1041 R1057 -10 R1060 -10 C1041 R1063 -10 R1066 -10 C1041 R1069 -10 R1072 -10 C1041 R1082 1 R1087 -1 C1042 R1001 550 R1009 1 C1042 R1010 -1 R1048 -10 C1042 R1051 -10 R1054 -10 C1042 R1057 -10 R1060 -10 C1042 R1063 -10 R1066 -10 C1042 R1069 -10 R1072 -10 C1042 R1083 1 R1087 -1 C1043 R1001 510 R1009 1 C1043 R1010 -1 R1049 -10 C1043 R1052 -10 R1055 -10 C1043 R1058 -10 R1061 -10 C1043 R1064 -10 R1067 -10 C1043 R1070 -10 R1073 -10 C1043 R1081 1 R1088 -1 C1044 R1001 450 R1009 1 C1044 R1010 -1 R1049 -10 C1044 R1052 -10 R1055 -10 C1044 R1058 -10 R1061 -10 C1044 R1064 -10 R1067 -10 C1044 R1070 -10 R1073 -10 C1044 R1082 1 R1088 -1 C1045 R1001 550 R1009 1 C1045 R1010 -1 R1049 -10 C1045 R1052 -10 R1055 -10 C1045 R1058 -10 R1061 -10 C1045 R1064 -10 R1067 -10 C1045 R1070 -10 R1073 -10 C1045 R1083 1 R1088 -1 C1046 R1001 775 R1009 1 C1046 R1010 -1 R1050 -5 C1046 R1053 -5 R1056 -5 C1046 R1059 -5 R1062 -5 C1046 R1065 -5 R1068 -5 C1046 R1071 -5 R1074 -5 C1046 R1081 1 R1089 -1 C1047 R1001 775 R1009 1 C1047 R1010 -1 R1050 -5 C1047 R1053 -5 R1056 -5 C1047 R1059 -5 R1062 -5 C1047 R1065 -5 R1068 -5 C1047 R1071 -5 R1074 -5 C1047 R1082 1 R1089 -1 C1048 R1001 675 R1009 1 C1048 R1010 -1 R1050 -5 C1048 R1053 -5 R1056 -5 C1048 R1059 -5 R1062 -5 C1048 R1065 -5 R1068 -5 C1048 R1071 -5 R1074 -5 C1048 R1083 1 R1089 -1 C1049 R1001 450 R1011 1 C1049 R1012 -1 R1048 -10 C1049 R1051 -10 R1054 -10 C1049 R1057 -10 R1060 -10 C1049 R1063 -10 R1066 -10 C1049 R1069 -10 R1072 -10 C1049 R1084 1 R1090 -1 C1050 R1001 510 R1011 1 C1050 R1012 -1 R1048 -10 C1050 R1051 -10 R1054 -10 C1050 R1057 -10 R1060 -10 C1050 R1063 -10 R1066 -10 C1050 R1069 -10 R1072 -10 C1050 R1085 1 R1090 -1 C1051 R1001 550 R1011 1 C1051 R1012 -1 R1048 -10 C1051 R1051 -10 R1054 -10 C1051 R1057 -10 R1060 -10 C1051 R1063 -10 R1066 -10 C1051 R1069 -10 R1072 -10 C1051 R1086 1 R1090 -1 C1052 R1001 510 R1011 1 C1052 R1012 -1 R1049 -10 C1052 R1052 -10 R1055 -10 C1052 R1058 -10 R1061 -10 C1052 R1064 -10 R1067 -10 C1052 R1070 -10 R1073 -10 C1052 R1084 1 R1091 -1 C1053 R1001 450 R1011 1 C1053 R1012 -1 R1049 -10 C1053 R1052 -10 R1055 -10 C1053 R1058 -10 R1061 -10 C1053 R1064 -10 R1067 -10 C1053 R1070 -10 R1073 -10 C1053 R1085 1 R1091 -1 C1054 R1001 550 R1011 1 C1054 R1012 -1 R1049 -10 C1054 R1052 -10 R1055 -10 C1054 R1058 -10 R1061 -10 C1054 R1064 -10 R1067 -10 C1054 R1070 -10 R1073 -10 C1054 R1086 1 R1091 -1 C1055 R1001 775 R1011 1 C1055 R1012 -1 R1050 -5 C1055 R1053 -5 R1056 -5 C1055 R1059 -5 R1062 -5 C1055 R1065 -5 R1068 -5 C1055 R1071 -5 R1074 -5 C1055 R1084 1 R1092 -1 C1056 R1001 775 R1011 1 C1056 R1012 -1 R1050 -5 C1056 R1053 -5 R1056 -5 C1056 R1059 -5 R1062 -5 C1056 R1065 -5 R1068 -5 C1056 R1071 -5 R1074 -5 C1056 R1085 1 R1092 -1 C1057 R1001 675 R1011 1 C1057 R1012 -1 R1050 -5 C1057 R1053 -5 R1056 -5 C1057 R1059 -5 R1062 -5 C1057 R1065 -5 R1068 -5 C1057 R1071 -5 R1074 -5 C1057 R1086 1 R1092 -1 C1058 R1001 400 R1013 1 C1058 R1014 -1 R1051 -10 C1058 R1054 -10 R1057 -10 C1058 R1060 -10 R1063 -10 C1058 R1066 -10 R1069 -10 C1058 R1072 -10 R1087 1 C1058 R1093 -1 C1059 R1001 460 R1013 1 C1059 R1014 -1 R1051 -10 C1059 R1054 -10 R1057 -10 C1059 R1060 -10 R1063 -10 C1059 R1066 -10 R1069 -10 C1059 R1072 -10 R1088 1 C1059 R1093 -1 C1060 R1001 500 R1013 1 C1060 R1014 -1 R1051 -10 C1060 R1054 -10 R1057 -10 C1060 R1060 -10 R1063 -10 C1060 R1066 -10 R1069 -10 C1060 R1072 -10 R1089 1 C1060 R1093 -1 C1061 R1001 460 R1013 1 C1061 R1014 -1 R1052 -10 C1061 R1055 -10 R1058 -10 C1061 R1061 -10 R1064 -10 C1061 R1067 -10 R1070 -10 C1061 R1073 -10 R1087 1 C1061 R1094 -1 C1062 R1001 400 R1013 1 C1062 R1014 -1 R1052 -10 C1062 R1055 -10 R1058 -10 C1062 R1061 -10 R1064 -10 C1062 R1067 -10 R1070 -10 C1062 R1073 -10 R1088 1 C1062 R1094 -1 C1063 R1001 500 R1013 1 C1063 R1014 -1 R1052 -10 C1063 R1055 -10 R1058 -10 C1063 R1061 -10 R1064 -10 C1063 R1067 -10 R1070 -10 C1063 R1073 -10 R1089 1 C1063 R1094 -1 C1064 R1001 700 R1013 1 C1064 R1014 -1 R1053 -5 C1064 R1056 -5 R1059 -5 C1064 R1062 -5 R1065 -5 C1064 R1068 -5 R1071 -5 C1064 R1074 -5 R1087 1 C1064 R1095 -1 C1065 R1001 700 R1013 1 C1065 R1014 -1 R1053 -5 C1065 R1056 -5 R1059 -5 C1065 R1062 -5 R1065 -5 C1065 R1068 -5 R1071 -5 C1065 R1074 -5 R1088 1 C1065 R1095 -1 C1066 R1001 600 R1013 1 C1066 R1014 -1 R1053 -5 C1066 R1056 -5 R1059 -5 C1066 R1062 -5 R1065 -5 C1066 R1068 -5 R1071 -5 C1066 R1074 -5 R1089 1 C1066 R1095 -1 C1067 R1001 400 R1015 1 C1067 R1016 -1 R1051 -10 C1067 R1054 -10 R1057 -10 C1067 R1060 -10 R1063 -10 C1067 R1066 -10 R1069 -10 C1067 R1072 -10 R1090 1 C1067 R1096 -1 C1068 R1001 460 R1015 1 C1068 R1016 -1 R1051 -10 C1068 R1054 -10 R1057 -10 C1068 R1060 -10 R1063 -10 C1068 R1066 -10 R1069 -10 C1068 R1072 -10 R1091 1 C1068 R1096 -1 C1069 R1001 500 R1015 1 C1069 R1016 -1 R1051 -10 C1069 R1054 -10 R1057 -10 C1069 R1060 -10 R1063 -10 C1069 R1066 -10 R1069 -10 C1069 R1072 -10 R1092 1 C1069 R1096 -1 C1070 R1001 460 R1015 1 C1070 R1016 -1 R1052 -10 C1070 R1055 -10 R1058 -10 C1070 R1061 -10 R1064 -10 C1070 R1067 -10 R1070 -10 C1070 R1073 -10 R1090 1 C1070 R1097 -1 C1071 R1001 400 R1015 1 C1071 R1016 -1 R1052 -10 C1071 R1055 -10 R1058 -10 C1071 R1061 -10 R1064 -10 C1071 R1067 -10 R1070 -10 C1071 R1073 -10 R1091 1 C1071 R1097 -1 C1072 R1001 500 R1015 1 C1072 R1016 -1 R1052 -10 C1072 R1055 -10 R1058 -10 C1072 R1061 -10 R1064 -10 C1072 R1067 -10 R1070 -10 C1072 R1073 -10 R1092 1 C1072 R1097 -1 C1073 R1001 700 R1015 1 C1073 R1016 -1 R1053 -5 C1073 R1056 -5 R1059 -5 C1073 R1062 -5 R1065 -5 C1073 R1068 -5 R1071 -5 C1073 R1074 -5 R1090 1 C1073 R1098 -1 C1074 R1001 700 R1015 1 C1074 R1016 -1 R1053 -5 C1074 R1056 -5 R1059 -5 C1074 R1062 -5 R1065 -5 C1074 R1068 -5 R1071 -5 C1074 R1074 -5 R1091 1 C1074 R1098 -1 C1075 R1001 600 R1015 1 C1075 R1016 -1 R1053 -5 C1075 R1056 -5 R1059 -5 C1075 R1062 -5 R1065 -5 C1075 R1068 -5 R1071 -5 C1075 R1074 -5 R1092 1 C1075 R1098 -1 C1076 R1001 350 R1017 1 C1076 R1018 -1 R1054 -10 C1076 R1057 -10 R1060 -10 C1076 R1063 -10 R1066 -10 C1076 R1069 -10 R1072 -10 C1076 R1093 1 R1099 -1 C1077 R1001 410 R1017 1 C1077 R1018 -1 R1054 -10 C1077 R1057 -10 R1060 -10 C1077 R1063 -10 R1066 -10 C1077 R1069 -10 R1072 -10 C1077 R1094 1 R1099 -1 C1078 R1001 450 R1017 1 C1078 R1018 -1 R1054 -10 C1078 R1057 -10 R1060 -10 C1078 R1063 -10 R1066 -10 C1078 R1069 -10 R1072 -10 C1078 R1095 1 R1099 -1 C1079 R1001 410 R1017 1 C1079 R1018 -1 R1055 -10 C1079 R1058 -10 R1061 -10 C1079 R1064 -10 R1067 -10 C1079 R1070 -10 R1073 -10 C1079 R1093 1 R1100 -1 C1080 R1001 350 R1017 1 C1080 R1018 -1 R1055 -10 C1080 R1058 -10 R1061 -10 C1080 R1064 -10 R1067 -10 C1080 R1070 -10 R1073 -10 C1080 R1094 1 R1100 -1 C1081 R1001 450 R1017 1 C1081 R1018 -1 R1055 -10 C1081 R1058 -10 R1061 -10 C1081 R1064 -10 R1067 -10 C1081 R1070 -10 R1073 -10 C1081 R1095 1 R1100 -1 C1082 R1001 625 R1017 1 C1082 R1018 -1 R1056 -5 C1082 R1059 -5 R1062 -5 C1082 R1065 -5 R1068 -5 C1082 R1071 -5 R1074 -5 C1082 R1093 1 R1101 -1 C1083 R1001 625 R1017 1 C1083 R1018 -1 R1056 -5 C1083 R1059 -5 R1062 -5 C1083 R1065 -5 R1068 -5 C1083 R1071 -5 R1074 -5 C1083 R1094 1 R1101 -1 C1084 R1001 525 R1017 1 C1084 R1018 -1 R1056 -5 C1084 R1059 -5 R1062 -5 C1084 R1065 -5 R1068 -5 C1084 R1071 -5 R1074 -5 C1084 R1095 1 R1101 -1 C1085 R1001 350 R1019 1 C1085 R1020 -1 R1054 -10 C1085 R1057 -10 R1060 -10 C1085 R1063 -10 R1066 -10 C1085 R1069 -10 R1072 -10 C1085 R1096 1 R1102 -1 C1086 R1001 410 R1019 1 C1086 R1020 -1 R1054 -10 C1086 R1057 -10 R1060 -10 C1086 R1063 -10 R1066 -10 C1086 R1069 -10 R1072 -10 C1086 R1097 1 R1102 -1 C1087 R1001 450 R1019 1 C1087 R1020 -1 R1054 -10 C1087 R1057 -10 R1060 -10 C1087 R1063 -10 R1066 -10 C1087 R1069 -10 R1072 -10 C1087 R1098 1 R1102 -1 C1088 R1001 410 R1019 1 C1088 R1020 -1 R1055 -10 C1088 R1058 -10 R1061 -10 C1088 R1064 -10 R1067 -10 C1088 R1070 -10 R1073 -10 C1088 R1096 1 R1103 -1 C1089 R1001 350 R1019 1 C1089 R1020 -1 R1055 -10 C1089 R1058 -10 R1061 -10 C1089 R1064 -10 R1067 -10 C1089 R1070 -10 R1073 -10 C1089 R1097 1 R1103 -1 C1090 R1001 450 R1019 1 C1090 R1020 -1 R1055 -10 C1090 R1058 -10 R1061 -10 C1090 R1064 -10 R1067 -10 C1090 R1070 -10 R1073 -10 C1090 R1098 1 R1103 -1 C1091 R1001 625 R1019 1 C1091 R1020 -1 R1056 -5 C1091 R1059 -5 R1062 -5 C1091 R1065 -5 R1068 -5 C1091 R1071 -5 R1074 -5 C1091 R1096 1 R1104 -1 C1092 R1001 625 R1019 1 C1092 R1020 -1 R1056 -5 C1092 R1059 -5 R1062 -5 C1092 R1065 -5 R1068 -5 C1092 R1071 -5 R1074 -5 C1092 R1097 1 R1104 -1 C1093 R1001 525 R1019 1 C1093 R1020 -1 R1056 -5 C1093 R1059 -5 R1062 -5 C1093 R1065 -5 R1068 -5 C1093 R1071 -5 R1074 -5 C1093 R1098 1 R1104 -1 C1094 R1001 300 R1021 1 C1094 R1022 -1 R1057 -10 C1094 R1060 -10 R1063 -10 C1094 R1066 -10 R1069 -10 C1094 R1072 -10 R1099 1 C1094 R1105 -1 C1095 R1001 360 R1021 1 C1095 R1022 -1 R1057 -10 C1095 R1060 -10 R1063 -10 C1095 R1066 -10 R1069 -10 C1095 R1072 -10 R1100 1 C1095 R1105 -1 C1096 R1001 400 R1021 1 C1096 R1022 -1 R1057 -10 C1096 R1060 -10 R1063 -10 C1096 R1066 -10 R1069 -10 C1096 R1072 -10 R1101 1 C1096 R1105 -1 C1097 R1001 360 R1021 1 C1097 R1022 -1 R1058 -10 C1097 R1061 -10 R1064 -10 C1097 R1067 -10 R1070 -10 C1097 R1073 -10 R1099 1 C1097 R1106 -1 C1098 R1001 300 R1021 1 C1098 R1022 -1 R1058 -10 C1098 R1061 -10 R1064 -10 C1098 R1067 -10 R1070 -10 C1098 R1073 -10 R1100 1 C1098 R1106 -1 C1099 R1001 400 R1021 1 C1099 R1022 -1 R1058 -10 C1099 R1061 -10 R1064 -10 C1099 R1067 -10 R1070 -10 C1099 R1073 -10 R1101 1 C1099 R1106 -1 C1100 R1001 550 R1021 1 C1100 R1022 -1 R1059 -5 C1100 R1062 -5 R1065 -5 C1100 R1068 -5 R1071 -5 C1100 R1074 -5 R1099 1 C1100 R1107 -1 C1101 R1001 550 R1021 1 C1101 R1022 -1 R1059 -5 C1101 R1062 -5 R1065 -5 C1101 R1068 -5 R1071 -5 C1101 R1074 -5 R1100 1 C1101 R1107 -1 C1102 R1001 450 R1021 1 C1102 R1022 -1 R1059 -5 C1102 R1062 -5 R1065 -5 C1102 R1068 -5 R1071 -5 C1102 R1074 -5 R1101 1 C1102 R1107 -1 C1103 R1001 300 R1023 1 C1103 R1024 -1 R1057 -10 C1103 R1060 -10 R1063 -10 C1103 R1066 -10 R1069 -10 C1103 R1072 -10 R1102 1 C1103 R1108 -1 C1104 R1001 360 R1023 1 C1104 R1024 -1 R1057 -10 C1104 R1060 -10 R1063 -10 C1104 R1066 -10 R1069 -10 C1104 R1072 -10 R1103 1 C1104 R1108 -1 C1105 R1001 400 R1023 1 C1105 R1024 -1 R1057 -10 C1105 R1060 -10 R1063 -10 C1105 R1066 -10 R1069 -10 C1105 R1072 -10 R1104 1 C1105 R1108 -1 C1106 R1001 360 R1023 1 C1106 R1024 -1 R1058 -10 C1106 R1061 -10 R1064 -10 C1106 R1067 -10 R1070 -10 C1106 R1073 -10 R1102 1 C1106 R1109 -1 C1107 R1001 300 R1023 1 C1107 R1024 -1 R1058 -10 C1107 R1061 -10 R1064 -10 C1107 R1067 -10 R1070 -10 C1107 R1073 -10 R1103 1 C1107 R1109 -1 C1108 R1001 400 R1023 1 C1108 R1024 -1 R1058 -10 C1108 R1061 -10 R1064 -10 C1108 R1067 -10 R1070 -10 C1108 R1073 -10 R1104 1 C1108 R1109 -1 C1109 R1001 550 R1023 1 C1109 R1024 -1 R1059 -5 C1109 R1062 -5 R1065 -5 C1109 R1068 -5 R1071 -5 C1109 R1074 -5 R1102 1 C1109 R1110 -1 C1110 R1001 550 R1023 1 C1110 R1024 -1 R1059 -5 C1110 R1062 -5 R1065 -5 C1110 R1068 -5 R1071 -5 C1110 R1074 -5 R1103 1 C1110 R1110 -1 C1111 R1001 450 R1023 1 C1111 R1024 -1 R1059 -5 C1111 R1062 -5 R1065 -5 C1111 R1068 -5 R1071 -5 C1111 R1074 -5 R1104 1 C1111 R1110 -1 C1112 R1001 250 R1025 1 C1112 R1026 -1 R1060 -10 C1112 R1063 -10 R1066 -10 C1112 R1069 -10 R1072 -10 C1112 R1105 1 R1111 -1 C1113 R1001 310 R1025 1 C1113 R1026 -1 R1060 -10 C1113 R1063 -10 R1066 -10 C1113 R1069 -10 R1072 -10 C1113 R1106 1 R1111 -1 C1114 R1001 350 R1025 1 C1114 R1026 -1 R1060 -10 C1114 R1063 -10 R1066 -10 C1114 R1069 -10 R1072 -10 C1114 R1107 1 R1111 -1 C1115 R1001 310 R1025 1 C1115 R1026 -1 R1061 -10 C1115 R1064 -10 R1067 -10 C1115 R1070 -10 R1073 -10 C1115 R1105 1 R1112 -1 C1116 R1001 250 R1025 1 C1116 R1026 -1 R1061 -10 C1116 R1064 -10 R1067 -10 C1116 R1070 -10 R1073 -10 C1116 R1106 1 R1112 -1 C1117 R1001 350 R1025 1 C1117 R1026 -1 R1061 -10 C1117 R1064 -10 R1067 -10 C1117 R1070 -10 R1073 -10 C1117 R1107 1 R1112 -1 C1118 R1001 475 R1025 1 C1118 R1026 -1 R1062 -5 C1118 R1065 -5 R1068 -5 C1118 R1071 -5 R1074 -5 C1118 R1105 1 R1113 -1 C1119 R1001 475 R1025 1 C1119 R1026 -1 R1062 -5 C1119 R1065 -5 R1068 -5 C1119 R1071 -5 R1074 -5 C1119 R1106 1 R1113 -1 C1120 R1001 375 R1025 1 C1120 R1026 -1 R1062 -5 C1120 R1065 -5 R1068 -5 C1120 R1071 -5 R1074 -5 C1120 R1107 1 R1113 -1 C1121 R1001 250 R1027 1 C1121 R1028 -1 R1060 -10 C1121 R1063 -10 R1066 -10 C1121 R1069 -10 R1072 -10 C1121 R1108 1 R1114 -1 C1122 R1001 310 R1027 1 C1122 R1028 -1 R1060 -10 C1122 R1063 -10 R1066 -10 C1122 R1069 -10 R1072 -10 C1122 R1109 1 R1114 -1 C1123 R1001 350 R1027 1 C1123 R1028 -1 R1060 -10 C1123 R1063 -10 R1066 -10 C1123 R1069 -10 R1072 -10 C1123 R1110 1 R1114 -1 C1124 R1001 310 R1027 1 C1124 R1028 -1 R1061 -10 C1124 R1064 -10 R1067 -10 C1124 R1070 -10 R1073 -10 C1124 R1108 1 R1115 -1 C1125 R1001 250 R1027 1 C1125 R1028 -1 R1061 -10 C1125 R1064 -10 R1067 -10 C1125 R1070 -10 R1073 -10 C1125 R1109 1 R1115 -1 C1126 R1001 350 R1027 1 C1126 R1028 -1 R1061 -10 C1126 R1064 -10 R1067 -10 C1126 R1070 -10 R1073 -10 C1126 R1110 1 R1115 -1 C1127 R1001 475 R1027 1 C1127 R1028 -1 R1062 -5 C1127 R1065 -5 R1068 -5 C1127 R1071 -5 R1074 -5 C1127 R1108 1 R1116 -1 C1128 R1001 475 R1027 1 C1128 R1028 -1 R1062 -5 C1128 R1065 -5 R1068 -5 C1128 R1071 -5 R1074 -5 C1128 R1109 1 R1116 -1 C1129 R1001 375 R1027 1 C1129 R1028 -1 R1062 -5 C1129 R1065 -5 R1068 -5 C1129 R1071 -5 R1074 -5 C1129 R1110 1 R1116 -1 C1130 R1001 200 R1029 1 C1130 R1030 -1 R1063 -10 C1130 R1066 -10 R1069 -10 C1130 R1072 -10 R1111 1 C1130 R1117 -1 C1131 R1001 260 R1029 1 C1131 R1030 -1 R1063 -10 C1131 R1066 -10 R1069 -10 C1131 R1072 -10 R1112 1 C1131 R1117 -1 C1132 R1001 300 R1029 1 C1132 R1030 -1 R1063 -10 C1132 R1066 -10 R1069 -10 C1132 R1072 -10 R1113 1 C1132 R1117 -1 C1133 R1001 260 R1029 1 C1133 R1030 -1 R1064 -10 C1133 R1067 -10 R1070 -10 C1133 R1073 -10 R1111 1 C1133 R1118 -1 C1134 R1001 200 R1029 1 C1134 R1030 -1 R1064 -10 C1134 R1067 -10 R1070 -10 C1134 R1073 -10 R1112 1 C1134 R1118 -1 C1135 R1001 300 R1029 1 C1135 R1030 -1 R1064 -10 C1135 R1067 -10 R1070 -10 C1135 R1073 -10 R1113 1 C1135 R1118 -1 C1136 R1001 400 R1029 1 C1136 R1030 -1 R1065 -5 C1136 R1068 -5 R1071 -5 C1136 R1074 -5 R1111 1 C1136 R1119 -1 C1137 R1001 400 R1029 1 C1137 R1030 -1 R1065 -5 C1137 R1068 -5 R1071 -5 C1137 R1074 -5 R1112 1 C1137 R1119 -1 C1138 R1001 300 R1029 1 C1138 R1030 -1 R1065 -5 C1138 R1068 -5 R1071 -5 C1138 R1074 -5 R1113 1 C1138 R1119 -1 C1139 R1001 200 R1031 1 C1139 R1032 -1 R1063 -10 C1139 R1066 -10 R1069 -10 C1139 R1072 -10 R1114 1 C1139 R1120 -1 C1140 R1001 260 R1031 1 C1140 R1032 -1 R1063 -10 C1140 R1066 -10 R1069 -10 C1140 R1072 -10 R1115 1 C1140 R1120 -1 C1141 R1001 300 R1031 1 C1141 R1032 -1 R1063 -10 C1141 R1066 -10 R1069 -10 C1141 R1072 -10 R1116 1 C1141 R1120 -1 C1142 R1001 260 R1031 1 C1142 R1032 -1 R1064 -10 C1142 R1067 -10 R1070 -10 C1142 R1073 -10 R1114 1 C1142 R1121 -1 C1143 R1001 200 R1031 1 C1143 R1032 -1 R1064 -10 C1143 R1067 -10 R1070 -10 C1143 R1073 -10 R1115 1 C1143 R1121 -1 C1144 R1001 300 R1031 1 C1144 R1032 -1 R1064 -10 C1144 R1067 -10 R1070 -10 C1144 R1073 -10 R1116 1 C1144 R1121 -1 C1145 R1001 400 R1031 1 C1145 R1032 -1 R1065 -5 C1145 R1068 -5 R1071 -5 C1145 R1074 -5 R1114 1 C1145 R1122 -1 C1146 R1001 400 R1031 1 C1146 R1032 -1 R1065 -5 C1146 R1068 -5 R1071 -5 C1146 R1074 -5 R1115 1 C1146 R1122 -1 C1147 R1001 300 R1031 1 C1147 R1032 -1 R1065 -5 C1147 R1068 -5 R1071 -5 C1147 R1074 -5 R1116 1 C1147 R1122 -1 C1148 R1001 150 R1033 1 C1148 R1034 -1 R1066 -10 C1148 R1069 -10 R1072 -10 C1148 R1117 1 R1123 -1 C1149 R1001 210 R1033 1 C1149 R1034 -1 R1066 -10 C1149 R1069 -10 R1072 -10 C1149 R1118 1 R1123 -1 C1150 R1001 250 R1033 1 C1150 R1034 -1 R1066 -10 C1150 R1069 -10 R1072 -10 C1150 R1119 1 R1123 -1 C1151 R1001 210 R1033 1 C1151 R1034 -1 R1067 -10 C1151 R1070 -10 R1073 -10 C1151 R1117 1 R1124 -1 C1152 R1001 150 R1033 1 C1152 R1034 -1 R1067 -10 C1152 R1070 -10 R1073 -10 C1152 R1118 1 R1124 -1 C1153 R1001 250 R1033 1 C1153 R1034 -1 R1067 -10 C1153 R1070 -10 R1073 -10 C1153 R1119 1 R1124 -1 C1154 R1001 325 R1033 1 C1154 R1034 -1 R1068 -5 C1154 R1071 -5 R1074 -5 C1154 R1117 1 R1125 -1 C1155 R1001 325 R1033 1 C1155 R1034 -1 R1068 -5 C1155 R1071 -5 R1074 -5 C1155 R1118 1 R1125 -1 C1156 R1001 225 R1033 1 C1156 R1034 -1 R1068 -5 C1156 R1071 -5 R1074 -5 C1156 R1119 1 R1125 -1 C1157 R1001 150 R1035 1 C1157 R1036 -1 R1066 -10 C1157 R1069 -10 R1072 -10 C1157 R1120 1 R1126 -1 C1158 R1001 210 R1035 1 C1158 R1036 -1 R1066 -10 C1158 R1069 -10 R1072 -10 C1158 R1121 1 R1126 -1 C1159 R1001 250 R1035 1 C1159 R1036 -1 R1066 -10 C1159 R1069 -10 R1072 -10 C1159 R1122 1 R1126 -1 C1160 R1001 210 R1035 1 C1160 R1036 -1 R1067 -10 C1160 R1070 -10 R1073 -10 C1160 R1120 1 R1127 -1 C1161 R1001 150 R1035 1 C1161 R1036 -1 R1067 -10 C1161 R1070 -10 R1073 -10 C1161 R1121 1 R1127 -1 C1162 R1001 250 R1035 1 C1162 R1036 -1 R1067 -10 C1162 R1070 -10 R1073 -10 C1162 R1122 1 R1127 -1 C1163 R1001 325 R1035 1 C1163 R1036 -1 R1068 -5 C1163 R1071 -5 R1074 -5 C1163 R1120 1 R1128 -1 C1164 R1001 325 R1035 1 C1164 R1036 -1 R1068 -5 C1164 R1071 -5 R1074 -5 C1164 R1121 1 R1128 -1 C1165 R1001 225 R1035 1 C1165 R1036 -1 R1068 -5 C1165 R1071 -5 R1074 -5 C1165 R1122 1 R1128 -1 C1166 R1001 100 R1037 1 C1166 R1038 -1 R1069 -10 C1166 R1072 -10 R1123 1 C1166 R1129 -1 C1167 R1001 160 R1037 1 C1167 R1038 -1 R1069 -10 C1167 R1072 -10 R1124 1 C1167 R1129 -1 C1168 R1001 200 R1037 1 C1168 R1038 -1 R1069 -10 C1168 R1072 -10 R1125 1 C1168 R1129 -1 C1169 R1001 160 R1037 1 C1169 R1038 -1 R1070 -10 C1169 R1073 -10 R1123 1 C1169 R1130 -1 C1170 R1001 100 R1037 1 C1170 R1038 -1 R1070 -10 C1170 R1073 -10 R1124 1 C1170 R1130 -1 C1171 R1001 200 R1037 1 C1171 R1038 -1 R1070 -10 C1171 R1073 -10 R1125 1 C1171 R1130 -1 C1172 R1001 250 R1037 1 C1172 R1038 -1 R1071 -5 C1172 R1074 -5 R1123 1 C1172 R1131 -1 C1173 R1001 250 R1037 1 C1173 R1038 -1 R1071 -5 C1173 R1074 -5 R1124 1 C1173 R1131 -1 C1174 R1001 150 R1037 1 C1174 R1038 -1 R1071 -5 C1174 R1074 -5 R1125 1 C1174 R1131 -1 C1175 R1001 100 R1039 1 C1175 R1040 -1 R1069 -10 C1175 R1072 -10 R1126 1 C1175 R1132 -1 C1176 R1001 160 R1039 1 C1176 R1040 -1 R1069 -10 C1176 R1072 -10 R1127 1 C1176 R1132 -1 C1177 R1001 200 R1039 1 C1177 R1040 -1 R1069 -10 C1177 R1072 -10 R1128 1 C1177 R1132 -1 C1178 R1001 160 R1039 1 C1178 R1040 -1 R1070 -10 C1178 R1073 -10 R1126 1 C1178 R1133 -1 C1179 R1001 100 R1039 1 C1179 R1040 -1 R1070 -10 C1179 R1073 -10 R1127 1 C1179 R1133 -1 C1180 R1001 200 R1039 1 C1180 R1040 -1 R1070 -10 C1180 R1073 -10 R1128 1 C1180 R1133 -1 C1181 R1001 250 R1039 1 C1181 R1040 -1 R1071 -5 C1181 R1074 -5 R1126 1 C1181 R1134 -1 C1182 R1001 250 R1039 1 C1182 R1040 -1 R1071 -5 C1182 R1074 -5 R1127 1 C1182 R1134 -1 C1183 R1001 150 R1039 1 C1183 R1040 -1 R1071 -5 C1183 R1074 -5 R1128 1 C1183 R1134 -1 C1184 R1001 50 R1041 1 C1184 R1042 -1 R1072 -10 C1184 R1129 1 C1185 R1001 110 R1041 1 C1185 R1042 -1 R1072 -10 C1185 R1130 1 C1186 R1001 150 R1041 1 C1186 R1042 -1 R1072 -10 C1186 R1131 1 C1187 R1001 110 R1041 1 C1187 R1042 -1 R1073 -10 C1187 R1129 1 C1188 R1001 50 R1041 1 C1188 R1042 -1 R1073 -10 C1188 R1130 1 C1189 R1001 150 R1041 1 C1189 R1042 -1 R1073 -10 C1189 R1131 1 C1190 R1001 175 R1041 1 C1190 R1042 -1 R1074 -5 C1190 R1129 1 C1191 R1001 175 R1041 1 C1191 R1042 -1 R1074 -5 C1191 R1130 1 C1192 R1001 75 R1041 1 C1192 R1042 -1 R1074 -5 C1192 R1131 1 C1193 R1001 50 R1043 1 C1193 R1044 -1 R1072 -10 C1193 R1132 1 C1194 R1001 110 R1043 1 C1194 R1044 -1 R1072 -10 C1194 R1133 1 C1195 R1001 150 R1043 1 C1195 R1044 -1 R1072 -10 C1195 R1134 1 C1196 R1001 110 R1043 1 C1196 R1044 -1 R1073 -10 C1196 R1132 1 C1197 R1001 50 R1043 1 C1197 R1044 -1 R1073 -10 C1197 R1133 1 C1198 R1001 150 R1043 1 C1198 R1044 -1 R1073 -10 C1198 R1134 1 C1199 R1001 175 R1043 1 C1199 R1044 -1 R1074 -5 C1199 R1132 1 C1200 R1001 175 R1043 1 C1200 R1044 -1 R1074 -5 C1200 R1133 1 C1201 R1001 75 R1043 1 C1201 R1044 -1 R1074 -5 C1201 R1134 1 MARK0001 'MARKER' 'INTEND' RHS RHS R1002 25 R1003 25 RHS R1004 25 R1005 1 RHS R1006 -1 R1007 1 RHS R1008 -1 R1009 1 RHS R1010 -1 R1011 1 RHS R1012 -1 R1013 1 RHS R1014 -1 R1015 1 RHS R1016 -1 R1017 1 RHS R1018 -1 R1019 1 RHS R1020 -1 R1021 1 RHS R1022 -1 R1023 1 RHS R1024 -1 R1025 1 RHS R1026 -1 R1027 1 RHS R1028 -1 R1029 1 RHS R1030 -1 R1031 1 RHS R1032 -1 R1033 1 RHS R1034 -1 R1035 1 RHS R1036 -1 R1037 1 RHS R1038 -1 R1039 1 RHS R1040 -1 R1041 1 RHS R1042 -1 R1043 1 RHS R1044 -1 R1045 -5 RHS R1046 -5 R1047 -5 RHS R1048 -10 R1049 -10 RHS R1050 -10 R1051 -15 RHS R1052 -15 R1053 -15 RHS R1054 -20 R1055 -20 RHS R1056 -20 R1057 -25 RHS R1058 -25 R1059 -25 RHS R1060 -30 R1061 -30 RHS R1062 -30 R1063 -35 RHS R1064 -35 R1065 -35 RHS R1066 -40 R1067 -40 RHS R1068 -40 R1069 -45 RHS R1070 -45 R1071 -45 RHS R1072 -50 R1073 -50 RHS R1074 -50 R1075 1 RHS R1076 1 R1077 1 RHS R1078 1 R1079 1 RHS R1080 1 BOUNDS UP ONE C1001 1 UP ONE C1002 1 UP ONE C1003 1 UP ONE C1004 1 UP ONE C1005 1 UP ONE C1006 1 UP ONE C1007 1 UP ONE C1008 1 UP ONE C1009 1 UP ONE C1010 1 UP ONE C1011 1 UP ONE C1012 1 UP ONE C1013 1 UP ONE C1014 1 UP ONE C1015 1 UP ONE C1016 1 UP ONE C1017 1 UP ONE C1018 1 UP ONE C1019 1 UP ONE C1020 1 UP ONE C1021 1 UP ONE C1022 1 UP ONE C1023 1 UP ONE C1024 1 UP ONE C1025 1 UP ONE C1026 1 UP ONE C1027 1 UP ONE C1028 1 UP ONE C1029 1 UP ONE C1030 1 UP ONE C1031 1 UP ONE C1032 1 UP ONE C1033 1 UP ONE C1034 1 UP ONE C1035 1 UP ONE C1036 1 UP ONE C1037 1 UP ONE C1038 1 UP ONE C1039 1 UP ONE C1040 1 UP ONE C1041 1 UP ONE C1042 1 UP ONE C1043 1 UP ONE C1044 1 UP ONE C1045 1 UP ONE C1046 1 UP ONE C1047 1 UP ONE C1048 1 UP ONE C1049 1 UP ONE C1050 1 UP ONE C1051 1 UP ONE C1052 1 UP ONE C1053 1 UP ONE C1054 1 UP ONE C1055 1 UP ONE C1056 1 UP ONE C1057 1 UP ONE C1058 1 UP ONE C1059 1 UP ONE C1060 1 UP ONE C1061 1 UP ONE C1062 1 UP ONE C1063 1 UP ONE C1064 1 UP ONE C1065 1 UP ONE C1066 1 UP ONE C1067 1 UP ONE C1068 1 UP ONE C1069 1 UP ONE C1070 1 UP ONE C1071 1 UP ONE C1072 1 UP ONE C1073 1 UP ONE C1074 1 UP ONE C1075 1 UP ONE C1076 1 UP ONE C1077 1 UP ONE C1078 1 UP ONE C1079 1 UP ONE C1080 1 UP ONE C1081 1 UP ONE C1082 1 UP ONE C1083 1 UP ONE C1084 1 UP ONE C1085 1 UP ONE C1086 1 UP ONE C1087 1 UP ONE C1088 1 UP ONE C1089 1 UP ONE C1090 1 UP ONE C1091 1 UP ONE C1092 1 UP ONE C1093 1 UP ONE C1094 1 UP ONE C1095 1 UP ONE C1096 1 UP ONE C1097 1 UP ONE C1098 1 UP ONE C1099 1 UP ONE C1100 1 UP ONE C1101 1 UP ONE C1102 1 UP ONE C1103 1 UP ONE C1104 1 UP ONE C1105 1 UP ONE C1106 1 UP ONE C1107 1 UP ONE C1108 1 UP ONE C1109 1 UP ONE C1110 1 UP ONE C1111 1 UP ONE C1112 1 UP ONE C1113 1 UP ONE C1114 1 UP ONE C1115 1 UP ONE C1116 1 UP ONE C1117 1 UP ONE C1118 1 UP ONE C1119 1 UP ONE C1120 1 UP ONE C1121 1 UP ONE C1122 1 UP ONE C1123 1 UP ONE C1124 1 UP ONE C1125 1 UP ONE C1126 1 UP ONE C1127 1 UP ONE C1128 1 UP ONE C1129 1 UP ONE C1130 1 UP ONE C1131 1 UP ONE C1132 1 UP ONE C1133 1 UP ONE C1134 1 UP ONE C1135 1 UP ONE C1136 1 UP ONE C1137 1 UP ONE C1138 1 UP ONE C1139 1 UP ONE C1140 1 UP ONE C1141 1 UP ONE C1142 1 UP ONE C1143 1 UP ONE C1144 1 UP ONE C1145 1 UP ONE C1146 1 UP ONE C1147 1 UP ONE C1148 1 UP ONE C1149 1 UP ONE C1150 1 UP ONE C1151 1 UP ONE C1152 1 UP ONE C1153 1 UP ONE C1154 1 UP ONE C1155 1 UP ONE C1156 1 UP ONE C1157 1 UP ONE C1158 1 UP ONE C1159 1 UP ONE C1160 1 UP ONE C1161 1 UP ONE C1162 1 UP ONE C1163 1 UP ONE C1164 1 UP ONE C1165 1 UP ONE C1166 1 UP ONE C1167 1 UP ONE C1168 1 UP ONE C1169 1 UP ONE C1170 1 UP ONE C1171 1 UP ONE C1172 1 UP ONE C1173 1 UP ONE C1174 1 UP ONE C1175 1 UP ONE C1176 1 UP ONE C1177 1 UP ONE C1178 1 UP ONE C1179 1 UP ONE C1180 1 UP ONE C1181 1 UP ONE C1182 1 UP ONE C1183 1 UP ONE C1184 1 UP ONE C1185 1 UP ONE C1186 1 UP ONE C1187 1 UP ONE C1188 1 UP ONE C1189 1 UP ONE C1190 1 UP ONE C1191 1 UP ONE C1192 1 UP ONE C1193 1 UP ONE C1194 1 UP ONE C1195 1 UP ONE C1196 1 UP ONE C1197 1 UP ONE C1198 1 UP ONE C1199 1 UP ONE C1200 1 UP ONE C1201 1 ENDATA DyLP-1.10.4/Data/Sample/app0110R.time0000755000175200017520000000030011015552002015214 0ustar coincoinNAME MYSMPS PERIODS LP C0000001 R0000001 STG00001 C0000029 R0000010 STG00002 C0000037 R0000014 STG00003 ENDATA DyLP-1.10.4/Data/Sample/hello.mps0000644000175200017520000003024210662211140014763 0ustar coincoinNAME Hello ROWS N OBJROW L R0000000 L R0000001 L R0000002 L R0000003 L R0000004 L R0000005 L R0000006 L R0000007 L R0000008 L R0000009 L R0000010 L R0000011 L R0000012 L R0000013 L R0000014 L R0000015 L R0000016 L R0000017 L R0000018 L R0000019 L R0000020 COLUMNS C0000000 OBJROW 1. R0000000 1. C0000000 R0000001 1. R0000002 1. C0000000 R0000003 1. R0000004 1. C0000000 R0000005 1. R0000006 1. C0000000 R0000007 1. R0000008 1. C0000000 R0000011 1. R0000012 1. C0000000 R0000013 1. R0000014 1. C0000000 R0000015 1. R0000016 1. C0000000 R0000017 1. C0000001 OBJROW 1. R0000004 1. C0000001 R0000018 1. C0000002 OBJROW 1. R0000004 1. C0000002 R0000019 1. C0000003 OBJROW 1. R0000004 1. C0000003 R0000018 1. C0000004 OBJROW 1. R0000004 1. C0000004 R0000017 1. C0000005 OBJROW 1. R0000004 1. C0000005 R0000018 1. C0000006 OBJROW 1. R0000004 1. C0000006 R0000019 1. C0000007 OBJROW 1. R0000004 1. C0000007 R0000018 1. C0000008 OBJROW 1. R0000000 1. C0000008 R0000001 1. R0000002 1. C0000008 R0000003 1. R0000004 1. C0000008 R0000005 1. R0000006 1. C0000008 R0000007 1. R0000008 1. C0000008 R0000011 1. R0000012 1. C0000008 R0000013 1. R0000014 1. C0000008 R0000015 1. R0000016 1. C0000008 R0000017 1. C0000009 OBJROW 1. C0000010 OBJROW 1. C0000011 OBJROW 1. R0000000 1. C0000011 R0000001 1. R0000002 1. C0000011 R0000003 1. R0000004 1. C0000011 R0000005 1. R0000006 1. C0000011 R0000007 1. R0000008 1. C0000011 R0000013 1. R0000014 1. C0000011 R0000015 1. R0000016 1. C0000011 R0000017 1. C0000012 OBJROW 1. R0000000 1. C0000012 R0000004 1. R0000008 1. C0000012 R0000012 1. R0000018 1. C0000013 OBJROW 1. R0000000 1. C0000013 R0000004 1. R0000008 1. C0000013 R0000011 1. R0000019 1. C0000014 OBJROW 1. R0000000 1. C0000014 R0000004 1. R0000008 1. C0000014 R0000011 1. R0000019 1. C0000015 OBJROW 1. R0000000 1. C0000015 R0000004 1. R0000008 1. C0000015 R0000011 1. R0000019 1. C0000016 OBJROW 1. R0000000 1. C0000016 R0000004 1. R0000008 1. C0000016 R0000011 1. R0000019 1. C0000017 OBJROW 1. R0000000 1. C0000017 R0000008 1. R0000011 1. C0000017 R0000019 1. C0000018 OBJROW 1. R0000000 1. C0000018 R0000008 1. R0000012 1. C0000018 R0000018 1. C0000019 OBJROW 1. R0000000 1. C0000019 R0000008 1. R0000013 1. C0000019 R0000014 1. R0000015 1. C0000019 R0000016 1. R0000017 1. C0000020 OBJROW 1. C0000021 OBJROW 1. C0000022 OBJROW 1. R0000000 1. C0000022 R0000001 1. R0000002 1. C0000022 R0000003 1. R0000004 1. C0000022 R0000005 1. R0000006 1. C0000022 R0000007 1. R0000008 1. C0000022 R0000011 1. R0000012 1. C0000022 R0000013 1. R0000014 1. C0000022 R0000015 1. R0000016 1. C0000022 R0000017 1. R0000018 1. C0000022 R0000019 1. C0000023 OBJROW 1. R0000008 1. C0000023 R0000011 1. R0000015 1. C0000024 OBJROW 1. R0000008 1. C0000024 R0000011 1. R0000015 1. C0000025 OBJROW 1. R0000008 1. C0000025 R0000011 1. R0000015 1. C0000025 R0000016 1. C0000026 OBJROW 1. R0000008 1. C0000026 R0000011 1. R0000015 1. C0000026 R0000017 1. C0000027 OBJROW 1. R0000008 1. C0000027 R0000012 1. R0000014 1. C0000027 R0000018 1. C0000028 OBJROW 1. R0000008 1. C0000028 R0000013 1. R0000014 1. C0000028 R0000019 1. C0000029 OBJROW 1. R0000008 1. C0000030 OBJROW 1. R0000008 1. C0000031 OBJROW 1. C0000032 OBJROW 1. C0000033 OBJROW 1. R0000000 1. C0000033 R0000001 1. R0000002 1. C0000033 R0000003 1. R0000004 1. C0000033 R0000005 1. R0000006 1. C0000033 R0000007 1. R0000008 1. C0000033 R0000011 1. R0000012 1. C0000033 R0000013 1. R0000014 1. C0000033 R0000015 1. R0000016 1. C0000033 R0000017 1. R0000018 1. C0000033 R0000019 1. C0000034 OBJROW 1. R0000008 1. C0000034 R0000019 1. C0000035 OBJROW 1. R0000008 1. C0000035 R0000019 1. C0000036 OBJROW 1. R0000008 1. C0000036 R0000019 1. C0000037 OBJROW 1. R0000008 1. C0000037 R0000019 1. C0000038 OBJROW 1. R0000008 1. C0000038 R0000019 1. C0000039 OBJROW 1. R0000008 1. C0000039 R0000019 1. C0000040 OBJROW 1. R0000008 1. C0000040 R0000019 1. C0000041 OBJROW 1. R0000008 1. C0000041 R0000019 1. C0000042 OBJROW 1. C0000043 OBJROW 1. C0000044 OBJROW 1. R0000002 1. C0000044 R0000003 1. R0000004 1. C0000044 R0000005 1. R0000006 1. C0000044 R0000011 1. R0000012 1. C0000044 R0000013 1. R0000014 1. C0000044 R0000015 1. R0000016 1. C0000044 R0000017 1. R0000018 1. C0000044 R0000019 1. C0000045 OBJROW 1. R0000001 1. C0000045 R0000007 1. R0000011 1. C0000045 R0000019 1. C0000046 OBJROW 1. R0000000 1. C0000046 R0000008 1. R0000011 1. C0000046 R0000019 1. C0000047 OBJROW 1. R0000000 1. C0000047 R0000008 1. R0000011 1. C0000047 R0000019 1. C0000048 OBJROW 1. R0000000 1. C0000048 R0000008 1. R0000011 1. C0000048 R0000019 1. C0000049 OBJROW 1. R0000000 1. C0000049 R0000008 1. R0000012 1. C0000049 R0000018 1. C0000050 OBJROW 1. R0000000 1. C0000050 R0000008 1. R0000013 1. C0000050 R0000017 1. C0000051 OBJROW 1. R0000001 1. C0000051 R0000007 1. R0000014 1. C0000051 R0000015 1. R0000016 1. C0000052 OBJROW 1. R0000002 1. C0000052 R0000003 1. R0000004 1. C0000052 R0000005 1. R0000006 1. RHS RHS R0000000 1. R0000001 1. RHS R0000002 1. R0000003 1. RHS R0000004 1. R0000005 1. RHS R0000006 1. R0000007 1. RHS R0000008 1. R0000009 1. RHS R0000010 1. R0000011 1. RHS R0000012 1. R0000013 1. RHS R0000014 1. R0000015 1. RHS R0000016 1. R0000017 1. RHS R0000018 1. R0000019 1. RHS R0000020 1. RANGES RANGE R0000000 1. R0000001 1. RANGE R0000002 1. R0000003 1. RANGE R0000004 1. R0000005 1. RANGE R0000006 1. R0000007 1. RANGE R0000008 1. R0000009 1. RANGE R0000010 1. R0000011 1. RANGE R0000012 1. R0000013 1. RANGE R0000014 1. R0000015 1. RANGE R0000016 1. R0000017 1. RANGE R0000018 1. R0000019 1. RANGE R0000020 1. BOUNDS UP BOUND C0000000 1. UP BOUND C0000001 1. UP BOUND C0000002 1. UP BOUND C0000003 1. UP BOUND C0000004 1. UP BOUND C0000005 1. UP BOUND C0000006 1. UP BOUND C0000007 1. UP BOUND C0000008 1. UP BOUND C0000009 1. UP BOUND C0000010 1. UP BOUND C0000011 1. UP BOUND C0000012 1. UP BOUND C0000013 1. UP BOUND C0000014 1. UP BOUND C0000015 1. UP BOUND C0000016 1. UP BOUND C0000017 1. UP BOUND C0000018 1. UP BOUND C0000019 1. UP BOUND C0000020 1. UP BOUND C0000021 1. UP BOUND C0000022 1. UP BOUND C0000023 1. UP BOUND C0000024 1. UP BOUND C0000025 1. UP BOUND C0000026 1. UP BOUND C0000027 1. UP BOUND C0000028 1. UP BOUND C0000029 1. UP BOUND C0000030 1. UP BOUND C0000031 1. UP BOUND C0000032 1. UP BOUND C0000033 1. UP BOUND C0000034 1. UP BOUND C0000035 1. UP BOUND C0000036 1. UP BOUND C0000037 1. UP BOUND C0000038 1. UP BOUND C0000039 1. UP BOUND C0000040 1. UP BOUND C0000041 1. UP BOUND C0000042 1. UP BOUND C0000043 1. UP BOUND C0000044 1. UP BOUND C0000045 1. UP BOUND C0000046 1. UP BOUND C0000047 1. UP BOUND C0000048 1. UP BOUND C0000049 1. UP BOUND C0000050 1. UP BOUND C0000051 1. UP BOUND C0000052 1. ENDATA DyLP-1.10.4/Data/Sample/input.1300000644000175200017520000207141510430174061014537 0ustar coincoinBEGIN NETGEN PROBLEM 130 5000 NODES AND 12500 ARCS USER: 25440925 500 500 1 100 250000 DATA: 500 500 0 100 1 1000 SUPPLY 1 223 2 220 3 1103 4 75 5 800 6 392 7 132 8 622 9 309 10 145 11 113 12 206 13 427 14 480 15 797 16 963 17 339 18 865 19 826 20 1291 21 117 22 481 23 547 24 837 25 935 26 34 27 354 28 390 29 1016 30 934 31 693 32 411 33 137 34 800 35 48 36 854 37 817 38 756 39 523 40 1074 41 507 42 440 43 256 44 22 45 569 46 341 47 410 48 129 49 1269 50 570 51 456 52 320 53 415 54 105 55 445 56 863 57 104 58 620 59 300 60 286 61 435 62 87 63 97 64 435 65 773 66 137 67 99 68 792 69 544 70 558 71 275 72 467 73 350 74 477 75 1231 76 486 77 773 78 422 79 526 80 402 81 602 82 262 83 321 84 1135 85 459 86 915 87 505 88 193 89 1133 90 500 91 742 92 403 93 442 94 1077 95 552 96 398 97 292 98 1180 99 449 100 618 101 623 102 695 103 312 104 447 105 420 106 758 107 880 108 846 109 694 110 804 111 411 112 299 113 395 114 120 115 702 116 269 117 703 118 619 119 172 120 689 121 341 122 699 123 735 124 4 125 764 126 735 127 271 128 564 129 28 130 32 131 822 132 654 133 561 134 644 135 621 136 392 137 964 138 108 139 394 140 1149 141 284 142 433 143 346 144 168 145 982 146 790 147 469 148 287 149 427 150 763 151 407 152 323 153 776 154 1109 155 896 156 288 157 680 158 1632 159 385 160 364 161 1053 162 382 163 582 164 378 165 217 166 412 167 378 168 371 169 420 170 1017 171 719 172 24 173 476 174 692 175 334 176 426 177 26 178 71 179 45 180 97 181 619 182 803 183 236 184 293 185 571 186 497 187 390 188 451 189 545 190 524 191 27 192 402 193 468 194 721 195 497 196 584 197 630 198 755 199 308 200 853 201 1693 202 1352 203 224 204 247 205 688 206 585 207 334 208 526 209 399 210 270 211 826 212 150 213 472 214 545 215 275 216 732 217 675 218 351 219 897 220 572 221 270 222 68 223 843 224 352 225 395 226 584 227 192 228 379 229 325 230 843 231 105 232 978 233 446 234 102 235 315 236 368 237 293 238 391 239 816 240 456 241 490 242 123 243 146 244 498 245 595 246 229 247 761 248 520 249 1198 250 463 251 497 252 529 253 913 254 543 255 584 256 193 257 614 258 449 259 1 260 612 261 349 262 355 263 511 264 1586 265 383 266 192 267 92 268 842 269 601 270 39 271 276 272 363 273 371 274 53 275 486 276 348 277 407 278 647 279 417 280 1070 281 32 282 887 283 387 284 339 285 882 286 400 287 410 288 534 289 932 290 367 291 747 292 470 293 202 294 680 295 354 296 730 297 451 298 408 299 559 300 1159 301 153 302 260 303 689 304 914 305 83 306 256 307 52 308 194 309 1290 310 473 311 717 312 163 313 728 314 756 315 353 316 294 317 316 318 213 319 698 320 407 321 416 322 385 323 532 324 277 325 593 326 972 327 694 328 289 329 1387 330 296 331 922 332 184 333 535 334 1428 335 384 336 271 337 74 338 427 339 400 340 584 341 411 342 656 343 453 344 327 345 729 346 265 347 663 348 968 349 246 350 250 351 144 352 189 353 713 354 317 355 439 356 404 357 937 358 218 359 803 360 333 361 215 362 217 363 757 364 437 365 888 366 318 367 104 368 358 369 451 370 451 371 135 372 753 373 273 374 22 375 284 376 15 377 1020 378 326 379 436 380 360 381 389 382 949 383 311 384 990 385 75 386 563 387 481 388 546 389 455 390 356 391 496 392 525 393 682 394 215 395 632 396 339 397 91 398 326 399 8 400 413 401 448 402 597 403 854 404 227 405 337 406 326 407 402 408 212 409 265 410 415 411 239 412 659 413 603 414 827 415 28 416 309 417 384 418 115 419 386 420 342 421 523 422 309 423 204 424 264 425 632 426 692 427 930 428 648 429 404 430 264 431 1014 432 298 433 498 434 36 435 141 436 957 437 574 438 507 439 257 440 531 441 1178 442 689 443 445 444 422 445 1222 446 404 447 516 448 298 449 359 450 196 451 394 452 412 453 276 454 484 455 635 456 204 457 826 458 169 459 361 460 906 461 1143 462 484 463 670 464 248 465 94 466 109 467 506 468 718 469 381 470 1110 471 414 472 1002 473 327 474 452 475 379 476 315 477 1012 478 572 479 421 480 653 481 492 482 485 483 91 484 667 485 793 486 192 487 631 488 404 489 635 490 60 491 252 492 739 493 117 494 412 495 804 496 472 497 672 498 833 499 1251 500 638 ARCS 1 1890 47 223 1 1745 90 194 1 2252 68 612 505 3498 71 223 505 4707 94 223 505 2628 71 375 941 3285 33 223 941 649 1 308 941 1930 21 351 1730 2231 5 223 1730 2634 42 263 1730 167 50 156 1890 505 61 223 1890 1204 93 959 2231 4450 90 223 2231 1227 77 670 2231 2893 61 898 3285 1730 90 223 3285 2960 2 572 3285 2496 79 227 3498 941 63 223 3498 570 14 579 3498 3089 5 165 4450 4932 35 223 4450 2364 18 89 4450 1331 34 61 2 3149 96 220 2 4853 6 753 1256 3667 25 220 1256 4279 83 645 1256 3207 53 466 2358 4513 73 220 2358 202 63 151 2770 4472 36 220 2770 2837 91 401 3149 3856 15 220 3149 1948 55 604 3149 2839 94 172 3667 2358 69 220 3667 3172 12 305 3667 3591 70 846 3856 4243 52 220 3856 4684 33 220 3856 3273 39 430 4243 2770 30 220 4243 837 85 347 4243 4038 95 343 4472 1256 78 220 4472 2370 2 984 3 3225 42 1103 3 2531 61 326 3 433 2 3 2280 3684 82 1103 2280 715 53 919 2280 514 41 275 2608 3932 17 1103 2608 2138 64 293 2608 1694 49 504 3225 3734 36 1103 3225 3688 86 893 3365 2280 5 1103 3365 4245 17 654 3684 2608 99 1103 3684 4319 1 377 3684 1271 64 104 3734 3365 72 1103 3734 4578 94 1103 3734 3581 65 175 3734 484 57 539 3932 4774 95 1103 3932 820 31 479 3932 3144 36 30 4 3408 51 75 4 1634 14 68 4 4261 21 402 683 4122 86 75 683 4788 98 75 683 4142 75 57 683 1337 77 506 1857 2877 31 75 1857 2111 22 479 1857 1672 7 908 2160 683 89 75 2160 1842 56 797 2877 4822 46 75 2877 4887 67 45 3408 2160 24 75 3408 2475 7 705 3408 2044 30 727 4122 1857 35 75 4122 1102 23 480 5 2037 20 800 5 3900 58 72 5 4855 99 527 859 4848 37 800 859 2944 29 40 859 3611 46 806 864 859 51 800 864 1514 29 725 864 360 95 421 1516 4074 39 800 1516 878 3 910 1516 890 53 47 1950 864 16 800 1950 4648 80 800 1950 1965 76 897 2037 3311 71 800 2037 2166 99 478 3311 1516 44 800 3311 104 62 576 3311 4481 77 158 3786 1950 38 800 3786 159 38 685 3786 3893 27 47 4074 3786 24 800 4074 2348 71 720 6 1315 57 392 6 3193 78 763 521 2260 90 392 521 3029 27 210 1315 2412 30 392 1315 2691 77 852 1315 3526 24 565 2260 2737 62 392 2260 4233 61 486 2412 4019 99 392 2412 1325 75 322 2412 488 44 558 2641 4464 38 392 2641 4649 45 756 2641 1336 25 238 2737 2641 25 392 2737 3789 14 65 2737 378 43 616 2818 4008 20 392 2818 1081 19 814 2818 280 5 694 4008 521 1 392 4008 3922 48 516 4019 2818 83 392 4019 4776 12 392 4019 1938 65 532 4464 4634 88 392 4464 305 23 632 7 3805 73 132 7 2369 76 718 714 3037 87 132 714 1258 71 90 2715 4016 11 132 2715 4484 79 988 2715 1299 58 621 3037 4663 68 132 3037 3922 34 170 3037 2295 45 980 3733 2715 72 132 3733 1463 6 424 3805 4205 17 132 3805 4730 76 132 3805 3271 56 196 4016 714 24 132 4016 1210 69 380 4016 2371 61 209 4205 3733 90 132 4205 2075 10 677 4205 4365 95 361 8 2573 32 622 8 265 96 567 8 2946 23 597 1265 1299 50 622 1265 1230 18 451 1299 3374 13 622 1299 4280 61 408 1299 459 59 186 1326 4821 7 622 1326 4788 37 622 1326 1052 47 231 1326 1812 100 433 2573 3698 82 622 2573 1276 99 401 3374 1326 52 622 3374 4855 58 489 3698 1265 46 622 3698 653 41 113 9 2743 8 309 9 721 55 372 580 1398 98 309 580 4563 16 33 580 3738 66 973 1226 4640 45 309 1226 4243 80 667 1398 3675 94 309 1398 229 78 249 2203 2594 68 309 2203 4043 16 851 2203 857 37 514 2291 3081 63 309 2291 2627 94 252 2291 3559 89 982 2594 2291 34 309 2594 4656 12 309 2594 745 54 682 2602 2203 55 309 2602 3319 91 771 2743 580 13 309 2743 3750 42 94 3081 1226 65 309 3081 570 53 162 3675 2602 55 309 3675 1871 59 328 10 928 55 145 10 2851 51 732 10 2902 16 315 699 3326 64 145 699 4752 53 10 928 4458 11 145 928 4497 82 450 928 952 66 863 1663 3769 59 145 1663 576 49 256 3326 3817 47 145 3326 4344 69 141 3326 3536 30 702 3550 3867 34 145 3550 3793 41 534 3769 3550 82 145 3769 4795 92 145 3769 2302 9 817 3769 3809 88 349 3817 4596 68 145 3817 1627 100 326 3867 699 20 145 3867 2216 13 13 3867 1415 17 931 4458 1663 79 145 4458 3546 100 624 11 609 79 113 11 3674 75 260 11 4712 21 389 609 3975 63 113 609 2367 41 146 2190 2966 39 113 2190 3788 100 811 2190 4752 39 12 2748 3889 15 113 2748 2441 26 516 2748 3825 74 667 2832 3236 45 113 2832 4130 47 134 2832 447 34 941 2966 3963 54 113 2966 4560 94 189 3236 2748 40 113 3236 2307 22 333 3236 4629 41 916 3889 2190 35 113 3889 4118 48 172 3963 4524 42 113 3963 4739 30 113 3963 1077 38 589 3975 2832 7 113 3975 578 97 293 3975 4418 45 880 12 1959 7 206 12 321 43 854 12 586 28 298 1959 3989 66 206 1959 3783 74 508 2413 4730 1 206 2413 3221 5 206 2413 4688 34 37 2990 2413 32 206 2990 2386 68 56 2990 833 78 110 3039 4107 89 206 3039 4793 57 106 3039 328 60 358 3221 3484 4 206 3221 3605 4 179 3484 3760 86 206 3484 2298 80 497 3484 1964 55 761 3760 4518 38 206 3760 2698 94 508 3760 1927 66 694 3989 3039 30 206 3989 2577 34 305 4107 2990 48 206 4107 1964 22 218 4107 4722 21 276 13 3789 28 427 13 4977 8 84 741 2359 47 427 741 2114 26 351 741 1350 97 675 1090 4651 98 427 1090 2134 7 137 1090 1865 14 820 1551 3036 87 427 1551 1157 80 775 1551 3476 70 230 1885 1551 30 427 1885 4891 34 214 2359 3956 22 427 2359 3563 23 54 2799 741 11 427 2799 1066 32 84 2799 2255 33 447 3036 1090 9 427 3036 4640 52 427 3036 4898 55 884 3789 2799 23 427 3789 4552 85 207 3956 1885 16 427 3956 1336 53 744 3956 2873 20 242 14 2070 1 480 14 4783 56 820 14 2062 84 32 2053 3584 53 480 2053 2633 76 657 2070 3088 57 480 2070 3355 9 217 2070 1278 14 707 2092 4916 60 480 2092 3997 37 842 3088 4181 76 480 3088 2766 60 763 3584 2092 9 480 3584 422 26 69 4181 2053 99 480 4181 4874 11 480 4181 3870 26 759 4181 3938 20 814 15 3785 3 797 15 2265 67 471 15 1304 59 113 587 658 87 797 587 3791 23 185 658 4110 12 797 658 1445 65 69 658 4126 90 724 726 857 9 797 726 1085 60 104 726 4105 95 13 857 587 81 797 857 4974 45 797 857 1412 66 385 857 4441 20 230 1738 4242 8 797 1738 2194 82 647 2454 4965 57 797 2454 8 24 559 3785 726 58 797 3785 3286 34 208 3785 2162 81 681 4110 1738 99 797 4110 3466 16 607 4110 1027 9 4 4242 2454 55 797 4242 2802 81 214 16 2713 68 963 16 2425 2 2 541 4655 82 963 541 2793 33 963 541 1084 57 402 541 1056 35 72 681 3351 36 963 681 4280 82 741 681 2257 100 514 1130 2064 54 963 1130 3856 17 328 1130 2286 1 697 2064 3806 7 963 2064 4586 90 963 2064 2927 44 399 2083 681 81 963 2083 4034 14 781 2083 3692 17 329 2713 541 65 963 2713 2456 16 2 2793 3811 14 963 2793 912 39 559 3331 2083 60 963 3331 3700 95 148 3351 3658 7 963 3351 3122 29 810 3351 133 72 668 3658 4719 51 963 3658 1969 21 307 3658 1951 62 365 3806 4358 21 963 3806 2538 53 955 3811 1130 55 963 3811 1971 12 511 4358 3331 71 963 4358 3762 84 208 4358 2800 67 139 17 3009 71 339 17 2373 26 939 17 629 3 38 559 2633 38 339 559 4107 95 887 1610 3588 63 339 1610 1247 27 480 1610 1184 57 133 1694 2652 43 339 1694 4901 91 766 1694 4972 8 139 1864 4981 18 339 1864 4836 81 339 1864 339 33 138 2633 1694 99 339 2633 889 72 547 2633 315 93 255 2652 4133 24 339 2652 3483 42 711 2652 1340 68 19 2939 1864 81 339 2939 2101 39 359 2939 431 65 368 3009 559 39 339 3009 803 90 67 3588 2939 76 339 3588 2656 97 123 4133 1610 64 339 4133 4576 39 371 18 1662 78 865 18 3741 4 401 1155 4588 18 865 1155 3272 11 356 1662 4901 87 865 1662 4432 57 865 1662 4319 77 186 1676 3847 25 865 1676 3898 33 556 1911 2680 76 865 1911 177 35 495 2680 1676 99 865 2680 832 52 121 3847 4196 77 865 3847 3230 26 559 3847 3187 28 702 4196 1155 95 865 4196 2598 36 191 4196 2774 99 249 4432 1911 40 865 4432 180 58 30 4432 499 29 222 19 3610 77 826 19 3267 7 860 630 1214 86 826 630 4134 58 353 845 3372 59 826 845 2587 22 735 1101 4948 81 826 1101 630 80 826 1101 3243 90 434 1101 1994 98 356 1214 845 6 826 1214 4503 32 965 2693 3346 77 826 2693 2633 66 44 2693 4799 24 88 3346 3482 11 826 3346 2527 98 789 3372 4925 41 826 3372 1536 79 31 3372 2936 32 283 3482 1101 68 826 3482 289 67 875 3610 2693 88 826 3610 3190 94 4 3610 3966 43 734 20 3791 46 1291 20 2288 69 488 633 2383 12 1291 633 209 8 673 1309 1441 43 1291 1309 521 96 478 1441 3428 12 1291 1441 3278 15 224 1937 4987 69 1291 1937 3362 84 1291 1937 1364 33 214 2383 1937 23 1291 2383 702 95 467 3234 633 14 1291 3234 1150 14 269 3362 4651 97 1291 3362 184 1 27 3428 3234 6 1291 3428 1060 62 583 3428 3282 18 76 3791 1309 37 1291 3791 4565 10 757 3791 2018 42 773 21 3582 73 117 21 3167 62 463 990 2685 74 117 990 4158 96 572 1157 3155 69 117 1157 143 64 275 1157 4362 94 767 1473 4815 80 117 1473 105 40 383 1473 3025 98 348 1669 4590 75 117 1669 990 55 117 1669 2942 83 910 1669 4649 90 252 2522 1157 65 117 2522 2383 54 633 2685 4398 10 117 2685 4538 35 736 2685 1740 8 951 3155 1473 31 117 3155 1577 38 923 3155 1991 29 277 3412 2522 61 117 3412 2179 74 811 3582 4305 92 117 3582 2058 42 483 3582 4129 98 816 4305 1669 25 117 4305 303 92 414 4305 221 14 989 4398 3412 41 117 4398 2947 25 871 22 3778 14 481 22 900 48 461 803 4738 52 481 803 4571 53 481 803 2873 28 461 1216 2035 5 481 1216 4115 99 436 1216 4443 79 59 2035 2103 31 481 2035 2779 90 661 2084 4299 100 481 2084 1541 3 810 2103 2084 22 481 2103 3419 73 332 3048 803 64 481 3048 4506 52 655 3048 1767 85 482 3778 1216 41 481 3778 4603 41 897 3778 657 19 61 4299 3048 49 481 4299 1121 28 860 4299 1549 77 724 23 2534 69 547 23 1265 74 141 661 1053 21 547 661 504 47 897 1053 2735 41 547 1053 4992 41 15 1053 4483 100 523 1191 4867 59 547 1191 1193 12 547 1191 2700 13 928 1191 367 28 456 1193 3725 40 547 1193 945 7 373 1193 4005 59 850 1471 1191 2 547 1471 4584 88 595 1471 83 22 739 2534 1471 50 547 2534 3661 12 715 2735 4966 35 547 2735 1322 43 577 3725 661 48 547 3725 390 27 436 24 4457 47 837 24 4668 34 873 24 429 17 101 543 1437 18 837 543 4928 63 837 543 1307 70 824 1437 4866 97 837 1437 1758 36 524 2372 543 9 837 2372 4117 28 703 3264 4046 64 837 3264 873 81 406 3264 1517 55 135 3646 3731 88 837 3646 2221 30 246 3646 4595 20 494 3731 3264 71 837 3731 927 73 792 3731 2397 40 747 4046 2372 72 837 4046 634 36 861 4046 926 7 940 4457 3646 25 837 4457 1426 97 486 25 2894 36 935 25 809 2 584 1206 4932 38 935 1206 3131 1 935 1206 4086 70 875 1236 3393 13 935 1236 1195 72 363 1729 3141 13 935 1729 3841 67 468 1729 189 31 887 1770 1236 95 935 1770 2191 51 43 1770 4043 54 149 2342 3069 57 935 2342 4573 96 184 2342 3366 88 849 2843 4486 66 935 2843 1161 65 622 2894 1206 82 935 2894 4764 73 431 3069 4749 13 935 3069 3236 31 219 3131 1729 96 935 3131 4740 55 935 3131 3230 14 293 3131 143 6 848 3141 2843 13 935 3141 3303 4 85 3141 4616 93 1 3393 2342 55 935 3393 1114 24 672 4486 1770 20 935 4486 512 5 844 4486 2383 84 593 26 3964 23 34 26 88 89 25 26 3771 52 111 766 4431 99 34 766 4076 65 129 2115 2337 3 34 2115 1875 91 939 2115 102 71 353 2337 2765 11 34 2337 313 64 715 2337 1718 82 771 2765 4223 25 34 2765 4771 23 34 2765 1325 89 827 2765 4937 5 9 2789 766 18 34 2789 3674 98 648 3802 2789 29 34 3802 3973 99 625 3964 4203 11 34 3964 4253 67 942 3964 2583 47 275 4203 3802 97 34 4203 3843 16 197 4203 3364 99 239 4223 4916 55 34 4223 3397 62 977 4431 2115 15 34 4431 1414 69 985 27 3355 77 354 27 318 84 121 713 896 84 354 713 585 63 56 896 3314 31 354 896 1767 100 158 896 1772 71 441 1378 713 99 354 1378 4414 48 118 2209 1378 100 354 2209 1751 28 819 2209 4077 32 969 2842 2209 98 354 2842 4558 44 549 3314 4737 74 354 3314 4566 9 354 3314 3610 39 894 3314 4266 5 773 3355 2842 82 354 3355 2738 45 279 28 2340 50 390 28 1982 54 445 560 2334 91 390 560 1510 69 633 560 666 92 437 617 2686 36 390 617 2587 22 779 645 3807 37 390 645 1605 62 503 2122 617 53 390 2122 2762 61 59 2254 3154 17 390 2254 333 92 864 2254 3435 55 473 2316 2122 50 390 2316 2518 23 763 2334 2316 63 390 2334 4267 18 674 2340 2254 3 390 2340 3061 100 179 2340 4507 41 202 2686 645 1 390 2686 2929 79 826 3154 4610 12 390 3154 3538 37 390 3154 4792 92 390 3154 4611 27 271 3538 560 84 390 3538 4853 93 919 3538 1937 27 971 3807 4684 37 390 3807 3971 68 205 29 1844 11 1016 29 3884 99 824 563 3095 57 1016 563 3829 97 843 1453 563 15 1016 1453 3142 87 591 1844 2592 80 1016 1844 2843 6 110 1844 709 70 88 1928 4776 85 1016 1928 2803 69 1 1928 3326 31 604 2364 1928 98 1016 2364 4619 42 1016 2364 2473 71 126 2592 1453 72 1016 2592 4521 40 601 2592 2724 97 701 3095 2364 91 1016 3095 4927 98 568 30 1010 8 934 30 2846 60 424 30 150 26 269 738 1858 73 934 738 3868 12 68 738 4739 86 202 940 2759 71 934 940 1583 11 131 1010 3657 67 934 1010 2971 99 250 1010 2032 3 138 1202 940 18 934 1202 3707 54 977 1354 1202 50 934 1354 4869 46 402 1354 1572 70 15 1858 1884 21 934 1858 4829 60 934 1858 1583 33 228 1884 4777 63 934 1884 3888 38 554 1884 2302 45 475 2759 738 44 934 2759 186 46 16 2759 1726 68 458 3061 1354 69 934 3061 3047 70 388 3657 3061 29 934 3657 428 57 154 31 3585 56 693 31 2769 78 723 31 2254 90 998 1098 2549 46 693 1098 4765 15 654 1098 2717 34 551 1599 3521 54 693 1599 4951 60 351 2549 1599 46 693 2549 2542 49 814 2549 598 87 50 3359 4623 29 693 3359 394 39 846 3521 4389 29 693 3521 4017 20 64 3585 4683 33 693 3585 1098 12 693 3585 4715 12 895 3585 3642 83 718 4389 3359 43 693 4389 627 94 555 4389 4511 6 944 32 2825 46 411 32 2989 91 980 32 1897 68 9 1288 1615 24 411 1288 509 25 468 1288 2936 80 696 1615 3404 97 411 1615 3488 41 115 1615 3306 54 27 2133 1288 99 411 2133 4729 87 411 2133 3863 73 751 2133 4040 71 512 2825 3505 95 411 2825 4473 53 527 2825 3891 46 237 3404 4834 67 411 3404 3830 29 812 3404 2916 24 767 3505 2133 65 411 3505 4669 14 628 33 1176 8 137 33 4361 58 798 721 1294 31 137 721 4754 31 137 721 3277 97 408 1176 2038 82 137 1176 602 47 250 1294 1347 19 137 1294 125 98 413 1347 4647 79 137 1347 16 91 482 1347 2851 87 933 2038 2597 16 137 2038 669 70 798 2038 4531 67 123 2237 721 39 137 2237 123 69 216 2237 4967 81 591 2597 2237 3 137 2597 646 54 553 2597 406 92 542 34 2794 77 800 34 4830 9 908 1621 3767 20 800 1621 3714 67 28 1973 4244 45 800 1973 1898 75 241 2046 1973 9 800 2046 4724 1 863 2046 118 52 537 2227 4662 37 800 2227 4459 22 187 2227 3336 40 341 2794 2046 89 800 2794 2739 90 599 3157 1621 49 800 3157 3494 34 679 3767 2227 16 800 3767 4744 7 800 3767 4758 63 873 3767 108 74 694 4244 3157 30 800 4244 415 73 281 4244 4987 70 88 35 1564 72 48 35 782 20 274 35 4287 64 419 1037 1934 67 48 1037 4996 20 12 1037 1692 64 363 1491 3086 32 48 1491 2746 11 353 1491 3621 57 92 1564 3918 54 48 1564 3481 45 900 1564 4688 74 847 1934 4622 31 48 1934 2244 75 48 1934 3761 73 563 2055 1491 20 48 2055 201 21 38 2244 2055 2 48 2244 3991 51 879 2244 3475 70 551 3086 4611 70 48 3086 2405 47 654 3274 1037 9 48 3274 433 64 259 3918 3274 18 48 3918 2824 7 248 36 1696 4 854 36 2848 31 1 36 290 28 614 1148 2960 84 854 1148 3924 89 820 1496 1602 49 854 1496 3642 4 280 1602 3091 60 854 1602 4234 70 312 1696 1148 93 854 1696 3222 15 496 1696 1215 7 858 2960 1496 96 854 2960 4626 61 854 2960 698 43 688 2960 2782 32 372 3091 4894 91 854 3091 628 71 276 3091 251 86 953 37 2345 91 817 37 3013 51 683 1590 4423 14 817 1590 2464 8 613 1590 1745 7 503 1979 4828 7 817 1979 2257 23 35 1979 4348 83 120 2345 1590 46 817 2345 3215 14 872 2345 1180 76 400 2520 2682 49 817 2520 4436 50 295 2682 2970 93 817 2682 4471 51 731 2682 4480 27 149 2970 1979 57 817 2970 4300 64 61 4423 2520 63 817 4423 4892 68 817 4423 725 59 15 4423 4290 23 799 38 829 79 756 38 3503 67 779 746 2810 28 756 746 4212 67 550 746 54 84 390 829 2542 89 756 829 2095 15 630 829 382 24 86 1394 746 54 756 1394 2185 91 484 1394 3163 33 187 1896 4834 90 756 1896 4926 47 756 1896 428 59 433 1896 2645 95 507 2397 2598 69 756 2397 4720 12 42 2542 1394 19 756 2542 4653 36 898 2542 2690 14 265 2598 2965 34 756 2598 827 96 888 2810 2397 62 756 2810 4491 48 6 2810 1478 99 113 2965 1896 96 756 2965 845 75 851 2965 4859 48 396 39 2567 59 523 39 3648 49 726 39 3825 63 948 1054 3118 44 523 1054 1625 1 467 2567 3818 45 523 2567 2959 89 834 2567 1602 93 144 3118 3873 31 523 3118 4637 28 523 3118 3543 50 330 3118 4222 45 497 3818 1054 76 523 3818 4726 100 727 3818 98 70 6 3873 4970 91 523 3873 2000 95 380 3873 635 45 472 40 4274 99 1074 40 2809 28 357 725 4100 70 1074 725 4451 64 946 1654 2888 92 1074 1654 1221 24 529 1654 2703 58 368 2047 4607 100 1074 2047 3772 63 212 2047 4680 88 842 2888 2047 48 1074 2888 4876 3 623 2888 1160 22 191 3909 725 19 1074 3909 3232 1 840 4100 1654 88 1074 4100 4706 56 1074 4100 203 43 426 4100 1749 25 426 4274 3909 39 1074 4274 2248 63 485 41 3449 56 507 41 397 81 544 41 1861 20 632 1081 1616 4 507 1081 4 39 423 1106 4774 87 507 1106 3689 13 783 1106 1812 71 237 1483 1618 41 507 1483 890 28 476 1483 3393 73 447 1616 1752 9 507 1616 1551 61 983 1618 3105 35 507 1618 4080 7 261 1618 4920 57 111 1625 1982 62 507 1625 4272 65 195 1736 4597 94 507 1736 4516 7 507 1736 1625 52 507 1736 503 80 731 1736 3257 4 361 1752 1483 82 507 1752 3205 51 988 1752 3889 98 222 1982 2524 22 507 1982 4474 87 611 2524 1081 37 507 2524 389 35 262 2524 1375 34 833 3105 1106 81 507 3105 4638 20 238 3105 804 25 188 3449 1736 97 507 3449 2279 80 137 3449 1044 15 141 42 2077 67 440 42 4332 100 141 613 4919 27 440 613 1899 66 519 1681 4160 91 440 1681 3786 56 163 2077 2706 40 440 2077 959 30 200 2077 3667 35 424 2197 613 21 440 2197 4641 64 440 2197 4096 22 518 2706 1681 85 440 2706 2325 81 152 3106 2197 52 440 3106 1384 4 469 3106 2615 19 359 4160 3106 82 440 4160 2284 21 160 43 2021 87 256 43 1635 22 683 43 1329 26 210 823 2089 78 256 823 2676 33 796 1503 4794 79 256 1503 2656 65 256 1503 4115 14 196 1503 2627 64 743 2021 2915 9 256 2021 4760 25 425 2021 4047 75 325 2089 1503 96 256 2089 3708 89 189 2089 2977 15 488 2208 4700 55 256 2208 445 73 623 2208 303 37 855 2656 2208 66 256 2656 3339 96 872 2915 823 55 256 2915 4917 69 269 2915 1994 100 708 44 690 67 22 44 1066 29 199 44 3296 48 687 626 2181 71 22 626 4649 76 22 626 1886 27 838 690 626 82 22 690 3598 71 335 690 3316 1 596 1905 3323 3 22 1905 3004 1 985 1905 1010 23 51 2181 2343 2 22 2181 2100 89 716 2181 3750 62 955 2343 1905 50 22 2343 2871 89 974 2343 2443 38 573 3323 3702 59 22 3323 3031 95 425 3702 4206 93 22 3702 841 45 19 4206 4650 76 22 4206 1552 27 596 4206 2502 71 17 45 1079 52 569 45 922 37 300 592 4803 16 569 592 3624 25 48 592 3722 80 88 706 592 9 569 706 3615 46 729 768 4076 30 569 768 1924 18 215 768 2998 6 202 819 706 95 569 819 3972 72 985 819 4224 52 352 1079 4889 8 569 1079 768 87 569 1079 1151 79 131 1702 819 65 569 1702 3541 7 483 1887 2437 49 569 1887 3033 80 429 2437 1702 10 569 2437 3282 86 449 2437 4751 33 886 4076 1887 5 569 4076 2663 8 711 46 2891 93 341 46 4458 48 81 1022 4972 75 341 1022 1045 49 341 1022 2418 13 953 1045 3912 39 341 1045 1869 58 256 1493 3248 33 341 1493 4138 65 397 1787 1493 66 341 1787 3113 64 654 2891 3467 7 341 2891 1947 32 398 3248 4700 90 341 3248 4937 49 804 3248 4185 15 223 3467 1022 94 341 3467 3537 87 390 3467 536 28 396 3912 1787 55 341 3912 3383 6 358 47 2683 39 410 47 320 49 882 679 3860 94 410 679 1966 27 118 679 3483 57 990 1308 4580 34 410 1308 3612 16 410 1308 1960 24 827 1308 2161 52 838 2683 679 79 410 2683 3492 19 918 3001 1308 2 410 3001 3893 68 788 3612 4286 44 410 3612 4230 45 461 3612 4093 40 20 3674 4979 37 410 3674 896 44 524 3674 1309 41 196 3860 3001 38 410 3860 1443 87 266 3860 2255 66 81 4232 3674 67 410 4232 3687 59 364 4232 1782 10 109 4286 4232 15 410 4286 392 51 959 48 2385 11 129 48 707 31 118 729 3792 77 129 729 2665 82 588 729 4717 23 809 2385 3960 91 129 2385 769 58 905 2385 1296 84 628 2387 4887 70 129 2387 1475 92 175 2869 4168 20 129 2869 1753 77 91 2869 151 16 373 3503 2869 85 129 3503 650 94 423 3503 613 24 725 3792 2387 7 129 3792 2555 42 906 3960 4888 59 129 3960 4322 93 129 3960 4948 81 708 3960 2367 25 551 4036 3503 77 129 4036 2959 34 506 4168 729 95 129 4168 4034 33 89 4168 266 88 723 4322 4036 88 129 4322 3 21 160 4322 4094 48 418 49 831 52 1269 49 4763 79 982 49 112 59 271 518 1259 68 1269 518 617 70 841 518 1359 70 261 831 4098 33 1269 831 1415 41 93 1170 2605 6 1269 1170 3414 3 114 1182 518 28 1269 1182 4911 59 649 1259 1726 31 1269 1259 4868 38 770 1671 4705 51 1269 1671 4843 61 1269 1671 2219 63 741 1671 3913 49 816 1726 1170 83 1269 1726 279 41 235 1726 171 84 55 2605 1671 93 1269 2605 2151 56 170 4098 1182 23 1269 4098 3460 32 877 4098 1990 74 206 50 736 67 570 50 689 49 520 50 4628 87 256 736 1069 61 570 736 866 78 533 1041 4041 81 570 1041 4857 3 575 1041 4917 44 924 1069 1041 75 570 1069 2729 18 666 1983 2773 71 570 1983 4799 34 570 1983 4945 95 261 1983 905 11 965 2773 4754 15 570 2773 3892 38 182 4041 1983 6 570 4041 3488 52 471 4041 4606 45 649 51 4422 85 456 51 3598 3 180 51 4132 86 142 1513 3060 24 456 1513 3803 88 786 1608 4139 2 456 1608 846 37 403 2068 1608 26 456 2068 4811 36 456 2068 3222 9 730 3060 4999 23 456 3060 2524 56 227 3060 4274 33 767 4139 1513 74 456 4139 3143 96 624 4422 2068 74 456 4422 1284 66 479 4422 1505 42 635 52 3133 7 320 52 1910 43 481 52 811 21 836 1000 1865 59 320 1000 195 41 151 1000 1768 68 366 1529 1000 94 320 1529 610 85 990 1865 4715 61 320 1865 1574 38 4 2245 1529 65 320 2245 949 2 327 2769 2245 78 320 2769 814 11 339 2957 4485 10 320 2957 408 93 874 2957 655 40 584 3133 3524 12 320 3133 3451 75 611 3133 4482 57 50 3448 2957 5 320 3448 4934 48 320 3448 4273 29 268 3448 4348 19 797 3524 3448 40 320 3524 4545 42 788 4485 2769 98 320 4485 377 80 435 53 2073 98 415 53 3346 73 301 53 1342 48 348 739 3864 100 415 739 2868 60 828 739 39 58 677 814 4923 80 415 814 2812 4 678 1881 3361 31 415 1881 4213 2 866 2032 739 22 415 2032 3538 23 391 2073 4215 92 415 2073 2024 13 930 2073 712 17 366 2433 814 77 415 2433 1467 8 561 2433 2861 80 395 3361 4026 74 415 3361 4527 18 415 3361 4942 40 113 3361 1488 4 395 3864 2433 89 415 3864 3304 78 632 4026 2032 45 415 4026 2360 60 900 4215 1881 86 415 4215 4976 42 811 4215 4052 82 551 54 3488 82 105 54 3267 82 322 1637 4384 11 105 1637 502 55 571 1637 4616 96 636 1886 2130 48 105 1886 1918 49 536 1977 1637 10 105 1977 1861 20 902 2130 4820 64 105 2130 142 59 874 3488 4593 35 105 3488 1977 15 105 3488 2491 9 984 4384 1886 75 105 4384 3337 67 909 55 1163 96 445 55 1296 46 957 55 4058 17 439 603 2477 43 445 603 2582 98 323 603 2797 7 370 1126 603 15 445 1126 1352 28 458 1126 223 89 748 1163 3640 61 445 1163 739 20 289 1275 1126 64 445 1275 1885 53 343 1275 738 87 438 1283 3442 45 445 1283 2625 98 204 1584 4762 79 445 1584 4701 37 445 1584 1740 58 710 2477 1584 93 445 2477 3216 93 870 3442 1275 9 445 3442 3694 21 575 3489 1283 67 445 3489 4987 41 12 3489 2740 27 196 3640 3489 22 445 3640 1046 59 665 3640 3084 58 498 56 3594 78 863 56 2228 77 437 860 4304 98 863 860 4602 90 863 860 3131 74 416 860 3277 97 610 912 2752 78 863 912 4897 42 445 912 3106 99 23 2752 860 53 863 2752 1607 38 677 3003 4594 57 863 3003 3133 12 205 3003 4846 26 471 3349 912 96 863 3349 3759 54 971 3349 2706 97 660 3594 3349 81 863 3594 4409 40 36 3594 4462 88 261 4304 3003 57 863 4304 2786 24 430 4304 2732 100 468 57 4329 93 104 57 3653 23 686 57 369 55 298 1776 2666 82 104 1776 4366 49 624 1776 1710 8 400 1941 3161 72 104 1941 4800 10 104 1941 287 48 991 1941 1086 11 840 1952 1776 14 104 1952 714 72 62 2666 4734 36 104 2666 4359 3 261 3161 4342 78 104 3161 4778 30 960 3161 1180 21 761 3876 1952 44 104 3876 3034 70 104 3876 2921 92 133 4329 1941 30 104 4329 3528 74 872 4342 3876 11 104 4342 737 3 397 58 4273 55 620 58 66 85 33 58 3027 30 167 2097 3231 6 620 2097 1633 90 546 2097 1925 76 513 2488 2097 100 620 2488 3135 72 819 2488 3412 20 329 3089 3202 27 620 3089 2693 53 370 3089 4454 97 961 3202 3224 94 620 3202 3935 1 466 3224 4569 63 620 3224 1096 34 917 3224 3894 4 791 3231 3451 58 620 3231 4797 56 243 3231 2411 45 177 3451 4343 64 620 3451 4940 62 620 3451 2881 44 225 3451 1564 37 100 4273 2488 25 620 4273 1289 97 902 4343 3089 31 620 4343 1132 74 677 4343 2234 33 142 59 2523 21 300 59 4912 50 128 59 1419 19 300 1205 2110 3 300 1205 102 28 616 1305 2375 15 300 1305 4581 78 674 2110 4505 36 300 2110 1305 21 300 2110 4032 88 487 2375 4829 33 300 2375 1027 26 645 2523 1205 78 300 2523 4168 38 806 60 1061 97 286 60 2677 12 71 1061 3241 46 286 1061 199 19 311 1061 498 23 238 1832 2673 98 286 1832 2189 98 186 1832 4795 10 893 2257 1832 55 286 2257 72 87 587 2673 4720 48 286 2673 2709 75 498 2673 812 9 966 2852 4860 73 286 2852 3175 55 286 2852 1221 9 519 3175 4461 28 286 3175 4032 60 705 3241 2852 69 286 3241 2373 85 517 3241 4544 61 258 4461 2257 93 286 4461 770 90 63 61 1250 83 435 61 3215 52 624 853 1703 49 435 853 4587 76 435 853 4742 52 223 853 2132 7 837 1250 853 51 435 1250 2087 3 773 1642 1876 27 435 1642 476 86 887 1642 3153 81 22 1703 1642 51 435 1703 1191 76 648 1703 49 70 89 1840 4603 85 435 1840 2050 83 521 1876 1840 65 435 1876 2208 77 633 62 3309 9 87 62 1942 79 920 62 3568 53 381 608 2161 23 87 608 4530 50 822 869 1823 74 87 869 3054 90 511 1269 2117 7 87 1269 4954 77 941 1269 4888 12 115 1296 869 54 87 1296 4273 100 677 1823 3005 54 87 1823 1083 75 793 2117 3162 4 87 2117 2757 35 722 2161 4860 55 87 2161 3921 4 832 3005 1269 28 87 3005 4285 20 16 3005 4287 8 593 3162 608 90 87 3162 455 22 967 3162 3909 40 926 3309 1296 49 87 3309 4966 31 87 3309 782 53 985 3309 4448 88 294 63 3454 86 97 63 638 63 630 1403 3243 61 97 1403 1559 6 502 1820 3208 43 97 1820 559 78 466 2419 4796 27 97 2419 4603 61 97 2419 3740 11 470 2419 4129 38 45 3208 3302 77 97 3208 2553 36 354 3208 439 95 431 3243 1820 58 97 3243 3795 9 260 3302 2419 52 97 3302 2706 32 398 3302 4356 90 158 3454 4394 67 97 3454 1459 48 190 3454 565 91 112 4394 1403 1 97 4394 4806 92 587 64 1925 100 435 64 305 62 484 837 4637 99 435 837 4972 90 435 837 1592 25 557 1032 2365 87 435 1032 748 65 242 1032 4487 89 863 1925 3996 98 435 1925 612 63 423 2264 3514 13 435 2264 1353 17 411 2365 837 7 435 2365 2697 14 954 3514 1032 79 435 3514 3878 59 966 3996 2264 35 435 3996 262 31 909 65 2164 93 773 65 1415 53 502 65 2070 16 376 841 4400 1 773 841 1984 37 785 841 3727 28 374 893 3948 48 773 893 3871 37 777 893 4641 76 243 1036 3308 74 773 1036 4033 70 625 1036 4103 53 850 1812 4567 11 773 1812 3367 87 289 2164 841 24 773 2164 1199 86 255 3308 893 75 773 3308 2179 74 774 3308 708 99 202 3948 1812 70 773 3948 4554 41 773 3948 3541 34 928 4400 1036 34 773 4400 4887 93 405 4400 1783 46 65 66 3072 83 137 66 3650 87 350 66 1791 22 190 590 4593 92 137 590 2433 52 64 590 4904 74 151 2615 4126 23 137 2615 4509 55 259 2615 289 75 744 3072 3136 92 137 3072 2589 35 6 3136 3344 61 137 3136 1095 48 726 3344 4875 51 137 3344 3592 74 137 3344 3991 40 431 3592 4010 100 137 3592 2868 87 636 3592 1704 23 941 4010 2615 33 137 4010 2707 63 258 4126 590 6 137 4126 2656 93 897 67 3090 6 99 67 84 17 240 67 3155 62 118 1183 3743 90 99 1183 2073 69 980 2378 2824 79 99 2378 1857 45 773 2378 3229 44 126 2824 3581 70 99 2824 2975 68 257 2824 42 1 695 3090 2378 4 99 3090 92 47 815 3090 4016 26 584 3411 3961 7 99 3411 4708 42 99 3411 439 29 152 3411 587 41 59 3581 3411 45 99 3581 2234 22 470 3743 4733 97 99 3743 1519 2 793 3961 1183 92 99 3961 1054 34 250 68 1111 52 792 68 734 28 318 68 118 36 853 591 4388 20 792 591 2805 54 228 838 3038 57 792 838 97 78 544 861 2054 41 792 861 1963 37 996 861 1123 28 665 1111 3718 1 792 1111 1459 71 689 1111 592 17 290 1978 838 88 792 1978 762 32 884 1978 674 56 781 2054 1978 12 792 2054 1869 14 835 2054 4450 6 708 2314 4527 79 792 2314 3221 67 465 2314 3227 56 185 3038 591 59 792 3038 4955 70 792 3038 777 12 603 3038 2711 2 45 3718 861 8 792 3718 3504 68 528 4388 2314 42 792 4388 2991 26 849 4388 1894 24 105 69 751 81 544 69 3944 47 339 751 1333 24 544 751 22 81 656 751 2806 95 124 1310 3121 83 544 1310 3636 76 556 1333 3732 45 544 1333 4301 56 823 1333 360 35 655 2152 1310 5 544 2152 499 6 103 2152 94 15 174 2538 4520 44 544 2538 2906 81 544 2538 1297 41 185 2906 3209 49 544 2906 3993 60 657 3121 4549 13 544 3121 2815 16 951 3121 3812 7 523 3209 2152 56 544 3209 1089 48 475 3209 4396 23 766 3732 2538 31 544 3732 4575 95 410 3732 4807 54 534 70 3020 92 558 70 2643 28 138 576 3833 82 558 576 4608 94 646 680 4864 94 558 680 1614 6 558 680 2544 60 25 999 1991 45 558 999 4688 73 558 999 3409 96 835 999 324 20 534 1108 999 10 558 1108 1926 8 964 1108 2698 98 160 1189 2583 13 558 1189 1627 78 159 1189 4858 47 797 1588 4625 97 558 1588 438 69 735 1588 706 60 928 1614 576 30 558 1614 4896 65 945 1991 1189 22 558 1991 1443 56 873 2583 4017 86 558 2583 1043 24 678 2583 4064 25 393 3020 1108 13 558 3020 4924 68 646 3833 1588 33 558 3833 1509 10 440 4017 680 45 558 4017 1692 5 779 4017 3333 62 343 71 3590 78 275 71 1512 32 518 71 3566 55 276 971 1350 84 275 971 2908 18 125 1011 2849 4 275 1011 3385 17 722 1268 1011 40 275 1268 583 31 507 1268 1493 63 191 1350 1268 82 275 1350 4975 20 275 1350 4048 32 719 2543 4784 72 275 2543 2018 17 205 2849 2543 43 275 2849 1350 93 924 3240 971 63 275 3240 2980 51 965 3240 2638 59 331 3415 3240 24 275 3415 2088 21 438 3590 4092 64 275 3590 3998 69 935 4092 3415 70 275 4092 4350 88 751 72 1817 36 467 72 1927 31 60 795 4877 6 467 795 3051 97 442 1817 4529 20 467 1817 4247 83 467 1817 653 86 8 1817 4265 64 86 2667 795 22 467 2667 118 88 209 2667 1924 38 119 2911 2976 96 467 2911 218 88 726 2911 6 33 538 2976 2667 63 467 2976 2351 13 372 2976 1188 1 470 3999 2911 31 467 3999 435 5 512 4247 3999 91 467 4247 760 72 391 4247 881 41 911 73 1860 76 350 73 550 69 788 73 957 25 889 578 4355 45 350 578 544 28 866 1068 3881 7 350 1068 3793 5 129 1068 4257 46 192 1860 578 89 350 1860 4833 60 350 1860 2842 37 825 2075 1068 19 350 2075 2035 91 23 2646 4625 92 350 2646 97 11 977 2646 4851 18 499 2838 2075 35 350 2838 2389 61 682 3881 4495 8 350 3881 3367 13 121 4334 2646 88 350 4334 3033 32 691 4334 1914 56 676 4355 2838 63 350 4355 4316 29 331 4495 4334 64 350 4495 444 73 167 74 1293 3 477 74 2001 79 749 74 73 98 410 524 4730 53 477 524 4896 71 366 524 3647 48 716 1293 4350 43 477 1293 4609 7 537 1293 3988 84 852 1432 3030 4 477 1432 4616 86 884 2124 3850 36 477 2124 1651 39 638 2124 2499 75 831 3030 2124 16 477 3030 2488 51 132 3030 4990 59 679 3850 524 23 477 3850 4003 28 500 3850 1910 90 86 4350 1432 57 477 4350 4785 13 477 4350 1306 16 886 4350 4830 59 126 75 3613 48 1231 75 1858 10 886 75 2110 17 162 1153 2657 24 1231 1153 4470 34 591 1153 1279 71 708 1215 4933 28 1231 1215 1572 45 938 1457 1215 64 1231 1457 4897 11 368 1568 1690 82 1231 1568 3105 93 800 1690 1457 34 1231 1690 1454 92 186 2657 1568 32 1231 2657 4954 17 575 2657 2941 29 94 3613 3949 50 1231 3613 1747 53 757 3949 4411 32 1231 3949 4761 47 528 4411 1153 35 1231 4411 4868 81 1231 4411 2760 75 454 4411 1081 53 963 76 1468 11 486 76 650 39 678 791 3902 90 486 791 4226 36 985 791 2773 2 356 972 3556 50 486 972 695 32 173 972 2163 3 235 1369 972 33 486 1369 666 88 597 1396 791 100 486 1396 1051 67 905 1468 1396 80 486 1468 534 71 398 3556 3762 24 486 3556 2610 84 919 3556 4489 5 833 3762 4749 27 486 3762 4516 9 486 3762 2717 97 653 3902 4013 42 486 3902 2667 39 468 4013 1369 30 486 4013 272 67 749 77 3700 69 773 77 2638 66 273 77 3307 4 750 1469 2090 19 773 1469 1544 38 86 1469 965 42 690 1678 2577 3 773 1678 987 80 998 2090 2400 3 773 2090 4557 28 773 2090 3561 100 6 2090 1032 38 575 2400 2758 79 773 2400 2159 98 351 2577 2841 37 773 2577 3387 69 700 2758 3203 42 773 2758 4693 64 723 2758 552 57 811 2841 3637 71 773 2841 4068 59 106 2841 2948 67 830 3203 4587 25 773 3203 2169 97 486 3203 3487 23 856 3637 1469 54 773 3637 169 91 773 3637 4803 5 656 3700 1678 14 773 3700 4894 100 749 3700 3254 5 674 78 4195 37 422 78 2431 96 456 78 1292 25 432 637 3080 91 422 637 361 16 278 2287 4810 89 422 2287 4366 83 881 2287 2684 42 75 2977 2287 9 422 2977 3539 46 913 2977 3959 10 970 3080 4770 49 422 3080 2977 56 422 3080 3993 16 344 3080 3976 98 35 4195 637 73 422 4195 2336 77 837 79 3474 78 526 79 4411 1 145 79 399 97 616 1874 2949 39 526 1874 317 31 257 1874 2915 58 817 2949 4569 12 526 2949 166 35 134 2949 4792 72 924 3474 4057 50 526 3474 4597 20 526 3474 4563 20 94 3474 3032 78 434 3629 3803 56 526 3629 2282 54 710 3803 4289 48 526 3803 1246 87 997 4012 1874 53 526 4012 2941 54 652 4012 3666 39 471 4057 3629 90 526 4057 1023 39 876 4289 4012 42 526 4289 2646 67 205 4289 4670 72 21 80 2921 95 402 80 2138 7 282 1532 2135 73 402 1532 3684 21 760 1891 3908 63 402 1891 259 38 652 1891 1941 3 248 2135 4515 67 402 2135 3691 95 279 2141 3959 14 402 2141 341 28 309 2921 4198 45 402 2921 3242 72 376 3628 4492 9 402 3628 2332 61 715 3908 4011 60 402 3908 2677 85 525 3959 3628 14 402 3959 215 51 625 4011 1532 33 402 4011 3063 93 192 4198 2141 91 402 4198 4839 50 402 4198 1710 94 229 4198 3047 50 553 4492 1891 52 402 4492 2274 69 268 81 2434 6 602 81 4235 63 785 951 3027 53 602 951 3188 58 380 951 708 3 825 1026 2166 78 602 1026 1759 42 779 1822 3316 41 602 1822 451 10 517 2166 4572 35 602 2166 1001 19 234 2434 2636 55 602 2434 2924 58 924 2636 3298 64 602 2636 1171 34 755 2636 714 4 199 3027 4265 74 602 3027 1070 78 93 3298 951 91 602 3298 212 26 911 3298 3070 33 905 3316 4051 2 602 3316 4868 65 296 3316 2303 80 96 4051 1026 73 602 4051 48 32 377 4265 1822 77 602 4265 4840 89 602 4265 333 2 811 82 3207 87 262 82 2016 98 787 82 4323 23 472 2156 3102 41 262 2156 4856 43 262 2156 194 91 342 2156 4406 12 241 2282 2156 87 262 2282 3600 21 878 2282 2105 3 180 2902 4754 8 262 2902 188 2 596 2902 2611 63 49 3102 3922 97 262 3102 4150 64 565 3102 4750 97 446 3207 2282 12 262 3207 3378 88 279 3922 2902 19 262 3922 2040 45 500 83 2167 34 321 83 3772 54 32 554 2414 11 321 554 924 9 413 554 613 83 57 966 4272 91 321 966 4552 33 321 966 4564 56 797 966 4208 47 501 2167 3000 69 321 2167 4888 82 209 2167 3364 6 731 2171 2511 42 321 2171 1086 29 50 2296 2171 44 321 2296 4443 1 861 2296 4169 21 480 2351 2296 66 321 2351 2404 68 775 2351 2335 88 897 2414 966 34 321 2414 3381 71 435 2511 554 80 321 2511 67 17 398 3000 2351 63 321 3000 3369 54 444 3000 822 11 704 4272 4572 65 321 4272 4649 41 936 4272 922 10 679 84 2517 5 1135 84 3461 36 852 1073 2399 56 1135 1073 4178 75 920 1073 2453 84 839 1535 1073 19 1135 1535 3869 58 188 2399 3891 62 1135 2399 4528 98 855 2399 507 60 98 2517 4478 49 1135 2517 1570 85 993 3834 1535 36 1135 3834 1298 55 903 3834 4853 68 572 3891 4717 60 1135 3891 1586 72 318 3891 1121 94 954 4478 3834 28 1135 4478 4875 64 1135 4478 3712 34 959 4478 234 26 160 85 2828 6 459 85 2695 75 62 622 2427 33 459 622 4996 62 897 830 4765 48 459 830 4872 82 921 830 1500 35 109 1763 3735 12 459 1763 4070 78 274 2427 830 36 459 2427 4905 23 459 2427 3147 1 569 2427 421 19 618 2489 3755 83 459 2489 1477 94 293 2489 4960 89 480 2828 2489 14 459 2828 4961 64 644 2828 2108 24 513 3735 622 74 459 3735 4532 36 50 3735 58 65 672 3755 1763 34 459 3755 955 82 247 3755 216 99 975 86 3172 63 915 86 2576 5 971 974 3007 94 915 974 3226 30 773 1178 4784 12 915 1178 4710 94 915 1178 2987 36 508 2059 974 21 915 2059 4526 76 557 3007 1178 64 915 3007 4610 45 967 3172 3315 51 915 3172 1790 8 66 3315 2059 90 915 3315 3801 47 499 3315 2909 98 704 87 1958 92 505 87 2342 15 288 826 1629 34 505 826 2435 93 127 826 508 22 516 1272 1969 66 505 1272 127 96 585 1272 3733 90 796 1629 4035 58 505 1629 827 6 311 1629 2318 79 500 1958 4668 44 505 1958 1272 91 505 1958 4991 24 322 1969 2916 59 505 1969 992 56 723 1969 2053 72 260 2546 4815 11 505 2546 962 34 28 2916 826 37 505 2916 3974 97 202 4035 2546 6 505 4035 4988 15 268 88 957 70 193 88 4453 34 366 88 2187 93 135 957 3275 33 193 957 4735 79 193 957 4367 2 158 1474 2586 78 193 1474 1806 56 318 1474 1342 52 728 1747 2529 55 193 1747 948 13 955 1747 4244 43 745 2529 4468 95 193 2529 3203 98 350 2529 4454 45 919 2586 5000 32 193 2586 1293 79 987 3275 1747 74 193 3275 4297 8 884 3574 1474 46 193 3574 339 77 766 3574 997 41 384 4468 3574 7 193 4468 1611 60 173 4468 2428 46 43 89 3013 85 1133 89 3914 36 527 868 2491 88 1133 868 1531 28 467 868 2073 87 769 1102 1358 79 1133 1102 556 20 37 1102 575 3 956 1358 868 71 1133 1358 4483 83 798 1358 3712 11 50 2162 2350 14 1133 2162 690 11 222 2350 4544 40 1133 2350 4967 68 1133 2350 4682 39 920 2491 2162 68 1133 2491 3853 51 995 2491 2110 59 856 3013 1102 38 1133 3013 3523 71 167 3013 4563 3 313 90 1245 75 500 90 1680 96 485 90 4649 37 725 1121 3880 23 500 1121 1891 25 391 1121 948 78 448 1245 3043 40 500 1245 4679 83 89 1522 3570 99 500 1522 4310 5 416 1522 2656 94 363 2819 1522 62 500 2819 364 54 844 2819 76 55 366 3043 2819 10 500 3043 2593 27 516 3043 1101 13 674 3093 4559 39 500 3093 3399 17 746 3093 2913 56 943 3570 1121 82 500 3570 4712 98 500 3570 1172 76 522 3880 3093 84 500 3880 1111 7 690 91 3168 47 742 91 4704 57 882 781 4696 8 742 781 576 37 512 788 2622 17 742 788 3437 63 272 1772 2993 98 742 1772 2661 16 990 1772 2140 9 737 2622 3350 91 742 2622 3593 6 913 2993 4377 77 742 2993 371 47 668 3168 788 62 742 3168 255 71 602 3350 1772 78 742 3350 4117 63 355 3350 3346 66 779 4239 781 12 742 4239 3199 98 142 4377 4239 63 742 4377 4705 63 742 4377 896 46 419 92 3911 81 403 92 4815 47 696 696 2855 33 403 696 4512 92 403 696 3725 12 387 908 696 37 403 908 2771 45 110 2855 3616 33 403 2855 2413 8 439 2855 1667 63 520 2884 3185 81 403 2884 1845 28 715 2884 142 72 774 3185 908 100 403 3185 2943 72 437 3185 676 41 556 3616 4787 8 403 3616 4802 75 969 3911 2884 81 403 3911 2032 26 148 3911 3155 92 273 93 1285 13 442 93 1256 87 384 1085 4094 36 442 1085 3504 39 934 1285 2258 26 442 1285 3527 79 807 1285 2768 34 598 1442 1485 8 442 1442 915 6 951 1485 2654 64 442 1485 3834 80 555 1485 3994 82 761 1524 1085 67 442 1524 2940 59 917 1524 4380 67 454 2258 2506 49 442 2258 888 40 968 2258 980 67 841 2506 4121 61 442 2506 3016 83 650 2506 3243 39 246 2654 1524 38 442 2654 4535 30 722 2654 988 53 548 4094 4685 12 442 4094 4510 64 442 4094 1033 91 642 4094 4770 80 996 4121 1442 10 442 4121 2192 41 977 4121 4085 72 940 94 2229 77 1077 94 864 62 198 94 2522 67 40 880 1030 94 1077 880 1133 98 242 1030 2196 41 1077 1030 2607 30 569 1030 435 7 884 1064 2095 28 1077 1064 3483 14 555 2095 4002 9 1077 2095 1959 43 780 2095 1025 39 552 2196 1064 24 1077 2196 4604 60 1077 2196 4337 15 88 2196 349 100 413 2229 2555 86 1077 2229 3259 20 993 2555 880 4 1077 2555 1875 31 461 2555 1770 13 923 4002 4553 25 1077 4002 4973 4 739 4002 2160 63 399 95 1105 13 552 95 1626 85 155 95 4780 39 558 1105 2469 94 552 1105 4968 42 897 1105 4017 36 39 1499 4104 9 552 1499 4566 47 818 1656 4810 20 552 1656 1681 15 267 1660 1656 44 552 1660 4967 14 552 1660 4458 23 433 1796 3838 1 552 1796 1269 23 47 1796 2440 84 947 2469 4224 56 552 2469 4494 33 344 2469 1318 46 254 3838 1499 38 552 3838 863 68 932 3838 782 32 273 4104 1660 84 552 4104 2815 49 146 4104 384 12 65 4224 1796 64 552 4224 635 59 561 96 2831 40 398 96 360 76 538 547 4551 17 398 547 1488 19 398 547 4603 31 55 1488 3555 81 398 1488 2938 23 23 2831 3052 95 398 2831 899 82 38 2831 4748 86 300 3052 3437 46 398 3052 1237 7 945 3437 547 12 398 3437 4121 8 414 3555 4805 20 398 3555 3697 82 315 3555 1512 94 36 97 1262 55 292 97 4976 40 928 97 893 79 428 1262 4226 15 292 1262 2843 85 105 1430 2530 25 292 1430 764 7 449 1430 184 27 848 1708 4755 43 292 1708 4704 7 292 1708 4758 48 752 1708 3301 98 375 2034 2518 94 292 2034 1290 40 415 2034 4317 58 149 2328 1430 61 292 2328 660 86 174 2518 1708 29 292 2518 1002 64 215 2518 1546 19 458 2530 2034 78 292 2530 248 11 55 3405 2328 16 292 3405 4212 34 459 4226 3405 58 292 4226 2372 48 85 4226 1179 5 406 98 2206 11 1180 98 3981 19 359 1984 3801 60 1180 1984 4359 19 396 1984 3450 12 763 2206 3327 96 1180 2206 3614 67 34 3252 4910 24 1180 3252 1444 42 463 3252 2544 3 384 3327 4406 84 1180 3327 3531 4 797 3327 1981 6 795 3801 3252 2 1180 3801 4954 42 1180 3801 3455 84 818 3801 2733 58 253 4406 1984 50 1180 4406 1363 99 20 4406 4460 43 221 99 1426 5 449 99 3868 45 417 1033 1707 48 449 1033 4540 34 582 1033 4390 90 537 1426 1033 78 449 1426 1973 39 859 1707 3075 4 449 1707 340 77 364 1707 2656 45 407 1932 3458 38 449 1932 3174 52 401 1932 1745 10 567 3075 3507 61 449 3075 3216 81 904 3458 3826 95 449 3458 2361 3 445 3507 1932 53 449 3507 4667 64 449 3507 3187 15 596 3507 3053 56 624 3826 4596 82 449 3826 4735 85 173 100 2933 66 618 100 3283 61 752 2214 3465 33 618 2214 3105 74 368 2214 926 45 504 2232 2964 45 618 2232 2912 36 528 2232 4912 71 46 2330 2214 78 618 2330 2796 55 197 2330 218 27 27 2933 2232 39 618 2933 4575 75 595 2933 1473 100 380 2964 3977 38 618 2964 4738 66 618 2964 1513 88 211 3465 4825 68 618 3465 4019 41 614 3465 591 47 214 3492 3893 28 618 3492 934 35 584 3492 1613 20 543 3893 2330 20 618 3893 3425 71 204 3893 3098 31 885 3977 3492 8 618 3977 3337 12 273 3977 3129 20 758 101 4093 64 623 101 2346 8 300 101 44 7 833 581 4515 1 623 581 4648 40 623 581 3785 70 671 663 2620 53 623 663 4200 45 426 663 65 57 748 854 663 35 623 854 303 73 904 2620 3539 84 623 2620 3922 50 374 2668 4037 51 623 2668 1316 27 241 2668 3846 14 378 3539 3848 10 623 3539 2802 15 714 3848 2668 27 623 3848 2410 35 272 3848 4371 33 940 4037 581 52 623 4037 576 59 823 4037 1292 35 881 4093 854 82 623 4093 1696 56 733 102 3112 28 695 102 3029 38 598 102 2659 38 981 2175 3605 34 695 2175 2253 93 235 2753 4730 80 695 2753 3869 40 866 2798 2753 99 695 2798 3814 70 302 2798 4260 61 4 3112 4378 66 695 3112 2573 13 60 3112 3788 71 86 3605 4170 12 695 3605 2818 7 272 4170 2798 3 695 4170 871 90 79 4170 1376 9 36 4378 2175 26 695 4378 4797 22 695 4378 1485 9 200 4378 4627 45 690 103 3419 15 312 103 2244 64 796 103 2117 79 659 947 2066 83 312 947 3735 96 965 1948 3017 56 312 1948 2771 57 977 2066 1948 64 312 2066 4188 27 372 2066 4544 28 588 2112 3443 48 312 2112 1716 54 109 2112 4894 22 304 3017 4141 34 312 3017 4301 73 957 3419 947 67 312 3419 4750 34 312 3419 3115 100 96 3443 4657 46 312 3443 942 97 720 4141 2112 95 312 4141 1181 53 447 104 2878 76 447 104 4104 20 324 1954 4886 8 447 1954 4766 88 447 1954 2827 74 192 2294 4148 42 447 2294 1573 49 409 2294 4413 80 13 2391 1954 75 447 2391 1108 87 753 2756 4154 15 447 2756 2520 91 33 2756 2135 93 408 2878 3339 85 447 2878 4528 76 683 3339 2294 58 447 3339 4840 79 699 3339 4820 36 967 4148 4298 63 447 4148 791 1 923 4148 2585 20 422 4154 2391 75 447 4154 2537 20 355 4154 277 45 56 4298 2756 73 447 4298 2377 88 435 4298 4252 51 701 105 1001 71 420 105 2579 88 601 833 2678 76 420 833 1794 18 418 833 3106 63 31 994 4763 79 420 994 4061 63 81 1001 4216 92 420 1001 4109 33 335 1083 4536 60 420 1083 2547 16 420 1083 2002 79 132 1083 3648 77 215 2547 833 40 420 2547 4180 84 654 2678 994 62 420 2678 3643 5 149 2678 1533 37 43 3729 1083 24 420 3729 2255 53 328 4216 3729 45 420 4216 4242 39 204 4216 4976 93 602 106 3301 71 758 106 2686 44 985 106 199 88 235 1169 3067 79 758 1169 3709 96 789 1428 4660 62 758 1428 4888 14 636 1428 1697 39 813 1444 4367 62 758 1444 2320 9 838 1444 3097 7 274 3067 3795 71 758 3067 4295 59 590 3067 4706 29 278 3301 1169 90 758 3301 1202 78 441 3795 1444 99 758 3795 4829 100 758 3795 4709 16 476 3795 3983 67 935 4114 1428 21 758 4114 1864 41 593 4367 4114 40 758 4367 805 3 511 107 2540 86 880 107 2668 22 456 895 1987 75 880 895 2896 6 989 983 2551 67 880 983 4718 3 495 1512 895 53 880 1512 181 60 240 1512 2698 69 965 1570 983 22 880 1570 1900 73 724 1667 4916 85 880 1667 3330 59 880 1667 3571 43 110 1667 2116 81 807 1987 2581 93 880 1987 780 39 157 1987 4944 20 768 2540 1512 39 880 2540 2122 92 42 2551 4790 13 880 2551 2309 52 484 2581 1667 33 880 2581 871 83 442 3330 1570 17 880 3330 3209 88 945 108 3607 73 846 108 1800 86 435 1025 1773 28 846 1025 2608 23 157 1025 2268 47 965 1322 4862 35 846 1322 4583 43 846 1322 3588 96 849 1322 4764 23 146 1773 3946 34 846 1773 322 31 415 3607 1025 41 846 3607 4179 67 886 3607 2565 70 93 3946 1322 37 846 3946 756 32 706 109 1749 60 694 109 3051 11 184 109 2236 22 649 568 2613 61 694 568 255 53 590 568 374 53 803 1239 4856 55 694 1239 3194 100 694 1239 1299 92 291 1239 3546 34 740 1251 4172 42 694 1251 475 16 175 1251 4904 48 902 1544 4583 7 694 1544 4730 36 197 1544 1211 89 358 1620 1251 16 694 1620 4713 50 172 1622 1544 38 694 1622 3232 60 996 1749 1620 19 694 1749 618 1 254 1749 1726 16 968 1789 1239 26 694 1789 4819 63 757 1789 3838 47 153 2613 1622 75 694 2613 4476 1 813 2613 2275 6 969 3194 568 30 694 3194 4056 7 257 3194 1569 78 566 4172 1789 77 694 4172 426 45 737 110 1161 35 804 110 117 69 728 110 1036 10 858 703 4759 4 804 703 3335 76 757 703 4688 45 675 1161 3797 82 804 1161 4874 8 804 1161 3205 24 221 2890 703 12 804 2890 4144 76 835 3371 2890 15 804 3371 227 30 310 3513 3371 92 804 3513 1640 37 248 3513 3683 85 358 3797 3513 40 804 3797 4718 94 93 3797 2972 5 234 111 1888 14 411 111 2668 25 341 111 3079 95 760 1640 2502 26 411 1640 4795 10 662 1640 1519 82 70 1888 3608 70 411 1888 4742 50 411 1888 2482 93 513 2502 4534 58 411 2502 630 5 648 3608 4217 41 411 3608 2222 5 320 3608 4762 45 245 4217 1640 94 411 4217 1433 9 561 112 1346 53 299 112 298 83 310 654 2031 96 299 654 2253 15 433 654 1739 64 472 1222 2494 23 299 1222 4628 63 299 1222 4556 13 349 1346 2432 53 299 1346 1128 67 194 1346 543 9 705 2031 1222 57 299 2031 4374 62 700 2031 2103 14 325 2368 4477 56 299 2368 666 5 721 2432 3220 1 299 2432 2012 6 975 2432 4552 52 555 2494 4945 65 299 2494 2905 57 47 2494 4580 98 129 3220 4038 69 299 3220 4983 2 445 4038 2368 2 299 4038 3190 30 593 4477 654 45 299 4477 2949 61 947 113 754 93 395 113 1813 53 198 113 3854 25 26 515 3335 20 395 515 2833 21 615 515 1637 100 326 754 515 65 395 754 3831 24 626 754 1669 69 783 1057 3491 20 395 1057 897 51 407 1057 2162 96 537 3165 4968 37 395 3165 4577 18 395 3165 1797 99 665 3165 1336 26 534 3335 4059 46 395 3335 3208 40 330 3491 3165 82 395 3491 1163 29 187 3491 1744 94 974 4059 1057 2 395 4059 568 41 729 4059 2388 4 479 114 2310 33 120 114 3611 70 478 114 918 81 456 1223 4788 2 120 1223 1286 98 875 1223 1580 57 657 1899 3692 57 120 1899 2726 72 224 2310 4336 56 120 2310 1041 12 89 2310 2204 29 864 3044 1223 68 120 3044 2074 40 767 3692 4530 40 120 3692 3044 34 120 3692 2483 42 171 4336 1899 41 120 4336 643 98 207 4336 305 2 253 115 1859 32 702 115 3428 21 22 115 2699 93 499 704 2349 72 702 704 2259 49 540 704 3383 66 245 1219 704 57 702 1219 3454 5 850 1373 3500 61 702 1373 342 23 149 1859 1373 11 702 1859 1685 90 424 2349 4525 10 702 2349 4947 19 702 2349 3722 98 304 2349 4928 12 629 2402 1219 80 702 2402 669 69 560 2402 1028 21 286 3500 4347 17 702 3500 1162 92 7 4347 2402 32 702 4347 2493 68 41 4347 3658 77 500 116 3472 94 269 116 3011 21 963 956 4498 9 269 956 4617 74 147 2026 3303 4 269 2026 2098 15 78 3148 956 66 269 3148 552 91 938 3148 3512 35 688 3303 4301 38 269 3303 89 74 854 3303 1872 73 21 3472 2026 47 269 3472 672 87 889 3472 1741 57 527 4138 4649 37 269 4138 4543 7 269 4138 3018 44 628 4301 3148 36 269 4301 2178 25 181 4498 4138 72 269 4498 1577 72 975 4498 4183 5 827 117 4128 78 703 117 264 69 513 1699 4150 42 703 1699 2277 79 706 1794 4883 24 703 1794 1832 64 882 2498 1794 83 703 2498 1294 35 266 2498 2121 2 18 2512 4928 1 703 2512 3284 16 703 2512 1223 69 416 3277 2498 69 703 3277 4795 31 48 3277 1040 27 137 3284 3277 51 703 3284 3449 30 413 4128 1699 23 703 4128 2104 54 85 4150 2512 40 703 4150 1941 18 464 118 1609 88 619 118 4697 41 760 118 826 4 502 535 675 96 619 535 1075 79 479 675 1038 72 619 675 487 18 743 675 4320 33 362 1038 3824 6 619 1038 4386 71 518 1609 1647 89 619 1609 2067 34 627 1647 3466 92 619 1647 4522 57 619 1647 343 9 366 2367 3885 56 619 2367 3625 15 305 3466 2367 79 619 3466 1300 79 325 3466 2507 83 743 3824 4726 97 619 3824 2840 81 405 3824 4816 83 130 3885 535 86 619 3885 201 66 832 3885 2978 18 655 119 4219 12 172 119 1544 35 516 119 3889 43 710 512 1168 68 172 512 298 96 29 946 512 2 172 946 2531 64 33 1168 3651 15 172 1168 4770 28 172 1168 1233 54 295 1168 3464 75 267 1425 1679 88 172 1425 1241 97 379 1425 3227 73 1 1679 4496 92 172 1679 2097 51 872 1679 3031 37 688 1988 4042 55 172 1988 2769 82 381 1988 2698 17 471 2225 946 34 172 2225 2395 76 464 3398 2225 13 172 3398 4601 5 172 3398 4878 46 79 3651 1988 32 172 3651 1517 64 128 3651 4114 16 105 4042 1425 12 172 4042 4466 41 713 4219 3398 35 172 4219 441 13 574 4219 1796 45 690 4496 4810 19 172 4496 3296 39 98 120 4365 19 689 120 1075 25 988 120 2207 27 184 820 2807 35 689 820 2419 39 338 820 4397 96 963 1372 1975 15 689 1372 3149 90 680 1372 3700 73 292 1975 4043 41 689 1975 388 63 788 1975 2044 35 563 2188 2731 16 689 2188 4506 13 885 2188 3230 79 908 2731 4631 68 689 2731 207 2 314 2731 783 58 661 2807 2188 89 689 2807 606 90 393 4043 820 28 689 4043 4608 91 689 4043 1801 66 76 4043 4369 56 871 4365 1372 62 689 4365 1360 20 639 121 2262 5 341 121 3747 54 648 121 18 31 874 558 4135 59 341 558 795 65 37 558 3855 84 43 2094 3281 49 341 2094 559 72 785 2262 3360 16 341 2262 2799 10 419 2262 865 84 478 3281 4706 33 341 3281 3742 35 885 3360 3722 85 341 3360 3222 62 226 3722 4270 33 341 3722 4870 8 965 3722 1500 1 519 4135 2094 52 341 4135 3919 17 875 4270 558 26 341 4270 4602 67 341 4270 2459 98 811 4270 3188 58 73 122 3280 22 699 122 2561 51 773 122 2655 53 102 1351 1687 27 699 1351 1176 37 228 1687 3313 97 699 1687 3242 71 883 1687 2122 64 887 2216 4211 52 699 2216 3888 43 420 2216 644 54 304 3280 1351 43 699 3280 1340 56 864 3313 2216 69 699 3313 4701 100 699 3313 2388 50 175 3313 3213 33 388 4211 4924 19 699 4211 22 24 331 123 2475 78 735 123 2266 9 704 123 1573 74 424 1188 3606 80 735 1188 3915 8 68 1188 4877 69 945 1472 4876 57 735 1472 1916 12 964 1472 2662 37 68 2475 1188 19 735 2475 4078 11 427 2475 3127 20 517 2607 4844 79 735 2607 3433 61 735 2607 199 60 411 3433 1472 27 735 3433 4405 93 585 3606 4255 63 735 3606 4748 78 304 4255 2607 50 735 4255 325 77 991 4255 892 97 292 124 3596 64 4 124 4368 60 49 124 3217 77 289 847 3066 78 4 847 4912 36 430 1298 4667 36 4 1298 3310 99 4 1298 893 31 975 1744 3076 75 4 1744 1192 85 648 1818 1298 14 4 1818 3783 53 137 1818 1529 18 872 2284 3659 68 4 2284 1297 74 108 2783 1818 93 4 2783 4998 94 4 2783 1969 21 18 2783 4629 28 689 3066 1744 77 4 3066 2926 37 772 3066 332 97 136 3076 3223 7 4 3076 4141 97 22 3223 2783 30 4 3223 891 98 884 3223 3195 37 514 3310 4926 61 4 3310 4954 61 422 3596 2284 23 4 3596 1874 63 206 3659 847 76 4 3659 3640 22 32 125 1993 54 764 125 4987 76 870 125 3091 95 293 664 2548 41 764 664 637 13 835 1112 2531 72 764 1112 3485 25 449 1181 4049 65 764 1181 478 37 631 1181 2186 2 806 1993 1181 45 764 1993 2201 77 504 1993 1525 41 197 2531 4271 22 764 2531 1503 76 945 2531 4226 96 172 2548 3751 64 764 2548 489 35 981 3523 4409 55 764 3523 3440 95 732 3523 4523 40 738 3751 4879 11 764 3751 359 57 565 4049 3523 1 764 4049 4660 26 764 4049 4212 67 644 4271 664 53 764 4271 4598 79 155 4271 1712 20 722 4409 1112 24 764 4409 4155 80 476 126 4165 53 735 126 584 21 507 1438 4500 61 735 1438 4798 13 967 3139 1438 3 735 3139 4992 68 735 3139 1051 24 573 3648 4994 40 735 3648 2837 22 721 3648 1622 71 835 4165 4248 54 735 4165 147 71 593 4248 3139 88 735 4248 500 79 485 4248 4940 29 680 4500 3648 90 735 4500 4866 2 159 127 2147 34 271 127 4410 84 207 127 3844 82 943 1675 4806 38 271 1675 3433 52 132 2147 2952 17 271 2147 39 85 421 2147 4785 98 371 2952 4306 4 271 2952 2164 80 69 2952 986 95 186 3476 1675 75 271 3476 2737 16 898 3619 3476 35 271 3619 2258 80 9 4306 3619 47 271 4306 4771 18 271 4306 3907 56 556 128 2837 21 564 128 1928 27 887 598 3924 20 564 598 4518 82 915 2061 3167 61 564 2061 2424 26 941 2061 325 38 880 2651 598 45 564 2651 1699 88 20 2651 389 30 734 2837 2061 47 564 2837 4020 89 956 3113 2651 59 564 3113 2404 47 12 3113 2178 70 722 3167 3113 76 564 3167 4789 33 564 3167 3946 93 328 3167 994 21 841 3924 4853 77 564 3924 4269 86 725 3924 4869 97 877 129 3812 7 28 129 1562 38 294 903 2198 15 28 903 2683 28 412 1149 4897 90 28 1149 4884 48 28 1149 912 80 34 1149 1450 74 565 1582 903 12 28 1582 3299 27 628 1582 2590 36 999 2198 1149 43 28 2198 1144 20 556 2198 4263 96 112 3631 3992 20 28 3631 4895 85 483 3631 3912 37 279 3812 4222 61 28 3812 2515 28 262 3846 1582 51 28 3846 4482 41 499 3846 4056 67 564 3992 3846 31 28 3992 2691 83 408 3992 856 31 57 4222 3631 89 28 4222 2351 8 138 130 1565 64 32 130 3887 50 636 1091 2754 63 32 1091 57 15 30 1091 1758 1 487 1565 2201 89 32 1565 4254 99 150 1565 2314 13 227 2201 4595 37 32 2201 4112 85 32 2201 4874 30 499 2754 3965 55 32 2754 2253 45 309 2754 1120 63 529 2892 3387 37 32 2892 217 44 605 3387 1091 89 32 3387 4465 53 173 3387 1803 81 714 3445 2892 78 32 3445 4357 34 283 3445 169 77 960 3965 4767 84 32 3965 4426 34 600 4112 3445 19 32 4112 4597 3 79 4112 1924 94 58 131 1799 2 822 131 4556 21 673 131 4570 63 595 678 1021 64 822 678 4990 75 194 1021 3945 76 822 1021 4277 96 422 1040 3726 37 822 1040 3321 40 266 1040 4071 2 790 1799 4446 4 822 1799 4923 42 822 1799 2206 8 973 3726 4892 8 822 3726 2050 49 383 3945 4269 89 822 3945 228 85 205 3945 4522 19 388 4269 1040 29 822 4269 144 35 525 4446 678 64 822 4446 2143 53 862 4446 817 34 367 132 2525 51 654 132 1895 70 719 132 1168 18 831 629 4361 35 654 629 2976 76 284 629 359 57 794 1408 1648 10 654 1408 4244 23 285 1408 1535 92 408 1439 1701 67 654 1439 1550 50 471 1648 4556 94 654 1648 3997 100 654 1648 2672 48 568 1701 2868 34 654 1701 3380 20 511 2199 629 45 654 2199 339 19 189 2199 1600 76 691 2525 1408 65 654 2525 2053 2 219 2857 2199 75 654 2857 4895 49 654 2857 4005 72 960 2857 2821 39 448 2868 2908 21 654 2868 2080 18 558 2868 290 7 821 2908 4802 59 654 2908 3721 85 178 3997 2857 34 654 3997 2669 47 849 3997 580 35 590 4361 1439 75 654 4361 1403 86 684 4361 756 95 458 133 2497 100 561 133 1777 51 131 1139 4617 9 561 1139 211 56 613 2497 2956 93 561 2497 2803 17 814 2780 1139 27 561 2780 3344 1 445 2780 2169 83 175 2956 3019 46 561 2956 4965 72 413 3019 4060 37 561 3019 1628 18 115 3019 2506 32 15 3776 4117 45 561 3776 2299 45 517 3776 4820 70 606 4060 3776 11 561 4060 4715 82 561 4060 492 61 872 4060 4546 83 438 4075 2780 38 561 4075 831 33 946 4075 2563 94 837 4117 4075 10 561 4117 135 77 863 4117 63 79 713 134 660 6 644 134 1816 4 489 660 2303 41 644 660 2500 35 92 1459 1953 13 644 1459 1188 39 46 1459 2692 64 582 1834 2436 66 644 1834 1833 7 796 1953 1834 86 644 1953 3624 64 265 1953 251 82 647 1968 2007 26 644 1968 2195 58 730 2007 1459 11 644 2007 1715 32 750 2303 1968 20 644 2303 2988 24 205 2303 4063 39 107 2436 4895 95 644 2436 4746 61 644 2436 4240 18 67 2436 4684 95 715 135 3666 1 621 135 2190 15 452 135 4593 48 459 747 1463 70 621 747 2066 47 365 1463 3377 23 621 1463 1927 76 623 1463 431 51 453 2063 4767 32 621 2063 227 14 166 2411 2755 89 621 2411 4075 45 652 2411 2417 85 132 2755 3627 15 621 2755 4905 53 621 2755 3395 27 291 3377 2411 74 621 3377 1376 29 315 3627 2063 48 621 3627 4233 99 647 3666 747 16 621 3666 436 18 794 136 2134 65 392 136 3839 32 727 136 2365 89 308 783 4022 2 392 783 4956 62 167 783 2609 35 390 866 783 99 392 866 3016 42 306 938 2785 63 392 938 31 95 769 1352 1797 85 392 1352 2098 46 692 1797 866 78 392 1797 303 7 64 1797 1049 70 940 2134 938 37 392 2134 1379 17 3 2785 1352 21 392 2785 2756 24 440 2785 2882 67 86 2796 4893 56 392 2796 1810 10 388 4022 4252 25 392 4022 4600 4 392 4022 4796 86 128 4022 4685 37 214 4252 2796 42 392 4252 291 73 616 137 900 47 964 137 4185 47 824 137 2051 99 811 900 2204 20 964 900 1697 28 221 900 2493 49 451 1405 4069 19 964 1405 4465 89 773 1805 1405 35 964 1805 1453 52 900 1805 2929 3 90 1944 4996 74 964 1944 3144 7 937 2204 1805 77 964 2204 4904 22 964 2204 1203 60 280 2535 1944 78 964 2535 4303 88 810 2535 3415 7 211 4069 2535 83 964 4069 3519 3 206 4069 1305 1 96 138 4081 79 108 138 1075 15 988 138 4232 57 654 1114 2078 67 108 1114 2360 9 357 2078 4399 47 108 2078 4613 61 763 2078 1780 74 484 2527 1114 15 108 2527 1486 70 772 2527 693 83 281 2930 2527 83 108 2930 218 80 134 2930 931 55 838 3018 2930 16 108 3018 446 17 363 3018 2856 20 847 3974 3018 27 108 3974 4316 3 697 4081 3974 97 108 4081 1614 13 874 4399 4821 55 108 4399 4573 54 108 4399 2033 93 197 4399 3687 83 37 139 4335 46 394 139 792 20 410 139 4082 4 965 659 4860 61 394 659 2461 60 72 1525 1743 75 394 1525 138 27 864 1525 2743 4 163 1743 4158 77 394 1743 4046 35 812 1743 4592 97 977 1746 1525 71 394 1746 3023 28 569 2459 3092 2 394 2459 3152 89 788 2459 3837 24 167 3092 659 51 394 3092 1493 35 546 3238 4280 97 394 3238 3582 37 244 4158 2459 38 394 4158 4702 59 394 4158 1764 43 48 4280 1746 7 394 4280 3187 55 503 4280 544 14 130 4335 3238 51 394 4335 3847 2 516 4335 2380 67 335 140 2591 16 1149 140 4714 44 325 140 3703 74 9 982 1996 85 1149 982 3684 73 558 982 4080 20 64 1996 3034 29 1149 1996 4613 86 1149 1996 906 60 247 1996 4963 49 76 2591 4484 32 1149 2591 3792 93 524 3034 4976 98 1149 3034 3777 45 910 4341 982 91 1149 4341 1294 11 543 4484 4341 75 1149 4484 1347 7 996 4484 1123 55 290 141 3033 89 284 141 1191 92 26 552 3545 95 284 552 437 10 936 552 2653 60 705 1412 1824 2 284 1412 3981 9 278 1412 924 71 109 1824 4629 79 284 1824 4811 63 284 1824 4684 36 209 1824 4078 90 946 2467 552 67 284 2467 128 96 789 2467 673 89 398 2834 2467 85 284 2834 375 21 955 3033 2834 93 284 3033 4597 82 408 3033 4499 26 628 3545 4214 52 284 3545 3725 87 900 4214 1412 92 284 4214 2377 25 57 4214 1319 30 573 142 2604 62 433 142 4060 64 690 142 2123 90 783 566 4791 17 433 566 4567 34 737 566 4291 76 481 789 566 65 433 789 2826 61 487 789 6 47 257 1166 3096 43 433 1166 2782 96 645 1166 2808 62 680 2003 4841 7 433 2003 3914 33 433 2003 3193 33 376 2374 1166 42 433 2374 976 36 483 2374 571 9 338 2604 2003 14 433 2604 2912 39 98 3096 789 24 433 3096 682 8 402 3402 4240 20 433 3402 2935 26 43 3554 2374 21 433 3554 1113 97 364 3914 3402 71 433 3914 669 65 731 4240 3554 96 433 4240 1376 6 94 4240 900 66 397 143 844 34 346 143 91 45 771 143 2657 33 456 502 3245 92 346 502 2215 62 138 844 1889 19 346 844 2679 84 535 884 502 11 346 884 1377 23 30 884 4443 14 37 1889 3057 11 346 1889 1097 53 874 2645 4762 69 346 2645 1973 50 840 2645 2630 55 445 3057 4296 52 346 3057 4692 97 128 3245 4764 89 346 3245 4435 3 346 3245 510 99 5 3245 1963 55 928 4296 884 17 346 4296 896 53 294 4435 2645 1 346 4435 4081 62 73 144 2105 2 168 144 525 100 589 144 605 47 287 522 4872 12 168 522 1453 20 233 784 1915 23 168 784 4759 41 136 784 2463 92 518 1915 2423 5 168 1915 464 44 425 1915 2404 17 455 2105 4374 62 168 2105 3321 7 391 2105 1546 49 777 2217 3794 57 168 2217 966 3 621 2217 3056 60 880 2423 522 8 168 2423 4677 87 168 2423 951 24 636 2423 2368 69 610 2972 2217 51 168 2972 3811 50 855 3794 784 70 168 3794 1949 3 704 4374 2972 89 168 4374 2433 18 805 145 4444 66 982 145 3341 69 554 145 897 80 164 583 1174 81 982 583 1128 57 810 770 583 46 982 770 850 83 278 1174 4715 68 982 1174 3271 73 66 1174 2077 44 861 3062 4311 57 982 3062 4993 79 982 3062 4247 88 111 4311 770 82 982 4311 325 76 618 4444 3062 42 982 4444 4434 1 11 146 3260 67 790 146 1511 58 874 1587 3753 25 790 1587 2548 47 317 2074 4903 41 790 2074 4053 70 887 2074 719 100 432 3260 1587 38 790 3260 588 85 928 3260 4761 4 209 3753 4072 62 790 3753 369 50 245 3981 2074 25 790 3981 1852 73 578 3981 1754 28 257 4072 4179 83 790 4072 4601 64 790 4072 1505 2 676 4072 1326 71 403 4179 3981 81 790 4179 4802 5 309 4179 1935 32 694 147 3071 36 469 147 3942 11 241 147 2741 21 509 526 3369 7 469 526 3362 63 64 1260 3942 63 469 1260 4089 2 725 2914 4197 38 469 2914 1871 34 876 3071 2914 61 469 3071 1008 48 767 3258 3968 14 469 3258 4860 27 469 3258 355 98 132 3258 425 73 390 3369 4396 89 469 3369 2158 21 860 3942 526 94 469 3942 2620 51 865 3968 4576 42 469 3968 3473 84 917 4197 1260 54 469 4197 3690 95 623 4396 3258 91 469 4396 4110 50 387 148 865 36 287 148 3154 45 303 865 2948 96 287 865 4598 28 287 865 4387 3 739 865 4447 72 810 1670 2445 91 287 1670 1654 91 1000 1670 3422 16 340 2176 1670 44 287 2176 4864 83 580 2445 2509 10 287 2445 2282 72 329 2509 4931 13 287 2509 243 15 855 2509 3203 97 786 2948 2176 36 287 2948 3331 60 459 149 4364 83 427 149 2765 49 322 762 1727 73 427 762 4078 69 255 888 2111 64 427 888 311 57 42 1421 4118 50 427 1421 4582 14 761 1421 3259 54 416 1727 4101 44 427 1727 4283 9 601 1727 3345 19 193 2111 1421 77 427 2111 1061 64 339 2111 4690 28 27 2471 762 51 427 2471 4605 16 427 2471 1117 95 467 4101 4760 43 427 4101 3619 58 243 4118 2471 78 427 4118 4842 45 31 4364 888 57 427 4364 4082 45 883 150 3184 41 763 150 2928 66 501 589 777 67 763 589 3922 43 445 589 1237 31 632 777 1416 81 763 777 932 41 145 777 1917 53 950 1416 3430 95 763 1416 4977 28 763 1416 4483 28 23 3184 4202 31 763 3184 4900 19 902 3184 2263 19 95 3430 4647 55 763 3430 2094 99 224 3430 2603 31 332 4202 589 87 763 4202 3459 23 459 4202 1031 4 278 151 3389 79 407 151 3457 12 340 612 2040 64 407 612 3191 65 2 612 485 61 73 804 3662 43 407 804 4291 43 23 804 4394 62 35 1227 3497 75 407 1227 4827 76 816 2040 804 26 407 2040 1184 81 140 2805 1227 59 407 2805 2649 69 303 2805 756 44 685 3389 612 97 407 3389 3208 49 672 3497 4692 58 407 3497 4359 85 551 3662 3890 82 407 3662 4883 79 407 3662 2077 24 86 3662 4330 5 881 3890 2805 5 407 3890 3265 15 280 3890 3305 52 1 152 3586 62 323 152 3457 90 763 1552 2896 23 323 1552 3728 91 890 2029 3701 44 323 2029 3505 10 416 2873 2029 42 323 2873 3334 68 254 2896 3283 89 323 2896 1497 8 225 2896 76 87 68 3283 4359 94 323 3283 4637 11 323 3283 2985 98 761 3586 2873 34 323 3586 4702 74 413 3701 3825 27 323 3701 4964 82 295 3825 1552 96 323 3825 3781 23 724 3825 1772 61 276 4359 4829 64 323 4359 4296 58 681 153 4184 51 776 153 529 42 847 1076 4537 96 776 1076 3570 12 82 1076 4410 55 768 1931 1076 20 776 1931 1393 85 784 3796 4676 43 776 3796 1931 50 776 3796 448 52 367 3796 3715 62 314 4184 4393 33 776 4184 513 95 767 4393 3796 87 776 4393 1252 26 977 154 3599 19 1109 154 564 16 6 154 1947 60 285 810 1244 33 1109 810 4957 42 61 810 4467 52 730 1177 3232 78 1109 1177 671 43 469 1177 554 39 921 1244 4893 68 1109 1244 1856 40 362 1244 2133 83 922 2259 810 25 1109 2259 3132 2 40 2259 4765 8 586 3232 2259 97 1109 3232 4640 1 1109 3232 4985 95 927 3232 2464 26 81 3599 1177 63 1109 3599 2220 6 58 3599 2092 81 300 155 501 49 896 155 1905 92 377 501 1841 6 896 501 4621 67 896 501 1402 100 148 501 1863 64 988 827 2687 41 896 827 213 72 810 827 4248 67 647 1841 827 96 896 1841 1484 56 166 2687 3399 66 896 2687 898 28 566 3399 4726 78 896 3399 3934 70 786 3399 4651 3 600 156 1455 2 288 156 428 42 902 525 4583 53 288 525 2203 95 57 525 197 87 456 975 3844 62 288 975 1842 44 554 1118 525 40 288 1118 592 1 672 1118 1612 56 493 1345 3892 11 288 1345 2758 61 984 1345 1963 63 332 1455 4953 45 288 1455 4033 23 288 1455 3167 22 555 1455 3639 10 512 3844 1345 71 288 3844 4147 37 53 3892 1118 47 288 3892 680 56 539 3892 4073 4 591 4033 4354 3 288 4033 663 31 189 4033 201 72 973 4354 975 85 288 4354 2219 39 271 4354 1730 18 182 157 4237 35 680 157 2116 99 342 157 2488 78 412 1760 3744 85 680 1760 2328 64 291 1760 4646 100 50 2128 4417 35 680 2128 379 67 576 2312 4879 50 680 2312 2394 98 69 2728 3063 18 680 2728 708 83 589 2817 2728 23 680 2817 3789 23 145 2817 2960 65 649 3063 1760 1 680 3063 3149 73 591 3063 162 71 714 3744 2128 11 680 3744 3051 73 409 3947 4638 36 680 3947 2312 6 680 3947 2854 97 411 3947 4619 87 582 4237 2817 40 680 4237 2534 9 473 4417 3947 67 680 4417 3364 11 605 158 2428 84 1632 158 4403 51 450 910 3921 11 1632 910 4614 99 524 910 3175 32 220 939 2655 28 1632 939 4145 69 958 939 1357 82 594 1940 2670 99 1632 1940 4710 41 1632 1940 1307 69 260 2065 4660 37 1632 2065 4448 60 150 2428 1940 49 1632 2428 2600 90 127 2655 910 25 1632 2655 2257 84 622 2655 1462 37 407 2670 939 74 1632 2670 1810 65 333 3921 2065 73 1632 3921 1173 28 704 159 3672 75 385 159 3077 72 203 159 1473 26 511 579 3293 11 385 579 1752 78 135 579 4647 39 952 790 4750 13 385 790 681 90 967 1071 1160 41 385 1071 3135 37 535 1160 3366 67 385 1160 3628 34 957 1385 2751 21 385 1385 624 35 485 2751 3677 61 385 2751 4012 24 626 3293 1385 51 385 3293 2496 41 24 3293 467 84 484 3366 579 100 385 3366 2747 92 148 3672 1071 71 385 3672 4976 30 385 3672 3284 50 123 3672 2428 20 208 3677 790 35 385 3677 1577 26 867 160 3589 62 364 160 619 83 667 160 1778 89 801 881 1125 99 364 881 3647 89 342 1039 1856 29 364 1039 708 53 434 1039 3704 83 974 1125 2574 51 364 1125 4960 96 364 1125 4614 22 597 1125 910 1 90 1856 2982 95 364 1856 1195 85 106 1856 2441 40 135 1862 1039 29 364 1862 3931 32 549 2574 1862 86 364 2574 4154 32 936 2574 2115 6 169 2898 881 67 364 2898 815 39 336 2898 2146 87 414 2982 4581 15 364 2982 2350 22 211 2982 788 96 283 3589 2898 73 364 3589 3483 97 178 161 3887 58 1053 161 4993 55 503 673 1527 88 1053 673 837 25 554 822 4143 5 1053 822 4982 20 43 1527 2777 81 1053 1527 501 42 388 2366 4920 51 1053 2366 4828 27 1053 2366 1295 90 617 2777 4020 4 1053 2777 3193 45 97 2777 3024 6 508 2994 673 90 1053 2994 607 73 116 3887 2994 13 1053 3887 4893 19 281 3887 1589 97 244 4020 822 96 1053 4020 4904 91 360 4020 3773 61 861 4143 2366 94 1053 4143 469 86 879 162 2564 15 382 162 2026 70 338 1024 2750 38 382 1024 4735 14 382 1024 3907 84 7 1024 4638 13 426 1451 1024 58 382 1451 3725 99 754 2564 2918 11 382 2564 4072 81 293 2750 4649 99 382 2750 1607 46 645 2750 1888 9 686 2918 1451 34 382 2918 1403 93 762 163 2127 94 582 163 3987 45 308 163 391 57 704 1312 4005 63 582 1312 2082 39 41 1762 3417 1 582 1762 4672 81 582 1762 560 40 224 2127 3919 71 582 2127 4131 100 369 3417 1312 69 582 3417 3561 91 626 3919 1762 13 582 3919 1079 79 543 3919 2970 97 574 4005 4697 75 582 4005 1670 79 582 4005 3172 19 731 164 702 70 378 164 1795 70 625 692 4797 11 378 692 4695 16 378 692 2750 68 879 702 3553 71 378 702 3853 98 104 702 4604 74 207 3098 3257 55 378 3098 2757 17 127 3098 1537 72 828 3257 3682 9 378 3257 3627 56 603 3257 1553 62 450 3304 3098 92 378 3304 4956 48 117 3304 4657 26 198 3553 3304 83 378 3553 4400 2 401 3553 3770 26 400 3682 692 29 378 3682 784 12 192 165 961 49 217 165 1380 48 692 961 2784 74 217 961 2345 2 867 961 1756 55 253 1320 2420 51 217 1320 2368 12 648 1320 1715 55 632 1381 2306 90 217 1381 1271 2 747 1717 4922 25 217 1717 4773 60 973 1717 3259 86 878 2306 4264 85 217 2306 4614 52 294 2420 4667 3 217 2420 2771 20 217 2420 4577 75 330 2420 4412 35 896 2771 4208 46 217 2771 2495 82 293 2784 2882 6 217 2784 4701 52 235 2882 1320 73 217 2882 2780 6 457 4208 1381 14 217 4208 1141 15 811 4264 1717 9 217 4264 1573 100 459 166 3886 28 412 166 3909 77 439 1253 1997 25 412 1253 362 97 14 1997 4797 83 412 1997 1817 44 780 2009 1253 59 412 2009 3142 30 256 2309 2009 18 412 2309 815 82 985 2309 2355 62 464 3475 2309 55 412 3475 4606 26 412 3475 3507 92 66 3475 4006 10 312 3886 3475 43 412 3886 1791 89 136 3886 1869 78 179 167 4260 31 378 167 1040 11 157 167 2308 68 828 607 932 81 378 607 2639 83 513 932 3895 67 378 932 591 33 305 932 3264 33 537 2550 3198 7 378 2550 3578 54 538 2550 1683 72 993 2663 4748 25 378 2663 4895 47 378 2663 478 78 838 3198 2663 91 378 3198 89 48 122 3198 3062 27 370 3823 2550 42 378 3823 3836 83 347 3895 3823 20 378 3895 893 25 549 4260 607 22 378 4260 1714 70 39 4260 1038 19 777 168 2513 56 371 168 1425 90 794 168 253 18 388 562 3562 51 371 562 2570 75 189 562 376 52 318 616 4934 77 371 616 3055 46 371 616 294 41 299 616 1626 41 692 2513 3668 6 371 2513 423 2 621 2513 4207 23 345 2848 3580 54 371 2848 2368 47 885 2848 3362 64 921 3055 3099 76 371 3055 990 36 554 3055 4638 4 339 3099 562 27 371 3099 1711 69 233 3099 387 10 279 3562 3814 9 371 3562 2971 93 527 3562 2047 29 976 3580 3703 46 371 3580 413 74 246 3580 3272 75 443 3668 2848 77 371 3668 2764 67 886 3703 616 53 371 3703 2004 12 665 3814 4585 27 371 3814 1013 51 42 3814 4249 77 224 169 2409 28 420 169 4148 6 931 169 2556 93 512 1100 2069 99 420 1100 4926 71 423 1698 4633 16 420 1698 4590 48 769 1811 2584 75 420 1811 4612 62 356 1811 4810 92 113 2069 4757 83 420 2069 1811 8 420 2069 3603 72 504 2069 4393 69 267 2324 3436 38 420 2324 2885 81 937 2409 2324 45 420 2409 4553 92 513 2409 1120 5 497 2584 1698 49 420 2584 1322 24 785 2584 4061 86 532 3436 1100 36 420 3436 4956 76 114 170 1801 13 1017 170 3196 73 82 170 1505 86 258 665 779 76 1017 665 4306 53 648 779 4405 85 1017 779 4265 4 90 779 2909 89 796 992 665 22 1017 992 1103 16 27 992 1382 55 79 1361 2741 67 1017 1361 4816 74 639 1361 895 67 909 1801 4633 63 1017 1801 3782 47 1017 1801 3096 59 13 1801 2934 27 518 2741 4091 56 1017 2741 3436 3 95 3782 1361 87 1017 3782 4164 67 790 4091 4368 64 1017 4091 1943 59 981 4368 992 3 1017 4368 16 7 708 4368 2046 88 736 4405 4745 62 1017 4405 1958 31 740 4405 3636 2 15 171 2395 72 719 171 4135 8 921 171 4728 41 685 1539 1725 47 719 1539 2128 31 550 1725 2669 33 719 1725 2902 75 316 1725 2209 40 381 2395 2880 85 719 2395 340 80 728 2395 3890 98 842 2669 4856 36 719 2669 3716 99 1000 2880 3079 60 719 2880 1840 91 622 2880 2826 26 440 3079 1539 22 719 3079 4937 3 719 3079 1322 15 801 3079 3186 61 756 172 3420 64 24 172 3232 71 11 734 769 45 24 734 796 50 10 769 4587 57 24 769 4842 25 24 769 1449 39 378 769 2599 42 825 1237 2766 50 24 1237 4270 35 29 1237 2300 81 180 2766 734 77 24 2766 2336 66 702 2992 1237 13 24 2992 1015 80 141 2992 1181 35 165 3420 2992 42 24 3420 4916 53 307 173 3146 3 476 173 1662 76 798 173 1909 66 846 874 2664 39 476 874 310 3 27 1162 874 70 476 1162 3372 78 297 1162 4154 48 309 2576 3135 45 476 2576 1697 49 44 2664 4542 65 476 2664 3597 41 984 3135 4625 37 476 3135 1162 68 476 3135 4061 45 687 3135 448 33 998 3146 4161 44 476 3146 4004 100 869 4161 2576 35 476 4161 3684 68 389 174 3749 37 692 174 648 81 995 1115 4291 58 692 1115 651 93 580 1115 1010 15 590 2362 4390 52 692 2362 4509 24 692 2362 2951 80 384 2362 2630 59 259 3664 4880 68 692 3664 736 32 51 3664 1941 78 792 3749 1115 52 692 3749 3625 28 263 3749 4257 61 52 4291 2362 8 692 4291 4315 98 792 4390 3664 26 692 4390 96 81 366 175 1397 41 334 175 3617 58 252 1397 2585 38 334 1397 3031 92 532 1397 3842 88 45 2281 3473 11 334 2281 1676 8 392 2281 1692 65 60 2585 3986 41 334 2585 4850 68 334 2585 3478 35 115 2744 2281 67 334 2744 1271 47 504 2744 3945 39 205 2937 4604 72 334 2937 3410 77 176 3473 2937 99 334 3473 4767 98 951 3473 2713 37 463 3986 2744 4 334 3986 1060 15 589 176 763 44 426 176 1162 69 174 176 1775 36 536 763 2931 68 426 763 4340 93 254 763 913 66 791 2192 4963 13 426 2192 2310 56 623 2205 2967 4 426 2205 2795 77 389 2775 3542 24 426 2775 1707 98 178 2775 207 58 421 2931 2775 25 426 2931 4955 96 391 2931 658 91 440 2967 2192 97 426 2967 4342 41 273 3542 2205 62 426 3542 4929 61 426 3542 3761 70 771 3542 1640 48 943 177 1645 85 26 177 603 88 814 892 2625 94 26 892 2977 100 844 892 3419 60 435 1645 892 38 26 1645 4589 43 26 1645 3455 97 264 1645 1893 28 360 1956 4360 85 26 1956 1988 64 752 2625 4279 71 26 2625 4149 95 262 2625 470 35 946 2954 4671 13 26 2954 657 45 521 2954 4790 96 560 4279 1956 14 26 4279 4354 37 189 4279 3564 92 148 4360 2954 53 26 4360 2037 22 125 178 3808 67 71 178 1550 50 992 1447 4549 5 71 1447 4703 97 71 1447 4775 44 551 1447 4506 22 303 2472 2851 59 71 2472 232 72 775 2851 4385 14 71 2851 4944 77 94 3808 2472 93 71 3808 4641 79 893 3808 867 2 689 4385 1447 28 71 4385 4824 5 413 4385 1984 72 491 179 3687 6 45 179 3045 60 241 179 1887 87 890 1386 3401 50 45 1386 4981 29 45 1386 4034 98 58 1545 2709 51 45 1545 2715 38 360 1545 3227 7 926 2709 3875 72 45 2709 1212 80 603 2709 1553 97 486 3401 1545 41 45 3401 93 2 494 3401 1233 82 261 3687 1386 78 45 3687 1228 63 777 3875 4976 64 45 3875 4608 52 131 180 4366 16 97 180 778 79 317 978 3213 64 97 978 2071 33 507 978 2680 86 161 1146 4173 12 97 1146 862 40 616 1146 1724 75 36 1750 978 94 97 1750 1427 21 100 1750 3950 65 44 2361 1750 61 97 2361 4611 96 97 2361 3365 71 949 2361 4782 88 499 3201 4916 54 97 3201 4342 15 740 3201 2133 2 318 3213 1146 50 97 3213 1701 13 195 3213 1376 82 531 4173 3201 31 97 4173 4514 60 684 4173 4200 8 225 4366 2361 49 97 4366 416 74 668 4366 4407 50 424 181 1624 100 619 181 4493 3 842 181 3159 43 138 698 1400 49 619 698 37 66 273 698 906 44 583 1400 4791 11 619 1400 1392 29 229 1624 4082 12 619 1624 3987 60 688 2071 4645 83 619 2071 3756 49 619 2071 2811 63 767 2071 3371 58 625 3756 4474 41 619 3756 4684 30 985 3756 3183 14 369 4082 4178 99 619 4082 330 67 349 4178 2071 32 619 4178 4712 98 133 4474 698 39 619 4474 341 66 475 182 1137 74 803 182 1051 33 749 182 4160 10 103 1137 2881 13 803 1137 3651 81 734 1137 4082 58 906 1506 3819 13 803 1506 2014 66 851 1506 2967 18 223 2501 1506 40 803 2501 2538 6 920 2501 4541 82 424 2721 3717 61 803 2721 4305 32 461 2721 402 22 313 2738 4980 95 803 2738 4799 43 396 2738 3115 97 613 2881 2501 87 803 2881 1100 85 702 2973 2721 54 803 2973 4851 58 187 3623 2973 17 803 3623 4549 23 803 3623 3861 95 942 3717 2738 18 803 3717 3553 44 900 3819 3623 90 803 3819 2305 7 798 3819 1700 25 912 183 942 40 236 183 2355 60 227 879 3988 5 236 879 4347 39 953 942 2030 86 236 942 3270 54 729 1204 879 16 236 1204 4906 83 360 1204 2925 4 844 2030 1204 2 236 2030 4694 59 577 2288 2619 61 236 2288 4741 11 236 2288 3085 22 44 2288 1113 82 492 2619 4810 56 236 2619 828 48 925 3988 2288 88 236 3988 778 84 203 3988 633 5 478 184 2639 5 293 184 4235 15 317 184 1643 12 610 1639 4768 22 293 1639 1245 44 635 1639 4439 45 89 1980 3643 88 293 1980 379 88 764 2639 3669 49 293 2639 441 82 528 2639 329 69 484 3643 4386 24 293 3643 1004 96 488 3669 3931 8 293 3669 4260 90 771 3669 4080 30 625 3931 4707 72 293 3931 1980 83 293 3931 1462 40 897 3931 81 58 917 4386 1639 23 293 4386 3052 24 91 185 3085 69 571 185 822 8 423 1540 2320 20 571 1540 3318 64 728 1540 4718 48 284 1636 4608 57 571 1636 4604 13 571 1636 1188 62 169 1742 2804 33 571 1742 925 24 903 1742 1960 63 372 2159 1742 43 571 2159 3213 95 860 2320 1636 15 571 2320 3067 12 549 2390 1540 54 571 2390 3219 86 61 2390 4089 46 602 2804 2390 97 571 2804 1861 64 826 3085 2159 5 571 3085 4476 21 735 186 2448 36 497 186 3572 68 738 1129 1277 28 497 1129 4745 99 118 1277 4880 72 497 1277 2929 95 497 1277 4659 16 253 1633 2184 48 497 1633 4819 10 743 1633 2276 56 763 2184 3649 52 497 2184 823 92 576 2448 1633 65 497 2448 2484 44 522 2448 3462 37 267 2929 3152 63 497 2929 1203 8 387 2929 963 62 984 3152 4578 20 497 3152 888 77 202 3152 2650 11 929 3649 1129 94 497 3649 1169 29 943 3649 3644 97 457 187 2599 68 390 187 446 8 782 187 2558 91 240 935 2346 50 390 935 113 26 881 2285 4328 26 390 2285 2952 74 654 2285 1792 77 301 2346 3758 33 390 2346 4961 95 276 2346 2275 83 478 2599 2285 46 390 2599 160 89 775 3153 4928 3 390 3153 250 93 468 3307 935 61 390 3307 4339 80 931 3307 1942 76 125 3758 3153 30 390 3758 4988 27 390 3758 3486 100 197 3758 4202 83 854 4328 3307 7 390 4328 1555 72 548 4328 44 70 385 188 3559 18 451 188 597 93 255 949 1080 10 451 949 1877 46 211 949 2423 39 250 1080 1739 27 451 1080 49 20 278 1080 780 15 892 1498 3501 100 451 1498 4541 57 451 1498 266 71 16 1498 1136 10 888 1739 1498 91 451 1739 1385 71 747 2017 4798 6 451 2017 3450 53 482 2017 4571 2 920 3490 949 58 451 3490 3951 37 903 3490 3240 88 764 3501 2017 69 451 3501 2400 29 977 3501 3957 52 126 3559 3490 85 451 3559 4500 49 594 189 708 95 545 189 4237 79 784 708 3906 24 545 708 4508 2 545 708 4311 3 854 708 3313 24 733 1974 2123 19 545 1974 3500 21 234 1974 2761 77 854 2123 2446 20 545 2123 4057 13 619 2123 4271 15 199 2426 3966 94 545 2426 3631 25 997 2426 1702 61 890 2446 4822 97 545 2446 3377 1 173 3906 2426 1 545 3906 2461 58 905 3966 1974 15 545 3966 2280 42 282 190 4116 8 524 190 2149 6 569 799 1919 74 524 799 2581 21 131 1591 799 93 524 1591 1192 36 263 1919 3515 76 524 1919 2717 40 511 1919 4008 98 793 2271 4759 88 524 2271 4846 96 524 2271 2784 24 253 2271 3431 80 561 3515 3913 84 524 3515 556 16 860 3913 2271 44 524 3913 4350 100 664 3913 2735 41 586 4116 4404 56 524 4116 205 67 943 4404 1591 70 524 4404 3045 4 607 191 1718 80 27 191 4569 63 388 191 1735 40 299 529 3508 97 27 529 1186 69 4 550 2493 79 27 550 945 35 87 1718 550 52 27 1718 4815 45 116 1740 4949 81 27 1740 203 28 97 1740 3514 74 816 2493 529 1 27 2493 4954 12 27 2493 1971 95 673 3508 1740 6 27 3508 2246 50 977 192 3267 42 402 192 3082 40 585 192 631 37 485 625 4540 94 402 625 4929 49 968 1353 1715 96 402 1353 1289 85 137 1695 4402 22 402 1695 3701 55 769 1715 4892 37 402 1715 2136 5 402 1715 4391 34 497 1715 4013 93 67 2136 1695 52 402 2136 3599 79 278 2136 243 32 885 2907 625 65 402 2907 2107 37 151 2907 3797 60 222 3267 3694 68 402 3267 1568 92 650 3694 1353 54 402 3694 4959 56 311 3694 4443 27 74 4402 2907 55 402 4402 250 50 394 193 730 97 468 193 4684 70 965 599 3532 10 468 599 3962 5 10 730 2570 63 468 730 4633 10 201 730 4033 38 991 1132 1930 58 468 1132 3687 24 525 1209 1132 70 468 1209 3351 57 278 1930 2450 7 468 1930 2914 38 791 1930 3853 41 420 2450 4954 70 468 2450 2052 5 518 2450 3252 92 845 2570 599 28 468 2570 4183 52 25 3532 1209 8 468 3532 4845 37 468 3532 1343 31 636 194 3540 60 721 194 3544 97 123 194 3036 63 566 570 2612 56 721 570 4479 98 16 570 3850 51 843 921 4833 11 721 921 1927 17 721 921 1565 50 441 1246 570 64 721 1246 2014 23 115 1246 1890 19 365 1682 2104 73 721 1682 2920 64 853 1927 4463 63 721 1927 4364 66 578 2104 1246 94 721 2104 4501 95 780 2104 4783 79 849 2612 4745 5 721 2612 167 22 568 2768 921 26 721 2768 450 38 135 2768 4139 40 253 3540 2768 48 721 3540 1320 2 63 3540 3259 5 568 4024 1682 87 721 4024 960 2 541 4463 4024 29 721 4463 1106 23 799 195 2711 36 497 195 3230 87 843 794 2545 25 497 794 295 9 192 1716 3597 84 497 1716 3373 44 812 2218 1716 63 497 2218 4578 8 993 2545 4227 2 497 2545 1233 64 931 2545 959 3 459 2587 2218 77 497 2587 4256 29 335 2711 794 60 497 2711 3525 85 764 3320 4687 33 497 3320 3378 18 497 3320 3381 58 423 3320 1556 10 109 3378 4987 36 497 3378 3623 94 702 3378 4903 2 613 3597 3320 26 497 3597 689 70 946 3597 2743 60 715 4227 2587 47 497 4227 4508 20 429 196 2108 41 584 196 340 61 440 196 179 7 603 1414 2919 93 584 1414 4394 50 863 1477 1414 1 584 1477 1630 32 81 1505 4984 37 584 1505 4694 97 584 1505 1176 37 268 1596 1477 96 584 1596 1394 76 267 1596 1046 55 775 2108 1596 18 584 2108 2935 22 71 2108 1895 40 39 2919 1505 10 584 2919 4841 45 932 2919 1614 55 327 197 3865 30 630 197 2580 77 448 719 4078 2 630 719 4869 43 630 719 3557 77 839 846 3600 45 630 846 4965 47 829 1435 2272 22 630 1435 3803 51 333 1803 1435 38 630 1803 2101 56 632 1803 565 69 632 2272 719 19 630 2272 3553 62 225 3600 4939 80 630 3600 3189 53 642 3865 1803 85 630 3865 2297 5 556 4078 846 11 630 4078 3392 55 136 4078 4389 36 238 198 1775 78 755 198 122 43 937 198 968 64 773 1330 3477 53 755 1330 2669 76 518 1330 4415 93 652 1775 4475 18 755 1775 3869 78 937 2662 3414 14 755 2662 1188 86 17 3414 1330 30 755 3414 2945 21 403 3414 1211 24 259 3477 4309 44 755 3477 4590 19 755 3477 80 25 235 3477 3222 74 669 3609 3630 62 755 3609 523 62 320 3609 2263 58 864 3630 2662 99 755 3630 3389 47 676 4309 4792 93 755 4309 1649 93 583 4309 270 31 386 4475 3609 49 755 4475 47 13 292 199 1295 52 308 199 2003 14 893 199 4091 44 551 1295 3424 9 308 1295 3754 89 668 1722 3357 44 308 1722 1572 3 931 2691 1722 73 308 2691 155 60 613 3357 4535 9 308 3357 3410 29 595 3407 2691 26 308 3407 1558 18 647 3407 463 69 651 3424 3407 92 308 3424 4957 84 308 3424 1850 65 27 3424 3258 43 272 200 4337 27 853 200 3348 82 747 943 4259 58 853 943 1484 98 695 1433 4066 19 853 1433 2212 20 522 2708 3291 3 853 2708 3517 82 868 2708 4620 11 917 3291 4176 45 853 3291 2920 3 486 3300 943 97 853 3300 172 4 899 3300 3999 85 450 3770 1433 57 853 3770 1800 84 918 3770 4044 94 510 4066 4863 96 853 4066 2745 93 593 4176 3770 30 853 4176 2159 38 412 4176 2898 47 669 4259 2708 19 853 4259 4742 16 853 4259 4599 22 676 4337 3300 25 853 4337 2383 51 80 201 3928 96 1693 201 4850 64 110 201 811 33 652 744 2455 38 1693 744 4007 36 753 1006 4516 83 1693 1006 4946 98 1693 1006 716 21 22 1893 4415 21 1693 1893 1070 45 729 2455 1893 15 1693 2455 4568 78 516 2455 4546 53 848 3928 744 47 1693 3928 1142 100 711 3928 944 29 401 4415 1006 88 1693 4415 1909 39 790 202 1955 66 1352 202 3407 45 665 202 2568 31 708 731 3421 26 1352 731 3 66 673 1764 731 97 1352 1764 4988 63 1352 1764 24 97 799 1955 2872 78 1352 1955 2330 50 263 2872 1764 60 1352 2872 4006 81 328 3050 4625 23 1352 3050 3838 73 932 3050 4545 56 794 3421 3951 19 1352 3421 4602 12 84 3951 3050 71 1352 3951 3775 76 125 203 3736 26 224 203 4225 99 405 203 4158 27 165 1806 2963 53 224 1806 1585 31 575 1806 4029 9 571 2800 3845 41 224 2800 854 28 904 2800 1961 2 341 2963 4839 91 224 2963 2800 9 224 2963 4641 81 4 3736 1806 99 224 3736 2942 50 728 3736 3037 50 374 3845 4755 26 224 3845 1338 33 894 3845 4345 46 885 204 2922 36 247 204 170 65 462 856 1992 99 247 856 1724 63 628 856 3776 23 178 871 998 46 247 871 3734 45 442 871 4449 25 557 998 3352 85 247 998 4770 42 148 998 164 19 316 1409 871 84 247 1409 2782 98 993 1547 4938 46 247 1547 4511 44 247 1547 2833 9 149 1986 2384 65 247 1986 3249 53 198 1992 1409 30 247 1992 2270 50 737 2384 1547 44 247 2384 2009 58 799 2922 856 81 247 2922 3810 15 517 2922 4178 86 906 3352 1986 54 247 3352 4995 55 31 3352 1840 31 510 205 1238 2 688 205 3823 58 369 1084 2701 42 688 1084 1645 1 855 1238 1084 70 688 1238 1789 29 371 2236 4659 36 688 2236 3472 95 587 2701 2943 6 688 2701 2551 3 392 2943 3006 49 688 2943 4369 70 996 3006 4445 84 688 3006 4538 55 688 3006 2708 52 192 3006 4497 84 223 4257 2236 20 688 4257 2776 56 248 4445 4257 21 688 4445 2834 90 689 206 3883 22 585 206 2943 10 322 551 2261 61 585 551 1742 34 649 601 2988 71 585 601 4949 66 585 601 1046 71 709 743 4212 62 585 743 934 34 725 2261 2867 7 585 2261 590 87 320 2867 601 42 585 2867 4725 55 997 2867 4892 13 362 2988 4642 73 585 2988 3793 44 80 3883 743 69 585 3883 802 72 370 3883 640 34 337 4212 551 51 585 4212 306 54 262 4212 1788 47 358 207 1327 25 334 207 1665 68 196 207 4224 73 311 1180 4253 32 334 1180 2630 90 327 1180 1749 15 155 1327 3233 33 334 1327 3285 54 811 1807 4531 15 334 1807 4180 38 334 1807 1990 33 347 3233 1180 68 334 3233 1631 26 315 3233 1890 50 861 4180 4672 3 334 4180 4800 6 76 4253 1807 78 334 4253 3433 27 789 4253 227 70 250 208 3041 6 526 208 2741 31 541 948 1399 92 526 948 3297 12 404 1159 3170 80 526 1159 2227 65 562 1159 692 5 340 1399 1159 3 526 1399 645 88 275 1877 4267 58 526 1877 2102 20 65 1877 163 3 274 2224 3907 63 526 2224 4084 2 285 3041 4662 34 526 3041 948 99 526 3041 4624 28 204 3170 1877 25 526 3170 3010 50 638 3170 502 10 271 3907 4914 90 526 3907 671 80 198 4267 2224 38 526 4267 4064 43 399 209 3971 39 399 209 4521 6 462 209 1163 79 548 1196 2812 4 399 1196 1855 2 499 1631 1196 8 399 1631 4274 100 383 1631 147 82 410 2000 4591 6 399 2000 4391 60 528 2812 2000 2 399 2812 4776 36 668 2812 3753 76 204 2833 1631 43 399 2833 4655 28 399 2833 4347 53 594 3971 2833 84 399 3971 1341 88 559 3971 3517 18 264 210 657 62 270 210 4827 16 359 657 3614 57 270 657 3216 95 65 767 4561 33 270 767 526 32 697 767 3044 92 989 1391 2980 11 270 1391 1113 31 62 1391 191 88 921 2980 3031 95 270 2980 4196 77 834 2980 1503 18 969 3031 767 34 270 3031 4934 32 681 3031 2102 71 85 3614 1391 47 270 3614 4734 84 270 3614 1122 18 786 211 3937 30 826 211 1230 12 252 574 2295 60 826 574 2625 84 714 1093 2355 41 826 1093 1048 89 335 1470 3453 46 826 1470 287 99 24 1470 746 83 422 1827 2293 23 826 1827 1541 6 597 2293 574 59 826 2293 1908 53 2 2293 722 9 687 2295 3534 19 826 2295 4355 72 133 2355 1827 34 826 2355 2583 94 775 3453 3622 45 826 3453 4355 58 640 3453 2875 72 205 3534 1470 72 826 3534 655 42 220 3622 3763 98 826 3622 3519 11 886 3763 4858 53 826 3763 4782 12 826 3763 4639 50 826 3763 2261 51 559 3937 1093 41 826 3937 2660 34 399 212 2559 42 150 212 1109 57 697 212 925 25 918 1786 4103 59 150 1786 4648 19 150 1786 3409 86 986 1786 2634 46 809 2157 2301 13 150 2157 4851 54 381 2157 2703 36 606 2301 3510 56 150 2301 3545 39 537 2301 1617 27 597 2559 3836 94 150 2559 2738 21 967 2559 1075 34 313 2776 1786 99 150 2776 3155 67 825 3510 2776 4 150 3510 2494 40 519 3510 4861 74 874 3836 2157 48 150 3836 3720 26 219 3836 1336 21 406 4103 4852 80 150 4103 806 93 360 213 4099 5 472 213 170 28 197 855 2822 45 472 855 1828 52 885 855 3707 5 728 934 3432 55 472 934 1882 20 958 934 1371 57 543 1028 1970 51 472 1028 2403 26 477 1028 143 75 173 1374 1028 13 472 1374 3507 24 711 1374 836 95 291 1970 4629 53 472 1970 2478 43 94 2822 4672 50 472 2822 934 45 472 2822 2410 49 984 2822 4399 37 462 3078 855 96 472 3078 591 97 679 3078 3812 4 702 3432 1374 79 472 3432 4976 10 400 3432 4085 30 973 4027 3078 17 472 4027 3276 39 758 4027 3232 47 341 4099 4027 35 472 4099 719 78 784 214 4034 81 545 214 589 87 380 214 3758 18 932 887 3544 96 545 887 4130 15 773 952 887 29 545 952 303 70 556 952 1367 44 405 1097 1110 35 545 1097 849 1 261 1110 952 58 545 1110 2489 92 389 1110 901 16 298 1829 4807 12 545 1829 3118 81 506 1829 3107 85 98 3544 1829 33 545 3544 4834 61 545 3544 3117 86 942 4034 1097 52 545 4034 1089 23 147 4034 1889 61 347 215 2045 57 275 215 4995 30 86 215 4506 78 342 1487 4896 3 275 1487 4984 3 275 1487 126 64 185 1487 2774 67 918 1578 1487 7 275 1578 1786 5 649 1828 3464 26 275 1828 2898 52 50 1828 898 90 22 2045 1828 99 275 2045 4782 28 170 2045 4018 85 940 3464 4136 92 275 3464 2447 8 322 3464 153 63 518 4136 4459 72 275 4136 829 87 582 4136 1426 44 24 4459 1578 70 275 4459 1762 29 331 4459 4683 57 128 216 2403 42 732 216 3159 72 244 1404 2801 7 732 1404 2272 81 949 1404 4511 64 231 2321 3049 42 732 2321 4547 90 732 2321 825 45 831 2403 2321 77 732 2403 2438 59 506 2561 1404 39 732 2561 1430 48 416 2801 4810 86 732 2801 361 64 481 2801 1073 6 554 3049 3084 48 732 3049 3652 35 509 3084 2561 95 732 3084 2578 40 882 3084 2549 74 152 217 1816 78 675 217 3882 43 533 217 4007 33 252 917 4725 98 675 917 2612 60 906 1500 4433 70 675 1500 2298 16 126 1500 3395 42 166 1689 917 73 675 1689 4090 66 389 1816 3219 41 675 1816 4951 4 618 1816 2436 41 41 3219 1500 45 675 3219 2162 41 66 3329 1689 85 675 3329 2603 47 498 3329 3829 91 424 3635 3329 8 675 3635 4752 88 675 3635 2550 9 917 4433 3635 55 675 4433 1716 24 356 218 1088 25 351 218 3638 76 823 1016 3788 62 351 1016 1467 18 355 1016 972 78 194 1088 3288 71 351 1088 4996 91 351 1088 3287 18 920 2859 2861 91 351 2859 2429 57 418 2861 1016 61 351 2861 2172 85 949 3288 3593 68 351 3288 2625 6 640 3593 2859 35 351 3593 1702 38 610 3593 3730 78 168 3788 4882 21 351 3788 4861 20 144 219 4155 26 897 219 1102 33 424 219 4317 95 782 565 2360 36 897 565 2052 88 122 565 459 55 710 1593 2659 45 897 1593 4030 6 634 1593 4410 50 906 2325 4469 91 897 2325 3794 14 307 2360 4609 54 897 2360 4501 16 664 2360 923 86 249 2462 2325 78 897 2462 148 17 585 2659 565 20 897 2659 4645 19 897 2659 2946 74 983 4155 2462 86 897 4155 3746 30 334 4469 1593 5 897 4469 1841 85 596 4469 1428 12 661 220 3294 60 572 220 1290 17 806 516 929 32 572 516 4103 29 843 516 1995 62 622 724 2163 87 572 724 1676 34 862 839 1116 65 572 839 3193 33 768 929 4910 45 572 929 3531 23 572 929 91 43 982 929 3490 32 48 1012 724 75 572 1012 4315 75 551 1012 2168 49 318 1116 1165 10 572 1116 4030 36 767 1165 1012 20 572 1165 757 24 457 1165 1304 2 259 2163 516 94 572 2163 3775 32 594 3294 839 80 572 3294 4547 38 476 3531 4759 22 572 3531 13 21 67 221 4235 56 270 221 2474 31 10 1627 3306 42 270 1627 3943 17 173 1627 4681 17 152 3306 4714 6 270 3306 1392 93 78 3306 4969 10 560 3328 4070 89 270 3328 3611 14 278 3328 650 5 157 4070 4418 85 270 4070 4983 8 270 4070 1841 82 312 4235 3328 57 270 4235 3358 35 171 4418 1627 48 270 4418 777 2 296 4418 3631 72 207 222 926 76 68 222 3995 35 917 926 4023 41 68 926 339 5 207 1957 4889 6 68 1957 4456 48 68 1957 4433 67 895 1957 3965 87 124 2036 3434 24 68 2036 674 22 444 2036 2825 20 611 3269 1957 20 68 3269 2400 19 548 3269 4469 78 847 3434 4694 7 68 3434 2473 36 312 3990 3269 55 68 3990 714 45 883 4023 3990 76 68 4023 364 29 326 4456 2036 53 68 4456 1976 21 579 223 2684 83 843 223 3028 91 829 648 3373 3 843 648 3209 81 596 648 995 45 563 1198 4958 63 843 1198 439 78 645 1198 775 32 248 1479 3688 45 843 1479 763 70 78 2684 648 40 843 2684 4535 99 940 2684 224 24 399 3045 3815 22 843 3045 4400 41 663 3373 3045 12 843 3373 201 84 981 3688 1198 53 843 3688 4177 66 193 3815 1479 86 843 3815 4694 89 843 3815 224 21 990 224 4319 50 352 224 595 28 950 1027 4958 53 352 1027 2502 15 148 2080 4950 17 352 2080 3341 73 352 2080 1422 35 263 2999 1027 82 352 2999 3991 45 384 3268 4045 44 352 3268 1148 75 342 3341 2999 45 352 3341 3744 92 284 3341 1419 22 999 4045 2080 17 352 4045 3774 44 812 4319 3268 10 352 4319 149 56 764 225 2644 8 395 225 3812 66 308 225 4158 26 410 1650 4685 1 395 1650 147 61 75 1880 1650 99 395 1880 3521 60 810 1880 2599 44 884 2424 3780 97 395 2424 905 49 735 2631 1880 93 395 2631 2462 56 339 2631 4630 65 682 2644 2808 65 395 2644 1033 39 4 2808 2424 96 395 2808 3638 54 1000 2808 556 75 149 3780 2631 100 395 3780 4609 33 395 3780 3862 41 507 226 1902 77 584 226 3564 41 863 745 4834 34 584 745 2704 61 142 817 4348 42 584 817 3488 85 435 873 2464 70 584 873 3897 15 237 873 1995 98 784 1561 817 67 584 1561 4667 88 528 1561 2742 7 74 1902 2588 56 584 1902 3248 99 77 2131 873 76 584 2131 3075 70 433 2464 745 29 584 2464 816 39 843 2464 2792 68 969 2588 1561 16 584 2588 4830 58 584 2588 1558 83 85 2588 3467 11 77 3525 2131 68 584 3525 1326 56 874 4348 3525 14 584 4348 72 10 876 227 3681 74 192 227 869 51 79 227 3365 57 384 2129 3116 94 192 2129 4914 10 192 2129 1700 6 349 2924 4531 66 192 2924 731 49 246 2924 3473 34 379 3116 3263 45 192 3116 2171 92 626 3116 2063 92 314 3263 2924 2 192 3263 3985 47 224 3276 2129 25 192 3276 2599 11 373 3276 4340 27 114 3681 3276 70 192 3681 1911 70 346 228 4230 43 379 228 4758 69 289 980 3193 58 379 980 4941 1 411 1291 1691 94 379 1291 4118 26 567 1691 2440 65 379 1691 4059 28 567 1691 1466 25 912 2276 3639 95 379 2276 2621 6 544 2276 2569 12 675 2440 3840 92 379 2440 4665 84 270 3193 2276 97 379 3193 2846 42 329 3639 1291 23 379 3639 4752 22 379 3639 3099 28 273 3639 2609 34 87 3840 4869 86 379 3840 3047 99 97 4230 980 89 379 4230 2500 82 415 4230 1724 36 97 229 2699 38 325 229 1075 86 358 229 4133 13 241 802 1611 95 325 802 1836 82 795 802 2372 67 499 851 802 6 325 851 465 28 778 851 3706 96 489 976 4869 18 325 976 1176 7 615 1611 976 70 325 1611 3777 31 957 1611 2416 2 153 2699 3456 2 325 2699 4523 16 325 2699 3671 12 541 3456 3463 82 325 3456 1624 47 446 3463 851 12 325 3463 4847 35 790 230 1951 64 843 230 3913 77 339 230 2007 75 435 1141 4009 39 843 1141 3344 17 486 1951 4189 76 843 1951 4667 87 469 1951 1986 7 91 2051 4146 79 843 2051 23 52 847 2621 4591 76 843 2621 3745 42 843 2621 963 10 62 2621 2814 46 330 3745 2051 69 843 3745 792 28 186 4009 2621 11 843 4009 4668 9 504 4146 4516 79 843 4146 4982 33 698 4146 3194 59 857 4186 1141 70 843 4186 3961 62 368 4186 3096 27 203 4189 4186 88 843 4189 109 72 372 4189 29 1 879 231 3218 45 105 231 1169 10 240 800 1935 56 105 800 4842 55 422 969 3784 86 105 969 3984 40 624 969 3992 82 723 1413 969 71 105 1413 4893 30 105 1413 4804 52 900 1935 2624 3 105 1935 3491 58 310 1935 2448 66 135 2624 3899 21 105 2624 3850 75 431 3218 800 80 105 3218 3875 17 609 3218 4677 48 546 3784 4684 93 105 3784 3221 97 654 3899 1413 88 105 3899 820 52 691 3899 4188 32 334 232 584 79 978 232 4487 51 377 232 4489 1 635 584 4294 24 978 584 1737 10 296 584 365 68 681 1140 3511 9 978 1140 420 46 760 1140 4568 53 906 2406 4580 17 978 2406 1350 59 100 2995 3985 51 978 2995 454 96 341 3511 2406 39 978 3511 2303 77 17 3511 2541 99 929 3985 1140 91 978 3985 1181 51 627 4231 4701 62 978 4231 2995 100 978 4231 645 28 383 4294 4231 81 978 4294 617 1 181 233 1049 41 446 233 1268 51 975 233 4940 71 383 968 3140 48 446 968 2661 72 988 1049 968 11 446 1049 1609 71 898 1049 929 83 152 3140 4297 26 446 3140 2279 88 626 3140 1332 31 655 3159 4600 44 446 3159 454 31 676 3159 903 44 82 3765 4164 74 446 3765 1284 38 137 3765 2646 56 354 4164 3159 86 446 4164 4194 50 465 4164 4466 40 967 4297 3765 74 446 4297 4782 77 446 4297 4859 57 499 4297 655 15 548 234 919 67 102 234 1052 46 486 843 3502 52 102 843 2196 75 382 843 3816 28 864 919 3024 19 102 919 4960 75 102 919 4932 69 844 919 2559 48 308 1344 3816 43 102 1344 3427 6 868 1344 3952 86 899 3024 3230 18 102 3024 234 21 10 3230 843 1 102 3230 676 13 158 3502 1344 55 102 3502 4769 47 974 3502 3338 60 390 3816 4755 3 102 3816 488 21 923 3816 3060 68 645 235 967 73 315 235 1606 40 290 967 1926 25 315 967 4187 63 219 1297 2700 10 315 1297 1854 31 692 1926 4085 80 315 1926 4475 57 424 2202 3278 93 315 2202 4149 41 510 2202 2195 12 35 2315 3661 53 315 2315 1941 69 271 2315 102 49 98 2560 4800 10 315 2560 4513 78 932 2560 3963 60 765 2700 2315 62 315 2700 1458 47 718 2700 1693 86 676 3278 2560 79 315 3278 3371 87 814 3278 1175 17 372 3661 2202 22 315 3661 3866 100 866 4085 4709 86 315 4085 4144 26 315 4085 1701 21 391 4085 2212 73 159 4144 1297 5 315 4144 3706 11 412 4144 2030 55 859 236 3740 51 368 236 262 54 438 236 1060 11 657 902 4715 94 368 902 844 22 566 2398 3634 49 368 2398 4129 88 593 2398 4652 53 61 2418 2398 63 368 2418 4581 22 303 2418 3563 69 5 3634 4312 26 368 3634 4753 65 368 3634 1090 41 998 3634 3367 42 43 3740 2418 99 368 3740 1383 72 457 4312 902 72 368 4312 3703 27 877 4312 1296 92 248 237 4000 14 293 237 207 44 707 695 4543 75 293 695 2375 78 712 2647 695 93 293 2647 1338 52 846 3706 4220 25 293 3706 3675 71 715 4000 3706 35 293 4000 1207 94 630 4220 2647 9 293 4220 4596 13 293 4220 4513 52 513 4220 3485 80 503 238 1029 91 391 238 2508 29 331 1029 4062 62 391 1029 1888 23 744 1029 2913 96 728 1424 3296 49 391 1424 2785 1 48 1628 1424 57 391 1628 727 98 739 1628 2940 34 614 1632 1628 42 391 1632 2664 5 765 1632 4902 97 487 1765 1632 13 391 1765 4575 100 391 1765 392 33 23 1765 2822 16 138 3296 4744 71 391 3296 4909 47 229 4062 1765 65 391 4062 3630 14 464 4062 3551 52 979 239 2048 81 816 239 3523 29 323 239 3648 52 672 870 3828 3 816 870 260 63 412 1674 2533 52 816 1674 4656 40 816 1674 2651 72 889 2048 4108 73 816 2048 2066 67 593 2048 884 70 414 2533 4975 86 816 2533 4483 85 815 2533 2116 64 985 3828 1674 24 816 3828 2613 20 823 4108 870 80 816 4108 2387 18 842 4108 458 41 904 240 3888 76 456 240 785 17 496 2185 3761 12 456 2185 3305 38 618 2928 4363 35 456 2928 2584 30 245 2928 4534 88 605 3132 2928 78 456 3132 922 86 105 3292 3132 9 456 3292 3590 32 710 3292 3400 9 615 3761 4838 63 456 3761 447 89 295 3888 4387 66 456 3888 219 95 714 4363 2185 25 456 4363 4045 78 222 4363 4473 100 515 4387 3292 46 456 4387 4930 25 456 4387 588 63 106 4387 671 79 94 241 1821 98 490 241 3717 33 386 241 846 2 129 1521 3345 28 490 1521 1633 29 436 1821 3558 42 490 1821 4863 17 827 1821 569 81 799 2274 1521 2 490 2274 1292 44 612 2274 4498 94 162 2515 2274 28 490 2515 1960 64 998 2515 2100 50 674 3345 3839 54 490 3345 4757 63 490 3345 3654 54 14 3345 1077 54 30 3558 4430 84 490 3558 2860 92 510 3558 1275 35 31 3839 4826 51 490 3839 4845 80 887 4430 2515 8 490 4430 493 39 763 4430 4019 23 825 242 2763 32 123 242 4406 3 318 877 3253 58 123 877 2018 60 918 1156 2088 73 123 1156 690 88 207 1156 4044 69 214 2088 4506 15 123 2088 4980 20 553 2088 2879 97 802 2465 877 72 123 2465 2351 6 454 2763 4083 40 123 2763 134 39 244 2883 1156 63 123 2883 3338 95 971 3253 3261 26 123 3253 4824 23 388 3261 4854 29 123 3261 2883 38 123 3261 1749 57 109 4083 2465 37 123 4083 4978 82 739 243 2220 42 146 243 3109 80 592 1559 1598 61 146 1559 4731 56 146 1559 2661 79 898 1576 4353 42 146 1576 1737 33 725 1576 3522 97 16 1598 1790 32 146 1598 1477 51 912 1598 4910 91 619 1668 2650 8 146 1668 4523 88 619 1790 1576 70 146 1790 1246 48 437 2220 1559 58 146 2220 2181 39 307 2220 3102 25 699 2650 4900 33 146 2650 2016 60 449 4353 1668 86 146 4353 3998 36 407 4353 4196 9 891 244 1641 63 498 244 2800 83 498 1017 1142 7 498 1017 1641 39 673 1142 2871 46 498 1142 1842 43 509 1395 1871 85 498 1395 3358 48 374 1641 1395 51 498 1641 178 86 552 1641 246 94 68 1728 2453 67 498 1728 4600 15 498 1728 1819 92 887 1871 1728 85 498 1871 3504 26 742 1871 980 5 979 2453 2786 97 498 2453 4099 20 987 2786 1017 41 498 2786 3790 86 654 2871 3016 85 498 2871 2740 100 566 2871 4614 78 863 3016 4741 25 498 3016 1142 23 1 3016 1952 88 220 245 883 76 595 245 225 23 134 245 2882 11 774 883 4152 64 595 883 239 85 961 883 3565 68 303 1383 3054 17 595 1383 878 55 231 1867 2143 21 595 1867 1903 22 630 2143 3799 3 595 2143 1249 13 75 3054 1867 100 595 3054 1521 16 341 3054 2723 3 951 3187 4102 30 595 3187 4831 48 595 3187 2597 29 967 3799 3187 88 595 3799 903 92 967 4063 1383 6 595 4063 3342 79 268 4102 4758 41 595 4102 538 24 983 4152 4063 42 595 4152 4943 44 543 246 787 61 229 246 890 65 56 246 105 91 685 787 4802 58 229 787 1768 36 229 787 3448 21 708 787 4336 5 610 1768 3270 72 229 1768 4574 75 371 1768 2262 50 20 1791 3940 58 229 1791 454 12 821 1791 4757 7 891 2228 3471 67 229 2228 3701 59 342 2228 4174 77 661 2327 4938 59 229 2327 449 25 381 2327 2620 58 775 2726 2327 97 229 2726 4333 68 345 2726 1496 88 203 3270 1791 22 229 3270 1048 66 15 3270 4979 76 859 3471 2726 38 229 3471 22 65 757 3940 2228 37 229 3940 1375 2 568 3940 4938 48 712 247 1693 57 761 247 3380 75 857 572 1961 27 761 572 4465 82 591 600 4953 14 761 600 1579 70 85 600 2345 2 664 1510 572 59 761 1510 4960 58 761 1510 582 51 594 1693 4096 24 761 1693 77 80 364 1693 3189 59 678 1961 4369 44 761 1961 2554 15 250 1961 966 11 485 1995 600 81 761 1995 1855 16 555 4096 4371 99 761 4096 1349 33 528 4369 1995 50 761 4369 4193 75 15 4369 1503 89 467 4371 1510 1 761 4371 260 11 275 248 3495 8 520 248 2414 85 388 631 915 29 520 631 3825 15 996 631 581 57 893 915 1848 82 520 915 1432 35 413 915 1939 54 969 1131 2986 9 520 1131 2642 31 246 1825 1936 51 520 1825 3859 49 493 1848 1131 83 520 1848 4183 12 646 1936 4671 83 520 1936 4734 75 520 1936 4903 58 636 2986 3379 20 520 2986 3404 4 514 3379 1825 21 520 3379 2725 5 372 3495 631 65 520 3495 4059 46 287 3495 2822 50 82 249 1179 60 1198 249 3700 41 737 249 546 77 643 931 2863 6 1198 931 4928 57 71 1179 2194 22 1198 1179 4774 41 1198 1179 1580 38 23 1563 4763 32 1198 1563 3557 2 595 2194 4482 11 1198 2194 4564 42 483 2194 150 99 907 2430 1563 66 1198 2430 3450 54 107 2863 2430 95 1198 2863 3873 66 699 4482 931 80 1198 4482 1783 5 784 4482 4806 12 928 250 1462 3 463 250 3952 14 483 1462 2920 60 463 1462 1796 22 350 1462 292 45 159 1504 4440 73 463 1504 1263 43 579 1504 1893 26 504 1813 4538 45 463 1813 1504 12 463 1813 2903 25 804 2118 4788 73 463 2118 2368 23 210 2920 4194 16 463 2920 232 97 843 2920 4620 20 548 3129 1813 49 463 3129 1256 93 524 3129 3955 84 443 3239 3129 30 463 3239 609 23 657 3239 1753 39 769 3438 3239 80 463 3438 4804 45 959 4194 3438 68 463 4194 463 66 719 4194 284 55 478 4440 2118 19 463 4440 4239 79 63 4440 4474 47 149 251 1692 99 497 251 3642 86 285 540 2712 57 497 540 3744 97 474 689 4960 50 497 689 1375 23 363 773 689 26 497 773 2016 94 658 773 2304 74 212 1692 3774 66 497 1692 4795 10 497 1692 2371 82 529 1692 4970 30 217 2339 2593 25 497 2339 2396 15 968 2339 17 90 177 2593 3191 77 497 2593 2271 50 325 2593 3615 19 337 2712 2339 32 497 2712 1823 97 898 2764 773 74 497 2764 581 85 561 2971 540 75 497 2971 1510 54 535 2971 1054 73 322 3070 4657 28 497 3070 2764 26 497 3070 4066 6 957 3070 1915 57 42 3191 3070 31 497 3191 4096 29 237 3774 2971 12 497 3774 3399 44 625 252 988 3 529 252 1350 71 463 252 406 95 663 655 3738 26 529 655 2414 14 496 655 3589 21 462 988 2694 45 529 988 4634 13 52 1249 1603 64 529 1249 4532 78 366 1249 1714 30 349 1603 2019 99 529 1603 3494 5 659 2019 655 35 529 2019 1354 51 486 2694 1249 77 529 2694 4587 69 529 2694 26 61 681 2694 1751 52 441 3738 4690 72 529 3738 4684 99 122 3738 4449 66 160 253 1966 92 913 253 636 33 275 761 3025 68 913 761 2291 11 840 761 3077 73 449 1107 4302 36 913 1107 3975 32 617 1966 4316 57 913 1966 1381 3 876 1966 4255 43 44 3025 4476 3 913 3025 930 89 451 3025 3265 37 87 3591 4509 41 913 3591 1200 49 356 3936 3591 34 913 3936 64 7 370 4302 3936 67 913 4302 1432 69 901 4302 3987 28 642 4316 761 29 913 4316 4314 30 398 4476 1107 82 913 4476 4620 60 913 4476 2452 90 346 4476 4972 15 576 254 3083 62 543 254 1824 56 746 2132 2554 3 543 2132 3771 91 141 2132 1444 12 260 2487 2132 61 543 2487 3435 69 394 2487 1184 59 982 2554 2978 59 543 2554 2412 6 458 2978 4119 17 543 2978 1069 84 593 3083 2487 20 543 3083 4560 62 543 3083 1102 18 821 3246 4709 85 543 3246 3023 99 115 4119 4175 54 543 4119 1879 63 626 4119 4358 80 159 4175 3246 86 543 4175 183 77 40 4175 1021 6 615 255 4420 20 584 255 133 55 598 255 1365 82 50 878 3265 41 584 878 4899 56 897 1086 1464 15 584 1086 4518 69 319 1464 3752 56 584 1464 1404 52 156 3265 3853 54 584 3265 142 60 476 3265 1668 83 745 3752 878 71 584 3752 4515 8 584 3752 1200 45 36 3752 146 25 796 3853 4809 66 584 3853 2247 6 902 3853 430 6 168 4420 1086 99 584 4420 123 61 439 256 735 9 193 256 4601 44 807 667 1075 69 193 667 3097 69 598 735 4127 18 193 735 3254 15 260 818 4928 90 193 818 54 70 905 818 3718 91 49 1046 3615 70 193 1046 2515 19 995 1046 4769 53 562 1075 2969 37 193 1075 80 13 487 1075 2474 84 780 1733 4532 82 193 1733 818 77 193 1733 2435 31 111 1733 237 82 660 2689 1733 6 193 2689 332 100 44 2969 2689 13 193 2969 2169 53 260 3615 667 43 193 3615 4062 32 593 4127 1046 63 193 4127 2696 59 695 257 1078 91 614 257 1771 8 49 624 4606 92 614 624 4894 25 614 624 2384 28 135 624 4024 86 429 984 2876 82 614 984 3626 18 494 1078 3998 29 614 1078 1700 21 298 1144 984 82 614 1144 4826 90 614 1144 3394 49 832 1144 1250 19 45 1555 1851 15 614 1555 2712 58 685 1555 3117 43 52 1851 4193 85 614 1851 3639 28 780 1851 1469 10 86 2001 624 49 614 2001 2669 94 455 2001 1666 37 137 2823 2001 99 614 2823 4343 12 285 2876 1555 68 614 2876 2253 50 42 3097 1144 93 614 3097 4106 24 527 3998 3097 67 614 3998 2264 59 987 4193 2823 27 614 4193 875 31 147 258 2806 1 449 258 3451 70 110 749 4693 61 449 749 170 22 735 1314 3930 28 449 1314 3492 51 622 1338 2846 93 449 1338 1021 54 37 1338 311 50 698 2148 2938 86 449 2148 1924 72 211 2519 749 21 449 2519 4932 75 449 2519 3877 80 487 2519 3260 25 200 2806 1314 17 449 2806 209 78 442 2846 3535 9 449 2846 1194 77 364 2938 1338 86 449 2938 4949 94 978 3186 4149 52 449 3186 2698 95 580 3535 3186 75 449 3535 1498 47 674 3535 2102 78 41 3930 2148 89 449 3930 757 11 714 3930 4396 54 79 4149 2519 20 449 4149 4512 32 449 4149 3468 70 465 259 3124 22 1 259 2540 61 415 1077 1849 2 1 1077 709 21 480 1077 2337 33 43 1774 1077 85 1 1774 4718 42 255 1849 2816 89 1 1849 4822 78 58 1849 2953 79 223 2571 4593 100 1 2571 4944 23 1 2571 247 13 908 2571 3861 95 277 2816 3403 62 1 2816 2348 17 590 3124 4123 81 1 3124 313 47 419 3403 3878 1 1 3403 4162 92 635 3878 2571 93 1 3878 1809 35 494 3878 1816 69 706 4123 1774 98 1 4123 2126 7 251 260 4183 35 612 260 4784 64 218 260 2371 28 247 727 4916 49 612 727 3764 1 612 727 786 74 368 1478 4538 68 612 1478 4134 36 112 1478 4123 95 548 1557 727 49 612 1557 2208 38 137 3764 3855 89 612 3764 1382 22 451 3855 1478 44 612 3855 1992 10 23 4183 4479 8 612 4183 2116 82 567 4183 1494 97 615 4479 1557 67 612 4479 4161 5 998 261 2642 50 349 261 2663 11 763 530 4761 76 349 530 765 79 464 530 435 26 953 1087 2482 88 349 1087 1405 2 128 1185 530 74 349 1185 296 39 530 1723 1087 80 349 1723 1245 72 864 2213 1723 93 349 2213 4786 87 349 2213 3689 10 1000 2213 3766 94 321 2482 1185 70 349 2482 752 18 694 2642 2213 84 349 2642 632 72 210 2642 3593 69 958 262 1704 100 355 262 323 99 206 716 2242 62 355 716 1520 96 809 891 716 20 355 891 1311 42 163 996 4508 56 355 996 3836 17 654 1704 3697 12 355 1704 1133 47 542 1704 1776 38 305 2242 996 96 355 2242 3935 29 489 2242 59 92 647 3697 891 90 355 3697 4868 42 355 3697 2282 19 679 3697 1858 96 197 263 2844 49 511 263 1082 8 162 1560 1754 74 511 1560 3827 44 186 1560 3266 13 498 1735 2661 71 511 1735 3848 12 598 1754 4419 2 511 1754 4564 67 185 1754 3435 72 647 2191 1560 96 511 2191 1388 58 853 2318 4694 18 511 2318 3744 37 848 2661 4163 89 511 2661 1945 63 641 2844 2961 93 511 2844 2987 10 891 2936 2191 53 511 2936 2432 16 92 2961 1735 85 511 2961 2504 95 159 2961 528 4 612 4163 4668 13 511 4163 2936 13 511 4163 4676 19 338 4163 3896 95 605 4419 2318 55 511 4419 4681 57 185 4419 1112 83 232 264 1878 76 1586 264 1256 87 161 264 1483 80 875 793 1407 61 1586 793 2598 64 263 1290 3642 20 1586 1290 1995 44 697 1290 2662 67 691 1407 4654 83 1586 1407 3645 37 1586 1407 906 37 400 1784 3577 40 1586 1784 829 24 858 1784 958 10 235 1878 793 81 1586 1878 3798 7 375 1878 4843 70 981 3145 4307 45 1586 3145 234 9 587 3214 4790 47 1586 3214 1887 55 168 3214 4544 73 389 3217 4849 2 1586 3217 3145 82 1586 3217 1214 21 628 3577 3217 99 1586 3577 4306 6 683 3642 3214 25 1586 3642 2833 82 116 3645 1784 41 1586 3645 4753 3 338 3645 4609 65 882 4307 1290 85 1586 4307 3244 88 977 265 1316 36 383 265 1788 95 887 815 3380 31 383 815 3446 76 463 815 3126 25 467 1060 3130 40 383 1060 4530 7 383 1060 3372 18 16 1316 4483 24 383 1316 3744 48 349 1461 3915 52 383 1461 1512 28 683 1461 2986 80 785 2474 1461 50 383 2474 2110 86 779 2474 1560 8 769 3130 815 74 383 3130 2717 10 304 3130 4319 45 272 3250 1060 35 383 3250 3377 18 465 3380 2474 84 383 3380 3680 16 704 3380 2304 87 812 3915 4847 90 383 3915 2688 77 791 4483 3250 59 383 4483 3692 94 995 266 619 97 192 266 4688 30 661 266 721 88 832 545 3952 21 192 545 1016 11 733 545 3775 19 335 619 3858 31 192 619 19 92 313 641 3775 13 192 641 3947 33 640 641 3571 25 196 682 641 76 192 682 4735 53 192 682 2994 34 176 682 4822 27 743 1466 545 19 192 1466 1039 11 505 3775 4018 36 192 3775 1162 49 977 3775 3955 16 547 3858 682 26 192 3858 3952 74 106 3858 2446 1 179 3952 4602 30 192 3952 3897 12 683 3952 2477 79 340 4018 1466 27 192 4018 2062 46 231 267 2537 73 92 267 2596 56 656 267 995 80 335 671 3541 29 92 671 1002 21 145 671 3792 67 271 707 3548 30 92 707 3516 74 96 2067 3690 5 92 2067 1516 43 95 2067 1421 46 587 2307 4804 20 92 2307 2699 69 314 2537 4330 25 92 2537 380 37 625 3541 2067 76 92 3541 2008 38 392 3548 2307 91 92 3548 1521 95 124 3690 707 11 92 3690 1371 91 874 4330 671 49 92 4330 4993 87 92 4330 18 57 105 4330 3518 23 750 268 2072 21 842 268 3731 35 216 646 4266 34 842 646 1774 99 816 646 2274 99 220 669 4357 91 842 669 1253 5 633 669 4999 72 364 1167 1371 75 842 1167 1584 82 632 1371 669 94 842 1371 1847 41 905 2072 4564 22 842 2072 4317 46 842 2072 2889 41 18 2072 3822 90 241 4030 4826 62 842 4030 2682 93 578 4266 4030 99 842 4266 285 74 182 4266 732 86 335 4317 1167 14 842 4317 3279 70 497 4357 646 32 842 4357 1454 28 286 4357 3239 71 700 269 4134 58 601 269 395 69 300 269 1841 98 555 1173 2243 23 601 1173 4186 45 221 1173 3505 33 375 1657 3576 15 601 1657 2815 80 39 1666 2925 7 601 1666 616 19 890 2243 4453 52 601 2243 3018 92 967 2243 4568 73 946 2925 4771 12 601 2925 4831 92 160 3249 1173 21 601 3249 2724 86 330 3249 3990 82 449 3576 4996 98 601 3576 4229 90 601 3576 3883 23 774 4134 1657 52 601 4134 3816 44 164 4134 4252 21 75 4229 3249 37 601 4229 1951 73 221 4229 2987 100 953 4453 1666 65 601 4453 4690 22 447 270 1661 83 39 270 1388 93 762 511 4748 15 39 511 1970 100 133 511 4921 34 800 717 2575 92 39 717 3205 3 24 1661 4499 55 39 1661 1889 58 432 2052 511 22 39 2052 4838 74 39 2052 4603 6 239 2052 2116 75 841 2575 2052 93 39 2575 4287 33 684 2609 3216 15 39 2609 2314 89 952 2609 1874 65 23 2820 2609 85 39 2820 2553 11 351 3156 2820 100 39 3156 2083 59 563 3156 1384 47 527 3216 717 87 39 3216 41 70 962 3686 3156 38 39 3686 2431 75 856 4499 3686 96 39 4499 3037 7 960 271 3506 40 276 271 592 88 628 670 2425 99 276 670 171 92 362 670 3738 63 984 914 2299 47 276 914 885 2 50 1706 1947 81 276 1706 1710 54 867 1947 2606 89 276 1947 3419 62 227 1947 3746 63 600 2299 1706 50 276 2299 417 76 890 2425 914 27 276 2425 2974 10 793 2425 4166 48 993 2606 3663 99 276 2606 4743 85 276 2606 4239 38 435 3506 670 56 276 3506 3888 24 914 3506 3747 90 120 3663 4898 19 276 3663 1417 31 839 3663 4095 83 79 272 1467 17 363 272 3815 90 140 715 4113 65 363 715 3382 30 978 1467 1943 75 363 1467 3217 46 820 1467 325 14 910 1830 715 9 363 1830 1366 94 388 1943 1830 59 363 1943 3362 67 497 1943 4006 14 657 2893 4372 62 363 2893 641 51 523 4113 4421 76 363 4113 1072 100 556 4113 4457 21 864 4372 4833 27 363 4372 4718 66 363 4372 843 53 742 4372 3161 60 564 4421 2893 45 363 4421 4721 71 695 273 2634 6 371 273 25 16 547 514 2354 98 371 514 4981 57 803 1460 4803 14 371 1460 1476 8 371 1460 2452 77 21 1460 3766 8 902 1476 514 34 371 1476 3936 94 871 2354 3647 33 371 2354 650 15 649 2634 4015 12 371 2634 1643 95 926 3647 4740 24 371 3647 2340 43 155 4015 1460 3 371 4015 406 75 383 4015 1438 22 362 274 4397 86 53 274 401 96 28 274 3190 20 62 1043 4667 42 53 1043 3026 94 53 1043 3080 78 312 1517 3367 26 53 1517 4209 13 469 1845 3695 69 53 1845 1814 88 369 2761 3683 51 53 2761 4437 83 957 2761 2240 83 25 2934 1845 27 53 2934 4659 33 654 2996 1517 37 53 2996 134 19 287 3026 2934 90 53 3026 1757 2 150 3367 2761 1 53 3367 3308 60 650 3683 4974 14 53 3683 2285 40 932 3683 2165 49 76 3695 2996 3 53 3695 1411 64 402 4397 1043 25 53 4397 1426 11 384 275 3676 9 486 275 484 89 844 275 710 16 357 809 1753 98 486 809 2762 81 236 809 2029 60 335 1062 2566 100 486 1062 3092 100 384 1062 542 97 234 1089 2747 85 486 1089 2321 47 730 1533 3984 45 486 1533 4774 34 538 1753 1757 84 486 1753 3312 50 325 1753 2802 58 824 1757 4548 58 486 1757 4922 25 486 1757 1459 70 630 1757 2124 49 142 1923 1062 28 486 1923 4008 50 684 2566 1089 22 486 2566 2391 49 455 2566 3540 69 938 2747 3127 96 486 2747 1894 25 482 3127 809 51 486 3127 947 43 817 3676 4951 41 486 3676 1533 39 486 3676 2354 25 80 3984 1923 12 486 3984 4794 14 979 3984 2573 21 755 276 993 32 348 276 4462 4 844 276 2644 58 738 993 3358 64 348 993 4715 91 348 993 1460 89 650 993 780 12 726 1261 4147 32 348 1261 2399 18 804 1920 4710 58 348 1920 2118 63 346 3358 1261 41 348 3358 998 19 597 3358 176 80 812 4147 4467 63 348 4147 216 53 938 4467 1920 82 348 4467 1807 85 213 277 4300 31 407 277 1245 51 180 277 3369 82 665 555 3679 75 407 555 977 99 918 555 1190 94 643 1008 4835 82 407 1008 3579 57 407 1008 391 49 376 1558 1008 56 407 1558 3784 54 101 1558 837 34 59 1589 2912 17 407 1589 4505 30 407 1589 2636 7 825 2091 1589 33 407 2091 2921 98 717 2091 4397 76 428 2508 2091 73 407 2508 1568 90 225 2508 1330 10 519 2589 1558 20 407 2589 1010 15 289 2589 1746 31 196 2610 4677 1 407 2610 4553 97 768 2912 2589 54 407 2912 3610 38 361 3579 2610 63 407 3579 2131 90 419 3579 4826 71 345 3679 2508 79 407 3679 984 30 590 4300 555 57 407 4300 1485 61 524 278 4278 77 647 278 1401 73 713 653 1534 75 647 653 350 85 251 653 4765 30 724 1337 1793 32 647 1337 4129 11 1000 1337 2035 49 789 1534 4589 90 647 1534 377 51 83 1534 1798 96 160 1709 4086 32 647 1709 4528 83 647 1709 2496 98 656 1709 2431 31 337 1793 4190 22 647 1793 2343 84 506 3337 1337 39 647 3337 4645 78 74 3337 3263 28 811 4086 3337 25 647 4086 3774 11 363 4086 3148 51 510 4190 653 79 647 4190 823 41 326 4190 3186 14 541 4278 1709 15 647 4278 2290 16 609 4278 2734 20 15 279 674 18 417 279 990 60 282 656 2579 62 417 656 4550 79 613 674 2637 83 417 674 4393 32 984 890 1367 10 417 890 4694 13 116 890 180 90 581 1367 4816 94 417 1367 1819 44 643 2579 4471 7 417 2579 1749 81 578 2637 656 2 417 2637 1634 97 6 3318 4958 38 417 3318 890 28 417 3318 4676 52 509 3318 348 93 572 4471 3318 25 417 4471 859 90 258 280 1745 55 1070 280 665 100 143 1511 4351 76 1070 1511 4406 100 416 1713 3188 55 1070 1713 2292 59 503 1745 2681 32 1070 1745 4765 57 134 2096 3205 92 1070 2096 3670 64 405 2096 1232 87 591 2178 1713 16 1070 2178 3477 98 738 2681 2178 40 1070 2681 2772 92 97 2681 1215 2 631 3188 1511 57 1070 3188 4025 57 438 3205 4504 15 1070 3205 4045 82 301 3205 918 12 850 4351 2096 43 1070 4351 4731 10 1070 4351 879 33 704 281 3422 36 32 281 3113 7 995 1128 2638 73 32 1128 2796 57 795 1128 2739 33 441 2297 1128 1 32 2297 1272 9 373 2297 4313 73 677 2638 2998 24 32 2638 4672 97 32 2638 3345 2 741 2998 4826 86 32 2998 4992 28 459 2998 778 54 273 3422 2297 34 32 3422 4316 64 828 282 811 40 887 282 358 42 739 282 4225 91 164 811 2802 87 887 811 4961 10 887 811 1999 39 523 1673 4512 83 887 1673 3797 37 897 1673 3243 31 184 2353 4131 37 887 2353 344 40 477 2802 3656 34 887 2802 1451 77 733 3656 4321 72 887 3656 4241 78 620 3656 1839 72 668 4131 1673 4 887 4131 264 44 371 4131 4514 38 889 4321 2353 62 887 4321 1474 90 181 283 1257 39 387 283 291 79 733 759 3117 36 387 759 2103 8 191 1117 759 34 387 1117 250 98 899 1257 2486 10 387 1257 4978 53 519 1257 2889 36 507 1484 2811 95 387 1484 4598 24 387 1484 536 28 717 1484 2395 50 218 2027 2120 33 387 2027 1754 49 626 2027 4210 39 815 2120 4004 45 387 2120 4693 64 387 2120 4392 14 719 2120 4282 67 50 2486 1484 92 387 2486 2950 44 490 2811 1117 62 387 2811 1695 51 836 2811 4554 100 539 3117 2027 23 387 3117 3690 64 331 3117 4616 69 638 3813 4909 28 387 3813 2823 18 620 3813 400 7 102 4004 4376 98 387 4004 4894 39 53 4004 202 62 436 4376 3813 44 387 4376 1321 7 719 4376 722 49 502 284 3279 66 339 284 1049 76 96 284 4340 21 904 1683 4413 82 339 1683 358 70 940 2404 4657 93 339 2404 4119 84 245 2404 2343 15 55 2710 2404 70 339 2710 1734 99 531 3279 4251 59 339 3279 3648 2 78 3279 4216 71 485 3493 2710 44 339 3493 3180 86 475 3493 231 48 85 3665 4530 91 339 3665 1683 13 339 3665 4543 1 33 4251 3665 98 339 4251 4918 6 77 4251 1117 75 865 4413 3493 24 339 4413 30 90 955 285 1147 54 882 285 3609 59 774 701 1145 15 882 701 723 8 570 701 1408 22 426 1145 1519 43 882 1145 4057 100 194 1145 548 87 825 1147 701 57 882 1147 481 97 740 1147 2138 55 975 1519 2452 79 882 1519 3952 72 904 2174 3251 99 882 2174 4629 8 882 2174 3033 14 435 2174 3371 27 484 2298 2174 93 882 2298 2277 8 287 2452 2792 61 882 2452 44 74 263 2792 3242 11 882 2792 4986 68 73 3242 2298 69 882 3242 575 61 70 3242 1143 95 169 3251 4684 79 882 3251 769 52 530 286 4303 31 400 286 1041 82 678 286 4841 81 931 1201 1389 26 400 1201 4991 38 739 1375 1201 36 400 1375 693 92 427 1375 2942 83 867 1389 2495 41 400 1389 4698 10 244 1389 2191 4 1000 1548 3487 14 400 1548 4643 19 622 1548 1751 53 133 1875 1548 22 400 1875 4619 2 400 1875 3637 36 808 1875 4168 49 298 2140 1375 63 400 2140 4815 73 899 2495 4856 24 400 2495 584 96 559 3376 1875 76 400 3376 4783 7 604 3376 4847 17 308 3487 2140 77 400 3487 4985 27 799 4249 3376 53 400 4249 193 74 471 4249 757 23 752 4303 4249 25 400 4303 246 32 999 4303 615 83 346 287 4029 78 410 287 3554 14 440 287 2555 91 435 556 848 96 410 556 346 16 358 848 2885 2 410 848 2419 54 950 848 4282 58 342 2447 3435 26 410 2447 1635 73 361 2885 4288 95 410 2885 4731 99 410 2885 3122 52 778 2955 3455 58 410 2955 635 61 866 3435 2955 18 410 3435 1436 23 301 3435 2607 66 435 3455 556 12 410 3455 1407 81 560 4029 2447 39 410 4029 1998 21 430 4029 1302 55 378 4288 4770 38 410 4288 4746 82 508 4288 4401 12 994 288 3125 12 534 288 459 76 866 672 4922 15 534 672 1277 81 793 672 4763 89 982 987 2665 86 534 987 1711 10 101 987 342 98 367 1450 2044 87 534 1450 3110 16 875 1450 1876 48 266 1604 672 97 534 1604 2756 53 181 1604 2836 29 823 1839 4891 36 534 1839 1450 5 534 1839 1511 35 437 1839 4487 66 769 1910 3877 9 534 1910 2454 18 6 1910 581 76 856 2044 1910 67 534 2044 1291 69 229 2044 3589 77 988 2356 3370 39 534 2356 4509 37 534 2356 2916 9 577 2356 4430 53 825 2665 2356 63 534 2665 4856 97 884 3125 987 27 534 3125 1727 39 525 3370 1839 68 534 3370 4911 51 323 3877 1604 16 534 3877 4057 99 534 289 3962 17 932 289 813 60 307 289 2110 6 64 963 4375 56 932 963 727 78 746 963 851 48 212 1051 1592 66 932 1051 4800 84 932 1051 1815 60 826 1501 1741 61 932 1501 755 33 1 1592 4766 10 932 1592 4930 26 288 1592 2554 54 313 1741 963 86 932 1741 1637 41 427 2357 1051 99 932 2357 1858 92 147 2357 3210 51 650 3962 1501 36 932 3962 2318 96 368 4375 2357 92 932 4375 2755 98 537 290 3479 55 367 290 3686 85 78 290 789 95 939 2169 2947 2 367 2169 3409 56 37 2169 3126 10 706 2484 3804 49 367 2484 2673 47 847 2484 1874 42 6 2947 3189 13 367 2947 1148 17 93 2947 4748 8 824 3189 4068 8 367 3189 2915 37 553 3418 4947 24 367 3418 662 42 19 3418 4749 71 440 3479 2484 19 367 3479 4560 66 464 3804 2169 73 367 3804 873 91 72 4068 3418 79 367 4068 4932 83 367 4068 3704 39 422 291 4254 25 747 291 2018 97 145 291 3167 28 629 586 4089 28 747 586 2680 80 816 1569 4961 74 747 1569 4627 3 747 1569 3489 57 724 1569 1398 48 640 2180 586 31 747 2180 4085 84 437 4089 4356 65 747 4089 885 36 740 4254 4491 16 747 4254 3763 61 320 4356 1569 71 747 4356 2586 16 481 4356 3751 39 405 4491 2180 88 747 4491 4221 25 381 4491 1200 27 660 292 3820 76 470 292 64 70 101 292 2612 63 413 537 2085 90 470 537 278 8 749 981 4512 49 470 981 752 77 247 1972 2989 34 470 1972 3900 58 331 1972 4315 3 940 2085 1972 71 470 2085 3232 1 12 2085 202 34 668 2989 981 53 470 2989 4135 61 682 3757 537 16 470 3757 4292 67 853 3757 1098 27 551 3820 3757 58 470 3820 4766 11 470 3820 1722 31 810 293 954 95 202 293 491 83 717 293 2886 91 944 954 997 68 202 954 623 45 134 997 1838 29 202 997 4801 51 93 997 4336 49 925 1013 4789 18 202 1013 3096 2 149 1838 2510 86 202 1838 1039 48 570 2510 4345 6 202 2510 1717 59 320 2510 3246 83 36 4345 1013 8 202 4345 4625 19 202 4345 3274 39 589 4345 69 99 36 294 882 91 680 294 3735 25 561 882 1092 67 680 882 1028 35 544 882 3148 70 142 1044 2720 31 680 1044 432 65 667 1092 4151 26 680 1092 1333 76 145 2720 4846 31 680 2720 3200 20 283 2720 715 13 172 2897 3111 43 680 2897 4506 11 680 2897 1800 80 842 2897 683 63 238 3111 1044 79 680 3111 4679 53 633 3111 1748 9 667 4151 2897 72 680 4151 4794 97 683 4151 1461 68 564 295 4275 9 354 295 4475 29 326 295 4538 33 9 548 2772 85 354 548 2749 9 298 652 4490 5 354 652 3291 96 615 652 3333 98 44 1384 4680 67 354 1384 2504 74 143 1653 2717 18 354 1653 2709 32 139 1653 1969 99 295 1879 652 77 354 1879 2538 13 523 2012 1653 42 354 2012 1954 51 799 2012 70 53 686 2717 1384 100 354 2717 3774 76 676 2772 4542 53 354 2772 4182 31 354 2772 494 34 691 4182 2012 32 354 4182 2517 9 86 4182 4318 69 124 4275 1879 58 354 4275 1207 48 124 4275 1335 36 527 4490 548 3 354 4490 1088 93 174 4490 624 53 600 296 3716 18 730 296 1419 75 781 296 3413 29 623 904 3322 2 730 904 3470 7 967 904 4370 29 230 1229 3518 96 730 1229 3507 48 785 1229 2254 61 593 1509 1815 37 730 1509 4130 41 233 1815 4513 65 730 1815 4748 33 730 1815 4417 73 509 1815 4465 68 761 3322 1229 58 730 3322 2661 12 888 3322 3001 25 653 3496 1509 4 730 3496 6 22 296 3496 943 59 981 3518 4047 43 730 3518 4393 61 719 3518 2245 41 223 3716 904 48 730 3716 1043 52 939 3716 890 30 54 4047 3496 61 730 4047 3144 11 832 297 643 94 451 297 446 100 861 297 2259 99 248 643 3011 2 451 643 1181 75 130 1266 3671 31 451 1266 1769 98 928 1843 1266 8 451 1843 3082 51 994 2381 3262 81 451 2381 4741 4 451 2381 266 34 650 2381 3030 40 664 3011 1843 94 451 3011 1445 49 177 3011 4317 68 567 3262 4669 59 451 3262 4403 36 448 3262 4027 17 748 3671 4185 22 451 3671 30 96 243 4185 2381 52 451 4185 739 85 602 298 3809 36 408 298 35 82 975 298 3738 67 242 1573 4705 12 408 1573 2865 43 408 1573 544 80 308 1945 2189 88 408 1945 3996 55 294 2189 4382 2 408 2189 1085 35 131 2865 3827 49 408 2865 3037 96 33 2865 4242 76 389 3572 4106 55 408 3572 1419 97 426 3572 3004 14 214 3809 1945 6 408 3809 4547 47 508 3809 526 38 447 3827 4518 43 408 3827 4034 2 992 3827 948 62 505 4106 1573 7 408 4106 2372 25 20 4382 3572 48 408 4382 803 91 651 4382 2601 99 880 299 757 33 559 299 4995 33 494 299 200 7 839 757 1520 64 559 757 3872 74 781 757 196 70 475 1307 4588 98 559 1307 301 46 410 1307 327 60 919 1520 2745 88 559 1520 2052 53 562 1520 4721 45 578 2371 4442 56 559 2371 1233 5 567 2371 3728 77 977 2745 3022 95 559 2745 4827 6 702 3022 2371 76 559 3022 4986 2 127 3022 3379 40 36 3529 3861 43 559 3529 4797 87 421 3529 2134 72 96 3551 1307 8 559 3551 3286 42 133 3551 1615 15 931 3861 3551 28 559 3861 2594 16 875 4442 3529 60 559 4442 4613 66 559 4442 3985 57 350 300 2049 20 1159 300 3666 8 114 2049 2240 53 1159 2049 1517 75 435 2240 2813 66 1159 2240 4833 6 1159 2240 2994 31 776 2267 3440 46 1159 2267 3048 64 720 2313 3955 32 1159 2313 3271 20 340 2813 2267 97 1159 2813 4977 43 440 2813 3486 18 484 3440 2313 11 1159 3440 3193 21 243 3440 1393 66 28 3955 4427 84 1159 3955 2747 48 832 4427 4968 83 1159 4427 4157 1 881 4427 2341 67 491 301 812 85 153 301 2132 7 363 301 3919 15 486 812 3517 8 153 812 4266 2 888 1325 3993 96 153 1325 391 85 214 1393 4707 8 153 1393 3068 72 153 1393 743 61 766 1393 3361 78 758 1546 4890 57 153 1546 747 66 755 1546 3799 1 634 2081 1546 41 153 2081 4737 85 217 2081 2481 33 180 2974 2081 89 153 2974 1418 20 816 2974 2758 39 456 3068 2974 89 153 3068 1913 51 304 3068 1230 26 32 3517 1325 93 153 3517 4400 6 28 3993 1393 21 153 3993 2215 88 673 3993 1508 89 420 302 3854 58 260 302 3386 51 514 1714 2539 62 260 1714 3765 28 757 1714 4617 40 426 1897 4157 37 260 1897 3497 35 348 2079 1897 77 260 2079 1715 43 317 2079 2759 59 745 2444 3122 71 260 2444 799 49 653 2473 4979 93 260 2473 2444 8 260 2473 1897 43 734 2473 3072 92 741 2539 2079 87 260 2539 3572 50 76 2539 2673 10 208 3122 1714 23 260 3122 2407 88 538 3122 1287 36 790 3854 2473 94 260 3854 1713 59 614 4084 4429 11 260 4084 268 35 476 4157 4084 65 260 4157 371 67 672 4157 1360 7 112 4429 4781 80 260 4429 2761 59 576 4429 149 29 720 303 1918 48 689 303 4081 42 166 875 1113 57 689 875 1763 79 739 875 851 4 80 1113 1712 3 689 1113 1881 88 142 1712 4661 19 689 1712 3316 96 383 1712 4570 26 291 1918 3053 31 689 1918 3398 76 525 1918 2224 47 701 2086 2210 84 689 2086 1090 3 821 2210 3900 67 689 2210 2756 23 483 3053 2086 28 689 3053 535 27 268 3053 2036 38 319 3900 875 17 689 3900 4666 71 689 3900 2354 19 587 3900 4205 41 235 304 3259 69 914 304 3667 62 7 748 2945 52 914 748 4215 99 428 1854 4503 66 914 1854 3830 17 914 1854 1196 20 840 2004 3109 21 914 2004 4102 24 666 2004 707 43 508 2215 2449 42 914 2215 4391 8 61 2215 2673 6 585 2449 4623 42 914 2449 4376 4 845 2945 1854 1 914 2945 223 35 158 2945 3691 48 140 2946 2004 58 914 2946 1158 76 104 3109 2215 81 914 3109 180 47 601 3109 1092 99 866 3259 4381 9 914 3259 3186 93 305 3830 2946 50 914 3830 1838 11 623 3830 3092 56 794 4381 748 10 914 4381 4003 41 552 4381 1142 6 89 305 3604 41 83 305 3154 70 608 305 4420 49 335 977 2716 44 83 977 4317 37 332 977 1751 59 519 1301 2099 6 83 1301 2396 20 237 1301 1038 7 335 1579 977 83 83 1579 3126 76 828 1579 1725 39 615 1600 2595 68 83 1600 2892 6 626 1705 4949 22 83 1705 2695 57 992 2008 1579 77 83 2008 3396 18 381 2099 1600 86 83 2099 4583 73 83 2099 4550 7 360 2116 1705 100 83 2116 4515 68 113 2595 2008 87 83 2595 4942 98 83 2595 1661 81 209 2716 3382 10 83 2716 2135 51 24 2716 3199 88 376 3382 2116 46 83 3382 234 55 682 3382 1952 56 560 3604 1301 28 83 3604 4268 100 86 306 2514 96 256 306 3235 33 909 306 3932 57 807 758 1836 23 256 758 1663 18 563 1440 1863 11 256 1440 851 84 577 1613 1440 42 256 1613 3004 100 909 1836 1613 28 256 1836 1769 34 983 1863 4648 71 256 1863 4994 94 256 1863 3514 81 534 2431 758 96 256 2431 3247 53 486 2431 2667 37 759 2514 2431 25 256 2514 3104 95 216 307 2601 31 52 307 233 26 813 1377 4976 50 52 1377 2233 73 52 1377 99 81 813 1553 4434 15 52 1553 2430 64 214 1553 1069 4 931 1804 1377 44 52 1804 3311 35 109 2233 3520 56 52 2233 3810 90 575 2601 3282 39 52 2601 196 47 19 2601 172 63 728 3282 4489 64 52 3282 3781 44 149 3282 666 54 272 3520 1553 57 52 3520 2624 21 599 4434 4796 71 52 4434 3458 68 821 4489 1804 55 52 4489 302 19 99 308 3598 98 194 308 291 76 609 634 4989 6 194 634 2102 87 194 634 647 62 590 1136 4742 13 194 1136 3880 16 148 2102 1136 38 194 2102 676 66 202 2139 634 70 194 2139 3687 72 835 2139 1756 80 975 3598 3783 15 194 3598 4699 66 929 3598 4647 78 352 3783 2139 93 194 3783 854 82 177 309 4284 96 1290 309 1790 26 78 309 4580 83 456 508 4579 53 1290 508 3170 90 647 508 1557 23 595 1034 508 82 1290 1034 4697 45 217 1034 4837 42 666 1597 2552 78 1290 1597 4016 53 244 1597 3370 10 315 2552 1034 100 1290 2552 418 47 331 2552 2025 65 964 4263 1597 74 1290 4263 4654 54 1290 4263 2169 13 187 4263 3316 11 874 4284 4426 55 1290 4284 2774 57 544 4426 4263 24 1290 4426 1293 29 415 4426 1231 66 85 310 1274 58 473 310 3545 6 767 825 2466 32 473 825 4941 48 265 1274 825 33 473 1274 4763 28 473 1274 2298 44 401 1274 1681 41 524 1883 2879 51 473 1883 635 42 711 1883 1526 69 654 1998 1883 91 473 1998 749 45 538 1998 3760 68 216 2268 1998 55 473 2268 3547 20 277 2466 4025 94 473 2466 4362 72 981 2466 220 96 188 2879 4508 60 473 2879 3287 44 41 4025 2268 9 473 4025 4039 67 250 311 3938 42 717 311 4002 62 283 311 2995 10 540 662 4979 3 717 662 128 9 966 662 1194 15 390 862 3934 57 717 862 4886 60 717 862 4811 8 195 862 2920 44 931 1781 662 5 717 1781 22 74 477 2439 4156 91 717 2439 1332 37 601 3934 2439 62 717 3934 583 4 760 3938 4145 80 717 3938 3536 90 729 4145 862 72 717 4145 1672 33 660 4145 3177 16 650 4156 1781 53 717 4156 4023 21 970 312 2840 34 163 312 3786 53 525 1341 3779 90 163 1341 2288 53 930 1990 2421 13 163 1990 2998 81 514 1990 4607 31 832 2394 1341 87 163 2394 2059 84 6 2421 4087 76 163 2421 4408 62 999 2421 2322 72 504 2840 1990 78 163 2840 2343 98 312 2840 1542 84 861 3779 4742 17 163 3779 4969 64 163 3779 4486 28 659 4087 2394 26 163 4087 4510 80 803 313 2503 6 728 313 3690 20 189 313 1243 92 605 611 2821 59 728 611 3971 27 921 710 4428 55 728 710 3442 38 832 1542 611 70 728 1542 53 20 532 1542 2111 35 975 2279 3462 100 728 2279 1263 50 987 2503 710 33 728 2503 2985 76 116 2503 4920 11 559 2821 4584 71 728 2821 2279 70 728 2821 1743 3 717 2821 989 73 987 3462 4682 75 728 3462 2639 86 749 4428 1542 64 728 4428 4531 98 943 4428 524 83 352 314 3512 17 756 314 3235 31 964 573 3494 96 756 573 174 98 874 573 2010 69 162 916 2249 97 756 916 4741 84 756 916 3010 47 665 1186 916 27 756 1186 1633 22 113 1186 2455 42 901 2249 573 63 756 2249 850 27 984 2249 4565 5 158 3494 4691 73 756 3494 1579 36 602 3512 1186 57 756 3512 1151 59 700 315 2082 46 353 315 551 35 417 513 3567 2 353 513 2390 56 385 513 3148 92 913 1419 2815 65 353 1419 391 3 985 1419 3826 83 59 1536 3058 65 353 1536 2849 11 705 1720 3837 40 353 1720 1864 82 712 1720 3918 29 187 1967 4890 72 353 1967 1720 64 353 1967 2487 100 974 1967 283 18 549 2082 513 25 353 2082 4962 57 353 2082 1971 96 248 2815 4541 61 353 2815 1583 42 790 2815 1217 1 616 3058 3957 98 353 3058 3856 54 525 3058 1256 72 199 3567 4283 80 353 3567 1032 7 89 3567 265 90 24 3837 1536 32 353 3837 390 81 253 3957 1419 43 353 3957 4438 37 821 4109 1967 25 353 4109 1313 100 908 4109 1827 63 364 4283 4109 3 353 4283 2576 67 857 4283 3397 83 26 316 1009 10 294 316 4747 11 372 316 4770 1 521 894 4750 99 294 894 4937 76 294 894 3222 34 986 1009 2909 96 294 1009 950 7 966 1009 3138 43 370 1248 2170 62 294 1248 3302 86 374 2170 894 95 294 2170 912 58 45 2170 2088 8 285 2909 1248 99 294 2909 3557 66 346 2909 4505 73 677 317 2932 2 316 317 4149 14 922 317 1570 29 687 546 4690 65 316 546 3229 76 316 546 1214 76 552 546 3183 18 178 2932 3200 43 316 2932 1767 30 377 2932 2621 3 806 3200 3863 45 316 3200 762 43 90 3229 4040 76 316 3229 1000 77 708 3229 838 14 104 3746 4877 91 316 3746 4554 18 301 3863 546 25 316 3863 2356 54 743 3863 2706 40 849 4040 3746 22 316 4040 1090 100 499 4040 3554 25 519 318 557 8 213 318 38 24 281 318 592 18 956 523 4645 18 213 523 1358 30 199 523 3522 28 656 549 911 35 213 549 1511 12 188 549 392 49 754 557 3388 99 213 557 2800 52 857 557 451 78 514 911 523 39 213 911 3427 63 474 1528 549 48 213 1528 4888 81 213 1528 4545 87 389 1528 4236 35 158 1761 1528 20 213 1761 2539 28 290 1761 673 53 30 2596 1761 24 213 2596 2419 82 245 3388 2596 4 213 3388 1882 47 939 3388 2597 63 229 319 2630 31 698 319 3985 49 852 319 630 24 614 650 3004 73 698 650 2592 7 388 842 2935 26 698 842 1684 92 795 1917 650 87 698 1917 1665 32 331 2005 3741 26 698 2005 1032 58 107 2005 34 85 332 2630 3721 74 698 2630 4926 77 38 2630 2382 33 330 2697 1917 35 698 2697 4537 73 654 2697 3595 99 804 2935 4527 30 698 2935 2697 23 698 2935 3675 59 554 3004 4692 26 698 3004 3735 44 711 3721 2005 98 698 3721 1681 53 98 3721 760 77 855 3741 842 8 698 3741 2342 96 330 3741 1771 35 840 320 506 89 407 320 3938 40 274 506 1537 70 407 506 2372 54 112 1258 4686 78 407 1258 1994 78 713 1258 1362 78 584 1328 3884 82 407 1328 485 28 881 1328 1116 53 368 1537 2643 42 407 1537 2351 80 255 1846 1258 22 407 1846 2945 17 832 1846 4995 42 739 2643 1328 46 407 2643 3989 87 391 2643 664 51 64 3074 3926 47 407 3074 209 22 7 3884 3074 35 407 3884 1684 81 22 3884 1064 91 886 3926 1846 47 407 3926 4755 13 407 3926 2784 32 609 321 897 23 416 321 72 37 180 321 304 75 496 694 2238 44 416 694 3970 75 160 694 513 88 666 897 1697 67 416 897 1198 31 445 1697 2632 23 416 1697 4862 67 416 1697 3054 32 67 2238 2410 26 416 2238 176 60 112 2410 3447 56 416 2410 1269 29 484 2632 694 87 416 2632 196 38 787 2632 881 97 925 3447 4904 92 416 3447 3988 57 62 322 3114 82 385 322 2243 47 600 1074 1685 29 385 1074 2136 42 459 1234 2101 9 385 1234 598 65 4 1242 1074 21 385 1242 502 58 496 1242 4074 6 354 1685 1234 44 385 1685 4738 17 80 2101 4848 77 385 2101 4014 11 245 3114 1242 97 385 3114 4716 12 385 3114 1038 45 934 323 4448 86 532 323 1422 24 805 323 812 93 190 764 1497 35 532 764 4956 97 532 764 4485 68 695 1212 4065 27 532 1212 2622 72 528 1212 3103 46 731 1497 1212 4 532 1497 3735 64 672 2950 764 52 532 2950 1663 83 990 2950 3947 4 781 4065 4614 21 532 4065 1251 67 669 4065 2299 71 239 4448 2950 55 532 4448 1896 59 900 324 2211 67 277 324 2739 81 52 324 3090 88 930 1014 4798 43 277 1014 4599 80 662 1489 2341 86 277 1489 1749 24 774 1489 357 39 312 2211 4315 5 277 2211 4547 70 277 2211 3152 93 287 2317 2326 25 277 2317 1398 17 276 2317 4477 13 115 2326 1014 39 277 2326 4617 43 616 2341 2317 36 277 2341 1154 6 925 2341 3362 43 420 4315 4318 18 277 4315 4312 14 999 4318 1489 1 277 4318 2545 27 569 325 1852 76 593 325 67 36 110 325 3376 24 796 632 3748 67 593 632 1434 82 28 1852 3522 29 593 1852 1785 71 515 1852 623 16 315 2981 4571 87 593 2981 3299 2 446 3522 632 47 593 3522 2607 4 870 3522 733 40 61 3711 4924 13 593 3711 2981 29 593 3711 4334 18 784 3711 2665 62 549 3748 3711 72 593 3748 3847 52 508 326 3499 48 972 326 828 83 444 326 1565 45 633 544 3759 38 972 544 4414 86 819 544 44 2 559 1349 3910 33 972 1349 826 71 672 1349 571 78 533 2393 4140 5 972 2393 1290 10 898 3325 4533 89 972 3325 2393 70 972 3325 1415 62 623 3499 544 64 972 3499 3808 87 162 3759 1349 10 972 3759 4467 16 669 3910 3325 2 972 3910 1411 2 276 3910 3142 36 368 3967 4914 84 972 3967 1466 72 853 4140 3967 53 972 4140 1531 9 374 4140 4187 76 557 327 3624 7 694 327 3428 100 248 327 4988 82 432 1225 3051 10 694 1225 1833 56 103 1225 4619 22 513 2382 4914 21 694 2382 4638 19 919 2382 153 60 938 2405 1225 61 694 2405 3607 29 619 3051 2382 27 694 3051 3850 14 767 3624 4941 20 694 3624 4115 38 694 3624 3527 78 6 4115 2405 65 694 4115 3431 36 331 4115 4640 92 745 328 3059 99 289 328 1350 64 434 328 1797 81 732 732 4137 99 289 732 3099 22 537 899 1187 54 289 899 1694 42 95 1187 1721 66 289 1187 4875 65 289 1187 154 31 200 1721 732 61 289 1721 1890 75 344 2942 899 46 289 2942 2631 80 929 2942 3459 51 51 3059 3206 64 289 3059 108 6 2 3059 3323 16 604 3206 2942 7 289 3206 2439 76 226 3206 587 49 295 4137 4928 10 289 4137 541 6 759 329 577 27 1387 329 4573 56 216 329 3796 76 154 577 3179 84 1387 577 574 71 178 577 2552 81 963 872 4722 79 1387 872 4538 22 211 872 1711 70 293 1318 2767 48 1387 1318 98 9 291 1318 4562 75 778 2376 4031 8 1387 2376 4387 79 476 2376 2672 57 470 2480 1318 77 1387 2480 2223 85 804 2480 33 10 309 2767 872 99 1387 2767 1933 19 786 3179 2376 9 1387 3179 3356 96 679 3179 4931 96 359 4031 2480 3 1387 4031 4709 99 1387 4031 3192 96 340 4031 4681 77 176 330 2458 54 296 330 52 76 175 561 4097 44 296 561 4512 10 291 1538 3446 61 296 1538 3224 7 623 1686 1771 96 296 1686 1524 85 245 1771 3015 42 296 1771 4939 33 282 1771 4602 25 106 2458 1686 86 296 2458 2586 97 749 3015 3983 55 296 3015 2116 42 99 3035 4708 90 296 3035 4551 60 296 3035 2226 43 558 3035 2693 9 380 3446 3035 73 296 3446 662 5 142 3446 2923 2 548 3983 4438 54 296 3983 957 59 935 4097 1538 46 296 4097 2983 16 902 4438 561 71 296 4438 168 22 513 331 2050 2 922 331 526 86 618 782 1566 52 922 782 4934 50 922 782 2977 79 913 1007 1921 84 922 1007 3597 54 2 1007 1882 22 503 1566 3903 13 922 1566 3891 37 393 1566 281 49 282 1921 3944 99 922 1921 4210 94 754 2050 3174 99 922 2050 1556 40 920 3174 1007 15 922 3174 1858 23 496 3903 4528 55 922 3903 808 41 810 3944 782 11 922 3944 1455 88 223 332 3334 32 184 332 2538 76 459 593 4523 85 184 593 2521 58 751 593 3038 19 994 1319 4579 64 184 1319 2719 17 184 1319 2068 66 55 2719 593 81 184 2719 3621 32 477 3334 4346 40 184 3334 3013 34 696 4346 1319 54 184 4346 3885 28 530 333 3356 73 535 333 1613 95 612 333 3147 1 57 636 4258 78 535 636 87 67 240 636 3801 11 838 2983 3573 93 535 2983 4335 16 967 3021 3082 55 535 3021 141 32 314 3021 3181 1 798 3082 636 45 535 3082 99 16 8 3082 1421 99 147 3356 3021 100 535 3356 4977 32 535 3356 2051 97 161 3356 4564 18 209 3573 4787 22 535 3573 4243 67 86 3573 4711 27 236 4073 2983 87 535 4073 2807 62 936 4177 4073 2 535 4177 4478 27 628 4177 1560 55 760 4258 4177 41 535 4258 4224 47 709 334 4245 65 1428 334 1409 17 172 334 3886 20 787 1254 3413 28 1428 1254 4214 42 766 1254 1510 81 578 2173 2905 36 1428 2173 4683 38 1428 2173 3880 15 700 2173 1950 52 553 2723 2173 16 1428 2723 4186 91 519 2723 2895 94 389 2905 1254 86 1428 2905 1232 41 78 3413 4665 84 1428 3413 2056 25 383 4245 2723 59 1428 4245 4979 18 713 4245 980 64 116 335 1894 66 384 335 994 1 620 335 1036 10 46 1042 4625 44 384 1042 43 72 509 1042 2674 94 140 1224 4132 1 384 1224 3426 94 704 1317 2628 95 384 1317 4730 54 384 1317 2514 69 585 1638 1317 31 384 1638 3243 18 241 1894 1224 7 384 1894 1256 19 95 2628 3150 27 384 2628 1951 74 359 2628 4899 78 53 3150 1042 46 384 3150 2027 74 613 4132 1638 42 384 4132 1642 58 242 4132 1842 43 687 336 1780 12 271 336 1340 2 373 336 2455 72 205 588 1486 97 271 588 467 7 689 588 871 42 439 1486 3181 28 271 1486 2066 64 521 1486 2055 87 831 1780 2109 3 271 1780 2933 75 787 1780 4038 33 17 2109 2528 59 271 2109 4483 58 727 2109 4251 71 842 2528 588 86 271 2528 3536 27 734 2528 1360 91 71 3181 4584 33 271 3181 4877 4 271 3181 4349 76 23 337 4218 39 74 337 2481 16 863 2093 3478 34 74 2093 1390 38 774 2392 4313 64 74 2392 4705 77 74 2392 4295 64 603 3375 2093 26 74 3375 4381 36 119 3478 4403 36 74 3478 2687 15 772 3478 1908 35 156 4218 3375 49 74 4218 55 91 325 4313 4924 34 74 4313 57 21 306 4403 2392 58 74 4403 1117 66 944 338 2835 73 427 338 3938 40 145 597 3750 67 427 597 4775 31 295 780 2457 23 427 780 1126 1 394 2457 597 94 427 2457 4727 40 427 2457 1625 95 648 2803 4003 77 427 2803 906 32 725 2835 2803 77 427 2835 4202 50 173 3486 780 53 427 3486 2971 86 923 3486 2496 36 560 3602 4414 59 427 3602 4477 66 540 3602 1126 77 425 3750 3602 54 427 3750 2191 18 606 4003 3486 56 427 4003 2871 75 511 4003 797 36 817 4414 4760 7 427 4414 1343 27 181 4414 4943 71 452 339 1913 81 400 339 4296 70 640 339 2699 80 355 1912 4683 58 400 1912 4204 51 877 1913 2114 62 400 1913 3685 50 500 2114 3450 95 400 2114 505 46 796 2114 943 68 322 2347 4576 94 400 2347 3587 30 400 2347 1270 6 366 2347 134 53 42 3450 2347 79 400 3450 3400 52 860 3587 3894 51 400 3587 1259 96 916 3894 1912 87 400 3894 887 53 554 340 1127 85 584 340 3969 66 139 775 2270 94 584 775 223 49 86 775 50 29 59 1127 1626 96 584 1127 2995 95 549 1127 4541 14 919 1207 3255 70 584 1207 4321 75 984 1207 2065 88 110 1431 2248 39 584 1431 3103 38 552 1431 4573 45 739 1626 1431 94 584 1626 4080 17 320 1626 3420 2 511 1861 2015 7 584 1861 3150 98 355 2015 775 2 584 2015 4682 45 584 2015 737 91 604 2248 1207 45 584 2248 510 28 672 2248 2943 91 29 2270 4776 29 584 2270 2419 85 292 2270 4192 78 467 3255 1861 41 584 3255 2991 6 382 3255 3947 75 467 341 1514 65 411 341 4750 1 753 341 2443 46 500 1514 3237 93 411 1514 4714 73 925 1550 3904 73 411 1550 4991 72 411 1550 4587 79 710 1550 721 59 75 3002 4290 60 411 3002 4409 45 305 3002 3867 2 280 3237 3002 51 411 3237 1915 80 501 3237 2422 67 882 3904 4810 49 411 3904 4510 37 378 4290 1550 91 411 4290 4818 83 666 342 1436 72 656 342 1545 87 221 342 3166 53 130 697 3338 2 656 697 4442 12 978 697 4362 3 13 1436 1855 90 656 1436 3191 76 715 1855 697 28 656 1855 4616 75 656 1855 1040 51 165 1855 1810 96 554 2056 3256 36 656 2056 152 91 769 3256 4765 82 656 3256 4453 6 654 3338 2056 97 656 3338 4626 84 939 343 2623 19 453 343 4213 58 971 343 623 24 867 1164 4052 71 453 1164 1678 61 143 1164 4802 68 194 1809 1164 88 453 1809 1242 88 568 1809 3193 90 453 1929 1809 52 453 1929 4534 97 864 1929 4495 39 543 2623 1929 35 453 2623 4574 65 453 2623 4652 75 525 2623 4789 55 144 3655 4277 20 453 3655 813 79 914 3655 2676 41 446 4052 4201 63 453 4052 1747 5 345 4052 2436 10 992 4201 3655 100 453 4201 2178 22 326 4201 3974 49 987 4277 4614 97 453 4277 1703 82 731 4277 1775 91 733 344 1909 59 327 344 154 60 81 886 4956 56 327 886 4887 88 327 886 4579 2 740 1454 2014 80 327 1454 4180 90 145 1800 1454 15 327 1800 2170 16 400 1800 1536 41 214 1909 4466 87 327 1909 2110 51 634 2014 3950 46 327 2014 3710 95 794 3516 886 81 327 3516 396 55 647 3516 442 13 179 3829 3516 94 327 3829 26 11 392 3829 657 2 243 3950 3829 18 327 3950 2647 33 444 3950 4433 54 640 4466 1800 28 327 4466 4859 85 999 4466 1114 45 111 345 1267 97 729 345 4640 100 944 925 4794 73 729 925 873 76 332 1267 2106 24 729 1267 3276 64 342 1267 29 55 837 1365 2558 16 729 1365 825 30 766 1541 925 29 729 1541 4789 73 729 1541 2175 8 2 1541 1142 85 78 2106 3254 67 729 2106 1665 21 629 2106 2048 5 810 2558 1541 79 729 2558 3766 17 736 2558 4867 67 154 3254 1365 54 729 3254 3099 69 909 346 4326 36 265 346 3471 100 922 1066 4999 8 265 1066 4918 88 683 1942 2724 6 265 1942 926 91 884 2438 3504 97 265 2438 2630 70 265 2438 2604 62 268 2724 2438 35 265 2724 2647 35 315 2856 3859 54 265 2856 4898 29 265 2856 2881 13 422 2856 4721 43 83 3504 2856 22 265 3504 784 12 803 3504 1962 30 348 3859 1066 24 265 3859 2158 45 905 3859 4927 16 661 4326 1942 70 265 4326 4244 8 808 4326 2038 24 858 347 691 54 663 347 2933 24 303 347 4336 81 314 691 1672 34 663 691 1848 68 187 691 154 74 302 760 1562 21 663 760 2586 89 554 1434 3363 49 663 1434 1776 53 712 1434 4747 69 868 1562 4700 56 663 1562 4952 18 663 1562 3625 44 893 1562 4263 48 386 1672 3617 17 663 1672 2691 93 480 1672 1448 45 264 1732 1434 47 663 1732 594 55 835 3363 3537 94 663 3363 551 38 342 3363 183 57 976 3537 760 7 663 3537 12 30 98 3537 1729 80 390 3617 1732 98 663 3617 1764 8 227 348 687 78 968 348 219 95 898 348 712 37 10 687 3709 83 968 687 1827 14 892 687 2231 48 110 959 3235 49 968 959 3231 77 511 959 1684 68 673 962 3429 23 968 962 2368 85 75 1119 1415 37 968 1119 2891 57 38 1119 1208 40 716 1143 959 2 968 1143 3383 98 980 1143 1405 16 163 1415 3995 43 968 1415 4995 97 968 1415 4472 97 184 2042 1119 97 968 2042 4793 21 968 2042 1545 33 33 2042 625 95 873 3235 962 100 968 3235 4404 31 524 3429 4557 29 968 3429 2178 50 534 3429 557 42 69 3709 3822 35 968 3709 3257 49 412 3822 2042 19 968 3822 1842 4 577 3822 3432 62 394 3995 1143 71 968 3995 4684 67 131 3995 1438 98 282 349 3192 93 246 349 36 41 516 2221 2887 39 246 2221 4735 76 89 2221 407 89 118 2703 4626 91 246 2703 4098 32 976 2703 50 2 153 2887 3685 58 246 2887 1954 53 46 2887 528 20 419 3142 2221 57 246 3142 4629 29 246 3142 3790 57 33 3142 3968 11 510 3192 3142 54 246 3192 3793 94 589 3685 2703 7 246 3685 3728 44 477 350 1737 62 250 350 2076 56 883 350 966 24 26 1035 2557 26 250 1035 4554 25 250 1035 1108 2 883 1737 1964 85 250 1737 779 91 833 1737 1841 41 308 1964 3543 62 250 1964 1374 60 311 1964 3415 2 629 2247 2676 42 250 2247 1325 8 144 2247 3232 5 720 2541 3673 78 250 2541 4151 6 181 2557 4963 82 250 2557 4267 36 543 2676 3101 10 250 2676 15 2 160 2676 518 33 386 3101 1035 10 250 3101 512 39 329 3273 2247 78 250 3273 493 5 180 3543 2541 98 250 3543 2081 57 405 3673 3273 29 250 3673 4491 49 643 3673 944 93 15 351 582 76 144 351 4378 70 566 351 4262 3 876 582 2435 31 144 582 1907 81 199 635 1356 87 144 635 3247 60 524 635 1975 61 361 651 3173 25 144 651 3837 63 86 651 4015 99 879 1356 3480 41 144 1356 486 33 72 1356 4674 61 759 2435 651 2 144 2435 369 7 48 2435 3642 15 419 2698 635 45 144 2698 4788 70 144 2698 2327 90 531 2698 101 22 433 3173 2698 30 144 3173 3110 12 267 3173 4298 32 556 3480 4805 10 144 3480 367 31 984 352 2223 94 189 352 2006 27 841 709 4600 33 189 709 2171 47 803 1976 4088 38 189 1976 1574 86 507 1976 1270 92 74 2223 4199 14 189 2223 981 85 768 2223 1609 95 391 2289 4840 27 189 2289 709 35 189 2289 1902 25 711 2289 2273 30 483 4088 2289 65 189 4088 1374 99 919 4088 4691 99 632 4199 1976 92 189 4199 3882 59 591 4199 4969 72 520 353 835 27 713 353 3652 25 882 835 4362 48 713 835 4127 96 355 898 1343 79 713 898 4542 56 685 898 4661 27 236 1343 4401 2 713 1343 2007 2 236 4362 898 6 713 4362 4069 94 174 4401 4601 22 713 4401 4637 11 713 4401 2825 34 995 354 1646 96 317 354 789 37 471 354 2060 48 577 792 1526 67 317 792 3412 31 164 792 1117 84 929 850 792 95 317 850 1153 39 210 1526 4513 9 317 1526 1330 75 146 1526 495 47 591 1646 2600 58 317 1646 255 68 1000 1646 2947 86 399 2600 2866 74 317 2600 1630 27 244 2600 2420 54 978 2866 3898 90 317 2866 4397 13 19 2866 4966 88 133 3898 850 17 317 3898 4570 10 317 3898 3033 50 386 3898 2722 58 893 355 1306 24 439 355 2183 51 909 355 4811 95 813 531 2874 21 439 531 979 65 661 1306 3557 63 439 1306 4318 58 576 1306 535 93 487 1355 2618 92 439 1355 4272 20 479 1355 3155 93 774 2618 4416 57 439 2618 4807 98 439 2618 3151 51 650 2874 1355 75 439 2874 4171 99 810 2874 2002 99 899 3557 531 97 439 3557 4761 66 227 3557 4109 4 285 4416 4542 6 439 4416 3569 64 599 4416 4118 22 94 356 936 9 404 356 1174 64 848 356 358 99 503 936 1850 20 404 936 4609 55 512 936 234 88 914 1390 3713 96 404 1390 3664 4 208 1390 1957 75 354 1850 3042 33 404 1850 1174 77 851 3042 1390 53 404 3042 4214 82 250 3042 590 14 843 3713 3800 73 404 3713 4824 66 404 3713 213 25 740 3800 4848 83 404 3800 2918 42 283 3800 3456 69 761 357 1655 97 937 357 1902 1 81 357 93 86 451 737 836 7 937 737 3022 23 188 836 1630 63 937 836 2642 78 179 836 147 79 291 1281 3754 11 937 1281 4867 27 51 1281 638 79 456 1339 4517 58 937 1339 3140 80 960 1339 1232 19 876 1630 4061 80 937 1630 4978 56 992 1655 1281 69 937 1655 4634 96 937 1655 431 3 729 1802 737 99 937 1802 2842 1 440 3754 1802 51 937 3754 3111 28 89 3754 1084 68 261 4061 1339 25 937 4061 3273 98 639 4061 2800 100 856 358 1417 35 218 358 3667 46 531 358 4882 28 242 1417 4210 84 218 1417 4629 84 218 1417 2373 83 493 3394 3979 55 218 3394 445 87 258 3394 858 100 218 3632 3866 89 218 3632 3505 57 936 3632 3229 79 246 3866 4053 8 218 3866 733 44 916 3866 202 85 209 3979 4597 21 218 3979 903 56 765 3979 98 56 284 4053 3394 17 218 4053 3418 71 632 4053 4065 45 682 4210 4241 15 218 4210 1320 80 792 4210 1040 99 623 4241 3632 70 218 4241 2023 61 280 4241 1910 22 629 359 2797 95 803 359 4335 44 982 359 3080 39 943 1748 4951 4 803 1748 1484 70 437 2041 4494 80 803 2041 4194 12 856 2797 3969 16 803 2797 1085 77 51 2797 1411 60 464 3483 4898 86 803 3483 1748 85 803 3483 163 26 741 3483 3024 49 923 3969 2041 25 803 3969 4263 52 616 4494 3483 14 803 4494 4326 5 348 4494 784 43 767 360 2658 72 333 360 1900 68 122 1103 1594 46 333 1103 3560 52 338 1594 4700 10 333 1594 3387 75 671 1594 4390 98 607 2266 4913 23 333 2266 1103 47 333 2266 761 65 210 2266 3704 58 45 2658 3336 72 333 2658 2459 87 762 3183 2266 76 333 3183 1421 44 18 3183 4819 68 190 3336 3183 26 333 3336 1437 37 351 3336 1855 19 841 361 1231 38 215 361 1161 5 403 361 914 77 715 534 3790 59 215 534 1441 80 982 534 2904 14 450 1231 2212 65 215 1231 4795 67 215 1231 3495 71 907 1231 2986 28 637 1523 534 23 215 1523 2883 25 477 1523 2072 55 582 1605 1523 18 215 1605 2349 27 668 1605 4272 63 150 2212 3571 34 215 2212 673 64 334 3571 1605 40 215 3571 3523 98 947 3790 4855 37 215 3790 4355 14 168 362 4209 13 217 362 2727 71 289 362 4696 41 759 1096 3340 48 217 1096 217 71 959 1096 1382 41 618 1531 4815 58 217 1531 2506 70 298 1531 1856 83 878 1758 1096 79 217 1758 1076 68 36 3340 4221 86 217 3340 2707 45 557 3340 2677 37 947 4209 1758 95 217 4209 2264 43 139 4209 4419 50 357 4221 1531 84 217 4221 4783 49 217 4221 2417 37 5 363 1448 51 757 363 4112 33 623 363 3321 45 463 538 3929 43 757 538 2771 89 878 538 1054 8 50 705 3295 26 757 705 4065 22 176 1448 2408 73 757 1448 214 84 92 1448 2588 24 76 2028 2422 50 757 2028 4978 13 76 2408 3459 2 757 2408 1788 68 923 2408 523 83 865 2422 4882 59 757 2422 2458 47 193 2864 538 3 757 2864 2557 12 713 3295 2864 96 757 3295 1448 22 113 3295 2742 59 596 3459 705 72 757 3459 4961 73 757 3459 859 52 961 3459 4099 91 703 3929 2028 73 757 3929 911 72 806 3929 2667 13 410 364 644 39 437 364 2131 9 511 571 965 64 437 571 3548 38 123 571 1116 46 876 644 1150 100 437 644 1649 9 968 644 4205 6 131 700 4548 14 437 700 1122 68 527 965 4535 95 437 965 1070 5 437 965 4662 37 437 965 2299 44 309 1070 3395 49 437 1070 908 76 863 1070 3670 2 892 1150 1882 21 437 1150 1053 90 551 1150 2291 26 811 1423 3104 39 437 1423 4854 94 54 1423 3225 51 338 1882 1423 96 437 1882 2076 54 585 2854 571 2 437 2854 4848 70 400 2854 362 47 84 2991 4028 84 437 2991 978 13 244 3104 2854 58 437 3104 2588 91 113 3104 2082 38 520 3353 700 26 437 3353 312 92 730 3395 2991 92 437 3395 3342 67 329 4028 3353 22 437 4028 4421 61 147 365 3103 98 888 365 3950 98 890 365 1103 7 508 1481 1495 46 888 1481 1367 76 915 1495 3444 86 888 1495 4025 68 953 3103 3390 82 888 3103 2339 49 21 3390 4324 37 888 3390 4454 45 298 3390 4584 80 487 3444 4886 53 888 3444 432 1 30 3444 3725 6 55 3869 1481 95 888 3869 4965 49 888 3869 1677 10 874 4324 3869 29 888 4324 3583 41 943 4324 4265 47 90 366 2997 75 318 366 1927 56 281 686 1651 51 318 686 4713 47 135 1556 4746 63 318 1556 3180 51 318 1556 299 17 457 1556 2877 30 828 1651 4920 8 318 1651 4019 17 187 1651 4865 61 946 2481 1556 22 318 2481 2225 71 410 2481 4087 1 85 2997 2481 65 318 2997 4506 16 328 3120 4171 55 318 3120 4564 37 383 3120 590 30 97 3180 3871 91 318 3180 2875 55 984 3871 3120 7 318 3871 2367 18 907 3871 2532 80 645 4171 686 75 318 4171 3886 55 866 4171 1118 64 281 367 1826 39 104 367 3744 23 483 776 3773 87 104 776 2619 65 685 776 4924 42 643 1172 2251 28 104 1172 2428 87 980 1172 1267 31 982 1387 776 39 104 1387 1421 34 848 1387 1968 77 464 1826 2018 9 104 1826 2752 57 197 2018 1172 78 104 2018 4940 6 947 2251 3014 80 104 2251 3482 35 265 2269 2456 96 104 2269 1544 47 328 2456 2953 29 104 2456 4721 61 104 2456 2198 24 488 2953 4861 80 104 2953 4838 29 104 2953 1373 26 677 2953 4629 85 330 3014 1387 86 104 3014 1078 76 245 3126 2269 58 104 3126 327 61 788 3126 815 58 920 3773 3126 30 104 3773 4657 2 370 3773 3786 62 996 368 1406 9 358 368 3565 66 772 368 4802 42 875 1406 1586 18 358 1406 3908 49 466 1406 1413 98 463 1586 2565 64 358 1586 482 19 240 1586 498 70 99 1985 4729 68 358 1985 445 46 580 2338 4837 3 358 2338 2582 33 358 2338 3834 73 440 2565 2338 74 358 2565 133 96 590 2582 3396 58 358 2582 2325 82 705 2582 4556 25 722 3396 1985 88 358 3396 4969 82 184 3396 1466 45 768 369 3470 22 451 369 198 40 175 594 4064 99 451 594 1830 10 335 1120 2377 14 451 1120 4833 51 632 1151 2496 83 451 1151 2864 67 385 1151 1037 72 764 1158 1151 29 451 1158 2829 95 653 1158 2619 55 133 1649 2718 73 451 1649 4672 88 451 1649 2267 59 944 2256 1158 62 451 2256 89 27 837 2256 3364 42 853 2377 1649 100 451 2377 3979 36 516 2377 268 78 111 2496 594 66 451 2496 2470 97 879 2496 2086 35 749 2718 2256 38 451 2718 2506 84 740 3222 4797 6 451 3222 1123 10 78 3222 2853 94 233 3470 4940 30 451 3470 1120 77 451 3470 1551 14 70 3470 512 86 703 4064 3222 93 451 4064 3363 66 404 370 840 14 451 370 852 52 705 840 3163 14 451 840 4131 79 369 991 4558 6 451 991 4982 57 451 991 2052 35 416 1783 991 46 451 1783 2864 17 212 2722 1783 81 451 2722 2794 38 154 2722 4072 5 625 3163 3793 95 451 3163 2466 70 314 3793 4379 32 451 3793 1937 84 88 4379 2722 30 451 4379 3459 63 842 371 3457 93 135 371 4349 35 867 371 1497 82 755 1058 2043 76 135 1058 4446 24 720 1058 2513 3 694 1230 1058 69 135 1230 3774 59 24 1230 912 17 496 1420 1465 21 135 1420 4132 41 844 1465 4436 95 135 1465 1444 38 142 2043 2302 23 135 2043 2736 5 348 2043 2263 5 484 2302 4581 41 135 2302 3351 28 403 3457 1420 48 135 3457 4144 3 724 3457 960 47 692 4436 1230 97 135 4436 4851 93 135 4436 42 41 474 4436 3792 15 605 372 3680 2 753 372 1770 68 642 372 580 22 486 778 2154 85 753 778 4587 54 904 2154 2675 92 753 2154 4600 7 906 2675 4380 75 753 2675 4977 29 512 2730 4981 32 753 2730 1120 1 739 3680 778 73 753 3680 4694 7 753 3680 2199 26 813 3972 2730 63 753 3972 3167 15 550 4380 3972 92 753 4380 711 39 934 4380 3980 93 803 373 3691 62 273 373 2713 16 458 373 1781 78 658 1050 4981 75 273 1050 2416 71 273 1050 4132 23 485 1050 503 93 862 1382 4911 30 273 1382 3533 6 312 1382 4485 13 774 1652 3787 90 273 1652 496 31 189 1652 2648 55 470 2013 3595 74 273 2013 4801 32 102 2416 1382 42 273 2416 1183 29 878 2416 333 95 329 3595 4125 76 273 3595 2259 54 631 3595 2764 80 775 3691 4014 61 273 3691 3660 41 346 3787 4349 88 273 3787 603 68 732 3787 4347 94 164 4014 2013 43 273 4014 4877 24 207 4125 1652 35 273 4125 4778 10 426 4349 1050 4 273 4349 394 16 55 374 1782 16 22 374 1534 99 734 374 2856 24 967 532 676 38 22 532 2702 78 957 676 4071 73 22 676 284 40 321 1782 3227 22 22 1782 1049 97 538 1904 4741 47 22 1904 532 63 22 1904 4079 43 604 2137 1904 9 22 2137 3482 36 212 2774 2137 17 22 2774 1186 50 72 2774 84 64 521 3227 3392 8 22 3227 3503 20 685 3227 242 48 593 3392 3708 84 22 3392 4490 28 831 3392 1008 95 344 3708 2774 21 22 3708 4830 39 813 3708 1607 65 468 4071 4987 97 22 4071 232 68 986 4071 842 78 510 375 510 90 284 375 3764 16 245 375 1704 61 616 510 3077 75 284 510 3005 44 606 510 1190 19 953 602 4077 52 284 602 3994 70 719 602 2434 59 451 927 4054 24 284 927 1722 38 849 927 3202 93 730 2060 2507 26 284 2060 4268 75 493 2060 754 37 324 2183 602 68 284 2183 1477 56 656 2183 851 76 298 2507 4733 92 284 2507 4529 30 284 2507 3338 27 946 2507 1004 55 184 3077 4310 98 284 3077 4731 6 175 4054 2060 63 284 4054 3894 90 271 4054 645 18 363 4077 927 53 284 4077 935 71 670 4077 2811 54 694 4310 2183 15 284 4310 3321 98 390 4310 619 45 829 376 2150 71 15 376 4556 24 657 376 4303 100 416 798 1004 73 15 798 640 30 195 824 1340 24 15 824 2399 81 663 1004 2913 62 15 1004 3267 2 303 1004 4201 17 122 1243 824 52 15 1243 255 4 9 1340 798 86 15 1340 760 97 401 1922 2572 86 15 1922 4962 22 15 1922 418 71 247 2150 1243 71 15 2150 3295 11 370 2572 4710 40 15 2572 2710 29 283 2572 863 100 923 2913 1922 38 15 2913 4582 74 833 2913 1635 100 245 377 4320 74 1020 377 4370 81 803 796 4169 9 1020 796 1283 7 797 796 3285 51 552 1065 3385 73 1020 1065 4467 80 927 1443 4983 11 1020 1443 3640 69 22 3385 796 71 1020 3385 3081 59 350 3385 272 25 451 4169 1443 5 1020 4169 2497 52 155 4169 3519 1 717 4320 1065 73 1020 4320 4544 33 1020 4320 574 70 242 4320 1573 41 81 378 1901 43 326 378 379 73 844 378 1798 5 597 924 1724 40 326 924 1445 99 159 924 2550 54 979 1724 3348 57 326 1724 3203 86 263 1724 1593 86 523 1901 3935 47 326 1901 3508 62 703 2010 2460 39 326 2010 4835 59 326 2010 4282 43 272 2460 3354 48 326 2460 3093 37 657 3348 4250 83 326 3348 819 43 875 3348 1573 67 99 3354 924 1 326 3354 1690 37 919 3354 4629 87 918 3935 2010 74 326 3935 3751 87 903 4250 4803 28 326 4250 2248 93 708 379 569 46 436 379 4819 47 463 379 807 67 459 569 2332 10 436 569 1716 54 219 1518 2886 52 436 1518 1011 60 125 1518 3261 1 54 1684 4236 88 436 1684 4964 36 70 2332 4373 9 436 2332 4675 37 436 2332 2709 39 668 2886 3704 17 436 2886 4248 20 305 2886 2146 50 360 3601 1518 33 436 3601 164 49 256 3601 4700 4 706 3704 4653 58 436 3704 2995 94 952 3704 4374 26 368 3714 3601 57 436 3714 2889 50 25 4236 3714 48 436 4236 2590 84 349 4373 1684 7 436 4373 32 57 435 4373 1333 76 814 380 2563 41 360 380 2761 12 159 677 3196 6 360 677 1448 14 906 1192 4120 26 360 1192 730 97 390 1577 677 83 360 1577 29 50 517 1577 4902 50 183 2563 1577 28 360 2563 3743 51 205 2563 3182 19 824 3196 1192 100 360 3196 4693 20 360 3196 4500 75 649 3196 389 86 557 4120 4564 33 360 4120 3762 83 638 4120 3526 20 516 381 4325 82 389 381 3303 1 726 2100 3923 15 389 2100 3153 77 210 2100 959 75 718 3073 2100 61 389 3073 4771 85 389 3073 1952 25 908 3536 4167 12 389 3536 1210 43 689 3603 3073 52 389 3603 330 46 128 3923 4609 83 389 3923 4181 92 5 4167 3603 72 389 4167 1300 80 989 4325 3536 76 389 4325 873 64 22 382 2344 42 949 382 1912 9 996 382 994 88 659 889 4544 2 949 889 4643 94 949 889 3987 39 907 909 2590 34 949 909 4455 23 760 1658 909 13 949 1658 1123 99 702 1658 3303 31 39 1680 1719 12 949 1680 562 55 605 1680 1692 54 181 1719 1778 89 949 1719 2586 39 629 1778 889 4 949 1778 632 6 406 2344 1658 21 949 2344 357 43 557 2344 719 13 451 2590 1680 62 949 2590 326 60 366 2590 3482 55 792 383 2979 74 311 383 625 71 780 383 968 98 679 1005 3137 40 311 1005 903 35 406 1255 4582 62 311 1255 1421 57 450 2352 3939 44 311 2352 2844 98 153 2483 4631 84 311 2483 2352 88 311 2483 584 27 242 2979 3032 79 311 2979 5000 1 649 2979 3402 49 609 3032 3215 10 311 3032 1105 78 387 3032 2354 99 989 3137 1255 19 311 3137 2328 96 917 3137 1037 92 964 3215 2483 39 311 3215 2723 38 435 3939 1005 17 311 3939 3280 45 30 3939 2025 72 89 384 3431 21 990 384 3698 23 489 384 4140 46 248 1278 3832 62 990 1278 1690 82 782 1422 4323 19 990 1422 295 78 266 1422 4784 4 556 3138 4830 52 990 3138 4968 30 990 3138 1076 34 499 3138 603 55 984 3147 3546 98 990 3147 3929 43 441 3147 4561 82 17 3431 3147 57 990 3431 2469 32 430 3431 2935 37 28 3546 3728 91 990 3546 2669 76 143 3728 1278 87 990 3728 4164 1 29 3832 1422 84 990 3832 2405 90 950 3832 1764 97 491 4323 3138 87 990 4323 2087 78 981 385 1279 41 75 385 869 38 962 1279 4333 93 75 1279 1742 10 258 2779 3290 6 75 2779 2393 77 90 2779 4930 98 427 3290 3917 52 75 3290 3154 71 582 3461 4497 96 75 3461 1103 23 462 3461 2757 57 487 3917 4451 26 75 3917 3797 88 584 3917 4912 47 69 4333 2779 14 75 4333 1628 17 850 4451 3461 54 75 4451 4780 71 75 4451 2610 67 223 4451 4718 84 469 4497 4610 5 75 4497 712 26 972 4497 3213 64 901 386 649 73 563 386 734 9 58 649 1711 35 563 649 561 46 39 1003 1492 73 563 1003 2423 68 824 1152 2578 12 563 1152 4780 98 563 1152 3704 71 976 1152 2249 74 261 1492 2526 38 563 1492 207 67 573 1492 3608 33 46 1711 1971 84 563 1711 796 72 404 1971 2959 59 563 1971 1230 17 351 2526 1152 5 563 2526 4873 74 629 2578 4556 46 563 2578 373 80 83 2578 75 66 408 2959 3178 40 563 2959 2915 65 878 3164 1003 100 563 3164 4282 17 857 3178 3164 82 563 3178 2449 88 546 387 2850 33 481 387 264 48 31 711 4510 57 481 711 2174 31 822 711 2141 39 462 1554 711 5 481 1554 898 22 394 1554 2711 91 31 1583 3879 41 481 1583 2385 90 453 2850 4615 62 481 2850 4130 11 481 2850 1588 29 330 2850 2201 45 290 3879 1554 22 481 3879 1228 28 766 3879 1463 82 360 4130 1583 7 481 4130 3235 43 976 388 4056 25 546 388 3304 61 512 807 1688 22 546 807 188 25 897 1235 4443 78 546 1235 731 8 779 1235 1875 3 666 1688 4789 51 546 1688 2391 63 839 1914 1235 63 546 1914 3907 84 31 2039 807 100 546 2039 4454 98 784 2521 1914 40 546 2521 2488 72 389 2521 3175 98 627 4056 4207 12 546 4056 1926 40 323 4207 2521 47 546 4207 3001 62 547 4225 2039 34 546 4225 4527 18 546 4225 3417 25 515 4443 4225 9 546 4443 4150 45 429 4443 3293 33 330 389 885 19 455 389 4326 84 914 885 1357 37 455 885 3657 57 493 1203 4992 57 455 1203 2417 75 220 1203 515 65 655 1357 4603 99 455 1357 4460 93 455 1357 892 53 724 1357 244 74 12 2158 3509 43 455 2158 532 88 947 2158 799 17 194 2853 3882 6 455 2853 3672 29 167 2853 2665 24 989 3509 4067 50 455 3509 1470 46 71 3509 1468 44 44 3882 4292 27 455 3882 3375 47 67 4067 1203 68 455 4067 2910 50 908 4292 2158 75 455 4292 4013 93 74 4460 4462 91 455 4460 2996 9 752 4462 2853 64 455 4462 3824 84 711 4462 1708 39 859 390 4105 59 356 390 2400 22 402 390 3138 5 780 816 2740 100 356 816 2979 4 525 1048 1677 67 356 1048 1261 81 335 1048 2265 17 831 1549 1048 26 356 1549 3993 73 12 1677 2380 84 356 1677 1085 97 58 1677 4156 32 908 2380 3441 74 356 2380 4315 63 193 2740 3730 25 356 2740 4961 60 742 2740 1262 27 726 3441 816 64 356 3441 4713 64 567 3730 4700 89 356 3730 2756 39 585 4105 1549 96 356 4105 4907 100 356 4105 1240 1 591 391 1376 38 496 391 69 38 533 964 4285 78 496 964 2500 5 526 964 2752 41 553 1376 4755 28 496 1376 2729 67 496 1376 535 58 183 1376 988 93 871 1916 2640 76 496 1916 1559 54 588 1916 3804 79 918 2151 4937 59 496 2151 4931 28 872 2500 1916 33 496 2500 2561 18 296 2500 3110 93 896 2640 964 64 496 2640 430 53 556 2640 226 31 800 2729 2500 38 496 2729 4623 55 400 4285 2151 48 496 4285 4598 87 881 4285 802 82 730 392 4268 57 525 392 480 35 16 623 797 23 525 623 1721 67 47 623 375 24 951 797 4261 71 525 797 4128 37 983 1020 4725 1 525 1020 2813 88 893 1020 2555 92 242 1052 623 5 525 1052 2768 94 752 1052 5 16 606 2727 3364 16 525 2727 4855 51 525 2727 4697 10 85 2727 828 35 261 3364 3857 91 525 3364 1071 63 18 3364 2853 73 612 3857 1020 47 525 3857 3695 56 200 4228 1052 100 525 4228 653 70 1 4261 2727 20 525 4261 4466 45 864 4268 4228 38 525 4268 2592 22 337 393 2504 30 682 393 4283 32 652 1280 4864 1 682 1280 2165 85 682 1280 308 10 506 1280 4202 48 230 1289 1280 95 682 1289 4837 75 249 1289 4142 37 796 1452 3439 64 682 1452 3231 91 471 1452 1521 36 617 2165 4191 91 682 2165 31 57 483 2386 3343 29 682 2386 1260 17 808 2504 2386 97 682 2504 1206 50 176 3343 1289 57 682 3343 4919 34 32 3343 4552 61 135 3439 4843 61 682 3439 2604 39 393 3439 3499 23 887 4191 1452 19 682 4191 1979 16 173 394 2331 14 215 394 2618 5 946 394 619 31 819 527 4558 2 215 527 4908 52 215 527 2845 76 235 953 3151 27 215 953 1482 72 949 1220 953 74 215 1220 3665 12 241 1220 2389 8 60 2331 1220 3 215 2331 769 53 239 2331 986 16 404 2441 2616 30 215 2441 315 1 562 2616 3271 65 215 2616 4736 20 468 2616 1441 100 720 3151 2441 42 215 3151 3801 74 622 3151 1241 34 73 3271 527 72 215 3271 4457 8 577 3271 3227 63 681 395 2336 32 632 395 598 62 456 395 2358 15 857 832 1837 35 632 832 4076 38 912 832 3239 16 27 1300 1792 43 632 1300 1846 40 180 1580 3771 69 632 1580 926 36 996 1580 2806 47 458 1792 3849 6 632 1792 1267 65 245 1837 1300 3 632 1837 4352 85 362 1837 1414 14 423 2336 1580 63 632 2336 3085 35 901 3481 832 31 632 3481 189 91 209 3583 3481 94 632 3583 4634 69 771 3583 2969 52 943 3771 3583 98 632 3771 976 90 845 3849 4911 21 632 3849 4697 48 632 3849 1939 34 517 396 1360 75 339 396 1692 87 499 973 4760 33 339 973 379 89 566 1360 3874 16 339 1360 2341 100 405 1360 3201 63 992 1853 2193 38 339 1853 4771 93 550 1853 4865 76 133 2193 4159 94 339 2193 1126 57 32 2193 1054 27 55 2253 4281 91 339 2253 4729 77 155 3874 2253 43 339 3874 4901 58 339 3874 4846 92 790 3874 3486 34 108 4159 973 33 339 4159 4106 48 428 4159 3081 77 265 4281 1853 46 339 4281 1232 36 202 4281 4690 46 919 397 1323 66 91 397 3119 77 45 397 3057 73 161 1323 3798 46 91 1323 4112 60 897 1585 2910 86 91 1585 341 60 539 1585 1105 89 469 2553 3547 47 91 2553 3022 90 963 2829 3468 29 91 2829 4765 78 91 2829 2982 54 583 2910 2829 93 91 2910 1201 66 123 2910 1817 18 243 3468 2553 9 91 3468 1383 2 67 3547 4784 21 91 3547 4507 99 348 3547 449 89 489 3798 1585 25 91 3798 1916 51 739 398 755 55 326 398 3184 88 482 398 4595 78 249 528 3552 27 326 528 386 96 199 755 528 78 326 755 4644 33 326 755 2791 19 354 755 3028 68 348 1379 4007 37 326 1379 1363 99 488 3552 1379 92 326 3552 1088 84 140 4007 4816 12 326 4007 548 60 292 4007 128 82 698 399 2611 38 8 399 832 89 188 399 1731 54 191 1247 2058 41 8 1247 1245 31 602 1247 4282 100 368 1359 1751 46 8 1359 4509 18 8 1359 710 48 840 1751 3400 79 8 1751 348 41 83 1751 4477 54 578 2058 4987 26 8 2058 616 78 879 2058 4516 19 583 2611 1359 46 8 2611 2427 37 56 2611 2678 63 460 3400 1247 28 8 3400 1961 33 39 3400 3807 17 296 400 922 44 413 400 2971 29 483 753 3176 37 413 753 4849 87 341 753 1831 12 52 922 1769 53 413 922 3604 51 471 1769 4338 71 413 1769 4946 42 413 1769 4436 64 721 3176 3696 100 413 3176 1857 35 299 3176 4607 77 123 3324 4761 95 413 3324 1012 30 975 3696 3324 40 413 3696 2864 42 734 3696 1379 65 19 4338 753 47 413 4338 1301 51 174 401 1938 92 448 401 3173 94 849 401 4047 18 566 1869 4649 79 448 1869 1655 96 189 1869 189 32 542 1938 1963 5 448 1938 3299 51 577 1938 3018 37 568 1963 3920 62 448 1963 2496 81 61 2142 4976 11 448 2142 3563 15 448 2142 4255 25 668 2142 3871 77 802 3563 3715 24 448 3563 4554 60 976 3715 1869 56 448 3715 2918 100 950 3920 2142 51 448 3920 1467 86 546 402 3171 38 597 402 2192 84 882 402 3855 69 90 2125 2858 79 597 2125 3193 32 516 2858 4383 46 597 2858 918 40 444 2858 2765 42 495 3171 3868 27 597 3171 4145 78 521 3868 2125 47 597 3868 4675 90 597 3868 4806 32 930 3868 4054 76 777 4383 4956 53 597 4383 4792 41 223 403 2900 42 854 403 546 51 229 403 1431 11 459 750 4545 55 854 750 4841 52 854 750 1007 81 958 1271 4001 97 854 1271 944 99 773 1623 3916 15 854 1623 936 63 32 1623 1364 57 487 1949 1623 8 854 1949 2706 64 431 2627 1949 18 854 2627 3645 34 483 2900 1271 96 854 2900 1270 68 958 3916 750 97 854 3916 3650 93 102 4001 2627 90 854 4001 2494 17 683 404 1962 35 227 404 2090 4 729 404 3234 84 559 1264 4395 71 227 1264 782 68 411 1264 1237 46 120 1962 2451 12 227 1962 4824 59 262 1962 1837 32 323 2076 4480 78 227 2076 3800 1 10 2076 2684 40 464 2451 2562 86 227 2451 4880 84 451 2562 1264 75 227 2562 3105 48 654 2562 1968 43 223 3065 4630 23 227 3065 194 84 423 3065 2165 59 539 3204 2076 65 227 3204 4412 17 594 3204 2492 100 16 4395 3204 65 227 4395 2480 89 581 4480 3065 37 227 4480 4972 16 227 4480 3924 95 606 4480 4499 13 616 405 2987 5 337 405 201 21 391 867 2113 51 337 867 1483 99 141 867 4932 48 330 2113 2707 3 337 2113 4403 72 5 2707 4965 11 337 2707 3591 89 281 2707 2775 71 308 2926 3195 71 337 2926 4510 57 51 2926 521 60 908 2987 2926 13 337 2987 1956 14 528 2987 1534 9 865 3195 867 13 337 3195 4916 3 337 3195 3030 15 319 406 1023 94 326 406 1736 28 13 1023 3028 77 326 1023 4696 39 326 1023 1908 56 200 1023 1821 54 766 2335 3896 5 326 2335 2740 54 946 2335 1191 30 272 3028 2335 59 326 3028 1583 84 22 3028 4744 34 528 3896 4553 84 326 3896 119 83 532 407 668 100 402 407 768 52 659 407 4505 84 935 668 2263 78 402 668 1020 42 607 945 1895 38 402 945 4705 51 172 1895 3087 13 402 1895 2498 38 857 1895 3231 26 68 2263 945 66 402 2263 2304 51 790 3087 3720 72 402 3087 4919 85 402 3087 289 4 891 3087 282 98 840 3720 4834 50 402 3720 2864 58 827 3720 3010 68 351 408 821 40 212 408 393 17 204 408 1466 89 501 740 4584 18 212 740 1541 28 222 740 4921 73 516 821 3660 59 212 821 2543 48 191 821 2493 10 149 1099 2239 23 212 1099 2143 80 459 1099 4072 16 677 2239 740 27 212 2239 2483 94 737 3530 4737 11 212 3530 1099 72 212 3530 4145 67 392 3660 3530 97 212 3660 3123 30 29 409 2839 69 265 409 1422 24 255 409 1368 40 874 536 4797 73 265 536 2819 64 547 728 3158 27 265 728 1432 62 892 728 1485 51 69 979 536 60 265 979 1477 58 148 979 1297 30 199 1055 2704 23 265 1055 1941 90 791 1055 618 5 191 2704 728 93 265 2704 1205 24 396 2839 1055 77 265 2839 4725 78 265 2839 13 83 837 2839 4698 18 495 3158 979 53 265 3158 4392 54 237 3158 2442 7 437 410 3197 54 415 410 2092 88 868 533 4811 77 415 533 805 54 799 533 992 57 221 849 2308 22 415 849 1054 55 335 1313 1456 50 415 1313 4687 56 415 1313 3569 25 298 1313 2378 1 176 1368 1313 51 415 1368 3322 21 48 1456 533 35 415 1456 2696 37 690 1456 519 89 424 2308 3177 93 415 2308 4977 81 708 2308 771 41 36 3177 1368 38 415 3177 4992 9 922 3177 349 75 59 3197 849 34 415 3197 2540 26 390 411 2250 34 239 411 2855 23 732 411 16 52 909 1232 1924 17 239 1232 2643 23 867 1429 1232 38 239 1429 4253 27 297 1429 4628 85 808 1924 2200 17 239 1924 1451 51 688 2168 1429 81 239 2168 635 93 648 2168 2206 27 342 2200 4838 93 239 2200 1889 34 341 2200 1169 93 85 2250 4810 17 239 2250 2749 36 239 2250 4392 94 422 2749 2168 45 239 2749 4741 95 377 2749 4404 75 620 412 1292 60 659 412 1801 77 143 412 2673 98 976 575 2705 38 659 575 2685 52 685 575 4980 89 662 907 4437 55 659 907 3897 34 380 907 1941 66 342 933 1380 33 659 933 3075 70 725 1217 933 50 659 1217 740 14 859 1292 907 69 659 1292 2586 57 101 1364 1217 68 659 1364 2406 78 763 1380 4895 19 659 1380 1798 30 469 1380 2935 19 430 2705 1364 62 659 2705 110 96 55 2705 2533 2 68 4437 575 6 659 4437 4737 24 659 4437 4501 10 922 4437 1983 45 540 413 3347 82 603 413 206 62 508 876 4640 89 603 876 4537 17 603 876 2106 61 550 876 2609 36 69 1635 876 17 603 1635 2738 81 181 1635 2929 76 703 3287 1635 24 603 3287 1694 51 220 3347 3739 15 603 3347 2744 32 508 3386 3287 75 603 3386 1612 96 869 3739 3386 45 603 3739 1869 83 680 3739 1050 32 660 414 3321 78 827 414 412 79 737 723 2006 58 827 723 1890 74 876 723 50 63 217 2006 3941 59 827 2006 209 75 429 2006 533 46 311 2505 4187 91 827 2505 2601 2 671 2505 2275 4 436 2649 723 68 827 2649 2547 74 786 3321 2505 59 827 3321 4869 58 827 3321 2533 65 58 3321 226 14 325 3941 4902 35 827 3941 1221 33 387 3941 656 43 694 4187 2649 8 827 4187 3910 88 688 415 4447 15 28 415 4347 66 705 415 4077 80 532 1363 4690 75 28 1363 4855 36 98 2492 1363 49 28 2492 4589 58 800 3210 3650 11 28 3210 2217 55 88 3210 2897 26 85 3333 2492 3 28 3333 2840 63 882 3650 3333 77 28 3650 4522 73 580 4447 3210 82 28 4447 4697 45 28 4447 1168 48 716 416 1575 33 309 416 3415 100 458 416 4499 89 882 693 4344 59 309 693 3800 79 904 1059 693 4 309 1059 2902 29 988 1575 2788 30 309 1575 1870 76 683 1575 63 50 344 1700 4856 90 309 1700 389 26 11 2788 4295 46 309 2788 706 56 42 2788 1608 80 868 4295 4828 87 309 4295 1059 52 309 4295 1714 38 63 4344 1700 64 309 4344 1288 71 268 417 828 33 384 417 1264 10 421 417 527 55 390 828 4392 4 384 828 3839 14 563 828 1551 63 982 1664 1873 12 384 1664 4746 68 593 1664 2159 9 203 1873 3094 80 384 1873 4611 90 384 1873 509 58 358 1873 2880 39 371 2787 1664 76 384 2787 4427 86 77 2904 4048 99 384 2904 4076 10 666 2904 4995 1 898 3094 2904 25 384 3094 3446 75 725 3772 2787 18 384 3772 1142 69 504 3772 312 30 919 4048 4906 68 384 4048 3177 20 877 4392 3772 94 384 4392 1233 46 485 418 2087 20 115 418 1212 64 356 618 1304 22 115 618 2146 98 633 642 4757 49 115 642 331 6 262 1200 618 42 115 1200 1111 58 764 1211 1900 10 115 1211 3669 60 669 1304 1211 19 115 1304 1377 17 935 1304 1508 93 57 1900 642 60 115 1900 2940 40 259 2087 2968 30 115 2087 4182 75 242 2968 1200 55 115 2968 4719 7 115 2968 3512 58 894 2968 2553 67 636 419 4050 58 386 419 4171 18 29 1194 2516 6 386 1194 1033 20 649 1263 1194 38 386 1263 1564 31 844 1263 1745 82 444 1324 2975 26 386 1324 1628 28 228 1324 3326 75 692 2516 3119 23 386 2516 1529 12 523 2516 3231 3 908 2951 4994 92 386 2951 1263 29 386 2951 313 65 822 2975 2951 34 386 2975 4927 1 982 3119 4619 56 386 3119 2982 57 774 3119 2334 47 827 4050 1324 34 386 4050 3856 57 246 420 805 82 342 420 3945 48 664 805 3991 86 342 805 1198 93 391 805 1093 76 265 1056 2277 70 342 1056 611 24 677 1056 1179 1 503 1366 2011 8 342 1366 3687 81 491 1366 467 10 332 2011 4851 91 342 2011 1056 94 342 2011 1565 56 655 2277 3943 18 342 2277 565 12 314 3943 4753 80 342 3943 2199 53 546 3991 1366 76 342 3991 4172 89 667 3991 4264 28 954 421 1063 74 523 421 4589 73 933 606 1302 96 523 606 3904 98 789 1063 2746 57 523 1063 522 94 274 1302 4570 17 523 1302 1370 16 523 1302 1038 25 324 1370 4408 55 523 1370 1890 2 604 2322 606 64 523 2322 761 53 11 2746 3654 45 523 2746 4433 10 952 2746 2508 24 131 3654 2322 76 523 3654 2504 8 228 4408 4565 21 523 4408 887 89 683 422 2476 68 309 422 318 56 149 1273 4200 12 309 1273 537 43 291 1411 2062 14 309 1411 3918 60 596 1411 4720 72 960 1866 4803 37 309 1866 4141 36 711 1866 3677 86 752 1903 4502 36 309 1903 4166 80 309 1903 308 13 974 1903 3450 67 613 2062 1866 50 309 2062 2119 31 375 2476 1273 22 309 2476 2697 81 125 3299 1903 76 309 3299 19 42 974 3299 4445 85 488 4166 1411 99 309 4166 42 19 618 4166 210 72 561 4200 3299 55 309 4200 196 44 742 4200 1940 97 524 423 1392 45 204 423 2126 67 347 423 2610 48 815 960 3781 65 204 960 4928 49 110 1392 2241 48 204 1392 1061 1 32 2241 3980 12 204 2241 376 84 807 2241 3984 30 552 3047 4546 51 204 3047 4535 90 176 3781 3047 78 204 3781 4796 36 204 3781 3178 41 395 3781 1563 95 617 3980 960 40 204 3980 3379 99 163 424 1908 38 264 424 1245 27 774 666 4535 74 264 666 3489 5 335 666 1423 10 855 1490 4021 29 264 1490 799 13 813 1490 713 27 301 1798 666 28 264 1798 2610 71 774 1908 1490 100 264 1908 1266 14 577 1908 3556 31 854 4021 1798 41 264 4021 4626 15 264 4021 4221 23 778 425 742 79 632 425 283 92 794 610 3427 69 632 610 2266 78 496 610 4716 53 474 742 1898 78 632 742 2133 26 278 742 975 88 640 1303 2901 48 632 1303 185 6 944 1303 902 20 550 1898 4238 43 632 1898 4634 87 632 1898 1825 92 951 2827 2941 87 632 2827 3296 33 57 2901 4953 70 632 2901 4677 49 632 2901 4661 80 995 2901 3433 19 55 2941 1303 82 632 2941 621 36 245 2941 4479 34 673 3427 3976 14 632 3427 1414 5 83 3533 610 40 632 3533 925 100 186 3533 1917 70 800 3976 2827 72 632 3976 4160 81 240 4238 4331 50 632 4238 3282 33 223 4238 4356 45 878 4331 3533 24 632 4331 2401 98 179 4331 184 48 798 426 3933 24 692 426 1951 90 104 426 3461 46 108 604 4909 33 692 604 3853 82 639 604 3610 6 262 2246 4683 52 692 2246 2300 92 692 2246 3774 88 313 2300 604 72 692 2300 2074 82 633 3933 4339 69 692 3933 4004 5 609 3933 1143 8 313 4339 2246 63 692 4339 2946 81 578 427 3526 56 930 427 2645 60 376 2478 4623 35 930 2478 3954 70 930 2478 2649 65 121 2478 896 1 534 3289 4079 8 930 3289 965 9 588 3526 3289 49 930 3526 2068 79 76 3526 757 14 885 3633 3810 35 930 3633 2958 42 333 3633 3627 4 384 3810 4829 21 930 3810 4860 97 746 3954 3633 76 930 3954 2150 76 304 4079 2478 22 930 4079 4414 42 237 428 2461 31 648 428 4556 8 434 428 1608 34 549 2155 4576 71 648 2155 2407 36 648 2155 4521 47 107 2155 1981 11 180 2407 4913 43 648 2407 4557 97 279 2461 4142 32 648 2461 3834 72 311 4142 2155 60 648 4142 297 30 514 4142 3369 22 726 429 2304 61 404 429 1033 16 225 2187 3410 63 404 2187 2531 50 443 2304 3927 12 404 2304 4540 9 404 2304 1716 9 670 2304 899 33 84 2305 2187 60 404 2305 4270 59 607 2305 3425 63 808 2369 2305 27 404 2369 1094 95 23 2369 2972 2 930 2895 2369 5 404 2895 4314 12 795 2895 3988 36 459 3410 4624 89 404 3410 3446 79 498 3410 3536 39 5 3927 4090 23 404 3927 1334 23 888 4090 2895 90 404 4090 868 25 406 4090 1244 20 233 430 3342 21 264 430 933 33 242 621 4439 18 264 621 4852 2 877 621 3474 46 807 3266 4974 54 264 3266 2799 68 775 3266 3876 75 314 3342 3978 47 264 3342 4703 89 988 3342 1512 60 720 3978 4737 57 264 3978 621 10 264 3978 4006 15 317 4439 3266 38 264 4439 2888 38 135 431 1123 63 1014 431 2610 86 52 1082 3897 9 1014 1082 2593 36 704 1082 4390 11 787 1123 1643 49 1014 1123 765 13 105 1123 3548 54 673 1643 4493 38 1014 1643 2835 13 297 1643 2331 94 223 3008 3843 62 1014 3008 1050 87 25 3123 3008 32 1014 3123 3740 51 184 3123 4929 83 469 3843 4845 87 1014 3843 1082 31 1014 3843 4650 1 432 3897 4573 10 1014 3897 4243 81 158 4493 3123 21 1014 4493 680 46 693 432 1731 91 298 432 3089 94 816 432 3482 54 964 1731 3406 71 298 1731 2667 54 715 1767 2725 61 298 1767 2041 12 747 1767 2160 18 812 1933 1767 54 298 1933 4937 71 298 1933 19 3 874 1933 2477 75 123 2696 4757 19 298 2696 4213 92 57 2725 2696 41 298 2725 3001 40 348 3406 1933 1 298 3406 1612 44 329 3406 2186 21 836 433 2958 38 498 433 742 67 917 1606 3852 70 498 1606 4918 4 776 2177 1606 61 498 2177 4430 83 407 2177 1288 66 602 2688 2177 20 498 2688 4510 16 498 2688 1322 75 651 2791 2688 25 498 2791 3957 85 566 2791 1103 75 170 2958 2791 23 498 2958 4833 78 14 2958 4857 60 499 3742 4862 98 498 3742 517 22 974 3742 3183 96 765 3852 3742 5 498 3852 4919 98 344 434 1276 86 36 434 4871 90 531 434 1378 72 399 1072 3128 81 36 1072 4959 73 36 1072 4181 33 116 1072 1532 30 297 1276 1072 93 36 1276 3779 57 103 1276 4545 1 534 1401 4643 64 36 1401 3103 81 825 1892 2144 8 36 1892 1992 94 274 1892 4899 59 619 2144 1401 36 36 2144 1634 19 34 2144 3635 44 660 3128 3416 91 36 3128 2561 20 223 3128 4679 87 756 3416 1892 100 36 3416 3117 75 861 435 585 11 141 435 2795 67 117 435 1996 38 507 585 3611 46 141 585 1921 97 277 585 286 51 527 944 4908 29 141 944 288 91 270 1665 4838 23 141 1665 3012 76 141 1665 869 94 142 1665 4774 44 965 3012 3029 14 141 3012 1802 57 826 3012 250 2 107 3029 944 74 141 3029 1857 86 290 3611 1665 58 141 3611 321 37 269 436 1154 99 957 436 1409 93 395 436 434 17 925 906 1595 5 957 906 4542 39 957 906 164 2 47 906 1126 69 963 1154 1335 15 957 1154 4305 54 456 1184 906 48 957 1184 2088 21 443 1335 4282 20 957 1335 446 74 128 1595 4873 79 957 1595 2784 72 784 1595 1143 97 23 2149 1184 37 957 2149 3905 55 63 2149 710 68 621 4282 2149 89 957 4282 2523 17 959 437 1134 60 574 437 4496 10 304 1018 3272 83 574 1018 2980 96 162 1031 3064 54 574 1031 2816 73 426 1134 1018 30 574 1134 4530 29 574 1134 2018 67 593 1134 2387 96 401 1710 1031 45 574 1710 1988 16 29 1710 3546 1 549 3064 4526 41 574 3064 3919 16 732 3272 1710 90 574 3272 2440 58 446 438 4256 99 507 438 4889 74 409 958 4192 10 507 958 1754 10 883 1287 2532 42 507 1287 1303 24 390 1287 973 64 502 2286 958 55 507 2286 3023 29 298 2532 3618 37 507 2532 253 56 375 2532 1873 17 946 3319 2286 89 507 3319 780 60 60 3319 3704 43 527 3618 4800 5 507 3618 4683 90 507 3618 3879 54 807 3618 4379 55 760 4192 1287 52 507 4256 4332 62 507 4256 4300 73 774 4332 3319 84 507 4332 222 70 19 439 4095 14 257 439 2258 9 709 1480 2311 22 257 1480 4749 82 257 2023 4633 69 257 2023 596 42 242 2311 2870 100 257 2311 1675 57 224 2311 2088 91 113 2648 1480 72 257 2870 2023 55 257 2870 1869 53 768 4095 2648 81 257 4095 3689 80 703 440 1284 37 531 440 686 57 423 440 1740 74 566 627 3768 56 531 722 4640 99 531 722 1111 44 183 985 3561 32 531 985 291 37 594 1284 627 47 531 1284 500 54 11 1284 407 9 21 2025 722 87 531 3286 2025 47 531 3286 837 78 468 3561 3286 5 531 3561 3990 13 447 3561 138 65 515 3768 4327 51 531 3768 4778 45 531 4327 985 28 531 441 509 77 1178 441 2704 41 431 509 2022 31 1178 509 61 51 433 509 2606 51 543 647 3409 44 1178 1572 647 5 1178 1572 2098 90 345 2022 3381 83 1178 2022 4743 3 1178 2219 3485 6 1178 2219 4198 2 234 2415 2219 44 1178 2415 1742 28 284 2671 3107 41 1178 2671 4613 45 292 3107 4781 69 1178 3107 1289 17 273 3381 1572 22 1178 3381 4547 75 909 3381 1073 33 581 3409 3575 91 1178 3409 4733 69 1178 3485 2671 45 1178 3575 2415 19 1178 3575 688 2 855 442 2809 76 689 442 4350 73 576 442 3644 90 721 772 4246 92 689 1218 1311 71 689 1218 4301 99 526 1218 1448 31 497 1311 4487 75 689 1348 1810 49 689 1348 3360 58 333 1810 3644 38 689 1810 1634 61 310 1810 1967 88 275 2569 4830 36 689 2809 772 86 689 2809 4685 33 306 3644 1218 73 689 3644 1504 5 219 3644 2419 46 269 4246 1348 27 689 4487 2569 66 689 4487 4824 70 689 443 2278 90 445 443 738 89 376 443 101 88 290 918 2830 54 445 1135 4910 64 445 1135 2556 32 864 1321 1946 70 445 1321 94 50 682 1612 3747 54 445 1612 1007 4 76 1946 1135 60 445 1946 4129 91 583 1946 4158 80 602 2278 918 11 445 2278 4512 30 445 2544 1321 3 445 2830 1612 73 445 2830 2721 57 98 3747 2544 60 445 3747 4874 17 505 3747 725 84 618 444 1756 55 422 1410 4552 99 422 1410 3226 68 201 1659 1872 88 422 1659 2856 98 478 1659 3267 63 773 1756 1659 50 422 1872 3621 58 422 1872 522 40 693 2348 1410 99 422 2348 4564 75 422 3621 3678 21 422 3621 4337 87 167 3678 4111 36 422 3678 443 79 644 4111 2348 54 422 4111 1892 35 420 445 1755 17 1222 445 3943 13 601 445 2542 79 88 995 4584 85 1222 1329 995 69 1222 1329 2491 88 540 1329 3914 88 257 1755 2923 22 1222 1870 2739 9 1222 1870 1971 64 39 2121 4044 13 1222 2121 21 1 507 2146 2734 36 1222 2146 3343 63 562 2146 3549 21 39 2734 4948 18 1222 2734 1870 53 1222 2739 1329 28 1222 2923 2121 36 1222 2923 2184 30 786 4044 2146 43 1222 4044 381 44 687 446 3737 67 404 446 1920 41 526 446 2117 39 641 1795 4925 89 404 1795 4854 11 404 2172 3905 33 404 3723 1795 43 404 3723 1588 53 584 3737 2172 20 404 3737 3410 84 277 3737 804 26 719 3905 3723 54 404 447 4470 69 516 447 2609 86 728 950 4608 95 516 950 582 83 719 2429 3549 96 516 2429 1407 32 282 2429 3634 54 996 2795 3705 9 516 3549 2795 73 516 3549 3319 50 178 3705 950 81 516 3705 1788 55 860 3705 955 73 438 4470 2429 5 516 4470 4844 97 516 448 2826 45 298 955 1122 47 298 955 3479 32 363 1122 1171 59 298 1122 4643 96 298 1171 3312 12 298 1171 1826 28 767 1171 1545 64 428 1788 4986 27 298 2826 955 37 298 2826 578 46 526 2826 4940 22 287 3312 1788 62 298 449 1336 86 359 449 2178 62 946 628 4986 16 359 628 132 51 224 1210 4985 61 359 1210 1907 59 359 1336 1210 47 359 1336 785 44 447 1907 628 15 359 1907 1879 57 527 450 596 16 196 450 709 40 193 596 2845 55 196 596 3765 30 312 596 3339 74 79 858 3925 38 196 937 1252 50 196 937 4691 9 886 989 937 19 196 989 4990 32 196 1252 858 1 196 1252 372 77 975 2845 989 86 196 2845 4952 16 771 3925 4913 29 196 3925 4068 15 906 451 2536 80 394 451 680 94 499 1819 4823 68 394 1819 1728 4 791 1835 2033 45 394 1835 1863 85 329 1835 2619 33 731 2033 2463 93 394 2388 1835 74 394 2388 892 63 318 2463 1819 14 394 2463 4830 34 394 2536 2690 72 394 2536 657 13 768 2690 2388 8 394 2690 2830 99 924 2690 1269 63 717 452 3638 17 412 638 2222 55 412 638 4801 44 171 1342 1777 21 412 1342 294 12 584 1607 4352 5 412 1607 3073 72 449 1607 2195 45 548 1619 638 7 412 1777 4841 78 412 1777 1906 66 412 1906 2002 1 412 1906 3759 2 38 1906 1997 21 610 2002 4514 58 412 2222 1607 27 412 2222 625 81 3 3368 1619 4 412 3368 3415 25 706 3368 1243 55 315 3452 4645 22 412 3452 1342 27 412 3638 3368 50 412 4352 3452 8 412 4352 4706 16 255 4352 4834 4 734 453 1241 77 276 1241 2329 69 276 1241 3434 57 216 1241 1835 12 16 2329 2379 2 276 2379 3528 31 276 2379 261 65 592 3010 4907 71 276 3010 4066 42 880 3528 3565 20 276 3528 4509 37 276 3565 3010 50 276 3565 3356 53 883 3565 4845 18 491 454 2333 58 484 542 2145 93 484 542 1147 53 410 786 3641 43 484 786 1396 12 603 786 4512 13 819 2016 542 78 484 2145 3578 29 484 2145 3048 7 22 2333 4412 34 484 2333 4518 80 282 2333 4173 23 438 2417 4204 52 484 3578 786 34 484 3578 3466 14 625 3641 4913 3 484 3641 665 68 346 4204 2016 51 484 4204 4542 51 484 4412 2417 35 484 4412 294 28 624 4412 3289 61 230 455 2814 72 635 1785 2273 44 635 1785 2312 20 949 1808 1785 90 635 1808 4525 16 268 1808 2134 22 249 2273 2292 47 635 2292 4410 2 635 2292 1905 60 684 2732 4793 30 635 2732 3900 1 501 2732 1011 69 909 2814 1808 25 635 2984 2732 60 635 2984 1046 22 402 3620 2984 76 635 3620 4676 70 938 3620 3628 52 343 4410 3620 27 635 4410 4962 59 635 456 1508 72 204 1233 2672 45 204 1233 2614 53 411 1482 1233 21 204 1482 505 90 879 1508 2679 27 204 1508 1683 34 51 1508 4526 83 883 1574 4774 26 204 2226 1574 97 204 2226 3461 16 276 2672 2226 24 204 2672 1078 42 600 2672 4104 34 693 2679 1482 34 204 2679 4817 99 204 457 2057 25 826 1047 1960 67 826 1047 4884 76 826 1449 4473 3 826 1449 183 87 454 1960 3190 84 826 1960 1588 29 253 1960 733 83 682 2057 1047 56 826 3190 1449 75 826 3190 1834 25 684 3190 3429 95 857 4473 4554 1 826 458 688 33 169 458 3560 79 587 688 1332 38 169 688 4861 69 169 1332 2790 39 169 1332 2326 79 722 1332 4161 100 253 2790 3226 70 169 3226 4129 66 169 3226 1544 51 811 3226 1015 51 848 4129 4934 58 169 459 2778 19 361 459 1608 22 283 685 3625 72 361 685 3346 32 832 685 1369 28 607 1175 2614 69 361 1515 1530 38 361 1515 785 78 272 1515 4211 34 995 1530 4996 37 361 2614 4039 88 361 2614 4608 2 361 2778 3247 72 361 2778 2811 20 948 3247 685 67 361 3247 1998 2 10 3625 1175 11 361 3625 268 84 16 4039 1515 38 361 4039 1433 65 536 460 4032 61 906 460 1230 54 949 460 3942 76 972 923 2252 56 906 1240 3199 63 906 1240 3890 69 991 1240 4353 60 31 2252 4788 32 906 2252 4685 7 906 2695 4454 71 906 3199 2695 3 906 3199 1789 2 554 3519 923 19 906 3519 3083 31 675 3519 242 59 887 4032 4340 49 906 4340 1240 71 906 4340 3480 56 50 4454 3519 36 906 4454 863 13 97 461 3212 70 1143 461 284 36 253 461 4996 93 135 564 913 96 1143 863 4879 87 1143 863 4981 93 1143 913 2479 43 1143 913 1786 16 992 913 2453 69 42 1494 863 100 1143 2126 4233 43 1143 2126 4272 4 733 2126 3969 67 784 2479 3425 98 1143 3212 2126 46 1143 3212 4687 90 256 3212 2716 10 560 3425 1494 47 1143 4233 564 59 1143 4233 2357 70 201 462 3872 6 484 462 306 57 119 752 1213 29 484 752 633 80 560 852 4488 39 484 852 3620 74 832 852 4280 2 118 920 2195 21 484 1213 852 76 484 1213 2627 19 865 1213 3699 51 35 2098 920 87 484 2195 2674 14 484 2195 4642 42 484 2674 3821 43 484 2674 1082 43 985 2674 1188 87 323 3821 752 66 484 3872 2098 68 484 3872 3065 93 711 4488 4916 63 484 4488 3428 96 536 463 4308 23 670 463 2581 4 130 463 3574 76 36 503 2186 6 670 905 4631 39 670 905 4274 32 574 905 990 23 55 1221 905 67 670 2186 4945 15 670 2186 1221 39 670 4308 503 40 670 4308 806 24 833 464 3391 55 248 464 393 39 694 1507 4789 18 248 1507 1449 86 875 2207 1507 5 248 2207 2070 9 596 2207 570 20 944 2363 3636 66 248 3391 2363 19 248 3391 3834 28 661 3391 221 4 699 3636 2207 100 248 3636 4573 55 248 465 2499 92 94 756 2235 34 94 756 4026 19 753 756 3461 29 976 785 1067 7 94 1067 1133 98 94 1067 4528 88 13 1133 756 86 94 1133 701 7 185 1133 2571 60 911 1734 2875 84 94 2235 4838 22 94 2235 1763 20 810 2499 3831 75 94 2499 2136 1 854 2875 4635 87 94 2875 785 69 94 3831 1734 15 94 3831 1890 69 466 3831 2931 45 215 466 2677 23 109 640 3670 53 109 640 2159 35 920 1362 3169 91 109 1362 3500 25 202 2468 3397 47 109 2468 284 54 819 2677 1362 57 109 2677 3378 83 278 2677 2712 58 521 3169 2468 16 109 3397 3973 18 109 3397 4836 50 235 3670 4728 56 109 3670 4608 68 109 3973 640 50 109 3973 3295 78 137 3973 4064 36 764 467 4153 77 506 774 3305 4 506 774 4988 92 387 774 2008 46 403 1095 1994 41 506 1994 774 38 506 1994 4963 26 908 2138 2626 21 506 2138 836 75 514 2138 938 2 810 2626 4961 18 506 2626 1095 48 506 2860 4293 90 506 3305 2860 31 506 3305 117 21 660 4153 2138 78 506 4153 2631 62 917 4293 4769 4 506 4293 3075 88 838 468 615 42 718 468 2001 61 706 615 3693 16 718 615 3101 27 543 684 4668 3 718 684 3134 91 718 813 4681 47 718 813 731 47 115 2733 684 27 718 2733 3238 52 128 2733 1752 58 809 3134 813 57 718 3460 2733 100 718 3460 3551 2 729 3693 3460 64 718 3693 1545 58 176 3693 4703 30 558 469 1388 44 381 520 1402 85 381 520 3704 94 431 1388 2617 6 381 1388 1347 25 885 1402 4949 78 381 1402 403 83 83 2617 4649 9 381 2617 3707 78 381 2917 4213 16 381 2917 1651 75 703 3160 2917 32 381 3160 3488 17 708 3707 3160 57 381 3707 4925 77 958 3707 4892 85 547 4213 520 36 381 470 1019 29 1110 470 1900 96 388 519 733 73 1110 519 3056 78 105 733 4932 97 1110 733 3137 22 177 733 4724 80 753 1019 2944 96 1110 2568 519 43 1110 2568 1364 30 90 2944 4234 51 1110 2944 4630 91 1110 4124 2568 46 1110 4124 1272 24 671 4124 1291 45 125 4234 4124 18 1110 471 3228 4 414 471 809 23 33 517 4774 98 414 517 3400 76 520 517 881 75 401 1634 517 11 414 1634 4967 11 414 2443 1634 48 414 3228 3564 48 414 3228 1877 38 867 3228 4718 41 479 3564 2443 94 414 472 3182 1 1002 472 4334 61 17 1195 4424 21 1002 1195 644 45 89 3182 3211 61 1002 3182 1228 38 331 3182 2767 83 414 3211 3469 53 1002 3469 1195 59 1002 3469 4626 65 1002 4424 4855 29 1002 4424 4598 45 750 473 801 85 327 473 3783 22 467 801 3108 97 327 801 4465 98 235 801 990 10 255 1109 3297 47 327 2736 1109 7 327 2736 3667 14 728 2736 1953 57 838 3108 4276 2 327 3108 4643 68 327 3297 4287 10 327 4276 2736 41 327 4276 2372 13 232 4276 659 98 203 4287 4511 41 327 474 1759 71 452 474 1202 60 963 474 1947 1 278 1418 3689 29 452 1581 1779 34 452 1581 155 27 674 1581 1757 23 5 1759 2940 17 452 1779 2020 14 452 1779 1126 28 687 2020 1418 78 452 2020 3331 78 461 2940 1581 91 452 2940 3331 33 696 2940 932 89 994 3689 4601 24 452 3689 4656 84 452 475 3835 33 379 3046 4856 71 379 3046 3842 31 379 3244 4914 19 379 3244 2721 15 574 3244 755 89 504 3835 3046 66 379 3842 4391 33 379 3842 397 39 528 3842 4182 90 694 4391 3244 39 379 476 2847 50 315 476 1987 52 512 1766 4735 19 315 1766 3943 75 348 1766 1717 60 682 2119 4795 92 315 2119 1766 62 315 2847 2889 11 315 2889 2119 68 315 2889 645 62 246 477 2234 37 1012 477 3926 94 40 477 4325 96 37 901 4586 63 1012 2234 3699 4 1012 2234 2332 32 190 2603 2702 32 1012 2603 2682 67 578 2702 901 96 1012 2702 1231 45 546 3699 4481 40 1012 3699 2501 39 825 3699 651 76 225 4481 2603 17 1012 4481 4777 74 1012 478 1138 29 572 620 2442 87 572 620 4799 25 572 712 4314 79 572 712 330 13 806 712 1036 94 380 718 4867 79 572 1002 620 56 572 1002 320 79 189 1002 1845 37 413 1138 1002 25 572 1831 3982 61 572 1831 2423 47 660 1831 83 95 457 2442 1831 1 572 3982 712 13 572 3982 4008 60 951 3982 804 28 389 4314 718 70 572 479 3056 99 421 479 1720 48 494 479 2994 87 983 614 3110 28 421 1190 1999 61 421 1190 4183 14 467 1999 2490 46 421 1999 4752 55 421 2490 614 54 421 2490 2830 63 120 2490 509 88 457 3056 1190 39 421 3110 4917 19 421 3110 4719 72 770 480 1197 79 653 480 2349 3 855 567 3560 30 653 567 3864 28 397 1197 2782 80 653 1197 3207 84 798 1197 2835 51 23 2265 2323 5 653 2323 2401 81 653 2323 2111 89 443 2401 4900 35 653 2401 4779 95 712 2580 567 92 653 2580 347 9 911 2580 272 2 574 2782 4452 83 653 3560 4663 7 653 3560 2265 68 653 4452 2580 1 653 4452 109 68 866 481 3653 30 492 481 1158 54 611 481 4867 73 62 970 4807 72 492 970 4674 41 492 2107 4188 5 492 2692 970 67 492 2692 3213 50 988 2692 4241 50 605 2985 2692 23 492 3653 2107 89 492 3653 2628 70 350 3653 532 77 650 4188 2985 96 492 482 3115 32 485 482 2195 58 890 482 451 30 743 2290 3710 74 485 3115 4441 79 485 3115 3739 9 273 3115 148 94 4 3317 4370 97 485 3626 2290 26 485 3626 4861 91 319 3710 4518 95 485 3710 4031 11 58 4370 4449 3 485 4370 4956 4 563 4370 3800 6 925 4441 3317 42 485 4449 3626 63 485 4449 4831 19 485 483 2903 65 91 483 4926 11 69 1617 4630 39 91 1617 1306 2 85 2899 3994 99 91 2899 4943 13 804 2899 1864 23 903 2903 2899 82 91 3568 3958 71 91 3568 4676 80 265 3568 368 89 470 3958 1617 2 91 3994 3568 45 91 3994 4698 67 91 484 930 24 667 484 1368 56 873 504 4557 5 667 504 4526 83 667 930 1228 12 667 930 134 46 698 1208 1965 21 667 1208 3324 36 250 1228 2396 49 667 1228 2148 57 84 1228 4310 100 47 1965 504 77 667 2396 1208 19 667 2396 4818 43 661 2396 2734 39 612 485 2653 69 793 806 3143 80 793 806 2430 84 292 806 4140 98 277 1868 2283 47 793 1981 1868 63 793 1981 334 29 143 2283 4825 39 793 2283 4971 73 793 2653 806 76 793 2653 523 86 727 2653 459 17 92 3143 1981 100 793 486 808 61 192 486 1234 8 729 605 2757 4 192 605 1666 13 180 808 1334 27 192 808 4553 84 192 986 2660 94 192 986 4876 64 635 1334 2389 38 192 1334 992 17 160 1334 2674 87 897 2389 2760 19 192 2660 3851 74 192 2660 1535 44 24 2660 1109 23 732 2757 986 94 192 2760 605 32 192 2760 4233 65 308 2760 1939 32 817 3851 4080 68 192 4080 4670 47 192 4080 2428 50 321 487 3862 93 631 487 2662 87 672 2275 2962 88 631 2275 1263 60 511 2962 3527 90 631 2962 4840 55 568 2962 30 37 313 3527 4892 17 631 3862 4455 86 631 3862 2891 77 680 4055 4955 45 631 4055 2275 18 631 4455 4055 61 631 4455 4452 23 503 488 3724 29 404 488 1273 40 139 488 3989 86 350 553 1989 92 404 1094 4548 54 404 1094 4568 20 404 1989 2370 65 404 1989 1907 65 885 1989 2064 20 235 2370 1094 28 404 3724 553 18 404 3724 2427 49 523 3724 2598 8 273 489 1124 21 635 507 4763 4 635 507 818 46 445 1124 1842 100 635 1124 915 74 515 1124 127 11 220 1842 3901 48 635 2556 4879 61 635 2556 3426 65 635 3426 507 28 635 3426 3730 76 572 3426 3251 23 355 3901 3970 52 635 3970 2556 67 635 3970 522 23 772 3970 3556 63 386 490 1601 85 60 1502 4174 71 60 1502 2646 67 431 1601 1502 4 60 1601 2227 62 652 2153 4407 70 60 2153 2783 47 808 2153 103 24 669 2781 4577 99 60 3766 4058 53 60 3766 158 4 916 4058 2781 81 60 4058 4795 29 60 4174 2153 24 60 4174 604 51 600 4174 3813 26 45 4407 3766 11 60 491 3953 91 252 491 202 28 44 491 2189 90 337 1282 2714 42 252 2714 4425 95 252 2714 4780 47 811 3712 4656 84 252 3712 644 1 753 3841 1282 33 252 3841 4305 5 918 3870 3841 64 252 3870 2399 11 578 3870 1084 72 711 3953 3870 4 252 4425 3712 74 252 4425 4949 43 252 492 1543 5 739 492 4164 96 549 720 4679 96 739 720 2743 81 594 1199 4746 21 739 1199 2230 7 739 1543 2742 66 739 1543 3269 33 508 2230 720 78 739 2230 1507 75 372 2742 1199 11 739 2742 440 28 422 493 539 25 117 493 345 11 946 539 1104 97 117 539 4135 56 631 765 3727 56 117 765 418 51 106 765 4865 82 943 1104 1427 39 117 1270 765 72 117 1270 3572 40 20 1427 2024 64 117 1427 1394 52 839 2024 1270 27 117 2024 3528 97 202 2629 4825 16 117 2629 4642 24 117 3727 2629 57 117 3727 2758 74 902 494 3166 22 412 494 88 34 479 595 4527 82 412 595 2959 69 973 595 292 13 391 771 2927 71 412 771 4571 63 412 834 595 29 412 1567 834 48 412 1567 2405 38 32 1567 2417 27 501 2927 3719 62 412 3040 771 1 412 3040 3488 33 468 3040 372 17 136 3166 3040 35 412 3569 1567 89 412 3569 248 33 103 3569 184 70 422 3719 3569 4 412 495 639 61 804 495 303 11 66 495 3767 42 178 639 1814 32 804 1458 3332 76 804 1458 1653 56 518 1458 99 88 693 1475 4465 60 804 1475 4752 53 804 1814 4162 65 804 2470 1475 65 804 2470 4743 20 939 2470 1129 44 475 2635 1458 32 804 3332 4916 2 804 3332 3363 89 506 3332 2003 4 734 3987 2635 97 804 4162 2470 96 804 4162 1159 51 634 4465 3987 42 804 4465 3464 65 125 496 4006 4 472 496 1569 32 916 496 3329 15 557 1644 4895 12 472 2485 3384 25 472 2485 3921 14 548 2485 4800 78 850 3144 3777 68 472 3384 1644 84 472 3384 3095 24 410 3777 2485 96 472 3777 2263 6 983 4006 3144 70 472 4006 4843 21 472 497 3652 98 672 497 1880 13 988 497 4595 38 640 1286 2373 41 672 1331 1286 46 672 1331 4069 66 114 1445 1833 90 672 1445 1802 66 201 1445 4101 31 77 1833 2862 54 672 2373 3023 51 672 2373 4652 55 672 2862 4634 48 672 2862 1806 93 847 2862 3228 48 18 3023 1445 48 672 3652 1331 25 672 3652 3832 73 64 3652 915 43 261 498 2182 23 833 1571 1847 31 833 1571 3728 39 468 1571 3669 32 943 1847 4657 100 833 2182 2836 97 833 2182 1969 77 153 2319 1571 14 833 2319 2103 83 602 2836 2319 83 833 2836 4958 78 833 499 2255 49 1251 499 2214 85 522 499 1111 8 694 1939 4556 52 1251 2179 3423 44 1251 2179 4580 54 894 2179 4216 11 716 2255 3383 7 1251 3383 4689 69 1251 3383 2179 85 1251 3423 1939 67 1251 3423 3313 38 767 500 1446 59 638 500 1573 90 877 1015 4751 77 638 1015 4618 23 638 1015 4773 27 638 1015 4723 60 638 1015 2762 17 638 1015 4857 26 638 1015 4563 46 638 1015 4997 87 638 1015 4678 29 638 1015 4899 48 638 1015 4921 8 638 1015 4632 64 638 1015 4870 55 638 1015 4859 30 638 1446 3566 64 638 1446 4521 94 638 1446 4812 86 638 1446 4927 59 638 1446 4612 74 638 1446 4818 71 638 1446 4713 28 638 1446 4918 16 638 1446 4592 57 638 1446 4756 79 638 1446 4664 67 638 1446 4871 17 638 2762 4885 22 638 2762 4562 7 638 2762 4912 7 638 2762 4819 53 638 2762 4724 24 638 2762 4964 82 638 2762 4878 87 638 2762 4711 40 638 2762 4775 66 638 2762 4262 68 638 2762 4779 20 638 2762 4814 13 638 2762 4599 86 638 3100 4943 23 638 3100 4936 90 638 3100 4933 82 638 3100 4915 64 638 3100 4501 1 638 3100 4801 45 638 3100 4732 14 638 3100 1015 10 638 3100 4832 86 638 3100 4973 10 638 3100 4813 62 638 3566 4550 61 638 3566 3100 1 638 3566 4865 19 638 3566 4808 38 638 3566 4519 65 638 3566 4772 47 638 3566 4881 1 638 3566 4636 10 638 3566 4646 62 638 3566 4555 71 638 3566 4507 51 638 3566 4673 16 638 3566 4747 87 638 4262 4613 78 638 4262 4736 26 638 4262 4539 16 638 4262 4935 8 638 4262 4699 12 638 4262 4658 50 638 4262 4978 2 638 4262 4827 12 638 4530 1476 21 514 4531 56 19 39 4532 4910 61 239 4532 214 36 426 4533 3283 38 810 4534 1362 64 724 4534 4172 77 766 4535 1271 9 530 4536 4178 2 800 4536 757 98 704 4537 506 59 323 4537 4215 37 284 4538 1386 60 797 4539 3111 15 779 4540 668 61 370 4541 783 78 874 4541 775 12 557 4542 3521 11 457 4543 2472 80 263 4543 3930 7 277 4544 170 23 980 4544 1593 74 93 4545 2985 6 259 4546 3274 64 481 4547 1709 81 666 4548 259 33 229 4548 901 98 731 4549 4598 26 141 4550 2231 59 885 4550 1429 47 367 4551 1291 54 538 4552 4147 79 76 4552 398 35 796 4553 2267 31 739 4553 1604 29 9 4554 3596 3 94 4555 2884 75 209 4556 4588 19 782 4556 4796 76 997 4557 4850 53 545 4558 367 4 458 4558 4656 100 668 4559 196 60 94 4560 3611 98 30 4560 4675 88 261 4561 1494 31 824 4562 710 92 226 4563 481 58 543 4564 984 26 659 4565 4911 44 387 4565 846 38 938 4566 1760 92 868 4567 872 31 790 4568 3739 53 196 4568 301 11 449 4569 4888 47 431 4569 268 14 788 4570 3083 40 138 4570 91 5 712 4571 3271 13 314 4571 362 10 205 4572 845 83 442 4573 793 26 928 4574 3158 67 624 4574 4123 45 540 4575 4727 91 569 4575 2996 59 101 4576 3220 19 2 4576 23 7 824 4577 1186 26 331 4577 4258 99 194 4578 22 15 156 4578 3660 66 367 4579 3687 42 346 4579 403 8 987 4580 757 26 863 4581 4975 31 95 4582 4012 93 157 4583 2694 43 200 4583 3069 58 415 4584 2502 45 867 4584 3416 9 206 4585 566 9 177 4586 2454 48 237 4586 1401 3 121 4587 2844 43 561 4587 1869 52 219 4588 4144 65 51 4589 1703 50 345 4589 778 82 168 4590 512 76 406 4591 3201 15 847 4591 955 1 540 4592 2492 97 567 4592 2478 64 798 4593 2172 81 389 4593 3337 84 257 4594 2263 20 920 4594 1987 5 598 4595 826 39 985 4596 791 9 100 4597 3801 64 604 4597 4330 12 897 4598 4946 31 141 4598 450 57 219 4599 4677 39 668 4600 3861 14 48 4600 3193 70 567 4601 2431 78 878 4602 908 78 885 4602 931 90 807 4603 928 35 687 4603 2346 82 398 4604 1361 77 767 4605 4368 58 341 4606 3018 25 667 4606 4131 4 891 4607 4968 80 853 4607 801 12 693 4608 649 55 100 4608 4917 14 459 4609 2106 60 451 4609 4257 87 530 4610 4221 1 950 4611 1513 10 483 4612 1378 12 387 4612 4696 86 789 4613 3688 90 414 4614 3393 8 853 4614 4289 94 219 4615 3009 71 645 4616 2096 44 157 4617 4446 34 754 4618 4512 85 232 4619 4659 68 690 4619 2747 26 182 4620 3659 52 938 4621 2748 95 484 4622 259 31 883 4623 4010 86 738 4623 1650 29 323 4624 3549 48 652 4624 344 42 922 4625 4212 43 812 4626 1977 55 940 4627 157 68 74 4628 127 21 198 4628 1156 80 184 4629 4639 1 114 4629 1359 34 968 4630 606 37 751 4630 2762 39 57 4631 1303 3 677 4632 3641 20 400 4632 3792 71 66 4633 3868 45 604 4633 3950 81 574 4634 1330 41 898 4634 1770 18 149 4635 2733 96 720 4636 3973 51 800 4636 3685 98 815 4637 3033 45 429 4637 3067 83 37 4638 4278 23 322 4638 2012 25 364 4639 2314 18 851 4639 1303 58 821 4640 158 4 744 4640 1313 94 834 4641 4549 80 232 4641 1553 90 353 4642 1528 16 105 4643 1986 23 206 4644 2525 19 105 4644 4116 10 627 4645 1652 81 881 4646 3973 19 873 4647 3284 18 48 4647 562 98 976 4648 592 17 734 4648 1602 52 76 4649 708 35 394 4650 2174 14 810 4650 661 67 202 4651 875 41 368 4652 4766 92 585 4653 3090 2 840 4653 956 80 765 4654 2022 92 478 4655 4912 64 315 4656 2300 88 93 4656 640 87 167 4657 841 82 826 4657 4027 42 659 4658 2266 47 550 4658 3865 18 254 4659 1332 78 781 4660 1273 6 324 4661 4463 70 610 4662 27 99 201 4663 40 54 314 4663 1533 84 600 4664 2987 44 628 4665 2752 59 163 4665 1445 78 221 4666 2649 93 248 4666 2615 4 187 4667 3098 95 522 4668 768 45 449 4669 943 46 794 4669 450 36 45 4670 3525 40 249 4671 1657 53 357 4672 2496 63 458 4672 4698 51 547 4673 1729 38 169 4673 2717 56 353 4674 555 20 770 4675 4713 50 968 4675 1729 20 182 4676 4229 90 259 4676 3097 56 125 4677 2078 41 409 4677 4510 66 743 4678 62 97 859 4679 1613 40 602 4679 2665 14 471 4680 1197 81 55 4680 1585 17 996 4681 4118 71 419 4682 665 93 696 4683 3367 2 312 4684 4905 78 879 4684 4673 60 822 4685 3405 8 157 4686 2923 46 419 4686 4925 53 484 4687 2673 25 285 4688 4256 59 627 4688 2685 53 501 4689 3476 24 92 4690 1745 90 965 4690 4879 26 795 4691 3785 3 939 4691 4372 32 981 4692 1361 4 867 4693 4351 38 142 4693 4872 5 942 4694 1620 66 846 4695 3514 57 58 4696 4376 72 479 4697 4593 2 912 4697 4013 66 270 4698 4620 87 107 4699 1924 12 818 4699 1293 36 223 4700 3705 58 592 4701 1681 65 856 4702 2754 74 76 4702 1349 4 284 4703 1967 54 853 4703 713 100 532 4704 4571 36 30 4705 3854 58 367 4706 958 9 12 4706 2074 65 640 4707 4186 46 735 4708 2015 64 891 4709 4629 50 857 4709 2016 87 929 4710 3633 45 29 4710 1341 75 764 4711 2264 100 163 4712 2292 3 987 4712 2531 9 576 4713 308 27 864 4714 4363 1 47 4715 3969 5 661 4715 3246 57 513 4716 4027 84 454 4717 3459 69 375 4718 1657 17 473 4719 582 26 625 4720 2502 95 724 4721 1072 33 296 4721 4047 98 718 4722 1161 2 925 4722 2171 80 693 4723 2188 33 899 4723 353 87 211 4724 4661 75 351 4724 149 25 52 4725 4835 98 130 4726 674 99 338 4727 747 70 312 4728 3552 20 732 4728 2710 78 146 4729 4875 52 981 4729 588 73 298 4730 488 87 867 4730 3759 95 760 4731 2213 64 499 4732 3284 79 714 4733 1977 86 728 4734 3027 17 796 4734 241 45 555 4735 3009 25 730 4735 2708 70 545 4736 4062 83 606 4737 170 87 717 4738 2673 72 291 4739 332 48 3 4739 3614 22 719 4740 2019 94 274 4741 4711 68 667 4741 2979 97 561 4742 2610 98 402 4742 3733 81 721 4743 422 89 521 4744 4840 99 191 4745 3995 39 574 4745 4820 52 213 4746 4096 63 92 4747 2232 33 341 4747 1883 91 191 4748 4742 91 354 4748 2422 52 456 4749 359 76 690 4749 2935 40 695 4750 768 34 243 4750 216 46 269 4751 2415 53 877 4752 2603 100 277 4753 444 1 457 4753 4381 54 69 4754 2049 18 806 4755 4020 3 379 4755 4025 2 812 4756 807 1 573 4757 791 29 981 4757 3051 31 335 4758 4435 92 558 4759 2508 58 623 4759 1269 10 784 4760 4458 35 194 4761 1276 1 262 4762 1933 43 865 4763 3027 35 473 4763 3357 57 763 4764 2129 33 426 4764 1779 61 492 4765 1439 69 309 4766 3735 62 481 4767 290 61 87 4768 3468 30 381 4768 4764 71 336 4769 3174 4 894 4770 1548 46 997 4770 1880 6 383 4771 3178 45 292 4771 1391 17 246 4772 1018 88 461 4772 2981 20 287 4773 2308 26 795 4774 1318 56 294 4774 2971 23 329 4775 2779 8 36 4776 4112 70 67 4777 2427 39 798 4777 4820 10 391 4778 1183 43 224 4778 3692 74 919 4779 1397 33 442 4780 1435 21 285 4780 3217 6 171 4781 4538 15 152 4781 4739 62 567 4782 2485 86 628 4782 2650 19 841 4783 4364 47 381 4784 3134 53 749 4784 2008 16 400 4785 1288 22 295 4786 4460 33 789 4786 4068 1 416 4787 4462 38 50 4788 181 3 984 4788 2182 42 137 4789 378 62 786 4790 1337 14 916 4790 3097 11 52 4791 4632 37 949 4791 1446 97 27 4792 2441 77 984 4792 2691 94 796 4793 197 81 683 4794 618 73 534 4795 2931 57 867 4796 51 98 114 4796 289 5 982 4797 4885 40 736 4797 3879 63 308 4798 3205 39 985 4798 3994 80 799 4799 3525 35 226 4799 2566 36 338 4800 116 58 761 4800 2711 88 618 4801 348 10 931 4802 3915 33 266 4803 3149 6 622 4803 2932 74 255 4804 2219 95 354 4805 2768 33 675 4806 4942 81 956 4807 4341 47 509 4808 3147 43 458 4808 421 6 614 4809 90 19 330 4810 2901 11 914 4811 4607 36 817 4811 577 92 656 4812 3498 15 785 4812 4179 24 42 4813 4925 99 249 4814 3168 4 291 4815 2198 60 673 4815 4245 42 476 4816 1425 86 9 4816 1956 98 238 4817 4399 61 937 4818 4143 69 603 4819 1506 4 932 4819 809 63 9 4820 81 84 325 4820 2783 6 812 4821 686 37 704 4821 1006 55 591 4822 3896 30 428 4822 100 25 240 4823 3868 44 964 4824 3158 8 583 4824 3442 71 117 4825 451 91 899 4826 3955 79 584 4827 3181 83 466 4827 4499 87 387 4828 3449 90 158 4829 412 41 932 4830 409 72 829 4831 1715 44 345 4831 804 98 596 4832 2219 49 790 4832 3452 29 727 4833 11 27 43 4833 2348 47 218 4834 1701 70 32 4835 2067 96 554 4836 3940 31 587 4837 3810 6 896 4837 2985 2 508 4838 471 15 118 4838 2535 21 718 4839 2030 47 497 4839 4383 28 734 4840 877 22 520 4840 95 61 522 4841 4608 1 684 4841 1219 17 479 4842 3803 20 16 4843 4026 91 311 4843 778 60 911 4844 2047 27 658 4844 332 52 591 4845 136 87 466 4845 513 92 76 4846 2925 34 333 4846 1576 14 50 4847 1221 96 708 4847 198 1 953 4847 2218 55 70 4848 4738 36 474 4848 2336 93 65 4849 1302 72 977 4849 2039 58 449 4849 1851 35 140 4849 3412 89 798 4850 1737 92 726 4850 3178 46 366 4850 4388 62 796 4851 4048 51 146 4851 4246 7 573 4851 2394 73 228 4852 1136 72 689 4852 2551 30 556 4852 3371 75 844 4852 5 46 569 4853 2347 56 658 4854 3003 31 478 4854 4619 63 621 4854 3456 77 712 4854 3418 55 826 4855 600 82 500 4855 3040 69 543 4855 2470 44 83 4856 1244 13 789 4857 2603 74 549 4857 425 23 938 4857 2308 73 966 4857 2357 77 700 4858 2377 45 310 4858 955 39 507 4858 2854 95 789 4859 2490 42 918 4860 3414 48 810 4860 4042 9 121 4860 4105 82 41 4860 4637 88 753 4861 69 35 447 4862 1121 49 519 4862 2644 57 292 4862 1437 11 816 4862 2328 33 173 4863 4654 87 291 4863 933 26 304 4864 4907 58 443 4864 3143 85 8 4865 2056 48 567 4865 3866 84 80 4865 149 57 29 4865 3558 62 665 4866 1030 100 502 4866 931 68 784 4867 955 96 177 4867 1192 65 240 4867 2857 14 317 4868 1193 26 848 4868 3474 48 852 4868 2661 93 982 4869 4909 50 958 4869 4675 44 179 4869 34 44 597 4869 343 2 128 4870 25 93 419 4870 4605 30 553 4870 3756 1 463 4870 766 45 697 4871 1745 35 595 4871 4354 54 162 4872 571 56 539 4872 1574 15 383 4872 4251 88 112 4872 990 86 229 4873 2630 63 489 4873 690 46 817 4874 3352 26 678 4875 3758 41 153 4875 2338 64 803 4875 2811 67 196 4876 4 51 78 4876 1047 34 657 4877 807 12 42 4878 1808 50 398 4878 99 90 692 4879 2263 37 849 4879 2173 9 417 4879 3324 11 568 4880 2260 59 84 4880 2951 79 557 4880 2574 81 361 4880 2068 68 19 4881 3775 8 524 4881 4055 61 900 4882 2464 29 354 4882 986 61 24 4883 1389 34 991 4883 3138 62 659 4884 1594 27 186 4884 4229 95 483 4885 4544 60 20 4886 4021 37 514 4887 4565 92 77 4887 1490 2 711 4887 4745 2 556 4887 921 62 941 4888 1724 8 672 4888 2455 99 956 4888 4649 15 762 4888 2648 21 354 4889 3691 85 169 4890 238 4 644 4890 4651 61 734 4891 2464 71 461 4892 743 13 110 4892 4523 79 687 4893 83 90 464 4893 4276 89 172 4893 4860 53 63 4893 3447 81 728 4894 4481 33 46 4894 1995 11 472 4894 496 96 240 4894 1155 25 965 4895 1904 14 702 4895 4710 42 198 4895 2039 87 985 4896 1552 100 977 4896 1266 42 340 4897 2566 88 810 4897 474 95 273 4898 2809 48 781 4898 357 40 551 4899 3353 57 595 4899 3298 77 24 4900 3997 35 433 4900 271 80 355 4900 2285 44 821 4901 1509 9 274 4901 57 16 143 4902 577 30 910 4902 3591 85 848 4903 1032 53 2 4903 4016 98 746 4903 1795 45 741 4904 1862 22 759 4905 2646 90 910 4905 4603 92 815 4905 1409 78 570 4905 4914 70 468 4906 3472 82 172 4906 4494 63 20 4906 855 100 561 4906 1629 57 333 4907 2340 14 714 4908 3718 48 58 4908 2080 97 33 4909 1858 78 536 4909 2896 44 775 4910 182 50 127 4910 2602 58 429 4911 4466 68 406 4912 745 83 897 4913 562 19 815 4913 3213 36 965 4913 3535 30 815 4913 27 26 558 4914 2822 31 151 4914 3194 72 65 4914 4473 13 979 4915 1223 32 508 4916 1225 63 722 4916 4223 68 599 4917 1295 70 704 4917 692 41 748 4917 325 45 233 4918 1433 92 515 4918 4309 70 99 4919 4251 86 969 4920 1024 59 608 4920 2922 11 146 4920 411 59 13 4921 85 29 753 4921 889 29 244 4922 4258 50 167 4923 216 56 341 4924 4834 26 515 4924 362 51 372 4925 1249 21 294 4925 3098 73 132 4925 2168 6 90 4926 377 35 347 4927 3231 97 673 4928 2125 74 457 4928 4213 75 84 4929 2515 64 761 4930 4205 21 589 4931 4782 74 946 4931 2280 86 845 4931 1942 33 971 4932 380 73 498 4932 4165 59 346 4933 2839 81 36 4933 3209 4 143 4933 4789 48 142 4934 1171 4 747 4934 4190 73 353 4934 1298 52 163 4934 3297 48 275 4935 2907 7 919 4936 1284 3 138 4936 915 60 2 4936 1454 11 712 4936 690 67 782 4937 3599 39 876 4937 347 83 985 4937 2567 29 617 4937 3596 20 21 4938 2187 66 76 4938 2619 65 787 4939 3259 12 191 4939 3160 92 836 4940 98 31 590 4940 4649 46 625 4940 4570 56 757 4941 4612 51 718 4941 2776 66 665 4942 2294 36 810 4942 831 90 593 4942 1908 83 598 4943 266 80 719 4943 621 87 218 4943 1201 87 187 4943 598 16 245 4943 2074 29 477 4943 1189 46 487 4944 2072 71 98 4944 2204 57 458 4944 328 39 765 4945 509 93 792 4946 2197 16 455 4946 12 33 649 4946 4846 9 631 4946 4762 20 130 4946 4312 14 807 4947 2045 8 508 4947 3558 15 314 4947 4308 46 280 4947 90 6 360 4948 4384 69 456 4949 2198 5 369 4949 4790 60 443 4950 254 34 92 4950 3858 55 120 4950 469 82 606 4950 2233 22 729 4950 1012 26 450 4950 200 86 760 4951 4072 45 606 4951 4852 42 191 4951 1400 50 665 4951 81 21 329 4951 4263 96 94 4951 513 84 769 4952 668 41 914 4952 148 16 48 4952 417 49 59 4952 4483 78 355 4952 2041 48 573 4952 1087 61 781 4953 3711 55 102 4953 289 70 144 4953 4938 1 934 4953 3108 59 889 4954 1348 68 754 4954 2786 18 373 4954 2458 10 259 4954 3579 27 608 4954 4277 64 926 4955 2738 87 16 4955 1487 66 337 4955 888 96 963 4955 3910 16 664 4956 291 11 676 4956 1009 70 574 4957 2057 88 702 4957 4988 46 478 4957 1831 5 313 4957 3137 98 563 4957 3857 1 257 4957 4061 53 642 4958 3582 82 675 4958 862 66 53 4958 490 25 825 4958 776 57 173 4959 512 2 456 4960 4562 32 72 4960 2771 64 256 4960 4093 49 110 4960 809 49 585 4961 2283 38 113 4961 3036 68 435 4961 2222 5 678 4961 3 7 161 4961 305 100 753 4962 237 95 664 4963 2554 37 991 4963 862 65 939 4964 4630 11 211 4964 3311 95 354 4964 3669 22 798 4964 1097 9 294 4964 1872 20 722 4965 49 87 314 4965 3264 5 516 4965 440 85 117 4965 3561 51 200 4965 358 89 720 4965 1622 16 380 4966 1161 52 826 4966 751 31 5 4966 147 35 743 4966 2193 2 107 4966 4596 20 586 4967 1489 27 205 4967 294 99 199 4968 1976 93 889 4968 3284 47 255 4968 3479 31 538 4968 2487 65 233 4968 3998 88 677 4968 3645 12 165 4969 4191 20 832 4969 3700 20 180 4970 1983 74 978 4970 1820 63 841 4970 2301 81 508 4971 356 49 767 4972 2869 97 432 4972 1779 59 440 4972 1863 30 721 4972 478 61 685 4972 2717 19 875 4973 1467 50 43 4974 694 62 123 4974 898 80 262 4974 1660 50 397 4974 2919 81 750 4974 734 28 492 4975 68 42 973 4975 1124 11 439 4975 1985 39 527 4975 3420 33 667 4975 667 38 457 4975 1827 11 189 4976 1358 99 772 4977 4229 62 554 4977 1027 99 839 4977 437 18 265 4977 4104 10 451 4977 4686 92 416 4978 1321 50 471 4979 287 42 449 4979 499 58 29 4979 3565 27 573 4979 2454 27 954 4980 1180 65 415 4980 1399 9 101 4980 2282 37 613 4981 656 71 212 4981 1529 55 440 4982 4862 49 926 4982 3493 70 577 4983 2439 45 194 4983 2931 71 379 4983 4821 15 762 4983 349 13 209 4983 4898 19 453 4984 4473 12 803 4984 2327 96 591 4984 879 11 672 4985 4141 48 942 4985 3061 56 255 4985 1479 23 900 4985 4597 37 122 4985 2493 6 900 4985 702 55 344 4985 59 84 366 4986 1167 13 640 4986 4925 10 682 4986 2740 34 475 4987 27 84 826 4987 2071 20 261 4987 651 65 562 4987 3525 48 370 4988 108 41 222 4988 1414 53 287 4988 2533 8 106 4988 1369 100 880 4989 2128 35 661 4989 2035 50 532 4989 1380 46 553 4989 124 10 647 4990 2668 50 212 4990 4813 93 3 4990 166 73 517 4990 3247 96 207 4990 3672 66 371 4990 3954 81 951 4991 442 79 689 4991 776 88 899 4991 623 31 282 4992 4697 23 803 4992 1679 31 4 4992 3837 20 240 4992 4301 52 666 4992 2450 6 941 4992 2486 31 379 4992 4039 80 902 4992 3099 41 935 4993 2788 32 140 4993 3695 41 659 4993 3818 63 850 4993 2220 29 542 4993 4947 70 422 4993 1138 18 977 4993 4527 23 350 4994 2461 87 32 4994 1994 14 205 4994 3496 51 444 4994 3272 53 103 4994 119 50 608 4994 3680 87 167 4994 1391 45 176 4994 179 80 320 4995 521 71 322 4996 2229 51 221 4997 4620 76 382 4997 2967 75 729 4997 549 28 654 4997 2696 75 399 4997 3519 52 762 4997 3261 4 562 4998 2734 61 88 4998 2788 54 78 4998 1377 33 55 4998 858 45 411 4998 2349 68 165 4998 2497 47 155 4998 3671 33 789 4998 3096 52 971 4999 1557 14 710 4999 3386 15 339 4999 659 46 813 4999 985 72 672 5000 2885 15 816 5000 4900 49 879 5000 3070 83 269 5000 273 99 25 5000 509 48 345 5000 808 90 288 5000 2694 21 249 DEMAND 4501 4 4502 150 4503 668 4504 535 4505 285 4506 740 4507 8 4508 567 4509 1283 4510 961 4511 335 4512 586 4513 1085 4514 25 4515 877 4516 1882 4517 469 4518 661 4519 11 4520 464 4521 5 4522 309 4523 248 4524 87 4525 512 4526 620 4527 1261 4528 1070 4529 211 4530 630 4531 107 4532 96 4533 486 4534 357 4535 316 4536 295 4537 564 4538 750 4539 2 4540 500 4541 375 4542 1809 4543 266 4544 1552 4545 427 4546 136 4547 19 4548 313 4549 509 4550 15 4551 312 4552 269 4553 501 4554 1145 4555 5 4556 680 4557 1303 4558 302 4559 495 4560 213 4561 83 4562 5 4563 7 4564 669 4565 18 4566 286 4567 387 4568 393 4569 451 4570 562 4571 286 4572 411 4573 974 4574 120 4575 181 4576 693 4577 204 4578 1117 4579 376 4580 755 4581 466 4582 156 4583 1187 4584 709 4585 123 4586 1242 4587 704 4588 703 4589 51 4590 319 4591 476 4592 13 4593 72 4594 120 4595 28 4596 505 4597 373 4598 243 4599 1 4600 818 4601 1175 4602 1013 4603 662 4604 1058 4605 275 4606 400 4607 537 4608 926 4609 708 4610 124 4611 372 4612 5 4613 511 4614 595 4615 240 4616 328 4617 187 4618 20 4619 1109 4620 423 4621 210 4622 24 4623 1041 4624 40 4625 1668 4626 1592 4627 373 4628 149 4629 875 4630 760 4631 1163 4632 18 4633 1372 4634 1160 4635 91 4636 13 4637 922 4638 340 4639 504 4640 1460 4641 425 4642 586 4643 690 4644 112 4645 1332 4646 20 4647 268 4648 770 4649 839 4650 11 4651 737 4652 336 4653 66 4654 1849 4655 483 4656 853 4657 1214 4658 1 4659 592 4660 1574 4661 84 4662 806 4663 606 4664 9 4665 1301 4666 605 4667 382 4668 903 4669 295 4670 44 4671 474 4672 729 4673 4 4674 174 4675 632 4676 513 4677 553 4678 27 4679 336 4680 33 4681 143 4682 561 4683 1105 4684 939 4685 441 4686 109 4687 315 4688 187 4689 791 4690 520 4691 378 4692 1028 4693 619 4694 1623 4695 310 4696 625 4697 630 4698 23 4699 10 4700 1020 4701 664 4702 326 4703 43 4704 238 4705 1654 4706 753 4707 393 4708 244 4709 1164 4710 1917 4711 18 4712 5 4713 9 4714 237 4715 1083 4716 268 4717 130 4718 154 4719 416 4720 143 4721 34 4722 694 4723 6 4724 8 4725 669 4726 996 4727 266 4728 53 4729 400 4730 829 4731 798 4732 6 4733 817 4734 298 4735 442 4736 3 4737 861 4738 769 4739 26 4740 792 4741 962 4742 557 4743 539 4744 645 4745 442 4746 795 4747 6 4748 284 4749 667 4750 587 4751 16 4752 1663 4753 296 4754 569 4755 883 4756 3 4757 450 4758 258 4759 416 4760 551 4761 532 4762 568 4763 1450 4764 158 4765 584 4766 1087 4767 84 4768 147 4769 349 4770 456 4771 626 4772 7 4773 8 4774 1255 4775 8 4776 780 4777 710 4778 13 4779 11 4780 406 4781 438 4782 415 4783 52 4784 258 4785 238 4786 201 4787 296 4788 1360 4789 762 4790 936 4791 313 4792 598 4793 576 4794 915 4795 301 4796 135 4797 1025 4798 502 4799 776 4800 897 4801 15 4802 476 4803 759 4804 46 4805 271 4806 163 4807 883 4808 4 4809 292 4810 1850 4811 600 4812 3 4813 9 4814 13 4815 653 4816 423 4817 103 4818 4 4819 8 4820 67 4821 369 4822 205 4823 197 4824 700 4825 764 4826 982 4827 7 4828 1199 4829 1588 4830 1708 4831 579 4832 15 4833 1397 4834 1131 4835 264 4836 133 4837 179 4838 381 4839 340 4840 408 4841 893 4842 6 4843 569 4844 565 4845 223 4846 264 4847 87 4848 549 4849 231 4850 256 4851 247 4852 53 4853 529 4854 276 4855 1039 4856 1348 4857 4 4858 128 4859 10 4860 325 4861 98 4862 594 4863 427 4864 543 4865 6 4866 262 4867 211 4868 995 4869 1268 4870 1 4871 2 4872 108 4873 320 4874 1013 4875 1252 4876 428 4877 510 4878 13 4879 1459 4880 594 4881 20 4882 613 4883 560 4884 251 4885 12 4886 1023 4887 116 4888 186 4889 247 4890 100 4891 98 4892 1012 4893 1292 4894 138 4895 1555 4896 157 4897 13 4898 424 4899 17 4900 157 4901 707 4902 65 4903 364 4904 881 4905 770 4906 47 4907 314 4908 244 4909 706 4910 1571 4911 539 4912 6 4913 1057 4914 1669 4915 6 4916 1703 4917 30 4918 6 4919 406 4920 774 4921 10 4922 394 4923 716 4924 1055 4925 992 4926 380 4927 8 4928 1217 4929 36 4930 251 4931 217 4932 1274 4933 568 4934 958 4935 8 4936 1 4937 538 4938 204 4939 315 4940 713 4941 261 4942 15 4943 10 4944 1 4945 298 4946 875 4947 227 4948 1229 4949 712 4950 176 4951 985 4952 332 4953 484 4954 920 4955 581 4956 881 4957 154 4958 1138 4959 6 4960 789 4961 1528 4962 415 4963 471 4964 2 4965 1008 4966 361 4967 1049 4968 885 4969 151 4970 204 4971 396 4972 477 4973 11 4974 494 4975 514 4976 1155 4977 991 4978 12 4979 576 4980 402 4981 1074 4982 226 4983 543 4984 384 4985 228 4986 299 4987 919 4988 508 4989 129 4990 98 4991 205 4992 434 4993 853 4994 769 4995 314 4996 1138 4997 20 4998 1 4999 465 5000 121 END DyLP-1.10.4/Data/Sample/retail3.mps0000644000175200017520000037277212136243266015260 0ustar coincoinNAME kohls3_ld1 ROWS N TotalCost E material_balance[Pack1] E material_balance[Pack2] E material_balance[Pack3] E demand_fit['71',S] E demand_fit['73',S] E demand_fit['86',S] E demand_fit['99',S] E demand_fit['103',S] E demand_fit['126',S] E demand_fit['221',S] E demand_fit['225',S] E demand_fit['251',S] E demand_fit['270',S] E demand_fit['272',S] E demand_fit['275',S] E demand_fit['276',S] E demand_fit['280',S] E demand_fit['282',S] E demand_fit['283',S] E demand_fit['293',S] E demand_fit['298',S] E demand_fit['299',S] E demand_fit['301',S] E demand_fit['309',S] E demand_fit['310',S] E demand_fit['375',S] E demand_fit['378',S] E demand_fit['379',S] E demand_fit['381',S] E demand_fit['383',S] E demand_fit['384',S] E demand_fit['386',S] E demand_fit['388',S] E demand_fit['389',S] E demand_fit['390',S] E demand_fit['397',S] E demand_fit['398',S] E demand_fit['403',S] E demand_fit['418',S] E demand_fit['430',S] E demand_fit['431',S] E demand_fit['479',S] E demand_fit['502',S] E demand_fit['504',S] E demand_fit['512',S] E demand_fit['528',S] E demand_fit['533',S] E demand_fit['538',S] E demand_fit['552',S] E demand_fit['621',S] E demand_fit['639',S] E demand_fit['712',S] E demand_fit['781',S] E demand_fit['71',M] E demand_fit['73',M] E demand_fit['86',M] E demand_fit['99',M] E demand_fit['103',M] E demand_fit['126',M] E demand_fit['221',M] E demand_fit['225',M] E demand_fit['251',M] E demand_fit['270',M] E demand_fit['272',M] E demand_fit['275',M] E demand_fit['276',M] E demand_fit['280',M] E demand_fit['282',M] E demand_fit['283',M] E demand_fit['293',M] E demand_fit['298',M] E demand_fit['299',M] E demand_fit['301',M] E demand_fit['309',M] E demand_fit['310',M] E demand_fit['375',M] E demand_fit['378',M] E demand_fit['379',M] E demand_fit['381',M] E demand_fit['383',M] E demand_fit['384',M] E demand_fit['386',M] E demand_fit['388',M] E demand_fit['389',M] E demand_fit['390',M] E demand_fit['397',M] E demand_fit['398',M] E demand_fit['403',M] E demand_fit['418',M] E demand_fit['430',M] E demand_fit['431',M] E demand_fit['479',M] E demand_fit['502',M] E demand_fit['504',M] E demand_fit['512',M] E demand_fit['528',M] E demand_fit['533',M] E demand_fit['538',M] E demand_fit['552',M] E demand_fit['621',M] E demand_fit['639',M] E demand_fit['712',M] E demand_fit['781',M] E demand_fit['71',L] E demand_fit['73',L] E demand_fit['86',L] E demand_fit['99',L] E demand_fit['103',L] E demand_fit['126',L] E demand_fit['221',L] E demand_fit['225',L] E demand_fit['251',L] E demand_fit['270',L] E demand_fit['272',L] E demand_fit['275',L] E demand_fit['276',L] E demand_fit['280',L] E demand_fit['282',L] E demand_fit['283',L] E demand_fit['293',L] E demand_fit['298',L] E demand_fit['299',L] E demand_fit['301',L] E demand_fit['309',L] E demand_fit['310',L] E demand_fit['375',L] E demand_fit['378',L] E demand_fit['379',L] E demand_fit['381',L] E demand_fit['383',L] E demand_fit['384',L] E demand_fit['386',L] E demand_fit['388',L] E demand_fit['389',L] E demand_fit['390',L] E demand_fit['397',L] E demand_fit['398',L] E demand_fit['403',L] E demand_fit['418',L] E demand_fit['430',L] E demand_fit['431',L] E demand_fit['479',L] E demand_fit['502',L] E demand_fit['504',L] E demand_fit['512',L] E demand_fit['528',L] E demand_fit['533',L] E demand_fit['538',L] E demand_fit['552',L] E demand_fit['621',L] E demand_fit['639',L] E demand_fit['712',L] E demand_fit['781',L] E demand_fit['71',XL] E demand_fit['73',XL] E demand_fit['86',XL] E demand_fit['99',XL] E demand_fit['103',XL] E demand_fit['126',XL] E demand_fit['221',XL] E demand_fit['225',XL] E demand_fit['251',XL] E demand_fit['270',XL] E demand_fit['272',XL] E demand_fit['275',XL] E demand_fit['276',XL] E demand_fit['280',XL] E demand_fit['282',XL] E demand_fit['283',XL] E demand_fit['293',XL] E demand_fit['298',XL] E demand_fit['299',XL] E demand_fit['301',XL] E demand_fit['309',XL] E demand_fit['310',XL] E demand_fit['375',XL] E demand_fit['378',XL] E demand_fit['379',XL] E demand_fit['381',XL] E demand_fit['383',XL] E demand_fit['384',XL] E demand_fit['386',XL] E demand_fit['388',XL] E demand_fit['389',XL] E demand_fit['390',XL] E demand_fit['397',XL] E demand_fit['398',XL] E demand_fit['403',XL] E demand_fit['418',XL] E demand_fit['430',XL] E demand_fit['431',XL] E demand_fit['479',XL] E demand_fit['502',XL] E demand_fit['504',XL] E demand_fit['512',XL] E demand_fit['528',XL] E demand_fit['533',XL] E demand_fit['538',XL] E demand_fit['552',XL] E demand_fit['621',XL] E demand_fit['639',XL] E demand_fit['712',XL] E demand_fit['781',XL] COLUMNS .MRK0000 'MARKER' 'INTORG' NumLooseInners['71',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['71',Pack1] demand_fit['71',S] 1 demand_fit['71',M] 3 NumLooseInners['71',Pack1] demand_fit['71',L] 4 demand_fit['71',XL] 4 NumLooseInners['73',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['73',Pack1] demand_fit['73',S] 1 demand_fit['73',M] 3 NumLooseInners['73',Pack1] demand_fit['73',L] 4 demand_fit['73',XL] 4 NumLooseInners['86',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['86',Pack1] demand_fit['86',S] 1 demand_fit['86',M] 3 NumLooseInners['86',Pack1] demand_fit['86',L] 4 demand_fit['86',XL] 4 NumLooseInners['99',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['99',Pack1] demand_fit['99',S] 1 demand_fit['99',M] 3 NumLooseInners['99',Pack1] demand_fit['99',L] 4 demand_fit['99',XL] 4 NumLooseInners['103',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['103',Pack1] demand_fit['103',S] 1 demand_fit['103',M] 3 NumLooseInners['103',Pack1] demand_fit['103',L] 4 demand_fit['103',XL] 4 NumLooseInners['126',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['126',Pack1] demand_fit['126',S] 1 demand_fit['126',M] 3 NumLooseInners['126',Pack1] demand_fit['126',L] 4 demand_fit['126',XL] 4 NumLooseInners['221',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['221',Pack1] demand_fit['221',S] 1 demand_fit['221',M] 3 NumLooseInners['221',Pack1] demand_fit['221',L] 4 demand_fit['221',XL] 4 NumLooseInners['225',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['225',Pack1] demand_fit['225',S] 1 demand_fit['225',M] 3 NumLooseInners['225',Pack1] demand_fit['225',L] 4 demand_fit['225',XL] 4 NumLooseInners['251',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['251',Pack1] demand_fit['251',S] 1 demand_fit['251',M] 3 NumLooseInners['251',Pack1] demand_fit['251',L] 4 demand_fit['251',XL] 4 NumLooseInners['270',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['270',Pack1] demand_fit['270',S] 1 demand_fit['270',M] 3 NumLooseInners['270',Pack1] demand_fit['270',L] 4 demand_fit['270',XL] 4 NumLooseInners['272',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['272',Pack1] demand_fit['272',S] 1 demand_fit['272',M] 3 NumLooseInners['272',Pack1] demand_fit['272',L] 4 demand_fit['272',XL] 4 NumLooseInners['275',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['275',Pack1] demand_fit['275',S] 1 demand_fit['275',M] 3 NumLooseInners['275',Pack1] demand_fit['275',L] 4 demand_fit['275',XL] 4 NumLooseInners['276',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['276',Pack1] demand_fit['276',S] 1 demand_fit['276',M] 3 NumLooseInners['276',Pack1] demand_fit['276',L] 4 demand_fit['276',XL] 4 NumLooseInners['280',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['280',Pack1] demand_fit['280',S] 1 demand_fit['280',M] 3 NumLooseInners['280',Pack1] demand_fit['280',L] 4 demand_fit['280',XL] 4 NumLooseInners['282',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['282',Pack1] demand_fit['282',S] 1 demand_fit['282',M] 3 NumLooseInners['282',Pack1] demand_fit['282',L] 4 demand_fit['282',XL] 4 NumLooseInners['283',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['283',Pack1] demand_fit['283',S] 1 demand_fit['283',M] 3 NumLooseInners['283',Pack1] demand_fit['283',L] 4 demand_fit['283',XL] 4 NumLooseInners['293',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['293',Pack1] demand_fit['293',S] 1 demand_fit['293',M] 3 NumLooseInners['293',Pack1] demand_fit['293',L] 4 demand_fit['293',XL] 4 NumLooseInners['298',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['298',Pack1] demand_fit['298',S] 1 demand_fit['298',M] 3 NumLooseInners['298',Pack1] demand_fit['298',L] 4 demand_fit['298',XL] 4 NumLooseInners['299',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['299',Pack1] demand_fit['299',S] 1 demand_fit['299',M] 3 NumLooseInners['299',Pack1] demand_fit['299',L] 4 demand_fit['299',XL] 4 NumLooseInners['301',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['301',Pack1] demand_fit['301',S] 1 demand_fit['301',M] 3 NumLooseInners['301',Pack1] demand_fit['301',L] 4 demand_fit['301',XL] 4 NumLooseInners['309',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['309',Pack1] demand_fit['309',S] 1 demand_fit['309',M] 3 NumLooseInners['309',Pack1] demand_fit['309',L] 4 demand_fit['309',XL] 4 NumLooseInners['310',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['310',Pack1] demand_fit['310',S] 1 demand_fit['310',M] 3 NumLooseInners['310',Pack1] demand_fit['310',L] 4 demand_fit['310',XL] 4 NumLooseInners['375',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['375',Pack1] demand_fit['375',S] 1 demand_fit['375',M] 3 NumLooseInners['375',Pack1] demand_fit['375',L] 4 demand_fit['375',XL] 4 NumLooseInners['378',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['378',Pack1] demand_fit['378',S] 1 demand_fit['378',M] 3 NumLooseInners['378',Pack1] demand_fit['378',L] 4 demand_fit['378',XL] 4 NumLooseInners['379',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['379',Pack1] demand_fit['379',S] 1 demand_fit['379',M] 3 NumLooseInners['379',Pack1] demand_fit['379',L] 4 demand_fit['379',XL] 4 NumLooseInners['381',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['381',Pack1] demand_fit['381',S] 1 demand_fit['381',M] 3 NumLooseInners['381',Pack1] demand_fit['381',L] 4 demand_fit['381',XL] 4 NumLooseInners['383',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['383',Pack1] demand_fit['383',S] 1 demand_fit['383',M] 3 NumLooseInners['383',Pack1] demand_fit['383',L] 4 demand_fit['383',XL] 4 NumLooseInners['384',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['384',Pack1] demand_fit['384',S] 1 demand_fit['384',M] 3 NumLooseInners['384',Pack1] demand_fit['384',L] 4 demand_fit['384',XL] 4 NumLooseInners['386',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['386',Pack1] demand_fit['386',S] 1 demand_fit['386',M] 3 NumLooseInners['386',Pack1] demand_fit['386',L] 4 demand_fit['386',XL] 4 NumLooseInners['388',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['388',Pack1] demand_fit['388',S] 1 demand_fit['388',M] 3 NumLooseInners['388',Pack1] demand_fit['388',L] 4 demand_fit['388',XL] 4 NumLooseInners['389',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['389',Pack1] demand_fit['389',S] 1 demand_fit['389',M] 3 NumLooseInners['389',Pack1] demand_fit['389',L] 4 demand_fit['389',XL] 4 NumLooseInners['390',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['390',Pack1] demand_fit['390',S] 1 demand_fit['390',M] 3 NumLooseInners['390',Pack1] demand_fit['390',L] 4 demand_fit['390',XL] 4 NumLooseInners['397',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['397',Pack1] demand_fit['397',S] 1 demand_fit['397',M] 3 NumLooseInners['397',Pack1] demand_fit['397',L] 4 demand_fit['397',XL] 4 NumLooseInners['398',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['398',Pack1] demand_fit['398',S] 1 demand_fit['398',M] 3 NumLooseInners['398',Pack1] demand_fit['398',L] 4 demand_fit['398',XL] 4 NumLooseInners['403',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['403',Pack1] demand_fit['403',S] 1 demand_fit['403',M] 3 NumLooseInners['403',Pack1] demand_fit['403',L] 4 demand_fit['403',XL] 4 NumLooseInners['418',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['418',Pack1] demand_fit['418',S] 1 demand_fit['418',M] 3 NumLooseInners['418',Pack1] demand_fit['418',L] 4 demand_fit['418',XL] 4 NumLooseInners['430',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['430',Pack1] demand_fit['430',S] 1 demand_fit['430',M] 3 NumLooseInners['430',Pack1] demand_fit['430',L] 4 demand_fit['430',XL] 4 NumLooseInners['431',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['431',Pack1] demand_fit['431',S] 1 demand_fit['431',M] 3 NumLooseInners['431',Pack1] demand_fit['431',L] 4 demand_fit['431',XL] 4 NumLooseInners['479',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['479',Pack1] demand_fit['479',S] 1 demand_fit['479',M] 3 NumLooseInners['479',Pack1] demand_fit['479',L] 4 demand_fit['479',XL] 4 NumLooseInners['502',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['502',Pack1] demand_fit['502',S] 1 demand_fit['502',M] 3 NumLooseInners['502',Pack1] demand_fit['502',L] 4 demand_fit['502',XL] 4 NumLooseInners['504',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['504',Pack1] demand_fit['504',S] 1 demand_fit['504',M] 3 NumLooseInners['504',Pack1] demand_fit['504',L] 4 demand_fit['504',XL] 4 NumLooseInners['512',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['512',Pack1] demand_fit['512',S] 1 demand_fit['512',M] 3 NumLooseInners['512',Pack1] demand_fit['512',L] 4 demand_fit['512',XL] 4 NumLooseInners['528',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['528',Pack1] demand_fit['528',S] 1 demand_fit['528',M] 3 NumLooseInners['528',Pack1] demand_fit['528',L] 4 demand_fit['528',XL] 4 NumLooseInners['533',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['533',Pack1] demand_fit['533',S] 1 demand_fit['533',M] 3 NumLooseInners['533',Pack1] demand_fit['533',L] 4 demand_fit['533',XL] 4 NumLooseInners['538',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['538',Pack1] demand_fit['538',S] 1 demand_fit['538',M] 3 NumLooseInners['538',Pack1] demand_fit['538',L] 4 demand_fit['538',XL] 4 NumLooseInners['552',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['552',Pack1] demand_fit['552',S] 1 demand_fit['552',M] 3 NumLooseInners['552',Pack1] demand_fit['552',L] 4 demand_fit['552',XL] 4 NumLooseInners['621',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['621',Pack1] demand_fit['621',S] 1 demand_fit['621',M] 3 NumLooseInners['621',Pack1] demand_fit['621',L] 4 demand_fit['621',XL] 4 NumLooseInners['639',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['639',Pack1] demand_fit['639',S] 1 demand_fit['639',M] 3 NumLooseInners['639',Pack1] demand_fit['639',L] 4 demand_fit['639',XL] 4 NumLooseInners['712',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['712',Pack1] demand_fit['712',S] 1 demand_fit['712',M] 3 NumLooseInners['712',Pack1] demand_fit['712',L] 4 demand_fit['712',XL] 4 NumLooseInners['781',Pack1] TotalCost 1 material_balance[Pack1] 1 NumLooseInners['781',Pack1] demand_fit['781',S] 1 demand_fit['781',M] 3 NumLooseInners['781',Pack1] demand_fit['781',L] 4 demand_fit['781',XL] 4 NumLooseInners['71',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['71',Pack2] demand_fit['71',S] 1 demand_fit['71',M] 2 NumLooseInners['71',Pack2] demand_fit['71',L] 4 demand_fit['71',XL] 5 NumLooseInners['73',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['73',Pack2] demand_fit['73',S] 1 demand_fit['73',M] 2 NumLooseInners['73',Pack2] demand_fit['73',L] 4 demand_fit['73',XL] 5 NumLooseInners['86',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['86',Pack2] demand_fit['86',S] 1 demand_fit['86',M] 2 NumLooseInners['86',Pack2] demand_fit['86',L] 4 demand_fit['86',XL] 5 NumLooseInners['99',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['99',Pack2] demand_fit['99',S] 1 demand_fit['99',M] 2 NumLooseInners['99',Pack2] demand_fit['99',L] 4 demand_fit['99',XL] 5 NumLooseInners['103',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['103',Pack2] demand_fit['103',S] 1 demand_fit['103',M] 2 NumLooseInners['103',Pack2] demand_fit['103',L] 4 demand_fit['103',XL] 5 NumLooseInners['126',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['126',Pack2] demand_fit['126',S] 1 demand_fit['126',M] 2 NumLooseInners['126',Pack2] demand_fit['126',L] 4 demand_fit['126',XL] 5 NumLooseInners['221',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['221',Pack2] demand_fit['221',S] 1 demand_fit['221',M] 2 NumLooseInners['221',Pack2] demand_fit['221',L] 4 demand_fit['221',XL] 5 NumLooseInners['225',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['225',Pack2] demand_fit['225',S] 1 demand_fit['225',M] 2 NumLooseInners['225',Pack2] demand_fit['225',L] 4 demand_fit['225',XL] 5 NumLooseInners['251',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['251',Pack2] demand_fit['251',S] 1 demand_fit['251',M] 2 NumLooseInners['251',Pack2] demand_fit['251',L] 4 demand_fit['251',XL] 5 NumLooseInners['270',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['270',Pack2] demand_fit['270',S] 1 demand_fit['270',M] 2 NumLooseInners['270',Pack2] demand_fit['270',L] 4 demand_fit['270',XL] 5 NumLooseInners['272',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['272',Pack2] demand_fit['272',S] 1 demand_fit['272',M] 2 NumLooseInners['272',Pack2] demand_fit['272',L] 4 demand_fit['272',XL] 5 NumLooseInners['275',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['275',Pack2] demand_fit['275',S] 1 demand_fit['275',M] 2 NumLooseInners['275',Pack2] demand_fit['275',L] 4 demand_fit['275',XL] 5 NumLooseInners['276',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['276',Pack2] demand_fit['276',S] 1 demand_fit['276',M] 2 NumLooseInners['276',Pack2] demand_fit['276',L] 4 demand_fit['276',XL] 5 NumLooseInners['280',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['280',Pack2] demand_fit['280',S] 1 demand_fit['280',M] 2 NumLooseInners['280',Pack2] demand_fit['280',L] 4 demand_fit['280',XL] 5 NumLooseInners['282',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['282',Pack2] demand_fit['282',S] 1 demand_fit['282',M] 2 NumLooseInners['282',Pack2] demand_fit['282',L] 4 demand_fit['282',XL] 5 NumLooseInners['283',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['283',Pack2] demand_fit['283',S] 1 demand_fit['283',M] 2 NumLooseInners['283',Pack2] demand_fit['283',L] 4 demand_fit['283',XL] 5 NumLooseInners['293',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['293',Pack2] demand_fit['293',S] 1 demand_fit['293',M] 2 NumLooseInners['293',Pack2] demand_fit['293',L] 4 demand_fit['293',XL] 5 NumLooseInners['298',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['298',Pack2] demand_fit['298',S] 1 demand_fit['298',M] 2 NumLooseInners['298',Pack2] demand_fit['298',L] 4 demand_fit['298',XL] 5 NumLooseInners['299',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['299',Pack2] demand_fit['299',S] 1 demand_fit['299',M] 2 NumLooseInners['299',Pack2] demand_fit['299',L] 4 demand_fit['299',XL] 5 NumLooseInners['301',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['301',Pack2] demand_fit['301',S] 1 demand_fit['301',M] 2 NumLooseInners['301',Pack2] demand_fit['301',L] 4 demand_fit['301',XL] 5 NumLooseInners['309',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['309',Pack2] demand_fit['309',S] 1 demand_fit['309',M] 2 NumLooseInners['309',Pack2] demand_fit['309',L] 4 demand_fit['309',XL] 5 NumLooseInners['310',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['310',Pack2] demand_fit['310',S] 1 demand_fit['310',M] 2 NumLooseInners['310',Pack2] demand_fit['310',L] 4 demand_fit['310',XL] 5 NumLooseInners['375',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['375',Pack2] demand_fit['375',S] 1 demand_fit['375',M] 2 NumLooseInners['375',Pack2] demand_fit['375',L] 4 demand_fit['375',XL] 5 NumLooseInners['378',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['378',Pack2] demand_fit['378',S] 1 demand_fit['378',M] 2 NumLooseInners['378',Pack2] demand_fit['378',L] 4 demand_fit['378',XL] 5 NumLooseInners['379',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['379',Pack2] demand_fit['379',S] 1 demand_fit['379',M] 2 NumLooseInners['379',Pack2] demand_fit['379',L] 4 demand_fit['379',XL] 5 NumLooseInners['381',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['381',Pack2] demand_fit['381',S] 1 demand_fit['381',M] 2 NumLooseInners['381',Pack2] demand_fit['381',L] 4 demand_fit['381',XL] 5 NumLooseInners['383',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['383',Pack2] demand_fit['383',S] 1 demand_fit['383',M] 2 NumLooseInners['383',Pack2] demand_fit['383',L] 4 demand_fit['383',XL] 5 NumLooseInners['384',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['384',Pack2] demand_fit['384',S] 1 demand_fit['384',M] 2 NumLooseInners['384',Pack2] demand_fit['384',L] 4 demand_fit['384',XL] 5 NumLooseInners['386',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['386',Pack2] demand_fit['386',S] 1 demand_fit['386',M] 2 NumLooseInners['386',Pack2] demand_fit['386',L] 4 demand_fit['386',XL] 5 NumLooseInners['388',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['388',Pack2] demand_fit['388',S] 1 demand_fit['388',M] 2 NumLooseInners['388',Pack2] demand_fit['388',L] 4 demand_fit['388',XL] 5 NumLooseInners['389',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['389',Pack2] demand_fit['389',S] 1 demand_fit['389',M] 2 NumLooseInners['389',Pack2] demand_fit['389',L] 4 demand_fit['389',XL] 5 NumLooseInners['390',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['390',Pack2] demand_fit['390',S] 1 demand_fit['390',M] 2 NumLooseInners['390',Pack2] demand_fit['390',L] 4 demand_fit['390',XL] 5 NumLooseInners['397',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['397',Pack2] demand_fit['397',S] 1 demand_fit['397',M] 2 NumLooseInners['397',Pack2] demand_fit['397',L] 4 demand_fit['397',XL] 5 NumLooseInners['398',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['398',Pack2] demand_fit['398',S] 1 demand_fit['398',M] 2 NumLooseInners['398',Pack2] demand_fit['398',L] 4 demand_fit['398',XL] 5 NumLooseInners['403',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['403',Pack2] demand_fit['403',S] 1 demand_fit['403',M] 2 NumLooseInners['403',Pack2] demand_fit['403',L] 4 demand_fit['403',XL] 5 NumLooseInners['418',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['418',Pack2] demand_fit['418',S] 1 demand_fit['418',M] 2 NumLooseInners['418',Pack2] demand_fit['418',L] 4 demand_fit['418',XL] 5 NumLooseInners['430',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['430',Pack2] demand_fit['430',S] 1 demand_fit['430',M] 2 NumLooseInners['430',Pack2] demand_fit['430',L] 4 demand_fit['430',XL] 5 NumLooseInners['431',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['431',Pack2] demand_fit['431',S] 1 demand_fit['431',M] 2 NumLooseInners['431',Pack2] demand_fit['431',L] 4 demand_fit['431',XL] 5 NumLooseInners['479',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['479',Pack2] demand_fit['479',S] 1 demand_fit['479',M] 2 NumLooseInners['479',Pack2] demand_fit['479',L] 4 demand_fit['479',XL] 5 NumLooseInners['502',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['502',Pack2] demand_fit['502',S] 1 demand_fit['502',M] 2 NumLooseInners['502',Pack2] demand_fit['502',L] 4 demand_fit['502',XL] 5 NumLooseInners['504',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['504',Pack2] demand_fit['504',S] 1 demand_fit['504',M] 2 NumLooseInners['504',Pack2] demand_fit['504',L] 4 demand_fit['504',XL] 5 NumLooseInners['512',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['512',Pack2] demand_fit['512',S] 1 demand_fit['512',M] 2 NumLooseInners['512',Pack2] demand_fit['512',L] 4 demand_fit['512',XL] 5 NumLooseInners['528',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['528',Pack2] demand_fit['528',S] 1 demand_fit['528',M] 2 NumLooseInners['528',Pack2] demand_fit['528',L] 4 demand_fit['528',XL] 5 NumLooseInners['533',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['533',Pack2] demand_fit['533',S] 1 demand_fit['533',M] 2 NumLooseInners['533',Pack2] demand_fit['533',L] 4 demand_fit['533',XL] 5 NumLooseInners['538',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['538',Pack2] demand_fit['538',S] 1 demand_fit['538',M] 2 NumLooseInners['538',Pack2] demand_fit['538',L] 4 demand_fit['538',XL] 5 NumLooseInners['552',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['552',Pack2] demand_fit['552',S] 1 demand_fit['552',M] 2 NumLooseInners['552',Pack2] demand_fit['552',L] 4 demand_fit['552',XL] 5 NumLooseInners['621',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['621',Pack2] demand_fit['621',S] 1 demand_fit['621',M] 2 NumLooseInners['621',Pack2] demand_fit['621',L] 4 demand_fit['621',XL] 5 NumLooseInners['639',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['639',Pack2] demand_fit['639',S] 1 demand_fit['639',M] 2 NumLooseInners['639',Pack2] demand_fit['639',L] 4 demand_fit['639',XL] 5 NumLooseInners['712',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['712',Pack2] demand_fit['712',S] 1 demand_fit['712',M] 2 NumLooseInners['712',Pack2] demand_fit['712',L] 4 demand_fit['712',XL] 5 NumLooseInners['781',Pack2] TotalCost 1.5 material_balance[Pack2] 1 NumLooseInners['781',Pack2] demand_fit['781',S] 1 demand_fit['781',M] 2 NumLooseInners['781',Pack2] demand_fit['781',L] 4 demand_fit['781',XL] 5 NumLooseInners['71',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['71',Pack3] demand_fit['71',S] 2 demand_fit['71',M] 4 NumLooseInners['71',Pack3] demand_fit['71',L] 3 demand_fit['71',XL] 3 NumLooseInners['73',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['73',Pack3] demand_fit['73',S] 2 demand_fit['73',M] 4 NumLooseInners['73',Pack3] demand_fit['73',L] 3 demand_fit['73',XL] 3 NumLooseInners['86',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['86',Pack3] demand_fit['86',S] 2 demand_fit['86',M] 4 NumLooseInners['86',Pack3] demand_fit['86',L] 3 demand_fit['86',XL] 3 NumLooseInners['99',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['99',Pack3] demand_fit['99',S] 2 demand_fit['99',M] 4 NumLooseInners['99',Pack3] demand_fit['99',L] 3 demand_fit['99',XL] 3 NumLooseInners['103',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['103',Pack3] demand_fit['103',S] 2 demand_fit['103',M] 4 NumLooseInners['103',Pack3] demand_fit['103',L] 3 demand_fit['103',XL] 3 NumLooseInners['126',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['126',Pack3] demand_fit['126',S] 2 demand_fit['126',M] 4 NumLooseInners['126',Pack3] demand_fit['126',L] 3 demand_fit['126',XL] 3 NumLooseInners['221',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['221',Pack3] demand_fit['221',S] 2 demand_fit['221',M] 4 NumLooseInners['221',Pack3] demand_fit['221',L] 3 demand_fit['221',XL] 3 NumLooseInners['225',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['225',Pack3] demand_fit['225',S] 2 demand_fit['225',M] 4 NumLooseInners['225',Pack3] demand_fit['225',L] 3 demand_fit['225',XL] 3 NumLooseInners['251',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['251',Pack3] demand_fit['251',S] 2 demand_fit['251',M] 4 NumLooseInners['251',Pack3] demand_fit['251',L] 3 demand_fit['251',XL] 3 NumLooseInners['270',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['270',Pack3] demand_fit['270',S] 2 demand_fit['270',M] 4 NumLooseInners['270',Pack3] demand_fit['270',L] 3 demand_fit['270',XL] 3 NumLooseInners['272',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['272',Pack3] demand_fit['272',S] 2 demand_fit['272',M] 4 NumLooseInners['272',Pack3] demand_fit['272',L] 3 demand_fit['272',XL] 3 NumLooseInners['275',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['275',Pack3] demand_fit['275',S] 2 demand_fit['275',M] 4 NumLooseInners['275',Pack3] demand_fit['275',L] 3 demand_fit['275',XL] 3 NumLooseInners['276',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['276',Pack3] demand_fit['276',S] 2 demand_fit['276',M] 4 NumLooseInners['276',Pack3] demand_fit['276',L] 3 demand_fit['276',XL] 3 NumLooseInners['280',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['280',Pack3] demand_fit['280',S] 2 demand_fit['280',M] 4 NumLooseInners['280',Pack3] demand_fit['280',L] 3 demand_fit['280',XL] 3 NumLooseInners['282',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['282',Pack3] demand_fit['282',S] 2 demand_fit['282',M] 4 NumLooseInners['282',Pack3] demand_fit['282',L] 3 demand_fit['282',XL] 3 NumLooseInners['283',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['283',Pack3] demand_fit['283',S] 2 demand_fit['283',M] 4 NumLooseInners['283',Pack3] demand_fit['283',L] 3 demand_fit['283',XL] 3 NumLooseInners['293',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['293',Pack3] demand_fit['293',S] 2 demand_fit['293',M] 4 NumLooseInners['293',Pack3] demand_fit['293',L] 3 demand_fit['293',XL] 3 NumLooseInners['298',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['298',Pack3] demand_fit['298',S] 2 demand_fit['298',M] 4 NumLooseInners['298',Pack3] demand_fit['298',L] 3 demand_fit['298',XL] 3 NumLooseInners['299',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['299',Pack3] demand_fit['299',S] 2 demand_fit['299',M] 4 NumLooseInners['299',Pack3] demand_fit['299',L] 3 demand_fit['299',XL] 3 NumLooseInners['301',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['301',Pack3] demand_fit['301',S] 2 demand_fit['301',M] 4 NumLooseInners['301',Pack3] demand_fit['301',L] 3 demand_fit['301',XL] 3 NumLooseInners['309',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['309',Pack3] demand_fit['309',S] 2 demand_fit['309',M] 4 NumLooseInners['309',Pack3] demand_fit['309',L] 3 demand_fit['309',XL] 3 NumLooseInners['310',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['310',Pack3] demand_fit['310',S] 2 demand_fit['310',M] 4 NumLooseInners['310',Pack3] demand_fit['310',L] 3 demand_fit['310',XL] 3 NumLooseInners['375',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['375',Pack3] demand_fit['375',S] 2 demand_fit['375',M] 4 NumLooseInners['375',Pack3] demand_fit['375',L] 3 demand_fit['375',XL] 3 NumLooseInners['378',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['378',Pack3] demand_fit['378',S] 2 demand_fit['378',M] 4 NumLooseInners['378',Pack3] demand_fit['378',L] 3 demand_fit['378',XL] 3 NumLooseInners['379',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['379',Pack3] demand_fit['379',S] 2 demand_fit['379',M] 4 NumLooseInners['379',Pack3] demand_fit['379',L] 3 demand_fit['379',XL] 3 NumLooseInners['381',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['381',Pack3] demand_fit['381',S] 2 demand_fit['381',M] 4 NumLooseInners['381',Pack3] demand_fit['381',L] 3 demand_fit['381',XL] 3 NumLooseInners['383',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['383',Pack3] demand_fit['383',S] 2 demand_fit['383',M] 4 NumLooseInners['383',Pack3] demand_fit['383',L] 3 demand_fit['383',XL] 3 NumLooseInners['384',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['384',Pack3] demand_fit['384',S] 2 demand_fit['384',M] 4 NumLooseInners['384',Pack3] demand_fit['384',L] 3 demand_fit['384',XL] 3 NumLooseInners['386',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['386',Pack3] demand_fit['386',S] 2 demand_fit['386',M] 4 NumLooseInners['386',Pack3] demand_fit['386',L] 3 demand_fit['386',XL] 3 NumLooseInners['388',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['388',Pack3] demand_fit['388',S] 2 demand_fit['388',M] 4 NumLooseInners['388',Pack3] demand_fit['388',L] 3 demand_fit['388',XL] 3 NumLooseInners['389',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['389',Pack3] demand_fit['389',S] 2 demand_fit['389',M] 4 NumLooseInners['389',Pack3] demand_fit['389',L] 3 demand_fit['389',XL] 3 NumLooseInners['390',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['390',Pack3] demand_fit['390',S] 2 demand_fit['390',M] 4 NumLooseInners['390',Pack3] demand_fit['390',L] 3 demand_fit['390',XL] 3 NumLooseInners['397',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['397',Pack3] demand_fit['397',S] 2 demand_fit['397',M] 4 NumLooseInners['397',Pack3] demand_fit['397',L] 3 demand_fit['397',XL] 3 NumLooseInners['398',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['398',Pack3] demand_fit['398',S] 2 demand_fit['398',M] 4 NumLooseInners['398',Pack3] demand_fit['398',L] 3 demand_fit['398',XL] 3 NumLooseInners['403',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['403',Pack3] demand_fit['403',S] 2 demand_fit['403',M] 4 NumLooseInners['403',Pack3] demand_fit['403',L] 3 demand_fit['403',XL] 3 NumLooseInners['418',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['418',Pack3] demand_fit['418',S] 2 demand_fit['418',M] 4 NumLooseInners['418',Pack3] demand_fit['418',L] 3 demand_fit['418',XL] 3 NumLooseInners['430',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['430',Pack3] demand_fit['430',S] 2 demand_fit['430',M] 4 NumLooseInners['430',Pack3] demand_fit['430',L] 3 demand_fit['430',XL] 3 NumLooseInners['431',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['431',Pack3] demand_fit['431',S] 2 demand_fit['431',M] 4 NumLooseInners['431',Pack3] demand_fit['431',L] 3 demand_fit['431',XL] 3 NumLooseInners['479',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['479',Pack3] demand_fit['479',S] 2 demand_fit['479',M] 4 NumLooseInners['479',Pack3] demand_fit['479',L] 3 demand_fit['479',XL] 3 NumLooseInners['502',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['502',Pack3] demand_fit['502',S] 2 demand_fit['502',M] 4 NumLooseInners['502',Pack3] demand_fit['502',L] 3 demand_fit['502',XL] 3 NumLooseInners['504',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['504',Pack3] demand_fit['504',S] 2 demand_fit['504',M] 4 NumLooseInners['504',Pack3] demand_fit['504',L] 3 demand_fit['504',XL] 3 NumLooseInners['512',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['512',Pack3] demand_fit['512',S] 2 demand_fit['512',M] 4 NumLooseInners['512',Pack3] demand_fit['512',L] 3 demand_fit['512',XL] 3 NumLooseInners['528',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['528',Pack3] demand_fit['528',S] 2 demand_fit['528',M] 4 NumLooseInners['528',Pack3] demand_fit['528',L] 3 demand_fit['528',XL] 3 NumLooseInners['533',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['533',Pack3] demand_fit['533',S] 2 demand_fit['533',M] 4 NumLooseInners['533',Pack3] demand_fit['533',L] 3 demand_fit['533',XL] 3 NumLooseInners['538',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['538',Pack3] demand_fit['538',S] 2 demand_fit['538',M] 4 NumLooseInners['538',Pack3] demand_fit['538',L] 3 demand_fit['538',XL] 3 NumLooseInners['552',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['552',Pack3] demand_fit['552',S] 2 demand_fit['552',M] 4 NumLooseInners['552',Pack3] demand_fit['552',L] 3 demand_fit['552',XL] 3 NumLooseInners['621',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['621',Pack3] demand_fit['621',S] 2 demand_fit['621',M] 4 NumLooseInners['621',Pack3] demand_fit['621',L] 3 demand_fit['621',XL] 3 NumLooseInners['639',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['639',Pack3] demand_fit['639',S] 2 demand_fit['639',M] 4 NumLooseInners['639',Pack3] demand_fit['639',L] 3 demand_fit['639',XL] 3 NumLooseInners['712',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['712',Pack3] demand_fit['712',S] 2 demand_fit['712',M] 4 NumLooseInners['712',Pack3] demand_fit['712',L] 3 demand_fit['712',XL] 3 NumLooseInners['781',Pack3] TotalCost 0.5 material_balance[Pack3] 1 NumLooseInners['781',Pack3] demand_fit['781',S] 2 demand_fit['781',M] 4 NumLooseInners['781',Pack3] demand_fit['781',L] 3 demand_fit['781',XL] 3 NumUnopenedOuters['71',Pack1] TotalCost 1 demand_fit['71',S] 1 NumUnopenedOuters['71',Pack1] demand_fit['71',M] 3 demand_fit['71',L] 4 NumUnopenedOuters['71',Pack1] demand_fit['71',XL] 4 NumUnopenedOuters['73',Pack1] TotalCost 1 demand_fit['73',S] 1 NumUnopenedOuters['73',Pack1] demand_fit['73',M] 3 demand_fit['73',L] 4 NumUnopenedOuters['73',Pack1] demand_fit['73',XL] 4 NumUnopenedOuters['86',Pack1] TotalCost 1 demand_fit['86',S] 1 NumUnopenedOuters['86',Pack1] demand_fit['86',M] 3 demand_fit['86',L] 4 NumUnopenedOuters['86',Pack1] demand_fit['86',XL] 4 NumUnopenedOuters['99',Pack1] TotalCost 1 demand_fit['99',S] 1 NumUnopenedOuters['99',Pack1] demand_fit['99',M] 3 demand_fit['99',L] 4 NumUnopenedOuters['99',Pack1] demand_fit['99',XL] 4 NumUnopenedOuters['103',Pack1] TotalCost 1 demand_fit['103',S] 1 NumUnopenedOuters['103',Pack1] demand_fit['103',M] 3 demand_fit['103',L] 4 NumUnopenedOuters['103',Pack1] demand_fit['103',XL] 4 NumUnopenedOuters['126',Pack1] TotalCost 1 demand_fit['126',S] 1 NumUnopenedOuters['126',Pack1] demand_fit['126',M] 3 demand_fit['126',L] 4 NumUnopenedOuters['126',Pack1] demand_fit['126',XL] 4 NumUnopenedOuters['221',Pack1] TotalCost 1 demand_fit['221',S] 1 NumUnopenedOuters['221',Pack1] demand_fit['221',M] 3 demand_fit['221',L] 4 NumUnopenedOuters['221',Pack1] demand_fit['221',XL] 4 NumUnopenedOuters['225',Pack1] TotalCost 1 demand_fit['225',S] 1 NumUnopenedOuters['225',Pack1] demand_fit['225',M] 3 demand_fit['225',L] 4 NumUnopenedOuters['225',Pack1] demand_fit['225',XL] 4 NumUnopenedOuters['251',Pack1] TotalCost 1 demand_fit['251',S] 1 NumUnopenedOuters['251',Pack1] demand_fit['251',M] 3 demand_fit['251',L] 4 NumUnopenedOuters['251',Pack1] demand_fit['251',XL] 4 NumUnopenedOuters['270',Pack1] TotalCost 1 demand_fit['270',S] 1 NumUnopenedOuters['270',Pack1] demand_fit['270',M] 3 demand_fit['270',L] 4 NumUnopenedOuters['270',Pack1] demand_fit['270',XL] 4 NumUnopenedOuters['272',Pack1] TotalCost 1 demand_fit['272',S] 1 NumUnopenedOuters['272',Pack1] demand_fit['272',M] 3 demand_fit['272',L] 4 NumUnopenedOuters['272',Pack1] demand_fit['272',XL] 4 NumUnopenedOuters['275',Pack1] TotalCost 1 demand_fit['275',S] 1 NumUnopenedOuters['275',Pack1] demand_fit['275',M] 3 demand_fit['275',L] 4 NumUnopenedOuters['275',Pack1] demand_fit['275',XL] 4 NumUnopenedOuters['276',Pack1] TotalCost 1 demand_fit['276',S] 1 NumUnopenedOuters['276',Pack1] demand_fit['276',M] 3 demand_fit['276',L] 4 NumUnopenedOuters['276',Pack1] demand_fit['276',XL] 4 NumUnopenedOuters['280',Pack1] TotalCost 1 demand_fit['280',S] 1 NumUnopenedOuters['280',Pack1] demand_fit['280',M] 3 demand_fit['280',L] 4 NumUnopenedOuters['280',Pack1] demand_fit['280',XL] 4 NumUnopenedOuters['282',Pack1] TotalCost 1 demand_fit['282',S] 1 NumUnopenedOuters['282',Pack1] demand_fit['282',M] 3 demand_fit['282',L] 4 NumUnopenedOuters['282',Pack1] demand_fit['282',XL] 4 NumUnopenedOuters['283',Pack1] TotalCost 1 demand_fit['283',S] 1 NumUnopenedOuters['283',Pack1] demand_fit['283',M] 3 demand_fit['283',L] 4 NumUnopenedOuters['283',Pack1] demand_fit['283',XL] 4 NumUnopenedOuters['293',Pack1] TotalCost 1 demand_fit['293',S] 1 NumUnopenedOuters['293',Pack1] demand_fit['293',M] 3 demand_fit['293',L] 4 NumUnopenedOuters['293',Pack1] demand_fit['293',XL] 4 NumUnopenedOuters['298',Pack1] TotalCost 1 demand_fit['298',S] 1 NumUnopenedOuters['298',Pack1] demand_fit['298',M] 3 demand_fit['298',L] 4 NumUnopenedOuters['298',Pack1] demand_fit['298',XL] 4 NumUnopenedOuters['299',Pack1] TotalCost 1 demand_fit['299',S] 1 NumUnopenedOuters['299',Pack1] demand_fit['299',M] 3 demand_fit['299',L] 4 NumUnopenedOuters['299',Pack1] demand_fit['299',XL] 4 NumUnopenedOuters['301',Pack1] TotalCost 1 demand_fit['301',S] 1 NumUnopenedOuters['301',Pack1] demand_fit['301',M] 3 demand_fit['301',L] 4 NumUnopenedOuters['301',Pack1] demand_fit['301',XL] 4 NumUnopenedOuters['309',Pack1] TotalCost 1 demand_fit['309',S] 1 NumUnopenedOuters['309',Pack1] demand_fit['309',M] 3 demand_fit['309',L] 4 NumUnopenedOuters['309',Pack1] demand_fit['309',XL] 4 NumUnopenedOuters['310',Pack1] TotalCost 1 demand_fit['310',S] 1 NumUnopenedOuters['310',Pack1] demand_fit['310',M] 3 demand_fit['310',L] 4 NumUnopenedOuters['310',Pack1] demand_fit['310',XL] 4 NumUnopenedOuters['375',Pack1] TotalCost 1 demand_fit['375',S] 1 NumUnopenedOuters['375',Pack1] demand_fit['375',M] 3 demand_fit['375',L] 4 NumUnopenedOuters['375',Pack1] demand_fit['375',XL] 4 NumUnopenedOuters['378',Pack1] TotalCost 1 demand_fit['378',S] 1 NumUnopenedOuters['378',Pack1] demand_fit['378',M] 3 demand_fit['378',L] 4 NumUnopenedOuters['378',Pack1] demand_fit['378',XL] 4 NumUnopenedOuters['379',Pack1] TotalCost 1 demand_fit['379',S] 1 NumUnopenedOuters['379',Pack1] demand_fit['379',M] 3 demand_fit['379',L] 4 NumUnopenedOuters['379',Pack1] demand_fit['379',XL] 4 NumUnopenedOuters['381',Pack1] TotalCost 1 demand_fit['381',S] 1 NumUnopenedOuters['381',Pack1] demand_fit['381',M] 3 demand_fit['381',L] 4 NumUnopenedOuters['381',Pack1] demand_fit['381',XL] 4 NumUnopenedOuters['383',Pack1] TotalCost 1 demand_fit['383',S] 1 NumUnopenedOuters['383',Pack1] demand_fit['383',M] 3 demand_fit['383',L] 4 NumUnopenedOuters['383',Pack1] demand_fit['383',XL] 4 NumUnopenedOuters['384',Pack1] TotalCost 1 demand_fit['384',S] 1 NumUnopenedOuters['384',Pack1] demand_fit['384',M] 3 demand_fit['384',L] 4 NumUnopenedOuters['384',Pack1] demand_fit['384',XL] 4 NumUnopenedOuters['386',Pack1] TotalCost 1 demand_fit['386',S] 1 NumUnopenedOuters['386',Pack1] demand_fit['386',M] 3 demand_fit['386',L] 4 NumUnopenedOuters['386',Pack1] demand_fit['386',XL] 4 NumUnopenedOuters['388',Pack1] TotalCost 1 demand_fit['388',S] 1 NumUnopenedOuters['388',Pack1] demand_fit['388',M] 3 demand_fit['388',L] 4 NumUnopenedOuters['388',Pack1] demand_fit['388',XL] 4 NumUnopenedOuters['389',Pack1] TotalCost 1 demand_fit['389',S] 1 NumUnopenedOuters['389',Pack1] demand_fit['389',M] 3 demand_fit['389',L] 4 NumUnopenedOuters['389',Pack1] demand_fit['389',XL] 4 NumUnopenedOuters['390',Pack1] TotalCost 1 demand_fit['390',S] 1 NumUnopenedOuters['390',Pack1] demand_fit['390',M] 3 demand_fit['390',L] 4 NumUnopenedOuters['390',Pack1] demand_fit['390',XL] 4 NumUnopenedOuters['397',Pack1] TotalCost 1 demand_fit['397',S] 1 NumUnopenedOuters['397',Pack1] demand_fit['397',M] 3 demand_fit['397',L] 4 NumUnopenedOuters['397',Pack1] demand_fit['397',XL] 4 NumUnopenedOuters['398',Pack1] TotalCost 1 demand_fit['398',S] 1 NumUnopenedOuters['398',Pack1] demand_fit['398',M] 3 demand_fit['398',L] 4 NumUnopenedOuters['398',Pack1] demand_fit['398',XL] 4 NumUnopenedOuters['403',Pack1] TotalCost 1 demand_fit['403',S] 1 NumUnopenedOuters['403',Pack1] demand_fit['403',M] 3 demand_fit['403',L] 4 NumUnopenedOuters['403',Pack1] demand_fit['403',XL] 4 NumUnopenedOuters['418',Pack1] TotalCost 1 demand_fit['418',S] 1 NumUnopenedOuters['418',Pack1] demand_fit['418',M] 3 demand_fit['418',L] 4 NumUnopenedOuters['418',Pack1] demand_fit['418',XL] 4 NumUnopenedOuters['430',Pack1] TotalCost 1 demand_fit['430',S] 1 NumUnopenedOuters['430',Pack1] demand_fit['430',M] 3 demand_fit['430',L] 4 NumUnopenedOuters['430',Pack1] demand_fit['430',XL] 4 NumUnopenedOuters['431',Pack1] TotalCost 1 demand_fit['431',S] 1 NumUnopenedOuters['431',Pack1] demand_fit['431',M] 3 demand_fit['431',L] 4 NumUnopenedOuters['431',Pack1] demand_fit['431',XL] 4 NumUnopenedOuters['479',Pack1] TotalCost 1 demand_fit['479',S] 1 NumUnopenedOuters['479',Pack1] demand_fit['479',M] 3 demand_fit['479',L] 4 NumUnopenedOuters['479',Pack1] demand_fit['479',XL] 4 NumUnopenedOuters['502',Pack1] TotalCost 1 demand_fit['502',S] 1 NumUnopenedOuters['502',Pack1] demand_fit['502',M] 3 demand_fit['502',L] 4 NumUnopenedOuters['502',Pack1] demand_fit['502',XL] 4 NumUnopenedOuters['504',Pack1] TotalCost 1 demand_fit['504',S] 1 NumUnopenedOuters['504',Pack1] demand_fit['504',M] 3 demand_fit['504',L] 4 NumUnopenedOuters['504',Pack1] demand_fit['504',XL] 4 NumUnopenedOuters['512',Pack1] TotalCost 1 demand_fit['512',S] 1 NumUnopenedOuters['512',Pack1] demand_fit['512',M] 3 demand_fit['512',L] 4 NumUnopenedOuters['512',Pack1] demand_fit['512',XL] 4 NumUnopenedOuters['528',Pack1] TotalCost 1 demand_fit['528',S] 1 NumUnopenedOuters['528',Pack1] demand_fit['528',M] 3 demand_fit['528',L] 4 NumUnopenedOuters['528',Pack1] demand_fit['528',XL] 4 NumUnopenedOuters['533',Pack1] TotalCost 1 demand_fit['533',S] 1 NumUnopenedOuters['533',Pack1] demand_fit['533',M] 3 demand_fit['533',L] 4 NumUnopenedOuters['533',Pack1] demand_fit['533',XL] 4 NumUnopenedOuters['538',Pack1] TotalCost 1 demand_fit['538',S] 1 NumUnopenedOuters['538',Pack1] demand_fit['538',M] 3 demand_fit['538',L] 4 NumUnopenedOuters['538',Pack1] demand_fit['538',XL] 4 NumUnopenedOuters['552',Pack1] TotalCost 1 demand_fit['552',S] 1 NumUnopenedOuters['552',Pack1] demand_fit['552',M] 3 demand_fit['552',L] 4 NumUnopenedOuters['552',Pack1] demand_fit['552',XL] 4 NumUnopenedOuters['621',Pack1] TotalCost 1 demand_fit['621',S] 1 NumUnopenedOuters['621',Pack1] demand_fit['621',M] 3 demand_fit['621',L] 4 NumUnopenedOuters['621',Pack1] demand_fit['621',XL] 4 NumUnopenedOuters['639',Pack1] TotalCost 1 demand_fit['639',S] 1 NumUnopenedOuters['639',Pack1] demand_fit['639',M] 3 demand_fit['639',L] 4 NumUnopenedOuters['639',Pack1] demand_fit['639',XL] 4 NumUnopenedOuters['712',Pack1] TotalCost 1 demand_fit['712',S] 1 NumUnopenedOuters['712',Pack1] demand_fit['712',M] 3 demand_fit['712',L] 4 NumUnopenedOuters['712',Pack1] demand_fit['712',XL] 4 NumUnopenedOuters['781',Pack1] TotalCost 1 demand_fit['781',S] 1 NumUnopenedOuters['781',Pack1] demand_fit['781',M] 3 demand_fit['781',L] 4 NumUnopenedOuters['781',Pack1] demand_fit['781',XL] 4 NumUnopenedOuters['71',Pack2] TotalCost 1.5 demand_fit['71',S] 1 NumUnopenedOuters['71',Pack2] demand_fit['71',M] 2 demand_fit['71',L] 4 NumUnopenedOuters['71',Pack2] demand_fit['71',XL] 5 NumUnopenedOuters['73',Pack2] TotalCost 1.5 demand_fit['73',S] 1 NumUnopenedOuters['73',Pack2] demand_fit['73',M] 2 demand_fit['73',L] 4 NumUnopenedOuters['73',Pack2] demand_fit['73',XL] 5 NumUnopenedOuters['86',Pack2] TotalCost 1.5 demand_fit['86',S] 1 NumUnopenedOuters['86',Pack2] demand_fit['86',M] 2 demand_fit['86',L] 4 NumUnopenedOuters['86',Pack2] demand_fit['86',XL] 5 NumUnopenedOuters['99',Pack2] TotalCost 1.5 demand_fit['99',S] 1 NumUnopenedOuters['99',Pack2] demand_fit['99',M] 2 demand_fit['99',L] 4 NumUnopenedOuters['99',Pack2] demand_fit['99',XL] 5 NumUnopenedOuters['103',Pack2] TotalCost 1.5 demand_fit['103',S] 1 NumUnopenedOuters['103',Pack2] demand_fit['103',M] 2 demand_fit['103',L] 4 NumUnopenedOuters['103',Pack2] demand_fit['103',XL] 5 NumUnopenedOuters['126',Pack2] TotalCost 1.5 demand_fit['126',S] 1 NumUnopenedOuters['126',Pack2] demand_fit['126',M] 2 demand_fit['126',L] 4 NumUnopenedOuters['126',Pack2] demand_fit['126',XL] 5 NumUnopenedOuters['221',Pack2] TotalCost 1.5 demand_fit['221',S] 1 NumUnopenedOuters['221',Pack2] demand_fit['221',M] 2 demand_fit['221',L] 4 NumUnopenedOuters['221',Pack2] demand_fit['221',XL] 5 NumUnopenedOuters['225',Pack2] TotalCost 1.5 demand_fit['225',S] 1 NumUnopenedOuters['225',Pack2] demand_fit['225',M] 2 demand_fit['225',L] 4 NumUnopenedOuters['225',Pack2] demand_fit['225',XL] 5 NumUnopenedOuters['251',Pack2] TotalCost 1.5 demand_fit['251',S] 1 NumUnopenedOuters['251',Pack2] demand_fit['251',M] 2 demand_fit['251',L] 4 NumUnopenedOuters['251',Pack2] demand_fit['251',XL] 5 NumUnopenedOuters['270',Pack2] TotalCost 1.5 demand_fit['270',S] 1 NumUnopenedOuters['270',Pack2] demand_fit['270',M] 2 demand_fit['270',L] 4 NumUnopenedOuters['270',Pack2] demand_fit['270',XL] 5 NumUnopenedOuters['272',Pack2] TotalCost 1.5 demand_fit['272',S] 1 NumUnopenedOuters['272',Pack2] demand_fit['272',M] 2 demand_fit['272',L] 4 NumUnopenedOuters['272',Pack2] demand_fit['272',XL] 5 NumUnopenedOuters['275',Pack2] TotalCost 1.5 demand_fit['275',S] 1 NumUnopenedOuters['275',Pack2] demand_fit['275',M] 2 demand_fit['275',L] 4 NumUnopenedOuters['275',Pack2] demand_fit['275',XL] 5 NumUnopenedOuters['276',Pack2] TotalCost 1.5 demand_fit['276',S] 1 NumUnopenedOuters['276',Pack2] demand_fit['276',M] 2 demand_fit['276',L] 4 NumUnopenedOuters['276',Pack2] demand_fit['276',XL] 5 NumUnopenedOuters['280',Pack2] TotalCost 1.5 demand_fit['280',S] 1 NumUnopenedOuters['280',Pack2] demand_fit['280',M] 2 demand_fit['280',L] 4 NumUnopenedOuters['280',Pack2] demand_fit['280',XL] 5 NumUnopenedOuters['282',Pack2] TotalCost 1.5 demand_fit['282',S] 1 NumUnopenedOuters['282',Pack2] demand_fit['282',M] 2 demand_fit['282',L] 4 NumUnopenedOuters['282',Pack2] demand_fit['282',XL] 5 NumUnopenedOuters['283',Pack2] TotalCost 1.5 demand_fit['283',S] 1 NumUnopenedOuters['283',Pack2] demand_fit['283',M] 2 demand_fit['283',L] 4 NumUnopenedOuters['283',Pack2] demand_fit['283',XL] 5 NumUnopenedOuters['293',Pack2] TotalCost 1.5 demand_fit['293',S] 1 NumUnopenedOuters['293',Pack2] demand_fit['293',M] 2 demand_fit['293',L] 4 NumUnopenedOuters['293',Pack2] demand_fit['293',XL] 5 NumUnopenedOuters['298',Pack2] TotalCost 1.5 demand_fit['298',S] 1 NumUnopenedOuters['298',Pack2] demand_fit['298',M] 2 demand_fit['298',L] 4 NumUnopenedOuters['298',Pack2] demand_fit['298',XL] 5 NumUnopenedOuters['299',Pack2] TotalCost 1.5 demand_fit['299',S] 1 NumUnopenedOuters['299',Pack2] demand_fit['299',M] 2 demand_fit['299',L] 4 NumUnopenedOuters['299',Pack2] demand_fit['299',XL] 5 NumUnopenedOuters['301',Pack2] TotalCost 1.5 demand_fit['301',S] 1 NumUnopenedOuters['301',Pack2] demand_fit['301',M] 2 demand_fit['301',L] 4 NumUnopenedOuters['301',Pack2] demand_fit['301',XL] 5 NumUnopenedOuters['309',Pack2] TotalCost 1.5 demand_fit['309',S] 1 NumUnopenedOuters['309',Pack2] demand_fit['309',M] 2 demand_fit['309',L] 4 NumUnopenedOuters['309',Pack2] demand_fit['309',XL] 5 NumUnopenedOuters['310',Pack2] TotalCost 1.5 demand_fit['310',S] 1 NumUnopenedOuters['310',Pack2] demand_fit['310',M] 2 demand_fit['310',L] 4 NumUnopenedOuters['310',Pack2] demand_fit['310',XL] 5 NumUnopenedOuters['375',Pack2] TotalCost 1.5 demand_fit['375',S] 1 NumUnopenedOuters['375',Pack2] demand_fit['375',M] 2 demand_fit['375',L] 4 NumUnopenedOuters['375',Pack2] demand_fit['375',XL] 5 NumUnopenedOuters['378',Pack2] TotalCost 1.5 demand_fit['378',S] 1 NumUnopenedOuters['378',Pack2] demand_fit['378',M] 2 demand_fit['378',L] 4 NumUnopenedOuters['378',Pack2] demand_fit['378',XL] 5 NumUnopenedOuters['379',Pack2] TotalCost 1.5 demand_fit['379',S] 1 NumUnopenedOuters['379',Pack2] demand_fit['379',M] 2 demand_fit['379',L] 4 NumUnopenedOuters['379',Pack2] demand_fit['379',XL] 5 NumUnopenedOuters['381',Pack2] TotalCost 1.5 demand_fit['381',S] 1 NumUnopenedOuters['381',Pack2] demand_fit['381',M] 2 demand_fit['381',L] 4 NumUnopenedOuters['381',Pack2] demand_fit['381',XL] 5 NumUnopenedOuters['383',Pack2] TotalCost 1.5 demand_fit['383',S] 1 NumUnopenedOuters['383',Pack2] demand_fit['383',M] 2 demand_fit['383',L] 4 NumUnopenedOuters['383',Pack2] demand_fit['383',XL] 5 NumUnopenedOuters['384',Pack2] TotalCost 1.5 demand_fit['384',S] 1 NumUnopenedOuters['384',Pack2] demand_fit['384',M] 2 demand_fit['384',L] 4 NumUnopenedOuters['384',Pack2] demand_fit['384',XL] 5 NumUnopenedOuters['386',Pack2] TotalCost 1.5 demand_fit['386',S] 1 NumUnopenedOuters['386',Pack2] demand_fit['386',M] 2 demand_fit['386',L] 4 NumUnopenedOuters['386',Pack2] demand_fit['386',XL] 5 NumUnopenedOuters['388',Pack2] TotalCost 1.5 demand_fit['388',S] 1 NumUnopenedOuters['388',Pack2] demand_fit['388',M] 2 demand_fit['388',L] 4 NumUnopenedOuters['388',Pack2] demand_fit['388',XL] 5 NumUnopenedOuters['389',Pack2] TotalCost 1.5 demand_fit['389',S] 1 NumUnopenedOuters['389',Pack2] demand_fit['389',M] 2 demand_fit['389',L] 4 NumUnopenedOuters['389',Pack2] demand_fit['389',XL] 5 NumUnopenedOuters['390',Pack2] TotalCost 1.5 demand_fit['390',S] 1 NumUnopenedOuters['390',Pack2] demand_fit['390',M] 2 demand_fit['390',L] 4 NumUnopenedOuters['390',Pack2] demand_fit['390',XL] 5 NumUnopenedOuters['397',Pack2] TotalCost 1.5 demand_fit['397',S] 1 NumUnopenedOuters['397',Pack2] demand_fit['397',M] 2 demand_fit['397',L] 4 NumUnopenedOuters['397',Pack2] demand_fit['397',XL] 5 NumUnopenedOuters['398',Pack2] TotalCost 1.5 demand_fit['398',S] 1 NumUnopenedOuters['398',Pack2] demand_fit['398',M] 2 demand_fit['398',L] 4 NumUnopenedOuters['398',Pack2] demand_fit['398',XL] 5 NumUnopenedOuters['403',Pack2] TotalCost 1.5 demand_fit['403',S] 1 NumUnopenedOuters['403',Pack2] demand_fit['403',M] 2 demand_fit['403',L] 4 NumUnopenedOuters['403',Pack2] demand_fit['403',XL] 5 NumUnopenedOuters['418',Pack2] TotalCost 1.5 demand_fit['418',S] 1 NumUnopenedOuters['418',Pack2] demand_fit['418',M] 2 demand_fit['418',L] 4 NumUnopenedOuters['418',Pack2] demand_fit['418',XL] 5 NumUnopenedOuters['430',Pack2] TotalCost 1.5 demand_fit['430',S] 1 NumUnopenedOuters['430',Pack2] demand_fit['430',M] 2 demand_fit['430',L] 4 NumUnopenedOuters['430',Pack2] demand_fit['430',XL] 5 NumUnopenedOuters['431',Pack2] TotalCost 1.5 demand_fit['431',S] 1 NumUnopenedOuters['431',Pack2] demand_fit['431',M] 2 demand_fit['431',L] 4 NumUnopenedOuters['431',Pack2] demand_fit['431',XL] 5 NumUnopenedOuters['479',Pack2] TotalCost 1.5 demand_fit['479',S] 1 NumUnopenedOuters['479',Pack2] demand_fit['479',M] 2 demand_fit['479',L] 4 NumUnopenedOuters['479',Pack2] demand_fit['479',XL] 5 NumUnopenedOuters['502',Pack2] TotalCost 1.5 demand_fit['502',S] 1 NumUnopenedOuters['502',Pack2] demand_fit['502',M] 2 demand_fit['502',L] 4 NumUnopenedOuters['502',Pack2] demand_fit['502',XL] 5 NumUnopenedOuters['504',Pack2] TotalCost 1.5 demand_fit['504',S] 1 NumUnopenedOuters['504',Pack2] demand_fit['504',M] 2 demand_fit['504',L] 4 NumUnopenedOuters['504',Pack2] demand_fit['504',XL] 5 NumUnopenedOuters['512',Pack2] TotalCost 1.5 demand_fit['512',S] 1 NumUnopenedOuters['512',Pack2] demand_fit['512',M] 2 demand_fit['512',L] 4 NumUnopenedOuters['512',Pack2] demand_fit['512',XL] 5 NumUnopenedOuters['528',Pack2] TotalCost 1.5 demand_fit['528',S] 1 NumUnopenedOuters['528',Pack2] demand_fit['528',M] 2 demand_fit['528',L] 4 NumUnopenedOuters['528',Pack2] demand_fit['528',XL] 5 NumUnopenedOuters['533',Pack2] TotalCost 1.5 demand_fit['533',S] 1 NumUnopenedOuters['533',Pack2] demand_fit['533',M] 2 demand_fit['533',L] 4 NumUnopenedOuters['533',Pack2] demand_fit['533',XL] 5 NumUnopenedOuters['538',Pack2] TotalCost 1.5 demand_fit['538',S] 1 NumUnopenedOuters['538',Pack2] demand_fit['538',M] 2 demand_fit['538',L] 4 NumUnopenedOuters['538',Pack2] demand_fit['538',XL] 5 NumUnopenedOuters['552',Pack2] TotalCost 1.5 demand_fit['552',S] 1 NumUnopenedOuters['552',Pack2] demand_fit['552',M] 2 demand_fit['552',L] 4 NumUnopenedOuters['552',Pack2] demand_fit['552',XL] 5 NumUnopenedOuters['621',Pack2] TotalCost 1.5 demand_fit['621',S] 1 NumUnopenedOuters['621',Pack2] demand_fit['621',M] 2 demand_fit['621',L] 4 NumUnopenedOuters['621',Pack2] demand_fit['621',XL] 5 NumUnopenedOuters['639',Pack2] TotalCost 1.5 demand_fit['639',S] 1 NumUnopenedOuters['639',Pack2] demand_fit['639',M] 2 demand_fit['639',L] 4 NumUnopenedOuters['639',Pack2] demand_fit['639',XL] 5 NumUnopenedOuters['712',Pack2] TotalCost 1.5 demand_fit['712',S] 1 NumUnopenedOuters['712',Pack2] demand_fit['712',M] 2 demand_fit['712',L] 4 NumUnopenedOuters['712',Pack2] demand_fit['712',XL] 5 NumUnopenedOuters['781',Pack2] TotalCost 1.5 demand_fit['781',S] 1 NumUnopenedOuters['781',Pack2] demand_fit['781',M] 2 demand_fit['781',L] 4 NumUnopenedOuters['781',Pack2] demand_fit['781',XL] 5 NumUnopenedOuters['71',Pack3] TotalCost 0.5 demand_fit['71',S] 2 NumUnopenedOuters['71',Pack3] demand_fit['71',M] 4 demand_fit['71',L] 3 NumUnopenedOuters['71',Pack3] demand_fit['71',XL] 3 NumUnopenedOuters['73',Pack3] TotalCost 0.5 demand_fit['73',S] 2 NumUnopenedOuters['73',Pack3] demand_fit['73',M] 4 demand_fit['73',L] 3 NumUnopenedOuters['73',Pack3] demand_fit['73',XL] 3 NumUnopenedOuters['86',Pack3] TotalCost 0.5 demand_fit['86',S] 2 NumUnopenedOuters['86',Pack3] demand_fit['86',M] 4 demand_fit['86',L] 3 NumUnopenedOuters['86',Pack3] demand_fit['86',XL] 3 NumUnopenedOuters['99',Pack3] TotalCost 0.5 demand_fit['99',S] 2 NumUnopenedOuters['99',Pack3] demand_fit['99',M] 4 demand_fit['99',L] 3 NumUnopenedOuters['99',Pack3] demand_fit['99',XL] 3 NumUnopenedOuters['103',Pack3] TotalCost 0.5 demand_fit['103',S] 2 NumUnopenedOuters['103',Pack3] demand_fit['103',M] 4 demand_fit['103',L] 3 NumUnopenedOuters['103',Pack3] demand_fit['103',XL] 3 NumUnopenedOuters['126',Pack3] TotalCost 0.5 demand_fit['126',S] 2 NumUnopenedOuters['126',Pack3] demand_fit['126',M] 4 demand_fit['126',L] 3 NumUnopenedOuters['126',Pack3] demand_fit['126',XL] 3 NumUnopenedOuters['221',Pack3] TotalCost 0.5 demand_fit['221',S] 2 NumUnopenedOuters['221',Pack3] demand_fit['221',M] 4 demand_fit['221',L] 3 NumUnopenedOuters['221',Pack3] demand_fit['221',XL] 3 NumUnopenedOuters['225',Pack3] TotalCost 0.5 demand_fit['225',S] 2 NumUnopenedOuters['225',Pack3] demand_fit['225',M] 4 demand_fit['225',L] 3 NumUnopenedOuters['225',Pack3] demand_fit['225',XL] 3 NumUnopenedOuters['251',Pack3] TotalCost 0.5 demand_fit['251',S] 2 NumUnopenedOuters['251',Pack3] demand_fit['251',M] 4 demand_fit['251',L] 3 NumUnopenedOuters['251',Pack3] demand_fit['251',XL] 3 NumUnopenedOuters['270',Pack3] TotalCost 0.5 demand_fit['270',S] 2 NumUnopenedOuters['270',Pack3] demand_fit['270',M] 4 demand_fit['270',L] 3 NumUnopenedOuters['270',Pack3] demand_fit['270',XL] 3 NumUnopenedOuters['272',Pack3] TotalCost 0.5 demand_fit['272',S] 2 NumUnopenedOuters['272',Pack3] demand_fit['272',M] 4 demand_fit['272',L] 3 NumUnopenedOuters['272',Pack3] demand_fit['272',XL] 3 NumUnopenedOuters['275',Pack3] TotalCost 0.5 demand_fit['275',S] 2 NumUnopenedOuters['275',Pack3] demand_fit['275',M] 4 demand_fit['275',L] 3 NumUnopenedOuters['275',Pack3] demand_fit['275',XL] 3 NumUnopenedOuters['276',Pack3] TotalCost 0.5 demand_fit['276',S] 2 NumUnopenedOuters['276',Pack3] demand_fit['276',M] 4 demand_fit['276',L] 3 NumUnopenedOuters['276',Pack3] demand_fit['276',XL] 3 NumUnopenedOuters['280',Pack3] TotalCost 0.5 demand_fit['280',S] 2 NumUnopenedOuters['280',Pack3] demand_fit['280',M] 4 demand_fit['280',L] 3 NumUnopenedOuters['280',Pack3] demand_fit['280',XL] 3 NumUnopenedOuters['282',Pack3] TotalCost 0.5 demand_fit['282',S] 2 NumUnopenedOuters['282',Pack3] demand_fit['282',M] 4 demand_fit['282',L] 3 NumUnopenedOuters['282',Pack3] demand_fit['282',XL] 3 NumUnopenedOuters['283',Pack3] TotalCost 0.5 demand_fit['283',S] 2 NumUnopenedOuters['283',Pack3] demand_fit['283',M] 4 demand_fit['283',L] 3 NumUnopenedOuters['283',Pack3] demand_fit['283',XL] 3 NumUnopenedOuters['293',Pack3] TotalCost 0.5 demand_fit['293',S] 2 NumUnopenedOuters['293',Pack3] demand_fit['293',M] 4 demand_fit['293',L] 3 NumUnopenedOuters['293',Pack3] demand_fit['293',XL] 3 NumUnopenedOuters['298',Pack3] TotalCost 0.5 demand_fit['298',S] 2 NumUnopenedOuters['298',Pack3] demand_fit['298',M] 4 demand_fit['298',L] 3 NumUnopenedOuters['298',Pack3] demand_fit['298',XL] 3 NumUnopenedOuters['299',Pack3] TotalCost 0.5 demand_fit['299',S] 2 NumUnopenedOuters['299',Pack3] demand_fit['299',M] 4 demand_fit['299',L] 3 NumUnopenedOuters['299',Pack3] demand_fit['299',XL] 3 NumUnopenedOuters['301',Pack3] TotalCost 0.5 demand_fit['301',S] 2 NumUnopenedOuters['301',Pack3] demand_fit['301',M] 4 demand_fit['301',L] 3 NumUnopenedOuters['301',Pack3] demand_fit['301',XL] 3 NumUnopenedOuters['309',Pack3] TotalCost 0.5 demand_fit['309',S] 2 NumUnopenedOuters['309',Pack3] demand_fit['309',M] 4 demand_fit['309',L] 3 NumUnopenedOuters['309',Pack3] demand_fit['309',XL] 3 NumUnopenedOuters['310',Pack3] TotalCost 0.5 demand_fit['310',S] 2 NumUnopenedOuters['310',Pack3] demand_fit['310',M] 4 demand_fit['310',L] 3 NumUnopenedOuters['310',Pack3] demand_fit['310',XL] 3 NumUnopenedOuters['375',Pack3] TotalCost 0.5 demand_fit['375',S] 2 NumUnopenedOuters['375',Pack3] demand_fit['375',M] 4 demand_fit['375',L] 3 NumUnopenedOuters['375',Pack3] demand_fit['375',XL] 3 NumUnopenedOuters['378',Pack3] TotalCost 0.5 demand_fit['378',S] 2 NumUnopenedOuters['378',Pack3] demand_fit['378',M] 4 demand_fit['378',L] 3 NumUnopenedOuters['378',Pack3] demand_fit['378',XL] 3 NumUnopenedOuters['379',Pack3] TotalCost 0.5 demand_fit['379',S] 2 NumUnopenedOuters['379',Pack3] demand_fit['379',M] 4 demand_fit['379',L] 3 NumUnopenedOuters['379',Pack3] demand_fit['379',XL] 3 NumUnopenedOuters['381',Pack3] TotalCost 0.5 demand_fit['381',S] 2 NumUnopenedOuters['381',Pack3] demand_fit['381',M] 4 demand_fit['381',L] 3 NumUnopenedOuters['381',Pack3] demand_fit['381',XL] 3 NumUnopenedOuters['383',Pack3] TotalCost 0.5 demand_fit['383',S] 2 NumUnopenedOuters['383',Pack3] demand_fit['383',M] 4 demand_fit['383',L] 3 NumUnopenedOuters['383',Pack3] demand_fit['383',XL] 3 NumUnopenedOuters['384',Pack3] TotalCost 0.5 demand_fit['384',S] 2 NumUnopenedOuters['384',Pack3] demand_fit['384',M] 4 demand_fit['384',L] 3 NumUnopenedOuters['384',Pack3] demand_fit['384',XL] 3 NumUnopenedOuters['386',Pack3] TotalCost 0.5 demand_fit['386',S] 2 NumUnopenedOuters['386',Pack3] demand_fit['386',M] 4 demand_fit['386',L] 3 NumUnopenedOuters['386',Pack3] demand_fit['386',XL] 3 NumUnopenedOuters['388',Pack3] TotalCost 0.5 demand_fit['388',S] 2 NumUnopenedOuters['388',Pack3] demand_fit['388',M] 4 demand_fit['388',L] 3 NumUnopenedOuters['388',Pack3] demand_fit['388',XL] 3 NumUnopenedOuters['389',Pack3] TotalCost 0.5 demand_fit['389',S] 2 NumUnopenedOuters['389',Pack3] demand_fit['389',M] 4 demand_fit['389',L] 3 NumUnopenedOuters['389',Pack3] demand_fit['389',XL] 3 NumUnopenedOuters['390',Pack3] TotalCost 0.5 demand_fit['390',S] 2 NumUnopenedOuters['390',Pack3] demand_fit['390',M] 4 demand_fit['390',L] 3 NumUnopenedOuters['390',Pack3] demand_fit['390',XL] 3 NumUnopenedOuters['397',Pack3] TotalCost 0.5 demand_fit['397',S] 2 NumUnopenedOuters['397',Pack3] demand_fit['397',M] 4 demand_fit['397',L] 3 NumUnopenedOuters['397',Pack3] demand_fit['397',XL] 3 NumUnopenedOuters['398',Pack3] TotalCost 0.5 demand_fit['398',S] 2 NumUnopenedOuters['398',Pack3] demand_fit['398',M] 4 demand_fit['398',L] 3 NumUnopenedOuters['398',Pack3] demand_fit['398',XL] 3 NumUnopenedOuters['403',Pack3] TotalCost 0.5 demand_fit['403',S] 2 NumUnopenedOuters['403',Pack3] demand_fit['403',M] 4 demand_fit['403',L] 3 NumUnopenedOuters['403',Pack3] demand_fit['403',XL] 3 NumUnopenedOuters['418',Pack3] TotalCost 0.5 demand_fit['418',S] 2 NumUnopenedOuters['418',Pack3] demand_fit['418',M] 4 demand_fit['418',L] 3 NumUnopenedOuters['418',Pack3] demand_fit['418',XL] 3 NumUnopenedOuters['430',Pack3] TotalCost 0.5 demand_fit['430',S] 2 NumUnopenedOuters['430',Pack3] demand_fit['430',M] 4 demand_fit['430',L] 3 NumUnopenedOuters['430',Pack3] demand_fit['430',XL] 3 NumUnopenedOuters['431',Pack3] TotalCost 0.5 demand_fit['431',S] 2 NumUnopenedOuters['431',Pack3] demand_fit['431',M] 4 demand_fit['431',L] 3 NumUnopenedOuters['431',Pack3] demand_fit['431',XL] 3 NumUnopenedOuters['479',Pack3] TotalCost 0.5 demand_fit['479',S] 2 NumUnopenedOuters['479',Pack3] demand_fit['479',M] 4 demand_fit['479',L] 3 NumUnopenedOuters['479',Pack3] demand_fit['479',XL] 3 NumUnopenedOuters['502',Pack3] TotalCost 0.5 demand_fit['502',S] 2 NumUnopenedOuters['502',Pack3] demand_fit['502',M] 4 demand_fit['502',L] 3 NumUnopenedOuters['502',Pack3] demand_fit['502',XL] 3 NumUnopenedOuters['504',Pack3] TotalCost 0.5 demand_fit['504',S] 2 NumUnopenedOuters['504',Pack3] demand_fit['504',M] 4 demand_fit['504',L] 3 NumUnopenedOuters['504',Pack3] demand_fit['504',XL] 3 NumUnopenedOuters['512',Pack3] TotalCost 0.5 demand_fit['512',S] 2 NumUnopenedOuters['512',Pack3] demand_fit['512',M] 4 demand_fit['512',L] 3 NumUnopenedOuters['512',Pack3] demand_fit['512',XL] 3 NumUnopenedOuters['528',Pack3] TotalCost 0.5 demand_fit['528',S] 2 NumUnopenedOuters['528',Pack3] demand_fit['528',M] 4 demand_fit['528',L] 3 NumUnopenedOuters['528',Pack3] demand_fit['528',XL] 3 NumUnopenedOuters['533',Pack3] TotalCost 0.5 demand_fit['533',S] 2 NumUnopenedOuters['533',Pack3] demand_fit['533',M] 4 demand_fit['533',L] 3 NumUnopenedOuters['533',Pack3] demand_fit['533',XL] 3 NumUnopenedOuters['538',Pack3] TotalCost 0.5 demand_fit['538',S] 2 NumUnopenedOuters['538',Pack3] demand_fit['538',M] 4 demand_fit['538',L] 3 NumUnopenedOuters['538',Pack3] demand_fit['538',XL] 3 NumUnopenedOuters['552',Pack3] TotalCost 0.5 demand_fit['552',S] 2 NumUnopenedOuters['552',Pack3] demand_fit['552',M] 4 demand_fit['552',L] 3 NumUnopenedOuters['552',Pack3] demand_fit['552',XL] 3 NumUnopenedOuters['621',Pack3] TotalCost 0.5 demand_fit['621',S] 2 NumUnopenedOuters['621',Pack3] demand_fit['621',M] 4 demand_fit['621',L] 3 NumUnopenedOuters['621',Pack3] demand_fit['621',XL] 3 NumUnopenedOuters['639',Pack3] TotalCost 0.5 demand_fit['639',S] 2 NumUnopenedOuters['639',Pack3] demand_fit['639',M] 4 demand_fit['639',L] 3 NumUnopenedOuters['639',Pack3] demand_fit['639',XL] 3 NumUnopenedOuters['712',Pack3] TotalCost 0.5 demand_fit['712',S] 2 NumUnopenedOuters['712',Pack3] demand_fit['712',M] 4 demand_fit['712',L] 3 NumUnopenedOuters['712',Pack3] demand_fit['712',XL] 3 NumUnopenedOuters['781',Pack3] TotalCost 0.5 demand_fit['781',S] 2 NumUnopenedOuters['781',Pack3] demand_fit['781',M] 4 demand_fit['781',L] 3 NumUnopenedOuters['781',Pack3] demand_fit['781',XL] 3 NumOpenedOuters[Pack1] TotalCost 1 material_balance[Pack1] -1 NumOpenedOuters[Pack2] TotalCost 1 material_balance[Pack2] -1 NumOpenedOuters[Pack3] TotalCost 1 material_balance[Pack3] -1 .MRK0001 'MARKER' 'INTEND' NumOver['71',S] TotalCost 1 demand_fit['71',S] -1 NumOver['73',S] TotalCost 1 demand_fit['73',S] -1 NumOver['86',S] TotalCost 1 demand_fit['86',S] -1 NumOver['99',S] TotalCost 1 demand_fit['99',S] -1 NumOver['103',S] TotalCost 1 demand_fit['103',S] -1 NumOver['126',S] TotalCost 1 demand_fit['126',S] -1 NumOver['221',S] TotalCost 1 demand_fit['221',S] -1 NumOver['225',S] TotalCost 1 demand_fit['225',S] -1 NumOver['251',S] TotalCost 1 demand_fit['251',S] -1 NumOver['270',S] TotalCost 1 demand_fit['270',S] -1 NumOver['272',S] TotalCost 1 demand_fit['272',S] -1 NumOver['275',S] TotalCost 1 demand_fit['275',S] -1 NumOver['276',S] TotalCost 1 demand_fit['276',S] -1 NumOver['280',S] TotalCost 1 demand_fit['280',S] -1 NumOver['282',S] TotalCost 1 demand_fit['282',S] -1 NumOver['283',S] TotalCost 1 demand_fit['283',S] -1 NumOver['293',S] TotalCost 1 demand_fit['293',S] -1 NumOver['298',S] TotalCost 1 demand_fit['298',S] -1 NumOver['299',S] TotalCost 1 demand_fit['299',S] -1 NumOver['301',S] TotalCost 1 demand_fit['301',S] -1 NumOver['309',S] TotalCost 1 demand_fit['309',S] -1 NumOver['310',S] TotalCost 1 demand_fit['310',S] -1 NumOver['375',S] TotalCost 1 demand_fit['375',S] -1 NumOver['378',S] TotalCost 1 demand_fit['378',S] -1 NumOver['379',S] TotalCost 1 demand_fit['379',S] -1 NumOver['381',S] TotalCost 1 demand_fit['381',S] -1 NumOver['383',S] TotalCost 1 demand_fit['383',S] -1 NumOver['384',S] TotalCost 1 demand_fit['384',S] -1 NumOver['386',S] TotalCost 1 demand_fit['386',S] -1 NumOver['388',S] TotalCost 1 demand_fit['388',S] -1 NumOver['389',S] TotalCost 1 demand_fit['389',S] -1 NumOver['390',S] TotalCost 1 demand_fit['390',S] -1 NumOver['397',S] TotalCost 1 demand_fit['397',S] -1 NumOver['398',S] TotalCost 1 demand_fit['398',S] -1 NumOver['403',S] TotalCost 1 demand_fit['403',S] -1 NumOver['418',S] TotalCost 1 demand_fit['418',S] -1 NumOver['430',S] TotalCost 1 demand_fit['430',S] -1 NumOver['431',S] TotalCost 1 demand_fit['431',S] -1 NumOver['479',S] TotalCost 1 demand_fit['479',S] -1 NumOver['502',S] TotalCost 1 demand_fit['502',S] -1 NumOver['504',S] TotalCost 1 demand_fit['504',S] -1 NumOver['512',S] TotalCost 1 demand_fit['512',S] -1 NumOver['528',S] TotalCost 1 demand_fit['528',S] -1 NumOver['533',S] TotalCost 1 demand_fit['533',S] -1 NumOver['538',S] TotalCost 1 demand_fit['538',S] -1 NumOver['552',S] TotalCost 1 demand_fit['552',S] -1 NumOver['621',S] TotalCost 1 demand_fit['621',S] -1 NumOver['639',S] TotalCost 1 demand_fit['639',S] -1 NumOver['712',S] TotalCost 1 demand_fit['712',S] -1 NumOver['781',S] TotalCost 1 demand_fit['781',S] -1 NumOver['71',M] TotalCost 1 demand_fit['71',M] -1 NumOver['73',M] TotalCost 1 demand_fit['73',M] -1 NumOver['86',M] TotalCost 1 demand_fit['86',M] -1 NumOver['99',M] TotalCost 1 demand_fit['99',M] -1 NumOver['103',M] TotalCost 1 demand_fit['103',M] -1 NumOver['126',M] TotalCost 1 demand_fit['126',M] -1 NumOver['221',M] TotalCost 1 demand_fit['221',M] -1 NumOver['225',M] TotalCost 1 demand_fit['225',M] -1 NumOver['251',M] TotalCost 1 demand_fit['251',M] -1 NumOver['270',M] TotalCost 1 demand_fit['270',M] -1 NumOver['272',M] TotalCost 1 demand_fit['272',M] -1 NumOver['275',M] TotalCost 1 demand_fit['275',M] -1 NumOver['276',M] TotalCost 1 demand_fit['276',M] -1 NumOver['280',M] TotalCost 1 demand_fit['280',M] -1 NumOver['282',M] TotalCost 1 demand_fit['282',M] -1 NumOver['283',M] TotalCost 1 demand_fit['283',M] -1 NumOver['293',M] TotalCost 1 demand_fit['293',M] -1 NumOver['298',M] TotalCost 1 demand_fit['298',M] -1 NumOver['299',M] TotalCost 1 demand_fit['299',M] -1 NumOver['301',M] TotalCost 1 demand_fit['301',M] -1 NumOver['309',M] TotalCost 1 demand_fit['309',M] -1 NumOver['310',M] TotalCost 1 demand_fit['310',M] -1 NumOver['375',M] TotalCost 1 demand_fit['375',M] -1 NumOver['378',M] TotalCost 1 demand_fit['378',M] -1 NumOver['379',M] TotalCost 1 demand_fit['379',M] -1 NumOver['381',M] TotalCost 1 demand_fit['381',M] -1 NumOver['383',M] TotalCost 1 demand_fit['383',M] -1 NumOver['384',M] TotalCost 1 demand_fit['384',M] -1 NumOver['386',M] TotalCost 1 demand_fit['386',M] -1 NumOver['388',M] TotalCost 1 demand_fit['388',M] -1 NumOver['389',M] TotalCost 1 demand_fit['389',M] -1 NumOver['390',M] TotalCost 1 demand_fit['390',M] -1 NumOver['397',M] TotalCost 1 demand_fit['397',M] -1 NumOver['398',M] TotalCost 1 demand_fit['398',M] -1 NumOver['403',M] TotalCost 1 demand_fit['403',M] -1 NumOver['418',M] TotalCost 1 demand_fit['418',M] -1 NumOver['430',M] TotalCost 1 demand_fit['430',M] -1 NumOver['431',M] TotalCost 1 demand_fit['431',M] -1 NumOver['479',M] TotalCost 1 demand_fit['479',M] -1 NumOver['502',M] TotalCost 1 demand_fit['502',M] -1 NumOver['504',M] TotalCost 1 demand_fit['504',M] -1 NumOver['512',M] TotalCost 1 demand_fit['512',M] -1 NumOver['528',M] TotalCost 1 demand_fit['528',M] -1 NumOver['533',M] TotalCost 1 demand_fit['533',M] -1 NumOver['538',M] TotalCost 1 demand_fit['538',M] -1 NumOver['552',M] TotalCost 1 demand_fit['552',M] -1 NumOver['621',M] TotalCost 1 demand_fit['621',M] -1 NumOver['639',M] TotalCost 1 demand_fit['639',M] -1 NumOver['712',M] TotalCost 1 demand_fit['712',M] -1 NumOver['781',M] TotalCost 1 demand_fit['781',M] -1 NumOver['71',L] TotalCost 1 demand_fit['71',L] -1 NumOver['73',L] TotalCost 1 demand_fit['73',L] -1 NumOver['86',L] TotalCost 1 demand_fit['86',L] -1 NumOver['99',L] TotalCost 1 demand_fit['99',L] -1 NumOver['103',L] TotalCost 1 demand_fit['103',L] -1 NumOver['126',L] TotalCost 1 demand_fit['126',L] -1 NumOver['221',L] TotalCost 1 demand_fit['221',L] -1 NumOver['225',L] TotalCost 1 demand_fit['225',L] -1 NumOver['251',L] TotalCost 1 demand_fit['251',L] -1 NumOver['270',L] TotalCost 1 demand_fit['270',L] -1 NumOver['272',L] TotalCost 1 demand_fit['272',L] -1 NumOver['275',L] TotalCost 1 demand_fit['275',L] -1 NumOver['276',L] TotalCost 1 demand_fit['276',L] -1 NumOver['280',L] TotalCost 1 demand_fit['280',L] -1 NumOver['282',L] TotalCost 1 demand_fit['282',L] -1 NumOver['283',L] TotalCost 1 demand_fit['283',L] -1 NumOver['293',L] TotalCost 1 demand_fit['293',L] -1 NumOver['298',L] TotalCost 1 demand_fit['298',L] -1 NumOver['299',L] TotalCost 1 demand_fit['299',L] -1 NumOver['301',L] TotalCost 1 demand_fit['301',L] -1 NumOver['309',L] TotalCost 1 demand_fit['309',L] -1 NumOver['310',L] TotalCost 1 demand_fit['310',L] -1 NumOver['375',L] TotalCost 1 demand_fit['375',L] -1 NumOver['378',L] TotalCost 1 demand_fit['378',L] -1 NumOver['379',L] TotalCost 1 demand_fit['379',L] -1 NumOver['381',L] TotalCost 1 demand_fit['381',L] -1 NumOver['383',L] TotalCost 1 demand_fit['383',L] -1 NumOver['384',L] TotalCost 1 demand_fit['384',L] -1 NumOver['386',L] TotalCost 1 demand_fit['386',L] -1 NumOver['388',L] TotalCost 1 demand_fit['388',L] -1 NumOver['389',L] TotalCost 1 demand_fit['389',L] -1 NumOver['390',L] TotalCost 1 demand_fit['390',L] -1 NumOver['397',L] TotalCost 1 demand_fit['397',L] -1 NumOver['398',L] TotalCost 1 demand_fit['398',L] -1 NumOver['403',L] TotalCost 1 demand_fit['403',L] -1 NumOver['418',L] TotalCost 1 demand_fit['418',L] -1 NumOver['430',L] TotalCost 1 demand_fit['430',L] -1 NumOver['431',L] TotalCost 1 demand_fit['431',L] -1 NumOver['479',L] TotalCost 1 demand_fit['479',L] -1 NumOver['502',L] TotalCost 1 demand_fit['502',L] -1 NumOver['504',L] TotalCost 1 demand_fit['504',L] -1 NumOver['512',L] TotalCost 1 demand_fit['512',L] -1 NumOver['528',L] TotalCost 1 demand_fit['528',L] -1 NumOver['533',L] TotalCost 1 demand_fit['533',L] -1 NumOver['538',L] TotalCost 1 demand_fit['538',L] -1 NumOver['552',L] TotalCost 1 demand_fit['552',L] -1 NumOver['621',L] TotalCost 1 demand_fit['621',L] -1 NumOver['639',L] TotalCost 1 demand_fit['639',L] -1 NumOver['712',L] TotalCost 1 demand_fit['712',L] -1 NumOver['781',L] TotalCost 1 demand_fit['781',L] -1 NumOver['71',XL] TotalCost 1 demand_fit['71',XL] -1 NumOver['73',XL] TotalCost 1 demand_fit['73',XL] -1 NumOver['86',XL] TotalCost 1 demand_fit['86',XL] -1 NumOver['99',XL] TotalCost 1 demand_fit['99',XL] -1 NumOver['103',XL] TotalCost 1 demand_fit['103',XL] -1 NumOver['126',XL] TotalCost 1 demand_fit['126',XL] -1 NumOver['221',XL] TotalCost 1 demand_fit['221',XL] -1 NumOver['225',XL] TotalCost 1 demand_fit['225',XL] -1 NumOver['251',XL] TotalCost 1 demand_fit['251',XL] -1 NumOver['270',XL] TotalCost 1 demand_fit['270',XL] -1 NumOver['272',XL] TotalCost 1 demand_fit['272',XL] -1 NumOver['275',XL] TotalCost 1 demand_fit['275',XL] -1 NumOver['276',XL] TotalCost 1 demand_fit['276',XL] -1 NumOver['280',XL] TotalCost 1 demand_fit['280',XL] -1 NumOver['282',XL] TotalCost 1 demand_fit['282',XL] -1 NumOver['283',XL] TotalCost 1 demand_fit['283',XL] -1 NumOver['293',XL] TotalCost 1 demand_fit['293',XL] -1 NumOver['298',XL] TotalCost 1 demand_fit['298',XL] -1 NumOver['299',XL] TotalCost 1 demand_fit['299',XL] -1 NumOver['301',XL] TotalCost 1 demand_fit['301',XL] -1 NumOver['309',XL] TotalCost 1 demand_fit['309',XL] -1 NumOver['310',XL] TotalCost 1 demand_fit['310',XL] -1 NumOver['375',XL] TotalCost 1 demand_fit['375',XL] -1 NumOver['378',XL] TotalCost 1 demand_fit['378',XL] -1 NumOver['379',XL] TotalCost 1 demand_fit['379',XL] -1 NumOver['381',XL] TotalCost 1 demand_fit['381',XL] -1 NumOver['383',XL] TotalCost 1 demand_fit['383',XL] -1 NumOver['384',XL] TotalCost 1 demand_fit['384',XL] -1 NumOver['386',XL] TotalCost 1 demand_fit['386',XL] -1 NumOver['388',XL] TotalCost 1 demand_fit['388',XL] -1 NumOver['389',XL] TotalCost 1 demand_fit['389',XL] -1 NumOver['390',XL] TotalCost 1 demand_fit['390',XL] -1 NumOver['397',XL] TotalCost 1 demand_fit['397',XL] -1 NumOver['398',XL] TotalCost 1 demand_fit['398',XL] -1 NumOver['403',XL] TotalCost 1 demand_fit['403',XL] -1 NumOver['418',XL] TotalCost 1 demand_fit['418',XL] -1 NumOver['430',XL] TotalCost 1 demand_fit['430',XL] -1 NumOver['431',XL] TotalCost 1 demand_fit['431',XL] -1 NumOver['479',XL] TotalCost 1 demand_fit['479',XL] -1 NumOver['502',XL] TotalCost 1 demand_fit['502',XL] -1 NumOver['504',XL] TotalCost 1 demand_fit['504',XL] -1 NumOver['512',XL] TotalCost 1 demand_fit['512',XL] -1 NumOver['528',XL] TotalCost 1 demand_fit['528',XL] -1 NumOver['533',XL] TotalCost 1 demand_fit['533',XL] -1 NumOver['538',XL] TotalCost 1 demand_fit['538',XL] -1 NumOver['552',XL] TotalCost 1 demand_fit['552',XL] -1 NumOver['621',XL] TotalCost 1 demand_fit['621',XL] -1 NumOver['639',XL] TotalCost 1 demand_fit['639',XL] -1 NumOver['712',XL] TotalCost 1 demand_fit['712',XL] -1 NumOver['781',XL] TotalCost 1 demand_fit['781',XL] -1 NumUnder['71',S] TotalCost 6 demand_fit['71',S] 1 NumUnder['73',S] TotalCost 6 demand_fit['73',S] 1 NumUnder['86',S] TotalCost 6 demand_fit['86',S] 1 NumUnder['99',S] TotalCost 6 demand_fit['99',S] 1 NumUnder['103',S] TotalCost 6 demand_fit['103',S] 1 NumUnder['126',S] TotalCost 6 demand_fit['126',S] 1 NumUnder['221',S] TotalCost 6 demand_fit['221',S] 1 NumUnder['225',S] TotalCost 6 demand_fit['225',S] 1 NumUnder['251',S] TotalCost 6 demand_fit['251',S] 1 NumUnder['270',S] TotalCost 6 demand_fit['270',S] 1 NumUnder['272',S] TotalCost 6 demand_fit['272',S] 1 NumUnder['275',S] TotalCost 6 demand_fit['275',S] 1 NumUnder['276',S] TotalCost 6 demand_fit['276',S] 1 NumUnder['280',S] TotalCost 6 demand_fit['280',S] 1 NumUnder['282',S] TotalCost 6 demand_fit['282',S] 1 NumUnder['283',S] TotalCost 6 demand_fit['283',S] 1 NumUnder['293',S] TotalCost 6 demand_fit['293',S] 1 NumUnder['298',S] TotalCost 6 demand_fit['298',S] 1 NumUnder['299',S] TotalCost 6 demand_fit['299',S] 1 NumUnder['301',S] TotalCost 6 demand_fit['301',S] 1 NumUnder['309',S] TotalCost 6 demand_fit['309',S] 1 NumUnder['310',S] TotalCost 6 demand_fit['310',S] 1 NumUnder['375',S] TotalCost 6 demand_fit['375',S] 1 NumUnder['378',S] TotalCost 6 demand_fit['378',S] 1 NumUnder['379',S] TotalCost 6 demand_fit['379',S] 1 NumUnder['381',S] TotalCost 6 demand_fit['381',S] 1 NumUnder['383',S] TotalCost 6 demand_fit['383',S] 1 NumUnder['384',S] TotalCost 6 demand_fit['384',S] 1 NumUnder['386',S] TotalCost 6 demand_fit['386',S] 1 NumUnder['388',S] TotalCost 6 demand_fit['388',S] 1 NumUnder['389',S] TotalCost 6 demand_fit['389',S] 1 NumUnder['390',S] TotalCost 15 demand_fit['390',S] 1 NumUnder['397',S] TotalCost 6 demand_fit['397',S] 1 NumUnder['398',S] TotalCost 6 demand_fit['398',S] 1 NumUnder['403',S] TotalCost 6 demand_fit['403',S] 1 NumUnder['418',S] TotalCost 6 demand_fit['418',S] 1 NumUnder['430',S] TotalCost 6 demand_fit['430',S] 1 NumUnder['431',S] TotalCost 6 demand_fit['431',S] 1 NumUnder['479',S] TotalCost 6 demand_fit['479',S] 1 NumUnder['502',S] TotalCost 6 demand_fit['502',S] 1 NumUnder['504',S] TotalCost 6 demand_fit['504',S] 1 NumUnder['512',S] TotalCost 6 demand_fit['512',S] 1 NumUnder['528',S] TotalCost 6 demand_fit['528',S] 1 NumUnder['533',S] TotalCost 6 demand_fit['533',S] 1 NumUnder['538',S] TotalCost 6 demand_fit['538',S] 1 NumUnder['552',S] TotalCost 6 demand_fit['552',S] 1 NumUnder['621',S] TotalCost 6 demand_fit['621',S] 1 NumUnder['639',S] TotalCost 6 demand_fit['639',S] 1 NumUnder['712',S] TotalCost 6 demand_fit['712',S] 1 NumUnder['781',S] TotalCost 6 demand_fit['781',S] 1 NumUnder['71',M] TotalCost 6 demand_fit['71',M] 1 NumUnder['73',M] TotalCost 6 demand_fit['73',M] 1 NumUnder['86',M] TotalCost 6 demand_fit['86',M] 1 NumUnder['99',M] TotalCost 6 demand_fit['99',M] 1 NumUnder['103',M] TotalCost 6 demand_fit['103',M] 1 NumUnder['126',M] TotalCost 6 demand_fit['126',M] 1 NumUnder['221',M] TotalCost 6 demand_fit['221',M] 1 NumUnder['225',M] TotalCost 6 demand_fit['225',M] 1 NumUnder['251',M] TotalCost 6 demand_fit['251',M] 1 NumUnder['270',M] TotalCost 6 demand_fit['270',M] 1 NumUnder['272',M] TotalCost 6 demand_fit['272',M] 1 NumUnder['275',M] TotalCost 6 demand_fit['275',M] 1 NumUnder['276',M] TotalCost 6 demand_fit['276',M] 1 NumUnder['280',M] TotalCost 6 demand_fit['280',M] 1 NumUnder['282',M] TotalCost 6 demand_fit['282',M] 1 NumUnder['283',M] TotalCost 6 demand_fit['283',M] 1 NumUnder['293',M] TotalCost 6 demand_fit['293',M] 1 NumUnder['298',M] TotalCost 6 demand_fit['298',M] 1 NumUnder['299',M] TotalCost 6 demand_fit['299',M] 1 NumUnder['301',M] TotalCost 6 demand_fit['301',M] 1 NumUnder['309',M] TotalCost 6 demand_fit['309',M] 1 NumUnder['310',M] TotalCost 6 demand_fit['310',M] 1 NumUnder['375',M] TotalCost 6 demand_fit['375',M] 1 NumUnder['378',M] TotalCost 6 demand_fit['378',M] 1 NumUnder['379',M] TotalCost 6 demand_fit['379',M] 1 NumUnder['381',M] TotalCost 6 demand_fit['381',M] 1 NumUnder['383',M] TotalCost 6 demand_fit['383',M] 1 NumUnder['384',M] TotalCost 6 demand_fit['384',M] 1 NumUnder['386',M] TotalCost 6 demand_fit['386',M] 1 NumUnder['388',M] TotalCost 6 demand_fit['388',M] 1 NumUnder['389',M] TotalCost 6 demand_fit['389',M] 1 NumUnder['390',M] TotalCost 15 demand_fit['390',M] 1 NumUnder['397',M] TotalCost 6 demand_fit['397',M] 1 NumUnder['398',M] TotalCost 6 demand_fit['398',M] 1 NumUnder['403',M] TotalCost 6 demand_fit['403',M] 1 NumUnder['418',M] TotalCost 6 demand_fit['418',M] 1 NumUnder['430',M] TotalCost 6 demand_fit['430',M] 1 NumUnder['431',M] TotalCost 6 demand_fit['431',M] 1 NumUnder['479',M] TotalCost 6 demand_fit['479',M] 1 NumUnder['502',M] TotalCost 6 demand_fit['502',M] 1 NumUnder['504',M] TotalCost 6 demand_fit['504',M] 1 NumUnder['512',M] TotalCost 6 demand_fit['512',M] 1 NumUnder['528',M] TotalCost 6 demand_fit['528',M] 1 NumUnder['533',M] TotalCost 6 demand_fit['533',M] 1 NumUnder['538',M] TotalCost 6 demand_fit['538',M] 1 NumUnder['552',M] TotalCost 6 demand_fit['552',M] 1 NumUnder['621',M] TotalCost 6 demand_fit['621',M] 1 NumUnder['639',M] TotalCost 6 demand_fit['639',M] 1 NumUnder['712',M] TotalCost 6 demand_fit['712',M] 1 NumUnder['781',M] TotalCost 6 demand_fit['781',M] 1 NumUnder['71',L] TotalCost 6 demand_fit['71',L] 1 NumUnder['73',L] TotalCost 6 demand_fit['73',L] 1 NumUnder['86',L] TotalCost 6 demand_fit['86',L] 1 NumUnder['99',L] TotalCost 6 demand_fit['99',L] 1 NumUnder['103',L] TotalCost 6 demand_fit['103',L] 1 NumUnder['126',L] TotalCost 6 demand_fit['126',L] 1 NumUnder['221',L] TotalCost 6 demand_fit['221',L] 1 NumUnder['225',L] TotalCost 6 demand_fit['225',L] 1 NumUnder['251',L] TotalCost 6 demand_fit['251',L] 1 NumUnder['270',L] TotalCost 6 demand_fit['270',L] 1 NumUnder['272',L] TotalCost 6 demand_fit['272',L] 1 NumUnder['275',L] TotalCost 6 demand_fit['275',L] 1 NumUnder['276',L] TotalCost 6 demand_fit['276',L] 1 NumUnder['280',L] TotalCost 6 demand_fit['280',L] 1 NumUnder['282',L] TotalCost 6 demand_fit['282',L] 1 NumUnder['283',L] TotalCost 6 demand_fit['283',L] 1 NumUnder['293',L] TotalCost 6 demand_fit['293',L] 1 NumUnder['298',L] TotalCost 6 demand_fit['298',L] 1 NumUnder['299',L] TotalCost 6 demand_fit['299',L] 1 NumUnder['301',L] TotalCost 6 demand_fit['301',L] 1 NumUnder['309',L] TotalCost 6 demand_fit['309',L] 1 NumUnder['310',L] TotalCost 6 demand_fit['310',L] 1 NumUnder['375',L] TotalCost 6 demand_fit['375',L] 1 NumUnder['378',L] TotalCost 6 demand_fit['378',L] 1 NumUnder['379',L] TotalCost 6 demand_fit['379',L] 1 NumUnder['381',L] TotalCost 6 demand_fit['381',L] 1 NumUnder['383',L] TotalCost 6 demand_fit['383',L] 1 NumUnder['384',L] TotalCost 6 demand_fit['384',L] 1 NumUnder['386',L] TotalCost 6 demand_fit['386',L] 1 NumUnder['388',L] TotalCost 6 demand_fit['388',L] 1 NumUnder['389',L] TotalCost 6 demand_fit['389',L] 1 NumUnder['390',L] TotalCost 6 demand_fit['390',L] 1 NumUnder['397',L] TotalCost 6 demand_fit['397',L] 1 NumUnder['398',L] TotalCost 6 demand_fit['398',L] 1 NumUnder['403',L] TotalCost 6 demand_fit['403',L] 1 NumUnder['418',L] TotalCost 6 demand_fit['418',L] 1 NumUnder['430',L] TotalCost 6 demand_fit['430',L] 1 NumUnder['431',L] TotalCost 6 demand_fit['431',L] 1 NumUnder['479',L] TotalCost 6 demand_fit['479',L] 1 NumUnder['502',L] TotalCost 6 demand_fit['502',L] 1 NumUnder['504',L] TotalCost 6 demand_fit['504',L] 1 NumUnder['512',L] TotalCost 6 demand_fit['512',L] 1 NumUnder['528',L] TotalCost 6 demand_fit['528',L] 1 NumUnder['533',L] TotalCost 6 demand_fit['533',L] 1 NumUnder['538',L] TotalCost 6 demand_fit['538',L] 1 NumUnder['552',L] TotalCost 6 demand_fit['552',L] 1 NumUnder['621',L] TotalCost 6 demand_fit['621',L] 1 NumUnder['639',L] TotalCost 6 demand_fit['639',L] 1 NumUnder['712',L] TotalCost 6 demand_fit['712',L] 1 NumUnder['781',L] TotalCost 6 demand_fit['781',L] 1 NumUnder['71',XL] TotalCost 6 demand_fit['71',XL] 1 NumUnder['73',XL] TotalCost 6 demand_fit['73',XL] 1 NumUnder['86',XL] TotalCost 6 demand_fit['86',XL] 1 NumUnder['99',XL] TotalCost 6 demand_fit['99',XL] 1 NumUnder['103',XL] TotalCost 6 demand_fit['103',XL] 1 NumUnder['126',XL] TotalCost 6 demand_fit['126',XL] 1 NumUnder['221',XL] TotalCost 6 demand_fit['221',XL] 1 NumUnder['225',XL] TotalCost 6 demand_fit['225',XL] 1 NumUnder['251',XL] TotalCost 6 demand_fit['251',XL] 1 NumUnder['270',XL] TotalCost 6 demand_fit['270',XL] 1 NumUnder['272',XL] TotalCost 6 demand_fit['272',XL] 1 NumUnder['275',XL] TotalCost 6 demand_fit['275',XL] 1 NumUnder['276',XL] TotalCost 6 demand_fit['276',XL] 1 NumUnder['280',XL] TotalCost 6 demand_fit['280',XL] 1 NumUnder['282',XL] TotalCost 6 demand_fit['282',XL] 1 NumUnder['283',XL] TotalCost 6 demand_fit['283',XL] 1 NumUnder['293',XL] TotalCost 6 demand_fit['293',XL] 1 NumUnder['298',XL] TotalCost 6 demand_fit['298',XL] 1 NumUnder['299',XL] TotalCost 6 demand_fit['299',XL] 1 NumUnder['301',XL] TotalCost 6 demand_fit['301',XL] 1 NumUnder['309',XL] TotalCost 6 demand_fit['309',XL] 1 NumUnder['310',XL] TotalCost 6 demand_fit['310',XL] 1 NumUnder['375',XL] TotalCost 6 demand_fit['375',XL] 1 NumUnder['378',XL] TotalCost 6 demand_fit['378',XL] 1 NumUnder['379',XL] TotalCost 6 demand_fit['379',XL] 1 NumUnder['381',XL] TotalCost 6 demand_fit['381',XL] 1 NumUnder['383',XL] TotalCost 6 demand_fit['383',XL] 1 NumUnder['384',XL] TotalCost 6 demand_fit['384',XL] 1 NumUnder['386',XL] TotalCost 6 demand_fit['386',XL] 1 NumUnder['388',XL] TotalCost 6 demand_fit['388',XL] 1 NumUnder['389',XL] TotalCost 6 demand_fit['389',XL] 1 NumUnder['390',XL] TotalCost 6 demand_fit['390',XL] 1 NumUnder['397',XL] TotalCost 6 demand_fit['397',XL] 1 NumUnder['398',XL] TotalCost 6 demand_fit['398',XL] 1 NumUnder['403',XL] TotalCost 6 demand_fit['403',XL] 1 NumUnder['418',XL] TotalCost 6 demand_fit['418',XL] 1 NumUnder['430',XL] TotalCost 6 demand_fit['430',XL] 1 NumUnder['431',XL] TotalCost 6 demand_fit['431',XL] 1 NumUnder['479',XL] TotalCost 6 demand_fit['479',XL] 1 NumUnder['502',XL] TotalCost 6 demand_fit['502',XL] 1 NumUnder['504',XL] TotalCost 6 demand_fit['504',XL] 1 NumUnder['512',XL] TotalCost 6 demand_fit['512',XL] 1 NumUnder['528',XL] TotalCost 6 demand_fit['528',XL] 1 NumUnder['533',XL] TotalCost 6 demand_fit['533',XL] 1 NumUnder['538',XL] TotalCost 6 demand_fit['538',XL] 1 NumUnder['552',XL] TotalCost 6 demand_fit['552',XL] 1 NumUnder['621',XL] TotalCost 6 demand_fit['621',XL] 1 NumUnder['639',XL] TotalCost 6 demand_fit['639',XL] 1 NumUnder['712',XL] TotalCost 6 demand_fit['712',XL] 1 NumUnder['781',XL] TotalCost 6 demand_fit['781',XL] 1 RHS .RHS. demand_fit['71',S] 3.64592208 .RHS. demand_fit['73',S] 6.645651 .RHS. demand_fit['86',S] 8.46011328 .RHS. demand_fit['99',S] 5.2875708 .RHS. demand_fit['103',S] 6.38036364 .RHS. demand_fit['126',S] 9.3039114 .RHS. demand_fit['221',S] 8.46011328 .RHS. demand_fit['225',S] 2.11502832 .RHS. demand_fit['251',S] 5.2875708 .RHS. demand_fit['270',S] 2.73444156 .RHS. demand_fit['272',S] 5.2875708 .RHS. demand_fit['275',S] 7.40259912 .RHS. demand_fit['276',S] 6.645651 .RHS. demand_fit['280',S] 3.17254248 .RHS. demand_fit['282',S] 9.3039114 .RHS. demand_fit['283',S] 3.64592208 .RHS. demand_fit['293',S] 2.11502832 .RHS. demand_fit['298',S] 4.23005664 .RHS. demand_fit['299',S] 7.40259912 .RHS. demand_fit['301',S] 5.3165208 .RHS. demand_fit['309',S] 6.645651 .RHS. demand_fit['310',S] 4.5574026 .RHS. demand_fit['375',S] 6.645651 .RHS. demand_fit['378',S] 3.9873906 .RHS. demand_fit['379',S] 6.38036364 .RHS. demand_fit['381',S] 3.9873906 .RHS. demand_fit['383',S] 5.2875708 .RHS. demand_fit['384',S] 9.3039114 .RHS. demand_fit['386',S] 5.3165208 .RHS. demand_fit['388',S] 5.2875708 .RHS. demand_fit['389',S] 8.46011328 .RHS. demand_fit['390',S] 13.291302 .RHS. demand_fit['397',S] 6.645651 .RHS. demand_fit['398',S] 10.6330416 .RHS. demand_fit['403',S] 9.1148052 .RHS. demand_fit['418',S] 5.3165208 .RHS. demand_fit['430',S] 5.3165208 .RHS. demand_fit['431',S] 3.64592208 .RHS. demand_fit['479',S] 3.9873906 .RHS. demand_fit['502',S] 3.17254248 .RHS. demand_fit['504',S] 5.2875708 .RHS. demand_fit['512',S] 4.23005664 .RHS. demand_fit['528',S] 2.11502832 .RHS. demand_fit['533',S] 4.23005664 .RHS. demand_fit['538',S] 5.2875708 .RHS. demand_fit['552',S] 3.64592208 .RHS. demand_fit['621',S] 6.38036364 .RHS. demand_fit['639',S] 2.6582604 .RHS. demand_fit['712',S] 3.9873906 .RHS. demand_fit['781',S] 6.645651 .RHS. demand_fit['71',M] 10.64293584 .RHS. demand_fit['73',M] 15.4621008 .RHS. demand_fit['86',M] 23.24756064 .RHS. demand_fit['99',M] 14.5297254 .RHS. demand_fit['103',M] 18.62513772 .RHS. demand_fit['126',M] 21.64694112 .RHS. demand_fit['221',M] 23.24756064 .RHS. demand_fit['225',M] 5.81189016 .RHS. demand_fit['251',M] 14.5297254 .RHS. demand_fit['270',M] 7.98220188 .RHS. demand_fit['272',M] 14.5297254 .RHS. demand_fit['275',M] 20.34161556 .RHS. demand_fit['276',M] 15.4621008 .RHS. demand_fit['280',M] 8.71783524 .RHS. demand_fit['282',M] 21.64694112 .RHS. demand_fit['283',M] 10.64293584 .RHS. demand_fit['293',M] 5.81189016 .RHS. demand_fit['298',M] 11.62378032 .RHS. demand_fit['299',M] 20.34161556 .RHS. demand_fit['301',M] 12.36968064 .RHS. demand_fit['309',M] 15.4621008 .RHS. demand_fit['310',M] 13.3036698 .RHS. demand_fit['375',M] 15.4621008 .RHS. demand_fit['378',M] 9.27726048 .RHS. demand_fit['379',M] 18.62513772 .RHS. demand_fit['381',M] 9.27726048 .RHS. demand_fit['383',M] 14.5297254 .RHS. demand_fit['384',M] 21.64694112 .RHS. demand_fit['386',M] 12.36968064 .RHS. demand_fit['388',M] 14.5297254 .RHS. demand_fit['389',M] 23.24756064 .RHS. demand_fit['390',M] 30.9242016 .RHS. demand_fit['397',M] 15.4621008 .RHS. demand_fit['398',M] 24.73936128 .RHS. demand_fit['403',M] 26.6073396 .RHS. demand_fit['418',M] 12.36968064 .RHS. demand_fit['430',M] 12.36968064 .RHS. demand_fit['431',M] 10.64293584 .RHS. demand_fit['479',M] 9.27726048 .RHS. demand_fit['502',M] 8.71783524 .RHS. demand_fit['504',M] 14.5297254 .RHS. demand_fit['512',M] 11.62378032 .RHS. demand_fit['528',M] 5.81189016 .RHS. demand_fit['533',M] 11.62378032 .RHS. demand_fit['538',M] 14.5297254 .RHS. demand_fit['552',M] 10.64293584 .RHS. demand_fit['621',M] 18.62513772 .RHS. demand_fit['639',M] 6.18484032 .RHS. demand_fit['712',M] 9.27726048 .RHS. demand_fit['781',M] 15.4621008 .RHS. demand_fit['71',L] 15.62372304 .RHS. demand_fit['73',L] 18.2540478 .RHS. demand_fit['86',L] 31.526496 .RHS. demand_fit['99',L] 19.70406 .RHS. demand_fit['103',L] 27.34151532 .RHS. demand_fit['126',L] 25.55566692 .RHS. demand_fit['221',L] 31.526496 .RHS. demand_fit['225',L] 7.881624 .RHS. demand_fit['251',L] 19.70406 .RHS. demand_fit['270',L] 11.71779228 .RHS. demand_fit['272',L] 19.70406 .RHS. demand_fit['275',L] 27.585684 .RHS. demand_fit['276',L] 18.2540478 .RHS. demand_fit['280',L] 11.822436 .RHS. demand_fit['282',L] 25.55566692 .RHS. demand_fit['283',L] 15.62372304 .RHS. demand_fit['293',L] 7.881624 .RHS. demand_fit['298',L] 15.763248 .RHS. demand_fit['299',L] 27.585684 .RHS. demand_fit['301',L] 14.60323824 .RHS. demand_fit['309',L] 18.2540478 .RHS. demand_fit['310',L] 19.5296538 .RHS. demand_fit['375',L] 18.2540478 .RHS. demand_fit['378',L] 10.95242868 .RHS. demand_fit['379',L] 27.34151532 .RHS. demand_fit['381',L] 10.95242868 .RHS. demand_fit['383',L] 19.70406 .RHS. demand_fit['384',L] 25.55566692 .RHS. demand_fit['386',L] 14.60323824 .RHS. demand_fit['388',L] 19.70406 .RHS. demand_fit['389',L] 31.526496 .RHS. demand_fit['390',L] 36.5080956 .RHS. demand_fit['397',L] 18.2540478 .RHS. demand_fit['398',L] 29.20647648 .RHS. demand_fit['403',L] 39.0593076 .RHS. demand_fit['418',L] 14.60323824 .RHS. demand_fit['430',L] 14.60323824 .RHS. demand_fit['431',L] 15.62372304 .RHS. demand_fit['479',L] 10.95242868 .RHS. demand_fit['502',L] 11.822436 .RHS. demand_fit['504',L] 19.70406 .RHS. demand_fit['512',L] 15.763248 .RHS. demand_fit['528',L] 7.881624 .RHS. demand_fit['533',L] 15.763248 .RHS. demand_fit['538',L] 19.70406 .RHS. demand_fit['552',L] 15.62372304 .RHS. demand_fit['621',L] 27.34151532 .RHS. demand_fit['639',L] 7.30161912 .RHS. demand_fit['712',L] 10.95242868 .RHS. demand_fit['781',L] 18.2540478 .RHS. demand_fit['71',XL] 18.08741904 .RHS. demand_fit['73',XL] 19.6382004 .RHS. demand_fit['86',XL] 32.76582912 .RHS. demand_fit['99',XL] 20.4786432 .RHS. demand_fit['103',XL] 31.65298332 .RHS. demand_fit['126',XL] 27.49348056 .RHS. demand_fit['221',XL] 32.76582912 .RHS. demand_fit['225',XL] 8.19145728 .RHS. demand_fit['251',XL] 20.4786432 .RHS. demand_fit['270',XL] 13.56556428 .RHS. demand_fit['272',XL] 20.4786432 .RHS. demand_fit['275',XL] 28.67010048 .RHS. demand_fit['276',XL] 19.6382004 .RHS. demand_fit['280',XL] 12.28718592 .RHS. demand_fit['282',XL] 27.49348056 .RHS. demand_fit['283',XL] 18.08741904 .RHS. demand_fit['293',XL] 8.19145728 .RHS. demand_fit['298',XL] 16.38291456 .RHS. demand_fit['299',XL] 28.67010048 .RHS. demand_fit['301',XL] 15.71056032 .RHS. demand_fit['309',XL] 19.6382004 .RHS. demand_fit['310',XL] 22.6092738 .RHS. demand_fit['375',XL] 19.6382004 .RHS. demand_fit['378',XL] 11.78292024 .RHS. demand_fit['379',XL] 31.65298332 .RHS. demand_fit['381',XL] 11.78292024 .RHS. demand_fit['383',XL] 20.4786432 .RHS. demand_fit['384',XL] 27.49348056 .RHS. demand_fit['386',XL] 15.71056032 .RHS. demand_fit['388',XL] 20.4786432 .RHS. demand_fit['389',XL] 32.76582912 .RHS. demand_fit['390',XL] 39.2764008 .RHS. demand_fit['397',XL] 19.6382004 .RHS. demand_fit['398',XL] 31.42112064 .RHS. demand_fit['403',XL] 45.2185476 .RHS. demand_fit['418',XL] 15.71056032 .RHS. demand_fit['430',XL] 15.71056032 .RHS. demand_fit['431',XL] 18.08741904 .RHS. demand_fit['479',XL] 11.78292024 .RHS. demand_fit['502',XL] 12.28718592 .RHS. demand_fit['504',XL] 20.4786432 .RHS. demand_fit['512',XL] 16.38291456 .RHS. demand_fit['528',XL] 8.19145728 .RHS. demand_fit['533',XL] 16.38291456 .RHS. demand_fit['538',XL] 20.4786432 .RHS. demand_fit['552',XL] 18.08741904 .RHS. demand_fit['621',XL] 31.65298332 .RHS. demand_fit['639',XL] 7.85528016 .RHS. demand_fit['712',XL] 11.78292024 .RHS. demand_fit['781',XL] 19.6382004 BOUNDS FX .BOUNDS. NumLooseInners['71',Pack1] 0 FX .BOUNDS. NumLooseInners['73',Pack1] 0 FX .BOUNDS. NumLooseInners['86',Pack1] 0 FX .BOUNDS. NumLooseInners['99',Pack1] 0 FX .BOUNDS. NumLooseInners['103',Pack1] 0 FX .BOUNDS. NumLooseInners['126',Pack1] 0 FX .BOUNDS. NumLooseInners['221',Pack1] 0 FX .BOUNDS. NumLooseInners['225',Pack1] 0 FX .BOUNDS. NumLooseInners['251',Pack1] 0 FX .BOUNDS. NumLooseInners['270',Pack1] 0 FX .BOUNDS. NumLooseInners['272',Pack1] 0 FX .BOUNDS. NumLooseInners['275',Pack1] 0 FX .BOUNDS. NumLooseInners['276',Pack1] 0 FX .BOUNDS. NumLooseInners['280',Pack1] 0 FX .BOUNDS. NumLooseInners['282',Pack1] 0 FX .BOUNDS. NumLooseInners['283',Pack1] 0 FX .BOUNDS. NumLooseInners['293',Pack1] 0 FX .BOUNDS. NumLooseInners['298',Pack1] 0 FX .BOUNDS. NumLooseInners['299',Pack1] 0 FX .BOUNDS. NumLooseInners['301',Pack1] 0 FX .BOUNDS. NumLooseInners['309',Pack1] 0 FX .BOUNDS. NumLooseInners['310',Pack1] 0 FX .BOUNDS. NumLooseInners['375',Pack1] 0 FX .BOUNDS. NumLooseInners['378',Pack1] 0 FX .BOUNDS. NumLooseInners['379',Pack1] 0 FX .BOUNDS. NumLooseInners['381',Pack1] 0 FX .BOUNDS. NumLooseInners['383',Pack1] 0 FX .BOUNDS. NumLooseInners['384',Pack1] 0 FX .BOUNDS. NumLooseInners['386',Pack1] 0 FX .BOUNDS. NumLooseInners['388',Pack1] 0 FX .BOUNDS. NumLooseInners['389',Pack1] 0 FX .BOUNDS. NumLooseInners['390',Pack1] 0 FX .BOUNDS. NumLooseInners['397',Pack1] 0 FX .BOUNDS. NumLooseInners['398',Pack1] 0 FX .BOUNDS. NumLooseInners['403',Pack1] 0 FX .BOUNDS. NumLooseInners['418',Pack1] 0 FX .BOUNDS. NumLooseInners['430',Pack1] 0 FX .BOUNDS. NumLooseInners['431',Pack1] 0 FX .BOUNDS. NumLooseInners['479',Pack1] 0 FX .BOUNDS. NumLooseInners['502',Pack1] 0 FX .BOUNDS. NumLooseInners['504',Pack1] 0 FX .BOUNDS. NumLooseInners['512',Pack1] 0 FX .BOUNDS. NumLooseInners['528',Pack1] 0 FX .BOUNDS. NumLooseInners['533',Pack1] 0 FX .BOUNDS. NumLooseInners['538',Pack1] 0 FX .BOUNDS. NumLooseInners['552',Pack1] 0 FX .BOUNDS. NumLooseInners['621',Pack1] 0 FX .BOUNDS. NumLooseInners['639',Pack1] 0 FX .BOUNDS. NumLooseInners['712',Pack1] 0 FX .BOUNDS. NumLooseInners['781',Pack1] 0 FX .BOUNDS. NumLooseInners['71',Pack2] 0 FX .BOUNDS. NumLooseInners['73',Pack2] 0 FX .BOUNDS. NumLooseInners['86',Pack2] 0 FX .BOUNDS. NumLooseInners['99',Pack2] 0 FX .BOUNDS. NumLooseInners['103',Pack2] 0 FX .BOUNDS. NumLooseInners['126',Pack2] 0 FX .BOUNDS. NumLooseInners['221',Pack2] 0 FX .BOUNDS. NumLooseInners['225',Pack2] 0 FX .BOUNDS. NumLooseInners['251',Pack2] 0 FX .BOUNDS. NumLooseInners['270',Pack2] 0 FX .BOUNDS. NumLooseInners['272',Pack2] 0 FX .BOUNDS. NumLooseInners['275',Pack2] 0 FX .BOUNDS. NumLooseInners['276',Pack2] 0 FX .BOUNDS. NumLooseInners['280',Pack2] 0 FX .BOUNDS. NumLooseInners['282',Pack2] 0 FX .BOUNDS. NumLooseInners['283',Pack2] 0 FX .BOUNDS. NumLooseInners['293',Pack2] 0 FX .BOUNDS. NumLooseInners['298',Pack2] 0 FX .BOUNDS. NumLooseInners['299',Pack2] 0 FX .BOUNDS. NumLooseInners['301',Pack2] 0 FX .BOUNDS. NumLooseInners['309',Pack2] 0 FX .BOUNDS. NumLooseInners['310',Pack2] 0 FX .BOUNDS. NumLooseInners['375',Pack2] 0 FX .BOUNDS. NumLooseInners['378',Pack2] 0 FX .BOUNDS. NumLooseInners['379',Pack2] 0 FX .BOUNDS. NumLooseInners['381',Pack2] 0 FX .BOUNDS. NumLooseInners['383',Pack2] 0 FX .BOUNDS. NumLooseInners['384',Pack2] 0 FX .BOUNDS. NumLooseInners['386',Pack2] 0 FX .BOUNDS. NumLooseInners['388',Pack2] 0 FX .BOUNDS. NumLooseInners['389',Pack2] 0 FX .BOUNDS. NumLooseInners['390',Pack2] 0 FX .BOUNDS. NumLooseInners['397',Pack2] 0 FX .BOUNDS. NumLooseInners['398',Pack2] 0 FX .BOUNDS. NumLooseInners['403',Pack2] 0 FX .BOUNDS. NumLooseInners['418',Pack2] 0 FX .BOUNDS. NumLooseInners['430',Pack2] 0 FX .BOUNDS. NumLooseInners['431',Pack2] 0 FX .BOUNDS. NumLooseInners['479',Pack2] 0 FX .BOUNDS. NumLooseInners['502',Pack2] 0 FX .BOUNDS. NumLooseInners['504',Pack2] 0 FX .BOUNDS. NumLooseInners['512',Pack2] 0 FX .BOUNDS. NumLooseInners['528',Pack2] 0 FX .BOUNDS. NumLooseInners['533',Pack2] 0 FX .BOUNDS. NumLooseInners['538',Pack2] 0 FX .BOUNDS. NumLooseInners['552',Pack2] 0 FX .BOUNDS. NumLooseInners['621',Pack2] 0 FX .BOUNDS. NumLooseInners['639',Pack2] 0 FX .BOUNDS. NumLooseInners['712',Pack2] 0 FX .BOUNDS. NumLooseInners['781',Pack2] 0 FX .BOUNDS. NumLooseInners['71',Pack3] 0 FX .BOUNDS. NumLooseInners['73',Pack3] 0 FX .BOUNDS. NumLooseInners['86',Pack3] 0 FX .BOUNDS. NumLooseInners['99',Pack3] 0 FX .BOUNDS. NumLooseInners['103',Pack3] 0 FX .BOUNDS. NumLooseInners['126',Pack3] 0 FX .BOUNDS. NumLooseInners['221',Pack3] 0 FX .BOUNDS. NumLooseInners['225',Pack3] 0 FX .BOUNDS. NumLooseInners['251',Pack3] 0 FX .BOUNDS. NumLooseInners['270',Pack3] 0 FX .BOUNDS. NumLooseInners['272',Pack3] 0 FX .BOUNDS. NumLooseInners['275',Pack3] 0 FX .BOUNDS. NumLooseInners['276',Pack3] 0 FX .BOUNDS. NumLooseInners['280',Pack3] 0 FX .BOUNDS. NumLooseInners['282',Pack3] 0 FX .BOUNDS. NumLooseInners['283',Pack3] 0 FX .BOUNDS. NumLooseInners['293',Pack3] 0 FX .BOUNDS. NumLooseInners['298',Pack3] 0 FX .BOUNDS. NumLooseInners['299',Pack3] 0 FX .BOUNDS. NumLooseInners['301',Pack3] 0 FX .BOUNDS. NumLooseInners['309',Pack3] 0 FX .BOUNDS. NumLooseInners['310',Pack3] 0 FX .BOUNDS. NumLooseInners['375',Pack3] 0 FX .BOUNDS. NumLooseInners['378',Pack3] 0 FX .BOUNDS. NumLooseInners['379',Pack3] 0 FX .BOUNDS. NumLooseInners['381',Pack3] 0 FX .BOUNDS. NumLooseInners['383',Pack3] 0 FX .BOUNDS. NumLooseInners['384',Pack3] 0 FX .BOUNDS. NumLooseInners['386',Pack3] 0 FX .BOUNDS. NumLooseInners['388',Pack3] 0 FX .BOUNDS. NumLooseInners['389',Pack3] 0 FX .BOUNDS. NumLooseInners['390',Pack3] 0 FX .BOUNDS. NumLooseInners['397',Pack3] 0 FX .BOUNDS. NumLooseInners['398',Pack3] 0 FX .BOUNDS. NumLooseInners['403',Pack3] 0 FX .BOUNDS. NumLooseInners['418',Pack3] 0 FX .BOUNDS. NumLooseInners['430',Pack3] 0 FX .BOUNDS. NumLooseInners['431',Pack3] 0 FX .BOUNDS. NumLooseInners['479',Pack3] 0 FX .BOUNDS. NumLooseInners['502',Pack3] 0 FX .BOUNDS. NumLooseInners['504',Pack3] 0 FX .BOUNDS. NumLooseInners['512',Pack3] 0 FX .BOUNDS. NumLooseInners['528',Pack3] 0 FX .BOUNDS. NumLooseInners['533',Pack3] 0 FX .BOUNDS. NumLooseInners['538',Pack3] 0 FX .BOUNDS. NumLooseInners['552',Pack3] 0 FX .BOUNDS. NumLooseInners['621',Pack3] 0 FX .BOUNDS. NumLooseInners['639',Pack3] 0 FX .BOUNDS. NumLooseInners['712',Pack3] 0 FX .BOUNDS. NumLooseInners['781',Pack3] 0 UP .BOUNDS. NumUnopenedOuters['71',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['73',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['86',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['99',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['103',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['126',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['221',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['225',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['251',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['270',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['272',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['275',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['276',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['280',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['282',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['283',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['293',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['298',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['299',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['301',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['309',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['310',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['375',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['378',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['379',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['381',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['383',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['384',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['386',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['388',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['389',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['390',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['397',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['398',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['403',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['418',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['430',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['431',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['479',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['502',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['504',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['512',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['528',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['533',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['538',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['552',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['621',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['639',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['712',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['781',Pack1] 1000 UP .BOUNDS. NumUnopenedOuters['71',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['73',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['86',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['99',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['103',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['126',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['221',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['225',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['251',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['270',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['272',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['275',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['276',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['280',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['282',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['283',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['293',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['298',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['299',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['301',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['309',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['310',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['375',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['378',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['379',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['381',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['383',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['384',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['386',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['388',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['389',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['390',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['397',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['398',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['403',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['418',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['430',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['431',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['479',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['502',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['504',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['512',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['528',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['533',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['538',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['552',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['621',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['639',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['712',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['781',Pack2] 1000 UP .BOUNDS. NumUnopenedOuters['71',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['73',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['86',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['99',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['103',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['126',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['221',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['225',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['251',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['270',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['272',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['275',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['276',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['280',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['282',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['283',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['293',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['298',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['299',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['301',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['309',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['310',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['375',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['378',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['379',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['381',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['383',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['384',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['386',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['388',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['389',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['390',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['397',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['398',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['403',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['418',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['430',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['431',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['479',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['502',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['504',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['512',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['528',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['533',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['538',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['552',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['621',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['639',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['712',Pack3] 1000 UP .BOUNDS. NumUnopenedOuters['781',Pack3] 1000 FX .BOUNDS. NumOpenedOuters[Pack1] 0 FX .BOUNDS. NumOpenedOuters[Pack2] 0 FX .BOUNDS. NumOpenedOuters[Pack3] 0 UP .BOUNDS. NumUnder['71',S] 3.64592208 UP .BOUNDS. NumUnder['73',S] 6.645651 UP .BOUNDS. NumUnder['86',S] 8.46011328 UP .BOUNDS. NumUnder['99',S] 5.2875708 UP .BOUNDS. NumUnder['103',S] 6.38036364 UP .BOUNDS. NumUnder['126',S] 9.3039114 UP .BOUNDS. NumUnder['221',S] 8.46011328 UP .BOUNDS. NumUnder['225',S] 2.11502832 UP .BOUNDS. NumUnder['251',S] 5.2875708 UP .BOUNDS. NumUnder['270',S] 2.73444156 UP .BOUNDS. NumUnder['272',S] 5.2875708 UP .BOUNDS. NumUnder['275',S] 7.40259912 UP .BOUNDS. NumUnder['276',S] 6.645651 UP .BOUNDS. NumUnder['280',S] 3.17254248 UP .BOUNDS. NumUnder['282',S] 9.3039114 UP .BOUNDS. NumUnder['283',S] 3.64592208 UP .BOUNDS. NumUnder['293',S] 2.11502832 UP .BOUNDS. NumUnder['298',S] 4.23005664 UP .BOUNDS. NumUnder['299',S] 7.40259912 UP .BOUNDS. NumUnder['301',S] 5.3165208 UP .BOUNDS. NumUnder['309',S] 6.645651 UP .BOUNDS. NumUnder['310',S] 4.5574026 UP .BOUNDS. NumUnder['375',S] 6.645651 UP .BOUNDS. NumUnder['378',S] 3.9873906 UP .BOUNDS. NumUnder['379',S] 6.38036364 UP .BOUNDS. NumUnder['381',S] 3.9873906 UP .BOUNDS. NumUnder['383',S] 5.2875708 UP .BOUNDS. NumUnder['384',S] 9.3039114 UP .BOUNDS. NumUnder['386',S] 5.3165208 UP .BOUNDS. NumUnder['388',S] 5.2875708 UP .BOUNDS. NumUnder['389',S] 8.46011328 UP .BOUNDS. NumUnder['390',S] 13.291302 UP .BOUNDS. NumUnder['397',S] 6.645651 UP .BOUNDS. NumUnder['398',S] 10.6330416 UP .BOUNDS. NumUnder['403',S] 9.1148052 UP .BOUNDS. NumUnder['418',S] 5.3165208 UP .BOUNDS. NumUnder['430',S] 5.3165208 UP .BOUNDS. NumUnder['431',S] 3.64592208 UP .BOUNDS. NumUnder['479',S] 3.9873906 UP .BOUNDS. NumUnder['502',S] 3.17254248 UP .BOUNDS. NumUnder['504',S] 5.2875708 UP .BOUNDS. NumUnder['512',S] 4.23005664 UP .BOUNDS. NumUnder['528',S] 2.11502832 UP .BOUNDS. NumUnder['533',S] 4.23005664 UP .BOUNDS. NumUnder['538',S] 5.2875708 UP .BOUNDS. NumUnder['552',S] 3.64592208 UP .BOUNDS. NumUnder['621',S] 6.38036364 UP .BOUNDS. NumUnder['639',S] 2.6582604 UP .BOUNDS. NumUnder['712',S] 3.9873906 UP .BOUNDS. NumUnder['781',S] 6.645651 UP .BOUNDS. NumUnder['71',M] 10.64293584 UP .BOUNDS. NumUnder['73',M] 15.4621008 UP .BOUNDS. NumUnder['86',M] 23.24756064 UP .BOUNDS. NumUnder['99',M] 14.5297254 UP .BOUNDS. NumUnder['103',M] 18.62513772 UP .BOUNDS. NumUnder['126',M] 21.64694112 UP .BOUNDS. NumUnder['221',M] 23.24756064 UP .BOUNDS. NumUnder['225',M] 5.81189016 UP .BOUNDS. NumUnder['251',M] 14.5297254 UP .BOUNDS. NumUnder['270',M] 7.98220188 UP .BOUNDS. NumUnder['272',M] 14.5297254 UP .BOUNDS. NumUnder['275',M] 20.34161556 UP .BOUNDS. NumUnder['276',M] 15.4621008 UP .BOUNDS. NumUnder['280',M] 8.71783524 UP .BOUNDS. NumUnder['282',M] 21.64694112 UP .BOUNDS. NumUnder['283',M] 10.64293584 UP .BOUNDS. NumUnder['293',M] 5.81189016 UP .BOUNDS. NumUnder['298',M] 11.62378032 UP .BOUNDS. NumUnder['299',M] 20.34161556 UP .BOUNDS. NumUnder['301',M] 12.36968064 UP .BOUNDS. NumUnder['309',M] 15.4621008 UP .BOUNDS. NumUnder['310',M] 13.3036698 UP .BOUNDS. NumUnder['375',M] 15.4621008 UP .BOUNDS. NumUnder['378',M] 9.27726048 UP .BOUNDS. NumUnder['379',M] 18.62513772 UP .BOUNDS. NumUnder['381',M] 9.27726048 UP .BOUNDS. NumUnder['383',M] 14.5297254 UP .BOUNDS. NumUnder['384',M] 21.64694112 UP .BOUNDS. NumUnder['386',M] 12.36968064 UP .BOUNDS. NumUnder['388',M] 14.5297254 UP .BOUNDS. NumUnder['389',M] 23.24756064 UP .BOUNDS. NumUnder['390',M] 30.9242016 UP .BOUNDS. NumUnder['397',M] 15.4621008 UP .BOUNDS. NumUnder['398',M] 24.73936128 UP .BOUNDS. NumUnder['403',M] 26.6073396 UP .BOUNDS. NumUnder['418',M] 12.36968064 UP .BOUNDS. NumUnder['430',M] 12.36968064 UP .BOUNDS. NumUnder['431',M] 10.64293584 UP .BOUNDS. NumUnder['479',M] 9.27726048 UP .BOUNDS. NumUnder['502',M] 8.71783524 UP .BOUNDS. NumUnder['504',M] 14.5297254 UP .BOUNDS. NumUnder['512',M] 11.62378032 UP .BOUNDS. NumUnder['528',M] 5.81189016 UP .BOUNDS. NumUnder['533',M] 11.62378032 UP .BOUNDS. NumUnder['538',M] 14.5297254 UP .BOUNDS. NumUnder['552',M] 10.64293584 UP .BOUNDS. NumUnder['621',M] 18.62513772 UP .BOUNDS. NumUnder['639',M] 6.18484032 UP .BOUNDS. NumUnder['712',M] 9.27726048 UP .BOUNDS. NumUnder['781',M] 15.4621008 UP .BOUNDS. NumUnder['71',L] 15.62372304 UP .BOUNDS. NumUnder['73',L] 18.2540478 UP .BOUNDS. NumUnder['86',L] 31.526496 UP .BOUNDS. NumUnder['99',L] 19.70406 UP .BOUNDS. NumUnder['103',L] 27.34151532 UP .BOUNDS. NumUnder['126',L] 25.55566692 UP .BOUNDS. NumUnder['221',L] 31.526496 UP .BOUNDS. NumUnder['225',L] 7.881624 UP .BOUNDS. NumUnder['251',L] 19.70406 UP .BOUNDS. NumUnder['270',L] 11.71779228 UP .BOUNDS. NumUnder['272',L] 19.70406 UP .BOUNDS. NumUnder['275',L] 27.585684 UP .BOUNDS. NumUnder['276',L] 18.2540478 UP .BOUNDS. NumUnder['280',L] 11.822436 UP .BOUNDS. NumUnder['282',L] 25.55566692 UP .BOUNDS. NumUnder['283',L] 15.62372304 UP .BOUNDS. NumUnder['293',L] 7.881624 UP .BOUNDS. NumUnder['298',L] 15.763248 UP .BOUNDS. NumUnder['299',L] 27.585684 UP .BOUNDS. NumUnder['301',L] 14.60323824 UP .BOUNDS. NumUnder['309',L] 18.2540478 UP .BOUNDS. NumUnder['310',L] 19.5296538 UP .BOUNDS. NumUnder['375',L] 18.2540478 UP .BOUNDS. NumUnder['378',L] 10.95242868 UP .BOUNDS. NumUnder['379',L] 27.34151532 UP .BOUNDS. NumUnder['381',L] 10.95242868 UP .BOUNDS. NumUnder['383',L] 19.70406 UP .BOUNDS. NumUnder['384',L] 25.55566692 UP .BOUNDS. NumUnder['386',L] 14.60323824 UP .BOUNDS. NumUnder['388',L] 19.70406 UP .BOUNDS. NumUnder['389',L] 31.526496 UP .BOUNDS. NumUnder['390',L] 36.5080956 UP .BOUNDS. NumUnder['397',L] 18.2540478 UP .BOUNDS. NumUnder['398',L] 29.20647648 UP .BOUNDS. NumUnder['403',L] 39.0593076 UP .BOUNDS. NumUnder['418',L] 14.60323824 UP .BOUNDS. NumUnder['430',L] 14.60323824 UP .BOUNDS. NumUnder['431',L] 15.62372304 UP .BOUNDS. NumUnder['479',L] 10.95242868 UP .BOUNDS. NumUnder['502',L] 11.822436 UP .BOUNDS. NumUnder['504',L] 19.70406 UP .BOUNDS. NumUnder['512',L] 15.763248 UP .BOUNDS. NumUnder['528',L] 7.881624 UP .BOUNDS. NumUnder['533',L] 15.763248 UP .BOUNDS. NumUnder['538',L] 19.70406 UP .BOUNDS. NumUnder['552',L] 15.62372304 UP .BOUNDS. NumUnder['621',L] 27.34151532 UP .BOUNDS. NumUnder['639',L] 7.30161912 UP .BOUNDS. NumUnder['712',L] 10.95242868 UP .BOUNDS. NumUnder['781',L] 18.2540478 UP .BOUNDS. NumUnder['71',XL] 18.08741904 UP .BOUNDS. NumUnder['73',XL] 19.6382004 UP .BOUNDS. NumUnder['86',XL] 32.76582912 UP .BOUNDS. NumUnder['99',XL] 20.4786432 UP .BOUNDS. NumUnder['103',XL] 31.65298332 UP .BOUNDS. NumUnder['126',XL] 27.49348056 UP .BOUNDS. NumUnder['221',XL] 32.76582912 UP .BOUNDS. NumUnder['225',XL] 8.19145728 UP .BOUNDS. NumUnder['251',XL] 20.4786432 UP .BOUNDS. NumUnder['270',XL] 13.56556428 UP .BOUNDS. NumUnder['272',XL] 20.4786432 UP .BOUNDS. NumUnder['275',XL] 28.67010048 UP .BOUNDS. NumUnder['276',XL] 19.6382004 UP .BOUNDS. NumUnder['280',XL] 12.28718592 UP .BOUNDS. NumUnder['282',XL] 27.49348056 UP .BOUNDS. NumUnder['283',XL] 18.08741904 UP .BOUNDS. NumUnder['293',XL] 8.19145728 UP .BOUNDS. NumUnder['298',XL] 16.38291456 UP .BOUNDS. NumUnder['299',XL] 28.67010048 UP .BOUNDS. NumUnder['301',XL] 15.71056032 UP .BOUNDS. NumUnder['309',XL] 19.6382004 UP .BOUNDS. NumUnder['310',XL] 22.6092738 UP .BOUNDS. NumUnder['375',XL] 19.6382004 UP .BOUNDS. NumUnder['378',XL] 11.78292024 UP .BOUNDS. NumUnder['379',XL] 31.65298332 UP .BOUNDS. NumUnder['381',XL] 11.78292024 UP .BOUNDS. NumUnder['383',XL] 20.4786432 UP .BOUNDS. NumUnder['384',XL] 27.49348056 UP .BOUNDS. NumUnder['386',XL] 15.71056032 UP .BOUNDS. NumUnder['388',XL] 20.4786432 UP .BOUNDS. NumUnder['389',XL] 32.76582912 UP .BOUNDS. NumUnder['390',XL] 39.2764008 UP .BOUNDS. NumUnder['397',XL] 19.6382004 UP .BOUNDS. NumUnder['398',XL] 31.42112064 UP .BOUNDS. NumUnder['403',XL] 45.2185476 UP .BOUNDS. NumUnder['418',XL] 15.71056032 UP .BOUNDS. NumUnder['430',XL] 15.71056032 UP .BOUNDS. NumUnder['431',XL] 18.08741904 UP .BOUNDS. NumUnder['479',XL] 11.78292024 UP .BOUNDS. NumUnder['502',XL] 12.28718592 UP .BOUNDS. NumUnder['504',XL] 20.4786432 UP .BOUNDS. NumUnder['512',XL] 16.38291456 UP .BOUNDS. NumUnder['528',XL] 8.19145728 UP .BOUNDS. NumUnder['533',XL] 16.38291456 UP .BOUNDS. NumUnder['538',XL] 20.4786432 UP .BOUNDS. NumUnder['552',XL] 18.08741904 UP .BOUNDS. NumUnder['621',XL] 31.65298332 UP .BOUNDS. NumUnder['639',XL] 7.85528016 UP .BOUNDS. NumUnder['712',XL] 11.78292024 UP .BOUNDS. NumUnder['781',XL] 19.6382004 ENDATA DyLP-1.10.4/Data/Sample/exmip1.5.mps0000644000175200017520000001373510430174061015241 0ustar coincoin************************************************************************ * * The data in this file represents the following problem: * * Minimize or maximize Z = x1 + 2x5 - x8 * * Subject to: * * 2.5 <= 3x1 + x2 - 2x4 - x5 - x8 * 2x2 + 1.1x3 <= 2.1 * x3 + x6 = 4.0 * 1.8 <= 2.8x4 -1.2x7 <= 5.0 * 3.0 <= 5.6x1 + x5 + 1.9x8 <= 15.0 * 15x3 + 12x4 + x5 <= 6.8 * * where: * * 2.5 <= x1 * 0 <= x2 <= 4.1 * 0 <= x3 * 0 <= x4 * 0.5 <= x5 <= 4.0 * 0 <= x6 * 0 <= x7 <= 2.0 * 0 <= x8 <= 4.3 * * x3, x4 are 0,1 variables. * ************************************************************************ NAME EXAMPLE ROWS N OBJ G ROW01 L ROW02 E ROW03 G ROW04 L ROW05 L ROW06 COLUMNS COL01 OBJ 1.0 COL01 ROW01 3.0 ROW05 5.6 COL02 ROW01 1.0 ROW02 2.0 * * Mark COL03 and COL04 as integer variables. * INT1 'MARKER' 'INTORG' COL03 ROW02 1.1 ROW03 1.0 COL03 ROW06 15.0 COL04 ROW01 -2.0 ROW04 2.8 COL04 ROW06 12.0 INT1END 'MARKER' 'INTEND' * COL05 OBJ 2.0 COL05 ROW01 -1.0 ROW05 1.0 COL05 ROW06 1.0 COL06 ROW03 1.0 COL07 ROW04 -1.2 COL08 OBJ -1.0 COL08 ROW01 -1.0 ROW05 1.9 RHS RHS1 ROW01 2.5 RHS1 ROW02 2.1 RHS1 ROW03 4.0 RHS1 ROW04 1.8 RHS1 ROW05 15.0 RHS1 ROW06 6.8 RANGES RNG1 ROW04 3.2 RNG1 ROW05 12.0 BOUNDS LO BND1 COL01 2.5 UP BND1 COL02 4.1 LO BND1 COL05 0.5 UP BND1 COL05 4.0 UP BND1 COL07 2.0 UP BND1 COL08 4.3 ENDATA DyLP-1.10.4/Data/Sample/app0110.cor0000755000175200017520000001210611015552002014726 0ustar coincoinNAME APP ROWS N COST L K01 L K02 L K03 L K04 L K05 E D00101 E D00201 E D00301 E D00401 E D00102 E D00202 E D00302 E D00402 E D00103 E D00203 E D00303 E D00403 E D00104 E D00204 E D00304 E D00404 E D00105 E D00205 E D00305 E D00405 COLUMNS X00101 K01 1 D00101 1. X00201 K01 1 D00201 1. X00301 K01 1 D00301 1. X00401 K01 1 D00401 1. X00102 K02 1 D00102 1. X00202 K02 1 D00202 1. X00302 K02 1 D00302 1. X00402 K02 1 D00402 1. X00103 K03 1 D00103 1. X00203 K03 1 D00203 1. X00303 K03 1 D00303 1. X00403 K03 1 D00403 1. X00104 K04 1 D00104 1. X00204 K04 1 D00204 1. X00304 K04 1 D00304 1. X00404 K04 1 D00404 1. X00105 K05 1 D00105 1. X00205 K05 1 D00205 1. X00305 K05 1 D00305 1. X00405 K05 1 D00405 1. I00101 COST 1 D00101 -1. I00101 D00102 1. Y00101 COST 2 D00101 1. I00201 COST 2 D00201 -1. I00201 D00202 1. Y00201 COST 3 D00201 1. I00301 COST 3 D00301 -1. I00301 D00302 1. Y00301 COST 2 D00301 1. I00401 COST 4 D00401 -1. I00401 D00402 1. Y00401 COST 5 D00401 1. INT1 'MARKER' 'INTORG' I00102 COST 1 D00102 -1. I00102 D00103 1. Y00102 COST 2 D00102 1. I00202 COST 2 D00202 -1. I00202 D00203 1. Y00202 COST 3 D00202 1. INT1END 'MARKER' 'INTEND' I00302 COST 3 D00302 -1. I00302 D00303 1. Y00302 COST 2 D00302 1. I00402 COST 4 D00402 -1. I00402 D00403 1. Y00402 COST 5 D00402 1. I00103 COST 1 D00103 -1. I00103 D00104 1. Y00103 COST 2 D00103 1. I00203 COST 2 D00203 -1. I00203 D00204 1. Y00203 COST 3 D00203 1. I00303 COST 3 D00303 -1. I00303 D00304 1. Y00303 COST 2 D00303 1. I00403 COST 4 D00403 -1. I00403 D00404 1. Y00403 COST 5 D00403 1. I00104 COST 1 D00104 -1. I00104 D00105 1. Y00104 COST 2 D00104 1. I00204 COST 2 D00204 -1. I00204 D00205 1. Y00204 COST 3 D00204 1. I00304 COST 3 D00304 -1. I00304 D00305 1. Y00304 COST 2 D00304 1. I00404 COST 4 D00404 -1. I00404 D00405 1. Y00404 COST 5 D00404 1. I00105 COST 1 D00105 -1. Y00105 COST 2 D00105 1. I00205 COST 2 D00205 -1. Y00205 COST 3 D00205 1. I00305 COST 3 D00305 -1. Y00305 COST 2 D00305 1. I00405 COST 4 D00405 -1. Y00405 COST 5 D00405 1. RHS RHS K01 3 RHS K02 6 RHS K03 10 RHS K04 2000 RHS K05 18 RHS D00101 1.000 RHS D00201 1.000 RHS D00301 1.000 RHS D00401 1.000 RHS D00102 2.667 RHS D00202 1.667 RHS D00302 2.667 RHS D00402 3.333 RHS D00103 2.667 RHS D00203 2.000 RHS D00303 3.000 RHS D00403 3.000 RHS D00104 2.667 RHS D00204 2.667 RHS D00304 2.667 RHS D00404 2.667 RHS D00105 2.667 RHS D00205 2.333 RHS D00305 2.333 RHS D00405 2.333 BOUNDS UP BOUND1 I00102 51.000000 UP BOUND1 Y00102 51.000000 UP BOUND1 Y00202 51.000000 UP BOUND1 I00202 51.000000 ENDATA DyLP-1.10.4/Data/Sample/block_milp.dec0000644000175200017520000000035312452373145015744 0ustar coincoinNBLOCKS 4 BLOCK 1 C_5.0_1.0 C_6.0_1.0 C_7.0_1.0 BLOCK 2 C_8.0_2.0 C_9.0_2.0 C_10.0_2.0 C_11.0_2.0 C_12.0_2.0 BLOCK 3 C_13.0_3.0 C_14.0_3.0 C_15.0_3.0 C_16.0_3.0 BLOCK 4 C_17.0_4.0 C_18.0_4.0 C_19.0_4.0 C_20.0_4.0 DyLP-1.10.4/Data/Sample/Makefile.am0000644000175200017520000000144212053222044015174 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 324 2012-11-21 18:57:40Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # List files that should be distributed # ######################################################################## EXTRA_DIST = $(EXAMPLE_FILES) DISTCLEANFILES = $(EXAMPLE_CLEAN_FILES) datacoindir = $(datadir)/coin/Data/Sample datacoin_DATA = $(EXAMPLE_FILES) pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = coindatasample.pc include BuildTools/Makemain.inc test: @echo "No test available." DyLP-1.10.4/Data/Sample/missing0000755000175200017520000002540611405216230014545 0ustar coincoin#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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 run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] 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 # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: DyLP-1.10.4/Data/Sample/galenet.mps0000644000175200017520000000211611431323442015302 0ustar coincoinNAME galenet ROWS L S1 L S2 L S3 E NODE4 E NODE5 G D6 G D7 G D8 N COST COLUMNS T14 S1 1. NODE4 1. T24 S2 1. NODE4 1. T25 S2 1. NODE5 1. T35 S3 1. NODE5 1. T46 D6 1. NODE4 -1. T47 D7 1. NODE4 -1. T57 D7 1. NODE5 -1. T58 D8 1. NODE5 -1. RHS RHS S1 20. S2 20. RHS S3 20. D6 10. RHS D7 20. D8 30. BOUNDS UP BND T14 30. UP BND T24 20. UP BND T25 10. UP BND T35 10. UP BND T46 10. UP BND T47 2. UP BND T57 20. UP BND T58 30. ENDATA DyLP-1.10.4/Data/Sample/p0548.mps0000644000175200017520000027063410430174061014456 0ustar coincoin*NAME: p0548 *ROWS: 176 *COLUMNS: 548 *INTEGER: 548 *NONZERO: 1711 *BEST SOLN: 8691 (opt) *LP SOLN: 315.29 *SOURCE: Crowder-Johnson-Padberg test set * Ellis L. Johnson (IBM) * E. Andrew Boyd (Rice University) *APPLICATION: unknown *COMMENTS: pure 0/1 IP * 82 SOS constraints * NAME P0548 ROWS N R1001 L R1002 L R1003 L R1004 L R1005 L R1006 L R1007 L R1008 L R1009 L R1010 L R1011 L R1012 L R1013 L R1014 L R1015 L R1016 L R1017 L R1018 L R1019 L R1020 L R1021 L R1022 L R1023 L R1024 L R1025 L R1026 L R1027 L R1028 L R1029 L R1030 L R1031 L R1032 L R1033 L R1034 L R1035 L R1036 L R1037 L R1038 L R1039 L R1040 L R1041 L R1042 L R1043 L R1044 L R1045 L R1046 L R1047 L R1048 L R1049 L R1050 L R1051 L R1052 L R1053 L R1054 L R1055 L R1056 L R1057 L R1058 L R1059 L R1060 L R1061 L R1062 L R1063 L R1064 L R1065 L R1066 L R1067 L R1068 L R1069 L R1070 L R1071 L R1072 L R1073 L R1074 L R1075 L R1076 L R1077 L R1078 L R1079 L R1080 L R1081 L R1082 L R1083 L R1084 L R1085 L R1086 L R1087 L R1088 L R1089 L R1090 L R1091 L R1092 L R1093 L R1094 L R1095 L R1096 L R1097 L R1098 L R1099 L R1100 L R1101 L R1102 L R1103 L R1104 L R1105 L R1106 L R1107 L R1108 L R1109 L R1110 L R1111 L R1112 L R1113 L R1114 L R1115 L R1116 L R1117 L R1118 L R1119 L R1120 L R1121 L R1122 L R1123 L R1124 L R1125 L R1126 L R1127 L R1128 L R1129 L R1130 L R1131 L R1132 L R1133 L R1134 L R1135 L R1136 L R1137 L R1138 L R1139 L R1140 L R1141 L R1142 L R1143 L R1144 L R1145 L R1146 L R1147 L R1148 L R1149 L R1150 L R1151 L R1152 L R1153 L R1154 L R1155 L R1156 L R1157 L R1158 L R1159 L R1160 L R1161 L R1162 L R1163 L R1164 L R1165 L R1166 L R1167 L R1168 L R1169 L R1170 L R1171 L R1172 L R1173 L R1174 L R1175 L R1176 L R1177 COLUMNS MARK0000 'MARKER' 'INTORG' C1001 R1001 169 R1002 -59 C1001 R1051 -59 R1101 20 C1002 R1001 10 R1002 -10 C1002 R1051 -10 R1173 1 C1003 R1001 235 R1002 -167 C1003 R1051 -167 R1100 -35 C1003 R1102 20 R1109 1 C1004 R1001 59 R1002 161 C1004 R1051 161 R1100 31 C1004 R1103 -19 R1109 -1 C1005 R1001 39 R1002 -35 C1005 R1051 -35 R1100 -32 C1005 R1104 20 R1109 1 C1006 R1002 -120 R1051 -120 C1006 R1110 1 C1007 R1002 -189 R1051 -189 C1007 R1110 1 C1008 R1001 118 R1002 -68 C1008 R1051 -68 R1174 1 C1009 R1002 -68 R1051 -68 C1009 R1105 20 C1010 R1001 29 R1002 -71 C1010 R1051 -71 R1106 20 C1011 R1001 186 R1003 -106 C1011 R1052 106 R1175 1 C1012 R1001 110 R1003 -59 C1012 R1052 59 R1101 13 C1013 R1001 6 R1003 -10 C1013 R1052 10 R1173 1 C1014 R1001 154 R1003 -167 C1014 R1052 167 R1100 -27 C1014 R1102 13 R1111 1 C1015 R1001 38 R1003 161 C1015 R1052 -161 R1100 24 C1015 R1103 -12 R1111 -1 C1016 R1001 26 R1003 -35 C1016 R1052 35 R1100 -25 C1016 R1104 13 R1111 1 C1017 R1003 -120 R1052 120 C1017 R1112 1 C1018 R1003 -189 R1052 189 C1018 R1112 1 C1019 R1001 77 R1003 -68 C1019 R1052 68 R1174 1 C1020 R1003 -68 R1052 68 C1020 R1105 13 C1021 R1001 19 R1003 -71 C1021 R1052 71 R1106 13 C1022 R1001 128 R1004 -59 C1022 R1053 -59 R1101 15 C1023 R1001 7 R1004 -10 C1023 R1053 -10 R1173 1 C1024 R1001 179 R1004 -167 C1024 R1053 -167 R1100 -26 C1024 R1102 15 R1113 1 C1025 R1001 45 R1004 161 C1025 R1053 161 R1100 23 C1025 R1103 -14 R1113 -1 C1026 R1001 30 R1004 -35 C1026 R1053 -35 R1100 -24 C1026 R1104 15 R1113 1 C1027 R1004 -120 R1053 -120 C1027 R1114 1 C1028 R1004 -189 R1053 -189 C1028 R1114 1 C1029 R1001 89 R1004 -68 C1029 R1053 -68 R1174 1 C1030 R1001 22 R1004 -71 C1030 R1053 -71 R1106 15 C1031 R1001 674 R1005 -59 C1031 R1054 59 R1101 78 C1032 R1001 39 R1005 -10 C1032 R1054 10 R1173 1 C1033 R1001 941 R1005 -167 C1033 R1054 167 R1100 -139 C1033 R1102 78 R1115 1 C1034 R1001 235 R1005 161 C1034 R1054 -161 R1100 127 C1034 R1103 -77 R1115 -1 C1035 R1001 157 R1005 -35 C1035 R1054 35 R1100 -128 C1035 R1104 78 R1115 1 C1036 R1005 -120 R1054 120 C1036 R1116 1 C1037 R1005 -189 R1054 189 C1037 R1116 1 C1038 R1001 470 R1005 -68 C1038 R1054 68 R1174 1 C1039 R1005 -68 R1054 68 C1039 R1105 78 C1040 R1001 118 R1005 -71 C1040 R1054 71 R1106 78 C1041 R1001 755 R1006 -106 C1041 R1055 106 R1175 1 C1042 R1001 445 R1006 -59 C1042 R1055 59 R1101 52 C1043 R1001 26 R1006 -10 C1043 R1055 10 R1173 1 C1044 R1001 622 R1006 -167 C1044 R1055 167 R1100 -109 C1044 R1102 52 R1117 1 C1045 R1001 155 R1006 161 C1045 R1055 -161 R1100 99 C1045 R1103 -51 R1117 -1 C1046 R1001 104 R1006 -35 C1046 R1055 35 R1100 -100 C1046 R1104 52 R1117 1 C1047 R1006 -120 R1055 120 C1047 R1118 1 C1048 R1006 -189 R1055 189 C1048 R1118 1 C1049 R1001 311 R1006 -68 C1049 R1055 68 R1174 1 C1050 R1006 -68 R1055 68 C1050 R1105 52 C1051 R1001 78 R1006 -71 C1051 R1055 71 R1106 52 C1052 R1001 159 R1007 -106 C1052 R1056 106 R1175 1 C1053 R1001 94 R1007 -59 C1053 R1056 59 R1101 11 C1054 R1001 5 R1007 -10 C1054 R1056 10 R1173 1 C1055 R1001 251 R1007 45 C1055 R1056 -45 R1107 -10 C1055 R1108 11 C1056 R1007 -120 R1056 120 C1056 R1119 1 C1057 R1007 -189 R1056 189 C1057 R1119 1 C1058 R1001 65 R1007 -68 C1058 R1056 68 R1174 1 C1059 R1007 -68 R1056 68 C1059 R1105 11 C1060 R1001 16 R1007 -71 C1060 R1056 71 R1106 11 C1061 R1001 6 R1008 -10 C1061 R1057 10 R1173 1 C1062 R1001 37 R1008 161 C1062 R1057 -161 R1100 25 C1062 R1103 -11 R1120 -1 C1063 R1001 25 R1008 -35 C1063 R1057 35 R1100 -26 C1063 R1104 12 R1120 1 C1064 R1001 74 R1008 -68 C1064 R1057 68 R1174 1 C1065 R1008 -68 R1057 68 C1065 R1105 12 C1066 R1001 18 R1008 -71 C1066 R1057 71 R1106 12 C1067 R1001 17 R1009 -10 C1067 R1058 10 R1173 1 C1068 R1001 101 R1009 161 C1068 R1058 -161 R1100 80 C1068 R1103 -33 R1121 -1 C1069 R1001 67 R1009 -35 C1069 R1058 35 R1100 -81 C1069 R1104 34 R1121 1 C1070 R1001 202 R1009 -68 C1070 R1058 68 R1174 1 C1071 R1009 -68 R1058 68 C1071 R1105 34 C1072 R1001 50 R1009 -71 C1072 R1058 71 R1106 34 C1073 R1001 74 R1010 -136 C1073 R1059 136 R1176 1 C1074 R1001 6 R1010 -10 C1074 R1059 10 R1173 1 C1075 R1001 37 R1010 161 C1075 R1059 -161 R1100 15 C1075 R1103 -11 R1122 -1 C1076 R1001 25 R1010 -35 C1076 R1059 35 R1100 -16 C1076 R1104 12 R1122 1 C1077 R1001 74 R1010 -68 C1077 R1059 68 R1174 1 C1078 R1010 -68 R1059 68 C1078 R1105 12 C1079 R1001 18 R1010 -71 C1079 R1059 71 R1106 12 C1080 R1001 265 R1011 -59 C1080 R1060 59 R1101 31 C1081 R1001 15 R1011 -10 C1081 R1060 10 R1173 1 C1082 R1001 370 R1011 -167 C1082 R1060 167 R1100 -58 C1082 R1102 31 R1123 1 C1083 R1001 92 R1011 161 C1083 R1060 -161 R1100 52 C1083 R1103 -30 R1123 -1 C1084 R1001 62 R1011 -35 C1084 R1060 35 R1100 -53 C1084 R1104 31 R1123 1 C1085 R1011 -120 R1060 120 C1085 R1124 1 C1086 R1011 -189 R1060 189 C1086 R1124 1 C1087 R1001 185 R1011 -68 C1087 R1060 68 R1174 1 C1088 R1011 -68 R1060 68 C1088 R1105 31 C1089 R1001 46 R1011 -71 C1089 R1060 71 R1106 31 C1090 R1001 296 R1012 -106 C1090 R1061 106 R1175 1 C1091 R1001 175 R1012 -59 C1091 R1061 59 R1101 20 C1092 R1001 10 R1012 -10 C1092 R1061 10 R1173 1 C1093 R1001 244 R1012 -167 C1093 R1061 167 R1100 -43 C1093 R1102 20 R1125 1 C1094 R1001 61 R1012 161 C1094 R1061 -161 R1100 38 C1094 R1103 -19 R1125 -1 C1095 R1001 41 R1012 -35 C1095 R1061 35 R1100 -39 C1095 R1104 20 R1125 1 C1096 R1012 -120 R1061 120 C1096 R1126 1 C1097 R1012 -189 R1061 189 C1097 R1126 1 C1098 R1001 122 R1012 -68 C1098 R1061 68 R1174 1 C1099 R1012 -68 R1061 68 C1099 R1105 20 C1100 R1001 30 R1012 -71 C1100 R1061 71 R1106 20 C1101 R1001 156 R1013 -59 C1101 R1062 59 R1101 18 C1102 R1001 9 R1013 -10 C1102 R1062 10 R1173 1 C1103 R1001 217 R1013 -167 C1103 R1062 167 R1100 -33 C1103 R1102 18 R1127 1 C1104 R1001 54 R1013 161 C1104 R1062 -161 R1100 30 C1104 R1103 -17 R1127 -1 C1105 R1001 36 R1013 -35 C1105 R1062 35 R1100 -31 C1105 R1104 18 R1127 1 C1106 R1013 -120 R1062 120 C1106 R1128 1 C1107 R1013 -189 R1062 189 C1107 R1128 1 C1108 R1001 109 R1013 -68 C1108 R1062 68 R1174 1 C1109 R1001 27 R1013 -71 C1109 R1062 71 R1106 18 C1110 R1001 819 R1014 -59 C1110 R1063 59 R1101 95 C1111 R1001 48 R1014 -10 C1111 R1063 10 R1173 1 C1112 R1001 1142 R1014 -167 C1112 R1063 167 R1100 -178 C1112 R1102 95 R1129 1 C1113 R1001 286 R1014 161 C1113 R1063 -161 R1100 163 C1113 R1103 -94 R1129 -1 C1114 R1001 190 R1014 -35 C1114 R1063 35 R1100 -164 C1114 R1104 95 R1129 1 C1115 R1014 -120 R1063 120 C1115 R1130 1 C1116 R1014 -189 R1063 189 C1116 R1130 1 C1117 R1001 571 R1014 -68 C1117 R1063 68 R1174 1 C1118 R1014 -68 R1063 68 C1118 R1105 95 C1119 R1001 143 R1014 -71 C1119 R1063 71 R1106 95 C1120 R1001 916 R1015 -106 C1120 R1064 106 R1175 1 C1121 R1001 541 R1015 -59 C1121 R1064 59 R1101 63 C1122 R1001 31 R1015 -10 C1122 R1064 10 R1173 1 C1123 R1001 755 R1015 -167 C1123 R1064 167 R1100 -132 C1123 R1102 63 R1131 1 C1124 R1001 189 R1015 161 C1124 R1064 -161 R1100 121 C1124 R1103 -62 R1131 -1 C1125 R1001 126 R1015 -35 C1125 R1064 35 R1100 -122 C1125 R1104 63 R1131 1 C1126 R1015 -120 R1064 120 C1126 R1132 1 C1127 R1015 -189 R1064 189 C1127 R1132 1 C1128 R1001 377 R1015 -68 C1128 R1064 68 R1174 1 C1129 R1015 -68 R1064 68 C1129 R1105 63 C1130 R1001 94 R1015 -71 C1130 R1064 71 R1106 63 C1131 R1001 194 R1016 -106 C1131 R1065 106 R1175 1 C1132 R1001 114 R1016 -59 C1132 R1065 59 R1101 13 C1133 R1001 7 R1016 -10 C1133 R1065 10 R1173 1 C1134 R1001 306 R1016 45 C1134 R1065 -45 R1107 -12 C1134 R1108 13 C1135 R1016 -120 R1065 120 C1135 R1133 1 C1136 R1016 -189 R1065 189 C1136 R1133 1 C1137 R1001 80 R1016 -68 C1137 R1065 68 R1174 1 C1138 R1016 -68 R1065 68 C1138 R1105 13 C1139 R1001 20 R1016 -71 C1139 R1065 71 R1106 13 C1140 R1001 5 R1017 -10 C1140 R1066 10 R1173 1 C1141 R1001 30 R1017 161 C1141 R1066 -161 R1100 21 C1141 R1103 -9 R1134 -1 C1142 R1001 20 R1017 -35 C1142 R1066 35 R1100 -22 C1142 R1104 10 R1134 1 C1143 R1001 61 R1017 -68 C1143 R1066 68 R1174 1 C1144 R1017 -68 R1066 68 C1144 R1105 10 C1145 R1001 15 R1017 -71 C1145 R1066 71 R1106 10 C1146 R1001 14 R1018 -10 C1146 R1067 10 R1173 1 C1147 R1001 83 R1018 161 C1147 R1067 -161 R1100 69 C1147 R1103 -27 R1135 -1 C1148 R1001 55 R1018 -35 C1148 R1067 35 R1100 -70 C1148 R1104 28 R1135 1 C1149 R1001 165 R1018 -68 C1149 R1067 68 R1174 1 C1150 R1018 -68 R1067 68 C1150 R1105 28 C1151 R1001 41 R1018 -71 C1151 R1067 71 R1106 28 C1152 R1001 60 R1019 -136 C1152 R1068 136 R1176 1 C1153 R1001 5 R1019 -10 C1153 R1068 10 R1173 1 C1154 R1001 30 R1019 161 C1154 R1068 -161 R1100 12 C1154 R1103 -9 R1136 -1 C1155 R1001 20 R1019 -35 C1155 R1068 35 R1100 -13 C1155 R1104 10 R1136 1 C1156 R1001 60 R1019 -68 C1156 R1068 68 R1174 1 C1157 R1019 -68 R1068 68 C1157 R1105 10 C1158 R1001 15 R1019 -71 C1158 R1068 71 R1106 10 C1159 R1001 192 R1020 -81 C1159 R1069 81 R1177 1 C1160 R1001 87 R1020 -59 C1160 R1069 59 R1101 10 C1161 R1001 5 R1020 -10 C1161 R1069 10 R1173 1 C1162 R1001 121 R1020 -167 C1162 R1069 167 R1100 -20 C1162 R1102 10 R1137 1 C1163 R1001 30 R1020 161 C1163 R1069 -161 R1100 17 C1163 R1103 -9 R1137 -1 C1164 R1001 20 R1020 -35 C1164 R1069 35 R1100 -18 C1164 R1104 10 R1137 1 C1165 R1020 -120 R1069 120 C1165 R1138 1 C1166 R1020 -189 R1069 189 C1166 R1138 1 C1167 R1001 61 R1020 -68 C1167 R1069 68 R1174 1 C1168 R1001 455 R1020 -149 C1168 R1069 149 C1169 R1001 69 R1020 -100 C1169 R1069 100 C1170 R1001 55 R1020 -77 C1170 R1069 77 C1171 R1001 15 R1020 -71 C1171 R1069 71 R1106 10 C1172 R1001 209 R1021 -81 C1172 R1070 81 R1177 1 C1173 R1001 95 R1021 -59 C1173 R1070 59 R1101 11 C1174 R1001 6 R1021 -10 C1174 R1070 10 R1173 1 C1175 R1001 33 R1021 161 C1175 R1070 -161 R1100 23 C1175 R1103 -10 R1139 -1 C1176 R1001 22 R1021 -35 C1176 R1070 35 R1100 -24 C1176 R1104 11 R1139 1 C1177 R1021 -120 R1070 120 C1177 R1140 1 C1178 R1021 -189 R1070 189 C1178 R1140 1 C1179 R1001 66 R1021 -68 C1179 R1070 68 R1174 1 C1180 R1001 495 R1021 -149 C1180 R1070 149 C1181 R1001 75 R1021 -100 C1181 R1070 100 C1182 R1001 59 R1021 -77 C1182 R1070 77 C1183 R1001 17 R1021 -71 C1183 R1070 71 R1106 11 C1184 R1001 234 R1022 -81 C1184 R1071 81 R1177 1 C1185 R1001 106 R1022 -59 C1185 R1071 59 R1101 12 C1186 R1001 6 R1022 -10 C1186 R1071 10 R1173 1 C1187 R1001 37 R1022 161 C1187 R1071 -161 R1100 26 C1187 R1103 -11 R1141 -1 C1188 R1001 25 R1022 -35 C1188 R1071 35 R1100 -27 C1188 R1104 12 R1141 1 C1189 R1022 -120 R1071 120 C1189 R1142 1 C1190 R1022 -189 R1071 189 C1190 R1142 1 C1191 R1001 74 R1022 -68 C1191 R1071 68 R1174 1 C1192 R1001 554 R1022 -149 C1192 R1071 149 C1193 R1001 84 R1022 -100 C1193 R1071 100 C1194 R1001 66 R1022 -77 C1194 R1071 77 C1195 R1001 18 R1022 -71 C1195 R1071 71 R1106 12 C1196 R1001 229 R1023 -93 C1196 R1072 -93 R1175 1 C1197 R1001 266 R1023 -81 C1197 R1072 -81 R1177 1 C1198 R1001 120 R1023 -59 C1198 R1072 -59 R1101 14 C1199 R1001 7 R1023 -10 C1199 R1072 -10 R1173 1 C1200 R1001 168 R1023 -167 C1200 R1072 -167 R1100 -32 C1200 R1102 14 R1143 1 C1201 R1001 42 R1023 161 C1201 R1072 161 R1100 29 C1201 R1103 -13 R1143 -1 C1202 R1001 28 R1023 -35 C1202 R1072 -35 R1100 -30 C1202 R1104 14 R1143 1 C1203 R1023 -120 R1072 -120 C1203 R1144 1 C1204 R1023 -189 R1072 -189 C1204 R1144 1 C1205 R1001 84 R1023 -68 C1205 R1072 -68 R1174 1 C1206 R1001 630 R1023 -149 C1206 R1072 -149 C1207 R1001 95 R1023 -100 C1207 R1072 -100 C1208 R1001 76 R1023 -77 C1208 R1072 -77 C1209 R1001 21 R1023 -71 C1209 R1072 -71 R1106 14 C1210 R1001 7 R1024 -10 C1210 R1073 10 R1173 1 C1211 R1001 44 R1024 161 C1211 R1073 -161 R1100 36 C1211 R1103 -14 R1145 -1 C1212 R1001 29 R1024 -35 C1212 R1073 35 R1100 -37 C1212 R1104 15 R1145 1 C1213 R1001 87 R1024 -68 C1213 R1073 68 R1174 1 C1214 R1001 653 R1024 -149 C1214 R1073 149 C1215 R1001 99 R1024 -100 C1215 R1073 100 C1216 R1001 22 R1024 -71 C1216 R1073 71 R1106 15 C1217 R1001 209 R1025 -81 C1217 R1074 81 R1177 1 C1218 R1001 95 R1025 -59 C1218 R1074 59 R1101 11 C1219 R1001 6 R1025 -10 C1219 R1074 10 R1173 1 C1220 R1001 33 R1025 161 C1220 R1074 -161 R1100 23 C1220 R1103 -10 R1146 -1 C1221 R1001 22 R1025 -35 C1221 R1074 35 R1100 -24 C1221 R1104 11 R1146 1 C1222 R1025 -120 R1074 120 C1222 R1147 1 C1223 R1025 -189 R1074 189 C1223 R1147 1 C1224 R1001 66 R1025 -68 C1224 R1074 68 R1174 1 C1225 R1001 495 R1025 -149 C1225 R1074 149 C1226 R1001 75 R1025 -100 C1226 R1074 100 C1227 R1001 59 R1025 -77 C1227 R1074 77 C1228 R1001 17 R1025 -71 C1228 R1074 71 R1106 11 C1229 R1001 494 R1026 -81 C1229 R1075 81 R1177 1 C1230 R1001 224 R1026 -59 C1230 R1075 59 R1101 26 C1231 R1001 13 R1026 -10 C1231 R1075 10 R1173 1 C1232 R1001 78 R1026 161 C1232 R1075 -161 R1100 56 C1232 R1103 -25 R1148 -1 C1233 R1001 52 R1026 -35 C1233 R1075 35 R1100 -57 C1233 R1104 26 R1148 1 C1234 R1026 -120 R1075 120 C1234 R1149 1 C1235 R1026 -189 R1075 189 C1235 R1149 1 C1236 R1001 156 R1026 -68 C1236 R1075 68 R1174 1 C1237 R1001 1170 R1026 -149 C1237 R1075 149 C1238 R1001 177 R1026 -100 C1238 R1075 100 C1239 R1001 140 R1026 -77 C1239 R1075 77 C1240 R1001 39 R1026 -71 C1240 R1075 71 R1106 26 C1241 R1001 208 R1027 -93 C1241 R1076 -93 R1175 1 C1242 R1001 241 R1027 -81 C1242 R1076 -81 R1177 1 C1243 R1001 109 R1027 -59 C1243 R1076 -59 R1101 13 C1244 R1001 76 R1027 -145 C1244 R1076 -145 C1245 R1001 6 R1027 -10 C1245 R1076 -10 R1173 1 C1246 R1001 292 R1027 45 C1246 R1076 45 R1107 -12 C1246 R1108 13 C1247 R1027 -120 R1076 -120 C1247 R1150 1 C1248 R1027 -189 R1076 -189 C1248 R1150 1 C1249 R1001 76 R1027 -68 C1249 R1076 -68 R1174 1 C1250 R1001 571 R1027 -149 C1250 R1076 -149 C1251 R1001 86 R1027 -100 C1251 R1076 -100 C1252 R1001 69 R1027 -77 C1252 R1076 -77 C1253 R1001 19 R1027 -71 C1253 R1076 -71 R1106 13 C1254 R1001 110 R1028 -59 C1254 R1077 59 R1101 13 C1255 R1001 77 R1028 -145 C1255 R1077 145 C1256 R1001 6 R1028 -10 C1256 R1077 10 R1173 1 C1257 R1001 154 R1028 -167 C1257 R1077 167 R1100 -28 C1257 R1102 13 R1151 1 C1258 R1001 38 R1028 161 C1258 R1077 -161 R1100 25 C1258 R1103 -12 R1151 -1 C1259 R1001 26 R1028 -35 C1259 R1077 35 R1100 -26 C1259 R1104 13 R1151 1 C1260 R1028 -120 R1077 120 C1260 R1152 1 C1261 R1028 -189 R1077 189 C1261 R1152 1 C1262 R1001 77 R1028 -68 C1262 R1077 68 R1174 1 C1263 R1001 261 R1028 -189 C1263 R1077 189 C1264 R1001 59 R1028 -104 C1264 R1077 104 C1265 R1001 51 R1028 -110 C1265 R1077 110 C1266 R1001 19 R1028 -71 C1266 R1077 71 R1106 13 C1267 R1001 583 R1029 -93 C1267 R1078 93 R1175 1 C1268 R1001 306 R1029 -59 C1268 R1078 59 R1101 36 C1269 R1001 214 R1029 -145 C1269 R1078 145 C1270 R1001 18 R1029 -10 C1270 R1078 10 R1173 1 C1271 R1001 427 R1029 -167 C1271 R1078 167 R1100 -77 C1271 R1102 36 R1153 1 C1272 R1001 107 R1029 161 C1272 R1078 -161 R1100 70 C1272 R1103 -35 R1153 -1 C1273 R1001 71 R1029 -35 C1273 R1078 35 R1100 -71 C1273 R1104 36 R1153 1 C1274 R1029 -120 R1078 120 C1274 R1154 1 C1275 R1029 -189 R1078 189 C1275 R1154 1 C1276 R1001 214 R1029 -68 C1276 R1078 68 R1174 1 C1277 R1001 725 R1029 -189 C1277 R1078 189 C1278 R1001 164 R1029 -104 C1278 R1078 104 C1279 R1001 142 R1029 -110 C1279 R1078 110 C1280 R1001 53 R1029 -71 C1280 R1078 71 R1106 36 C1281 R1001 144 R1030 -59 C1281 R1079 59 R1101 17 C1282 R1001 42 R1030 -155 C1282 R1079 155 C1283 R1001 8 R1030 -10 C1283 R1079 10 R1173 1 C1284 R1001 202 R1030 -167 C1284 R1079 167 R1100 -34 C1284 R1102 17 R1155 1 C1285 R1001 50 R1030 161 C1285 R1079 -161 R1100 31 C1285 R1103 -16 R1155 -1 C1286 R1001 34 R1030 -35 C1286 R1079 35 R1100 -32 C1286 R1104 17 R1155 1 C1287 R1030 -120 R1079 120 C1287 R1156 1 C1288 R1030 -189 R1079 189 C1288 R1156 1 C1289 R1001 101 R1030 -68 C1289 R1079 68 R1174 1 C1290 R1001 342 R1030 -189 C1290 R1079 189 C1291 R1001 77 R1030 -104 C1291 R1079 104 C1292 R1001 67 R1030 -110 C1292 R1079 110 C1293 R1001 25 R1030 -71 C1293 R1079 71 R1106 17 C1294 R1001 1193 R1031 -93 C1294 R1080 93 R1175 1 C1295 R1001 626 R1031 -59 C1295 R1080 59 R1101 73 C1296 R1001 437 R1031 -145 C1296 R1080 145 C1297 R1001 36 R1031 -10 C1297 R1080 10 R1173 1 C1298 R1001 874 R1031 -167 C1298 R1080 167 R1100 -158 C1298 R1102 73 R1157 1 C1299 R1001 218 R1031 161 C1299 R1080 -161 R1100 144 C1299 R1103 -72 R1157 -1 C1300 R1001 146 R1031 -35 C1300 R1080 35 R1100 -145 C1300 R1104 73 R1157 1 C1301 R1031 -120 R1080 120 C1301 R1158 1 C1302 R1031 -189 R1080 189 C1302 R1158 1 C1303 R1001 437 R1031 -68 C1303 R1080 68 R1174 1 C1304 R1001 1482 R1031 -189 C1304 R1080 189 C1305 R1001 335 R1031 -104 C1305 R1080 104 C1306 R1001 291 R1031 -110 C1306 R1080 110 C1307 R1001 109 R1031 -71 C1307 R1080 71 R1106 73 C1308 R1001 328 R1032 -93 C1308 R1081 93 R1175 1 C1309 R1001 172 R1032 -59 C1309 R1081 59 R1101 20 C1310 R1001 120 R1032 -136 C1310 R1081 136 R1176 1 C1311 R1001 10 R1032 -10 C1311 R1081 10 R1173 1 C1312 R1001 240 R1032 -167 C1312 R1081 167 R1100 -24 C1312 R1102 20 R1159 1 C1313 R1001 60 R1032 161 C1313 R1081 -161 R1100 21 C1313 R1103 -19 R1159 -1 C1314 R1001 40 R1032 -35 C1314 R1081 35 R1100 -22 C1314 R1104 20 R1159 1 C1315 R1032 -138 R1081 138 C1316 R1001 120 R1032 -68 C1316 R1081 68 R1174 1 C1317 R1001 407 R1032 -189 C1317 R1081 189 C1318 R1001 92 R1032 -104 C1318 R1081 104 C1319 R1001 80 R1032 -110 C1319 R1081 110 C1320 R1001 30 R1032 -71 C1320 R1081 71 R1106 20 C1321 R1001 164 R1033 -93 C1321 R1082 93 R1175 1 C1322 R1001 60 R1033 -145 C1322 R1082 145 C1323 R1001 5 R1033 -10 C1323 R1082 10 R1173 1 C1324 R1001 30 R1033 161 C1324 R1082 -161 R1100 22 C1324 R1103 -9 R1160 -1 C1325 R1001 20 R1033 -35 C1325 R1082 35 R1100 -23 C1325 R1104 10 R1160 1 C1326 R1001 60 R1033 -68 C1326 R1082 68 R1174 1 C1327 R1001 204 R1033 -189 C1327 R1082 189 C1328 R1001 46 R1033 -104 C1328 R1082 104 C1329 R1001 15 R1033 -71 C1329 R1082 71 R1106 10 C1330 R1001 220 R1034 -93 C1330 R1083 93 R1175 1 C1331 R1001 80 R1034 -145 C1331 R1083 145 C1332 R1001 7 R1034 -10 C1332 R1083 10 R1173 1 C1333 R1001 27 R1034 -35 C1333 R1083 35 R1100 -33 C1333 R1104 13 R1161 1 C1334 R1001 80 R1034 -68 C1334 R1083 68 R1174 1 C1335 R1001 273 R1034 -189 C1335 R1083 189 C1336 R1001 62 R1034 -104 C1336 R1083 104 C1337 R1001 20 R1034 -71 C1337 R1083 71 R1106 13 C1338 R1001 285 R1035 -93 C1338 R1084 93 R1175 1 C1339 R1001 104 R1035 -145 C1339 R1084 145 C1340 R1001 9 R1035 -10 C1340 R1084 10 R1173 1 C1341 R1035 -189 R1084 189 C1342 R1001 104 R1035 -68 C1342 R1084 68 R1174 1 C1343 R1001 354 R1035 -189 C1343 R1084 189 C1344 R1001 80 R1035 -104 C1344 R1084 104 C1345 R1001 70 R1035 -110 C1345 R1084 110 C1346 R1001 26 R1035 -71 C1346 R1084 71 R1106 17 C1347 R1001 918 R1036 -93 C1347 R1085 93 R1175 1 C1348 R1001 336 R1036 -145 C1348 R1085 145 C1349 R1001 28 R1036 -10 C1349 R1085 10 R1173 1 C1350 R1036 -189 R1085 189 C1351 R1001 336 R1036 -68 C1351 R1085 68 R1174 1 C1352 R1001 1140 R1036 -189 C1352 R1085 189 C1353 R1001 258 R1036 -104 C1353 R1085 104 C1354 R1001 224 R1036 -110 C1354 R1085 110 C1355 R1001 84 R1036 -71 C1355 R1085 71 R1106 56 C1356 R1001 256 R1037 -93 C1356 R1086 -93 R1175 1 C1357 R1001 94 R1037 -136 C1357 R1086 -136 R1176 1 C1358 R1001 8 R1037 -10 C1358 R1086 -10 R1173 1 C1359 R1001 187 R1037 -167 C1359 R1086 -167 R1100 -19 C1359 R1102 16 C1360 R1037 -138 R1086 -138 C1361 R1001 94 R1037 -68 C1361 R1086 -68 R1174 1 C1362 R1001 318 R1037 -189 C1362 R1086 -189 C1363 R1001 72 R1037 -104 C1363 R1086 -104 C1364 R1001 62 R1037 -110 C1364 R1086 -110 C1365 R1001 23 R1037 -71 C1365 R1086 -71 R1106 16 C1366 R1001 166 R1038 -93 C1366 R1087 93 R1175 1 C1367 R1001 87 R1038 -59 C1367 R1087 59 R1101 10 C1368 R1001 5 R1038 -10 C1368 R1087 10 R1173 1 C1369 R1001 121 R1038 -167 C1369 R1087 167 R1100 -23 C1369 R1102 10 R1162 1 C1370 R1001 30 R1038 161 C1370 R1087 -161 R1100 20 C1370 R1103 -9 R1162 -1 C1371 R1001 20 R1038 -35 C1371 R1087 35 R1100 -21 C1371 R1104 10 R1162 1 C1372 R1038 -120 R1087 120 C1372 R1163 1 C1373 R1038 -189 R1087 189 C1373 R1163 1 C1374 R1001 61 R1038 -68 C1374 R1087 68 R1174 1 C1375 R1001 273 R1038 -180 C1375 R1087 180 C1376 R1001 56 R1038 -120 C1376 R1087 120 C1377 R1001 45 R1038 -100 C1377 R1087 100 C1378 R1001 15 R1038 -71 C1378 R1087 71 R1106 10 C1379 R1001 229 R1039 -59 C1379 R1088 59 R1101 27 C1380 R1001 36 R1039 -34 C1380 R1088 34 C1381 R1001 13 R1039 -10 C1381 R1088 10 R1173 1 C1382 R1001 319 R1039 -167 C1382 R1088 167 R1100 -52 C1382 R1102 27 R1164 1 C1383 R1001 80 R1039 161 C1383 R1088 -161 R1100 47 C1383 R1103 -26 R1164 -1 C1384 R1001 53 R1039 -35 C1384 R1088 35 R1100 -48 C1384 R1104 27 R1164 1 C1385 R1039 -120 R1088 120 C1385 R1165 1 C1386 R1039 -189 R1088 189 C1386 R1165 1 C1387 R1001 160 R1039 -68 C1387 R1088 68 R1174 1 C1388 R1001 718 R1039 -180 C1388 R1088 180 C1389 R1001 146 R1039 -120 C1389 R1088 120 C1390 R1001 120 R1039 -100 C1390 R1088 100 C1391 R1001 40 R1039 -71 C1391 R1088 71 R1106 27 C1392 R1001 430 R1040 -59 C1392 R1089 59 R1101 50 C1393 R1001 25 R1040 -10 C1393 R1089 10 R1173 1 C1394 R1001 600 R1040 -167 C1394 R1089 167 R1100 -120 C1394 R1102 50 R1166 1 C1395 R1001 150 R1040 161 C1395 R1089 -161 R1100 109 C1395 R1103 -49 R1166 -1 C1396 R1001 100 R1040 -35 C1396 R1089 35 R1100 -110 C1396 R1104 50 R1166 1 C1397 R1040 -120 R1089 120 C1397 R1167 1 C1398 R1040 -189 R1089 189 C1398 R1167 1 C1399 R1001 300 R1040 -68 C1399 R1089 68 R1174 1 C1400 R1001 1350 R1040 -180 C1400 R1089 180 C1401 R1001 275 R1040 -120 C1401 R1089 120 C1402 R1001 225 R1040 -100 C1402 R1089 100 C1403 R1001 75 R1040 -71 C1403 R1089 71 R1106 50 C1404 R1001 356 R1041 -93 C1404 R1090 93 R1175 1 C1405 R1001 187 R1041 -59 C1405 R1090 59 R1101 22 C1406 R1001 11 R1041 -10 C1406 R1090 10 R1173 1 C1407 R1001 260 R1041 -167 C1407 R1090 167 R1100 -46 C1407 R1102 22 R1168 1 C1408 R1001 65 R1041 161 C1408 R1090 -161 R1100 41 C1408 R1103 -21 R1168 -1 C1409 R1001 43 R1041 -35 C1409 R1090 35 R1100 -42 C1409 R1104 22 R1168 1 C1410 R1041 -120 R1090 120 C1410 R1169 1 C1411 R1041 -189 R1090 189 C1411 R1169 1 C1412 R1001 130 R1041 -68 C1412 R1090 68 R1174 1 C1413 R1001 586 R1041 -180 C1413 R1090 180 C1414 R1001 119 R1041 -120 C1414 R1090 120 C1415 R1001 98 R1041 -100 C1415 R1090 100 C1416 R1001 33 R1041 -71 C1416 R1090 71 R1106 22 C1417 R1001 313 R1042 -93 C1417 R1091 93 R1175 1 C1418 R1001 26 R1042 -34 C1418 R1091 34 C1419 R1001 10 R1042 -10 C1419 R1091 10 R1173 1 C1420 R1001 229 R1042 -167 C1420 R1091 167 R1100 -42 C1420 R1102 19 R1170 1 C1421 R1001 57 R1042 161 C1421 R1091 -161 R1100 38 C1421 R1103 -18 R1170 -1 C1422 R1001 38 R1042 -35 C1422 R1091 35 R1100 -39 C1422 R1104 19 R1170 1 C1423 R1042 -120 R1091 120 C1423 R1171 1 C1424 R1042 -189 R1091 189 C1424 R1171 1 C1425 R1001 115 R1042 -68 C1425 R1091 68 R1174 1 C1426 R1001 516 R1042 -180 C1426 R1091 180 C1427 R1001 105 R1042 -120 C1427 R1091 120 C1428 R1001 86 R1042 -100 C1428 R1091 100 C1429 R1001 29 R1042 -71 C1429 R1091 71 R1106 19 C1430 R1001 6 R1043 -10 C1430 R1092 10 R1173 1 C1431 R1001 24 R1043 -35 C1431 R1092 35 R1100 -33 C1431 R1104 12 R1172 1 C1432 R1001 72 R1043 -68 C1432 R1092 68 R1174 1 C1433 R1001 324 R1043 -180 C1433 R1092 180 C1434 R1001 66 R1043 -120 C1434 R1092 120 C1435 R1001 18 R1043 -71 C1435 R1092 71 R1106 12 C1436 R1001 211 R1044 -93 C1436 R1093 93 R1175 1 C1437 R1001 17 R1044 -34 C1437 R1093 34 C1438 R1001 6 R1044 -10 C1438 R1093 10 R1173 1 C1439 R1001 39 R1044 161 C1439 R1093 -161 R1100 23 C1439 R1103 -12 C1440 R1044 -189 R1093 189 C1441 R1001 77 R1044 -68 C1441 R1093 68 R1174 1 C1442 R1001 348 R1044 -180 C1442 R1093 180 C1443 R1001 71 R1044 -120 C1443 R1093 120 C1444 R1001 58 R1044 -100 C1444 R1093 100 C1445 R1001 19 R1044 -71 C1445 R1093 71 R1106 13 C1446 R1001 285 R1045 -93 C1446 R1094 93 R1175 1 C1447 R1001 9 R1045 -10 C1447 R1094 10 R1173 1 C1448 R1045 -189 R1094 189 C1449 R1001 104 R1045 -68 C1449 R1094 68 R1174 1 C1450 R1001 470 R1045 -180 C1450 R1094 180 C1451 R1001 96 R1045 -120 C1451 R1094 120 C1452 R1001 78 R1045 -100 C1452 R1094 100 C1453 R1001 26 R1045 -71 C1453 R1094 71 R1106 17 C1454 R1001 1454 R1046 -93 C1454 R1095 93 R1175 1 C1455 R1001 44 R1046 -10 C1455 R1095 10 R1173 1 C1456 R1046 -189 R1095 189 C1457 R1001 532 R1046 -68 C1457 R1095 68 R1174 1 C1458 R1001 4435 R1046 -192 C1458 R1095 192 C1459 R1001 488 R1046 -120 C1459 R1095 120 C1460 R1001 399 R1046 -100 C1460 R1095 100 C1461 R1001 133 R1046 -71 C1461 R1095 71 R1106 89 C1462 R1001 295 R1047 -93 C1462 R1096 93 R1175 1 C1463 R1001 9 R1047 -10 C1463 R1096 10 R1173 1 C1464 R1047 -189 R1096 189 C1465 R1001 108 R1047 -68 C1465 R1096 68 R1174 1 C1466 R1001 900 R1047 -192 C1466 R1096 192 C1467 R1001 99 R1047 -120 C1467 R1096 120 C1468 R1001 81 R1047 -100 C1468 R1096 100 C1469 R1001 27 R1047 -71 C1469 R1096 71 R1106 18 C1470 R1001 164 R1048 -93 C1470 R1097 93 R1175 1 C1471 R1001 60 R1048 -136 C1471 R1097 136 R1176 1 C1472 R1001 5 R1048 -10 C1472 R1097 10 R1173 1 C1473 R1048 -138 R1097 138 C1474 R1001 60 R1048 -68 C1474 R1097 68 R1174 1 C1475 R1001 500 R1048 -192 C1475 R1097 192 C1476 R1001 55 R1048 -120 C1476 R1097 120 C1477 R1001 45 R1048 -100 C1477 R1097 100 C1478 R1001 15 R1048 -71 C1478 R1097 71 R1106 10 C1479 R1001 1165 R1049 -93 C1479 R1098 -93 R1175 1 C1480 R1001 36 R1049 -10 C1480 R1098 -10 R1173 1 C1481 R1049 -189 R1098 -189 C1482 R1001 427 R1049 -68 C1482 R1098 -68 R1174 1 C1483 R1001 3555 R1049 -192 C1483 R1098 -192 C1484 R1001 391 R1049 -120 C1484 R1098 -120 C1485 R1001 320 R1049 -100 C1485 R1098 -100 C1486 R1001 107 R1049 -71 C1486 R1098 -71 R1106 71 C1487 R1001 399 R1050 -106 C1487 R1099 106 R1175 1 C1488 R1001 14 R1050 -10 C1488 R1099 10 R1173 1 C1489 R1050 -189 R1099 189 C1490 R1001 164 R1050 -68 C1490 R1099 68 R1174 1 C1491 R1001 1370 R1050 -192 C1491 R1099 192 C1492 R1001 151 R1050 -120 C1492 R1099 120 C1493 R1001 123 R1050 -100 C1493 R1099 100 C1494 R1001 41 R1050 -71 C1494 R1099 71 R1106 27 C1495 R1001 100 R1173 -49 C1496 R1001 1000 R1174 -49 C1497 R1001 11000 R1175 -26 C1498 R1001 2000 R1176 -5 C1499 R1001 2600 R1177 -7 C1500 R1002 9999 R1051 -9999 C1500 R1100 -15 C1501 R1003 9999 R1052 -9999 C1501 R1100 -12 C1502 R1004 9999 R1053 -9999 C1502 R1100 -8 C1503 R1005 9999 R1054 -9999 C1503 R1100 -58 C1504 R1006 9999 R1055 -9999 C1504 R1100 -48 C1505 R1007 9999 R1056 -9999 C1505 R1100 -10 C1506 R1008 9999 R1057 -9999 C1506 R1100 -11 C1507 R1009 9999 R1058 -9999 C1507 R1100 -31 C1508 R1010 9999 R1059 -9999 C1508 R1100 -11 C1509 R1011 9999 R1060 -9999 C1509 R1100 -28 C1510 R1012 9999 R1061 -9999 C1510 R1100 -19 C1511 R1013 9999 R1062 -9999 C1511 R1100 -13 C1512 R1014 9999 R1063 -9999 C1512 R1100 -88 C1513 R1015 9999 R1064 -9999 C1513 R1100 -58 C1514 R1016 9999 R1065 -9999 C1514 R1100 -12 C1515 R1017 9999 R1066 -9999 C1515 R1100 -9 C1516 R1018 9999 R1067 -9999 C1516 R1100 -25 C1517 R1019 9999 R1068 -9999 C1517 R1100 -9 C1518 R1020 9999 R1069 -9999 C1518 R1100 -9 C1519 R1021 9999 R1070 -9999 C1519 R1100 -10 C1520 R1022 9999 R1071 -9999 C1520 R1100 -11 C1521 R1023 9999 R1072 -9999 C1521 R1100 -13 C1522 R1024 9999 R1073 -9999 C1522 R1100 -13 C1523 R1025 9999 R1074 -9999 C1523 R1100 -10 C1524 R1026 9999 R1075 -9999 C1524 R1100 -24 C1525 R1027 9999 R1076 -9999 C1525 R1100 -12 C1526 R1028 9999 R1077 -9999 C1526 R1100 -12 C1527 R1029 9999 R1078 -9999 C1527 R1100 -33 C1528 R1030 9999 R1079 -9999 C1528 R1100 -15 C1529 R1031 9999 R1080 -9999 C1529 R1100 -67 C1530 R1032 9999 R1081 -9999 C1530 R1100 -18 C1531 R1033 9999 R1082 -9999 C1531 R1100 -9 C1532 R1034 9999 R1083 -9999 C1532 R1100 -12 C1533 R1035 9999 R1084 -9999 C1533 R1100 -16 C1534 R1036 9999 R1085 -9999 C1534 R1100 -52 C1535 R1037 9999 R1086 -9999 C1535 R1100 -14 C1536 R1038 9999 R1087 -9999 C1536 R1100 -9 C1537 R1039 9999 R1088 -9999 C1537 R1100 -20 C1538 R1040 9999 R1089 -9999 C1538 R1100 -46 C1539 R1041 9999 R1090 -9999 C1539 R1100 -20 C1540 R1042 9999 R1091 -9999 C1540 R1100 -18 C1541 R1043 9999 R1092 -9999 C1541 R1100 -11 C1542 R1044 9999 R1093 -9999 C1542 R1100 -12 C1543 R1045 9999 R1094 -9999 C1543 R1100 -16 C1544 R1046 9999 R1095 -9999 C1544 R1100 -82 C1545 R1047 9999 R1096 -9999 C1545 R1100 -17 C1546 R1048 9999 R1097 -9999 C1546 R1100 -9 C1547 R1049 9999 R1098 -9999 C1547 R1100 -66 C1548 R1050 9999 R1099 -9999 C1548 R1100 -25 MARK0001 'MARKER' 'INTEND' RHS RHS R1002 9303 R1003 9901 RHS R1004 9509 R1005 9312 RHS R1006 9805 R1007 9330 RHS R1008 9446 R1009 9049 RHS R1010 9485 R1011 10045 RHS R1012 9740 R1013 9932 RHS R1014 10018 R1015 9680 RHS R1016 9240 R1017 9290 RHS R1018 10053 R1019 9365 RHS R1020 9826 R1021 9752 RHS R1022 9544 R1023 9003 RHS R1024 9827 R1025 9726 RHS R1026 9774 R1027 8864 RHS R1028 9910 R1029 9864 RHS R1030 9910 R1031 9665 RHS R1032 9653 R1033 9900 RHS R1034 9559 R1035 9893 RHS R1036 9605 R1037 8796 RHS R1038 9078 R1039 9478 RHS R1040 9647 R1041 10001 RHS R1042 9601 R1043 9557 RHS R1044 9729 R1045 9516 RHS R1046 9179 R1047 9125 RHS R1048 9723 R1049 8782 RHS R1050 9690 R1051 154 RHS R1052 -2 R1053 77 RHS R1054 587 R1055 94 RHS R1056 569 R1057 453 RHS R1058 850 R1059 414 RHS R1060 -146 R1061 159 RHS R1062 -33 R1063 -119 RHS R1064 219 R1065 659 RHS R1066 609 R1067 -154 RHS R1068 534 R1069 73 RHS R1070 147 R1071 355 RHS R1072 138 R1073 72 RHS R1074 173 R1075 125 RHS R1076 -1 R1077 -11 RHS R1078 35 R1079 -11 RHS R1080 234 R1081 246 RHS R1082 -1 R1083 340 RHS R1084 6 R1085 294 RHS R1086 -69 R1087 821 RHS R1088 421 R1089 252 RHS R1090 -102 R1091 298 RHS R1092 342 R1093 170 RHS R1094 383 R1095 720 RHS R1096 774 R1097 176 RHS R1098 -83 R1099 209 RHS R1100 -920 R1101 1200 RHS R1102 350 R1103 -104 RHS R1104 195 R1105 40 RHS R1106 1564 R1107 198 RHS R1110 1 R1112 1 RHS R1114 1 R1116 1 RHS R1118 1 R1119 1 RHS R1124 1 R1126 1 RHS R1128 1 R1130 1 RHS R1132 1 R1133 1 RHS R1138 1 R1140 1 RHS R1142 1 R1144 1 RHS R1147 1 R1149 1 RHS R1150 1 R1152 1 RHS R1154 1 R1156 1 RHS R1158 1 R1161 1 RHS R1163 1 R1165 1 RHS R1167 1 R1169 1 RHS R1171 1 R1172 1 BOUNDS UP ONE C1001 1 UP ONE C1002 1 UP ONE C1003 1 UP ONE C1004 1 UP ONE C1005 1 UP ONE C1006 1 UP ONE C1007 1 UP ONE C1008 1 UP ONE C1009 1 UP ONE C1010 1 UP ONE C1011 1 UP ONE C1012 1 UP ONE C1013 1 UP ONE C1014 1 UP ONE C1015 1 UP ONE C1016 1 UP ONE C1017 1 UP ONE C1018 1 UP ONE C1019 1 UP ONE C1020 1 UP ONE C1021 1 UP ONE C1022 1 UP ONE C1023 1 UP ONE C1024 1 UP ONE C1025 1 UP ONE C1026 1 UP ONE C1027 1 UP ONE C1028 1 UP ONE C1029 1 UP ONE C1030 1 UP ONE C1031 1 UP ONE C1032 1 UP ONE C1033 1 UP ONE C1034 1 UP ONE C1035 1 UP ONE C1036 1 UP ONE C1037 1 UP ONE C1038 1 UP ONE C1039 1 UP ONE C1040 1 UP ONE C1041 1 UP ONE C1042 1 UP ONE C1043 1 UP ONE C1044 1 UP ONE C1045 1 UP ONE C1046 1 UP ONE C1047 1 UP ONE C1048 1 UP ONE C1049 1 UP ONE C1050 1 UP ONE C1051 1 UP ONE C1052 1 UP ONE C1053 1 UP ONE C1054 1 UP ONE C1055 1 UP ONE C1056 1 UP ONE C1057 1 UP ONE C1058 1 UP ONE C1059 1 UP ONE C1060 1 UP ONE C1061 1 UP ONE C1062 1 UP ONE C1063 1 UP ONE C1064 1 UP ONE C1065 1 UP ONE C1066 1 UP ONE C1067 1 UP ONE C1068 1 UP ONE C1069 1 UP ONE C1070 1 UP ONE C1071 1 UP ONE C1072 1 UP ONE C1073 1 UP ONE C1074 1 UP ONE C1075 1 UP ONE C1076 1 UP ONE C1077 1 UP ONE C1078 1 UP ONE C1079 1 UP ONE C1080 1 UP ONE C1081 1 UP ONE C1082 1 UP ONE C1083 1 UP ONE C1084 1 UP ONE C1085 1 UP ONE C1086 1 UP ONE C1087 1 UP ONE C1088 1 UP ONE C1089 1 UP ONE C1090 1 UP ONE C1091 1 UP ONE C1092 1 UP ONE C1093 1 UP ONE C1094 1 UP ONE C1095 1 UP ONE C1096 1 UP ONE C1097 1 UP ONE C1098 1 UP ONE C1099 1 UP ONE C1100 1 UP ONE C1101 1 UP ONE C1102 1 UP ONE C1103 1 UP ONE C1104 1 UP ONE C1105 1 UP ONE C1106 1 UP ONE C1107 1 UP ONE C1108 1 UP ONE C1109 1 UP ONE C1110 1 UP ONE C1111 1 UP ONE C1112 1 UP ONE C1113 1 UP ONE C1114 1 UP ONE C1115 1 UP ONE C1116 1 UP ONE C1117 1 UP ONE C1118 1 UP ONE C1119 1 UP ONE C1120 1 UP ONE C1121 1 UP ONE C1122 1 UP ONE C1123 1 UP ONE C1124 1 UP ONE C1125 1 UP ONE C1126 1 UP ONE C1127 1 UP ONE C1128 1 UP ONE C1129 1 UP ONE C1130 1 UP ONE C1131 1 UP ONE C1132 1 UP ONE C1133 1 UP ONE C1134 1 UP ONE C1135 1 UP ONE C1136 1 UP ONE C1137 1 UP ONE C1138 1 UP ONE C1139 1 UP ONE C1140 1 UP ONE C1141 1 UP ONE C1142 1 UP ONE C1143 1 UP ONE C1144 1 UP ONE C1145 1 UP ONE C1146 1 UP ONE C1147 1 UP ONE C1148 1 UP ONE C1149 1 UP ONE C1150 1 UP ONE C1151 1 UP ONE C1152 1 UP ONE C1153 1 UP ONE C1154 1 UP ONE C1155 1 UP ONE C1156 1 UP ONE C1157 1 UP ONE C1158 1 UP ONE C1159 1 UP ONE C1160 1 UP ONE C1161 1 UP ONE C1162 1 UP ONE C1163 1 UP ONE C1164 1 UP ONE C1165 1 UP ONE C1166 1 UP ONE C1167 1 UP ONE C1168 1 UP ONE C1169 1 UP ONE C1170 1 UP ONE C1171 1 UP ONE C1172 1 UP ONE C1173 1 UP ONE C1174 1 UP ONE C1175 1 UP ONE C1176 1 UP ONE C1177 1 UP ONE C1178 1 UP ONE C1179 1 UP ONE C1180 1 UP ONE C1181 1 UP ONE C1182 1 UP ONE C1183 1 UP ONE C1184 1 UP ONE C1185 1 UP ONE C1186 1 UP ONE C1187 1 UP ONE C1188 1 UP ONE C1189 1 UP ONE C1190 1 UP ONE C1191 1 UP ONE C1192 1 UP ONE C1193 1 UP ONE C1194 1 UP ONE C1195 1 UP ONE C1196 1 UP ONE C1197 1 UP ONE C1198 1 UP ONE C1199 1 UP ONE C1200 1 UP ONE C1201 1 UP ONE C1202 1 UP ONE C1203 1 UP ONE C1204 1 UP ONE C1205 1 UP ONE C1206 1 UP ONE C1207 1 UP ONE C1208 1 UP ONE C1209 1 UP ONE C1210 1 UP ONE C1211 1 UP ONE C1212 1 UP ONE C1213 1 UP ONE C1214 1 UP ONE C1215 1 UP ONE C1216 1 UP ONE C1217 1 UP ONE C1218 1 UP ONE C1219 1 UP ONE C1220 1 UP ONE C1221 1 UP ONE C1222 1 UP ONE C1223 1 UP ONE C1224 1 UP ONE C1225 1 UP ONE C1226 1 UP ONE C1227 1 UP ONE C1228 1 UP ONE C1229 1 UP ONE C1230 1 UP ONE C1231 1 UP ONE C1232 1 UP ONE C1233 1 UP ONE C1234 1 UP ONE C1235 1 UP ONE C1236 1 UP ONE C1237 1 UP ONE C1238 1 UP ONE C1239 1 UP ONE C1240 1 UP ONE C1241 1 UP ONE C1242 1 UP ONE C1243 1 UP ONE C1244 1 UP ONE C1245 1 UP ONE C1246 1 UP ONE C1247 1 UP ONE C1248 1 UP ONE C1249 1 UP ONE C1250 1 UP ONE C1251 1 UP ONE C1252 1 UP ONE C1253 1 UP ONE C1254 1 UP ONE C1255 1 UP ONE C1256 1 UP ONE C1257 1 UP ONE C1258 1 UP ONE C1259 1 UP ONE C1260 1 UP ONE C1261 1 UP ONE C1262 1 UP ONE C1263 1 UP ONE C1264 1 UP ONE C1265 1 UP ONE C1266 1 UP ONE C1267 1 UP ONE C1268 1 UP ONE C1269 1 UP ONE C1270 1 UP ONE C1271 1 UP ONE C1272 1 UP ONE C1273 1 UP ONE C1274 1 UP ONE C1275 1 UP ONE C1276 1 UP ONE C1277 1 UP ONE C1278 1 UP ONE C1279 1 UP ONE C1280 1 UP ONE C1281 1 UP ONE C1282 1 UP ONE C1283 1 UP ONE C1284 1 UP ONE C1285 1 UP ONE C1286 1 UP ONE C1287 1 UP ONE C1288 1 UP ONE C1289 1 UP ONE C1290 1 UP ONE C1291 1 UP ONE C1292 1 UP ONE C1293 1 UP ONE C1294 1 UP ONE C1295 1 UP ONE C1296 1 UP ONE C1297 1 UP ONE C1298 1 UP ONE C1299 1 UP ONE C1300 1 UP ONE C1301 1 UP ONE C1302 1 UP ONE C1303 1 UP ONE C1304 1 UP ONE C1305 1 UP ONE C1306 1 UP ONE C1307 1 UP ONE C1308 1 UP ONE C1309 1 UP ONE C1310 1 UP ONE C1311 1 UP ONE C1312 1 UP ONE C1313 1 UP ONE C1314 1 UP ONE C1315 1 UP ONE C1316 1 UP ONE C1317 1 UP ONE C1318 1 UP ONE C1319 1 UP ONE C1320 1 UP ONE C1321 1 UP ONE C1322 1 UP ONE C1323 1 UP ONE C1324 1 UP ONE C1325 1 UP ONE C1326 1 UP ONE C1327 1 UP ONE C1328 1 UP ONE C1329 1 UP ONE C1330 1 UP ONE C1331 1 UP ONE C1332 1 UP ONE C1333 1 UP ONE C1334 1 UP ONE C1335 1 UP ONE C1336 1 UP ONE C1337 1 UP ONE C1338 1 UP ONE C1339 1 UP ONE C1340 1 UP ONE C1341 1 UP ONE C1342 1 UP ONE C1343 1 UP ONE C1344 1 UP ONE C1345 1 UP ONE C1346 1 UP ONE C1347 1 UP ONE C1348 1 UP ONE C1349 1 UP ONE C1350 1 UP ONE C1351 1 UP ONE C1352 1 UP ONE C1353 1 UP ONE C1354 1 UP ONE C1355 1 UP ONE C1356 1 UP ONE C1357 1 UP ONE C1358 1 UP ONE C1359 1 UP ONE C1360 1 UP ONE C1361 1 UP ONE C1362 1 UP ONE C1363 1 UP ONE C1364 1 UP ONE C1365 1 UP ONE C1366 1 UP ONE C1367 1 UP ONE C1368 1 UP ONE C1369 1 UP ONE C1370 1 UP ONE C1371 1 UP ONE C1372 1 UP ONE C1373 1 UP ONE C1374 1 UP ONE C1375 1 UP ONE C1376 1 UP ONE C1377 1 UP ONE C1378 1 UP ONE C1379 1 UP ONE C1380 1 UP ONE C1381 1 UP ONE C1382 1 UP ONE C1383 1 UP ONE C1384 1 UP ONE C1385 1 UP ONE C1386 1 UP ONE C1387 1 UP ONE C1388 1 UP ONE C1389 1 UP ONE C1390 1 UP ONE C1391 1 UP ONE C1392 1 UP ONE C1393 1 UP ONE C1394 1 UP ONE C1395 1 UP ONE C1396 1 UP ONE C1397 1 UP ONE C1398 1 UP ONE C1399 1 UP ONE C1400 1 UP ONE C1401 1 UP ONE C1402 1 UP ONE C1403 1 UP ONE C1404 1 UP ONE C1405 1 UP ONE C1406 1 UP ONE C1407 1 UP ONE C1408 1 UP ONE C1409 1 UP ONE C1410 1 UP ONE C1411 1 UP ONE C1412 1 UP ONE C1413 1 UP ONE C1414 1 UP ONE C1415 1 UP ONE C1416 1 UP ONE C1417 1 UP ONE C1418 1 UP ONE C1419 1 UP ONE C1420 1 UP ONE C1421 1 UP ONE C1422 1 UP ONE C1423 1 UP ONE C1424 1 UP ONE C1425 1 UP ONE C1426 1 UP ONE C1427 1 UP ONE C1428 1 UP ONE C1429 1 UP ONE C1430 1 UP ONE C1431 1 UP ONE C1432 1 UP ONE C1433 1 UP ONE C1434 1 UP ONE C1435 1 UP ONE C1436 1 UP ONE C1437 1 UP ONE C1438 1 UP ONE C1439 1 UP ONE C1440 1 UP ONE C1441 1 UP ONE C1442 1 UP ONE C1443 1 UP ONE C1444 1 UP ONE C1445 1 UP ONE C1446 1 UP ONE C1447 1 UP ONE C1448 1 UP ONE C1449 1 UP ONE C1450 1 UP ONE C1451 1 UP ONE C1452 1 UP ONE C1453 1 UP ONE C1454 1 UP ONE C1455 1 UP ONE C1456 1 UP ONE C1457 1 UP ONE C1458 1 UP ONE C1459 1 UP ONE C1460 1 UP ONE C1461 1 UP ONE C1462 1 UP ONE C1463 1 UP ONE C1464 1 UP ONE C1465 1 UP ONE C1466 1 UP ONE C1467 1 UP ONE C1468 1 UP ONE C1469 1 UP ONE C1470 1 UP ONE C1471 1 UP ONE C1472 1 UP ONE C1473 1 UP ONE C1474 1 UP ONE C1475 1 UP ONE C1476 1 UP ONE C1477 1 UP ONE C1478 1 UP ONE C1479 1 UP ONE C1480 1 UP ONE C1481 1 UP ONE C1482 1 UP ONE C1483 1 UP ONE C1484 1 UP ONE C1485 1 UP ONE C1486 1 UP ONE C1487 1 UP ONE C1488 1 UP ONE C1489 1 UP ONE C1490 1 UP ONE C1491 1 UP ONE C1492 1 UP ONE C1493 1 UP ONE C1494 1 UP ONE C1495 1 UP ONE C1496 1 UP ONE C1497 1 UP ONE C1498 1 UP ONE C1499 1 UP ONE C1500 1 UP ONE C1501 1 UP ONE C1502 1 UP ONE C1503 1 UP ONE C1504 1 UP ONE C1505 1 UP ONE C1506 1 UP ONE C1507 1 UP ONE C1508 1 UP ONE C1509 1 UP ONE C1510 1 UP ONE C1511 1 UP ONE C1512 1 UP ONE C1513 1 UP ONE C1514 1 UP ONE C1515 1 UP ONE C1516 1 UP ONE C1517 1 UP ONE C1518 1 UP ONE C1519 1 UP ONE C1520 1 UP ONE C1521 1 UP ONE C1522 1 UP ONE C1523 1 UP ONE C1524 1 UP ONE C1525 1 UP ONE C1526 1 UP ONE C1527 1 UP ONE C1528 1 UP ONE C1529 1 UP ONE C1530 1 UP ONE C1531 1 UP ONE C1532 1 UP ONE C1533 1 UP ONE C1534 1 UP ONE C1535 1 UP ONE C1536 1 UP ONE C1537 1 UP ONE C1538 1 UP ONE C1539 1 UP ONE C1540 1 UP ONE C1541 1 UP ONE C1542 1 UP ONE C1543 1 UP ONE C1544 1 UP ONE C1545 1 UP ONE C1546 1 UP ONE C1547 1 UP ONE C1548 1 ENDATA DyLP-1.10.4/Data/Sample/install-sh0000755000175200017520000002202111405216230015140 0ustar coincoin#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # 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. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= 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: -c (ignored) -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. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; 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 for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi 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 "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # 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: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # 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 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $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 "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: DyLP-1.10.4/CoinUtils/0000755000175200017520000000000013434203623012764 5ustar coincoinDyLP-1.10.4/CoinUtils/AUTHORS0000644000175200017520000000022111111534643014026 0ustar coincoinThis file is last updated on 11/21/2008 Fasano, J.P. Forrest, John J. Hafer, Lou Ladanyi, Laszlo Margot, Francois Tomlin, John Waechter, Andreas DyLP-1.10.4/CoinUtils/src/0000755000175200017520000000000013434203623013553 5ustar coincoinDyLP-1.10.4/CoinUtils/src/CoinPresolvePsdebug.hpp0000644000175200017520000001506713414454441020223 0ustar coincoin/* $Id: CoinPresolvePsdebug.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolvePsdebug_H #define CoinPresolvePsdebug_H /* The current idea of the relation between PRESOLVE_DEBUG and PRESOLVE_CONSISTENCY is that PRESOLVE_CONSISTENCY triggers the consistency checks and PRESOLVE_DEBUG triggers consistency checks and output. This isn't always true in the code, but that's the goal. Really, the whole compile-time scheme should be replaced with something more user-friendly (control variables that can be changed during the run). Also floating about are PRESOLVE_SUMMARY and COIN_PRESOLVE_TUNING. -- lh, 111208 -- */ /*! \defgroup PresolveDebugFunctions Presolve Debug Functions These functions implement consistency checks on data structures involved in presolve and postsolve and on the components of the lp solution. To use these functions, include CoinPresolvePsdebug.hpp in your file and define the compile-time constants PRESOLVE_SUMMARY, PRESOLVE_DEBUG, and PRESOLVE_CONSISTENCY. A value is needed (i.e., PRESOLVE_DEBUG=1). In a few places, higher values will get you a bit more output. ******** Define the symbols PRESOLVE_DEBUG and PRESOLVE_CONSISTENCY on the configure command line (use ADD_CXXFLAGS), in a Makefile, or similar and do a full rebuild (including any presolve driver code). If the symbols are not consistently nonzero across *all* presolve code, you'll get something between garbage and a core dump! Debugging adds messages to CoinMessage and allocates and maintains arrays that hold debug information. That said, given that you've configured and built with PRESOLVE_DEBUG and PRESOLVE_CONSISTENCY nonzero everywhere, it's safe to adjust PRESOLVE_DEBUG to values in the range 1..n in individual files to increase or decrease the amount of output. The suggested approach for PRESOLVE_DEBUG is to define it to 1 in the build and then increase it in individual presolve code files to get more detail. ******** */ //@{ /*! \relates CoinPresolveMatrix \brief Check column-major and/or row-major matrices for duplicate entries in the major vectors. By default, scans both the column- and row-major matrices. Set doCol (doRow) to false to suppress the column (row) scan. */ void presolve_no_dups(const CoinPresolveMatrix *preObj, bool doCol = true, bool doRow = true); /*! \relates CoinPresolveMatrix \brief Check the links which track storage order for major vectors in the bulk storage area. By default, scans both the column- and row-major matrix. Set doCol = false to suppress the column-major scan. Set doRow = false to suppres the row-major scan. */ void presolve_links_ok(const CoinPresolveMatrix *preObj, bool doCol = true, bool doRow = true); /*! \relates CoinPresolveMatrix \brief Check for explicit zeros in the column- and/or row-major matrices. By default, scans both the column- and row-major matrices. Set doCol (doRow) to false to suppress the column (row) scan. */ void presolve_no_zeros(const CoinPresolveMatrix *preObj, bool doCol = true, bool doRow = true); /*! \relates CoinPresolveMatrix \brief Checks for equivalence of the column- and row-major matrices. Normally the routine will test for coefficient presence and value. Set \p chkvals to false to suppress the check for equal value. */ void presolve_consistent(const CoinPresolveMatrix *preObj, bool chkvals = true); /*! \relates CoinPostsolveMatrix \brief Checks that column threads agree with column lengths */ void presolve_check_threads(const CoinPostsolveMatrix *obj); /*! \relates CoinPostsolveMatrix \brief Checks the free list Scans the thread of free locations in the bulk store and checks that all entries are reasonable (0 <= index < bulk0_). If chkElemCnt is true, it also checks that the total number of entries in the matrix plus the locations on the free list total to the size of the bulk store. Postsolve routines do not maintain an accurate element count, but this is useful for checking a newly constructed postsolve matrix. */ void presolve_check_free_list(const CoinPostsolveMatrix *obj, bool chkElemCnt = false); /*! \relates CoinPostsolveMatrix \brief Check stored reduced costs for accuracy and consistency with variable status. The routine will check the value of the reduced costs for architectural variables (CoinPrePostsolveMatrix::rcosts_). It performs an accuracy check by recalculating the reduced cost from scratch. It will also check the value for consistency with the status information in CoinPrePostsolveMatrix::colstat_. */ void presolve_check_reduced_costs(const CoinPostsolveMatrix *obj); /*! \relates CoinPostsolveMatrix \brief Check the dual variables for consistency with row activity. The routine checks that the value of the dual variable is consistent with the state of the constraint (loose, tight at lower bound, or tight at upper bound). */ void presolve_check_duals(const CoinPostsolveMatrix *postObj); /*! \relates CoinPresolveMatrix \brief Check primal solution and architectural variable status. The architectural variables can be checked for bogus values, feasibility, and valid status. The row activity is checked for bogus values, accuracy, and feasibility. By default, row activity is not checked (presolve is sloppy about maintaining it). See the definitions in CoinPresolvePsdebug.cpp for more information. */ void presolve_check_sol(const CoinPresolveMatrix *preObj, int chkColSol = 2, int chkRowAct = 1, int chkStatus = 1); /*! \relates CoinPostsolveMatrix \brief Check primal solution and architectural variable status. The architectural variables can be checked for bogus values, feasibility, and valid status. The row activity is checked for bogus values, accuracy, and feasibility. See the definitions in CoinPresolvePsdebug.cpp for more information. */ void presolve_check_sol(const CoinPostsolveMatrix *postObj, int chkColSol = 2, int chkRowAct = 2, int chkStatus = 1); /*! \relates CoinPresolveMatrix \brief Check for the proper number of basic variables. */ void presolve_check_nbasic(const CoinPresolveMatrix *preObj); /*! \relates CoinPostsolveMatrix \brief Check for the proper number of basic variables. */ void presolve_check_nbasic(const CoinPostsolveMatrix *postObj); //@} #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinMessageHandler.hpp0000644000175200017520000005427413414454441017777 0ustar coincoin/* $Id: CoinMessageHandler.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinMessageHandler_H #define CoinMessageHandler_H #include "CoinUtilsConfig.h" #include "CoinPragma.hpp" #include "CoinTypes.hpp" #include #include #include #include /** \file CoinMessageHandler.hpp \brief This is a first attempt at a message handler. The COIN Project is in favo(u)r of multi-language support. This implementation of a message handler tries to make it as lightweight as possible in the sense that only a subset of messages need to be defined --- the rest default to US English. The default handler at present just prints to stdout or to a FILE pointer \todo This needs to be worked over for correct operation with ISO character codes. */ /* I (jjf) am strongly in favo(u)r of language support for an open source project, but I have tried to make it as lightweight as possible in the sense that only a subset of messages need to be defined - the rest default to US English. There will be different sets of messages for each component - so at present there is a Clp component and a Coin component. Because messages are only used in a controlled environment and have no impact on code and are tested by other tests I have included tests such as language and derivation in other unit tests. */ /* Where there are derived classes I (jjf) have started message numbers at 1001. */ /** \brief Class for one massaged message. A message consists of a text string with formatting codes (#message_), an integer identifier (#externalNumber_) which also determines the severity level (#severity_) of the message, and a detail (logging) level (#detail_). CoinOneMessage is just a container to hold this information. The interpretation is set by CoinMessageHandler, which see. */ class CoinOneMessage { public: /**@name Constructors etc */ //@{ /** Default constructor. */ CoinOneMessage(); /** Normal constructor */ CoinOneMessage(int externalNumber, char detail, const char *message); /** Destructor */ ~CoinOneMessage(); /** The copy constructor */ CoinOneMessage(const CoinOneMessage &); /** assignment operator. */ CoinOneMessage &operator=(const CoinOneMessage &); //@} /**@name Useful stuff */ //@{ /// Replace message text (e.g., text in a different language) void replaceMessage(const char *message); //@} /**@name Get and set methods */ //@{ /** Get message ID number */ inline int externalNumber() const { return externalNumber_; } /** \brief Set message ID number In the default CoinMessageHandler, this number is printed in the message prefix and is used to determine the message severity level. */ inline void setExternalNumber(int number) { externalNumber_ = number; } /// Severity inline char severity() const { return severity_; } /// Set detail level inline void setDetail(int level) { detail_ = static_cast< char >(level); } /// Get detail level inline int detail() const { return detail_; } /// Return the message text inline char *message() const { return message_; } //@} /**@name member data */ //@{ /// number to print out (also determines severity) int externalNumber_; /// Will only print if detail matches char detail_; /// Severity char severity_; /// Messages (in correct language) (not all 400 may exist) mutable char message_[400]; //@} }; /** \brief Class to hold and manipulate an array of massaged messages. Note that the message index used to reference a message in the array of messages is completely distinct from the external ID number stored with the message. */ class CoinMessages { public: /** \brief Supported languages These are the languages that are supported. At present only us_en is serious and the rest are for testing. */ enum Language { us_en = 0, uk_en, it }; /**@name Constructors etc */ //@{ /** Constructor with number of messages. */ CoinMessages(int numberMessages = 0); /** Destructor */ ~CoinMessages(); /** The copy constructor */ CoinMessages(const CoinMessages &); /** assignment operator. */ CoinMessages &operator=(const CoinMessages &); //@} /**@name Useful stuff */ //@{ /*! \brief Installs a new message in the specified index position Any existing message is replaced, and a copy of the specified message is installed. */ void addMessage(int messageNumber, const CoinOneMessage &message); /*! \brief Replaces the text of the specified message Any existing text is deleted and the specified text is copied into the specified message. */ void replaceMessage(int messageNumber, const char *message); /** Language. Need to think about iso codes */ inline Language language() const { return language_; } /** Set language */ void setLanguage(Language newlanguage) { language_ = newlanguage; } /// Change detail level for one message void setDetailMessage(int newLevel, int messageNumber); /** \brief Change detail level for several messages messageNumbers is expected to contain the indices of the messages to be changed. If numberMessages >= 10000 or messageNumbers is NULL, the detail level is changed on all messages. */ void setDetailMessages(int newLevel, int numberMessages, int *messageNumbers); /** Change detail level for all messages with low <= ID number < high */ void setDetailMessages(int newLevel, int low, int high); /// Returns class inline int getClass() const { return class_; } /// Moves to compact format void toCompact(); /// Moves from compact format void fromCompact(); //@} /**@name member data */ //@{ /// Number of messages int numberMessages_; /// Language Language language_; /// Source (null-terminated string, maximum 4 characters). char source_[5]; /// Class - see later on before CoinMessageHandler int class_; /** Length of fake CoinOneMessage array. First you get numberMessages_ pointers which point to stuff */ int lengthMessages_; /// Messages CoinOneMessage **message_; //@} }; // for convenience eol enum CoinMessageMarker { CoinMessageEol = 0, CoinMessageNewline = 1 }; /** Base class for message handling The default behavior is described here: messages are printed, and (if the severity is sufficiently high) execution will be aborted. Inherit and redefine the methods #print and #checkSeverity to augment the behaviour. Messages can be printed with or without a prefix; the prefix will consist of a source string, the external ID number, and a letter code, e.g., Clp6024W. A prefix makes the messages look less nimble but is very useful for "grep" etc.

Usage

The general approach to using the COIN messaging facility is as follows:
  • Define your messages. For each message, you must supply an external ID number, a log (detail) level, and a format string. Typically, you define a convenience structure for this, something that's easy to use to create an array of initialised message definitions at compile time.
  • Create a CoinMessages object, sized to accommodate the number of messages you've defined. (Incremental growth will happen if necessary as messages are loaded, but it's inefficient.)
  • Load the messages into the CoinMessages object. Typically this entails creating a CoinOneMessage object for each message and passing it as a parameter to CoinMessages::addMessage(). You specify the message's internal ID as the other parameter to addMessage.
  • Create and use a CoinMessageHandler object to print messages.
See, for example, CoinMessage.hpp and CoinMessage.cpp for an example of the first three steps. `Format codes' below has a simple example of printing a message.

External ID numbers and severity

CoinMessageHandler assumes the following relationship between the external ID number of a message and the severity of the message: \li <3000 are informational ('I') \li <6000 warnings ('W') \li <9000 non-fatal errors ('E') \li >=9000 aborts the program (after printing the message) ('S')

Log (detail) levels

The default behaviour is that a message will print if its detail level is less than or equal to the handler's log level. If all you want to do is set a single log level for the handler, use #setLogLevel(int). If you want to get fancy, here's how it really works: There's an array, #logLevels_, which you can manipulate with #setLogLevel(int,int). Each entry logLevels_[i] specifies the log level for messages of class i (see CoinMessages::class_). If logLevels_[0] is set to the magic number -1000 you get the simple behaviour described above, whatever the class of the messages. If logLevels_[0] is set to a valid log level (>= 0), then logLevels_[i] really is the log level for messages of class i.

Format codes

CoinMessageHandler can print integers (normal, long, and long long), doubles, characters, and strings. See the descriptions of the various << operators. When processing a standard message with a format string, the formatting codes specified in the format string will be passed to the sprintf function, along with the argument. When generating a message with no format string, each << operator uses a simple format code appropriate for its argument. Consult the documentation for the standard printf facility for further information on format codes. The special format code `%?' provides a hook to enable or disable printing. For each `%?' code, there must be a corresponding call to printing(bool). This provides a way to define optional parts in messages, delineated by the code `%?' in the format string. Printing can be suppressed for these optional parts, but any operands must still be supplied. For example, given the message string \verbatim "A message with%? an optional integer %d and%? a double %g." \endverbatim installed in CoinMessages \c exampleMsgs with index 5, and \c CoinMessageHandler \c hdl, the code \code hdl.message(5,exampleMsgs) ; hdl.printing(true) << 42 ; hdl.printing(true) << 53.5 << CoinMessageEol ; \endcode will print \verbatim A message with an optional integer 42 and a double 53.5. \endverbatim while \code hdl.message(5,exampleMsgs) ; hdl.printing(false) << 42 ; hdl.printing(true) << 53.5 << CoinMessageEol ; \endcode will print \verbatim A message with a double 53.5. \endverbatim For additional examples of usage, see CoinMessageHandlerUnitTest in CoinMessageHandlerTest.cpp. */ class CoinMessageHandler { friend bool CoinMessageHandlerUnitTest(); public: /**@name Virtual methods that the derived classes may provide */ //@{ /** Print message, return 0 normally. */ virtual int print(); /** Check message severity - if too bad then abort */ virtual void checkSeverity(); //@} /**@name Constructors etc */ //@{ /// Constructor CoinMessageHandler(); /// Constructor to put to file pointer (won't be closed) CoinMessageHandler(FILE *fp); /** Destructor */ virtual ~CoinMessageHandler(); /** The copy constructor */ CoinMessageHandler(const CoinMessageHandler &); /** Assignment operator. */ CoinMessageHandler &operator=(const CoinMessageHandler &); /// Clone virtual CoinMessageHandler *clone() const; //@} /**@name Get and set methods */ //@{ /// Get detail level of a message. inline int detail(int messageNumber, const CoinMessages &normalMessage) const { return normalMessage.message_[messageNumber]->detail(); } /** Get current log (detail) level. */ inline int logLevel() const { return logLevel_; } /** \brief Set current log (detail) level. If the log level is equal or greater than the detail level of a message, the message will be printed. A rough convention for the amount of output expected is - 0 - none - 1 - minimal - 2 - normal low - 3 - normal high - 4 - verbose Please assign log levels to messages accordingly. Log levels of 8 and above (8,16,32, etc.) are intended for selective debugging. The logical AND of the log level specified in the message and the current log level is used to determine if the message is printed. (In other words, you're using individual bits to determine which messages are printed.) */ void setLogLevel(int value); /** Get alternative log level. */ inline int logLevel(int which) const { return logLevels_[which]; } /*! \brief Set alternative log level value. Can be used to store alternative log level information within the handler. */ void setLogLevel(int which, int value); /// Set the number of significant digits for printing floating point numbers void setPrecision(unsigned int new_precision); /// Current number of significant digits for printing floating point numbers inline int precision() { return (g_precision_); } /// Switch message prefix on or off. void setPrefix(bool yesNo); /// Current setting for printing message prefix. bool prefix() const; /*! \brief Values of double fields already processed. As the parameter for a double field is processed, the value is saved and can be retrieved using this function. */ inline double doubleValue(int position) const { return doubleValue_[position]; } /*! \brief Number of double fields already processed. Incremented each time a field of type double is processed. */ inline int numberDoubleFields() const { return static_cast< int >(doubleValue_.size()); } /*! \brief Values of integer fields already processed. As the parameter for a integer field is processed, the value is saved and can be retrieved using this function. */ inline CoinBigIndex intValue(int position) const { return longValue_[position]; } /*! \brief Number of integer fields already processed. Incremented each time a field of type integer is processed. */ inline int numberIntFields() const { return static_cast< int >(longValue_.size()); } /*! \brief Values of char fields already processed. As the parameter for a char field is processed, the value is saved and can be retrieved using this function. */ inline char charValue(int position) const { return charValue_[position]; } /*! \brief Number of char fields already processed. Incremented each time a field of type char is processed. */ inline int numberCharFields() const { return static_cast< int >(charValue_.size()); } /*! \brief Values of string fields already processed. As the parameter for a string field is processed, the value is saved and can be retrieved using this function. */ inline std::string stringValue(int position) const { return stringValue_[position]; } /*! \brief Number of string fields already processed. Incremented each time a field of type string is processed. */ inline int numberStringFields() const { return static_cast< int >(stringValue_.size()); } /// Current message inline CoinOneMessage currentMessage() const { return currentMessage_; } /// Source of current message inline std::string currentSource() const { return source_; } /// Output buffer inline const char *messageBuffer() const { return messageBuffer_; } /// Highest message number (indicates any errors) inline int highestNumber() const { return highestNumber_; } /// Get current file pointer inline FILE *filePointer() const { return fp_; } /// Set new file pointer inline void setFilePointer(FILE *fp) { fp_ = fp; } //@} /**@name Actions to create a message */ //@{ /*! \brief Start a message Look up the specified message. A prefix will be generated if enabled. The message will be printed if the current log level is equal or greater than the log level of the message. */ CoinMessageHandler &message(int messageNumber, const CoinMessages &messages); /*! \brief Start or continue a message With detail = -1 (default), does nothing except return a reference to the handler. (I.e., msghandler.message() << "foo" is precisely equivalent to msghandler << "foo".) If \p msgDetail is >= 0, is will be used as the detail level to determine whether the message should print (assuming class 0). This can be used with any of the << operators. One use is to start a message which will be constructed entirely from scratch. Another use is continuation of a message after code that interrupts the usual sequence of << operators. */ CoinMessageHandler &message(int detail = -1); /*! \brief Print a complete message Generate a standard prefix and append \c msg `as is'. This is intended as a transition mechanism. The standard prefix is generated (if enabled), and \c msg is appended. The message must be ended with a CoinMessageEol marker. Attempts to add content with << will have no effect. The default value of \p detail will not change printing status. If \p detail is >= 0, it will be used as the detail level to determine whether the message should print (assuming class 0). */ CoinMessageHandler &message(int externalNumber, const char *source, const char *msg, char severity, int detail = -1); /*! \brief Process an integer parameter value. The default format code is `%d'. */ CoinMessageHandler &operator<<(int intvalue); #if COIN_BIG_INDEX == 1 /*! \brief Process a long integer parameter value. The default format code is `%ld'. */ CoinMessageHandler &operator<<(long longvalue); #endif #if COIN_BIG_INDEX == 2 /*! \brief Process a long long integer parameter value. The default format code is `%ld'. */ CoinMessageHandler &operator<<(long long longvalue); #endif /*! \brief Process a double parameter value. The default format code is `%d'. */ CoinMessageHandler &operator<<(double doublevalue); /*! \brief Process a STL string parameter value. The default format code is `%g'. */ CoinMessageHandler &operator<<(const std::string &stringvalue); /*! \brief Process a char parameter value. The default format code is `%s'. */ CoinMessageHandler &operator<<(char charvalue); /*! \brief Process a C-style string parameter value. The default format code is `%c'. */ CoinMessageHandler &operator<<(const char *stringvalue); /*! \brief Process a marker. The default format code is `%s'. */ CoinMessageHandler &operator<<(CoinMessageMarker); /** Finish (and print) the message. Equivalent to using the CoinMessageEol marker. */ int finish(); /*! \brief Enable or disable printing of an optional portion of a message. Optional portions of a message are delimited by `%?' markers, and printing processes one %? marker. If \c onOff is true, the subsequent portion of the message (to the next %? marker or the end of the format string) will be printed. If \c onOff is false, printing is suppressed. Parameters must still be supplied, whether printing is suppressed or not. See the class documentation for an example. */ CoinMessageHandler &printing(bool onOff); //@} /** Log levels will be by type and will then use type given in CoinMessage::class_ - 0 - Branch and bound code or similar - 1 - Solver - 2 - Stuff in Coin directory - 3 - Cut generators */ #define COIN_NUM_LOG 4 /// Maximum length of constructed message (characters) #define COIN_MESSAGE_HANDLER_MAX_BUFFER_SIZE 1000 protected: /**@name Protected member data */ //@{ /// values in message std::vector< double > doubleValue_; std::vector< CoinBigIndex > longValue_; std::vector< char > charValue_; std::vector< std::string > stringValue_; /// Log level int logLevel_; /// Log levels int logLevels_[COIN_NUM_LOG]; /// Whether we want prefix (may get more subtle so is int) int prefix_; /// Current message CoinOneMessage currentMessage_; /// Internal number for use with enums int internalNumber_; /// Format string for message (remainder) char *format_; /// Output buffer char messageBuffer_[COIN_MESSAGE_HANDLER_MAX_BUFFER_SIZE]; /// Position in output buffer char *messageOut_; /// Current source of message std::string source_; /** 0 - Normal. 1 - Put in values, move along format, but don't print. 2 - A complete message was provided; nothing more to do but print when CoinMessageEol is processed. Any << operators are treated as noops. 3 - do nothing except look for CoinMessageEol (i.e., the message detail level was not sufficient to cause it to print). */ int printStatus_; /// Highest message number (indicates any errors) int highestNumber_; /// File pointer FILE *fp_; /// Current format for floating point numbers char g_format_[8]; /// Current number of significant digits for floating point numbers int g_precision_; //@} private: /** The body of the copy constructor and the assignment operator */ void gutsOfCopy(const CoinMessageHandler &rhs); /*! \brief Internal function to locate next format code. Intended for internal use. Side effects modify the format string. */ char *nextPerCent(char *start, const bool initial = false); /*! \brief Internal printing function. Makes it easier to split up print into clean, print and check severity */ int internalPrint(); /// Decide if this message should print. void calcPrintStatus(int msglvl, int msgclass); }; //############################################################################# /** A function that tests the methods in the CoinMessageHandler class. The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging. */ bool CoinMessageHandlerUnitTest(); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveImpliedFree.cpp0000644000175200017520000013424513414454441021012 0ustar coincoin/* $Id: CoinPresolveImpliedFree.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveSubst.hpp" #include "CoinPresolveIsolated.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveImpliedFree.hpp" #include "CoinPresolveUseless.hpp" #include "CoinPresolveForcing.hpp" #include "CoinMessage.hpp" #include "CoinHelperFunctions.hpp" #include "CoinSort.hpp" #include "CoinFinite.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif int check_row(CoinBigIndex *mrstrt, double *rowels, int *hcol, int *hinrow, double coeff_factor, double kill_ratio, int irowx, int irowy, int &numberBadElements) { const double tolerance = kill_ratio * coeff_factor; CoinBigIndex krsy = mrstrt[irowy]; CoinBigIndex krey = krsy + hinrow[irowy]; CoinBigIndex krsx = mrstrt[irowx]; CoinBigIndex krex = krsx + hinrow[irowx]; CoinBigIndex krowx = krsx; int nFill = 0; for (CoinBigIndex krowy = krsy; krowy < krey; krowy++) { int j = hcol[krowy]; while (krowx < krex && hcol[krowx] < j) krowx++; double newcoeff; if (krowx < krex && hcol[krowx] == j) { newcoeff = rowels[krowx] + rowels[krowy] * coeff_factor; } else { newcoeff = rowels[krowy] * coeff_factor; nFill++; } // kill small if (fabs(newcoeff) < tolerance) { if (newcoeff > 0.1 * tolerance) numberBadElements++; nFill--; } krowx++; } return nFill; } /* Implied Free and Subst Transforms If there is a constraint i entangled with a singleton column x(t) such that for any feasible (with respect to column bounds) values of the other variables in the constraint we can calculate a feasible value for x(t), then we can drop x(t) and constraint i, since we can compute the value of x(t) from the values of the other variables during postsolve. To put this into practice, calculate bounds L(i\t) and U(i\t) on row activity and use those bounds to calculate implied lower and upper bounds l'(t) and u'(t) on x(t). If the implied bounds are tighter than the original column bounds l(t) and u(t) (the implied free condition), we can drop constraint i and x(t). If x(t) is not a natural singleton, we can still do something similar. Let constraint i be an equality constraint that satisfies the implied free condition. In that case, we use constraint i to generate a substitution formula and substitute away x(t) in any other constraints where it appears. This introduces new coefficients, but the total number of coefficients never increases if x(t) is entangled with only two constraints (coefficients added during substitution are cancelled by dropping constraint i). The total may not increase much even if there are more. Both situations are detected in implied_free_action::presolve. Natural singletons are processed by implied_free_action::presolve. The rest are passed to subst_constraint_action (which see). It is possible for two singleton columns to be in the same row. In that case, the other one will become empty. If its bounds and costs aren't just right, this signals an unbounded problem. We don't need to check that specially here. There is a superficial (and misleading) similarity to a useless constraint. A useless constraint cannot be made tight for *any* feasible values of its variables. Here, it's possible we could pick some feasible value of x(t) that *would* violate the constraint. */ /* Scan for candidates for the implied free and subst transforms (see comments at head of file and in CoinPresolveSubst.cpp). Process natural singletons. Pass more complicated cases to subst_constraint_action. fill_level limits the allowable number of coefficients in a column under consideration as the implied free variable. There's a feedback loop between implied_free_action and the presolve driver. The feedback loop operates as follows: If we're not finding enough transforms and fill_level < maxSubstLevel_, increase it by one and pass it back out negated. The presolve driver can act on this, if it chooses, or simply pass it back in on the next call to implied_free_action. If implied_free_action sees a negative value, it will look at all columns, instead of just those in colsToDo_. */ const CoinPresolveAction *implied_free_action::presolve( CoinPresolveMatrix *prob, const CoinPresolveAction *next, int &fill_level) { #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering implied_free_action::presolve, fill level " << fill_level << "." << std::endl; #endif presolve_consistent(prob); presolve_links_ok(prob); presolve_check_sol(prob); presolve_check_nbasic(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 const int startEmptyRows = prob->countEmptyRows(); const int startEmptyColumns = prob->countEmptyCols(); #if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0; if (prob->tuning_) startTime = CoinCpuTime(); #endif #endif /* Unpack the row- and column-major representations. */ const int m = prob->nrows_; const int n = prob->ncols_; const CoinBigIndex *rowStarts = prob->mrstrt_; int *rowLengths = prob->hinrow_; const int *colIndices = prob->hcol_; const double *rowCoeffs = prob->rowels_; presolvehlink *rlink = prob->rlink_; CoinBigIndex *colStarts = prob->mcstrt_; int *colLengths = prob->hincol_; int *rowIndices = prob->hrow_; double *colCoeffs = prob->colels_; presolvehlink *clink = prob->clink_; /* Column bounds, row bounds, cost, integrality. */ double *clo = prob->clo_; double *cup = prob->cup_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *cost = prob->cost_; const unsigned char *integerType = prob->integerType_; /* Documented as `inhibit x+y+z = 1 mods'. From the code below, it's clear that this is intended to avoid removing SOS equalities with length >= 5 (hardcoded). */ const bool stopSomeStuff = ((prob->presolveOptions() & 0x04) != 0); /* Ignore infeasibility. `Fix' is overly optimistic. */ const bool fixInfeasibility = ((prob->presolveOptions_ & 0x4000) != 0); /* Defaults to 0.0. */ const double feasTol = prob->feasibilityTolerance_; #if 0 /* Tentatively moved to be a front-end function for useless_constraint_action, much as make_fixed is a front-end for make_fixed_action. This bit of code left for possible tuning. -- lh, 121127 -- Original comment: This needs to be made faster. */ #ifdef COIN_LIGHTWEIGHT_PRESOLVE if (prob->pass_ == 1) { #else if (prob->presolveOptions_&0x10) { #endif next = testRedundant(prob,next) ; if (prob->status_&0x01 != 0) { if ((prob->presolveOptions_&0x4000) != 0) prob->status_ &= !0x01 ; else return (next) ; } #if 1 //def COIN_LIGHTWEIGHT_PRESOLVE } #endif #endif /* implied_free and subst take a fair bit of effort to scan for candidates. This is a hook to allow a presolve driver to avoid that work. */ if (prob->pass_ > 15 && (prob->presolveOptions_ & 0x10000) != 0) { fill_level = 2; return (next); } /* Set up to collect implied_free actions. */ action *actions = new action[n]; #ifdef ZEROFAULT CoinZeroN(reinterpret_cast< char * >(actions), n * sizeof(action)); #endif int nactions = 0; int *implied_free = prob->usefulColumnInt_; int *whichFree = implied_free + n; int numberFree = 0; /* Arrays to hold row activity (row lhs) min and max values. Each row lhs bound is held as two components: a sum of finite column bounds and a count of infinite column bounds. */ int *infiniteDown = new int[m]; int *infiniteUp = new int[m]; double *maxDown = new double[m]; double *maxUp = new double[m]; /* Overload infiniteUp with row status codes: -1: L(i)/U(i) not yet computed, -2: do not use (empty or useless row), -3: give up (infeasible) -4: chosen as implied free row */ for (int i = 0; i < m; i++) { if (rowLengths[i] > 1) infiniteUp[i] = -1; else infiniteUp[i] = -2; } // Get rid of rows with prohibited columns if (prob->anyProhibited_) { for (int i = 0; i < m; i++) { CoinBigIndex rStart = rowStarts[i]; CoinBigIndex rEnd = rStart + rowLengths[i]; bool badRow = false; for (CoinBigIndex j = rStart; j < rEnd; ++j) { if (prob->colProhibited(colIndices[j])) { badRow = true; break; } } if (badRow) infiniteUp[i] = -2; } } // Can't go on without a suitable finite infinity, can we? #ifdef USE_SMALL_LARGE const double large = 1.0e10; #else const double large = 1.0e20; #endif /* Decide which columns we're going to look at. There are columns already queued in colsToDo_, but sometimes we want to look at all of them. Don't suck in prohibited columns. See comments at the head of the routine for fill_level. NOTE the overload on usefulColumnInt_. It was assigned above to whichFree (indices of interesting columns). We'll be ok because columns are consumed out of look at one per main loop iteration, but not all columns are interesting. Original comment: if gone from 2 to 3 look at all */ int numberLook = prob->numberColsToDo_; int iLook; int *look = prob->colsToDo_; if (fill_level < 0) { look = prob->usefulColumnInt_ + n; if (!prob->anyProhibited()) { CoinIotaN(look, n, 0); numberLook = n; } else { numberLook = 0; for (iLook = 0; iLook < n; iLook++) if (!prob->colProhibited(iLook)) look[numberLook++] = iLook; } } /* Step through the columns of interest looking for suitable x(tgt). Interesting columns are limited by number of nonzeros to minimise fill-in during substitution. */ bool infeas = false; const int maxLook = abs(fill_level); for (iLook = 0; iLook < numberLook; iLook++) { const int tgtcol = look[iLook]; const int tgtcol_len = colLengths[tgtcol]; if (tgtcol_len <= 0 || tgtcol_len > maxLook) continue; /* Set up to reconnoiter the column. The initial value for ait_max is chosen to make sure that anything that satisfies the stability check is big enough to use (though we'd clearly like something better). */ const CoinBigIndex kcs = colStarts[tgtcol]; const CoinBigIndex kce = kcs + tgtcol_len; const bool singletonCol = (tgtcol_len == 1); bool possibleRow = false; bool singletonRow = false; double ait_max = 20 * ZTOLDP2; /* If this is a singleton column, the only concern is that the row is not a singleton row (that has its own, simpler, transform: slack_doubleton). But make sure we're not dealing with some tiny a(it). Note that there's no point in marking a singleton row. By definition, we won't encounter it again. */ if (singletonCol) { const int i = rowIndices[kcs]; singletonRow = (rowLengths[i] == 1); possibleRow = (fabs(colCoeffs[kcs]) > ZTOLDP2); } else { /* If the column is not a singleton, we'll need a numerically stable substitution formula. Check that this is possible. One of the entangled rows must be an equality with a numerically stable coefficient, at least .1*MAX{i}a(it). */ for (CoinBigIndex kcol = kcs; kcol < kce; ++kcol) { const int i = rowIndices[kcol]; if (rowLengths[i] == 1) { singletonRow = true; break; } const double abs_ait = fabs(colCoeffs[kcol]); ait_max = CoinMax(ait_max, abs_ait); if (fabs(rlo[i] - rup[i]) < feasTol && abs_ait > .1 * ait_max) { possibleRow = true; } } } if (singletonRow || !possibleRow) continue; /* The column has possibilities. Walk the column, calculate row activity bounds L(i) and U(i) for suitable entangled rows, then calculate the improvement (if any) on the column bounds for l(j) and u(j). The goal is to satisfy the implied free condition over all entangled rows and find at least one row suitable for a substitution formula (if the column is not a natural singleton). Suitable: If this is a natural singleton, we need to look at the single entangled constraint. If we're attempting to create a singleton by substitution, only look at equalities with stable coefficients. If x(t) is integral, make sure the scaled rhs will be integral. */ #if PRESOLVE_DEBUG > 2 std::cout << " Checking x(" << tgtcol << "), " << tgtcol_len << " nonzeros" << ", l(" << tgtcol << ") " << clo[tgtcol] << ", u(" << tgtcol << ") " << cup[tgtcol] << ", c(" << tgtcol << ") " << cost[tgtcol] << "." << std::endl; #endif const double lt = clo[tgtcol]; const double ut = cup[tgtcol]; double impliedLow = -COIN_DBL_MAX; double impliedHigh = COIN_DBL_MAX; int subst_ndx = -1; int subst_len = n; for (CoinBigIndex kcol = kcs; kcol < kce; ++kcol) { const int i = rowIndices[kcol]; assert(infiniteUp[i] != -3); if (infiniteUp[i] <= -2) continue; const double ait = colCoeffs[kcol]; const int leni = rowLengths[i]; const double rloi = rlo[i]; const double rupi = rup[i]; /* A suitable row for substitution must * be an equality; * the entangled coefficient must be large enough to be numerically stable; * if x(t) is integer, the constant term in the substitution formula must be integer. */ bool rowiOK = (fabs(rloi - rupi) < feasTol) && (fabs(ait) > .1 * ait_max); rowiOK = rowiOK && ((integerType[tgtcol] == 0) || (fabs((rloi / ait) - floor((rloi / ait) + 0.5)) < feasTol)); /* If we don't already have L(i) and U(i), calculate now. Check for useless and infeasible constraints when that's done. */ int infUi = 0; int infLi = 0; double maxUi = 0.0; double maxLi = 0.0; const CoinBigIndex krs = rowStarts[i]; const CoinBigIndex kre = krs + leni; if (infiniteUp[i] == -1) { for (CoinBigIndex krow = krs; krow < kre; ++krow) { const double aik = rowCoeffs[krow]; const int k = colIndices[krow]; const double lk = clo[k]; const double uk = cup[k]; if (aik > 0.0) { if (uk < large) maxUi += uk * aik; else ++infUi; if (lk > -large) maxLi += lk * aik; else ++infLi; } else if (aik < 0.0) { if (uk < large) maxLi += uk * aik; else ++infLi; if (lk > -large) maxUi += lk * aik; else ++infUi; } } const double maxUinf = maxUi + infUi * 1.0e31; const double maxLinf = maxLi - infLi * 1.0e31; if (maxUinf <= rupi + feasTol && maxLinf >= rloi - feasTol) { infiniteUp[i] = -2; } else if (maxUinf < rloi - feasTol && !fixInfeasibility) { prob->status_ |= 1; infeas = true; prob->messageHandler()->message(COIN_PRESOLVE_ROWINFEAS, prob->messages()) << i << rloi << rupi << CoinMessageEol; infiniteUp[i] = -3; } else if (maxLinf > rupi + feasTol && !fixInfeasibility) { prob->status_ |= 1; infeas = true; prob->messageHandler()->message(COIN_PRESOLVE_ROWINFEAS, prob->messages()) << i << rloi << rupi << CoinMessageEol; infiniteUp[i] = -3; } else { infiniteUp[i] = infUi; infiniteDown[i] = infLi; maxUp[i] = maxUi; maxDown[i] = maxLi; } } else { infUi = infiniteUp[i]; infLi = infiniteDown[i]; maxUi = maxUp[i]; maxLi = maxDown[i]; } #if PRESOLVE_DEBUG > 2 std::cout << " row(" << i << ") " << leni << " nonzeros, blow " << rloi << ", L (" << infLi << "," << maxLi << "), U (" << infUi << "," << maxUi << "), b " << rupi; if (infeas) std::cout << " infeas"; if (infiniteUp[i] == -2) std::cout << " useless"; std::cout << "." << std::endl; #endif /* If we're infeasible, no sense checking further; escape the implied bound loop. The other possibility is that we've just discovered the constraint is useless, in which case we just move on to the next one in the column. */ if (infeas) break; if (infiniteUp[i] == -2) continue; assert(infiniteUp[i] >= 0 && infiniteUp[i] <= leni); /* At this point we have L(i) and U(i), expressed as finite and infinite components, and constraint i is neither useless or infeasible. Calculate the implied bounds l'(t) and u'(t) on x(t). The calculation (for a(it) > 0) is u'(t) <= (b(i) - (L(i)-a(it)l(t)))/a(it) = l(t)+(b(i)-L(i))/a(it) l'(t) >= (blow(i) - (U(i)-a(it)u(t)))/a(it) = u(t)+(blow(i)-U(i))/a(it) Insert the appropriate flips for a(it) < 0. Notice that if there's exactly one infinite contribution to L(i) or U(i) and x(t) is responsible, then the finite portion of L(i) or U(i) is already correct. Cut some slack for possible numerical inaccuracy if the finite portion of L(i) or U(i) is very large. If the new bound is very large, force it to infinity. */ double ltprime = -COIN_DBL_MAX; double utprime = COIN_DBL_MAX; if (ait > 0.0) { if (rloi > -large) { if (!infUi) { assert(ut < large); ltprime = ut + (rloi - maxUi) / ait; if (fabs(maxUi) > 1.0e8 && !singletonCol) ltprime -= 1.0e-12 * fabs(maxUi); } else if (infUi == 1 && ut > large) { ltprime = (rloi - maxUi) / ait; if (fabs(maxUi) > 1.0e8 && !singletonCol) ltprime -= 1.0e-12 * fabs(maxUi); } else { ltprime = -COIN_DBL_MAX; } impliedLow = CoinMax(impliedLow, ltprime); } if (rupi < large) { if (!infLi) { assert(lt > -large); utprime = lt + (rupi - maxLi) / ait; if (fabs(maxLi) > 1.0e8 && !singletonCol) utprime += 1.0e-12 * fabs(maxLi); } else if (infLi == 1 && lt < -large) { utprime = (rupi - maxLi) / ait; if (fabs(maxLi) > 1.0e8 && !singletonCol) utprime += 1.0e-12 * fabs(maxLi); } else { utprime = COIN_DBL_MAX; } impliedHigh = CoinMin(impliedHigh, utprime); } } else { if (rloi > -large) { if (!infUi) { assert(lt > -large); utprime = lt + (rloi - maxUi) / ait; if (fabs(maxUi) > 1.0e8 && !singletonCol) utprime += 1.0e-12 * fabs(maxUi); } else if (infUi == 1 && lt < -large) { utprime = (rloi - maxUi) / ait; if (fabs(maxUi) > 1.0e8 && !singletonCol) utprime += 1.0e-12 * fabs(maxUi); } else { utprime = COIN_DBL_MAX; } impliedHigh = CoinMin(impliedHigh, utprime); } if (rupi < large) { if (!infLi) { assert(ut < large); ltprime = ut + (rupi - maxLi) / ait; if (fabs(maxLi) > 1.0e8 && !singletonCol) ltprime -= 1.0e-12 * fabs(maxLi); } else if (infLi == 1 && ut > large) { ltprime = (rupi - maxLi) / ait; if (fabs(maxLi) > 1.0e8 && !singletonCol) ltprime -= 1.0e-12 * fabs(maxLi); } else { ltprime = -COIN_DBL_MAX; } impliedLow = CoinMax(impliedLow, ltprime); } } #if PRESOLVE_DEBUG > 2 std::cout << " row(" << i << ") l'(" << tgtcol << ") " << ltprime << ", u'(" << tgtcol << ") " << utprime; if (lt <= impliedLow && impliedHigh <= ut) std::cout << "; implied free satisfied"; std::cout << "." << std::endl; #endif /* For x(t) integral, see if a substitution formula based on row i will preserve integrality. The final check in this clause aims to preserve SOS equalities (i.e., don't eliminate a non-trivial SOS equality from the system using this transform). Note that this can't be folded into the L(i)/U(i) loop because the answer changes with x(t). Original comment: can only accept if good looking row */ if (integerType[tgtcol]) { possibleRow = true; bool allOnes = true; for (CoinBigIndex krow = krs; krow < kre; ++krow) { const int j = colIndices[krow]; const double scaled_aij = rowCoeffs[krow] / ait; if (fabs(scaled_aij) != 1.0) allOnes = false; if (!integerType[j] || fabs(scaled_aij - floor(scaled_aij + 0.5)) > feasTol) { possibleRow = false; break; } } if (rloi == 1.0 && leni >= 5 && stopSomeStuff && allOnes) possibleRow = false; rowiOK = rowiOK && possibleRow; } /* Do we have a winner? If we have an incumbent, prefer the one with fewer coefficients. */ if (rowiOK) { if (subst_ndx < 0 || (leni < subst_len)) { #if PRESOLVE_DEBUG > 2 std::cout << " row(" << i << ") now candidate for x(" << tgtcol << ")." << std::endl; #endif subst_ndx = i; subst_len = leni; } } } if (infeas) break; /* Can we do the transform? If so, subst_ndx will have a valid row. Record the implied free variable and the equality we'll use to substitute it out. Take the row out of the running --- we can't use the same row for two substitutions. */ if (lt <= impliedLow && impliedHigh <= ut && (subst_ndx >= 0 || singletonRow)) { implied_free[numberFree] = subst_ndx; infiniteUp[subst_ndx] = -4; whichFree[numberFree++] = tgtcol; #if PRESOLVE_DEBUG > 1 std::cout << " x(" << tgtcol << ") implied free by row " << subst_ndx << std::endl; #endif } } delete[] infiniteDown; delete[] infiniteUp; delete[] maxDown; delete[] maxUp; /* If we're infeasible, there's nothing more to be done. */ if (infeas) { #if PRESOLVE_SUMMARY > 0 || PRESOLVE_DEBUG > 0 std::cout << " IMPLIED_FREE: infeasible." << std::endl; #endif return (next); } /* We have a list of implied free variables, each with a row that can be used to substitute the variable to singleton status if the variable is not a natural singleton. The loop here will only process natural singletons. We'll hand the remainder to subst_constraint_action below, if there is a remainder. The natural singletons processed here are compressed out of whichFree and implied_free. */ int unprocessed = 0; for (iLook = 0; iLook < numberFree; iLook++) { const int tgtcol = whichFree[iLook]; if (colLengths[tgtcol] != 1) { whichFree[unprocessed] = whichFree[iLook]; implied_free[unprocessed] = implied_free[iLook]; unprocessed++; continue; } const int tgtrow = implied_free[iLook]; const int tgtrow_len = rowLengths[tgtrow]; const CoinBigIndex kcs = colStarts[tgtcol]; const double tgtcol_coeff = colCoeffs[kcs]; const double tgtcol_cost = cost[tgtcol]; const CoinBigIndex krs = rowStarts[tgtrow]; const CoinBigIndex kre = krs + tgtrow_len; if (tgtcol_cost != 0.0) { // Check costs don't make unstable //double minOldCost=COIN_DBL_MAX; double maxOldCost = 0.0; //double minNewCost=COIN_DBL_MAX; double maxNewCost = 0.0; for (CoinBigIndex krow = krs; krow < kre; krow++) { const int j = colIndices[krow]; if (j != tgtcol) { double oldCost = cost[j]; double newCost = oldCost - (tgtcol_cost * rowCoeffs[krow]) / tgtcol_coeff; oldCost = fabs(oldCost); newCost = fabs(newCost); //minOldCost=CoinMin(minOldCost,oldCost); maxOldCost = CoinMax(maxOldCost, oldCost); //minNewCost=CoinMin(minNewCost,newCost); maxNewCost = CoinMax(maxNewCost, newCost); } } if (maxNewCost > 1000.0 * (maxOldCost + 1.0) && maxOldCost) { //printf("too big %d tgtcost %g maxOld %g maxNew %g\n", // tgtcol,tgtcol_cost,maxOldCost,maxNewCost); continue; } } /* Initialise the postsolve action. We need to remember the row and column. */ action *s = &actions[nactions++]; s->row = tgtrow; s->col = tgtcol; s->clo = clo[tgtcol]; s->cup = cup[tgtcol]; s->rlo = rlo[tgtrow]; s->rup = rup[tgtrow]; s->ninrow = tgtrow_len; s->rowels = presolve_dupmajor(rowCoeffs, colIndices, tgtrow_len, krs); s->costs = NULL; /* We're processing a singleton, hence no substitutions in the matrix, but we do need to fix up the cost vector. The substitution formula is x(t) = (rhs(i) - SUM{j\t}a(ik)x(k))/a(it) hence c'(k) = c(k)-c(t)a(ik)/a(it) and there's a constant offset c(t)rhs(i)/a(it). where rhs(i) is one of blow(i) or b(i). For general constraints where blow(i) != b(i), we need to take a bit of care. If only one of blow(i) or b(i) is finite, that's the one to use. Where we have two finite but unequal bounds, choose the bound that will result in the most favourable value for x(t). For minimisation, if c(t) < 0 we want to maximise x(t), so choose b(i) if a(it) > 0, blow(i) if a(it) < 0. A bit of case analysis says choose b(i) when c(t)a(it) < 0, blow(i) when c(t)a(it) > 0. We shouldn't be here if both row bounds are infinite. Fortunately, the objective coefficients are not affected by this. */ if (tgtcol_cost != 0.0) { double tgtrow_rhs = rup[tgtrow]; if (fabs(rlo[tgtrow] - rup[tgtrow]) > feasTol) { const double rlot = rlo[tgtrow]; const double rupt = rup[tgtrow]; if (rlot > -COIN_DBL_MAX && rupt < COIN_DBL_MAX) { if ((tgtcol_cost * tgtcol_coeff) > 0) tgtrow_rhs = rlot; else tgtrow_rhs = rupt; } else if (rupt >= COIN_DBL_MAX) { tgtrow_rhs = rlot; } } assert(fabs(tgtrow_rhs) <= large); double *save_costs = new double[tgtrow_len]; for (CoinBigIndex krow = krs; krow < kre; krow++) { const int j = colIndices[krow]; save_costs[krow - krs] = cost[j]; cost[j] -= (tgtcol_cost * rowCoeffs[krow]) / tgtcol_coeff; } prob->change_bias((tgtcol_cost * tgtrow_rhs) / tgtcol_coeff); cost[tgtcol] = 0.0; s->costs = save_costs; } /* Remove the row from the column-major representation, queuing up each column for reconsideration. Then remove the row from the row-major representation. */ for (CoinBigIndex krow = krs; krow < kre; krow++) { const int j = colIndices[krow]; presolve_delete_from_col(tgtrow, j, colStarts, colLengths, rowIndices, colCoeffs); if (colLengths[j] == 0) { PRESOLVE_REMOVE_LINK(prob->clink_, j); } else { prob->addCol(j); } } PRESOLVE_REMOVE_LINK(clink, tgtcol); colLengths[tgtcol] = 0; PRESOLVE_REMOVE_LINK(rlink, tgtrow); rowLengths[tgtrow] = 0; rlo[tgtrow] = 0.0; rup[tgtrow] = 0.0; } /* We're done with the natural singletons. Trim actions to length and create the postsolve object. */ if (nactions) { #if PRESOLVE_SUMMARY > 0 || PRESOLVE_DEBUG > 0 printf("NIMPLIED FREE: %d\n", nactions); #endif action *actions1 = new action[nactions]; CoinMemcpyN(actions, nactions, actions1); next = new implied_free_action(nactions, actions1, next); } delete[] actions; #if PRESOLVE_DEBUG > 0 std::cout << " IMPLIED_FREE: identified " << numberFree << " implied free transforms, processed " << numberFree - unprocessed << " natural singletons." << std::endl; #endif /* Now take a stab at the columns that aren't natural singletons, if there are any left. */ if (unprocessed != 0) { // if not integer - don't allow much fill if (!prob->anyInteger()) { int numberFree = unprocessed; int nBad = 0; unprocessed = 0; // Take out ones that make much denser or might lead to instability /* Unpack the row- and column-major representations. */ CoinBigIndex *rowStarts = prob->mrstrt_; int *rowLengths = prob->hinrow_; double *rowCoeffs = prob->rowels_; int *colIndices = prob->hcol_; CoinBigIndex *colStarts = prob->mcstrt_; int *colLengths = prob->hincol_; double *colCoeffs = prob->colels_; int *rowIndices = prob->hrow_; /* This array is used to hold the indices of columns involved in substitutions, where we have the potential for cancellation. At the end they'll be checked to eliminate any actual zeros that may result. NOTE that usefulColumnInt_ is already in use for parameters implied_free and whichFree when this routine is called from implied_free. */ int *rowsUsed = &prob->usefulRowInt_[0]; int nRowsUsed = 0; /* Open a loop to process the (equality r, implied free variable t) pairs in whichFree and implied_free. It can happen that removal of (row, natural singleton) pairs back in implied_free will reduce the length of column t. It can also happen that previous processing here has resulted in fillin or cancellation. So check again for column length and exclude natural singletons and overly dense columns. */ for (int iLook = 0; iLook < numberFree; iLook++) { const int tgtcol = whichFree[iLook]; const int tgtrow = implied_free[iLook]; if (colLengths[tgtcol] < 2 || colLengths[tgtcol] > maxLook) { #if PRESOLVE_DEBUG > 3 std::cout << " skipping eqn " << tgtrow << " x(" << tgtcol << "); length now " << colLengths[tgtcol] << "." << std::endl; #endif continue; } CoinBigIndex tgtcs = colStarts[tgtcol]; CoinBigIndex tgtce = tgtcs + colLengths[tgtcol]; /* A few checks to make sure that the candidate pair is still suitable. Processing candidates earlier in the list can eliminate coefficients. * Don't use this pair if any involved row i has become a row singleton or empty. * Don't use this pair if any involved row has been modified as part of the processing for a previous candidate pair on this call. * Don't use this pair if a(i,tgtcol) has become zero. The checks on a(i,tgtcol) seem superfluous but it's possible that implied_free identified two candidate pairs to eliminate the same column. If we've already processed one of them, we could be in trouble. */ double tgtcoeff = 0.0; bool dealBreaker = false; for (CoinBigIndex kcol = tgtcs; kcol < tgtce; ++kcol) { const int i = rowIndices[kcol]; if (rowLengths[i] < 2 || prob->rowUsed(i)) { dealBreaker = true; break; } const double aij = colCoeffs[kcol]; if (fabs(aij) <= ZTOLDP2) { dealBreaker = true; break; } if (i == tgtrow) tgtcoeff = aij; } if (dealBreaker == true) { #if PRESOLVE_DEBUG > 3 std::cout << " skipping eqn " << tgtrow << " x(" << tgtcol << "); deal breaker (1)." << std::endl; #endif continue; } /* Check for numerical stability.A large coeff_factor will inflate the coefficients in the substitution formula. */ dealBreaker = false; for (CoinBigIndex kcol = tgtcs; kcol < tgtce; ++kcol) { const double coeff_factor = fabs(colCoeffs[kcol] / tgtcoeff); if (coeff_factor > 10.0) dealBreaker = true; } if (dealBreaker == true) { #if PRESOLVE_DEBUG > 3 std::cout << " skipping eqn " << tgtrow << " x(" << tgtcol << "); deal breaker (2)." << std::endl; #endif continue; } /* Count up the total number of coefficients in entangled rows and mark them as contaminated. */ int ntotels = 0; for (CoinBigIndex kcol = tgtcs; kcol < tgtce; ++kcol) { const int i = rowIndices[kcol]; ntotels += rowLengths[i]; PRESOLVEASSERT(!prob->rowUsed(i)); prob->setRowUsed(i); rowsUsed[nRowsUsed++] = i; } CoinBigIndex tgtrs = rowStarts[tgtrow]; CoinBigIndex tgtre = tgtrs + rowLengths[tgtrow]; // kill small if wanted int relax = (prob->presolveOptions() & 0x60000) >> 17; double tolerance = 1.0e-12; for (int i = 0; i < relax; i++) tolerance *= 10.0; /* Sort the target row for efficiency */ CoinSort_2(colIndices + tgtrs, colIndices + tgtre, rowCoeffs + tgtrs); CoinBigIndex start = colStarts[tgtcol]; CoinBigIndex end = start + colLengths[tgtcol]; int numberBadElements = 0; int numberFill = -rowLengths[tgtrow]; for (CoinBigIndex colndx = start; colndx < end; ++colndx) { int i = rowIndices[colndx]; if (i == tgtrow) continue; double ait = colCoeffs[colndx]; double coeff_factor = -ait / tgtcoeff; CoinBigIndex krs = rowStarts[i]; CoinBigIndex kre = krs + rowLengths[i]; /* Sort the row for efficiency and call add_row to do the actual business of changing coefficients due to substitution. This has the potential to trigger compaction of the row-major bulk store, so update bulk store indices. */ CoinSort_2(colIndices + krs, colIndices + kre, rowCoeffs + krs); numberFill += check_row(rowStarts, rowCoeffs, colIndices, rowLengths, coeff_factor, tolerance, i, tgtrow, numberBadElements); } if (numberBadElements || 3 * numberFill > 2 * (colLengths[tgtcol] + rowLengths[tgtrow])) { //printf("Bad subst col %d row %d - %d small elements, fill %d\n", // tgtcol,tgtrow,numberBadElements,numberFill); if (numberBadElements) nBad++; } else { whichFree[unprocessed] = tgtcol; implied_free[unprocessed++] = tgtrow; //printf("Good subst col %d row %d - fill %d\n", // tgtcol,tgtrow,numberFill); } } /* That's it, we've processed all the candidate pairs. Clear the row used flags. */ for (int i = 0; i < nRowsUsed; i++) prob->unsetRowUsed(rowsUsed[i]); #if CLP_USEFUL_PRINTOUT printf("%d allowed through out of %d - %d on coefficient\n", unprocessed, numberFree, nBad); #endif } next = subst_constraint_action::presolve(prob, implied_free, whichFree, unprocessed, next, maxLook); } /* Give some feedback to the presolve driver. If we aren't finding enough candidates and haven't reached the limit, bump fill_level and return a negated value. The presolve driver can tweak this value or simply return it on the next call. See the top of the routine for a full explanation. */ if (numberFree < 30 && maxLook < prob->maxSubstLevel_) { fill_level = -(maxLook + 1); } else { fill_level = maxLook; } #if COIN_PRESOLVE_TUNING > 0 double thisTime = 0.0; if (prob->tuning_) thisTime = CoinCpuTime(); #endif #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_consistent(prob); presolve_links_ok(prob); presolve_check_sol(prob); presolve_check_nbasic(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows() - startEmptyRows; int droppedColumns = prob->countEmptyCols() - startEmptyColumns; std::cout << "Leaving implied_free_action::presolve, fill level " << fill_level << ", " << droppedRows << " rows, " << droppedColumns << " columns dropped"; #if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << thisTime - startTime << "s"; #endif std::cout << "." << std::endl; #endif return (next); } const char *implied_free_action::name() const { return ("implied_free_action"); } /* Restore the target constraint and target column x(t) eliminated by the implied free presolve action. We'll solve the target constraint to get a value for x(t), so by construction the constraint is tight. For range constraints, we need to consider both the upper and lower row bounds when calculating a value for x(t). x(t) can end up at one of its column bounds or strictly between bounds. Then there's the matter of patching up the basis and solution. The natural thing to do is to make the logical nonbasic and x(t) basic. No corrections to duals or reduced costs are required because we built that correction into the problem when we modified the objective. Work the linear algebra; it's very neat. It will frequently happen that the implied bounds on x(t) are simply equal to the existing column bounds and the value we calculate here will be at one of the original column bounds. This leaves x(t) degenerate basic. The original version of this routine looked for this and attempted to make x(t) nonbasic and use the logical as the basic variable. The linear algebra for this is ugly. To calculate the proper correction for the dual variables requires the basis inverse (terms do not conveniently cancel). The original code made no attempt to fix the duals and applied a correction to the reduced costs that was valid only for the nonbasic partition. It accepted the result if it was dual feasible. In general this would leave slack dual constraints. It's really not possible to predict the effect going forward on subsequent postsolve transforms. Nor is it clear to me that a degenerate basic architectural is inherently worse than a degenerate basic logical. This version of the code always makes x(t) basic. */ void implied_free_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_; const int nactions = nactions_; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 char *cdone = prob->cdone_; char *rdone = prob->rdone_; #if PRESOLVE_DEBUG > 0 std::cout << "Entering implied_free_action::postsolve, " << nactions << " transforms to undo." << std::endl; #endif presolve_check_threads(prob); presolve_check_free_list(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #endif /* Unpack the column-major representation. */ CoinBigIndex *colStarts = prob->mcstrt_; int *colLengths = prob->hincol_; int *rowIndices = prob->hrow_; double *colCoeffs = prob->colels_; CoinBigIndex *link = prob->link_; CoinBigIndex &free_list = prob->free_list_; /* Column bounds, row bounds, and cost. */ double *clo = prob->clo_; double *cup = prob->cup_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *cost = prob->cost_; /* Solution, reduced costs, duals, row activity. */ double *sol = prob->sol_; double *rcosts = prob->rcosts_; double *acts = prob->acts_; double *rowduals = prob->rowduals_; /* In your dreams ... hardwired to minimisation. */ const double maxmin = 1.0; /* And a suitably small infinity. */ const double large = 1.0e20; /* Open a loop to restore the row and column for each action. Start by unpacking the action. There won't be saved costs if the original cost c(t) was zero. */ for (const action *f = &actions[nactions - 1]; actions <= f; f--) { const int tgtrow = f->row; const int tgtcol = f->col; const int tgtrow_len = f->ninrow; const double *tgtrow_coeffs = f->rowels; const int *tgtrow_cols = reinterpret_cast< const int * >(tgtrow_coeffs + tgtrow_len); const double *saved_costs = f->costs; #if PRESOLVE_DEBUG > 2 std::cout << " restoring col " << tgtcol << " row " << tgtrow; if (saved_costs != 0) std::cout << ", modified costs"; std::cout << "." << std::endl; #endif /* Restore the target row and column and the original cost coefficients. We need to initialise the target column; for others, just bump the coefficient count. While we're restoring the row, pick off the coefficient for x(t) and calculate the row activity. */ double tgt_coeff = 0.0; double tgtrow_act = 0.0; for (int krow = 0; krow < tgtrow_len; krow++) { const int j = tgtrow_cols[krow]; const double atj = tgtrow_coeffs[krow]; assert(free_list >= 0 && free_list < prob->bulk0_); CoinBigIndex kk = free_list; free_list = link[free_list]; link[kk] = colStarts[j]; colStarts[j] = kk; colCoeffs[kk] = atj; rowIndices[kk] = tgtrow; if (saved_costs) cost[j] = saved_costs[krow]; if (j == tgtcol) { colLengths[j] = 1; clo[tgtcol] = f->clo; cup[tgtcol] = f->cup; rcosts[j] = -cost[tgtcol] / atj; tgt_coeff = atj; } else { colLengths[j]++; tgtrow_act += atj * sol[j]; } } rlo[tgtrow] = f->rlo; rup[tgtrow] = f->rup; PRESOLVEASSERT(fabs(tgt_coeff) > ZTOLDP); #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 cdone[tgtcol] = IMPLIED_FREE; rdone[tgtrow] = IMPLIED_FREE; #endif #if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob); #endif /* Calculate a value for x(t). We have two possible values for x(t), calculated against the upper and lower bound of the constraint. x(t) could end up at one of its original bounds or it could end up strictly within bounds. In either event, the constraint will be tight. The code simply forces the calculated value for x(t) to be within bounds. Arguably it should complain more loudly as this likely indicates algorithmic error or numerical inaccuracy. You'll get a warning if debugging is enabled. */ double xt_lo, xt_up; if (tgt_coeff > 0) { xt_lo = (rlo[tgtrow] - tgtrow_act) / tgt_coeff; xt_up = (rup[tgtrow] - tgtrow_act) / tgt_coeff; } else { xt_lo = (rup[tgtrow] - tgtrow_act) / tgt_coeff; xt_up = (rlo[tgtrow] - tgtrow_act) / tgt_coeff; } const double lt = clo[tgtcol]; const double ut = cup[tgtcol]; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 bool chklo = true; bool chkup = true; if (tgt_coeff > 0) { if (rlo[tgtrow] < -large) chklo = false; if (rup[tgtrow] > large) chkup = false; } else { if (rup[tgtrow] > large) chklo = false; if (rlo[tgtrow] < -large) chkup = false; } if (chklo && (xt_lo < lt - prob->ztolzb_)) { std::cout << " LOW CSOL (implied_free): x(" << tgtcol << ") lb " << lt << ", sol = " << xt_lo << ", err " << (lt - xt_lo) << "." << std::endl; } if (chkup && (xt_up > ut + prob->ztolzb_)) { std::cout << " HIGH CSOL (implied_free): x(" << tgtcol << ") ub " << ut << ", sol = " << xt_up << ", err " << (xt_up - ut) << "." << std::endl; } #if PRESOLVE_DEBUG > 2 std::cout << " x(" << tgtcol << ") lb " << lt << " lo " << xt_lo << ", up " << xt_up << " ub " << ut << "." << std::endl; #endif #endif xt_lo = CoinMax(xt_lo, lt); xt_up = CoinMin(xt_up, ut); /* Time to make x(t) basic and the logical nonbasic. The sign of the dual determines the tight row bound, which in turn determines the value of x(t). Because the row is tight, activity is by definition equal to the bound. Coin convention is that a <= constraint puts a lower bound on the slack and a >= constraint puts an upper bound on the slack. Case analysis (minimisation) says: dual >= 0 ==> reduced cost <= 0 ==> NBUB ==> finite rlo dual <= 0 ==> reduced cost >= 0 ==> NBLB ==> finite rup */ const double ct = maxmin * cost[tgtcol]; double possibleDual = ct / tgt_coeff; rowduals[tgtrow] = possibleDual; if (possibleDual >= 0 && rlo[tgtrow] > -large) { sol[tgtcol] = (rlo[tgtrow] - tgtrow_act) / tgt_coeff; acts[tgtrow] = rlo[tgtrow]; prob->setRowStatus(tgtrow, CoinPrePostsolveMatrix::atUpperBound); } else if (possibleDual <= 0 && rup[tgtrow] < large) { sol[tgtcol] = (rup[tgtrow] - tgtrow_act) / tgt_coeff; acts[tgtrow] = rup[tgtrow]; prob->setRowStatus(tgtrow, CoinPrePostsolveMatrix::atLowerBound); } else { assert(rup[tgtrow] < large || rlo[tgtrow] > -large); if (rup[tgtrow] < large) { sol[tgtcol] = (rup[tgtrow] - tgtrow_act) / tgt_coeff; acts[tgtrow] = rup[tgtrow]; prob->setRowStatus(tgtrow, CoinPrePostsolveMatrix::atLowerBound); } else { sol[tgtcol] = (rlo[tgtrow] - tgtrow_act) / tgt_coeff; acts[tgtrow] = rlo[tgtrow]; prob->setRowStatus(tgtrow, CoinPrePostsolveMatrix::atUpperBound); } #if PRESOLVE_DEBUG > 0 std::cout << "BAD ROW STATUS row " << tgtrow << ": dual " << rowduals[tgtrow] << " but row " << ((rowduals[tgtrow] > 0) ? "upper" : "lower") << " bound is not finite; forcing status " << prob->rowStatusString(tgtrow) << "." << std::endl; #endif } prob->setColumnStatus(tgtcol, CoinPrePostsolveMatrix::basic); rcosts[tgtcol] = 0.0; #if PRESOLVE_DEBUG > 2 std::cout << " x(" << tgtcol << ") B dj " << rcosts[tgtcol] << "." << std::endl; std::cout << " row " << tgtrow << " dual " << rowduals[tgtrow] << "." << std::endl; #endif PRESOLVEASSERT(acts[tgtrow] >= rlo[tgtrow] - 1.0e-5 && acts[tgtrow] <= rup[tgtrow] + 1.0e-5); #if PRESOLVE_DEBUG > 2 /* Debug code to compare the reduced costs against a calculation from scratch as c(j)-ya(j). */ for (int krow = 0; krow < tgtrow_len; krow++) { const int j = tgtrow_cols[krow]; const int lenj = colLengths[j]; double dj = cost[j]; CoinBigIndex kcol = colStarts[j]; for (int cntj = 0; cntj < lenj; ++cntj) { const int i = rowIndices[kcol]; const double aij = colCoeffs[kcol]; dj -= rowduals[i] * aij; kcol = link[kcol]; } if (fabs(dj - rcosts[j]) > 1.0e-3) { std::cout << " cbar(" << j << ") update " << rcosts[j] << " expected " << dj << " err " << fabs(dj - rcosts[j]) << "." << std::endl; } } #endif } #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_threads(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving implied_free_action::postsolve." << std::endl; #endif #endif return; } implied_free_action::~implied_free_action() { int i; for (i = 0; i < nactions_; i++) { deleteAction(actions_[i].rowels, double *); deleteAction(actions_[i].costs, double *); } deleteAction(actions_, action *); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinWarmStartDual.cpp0000644000175200017520000000405013414454441017625 0ustar coincoin/* $Id: CoinWarmStartDual.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2003, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include #include "CoinWarmStartDual.hpp" #include //############################################################################# /* Generate a `diff' that can convert the warm start passed as a parameter to the warm start specified by this. The capabilities are limited: the basis passed as a parameter can be no larger than the basis pointed to by this. */ CoinWarmStartDiff * CoinWarmStartDual::generateDiff(const CoinWarmStart *const oldCWS) const { /* Make sure the parameter is CoinWarmStartDual or derived class. */ const CoinWarmStartDual *oldDual = dynamic_cast< const CoinWarmStartDual * >(oldCWS); if (!oldDual) { throw CoinError("Old warm start not derived from CoinWarmStartDual.", "generateDiff", "CoinWarmStartDual"); } CoinWarmStartDualDiff *diff = new CoinWarmStartDualDiff; CoinWarmStartDiff *vecdiff = dual_.generateDiff(&oldDual->dual_); diff->diff_.swap(*dynamic_cast< CoinWarmStartVectorDiff< double > * >(vecdiff)); delete vecdiff; return diff; } //============================================================================= /* Apply diff to this warm start. Update this warm start by applying diff. It's assumed that the allocated capacity of the warm start is sufficiently large. */ void CoinWarmStartDual::applyDiff(const CoinWarmStartDiff *const cwsdDiff) { /* Make sure we have a CoinWarmStartDualDiff */ const CoinWarmStartDualDiff *diff = dynamic_cast< const CoinWarmStartDualDiff * >(cwsdDiff); if (!diff) { throw CoinError("Diff not derived from CoinWarmStartDualDiff.", "applyDiff", "CoinWarmStartDual"); } dual_.applyDiff(&diff->diff_); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/config_default.h0000644000175200017520000000206713414454441016706 0ustar coincoin /* include the COIN-OR-wide system specific configure header */ #include "configall_system.h" /* include the public project specific macros */ #include "config_coinutils_default.h" /***************************************************************************/ /* HERE DEFINE THE PROJECT SPECIFIC MACROS */ /* These are only in effect in a setting that doesn't use configure */ /***************************************************************************/ /* Define to the debug sanity check level (0 is no test) */ #define COIN_COINUTILS_CHECKLEVEL 0 /* Define to the debug verbosity level (0 is no output) */ #define COIN_COINUTILS_VERBOSITY 0 /* Define to 1 if bzlib is available */ /* #define COIN_HAS_BZLIB */ /* Define to 1 if zlib is available */ /* #define COIN_HAS_ZLIB */ #ifdef _MSC_VER /* Define to be the name of C-function for Inf check */ #define COIN_C_FINITE _finite /* Define to be the name of C-function for NaN check */ #define COIN_C_ISNAN _isnan #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinStructuredModel.hpp0000644000175200017520000002067013414454441020233 0ustar coincoin/* $Id: CoinStructuredModel.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2008, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinStructuredModel_H #define CoinStructuredModel_H #include "CoinModel.hpp" #include /** This is a model which is made up of Coin(Structured)Model blocks. */ typedef struct CoinModelInfo2 { int rowBlock; // Which row block int columnBlock; // Which column block char matrix; // nonzero if matrix exists char rhs; // nonzero if non default rhs exists char rowName; // nonzero if row names exists char integer; // nonzero if integer information exists char bounds; // nonzero if non default bounds/objective exists char columnName; // nonzero if column names exists CoinModelInfo2() : rowBlock(0) , columnBlock(0) , matrix(0) , rhs(0) , rowName(0) , integer(0) , bounds(0) , columnName(0) { } } CoinModelBlockInfo; class CoinStructuredModel : public CoinBaseModel { public: /**@name Useful methods for building model */ //@{ /** add a block from a CoinModel using names given as parameters returns number of errors (e.g. both have objectives but not same) */ int addBlock(const std::string &rowBlock, const std::string &columnBlock, const CoinBaseModel &block); /** add a block from a CoinModel with names in model returns number of errors (e.g. both have objectives but not same) */ int addBlock(const CoinBaseModel &block); /** add a block from a CoinModel using names given as parameters returns number of errors (e.g. both have objectives but not same) This passes in block - structured model takes ownership */ int addBlock(const std::string &rowBlock, const std::string &columnBlock, CoinBaseModel *block); /** add a block using names */ int addBlock(const std::string &rowBlock, const std::string &columnBlock, const CoinPackedMatrix &matrix, const double *rowLower, const double *rowUpper, const double *columnLower, const double *columnUpper, const double *objective); /** Write the problem in MPS format to a file with the given filename. \param compression can be set to three values to indicate what kind of file should be written
  • 0: plain text (default)
  • 1: gzip compressed (.gz is appended to \c filename)
  • 2: bzip2 compressed (.bz2 is appended to \c filename) (TODO)
If the library was not compiled with the requested compression then writeMps falls back to writing a plain text file. \param formatType specifies the precision to used for values in the MPS file
  • 0: normal precision (default)
  • 1: extra accuracy
  • 2: IEEE hex
\param numberAcross specifies whether 1 or 2 (default) values should be specified on every data line in the MPS file. not const as may change model e.g. fill in default bounds */ int writeMps(const char *filename, int compression = 0, int formatType = 0, int numberAcross = 2, bool keepStrings = false); /// Read SMPS model int readSmps(const char *filename, bool keepNames = false, bool ignoreErrors = false); /** Decompose a CoinModel 1 - try D-W 2 - try Benders 3 - try Staircase Returns number of blocks or zero if no structure */ int decompose(const CoinModel &model, int type, int maxBlocks = 50, const char **starts = NULL); /** Decompose a model specified as arrays + CoinPackedMatrix 1 - try D-W 2 - try Benders 3 - try Staircase Returns number of blocks or zero if no structure */ int decompose(const CoinPackedMatrix &matrix, const double *rowLower, const double *rowUpper, const double *columnLower, const double *columnUpper, const double *objective, int type, int maxBlocks = 50, int *starts = NULL, double objectiveOffset = 0.0); //@} /**@name For getting information */ //@{ /// Return number of row blocks inline int numberRowBlocks() const { return numberRowBlocks_; } /// Return number of column blocks inline int numberColumnBlocks() const { return numberColumnBlocks_; } /// Return number of elementBlocks inline int numberElementBlocks() const { return numberElementBlocks_; } /// Return number of elements CoinBigIndex numberElements() const; /// Return the i'th row block name inline const std::string &getRowBlock(int i) const { return rowBlockNames_[i]; } /// Set i'th row block name inline void setRowBlock(int i, const std::string &name) { rowBlockNames_[i] = name; } /// Add or check a row block name and number of rows int addRowBlock(int numberRows, const std::string &name); /// Return a row block index given a row block name int rowBlock(const std::string &name) const; /// Return i'th the column block name inline const std::string &getColumnBlock(int i) const { return columnBlockNames_[i]; } /// Set i'th column block name inline void setColumnBlock(int i, const std::string &name) { columnBlockNames_[i] = name; } /// Add or check a column block name and number of columns int addColumnBlock(int numberColumns, const std::string &name); /// Return a column block index given a column block name int columnBlock(const std::string &name) const; /// Return i'th block type inline const CoinModelBlockInfo &blockType(int i) const { return blockType_[i]; } /// Return i'th block inline CoinBaseModel *block(int i) const { return blocks_[i]; } /// Return block corresponding to row and column const CoinBaseModel *block(int row, int column) const; /// Return i'th block as CoinModel (or NULL) CoinModel *coinBlock(int i) const; /// Return block corresponding to row and column as CoinModel const CoinBaseModel *coinBlock(int row, int column) const; /// Return block number corresponding to row and column int blockIndex(int row, int column) const; /** Return model as a CoinModel block and fill in info structure and update counts */ CoinModel *coinModelBlock(CoinModelBlockInfo &info); /// Sets given block into coinModelBlocks_ void setCoinModel(CoinModel *block, int iBlock); /// Refresh info in blockType_ void refresh(int iBlock); /** Fill pointers corresponding to row and column */ CoinModelBlockInfo block(int row, int column, const double *&rowLower, const double *&rowUpper, const double *&columnLower, const double *&columnUpper, const double *&objective) const; /// Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore inline double optimizationDirection() const { return optimizationDirection_; } /// Set direction of optimization (1 - minimize, -1 - maximize, 0 - ignore inline void setOptimizationDirection(double value) { optimizationDirection_ = value; } //@} /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinStructuredModel(); /** Read a problem in MPS format from the given filename. May try and decompose */ CoinStructuredModel(const char *fileName, int decompose = 0, int maxBlocks = 50); /** Destructor */ virtual ~CoinStructuredModel(); //@} /**@name Copy method */ //@{ /** The copy constructor. */ CoinStructuredModel(const CoinStructuredModel &); /// = CoinStructuredModel &operator=(const CoinStructuredModel &); /// Clone virtual CoinBaseModel *clone() const; //@} private: /** Fill in info structure and update counts Returns number of inconsistencies on border */ int fillInfo(CoinModelBlockInfo &info, const CoinModel *block); /** Fill in info structure and update counts */ void fillInfo(CoinModelBlockInfo &info, const CoinStructuredModel *block); /**@name Data members */ //@{ /// Current number of row blocks int numberRowBlocks_; /// Current number of column blocks int numberColumnBlocks_; /// Current number of element blocks int numberElementBlocks_; /// Maximum number of element blocks int maximumElementBlocks_; /// Rowblock name std::vector< std::string > rowBlockNames_; /// Columnblock name std::vector< std::string > columnBlockNames_; /// Blocks CoinBaseModel **blocks_; /// CoinModel copies of blocks or NULL if original CoinModel CoinModel **coinModelBlocks_; /// Which parts of model are set in block CoinModelBlockInfo *blockType_; //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinParam.hpp0000644000175200017520000005265413414454441016155 0ustar coincoin/* $Id: CoinParam.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ #ifndef CoinParam_H #define CoinParam_H /* Copyright (C) 2002, International Business Machines Corporation and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ /*! \file CoinParam.hpp \brief Declaration of a class for command line parameters. */ #include #include #include /*! \class CoinParam \brief A base class for `keyword value' command line parameters. The underlying paradigm is that a parameter specifies an action to be performed on a target object. The base class provides two function pointers, a `push' function and a `pull' function. By convention, a push function will set some value in the target object or perform some action using the target object. A `pull' function will retrieve some value from the target object. This is only a convention, however; CoinParam and associated utilities make no use of these functions and have no hardcoded notion of how they should be used. The action to be performed, and the target object, will be specific to a particular application. It is expected that users will derive application-specific parameter classes from this base class. A derived class will typically add fields and methods to set/get a code for the action to be performed (often, an enum class) and the target object (often, a pointer or reference). Facilities provided by the base class and associated utility routines include:
  • Support for common parameter types with numeric, string, or keyword values.
  • Support for short and long help messages.
  • Pointers to `push' and `pull' functions as described above.
  • Command line parsing and keyword matching.
All utility routines are declared in the #CoinParamUtils namespace. The base class recognises five types of parameters: actions (which require no value); numeric parameters with integer or real (double) values; keyword parameters, where the value is one of a defined set of value-keywords; and string parameters (where the value is a string). The base class supports the definition of a valid range, a default value, and short and long help messages for a parameter. As defined by the #CoinParamFunc typedef, push and pull functions should take a single parameter, a pointer to a CoinParam. Typically this object will actually be a derived class as described above, and the implementation function will have access to all capabilities of CoinParam and of the derived class. When specified as command line parameters, the expected syntax is `-keyword value' or `-keyword=value'. You can also use the Gnu double-dash style, `--keyword'. Spaces around the `=' will \e not work. The keyword (name) for a parameter can be defined with an `!' to mark the minimal match point. For example, allow!ableGap will be considered matched by the strings `allow', `allowa', `allowab', \e etc. Similarly, the value-keyword strings for keyword parameters can be defined with `!' to mark the minimal match point. Matching of keywords and value-keywords is \e not case sensitive. */ class CoinParam { public: /*! \name Subtypes */ //@{ /*! \brief Enumeration for the types of parameters supported by CoinParam CoinParam provides support for several types of parameters:
  • Action parameters, which require no value.
  • Integer and double numeric parameters, with upper and lower bounds.
  • String parameters that take an arbitrary string value.
  • Keyword parameters that take a defined set of string (value-keyword) values. Value-keywords are associated with integers in the order in which they are added, starting from zero.
*/ typedef enum { coinParamInvalid = 0, coinParamAct, coinParamInt, coinParamDbl, coinParamStr, coinParamKwd } CoinParamType; /*! \brief Type declaration for push and pull functions. By convention, a return code of 0 indicates execution without error, >0 indicates nonfatal error, and <0 indicates fatal error. This is only convention, however; the base class makes no use of the push and pull functions and has no hardcoded interpretation of the return code. */ typedef int (*CoinParamFunc)(CoinParam *param); //@} /*! \name Constructors and Destructors Be careful how you specify parameters for the constructors! Some compilers are entirely too willing to convert almost anything to bool. */ //@{ /*! \brief Default constructor */ CoinParam(); /*! \brief Constructor for a parameter with a double value The default value is 0.0. Be careful to clearly indicate that \p lower and \p upper are real (double) values to distinguish this constructor from the constructor for an integer parameter. */ CoinParam(std::string name, std::string help, double lower, double upper, double dflt = 0.0, bool display = true); /*! \brief Constructor for a parameter with an integer value The default value is 0. */ CoinParam(std::string name, std::string help, int lower, int upper, int dflt = 0, bool display = true); /*! \brief Constructor for a parameter with keyword values The string supplied as \p firstValue becomes the first value-keyword. Additional value-keywords can be added using appendKwd(). It's necessary to specify both the first value-keyword (\p firstValue) and the default value-keyword index (\p dflt) in order to distinguish this constructor from the constructors for string and action parameters. Value-keywords are associated with an integer, starting with zero and increasing as each keyword is added. The value-keyword given as \p firstValue will be associated with the integer zero. The integer supplied for \p dflt can be any value, as long as it will be valid once all value-keywords have been added. */ CoinParam(std::string name, std::string help, std::string firstValue, int dflt, bool display = true); /*! \brief Constructor for a string parameter For some compilers, the default value (\p dflt) must be specified explicitly with type std::string to distinguish the constructor for a string parameter from the constructor for an action parameter. For example, use std::string("default") instead of simply "default", or use a variable of type std::string. */ CoinParam(std::string name, std::string help, std::string dflt, bool display = true); /*! \brief Constructor for an action parameter */ CoinParam(std::string name, std::string help, bool display = true); /*! \brief Copy constructor */ CoinParam(const CoinParam &orig); /*! \brief Clone */ virtual CoinParam *clone(); /*! \brief Assignment */ CoinParam &operator=(const CoinParam &rhs); /*! \brief Destructor */ virtual ~CoinParam(); //@} /*! \name Methods to query and manipulate the value(s) of a parameter */ //@{ /*! \brief Add an additional value-keyword to a keyword parameter */ void appendKwd(std::string kwd); /*! \brief Return the integer associated with the specified value-keyword Returns -1 if no value-keywords match the specified string. */ int kwdIndex(std::string kwd) const; /*! \brief Return the value-keyword that is the current value of the keyword parameter */ std::string kwdVal() const; /*! \brief Set the value of the keyword parameter using the integer associated with a value-keyword. If \p printIt is true, the corresponding value-keyword string will be echoed to std::cout. */ void setKwdVal(int value, bool printIt = false); /*! \brief Set the value of the keyword parameter using a value-keyword string. The given string will be tested against the set of value-keywords for the parameter using the shortest match rules. */ void setKwdVal(const std::string value); /*! \brief Prints the set of value-keywords defined for this keyword parameter */ void printKwds() const; /*! \brief Set the value of a string parameter */ void setStrVal(std::string value); /*! \brief Get the value of a string parameter */ std::string strVal() const; /*! \brief Set the value of a double parameter */ void setDblVal(double value); /*! \brief Get the value of a double parameter */ double dblVal() const; /*! \brief Set the value of a integer parameter */ void setIntVal(int value); /*! \brief Get the value of a integer parameter */ int intVal() const; /*! \brief Add a short help string to a parameter */ inline void setShortHelp(const std::string help) { shortHelp_ = help; } /*! \brief Retrieve the short help string */ inline std::string shortHelp() const { return (shortHelp_); } /*! \brief Add a long help message to a parameter See printLongHelp() for a description of how messages are broken into lines. */ inline void setLongHelp(const std::string help) { longHelp_ = help; } /*! \brief Retrieve the long help message */ inline std::string longHelp() const { return (longHelp_); } /*! \brief Print long help Prints the long help string, plus the valid range and/or keywords if appropriate. The routine makes a best effort to break the message into lines appropriate for an 80-character line. Explicit line breaks in the message will be observed. The short help string will be used if long help is not available. */ void printLongHelp() const; //@} /*! \name Methods to query and manipulate a parameter object */ //@{ /*! \brief Return the type of the parameter */ inline CoinParamType type() const { return (type_); } /*! \brief Set the type of the parameter */ inline void setType(CoinParamType type) { type_ = type; } /*! \brief Return the parameter keyword (name) string */ inline std::string name() const { return (name_); } /*! \brief Set the parameter keyword (name) string */ inline void setName(std::string name) { name_ = name; processName(); } /*! \brief Check if the specified string matches the parameter keyword (name) string Returns 1 if the string matches and meets the minimum match length, 2 if the string matches but doesn't meet the minimum match length, and 0 if the string doesn't match. Matches are \e not case-sensitive. */ int matches(std::string input) const; /*! \brief Return the parameter keyword (name) string formatted to show the minimum match length For example, if the parameter name was defined as allow!ableGap, the string returned by matchName would be allow(ableGap). */ std::string matchName() const; /*! \brief Set visibility of parameter Intended to control whether the parameter is shown when a list of parameters is processed. Used by CoinParamUtils::printHelp when printing help messages for a list of parameters. */ inline void setDisplay(bool display) { display_ = display; } /*! \brief Get visibility of parameter */ inline bool display() const { return (display_); } /*! \brief Get push function */ inline CoinParamFunc pushFunc() { return (pushFunc_); } /*! \brief Set push function */ inline void setPushFunc(CoinParamFunc func) { pushFunc_ = func; } /*! \brief Get pull function */ inline CoinParamFunc pullFunc() { return (pullFunc_); } /*! \brief Set pull function */ inline void setPullFunc(CoinParamFunc func) { pullFunc_ = func; } //@} private: /*! \name Private methods */ //@{ /*! Process a name for efficient matching */ void processName(); //@} /*! \name Private parameter data */ //@{ /// Parameter type (see #CoinParamType) CoinParamType type_; /// Parameter name std::string name_; /// Length of parameter name size_t lengthName_; /*! \brief Minimum length required to declare a match for the parameter name. */ size_t lengthMatch_; /// Lower bound on value for a double parameter double lowerDblValue_; /// Upper bound on value for a double parameter double upperDblValue_; /// Double parameter - current value double dblValue_; /// Lower bound on value for an integer parameter int lowerIntValue_; /// Upper bound on value for an integer parameter int upperIntValue_; /// Integer parameter - current value int intValue_; /// String parameter - current value std::string strValue_; /// Set of valid value-keywords for a keyword parameter std::vector< std::string > definedKwds_; /*! \brief Current value for a keyword parameter (index into #definedKwds_) */ int currentKwd_; /// Push function CoinParamFunc pushFunc_; /// Pull function CoinParamFunc pullFunc_; /// Short help std::string shortHelp_; /// Long help std::string longHelp_; /// Display when processing lists of parameters? bool display_; //@} }; /*! \relatesalso CoinParam \brief A type for a parameter vector. */ typedef std::vector< CoinParam * > CoinParamVec; /*! \relatesalso CoinParam \brief A stream output function for a CoinParam object. */ std::ostream &operator<<(std::ostream &s, const CoinParam ¶m); /* Bring in the utility functions for parameter handling (CbcParamUtils). */ /*! \brief Utility functions for processing CoinParam parameters. The functions in CoinParamUtils support command line or interactive parameter processing and a help facility. Consult the `Related Functions' section of the CoinParam class documentation for individual function documentation. */ namespace CoinParamUtils { /*! \relatesalso CoinParam \brief Take command input from the file specified by src. Use stdin for \p src to specify interactive prompting for commands. */ void setInputSrc(FILE *src); /*! \relatesalso CoinParam \brief Returns true if command line parameters are being processed. */ bool isCommandLine(); /*! \relatesalso CoinParam \brief Returns true if parameters are being obtained from stdin. */ bool isInteractive(); /*! \relatesalso CoinParam \brief Attempt to read a string from the input. \p argc and \p argv are used only if isCommandLine() would return true. If \p valid is supplied, it will be set to 0 if a string is parsed without error, 2 if no field is present. */ std::string getStringField(int argc, const char *argv[], int *valid); /*! \relatesalso CoinParam \brief Attempt to read an integer from the input. \p argc and \p argv are used only if isCommandLine() would return true. If \p valid is supplied, it will be set to 0 if an integer is parsed without error, 1 if there's a parse error, and 2 if no field is present. */ int getIntField(int argc, const char *argv[], int *valid); /*! \relatesalso CoinParam \brief Attempt to read a real (double) from the input. \p argc and \p argv are used only if isCommandLine() would return true. If \p valid is supplied, it will be set to 0 if a real number is parsed without error, 1 if there's a parse error, and 2 if no field is present. */ double getDoubleField(int argc, const char *argv[], int *valid); /*! \relatesalso CoinParam \brief Scan a parameter vector for parameters whose keyword (name) string matches \p name using minimal match rules. \p matchNdx is set to the index of the last parameter that meets the minimal match criteria (but note there should be at most one matching parameter if the parameter vector is properly configured). \p shortCnt is set to the number of short matches (should be zero for a properly configured parameter vector if a minimal match is found). The return value is the number of matches satisfying the minimal match requirement (should be 0 or 1 in a properly configured vector). */ int matchParam(const CoinParamVec ¶mVec, std::string name, int &matchNdx, int &shortCnt); /*! \relatesalso CoinParam \brief Get the next command keyword (name) To be precise, return the next field from the current command input source, after a bit of processing. In command line mode (isCommandLine() returns true) the next field will normally be of the form `-keyword' or `--keyword' (\e i.e., a parameter keyword), and the string returned would be `keyword'. In interactive mode (isInteractive() returns true), the user will be prompted if necessary. It is assumed that the user knows not to use the `-' or `--' prefixes unless specifying parameters on the command line. There are a number of special cases if we're in command line mode. The order of processing of the raw string goes like this:
  • A stand-alone `-' is forced to `stdin'.
  • A stand-alone '--' is returned as a word; interpretation is up to the client.
  • A prefix of '-' or '--' is stripped from the string.
If the result is the string `stdin', command processing shifts to interactive mode and the user is immediately prompted for a new command. Whatever results from the above sequence is returned to the user as the return value of the function. An empty string indicates end of input. \p prompt will be used only if it's necessary to prompt the user in interactive mode. */ std::string getCommand(int argc, const char *argv[], const std::string prompt, std::string *pfx = 0); /*! \relatesalso CoinParam \brief Look up the command keyword (name) in the parameter vector. Print help if requested. In the most straightforward use, \p name is a string without `?', and the value returned is the index in \p paramVec of the single parameter that matched \p name. One or more '?' characters at the end of \p name is a query for information. The routine prints short (one '?') or long (more than one '?') help messages for a query. Help is also printed in the case where the name is ambiguous (some of the matches did not meet the minimal match length requirement). Note that multiple matches meeting the minimal match requirement is a configuration error. The mimimal match length for the parameters involved is too short. If provided as parameters, on return
  • \p matchCnt will be set to the number of matches meeting the minimal match requirement
  • \p shortCnt will be set to the number of matches that did not meet the miminal match requirement
  • \p queryCnt will be set to the number of '?' characters at the end of the name
The return values are:
  • >0: index in \p paramVec of the single unique match for \p name
  • -1: a query was detected (one or more '?' characters at the end of \p name
  • -2: one or more short matches, not a query
  • -3: no matches, not a query
  • -4: multiple matches meeting the minimal match requirement (configuration error)
*/ int lookupParam(std::string name, CoinParamVec ¶mVec, int *matchCnt = 0, int *shortCnt = 0, int *queryCnt = 0); /*! \relatesalso CoinParam \brief Utility to print a long message as filled lines of text The routine makes a best effort to break lines without exceeding the standard 80 character line length. Explicit newlines in \p msg will be obeyed. */ void printIt(const char *msg); /*! \relatesalso CoinParam \brief Utility routine to print help given a short match or explicit request for help. The two really are related, in that a query (a string that ends with one or more `?' characters) will often result in a short match. The routine expects that \p name matches a single parameter, and does not look for multiple matches. If called with \p matchNdx < 0, the routine will look up \p name in \p paramVec and print the full name from the parameter. If called with \p matchNdx > 0, it just prints the name from the specified parameter. If the name is a query, short (one '?') or long (more than one '?') help is printed. */ void shortOrHelpOne(CoinParamVec ¶mVec, int matchNdx, std::string name, int numQuery); /*! \relatesalso CoinParam \brief Utility routine to print help given multiple matches. If the name is not a query, or asks for short help (\e i.e., contains zero or one '?' characters), the list of matching names is printed. If the name asks for long help (contains two or more '?' characters), short help is printed for each matching name. */ void shortOrHelpMany(CoinParamVec ¶mVec, std::string name, int numQuery); /*! \relatesalso CoinParam \brief Print a generic `how to use the command interface' help message. The message is hard coded to match the behaviour of the parsing utilities. */ void printGenericHelp(); /*! \relatesalso CoinParam \brief Utility routine to print help messages for one or more parameters. Intended as a utility to implement explicit `help' commands. Help will be printed for all parameters in \p paramVec from \p firstParam to \p lastParam, inclusive. If \p shortHelp is true, short help messages will be printed. If \p longHelp is true, long help messages are printed. \p shortHelp overrules \p longHelp. If neither is true, only command keywords are printed. \p prefix is printed before each line; it's an imperfect attempt at indentation. */ void printHelp(CoinParamVec ¶mVec, int firstParam, int lastParam, std::string prefix, bool shortHelp, bool longHelp, bool hidden); } #endif /* CoinParam_H */ /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinMpsIO.hpp0000644000175200017520000007635113414454441016104 0ustar coincoin/* $Id: CoinMpsIO.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinMpsIO_H #define CoinMpsIO_H #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include #include #include "CoinUtilsConfig.h" #include "CoinPackedMatrix.hpp" #include "CoinMessageHandler.hpp" #include "CoinFileIO.hpp" class CoinModel; /// The following lengths are in decreasing order (for 64 bit etc) /// Large enough to contain element index /// This is already defined as CoinBigIndex /// Large enough to contain column index typedef int COINColumnIndex; /// Large enough to contain row index (or basis) typedef int COINRowIndex; // We are allowing free format - but there is a limit! // User can override by using CXXFLAGS += -DCOIN_MAX_FIELD_LENGTH=nnn #ifndef COIN_MAX_FIELD_LENGTH #define COIN_MAX_FIELD_LENGTH 160 #endif #define MAX_CARD_LENGTH 5 * COIN_MAX_FIELD_LENGTH + 80 enum COINSectionType { COIN_NO_SECTION, COIN_NAME_SECTION, COIN_ROW_SECTION, COIN_COLUMN_SECTION, COIN_RHS_SECTION, COIN_RANGES_SECTION, COIN_BOUNDS_SECTION, COIN_ENDATA_SECTION, COIN_EOF_SECTION, COIN_QUADRATIC_SECTION, COIN_CONIC_SECTION, COIN_QUAD_SECTION, COIN_SOS_SECTION, COIN_BASIS_SECTION, COIN_UNKNOWN_SECTION }; enum COINMpsType { COIN_N_ROW, COIN_E_ROW, COIN_L_ROW, COIN_G_ROW, COIN_BLANK_COLUMN, COIN_S1_COLUMN, COIN_S2_COLUMN, COIN_S3_COLUMN, COIN_INTORG, COIN_INTEND, COIN_SOSEND, COIN_UNSET_BOUND, COIN_UP_BOUND, COIN_FX_BOUND, COIN_LO_BOUND, COIN_FR_BOUND, COIN_MI_BOUND, COIN_PL_BOUND, COIN_BV_BOUND, COIN_UI_BOUND, COIN_LI_BOUND, COIN_BOTH_BOUNDS_SET, COIN_SC_BOUND, COIN_S1_BOUND, COIN_S2_BOUND, COIN_BS_BASIS, COIN_XL_BASIS, COIN_XU_BASIS, COIN_LL_BASIS, COIN_UL_BASIS, COIN_UNKNOWN_MPS_TYPE }; class CoinMpsIO; /// Very simple code for reading MPS data class CoinMpsCardReader { public: /**@name Constructor and destructor */ //@{ /// Constructor expects file to be open /// This one takes gzFile if fp null CoinMpsCardReader(CoinFileInput *input, CoinMpsIO *reader); /// Destructor ~CoinMpsCardReader(); //@} /**@name card stuff */ //@{ /// Read to next section COINSectionType readToNextSection(); /// Gets next field and returns section type e.g. COIN_COLUMN_SECTION COINSectionType nextField(); /** Gets next field for .gms file and returns type. -1 - EOF 0 - what we expected (and processed so pointer moves past) 1 - not what we expected leading blanks always ignored input types 0 - anything - stops on non blank card 1 - name (in columnname) 2 - value 3 - value name pair 4 - equation type 5 - ; */ int nextGmsField(int expectedType); /// Returns current section type inline COINSectionType whichSection() const { return section_; } /// Sets current section type inline void setWhichSection(COINSectionType section) { section_ = section; } /// Sees if free format. inline bool freeFormat() const { return freeFormat_; } /// Sets whether free format. Mainly for blank RHS etc inline void setFreeFormat(bool yesNo) { freeFormat_ = yesNo; } /// Only for first field on card otherwise BLANK_COLUMN /// e.g. COIN_E_ROW inline COINMpsType mpsType() const { return mpsType_; } /// Reads and cleans card - taking out trailing blanks - return 1 if EOF int cleanCard(); /// Returns row name of current field inline const char *rowName() const { return rowName_; } /// Returns column name of current field inline const char *columnName() const { return columnName_; } /// Returns value in current field inline double value() const { return value_; } /// Returns value as string in current field inline const char *valueString() const { return valueString_; } /// Whole card (for printing) inline const char *card() const { return card_; } /// Whole card - so we look at it (not const so nextBlankOr will work for gms reader) inline char *mutableCard() { return card_; } /// set position (again so gms reader will work) inline void setPosition(char *position) { position_ = position; } /// get position (again so gms reader will work) inline char *getPosition() const { return position_; } /// Returns card number inline CoinBigIndex cardNumber() const { return cardNumber_; } /// Returns file input inline CoinFileInput *fileInput() const { return input_; } /// Sets whether strings allowed inline void setStringsAllowed() { stringsAllowed_ = true; } //@} ////////////////// data ////////////////// protected: /**@name data */ //@{ /// Current value double value_; /// Current card image char card_[MAX_CARD_LENGTH]; /// Current position within card image char *position_; /// End of card char *eol_; /// Current COINMpsType COINMpsType mpsType_; /// Current row name char rowName_[COIN_MAX_FIELD_LENGTH]; /// Current column name char columnName_[COIN_MAX_FIELD_LENGTH]; /// File input CoinFileInput *input_; /// Which section we think we are in COINSectionType section_; /// Card number CoinBigIndex cardNumber_; /// Whether free format. Just for blank RHS etc bool freeFormat_; /// Whether IEEE - 0 no, 1 INTEL, 2 not INTEL int ieeeFormat_; /// If all names <= 8 characters then allow embedded blanks bool eightChar_; /// MpsIO CoinMpsIO *reader_; /// Message handler CoinMessageHandler *handler_; /// Messages CoinMessages messages_; /// Current element as characters (only if strings allowed) char valueString_[COIN_MAX_FIELD_LENGTH]; /// Whether strings allowed bool stringsAllowed_; //@} public: /**@name methods */ //@{ /// type - 0 normal, 1 INTEL IEEE, 2 other IEEE double osi_strtod(char *ptr, char **output, int type); /// remove blanks static void strcpyAndCompress(char *to, const char *from); /// static char *nextBlankOr(char *image); /// For strings double osi_strtod(char *ptr, char **output); //@} }; //############################################################################# #ifdef USE_SBB class SbbObject; class SbbModel; #endif /// Very simple class for containing data on set class CoinSet { public: /**@name Constructor and destructor */ //@{ /// Default constructor CoinSet(); /// Constructor CoinSet(int numberEntries, const int *which); /// Copy constructor CoinSet(const CoinSet &); /// Assignment operator CoinSet &operator=(const CoinSet &rhs); /// Destructor virtual ~CoinSet(); //@} /**@name gets */ //@{ /// Returns number of entries inline int numberEntries() const { return numberEntries_; } /// Sets number of entries inline void setNumberEntries(int number) { numberEntries_ = number; } /// Returns type of set - 1 =SOS1, 2 =SOS2 inline int setType() const { return setType_; } /// Sets type of set - 1 =SOS1, 2 =SOS2 inline void setSetType(int type) { setType_ = type; } /// Returns list of variables inline const int *which() const { return which_; } /// Returns weights inline const double *weights() const { return weights_; } /// Returns modifiable list of variables inline int *modifiableWhich() const { return which_; } /// Returns modifiable weights inline double *modifiableWeights() const { return weights_; } //@} #ifdef USE_SBB /**@name Use in sbb */ //@{ /// returns an object of type SbbObject virtual SbbObject *sbbObject(SbbModel *model) const { return NULL; } //@} #endif ////////////////// data ////////////////// protected: /**@name data */ //@{ /// Number of entries int numberEntries_; /// type of set int setType_; /// Which variables are in set int *which_; /// Weights double *weights_; //@} }; //############################################################################# /// Very simple class for containing SOS set class CoinSosSet : public CoinSet { public: /**@name Constructor and destructor */ //@{ /// Constructor CoinSosSet(int numberEntries, const int *which, const double *weights, int type); /// Destructor virtual ~CoinSosSet(); //@} #ifdef USE_SBB /**@name Use in sbb */ //@{ /// returns an object of type SbbObject virtual SbbObject *sbbObject(SbbModel *model) const; //@} #endif ////////////////// data ////////////////// protected: /**@name data */ //@{ //@} }; //############################################################################# /** MPS IO Interface This class can be used to read in mps files without a solver. After reading the file, the CoinMpsIO object contains all relevant data, which may be more than a particular OsiSolverInterface allows for. Items may be deleted to allow for flexibility of data storage. The implementation makes the CoinMpsIO object look very like a dummy solver, as the same conventions are used. */ class CoinMpsIO { friend void CoinMpsIOUnitTest(const std::string &mpsDir); public: /** @name Methods to retrieve problem information These methods return information about the problem held by the CoinMpsIO object. Querying an object that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are always valid */ //@{ /// Get number of columns int getNumCols() const; /// Get number of rows int getNumRows() const; /// Get number of nonzero elements CoinBigIndex getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds const double *getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds const double *getColUpper() const; /** Get pointer to array[getNumRows()] of constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ const char *getRowSense() const; /** Get pointer to array[getNumRows()] of constraint right-hand sides. Given constraints with upper (rowupper) and/or lower (rowlower) bounds, the constraint right-hand side (rhs) is set as
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ const double *getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges. Given constraints with upper (rowupper) and/or lower (rowlower) bounds, the constraint range (rowrange) is set as
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
Put another way, only range constraints have a nontrivial value for rowrange. */ const double *getRowRange() const; /// Get pointer to array[getNumRows()] of row lower bounds const double *getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds const double *getRowUpper() const; /// Get pointer to array[getNumCols()] of objective function coefficients const double *getObjCoefficients() const; /// Get pointer to row-wise copy of the coefficient matrix const CoinPackedMatrix *getMatrixByRow() const; /// Get pointer to column-wise copy of the coefficient matrix const CoinPackedMatrix *getMatrixByCol() const; /// Return true if column is a continuous variable bool isContinuous(int colNumber) const; /** Return true if a column is an integer variable Note: This function returns true if the the column is a binary or general integer variable. */ bool isInteger(int columnNumber) const; /** Return 1 if a column is an integer variable, 2 if semi-continuous Note: This function returns 1 if the the column is a binary or general integer variable. */ int isIntegerOrSemiContinuous(int columnNumber) const; /** Returns array[getNumCols()] specifying if a variable is integer. At present, simply coded as zero (continuous) and non-zero (integer) May be extended at a later date. */ const char *integerColumns() const; /** Returns the row name for the specified index. Returns 0 if the index is out of range. */ const char *rowName(int index) const; /** Returns the column name for the specified index. Returns 0 if the index is out of range. */ const char *columnName(int index) const; /** Returns the index for the specified row name Returns -1 if the name is not found. Returns numberRows for the objective row and > numberRows for dropped free rows. */ int rowIndex(const char *name) const; /** Returns the index for the specified column name Returns -1 if the name is not found. */ int columnIndex(const char *name) const; /** Returns the (constant) objective offset This is the RHS entry for the objective row */ double objectiveOffset() const; /// Set objective offset inline void setObjectiveOffset(double value) { objectiveOffset_ = value; } /// Return the problem name const char *getProblemName() const; /// Return the objective name const char *getObjectiveName() const; /// Return the RHS vector name const char *getRhsName() const; /// Return the range vector name const char *getRangeName() const; /// Return the bound vector name const char *getBoundName() const; /// Number of string elements inline int numberStringElements() const { return numberStringElements_; } /// String element inline const char *stringElement(int i) const { return stringElements_[i]; } //@} /** @name Methods to set problem information Methods to load a problem into the CoinMpsIO object. */ //@{ /// Set the problem data void setMpsData(const CoinPackedMatrix &m, const double infinity, const double *collb, const double *colub, const double *obj, const char *integrality, const double *rowlb, const double *rowub, char const *const *const colnames, char const *const *const rownames); void setMpsData(const CoinPackedMatrix &m, const double infinity, const double *collb, const double *colub, const double *obj, const char *integrality, const double *rowlb, const double *rowub, const std::vector< std::string > &colnames, const std::vector< std::string > &rownames); void setMpsData(const CoinPackedMatrix &m, const double infinity, const double *collb, const double *colub, const double *obj, const char *integrality, const char *rowsen, const double *rowrhs, const double *rowrng, char const *const *const colnames, char const *const *const rownames); void setMpsData(const CoinPackedMatrix &m, const double infinity, const double *collb, const double *colub, const double *obj, const char *integrality, const char *rowsen, const double *rowrhs, const double *rowrng, const std::vector< std::string > &colnames, const std::vector< std::string > &rownames); /** Pass in an array[getNumCols()] specifying if a variable is integer. At present, simply coded as zero (continuous) and non-zero (integer) May be extended at a later date. */ void copyInIntegerInformation(const char *integerInformation); /// Set problem name void setProblemName(const char *name); /// Set objective name void setObjectiveName(const char *name); //@} /** @name Parameter set/get methods Methods to set and retrieve MPS IO parameters. */ //@{ /// Set infinity void setInfinity(double value); /// Get infinity double getInfinity() const; /// Set default upper bound for integer variables void setDefaultBound(int value); /// Get default upper bound for integer variables int getDefaultBound() const; /// Whether to allow string elements inline int allowStringElements() const { return allowStringElements_; } /// Whether to allow string elements (0 no, 1 yes, 2 yes and try flip) inline void setAllowStringElements(int yesNo) { allowStringElements_ = yesNo; } /** Small element value - elements less than this set to zero on input default is 1.0e-14 */ inline double getSmallElementValue() const { return smallElement_; } inline void setSmallElementValue(double value) { smallElement_ = value; } //@} /** @name Methods for problem input and output Methods to read and write MPS format problem files. The read and write methods return the number of errors that occurred during the IO operation, or -1 if no file is opened. \note If the CoinMpsIO class was compiled with support for libz then readMps will automatically try to append .gz to the file name and open it as a compressed file if the specified file name cannot be opened. (Automatic append of the .bz2 suffix when libbz is used is on the TODO list.) \todo Allow for file pointers and positioning */ //@{ /// Set the current file name for the CoinMpsIO object void setFileName(const char *name); /// Get the current file name for the CoinMpsIO object const char *getFileName() const; /** Read a problem in MPS format from the given filename. Use "stdin" or "-" to read from stdin. */ int readMps(const char *filename, const char *extension = "mps"); /** Read a problem in MPS format from the given filename. Use "stdin" or "-" to read from stdin. But do sets as well */ int readMps(const char *filename, const char *extension, int &numberSets, CoinSet **&sets); /** Read a problem in MPS format from a previously opened file More precisely, read a problem using a CoinMpsCardReader object already associated with this CoinMpsIO object. \todo Provide an interface that will allow a client to associate a CoinMpsCardReader object with a CoinMpsIO object by setting the cardReader_ field. */ int readMps(); /// and int readMps(int &numberSets, CoinSet **&sets); /** Read a basis in MPS format from the given filename. If VALUES on NAME card and solution not NULL fills in solution status values as for CoinWarmStartBasis (but one per char) -1 file error, 0 normal, 1 has solution values Use "stdin" or "-" to read from stdin. If sizes of names incorrect - read without names */ int readBasis(const char *filename, const char *extension, double *solution, unsigned char *rowStatus, unsigned char *columnStatus, const std::vector< std::string > &colnames, int numberColumns, const std::vector< std::string > &rownames, int numberRows); /** Read a problem in GAMS format from the given filename. Use "stdin" or "-" to read from stdin. if convertObjective then massages objective column */ int readGms(const char *filename, const char *extension = "gms", bool convertObjective = false); /** Read a problem in GAMS format from the given filename. Use "stdin" or "-" to read from stdin. But do sets as well */ int readGms(const char *filename, const char *extension, int &numberSets, CoinSet **&sets); /** Read a problem in GAMS format from a previously opened file More precisely, read a problem using a CoinMpsCardReader object already associated with this CoinMpsIO object. */ // Not for now int readGms(); /// and int readGms(int &numberSets, CoinSet **&sets); /** Read a problem in GMPL (subset of AMPL) format from the given filenames. */ int readGMPL(const char *modelName, const char *dataName = NULL, bool keepNames = false); /** Write the problem in MPS format to a file with the given filename. \param compression can be set to three values to indicate what kind of file should be written
  • 0: plain text (default)
  • 1: gzip compressed (.gz is appended to \c filename)
  • 2: bzip2 compressed (.bz2 is appended to \c filename) (TODO)
If the library was not compiled with the requested compression then writeMps falls back to writing a plain text file. \param formatType specifies the precision to used for values in the MPS file
  • 0: normal precision (default)
  • 1: extra accuracy
  • 2: IEEE hex
\param numberAcross specifies whether 1 or 2 (default) values should be specified on every data line in the MPS file. \param quadratic specifies quadratic objective to be output */ int writeMps(const char *filename, int compression = 0, int formatType = 0, int numberAcross = 2, CoinPackedMatrix *quadratic = NULL, int numberSOS = 0, const CoinSet *setInfo = NULL) const; /// Return card reader object so can see what last card was e.g. QUADOBJ inline const CoinMpsCardReader *reader() const { return cardReader_; } /** Read in a quadratic objective from the given filename. If filename is NULL (or the same as the currently open file) then reading continues from the current file. If not, the file is closed and the specified file is opened. Code should be added to general MPS reader to read this if QSECTION Data is assumed to be Q and objective is c + 1/2 xT Q x No assumption is made for symmetry, positive definite, etc. No check is made for duplicates or non-triangular if checkSymmetry==0. If 1 checks lower triangular (so off diagonal should be 2*Q) if 2 makes lower triangular and assumes full Q (but adds off diagonals) Arrays should be deleted by delete [] Returns number of errors:
  • -1: bad file
  • -2: no Quadratic section
  • -3: an empty section
  • +n: then matching errors etc (symmetry forced)
  • -4: no matching errors but fails triangular test (triangularity forced)
columnStart is numberColumns+1 long, others numberNonZeros */ int readQuadraticMps(const char *filename, CoinBigIndex *&columnStart, int *&column, double *&elements, int checkSymmetry); /** Read in a list of cones from the given filename. If filename is NULL (or the same as the currently open file) then reading continues from the current file. If not, the file is closed and the specified file is opened. Code should be added to general MPS reader to read this if CSECTION No checking is done that in unique cone Arrays should be deleted by delete [] Returns number of errors, -1 bad file, -2 no conic section, -3 empty section columnStart is numberCones+1 long, other number of columns in matrix coneType is 1 for QUAD, 2 for RQUAD (numberCones long) */ int readConicMps(const char *filename, int *&columnStart, int *&column, int *&coneType, int &numberCones); /// Set whether to move objective from matrix inline void setConvertObjective(bool trueFalse) { convertObjective_ = trueFalse; } /// copies in strings from a CoinModel - returns number int copyStringElements(const CoinModel *model); //@} /** @name Constructors and destructors */ //@{ /// Default Constructor CoinMpsIO(); /// Copy constructor CoinMpsIO(const CoinMpsIO &); /// Assignment operator CoinMpsIO &operator=(const CoinMpsIO &rhs); /// Destructor ~CoinMpsIO(); //@} /**@name Message handling */ //@{ /** Pass in Message handler Supply a custom message handler. It will not be destroyed when the CoinMpsIO object is destroyed. */ void passInMessageHandler(CoinMessageHandler *handler); /// Set the language for messages. void newLanguage(CoinMessages::Language language); /// Set the language for messages. inline void setLanguage(CoinMessages::Language language) { newLanguage(language); } /// Return the message handler inline CoinMessageHandler *messageHandler() const { return handler_; } /// Return the messages inline CoinMessages messages() { return messages_; } /// Return the messages pointer inline CoinMessages *messagesPointer() { return &messages_; } //@} /**@name Methods to release storage These methods allow the client to reduce the storage used by the CoinMpsIO object be selectively releasing unneeded problem information. */ //@{ /** Release all information which can be re-calculated. E.g., row sense, copies of rows, hash tables for names. */ void releaseRedundantInformation(); /// Release all row information (lower, upper) void releaseRowInformation(); /// Release all column information (lower, upper, objective) void releaseColumnInformation(); /// Release integer information void releaseIntegerInformation(); /// Release row names void releaseRowNames(); /// Release column names void releaseColumnNames(); /// Release matrix information void releaseMatrixInformation(); //@} protected: /**@name Miscellaneous helper functions */ //@{ /// Utility method used several times to implement public methods void setMpsDataWithoutRowAndColNames( const CoinPackedMatrix &m, const double infinity, const double *collb, const double *colub, const double *obj, const char *integrality, const double *rowlb, const double *rowub); void setMpsDataColAndRowNames( const std::vector< std::string > &colnames, const std::vector< std::string > &rownames); void setMpsDataColAndRowNames( char const *const *const colnames, char const *const *const rownames); /// Does the heavy lifting for destruct and assignment. void gutsOfDestructor(); /// Does the heavy lifting for copy and assignment. void gutsOfCopy(const CoinMpsIO &); /// Clears problem data from the CoinMpsIO object. void freeAll(); /** A quick inlined function to convert from lb/ub style constraint definition to sense/rhs/range style */ inline void convertBoundToSense(const double lower, const double upper, char &sense, double &right, double &range) const; /** A quick inlined function to convert from sense/rhs/range stryle constraint definition to lb/ub style */ inline void convertSenseToBound(const char sense, const double right, const double range, double &lower, double &upper) const; /** Deal with a filename As the name says. Returns +1 if the file name is new, 0 if it's the same as before (i.e., matches fileName_), and -1 if there's an error and the file can't be opened. Handles automatic append of .gz suffix when compiled with libz. \todo Add automatic append of .bz2 suffix when compiled with libbz. */ int dealWithFileName(const char *filename, const char *extension, CoinFileInput *&input); /** Add string to list iRow==numberRows is objective, nr+1 is lo, nr+2 is up iColumn==nc is rhs (can't cope with ranges at present) */ void addString(int iRow, int iColumn, const char *value); /// Decode string void decodeString(int iString, int &iRow, int &iColumn, const char *&value) const; //@} // for hashing typedef struct { int index, next; } CoinHashLink; /**@name Hash table methods */ //@{ /// Creates hash list for names (section = 0 for rows, 1 columns) void startHash(char **names, const int number, int section); /// This one does it when names are already in void startHash(int section) const; /// Deletes hash storage void stopHash(int section); /// Finds match using hash, -1 not found int findHash(const char *name, int section) const; //@} /**@name Cached problem information */ //@{ /// Problem name char *problemName_; /// Objective row name char *objectiveName_; /// Right-hand side vector name char *rhsName_; /// Range vector name char *rangeName_; /// Bounds vector name char *boundName_; /// Number of rows int numberRows_; /// Number of columns int numberColumns_; /// Number of coefficients CoinBigIndex numberElements_; /// Pointer to dense vector of row sense indicators mutable char *rowsense_; /// Pointer to dense vector of row right-hand side values mutable double *rhs_; /** Pointer to dense vector of slack variable upper bounds for range constraints (undefined for non-range rows) */ mutable double *rowrange_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByRow_; /// Pointer to column-wise copy of problem matrix coefficients. CoinPackedMatrix *matrixByColumn_; /// Pointer to dense vector of row lower bounds double *rowlower_; /// Pointer to dense vector of row upper bounds double *rowupper_; /// Pointer to dense vector of column lower bounds double *collower_; /// Pointer to dense vector of column upper bounds double *colupper_; /// Pointer to dense vector of objective coefficients double *objective_; /// Constant offset for objective value (i.e., RHS value for OBJ row) double objectiveOffset_; /** Pointer to dense vector specifying if a variable is continuous (0) or integer (1). */ char *integerType_; /** Row and column names Linked to hash table sections (0 - row names, 1 column names) */ char **names_[2]; //@} /** @name Hash tables */ //@{ /// Current file name char *fileName_; /// Number of entries in a hash table section int numberHash_[2]; /// Hash tables (two sections, 0 - row names, 1 - column names) mutable CoinHashLink *hash_[2]; //@} /** @name CoinMpsIO object parameters */ //@{ /// Upper bound when no bounds for integers int defaultBound_; /// Value to use for infinity double infinity_; /// Small element value double smallElement_; /// Message handler CoinMessageHandler *handler_; /** Flag to say if the message handler is the default handler. If true, the handler will be destroyed when the CoinMpsIO object is destroyed; if false, it will not be destroyed. */ bool defaultHandler_; /// Messages CoinMessages messages_; /// Card reader CoinMpsCardReader *cardReader_; /// If .gms file should it be massaged to move objective bool convertObjective_; /// Whether to allow string elements int allowStringElements_; /// Maximum number of string elements int maximumStringElements_; /// Number of string elements int numberStringElements_; /// String elements char **stringElements_; //@} }; //############################################################################# /** A function that tests the methods in the CoinMpsIO class. The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging. Also, if this method is compiled with optimization, the compilation takes 10-15 minutes and the machine pages (has 256M core memory!)... */ void CoinMpsIOUnitTest(const std::string &mpsDir); // Function to return number in most efficient way // section is 0 for columns, 1 for rhs,ranges and 2 for bounds /* formatType is 0 - normal and 8 character names 1 - extra accuracy 2 - IEEE hex - INTEL 3 - IEEE hex - not INTEL */ void CoinConvertDouble(int section, int formatType, double value, char outputValue[24]); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPrePostsolveMatrix.cpp0000644000175200017520000003165013414454441020733 0ustar coincoin/* $Id: CoinPrePostsolveMatrix.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #ifndef SLIM_CLP #include "CoinWarmStartBasis.hpp" #endif /*! \file This file contains methods for CoinPrePostsolveMatrix, the foundation class for CoinPresolveMatrix and CoinPostsolveMatrix. */ /* Constructor and destructor for CoinPrePostsolveMatrix. */ /* CoinPrePostsolveMatrix constructor This constructor does next to nothing, because there's no sensible middle ground between next to nothing and a constructor with twenty parameters that all need to be extracted from the constraint system held by an OSI. The alternative, creating a constructor which takes some flavour of OSI as a parameter, seems to me (lh) to be wrong. That knowledge does not belong in the generic COIN support library. The philosophy here is to create an empty CoinPrePostsolveMatrix object and then load in the constraint matrix, vectors, and miscellaneous parameters. Some of this will be done from CoinPresolveMatrix or CoinPostsolveMatrix constructors, but in the end most of it should be pushed back to an OSI-specific method. Then the knowledge of how to access the required data in an OSI is pushed back to the individual OSI classes where it belongs. Thus, all vector allocation is postponed until load time. */ CoinPrePostsolveMatrix::CoinPrePostsolveMatrix(int ncols_alloc, int nrows_alloc, CoinBigIndex nelems_alloc) : ncols_(0) , nrows_(0) , nelems_(0) , ncols0_(ncols_alloc) , nrows0_(nrows_alloc) , nelems0_(nelems_alloc) , bulkRatio_(2.0) , mcstrt_(0) , hincol_(0) , hrow_(0) , colels_(0) , cost_(0) , originalOffset_(0) , clo_(0) , cup_(0) , rlo_(0) , rup_(0) , originalColumn_(0) , originalRow_(0) , ztolzb_(0.0) , ztoldj_(0.0) , maxmin_(0) , sol_(0) , rowduals_(0) , acts_(0) , rcosts_(0) , colstat_(0) , rowstat_(0) , handler_(0) , defaultHandler_(false) , messages_() { handler_ = new CoinMessageHandler(); defaultHandler_ = true; bulk0_ = static_cast< CoinBigIndex >(bulkRatio_ * nelems_alloc); return; } /* CoinPrePostsolveMatrix destructor */ CoinPrePostsolveMatrix::~CoinPrePostsolveMatrix() { delete[] sol_; delete[] rowduals_; delete[] acts_; delete[] rcosts_; /* Note that we do NOT delete rowstat_. This is to maintain compatibility with ClpPresolve and OsiPresolve, which allocate a single vector and split it between column and row status. */ delete[] colstat_; delete[] cost_; delete[] clo_; delete[] cup_; delete[] rlo_; delete[] rup_; delete[] mcstrt_; delete[] hrow_; delete[] colels_; delete[] hincol_; delete[] originalColumn_; delete[] originalRow_; if (defaultHandler_ == true) delete handler_; } #ifndef SLIM_CLP /* Methods to set the miscellaneous parameters: max/min, objective offset, and tolerances. */ void CoinPrePostsolveMatrix::setObjOffset(double offset) { originalOffset_ = offset; } void CoinPrePostsolveMatrix::setObjSense(double objSense) { maxmin_ = objSense; } void CoinPrePostsolveMatrix::setPrimalTolerance(double primTol) { ztolzb_ = primTol; } void CoinPrePostsolveMatrix::setDualTolerance(double dualTol) { ztoldj_ = dualTol; } /* Methods to set the various vectors. For all methods, lenParam can be omitted and will default to -1. In that case, the default action is to copy ncols_ or nrows_ entries, as appropriate. It is *not* considered an error to specify lenParam = 0! This allows for allocation of vectors in an intially empty system. Note that ncols_ and nrows_ will be 0 before a constraint system is loaded. Be careful what you ask for. The vector allocated in the CoinPrePostsolveMatrix will be of size ncols0_ or nrows0_, as appropriate. */ void CoinPrePostsolveMatrix::setColLower(const double *colLower, int lenParam) { int len; if (lenParam < 0) { len = ncols_; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setColLower", "CoinPrePostsolveMatrix"); } else { len = lenParam; } if (clo_ == 0) clo_ = new double[ncols0_]; CoinMemcpyN(colLower, len, clo_); return; } void CoinPrePostsolveMatrix::setColUpper(const double *colUpper, int lenParam) { int len; if (lenParam < 0) { len = ncols_; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setColUpper", "CoinPrePostsolveMatrix"); } else { len = lenParam; } if (cup_ == 0) cup_ = new double[ncols0_]; CoinMemcpyN(colUpper, len, cup_); return; } void CoinPrePostsolveMatrix::setColSolution(const double *colSol, int lenParam) { int len; if (lenParam < 0) { len = ncols_; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setColSolution", "CoinPrePostsolveMatrix"); } else { len = lenParam; } if (sol_ == 0) sol_ = new double[ncols0_]; CoinMemcpyN(colSol, len, sol_); return; } void CoinPrePostsolveMatrix::setCost(const double *cost, int lenParam) { int len; if (lenParam < 0) { len = ncols_; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setCost", "CoinPrePostsolveMatrix"); } else { len = lenParam; } if (cost_ == 0) cost_ = new double[ncols0_]; CoinMemcpyN(cost, len, cost_); return; } void CoinPrePostsolveMatrix::setReducedCost(const double *redCost, int lenParam) { int len; if (lenParam < 0) { len = ncols_; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setReducedCost", "CoinPrePostsolveMatrix"); } else { len = lenParam; } if (rcosts_ == 0) rcosts_ = new double[ncols0_]; CoinMemcpyN(redCost, len, rcosts_); return; } void CoinPrePostsolveMatrix::setRowLower(const double *rowLower, int lenParam) { int len; if (lenParam < 0) { len = nrows_; } else if (lenParam > nrows0_) { throw CoinError("length exceeds allocated size", "setRowLower", "CoinPrePostsolveMatrix"); } else { len = lenParam; } if (rlo_ == 0) rlo_ = new double[nrows0_]; CoinMemcpyN(rowLower, len, rlo_); return; } void CoinPrePostsolveMatrix::setRowUpper(const double *rowUpper, int lenParam) { int len; if (lenParam < 0) { len = nrows_; } else if (lenParam > nrows0_) { throw CoinError("length exceeds allocated size", "setRowUpper", "CoinPrePostsolveMatrix"); } else { len = lenParam; } if (rup_ == 0) rup_ = new double[nrows0_]; CoinMemcpyN(rowUpper, len, rup_); return; } void CoinPrePostsolveMatrix::setRowPrice(const double *rowSol, int lenParam) { int len; if (lenParam < 0) { len = nrows_; } else if (lenParam > nrows0_) { throw CoinError("length exceeds allocated size", "setRowPrice", "CoinPrePostsolveMatrix"); } else { len = lenParam; } if (rowduals_ == 0) rowduals_ = new double[nrows0_]; CoinMemcpyN(rowSol, len, rowduals_); return; } void CoinPrePostsolveMatrix::setRowActivity(const double *rowAct, int lenParam) { int len; if (lenParam < 0) { len = nrows_; } else if (lenParam > nrows0_) { throw CoinError("length exceeds allocated size", "setRowActivity", "CoinPrePostsolveMatrix"); } else { len = lenParam; } if (acts_ == 0) acts_ = new double[nrows0_]; CoinMemcpyN(rowAct, len, acts_); return; } /* Methods to set the status vectors for a basis. Note that we need to allocate colstat_ and rowstat_ as a single vector, to maintain compatibility with OsiPresolve and ClpPresolve. The `using ::getStatus' declaration is required to get the compiler to consider the getStatus helper function defined in CoinWarmStartBasis.hpp. */ void CoinPrePostsolveMatrix::setStructuralStatus(const char *strucStatus, int lenParam) { int len; using ::getStatus; if (lenParam < 0) { len = ncols_; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setStructuralStatus", "CoinPrePostsolveMatrix"); } else { len = lenParam; } if (colstat_ == 0) { colstat_ = new unsigned char[ncols0_ + nrows0_]; #ifdef ZEROFAULT CoinZeroN(colstat_, ncols0_ + nrows0_); #endif rowstat_ = colstat_ + ncols0_; } for (int j = 0; j < len; j++) { Status statj = Status(getStatus(strucStatus, j)); setColumnStatus(j, statj); } return; } void CoinPrePostsolveMatrix::setArtificialStatus(const char *artifStatus, int lenParam) { int len; using ::getStatus; if (lenParam < 0) { len = nrows_; } else if (lenParam > nrows0_) { throw CoinError("length exceeds allocated size", "setArtificialStatus", "CoinPrePostsolveMatrix"); } else { len = lenParam; } if (colstat_ == 0) { colstat_ = new unsigned char[ncols0_ + nrows0_]; #ifdef ZEROFAULT CoinZeroN(colstat_, ncols0_ + nrows0_); #endif rowstat_ = colstat_ + ncols0_; } for (int i = 0; i < len; i++) { Status stati = Status(getStatus(artifStatus, i)); setRowStatus(i, stati); } return; } /* This routine initialises structural and artificial status given a CoinWarmStartBasis as the parameter. */ void CoinPrePostsolveMatrix::setStatus(const CoinWarmStartBasis *basis) { setStructuralStatus(basis->getStructuralStatus(), basis->getNumStructural()); setArtificialStatus(basis->getArtificialStatus(), basis->getNumArtificial()); return; } /* This routine returns structural and artificial status in the form of a CoinWarmStartBasis object. What to do when CoinPrePostsolveMatrix::Status == superBasic? There's no analog in CoinWarmStartBasis::Status. */ CoinWarmStartBasis *CoinPrePostsolveMatrix::getStatus() { int n = ncols_; int m = nrows_; CoinWarmStartBasis *wsb = new CoinWarmStartBasis(); wsb->setSize(n, m); for (int j = 0; j < n; j++) { CoinWarmStartBasis::Status statj = CoinWarmStartBasis::Status(getColumnStatus(j)); wsb->setStructStatus(j, statj); } for (int i = 0; i < m; i++) { CoinWarmStartBasis::Status stati = CoinWarmStartBasis::Status(getRowStatus(i)); wsb->setArtifStatus(i, stati); } return (wsb); } #endif /* Set the status of a non-basic artificial variable based on the variable's value and bounds. */ void CoinPrePostsolveMatrix::setRowStatusUsingValue(int iRow) { double value = acts_[iRow]; double lower = rlo_[iRow]; double upper = rup_[iRow]; if (lower < -1.0e20 && upper > 1.0e20) { setRowStatus(iRow, isFree); } else if (fabs(lower - value) <= ztolzb_) { setRowStatus(iRow, atUpperBound); } else if (fabs(upper - value) <= ztolzb_) { setRowStatus(iRow, atLowerBound); } else { setRowStatus(iRow, superBasic); } } /* Set the status of a non-basic structural variable based on the variable's value and bounds. */ void CoinPrePostsolveMatrix::setColumnStatusUsingValue(int iColumn) { double value = sol_[iColumn]; double lower = clo_[iColumn]; double upper = cup_[iColumn]; if (lower < -1.0e20 && upper > 1.0e20) { setColumnStatus(iColumn, isFree); } else if (fabs(lower - value) <= ztolzb_) { setColumnStatus(iColumn, atLowerBound); } else if (fabs(upper - value) <= ztolzb_) { setColumnStatus(iColumn, atUpperBound); } else { setColumnStatus(iColumn, superBasic); } } #ifndef SLIM_CLP /* Simple routines to return a constant character string for the status value. Separate row and column routines for convenience, and one that just takes the status code. */ const char *CoinPrePostsolveMatrix::columnStatusString(int j) const { Status statj = getColumnStatus(j); switch (statj) { case isFree: { return ("NBFR"); } case basic: { return ("B"); } case atUpperBound: { return ("NBUB"); } case atLowerBound: { return ("NBLB"); } case superBasic: { return ("SB"); } default: { return ("INVALID!"); } } } const char *CoinPrePostsolveMatrix::rowStatusString(int j) const { Status statj = getRowStatus(j); switch (statj) { case isFree: { return ("NBFR"); } case basic: { return ("B"); } case atUpperBound: { return ("NBUB"); } case atLowerBound: { return ("NBLB"); } case superBasic: { return ("SB"); } default: { return ("INVALID!"); } } } const char *statusName(CoinPrePostsolveMatrix::Status status) { switch (status) { case CoinPrePostsolveMatrix::isFree: { return ("NBFR"); } case CoinPrePostsolveMatrix::basic: { return ("B"); } case CoinPrePostsolveMatrix::atUpperBound: { return ("NBUB"); } case CoinPrePostsolveMatrix::atLowerBound: { return ("NBLB"); } case CoinPrePostsolveMatrix::superBasic: { return ("SB"); } default: { return ("INVALID!"); } } } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveDual.cpp0000644000175200017520000016267313414454441017520 0ustar coincoin/* $Id: CoinPresolveDual.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveDual.hpp" #include "CoinMessage.hpp" #include "CoinHelperFunctions.hpp" #include "CoinFloatEqual.hpp" /* Define PRESOLVE_DEBUG and PRESOLVE_CONSISTENCY as compile flags! If not uniformly on across all uses of presolve code you'll get something between garbage and a core dump. See comments in CoinPresolvePsdebug.hpp */ #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif /* Set to > 0 to enable bound propagation on dual variables? This has been disabled for a good while. See notes in code. #define PRESOLVE_TIGHTEN_DUALS 1 */ /* Guards incorrect code that attempts to adjust a column solution. See comments with the code. Could possibly be fixed, which is why it hasn't been chopped out. #define REMOVE_DUAL_ACTION_REPAIR_SOLN 1 */ /* In this transform we're looking to prove bounds on the duals y and reduced costs cbar. We can use this in two ways. First, if we can prove a bound on the reduced cost cbar with strict inequality, * cbar > 0 ==> x NBLB at optimality * cbar < 0 ==> x NBUB at optimality If the required bound is not finite, the problem is unbounded. Andersen & Andersen call this a dominated column. Second, suppose we can show that cbar = -y is strictly nonzero for the logical s associated with some inequality i. (There must be exactly one finite row bound, so that the logical has exactly one finite bound which is 0). If cbar demands the logical be nonbasic at bound, it's zero, and we can convert the inequality to an equality. Not based on duals and reduced costs, but in the same vein, if we can identify an architectural x that'll accomplish the same goal (bring one constraint tight when moved in a favourable direction), we can make that constraint an equality. The conditions are different, however: * Moving x in the favourable direction tightens exactly one constraint. * The bound (l or u) in the favourable direction is infinite. * If x is entangled in any other constraints, moving x in the favourable direction loosens those constraints. A bit of thought and linear algebra is required to convince yourself that in the circumstances, cbar = c, hence we need only look at c to determine the favourable direction. To get from bounds on the duals to bounds on the reduced costs, note that cbar = c - (SUM{P}ay + SUM{M}ay) for P = {a > 0} and M = {a < 0}. Then cbarmin = c - (SUM{P}aymax + SUM{M}aymin) cbarmax = c - (SUM{P}aymin + SUM{M}aymax) As A&A note, the reverse implication also holds: * if l = -infty, cbar <= 0 at optimality * if u = infty, cbar >= 0 at optimality We can use this to run bound propagation on the duals in an attempt to tighten bounds and force more reduced costs to strict inequality. Suppose u = infty. Then cbar >= 0. It must be possible to achieve this, so cbarmax >= 0: 0 <= c - (SUM{P}aymin + SUM{M}aymax) Solve for y, a > 0: y <= 1/a[c - (SUM{P\t}aymin + SUM{M}aymax)] If a < 0, y >= 1/a[c - (SUM{P}aymin + SUM{M\t}aymax)] For l = -infty, cbar <= 0, hence cbarmin <= 0: 0 >= c - (SUM{P}aymax + SUM{M}aymin) Solve for y, a > 0: y >= 1/a[c - (SUM{P\t}aymax + SUM{M}aymin)] If a < 0, y <= 1/a[c - (SUM{P}aymax + SUM{M\t}aymin)] We can get initial bounds on ymin and ymax from column singletons x, where cbar = c - ay If u = infty, then at optimality 0 <= cbar = c - ay For a > 0 we have y <= c/a and for a < 0 we have y >= c/a We can do a similar calculation for l = -infty, so that 0 >= cbar = c - ay For a > 0 we have y >= c/a and for a < 0 we have y <= c/a A logical is a column singleton with c = 0.0 and |a| = 1.0. One or both bounds can be finite, depending on constraint representation. This code is hardwired for minimisation. Extensive rework of the second part of the routine Fall 2011 to add a postsolve transform to fix bug #67, incorrect status for logicals. -- lh, 111208 -- */ /* Original comments from 040916: This routine looks to be something of a work in progress. Down in the bound propagation loop, why do we only work with variables with u_j = infty? The corresponding section of code for l_j = -infty is ifdef'd away. l = -infty is uncommon; perhaps it's not worth the effort? Why exclude the code protected by PRESOLVE_TIGHTEN_DUALS? Why are we using ekkinf instead of PRESOLVE_INF? */ const CoinPresolveAction * remove_dual_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { #if PRESOLVE_DEBUG > 0 std::cout << "Entering remove_dual_action::presolve, " << prob->nrows_ << "x" << prob->ncols_ << "." << std::endl; #endif #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob, 2, 1, 1); presolve_check_nbasic(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int startEmptyRows = 0; int startEmptyColumns = 0; startEmptyRows = prob->countEmptyRows(); startEmptyColumns = prob->countEmptyCols(); #if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0; if (prob->tuning_) startTime = CoinCpuTime(); #endif #endif // column-major representation const int ncols = prob->ncols_; const CoinBigIndex *const mcstrt = prob->mcstrt_; const int *const hincol = prob->hincol_; const int *const hrow = prob->hrow_; const double *const colels = prob->colels_; const double *const cost = prob->cost_; // column type, bounds, solution, and status const unsigned char *const integerType = prob->integerType_; const double *const clo = prob->clo_; const double *const cup = prob->cup_; double *const csol = prob->sol_; unsigned char *&colstat = prob->colstat_; // row-major representation const int nrows = prob->nrows_; const CoinBigIndex *const mrstrt = prob->mrstrt_; const int *const hinrow = prob->hinrow_; const int *const hcol = prob->hcol_; #if 1 //REMOVE_DUAL_ACTION_REPAIR_SOLN > 0 const double *const rowels = prob->rowels_; #endif // row bounds double *const rlo = prob->rlo_; double *const rup = prob->rup_; // tolerances const double ekkinf2 = PRESOLVE_SMALL_INF; const double ekkinf = ekkinf2 * 1.0e8; const double ztolcbarj = prob->ztoldj_; const CoinRelFltEq relEq(prob->ztolzb_); /* Grab one of the preallocated scratch arrays to hold min and max values of row duals. */ double *ymin = prob->usefulRowDouble_; double *ymax = ymin + nrows; /* use arrays to say which bound active 1 - lower 2 - upper 4 - fixed 8 - don't touch */ char *active = reinterpret_cast< char * >(prob->usefulColumnInt_); memset(active, 0, ncols); int nOneBound = 0; int numberLook = prob->numberColsToDo_; int *look = prob->colsToDo_; for (int iLook = 0; iLook < numberLook; iLook++) { int j = look[iLook]; char type; if (cup[j] >= ekkinf) { if (clo[j] <= -ekkinf) type = 0; else type = 1; } else { if (clo[j] <= -ekkinf) type = 2; else if (clo[j] < cup[j]) type = 3; else type = 4; } if (type == 1 || type == 2) nOneBound++; active[j] = type; } int nFreed = 0; #define USE_ACTIVE 1 //#define PRESOLVE_DEBUG 2 for (int i = 0; i < nrows; i++) { const CoinBigIndex krs = mrstrt[i]; const CoinBigIndex kre = krs + hinrow[i]; int positive = 0; int negative = 0; CoinBigIndex onlyPositive = -1; CoinBigIndex onlyNegative = -1; for (CoinBigIndex k = krs; k < kre; k++) { const double coeff = rowels[k]; const int icol = hcol[k]; char type = active[icol]; //const double lb = clo[icol] ; //const double ub = cup[icol] ; if (type == 0 || (type & 8) != 0) { // free or already used positive = 2; negative = 2; break; } else if (type == 1) { // lower bound active if (coeff > 0.0) { positive++; } else { negative++; } } else if (type == 2) { // upper bound active if (coeff < 0.0) { positive++; } else { negative++; } } else if (type == 3) { // both bounds active if (coeff > 0.0) { onlyPositive = k; positive++; } else { onlyNegative = k; negative++; } } else { // fixed } } bool doneSomething = false; if (onlyPositive >= 0 && positive == 1) { const double coeff = rowels[onlyPositive]; const int icol = hcol[onlyPositive]; const double lb = clo[icol]; const double ub = cup[icol]; // Get possible without icol double maxUp = 0.0; double maxDown = 0.0; #if USE_ACTIVE > 2 printf("%d pos coeff %g bounds %g,%g rhs %g,%g - %d negative", icol, coeff, lb, ub, rlo[i], rup[i], negative); printf(", row is %g <= ", rlo[i]); #endif for (CoinBigIndex k = krs; k < kre; k++) { const int icol2 = hcol[k]; #if USE_ACTIVE > 2 printf("(%d,%g - bounds %g,%g) ", icol2, rowels[k], clo[icol2], cup[icol2]); #endif if (icol2 == icol) continue; const double coeff2 = rowels[k]; const double lb2 = clo[icol2]; const double ub2 = cup[icol2]; if (coeff2 > 0.0) { if (ub2 > 1.0e30) maxUp = COIN_DBL_MAX; else maxUp += coeff2 * ub2; if (lb2 < -1.0e30) maxDown = -COIN_DBL_MAX; else maxDown += coeff2 * lb2; } else { if (lb2 < -1.0e30) maxUp = COIN_DBL_MAX; else maxUp += coeff2 * lb2; if (ub2 > 1.0e30) maxDown = -COIN_DBL_MAX; else maxDown += coeff2 * ub2; } } double impliedLower = (rlo[i] - maxUp) / coeff; double impliedUpper = (rup[i] - maxDown) / coeff; #if USE_ACTIVE > 2 printf("<= %g - implied l,u %g,%g\n", rup[i], impliedLower, impliedUpper); #endif if (impliedLower > lb - 1.0e-7) { #if USE_ACTIVE == 2 printf("%d pos coeff %g bounds %g,%g maxDown %g rhs %g,%g - %d negative\n", icol, coeff, lb, ub, maxDown, rlo[i], rup[i], negative); #endif #if USE_ACTIVE > 1 printf("can take off lb as implied lower %g > %g\n", impliedLower, lb); #endif doneSomething = true; active[icol] = 2 + 8; nFreed++; #define TRY_UPPER 3 #if TRY_UPPER > 1 } else if (impliedUpper < ub + 1.0e-7) { #if 0 printf("%d pos coeff %g bounds %g,%g maxDown %g, maxUp %g rhs %g,%g\n", icol,coeff,lb,ub,maxDown,maxUp,rlo[i],rup[i]); printf("row is %g <= ",rlo[i]); for (CoinBigIndex k = krs ; k < kre ; k++) { const int icol2 = hcol[k] ; printf("(%d,%g - bounds %g,%g) ",icol2,rowels[k], clo[icol2],cup[icol2]); } printf("<= %g - implied l,u %g,%g\n",rup[i],impliedLower,impliedUpper); printf("can take off ub as implied upper %g < %g\n",impliedUpper,ub); #endif #if TRY_UPPER > 2 doneSomething = true; active[icol] = 1 + 8; nFreed++; #endif #endif } else { #if 0 printf("cant take off lb as implied lower %g - ",impliedLower); printf("row is %g <= ",rlo[i]); for (CoinBigIndex k = krs ; k < kre ; k++) { const double coeff = rowels[k] ; const int icol = hcol[k] ; printf("(%d,%g) ",icol,coeff); } printf("<= %g\n",rup[i]); #endif } } if (onlyNegative >= 0 && negative == 1 && !doneSomething) { const double coeff = rowels[onlyNegative]; const int icol = hcol[onlyNegative]; const double lb = clo[icol]; const double ub = cup[icol]; // Get possible without icol double maxUp = 0.0; double maxDown = 0.0; #if USE_ACTIVE > 2 printf("%d neg coeff %g bounds %g,%g rhs %g,%g - %d positive", icol, coeff, lb, ub, rlo[i], rup[i], positive); printf(", row is %g <= ", rlo[i]); #endif for (CoinBigIndex k = krs; k < kre; k++) { const int icol2 = hcol[k]; #if USE_ACTIVE > 2 printf("(%d,%g - bounds %g,%g) ", icol2, rowels[k], clo[icol2], cup[icol2]); #endif if (icol2 == icol) continue; const double coeff2 = rowels[k]; const double lb2 = clo[icol2]; const double ub2 = cup[icol2]; if (coeff2 > 0.0) { if (ub2 > 1.0e30) maxUp = COIN_DBL_MAX; else maxUp += coeff2 * ub2; if (lb2 < -1.0e30) maxDown = -COIN_DBL_MAX; else maxDown += coeff2 * lb2; } else { if (lb2 < -1.0e30) maxUp = COIN_DBL_MAX; else maxUp += coeff2 * lb2; if (ub2 > 1.0e30) maxDown = -COIN_DBL_MAX; else maxDown += coeff2 * ub2; } } double impliedLower = (rup[i] - maxDown) / coeff; double impliedUpper = (rlo[i] - maxUp) / coeff; #if USE_ACTIVE > 2 printf("<= %g - implied l,u %g,%g\n", rup[i], impliedLower, impliedUpper); #endif int nOne = 0; for (CoinBigIndex k = krs; k < kre; k++) { const double coeff = rowels[k]; const int icol = hcol[k]; if (hincol[icol] == 1 && coeff > 0.0) nOne++; } if (nOne >= hinrow[i] - 1) { for (CoinBigIndex k = krs; k < kre; k++) { const int icol = hcol[k]; const double coeff = rowels[k]; if (hincol[icol] == 1 && coeff > 0.0) { #if USE_ACTIVE > 2 printf("(%d has one entry) ", icol); #endif if (active[icol] == 3 || clo[icol] < -1.0e30) nOne = 0; // no good } } #if USE_ACTIVE > 2 printf("\n"); #endif } if (impliedLower > lb - 1.0e-7 /*&& nOne*/) { #if USE_ACTIVE > 1 printf("second type can take off lb of %g on column %d as implied lower %g - effective upper %g, coeff %g on row %d\n", lb, icol, impliedLower, maxUp, coeff, i); #endif active[icol] = 2 + 8; nFreed++; #if 0 //TRY_UPPER } else if (impliedLower>lb-1.0e-7 ) { printf("second type can't take off lb of %g on column %d as implied lower %g - effective upper %g, coeff %g on row %d\n",lb,icol,impliedLower,maxUp,coeff,i); #endif #if TRY_UPPER > 1 } else if (impliedUpper < ub + 1.0e-7) { #if 0 printf("%d neg coeff %g bounds %g,%g maxDown %g, maxUp %g rhs %g,%g\n", icol,coeff,lb,ub,maxDown,maxUp,rlo[i],rup[i]); printf("row is %g <= ",rlo[i]); for (CoinBigIndex k = krs ; k < kre ; k++) { const int icol2 = hcol[k] ; printf("(%d,%g - bounds %g,%g) ",icol2,rowels[k], clo[icol2],cup[icol2]); } printf("<= %g - implied l,u %g,%g\n",rup[i],impliedLower,impliedUpper); printf("can take off ub as implied upper %g < %g\n",impliedUpper,ub); #endif #if TRY_UPPER > 2 doneSomething = true; active[icol] = 1 + 8; nFreed++; #endif #endif } } else if (!positive && false) { printf("all negative %g <= ", rlo[i]); for (CoinBigIndex k = krs; k < kre; k++) { const double coeff = rowels[k]; const int icol = hcol[k]; printf("(%d,%g) ", icol, coeff); } printf("<= %g\n", rup[i]); } else if (!negative && false) { printf("all positive %g <= ", rlo[i]); for (CoinBigIndex k = krs; k < kre; k++) { const double coeff = rowels[k]; const int icol = hcol[k]; printf("(%d,%g) ", icol, coeff); } printf("<= %g\n", rup[i]); } } //printf("%d had only one bound - %d added\n",nOneBound,nFreed); /* Initialise row dual min/max. The defaults are +/- infty, but if we know that the logical has no upper (lower) bound, it can only be nonbasic at the other bound. Given minimisation, we can conclude: * <= constraint ==> [0,infty] ==> NBLB ==> cbar > 0 ==> y < 0 * >= constraint ==> [-infty,0] ==> NBUB ==> cbar < 0 ==> y > 0 Range constraints are not helpful here, the dual can be either sign. There's no calculation because we assume the objective coefficient c = 0 and the coefficient a = 1.0, hence cbar = -y. */ for (int i = 0; i < nrows; i++) { const bool no_lb = (rup[i] >= ekkinf); const bool no_ub = (rlo[i] <= -ekkinf); ymin[i] = ((no_lb && !no_ub) ? 0.0 : (-PRESOLVE_INF)); ymax[i] = ((no_ub && !no_lb) ? 0.0 : PRESOLVE_INF); } /* We can do a similar calculation with singleton columns where the variable has only one finite bound, but we have to work a bit harder, as the cost coefficient c is not necessarily 0.0 and a is not necessarily 1.0. cbar = c - ya, hence y = c/a at cbar = 0. The question is whether this is an upper or lower bound on y. * x NBLB ==> cbar >= 0 a > 0 ==> increasing y decreases cbar ==> upper bound a < 0 ==> increasing y increases cbar ==> lower bound * x NBUB ==> cbar <= 0 a > 0 ==> increasing y decreases cbar ==> lower bound a < 0 ==> increasing y increases cbar ==> upper bound The condition below (simple test for equality to choose the bound) looks a bit odd, but a bit of boolean algebra should convince you it's correct. We have a bound; the only question is whether it's upper or lower. Skip integer variables; it's far too likely that we'll tighten infinite bounds elsewhere in presolve. NOTE: If bound propagation is applied to continuous variables, the same hazard will apply. -- lh, 110611 -- */ for (int j = 0; j < ncols; j++) { if (integerType[j]) continue; if (hincol[j] != 1) continue; #ifndef USE_ACTIVE const bool no_ub = (cup[j] >= ekkinf); const bool no_lb = (clo[j] <= -ekkinf); #else const bool no_ub = (active[j] & 6) == 0; const bool no_lb = (active[j] & 5) == 0; #endif if (no_ub != no_lb) { const int &i = hrow[mcstrt[j]]; double aij = colels[mcstrt[j]]; PRESOLVEASSERT(fabs(aij) > ZTOLDP); const double yzero = cost[j] / aij; if ((aij > 0.0) == no_ub) { if (ymax[i] > yzero) ymax[i] = yzero; } else { if (ymin[i] < yzero) ymin[i] = yzero; } } } int nfixup_cols = 0; int nfixdown_cols = ncols; // Grab another work array, sized to ncols_ int *fix_cols = prob->usefulColumnInt_; #if PRESOLVE_TIGHTEN_DUALS > 0 double *cbarmin = new double[ncols]; double *cbarmax = new double[ncols]; #endif /* Now we have (admittedly weak) bounds on the dual for each row. We can use these to calculate upper and lower bounds on cbar. Open loops to take multiple passes over all columns. */ int nPass = 0; while (nPass++ < 100) { int tightened = 0; for (int j = 0; j < ncols; j++) { if (hincol[j] <= 0) continue; /* Calculate min cbar and max cbar for the column by calculating the contribution to c-ya using ymin and ymax from above. */ const CoinBigIndex &kcs = mcstrt[j]; const CoinBigIndex kce = kcs + hincol[j]; // Number of infinite rows int nflagu = 0; int nflagl = 0; // Number of ordinary rows int nordu = 0; int nordl = 0; double cbarjmin = cost[j]; double cbarjmax = cbarjmin; for (CoinBigIndex k = kcs; k < kce; k++) { const int &i = hrow[k]; const double &aij = colels[k]; const double mindelta = aij * ymin[i]; const double maxdelta = aij * ymax[i]; if (aij > 0.0) { if (ymin[i] >= -ekkinf2) { cbarjmax -= mindelta; nordu++; } else { nflagu++; } if (ymax[i] <= ekkinf2) { cbarjmin -= maxdelta; nordl++; } else { nflagl++; } } else { if (ymax[i] <= ekkinf2) { cbarjmax -= maxdelta; nordu++; } else { nflagu++; } if (ymin[i] >= -ekkinf2) { cbarjmin -= mindelta; nordl++; } else { nflagl++; } } } /* See if we can tighten bounds on a dual y. See the comments at the head of the file for the linear algebra. At this point, I don't understand the restrictions on propagation. Neither are necessary. The net effect is to severely restrict the circumstances where we'll propagate. Requiring nflagu == 1 excludes the case where all duals have finite bounds (unlikely?). And why cbarjmax < -ztolcbarj? In any event, we're looking for the row that's contributing the infinity. If a > 0, the contribution is due to ymin and we tighten ymax; a < 0, ymax and ymin, respectively. The requirement cbarjmax < (ymax[i]*aij-ztolcbarj) ensures we don't propagate tiny changes. If we make a change, it will affect cbarjmin. Make the adjustment immediately. Continuous variables only. */ if (!integerType[j]) { #ifndef USE_ACTIVE const bool no_cub = (cup[j] >= ekkinf); //const bool no_clb = (clo[j] <= -ekkinf) ; #else const bool no_cub = (active[j] & 6) == 0; //const bool no_clb = (active[j]&5)==0 ; #endif if (no_cub) { if (nflagu == 1 && cbarjmax < -ztolcbarj) { for (CoinBigIndex k = kcs; k < kce; k++) { const int i = hrow[k]; const double aij = colels[k]; if (aij > 0.0 && ymin[i] < -ekkinf2) { if (cbarjmax < (ymax[i] * aij - ztolcbarj)) { const double newValue = cbarjmax / aij; if (ymax[i] > ekkinf2 && newValue <= ekkinf2) { nflagl--; cbarjmin -= aij * newValue; } else if (ymax[i] <= ekkinf2) { cbarjmin -= aij * (newValue - ymax[i]); } #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(infu/inf): u(" << j << ") = " << cup[j] << ": max y(" << i << ") was " << ymax[i] << " now " << newValue << "." << std::endl; #endif ymax[i] = newValue; tightened++; } } else if (aij < 0.0 && ymax[i] > ekkinf2) { if (cbarjmax < (ymin[i] * aij - ztolcbarj)) { const double newValue = cbarjmax / aij; if (ymin[i] < -ekkinf2 && newValue >= -ekkinf2) { nflagl--; cbarjmin -= aij * newValue; } else if (ymin[i] >= -ekkinf2) { cbarjmin -= aij * (newValue - ymin[i]); } #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(infu/inf): u(" << j << ") = " << cup[j] << ": min y(" << i << ") was " << ymin[i] << " now " << newValue << "." << std::endl; #endif ymin[i] = newValue; tightened++; // Huh? asymmetric // cbarjmin = 0.0 ; } } } } else if (nflagl == 0 && nordl == 1 && cbarjmin < -ztolcbarj) { /* This is a column singleton. Why are we doing this? It's not like changes to other y will affect this. */ /* In fact a bug as ymax/min changed - but as I don't wish to totally understand coding will let it abort if not a singleton */ if (kce != kcs + 1) abort(); #if 0 for (CoinBigIndex k = kcs; k < kce; k++) { const int i = hrow[k] ; const double aij = colels[k] ; if (aij > 0.0) { #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(infu/sing): u(" << j << ") = " << cup[j] << ": max y(" << i << ") was " << ymax[i] << " now " << ymax[i]+cbarjmin/aij << "." << std::endl ; #endif ymax[i] += cbarjmin/aij ; cbarjmin = 0.0 ; tightened++ ; } else if (aij < 0.0 ) { #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(infu/sing): u(" << j << ") = " << cup[j] << ": min y(" << i << ") was " << ymin[i] << " now " << ymin[i]+cbarjmin/aij << "." << std::endl ; #endif ymin[i] += cbarjmin/aij ; cbarjmin = 0.0 ; tightened++ ; } } #endif } } // end u = infty #if PROCESS_INFINITE_LB /* Unclear why this section is commented out, except for the possibility that bounds of -infty < x < something are rare and it likely suffered fromm the same errors. Consider the likelihood that this whole block needs to be edited to sway min/max, & similar. */ if (no_clb) { // cbarj can not be positive if (cbarjmin > ztolcbarj && nflagl == 1) { // We can make bound finite one way for (CoinBigIndex k = kcs; k < kce; k++) { const int i = hrow[k]; const double coeff = colels[k]; if (coeff < 0.0 && ymin[i] < -ekkinf2) { // ymax[i] has upper bound if (cbarjmin > ymax[i] * coeff + ztolcbarj) { const double newValue = cbarjmin / coeff; // re-compute hi if (ymax[i] > ekkinf2 && newValue <= ekkinf2) { nflagu--; cbarjmax -= coeff * newValue; } else if (ymax[i] <= ekkinf2) { cbarjmax -= coeff * (newValue - ymax[i]); } ymax[i] = newValue; tightened++; #if PRESOLVE_DEBUG > 1 printf("Col %d, row %d max pi now %g\n", j, i, ymax[i]); #endif } } else if (coeff > 0.0 && ymax[i] > ekkinf2) { // ymin[i] has lower bound if (cbarjmin > ymin[i] * coeff + ztolcbarj) { const double newValue = cbarjmin / coeff; // re-compute lo if (ymin[i] < -ekkinf2 && newValue >= -ekkinf2) { nflagu--; cbarjmax -= coeff * newValue; } else if (ymin[i] >= -ekkinf2) { cbarjmax -= coeff * (newValue - ymin[i]); } ymin[i] = newValue; tightened++; #if PRESOLVE_DEBUG > 1 printf("Col %d, row %d min pi now %g\n", j, i, ymin[i]); #endif } } } } else if (nflagu == 0 && nordu == 1 && cbarjmax > ztolcbarj) { // We may be able to tighten for (CoinBigIndex k = kcs; k < kce; k++) { const int i = hrow[k]; const double coeff = colels[k]; if (coeff < 0.0) { ymax[i] += cbarjmax / coeff; cbarjmax = 0.0; tightened++; #if PRESOLVE_DEBUG > 1 printf("Col %d, row %d max pi now %g\n", j, i, ymax[i]); #endif } else if (coeff > 0.0) { ymin[i] += cbarjmax / coeff; cbarjmax = 0.0; tightened++; #if PRESOLVE_DEBUG > 1 printf("Col %d, row %d min pi now %g\n", j, i, ymin[i]); #endif } } } } // end l < -infty #endif // PROCESS_INFINITE_LB } /* That's the end of propagation of bounds for dual variables. */ #if PRESOLVE_TIGHTEN_DUALS > 0 cbarmin[j] = (nflagl ? (-PRESOLVE_INF) : cbarjmin); cbarmax[j] = (nflagu ? PRESOLVE_INF : cbarjmax); #endif /* If cbarmin > 0 (strict inequality) then x NBLB at optimality. If l is -infinity, notify the user and set the status to unbounded. */ if (cbarjmin > ztolcbarj && nflagl == 0 && !prob->colProhibited2(j)) { if (clo[j] <= -ekkinf) { CoinMessageHandler *msghdlr = prob->messageHandler(); msghdlr->message(COIN_PRESOLVE_COLUMNBOUNDB, prob->messages()) << j << CoinMessageEol; prob->status_ |= 2; break; } else { fix_cols[--nfixdown_cols] = j; #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(fix l): fix x(" << j << ")"; if (csol) std::cout << " = " << csol[j]; std::cout << " at l(" << j << ") = " << clo[j] << "; cbar(" << j << ") > " << cbarjmin << "." << std::endl; #endif if (csol) { #if REMOVE_DUAL_ACTION_REPAIR_SOLN > 0 /* Original comment: User may have given us feasible solution - move if simple Except it's not simple. The net result is that we end up with an excess of basic variables. Mark x NBLB and let the client recalculate the solution after establishing the basis. */ if (csol[j] - clo[j] > 1.0e-7 && hincol[j] == 1) { double value_j = colels[mcstrt[j]]; double distance_j = csol[j] - clo[j]; int row = hrow[mcstrt[j]]; // See if another column can take value for (CoinBigIndex kk = mrstrt[row]; kk < mrstrt[row] + hinrow[row]; kk++) { const int k = hcol[kk]; if (colstat[k] == CoinPrePostsolveMatrix::superBasic) continue; if (hincol[k] == 1 && k != j) { const double value_k = rowels[kk]; double movement; if (value_k * value_j > 0.0) { // k needs to increase double distance_k = cup[k] - csol[k]; movement = CoinMin((distance_j * value_j) / value_k, distance_k); } else { // k needs to decrease double distance_k = clo[k] - csol[k]; movement = CoinMax((distance_j * value_j) / value_k, distance_k); } if (relEq(movement, 0)) continue; csol[k] += movement; if (relEq(csol[k], clo[k])) { colstat[k] = CoinPrePostsolveMatrix::atLowerBound; } else if (relEq(csol[k], cup[k])) { colstat[k] = CoinPrePostsolveMatrix::atUpperBound; } else if (colstat[k] != CoinPrePostsolveMatrix::isFree) { colstat[k] = CoinPrePostsolveMatrix::basic; } printf("NDUAL: x<%d> moved %g to %g; ", k, movement, csol[k]); printf("lb = %g, ub = %g, status now %s.\n", clo[k], cup[k], columnStatusString(k)); distance_j -= (movement * value_k) / value_j; csol[j] -= (movement * value_k) / value_j; if (distance_j < 1.0e-7) break; } } } #endif // repair solution. csol[j] = clo[j]; colstat[j] = CoinPrePostsolveMatrix::atLowerBound; } } } else if (cbarjmax < -ztolcbarj && nflagu == 0 && !prob->colProhibited2(j)) { /* If cbarmax < 0 (strict inequality) then x NBUB at optimality. If u is infinity, notify the user and set the status to unbounded. */ if (cup[j] >= ekkinf) { CoinMessageHandler *msghdlr = prob->messageHandler(); msghdlr->message(COIN_PRESOLVE_COLUMNBOUNDA, prob->messages()) << j << CoinMessageEol; prob->status_ |= 2; break; } else { fix_cols[nfixup_cols++] = j; #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(fix u): fix x(" << j << ")"; if (csol) std::cout << " = " << csol[j]; std::cout << " at u(" << j << ") = " << cup[j] << "; cbar(" << j << ") < " << cbarjmax << "." << std::endl; #endif if (csol) { #if 0 // See comments above for 'fix at lb'. if (cup[j]-csol[j] > 1.0e-7 && hincol[j] == 1) { double value_j = colels[mcstrt[j]] ; double distance_j = csol[j]-cup[j] ; int row = hrow[mcstrt[j]] ; // See if another column can take value for (CoinBigIndex kk = mrstrt[row] ; kk < mrstrt[row]+hinrow[row] ; kk++) { const int k = hcol[kk] ; if (colstat[k] == CoinPrePostsolveMatrix::superBasic) continue ; if (hincol[k] == 1 && k != j) { const double value_k = rowels[kk] ; double movement ; if (value_k*value_j<0.0) { // k needs to increase double distance_k = cup[k]-csol[k] ; movement = CoinMin((distance_j*value_j)/value_k,distance_k) ; } else { // k needs to decrease double distance_k = clo[k]-csol[k] ; movement = CoinMax((distance_j*value_j)/value_k,distance_k) ; } if (relEq(movement,0)) continue ; csol[k] += movement ; if (relEq(csol[k],clo[k])) { colstat[k] = CoinPrePostsolveMatrix::atLowerBound ; } else if (relEq(csol[k],cup[k])) { colstat[k] = CoinPrePostsolveMatrix::atUpperBound ; } else if (colstat[k] != CoinPrePostsolveMatrix::isFree) { colstat[k] = CoinPrePostsolveMatrix::basic ; } printf("NDUAL: x<%d> moved %g to %g; ", k,movement,csol[k]) ; printf("lb = %g, ub = %g, status now %s.\n", clo[k],cup[k],columnStatusString(k)) ; distance_j -= (movement*value_k)/value_j ; csol[j] -= (movement*value_k)/value_j ; if (distance_j>-1.0e-7) break ; } } } #endif csol[j] = cup[j]; colstat[j] = CoinPrePostsolveMatrix::atUpperBound; } } } // end cbar < 0 } /* That's the end of this walk through the columns. */ // I don't know why I stopped doing this. #if PRESOLVE_TIGHTEN_DUALS > 0 const double *rowels = prob->rowels_; const int *hcol = prob->hcol_; const CoinBigIndex *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; // tighten row dual bounds, as described on p. 229 for (int i = 0; i < nrows; i++) { const bool no_ub = (rup[i] >= ekkinf); const bool no_lb = (rlo[i] <= -ekkinf); if ((no_ub ^ no_lb) == true) { const CoinBigIndex krs = mrstrt[i]; const CoinBigIndex kre = krs + hinrow[i]; const double rmax = ymax[i]; const double rmin = ymin[i]; // all row columns are non-empty for (CoinBigIndex k = krs; k < kre; k++) { const double coeff = rowels[k]; const int icol = hcol[k]; const double cbarmax0 = cbarmax[icol]; const double cbarmin0 = cbarmin[icol]; if (no_ub) { // cbarj must not be negative if (coeff > ZTOLDP2 && cbarjmax0 < PRESOLVE_INF && cup[icol] >= ekkinf) { const double bnd = cbarjmax0 / coeff; if (rmax > bnd) { #if PRESOLVE_DEBUG > 1 printf("MAX TIGHT[%d,%d]: %g --> %g\n", i, hrow[k], ymax[i], bnd); #endif ymax[i] = rmax = bnd; tightened++; ; } } else if (coeff < -ZTOLDP2 && cbarjmax0 < PRESOLVE_INF && cup[icol] >= ekkinf) { const double bnd = cbarjmax0 / coeff; if (rmin < bnd) { #if PRESOLVE_DEBUG > 1 printf("MIN TIGHT[%d,%d]: %g --> %g\n", i, hrow[k], ymin[i], bnd); #endif ymin[i] = rmin = bnd; tightened++; ; } } } else { // no_lb // cbarj must not be positive if (coeff > ZTOLDP2 && cbarmin0 > -PRESOLVE_INF && clo[icol] <= -ekkinf) { const double bnd = cbarmin0 / coeff; if (rmin < bnd) { #if PRESOLVE_DEBUG > 1 printf("MIN1 TIGHT[%d,%d]: %g --> %g\n", i, hrow[k], ymin[i], bnd); #endif ymin[i] = rmin = bnd; tightened++; ; } } else if (coeff < -ZTOLDP2 && cbarmin0 > -PRESOLVE_INF && clo[icol] <= -ekkinf) { const double bnd = cbarmin0 / coeff; if (rmax > bnd) { #if PRESOLVE_DEBUG > 1 printf("MAX TIGHT1[%d,%d]: %g --> %g\n", i, hrow[k], ymax[i], bnd); #endif ymax[i] = rmax = bnd; tightened++; ; } } } } } } #endif // PRESOLVE_TIGHTEN_DUALS /* Is it productive to continue with another pass? Essentially, we need lots of tightening but no fixing. If we fixed any variables, break and process them. */ #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL: pass " << nPass << ": fixed " << (ncols - nfixdown_cols) << " down, " << nfixup_cols << " up, tightened " << tightened << " duals." << std::endl; #endif if (tightened < 100 || nfixdown_cols < ncols || nfixup_cols) break; } assert(nfixup_cols <= nfixdown_cols); /* Process columns fixed at upper bound. */ if (nfixup_cols) { #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(upper):"; for (int k = 0; k < nfixup_cols; k++) std::cout << " " << fix_cols[k]; std::cout << "." << std::endl; #endif next = make_fixed_action::presolve(prob, fix_cols, nfixup_cols, false, next); } /* Process columns fixed at lower bound. */ if (nfixdown_cols < ncols) { int *fixdown_cols = fix_cols + nfixdown_cols; nfixdown_cols = ncols - nfixdown_cols; #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(lower):"; for (int k = 0; k < nfixdown_cols; k++) std::cout << " " << fixdown_cols[k]; std::cout << "." << std::endl; #endif next = make_fixed_action::presolve(prob, fixdown_cols, nfixdown_cols, true, next); } /* Now look for variables that, when moved in the favourable direction according to reduced cost, will naturally tighten an inequality to an equality. We can convert that inequality to an equality. See the comments at the head of the routine. Start with logicals. Open a loop and look for suitable rows. At the end of this loop, rows marked with +/-1 will be forced to equality by their logical. Rows marked with +/-2 are inequalities that (perhaps) can be forced to equality using architecturals. Rows marked with 0 are not suitable (range or nonbinding). Note that usefulRowInt_ is 3*nrows_; we'll use the second partition below. */ int *canFix = prob->usefulRowInt_; for (int i = 0; i < nrows; i++) { const bool no_rlb = (rlo[i] <= -ekkinf); const bool no_rub = (rup[i] >= ekkinf); canFix[i] = 0; if (no_rub && !no_rlb) { if (ymin[i] > 0.0) canFix[i] = -1; else canFix[i] = -2; } else if (no_rlb && !no_rub) { if (ymax[i] < 0.0) canFix[i] = 1; else canFix[i] = 2; } #if PRESOLVE_DEBUG > 1 if (abs(canFix[i]) == 1) { std::cout << "NDUAL(eq): candidate row (" << i << ") (" << rlo[i] << "," << rup[i] << "), logical must be " << ((canFix[i] == -1) ? "NBUB" : "NBLB") << "." << std::endl; } #endif } /* Can we do a similar trick with architectural variables? Here, we're looking for x such that (1) Exactly one of l or u is infinite. (2) Moving x towards the infinite bound can tighten exactly one constraint i to equality. If x is entangled with other constraints, moving x towards the infinite bound will loosen those constraints. (3) Moving x towards the infinite bound is a good idea according to the cost c (note we don't have to consider reduced cost here). If we can find a suitable x, constraint i can become an equality. This is yet another instance of bound propagation, but we're looking for a very specific pattern: A variable that can be increased arbitrarily in all rows it's entangled with, except for one, which bounds it. And we're going to push the variable so as to make that row an equality. But note what we're *not* doing: No actual comparison of finite bound values to the amount necessary to force an equality. So no worries about accuracy, the bane of bound propagation. Open a loop to scan columns. bindingUp and bindingDown indicate the result of the analysis; -1 says `possible', -2 is ruled out. Test first for condition (1). Column singletons are presumably handled elsewhere. Integer variables need not apply. If both bounds are finite, no need to look further. */ for (int j = 0; j < ncols; j++) { if (hincol[j] <= 1) continue; if (integerType[j]) continue; int bindingUp = -1; int bindingDown = -1; if (cup[j] < ekkinf) bindingUp = -2; if (clo[j] > -ekkinf) bindingDown = -2; if (bindingUp == -2 && bindingDown == -2) continue; /* Open a loop to walk the column and check for condition (2). The test for |canFix[i]| != 2 is a non-interference check. We don't want to mess with constraints where we've already decided to use the logical to force equality. Nor do we want to deal with range or nonbinding constraints. */ const CoinBigIndex &kcs = mcstrt[j]; const CoinBigIndex kce = kcs + hincol[j]; for (CoinBigIndex k = kcs; k < kce; k++) { const int &i = hrow[k]; if (abs(canFix[i]) != 2) { bindingUp = -2; bindingDown = -2; break; } double aij = colels[k]; /* For a > 0 in a <= constraint (canFix = 2), the up direction is binding. For a >= constraint, it'll be the down direction. If the relevant binding code is still -1, set it to the index of the row. Similarly for a < 0. If this is the second or subsequent binding constraint in that direction, set binding[Up,Down] to -2 (we don't want to get into the business of calculating which constraint is actually binding). */ if (aij > 0.0) { if (canFix[i] == 2) { if (bindingUp == -1) bindingUp = i; else bindingUp = -2; } else { if (bindingDown == -1) bindingDown = i; else bindingDown = -2; } } else { if (canFix[i] == 2) { if (bindingDown == -1) bindingDown = i; else bindingDown = -2; } else { if (bindingUp == -1) bindingUp = i; else bindingUp = -2; } } } if (bindingUp == -2 && bindingDown == -2) continue; /* If bindingUp > -2, then either no constraint provided a bound (-1) or there's a single constraint (0 <= i < m) that bounds x. If we have just one binding constraint, check that the reduced cost is favourable (c <= 0 for x NBUB at optimum for minimisation). If so, declare that we will force the row to equality (canFix[i] = +/-1). Note that we don't adjust the primal solution value for x. If no constraint provided a bound, we might be headed for unboundedness, but leave that for some other code to determine. */ double cj = cost[j]; if (bindingUp > -2 && cj <= 0.0) { if (bindingUp >= 0) { canFix[bindingUp] /= 2; #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(eq): candidate row (" << bindingUp << ") (" << rlo[bindingUp] << "," << rup[bindingUp] << "), " << " increasing x(" << j << "), cbar = " << cj << "." << std::endl; } else { std::cout << "NDUAL(eq): no binding upper bound for x(" << j << "), cbar = " << cj << "." << std::endl; #endif } } else if (bindingDown > -2 && cj >= 0.0) { if (bindingDown >= 0) { canFix[bindingDown] /= 2; #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(eq): candidate row (" << bindingDown << ") (" << rlo[bindingDown] << "," << rup[bindingDown] << "), " << " decreasing x(" << j << "), cbar = " << cj << "." << std::endl; } else { std::cout << "NDUAL(eq): no binding lower bound for x(" << j << "), cbar = " << cj << "." << std::endl; #endif } } } /* We have candidate rows. We've avoided scanning full rows until now, but there's one remaining hazard: if the row contains unfixed integer variables then we don't want to just pin the row to a fixed rhs; that might prevent us from achieving integrality. Scan canFix, count and record suitable rows (use the second partition of usefulRowInt_). */ // get min max stuff - we can re-use ymin/ymax int *infCount = prob->usefulRowInt_ + 2 * nrows; { // copied from CglProbing int i, j; CoinBigIndex k, krs, kre; int iflagu, iflagl; double dmaxup, dmaxdown; for (i = 0; i < nrows; ++i) { if (rlo[i] == rup[i]) { infCount[i] = 10 | (10 << 16); } else if (rlo[i] > -1.0e20 || rup[i] < 1.0e20) { iflagu = 0; iflagl = 0; dmaxup = 0.0; dmaxdown = 0.0; krs = mrstrt[i]; kre = mrstrt[i] + hinrow[i]; /* ------------------------------------------------------------*/ /* Compute L(i) and U(i) */ /* ------------------------------------------------------------*/ for (k = krs; k < kre; ++k) { double value = rowels[k]; j = hcol[k]; if (value > 0.0) { if (cup[j] < 1.0e12) dmaxup += cup[j] * value; else ++iflagu; if (clo[j] > -1.0e12) dmaxdown += clo[j] * value; else ++iflagl; } else if (value < 0.0) { if (cup[j] < 1.0e12) dmaxdown += cup[j] * value; else ++iflagl; if (clo[j] > -1.0e12) dmaxup += clo[j] * value; else ++iflagu; } } iflagl = CoinMin(iflagl, 2); iflagu = CoinMin(iflagu, 2); infCount[i] = iflagl | (iflagu << 16); ymax[i] = dmaxup; ymin[i] = dmaxdown; } else { infCount[i] = 10 | (10 << 16); } } } for (int j = 0; j < ncols; j++) { if (hincol[j] == 1 && cost[j] > -1.0e10) { // can we make equality row double coeff = colels[mcstrt[j]]; int irow = hrow[mcstrt[j]]; int iflagl = infCount[irow] & 63; int iflagu = infCount[irow] >> 16; if (iflagu > 1 && iflagl > 1) continue; double dmaxdown = ymin[irow]; double dmaxup = ymax[irow]; #if USE_ACTIVE > 1 printf("singleton col %d has %g on row %d - rhs %g,%g infs %d,%d maxes %g,%g\n", j, coeff, irow, rlo[irow], rup[irow], iflagl, iflagu, dmaxdown, dmaxup); #endif if (coeff > 0.0) { if (clo[j] > -1.0e12) { dmaxdown -= coeff * clo[j]; if (iflagl) dmaxdown = -1.0e60; } else if (iflagl > 1) { dmaxdown = -1.0e60; } if (cup[j] < 1.0e12) { dmaxup -= coeff * cup[j]; if (iflagu) dmaxup = 1.0e60; } else if (iflagu > 1) { dmaxup = 1.0e60; } } else { } double rhs; if (cost[j] > 0.0) { // we want as small as possible if (coeff > 0) { if (rlo[irow] > -1.0e12) rhs = rlo[irow] / coeff; else rhs = -COIN_DBL_MAX; } else { if (rup[irow] < 1.0e12) rhs = -rup[irow] / coeff; else rhs = COIN_DBL_MAX; } } else { // we want as large as possible if (coeff > 0) { if (rup[irow] < 1.0e12) { rhs = rup[irow]; if (cup[j] * coeff + dmaxdown > rhs - 1.0e-7 && clo[j] * coeff + dmaxup < rhs + 1.0e-7) { #if 0 //USE_ACTIVE<2 printf("singleton col %d has %g on row %d - rhs %g,%g infs %d,%d maxes %g,%g\n", j,coeff,irow,rlo[irow],rup[irow], iflagl,iflagu, dmaxdown,dmaxup); #endif //printf("making rup equality\n"); canFix[irow] = 1; infCount[irow] = 10 | (10 << 16); } rhs /= coeff; } else { if (cup[j] * coeff + dmaxdown > 1.0e30) { //printf("unbounded?\n"); } } } else { if (rlo[irow] > -1.0e12) { rhs = rlo[irow]; if (cup[j] * coeff + dmaxdown < rhs + 1.0e-7 && clo[j] * coeff + dmaxup > rhs - 1.0e-7) { #if USE_ACTIVE > 1 printf("singleton col %d has %g on row %d - rhs %g,%g infs %d,%d maxes %g,%g\n", j, coeff, irow, rlo[irow], rup[irow], iflagl, iflagu, dmaxdown, dmaxup); printf("making rlo equality\n"); #endif canFix[irow] = -11; infCount[irow] = 10 | (10 << 16); } rhs /= coeff; } else { if (cup[j] * coeff + dmaxdown > 1.0e30) { //printf("unbounded?\n"); } } } } #if USE_ACTIVE > 1 printf("adjusted maxes %g,%g - rhs %g\n", dmaxdown, dmaxup, rhs); #endif } } #if 1 // PRESOLVE_DEBUG > 0 int makeEqCandCnt = 0; for (int i = 0; i < nrows; i++) { if (abs(canFix[i]) == 1) makeEqCandCnt++; } #endif int makeEqCnt = nrows; for (int i = 0; i < nrows; i++) { if (abs(canFix[i]) == 1 && hinrow[i] > 1) { const CoinBigIndex krs = mrstrt[i]; const CoinBigIndex kre = krs + hinrow[i]; int nBinary = 0; int nOther = 0; int nSameCoeff = 0; double rhs = canFix[i] == 1 ? rup[i] : rlo[i]; double firstCoeff = 0.0; int j = -1; for (CoinBigIndex k = krs; k < kre; k++) { j = hcol[k]; double coeff = rowels[k]; if (cup[j] > clo[j]) { if (!firstCoeff) { firstCoeff = coeff; nSameCoeff = 1; } else { if (coeff == firstCoeff) nSameCoeff++; else if (coeff != -firstCoeff) nOther = 1; } if (prob->colProhibited2(j)) { nBinary = 1; nOther = 1; break; } else if (integerType[j]) { if (clo[j] == 0.0 && cup[j] == 1.0) { nBinary++; } else { nBinary = 1; nOther = 1; break; } } else { nOther++; } } else { rhs -= coeff * clo[j]; } } bool canFixThis = true; if (nBinary) { if (nOther) { canFixThis = false; #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(eq): cannot convert row " << i << " to equality; " << "unfixed integer variable x(" << j << ")." << std::endl; #endif } else { // may be able to if all easy integer if (!rhs) { // for now just two of opposite sign if (nSameCoeff == 1 && nBinary == 2) { // ok #if PRESOLVE_DEBUG > 1 printf("int eq row is %g <= ", rlo[i]); for (CoinBigIndex k = krs; k < kre; k++) { const double coeff = rowels[k]; const int icol = hcol[k]; printf("(%d,%g - bounds %g,%g) ", icol, coeff, clo[icol], cup[icol]); } printf("<= %g\n", rup[i]); #endif } else { canFixThis = false; #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(eq2): cannot convert row " << i << " to equality; " << "unfixed integer variable x(" << j << ")." << std::endl; #endif } } else if (rhs == 1.0 && canFix[i] == 1 && nSameCoeff == nBinary && firstCoeff == 1.0) { // ok #if PRESOLVE_DEBUG > 1 printf("int2 eq row is %g <= ", rlo[i]); for (CoinBigIndex k = krs; k < kre; k++) { const double coeff = rowels[k]; const int icol = hcol[k]; printf("(%d,%g - bounds %g,%g) ", icol, coeff, clo[icol], cup[icol]); } printf("<= %g\n", rup[i]); #endif } else { canFixThis = false; #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(eq3): cannot convert row " << i << " to equality; " << "unfixed integer variable x(" << j << ")." << std::endl; #endif } } } if (canFixThis) canFix[makeEqCnt++] = i; } } makeEqCnt -= nrows; #if PRESOLVE_DEBUG > 0 if ((makeEqCandCnt - makeEqCnt) > 0) { std::cout << "NDUAL(eq): rejected " << (makeEqCandCnt - makeEqCnt) << " rows due to unfixed integer variables." << std::endl; } #endif /* If we've identified inequalities to convert, do the conversion, record the information needed to restore bounds in postsolve, and finally create the postsolve object. */ if (makeEqCnt > 0) { action *bndRecords = new action[makeEqCnt]; for (int k = 0; k < makeEqCnt; k++) { const int i = canFix[k + nrows]; #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(eq): forcing row " << i << " to equality;"; if (canFix[i] == -1) std::cout << " dropping b = " << rup[i] << " to " << rlo[i]; else std::cout << " raising blow = " << rlo[i] << " to " << rup[i]; std::cout << "." << std::endl; #endif action &bndRec = bndRecords[(k)]; bndRec.rlo_ = rlo[i]; bndRec.rup_ = rup[i]; bndRec.ndx_ = i; if (canFix[i] == 1) { rlo[i] = rup[i]; prob->addRow(i); } else if (canFix[i] == -1) { rup[i] = rlo[i]; prob->addRow(i); } } next = new remove_dual_action(makeEqCnt, bndRecords, next); } #if PRESOLVE_TIGHTEN_DUALS > 0 delete[] cbarmin; delete[] cbarmax; #endif #undef PRESOLVE_DEBUG #if COIN_PRESOLVE_TUNING > 0 double thisTime = 0.0; if (prob->tuning_) thisTime = CoinCpuTime(); #endif #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob, 2, 1, 1); presolve_check_nbasic(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows() - startEmptyRows; int droppedColumns = prob->countEmptyCols() - startEmptyColumns; std::cout << "Leaving remove_dual_action::presolve, dropped " << droppedRows << " rows, " << droppedColumns << " columns, forced " << makeEqCnt << " equalities"; #if COIN_PRESOLVE_TUNING > 0 if (prob->tuning_) std::cout << " in " << (thisTime - prob->startTime_) << "s"; #endif std::cout << "." << std::endl; #endif return (next); } /* Postsolve: replace the original row bounds. The catch here is that each constraint was an equality in the presolved problem, with a logical s that had l = u = 0. We're about to convert the equality back to an inequality. One row bound will go to infinity, as will one of the bounds of the logical. We may need to patch the basis. The logical for a <= constraint cannot be NBUB, and the logical for a >= constraint cannot be NBLB. */ void remove_dual_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const &bndRecords = actions_; const int &numRecs = nactions_; double *&rlo = prob->rlo_; double *&rup = prob->rup_; unsigned char *&rowstat = prob->rowstat_; #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering remove_dual_action::postsolve, " << numRecs << " bounds to restore." << std::endl; #endif presolve_check_threads(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #endif /* For each record, restore the row bounds. If we have status arrays, check the status of the logical and adjust if necessary. In spite of the fact that the status array is an unsigned char array, we still need to use getRowStatus to make sure we're only looking at the bottom three bits. Why is this an issue? Because the status array isn't necessarily cleared to zeros, and setRowStatus carefully changes only the bottom three bits! */ for (int k = 0; k < numRecs; k++) { const action &bndRec = bndRecords[k]; const int &i = bndRec.ndx_; const double &rloi = bndRec.rlo_; const double &rupi = bndRec.rup_; #if PRESOLVE_DEBUG > 1 std::cout << "NDUAL(eq): row(" << i << ")"; if (rlo[i] != rloi) std::cout << " LB " << rlo[i] << " -> " << rloi; if (rup[i] != rupi) std::cout << " UB " << rup[i] << " -> " << rupi; #endif rlo[i] = rloi; rup[i] = rupi; if (rowstat) { unsigned char stati = prob->getRowStatus(i); if (stati == CoinPresolveMatrix::atUpperBound) { if (rloi <= -PRESOLVE_INF) { rowstat[i] = CoinPresolveMatrix::atLowerBound; #if PRESOLVE_DEBUG > 1 std::cout << ", status forced to " << statusName(static_cast< CoinPresolveMatrix::Status >(rowstat[i])); #endif } } else if (stati == CoinPresolveMatrix::atLowerBound) { if (rupi >= PRESOLVE_INF) { rowstat[i] = CoinPresolveMatrix::atUpperBound; #if PRESOLVE_DEBUG > 1 std::cout << ", status forced to " << statusName(static_cast< CoinPresolveMatrix::Status >(rowstat[i])); #endif } } #if PRESOLVE_DEBUG > 2 else if (stati == CoinPresolveMatrix::basic) { std::cout << ", status is basic."; } else if (stati == CoinPresolveMatrix::isFree) { std::cout << ", status is free?!"; } else { unsigned int tmp = static_cast< unsigned int >(stati); std::cout << ", status is invalid (" << tmp << ")!"; } #endif } #if PRESOLVE_DEBUG > 1 std::cout << "." << std::endl; #endif } #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_threads(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving remove_dual_action::postsolve." << std::endl; #endif #endif return; } /* Destructor */ remove_dual_action::~remove_dual_action() { deleteAction(actions_, action *); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinSort.hpp0000644000175200017520000005000513414454441016030 0ustar coincoin/* $Id: CoinSort.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinSort_H #define CoinSort_H #include #include #include #include "CoinDistance.hpp" // Uncomment the next three lines to get thorough initialisation of memory. // #ifndef ZEROFAULT // #define ZEROFAULT // #endif #ifdef COIN_FAST_CODE #ifndef COIN_USE_EKK_SORT #define COIN_USE_EKK_SORT #endif #endif //############################################################################# /** An ordered pair. It's the same as std::pair, just this way it'll have the same look as the triple sorting. */ template < class S, class T > struct CoinPair { public: /// First member of pair S first; /// Second member of pair T second; public: /// Construct from ordered pair CoinPair(const S &s, const T &t) : first(s) , second(t) { } }; //############################################################################# /**@name Comparisons on first element of two ordered pairs */ //@{ /** Function operator. Returns true if t1.first < t2.first (i.e., increasing). */ template < class S, class T > class CoinFirstLess_2 { public: /// Compare function inline bool operator()(const CoinPair< S, T > &t1, const CoinPair< S, T > &t2) const { return t1.first < t2.first; } }; //----------------------------------------------------------------------------- /** Function operator. Returns true if t1.first > t2.first (i.e, decreasing). */ template < class S, class T > class CoinFirstGreater_2 { public: /// Compare function inline bool operator()(const CoinPair< S, T > &t1, const CoinPair< S, T > &t2) const { return t1.first > t2.first; } }; //----------------------------------------------------------------------------- /** Function operator. Returns true if abs(t1.first) < abs(t2.first) (i.e., increasing). */ template < class S, class T > class CoinFirstAbsLess_2 { public: /// Compare function inline bool operator()(const CoinPair< S, T > &t1, const CoinPair< S, T > &t2) const { const T t1Abs = t1.first < static_cast< T >(0) ? -t1.first : t1.first; const T t2Abs = t2.first < static_cast< T >(0) ? -t2.first : t2.first; return t1Abs < t2Abs; } }; //----------------------------------------------------------------------------- /** Function operator. Returns true if abs(t1.first) > abs(t2.first) (i.e., decreasing). */ template < class S, class T > class CoinFirstAbsGreater_2 { public: /// Compare function inline bool operator()(CoinPair< S, T > t1, CoinPair< S, T > t2) const { const T t1Abs = t1.first < static_cast< T >(0) ? -t1.first : t1.first; const T t2Abs = t2.first < static_cast< T >(0) ? -t2.first : t2.first; return t1Abs > t2Abs; } }; //----------------------------------------------------------------------------- /** Function operator. Compare based on the entries of an external vector, i.e., returns true if vec[t1.first < vec[t2.first] (i.e., increasing wrt. vec). Note that to use this comparison operator .first must be a data type automatically convertible to int. */ template < class S, class T, class V > class CoinExternalVectorFirstLess_2 { private: CoinExternalVectorFirstLess_2(); private: const V *vec_; public: inline bool operator()(const CoinPair< S, T > &t1, const CoinPair< S, T > &t2) const { return vec_[t1.first] < vec_[t2.first]; } CoinExternalVectorFirstLess_2(const V *v) : vec_(v) { } }; //----------------------------------------------------------------------------- /** Function operator. Compare based on the entries of an external vector, i.e., returns true if vec[t1.first > vec[t2.first] (i.e., decreasing wrt. vec). Note that to use this comparison operator .first must be a data type automatically convertible to int. */ template < class S, class T, class V > class CoinExternalVectorFirstGreater_2 { private: CoinExternalVectorFirstGreater_2(); private: const V *vec_; public: inline bool operator()(const CoinPair< S, T > &t1, const CoinPair< S, T > &t2) const { return vec_[t1.first] > vec_[t2.first]; } CoinExternalVectorFirstGreater_2(const V *v) : vec_(v) { } }; //@} //############################################################################# /** Sort a pair of containers.
Iter_S - iterator for first container
Iter_T - iterator for 2nd container
CoinCompare2 - class comparing CoinPairs
*/ #ifdef COIN_SORT_ARBITRARY_CONTAINERS template < class Iter_S, class Iter_T, class CoinCompare2 > void CoinSort_2(Iter_S sfirst, Iter_S slast, Iter_T tfirst, const CoinCompare2 &pc) { typedef typename std::iterator_traits< Iter_S >::value_type S; typedef typename std::iterator_traits< Iter_T >::value_type T; const size_t len = coinDistance(sfirst, slast); if (len <= 1) return; typedef CoinPair< S, T > ST_pair; ST_pair *x = static_cast< ST_pair * >(::operator new(len * sizeof(ST_pair))); #ifdef ZEROFAULT memset(x, 0, (len * sizeof(ST_pair))); #endif int i = 0; Iter_S scurrent = sfirst; Iter_T tcurrent = tfirst; while (scurrent != slast) { new (x + i++) ST_pair(*scurrent++, *tcurrent++); } std::sort(x.begin(), x.end(), pc); scurrent = sfirst; tcurrent = tfirst; for (i = 0; i < len; ++i) { *scurrent++ = x[i].first; *tcurrent++ = x[i].second; } ::operator delete(x); } //----------------------------------------------------------------------------- template < class Iter_S, class Iter_T > void CoinSort_2(Iter_S sfirst, Iter_S slast, Iter_T tfirst) { typedef typename std::iterator_traits< Iter_S >::value_type S; typedef typename std::iterator_traits< Iter_T >::value_type T; CoinSort_2(sfirst, slast, tfirst, CoinFirstLess_2< S, T >()); } #else //======================================================================= template < class S, class T, class CoinCompare2 > void CoinSort_2(S *sfirst, S *slast, T *tfirst, const CoinCompare2 &pc) { const size_t len = coinDistance(sfirst, slast); if (len <= 1) return; typedef CoinPair< S, T > ST_pair; ST_pair *x = static_cast< ST_pair * >(::operator new(len * sizeof(ST_pair))); #ifdef ZEROFAULT // Can show RUI errors on some systems due to copy of ST_pair with gaps. // E.g., has 4 byte alignment gap on Solaris/SUNWspro. memset(x, 0, (len * sizeof(ST_pair))); #endif size_t i = 0; S *scurrent = sfirst; T *tcurrent = tfirst; while (scurrent != slast) { new (x + i++) ST_pair(*scurrent++, *tcurrent++); } std::sort(x, x + len, pc); scurrent = sfirst; tcurrent = tfirst; for (i = 0; i < len; ++i) { *scurrent++ = x[i].first; *tcurrent++ = x[i].second; } ::operator delete(x); } template < class S, class T > void // This Always uses std::sort CoinSort_2Std(S *sfirst, S *slast, T *tfirst) { CoinSort_2(sfirst, slast, tfirst, CoinFirstLess_2< S, T >()); } #ifndef COIN_USE_EKK_SORT //----------------------------------------------------------------------------- template < class S, class T > void CoinSort_2(S *sfirst, S *slast, T *tfirst) { CoinSort_2(sfirst, slast, tfirst, CoinFirstLess_2< S, T >()); } #else //----------------------------------------------------------------------------- extern int boundary_sort; extern int boundary_sort2; extern int boundary_sort3; /// Sort without new and delete template < class S, class T > void CoinSort_2(S *key, S *lastKey, T *array2) { const size_t number = coinDistance(key, lastKey); if (number <= 1) { return; } else if (number > 10000) { CoinSort_2Std(key, lastKey, array2); return; } #if 0 if (number==boundary_sort3) { printf("before sort %d entries\n",number); for (int j=0;j(number); int sp; S *v = key; S *m, t; S *ls[32], *rs[32]; S *l, *r, c; T it; int j; /*check already sorted */ S last = key[0]; for (j = 1; j < n; j++) { if (key[j] >= last) { last = key[j]; } else { break; } /* endif */ } /* endfor */ if (j == n) { return; } /* endif */ sp = 0; ls[sp] = v; rs[sp] = v + (n - 1); while (sp >= 0) { if (rs[sp] - ls[sp] > minsize) { l = ls[sp]; r = rs[sp]; m = l + (r - l) / 2; if (*l > *m) { t = *l; *l = *m; *m = t; it = array2[l - v]; array2[l - v] = array2[m - v]; array2[m - v] = it; } if (*m > *r) { t = *m; *m = *r; *r = t; it = array2[m - v]; array2[m - v] = array2[r - v]; array2[r - v] = it; if (*l > *m) { t = *l; *l = *m; *m = t; it = array2[l - v]; array2[l - v] = array2[m - v]; array2[m - v] = it; } } c = *m; while (r - l > 1) { while (*(++l) < c) ; while (*(--r) > c) ; t = *l; *l = *r; *r = t; it = array2[l - v]; array2[l - v] = array2[r - v]; array2[r - v] = it; } l = r - 1; if (l < m) { ls[sp + 1] = ls[sp]; rs[sp + 1] = l; ls[sp] = r; } else { ls[sp + 1] = r; rs[sp + 1] = rs[sp]; rs[sp] = l; } sp++; } else sp--; } for (l = v, m = v + (n - 1); l < m; l++) { if (*l > *(l + 1)) { c = *(l + 1); it = array2[(l - v) + 1]; for (r = l; r >= v && *r > c; r--) { *(r + 1) = *r; array2[(r - v) + 1] = array2[(r - v)]; } *(r + 1) = c; array2[(r - v) + 1] = it; } } #if 0 if (number==boundary_sort3) { printf("after sort %d entries\n",number); for (int j=0;j void CoinShortSort_2(S *key, S *lastKey, T *array2) { const size_t number = coinDistance(key, lastKey); if (number <= 2) { if (number == 2 && key[0] > key[1]) { S tempS = key[0]; T tempT = array2[0]; key[0] = key[1]; array2[0] = array2[1]; key[1] = tempS; array2[1] = tempT; } return; } else if (number > 10000) { CoinSort_2Std(key, lastKey, array2); return; } int minsize = 10; size_t n = number; int sp; S *v = key; S *m, t; S *ls[32], *rs[32]; S *l, *r, c; T it; size_t j; /*check already sorted */ S last = key[0]; for (j = 1; j < n; j++) { if (key[j] >= last) { last = key[j]; } else { break; } /* endif */ } /* endfor */ if (j == n) { return; } /* endif */ sp = 0; ls[sp] = v; rs[sp] = v + (n - 1); while (sp >= 0) { if (rs[sp] - ls[sp] > minsize) { l = ls[sp]; r = rs[sp]; m = l + (r - l) / 2; if (*l > *m) { t = *l; *l = *m; *m = t; it = array2[l - v]; array2[l - v] = array2[m - v]; array2[m - v] = it; } if (*m > *r) { t = *m; *m = *r; *r = t; it = array2[m - v]; array2[m - v] = array2[r - v]; array2[r - v] = it; if (*l > *m) { t = *l; *l = *m; *m = t; it = array2[l - v]; array2[l - v] = array2[m - v]; array2[m - v] = it; } } c = *m; while (r - l > 1) { while (*(++l) < c) ; while (*(--r) > c) ; t = *l; *l = *r; *r = t; it = array2[l - v]; array2[l - v] = array2[r - v]; array2[r - v] = it; } l = r - 1; if (l < m) { ls[sp + 1] = ls[sp]; rs[sp + 1] = l; ls[sp] = r; } else { ls[sp + 1] = r; rs[sp + 1] = rs[sp]; rs[sp] = l; } sp++; } else sp--; } for (l = v, m = v + (n - 1); l < m; l++) { if (*l > *(l + 1)) { c = *(l + 1); it = array2[(l - v) + 1]; for (r = l; r >= v && *r > c; r--) { *(r + 1) = *r; array2[(r - v) + 1] = array2[(r - v)]; } *(r + 1) = c; array2[(r - v) + 1] = it; } } } //############################################################################# //############################################################################# /**@name Ordered Triple Struct */ template < class S, class T, class U > class CoinTriple { public: /// First member of triple S first; /// Second member of triple T second; /// Third member of triple U third; public: /// Construct from ordered triple CoinTriple(const S &s, const T &t, const U &u) : first(s) , second(t) , third(u) { } }; //############################################################################# /**@name Comparisons on first element of two ordered triples */ //@{ /** Function operator. Returns true if t1.first < t2.first (i.e., increasing). */ template < class S, class T, class U > class CoinFirstLess_3 { public: /// Compare function inline bool operator()(const CoinTriple< S, T, U > &t1, const CoinTriple< S, T, U > &t2) const { return t1.first < t2.first; } }; //----------------------------------------------------------------------------- /** Function operator. Returns true if t1.first > t2.first (i.e, decreasing). */ template < class S, class T, class U > class CoinFirstGreater_3 { public: /// Compare function inline bool operator()(const CoinTriple< S, T, U > &t1, const CoinTriple< S, T, U > &t2) const { return t1.first > t2.first; } }; //----------------------------------------------------------------------------- /** Function operator. Returns true if abs(t1.first) < abs(t2.first) (i.e., increasing). */ template < class S, class T, class U > class CoinFirstAbsLess_3 { public: /// Compare function inline bool operator()(const CoinTriple< S, T, U > &t1, const CoinTriple< S, T, U > &t2) const { const T t1Abs = t1.first < static_cast< T >(0) ? -t1.first : t1.first; const T t2Abs = t2.first < static_cast< T >(0) ? -t2.first : t2.first; return t1Abs < t2Abs; } }; //----------------------------------------------------------------------------- /** Function operator. Returns true if abs(t1.first) > abs(t2.first) (i.e., decreasing). */ template < class S, class T, class U > class CoinFirstAbsGreater_3 { public: /// Compare function inline bool operator()(const CoinTriple< S, T, U > &t1, const CoinTriple< S, T, U > &t2) const { const T t1Abs = t1.first < static_cast< T >(0) ? -t1.first : t1.first; const T t2Abs = t2.first < static_cast< T >(0) ? -t2.first : t2.first; return t1Abs > t2Abs; } }; //----------------------------------------------------------------------------- /** Function operator. Compare based on the entries of an external vector, i.e., returns true if vec[t1.first < vec[t2.first] (i.e., increasing wrt. vec). Note that to use this comparison operator .first must be a data type automatically convertible to int. */ template < class S, class T, class U, class V > class CoinExternalVectorFirstLess_3 { private: CoinExternalVectorFirstLess_3(); private: const V *vec_; public: inline bool operator()(const CoinTriple< S, T, U > &t1, const CoinTriple< S, T, U > &t2) const { return vec_[t1.first] < vec_[t2.first]; } CoinExternalVectorFirstLess_3(const V *v) : vec_(v) { } }; //----------------------------------------------------------------------------- /** Function operator. Compare based on the entries of an external vector, i.e., returns true if vec[t1.first > vec[t2.first] (i.e., decreasing wrt. vec). Note that to use this comparison operator .first must be a data type automatically convertible to int. */ template < class S, class T, class U, class V > class CoinExternalVectorFirstGreater_3 { private: CoinExternalVectorFirstGreater_3(); private: const V *vec_; public: inline bool operator()(const CoinTriple< S, T, U > &t1, const CoinTriple< S, T, U > &t2) const { return vec_[t1.first] > vec_[t2.first]; } CoinExternalVectorFirstGreater_3(const V *v) : vec_(v) { } }; //@} //############################################################################# /**@name Typedefs for sorting the entries of a packed vector based on an external vector. */ //@{ /// Sort packed vector in increasing order of the external vector typedef CoinExternalVectorFirstLess_3< int, int, double, double > CoinIncrSolutionOrdered; /// Sort packed vector in decreasing order of the external vector typedef CoinExternalVectorFirstGreater_3< int, int, double, double > CoinDecrSolutionOrdered; //@} //############################################################################# /** Sort a triple of containers.
Iter_S - iterator for first container
Iter_T - iterator for 2nd container
Iter_U - iterator for 3rd container
CoinCompare3 - class comparing CoinTriples
*/ #ifdef COIN_SORT_ARBITRARY_CONTAINERS template < class Iter_S, class Iter_T, class Iter_U, class CoinCompare3 > void CoinSort_3(Iter_S sfirst, Iter_S slast, Iter_T tfirst, Iter_U, ufirst, const CoinCompare3 &tc) { typedef typename std::iterator_traits< Iter_S >::value_type S; typedef typename std::iterator_traits< Iter_T >::value_type T; typedef typename std::iterator_traits< Iter_U >::value_type U; const size_t len = coinDistance(sfirst, slast); if (len <= 1) return; typedef CoinTriple< S, T, U > STU_triple; STU_triple *x = static_cast< STU_triple * >(::operator new(len * sizeof(STU_triple))); int i = 0; Iter_S scurrent = sfirst; Iter_T tcurrent = tfirst; Iter_U ucurrent = ufirst; while (scurrent != slast) { new (x + i++) STU_triple(*scurrent++, *tcurrent++, *ucurrent++); } std::sort(x, x + len, tc); scurrent = sfirst; tcurrent = tfirst; ucurrent = ufirst; for (i = 0; i < len; ++i) { *scurrent++ = x[i].first; *tcurrent++ = x[i].second; *ucurrent++ = x[i].third; } ::operator delete(x); } //----------------------------------------------------------------------------- template < class Iter_S, class Iter_T, class Iter_U > void CoinSort_3(Iter_S sfirst, Iter_S slast, Iter_T tfirst, Iter_U, ufirst) { typedef typename std::iterator_traits< Iter_S >::value_type S; typedef typename std::iterator_traits< Iter_T >::value_type T; typedef typename std::iterator_traits< Iter_U >::value_type U; CoinSort_3(sfirts, slast, tfirst, ufirst, CoinFirstLess_3< S, T, U >()); } #else //======================================================================= template < class S, class T, class U, class CoinCompare3 > void CoinSort_3(S *sfirst, S *slast, T *tfirst, U *ufirst, const CoinCompare3 &tc) { const size_t len = coinDistance(sfirst, slast); if (len <= 1) return; typedef CoinTriple< S, T, U > STU_triple; STU_triple *x = static_cast< STU_triple * >(::operator new(len * sizeof(STU_triple))); size_t i = 0; S *scurrent = sfirst; T *tcurrent = tfirst; U *ucurrent = ufirst; while (scurrent != slast) { new (x + i++) STU_triple(*scurrent++, *tcurrent++, *ucurrent++); } std::sort(x, x + len, tc); scurrent = sfirst; tcurrent = tfirst; ucurrent = ufirst; for (i = 0; i < len; ++i) { *scurrent++ = x[i].first; *tcurrent++ = x[i].second; *ucurrent++ = x[i].third; } ::operator delete(x); } //----------------------------------------------------------------------------- template < class S, class T, class U > void CoinSort_3(S *sfirst, S *slast, T *tfirst, U *ufirst) { CoinSort_3(sfirst, slast, tfirst, ufirst, CoinFirstLess_3< S, T, U >()); } #endif //############################################################################# #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinFileIO.cpp0000644000175200017520000003710213414454441016206 0ustar coincoin/* $Id: CoinFileIO.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2005, COIN-OR. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "CoinUtilsConfig.h" #include "CoinFileIO.hpp" #include "CoinError.hpp" #include "CoinHelperFunctions.hpp" #include #include // ------ CoinFileIOBase ------- CoinFileIOBase::CoinFileIOBase(const std::string &fileName) : fileName_(fileName) { } CoinFileIOBase::~CoinFileIOBase() { } const char *CoinFileIOBase::getFileName() const { return fileName_.c_str(); } // ------------------------------------------------------ // next we implement some subclasses of CoinFileInput // for plain text and compressed files // ------------------------------------------------------ // ------ Input for plain text ------ #include // This reads plain text files CoinPlainFileInput::CoinPlainFileInput(const std::string &fileName) : CoinFileInput(fileName) , f_(0) { readType_ = "plain"; if (fileName != "stdin") { f_ = fopen(fileName.c_str(), "r"); if (f_ == 0) throw CoinError("Could not open file for reading!", "CoinPlainFileInput", "CoinPlainFileInput"); } else { f_ = stdin; } } /// When already opened CoinPlainFileInput::CoinPlainFileInput(FILE *fp) : CoinFileInput("") , f_(fp) { readType_ = "plain"; } CoinPlainFileInput::~CoinPlainFileInput() { if (f_ != 0) fclose(f_); } int CoinPlainFileInput::read(void *buffer, int size) { return static_cast< int >(fread(buffer, 1, size, f_)); } char *CoinPlainFileInput::gets(char *buffer, int size) { return fgets(buffer, size, f_); } // ------ helper class supporting buffered gets ------- // This is a CoinFileInput class to handle cases, where the gets method // is not easy to implement (i.e. bzlib has no equivalent to gets, and // zlib's gzgets is extremely slow). It's subclasses only have to implement // the readRaw method, while the read and gets methods are handled by this // class using an internal buffer. class CoinGetslessFileInput : public CoinFileInput { public: CoinGetslessFileInput(const std::string &fileName) : CoinFileInput(fileName) , dataBuffer_(8 * 1024) , dataStart_(&dataBuffer_[0]) , dataEnd_(&dataBuffer_[0]) { } virtual ~CoinGetslessFileInput() {} virtual int read(void *buffer, int size) { if (size <= 0) return 0; // return value int r = 0; // treat destination as char * char *dest = static_cast< char * >(buffer); // First consume data from buffer if available. if (dataStart_ < dataEnd_) { int amount = static_cast< int >(dataEnd_ - dataStart_); if (amount > size) amount = size; CoinMemcpyN(dataStart_, amount, dest); dest += amount; size -= amount; dataStart_ += amount; r = amount; } // If we require more data, use readRaw. // We don't use the buffer here, as readRaw is ecpected to be efficient. if (size > 0) r += readRaw(dest, size); return r; } virtual char *gets(char *buffer, int size) { if (size <= 1) return 0; char *dest = buffer; char *destLast = dest + size - 2; // last position allowed to be written bool initiallyEmpty = (dataStart_ == dataEnd_); for (;;) { // refill dataBuffer if needed if (dataStart_ == dataEnd_) { dataStart_ = dataEnd_ = &dataBuffer_[0]; int count = readRaw(dataStart_, static_cast< int >(dataBuffer_.size())); // at EOF? if (count <= 0) { *dest = 0; // if it was initially empty we had nothing written and should // return 0, otherwise at least the buffer contents were // transfered and buffer has to be returned. return initiallyEmpty ? 0 : buffer; } dataEnd_ = dataStart_ + count; } // copy character from buffer *dest = *dataStart_++; // terminate, if character was \n or bufferEnd was reached if (*dest == '\n' || dest == destLast) { *++dest = 0; return buffer; } ++dest; } // we should never reach this place throw CoinError("Reached unreachable code!", "gets", "CoinGetslessFileInput"); } protected: // This should be implemented by the subclasses. It essentially behaves // like fread: the location pointed to by buffer should be filled with // size bytes. Return value is the number of bytes written (0 indicates EOF). virtual int readRaw(void *buffer, int size) = 0; private: std::vector< char > dataBuffer_; // memory used for buffering char *dataStart_; // pointer to currently buffered data char *dataEnd_; // pointer to "one behind last data element" }; // -------- input for gzip compressed files ------- #ifdef COIN_HAS_ZLIB #include // This class handles gzip'ed files using libz. // While zlib offers the gzread and gzgets functions which do all we want, // the gzgets is _very_ slow as it gets single bytes via the complex gzread. // So we use the CoinGetslessFileInput as base. class CoinGzipFileInput : public CoinGetslessFileInput { public: CoinGzipFileInput(const std::string &fileName) : CoinGetslessFileInput(fileName) , gzf_(0) { readType_ = "zlib"; gzf_ = gzopen(fileName.c_str(), "r"); if (gzf_ == 0) throw CoinError("Could not open file for reading!", "CoinGzipFileInput", "CoinGzipFileInput"); } virtual ~CoinGzipFileInput() { if (gzf_ != 0) gzclose(gzf_); } protected: virtual int readRaw(void *buffer, int size) { return gzread(gzf_, buffer, size); } private: gzFile gzf_; }; #endif // COIN_HAS_ZLIB // ------- input for bzip2 compressed files ------ #ifdef COIN_HAS_BZLIB #include // This class handles files compressed by bzip2 using libbz. // As bzlib has no builtin gets, we use the CoinGetslessFileInput. class CoinBzip2FileInput : public CoinGetslessFileInput { public: CoinBzip2FileInput(const std::string &fileName) : CoinGetslessFileInput(fileName) , f_(0) , bzf_(0) { int bzError = BZ_OK; readType_ = "bzlib"; f_ = fopen(fileName.c_str(), "r"); if (f_ != 0) bzf_ = BZ2_bzReadOpen(&bzError, f_, 0, 0, 0, 0); if (f_ == 0 || bzError != BZ_OK || bzf_ == 0) throw CoinError("Could not open file for reading!", "CoinBzip2FileInput", "CoinBzip2FileInput"); } virtual ~CoinBzip2FileInput() { int bzError = BZ_OK; if (bzf_ != 0) BZ2_bzReadClose(&bzError, bzf_); if (f_ != 0) fclose(f_); } protected: virtual int readRaw(void *buffer, int size) { int bzError = BZ_OK; int count = BZ2_bzRead(&bzError, bzf_, buffer, size); if (bzError == BZ_OK || bzError == BZ_STREAM_END) return count; // Error? return 0; } private: FILE *f_; BZFILE *bzf_; }; #endif // COIN_HAS_BZLIB // ----- implementation of CoinFileInput's methods /// indicates whether CoinFileInput supports gzip'ed files bool CoinFileInput::haveGzipSupport() { #ifdef COIN_HAS_ZLIB return true; #else return false; #endif } /// indicates whether CoinFileInput supports bzip2'ed files bool CoinFileInput::haveBzip2Support() { #ifdef COIN_HAS_BZLIB return true; #else return false; #endif } CoinFileInput *CoinFileInput::create(const std::string &fileName) { // first try to open file, and read first bytes unsigned char header[4]; size_t count; // So stdin will be plain file if (fileName != "stdin") { FILE *f = fopen(fileName.c_str(), "r"); if (f == 0) throw CoinError("Could not open file for reading!", "create", "CoinFileInput"); count = fread(header, 1, 4, f); fclose(f); } else { // Reading from stdin - for moment not compressed count = 0; // So stdin will be plain file } // gzip files start with the magic numbers 0x1f 0x8b if (count >= 2 && header[0] == 0x1f && header[1] == 0x8b) { #ifdef COIN_HAS_ZLIB return new CoinGzipFileInput(fileName); #else throw CoinError("Cannot read gzip'ed file because zlib was " "not compiled into COIN!", "create", "CoinFileInput"); #endif } // bzip2 files start with the string "BZh" if (count >= 3 && header[0] == 'B' && header[1] == 'Z' && header[2] == 'h') { #ifdef COIN_HAS_BZLIB return new CoinBzip2FileInput(fileName); #else throw CoinError("Cannot read bzip2'ed file because bzlib was " "not compiled into COIN!", "create", "CoinFileInput"); #endif } // fallback: probably plain text file return new CoinPlainFileInput(fileName); } CoinFileInput::CoinFileInput(const std::string &fileName) : CoinFileIOBase(fileName) { } CoinFileInput::~CoinFileInput() { } // ------------------------------------------------------ // Some subclasses of CoinFileOutput // for plain text and compressed files // ------------------------------------------------------ // -------- CoinPlainFileOutput --------- // Class to handle output to text files without compression. class CoinPlainFileOutput : public CoinFileOutput { public: CoinPlainFileOutput(const std::string &fileName) : CoinFileOutput(fileName) , f_(0) { if (fileName == "-" || fileName == "stdout") { f_ = stdout; } else { f_ = fopen(fileName.c_str(), "w"); if (f_ == 0) throw CoinError("Could not open file for writing!", "CoinPlainFileOutput", "CoinPlainFileOutput"); } } virtual ~CoinPlainFileOutput() { if (f_ != 0 && f_ != stdout) fclose(f_); } virtual int write(const void *buffer, int size) { return static_cast< int >(fwrite(buffer, 1, size, f_)); } // we have something better than the default implementation virtual bool puts(const char *s) { return fputs(s, f_) >= 0; } private: FILE *f_; }; // ------- CoinGzipFileOutput --------- #ifdef COIN_HAS_ZLIB // no need to include the header, as this was done for the input class // Handle output with gzip compression class CoinGzipFileOutput : public CoinFileOutput { public: CoinGzipFileOutput(const std::string &fileName) : CoinFileOutput(fileName) , gzf_(0) { gzf_ = gzopen(fileName.c_str(), "w"); if (gzf_ == 0) throw CoinError("Could not open file for writing!", "CoinGzipFileOutput", "CoinGzipFileOutput"); } virtual ~CoinGzipFileOutput() { if (gzf_ != 0) gzclose(gzf_); } virtual int write(const void *buffer, int size) { return gzwrite(gzf_, const_cast< void * >(buffer), size); } // as zlib's gzputs is no more clever than our own, there's // no need to replace the default. private: gzFile gzf_; }; #endif // COIN_HAS_ZLIB // ------- CoinBzip2FileOutput ------- #ifdef COIN_HAS_BZLIB // no need to include the header, as this was done for the input class // Output to bzip2 compressed file class CoinBzip2FileOutput : public CoinFileOutput { public: CoinBzip2FileOutput(const std::string &fileName) : CoinFileOutput(fileName) , f_(0) , bzf_(0) { int bzError = BZ_OK; f_ = fopen(fileName.c_str(), "w"); if (f_ != 0) bzf_ = BZ2_bzWriteOpen(&bzError, f_, 9, /* Number of 100k blocks used for compression. Must be between 1 and 9 inclusive. As 9 gives best compression and I guess we can spend some memory, we use it. */ 0, /* verbosity */ 30 /* suggested by bzlib manual */); if (f_ == 0 || bzError != BZ_OK || bzf_ == 0) throw CoinError("Could not open file for writing!", "CoinBzip2FileOutput", "CoinBzip2FileOutput"); } virtual ~CoinBzip2FileOutput() { int bzError = BZ_OK; if (bzf_ != 0) BZ2_bzWriteClose(&bzError, bzf_, 0, 0, 0); if (f_ != 0) fclose(f_); } virtual int write(const void *buffer, int size) { int bzError = BZ_OK; BZ2_bzWrite(&bzError, bzf_, const_cast< void * >(buffer), size); return (bzError == BZ_OK) ? size : 0; } private: FILE *f_; BZFILE *bzf_; }; #endif // COIN_HAS_BZLIB // ------- implementation of CoinFileOutput's methods bool CoinFileOutput::compressionSupported(Compression compression) { switch (compression) { case COMPRESS_NONE: return true; case COMPRESS_GZIP: #ifdef COIN_HAS_ZLIB return true; #else return false; #endif case COMPRESS_BZIP2: #ifdef COIN_HAS_BZLIB return true; #else return false; #endif default: return false; } } CoinFileOutput *CoinFileOutput::create(const std::string &fileName, Compression compression) { switch (compression) { case COMPRESS_NONE: return new CoinPlainFileOutput(fileName); case COMPRESS_GZIP: #ifdef COIN_HAS_ZLIB return new CoinGzipFileOutput(fileName); #endif break; case COMPRESS_BZIP2: #ifdef COIN_HAS_BZLIB return new CoinBzip2FileOutput(fileName); #endif break; default: break; } throw CoinError("Unsupported compression selected!", "create", "CoinFileOutput"); } CoinFileOutput::CoinFileOutput(const std::string &fileName) : CoinFileIOBase(fileName) { } CoinFileOutput::~CoinFileOutput() { } bool CoinFileOutput::puts(const char *s) { int len = static_cast< int >(strlen(s)); if (len == 0) return true; return write(s, len) == len; } /* Tests if the given string looks like an absolute path to a file. - unix: string begins with `/' - windows: string begins with `\' or `drv:', where drv is a drive designator. */ bool fileAbsPath(const std::string &path) { const char dirsep = CoinFindDirSeparator(); // If the first two chars are drive designators then treat it as absolute // path (noone in their right mind would create a file named 'Z:' on unix, // right?...) const size_t len = path.length(); if (len >= 2 && path[1] == ':') { const char ch = path[0]; if (('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z')) { return true; } } return path[0] == dirsep; } /* Tests if file readable and may change name to add compression extension. Here to get ZLIB etc in one place stdin goes by unmolested by all the fussing with file names. We shouldn't close it, either. */ bool fileCoinReadable(std::string &fileName, const std::string &dfltPrefix) { if (fileName != "stdin") { const char dirsep = CoinFindDirSeparator(); std::string directory; if (dfltPrefix == "") { directory = (dirsep == '/' ? "./" : ".\\"); } else { directory = dfltPrefix; if (directory[directory.length() - 1] != dirsep) { directory += dirsep; } } bool absolutePath = fileAbsPath(fileName); std::string field = fileName; if (absolutePath) { // nothing to do } else if (field[0] == '~') { char *home_dir = getenv("HOME"); if (home_dir) { std::string home(home_dir); field = field.erase(0, 1); fileName = home + field; } else { fileName = field; } } else { fileName = directory + field; } } // I am opening it to make sure not odd FILE *fp; if (strcmp(fileName.c_str(), "stdin")) { fp = fopen(fileName.c_str(), "r"); } else { fp = stdin; } #ifdef COIN_HAS_ZLIB if (!fp) { std::string fname = fileName; fname += ".gz"; fp = fopen(fname.c_str(), "r"); if (fp) fileName = fname; } #endif #ifdef COIN_HAS_BZLIB if (!fp) { std::string fname = fileName; fname += ".bz2"; fp = fopen(fname.c_str(), "r"); if (fp) fileName = fname; } #endif if (!fp) { return false; } else { if (fp != stdin) { fclose(fp); } return true; } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinSnapshot.cpp0000644000175200017520000003571413414454441016705 0ustar coincoin/* $Id: CoinSnapshot.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinUtilsConfig.h" #include "CoinHelperFunctions.hpp" #include "CoinSnapshot.hpp" #include "CoinPackedMatrix.hpp" #include "CoinFinite.hpp" //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinSnapshot::CoinSnapshot() { gutsOfDestructor(13); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinSnapshot::CoinSnapshot(const CoinSnapshot &rhs) { gutsOfDestructor(13); gutsOfCopy(rhs); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinSnapshot::~CoinSnapshot() { gutsOfDestructor(15); } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinSnapshot & CoinSnapshot::operator=(const CoinSnapshot &rhs) { if (this != &rhs) { gutsOfDestructor(15); gutsOfCopy(rhs); } return *this; } // Does main work of destructor void CoinSnapshot::gutsOfDestructor(int type) { if ((type & 2) != 0) { if (owned_.colLower) delete[] colLower_; if (owned_.colUpper) delete[] colUpper_; if (owned_.rowLower) delete[] rowLower_; if (owned_.rowUpper) delete[] rowUpper_; if (owned_.rightHandSide) delete[] rightHandSide_; if (owned_.objCoefficients) delete[] objCoefficients_; if (owned_.colType) delete[] colType_; if (owned_.matrixByRow) delete matrixByRow_; if (owned_.matrixByCol) delete matrixByCol_; if (owned_.originalMatrixByRow) delete originalMatrixByRow_; if (owned_.originalMatrixByCol) delete originalMatrixByCol_; if (owned_.colSolution) delete[] colSolution_; if (owned_.rowPrice) delete[] rowPrice_; if (owned_.reducedCost) delete[] reducedCost_; if (owned_.rowActivity) delete[] rowActivity_; if (owned_.doNotSeparateThis) delete[] doNotSeparateThis_; } if ((type & 4) != 0) { objSense_ = 1.0; infinity_ = COIN_DBL_MAX; dualTolerance_ = 1.0e-7; primalTolerance_ = 1.0e-7; integerTolerance_ = 1.0e-7; } if ((type & 8) != 0) { objValue_ = COIN_DBL_MAX; objOffset_ = 0.0; integerUpperBound_ = COIN_DBL_MAX; integerLowerBound_ = -COIN_DBL_MAX; } if ((type & 1) != 0) { colLower_ = NULL; colUpper_ = NULL; rowLower_ = NULL; rowUpper_ = NULL; rightHandSide_ = NULL; objCoefficients_ = NULL; colType_ = NULL; matrixByRow_ = NULL; matrixByCol_ = NULL; originalMatrixByRow_ = NULL; originalMatrixByCol_ = NULL; colSolution_ = NULL; rowPrice_ = NULL; reducedCost_ = NULL; rowActivity_ = NULL; doNotSeparateThis_ = NULL; numCols_ = 0; numRows_ = 0; numElements_ = 0; numIntegers_ = 0; // say nothing owned memset(&owned_, 0, sizeof(owned_)); } } // Does main work of copy void CoinSnapshot::gutsOfCopy(const CoinSnapshot &rhs) { objSense_ = rhs.objSense_; infinity_ = rhs.infinity_; objValue_ = rhs.objValue_; objOffset_ = rhs.objOffset_; dualTolerance_ = rhs.dualTolerance_; primalTolerance_ = rhs.primalTolerance_; integerTolerance_ = rhs.integerTolerance_; integerUpperBound_ = rhs.integerUpperBound_; integerLowerBound_ = rhs.integerLowerBound_; numCols_ = rhs.numCols_; numRows_ = rhs.numRows_; numElements_ = rhs.numElements_; numIntegers_ = rhs.numIntegers_; owned_ = rhs.owned_; if (owned_.colLower) colLower_ = CoinCopyOfArray(rhs.colLower_, numCols_); else colLower_ = rhs.colLower_; if (owned_.colUpper) colUpper_ = CoinCopyOfArray(rhs.colUpper_, numCols_); else colUpper_ = rhs.colUpper_; if (owned_.rowLower) rowLower_ = CoinCopyOfArray(rhs.rowLower_, numRows_); else rowLower_ = rhs.rowLower_; if (owned_.rowUpper) rowUpper_ = CoinCopyOfArray(rhs.rowUpper_, numRows_); else rowUpper_ = rhs.rowUpper_; if (owned_.rightHandSide) rightHandSide_ = CoinCopyOfArray(rhs.rightHandSide_, numRows_); else rightHandSide_ = rhs.rightHandSide_; if (owned_.objCoefficients) objCoefficients_ = CoinCopyOfArray(rhs.objCoefficients_, numCols_); else objCoefficients_ = rhs.objCoefficients_; if (owned_.colType) colType_ = CoinCopyOfArray(rhs.colType_, numCols_); else colType_ = rhs.colType_; if (owned_.colSolution) colSolution_ = CoinCopyOfArray(rhs.colSolution_, numCols_); else colSolution_ = rhs.colSolution_; if (owned_.rowPrice) rowPrice_ = CoinCopyOfArray(rhs.rowPrice_, numRows_); else rowPrice_ = rhs.rowPrice_; if (owned_.reducedCost) reducedCost_ = CoinCopyOfArray(rhs.reducedCost_, numCols_); else reducedCost_ = rhs.reducedCost_; if (owned_.rowActivity) rowActivity_ = CoinCopyOfArray(rhs.rowActivity_, numRows_); else rowActivity_ = rhs.rowActivity_; if (owned_.doNotSeparateThis) doNotSeparateThis_ = CoinCopyOfArray(rhs.doNotSeparateThis_, numCols_); else doNotSeparateThis_ = rhs.doNotSeparateThis_; if (owned_.matrixByRow) matrixByRow_ = new CoinPackedMatrix(*rhs.matrixByRow_); else matrixByRow_ = rhs.matrixByRow_; if (owned_.matrixByCol) matrixByCol_ = new CoinPackedMatrix(*rhs.matrixByCol_); else matrixByCol_ = rhs.matrixByCol_; if (owned_.originalMatrixByRow) originalMatrixByRow_ = new CoinPackedMatrix(*rhs.originalMatrixByRow_); else originalMatrixByRow_ = rhs.originalMatrixByRow_; if (owned_.originalMatrixByCol) originalMatrixByCol_ = new CoinPackedMatrix(*rhs.originalMatrixByCol_); else originalMatrixByCol_ = rhs.originalMatrixByCol_; } /* Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is NULL then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ void CoinSnapshot::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub, bool makeRowCopy) { // Keep scalars (apart from objective value etc) gutsOfDestructor(3 + 8); numRows_ = matrix.getNumRows(); numCols_ = matrix.getNumCols(); numElements_ = static_cast< int >(matrix.getNumElements()); owned_.matrixByCol = 1; matrixByCol_ = new CoinPackedMatrix(matrix); if (makeRowCopy) { owned_.matrixByRow = 1; CoinPackedMatrix *matrixByRow = new CoinPackedMatrix(matrix); matrixByRow->reverseOrdering(); matrixByRow_ = matrixByRow; } colLower_ = CoinCopyOfArray(collb, numCols_, 0.0); colUpper_ = CoinCopyOfArray(colub, numCols_, infinity_); objCoefficients_ = CoinCopyOfArray(obj, numCols_, 0.0); rowLower_ = CoinCopyOfArray(rowlb, numRows_, -infinity_); rowUpper_ = CoinCopyOfArray(rowub, numRows_, infinity_); // do rhs as well createRightHandSide(); } // Set pointer to array[getNumCols()] of column lower bounds void CoinSnapshot::setColLower(const double *array, bool copyIn) { if (owned_.colLower) delete[] colLower_; if (copyIn) { owned_.colLower = 1; colLower_ = CoinCopyOfArray(array, numCols_); } else { owned_.colLower = 0; colLower_ = array; } } // Set pointer to array[getNumCols()] of column upper bounds void CoinSnapshot::setColUpper(const double *array, bool copyIn) { if (owned_.colUpper) delete[] colUpper_; if (copyIn) { owned_.colUpper = 1; colUpper_ = CoinCopyOfArray(array, numCols_); } else { owned_.colUpper = 0; colUpper_ = array; } } // Set pointer to array[getNumRows()] of row lower bounds void CoinSnapshot::setRowLower(const double *array, bool copyIn) { if (owned_.rowLower) delete[] rowLower_; if (copyIn) { owned_.rowLower = 1; rowLower_ = CoinCopyOfArray(array, numRows_); } else { owned_.rowLower = 0; rowLower_ = array; } } // Set pointer to array[getNumRows()] of row upper bounds void CoinSnapshot::setRowUpper(const double *array, bool copyIn) { if (owned_.rowUpper) delete[] rowUpper_; if (copyIn) { owned_.rowUpper = 1; rowUpper_ = CoinCopyOfArray(array, numRows_); } else { owned_.rowUpper = 0; rowUpper_ = array; } } /* Set pointer to array[getNumRows()] of rhs side values This gives same results as OsiSolverInterface for useful cases If getRowUpper()[i] != infinity then getRightHandSide()[i] == getRowUpper()[i] else getRightHandSide()[i] == getRowLower()[i] */ void CoinSnapshot::setRightHandSide(const double *array, bool copyIn) { if (owned_.rightHandSide) delete[] rightHandSide_; if (copyIn) { owned_.rightHandSide = 1; rightHandSide_ = CoinCopyOfArray(array, numRows_); } else { owned_.rightHandSide = 0; rightHandSide_ = array; } } /* Create array[getNumRows()] of rhs side values This gives same results as OsiSolverInterface for useful cases If getRowUpper()[i] != infinity then getRightHandSide()[i] == getRowUpper()[i] else getRightHandSide()[i] == getRowLower()[i] */ void CoinSnapshot::createRightHandSide() { if (owned_.rightHandSide) delete[] rightHandSide_; owned_.rightHandSide = 1; assert(rowUpper_); assert(rowLower_); double *rightHandSide = CoinCopyOfArray(rowUpper_, numRows_); for (int i = 0; i < numRows_; i++) { if (rightHandSide[i] == infinity_) rightHandSide[i] = rowLower_[i]; } rightHandSide_ = rightHandSide; } // Set pointer to array[getNumCols()] of objective function coefficients void CoinSnapshot::setObjCoefficients(const double *array, bool copyIn) { if (owned_.objCoefficients) delete[] objCoefficients_; if (copyIn) { owned_.objCoefficients = 1; objCoefficients_ = CoinCopyOfArray(array, numCols_); } else { owned_.objCoefficients = 0; objCoefficients_ = array; } } // Set colType array ('B', 'I', or 'C' for Binary, Integer and Continuous) void CoinSnapshot::setColType(const char *array, bool copyIn) { if (owned_.colType) delete[] colType_; if (copyIn) { owned_.colType = 1; colType_ = CoinCopyOfArray(array, numCols_); } else { owned_.colType = 0; colType_ = array; } int i; numIntegers_ = 0; for (i = 0; i < numCols_; i++) { if (colType_[i] == 'B' || colType_[i] == 'I') numIntegers_++; } } // Set pointer to row-wise copy of current matrix void CoinSnapshot::setMatrixByRow(const CoinPackedMatrix *matrix, bool copyIn) { if (owned_.matrixByRow) delete matrixByRow_; if (copyIn) { owned_.matrixByRow = 1; matrixByRow_ = new CoinPackedMatrix(*matrix); } else { owned_.matrixByRow = 0; matrixByRow_ = matrix; } assert(matrixByRow_->getNumCols() == numCols_); assert(matrixByRow_->getNumRows() == numRows_); } // Create row-wise copy from MatrixByCol void CoinSnapshot::createMatrixByRow() { if (owned_.matrixByRow) delete matrixByRow_; assert(matrixByCol_); owned_.matrixByRow = 1; CoinPackedMatrix *matrixByRow = new CoinPackedMatrix(*matrixByCol_); matrixByRow->reverseOrdering(); matrixByRow_ = matrixByRow; } // Set pointer to column-wise copy of current matrix void CoinSnapshot::setMatrixByCol(const CoinPackedMatrix *matrix, bool copyIn) { if (owned_.matrixByCol) delete matrixByCol_; if (copyIn) { owned_.matrixByCol = 1; matrixByCol_ = new CoinPackedMatrix(*matrix); } else { owned_.matrixByCol = 0; matrixByCol_ = matrix; } assert(matrixByCol_->getNumCols() == numCols_); assert(matrixByCol_->getNumRows() == numRows_); } // Set pointer to row-wise copy of "original" matrix void CoinSnapshot::setOriginalMatrixByRow(const CoinPackedMatrix *matrix, bool copyIn) { if (owned_.originalMatrixByRow) delete originalMatrixByRow_; if (copyIn) { owned_.originalMatrixByRow = 1; originalMatrixByRow_ = new CoinPackedMatrix(*matrix); } else { owned_.originalMatrixByRow = 0; originalMatrixByRow_ = matrix; } assert(matrixByRow_->getNumCols() == numCols_); } // Set pointer to column-wise copy of "original" matrix void CoinSnapshot::setOriginalMatrixByCol(const CoinPackedMatrix *matrix, bool copyIn) { if (owned_.originalMatrixByCol) delete originalMatrixByCol_; if (copyIn) { owned_.originalMatrixByCol = 1; originalMatrixByCol_ = new CoinPackedMatrix(*matrix); } else { owned_.originalMatrixByCol = 0; originalMatrixByCol_ = matrix; } assert(matrixByCol_->getNumCols() == numCols_); } // Set pointer to array[getNumCols()] of primal variable values void CoinSnapshot::setColSolution(const double *array, bool copyIn) { if (owned_.colSolution) delete[] colSolution_; if (copyIn) { owned_.colSolution = 1; colSolution_ = CoinCopyOfArray(array, numCols_); } else { owned_.colSolution = 0; colSolution_ = array; } } // Set pointer to array[getNumRows()] of dual variable values void CoinSnapshot::setRowPrice(const double *array, bool copyIn) { if (owned_.rowPrice) delete[] rowPrice_; if (copyIn) { owned_.rowPrice = 1; rowPrice_ = CoinCopyOfArray(array, numRows_); } else { owned_.rowPrice = 0; rowPrice_ = array; } } // Set a pointer to array[getNumCols()] of reduced costs void CoinSnapshot::setReducedCost(const double *array, bool copyIn) { if (owned_.reducedCost) delete[] reducedCost_; if (copyIn) { owned_.reducedCost = 1; reducedCost_ = CoinCopyOfArray(array, numCols_); } else { owned_.reducedCost = 0; reducedCost_ = array; } } // Set pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector). void CoinSnapshot::setRowActivity(const double *array, bool copyIn) { if (owned_.rowActivity) delete[] rowActivity_; if (copyIn) { owned_.rowActivity = 1; rowActivity_ = CoinCopyOfArray(array, numRows_); } else { owned_.rowActivity = 0; rowActivity_ = array; } } // Set pointer to array[getNumCols()] of primal variable values which should not be separated (for debug) void CoinSnapshot::setDoNotSeparateThis(const double *array, bool copyIn) { if (owned_.doNotSeparateThis) delete[] doNotSeparateThis_; if (copyIn) { owned_.doNotSeparateThis = 1; doNotSeparateThis_ = CoinCopyOfArray(array, numCols_); } else { owned_.doNotSeparateThis = 0; doNotSeparateThis_ = array; } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinUtility.hpp0000644000175200017520000000124513414454441016546 0ustar coincoin/* $Id: CoinUtility.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2004, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinUtility_h_ #define CoinUtility_h_ #include "CoinSort.hpp" template < typename S, typename T > CoinPair< S, T > CoinMakePair(const S &s, const T &t) { return CoinPair< S, T >(s, t); } template < typename S, typename T, typename U > CoinTriple< S, T, U > CoinMakeTriple(const S &s, const T &t, const U &u) { return CoinTriple< S, T, U >(s, t, u); } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinAlloc.hpp0000644000175200017520000001211013414454441016126 0ustar coincoin/* $Id: CoinAlloc.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2007, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinAlloc_hpp #define CoinAlloc_hpp #include "CoinUtilsConfig.h" #include #if !defined(COINUTILS_MEMPOOL_MAXPOOLED) #define COINUTILS_MEMPOOL_MAXPOOLED -1 #endif #if (COINUTILS_MEMPOOL_MAXPOOLED >= 0) #ifndef COINUTILS_MEMPOOL_ALIGNMENT #define COINUTILS_MEMPOOL_ALIGNMENT 16 #endif /* Note: This memory pool implementation assumes that sizeof(size_t) and sizeof(void*) are both <= COINUTILS_MEMPOOL_ALIGNMENT. Choosing an alignment of 4 will cause segfault on 64-bit platforms and may lead to bad performance on 32-bit platforms. So 8 is a mnimum recommended alignment. Probably 16 does not waste too much space either and may be even better for performance. One must play with it. */ //############################################################################# #if (COINUTILS_MEMPOOL_ALIGNMENT == 16) static const std::size_t CoinAllocPtrShift = 4; static const std::size_t CoinAllocRoundMask = ~((std::size_t)15); #elif (COINUTILS_MEMPOOL_ALIGNMENT == 8) static const std::size_t CoinAllocPtrShift = 3; static const std::size_t CoinAllocRoundMask = ~((std::size_t)7); #else #error "COINUTILS_MEMPOOL_ALIGNMENT must be defined as 8 or 16 (or this code needs to be changed :-)" #endif //############################################################################# #ifndef COIN_MEMPOOL_SAVE_BLOCKHEADS #define COIN_MEMPOOL_SAVE_BLOCKHEADS 0 #endif //############################################################################# class CoinMempool { private: #if (COIN_MEMPOOL_SAVE_BLOCKHEADS == 1) char **block_heads; std::size_t block_num; std::size_t max_block_num; #endif #if defined(COINUTILS_PTHREADS) && (COINUTILS_PTHREAD == 1) pthread_mutex_t mutex_; #endif int last_block_size_; char *first_free_; const std::size_t entry_size_; private: CoinMempool(const CoinMempool &); CoinMempool &operator=(const CoinMempool &); private: char *allocate_new_block(); inline void lock_mutex() { #if defined(COINUTILS_PTHREADS) && (COINUTILS_PTHREAD == 1) pthread_mutex_lock(&mutex_); #endif } inline void unlock_mutex() { #if defined(COINUTILS_PTHREADS) && (COINUTILS_PTHREAD == 1) pthread_mutex_unlock(&mutex_); #endif } public: CoinMempool(std::size_t size = 0); ~CoinMempool(); char *alloc(); inline void dealloc(char *p) { char **pp = (char **)p; lock_mutex(); *pp = first_free_; first_free_ = p; unlock_mutex(); } }; //############################################################################# /** A memory pool allocator. If a request arrives for allocating \c n bytes then it is first rounded up to the nearest multiple of \c sizeof(void*) (this is \c n_roundup), then one more \c sizeof(void*) is added to this number. If the result is no more than maxpooled_ then the appropriate pool is used to get a chunk of memory, if not, then malloc is used. In either case, the size of the allocated chunk is written into the first \c sizeof(void*) bytes and a pointer pointing afterwards is returned. */ class CoinAlloc { private: CoinMempool *pool_; int maxpooled_; public: CoinAlloc(); ~CoinAlloc() {} inline void *alloc(const std::size_t n) { if (maxpooled_ <= 0) { return std::malloc(n); } char *p = NULL; const std::size_t to_alloc = ((n + COINUTILS_MEMPOOL_ALIGNMENT - 1) & CoinAllocRoundMask) + COINUTILS_MEMPOOL_ALIGNMENT; CoinMempool *pool = NULL; if (maxpooled_ > 0 && to_alloc >= (size_t)maxpooled_) { p = static_cast< char * >(std::malloc(to_alloc)); if (p == NULL) throw std::bad_alloc(); } else { pool = pool_ + (to_alloc >> CoinAllocPtrShift); p = pool->alloc(); } *((CoinMempool **)p) = pool; return static_cast< void * >(p + COINUTILS_MEMPOOL_ALIGNMENT); } inline void dealloc(void *p) { if (maxpooled_ <= 0) { std::free(p); return; } if (p) { char *base = static_cast< char * >(p) - COINUTILS_MEMPOOL_ALIGNMENT; CoinMempool *pool = *((CoinMempool **)base); if (!pool) { std::free(base); } else { pool->dealloc(base); } } } }; extern CoinAlloc CoinAllocator; //############################################################################# #if defined(COINUTILS_MEMPOOL_OVERRIDE_NEW) && (COINUTILS_MEMPOOL_OVERRIDE_NEW == 1) void *operator new(std::size_t size) throw(std::bad_alloc); void *operator new[](std::size_t) throw(std::bad_alloc); void operator delete(void *)throw(); void operator delete[](void *) throw(); void *operator new(std::size_t, const std::nothrow_t &) throw(); void *operator new[](std::size_t, const std::nothrow_t &) throw(); void operator delete(void *, const std::nothrow_t &)throw(); void operator delete[](void *, const std::nothrow_t &) throw(); #endif #endif /*(COINUTILS_MEMPOOL_MAXPOOLED >= 0)*/ #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveEmpty.cpp0000644000175200017520000004231413414454441017716 0ustar coincoin/* $Id: CoinPresolveEmpty.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinFinite.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #include "CoinPresolveEmpty.hpp" #include "CoinMessage.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif /* \file Routines to remove/reinsert empty columns and rows. */ /* Physically remove empty columns, compressing mcstrt and hincol. The major side effect is that columns are renumbered, thus clink_ is no longer valid and must be rebuilt. And we're totally inconsistent with the row-major representation. It's necessary to rebuild clink_ in order to do direct conversion of a CoinPresolveMatrix to a CoinPostsolveMatrix by transferring the data arrays. Without clink_, it's impractical to build link_ to match the transferred bulk storage. */ const CoinPresolveAction * drop_empty_cols_action::presolve(CoinPresolveMatrix *prob, const int *ecols, int necols, const CoinPresolveAction *next) { #if PRESOLVE_CONSISTENCY > 0 presolve_links_ok(prob); presolve_consistent(prob); #endif const int n_orig = prob->ncols_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; presolvehlink *clink = prob->clink_; double *clo = prob->clo_; double *cup = prob->cup_; double *cost = prob->cost_; const double ztoldj = prob->ztoldj_; unsigned char *integerType = prob->integerType_; int *originalColumn = prob->originalColumn_; const double maxmin = prob->maxmin_; double *sol = prob->sol_; unsigned char *colstat = prob->colstat_; action *actions = new action[necols]; int *colmapping = new int[n_orig + 1]; CoinZeroN(colmapping, n_orig); // More like `ignore infeasibility' bool fixInfeasibility = ((prob->presolveOptions_ & 0x4000) != 0); /* Open a loop to walk the list of empty columns. Mark them as empty in colmapping. */ for (int ndx = necols - 1; ndx >= 0; ndx--) { const int j = ecols[ndx]; if (prob->colProhibited2(j)) continue; colmapping[j] = -1; /* Groom bounds on integral variables. Check for previously undetected infeasibility unless the user wants to ignore it. If we find it, quit. */ double &lj = clo[j]; double &uj = cup[j]; if (integerType[j]) { lj = ceil(lj - 1.0e-9); uj = floor(uj + 1.0e-9); if (lj > uj && !fixInfeasibility) { prob->status_ |= 1; prob->messageHandler()->message(COIN_PRESOLVE_COLINFEAS, prob->messages()) << j << lj << uj << CoinMessageEol; break; } } /* Load up the postsolve action with the index and rim vector components. */ action &e = actions[ndx]; e.jcol = j; e.clo = lj; e.cup = uj; e.cost = cost[j]; /* There are no more constraints on this variable so we had better be able to compute the answer now. Try to make it nonbasic at bound. If we're unbounded, say so and quit. */ if (fabs(cost[j]) < ztoldj) cost[j] = 0.0; if (cost[j] == 0.0) { if (-PRESOLVE_INF < lj) e.sol = lj; else if (uj < PRESOLVE_INF) e.sol = uj; else e.sol = 0.0; } else if (cost[j] * maxmin > 0.0) { if (-PRESOLVE_INF < lj) e.sol = lj; else { prob->messageHandler()->message(COIN_PRESOLVE_COLUMNBOUNDB, prob->messages()) << j << CoinMessageEol; prob->status_ |= 2; break; } } else { if (uj < PRESOLVE_INF) e.sol = uj; else { prob->messageHandler()->message(COIN_PRESOLVE_COLUMNBOUNDA, prob->messages()) << j << CoinMessageEol; prob->status_ |= 2; break; } } #if PRESOLVE_DEBUG > 2 if (e.sol * cost[j]) { std::cout << " non-zero cost " << cost[j] << " for empty col " << j << "." << std::endl; } #endif prob->change_bias(e.sol * cost[j]); } /* No sense doing the actual work of compression unless we're still feasible and bounded. If we are, start out by compressing out the entries associated with empty columns. Empty columns are nonzero in colmapping. */ if (prob->status_ == 0) { int n_compressed = 0; for (int ndx = 0; ndx < n_orig; ndx++) { if (!colmapping[ndx]) { mcstrt[n_compressed] = mcstrt[ndx]; hincol[n_compressed] = hincol[ndx]; clo[n_compressed] = clo[ndx]; cup[n_compressed] = cup[ndx]; cost[n_compressed] = cost[ndx]; if (sol) { sol[n_compressed] = sol[ndx]; colstat[n_compressed] = colstat[ndx]; } integerType[n_compressed] = integerType[ndx]; originalColumn[n_compressed] = originalColumn[ndx]; colmapping[ndx] = n_compressed++; } } mcstrt[n_compressed] = mcstrt[n_orig]; colmapping[n_orig] = n_compressed; /* Rebuild clink_. At this point, all empty columns are linked out, so the only columns left are columns that are to be saved, hence available in colmapping. All we need to do is walk clink_ and write the new entries into a new array. */ presolvehlink *newclink = new presolvehlink[n_compressed + 1]; for (int oldj = n_orig; oldj >= 0; oldj = clink[oldj].pre) { presolvehlink &oldlnk = clink[oldj]; int newj = colmapping[oldj]; assert(newj >= 0 && newj <= n_compressed); presolvehlink &newlnk = newclink[newj]; if (oldlnk.suc >= 0) { newlnk.suc = colmapping[oldlnk.suc]; } else { newlnk.suc = NO_LINK; } if (oldlnk.pre >= 0) { newlnk.pre = colmapping[oldlnk.pre]; } else { newlnk.pre = NO_LINK; } } delete[] clink; prob->clink_ = newclink; prob->ncols_ = n_compressed; } delete[] colmapping; #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_links_ok(prob, true, false); presolve_check_sol(prob); presolve_check_nbasic(prob); #endif return (new drop_empty_cols_action(necols, actions, next)); } /* The top-level method scans the matrix for empty columns and calls a worker routine to do the heavy lifting. NOTE: At the end of this routine, the column- and row-major representations are not consistent. Empty columns have been compressed out, effectively renumbering the columns. */ const CoinPresolveAction * drop_empty_cols_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering drop_empty_cols_action::presolve." << std::endl; #endif presolve_consistent(prob); presolve_links_ok(prob); presolve_check_sol(prob); presolve_check_nbasic(prob); #endif const int *hincol = prob->hincol_; int ncols = prob->ncols_; int nempty = 0; int *empty = new int[ncols]; CoinBigIndex nelems2 = 0; // count empty cols for (int i = 0; i < ncols; i++) { nelems2 += hincol[i]; if (hincol[i] == 0 && !prob->colProhibited2(i)) { #if PRESOLVE_DEBUG > 1 if (nempty == 0) std::cout << "UNUSED COLS:"; else if (i < 100 && nempty % 25 == 0) std::cout << std::endl; else if (i >= 100 && i < 1000 && nempty % 19 == 0) std::cout << std::endl; else if (i >= 1000 && nempty % 15 == 0) std::cout << std::endl; std::cout << " " << i; #endif empty[nempty++] = i; } } prob->nelems_ = nelems2; if (nempty) next = drop_empty_cols_action::presolve(prob, empty, nempty, next); delete[] empty; #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 std::cout << "Leaving drop_empty_cols_action::presolve"; if (nempty) std::cout << ", dropped " << nempty << " columns"; std::cout << "." << std::endl; #endif return (next); } /* Reintroduce empty columns dropped at the end of presolve. */ void drop_empty_cols_action::postsolve(CoinPostsolveMatrix *prob) const { const int nactions = nactions_; const action *const actions = actions_; int ncols = prob->ncols_; #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering drop_empty_cols_action::postsolve, initial system " << prob->nrows_ << "x" << ncols << ", " << nactions << " columns to restore." << std::endl; #endif char *cdone = prob->cdone_; presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #endif CoinBigIndex *colStarts = prob->mcstrt_; int *colLengths = prob->hincol_; double *clo = prob->clo_; double *cup = prob->cup_; double *sol = prob->sol_; double *cost = prob->cost_; double *rcosts = prob->rcosts_; unsigned char *colstat = prob->colstat_; const double maxmin = prob->maxmin_; /* Set up a mapping vector, coded 0 for existing columns, -1 for columns we're about to reintroduce. */ int ncols2 = ncols + nactions; int *colmapping = new int[ncols2]; CoinZeroN(colmapping, ncols2); for (int ndx = 0; ndx < nactions; ndx++) { const action *e = &actions[ndx]; int j = e->jcol; colmapping[j] = -1; } /* Working back from the highest index, expand the existing ncols columns over the full range ncols2, leaving holes for the columns we want to reintroduce. */ for (int j = ncols2 - 1; j >= 0; j--) { if (!colmapping[j]) { ncols--; colStarts[j] = colStarts[ncols]; colLengths[j] = colLengths[ncols]; clo[j] = clo[ncols]; cup[j] = cup[ncols]; cost[j] = cost[ncols]; if (sol) sol[j] = sol[ncols]; if (rcosts) rcosts[j] = rcosts[ncols]; if (colstat) colstat[j] = colstat[ncols]; #if PRESOLVE_DEBUG > 0 cdone[j] = cdone[ncols]; #endif } } assert(!ncols); delete[] colmapping; /* Reintroduce the dropped columns. */ for (int ndx = 0; ndx < nactions; ndx++) { const action *e = &actions[ndx]; int j = e->jcol; colLengths[j] = 0; colStarts[j] = NO_LINK; clo[j] = e->clo; cup[j] = e->cup; cost[j] = e->cost; if (sol) sol[j] = e->sol; if (rcosts) rcosts[j] = maxmin * cost[j]; if (colstat) prob->setColumnStatusUsingValue(j); #if PRESOLVE_DEBUG > 0 cdone[j] = DROP_COL; #if PRESOLVE_DEBUG > 1 std::cout << " restoring col " << j << ", lb = " << clo[j] << ", ub = " << cup[j] << std::endl; #endif #endif } prob->ncols_ += nactions; #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_threads(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving drop_empty_cols_action::postsolve, system " << prob->nrows_ << "x" << prob->ncols_ << "." << std::endl; #endif #endif } const CoinPresolveAction * drop_empty_rows_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { #if PRESOLVE_DEBUG > 0 std::cout << "Entering drop_empty_rows_action::presolve." << std::endl; #endif int ncols = prob->ncols_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; int *hrow = prob->hrow_; int nrows = prob->nrows_; // This is done after row copy needed //int *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; //int *hcol = prob->hcol_; double *rlo = prob->rlo_; double *rup = prob->rup_; unsigned char *rowstat = prob->rowstat_; double *acts = prob->acts_; int *originalRow = prob->originalRow_; //presolvehlink *rlink = prob->rlink_; bool fixInfeasibility = ((prob->presolveOptions_ & 0x4000) != 0); // Relax tolerance double tolerance = 10.0 * prob->feasibilityTolerance_; int i; int nactions = 0; for (i = 0; i < nrows; i++) if (hinrow[i] == 0) nactions++; /* Bail out if there's nothing to be done. */ if (nactions == 0) { #if PRESOLVE_DEBUG > 0 std::cout << "Leaving drop_empty_rows_action::presolve." << std::endl; #endif return (next); } /* Work to do. */ action *actions = new action[nactions]; int *rowmapping = new int[nrows]; nactions = 0; int nrows2 = 0; for (i = 0; i < nrows; i++) { if (hinrow[i] == 0) { action &e = actions[nactions]; #if PRESOLVE_DEBUG > 1 if (nactions == 0) std::cout << "UNUSED ROWS:"; else if (i < 100 && nactions % 25 == 0) std::cout << std::endl; else if (i >= 100 && i < 1000 && nactions % 19 == 0) std::cout << std::endl; else if (i >= 1000 && nactions % 15 == 0) std::cout << std::endl; std::cout << " " << i; #endif nactions++; if (rlo[i] > 0.0 || rup[i] < 0.0) { if ((rlo[i] <= tolerance && rup[i] >= -tolerance) || fixInfeasibility) { rlo[i] = 0.0; rup[i] = 0.0; } else { prob->status_ |= 1; prob->messageHandler()->message(COIN_PRESOLVE_ROWINFEAS, prob->messages()) << i << rlo[i] << rup[i] << CoinMessageEol; break; } } e.row = i; e.rlo = rlo[i]; e.rup = rup[i]; rowmapping[i] = -1; } else { // move down - we want to preserve order rlo[nrows2] = rlo[i]; rup[nrows2] = rup[i]; originalRow[nrows2] = i; if (acts) { acts[nrows2] = acts[i]; rowstat[nrows2] = rowstat[i]; } rowmapping[i] = nrows2++; } } #if PRESOLVE_DEBUG > 1 std::cout << std::endl; #endif // remap matrix for (i = 0; i < ncols; i++) { CoinBigIndex j; for (j = mcstrt[i]; j < mcstrt[i] + hincol[i]; j++) hrow[j] = rowmapping[hrow[j]]; } delete[] rowmapping; prob->nrows_ = nrows2; next = new drop_empty_rows_action(nactions, actions, next); #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving drop_empty_rows_action::presolve"; if (nactions) std::cout << ", dropped " << nactions << " rows"; std::cout << "." << std::endl; #endif #endif return (next); } void drop_empty_rows_action::postsolve(CoinPostsolveMatrix *prob) const { const int nactions = nactions_; const action *const actions = actions_; int ncols = prob->ncols_; int nrows0 = prob->nrows0_; int nrows = prob->nrows_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; int *hrow = prob->hrow_; double *rlo = prob->rlo_; double *rup = prob->rup_; unsigned char *rowstat = prob->rowstat_; double *rowduals = prob->rowduals_; double *acts = prob->acts_; #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering drop_empty_rows_action::postsolve, initial system " << nrows << "x" << ncols << ", " << nactions << " rows to restore." << std::endl; #endif char *rdone = prob->rdone_; presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #endif /* Process the array of actions and mark rowmapping[i] if constraint i was eliminated in presolve. */ int *rowmapping = new int[nrows0]; CoinZeroN(rowmapping, nrows0); for (int k = 0; k < nactions; k++) { const action *e = &actions[k]; int i = e->row; rowmapping[i] = -1; } /* Now walk the vectors for row bounds, activity, duals, and status. Expand the existing entries in 0..(nrows-1) to occupy 0..(nrows0-1), leaving holes for the rows we're about to reintroduce. */ for (int i = nrows0 - 1; i >= 0; i--) { if (!rowmapping[i]) { nrows--; rlo[i] = rlo[nrows]; rup[i] = rup[nrows]; acts[i] = acts[nrows]; rowduals[i] = rowduals[nrows]; if (rowstat) rowstat[i] = rowstat[nrows]; #if PRESOLVE_DEBUG > 0 rdone[i] = rdone[nrows]; #endif } } assert(!nrows); /* Rewrite rowmapping so that it maps presolved row indices to row indices in the restored matrix. */ for (int i = 0; i < nrows0; i++) { if (!rowmapping[i]) rowmapping[nrows++] = i; } /* Now walk the row index array for each column, rewriting the row indices so they are correct for the restored matrix. */ for (int j = 0; j < ncols; j++) { const CoinBigIndex &start = mcstrt[j]; const CoinBigIndex &end = start + hincol[j]; for (CoinBigIndex k = start; k < end; k++) { hrow[k] = rowmapping[hrow[k]]; } } delete[] rowmapping; /* And reintroduce the (still empty) rows that were removed in presolve. The assumption is that an empty row cannot be tight, hence the logical is basic and the dual is zero. */ for (int k = 0; k < nactions; k++) { const action *e = &actions[k]; int i = e->row; rlo[i] = e->rlo; rup[i] = e->rup; acts[i] = 0.0; if (rowstat) prob->setRowStatus(i, CoinPrePostsolveMatrix::basic); rowduals[i] = 0.0; #if PRESOLVE_DEBUG > 0 rdone[i] = DROP_ROW; #if PRESOLVE_DEBUG > 1 std::cout << " restoring row " << i << ", LB = " << rlo[i] << ", UB = " << rup[i] << std::endl; #endif #endif } prob->nrows_ += nactions; assert(prob->nrows_ == prob->nrows0_); #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_threads(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving drop_empty_rows_action::postsolve, system " << prob->nrows_ << "x" << prob->ncols_ << "." << std::endl; #endif #endif } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinBuild.cpp0000644000175200017520000002707313414454441016144 0ustar coincoin/* $Id: CoinBuild.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include #include #include #include "CoinBuild.hpp" #include "CoinPragma.hpp" #include "CoinHelperFunctions.hpp" /* Format of each item is a bit sleazy. First we have pointer to next item Then we have two ints giving item number and number of elements Then we have three double for objective lower and upper Then we have elements Then indices */ struct buildFormat { buildFormat *next; int itemNumber; int numberElements; double objective; double lower; double upper; double restDouble[1]; int restInt[1]; // just to make correct size }; //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinBuild::CoinBuild() : numberItems_(0) , numberOther_(0) , numberElements_(0) , currentItem_(NULL) , firstItem_(NULL) , lastItem_(NULL) , type_(-1) { } //------------------------------------------------------------------- // Constructor with type //------------------------------------------------------------------- CoinBuild::CoinBuild(int type) : numberItems_(0) , numberOther_(0) , numberElements_(0) , currentItem_(NULL) , firstItem_(NULL) , lastItem_(NULL) , type_(type) { if (type < 0 || type > 1) type_ = -1; // unset } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinBuild::CoinBuild(const CoinBuild &rhs) : numberItems_(rhs.numberItems_) , numberOther_(rhs.numberOther_) , numberElements_(rhs.numberElements_) , type_(rhs.type_) { if (numberItems_) { firstItem_ = NULL; buildFormat *lastItem = NULL; buildFormat *currentItem = reinterpret_cast< buildFormat * >(rhs.firstItem_); for (int iItem = 0; iItem < numberItems_; iItem++) { buildFormat *item = currentItem; assert(item); int numberElements = item->numberElements; int length = (CoinSizeofAsInt(buildFormat) + (numberElements - 1) * (CoinSizeofAsInt(double) + CoinSizeofAsInt(int))); int doubles = (length + CoinSizeofAsInt(double) - 1) / CoinSizeofAsInt(double); double *copyOfItem = new double[doubles]; memcpy(copyOfItem, item, length); if (!firstItem_) { firstItem_ = copyOfItem; } else { // update pointer lastItem->next = reinterpret_cast< buildFormat * >(copyOfItem); } currentItem = currentItem->next; // on to next lastItem = reinterpret_cast< buildFormat * >(copyOfItem); } currentItem_ = firstItem_; lastItem_ = reinterpret_cast< double * >(lastItem); } else { currentItem_ = NULL; firstItem_ = NULL; lastItem_ = NULL; } } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinBuild::~CoinBuild() { buildFormat *item = reinterpret_cast< buildFormat * >(firstItem_); for (int iItem = 0; iItem < numberItems_; iItem++) { double *array = reinterpret_cast< double * >(item); item = item->next; delete[] array; } } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinBuild & CoinBuild::operator=(const CoinBuild &rhs) { if (this != &rhs) { buildFormat *item = reinterpret_cast< buildFormat * >(firstItem_); for (int iItem = 0; iItem < numberItems_; iItem++) { double *array = reinterpret_cast< double * >(item); item = item->next; delete[] array; } numberItems_ = rhs.numberItems_; numberOther_ = rhs.numberOther_; numberElements_ = rhs.numberElements_; type_ = rhs.type_; if (numberItems_) { firstItem_ = NULL; buildFormat *lastItem = NULL; buildFormat *currentItem = reinterpret_cast< buildFormat * >(rhs.firstItem_); for (int iItem = 0; iItem < numberItems_; iItem++) { buildFormat *item = currentItem; assert(item); int numberElements = item->numberElements; int length = CoinSizeofAsInt(buildFormat) + (numberElements - 1) * (CoinSizeofAsInt(double) + CoinSizeofAsInt(int)); int doubles = (length + CoinSizeofAsInt(double) - 1) / CoinSizeofAsInt(double); double *copyOfItem = new double[doubles]; memcpy(copyOfItem, item, length); if (!firstItem_) { firstItem_ = copyOfItem; } else { // update pointer lastItem->next = reinterpret_cast< buildFormat * >(copyOfItem); } currentItem = currentItem->next; // on to next lastItem = reinterpret_cast< buildFormat * >(copyOfItem); } currentItem_ = firstItem_; lastItem_ = reinterpret_cast< double * >(lastItem); } else { currentItem_ = NULL; firstItem_ = NULL; lastItem_ = NULL; } } return *this; } // add a row void CoinBuild::addRow(int numberInRow, const int *columns, const double *elements, double rowLower, double rowUpper) { if (type_ < 0) { type_ = 0; } else if (type_ == 1) { printf("CoinBuild:: unable to add a row in column mode\n"); abort(); } if (numberInRow < 0) printf("bad number %d\n", numberInRow); // to stop compiler error addItem(numberInRow, columns, elements, rowLower, rowUpper, 0.0); if (numberInRow < 0) printf("bad number %d\n", numberInRow); // to stop compiler error } /* Returns number of elements in a row and information in row */ int CoinBuild::row(int whichRow, double &rowLower, double &rowUpper, const int *&indices, const double *&elements) const { assert(type_ == 0); setMutableCurrent(whichRow); double dummyObjective; return currentItem(rowLower, rowUpper, dummyObjective, indices, elements); } /* Returns number of elements in current row and information in row Used as rows may be stored in a chain */ int CoinBuild::currentRow(double &rowLower, double &rowUpper, const int *&indices, const double *&elements) const { assert(type_ == 0); double dummyObjective; return currentItem(rowLower, rowUpper, dummyObjective, indices, elements); } // Set current row void CoinBuild::setCurrentRow(int whichRow) { assert(type_ == 0); setMutableCurrent(whichRow); } // Returns current row number int CoinBuild::currentRow() const { assert(type_ == 0); return currentItem(); } // add a column void CoinBuild::addColumn(int numberInColumn, const int *rows, const double *elements, double columnLower, double columnUpper, double objectiveValue) { if (type_ < 0) { type_ = 1; } else if (type_ == 0) { printf("CoinBuild:: unable to add a column in row mode\n"); abort(); } addItem(numberInColumn, rows, elements, columnLower, columnUpper, objectiveValue); } /* Returns number of elements in a column and information in column */ int CoinBuild::column(int whichColumn, double &columnLower, double &columnUpper, double &objectiveValue, const int *&indices, const double *&elements) const { assert(type_ == 1); setMutableCurrent(whichColumn); return currentItem(columnLower, columnUpper, objectiveValue, indices, elements); } /* Returns number of elements in current column and information in column Used as columns may be stored in a chain */ int CoinBuild::currentColumn(double &columnLower, double &columnUpper, double &objectiveValue, const int *&indices, const double *&elements) const { assert(type_ == 1); return currentItem(columnLower, columnUpper, objectiveValue, indices, elements); } // Set current column void CoinBuild::setCurrentColumn(int whichColumn) { assert(type_ == 1); setMutableCurrent(whichColumn); } // Returns current column number int CoinBuild::currentColumn() const { assert(type_ == 1); return currentItem(); } // add a item void CoinBuild::addItem(int numberInItem, const int *indices, const double *elements, double itemLower, double itemUpper, double objectiveValue) { buildFormat *lastItem = reinterpret_cast< buildFormat * >(lastItem_); int length = CoinSizeofAsInt(buildFormat) + (numberInItem - 1) * (CoinSizeofAsInt(double) + CoinSizeofAsInt(int)); int doubles = (length + CoinSizeofAsInt(double) - 1) / CoinSizeofAsInt(double); double *newItem = new double[doubles]; if (!firstItem_) { firstItem_ = newItem; } else { // update pointer lastItem->next = reinterpret_cast< buildFormat * >(newItem); } lastItem_ = newItem; currentItem_ = newItem; // now fill in buildFormat *item = reinterpret_cast< buildFormat * >(newItem); double *els = &item->restDouble[0]; int *cols = reinterpret_cast< int * >(els + numberInItem); item->next = NULL; item->itemNumber = numberItems_; numberItems_++; item->numberElements = numberInItem; numberElements_ += numberInItem; item->objective = objectiveValue; item->lower = itemLower; item->upper = itemUpper; for (int k = 0; k < numberInItem; k++) { int iColumn = indices[k]; assert(iColumn >= 0); if (iColumn < 0) { printf("bad col %d\n", iColumn); // to stop compiler error abort(); } if (iColumn >= numberOther_) numberOther_ = iColumn + 1; els[k] = elements[k]; cols[k] = iColumn; } return; } /* Returns number of elements in a item and information in item */ int CoinBuild::item(int whichItem, double &itemLower, double &itemUpper, double &objectiveValue, const int *&indices, const double *&elements) const { setMutableCurrent(whichItem); return currentItem(itemLower, itemUpper, objectiveValue, indices, elements); } /* Returns number of elements in current item and information in item Used as items may be stored in a chain */ int CoinBuild::currentItem(double &itemLower, double &itemUpper, double &objectiveValue, const int *&indices, const double *&elements) const { buildFormat *item = reinterpret_cast< buildFormat * >(currentItem_); if (item) { int numberElements = item->numberElements; elements = &item->restDouble[0]; indices = reinterpret_cast< const int * >(elements + numberElements); objectiveValue = item->objective; itemLower = item->lower; itemUpper = item->upper; return numberElements; } else { return -1; } } // Set current item void CoinBuild::setCurrentItem(int whichItem) { setMutableCurrent(whichItem); } // Set current item void CoinBuild::setMutableCurrent(int whichItem) const { if (whichItem >= 0 && whichItem < numberItems_) { int nSkip = whichItem - 1; buildFormat *item = reinterpret_cast< buildFormat * >(firstItem_); // if further on then we can start from where we are buildFormat *current = reinterpret_cast< buildFormat * >(currentItem_); if (current->itemNumber <= whichItem) { item = current; nSkip = whichItem - current->itemNumber; } for (int iItem = 0; iItem < nSkip; iItem++) { item = item->next; } assert(whichItem == item->itemNumber); currentItem_ = reinterpret_cast< double * >(item); } } // Returns current item number int CoinBuild::currentItem() const { buildFormat *item = reinterpret_cast< buildFormat * >(currentItem_); if (item) return item->itemNumber; else return -1; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveFixed.cpp0000644000175200017520000006314113414454441017660 0ustar coincoin/* $Id: CoinPresolveFixed.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveFixed.hpp" #include "CoinHelperFunctions.hpp" #include "CoinFinite.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif /* Begin routines associated with remove_fixed_action */ const char *remove_fixed_action::name() const { return ("remove_fixed_action"); } /* * Original comment: * * invariant: both reps are loosely packed. * coefficients of both reps remain consistent. * * Note that this concerns variables whose column bounds determine that * they are slack; this does NOT concern singleton row constraints that * determine that the relevant variable is slack. * * Invariant: col and row rep are consistent */ /* This routine empties the columns for the list of fixed variables passed in (fcols, nfcols). As each coefficient a is set to 0, rlo and rup are adjusted accordingly. Note, however, that c is not considered to be removed from the objective until column j is physically removed from the matrix (drop_empty_cols_action), so the correction to the objective is adjusted there. If a column solution is available, row activity (acts_) is adjusted. remove_fixed_action implicitly assumes that the value of the variable has already been forced within bounds. If this isn't true, the correction to acts_ will be wrong. See make_fixed_action if you need to force the value within bounds first. */ const remove_fixed_action * remove_fixed_action::presolve(CoinPresolveMatrix *prob, int *fcols, int nfcols, const CoinPresolveAction *next) { double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; double *rowels = prob->rowels_; int *hcol = prob->hcol_; CoinBigIndex *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; double *clo = prob->clo_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *sol = prob->sol_; double *acts = prob->acts_; presolvehlink *clink = prob->clink_; presolvehlink *rlink = prob->rlink_; action *actions = new action[nfcols + 1]; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering remove_fixed_action::presolve; processing " << nfcols << " fixed columns." << std::endl; #endif presolve_check_sol(prob); presolve_check_nbasic(prob); #endif /* Scan columns to be removed and total up the number of coefficients. */ int estsize = 0; int ckc; int n = 0; for (ckc = 0; ckc < nfcols; ckc++) { int j = fcols[ckc]; if (!prob->colProhibited2(j)) { estsize += hincol[j]; fcols[n++] = j; } } nfcols = n; // Allocate arrays to hold coefficients and associated row indices double *els_action = new double[estsize]; int *rows_action = new int[estsize]; int actsize = 0; // faster to do all deletes in row copy at once int nrows = prob->nrows_; CoinBigIndex *rstrt = new CoinBigIndex[nrows + 1]; CoinZeroN(rstrt, nrows); /* Open a loop to excise each column a. The first thing to do is load the action entry with the index j, the value of x, and the number of entries in a. After we walk the column and tweak the row-major representation, we'll simply claim this column is empty by setting hincol[j] = 0. */ for (ckc = 0; ckc < nfcols; ckc++) { int j = fcols[ckc]; double solj = clo[j]; CoinBigIndex kcs = mcstrt[j]; CoinBigIndex kce = kcs + hincol[j]; CoinBigIndex k; { action &f = actions[ckc]; f.col = j; f.sol = solj; f.start = actsize; } /* Now walk a. For each row i with a coefficient a != 0: * save the coefficient and row index, * substitute the value of x, adjusting the row bounds and lhs value accordingly, then * delete a from the row-major representation. * Finally: mark the row as changed and add it to the list of rows to be processed next. Then, for each remaining column in the row, put it on the list of columns to be processed. */ for (k = kcs; k < kce; k++) { int row = hrow[k]; double coeff = colels[k]; els_action[actsize] = coeff; rstrt[row]++; // increase counts rows_action[actsize++] = row; // Avoid reducing finite infinity. if (-PRESOLVE_INF < rlo[row]) rlo[row] -= solj * coeff; if (rup[row] < PRESOLVE_INF) rup[row] -= solj * coeff; if (sol) { acts[row] -= solj * coeff; } #define TRY2 #ifndef TRY2 presolve_delete_from_row(row, j, mrstrt, hinrow, hcol, rowels); if (hinrow[row] == 0) { PRESOLVE_REMOVE_LINK(rlink, row); } // mark unless already marked if (!prob->rowChanged(row)) { prob->addRow(row); CoinBigIndex krs = mrstrt[row]; CoinBigIndex kre = krs + hinrow[row]; for (CoinBigIndex k = krs; k < kre; k++) { int jcol = hcol[k]; prob->addCol(jcol); } } #endif } /* Remove the column's link from the linked list of columns, and declare it empty in the column-major representation. Link removal must execute even if the column is already of length 0 when it arrives. */ PRESOLVE_REMOVE_LINK(clink, j); hincol[j] = 0; } /* Set the actual end of the coefficient and row index arrays. */ actions[nfcols].start = actsize; #if PRESOLVE_SUMMARY printf("NFIXED: %d", nfcols); if (estsize - actsize > 0) { printf(", overalloc %d", estsize - actsize); } printf("\n"); #endif // Now get columns by row int *column = new int[actsize]; CoinBigIndex nel = 0; int iRow; for (iRow = 0; iRow < nrows; iRow++) { CoinBigIndex n = rstrt[iRow]; rstrt[iRow] = nel; nel += n; } rstrt[nrows] = nel; for (ckc = 0; ckc < nfcols; ckc++) { int kcs = actions[ckc].start; int j = actions[ckc].col; int kce; if (ckc < nfcols - 1) kce = actions[ckc + 1].start; else kce = actsize; for (int k = kcs; k < kce; k++) { int iRow = rows_action[k]; CoinBigIndex put = rstrt[iRow]; rstrt[iRow]++; column[put] = j; } } // Now do rows int ncols = prob->ncols_; char *mark = new char[ncols]; memset(mark, 0, ncols); // rstrts are now one out i.e. rstrt[0] is end of row 0 nel = 0; #ifdef TRY2 for (iRow = 0; iRow < nrows; iRow++) { CoinBigIndex k; for (k = nel; k < rstrt[iRow]; k++) { mark[column[k]] = 1; } presolve_delete_many_from_major(iRow, mark, mrstrt, hinrow, hcol, rowels); #if PRESOLVE_DEBUG > 0 for (k = nel; k < rstrt[iRow]; k++) { assert(mark[column[k]] == 0); } #endif if (hinrow[iRow] == 0) { PRESOLVE_REMOVE_LINK(rlink, iRow); } // mark unless already marked if (!prob->rowChanged(iRow)) { prob->addRow(iRow); CoinBigIndex krs = mrstrt[iRow]; CoinBigIndex kre = krs + hinrow[iRow]; for (CoinBigIndex k = krs; k < kre; k++) { int jcol = hcol[k]; prob->addCol(jcol); } } nel = rstrt[iRow]; } #endif delete[] mark; delete[] column; delete[] rstrt; /* Create the postsolve object, link it at the head of the list of postsolve objects, and return a pointer. */ const remove_fixed_action *fixedActions = new remove_fixed_action(nfcols, actions, els_action, rows_action, next); #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving remove_fixed_action::presolve." << std::endl; #endif #endif return (fixedActions); } remove_fixed_action::remove_fixed_action(int nactions, action *actions, double *els_action, int *rows_action, const CoinPresolveAction *next) : CoinPresolveAction(next) , colrows_(rows_action) , colels_(els_action) , nactions_(nactions) , actions_(actions) { } remove_fixed_action::~remove_fixed_action() { deleteAction(actions_, action *); delete[] colels_; delete[] colrows_; } /* * Say we determined that cup - clo <= ztolzb, so we fixed sol at clo. * This involved subtracting clo*coeff from ub/lb for each row the * variable occurred in. * Now when we put the variable back in, by construction the variable * is within tolerance, the non-slacks are unchanged, and the * distances of the affected slacks from their bounds should remain * unchanged (ignoring roundoff errors). * It may be that by adding the term back in, the affected constraints * now aren't as accurate due to round-off errors; this could happen * if only one summand and the slack in the original formulation were large * (and naturally had opposite signs), and the new term in the constraint * is about the size of the old slack, so the new slack becomes about 0. * It may be that there is catastrophic cancellation in the summation, * so it might not compute to 0. */ void remove_fixed_action::postsolve(CoinPostsolveMatrix *prob) const { action *actions = actions_; const int nactions = nactions_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; CoinBigIndex *link = prob->link_; CoinBigIndex &free_list = prob->free_list_; double *clo = prob->clo_; double *cup = prob->cup_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *sol = prob->sol_; double *dcost = prob->cost_; double *rcosts = prob->rcosts_; double *acts = prob->acts_; double *rowduals = prob->rowduals_; unsigned char *colstat = prob->colstat_; const double maxmin = prob->maxmin_; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 char *cdone = prob->cdone_; #if PRESOLVE_DEBUG > 0 std::cout << "Entering remove_fixed_action::postsolve, repopulating " << nactions << " columns." << std::endl; #endif presolve_check_threads(prob); presolve_check_free_list(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #endif double *els_action = colels_; int *rows_action = colrows_; int end = actions[nactions].start; /* At one point, it turned out that forcing_constraint_action was putting duplicates in the column list it passed to remove_fixed_action. This is now fixed, but ... it looks to me like we could be in trouble here if we reinstate a column multiple times. Hence the assert. */ for (const action *f = &actions[nactions - 1]; actions <= f; f--) { int icol = f->col; const double thesol = f->sol; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 if (cdone[icol] == FIXED_VARIABLE) { std::cout << "RFA::postsolve: column " << icol << " already unfixed!" << std::endl; assert(cdone[icol] != FIXED_VARIABLE); } cdone[icol] = FIXED_VARIABLE; #endif sol[icol] = thesol; clo[icol] = thesol; cup[icol] = thesol; CoinBigIndex cs = NO_LINK; int start = f->start; double dj = maxmin * dcost[icol]; for (int i = start; i < end; ++i) { int row = rows_action[i]; double coeff = els_action[i]; // pop free_list CoinBigIndex k = free_list; assert(k >= 0 && k < prob->bulk0_); free_list = link[free_list]; // restore hrow[k] = row; colels[k] = coeff; link[k] = cs; cs = k; if (-PRESOLVE_INF < rlo[row]) rlo[row] += coeff * thesol; if (rup[row] < PRESOLVE_INF) rup[row] += coeff * thesol; acts[row] += coeff * thesol; dj -= rowduals[row] * coeff; } #if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob); #endif mcstrt[icol] = cs; rcosts[icol] = dj; hincol[icol] = end - start; end = start; /* Original comment: * the bounds in the reduced problem were tightened. * that means that this variable may not have been basic * because it didn't have to be, * but now it may have to. * no - the bounds aren't changed by this operation */ /* We've reintroduced the variable, but it's still fixed (equal bounds). Pick the nonbasic status that agrees with the reduced cost. Later, if postsolve unfixes the variable, we'll need to confirm that this status is still viable. We live in a minimisation world here. */ if (colstat) { if (dj < 0) prob->setColumnStatus(icol, CoinPrePostsolveMatrix::atUpperBound); else prob->setColumnStatus(icol, CoinPrePostsolveMatrix::atLowerBound); } } #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_threads(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving remove_fixed_action::postsolve." << std::endl; #endif #endif return; } /* Scan the problem for variables that are already fixed, and remove them. There's an implicit assumption that the value of the variable is already within bounds. If you want to protect against this possibility, you want to use make_fixed. */ const CoinPresolveAction *remove_fixed(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { int ncols = prob->ncols_; int *fcols = new int[ncols]; int nfcols = 0; int *hincol = prob->hincol_; double *clo = prob->clo_; double *cup = prob->cup_; for (int i = 0; i < ncols; i++) if (hincol[i] > 0 && clo[i] == cup[i] && !prob->colProhibited2(i)) fcols[nfcols++] = i; if (nfcols > 0) { next = remove_fixed_action::presolve(prob, fcols, nfcols, next); } delete[] fcols; return (next); } /* End routines associated with remove_fixed_action */ /* Begin routines associated with make_fixed_action */ const char *make_fixed_action::name() const { return ("make_fixed_action"); } /* This routine does the actual job of fixing one or more variables. The set of indices to be fixed is specified by nfcols and fcols. fix_to_lower specifies the bound where the variable(s) should be fixed. The other bound is preserved as part of the action and the bounds are set equal. Note that you don't get to specify the bound on a per-variable basis. If a primal solution is available, make_fixed_action will adjust the the row activity to compensate for forcing the variable within bounds. If the bounds are already equal, and the variable is within bounds, you should consider remove_fixed_action. */ const CoinPresolveAction * make_fixed_action::presolve(CoinPresolveMatrix *prob, int *fcols, int nfcols, bool fix_to_lower, const CoinPresolveAction *next) { double *clo = prob->clo_; double *cup = prob->cup_; double *csol = prob->sol_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; double *acts = prob->acts_; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering make_fixed_action::presolve, fixed = " << nfcols << "." << std::endl; #endif presolve_check_sol(prob); presolve_check_nbasic(prob); #endif /* Shouldn't happen, but ... */ if (nfcols <= 0) { #if PRESOLVE_DEBUG > 0 std::cout << "make_fixed_action::presolve: useless call, " << nfcols << " to fix." << std::endl; #endif return (next); } action *actions = new action[nfcols]; /* Scan the set of indices specifying variables to be fixed. For each variable, stash the unused bound in the action and set the bounds equal. If the client has passed in a primal solution, update it if the value of the variable changes. */ for (int ckc = 0; ckc < nfcols; ckc++) { int j = fcols[ckc]; if (prob->colProhibited2(j)) abort(); double movement = 0; action &f = actions[ckc]; f.col = j; if (fix_to_lower) { f.bound = cup[j]; cup[j] = clo[j]; if (csol) { movement = clo[j] - csol[j]; csol[j] = clo[j]; } } else { f.bound = clo[j]; clo[j] = cup[j]; if (csol) { movement = cup[j] - csol[j]; csol[j] = cup[j]; } } if (movement) { CoinBigIndex k; for (k = mcstrt[j]; k < mcstrt[j] + hincol[j]; k++) { int row = hrow[k]; acts[row] += movement * colels[k]; } } } /* Original comment: This is unusual in that the make_fixed_action transform contains within it a remove_fixed_action transform. Bad idea? Explanatory comment: Now that we've adjusted the bounds, time to create the postsolve action that will restore the original bounds. But wait! We're not done. By calling remove_fixed_action::presolve, we will (virtually) remove these variables from the model by substituting for the variable where it occurs and emptying the column. Cache the postsolve transform that will repopulate the column inside the postsolve transform for fixing the bounds. */ if (nfcols > 0) { next = new make_fixed_action(nfcols, actions, fix_to_lower, remove_fixed_action::presolve(prob, fcols, nfcols, 0), next); } #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving make_fixed_action::presolve." << std::endl; #endif #endif return (next); } /* Recall that in presolve, make_fixed_action forced a bound to fix a variable, then called remove_fixed_action to empty the column. removed_fixed_action left a postsolve object hanging off faction_, and our first act here is to call r_f_a::postsolve to repopulate the columns. The m_f_a postsolve activity consists of relaxing one of the bounds and making sure that the status is still viable (we can potentially eliminate the bound here). */ void make_fixed_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_; const int nactions = nactions_; const bool fix_to_lower = fix_to_lower_; double *clo = prob->clo_; double *cup = prob->cup_; double *sol = prob->sol_; unsigned char *colstat = prob->colstat_; #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering make_fixed_action::postsolve." << std::endl; #endif presolve_check_threads(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #endif /* Repopulate the columns. */ assert(nactions == faction_->nactions_); faction_->postsolve(prob); /* Walk the actions: restore each bound and check that the status is still appropriate. Given that we're unfixing a fixed variable, it's safe to assume that the unaffected bound is finite. */ for (int cnt = nactions - 1; cnt >= 0; cnt--) { const action *f = &actions[cnt]; int icol = f->col; double xj = sol[icol]; assert(faction_->actions_[cnt].col == icol); if (fix_to_lower) { double ub = f->bound; cup[icol] = ub; if (colstat) { if (ub >= PRESOLVE_INF || xj != ub) { prob->setColumnStatus(icol, CoinPrePostsolveMatrix::atLowerBound); } } } else { double lb = f->bound; clo[icol] = lb; if (colstat) { if (lb <= -PRESOLVE_INF || xj != lb) { prob->setColumnStatus(icol, CoinPrePostsolveMatrix::atUpperBound); } } } } #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_threads(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); std::cout << "Leaving make_fixed_action::postsolve." << std::endl; #endif return; } /* Scan the columns and collect indices of columns that have upper and lower bounds within the zero tolerance of one another. Hand this list to make_fixed_action::presolve() to do the heavy lifting. make_fixed_action will compensate for variables which are infeasible, forcing them to feasibility and correcting the row activity, before invoking remove_fixed_action to remove the variable from the problem. If you're confident of feasibility, consider remove_fixed. */ const CoinPresolveAction *make_fixed(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering make_fixed, checking " << prob->ncols_ << " columns." << std::endl; #endif presolve_check_sol(prob); presolve_check_nbasic(prob); #endif int ncols = prob->ncols_; int *fcols = prob->usefulColumnInt_; int nfcols = 0; int *hincol = prob->hincol_; double *clo = prob->clo_; double *cup = prob->cup_; for (int i = 0; i < ncols; i++) { if (hincol[i] > 0 && fabs(cup[i] - clo[i]) < ZTOLDP && !prob->colProhibited2(i)) { fcols[nfcols++] = i; } } /* Call m_f_a::presolve to do the heavy lifting. This will create a new CoinPresolveAction, which will become the head of the list of CoinPresolveAction's currently pointed to by next. No point in going through the effort of a call if there are no fixed variables. */ if (nfcols > 0) next = make_fixed_action::presolve(prob, fcols, nfcols, true, next); #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving make_fixed, fixed " << nfcols << " columns." << std::endl; #endif #endif return (next); } /* Transfer the cost coefficient of a column singleton in an equality to the cost coefficients of the remaining variables. Suppose x is the singleton and x is some other variable. For movement delta, there must be compensating change delta = -(a/a)delta. Substituting in the objective, cdelta + cdelta becomes c(-a/a)delta + cdelta (c - c(a/a))delta This is transform (A) below. */ void transferCosts(CoinPresolveMatrix *prob) { double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; double *rowels = prob->rowels_; int *hcol = prob->hcol_; CoinBigIndex *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *clo = prob->clo_; double *cup = prob->cup_; int ncols = prob->ncols_; double *cost = prob->cost_; unsigned char *integerType = prob->integerType_; double bias = prob->dobias_; #if PRESOLVE_DEBUG > 0 std::cout << "Entering transferCosts." << std::endl; presolve_check_sol(prob); presolve_check_nbasic(prob); #endif int numberIntegers = 0; for (int icol = 0; icol < ncols; icol++) { if (integerType[icol]) numberIntegers++; } /* For unfixed column singletons in equalities, calculate and install transform (A) described in the comments at the head of the method. */ int nchanged = 0; for (int js = 0; js < ncols; js++) { if (cost[js] && hincol[js] == 1 && cup[js] > clo[js]) { const CoinBigIndex &jsstrt = mcstrt[js]; const int &i = hrow[jsstrt]; if (rlo[i] == rup[i]) { const double ratio = cost[js] / colels[jsstrt]; bias += rlo[i] * ratio; const CoinBigIndex &istrt = mrstrt[i]; const CoinBigIndex iend = istrt + hinrow[i]; for (CoinBigIndex jj = istrt; jj < iend; jj++) { int j = hcol[jj]; double aij = rowels[jj]; cost[j] -= ratio * aij; } cost[js] = 0.0; nchanged++; } } } #if PRESOLVE_DEBUG > 0 if (nchanged) std::cout << " transferred costs for " << nchanged << " singleton columns." << std::endl; int nPasses = 0; #endif /* We don't really need a singleton column to do this trick, just an equality. But if the column's not a singleton, it's only worth doing if we can move costs onto integer variables that start with costs of zero. Try and find some unfixed variable with a nonzero cost, that's involved in an equality where there are integer variables with costs of zero. If there's a net gain in the number of integer variables with costs (nThen > nNow), do the transform. One per column, please. */ if (numberIntegers) { int changed = -1; while (changed) { changed = 0; for (int js = 0; js < ncols; js++) { if (cost[js] && cup[js] > clo[js]) { const CoinBigIndex &jsstrt = mcstrt[js]; const CoinBigIndex jsend = jsstrt + hincol[js]; for (CoinBigIndex ii = jsstrt; ii < jsend; ii++) { const int &i = hrow[ii]; if (rlo[i] == rup[i]) { int nNow = ((integerType[js]) ? 1 : 0); int nThen = 0; const CoinBigIndex &istrt = mrstrt[i]; const CoinBigIndex iend = istrt + hinrow[i]; for (CoinBigIndex jj = istrt; jj < iend; jj++) { int j = hcol[jj]; if (!cost[j] && integerType[j]) nThen++; } if (nThen > nNow) { const double ratio = cost[js] / colels[jsstrt]; bias += rlo[i] * ratio; for (CoinBigIndex jj = istrt; jj < iend; jj++) { int j = hcol[jj]; double aij = rowels[jj]; cost[j] -= ratio * aij; } cost[js] = 0.0; changed++; break; } } } } } if (changed) { nchanged += changed; #if PRESOLVE_DEBUG > 0 std::cout << " pass " << nPasses++ << " transferred costs to " << changed << " integer variables." << std::endl; #endif } } } #if PRESOLVE_DEBUG > 0 if (bias != prob->dobias_) std::cout << " new bias " << bias << "." << std::endl; #endif prob->dobias_ = bias; #if PRESOLVE_DEBUG > 0 std::cout << "Leaving transferCosts." << std::endl; presolve_check_sol(prob); presolve_check_nbasic(prob); #endif } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinFloatEqual.hpp0000644000175200017520000000744513414454441017150 0ustar coincoin/* $Id: CoinFloatEqual.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinFloatEqual_H #define CoinFloatEqual_H #include #include #include "CoinFinite.hpp" /*! \file CoinFloatEqual.hpp \brief Function objects for testing equality of real numbers. Two objects are provided; one tests for equality to an absolute tolerance, one to a scaled tolerance. The tests will handle IEEE floating point, but note that infinity == infinity. Mathematicians are rolling in their graves, but this matches the behaviour for the common practice of using DBL_MAX (numeric_limits::max(), or similar large finite number) as infinity.

Example usage: @verbatim double d1 = 3.14159 ; double d2 = d1 ; double d3 = d1+.0001 ; CoinAbsFltEq eq1 ; CoinAbsFltEq eq2(.001) ; assert( eq1(d1,d2) ) ; assert( !eq1(d1,d3) ) ; assert( eq2(d1,d3) ) ; @endverbatim CoinRelFltEq follows the same pattern. */ /*! \brief Equality to an absolute tolerance Operands are considered equal if their difference is within an epsilon ; the test does not consider the relative magnitude of the operands. */ class CoinAbsFltEq { public: //! Compare function inline bool operator()(const double f1, const double f2) const { if (CoinIsnan(f1) || CoinIsnan(f2)) return false; if (f1 == f2) return true; return (fabs(f1 - f2) < epsilon_); } /*! \name Constructors and destructors */ //@{ /*! \brief Default constructor Default tolerance is 1.0e-10. */ CoinAbsFltEq() : epsilon_(1.e-10) { } //! Alternate constructor with epsilon as a parameter CoinAbsFltEq(const double epsilon) : epsilon_(epsilon) { } //! Destructor virtual ~CoinAbsFltEq() {} //! Copy constructor CoinAbsFltEq(const CoinAbsFltEq &src) : epsilon_(src.epsilon_) { } //! Assignment CoinAbsFltEq &operator=(const CoinAbsFltEq &rhs) { if (this != &rhs) epsilon_ = rhs.epsilon_; return (*this); } //@} private: /*! \name Private member data */ //@{ //! Equality tolerance. double epsilon_; //@} }; /*! \brief Equality to a scaled tolerance Operands are considered equal if their difference is within a scaled epsilon calculated as epsilon_*(1+CoinMax(|f1|,|f2|)). */ class CoinRelFltEq { public: //! Compare function inline bool operator()(const double f1, const double f2) const { if (CoinIsnan(f1) || CoinIsnan(f2)) return false; if (f1 == f2) return true; if (!CoinFinite(f1) || !CoinFinite(f2)) return false; double tol = (fabs(f1) > fabs(f2)) ? fabs(f1) : fabs(f2); return (fabs(f1 - f2) <= epsilon_ * (1 + tol)); } /*! \name Constructors and destructors */ //@{ #ifndef COIN_FLOAT /*! Default constructor Default tolerance is 1.0e-10. */ CoinRelFltEq() : epsilon_(1.e-10) { } #else /*! Default constructor Default tolerance is 1.0e-6. */ CoinRelFltEq() : epsilon_(1.e-6) {}; // as float #endif //! Alternate constructor with epsilon as a parameter CoinRelFltEq(const double epsilon) : epsilon_(epsilon) { } //! Destructor virtual ~CoinRelFltEq() {} //! Copy constructor CoinRelFltEq(const CoinRelFltEq &src) : epsilon_(src.epsilon_) { } //! Assignment CoinRelFltEq &operator=(const CoinRelFltEq &rhs) { if (this != &rhs) epsilon_ = rhs.epsilon_; return (*this); } //@} private: /*! \name Private member data */ //@{ //! Base equality tolerance double epsilon_; //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPackedVector.hpp0000644000175200017520000005073413414454441017464 0ustar coincoin/* $Id: CoinPackedVector.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPackedVector_H #define CoinPackedVector_H #include #include "CoinPragma.hpp" #include "CoinPackedVectorBase.hpp" #include "CoinSort.hpp" #ifdef COIN_FAST_CODE #ifndef COIN_NOTEST_DUPLICATE #define COIN_NOTEST_DUPLICATE #endif #endif #ifndef COIN_NOTEST_DUPLICATE #define COIN_DEFAULT_VALUE_FOR_DUPLICATE true #else #define COIN_DEFAULT_VALUE_FOR_DUPLICATE false #endif /** Sparse Vector Stores vector of indices and associated element values. Supports sorting of vector while maintaining the original indices. Here is a sample usage: @verbatim const int ne = 4; int inx[ne] = { 1, 4, 0, 2 } double el[ne] = { 10., 40., 1., 50. } // Create vector and set its value CoinPackedVector r(ne,inx,el); // access each index and element assert( r.indices ()[0]== 1 ); assert( r.elements()[0]==10. ); assert( r.indices ()[1]== 4 ); assert( r.elements()[1]==40. ); assert( r.indices ()[2]== 0 ); assert( r.elements()[2]== 1. ); assert( r.indices ()[3]== 2 ); assert( r.elements()[3]==50. ); // access original position of index assert( r.originalPosition()[0]==0 ); assert( r.originalPosition()[1]==1 ); assert( r.originalPosition()[2]==2 ); assert( r.originalPosition()[3]==3 ); // access as a full storage vector assert( r[ 0]==1. ); assert( r[ 1]==10.); assert( r[ 2]==50.); assert( r[ 3]==0. ); assert( r[ 4]==40.); // sort Elements in increasing order r.sortIncrElement(); // access each index and element assert( r.indices ()[0]== 0 ); assert( r.elements()[0]== 1. ); assert( r.indices ()[1]== 1 ); assert( r.elements()[1]==10. ); assert( r.indices ()[2]== 4 ); assert( r.elements()[2]==40. ); assert( r.indices ()[3]== 2 ); assert( r.elements()[3]==50. ); // access original position of index assert( r.originalPosition()[0]==2 ); assert( r.originalPosition()[1]==0 ); assert( r.originalPosition()[2]==1 ); assert( r.originalPosition()[3]==3 ); // access as a full storage vector assert( r[ 0]==1. ); assert( r[ 1]==10.); assert( r[ 2]==50.); assert( r[ 3]==0. ); assert( r[ 4]==40.); // Restore orignal sort order r.sortOriginalOrder(); assert( r.indices ()[0]== 1 ); assert( r.elements()[0]==10. ); assert( r.indices ()[1]== 4 ); assert( r.elements()[1]==40. ); assert( r.indices ()[2]== 0 ); assert( r.elements()[2]== 1. ); assert( r.indices ()[3]== 2 ); assert( r.elements()[3]==50. ); // Tests for equality and equivalence CoinPackedVector r1; r1=r; assert( r==r1 ); assert( r.equivalent(r1) ); r.sortIncrElement(); assert( r!=r1 ); assert( r.equivalent(r1) ); // Add packed vectors. // Similarly for subtraction, multiplication, // and division. CoinPackedVector add = r + r1; assert( add[0] == 1.+ 1. ); assert( add[1] == 10.+10. ); assert( add[2] == 50.+50. ); assert( add[3] == 0.+ 0. ); assert( add[4] == 40.+40. ); assert( r.sum() == 10.+40.+1.+50. ); @endverbatim */ class CoinPackedVector : public CoinPackedVectorBase { friend void CoinPackedVectorUnitTest(); public: /**@name Get methods. */ //@{ /// Get the size virtual int getNumElements() const { return nElements_; } /// Get indices of elements virtual const int *getIndices() const { return indices_; } /// Get element values virtual const double *getElements() const { return elements_; } /// Get indices of elements int *getIndices() { return indices_; } /// Get the size inline int getVectorNumElements() const { return nElements_; } /// Get indices of elements inline const int *getVectorIndices() const { return indices_; } /// Get element values inline const double *getVectorElements() const { return elements_; } /// Get element values double *getElements() { return elements_; } /** Get pointer to int * vector of original postions. If the packed vector has not been sorted then this function returns the vector: 0, 1, 2, ..., size()-1. */ const int *getOriginalPosition() const { return origIndices_; } //@} //------------------------------------------------------------------- // Set indices and elements //------------------------------------------------------------------- /**@name Set methods */ //@{ /// Reset the vector (as if were just created an empty vector) void clear(); /** Assignment operator.
NOTE: This operator keeps the current testForDuplicateIndex setting, and affter copying the data it acts accordingly. */ CoinPackedVector &operator=(const CoinPackedVector &); /** Assignment operator from a CoinPackedVectorBase.
NOTE: This operator keeps the current testForDuplicateIndex setting, and affter copying the data it acts accordingly. */ CoinPackedVector &operator=(const CoinPackedVectorBase &rhs); /** Assign the ownership of the arguments to this vector. Size is the length of both the indices and elements vectors. The indices and elements vectors are copied into this class instance's member data. The last argument indicates whether this vector will have to be tested for duplicate indices. */ void assignVector(int size, int *&inds, double *&elems, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Set vector size, indices, and elements. Size is the length of both the indices and elements vectors. The indices and elements vectors are copied into this class instance's member data. The last argument specifies whether this vector will have to be checked for duplicate indices whenever that can happen. */ void setVector(int size, const int *inds, const double *elems, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Elements set to have the same scalar value */ void setConstant(int size, const int *inds, double elems, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Indices are not specified and are taken to be 0,1,...,size-1 */ void setFull(int size, const double *elems, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Indices are not specified and are taken to be 0,1,...,size-1, but only where non zero*/ void setFullNonZero(int size, const double *elems, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Set an existing element in the packed vector The first argument is the "index" into the elements() array */ void setElement(int index, double element); /// Insert an element into the vector void insert(int index, double element); /// Append a CoinPackedVector to the end void append(const CoinPackedVectorBase &caboose); /// Swap values in positions i and j of indices and elements void swap(int i, int j); /** Resize the packed vector to be the first newSize elements. Problem with truncate: what happens with origIndices_ ??? */ void truncate(int newSize); //@} /**@name Arithmetic operators. */ //@{ /// add value to every entry void operator+=(double value); /// subtract value from every entry void operator-=(double value); /// multiply every entry by value void operator*=(double value); /// divide every entry by value void operator/=(double value); //@} /**@name Sorting */ //@{ /** Sort the packed storage vector. Typcical usages:

 
       packedVector.sort(CoinIncrIndexOrdered());   //increasing indices
       packedVector.sort(CoinIncrElementOrdered()); // increasing elements
       
*/ template < class CoinCompare3 > void sort(const CoinCompare3 &tc) { CoinSort_3(indices_, indices_ + nElements_, origIndices_, elements_, tc); } void sortIncrIndex() { CoinSort_3(indices_, indices_ + nElements_, origIndices_, elements_, CoinFirstLess_3< int, int, double >()); } void sortDecrIndex() { CoinSort_3(indices_, indices_ + nElements_, origIndices_, elements_, CoinFirstGreater_3< int, int, double >()); } void sortIncrElement() { CoinSort_3(elements_, elements_ + nElements_, origIndices_, indices_, CoinFirstLess_3< double, int, int >()); } void sortDecrElement() { CoinSort_3(elements_, elements_ + nElements_, origIndices_, indices_, CoinFirstGreater_3< double, int, int >()); } /** Sort in original order. If the vector has been sorted, then this method restores to its orignal sort order. */ void sortOriginalOrder(); //@} /**@name Memory usage */ //@{ /** Reserve space. If one knows the eventual size of the packed vector, then it may be more efficient to reserve the space. */ void reserve(int n); /** capacity returns the size which could be accomodated without having to reallocate storage. */ int capacity() const { return capacity_; } //@} /**@name Constructors and destructors */ //@{ /** Default constructor */ CoinPackedVector(bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** \brief Alternate Constructors - set elements to vector of doubles This constructor copies the vectors provided as parameters. */ CoinPackedVector(int size, const int *inds, const double *elems, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** \brief Alternate Constructors - set elements to vector of doubles This constructor takes ownership of the vectors passed as parameters. \p inds and \p elems will be NULL on return. */ CoinPackedVector(int capacity, int size, int *&inds, double *&elems, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Alternate Constructors - set elements to same scalar value */ CoinPackedVector(int size, const int *inds, double element, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Alternate Constructors - construct full storage with indices 0 through size-1. */ CoinPackedVector(int size, const double *elements, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /** Copy constructor. */ CoinPackedVector(const CoinPackedVector &); /** Copy constructor from a PackedVectorBase. */ CoinPackedVector(const CoinPackedVectorBase &rhs); /** Destructor */ virtual ~CoinPackedVector(); //@} private: /**@name Private methods */ //@{ /// Copy internal date void gutsOfSetVector(int size, const int *inds, const double *elems, bool testForDuplicateIndex, const char *method); /// void gutsOfSetConstant(int size, const int *inds, double value, bool testForDuplicateIndex, const char *method); //@} private: /**@name Private member data */ //@{ /// Vector indices int *indices_; ///Vector elements double *elements_; /// Size of indices and elements vectors int nElements_; /// original unsorted indices int *origIndices_; /// Amount of memory allocated for indices_, origIndices_, and elements_. int capacity_; //@} }; //############################################################################# /**@name Arithmetic operators on packed vectors. NOTE: These methods operate on those positions where at least one of the arguments has a value listed. At those positions the appropriate operation is executed, Otherwise the result of the operation is considered 0.
NOTE 2: There are two kind of operators here. One is used like "c = binaryOp(a, b)", the other is used like "binaryOp(c, a, b)", but they are really the same. The first is much more natural to use, but it involves the creation of a temporary object (the function *must* return an object), while the second form puts the result directly into the argument "c". Therefore, depending on the circumstances, the second form can be significantly faster. */ //@{ template < class BinaryFunction > void binaryOp(CoinPackedVector &retVal, const CoinPackedVectorBase &op1, double value, BinaryFunction bf) { retVal.clear(); const int s = op1.getNumElements(); if (s > 0) { retVal.reserve(s); const int *inds = op1.getIndices(); const double *elems = op1.getElements(); for (int i = 0; i < s; ++i) { retVal.insert(inds[i], bf(value, elems[i])); } } } template < class BinaryFunction > inline void binaryOp(CoinPackedVector &retVal, double value, const CoinPackedVectorBase &op2, BinaryFunction bf) { binaryOp(retVal, op2, value, bf); } template < class BinaryFunction > void binaryOp(CoinPackedVector &retVal, const CoinPackedVectorBase &op1, const CoinPackedVectorBase &op2, BinaryFunction bf) { retVal.clear(); const int s1 = op1.getNumElements(); const int s2 = op2.getNumElements(); /* Replaced || with &&, in response to complaint from Sven deVries, who rightly points out || is not appropriate for additive operations. && should be ok as long as binaryOp is understood not to create something from nothing. -- lh, 04.06.11 */ if (s1 == 0 && s2 == 0) return; retVal.reserve(s1 + s2); const int *inds1 = op1.getIndices(); const double *elems1 = op1.getElements(); const int *inds2 = op2.getIndices(); const double *elems2 = op2.getElements(); int i; // loop once for each element in op1 for (i = 0; i < s1; ++i) { const int index = inds1[i]; const int pos2 = op2.findIndex(index); const double val = bf(elems1[i], pos2 == -1 ? 0.0 : elems2[pos2]); // if (val != 0.0) // *THINK* : should we put in only nonzeros? retVal.insert(index, val); } // loop once for each element in operand2 for (i = 0; i < s2; ++i) { const int index = inds2[i]; // if index exists in op1, then element was processed in prior loop if (op1.isExistingIndex(index)) continue; // Index does not exist in op1, so the element value must be zero const double val = bf(0.0, elems2[i]); // if (val != 0.0) // *THINK* : should we put in only nonzeros? retVal.insert(index, val); } } //----------------------------------------------------------------------------- template < class BinaryFunction > CoinPackedVector binaryOp(const CoinPackedVectorBase &op1, double value, BinaryFunction bf) { CoinPackedVector retVal; retVal.setTestForDuplicateIndex(true); binaryOp(retVal, op1, value, bf); return retVal; } template < class BinaryFunction > CoinPackedVector binaryOp(double value, const CoinPackedVectorBase &op2, BinaryFunction bf) { CoinPackedVector retVal; retVal.setTestForDuplicateIndex(true); binaryOp(retVal, op2, value, bf); return retVal; } template < class BinaryFunction > CoinPackedVector binaryOp(const CoinPackedVectorBase &op1, const CoinPackedVectorBase &op2, BinaryFunction bf) { CoinPackedVector retVal; retVal.setTestForDuplicateIndex(true); binaryOp(retVal, op1, op2, bf); return retVal; } //----------------------------------------------------------------------------- /// Return the sum of two packed vectors inline CoinPackedVector operator+(const CoinPackedVectorBase &op1, const CoinPackedVectorBase &op2) { CoinPackedVector retVal; retVal.setTestForDuplicateIndex(true); binaryOp(retVal, op1, op2, std::plus< double >()); return retVal; } /// Return the difference of two packed vectors inline CoinPackedVector operator-(const CoinPackedVectorBase &op1, const CoinPackedVectorBase &op2) { CoinPackedVector retVal; retVal.setTestForDuplicateIndex(true); binaryOp(retVal, op1, op2, std::minus< double >()); return retVal; } /// Return the element-wise product of two packed vectors inline CoinPackedVector operator*(const CoinPackedVectorBase &op1, const CoinPackedVectorBase &op2) { CoinPackedVector retVal; retVal.setTestForDuplicateIndex(true); binaryOp(retVal, op1, op2, std::multiplies< double >()); return retVal; } /// Return the element-wise ratio of two packed vectors inline CoinPackedVector operator/(const CoinPackedVectorBase &op1, const CoinPackedVectorBase &op2) { CoinPackedVector retVal; retVal.setTestForDuplicateIndex(true); binaryOp(retVal, op1, op2, std::divides< double >()); return retVal; } //@} /// Returns the dot product of two CoinPackedVector objects whose elements are /// doubles. Use this version if the vectors are *not* guaranteed to be sorted. inline double sparseDotProduct(const CoinPackedVectorBase &op1, const CoinPackedVectorBase &op2) { int len, i; double acc = 0.0; CoinPackedVector retVal; CoinPackedVector retval = op1 * op2; len = retval.getNumElements(); double *CParray = retval.getElements(); for (i = 0; i < len; i++) { acc += CParray[i]; } return acc; } /// Returns the dot product of two sorted CoinPackedVector objects. /// The vectors should be sorted in ascending order of indices. inline double sortedSparseDotProduct(const CoinPackedVectorBase &op1, const CoinPackedVectorBase &op2) { int i, j, len1, len2; double acc = 0.0; const double *v1val = op1.getElements(); const double *v2val = op2.getElements(); const int *v1ind = op1.getIndices(); const int *v2ind = op2.getIndices(); len1 = op1.getNumElements(); len2 = op2.getNumElements(); i = 0; j = 0; while (i < len1 && j < len2) { if (v1ind[i] == v2ind[j]) { acc += v1val[i] * v2val[j]; i++; j++; } else if (v2ind[j] < v1ind[i]) { j++; } else { i++; } // end if-else-elseif } // end while return acc; } //----------------------------------------------------------------------------- /**@name Arithmetic operators on packed vector and a constant.
These functions create a packed vector as a result. That packed vector will have the same indices as op1 and the specified operation is done entry-wise with the given value. */ //@{ /// Return the sum of a packed vector and a constant inline CoinPackedVector operator+(const CoinPackedVectorBase &op1, double value) { CoinPackedVector retVal(op1); retVal += value; return retVal; } /// Return the difference of a packed vector and a constant inline CoinPackedVector operator-(const CoinPackedVectorBase &op1, double value) { CoinPackedVector retVal(op1); retVal -= value; return retVal; } /// Return the element-wise product of a packed vector and a constant inline CoinPackedVector operator*(const CoinPackedVectorBase &op1, double value) { CoinPackedVector retVal(op1); retVal *= value; return retVal; } /// Return the element-wise ratio of a packed vector and a constant inline CoinPackedVector operator/(const CoinPackedVectorBase &op1, double value) { CoinPackedVector retVal(op1); retVal /= value; return retVal; } //----------------------------------------------------------------------------- /// Return the sum of a constant and a packed vector inline CoinPackedVector operator+(double value, const CoinPackedVectorBase &op1) { CoinPackedVector retVal(op1); retVal += value; return retVal; } /// Return the difference of a constant and a packed vector inline CoinPackedVector operator-(double value, const CoinPackedVectorBase &op1) { CoinPackedVector retVal(op1); const int size = retVal.getNumElements(); double *elems = retVal.getElements(); for (int i = 0; i < size; ++i) { elems[i] = value - elems[i]; } return retVal; } /// Return the element-wise product of a constant and a packed vector inline CoinPackedVector operator*(double value, const CoinPackedVectorBase &op1) { CoinPackedVector retVal(op1); retVal *= value; return retVal; } /// Return the element-wise ratio of a a constant and packed vector inline CoinPackedVector operator/(double value, const CoinPackedVectorBase &op1) { CoinPackedVector retVal(op1); const int size = retVal.getNumElements(); double *elems = retVal.getElements(); for (int i = 0; i < size; ++i) { elems[i] = value / elems[i]; } return retVal; } //@} //############################################################################# /** A function that tests the methods in the CoinPackedVector class. The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging. */ void CoinPackedVectorUnitTest(); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveTripleton.hpp0000644000175200017520000000277613414454441020615 0ustar coincoin/* $Id: CoinPresolveTripleton.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2003, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolveTripleton_H #define CoinPresolveTripleton_H #define TRIPLETON 11 /** We are only going to do this if it does not increase number of elements?. It could be generalized to more than three but it seems unlikely it would help. As it is adapted from doubleton icoly is one dropped. */ class tripleton_action : public CoinPresolveAction { public: struct action { int icolx; int icolz; int row; int icoly; double cloy; double cupy; double costy; double clox; double cupx; double costx; double rlo; double rup; double coeffx; double coeffy; double coeffz; double *colel; int ncolx; int ncoly; }; const int nactions_; const action *const actions_; private: tripleton_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } public: const char *name() const { return ("tripleton_action"); } static const CoinPresolveAction *presolve(CoinPresolveMatrix *, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~tripleton_action(); }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPackedMatrix.hpp0000644000175200017520000011337013414454441017462 0ustar coincoin/* $Id: CoinPackedMatrix.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPackedMatrix_H #define CoinPackedMatrix_H #include "CoinError.hpp" #include "CoinTypes.hpp" #ifndef CLP_NO_VECTOR #include "CoinPackedVectorBase.hpp" #include "CoinShallowPackedVector.hpp" #else class CoinRelFltEq; #endif /** Sparse Matrix Base Class This class is intended to represent sparse matrices using row-major or column-major ordering. The representation is very efficient for adding, deleting, or retrieving major-dimension vectors. Adding a minor-dimension vector is less efficient, but can be helped by providing "extra" space as described in the next paragraph. Deleting a minor-dimension vector requires inspecting all coefficients in the matrix. Retrieving a minor-dimension vector would incur the same cost and is not supported (except in the sense that you can write a loop to retrieve all coefficients one at a time). Consider physically transposing the matrix, or keeping a second copy with the other major-vector ordering. The sparse represention can be completely compact or it can have "extra" space available at the end of each major vector. Incorporating extra space into the sparse matrix representation can improve performance in cases where new data needs to be inserted into the packed matrix against the major-vector orientation (e.g, inserting a row into a matrix stored in column-major order). For example if the matrix: @verbatim 3 1 0 -2 -1 0 0 -1 0 2 1.1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 2.8 0 0 -1.2 0 5.6 0 0 0 1 0 0 1.9 was stored by rows (with no extra space) in CoinPackedMatrix r then: r.getElements() returns a vector containing: 3 1 -2 -1 -1 2 1.1 1 1 2.8 -1.2 5.6 1 1.9 r.getIndices() returns a vector containing: 0 1 3 4 7 1 2 2 5 3 6 0 4 7 r.getVectorStarts() returns a vector containing: 0 5 7 9 11 14 r.getNumElements() returns 14. r.getMajorDim() returns 5. r.getVectorSize(0) returns 5. r.getVectorSize(1) returns 2. r.getVectorSize(2) returns 2. r.getVectorSize(3) returns 2. r.getVectorSize(4) returns 3. If stored by columns (with no extra space) then: c.getElements() returns a vector containing: 3 5.6 1 2 1.1 1 -2 2.8 -1 1 1 -1.2 -1 1.9 c.getIndices() returns a vector containing: 0 4 0 1 1 2 0 3 0 4 2 3 0 4 c.getVectorStarts() returns a vector containing: 0 2 4 6 8 10 11 12 14 c.getNumElements() returns 14. c.getMajorDim() returns 8. @endverbatim Compiling this class with CLP_NO_VECTOR defined will excise all methods which use CoinPackedVectorBase, CoinPackedVector, or CoinShallowPackedVector as parameters or return types. Compiling this class with COIN_FAST_CODE defined removes index range checks. */ class CoinPackedMatrix { friend void CoinPackedMatrixUnitTest(); public: //--------------------------------------------------------------------------- /**@name Query members */ //@{ /** Return the current setting of the extra gap. */ inline double getExtraGap() const { return extraGap_; } /** Return the current setting of the extra major. */ inline double getExtraMajor() const { return extraMajor_; } /** Reserve sufficient space for appending major-ordered vectors. If create is true, empty columns are created (for column generation) */ void reserve(const int newMaxMajorDim, const CoinBigIndex newMaxSize, bool create = false); /** Clear the data, but do not free any arrays */ void clear(); /** Whether the packed matrix is column major ordered or not. */ inline bool isColOrdered() const { return colOrdered_; } /** Whether the packed matrix has gaps or not. */ inline bool hasGaps() const { return (size_ < start_[majorDim_]); } /** Number of entries in the packed matrix. */ inline CoinBigIndex getNumElements() const { return size_; } /** Number of columns. */ inline int getNumCols() const { return colOrdered_ ? majorDim_ : minorDim_; } /** Number of rows. */ inline int getNumRows() const { return colOrdered_ ? minorDim_ : majorDim_; } /*! \brief A vector containing the elements in the packed matrix. Returns #elements_. Note that there might be gaps in this vector, entries that do not belong to any major-dimension vector. To get the actual elements one should look at this vector together with vectorStarts (#start_) and vectorLengths (#length_). */ inline const double *getElements() const { return element_; } /*! \brief A vector containing the minor indices of the elements in the packed matrix. Returns #index_. Note that there might be gaps in this list, entries that do not belong to any major-dimension vector. To get the actual elements one should look at this vector together with vectorStarts (#start_) and vectorLengths (#length_). */ inline const int *getIndices() const { return index_; } /*! \brief The size of the vectorStarts array See #start_. */ inline int getSizeVectorStarts() const { return ((majorDim_ > 0) ? (majorDim_ + 1) : (0)); } /*! \brief The size of the vectorLengths array See #length_. */ inline int getSizeVectorLengths() const { return majorDim_; } /*! \brief The positions where the major-dimension vectors start in elements and indices. See #start_. */ inline const CoinBigIndex *getVectorStarts() const { return start_; } /*! \brief The lengths of the major-dimension vectors. See #length_. */ inline const int *getVectorLengths() const { return length_; } /** The position of the first element in the i'th major-dimension vector. */ CoinBigIndex getVectorFirst(const int i) const { #ifndef COIN_FAST_CODE if (i < 0 || i >= majorDim_) throw CoinError("bad index", "vectorFirst", "CoinPackedMatrix"); #endif return start_[i]; } /** The position of the last element (well, one entry past the last) in the i'th major-dimension vector. */ CoinBigIndex getVectorLast(const int i) const { #ifndef COIN_FAST_CODE if (i < 0 || i >= majorDim_) throw CoinError("bad index", "vectorLast", "CoinPackedMatrix"); #endif return start_[i] + length_[i]; } /** The length of i'th vector. */ inline int getVectorSize(const int i) const { #ifndef COIN_FAST_CODE if (i < 0 || i >= majorDim_) throw CoinError("bad index", "vectorSize", "CoinPackedMatrix"); #endif return length_[i]; } #ifndef CLP_NO_VECTOR /** Return the i'th vector in matrix. */ const CoinShallowPackedVector getVector(int i) const { #ifndef COIN_FAST_CODE if (i < 0 || i >= majorDim_) throw CoinError("bad index", "vector", "CoinPackedMatrix"); #endif return CoinShallowPackedVector(length_[i], index_ + start_[i], element_ + start_[i], false); } #endif /** Returns an array containing major indices. The array is getNumElements long and if getVectorStarts() is 0,2,5 then the array would start 0,0,1,1,1,2... This method is provided to go back from a packed format to a triple format. It returns NULL if there are gaps in matrix so user should use removeGaps() if there are any gaps. It does this as this array has to match getElements() and getIndices() and because it makes no sense otherwise. The returned array is allocated with new int[], free it with delete[]. */ int *getMajorIndices() const; //@} //--------------------------------------------------------------------------- /**@name Modifying members */ //@{ /*! \brief Set the dimensions of the matrix. The method name is deceptive; the effect is to append empty columns and/or rows to the matrix to reach the specified dimensions. A negative number for either dimension means that that dimension doesn't change. An exception will be thrown if the specified dimensions are smaller than the current dimensions. */ void setDimensions(int numrows, int numcols); /** Set the extra gap to be allocated to the specified value. */ void setExtraGap(const double newGap); /** Set the extra major to be allocated to the specified value. */ void setExtraMajor(const double newMajor); #ifndef CLP_NO_VECTOR /*! Append a column to the end of the matrix. When compiled with COIN_DEBUG defined this method throws an exception if the column vector specifies a nonexistent row index. Otherwise the method assumes that every index fits into the matrix. */ void appendCol(const CoinPackedVectorBase &vec); #endif /*! Append a column to the end of the matrix. When compiled with COIN_DEBUG defined this method throws an exception if the column vector specifies a nonexistent row index. Otherwise the method assumes that every index fits into the matrix. */ void appendCol(const int vecsize, const int *vecind, const double *vecelem); #ifndef CLP_NO_VECTOR /*! Append a set of columns to the end of the matrix. When compiled with COIN_DEBUG defined this method throws an exception if any of the column vectors specify a nonexistent row index. Otherwise the method assumes that every index fits into the matrix. */ void appendCols(const int numcols, const CoinPackedVectorBase *const *cols); #endif /*! Append a set of columns to the end of the matrix. Returns the number of errors (nonexistent or duplicate row index). No error checking is performed if \p numberRows < 0. */ int appendCols(const int numcols, const CoinBigIndex *columnStarts, const int *row, const double *element, int numberRows = -1); #ifndef CLP_NO_VECTOR /*! Append a row to the end of the matrix. When compiled with COIN_DEBUG defined this method throws an exception if the row vector specifies a nonexistent column index. Otherwise the method assumes that every index fits into the matrix. */ void appendRow(const CoinPackedVectorBase &vec); #endif /*! Append a row to the end of the matrix. When compiled with COIN_DEBUG defined this method throws an exception if the row vector specifies a nonexistent column index. Otherwise the method assumes that every index fits into the matrix. */ void appendRow(const int vecsize, const int *vecind, const double *vecelem); #ifndef CLP_NO_VECTOR /*! Append a set of rows to the end of the matrix. When compiled with COIN_DEBUG defined this method throws an exception if any of the row vectors specify a nonexistent column index. Otherwise the method assumes that every index fits into the matrix. */ void appendRows(const int numrows, const CoinPackedVectorBase *const *rows); #endif /*! Append a set of rows to the end of the matrix. Returns the number of errors (nonexistent or duplicate column index). No error checking is performed if \p numberColumns < 0. */ int appendRows(const int numrows, const CoinBigIndex *rowStarts, const int *column, const double *element, int numberColumns = -1); /** Append the argument to the "right" of the current matrix. Imagine this as adding new columns (don't worry about how the matrices are ordered, that is taken care of). An exception is thrown if the number of rows is different in the matrices. */ void rightAppendPackedMatrix(const CoinPackedMatrix &matrix); /** Append the argument to the "bottom" of the current matrix. Imagine this as adding new rows (don't worry about how the matrices are ordered, that is taken care of). An exception is thrown if the number of columns is different in the matrices. */ void bottomAppendPackedMatrix(const CoinPackedMatrix &matrix); /** Delete the columns whose indices are listed in indDel. */ void deleteCols(const int numDel, const int *indDel); /** Delete the rows whose indices are listed in indDel. */ void deleteRows(const int numDel, const int *indDel); /** Replace the elements of a vector. The indices remain the same. At most the number specified will be replaced. The index is between 0 and major dimension of matrix */ void replaceVector(const int index, const int numReplace, const double *newElements); /** Modify one element of packed matrix. An element may be added. This works for either ordering If the new element is zero it will be deleted unless keepZero true */ void modifyCoefficient(int row, int column, double newElement, bool keepZero = false); /** Return one element of packed matrix. This works for either ordering If it is not present will return 0.0 */ double getCoefficient(int row, int column) const; /** Eliminate all elements in matrix whose absolute value is less than threshold. The column starts are not affected. Returns number of elements eliminated. Elements eliminated are at end of each vector */ CoinBigIndex compress(double threshold); /** Eliminate all duplicate AND small elements in matrix The column starts are not affected. Returns number of elements eliminated. */ CoinBigIndex eliminateDuplicates(double threshold); /** Sort all columns so indices are increasing.in each column */ void orderMatrix(); /** Really clean up matrix. a) eliminate all duplicate AND small elements in matrix b) remove all gaps and set extraGap_ and extraMajor_ to 0.0 c) reallocate arrays and make max lengths equal to lengths d) orders elements returns number of elements eliminated */ CoinBigIndex cleanMatrix(double threshold = 1.0e-20); //@} //--------------------------------------------------------------------------- /**@name Methods that reorganize the whole matrix */ //@{ /** Remove the gaps from the matrix if there were any Can also remove small elements fabs() <= removeValue*/ void removeGaps(double removeValue = -1.0); /** Extract a submatrix from matrix. Those major-dimension vectors of the matrix comprise the submatrix whose indices are given in the arguments. Does not allow duplicates. */ void submatrixOf(const CoinPackedMatrix &matrix, const int numMajor, const int *indMajor); /** Extract a submatrix from matrix. Those major-dimension vectors of the matrix comprise the submatrix whose indices are given in the arguments. Allows duplicates and keeps order. */ void submatrixOfWithDuplicates(const CoinPackedMatrix &matrix, const int numMajor, const int *indMajor); #if 0 /** Extract a submatrix from matrix. Those major/minor-dimension vectors of the matrix comprise the submatrix whose indices are given in the arguments. */ void submatrixOf(const CoinPackedMatrix& matrix, const int numMajor, const int * indMajor, const int numMinor, const int * indMinor); #endif /** Copy method. This method makes an exact replica of the argument, including the extra space parameters. */ void copyOf(const CoinPackedMatrix &rhs); /** Copy the arguments to the matrix. If len is a NULL pointer then the matrix is assumed to have no gaps in it and len will be created accordingly. */ void copyOf(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len, const double extraMajor = 0.0, const double extraGap = 0.0); /** Copy method. This method makes an exact replica of the argument, including the extra space parameters. If there is room it will re-use arrays */ void copyReuseArrays(const CoinPackedMatrix &rhs); /*! \brief Make a reverse-ordered copy. This method makes an exact replica of the argument with the major vector orientation changed from row (column) to column (row). The extra space parameters are also copied and reversed. (Cf. #reverseOrdering, which does the same thing in place.) */ void reverseOrderedCopyOf(const CoinPackedMatrix &rhs); /** Assign the arguments to the matrix. If len is a NULL pointer then the matrix is assumed to have no gaps in it and len will be created accordingly.
NOTE 1: After this method returns the pointers passed to the method will be NULL pointers!
NOTE 2: When the matrix is eventually destructed the arrays will be deleted by delete[]. Hence one should use this method ONLY if all array swere allocated by new[]! */ void assignMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, double *&elem, int *&ind, CoinBigIndex *&start, int *&len, const int maxmajor = -1, const CoinBigIndex maxsize = -1); /** Assignment operator. This copies out the data, but uses the current matrix's extra space parameters. */ CoinPackedMatrix &operator=(const CoinPackedMatrix &rhs); /*! \brief Reverse the ordering of the packed matrix. Change the major vector orientation of the matrix data structures from row (column) to column (row). (Cf. #reverseOrderedCopyOf, which does the same thing but produces a new matrix.) */ void reverseOrdering(); /*! \brief Transpose the matrix. \note If you start with a column-ordered matrix and invoke transpose, you will have a row-ordered transposed matrix. To change the major vector orientation (e.g., to transform a column-ordered matrix to a column-ordered transposed matrix), invoke transpose() followed by #reverseOrdering(). */ void transpose(); /*! \brief Swap the content of two packed matrices. */ void swap(CoinPackedMatrix &matrix); //@} //--------------------------------------------------------------------------- /**@name Matrix times vector methods */ //@{ /** Return A * x in y. @pre x must be of size numColumns() @pre y must be of size numRows() */ void times(const double *x, double *y) const; #ifndef CLP_NO_VECTOR /** Return A * x in y. Same as the previous method, just x is given in the form of a packed vector. */ void times(const CoinPackedVectorBase &x, double *y) const; #endif /** Return x * A in y. @pre x must be of size numRows() @pre y must be of size numColumns() */ void transposeTimes(const double *x, double *y) const; #ifndef CLP_NO_VECTOR /** Return x * A in y. Same as the previous method, just x is given in the form of a packed vector. */ void transposeTimes(const CoinPackedVectorBase &x, double *y) const; #endif //@} //--------------------------------------------------------------------------- /**@name Helper functions used internally, but maybe useful externally. These methods do not worry about testing whether the packed matrix is row or column major ordered; they operate under the assumption that the correct version is invoked. In fact, a number of other methods simply just call one of these after testing the ordering of the matrix. */ //@{ //------------------------------------------------------------------------- /**@name Queries */ //@{ /** Count the number of entries in every minor-dimension vector and return an array containing these lengths. The returned array is allocated with new int[], free it with delete[]. */ int *countOrthoLength() const; /** Count the number of entries in every minor-dimension vector and fill in an array containing these lengths. */ void countOrthoLength(int *counts) const; /** Major dimension. For row ordered matrix this would be the number of rows. */ inline int getMajorDim() const { return majorDim_; } /** Set major dimension. For row ordered matrix this would be the number of rows. Use with great care.*/ inline void setMajorDim(int value) { majorDim_ = value; } /** Minor dimension. For row ordered matrix this would be the number of columns. */ inline int getMinorDim() const { return minorDim_; } /** Set minor dimension. For row ordered matrix this would be the number of columns. Use with great care.*/ inline void setMinorDim(int value) { minorDim_ = value; } /** Current maximum for major dimension. For row ordered matrix this many rows can be added without reallocating the vector related to the major dimension (start_ and length_). */ inline int getMaxMajorDim() const { return maxMajorDim_; } /** Dump the matrix on stdout. When in dire straits this method can help. */ void dumpMatrix(const char *fname = NULL) const; /// Print a single matrix element. void printMatrixElement(const int row_val, const int col_val) const; //@} //------------------------------------------------------------------------- /*! @name Append vectors \details When compiled with COIN_DEBUG defined these methods throw an exception if the major (minor) vector contains an index that's invalid for the minor (major) dimension. Otherwise the methods assume that every index fits into the matrix. */ //@{ #ifndef CLP_NO_VECTOR /** Append a major-dimension vector to the end of the matrix. */ void appendMajorVector(const CoinPackedVectorBase &vec); #endif /** Append a major-dimension vector to the end of the matrix. */ void appendMajorVector(const int vecsize, const int *vecind, const double *vecelem); #ifndef CLP_NO_VECTOR /** Append several major-dimensonvectors to the end of the matrix */ void appendMajorVectors(const int numvecs, const CoinPackedVectorBase *const *vecs); /** Append a minor-dimension vector to the end of the matrix. */ void appendMinorVector(const CoinPackedVectorBase &vec); #endif /** Append a minor-dimension vector to the end of the matrix. */ void appendMinorVector(const int vecsize, const int *vecind, const double *vecelem); #ifndef CLP_NO_VECTOR /** Append several minor-dimension vectors to the end of the matrix */ void appendMinorVectors(const int numvecs, const CoinPackedVectorBase *const *vecs); #endif /*! \brief Append a set of rows (columns) to the end of a column (row) ordered matrix. This case is when we know there are no gaps and majorDim_ will not change. \todo This method really belongs in the group of protected methods with #appendMinor; there are no safeties here even with COIN_DEBUG. Apparently this method was needed in ClpPackedMatrix and giving it proper visibility was too much trouble. Should be moved. */ void appendMinorFast(const int number, const CoinBigIndex *starts, const int *index, const double *element); //@} //------------------------------------------------------------------------- /*! \name Append matrices \details We'll document these methods assuming that the current matrix is column major ordered (Hence in the ...SameOrdered() methods the argument is column ordered, in the OrthoOrdered() methods the argument is row ordered.) */ //@{ /** Append the columns of the argument to the right end of this matrix. @pre minorDim_ == matrix.minorDim_
This method throws an exception if the minor dimensions are not the same. */ void majorAppendSameOrdered(const CoinPackedMatrix &matrix); /** Append the columns of the argument to the bottom end of this matrix. @pre majorDim_ == matrix.majorDim_
This method throws an exception if the major dimensions are not the same. */ void minorAppendSameOrdered(const CoinPackedMatrix &matrix); /** Append the rows of the argument to the right end of this matrix. @pre minorDim_ == matrix.majorDim_
This method throws an exception if the minor dimension of the current matrix is not the same as the major dimension of the argument matrix. */ void majorAppendOrthoOrdered(const CoinPackedMatrix &matrix); /** Append the rows of the argument to the bottom end of this matrix. @pre majorDim_ == matrix.minorDim_
This method throws an exception if the major dimension of the current matrix is not the same as the minor dimension of the argument matrix. */ void minorAppendOrthoOrdered(const CoinPackedMatrix &matrix); //@} //----------------------------------------------------------------------- /**@name Delete vectors */ //@{ /** Delete the major-dimension vectors whose indices are listed in indDel. */ void deleteMajorVectors(const int numDel, const int *indDel); /** Delete the minor-dimension vectors whose indices are listed in indDel. */ void deleteMinorVectors(const int numDel, const int *indDel); //@} //----------------------------------------------------------------------- /**@name Various dot products. */ //@{ /** Return A * x (multiplied from the "right" direction) in y. @pre x must be of size majorDim() @pre y must be of size minorDim() */ void timesMajor(const double *x, double *y) const; #ifndef CLP_NO_VECTOR /** Return A * x (multiplied from the "right" direction) in y. Same as the previous method, just x is given in the form of a packed vector. */ void timesMajor(const CoinPackedVectorBase &x, double *y) const; #endif /** Return A * x (multiplied from the "right" direction) in y. @pre x must be of size minorDim() @pre y must be of size majorDim() */ void timesMinor(const double *x, double *y) const; #ifndef CLP_NO_VECTOR /** Return A * x (multiplied from the "right" direction) in y. Same as the previous method, just x is given in the form of a packed vector. */ void timesMinor(const CoinPackedVectorBase &x, double *y) const; #endif //@} //@} //-------------------------------------------------------------------------- /**@name Logical Operations. */ //@{ #ifndef CLP_NO_VECTOR /*! \brief Test for equivalence. Two matrices are equivalent if they are both row- or column-ordered, they have the same dimensions, and each (major) vector is equivalent. The operator used to test for equality can be specified using the \p FloatEqual template parameter. */ template < class FloatEqual > bool isEquivalent(const CoinPackedMatrix &rhs, const FloatEqual &eq) const { // Both must be column order or both row ordered and must be of same size if ((isColOrdered() ^ rhs.isColOrdered()) || (getNumCols() != rhs.getNumCols()) || (getNumRows() != rhs.getNumRows()) || (getNumElements() != rhs.getNumElements())) return false; for (int i = getMajorDim() - 1; i >= 0; --i) { CoinShallowPackedVector pv = getVector(i); CoinShallowPackedVector rhsPv = rhs.getVector(i); if (!pv.isEquivalent(rhsPv, eq)) return false; } return true; } /*! \brief Test for equivalence and report differences Equivalence is defined as for #isEquivalent. In addition, this method will print differences to std::cerr. Intended for use in unit tests and for debugging. */ bool isEquivalent2(const CoinPackedMatrix &rhs) const; #else /*! \brief Test for equivalence. Two matrices are equivalent if they are both row- or column-ordered, they have the same dimensions, and each (major) vector is equivalent. This method is optimised for speed. CoinPackedVector#isEquivalent is replaced with more efficient code for repeated comparison of equal-length vectors. The CoinRelFltEq operator is used. */ bool isEquivalent(const CoinPackedMatrix &rhs, const CoinRelFltEq &eq) const; #endif /*! \brief Test for equivalence. The test for element equality is the default CoinRelFltEq operator. */ bool isEquivalent(const CoinPackedMatrix &rhs) const; //@} //-------------------------------------------------------------------------- /*! \name Non-const methods These are to be used with great care when doing column generation, etc. */ //@{ /** A vector containing the elements in the packed matrix. Note that there might be gaps in this list, entries that do not belong to any major-dimension vector. To get the actual elements one should look at this vector together with #start_ and #length_. */ inline double *getMutableElements() const { return element_; } /** A vector containing the minor indices of the elements in the packed matrix. Note that there might be gaps in this list, entries that do not belong to any major-dimension vector. To get the actual elements one should look at this vector together with #start_ and #length_. */ inline int *getMutableIndices() const { return index_; } /** The positions where the major-dimension vectors start in #element_ and #index_. */ inline CoinBigIndex *getMutableVectorStarts() const { return start_; } /** The lengths of the major-dimension vectors. */ inline int *getMutableVectorLengths() const { return length_; } /// Change the size of the bulk store after modifying - be careful inline void setNumElements(CoinBigIndex value) { size_ = value; } /*! NULLify element array Used when space is very tight. Does not free the space! */ inline void nullElementArray() { element_ = NULL; } /*! NULLify start array Used when space is very tight. Does not free the space! */ inline void nullStartArray() { start_ = NULL; } /*! NULLify length array Used when space is very tight. Does not free the space! */ inline void nullLengthArray() { length_ = NULL; } /*! NULLify index array Used when space is very tight. Does not free the space! */ inline void nullIndexArray() { index_ = NULL; } //@} //-------------------------------------------------------------------------- /*! \name Constructors and destructors */ //@{ /// Default Constructor creates an empty column ordered packed matrix CoinPackedMatrix(); /// A constructor where the ordering and the gaps are specified CoinPackedMatrix(const bool colordered, const double extraMajor, const double extraGap); CoinPackedMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len, const double extraMajor, const double extraGap); CoinPackedMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len); /** Create packed matrix from triples. If colordered is true then the created matrix will be column ordered. Duplicate matrix elements are allowed. The created matrix will have the sum of the duplicates.
For example if:
rowIndices[0]=2; colIndices[0]=5; elements[0]=2.0
rowIndices[1]=2; colIndices[1]=5; elements[1]=0.5
then the created matrix will contain a value of 2.5 in row 2 and column 5.
The matrix is created without gaps. */ CoinPackedMatrix(const bool colordered, const int *rowIndices, const int *colIndices, const double *elements, CoinBigIndex numels); /// Copy constructor CoinPackedMatrix(const CoinPackedMatrix &m); /*! \brief Copy constructor with fine tuning This constructor allows for the specification of an exact amount of extra space and/or reverse ordering. \p extraForMajor is the exact number of spare major vector slots after any possible reverse ordering. If \p extraForMajor < 0, all gaps and small elements will be removed from the copy, otherwise gaps and small elements are preserved. \p extraElements is the exact number of spare element entries. The usual multipliers, #extraMajor_ and #extraGap_, are set to zero. */ CoinPackedMatrix(const CoinPackedMatrix &m, int extraForMajor, int extraElements, bool reverseOrdering = false); /** Subset constructor (without gaps). Duplicates are allowed and order is as given */ CoinPackedMatrix(const CoinPackedMatrix &wholeModel, int numberRows, const int *whichRows, int numberColumns, const int *whichColumns); /// Destructor virtual ~CoinPackedMatrix(); //@} /*! \name Debug Utilities */ //@{ /*! \brief Scan the matrix for anomalies. Returns the number of anomalies. Scans the structure for gaps, obviously bogus indices and coefficients, and inconsistencies. Gaps are not an error unless #hasGaps() says the matrix should be gap-free. Zeroes are not an error unless \p zeroesAreError is set to true. Values for verbosity are: - 0: No messages, just the return value - 1: Messages about errors - 2: If there are no errors, a message indicating the matrix was checked is printed (positive confirmation). - 3: Adds a bit more information about the matrix. - 4: Prints warnings about zeroes even if they're not considered errors. Obviously bogus coefficients are coefficients that are NaN or have absolute value greater than 1e50. Zeros have absolute value less than 1e-50. */ int verifyMtx(int verbosity = 1, bool zeroesAreError = false) const; //@} //-------------------------------------------------------------------------- protected: void gutsOfDestructor(); void gutsOfCopyOf(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len, const double extraMajor = 0.0, const double extraGap = 0.0); /// When no gaps we can do faster void gutsOfCopyOfNoGaps(const bool colordered, const int minor, const int major, const double *elem, const int *ind, const CoinBigIndex *start); void gutsOfOpEqual(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len); void resizeForAddingMajorVectors(const int numVec, const int *lengthVec); void resizeForAddingMinorVectors(const int *addedEntries); /*! \brief Append a set of rows (columns) to the end of a row (colum) ordered matrix. If \p numberOther > 0 the method will check if any of the new rows (columns) contain duplicate indices or invalid indices and return the number of errors. A valid minor index must satisfy \code 0 <= k < numberOther \endcode If \p numberOther < 0 no checking is performed. */ int appendMajor(const int number, const CoinBigIndex *starts, const int *index, const double *element, int numberOther = -1); /*! \brief Append a set of rows (columns) to the end of a column (row) ordered matrix. If \p numberOther > 0 the method will check if any of the new rows (columns) contain duplicate indices or indices outside the current range for the major dimension and return the number of violations. If \p numberOther <= 0 the major dimension will be expanded as necessary and there are no checks for duplicate indices. */ int appendMinor(const int number, const CoinBigIndex *starts, const int *index, const double *element, int numberOther = -1); private: inline CoinBigIndex getLastStart() const { return majorDim_ == 0 ? 0 : start_[majorDim_]; } //-------------------------------------------------------------------------- protected: /**@name Data members The data members are protected to allow access for derived classes. */ //@{ /** A flag indicating whether the matrix is column or row major ordered. */ bool colOrdered_; /** This much times more space should be allocated for each major-dimension vector (with respect to the number of entries in the vector) when the matrix is resized. The purpose of these gaps is to allow fast insertion of new minor-dimension vectors. */ double extraGap_; /** his much times more space should be allocated for major-dimension vectors when the matrix is resized. The purpose of these gaps is to allow fast addition of new major-dimension vectors. */ double extraMajor_; /** List of nonzero element values. The entries in the gaps between major-dimension vectors are undefined. */ double *element_; /** List of nonzero element minor-dimension indices. The entries in the gaps between major-dimension vectors are undefined. */ int *index_; /** Starting positions of major-dimension vectors. */ CoinBigIndex *start_; /** Lengths of major-dimension vectors. */ int *length_; /// number of vectors in matrix int majorDim_; /// size of other dimension int minorDim_; /// the number of nonzero entries CoinBigIndex size_; /// max space allocated for major-dimension int maxMajorDim_; /// max space allocated for entries CoinBigIndex maxSize_; //@} }; //############################################################################# /*! \brief Test the methods in the CoinPackedMatrix class. The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging. */ void CoinPackedMatrixUnitTest(); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinSimpFactorization.cpp0000644000175200017520000022143313414454441020546 0ustar coincoin/* $Id: CoinSimpFactorization.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2008, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if COIN_BIG_INDEX == 0 #include "CoinUtilsConfig.h" #include #include "CoinPragma.hpp" #include "CoinSimpFactorization.hpp" #include "CoinIndexedVector.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedMatrix.hpp" #include "CoinFinite.hpp" #include #define ARRAY 0 FactorPointers::FactorPointers(int numRows, int numColumns, int *UrowLengths_, int *UcolLengths_) { rowMax = new double[numRows]; double *current = rowMax; const double *end = current + numRows; for (; current != end; ++current) *current = -1.0; firstRowKnonzeros = new int[numRows + 1]; CoinFillN(firstRowKnonzeros, numRows + 1, -1); prevRow = new int[numRows]; nextRow = new int[numRows]; firstColKnonzeros = new int[numRows + 1]; memset(firstColKnonzeros, -1, (numRows + 1) * sizeof(int)); prevColumn = new int[numColumns]; nextColumn = new int[numColumns]; newCols = new int[numRows]; for (int i = numRows - 1; i >= 0; --i) { int length = UrowLengths_[i]; prevRow[i] = -1; nextRow[i] = firstRowKnonzeros[length]; if (nextRow[i] != -1) prevRow[nextRow[i]] = i; firstRowKnonzeros[length] = i; } for (int i = numColumns - 1; i >= 0; --i) { int length = UcolLengths_[i]; prevColumn[i] = -1; nextColumn[i] = firstColKnonzeros[length]; if (nextColumn[i] != -1) prevColumn[nextColumn[i]] = i; firstColKnonzeros[length] = i; } } FactorPointers::~FactorPointers() { delete[] rowMax; delete[] firstRowKnonzeros; delete[] prevRow; delete[] nextRow; delete[] firstColKnonzeros; delete[] prevColumn; delete[] nextColumn; delete[] newCols; } //:class CoinSimpFactorization. Deals with Factorization and Updates // CoinSimpFactorization. Constructor CoinSimpFactorization::CoinSimpFactorization() : CoinOtherFactorization() { gutsOfInitialize(); } /// Copy constructor CoinSimpFactorization::CoinSimpFactorization(const CoinSimpFactorization &other) : CoinOtherFactorization(other) { gutsOfInitialize(); gutsOfCopy(other); } // Clone CoinOtherFactorization * CoinSimpFactorization::clone() const { return new CoinSimpFactorization(*this); } /// The real work of constructors etc void CoinSimpFactorization::gutsOfDestructor() { delete[] elements_; delete[] pivotRow_; delete[] workArea_; elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; numberRows_ = 0; numberColumns_ = 0; numberGoodU_ = 0; status_ = -1; maximumRows_ = 0; maximumSpace_ = 0; numberSlacks_ = 0; firstNumberSlacks_ = 0; // delete[] denseVector_; delete[] workArea2_; delete[] workArea3_; delete[] vecLabels_; delete[] indVector_; delete[] auxVector_; delete[] auxInd_; delete[] vecKeep_; delete[] indKeep_; delete[] LrowStarts_; delete[] LrowLengths_; delete[] Lrows_; delete[] LrowInd_; delete[] LcolStarts_; delete[] LcolLengths_; delete[] Lcolumns_; delete[] LcolInd_; delete[] UrowStarts_; delete[] UrowLengths_; #ifdef COIN_SIMP_CAPACITY delete[] UrowCapacities_; #endif delete[] Urows_; delete[] UrowInd_; delete[] prevRowInU_; delete[] nextRowInU_; delete[] UcolStarts_; delete[] UcolLengths_; #ifdef COIN_SIMP_CAPACITY delete[] UcolCapacities_; #endif delete[] Ucolumns_; delete[] UcolInd_; delete[] prevColInU_; delete[] nextColInU_; delete[] colSlack_; delete[] invOfPivots_; delete[] colOfU_; delete[] colPosition_; delete[] rowOfU_; delete[] rowPosition_; delete[] secRowOfU_; delete[] secRowPosition_; delete[] EtaPosition_; delete[] EtaStarts_; delete[] EtaLengths_; delete[] EtaInd_; delete[] Eta_; denseVector_ = NULL; workArea2_ = NULL; workArea3_ = NULL; vecLabels_ = NULL; indVector_ = NULL; auxVector_ = NULL; auxInd_ = NULL; vecKeep_ = NULL; indKeep_ = NULL; LrowStarts_ = NULL; LrowLengths_ = NULL; Lrows_ = NULL; LrowInd_ = NULL; LcolStarts_ = NULL; LcolLengths_ = NULL; Lcolumns_ = NULL; LcolInd_ = NULL; UrowStarts_ = NULL; UrowLengths_ = NULL; #ifdef COIN_SIMP_CAPACITY UrowCapacities_ = NULL; #endif Urows_ = NULL; UrowInd_ = NULL; prevRowInU_ = NULL; nextRowInU_ = NULL; UcolStarts_ = NULL; UcolLengths_ = NULL; #ifdef COIN_SIMP_CAPACITY UcolCapacities_ = NULL; #endif Ucolumns_ = NULL; UcolInd_ = NULL; prevColInU_ = NULL; nextColInU_ = NULL; colSlack_ = NULL; invOfPivots_ = NULL; colOfU_ = NULL; colPosition_ = NULL; rowOfU_ = NULL; rowPosition_ = NULL; secRowOfU_ = NULL; secRowPosition_ = NULL; EtaPosition_ = NULL; EtaStarts_ = NULL; EtaLengths_ = NULL; EtaInd_ = NULL; Eta_ = NULL; } void CoinSimpFactorization::gutsOfInitialize() { pivotTolerance_ = 1.0e-1; zeroTolerance_ = 1.0e-13; #ifndef COIN_FAST_CODE slackValue_ = -1.0; #endif maximumPivots_ = 200; relaxCheck_ = 1.0; numberRows_ = 0; numberColumns_ = 0; numberGoodU_ = 0; status_ = -1; numberPivots_ = 0; maximumRows_ = 0; maximumSpace_ = 0; numberSlacks_ = 0; firstNumberSlacks_ = 0; elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; denseVector_ = NULL; workArea2_ = NULL; workArea3_ = NULL; vecLabels_ = NULL; indVector_ = NULL; auxVector_ = NULL; auxInd_ = NULL; vecKeep_ = NULL; indKeep_ = NULL; LrowStarts_ = NULL; LrowLengths_ = NULL; Lrows_ = NULL; LrowInd_ = NULL; LcolStarts_ = NULL; LcolLengths_ = NULL; Lcolumns_ = NULL; LcolInd_ = NULL; UrowStarts_ = NULL; UrowLengths_ = NULL; #ifdef COIN_SIMP_CAPACITY UrowCapacities_ = NULL; #endif Urows_ = NULL; UrowInd_ = NULL; prevRowInU_ = NULL; nextRowInU_ = NULL; UcolStarts_ = NULL; UcolLengths_ = NULL; #ifdef COIN_SIMP_CAPACITY UcolCapacities_ = NULL; #endif Ucolumns_ = NULL; UcolInd_ = NULL; prevColInU_ = NULL; nextColInU_ = NULL; colSlack_ = NULL; invOfPivots_ = NULL; colOfU_ = NULL; colPosition_ = NULL; rowOfU_ = NULL; rowPosition_ = NULL; secRowOfU_ = NULL; secRowPosition_ = NULL; EtaPosition_ = NULL; EtaStarts_ = NULL; EtaLengths_ = NULL; EtaInd_ = NULL; Eta_ = NULL; } void CoinSimpFactorization::initialSomeNumbers() { keepSize_ = -1; LrowSize_ = -1; // LrowCap_ in allocateSomeArrays LcolSize_ = -1; // LcolCap_ in allocateSomeArrays // UrowMaxCap_ in allocateSomeArrays UrowEnd_ = -1; firstRowInU_ = -1; lastRowInU_ = -1; firstColInU_ = -1; lastColInU_ = -1; //UcolMaxCap_ in allocateSomeArrays UcolEnd_ = -1; EtaSize_ = 0; lastEtaRow_ = -1; //maxEtaRows_ in allocateSomeArrays //EtaMaxCap_ in allocateSomeArrays // minIncrease_ in allocateSomeArrays updateTol_ = 1.0e12; doSuhlHeuristic_ = true; maxU_ = -1.0; maxGrowth_ = 1.e12; maxA_ = -1.0; pivotCandLimit_ = 4; minIncrease_ = 10; } // ~CoinSimpFactorization. Destructor CoinSimpFactorization::~CoinSimpFactorization() { gutsOfDestructor(); } // = CoinSimpFactorization &CoinSimpFactorization::operator=(const CoinSimpFactorization &other) { if (this != &other) { gutsOfDestructor(); gutsOfInitialize(); gutsOfCopy(other); } return *this; } void CoinSimpFactorization::gutsOfCopy(const CoinSimpFactorization &other) { pivotTolerance_ = other.pivotTolerance_; zeroTolerance_ = other.zeroTolerance_; #ifndef COIN_FAST_CODE slackValue_ = other.slackValue_; #endif relaxCheck_ = other.relaxCheck_; numberRows_ = other.numberRows_; numberColumns_ = other.numberColumns_; maximumRows_ = other.maximumRows_; maximumSpace_ = other.maximumSpace_; numberGoodU_ = other.numberGoodU_; maximumPivots_ = other.maximumPivots_; numberPivots_ = other.numberPivots_; factorElements_ = other.factorElements_; status_ = other.status_; numberSlacks_ = other.numberSlacks_; firstNumberSlacks_ = other.firstNumberSlacks_; if (other.pivotRow_) { pivotRow_ = new int[2 * maximumRows_ + maximumPivots_]; memcpy(pivotRow_, other.pivotRow_, (2 * maximumRows_ + numberPivots_) * sizeof(int)); elements_ = new CoinFactorizationDouble[maximumSpace_]; memcpy(elements_, other.elements_, (maximumRows_ + numberPivots_) * maximumRows_ * sizeof(CoinFactorizationDouble)); workArea_ = new CoinFactorizationDouble[maximumRows_]; } else { elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; } keepSize_ = other.keepSize_; LrowSize_ = other.LrowSize_; LrowCap_ = other.LrowCap_; LcolSize_ = other.LcolSize_; LcolCap_ = other.LcolCap_; UrowMaxCap_ = other.UrowMaxCap_; UrowEnd_ = other.UrowEnd_; firstRowInU_ = other.firstRowInU_; lastRowInU_ = other.lastRowInU_; firstColInU_ = other.firstColInU_; lastColInU_ = other.lastColInU_; UcolMaxCap_ = other.UcolMaxCap_; UcolEnd_ = other.UcolEnd_; EtaSize_ = other.EtaSize_; lastEtaRow_ = other.lastEtaRow_; maxEtaRows_ = other.maxEtaRows_; EtaMaxCap_ = other.EtaMaxCap_; minIncrease_ = other.minIncrease_; updateTol_ = other.updateTol_; if (other.denseVector_) { denseVector_ = new double[maximumRows_]; memcpy(denseVector_, other.denseVector_, maximumRows_ * sizeof(double)); } else denseVector_ = NULL; if (other.workArea2_) { workArea2_ = new double[maximumRows_]; memcpy(workArea2_, other.workArea2_, maximumRows_ * sizeof(double)); } else workArea2_ = NULL; if (other.workArea3_) { workArea3_ = new double[maximumRows_]; memcpy(workArea3_, other.workArea3_, maximumRows_ * sizeof(double)); } else workArea3_ = NULL; if (other.vecLabels_) { vecLabels_ = new int[maximumRows_]; memcpy(vecLabels_, other.vecLabels_, maximumRows_ * sizeof(int)); } else vecLabels_ = NULL; if (other.indVector_) { indVector_ = new int[maximumRows_]; memcpy(indVector_, other.indVector_, maximumRows_ * sizeof(int)); } else indVector_ = NULL; if (other.auxVector_) { auxVector_ = new double[maximumRows_]; memcpy(auxVector_, other.auxVector_, maximumRows_ * sizeof(double)); } else auxVector_ = NULL; if (other.auxInd_) { auxInd_ = new int[maximumRows_]; memcpy(auxInd_, other.auxInd_, maximumRows_ * sizeof(int)); } else auxInd_ = NULL; if (other.vecKeep_) { vecKeep_ = new double[maximumRows_]; memcpy(vecKeep_, other.vecKeep_, maximumRows_ * sizeof(double)); } else vecKeep_ = NULL; if (other.indKeep_) { indKeep_ = new int[maximumRows_]; memcpy(indKeep_, other.indKeep_, maximumRows_ * sizeof(int)); } else indKeep_ = NULL; if (other.LrowStarts_) { LrowStarts_ = new int[maximumRows_]; memcpy(LrowStarts_, other.LrowStarts_, maximumRows_ * sizeof(int)); } else LrowStarts_ = NULL; if (other.LrowLengths_) { LrowLengths_ = new int[maximumRows_]; memcpy(LrowLengths_, other.LrowLengths_, maximumRows_ * sizeof(int)); } else LrowLengths_ = NULL; if (other.Lrows_) { Lrows_ = new double[other.LrowCap_]; memcpy(Lrows_, other.Lrows_, other.LrowCap_ * sizeof(double)); } else Lrows_ = NULL; if (other.LrowInd_) { LrowInd_ = new int[other.LrowCap_]; memcpy(LrowInd_, other.LrowInd_, other.LrowCap_ * sizeof(int)); } else LrowInd_ = NULL; if (other.LcolStarts_) { LcolStarts_ = new int[maximumRows_]; memcpy(LcolStarts_, other.LcolStarts_, maximumRows_ * sizeof(int)); } else LcolStarts_ = NULL; if (other.LcolLengths_) { LcolLengths_ = new int[maximumRows_]; memcpy(LcolLengths_, other.LcolLengths_, maximumRows_ * sizeof(int)); } else LcolLengths_ = NULL; if (other.Lcolumns_) { Lcolumns_ = new double[other.LcolCap_]; memcpy(Lcolumns_, other.Lcolumns_, other.LcolCap_ * sizeof(double)); } else Lcolumns_ = NULL; if (other.LcolInd_) { LcolInd_ = new int[other.LcolCap_]; memcpy(LcolInd_, other.LcolInd_, other.LcolCap_ * sizeof(int)); } else LcolInd_ = NULL; if (other.UrowStarts_) { UrowStarts_ = new int[maximumRows_]; memcpy(UrowStarts_, other.UrowStarts_, maximumRows_ * sizeof(int)); } else UrowStarts_ = NULL; if (other.UrowLengths_) { UrowLengths_ = new int[maximumRows_]; memcpy(UrowLengths_, other.UrowLengths_, maximumRows_ * sizeof(int)); } else UrowLengths_ = NULL; #ifdef COIN_SIMP_CAPACITY if (other.UrowCapacities_) { UrowCapacities_ = new int[maximumRows_]; memcpy(UrowCapacities_, other.UrowCapacities_, maximumRows_ * sizeof(int)); } else UrowCapacities_ = NULL; #endif if (other.Urows_) { Urows_ = new double[other.UrowMaxCap_]; memcpy(Urows_, other.Urows_, other.UrowMaxCap_ * sizeof(double)); } else Urows_ = NULL; if (other.UrowInd_) { UrowInd_ = new int[other.UrowMaxCap_]; memcpy(UrowInd_, other.UrowInd_, other.UrowMaxCap_ * sizeof(int)); } else UrowInd_ = NULL; if (other.prevRowInU_) { prevRowInU_ = new int[maximumRows_]; memcpy(prevRowInU_, other.prevRowInU_, maximumRows_ * sizeof(int)); } else prevRowInU_ = NULL; if (other.nextRowInU_) { nextRowInU_ = new int[maximumRows_]; memcpy(nextRowInU_, other.nextRowInU_, maximumRows_ * sizeof(int)); } else nextRowInU_ = NULL; if (other.UcolStarts_) { UcolStarts_ = new int[maximumRows_]; memcpy(UcolStarts_, other.UcolStarts_, maximumRows_ * sizeof(int)); } else UcolStarts_ = NULL; if (other.UcolLengths_) { UcolLengths_ = new int[maximumRows_]; memcpy(UcolLengths_, other.UcolLengths_, maximumRows_ * sizeof(int)); } else UcolLengths_ = NULL; #ifdef COIN_SIMP_CAPACITY if (other.UcolCapacities_) { UcolCapacities_ = new int[maximumRows_]; memcpy(UcolCapacities_, other.UcolCapacities_, maximumRows_ * sizeof(int)); } else UcolCapacities_ = NULL; #endif if (other.Ucolumns_) { Ucolumns_ = new double[other.UcolMaxCap_]; memcpy(Ucolumns_, other.Ucolumns_, other.UcolMaxCap_ * sizeof(double)); } else Ucolumns_ = NULL; if (other.UcolInd_) { UcolInd_ = new int[other.UcolMaxCap_]; memcpy(UcolInd_, other.UcolInd_, other.UcolMaxCap_ * sizeof(int)); } else UcolInd_ = NULL; if (other.prevColInU_) { prevColInU_ = new int[maximumRows_]; memcpy(prevColInU_, other.prevColInU_, maximumRows_ * sizeof(int)); } else prevColInU_ = NULL; if (other.nextColInU_) { nextColInU_ = new int[maximumRows_]; memcpy(nextColInU_, other.nextColInU_, maximumRows_ * sizeof(int)); } else nextColInU_ = NULL; if (other.colSlack_) { colSlack_ = new int[maximumRows_]; memcpy(colSlack_, other.colSlack_, maximumRows_ * sizeof(int)); } if (other.invOfPivots_) { invOfPivots_ = new double[maximumRows_]; memcpy(invOfPivots_, other.invOfPivots_, maximumRows_ * sizeof(double)); } else invOfPivots_ = NULL; if (other.colOfU_) { colOfU_ = new int[maximumRows_]; memcpy(colOfU_, other.colOfU_, maximumRows_ * sizeof(int)); } else colOfU_ = NULL; if (other.colPosition_) { colPosition_ = new int[maximumRows_]; memcpy(colPosition_, other.colPosition_, maximumRows_ * sizeof(int)); } else colPosition_ = NULL; if (other.rowOfU_) { rowOfU_ = new int[maximumRows_]; memcpy(rowOfU_, other.rowOfU_, maximumRows_ * sizeof(int)); } else rowOfU_ = NULL; if (other.rowPosition_) { rowPosition_ = new int[maximumRows_]; memcpy(rowPosition_, other.rowPosition_, maximumRows_ * sizeof(int)); } else rowPosition_ = NULL; if (other.secRowOfU_) { secRowOfU_ = new int[maximumRows_]; memcpy(secRowOfU_, other.secRowOfU_, maximumRows_ * sizeof(int)); } else secRowOfU_ = NULL; if (other.secRowPosition_) { secRowPosition_ = new int[maximumRows_]; memcpy(secRowPosition_, other.secRowPosition_, maximumRows_ * sizeof(int)); } else secRowPosition_ = NULL; if (other.EtaPosition_) { EtaPosition_ = new int[other.maxEtaRows_]; memcpy(EtaPosition_, other.EtaPosition_, other.maxEtaRows_ * sizeof(int)); } else EtaPosition_ = NULL; if (other.EtaStarts_) { EtaStarts_ = new int[other.maxEtaRows_]; memcpy(EtaStarts_, other.EtaStarts_, other.maxEtaRows_ * sizeof(int)); } else EtaStarts_ = NULL; if (other.EtaLengths_) { EtaLengths_ = new int[other.maxEtaRows_]; memcpy(EtaLengths_, other.EtaLengths_, other.maxEtaRows_ * sizeof(int)); } else EtaLengths_ = NULL; if (other.EtaInd_) { EtaInd_ = new int[other.EtaMaxCap_]; memcpy(EtaInd_, other.EtaInd_, other.EtaMaxCap_ * sizeof(int)); } else EtaInd_ = NULL; if (other.Eta_) { Eta_ = new double[other.EtaMaxCap_]; memcpy(Eta_, other.Eta_, other.EtaMaxCap_ * sizeof(double)); } else Eta_ = NULL; doSuhlHeuristic_ = other.doSuhlHeuristic_; maxU_ = other.maxU_; maxGrowth_ = other.maxGrowth_; maxA_ = other.maxA_; pivotCandLimit_ = other.pivotCandLimit_; } // getAreas. Gets space for a factorization //called by constructors void CoinSimpFactorization::getAreas(int numberOfRows, int numberOfColumns, int, int) { numberRows_ = numberOfRows; numberColumns_ = numberOfColumns; int size = numberRows_ * (numberRows_ + CoinMax(maximumPivots_, (numberRows_ + 1) >> 1)); if (size > maximumSpace_) { delete[] elements_; elements_ = new CoinFactorizationDouble[size]; maximumSpace_ = size; } if (numberRows_ > maximumRows_) { maximumRows_ = numberRows_; delete[] pivotRow_; delete[] workArea_; pivotRow_ = new int[2 * maximumRows_ + maximumPivots_]; workArea_ = new CoinFactorizationDouble[maximumRows_]; allocateSomeArrays(); } } // preProcess. void CoinSimpFactorization::preProcess() { int put = numberRows_ * numberRows_; int *indexRow = reinterpret_cast< int * >(elements_ + put); int *starts = reinterpret_cast< int * >(pivotRow_); initialSomeNumbers(); // compute sizes for Urows_ and Ucolumns_ //for ( int row=0; row < numberRows_; ++row ) //UrowLengths_[row]=0; int k = 0; for (int column = 0; column < numberColumns_; ++column) { UcolStarts_[column] = k; //for (int j=starts[column];j(elements_ + put); int *starts = reinterpret_cast< int * >(pivotRow_); for (int column = 0; column <= numberColumns_; ++column) { starts[column] = colStarts[column]; } const int limit = colStarts[numberColumns_]; for (int i = 0; i < limit; ++i) { indexRow[i] = indicesRow[i]; elements_[i] = elements[i]; } preProcess(); factor(); } //Does factorization int CoinSimpFactorization::factor() { numberPivots_ = 0; status_ = 0; FactorPointers pointers(numberRows_, numberColumns_, UrowLengths_, UcolLengths_); int rc = mainLoopFactor(pointers); // rc=0 success if (rc != 0) { // failure status_ = -1; //return status_; // failure } //if ( rc == -3 ) { // numerical instability // status_ = -1; // return status_; //} //copyLbyRows(); copyUbyColumns(); copyRowPermutations(); firstNumberSlacks_ = numberSlacks_; // row permutations if (status_ == -1 || numberColumns_ < numberRows_) { for (int j = 0; j < numberRows_; j++) pivotRow_[j + numberRows_] = rowOfU_[j]; for (int j = 0; j < numberRows_; j++) { int k = pivotRow_[j + numberRows_]; pivotRow_[k] = j; } } else // no permutations for (int j = 0; j < numberRows_; j++) { pivotRow_[j] = j; pivotRow_[j + numberRows_] = j; } return status_; } // // Makes a non-singular basis by replacing variables void CoinSimpFactorization::makeNonSingular(int *sequence, int numberColumns) { // Replace bad ones by correct slack int *workArea = reinterpret_cast< int * >(workArea_); int i; for (i = 0; i < numberRows_; i++) workArea[i] = -1; for (i = 0; i < numberGoodU_; i++) { int iOriginal = pivotRow_[i + numberRows_]; workArea[iOriginal] = i; //workArea[i]=iOriginal; } int lastRow = -1; for (i = 0; i < numberRows_; i++) { if (workArea[i] == -1) { lastRow = i; break; } } assert(lastRow >= 0); for (i = numberGoodU_; i < numberRows_; i++) { assert(lastRow < numberRows_); // Put slack in basis sequence[i] = lastRow + numberColumns; lastRow++; for (; lastRow < numberRows_; lastRow++) { if (workArea[lastRow] == -1) break; } } } // Does post processing on valid factorization - putting variables on correct rows void CoinSimpFactorization::postProcess(const int *sequence, int *pivotVariable) { for (int i = 0; i < numberRows_; i++) { int k = sequence[i]; pivotVariable[pivotRow_[i + numberRows_]] = k; } } /* Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModifying is true will do all accuracy checks before modifying factorization. Whether to set this depends on speed considerations. You could just do this on first iteration after factorization and thereafter re-factorize partial update already in U */ int CoinSimpFactorization::replaceColumn(CoinIndexedVector *, int pivotRow, double pivotCheck, bool, double) { if (numberPivots_ == maximumPivots_) return 3; double pivotValue = pivotCheck; if (fabs(pivotValue) < zeroTolerance_) return 2; int realPivotRow = pivotRow_[pivotRow]; LUupdate(pivotRow); pivotRow_[2 * numberRows_ + numberPivots_] = realPivotRow; numberPivots_++; return 0; } int CoinSimpFactorization::updateColumn(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute) const { return upColumn(regionSparse, regionSparse2, noPermute, false); } int CoinSimpFactorization::updateColumnFT(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute) { int rc = upColumn(regionSparse, regionSparse2, noPermute, true); return rc; } int CoinSimpFactorization::upColumn(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool, bool save) const { assert(numberRows_ == numberColumns_); double *region2 = regionSparse2->denseVector(); int *regionIndex = regionSparse2->getIndices(); int numberNonZero = regionSparse2->getNumElements(); double *region = regionSparse->denseVector(); if (!regionSparse2->packedMode()) { region = regionSparse2->denseVector(); } else { // packed mode for (int j = 0; j < numberNonZero; j++) { region[regionIndex[j]] = region2[j]; region2[j] = 0.0; } } double *solution = workArea2_; ftran(region, solution, save); // get nonzeros numberNonZero = 0; if (!regionSparse2->packedMode()) { for (int i = 0; i < numberRows_; i++) { const double value = solution[i]; if (fabs(value) > zeroTolerance_) { region[i] = value; regionIndex[numberNonZero++] = i; } else region[i] = 0.0; } } else { // packed mode memset(region, 0, numberRows_ * sizeof(double)); for (int i = 0; i < numberRows_; i++) { const double value = solution[i]; if (fabs(value) > zeroTolerance_) { region2[numberNonZero] = value; regionIndex[numberNonZero++] = i; } } } regionSparse2->setNumElements(numberNonZero); return 0; } int CoinSimpFactorization::updateTwoColumnsFT(CoinIndexedVector *regionSparse1, CoinIndexedVector *regionSparse2, CoinIndexedVector *regionSparse3, bool) { assert(numberRows_ == numberColumns_); double *region2 = regionSparse2->denseVector(); int *regionIndex2 = regionSparse2->getIndices(); int numberNonZero2 = regionSparse2->getNumElements(); double *vec1 = regionSparse1->denseVector(); if (!regionSparse2->packedMode()) { vec1 = regionSparse2->denseVector(); } else { // packed mode for (int j = 0; j < numberNonZero2; j++) { vec1[regionIndex2[j]] = region2[j]; region2[j] = 0.0; } } // double *region3 = regionSparse3->denseVector(); int *regionIndex3 = regionSparse3->getIndices(); int numberNonZero3 = regionSparse3->getNumElements(); double *vec2 = auxVector_; if (!regionSparse3->packedMode()) { vec2 = regionSparse3->denseVector(); } else { // packed mode memset(vec2, 0, numberRows_ * sizeof(double)); for (int j = 0; j < numberNonZero3; j++) { vec2[regionIndex3[j]] = region3[j]; region3[j] = 0.0; } } double *solution1 = workArea2_; double *solution2 = workArea3_; ftran2(vec1, solution1, vec2, solution2); // get nonzeros numberNonZero2 = 0; if (!regionSparse2->packedMode()) { double value; for (int i = 0; i < numberRows_; i++) { value = solution1[i]; if (fabs(value) > zeroTolerance_) { vec1[i] = value; regionIndex2[numberNonZero2++] = i; } else vec1[i] = 0.0; } } else { // packed mode double value; for (int i = 0; i < numberRows_; i++) { vec1[i] = 0.0; value = solution1[i]; if (fabs(value) > zeroTolerance_) { region2[numberNonZero2] = value; regionIndex2[numberNonZero2++] = i; } } } regionSparse2->setNumElements(numberNonZero2); // numberNonZero3 = 0; if (!regionSparse3->packedMode()) { double value; for (int i = 0; i < numberRows_; i++) { value = solution2[i]; if (fabs(value) > zeroTolerance_) { vec2[i] = value; regionIndex3[numberNonZero3++] = i; } else vec2[i] = 0.0; } } else { // packed mode double value; for (int i = 0; i < numberRows_; i++) { value = solution2[i]; if (fabs(value) > zeroTolerance_) { region3[numberNonZero3] = value; regionIndex3[numberNonZero3++] = i; } } } regionSparse3->setNumElements(numberNonZero3); return 0; } int CoinSimpFactorization::updateColumnTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) const { upColumnTranspose(regionSparse, regionSparse2); return 0; } int CoinSimpFactorization::upColumnTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) const { assert(numberRows_ == numberColumns_); double *region2 = regionSparse2->denseVector(); int *regionIndex = regionSparse2->getIndices(); int numberNonZero = regionSparse2->getNumElements(); double *region = regionSparse->denseVector(); if (!regionSparse2->packedMode()) { region = regionSparse2->denseVector(); } else { // packed for (int j = 0; j < numberNonZero; j++) { region[regionIndex[j]] = region2[j]; region2[j] = 0.0; } } double *solution = workArea2_; btran(region, solution); // get nonzeros numberNonZero = 0; if (!regionSparse2->packedMode()) { double value; for (int i = 0; i < numberRows_; i++) { value = solution[i]; if (fabs(value) > zeroTolerance_) { region[i] = value; regionIndex[numberNonZero++] = i; } else region[i] = 0.0; } } else { // packed mode memset(region, 0, numberRows_ * sizeof(double)); for (int i = 0; i < numberRows_; i++) { const double value = solution[i]; if (fabs(value) > zeroTolerance_) { region2[numberNonZero] = value; regionIndex[numberNonZero++] = i; } } } regionSparse2->setNumElements(numberNonZero); return 0; } int CoinSimpFactorization::mainLoopFactor(FactorPointers &pointers) { numberGoodU_ = 0; numberSlacks_ = 0; bool ifSlack = true; for (int i = 0; i < numberColumns_; ++i) { int r, s; //s=i; if (findPivot(pointers, r, s, ifSlack)) { return -1; } if (ifSlack) ++numberSlacks_; const int rowPos = rowPosition_[r]; const int colPos = colPosition_[s]; assert(i <= rowPos && rowPos < numberRows_); assert(i <= colPos && colPos < numberColumns_); // permute columns int j = colOfU_[i]; colOfU_[i] = colOfU_[colPos]; colOfU_[colPos] = j; colPosition_[colOfU_[i]] = i; colPosition_[colOfU_[colPos]] = colPos; // permute rows j = rowOfU_[i]; rowOfU_[i] = rowOfU_[rowPos]; rowOfU_[rowPos] = j; rowPosition_[rowOfU_[i]] = i; rowPosition_[rowOfU_[rowPos]] = rowPos; GaussEliminate(pointers, r, s); //if ( maxU_ > maxGrowth_ * maxA_ ){ // return -3; //} ++numberGoodU_; } return 0; } /// find a pivot in the active part of U int CoinSimpFactorization::findPivot(FactorPointers &pointers, int &r, int &s, bool &ifSlack) { int *firstRowKnonzeros = pointers.firstRowKnonzeros; int *nextRow = pointers.nextRow; int *firstColKnonzeros = pointers.firstColKnonzeros; int *prevColumn = pointers.prevColumn; int *nextColumn = pointers.nextColumn; r = s = -1; int numCandidates = 0; double bestMarkowitzCount = COIN_DBL_MAX; // if there is a column with one element choose it as pivot int column = firstColKnonzeros[1]; if (column != -1) { assert(UcolLengths_[column] == 1); r = UcolInd_[UcolStarts_[column]]; s = column; if (!colSlack_[column]) ifSlack = false; return 0; } // from now on no more slacks ifSlack = false; // if there is a row with one element choose it int row = firstRowKnonzeros[1]; if (row != -1) { assert(UrowLengths_[row] == 1); s = UrowInd_[UrowStarts_[row]]; r = row; return 0; } // consider other rows and columns for (int length = 2; length <= numberRows_; ++length) { int nextCol = -1; for (column = firstColKnonzeros[length]; column != -1; column = nextCol) { nextCol = nextColumn[column]; int minRow, minRowLength; int rc = findShortRow(column, length, minRow, minRowLength, pointers); if (rc == 0) { r = minRow; s = column; return 0; } if (minRow != -1) { ++numCandidates; double MarkowitzCount = static_cast< double >(minRowLength - 1) * (length - 1); if (MarkowitzCount < bestMarkowitzCount) { r = minRow; s = column; bestMarkowitzCount = MarkowitzCount; } if (numCandidates == pivotCandLimit_) return 0; } else { if (doSuhlHeuristic_) { // this column did not give a candidate, it will be // removed until it becomes a singleton removeColumnFromActSet(column, pointers); prevColumn[column] = nextColumn[column] = column; } } } // end for ( column= .... // now rows for (row = firstRowKnonzeros[length]; row != -1; row = nextRow[row]) { int minCol, minColLength; int rc = findShortColumn(row, length, minCol, minColLength, pointers); if (rc == 0) { r = row; s = minCol; return 0; } if (minCol != -1) { ++numCandidates; double MarkowitzCount = static_cast< double >(minColLength - 1) * (length - 1); if (MarkowitzCount < bestMarkowitzCount) { r = row; s = minCol; bestMarkowitzCount = MarkowitzCount; } if (numCandidates == pivotCandLimit_) return 0; } //else abort(); } // end for ( row= ... } // end for ( int length= ... if (r == -1 || s == -1) return 1; else return 0; } // int CoinSimpFactorization::findPivotShCol(FactorPointers &pointers, int &r, int &s) { int *firstColKnonzeros = pointers.firstColKnonzeros; r = s = -1; // if there is a column with one element choose it as pivot int column = firstColKnonzeros[1]; if (column != -1) { assert(UcolLengths_[column] == 1); r = UcolInd_[UcolStarts_[column]]; s = column; return 0; } // consider other columns for (int length = 2; length <= numberRows_; ++length) { column = firstColKnonzeros[length]; if (column != -1) break; } if (column == -1) return 1; // find largest element const int colBeg = UcolStarts_[column]; const int colEnd = colBeg + UcolLengths_[column]; double largest = 0.0; int rowLargest = -1; for (int j = colBeg; j < colEnd; ++j) { const int row = UcolInd_[j]; const int columnIndx = findInRow(row, column); assert(columnIndx != -1); double coeff = fabs(Urows_[columnIndx]); if (coeff < largest) continue; largest = coeff; rowLargest = row; } assert(rowLargest != -1); s = column; r = rowLargest; return 0; } int CoinSimpFactorization::findPivotSimp(FactorPointers &, int &r, int &s) { r = -1; int column = s; const int colBeg = UcolStarts_[column]; const int colEnd = colBeg + UcolLengths_[column]; double largest = 0.0; int rowLargest = -1; for (int j = colBeg; j < colEnd; ++j) { const int row = UcolInd_[j]; const int columnIndx = findInRow(row, column); assert(columnIndx != -1); double coeff = fabs(Urows_[columnIndx]); if (coeff < largest) continue; largest = coeff; rowLargest = row; } if (rowLargest != -1) { r = rowLargest; return 0; } else return 1; } int CoinSimpFactorization::findShortRow(const int column, const int length, int &minRow, int &minRowLength, FactorPointers &pointers) { const int colBeg = UcolStarts_[column]; const int colEnd = colBeg + UcolLengths_[column]; minRow = -1; minRowLength = COIN_INT_MAX; for (int j = colBeg; j < colEnd; ++j) { int row = UcolInd_[j]; if (UrowLengths_[row] >= minRowLength) continue; double largestInRow = findMaxInRrow(row, pointers); // find column in row int columnIndx = findInRow(row, column); assert(columnIndx != -1); double coeff = Urows_[columnIndx]; if (fabs(coeff) < pivotTolerance_ * largestInRow) continue; minRow = row; minRowLength = UrowLengths_[row]; if (UrowLengths_[row] <= length) return 0; } return 1; } int CoinSimpFactorization::findShortColumn(const int row, const int length, int &minCol, int &minColLength, FactorPointers &pointers) { const int rowBeg = UrowStarts_[row]; const int rowEnd = rowBeg + UrowLengths_[row]; minCol = -1; minColLength = COIN_INT_MAX; double largestInRow = findMaxInRrow(row, pointers); for (int i = rowBeg; i < rowEnd; ++i) { int column = UrowInd_[i]; if (UcolLengths_[column] >= minColLength) continue; double coeff = Urows_[i]; if (fabs(coeff) < pivotTolerance_ * largestInRow) continue; minCol = column; minColLength = UcolLengths_[column]; if (minColLength <= length) return 0; } return 1; } // Gaussian elimination void CoinSimpFactorization::GaussEliminate(FactorPointers &pointers, int &pivotRow, int &pivotCol) { assert(pivotRow >= 0 && pivotRow < numberRows_); assert(pivotCol >= 0 && pivotCol < numberRows_); int *firstColKnonzeros = pointers.firstColKnonzeros; int *prevColumn = pointers.prevColumn; int *nextColumn = pointers.nextColumn; int *colLabels = vecLabels_; double *denseRow = denseVector_; removeRowFromActSet(pivotRow, pointers); removeColumnFromActSet(pivotCol, pointers); // find column s int indxColS = findInRow(pivotRow, pivotCol); assert(indxColS >= 0); // store the inverse of the pivot and remove it from row double invPivot = 1.0 / Urows_[indxColS]; invOfPivots_[pivotRow] = invPivot; int rowBeg = UrowStarts_[pivotRow]; int rowEnd = rowBeg + UrowLengths_[pivotRow]; Urows_[indxColS] = Urows_[rowEnd - 1]; UrowInd_[indxColS] = UrowInd_[rowEnd - 1]; --UrowLengths_[pivotRow]; --rowEnd; // now remove pivot from column int indxRowR = findInColumn(pivotCol, pivotRow); assert(indxRowR >= 0); const int pivColEnd = UcolStarts_[pivotCol] + UcolLengths_[pivotCol]; UcolInd_[indxRowR] = UcolInd_[pivColEnd - 1]; --UcolLengths_[pivotCol]; // go through pivot row for (int i = rowBeg; i < rowEnd; ++i) { int column = UrowInd_[i]; colLabels[column] = 1; denseRow[column] = Urows_[i]; // remove this column from bucket because it will change removeColumnFromActSet(column, pointers); // remove element (pivotRow, column) from column int indxRow = findInColumn(column, pivotRow); assert(indxRow >= 0); const int colEnd = UcolStarts_[column] + UcolLengths_[column]; UcolInd_[indxRow] = UcolInd_[colEnd - 1]; --UcolLengths_[column]; } // pivoting(pivotRow, pivotCol, invPivot, pointers); // rowBeg = UrowStarts_[pivotRow]; rowEnd = rowBeg + UrowLengths_[pivotRow]; for (int i = rowBeg; i < rowEnd; ++i) { int column = UrowInd_[i]; // clean back these two arrays colLabels[column] = 0; denseRow[column] = 0.0; // column goes into a bucket, if Suhl' heuristic had removed it, it // can go back only if it is a singleton if (UcolLengths_[column] != 1 || prevColumn[column] != column || nextColumn[column] != column) { prevColumn[column] = -1; nextColumn[column] = firstColKnonzeros[UcolLengths_[column]]; if (nextColumn[column] != -1) prevColumn[nextColumn[column]] = column; firstColKnonzeros[UcolLengths_[column]] = column; } } } void CoinSimpFactorization::pivoting(const int pivotRow, const int pivotColumn, const double invPivot, FactorPointers &pointers) { // initialize the new column of L LcolStarts_[pivotRow] = LcolSize_; // go trough pivot column const int colBeg = UcolStarts_[pivotColumn]; int colEnd = colBeg + UcolLengths_[pivotColumn]; for (int i = colBeg; i < colEnd; ++i) { int row = UcolInd_[i]; // remove row from bucket because it will change removeRowFromActSet(row, pointers); // find pivot column int pivotColInRow = findInRow(row, pivotColumn); assert(pivotColInRow >= 0); const double multiplier = Urows_[pivotColInRow] * invPivot; // remove element (row,pivotColumn) from row const int currentRowEnd = UrowStarts_[row] + UrowLengths_[row]; Urows_[pivotColInRow] = Urows_[currentRowEnd - 1]; UrowInd_[pivotColInRow] = UrowInd_[currentRowEnd - 1]; --UrowLengths_[row]; int newNonZeros = UrowLengths_[pivotRow]; updateCurrentRow(pivotRow, row, multiplier, pointers, newNonZeros); // store multiplier if (LcolSize_ == LcolCap_) increaseLsize(); Lcolumns_[LcolSize_] = multiplier; LcolInd_[LcolSize_++] = row; ++LcolLengths_[pivotRow]; } // remove elements of pivot column UcolLengths_[pivotColumn] = 0; // remove pivot column from Ucol_ if (prevColInU_[pivotColumn] == -1) firstColInU_ = nextColInU_[pivotColumn]; else { nextColInU_[prevColInU_[pivotColumn]] = nextColInU_[pivotColumn]; #ifdef COIN_SIMP_CAPACITY UcolCapacities_[prevColInU_[pivotColumn]] += UcolCapacities_[pivotColumn]; UcolCapacities_[pivotColumn] = 0; #endif } if (nextColInU_[pivotColumn] == -1) lastColInU_ = prevColInU_[pivotColumn]; else prevColInU_[nextColInU_[pivotColumn]] = prevColInU_[pivotColumn]; } void CoinSimpFactorization::updateCurrentRow(const int pivotRow, const int row, const double multiplier, FactorPointers &pointers, int &newNonZeros) { double *rowMax = pointers.rowMax; int *firstRowKnonzeros = pointers.firstRowKnonzeros; int *prevRow = pointers.prevRow; int *nextRow = pointers.nextRow; int *colLabels = vecLabels_; double *denseRow = denseVector_; const int rowBeg = UrowStarts_[row]; int rowEnd = rowBeg + UrowLengths_[row]; // treat old nonzeros for (int i = rowBeg; i < rowEnd; ++i) { const int column = UrowInd_[i]; if (colLabels[column]) { Urows_[i] -= multiplier * denseRow[column]; const double absNewCoeff = fabs(Urows_[i]); colLabels[column] = 0; --newNonZeros; if (absNewCoeff < zeroTolerance_) { // remove it from row UrowInd_[i] = UrowInd_[rowEnd - 1]; Urows_[i] = Urows_[rowEnd - 1]; --UrowLengths_[row]; --i; --rowEnd; // remove it from column int indxRow = findInColumn(column, row); assert(indxRow >= 0); const int colEnd = UcolStarts_[column] + UcolLengths_[column]; UcolInd_[indxRow] = UcolInd_[colEnd - 1]; --UcolLengths_[column]; } else { if (maxU_ < absNewCoeff) maxU_ = absNewCoeff; } } } // now add the new nonzeros to the row #ifdef COIN_SIMP_CAPACITY if (UrowLengths_[row] + newNonZeros > UrowCapacities_[row]) increaseRowSize(row, UrowLengths_[row] + newNonZeros); #endif const int pivotRowBeg = UrowStarts_[pivotRow]; const int pivotRowEnd = pivotRowBeg + UrowLengths_[pivotRow]; int numNew = 0; int *newCols = pointers.newCols; for (int i = pivotRowBeg; i < pivotRowEnd; ++i) { const int column = UrowInd_[i]; if (colLabels[column]) { const double value = -multiplier * denseRow[column]; const double absNewCoeff = fabs(value); if (absNewCoeff >= zeroTolerance_) { const int newInd = UrowStarts_[row] + UrowLengths_[row]; Urows_[newInd] = value; UrowInd_[newInd] = column; ++UrowLengths_[row]; newCols[numNew++] = column; if (maxU_ < absNewCoeff) maxU_ = absNewCoeff; } } else colLabels[column] = 1; } // add the new nonzeros to the columns for (int i = 0; i < numNew; ++i) { const int column = newCols[i]; #ifdef COIN_SIMP_CAPACITY if (UcolLengths_[column] + 1 > UcolCapacities_[column]) { increaseColSize(column, UcolLengths_[column] + 1, false); } #endif const int newInd = UcolStarts_[column] + UcolLengths_[column]; UcolInd_[newInd] = row; ++UcolLengths_[column]; } // the row goes to a new bucket prevRow[row] = -1; nextRow[row] = firstRowKnonzeros[UrowLengths_[row]]; if (nextRow[row] != -1) prevRow[nextRow[row]] = row; firstRowKnonzeros[UrowLengths_[row]] = row; // rowMax[row] = -1.0; } #ifdef COIN_SIMP_CAPACITY void CoinSimpFactorization::increaseRowSize(const int row, const int newSize) { assert(newSize > UrowCapacities_[row]); const int newNumElements = newSize + minIncrease_; if (UrowMaxCap_ < UrowEnd_ + newNumElements) { enlargeUrow(UrowEnd_ + newNumElements - UrowMaxCap_); } int currentCapacity = UrowCapacities_[row]; memcpy(&Urows_[UrowEnd_], &Urows_[UrowStarts_[row]], UrowLengths_[row] * sizeof(double)); memcpy(&UrowInd_[UrowEnd_], &UrowInd_[UrowStarts_[row]], UrowLengths_[row] * sizeof(int)); UrowStarts_[row] = UrowEnd_; UrowCapacities_[row] = newNumElements; UrowEnd_ += UrowCapacities_[row]; if (firstRowInU_ == lastRowInU_) return; // only one element // remove row from list if (prevRowInU_[row] == -1) firstRowInU_ = nextRowInU_[row]; else { nextRowInU_[prevRowInU_[row]] = nextRowInU_[row]; UrowCapacities_[prevRowInU_[row]] += currentCapacity; } if (nextRowInU_[row] == -1) lastRowInU_ = prevRowInU_[row]; else prevRowInU_[nextRowInU_[row]] = prevRowInU_[row]; // add row at the end of list nextRowInU_[lastRowInU_] = row; nextRowInU_[row] = -1; prevRowInU_[row] = lastRowInU_; lastRowInU_ = row; } #endif #ifdef COIN_SIMP_CAPACITY void CoinSimpFactorization::increaseColSize(const int column, const int newSize, const bool ifElements) { assert(newSize > UcolCapacities_[column]); const int newNumElements = newSize + minIncrease_; if (UcolMaxCap_ < UcolEnd_ + newNumElements) { enlargeUcol(UcolEnd_ + newNumElements - UcolMaxCap_, ifElements); } int currentCapacity = UcolCapacities_[column]; memcpy(&UcolInd_[UcolEnd_], &UcolInd_[UcolStarts_[column]], UcolLengths_[column] * sizeof(int)); if (ifElements) { memcpy(&Ucolumns_[UcolEnd_], &Ucolumns_[UcolStarts_[column]], UcolLengths_[column] * sizeof(double)); } UcolStarts_[column] = UcolEnd_; UcolCapacities_[column] = newNumElements; UcolEnd_ += UcolCapacities_[column]; if (firstColInU_ == lastColInU_) return; // only one column // remove from list if (prevColInU_[column] == -1) firstColInU_ = nextColInU_[column]; else { nextColInU_[prevColInU_[column]] = nextColInU_[column]; UcolCapacities_[prevColInU_[column]] += currentCapacity; } if (nextColInU_[column] == -1) lastColInU_ = prevColInU_[column]; else prevColInU_[nextColInU_[column]] = prevColInU_[column]; // add column at the end nextColInU_[lastColInU_] = column; nextColInU_[column] = -1; prevColInU_[column] = lastColInU_; lastColInU_ = column; } #endif double CoinSimpFactorization::findMaxInRrow(const int row, FactorPointers &pointers) { double *rowMax = pointers.rowMax; double largest = rowMax[row]; if (largest >= 0.0) return largest; const int rowBeg = UrowStarts_[row]; const int rowEnd = rowBeg + UrowLengths_[row]; for (int i = rowBeg; i < rowEnd; ++i) { const double absValue = fabs(Urows_[i]); if (absValue > largest) largest = absValue; } rowMax[row] = largest; return largest; } void CoinSimpFactorization::increaseLsize() { int newcap = LcolCap_ + minIncrease_; double *aux = new double[newcap]; memcpy(aux, Lcolumns_, LcolCap_ * sizeof(double)); delete[] Lcolumns_; Lcolumns_ = aux; int *iaux = new int[newcap]; memcpy(iaux, LcolInd_, LcolCap_ * sizeof(int)); delete[] LcolInd_; LcolInd_ = iaux; LcolCap_ = newcap; } void CoinSimpFactorization::enlargeUcol(const int numNewElements, const bool ifElements) { int *iaux = new int[UcolMaxCap_ + numNewElements]; memcpy(iaux, UcolInd_, UcolMaxCap_ * sizeof(int)); delete[] UcolInd_; UcolInd_ = iaux; if (ifElements) { double *aux = new double[UcolMaxCap_ + numNewElements]; memcpy(aux, Ucolumns_, UcolMaxCap_ * sizeof(double)); delete[] Ucolumns_; Ucolumns_ = aux; } UcolMaxCap_ += numNewElements; } void CoinSimpFactorization::enlargeUrow(const int numNewElements) { int *iaux = new int[UrowMaxCap_ + numNewElements]; memcpy(iaux, UrowInd_, UrowMaxCap_ * sizeof(int)); delete[] UrowInd_; UrowInd_ = iaux; double *aux = new double[UrowMaxCap_ + numNewElements]; memcpy(aux, Urows_, UrowMaxCap_ * sizeof(double)); delete[] Urows_; Urows_ = aux; UrowMaxCap_ += numNewElements; } void CoinSimpFactorization::copyUbyColumns() { memset(UcolLengths_, 0, numberColumns_ * sizeof(int)); for (int column = 0; column < numberColumns_; ++column) { prevColInU_[column] = column - 1; nextColInU_[column] = column + 1; } nextColInU_[numberColumns_ - 1] = -1; firstColInU_ = 0; lastColInU_ = numberColumns_ - 1; //int nonZeros=0; //for ( int row=0; rowzeroTolerance_ ) { colBeg = LcolStarts_[k]; ind = LcolInd_ + colBeg; indEnd = ind + LcolLengths_[k]; Lcol = Lcolumns_ + colBeg; for (; ind != indEnd; ++ind) { rhs[*ind] -= (*Lcol) * xk; ++Lcol; } } } } void CoinSimpFactorization::Lxeqb2(double *b1, double *b2) const { double *rhs1 = b1; double *rhs2 = b2; double x1, x2, *Lcol; int k, colBeg, *ind, *indEnd, j; // now solve for (j = firstNumberSlacks_; j < numberRows_; ++j) { k = rowOfU_[j]; x1 = rhs1[k]; x2 = rhs2[k]; if (x1 == 0.0) { if (x2 == 0.0) { } else { colBeg = LcolStarts_[k]; ind = LcolInd_ + colBeg; indEnd = ind + LcolLengths_[k]; Lcol = Lcolumns_ + colBeg; for (; ind != indEnd; ++ind) { #if 0 rhs2[ *ind ]-= (*Lcol) * x2; #else double value = rhs2[*ind]; rhs2[*ind] = value - (*Lcol) * x2; #endif ++Lcol; } } } else { if (x2 == 0.0) { colBeg = LcolStarts_[k]; ind = LcolInd_ + colBeg; indEnd = ind + LcolLengths_[k]; Lcol = Lcolumns_ + colBeg; for (; ind != indEnd; ++ind) { #if 0 rhs1[ *ind ]-= (*Lcol) * x1; #else double value = rhs1[*ind]; rhs1[*ind] = value - (*Lcol) * x1; #endif ++Lcol; } } else { colBeg = LcolStarts_[k]; ind = LcolInd_ + colBeg; indEnd = ind + LcolLengths_[k]; Lcol = Lcolumns_ + colBeg; for (; ind != indEnd; ++ind) { #if 0 rhs1[ *ind ]-= (*Lcol) * x1; rhs2[ *ind ]-= (*Lcol) * x2; #else double value1 = rhs1[*ind]; rhs1[*ind] = value1 - (*Lcol) * x1; double value2 = rhs2[*ind]; rhs2[*ind] = value2 - (*Lcol) * x2; #endif ++Lcol; } } } } } void CoinSimpFactorization::Uxeqb(double *b, double *sol) const { double *rhs = b; int row, column, colBeg, *ind, *indEnd, k; double x, *uCol; // now solve for (k = numberRows_ - 1; k >= numberSlacks_; --k) { row = secRowOfU_[k]; x = rhs[row]; column = colOfU_[k]; if (x != 0.0) { //if ( fabs(x) > zeroTolerance_ ) { x *= invOfPivots_[row]; colBeg = UcolStarts_[column]; ind = UcolInd_ + colBeg; indEnd = ind + UcolLengths_[column]; uCol = Ucolumns_ + colBeg; for (; ind != indEnd; ++ind) { #if 0 rhs[ *ind ]-= (*uCol) * x; #else double value = rhs[*ind]; rhs[*ind] = value - (*uCol) * x; #endif ++uCol; } sol[column] = x; } else sol[column] = 0.0; } for (k = numberSlacks_ - 1; k >= 0; --k) { row = secRowOfU_[k]; column = colOfU_[k]; sol[column] = -rhs[row]; } } void CoinSimpFactorization::Uxeqb2(double *b1, double *sol1, double *b2, double *sol2) const { double *rhs1 = b1; double *rhs2 = b2; int row, column, colBeg, *ind, *indEnd; double x1, x2, *uCol; // now solve for (int k = numberRows_ - 1; k >= numberSlacks_; --k) { row = secRowOfU_[k]; x1 = rhs1[row]; x2 = rhs2[row]; column = colOfU_[k]; if (x1 == 0.0) { if (x2 == 0.0) { sol1[column] = 0.0; sol2[column] = 0.0; } else { x2 *= invOfPivots_[row]; colBeg = UcolStarts_[column]; ind = UcolInd_ + colBeg; indEnd = ind + UcolLengths_[column]; uCol = Ucolumns_ + colBeg; for (; ind != indEnd; ++ind) { #if 0 rhs2[ *ind ]-= (*uCol) * x2; #else double value = rhs2[*ind]; rhs2[*ind] = value - (*uCol) * x2; #endif ++uCol; } sol1[column] = 0.0; sol2[column] = x2; } } else { if (x2 == 0.0) { x1 *= invOfPivots_[row]; colBeg = UcolStarts_[column]; ind = UcolInd_ + colBeg; indEnd = ind + UcolLengths_[column]; uCol = Ucolumns_ + colBeg; for (; ind != indEnd; ++ind) { #if 0 rhs1[ *ind ]-= (*uCol) * x1; #else double value = rhs1[*ind]; rhs1[*ind] = value - (*uCol) * x1; #endif ++uCol; } sol1[column] = x1; sol2[column] = 0.0; } else { x1 *= invOfPivots_[row]; x2 *= invOfPivots_[row]; colBeg = UcolStarts_[column]; ind = UcolInd_ + colBeg; indEnd = ind + UcolLengths_[column]; uCol = Ucolumns_ + colBeg; for (; ind != indEnd; ++ind) { #if 0 rhs1[ *ind ]-= (*uCol) * x1; rhs2[ *ind ]-= (*uCol) * x2; #else double value1 = rhs1[*ind]; rhs1[*ind] = value1 - (*uCol) * x1; double value2 = rhs2[*ind]; rhs2[*ind] = value2 - (*uCol) * x2; #endif ++uCol; } sol1[column] = x1; sol2[column] = x2; } } } for (int k = numberSlacks_ - 1; k >= 0; --k) { row = secRowOfU_[k]; column = colOfU_[k]; sol1[column] = -rhs1[row]; sol2[column] = -rhs2[row]; } } void CoinSimpFactorization::xLeqb(double *b) const { double *rhs = b; int k, *ind, *indEnd, j; int colBeg; double x, *Lcol; // find last nonzero int last; for (last = numberColumns_ - 1; last >= 0; --last) { if (rhs[rowOfU_[last]]) break; } // this seems to be faster if (last >= 0) { for (j = last; j >= firstNumberSlacks_; --j) { k = rowOfU_[j]; x = rhs[k]; colBeg = LcolStarts_[k]; ind = LcolInd_ + colBeg; indEnd = ind + LcolLengths_[k]; Lcol = Lcolumns_ + colBeg; for (; ind != indEnd; ++ind) { x -= (*Lcol) * rhs[*ind]; ++Lcol; } rhs[k] = x; } } // if ( last >= 0 ){ } void CoinSimpFactorization::xUeqb(double *b, double *sol) const { double *rhs = b; int row, col, *ind, *indEnd, k; double xr; // now solve #if 1 int rowBeg; double *uRow; for (k = 0; k < numberSlacks_; ++k) { row = secRowOfU_[k]; col = colOfU_[k]; xr = rhs[col]; if (xr != 0.0) { //if ( fabs(xr)> zeroTolerance_ ) { xr = -xr; rowBeg = UrowStarts_[row]; ind = UrowInd_ + rowBeg; indEnd = ind + UrowLengths_[row]; uRow = Urows_ + rowBeg; for (; ind != indEnd; ++ind) { rhs[*ind] -= (*uRow) * xr; ++uRow; } sol[row] = xr; } else sol[row] = 0.0; } for (k = numberSlacks_; k < numberRows_; ++k) { row = secRowOfU_[k]; col = colOfU_[k]; xr = rhs[col]; if (xr != 0.0) { //if ( fabs(xr)> zeroTolerance_ ) { xr *= invOfPivots_[row]; rowBeg = UrowStarts_[row]; ind = UrowInd_ + rowBeg; indEnd = ind + UrowLengths_[row]; uRow = Urows_ + rowBeg; for (; ind != indEnd; ++ind) { rhs[*ind] -= (*uRow) * xr; ++uRow; } sol[row] = xr; } else sol[row] = 0.0; } #else for (k = 0; k < numberSlacks_; ++k) { row = secRowOfU_[k]; col = colOfU_[k]; sol[row] = -rhs[col]; } for (k = numberSlacks_; k < numberRows_; ++k) { row = secRowOfU_[k]; col = colOfU_[k]; xr = rhs[col]; int colBeg = UcolStarts_[col]; ind = UcolInd_ + colBeg; indEnd = ind + UcolLengths_[col]; double *uCol = Ucolumns_ + colBeg; for (; ind != indEnd; ++ind, ++uCol) { int iRow = *ind; double value = sol[iRow]; double elementValue = *uCol; xr -= value * elementValue; } if (xr != 0.0) { xr *= invOfPivots_[row]; sol[row] = xr; } else sol[row] = 0.0; } #endif } int CoinSimpFactorization::LUupdate(int newBasicCol) { //checkU(); // recover vector kept in ftran double *newColumn = vecKeep_; int *indNewColumn = indKeep_; int sizeNewColumn = keepSize_; // remove elements of new column of U const int colBeg = UcolStarts_[newBasicCol]; const int colEnd = colBeg + UcolLengths_[newBasicCol]; for (int i = colBeg; i < colEnd; ++i) { const int row = UcolInd_[i]; const int colInRow = findInRow(row, newBasicCol); assert(colInRow >= 0); // remove from row const int rowEnd = UrowStarts_[row] + UrowLengths_[row]; Urows_[colInRow] = Urows_[rowEnd - 1]; UrowInd_[colInRow] = UrowInd_[rowEnd - 1]; --UrowLengths_[row]; } UcolLengths_[newBasicCol] = 0; // now add new column to U int lastRowInU = -1; for (int i = 0; i < sizeNewColumn; ++i) { //if ( fabs(newColumn[i]) < zeroTolerance_ ) continue; const int row = indNewColumn[i]; // add to row #ifdef COIN_SIMP_CAPACITY if (UrowLengths_[row] + 1 > UrowCapacities_[row]) increaseRowSize(row, UrowLengths_[row] + 1); #endif const int rowEnd = UrowStarts_[row] + UrowLengths_[row]; UrowInd_[rowEnd] = newBasicCol; Urows_[rowEnd] = newColumn[i]; ++UrowLengths_[row]; if (lastRowInU < secRowPosition_[row]) lastRowInU = secRowPosition_[row]; } // add to Ucolumns #ifdef COIN_SIMP_CAPACITY if (sizeNewColumn > UcolCapacities_[newBasicCol]) increaseColSize(newBasicCol, sizeNewColumn, true); #endif memcpy(&Ucolumns_[UcolStarts_[newBasicCol]], &newColumn[0], sizeNewColumn * sizeof(double)); memcpy(&UcolInd_[UcolStarts_[newBasicCol]], &indNewColumn[0], sizeNewColumn * sizeof(int)); UcolLengths_[newBasicCol] = sizeNewColumn; const int posNewCol = colPosition_[newBasicCol]; if (lastRowInU < posNewCol) { // matrix is singular return 1; } // permutations const int rowInU = secRowOfU_[posNewCol]; const int colInU = colOfU_[posNewCol]; for (int i = posNewCol; i < lastRowInU; ++i) { int indx = secRowOfU_[i + 1]; secRowOfU_[i] = indx; secRowPosition_[indx] = i; int jndx = colOfU_[i + 1]; colOfU_[i] = jndx; colPosition_[jndx] = i; } secRowOfU_[lastRowInU] = rowInU; secRowPosition_[rowInU] = lastRowInU; colOfU_[lastRowInU] = colInU; colPosition_[colInU] = lastRowInU; if (posNewCol < numberSlacks_) { if (lastRowInU >= numberSlacks_) --numberSlacks_; else numberSlacks_ = lastRowInU; } // rowInU will be transformed // denseVector_ is assumed to be initialized to zero const int rowBeg = UrowStarts_[rowInU]; const int rowEnd = rowBeg + UrowLengths_[rowInU]; for (int i = rowBeg; i < rowEnd; ++i) { const int column = UrowInd_[i]; denseVector_[column] = Urows_[i]; // remove element const int indxRow = findInColumn(column, rowInU); assert(indxRow >= 0); const int colEnd = UcolStarts_[column] + UcolLengths_[column]; UcolInd_[indxRow] = UcolInd_[colEnd - 1]; Ucolumns_[indxRow] = Ucolumns_[colEnd - 1]; --UcolLengths_[column]; } UrowLengths_[rowInU] = 0; // rowInU is empty // increase Eta by (lastRowInU-posNewCol) elements newEta(rowInU, lastRowInU - posNewCol); assert(!EtaLengths_[lastEtaRow_]); int saveSize = EtaSize_; ; for (int i = posNewCol; i < lastRowInU; ++i) { const int row = secRowOfU_[i]; const int column = colOfU_[i]; if (denseVector_[column] == 0.0) continue; const double multiplier = denseVector_[column] * invOfPivots_[row]; denseVector_[column] = 0.0; const int rowBeg = UrowStarts_[row]; const int rowEnd = rowBeg + UrowLengths_[row]; #if ARRAY for (int j = rowBeg; j < rowEnd; ++j) { denseVector_[UrowInd_[j]] -= multiplier * Urows_[j]; } #else int *ind = UrowInd_ + rowBeg; int *indEnd = UrowInd_ + rowEnd; double *uRow = Urows_ + rowBeg; for (; ind != indEnd; ++ind) { denseVector_[*ind] -= multiplier * (*uRow); ++uRow; } #endif // store multiplier Eta_[EtaSize_] = multiplier; EtaInd_[EtaSize_++] = row; } if (EtaSize_ != saveSize) EtaLengths_[lastEtaRow_] = EtaSize_ - saveSize; else --lastEtaRow_; // inverse of diagonal invOfPivots_[rowInU] = 1.0 / denseVector_[colOfU_[lastRowInU]]; denseVector_[colOfU_[lastRowInU]] = 0.0; // now store row int newEls = 0; for (int i = lastRowInU + 1; i < numberColumns_; ++i) { const int column = colOfU_[i]; const double coeff = denseVector_[column]; denseVector_[column] = 0.0; if (fabs(coeff) < zeroTolerance_) continue; #ifdef COIN_SIMP_CAPACITY if (UcolLengths_[column] + 1 > UcolCapacities_[column]) { increaseColSize(column, UcolLengths_[column] + 1, true); } #endif const int newInd = UcolStarts_[column] + UcolLengths_[column]; UcolInd_[newInd] = rowInU; Ucolumns_[newInd] = coeff; ++UcolLengths_[column]; workArea2_[newEls] = coeff; indVector_[newEls++] = column; } #ifdef COIN_SIMP_CAPACITY if (UrowCapacities_[rowInU] < newEls) increaseRowSize(rowInU, newEls); #endif const int startRow = UrowStarts_[rowInU]; memcpy(&Urows_[startRow], &workArea2_[0], newEls * sizeof(double)); memcpy(&UrowInd_[startRow], &indVector_[0], newEls * sizeof(int)); UrowLengths_[rowInU] = newEls; // if (fabs(invOfPivots_[rowInU]) > updateTol_) return 2; return 0; } void CoinSimpFactorization::newEta(int row, int numNewElements) { if (lastEtaRow_ == maxEtaRows_ - 1) { int *iaux = new int[maxEtaRows_ + minIncrease_]; memcpy(iaux, EtaPosition_, maxEtaRows_ * sizeof(int)); delete[] EtaPosition_; EtaPosition_ = iaux; int *jaux = new int[maxEtaRows_ + minIncrease_]; memcpy(jaux, EtaStarts_, maxEtaRows_ * sizeof(int)); delete[] EtaStarts_; EtaStarts_ = jaux; int *kaux = new int[maxEtaRows_ + minIncrease_]; memcpy(kaux, EtaLengths_, maxEtaRows_ * sizeof(int)); delete[] EtaLengths_; EtaLengths_ = kaux; maxEtaRows_ += minIncrease_; } if (EtaSize_ + numNewElements > EtaMaxCap_) { int number = CoinMax(EtaSize_ + numNewElements - EtaMaxCap_, minIncrease_); int *iaux = new int[EtaMaxCap_ + number]; memcpy(iaux, EtaInd_, EtaSize_ * sizeof(int)); delete[] EtaInd_; EtaInd_ = iaux; double *aux = new double[EtaMaxCap_ + number]; memcpy(aux, Eta_, EtaSize_ * sizeof(double)); delete[] Eta_; Eta_ = aux; EtaMaxCap_ += number; } EtaPosition_[++lastEtaRow_] = row; EtaStarts_[lastEtaRow_] = EtaSize_; EtaLengths_[lastEtaRow_] = 0; } void CoinSimpFactorization::copyRowPermutations() { memcpy(&secRowOfU_[0], &rowOfU_[0], numberRows_ * sizeof(int)); memcpy(&secRowPosition_[0], &rowPosition_[0], numberRows_ * sizeof(int)); } void CoinSimpFactorization::Hxeqb(double *b) const { double *rhs = b; int row, rowBeg, *ind, *indEnd; double xr, *eta; // now solve for (int k = 0; k <= lastEtaRow_; ++k) { row = EtaPosition_[k]; rowBeg = EtaStarts_[k]; xr = 0.0; ind = EtaInd_ + rowBeg; indEnd = ind + EtaLengths_[k]; eta = Eta_ + rowBeg; for (; ind != indEnd; ++ind) { xr += rhs[*ind] * (*eta); ++eta; } rhs[row] -= xr; } } void CoinSimpFactorization::Hxeqb2(double *b1, double *b2) const { double *rhs1 = b1; double *rhs2 = b2; int row, rowBeg, *ind, *indEnd; double x1, x2, *eta; // now solve for (int k = 0; k <= lastEtaRow_; ++k) { row = EtaPosition_[k]; rowBeg = EtaStarts_[k]; x1 = 0.0; x2 = 0.0; ind = EtaInd_ + rowBeg; indEnd = ind + EtaLengths_[k]; eta = Eta_ + rowBeg; for (; ind != indEnd; ++ind) { x1 += rhs1[*ind] * (*eta); x2 += rhs2[*ind] * (*eta); ++eta; } rhs1[row] -= x1; rhs2[row] -= x2; } } void CoinSimpFactorization::xHeqb(double *b) const { double *rhs = b; int row, rowBeg, *ind, *indEnd; double xr, *eta; // now solve for (int k = lastEtaRow_; k >= 0; --k) { row = EtaPosition_[k]; xr = rhs[row]; if (xr == 0.0) continue; //if ( fabs(xr) <= zeroTolerance_ ) continue; rowBeg = EtaStarts_[k]; ind = EtaInd_ + rowBeg; indEnd = ind + EtaLengths_[k]; eta = Eta_ + rowBeg; for (; ind != indEnd; ++ind) { rhs[*ind] -= xr * (*eta); ++eta; } } } void CoinSimpFactorization::ftran(double *b, double *sol, bool save) const { Lxeqb(b); Hxeqb(b); if (save) { // keep vector keepSize_ = 0; for (int i = 0; i < numberRows_; ++i) { if (fabs(b[i]) < zeroTolerance_) continue; vecKeep_[keepSize_] = b[i]; indKeep_[keepSize_++] = i; } } Uxeqb(b, sol); } void CoinSimpFactorization::ftran2(double *b1, double *sol1, double *b2, double *sol2) const { Lxeqb2(b1, b2); Hxeqb2(b1, b2); // keep vector keepSize_ = 0; for (int i = 0; i < numberRows_; ++i) { if (fabs(b1[i]) < zeroTolerance_) continue; vecKeep_[keepSize_] = b1[i]; indKeep_[keepSize_++] = i; } Uxeqb2(b1, sol1, b2, sol2); } void CoinSimpFactorization::btran(double *b, double *sol) const { xUeqb(b, sol); xHeqb(sol); xLeqb(sol); } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinMessageHandler.cpp0000644000175200017520000006637313414454441017775 0ustar coincoin/* $Id: CoinMessageHandler.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinMessageHandler.hpp" #include "CoinHelperFunctions.hpp" #include #include #include #include /* Default constructor. */ CoinOneMessage::CoinOneMessage() { externalNumber_ = -1; message_[0] = '\0'; severity_ = 'I'; detail_ = 0; } /* Destructor */ CoinOneMessage::~CoinOneMessage() { } /* The copy constructor */ CoinOneMessage::CoinOneMessage(const CoinOneMessage &rhs) { externalNumber_ = rhs.externalNumber_; strcpy(message_, rhs.message_); severity_ = rhs.severity_; detail_ = rhs.detail_; } /* assignment operator. */ CoinOneMessage & CoinOneMessage::operator=(const CoinOneMessage &rhs) { if (this != &rhs) { externalNumber_ = rhs.externalNumber_; strcpy(message_, rhs.message_); severity_ = rhs.severity_; detail_ = rhs.detail_; } return *this; } /* Normal constructor */ CoinOneMessage::CoinOneMessage(int externalNumber, char detail, const char *message) { externalNumber_ = externalNumber; strcpy(message_, message); if (externalNumber < 3000) severity_ = 'I'; else if (externalNumber < 6000) severity_ = 'W'; else if (externalNumber < 9000) severity_ = 'E'; else severity_ = 'S'; detail_ = detail; } // Replaces messages (i.e. a different language) void CoinOneMessage::replaceMessage(const char *message) { strcpy(message_, message); } /* Constructor with number of messages. */ CoinMessages::CoinMessages(int numberMessages) { numberMessages_ = numberMessages; language_ = us_en; strcpy(source_, "Unk"); class_ = 1; lengthMessages_ = -1; if (numberMessages_) { message_ = new CoinOneMessage *[numberMessages_]; int i; for (i = 0; i < numberMessages_; i++) message_[i] = NULL; } else { message_ = NULL; } } /* Destructor */ CoinMessages::~CoinMessages() { int i; if (lengthMessages_ < 0) { for (i = 0; i < numberMessages_; i++) delete message_[i]; } delete[] message_; } /* The copy constructor */ CoinMessages::CoinMessages(const CoinMessages &rhs) { numberMessages_ = rhs.numberMessages_; language_ = rhs.language_; strcpy(source_, rhs.source_); class_ = rhs.class_; lengthMessages_ = rhs.lengthMessages_; if (lengthMessages_ < 0) { if (numberMessages_) { message_ = new CoinOneMessage *[numberMessages_]; int i; for (i = 0; i < numberMessages_; i++) if (rhs.message_[i]) message_[i] = new CoinOneMessage(*(rhs.message_[i])); else message_[i] = NULL; } else { message_ = NULL; } } else { char *temp = CoinCopyOfArray(reinterpret_cast< char * >(rhs.message_), lengthMessages_); message_ = reinterpret_cast< CoinOneMessage ** >(temp); std::ptrdiff_t offset = temp - reinterpret_cast< char * >(rhs.message_); int i; //printf("new address %x(%x), rhs %x - length %d\n",message_,temp,rhs.message_,lengthMessages_); for (i = 0; i < numberMessages_; i++) { if (message_[i]) { char *newAddress = (reinterpret_cast< char * >(message_[i])) + offset; assert(newAddress - temp < lengthMessages_); message_[i] = reinterpret_cast< CoinOneMessage * >(newAddress); //printf("message %d at %x is %s\n",i,message_[i],message_[i]->message()); //printf("message %d at %x wass %s\n",i,rhs.message_[i],rhs.message_[i]->message()); } } } } /* assignment operator. */ CoinMessages & CoinMessages::operator=(const CoinMessages &rhs) { if (this != &rhs) { language_ = rhs.language_; strcpy(source_, rhs.source_); class_ = rhs.class_; if (lengthMessages_ < 0) { int i; for (i = 0; i < numberMessages_; i++) delete message_[i]; } delete[] message_; numberMessages_ = rhs.numberMessages_; lengthMessages_ = rhs.lengthMessages_; if (lengthMessages_ < 0) { if (numberMessages_) { message_ = new CoinOneMessage *[numberMessages_]; int i; for (i = 0; i < numberMessages_; i++) if (rhs.message_[i]) message_[i] = new CoinOneMessage(*(rhs.message_[i])); else message_[i] = NULL; } else { message_ = NULL; } } else { char *temp = CoinCopyOfArray(reinterpret_cast< char * >(rhs.message_), lengthMessages_); message_ = reinterpret_cast< CoinOneMessage ** >(temp); std::ptrdiff_t offset = temp - reinterpret_cast< char * >(rhs.message_); int i; //printf("new address %x(%x), rhs %x - length %d\n",message_,temp,rhs.message_,lengthMessages_); for (i = 0; i < numberMessages_; i++) { if (message_[i]) { char *newAddress = (reinterpret_cast< char * >(message_[i])) + offset; assert(newAddress - temp < lengthMessages_); message_[i] = reinterpret_cast< CoinOneMessage * >(newAddress); //printf("message %d at %x is %s\n",i,message_[i],message_[i]->message()); //printf("message %d at %x wass %s\n",i,rhs.message_[i],rhs.message_[i]->message()); } } } } return *this; } // Puts message in correct place void CoinMessages::addMessage(int messageNumber, const CoinOneMessage &message) { if (messageNumber >= numberMessages_) { // should not happen but allow for it CoinOneMessage **temp = new CoinOneMessage *[messageNumber + 1]; int i; for (i = 0; i < numberMessages_; i++) temp[i] = message_[i]; for (; i <= messageNumber; i++) temp[i] = NULL; delete[] message_; message_ = temp; } if (lengthMessages_ >= 0) fromCompact(); delete message_[messageNumber]; message_[messageNumber] = new CoinOneMessage(message); } // Replaces messages (i.e. a different language) void CoinMessages::replaceMessage(int messageNumber, const char *message) { if (lengthMessages_ >= 0) fromCompact(); assert(messageNumber < numberMessages_); message_[messageNumber]->replaceMessage(message); } // Changes detail level for one message void CoinMessages::setDetailMessage(int newLevel, int messageNumber) { int i; // Last message is null (corresponds to DUMMY) for (i = 0; i < numberMessages_ - 1; i++) { if (message_[i]->externalNumber() == messageNumber) { message_[i]->setDetail(newLevel); break; } } } // Changes detail level for several messages void CoinMessages::setDetailMessages(int newLevel, int numberMessages, int *messageNumbers) { int i; if (numberMessages < 3 && messageNumbers) { // do one by one int j; for (j = 0; j < numberMessages; j++) { int messageNumber = messageNumbers[j]; for (i = 0; i < numberMessages_; i++) { if (message_[i]->externalNumber() == messageNumber) { message_[i]->setDetail(newLevel); break; } } } } else if (numberMessages < 10000 && messageNumbers) { // do backward mapping int backward[10000]; for (i = 0; i < 10000; i++) backward[i] = -1; for (i = 0; i < numberMessages_; i++) backward[message_[i]->externalNumber()] = i; for (i = 0; i < numberMessages; i++) { int iback = backward[messageNumbers[i]]; if (iback >= 0) message_[iback]->setDetail(newLevel); } } else { // do all (except for dummy end) for (i = 0; i < numberMessages_ - 1; i++) { message_[i]->setDetail(newLevel); } } } // Changes detail level for all messages >= low and < high void CoinMessages::setDetailMessages(int newLevel, int low, int high) { // do all (except for dummy end) if in range for (int i = 0; i < numberMessages_ - 1; i++) { int iNumber = message_[i]->externalNumber(); if (iNumber >= low && iNumber < high) message_[i]->setDetail(newLevel); } } /* Moves to compact format Compact format is an initial array of CoinOneMessage pointers, followed by a bulk store that holds compressed CoinOneMessage objects, where the message_ array is truncated to be just as large as necessary. */ void CoinMessages::toCompact() { if (numberMessages_ && lengthMessages_ < 0) { lengthMessages_ = numberMessages_ * CoinSizeofAsInt(CoinOneMessage *); int i; for (i = 0; i < numberMessages_; i++) { if (message_[i]) { int length = static_cast< int >(strlen(message_[i]->message())); length = static_cast< int >((message_[i]->message() + length + 1) - reinterpret_cast< char * >(message_[i])); assert(length < COIN_MESSAGE_HANDLER_MAX_BUFFER_SIZE); int leftOver = length % 8; if (leftOver) length += 8 - leftOver; lengthMessages_ += length; } } // space char *temp = new char[lengthMessages_]; CoinOneMessage **newMessage = reinterpret_cast< CoinOneMessage ** >(temp); temp += numberMessages_ * CoinSizeofAsInt(CoinOneMessage *); CoinOneMessage message; //printf("new address %x(%x) - length %d\n",newMessage,temp,lengthMessages_); lengthMessages_ = numberMessages_ * CoinSizeofAsInt(CoinOneMessage *); for (i = 0; i < numberMessages_; i++) { if (message_[i]) { message = *message_[i]; int length = static_cast< int >(strlen(message.message())); length = static_cast< int >((message.message() + length + 1) - reinterpret_cast< char * >(&message)); assert(length < COIN_MESSAGE_HANDLER_MAX_BUFFER_SIZE); int leftOver = length % 8; memcpy(temp, &message, length); newMessage[i] = reinterpret_cast< CoinOneMessage * >(temp); //printf("message %d at %x is %s\n",i,newMessage[i],newMessage[i]->message()); if (leftOver) length += 8 - leftOver; temp += length; lengthMessages_ += length; } else { // null message newMessage[i] = NULL; } } for (i = 0; i < numberMessages_; i++) delete message_[i]; delete[] message_; message_ = newMessage; } } // Moves from compact format void CoinMessages::fromCompact() { if (numberMessages_ && lengthMessages_ >= 0) { CoinOneMessage **temp = new CoinOneMessage *[numberMessages_]; int i; for (i = 0; i < numberMessages_; i++) { if (message_[i]) temp[i] = new CoinOneMessage(*(message_[i])); else temp[i] = NULL; } delete[] message_; message_ = temp; } lengthMessages_ = -1; } // Clean, print message and check severity, return 0 normally int CoinMessageHandler::internalPrint() { int returnCode = 0; if (messageOut_ > messageBuffer_) { *messageOut_ = 0; //take off trailing spaces and commas messageOut_--; while (messageOut_ >= messageBuffer_) { if (*messageOut_ == ' ' || *messageOut_ == ',') { *messageOut_ = 0; messageOut_--; } else { break; } } // take off %% if (strstr(messageBuffer_, "%%")) { // can be inefficient char *buffer = messageBuffer_; int n = static_cast< int >(strlen(buffer)); for (int i = 0; i < n; i++) { if (messageBuffer_[i] != '%' || messageBuffer_[i + 1] != '%') { *buffer = messageBuffer_[i]; buffer++; } } *buffer = '\0'; } // Now do print which can be overridden returnCode = print(); // See what to do on error checkSeverity(); } return returnCode; } #if FLUSH_PRINT_BUFFER >= 2 extern int coinFlushBufferFlag; #endif // Print message, return 0 normally int CoinMessageHandler::print() { fprintf(fp_, "%s\n", messageBuffer_); #if FLUSH_PRINT_BUFFER #if FLUSH_PRINT_BUFFER < 2 fflush(fp_); #else if (coinFlushBufferFlag) fflush(fp_); #endif #endif return 0; } // Check severity void CoinMessageHandler::checkSeverity() { if (currentMessage_.severity_ == 'S') { fprintf(fp_, "Stopping due to previous errors.\n"); //Should do walkback abort(); } } /* Amount of print out: 0 - none 1 - minimal 2 - normal low 3 - normal high 4 - verbose above that 8,16,32 etc just for selective debug and are for printf messages in code */ void CoinMessageHandler::setLogLevel(int value) { if (value >= -1) logLevel_ = value; } void CoinMessageHandler::setLogLevel(int which, int value) { if (which >= 0 && which < COIN_NUM_LOG) { if (value >= -1) logLevels_[which] = value; } } void CoinMessageHandler::setPrecision(unsigned int new_precision) { char new_string[8] = { '%', '.', '8', 'f', '\0', '\0', '\0', '\0' }; //we assume that the precision is smaller than one thousand new_precision = std::min< unsigned int >(999, new_precision); if (new_precision == 0) new_precision = 1; g_precision_ = new_precision; int idx = 2; int base = 100; bool print = false; while (base > 0) { char c = static_cast< char >(new_precision / base); new_precision = new_precision % base; if (c != 0) print = true; if (print) { new_string[idx] = static_cast< char >(c + '0'); idx++; } base /= 10; } new_string[idx] = 'g'; strcpy(g_format_, new_string); } void CoinMessageHandler::setPrefix(bool value) { if (value) prefix_ = 255; else prefix_ = 0; } bool CoinMessageHandler::prefix() const { return (prefix_ != 0); } // Constructor CoinMessageHandler::CoinMessageHandler() : logLevel_(1) , prefix_(255) , currentMessage_() , internalNumber_(0) , format_(NULL) , printStatus_(0) , highestNumber_(-1) , fp_(stdout) { const char *g_default = "%.8g"; strcpy(g_format_, g_default); g_precision_ = 8; for (int i = 0; i < COIN_NUM_LOG; i++) logLevels_[i] = -1000; messageBuffer_[0] = '\0'; messageOut_ = messageBuffer_; source_ = "Unk"; } // Constructor CoinMessageHandler::CoinMessageHandler(FILE *fp) : logLevel_(1) , prefix_(255) , currentMessage_() , internalNumber_(0) , format_(NULL) , printStatus_(0) , highestNumber_(-1) , fp_(fp) { const char *g_default = "%.8g"; strcpy(g_format_, g_default); g_precision_ = 8; for (int i = 0; i < COIN_NUM_LOG; i++) logLevels_[i] = -1000; messageBuffer_[0] = '\0'; messageOut_ = messageBuffer_; source_ = "Unk"; } /* Destructor */ CoinMessageHandler::~CoinMessageHandler() { } void CoinMessageHandler::gutsOfCopy(const CoinMessageHandler &rhs) { logLevel_ = rhs.logLevel_; prefix_ = rhs.prefix_; if (rhs.format_ && *rhs.format_ == '\0') { *rhs.format_ = '%'; currentMessage_ = rhs.currentMessage_; *rhs.format_ = '\0'; } else { currentMessage_ = rhs.currentMessage_; } internalNumber_ = rhs.internalNumber_; int i; for (i = 0; i < COIN_NUM_LOG; i++) logLevels_[i] = rhs.logLevels_[i]; doubleValue_ = rhs.doubleValue_; longValue_ = rhs.longValue_; charValue_ = rhs.charValue_; stringValue_ = rhs.stringValue_; std::ptrdiff_t offset; if (rhs.format_) { offset = rhs.format_ - rhs.currentMessage_.message(); format_ = currentMessage_.message() + offset; } else { format_ = NULL; } std::memcpy(messageBuffer_, rhs.messageBuffer_, COIN_MESSAGE_HANDLER_MAX_BUFFER_SIZE); offset = rhs.messageOut_ - rhs.messageBuffer_; messageOut_ = messageBuffer_ + offset; printStatus_ = rhs.printStatus_; highestNumber_ = rhs.highestNumber_; fp_ = rhs.fp_; source_ = rhs.source_; strcpy(g_format_, rhs.g_format_); g_precision_ = rhs.g_precision_; } /* The copy constructor */ CoinMessageHandler::CoinMessageHandler(const CoinMessageHandler &rhs) { gutsOfCopy(rhs); } /* assignment operator. */ CoinMessageHandler & CoinMessageHandler::operator=(const CoinMessageHandler &rhs) { if (this != &rhs) { gutsOfCopy(rhs); } return *this; } // Clone CoinMessageHandler * CoinMessageHandler::clone() const { return new CoinMessageHandler(*this); } /* Decide if we're printing or not. Split out because it's nontrivial and used in two places. Recall that setLogLevel(lvl) sets logLevel_. To set logLevels_[i], use setLogLevel(i,lvl). The two are not connected. By default, all entries of logLevels_ are initialised to -1000. Unless the client changes logLevels_[0], when the log level (lvl) of the message is 8 or more, it's ANDed with the handler's log level (logLevel_). Printing is enabled only if the result is nonzero. Commonly this is used in a scheme where individual bits enable particular debug output. */ void CoinMessageHandler::calcPrintStatus(int msglvl, int msgclass) { printStatus_ = 0; if (logLevels_[0] == -1000) { if (msglvl >= 8 && logLevel_ >= 0) { if ((msglvl & logLevel_) == 0) printStatus_ = 3; } else if (logLevel_ < msglvl) { printStatus_ = 3; } } else if (logLevels_[msgclass] < msglvl) { printStatus_ = 3; } } /* Start a message using a standard CoinOneMessage. */ CoinMessageHandler & CoinMessageHandler::message(int messageNumber, const CoinMessages &normalMessages) { // Deal with the previous message, if there is one. if (messageOut_ != messageBuffer_) { internalPrint(); } // Acquire the new message internalNumber_ = messageNumber; /* Check validity - although it is up to coder of relevant handler to only pass valid messages */ assert(normalMessages.message_ != NULL); assert(messageNumber < normalMessages.numberMessages_); currentMessage_ = *(normalMessages.message_[messageNumber]); source_ = normalMessages.source_; format_ = currentMessage_.message_; highestNumber_ = CoinMax(highestNumber_, currentMessage_.externalNumber_); // Initialise the message construction buffer messageBuffer_[0] = '\0'; messageOut_ = messageBuffer_; // Decide whether or not to print (sets printStatus_) calcPrintStatus(currentMessage_.detail_, normalMessages.class_); // If we're printing, initialise the message if (!printStatus_) { if (prefix_) { sprintf(messageOut_, "%s%4.4d%c ", source_.c_str(), currentMessage_.externalNumber_, currentMessage_.severity_); messageOut_ += strlen(messageOut_); } format_ = nextPerCent(format_, true); } return (*this); } /* Start a message, providing the full message, information to generate a prefix, a severity code, and an optional log level. Intended as an aid to help existing codes interface. */ CoinMessageHandler & CoinMessageHandler::message(int externalNumber, const char *source, const char *msg, char severity, int loglvl) { // Deal with the previous message, if there is one. if (messageOut_ != messageBuffer_) { internalPrint(); } // Set up a dummy message. internalNumber_ = externalNumber; char detail = ((loglvl >= 0) ? (static_cast< char >(loglvl)) : '\000'); currentMessage_ = CoinOneMessage(externalNumber, detail, msg); source_ = source; highestNumber_ = CoinMax(highestNumber_, externalNumber); // Initialise the message construction buffer messageBuffer_[0] = '\0'; messageOut_ = messageBuffer_; /* Decide whether or not to print. The normal value of printStatus_ here is 2 (complete message provided). loglvl defaults to -1 for backwards compatibility (previously there was no provision for a log level). */ if (loglvl >= 0) calcPrintStatus(loglvl, 0); if (!printStatus_) { printStatus_ = 2; if (prefix_) { sprintf(messageOut_, "%s%4.4d%c ", source_.c_str(), externalNumber, severity); } strcat(messageBuffer_, msg); messageOut_ = messageBuffer_ + strlen(messageBuffer_); } return (*this); } /* Decides whether or not to print and returns a reference to the handler. */ CoinMessageHandler & CoinMessageHandler::message(int loglvl) { // Adjust print status? if (loglvl >= 0) calcPrintStatus(loglvl, 0); return (*this); } /* Allows for skipping printing of part of message, but putting in data */ CoinMessageHandler & CoinMessageHandler::printing(bool onOff) { // has no effect if skipping or whole message in if (printStatus_ < 2) { assert(format_[1] == '?'); *format_ = '%'; if (onOff) printStatus_ = 0; else printStatus_ = 1; format_ = nextPerCent(format_ + 2, true); } return *this; } /* Stop (and print) Unless printing is currently suppressed. We need to do the finishing actions in any event. */ int CoinMessageHandler::finish() { // Deal with the collected message if (printStatus_ < 3 && messageOut_ != messageBuffer_) { internalPrint(); } // Clean up for the next message. internalNumber_ = -1; format_ = NULL; messageBuffer_[0] = '\0'; messageOut_ = messageBuffer_; printStatus_ = 0; doubleValue_.clear(); longValue_.clear(); charValue_.clear(); stringValue_.clear(); return (0); } /* Gets position of next field in format If we're scanning the initial portion of the string (prior to the first `%' code) the prefix will be copied to the output buffer. Normally, the text from the current position up to and including a % code is is processed by the relevant operator<< method. */ char * CoinMessageHandler::nextPerCent(char *start, const bool initial) { if (start) { bool foundNext = false; while (!foundNext) { char *nextPerCent = strchr(start, '%'); if (nextPerCent) { if (initial && !printStatus_) { int numberToCopy = static_cast< int >(nextPerCent - start); strncpy(messageOut_, start, numberToCopy); messageOut_ += numberToCopy; } // %? is skipped over as it is just a separator if (nextPerCent[1] != '?') { start = nextPerCent; if (start[1] != '%') { foundNext = true; if (!initial) *start = '\0'; //zap } else { start += 2; if (initial) { *messageOut_ = '%'; messageOut_++; } } } else { foundNext = true; // skip to % and zap start = nextPerCent; *start = '\0'; } } else { if (initial && !printStatus_) { strcpy(messageOut_, start); messageOut_ += strlen(messageOut_); } start = 0; foundNext = true; } } } return start; } // Adds into message CoinMessageHandler & CoinMessageHandler::operator<<(int intvalue) { if (printStatus_ == 3) return *this; // not doing this message longValue_.push_back(intvalue); if (printStatus_ < 2) { if (format_) { //format is at % (but may be changed to null) *format_ = '%'; char *next = nextPerCent(format_ + 1); // could check if (!printStatus_) { sprintf(messageOut_, format_, intvalue); messageOut_ += strlen(messageOut_); } format_ = next; } else { sprintf(messageOut_, " %d", intvalue); messageOut_ += strlen(messageOut_); } } return *this; } CoinMessageHandler & CoinMessageHandler::operator<<(double doublevalue) { if (printStatus_ == 3) return *this; // not doing this message doubleValue_.push_back(doublevalue); if (printStatus_ < 2) { if (format_) { //format is at \0 (but changed to %) *format_ = '%'; char *next = nextPerCent(format_ + 1); // could check if (!printStatus_) { if (format_[1] == '.' && format_[2] >= '0' && format_[2] <= '9') { // an explicitly specified precision currently overrides the // precision of the message handler sprintf(messageOut_, format_, doublevalue); } else { sprintf(messageOut_, g_format_, doublevalue); if (next != format_ + 2) { messageOut_ += strlen(messageOut_); sprintf(messageOut_, "%s", format_ + 2); } } messageOut_ += strlen(messageOut_); } format_ = next; } else { sprintf(messageOut_, " "); messageOut_ += 1; sprintf(messageOut_, g_format_, doublevalue); messageOut_ += strlen(messageOut_); } } return *this; } #if COIN_BIG_INDEX == 1 CoinMessageHandler & CoinMessageHandler::operator<<(long longvalue) { if (printStatus_ == 3) return *this; // not doing this message longValue_.push_back(longvalue); if (printStatus_ < 2) { if (format_) { //format is at % (but may be changed to null) *format_ = '%'; char *next = nextPerCent(format_ + 1); // could check if (!printStatus_) { sprintf(messageOut_, format_, longvalue); messageOut_ += strlen(messageOut_); } format_ = next; } else { sprintf(messageOut_, " %ld", longvalue); messageOut_ += strlen(messageOut_); } } return *this; } #endif #if COIN_BIG_INDEX == 2 CoinMessageHandler & CoinMessageHandler::operator<<(long long longvalue) { if (printStatus_ == 3) return *this; // not doing this message longValue_.push_back(longvalue); if (printStatus_ < 2) { if (format_) { //format is at % (but may be changed to null) *format_ = '%'; char *next = nextPerCent(format_ + 1); // could check if (!printStatus_) { sprintf(messageOut_, format_, longvalue); messageOut_ += strlen(messageOut_); } format_ = next; } else { sprintf(messageOut_, " %lld", longvalue); messageOut_ += strlen(messageOut_); } } return *this; } #endif CoinMessageHandler & CoinMessageHandler::operator<<(const std::string &stringvalue) { if (printStatus_ == 3) return *this; // not doing this message stringValue_.push_back(stringvalue); if (printStatus_ < 2) { if (format_) { //format is at % (but changed to 0) *format_ = '%'; char *next = nextPerCent(format_ + 1); // could check if (!printStatus_) { sprintf(messageOut_, format_, stringvalue.c_str()); messageOut_ += strlen(messageOut_); } format_ = next; } else { sprintf(messageOut_, " %s", stringvalue.c_str()); messageOut_ += strlen(messageOut_); } } return *this; } CoinMessageHandler & CoinMessageHandler::operator<<(char charvalue) { if (printStatus_ == 3) return *this; // not doing this message charValue_.push_back(charvalue); if (printStatus_ < 2) { if (format_) { //format is at % (but changed to 0) *format_ = '%'; char *next = nextPerCent(format_ + 1); // could check if (!printStatus_) { sprintf(messageOut_, format_, charvalue); messageOut_ += strlen(messageOut_); } format_ = next; } else { sprintf(messageOut_, " %c", charvalue); messageOut_ += strlen(messageOut_); } } return *this; } CoinMessageHandler & CoinMessageHandler::operator<<(const char *stringvalue) { if (printStatus_ == 3) return *this; // not doing this message stringValue_.push_back(stringvalue); if (printStatus_ < 2) { if (format_) { //format is at % (but changed to 0) *format_ = '%'; char *next = nextPerCent(format_ + 1); // could check if (!printStatus_) { sprintf(messageOut_, format_, stringvalue); messageOut_ += strlen(messageOut_); } format_ = next; } else { sprintf(messageOut_, " %s", stringvalue); messageOut_ += strlen(messageOut_); } } return *this; } /* Handle markers. Even when printing is suppressed (printStatus_ == 3) we need to execute finish() to reset for the next message. */ CoinMessageHandler & CoinMessageHandler::operator<<(CoinMessageMarker marker) { switch (marker) { case CoinMessageEol: { finish(); break; } case CoinMessageNewline: { if (printStatus_ != 3) { strcat(messageOut_, "\n"); messageOut_++; } break; } } return (*this); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveForcing.cpp0000644000175200017520000005733313414454441020216 0ustar coincoin/* $Id: CoinPresolveForcing.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveEmpty.hpp" // for DROP_COL/DROP_ROW #include "CoinPresolveFixed.hpp" #include "CoinPresolveSubst.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPresolveUseless.hpp" #include "CoinPresolveForcing.hpp" #include "CoinMessage.hpp" #include "CoinFinite.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif namespace { /* Calculate the minimum and maximum row activity (also referred to as lhs bounds, from the common form ax <= b) for the row specified by the range krs, kre in els and hcol. Return the result in maxupp, maxdnp. */ void implied_row_bounds(const double *els, const double *clo, const double *cup, const int *hcol, CoinBigIndex krs, CoinBigIndex kre, double &maxupp, double &maxdnp) { bool posinf = false; bool neginf = false; double maxup = 0.0; double maxdown = 0.0; /* Walk the row and add up the upper and lower bounds on the variables. Once both maxup and maxdown have an infinity contribution the row cannot be shown to be useless or forcing, so break as soon as that's detected. */ for (CoinBigIndex kk = krs; kk < kre; kk++) { const int col = hcol[kk]; const double coeff = els[kk]; const double lb = clo[col]; const double ub = cup[col]; if (coeff > 0.0) { if (PRESOLVE_INF <= ub) { posinf = true; if (neginf) break; } else { maxup += ub * coeff; } if (lb <= -PRESOLVE_INF) { neginf = true; if (posinf) break; } else { maxdown += lb * coeff; } } else { if (PRESOLVE_INF <= ub) { neginf = true; if (posinf) break; } else { maxdown += ub * coeff; } if (lb <= -PRESOLVE_INF) { posinf = true; if (neginf) break; } else { maxup += lb * coeff; } } } maxupp = (posinf) ? PRESOLVE_INF : maxup; maxdnp = (neginf) ? -PRESOLVE_INF : maxdown; } } // end file-local namespace const char *forcing_constraint_action::name() const { return ("forcing_constraint_action"); } /* It may be the case that the bounds on the variables in a constraint are such that no matter what feasible value the variables take, the constraint cannot be violated. In this case we can drop the constraint as useless. On the other hand, it may be that the only way to satisfy a constraint is to jam all the variables in the constraint to one of their bounds, fixing the variables. This is a forcing constraint, the primary target of this transform. Detection of both useless and forcing constraints requires calculation of bounds on the row activity (often referred to as lhs bounds, from the common form ax <= b). This routine will remember useless constraints as it finds them and invoke useless_constraint_action to deal with them. The transform applied here simply tightens the bounds on the variables. Other transforms will remove the fixed variables, leaving an empty row which is ultimately dropped. A reasonable question to ask is ``If a variable is already fixed, why do we need a record in the postsolve object?'' The answer is that in postsolve we'll be dealing with a column-major representation and we may need to scan the row (see postsolve comments). So it's useful to record all variables in the constraint. On the other hand, it's definitely harmful to ask remove_fixed_action to process a variable more than once (causes problems in remove_fixed_action::postsolve). Original comments: It looks like these checks could be performed in parallel, that is, the tests could be carried out for all rows in parallel, and then the rows deleted and columns tightened afterward. Obviously, this is true for useless rows. By doing it in parallel rather than sequentially, we may miss transformations due to variables that were fixed by forcing constraints, though. Note that both of these operations will cause problems if the variables in question really need to exceed their bounds in order to make the problem feasible. */ const CoinPresolveAction * forcing_constraint_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING int startEmptyRows = 0; int startEmptyColumns = 0; startEmptyRows = prob->countEmptyRows(); startEmptyColumns = prob->countEmptyCols(); #endif #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering forcing_constraint_action::presolve, considering " << prob->numberRowsToDo_ << " rows." << std::endl; #endif presolve_check_sol(prob); presolve_check_nbasic(prob); #endif #if COIN_PRESOLVE_TUNING double startTime = 0.0; if (prob->tuning_) { startTime = CoinCpuTime(); } #endif // Column solution and bounds double *clo = prob->clo_; double *cup = prob->cup_; double *csol = prob->sol_; // Row-major representation const CoinBigIndex *mrstrt = prob->mrstrt_; const double *rowels = prob->rowels_; const int *hcol = prob->hcol_; const int *hinrow = prob->hinrow_; const int nrows = prob->nrows_; const double *rlo = prob->rlo_; const double *rup = prob->rup_; const double tol = ZTOLDP; const double inftol = prob->feasibilityTolerance_; // for redundant rows be safe const double inftol2 = 0.01 * prob->feasibilityTolerance_; const int ncols = prob->ncols_; int *fixed_cols = new int[ncols]; int nfixed_cols = 0; action *actions = new action[nrows]; int nactions = 0; int *useless_rows = new int[nrows]; int nuseless_rows = 0; const int numberLook = prob->numberRowsToDo_; int *look = prob->rowsToDo_; bool fixInfeasibility = ((prob->presolveOptions_ & 0x4000) != 0); /* Open a loop to scan the constraints of interest. There must be variables left in the row. */ for (int iLook = 0; iLook < numberLook; iLook++) { int irow = look[iLook]; if (hinrow[irow] <= 0) continue; const CoinBigIndex krs = mrstrt[irow]; const CoinBigIndex kre = krs + hinrow[irow]; /* Calculate upper and lower bounds on the row activity based on upper and lower bounds on the variables. If these are finite and incompatible with the given row bounds, we have infeasibility. */ double maxup, maxdown; implied_row_bounds(rowels, clo, cup, hcol, krs, kre, maxup, maxdown); #if PRESOLVE_DEBUG > 2 std::cout << " considering row " << irow << ", rlo " << rlo[irow] << " LB " << maxdown << " UB " << maxup << " rup " << rup[irow]; #endif /* If the maximum lhs value is less than L(i) or the minimum lhs value is greater than U(i), we're infeasible. */ if (maxup < PRESOLVE_INF && maxup + inftol < rlo[irow] && !fixInfeasibility) { CoinMessageHandler *hdlr = prob->messageHandler(); prob->status_ |= 1; hdlr->message(COIN_PRESOLVE_ROWINFEAS, prob->messages()) << irow << rlo[irow] << rup[irow] << CoinMessageEol; #if PRESOLVE_DEBUG > 2 std::cout << "; infeasible." << std::endl; #endif break; } if (-PRESOLVE_INF < maxdown && rup[irow] < maxdown - inftol && !fixInfeasibility) { CoinMessageHandler *hdlr = prob->messageHandler(); prob->status_ |= 1; hdlr->message(COIN_PRESOLVE_ROWINFEAS, prob->messages()) << irow << rlo[irow] << rup[irow] << CoinMessageEol; #if PRESOLVE_DEBUG > 2 std::cout << "; infeasible." << std::endl; #endif break; } /* We've dealt with prima facie infeasibility. Now check if the constraint is trivially satisfied. If so, add it to the list of useless rows and move on. The reason we require maxdown and maxup to be finite if the row bound is finite is to guard against some subsequent transform changing a column bound from infinite to finite. Once finite, bounds continue to tighten, so we're safe. */ /* Test changed to use +small tolerance rather than -tolerance as test fails often */ if (((rlo[irow] <= -PRESOLVE_INF) || (-PRESOLVE_INF < maxdown && rlo[irow] <= maxdown + inftol2)) && ((rup[irow] >= PRESOLVE_INF) || (maxup < PRESOLVE_INF && rup[irow] >= maxup - inftol2))) { // check none prohibited if (prob->anyProhibited_) { bool anyProhibited = false; for (CoinBigIndex k = krs; k < kre; k++) { int jcol = hcol[k]; if (prob->colProhibited(jcol)) { anyProhibited = true; break; } } if (anyProhibited) continue; // skip row } useless_rows[nuseless_rows++] = irow; #if PRESOLVE_DEBUG > 2 std::cout << "; useless." << std::endl; #endif continue; } /* Is it the case that we can just barely attain L(i) or U(i)? If so, we have a forcing constraint. As explained above, we need maxup and maxdown to be finite in order for the test to be valid. */ const bool tightAtLower = ((maxup < PRESOLVE_INF) && (fabs(rlo[irow] - maxup) < tol)); const bool tightAtUpper = ((-PRESOLVE_INF < maxdown) && (fabs(rup[irow] - maxdown) < tol)); #if PRESOLVE_DEBUG > 2 if (tightAtLower || tightAtUpper) std::cout << "; forcing."; std::cout << std::endl; #endif if (!(tightAtLower || tightAtUpper)) continue; // check none prohibited if (prob->anyProhibited_) { bool anyProhibited = false; for (CoinBigIndex k = krs; k < kre; k++) { int jcol = hcol[k]; if (prob->colProhibited(jcol)) { anyProhibited = true; break; } } if (anyProhibited) continue; // skip row } /* We have a forcing constraint. Get down to the business of fixing the variables at the appropriate bound. We need to remember the original value of the bound we're tightening. Allocate a pair of arrays the size of the row. Load variables fixed at l from the start, variables fixed at u from the end. Add the column to the list of columns to be processed further. */ double *bounds = new double[hinrow[irow]]; int *rowcols = new int[hinrow[irow]]; CoinBigIndex lk = krs; CoinBigIndex uk = kre; for (CoinBigIndex k = krs; k < kre; k++) { const int j = hcol[k]; const double lj = clo[j]; const double uj = cup[j]; const double coeff = rowels[k]; PRESOLVEASSERT(fabs(coeff) > ZTOLDP); /* If maxup is tight at L(i), then we want to force variables x to the bound that produced maxup: u if a > 0, l if a < 0. If maxdown is tight at U(i), it'll be just the opposite. */ if (tightAtLower == (coeff > 0.0)) { --uk; bounds[uk - krs] = lj; rowcols[uk - krs] = j; if (csol != 0) { csol[j] = uj; } clo[j] = uj; } else { bounds[lk - krs] = uj; rowcols[lk - krs] = j; ++lk; if (csol != 0) { csol[j] = lj; } cup[j] = lj; } /* Only add a column to the list of fixed columns the first time it's fixed. */ if (lj != uj) { fixed_cols[nfixed_cols++] = j; prob->addCol(j); } } PRESOLVEASSERT(uk == lk); PRESOLVE_DETAIL_PRINT(printf("pre_forcing %dR E\n", irow)); #if PRESOLVE_DEBUG > 1 std::cout << "FORCING: row(" << irow << "), " << (kre - krs) << " variables." << std::endl; #endif /* Done with this row. Remember the changes in a postsolve action. */ action *f = &actions[nactions]; nactions++; f->row = irow; f->nlo = static_cast< int >(lk - krs); f->nup = static_cast< int >(kre - uk); f->rowcols = rowcols; f->bounds = bounds; } /* Done processing the rows of interest. No sense doing any additional work unless we're feasible. */ if (prob->status_ == 0) { #if PRESOLVE_DEBUG > 0 std::cout << "FORCING: " << nactions << " forcing, " << nuseless_rows << " useless." << std::endl; #endif /* Trim the actions array to size and create a postsolve object. */ if (nactions) { next = new forcing_constraint_action(nactions, CoinCopyOfArray(actions, nactions), next); } /* Hand off the job of dealing with the useless rows to a specialist. */ if (nuseless_rows) { next = useless_constraint_action::presolve(prob, useless_rows, nuseless_rows, next); } /* Hand off the job of dealing with the fixed columns to a specialist. Note that there *cannot* be duplicates in this list or we'll get in trouble `unfixing' a column multiple times. The code above now adds a variable to fixed_cols only if it's not already fixed. If that ever changes, the disabled code (sort, unique) will need to be reenabled. */ if (nfixed_cols) { if (false && nfixed_cols > 1) { std::sort(fixed_cols, fixed_cols + nfixed_cols); int *end = std::unique(fixed_cols, fixed_cols + nfixed_cols); nfixed_cols = static_cast< int >(end - fixed_cols); } next = remove_fixed_action::presolve(prob, fixed_cols, nfixed_cols, next); } } else { // delete arrays for (int i = 0; i < nactions; i++) { deleteAction(actions[i].rowcols, int *); deleteAction(actions[i].bounds, double *); } } deleteAction(actions, action *); delete[] useless_rows; delete[] fixed_cols; #if COIN_PRESOLVE_TUNING double thisTime = 0.0; if (prob->tuning_) thisTime = CoinCpuTime(); #endif #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob); presolve_check_nbasic(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING int droppedRows = prob->countEmptyRows() - startEmptyRows; int droppedColumns = prob->countEmptyCols() - startEmptyColumns; std::cout << "Leaving forcing_constraint_action::presolve: removed " << droppedRows << " rows, " << droppedColumns << " columns"; #if COIN_PRESOLVE_TUNING > 0 if (prob->tuning_) std::cout << " in " << (thisTime - prob->startTime_) << "s"; #endif std::cout << "." << std::endl; #endif return (next); } /* We're here to undo the bound changes that were put in place for forcing constraints. This is a bit trickier than it appears. Assume we are working with constraint r. The situation on arrival is that constraint r exists and is fully populated with fixed variables, all of which are nonbasic. Even though the constraint is tight, the logical s(r) is basic and the dual y(r) is zero. We may need to change that if a bound is relaxed to infinity on some variable x(t), making x(t)'s current nonbasic status untenable. We'll need to make s(r) nonbasic so that y(r) can be nonzero. Then we can make x(t) basic and use y(r) to force cbar(t) to zero. The code below will choose the variable x(t) whose reduced cost cbar(t) is most wrong and adjust y(r) to drive cbar(t) to zero using cbar(t) = c(t) - SUM{i\r} y(i) a(it) - y(r)a(rt) cbar(t) = cbar(t\r) - y(r)a(rt) Setting cbar(t) to zero, y(r) = cbar(t\r)/a(rt) We will need to scan row r, correcting cbar(j) for all x(j) entangled with the row. We may need to change the nonbasic status of x(j) if the adjustment causes cbar(j) to change sign. */ void forcing_constraint_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_; const int nactions = nactions_; const double *colels = prob->colels_; const int *hrow = prob->hrow_; const CoinBigIndex *mcstrt = prob->mcstrt_; const int *hincol = prob->hincol_; const CoinBigIndex *link = prob->link_; double *clo = prob->clo_; double *cup = prob->cup_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *rcosts = prob->rcosts_; double *acts = prob->acts_; double *rowduals = prob->rowduals_; const double ztoldj = prob->ztoldj_; const double ztolzb = prob->ztolzb_; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 const double *sol = prob->sol_; #if PRESOLVE_DEBUG > 0 std::cout << "Entering forcing_constraint_action::postsolve, " << nactions << " constraints to process." << std::endl; #endif presolve_check_threads(prob); presolve_check_free_list(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #endif /* Open a loop to process the actions. One action per constraint. */ for (const action *f = &actions[nactions - 1]; actions <= f; f--) { const int irow = f->row; const int nlo = f->nlo; const int nup = f->nup; const int ninrow = nlo + nup; const int *rowcols = f->rowcols; const double *bounds = f->bounds; #if PRESOLVE_DEBUG > 1 std::cout << " Restoring constraint " << irow << ", " << ninrow << " variables." << std::endl; #endif PRESOLVEASSERT(prob->getRowStatus(irow) == CoinPrePostsolveMatrix::basic); PRESOLVEASSERT(rowduals[irow] == 0.0); /* Process variables where the upper bound is relaxed. * If the variable is basic, we should leave the status unchanged. Relaxing the bound cannot make nonbasic status feasible. * The bound change may be a noop, in which nothing needs to be done. * Otherwise, the status should be set to NBLB. */ bool dualfeas = true; for (int k = 0; k < nlo; k++) { const int jcol = rowcols[k]; PRESOLVEASSERT(fabs(sol[jcol] - clo[jcol]) <= ztolzb); const double cbarj = rcosts[jcol]; const double olduj = cup[jcol]; const double newuj = bounds[k]; const bool change = (fabs(newuj - olduj) > ztolzb); #if PRESOLVE_DEBUG > 2 std::cout << " x(" << jcol << ") " << prob->columnStatusString(jcol) << " cbar = " << cbarj << ", lb = " << clo[jcol] << ", ub = " << olduj << " -> " << newuj; #endif if (change && prob->getColumnStatus(jcol) != CoinPrePostsolveMatrix::basic) { prob->setColumnStatus(jcol, CoinPrePostsolveMatrix::atLowerBound); if (cbarj < -ztoldj || clo[jcol] <= -COIN_DBL_MAX) dualfeas = false; } cup[jcol] = bounds[k]; #if PRESOLVE_DEBUG > 2 std::cout << " -> " << prob->columnStatusString(jcol) << "." << std::endl; #endif } /* Process variables where the lower bound is relaxed. The comments above apply. */ for (int k = nlo; k < ninrow; k++) { const int jcol = rowcols[k]; PRESOLVEASSERT(fabs(sol[jcol] - cup[jcol]) <= ztolzb); const double cbarj = rcosts[jcol]; const double oldlj = clo[jcol]; const double newlj = bounds[k]; const bool change = (fabs(newlj - oldlj) > ztolzb); #if PRESOLVE_DEBUG > 2 std::cout << " x(" << jcol << ") " << prob->columnStatusString(jcol) << " cbar = " << cbarj << ", ub = " << cup[jcol] << ", lb = " << oldlj << " -> " << newlj; #endif if (change && prob->getColumnStatus(jcol) != CoinPrePostsolveMatrix::basic) { prob->setColumnStatus(jcol, CoinPrePostsolveMatrix::atUpperBound); if (cbarj > ztoldj || cup[jcol] >= COIN_DBL_MAX) dualfeas = false; } clo[jcol] = bounds[k]; #if PRESOLVE_DEBUG > 2 std::cout << " -> " << prob->columnStatusString(jcol) << "." << std::endl; #endif } /* The reduced costs and status for the columns may or may not be ok for the relaxed column bounds. If not, find the variable x most out-of-whack with respect to reduced cost and calculate the value of y required to reduce cbar to zero. */ if (dualfeas == false) { int joow = -1; double yi = 0.0; for (int k = 0; k < ninrow; k++) { int jcol = rowcols[k]; CoinBigIndex kk = presolve_find_row2(irow, mcstrt[jcol], hincol[jcol], hrow, link); const double &cbarj = rcosts[jcol]; const CoinPrePostsolveMatrix::Status statj = prob->getColumnStatus(jcol); if ((cbarj < -ztoldj && statj != CoinPrePostsolveMatrix::atUpperBound) || (cbarj > ztoldj && statj != CoinPrePostsolveMatrix::atLowerBound)) { double yi_j = cbarj / colels[kk]; if (fabs(yi_j) > fabs(yi)) { joow = jcol; yi = yi_j; } #if PRESOLVE_DEBUG > 3 std::cout << " oow: x(" << jcol << ") " << prob->columnStatusString(jcol) << " cbar " << cbarj << " aij " << colels[kk] << " corr " << yi_j << "." << std::endl; #endif } } assert(joow != -1); /* Make x basic and set the row status according to whether we're tight at the lower or upper bound. Keep in mind the convention that a <= constraint has a slack 0 <= s <= infty, while a >= constraint has a surplus -infty <= s <= 0. */ #if PRESOLVE_DEBUG > 1 std::cout << " Adjusting row dual; x(" << joow << ") " << prob->columnStatusString(joow) << " -> " << statusName(CoinPrePostsolveMatrix::basic) << ", y = 0.0 -> " << yi << "." << std::endl; #endif prob->setColumnStatus(joow, CoinPrePostsolveMatrix::basic); if (acts[irow] - rlo[irow] < rup[irow] - acts[irow]) prob->setRowStatus(irow, CoinPrePostsolveMatrix::atUpperBound); else prob->setRowStatus(irow, CoinPrePostsolveMatrix::atLowerBound); rowduals[irow] = yi; #if PRESOLVE_DEBUG > 1 std::cout << " Row status " << prob->rowStatusString(irow) << ", lb = " << rlo[irow] << ", ax = " << acts[irow] << ", ub = " << rup[irow] << "." << std::endl; #endif /* Now correct the reduced costs for other variables in the row. This may cause a reduced cost to change sign, in which case we need to change status. The code implicitly assumes that if it's necessary to change the status of a variable because the reduced cost has changed sign, then it will be possible to do it. I'm not sure I could prove that, however. -- lh, 121108 -- */ for (int k = 0; k < ninrow; k++) { int jcol = rowcols[k]; CoinBigIndex kk = presolve_find_row2(irow, mcstrt[jcol], hincol[jcol], hrow, link); const double old_cbarj = rcosts[jcol]; rcosts[jcol] -= yi * colels[kk]; const double new_cbarj = rcosts[jcol]; if ((old_cbarj < 0) != (new_cbarj < 0)) { if (new_cbarj < -ztoldj && cup[jcol] < COIN_DBL_MAX) prob->setColumnStatus(jcol, CoinPrePostsolveMatrix::atUpperBound); else if (new_cbarj > ztoldj && clo[jcol] > -COIN_DBL_MAX) prob->setColumnStatus(jcol, CoinPrePostsolveMatrix::atLowerBound); } #if PRESOLVE_DEBUG > 3 const CoinPrePostsolveMatrix::Status statj = prob->getColumnStatus(jcol); std::cout << " corr: x(" << jcol << ") " << prob->columnStatusString(jcol) << " cbar " << new_cbarj; if ((new_cbarj < -ztoldj && statj != CoinPrePostsolveMatrix::atUpperBound) || (new_cbarj > ztoldj && statj != CoinPrePostsolveMatrix::atLowerBound) || (statj == CoinPrePostsolveMatrix::basic && fabs(new_cbarj) > ztoldj)) std::cout << " error!" << std::endl; else std::cout << "." << std::endl; #endif } } #if PRESOLVE_DEBUG > 0 presolve_check_nbasic(prob); #endif } #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving forcing_constraint_action::postsolve." << std::endl; #endif #endif } forcing_constraint_action::~forcing_constraint_action() { int i; for (i = 0; i < nactions_; i++) { //delete [] actions_[i].rowcols; MS Visual C++ V6 can not compile //delete [] actions_[i].bounds; MS Visual C++ V6 can not compile deleteAction(actions_[i].rowcols, int *); deleteAction(actions_[i].bounds, double *); } // delete [] actions_; MS Visual C++ V6 can not compile deleteAction(actions_, action *); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinSignal.hpp0000644000175200017520000000626213414454441016324 0ustar coincoin/* $Id: CoinSignal.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2003, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef _CoinSignal_hpp #define _CoinSignal_hpp // This file is fully docified. // There's nothing to docify... //############################################################################# #include //############################################################################# #if defined(_MSC_VER) typedef void(__cdecl *CoinSighandler_t)(int); #define CoinSighandler_t_defined #endif //----------------------------------------------------------------------------- #if (defined(__GNUC__) && defined(__linux__)) typedef sighandler_t CoinSighandler_t; #define CoinSighandler_t_defined #endif //----------------------------------------------------------------------------- #if defined(__CYGWIN__) && defined(__GNUC__) typedef __decltype(SIG_DFL) CoinSighandler_t; #define CoinSighandler_t_defined #endif //----------------------------------------------------------------------------- #if defined(__MINGW32__) && defined(__GNUC__) typedef __decltype(SIG_DFL) CoinSighandler_t; #define CoinSighandler_t_defined #endif //----------------------------------------------------------------------------- #if defined(__FreeBSD__) && defined(__GNUC__) typedef __decltype(SIG_DFL) CoinSighandler_t; #define CoinSighandler_t_defined #endif //----------------------------------------------------------------------------- #if defined(__NetBSD__) && defined(__GNUC__) typedef __decltype(SIG_DFL) CoinSighandler_t; #define CoinSighandler_t_defined #endif //----------------------------------------------------------------------------- #if defined(_AIX) #if defined(__GNUC__) typedef __decltype(SIG_DFL) CoinSighandler_t; #define CoinSighandler_t_defined #endif #endif //----------------------------------------------------------------------------- #if defined(__hpux) #define CoinSighandler_t_defined #if defined(__GNUC__) typedef __decltype(SIG_DFL) CoinSighandler_t; #else extern "C" { typedef void (*CoinSighandler_t)(int); } #endif #endif //----------------------------------------------------------------------------- #if defined(__sun) #if defined(__SUNPRO_CC) #include extern "C" { typedef void (*CoinSighandler_t)(int); } #define CoinSighandler_t_defined #endif #if defined(__GNUC__) typedef __decltype(SIG_DFL) CoinSighandler_t; #define CoinSighandler_t_defined #endif #endif //----------------------------------------------------------------------------- #if defined(__MACH__) && defined(__GNUC__) typedef __decltype(SIG_DFL) CoinSighandler_t; #define CoinSighandler_t_defined #endif //############################################################################# #ifndef CoinSighandler_t_defined #warning("OS and/or compiler is not recognized. Defaulting to:"); #warning("extern 'C' {") #warning(" typedef void (*CoinSighandler_t) (int);") #warning("}") extern "C" { typedef void (*CoinSighandler_t)(int); } #endif //############################################################################# #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveMonitor.cpp0000644000175200017520000002113513414454441020245 0ustar coincoin/* $Id: CoinPresolveMonitor.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2011 Lou Hafer // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinHelperFunctions.hpp" #include "CoinPackedVector.hpp" #include "CoinPresolveMatrix.hpp" #include "CoinPresolveMonitor.hpp" /*! \file This file contains methods for CoinPresolveMonitor, used to monitor changes to a row or column during presolve and postsolve */ /* Constructors */ /* Default constructor */ CoinPresolveMonitor::CoinPresolveMonitor() { } /* Constructor to initialise from a CoinPresolveMatrix (not threaded) */ CoinPresolveMonitor::CoinPresolveMonitor(const CoinPresolveMatrix *mtx, bool isRow, int k) { ndx_ = k; isRow_ = isRow; if (isRow) { origVec_ = extractRow(k, mtx); const double *blow = mtx->getRowLower(); lb_ = blow[k]; const double *b = mtx->getRowUpper(); ub_ = b[k]; } else { origVec_ = extractCol(k, mtx); const double *lb = mtx->getColLower(); lb_ = lb[k]; const double *ub = mtx->getColUpper(); ub_ = ub[k]; } origVec_->sortIncrIndex(); } /* Constructor to initialise from a CoinPostsolveMatrix */ CoinPresolveMonitor::CoinPresolveMonitor(const CoinPostsolveMatrix *mtx, bool isRow, int k) { ndx_ = k; isRow_ = isRow; if (isRow) { origVec_ = extractRow(k, mtx); const double *blow = mtx->getRowLower(); lb_ = blow[k]; const double *b = mtx->getRowUpper(); ub_ = b[k]; } else { origVec_ = extractCol(k, mtx); const double *lb = mtx->getColLower(); lb_ = lb[k]; const double *ub = mtx->getColUpper(); ub_ = ub[k]; } origVec_->sortIncrIndex(); } /* Extract a row from a CoinPresolveMatrix. Since a CoinPresolveMatrix contains both row-ordered and column-ordered copies, this is relatively efficient. */ CoinPackedVector *CoinPresolveMonitor::extractRow(int i, const CoinPresolveMatrix *mtx) const { const CoinBigIndex *rowStarts = mtx->getRowStarts(); const int *colIndices = mtx->getColIndicesByRow(); const double *coeffs = mtx->getElementsByRow(); const int rowLen = mtx->hinrow_[i]; const CoinBigIndex &ii = rowStarts[i]; return (new CoinPackedVector(rowLen, &colIndices[ii], &coeffs[ii])); } /* Extract a column from a CoinPresolveMatrix. Since a CoinPresolveMatrix contains both row-ordered and column-ordered copies, this is relatively efficient. */ CoinPackedVector *CoinPresolveMonitor::extractCol(int j, const CoinPresolveMatrix *mtx) const { const CoinBigIndex *colStarts = mtx->getColStarts(); const int *colLens = mtx->getColLengths(); const int *rowIndices = mtx->getRowIndicesByCol(); const double *coeffs = mtx->getElementsByCol(); const CoinBigIndex &jj = colStarts[j]; return (new CoinPackedVector(colLens[j], &rowIndices[jj], &coeffs[jj])); } /* Extract a row from a CoinPostsolveMatrix. This is very painful, because the matrix is threaded column-ordered only. We have to scan every entry in the matrix, looking for entries that match the requested row index. */ CoinPackedVector *CoinPresolveMonitor::extractRow(int i, const CoinPostsolveMatrix *mtx) const { const CoinBigIndex *colStarts = mtx->getColStarts(); const int *colLens = mtx->getColLengths(); const double *coeffs = mtx->getElementsByCol(); const int *rowIndices = mtx->getRowIndicesByCol(); const CoinBigIndex *colLinks = mtx->link_; int n = mtx->getNumCols(); CoinPackedVector *pkvec = new CoinPackedVector(); for (int j = 0; j < n; j++) { const CoinBigIndex ii = presolve_find_row3(i, colStarts[j], colLens[j], rowIndices, colLinks); if (ii >= 0) pkvec->insert(j, coeffs[ii]); } return (pkvec); } /* Extract a column from a CoinPostsolveMatrix. At least here we only need to walk one threaded column. */ CoinPackedVector *CoinPresolveMonitor::extractCol(int j, const CoinPostsolveMatrix *mtx) const { const CoinBigIndex *colStarts = mtx->getColStarts(); const int *colLens = mtx->getColLengths(); const double *coeffs = mtx->getElementsByCol(); const int *rowIndices = mtx->getRowIndicesByCol(); const CoinBigIndex *colLinks = mtx->link_; CoinPackedVector *pkvec = new CoinPackedVector(); CoinBigIndex jj = colStarts[j]; const int &lenj = colLens[j]; for (int k = 0; k < lenj; k++) { pkvec->insert(rowIndices[jj], coeffs[jj]); jj = colLinks[jj]; } return (pkvec); } /* Extract the current version of the row or column from the CoinPresolveMatrix into a CoinPackedVector, sort it, and compare it to the stored CoinPackedVector. Differences are reported to std::cout. */ void CoinPresolveMonitor::checkAndTell(const CoinPresolveMatrix *mtx) { CoinPackedVector *curVec = 0; const double *lbs = 0; const double *ubs = 0; if (isRow_) { lbs = mtx->getRowLower(); ubs = mtx->getRowUpper(); curVec = extractRow(ndx_, mtx); } else { curVec = extractCol(ndx_, mtx); lbs = mtx->getColLower(); ubs = mtx->getColUpper(); } checkAndTell(curVec, lbs[ndx_], ubs[ndx_]); } /* Extract the current version of the row or column from the CoinPostsolveMatrix into a CoinPackedVector, sort it, and compare it to the stored CoinPackedVector. Differences are reported to std::cout. */ void CoinPresolveMonitor::checkAndTell(const CoinPostsolveMatrix *mtx) { CoinPackedVector *curVec = 0; const double *lbs = 0; const double *ubs = 0; if (isRow_) { lbs = mtx->getRowLower(); ubs = mtx->getRowUpper(); curVec = extractRow(ndx_, mtx); } else { curVec = extractCol(ndx_, mtx); lbs = mtx->getColLower(); ubs = mtx->getColUpper(); } checkAndTell(curVec, lbs[ndx_], ubs[ndx_]); } /* And the worker method, which does the actual diff of the vectors and also checks the bounds. If the vector fails a quick check with ==, extract the indices, merge them, and then walk the indices checking for presence in each vector. Where both elements are present, check the coefficient. Report any differences. Not the most efficient implementation, but it leverages existing capabilities. */ void CoinPresolveMonitor::checkAndTell(CoinPackedVector *curVec, double lb, double ub) { curVec->sortIncrIndex(); std::cout << "checking " << ((isRow_) ? "row " : "column ") << ndx_ << " ..."; int diffcnt = 0; if (lb_ != lb) { diffcnt++; std::cout << std::endl << " " << ((isRow_) ? "blow" : "lb") << " = " << lb_ << " in original, " << lb << " in current."; } if (ub_ != ub) { diffcnt++; std::cout << std::endl << " " << ((isRow_) ? "b" : "ub") << " = " << ub_ << " in original, " << ub << " in current."; } bool vecDiff = ((*origVec_) == (*curVec)); /* Dispense with the easy outcomes. */ if (diffcnt == 0 && !vecDiff) { std::cout << " equal." << std::endl; return; } else if (!vecDiff) { std::cout << std::endl << " coefficients equal." << std::endl; return; } /* We have to compare the coefficients. Merge the index sets. */ int origLen = origVec_->getNumElements(); int curLen = curVec->getNumElements(); int mergedLen = origLen + curLen; int *mergedIndices = new int[mergedLen]; CoinCopyN(origVec_->getIndices(), origLen, mergedIndices); CoinCopyN(curVec->getIndices(), curLen, mergedIndices + origLen); std::inplace_merge(mergedIndices, mergedIndices + origLen, mergedIndices + mergedLen); int *uniqEnd = std::unique(mergedIndices, mergedIndices + mergedLen); int uniqLen = static_cast< int >(uniqEnd - mergedIndices); for (int k = 0; k < uniqLen; k++) { int j = mergedIndices[k]; double aij_orig = 0.0; double aij_cur = 0.0; bool inOrig = false; bool inCur = false; if (origVec_->findIndex(j) >= 0) { inOrig = true; aij_orig = (*origVec_)[j]; } if (curVec->findIndex(j) >= 0) { inCur = true; aij_cur = (*curVec)[j]; } if (inOrig == false || inCur == false || aij_orig != aij_cur) { diffcnt++; std::cout << std::endl << " "; if (isRow_) std::cout << "coeff a(" << ndx_ << "," << j << ") "; else std::cout << "coeff a(" << j << "," << ndx_ << ") "; if (inOrig == false) std::cout << "= " << aij_cur << " not present in original."; else if (inCur == false) std::cout << "= " << aij_orig << " not present in current."; else std::cout << " = " << aij_orig << " in original, " << aij_cur << " in current."; } } std::cout << std::endl << " " << diffcnt << " changes." << std::endl; delete[] mergedIndices; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinStructuredModel.cpp0000644000175200017520000021641513414454441020232 0ustar coincoin/* $Id: CoinStructuredModel.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2008, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinUtilsConfig.h" #include "CoinHelperFunctions.hpp" #include "CoinStructuredModel.hpp" #include "CoinSort.hpp" #include "CoinMpsIO.hpp" #include "CoinMessage.hpp" #include "CoinFloatEqual.hpp" //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinStructuredModel::CoinStructuredModel() : CoinBaseModel() , numberRowBlocks_(0) , numberColumnBlocks_(0) , numberElementBlocks_(0) , maximumElementBlocks_(0) , blocks_(NULL) , coinModelBlocks_(NULL) , blockType_(NULL) { } /* Read a problem in MPS or GAMS format from the given filename. */ CoinStructuredModel::CoinStructuredModel(const char *fileName, int decomposeType, int maxBlocks) : CoinBaseModel() , numberRowBlocks_(0) , numberColumnBlocks_(0) , numberElementBlocks_(0) , maximumElementBlocks_(0) , blocks_(NULL) , coinModelBlocks_(NULL) , blockType_(NULL) { CoinModel coinModel(fileName, false); if (coinModel.numberRows()) { problemName_ = coinModel.getProblemName(); optimizationDirection_ = coinModel.optimizationDirection(); objectiveOffset_ = coinModel.objectiveOffset(); if (!decomposeType) { addBlock("row_master", "column_master", coinModel); } else { const CoinPackedMatrix *matrix = coinModel.packedMatrix(); if (!matrix) coinModel.convertMatrix(); decompose(coinModel, decomposeType, maxBlocks); //addBlock("row_master","column_master",coinModel); } } } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinStructuredModel::CoinStructuredModel(const CoinStructuredModel &rhs) : CoinBaseModel(rhs) , numberRowBlocks_(rhs.numberRowBlocks_) , numberColumnBlocks_(rhs.numberColumnBlocks_) , numberElementBlocks_(rhs.numberElementBlocks_) , maximumElementBlocks_(rhs.maximumElementBlocks_) { if (maximumElementBlocks_) { blocks_ = CoinCopyOfArray(rhs.blocks_, maximumElementBlocks_); for (int i = 0; i < numberElementBlocks_; i++) blocks_[i] = rhs.blocks_[i]->clone(); blockType_ = CoinCopyOfArray(rhs.blockType_, maximumElementBlocks_); if (rhs.coinModelBlocks_) { coinModelBlocks_ = CoinCopyOfArray(rhs.coinModelBlocks_, maximumElementBlocks_); for (int i = 0; i < numberElementBlocks_; i++) coinModelBlocks_[i] = new CoinModel(*rhs.coinModelBlocks_[i]); } else { coinModelBlocks_ = NULL; } } else { blocks_ = NULL; blockType_ = NULL; coinModelBlocks_ = NULL; } rowBlockNames_ = rhs.rowBlockNames_; columnBlockNames_ = rhs.columnBlockNames_; } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinStructuredModel::~CoinStructuredModel() { for (int i = 0; i < numberElementBlocks_; i++) delete blocks_[i]; delete[] blocks_; delete[] blockType_; if (coinModelBlocks_) { for (int i = 0; i < numberElementBlocks_; i++) delete coinModelBlocks_[i]; delete[] coinModelBlocks_; } } // Clone CoinBaseModel * CoinStructuredModel::clone() const { return new CoinStructuredModel(*this); } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinStructuredModel & CoinStructuredModel::operator=(const CoinStructuredModel &rhs) { if (this != &rhs) { CoinBaseModel::operator=(rhs); for (int i = 0; i < numberElementBlocks_; i++) delete blocks_[i]; delete[] blocks_; delete[] blockType_; if (coinModelBlocks_) { for (int i = 0; i < numberElementBlocks_; i++) delete coinModelBlocks_[i]; delete[] coinModelBlocks_; } numberRowBlocks_ = rhs.numberRowBlocks_; numberColumnBlocks_ = rhs.numberColumnBlocks_; numberElementBlocks_ = rhs.numberElementBlocks_; maximumElementBlocks_ = rhs.maximumElementBlocks_; if (maximumElementBlocks_) { blocks_ = CoinCopyOfArray(rhs.blocks_, maximumElementBlocks_); for (int i = 0; i < numberElementBlocks_; i++) blocks_[i] = rhs.blocks_[i]->clone(); blockType_ = CoinCopyOfArray(rhs.blockType_, maximumElementBlocks_); if (rhs.coinModelBlocks_) { coinModelBlocks_ = CoinCopyOfArray(rhs.coinModelBlocks_, maximumElementBlocks_); for (int i = 0; i < numberElementBlocks_; i++) coinModelBlocks_[i] = new CoinModel(*rhs.coinModelBlocks_[i]); } else { coinModelBlocks_ = NULL; } } else { blocks_ = NULL; blockType_ = NULL; coinModelBlocks_ = NULL; } rowBlockNames_ = rhs.rowBlockNames_; columnBlockNames_ = rhs.columnBlockNames_; } return *this; } static bool sameValues(const double *a, const double *b, int n) { int i; for (i = 0; i < n; i++) { if (a[i] != b[i]) break; } return (i == n); } static bool sameValues(const int *a, const int *b, int n) { int i; for (i = 0; i < n; i++) { if (a[i] != b[i]) break; } return (i == n); } static bool sameValues(const CoinModel *a, const CoinModel *b, bool doRows) { int i = 0; int n = 0; if (doRows) { n = a->numberRows(); for (i = 0; i < n; i++) { const char *aName = a->getRowName(i); const char *bName = b->getRowName(i); bool good = true; if (aName) { if (!bName || strcmp(aName, bName)) good = false; } else if (bName) { good = false; } if (!good) break; } } else { n = a->numberColumns(); for (i = 0; i < n; i++) { const char *aName = a->getColumnName(i); const char *bName = b->getColumnName(i); bool good = true; if (aName) { if (!bName || strcmp(aName, bName)) good = false; } else if (bName) { good = false; } if (!good) break; } } return (i == n); } // Add a row block name and number of rows int CoinStructuredModel::addRowBlock(int numberRows, const std::string &name) { int iRowBlock; for (iRowBlock = 0; iRowBlock < numberRowBlocks_; iRowBlock++) { if (name == rowBlockNames_[iRowBlock]) break; } if (iRowBlock == numberRowBlocks_) { rowBlockNames_.push_back(name); numberRowBlocks_++; numberRows_ += numberRows; } return iRowBlock; } // Return a row block index given a row block name int CoinStructuredModel::rowBlock(const std::string &name) const { int iRowBlock; for (iRowBlock = 0; iRowBlock < numberRowBlocks_; iRowBlock++) { if (name == rowBlockNames_[iRowBlock]) break; } if (iRowBlock == numberRowBlocks_) iRowBlock = -1; return iRowBlock; } // Add a column block name and number of columns int CoinStructuredModel::addColumnBlock(int numberColumns, const std::string &name) { int iColumnBlock; for (iColumnBlock = 0; iColumnBlock < numberColumnBlocks_; iColumnBlock++) { if (name == columnBlockNames_[iColumnBlock]) break; } if (iColumnBlock == numberColumnBlocks_) { columnBlockNames_.push_back(name); numberColumnBlocks_++; numberColumns_ += numberColumns; } return iColumnBlock; } // Return a column block index given a column block name int CoinStructuredModel::columnBlock(const std::string &name) const { int iColumnBlock; for (iColumnBlock = 0; iColumnBlock < numberColumnBlocks_; iColumnBlock++) { if (name == columnBlockNames_[iColumnBlock]) break; } if (iColumnBlock == numberColumnBlocks_) iColumnBlock = -1; return iColumnBlock; } // Return number of elements CoinBigIndex CoinStructuredModel::numberElements() const { CoinBigIndex numberElements = 0; for (int iBlock = 0; iBlock < numberElementBlocks_; iBlock++) { numberElements += blocks_[iBlock]->numberElements(); } return numberElements; } // Return i'th block as CoinModel (or NULL) CoinModel * CoinStructuredModel::coinBlock(int i) const { CoinModel *block = dynamic_cast< CoinModel * >(blocks_[i]); if (block) return block; else if (coinModelBlocks_) return coinModelBlocks_[i]; else return NULL; } /* Return block as a CoinModel block and fill in info structure and update counts */ CoinModel * CoinStructuredModel::coinModelBlock(CoinModelBlockInfo &info) { // CoinStructuredModel int numberRows = this->numberRows(); int numberColumns = this->numberColumns(); int numberRowBlocks = this->numberRowBlocks(); int numberColumnBlocks = this->numberColumnBlocks(); int numberElementBlocks = this->numberElementBlocks(); CoinBigIndex numberElements = this->numberElements(); // See what is needed double *rowLower = NULL; double *rowUpper = NULL; double *columnLower = NULL; double *columnUpper = NULL; double *objective = NULL; int *integerType = NULL; info = CoinModelBlockInfo(); CoinModel **blocks = new CoinModel *[numberElementBlocks]; for (int iBlock = 0; iBlock < numberElementBlocks; iBlock++) { CoinModelBlockInfo thisInfo = blockType_[iBlock]; CoinStructuredModel *subModel = dynamic_cast< CoinStructuredModel * >(blocks_[iBlock]); CoinModel *thisBlock; if (subModel) { thisBlock = subModel->coinModelBlock(thisInfo); fillInfo(thisInfo, subModel); setCoinModel(thisBlock, iBlock); } else { thisBlock = dynamic_cast< CoinModel * >(blocks_[iBlock]); assert(thisBlock); fillInfo(thisInfo, thisBlock); } blocks[iBlock] = thisBlock; if (thisInfo.rhs && !info.rhs) { info.rhs = 1; rowLower = new double[numberRows]; rowUpper = new double[numberRows]; CoinFillN(rowLower, numberRows, -COIN_DBL_MAX); CoinFillN(rowUpper, numberRows, COIN_DBL_MAX); } if (thisInfo.bounds && !info.bounds) { info.bounds = 1; columnLower = new double[numberColumns]; columnUpper = new double[numberColumns]; objective = new double[numberColumns]; CoinFillN(columnLower, numberColumns, 0.0); CoinFillN(columnUpper, numberColumns, COIN_DBL_MAX); CoinFillN(objective, numberColumns, 0.0); } if (thisInfo.integer && !info.integer) { info.integer = 1; integerType = new int[numberColumns]; CoinFillN(integerType, numberColumns, 0); } if (thisInfo.rowName && !info.rowName) { info.rowName = 1; } if (thisInfo.columnName && !info.columnName) { info.columnName = 1; } } // Space for elements int *row = new int[numberElements]; int *column = new int[numberElements]; double *element = new double[numberElements]; numberElements = 0; // Bases for blocks int *rowBase = new int[numberRowBlocks]; CoinFillN(rowBase, numberRowBlocks, -1); CoinModelBlockInfo *rowBlockInfo = new CoinModelBlockInfo[numberRowBlocks]; int *columnBase = new int[numberColumnBlocks]; CoinFillN(columnBase, numberColumnBlocks, -1); CoinModelBlockInfo *columnBlockInfo = new CoinModelBlockInfo[numberColumnBlocks]; for (int iBlock = 0; iBlock < numberElementBlocks; iBlock++) { int iRowBlock = rowBlock(blocks[iBlock]->getRowBlock()); assert(iRowBlock >= 0 && iRowBlock < numberRowBlocks); if (rowBase[iRowBlock] == -1) rowBase[iRowBlock] = blocks[iBlock]->numberRows(); else assert(rowBase[iRowBlock] == blocks[iBlock]->numberRows()); int iColumnBlock = columnBlock(blocks[iBlock]->getColumnBlock()); assert(iColumnBlock >= 0 && iColumnBlock < numberColumnBlocks); if (columnBase[iColumnBlock] == -1) columnBase[iColumnBlock] = blocks[iBlock]->numberColumns(); else assert(columnBase[iColumnBlock] == blocks[iBlock]->numberColumns()); } int n = 0; for (int iBlock = 0; iBlock < numberRowBlocks; iBlock++) { int k = rowBase[iBlock]; rowBase[iBlock] = n; assert(k >= 0); n += k; } assert(n == numberRows); n = 0; for (int iBlock = 0; iBlock < numberColumnBlocks; iBlock++) { int k = columnBase[iBlock]; columnBase[iBlock] = n; assert(k >= 0); n += k; } assert(n == numberColumns); for (int iBlock = 0; iBlock < numberElementBlocks; iBlock++) { CoinModelBlockInfo thisInfo = blockType_[iBlock]; CoinModel *thisBlock = blocks[iBlock]; int iRowBlock = rowBlock(blocks[iBlock]->getRowBlock()); int iRowBase = rowBase[iRowBlock]; int nRows = thisBlock->numberRows(); // could check if identical before error if (thisInfo.rhs) { assert(!rowBlockInfo[iRowBlock].rhs); rowBlockInfo[iRowBlock].rhs = 1; memcpy(rowLower + iRowBase, thisBlock->rowLowerArray(), nRows * sizeof(double)); memcpy(rowUpper + iRowBase, thisBlock->rowUpperArray(), nRows * sizeof(double)); } int iColumnBlock = columnBlock(blocks[iBlock]->getColumnBlock()); int iColumnBase = columnBase[iColumnBlock]; int nColumns = thisBlock->numberColumns(); if (thisInfo.bounds) { assert(!columnBlockInfo[iColumnBlock].bounds); columnBlockInfo[iColumnBlock].bounds = 1; memcpy(columnLower + iColumnBase, thisBlock->columnLowerArray(), nColumns * sizeof(double)); memcpy(columnUpper + iColumnBase, thisBlock->columnUpperArray(), nColumns * sizeof(double)); memcpy(objective + iColumnBase, thisBlock->objectiveArray(), nColumns * sizeof(double)); } if (thisInfo.integer) { assert(!columnBlockInfo[iColumnBlock].integer); columnBlockInfo[iColumnBlock].integer = 1; memcpy(integerType + iColumnBase, thisBlock->integerTypeArray(), nColumns * sizeof(int)); } const CoinPackedMatrix *elementBlock = thisBlock->packedMatrix(); // get matrix data pointers const int *row2 = elementBlock->getIndices(); const CoinBigIndex *columnStart = elementBlock->getVectorStarts(); const double *elementByColumn = elementBlock->getElements(); const int *columnLength = elementBlock->getVectorLengths(); int n = elementBlock->getNumCols(); assert(elementBlock->isColOrdered()); for (int iColumn = 0; iColumn < n; iColumn++) { CoinBigIndex j; int jColumn = iColumn + iColumnBase; for (j = columnStart[iColumn]; j < columnStart[iColumn] + columnLength[iColumn]; j++) { row[numberElements] = row2[j] + iRowBase; column[numberElements] = jColumn; element[numberElements++] = elementByColumn[j]; } } } delete[] rowBlockInfo; delete[] columnBlockInfo; CoinPackedMatrix matrix(true, row, column, element, numberElements); if (numberElements) info.matrix = 1; delete[] row; delete[] column; delete[] element; CoinModel *block = new CoinModel(numberRows, numberColumns, &matrix, rowLower, rowUpper, columnLower, columnUpper, objective); delete[] rowLower; delete[] rowUpper; delete[] columnLower; delete[] columnUpper; delete[] objective; // Do integers if wanted if (integerType) { for (int iColumn = 0; iColumn < numberColumns; iColumn++) { block->setColumnIsInteger(iColumn, integerType[iColumn] != 0); } } delete[] integerType; block->setObjectiveOffset(objectiveOffset()); if (info.rowName || info.columnName) { for (int iBlock = 0; iBlock < numberElementBlocks; iBlock++) { CoinModelBlockInfo thisInfo; CoinModel *thisBlock = blocks[iBlock]; int iRowBlock = rowBlock(thisBlock->getRowBlock()); int iRowBase = rowBase[iRowBlock]; if (thisInfo.rowName) { int numberItems = thisBlock->rowNames()->numberItems(); assert(thisBlock->numberRows() >= numberItems); if (numberItems) { const char *const *rowNames = thisBlock->rowNames()->names(); for (int i = 0; i < numberItems; i++) { std::string name = rowNames[i]; block->setRowName(i + iRowBase, name.c_str()); } } } int iColumnBlock = columnBlock(thisBlock->getColumnBlock()); int iColumnBase = columnBase[iColumnBlock]; if (thisInfo.columnName) { int numberItems = thisBlock->columnNames()->numberItems(); assert(thisBlock->numberColumns() >= numberItems); if (numberItems) { const char *const *columnNames = thisBlock->columnNames()->names(); for (int i = 0; i < numberItems; i++) { std::string name = columnNames[i]; block->setColumnName(i + iColumnBase, name.c_str()); } } } } } delete[] rowBase; delete[] columnBase; for (int iBlock = 0; iBlock < numberElementBlocks; iBlock++) { if (static_cast< CoinBaseModel * >(blocks[iBlock]) != static_cast< CoinBaseModel * >(blocks_[iBlock])) delete blocks[iBlock]; } delete[] blocks; return block; } // Sets given block into coinModelBlocks_ void CoinStructuredModel::setCoinModel(CoinModel *block, int iBlock) { if (!coinModelBlocks_) { coinModelBlocks_ = new CoinModel *[maximumElementBlocks_]; CoinZeroN(coinModelBlocks_, maximumElementBlocks_); } delete coinModelBlocks_[iBlock]; coinModelBlocks_[iBlock] = block; } // Refresh info in blockType_ void CoinStructuredModel::refresh(int iBlock) { fillInfo(blockType_[iBlock], coinBlock(iBlock)); } /* Fill in info structure and update counts Returns number of inconsistencies on border */ int CoinStructuredModel::fillInfo(CoinModelBlockInfo &info, const CoinModel *block) { int whatsSet = block->whatIsSet(); info.matrix = static_cast< char >(((whatsSet & 1) != 0) ? 1 : 0); info.rhs = static_cast< char >(((whatsSet & 2) != 0) ? 1 : 0); info.rowName = static_cast< char >(((whatsSet & 4) != 0) ? 1 : 0); info.integer = static_cast< char >(((whatsSet & 32) != 0) ? 1 : 0); info.bounds = static_cast< char >(((whatsSet & 8) != 0) ? 1 : 0); info.columnName = static_cast< char >(((whatsSet & 16) != 0) ? 1 : 0); int numberRows = block->numberRows(); int numberColumns = block->numberColumns(); // Which block int iRowBlock = addRowBlock(numberRows, block->getRowBlock()); info.rowBlock = iRowBlock; int iColumnBlock = addColumnBlock(numberColumns, block->getColumnBlock()); info.columnBlock = iColumnBlock; int numberErrors = 0; CoinModelBlockInfo sumInfo = blockType_[numberElementBlocks_ - 1]; int iRhs = (sumInfo.rhs) ? numberElementBlocks_ - 1 : -1; int iRowName = (sumInfo.rowName) ? numberElementBlocks_ - 1 : -1; int iBounds = (sumInfo.bounds) ? numberElementBlocks_ - 1 : -1; int iColumnName = (sumInfo.columnName) ? numberElementBlocks_ - 1 : -1; int iInteger = (sumInfo.integer) ? numberElementBlocks_ - 1 : -1; for (int i = 0; i < numberElementBlocks_ - 1; i++) { if (iRowBlock == blockType_[i].rowBlock) { if (numberRows != blocks_[i]->numberRows()) numberErrors += 1000; if (blockType_[i].rhs) { if (iRhs < 0) { iRhs = i; } else { // check const double *a = static_cast< CoinModel * >(blocks_[iRhs])->rowLowerArray(); const double *b = static_cast< CoinModel * >(blocks_[i])->rowLowerArray(); if (!sameValues(a, b, numberRows)) numberErrors++; a = static_cast< CoinModel * >(blocks_[iRhs])->rowUpperArray(); b = static_cast< CoinModel * >(blocks_[i])->rowUpperArray(); if (!sameValues(a, b, numberRows)) numberErrors++; } } if (blockType_[i].rowName) { if (iRowName < 0) { iRowName = i; } else { // check if (!sameValues(static_cast< CoinModel * >(blocks_[iRowName]), static_cast< CoinModel * >(blocks_[i]), true)) numberErrors++; } } } if (iColumnBlock == blockType_[i].columnBlock) { if (numberColumns != blocks_[i]->numberColumns()) numberErrors += 1000; if (blockType_[i].bounds) { if (iBounds < 0) { iBounds = i; } else { // check const double *a = static_cast< CoinModel * >(blocks_[iBounds])->columnLowerArray(); const double *b = static_cast< CoinModel * >(blocks_[i])->columnLowerArray(); if (!sameValues(a, b, numberColumns)) numberErrors++; a = static_cast< CoinModel * >(blocks_[iBounds])->columnUpperArray(); b = static_cast< CoinModel * >(blocks_[i])->columnUpperArray(); if (!sameValues(a, b, numberColumns)) numberErrors++; a = static_cast< CoinModel * >(blocks_[iBounds])->objectiveArray(); b = static_cast< CoinModel * >(blocks_[i])->objectiveArray(); if (!sameValues(a, b, numberColumns)) numberErrors++; } } if (blockType_[i].columnName) { if (iColumnName < 0) { iColumnName = i; } else { // check if (!sameValues(static_cast< CoinModel * >(blocks_[iColumnName]), static_cast< CoinModel * >(blocks_[i]), false)) numberErrors++; } } if (blockType_[i].integer) { if (iInteger < 0) { iInteger = i; } else { // check const int *a = static_cast< CoinModel * >(blocks_[iInteger])->integerTypeArray(); const int *b = static_cast< CoinModel * >(blocks_[i])->integerTypeArray(); if (!sameValues(a, b, numberColumns)) numberErrors++; } } } } return numberErrors; } /* Fill in info structure and update counts */ void CoinStructuredModel::fillInfo(CoinModelBlockInfo &info, const CoinStructuredModel *block) { int numberRows = block->numberRows(); int numberColumns = block->numberColumns(); // Which block int iRowBlock = addRowBlock(numberRows, block->rowBlockName_); info.rowBlock = iRowBlock; int iColumnBlock = addColumnBlock(numberColumns, block->columnBlockName_); info.columnBlock = iColumnBlock; } /* add a block from a CoinModel without names*/ int CoinStructuredModel::addBlock(const std::string &rowBlock, const std::string &columnBlock, const CoinBaseModel &block) { CoinBaseModel *block2 = block.clone(); return addBlock(rowBlock, columnBlock, block2); } /* add a block using names */ int CoinStructuredModel::addBlock(const std::string &rowBlock, const std::string &columnBlock, const CoinPackedMatrix &matrix, const double *rowLower, const double *rowUpper, const double *columnLower, const double *columnUpper, const double *objective) { CoinModel *block = new CoinModel(); block->loadBlock(matrix, columnLower, columnUpper, objective, rowLower, rowUpper); return addBlock(rowBlock, columnBlock, block); } /* add a block from a CoinModel without names*/ int CoinStructuredModel::addBlock(const std::string &rowBlock, const std::string &columnBlock, CoinBaseModel *block) { if (numberElementBlocks_ == maximumElementBlocks_) { maximumElementBlocks_ = 3 * (maximumElementBlocks_ + 10) / 2; CoinBaseModel **temp = new CoinBaseModel *[maximumElementBlocks_]; memcpy(temp, blocks_, numberElementBlocks_ * sizeof(CoinBaseModel *)); delete[] blocks_; blocks_ = temp; CoinModelBlockInfo *temp2 = new CoinModelBlockInfo[maximumElementBlocks_]; memcpy(temp2, blockType_, numberElementBlocks_ * sizeof(CoinModelBlockInfo)); delete[] blockType_; blockType_ = temp2; if (coinModelBlocks_) { CoinModel **temp = new CoinModel *[maximumElementBlocks_]; CoinZeroN(temp, maximumElementBlocks_); memcpy(temp, coinModelBlocks_, numberElementBlocks_ * sizeof(CoinModel *)); delete[] coinModelBlocks_; coinModelBlocks_ = temp; } } blocks_[numberElementBlocks_++] = block; block->setRowBlock(rowBlock); block->setColumnBlock(columnBlock); int numberErrors = 0; CoinModel *coinBlock = dynamic_cast< CoinModel * >(block); if (coinBlock) { // Convert matrix if (coinBlock->type() != 3) coinBlock->convertMatrix(); numberErrors = fillInfo(blockType_[numberElementBlocks_ - 1], coinBlock); } else { CoinStructuredModel *subModel = dynamic_cast< CoinStructuredModel * >(block); assert(subModel); CoinModel *blockX = subModel->coinModelBlock(blockType_[numberElementBlocks_ - 1]); fillInfo(blockType_[numberElementBlocks_ - 1], subModel); setCoinModel(blockX, numberElementBlocks_ - 1); } return numberErrors; } /* add a block from a CoinModel with names*/ int CoinStructuredModel::addBlock(const CoinBaseModel &block) { //inline const std::string & getRowBlock() const //abort(); return addBlock(block.getRowBlock(), block.getColumnBlock(), block); } /* Decompose a model specified as arrays + CoinPackedMatrix 1 - try D-W 2 - try Benders 3 - try Staircase Returns number of blocks or zero if no structure */ int CoinStructuredModel::decompose(const CoinPackedMatrix &matrix, const double *rowLower, const double *rowUpper, const double *columnLower, const double *columnUpper, const double *objective, int type, int maxBlocks, int *starts, double objectiveOffset) { setObjectiveOffset(objectiveOffset); int numberBlocks = 0; char generalPrint[200]; bool wantDecomposition = type > 2; type %= 10; if (type == 1) { // Try master at top and bottom bool goodDW = true; // get row copy CoinPackedMatrix rowCopy = matrix; rowCopy.reverseOrdering(); const int *row = matrix.getIndices(); const int *columnLength = matrix.getVectorLengths(); const CoinBigIndex *columnStart = matrix.getVectorStarts(); //const double * elementByColumn = matrix.getElements(); const int *column = rowCopy.getIndices(); const int *rowLength = rowCopy.getVectorLengths(); const CoinBigIndex *rowStart = rowCopy.getVectorStarts(); //const double * elementByRow = rowCopy.getElements(); int numberRows = matrix.getNumRows(); int *rowBlock = new int[numberRows + 1]; int iRow; // Row counts (maybe look at long rows for master) CoinZeroN(rowBlock, numberRows + 1); for (iRow = 0; iRow < numberRows; iRow++) { int length = rowLength[iRow]; rowBlock[length]++; } if (!starts) { for (iRow = 0; iRow < numberRows + 1; iRow++) { if (rowBlock[iRow]) { sprintf(generalPrint, "%d rows have %d elements", rowBlock[iRow], iRow); handler_->message(COIN_GENERAL_INFO2, messages_) << generalPrint << CoinMessageEol; } } } bool newWay = true; // to say if column looked at int numberColumns = matrix.getNumCols(); int *columnBlock = new int[numberColumns]; int iColumn; int *whichRow = new int[numberRows]; int *whichColumn = new int[numberColumns]; int *stack = new int[numberRows]; if (newWay && !starts) { //double best2[3]={COIN_DBL_MAX,COIN_DBL_MAX,COIN_DBL_MAX}; double best2[3] = { 0.0, 0.0, 0.0 }; int row2[3] = { -1, -1, -1 }; // try forward and backward and sorted for (int iWay = 0; iWay < 3; iWay++) { if (iWay == 0) { // forwards for (int i = 0; i < numberRows; i++) stack[i] = i; } else if (iWay == 1) { // backwards for (int i = 0; i < numberRows; i++) stack[i] = numberRows - 1 - i; } else { // sparsest first for (int i = 0; i < numberRows; i++) { rowBlock[i] = rowLength[i]; stack[i] = i; } CoinSort_2(rowBlock, rowBlock + numberRows, stack); } CoinFillN(rowBlock, numberRows, -1); rowBlock[numberRows] = 0; CoinFillN(whichRow, numberRows, -1); CoinFillN(columnBlock, numberColumns, -1); CoinFillN(whichColumn, numberColumns, -1); int numberMarkedColumns = 0; numberBlocks = 0; int bestRow = -1; int maximumInBlock = 0; int rowsDone = 0; int checkAfterRows = (5 * numberRows) / 10 + 1; #define OSL_WAY #ifdef OSL_WAY double best = COIN_DBL_MAX; int bestRowsDone = -1; #else double best = 0.0; //COIN_DBL_MAX; #endif int numberGoodBlocks = 0; for (int kRow = 0; kRow < numberRows; kRow++) { iRow = stack[kRow]; CoinBigIndex start = rowStart[iRow]; CoinBigIndex end = start + rowLength[iRow]; int iBlock = -1; for (CoinBigIndex j = start; j < end; j++) { int iColumn = column[j]; if (columnBlock[iColumn] >= 0) { // already marked if (iBlock < 0) { iBlock = columnBlock[iColumn]; } else if (iBlock != columnBlock[iColumn]) { // join two blocks int jBlock = columnBlock[iColumn]; numberGoodBlocks--; // Increase count of iBlock rowBlock[iBlock] += rowBlock[jBlock]; rowBlock[jBlock] = 0; // First column of block jBlock int jColumn = whichRow[jBlock]; while (jColumn >= 0) { columnBlock[jColumn] = iBlock; iColumn = jColumn; jColumn = whichColumn[jColumn]; } whichColumn[iColumn] = whichRow[iBlock]; whichRow[iBlock] = whichRow[jBlock]; whichRow[jBlock] = -1; } } } int n = static_cast< int >(end - start); // If not in block - then start one if (iBlock < 0) { // unless null row if (n) { iBlock = numberBlocks; numberBlocks++; numberGoodBlocks++; int jColumn = column[start]; columnBlock[jColumn] = iBlock; whichRow[iBlock] = jColumn; numberMarkedColumns += n; rowBlock[iBlock] = n; for (CoinBigIndex j = start + 1; j < end; j++) { int iColumn = column[j]; columnBlock[iColumn] = iBlock; whichColumn[jColumn] = iColumn; jColumn = iColumn; } } else { rowBlock[numberRows]++; } } else { // add all to this block if not already in int jColumn = whichRow[iBlock]; for (CoinBigIndex j = start; j < end; j++) { int iColumn = column[j]; if (columnBlock[iColumn] < 0) { numberMarkedColumns++; rowBlock[iBlock]++; columnBlock[iColumn] = iBlock; whichColumn[iColumn] = jColumn; jColumn = iColumn; } } whichRow[iBlock] = jColumn; } #if 0 { int nn=0; int * temp = new int [numberRows]; CoinZeroN(temp,numberRows); for (int i=0;i=0) { nn++; assert (iBlock=0) { n++; jColumn = whichColumn[jColumn]; } assert (n==temp[i]); } delete [] temp; } #endif rowsDone++; if (iBlock >= 0) maximumInBlock = CoinMax(maximumInBlock, rowBlock[iBlock]); if (rowsDone >= checkAfterRows) { assert(numberGoodBlocks > 0); double averageSize = static_cast< double >(numberMarkedColumns) / static_cast< double >(numberGoodBlocks); #ifndef OSL_WAY double notionalBlocks = static_cast< double >(numberMarkedColumns) / averageSize; if (maximumInBlock < 3 * averageSize && numberGoodBlocks > 2) { if (best * (numberRows - rowsDone) < notionalBlocks) { best = notionalBlocks / static_cast< double >(numberRows - rowsDone); bestRow = kRow; } } #else if (maximumInBlock * 10 < numberColumns * 11 && numberGoodBlocks > 1) { double test = maximumInBlock + 0.0 * averageSize; if (best * static_cast< double >(rowsDone) > test) { best = test / static_cast< double >(rowsDone); bestRow = kRow; bestRowsDone = rowsDone; } } #endif } } #ifndef OSL_WAY best2[iWay] = best; #else if (bestRowsDone < numberRows) best2[iWay] = -(numberRows - bestRowsDone); else best2[iWay] = -numberRows; #endif row2[iWay] = bestRow; } // mark rows int nMaster; CoinFillN(rowBlock, numberRows, -2); if (best2[2] < best2[0] || best2[2] < best2[1]) { int iRow1; int iRow2; if (best2[0] > best2[1]) { // Bottom rows in master iRow1 = row2[0] + 1; iRow2 = numberRows; } else { // Top rows in master iRow1 = 0; iRow2 = numberRows - row2[1]; } nMaster = iRow2 - iRow1; CoinFillN(rowBlock + iRow1, nMaster, -1); } else { // sorted // Bottom rows in master (in order) int iRow1 = row2[2] + 1; nMaster = numberRows - iRow1; for (int i = iRow1; i < numberRows; i++) rowBlock[stack[i]] = -1; } if (nMaster * 2 > numberRows) { goodDW = false; sprintf(generalPrint, "%d rows out of %d would be in master - no good", nMaster, numberRows); handler_->message(COIN_GENERAL_WARNING, messages_) << generalPrint << CoinMessageEol; delete[] rowBlock; delete[] columnBlock; delete[] whichRow; delete[] whichColumn; delete[] stack; CoinModel model(numberRows, numberColumns, &matrix, rowLower, rowUpper, columnLower, columnUpper, objective); model.setObjectiveOffset(objectiveOffset); addBlock("row_master", "column_master", model); return 0; } } else { for (iRow = 0; iRow < numberRows; iRow++) rowBlock[iRow] = -2; if (starts) { for (iRow = starts[0]; iRow < starts[1]; iRow++) rowBlock[iRow] = -1; for (int iBlock = 0; iBlock < maxBlocks; iBlock++) { for (iRow = starts[iBlock + 2]; iRow < starts[iBlock + 3]; iRow++) rowBlock[iRow] = iBlock; } numberBlocks = maxBlocks; CoinFillN(columnBlock, numberColumns, -1); for (iColumn = 0; iColumn < numberColumns; iColumn++) { CoinBigIndex kstart = columnStart[iColumn]; CoinBigIndex kend = columnStart[iColumn] + columnLength[iColumn]; CoinBigIndex j; int jBlock = -1; for (j = kstart; j < kend; j++) { int iRow = row[j]; if (rowBlock[iRow] != -1) { if (jBlock == -1) { jBlock = rowBlock[iRow]; columnBlock[iColumn] = jBlock; } else { assert(rowBlock[iRow] == jBlock); } } } } // these are master rows } else if (numberRows == 105127) { // ken-18 for (iRow = 104976; iRow < numberRows; iRow++) rowBlock[iRow] = -1; } else if (numberRows == 2426) { // ken-7 for (iRow = 2401; iRow < numberRows; iRow++) rowBlock[iRow] = -1; } else if (numberRows == 810) { for (iRow = 81; iRow < 84; iRow++) rowBlock[iRow] = -1; } else if (numberRows == 5418) { for (iRow = 564; iRow < 603; iRow++) rowBlock[iRow] = -1; } else if (numberRows == 10280) { // osa-60 for (iRow = 10198; iRow < 10280; iRow++) rowBlock[iRow] = -1; } else if (numberRows == 1503) { // degen3 for (iRow = 0; iRow < 561; iRow++) rowBlock[iRow] = -1; } else if (numberRows == 929) { // czprob for (iRow = 0; iRow < 39; iRow++) rowBlock[iRow] = -1; } else if (numberRows == 33874) { // pds-20 for (iRow = 31427; iRow < 33874; iRow++) rowBlock[iRow] = -1; } else if (numberRows == 24902) { // allgrade int kRow = 818; for (iRow = 0; iRow < kRow; iRow++) rowBlock[iRow] = -1; } } if (!starts) { numberBlocks = 0; CoinFillN(columnBlock, numberColumns, -2); } for (iColumn = 0; iColumn < numberColumns; iColumn++) { CoinBigIndex kstart = columnStart[iColumn]; CoinBigIndex kend = columnStart[iColumn] + columnLength[iColumn]; if (columnBlock[iColumn] == -2) { // column not allocated CoinBigIndex j; int nstack = 0; for (j = kstart; j < kend; j++) { int iRow = row[j]; if (rowBlock[iRow] != -1) { assert(rowBlock[iRow] == -2); rowBlock[iRow] = numberBlocks; // mark stack[nstack++] = iRow; } } if (nstack) { // new block - put all connected in numberBlocks++; columnBlock[iColumn] = numberBlocks - 1; while (nstack) { int iRow = stack[--nstack]; CoinBigIndex k; for (k = rowStart[iRow]; k < rowStart[iRow] + rowLength[iRow]; k++) { int iColumn = column[k]; CoinBigIndex kkstart = columnStart[iColumn]; CoinBigIndex kkend = kkstart + columnLength[iColumn]; if (columnBlock[iColumn] == -2) { columnBlock[iColumn] = numberBlocks - 1; // mark // column not allocated CoinBigIndex jj; for (jj = kkstart; jj < kkend; jj++) { int jRow = row[jj]; if (rowBlock[jRow] == -2) { rowBlock[jRow] = numberBlocks - 1; stack[nstack++] = jRow; } } } else { assert(columnBlock[iColumn] == numberBlocks - 1); } } } } else { // Only in master columnBlock[iColumn] = -1; } } } delete[] stack; int numberMasterRows = 0; for (iRow = 0; iRow < numberRows; iRow++) { int iBlock = rowBlock[iRow]; if (iBlock == -1) numberMasterRows++; } int numberMasterColumns = 0; for (iColumn = 0; iColumn < numberColumns; iColumn++) { int iBlock = columnBlock[iColumn]; if (iBlock == -1) numberMasterColumns++; } if (numberBlocks <= maxBlocks) sprintf(generalPrint, "%d blocks found - %d rows, %d columns in master", numberBlocks, numberMasterRows, numberMasterColumns); else sprintf(generalPrint, "%d blocks found (reduced to %d) - %d rows, %d columns in master", numberBlocks, maxBlocks, numberMasterRows, numberMasterColumns); handler_->message(COIN_GENERAL_INFO, messages_) << generalPrint << CoinMessageEol; if (numberBlocks) { if (numberBlocks > maxBlocks) { int iBlock; for (iRow = 0; iRow < numberRows; iRow++) { iBlock = rowBlock[iRow]; if (iBlock >= 0) rowBlock[iRow] = iBlock % maxBlocks; } for (iColumn = 0; iColumn < numberColumns; iColumn++) { iBlock = columnBlock[iColumn]; if (iBlock >= 0) columnBlock[iColumn] = iBlock % maxBlocks; } numberBlocks = maxBlocks; } } // make up problems // Create all sub problems // Space for creating double *obj = new double[numberColumns]; double *columnLo = new double[numberColumns]; double *columnUp = new double[numberColumns]; double *rowLo = new double[numberRows]; double *rowUp = new double[numberRows]; // Counts int *rowCount = reinterpret_cast< int * >(rowLo); CoinZeroN(rowCount, numberBlocks); for (int i = 0; i < numberRows; i++) { int iBlock = rowBlock[i]; if (iBlock >= 0) rowCount[iBlock]++; } // allocate empty rows for (int i = 0; i < numberRows; i++) { int iBlock = rowBlock[i]; if (iBlock == -2) { // find block with smallest count int iSmall = -1; int smallest = numberRows; for (int j = 0; j < numberBlocks; j++) { if (rowCount[j] < smallest) { iSmall = j; smallest = rowCount[j]; } } rowBlock[i] = iSmall; rowCount[iSmall]++; } } int *columnCount = reinterpret_cast< int * >(rowUp); CoinZeroN(columnCount, numberBlocks); for (int i = 0; i < numberColumns; i++) { int iBlock = columnBlock[i]; if (iBlock >= 0) columnCount[iBlock]++; } int maximumSize = 0; for (int i = 0; i < numberBlocks; i++) { sprintf(generalPrint, "Block %d has %d rows and %d columns", i, rowCount[i], columnCount[i]); handler_->message(COIN_GENERAL_INFO2, messages_) << generalPrint << CoinMessageEol; int k = 2 * rowCount[i] + columnCount[i]; maximumSize = CoinMax(maximumSize, k); } if (maximumSize * 10 > 4 * (2 * numberRows + numberColumns) && !wantDecomposition) { // No good sprintf(generalPrint, "Doesn't look good"); handler_->message(COIN_GENERAL_WARNING, messages_) << generalPrint << CoinMessageEol; delete[] rowBlock; delete[] columnBlock; delete[] whichRow; delete[] whichColumn; delete[] obj; delete[] columnLo; delete[] columnUp; delete[] rowLo; delete[] rowUp; CoinModel model(numberRows, numberColumns, &matrix, rowLower, rowUpper, columnLower, columnUpper, objective); model.setObjectiveOffset(objectiveOffset); addBlock("row_master", "column_master", model); return 0; } // Name for master so at top addRowBlock(numberMasterRows, "row_master"); // Arrays // get full matrix CoinPackedMatrix fullMatrix = matrix; int numberRow2, numberColumn2; int iBlock; for (iBlock = 0; iBlock < numberBlocks; iBlock++) { char rowName[20]; sprintf(rowName, "row_%d", iBlock); char columnName[20]; sprintf(columnName, "column_%d", iBlock); numberRow2 = 0; numberColumn2 = 0; for (iRow = 0; iRow < numberRows; iRow++) { if (iBlock == rowBlock[iRow]) { rowLo[numberRow2] = rowLower[iRow]; rowUp[numberRow2] = rowUpper[iRow]; whichRow[numberRow2++] = iRow; } } for (iColumn = 0; iColumn < numberColumns; iColumn++) { if (iBlock == columnBlock[iColumn]) { obj[numberColumn2] = objective[iColumn]; columnLo[numberColumn2] = columnLower[iColumn]; columnUp[numberColumn2] = columnUpper[iColumn]; whichColumn[numberColumn2++] = iColumn; } } // Diagonal block CoinPackedMatrix mat(fullMatrix, numberRow2, whichRow, numberColumn2, whichColumn); // make sure correct dimensions mat.setDimensions(numberRow2, numberColumn2); CoinModel *block = new CoinModel(numberRow2, numberColumn2, &mat, rowLo, rowUp, NULL, NULL, NULL); block->setOriginalIndices(whichRow, whichColumn); addBlock(rowName, columnName, block); // takes ownership // and top block numberRow2 = 0; // get top matrix for (iRow = 0; iRow < numberRows; iRow++) { int iBlock = rowBlock[iRow]; if (iBlock == -1) { whichRow[numberRow2++] = iRow; } } CoinPackedMatrix top(fullMatrix, numberRow2, whichRow, numberColumn2, whichColumn); // make sure correct dimensions top.setDimensions(numberRow2, numberColumn2); block = new CoinModel(numberMasterRows, numberColumn2, &top, NULL, NULL, columnLo, columnUp, obj); block->setOriginalIndices(whichRow, whichColumn); addBlock("row_master", columnName, block); // takes ownership } // and master numberRow2 = 0; numberColumn2 = 0; for (iRow = 0; iRow < numberRows; iRow++) { int iBlock = rowBlock[iRow]; if (iBlock == -1) { rowLo[numberRow2] = rowLower[iRow]; rowUp[numberRow2] = rowUpper[iRow]; whichRow[numberRow2++] = iRow; } } for (iColumn = 0; iColumn < numberColumns; iColumn++) { int iBlock = columnBlock[iColumn]; if (iBlock < 0) { obj[numberColumn2] = objective[iColumn]; columnLo[numberColumn2] = columnLower[iColumn]; columnUp[numberColumn2] = columnUpper[iColumn]; whichColumn[numberColumn2++] = iColumn; } } delete[] rowBlock; delete[] columnBlock; CoinPackedMatrix top(fullMatrix, numberRow2, whichRow, numberColumn2, whichColumn); // make sure correct dimensions top.setDimensions(numberRow2, numberColumn2); CoinModel *block = new CoinModel(numberRow2, numberColumn2, &top, rowLo, rowUp, columnLo, columnUp, obj); block->setOriginalIndices(whichRow, whichColumn); addBlock("row_master", "column_master", block); // takes ownership delete[] whichRow; delete[] whichColumn; delete[] obj; delete[] columnLo; delete[] columnUp; delete[] rowLo; delete[] rowUp; } else if (type == 2) { // Try master at beginning and end bool goodBenders = true; // get row copy CoinPackedMatrix rowCopy = matrix; rowCopy.reverseOrdering(); const int *row = matrix.getIndices(); const int *columnLength = matrix.getVectorLengths(); const CoinBigIndex *columnStart = matrix.getVectorStarts(); //const double * elementByColumn = matrix.getElements(); const int *column = rowCopy.getIndices(); const int *rowLength = rowCopy.getVectorLengths(); const CoinBigIndex *rowStart = rowCopy.getVectorStarts(); //const double * elementByRow = rowCopy.getElements(); int numberColumns = matrix.getNumCols(); int *columnBlock = new int[numberColumns + 1]; int iColumn; // Column counts (maybe look at long columns for master) CoinZeroN(columnBlock, numberColumns + 1); for (iColumn = 0; iColumn < numberColumns; iColumn++) { int length = columnLength[iColumn]; columnBlock[length]++; } if (!starts) { for (iColumn = 0; iColumn < numberColumns + 1; iColumn++) { if (columnBlock[iColumn]) { sprintf(generalPrint, "%d columns have %d elements", columnBlock[iColumn], iColumn); handler_->message(COIN_GENERAL_INFO2, messages_) << generalPrint << CoinMessageEol; } } } bool newWay = true; if (maxBlocks > 1000000) { newWay = false; maxBlocks -= 1000000; } // to say if row looked at int numberRows = matrix.getNumRows(); int *rowBlock = new int[numberRows]; int iRow; int *whichRow = new int[numberRows]; int *whichColumn = new int[numberColumns]; int *stack = new int[numberColumns]; if (newWay) { //double best2[3]={COIN_DBL_MAX,COIN_DBL_MAX,COIN_DBL_MAX}; double best2[3] = { 0.0, 0.0, 0.0 }; int column2[3] = { -1, -1, -1 }; // try forward and backward and sorted for (int iWay = 0; iWay < 3; iWay++) { if (iWay == 0) { // forwards for (int i = 0; i < numberColumns; i++) stack[i] = i; } else if (iWay == 1) { // backwards for (int i = 0; i < numberColumns; i++) stack[i] = numberColumns - 1 - i; } else { // sparsest first for (int i = 0; i < numberColumns; i++) { columnBlock[i] = columnLength[i]; stack[i] = i; } CoinSort_2(columnBlock, columnBlock + numberColumns, stack); } CoinFillN(columnBlock, numberColumns, -1); columnBlock[numberColumns] = 0; CoinFillN(whichColumn, numberColumns, -1); CoinFillN(rowBlock, numberRows, -1); CoinFillN(whichRow, numberRows, -1); int numberMarkedRows = 0; numberBlocks = 0; int bestColumn = -1; int maximumInBlock = 0; int columnsDone = 0; int checkAfterColumns = (5 * numberColumns) / 10 + 1; #ifdef OSL_WAY double best = COIN_DBL_MAX; int bestColumnsDone = -1; #else double best = 0.0; //COIN_DBL_MAX; #endif int numberGoodBlocks = 0; for (int kColumn = 0; kColumn < numberColumns; kColumn++) { iColumn = stack[kColumn]; CoinBigIndex start = columnStart[iColumn]; CoinBigIndex end = start + columnLength[iColumn]; int iBlock = -1; for (CoinBigIndex j = start; j < end; j++) { int iRow = row[j]; if (rowBlock[iRow] >= 0) { // already marked if (iBlock < 0) { iBlock = rowBlock[iRow]; } else if (iBlock != rowBlock[iRow]) { // join two blocks int jBlock = rowBlock[iRow]; numberGoodBlocks--; // Increase count of iBlock columnBlock[iBlock] += columnBlock[jBlock]; columnBlock[jBlock] = 0; // First row of block jBlock int jRow = whichColumn[jBlock]; while (jRow >= 0) { rowBlock[jRow] = iBlock; iRow = jRow; jRow = whichRow[jRow]; } whichRow[iRow] = whichColumn[iBlock]; whichColumn[iBlock] = whichColumn[jBlock]; whichColumn[jBlock] = -1; } } } int n = static_cast< int >(end - start); // If not in block - then start one if (iBlock < 0) { // unless null column if (n) { iBlock = numberBlocks; numberBlocks++; numberGoodBlocks++; int jRow = row[start]; rowBlock[jRow] = iBlock; whichColumn[iBlock] = jRow; numberMarkedRows += n; columnBlock[iBlock] = n; for (CoinBigIndex j = start + 1; j < end; j++) { int iRow = row[j]; rowBlock[iRow] = iBlock; whichRow[jRow] = iRow; jRow = iRow; } } else { columnBlock[numberColumns]++; } } else { // add all to this block if not already in int jRow = whichColumn[iBlock]; for (CoinBigIndex j = start; j < end; j++) { int iRow = row[j]; if (rowBlock[iRow] < 0) { numberMarkedRows++; columnBlock[iBlock]++; rowBlock[iRow] = iBlock; whichRow[iRow] = jRow; jRow = iRow; } } whichColumn[iBlock] = jRow; } columnsDone++; if (iBlock >= 0) maximumInBlock = CoinMax(maximumInBlock, columnBlock[iBlock]); if (columnsDone >= checkAfterColumns) { assert(numberGoodBlocks > 0); double averageSize = static_cast< double >(numberMarkedRows) / static_cast< double >(numberGoodBlocks); #ifndef OSL_WAY double notionalBlocks = static_cast< double >(numberMarkedRows) / averageSize; if (maximumInBlock < 3 * averageSize && numberGoodBlocks > 2) { if (best * (numberColumns - columnsDone) < notionalBlocks) { best = notionalBlocks / static_cast< double >(numberColumns - columnsDone); bestColumn = kColumn; } } #else if (maximumInBlock * 10 < numberRows * 11 && numberGoodBlocks > 1) { double test = maximumInBlock + 0.0 * averageSize; if (best * static_cast< double >(columnsDone) > test) { best = test / static_cast< double >(columnsDone); bestColumn = kColumn; bestColumnsDone = columnsDone; } } #endif } } #ifndef OSL_WAY best2[iWay] = best; #else if (bestColumnsDone < numberColumns) best2[iWay] = -(numberColumns - bestColumnsDone); else best2[iWay] = -numberColumns; #endif column2[iWay] = bestColumn; } // mark columns int nMaster; CoinFillN(columnBlock, numberColumns, -2); if (best2[2] < best2[0] || best2[2] < best2[1]) { int iColumn1; int iColumn2; if (best2[0] > best2[1]) { // End columns in master iColumn1 = column2[0] + 1; iColumn2 = numberColumns; } else { // Beginning columns in master iColumn1 = 0; iColumn2 = numberColumns - column2[1]; } nMaster = iColumn2 - iColumn1; CoinFillN(columnBlock + iColumn1, nMaster, -1); } else { // sorted // End columns in master (in order) int iColumn1 = column2[2] + 1; nMaster = numberColumns - iColumn1; for (int i = iColumn1; i < numberColumns; i++) columnBlock[stack[i]] = -1; } if (nMaster * 2 > numberColumns) { goodBenders = false; sprintf(generalPrint, "%d columns out of %d would be in master - no good", nMaster, numberColumns); handler_->message(COIN_GENERAL_WARNING, messages_) << generalPrint << CoinMessageEol; delete[] rowBlock; delete[] columnBlock; delete[] whichRow; delete[] whichColumn; delete[] stack; CoinModel model(numberRows, numberColumns, &matrix, rowLower, rowUpper, columnLower, columnUpper, objective); model.setObjectiveOffset(objectiveOffset); addBlock("row_master", "column_master", model); return 0; } } else { for (iColumn = 0; iColumn < numberColumns; iColumn++) columnBlock[iColumn] = -2; if (starts) { for (iColumn = starts[0]; iColumn < starts[1]; iColumn++) columnBlock[iColumn] = -1; for (int iBlock = 0; iBlock < maxBlocks; iBlock++) { for (iColumn = starts[iBlock + 2]; iColumn < starts[iBlock + 3]; iColumn++) columnBlock[iColumn] = iBlock; } numberBlocks = maxBlocks; CoinFillN(rowBlock, numberRows, -1); for (iRow = 0; iRow < numberRows; iRow++) { CoinBigIndex kstart = rowStart[iRow]; CoinBigIndex kend = rowStart[iRow] + rowLength[iRow]; CoinBigIndex j; int jBlock = -1; for (j = kstart; j < kend; j++) { int iColumn = column[j]; if (columnBlock[iColumn] != -1) { if (jBlock == -1) { jBlock = columnBlock[iColumn]; rowBlock[iRow] = jBlock; } else { assert(columnBlock[iColumn] == jBlock); } } } } // these are master columns } else if (numberColumns == 2426) { // ken-7 dual for (iColumn = 2401; iColumn < numberColumns; iColumn++) columnBlock[iColumn] = -1; } else if (numberColumns == 10193) { // stormG2-8 for (iColumn = 0; iColumn < 121; iColumn++) columnBlock[iColumn] = -1; } else if (numberColumns == 157496) { // stormG2-125 for (iColumn = 0; iColumn < 121; iColumn++) columnBlock[iColumn] = -1; } else if (numberColumns == 1259121) { // stormG2_1000 for (iColumn = 0; iColumn < 121; iColumn++) columnBlock[iColumn] = -1; } } if (!starts) { numberBlocks = 0; CoinFillN(rowBlock, numberRows, -2); } for (iRow = 0; iRow < numberRows; iRow++) { CoinBigIndex kstart = rowStart[iRow]; CoinBigIndex kend = rowStart[iRow] + rowLength[iRow]; if (rowBlock[iRow] == -2) { // row not allocated CoinBigIndex j; int nstack = 0; for (j = kstart; j < kend; j++) { int iColumn = column[j]; if (columnBlock[iColumn] != -1) { assert(columnBlock[iColumn] == -2); columnBlock[iColumn] = numberBlocks; // mark stack[nstack++] = iColumn; } } if (nstack) { // new block - put all connected in numberBlocks++; rowBlock[iRow] = numberBlocks - 1; while (nstack) { int iColumn = stack[--nstack]; CoinBigIndex k; for (k = columnStart[iColumn]; k < columnStart[iColumn] + columnLength[iColumn]; k++) { int iRow = row[k]; CoinBigIndex kkstart = rowStart[iRow]; CoinBigIndex kkend = kkstart + rowLength[iRow]; if (rowBlock[iRow] == -2) { rowBlock[iRow] = numberBlocks - 1; // mark // row not allocated CoinBigIndex jj; for (jj = kkstart; jj < kkend; jj++) { int jColumn = column[jj]; if (columnBlock[jColumn] == -2) { columnBlock[jColumn] = numberBlocks - 1; stack[nstack++] = jColumn; } } } else { assert(rowBlock[iRow] == numberBlocks - 1); } } } } else { // Only in master rowBlock[iRow] = -1; } } } delete[] stack; int numberMasterColumns = 0; for (iColumn = 0; iColumn < numberColumns; iColumn++) { int iBlock = columnBlock[iColumn]; if (iBlock == -1) numberMasterColumns++; } int numberMasterRows = 0; for (iRow = 0; iRow < numberRows; iRow++) { int iBlock = rowBlock[iRow]; if (iBlock == -1) numberMasterRows++; } if (numberBlocks <= maxBlocks) sprintf(generalPrint, "%d blocks found - %d columns, %d rows in master", numberBlocks, numberMasterColumns, numberMasterRows); else sprintf(generalPrint, "%d blocks found (reduced to %d) - %d columns, %d rows in master", numberBlocks, maxBlocks, numberMasterColumns, numberMasterRows); handler_->message(COIN_GENERAL_INFO, messages_) << generalPrint << CoinMessageEol; if (numberBlocks) { if (numberBlocks > maxBlocks) { int iBlock; for (iColumn = 0; iColumn < numberColumns; iColumn++) { iBlock = columnBlock[iColumn]; if (iBlock >= 0) columnBlock[iColumn] = iBlock % maxBlocks; } for (iRow = 0; iRow < numberRows; iRow++) { iBlock = rowBlock[iRow]; if (iBlock >= 0) rowBlock[iRow] = iBlock % maxBlocks; } numberBlocks = maxBlocks; } } // make up problems // Create all sub problems // Space for creating double *obj = new double[numberColumns]; double *rowLo = new double[numberRows]; double *rowUp = new double[numberRows]; double *columnLo = new double[numberColumns]; double *columnUp = new double[numberColumns]; // Counts int *columnCount = reinterpret_cast< int * >(columnLo); CoinZeroN(columnCount, numberBlocks); for (int i = 0; i < numberColumns; i++) { int iBlock = columnBlock[i]; if (iBlock >= 0) columnCount[iBlock]++; } // allocate empty columns for (int i = 0; i < numberColumns; i++) { int iBlock = columnBlock[i]; if (iBlock == -2) { // find block with smallest count int iSmall = -1; int smallest = numberColumns; for (int j = 0; j < numberBlocks; j++) { if (columnCount[j] < smallest) { iSmall = j; smallest = columnCount[j]; } } columnBlock[i] = iSmall; columnCount[iSmall]++; } } int *rowCount = reinterpret_cast< int * >(columnUp); CoinZeroN(rowCount, numberBlocks); for (int i = 0; i < numberRows; i++) { int iBlock = rowBlock[i]; if (iBlock >= 0) rowCount[iBlock]++; } int maximumSize = 0; for (int i = 0; i < numberBlocks; i++) { sprintf(generalPrint, "Block %d has %d columns and %d rows", i, columnCount[i], rowCount[i]); handler_->message(COIN_GENERAL_INFO2, messages_) << generalPrint << CoinMessageEol; int k = 2 * columnCount[i] + rowCount[i]; maximumSize = CoinMax(maximumSize, k); } if ((maximumSize * 10 > 4 * (2 * numberColumns + numberRows) || numberMasterRows * 10 > numberRows) && !wantDecomposition) { // No good sprintf(generalPrint, "Doesn't look good"); handler_->message(COIN_GENERAL_WARNING, messages_) << generalPrint << CoinMessageEol; delete[] rowBlock; delete[] columnBlock; delete[] whichRow; delete[] whichColumn; delete[] obj; delete[] columnLo; delete[] columnUp; delete[] rowLo; delete[] rowUp; #if 0 CoinModel model(numberRows,numberColumns,&matrix, rowLower, rowUpper, columnLower,columnUpper,objective); model.setObjectiveOffset(objectiveOffset); addBlock("row_master","column_master",model); #endif return 0; } // Name for master so at beginning addColumnBlock(numberMasterColumns, "column_master"); // Arrays // get full matrix CoinPackedMatrix fullMatrix = matrix; int numberRow2, numberColumn2; int iBlock; for (iBlock = 0; iBlock < numberBlocks; iBlock++) { char rowName[20]; sprintf(rowName, "row_%d", iBlock); char columnName[20]; sprintf(columnName, "column_%d", iBlock); numberRow2 = 0; numberColumn2 = 0; for (iColumn = 0; iColumn < numberColumns; iColumn++) { if (iBlock == columnBlock[iColumn]) { obj[numberColumn2] = objective[iColumn]; columnLo[numberColumn2] = columnLower[iColumn]; columnUp[numberColumn2] = columnUpper[iColumn]; whichColumn[numberColumn2++] = iColumn; } } for (iRow = 0; iRow < numberRows; iRow++) { if (iBlock == rowBlock[iRow]) { rowLo[numberRow2] = rowLower[iRow]; rowUp[numberRow2] = rowUpper[iRow]; whichRow[numberRow2++] = iRow; } } // Diagonal block CoinPackedMatrix mat(fullMatrix, numberRow2, whichRow, numberColumn2, whichColumn); // make sure correct dimensions mat.setDimensions(numberRow2, numberColumn2); CoinModel *block = new CoinModel(numberRow2, numberColumn2, &mat, rowLo, rowUp, columnLo, columnUp, obj); block->setOriginalIndices(whichRow, whichColumn); addBlock(rowName, columnName, block); // takes ownership // and beginning block numberColumn2 = 0; // get beginning matrix for (iColumn = 0; iColumn < numberColumns; iColumn++) { int iBlock = columnBlock[iColumn]; if (iBlock == -1) { whichColumn[numberColumn2++] = iColumn; } } CoinPackedMatrix beginning(fullMatrix, numberRow2, whichRow, numberColumn2, whichColumn); // make sure correct dimensions ********* beginning.setDimensions(numberRow2, numberColumn2); block = new CoinModel(numberRow2, numberMasterColumns, &beginning, NULL, NULL, NULL, NULL, NULL); block->setOriginalIndices(whichRow, whichColumn); addBlock(rowName, "column_master", block); // takes ownership } // and master numberRow2 = 0; numberColumn2 = 0; for (iColumn = 0; iColumn < numberColumns; iColumn++) { int iBlock = columnBlock[iColumn]; if (iBlock == -1) { obj[numberColumn2] = objective[iColumn]; columnLo[numberColumn2] = columnLower[iColumn]; columnUp[numberColumn2] = columnUpper[iColumn]; whichColumn[numberColumn2++] = iColumn; } } for (iRow = 0; iRow < numberRows; iRow++) { int iBlock = rowBlock[iRow]; if (iBlock < 0) { rowLo[numberRow2] = rowLower[iRow]; rowUp[numberRow2] = rowUpper[iRow]; whichRow[numberRow2++] = iRow; } } delete[] rowBlock; delete[] columnBlock; CoinPackedMatrix beginning(fullMatrix, numberRow2, whichRow, numberColumn2, whichColumn); // make sure correct dimensions beginning.setDimensions(numberRow2, numberColumn2); CoinModel *block = new CoinModel(numberRow2, numberColumn2, &beginning, rowLo, rowUp, columnLo, columnUp, obj); block->setOriginalIndices(whichRow, whichColumn); addBlock("row_master", "column_master", block); // takes ownership delete[] whichRow; delete[] whichColumn; delete[] obj; delete[] columnLo; delete[] columnUp; delete[] rowLo; delete[] rowUp; } else { abort(); } return numberBlocks; } /* Decompose a CoinModel 1 - try D-W 2 - try Benders 3 - try Staircase Returns number of blocks or zero if no structure */ int CoinStructuredModel::decompose(const CoinModel &coinModel, int type, int maxBlocks, const char **starts) { const CoinPackedMatrix *matrix = coinModel.packedMatrix(); assert(matrix != NULL); // Arrays const double *objective = coinModel.objectiveArray(); const double *columnLower = coinModel.columnLowerArray(); const double *columnUpper = coinModel.columnUpperArray(); const double *rowLower = coinModel.rowLowerArray(); const double *rowUpper = coinModel.rowUpperArray(); int *blockStarts = NULL; char generalPrint[200]; bool wantDecomposition = maxBlocks > 1; // flag to say we really want it decomposed int numberTotal = coinModel.numberColumns() + coinModel.numberRows(); if (maxBlocks < 2 || 2 * maxBlocks > numberTotal) { // allow at least 400 per problem maxBlocks = (numberTotal + 399) / 400; // but gate at 8 and 1000 maxBlocks = CoinMax(8, CoinMin(maxBlocks, 1000)); sprintf(generalPrint, "Trying for %d blocks", maxBlocks); handler_->message(COIN_GENERAL_INFO, messages_) << generalPrint << CoinMessageEol; } if (starts) { assert(type < 3); // maxBlocks is number of blocks // first two are master - then starts // master at beginning or end blockStarts = new int[maxBlocks + 3]; if (type == 2) { // column names int numberColumns = coinModel.numberColumns(); // Do master block int iColumn; for (iColumn = 0; iColumn < numberColumns; iColumn++) { if (!strcmp(starts[0], coinModel.getColumnName(iColumn))) break; } if (iColumn == numberColumns) { sprintf(generalPrint, "Unable to find start of master block %s", starts[0]); handler_->message(COIN_GENERAL_WARNING, messages_) << generalPrint << CoinMessageEol; delete[] blockStarts; return 0; } if (iColumn == 0) { blockStarts[0] = 0; blockStarts[1] = -1; } else { blockStarts[0] = iColumn; blockStarts[1] = numberColumns; } int nBlocks = 2; for (int iBlock = 1; iBlock < maxBlocks + 1; iBlock++) { for (iColumn = 0; iColumn < numberColumns; iColumn++) { if (!strcmp(starts[iBlock], coinModel.getColumnName(iColumn))) break; } if (iColumn == numberColumns) { sprintf(generalPrint, "Unable to find start of block %d %s", iBlock, starts[iBlock]); handler_->message(COIN_GENERAL_WARNING, messages_) << generalPrint << CoinMessageEol; delete[] blockStarts; return 0; } if (nBlocks == 2 && blockStarts[1] == -1) blockStarts[1] = iColumn - 1; blockStarts[nBlocks++] = iColumn; } if (blockStarts[1] == numberColumns) blockStarts[nBlocks++] = blockStarts[0]; else blockStarts[nBlocks++] = numberColumns; } else { // row names int numberRows = coinModel.numberRows(); // Do master block int iRow; for (iRow = 0; iRow < numberRows; iRow++) { if (!strcmp(starts[0], coinModel.getRowName(iRow))) break; } if (iRow == numberRows) { sprintf(generalPrint, "Unable to find start of master block %s", starts[0]); handler_->message(COIN_GENERAL_WARNING, messages_) << generalPrint << CoinMessageEol; delete[] blockStarts; return 0; } if (iRow == 0) { blockStarts[0] = 0; blockStarts[1] = -1; } else { blockStarts[0] = iRow; blockStarts[1] = numberRows; } int nBlocks = 2; for (int iBlock = 1; iBlock < maxBlocks + 1; iBlock++) { for (iRow = 0; iRow < numberRows; iRow++) { if (!strcmp(starts[iBlock], coinModel.getRowName(iRow))) break; } if (iRow == numberRows) { sprintf(generalPrint, "Unable to find start of block %d %s", iBlock, starts[iBlock]); handler_->message(COIN_GENERAL_WARNING, messages_) << generalPrint << CoinMessageEol; delete[] blockStarts; return 0; } if (nBlocks == 2 && blockStarts[1] == -1) blockStarts[1] = iRow - 1; blockStarts[nBlocks++] = iRow; } if (blockStarts[1] == numberRows) blockStarts[nBlocks++] = blockStarts[0]; else blockStarts[nBlocks++] = numberRows; } } if (wantDecomposition) type += 10; int nBlocks = decompose(*matrix, rowLower, rowUpper, columnLower, columnUpper, objective, type, maxBlocks, blockStarts, coinModel.objectiveOffset()); delete[] blockStarts; return nBlocks; } // Read SMPS model int CoinStructuredModel::readSmps(const char *filename, bool keepNames, bool ignoreErrors) { abort(); return 0; } // Return block corresponding to row and column const CoinBaseModel * CoinStructuredModel::block(int row, int column) const { const CoinBaseModel *block = NULL; if (blockType_) { for (int iBlock = 0; iBlock < numberElementBlocks_; iBlock++) { if (blockType_[iBlock].rowBlock == row && blockType_[iBlock].columnBlock == column) { block = blocks_[iBlock]; break; } } } return block; } // Return block corresponding to row and column as CoinModel const CoinBaseModel * CoinStructuredModel::coinBlock(int row, int column) const { const CoinModel *block = NULL; if (blockType_) { for (int iBlock = 0; iBlock < numberElementBlocks_; iBlock++) { if (blockType_[iBlock].rowBlock == row && blockType_[iBlock].columnBlock == column) { block = dynamic_cast< CoinModel * >(blocks_[iBlock]); assert(block); break; } } } return block; } /* Fill pointers corresponding to row and column. False if any missing */ CoinModelBlockInfo CoinStructuredModel::block(int row, int column, const double *&rowLower, const double *&rowUpper, const double *&columnLower, const double *&columnUpper, const double *&objective) const { CoinModelBlockInfo info; //memset(&info,0,sizeof(info)); rowLower = NULL; rowUpper = NULL; columnLower = NULL; columnUpper = NULL; objective = NULL; if (blockType_) { for (int iBlock = 0; iBlock < numberElementBlocks_; iBlock++) { CoinModel *thisBlock = coinBlock(iBlock); if (blockType_[iBlock].rowBlock == row) { if (blockType_[iBlock].rhs) { info.rhs = 1; rowLower = thisBlock->rowLowerArray(); rowUpper = thisBlock->rowUpperArray(); } } if (blockType_[iBlock].columnBlock == column) { if (blockType_[iBlock].bounds) { info.bounds = 1; columnLower = thisBlock->columnLowerArray(); columnUpper = thisBlock->columnUpperArray(); objective = thisBlock->objectiveArray(); } } } } return info; } // Return block number corresponding to row and column int CoinStructuredModel::blockIndex(int row, int column) const { int block = -1; if (blockType_) { for (int iBlock = 0; iBlock < numberElementBlocks_; iBlock++) { if (blockType_[iBlock].rowBlock == row && blockType_[iBlock].columnBlock == column) { block = iBlock; break; } } } return block; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinWarmStartVector.cpp0000644000175200017520000000063013414454441020202 0ustar coincoin/* $Id: CoinWarmStartVector.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2003, International Business Machines // Corporation and others. All Rights Reserved. // This lack of code is licensed under the terms of the Eclipse Public License // (EPL). /* Code crammed into CoinWarmStartVector.hpp at r923, 080110. -- lh, 110103 -- */ /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveSingleton.hpp0000644000175200017520000000546413414454441020574 0ustar coincoin/* $Id: CoinPresolveSingleton.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolveSingleton_H #define CoinPresolveSingleton_H #define SLACK_DOUBLETON 2 #define SLACK_SINGLETON 8 /*! \file */ //const int MAX_SLACK_DOUBLETONS = 1000; /*! \class slack_doubleton_action \brief Convert an explicit bound constraint to a column bound This transform looks for explicit bound constraints for a variable and transfers the bound to the appropriate column bound array. The constraint is removed from the constraint system. */ class slack_doubleton_action : public CoinPresolveAction { struct action { double clo; double cup; double rlo; double rup; double coeff; int col; int row; }; const int nactions_; const action *const actions_; slack_doubleton_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } public: const char *name() const { return ("slack_doubleton_action"); } /*! \brief Convert explicit bound constraints to column bounds. Not now There is a hard limit (#MAX_SLACK_DOUBLETONS) on the number of constraints processed in a given call. \p notFinished is set to true if candidates remain. */ static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next, bool ¬Finished); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~slack_doubleton_action() { deleteAction(actions_, action *); } }; /*! \class slack_singleton_action \brief For variables with one entry If we have a variable with one entry and no cost then we can transform the row from E to G etc. If there is a row objective region then we may be able to do this even with a cost. */ class slack_singleton_action : public CoinPresolveAction { struct action { double clo; double cup; double rlo; double rup; double coeff; int col; int row; }; const int nactions_; const action *const actions_; slack_singleton_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } public: const char *name() const { return ("slack_singleton_action"); } static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next, double *rowObjective); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~slack_singleton_action() { deleteAction(actions_, action *); } }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPackedVectorBase.hpp0000644000175200017520000002234613414454441020255 0ustar coincoin/* $Id: CoinPackedVectorBase.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPackedVectorBase_H #define CoinPackedVectorBase_H #include #include #include "CoinPragma.hpp" #include "CoinError.hpp" class CoinPackedVector; /** Abstract base class for various sparse vectors. Since this class is abstract, no object of this type can be created. The sole purpose of this class is to provide access to a constant packed vector. All members of this class are const methods, they can't change the object. */ class CoinPackedVectorBase { public: /**@name Virtual methods that the derived classes must provide */ //@{ /// Get length of indices and elements vectors virtual int getNumElements() const = 0; /// Get indices of elements virtual const int *getIndices() const = 0; /// Get element values virtual const double *getElements() const = 0; //@} /**@name Methods related to whether duplicate-index checking is performed. If the checking for duplicate indices is turned off, then some CoinPackedVector methods may not work correctly if there are duplicate indices. Turning off the checking for duplicate indices may result in better run time performance. */ //@{ /** \brief Set to the argument value whether to test for duplicate indices in the vector whenever they can occur. Calling this method with \p test set to true will trigger an immediate check for duplicate indices. */ void setTestForDuplicateIndex(bool test) const; /** \brief Set to the argument value whether to test for duplicate indices in the vector whenever they can occur BUT we know that right now the vector has no duplicate indices. Calling this method with \p test set to true will not trigger an immediate check for duplicate indices; instead, it's assumed that the result of the test will be true. */ void setTestForDuplicateIndexWhenTrue(bool test) const; /** Returns true if the vector should be tested for duplicate indices when they can occur. */ bool testForDuplicateIndex() const { return testForDuplicateIndex_; } /// Just sets test stuff false without a try etc inline void setTestsOff() const { testForDuplicateIndex_ = false; testedDuplicateIndex_ = false; } //@} /**@name Methods for getting info on the packed vector as a full vector */ //@{ /** Get the vector as a dense vector. The argument specifies how long this dense vector is.
NOTE: The user needs to delete[] this pointer after it's not needed anymore. */ double *denseVector(int denseSize) const; /** Access the i'th element of the full storage vector. If the i'th is not stored, then zero is returned. The initial use of this method has some computational and storage overhead associated with it.
NOTE: This is very expensive. It is probably much better to use denseVector(). */ double operator[](int i) const; //@} /**@name Index methods */ //@{ /// Get value of maximum index int getMaxIndex() const; /// Get value of minimum index int getMinIndex() const; /// Throw an exception if there are duplicate indices void duplicateIndex(const char *methodName = NULL, const char *className = NULL) const; /** Return true if the i'th element of the full storage vector exists in the packed storage vector.*/ bool isExistingIndex(int i) const; /** Return the position of the i'th element of the full storage vector. If index does not exist then -1 is returned */ int findIndex(int i) const; //@} /**@name Comparison operators on two packed vectors */ //@{ /** Equal. Returns true if vectors have same length and corresponding element of each vector is equal. */ bool operator==(const CoinPackedVectorBase &rhs) const; /// Not equal bool operator!=(const CoinPackedVectorBase &rhs) const; #if 0 // LL: This should be implemented eventually. It is useful to have. /** Lexicographic comparisons of two packed vectors. Returns negative/0/positive depending on whether \c this is smaller/equal.greater than \c rhs */ int lexCompare(const CoinPackedVectorBase& rhs); #endif /** This method establishes an ordering on packed vectors. It is complete ordering, but not the same as lexicographic ordering. However, it is quick and dirty to compute and thus it is useful to keep packed vectors in a heap when all we care is to quickly check whether a particular vector is already in the heap or not. Returns negative/0/positive depending on whether \c this is smaller/equal.greater than \c rhs. */ int compare(const CoinPackedVectorBase &rhs) const; /** equivalent - If shallow packed vector A & B are equivalent, then they are still equivalent no matter how they are sorted. In this method the FloatEqual function operator can be specified. The default equivalence test is that the entries are relatively equal.
NOTE: This is a relatively expensive method as it sorts the two shallow packed vectors. */ template < class FloatEqual > bool isEquivalent(const CoinPackedVectorBase &rhs, const FloatEqual &eq) const { if (getNumElements() != rhs.getNumElements()) return false; duplicateIndex("equivalent", "CoinPackedVector"); rhs.duplicateIndex("equivalent", "CoinPackedVector"); std::map< int, double > mv; const int *inds = getIndices(); const double *elems = getElements(); int i; for (i = getNumElements() - 1; i >= 0; --i) { mv.insert(std::make_pair(inds[i], elems[i])); } std::map< int, double > mvRhs; inds = rhs.getIndices(); elems = rhs.getElements(); for (i = getNumElements() - 1; i >= 0; --i) { mvRhs.insert(std::make_pair(inds[i], elems[i])); } std::map< int, double >::const_iterator mvI = mv.begin(); std::map< int, double >::const_iterator mvIlast = mv.end(); std::map< int, double >::const_iterator mvIrhs = mvRhs.begin(); while (mvI != mvIlast) { if (mvI->first != mvIrhs->first || !eq(mvI->second, mvIrhs->second)) return false; ++mvI; ++mvIrhs; } return true; } bool isEquivalent(const CoinPackedVectorBase &rhs) const; //@} /**@name Arithmetic operators. */ //@{ /// Create the dot product with a full vector double dotProduct(const double *dense) const; /// Return the 1-norm of the vector double oneNorm() const; /// Return the square of the 2-norm of the vector double normSquare() const; /// Return the 2-norm of the vector double twoNorm() const; /// Return the infinity-norm of the vector double infNorm() const; /// Sum elements of vector. double sum() const; //@} protected: /**@name Constructors, destructor NOTE: All constructors are protected. There's no need to expose them, after all, this is an abstract class. */ //@{ /** Default constructor. */ CoinPackedVectorBase(); public: /** Destructor */ virtual ~CoinPackedVectorBase(); //@} private: /**@name Disabled methods */ //@{ /** The copy constructor.
This must be at least protected, but we make it private. The reason is that when, say, a shallow packed vector is created, first the underlying class, it this one is constructed. However, at that point we don't know how much of the data members of this class we need to copy over. Therefore the copy constructor is not used. */ CoinPackedVectorBase(const CoinPackedVectorBase &); /** This class provides const access to packed vectors, so there's no need to provide an assignment operator. */ CoinPackedVectorBase &operator=(const CoinPackedVectorBase &); //@} protected: /**@name Protected methods */ //@{ /// Find Maximum and Minimum Indices void findMaxMinIndices() const; /// Return indexSetPtr_ (create it if necessary). std::set< int > *indexSet(const char *methodName = NULL, const char *className = NULL) const; /// Delete the indexSet void clearIndexSet() const; void clearBase() const; void copyMaxMinIndex(const CoinPackedVectorBase &x) const { maxIndex_ = x.maxIndex_; minIndex_ = x.minIndex_; } //@} private: /**@name Protected member data */ //@{ /// Contains max index value or -infinity mutable int maxIndex_; /// Contains minimum index value or infinity mutable int minIndex_; /** Store the indices in a set. This set is only created if it is needed. Its primary use is testing for duplicate indices. */ mutable std::set< int > *indexSetPtr_; /** True if the vector should be tested for duplicate indices when they can occur. */ mutable bool testForDuplicateIndex_; /** True if the vector has already been tested for duplicate indices. Most of the operations in CoinPackedVector preserves this flag. */ mutable bool testedDuplicateIndex_; //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinModelUseful.hpp0000644000175200017520000002677113414454441017342 0ustar coincoin/* $Id: CoinModelUseful.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinModelUseful_H #define CoinModelUseful_H #include #include #include #include #include #include #include #include "CoinTypes.hpp" #include "CoinPragma.hpp" /** This is for various structures/classes needed by CoinModel. CoinModelLink CoinModelLinkedList CoinModelHash */ /// for going through row or column class CoinModelLink { public: /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinModelLink(); /** Destructor */ ~CoinModelLink(); //@} /**@name Copy method */ //@{ /** The copy constructor. */ CoinModelLink(const CoinModelLink &); /// = CoinModelLink &operator=(const CoinModelLink &); //@} /**@name Sets and gets method */ //@{ /// Get row inline int row() const { return row_; } /// Get column inline int column() const { return column_; } /// Get value inline double value() const { return value_; } /// Get value inline double element() const { return value_; } /// Get position inline CoinBigIndex position() const { return position_; } /// Get onRow inline bool onRow() const { return onRow_; } /// Set row inline void setRow(int row) { row_ = row; } /// Set column inline void setColumn(int column) { column_ = column; } /// Set value inline void setValue(double value) { value_ = value; } /// Set value inline void setElement(double value) { value_ = value; } /// Set position inline void setPosition(CoinBigIndex position) { position_ = position; } /// Set onRow inline void setOnRow(bool onRow) { onRow_ = onRow; } //@} private: /**@name Data members */ //@{ /// Row int row_; /// Column int column_; /// Value as double double value_; /// Position in data CoinBigIndex position_; /// If on row chain bool onRow_; //@} }; /// for linked lists // for specifying triple typedef struct { // top bit is nonzero if string // rest is row unsigned int row; //CoinModelRowIndex row; int column; double value; // If string then index into strings } CoinModelTriple; inline int rowInTriple(const CoinModelTriple &triple) { return triple.row & 0x7fffffff; } inline void setRowInTriple(CoinModelTriple &triple, int iRow) { triple.row = iRow | (triple.row & 0x80000000); } inline bool stringInTriple(const CoinModelTriple &triple) { return (triple.row & 0x80000000) != 0; } inline void setStringInTriple(CoinModelTriple &triple, bool string) { triple.row = (string ? 0x80000000 : 0) | (triple.row & 0x7fffffff); } inline void setRowAndStringInTriple(CoinModelTriple &triple, int iRow, bool string) { triple.row = (string ? 0x80000000 : 0) | iRow; } /// for names and hashing // for hashing typedef struct { int index, next; } CoinModelHashLink; typedef struct { CoinBigIndex index, next; } CoinModelHashLink2; /* Function type. */ typedef double (*func_t)(double); /// For string evaluation /* Data type for links in the chain of symbols. */ struct symrec { char *name; /* name of symbol */ int type; /* type of symbol: either VAR or FNCT */ union { double var; /* value of a VAR */ func_t fnctptr; /* value of a FNCT */ } value; struct symrec *next; /* link field */ }; typedef struct symrec symrec; class CoinYacc { private: CoinYacc(const CoinYacc &rhs); CoinYacc &operator=(const CoinYacc &rhs); public: CoinYacc() : symtable(NULL) , symbuf(NULL) , length(0) , unsetValue(0) { } ~CoinYacc() { if (length) { free(symbuf); symbuf = NULL; } symrec *s = symtable; while (s) { free(s->name); symtable = s; s = s->next; free(symtable); } } public: symrec *symtable; char *symbuf; int length; double unsetValue; }; class CoinModelHash { public: /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinModelHash(); /** Destructor */ ~CoinModelHash(); //@} /**@name Copy method */ //@{ /** The copy constructor. */ CoinModelHash(const CoinModelHash &); /// = CoinModelHash &operator=(const CoinModelHash &); //@} /**@name sizing (just increases) */ //@{ /// Resize hash (also re-hashs) void resize(int maxItems, bool forceReHash = false); /// Number of items i.e. rows if just row names inline int numberItems() const { return numberItems_; } /// Set number of items void setNumberItems(int number); /// Maximum number of items inline int maximumItems() const { return maximumItems_; } /// Names inline const char *const *names() const { return names_; } //@} /**@name hashing */ //@{ /// Returns index or -1 int hash(const char *name) const; /// Adds to hash void addHash(int index, const char *name); /// Deletes from hash void deleteHash(int index); /// Returns name at position (or NULL) const char *name(int which) const; /// Returns non const name at position (or NULL) char *getName(int which) const; /// Sets name at position (does not create) void setName(int which, char *name); /// Validates void validateHash() const; private: /// Returns a hash value int hashValue(const char *name) const; public: //@} private: /**@name Data members */ //@{ /// Names char **names_; /// hash CoinModelHashLink *hash_; /// Number of items int numberItems_; /// Maximum number of items int maximumItems_; /// Last slot looked at int lastSlot_; //@} }; /// For int,int hashing class CoinModelHash2 { public: /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinModelHash2(); /** Destructor */ ~CoinModelHash2(); //@} /**@name Copy method */ //@{ /** The copy constructor. */ CoinModelHash2(const CoinModelHash2 &); /// = CoinModelHash2 &operator=(const CoinModelHash2 &); //@} /**@name sizing (just increases) */ //@{ /// Resize hash (also re-hashs) void resize(CoinBigIndex maxItems, const CoinModelTriple *triples, bool forceReHash = false); /// Number of items inline CoinBigIndex numberItems() const { return numberItems_; } /// Set number of items void setNumberItems(CoinBigIndex number); /// Maximum number of items inline CoinBigIndex maximumItems() const { return maximumItems_; } //@} /**@name hashing */ //@{ /// Returns index or -1 CoinBigIndex hash(int row, int column, const CoinModelTriple *triples) const; /// Adds to hash void addHash(CoinBigIndex index, int row, int column, const CoinModelTriple *triples); /// Deletes from hash void deleteHash(CoinBigIndex index, int row, int column); private: /// Returns a hash value CoinBigIndex hashValue(int row, int column) const; public: //@} private: /**@name Data members */ //@{ /// hash CoinModelHashLink2 *hash_; /// Number of items CoinBigIndex numberItems_; /// Maximum number of items CoinBigIndex maximumItems_; /// Last slot looked at CoinBigIndex lastSlot_; //@} }; class CoinModelLinkedList { public: /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinModelLinkedList(); /** Destructor */ ~CoinModelLinkedList(); //@} /**@name Copy method */ //@{ /** The copy constructor. */ CoinModelLinkedList(const CoinModelLinkedList &); /// = CoinModelLinkedList &operator=(const CoinModelLinkedList &); //@} /**@name sizing (just increases) */ //@{ /** Resize list - for row list maxMajor is maximum rows. */ void resize(int maxMajor, CoinBigIndex maxElements); /** Create list - for row list maxMajor is maximum rows. type 0 row list, 1 column list */ void create(int maxMajor, CoinBigIndex maxElements, int numberMajor, int numberMinor, int type, CoinBigIndex numberElements, const CoinModelTriple *triples); /// Number of major items i.e. rows if just row links inline int numberMajor() const { return numberMajor_; } /// Maximum number of major items i.e. rows if just row links inline int maximumMajor() const { return maximumMajor_; } /// Number of elements inline CoinBigIndex numberElements() const { return numberElements_; } /// Maximum number of elements inline CoinBigIndex maximumElements() const { return maximumElements_; } /// First on free chain inline CoinBigIndex firstFree() const { return first_[maximumMajor_]; } /// Last on free chain inline CoinBigIndex lastFree() const { return last_[maximumMajor_]; } /// First on chain inline CoinBigIndex first(int which) const { return first_[which]; } /// Last on chain inline CoinBigIndex last(int which) const { return last_[which]; } /// Next array inline const CoinBigIndex *next() const { return next_; } /// Previous array inline const CoinBigIndex *previous() const { return previous_; } //@} /**@name does work */ //@{ /** Adds to list - easy case i.e. add row to row list Returns where chain starts */ CoinBigIndex addEasy(int majorIndex, CoinBigIndex numberOfElements, const int *indices, const double *elements, CoinModelTriple *triples, CoinModelHash2 &hash); /** Adds to list - hard case i.e. add row to column list */ void addHard(int minorIndex, CoinBigIndex numberOfElements, const int *indices, const double *elements, CoinModelTriple *triples, CoinModelHash2 &hash); /** Adds to list - hard case i.e. add row to column list This is when elements have been added to other copy */ void addHard(CoinBigIndex first, const CoinModelTriple *triples, CoinBigIndex firstFree, CoinBigIndex lastFree, const CoinBigIndex *nextOther); /** Deletes from list - same case i.e. delete row from row list */ void deleteSame(int which, CoinModelTriple *triples, CoinModelHash2 &hash, bool zapTriples); /** Deletes from list - other case i.e. delete row from column list This is when elements have been deleted from other copy */ void updateDeleted(int which, CoinModelTriple *triples, CoinModelLinkedList &otherList); /** Deletes one element from Row list */ void deleteRowOne(CoinBigIndex position, CoinModelTriple *triples, CoinModelHash2 &hash); /** Update column list for one element when one element deleted from row copy */ void updateDeletedOne(CoinBigIndex position, const CoinModelTriple *triples); /// Fills first,last with -1 void fill(int first, int last); /** Puts in free list from other list */ void synchronize(CoinModelLinkedList &other); /// Checks that links are consistent void validateLinks(const CoinModelTriple *triples) const; //@} private: /**@name Data members */ //@{ /// Previous - maximumElements long CoinBigIndex *previous_; /// Next - maximumElements long CoinBigIndex *next_; /// First - maximumMajor+1 long (last free element chain) CoinBigIndex *first_; /// Last - maximumMajor+1 long (last free element chain) CoinBigIndex *last_; /// Number of major items i.e. rows if just row links int numberMajor_; /// Maximum number of major items i.e. rows if just row links int maximumMajor_; /// Number of elements CoinBigIndex numberElements_; /// Maximum number of elements CoinBigIndex maximumElements_; /// 0 row list, 1 column list int type_; //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveDupcol.hpp0000644000175200017520000001421713414454441020054 0ustar coincoin/* $Id: CoinPresolveDupcol.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolveDupcol_H #define CoinPresolveDupcol_H #include "CoinPresolveMatrix.hpp" /*! \file */ #define DUPCOL 10 /*! \class dupcol_action \brief Detect and remove duplicate columns The general technique is to sum the coefficients a_(*,j) of each column. Columns with identical sums are duplicates. The obvious problem is that, e.g., [1 0 1 0] and [0 1 0 1] both add to 2. To minimize the chances of false positives, the coefficients of each row are multipled by a random number r_i, so that we sum r_i*a_ij. Candidate columns are checked to confirm they are identical. Where the columns have the same objective coefficient, the two are combined. If the columns have different objective coefficients, complications ensue. In order to remove the duplicate, it must be possible to fix the variable at a bound. */ class dupcol_action : public CoinPresolveAction { dupcol_action(); dupcol_action(const dupcol_action &rhs); dupcol_action &operator=(const dupcol_action &rhs); struct action { double thislo; double thisup; double lastlo; double lastup; int ithis; int ilast; double *colels; int nincol; }; const int nactions_; // actions_ is owned by the class and must be deleted at destruction const action *const actions_; dupcol_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~dupcol_action(); }; /*! \class duprow_action \brief Detect and remove duplicate rows The algorithm to detect duplicate rows is as outlined for dupcol_action. If the feasible interval for one constraint is strictly contained in the other, the tighter (contained) constraint is kept. If the feasible intervals are disjoint, the problem is infeasible. If the feasible intervals overlap, both constraints are kept. duprow_action is definitely a work in progress; #postsolve is unimplemented. This doesn't matter as it uses useless_constraint. */ class duprow_action : public CoinPresolveAction { struct action { int row; double lbound; double ubound; }; const int nactions_; const action *const actions_; duprow_action() : CoinPresolveAction(NULL) , nactions_(0) , actions_(NULL) { } duprow_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; //~duprow_action() { delete[]actions_; } }; class duprow3_action : public CoinPresolveAction { struct action { int row; double lbound; double ubound; }; const int nactions_; const action *const actions_; duprow3_action() : CoinPresolveAction(NULL) , nactions_(0) , actions_(NULL) { } duprow3_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; //~duprow_action() { delete[]actions_; } }; /*! \class gubrow_action \brief Detect and remove entries whose sum is known If we have an equality row where all entries same then For other rows where all entries for that equality row are same then we can delete entries and modify rhs gubrow_action is definitely a work in progress; #postsolve is unimplemented. */ class gubrow_action : public CoinPresolveAction { struct action { double rhs; // last is row itself int *deletedRow; double *rowels; int *indices; // indices in gub row int nDrop; int ninrow; }; const int nactions_; const action *const actions_; //gubrow_action():CoinPresolveAction(NULL),nactions_(0),actions_(NULL) {} gubrow_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~gubrow_action(); }; /*! \class twoxtwo_action \brief Detect interesting 2 by 2 blocks If a variable has two entries and for each row there are only two entries with same other variable then we can get rid of one constraint and modify costs. This is a work in progress - I need more examples */ class twoxtwo_action : public CoinPresolveAction { struct action { double lbound_row; double ubound_row; double lbound_col; double ubound_col; double cost_col; double cost_othercol; int row; int col; int othercol; }; const int nactions_; const action *const actions_; twoxtwo_action() : CoinPresolveAction(NULL) , nactions_(0) , actions_(NULL) { } twoxtwo_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; ~twoxtwo_action() { delete[] actions_; } }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveIsolated.hpp0000644000175200017520000000272613414454441020374 0ustar coincoin/* $Id: CoinPresolveIsolated.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolveIsolated_H #define CoinPresolveIsolated_H #include "CoinPresolveMatrix.hpp" class isolated_constraint_action : public CoinPresolveAction { isolated_constraint_action(); isolated_constraint_action(const isolated_constraint_action &rhs); isolated_constraint_action &operator=(const isolated_constraint_action &rhs); double rlo_; double rup_; int row_; int ninrow_; // the arrays are owned by the class and must be deleted at destruction const int *rowcols_; const double *rowels_; const double *costs_; isolated_constraint_action(double rlo, double rup, int row, int ninrow, const int *rowcols, const double *rowels, const double *costs, const CoinPresolveAction *next) : CoinPresolveAction(next) , rlo_(rlo) , rup_(rup) , row_(row) , ninrow_(ninrow) , rowcols_(rowcols) , rowels_(rowels) , costs_(costs) { } public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, int row, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~isolated_constraint_action(); }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinHelperFunctions.hpp0000644000175200017520000007521513414454441020223 0ustar coincoin/* $Id: CoinHelperFunctions.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinHelperFunctions_H #define CoinHelperFunctions_H #include "CoinUtilsConfig.h" #if defined(_MSC_VER) #include #include #define getcwd _getcwd #include #else #include #endif //#define USE_MEMCPY #include #include #include #include "CoinTypes.hpp" #include "CoinError.hpp" // Compilers can produce better code if they know about __restrict #ifndef COIN_RESTRICT #ifdef COIN_USE_RESTRICT #define COIN_RESTRICT __restrict #else #define COIN_RESTRICT #endif #endif //############################################################################# /** This helper function copies an array to another location using Duff's device (for a speedup of ~2). The arrays are given by pointers to their first entries and by the size of the source array. Overlapping arrays are handled correctly. */ template < class T > inline void CoinCopyN(const T *from, const CoinBigIndex size, T *to) { if (size == 0 || from == to) return; #ifndef NDEBUG if (size < 0) throw CoinError("trying to copy negative number of entries", "CoinCopyN", ""); #endif CoinBigIndex n = (size + 7) / 8; if (to > from) { const T *downfrom = from + size; T *downto = to + size; // Use Duff's device to copy switch (size % 8) { case 0: do { *--downto = *--downfrom; case 7: *--downto = *--downfrom; case 6: *--downto = *--downfrom; case 5: *--downto = *--downfrom; case 4: *--downto = *--downfrom; case 3: *--downto = *--downfrom; case 2: *--downto = *--downfrom; case 1: *--downto = *--downfrom; } while (--n > 0); } } else { // Use Duff's device to copy --from; --to; switch (size % 8) { case 0: do { *++to = *++from; case 7: *++to = *++from; case 6: *++to = *++from; case 5: *++to = *++from; case 4: *++to = *++from; case 3: *++to = *++from; case 2: *++to = *++from; case 1: *++to = *++from; } while (--n > 0); } } } //----------------------------------------------------------------------------- /** This helper function copies an array to another location using Duff's device (for a speedup of ~2). The source array is given by its first and "after last" entry; the target array is given by its first entry. Overlapping arrays are handled correctly. All of the various CoinCopyN variants use an int for size. On 64-bit architectures, the address diff last-first will be a 64-bit quantity. Given that everything else uses an int, I'm going to choose to kick the difference down to int. -- lh, 100823 -- */ template < class T > inline void CoinCopy(const T *first, const T *last, T *to) { CoinCopyN(first, static_cast< CoinBigIndex >(last - first), to); } //----------------------------------------------------------------------------- /** This helper function copies an array to another location. The two arrays must not overlap (otherwise an exception is thrown). For speed 8 entries are copied at a time. The arrays are given by pointers to their first entries and by the size of the source array. Note JJF - the speed claim seems to be false on IA32 so I have added CoinMemcpyN which can be used for atomic data */ template < class T > inline void CoinDisjointCopyN(const T *from, const CoinBigIndex size, T *to) { #ifndef _MSC_VER if (size == 0 || from == to) return; #ifndef NDEBUG if (size < 0) throw CoinError("trying to copy negative number of entries", "CoinDisjointCopyN", ""); #endif #if 0 /* There is no point to do this test. If to and from are from different blocks then dist is undefined, so this can crash correct code. It's better to trust the user that the arrays are really disjoint. */ const long dist = to - from; if (-size < dist && dist < size) throw CoinError("overlapping arrays", "CoinDisjointCopyN", ""); #endif for (CoinBigIndex n = size / 8; n > 0; --n, from += 8, to += 8) { to[0] = from[0]; to[1] = from[1]; to[2] = from[2]; to[3] = from[3]; to[4] = from[4]; to[5] = from[5]; to[6] = from[6]; to[7] = from[7]; } switch (size % 8) { case 7: to[6] = from[6]; case 6: to[5] = from[5]; case 5: to[4] = from[4]; case 4: to[3] = from[3]; case 3: to[2] = from[2]; case 2: to[1] = from[1]; case 1: to[0] = from[0]; case 0: break; } #else CoinCopyN(from, size, to); #endif } //----------------------------------------------------------------------------- /** This helper function copies an array to another location. The two arrays must not overlap (otherwise an exception is thrown). For speed 8 entries are copied at a time. The source array is given by its first and "after last" entry; the target array is given by its first entry. */ template < class T > inline void CoinDisjointCopy(const T *first, const T *last, T *to) { CoinDisjointCopyN(first, static_cast< CoinBigIndex >(last - first), to); } //----------------------------------------------------------------------------- /*! \brief Return an array of length \p size filled with input from \p array, or null if \p array is null. */ template < class T > inline T * CoinCopyOfArray(const T *array, const CoinBigIndex size) { if (array) { T *arrayNew = new T[size]; std::memcpy(arrayNew, array, size * sizeof(T)); return arrayNew; } else { return NULL; } } /*! \brief Return an array of length \p size filled with first copySize from \p array, or null if \p array is null. */ template < class T > inline T * CoinCopyOfArrayPartial(const T *array, const CoinBigIndex size, const CoinBigIndex copySize) { if (array || size) { T *arrayNew = new T[size]; assert(copySize <= size); std::memcpy(arrayNew, array, copySize * sizeof(T)); return arrayNew; } else { return NULL; } } /*! \brief Return an array of length \p size filled with input from \p array, or filled with (scalar) \p value if \p array is null */ template < class T > inline T * CoinCopyOfArray(const T *array, const CoinBigIndex size, T value) { T *arrayNew = new T[size]; if (array) { std::memcpy(arrayNew, array, size * sizeof(T)); } else { CoinBigIndex i; for (i = 0; i < size; i++) arrayNew[i] = value; } return arrayNew; } /*! \brief Return an array of length \p size filled with input from \p array, or filled with zero if \p array is null */ template < class T > inline T * CoinCopyOfArrayOrZero(const T *array, const CoinBigIndex size) { T *arrayNew = new T[size]; if (array) { std::memcpy(arrayNew, array, size * sizeof(T)); } else { std::memset(arrayNew, 0, size * sizeof(T)); } return arrayNew; } //----------------------------------------------------------------------------- /** This helper function copies an array to another location. The two arrays must not overlap (otherwise an exception is thrown). For speed 8 entries are copied at a time. The arrays are given by pointers to their first entries and by the size of the source array. Note JJF - the speed claim seems to be false on IA32 so I have added alternative coding if USE_MEMCPY defined*/ #ifndef COIN_USE_RESTRICT template < class T > inline void CoinMemcpyN(const T *from, const CoinBigIndex size, T *to) { #ifndef _MSC_VER #ifdef USE_MEMCPY // Use memcpy - seems a lot faster on Intel with gcc #ifndef NDEBUG // Some debug so check if (size < 0) throw CoinError("trying to copy negative number of entries", "CoinMemcpyN", ""); #if 0 /* There is no point to do this test. If to and from are from different blocks then dist is undefined, so this can crash correct code. It's better to trust the user that the arrays are really disjoint. */ const long dist = to - from; if (-size < dist && dist < size) throw CoinError("overlapping arrays", "CoinMemcpyN", ""); #endif #endif std::memcpy(to, from, size * sizeof(T)); #else if (size == 0 || from == to) return; #ifndef NDEBUG if (size < 0) throw CoinError("trying to copy negative number of entries", "CoinMemcpyN", ""); #endif #if 0 /* There is no point to do this test. If to and from are from different blocks then dist is undefined, so this can crash correct code. It's better to trust the user that the arrays are really disjoint. */ const long dist = to - from; if (-size < dist && dist < size) throw CoinError("overlapping arrays", "CoinMemcpyN", ""); #endif for (CoinBigIndex n = size / 8; n > 0; --n, from += 8, to += 8) { to[0] = from[0]; to[1] = from[1]; to[2] = from[2]; to[3] = from[3]; to[4] = from[4]; to[5] = from[5]; to[6] = from[6]; to[7] = from[7]; } switch (size % 8) { case 7: to[6] = from[6]; case 6: to[5] = from[5]; case 5: to[4] = from[4]; case 4: to[3] = from[3]; case 3: to[2] = from[2]; case 2: to[1] = from[1]; case 1: to[0] = from[0]; case 0: break; } #endif #else CoinCopyN(from, size, to); #endif } #else template < class T > inline void CoinMemcpyN(const T *COIN_RESTRICT from, CoinBigIndex size, T *COIN_RESTRICT to) { #ifdef USE_MEMCPY std::memcpy(to, from, size * sizeof(T)); #else T *COIN_RESTRICT put = to; const T *COIN_RESTRICT get = from; for (; 0 < size; --size) *put++ = *get++; #endif } #endif //----------------------------------------------------------------------------- /** This helper function copies an array to another location. The two arrays must not overlap (otherwise an exception is thrown). For speed 8 entries are copied at a time. The source array is given by its first and "after last" entry; the target array is given by its first entry. */ template < class T > inline void CoinMemcpy(const T *first, const T *last, T *to) { CoinMemcpyN(first, static_cast< CoinBigIndex >(last - first), to); } //############################################################################# /** This helper function fills an array with a given value. For speed 8 entries are filled at a time. The array is given by a pointer to its first entry and its size. Note JJF - the speed claim seems to be false on IA32 so I have added CoinZero to allow for memset. */ template < class T > inline void CoinFillN(T *to, const CoinBigIndex size, const T value) { if (size == 0) return; #ifndef NDEBUG if (size < 0) throw CoinError("trying to fill negative number of entries", "CoinFillN", ""); #endif #if 1 for (CoinBigIndex n = size / 8; n > 0; --n, to += 8) { to[0] = value; to[1] = value; to[2] = value; to[3] = value; to[4] = value; to[5] = value; to[6] = value; to[7] = value; } switch (size % 8) { case 7: to[6] = value; case 6: to[5] = value; case 5: to[4] = value; case 4: to[3] = value; case 3: to[2] = value; case 2: to[1] = value; case 1: to[0] = value; case 0: break; } #else // Use Duff's device to fill CoinBigIndex n = (size + 7) / 8; --to; switch (size % 8) { case 0: do { *++to = value; case 7: *++to = value; case 6: *++to = value; case 5: *++to = value; case 4: *++to = value; case 3: *++to = value; case 2: *++to = value; case 1: *++to = value; } while (--n > 0); } #endif } //----------------------------------------------------------------------------- /** This helper function fills an array with a given value. For speed 8 entries are filled at a time. The array is given by its first and "after last" entry. */ template < class T > inline void CoinFill(T *first, T *last, const T value) { CoinFillN(first, last - first, value); } //############################################################################# /** This helper function fills an array with zero. For speed 8 entries are filled at a time. The array is given by a pointer to its first entry and its size. Note JJF - the speed claim seems to be false on IA32 so I have allowed for memset as an alternative */ template < class T > inline void CoinZeroN(T *to, const CoinBigIndex size) { #ifdef USE_MEMCPY // Use memset - seems faster on Intel with gcc #ifndef NDEBUG // Some debug so check if (size < 0) throw CoinError("trying to fill negative number of entries", "CoinZeroN", ""); #endif memset(to, 0, size * sizeof(T)); #else if (size == 0) return; #ifndef NDEBUG if (size < 0) throw CoinError("trying to fill negative number of entries", "CoinZeroN", ""); #endif #if 1 for (CoinBigIndex n = size / 8; n > 0; --n, to += 8) { to[0] = 0; to[1] = 0; to[2] = 0; to[3] = 0; to[4] = 0; to[5] = 0; to[6] = 0; to[7] = 0; } switch (size % 8) { case 7: to[6] = 0; case 6: to[5] = 0; case 5: to[4] = 0; case 4: to[3] = 0; case 3: to[2] = 0; case 2: to[1] = 0; case 1: to[0] = 0; case 0: break; } #else // Use Duff's device to fill CoinBigIndex n = (size + 7) / 8; --to; switch (size % 8) { case 0: do { *++to = 0; case 7: *++to = 0; case 6: *++to = 0; case 5: *++to = 0; case 4: *++to = 0; case 3: *++to = 0; case 2: *++to = 0; case 1: *++to = 0; } while (--n > 0); } #endif #endif } /// This Debug helper function checks an array is all zero inline void CoinCheckDoubleZero(double *to, const CoinBigIndex size) { CoinBigIndex n = 0; for (CoinBigIndex j = 0; j < size; j++) { if (to[j]) n++; } if (n) { printf("array of length %d should be zero has %d nonzero\n", static_cast< int >(size), static_cast< int >(n)); } } /// This Debug helper function checks an array is all zero inline void CoinCheckIntZero(int *to, const CoinBigIndex size) { CoinBigIndex n = 0; for (CoinBigIndex j = 0; j < size; j++) { if (to[j]) n++; } if (n) { printf("array of length %d should be zero has %d nonzero\n", static_cast< int >(size), static_cast< int >(n)); } } //----------------------------------------------------------------------------- /** This helper function fills an array with a given value. For speed 8 entries are filled at a time. The array is given by its first and "after last" entry. */ template < class T > inline void CoinZero(T *first, T *last) { CoinZeroN(first, last - first); } //############################################################################# /** Returns strdup or NULL if original NULL */ inline char *CoinStrdup(const char *name) { char *dup = NULL; if (name) { const int len = static_cast< int >(strlen(name)); dup = static_cast< char * >(malloc(len + 1)); CoinMemcpyN(name, len, dup); dup[len] = 0; } return dup; } //############################################################################# /** Return the larger (according to operator<() of the arguments. This function was introduced because for some reason compiler tend to handle the max() function differently. */ template < class T > inline T CoinMax(const T x1, const T x2) { return (x1 > x2) ? x1 : x2; } //----------------------------------------------------------------------------- /** Return the smaller (according to operator<() of the arguments. This function was introduced because for some reason compiler tend to handle the min() function differently. */ template < class T > inline T CoinMin(const T x1, const T x2) { return (x1 < x2) ? x1 : x2; } //----------------------------------------------------------------------------- /** Return the absolute value of the argument. This function was introduced because for some reason compiler tend to handle the abs() function differently. */ template < class T > inline T CoinAbs(const T value) { return value < 0 ? -value : value; } //############################################################################# /** This helper function tests whether the entries of an array are sorted according to operator<. The array is given by a pointer to its first entry and by its size. */ template < class T > inline bool CoinIsSorted(const T *first, const CoinBigIndex size) { if (size == 0) return true; #ifndef NDEBUG if (size < 0) throw CoinError("negative number of entries", "CoinIsSorted", ""); #endif #if 1 // size1 is the number of comparisons to be made const CoinBigIndex size1 = size - 1; for (CoinBigIndex n = size1 / 8; n > 0; --n, first += 8) { if (first[8] < first[7]) return false; if (first[7] < first[6]) return false; if (first[6] < first[5]) return false; if (first[5] < first[4]) return false; if (first[4] < first[3]) return false; if (first[3] < first[2]) return false; if (first[2] < first[1]) return false; if (first[1] < first[0]) return false; } switch (size1 % 8) { case 7: if (first[7] < first[6]) return false; case 6: if (first[6] < first[5]) return false; case 5: if (first[5] < first[4]) return false; case 4: if (first[4] < first[3]) return false; case 3: if (first[3] < first[2]) return false; case 2: if (first[2] < first[1]) return false; case 1: if (first[1] < first[0]) return false; case 0: break; } #else const T *next = first; const T *last = first + size; for (++next; next != last; first = next, ++next) if (*next < *first) return false; #endif return true; } //----------------------------------------------------------------------------- /** This helper function tests whether the entries of an array are sorted according to operator<. The array is given by its first and "after last" entry. */ template < class T > inline bool CoinIsSorted(const T *first, const T *last) { return CoinIsSorted(first, static_cast< CoinBigIndex >(last - first)); } //############################################################################# /** This helper function fills an array with the values init, init+1, init+2, etc. For speed 8 entries are filled at a time. The array is given by a pointer to its first entry and its size. */ template < class T > inline void CoinIotaN(T *first, const CoinBigIndex size, T init) { if (size == 0) return; #ifndef NDEBUG if (size < 0) throw CoinError("negative number of entries", "CoinIotaN", ""); #endif #if 1 for (CoinBigIndex n = size / 8; n > 0; --n, first += 8, init += 8) { first[0] = init; first[1] = init + 1; first[2] = init + 2; first[3] = init + 3; first[4] = init + 4; first[5] = init + 5; first[6] = init + 6; first[7] = init + 7; } switch (size % 8) { case 7: first[6] = init + 6; case 6: first[5] = init + 5; case 5: first[4] = init + 4; case 4: first[3] = init + 3; case 3: first[2] = init + 2; case 2: first[1] = init + 1; case 1: first[0] = init; case 0: break; } #else // Use Duff's device to fill CoinBigIndex n = (size + 7) / 8; --first; --init; switch (size % 8) { case 0: do { *++first = ++init; case 7: *++first = ++init; case 6: *++first = ++init; case 5: *++first = ++init; case 4: *++first = ++init; case 3: *++first = ++init; case 2: *++first = ++init; case 1: *++first = ++init; } while (--n > 0); } #endif } //----------------------------------------------------------------------------- /** This helper function fills an array with the values init, init+1, init+2, etc. For speed 8 entries are filled at a time. The array is given by its first and "after last" entry. */ template < class T > inline void CoinIota(T *first, const T *last, T init) { CoinIotaN(first, last - first, init); } //############################################################################# /** This helper function deletes certain entries from an array. The array is given by pointers to its first and "after last" entry (first two arguments). The positions of the entries to be deleted are given in the integer array specified by the last two arguments (again, first and "after last" entry). */ template < class T > inline T * CoinDeleteEntriesFromArray(T *arrayFirst, T *arrayLast, const int *firstDelPos, const int *lastDelPos) { CoinBigIndex delNum = static_cast< CoinBigIndex >(lastDelPos - firstDelPos); if (delNum == 0) return arrayLast; if (delNum < 0) throw CoinError("trying to delete negative number of entries", "CoinDeleteEntriesFromArray", ""); int *delSortedPos = NULL; if (!(CoinIsSorted(firstDelPos, lastDelPos) && std::adjacent_find(firstDelPos, lastDelPos) == lastDelPos)) { // the positions of the to be deleted is either not sorted or not unique delSortedPos = new int[delNum]; CoinDisjointCopy(firstDelPos, lastDelPos, delSortedPos); std::sort(delSortedPos, delSortedPos + delNum); delNum = static_cast< CoinBigIndex >(std::unique(delSortedPos, delSortedPos + delNum) - delSortedPos); } const int *delSorted = delSortedPos ? delSortedPos : firstDelPos; const CoinBigIndex last = delNum - 1; int size = delSorted[0]; for (CoinBigIndex i = 0; i < last; ++i) { const int copyFirst = delSorted[i] + 1; const int copyLast = delSorted[i + 1]; CoinCopy(arrayFirst + copyFirst, arrayFirst + copyLast, arrayFirst + size); size += copyLast - copyFirst; } const int copyFirst = delSorted[last] + 1; const int copyLast = static_cast< int >(arrayLast - arrayFirst); CoinCopy(arrayFirst + copyFirst, arrayFirst + copyLast, arrayFirst + size); size += copyLast - copyFirst; if (delSortedPos) delete[] delSortedPos; return arrayFirst + size; } //############################################################################# #define COIN_OWN_RANDOM_32 #if defined COIN_OWN_RANDOM_32 /* Thanks to Stefano Gliozzi for providing an operating system independent random number generator. */ /*! \brief Return a random number between 0 and 1 A platform-independent linear congruential generator. For a given seed, the generated sequence is always the same regardless of the (32-bit) architecture. This allows to build & test in different environments, getting in most cases the same optimization path. Set \p isSeed to true and supply an integer seed to set the seed (vid. #CoinSeedRandom) \todo Anyone want to volunteer an upgrade for 64-bit architectures? */ inline double CoinDrand48(bool isSeed = false, unsigned int seed = 1) { static unsigned int last = 123456; if (isSeed) { last = seed; } else { last = 1664525 * last + 1013904223; return ((static_cast< double >(last)) / 4294967296.0); } return (0.0); } /// Set the seed for the random number generator inline void CoinSeedRandom(int iseed) { CoinDrand48(true, iseed); } #else // COIN_OWN_RANDOM_32 #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN32__) /// Return a random number between 0 and 1 inline double CoinDrand48() { return rand() / (double)RAND_MAX; } /// Set the seed for the random number generator inline void CoinSeedRandom(int iseed) { srand(iseed + 69822); } #else /// Return a random number between 0 and 1 inline double CoinDrand48() { return drand48(); } /// Set the seed for the random number generator inline void CoinSeedRandom(int iseed) { srand48(iseed + 69822); } #endif #endif // COIN_OWN_RANDOM_32 //############################################################################# /** This function figures out whether file names should contain slashes or backslashes as directory separator */ inline char CoinFindDirSeparator() { int size = 1000; char *buf = 0; while (true) { buf = new char[size]; if (getcwd(buf, size)) break; delete[] buf; buf = 0; size = 2 * size; } // if first char is '/' then it's unix and the dirsep is '/'. otherwise we // assume it's dos and the dirsep is '\' char dirsep = buf[0] == '/' ? '/' : '\\'; delete[] buf; return dirsep; } //############################################################################# inline int CoinStrNCaseCmp(const char *s0, const char *s1, const size_t len) { for (size_t i = 0; i < len; ++i) { if (s0[i] == 0) { return s1[i] == 0 ? 0 : -1; } if (s1[i] == 0) { return 1; } const int c0 = std::tolower(s0[i]); const int c1 = std::tolower(s1[i]); if (c0 < c1) return -1; if (c0 > c1) return 1; } return 0; } //############################################################################# /// Swap the arguments. template < class T > inline void CoinSwap(T &x, T &y) { T t = x; x = y; y = t; } //############################################################################# /** This helper function copies an array to file Returns 0 if OK, 1 if bad write. */ template < class T > inline int CoinToFile(const T *array, CoinBigIndex size, FILE *fp) { CoinBigIndex numberWritten; if (array && size) { numberWritten = static_cast< CoinBigIndex >(fwrite(&size, sizeof(int), 1, fp)); if (numberWritten != 1) return 1; numberWritten = static_cast< CoinBigIndex >(fwrite(array, sizeof(T), size_t(size), fp)); if (numberWritten != size) return 1; } else { size = 0; numberWritten = static_cast< CoinBigIndex >(fwrite(&size, sizeof(int), 1, fp)); if (numberWritten != 1) return 1; } return 0; } //############################################################################# /** This helper function copies an array from file and creates with new. Passed in array is ignored i.e. not deleted. But if NULL and size does not match and newSize 0 then leaves as NULL and 0 Returns 0 if OK, 1 if bad read, 2 if size did not match. */ template < class T > inline int CoinFromFile(T *&array, CoinBigIndex size, FILE *fp, CoinBigIndex &newSize) { CoinBigIndex numberRead; numberRead = static_cast< CoinBigIndex >(fread(&newSize, sizeof(int), 1, fp)); if (numberRead != 1) return 1; int returnCode = 0; if (size != newSize && (newSize || array)) returnCode = 2; if (newSize) { array = new T[newSize]; numberRead = static_cast< CoinBigIndex >(fread(array, sizeof(T), newSize, fp)); if (numberRead != newSize) returnCode = 1; } else { array = NULL; } return returnCode; } //############################################################################# /// Cube Root #if 0 inline double CoinCbrt(double x) { #if defined(_MSC_VER) return pow(x,(1./3.)); #else return cbrt(x); #endif } #endif //----------------------------------------------------------------------------- /// This helper returns "sizeof" as an int #define CoinSizeofAsInt(type) (static_cast< int >(sizeof(type))) /// This helper returns "strlen" as an int inline int CoinStrlenAsInt(const char *string) { return static_cast< int >(strlen(string)); } /** Class for thread specific random numbers */ #if defined COIN_OWN_RANDOM_32 class CoinThreadRandom { public: /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinThreadRandom() { seed_ = 12345678; } /** Constructor wih seed. */ CoinThreadRandom(int seed) { seed_ = seed; } /** Destructor */ ~CoinThreadRandom() {} // Copy CoinThreadRandom(const CoinThreadRandom &rhs) { seed_ = rhs.seed_; } // Assignment CoinThreadRandom &operator=(const CoinThreadRandom &rhs) { if (this != &rhs) { seed_ = rhs.seed_; } return *this; } //@} /**@name Sets/gets */ //@{ /** Set seed. */ inline void setSeed(int seed) { seed_ = seed; } /** Get seed. */ inline unsigned int getSeed() const { return seed_; } /// return a random number inline double randomDouble() const { double retVal; seed_ = 1664525 * (seed_) + 1013904223; retVal = ((static_cast< double >(seed_)) / 4294967296.0); return retVal; } /// make more random (i.e. for startup) inline void randomize(int n = 0) { if (!n) n = seed_ & 255; for (int i = 0; i < n; i++) randomDouble(); } //@} protected: /**@name Data members The data members are protected to allow access for derived classes. */ //@{ /// Current seed mutable unsigned int seed_; //@} }; #else class CoinThreadRandom { public: /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinThreadRandom() { seed_[0] = 50000; seed_[1] = 40000; seed_[2] = 30000; } /** Constructor wih seed. */ CoinThreadRandom(const unsigned short seed[3]) { memcpy(seed_, seed, 3 * sizeof(unsigned short)); } /** Constructor wih seed. */ CoinThreadRandom(int seed) { union { int i[2]; unsigned short int s[4]; } put; put.i[0] = seed; put.i[1] = seed; memcpy(seed_, put.s, 3 * sizeof(unsigned short)); } /** Destructor */ ~CoinThreadRandom() {} // Copy CoinThreadRandom(const CoinThreadRandom &rhs) { memcpy(seed_, rhs.seed_, 3 * sizeof(unsigned short)); } // Assignment CoinThreadRandom &operator=(const CoinThreadRandom &rhs) { if (this != &rhs) { memcpy(seed_, rhs.seed_, 3 * sizeof(unsigned short)); } return *this; } //@} /**@name Sets/gets */ //@{ /** Set seed. */ inline void setSeed(const unsigned short seed[3]) { memcpy(seed_, seed, 3 * sizeof(unsigned short)); } /** Set seed. */ inline void setSeed(int seed) { union { int i[2]; unsigned short int s[4]; } put; put.i[0] = seed; put.i[1] = seed; memcpy(seed_, put.s, 3 * sizeof(unsigned short)); } /// return a random number inline double randomDouble() const { double retVal; #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__CYGWIN32__) retVal = rand(); retVal = retVal / (double)RAND_MAX; #else retVal = erand48(seed_); #endif return retVal; } /// make more random (i.e. for startup) inline void randomize(int n = 0) { if (!n) { n = seed_[0] + seed_[1] + seed_[2]; n &= 255; } for (int i = 0; i < n; i++) randomDouble(); } //@} protected: /**@name Data members The data members are protected to allow access for derived classes. */ //@{ /// Current seed mutable unsigned short seed_[3]; //@} }; #endif #ifndef COIN_DETAIL #define COIN_DETAIL_PRINT(s) \ { \ } #else #define COIN_DETAIL_PRINT(s) s #endif #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveMatrix.hpp0000644000175200017520000017203713414454441020077 0ustar coincoin/* $Id: CoinPresolveMatrix.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolveMatrix_H #define CoinPresolveMatrix_H #include "CoinPragma.hpp" #include "CoinPackedMatrix.hpp" #include "CoinMessage.hpp" #include "CoinTime.hpp" #include #include #include #include #include //# define COIN_PRESOLVE_TUNING 2 #if PRESOLVE_DEBUG > 0 #include "CoinFinite.hpp" #endif /*! \file Declarations for CoinPresolveMatrix and CoinPostsolveMatrix and their common base class CoinPrePostsolveMatrix. Also declarations for CoinPresolveAction and a number of non-member utility functions. */ #if defined(_MSC_VER) // Avoid MS Compiler problem in recognizing type to delete // by casting to type. // Is this still necessary? -- lh, 111202 -- #define deleteAction(array, type) delete[]((type)array) #else #define deleteAction(array, type) delete[] array #endif /* Define PRESOLVE_DEBUG and PRESOLVE_CONSISTENCY on the configure command line or in a Makefile! See comments in CoinPresolvePsdebug.hpp. */ #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #define PRESOLVE_STMT(s) s #define PRESOLVEASSERT(x) \ ((x) ? 1 : ((std::cerr << "FAILED ASSERTION at line " << __LINE__ << ": " #x "\n"), abort(), 0)) inline void DIE(const char *s) { std::cout << s; abort(); } /*! \brief Indicate column or row present at start of postsolve This code is used during postsolve in [cr]done to indicate columns and rows that are present in the presolved system (i.e., present at the start of postsolve processing). \todo There are a bunch of these code definitions, scattered through presolve files. They should be collected in one place. */ #define PRESENT_IN_REDUCED '\377' #else #define PRESOLVEASSERT(x) \ { \ } #define PRESOLVE_STMT(s) \ { \ } inline void DIE(const char *) {} #endif /* Unclear why these are separate from standard debug. */ #ifndef PRESOLVE_DETAIL #define PRESOLVE_DETAIL_PRINT(s) \ { \ } #else #define PRESOLVE_DETAIL_PRINT(s) s #endif /*! \brief Zero tolerance OSL had a fixed zero tolerance; we still use that here. */ const double ZTOLDP = 1e-12; /*! \brief Alternate zero tolerance Use a different one if we are doing doubletons, etc. */ const double ZTOLDP2 = 1e-10; /// The usual finite infinity #define PRESOLVE_INF COIN_DBL_MAX /// And a small infinity #define PRESOLVE_SMALL_INF 1.0e20 /// Check for infinity using finite infinity #define PRESOLVEFINITE(n) (-PRESOLVE_INF < (n) && (n) < PRESOLVE_INF) class CoinPostsolveMatrix; /*! \class CoinPresolveAction \brief Abstract base class of all presolve routines. The details will make more sense after a quick overview of the grand plan: A presolve object is handed a problem object, which it is expected to modify in some useful way. Assuming that it succeeds, the presolve object should create a postsolve object, i.e., an object that contains instructions for backing out the presolve transform to recover the original problem. These postsolve objects are accumulated in a linked list, with each successive presolve action adding its postsolve action to the head of the list. The end result of all this is a presolved problem object, and a list of postsolve objects. The presolved problem object is then handed to a solver for optimization, and the problem object augmented with the results. The list of postsolve objects is then traversed. Each of them (un)modifies the problem object, with the end result being the original problem, augmented with solution information. The problem object representation is CoinPrePostsolveMatrix and subclasses. Check there for details. The \c CoinPresolveAction class and subclasses represent the presolve and postsolve objects. In spite of the name, the only information held in a \c CoinPresolveAction object is the information needed to postsolve (i.e., the information needed to back out the presolve transformation). This information is not expected to change, so the fields are all \c const. A subclass of \c CoinPresolveAction, implementing a specific pre/postsolve action, is expected to declare a static function that attempts to perform a presolve transformation. This function will be handed a CoinPresolveMatrix to transform, and a pointer to the head of the list of postsolve objects. If the transform is successful, the function will create a new \c CoinPresolveAction object, link it at the head of the list of postsolve objects, and return a pointer to the postsolve object it has just created. Otherwise, it should return 0. It is expected that these static functions will be the only things that can create new \c CoinPresolveAction objects; this is expressed by making each subclass' constructor(s) private. Every subclass must also define a \c postsolve method. This function will be handed a CoinPostsolveMatrix to transform. It is the client's responsibility to implement presolve and postsolve driver routines. See OsiPresolve for examples. \note Since the only fields in a \c CoinPresolveAction are \c const, anything one can do with a variable declared \c CoinPresolveAction* can also be done with a variable declared \c const \c CoinPresolveAction* It is expected that all derived subclasses of \c CoinPresolveAction also have this property. */ class CoinPresolveAction { public: /*! \brief Stub routine to throw exceptions. Exceptions are inefficient, particularly with g++. Even with xlC, the use of exceptions adds a long prologue to a routine. Therefore, rather than use throw directly in the routine, I use it in a stub routine. */ static void throwCoinError(const char *error, const char *ps_routine) { throw CoinError(error, ps_routine, "CoinPresolve"); } /*! \brief The next presolve transformation Set at object construction. */ const CoinPresolveAction *next; /*! \brief Construct a postsolve object and add it to the transformation list. This is an `add to head' operation. This object will point to the one passed as the parameter. */ CoinPresolveAction(const CoinPresolveAction *next) : next(next) { } /// modify next (when building rather than passing) inline void setNext(const CoinPresolveAction *nextAction) { next = nextAction; } /*! \brief A name for debug printing. It is expected that the name is not stored in the transform itself. */ virtual const char *name() const = 0; /*! \brief Apply the postsolve transformation for this particular presolve action. */ virtual void postsolve(CoinPostsolveMatrix *prob) const = 0; /*! \brief Virtual destructor. */ virtual ~CoinPresolveAction() {} }; /* These are needed for OSI-aware constructors associated with CoinPrePostsolveMatrix, CoinPresolveMatrix, and CoinPostsolveMatrix. */ class ClpSimplex; class OsiSolverInterface; /* CoinWarmStartBasis is required for methods in CoinPrePostsolveMatrix that accept/return a CoinWarmStartBasis object. */ class CoinWarmStartBasis; /*! \class CoinPrePostsolveMatrix \brief Collects all the information about the problem that is needed in both presolve and postsolve. In a bit more detail, a column-major representation of the constraint matrix and upper and lower bounds on variables and constraints, plus row and column solutions, reduced costs, and status. There's also a set of arrays holding the original row and column numbers. As presolve and postsolve transform the matrix, it will occasionally be necessary to expand the number of entries in a column. There are two aspects:
  • During postsolve, the constraint system is expected to grow as the smaller presolved system is transformed back to the original system.
  • During both pre- and postsolve, transforms can increase the number of coefficients in a row or column. (See the variable substitution, doubleton, and tripleton transforms.)
The first is addressed by the members #ncols0_, #nrows0_, and #nelems0_. These should be set (via constructor parameters) to values large enough for the largest size taken on by the constraint system. Typically, this will be the size of the original constraint system. The second is addressed by a generous allocation of extra (empty) space for the arrays used to hold coefficients and row indices. When columns must be expanded, they are moved into the empty space. When it is used up, the arrays are compacted. When compaction fails to produce sufficient space, presolve/postsolve will fail. CoinPrePostsolveMatrix isn't really intended to be used `bare' --- the expectation is that it'll be used through CoinPresolveMatrix or CoinPostsolveMatrix. Some of the functions needed to load a problem are defined in the derived classes. When CoinPresolve is applied when reoptimising, we need to be prepared to accept a basis and modify it in step with the presolve actions (otherwise we throw away all the advantages of warm start for reoptimization). But other solution components (#acts_, #rowduals_, #sol_, and #rcosts_) are needed only for postsolve, where they're used in places to determine the proper action(s) when restoring rows or columns. If presolve is provided with a solution, it will modify it in step with the presolve actions. Moving the solution components from CoinPrePostsolveMatrix to CoinPostsolveMatrix would break a lot of code. It's not clear that it's worth it, and it would preclude upgrades to the presolve side that might make use of any of these. -- lh, 080501 -- The constructors that take an OSI or ClpSimplex as a parameter really should not be here, but for historical reasons they will likely remain for the forseeable future. -- lh, 111202 -- */ class CoinPrePostsolveMatrix { public: /*! \name Constructors & Destructors */ //@{ /*! \brief `Native' constructor This constructor creates an empty object which must then be loaded. On the other hand, it doesn't assume that the client is an OsiSolverInterface. */ CoinPrePostsolveMatrix(int ncols_alloc, int nrows_alloc, CoinBigIndex nelems_alloc); /*! \brief Generic OSI constructor See OSI code for the definition. */ CoinPrePostsolveMatrix(const OsiSolverInterface *si, int ncols_, int nrows_, CoinBigIndex nelems_); /*! ClpOsi constructor See Clp code for the definition. */ CoinPrePostsolveMatrix(const ClpSimplex *si, int ncols_, int nrows_, CoinBigIndex nelems_, double bulkRatio); /// Destructor ~CoinPrePostsolveMatrix(); //@} /*! \brief Enum for status of various sorts Matches CoinWarmStartBasis::Status and adds superBasic. Most code that converts between CoinPrePostsolveMatrix::Status and CoinWarmStartBasis::Status will break if this correspondence is broken. superBasic is an unresolved problem: there's no analogue in CoinWarmStartBasis::Status. */ enum Status { isFree = 0x00, basic = 0x01, atUpperBound = 0x02, atLowerBound = 0x03, superBasic = 0x04 }; /*! \name Functions to work with variable status Functions to work with the CoinPrePostsolveMatrix::Status enum and related vectors. \todo Why are we futzing around with three bit status? A holdover from the packed arrays of CoinWarmStartBasis? Big swaths of the presolve code manipulates colstat_ and rowstat_ as unsigned char arrays using simple assignment to set values. */ //@{ /// Set row status (i.e., status of artificial for this row) inline void setRowStatus(int sequence, Status status) { unsigned char &st_byte = rowstat_[sequence]; st_byte = static_cast< unsigned char >(st_byte & (~7)); st_byte = static_cast< unsigned char >(st_byte | status); } /// Get row status inline Status getRowStatus(int sequence) const { return static_cast< Status >(rowstat_[sequence] & 7); } /// Check if artificial for this row is basic inline bool rowIsBasic(int sequence) const { return (static_cast< Status >(rowstat_[sequence] & 7) == basic); } /// Set column status (i.e., status of primal variable) inline void setColumnStatus(int sequence, Status status) { unsigned char &st_byte = colstat_[sequence]; st_byte = static_cast< unsigned char >(st_byte & (~7)); st_byte = static_cast< unsigned char >(st_byte | status); #ifdef PRESOLVE_DEBUG switch (status) { case isFree: { if (clo_[sequence] > -PRESOLVE_INF || cup_[sequence] < PRESOLVE_INF) { std::cout << "Bad status: Var " << sequence << " isFree, lb = " << clo_[sequence] << ", ub = " << cup_[sequence] << std::endl; } break; } case basic: { break; } case atUpperBound: { if (cup_[sequence] >= PRESOLVE_INF) { std::cout << "Bad status: Var " << sequence << " atUpperBound, lb = " << clo_[sequence] << ", ub = " << cup_[sequence] << std::endl; } break; } case atLowerBound: { if (clo_[sequence] <= -PRESOLVE_INF) { std::cout << "Bad status: Var " << sequence << " atLowerBound, lb = " << clo_[sequence] << ", ub = " << cup_[sequence] << std::endl; } break; } case superBasic: { if (clo_[sequence] <= -PRESOLVE_INF && cup_[sequence] >= PRESOLVE_INF) { std::cout << "Bad status: Var " << sequence << " superBasic, lb = " << clo_[sequence] << ", ub = " << cup_[sequence] << std::endl; } break; } default: { assert(false); break; } } #endif } /// Get column (structural variable) status inline Status getColumnStatus(int sequence) const { return static_cast< Status >(colstat_[sequence] & 7); } /// Check if column (structural variable) is basic inline bool columnIsBasic(int sequence) const { return (static_cast< Status >(colstat_[sequence] & 7) == basic); } /*! \brief Set status of row (artificial variable) to the correct nonbasic status given bounds and current value */ void setRowStatusUsingValue(int iRow); /*! \brief Set status of column (structural variable) to the correct nonbasic status given bounds and current value */ void setColumnStatusUsingValue(int iColumn); /*! \brief Set column (structural variable) status vector */ void setStructuralStatus(const char *strucStatus, int lenParam); /*! \brief Set row (artificial variable) status vector */ void setArtificialStatus(const char *artifStatus, int lenParam); /*! \brief Set the status of all variables from a basis */ void setStatus(const CoinWarmStartBasis *basis); /*! \brief Get status in the form of a CoinWarmStartBasis */ CoinWarmStartBasis *getStatus(); /*! \brief Return a print string for status of a column (structural variable) */ const char *columnStatusString(int j) const; /*! \brief Return a print string for status of a row (artificial variable) */ const char *rowStatusString(int i) const; //@} /*! \name Functions to load problem and solution information These functions can be used to load portions of the problem definition and solution. See also the CoinPresolveMatrix and CoinPostsolveMatrix classes. */ //@{ /// Set the objective function offset for the original system. void setObjOffset(double offset); /*! \brief Set the objective sense (max/min) Coded as 1.0 for min, -1.0 for max. Yes, there's a method, and a matching attribute. No, you really don't want to set this to maximise. */ void setObjSense(double objSense); /// Set the primal feasibility tolerance void setPrimalTolerance(double primTol); /// Set the dual feasibility tolerance void setDualTolerance(double dualTol); /// Set column lower bounds void setColLower(const double *colLower, int lenParam); /// Set column upper bounds void setColUpper(const double *colUpper, int lenParam); /// Set column solution void setColSolution(const double *colSol, int lenParam); /// Set objective coefficients void setCost(const double *cost, int lenParam); /// Set reduced costs void setReducedCost(const double *redCost, int lenParam); /// Set row lower bounds void setRowLower(const double *rowLower, int lenParam); /// Set row upper bounds void setRowUpper(const double *rowUpper, int lenParam); /// Set row solution void setRowPrice(const double *rowSol, int lenParam); /// Set row activity void setRowActivity(const double *rowAct, int lenParam); //@} /*! \name Functions to retrieve problem and solution information */ //@{ /// Get current number of columns inline int getNumCols() const { return (ncols_); } /// Get current number of rows inline int getNumRows() const { return (nrows_); } /// Get current number of non-zero coefficients inline CoinBigIndex getNumElems() const { return (nelems_); } /// Get column start vector for column-major packed matrix inline const CoinBigIndex *getColStarts() const { return (mcstrt_); } /// Get column length vector for column-major packed matrix inline const int *getColLengths() const { return (hincol_); } /// Get vector of row indices for column-major packed matrix inline const int *getRowIndicesByCol() const { return (hrow_); } /// Get vector of elements for column-major packed matrix inline const double *getElementsByCol() const { return (colels_); } /// Get column lower bounds inline const double *getColLower() const { return (clo_); } /// Get column upper bounds inline const double *getColUpper() const { return (cup_); } /// Get objective coefficients inline const double *getCost() const { return (cost_); } /// Get row lower bounds inline const double *getRowLower() const { return (rlo_); } /// Get row upper bounds inline const double *getRowUpper() const { return (rup_); } /// Get column solution (primal variable values) inline const double *getColSolution() const { return (sol_); } /// Get row activity (constraint lhs values) inline const double *getRowActivity() const { return (acts_); } /// Get row solution (dual variables) inline const double *getRowPrice() const { return (rowduals_); } /// Get reduced costs inline const double *getReducedCost() const { return (rcosts_); } /// Count empty columns inline int countEmptyCols() { int empty = 0; for (int i = 0; i < ncols_; i++) if (hincol_[i] == 0) empty++; return (empty); } //@} /*! \name Message handling */ //@{ /// Return message handler inline CoinMessageHandler *messageHandler() const { return handler_; } /*! \brief Set message handler The client retains responsibility for the handler --- it will not be destroyed with the \c CoinPrePostsolveMatrix object. */ inline void setMessageHandler(CoinMessageHandler *handler) { if (defaultHandler_ == true) { delete handler_; defaultHandler_ = false; } handler_ = handler; } /// Return messages inline CoinMessages messages() const { return messages_; } //@} /*! \name Current and Allocated Size During pre- and postsolve, the matrix will change in size. During presolve it will shrink; during postsolve it will grow. Hence there are two sets of size variables, one for the current size and one for the allocated size. (See the general comments for the CoinPrePostsolveMatrix class for more information.) */ //@{ /// current number of columns int ncols_; /// current number of rows int nrows_; /// current number of coefficients CoinBigIndex nelems_; /// Allocated number of columns int ncols0_; /// Allocated number of rows int nrows0_; /// Allocated number of coefficients CoinBigIndex nelems0_; /*! \brief Allocated size of bulk storage for row indices and coefficients This is the space allocated for hrow_ and colels_. This must be large enough to allow columns to be copied into empty space when they need to be expanded. For efficiency (to minimize the number of times the representation must be compressed) it's recommended that this be at least 2*nelems0_. */ CoinBigIndex bulk0_; /// Ratio of bulk0_ to nelems0_; default is 2. double bulkRatio_; //@} /*! \name Problem representation The matrix is the common column-major format: A pair of vectors with positional correspondence to hold coefficients and row indices, and a second pair of vectors giving the starting position and length of each column in the first pair. */ //@{ /// Vector of column start positions in #hrow_, #colels_ CoinBigIndex *mcstrt_; /// Vector of column lengths int *hincol_; /// Row indices (positional correspondence with #colels_) int *hrow_; /// Coefficients (positional correspondence with #hrow_) double *colels_; /// Objective coefficients double *cost_; /// Original objective offset double originalOffset_; /// Column (primal variable) lower bounds double *clo_; /// Column (primal variable) upper bounds double *cup_; /// Row (constraint) lower bounds double *rlo_; /// Row (constraint) upper bounds double *rup_; /*! \brief Original column numbers Over the current range of column numbers in the presolved problem, the entry for column j will contain the index of the corresponding column in the original problem. */ int *originalColumn_; /*! \brief Original row numbers Over the current range of row numbers in the presolved problem, the entry for row i will contain the index of the corresponding row in the original problem. */ int *originalRow_; /// Primal feasibility tolerance double ztolzb_; /// Dual feasibility tolerance double ztoldj_; /*! \brief Maximization/minimization Yes, there's a variable here. No, you really don't want to set this to maximise. See the main notes for CoinPresolveMatrix. */ double maxmin_; //@} /*! \name Problem solution information The presolve phase will work without any solution information (appropriate for initial optimisation) or with solution information (appropriate for reoptimisation). When solution information is supplied, presolve will maintain it to the best of its ability. #colstat_ is checked to determine the presence/absence of status information. #sol_ is checked for primal solution information, and #rowduals_ for dual solution information. The postsolve phase requires the complete solution information from the presolved problem (status, primal and dual solutions). It will be transformed into a correct solution for the original problem. */ //@{ /*! \brief Vector of primal variable values If #sol_ exists, it is assumed that primal solution information should be updated and that #acts_ also exists. */ double *sol_; /*! \brief Vector of dual variable values If #rowduals_ exists, it is assumed that dual solution information should be updated and that #rcosts_ also exists. */ double *rowduals_; /*! \brief Vector of constraint left-hand-side values (row activity) Produced by evaluating constraints according to #sol_. Updated iff #sol_ exists. */ double *acts_; /*! \brief Vector of reduced costs Produced by evaluating dual constraints according to #rowduals_. Updated iff #rowduals_ exists. */ double *rcosts_; /*! \brief Status of primal variables Coded with CoinPrePostSolveMatrix::Status, one code per char. colstat_ and #rowstat_ MUST be allocated as a single vector. This is to maintain compatibility with ClpPresolve and OsiPresolve, which do it this way. */ unsigned char *colstat_; /*! \brief Status of constraints More accurately, the status of the logical variable associated with the constraint. Coded with CoinPrePostSolveMatrix::Status, one code per char. Note that this must be allocated as a single vector with #colstat_. */ unsigned char *rowstat_; //@} /*! \name Message handling Uses the standard COIN approach: a default handler is installed, and the CoinPrePostsolveMatrix object takes responsibility for it. If the client replaces the handler with one of their own, it becomes their responsibility. */ //@{ /// Message handler CoinMessageHandler *handler_; /// Indicates if the current #handler_ is default (true) or not (false). bool defaultHandler_; /// Standard COIN messages CoinMessage messages_; //@} }; /*! \relates CoinPrePostsolveMatrix \brief Generate a print string for a status code. */ const char *statusName(CoinPrePostsolveMatrix::Status status); /*! \class presolvehlink \brief Links to aid in packed matrix modification Currently, the matrices held by the CoinPrePostsolveMatrix and CoinPresolveMatrix objects are represented in the same way as a CoinPackedMatrix. In the course of presolve and postsolve transforms, it will happen that a major-dimension vector needs to increase in size. In order to check whether there is enough room to add another coefficient in place, it helps to know the next vector (in memory order) in the bulk storage area. To do that, a linked list of major-dimension vectors is maintained; the "pre" and "suc" fields give the previous and next vector, in memory order (that is, the vector whose mcstrt_ or mrstrt_ entry is next smaller or larger). Consider a column-major matrix with ncols columns. By definition, presolvehlink[ncols].pre points to the column in the last occupied position of the bulk storage arrays. There is no easy way to find the column which occupies the first position (there is no presolvehlink[-1] to consult). If the column that initially occupies the first position is moved for expansion, there is no way to reclaim the space until the bulk storage is compacted. The same holds for the last and first rows of a row-major matrix, of course. */ class presolvehlink { public: int pre, suc; }; #define NO_LINK -66666666 /*! \relates presolvehlink \brief unlink vector i Remove vector i from the ordering. */ inline void PRESOLVE_REMOVE_LINK(presolvehlink *link, int i) { int ipre = link[i].pre; int isuc = link[i].suc; if (ipre >= 0) { link[ipre].suc = isuc; } if (isuc >= 0) { link[isuc].pre = ipre; } link[i].pre = NO_LINK, link[i].suc = NO_LINK; } /*! \relates presolvehlink \brief insert vector i after vector j Insert vector i between j and j.suc. */ inline void PRESOLVE_INSERT_LINK(presolvehlink *link, int i, int j) { int isuc = link[j].suc; link[j].suc = i; link[i].pre = j; if (isuc >= 0) { link[isuc].pre = i; } link[i].suc = isuc; } /*! \relates presolvehlink \brief relink vector j in place of vector i Replace vector i in the ordering with vector j. This is equivalent to
     int pre = link[i].pre;
     PRESOLVE_REMOVE_LINK(link,i);
     PRESOLVE_INSERT_LINK(link,j,pre);
   
But, this routine will work even if i happens to be first in the order. */ inline void PRESOLVE_MOVE_LINK(presolvehlink *link, int i, int j) { int ipre = link[i].pre; int isuc = link[i].suc; if (ipre >= 0) { link[ipre].suc = j; } if (isuc >= 0) { link[isuc].pre = j; } link[i].pre = NO_LINK, link[i].suc = NO_LINK; } /*! \class CoinPresolveMatrix \brief Augments CoinPrePostsolveMatrix with information about the problem that is only needed during presolve. For problem manipulation, this class adds a row-major matrix representation, linked lists that allow for easy manipulation of the matrix when applying presolve transforms, and vectors to track row and column processing status (changed, needs further processing, change prohibited) For problem representation, this class adds information about variable type (integer or continuous), an objective offset, and a feasibility tolerance. NOTE that the #anyInteger_ and #anyProhibited_ flags are independent of the vectors used to track this information for individual variables (#integerType_ and #rowChanged_ and #colChanged_, respectively). NOTE also that at the end of presolve the column-major and row-major matrix representations are loosely packed (i.e., there may be gaps between columns in the bulk storage arrays). NOTE that while you might think that CoinPresolve is prepared to handle minimisation or maximisation, it's unlikely that this still works. This is a good thing: better to convert objective coefficients and duals once, before starting presolve, rather than doing it over and over in each transform that considers dual variables. The constructors that take an OSI or ClpSimplex as a parameter really should not be here, but for historical reasons they will likely remain for the forseeable future. -- lh, 111202 -- */ class CoinPresolveMatrix : public CoinPrePostsolveMatrix { public: /*! \brief `Native' constructor This constructor creates an empty object which must then be loaded. On the other hand, it doesn't assume that the client is an OsiSolverInterface. */ CoinPresolveMatrix(int ncols_alloc, int nrows_alloc, CoinBigIndex nelems_alloc); /*! \brief Clp OSI constructor See Clp code for the definition. */ CoinPresolveMatrix(int ncols0, double maxmin, // end prepost members ClpSimplex *si, // rowrep int nrows, CoinBigIndex nelems, bool doStatus, double nonLinearVariable, double bulkRatio); /*! \brief Update the model held by a Clp OSI */ void update_model(ClpSimplex *si, int nrows0, int ncols0, CoinBigIndex nelems0); /*! \brief Generic OSI constructor See OSI code for the definition. */ CoinPresolveMatrix(int ncols0, double maxmin, // end prepost members OsiSolverInterface *si, // rowrep int nrows, CoinBigIndex nelems, bool doStatus, double nonLinearVariable, const char *prohibited, const char *rowProhibited = NULL); /*! \brief Update the model held by a generic OSI */ void update_model(OsiSolverInterface *si, int nrows0, int ncols0, CoinBigIndex nelems0); /// Destructor ~CoinPresolveMatrix(); /*! \brief Initialize a CoinPostsolveMatrix object, destroying the CoinPresolveMatrix object. See CoinPostsolveMatrix::assignPresolveToPostsolve. */ friend void assignPresolveToPostsolve(CoinPresolveMatrix *&preObj); /*! \name Functions to load the problem representation */ //@{ /*! \brief Load the cofficient matrix. Load the coefficient matrix before loading the other vectors (bounds, objective, variable type) required to define the problem. */ void setMatrix(const CoinPackedMatrix *mtx); /// Count number of empty rows inline int countEmptyRows() { int empty = 0; for (int i = 0; i < nrows_; i++) if (hinrow_[i] == 0) empty++; return (empty); } /*! \brief Set variable type information for a single variable Set \p variableType to 0 for continous, 1 for integer. Does not manipulate the #anyInteger_ flag. */ inline void setVariableType(int i, int variableType) { if (integerType_ == 0) integerType_ = new unsigned char[ncols0_]; integerType_[i] = static_cast< unsigned char >(variableType); } /*! \brief Set variable type information for all variables Set \p variableType[i] to 0 for continuous, 1 for integer. Does not manipulate the #anyInteger_ flag. */ void setVariableType(const unsigned char *variableType, int lenParam); /*! \brief Set the type of all variables allIntegers should be true to set the type to integer, false to set the type to continuous. */ void setVariableType(bool allIntegers, int lenParam); /// Set a flag for presence (true) or absence (false) of integer variables inline void setAnyInteger(bool anyInteger = true) { anyInteger_ = anyInteger; } //@} /*! \name Functions to retrieve problem information */ //@{ /// Get row start vector for row-major packed matrix inline const CoinBigIndex *getRowStarts() const { return (mrstrt_); } /// Get vector of column indices for row-major packed matrix inline const int *getColIndicesByRow() const { return (hcol_); } /// Get vector of elements for row-major packed matrix inline const double *getElementsByRow() const { return (rowels_); } /*! \brief Check for integrality of the specified variable. Consults the #integerType_ vector if present; fallback is the #anyInteger_ flag. */ inline bool isInteger(int i) const { if (integerType_ == 0) { return (anyInteger_); } else if (integerType_[i] == 1) { return (true); } else { return (false); } } /*! \brief Check if there are any integer variables Consults the #anyInteger_ flag */ inline bool anyInteger() const { return (anyInteger_); } /// Picks up any special options inline int presolveOptions() const { return presolveOptions_; } /// Sets any special options (see #presolveOptions_) inline void setPresolveOptions(int value) { presolveOptions_ = value; } //@} /*! \name Matrix storage management links Linked lists, modelled after the linked lists used in OSL factorization. They are used for management of the bulk coefficient and minor index storage areas. */ //@{ /// Linked list for the column-major representation. presolvehlink *clink_; /// Linked list for the row-major representation. presolvehlink *rlink_; //@} /// Objective function offset introduced during presolve double dobias_; /// Adjust objective function constant offset inline void change_bias(double change_amount) { dobias_ += change_amount; #if PRESOLVE_DEBUG > 2 assert(fabs(change_amount) < 1.0e50); if (change_amount) PRESOLVE_STMT(printf("changing bias by %g to %g\n", change_amount, dobias_)); #endif } /*! \name Row-major representation Common row-major format: A pair of vectors with positional correspondence to hold coefficients and column indices, and a second pair of vectors giving the starting position and length of each row in the first pair. */ //@{ /// Vector of row start positions in #hcol, #rowels_ CoinBigIndex *mrstrt_; /// Vector of row lengths int *hinrow_; /// Coefficients (positional correspondence with #hcol_) double *rowels_; /// Column indices (positional correspondence with #rowels_) int *hcol_; //@} /// Tracks integrality of columns (1 for integer, 0 for continuous) unsigned char *integerType_; /*! \brief Flag to say if any variables are integer Note that this flag is not manipulated by the various \c setVariableType routines. */ bool anyInteger_; /// Print statistics for tuning bool tuning_; /// Say we want statistics - also set time void statistics(); /// Start time of presolve double startTime_; /// Bounds can be moved by this to retain feasibility double feasibilityTolerance_; /// Return feasibility tolerance inline double feasibilityTolerance() { return (feasibilityTolerance_); } /// Set feasibility tolerance inline void setFeasibilityTolerance(double val) { feasibilityTolerance_ = val; } /*! \brief Output status: 0 = feasible, 1 = infeasible, 2 = unbounded Actually implemented as single bit flags: 1^0 = infeasible, 1^1 = unbounded. */ int status_; /// Returns problem status (0 = feasible, 1 = infeasible, 2 = unbounded) inline int status() { return (status_); } /// Set problem status inline void setStatus(int status) { status_ = (status & 0x3); } /*! \brief Presolve pass number Should be incremented externally by the method controlling application of presolve transforms. Used to control the execution of testRedundant (evoked by the implied_free transform). */ int pass_; /// Set pass number inline void setPass(int pass = 0) { pass_ = pass; } /*! \brief Maximum substitution level Used to control the execution of subst from implied_free */ int maxSubstLevel_; /// Set Maximum substitution level (normally 3) inline void setMaximumSubstitutionLevel(int level) { maxSubstLevel_ = level; } /*! \name Row and column processing status Information used to determine if rows or columns can be changed and if they require further processing due to changes. There are four major lists: the [row,col]ToDo list, and the [row,col]NextToDo list. In general, a transform processes entries from the ToDo list and adds entries to the NextToDo list. There are two vectors, [row,col]Changed, which track the status of individual rows and columns. */ //@{ /*! \brief Column change status information Coded using the following bits:
  • 0x01: Column has changed
  • 0x02: preprocessing prohibited
  • 0x04: Column has been used
  • 0x08: Column originally had infinite ub
*/ unsigned char *colChanged_; /// Input list of columns to process int *colsToDo_; /// Length of #colsToDo_ int numberColsToDo_; /// Output list of columns to process next int *nextColsToDo_; /// Length of #nextColsToDo_ int numberNextColsToDo_; /*! \brief Row change status information Coded using the following bits:
  • 0x01: Row has changed
  • 0x02: preprocessing prohibited
  • 0x04: Row has been used
*/ unsigned char *rowChanged_; /// Input list of rows to process int *rowsToDo_; /// Length of #rowsToDo_ int numberRowsToDo_; /// Output list of rows to process next int *nextRowsToDo_; /// Length of #nextRowsToDo_ int numberNextRowsToDo_; /*! \brief Fine control over presolve actions Set/clear the following bits to allow or suppress actions: - 0x01 allow duplicate column tests for integer variables - 0x02 not used - 0x04 set to inhibit x+y+z=1 mods - 0x08 not used - 0x10 set to allow stuff which won't unroll easily (overlapping duplicate rows; opportunistic fixing of variables from bound propagation). - 0x04000 allow presolve transforms to arbitrarily ignore infeasibility and set arbitrary feasible bounds. - 0x10000 instructs implied_free_action to be `more lightweight'; will return without doing anything after 15 presolve passes. - 0x(2,4,6)0000 instructs implied_free_action to remove small created elements - 0x80000000 set by presolve to say dupcol_action compressed columns */ int presolveOptions_; /*! Flag to say if any rows or columns are marked as prohibited Note that this flag is not manipulated by any of the various \c set*Prohibited routines. */ bool anyProhibited_; //@} /*! \name Scratch work arrays Preallocated work arrays are useful to avoid having to allocate and free work arrays in individual presolve methods. All are allocated from #setMatrix by #initializeStuff, freed from #~CoinPresolveMatrix. You can use #deleteStuff followed by #initializeStuff to remove and recreate them. */ //@{ /// Preallocated scratch work array, 3*nrows_ int *usefulRowInt_; /// Preallocated scratch work array, 2*nrows_ double *usefulRowDouble_; /// Preallocated scratch work array, 2*ncols_ int *usefulColumnInt_; /// Preallocated scratch work array, ncols_ double *usefulColumnDouble_; /// Array of random numbers (max row,column) double *randomNumber_; /// Work array for count of infinite contributions to row lhs upper bound int *infiniteUp_; /// Work array for sum of finite contributions to row lhs upper bound double *sumUp_; /// Work array for count of infinite contributions to row lhs lower bound int *infiniteDown_; /// Work array for sum of finite contributions to row lhs lower bound double *sumDown_; //@} /*! \brief Recompute row lhs bounds Calculate finite contributions to row lhs upper and lower bounds and count infinite contributions. Returns the number of rows found to be infeasible. If \p whichRow < 0, bounds are recomputed for all rows. As of 110611, this seems to be a work in progress in the sense that it's barely used by the existing presolve code. */ int recomputeSums(int whichRow); /// Allocate scratch arrays void initializeStuff(); /// Free scratch arrays void deleteStuff(); /*! \name Functions to manipulate row and column processing status */ //@{ /*! \brief Initialise the column ToDo lists Places all columns in the #colsToDo_ list except for columns marked as prohibited (viz. #colChanged_). */ void initColsToDo(); /*! \brief Step column ToDo lists Moves columns on the #nextColsToDo_ list to the #colsToDo_ list, emptying #nextColsToDo_. Returns the number of columns transferred. */ int stepColsToDo(); /// Return the number of columns on the #colsToDo_ list inline int numberColsToDo() { return (numberColsToDo_); } /// Has column been changed? inline bool colChanged(int i) const { return (colChanged_[i] & 1) != 0; } /// Mark column as not changed inline void unsetColChanged(int i) { colChanged_[i] = static_cast< unsigned char >(colChanged_[i] & (~1)); } /// Mark column as changed. inline void setColChanged(int i) { colChanged_[i] = static_cast< unsigned char >(colChanged_[i] | (1)); } /// Mark column as changed and add to list of columns to process next inline void addCol(int i) { if ((colChanged_[i] & 1) == 0) { colChanged_[i] = static_cast< unsigned char >(colChanged_[i] | (1)); nextColsToDo_[numberNextColsToDo_++] = i; } } /// Test if column is eligible for preprocessing inline bool colProhibited(int i) const { return (colChanged_[i] & 2) != 0; } /*! \brief Test if column is eligible for preprocessing The difference between this method and #colProhibited() is that this method first tests #anyProhibited_ before examining the specific entry for the specified column. */ inline bool colProhibited2(int i) const { if (!anyProhibited_) return false; else return (colChanged_[i] & 2) != 0; } /// Mark column as ineligible for preprocessing inline void setColProhibited(int i) { colChanged_[i] = static_cast< unsigned char >(colChanged_[i] | (2)); } /*! \brief Test if column is marked as used This is for doing faster lookups to see where two columns have entries in common. */ inline bool colUsed(int i) const { return (colChanged_[i] & 4) != 0; } /// Mark column as used inline void setColUsed(int i) { colChanged_[i] = static_cast< unsigned char >(colChanged_[i] | (4)); } /// Mark column as unused inline void unsetColUsed(int i) { colChanged_[i] = static_cast< unsigned char >(colChanged_[i] & (~4)); } /// Has column infinite ub (originally) inline bool colInfinite(int i) const { return (colChanged_[i] & 8) != 0; } /// Mark column as not infinite ub (originally) inline void unsetColInfinite(int i) { colChanged_[i] = static_cast< unsigned char >(colChanged_[i] & (~8)); } /// Mark column as infinite ub (originally) inline void setColInfinite(int i) { colChanged_[i] = static_cast< unsigned char >(colChanged_[i] | (8)); } /*! \brief Initialise the row ToDo lists Places all rows in the #rowsToDo_ list except for rows marked as prohibited (viz. #rowChanged_). */ void initRowsToDo(); /*! \brief Step row ToDo lists Moves rows on the #nextRowsToDo_ list to the #rowsToDo_ list, emptying #nextRowsToDo_. Returns the number of rows transferred. */ int stepRowsToDo(); /// Return the number of rows on the #rowsToDo_ list inline int numberRowsToDo() { return (numberRowsToDo_); } /// Has row been changed? inline bool rowChanged(int i) const { return (rowChanged_[i] & 1) != 0; } /// Mark row as not changed inline void unsetRowChanged(int i) { rowChanged_[i] = static_cast< unsigned char >(rowChanged_[i] & (~1)); } /// Mark row as changed inline void setRowChanged(int i) { rowChanged_[i] = static_cast< unsigned char >(rowChanged_[i] | (1)); } /// Mark row as changed and add to list of rows to process next inline void addRow(int i) { if ((rowChanged_[i] & 1) == 0) { rowChanged_[i] = static_cast< unsigned char >(rowChanged_[i] | (1)); nextRowsToDo_[numberNextRowsToDo_++] = i; } } /// Test if row is eligible for preprocessing inline bool rowProhibited(int i) const { return (rowChanged_[i] & 2) != 0; } /*! \brief Test if row is eligible for preprocessing The difference between this method and #rowProhibited() is that this method first tests #anyProhibited_ before examining the specific entry for the specified row. */ inline bool rowProhibited2(int i) const { if (!anyProhibited_) return false; else return (rowChanged_[i] & 2) != 0; } /// Mark row as ineligible for preprocessing inline void setRowProhibited(int i) { rowChanged_[i] = static_cast< unsigned char >(rowChanged_[i] | (2)); } /*! \brief Test if row is marked as used This is for doing faster lookups to see where two rows have entries in common. It can be used anywhere as long as it ends up zeroed out. */ inline bool rowUsed(int i) const { return (rowChanged_[i] & 4) != 0; } /// Mark row as used inline void setRowUsed(int i) { rowChanged_[i] = static_cast< unsigned char >(rowChanged_[i] | (4)); } /// Mark row as unused inline void unsetRowUsed(int i) { rowChanged_[i] = static_cast< unsigned char >(rowChanged_[i] & (~4)); } /// Check if there are any prohibited rows or columns inline bool anyProhibited() const { return anyProhibited_; } /// Set a flag for presence of prohibited rows or columns inline void setAnyProhibited(bool val = true) { anyProhibited_ = val; } //@} }; /*! \class CoinPostsolveMatrix \brief Augments CoinPrePostsolveMatrix with information about the problem that is only needed during postsolve. The notable point is that the matrix representation is threaded. The representation is column-major and starts with the standard two pairs of arrays: one pair to hold the row indices and coefficients, the second pair to hold the column starting positions and lengths. But the row indices and coefficients for a column do not necessarily occupy a contiguous block in their respective arrays. Instead, a link array gives the position of the next (row index,coefficient) pair. If the row index and value of a coefficient a occupy position kp in their arrays, then the position of the next coefficient a is found as kq = link[kp]. This threaded representation allows for efficient expansion of columns as rows are reintroduced during postsolve transformations. The basic packed structures are allocated to the expected size of the postsolved matrix, and as new coefficients are added, their location is simply added to the thread for the column. There is no provision to convert the threaded representation to a packed representation. In the context of postsolve, it's not required. (You did keep a copy of the original matrix, eh?) The constructors that take an OSI or ClpSimplex as a parameter really should not be here, but for historical reasons they will likely remain for the forseeable future. -- lh, 111202 -- */ class CoinPostsolveMatrix : public CoinPrePostsolveMatrix { public: /*! \brief `Native' constructor This constructor creates an empty object which must then be loaded. On the other hand, it doesn't assume that the client is an OsiSolverInterface. */ CoinPostsolveMatrix(int ncols_alloc, int nrows_alloc, CoinBigIndex nelems_alloc); /*! \brief Clp OSI constructor See Clp code for the definition. */ CoinPostsolveMatrix(ClpSimplex *si, int ncols0, int nrows0, CoinBigIndex nelems0, double maxmin_, // end prepost members double *sol, double *acts, unsigned char *colstat, unsigned char *rowstat); /*! \brief Generic OSI constructor See OSI code for the definition. */ CoinPostsolveMatrix(OsiSolverInterface *si, int ncols0, int nrows0, CoinBigIndex nelems0, double maxmin_, // end prepost members double *sol, double *acts, unsigned char *colstat, unsigned char *rowstat); /*! \brief Load an empty CoinPostsolveMatrix from a CoinPresolveMatrix This routine transfers the contents of the CoinPrePostsolveMatrix object from the CoinPresolveMatrix object to the CoinPostsolveMatrix object and completes initialisation of the CoinPostsolveMatrix object. The empty shell of the CoinPresolveMatrix object is destroyed. The routine expects an empty CoinPostsolveMatrix object. If handed a loaded object, a lot of memory will leak. */ void assignPresolveToPostsolve(CoinPresolveMatrix *&preObj); /// Destructor ~CoinPostsolveMatrix(); /*! \name Column thread structures As mentioned in the class documentation, the entries for a given column do not necessarily occupy a contiguous block of space. The #link_ array is used to maintain the threading. There is one thread for each column, and a single thread for all free entries in #hrow_ and #colels_. The allocated size of #link_ must be at least as large as the allocated size of #hrow_ and #colels_. */ //@{ /*! \brief First entry in free entries thread */ CoinBigIndex free_list_; /// Allocated size of #link_ CoinBigIndex maxlink_; /*! \brief Thread array Within a thread, link_[k] points to the next entry in the thread. */ CoinBigIndex *link_; //@} /*! \name Debugging aids These arrays are allocated only when CoinPresolve is compiled with PRESOLVE_DEBUG defined. They hold codes which track the reason that a column or row is added to the problem during postsolve. */ //@{ char *cdone_; char *rdone_; //@} /// debug void check_nbasic(); }; /*! \defgroup MtxManip Presolve Matrix Manipulation Functions Functions to work with the loosely packed and threaded packed matrix structures used during presolve and postsolve. */ //@{ /*! \relates CoinPrePostsolveMatrix \brief Initialise linked list for major vector order in bulk storage */ void presolve_make_memlists(/*CoinBigIndex *starts,*/ int *lengths, presolvehlink *link, int n); /*! \relates CoinPrePostsolveMatrix \brief Make sure a major-dimension vector k has room for one more coefficient. You can use this directly, or use the inline wrappers presolve_expand_col and presolve_expand_row */ bool presolve_expand_major(CoinBigIndex *majstrts, double *majels, int *minndxs, int *majlens, presolvehlink *majlinks, int nmaj, int k); /*! \relates CoinPrePostsolveMatrix \brief Make sure a column (colx) in a column-major matrix has room for one more coefficient */ inline bool presolve_expand_col(CoinBigIndex *mcstrt, double *colels, int *hrow, int *hincol, presolvehlink *clink, int ncols, int colx) { return presolve_expand_major(mcstrt, colels, hrow, hincol, clink, ncols, colx); } /*! \relates CoinPrePostsolveMatrix \brief Make sure a row (rowx) in a row-major matrix has room for one more coefficient */ inline bool presolve_expand_row(CoinBigIndex *mrstrt, double *rowels, int *hcol, int *hinrow, presolvehlink *rlink, int nrows, int rowx) { return presolve_expand_major(mrstrt, rowels, hcol, hinrow, rlink, nrows, rowx); } /*! \relates CoinPrePostsolveMatrix \brief Find position of a minor index in a major vector. The routine returns the position \c k in \p minndxs for the specified minor index \p tgt. It will abort if the entry does not exist. Can be used directly or via the inline wrappers presolve_find_row and presolve_find_col. */ inline CoinBigIndex presolve_find_minor(int tgt, CoinBigIndex ks, CoinBigIndex ke, const int *minndxs) { CoinBigIndex k; for (k = ks; k < ke; k++) #ifndef NDEBUG { if (minndxs[k] == tgt) return (k); } DIE("FIND_MINOR"); abort(); return -1; #else { if (minndxs[k] == tgt) break; } return (k); #endif } /*! \relates CoinPrePostsolveMatrix \brief Find position of a row in a column in a column-major matrix. The routine returns the position \c k in \p hrow for the specified \p row. It will abort if the entry does not exist. */ inline CoinBigIndex presolve_find_row(int row, CoinBigIndex kcs, CoinBigIndex kce, const int *hrow) { return presolve_find_minor(row, kcs, kce, hrow); } /*! \relates CoinPostsolveMatrix \brief Find position of a column in a row in a row-major matrix. The routine returns the position \c k in \p hcol for the specified \p col. It will abort if the entry does not exist. */ inline CoinBigIndex presolve_find_col(int col, CoinBigIndex krs, CoinBigIndex kre, const int *hcol) { return presolve_find_minor(col, krs, kre, hcol); } /*! \relates CoinPrePostsolveMatrix \brief Find position of a minor index in a major vector. The routine returns the position \c k in \p minndxs for the specified minor index \p tgt. A return value of \p ke means the entry does not exist. Can be used directly or via the inline wrappers presolve_find_row1 and presolve_find_col1. */ CoinBigIndex presolve_find_minor1(int tgt, CoinBigIndex ks, CoinBigIndex ke, const int *minndxs); /*! \relates CoinPrePostsolveMatrix \brief Find position of a row in a column in a column-major matrix. The routine returns the position \c k in \p hrow for the specified \p row. A return value of \p kce means the entry does not exist. */ inline CoinBigIndex presolve_find_row1(int row, CoinBigIndex kcs, CoinBigIndex kce, const int *hrow) { return presolve_find_minor1(row, kcs, kce, hrow); } /*! \relates CoinPrePostsolveMatrix \brief Find position of a column in a row in a row-major matrix. The routine returns the position \c k in \p hcol for the specified \p col. A return value of \p kre means the entry does not exist. */ inline CoinBigIndex presolve_find_col1(int col, CoinBigIndex krs, CoinBigIndex kre, const int *hcol) { return presolve_find_minor1(col, krs, kre, hcol); } /*! \relates CoinPostsolveMatrix \brief Find position of a minor index in a major vector in a threaded matrix. The routine returns the position \c k in \p minndxs for the specified minor index \p tgt. It will abort if the entry does not exist. Can be used directly or via the inline wrapper presolve_find_row2. */ CoinBigIndex presolve_find_minor2(int tgt, CoinBigIndex ks, int majlen, const int *minndxs, const CoinBigIndex *majlinks); /*! \relates CoinPostsolveMatrix \brief Find position of a row in a column in a column-major threaded matrix. The routine returns the position \c k in \p hrow for the specified \p row. It will abort if the entry does not exist. */ inline CoinBigIndex presolve_find_row2(int row, CoinBigIndex kcs, int collen, const int *hrow, const CoinBigIndex *clinks) { return presolve_find_minor2(row, kcs, collen, hrow, clinks); } /*! \relates CoinPostsolveMatrix \brief Find position of a minor index in a major vector in a threaded matrix. The routine returns the position \c k in \p minndxs for the specified minor index \p tgt. It will return -1 if the entry does not exist. Can be used directly or via the inline wrappers presolve_find_row3. */ CoinBigIndex presolve_find_minor3(int tgt, CoinBigIndex ks, int majlen, const int *minndxs, const CoinBigIndex *majlinks); /*! \relates CoinPostsolveMatrix \brief Find position of a row in a column in a column-major threaded matrix. The routine returns the position \c k in \p hrow for the specified \p row. It will return -1 if the entry does not exist. */ inline CoinBigIndex presolve_find_row3(int row, CoinBigIndex kcs, int collen, const int *hrow, const CoinBigIndex *clinks) { return presolve_find_minor3(row, kcs, collen, hrow, clinks); } /*! \relates CoinPrePostsolveMatrix \brief Delete the entry for a minor index from a major vector. Deletes the entry for \p minndx from the major vector \p majndx. Specifically, the relevant entries are removed from the minor index (\p minndxs) and coefficient (\p els) arrays and the vector length (\p majlens) is decremented. Loose packing is maintained by swapping the last entry in the row into the position occupied by the deleted entry. */ inline void presolve_delete_from_major(int majndx, int minndx, const CoinBigIndex *majstrts, int *majlens, int *minndxs, double *els) { const CoinBigIndex ks = majstrts[majndx]; const CoinBigIndex ke = ks + majlens[majndx]; const CoinBigIndex kmi = presolve_find_minor(minndx, ks, ke, minndxs); minndxs[kmi] = minndxs[ke - 1]; els[kmi] = els[ke - 1]; majlens[majndx]--; return; } /*! \relates CoinPrePostsolveMatrix \brief Delete marked entries Removes the entries specified in \p marked, compressing the major vector to maintain loose packing. \p marked is cleared in the process. */ inline void presolve_delete_many_from_major(int majndx, char *marked, const CoinBigIndex *majstrts, int *majlens, int *minndxs, double *els) { const CoinBigIndex ks = majstrts[majndx]; const CoinBigIndex ke = ks + majlens[majndx]; CoinBigIndex put = ks; for (CoinBigIndex k = ks; k < ke; k++) { int iMinor = minndxs[k]; if (!marked[iMinor]) { minndxs[put] = iMinor; els[put++] = els[k]; } else { marked[iMinor] = 0; } } majlens[majndx] = static_cast< int >(put - ks); return; } /*! \relates CoinPrePostsolveMatrix \brief Delete the entry for row \p row from column \p col in a column-major matrix Deletes the entry for \p row from the major vector for \p col. Specifically, the relevant entries are removed from the row index (\p hrow) and coefficient (\p colels) arrays and the vector length (\p hincol) is decremented. Loose packing is maintained by swapping the last entry in the row into the position occupied by the deleted entry. */ inline void presolve_delete_from_col(int row, int col, const CoinBigIndex *mcstrt, int *hincol, int *hrow, double *colels) { presolve_delete_from_major(col, row, mcstrt, hincol, hrow, colels); } /*! \relates CoinPrePostsolveMatrix \brief Delete the entry for column \p col from row \p row in a row-major matrix Deletes the entry for \p col from the major vector for \p row. Specifically, the relevant entries are removed from the column index (\p hcol) and coefficient (\p rowels) arrays and the vector length (\p hinrow) is decremented. Loose packing is maintained by swapping the last entry in the column into the position occupied by the deleted entry. */ inline void presolve_delete_from_row(int row, int col, const CoinBigIndex *mrstrt, int *hinrow, int *hcol, double *rowels) { presolve_delete_from_major(row, col, mrstrt, hinrow, hcol, rowels); } /*! \relates CoinPostsolveMatrix \brief Delete the entry for a minor index from a major vector in a threaded matrix. Deletes the entry for \p minndx from the major vector \p majndx. Specifically, the relevant entries are removed from the minor index (\p minndxs) and coefficient (\p els) arrays and the vector length (\p majlens) is decremented. The thread for the major vector is relinked around the deleted entry and the space is returned to the free list. */ void presolve_delete_from_major2(int majndx, int minndx, CoinBigIndex *majstrts, int *majlens, int *minndxs, CoinBigIndex *majlinks, CoinBigIndex *free_listp); /*! \relates CoinPostsolveMatrix \brief Delete the entry for row \p row from column \p col in a column-major threaded matrix Deletes the entry for \p row from the major vector for \p col. Specifically, the relevant entries are removed from the row index (\p hrow) and coefficient (\p colels) arrays and the vector length (\p hincol) is decremented. The thread for the major vector is relinked around the deleted entry and the space is returned to the free list. */ inline void presolve_delete_from_col2(int row, int col, CoinBigIndex *mcstrt, int *hincol, int *hrow, CoinBigIndex *clinks, CoinBigIndex *free_listp) { presolve_delete_from_major2(col, row, mcstrt, hincol, hrow, clinks, free_listp); } //@} /*! \defgroup PresolveUtilities Presolve Utility Functions Utilities used by multiple presolve transform objects. */ //@{ /*! \brief Duplicate a major-dimension vector; optionally omit the entry with minor index \p tgt. Designed to copy a major-dimension vector from the paired coefficient (\p elems) and minor index (\p indices) arrays used in the standard packed matrix representation. Copies \p length entries starting at \p offset. If \p tgt is specified, the entry with minor index == \p tgt is omitted from the copy. */ double *presolve_dupmajor(const double *elems, const int *indices, int length, CoinBigIndex offset, int tgt = -1); /// Initialize a vector with random numbers void coin_init_random_vec(double *work, int n); //@} #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinFinite.cpp0000644000175200017520000000161313414454441016313 0ustar coincoin/* $Id: CoinFinite.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2011, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinFinite.hpp" #include "CoinUtilsConfig.h" #ifdef HAVE_CFLOAT #include #else #ifdef HAVE_FLOAT_H #include #endif #endif #ifdef HAVE_CMATH #include #else #ifdef HAVE_MATH_H #include #endif #endif #ifdef HAVE_CIEEEFP #include #else #ifdef HAVE_IEEEFP_H #include #endif #endif bool CoinFinite(double val) { #ifdef COIN_C_FINITE return COIN_C_FINITE(val) != 0; #else return val != DBL_MAX && val != -DBL_MAX; #endif } bool CoinIsnan(double val) { #ifdef COIN_C_ISNAN return COIN_C_ISNAN(val) != 0; #else return false; #endif } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinAlloc.cpp0000644000175200017520000001103013414454441016121 0ustar coincoin/* $Id: CoinAlloc.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2007, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include "CoinAlloc.hpp" #if (COINUTILS_MEMPOOL_MAXPOOLED >= 0) //============================================================================= CoinMempool::CoinMempool(size_t entry) : #if (COIN_MEMPOOL_SAVE_BLOCKHEADS == 1) block_heads_(NULL) , block_num_(0) , max_block_num_(0) , #endif last_block_size_(0) , first_free_(NULL) , entry_size_(entry) { #if defined(COINUTILS_PTHREADS) && (COINUTILS_PTHREAD == 1) pthread_mutex_init(&mutex_, NULL); #endif assert((entry_size_ / COINUTILS_MEMPOOL_ALIGNMENT) * COINUTILS_MEMPOOL_ALIGNMENT == entry_size_); } //============================================================================= CoinMempool::~CoinMempool() { #if (COIN_MEMPOOL_SAVE_BLOCKHEADS == 1) for (size_t i = 0; i < block_num_; ++i) { free(block_heads_[i]); } #endif #if defined(COINUTILS_PTHREADS) && (COINUTILS_PTHREAD == 1) pthread_mutex_destroy(&mutex_); #endif } //============================================================================== char * CoinMempool::alloc() { lock_mutex(); if (first_free_ == NULL) { unlock_mutex(); char *block = allocate_new_block(); lock_mutex(); #if (COIN_MEMPOOL_SAVE_BLOCKHEADS == 1) // see if we can record another block head. If not, then resize // block_heads if (max_block_num_ == block_num_) { max_block_num_ = 2 * block_num_ + 10; char **old_block_heads = block_heads_; block_heads_ = (char **)malloc(max_block_num_ * sizeof(char *)); CoinMemcpyN(old_block_heads, block_num_, block_heads_); free(old_block_heads); } // save the new block block_heads_[block_num_++] = block; #endif // link in the new block *(char **)(block + ((last_block_size_ - 1) * entry_size_)) = first_free_; first_free_ = block; } char *p = first_free_; first_free_ = *(char **)p; unlock_mutex(); return p; } //============================================================================= char * CoinMempool::allocate_new_block() { last_block_size_ = static_cast< int >(1.5 * last_block_size_ + 32); char *block = static_cast< char * >(std::malloc(last_block_size_ * entry_size_)); // link the entries in the new block together for (int i = last_block_size_ - 2; i >= 0; --i) { *(char **)(block + (i * entry_size_)) = block + ((i + 1) * entry_size_); } // terminate the linked list with a null pointer *(char **)(block + ((last_block_size_ - 1) * entry_size_)) = NULL; return block; } //############################################################################# CoinAlloc CoinAllocator; CoinAlloc::CoinAlloc() : pool_(NULL) , maxpooled_(COINUTILS_MEMPOOL_MAXPOOLED) { const char *maxpooled = std::getenv("COINUTILS_MEMPOOL_MAXPOOLED"); if (maxpooled) { maxpooled_ = std::atoi(maxpooled); } const size_t poolnum = maxpooled_ / COINUTILS_MEMPOOL_ALIGNMENT; maxpooled_ = poolnum * COINUTILS_MEMPOOL_ALIGNMENT; if (maxpooled_ > 0) { pool_ = (CoinMempool *)malloc(sizeof(CoinMempool) * poolnum); for (int i = poolnum - 1; i >= 0; --i) { new (&pool_[i]) CoinMempool(i * COINUTILS_MEMPOOL_ALIGNMENT); } } } //############################################################################# #if defined(COINUTILS_MEMPOOL_OVERRIDE_NEW) && (COINUTILS_MEMPOOL_OVERRIDE_NEW == 1) void *operator new(std::size_t sz) throw(std::bad_alloc) { return CoinAllocator.alloc(sz); } void *operator new[](std::size_t sz) throw(std::bad_alloc) { return CoinAllocator.alloc(sz); } void operator delete(void *p) throw() { CoinAllocator.dealloc(p); } void operator delete[](void *p) throw() { CoinAllocator.dealloc(p); } void *operator new(std::size_t sz, const std::nothrow_t &) throw() { void *p = NULL; try { p = CoinAllocator.alloc(sz); } catch (std::bad_alloc &ba) { return NULL; } return p; } void *operator new[](std::size_t sz, const std::nothrow_t &) throw() { void *p = NULL; try { p = CoinAllocator.alloc(sz); } catch (std::bad_alloc &ba) { return NULL; } return p; } void operator delete(void *p, const std::nothrow_t &)throw() { CoinAllocator.dealloc(p); } void operator delete[](void *p, const std::nothrow_t &) throw() { CoinAllocator.dealloc(p); } #endif #endif /*(COINUTILS_MEMPOOL_MAXPOOLED >= 0)*/ /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinError.hpp0000644000175200017520000001751713414454441016205 0ustar coincoin/* $Id: CoinError.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinError_H #define CoinError_H #include #include #include #include #include "CoinUtilsConfig.h" #include "CoinPragma.hpp" /** A function to block the popup windows that windows creates when the code crashes */ void WindowsErrorPopupBlocker(); //------------------------------------------------------------------- // // Error class used to throw exceptions // // Errors contain: // //------------------------------------------------------------------- /** Error Class thrown by an exception This class is used when exceptions are thrown. It contains:
  • message text
  • name of method throwing exception
  • name of class throwing exception or hint
  • name of file if assert
  • line number
For asserts class=> optional hint */ class CoinError { friend void CoinErrorUnitTest(); private: CoinError() : message_() , method_() , class_() , file_() , lineNumber_() { // nothing to do here } public: //------------------------------------------------------------------- // Get methods //------------------------------------------------------------------- /**@name Get error attributes */ //@{ /// get message text inline const std::string &message() const { return message_; } /// get name of method instantiating error inline const std::string &methodName() const { return method_; } /// get name of class instantiating error (or hint for assert) inline const std::string &className() const { return class_; } /// get name of file for assert inline const std::string &fileName() const { return file_; } /// get line number of assert (-1 if not assert) inline int lineNumber() const { return lineNumber_; } /// Just print (for asserts) inline void print(bool doPrint = true) const { if (!doPrint) return; if (lineNumber_ < 0) { std::cout << message_ << " in " << class_ << "::" << method_ << std::endl; } else { std::cout << file_ << ":" << lineNumber_ << " method " << method_ << " : assertion \'" << message_ << "\' failed." << std::endl; if (class_ != "") std::cout << "Possible reason: " << class_ << std::endl; } } //@} /**@name Constructors and destructors */ //@{ /// Alternate Constructor CoinError( std::string message__, std::string methodName__, std::string className__, std::string fileName_ = std::string(), int line = -1) : message_(message__) , method_(methodName__) , class_(className__) , file_(fileName_) , lineNumber_(line) { print(printErrors_); } /// Copy constructor CoinError(const CoinError &source) : message_(source.message_) , method_(source.method_) , class_(source.class_) , file_(source.file_) , lineNumber_(source.lineNumber_) { // nothing to do here } /// Assignment operator CoinError &operator=(const CoinError &rhs) { if (this != &rhs) { message_ = rhs.message_; method_ = rhs.method_; class_ = rhs.class_; file_ = rhs.file_; lineNumber_ = rhs.lineNumber_; } return *this; } /// Destructor virtual ~CoinError() { // nothing to do here } //@} private: /**@name Private member data */ //@{ /// message test std::string message_; /// method name std::string method_; /// class name or hint std::string class_; /// file name std::string file_; /// Line number int lineNumber_; //@} public: /// Whether to print every error static bool printErrors_; }; #ifndef __STRING #define __STRING(x) #x #endif #ifndef __GNUC_PREREQ #define __GNUC_PREREQ(maj, min) (0) #endif #ifndef COIN_ASSERT #define CoinAssertDebug(expression) assert(expression) #define CoinAssertDebugHint(expression, hint) assert(expression) #define CoinAssert(expression) assert(expression) #define CoinAssertHint(expression, hint) assert(expression) #else #ifdef NDEBUG #define CoinAssertDebug(expression) \ { \ } #define CoinAssertDebugHint(expression, hint) \ { \ } #else #if defined(__GNUC__) && __GNUC_PREREQ(2, 6) #define CoinAssertDebug(expression) \ { \ if (!(expression)) { \ throw CoinError(__STRING(expression), __PRETTY_FUNCTION__, \ "", __FILE__, __LINE__); \ } \ } #define CoinAssertDebugHint(expression, hint) \ { \ if (!(expression)) { \ throw CoinError(__STRING(expression), __PRETTY_FUNCTION__, \ hint, __FILE__, __LINE__); \ } \ } #else #define CoinAssertDebug(expression) \ { \ if (!(expression)) { \ throw CoinError(__STRING(expression), "", \ "", __FILE__, __LINE__); \ } \ } #define CoinAssertDebugHint(expression, hint) \ { \ if (!(expression)) { \ throw CoinError(__STRING(expression), "", \ hint, __FILE__, __LINE__); \ } \ } #endif #endif #if defined(__GNUC__) && __GNUC_PREREQ(2, 6) #define CoinAssert(expression) \ { \ if (!(expression)) { \ throw CoinError(__STRING(expression), __PRETTY_FUNCTION__, \ "", __FILE__, __LINE__); \ } \ } #define CoinAssertHint(expression, hint) \ { \ if (!(expression)) { \ throw CoinError(__STRING(expression), __PRETTY_FUNCTION__, \ hint, __FILE__, __LINE__); \ } \ } #else #define CoinAssert(expression) \ { \ if (!(expression)) { \ throw CoinError(__STRING(expression), "", \ "", __FILE__, __LINE__); \ } \ } #define CoinAssertHint(expression, hint) \ { \ if (!(expression)) { \ throw CoinError(__STRING(expression), "", \ hint, __FILE__, __LINE__); \ } \ } #endif #endif //############################################################################# /** A function that tests the methods in the CoinError class. The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging. */ void CoinErrorUnitTest(); #ifdef __LINE__ #define CoinErrorFL(x, y, z) CoinError((x), (y), (z), __FILE__, __LINE__) #endif #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/Makefile.am0000644000175200017520000001373112465773173015633 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1799 2015-02-08 23:51:23Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # libCoinUtils # ######################################################################## # Name of the library compiled in this directory. # We want it to be installed in the $libdir directory lib_LTLIBRARIES = libCoinUtils.la # List all source files for this library, including headers libCoinUtils_la_SOURCES = \ config_coinutils.h \ CoinUtilsConfig.h \ Coin_C_defines.h \ CoinAlloc.cpp CoinAlloc.hpp \ CoinBuild.cpp CoinBuild.hpp \ CoinDenseVector.cpp CoinDenseVector.hpp \ CoinDistance.hpp \ CoinError.cpp CoinError.hpp \ CoinFactorization.hpp \ CoinFactorization1.cpp \ CoinFactorization2.cpp \ CoinFactorization3.cpp \ CoinFactorization4.cpp \ CoinSimpFactorization.hpp \ CoinSimpFactorization.cpp \ CoinDenseFactorization.hpp \ CoinDenseFactorization.cpp \ CoinOslFactorization.hpp \ CoinOslFactorization.cpp \ CoinOslFactorization2.cpp \ CoinOslFactorization3.cpp \ CoinOslC.h \ CoinFileIO.cpp CoinFileIO.hpp \ CoinFinite.cpp CoinFinite.hpp \ CoinFloatEqual.hpp \ CoinHelperFunctions.hpp \ CoinIndexedVector.cpp CoinIndexedVector.hpp \ CoinLpIO.cpp CoinLpIO.hpp \ CoinMessage.cpp CoinMessage.hpp \ CoinMessageHandler.cpp CoinMessageHandler.hpp \ CoinModel.cpp CoinModel.hpp \ CoinStructuredModel.cpp CoinStructuredModel.hpp \ CoinModelUseful.cpp CoinModelUseful.hpp \ CoinModelUseful2.cpp \ CoinMpsIO.cpp CoinMpsIO.hpp \ CoinPackedMatrix.cpp CoinPackedMatrix.hpp \ CoinPackedVector.cpp CoinPackedVector.hpp \ CoinPackedVectorBase.cpp CoinPackedVectorBase.hpp \ CoinParam.cpp CoinParamUtils.cpp CoinParam.hpp \ CoinPostsolveMatrix.cpp \ CoinPragma.hpp \ CoinPrePostsolveMatrix.cpp \ CoinPresolveDoubleton.cpp CoinPresolveDoubleton.hpp \ CoinPresolveDual.cpp CoinPresolveDual.hpp \ CoinPresolveDupcol.cpp CoinPresolveDupcol.hpp \ CoinPresolveEmpty.cpp CoinPresolveEmpty.hpp \ CoinPresolveFixed.cpp CoinPresolveFixed.hpp \ CoinPresolveForcing.cpp CoinPresolveForcing.hpp \ CoinPresolveHelperFunctions.cpp \ CoinPresolveImpliedFree.cpp CoinPresolveImpliedFree.hpp \ CoinPresolveIsolated.cpp CoinPresolveIsolated.hpp \ CoinPresolveMatrix.cpp CoinPresolveMatrix.hpp \ CoinPresolvePsdebug.cpp CoinPresolvePsdebug.hpp \ CoinPresolveMonitor.cpp CoinPresolveMonitor.hpp \ CoinPresolveSingleton.cpp CoinPresolveSingleton.hpp \ CoinPresolveSubst.cpp CoinPresolveSubst.hpp \ CoinPresolveTighten.cpp CoinPresolveTighten.hpp \ CoinPresolveTripleton.cpp CoinPresolveTripleton.hpp \ CoinPresolveUseless.cpp CoinPresolveUseless.hpp \ CoinPresolveZeros.cpp CoinPresolveZeros.hpp \ CoinRational.cpp CoinRational.hpp \ CoinSearchTree.cpp CoinSearchTree.hpp \ CoinShallowPackedVector.cpp CoinShallowPackedVector.hpp \ CoinSignal.hpp \ CoinSmartPtr.hpp \ CoinSnapshot.cpp CoinSnapshot.hpp \ CoinSort.hpp \ CoinTime.hpp \ CoinTypes.hpp \ CoinUtility.hpp \ CoinWarmStart.hpp \ CoinWarmStartBasis.cpp CoinWarmStartBasis.hpp \ CoinWarmStartVector.cpp CoinWarmStartVector.hpp \ CoinWarmStartDual.cpp CoinWarmStartDual.hpp \ CoinWarmStartPrimalDual.cpp CoinWarmStartPrimalDual.hpp # List all additionally required libraries if DEPENDENCY_LINKING libCoinUtils_la_LIBADD = $(COINUTILSLIB_LIBS) endif # This is for libtool libCoinUtils_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = $(GLPK_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'install/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ Coin_C_defines.h \ CoinAlloc.hpp \ CoinBuild.hpp \ CoinDenseVector.hpp \ CoinDistance.hpp \ CoinError.hpp \ CoinFactorization.hpp \ CoinSimpFactorization.hpp \ CoinDenseFactorization.hpp \ CoinOslFactorization.hpp \ CoinFileIO.hpp \ CoinFinite.hpp \ CoinFloatEqual.hpp \ CoinHelperFunctions.hpp \ CoinIndexedVector.hpp \ CoinLpIO.hpp \ CoinMessage.hpp \ CoinMessageHandler.hpp \ CoinModel.hpp \ CoinStructuredModel.hpp \ CoinModelUseful.hpp \ CoinMpsIO.hpp \ CoinPackedMatrix.hpp \ CoinPackedVector.hpp \ CoinPackedVectorBase.hpp \ CoinParam.hpp \ CoinPragma.hpp \ CoinPresolveDoubleton.hpp \ CoinPresolveDual.hpp \ CoinPresolveDupcol.hpp \ CoinPresolveEmpty.hpp \ CoinPresolveFixed.hpp \ CoinPresolveForcing.hpp \ CoinPresolveImpliedFree.hpp \ CoinPresolveIsolated.hpp \ CoinPresolveMatrix.hpp \ CoinPresolveMonitor.hpp \ CoinPresolvePsdebug.hpp \ CoinPresolveSingleton.hpp \ CoinPresolveSubst.hpp \ CoinPresolveTighten.hpp \ CoinPresolveTripleton.hpp \ CoinPresolveUseless.hpp \ CoinPresolveZeros.hpp \ CoinRational.hpp \ CoinSearchTree.hpp \ CoinShallowPackedVector.hpp \ CoinSignal.hpp \ CoinSmartPtr.hpp \ CoinSnapshot.hpp \ CoinSort.hpp \ CoinTime.hpp \ CoinTypes.hpp \ CoinUtility.hpp \ CoinWarmStart.hpp \ CoinWarmStartBasis.hpp \ CoinWarmStartVector.hpp \ CoinWarmStartDual.hpp \ CoinWarmStartPrimalDual.hpp ####################################################################### # Create the Config.h file that has all public defines and install it # ####################################################################### install-exec-local: $(install_sh_DATA) config_coinutils.h $(DESTDIR)$(includecoindir)/CoinUtilsConfig.h uninstall-local: rm -f $(DESTDIR)$(includecoindir)/CoinUtilsConfig.h DyLP-1.10.4/CoinUtils/src/CoinUtilsConfig.h0000644000175200017520000000271713414454441016776 0ustar coincoin/* Copyright (C) 2011 * All Rights Reserved. * This code is published under the Eclipse Public License. * * $Id: CoinUtilsConfig.h 2083 2019-01-06 19:38:09Z unxusr $ * * Include file for the configuration of CoinUtils. * * On systems where the code is configured with the configure script * (i.e., compilation is always done with HAVE_CONFIG_H defined), this * header file includes the automatically generated header file, and * undefines macros that might configure with other Config.h files. * * On systems that are compiled in other ways (e.g., with the * Developer Studio), a header files is included to define those * macros that depend on the operating system and the compiler. The * macros that define the configuration of the particular user setting * (e.g., presence of other COIN-OR packages or third party code) are set * by the files config_*default.h. The project maintainer needs to remember * to update these file and choose reasonable defines. * A user can modify the default setting by editing the config_*default.h files. * */ #ifndef __COINUTILSCONFIG_H__ #define __COINUTILSCONFIG_H__ #ifdef HAVE_CONFIG_H #ifdef COINUTILS_BUILD #include "config.h" #else #include "config_coinutils.h" #endif #else /* HAVE_CONFIG_H */ #ifdef COINUTILS_BUILD #include "config_default.h" #else #include "config_coinutils_default.h" #endif #endif /* HAVE_CONFIG_H */ #endif /*__COINUTILSCONFIG_H__*/ /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveDoubleton.hpp0000644000175200017520000000317513414454441020562 0ustar coincoin/* $Id: CoinPresolveDoubleton.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolveDoubleton_H #define CoinPresolveDoubleton_H #define DOUBLETON 5 /*! \class doubleton_action \brief Solve ax+by=c for y and substitute y out of the problem. This moves the bounds information for y onto x, making y free and allowing us to substitute it away. \verbatim a x + b y = c l1 <= x <= u1 l2 <= y <= u2 ==> l2 <= (c - a x) / b <= u2 b/-a > 0 ==> (b l2 - c) / -a <= x <= (b u2 - c) / -a b/-a < 0 ==> (b u2 - c) / -a <= x <= (b l2 - c) / -a \endverbatim */ class doubleton_action : public CoinPresolveAction { public: struct action { double clox; double cupx; double costx; double costy; double rlo; double coeffx; double coeffy; double *colel; int icolx; int icoly; int row; int ncolx; int ncoly; }; const int nactions_; const action *const actions_; private: doubleton_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } public: const char *name() const { return ("doubleton_action"); } static const CoinPresolveAction *presolve(CoinPresolveMatrix *, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~doubleton_action(); }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinDistance.hpp0000644000175200017520000000234513414454441016637 0ustar coincoin/* $Id: CoinDistance.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinDistance_H #define CoinDistance_H #include //------------------------------------------------------------------- // // Attempt to provide an std::distance function // that will work on multiple platforms // //------------------------------------------------------------------- /** CoinDistance This is the Coin implementation of the std::function that is designed to work on multiple platforms. */ template < class ForwardIterator, class Distance > void coinDistance(ForwardIterator first, ForwardIterator last, Distance &n) { #if defined(__SUNPRO_CC) n = 0; std::distance(first, last, n); #else n = std::distance(first, last); #endif } template < class ForwardIterator > size_t coinDistance(ForwardIterator first, ForwardIterator last) { size_t retVal; #if defined(__SUNPRO_CC) retVal = 0; std::distance(first, last, retVal); #else retVal = std::distance(first, last); #endif return retVal; } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveSubst.cpp0000644000175200017520000010705313414454441017722 0ustar coincoin/* $Id: CoinPresolveSubst.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveEmpty.hpp" // for DROP_COL/DROP_ROW #include "CoinPresolvePsdebug.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveZeros.hpp" #include "CoinPresolveSubst.hpp" #include "CoinMessage.hpp" #include "CoinHelperFunctions.hpp" #include "CoinSort.hpp" #include "CoinError.hpp" #include "CoinFinite.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif namespace { // begin unnamed file-local namespace #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 /* Special-purpose debug utility to look for coefficient a(i,j) in column j. Intended to be inserted as needed and removed when debugging is complete. */ void dbg_find_elem(const CoinPostsolveMatrix *postMtx, int i, int j) { const CoinBigIndex kcs = postMtx->mcstrt_[j]; const CoinBigIndex lenj = postMtx->hincol_[j]; CoinBigIndex krow = presolve_find_row3(i, kcs, lenj, postMtx->hrow_, postMtx->link_); if (krow >= 0) { std::cout << " row " << i << " present in column " << j << ", a(" << i << "," << j << ") = " << postMtx->colels_[krow] << std::endl; } else { std::cout << " row " << i << " not present in column " << j << std::endl; } } #endif /* Add coeff_factor*rowy to rowx, for coefficients and row bounds. In the terminology used in ::presolve, rowy is the target row, and rowx is an entangled row (entangled with the target column). If a coefficient is < kill_ratio * coeff_factor then kill it Column indices in irowx and iroy must be sorted in increasing order. Normally one might do that here, but this routine is only called from subst_constraint_action::presolve and rowy will be the same over several calls. More efficient to sort in sca::presolve. Given we're called from sca::presolve, rowx will be an equality, with finite rlo[rowx] = rup[rowx] = rhsy. Fill-in in rowx has the potential to trigger compaction of the row-major bulk store. *All* indices into the bulk store are *not* constant if this happens. Returns false if the addition completes without error, true if there's a problem. */ static bool add_row(CoinBigIndex *mrstrt, double *rlo, double *acts, double *rup, double *rowels, int *hcol, int *hinrow, presolvehlink *rlink, int nrows, double coeff_factor, double kill_ratio, int irowx, int irowy, int *x_to_y) { CoinBigIndex krsy = mrstrt[irowy]; CoinBigIndex krey = krsy + hinrow[irowy]; CoinBigIndex krsx = mrstrt[irowx]; CoinBigIndex krex = krsx + hinrow[irowx]; #if PRESOLVE_DEBUG > 3 std::cout << " ADD_ROW: adding (" << coeff_factor << ")*(row " << irowy << ") to row " << irowx << "; len y = " << hinrow[irowy] << ", len x = " << hinrow[irowx] << "." << std::endl; #endif /* Do the simple part first: adjust the row lower and upper bounds, but only if they're finite. */ const double rhsy = rlo[irowy]; const double rhscorr = rhsy * coeff_factor; const double tolerance = kill_ratio * coeff_factor; if (-PRESOLVE_INF < rlo[irowx]) { const double newrlo = rlo[irowx] + rhscorr; #if PRESOLVE_DEBUG > 3 if (rhscorr) std::cout << " rlo(" << irowx << ") " << rlo[irowx] << " -> " << newrlo << "." << std::endl; #endif rlo[irowx] = newrlo; } if (rup[irowx] < PRESOLVE_INF) { const double newrup = rup[irowx] + rhscorr; #if PRESOLVE_DEBUG > 3 if (rhscorr) std::cout << " rup(" << irowx << ") " << rup[irowx] << " -> " << newrup << "." << std::endl; #endif rup[irowx] = newrup; } if (acts) { acts[irowx] += rhscorr; } /* On to the main show. Open a loop to walk row y. krowx is keeping track of where we're at in row x. To find column j in row x, start from the current position and search forward, but no further than the last original coefficient of row x (fill will be added after this element). */ CoinBigIndex krowx = krsx; CoinBigIndex krex0 = krex; int x_to_y_i = 0; #if PRESOLVE_DEBUG > 3 std::cout << " ycols:"; #endif for (CoinBigIndex krowy = krsy; krowy < krey; krowy++) { int j = hcol[krowy]; PRESOLVEASSERT(krex == krsx + hinrow[irowx]); while (krowx < krex0 && hcol[krowx] < j) krowx++; #if PRESOLVE_DEBUG > 3 std::cout << " a(" << irowx << "," << j << ") "; #endif /* The easy case: coeff a(xj) already exists and all we need to is modify it. */ if (krowx < krex0 && hcol[krowx] == j) { double newcoeff = rowels[krowx] + rowels[krowy] * coeff_factor; #if PRESOLVE_DEBUG > 3 std::cout << rowels[krowx] << " -> " << newcoeff << ";"; #endif // kill small if (fabs(newcoeff) < tolerance) newcoeff = 0.0; rowels[krowx] = newcoeff; x_to_y[x_to_y_i++] = static_cast< int >(krowx - krsx); krowx++; } else { /* The hard case: a(xj) will be fill-in for row x. Make sure we have room. The process of making room can trigger bulk store compaction which can move all rows, so recalculate all pointers into the bulk store. Only then can we add the new coefficient. */ double newValue = rowels[krowy] * coeff_factor; bool outOfSpace = presolve_expand_row(mrstrt, rowels, hcol, hinrow, rlink, nrows, irowx); if (outOfSpace) return (true); krowy = mrstrt[irowy] + (krowy - krsy); krsy = mrstrt[irowy]; krey = krsy + hinrow[irowy]; krowx = mrstrt[irowx] + (krowx - krsx); krex0 = mrstrt[irowx] + (krex0 - krsx); krsx = mrstrt[irowx]; krex = krsx + hinrow[irowx]; hcol[krex] = j; rowels[krex] = newValue; x_to_y[x_to_y_i++] = static_cast< int >(krex - krsx); hinrow[irowx]++; krex++; #if PRESOLVE_DEBUG > 3 std::cout << rowels[krex - 1] << ";"; #endif } } #if PRESOLVE_DEBUG > 3 std::cout << std::endl; #endif return (false); } } // end unnamed file-local namespace const char *subst_constraint_action::name() const { return ("subst_constraint_action"); } /* This transform is called only from implied_free_action. See the comments at the head of CoinPresolveImpledFree.cpp for background. In addition to natural implied free singletons, implied_free_action will identify implied free variables that are not (yet) column singletons. This transform will process them. Suppose we have a variable x(t) and an equality r which satisfy the implied free condition (i.e., r imposes bounds on x(t) which are equal or better than the original column bounds). Then we can solve r for x(t) to get a substitution formula for x(t). We can use the substitution formula to eliminate x(t) from all other constraints where it is entangled. x(t) is now an implied free column singleton with equality r and we can remove x(t) and equality r from the constraint system. The paired parameter vectors implied_free and whichFree specify the indices for equality r and variable t, respectively. NOTE that these vectors are held in the first two blocks of usefulColumnInt_. Don't reuse them! Fill-in can cause a major vector to be moved to free space at the end of the bulk store. If there's not enough free space, this can trigger compaction of the entire bulk store. The upshot is that *all* major vector starts and ends are *not* constant over calls that could expand a major vector. Deletion, on the other hand, will never move a major vector (but it will move the end element into the hole left by the deleted element). */ const CoinPresolveAction *subst_constraint_action::presolve( CoinPresolveMatrix *prob, const int *implied_free, const int *whichFree, int numberFree, const CoinPresolveAction *next, int maxLook) { #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering subst_constraint_action::presolve, fill level " << maxLook << ", " << numberFree << " candidates." << std::endl; #endif presolve_consistent(prob); presolve_links_ok(prob); presolve_check_sol(prob); presolve_check_nbasic(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int startEmptyRows = 0; int startEmptyColumns = 0; startEmptyRows = prob->countEmptyRows(); startEmptyColumns = prob->countEmptyCols(); #if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0; if (prob->tuning_) startTime = CoinCpuTime(); #endif #endif /* Unpack the row- and column-major representations. */ const int ncols = prob->ncols_; const int nrows = prob->nrows_; CoinBigIndex *rowStarts = prob->mrstrt_; int *rowLengths = prob->hinrow_; double *rowCoeffs = prob->rowels_; int *colIndices = prob->hcol_; presolvehlink *rlink = prob->rlink_; CoinBigIndex *colStarts = prob->mcstrt_; int *colLengths = prob->hincol_; double *colCoeffs = prob->colels_; int *rowIndices = prob->hrow_; presolvehlink *clink = prob->clink_; /* Row bounds and activity, objective. */ double *rlo = prob->rlo_; double *rup = prob->rup_; double *acts = prob->acts_; double *cost = prob->cost_; const double tol = prob->feasibilityTolerance_; action *actions = new action[ncols]; #ifdef ZEROFAULT CoinZeroN(reinterpret_cast< char * >(actions), ncols * sizeof(action)); #endif int nactions = 0; /* This array is used to hold the indices of columns involved in substitutions, where we have the potential for cancellation. At the end they'll be checked to eliminate any actual zeros that may result. At the end of processing of each target row, the column indices of the target row are copied into zerocols. NOTE that usefulColumnInt_ is already in use for parameters implied_free and whichFree when this routine is called from implied_free. */ int *zerocols = new int[ncols]; int nzerocols = 0; int *x_to_y = new int[ncols]; int *rowsUsed = &prob->usefulRowInt_[0]; int nRowsUsed = 0; /* Open a loop to process the (equality r, implied free variable t) pairs in whichFree and implied_free. It can happen that removal of (row, natural singleton) pairs back in implied_free will reduce the length of column t. It can also happen that previous processing here has resulted in fillin or cancellation. So check again for column length and exclude natural singletons and overly dense columns. */ for (int iLook = 0; iLook < numberFree; iLook++) { const int tgtcol = whichFree[iLook]; const int tgtcol_len = colLengths[tgtcol]; const int tgtrow = implied_free[iLook]; const int tgtrow_len = rowLengths[tgtrow]; assert(fabs(rlo[tgtrow] - rup[tgtrow]) < tol); if (colLengths[tgtcol] < 2 || colLengths[tgtcol] > maxLook) { #if PRESOLVE_DEBUG > 3 std::cout << " skipping eqn " << tgtrow << " x(" << tgtcol << "); length now " << colLengths[tgtcol] << "." << std::endl; #endif continue; } CoinBigIndex tgtcs = colStarts[tgtcol]; CoinBigIndex tgtce = tgtcs + colLengths[tgtcol]; /* A few checks to make sure that the candidate pair is still suitable. Processing candidates earlier in the list can eliminate coefficients. * Don't use this pair if any involved row i has become a row singleton or empty. * Don't use this pair if any involved row has been modified as part of the processing for a previous candidate pair on this call. * Don't use this pair if a(i,tgtcol) has become zero. The checks on a(i,tgtcol) seem superfluous but it's possible that implied_free identified two candidate pairs to eliminate the same column. If we've already processed one of them, we could be in trouble. */ double tgtcoeff = 0.0; bool dealBreaker = false; for (CoinBigIndex kcol = tgtcs; kcol < tgtce; ++kcol) { const int i = rowIndices[kcol]; if (rowLengths[i] < 2 || prob->rowUsed(i)) { dealBreaker = true; break; } const double aij = colCoeffs[kcol]; if (fabs(aij) <= ZTOLDP2) { dealBreaker = true; break; } if (i == tgtrow) tgtcoeff = aij; } if (dealBreaker == true) { #if PRESOLVE_DEBUG > 3 std::cout << " skipping eqn " << tgtrow << " x(" << tgtcol << "); deal breaker (1)." << std::endl; #endif continue; } /* Check for numerical stability.A large coeff_factor will inflate the coefficients in the substitution formula. */ dealBreaker = false; for (CoinBigIndex kcol = tgtcs; kcol < tgtce; ++kcol) { const double coeff_factor = fabs(colCoeffs[kcol] / tgtcoeff); if (coeff_factor > 10.0) dealBreaker = true; } /* Given enough target rows with sufficient overlap, there's an outside chance we could overflow zerocols. Unlikely to ever happen. */ if (!dealBreaker && nzerocols + rowLengths[tgtrow] >= ncols) dealBreaker = true; if (dealBreaker == true) { #if PRESOLVE_DEBUG > 3 std::cout << " skipping eqn " << tgtrow << " x(" << tgtcol << "); deal breaker (2)." << std::endl; #endif continue; } /* If c(t) != 0, we will need to modify the objective coefficients and remember the original objective. */ const bool nonzero_cost = (fabs(cost[tgtcol]) > tol); double *costsx = (nonzero_cost ? new double[rowLengths[tgtrow]] : 0); #if PRESOLVE_DEBUG > 1 std::cout << " Eliminating row " << tgtrow << ", col " << tgtcol; if (nonzero_cost) std::cout << ", cost " << cost[tgtcol]; std::cout << "." << std::endl; #endif /* Count up the total number of coefficients in entangled rows and mark them as contaminated. */ int ntotels = 0; for (CoinBigIndex kcol = tgtcs; kcol < tgtce; ++kcol) { const int i = rowIndices[kcol]; ntotels += rowLengths[i]; PRESOLVEASSERT(!prob->rowUsed(i)); prob->setRowUsed(i); rowsUsed[nRowsUsed++] = i; } /* Create the postsolve object. Copy in all the affected rows. Take the opportunity to mark the entangled rows as changed and put them on the list of rows to process in the next round. coeffxs in particular holds the coefficients of the target column. */ action *ap = &actions[nactions++]; ap->col = tgtcol; ap->rowy = tgtrow; PRESOLVE_DETAIL_PRINT(printf("pre_subst %dC %dR E\n", tgtcol, tgtrow)); ap->nincol = tgtcol_len; ap->rows = new int[tgtcol_len]; ap->rlos = new double[tgtcol_len]; ap->rups = new double[tgtcol_len]; ap->costsx = costsx; ap->coeffxs = new double[tgtcol_len]; ap->ninrowxs = new int[tgtcol_len]; ap->rowcolsxs = new int[ntotels]; ap->rowelsxs = new double[ntotels]; ntotels = 0; for (CoinBigIndex kcol = tgtcs; kcol < tgtce; ++kcol) { const int ndx = static_cast< int >(kcol - tgtcs); const int i = rowIndices[kcol]; const CoinBigIndex krs = rowStarts[i]; prob->addRow(i); ap->rows[ndx] = i; ap->ninrowxs[ndx] = rowLengths[i]; ap->rlos[ndx] = rlo[i]; ap->rups[ndx] = rup[i]; ap->coeffxs[ndx] = colCoeffs[kcol]; CoinMemcpyN(&colIndices[krs], rowLengths[i], &ap->rowcolsxs[ntotels]); CoinMemcpyN(&rowCoeffs[krs], rowLengths[i], &ap->rowelsxs[ntotels]); ntotels += rowLengths[i]; } CoinBigIndex tgtrs = rowStarts[tgtrow]; CoinBigIndex tgtre = tgtrs + rowLengths[tgtrow]; /* Adjust the objective coefficients based on the substitution formula c'(j) = c(j) - a(rj)c(t)/a(rt) */ if (nonzero_cost) { const double tgtcost = cost[tgtcol]; for (CoinBigIndex krow = tgtrs; krow < tgtre; krow++) { const int j = colIndices[krow]; prob->addCol(j); costsx[krow - tgtrs] = cost[j]; double coeff = rowCoeffs[krow]; cost[j] -= (tgtcost * coeff) / tgtcoeff; } prob->change_bias(tgtcost * rlo[tgtrow] / tgtcoeff); cost[tgtcol] = 0.0; } #if PRESOLVE_DEBUG > 1 std::cout << " tgt (" << tgtrow << ") (" << tgtrow_len << "): "; for (CoinBigIndex krow = tgtrs; krow < tgtre; ++krow) { const int j = colIndices[krow]; const double arj = rowCoeffs[krow]; std::cout << "x(" << j << ") = " << arj << " (" << colLengths[j] << ") "; } std::cout << std::endl; #endif // kill small if wanted int relax = (prob->presolveOptions() & 0x60000) >> 17; double tolerance = 1.0e-12; for (int i = 0; i < relax; i++) tolerance *= 10.0; /* Sort the target row for efficiency when doing elimination. */ CoinSort_2(colIndices + tgtrs, colIndices + tgtre, rowCoeffs + tgtrs); /* Get down to the business of substituting for tgtcol in the entangled rows. Open a loop to walk the target column. We walk the saved column because the bulk store can change as we work. We don't want to repeat or miss a row. */ for (int colndx = 0; colndx < tgtcol_len; ++colndx) { int i = ap->rows[colndx]; if (i == tgtrow) continue; double ait = ap->coeffxs[colndx]; double coeff_factor = -ait / tgtcoeff; CoinBigIndex krs = rowStarts[i]; CoinBigIndex kre = krs + rowLengths[i]; #if PRESOLVE_DEBUG > 1 std::cout << " subst pre (" << i << ") (" << rowLengths[i] << "): "; for (CoinBigIndex krow = krs; krow < kre; ++krow) { const int j = colIndices[krow]; const double aij = rowCoeffs[krow]; std::cout << "x(" << j << ") = " << aij << " (" << colLengths[j] << ") "; } std::cout << std::endl; #endif /* Sort the row for efficiency and call add_row to do the actual business of changing coefficients due to substitution. This has the potential to trigger compaction of the row-major bulk store, so update bulk store indices. */ CoinSort_2(colIndices + krs, colIndices + kre, rowCoeffs + krs); bool outOfSpace = add_row(rowStarts, rlo, acts, rup, rowCoeffs, colIndices, rowLengths, rlink, nrows, coeff_factor, tolerance, i, tgtrow, x_to_y); if (outOfSpace) throwCoinError("out of memory", "CoinImpliedFree::presolve"); krs = rowStarts[i]; kre = krs + rowLengths[i]; tgtrs = rowStarts[tgtrow]; tgtre = tgtrs + rowLengths[tgtrow]; #if PRESOLVE_DEBUG > 1 std::cout << " subst aft (" << i << ") (" << rowLengths[i] << "): "; for (CoinBigIndex krow = krs; krow < kre; ++krow) { const int j = colIndices[krow]; const double aij = rowCoeffs[krow]; std::cout << "x(" << j << ") = " << aij << " (" << colLengths[j] << ") "; } std::cout << std::endl; #endif /* Now update the column-major representation from the row-major representation. This is easy if the coefficient already exists, but painful if there's fillin. presolve_find_row1 will return the index of the row in the column vector, or one past the end if it's missing. If the coefficient is fill, presolve_expand_col will make sure that there's room in the column for one more coefficient. This may require that the column be moved in the bulk store, so we need to update kcs and kce. Once we're done, a(it) = 0 (i.e., we've eliminated x(t) from row i). Physically remove the explicit zero from the row-major representation with presolve_delete_from_row. */ for (CoinBigIndex rowndx = 0; rowndx < tgtrow_len; ++rowndx) { const CoinBigIndex ktgt = tgtrs + rowndx; const int j = colIndices[ktgt]; CoinBigIndex kcs = colStarts[j]; CoinBigIndex kce = kcs + colLengths[j]; assert(colIndices[krs + x_to_y[rowndx]] == j); const double coeff = rowCoeffs[krs + x_to_y[rowndx]]; CoinBigIndex kcol = presolve_find_row1(i, kcs, kce, rowIndices); if (kcol < kce) { colCoeffs[kcol] = coeff; } else { outOfSpace = presolve_expand_col(colStarts, colCoeffs, rowIndices, colLengths, clink, ncols, j); if (outOfSpace) throwCoinError("out of memory", "CoinImpliedFree::presolve"); kcs = colStarts[j]; kce = kcs + colLengths[j]; rowIndices[kce] = i; colCoeffs[kce] = coeff; colLengths[j]++; } } presolve_delete_from_row(i, tgtcol, rowStarts, rowLengths, colIndices, rowCoeffs); #if PRESOLVE_DEBUG > 1 kre--; std::cout << " subst fin (" << i << ") (" << rowLengths[i] << "): "; for (CoinBigIndex krow = krs; krow < kre; ++krow) { const int j = colIndices[krow]; const double aij = rowCoeffs[krow]; std::cout << "x(" << j << ") = " << aij << " (" << colLengths[j] << ") "; } std::cout << std::endl; #endif } /* End of the substitution loop. Record the column indices of the target row so we can groom these columns later to remove possible explicit zeros. */ CoinMemcpyN(&colIndices[rowStarts[tgtrow]], rowLengths[tgtrow], &zerocols[nzerocols]); nzerocols += rowLengths[tgtrow]; /* Remove the target equality from the column- and row-major representations Somewhat painful in the colum-major representation. We have to walk the target row in the row-major representation and look up each coefficient in the column-major representation. */ for (CoinBigIndex krow = tgtrs; krow < tgtre; ++krow) { const int j = colIndices[krow]; #if PRESOLVE_DEBUG > 1 std::cout << " removing row " << tgtrow << " from col " << j << std::endl; #endif presolve_delete_from_col(tgtrow, j, colStarts, colLengths, rowIndices, colCoeffs); if (colLengths[j] == 0) { PRESOLVE_REMOVE_LINK(clink, j); } } /* Finally, physically remove the column from the column-major representation and the row from the row-major representation. */ PRESOLVE_REMOVE_LINK(clink, tgtcol); colLengths[tgtcol] = 0; PRESOLVE_REMOVE_LINK(rlink, tgtrow); rowLengths[tgtrow] = 0; rlo[tgtrow] = 0.0; rup[tgtrow] = 0.0; #if PRESOLVE_CONSISTENCY > 0 presolve_links_ok(prob); presolve_consistent(prob); #endif } /* That's it, we've processed all the candidate pairs. Clear the row used flags. */ for (int i = 0; i < nRowsUsed; i++) prob->unsetRowUsed(rowsUsed[i]); /* Trim the array of substitution transforms and queue up objects for postsolve. Also groom the problem representation to remove explicit zeros. */ if (nactions) { #if PRESOLVE_SUMMARY > 0 std::cout << "NSUBSTS: " << nactions << std::endl; #endif next = new subst_constraint_action(nactions, CoinCopyOfArray(actions, nactions), next); next = drop_zero_coefficients_action::presolve(prob, zerocols, nzerocols, next); #if PRESOLVE_CONSISTENCY > 0 presolve_links_ok(prob); presolve_consistent(prob); #endif } deleteAction(actions, action *); delete[] x_to_y; delete[] zerocols; #if COIN_PRESOLVE_TUNING > 0 double thisTime = 0.0; if (prob->tuning_) thisTime = CoinCpuTime(); #endif #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_sol(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows() - startEmptyRows; int droppedColumns = prob->countEmptyCols() - startEmptyColumns; std::cout << "Leaving subst_constraint_action::presolve, " << droppedRows << " rows, " << droppedColumns << " columns dropped"; #if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << thisTime - startTime << "s"; #endif std::cout << "." << std::endl; #endif return (next); } /* Undo the substitutions from presolve and reintroduce the target constraint and column. */ void subst_constraint_action::postsolve(CoinPostsolveMatrix *prob) const { #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering subst_constraint_action::postsolve, " << nactions_ << " constraints to process." << std::endl; #endif int ncols = prob->ncols_; char *cdone = prob->cdone_; char *rdone = prob->rdone_; const double ztolzb = prob->ztolzb_; presolve_check_threads(prob); presolve_check_free_list(prob); presolve_check_reduced_costs(prob); presolve_check_duals(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #endif /* Unpack the column-major representation. */ CoinBigIndex *colStarts = prob->mcstrt_; int *colLengths = prob->hincol_; int *rowIndices = prob->hrow_; double *colCoeffs = prob->colels_; /* Rim vectors, solution, reduced costs, duals, row activity. */ double *rlo = prob->rlo_; double *rup = prob->rup_; double *cost = prob->cost_; double *sol = prob->sol_; double *rcosts = prob->rcosts_; double *acts = prob->acts_; double *rowduals = prob->rowduals_; CoinBigIndex *link = prob->link_; CoinBigIndex &free_list = prob->free_list_; const double maxmin = prob->maxmin_; const action *const actions = actions_; const int nactions = nactions_; /* Open the main loop to step through the postsolve objects. First activity is to unpack the postsolve object. We have the target column and row indices, the full target column, and complete copies of all entangled rows (column indices, coefficients, lower and upper bounds). There may be a vector of objective coefficients which we'll get to later. */ for (const action *f = &actions[nactions - 1]; actions <= f; f--) { const int tgtcol = f->col; const int tgtrow = f->rowy; const int tgtcol_len = f->nincol; const double *tgtcol_coeffs = f->coeffxs; const int *entngld_rows = f->rows; const int *entngld_lens = f->ninrowxs; const int *entngld_colndxs = f->rowcolsxs; const double *entngld_colcoeffs = f->rowelsxs; const double *entngld_rlos = f->rlos; const double *entngld_rups = f->rups; const double *costs = f->costsx; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 1 std::cout << " reintroducing column x(" << tgtcol << ") and row " << tgtrow; if (costs) std::cout << ", nonzero costs"; std::cout << "." << std::endl; #endif /* We're about to reintroduce the target row and column; empty stubs should be present. All other rows should already be present. */ PRESOLVEASSERT(cdone[tgtcol] == DROP_COL); PRESOLVEASSERT(colLengths[tgtcol] == 0); PRESOLVEASSERT(rdone[tgtrow] == DROP_ROW); for (int cndx = 0; cndx < tgtcol_len; ++cndx) { if (entngld_rows[cndx] != tgtrow) PRESOLVEASSERT(rdone[entngld_rows[cndx]]); } /* In a postsolve matrix, we can't just check that the length of the row is zero. We need to look at all columns and confirm its absence. */ for (int j = 0; j < ncols; ++j) { if (colLengths[j] > 0 && cdone[j]) { const CoinBigIndex kcs = colStarts[j]; const int lenj = colLengths[j]; CoinBigIndex krow = presolve_find_row3(tgtrow, kcs, lenj, rowIndices, link); if (krow >= 0) { std::cout << " BAD COEFF! row " << tgtrow << " present in column " << j << " before reintroduction; a(" << tgtrow << "," << j << ") = " << colCoeffs[krow] << "; x(" << j << ") = " << sol[j] << "; cdone " << static_cast< int >(cdone[j]) << "." << std::endl; } } } #endif /* Find the copy of the target row. Restore the upper and lower bounds of entangled rows while we're looking. Recall that the target row is an equality. */ int tgtrow_len = -1; const int *tgtrow_colndxs = NULL; const double *tgtrow_coeffs = NULL; double tgtcoeff = 0.0; double tgtrhs = 1.0e50; int nel = 0; for (int cndx = 0; cndx < tgtcol_len; ++cndx) { int i = entngld_rows[cndx]; rlo[i] = entngld_rlos[cndx]; rup[i] = entngld_rups[cndx]; if (i == tgtrow) { tgtrow_len = entngld_lens[cndx]; tgtrow_colndxs = &entngld_colndxs[nel]; tgtrow_coeffs = &entngld_colcoeffs[nel]; tgtcoeff = tgtcol_coeffs[cndx]; tgtrhs = rlo[i]; } nel += entngld_lens[cndx]; } /* Solve the target equality to find the solution for the eliminated col. tgtcol is present in tgtrow_colndxs, so initialise sol[tgtcol] to zero to make sure it doesn't contribute. If we're debugging, check that the result is within bounds. */ double tgtexp = tgtrhs; sol[tgtcol] = 0.0; for (int ndx = 0; ndx < tgtrow_len; ++ndx) { int j = tgtrow_colndxs[ndx]; double coeffj = tgtrow_coeffs[ndx]; tgtexp -= coeffj * sol[j]; } sol[tgtcol] = tgtexp / tgtcoeff; #if PRESOLVE_DEBUG > 0 double *clo = prob->clo_; double *cup = prob->cup_; if (!(sol[tgtcol] > (clo[tgtcol] - ztolzb) && (cup[tgtcol] + ztolzb) > sol[tgtcol])) { std::cout << "BAD SOL: x(" << tgtcol << ") " << sol[tgtcol] << "; lb " << clo[tgtcol] << "; ub " << cup[tgtcol] << "." << std::endl; } #endif /* Now restore the original entangled rows. We first delete any columns present in tgtrow. This will remove any fillin, but may also remove columns that were originally present in both the entangled row and the target row. Note that even cancellations (explicit zeros) are present at this point --- in presolve, they were removed after the substition transform completed, hence they're already restored. What isn't present is the target column, which is deleted as part of the transform. */ { #if PRESOLVE_DEBUG > 2 std::cout << " removing coefficients:"; #endif for (int rndx = 0; rndx < tgtrow_len; ++rndx) { int j = tgtrow_colndxs[rndx]; if (j != tgtcol) for (int cndx = 0; cndx < tgtcol_len; ++cndx) { if (entngld_rows[cndx] != tgtrow) { #if PRESOLVE_DEBUG > 2 std::cout << " a(" << entngld_rows[cndx] << "," << j << ")"; #endif presolve_delete_from_col2(entngld_rows[cndx], j, colStarts, colLengths, rowIndices, link, &free_list); } } } #if PRESOLVE_DEBUG > 2 std::cout << std::endl; #endif #if PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob); presolve_check_free_list(prob); #endif /* Next we restore the original coefficients. The outer loop walks tgtcol; cols_i and coeffs_i are advanced as we go to point to each entangled row. The inner loop walks the entangled row and restores the row's coefficients. Tgtcol is handled as any other column. Skip tgtrow, we'll do it below. Since we don't have a row-major representation, we have to look for a(i,j) from entangled row i in the existing column j. If we find a(i,j), simply update it (and a(tgtrow,j) should not exist). If we don't find a(i,j), introduce it (and a(tgtrow,j) should exist). Recalculate the row activity while we're at it. */ #if PRESOLVE_DEBUG > 2 std::cout << " restoring coefficients:"; #endif colLengths[tgtcol] = 0; const int *cols_i = entngld_colndxs; const double *coeffs_i = entngld_colcoeffs; for (int cndx = 0; cndx < tgtcol_len; ++cndx) { const int leni = entngld_lens[cndx]; const int i = entngld_rows[cndx]; if (i != tgtrow) { double acti = 0.0; for (int rndx = 0; rndx < leni; ++rndx) { const int j = cols_i[rndx]; CoinBigIndex kcoli = presolve_find_row3(i, colStarts[j], colLengths[j], rowIndices, link); if (kcoli != -1) { #if PRESOLVE_DEBUG > 2 std::cout << " u a(" << i << "," << j << ")"; PRESOLVEASSERT(presolve_find_col1(j, 0, tgtrow_len, tgtrow_colndxs) == tgtrow_len); #endif colCoeffs[kcoli] = coeffs_i[rndx]; } else { #if PRESOLVE_DEBUG > 2 std::cout << " f a(" << i << "," << j << ")"; PRESOLVEASSERT(presolve_find_col1(j, 0, tgtrow_len, tgtrow_colndxs) < tgtrow_len); #endif CoinBigIndex kk = free_list; assert(kk >= 0 && kk < prob->bulk0_); free_list = link[free_list]; link[kk] = colStarts[j]; colStarts[j] = kk; colCoeffs[kk] = coeffs_i[rndx]; rowIndices[kk] = i; ++colLengths[j]; } acti += coeffs_i[rndx] * sol[j]; } acts[i] = acti; } cols_i += leni; coeffs_i += leni; } #if PRESOLVE_DEBUG > 2 std::cout << std::endl; #endif #if PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob); presolve_check_free_list(prob); #endif /* Restore tgtrow. Arguably we could to this in the previous loop, but we'd do a lot of unnecessary work. By construction, the target row is tight. */ #if PRESOLVE_DEBUG > 2 std::cout << " restoring row " << tgtrow << ":"; #endif for (int rndx = 0; rndx < tgtrow_len; ++rndx) { int j = tgtrow_colndxs[rndx]; #if PRESOLVE_DEBUG > 2 std::cout << " a(" << tgtrow << "," << j << ")"; #endif CoinBigIndex kk = free_list; assert(kk >= 0 && kk < prob->bulk0_); free_list = link[free_list]; link[kk] = colStarts[j]; colStarts[j] = kk; colCoeffs[kk] = tgtrow_coeffs[rndx]; rowIndices[kk] = tgtrow; ++colLengths[j]; } acts[tgtrow] = tgtrhs; #if PRESOLVE_DEBUG > 2 std::cout << std::endl; #endif #if PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob); presolve_check_free_list(prob); #endif } /* Restore original cost coefficients, if necessary. */ if (costs) { for (int ndx = 0; ndx < tgtrow_len; ++ndx) { cost[tgtrow_colndxs[ndx]] = costs[ndx]; } } /* Calculate the reduced cost for the column absent any contribution from tgtrow, then set the dual for tgtrow so that the reduced cost of tgtcol is zero. */ double dj = maxmin * cost[tgtcol]; rowduals[tgtrow] = 0.0; for (int cndx = 0; cndx < tgtcol_len; ++cndx) { int i = entngld_rows[cndx]; double coeff = tgtcol_coeffs[cndx]; dj -= rowduals[i] * coeff; } rowduals[tgtrow] = dj / tgtcoeff; rcosts[tgtcol] = 0.0; if (rowduals[tgtrow] > 0) prob->setRowStatus(tgtrow, CoinPrePostsolveMatrix::atUpperBound); else prob->setRowStatus(tgtrow, CoinPrePostsolveMatrix::atLowerBound); prob->setColumnStatus(tgtcol, CoinPrePostsolveMatrix::basic); #if PRESOLVE_DEBUG > 2 std::cout << " row " << tgtrow << " " << prob->rowStatusString(prob->getRowStatus(tgtrow)) << " dual " << rowduals[tgtrow] << std::endl; std::cout << " col " << tgtcol << " " << prob->columnStatusString(prob->getColumnStatus(tgtcol)) << " dj " << dj << std::endl; #endif #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 cdone[tgtcol] = SUBST_ROW; rdone[tgtrow] = SUBST_ROW; #endif } #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob); presolve_check_free_list(prob); presolve_check_reduced_costs(prob); presolve_check_duals(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving subst_constraint_action::postsolve." << std::endl; #endif #endif return; } /* Next time someone builds this code on Windows, check to see if deleteAction is still necessary. -- lh, 121114 -- */ subst_constraint_action::~subst_constraint_action() { const action *actions = actions_; for (int i = 0; i < nactions_; ++i) { delete[] actions[i].rows; delete[] actions[i].rlos; delete[] actions[i].rups; delete[] actions[i].coeffxs; delete[] actions[i].ninrowxs; delete[] actions[i].rowcolsxs; delete[] actions[i].rowelsxs; //delete [](double*)actions[i].costsx ; deleteAction(actions[i].costsx, double *); } // Must add cast to placate MS compiler //delete [] (subst_constraint_action::action*)actions_ ; deleteAction(actions_, subst_constraint_action::action *); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinWarmStartDual.hpp0000644000175200017520000001161713414454441017641 0ustar coincoin/* $Id: CoinWarmStartDual.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinWarmStartDual_H #define CoinWarmStartDual_H #include "CoinHelperFunctions.hpp" #include "CoinWarmStart.hpp" #include "CoinWarmStartVector.hpp" //############################################################################# /** WarmStart information that is only a dual vector */ class CoinWarmStartDual : public virtual CoinWarmStart { public: /// return the size of the dual vector inline int size() const { return dual_.size(); } /// return a pointer to the array of duals inline const double *dual() const { return dual_.values(); } /** Assign the dual vector to be the warmstart information. In this method the object assumes ownership of the pointer and upon return "dual" will be a NULL pointer. If copying is desirable use the constructor. */ inline void assignDual(int size, double *&dual) { dual_.assignVector(size, dual); } CoinWarmStartDual() {} CoinWarmStartDual(int size, const double *dual) : dual_(size, dual) { } CoinWarmStartDual(const CoinWarmStartDual &rhs) : dual_(rhs.dual_) { } CoinWarmStartDual &operator=(const CoinWarmStartDual &rhs) { if (this != &rhs) { dual_ = rhs.dual_; } return *this; } /** `Virtual constructor' */ virtual CoinWarmStart *clone() const { return new CoinWarmStartDual(*this); } virtual ~CoinWarmStartDual() {} /*! \name Dual warm start `diff' methods */ //@{ /*! \brief Generate a `diff' that can convert the warm start passed as a parameter to the warm start specified by \c this. The capabilities are limited: the basis passed as a parameter can be no larger than the basis pointed to by \c this. */ virtual CoinWarmStartDiff * generateDiff(const CoinWarmStart *const oldCWS) const; /*! \brief Apply \p diff to this warm start. Update this warm start by applying \p diff. It's assumed that the allocated capacity of the warm start is sufficiently large. */ virtual void applyDiff(const CoinWarmStartDiff *const cwsdDiff); #if 0 protected: inline const CoinWarmStartVector& warmStartVector() const { return dual_; } #endif //@} private: ///@name Private data members CoinWarmStartVector< double > dual_; }; //############################################################################# /*! \class CoinWarmStartDualDiff \brief A `diff' between two CoinWarmStartDual objects This class exists in order to hide from the world the details of calculating and representing a `diff' between two CoinWarmStartDual objects. For convenience, assignment, cloning, and deletion are visible to the world, and default and copy constructors are made available to derived classes. Knowledge of the rest of this structure, and of generating and applying diffs, is restricted to the friend functions CoinWarmStartDual::generateDiff() and CoinWarmStartDual::applyDiff(). The actual data structure is a pair of vectors, #diffNdxs_ and #diffVals_. */ class CoinWarmStartDualDiff : public virtual CoinWarmStartDiff { public: /*! \brief `Virtual constructor' */ virtual CoinWarmStartDiff *clone() const { return new CoinWarmStartDualDiff(*this); } /*! \brief Assignment */ virtual CoinWarmStartDualDiff &operator=(const CoinWarmStartDualDiff &rhs) { if (this != &rhs) { diff_ = rhs.diff_; } return *this; } /*! \brief Destructor */ virtual ~CoinWarmStartDualDiff() {} protected: /*! \brief Default constructor This is protected (rather than private) so that derived classes can see it when they make their default constructor protected or private. */ CoinWarmStartDualDiff() : diff_() { } /*! \brief Copy constructor For convenience when copying objects containing CoinWarmStartDualDiff objects. But consider whether you should be using #clone() to retain polymorphism. This is protected (rather than private) so that derived classes can see it when the make their copy constructor protected or private. */ CoinWarmStartDualDiff(const CoinWarmStartDualDiff &rhs) : diff_(rhs.diff_) { } private: friend CoinWarmStartDiff * CoinWarmStartDual::generateDiff(const CoinWarmStart *const oldCWS) const; friend void CoinWarmStartDual::applyDiff(const CoinWarmStartDiff *const diff); /*! \brief Standard constructor */ CoinWarmStartDualDiff(int sze, const unsigned int *const diffNdxs, const double *const diffVals) : diff_(sze, diffNdxs, diffVals) { } /*! \brief The difference in the dual vector is simply the difference in a vector. */ CoinWarmStartVectorDiff< double > diff_; }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinFactorization.hpp0000644000175200017520000020061513414454441017721 0ustar coincoin/* $Id: CoinFactorization.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /* Authors John Forrest */ #ifndef CoinFactorization_H #define CoinFactorization_H #define EXTRA_U_SPACE 4 //#define COIN_ONE_ETA_COPY 100 #include #include #include #include #include #include "CoinTypes.hpp" #include "CoinIndexedVector.hpp" class CoinPackedMatrix; /** This deals with Factorization and Updates This class started with a parallel simplex code I was writing in the mid 90's. The need for parallelism led to many complications and I have simplified as much as I could to get back to this. I was aiming at problems where I might get speed-up so I was looking at dense problems or ones with structure. This led to permuting input and output vectors and to increasing the number of rows each rank-one update. This is still in as a minor overhead. I have also put in handling for hyper-sparsity. I have taken out all outer loop unrolling, dense matrix handling and most of the book-keeping for slacks. Also I always use FTRAN approach to updating even if factorization fairly dense. All these could improve performance. I blame some of the coding peculiarities on the history of the code but mostly it is just because I can't do elegant code (or useful comments). I am assuming that 32 bits is enough for number of rows or columns, but CoinBigIndex may be redefined to get 64 bits. */ class CoinFactorization { friend void CoinFactorizationUnitTest(const std::string &mpsDir); public: /**@name Constructors and destructor and copy */ //@{ /// Default constructor CoinFactorization(); /// Copy constructor CoinFactorization(const CoinFactorization &other); /// Destructor ~CoinFactorization(); /// Delete all stuff (leaves as after CoinFactorization()) void almostDestructor(); /// Debug show object (shows one representation) void show_self() const; /// Debug - save on file - 0 if no error int saveFactorization(const char *file) const; /** Debug - restore from file - 0 if no error on file. If factor true then factorizes as if called from ClpFactorization */ int restoreFactorization(const char *file, bool factor = false); /// Debug - sort so can compare void sort() const; /// = copy CoinFactorization &operator=(const CoinFactorization &other); //@} /**@name Do factorization */ //@{ /** When part of LP - given by basic variables. Actually does factorization. Arrays passed in have non negative value to say basic. If status is okay, basic variables have pivot row - this is only needed If status is singular, then basic variables have pivot row and ones thrown out have -1 returns 0 -okay, -1 singular, -2 too many in basis, -99 memory */ int factorize(const CoinPackedMatrix &matrix, int rowIsBasic[], int columnIsBasic[], double areaFactor = 0.0); /** When given as triplets. Actually does factorization. maximumL is guessed maximum size of L part of final factorization, maximumU of U part. These are multiplied by areaFactor which can be computed by user or internally. Arrays are copied in. I could add flag to delete arrays to save a bit of memory. If status okay, permutation has pivot rows - this is only needed If status is singular, then basic variables have pivot row and ones thrown out have -1 returns 0 -okay, -1 singular, -99 memory */ int factorize(int numberRows, int numberColumns, int numberElements, int maximumL, int maximumU, const int indicesRow[], const int indicesColumn[], const double elements[], int permutation[], double areaFactor = 0.0); /** Two part version for maximum flexibility This part creates arrays for user to fill. estimateNumberElements is safe estimate of number returns 0 -okay, -99 memory */ int factorizePart1(int numberRows, int numberColumns, int estimateNumberElements, int *indicesRow[], int *indicesColumn[], CoinFactorizationDouble *elements[], double areaFactor = 0.0); /** This is part two of factorization Arrays belong to factorization and were returned by part 1 If status okay, permutation has pivot rows - this is only needed If status is singular, then basic variables have pivot row and ones thrown out have -1 returns 0 -okay, -1 singular, -99 memory */ int factorizePart2(int permutation[], int exactNumberElements); /// Condition number - product of pivots after factorization double conditionNumber() const; //@} /**@name general stuff such as permutation or status */ //@{ /// Returns status inline int status() const { return status_; } /// Sets status inline void setStatus(int value) { status_ = value; } /// Returns number of pivots since factorization inline int pivots() const { return numberPivots_; } /// Sets number of pivots since factorization inline void setPivots(int value) { numberPivots_ = value; } /// Returns address of permute region inline int *permute() const { return permute_.array(); } /// Returns address of pivotColumn region (also used for permuting) inline int *pivotColumn() const { return pivotColumn_.array(); } /// Returns address of pivot region inline CoinFactorizationDouble *pivotRegion() const { return pivotRegion_.array(); } /// Returns address of permuteBack region inline int *permuteBack() const { return permuteBack_.array(); } /// Returns address of lastRow region inline int *lastRow() const { return lastRow_.array(); } /** Returns address of pivotColumnBack region (also used for permuting) Now uses firstCount to save memory allocation */ inline int *pivotColumnBack() const { //return firstCount_.array(); return pivotColumnBack_.array(); } /// Start of each row in L inline int *startRowL() const { return startRowL_.array(); } /// Start of each column in L inline int *startColumnL() const { return startColumnL_.array(); } /// Index of column in row for L inline int *indexColumnL() const { return indexColumnL_.array(); } /// Row indices of L inline int *indexRowL() const { return indexRowL_.array(); } /// Elements in L (row copy) inline CoinFactorizationDouble *elementByRowL() const { return elementByRowL_.array(); } /// Number of Rows after iterating inline int numberRowsExtra() const { return numberRowsExtra_; } /// Set number of Rows after factorization inline void setNumberRows(int value) { numberRows_ = value; } /// Number of Rows after factorization inline int numberRows() const { return numberRows_; } /// Number in L inline int numberL() const { return numberL_; } /// Base of L inline int baseL() const { return baseL_; } /// Maximum of Rows after iterating inline int maximumRowsExtra() const { return maximumRowsExtra_; } /// Total number of columns in factorization inline int numberColumns() const { return numberColumns_; } /// Total number of elements in factorization inline int numberElements() const { return totalElements_; } /// Length of FT vector inline int numberForrestTomlin() const { return numberInColumn_.array()[numberColumnsExtra_]; } /// Number of good columns in factorization inline int numberGoodColumns() const { return numberGoodU_; } /// Whether larger areas needed inline double areaFactor() const { return areaFactor_; } inline void areaFactor(double value) { areaFactor_ = value; } /// Returns areaFactor but adjusted for dense double adjustedAreaFactor() const; /// Allows change of pivot accuracy check 1.0 == none >1.0 relaxed inline void relaxAccuracyCheck(double value) { relaxCheck_ = value; } inline double getAccuracyCheck() const { return relaxCheck_; } /// Level of detail of messages inline int messageLevel() const { return messageLevel_; } void messageLevel(int value); /// Maximum number of pivots between factorizations inline int maximumPivots() const { return maximumPivots_; } void maximumPivots(int value); /// Gets dense threshold inline int denseThreshold() const { return denseThreshold_; } /// Sets dense threshold inline void setDenseThreshold(int value) { denseThreshold_ = value; } /// Pivot tolerance inline double pivotTolerance() const { return pivotTolerance_; } void pivotTolerance(double value); /// Zero tolerance inline double zeroTolerance() const { return zeroTolerance_; } void zeroTolerance(double value); #ifndef COIN_FAST_CODE /// Whether slack value is +1 or -1 inline double slackValue() const { return slackValue_; } void slackValue(double value); #endif /// Returns maximum absolute value in factorization double maximumCoefficient() const; /// true if Forrest Tomlin update, false if PFI inline bool forrestTomlin() const { return doForrestTomlin_; } inline void setForrestTomlin(bool value) { doForrestTomlin_ = value; } /// True if FT update and space inline bool spaceForForrestTomlin() const { int start = startColumnU_.array()[maximumColumnsExtra_]; int space = lengthAreaU_ - (start + numberRowsExtra_); return (space >= 0) && doForrestTomlin_; } //@} /**@name some simple stuff */ //@{ /// Returns number of dense rows inline int numberDense() const { return numberDense_; } /// Returns number in U area inline int numberElementsU() const { return lengthU_; } /// Setss number in U area inline void setNumberElementsU(int value) { lengthU_ = value; } /// Returns length of U area inline int lengthAreaU() const { return lengthAreaU_; } /// Returns number in L area inline int numberElementsL() const { return lengthL_; } /// Returns length of L area inline int lengthAreaL() const { return lengthAreaL_; } /// Returns number in R area inline int numberElementsR() const { return lengthR_; } /// Number of compressions done inline int numberCompressions() const { return numberCompressions_; } /// Number of entries in each row inline int *numberInRow() const { return numberInRow_.array(); } /// Number of entries in each column inline int *numberInColumn() const { return numberInColumn_.array(); } /// Elements of U inline CoinFactorizationDouble *elementU() const { return elementU_.array(); } /// Row indices of U inline int *indexRowU() const { return indexRowU_.array(); } /// Start of each column in U inline int *startColumnU() const { return startColumnU_.array(); } /// Maximum number of Columns after iterating inline int maximumColumnsExtra() { return maximumColumnsExtra_; } /** L to U bias 0 - U bias, 1 - some U bias, 2 some L bias, 3 L bias */ inline int biasLU() const { return biasLU_; } inline void setBiasLU(int value) { biasLU_ = value; } /** Array persistence flag If 0 then as now (delete/new) 1 then only do arrays if bigger needed 2 as 1 but give a bit extra if bigger needed */ inline int persistenceFlag() const { return persistenceFlag_; } void setPersistenceFlag(int value); //@} /**@name rank one updates which do exist */ //@{ /** Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModifying is true will do all accuracy checks before modifying factorization. Whether to set this depends on speed considerations. You could just do this on first iteration after factorization and thereafter re-factorize partial update already in U */ int replaceColumn(CoinIndexedVector *regionSparse, int pivotRow, double pivotCheck, bool checkBeforeModifying = false, double acceptablePivot = 1.0e-8); /** Combines BtranU and delete elements If deleted is NULL then delete elements otherwise store where elements are */ void replaceColumnU(CoinIndexedVector *regionSparse, int *deleted, int internalPivotRow); #ifdef ABC_USE_COIN_FACTORIZATION /** returns empty fake vector carved out of existing later - maybe use associated arrays */ CoinIndexedVector *fakeVector(CoinIndexedVector *vector, int already = 0) const; void deleteFakeVector(CoinIndexedVector *vector, CoinIndexedVector *fakeVector) const; /** Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial update already in U */ double checkReplacePart1(CoinIndexedVector *regionSparse, int pivotRow); /** Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial update in vector */ double checkReplacePart1(CoinIndexedVector *regionSparse, CoinIndexedVector *partialUpdate, int pivotRow); /** Checks if can replace one Column in basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room, 5 max pivots */ int checkReplacePart2(int pivotRow, double btranAlpha, double ftranAlpha, double ftAlpha, double acceptablePivot = 1.0e-8); /** Replaces one Column to basis, partial update already in U */ void replaceColumnPart3(CoinIndexedVector *regionSparse, int pivotRow, double alpha); /** Replaces one Column to basis, partial update in vector */ void replaceColumnPart3(CoinIndexedVector *regionSparse, CoinIndexedVector *partialUpdate, int pivotRow, double alpha); /** Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no room regionSparse starts as zero and is zero at end. Note - if regionSparse2 packed on input - will be packed on output long regions */ int updateColumnFT(CoinIndexedVector ®ionSparse); int updateColumnFTPart1(CoinIndexedVector ®ionSparse); void updateColumnFTPart2(CoinIndexedVector ®ionSparse); /** Updates one column (FTRAN) - long region Tries to do FT update puts partial update in vector */ void updateColumnFT(CoinIndexedVector ®ionSparseFT, CoinIndexedVector &partialUpdate, int which); /** Updates one column (FTRAN) long region */ int updateColumn(CoinIndexedVector ®ionSparse) const; /** Updates one column (FTRAN) from regionFT Tries to do FT update number returned is negative if no room. Also updates regionOther - long region*/ int updateTwoColumnsFT(CoinIndexedVector ®ionSparseFT, CoinIndexedVector ®ionSparseOther); /** Updates one column (BTRAN) - long region*/ int updateColumnTranspose(CoinIndexedVector ®ionSparse) const; /** Updates one column (FTRAN) - long region */ void updateColumnCpu(CoinIndexedVector ®ionSparse, int whichCpu) const; /** Updates one column (BTRAN) - long region */ void updateColumnTransposeCpu(CoinIndexedVector ®ionSparse, int whichCpu) const; /** Updates one full column (FTRAN) - long region */ void updateFullColumn(CoinIndexedVector ®ionSparse) const; /** Updates one full column (BTRAN) - long region */ void updateFullColumnTranspose(CoinIndexedVector ®ionSparse) const; /** Updates one column for dual steepest edge weights (FTRAN) - long region */ void updateWeights(CoinIndexedVector ®ionSparse) const; /// Returns true if wants tableauColumn in replaceColumn inline bool wantsTableauColumn() const { return false; } /// Pivot tolerance inline double minimumPivotTolerance() const { return pivotTolerance_; } inline void minimumPivotTolerance(double value) { pivotTolerance(value); } /// Says parallel inline void setParallelMode(int value) { parallelMode_ = value; } /// Sets solve mode inline void setSolveMode(int value) { parallelMode_ &= 3; parallelMode_ |= (value << 2); } /// Sets solve mode inline int solveMode() const { return parallelMode_ >> 2; } /// Update partial Ftran by R update void updatePartialUpdate(CoinIndexedVector &partialUpdate); /// Makes a non-singular basis by replacing variables void makeNonSingular(int *COIN_RESTRICT sequence); #endif #if ABOCA_LITE_FACTORIZATION /// Does btranU part of replaceColumn (skipping entries) void replaceColumn1(CoinIndexedVector *regionSparse, int pivotRow); /// Does replaceColumn - having already done btranU int replaceColumn2(CoinIndexedVector *regionSparse, int pivotRow, double pivotCheck); #endif //@} /**@name various uses of factorization (return code number elements) which user may want to know about */ //@{ /** Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no room regionSparse starts as zero and is zero at end. Note - if regionSparse2 packed on input - will be packed on output */ int updateColumnFT(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2); /** This version has same effect as above with FTUpdate==false so number returned is always >=0 */ int updateColumn(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute = false) const; /** Updates one column (FTRAN) from region2 Tries to do FT update number returned is negative if no room. Also updates region3 region1 starts as zero and is zero at end */ int updateTwoColumnsFT(CoinIndexedVector *regionSparse1, CoinIndexedVector *regionSparse2, CoinIndexedVector *regionSparse3, bool noPermuteRegion3 = false); /** Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output */ int updateColumnTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) const; /// Part of twocolumnsTranspose void updateOneColumnTranspose(CoinIndexedVector *regionWork, int &statistics) const; /** Updates two columns (BTRAN) from regionSparse2 and 3 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output - same for 3 */ void updateTwoColumnsTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, CoinIndexedVector *regionSparse3, int type) const; /** makes a row copy of L for speed and to allow very sparse problems */ void goSparse(); /** get sparse threshold */ inline int sparseThreshold() const { return sparseThreshold_; } /** set sparse threshold */ void sparseThreshold(int value); //@} /// *** Below this user may not want to know about /**@name various uses of factorization (return code number elements) which user may not want to know about (left over from my LP code) */ //@{ /// Get rid of all memory inline void clearArrays() { gutsOfDestructor(); } //@} /**@name various updates - none of which have been written! */ //@{ /** Adds given elements to Basis and updates factorization, can increase size of basis. Returns rank */ int add(int numberElements, int indicesRow[], int indicesColumn[], double elements[]); /** Adds one Column to basis, can increase size of basis. Returns rank */ int addColumn(int numberElements, int indicesRow[], double elements[]); /** Adds one Row to basis, can increase size of basis. Returns rank */ int addRow(int numberElements, int indicesColumn[], double elements[]); /// Deletes one Column from basis, returns rank int deleteColumn(int Row); /// Deletes one Row from basis, returns rank int deleteRow(int Row); /** Replaces one Row in basis, At present assumes just a singleton on row is in basis returns 0=OK, 1=Probably OK, 2=singular, 3 no space */ int replaceRow(int whichRow, int numberElements, const int indicesColumn[], const double elements[]); /// Takes out all entries for given rows void emptyRows(int numberToEmpty, const int which[]); //@} /**@name used by ClpFactorization */ /// See if worth going sparse void checkSparse(); /// For statistics #if 0 //def CLP_FACTORIZATION_INSTRUMENT inline bool collectStatistics() const { return collectStatistics_;} /// For statistics inline void setCollectStatistics(bool onOff) const { collectStatistics_ = onOff;} #else inline bool collectStatistics() const { return true; } /// For statistics inline void setCollectStatistics(bool onOff) const { } #endif /// The real work of constructors etc 0 just scalars, 1 bit normal void gutsOfDestructor(int type = 1); /// 1 bit - tolerances etc, 2 more, 4 dummy arrays void gutsOfInitialize(int type); void gutsOfCopy(const CoinFactorization &other); /// Reset all sparsity etc statistics void resetStatistics(); //@} /**@name used by factorization */ /// Gets space for a factorization, called by constructors void getAreas(int numberRows, int numberColumns, int maximumL, int maximumU); /** PreProcesses raw triplet data. state is 0 - triplets, 1 - some counts etc , 2 - .. */ void preProcess(int state, int possibleDuplicates = -1); /// Does most of factorization int factor(); protected: /** Does sparse phase of factorization return code is <0 error, 0= finished */ int factorSparse(); /** Does sparse phase of factorization (for smaller problems) return code is <0 error, 0= finished */ int factorSparseSmall(); /** Does sparse phase of factorization (for larger problems) return code is <0 error, 0= finished */ int factorSparseLarge(); /** Does dense phase of factorization return code is <0 error, 0= finished */ int factorDense(); /// Pivots when just one other row so faster? bool pivotOneOtherRow(int pivotRow, int pivotColumn); /// Does one pivot on Row Singleton in factorization bool pivotRowSingleton(int pivotRow, int pivotColumn); /// Does one pivot on Column Singleton in factorization bool pivotColumnSingleton(int pivotRow, int pivotColumn); /** Gets space for one Column with given length, may have to do compression (returns True if successful), also moves existing vector, extraNeeded is over and above present */ bool getColumnSpace(int iColumn, int extraNeeded); /** Reorders U so contiguous and in order (if there is space) Returns true if it could */ bool reorderU(); /** getColumnSpaceIterateR. Gets space for one extra R element in Column may have to do compression (returns true) also moves existing vector */ bool getColumnSpaceIterateR(int iColumn, double value, int iRow); /** getColumnSpaceIterate. Gets space for one extra U element in Column may have to do compression (returns true) also moves existing vector. Returns -1 if no memory or where element was put Used by replaceRow (turns off R version) */ int getColumnSpaceIterate(int iColumn, double value, int iRow); /** Gets space for one Row with given length, may have to do compression (returns True if successful), also moves existing vector */ bool getRowSpace(int iRow, int extraNeeded); /** Gets space for one Row with given length while iterating, may have to do compression (returns True if successful), also moves existing vector */ bool getRowSpaceIterate(int iRow, int extraNeeded); /// Checks that row and column copies look OK void checkConsistency(); /// Adds a link in chain of equal counts inline void addLink(int index, int count) { int *nextCount = nextCount_.array(); int *firstCount = firstCount_.array(); int *lastCount = lastCount_.array(); int next = firstCount[count]; lastCount[index] = -2 - count; if (next < 0) { //first with that count firstCount[count] = index; nextCount[index] = -1; } else { firstCount[count] = index; nextCount[index] = next; lastCount[next] = index; } } /// Deletes a link in chain of equal counts inline void deleteLink(int index) { int *nextCount = nextCount_.array(); int *firstCount = firstCount_.array(); int *lastCount = lastCount_.array(); int next = nextCount[index]; int last = lastCount[index]; if (last >= 0) { nextCount[last] = next; } else { int count = -last - 2; firstCount[count] = next; } if (next >= 0) { lastCount[next] = last; } nextCount[index] = -2; lastCount[index] = -2; return; } /// Separate out links with same row/column count void separateLinks(int count, bool rowsFirst); /// Cleans up at end of factorization void cleanup(); /// Updates part of column (FTRANL) void updateColumnL(CoinIndexedVector *region, int *indexIn) const; /// Updates part of column (FTRANL) when densish void updateColumnLDensish(CoinIndexedVector *region, int *indexIn) const; /// Updates part of column (FTRANL) when sparse void updateColumnLSparse(CoinIndexedVector *region, int *indexIn) const; /// Updates part of column (FTRANL) when sparsish void updateColumnLSparsish(CoinIndexedVector *region, int *indexIn) const; /// Updates part of column (FTRANR) without FT update void updateColumnR(CoinIndexedVector *region) const; /** Updates part of column (FTRANR) with FT update. Also stores update after L and R */ void updateColumnRFT(CoinIndexedVector *region, int *indexIn); /// Updates part of column (FTRANU) void updateColumnU(CoinIndexedVector *region, int *indexIn) const; /// Updates part of column (FTRANU) when sparse void updateColumnUSparse(CoinIndexedVector *regionSparse, int *indexIn) const; /// Updates part of column (FTRANU) when sparsish void updateColumnUSparsish(CoinIndexedVector *regionSparse, int *indexIn) const; /// Updates part of column (FTRANU) int updateColumnUDensish(double *COIN_RESTRICT region, int *COIN_RESTRICT regionIndex) const; /// Updates part of 2 columns (FTRANU) real work void updateTwoColumnsUDensish( int &numberNonZero1, double *COIN_RESTRICT region1, int *COIN_RESTRICT index1, int &numberNonZero2, double *COIN_RESTRICT region2, int *COIN_RESTRICT index2) const; /// Updates part of column PFI (FTRAN) (after rest) void updateColumnPFI(CoinIndexedVector *regionSparse) const; /// Permutes back at end of updateColumn void permuteBack(CoinIndexedVector *regionSparse, CoinIndexedVector *outVector) const; /// Updates part of column transpose PFI (BTRAN) (before rest) void updateColumnTransposePFI(CoinIndexedVector *region) const; /** Updates part of column transpose (BTRANU), assumes index is sorted i.e. region is correct */ void updateColumnTransposeU(CoinIndexedVector *region, int smallestIndex) const; /** Updates part of column transpose (BTRANU) when sparsish, assumes index is sorted i.e. region is correct */ void updateColumnTransposeUSparsish(CoinIndexedVector *region, int smallestIndex) const; /** Updates part of column transpose (BTRANU) when densish, assumes index is sorted i.e. region is correct */ void updateColumnTransposeUDensish(CoinIndexedVector *region, int smallestIndex) const; /** Updates part of column transpose (BTRANU) when sparse, assumes index is sorted i.e. region is correct */ void updateColumnTransposeUSparse(CoinIndexedVector *region) const; /** Updates part of column transpose (BTRANU) by column assumes index is sorted i.e. region is correct */ void updateColumnTransposeUByColumn(CoinIndexedVector *region, int smallestIndex) const; /// Updates part of column transpose (BTRANR) void updateColumnTransposeR(CoinIndexedVector *region) const; /// Updates part of column transpose (BTRANR) when dense void updateColumnTransposeRDensish(CoinIndexedVector *region) const; /// Updates part of column transpose (BTRANR) when sparse void updateColumnTransposeRSparse(CoinIndexedVector *region) const; /// Updates part of column transpose (BTRANL) void updateColumnTransposeL(CoinIndexedVector *region) const; /// Updates part of column transpose (BTRANL) when densish by column void updateColumnTransposeLDensish(CoinIndexedVector *region) const; /// Updates part of column transpose (BTRANL) when densish by row void updateColumnTransposeLByRow(CoinIndexedVector *region) const; /// Updates part of column transpose (BTRANL) when sparsish by row void updateColumnTransposeLSparsish(CoinIndexedVector *region) const; /// Updates part of column transpose (BTRANL) when sparse (by Row) void updateColumnTransposeLSparse(CoinIndexedVector *region) const; public: /** Replaces one Column to basis for PFI returns 0=OK, 1=Probably OK, 2=singular, 3=no room. In this case region is not empty - it is incoming variable (updated) */ int replaceColumnPFI(CoinIndexedVector *regionSparse, int pivotRow, double alpha); protected: /** Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular */ int checkPivot(double saveFromU, double oldPivot) const; /********************************* START LARGE TEMPLATE ********/ #ifdef INT_IS_8 #define COINFACTORIZATION_BITS_PER_INT 64 #define COINFACTORIZATION_SHIFT_PER_INT 6 #define COINFACTORIZATION_MASK_PER_INT 0x3f #else #define COINFACTORIZATION_BITS_PER_INT 32 #define COINFACTORIZATION_SHIFT_PER_INT 5 #define COINFACTORIZATION_MASK_PER_INT 0x1f #endif template < class T > inline bool pivot(int pivotRow, int pivotColumn, int pivotRowPosition, int pivotColumnPosition, CoinFactorizationDouble work[], unsigned int workArea2[], int increment2, T markRow[], int largeInteger) { int *indexColumnU = indexColumnU_.array(); int *startColumnU = startColumnU_.array(); int *numberInColumn = numberInColumn_.array(); CoinFactorizationDouble *elementU = elementU_.array(); int *indexRowU = indexRowU_.array(); int *startRowU = startRowU_.array(); int *numberInRow = numberInRow_.array(); CoinFactorizationDouble *elementL = elementL_.array(); int *indexRowL = indexRowL_.array(); int *saveColumn = saveColumn_.array(); int *nextRow = nextRow_.array(); int *lastRow = lastRow_.array(); //store pivot columns (so can easily compress) int numberInPivotRow = numberInRow[pivotRow] - 1; int startColumn = startColumnU[pivotColumn]; int numberInPivotColumn = numberInColumn[pivotColumn] - 1; int endColumn = startColumn + numberInPivotColumn + 1; int put = 0; int startRow = startRowU[pivotRow]; int endRow = startRow + numberInPivotRow + 1; if (pivotColumnPosition < 0) { for (pivotColumnPosition = startRow; pivotColumnPosition < endRow; pivotColumnPosition++) { int iColumn = indexColumnU[pivotColumnPosition]; if (iColumn != pivotColumn) { saveColumn[put++] = iColumn; } else { break; } } } else { for (int i = startRow; i < pivotColumnPosition; i++) { saveColumn[put++] = indexColumnU[i]; } } assert(pivotColumnPosition < endRow); assert(indexColumnU[pivotColumnPosition] == pivotColumn); pivotColumnPosition++; for (; pivotColumnPosition < endRow; pivotColumnPosition++) { saveColumn[put++] = indexColumnU[pivotColumnPosition]; } //take out this bit of indexColumnU int next = nextRow[pivotRow]; int last = lastRow[pivotRow]; nextRow[last] = next; lastRow[next] = last; nextRow[pivotRow] = numberGoodU_; //use for permute lastRow[pivotRow] = -2; numberInRow[pivotRow] = 0; //store column in L, compress in U and take column out int l = lengthL_; if (l + numberInPivotColumn > lengthAreaL_) { //need more memory if ((messageLevel_ & 4) != 0) printf("more memory needed in middle of invert\n"); return false; } //l+=currentAreaL_->elementByColumn-elementL; int lSave = l; int *startColumnL = startColumnL_.array(); startColumnL[numberGoodL_] = l; //for luck and first time numberGoodL_++; startColumnL[numberGoodL_] = l + numberInPivotColumn; lengthL_ += numberInPivotColumn; if (pivotRowPosition < 0) { for (pivotRowPosition = startColumn; pivotRowPosition < endColumn; pivotRowPosition++) { int iRow = indexRowU[pivotRowPosition]; if (iRow != pivotRow) { indexRowL[l] = iRow; elementL[l] = elementU[pivotRowPosition]; markRow[iRow] = static_cast< T >(l - lSave); l++; //take out of row list int start = startRowU[iRow]; int end = start + numberInRow[iRow]; int where = start; while (indexColumnU[where] != pivotColumn) { where++; } /* endwhile */ #if DEBUG_COIN if (where >= end) { abort(); } #endif indexColumnU[where] = indexColumnU[end - 1]; numberInRow[iRow]--; } else { break; } } } else { int i; for (i = startColumn; i < pivotRowPosition; i++) { int iRow = indexRowU[i]; markRow[iRow] = static_cast< T >(l - lSave); indexRowL[l] = iRow; elementL[l] = elementU[i]; l++; //take out of row list int start = startRowU[iRow]; int end = start + numberInRow[iRow]; int where = start; while (indexColumnU[where] != pivotColumn) { where++; } /* endwhile */ #if DEBUG_COIN if (where >= end) { abort(); } #endif indexColumnU[where] = indexColumnU[end - 1]; numberInRow[iRow]--; assert(numberInRow[iRow] >= 0); } } assert(pivotRowPosition < endColumn); assert(indexRowU[pivotRowPosition] == pivotRow); CoinFactorizationDouble pivotElement = elementU[pivotRowPosition]; CoinFactorizationDouble pivotMultiplier = 1.0 / pivotElement; pivotRegion_.array()[numberGoodU_] = pivotMultiplier; pivotRowPosition++; for (; pivotRowPosition < endColumn; pivotRowPosition++) { int iRow = indexRowU[pivotRowPosition]; markRow[iRow] = static_cast< T >(l - lSave); indexRowL[l] = iRow; elementL[l] = elementU[pivotRowPosition]; l++; //take out of row list int start = startRowU[iRow]; int end = start + numberInRow[iRow]; int where = start; while (indexColumnU[where] != pivotColumn) { where++; } /* endwhile */ #if DEBUG_COIN if (where >= end) { abort(); } #endif indexColumnU[where] = indexColumnU[end - 1]; numberInRow[iRow]--; assert(numberInRow[iRow] >= 0); } markRow[pivotRow] = static_cast< T >(largeInteger); //compress pivot column (move pivot to front including saved) numberInColumn[pivotColumn] = 0; //use end of L for temporary space int *indexL = &indexRowL[lSave]; CoinFactorizationDouble *multipliersL = &elementL[lSave]; //adjust int j; for (j = 0; j < numberInPivotColumn; j++) { multipliersL[j] *= pivotMultiplier; } //zero out fill int iErase; for (iErase = 0; iErase < increment2 * numberInPivotRow; iErase++) { workArea2[iErase] = 0; } int added = numberInPivotRow * numberInPivotColumn; unsigned int *temp2 = workArea2; int *nextColumn = nextColumn_.array(); //pack down and move to work int jColumn; for (jColumn = 0; jColumn < numberInPivotRow; jColumn++) { int iColumn = saveColumn[jColumn]; int startColumn = startColumnU[iColumn]; int endColumn = startColumn + numberInColumn[iColumn]; int iRow = indexRowU[startColumn]; CoinFactorizationDouble value = elementU[startColumn]; double largest; int put = startColumn; int positionLargest = -1; CoinFactorizationDouble thisPivotValue = 0.0; //compress column and find largest not updated bool checkLargest; int mark = markRow[iRow]; if (mark == largeInteger + 1) { largest = fabs(value); positionLargest = put; put++; checkLargest = false; } else { //need to find largest largest = 0.0; checkLargest = true; if (mark != largeInteger) { //will be updated work[mark] = value; int word = mark >> COINFACTORIZATION_SHIFT_PER_INT; int bit = mark & COINFACTORIZATION_MASK_PER_INT; temp2[word] = temp2[word] | (1 << bit); //say already in counts added--; } else { thisPivotValue = value; } } int i; for (i = startColumn + 1; i < endColumn; i++) { iRow = indexRowU[i]; value = elementU[i]; int mark = markRow[iRow]; if (mark == largeInteger + 1) { //keep indexRowU[put] = iRow; elementU[put] = value; if (checkLargest) { double absValue = fabs(value); if (absValue > largest) { largest = absValue; positionLargest = put; } } put++; } else if (mark != largeInteger) { //will be updated work[mark] = value; int word = mark >> COINFACTORIZATION_SHIFT_PER_INT; int bit = mark & COINFACTORIZATION_MASK_PER_INT; temp2[word] = temp2[word] | (1 << bit); //say already in counts added--; } else { thisPivotValue = value; } } //slot in pivot elementU[put] = elementU[startColumn]; indexRowU[put] = indexRowU[startColumn]; if (positionLargest == startColumn) { positionLargest = put; //follow if was largest } put++; elementU[startColumn] = thisPivotValue; indexRowU[startColumn] = pivotRow; //clean up counts startColumn++; numberInColumn[iColumn] = put - startColumn; int *numberInColumnPlus = numberInColumnPlus_.array(); numberInColumnPlus[iColumn]++; startColumnU[iColumn]++; //how much space have we got int next = nextColumn[iColumn]; int space; space = startColumnU[next] - put - numberInColumnPlus[next]; //assume no zero elements if (numberInPivotColumn > space) { //getColumnSpace also moves fixed part if (!getColumnSpace(iColumn, numberInPivotColumn)) { return false; } //redo starts if (positionLargest >= 0) positionLargest = positionLargest + startColumnU[iColumn] - startColumn; startColumn = startColumnU[iColumn]; put = startColumn + numberInColumn[iColumn]; } double tolerance = zeroTolerance_; int *nextCount = nextCount_.array(); for (j = 0; j < numberInPivotColumn; j++) { value = work[j] - thisPivotValue * multipliersL[j]; double absValue = fabs(value); if (absValue > tolerance) { work[j] = 0.0; assert(put < lengthAreaU_); elementU[put] = value; indexRowU[put] = indexL[j]; if (absValue > largest) { largest = absValue; positionLargest = put; } put++; } else { work[j] = 0.0; added--; int word = j >> COINFACTORIZATION_SHIFT_PER_INT; int bit = j & COINFACTORIZATION_MASK_PER_INT; if (temp2[word] & (1 << bit)) { //take out of row list iRow = indexL[j]; int start = startRowU[iRow]; int end = start + numberInRow[iRow]; int where = start; while (indexColumnU[where] != iColumn) { where++; } /* endwhile */ #if DEBUG_COIN if (where >= end) { abort(); } #endif indexColumnU[where] = indexColumnU[end - 1]; numberInRow[iRow]--; } else { //make sure won't be added int word = j >> COINFACTORIZATION_SHIFT_PER_INT; int bit = j & COINFACTORIZATION_MASK_PER_INT; temp2[word] = temp2[word] | (1 << bit); //say already in counts } } } numberInColumn[iColumn] = put - startColumn; //move largest if (positionLargest >= 0) { value = elementU[positionLargest]; iRow = indexRowU[positionLargest]; elementU[positionLargest] = elementU[startColumn]; indexRowU[positionLargest] = indexRowU[startColumn]; elementU[startColumn] = value; indexRowU[startColumn] = iRow; } //linked list for column if (nextCount[iColumn + numberRows_] != -2) { //modify linked list deleteLink(iColumn + numberRows_); addLink(iColumn + numberRows_, numberInColumn[iColumn]); } temp2 += increment2; } //get space for row list unsigned int *putBase = workArea2; int bigLoops = numberInPivotColumn >> COINFACTORIZATION_SHIFT_PER_INT; int i = 0; // do linked lists and update counts while (bigLoops) { bigLoops--; int bit; for (bit = 0; bit < COINFACTORIZATION_BITS_PER_INT; i++, bit++) { unsigned int *putThis = putBase; int iRow = indexL[i]; //get space int number = 0; int jColumn; for (jColumn = 0; jColumn < numberInPivotRow; jColumn++) { unsigned int test = *putThis; putThis += increment2; test = 1 - ((test >> bit) & 1); number += test; } int next = nextRow[iRow]; int space; space = startRowU[next] - startRowU[iRow]; number += numberInRow[iRow]; if (space < number) { if (!getRowSpace(iRow, number)) { return false; } } // now do putThis = putBase; next = nextRow[iRow]; number = numberInRow[iRow]; int end = startRowU[iRow] + number; int saveIndex = indexColumnU[startRowU[next]]; //add in for (jColumn = 0; jColumn < numberInPivotRow; jColumn++) { unsigned int test = *putThis; putThis += increment2; test = 1 - ((test >> bit) & 1); indexColumnU[end] = saveColumn[jColumn]; end += test; } //put back next one in case zapped indexColumnU[startRowU[next]] = saveIndex; markRow[iRow] = static_cast< T >(largeInteger + 1); number = end - startRowU[iRow]; numberInRow[iRow] = number; deleteLink(iRow); addLink(iRow, number); } putBase++; } /* endwhile */ int bit; for (bit = 0; i < numberInPivotColumn; i++, bit++) { unsigned int *putThis = putBase; int iRow = indexL[i]; //get space int number = 0; int jColumn; for (jColumn = 0; jColumn < numberInPivotRow; jColumn++) { unsigned int test = *putThis; putThis += increment2; test = 1 - ((test >> bit) & 1); number += test; } int next = nextRow[iRow]; int space; space = startRowU[next] - startRowU[iRow]; number += numberInRow[iRow]; if (space < number) { if (!getRowSpace(iRow, number)) { return false; } } // now do putThis = putBase; next = nextRow[iRow]; number = numberInRow[iRow]; int end = startRowU[iRow] + number; int saveIndex; saveIndex = indexColumnU[startRowU[next]]; //add in for (jColumn = 0; jColumn < numberInPivotRow; jColumn++) { unsigned int test = *putThis; putThis += increment2; test = 1 - ((test >> bit) & 1); indexColumnU[end] = saveColumn[jColumn]; end += test; } indexColumnU[startRowU[next]] = saveIndex; markRow[iRow] = static_cast< T >(largeInteger + 1); number = end - startRowU[iRow]; numberInRow[iRow] = number; deleteLink(iRow); addLink(iRow, number); } markRow[pivotRow] = static_cast< T >(largeInteger + 1); //modify linked list for pivots deleteLink(pivotRow); deleteLink(pivotColumn + numberRows_); totalElements_ += added; return true; } /********************************* END LARGE TEMPLATE ********/ //@} ////////////////// data ////////////////// protected: /**@name data */ //@{ /// Pivot tolerance double pivotTolerance_; /// Zero tolerance double zeroTolerance_; #ifndef COIN_FAST_CODE /// Whether slack value is +1 or -1 double slackValue_; #else #ifndef slackValue_ #define slackValue_ -1.0 #endif #endif /// How much to multiply areas by double areaFactor_; /// Relax check on accuracy in replaceColumn double relaxCheck_; /// Number of Rows in factorization int numberRows_; /// Number of Rows after iterating int numberRowsExtra_; /// Maximum number of Rows after iterating int maximumRowsExtra_; /// Number of Columns in factorization int numberColumns_; /// Number of Columns after iterating int numberColumnsExtra_; /// Maximum number of Columns after iterating int maximumColumnsExtra_; /// Number factorized in U (not row singletons) int numberGoodU_; /// Number factorized in L int numberGoodL_; /// Maximum number of pivots before factorization int maximumPivots_; /// Number pivots since last factorization int numberPivots_; /// Number of elements in U (to go) /// or while iterating total overall int totalElements_; /// Number of elements after factorization int factorElements_; /// Pivot order for each Column CoinIntArrayWithLength pivotColumn_; /// Permutation vector for pivot row order CoinIntArrayWithLength permute_; /// DePermutation vector for pivot row order CoinIntArrayWithLength permuteBack_; /// Inverse Pivot order for each Column CoinIntArrayWithLength pivotColumnBack_; /// Status of factorization int status_; /** 0 - no increasing rows - no permutations, 1 - no increasing rows but permutations 2 - increasing rows - taken out as always 2 */ //int increasingRows_; /// Number of trials before rejection int numberTrials_; /// Start of each Row as pointer CoinIntArrayWithLength startRowU_; /// Number in each Row CoinIntArrayWithLength numberInRow_; /// Number in each Column CoinIntArrayWithLength numberInColumn_; /// Number in each Column including pivoted CoinIntArrayWithLength numberInColumnPlus_; /** First Row/Column with count of k, can tell which by offset - Rows then Columns */ CoinIntArrayWithLength firstCount_; /// Next Row/Column with count CoinIntArrayWithLength nextCount_; /// Previous Row/Column with count CoinIntArrayWithLength lastCount_; /// Next Column in memory order CoinIntArrayWithLength nextColumn_; /// Previous Column in memory order CoinIntArrayWithLength lastColumn_; /// Next Row in memory order CoinIntArrayWithLength nextRow_; /// Previous Row in memory order CoinIntArrayWithLength lastRow_; /// Columns left to do in a single pivot CoinIntArrayWithLength saveColumn_; /// Marks rows to be updated CoinIntArrayWithLength markRow_; /// Detail in messages int messageLevel_; /// Larger of row and column size int biggerDimension_; /// Base address for U (may change) CoinIntArrayWithLength indexColumnU_; /// Pivots for L CoinIntArrayWithLength pivotRowL_; /// Inverses of pivot values CoinFactorizationDoubleArrayWithLength pivotRegion_; /// Number of slacks at beginning of U int numberSlacks_; /// Number in U int numberU_; /// Maximum space used in U int maximumU_; /// Base of U is always 0 //int baseU_; /// Length of U int lengthU_; /// Length of area reserved for U int lengthAreaU_; /// Elements of U CoinFactorizationDoubleArrayWithLength elementU_; /// Row indices of U CoinIntArrayWithLength indexRowU_; /// Start of each column in U CoinIntArrayWithLength startColumnU_; /// Converts rows to columns in U CoinIntArrayWithLength convertRowToColumnU_; /// Number in L int numberL_; /// Base of L int baseL_; /// Length of L int lengthL_; /// Length of area reserved for L int lengthAreaL_; /// Elements of L CoinFactorizationDoubleArrayWithLength elementL_; /// Row indices of L CoinIntArrayWithLength indexRowL_; /// Start of each column in L CoinIntArrayWithLength startColumnL_; /// true if Forrest Tomlin update, false if PFI bool doForrestTomlin_; /// Number in R int numberR_; /// Length of R stuff int lengthR_; /// length of area reserved for R int lengthAreaR_; /// Elements of R CoinFactorizationDouble *elementR_; /// Row indices for R int *indexRowR_; /// Start of columns for R CoinIntArrayWithLength startColumnR_; /// Dense area double *denseArea_; /// Dense area - actually used (for alignment etc) double *denseAreaAddress_; /// Dense permutation int *densePermute_; /// Number of dense rows int numberDense_; /// Dense threshold int denseThreshold_; /// First work area CoinFactorizationDoubleArrayWithLength workArea_; /// Second work area CoinUnsignedIntArrayWithLength workArea2_; /// Number of compressions done int numberCompressions_; public: /// Below are all to collect mutable double ftranCountInput_; mutable double ftranCountAfterL_; mutable double ftranCountAfterR_; mutable double ftranCountAfterU_; mutable double btranCountInput_; mutable double btranCountAfterU_; mutable double btranCountAfterR_; mutable double btranCountAfterL_; /// We can roll over factorizations mutable int numberFtranCounts_; mutable int numberBtranCounts_; /// While these are average ratios collected over last period double ftranAverageAfterL_; double ftranAverageAfterR_; double ftranAverageAfterU_; double btranAverageAfterU_; double btranAverageAfterR_; double btranAverageAfterL_; protected: /// For statistics #if 0 mutable bool collectStatistics_; #else #define collectStatistics_ 1 #endif /// Below this use sparse technology - if 0 then no L row copy int sparseThreshold_; /// And one for "sparsish" int sparseThreshold2_; /// Start of each row in L CoinIntArrayWithLength startRowL_; /// Index of column in row for L CoinIntArrayWithLength indexColumnL_; /// Elements in L (row copy) CoinFactorizationDoubleArrayWithLength elementByRowL_; /// Sparse regions mutable CoinIntArrayWithLength sparse_; #if ABOCA_LITE_FACTORIZATION /// Offset to second version of sparse int sparseOffset_; #endif /** L to U bias 0 - U bias, 1 - some U bias, 2 some L bias, 3 L bias */ int biasLU_; /** Array persistence flag If 0 then as now (delete/new) 1 then only do arrays if bigger needed 2 as 1 but give a bit extra if bigger needed */ int persistenceFlag_; #ifdef ABC_USE_COIN_FACTORIZATION /// Says if parallel int parallelMode_; #endif //@} }; // Dense coding #ifdef INTEL_COMPILER #define COIN_FACTORIZATION_DENSE_CODE 3 #endif #ifdef COIN_HAS_LAPACK #ifndef COIN_FACTORIZATION_DENSE_CODE #define COIN_FACTORIZATION_DENSE_CODE 1 #endif #endif #ifdef COIN_FACTORIZATION_DENSE_CODE /* Type of Fortran integer translated into C */ #ifndef ipfint //typedef ipfint FORTRAN_INTEGER_TYPE ; typedef int ipfint; typedef const int cipfint; #endif #endif #endif // Extra for ugly include #ifdef UGLY_COIN_FACTOR_CODING #define FAC_UNSET (FAC_SET + 1) { goodPivot = false; //store pivot columns (so can easily compress) int startColumnThis = startColumn[iPivotColumn]; int endColumn = startColumnThis + numberDoColumn + 1; int put = 0; int startRowThis = startRow[iPivotRow]; int endRow = startRowThis + numberDoRow + 1; if (pivotColumnPosition < 0) { for (pivotColumnPosition = startRowThis; pivotColumnPosition < endRow; pivotColumnPosition++) { int iColumn = indexColumn[pivotColumnPosition]; if (iColumn != iPivotColumn) { saveColumn[put++] = iColumn; } else { break; } } } else { for (int i = startRowThis; i < pivotColumnPosition; i++) { saveColumn[put++] = indexColumn[i]; } } assert(pivotColumnPosition < endRow); assert(indexColumn[pivotColumnPosition] == iPivotColumn); pivotColumnPosition++; for (; pivotColumnPosition < endRow; pivotColumnPosition++) { saveColumn[put++] = indexColumn[pivotColumnPosition]; } //take out this bit of indexColumn int next = nextRow[iPivotRow]; int last = lastRow[iPivotRow]; nextRow[last] = next; lastRow[next] = last; nextRow[iPivotRow] = numberGoodU_; //use for permute lastRow[iPivotRow] = -2; numberInRow[iPivotRow] = 0; //store column in L, compress in U and take column out int l = lengthL_; // **** HORRID coding coming up but a goto seems best! { if (l + numberDoColumn > lengthAreaL_) { //need more memory if ((messageLevel_ & 4) != 0) printf("more memory needed in middle of invert\n"); goto BAD_PIVOT; } //l+=currentAreaL_->elementByColumn-elementL; int lSave = l; int *startColumnL = startColumnL_.array(); startColumnL[numberGoodL_] = l; //for luck and first time numberGoodL_++; startColumnL[numberGoodL_] = l + numberDoColumn; lengthL_ += numberDoColumn; if (pivotRowPosition < 0) { for (pivotRowPosition = startColumnThis; pivotRowPosition < endColumn; pivotRowPosition++) { int iRow = indexRow[pivotRowPosition]; if (iRow != iPivotRow) { indexRowL[l] = iRow; elementL[l] = element[pivotRowPosition]; markRow[iRow] = l - lSave; l++; //take out of row list int start = startRow[iRow]; int end = start + numberInRow[iRow]; int where = start; while (indexColumn[where] != iPivotColumn) { where++; } /* endwhile */ #if DEBUG_COIN if (where >= end) { abort(); } #endif indexColumn[where] = indexColumn[end - 1]; numberInRow[iRow]--; } else { break; } } } else { int i; for (i = startColumnThis; i < pivotRowPosition; i++) { int iRow = indexRow[i]; markRow[iRow] = l - lSave; indexRowL[l] = iRow; elementL[l] = element[i]; l++; //take out of row list int start = startRow[iRow]; int end = start + numberInRow[iRow]; int where = start; while (indexColumn[where] != iPivotColumn) { where++; } /* endwhile */ #if DEBUG_COIN if (where >= end) { abort(); } #endif indexColumn[where] = indexColumn[end - 1]; numberInRow[iRow]--; assert(numberInRow[iRow] >= 0); } } assert(pivotRowPosition < endColumn); assert(indexRow[pivotRowPosition] == iPivotRow); CoinFactorizationDouble pivotElement = element[pivotRowPosition]; CoinFactorizationDouble pivotMultiplier = 1.0 / pivotElement; pivotRegion_.array()[numberGoodU_] = pivotMultiplier; pivotRowPosition++; for (; pivotRowPosition < endColumn; pivotRowPosition++) { int iRow = indexRow[pivotRowPosition]; markRow[iRow] = l - lSave; indexRowL[l] = iRow; elementL[l] = element[pivotRowPosition]; l++; //take out of row list int start = startRow[iRow]; int end = start + numberInRow[iRow]; int where = start; while (indexColumn[where] != iPivotColumn) { where++; } /* endwhile */ #if DEBUG_COIN if (where >= end) { abort(); } #endif indexColumn[where] = indexColumn[end - 1]; numberInRow[iRow]--; assert(numberInRow[iRow] >= 0); } markRow[iPivotRow] = FAC_SET; //compress pivot column (move pivot to front including saved) numberInColumn[iPivotColumn] = 0; //use end of L for temporary space int *indexL = &indexRowL[lSave]; CoinFactorizationDouble *multipliersL = &elementL[lSave]; //adjust int j; for (j = 0; j < numberDoColumn; j++) { multipliersL[j] *= pivotMultiplier; } //zero out fill int iErase; for (iErase = 0; iErase < increment2 * numberDoRow; iErase++) { workArea2[iErase] = 0; } int added = numberDoRow * numberDoColumn; unsigned int *temp2 = workArea2; int *nextColumn = nextColumn_.array(); //pack down and move to work int jColumn; for (jColumn = 0; jColumn < numberDoRow; jColumn++) { int iColumn = saveColumn[jColumn]; int startColumnThis = startColumn[iColumn]; int endColumn = startColumnThis + numberInColumn[iColumn]; int iRow = indexRow[startColumnThis]; CoinFactorizationDouble value = element[startColumnThis]; double largest; int put = startColumnThis; int positionLargest = -1; CoinFactorizationDouble thisPivotValue = 0.0; //compress column and find largest not updated bool checkLargest; int mark = markRow[iRow]; if (mark == FAC_UNSET) { largest = fabs(value); positionLargest = put; put++; checkLargest = false; } else { //need to find largest largest = 0.0; checkLargest = true; if (mark != FAC_SET) { //will be updated workArea[mark] = value; int word = mark >> COINFACTORIZATION_SHIFT_PER_INT; int bit = mark & COINFACTORIZATION_MASK_PER_INT; temp2[word] = temp2[word] | (1 << bit); //say already in counts added--; } else { thisPivotValue = value; } } int i; for (i = startColumnThis + 1; i < endColumn; i++) { iRow = indexRow[i]; value = element[i]; int mark = markRow[iRow]; if (mark == FAC_UNSET) { //keep indexRow[put] = iRow; element[put] = value; if (checkLargest) { double absValue = fabs(value); if (absValue > largest) { largest = absValue; positionLargest = put; } } put++; } else if (mark != FAC_SET) { //will be updated workArea[mark] = value; int word = mark >> COINFACTORIZATION_SHIFT_PER_INT; int bit = mark & COINFACTORIZATION_MASK_PER_INT; temp2[word] = temp2[word] | (1 << bit); //say already in counts added--; } else { thisPivotValue = value; } } //slot in pivot element[put] = element[startColumnThis]; indexRow[put] = indexRow[startColumnThis]; if (positionLargest == startColumnThis) { positionLargest = put; //follow if was largest } put++; element[startColumnThis] = thisPivotValue; indexRow[startColumnThis] = iPivotRow; //clean up counts startColumnThis++; numberInColumn[iColumn] = put - startColumnThis; int *numberInColumnPlus = numberInColumnPlus_.array(); numberInColumnPlus[iColumn]++; startColumn[iColumn]++; //how much space have we got int next = nextColumn[iColumn]; int space; space = startColumn[next] - put - numberInColumnPlus[next]; //assume no zero elements if (numberDoColumn > space) { //getColumnSpace also moves fixed part if (!getColumnSpace(iColumn, numberDoColumn)) { goto BAD_PIVOT; } //redo starts positionLargest = positionLargest + startColumn[iColumn] - startColumnThis; startColumnThis = startColumn[iColumn]; put = startColumnThis + numberInColumn[iColumn]; } double tolerance = zeroTolerance_; int *nextCount = nextCount_.array(); for (j = 0; j < numberDoColumn; j++) { value = workArea[j] - thisPivotValue * multipliersL[j]; double absValue = fabs(value); if (absValue > tolerance) { workArea[j] = 0.0; element[put] = value; indexRow[put] = indexL[j]; if (absValue > largest) { largest = absValue; positionLargest = put; } put++; } else { workArea[j] = 0.0; added--; int word = j >> COINFACTORIZATION_SHIFT_PER_INT; int bit = j & COINFACTORIZATION_MASK_PER_INT; if (temp2[word] & (1 << bit)) { //take out of row list iRow = indexL[j]; int start = startRow[iRow]; int end = start + numberInRow[iRow]; int where = start; while (indexColumn[where] != iColumn) { where++; } /* endwhile */ #if DEBUG_COIN if (where >= end) { abort(); } #endif indexColumn[where] = indexColumn[end - 1]; numberInRow[iRow]--; } else { //make sure won't be added int word = j >> COINFACTORIZATION_SHIFT_PER_INT; int bit = j & COINFACTORIZATION_MASK_PER_INT; temp2[word] = temp2[word] | (1 << bit); //say already in counts } } } numberInColumn[iColumn] = put - startColumnThis; //move largest if (positionLargest >= 0) { value = element[positionLargest]; iRow = indexRow[positionLargest]; element[positionLargest] = element[startColumnThis]; indexRow[positionLargest] = indexRow[startColumnThis]; element[startColumnThis] = value; indexRow[startColumnThis] = iRow; } //linked list for column if (nextCount[iColumn + numberRows_] != -2) { //modify linked list deleteLink(iColumn + numberRows_); addLink(iColumn + numberRows_, numberInColumn[iColumn]); } temp2 += increment2; } //get space for row list unsigned int *putBase = workArea2; int bigLoops = numberDoColumn >> COINFACTORIZATION_SHIFT_PER_INT; int i = 0; // do linked lists and update counts while (bigLoops) { bigLoops--; int bit; for (bit = 0; bit < COINFACTORIZATION_BITS_PER_INT; i++, bit++) { unsigned int *putThis = putBase; int iRow = indexL[i]; //get space int number = 0; int jColumn; for (jColumn = 0; jColumn < numberDoRow; jColumn++) { unsigned int test = *putThis; putThis += increment2; test = 1 - ((test >> bit) & 1); number += test; } int next = nextRow[iRow]; int space; space = startRow[next] - startRow[iRow]; number += numberInRow[iRow]; if (space < number) { if (!getRowSpace(iRow, number)) { goto BAD_PIVOT; } } // now do putThis = putBase; next = nextRow[iRow]; number = numberInRow[iRow]; int end = startRow[iRow] + number; int saveIndex = indexColumn[startRow[next]]; //add in for (jColumn = 0; jColumn < numberDoRow; jColumn++) { unsigned int test = *putThis; putThis += increment2; test = 1 - ((test >> bit) & 1); indexColumn[end] = saveColumn[jColumn]; end += test; } //put back next one in case zapped indexColumn[startRow[next]] = saveIndex; markRow[iRow] = FAC_UNSET; number = end - startRow[iRow]; numberInRow[iRow] = number; deleteLink(iRow); addLink(iRow, number); } putBase++; } /* endwhile */ int bit; for (bit = 0; i < numberDoColumn; i++, bit++) { unsigned int *putThis = putBase; int iRow = indexL[i]; //get space int number = 0; int jColumn; for (jColumn = 0; jColumn < numberDoRow; jColumn++) { unsigned int test = *putThis; putThis += increment2; test = 1 - ((test >> bit) & 1); number += test; } int next = nextRow[iRow]; int space; space = startRow[next] - startRow[iRow]; number += numberInRow[iRow]; if (space < number) { if (!getRowSpace(iRow, number)) { goto BAD_PIVOT; } } // now do putThis = putBase; next = nextRow[iRow]; number = numberInRow[iRow]; int end = startRow[iRow] + number; int saveIndex; saveIndex = indexColumn[startRow[next]]; //add in for (jColumn = 0; jColumn < numberDoRow; jColumn++) { unsigned int test = *putThis; putThis += increment2; test = 1 - ((test >> bit) & 1); indexColumn[end] = saveColumn[jColumn]; end += test; } indexColumn[startRow[next]] = saveIndex; markRow[iRow] = FAC_UNSET; number = end - startRow[iRow]; numberInRow[iRow] = number; deleteLink(iRow); addLink(iRow, number); } markRow[iPivotRow] = FAC_UNSET; //modify linked list for pivots deleteLink(iPivotRow); deleteLink(iPivotColumn + numberRows_); totalElements_ += added; goodPivot = true; // **** UGLY UGLY UGLY } BAD_PIVOT: ; } #undef FAC_UNSET #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveTripleton.cpp0000644000175200017520000010306413414454441020600 0ustar coincoin/* $Id: CoinPresolveTripleton.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2003, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinFinite.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #include "CoinPresolveEmpty.hpp" // for DROP_COL/DROP_ROW #include "CoinPresolveZeros.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveTripleton.hpp" #include "CoinPresolvePsdebug.hpp" #include "CoinMessage.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif /* * Substituting y away: * * y = (c - a x - d z) / b * * so adjust bounds by: c/b * and x by: -a/b * and z by: -d/b * * This affects both the row and col representations. * * mcstrt only modified if the column must be moved. * * for every row in icoly * if icolx is also has an entry for row * modify the icolx entry for row * drop the icoly entry from row and modify the icolx entry * else * add a new entry to icolx column * create a new icolx entry * (this may require moving the column in memory) * replace icoly entry from row and replace with icolx entry * * same for icolz * The row and column reps are inconsistent during the routine, * because icolx in the column rep is updated, and the entries corresponding * to icolx in the row rep are updated, but nothing concerning icoly * in the col rep is changed. icoly entries in the row rep are deleted, * and icolx entries in both reps are consistent. * At the end, we set the length of icoly to be zero, so the reps would * be consistent if the row were deleted from the row rep. * Both the row and icoly must be removed from both reps. * In the col rep, icoly will be eliminated entirely, at the end of the routine; * irow occurs in just two columns, one of which (icoly) is eliminated * entirely, the other is icolx, which is not deleted here. * In the row rep, irow will be eliminated entirely, but not here; * icoly is removed from the rows it occurs in. */ static bool elim_tripleton(const char * #if PRESOLVE_DEBUG > 1 msg #endif , CoinBigIndex *mcstrt, double *rlo, double *acts, double *rup, double *colels, int *hrow, int *hcol, int *hinrow, int *hincol, presolvehlink *clink, int ncols, presolvehlink *rlink, int nrows, CoinBigIndex *mrstrt, double *rowels, //double a, double b, double c, double coeff_factorx, double coeff_factorz, double bounds_factor, int row0, int icolx, int icoly, int icolz) { CoinBigIndex kcs = mcstrt[icoly]; CoinBigIndex kce = kcs + hincol[icoly]; CoinBigIndex kcsx = mcstrt[icolx]; CoinBigIndex kcex = kcsx + hincol[icolx]; CoinBigIndex kcsz = mcstrt[icolz]; CoinBigIndex kcez = kcsz + hincol[icolz]; #if PRESOLVE_DEBUG > 1 printf("%s %d x=%d y=%d z=%d cfx=%g cfz=%g nx=%d yrows=(", msg, row0, icolx, icoly, icolz, coeff_factorx, coeff_factorz, hincol[icolx]); #endif for (CoinBigIndex kcoly = kcs; kcoly < kce; kcoly++) { int row = hrow[kcoly]; // even though these values are updated, they remain consistent PRESOLVEASSERT(kcex == kcsx + hincol[icolx]); PRESOLVEASSERT(kcez == kcsz + hincol[icolz]); // we don't need to update the row being eliminated if (row != row0 /* && hinrow[row] > 0*/) { if (bounds_factor != 0.0) { // (1) if (-PRESOLVE_INF < rlo[row]) rlo[row] -= colels[kcoly] * bounds_factor; // (2) if (rup[row] < PRESOLVE_INF) rup[row] -= colels[kcoly] * bounds_factor; // and solution if (acts) { acts[row] -= colels[kcoly] * bounds_factor; } } // see if row appears in colx CoinBigIndex kcolx = presolve_find_row1(row, kcsx, kcex, hrow); #if PRESOLVE_DEBUG > 1 printf("%d%s ", row, (kcolx < kcex) ? "x+" : ""); #endif // see if row appears in colz CoinBigIndex kcolz = presolve_find_row1(row, kcsz, kcez, hrow); #if PRESOLVE_DEBUG > 1 printf("%d%s ", row, (kcolz < kcez) ? "x+" : ""); #endif if (kcolx >= kcex && kcolz < kcez) { // swap CoinBigIndex iTemp; iTemp = kcolx; kcolx = kcolz; kcolz = iTemp; iTemp = kcsx; kcsx = kcsz; kcsz = iTemp; iTemp = kcex; kcex = kcez; kcez = iTemp; int jTemp; jTemp = icolx; icolx = icolz; icolz = jTemp; double dTemp = coeff_factorx; coeff_factorx = coeff_factorz; coeff_factorz = dTemp; } if (kcolx < kcex) { // before: both x and y are in the row // after: only x is in the row // so: number of elems in col x unchanged, and num elems in row is one less // update col rep - just modify coefficent // column y is deleted as a whole at the end of the loop colels[kcolx] += colels[kcoly] * coeff_factorx; // update row rep // first, copy new value for col x into proper place in rowels CoinBigIndex k2 = presolve_find_col(icolx, mrstrt[row], mrstrt[row] + hinrow[row], hcol); rowels[k2] = colels[kcolx]; if (kcolz < kcez) { // before: both z and y are in the row // after: only z is in the row // so: number of elems in col z unchanged, and num elems in row is one less // update col rep - just modify coefficent // column y is deleted as a whole at the end of the loop colels[kcolz] += colels[kcoly] * coeff_factorz; // update row rep // first, copy new value for col z into proper place in rowels CoinBigIndex k2 = presolve_find_col(icolz, mrstrt[row], mrstrt[row] + hinrow[row], hcol); rowels[k2] = colels[kcolz]; // now delete col y from the row; this changes hinrow[row] presolve_delete_from_row(row, icoly, mrstrt, hinrow, hcol, rowels); } else { // before: only y is in the row // after: only z is in the row // so: number of elems in col z is one greater, but num elems in row remains same // update entry corresponding to icolz in row rep // by just overwriting the icoly entry { CoinBigIndex k2 = presolve_find_col(icoly, mrstrt[row], mrstrt[row] + hinrow[row], hcol); hcol[k2] = icolz; rowels[k2] = colels[kcoly] * coeff_factorz; } { bool no_mem = presolve_expand_col(mcstrt, colels, hrow, hincol, clink, ncols, icolz); if (no_mem) return (true); // have to adjust various induction variables kcolx = mcstrt[icolx] + (kcolx - kcsx); kcsx = mcstrt[icolx]; kcex = mcstrt[icolx] + hincol[icolx]; kcoly = mcstrt[icoly] + (kcoly - kcs); kcs = mcstrt[icoly]; // do this for ease of debugging kce = mcstrt[icoly] + hincol[icoly]; kcolz = mcstrt[icolz] + (kcolz - kcs); // don't really need to do this kcsz = mcstrt[icolz]; kcez = mcstrt[icolz] + hincol[icolz]; } // there is now an unused entry in the memory after the column - use it // mcstrt[ncols] == penultimate index of arrays hrow/colels hrow[kcez] = row; colels[kcez] = colels[kcoly] * coeff_factorz; // y factor is 0.0 hincol[icolz]++, kcez++; // expand the col } } else { // before: only y is in the row // after: only x and z are in the row // update entry corresponding to icolx in row rep // by just overwriting the icoly entry { CoinBigIndex k2 = presolve_find_col(icoly, mrstrt[row], mrstrt[row] + hinrow[row], hcol); hcol[k2] = icolx; rowels[k2] = colels[kcoly] * coeff_factorx; } presolve_expand_row(mrstrt, rowels, hcol, hinrow, rlink, nrows, row); // there is now an unused entry in the memory after the column - use it CoinBigIndex krez = mrstrt[row] + hinrow[row]; hcol[krez] = icolz; rowels[krez] = colels[kcoly] * coeff_factorz; hinrow[row]++; { bool no_mem = presolve_expand_col(mcstrt, colels, hrow, hincol, clink, ncols, icolx); if (no_mem) return (true); // have to adjust various induction variables kcoly = mcstrt[icoly] + (kcoly - kcs); kcs = mcstrt[icoly]; // do this for ease of debugging kce = mcstrt[icoly] + hincol[icoly]; kcolx = mcstrt[icolx] + (kcolx - kcs); // don't really need to do this kcsx = mcstrt[icolx]; kcex = mcstrt[icolx] + hincol[icolx]; kcolz = mcstrt[icolz] + (kcolz - kcs); // don't really need to do this kcsz = mcstrt[icolz]; kcez = mcstrt[icolz] + hincol[icolz]; } // there is now an unused entry in the memory after the column - use it hrow[kcex] = row; colels[kcex] = colels[kcoly] * coeff_factorx; // y factor is 0.0 hincol[icolx]++, kcex++; // expand the col { bool no_mem = presolve_expand_col(mcstrt, colels, hrow, hincol, clink, ncols, icolz); if (no_mem) return (true); // have to adjust various induction variables kcoly = mcstrt[icoly] + (kcoly - kcs); kcs = mcstrt[icoly]; // do this for ease of debugging kce = mcstrt[icoly] + hincol[icoly]; kcsx = mcstrt[icolx]; kcex = mcstrt[icolx] + hincol[icolx]; kcsz = mcstrt[icolz]; kcez = mcstrt[icolz] + hincol[icolz]; } // there is now an unused entry in the memory after the column - use it hrow[kcez] = row; colels[kcez] = colels[kcoly] * coeff_factorz; // y factor is 0.0 hincol[icolz]++, kcez++; // expand the col } } } #if PRESOLVE_DEBUG > 1 printf(")\n"); #endif // delete the whole column hincol[icoly] = 0; return (false); } /* * * The col rep and row rep must be consistent. */ const CoinPresolveAction *tripleton_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; int ncols = prob->ncols_; double *clo = prob->clo_; double *cup = prob->cup_; double *rowels = prob->rowels_; int *hcol = prob->hcol_; CoinBigIndex *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; int nrows = prob->nrows_; double *rlo = prob->rlo_; double *rup = prob->rup_; presolvehlink *clink = prob->clink_; presolvehlink *rlink = prob->rlink_; const unsigned char *integerType = prob->integerType_; double *cost = prob->cost_; int numberLook = prob->numberRowsToDo_; int iLook; int *look = prob->rowsToDo_; const double ztolzb = prob->ztolzb_; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering tripleton_action::presolve; considering " << numberLook << " rows." << std::endl; #endif presolve_consistent(prob); presolve_links_ok(prob); presolve_check_sol(prob); presolve_check_nbasic(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int startEmptyRows = 0; int startEmptyColumns = 0; startEmptyRows = prob->countEmptyRows(); startEmptyColumns = prob->countEmptyCols(); #if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0; if (prob->tuning_) startTime = CoinCpuTime(); #endif #endif action *actions = new action[nrows]; #ifdef ZEROFAULT // initialise alignment padding bytes memset(actions, 0, nrows * sizeof(action)); #endif int nactions = 0; int *zeros = prob->usefulColumnInt_; //new int[ncols]; char *mark = reinterpret_cast< char * >(zeros + ncols); memset(mark, 0, ncols); int nzeros = 0; // If rowstat exists then all do unsigned char *rowstat = prob->rowstat_; double *acts = prob->acts_; // unsigned char * colstat = prob->colstat_; #if PRESOLVE_CONSISTENCY > 0 presolve_links_ok(prob); #endif // wasfor (int irow=0; irow 0) { break; } } PRESOLVEASSERT(k < kre); coeffx = rowels[k]; if (fabs(coeffx) < ZTOLDP2) continue; icolx = hcol[k]; /* locate second column */ for (k++; k < kre; k++) { if (hincol[hcol[k]] > 0) { break; } } PRESOLVEASSERT(k < kre); coeffy = rowels[k]; if (fabs(coeffy) < ZTOLDP2) continue; icoly = hcol[k]; /* locate third column */ for (k++; k < kre; k++) { if (hincol[hcol[k]] > 0) { break; } } PRESOLVEASSERT(k < kre); coeffz = rowels[k]; if (fabs(coeffz) < ZTOLDP2) continue; icolz = hcol[k]; // For now let's do obvious one if (coeffx * coeffz > 0.0) { if (coeffx * coeffy > 0.0) continue; } else if (coeffx * coeffy > 0.0) { int iTemp = icoly; icoly = icolz; icolz = iTemp; double dTemp = coeffy; coeffy = coeffz; coeffz = dTemp; } else { int iTemp = icoly; icoly = icolx; icolx = iTemp; double dTemp = coeffy; coeffy = coeffx; coeffx = dTemp; } // Not all same sign and y is odd one out // don't bother with fixed variables if (!(fabs(cup[icolx] - clo[icolx]) < ZTOLDP) && !(fabs(cup[icoly] - clo[icolx]) < ZTOLDP) && !(fabs(cup[icolz] - clo[icoly]) < ZTOLDP)) { assert(coeffx * coeffz > 0.0 && coeffx * coeffy < 0.0); // Only do if does not give implicit bounds on x and z double cx = -coeffx / coeffy; double cz = -coeffz / coeffy; /* don't do if y integer for now */ if (integerType[icoly]) { #define PRESOLVE_DANGEROUS #ifndef PRESOLVE_DANGEROUS continue; #else if (!integerType[icolx] || !integerType[icolz]) continue; if (cx != floor(cx + 0.5) || cz != floor(cz + 0.5)) continue; #endif } double rhsRatio = rhs / coeffy; if (clo[icoly] > -1.0e30) { if (clo[icolx] < -1.0e30 || clo[icolz] < -1.0e30) continue; if (cx * clo[icolx] + cz * clo[icolz] + rhsRatio < clo[icoly] - ztolzb) continue; } if (cup[icoly] < 1.0e30) { if (cup[icolx] > 1.0e30 || cup[icolz] > 1.0e30) continue; if (cx * cup[icolx] + cz * cup[icolz] + rhsRatio > cup[icoly] + ztolzb) continue; } /* find this row in each of the columns and do counts */ bool singleton = false; for (k = mcstrt[icoly]; k < mcstrt[icoly] + hincol[icoly]; k++) { int jrow = hrow[k]; if (hinrow[jrow] == 1) singleton = true; if (jrow != irow) prob->setRowUsed(jrow); } int nDuplicate = 0; for (k = mcstrt[icolx]; k < mcstrt[icolx] + hincol[icolx]; k++) { int jrow = hrow[k]; if (jrow != irow && prob->rowUsed(jrow)) nDuplicate++; ; } for (k = mcstrt[icolz]; k < mcstrt[icolz] + hincol[icolz]; k++) { int jrow = hrow[k]; if (jrow != irow && prob->rowUsed(jrow)) nDuplicate++; ; } int nAdded = hincol[icoly] - 3 - nDuplicate; for (k = mcstrt[icoly]; k < mcstrt[icoly] + hincol[icoly]; k++) { int jrow = hrow[k]; prob->unsetRowUsed(jrow); } // let singleton rows be taken care of first if (singleton) continue; //if (nAdded<=1) //printf("%d elements added, hincol %d , dups %d\n",nAdded,hincol[icoly],nDuplicate); if (nAdded > 2) continue; // it is possible that both x/z and y are singleton columns // that can cause problems if ((hincol[icolx] == 1 || hincol[icolz] == 1) && hincol[icoly] == 1) continue; // common equations are of the form ax + by = 0, or x + y >= lo { action *s = &actions[nactions]; nactions++; PRESOLVE_DETAIL_PRINT(printf("pre_tripleton %dR %dC %dC %dC E\n", irow, icoly, icolx, icolz)); s->row = irow; s->icolx = icolx; s->icolz = icolz; s->icoly = icoly; s->cloy = clo[icoly]; s->cupy = cup[icoly]; s->costy = cost[icoly]; s->rlo = rlo[irow]; s->rup = rup[irow]; s->coeffx = coeffx; s->coeffy = coeffy; s->coeffz = coeffz; s->ncoly = hincol[icoly]; s->colel = presolve_dupmajor(colels, hrow, hincol[icoly], mcstrt[icoly]); } // costs // the effect of maxmin cancels out cost[icolx] += cost[icoly] * cx; cost[icolz] += cost[icoly] * cz; prob->change_bias(cost[icoly] * rhs / coeffy); //if (cost[icoly]*rhs) //printf("change %g col %d cost %g rhs %g coeff %g\n",cost[icoly]*rhs/coeffy, // icoly,cost[icoly],rhs,coeffy); if (rowstat) { // update solution and basis int numberBasic = 0; if (prob->columnIsBasic(icoly)) numberBasic++; if (prob->rowIsBasic(irow)) numberBasic++; if (numberBasic > 1) { if (!prob->columnIsBasic(icolx)) prob->setColumnStatus(icolx, CoinPrePostsolveMatrix::basic); else prob->setColumnStatus(icolz, CoinPrePostsolveMatrix::basic); } } // Update next set of actions { prob->addCol(icolx); CoinBigIndex i, kcs, kce; kcs = mcstrt[icoly]; kce = kcs + hincol[icoly]; for (i = kcs; i < kce; i++) { int row = hrow[i]; prob->addRow(row); } kcs = mcstrt[icolx]; kce = kcs + hincol[icolx]; for (i = kcs; i < kce; i++) { int row = hrow[i]; prob->addRow(row); } prob->addCol(icolz); kcs = mcstrt[icolz]; kce = kcs + hincol[icolz]; for (i = kcs; i < kce; i++) { int row = hrow[i]; prob->addRow(row); } } /* transfer the colx factors to coly */ bool no_mem = elim_tripleton("ELIMT", mcstrt, rlo, acts, rup, colels, hrow, hcol, hinrow, hincol, clink, ncols, rlink, nrows, mrstrt, rowels, cx, cz, rhs / coeffy, irow, icolx, icoly, icolz); if (no_mem) throwCoinError("out of memory", "tripleton_action::presolve"); // now remove irow from icolx and icolz in the col rep // better if this were first. presolve_delete_from_col(irow, icolx, mcstrt, hincol, hrow, colels); presolve_delete_from_col(irow, icolz, mcstrt, hincol, hrow, colels); // eliminate irow entirely from the row rep hinrow[irow] = 0; // eliminate irow entirely from the row rep PRESOLVE_REMOVE_LINK(rlink, irow); // eliminate coly entirely from the col rep PRESOLVE_REMOVE_LINK(clink, icoly); cost[icoly] = 0.0; rlo[irow] = 0.0; rup[irow] = 0.0; if (!mark[icolx]) { mark[icolx] = 1; zeros[nzeros++] = icolx; } if (!mark[icolz]) { mark[icolz] = 1; zeros[nzeros++] = icolz; } } #if PRESOLVE_CONSISTENCY > 0 presolve_links_ok(prob); presolve_consistent(prob); #endif } } if (nactions) { #if PRESOLVE_SUMMARY > 0 printf("NTRIPLETONS: %d\n", nactions); #endif action *actions1 = new action[nactions]; CoinMemcpyN(actions, nactions, actions1); next = new tripleton_action(nactions, actions1, next); if (nzeros) { next = drop_zero_coefficients_action::presolve(prob, zeros, nzeros, next); } } //delete[]zeros; deleteAction(actions, action *); #if COIN_PRESOLVE_TUNING > 0 double thisTime = 0.0; if (prob->tuning_) thisTime = CoinCpuTime(); #endif #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_sol(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows() - startEmptyRows; int droppedColumns = prob->countEmptyCols() - startEmptyColumns; std::cout << "Leaving tripleton_action::presolve, " << droppedRows << " rows, " << droppedColumns << " columns dropped"; #if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << thisTime - startTime << "s"; #endif std::cout << "." << std::endl; #endif return (next); } void tripleton_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_; const int nactions = nactions_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; CoinBigIndex *link = prob->link_; double *clo = prob->clo_; double *cup = prob->cup_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *dcost = prob->cost_; double *sol = prob->sol_; double *rcosts = prob->rcosts_; double *acts = prob->acts_; double *rowduals = prob->rowduals_; unsigned char *colstat = prob->colstat_; unsigned char *rowstat = prob->rowstat_; const double maxmin = prob->maxmin_; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 char *cdone = prob->cdone_; char *rdone = prob->rdone_; presolve_check_threads(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Entering tripleton_action::postsolve." << std::endl; #endif #endif CoinBigIndex &free_list = prob->free_list_; const double ztolzb = prob->ztolzb_; const double ztoldj = prob->ztoldj_; // Space for accumulating two columns int nrows = prob->nrows_; int *index1 = new int[nrows]; double *element1 = new double[nrows]; memset(element1, 0, nrows * sizeof(double)); int *index2 = new int[nrows]; double *element2 = new double[nrows]; memset(element2, 0, nrows * sizeof(double)); for (const action *f = &actions[nactions - 1]; actions <= f; f--) { int irow = f->row; // probably don't need this double ylo0 = f->cloy; double yup0 = f->cupy; double coeffx = f->coeffx; double coeffy = f->coeffy; double coeffz = f->coeffz; int jcolx = f->icolx; int jcoly = f->icoly; int jcolz = f->icolz; // needed? double rhs = f->rlo; /* the column was in the reduced problem */ PRESOLVEASSERT(cdone[jcolx] && rdone[irow] == DROP_ROW && cdone[jcolz]); PRESOLVEASSERT(cdone[jcoly] == DROP_COL); // probably don't need this rlo[irow] = f->rlo; rup[irow] = f->rup; // probably don't need this clo[jcoly] = ylo0; cup[jcoly] = yup0; dcost[jcoly] = f->costy; dcost[jcolx] += f->costy * coeffx / coeffy; dcost[jcolz] += f->costy * coeffz / coeffy; // this is why we want coeffx < coeffy (55) sol[jcoly] = (rhs - coeffx * sol[jcolx] - coeffz * sol[jcolz]) / coeffy; // since this row is fixed acts[irow] = rhs; // acts[irow] always ok, since slack is fixed if (rowstat) prob->setRowStatus(irow, CoinPrePostsolveMatrix::atLowerBound); // CLAIM: // if the new pi value is chosen to keep the reduced cost // of col x at its prior value, then the reduced cost of // col y will be 0. // also have to update row activities and bounds for rows affected by jcoly // // sol[jcolx] was found for coeffx that // was += colels[kcoly] * coeff_factor; // where coeff_factor == -coeffx / coeffy // // its contribution to activity was // (colels[kcolx] + colels[kcoly] * coeff_factor) * sol[jcolx] (1) // // After adjustment, the two columns contribute: // colels[kcoly] * sol[jcoly] + colels[kcolx] * sol[jcolx] // == colels[kcoly] * ((rhs - coeffx * sol[jcolx]) / coeffy) + colels[kcolx] * sol[jcolx] // == colels[kcoly] * rhs/coeffy + colels[kcoly] * coeff_factor * sol[jcolx] + colels[kcolx] * sol[jcolx] // colels[kcoly] * rhs/coeffy + the expression (1) // // therefore, we must increase the row bounds by colels[kcoly] * rhs/coeffy, // which is similar to the bias double djy = maxmin * dcost[jcoly]; double djx = maxmin * dcost[jcolx]; double djz = maxmin * dcost[jcolz]; double bounds_factor = rhs / coeffy; // need to reconstruct x and z double multiplier1 = coeffx / coeffy; double multiplier2 = coeffz / coeffy; int *indy = reinterpret_cast< int * >(f->colel + f->ncoly); CoinBigIndex ystart = NO_LINK; int nX = 0, nZ = 0; int i, iRow; for (i = 0; i < f->ncoly; ++i) { int iRow = indy[i]; double yValue = f->colel[i]; CoinBigIndex k = free_list; assert(k >= 0 && k < prob->bulk0_); free_list = link[free_list]; if (iRow != irow) { // are these tests always true??? // undo elim_tripleton(1) if (-PRESOLVE_INF < rlo[iRow]) rlo[iRow] += yValue * bounds_factor; // undo elim_tripleton(2) if (rup[iRow] < PRESOLVE_INF) rup[iRow] += yValue * bounds_factor; acts[iRow] += yValue * bounds_factor; djy -= rowduals[iRow] * yValue; } hrow[k] = iRow; PRESOLVEASSERT(rdone[hrow[k]] || hrow[k] == irow); colels[k] = yValue; link[k] = ystart; ystart = k; element1[iRow] = yValue * multiplier1; index1[nX++] = iRow; element2[iRow] = yValue * multiplier2; index2[nZ++] = iRow; } #if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob); #endif mcstrt[jcoly] = ystart; hincol[jcoly] = f->ncoly; // find the tail CoinBigIndex k = mcstrt[jcolx]; CoinBigIndex last = NO_LINK; int numberInColumn = hincol[jcolx]; int numberToDo = numberInColumn; for (i = 0; i < numberToDo; ++i) { iRow = hrow[k]; assert(iRow >= 0 && iRow < nrows); double value = colels[k] + element1[iRow]; element1[iRow] = 0.0; if (fabs(value) >= 1.0e-15) { colels[k] = value; last = k; k = link[k]; if (iRow != irow) djx -= rowduals[iRow] * value; } else { numberInColumn--; // add to free list CoinBigIndex nextk = link[k]; link[k] = free_list; free_list = k; assert(k >= 0); k = nextk; if (last != NO_LINK) link[last] = k; else mcstrt[jcolx] = k; } } for (i = 0; i < nX; i++) { int iRow = index1[i]; double xValue = element1[iRow]; element1[iRow] = 0.0; if (fabs(xValue) >= 1.0e-15) { if (iRow != irow) djx -= rowduals[iRow] * xValue; numberInColumn++; CoinBigIndex k = free_list; assert(k >= 0 && k < prob->bulk0_); free_list = link[free_list]; hrow[k] = iRow; PRESOLVEASSERT(rdone[hrow[k]] || hrow[k] == irow); colels[k] = xValue; if (last != NO_LINK) link[last] = k; else mcstrt[jcolx] = k; last = k; } } #if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob); #endif link[last] = NO_LINK; assert(numberInColumn); hincol[jcolx] = numberInColumn; // find the tail k = mcstrt[jcolz]; last = NO_LINK; numberInColumn = hincol[jcolz]; numberToDo = numberInColumn; for (i = 0; i < numberToDo; ++i) { iRow = hrow[k]; assert(iRow >= 0 && iRow < nrows); double value = colels[k] + element2[iRow]; element2[iRow] = 0.0; if (fabs(value) >= 1.0e-15) { colels[k] = value; last = k; k = link[k]; if (iRow != irow) djz -= rowduals[iRow] * value; } else { numberInColumn--; // add to free list CoinBigIndex nextk = link[k]; assert(free_list >= 0); link[k] = free_list; free_list = k; assert(k >= 0); k = nextk; if (last != NO_LINK) link[last] = k; else mcstrt[jcolz] = k; } } for (i = 0; i < nZ; i++) { int iRow = index2[i]; double zValue = element2[iRow]; element2[iRow] = 0.0; if (fabs(zValue) >= 1.0e-15) { if (iRow != irow) djz -= rowduals[iRow] * zValue; numberInColumn++; CoinBigIndex k = free_list; assert(k >= 0 && k < prob->bulk0_); free_list = link[free_list]; hrow[k] = iRow; PRESOLVEASSERT(rdone[hrow[k]] || hrow[k] == irow); colels[k] = zValue; if (last != NO_LINK) link[last] = k; else mcstrt[jcolz] = k; last = k; } } #if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob); #endif link[last] = NO_LINK; assert(numberInColumn); hincol[jcolz] = numberInColumn; // The only problem with keeping the reduced costs the way they were // was that the variable's bound may have moved, requiring it // to become basic. //printf("djs x - %g (%g), y - %g (%g)\n",djx,coeffx,djy,coeffy); if (colstat) { if (prob->columnIsBasic(jcolx) || (fabs(clo[jcolx] - sol[jcolx]) < ztolzb && rcosts[jcolx] >= -ztoldj) || (fabs(cup[jcolx] - sol[jcolx]) < ztolzb && rcosts[jcolx] <= ztoldj) || (prob->getColumnStatus(jcolx) == CoinPrePostsolveMatrix::isFree && fabs(rcosts[jcolx]) <= ztoldj)) { // colx or y is fine as it is - make coly basic prob->setColumnStatus(jcoly, CoinPrePostsolveMatrix::basic); // this is the coefficient we need to force col y's reduced cost to 0.0; // for example, this is obviously true if y is a singleton column rowduals[irow] = djy / coeffy; rcosts[jcolx] = djx - rowduals[irow] * coeffx; #if PRESOLVE_DEBUG > 0 if (prob->columnIsBasic(jcolx) && fabs(rcosts[jcolx]) > 1.0e-5) printf("bad dj %d %g\n", jcolx, rcosts[jcolx]); #endif rcosts[jcolz] = djz - rowduals[irow] * coeffz; //if (prob->columnIsBasic(jcolz)) //assert (fabs(rcosts[jcolz])<1.0e-5); rcosts[jcoly] = 0.0; } else { prob->setColumnStatus(jcolx, CoinPrePostsolveMatrix::basic); prob->setColumnStatusUsingValue(jcoly); // change rowduals[jcolx] enough to cancel out rcosts[jcolx] rowduals[irow] = djx / coeffx; rcosts[jcolx] = 0.0; // change rowduals[jcolx] enough to cancel out rcosts[jcolx] //rowduals[irow] = djz / coeffz; //rcosts[jcolz] = 0.0; rcosts[jcolz] = djz - rowduals[irow] * coeffz; rcosts[jcoly] = djy - rowduals[irow] * coeffy; } } else { // No status array // this is the coefficient we need to force col y's reduced cost to 0.0; // for example, this is obviously true if y is a singleton column rowduals[irow] = djy / coeffy; rcosts[jcoly] = 0.0; } // DEBUG CHECK #if PRESOLVE_DEBUG > 0 { CoinBigIndex k = mcstrt[jcolx]; int nx = hincol[jcolx]; double dj = maxmin * dcost[jcolx]; for (int i = 0; i < nx; ++i) { int row = hrow[k]; double coeff = colels[k]; k = link[k]; dj -= rowduals[row] * coeff; } if (!(fabs(rcosts[jcolx] - dj) < 100 * ZTOLDP)) printf("BAD DOUBLE X DJ: %d %d %g %g\n", irow, jcolx, rcosts[jcolx], dj); rcosts[jcolx] = dj; } { CoinBigIndex k = mcstrt[jcoly]; int ny = hincol[jcoly]; double dj = maxmin * dcost[jcoly]; for (int i = 0; i < ny; ++i) { int row = hrow[k]; double coeff = colels[k]; k = link[k]; dj -= rowduals[row] * coeff; //printf("b %d coeff %g dual %g dj %g\n", // row,coeff,rowduals[row],dj); } if (!(fabs(rcosts[jcoly] - dj) < 100 * ZTOLDP)) printf("BAD DOUBLE Y DJ: %d %d %g %g\n", irow, jcoly, rcosts[jcoly], dj); rcosts[jcoly] = dj; //exit(0); } #endif #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 cdone[jcoly] = TRIPLETON; rdone[irow] = TRIPLETON; #endif } delete[] index1; delete[] element1; delete[] index2; delete[] element2; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving tripleton_action::postsolve." << std::endl; #endif #endif } tripleton_action::~tripleton_action() { for (int i = nactions_ - 1; i >= 0; i--) { delete[] actions_[i].colel; } deleteAction(actions_, action *); } static double *tripleton_mult; static int *tripleton_id; void check_tripletons(const CoinPresolveAction *paction) { const CoinPresolveAction *paction0 = paction; if (paction) { check_tripletons(paction->next); if (strcmp(paction0->name(), "tripleton_action") == 0) { const tripleton_action *daction = reinterpret_cast< const tripleton_action * >(paction0); for (int i = daction->nactions_ - 1; i >= 0; --i) { int icolx = daction->actions_[i].icolx; int icoly = daction->actions_[i].icoly; double coeffx = daction->actions_[i].coeffx; double coeffy = daction->actions_[i].coeffy; tripleton_mult[icoly] = -coeffx / coeffy; tripleton_id[icoly] = icolx; } } } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinDenseVector.cpp0000644000175200017520000001313013414454441017313 0ustar coincoin/* $Id: CoinDenseVector.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2003, International Business Machines // Corporation and others. All Rights Resized. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include #include "CoinDenseVector.hpp" #include "CoinHelperFunctions.hpp" //############################################################################# template < typename T > void CoinDenseVector< T >::clear() { memset(elements_, 0, nElements_ * sizeof(T)); } //############################################################################# template < typename T > CoinDenseVector< T > & CoinDenseVector< T >::operator=(const CoinDenseVector< T > &rhs) { if (this != &rhs) { setVector(rhs.getNumElements(), rhs.getElements()); } return *this; } //############################################################################# template < typename T > void CoinDenseVector< T >::setVector(int size, const T *elems) { resize(size); CoinMemcpyN(elems, size, elements_); } //############################################################################# template < typename T > void CoinDenseVector< T >::setConstant(int size, T value) { resize(size); for (int i = 0; i < size; i++) elements_[i] = value; } //############################################################################# template < typename T > void CoinDenseVector< T >::resize(int newsize, T value) { if (newsize != nElements_) { assert(newsize > 0); T *newarray = new T[newsize]; int cpysize = CoinMin(newsize, nElements_); CoinMemcpyN(elements_, cpysize, newarray); delete[] elements_; elements_ = newarray; nElements_ = newsize; for (int i = cpysize; i < newsize; i++) elements_[i] = value; } } //############################################################################# template < typename T > void CoinDenseVector< T >::setElement(int index, T element) { assert(index >= 0 && index < nElements_); elements_[index] = element; } //############################################################################# template < typename T > void CoinDenseVector< T >::append(const CoinDenseVector< T > &caboose) { const int s = nElements_; const int cs = caboose.getNumElements(); int newsize = s + cs; resize(newsize); const T *celem = caboose.getElements(); CoinDisjointCopyN(celem, cs, elements_ + s); } //############################################################################# template < typename T > void CoinDenseVector< T >::operator+=(T value) { for (int i = 0; i < nElements_; i++) elements_[i] += value; } //----------------------------------------------------------------------------- template < typename T > void CoinDenseVector< T >::operator-=(T value) { for (int i = 0; i < nElements_; i++) elements_[i] -= value; } //----------------------------------------------------------------------------- template < typename T > void CoinDenseVector< T >::operator*=(T value) { for (int i = 0; i < nElements_; i++) elements_[i] *= value; } //----------------------------------------------------------------------------- template < typename T > void CoinDenseVector< T >::operator/=(T value) { for (int i = 0; i < nElements_; i++) elements_[i] /= value; } //############################################################################# template < typename T > CoinDenseVector< T >::CoinDenseVector() : nElements_(0) , elements_(NULL) { } //############################################################################# template < typename T > CoinDenseVector< T >::CoinDenseVector(int size, const T *elems) : nElements_(0) , elements_(NULL) { gutsOfSetVector(size, elems); } //----------------------------------------------------------------------------- template < typename T > CoinDenseVector< T >::CoinDenseVector(int size, T value) : nElements_(0) , elements_(NULL) { gutsOfSetConstant(size, value); } //----------------------------------------------------------------------------- template < typename T > CoinDenseVector< T >::CoinDenseVector(const CoinDenseVector< T > &rhs) : nElements_(0) , elements_(NULL) { setVector(rhs.getNumElements(), rhs.getElements()); } //----------------------------------------------------------------------------- template < typename T > CoinDenseVector< T >::~CoinDenseVector() { delete[] elements_; } //############################################################################# template < typename T > void CoinDenseVector< T >::gutsOfSetVector(int size, const T *elems) { if (size != 0) { resize(size); nElements_ = size; CoinDisjointCopyN(elems, size, elements_); } } //----------------------------------------------------------------------------- template < typename T > void CoinDenseVector< T >::gutsOfSetConstant(int size, T value) { if (size != 0) { resize(size); nElements_ = size; CoinFillN(elements_, size, value); } } //############################################################################# /** Access the i'th element of the dense vector. */ template < typename T > T & CoinDenseVector< T >::operator[](int index) const { assert(index >= 0 && index < nElements_); T *where = elements_ + index; return *where; } //############################################################################# // template class CoinDenseVector; This works but causes warning messages template class CoinDenseVector< float >; template class CoinDenseVector< double >; /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinBuild.hpp0000644000175200017520000001153513414454441016145 0ustar coincoin/* $Id: CoinBuild.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinBuild_H #define CoinBuild_H #include "CoinPragma.hpp" #include "CoinTypes.hpp" #include "CoinFinite.hpp" /** In many cases it is natural to build a model by adding one row at a time. In Coin this is inefficient so this class gives some help. An instance of CoinBuild can be built up more efficiently and then added to the Clp/OsiModel in one go. It may be more efficient to have fewer arrays and re-allocate them but this should give a large gain over addRow. I have now extended it to columns. */ class CoinBuild { public: /**@name Useful methods */ //@{ /// add a row void addRow(int numberInRow, const int *columns, const double *elements, double rowLower = -COIN_DBL_MAX, double rowUpper = COIN_DBL_MAX); /// add a column void addColumn(int numberInColumn, const int *rows, const double *elements, double columnLower = 0.0, double columnUpper = COIN_DBL_MAX, double objectiveValue = 0.0); /// add a column inline void addCol(int numberInColumn, const int *rows, const double *elements, double columnLower = 0.0, double columnUpper = COIN_DBL_MAX, double objectiveValue = 0.0) { addColumn(numberInColumn, rows, elements, columnLower, columnUpper, objectiveValue); } /// Return number of rows or maximum found so far inline int numberRows() const { return (type_ == 0) ? numberItems_ : numberOther_; } /// Return number of columns or maximum found so far inline int numberColumns() const { return (type_ == 1) ? numberItems_ : numberOther_; } /// Return number of elements inline CoinBigIndex numberElements() const { return numberElements_; } /** Returns number of elements in a row and information in row */ int row(int whichRow, double &rowLower, double &rowUpper, const int *&indices, const double *&elements) const; /** Returns number of elements in current row and information in row Used as rows may be stored in a chain */ int currentRow(double &rowLower, double &rowUpper, const int *&indices, const double *&elements) const; /// Set current row void setCurrentRow(int whichRow); /// Returns current row number int currentRow() const; /** Returns number of elements in a column and information in column */ int column(int whichColumn, double &columnLower, double &columnUpper, double &objectiveValue, const int *&indices, const double *&elements) const; /** Returns number of elements in current column and information in column Used as columns may be stored in a chain */ int currentColumn(double &columnLower, double &columnUpper, double &objectiveValue, const int *&indices, const double *&elements) const; /// Set current column void setCurrentColumn(int whichColumn); /// Returns current column number int currentColumn() const; /// Returns type inline int type() const { return type_; } //@} /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinBuild(); /** Constructor with type 0==for addRow, 1== for addColumn. */ CoinBuild(int type); /** Destructor */ ~CoinBuild(); //@} /**@name Copy method */ //@{ /** The copy constructor. */ CoinBuild(const CoinBuild &); /// = CoinBuild &operator=(const CoinBuild &); //@} private: /// Set current void setMutableCurrent(int which) const; /// add a item void addItem(int numberInItem, const int *indices, const double *elements, double itemLower, double itemUpper, double objectiveValue); /** Returns number of elements in a item and information in item */ int item(int whichItem, double &itemLower, double &itemUpper, double &objectiveValue, const int *&indices, const double *&elements) const; /** Returns number of elements in current item and information in item Used as items may be stored in a chain */ int currentItem(double &itemLower, double &itemUpper, double &objectiveValue, const int *&indices, const double *&elements) const; /// Set current item void setCurrentItem(int whichItem); /// Returns current item number int currentItem() const; private: /**@name Data members */ //@{ /// Current number of items int numberItems_; /// Current number of other dimension i.e. Columns if addRow (i.e. max) int numberOther_; /// Current number of elements CoinBigIndex numberElements_; /// Current item pointer mutable double *currentItem_; /// First item pointer double *firstItem_; /// Last item pointer double *lastItem_; /// Type of build - 0 for row, 1 for column, -1 unset int type_; //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinParam.cpp0000644000175200017520000003171413414454441016142 0ustar coincoin/* $Id: CoinParam.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include "CoinPragma.hpp" #include "CoinParam.hpp" /* Constructors and destructors There's a generic constructor and one for integer, double, keyword, string, and action parameters. */ /* Default constructor. */ CoinParam::CoinParam() : type_(coinParamInvalid) , name_() , lengthName_(0) , lengthMatch_(0) , lowerDblValue_(0.0) , upperDblValue_(0.0) , dblValue_(0.0) , lowerIntValue_(0) , upperIntValue_(0) , intValue_(0) , strValue_() , definedKwds_() , currentKwd_(-1) , pushFunc_(0) , pullFunc_(0) , shortHelp_() , longHelp_() , display_(false) { /* Nothing to be done here */ } /* Constructor for double parameter */ CoinParam::CoinParam(std::string name, std::string help, double lower, double upper, double dflt, bool display) : type_(coinParamDbl) , name_(name) , lengthName_(0) , lengthMatch_(0) , lowerDblValue_(lower) , upperDblValue_(upper) , dblValue_(dflt) , lowerIntValue_(0) , upperIntValue_(0) , intValue_(0) , strValue_() , definedKwds_() , currentKwd_(-1) , pushFunc_(0) , pullFunc_(0) , shortHelp_(help) , longHelp_() , display_(display) { processName(); } /* Constructor for integer parameter */ CoinParam::CoinParam(std::string name, std::string help, int lower, int upper, int dflt, bool display) : type_(coinParamInt) , name_(name) , lengthName_(0) , lengthMatch_(0) , lowerDblValue_(0.0) , upperDblValue_(0.0) , dblValue_(0.0) , lowerIntValue_(lower) , upperIntValue_(upper) , intValue_(dflt) , strValue_() , definedKwds_() , currentKwd_(-1) , pushFunc_(0) , pullFunc_(0) , shortHelp_(help) , longHelp_() , display_(display) { processName(); } /* Constructor for keyword parameter. */ CoinParam::CoinParam(std::string name, std::string help, std::string firstValue, int dflt, bool display) : type_(coinParamKwd) , name_(name) , lengthName_(0) , lengthMatch_(0) , lowerDblValue_(0.0) , upperDblValue_(0.0) , dblValue_(0.0) , lowerIntValue_(0) , upperIntValue_(0) , intValue_(0) , strValue_() , definedKwds_() , currentKwd_(dflt) , pushFunc_(0) , pullFunc_(0) , shortHelp_(help) , longHelp_() , display_(display) { processName(); definedKwds_.push_back(firstValue); } /* Constructor for string parameter. */ CoinParam::CoinParam(std::string name, std::string help, std::string dflt, bool display) : type_(coinParamStr) , name_(name) , lengthName_(0) , lengthMatch_(0) , lowerDblValue_(0.0) , upperDblValue_(0.0) , dblValue_(0.0) , lowerIntValue_(0) , upperIntValue_(0) , intValue_(0) , strValue_(dflt) , definedKwds_() , currentKwd_(0) , pushFunc_(0) , pullFunc_(0) , shortHelp_(help) , longHelp_() , display_(display) { processName(); } /* Constructor for action parameter. */ CoinParam::CoinParam(std::string name, std::string help, bool display) : type_(coinParamAct) , name_(name) , lengthName_(0) , lengthMatch_(0) , lowerDblValue_(0.0) , upperDblValue_(0.0) , dblValue_(0.0) , lowerIntValue_(0) , upperIntValue_(0) , intValue_(0) , strValue_() , definedKwds_() , currentKwd_(0) , pushFunc_(0) , pullFunc_(0) , shortHelp_(help) , longHelp_() , display_(display) { processName(); } /* Copy constructor. */ CoinParam::CoinParam(const CoinParam &orig) : type_(orig.type_) , lengthName_(orig.lengthName_) , lengthMatch_(orig.lengthMatch_) , lowerDblValue_(orig.lowerDblValue_) , upperDblValue_(orig.upperDblValue_) , dblValue_(orig.dblValue_) , lowerIntValue_(orig.lowerIntValue_) , upperIntValue_(orig.upperIntValue_) , intValue_(orig.intValue_) , currentKwd_(orig.currentKwd_) , pushFunc_(orig.pushFunc_) , pullFunc_(orig.pullFunc_) , display_(orig.display_) { name_ = orig.name_; strValue_ = orig.strValue_; definedKwds_ = orig.definedKwds_; shortHelp_ = orig.shortHelp_; longHelp_ = orig.longHelp_; } /* Clone */ CoinParam *CoinParam::clone() { return (new CoinParam(*this)); } CoinParam &CoinParam::operator=(const CoinParam &rhs) { if (this != &rhs) { type_ = rhs.type_; name_ = rhs.name_; lengthName_ = rhs.lengthName_; lengthMatch_ = rhs.lengthMatch_; lowerDblValue_ = rhs.lowerDblValue_; upperDblValue_ = rhs.upperDblValue_; dblValue_ = rhs.dblValue_; lowerIntValue_ = rhs.lowerIntValue_; upperIntValue_ = rhs.upperIntValue_; intValue_ = rhs.intValue_; strValue_ = rhs.strValue_; definedKwds_ = rhs.definedKwds_; currentKwd_ = rhs.currentKwd_; pushFunc_ = rhs.pushFunc_; pullFunc_ = rhs.pullFunc_; shortHelp_ = rhs.shortHelp_; longHelp_ = rhs.longHelp_; display_ = rhs.display_; } return *this; } /* Destructor */ CoinParam::~CoinParam() { /* Nothing more to do */ } /* Methods to manipulate a CoinParam object. */ /* Process the parameter name. Process the name for efficient matching: determine if an `!' is present. If so, locate and record the position and remove the `!'. */ void CoinParam::processName() { std::string::size_type shriekPos = name_.find('!'); lengthName_ = name_.length(); if (shriekPos == std::string::npos) { lengthMatch_ = lengthName_; } else { lengthMatch_ = shriekPos; name_ = name_.substr(0, shriekPos) + name_.substr(shriekPos + 1); lengthName_--; } return; } /* Check an input string to see if it matches the parameter name. The whole input string must match, and the length of the match must exceed the minimum match length. A match is impossible if the string is longer than the name. Returns: 0 for no match, 1 for a successful match, 2 if the match is short */ int CoinParam::matches(std::string input) const { size_t inputLen = input.length(); if (inputLen <= lengthName_) { size_t i; for (i = 0; i < inputLen; i++) { if (tolower(name_[i]) != tolower(input[i])) break; } if (i < inputLen) { return (0); } else if (i >= lengthMatch_) { return (1); } else { return (2); } } return (0); } /* Return the parameter name, formatted to indicate how it'll be matched. E.g., some!Name will come back as some(Name). */ std::string CoinParam::matchName() const { if (lengthMatch_ == lengthName_) { return name_; } else { return name_.substr(0, lengthMatch_) + "(" + name_.substr(lengthMatch_) + ")"; } } /* Print the long help message and a message about appropriate values. */ void CoinParam::printLongHelp() const { if (longHelp_ != "") { CoinParamUtils::printIt(longHelp_.c_str()); } else if (shortHelp_ != "") { CoinParamUtils::printIt(shortHelp_.c_str()); } else { CoinParamUtils::printIt("No help provided."); } switch (type_) { case coinParamDbl: { std::cout << "" << std::endl; assert(upperDblValue_ > lowerDblValue_); break; } case coinParamInt: { std::cout << "" << std::endl; assert(upperIntValue_ > lowerIntValue_); break; } case coinParamKwd: { printKwds(); break; } case coinParamStr: { std::cout << ""; } else { std::cout << "`" << strValue_ << "'>"; } std::cout << std::endl; break; } case coinParamAct: { break; } default: { std::cout << "!! invalid parameter type !!" << std::endl; assert(false); } } } /* Methods to manipulate the value of a parameter. */ /* Methods to manipulate the values associated with a keyword parameter. */ /* Add a keyword to the list for a keyword parameter. */ void CoinParam::appendKwd(std::string kwd) { assert(type_ == coinParamKwd); definedKwds_.push_back(kwd); } /* Scan the keywords of a keyword parameter and return the integer index of the keyword matching the input, or -1 for no match. */ int CoinParam::kwdIndex(std::string input) const { assert(type_ == coinParamKwd); int whichItem = -1; size_t numberItems = definedKwds_.size(); if (numberItems > 0) { size_t inputLen = input.length(); size_t it; /* Open a loop to check each keyword against the input string. We don't record the match length for keywords, so we need to check each one for an `!' and do the necessary preprocessing (record position and elide `!') before checking for a match of the required length. */ for (it = 0; it < numberItems; it++) { std::string kwd = definedKwds_[it]; std::string::size_type shriekPos = kwd.find('!'); size_t kwdLen = kwd.length(); size_t matchLen = kwdLen; if (shriekPos != std::string::npos) { matchLen = shriekPos; kwd = kwd.substr(0, shriekPos) + kwd.substr(shriekPos + 1); kwdLen = kwd.length(); } /* Match is possible only if input is shorter than the keyword. The entire input must match and the match must exceed the minimum length. */ if (inputLen <= kwdLen) { unsigned int i; for (i = 0; i < inputLen; i++) { if (tolower(kwd[i]) != tolower(input[i])) break; } if (i >= inputLen && i >= matchLen) { whichItem = static_cast< int >(it); break; } } } } return (whichItem); } /* Set current value for a keyword parameter using a string. */ void CoinParam::setKwdVal(const std::string value) { assert(type_ == coinParamKwd); int action = kwdIndex(value); if (action >= 0) { currentKwd_ = action; } } /* Set current value for keyword parameter using an integer. Echo the new value to cout if requested. */ void CoinParam::setKwdVal(int value, bool printIt) { assert(type_ == coinParamKwd); assert(value >= 0 && unsigned(value) < definedKwds_.size()); if (printIt && value != currentKwd_) { std::cout << "Option for " << name_ << " changed from " << definedKwds_[currentKwd_] << " to " << definedKwds_[value] << std::endl; } currentKwd_ = value; } /* Return the string corresponding to the current value. */ std::string CoinParam::kwdVal() const { assert(type_ == coinParamKwd); return (definedKwds_[currentKwd_]); } /* Print the keywords for a keyword parameter, formatted to indicate how they'll be matched. (E.g., some!Name prints as some(Name).). Follow with current value. */ void CoinParam::printKwds() const { assert(type_ == coinParamKwd); std::cout << "Possible options for " << name_ << " are:"; unsigned int it; int maxAcross = 5; for (it = 0; it < definedKwds_.size(); it++) { std::string kwd = definedKwds_[it]; std::string::size_type shriekPos = kwd.find('!'); if (shriekPos != std::string::npos) { kwd = kwd.substr(0, shriekPos) + "(" + kwd.substr(shriekPos + 1) + ")"; } if (it % maxAcross == 0) { std::cout << std::endl; } std::cout << " " << kwd; } std::cout << std::endl; assert(currentKwd_ >= 0 && unsigned(currentKwd_) < definedKwds_.size()); std::string current = definedKwds_[currentKwd_]; std::string::size_type shriekPos = current.find('!'); if (shriekPos != std::string::npos) { current = current.substr(0, shriekPos) + "(" + current.substr(shriekPos + 1) + ")"; } std::cout << " " << std::endl; } /* Methods to manipulate the value of a string parameter. */ void CoinParam::setStrVal(std::string value) { assert(type_ == coinParamStr); strValue_ = value; } std::string CoinParam::strVal() const { assert(type_ == coinParamStr); return (strValue_); } /* Methods to manipulate the value of a double parameter. */ void CoinParam::setDblVal(double value) { assert(type_ == coinParamDbl); dblValue_ = value; } double CoinParam::dblVal() const { assert(type_ == coinParamDbl); return (dblValue_); } /* Methods to manipulate the value of an integer parameter. */ void CoinParam::setIntVal(int value) { assert(type_ == coinParamInt); intValue_ = value; } int CoinParam::intVal() const { assert(type_ == coinParamInt); return (intValue_); } /* A print function (friend of the class) */ std::ostream &operator<<(std::ostream &s, const CoinParam ¶m) { switch (param.type()) { case CoinParam::coinParamDbl: { return (s << param.dblVal()); } case CoinParam::coinParamInt: { return (s << param.intVal()); } case CoinParam::coinParamKwd: { return (s << param.kwdVal()); } case CoinParam::coinParamStr: { return (s << param.strVal()); } case CoinParam::coinParamAct: { return (s << ""); } default: { return (s << "!! invalid parameter type !!"); } } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveZeros.cpp0000644000175200017520000002112413414454441017716 0ustar coincoin/* $Id: CoinPresolveZeros.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #include "CoinPresolveZeros.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif namespace { // begin unnamed file-local namespace /* Count the number of zeros in the columns listed in checkcols. Trim back checkcols to just the columns with zeros. */ int count_col_zeros(int &ncheckcols, int *checkcols, const CoinBigIndex *mcstrt, const double *colels, const int *hincol) { int nzeros = 0; int zeroCols = 0; for (int ndx = 0; ndx < ncheckcols; ndx++) { const int j = checkcols[ndx]; const CoinBigIndex kcs = mcstrt[j]; const CoinBigIndex kce = kcs + hincol[j]; int zerosj = 0; for (CoinBigIndex kcol = kcs; kcol < kce; ++kcol) { if (fabs(colels[kcol]) < ZTOLDP) { zerosj++; } } if (zerosj) { checkcols[zeroCols++] = j; nzeros += zerosj; } } ncheckcols = zeroCols; return (nzeros); } /* Count the number of zeros. Intended for the case where all columns 0 .. ncheckcols should be scanned. Typically ncheckcols is the number of columns in the matrix. Leave a list of columns with explicit zeros at the front of checkcols, with the count in ncheckcols. */ int count_col_zeros2(int &ncheckcols, int *checkcols, const CoinBigIndex *mcstrt, const double *colels, const int *hincol) { int nzeros = 0; int zeroCols = 0; for (int j = 0; j < ncheckcols; j++) { const CoinBigIndex kcs = mcstrt[j]; CoinBigIndex kce = kcs + hincol[j]; int zerosj = 0; for (CoinBigIndex k = kcs; k < kce; ++k) { if (fabs(colels[k]) < ZTOLDP) { zerosj++; } } if (zerosj) { checkcols[zeroCols++] = j; nzeros += zerosj; } } ncheckcols = zeroCols; return (nzeros); } /* Searches the cols in checkcols for zero entries. Creates a dropped_zero entry for each one; doesn't check for out-of-memory. Returns number of zeros found. */ int drop_col_zeros(int ncheckcols, const int *checkcols, const CoinBigIndex *mcstrt, double *colels, int *hrow, int *hincol, presolvehlink *clink, dropped_zero *actions) { int nactions = 0; /* Physically remove explicit zeros. To maintain loose packing, move the element at the end of the column into the empty space. Of course, that element could also be zero, so recheck the position. */ for (int i = 0; i < ncheckcols; i++) { int col = checkcols[i]; const CoinBigIndex kcs = mcstrt[col]; CoinBigIndex kce = kcs + hincol[col]; #if PRESOLVE_DEBUG > 1 std::cout << " scanning column " << col << "..."; #endif for (CoinBigIndex k = kcs; k < kce; ++k) { if (fabs(colels[k]) < ZTOLDP) { actions[nactions].col = col; actions[nactions].row = hrow[k]; #if PRESOLVE_DEBUG > 2 std::cout << " (" << hrow[k] << "," << col << ") "; #endif nactions++; kce--; colels[k] = colels[kce]; hrow[k] = hrow[kce]; hincol[col]--; --k; } } #if PRESOLVE_DEBUG > 1 if (nactions) std::cout << std::endl; #endif if (hincol[col] == 0) PRESOLVE_REMOVE_LINK(clink, col); } return (nactions); } /* Scan rows to remove explicit zeros. This will, in general, scan a row once for each explicit zero in the row, but will remove all zeros the first time through. It's tempting to try and do something about this, but given the relatively small number of explicit zeros created by presolve, the bookkeeping likely exceeds the gain. */ void drop_row_zeros(int nzeros, const dropped_zero *zeros, const CoinBigIndex *mrstrt, double *rowels, int *hcol, int *hinrow, presolvehlink *rlink) { for (int i = 0; i < nzeros; i++) { int row = zeros[i].row; const CoinBigIndex krs = mrstrt[row]; CoinBigIndex kre = krs + hinrow[row]; #if PRESOLVE_DEBUG > 2 std::cout << " scanning row " << row << " for a(" << row << "," << zeros[i].col << ") ..."; bool found = false; #endif for (CoinBigIndex k = krs; k < kre; k++) { if (fabs(rowels[k]) < ZTOLDP) { #if PRESOLVE_DEBUG > 2 std::cout << " (" << row << "," << hcol[k] << ") "; found = true; #endif rowels[k] = rowels[kre - 1]; hcol[k] = hcol[kre - 1]; kre--; hinrow[row]--; --k; } } #if PRESOLVE_DEBUG > 2 if (found) std::cout << " found; " << hinrow[row] << " coeffs remaining." << std::endl; #endif if (hinrow[row] == 0) PRESOLVE_REMOVE_LINK(rlink, row); } } } // end unnamed file-local namespace /* Scan the columns listed in checkcols for explicit zeros and eliminate them. For the special case where all columns should be scanned (ncheckcols == prob->ncols_), there is no need to initialise checkcols. */ const CoinPresolveAction * drop_zero_coefficients_action::presolve(CoinPresolveMatrix *prob, int *checkcols, int ncheckcols, const CoinPresolveAction *next) { double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; presolvehlink *clink = prob->clink_; presolvehlink *rlink = prob->rlink_; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering drop_zero_action::presolve, " << ncheckcols << " columns to scan." << std::endl; #endif presolve_consistent(prob); presolve_links_ok(prob); presolve_check_sol(prob); presolve_check_nbasic(prob); #endif /* Scan for zeros. */ int nzeros; if (ncheckcols == prob->ncols_) { nzeros = count_col_zeros2(ncheckcols, checkcols, mcstrt, colels, hincol); } else { nzeros = count_col_zeros(ncheckcols, checkcols, mcstrt, colels, hincol); } #if PRESOLVE_DEBUG > 1 std::cout << " drop_zero_action: " << nzeros << " zeros in " << ncheckcols << " columns." << std::endl; #endif /* Do we have zeros to remove? If so, get to it. */ if (nzeros != 0) { /* We have zeros to remove. drop_col_zeros will scan the columns and remove zeros, adding records of the dropped entries to zeros. The we need to clean the row representation. */ dropped_zero *zeros = new dropped_zero[nzeros]; nzeros = drop_col_zeros(ncheckcols, checkcols, mcstrt, colels, hrow, hincol, clink, zeros); double *rowels = prob->rowels_; int *hcol = prob->hcol_; CoinBigIndex *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; drop_row_zeros(nzeros, zeros, mrstrt, rowels, hcol, hinrow, rlink); next = new drop_zero_coefficients_action(nzeros, zeros, next); } #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_consistent(prob); presolve_links_ok(prob); presolve_check_sol(prob); presolve_check_nbasic(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 std::cout << "Leaving drop_zero_action::presolve, dropped " << nzeros << " zeroes." << std::endl; #endif return (next); } /* This wrapper initialises checkcols for the case where the entire matrix should be scanned. Typically used from the presolve driver as part of final cleanup. */ const CoinPresolveAction * drop_zero_coefficients(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { int ncheck = prob->ncols_; int *checkcols = new int[ncheck]; if (prob->anyProhibited()) { ncheck = 0; for (int i = 0; i < prob->ncols_; i++) if (!prob->colProhibited(i)) checkcols[ncheck++] = i; } const CoinPresolveAction *retval = drop_zero_coefficients_action::presolve(prob, checkcols, ncheck, next); delete[] checkcols; return (retval); } void drop_zero_coefficients_action::postsolve(CoinPostsolveMatrix *prob) const { const int nzeros = nzeros_; const dropped_zero *const zeros = zeros_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; CoinBigIndex *link = prob->link_; CoinBigIndex &free_list = prob->free_list_; for (const dropped_zero *z = &zeros[nzeros - 1]; zeros <= z; z--) { const int i = z->row; const int j = z->col; CoinBigIndex k = free_list; assert(k >= 0 && k < prob->bulk0_); free_list = link[free_list]; hrow[k] = i; colels[k] = 0.0; link[k] = mcstrt[j]; mcstrt[j] = k; hincol[j]++; } #if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob); #endif } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinSnapshot.hpp0000644000175200017520000003635213414454441016711 0ustar coincoin/* $Id: CoinSnapshot.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinSnapshot_H #define CoinSnapshot_H class CoinPackedMatrix; #include "CoinTypes.hpp" //############################################################################# /** NON Abstract Base Class for interfacing with cut generators or branching code or .. It is designed to be snapshot of a problem at a node in tree The class may or may not own the arrays - see owned_ Querying a problem that has no data associated with it will result in zeros for the number of rows and columns, and NULL pointers from the methods that return arrays. */ class CoinSnapshot { public: //--------------------------------------------------------------------------- /**@name Problem query methods The Matrix pointers may be NULL */ //@{ /// Get number of columns inline int getNumCols() const { return numCols_; } /// Get number of rows inline int getNumRows() const { return numRows_; } /// Get number of nonzero elements inline int getNumElements() const { return numElements_; } /// Get number of integer variables inline int getNumIntegers() const { return numIntegers_; } /// Get pointer to array[getNumCols()] of column lower bounds inline const double *getColLower() const { return colLower_; } /// Get pointer to array[getNumCols()] of column upper bounds inline const double *getColUpper() const { return colUpper_; } /// Get pointer to array[getNumRows()] of row lower bounds inline const double *getRowLower() const { return rowLower_; } /// Get pointer to array[getNumRows()] of row upper bounds inline const double *getRowUpper() const { return rowUpper_; } /** Get pointer to array[getNumRows()] of row right-hand sides This gives same results as OsiSolverInterface for useful cases If getRowUpper()[i] != infinity then getRightHandSide()[i] == getRowUpper()[i] else getRightHandSide()[i] == getRowLower()[i] */ inline const double *getRightHandSide() const { return rightHandSide_; } /// Get pointer to array[getNumCols()] of objective function coefficients inline const double *getObjCoefficients() const { return objCoefficients_; } /// Get objective function sense (1 for min (default), -1 for max) inline double getObjSense() const { return objSense_; } /// Return true if variable is continuous inline bool isContinuous(int colIndex) const { return colType_[colIndex] == 'C'; } /// Return true if variable is binary inline bool isBinary(int colIndex) const { return colType_[colIndex] == 'B'; } /// Return true if column is integer. inline bool isInteger(int colIndex) const { return colType_[colIndex] == 'B' || colType_[colIndex] == 'I'; } /// Return true if variable is general integer inline bool isIntegerNonBinary(int colIndex) const { return colType_[colIndex] == 'I'; } /// Return true if variable is binary and not fixed at either bound inline bool isFreeBinary(int colIndex) const { return colType_[colIndex] == 'B' && colUpper_[colIndex] > colLower_[colIndex]; } /// Get colType array ('B', 'I', or 'C' for Binary, Integer and Continuous) inline const char *getColType() const { return colType_; } /// Get pointer to row-wise copy of current matrix inline const CoinPackedMatrix *getMatrixByRow() const { return matrixByRow_; } /// Get pointer to column-wise copy of current matrix inline const CoinPackedMatrix *getMatrixByCol() const { return matrixByCol_; } /// Get pointer to row-wise copy of "original" matrix inline const CoinPackedMatrix *getOriginalMatrixByRow() const { return originalMatrixByRow_; } /// Get pointer to column-wise copy of "original" matrix inline const CoinPackedMatrix *getOriginalMatrixByCol() const { return originalMatrixByCol_; } //@} /**@name Solution query methods */ //@{ /// Get pointer to array[getNumCols()] of primal variable values inline const double *getColSolution() const { return colSolution_; } /// Get pointer to array[getNumRows()] of dual variable values inline const double *getRowPrice() const { return rowPrice_; } /// Get a pointer to array[getNumCols()] of reduced costs inline const double *getReducedCost() const { return reducedCost_; } /// Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector). inline const double *getRowActivity() const { return rowActivity_; } /// Get pointer to array[getNumCols()] of primal variable values which should not be separated (for debug) inline const double *getDoNotSeparateThis() const { return doNotSeparateThis_; } //@} /**@name Other scalar get methods */ //@{ /// Get solver's value for infinity inline double getInfinity() const { return infinity_; } /** Get objective function value - includinbg any offset i.e. sum c sub j * x subj - objValue = objOffset */ inline double getObjValue() const { return objValue_; } /// Get objective offset i.e. sum c sub j * x subj -objValue = objOffset inline double getObjOffset() const { return objOffset_; } /// Get dual tolerance inline double getDualTolerance() const { return dualTolerance_; } /// Get primal tolerance inline double getPrimalTolerance() const { return primalTolerance_; } /// Get integer tolerance inline double getIntegerTolerance() const { return integerTolerance_; } /// Get integer upper bound i.e. best solution * getObjSense inline double getIntegerUpperBound() const { return integerUpperBound_; } /// Get integer lower bound i.e. best possible solution * getObjSense inline double getIntegerLowerBound() const { return integerLowerBound_; } //@} //--------------------------------------------------------------------------- /**@name Method to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is NULL then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
All solution type arrays will be deleted */ void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub, bool makeRowCopy = false); //@} //--------------------------------------------------------------------------- /**@name Methods to set data */ //@{ /// Set number of columns inline void setNumCols(int value) { numCols_ = value; } /// Set number of rows inline void setNumRows(int value) { numRows_ = value; } /// Set number of nonzero elements inline void setNumElements(int value) { numElements_ = value; } /// Set number of integer variables inline void setNumIntegers(int value) { numIntegers_ = value; } /// Set pointer to array[getNumCols()] of column lower bounds void setColLower(const double *array, bool copyIn = true); /// Set pointer to array[getNumCols()] of column upper bounds void setColUpper(const double *array, bool copyIn = true); /// Set pointer to array[getNumRows()] of row lower bounds void setRowLower(const double *array, bool copyIn = true); /// Set pointer to array[getNumRows()] of row upper bounds void setRowUpper(const double *array, bool copyIn = true); /** Set pointer to array[getNumRows()] of row right-hand sides This gives same results as OsiSolverInterface for useful cases If getRowUpper()[i] != infinity then getRightHandSide()[i] == getRowUpper()[i] else getRightHandSide()[i] == getRowLower()[i] */ void setRightHandSide(const double *array, bool copyIn = true); /** Create array[getNumRows()] of row right-hand sides using existing information This gives same results as OsiSolverInterface for useful cases If getRowUpper()[i] != infinity then getRightHandSide()[i] == getRowUpper()[i] else getRightHandSide()[i] == getRowLower()[i] */ void createRightHandSide(); /// Set pointer to array[getNumCols()] of objective function coefficients void setObjCoefficients(const double *array, bool copyIn = true); /// Set objective function sense (1 for min (default), -1 for max) inline void setObjSense(double value) { objSense_ = value; } /// Set colType array ('B', 'I', or 'C' for Binary, Integer and Continuous) void setColType(const char *array, bool copyIn = true); /// Set pointer to row-wise copy of current matrix void setMatrixByRow(const CoinPackedMatrix *matrix, bool copyIn = true); /// Create row-wise copy from MatrixByCol void createMatrixByRow(); /// Set pointer to column-wise copy of current matrix void setMatrixByCol(const CoinPackedMatrix *matrix, bool copyIn = true); /// Set pointer to row-wise copy of "original" matrix void setOriginalMatrixByRow(const CoinPackedMatrix *matrix, bool copyIn = true); /// Set pointer to column-wise copy of "original" matrix void setOriginalMatrixByCol(const CoinPackedMatrix *matrix, bool copyIn = true); /// Set pointer to array[getNumCols()] of primal variable values void setColSolution(const double *array, bool copyIn = true); /// Set pointer to array[getNumRows()] of dual variable values void setRowPrice(const double *array, bool copyIn = true); /// Set a pointer to array[getNumCols()] of reduced costs void setReducedCost(const double *array, bool copyIn = true); /// Set pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector). void setRowActivity(const double *array, bool copyIn = true); /// Set pointer to array[getNumCols()] of primal variable values which should not be separated (for debug) void setDoNotSeparateThis(const double *array, bool copyIn = true); /// Set solver's value for infinity inline void setInfinity(double value) { infinity_ = value; } /// Set objective function value (including any rhs offset) inline void setObjValue(double value) { objValue_ = value; } /// Set objective offset i.e. sum c sub j * x subj -objValue = objOffset inline void setObjOffset(double value) { objOffset_ = value; } /// Set dual tolerance inline void setDualTolerance(double value) { dualTolerance_ = value; } /// Set primal tolerance inline void setPrimalTolerance(double value) { primalTolerance_ = value; } /// Set integer tolerance inline void setIntegerTolerance(double value) { integerTolerance_ = value; } /// Set integer upper bound i.e. best solution * getObjSense inline void setIntegerUpperBound(double value) { integerUpperBound_ = value; } /// Set integer lower bound i.e. best possible solution * getObjSense inline void setIntegerLowerBound(double value) { integerLowerBound_ = value; } //@} //--------------------------------------------------------------------------- ///@name Constructors and destructors //@{ /// Default Constructor CoinSnapshot(); /// Copy constructor CoinSnapshot(const CoinSnapshot &); /// Assignment operator CoinSnapshot &operator=(const CoinSnapshot &rhs); /// Destructor virtual ~CoinSnapshot(); //@} private: ///@name private functions //@{ /** Does main work of destructor - type (or'ed) 1 - NULLify pointers 2 - delete pointers 4 - initialize scalars (tolerances etc) 8 - initialize scalars (objValue etc0 */ void gutsOfDestructor(int type); /// Does main work of copy void gutsOfCopy(const CoinSnapshot &rhs); //@} ///@name Private member data /// objective function sense (1 for min (default), -1 for max) double objSense_; /// solver's value for infinity double infinity_; /// objective function value (including any rhs offset) double objValue_; /// objective offset i.e. sum c sub j * x subj -objValue = objOffset double objOffset_; /// dual tolerance double dualTolerance_; /// primal tolerance double primalTolerance_; /// integer tolerance double integerTolerance_; /// integer upper bound i.e. best solution * getObjSense double integerUpperBound_; /// integer lower bound i.e. best possible solution * getObjSense double integerLowerBound_; /// pointer to array[getNumCols()] of column lower bounds const double *colLower_; /// pointer to array[getNumCols()] of column upper bounds const double *colUpper_; /// pointer to array[getNumRows()] of row lower bounds const double *rowLower_; /// pointer to array[getNumRows()] of row upper bounds const double *rowUpper_; /// pointer to array[getNumRows()] of rhs side values const double *rightHandSide_; /// pointer to array[getNumCols()] of objective function coefficients const double *objCoefficients_; /// colType array ('B', 'I', or 'C' for Binary, Integer and Continuous) const char *colType_; /// pointer to row-wise copy of current matrix const CoinPackedMatrix *matrixByRow_; /// pointer to column-wise copy of current matrix const CoinPackedMatrix *matrixByCol_; /// pointer to row-wise copy of "original" matrix const CoinPackedMatrix *originalMatrixByRow_; /// pointer to column-wise copy of "original" matrix const CoinPackedMatrix *originalMatrixByCol_; /// pointer to array[getNumCols()] of primal variable values const double *colSolution_; /// pointer to array[getNumRows()] of dual variable values const double *rowPrice_; /// a pointer to array[getNumCols()] of reduced costs const double *reducedCost_; /// pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector). const double *rowActivity_; /// pointer to array[getNumCols()] of primal variable values which should not be separated (for debug) const double *doNotSeparateThis_; /// number of columns int numCols_; /// number of rows int numRows_; /// number of nonzero elements int numElements_; /// number of integer variables int numIntegers_; /// To say whether arrays etc are owned by CoinSnapshot typedef struct { unsigned int colLower : 1; unsigned int colUpper : 1; unsigned int rowLower : 1; unsigned int rowUpper : 1; unsigned int rightHandSide : 1; unsigned int objCoefficients : 1; unsigned int colType : 1; unsigned int matrixByRow : 1; unsigned int matrixByCol : 1; unsigned int originalMatrixByRow : 1; unsigned int originalMatrixByCol : 1; unsigned int colSolution : 1; unsigned int rowPrice : 1; unsigned int reducedCost : 1; unsigned int rowActivity : 1; unsigned int doNotSeparateThis : 1; } coinOwned; coinOwned owned_; //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/Coin_C_defines.h0000644000175200017520000000765413427105271016571 0ustar coincoin/* $Id: Coin_C_defines.h 2089 2019-02-07 19:44:57Z unxusr $ */ /* Copyright (C) 2002, 2003 International Business Machines Corporation and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ #ifndef CoinCDefine_H #define CoinCDefine_H /** This has #defines etc for the "C" interface to Coin. If COIN_EXTERN_C defined then an extra extern C */ #if defined(CLP_EXTERN_C) #define COIN_EXTERN_C #define COIN_NO_SBB #define COIN_NO_CBC #endif #if defined(SBB_EXTERN_C) #define COIN_EXTERN_C #define COIN_NO_CLP #endif #if defined(CBC_EXTERN_C) #define COIN_EXTERN_C #define COIN_NO_CLP #endif /* We need to allow for Microsoft */ #ifndef COINLIBAPI #if defined(CBCCINTERFACEDLL_EXPORTS) || defined(CLPMSDLL) #if defined(COIN_EXTERN_C) #define COINLIBAPI __declspec(dllexport) #else #define COINLIBAPI __declspec(dllexport) #endif #define COINLINKAGE __stdcall #define COINLINKAGE_CB __cdecl #else #if defined(COIN_EXTERN_C) #define COINLIBAPI extern "C" #else #define COINLIBAPI #endif #define COINLINKAGE #define COINLINKAGE_CB #endif #endif /** User does not need to see structure of model but C++ code does */ #if defined(CLP_EXTERN_C) /* Real typedef for structure */ class CMessageHandler; typedef struct { ClpSimplex *model_; CMessageHandler *handler_; } Clp_Simplex; #else typedef void Clp_Simplex; #endif #ifndef COIN_NO_CLP /** typedef for user call back. The cvec are constructed so don't need to be const*/ #if COIN_BIG_INDEX == 0 typedef void(COINLINKAGE_CB *clp_callback)(Clp_Simplex *model, int msgno, int ndouble, const double *dvec, int nint, const int *ivec, int nchar, char **cvec); #elif COIN_BIG_INDEX == 1 typedef void(COINLINKAGE_CB *clp_callback)(Clp_Simplex *model, int msgno, int ndouble, const double *dvec, int nint, const long *ivec, int nchar, char **cvec); #else typedef void(COINLINKAGE_CB *clp_callback)(Clp_Simplex *model, int msgno, int ndouble, const double *dvec, int nint, const long long *ivec, int nchar, char **cvec); #endif #endif /** User does not need to see structure of model but C++ code does */ #if defined(SBB_EXTERN_C) /* Real typedef for structure */ class Sbb_MessageHandler; typedef struct { OsiClpSolverInterface *solver_; SbbModel *model_; Sbb_MessageHandler *handler_; char *information_; } Sbb_Model; #else typedef void Sbb_Model; #endif #if defined(CBC_EXTERN_C) /* Real typedef for structure */ class Cbc_MessageHandler; typedef struct { OsiClpSolverInterface *solver_; CbcModel *model_; CbcSolverUsefulData *cbcData; Cbc_MessageHandler *handler_; std::vector< std::string > cmdargs_; char relax_; // cache for columns int colSpace; int nCols; int cNameSpace; int *cNameStart; char *cInt; char *cNames; double *cLB; double *cUB; double *cObj; } Cbc_Model; #else typedef void Cbc_Model; #endif #ifndef COIN_NO_SBB /** typedef for user call back. The cvec are constructed so don't need to be const*/ typedef void(COINLINKAGE_CB *sbb_callback)(Sbb_Model *model, int msgno, int ndouble, const double *dvec, int nint, const int *ivec, int nchar, char **cvec); typedef void(COINLINKAGE_CB *cbc_callback)(Cbc_Model *model, int msgno, int ndouble, const double *dvec, int nint, const int *ivec, int nchar, char **cvec); /** typedef for cbc cut callback osiSolver needs to be an OsiSolverInterface object, * osiCuts is an OsiCuts object and appdata is a pointer that will be passed to the cut * generation, you can use it to point to a data structure with information about the original problem, * for instance **/ typedef void(COINLINKAGE_CB *cbc_cut_callback)(void *osiSolver, void *osiCuts, void *appdata); #endif #if COIN_BIG_INDEX == 0 typedef int CoinBigIndex; #elif COIN_BIG_INDEX == 1 typedef long CoinBigIndex; #else typedef long long CoinBigIndex; #endif /* just in case used somewhere */ #undef COIN_NO_CLP #undef COIN_NO_SBB #undef COIN_NO_CBC #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPackedVectorBase.cpp0000644000175200017520000002140613414454441020244 0ustar coincoin/* $Id: CoinPackedVectorBase.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include "CoinPackedVectorBase.hpp" #include "CoinTypes.hpp" #include "CoinHelperFunctions.hpp" #include "CoinFloatEqual.hpp" //############################################################################# double * CoinPackedVectorBase::denseVector(int denseSize) const { if (getMaxIndex() >= denseSize) throw CoinError("Dense vector size is less than max index", "denseVector", "CoinPackedVectorBase"); double *dv = new double[denseSize]; CoinFillN(dv, denseSize, 0.0); const int s = getNumElements(); const int *inds = getIndices(); const double *elems = getElements(); for (int i = 0; i < s; ++i) dv[inds[i]] = elems[i]; return dv; } //----------------------------------------------------------------------------- double CoinPackedVectorBase::operator[](int i) const { if (!testedDuplicateIndex_) duplicateIndex("operator[]", "CoinPackedVectorBase"); // Get a reference to a map of full storage indices to // packed storage location. const std::set< int > &sv = *indexSet("operator[]", "CoinPackedVectorBase"); #if 1 if (sv.find(i) == sv.end()) return 0.0; return getElements()[findIndex(i)]; #else // LL: suggested change, somthing is wrong with this const size_t ind = std::distance(sv.begin(), sv.find(i)); return (ind == sv.size()) ? 0.0 : getElements()[ind]; #endif } //############################################################################# void CoinPackedVectorBase::setTestForDuplicateIndex(bool test) const { if (test == true) { testForDuplicateIndex_ = true; duplicateIndex("setTestForDuplicateIndex", "CoinPackedVectorBase"); } else { testForDuplicateIndex_ = false; testedDuplicateIndex_ = false; } } //############################################################################# void CoinPackedVectorBase::setTestForDuplicateIndexWhenTrue(bool test) const { // We know everything is okay so let's not test (e.g. full array) testForDuplicateIndex_ = test; testedDuplicateIndex_ = test; } //############################################################################# int CoinPackedVectorBase::getMaxIndex() const { findMaxMinIndices(); return maxIndex_; } //----------------------------------------------------------------------------- int CoinPackedVectorBase::getMinIndex() const { findMaxMinIndices(); return minIndex_; } //----------------------------------------------------------------------------- void CoinPackedVectorBase::duplicateIndex(const char *methodName, const char *className) const { if (testForDuplicateIndex()) indexSet(methodName, className); testedDuplicateIndex_ = true; } //----------------------------------------------------------------------------- bool CoinPackedVectorBase::isExistingIndex(int i) const { if (!testedDuplicateIndex_) duplicateIndex("indexExists", "CoinPackedVectorBase"); const std::set< int > &sv = *indexSet("indexExists", "CoinPackedVectorBase"); return sv.find(i) != sv.end(); } int CoinPackedVectorBase::findIndex(int i) const { const int *inds = getIndices(); int retVal = static_cast< int >(std::find(inds, inds + getNumElements(), i) - inds); if (retVal == getNumElements()) retVal = -1; return retVal; } //############################################################################# bool CoinPackedVectorBase::operator==(const CoinPackedVectorBase &rhs) const { if (getNumElements() == 0 || rhs.getNumElements() == 0) { if (getNumElements() == 0 && rhs.getNumElements() == 0) return (true); else return (false); } else { return (getNumElements() == rhs.getNumElements() && std::equal(getIndices(), getIndices() + getNumElements(), rhs.getIndices()) && std::equal(getElements(), getElements() + getNumElements(), rhs.getElements())); } } //----------------------------------------------------------------------------- bool CoinPackedVectorBase::operator!=(const CoinPackedVectorBase &rhs) const { return !((*this) == rhs); } //----------------------------------------------------------------------------- int CoinPackedVectorBase::compare(const CoinPackedVectorBase &rhs) const { const int size = getNumElements(); int itmp = size - rhs.getNumElements(); if (itmp != 0) { return itmp; } itmp = memcmp(getIndices(), rhs.getIndices(), size * sizeof(int)); if (itmp != 0) { return itmp; } return memcmp(getElements(), rhs.getElements(), size * sizeof(double)); } bool CoinPackedVectorBase::isEquivalent(const CoinPackedVectorBase &rhs) const { return isEquivalent(rhs, CoinRelFltEq()); } //############################################################################# double CoinPackedVectorBase::dotProduct(const double *dense) const { const double *elems = getElements(); const int *inds = getIndices(); double dp = 0.0; for (int i = getNumElements() - 1; i >= 0; --i) dp += elems[i] * dense[inds[i]]; return dp; } //----------------------------------------------------------------------------- double CoinPackedVectorBase::oneNorm() const { double norm = 0.0; const double *elements = getElements(); for (int i = getNumElements() - 1; i >= 0; --i) { norm += fabs(elements[i]); } return norm; } //----------------------------------------------------------------------------- double CoinPackedVectorBase::normSquare() const { return std::inner_product(getElements(), getElements() + getNumElements(), getElements(), 0.0); } //----------------------------------------------------------------------------- double CoinPackedVectorBase::twoNorm() const { return sqrt(normSquare()); } //----------------------------------------------------------------------------- double CoinPackedVectorBase::infNorm() const { double norm = 0.0; const double *elements = getElements(); for (int i = getNumElements() - 1; i >= 0; --i) { norm = CoinMax(norm, fabs(elements[i])); } return norm; } //----------------------------------------------------------------------------- double CoinPackedVectorBase::sum() const { return std::accumulate(getElements(), getElements() + getNumElements(), 0.0); } //############################################################################# CoinPackedVectorBase::CoinPackedVectorBase() : maxIndex_(-COIN_INT_MAX /*0*/) , minIndex_(COIN_INT_MAX /*0*/) , indexSetPtr_(NULL) , testForDuplicateIndex_(true) , testedDuplicateIndex_(false) { } //----------------------------------------------------------------------------- CoinPackedVectorBase::~CoinPackedVectorBase() { delete indexSetPtr_; } //############################################################################# //############################################################################# void CoinPackedVectorBase::findMaxMinIndices() const { if (getNumElements() == 0) return; // if indexSet exists then grab begin and rend to get min & max indices else if (indexSetPtr_ != NULL) { maxIndex_ = *indexSetPtr_->rbegin(); minIndex_ = *indexSetPtr_->begin(); } else { // Have to scan through vector to find min and max. maxIndex_ = *(std::max_element(getIndices(), getIndices() + getNumElements())); minIndex_ = *(std::min_element(getIndices(), getIndices() + getNumElements())); } } //------------------------------------------------------------------- std::set< int > * CoinPackedVectorBase::indexSet(const char *methodName, const char *className) const { testedDuplicateIndex_ = true; if (indexSetPtr_ == NULL) { // create a set of the indices indexSetPtr_ = new std::set< int >; const int s = getNumElements(); const int *inds = getIndices(); for (int j = 0; j < s; ++j) { if (!indexSetPtr_->insert(inds[j]).second) { testedDuplicateIndex_ = false; delete indexSetPtr_; indexSetPtr_ = NULL; if (methodName != NULL) { throw CoinError("Duplicate index found", methodName, className); } else { throw CoinError("Duplicate index found", "indexSet", "CoinPackedVectorBase"); } } } } return indexSetPtr_; } //----------------------------------------------------------------------------- void CoinPackedVectorBase::clearIndexSet() const { delete indexSetPtr_; indexSetPtr_ = NULL; } //----------------------------------------------------------------------------- void CoinPackedVectorBase::clearBase() const { clearIndexSet(); maxIndex_ = -COIN_INT_MAX /*0*/; minIndex_ = COIN_INT_MAX /*0*/; testedDuplicateIndex_ = false; } //############################################################################# /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinSearchTree.cpp0000644000175200017520000000501413414454441017121 0ustar coincoin/* $Id: CoinSearchTree.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include "CoinSearchTree.hpp" BitVector128::BitVector128() { bits_[0] = 0; bits_[1] = 0; bits_[2] = 0; bits_[3] = 0; } BitVector128::BitVector128(unsigned int bits[4]) { set(bits); } void BitVector128::set(unsigned int bits[4]) { bits_[0] = bits[0]; bits_[1] = bits[1]; bits_[2] = bits[2]; bits_[3] = bits[3]; } void BitVector128::setBit(int i) { int byte = i >> 5; int bit = i & 31; bits_[byte] |= (1 << bit); } void BitVector128::clearBit(int i) { int byte = i >> 5; int bit = i & 31; bits_[byte] &= ~(1 << bit); } std::string BitVector128::str() const { char output[33]; output[32] = 0; sprintf(output, "%08X%08X%08X%08X", bits_[3], bits_[2], bits_[1], bits_[0]); return output; } bool operator<(const BitVector128 &b0, const BitVector128 &b1) { if (b0.bits_[3] < b1.bits_[3]) return true; if (b0.bits_[3] > b1.bits_[3]) return false; if (b0.bits_[2] < b1.bits_[2]) return true; if (b0.bits_[2] > b1.bits_[2]) return false; if (b0.bits_[1] < b1.bits_[1]) return true; if (b0.bits_[1] > b1.bits_[1]) return false; return (b0.bits_[0] < b1.bits_[0]); } void CoinSearchTreeManager::newSolution(double solValue) { ++numSolution; hasUB_ = true; CoinTreeNode *top = candidates_->top(); const double q = top ? top->getQuality() : solValue; const bool switchToDFS = fabs(q) < 1e-3 ? (fabs(solValue) < 0.005) : ((solValue - q) / fabs(q) < 0.005); if (switchToDFS && dynamic_cast< CoinSearchTree< CoinSearchTreeCompareDepth > * >(candidates_) == NULL) { CoinSearchTree< CoinSearchTreeCompareDepth > *cands = new CoinSearchTree< CoinSearchTreeCompareDepth >(*candidates_); delete candidates_; candidates_ = cands; } } void CoinSearchTreeManager::reevaluateSearchStrategy() { const int n = candidates_->numInserted() % 1000; /* the tests below ensure that even if this method is not invoked after every push(), the search strategy will be reevaluated when n is ~500 */ if (recentlyReevaluatedSearchStrategy_) { if (n > 250 && n <= 500) { recentlyReevaluatedSearchStrategy_ = false; } } else { if (n > 500) { recentlyReevaluatedSearchStrategy_ = true; /* we can reevaluate things... */ } } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveDupcol.cpp0000644000175200017520000023644013414454441020053 0ustar coincoin/* $Id: CoinPresolveDupcol.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include //#define PRESOLVE_DEBUG 1 // Debugging macros/functions //#define PRESOLVE_DETAIL 1 #include "CoinPresolveMatrix.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveDupcol.hpp" #include "CoinSort.hpp" #include "CoinFinite.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPresolveUseless.hpp" #include "CoinMessage.hpp" #if PRESOLVE_DEBUG || PRESOLVE_CONSISTENCY #include "CoinPresolvePsdebug.hpp" #endif #define DSEED2 2147483647.0 // Can be used from anywhere void coin_init_random_vec(double *work, int n) { double deseed = 12345678.0; for (int i = 0; i < n; ++i) { deseed *= 16807.; int jseed = static_cast< int >(deseed / DSEED2); deseed -= static_cast< double >(jseed) * DSEED2; double random = deseed / DSEED2; work[i] = random; } } namespace { // begin unnamed file-local namespace /* For each candidate major-dimension vector in majcands, calculate the sum over the vector, with each minor dimension weighted by a random amount. (E.g., calculate column sums with each row weighted by a random amount.) The sums are returned in the corresponding entries of majsums. */ void compute_sums(int /*n*/, const int *majlens, const CoinBigIndex *majstrts, int *minndxs, double *elems, const double *minmuls, int *majcands, double *majsums, int nlook) { for (int cndx = 0; cndx < nlook; ++cndx) { int i = majcands[cndx]; PRESOLVEASSERT(majlens[i] > 0); CoinBigIndex kcs = majstrts[i]; CoinBigIndex kce = kcs + majlens[i]; double value = 0.0; for (CoinBigIndex k = kcs; k < kce; k++) { int irow = minndxs[k]; value += minmuls[irow] * elems[k]; } majsums[cndx] = value; } return; } void create_col(int col, int n, double *els, CoinBigIndex *mcstrt, double *colels, int *hrow, CoinBigIndex *link, CoinBigIndex *free_listp) { int *rows = reinterpret_cast< int * >(els + n); CoinBigIndex free_list = *free_listp; CoinBigIndex xstart = NO_LINK; for (int i = 0; i < n; ++i) { CoinBigIndex k = free_list; assert(k >= 0); free_list = link[free_list]; hrow[k] = rows[i]; colels[k] = els[i]; link[k] = xstart; xstart = k; } mcstrt[col] = xstart; *free_listp = free_list; } } // end unnamed file-local namespace const char *dupcol_action::name() const { return ("dupcol_action"); } /* Original comment: This is just ekkredc5, adapted into the new framework. The datasets scorpion.mps and allgrade.mps have duplicate columns. In case you don't have your OSL manual handy, a somewhat more informative explanation: We're looking for an easy-to-detect special case of linearly dependent columns, where the coefficients of the duplicate columns are exactly equal. The idea for locating such columns is to generate pseudo- random weights for each row and then calculate the weighted sum of coefficients of each column. Columns with equal sums are checked more thoroughly. Analysis of the situation says there are two major cases: * If the columns have equal objective coefficients, we can combine them. * If the columns have unequal objective coefficients, we may be able to fix one at bound. If the required bound doesn't exist, we have dual infeasibility (hence one of primal infeasibility or unboundedness). In the comments below are a few fragments of code from the original routine. I don't think they make sense, but I've left them for the nonce in case someone else recognises the purpose. -- lh, 040909 -- */ const CoinPresolveAction * dupcol_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering dupcol_action::presolve." << std::endl; #endif presolve_consistent(prob); presolve_links_ok(prob); presolve_check_sol(prob); presolve_check_nbasic(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int startEmptyRows = 0; int startEmptyColumns = 0; startEmptyRows = prob->countEmptyRows(); startEmptyColumns = prob->countEmptyCols(); #if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0; if (prob->tuning_) startTime = CoinCpuTime(); #endif #endif double maxmin = prob->maxmin_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; int ncols = prob->ncols_; int nrows = prob->nrows_; double *clo = prob->clo_; double *cup = prob->cup_; double *sol = prob->sol_; double *rlo = prob->rlo_; double *rup = prob->rup_; // If all coefficients positive do more simply bool allPositive = true; double *rhs = prob->usefulRowDouble_; //new double[nrows]; CoinMemcpyN(rup, nrows, rhs); /* Scan the columns for candidates, and write the indices into sort. We're not interested in columns that are empty, prohibited, or integral. Question: Should we exclude singletons, which are useful in other transforms? Question: Why are we excluding integral columns? */ // allow integral columns if asked for bool allowIntegers = ((prob->presolveOptions_ & 0x01) != 0); int *sort = prob->usefulColumnInt_; //new int[ncols] ; int nlook = 0; for (int j = 0; j < ncols; j++) { if (hincol[j] == 0) continue; // sort CoinSort_2(hrow + mcstrt[j], hrow + mcstrt[j] + hincol[j], colels + mcstrt[j]); // check all positive and adjust rhs if (allPositive) { double lower = clo[j]; if (lower < cup[j]) { for (CoinBigIndex k = mcstrt[j]; k < mcstrt[j] + hincol[j]; k++) { double value = colels[k]; if (value < 0.0) allPositive = false; else rhs[hrow[k]] -= lower * value; } } else { for (CoinBigIndex k = mcstrt[j]; k < mcstrt[j] + hincol[j]; k++) { double value = colels[k]; rhs[hrow[k]] -= lower * value; } } } if (prob->colProhibited2(j)) continue; //#define PRESOLVE_INTEGER_DUPCOL #ifndef PRESOLVE_INTEGER_DUPCOL if (prob->isInteger(j) && !allowIntegers) continue; #endif sort[nlook++] = j; } if (nlook == 0) { //delete[] sort ; //delete [] rhs; return (next); } /* Prep: add the coefficients of each candidate column. To reduce false positives, multiply each row by a `random' multiplier when forming the sums. On return from compute_sums, sort and colsum are loaded with the indices and column sums, respectively, of candidate columns. The pair of arrays are then sorted by sum so that equal sums are adjacent. */ double *colsum = prob->usefulColumnDouble_; //new double[ncols] ; double *rowmul; if (!prob->randomNumber_) { rowmul = new double[nrows]; coin_init_random_vec(rowmul, nrows); } else { rowmul = prob->randomNumber_; } compute_sums(ncols, hincol, mcstrt, hrow, colels, rowmul, sort, colsum, nlook); #define USE_LBS 0 #define SWAP_SIGNS 0 #if SWAP_SIGNS int nPiece = 0; // array to chain piecewise linear int *piece = new int[ncols]; for (int i = 0; i < ncols; i++) piece[i] = -1; if (!allPositive) { // swap signs memcpy(sort + nlook, sort, nlook * sizeof(int)); for (int i = 0; i < nrows; i++) rowmul[i] = -rowmul[i]; compute_sums(ncols, hincol, mcstrt, hrow, colels, rowmul, sort + nlook, colsum + nlook, nlook); nlook += nlook; } #endif CoinSort_2(colsum, colsum + nlook, sort); /* General prep --- unpack the various vectors we'll need, and allocate arrays to record the results. */ presolvehlink *clink = prob->clink_; double *rowels = prob->rowels_; int *hcol = prob->hcol_; const CoinBigIndex *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; double *dcost = prob->cost_; action *actions = new action[nlook]; int nactions = 0; #ifdef ZEROFAULT memset(actions, 0, nlook * sizeof(action)); #endif int *fixed_down = new int[nlook]; int nfixed_down = 0; int *fixed_up = new int[nlook]; int nfixed_up = 0; #if 0 // Excluded in the original routine. I'm guessing it's excluded because // it's just not cost effective to worry about this. -- lh, 040908 -- // It may be the case that several columns are duplicate. // If not all have the same cost, then we have to make sure // that we set the most expensive one to its minimum // now sort in each class by cost { double dval = colsum[0] ; int first = 0 ; for (int jj = 1; jj < nlook; jj++) { while (colsum[jj]==dval) jj++ ; if (first + 1 < jj) { double buf[jj - first] ; for (int i=first; i 1 && isorted < j1) { CoinSort_2(hrow + mcstrt[j1], hrow + mcstrt[j1] + len1, colels + mcstrt[j1]); isorted = j1; } if (len2 > 1 && isorted < j2) { CoinSort_2(hrow + kcs, hrow + kcs + len2, colels + kcs); isorted = j2; } CoinBigIndex k; for (k = kcs; k < kce; k++) { if (hrow[k] != hrow[k + ishift] || colels[k] != colels[k + ishift]) { break; } } #if SWAP_SIGNS if (k != kce) { if (allPositive) { tgt = jj; continue; } else { // try negative for (k = kcs; k < kce; k++) { if (hrow[k] != hrow[k + ishift] || colels[k] != -colels[k + ishift]) { break; } } if (k == kce) { nPiece++; if (piece[j1] < 0 && piece[j2] < 0) { piece[j1] = j2; piece[j2] = j1; } else if (piece[j1] < 0) { int j3 = piece[j2]; piece[j2] = j1; piece[j1] = j3; } } tgt = jj; continue; } } #else if (k != kce) { tgt = jj; continue; } #endif // check both continuous or both integer if (prob->isInteger(j1) != prob->isInteger(j2)) continue; /* These really are duplicate columns. Grab values for convenient reference. Convert the objective coefficients for minimization. */ double clo1 = clo[j1]; double cup1 = cup[j1]; double clo2 = clo[j2]; double cup2 = cup[j2]; double c1 = dcost[j1] * maxmin; double c2 = dcost[j2] * maxmin; PRESOLVEASSERT(!(clo1 == cup1 || clo2 == cup2)); // Get reasonable bounds on sum of two variables double lowerBound = -COIN_DBL_MAX; double upperBound = COIN_DBL_MAX; #if USE_LBS == 0 // For now only if lower bounds are zero bool takeColumn = (!clo1 && !clo2); #else bool takeColumn = true; if (clo1 || clo2) printf("DUPCOL %d and %d have nonzero lbs %g %g\n", j1, j2, clo1, clo2); #endif if (takeColumn) { // Only need bounds if c1 != c2 if (c1 != c2) { if (!allPositive) { #if 0 for (k=kcs;k 0.0) { if (PRESOLVE_INF <= ub) { posinf = true; if (neginf) break; // pointless } else { maxup += ub * coeff; } if (lb <= -PRESOLVE_INF) { neginf = true; if (posinf) break; // pointless } else { maxdown += lb * coeff; } } else { if (PRESOLVE_INF <= ub) { neginf = true; if (posinf) break; // pointless } else { maxdown += ub * coeff; } if (lb <= -PRESOLVE_INF) { posinf = true; if (neginf) break; // pointless } else { maxup += lb * coeff; } } } if (kk==kre) { assert (value1); if (value1>1.0e-5) { if (!neginf&&rup[iRow]<1.0e10) if (upperBound*value1>rup[iRow]-maxdown) upperBound = (rup[iRow]-maxdown)/value1; if (!posinf&&rlo[iRow]>-1.0e10) if (lowerBound*value1rup[iRow]-maxdown) { #ifndef NDEBUG double x=lowerBound; #endif lowerBound = (rup[iRow]-maxdown)/value1; assert (lowerBound == CoinMax(x,(rup[iRow]-maxdown)/value1)); } if (!posinf&&rlo[iRow]>-1.0e10) if (upperBound*value1recomputeSums(-1); // get min max gotStuff = true; } int positiveInf = 0; int negativeInf = 0; double lo = 0; double up = 0.0; if (clo1 < -PRESOLVE_INF) negativeInf++; else lo += clo1; if (clo2 < -PRESOLVE_INF) negativeInf++; else lo += clo2; if (cup1 > PRESOLVE_INF) positiveInf++; else up += cup1; if (cup2 > PRESOLVE_INF) positiveInf++; else up += cup2; for (k = kcs; k < kce; k++) { int iRow = hrow[k]; double value = colels[k]; int pInf = (value > 0.0) ? positiveInf : negativeInf; int nInf = (value > 0.0) ? negativeInf : positiveInf; int posinf = prob->infiniteUp_[iRow] - pInf; int neginf = prob->infiniteDown_[iRow] - nInf; if (posinf > 0 && neginf > 0) continue; // this row can't bound double maxup = prob->sumUp_[iRow]; double maxdown = prob->sumDown_[iRow]; if (value > 0.0) { maxdown -= value * lo; maxup -= value * up; } else { maxdown -= value * up; maxup -= value * lo; } if (value > 1.0e-5) { if (!neginf && rup[iRow] < 1.0e10) if (upperBound * value > rup[iRow] - maxdown) upperBound = (rup[iRow] - maxdown) / value; if (!posinf && rlo[iRow] > -1.0e10) if (lowerBound * value < rlo[iRow] - maxup) lowerBound = (rlo[iRow] - maxup) / value; } else if (value < -1.0e-5) { if (!neginf && rup[iRow] < 1.0e10) if (lowerBound * value > rup[iRow] - maxdown) { lowerBound = (rup[iRow] - maxdown) / value; } if (!posinf && rlo[iRow] > -1.0e10) if (upperBound * value < rlo[iRow] - maxup) { upperBound = (rlo[iRow] - maxup) / value; } } } //assert (fabs(l-lowerBound)<1.0e-5&&fabs(u-upperBound)<1.0e-5); } else { // can do faster lowerBound = 0.0; for (k = kcs; k < kce; k++) { int iRow = hrow[k]; double value = colels[k]; if (upperBound * value > rhs[iRow]) upperBound = rhs[iRow] / value; } } } // relax a bit upperBound -= 1.0e-9; } else { // Not sure what to do so give up continue; } /* There are two main cases: The objective coefficients are equal or unequal. For equal objective coefficients c1 == c2, we can combine the columns by making the substitution x = x' - x. This will eliminate column sort[jj] = j2 and leave the new variable x' in column sort[tgt] = j1. tgt doesn't move. */ if (c1 == c2) { #ifdef PRESOLVE_INTEGER_DUPCOL if (!allowIntegers) { if (prob->isInteger(j1)) { if (!prob->isInteger(j2)) { if (cup2 < upperBound) //if (!prob->colInfinite(j2)) continue; else cup2 = COIN_DBL_MAX; } } else if (prob->isInteger(j2)) { if (cup1 < upperBound) //if (!prob->colInfinite(j1)) continue; else cup1 = COIN_DBL_MAX; } //printf("TakingINTeq\n"); } #endif /* As far as the presolved lp, there's no difference between columns. But we need this relation to hold in order to guarantee that we can split the value of the combined column during postsolve without damaging the basis. (The relevant case is when the combined column is basic --- we need to be able to retain column j1 in the basis and make column j2 nonbasic.) */ if (!(clo2 + cup1 <= clo1 + cup2)) { CoinSwap(j1, j2); CoinSwap(clo1, clo2); CoinSwap(cup1, cup2); tgt = jj; } /* Create the postsolve action before we start to modify the columns. */ #if PRESOLVE_DEBUG > 1 PRESOLVE_STMT(printf("DUPCOL: (%d,%d) %d += %d\n", j1, j2, j1, j2)); PRESOLVE_DETAIL_PRINT(printf("pre_dupcol %dC %dC E\n", j2, j1)); #endif action *s = &actions[nactions++]; s->thislo = clo[j2]; s->thisup = cup[j2]; s->lastlo = clo[j1]; s->lastup = cup[j1]; s->ithis = j2; s->ilast = j1; s->nincol = hincol[j2]; s->colels = presolve_dupmajor(colels, hrow, hincol[j2], mcstrt[j2]); /* Combine the columns into column j1. Upper and lower bounds and solution simply add, and the coefficients are unchanged. I'm skeptical of pushing a bound to infinity like this, but leave it for now. -- lh, 040908 -- */ clo1 += clo2; if (clo1 < -1.0e20) { clo1 = -PRESOLVE_INF; } clo[j1] = clo1; cup1 += cup2; if (cup1 > 1.0e20) { cup1 = PRESOLVE_INF; } cup[j1] = cup1; if (sol) { sol[j1] += sol[j2]; } if (prob->colstat_) { if (prob->getColumnStatus(j1) == CoinPrePostsolveMatrix::basic || prob->getColumnStatus(j2) == CoinPrePostsolveMatrix::basic) { prob->setColumnStatus(j1, CoinPrePostsolveMatrix::basic); } } /* Empty column j2. */ dcost[j2] = 0.0; if (sol) { sol[j2] = clo2; } CoinBigIndex k2cs = mcstrt[j2]; CoinBigIndex k2ce = k2cs + hincol[j2]; for (CoinBigIndex k = k2cs; k < k2ce; ++k) { presolve_delete_from_row(hrow[k], j2, mrstrt, hinrow, hcol, rowels); } hincol[j2] = 0; PRESOLVE_REMOVE_LINK(clink, j2); continue; } /* Unequal reduced costs. In this case, we may be able to fix one of the columns or prove dual infeasibility. Given column a_k, duals y, objective coefficient c_k, the reduced cost cbar_k = c_k - dot(y,a_k). Given a_1 = a_2, substitute for dot(y,a_1) in the relation for cbar_2 to get cbar_2 = (c_2 - c_1) + cbar_1 Independent elements here are variable bounds l_k, u_k, and difference (c_2 - c_1). Infinite bounds for l_k, u_k will constrain the sign of cbar_k. Assume minimization. If you do the case analysis, you find these cases of interest: l_1 u_1 l_2 u_2 cbar_1 c_2-c_1 cbar_2 result A any finite -inf any <= 0 > 0 <= 0 x_1 -> NBUB B -inf any any finite <= 0 < 0 < 0 x_2 -> NBUB C finite any any +inf >= 0 < 0 >= 0 x_1 -> NBLB D any +inf finite any >= 0 > 0 >= 0 x_2 -> NBLB E -inf any any +inf <= 0 < 0 >= 0 dual infeas F any inf -inf any >= 0 > 0 <= 0 dual infeas G any finite finite any > 0 no inference H finite any any finite < 0 no inference The cases labelled dual infeasible are primal unbounded. To keep the code compact, we'll always aim to take x_2 to bound. In the cases where x_1 should go to bound, we'll swap. The implementation is boolean algebra. Define bits for infinite bounds and (c_2 > c_1), then look for the correct patterns. */ else { int minterm = 0; #ifdef PRESOLVE_INTEGER_DUPCOL if (!allowIntegers) { if (c2 > c1) { if (cup1 < upperBound /*!prob->colInfinite(j1)*/ && (prob->isInteger(j1) || prob->isInteger(j2))) continue; } else { if (cup2 < upperBound /*!prob->colInfinite(j2)*/ && (prob->isInteger(j1) || prob->isInteger(j2))) continue; } //printf("TakingINTne\n"); } #endif bool swapped = false; #if PRESOLVE_DEBUG > 1 printf("bounds %g %g\n", lowerBound, upperBound); #endif if (c2 > c1) minterm |= 1 << 0; if (cup2 >= PRESOLVE_INF /*prob->colInfinite(j2)*/) minterm |= 1 << 1; if (clo2 <= -PRESOLVE_INF) minterm |= 1 << 2; if (cup1 >= PRESOLVE_INF /*prob->colInfinite(j1)*/) minterm |= 1 << 3; if (clo1 <= -PRESOLVE_INF) minterm |= 1 << 4; // for now be careful - just one special case if (!clo1 && !clo2) { if (c2 > c1 && cup1 >= upperBound) minterm |= 1 << 3; else if (c2 < c1 && cup2 >= upperBound) minterm |= 1 << 1; } /* The most common case in a well-formed system should be no inference. We're looking for x00x1 (case G) and 0xx00 (case H). This is where we have the potential to miss inferences: If there are three or more columns with the same sum, sort[tgt] == j1 will only be compared to the second in the group. */ if ((minterm & 0x0d) == 0x1 || (minterm & 0x13) == 0) { tgt = jj; continue; } /* Next remove the unbounded cases, 1xx10 and x11x1. */ if ((minterm & 0x13) == 0x12 || (minterm & 0x0d) == 0x0d) { prob->setStatus(2); #if PRESOLVE_DEBUG > 1 PRESOLVE_STMT(printf("DUPCOL: (%d,%d) Unbounded\n", j1, j2)); #endif break; } /* With the no inference and unbounded cases removed, all that's left are the cases where we can push a variable to bound. Swap if necessary (x01x1 or 0xx10) so that we're always fixing index j2. This means that column sort[tgt] = j1 will be fixed. Unswapped, we fix column sort[jj] = j2. */ if ((minterm & 0x0d) == 0x05 || (minterm & 0x13) == 0x02) { CoinSwap(j1, j2); CoinSwap(clo1, clo2); CoinSwap(cup1, cup2); CoinSwap(c1, c2); int tmp1 = minterm & 0x18; int tmp2 = minterm & 0x06; int tmp3 = minterm & 0x01; minterm = (tmp1 >> 2) | (tmp2 << 2) | (tmp3 ^ 0x01); swapped = true; } /* Force x_2 to upper bound? (Case B, boolean 1X100, where X == don't care.) */ if ((minterm & 0x13) == 0x10) { fixed_up[nfixed_up++] = j2; #if PRESOLVE_DEBUG > 1 PRESOLVE_STMT(printf("DUPCOL: (%d,%d) %d -> NBUB\n", j1, j2, j2)); #endif if (prob->colstat_) { if (prob->getColumnStatus(j1) == CoinPrePostsolveMatrix::basic || prob->getColumnStatus(j2) == CoinPrePostsolveMatrix::basic) { prob->setColumnStatus(j1, CoinPrePostsolveMatrix::basic); } prob->setColumnStatus(j2, CoinPrePostsolveMatrix::atUpperBound); } if (sol) { double delta2 = cup2 - sol[j2]; sol[j2] = cup2; sol[j1] -= delta2; } if (swapped) { tgt = jj; } continue; } /* Force x_2 to lower bound? (Case C, boolean X1011.) */ if ((minterm & 0x0d) == 0x09) { fixed_down[nfixed_down++] = j2; #if PRESOLVE_DEBUG > 1 PRESOLVE_STMT(printf("DUPCOL: (%d,%d) %d -> NBLB\n", j1, j2, j2)); #endif if (prob->colstat_) { if (prob->getColumnStatus(j1) == CoinPrePostsolveMatrix::basic || prob->getColumnStatus(j2) == CoinPrePostsolveMatrix::basic) { prob->setColumnStatus(j1, CoinPrePostsolveMatrix::basic); } prob->setColumnStatus(j2, CoinPrePostsolveMatrix::atLowerBound); } if (sol) { double delta2 = clo2 - sol[j2]; sol[j2] = clo2; sol[j1] -= delta2; } if (swapped) { tgt = jj; } continue; } } /* We should never reach this point in the loop --- all cases force a new iteration or loop termination. If we get here, something happened that we didn't anticipate. */ PRESOLVE_STMT(printf("DUPCOL: (%d,%d) UNEXPECTED!\n", j1, j2)); } /* What's left? Deallocate vectors, and call make_fixed_action to handle any variables that were fixed to bound. */ if (rowmul != prob->randomNumber_) delete[] rowmul; #if SWAP_SIGNS if (nPiece) { nPiece = 0; int nTotal = 0; for (int i = 0; i < ncols; i++) { if ((piece[i] & 0x80000000) == 0) { int j2 = i; int number = 1; while (piece[j2] != i) { int jNext = piece[j2]; assert(jNext != -1); if (jNext < i) { // already done number = 0; break; } if ((jNext & 0x80000000) != 0 || clo[jNext] == cup[jNext]) { // no good piece[j2] |= 0x80000000; jNext &= 0x7fffffff; while (jNext != j2) { piece[jNext] |= 0x80000000; jNext = piece[jNext] & 0x7fffffff; } piece[j2] |= 0x80000000; number = -1; break; } else { j2 = jNext; number++; } } if (number > 0) { nPiece++; nTotal += number; } } } printf("%d odd duplicates in %d groups\n", nTotal, nPiece); // now build real structures // to test fix and adjust nPiece = 0; nTotal = 0; for (int i = 0; i < ncols; i++) { if ((piece[i] & 0x80000000) == 0) { int number = 1; double lo = CoinMax(clo[i], -1.0e100); double up = CoinMin(cup[i], 1.0e100); // get first double value = colels[mcstrt[i]]; int iNext = piece[i]; piece[i] |= 0x80000000; while (iNext != i) { number++; if (value == colels[mcstrt[iNext]]) { lo += CoinMax(clo[iNext], -1.0e100); up += CoinMin(cup[iNext], 1.0e100); } else { lo -= CoinMin(cup[iNext], 1.0e100); up -= CoinMax(clo[iNext], -1.0e100); } clo[iNext] = 0.0; cup[iNext] = 0.0; fixed_down[nfixed_down++] = iNext; piece[iNext] |= 0x80000000; iNext = piece[iNext] & 0x7fffffff; } if (lo < -1.0e50) lo = -COIN_DBL_MAX; if (up > 1.0e50) up = COIN_DBL_MAX; if (lo == -COIN_DBL_MAX && up == COIN_DBL_MAX) { printf("Help - free variable %d\n", i); } nPiece++; nTotal += number; } } printf("Pass two %d odd duplicates in %d groups\n", nTotal, nPiece); } delete[] piece; #endif //delete[] colsum ; //delete[] sort ; //delete [] rhs; #if PRESOLVE_SUMMARY || PRESOLVE_DEBUG if (nactions + nfixed_down + nfixed_up > 0) { printf("DUPLICATE COLS: %d combined, %d lb, %d ub\n", nactions, nfixed_down, nfixed_up); } #endif if (nactions) { next = new dupcol_action(nactions, CoinCopyOfArray(actions, nactions), next); // we can't go round again in integer prob->presolveOptions_ |= 0x80000000; } deleteAction(actions, action *); if (nfixed_down) { next = make_fixed_action::presolve(prob, fixed_down, nfixed_down, true, next); } delete[] fixed_down; if (nfixed_up) { next = make_fixed_action::presolve(prob, fixed_up, nfixed_up, false, next); } delete[] fixed_up; #if COIN_PRESOLVE_TUNING > 0 double thisTime = 0.0; if (prob->tuning_) thisTime = CoinCpuTime(); #endif #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_sol(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows() - startEmptyRows; int droppedColumns = prob->countEmptyCols() - startEmptyColumns; std::cout << "Leaving dupcol_action::presolve, " << droppedRows << " rows, " << droppedColumns << " columns dropped"; #if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << thisTime - startTime << "s"; #endif std::cout << "." << std::endl; #endif return (next); } void dupcol_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_; const int nactions = nactions_; double *clo = prob->clo_; double *cup = prob->cup_; double *sol = prob->sol_; double *dcost = prob->cost_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; CoinBigIndex *link = prob->link_; double *rcosts = prob->rcosts_; double tolerance = prob->ztolzb_; for (const action *f = &actions[nactions - 1]; actions <= f; f--) { int icol = f->ithis; // was fixed int icol2 = f->ilast; // was kept dcost[icol] = dcost[icol2]; clo[icol] = f->thislo; cup[icol] = f->thisup; clo[icol2] = f->lastlo; cup[icol2] = f->lastup; create_col(icol, f->nincol, f->colels, mcstrt, colels, hrow, link, &prob->free_list_); #if PRESOLVE_CONSISTENCY presolve_check_free_list(prob); #endif // hincol[icol] = hincol[icol2]; // right? - no - has to match number in create_col hincol[icol] = f->nincol; double l_j = f->thislo; double u_j = f->thisup; double l_k = f->lastlo; double u_k = f->lastup; double x_k_sol = sol[icol2]; PRESOLVE_DETAIL_PRINT(printf("post icol %d %g %g %g icol2 %d %g %g %g\n", icol, clo[icol], sol[icol], cup[icol], icol2, clo[icol2], sol[icol2], cup[icol2])); if (l_j > -PRESOLVE_INF && x_k_sol - l_j >= l_k - tolerance && x_k_sol - l_j <= u_k + tolerance) { // j at lb, leave k prob->setColumnStatus(icol, CoinPrePostsolveMatrix::atLowerBound); sol[icol] = l_j; sol[icol2] = x_k_sol - sol[icol]; } else if (u_j < PRESOLVE_INF && x_k_sol - u_j >= l_k - tolerance && x_k_sol - u_j <= u_k + tolerance) { // j at ub, leave k prob->setColumnStatus(icol, CoinPrePostsolveMatrix::atUpperBound); sol[icol] = u_j; sol[icol2] = x_k_sol - sol[icol]; } else if (l_k > -PRESOLVE_INF && x_k_sol - l_k >= l_j - tolerance && x_k_sol - l_k <= u_j + tolerance) { // k at lb make j basic prob->setColumnStatus(icol, prob->getColumnStatus(icol2)); sol[icol2] = l_k; sol[icol] = x_k_sol - l_k; prob->setColumnStatus(icol2, CoinPrePostsolveMatrix::atLowerBound); } else if (u_k < PRESOLVE_INF && x_k_sol - u_k >= l_j - tolerance && x_k_sol - u_k <= u_j + tolerance) { // k at ub make j basic prob->setColumnStatus(icol, prob->getColumnStatus(icol2)); sol[icol2] = u_k; sol[icol] = x_k_sol - u_k; prob->setColumnStatus(icol2, CoinPrePostsolveMatrix::atUpperBound); } else { // both free! superbasic time sol[icol] = 0.0; // doesn't matter prob->setColumnStatus(icol, CoinPrePostsolveMatrix::isFree); } PRESOLVE_DETAIL_PRINT(printf("post2 icol %d %g icol2 %d %g\n", icol, sol[icol], icol2, sol[icol2])); // row activity doesn't change // dj of both variables is the same rcosts[icol] = rcosts[icol2]; // leave until destructor // deleteAction(f->colels,double *); #if PRESOLVE_DEBUG > 0 const double ztolzb = prob->ztolzb_; if (!(clo[icol] - ztolzb <= sol[icol] && sol[icol] <= cup[icol] + ztolzb)) printf("BAD DUPCOL BOUNDS: %g %g %g\n", clo[icol], sol[icol], cup[icol]); if (!(clo[icol2] - ztolzb <= sol[icol2] && sol[icol2] <= cup[icol2] + ztolzb)) printf("BAD DUPCOL BOUNDS: %g %g %g\n", clo[icol2], sol[icol2], cup[icol2]); #endif } // leave until destructor // deleteAction(actions_,action *); } dupcol_action::~dupcol_action() { for (int i = nactions_ - 1; i >= 0; --i) { deleteAction(actions_[i].colels, double *); } deleteAction(actions_, action *); } /* Routines for duplicate rows. This is definitely unfinished --- there's no postsolve action. */ const char *duprow_action::name() const { return ("duprow_action"); } // This is just ekkredc4, adapted into the new framework. /* I've made minimal changes for compatibility with dupcol: An initial scan to accumulate rows of interest in sort. -- lh, 040909 -- */ const CoinPresolveAction * duprow_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { double startTime = 0.0; int startEmptyRows = 0; int startEmptyColumns = 0; if (prob->tuning_) { startTime = CoinCpuTime(); startEmptyRows = prob->countEmptyRows(); startEmptyColumns = prob->countEmptyCols(); } double *rowels = prob->rowels_; int *hcol = prob->hcol_; CoinBigIndex *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; int ncols = prob->ncols_; int nrows = prob->nrows_; /* Scan the rows for candidates, and write the indices into sort. We're not interested in rows that are empty or prohibited. Question: Should we exclude singletons, which are useful in other transforms? Question: Why are we excluding integral columns? */ int *sort = new int[nrows]; int nlook = 0; for (int i = 0; i < nrows; i++) { if (hinrow[i] == 0) continue; if (prob->rowProhibited2(i)) continue; // sort CoinSort_2(hcol + mrstrt[i], hcol + mrstrt[i] + hinrow[i], rowels + mrstrt[i]); sort[nlook++] = i; } if (nlook == 0) { delete[] sort; return (next); } double *workrow = new double[nrows + 1]; double *workcol; if (!prob->randomNumber_) { workcol = new double[ncols + 1]; coin_init_random_vec(workcol, ncols); } else { workcol = prob->randomNumber_; } compute_sums(nrows, hinrow, mrstrt, hcol, rowels, workcol, sort, workrow, nlook); CoinSort_2(workrow, workrow + nlook, sort); double *rlo = prob->rlo_; double *rup = prob->rup_; int nuseless_rows = 0; bool fixInfeasibility = ((prob->presolveOptions_ & 0x4000) != 0); bool allowIntersection = ((prob->presolveOptions_ & 0x10) != 0); double tolerance = prob->feasibilityTolerance_; if (0) { static int xxxxxx = 0; int n = 0; double dval = workrow[0]; int ilastX = 0; xxxxxx++; for (int jj = 1; jj < nlook; jj++) { if (workrow[jj] != dval) { n += jj - ilastX - 1; //if (jj>ilastX+2) //printf("%d matches\n",jj-ilastX); ilastX = jj; dval = workrow[jj]; } } printf("may be able to delete %d rows - pass %d\n", n, xxxxxx); } double dval = workrow[0]; for (int jj = 1; jj < nlook; jj++) { if (workrow[jj] == dval) { int ithis = sort[jj]; int ilast = sort[jj - 1]; CoinBigIndex krs = mrstrt[ithis]; CoinBigIndex kre = krs + hinrow[ithis]; if (hinrow[ithis] == hinrow[ilast]) { CoinBigIndex ishift = mrstrt[ilast] - krs; CoinBigIndex k; for (k = krs; k < kre; k++) { if (hcol[k] != hcol[k + ishift] || fabs(rowels[k] - rowels[k + ishift]) > 1.0e-14) { break; } } if (k != kre && false) { int rows[2]; rows[0] = ithis; rows[1] = ilast; for (int k = 0; k < 2; k++) { int kRow = rows[k]; CoinBigIndex krs = mrstrt[kRow]; CoinBigIndex kre = krs + hinrow[kRow]; printf("%g <=", rlo[kRow]); for (CoinBigIndex k1 = krs; k1 < kre; k1++) printf(" (%d,%g)", hcol[k1], rowels[k1]); printf(" <= %g\n", rup[kRow]); } } if (k == kre) { /* now check rhs to see what is what */ double rlo1 = rlo[ilast]; double rup1 = rup[ilast]; double rlo2 = rlo[ithis]; double rup2 = rup[ithis]; int idelete = -1; if (rlo1 <= rlo2) { if (rup2 <= rup1) { /* this is strictly tighter than last */ idelete = ilast; PRESOLVE_DETAIL_PRINT(printf("pre_duprow %dR %dR E\n", ilast, ithis)); } else if (fabs(rlo1 - rlo2) < 1.0e-12) { /* last is strictly tighter than this */ idelete = ithis; PRESOLVE_DETAIL_PRINT(printf("pre_duprow %dR %dR E\n", ithis, ilast)); // swap so can carry on deleting sort[jj - 1] = ithis; sort[jj] = ilast; } else { if (rup1 < rlo2 - tolerance && !fixInfeasibility) { // infeasible prob->status_ |= 1; // wrong message - correct if works prob->messageHandler()->message(COIN_PRESOLVE_ROWINFEAS, prob->messages()) << ithis << rlo[ithis] << rup[ithis] << CoinMessageEol; break; } else if (allowIntersection /*||fabs(rup1-rlo2)rlo2 if (rup1 <= rup2) { /* last is strictly tighter than this */ idelete = ithis; PRESOLVE_DETAIL_PRINT(printf("pre_duprow %dR %dR E\n", ithis, ilast)); // swap so can carry on deleting sort[jj - 1] = ithis; sort[jj] = ilast; } else { /* overlapping - could merge */ // rlo1>rlo2 // rup1>rup2 if (rup2 < rlo1 - tolerance && !fixInfeasibility) { // infeasible prob->status_ |= 1; // wrong message - correct if works prob->messageHandler()->message(COIN_PRESOLVE_ROWINFEAS, prob->messages()) << ithis << rlo[ithis] << rup[ithis] << CoinMessageEol; break; } else if (allowIntersection /*||fabs(rup2-rlo1)= 0) sort[nuseless_rows++] = idelete; } } } dval = workrow[jj]; } delete[] workrow; if (workcol != prob->randomNumber_) delete[] workcol; if (nuseless_rows) { #if PRESOLVE_SUMMARY printf("DUPLICATE ROWS: %d\n", nuseless_rows); #endif next = useless_constraint_action::presolve(prob, sort, nuseless_rows, next); } delete[] sort; if (prob->tuning_) { double thisTime = CoinCpuTime(); int droppedRows = prob->countEmptyRows() - startEmptyRows; int droppedColumns = prob->countEmptyCols() - startEmptyColumns; printf("CoinPresolveDuprow(256) - %d rows, %d columns dropped in time %g, total %g\n", droppedRows, droppedColumns, thisTime - startTime, thisTime - prob->startTime_); } return (next); } void duprow_action::postsolve(CoinPostsolveMatrix *) const { printf("STILL NO POSTSOLVE FOR DUPROW!\n"); abort(); } #include "CoinFactorization.hpp" const char *duprow3_action::name() const { return ("duprow3_action"); } // This is just ekkredc4, adapted into the new framework. /* I've made minimal changes for compatibility with dupcol: An initial scan to accumulate rows of interest in sort. -- lh, 040909 -- */ const CoinPresolveAction * duprow3_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { double startTime = 0.0; if (prob->tuning_) { startTime = CoinCpuTime(); } //double *rowels = prob->rowels_; //int *hcol = prob->hcol_; //CoinBigIndex *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; double *rowLower = prob->rlo_; double *rowUpper = prob->rup_; double *columnLower = prob->clo_; double *columnUpper = prob->cup_; int ncols = prob->ncols_; int nrows = prob->nrows_; int numberDropped = 0; int numberRows = 0; int *columnMap = prob->usefulColumnInt_; //new int[ncols] ; int *columnBack = columnMap + ncols; int *rowMap = new int[2 * nrows]; int *rowBack = rowMap + nrows; #define SKIP_RHS int numberRhs = 0; for (int i = 0; i < nrows; i++) { if (rowLower[i] == rowUpper[i] && hinrow[i] > 1) { if (rowLower[i]) { numberRhs++; #ifdef SKIP_RHS rowBack[i] = -1; continue; #endif } rowBack[i] = numberRows; rowMap[numberRows++] = i; } else { rowBack[i] = -1; } } if (numberRows < CoinMax(100, nrows / 4)) { //printf("equality rows %d - %d with rhs - unlikely to help much\n",numberRows,numberRhs); //numberRows=0; } else { //printf("equality rows %d - %d with rhs\n",numberRows,numberRhs); } #ifdef SKIP_RHS numberRhs = 0; #endif if (numberRows) { CoinIndexedVector one; one.reserve(numberRows); double *minValue = one.denseVector(); CoinIndexedVector two; two.reserve(numberRows); double *maxValue = two.denseVector(); for (int i = 0; i < numberRows; i++) { minValue[i] = COIN_DBL_MAX; maxValue[i] = 0.0; } CoinBigIndex nElements = 0; int numberColumns = 0; for (int i = 0; i < ncols; i++) { if (columnLower[i] < columnUpper[i]) { int n = 0; for (CoinBigIndex j = mcstrt[i]; j < mcstrt[i] + hincol[i]; j++) { int iRow = hrow[j]; iRow = rowBack[iRow]; if (iRow >= 0) { n++; double value = fabs(colels[j]); minValue[iRow] = CoinMin(minValue[iRow], value); maxValue[iRow] = CoinMax(maxValue[iRow], value); } } if (n) { nElements += n; columnBack[i] = numberColumns; columnMap[numberColumns++] = i; } else { columnBack[i] = -1; } } } //printf("%d columns %d elements\n",numberColumns,nElements); CoinFactorization factorization; factorization.setDenseThreshold(0); CoinPackedMatrix matrix(true, 0.0, 0.0); matrix.reserve(numberColumns, nElements); int maxDimension = CoinMax(numberRows, numberColumns); matrix.setDimensions(maxDimension, numberColumns); double *element = matrix.getMutableElements(); int *row = matrix.getMutableIndices(); CoinBigIndex *columnStart = matrix.getMutableVectorStarts(); int *columnLength = matrix.getMutableVectorLengths(); // scale rows for (int i = 0; i < numberRows; i++) { minValue[i] = 1.0 / sqrt(minValue[i] * maxValue[i]); } nElements = 0; columnStart[0] = 0; for (int i = 0; i < numberColumns; i++) { int iColumn = columnMap[i]; for (CoinBigIndex j = mcstrt[iColumn]; j < mcstrt[iColumn] + hincol[iColumn]; j++) { int iRow = hrow[j]; iRow = rowBack[iRow]; if (iRow >= 0) { row[nElements] = iRow; element[nElements++] = minValue[iRow] * colels[j]; } } columnLength[i] = static_cast< int >(nElements - columnStart[i]); columnStart[i + 1] = nElements; } matrix.setNumElements(nElements); int *rowIsBasic = new int[maxDimension]; int *columnIsBasic = new int[maxDimension]; //int numberBasic=0; for (int i = 0; i < maxDimension; i++) { rowIsBasic[i] = -1; } for (int i = 0; i < numberColumns; i++) { columnIsBasic[i] = 1; } //returns 0 -okay, -1 singular, -2 too many in basis, -99 memory */ int status = factorization.factorize(matrix, rowIsBasic, columnIsBasic, 5.0); //printf("factorization status %d\n",status); if (status == -1) { const int *permute = factorization.permute(); const int *pivotColumn = factorization.pivotColumn(); int numberBasic = factorization.numberGoodColumns(); //printf("%d good columns out of %d - %d rows\n",numberBasic, // numberColumns,numberRows); if (numberBasic < numberRows - CoinMax(20, nrows / 10)) { // get list of real rows which are dependent (maybe infeasible) int *badRow = new int[numberRows - numberBasic]; int nBad = 0; numberBasic = 0; for (int i = 0; i < numberColumns; i++) { //printf("%d permute %d pivotColumn %d\n", // i,permute[i],pivotColumn[i]); if (pivotColumn[i] < 0) columnIsBasic[i] = -1; else numberBasic++; } for (int i = 0; i < numberRows; i++) { if (permute[i] < 0) { badRow[nBad++] = rowMap[i]; rowIsBasic[i] = 1; } } assert(numberBasic + nBad == numberRows); // factorize again if (numberRows < maxDimension) { int nDelete = maxDimension - numberRows; int *del = new int[nDelete]; for (int i = 0; i < nDelete; i++) del[i] = i + numberRows; matrix.deleteRows(nDelete, del); delete[] del; } if (numberRhs) { status = factorization.factorize(matrix, rowIsBasic, columnIsBasic, 5.0); //printf("second factorization status %d\n",status); } else { //printf("skipping second factorization as zero Rhs\n"); status = 0; } if (status == 0) { // check feasible numberDropped = 0; if (numberRhs) { memset(minValue, 0, numberRows * sizeof(double)); memset(maxValue, 0, numberRows * sizeof(double)); int *index = one.getIndices(); for (int i = 0; i < numberRows; i++) { int iRow = rowMap[i]; double rhs = rowLower[iRow]; minValue[i] = rhs; } for (int i = 0; i < nBad; i++) { int iRow = badRow[i]; iRow = rowBack[iRow]; minValue[iRow] = 0.0; } int n = 0; for (int i = 0; i < numberRows; i++) { if (minValue[i]) index[n++] = i; } one.setNumElements(n); factorization.updateColumn(&two, &one); for (int i = 0; i < nBad; i++) { int iRealRow = badRow[i]; int iRow = rowBack[iRealRow]; if (fabs(rowLower[iRealRow] - minValue[iRow]) > 1.0e-7) { //printf("bad %d %d real row %d rhs %g - computed %g\n", // i,iRow,iRealRow,rowLower[iRealRow],minValue[iRow]); } else { badRow[numberDropped++] = iRealRow; } } } else { for (int i = 0; i < nBad; i++) { int iRealRow = badRow[i]; badRow[numberDropped++] = iRealRow; } } if (numberDropped) { next = useless_constraint_action::presolve(prob, badRow, numberDropped, next); #ifdef CLP_USEFUL_PRINTOUT printf("Dependency checking dropped %d rows\n", numberDropped); #endif } } delete[] badRow; } } delete[] rowIsBasic; delete[] columnIsBasic; } delete[] rowMap; if (prob->tuning_) { double thisTime = CoinCpuTime(); printf("CoinPresolveDuprow3 - %d rows dropped in time %g, total %g\n", numberDropped, thisTime - startTime, thisTime - prob->startTime_); } #ifdef CLP_INVESTIGATE printf("CoinPresolveDuprow3 - %d rows dropped\n", numberDropped); #endif return (next); } void duprow3_action::postsolve(CoinPostsolveMatrix *) const { printf("STILL NO POSTSOLVE FOR DUPROW3!\n"); abort(); } /* Routines for gub rows. This is definitely unfinished --- there's no postsolve action. This is potentially called from ClpPresolve and OsiPresolve. Unclear that it can be backed out --- there's no postsolve. */ const char *gubrow_action::name() const { return ("gubrow_action"); } const CoinPresolveAction * gubrow_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { double startTime = 0.0; int droppedElements = 0; int affectedRows = 0; if (prob->tuning_) { startTime = CoinCpuTime(); } double *rowels = prob->rowels_; int *hcol = prob->hcol_; CoinBigIndex *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; int ncols = prob->ncols_; int nrows = prob->nrows_; double *rlo = prob->rlo_; double *rup = prob->rup_; // maximum number of records action *actions = new action[nrows]; int nactions = 0; /* Scan the rows. We're not interested in rows that are empty or prohibited. */ int *which = prob->usefulRowInt_; int *number = which + nrows; double *els = prob->usefulRowDouble_; char *markCol = reinterpret_cast< char * >(prob->usefulColumnInt_); memset(markCol, 0, ncols); CoinZeroN(els, nrows); for (int i = 0; i < nrows; i++) { int nInRow = hinrow[i]; if (nInRow > 1 && !prob->rowProhibited2(i) && rlo[i] == rup[i]) { CoinBigIndex rStart = mrstrt[i]; CoinBigIndex k = rStart; CoinBigIndex rEnd = rStart + nInRow; double value1 = rowels[k]; k++; for (; k < rEnd; k++) { if (rowels[k] != value1) break; } if (k == rEnd) { // Gub row int nLook = 0; for (k = rStart; k < rEnd; k++) { int iColumn = hcol[k]; markCol[iColumn] = 1; CoinBigIndex kk = mcstrt[iColumn]; CoinBigIndex cEnd = kk + hincol[iColumn]; for (; kk < cEnd; kk++) { int iRow = hrow[kk]; double value = colels[kk]; if (iRow != i) { double value2 = els[iRow]; if (value2) { if (value == value2) number[iRow]++; } else { // first els[iRow] = value; number[iRow] = 1; which[nLook++] = iRow; } } } } // Now see if any promising int nDrop = 0; for (int j = 0; j < nLook; j++) { int iRow = which[j]; if (number[iRow] == nInRow) { // can delete elements and adjust rhs for (CoinBigIndex kk = rStart; kk < rEnd; kk++) presolve_delete_from_col(iRow, hcol[kk], mcstrt, hincol, hrow, colels); int nInRow2 = hinrow[iRow]; CoinBigIndex rStart2 = mrstrt[iRow]; CoinBigIndex rEnd2 = rStart2 + nInRow2; for (CoinBigIndex kk = rStart2; kk < rEnd2; kk++) { int iColumn = hcol[kk]; if (markCol[iColumn] == 0) { hcol[rStart2] = iColumn; rowels[rStart2++] = rowels[kk]; } } hinrow[iRow] = nInRow2 - nInRow; nDrop++; if (!hinrow[iRow]) PRESOLVE_REMOVE_LINK(prob->rlink_, iRow); double value = (rlo[i] / value1) * els[iRow]; // correct rhs if (rlo[iRow] > -1.0e20) rlo[iRow] -= value; if (rup[iRow] < 1.0e20) rup[iRow] -= value; } else { number[iRow] = 0; } } if (nDrop) { affectedRows += nDrop; droppedElements += nDrop * nInRow; action &thisAction = actions[nactions]; int *deletedRow = new int[nDrop + 1]; int *indices = CoinCopyOfArray(hcol + rStart, nInRow); thisAction.indices = indices; double *rowels = new double[nDrop + 1]; thisAction.rhs = rlo[i]; deletedRow[nDrop] = i; rowels[nDrop] = value1; nDrop = 0; for (int j = 0; j < nLook; j++) { int iRow = which[j]; if (number[iRow]) { deletedRow[nDrop] = iRow; rowels[nDrop++] = els[iRow]; } } thisAction.nDrop = nDrop; thisAction.ninrow = nInRow; thisAction.deletedRow = deletedRow; thisAction.rowels = rowels; nactions++; } for (int j = 0; j < nLook; j++) { int iRow = which[j]; els[iRow] = 0.0; } for (k = rStart; k < rEnd; k++) { int iColumn = hcol[k]; markCol[iColumn] = 0; } } } } if (nactions) { next = new gubrow_action(nactions, CoinCopyOfArray(actions, nactions), next); } deleteAction(actions, action *); if (prob->tuning_) { double thisTime = CoinCpuTime(); printf("CoinPresolveGubrow(1024) - %d elements dropped (%d rows) in time %g, total %g\n", droppedElements, affectedRows, thisTime - startTime, thisTime - prob->startTime_); } else if (droppedElements) { #ifdef CLP_INVESTIGATE printf("CoinPresolveGubrow(1024) - %d elements dropped (%d rows)\n", droppedElements, affectedRows); #endif } return (next); } void gubrow_action::postsolve(CoinPostsolveMatrix *prob) const { #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering gubrow_action::postsolve, " << nactions_ << " constraints to process." << std::endl; #endif //int ncols = prob->ncols_ ; //char *cdone = prob->cdone_ ; //char *rdone = prob->rdone_ ; //const double ztolzb = prob->ztolzb_ ; presolve_check_threads(prob); presolve_check_free_list(prob); presolve_check_reduced_costs(prob); presolve_check_duals(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #endif /* Unpack the column-major representation. */ CoinBigIndex *colStarts = prob->mcstrt_; int *colLengths = prob->hincol_; int *rowIndices = prob->hrow_; double *colCoeffs = prob->colels_; /* Rim vectors, solution, reduced costs, duals, row activity. */ double *rlo = prob->rlo_; double *rup = prob->rup_; //double *cost = prob->cost_ ; //double *sol = prob->sol_ ; //double *rcosts = prob->rcosts_ ; double *acts = prob->acts_; double *rowduals = prob->rowduals_; CoinBigIndex *link = prob->link_; CoinBigIndex &free_list = prob->free_list_; //const double maxmin = prob->maxmin_ ; const action *const actions = actions_; const int nactions = nactions_; /* Open the main loop to step through the postsolve objects. */ for (const action *f = &actions[nactions - 1]; actions <= f; f--) { int *deletedRow = f->deletedRow; double *els = f->rowels; int *indices = f->indices; int nDrop = f->nDrop; int ninrow = f->ninrow; double rhs = f->rhs; double coeff = els[nDrop]; int iRow = deletedRow[nDrop]; for (int i = 0; i < nDrop; i++) { int tgtrow = deletedRow[i]; double coeffy = els[i]; double dualValue = rowduals[tgtrow]; #if PRESOLVE_DEBUG > 2 std::cout << " restoring row " << tgtrow << " coeff " << coeffy << " dual " << dualValue << " dual on " << iRow << " goes from " << rowduals[iRow] << " to " << rowduals[iRow] - (coeffy * dualValue) / coeff << std::endl; #endif // adjust dual on iRow rowduals[iRow] -= (coeffy * dualValue) / coeff; #if 0 //PRESOLVE_DEBUG > 2 int * rowStart; int * column; double * element; postsolve_get_rowcopy(prob,rowStart,column,element); for (int k=rowStart[tgtrow];kgetColumnStatus(column[k])),rcosts[column[k]]); if ((k-rowStart[tgtrow])%10==9) printf("\n"); } printf("\n"); #endif for (int rndx = 0; rndx < ninrow; ++rndx) { int j = indices[rndx]; #if PRESOLVE_DEBUG > 2 std::cout << " a(" << j << " rcost " << rcosts[j] << " -> " << rcosts[j] - dualValue * coeffy << " " << statusName(prob->getColumnStatus(j)) << ")"; #endif CoinBigIndex kk = free_list; assert(kk >= 0 && kk < prob->bulk0_); free_list = link[free_list]; link[kk] = colStarts[j]; colStarts[j] = kk; colCoeffs[kk] = coeffy; rowIndices[kk] = tgtrow; ++colLengths[j]; } double value = (rhs / coeff) * coeffy; acts[tgtrow] += value; ; // correct rhs if (rlo[tgtrow] > -1.0e20) rlo[tgtrow] += value; if (rup[tgtrow] < 1.0e20) rup[tgtrow] += value; #if PRESOLVE_DEBUG > 2 std::cout << std::endl; #endif #if PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob); presolve_check_free_list(prob); #endif } } #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob); presolve_check_free_list(prob); presolve_check_reduced_costs(prob); presolve_check_duals(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving gubrow_action::postsolve." << std::endl; #endif #endif return; } gubrow_action::~gubrow_action() { const action *actions = actions_; for (int i = 0; i < nactions_; ++i) { delete[] actions[i].rowels; delete[] actions[i].deletedRow; delete[] actions[i].indices; } // Must add cast to placate MS compiler deleteAction(actions_, gubrow_action::action *); } /* Routines for two by two blocks. This is definitely unfinished --- there's no postsolve action. */ const char *twoxtwo_action::name() const { return ("twoxtwo_action"); } const CoinPresolveAction * twoxtwo_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { double startTime = 0.0; int startEmptyRows = 0; int startEmptyColumns = 0; if (prob->tuning_) { startTime = CoinCpuTime(); startEmptyRows = prob->countEmptyRows(); startEmptyColumns = prob->countEmptyCols(); } // maximum number of records action *boundRecords = new action[(prob->nrows_ + 1) >> 1]; int nactions = 0; // column-major representation const int ncols = prob->ncols_; const CoinBigIndex *const mcstrt = prob->mcstrt_; const int *const hincol = prob->hincol_; const int *const hrow = prob->hrow_; const double *colels = prob->colels_; double *cost = prob->cost_; // column type, bounds, solution, and status const unsigned char *const integerType = prob->integerType_; double *clo = prob->clo_; double *cup = prob->cup_; // row-major representation //const int nrows = prob->nrows_ ; const CoinBigIndex *const mrstrt = prob->mrstrt_; const int *const hinrow = prob->hinrow_; const int *const hcol = prob->hcol_; const double *rowels = prob->rowels_; // row bounds double *rlo = prob->rlo_; double *rup = prob->rup_; // tolerances //const double ekkinf2 = PRESOLVE_SMALL_INF ; //const double ekkinf = ekkinf2*1.0e8 ; //const double ztolcbarj = prob->ztoldj_ ; //const CoinRelFltEq relEq(prob->ztolzb_) ; double bound[2]; double alpha[2] = { 0.0, 0.0 }; double offset = 0.0; for (int icol = 0; icol < ncols; icol++) { if (hincol[icol] == 2) { CoinBigIndex start = mcstrt[icol]; int row0 = hrow[start]; if (hinrow[row0] != 2) continue; int row1 = hrow[start + 1]; if (hinrow[row1] != 2) continue; double element0 = colels[start]; double rowUpper0 = rup[row0]; bool swapSigns0 = false; if (rlo[row0] > -1.0e30) { if (rup[row0] > 1.0e30) { swapSigns0 = true; rowUpper0 = -rlo[row0]; element0 = -element0; } else { // range or equality continue; } } else if (rup[row0] > 1.0e30) { // free continue; } #if 0 // skip here for speed // skip if no cost (should be able to get rid of) if (!cost[icol]) { PRESOLVE_DETAIL_PRINT(printf("should be able to get rid of %d with no cost\n",icol)); continue; } // skip if negative cost for now if (cost[icol]<0.0) { PRESOLVE_DETAIL_PRINT(printf("code for negative cost\n")); continue; } #endif double element1 = colels[start + 1]; double rowUpper1 = rup[row1]; bool swapSigns1 = false; if (rlo[row1] > -1.0e30) { if (rup[row1] > 1.0e30) { swapSigns1 = true; rowUpper1 = -rlo[row1]; element1 = -element1; } else { // range or equality continue; } } else if (rup[row1] > 1.0e30) { // free continue; } double lowerX = clo[icol]; double upperX = cup[icol]; int otherCol = -1; CoinBigIndex startRow = mrstrt[row0]; for (CoinBigIndex j = startRow; j < startRow + 2; j++) { int jcol = hcol[j]; if (jcol != icol) { alpha[0] = swapSigns0 ? -rowels[j] : rowels[j]; otherCol = jcol; } } startRow = mrstrt[row1]; bool possible = true; for (CoinBigIndex j = startRow; j < startRow + 2; j++) { int jcol = hcol[j]; if (jcol != icol) { if (jcol == otherCol) { alpha[1] = swapSigns1 ? -rowels[j] : rowels[j]; } else { possible = false; } } } if (possible) { // skip if no cost (should be able to get rid of) if (!cost[icol]) { PRESOLVE_DETAIL_PRINT(printf("should be able to get rid of %d with no cost\n", icol)); continue; } // skip if negative cost for now if (cost[icol] < 0.0) { PRESOLVE_DETAIL_PRINT(printf("code for negative cost\n")); continue; } bound[0] = clo[otherCol]; bound[1] = cup[otherCol]; double lowestLowest = COIN_DBL_MAX; double highestLowest = -COIN_DBL_MAX; double lowestHighest = COIN_DBL_MAX; double highestHighest = -COIN_DBL_MAX; int binding0 = 0; int binding1 = 0; for (int k = 0; k < 2; k++) { bool infLow0 = false; bool infLow1 = false; double sum0 = 0.0; double sum1 = 0.0; double value = bound[k]; if (fabs(value) < 1.0e30) { sum0 += alpha[0] * value; sum1 += alpha[1] * value; } else { if (alpha[0] > 0.0) { if (value < 0.0) infLow0 = true; } else if (alpha[0] < 0.0) { if (value > 0.0) infLow0 = true; } if (alpha[1] > 0.0) { if (value < 0.0) infLow1 = true; } else if (alpha[1] < 0.0) { if (value > 0.0) infLow1 = true; } } /* Got sums */ double thisLowest0 = -COIN_DBL_MAX; double thisHighest0 = COIN_DBL_MAX; if (element0 > 0.0) { // upper bound unless inf&2 !=0 if (!infLow0) thisHighest0 = (rowUpper0 - sum0) / element0; } else { // lower bound unless inf&2 !=0 if (!infLow0) thisLowest0 = (rowUpper0 - sum0) / element0; } double thisLowest1 = -COIN_DBL_MAX; double thisHighest1 = COIN_DBL_MAX; if (element1 > 0.0) { // upper bound unless inf&2 !=0 if (!infLow1) thisHighest1 = (rowUpper1 - sum1) / element1; } else { // lower bound unless inf&2 !=0 if (!infLow1) thisLowest1 = (rowUpper1 - sum1) / element1; } if (thisLowest0 > thisLowest1 + 1.0e-12) { if (thisLowest0 > lowerX + 1.0e-12) binding0 |= 1 << k; } else if (thisLowest1 > thisLowest0 + 1.0e-12) { if (thisLowest1 > lowerX + 1.0e-12) binding1 |= 1 << k; thisLowest0 = thisLowest1; } if (thisHighest0 < thisHighest1 - 1.0e-12) { if (thisHighest0 < upperX - 1.0e-12) binding0 |= 1 << k; } else if (thisHighest1 < thisHighest0 - 1.0e-12) { if (thisHighest1 < upperX - 1.0e-12) binding1 |= 1 << k; thisHighest0 = thisHighest1; } lowestLowest = CoinMin(lowestLowest, thisLowest0); highestHighest = CoinMax(highestHighest, thisHighest0); lowestHighest = CoinMin(lowestHighest, thisHighest0); highestLowest = CoinMax(highestLowest, thisLowest0); } // see if any good //#define PRINT_VALUES if (!binding0 || !binding1) { PRESOLVE_DETAIL_PRINT(printf("Row redundant for column %d\n", icol)); } else { PRESOLVE_DETAIL_PRINT(printf("Column %d bounds %g,%g lowest %g,%g highest %g,%g\n", icol, lowerX, upperX, lowestLowest, lowestHighest, highestLowest, highestHighest)); // if integer adjust if (integerType[icol]) { lowestLowest = ceil(lowestLowest - 1.0e-5); highestLowest = ceil(highestLowest - 1.0e-5); lowestHighest = floor(lowestHighest + 1.0e-5); highestHighest = floor(highestHighest + 1.0e-5); } // if costed may be able to adjust if (cost[icol] >= 0.0) { if (highestLowest < upperX && highestLowest >= lowerX && highestHighest < 1.0e30) { highestHighest = CoinMin(highestHighest, highestLowest); } } if (cost[icol] <= 0.0) { if (lowestHighest > lowerX && lowestHighest <= upperX && lowestHighest > -1.0e30) { lowestLowest = CoinMax(lowestLowest, lowestHighest); } } #if 1 if (lowestLowest > lowerX + 1.0e-8) { PRESOLVE_DETAIL_PRINT(printf("Can increase lower bound on %d from %g to %g\n", icol, lowerX, lowestLowest)); lowerX = lowestLowest; } if (highestHighest < upperX - 1.0e-8) { PRESOLVE_DETAIL_PRINT(printf("Can decrease upper bound on %d from %g to %g\n", icol, upperX, highestHighest)); upperX = highestHighest; } #endif // see if we can move costs double xValue; double yValue0; double yValue1; double newLower = COIN_DBL_MAX; double newUpper = -COIN_DBL_MAX; double costEqual; double slope[2]; assert(binding0 + binding1 == 3); // get where equal xValue = (rowUpper0 * element1 - rowUpper1 * element0) / (alpha[0] * element1 - alpha[1] * element0); yValue0 = (rowUpper0 - xValue * alpha[0]) / element0; yValue1 = (rowUpper1 - xValue * alpha[1]) / element1; newLower = CoinMin(newLower, CoinMax(yValue0, yValue1)); newUpper = CoinMax(newUpper, CoinMax(yValue0, yValue1)); double xValueEqual = xValue; double yValueEqual = yValue0; costEqual = xValue * cost[otherCol] + yValueEqual * cost[icol]; if (binding0 == 1) { // take x 1.0 down double x = xValue - 1.0; double y = (rowUpper0 - x * alpha[0]) / element0; double costTotal = x * cost[otherCol] + y * cost[icol]; slope[0] = costEqual - costTotal; // take x 1.0 up x = xValue + 1.0; y = (rowUpper1 - x * alpha[1]) / element0; costTotal = x * cost[otherCol] + y * cost[icol]; slope[1] = costTotal - costEqual; } else { // take x 1.0 down double x = xValue - 1.0; double y = (rowUpper1 - x * alpha[1]) / element0; double costTotal = x * cost[otherCol] + y * cost[icol]; slope[1] = costEqual - costTotal; // take x 1.0 up x = xValue + 1.0; y = (rowUpper0 - x * alpha[0]) / element0; costTotal = x * cost[otherCol] + y * cost[icol]; slope[0] = costTotal - costEqual; } PRESOLVE_DETAIL_PRINT(printf("equal value of %d is %g, value of %d is max(%g,%g) - %g\n", otherCol, xValue, icol, yValue0, yValue1, CoinMax(yValue0, yValue1))); PRESOLVE_DETAIL_PRINT(printf("Cost at equality %g for constraint 0 slope %g for constraint 1 slope %g\n", costEqual, slope[0], slope[1])); xValue = bound[0]; yValue0 = (rowUpper0 - xValue * alpha[0]) / element0; yValue1 = (rowUpper1 - xValue * alpha[1]) / element1; PRESOLVE_DETAIL_PRINT(printf("value of %d is %g, value of %d is max(%g,%g) - %g\n", otherCol, xValue, icol, yValue0, yValue1, CoinMax(yValue0, yValue1))); newLower = CoinMin(newLower, CoinMax(yValue0, yValue1)); // cost>0 so will be at lower //double yValueAtBound0=newLower; newUpper = CoinMax(newUpper, CoinMax(yValue0, yValue1)); xValue = bound[1]; yValue0 = (rowUpper0 - xValue * alpha[0]) / element0; yValue1 = (rowUpper1 - xValue * alpha[1]) / element1; PRESOLVE_DETAIL_PRINT(printf("value of %d is %g, value of %d is max(%g,%g) - %g\n", otherCol, xValue, icol, yValue0, yValue1, CoinMax(yValue0, yValue1))); newLower = CoinMin(newLower, CoinMax(yValue0, yValue1)); // cost>0 so will be at lower //double yValueAtBound1=newLower; newUpper = CoinMax(newUpper, CoinMax(yValue0, yValue1)); lowerX = CoinMax(lowerX, newLower - 1.0e-12 * fabs(newLower)); upperX = CoinMin(upperX, newUpper + 1.0e-12 * fabs(newUpper)); // Now make duplicate row // keep row 0 so need to adjust costs so same PRESOLVE_DETAIL_PRINT(printf("Costs for x %g,%g,%g are %g,%g,%g\n", xValueEqual - 1.0, xValueEqual, xValueEqual + 1.0, costEqual - slope[0], costEqual, costEqual + slope[1])); double costOther = cost[otherCol] + slope[1]; double costThis = cost[icol] + slope[1] * (element0 / alpha[0]); xValue = xValueEqual; yValue0 = CoinMax((rowUpper0 - xValue * alpha[0]) / element0, lowerX); double thisOffset = costEqual - (costOther * xValue + costThis * yValue0); offset += thisOffset; PRESOLVE_DETAIL_PRINT(printf("new cost at equal %g\n", costOther * xValue + costThis * yValue0 + thisOffset)); xValue = xValueEqual - 1.0; yValue0 = CoinMax((rowUpper0 - xValue * alpha[0]) / element0, lowerX); PRESOLVE_DETAIL_PRINT(printf("new cost at -1 %g\n", costOther * xValue + costThis * yValue0 + thisOffset)); assert(fabs((costOther * xValue + costThis * yValue0 + thisOffset) - (costEqual - slope[0])) < 1.0e-5); xValue = xValueEqual + 1.0; yValue0 = CoinMax((rowUpper0 - xValue * alpha[0]) / element0, lowerX); PRESOLVE_DETAIL_PRINT(printf("new cost at +1 %g\n", costOther * xValue + costThis * yValue0 + thisOffset)); assert(fabs((costOther * xValue + costThis * yValue0 + thisOffset) - (costEqual + slope[1])) < 1.0e-5); action &boundRecord = boundRecords[nactions++]; boundRecord.row = row1; boundRecord.col = icol; boundRecord.othercol = otherCol; boundRecord.lbound_row = rlo[row1]; boundRecord.ubound_row = rup[row1]; boundRecord.lbound_col = clo[icol]; boundRecord.ubound_col = cup[icol]; boundRecord.cost_col = cost[icol]; boundRecord.cost_othercol = cost[otherCol]; cost[otherCol] = costOther; cost[icol] = costThis; clo[icol] = lowerX; cup[icol] = upperX; // make row useless rlo[row1] = -COIN_DBL_MAX; rup[row1] = COIN_DBL_MAX; } } } } if (nactions) { #if PRESOLVE_SUMMARY printf("Cost offset %g - from %d blocks\n", offset, nactions); printf("TWO by TWO blocks: %d - offset %g\n", nactions, offset); #endif action *actions = new action[nactions]; memcpy(actions, boundRecords, nactions * sizeof(action)); next = new twoxtwo_action(nactions, actions, next); int *sort = prob->usefulColumnInt_; for (int i = 0; i < nactions; i++) sort[i] = boundRecords[i].row; next = useless_constraint_action::presolve(prob, sort, nactions, next); // adjust offset prob->change_bias(offset); } delete[] boundRecords; if (prob->tuning_) { double thisTime = CoinCpuTime(); int droppedRows = prob->countEmptyRows() - startEmptyRows; int droppedColumns = prob->countEmptyCols() - startEmptyColumns; printf("CoinPresolveTwoxtwo(2048) - %d rows, %d columns dropped in time %g, total %g\n", droppedRows, droppedColumns, thisTime - startTime, thisTime - prob->startTime_); } return (next); } void twoxtwo_action::postsolve(CoinPostsolveMatrix *prob) const { const CoinBigIndex *const mcstrt = prob->mcstrt_; const int *const hincol = prob->hincol_; const int *const hrow = prob->hrow_; const double *colels = prob->colels_; CoinBigIndex *link = prob->link_; double *cost = prob->cost_; // column type, bounds, solution, and status //const unsigned char *const integerType = prob->integerType_ ; double *clo = prob->clo_; double *cup = prob->cup_; // row bounds double *rlo = prob->rlo_; double *rup = prob->rup_; double *sol = prob->sol_; double *rcosts = prob->rcosts_; double *rowacts = prob->acts_; double *dual = prob->rowduals_; double tolerance = prob->ztolzb_; const double maxmin = prob->maxmin_; for (int iAction = 0; iAction < nactions_; iAction++) { const action &boundRecord = actions_[iAction]; int row1 = boundRecord.row; int icol = boundRecord.col; int otherCol = boundRecord.othercol; CoinBigIndex start = mcstrt[icol]; CoinBigIndex nextEl = link[start]; int row0; // first is otherCol double els0[2] = { 0.0, 0.0 }; double els1[2] = { 0.0, 0.0 }; if (hrow[start] == row1) { row0 = hrow[nextEl]; els0[1] = colels[nextEl]; els1[1] = colels[start]; } else { row0 = hrow[start]; els0[1] = colels[start]; els1[1] = colels[nextEl]; } nextEl = mcstrt[otherCol]; for (CoinBigIndex j = 0; j < hincol[otherCol]; j++) { if (hrow[nextEl] == row0) els0[0] = colels[nextEl]; else if (hrow[nextEl] == row1) els1[0] = colels[nextEl]; nextEl = link[nextEl]; } prob->setRowStatus(row1, CoinPrePostsolveMatrix::basic); // put stuff back rlo[row1] = boundRecord.lbound_row; rup[row1] = boundRecord.ubound_row; clo[icol] = boundRecord.lbound_col; cup[icol] = boundRecord.ubound_col; double oldCost = cost[icol]; //double oldOtherCost=cost[otherCol]; cost[icol] = boundRecord.cost_col; cost[otherCol] = boundRecord.cost_othercol; double els0real[2]; double els1real[2]; els0real[0] = els0[0]; els0real[1] = els0[1]; els1real[0] = els1[0]; els1real[1] = els1[1]; // make <= rows double rowUpper0 = rup[row0]; if (rlo[row0] > -1.0e30) { rowUpper0 = -rlo[row0]; els0[0] = -els0[0]; els0[1] = -els0[1]; } double rowUpper1 = rup[row1]; bool swapSigns1 = false; if (rlo[row1] > -1.0e30) { swapSigns1 = true; rowUpper1 = -rlo[row1]; els1[0] = -els1[0]; els1[1] = -els1[1]; } // compute feasible value for icol double valueOther = sol[otherCol]; double value; // first see if at bound is OK bool lowerBoundPossible = clo[icol] > -1.0e30; value = clo[icol]; if (lowerBoundPossible) { double value0 = els0[0] * valueOther + els0[1] * value; if (value0 > rowUpper0 + tolerance) lowerBoundPossible = false; double value1 = els1[0] * valueOther + els1[1] * value; if (value1 > rowUpper1 + tolerance) lowerBoundPossible = false; } bool upperBoundPossible = cup[icol] < 1.0e30; value = cup[icol]; if (upperBoundPossible) { double value0 = els0[0] * valueOther + els0[1] * value; if (value0 > rowUpper0 + tolerance) upperBoundPossible = false; double value1 = els1[0] * valueOther + els1[1] * value; if (value1 > rowUpper1 + tolerance) upperBoundPossible = false; } if (lowerBoundPossible && cost[icol] >= 0.0) { // set to lower bound prob->setColumnStatus(icol, CoinPrePostsolveMatrix::atLowerBound); sol[icol] = clo[icol]; rcosts[icol] = maxmin * cost[icol] - dual[row0] * els0real[1]; } else if (upperBoundPossible && cost[icol] <= 0.0) { // set to upper bound prob->setColumnStatus(icol, CoinPrePostsolveMatrix::atUpperBound); sol[icol] = cup[icol]; rcosts[icol] = maxmin * cost[icol] - dual[row0] * els0real[1]; } else { // need to make basic // we shouldn't get here (at present) if zero cost assert(cost[icol]); double value0 = (rowUpper0 - els0[0] * valueOther) / els0[1]; double value1 = (rowUpper1 - els1[0] * valueOther) / els1[1]; //bool binding0=true; double value; if (cost[icol] > 0) { if (value0 > value1) { value = value0; } else { value = value1; //binding0=false; } } else { if (value0 < value1) { value = value0; } else { value = value1; //binding0=false; } } sol[icol] = value; #if 0 printf("row %d status %d, row %d status %d, col %d status %d, col %d status %d - binding0 %c\n", row0,prob->getRowStatus(row0), row1,prob->getRowStatus(row1), otherCol,prob->getColumnStatus(otherCol), icol,prob->getColumnStatus(icol),binding0 ? 'T' : 'F'); #endif if (prob->getColumnStatus(icol) == CoinPrePostsolveMatrix::basic) { //printf("col %d above was basic\n",icol); if (prob->getRowStatus(row0) != CoinPrePostsolveMatrix::basic) { // adjust dual dual[row0] = maxmin * ((cost[icol] - oldCost) / els0real[1]); } continue; } //if (binding0) //printf("Says row0 %d binding?\n",row0); prob->setColumnStatus(icol, CoinPrePostsolveMatrix::basic); rcosts[icol] = 0.0; //printf("row1 %d taken out of basis\n",row1); if (!swapSigns1) { prob->setRowStatus(row1, CoinPrePostsolveMatrix::atUpperBound); rowacts[row1] = rup[row1]; } else { prob->setRowStatus(row1, CoinPrePostsolveMatrix::atLowerBound); rowacts[row1] = rlo[row1]; } dual[row1] = maxmin * ((cost[icol] - oldCost) / els1real[1]); if (iAction == -1) abort(); } } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveTighten.hpp0000644000175200017520000000272513414454441020231 0ustar coincoin/* $Id: CoinPresolveTighten.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolveTighten_H #define CoinPresolveTighten_H #include "CoinPresolveMatrix.hpp" // This action has no separate class; // instead, it decides which columns can be made fixed // and calls make_fixed_action::presolve. const CoinPresolveAction *tighten_zero_cost(CoinPresolveMatrix *prob, const CoinPresolveAction *next); #define DO_TIGHTEN 30 class do_tighten_action : public CoinPresolveAction { do_tighten_action(); do_tighten_action(const do_tighten_action &rhs); do_tighten_action &operator=(const do_tighten_action &rhs); struct action { int *rows; double *lbound; double *ubound; int col; int nrows; int direction; // just for assertions }; const int nactions_; const action *const actions_; do_tighten_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~do_tighten_action(); }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinModelUseful2.cpp0000644000175200017520000011407313414454441017410 0ustar coincoin/* $Id: CoinModelUseful2.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. /* A Bison parser, made by GNU Bison 1.875c. */ // License sounds scary but see special exception so has no problems /* Skeleton parser for Yacc-like parsing with Bison, Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 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, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction. This special exception was added by the Free Software Foundation in version 1.24 of Bison. */ /* Written by Richard Stallman by simplifying the original so called ``semantic'' parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Using locations. */ #define YYLSP_NEEDED 0 /* Tokens. */ #ifndef YYTOKENTYPE #define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { NUM = 258, VAR = 259, FNCT = 260, NEG = 261 }; #endif #define NUM 258 #define VAR 259 #define FNCT 260 #define NEG 261 #include #include "CoinHelperFunctions.hpp" #include "CoinModel.hpp" /* Copy the first part of user declarations. */ #include /* For math functions, cos(), sin(), etc. */ #include #include #include #include static void yyerror(char const *); /* Enabling traces. */ #ifndef YYDEBUG #define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE #undef YYERROR_VERBOSE #define YYERROR_VERBOSE 1 #else #define YYERROR_VERBOSE 0 #endif #if !defined(YYSTYPE) && !defined(YYSTYPE_IS_DECLARED) typedef union YYSTYPE { double val; /* For returning numbers. */ symrec *tptr; /* For returning symbol-table pointers. */ } YYSTYPE; /* Line 191 of yacc.c. */ #define yystype YYSTYPE /* obsolescent; will be withdrawn */ #define YYSTYPE_IS_DECLARED 1 #define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 214 of yacc.c. */ #if !defined(yyoverflow) || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ #ifdef YYSTACK_USE_ALLOCA #if YYSTACK_USE_ALLOCA #define YYSTACK_ALLOC alloca #endif #else #if defined(alloca) || defined(_ALLOCA_H) #define YYSTACK_ALLOC alloca #else #ifdef __GNUC__ #define YYSTACK_ALLOC __builtin_alloca #endif #endif #endif #ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ #define YYSTACK_FREE(Ptr) \ do { /* empty */ \ ; \ } while (0) #else #if defined(__STDC__) || defined(__cplusplus) #include /* INFRINGES ON USER NAME SPACE */ #define YYSIZE_T size_t #endif #define YYSTACK_ALLOC malloc #define YYSTACK_FREE free #endif #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ #if (!defined(yyoverflow) \ && (!defined(__cplusplus) \ || (defined(YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { short yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ #define YYSTACK_GAP_MAXIMUM (sizeof(union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ #define YYSTACK_BYTES(N) \ ((N) * (sizeof(short) + sizeof(YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ #ifndef YYCOPY #if defined(__GNUC__) && 1 < __GNUC__ #define YYCOPY(To, From, Count) \ __builtin_memcpy(To, From, (Count) * sizeof(*(From))) #else #define YYCOPY(To, From, Count) \ do { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } while (0) #endif #endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ #define YYSTACK_RELOCATE(Stack) \ do { \ YYSIZE_T yynewbytes; \ YYCOPY(&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof(*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof(*yyptr); \ } while (0) #endif #if defined(__STDC__) || defined(__cplusplus) typedef signed char yysigned_char; #else typedef short yysigned_char; #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 64 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 16 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 4 /* YYNRULES -- Number of rules. */ #define YYNRULES 17 /* YYNRULES -- Number of states. */ #define YYNSTATES 32 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 261 #define YYTRANSLATE(YYX) \ (static_cast< unsigned int >((YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const unsigned char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 15, 9, 8, 2, 7, 2, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 11 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const unsigned char yyprhs[] = { 0, 0, 3, 4, 7, 9, 12, 15, 17, 19, 23, 28, 32, 36, 40, 44, 47, 51 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yysigned_char yyrhs[] = { 17, 0, -1, -1, 17, 18, -1, 13, -1, 19, 13, -1, 1, 13, -1, 3, -1, 4, -1, 4, 6, 19, -1, 5, 14, 19, 15, -1, 19, 8, 19, -1, 19, 7, 19, -1, 19, 9, 19, -1, 19, 10, 19, -1, 7, 19, -1, 19, 12, 19, -1, 14, 19, 15, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned char yyrline[] = { 0, 23, 23, 24, 28, 29, 30, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43 }; #endif #if YYDEBUG || YYERROR_VERBOSE /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "NUM", "VAR", "FNCT", "'='", "'-'", "'+'", "'*'", "'/'", "NEG", "'^'", "'\\n'", "'('", "')'", "$accept", "input", "line", "exp", 0 }; #endif #ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const unsigned short yytoknum[] = { 0, 256, 257, 258, 259, 260, 61, 45, 43, 42, 47, 261, 94, 10, 40, 41 }; #endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const unsigned char yyr1[] = { 0, 16, 17, 17, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const unsigned char yyr2[] = { 0, 2, 0, 2, 1, 2, 2, 1, 1, 3, 4, 3, 3, 3, 3, 2, 3, 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const unsigned char yydefact[] = { 2, 0, 1, 0, 7, 8, 0, 0, 4, 0, 3, 0, 6, 0, 0, 15, 0, 0, 0, 0, 0, 0, 5, 9, 0, 17, 12, 11, 13, 14, 16, 10 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yysigned_char yydefgoto[] = { -1, 1, 10, 11 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -13 static const yysigned_char yypact[] = { -13, 15, -13, -12, -13, -3, -10, 20, -13, 20, -13, 41, -13, 20, 20, -4, 23, 20, 20, 20, 20, 20, -13, 48, 32, -13, 52, 52, -4, -4, -4, -13 }; /* YYPGOTO[NTERM-NUM]. */ static const yysigned_char yypgoto[] = { -13, -13, -13, -7 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const unsigned char yytable[] = { 15, 12, 16, 13, 14, 0, 23, 24, 21, 0, 26, 27, 28, 29, 30, 2, 3, 0, 4, 5, 6, 0, 7, 4, 5, 6, 0, 7, 8, 9, 17, 18, 19, 20, 9, 21, 0, 0, 25, 17, 18, 19, 20, 0, 21, 0, 0, 31, 17, 18, 19, 20, 0, 21, 22, 17, 18, 19, 20, 0, 21, 19, 20, 0, 21 }; static const yysigned_char yycheck[] = { 7, 13, 9, 6, 14, -1, 13, 14, 12, -1, 17, 18, 19, 20, 21, 0, 1, -1, 3, 4, 5, -1, 7, 3, 4, 5, -1, 7, 13, 14, 7, 8, 9, 10, 14, 12, -1, -1, 15, 7, 8, 9, 10, -1, 12, -1, -1, 15, 7, 8, 9, 10, -1, 12, 13, 7, 8, 9, 10, -1, 12, 9, 10, -1, 12 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const unsigned char yystos[] = { 0, 17, 0, 1, 3, 4, 5, 7, 13, 14, 18, 19, 13, 6, 14, 19, 19, 7, 8, 9, 10, 12, 13, 19, 19, 15, 19, 19, 19, 19, 19, 15 }; #if !defined(YYSIZE_T) && defined(__SIZE_TYPE__) #define YYSIZE_T size_t #endif #if !defined(YYSIZE_T) && defined(size_t) #define YYSIZE_T size_t #endif #if !defined(YYSIZE_T) #if defined(__STDC__) || defined(__cplusplus) #include /* INFRINGES ON USER NAME SPACE */ #define YYSIZE_T size_t #endif #endif #if !defined(YYSIZE_T) #define YYSIZE_T unsigned int #endif #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE(yychar); \ YYPOPSTACK; \ goto yybackup; \ } else { \ yyerror("syntax error: cannot back up", error); \ YYERROR; \ } \ while (0) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Compute the default location (before the actions are run). */ #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(Current, Rhs, N) \ ((Current).first_line = (Rhs)[1].first_line, \ (Current).first_column = (Rhs)[1].first_column, \ (Current).last_line = (Rhs)[N].last_line, \ (Current).last_column = (Rhs)[N].last_column) #endif /* YYLEX -- calling `yylex' with the right arguments. */ /* Enable debugging if requested. */ #if YYDEBUG #ifndef YYFPRINTF #include /* INFRINGES ON USER NAME SPACE */ #define YYFPRINTF fprintf #endif #define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) #define YYDSYMPRINT(Args) \ do { \ if (yydebug) \ yysymprint Args; \ } while (0) #define YYDSYMPRINTF(Title, Token, Value, Location) \ do { \ if (yydebug) { \ YYFPRINTF(stderr, "%s ", Title); \ yysymprint(stderr, \ Token, Value); \ YYFPRINTF(stderr, "\n"); \ } \ } while (0) /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if defined(__STDC__) || defined(__cplusplus) static void yy_stack_print(short *bottom, short *top) #else static void yy_stack_print(bottom, top) short *bottom; short *top; #endif { YYFPRINTF(stderr, "Stack now"); for (/* Nothing. */; bottom <= top; ++bottom) YYFPRINTF(stderr, " %d", *bottom); YYFPRINTF(stderr, "\n"); } #define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if defined(__STDC__) || defined(__cplusplus) static void yy_reduce_print(int yyrule) #else static void yy_reduce_print(yyrule) int yyrule; #endif { int yyi; unsigned int yylno = yyrline[yyrule]; YYFPRINTF(stderr, "Reducing stack by rule %d (line %u), ", yyrule - 1, yylno); /* Print the symbols being reduced, and their result. */ for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) YYFPRINTF(stderr, "%s ", yytname[yyrhs[yyi]]); YYFPRINTF(stderr, "-> %s\n", yytname[yyr1[yyrule]]); } #define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print(Rule); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ static int yydebug; #else /* !YYDEBUG */ #define YYDPRINTF(Args) #define YYDSYMPRINT(Args) #define YYDSYMPRINTF(Title, Token, Value, Location) #define YY_STACK_PRINT(Bottom, Top) #define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH #define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #if defined(YYMAXDEPTH) && YYMAXDEPTH == 0 #undef YYMAXDEPTH #endif #ifndef YYMAXDEPTH #define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE #ifndef yystrlen #if defined(__GLIBC__) && defined(_STRING_H) #define yystrlen strlen #else /* Return the length of YYSTR. */ static YYSIZE_T #if defined(__STDC__) || defined(__cplusplus) yystrlen(const char *yystr) #else yystrlen(yystr) const char *yystr; #endif { const char *yys = yystr; while (*yys++ != '\0') continue; return yys - yystr - 1; } #endif #endif #ifndef yystpcpy #if defined(__GLIBC__) && defined(_STRING_H) && defined(_GNU_SOURCE) #define yystpcpy stpcpy #else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char * #if defined(__STDC__) || defined(__cplusplus) yystpcpy(char *yydest, const char *yysrc) #else yystpcpy(yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } #endif #endif #endif /* !YYERROR_VERBOSE */ #if YYDEBUG /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if defined(__STDC__) || defined(__cplusplus) static void yysymprint(FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) #else static void yysymprint(yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE *yyvaluep; #endif { /* Pacify ``unused variable'' warnings. */ (void)yyvaluep; if (yytype < YYNTOKENS) { YYFPRINTF(yyoutput, "token %s (", yytname[yytype]); #ifdef YYPRINT YYPRINT(yyoutput, yytoknum[yytype], *yyvaluep); #endif } else YYFPRINTF(yyoutput, "nterm %s (", yytname[yytype]); switch (yytype) { default: break; } YYFPRINTF(yyoutput, ")"); } #endif /* ! YYDEBUG */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ #if defined(__STDC__) || defined(__cplusplus) static void yydestruct(int yytype, YYSTYPE *yyvaluep) #else static void yydestruct(yytype, yyvaluep) int yytype; YYSTYPE *yyvaluep; #endif { /* Pacify ``unused variable'' warnings. */ (void)yyvaluep; switch (yytype) { default: break; } } static symrec * putsym(symrec *&symtable, char const *sym_name, int sym_type) { symrec *ptr; ptr = reinterpret_cast< symrec * >(malloc(sizeof(symrec))); ptr->name = reinterpret_cast< char * >(malloc(strlen(sym_name) + 1)); strcpy(ptr->name, sym_name); ptr->type = sym_type; ptr->value.var = 0; /* Set value to 0 even if fctn. */ ptr->next = reinterpret_cast< struct symrec * >(symtable); symtable = ptr; return ptr; } static symrec * getsym(symrec *symtable, char const *sym_name) { symrec *ptr; for (ptr = symtable; ptr != NULL; ptr = reinterpret_cast< symrec * >(ptr->next)) if (strcmp(ptr->name, sym_name) == 0) return ptr; return 0; } static void freesym(symrec *symtable) { symrec *ptr; for (ptr = symtable; ptr != NULL;) { free(ptr->name); symrec *ptrNext = reinterpret_cast< symrec * >(ptr->next); free(ptr); ptr = ptrNext; } } /* Called by yyparse on error. */ static void yyerror(char const * /*s*/) { // Put back if needed //printf ("%s\n", s); } struct init { char const *fname; double (*fnct)(double); }; inline double sin_wrapper(double x) { return sin(x); } inline double cos_wrapper(double x) { return cos(x); } inline double atan_wrapper(double x) { return atan(x); } inline double log_wrapper(double x) { return log(x); } inline double exp_wrapper(double x) { return exp(x); } inline double sqrt_wrapper(double x) { return sqrt(x); } inline double fabs_wrapper(double x) { return fabs(x); } inline double floor_wrapper(double x) { return floor(x); } inline double ceil_wrapper(double x) { return ceil(x); } struct init const arith_fncts[] = { { "sin", sin_wrapper }, { "cos", cos_wrapper }, { "atan", atan_wrapper }, { "ln", log_wrapper }, { "exp", exp_wrapper }, { "sqrt", sqrt_wrapper }, { "fabs", fabs_wrapper }, { "abs", fabs_wrapper }, { "floor", floor_wrapper }, { "ceil", ceil_wrapper }, { NULL, 0 } }; /* The symbol table: a chain of `struct symrec'. */ /* Put arithmetic functions in table. */ static void init_table(symrec *&symtable) { int i; symrec *ptr; for (i = 0; arith_fncts[i].fname != NULL; i++) { ptr = putsym(symtable, arith_fncts[i].fname, FNCT); ptr->value.fnctptr = arith_fncts[i].fnct; } } static int yylex(symrec *&symtable, const char *line, int *position, char *&symbuf, int &length, const double *associated, const CoinModelHash &string, int &error, double unsetValue, YYSTYPE &yylval) { int c; int ipos = *position; /* Ignore white space, get first nonwhite character. */ while ((c = line[ipos]) == ' ' || c == '\t') ipos++; if (c == EOF) return 0; /* Char starts a number => parse the number. */ if (c == '.' || isdigit(c)) { sscanf(line + ipos, "%lf", &yylval.val); /* Get first white or other character. */ int nE = 0; int nDot = 0; if (c == '.') nDot = 1; ipos++; // skip possible sign while (true) { c = line[ipos]; if (isdigit(c)) { } else if (!nDot && c == '.') { nDot = 1; } else if (c == 'e' && !nE) { nE = 1; if (line[ipos + 1] == '+' || line[ipos + 1] == '-') ipos++; } else { break; } ipos++; } *position = ipos; return NUM; } /* Char starts an identifier => read the name. */ if (isalpha(c)) { symrec *s; int i; /* Initially make the buffer long enough for a 40-character symbol name. */ if (length == 0) length = 40, symbuf = reinterpret_cast< char * >(malloc(length + 1)); i = 0; do { /* If buffer is full, make it bigger. */ if (i == length) { length *= 2; symbuf = reinterpret_cast< char * >(realloc(symbuf, length + 1)); } /* Add this character to the buffer. */ symbuf[i++] = static_cast< char >(c); /* Get another character. */ ipos++; c = line[ipos]; } while (isalnum(c)); symbuf[i] = '\0'; s = getsym(symtable, symbuf); if (s == 0) { // Find in strings int find = string.hash(symbuf); double value; if (find >= 0) { value = associated[find]; //printf("symbol %s found with value of %g\n",symbuf,value); if (value == unsetValue) error = CoinMax(error, 1); } else { //printf("unknown symbol %s\n",symbuf); value = unsetValue; error = 3; } s = putsym(symtable, symbuf, VAR); s->value.var = value; } yylval.tptr = s; *position = ipos; return s->type; } /* Any other character is a token by itself. */ if (c) { *position = ipos + 1; return c; } else { *position = ipos; return 10; } } /*----------. | yyparse. | `----------*/ static double yyparse(symrec *&symtable, const char *line, char *&symbuf, int &length, const double *associated, const CoinModelHash &string, int &error, double unsetValue, int &yychar, YYSTYPE &yylval, int &yynerrs) { int position = 0; int nEof = 0; // Number of time send of string int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ short yyssa[YYINITDEPTH]; short *yyss = yyssa; short *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK (yyvsp--, yyssp--) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* When reducing, the number of symbols on the RHS of the reduced rule. */ int yylen; YYDPRINTF((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. so pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = static_cast< short >(yystate); if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; short *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow("parser stack overflow", &yyss1, yysize * sizeof(*yyssp), &yyvs1, yysize * sizeof(*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ #ifndef YYSTACK_RELOCATE goto yyoverflowlab; #else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyoverflowlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { short *yyss1 = yyss; union yyalloc *yyptr = reinterpret_cast< union yyalloc * >(YYSTACK_ALLOC(YYSTACK_BYTES(yystacksize))); if (!yyptr) goto yyoverflowlab; YYSTACK_RELOCATE(yyss); YYSTACK_RELOCATE(yyvs); #undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE(yyss1); } #endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF((stderr, "Stack size increased to %lu\n", (unsigned long int)yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. */ /* Read a lookahead token if we need one and don't already have one. */ /* yyresume: */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF((stderr, "Reading a token: ")); yychar = yylex(symtable, line, &position, symbuf, length, associated, string, error, unsetValue, yylval); if (yychar == 10) { if (nEof) yychar = 0; nEof++; } } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF((stderr, "Now at end of input.\n")); } else { yytoken = static_cast< int >(YYTRANSLATE(yychar)); YYDSYMPRINTF("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Shift the lookahead token. */ YYDPRINTF((stderr, "Shifting token %s, ", yytname[yytoken])); /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; *++yyvsp = yylval; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; yystate = yyn; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1 - yylen]; YY_REDUCE_PRINT(yyn); switch (yyn) { case 5: { //printf ("\t%.10g\n", yyvsp[-1].val); return yyvsp[-1].val; } break; case 6: { yyerrok; ; } break; case 7: { yyval.val = yyvsp[0].val; ; } break; case 8: { yyval.val = yyvsp[0].tptr->value.var; ; } break; case 9: { yyval.val = yyvsp[0].val; yyvsp[-2].tptr->value.var = yyvsp[0].val; ; } break; case 10: { yyval.val = (*(yyvsp[-3].tptr->value.fnctptr))(yyvsp[-1].val); ; } break; case 11: { yyval.val = yyvsp[-2].val + yyvsp[0].val; ; } break; case 12: { yyval.val = yyvsp[-2].val - yyvsp[0].val; ; } break; case 13: { yyval.val = yyvsp[-2].val * yyvsp[0].val; ; } break; case 14: { yyval.val = yyvsp[-2].val / yyvsp[0].val; ; } break; case 15: { yyval.val = -yyvsp[0].val; ; } break; case 16: { yyval.val = pow(yyvsp[-2].val, yyvsp[0].val); ; } break; case 17: { yyval.val = yyvsp[-1].val; ; } break; } /* Line 993 of yacc.c. */ yyvsp -= yylen; yyssp -= yylen; YY_STACK_PRINT(yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { error = CoinMax(error, 2); ++yynerrs; #if YYERROR_VERBOSE yyn = yypact[yystate]; if (YYPACT_NINF < yyn && yyn < YYLAST) { YYSIZE_T yysize = 0; int yytype = YYTRANSLATE(yychar); const char *yyprefix; char *yymsg; int yyx; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 0; yyprefix = ", expecting "; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { yysize += yystrlen(yyprefix) + yystrlen(yytname[yyx]); yycount += 1; if (yycount == 5) { yysize = 0; break; } } yysize += (sizeof("syntax error, unexpected ") + yystrlen(yytname[yytype])); yymsg = (char *)YYSTACK_ALLOC(yysize); if (yymsg != 0) { char *yyp = yystpcpy(yymsg, "syntax error, unexpected "); yyp = yystpcpy(yyp, yytname[yytype]); if (yycount < 5) { yyprefix = ", expecting "; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { yyp = yystpcpy(yyp, yyprefix); yyp = yystpcpy(yyp, yytname[yyx]); yyprefix = " or "; } } yyerror(yymsg); YYSTACK_FREE(yymsg); } else yyerror("syntax error; also virtual memory exhausted"); } else #endif /* YYERROR_VERBOSE */ yyerror("syntax error"); } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* If at end of input, pop the error token, then the rest of the stack, then return failure. */ if (yychar == YYEOF) for (;;) { YYPOPSTACK; if (yyssp == yyss) YYABORT; YYDSYMPRINTF("Error: popping", yystos[*yyssp], yyvsp, yylsp); yydestruct(yystos[*yyssp], yyvsp); } } else { YYDSYMPRINTF("Error: discarding", yytoken, &yylval, &yylloc); yydestruct(yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: #ifdef __GNUC__ /* Pacify GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (0) goto yyerrorlab; #endif yyvsp -= yylen; yyssp -= yylen; yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; YYDSYMPRINTF("Error: popping", yystos[*yyssp], yyvsp, yylsp); yydestruct(yystos[yystate], yyvsp); YYPOPSTACK; yystate = *yyssp; YY_STACK_PRINT(yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; YYDPRINTF((stderr, "Shifting error token, ")); *++yyvsp = yylval; yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*----------------------------------------------. | yyoverflowlab -- parser overflow comes here. | `----------------------------------------------*/ yyoverflowlab: yyerror("parser stack overflow"); yyresult = 2; /* Fall through. */ #endif yyreturn: #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE(yyss); #endif return yyresult; } double CoinModel::getDoubleFromString(CoinYacc &info, const char *string) { if (!info.length) { info.symtable = NULL; info.symbuf = NULL; init_table(info.symtable); info.unsetValue = unsetValue(); } int error = 0; // Here to make thread safe /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; double value = yyparse(info.symtable, string, info.symbuf, info.length, associated_, string_, error, info.unsetValue, yychar, yylval, yynerrs); if (error) { // 1 means strings found but unset value // 2 syntax error // 3 string not found if (logLevel_ >= 1) printf("string %s returns value %g and error-code %d\n", string, value, error); value = info.unsetValue; } else if (logLevel_ >= 2) { printf("%s computes as %g\n", string, value); } return value; } // Frees value memory void CoinModel::freeStringMemory(CoinYacc &info) { freesym(info.symtable); free(info.symbuf); info.length = 0; } // Adds one string, returns index static int addString(CoinModelHash &stringX, const char *string) { int position = stringX.hash(string); if (position < 0) { position = stringX.numberItems(); stringX.addHash(position, string); } return position; } double getFunctionValueFromString(const char *string, const char *x, double xValue) { CoinYacc info; double unset = -1.23456787654321e-97; info.length = 0; info.symtable = NULL; info.symbuf = NULL; init_table(info.symtable); info.unsetValue = unset; int error = 0; double associated[2]; associated[0] = xValue; associated[1] = unset; CoinModelHash stringX; addString(stringX, x); addString(stringX, string); // Here to make thread safe /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; double value = yyparse(info.symtable, string, info.symbuf, info.length, associated, stringX, error, info.unsetValue, yychar, yylval, yynerrs); int logLevel_ = 2; if (error) { // 1 means strings found but unset value // 2 syntax error // 3 string not found if (logLevel_ >= 1) printf("string %s returns value %g and error-code %d\n", string, value, error); value = unset; } else if (logLevel_ >= 2) { printf("%s computes as %g\n", string, value); } freesym(info.symtable); return value; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinMpsIO.cpp0000644000175200017520000057250613414454441016102 0ustar coincoin/* $Id: CoinMpsIO.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "CoinUtilsConfig.h" #include #include #include #include #include #include #include #include "CoinMpsIO.hpp" #include "CoinMessage.hpp" #include "CoinHelperFunctions.hpp" #include "CoinModel.hpp" #include "CoinSort.hpp" //############################################################################# // type - 0 normal, 1 INTEL IEEE, 2 other IEEE namespace { const double fraction[] = { 1.0, 1.0e-1, 1.0e-2, 1.0e-3, 1.0e-4, 1.0e-5, 1.0e-6, 1.0e-7, 1.0e-8, 1.0e-9, 1.0e-10, 1.0e-11, 1.0e-12, 1.0e-13, 1.0e-14, 1.0e-15, 1.0e-16, 1.0e-17, 1.0e-18, 1.0e-19, 1.0e-20, 1.0e-21, 1.0e-22, 1.0e-23 }; const double exponent[] = { 1.0e-9, 1.0e-8, 1.0e-7, 1.0e-6, 1.0e-5, 1.0e-4, 1.0e-3, 1.0e-2, 1.0e-1, 1.0, 1.0e1, 1.0e2, 1.0e3, 1.0e4, 1.0e5, 1.0e6, 1.0e7, 1.0e8, 1.0e9 }; } // end file-local namespace double CoinMpsCardReader::osi_strtod(char *ptr, char **output, int type) { double value = 0.0; char *save = ptr; // take off leading white space while (*ptr == ' ' || *ptr == '\t') ptr++; if (!type) { double sign1 = 1.0; // do + or - if (*ptr == '-') { sign1 = -1.0; ptr++; } else if (*ptr == '+') { ptr++; } // more white space while (*ptr == ' ' || *ptr == '\t') ptr++; char thisChar = 0; while (value < 1.0e30) { thisChar = *ptr; ptr++; if (thisChar >= '0' && thisChar <= '9') value = value * 10.0 + thisChar - '0'; else break; } if (value < 1.0e30) { if (thisChar == '.') { // do fraction double value2 = 0.0; int nfrac = 0; while (nfrac < 24) { thisChar = *ptr; ptr++; if (thisChar >= '0' && thisChar <= '9') { value2 = value2 * 10.0 + thisChar - '0'; nfrac++; } else { break; } } if (nfrac < 24) { value += value2 * fraction[nfrac]; } else { thisChar = 'x'; // force error } } if (thisChar == 'e' || thisChar == 'E') { // exponent int sign2 = 1; // do + or - if (*ptr == '-') { sign2 = -1; ptr++; } else if (*ptr == '+') { ptr++; } int value3 = 0; while (value3 < 1000) { thisChar = *ptr; ptr++; if (thisChar >= '0' && thisChar <= '9') { value3 = value3 * 10 + thisChar - '0'; } else { break; } } if (value3 < 300) { value3 *= sign2; // power of 10 if (abs(value3) < 10) { // do most common by lookup (for accuracy?) value *= exponent[value3 + 9]; } else { value *= pow(10.0, value3); } } else if (sign2 < 0.0) { value = 0.0; // force zero } else { value = COIN_DBL_MAX; } } if (thisChar == 0 || thisChar == '\t' || thisChar == ' ') { // okay *output = ptr; } else { value = osi_strtod(save, output); sign1 = 1.0; } } else { // bad value value = osi_strtod(save, output); sign1 = 1.0; } value *= sign1; } else { // ieee - 3 bytes go to 2 assert(sizeof(double) == 8 * sizeof(char)); assert(sizeof(unsigned short) == 2 * sizeof(char)); unsigned short shortValue[4]; *output = ptr + 12; // say okay if (type == 1) { // INTEL for (int i = 3; i >= 0; i--) { int integerValue = 0; char *three = reinterpret_cast< char * >(&integerValue); three[1] = ptr[0]; three[2] = ptr[1]; three[3] = ptr[2]; unsigned short thisValue = 0; // decode 6 bits at a time for (int j = 2; j >= 0; j--) { thisValue = static_cast< unsigned short >(thisValue << 6); char thisChar = ptr[j]; if (thisChar >= '0' && thisChar <= '0' + 9) { thisValue = static_cast< unsigned short >(thisValue | (thisChar - '0')); } else if (thisChar >= 'a' && thisChar <= 'a' + 25) { thisValue = static_cast< unsigned short >(thisValue | (thisChar - 'a' + 10)); } else if (thisChar >= 'A' && thisChar <= 'A' + 25) { thisValue = static_cast< unsigned short >(thisValue | (thisChar - 'A' + 36)); } else if (thisChar >= '*' && thisChar <= '*' + 1) { thisValue = static_cast< unsigned short >(thisValue | (thisChar - '*' + 62)); } else { // error *output = save; } } ptr += 3; shortValue[i] = thisValue; } } else { // not INTEL for (int i = 0; i < 4; i++) { int integerValue = 0; char *three = reinterpret_cast< char * >(&integerValue); three[1] = ptr[0]; three[2] = ptr[1]; three[3] = ptr[2]; unsigned short thisValue = 0; // decode 6 bits at a time for (int j = 2; j >= 0; j--) { thisValue = static_cast< unsigned short >(thisValue << 6); char thisChar = ptr[j]; if (thisChar >= '0' && thisChar <= '0' + 9) { thisValue = static_cast< unsigned short >(thisValue | (thisChar - '0')); } else if (thisChar >= 'a' && thisChar <= 'a' + 25) { thisValue = static_cast< unsigned short >(thisValue | (thisChar - 'a' + 10)); } else if (thisChar >= 'A' && thisChar <= 'A' + 25) { thisValue = static_cast< unsigned short >(thisValue | (thisChar - 'A' + 36)); } else if (thisChar >= '*' && thisChar <= '*' + 1) { thisValue = static_cast< unsigned short >(thisValue | (thisChar - '*' + 62)); } else { // error *output = save; } } ptr += 3; shortValue[i] = thisValue; } } memcpy(&value, shortValue, sizeof(double)); } return value; } // for strings double CoinMpsCardReader::osi_strtod(char *ptr, char **output) { char *save = ptr; double value = -1.0e100; if (!stringsAllowed_) { *output = save; } else { // take off leading white space while (*ptr == ' ' || *ptr == '\t') ptr++; if (*ptr == '=') { strcpy(valueString_, ptr); #define STRING_VALUE -1.234567e-101 value = STRING_VALUE; *output = ptr + strlen(ptr); } else { *output = save; } } return value; } //############################################################################# // sections const static char *section[] = { "", "NAME", "ROW", "COLUMN", "RHS", "RANGES", "BOUNDS", "ENDATA", " ", "QSECTION", "CSECTION", "QUADOBJ", "SOS", "BASIS", " " }; // what is allowed in each section - must line up with COINSectionType const static COINMpsType startType[] = { COIN_UNKNOWN_MPS_TYPE, COIN_UNKNOWN_MPS_TYPE, COIN_N_ROW, COIN_BLANK_COLUMN, COIN_BLANK_COLUMN, COIN_BLANK_COLUMN, COIN_UP_BOUND, COIN_UNKNOWN_MPS_TYPE, COIN_UNKNOWN_MPS_TYPE, COIN_BLANK_COLUMN, COIN_BLANK_COLUMN, COIN_BLANK_COLUMN, COIN_S1_BOUND, COIN_BS_BASIS, COIN_UNKNOWN_MPS_TYPE }; const static COINMpsType endType[] = { COIN_UNKNOWN_MPS_TYPE, COIN_UNKNOWN_MPS_TYPE, COIN_BLANK_COLUMN, COIN_UNSET_BOUND, COIN_S1_COLUMN, COIN_S1_COLUMN, COIN_UNKNOWN_MPS_TYPE, COIN_UNKNOWN_MPS_TYPE, COIN_UNKNOWN_MPS_TYPE, COIN_BLANK_COLUMN, COIN_BLANK_COLUMN, COIN_BLANK_COLUMN, COIN_BS_BASIS, COIN_UNKNOWN_MPS_TYPE, COIN_UNKNOWN_MPS_TYPE }; const static int allowedLength[] = { 0, 0, 1, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0 }; // names of types const static char *mpsTypes[] = { "N", "E", "L", "G", " ", "S1", "S2", "S3", " ", " ", " ", " ", "UP", "FX", "LO", "FR", "MI", "PL", "BV", "UI", "LI", "XX", "SC", "X1", "X2", "BS", "XL", "XU", "LL", "UL", " " }; int CoinMpsCardReader::cleanCard() { char *getit; getit = input_->gets(card_, MAX_CARD_LENGTH); if (getit) { cardNumber_++; unsigned char *lastNonBlank = reinterpret_cast< unsigned char * >(card_ - 1); unsigned char *image = reinterpret_cast< unsigned char * >(card_); bool tabs = false; while (*image != '\0') { if (*image != '\t' && *image < ' ') { break; } else if (*image != '\t' && *image != ' ') { lastNonBlank = image; } else if (*image == '\t') { tabs = true; } image++; } *(lastNonBlank + 1) = '\0'; if (tabs && section_ == COIN_BOUNDS_SECTION && !freeFormat_ && eightChar_) { int length = static_cast< int >(lastNonBlank + 1 - reinterpret_cast< unsigned char * >(card_)); assert(length < 81); memcpy(card_ + 82, card_, length); int pos[] = { 1, 4, 14, 24, 1000 }; int put = 0; int tab = 0; for (int i = 0; i < length; i++) { char look = card_[i + 82]; if (look != '\t') { card_[put++] = look; } else { // count on to next for (; tab < 5; tab++) { if (put < pos[tab]) { while (put < pos[tab]) card_[put++] = ' '; break; } } } } card_[put++] = '\0'; } return 0; } else { return 1; } } char * CoinMpsCardReader::nextBlankOr(char *image) { char *saveImage = image; while (1) { if (*image == ' ' || *image == '\t') { break; } if (*image == '\0') return NULL; image++; } // Allow for floating - or +. Will fail if user has that as row name!! if (image - saveImage == 1 && (*saveImage == '+' || *saveImage == '-')) { while (*image == ' ' || *image == '\t') { image++; } image = nextBlankOr(image); } return image; } // Read to NAME card - return nonzero if bad COINSectionType CoinMpsCardReader::readToNextSection() { bool found = false; while (!found) { // need new image if (cleanCard()) { section_ = COIN_EOF_SECTION; break; } if (!strncmp(card_, "NAME", 4) || !strncmp(card_, "TIME", 4) || !strncmp(card_, "BASIS", 5) || !strncmp(card_, "STOCH", 5)) { section_ = COIN_NAME_SECTION; char *next = card_ + 5; position_ = eol_ = card_ + strlen(card_); handler_->message(COIN_MPS_LINE, messages_) << cardNumber_ << card_ << CoinMessageEol; while (next < eol_) { if (*next == ' ' || *next == '\t') { next++; } else { break; } } if (next < eol_) { char *nextBlank = nextBlankOr(next); char save; if (nextBlank) { save = *nextBlank; *nextBlank = '\0'; strcpy(columnName_, next); *nextBlank = save; if (strstr(nextBlank, "FREEIEEE")) { freeFormat_ = true; // see if intel ieeeFormat_ = 1; double value = 1.0; char x[8]; memcpy(x, &value, 8); if (x[0] == 63) { ieeeFormat_ = 2; // not intel } else { assert(x[0] == 0); } } else if (strstr(nextBlank, "FREE")) { freeFormat_ = true; } else if (strstr(nextBlank, "VALUES")) { // basis is always free - just use this to communicate back freeFormat_ = true; } else if (strstr(nextBlank, "IEEE")) { // see if intel ieeeFormat_ = 1; double value = 1.0; char x[8]; memcpy(x, &value, 8); if (x[0] == 63) { ieeeFormat_ = 2; // not intel } else { assert(x[0] == 0); } } } else { strcpy(columnName_, next); } } else { strcpy(columnName_, "no_name"); } break; } else if (card_[0] != '*' && card_[0] != '#') { // not a comment int i; handler_->message(COIN_MPS_LINE, messages_) << cardNumber_ << card_ << CoinMessageEol; for (i = COIN_ROW_SECTION; i < COIN_UNKNOWN_SECTION; i++) { if (!strncmp(card_, section[i], strlen(section[i]))) { break; } } position_ = card_; eol_ = card_; section_ = static_cast< COINSectionType >(i); break; } } return section_; } CoinMpsCardReader::CoinMpsCardReader(CoinFileInput *input, CoinMpsIO *reader) { memset(card_, 0, MAX_CARD_LENGTH); position_ = card_; eol_ = card_; mpsType_ = COIN_UNKNOWN_MPS_TYPE; memset(rowName_, 0, COIN_MAX_FIELD_LENGTH); memset(columnName_, 0, COIN_MAX_FIELD_LENGTH); value_ = 0.0; input_ = input; section_ = COIN_EOF_SECTION; cardNumber_ = 0; freeFormat_ = false; ieeeFormat_ = 0; eightChar_ = true; reader_ = reader; handler_ = reader_->messageHandler(); messages_ = reader_->messages(); memset(valueString_, 0, COIN_MAX_FIELD_LENGTH); stringsAllowed_ = false; } // ~CoinMpsCardReader. Destructor CoinMpsCardReader::~CoinMpsCardReader() { delete input_; } void CoinMpsCardReader::strcpyAndCompress(char *to, const char *from) { int n = static_cast< int >(strlen(from)); int i; int nto = 0; for (i = 0; i < n; i++) { if (from[i] != ' ') { to[nto++] = from[i]; } } if (!nto) to[nto++] = ' '; to[nto] = '\0'; } // nextField COINSectionType CoinMpsCardReader::nextField() { mpsType_ = COIN_BLANK_COLUMN; // find next non blank character char *next = position_; while (next != eol_) { if (*next == ' ' || *next == '\t') { next++; } else { break; } } bool gotCard; if (next == eol_) { gotCard = false; } else { gotCard = true; } while (!gotCard) { // need new image if (cleanCard()) { return COIN_EOF_SECTION; } if (card_[0] == ' ' || card_[0] == '\0') { // not a section or comment position_ = card_; eol_ = card_ + strlen(card_); // get mps type and column name // scan to first non blank next = card_; while (next != eol_) { if (*next == ' ' || *next == '\t') { next++; } else { break; } } if (next != eol_) { char *nextBlank = nextBlankOr(next); int nchar; if (nextBlank) { nchar = static_cast< int >(nextBlank - next); } else { nchar = -1; } mpsType_ = COIN_BLANK_COLUMN; // special coding if RHS or RANGES, not free format and blanks if ((section_ != COIN_RHS_SECTION && section_ != COIN_RANGES_SECTION) || freeFormat_ || strncmp(card_ + 4, " ", 8)) { // if columns section only look for first field if MARKER if (section_ == COIN_COLUMN_SECTION && !strstr(next, "'MARKER'")) nchar = -1; if (section_ == COIN_SOS_SECTION) { if (!strncmp(card_, " S1", 3)) { mpsType_ = COIN_S1_BOUND; break; } else if (!strncmp(card_, " S2", 3)) { mpsType_ = COIN_S2_BOUND; break; } } if (nchar == allowedLength[section_]) { //could be a type int i; for (i = startType[section_]; i < endType[section_]; i++) { if (!strncmp(next, mpsTypes[i], nchar)) { mpsType_ = static_cast< COINMpsType >(i); break; } } if (mpsType_ != COIN_BLANK_COLUMN) { //we know all we need so we can skip over next = nextBlank; while (next != eol_) { if (*next == ' ' || *next == '\t') { next++; } else { break; } } if (next == eol_) { // error position_ = eol_; mpsType_ = COIN_UNKNOWN_MPS_TYPE; } else { nextBlank = nextBlankOr(next); } } else if (section_ == COIN_BOUNDS_SECTION) { // should have been something - but just fix LI problem // set to something illegal if (card_[0] == ' ' && card_[3] == ' ' && (card_[1] != ' ' || card_[2] != ' ')) { mpsType_ = COIN_S3_COLUMN; //we know all we need so we can skip over next = nextBlank; while (next != eol_) { if (*next == ' ' || *next == '\t') { next++; } else { break; } } if (next == eol_) { // error position_ = eol_; mpsType_ = COIN_UNKNOWN_MPS_TYPE; } else { nextBlank = nextBlankOr(next); } } } } if (mpsType_ != COIN_UNKNOWN_MPS_TYPE) { // special coding if BOUND, not free format and blanks if (section_ != COIN_BOUNDS_SECTION || freeFormat_ || strncmp(card_ + 4, " ", 8)) { char save = '?'; if (!freeFormat_ && eightChar_ && next == card_ + 4) { if (eol_ - next >= 8) { if (*(next + 8) != ' ' && *(next + 8) != '\0') { eightChar_ = false; } else { nextBlank = next + 8; } if (nextBlank) { save = *nextBlank; *nextBlank = '\0'; } } else { nextBlank = NULL; } } else { if (nextBlank) { save = *nextBlank; *nextBlank = '\0'; } } strcpyAndCompress(columnName_, next); if (nextBlank) { *nextBlank = save; // on to next next = nextBlank; } else { next = eol_; } } else { // blank bounds name strcpy(columnName_, " "); } while (next != eol_) { if (*next == ' ' || *next == '\t') { next++; } else { break; } } if (next == eol_) { // error unless row section or conic section position_ = eol_; value_ = -1.0e100; if (section_ != COIN_ROW_SECTION && section_ != COIN_CONIC_SECTION) mpsType_ = COIN_UNKNOWN_MPS_TYPE; else return section_; } else { nextBlank = nextBlankOr(next); //if (section_==COIN_CONIC_SECTION) } if (section_ != COIN_ROW_SECTION) { char save = '?'; if (!freeFormat_ && eightChar_ && next == card_ + 14) { if (eol_ - next >= 8) { if (*(next + 8) != ' ' && *(next + 8) != '\0') { eightChar_ = false; } else { nextBlank = next + 8; } save = *nextBlank; *nextBlank = '\0'; } else { nextBlank = NULL; } } else { if (nextBlank) { save = *nextBlank; *nextBlank = '\0'; } } strcpyAndCompress(rowName_, next); if (nextBlank) { *nextBlank = save; // on to next next = nextBlank; } else { next = eol_; } while (next != eol_) { if (*next == ' ' || *next == '\t') { next++; } else { break; } } // special coding for markers if (section_ == COIN_COLUMN_SECTION && !strncmp(rowName_, "'MARKER'", 8) && next != eol_) { if (!strncmp(next, "'INTORG'", 8)) { mpsType_ = COIN_INTORG; } else if (!strncmp(next, "'INTEND'", 8)) { mpsType_ = COIN_INTEND; } else if (!strncmp(next, "'SOSORG'", 8)) { if (mpsType_ == COIN_BLANK_COLUMN) mpsType_ = COIN_S1_COLUMN; } else if (!strncmp(next, "'SOSEND'", 8)) { mpsType_ = COIN_SOSEND; } else { mpsType_ = COIN_UNKNOWN_MPS_TYPE; } position_ = eol_; return section_; } if (next == eol_) { // error unless bounds or basis position_ = eol_; if (section_ != COIN_BOUNDS_SECTION) { if (section_ != COIN_BASIS_SECTION) mpsType_ = COIN_UNKNOWN_MPS_TYPE; value_ = -1.0e100; } else { value_ = 0.0; } } else { nextBlank = nextBlankOr(next); if (nextBlank) { save = *nextBlank; *nextBlank = '\0'; } char *after; value_ = osi_strtod(next, &after, ieeeFormat_); // see if error if (after > next) { if (nextBlank) { *nextBlank = save; position_ = nextBlank; } else { position_ = eol_; } } else { // error position_ = eol_; mpsType_ = COIN_UNKNOWN_MPS_TYPE; value_ = -1.0e100; } } } } } else { //blank name in RHS or RANGES strcpy(columnName_, " "); char save = '?'; if (!freeFormat_ && eightChar_ && next == card_ + 14) { if (eol_ - next >= 8) { if (*(next + 8) != ' ' && *(next + 8) != '\0') { eightChar_ = false; } else { nextBlank = next + 8; } save = *nextBlank; *nextBlank = '\0'; } else { nextBlank = NULL; } } else { if (nextBlank) { save = *nextBlank; *nextBlank = '\0'; } } strcpyAndCompress(rowName_, next); if (nextBlank) { *nextBlank = save; // on to next next = nextBlank; } else { next = eol_; } while (next != eol_) { if (*next == ' ' || *next == '\t') { next++; } else { break; } } if (next == eol_) { // error position_ = eol_; value_ = -1.0e100; mpsType_ = COIN_UNKNOWN_MPS_TYPE; } else { nextBlank = nextBlankOr(next); value_ = -1.0e100; if (nextBlank) { save = *nextBlank; *nextBlank = '\0'; } char *after; value_ = osi_strtod(next, &after, ieeeFormat_); // see if error if (after > next) { if (nextBlank) { *nextBlank = save; position_ = nextBlank; } else { position_ = eol_; } } else { // error position_ = eol_; mpsType_ = COIN_UNKNOWN_MPS_TYPE; value_ = -1.0e100; } } } } else { // blank continue; } return section_; } else if (card_[0] != '*') { // not a comment int i; handler_->message(COIN_MPS_LINE, messages_) << cardNumber_ << card_ << CoinMessageEol; for (i = COIN_ROW_SECTION; i < COIN_UNKNOWN_SECTION; i++) { if (!strncmp(card_, section[i], strlen(section[i]))) { break; } } position_ = card_; eol_ = card_; section_ = static_cast< COINSectionType >(i); return section_; } else { // comment } } // we only get here for second field (we could even allow more???) { char save = '?'; char *nextBlank = nextBlankOr(next); if (!freeFormat_ && eightChar_ && next == card_ + 39) { if (eol_ - next >= 8) { if (*(next + 8) != ' ' && *(next + 8) != '\0') { eightChar_ = false; } else { nextBlank = next + 8; } save = *nextBlank; *nextBlank = '\0'; } else { nextBlank = NULL; } } else { if (nextBlank) { save = *nextBlank; *nextBlank = '\0'; } } strcpyAndCompress(rowName_, next); // on to next if (nextBlank) { *nextBlank = save; next = nextBlank; } else { next = eol_; } while (next != eol_) { if (*next == ' ' || *next == '\t') { next++; } else { break; } } if (next == eol_ && section_ != COIN_SOS_SECTION) { // error position_ = eol_; mpsType_ = COIN_UNKNOWN_MPS_TYPE; } else { nextBlank = nextBlankOr(next); } if (nextBlank) { save = *nextBlank; *nextBlank = '\0'; } //value_ = -1.0e100; char *after; value_ = osi_strtod(next, &after, ieeeFormat_); // see if error if (after > next) { if (nextBlank) { *nextBlank = save; position_ = nextBlank; } else { position_ = eol_; } } else { // error position_ = eol_; if (mpsType_ != COIN_S1_BOUND && mpsType_ != COIN_S2_BOUND) mpsType_ = COIN_UNKNOWN_MPS_TYPE; value_ = -1.0e100; } } return section_; } static char * nextNonBlank(char *image) { while (1) { if (*image != ' ' && *image != '\t') break; else image++; } if (*image == '\0') image = NULL; return image; } /** Gets next field for .gms file and returns type. -1 - EOF 0 - what we expected (and processed so pointer moves past) 1 - not what we expected 2 - equation type when expecting value name pair leading blanks always ignored input types 0 - anything - stops on non blank card 1 - name (in columnname) 2 - value 3 - value name pair 4 - equation type 5 - ; */ int CoinMpsCardReader::nextGmsField(int expectedType) { int returnCode = -1; bool good = false; switch (expectedType) { case 0: // 0 - May get * in first column or anything if (cleanCard()) return -1; while (!strlen(card_)) { if (cleanCard()) return -1; } eol_ = card_ + strlen(card_); position_ = card_; returnCode = 0; break; case 1: // 1 - expect name while (!good) { position_ = nextNonBlank(position_); if (position_ == NULL) { if (cleanCard()) return -1; eol_ = card_ + strlen(card_); position_ = card_; } else { good = true; char nextChar = *position_; if ((nextChar >= 'a' && nextChar <= 'z') || (nextChar >= 'A' && nextChar <= 'Z')) { returnCode = 0; char *next = position_; while (*next != ',' && *next != ';' && *next != '=' && *next != ' ' && *next != '\t' && *next != '-' && *next != '+' && *next >= 32) next++; if (next) { int length = static_cast< int >(next - position_); strncpy(columnName_, position_, length); columnName_[length] = '\0'; } else { strcpy(columnName_, position_); next = eol_; } position_ = next; } else { returnCode = 1; } } } break; case 2: // 2 - expect value while (!good) { position_ = nextNonBlank(position_); if (position_ == NULL) { if (cleanCard()) return -1; eol_ = card_ + strlen(card_); position_ = card_; } else { good = true; char nextChar = *position_; if ((nextChar >= '0' && nextChar <= '9') || nextChar == '+' || nextChar == '-') { returnCode = 0; char *next = position_; while (*next != ',' && *next != ';' && *next != '=' && *next != ' ' && *next != '\t' && *next >= 32) next++; if (next) { int length = static_cast< int >(next - position_); strncpy(rowName_, position_, length); rowName_[length] = '\0'; } else { strcpy(rowName_, position_); next = eol_; } value_ = -1.0e100; sscanf(rowName_, "%lg", &value_); position_ = next; } else { returnCode = 1; } } } break; case 3: // 3 - expect value name pair while (!good) { position_ = nextNonBlank(position_); char *savePosition = position_; if (position_ == NULL) { if (cleanCard()) return -1; eol_ = card_ + strlen(card_); position_ = card_; savePosition = position_; } else { good = true; value_ = 1.0; char nextChar = *position_; returnCode = 0; if ((nextChar >= '0' && nextChar <= '9') || nextChar == '+' || nextChar == '-') { char *next; int put = 0; if (nextChar == '+' || nextChar == '-') { rowName_[0] = nextChar; put = 1; next = position_ + 1; while (*next == ' ' || *next == '\t') next++; if ((*next >= 'a' && *next <= 'z') || (*next >= 'A' && *next <= 'Z')) { // name - set value if (nextChar == '+') value_ = 1.0; else value_ = -1.0; position_ = next; } else if ((*next >= '0' && *next <= '9') || *next == '+' || *next == '-') { rowName_[put++] = *next; next++; while (*next != ' ' && *next != '\t' && *next != '*') { rowName_[put++] = *next; next++; } assert(*next == '*'); next++; rowName_[put] = '\0'; value_ = -1.0e100; sscanf(rowName_, "%lg", &value_); position_ = next; } else { returnCode = 1; } } else { // number char *next = nextBlankOr(position_); // but could be * char *next2 = strchr(position_, '*'); if (next2 && next2 - position_ < next - position_) { next = next2; } int length = static_cast< int >(next - position_); strncpy(rowName_, position_, length); rowName_[length] = '\0'; value_ = -1.0e100; sscanf(rowName_, "%lg", &value_); position_ = next; } } else if ((nextChar >= 'a' && nextChar <= 'z') || (nextChar >= 'A' && nextChar <= 'Z')) { // name so take value as 1.0 } else if (nextChar == '=') { returnCode = 2; position_ = savePosition; } else { returnCode = 1; position_ = savePosition; } if ((*position_) == '*') position_++; position_ = nextNonBlank(position_); if (!returnCode) { char nextChar = *position_; if ((nextChar >= 'a' && nextChar <= 'z') || (nextChar >= 'A' && nextChar <= 'Z')) { char *next = nextBlankOr(position_); if (next) { int length = static_cast< int >(next - position_); strncpy(columnName_, position_, length); columnName_[length] = '\0'; } else { strcpy(columnName_, position_); next = eol_; } position_ = next; } else { returnCode = 1; position_ = savePosition; } } } } break; case 4: // 4 - expect equation type while (!good) { position_ = nextNonBlank(position_); if (position_ == NULL) { if (cleanCard()) return -1; eol_ = card_ + strlen(card_); position_ = card_; } else { good = true; char nextChar = *position_; if (nextChar == '=') { returnCode = 0; char *next = nextBlankOr(position_); int length = static_cast< int >(next - position_); strncpy(rowName_, position_, length); rowName_[length] = '\0'; position_ = next; } else { returnCode = 1; } } } break; case 5: // 5 - ; expected while (!good) { position_ = nextNonBlank(position_); if (position_ == NULL) { if (cleanCard()) return -1; eol_ = card_ + strlen(card_); position_ = card_; } else { good = true; char nextChar = *position_; if (nextChar == ';') { returnCode = 0; char *next = nextBlankOr(position_); if (!next) next = eol_; position_ = next; } else { returnCode = 1; } } } break; } return returnCode; } //############################################################################# namespace { const int mmult[] = { 262139, 259459, 256889, 254291, 251701, 249133, 246709, 244247, 241667, 239179, 236609, 233983, 231289, 228859, 226357, 223829, 221281, 218849, 216319, 213721, 211093, 208673, 206263, 203773, 201233, 198637, 196159, 193603, 191161, 188701, 186149, 183761, 181303, 178873, 176389, 173897, 171469, 169049, 166471, 163871, 161387, 158941, 156437, 153949, 151531, 149159, 146749, 144299, 141709, 139369, 136889, 134591, 132169, 129641, 127343, 124853, 122477, 120163, 117757, 115361, 112979, 110567, 108179, 105727, 103387, 101021, 98639, 96179, 93911, 91583, 89317, 86939, 84521, 82183, 79939, 77587, 75307, 72959, 70793, 68447, 66103 }; int hash(const char *name, int maxsiz, int length) { int n = 0; int j; for (j = 0; j < length; ++j) { int iname = name[j]; n += mmult[j] * iname; } return (abs(n) % maxsiz); /* integer abs */ } } // end file-local namespace // Define below if you are reading a Cnnnnnn file // Will not do row names (for electricfence) //#define NONAMES #ifndef NONAMES // startHash. Creates hash list for names void CoinMpsIO::startHash(char **names, const COINColumnIndex number, int section) { names_[section] = names; numberHash_[section] = number; startHash(section); } void CoinMpsIO::startHash(int section) const { char **names = names_[section]; COINColumnIndex number = numberHash_[section]; COINColumnIndex i; COINColumnIndex maxhash = 4 * number; COINColumnIndex ipos, iput; //hash_=(CoinHashLink *) malloc(maxhash*sizeof(CoinHashLink)); hash_[section] = new CoinHashLink[maxhash]; CoinHashLink *hashThis = hash_[section]; for (i = 0; i < maxhash; i++) { hashThis[i].index = -1; hashThis[i].next = -1; } /* * Initialize the hash table. Only the index of the first name that * hashes to a value is entered in the table; subsequent names that * collide with it are not entered. */ for (i = 0; i < number; ++i) { char *thisName = names[i]; int length = static_cast< int >(strlen(thisName)); ipos = hash(thisName, maxhash, length); if (hashThis[ipos].index == -1) { hashThis[ipos].index = i; } } /* * Now take care of the names that collided in the preceding loop, * by finding some other entry in the table for them. * Since there are as many entries in the table as there are names, * there must be room for them. */ iput = -1; for (i = 0; i < number; ++i) { char *thisName = names[i]; int length = static_cast< int >(strlen(thisName)); ipos = hash(thisName, maxhash, length); while (1) { COINColumnIndex j1 = hashThis[ipos].index; if (j1 == i) break; else { char *thisName2 = names[j1]; if (strcmp(thisName, thisName2) == 0) { printf("** duplicate name %s\n", names[i]); break; } else { COINColumnIndex k = hashThis[ipos].next; if (k == -1) { while (1) { ++iput; if (iput > number) { printf("** too many names\n"); break; } if (hashThis[iput].index == -1) { break; } } hashThis[ipos].next = iput; hashThis[iput].index = i; break; } else { ipos = k; /* nothing worked - try it again */ } } } } } } // stopHash. Deletes hash storage void CoinMpsIO::stopHash(int section) { delete[] hash_[section]; hash_[section] = NULL; } // findHash. -1 not found COINColumnIndex CoinMpsIO::findHash(const char *name, int section) const { COINColumnIndex found = -1; char **names = names_[section]; CoinHashLink *hashThis = hash_[section]; COINColumnIndex maxhash = 4 * numberHash_[section]; COINColumnIndex ipos; /* default if we don't find anything */ if (!maxhash) return -1; int length = static_cast< int >(strlen(name)); ipos = hash(name, maxhash, length); while (1) { COINColumnIndex j1 = hashThis[ipos].index; if (j1 >= 0) { char *thisName2 = names[j1]; if (strcmp(name, thisName2) != 0) { COINColumnIndex k = hashThis[ipos].next; if (k != -1) ipos = k; else break; } else { found = j1; break; } } else { found = -1; break; } } return found; } #else // Version when we know images are C/Rnnnnnn // startHash. Creates hash list for names void CoinMpsIO::startHash(char **names, const COINColumnIndex number, int section) { numberHash_[section] = number; names_[section] = names; } void CoinMpsIO::startHash(int section) const { } // stopHash. Deletes hash storage void CoinMpsIO::stopHash(int section) { } // findHash. -1 not found COINColumnIndex CoinMpsIO::findHash(const char *name, int section) const { COINColumnIndex found = atoi(name + 1); if (!strcmp(name, "OBJROW")) found = numberHash_[section] - 1; return found; } #endif //------------------------------------------------------------------ // Get value for infinity //------------------------------------------------------------------ double CoinMpsIO::getInfinity() const { return infinity_; } //------------------------------------------------------------------ // Set value for infinity //------------------------------------------------------------------ void CoinMpsIO::setInfinity(double value) { if (value >= 1.020) { infinity_ = value; } else { handler_->message(COIN_MPS_ILLEGAL, messages_) << "infinity" << value << CoinMessageEol; } } // Set file name void CoinMpsIO::setFileName(const char *name) { free(fileName_); fileName_ = CoinStrdup(name); } // Get file name const char *CoinMpsIO::getFileName() const { return fileName_; } // Deal with filename - +1 if new, 0 if same as before, -1 if error int CoinMpsIO::dealWithFileName(const char *filename, const char *extension, CoinFileInput *&input) { if (input != 0) { delete input; input = 0; } int goodFile = 0; if (!fileName_ || (filename != NULL && strcmp(filename, fileName_))) { if (filename == NULL) { handler_->message(COIN_MPS_FILE, messages_) << "NULL" << CoinMessageEol; return -1; } goodFile = -1; // looks new name char newName[400]; if (strcmp(filename, "stdin") && strcmp(filename, "-")) { if (extension && strlen(extension)) { // There was an extension - but see if user gave .xxx int i = static_cast< int >(strlen(filename)) - 1; strcpy(newName, filename); bool foundDot = false; for (; i >= 0; i--) { char character = filename[i]; if (character == '/' || character == '\\') { break; } else if (character == '.') { foundDot = true; break; } } if (!foundDot) { strcat(newName, "."); strcat(newName, extension); } } else { // no extension strcpy(newName, filename); } } else { strcpy(newName, "stdin"); } // See if new name if (fileName_ && !strcmp(newName, fileName_)) { // old name return 0; } else { // new file free(fileName_); fileName_ = CoinStrdup(newName); if (strcmp(fileName_, "stdin")) { // be clever with extensions here std::string fname = fileName_; bool readable = fileCoinReadable(fname); if (!readable) goodFile = -1; else { input = CoinFileInput::create(fname); goodFile = 1; } } else { // only plain file at present input = CoinFileInput::create("stdin"); goodFile = 1; } } } else { // same as before // reset section ? goodFile = 0; } if (goodFile < 0) handler_->message(COIN_MPS_FILE, messages_) << fileName_ << CoinMessageEol; return goodFile; } /* objective offset - this is RHS entry for objective row */ double CoinMpsIO::objectiveOffset() const { return objectiveOffset_; } /* Prior to June 2007, this was set to 1e30. But that causes problems in some of the cut generators --- they need to see finite infinity in order to work properly. */ #define MAX_INTEGER COIN_DBL_MAX // Sets default upper bound for integer variables void CoinMpsIO::setDefaultBound(int value) { if (value >= 1 && value <= MAX_INTEGER) { defaultBound_ = value; } else { handler_->message(COIN_MPS_ILLEGAL, messages_) << "default integer bound" << value << CoinMessageEol; } } // gets default upper bound for integer variables int CoinMpsIO::getDefaultBound() const { return defaultBound_; } //------------------------------------------------------------------ // Read mps files //------------------------------------------------------------------ int CoinMpsIO::readMps(const char *filename, const char *extension) { // Deal with filename - +1 if new, 0 if same as before, -1 if error CoinFileInput *input = 0; int returnCode = dealWithFileName(filename, extension, input); if (returnCode < 0) { return -1; } else if (returnCode > 0) { delete cardReader_; cardReader_ = new CoinMpsCardReader(input, this); } if (!extension || (strcmp(extension, "gms") && !strstr(filename, ".gms"))) { return readMps(); } else { int numberSets = 0; CoinSet **sets = NULL; int returnCode = readGms(numberSets, sets); for (int i = 0; i < numberSets; i++) delete sets[i]; delete[] sets; return returnCode; } } int CoinMpsIO::readMps(const char *filename, const char *extension, int &numberSets, CoinSet **&sets) { // Deal with filename - +1 if new, 0 if same as before, -1 if error CoinFileInput *input = 0; int returnCode = dealWithFileName(filename, extension, input); if (returnCode < 0) { return -1; } else if (returnCode > 0) { delete cardReader_; cardReader_ = new CoinMpsCardReader(input, this); } return readMps(numberSets, sets); } int CoinMpsIO::readMps() { int numberSets = 0; CoinSet **sets = NULL; int returnCode = readMps(numberSets, sets); for (int i = 0; i < numberSets; i++) delete sets[i]; delete[] sets; return returnCode; } int CoinMpsIO::readMps(int &numberSets, CoinSet **&sets) { bool ifmps; cardReader_->readToNextSection(); if (cardReader_->whichSection() == COIN_NAME_SECTION) { ifmps = true; // save name of section free(problemName_); problemName_ = CoinStrdup(cardReader_->columnName()); } else if (cardReader_->whichSection() == COIN_UNKNOWN_SECTION) { handler_->message(COIN_MPS_BADFILE1, messages_) << cardReader_->card() << 1 << fileName_ << CoinMessageEol; if (cardReader_->fileInput()->getReadType() != "plain") handler_->message(COIN_MPS_BADFILE2, messages_) << cardReader_->fileInput()->getReadType() << CoinMessageEol; return -2; } else if (cardReader_->whichSection() != COIN_EOF_SECTION) { // save name of section free(problemName_); problemName_ = CoinStrdup(cardReader_->card()); ifmps = false; } else { handler_->message(COIN_MPS_EOF, messages_) << fileName_ << CoinMessageEol; return -3; } CoinBigIndex *start; COINRowIndex *row; double *element; objectiveOffset_ = 0.0; int numberErrors = 0; int i; if (ifmps) { // mps file - always read in free format bool gotNrow = false; // allow strings ? if (allowStringElements_) cardReader_->setStringsAllowed(); //get ROWS cardReader_->nextField(); // Fudge for what ever code has OBJSENSE if (!strncmp(cardReader_->card(), "OBJSENSE", 8)) { cardReader_->nextField(); int i; const char *thisCard = cardReader_->card(); int direction = 0; for (i = 0; i < 20; i++) { if (thisCard[i] != ' ') { if (!strncmp(thisCard + i, "MAX", 3)) direction = -1; else if (!strncmp(thisCard + i, "MIN", 3)) direction = 1; break; } } if (!direction) printf("No MAX/MIN found after OBJSENSE\n"); else printf("%s found after OBJSENSE - Coin ignores\n", (direction > 0 ? "MIN" : "MAX")); cardReader_->nextField(); } if (cardReader_->whichSection() != COIN_ROW_SECTION) { handler_->message(COIN_MPS_BADIMAGE, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors + 100000; } //use malloc etc as I don't know how to do realloc in C++ numberRows_ = 0; numberColumns_ = 0; numberElements_ = 0; COINRowIndex maxRows = 1000; COINMpsType *rowType = reinterpret_cast< COINMpsType * >(malloc(maxRows * sizeof(COINMpsType))); char **rowName = reinterpret_cast< char ** >(malloc(maxRows * sizeof(char *))); // for discarded free rows COINRowIndex maxFreeRows = 100; COINRowIndex numberOtherFreeRows = 0; char **freeRowName = reinterpret_cast< char ** >(malloc(maxFreeRows * sizeof(char *))); while (cardReader_->nextField() == COIN_ROW_SECTION) { switch (cardReader_->mpsType()) { case COIN_N_ROW: if (!gotNrow) { gotNrow = true; // save name of section free(objectiveName_); objectiveName_ = CoinStrdup(cardReader_->columnName()); } else { // add to discard list if (numberOtherFreeRows == maxFreeRows) { maxFreeRows = (3 * maxFreeRows) / 2 + 100; freeRowName = reinterpret_cast< char ** >(realloc(freeRowName, maxFreeRows * sizeof(char *))); } freeRowName[numberOtherFreeRows] = CoinStrdup(cardReader_->columnName()); numberOtherFreeRows++; } break; case COIN_E_ROW: case COIN_L_ROW: case COIN_G_ROW: if (numberRows_ == maxRows) { maxRows = (3 * maxRows) / 2 + 1000; rowType = reinterpret_cast< COINMpsType * >(realloc(rowType, maxRows * sizeof(COINMpsType))); rowName = reinterpret_cast< char ** >(realloc(rowName, maxRows * sizeof(char *))); } rowType[numberRows_] = cardReader_->mpsType(); #ifndef NONAMES rowName[numberRows_] = CoinStrdup(cardReader_->columnName()); #endif numberRows_++; break; default: numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_BADIMAGE, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } } if (cardReader_->whichSection() != COIN_COLUMN_SECTION) { handler_->message(COIN_MPS_BADIMAGE, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors + 100000; } //assert ( gotNrow ); if (numberRows_) rowType = reinterpret_cast< COINMpsType * >(realloc(rowType, numberRows_ * sizeof(COINMpsType))); else rowType = reinterpret_cast< COINMpsType * >(realloc(rowType, sizeof(COINMpsType))); // put objective and other free rows at end rowName = reinterpret_cast< char ** >(realloc(rowName, (numberRows_ + 1 + numberOtherFreeRows) * sizeof(char *))); #ifndef NONAMES rowName[numberRows_] = CoinStrdup(objectiveName_); memcpy(rowName + numberRows_ + 1, freeRowName, numberOtherFreeRows * sizeof(char *)); // now we can get rid of this array free(freeRowName); #else memset(rowName, 0, (numberRows_ + 1) * sizeof(char **)); #endif startHash(rowName, numberRows_ + 1 + numberOtherFreeRows, 0); COINColumnIndex maxColumns = 1000 + numberRows_ / 5; CoinBigIndex maxElements = 5000 + numberRows_ / 2; COINMpsType *columnType = reinterpret_cast< COINMpsType * >(malloc(maxColumns * sizeof(COINMpsType))); char **columnName = reinterpret_cast< char ** >(malloc(maxColumns * sizeof(char *))); objective_ = reinterpret_cast< double * >(malloc(maxColumns * sizeof(double))); start = reinterpret_cast< CoinBigIndex * >(malloc((maxColumns + 1) * sizeof(CoinBigIndex))); row = reinterpret_cast< COINRowIndex * >(malloc(maxElements * sizeof(COINRowIndex))); element = reinterpret_cast< double * >(malloc(maxElements * sizeof(double))); // for duplicates CoinBigIndex *rowUsed = new CoinBigIndex[numberRows_]; for (i = 0; i < numberRows_; i++) { rowUsed[i] = -1; } bool objUsed = false; numberElements_ = 0; char lastColumn[200]; memset(lastColumn, '\0', 200); COINColumnIndex column = -1; bool inIntegerSet = false; COINColumnIndex numberIntegers = 0; while (cardReader_->nextField() == COIN_COLUMN_SECTION) { switch (cardReader_->mpsType()) { case COIN_BLANK_COLUMN: if (strcmp(lastColumn, cardReader_->columnName())) { // new column // reset old column and take out tiny if (numberColumns_) { objUsed = false; CoinBigIndex i; CoinBigIndex k = start[column]; for (i = k; i < numberElements_; i++) { COINRowIndex irow = row[i]; #if 0 if ( fabs ( element[i] ) > smallElement_ ) { element[k++] = element[i]; } #endif rowUsed[irow] = -1; } //numberElements_ = k; } column = numberColumns_; if (numberColumns_ == maxColumns) { maxColumns = (3 * maxColumns) / 2 + 1000; columnType = reinterpret_cast< COINMpsType * >(realloc(columnType, maxColumns * sizeof(COINMpsType))); columnName = reinterpret_cast< char ** >(realloc(columnName, maxColumns * sizeof(char *))); objective_ = reinterpret_cast< double * >(realloc(objective_, maxColumns * sizeof(double))); start = reinterpret_cast< CoinBigIndex * >(realloc(start, (maxColumns + 1) * sizeof(CoinBigIndex))); } if (!inIntegerSet) { columnType[column] = COIN_UNSET_BOUND; } else { columnType[column] = COIN_INTORG; numberIntegers++; } #ifndef NONAMES columnName[column] = CoinStrdup(cardReader_->columnName()); #else columnName[column] = NULL; #endif strcpy(lastColumn, cardReader_->columnName()); objective_[column] = 0.0; start[column] = numberElements_; numberColumns_++; } if (fabs(cardReader_->value()) > smallElement_) { if (numberElements_ == maxElements) { maxElements = (3 * maxElements) / 2 + 1000; row = reinterpret_cast< COINRowIndex * >(realloc(row, maxElements * sizeof(COINRowIndex))); element = reinterpret_cast< double * >(realloc(element, maxElements * sizeof(double))); } // get row number COINRowIndex irow = findHash(cardReader_->rowName(), 0); if (irow >= 0) { double value = cardReader_->value(); // check for duplicates if (irow == numberRows_) { // objective if (objUsed) { numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_DUPOBJ, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } else { objUsed = true; } value += objective_[column]; if (fabs(value) <= smallElement_) value = 0.0; objective_[column] = value; } else if (irow < numberRows_) { // other free rows will just be discarded so won't get here if (rowUsed[irow] >= 0) { element[rowUsed[irow]] += value; numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_DUPROW, messages_) << cardReader_->rowName() << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } else { row[numberElements_] = irow; element[numberElements_] = value; rowUsed[irow] = numberElements_; numberElements_++; } } } else { numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_NOMATCHROW, messages_) << cardReader_->rowName() << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } } else if (cardReader_->value() == STRING_VALUE) { // tiny element - string const char *s = cardReader_->valueString(); assert(*s == '='); // get row number COINRowIndex irow = findHash(cardReader_->rowName(), 0); if (irow >= 0) { addString(irow, column, s + 1); } else { numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_NOMATCHROW, messages_) << cardReader_->rowName() << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } } break; case COIN_INTORG: inIntegerSet = true; break; case COIN_INTEND: inIntegerSet = false; break; case COIN_S1_COLUMN: case COIN_S2_COLUMN: case COIN_S3_COLUMN: case COIN_SOSEND: std::cout << "** code sos etc later" << std::endl; abort(); break; default: numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_BADIMAGE, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } } start[numberColumns_] = numberElements_; delete[] rowUsed; if (cardReader_->whichSection() != COIN_RHS_SECTION) { handler_->message(COIN_MPS_BADIMAGE, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors + 100000; } if (numberColumns_) { columnType = reinterpret_cast< COINMpsType * >(realloc(columnType, numberColumns_ * sizeof(COINMpsType))); columnName = reinterpret_cast< char ** >(realloc(columnName, numberColumns_ * sizeof(char *))); objective_ = reinterpret_cast< double * >(realloc(objective_, numberColumns_ * sizeof(double))); } else { columnType = reinterpret_cast< COINMpsType * >(realloc(columnType, sizeof(COINMpsType))); columnName = reinterpret_cast< char ** >(realloc(columnName, sizeof(char *))); objective_ = reinterpret_cast< double * >(realloc(objective_, sizeof(double))); } start = reinterpret_cast< CoinBigIndex * >(realloc(start, (numberColumns_ + 1) * sizeof(CoinBigIndex))); if (numberElements_) { row = reinterpret_cast< COINRowIndex * >(realloc(row, numberElements_ * sizeof(COINRowIndex))); element = reinterpret_cast< double * >(realloc(element, numberElements_ * sizeof(double))); } else { row = reinterpret_cast< COINRowIndex * >(realloc(row, sizeof(COINRowIndex))); element = reinterpret_cast< double * >(realloc(element, sizeof(double))); } if (numberRows_) { rowlower_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); rowupper_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); } else { rowlower_ = reinterpret_cast< double * >(malloc(sizeof(double))); rowupper_ = reinterpret_cast< double * >(malloc(sizeof(double))); } for (i = 0; i < numberRows_; i++) { rowlower_[i] = -infinity_; rowupper_[i] = infinity_; } objUsed = false; memset(lastColumn, '\0', 200); bool gotRhs = false; // need coding for blank rhs while (cardReader_->nextField() == COIN_RHS_SECTION) { COINRowIndex irow; switch (cardReader_->mpsType()) { case COIN_BLANK_COLUMN: if (strcmp(lastColumn, cardReader_->columnName())) { // skip rest if got a rhs if (gotRhs) { while (cardReader_->nextField() == COIN_RHS_SECTION) { } break; } else { gotRhs = true; strcpy(lastColumn, cardReader_->columnName()); // save name of section free(rhsName_); rhsName_ = CoinStrdup(cardReader_->columnName()); } } // get row number irow = findHash(cardReader_->rowName(), 0); if (irow >= 0) { double value = cardReader_->value(); // check for duplicates if (irow == numberRows_) { // objective if (objUsed) { numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_DUPOBJ, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } else { objUsed = true; } if (value == STRING_VALUE) { value = 0.0; // tiny element - string const char *s = cardReader_->valueString(); assert(*s == '='); addString(irow, numberColumns_, s + 1); } objectiveOffset_ += value; } else if (irow < numberRows_) { if (rowlower_[irow] != -infinity_) { numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_DUPROW, messages_) << cardReader_->rowName() << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } else { if (value == STRING_VALUE) { value = 0.0; // tiny element - string const char *s = cardReader_->valueString(); assert(*s == '='); addString(irow, numberColumns_, s + 1); } rowlower_[irow] = value; } } } else { numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_NOMATCHROW, messages_) << cardReader_->rowName() << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } break; default: numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_BADIMAGE, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } } if (cardReader_->whichSection() == COIN_RANGES_SECTION) { memset(lastColumn, '\0', 200); bool gotRange = false; COINRowIndex irow; // need coding for blank range while (cardReader_->nextField() == COIN_RANGES_SECTION) { switch (cardReader_->mpsType()) { case COIN_BLANK_COLUMN: if (strcmp(lastColumn, cardReader_->columnName())) { // skip rest if got a range if (gotRange) { while (cardReader_->nextField() == COIN_RANGES_SECTION) { } break; } else { gotRange = true; strcpy(lastColumn, cardReader_->columnName()); // save name of section free(rangeName_); rangeName_ = CoinStrdup(cardReader_->columnName()); } } // get row number irow = findHash(cardReader_->rowName(), 0); if (irow >= 0) { double value = cardReader_->value(); // check for duplicates if (irow == numberRows_) { // objective numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_DUPOBJ, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } else { if (rowupper_[irow] != infinity_) { numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_DUPROW, messages_) << cardReader_->rowName() << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } else { rowupper_[irow] = value; } } } else { numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_NOMATCHROW, messages_) << cardReader_->rowName() << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } break; default: numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_BADIMAGE, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } } } stopHash(0); // massage ranges { COINRowIndex irow; for (irow = 0; irow < numberRows_; irow++) { double lo = rowlower_[irow]; double up = rowupper_[irow]; double up2 = rowupper_[irow]; //range switch (rowType[irow]) { case COIN_E_ROW: if (lo == -infinity_) lo = 0.0; if (up == infinity_) { up = lo; } else if (up > 0.0) { up += lo; } else { up = lo; lo += up2; } break; case COIN_L_ROW: if (lo == -infinity_) { up = 0.0; } else { up = lo; lo = -infinity_; } if (up2 != infinity_) { lo = up - fabs(up2); } break; case COIN_G_ROW: if (lo == -infinity_) { lo = 0.0; up = infinity_; } else { up = infinity_; } if (up2 != infinity_) { up = lo + fabs(up2); } break; default: abort(); } rowlower_[irow] = lo; rowupper_[irow] = up; } } free(rowType); // default bounds if (numberColumns_) { collower_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); colupper_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); } else { collower_ = reinterpret_cast< double * >(malloc(sizeof(double))); colupper_ = reinterpret_cast< double * >(malloc(sizeof(double))); } for (i = 0; i < numberColumns_; i++) { collower_[i] = 0.0; colupper_[i] = infinity_; } // set up integer region just in case if (numberColumns_) integerType_ = reinterpret_cast< char * >(malloc(numberColumns_ * sizeof(char))); else integerType_ = reinterpret_cast< char * >(malloc(sizeof(char))); for (column = 0; column < numberColumns_; column++) { if (columnType[column] == COIN_INTORG) { columnType[column] = COIN_UNSET_BOUND; integerType_[column] = 1; } else { integerType_[column] = 0; } } // start hash even if no bound section - to make sure names survive startHash(columnName, numberColumns_, 1); if (cardReader_->whichSection() == COIN_BOUNDS_SECTION) { memset(lastColumn, '\0', 200); bool gotBound = false; while (cardReader_->nextField() == COIN_BOUNDS_SECTION) { if (strcmp(lastColumn, cardReader_->columnName())) { // skip rest if got a bound if (gotBound) { while (cardReader_->nextField() == COIN_BOUNDS_SECTION) { } break; } else { gotBound = true; ; strcpy(lastColumn, cardReader_->columnName()); // save name of section free(boundName_); boundName_ = CoinStrdup(cardReader_->columnName()); } } // get column number COINColumnIndex icolumn = findHash(cardReader_->rowName(), 1); if (icolumn >= 0) { double value = cardReader_->value(); bool ifError = false; switch (cardReader_->mpsType()) { case COIN_UP_BOUND: if (value == -1.0e100) ifError = true; if (value == STRING_VALUE) { value = 1.0e10; // tiny element - string const char *s = cardReader_->valueString(); assert(*s == '='); addString(numberRows_ + 2, icolumn, s + 1); } if (columnType[icolumn] == COIN_UNSET_BOUND) { if (value < 0.0) { collower_[icolumn] = -infinity_; } } else if (columnType[icolumn] == COIN_LO_BOUND || columnType[icolumn] == COIN_LI_BOUND) { if (value < collower_[icolumn]) { ifError = true; } else if (value < collower_[icolumn] + smallElement_) { value = collower_[icolumn]; } } else if (columnType[icolumn] == COIN_MI_BOUND) { } else { ifError = true; } if (value > 1.0e25) value = infinity_; colupper_[icolumn] = value; if (columnType[icolumn] == COIN_UNSET_BOUND) { columnType[icolumn] = COIN_UP_BOUND; } else { columnType[icolumn] = COIN_BOTH_BOUNDS_SET; } break; case COIN_LO_BOUND: if (value == -1.0e100) ifError = true; if (value == STRING_VALUE) { value = -1.0e10; // tiny element - string const char *s = cardReader_->valueString(); assert(*s == '='); addString(numberRows_ + 1, icolumn, s + 1); } if (columnType[icolumn] == COIN_UNSET_BOUND) { } else if (columnType[icolumn] == COIN_UP_BOUND || columnType[icolumn] == COIN_SC_BOUND || columnType[icolumn] == COIN_UI_BOUND) { if (value > colupper_[icolumn]) { ifError = true; } else if (value > colupper_[icolumn] - smallElement_) { value = colupper_[icolumn]; } } else if (columnType[icolumn] == COIN_PL_BOUND) { } else { ifError = true; } if (value < -1.0e25) value = -infinity_; collower_[icolumn] = value; if (columnType[icolumn] == COIN_UNSET_BOUND) { columnType[icolumn] = COIN_LO_BOUND; } else { columnType[icolumn] = COIN_BOTH_BOUNDS_SET; } break; case COIN_FX_BOUND: if (value == -1.0e100) ifError = true; if (value == STRING_VALUE) { value = 0.0; // tiny element - string const char *s = cardReader_->valueString(); assert(*s == '='); addString(numberRows_ + 1, icolumn, s + 1); addString(numberRows_ + 2, icolumn, s + 1); } if (columnType[icolumn] == COIN_UNSET_BOUND) { } else if (columnType[icolumn] == COIN_FX_BOUND) { ifError = true; } else if (integerType_[icolumn]) { // Allow so people can easily put FX's at end double value2 = floor(value); if (fabs(value2 - value) > 1.0e-12 || value2 < collower_[icolumn] || value2 > colupper_[icolumn]) { ifError = true; } else { // take off integer list numberIntegers--; integerType_[icolumn] = 0; } } else { ifError = true; } collower_[icolumn] = value; colupper_[icolumn] = value; columnType[icolumn] = COIN_FX_BOUND; break; case COIN_FR_BOUND: if (columnType[icolumn] == COIN_UNSET_BOUND) { } else { ifError = true; } collower_[icolumn] = -infinity_; colupper_[icolumn] = infinity_; columnType[icolumn] = COIN_FR_BOUND; break; case COIN_MI_BOUND: if (columnType[icolumn] == COIN_UNSET_BOUND) { colupper_[icolumn] = COIN_DBL_MAX; } else if (columnType[icolumn] == COIN_UP_BOUND || columnType[icolumn] == COIN_UI_BOUND) { } else { ifError = true; } collower_[icolumn] = -infinity_; if (columnType[icolumn] == COIN_UNSET_BOUND) { columnType[icolumn] = COIN_MI_BOUND; } else { columnType[icolumn] = COIN_BOTH_BOUNDS_SET; } break; case COIN_PL_BOUND: // change to allow if no upper bound set //if ( columnType[icolumn] == COIN_UNSET_BOUND ) { if (colupper_[icolumn] == infinity_) { } else { ifError = true; } if (columnType[icolumn] == COIN_UNSET_BOUND) { columnType[icolumn] = COIN_PL_BOUND; } else { columnType[icolumn] = COIN_BOTH_BOUNDS_SET; } break; case COIN_UI_BOUND: if (value == STRING_VALUE) { value = 1.0e20; // tiny element - string const char *s = cardReader_->valueString(); assert(*s == '='); addString(numberRows_ + 2, icolumn, s + 1); } #if 0 if ( value == -1.0e100 ) ifError = true; if ( columnType[icolumn] == COIN_UNSET_BOUND ) { } else if ( columnType[icolumn] == COIN_LO_BOUND || columnType[icolumn] == COIN_LI_BOUND) { if ( value < collower_[icolumn] ) { ifError = true; } else if ( value < collower_[icolumn] + smallElement_ ) { value = collower_[icolumn]; } } else if ( columnType[icolumn] == COIN_MI_BOUND ) { } else { ifError = true; } #else if (value == -1.0e100) { value = infinity_; if (columnType[icolumn] != COIN_UNSET_BOUND && columnType[icolumn] != COIN_LO_BOUND && columnType[icolumn] != COIN_LI_BOUND && columnType[icolumn] != COIN_MI_BOUND) { ifError = true; } } else { if (columnType[icolumn] == COIN_UNSET_BOUND) { } else if (columnType[icolumn] == COIN_LO_BOUND || columnType[icolumn] == COIN_LI_BOUND || columnType[icolumn] == COIN_MI_BOUND) { if (value < collower_[icolumn]) { ifError = true; } else if (value < collower_[icolumn] + smallElement_) { value = collower_[icolumn]; } } else { ifError = true; } } #endif if (value > 1.0e25) value = infinity_; colupper_[icolumn] = value; if (columnType[icolumn] == COIN_UNSET_BOUND) { columnType[icolumn] = COIN_UI_BOUND; } else { columnType[icolumn] = COIN_BOTH_BOUNDS_SET; } if (!integerType_[icolumn]) { numberIntegers++; integerType_[icolumn] = 1; } break; case COIN_LI_BOUND: if (value == -1.0e100) ifError = true; if (value == STRING_VALUE) { value = -1.0e20; // tiny element - string const char *s = cardReader_->valueString(); assert(*s == '='); addString(numberRows_ + 1, icolumn, s + 1); } if (columnType[icolumn] == COIN_UNSET_BOUND) { } else if (columnType[icolumn] == COIN_UP_BOUND || columnType[icolumn] == COIN_SC_BOUND || columnType[icolumn] == COIN_UI_BOUND) { if (value > colupper_[icolumn]) { ifError = true; } else if (value > colupper_[icolumn] - smallElement_) { value = colupper_[icolumn]; } } else if (columnType[icolumn] == COIN_PL_BOUND) { } else { ifError = true; } if (value < -1.0e25) value = -infinity_; collower_[icolumn] = value; if (columnType[icolumn] == COIN_UNSET_BOUND) { columnType[icolumn] = COIN_LI_BOUND; } else { columnType[icolumn] = COIN_BOTH_BOUNDS_SET; } if (!integerType_[icolumn]) { numberIntegers++; integerType_[icolumn] = 1; } else if (integerType_[icolumn] == 3) { integerType_[icolumn] = 4; // SC and integer } break; case COIN_BV_BOUND: if (columnType[icolumn] == COIN_UNSET_BOUND) { } else { ifError = true; } collower_[icolumn] = 0.0; colupper_[icolumn] = 1.0; columnType[icolumn] = COIN_BV_BOUND; if (!integerType_[icolumn]) { numberIntegers++; integerType_[icolumn] = 1; } break; case COIN_SC_BOUND: if (value == STRING_VALUE) { value = 1.0e20; // tiny element - string const char *s = cardReader_->valueString(); assert(*s == '='); addString(numberRows_ + 2, icolumn, s + 1); } if (value == -1.0e100 || value == 0.0) { value = infinity_; if (columnType[icolumn] != COIN_UNSET_BOUND && columnType[icolumn] != COIN_LO_BOUND && columnType[icolumn] != COIN_LI_BOUND) { ifError = true; } } else { if (columnType[icolumn] == COIN_UNSET_BOUND) { } else if (columnType[icolumn] == COIN_LO_BOUND || columnType[icolumn] == COIN_LI_BOUND) { if (value < collower_[icolumn]) { ifError = true; } else if (value < collower_[icolumn] + smallElement_) { value = collower_[icolumn]; } } else { ifError = true; } } if (value > 1.0e25) value = infinity_; colupper_[icolumn] = value; if (columnType[icolumn] == COIN_UNSET_BOUND) { columnType[icolumn] = COIN_SC_BOUND; } else { columnType[icolumn] = COIN_BOTH_BOUNDS_SET; } if (!integerType_[icolumn]) { numberIntegers++; integerType_[icolumn] = 3; } else if (integerType_[icolumn] == 1) { integerType_[icolumn] = 4; // SC and integer } break; default: ifError = true; break; } if (ifError) { numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_BADIMAGE, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } } else { numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_NOMATCHCOL, messages_) << cardReader_->rowName() << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } } } //for (i=0;iwhichSection() == COIN_SOS_SECTION) { // Go to free format cardReader_->setFreeFormat(true); int numberInSet = 0; int iType = -1; int *which = new int[numberColumns_]; double *weights = new double[numberColumns_]; CoinSet **setsA = new CoinSet *[numberColumns_]; while (cardReader_->nextField() == COIN_SOS_SECTION) { if (cardReader_->mpsType() == COIN_S1_BOUND || cardReader_->mpsType() == COIN_S2_BOUND) { if (numberInSet) { CoinSosSet *newSet = new CoinSosSet(numberInSet, which, weights, iType); setsA[numberSets++] = newSet; } numberInSet = 0; iType = cardReader_->mpsType() == COIN_S1_BOUND ? 1 : 2; // skip continue; } // get column number COINColumnIndex icolumn = findHash(cardReader_->columnName(), 1); if (icolumn >= 0) { //integerType_[icolumn]=2; double value = cardReader_->value(); if (value == -1.0e100) value = atof(cardReader_->rowName()); // try from row name which[numberInSet] = icolumn; weights[numberInSet++] = value; } else { numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_NOMATCHCOL, messages_) << cardReader_->columnName() << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } } if (numberInSet) { CoinSosSet *newSet = new CoinSosSet(numberInSet, which, weights, iType); setsA[numberSets++] = newSet; } if (numberSets) { sets = new CoinSet *[numberSets]; memcpy(sets, setsA, numberSets * sizeof(CoinSet **)); } delete[] setsA; delete[] which; delete[] weights; } stopHash(1); // clean up integers if (!numberIntegers) { free(integerType_); integerType_ = NULL; } else { COINColumnIndex icolumn; for (icolumn = 0; icolumn < numberColumns_; icolumn++) { if (integerType_[icolumn]) { collower_[icolumn] = CoinMax(collower_[icolumn], -MAX_INTEGER); // if 0 infinity make 0-1 ??? if (columnType[icolumn] == COIN_UNSET_BOUND) colupper_[icolumn] = defaultBound_; if (colupper_[icolumn] > MAX_INTEGER) colupper_[icolumn] = MAX_INTEGER; // clean up to allow for bad reads on 1.0e2 etc if (colupper_[icolumn] < 1.0e10) { double value = colupper_[icolumn]; double value2 = floor(value + 0.5); if (value != value2) { if (fabs(value - value2) < 1.0e-5) colupper_[icolumn] = value2; } } if (collower_[icolumn] > -1.0e10) { double value = collower_[icolumn]; double value2 = floor(value + 0.5); if (value != value2) { if (fabs(value - value2) < 1.0e-5) collower_[icolumn] = value2; } } } } } free(columnType); if (cardReader_->whichSection() != COIN_ENDATA_SECTION && cardReader_->whichSection() != COIN_QUAD_SECTION && cardReader_->whichSection() != COIN_CONIC_SECTION) { handler_->message(COIN_MPS_BADIMAGE, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors + 100000; } } else { // This is very simple format - what should we use? COINColumnIndex i; /* old: FILE * fp = cardReader_->filePointer(); fscanf ( fp, "%d %d %d\n", &numberRows_, &numberColumns_, &i); */ // new: char buffer[1000]; cardReader_->fileInput()->gets(buffer, 1000); sscanf(buffer, "%d %d %d\n", &numberRows_, &numberColumns_, &i); numberElements_ = i; // done this way in case numberElements_ long rowlower_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); rowupper_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); for (i = 0; i < numberRows_; i++) { int j; // old: fscanf ( fp, "%d %lg %lg\n", &j, &rowlower_[i], &rowupper_[i] ); // new: cardReader_->fileInput()->gets(buffer, 1000); sscanf(buffer, "%d %lg %lg\n", &j, &rowlower_[i], &rowupper_[i]); assert(i == j); } collower_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); colupper_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); objective_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); start = reinterpret_cast< CoinBigIndex * >(malloc((numberColumns_ + 1) * sizeof(CoinBigIndex))); row = reinterpret_cast< COINRowIndex * >(malloc(numberElements_ * sizeof(COINRowIndex))); element = reinterpret_cast< double * >(malloc(numberElements_ * sizeof(double))); start[0] = 0; numberElements_ = 0; for (i = 0; i < numberColumns_; i++) { int j; int n; /* old: fscanf ( fp, "%d %d %lg %lg %lg\n", &j, &n, &collower_[i], &colupper_[i], &objective_[i] ); */ // new: cardReader_->fileInput()->gets(buffer, 1000); sscanf(buffer, "%d %d %lg %lg %lg\n", &j, &n, &collower_[i], &colupper_[i], &objective_[i]); assert(i == j); for (j = 0; j < n; j++) { /* old: fscanf ( fp, " %d %lg\n", &row[numberElements_], &element[numberElements_] ); */ // new: cardReader_->fileInput()->gets(buffer, 1000); sscanf(buffer, " %d %lg\n", &row[numberElements_], &element[numberElements_]); numberElements_++; } start[i + 1] = numberElements_; } } // construct packed matrix matrixByColumn_ = new CoinPackedMatrix(true, numberRows_, numberColumns_, numberElements_, element, row, start, NULL); free(row); free(start); free(element); handler_->message(COIN_MPS_STATS, messages_) << problemName_ << numberRows_ << numberColumns_ << numberElements_ << CoinMessageEol; if (integerType_) { int numberSC = 0; int numberSC_int = 0; for (int i = 0; i < numberColumns_; i++) { if (integerType_[i] > 2 && integerType_[i] < 5) numberSC++; if (integerType_[i] == 4) numberSC_int++; } if (numberSC) { char generalPrint[100]; if (!numberSC_int) sprintf(generalPrint, "%d semi-continuous variables - report odd behavior", numberSC); else sprintf(generalPrint, "%d semi-continuous variables (%d integer!) - be wary", numberSC, numberSC_int); handler_->message(COIN_GENERAL_INFO, messages_) << generalPrint << CoinMessageEol; } } return numberErrors; } #ifdef COIN_HAS_GLPK #include "glpk.h" glp_tran *cbc_glp_tran = NULL; glp_prob *cbc_glp_prob = NULL; #endif /* Read a problem in GMPL (subset of AMPL) format from the given filenames. Thanks to Ted Ralphs - I just looked at his coding rather than look at the GMPL documentation. */ int CoinMpsIO::readGMPL(const char *modelName, const char *dataName, bool keepNames) { #ifdef COIN_HAS_GLPK int returnCode; gutsOfDestructor(); // initialize cbc_glp_tran = glp_mpl_alloc_wksp(); // read model char name[2000]; // should be long enough assert(strlen(modelName) < 2000 && (!dataName || strlen(dataName) < 2000)); strcpy(name, modelName); returnCode = glp_mpl_read_model(cbc_glp_tran, name, false); if (returnCode != 0) { // errors glp_mpl_free_wksp(cbc_glp_tran); cbc_glp_tran = NULL; return 1; } if (dataName) { // read data strcpy(name, dataName); returnCode = glp_mpl_read_data(cbc_glp_tran, name); if (returnCode != 0) { // errors glp_mpl_free_wksp(cbc_glp_tran); cbc_glp_tran = NULL; return 1; } } // generate model returnCode = glp_mpl_generate(cbc_glp_tran, NULL); if (returnCode != 0) { // errors glp_mpl_free_wksp(cbc_glp_tran); cbc_glp_tran = NULL; return 2; } cbc_glp_prob = glp_create_prob(); glp_mpl_build_prob(cbc_glp_tran, cbc_glp_prob); // Get number of rows, columns, and elements numberRows_ = glp_get_num_rows(cbc_glp_prob); numberColumns_ = glp_get_num_cols(cbc_glp_prob); numberElements_ = glp_get_num_nz(cbc_glp_prob); int iRow, iColumn; CoinBigIndex *start = new CoinBigIndex[numberRows_ + 1]; int *index = new int[numberElements_]; double *element = new double[numberElements_]; // Row stuff rowlower_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); rowupper_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); // and objective objective_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); problemName_ = CoinStrdup(glp_get_prob_name(cbc_glp_prob)); int kRow = 0; start[0] = 0; numberElements_ = 0; // spare space for checking double *el = new double[numberColumns_]; int *ind = new int[numberColumns_]; char **names = NULL; if (keepNames) { names = reinterpret_cast< char ** >(malloc(numberRows_ * sizeof(char *))); names_[0] = names; numberHash_[0] = numberRows_; } for (iRow = 0; iRow < numberRows_; iRow++) { int number = glp_get_mat_row(cbc_glp_prob, iRow + 1, ind - 1, el - 1); double rowLower, rowUpper; int rowType; rowLower = glp_get_row_lb(cbc_glp_prob, iRow + 1); rowUpper = glp_get_row_ub(cbc_glp_prob, iRow + 1); rowType = glp_get_row_type(cbc_glp_prob, iRow + 1); switch (rowType) { case GLP_LO: rowUpper = COIN_DBL_MAX; break; case GLP_UP: rowLower = -COIN_DBL_MAX; break; case GLP_FR: rowLower = -COIN_DBL_MAX; rowUpper = COIN_DBL_MAX; break; default: break; } rowlower_[kRow] = rowLower; rowupper_[kRow] = rowUpper; for (int i = 0; i < number; i++) { iColumn = ind[i] - 1; index[numberElements_] = iColumn; element[numberElements_++] = el[i]; } if (keepNames) { strcpy(name, glp_get_row_name(cbc_glp_prob, iRow + 1)); // could look at name? names[kRow] = CoinStrdup(name); } kRow++; start[kRow] = numberElements_; } delete[] el; delete[] ind; // FIXME why this variable is not used? bool minimize = (glp_get_obj_dir(cbc_glp_prob) == GLP_MAX ? false : true); // sign correct? objectiveOffset_ = glp_get_obj_coef(cbc_glp_prob, 0); for (int i = 0; i < numberColumns_; i++) objective_[i] = glp_get_obj_coef(cbc_glp_prob, i + 1); if (!minimize) { for (int i = 0; i < numberColumns_; i++) objective_[i] = -objective_[i]; handler_->message(COIN_GENERAL_INFO, messages_) << " CoinMpsIO::readGMPL(): Maximization problem reformulated as minimization" << CoinMessageEol; objectiveOffset_ = -objectiveOffset_; } // Matrix matrixByColumn_ = new CoinPackedMatrix(false, numberColumns_, numberRows_, numberElements_, element, index, start, NULL); matrixByColumn_->reverseOrdering(); delete[] element; delete[] start; delete[] index; // Now do columns collower_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); colupper_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); integerType_ = reinterpret_cast< char * >(malloc(numberColumns_ * sizeof(char))); if (keepNames) { names = reinterpret_cast< char ** >(malloc(numberColumns_ * sizeof(char *))); names_[1] = names; numberHash_[1] = numberColumns_; } int numberIntegers = 0; for (iColumn = 0; iColumn < numberColumns_; iColumn++) { double columnLower = glp_get_col_lb(cbc_glp_prob, iColumn + 1); double columnUpper = glp_get_col_ub(cbc_glp_prob, iColumn + 1); int columnType = glp_get_col_type(cbc_glp_prob, iColumn + 1); switch (columnType) { case GLP_LO: columnUpper = COIN_DBL_MAX; break; case GLP_UP: columnLower = -COIN_DBL_MAX; break; case GLP_FR: columnLower = -COIN_DBL_MAX; columnUpper = COIN_DBL_MAX; break; default: break; } collower_[iColumn] = columnLower; colupper_[iColumn] = columnUpper; columnType = glp_get_col_kind(cbc_glp_prob, iColumn + 1); if (columnType == GLP_IV) { integerType_[iColumn] = 1; numberIntegers++; //assert ( collower_[iColumn] >= -MAX_INTEGER ); if (collower_[iColumn] < -MAX_INTEGER) collower_[iColumn] = -MAX_INTEGER; if (colupper_[iColumn] > MAX_INTEGER) colupper_[iColumn] = MAX_INTEGER; } else if (columnType == GLP_BV) { numberIntegers++; integerType_[iColumn] = 1; collower_[iColumn] = 0.0; colupper_[iColumn] = 1.0; } else { integerType_[iColumn] = 0; } if (keepNames) { strcpy(name, glp_get_col_name(cbc_glp_prob, iColumn + 1)); // could look at name? names[iColumn] = CoinStrdup(name); } } // leave in case report needed //glp_free(cbc_glp_prob); //glp_mpl_free_wksp(cbc_glp_tran); //glp_free_env(); if (!numberIntegers) { free(integerType_); integerType_ = NULL; } if (handler_) handler_->message(COIN_MPS_STATS, messages_) << problemName_ << numberRows_ << numberColumns_ << numberElements_ << CoinMessageEol; return 0; #else printf("GLPK is not available\n"); abort(); return 1; #endif } //------------------------------------------------------------------ // Read gams files //------------------------------------------------------------------ int CoinMpsIO::readGms(const char *filename, const char *extension, bool convertObjective) { convertObjective_ = convertObjective; // Deal with filename - +1 if new, 0 if same as before, -1 if error CoinFileInput *input = 0; int returnCode = dealWithFileName(filename, extension, input); if (returnCode < 0) { return -1; } else if (returnCode > 0) { delete cardReader_; cardReader_ = new CoinMpsCardReader(input, this); } int numberSets = 0; CoinSet **sets = NULL; returnCode = readGms(numberSets, sets); for (int i = 0; i < numberSets; i++) delete sets[i]; delete[] sets; return returnCode; } int CoinMpsIO::readGms(const char *filename, const char *extension, int &numberSets, CoinSet **&sets) { // Deal with filename - +1 if new, 0 if same as before, -1 if error CoinFileInput *input = 0; int returnCode = dealWithFileName(filename, extension, input); if (returnCode < 0) { return -1; } else if (returnCode > 0) { delete cardReader_; cardReader_ = new CoinMpsCardReader(input, this); } return readGms(numberSets, sets); } int CoinMpsIO::readGms(int & /*numberSets*/, CoinSet **& /*sets*/) { // First version expects comments giving size numberRows_ = 0; numberColumns_ = 0; numberElements_ = 0; bool gotName = false; bool minimize = false; char objName[COIN_MAX_FIELD_LENGTH]; int decodeType = -1; while (!gotName) { if (cardReader_->nextGmsField(0) < 0) { handler_->message(COIN_MPS_EOF, messages_) << fileName_ << CoinMessageEol; return -3; } else { char *card = cardReader_->mutableCard(); if (card[0] != '*') { // finished preamble without finding name printf("bad gms file\n"); return -1; } else { // skip * and find next char *next = nextNonBlank(card + 1); if (!next) continue; if (decodeType >= 0) { // in middle of getting a total if (!strncmp(next, "Total", 5)) { // next line wanted decodeType += 100; } else if (decodeType >= 100) { decodeType -= 100; int number = atoi(next); assert(number > 0); if (decodeType == 0) numberRows_ = number; else if (decodeType == 1) numberColumns_ = number; else numberElements_ = number; decodeType = -1; } } else if (!strncmp(next, "Equation", 8)) { decodeType = 0; } else if (!strncmp(next, "Variable", 8)) { decodeType = 1; } else if (!strncmp(next, "Nonzero", 7)) { decodeType = 2; } else if (!strncmp(next, "Solve", 5)) { decodeType = -1; gotName = true; assert(numberRows_ > 0 && numberColumns_ > 0 && numberElements_ > 0); next = cardReader_->nextBlankOr(next + 5); char name[100]; char *put = name; next = nextNonBlank(next); while (*next != ' ' && *next != '\t') { *put = *next; put++; next++; } *put = '\0'; assert(put - name < 100); free(problemName_); problemName_ = CoinStrdup(name); next = strchr(next, ';'); assert(next); // backup while (*next != ' ' && *next != '\t') { next--; } cardReader_->setPosition(next); #ifdef NDEBUG cardReader_->nextGmsField(1); #else int returnCode = cardReader_->nextGmsField(1); assert(!returnCode); #endif next = strchr(next, ';'); cardReader_->setPosition(next + 1); strcpy(objName, cardReader_->columnName()); char *semi = strchr(objName, ';'); if (semi) *semi = '\0'; if (strstr(card, "minim")) { minimize = true; } else { assert(strstr(card, "maxim")); minimize = false; } } else { decodeType = -1; } } } } objectiveOffset_ = 0.0; rowlower_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); rowupper_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); collower_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); colupper_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); objective_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); CoinBigIndex *start = reinterpret_cast< CoinBigIndex * >(malloc((numberRows_ + 1) * sizeof(CoinBigIndex))); COINColumnIndex *column = reinterpret_cast< COINRowIndex * >(malloc(numberElements_ * sizeof(COINRowIndex))); double *element = reinterpret_cast< double * >(malloc(numberElements_ * sizeof(double))); COINMpsType *rowType = reinterpret_cast< COINMpsType * >(malloc(numberRows_ * sizeof(COINMpsType))); char **rowName = reinterpret_cast< char ** >(malloc(numberRows_ * sizeof(char *))); COINMpsType *columnType = reinterpret_cast< COINMpsType * >(malloc(numberColumns_ * sizeof(COINMpsType))); char **columnName = reinterpret_cast< char ** >(malloc(numberColumns_ * sizeof(char *))); start[0] = 0; numberElements_ = 0; int numberErrors = 0; int i; COINColumnIndex numberIntegers = 0; // expect Variables int returnCode; returnCode = cardReader_->nextGmsField(1); assert(!returnCode && !strcmp(cardReader_->columnName(), "Variables")); for (i = 0; i < numberColumns_; i++) { returnCode = cardReader_->nextGmsField(1); assert(!returnCode); char *next = cardReader_->getPosition(); if (*next == '\0') { // eol - expect , at beginning of next line returnCode = cardReader_->nextGmsField(0); assert(!returnCode); next = strchr(cardReader_->mutableCard(), ','); assert(next); } assert(*next == ',' || *next == ';'); cardReader_->setPosition(next + 1); columnName[i] = CoinStrdup(cardReader_->columnName()); // Default is free? collower_[i] = -COIN_DBL_MAX; // Surely not - check collower_[i] = 0.0; colupper_[i] = COIN_DBL_MAX; objective_[i] = 0.0; columnType[i] = COIN_UNSET_BOUND; } startHash(columnName, numberColumns_, 1); integerType_ = reinterpret_cast< char * >(malloc(numberColumns_ * sizeof(char))); memset(integerType_, 0, numberColumns_); // Lists come in various flavors - I don't know many now // 0 - Positive // 1 - Binary // -1 end int listType = 10; while (listType >= 0) { returnCode = cardReader_->nextGmsField(1); assert(!returnCode); listType = -1; if (!strcmp(cardReader_->columnName(), "Positive")) { listType = 0; } else if (!strcmp(cardReader_->columnName(), "Binary")) { listType = 1; } else if (!strcmp(cardReader_->columnName(), "Integer")) { listType = 2; } else { break; } // skip Variables returnCode = cardReader_->nextGmsField(1); assert(!returnCode); assert(!strcmp(cardReader_->columnName(), "Variables")); // Go through lists bool inList = true; while (inList) { returnCode = cardReader_->nextGmsField(1); assert(!returnCode); char *next = cardReader_->getPosition(); if (*next == '\0') { // eol - expect , at beginning of next line returnCode = cardReader_->nextGmsField(0); assert(!returnCode); next = strchr(cardReader_->mutableCard(), ','); assert(next); } assert(*next == ',' || *next == ';'); cardReader_->setPosition(next + 1); inList = (*next == ','); int iColumn = findHash(cardReader_->columnName(), 1); assert(iColumn >= 0); if (listType == 0) { collower_[iColumn] = 0.0; } else if (listType == 1) { collower_[iColumn] = 0.0; colupper_[iColumn] = 1.0; columnType[iColumn] = COIN_BV_BOUND; integerType_[iColumn] = 1; numberIntegers++; } else if (listType == 2) { collower_[iColumn] = 0.0; columnType[iColumn] = COIN_UI_BOUND; integerType_[iColumn] = 1; numberIntegers++; } } } // should be equations assert(!strcmp(cardReader_->columnName(), "Equations")); for (i = 0; i < numberRows_; i++) { returnCode = cardReader_->nextGmsField(1); assert(!returnCode); char *next = cardReader_->getPosition(); if (*next == '\0') { // eol - expect , at beginning of next line returnCode = cardReader_->nextGmsField(0); assert(!returnCode); next = strchr(cardReader_->mutableCard(), ','); assert(next); } assert(*next == ',' || *next == ';'); cardReader_->setPosition(next + 1); rowName[i] = CoinStrdup(cardReader_->columnName()); // Default is free? rowlower_[i] = -COIN_DBL_MAX; rowupper_[i] = COIN_DBL_MAX; rowType[i] = COIN_N_ROW; } startHash(rowName, numberRows_, 0); const double largeElement = 1.0e14; int numberTiny = 0; int numberLarge = 0; // For now expect just equations so do loop for (i = 0; i < numberRows_; i++) { returnCode = cardReader_->nextGmsField(1); assert(!returnCode); char *next = cardReader_->getPosition(); assert(*next == ' '); char rowName[COIN_MAX_FIELD_LENGTH]; strcpy(rowName, cardReader_->columnName()); char *dot = strchr(rowName, '.'); assert(dot); *dot = '\0'; assert(*(dot + 1) == '.'); #ifndef NDEBUG int iRow = findHash(rowName, 0); assert(i == iRow); #endif returnCode = 0; while (!returnCode) { returnCode = cardReader_->nextGmsField(3); assert(returnCode == 0 || returnCode == 2); if (returnCode == 2) break; int iColumn = findHash(cardReader_->columnName(), 1); if (iColumn >= 0) { column[numberElements_] = iColumn; double value = cardReader_->value(); if (fabs(value) < smallElement_) numberTiny++; else if (fabs(value) > largeElement) numberLarge++; element[numberElements_++] = value; } else { // may be string char temp[100]; strcpy(temp, cardReader_->columnName()); char *ast = strchr(temp, '*'); if (!ast) { assert(iColumn >= 0); } else { assert(allowStringElements_); *ast = '\0'; if (allowStringElements_ == 1) iColumn = findHash(temp, 1); else iColumn = findHash(ast + 1, 1); assert(iColumn >= 0); char temp2[100]; temp2[0] = '\0'; double value = cardReader_->value(); if (value && value != 1.0) sprintf(temp2, "%g*", value); if (allowStringElements_ == 1) strcat(temp2, ast + 1); else strcat(temp2, temp); addString(i, iColumn, temp2); } } } start[i + 1] = numberElements_; next = cardReader_->getPosition(); // what about ranges? COINMpsType type = COIN_N_ROW; if (!strncmp(next, "=E=", 3)) type = COIN_E_ROW; else if (!strncmp(next, "=G=", 3)) type = COIN_G_ROW; else if (!strncmp(next, "=L=", 3)) type = COIN_L_ROW; assert(type != COIN_N_ROW); cardReader_->setPosition(next + 3); returnCode = cardReader_->nextGmsField(2); assert(!returnCode); if (type == COIN_E_ROW) { rowlower_[i] = cardReader_->value(); rowupper_[i] = cardReader_->value(); } else if (type == COIN_G_ROW) { rowlower_[i] = cardReader_->value(); } else if (type == COIN_L_ROW) { rowupper_[i] = cardReader_->value(); } rowType[i] = type; // and skip ; #ifdef NDEBUG cardReader_->nextGmsField(5); #else returnCode = cardReader_->nextGmsField(5); assert(!returnCode); #endif } // Now non default bounds while (true) { returnCode = cardReader_->nextGmsField(0); if (returnCode < 0) break; // if there is a . see if valid name char *card = cardReader_->mutableCard(); char *dot = strchr(card, '.'); if (dot) { *dot = '\0'; int iColumn = findHash(card, 1); if (iColumn >= 0) { // bound char *next = strchr(dot + 1, '='); assert(next); double value = atof(next + 1); if (!strncmp(dot + 1, "fx", 2)) { collower_[iColumn] = value; colupper_[iColumn] = value; } else if (!strncmp(dot + 1, "up", 2)) { colupper_[iColumn] = value; } else if (!strncmp(dot + 1, "lo", 2)) { collower_[iColumn] = value; } } // may be two per card char *semi = strchr(dot + 1, ';'); dot = NULL; if (semi) dot = strchr(semi + 1, '.'); if (dot) { char *next = nextNonBlank(semi + 1); dot = strchr(next, '.'); assert(dot); *dot = '\0'; assert(iColumn == findHash(next, 1)); // bound next = strchr(dot + 1, '='); assert(next); double value = atof(next + 1); if (!strncmp(dot + 1, "fx", 2)) { collower_[iColumn] = value; abort(); colupper_[iColumn] = value; } else if (!strncmp(dot + 1, "up", 2)) { colupper_[iColumn] = value; } else if (!strncmp(dot + 1, "lo", 2)) { collower_[iColumn] = value; } // may be two per card semi = strchr(dot + 1, ';'); assert(semi); } } } // Objective int iObjCol = findHash(objName, 1); int iObjRow = -1; assert(iObjCol >= 0); if (!convertObjective_) { objective_[iObjCol] = minimize ? 1.0 : -1.0; } else { // move column stuff COINColumnIndex iColumn; free(names_[1][iObjCol]); for (iColumn = iObjCol + 1; iColumn < numberColumns_; iColumn++) { integerType_[iColumn - 1] = integerType_[iColumn]; collower_[iColumn - 1] = collower_[iColumn]; colupper_[iColumn - 1] = colupper_[iColumn]; names_[1][iColumn - 1] = names_[1][iColumn]; } numberHash_[1]--; numberColumns_--; double multiplier = minimize ? 1.0 : -1.0; // but swap multiplier *= -1.0; int iRow; CoinBigIndex nel = 0; CoinBigIndex last = 0; int kRow = 0; for (iRow = 0; iRow < numberRows_; iRow++) { CoinBigIndex j; bool found = false; for (j = last; j < start[iRow + 1]; j++) { int iColumn = column[j]; if (iColumn != iObjCol) { column[nel] = (iColumn < iObjCol) ? iColumn : iColumn - 1; element[nel++] = element[j]; } else { found = true; assert(element[j] == 1.0); break; } } if (!found) { last = start[iRow + 1]; rowlower_[kRow] = rowlower_[iRow]; rowupper_[kRow] = rowupper_[iRow]; names_[0][kRow] = names_[0][iRow]; start[kRow + 1] = nel; kRow++; } else { free(names_[0][iRow]); iObjRow = iRow; for (j = last; j < start[iRow + 1]; j++) { int iColumn = column[j]; if (iColumn != iObjCol) { if (iColumn > iObjCol) iColumn--; objective_[iColumn] = multiplier * element[j]; } } nel = start[kRow]; last = start[iRow + 1]; } } numberRows_ = kRow; assert(iObjRow >= 0); numberHash_[0]--; } stopHash(0); stopHash(1); // clean up integers if (!numberIntegers) { free(integerType_); integerType_ = NULL; } else { COINColumnIndex iColumn; for (iColumn = 0; iColumn < numberColumns_; iColumn++) { if (integerType_[iColumn]) { //assert ( collower_[iColumn] >= -MAX_INTEGER ); if (collower_[iColumn] < -MAX_INTEGER) collower_[iColumn] = -MAX_INTEGER; if (colupper_[iColumn] > MAX_INTEGER) colupper_[iColumn] = MAX_INTEGER; } } } free(columnType); free(rowType); if (numberStringElements() && convertObjective_) { int numberElements = numberStringElements(); for (int i = 0; i < numberElements; i++) { char *line = stringElements_[i]; int iRow; int iColumn; sscanf(line, "%d,%d,", &iRow, &iColumn); bool modify = false; if (iRow > iObjRow) { modify = true; iRow--; } if (iColumn > iObjCol) { modify = true; iColumn--; } if (modify) { char temp[500]; const char *pos = strchr(line, ','); assert(pos); pos = strchr(pos + 1, ','); assert(pos); pos++; sprintf(temp, "%d,%d,%s", iRow, iColumn, pos); free(line); stringElements_[i] = CoinStrdup(temp); } } } // construct packed matrix and convert to column format CoinPackedMatrix matrixByRow(false, numberColumns_, numberRows_, numberElements_, element, column, start, NULL); free(column); free(start); free(element); matrixByColumn_ = new CoinPackedMatrix(); matrixByColumn_->setExtraGap(0.0); matrixByColumn_->setExtraMajor(0.0); matrixByColumn_->reverseOrderedCopyOf(matrixByRow); if (!convertObjective_) assert(matrixByColumn_->getVectorLengths()[iObjCol] == 1); handler_->message(COIN_MPS_STATS, messages_) << problemName_ << numberRows_ << numberColumns_ << numberElements_ << CoinMessageEol; if ((numberTiny || numberLarge) && handler_->logLevel() > 3) printf("There were %d coefficients < %g and %d > %g\n", numberTiny, smallElement_, numberLarge, largeElement); return numberErrors; } /* Read a basis in MPS format from the given filename. If VALUES on NAME card and solution not NULL fills in solution status values as for CoinWarmStartBasis (but one per char) Use "stdin" or "-" to read from stdin. */ int CoinMpsIO::readBasis(const char *filename, const char *extension, double *solution, unsigned char *rowStatus, unsigned char *columnStatus, const std::vector< std::string > &colnames, int numberColumns, const std::vector< std::string > &rownames, int numberRows) { // Deal with filename - +1 if new, 0 if same as before, -1 if error CoinFileInput *input = 0; int returnCode = dealWithFileName(filename, extension, input); if (returnCode < 0) { return -1; } else if (returnCode > 0) { delete cardReader_; cardReader_ = new CoinMpsCardReader(input, this); } cardReader_->readToNextSection(); if (cardReader_->whichSection() == COIN_NAME_SECTION) { // Get whether to use values (passed back by freeFormat) if (!cardReader_->freeFormat()) solution = NULL; } else if (cardReader_->whichSection() == COIN_UNKNOWN_SECTION) { handler_->message(COIN_MPS_BADFILE1, messages_) << cardReader_->card() << 1 << fileName_ << CoinMessageEol; if (cardReader_->fileInput()->getReadType() != "plain") handler_->message(COIN_MPS_BADFILE2, messages_) << cardReader_->fileInput()->getReadType() << CoinMessageEol; return -2; } else if (cardReader_->whichSection() != COIN_EOF_SECTION) { return -4; } else { handler_->message(COIN_MPS_EOF, messages_) << fileName_ << CoinMessageEol; return -3; } numberRows_ = numberRows; numberColumns_ = numberColumns; // bas file - always read in free format bool gotNames; if (rownames.size() != static_cast< unsigned int >(numberRows_) || colnames.size() != static_cast< unsigned int >(numberColumns_)) { gotNames = false; } else { gotNames = true; numberHash_[0] = numberRows_; numberHash_[1] = numberColumns_; names_[0] = reinterpret_cast< char ** >(malloc(numberRows_ * sizeof(char *))); names_[1] = reinterpret_cast< char ** >(malloc(numberColumns_ * sizeof(char *))); const char **rowNames = const_cast< const char ** >(names_[0]); const char **columnNames = const_cast< const char ** >(names_[1]); int i; for (i = 0; i < numberRows_; ++i) { rowNames[i] = rownames[i].c_str(); } for (i = 0; i < numberColumns_; ++i) { columnNames[i] = colnames[i].c_str(); } startHash(const_cast< char ** >(rowNames), numberRows, 0); startHash(const_cast< char ** >(columnNames), numberColumns, 1); } cardReader_->setWhichSection(COIN_BASIS_SECTION); cardReader_->setFreeFormat(true); // below matches CoinWarmStartBasis, const unsigned char basic = 0x01; const unsigned char atLowerBound = 0x03; const unsigned char atUpperBound = 0x02; while (cardReader_->nextField() == COIN_BASIS_SECTION) { // Get type and column number int iColumn; if (gotNames) { iColumn = findHash(cardReader_->columnName(), 1); } else { // few checks char check; sscanf(cardReader_->columnName(), "%c%d", &check, &iColumn); assert(check == 'C' && iColumn >= 0); if (iColumn >= numberColumns_) iColumn = -1; } if (iColumn >= 0) { double value = cardReader_->value(); if (solution && value > -1.0e50) solution[iColumn] = value; int iRow = -1; switch (cardReader_->mpsType()) { case COIN_BS_BASIS: columnStatus[iColumn] = basic; break; case COIN_XL_BASIS: columnStatus[iColumn] = basic; // get row number if (gotNames) { iRow = findHash(cardReader_->rowName(), 0); } else { // few checks char check; sscanf(cardReader_->rowName(), "%c%d", &check, &iRow); assert(check == 'R' && iRow >= 0); if (iRow >= numberRows_) iRow = -1; } if (iRow >= 0) { rowStatus[iRow] = atLowerBound; } break; case COIN_XU_BASIS: columnStatus[iColumn] = basic; // get row number if (gotNames) { iRow = findHash(cardReader_->rowName(), 0); } else { // few checks char check; sscanf(cardReader_->rowName(), "%c%d", &check, &iRow); assert(check == 'R' && iRow >= 0); if (iRow >= numberRows_) iRow = -1; } if (iRow >= 0) { rowStatus[iRow] = atUpperBound; } break; case COIN_LL_BASIS: columnStatus[iColumn] = atLowerBound; break; case COIN_UL_BASIS: columnStatus[iColumn] = atUpperBound; break; default: break; } } } if (gotNames) { stopHash(0); stopHash(1); free(names_[0]); names_[0] = NULL; numberHash_[0] = 0; free(names_[1]); names_[1] = NULL; numberHash_[1] = 0; delete[] hash_[0]; delete[] hash_[1]; hash_[0] = 0; hash_[1] = 0; } if (cardReader_->whichSection() != COIN_ENDATA_SECTION) { handler_->message(COIN_MPS_BADIMAGE, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return -1; } else { return solution ? 1 : 0; } } //------------------------------------------------------------------ // Function to create row name field static void convertRowName(int formatType, const char *name, char outputRow[100]) { strcpy(outputRow, name); if (!formatType) { int i; // pad out to 8 for (i = 0; i < 8; i++) { if (outputRow[i] == '\0') break; } for (; i < 8; i++) outputRow[i] = ' '; outputRow[8] = '\0'; } else if (formatType > 1 && formatType < 8) { int i; // pad out to 8 for (i = 0; i < 8; i++) { if (outputRow[i] == '\0') break; } for (; i < 8; i++) outputRow[i] = ' '; outputRow[8] = '\0'; } } // Function to return number in most efficient way // Also creates row name field /* formatType is 0 - normal and 8 character names 1 - extra accuracy 2 - IEEE hex - INTEL 3 - IEEE hex - not INTEL */ static void convertDouble(int section, int formatType, double value, char outputValue[24], const char *name, char outputRow[100]) { convertRowName(formatType, name, outputRow); CoinConvertDouble(section, formatType & 3, value, outputValue); } // Function to return number in most efficient way /* formatType is 0 - normal and 8 character names 1 - extra accuracy 2 - IEEE hex - INTEL 3 - IEEE hex - not INTEL */ void CoinConvertDouble(int section, int formatType, double value, char outputValue[24]) { if (formatType == 0) { bool stripZeros = true; if (fabs(value) < 1.0e40) { int power10, decimal; if (value >= 0.0) { power10 = static_cast< int >(log10(value)); if (power10 < 9 && power10 > -4) { decimal = CoinMin(10, 10 - power10); char format[8]; sprintf(format, "%%12.%df", decimal); sprintf(outputValue, format, value); } else { sprintf(outputValue, "%13.7g", value); stripZeros = false; } } else { power10 = static_cast< int >(log10(-value)) + 1; if (power10 < 8 && power10 > -3) { decimal = CoinMin(9, 9 - power10); char format[8]; sprintf(format, "%%12.%df", decimal); sprintf(outputValue, format, value); } else { sprintf(outputValue, "%13.6g", value); stripZeros = false; } } if (stripZeros) { // take off trailing 0 int j; for (j = 11; j >= 0; j--) { if (outputValue[j] == '0') outputValue[j] = ' '; else break; } } else { // still need to make sure fits in 12 characters char *e = strchr(outputValue, 'e'); if (!e) { // no e but better make sure fits in 12 if (outputValue[12] != ' ' && outputValue[12] != '\0') { assert(outputValue[0] == ' '); int j; for (j = 0; j < 12; j++) outputValue[j] = outputValue[j + 1]; } outputValue[12] = '\0'; } else { // e take out 0s int j = static_cast< int >((e - outputValue)) + 1; int put = j + 1; assert(outputValue[j] == '-' || outputValue[j] == '+'); for (j = put; j < 14; j++) { if (outputValue[j] != '0') break; } if (j == put) { // we need to lose something // try taking out blanks if (outputValue[0] == ' ') { // skip blank j = 1; put = 0; } else { // rounding will be wrong but .... put -= 3; // points to one before e j -= 2; // points to e } } // copy rest for (; j < 14; j++) { outputValue[put++] = outputValue[j]; } } } // overwrite if very very small if (fabs(value) < 1.0e-20) strcpy(outputValue, "0.0"); } else { if (section == 2) { outputValue[0] = '\0'; // needs no value } else { // probably error ... but .... sprintf(outputValue, "%12.6g", value); } } int i; // pad out to 12 for (i = 0; i < 12; i++) { if (outputValue[i] == '\0') break; } for (; i < 12; i++) outputValue[i] = ' '; outputValue[12] = '\0'; } else if (formatType == 1) { if (fabs(value) < 1.0e40) { memset(outputValue, ' ', 24); sprintf(outputValue, "%.16g", value); // take out blanks int i = 0; int j; for (j = 0; j < 23; j++) { if (outputValue[j] != ' ') outputValue[i++] = outputValue[j]; } outputValue[i] = '\0'; } else { if (section == 2) { outputValue[0] = '\0'; // needs no value } else { // probably error ... but .... sprintf(outputValue, "%12.6g", value); } } } else { // IEEE // ieee - 3 bytes go to 2 assert(sizeof(double) == 8 * sizeof(char)); assert(sizeof(unsigned short) == 2 * sizeof(char)); unsigned short shortValue[4]; memcpy(shortValue, &value, sizeof(double)); outputValue[12] = '\0'; if (formatType == 2) { // INTEL char *thisChar = outputValue; for (int i = 3; i >= 0; i--) { unsigned short thisValue = shortValue[i]; // encode 6 bits at a time for (int j = 0; j < 3; j++) { unsigned short thisPart = static_cast< unsigned short >(thisValue & 63); thisValue = static_cast< unsigned short >(thisValue >> 6); if (thisPart < 10) { *thisChar = static_cast< char >(thisPart + '0'); } else if (thisPart < 36) { *thisChar = static_cast< char >(thisPart - 10 + 'a'); } else if (thisPart < 62) { *thisChar = static_cast< char >(thisPart - 36 + 'A'); } else { *thisChar = static_cast< char >(thisPart - 62 + '*'); } thisChar++; } } } else { // not INTEL char *thisChar = outputValue; for (int i = 0; i < 4; i++) { unsigned short thisValue = shortValue[i]; // encode 6 bits at a time for (int j = 0; j < 3; j++) { unsigned short thisPart = static_cast< unsigned short >(thisValue & 63); thisValue = static_cast< unsigned short >(thisValue >> 6); if (thisPart < 10) { *thisChar = static_cast< char >(thisPart + '0'); } else if (thisPart < 36) { *thisChar = static_cast< char >(thisPart - 10 + 'a'); } else if (thisPart < 62) { *thisChar = static_cast< char >(thisPart - 36 + 'A'); } else { *thisChar = static_cast< char >(thisPart - 62 + '*'); } thisChar++; } } } } } static void writeString(CoinFileOutput *output, const char *str) { if (output != 0) { output->puts(str); } } // Put out card image static void outputCard(int formatType, int numberFields, CoinFileOutput *output, std::string head, const char *name, const char outputValue[2][24], const char outputRow[2][100]) { // fprintf(fp,"%s",head.c_str()); std::string line = head; int i; if (formatType == 0 || (formatType >= 2 && formatType < 8)) { char outputColumn[9]; strcpy(outputColumn, name); for (i = 0; i < 8; i++) { if (outputColumn[i] == '\0') break; } for (; i < 8; i++) outputColumn[i] = ' '; outputColumn[8] = '\0'; // fprintf(fp,"%s ",outputColumn); line += outputColumn; line += " "; for (i = 0; i < numberFields; i++) { // fprintf(fp,"%s %s",outputRow[i],outputValue[i]); line += outputRow[i]; line += " "; line += outputValue[i]; if (i < numberFields - 1) { // fprintf(fp," "); line += " "; } } } else { // fprintf(fp,"%s",name); line += name; for (i = 0; i < numberFields; i++) { // fprintf(fp," %s %s",outputRow[i],outputValue[i]); line += " "; line += outputRow[i]; line += " "; line += outputValue[i]; } } // fprintf(fp,"\n"); line += "\n"; writeString(output, line.c_str()); } static int makeUniqueNames(char **names, int number, char first) { int largest = -1; int i; for (i = 0; i < number; i++) { char *name = names[i]; if (name[0] == first && strlen(name) == 8) { // check number int n = 0; for (int j = 1; j < 8; j++) { char num = name[j]; if (num >= '0' && num <= '9') { n *= 10; n += num - '0'; } else { n = -1; break; } } if (n >= 0) largest = CoinMax(largest, n); } } largest++; if (largest > 0) { // check char *used = new char[largest]; memset(used, 0, largest); int nDup = 0; for (i = 0; i < number; i++) { char *name = names[i]; if (name[0] == first && strlen(name) == 8) { // check number int n = 0; for (int j = 1; j < 8; j++) { char num = name[j]; if (num >= '0' && num <= '9') { n *= 10; n += num - '0'; } else { n = -1; break; } } if (n >= 0) { if (!used[n]) { used[n] = 1; } else { // duplicate nDup++; free(names[i]); char newName[12]; sprintf(newName, "%c%7.7d", first, largest); names[i] = CoinStrdup(newName); largest++; } } } } delete[] used; return nDup; } else { return 0; } } static void strcpyeq(char *output, const char *input) { output[0] = '='; strcpy(output + 1, input); } int CoinMpsIO::writeMps(const char *filename, int compression, int formatType, int numberAcross, CoinPackedMatrix *quadratic, int numberSOS, const CoinSet *setInfo) const { // Clean up format and numberacross numberAcross = CoinMax(1, numberAcross); numberAcross = CoinMin(2, numberAcross); formatType = CoinMax(0, formatType); formatType = CoinMin(2, formatType); int possibleCompression = 0; #ifdef COIN_HAS_ZLIB possibleCompression = 1; #endif #ifdef COIN_HAS_BZLIB possibleCompression += 2; #endif if ((compression & possibleCompression) == 0) { // switch to other if possible if (compression && possibleCompression) compression = 3 - compression; else compression = 0; } std::string line = filename; CoinFileOutput *output = 0; switch (compression) { case 1: if (strcmp(line.c_str() + (line.size() - 3), ".gz") != 0) { line += ".gz"; } output = CoinFileOutput::create(line, CoinFileOutput::COMPRESS_GZIP); break; case 2: if (strcmp(line.c_str() + (line.size() - 4), ".bz2") != 0) { line += ".bz2"; } output = CoinFileOutput::create(line, CoinFileOutput::COMPRESS_BZIP2); break; case 0: default: output = CoinFileOutput::create(line, CoinFileOutput::COMPRESS_NONE); break; } // Set locale so won't get , instead of . char *saveLocale = strdup(setlocale(LC_ALL, NULL)); setlocale(LC_ALL, "C"); const char *const *const rowNames = names_[0]; const char *const *const columnNames = names_[1]; int i; unsigned int length = 8; bool freeFormat = (formatType == 1); // Check names for uniqueness if default int nChanged; nChanged = makeUniqueNames(names_[0], numberRows_, 'R'); if (nChanged) handler_->message(COIN_MPS_CHANGED, messages_) << "row" << nChanged << CoinMessageEol; nChanged = makeUniqueNames(names_[1], numberColumns_, 'C'); if (nChanged) handler_->message(COIN_MPS_CHANGED, messages_) << "column" << nChanged << CoinMessageEol; for (i = 0; i < numberRows_; ++i) { if (strlen(rowNames[i]) > length) { length = static_cast< int >(strlen(rowNames[i])); break; } } if (length <= 8) { for (i = 0; i < numberColumns_; ++i) { if (strlen(columnNames[i]) > length) { length = static_cast< int >(strlen(columnNames[i])); break; } } } if (length > 8 && freeFormat != 1) { freeFormat = true; formatType += 8; } if (numberStringElements_) { freeFormat = true; numberAcross = 1; } // NAME card line = "NAME "; if (strcmp(problemName_, "") == 0) { line.append("BLANK "); } else { if (strlen(problemName_) >= 8) { line.append(problemName_, 8); } else { line.append(problemName_); line.append(8 - strlen(problemName_), ' '); } } if (freeFormat && (formatType & 7) != 2) line.append(" FREE"); else if (freeFormat) line.append(" FREEIEEE"); else if ((formatType & 7) == 2) line.append(" IEEE"); // See if INTEL if IEEE if ((formatType & 7) == 2) { // test intel here and add 1 if not intel double value = 1.0; char x[8]; memcpy(x, &value, 8); if (x[0] == 63) { formatType++; // not intel } else { assert(x[0] == 0); } } // finish off name and do ROWS card and objective char *objrow = CoinStrdup(strcmp(objectiveName_, "") == 0 ? "OBJROW" : objectiveName_); line.append("\nROWS\n N "); line.append(objrow); line.append("\n"); writeString(output, line.c_str()); // Rows section // Sense array // But massage if looks odd char *sense = new char[numberRows_]; memcpy(sense, getRowSense(), numberRows_); const double *rowLower = getRowLower(); const double *rowUpper = getRowUpper(); for (i = 0; i < numberRows_; i++) { line = " "; if (sense[i] != 'R') { line.append(1, sense[i]); } else { if (rowLower[i] > -1.0e30) { if (rowUpper[i] < 1.0e30) { line.append("L"); } else { sense[i] = 'G'; line.append(1, sense[i]); } } else { sense[i] = 'L'; line.append(1, sense[i]); } } line.append(" "); line.append(rowNames[i]); line.append("\n"); writeString(output, line.c_str()); } // COLUMNS card writeString(output, "COLUMNS\n"); bool ifBounds = false; double largeValue = infinity_; largeValue = 1.0e30; // safer const double *columnLower = getColLower(); const double *columnUpper = getColUpper(); const double *objective = getObjCoefficients(); const CoinPackedMatrix *matrix = getMatrixByCol(); const double *elements = matrix->getElements(); const int *rows = matrix->getIndices(); const CoinBigIndex *starts = matrix->getVectorStarts(); const int *lengths = matrix->getVectorLengths(); char outputValue[2][24]; char outputRow[2][100]; // strings int nextRowString = numberRows_ + 10; int nextColumnString = numberColumns_ + 10; int whichString = 0; const char *nextString = NULL; // mark string rows char *stringRow = new char[numberRows_ + 1]; memset(stringRow, 0, numberRows_ + 1); if (numberStringElements_) { decodeString(whichString, nextRowString, nextColumnString, nextString); } // Arrays so we can put out rows in order int *tempRow = new int[numberRows_]; double *tempValue = new double[numberRows_]; // Through columns (only put out if elements or objective value) for (i = 0; i < numberColumns_; i++) { if (i == nextColumnString) { // set up int k = whichString; int iColumn = nextColumnString; int iRow = nextRowString; const char *dummy; while (iColumn == nextColumnString) { stringRow[iRow] = 1; k++; decodeString(k, iRow, iColumn, dummy); } } if (objective[i] || lengths[i] || i == nextColumnString) { // see if bound will be needed if (columnLower[i] || columnUpper[i] < largeValue || isInteger(i)) ifBounds = true; int numberFields = 0; if (objective[i]) { convertDouble(0, formatType, objective[i], outputValue[0], objrow, outputRow[0]); numberFields = 1; if (stringRow[numberRows_]) { assert(objective[i] == STRING_VALUE); assert(nextColumnString == i && nextRowString == numberRows_); strcpyeq(outputValue[0], nextString); stringRow[numberRows_] = 0; decodeString(++whichString, nextRowString, nextColumnString, nextString); } } if (numberFields == numberAcross) { // put out card outputCard(formatType, numberFields, output, " ", columnNames[i], outputValue, outputRow); numberFields = 0; } int j; int numberEntries = lengths[i]; CoinBigIndex start = starts[i]; for (j = 0; j < numberEntries; j++) { tempRow[j] = rows[start + j]; tempValue[j] = elements[start + j]; } CoinSort_2(tempRow, tempRow + numberEntries, tempValue); for (j = 0; j < numberEntries; j++) { int jRow = tempRow[j]; double value = tempValue[j]; if (value && !stringRow[jRow]) { convertDouble(0, formatType, value, outputValue[numberFields], rowNames[jRow], outputRow[numberFields]); numberFields++; if (numberFields == numberAcross) { // put out card outputCard(formatType, numberFields, output, " ", columnNames[i], outputValue, outputRow); numberFields = 0; } } } if (numberFields) { // put out card outputCard(formatType, numberFields, output, " ", columnNames[i], outputValue, outputRow); } } // end see if any strings if (i == nextColumnString) { int iColumn = nextColumnString; int iRow = nextRowString; while (iColumn == nextColumnString) { double value = 1.0; convertDouble(0, formatType, value, outputValue[0], rowNames[nextRowString], outputRow[0]); strcpyeq(outputValue[0], nextString); // put out card outputCard(formatType, 1, output, " ", columnNames[i], outputValue, outputRow); stringRow[iRow] = 0; decodeString(++whichString, nextRowString, nextColumnString, nextString); } } } delete[] tempRow; delete[] tempValue; delete[] stringRow; bool ifRange = false; // RHS writeString(output, "RHS\n"); int numberFields = 0; // If there is any offset - then do that if (objectiveOffset_) { convertDouble(1, formatType, objectiveOffset_, outputValue[0], objrow, outputRow[0]); numberFields++; if (numberFields == numberAcross) { // put out card outputCard(formatType, numberFields, output, " ", "RHS", outputValue, outputRow); numberFields = 0; } } for (i = 0; i < numberRows_; i++) { double value; switch (sense[i]) { case 'E': value = rowLower[i]; break; case 'R': value = rowUpper[i]; ifRange = true; break; case 'L': value = rowUpper[i]; break; case 'G': value = rowLower[i]; break; default: value = 0.0; break; } if (value != 0.0) { convertDouble(1, formatType, value, outputValue[numberFields], rowNames[i], outputRow[numberFields]); if (i == nextRowString && nextColumnString >= numberColumns_) { strcpyeq(outputValue[0], nextString); decodeString(++whichString, nextRowString, nextColumnString, nextString); } numberFields++; if (numberFields == numberAcross) { // put out card outputCard(formatType, numberFields, output, " ", "RHS", outputValue, outputRow); numberFields = 0; } } } if (numberFields) { // put out card outputCard(formatType, numberFields, output, " ", "RHS", outputValue, outputRow); } if (ifRange) { // RANGES writeString(output, "RANGES\n"); numberFields = 0; for (i = 0; i < numberRows_; i++) { if (sense[i] == 'R') { double value = rowUpper[i] - rowLower[i]; if (value < 1.0e30) { convertDouble(1, formatType, value, outputValue[numberFields], rowNames[i], outputRow[numberFields]); numberFields++; if (numberFields == numberAcross) { // put out card outputCard(formatType, numberFields, output, " ", "RANGE", outputValue, outputRow); numberFields = 0; } } } } if (numberFields) { // put out card outputCard(formatType, numberFields, output, " ", "RANGE", outputValue, outputRow); } } delete[] sense; if (ifBounds) { // BOUNDS writeString(output, "BOUNDS\n"); for (i = 0; i < numberColumns_; i++) { if (i == nextColumnString) { // just lo and up if (columnLower[i] == STRING_VALUE) { assert(nextRowString == numberRows_ + 1); convertDouble(2, formatType, 1.0, outputValue[0], columnNames[i], outputRow[0]); strcpyeq(outputValue[0], nextString); decodeString(++whichString, nextRowString, nextColumnString, nextString); if (i == nextColumnString) { assert(columnUpper[i] == STRING_VALUE); assert(nextRowString == numberRows_ + 2); if (!strcmp(nextString, outputValue[0])) { // put out card FX outputCard(formatType, 1, output, " FX ", "BOUND", outputValue, outputRow); } else { // put out card LO outputCard(formatType, 1, output, " LO ", "BOUND", outputValue, outputRow); // put out card UP strcpyeq(outputValue[0], nextString); outputCard(formatType, 1, output, " UP ", "BOUND", outputValue, outputRow); } decodeString(++whichString, nextRowString, nextColumnString, nextString); } else { // just LO // put out card LO outputCard(formatType, 1, output, " LO ", "BOUND", outputValue, outputRow); } } else if (columnUpper[i] == STRING_VALUE) { assert(nextRowString == numberRows_ + 2); convertDouble(2, formatType, 1.0, outputValue[0], columnNames[i], outputRow[0]); strcpyeq(outputValue[0], nextString); outputCard(formatType, 1, output, " UP ", "BOUND", outputValue, outputRow); decodeString(++whichString, nextRowString, nextColumnString, nextString); } continue; } if (objective[i] || lengths[i]) { // see if bound will be needed if (columnLower[i] || columnUpper[i] < largeValue || isInteger(i)) { double lowerValue = columnLower[i]; double upperValue = columnUpper[i]; if (isInteger(i)) { // Old argument - what are correct ranges for integer variables lowerValue = CoinMax(lowerValue, -MAX_INTEGER); upperValue = CoinMin(upperValue, MAX_INTEGER); } int numberFields = 1; std::string header[2]; double value[2]; if (lowerValue <= -largeValue) { // FR or MI if (upperValue >= largeValue && !isInteger(i)) { header[0] = " FR "; value[0] = largeValue; } else { header[0] = " MI "; value[0] = -largeValue; if (!isInteger(i)) header[1] = " UP "; else header[1] = " UI "; if (upperValue < largeValue) value[1] = upperValue; else value[1] = largeValue; numberFields = 2; } } else if (fabs(upperValue - lowerValue) < 1.0e-8) { header[0] = " FX "; value[0] = lowerValue; } else { // do LO if needed if (lowerValue || isIntegerOrSemiContinuous(i) > 2) { // LO header[0] = " LO "; value[0] = lowerValue; if (isIntegerOrSemiContinuous(i) > 2) { if (lowerValue) { if (isIntegerOrSemiContinuous(i) == 4) header[0] = " LI "; numberFields = 2; } header[numberFields - 1] = " SC "; if (upperValue < largeValue) value[numberFields - 1] = upperValue; else value[numberFields - 1] = largeValue; } else if (isInteger(i)) { // Integer variable so UI header[1] = " UI "; if (upperValue < largeValue) value[1] = upperValue; else value[1] = largeValue; numberFields = 2; } else if (upperValue < largeValue) { // UP header[1] = " UP "; value[1] = upperValue; numberFields = 2; } } else { if (isInteger(i)) { // Integer variable so BV or UI if (fabs(upperValue - 1.0) < 1.0e-8) { // BV header[0] = " BV "; value[0] = 1.0; } else { // UI header[0] = " UI "; if (upperValue < largeValue) value[0] = upperValue; else value[0] = largeValue; } } else { // UP header[0] = " UP "; value[0] = upperValue; } } } // put out fields int j; for (j = 0; j < numberFields; j++) { convertDouble(2, formatType, value[j], outputValue[0], columnNames[i], outputRow[0]); // put out card outputCard(formatType, 1, output, header[j], "BOUND", outputValue, outputRow); } } } } } // do any quadratic part if (quadratic) { writeString(output, "QUADOBJ\n"); const int *columnQuadratic = quadratic->getIndices(); const CoinBigIndex *columnQuadraticStart = quadratic->getVectorStarts(); const int *columnQuadraticLength = quadratic->getVectorLengths(); const double *quadraticElement = quadratic->getElements(); for (int iColumn = 0; iColumn < numberColumns_; iColumn++) { int numberFields = 0; for (CoinBigIndex j = columnQuadraticStart[iColumn]; j < columnQuadraticStart[iColumn] + columnQuadraticLength[iColumn]; j++) { int jColumn = columnQuadratic[j]; double elementValue = quadraticElement[j]; convertDouble(0, formatType, elementValue, outputValue[numberFields], columnNames[jColumn], outputRow[numberFields]); numberFields++; if (numberFields == numberAcross) { // put out card outputCard(formatType, numberFields, output, " ", columnNames[iColumn], outputValue, outputRow); numberFields = 0; } } if (numberFields) { // put out card outputCard(formatType, numberFields, output, " ", columnNames[iColumn], outputValue, outputRow); } } } // SOS if (numberSOS) { writeString(output, "SOS\n"); for (int i = 0; i < numberSOS; i++) { int type = setInfo[i].setType(); writeString(output, (type == 1) ? " S1\n" : " S2\n"); int n = setInfo[i].numberEntries(); const int *which = setInfo[i].which(); const double *weights = setInfo[i].weights(); for (int j = 0; j < n; j++) { int k = which[j]; convertDouble(2, formatType, weights ? weights[j] : COIN_DBL_MAX, outputValue[0], "", outputRow[0]); // put out card outputCard(formatType, 1, output, " ", columnNames[k], outputValue, outputRow); } } } // and finish writeString(output, "ENDATA\n"); free(objrow); delete output; setlocale(LC_ALL, saveLocale); free(saveLocale); return 0; } //------------------------------------------------------------------ // Problem name const char *CoinMpsIO::getProblemName() const { return problemName_; } // Objective name const char *CoinMpsIO::getObjectiveName() const { return objectiveName_; } // Rhs name const char *CoinMpsIO::getRhsName() const { return rhsName_; } // Range name const char *CoinMpsIO::getRangeName() const { return rangeName_; } // Bound name const char *CoinMpsIO::getBoundName() const { return boundName_; } //------------------------------------------------------------------ // Get number of rows, columns and elements //------------------------------------------------------------------ int CoinMpsIO::getNumCols() const { return numberColumns_; } int CoinMpsIO::getNumRows() const { return numberRows_; } CoinBigIndex CoinMpsIO::getNumElements() const { return numberElements_; } //------------------------------------------------------------------ // Get pointer to column lower and upper bounds. //------------------------------------------------------------------ const double *CoinMpsIO::getColLower() const { return collower_; } const double *CoinMpsIO::getColUpper() const { return colupper_; } //------------------------------------------------------------------ // Get pointer to row lower and upper bounds. //------------------------------------------------------------------ const double *CoinMpsIO::getRowLower() const { return rowlower_; } const double *CoinMpsIO::getRowUpper() const { return rowupper_; } /** A quick inlined function to convert from lb/ub style constraint definition to sense/rhs/range style */ inline void CoinMpsIO::convertBoundToSense(const double lower, const double upper, char &sense, double &right, double &range) const { range = 0.0; if (lower > -infinity_) { if (upper < infinity_) { right = upper; if (upper == lower) { sense = 'E'; } else { sense = 'R'; range = upper - lower; } } else { sense = 'G'; right = lower; } } else { if (upper < infinity_) { sense = 'L'; right = upper; } else { sense = 'N'; right = 0.0; } } } //----------------------------------------------------------------------------- /** A quick inlined function to convert from sense/rhs/range stryle constraint definition to lb/ub style */ inline void CoinMpsIO::convertSenseToBound(const char sense, const double right, const double range, double &lower, double &upper) const { switch (sense) { case 'E': lower = upper = right; break; case 'L': lower = -infinity_; upper = right; break; case 'G': lower = right; upper = infinity_; break; case 'R': lower = right - range; upper = right; break; case 'N': lower = -infinity_; upper = infinity_; break; } } //------------------------------------------------------------------ // Get sense of row constraints. //------------------------------------------------------------------ const char *CoinMpsIO::getRowSense() const { if (rowsense_ == NULL) { int nr = numberRows_; rowsense_ = reinterpret_cast< char * >(malloc(nr * sizeof(char))); double dum1, dum2; int i; for (i = 0; i < nr; i++) { convertBoundToSense(rowlower_[i], rowupper_[i], rowsense_[i], dum1, dum2); } } return rowsense_; } //------------------------------------------------------------------ // Get the rhs of rows. //------------------------------------------------------------------ const double *CoinMpsIO::getRightHandSide() const { if (rhs_ == NULL) { int nr = numberRows_; rhs_ = reinterpret_cast< double * >(malloc(nr * sizeof(double))); char dum1; double dum2; int i; for (i = 0; i < nr; i++) { convertBoundToSense(rowlower_[i], rowupper_[i], dum1, rhs_[i], dum2); } } return rhs_; } //------------------------------------------------------------------ // Get the range of rows. // Length of returned vector is getNumRows(); //------------------------------------------------------------------ const double *CoinMpsIO::getRowRange() const { if (rowrange_ == NULL) { int nr = numberRows_; rowrange_ = reinterpret_cast< double * >(malloc(nr * sizeof(double))); std::fill(rowrange_, rowrange_ + nr, 0.0); char dum1; double dum2; int i; for (i = 0; i < nr; i++) { convertBoundToSense(rowlower_[i], rowupper_[i], dum1, dum2, rowrange_[i]); } } return rowrange_; } const double *CoinMpsIO::getObjCoefficients() const { return objective_; } //------------------------------------------------------------------ // Create a row copy of the matrix ... //------------------------------------------------------------------ const CoinPackedMatrix *CoinMpsIO::getMatrixByRow() const { if (matrixByRow_ == NULL && matrixByColumn_) { matrixByRow_ = new CoinPackedMatrix(*matrixByColumn_); matrixByRow_->reverseOrdering(); } return matrixByRow_; } //------------------------------------------------------------------ // Create a column copy of the matrix ... //------------------------------------------------------------------ const CoinPackedMatrix *CoinMpsIO::getMatrixByCol() const { return matrixByColumn_; } //------------------------------------------------------------------ // Save the data ... //------------------------------------------------------------------ void CoinMpsIO::setMpsDataWithoutRowAndColNames( const CoinPackedMatrix &m, const double infinity, const double *collb, const double *colub, const double *obj, const char *integrality, const double *rowlb, const double *rowub) { freeAll(); if (m.isColOrdered()) { matrixByColumn_ = new CoinPackedMatrix(m); } else { matrixByColumn_ = new CoinPackedMatrix; matrixByColumn_->reverseOrderedCopyOf(m); } numberColumns_ = matrixByColumn_->getNumCols(); numberRows_ = matrixByColumn_->getNumRows(); numberElements_ = matrixByColumn_->getNumElements(); defaultBound_ = 1; infinity_ = infinity; objectiveOffset_ = 0; rowlower_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); rowupper_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); collower_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); colupper_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); objective_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); std::copy(rowlb, rowlb + numberRows_, rowlower_); std::copy(rowub, rowub + numberRows_, rowupper_); std::copy(collb, collb + numberColumns_, collower_); std::copy(colub, colub + numberColumns_, colupper_); std::copy(obj, obj + numberColumns_, objective_); if (integrality) { integerType_ = reinterpret_cast< char * >(malloc(numberColumns_ * sizeof(char))); std::copy(integrality, integrality + numberColumns_, integerType_); } else { integerType_ = NULL; } problemName_ = CoinStrdup(""); objectiveName_ = CoinStrdup(""); rhsName_ = CoinStrdup(""); rangeName_ = CoinStrdup(""); boundName_ = CoinStrdup(""); } void CoinMpsIO::setMpsDataColAndRowNames( char const *const *const colnames, char const *const *const rownames) { releaseRowNames(); releaseColumnNames(); // If long names free format names_[0] = reinterpret_cast< char ** >(malloc(numberRows_ * sizeof(char *))); names_[1] = reinterpret_cast< char ** >(malloc(numberColumns_ * sizeof(char *))); numberHash_[0] = numberRows_; numberHash_[1] = numberColumns_; char **rowNames = names_[0]; char **columnNames = names_[1]; int i; // so we can adjust for long names int lengthMalloc = 9; int maxIndex = 10000000; if (rownames) { for (i = 0; i < numberRows_; ++i) { if (i == maxIndex) { lengthMalloc++; maxIndex *= 10; } if (rownames[i]) { rowNames[i] = CoinStrdup(rownames[i]); } else { rowNames[i] = reinterpret_cast< char * >(malloc(lengthMalloc * sizeof(char))); sprintf(rowNames[i], "R%7.7d", i); } } } else { for (i = 0; i < numberRows_; ++i) { if (i == maxIndex) { lengthMalloc++; maxIndex *= 10; } rowNames[i] = reinterpret_cast< char * >(malloc(lengthMalloc * sizeof(char))); sprintf(rowNames[i], "R%7.7d", i); } } #ifndef NONAMES lengthMalloc = 9; maxIndex = 10000000; if (colnames) { for (i = 0; i < numberColumns_; ++i) { if (i == maxIndex) { lengthMalloc++; maxIndex *= 10; } if (colnames[i]) { columnNames[i] = CoinStrdup(colnames[i]); } else { columnNames[i] = reinterpret_cast< char * >(malloc(lengthMalloc * sizeof(char))); sprintf(columnNames[i], "C%7.7d", i); } } } else { for (i = 0; i < numberColumns_; ++i) { if (i == maxIndex) { lengthMalloc++; maxIndex *= 10; } columnNames[i] = reinterpret_cast< char * >(malloc(lengthMalloc * sizeof(char))); sprintf(columnNames[i], "C%7.7d", i); } } #else const double *objective = getObjCoefficients(); const CoinPackedMatrix *matrix = getMatrixByCol(); const int *lengths = matrix->getVectorLengths(); int k = 0; for (i = 0; i < numberColumns_; ++i) { columnNames[i] = reinterpret_cast< char * >(malloc(9 * sizeof(char))); sprintf(columnNames[i], "C%7.7d", k); if (objective[i] || lengths[i]) k++; } #endif } void CoinMpsIO::setMpsDataColAndRowNames( const std::vector< std::string > &colnames, const std::vector< std::string > &rownames) { // If long names free format names_[0] = reinterpret_cast< char ** >(malloc(numberRows_ * sizeof(char *))); names_[1] = reinterpret_cast< char ** >(malloc(numberColumns_ * sizeof(char *))); char **rowNames = names_[0]; char **columnNames = names_[1]; int i; if (rownames.size() != 0) { for (i = 0; i < numberRows_; ++i) { rowNames[i] = CoinStrdup(rownames[i].c_str()); } } else { // so we can adjust for long names int lengthMalloc = 9; int maxIndex = 10000000; for (i = 0; i < numberRows_; ++i) { if (i == maxIndex) { lengthMalloc++; maxIndex *= 10; } rowNames[i] = reinterpret_cast< char * >(malloc(lengthMalloc * sizeof(char))); sprintf(rowNames[i], "R%7.7d", i); } } if (colnames.size() != 0) { for (i = 0; i < numberColumns_; ++i) { columnNames[i] = CoinStrdup(colnames[i].c_str()); } } else { // so we can adjust for long names int lengthMalloc = 9; int maxIndex = 10000000; for (i = 0; i < numberColumns_; ++i) { if (i == maxIndex) { lengthMalloc++; maxIndex *= 10; } columnNames[i] = reinterpret_cast< char * >(malloc(lengthMalloc * sizeof(char))); sprintf(columnNames[i], "C%7.7d", i); } } } void CoinMpsIO::setMpsData(const CoinPackedMatrix &m, const double infinity, const double *collb, const double *colub, const double *obj, const char *integrality, const double *rowlb, const double *rowub, char const *const *const colnames, char const *const *const rownames) { setMpsDataWithoutRowAndColNames(m, infinity, collb, colub, obj, integrality, rowlb, rowub); setMpsDataColAndRowNames(colnames, rownames); } void CoinMpsIO::setMpsData(const CoinPackedMatrix &m, const double infinity, const double *collb, const double *colub, const double *obj, const char *integrality, const double *rowlb, const double *rowub, const std::vector< std::string > &colnames, const std::vector< std::string > &rownames) { setMpsDataWithoutRowAndColNames(m, infinity, collb, colub, obj, integrality, rowlb, rowub); setMpsDataColAndRowNames(colnames, rownames); } void CoinMpsIO::setMpsData(const CoinPackedMatrix &m, const double infinity, const double *collb, const double *colub, const double *obj, const char *integrality, const char *rowsen, const double *rowrhs, const double *rowrng, char const *const *const colnames, char const *const *const rownames) { const int numrows = m.getNumRows(); double *rlb = numrows ? new double[numrows] : 0; double *rub = numrows ? new double[numrows] : 0; for (int i = 0; i < numrows; ++i) { convertSenseToBound(rowsen[i], rowrhs[i], rowrng[i], rlb[i], rub[i]); } setMpsData(m, infinity, collb, colub, obj, integrality, rlb, rub, colnames, rownames); delete[] rlb; delete[] rub; } void CoinMpsIO::setMpsData(const CoinPackedMatrix &m, const double infinity, const double *collb, const double *colub, const double *obj, const char *integrality, const char *rowsen, const double *rowrhs, const double *rowrng, const std::vector< std::string > &colnames, const std::vector< std::string > &rownames) { const int numrows = m.getNumRows(); double *rlb = numrows ? new double[numrows] : 0; double *rub = numrows ? new double[numrows] : 0; for (int i = 0; i < numrows; ++i) { convertSenseToBound(rowsen[i], rowrhs[i], rowrng[i], rlb[i], rub[i]); } setMpsData(m, infinity, collb, colub, obj, integrality, rlb, rub, colnames, rownames); delete[] rlb; delete[] rub; } void CoinMpsIO::setProblemName(const char *name) { free(problemName_); problemName_ = CoinStrdup(name); } void CoinMpsIO::setObjectiveName(const char *name) { free(objectiveName_); objectiveName_ = CoinStrdup(name); } //------------------------------------------------------------------ // Return true if column is a continuous, binary, ... //------------------------------------------------------------------ bool CoinMpsIO::isContinuous(int columnNumber) const { const char *intType = integerType_; if (intType == NULL) return true; assert(columnNumber >= 0 && columnNumber < numberColumns_); if (intType[columnNumber] == 0) return true; return false; } /* Return true if column is integer. Note: This function returns true if the the column is binary or a general integer. */ bool CoinMpsIO::isInteger(int columnNumber) const { const char *intType = integerType_; if (intType == NULL) return false; assert(columnNumber >= 0 && columnNumber < numberColumns_); if (intType[columnNumber] != 0) return true; return false; } /* Return 1 if column is integer, 2 if optional, 3 if semi-continuous, 4 if semi-continous integer. Note: This function returns 1 if the column is binary or a general integer. */ int CoinMpsIO::isIntegerOrSemiContinuous(int columnNumber) const { const char *intType = integerType_; if (intType == NULL) return false; assert(columnNumber >= 0 && columnNumber < numberColumns_); return intType[columnNumber]; } // if integer const char *CoinMpsIO::integerColumns() const { return integerType_; } // Pass in array saying if each variable integer void CoinMpsIO::copyInIntegerInformation(const char *integerType) { if (integerType) { if (!integerType_) integerType_ = reinterpret_cast< char * >(malloc(numberColumns_ * sizeof(char))); memcpy(integerType_, integerType, numberColumns_); } else { free(integerType_); integerType_ = NULL; } } // names - returns NULL if out of range const char *CoinMpsIO::rowName(int index) const { if (index >= 0 && index < numberRows_) { return names_[0][index]; } else { return NULL; } } const char *CoinMpsIO::columnName(int index) const { if (index >= 0 && index < numberColumns_) { return names_[1][index]; } else { return NULL; } } // names - returns -1 if name not found int CoinMpsIO::rowIndex(const char *name) const { if (!hash_[0]) { if (numberRows_) { startHash(0); } else { return -1; } } return findHash(name, 0); } int CoinMpsIO::columnIndex(const char *name) const { if (!hash_[1]) { if (numberColumns_) { startHash(1); } else { return -1; } } return findHash(name, 1); } // Release all row information (lower, upper) void CoinMpsIO::releaseRowInformation() { free(rowlower_); free(rowupper_); rowlower_ = NULL; rowupper_ = NULL; } // Release all column information (lower, upper, objective) void CoinMpsIO::releaseColumnInformation() { free(collower_); free(colupper_); free(objective_); collower_ = NULL; colupper_ = NULL; objective_ = NULL; } // Release integer information void CoinMpsIO::releaseIntegerInformation() { free(integerType_); integerType_ = NULL; } // Release row names void CoinMpsIO::releaseRowNames() { releaseRedundantInformation(); int i; for (i = 0; i < numberHash_[0]; i++) { free(names_[0][i]); } free(names_[0]); names_[0] = NULL; numberHash_[0] = 0; } // Release column names void CoinMpsIO::releaseColumnNames() { releaseRedundantInformation(); int i; for (i = 0; i < numberHash_[1]; i++) { free(names_[1][i]); } free(names_[1]); names_[1] = NULL; numberHash_[1] = 0; } // Release matrix information void CoinMpsIO::releaseMatrixInformation() { releaseRedundantInformation(); delete matrixByColumn_; matrixByColumn_ = NULL; } //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinMpsIO::CoinMpsIO() : problemName_(CoinStrdup("")) , objectiveName_(CoinStrdup("")) , rhsName_(CoinStrdup("")) , rangeName_(CoinStrdup("")) , boundName_(CoinStrdup("")) , numberRows_(0) , numberColumns_(0) , numberElements_(0) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , matrixByRow_(NULL) , matrixByColumn_(NULL) , rowlower_(NULL) , rowupper_(NULL) , collower_(NULL) , colupper_(NULL) , objective_(NULL) , objectiveOffset_(0.0) , integerType_(NULL) , fileName_(CoinStrdup("????")) , defaultBound_(1) , infinity_(COIN_DBL_MAX) , smallElement_(1.0e-14) , defaultHandler_(true) , cardReader_(NULL) , convertObjective_(false) , allowStringElements_(0) , maximumStringElements_(0) , numberStringElements_(0) , stringElements_(NULL) { numberHash_[0] = 0; hash_[0] = NULL; names_[0] = NULL; numberHash_[1] = 0; hash_[1] = NULL; names_[1] = NULL; handler_ = new CoinMessageHandler(); messages_ = CoinMessage(); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinMpsIO::CoinMpsIO(const CoinMpsIO &rhs) : problemName_(CoinStrdup("")) , objectiveName_(CoinStrdup("")) , rhsName_(CoinStrdup("")) , rangeName_(CoinStrdup("")) , boundName_(CoinStrdup("")) , numberRows_(0) , numberColumns_(0) , numberElements_(0) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , matrixByRow_(NULL) , matrixByColumn_(NULL) , rowlower_(NULL) , rowupper_(NULL) , collower_(NULL) , colupper_(NULL) , objective_(NULL) , objectiveOffset_(0.0) , integerType_(NULL) , fileName_(CoinStrdup("????")) , defaultBound_(1) , infinity_(COIN_DBL_MAX) , smallElement_(1.0e-14) , defaultHandler_(true) , cardReader_(NULL) , allowStringElements_(rhs.allowStringElements_) , maximumStringElements_(rhs.maximumStringElements_) , numberStringElements_(rhs.numberStringElements_) , stringElements_(NULL) { numberHash_[0] = 0; hash_[0] = NULL; names_[0] = NULL; numberHash_[1] = 0; hash_[1] = NULL; names_[1] = NULL; if (rhs.rowlower_ != NULL || rhs.collower_ != NULL) { gutsOfCopy(rhs); // OK and proper to leave rowsense_, rhs_, and // rowrange_ (also row copy and hash) to NULL. They will be constructed // if they are required. } defaultHandler_ = rhs.defaultHandler_; if (defaultHandler_) handler_ = new CoinMessageHandler(*rhs.handler_); else handler_ = rhs.handler_; messages_ = CoinMessage(); } void CoinMpsIO::gutsOfCopy(const CoinMpsIO &rhs) { defaultHandler_ = rhs.defaultHandler_; if (rhs.matrixByColumn_) matrixByColumn_ = new CoinPackedMatrix(*(rhs.matrixByColumn_)); numberElements_ = rhs.numberElements_; numberRows_ = rhs.numberRows_; numberColumns_ = rhs.numberColumns_; convertObjective_ = rhs.convertObjective_; if (rhs.rowlower_) { rowlower_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); rowupper_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); memcpy(rowlower_, rhs.rowlower_, numberRows_ * sizeof(double)); memcpy(rowupper_, rhs.rowupper_, numberRows_ * sizeof(double)); } if (rhs.collower_) { collower_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); colupper_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); objective_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); memcpy(collower_, rhs.collower_, numberColumns_ * sizeof(double)); memcpy(colupper_, rhs.colupper_, numberColumns_ * sizeof(double)); memcpy(objective_, rhs.objective_, numberColumns_ * sizeof(double)); } if (rhs.integerType_) { integerType_ = reinterpret_cast< char * >(malloc(numberColumns_ * sizeof(char))); memcpy(integerType_, rhs.integerType_, numberColumns_ * sizeof(char)); } free(fileName_); free(problemName_); free(objectiveName_); free(rhsName_); free(rangeName_); free(boundName_); fileName_ = CoinStrdup(rhs.fileName_); problemName_ = CoinStrdup(rhs.problemName_); objectiveName_ = CoinStrdup(rhs.objectiveName_); rhsName_ = CoinStrdup(rhs.rhsName_); rangeName_ = CoinStrdup(rhs.rangeName_); boundName_ = CoinStrdup(rhs.boundName_); numberHash_[0] = rhs.numberHash_[0]; numberHash_[1] = rhs.numberHash_[1]; defaultBound_ = rhs.defaultBound_; infinity_ = rhs.infinity_; smallElement_ = rhs.smallElement_; objectiveOffset_ = rhs.objectiveOffset_; int section; for (section = 0; section < 2; section++) { if (numberHash_[section]) { char **names2 = rhs.names_[section]; names_[section] = reinterpret_cast< char ** >(malloc(numberHash_[section] * sizeof(char *))); char **names = names_[section]; int i; for (i = 0; i < numberHash_[section]; i++) { names[i] = CoinStrdup(names2[i]); } } } allowStringElements_ = rhs.allowStringElements_; maximumStringElements_ = rhs.maximumStringElements_; numberStringElements_ = rhs.numberStringElements_; if (numberStringElements_) { stringElements_ = new char *[maximumStringElements_]; for (int i = 0; i < numberStringElements_; i++) stringElements_[i] = CoinStrdup(rhs.stringElements_[i]); } else { stringElements_ = NULL; } } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinMpsIO::~CoinMpsIO() { gutsOfDestructor(); } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinMpsIO & CoinMpsIO::operator=(const CoinMpsIO &rhs) { if (this != &rhs) { gutsOfDestructor(); if (rhs.rowlower_ != NULL || rhs.collower_ != NULL) { gutsOfCopy(rhs); } defaultHandler_ = rhs.defaultHandler_; if (defaultHandler_) handler_ = new CoinMessageHandler(*rhs.handler_); else handler_ = rhs.handler_; messages_ = CoinMessage(); } return *this; } //------------------------------------------------------------------- void CoinMpsIO::gutsOfDestructor() { freeAll(); if (defaultHandler_) { delete handler_; handler_ = NULL; } delete cardReader_; cardReader_ = NULL; } void CoinMpsIO::freeAll() { releaseRedundantInformation(); releaseRowNames(); releaseColumnNames(); delete matrixByRow_; delete matrixByColumn_; matrixByRow_ = NULL; matrixByColumn_ = NULL; free(rowlower_); free(rowupper_); free(collower_); free(colupper_); free(objective_); free(integerType_); free(fileName_); rowlower_ = NULL; rowupper_ = NULL; collower_ = NULL; colupper_ = NULL; objective_ = NULL; integerType_ = NULL; fileName_ = NULL; free(problemName_); free(objectiveName_); free(rhsName_); free(rangeName_); free(boundName_); problemName_ = NULL; objectiveName_ = NULL; rhsName_ = NULL; rangeName_ = NULL; boundName_ = NULL; for (int i = 0; i < numberStringElements_; i++) free(stringElements_[i]); delete[] stringElements_; } /* Release all information which can be re-calculated e.g. rowsense also any row copies OR hash tables for names */ void CoinMpsIO::releaseRedundantInformation() { free(rowsense_); free(rhs_); free(rowrange_); rowsense_ = NULL; rhs_ = NULL; rowrange_ = NULL; delete[] hash_[0]; delete[] hash_[1]; hash_[0] = 0; hash_[1] = 0; delete matrixByRow_; matrixByRow_ = NULL; } // Pass in Message handler (not deleted at end) void CoinMpsIO::passInMessageHandler(CoinMessageHandler *handler) { if (defaultHandler_) delete handler_; defaultHandler_ = false; handler_ = handler; } // Set language void CoinMpsIO::newLanguage(CoinMessages::Language language) { messages_ = CoinMessage(language); } /* Read in a quadratic objective from the given filename. If filename is NULL then continues reading from previous file. If not then the previous file is closed. No assumption is made on symmetry, positive definite etc. No check is made for duplicates or non-triangular Returns number of errors */ int CoinMpsIO::readQuadraticMps(const char *filename, CoinBigIndex *&columnStart, int *&column2, double *&elements, int checkSymmetry) { // Deal with filename - +1 if new, 0 if same as before, -1 if error CoinFileInput *input = 0; int returnCode = dealWithFileName(filename, "", input); if (returnCode < 0) { return -1; } else if (returnCode > 0) { delete cardReader_; cardReader_ = new CoinMpsCardReader(input, this); } // See if QUADOBJ just found if (!filename && cardReader_->whichSection() == COIN_QUAD_SECTION) { cardReader_->setWhichSection(COIN_QUAD_SECTION); } else if (cardReader_->whichSection() == COIN_CONIC_SECTION) { return -3; } else { cardReader_->readToNextSection(); // Skip NAME if (cardReader_->whichSection() == COIN_NAME_SECTION) cardReader_->readToNextSection(); if (cardReader_->whichSection() == COIN_QUAD_SECTION) { // save name of section free(problemName_); problemName_ = CoinStrdup(cardReader_->columnName()); } else if (cardReader_->whichSection() == COIN_EOF_SECTION) { handler_->message(COIN_MPS_EOF, messages_) << fileName_ << CoinMessageEol; return -3; } else { handler_->message(COIN_MPS_BADFILE1, messages_) << cardReader_->card() << cardReader_->cardNumber() << fileName_ << CoinMessageEol; return -2; } } int numberErrors = 0; // Guess at size of data int maximumNonZeros = 5 * numberColumns_; // Use malloc so can use realloc int *column = reinterpret_cast< int * >(malloc(maximumNonZeros * sizeof(int))); int *column2Temp = reinterpret_cast< int * >(malloc(maximumNonZeros * sizeof(int))); double *elementTemp = reinterpret_cast< double * >(malloc(maximumNonZeros * sizeof(double))); startHash(1); int numberElements = 0; while (cardReader_->nextField() == COIN_QUAD_SECTION) { switch (cardReader_->mpsType()) { case COIN_BLANK_COLUMN: if (fabs(cardReader_->value()) > smallElement_) { if (numberElements == maximumNonZeros) { maximumNonZeros = (3 * maximumNonZeros) / 2 + 1000; column = reinterpret_cast< COINColumnIndex * >(realloc(column, maximumNonZeros * sizeof(COINColumnIndex))); column2Temp = reinterpret_cast< COINColumnIndex * >(realloc(column2Temp, maximumNonZeros * sizeof(COINColumnIndex))); elementTemp = reinterpret_cast< double * >(realloc(elementTemp, maximumNonZeros * sizeof(double))); } // get indices COINColumnIndex iColumn1 = findHash(cardReader_->columnName(), 1); COINColumnIndex iColumn2 = findHash(cardReader_->rowName(), 1); if (iColumn1 >= 0) { if (iColumn2 >= 0) { double value = cardReader_->value(); column[numberElements] = iColumn1; column2Temp[numberElements] = iColumn2; elementTemp[numberElements++] = value; } else { numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_NOMATCHROW, messages_) << cardReader_->rowName() << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } } else { numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_NOMATCHCOL, messages_) << cardReader_->columnName() << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } } break; default: numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_BADIMAGE, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } } if (cardReader_->whichSection() != COIN_ENDATA_SECTION && cardReader_->whichSection() != COIN_CONIC_SECTION) { handler_->message(COIN_MPS_BADIMAGE, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors + 100000; } stopHash(1); // Do arrays as new [] and make column ordered columnStart = new CoinBigIndex[numberColumns_ + 1]; // for counts CoinBigIndex *count = new CoinBigIndex[numberColumns_]; memset(count, 0, numberColumns_ * sizeof(CoinBigIndex)); CoinBigIndex i; // See about lower triangular if (checkSymmetry && numberErrors) checkSymmetry = 2; // force corrections if (checkSymmetry) { if (checkSymmetry == 1) { // just check lower triangular for (i = 0; i < numberElements; i++) { int iColumn = column[i]; int iColumn2 = column2Temp[i]; if (iColumn2 < iColumn) { numberErrors = -4; column[i] = iColumn2; column2Temp[i] = iColumn; } } } else { // make lower triangular for (i = 0; i < numberElements; i++) { int iColumn = column[i]; int iColumn2 = column2Temp[i]; if (iColumn2 < iColumn) { column[i] = iColumn2; column2Temp[i] = iColumn; } } } } for (i = 0; i < numberElements; i++) { int iColumn = column[i]; count[iColumn]++; } // Do starts CoinBigIndex number = 0; columnStart[0] = 0; for (i = 0; i < numberColumns_; i++) { number += count[i]; count[i] = columnStart[i]; columnStart[i + 1] = number; } column2 = new int[numberElements]; elements = new double[numberElements]; // Get column ordering for (i = 0; i < numberElements; i++) { int iColumn = column[i]; int iColumn2 = column2Temp[i]; CoinBigIndex put = count[iColumn]; elements[put] = elementTemp[i]; column2[put++] = iColumn2; count[iColumn] = put; } free(column); free(column2Temp); free(elementTemp); // Now in column order - deal with duplicates for (i = 0; i < numberColumns_; i++) count[i] = -1; CoinBigIndex start = 0; number = 0; for (i = 0; i < numberColumns_; i++) { CoinBigIndex j; for (j = start; j < columnStart[i + 1]; j++) { int iColumn2 = column2[j]; if (count[iColumn2] < 0) { count[iColumn2] = j; } else { // duplicate CoinBigIndex iOther = count[iColumn2]; double value = elements[iOther] + elements[j]; elements[iOther] = value; elements[j] = 0.0; } } for (j = start; j < columnStart[i + 1]; j++) { int iColumn2 = column2[j]; count[iColumn2] = -1; double value = elements[j]; if (value) { column2[number] = iColumn2; elements[number++] = value; } } start = columnStart[i + 1]; columnStart[i + 1] = number; } delete[] count; return numberErrors; } /* Read in a list of cones from the given filename. If filename is NULL (or same) then continues reading from previous file. If not then the previous file is closed. Code should be added to general MPS reader to read this if CSECTION No checking is done that in unique cone Arrays should be deleted by delete [] Returns number of errors, -1 bad file, -2 no conic section, -3 empty section columnStart is numberCones+1 long, other number of columns in matrix coneType is 1 for QUAD, 2 for RQUAD (numberCones long) */ int CoinMpsIO::readConicMps(const char *filename, int *&columnStart, int *&column, int *&coneType, int &numberCones) { // Deal with filename - +1 if new, 0 if same as before, -1 if error CoinFileInput *input = 0; int returnCode = dealWithFileName(filename, "", input); if (returnCode < 0) { return -1; } else if (returnCode > 0) { delete cardReader_; cardReader_ = new CoinMpsCardReader(input, this); } // See if CSECTION just found if (!filename && cardReader_->whichSection() == COIN_CONIC_SECTION) { cardReader_->setWhichSection(COIN_CONIC_SECTION); } else { cardReader_->readToNextSection(); // Skip NAME if (cardReader_->whichSection() == COIN_NAME_SECTION) cardReader_->readToNextSection(); if (cardReader_->whichSection() == COIN_CONIC_SECTION) { // looks good } else if (cardReader_->whichSection() == COIN_EOF_SECTION) { handler_->message(COIN_MPS_EOF, messages_) << fileName_ << CoinMessageEol; return -3; } else { handler_->message(COIN_MPS_BADFILE1, messages_) << cardReader_->card() << cardReader_->cardNumber() << fileName_ << CoinMessageEol; return -2; } } numberCones = 0; // Get arrays (some too big, but ...) columnStart = new int[numberColumns_ + 1]; column = new int[numberColumns_]; coneType = new int[numberColumns_]; // check QUAD or RQUAD (by hand) - card has had end stripped const char *quad = cardReader_->card() + strlen(cardReader_->card()) - 4; // Should be QUAD but if not don't complain int type = 1; if (!strcmp(quad, "QUAD")) { if (*(quad - 1) == 'R') type = 2; } coneType[0] = type; int numberErrors = 0; columnStart[0] = 0; int numberElements = 0; startHash(1); while (cardReader_->nextField() == COIN_CONIC_SECTION) { const char *card = cardReader_->card(); if (!strncmp(card, "CSECTION", 8)) { // check QUAD or RQUAD (by hand) - card has had end stripped const char *quad = card + strlen(card) - 4; // Should be QUAD but if not don't complain int type = 1; if (!strcmp(quad, "QUAD")) { if (*(quad - 1) == 'R') type = 2; } if (numberElements == columnStart[numberCones]) { printf("Cone must have at least one column\n"); abort(); } columnStart[++numberCones] = numberElements; coneType[numberCones] = type; continue; } COINColumnIndex iColumn1; switch (cardReader_->mpsType()) { case COIN_BLANK_COLUMN: // get index iColumn1 = findHash(cardReader_->columnName(), 1); if (iColumn1 >= 0) { column[numberElements++] = iColumn1; } else { numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_NOMATCHCOL, messages_) << cardReader_->columnName() << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } break; default: numberErrors++; if (numberErrors < 100) { handler_->message(COIN_MPS_BADIMAGE, messages_) << cardReader_->cardNumber() << cardReader_->card() << CoinMessageEol; } else if (numberErrors > 100000) { handler_->message(COIN_MPS_RETURNING, messages_) << CoinMessageEol; return numberErrors; } } } if (cardReader_->whichSection() == COIN_ENDATA_SECTION) { // Error if no cones if (!numberElements) { handler_->message(COIN_MPS_EOF, messages_) << fileName_ << CoinMessageEol; delete[] columnStart; delete[] column; delete[] coneType; columnStart = NULL; column = NULL; coneType = NULL; return -3; } else { columnStart[++numberCones] = numberElements; } } else { handler_->message(COIN_MPS_BADFILE1, messages_) << cardReader_->card() << cardReader_->cardNumber() << fileName_ << CoinMessageEol; delete[] columnStart; delete[] column; delete[] coneType; columnStart = NULL; column = NULL; coneType = NULL; return -2; } stopHash(1); return numberErrors; } // Add string to list void CoinMpsIO::addString(int iRow, int iColumn, const char *value) { char id[20]; sprintf(id, "%d,%d,", iRow, iColumn); int n = static_cast< int >(strlen(id) + strlen(value)); if (numberStringElements_ == maximumStringElements_) { maximumStringElements_ = 2 * maximumStringElements_ + 100; char **temp = new char *[maximumStringElements_]; for (int i = 0; i < numberStringElements_; i++) temp[i] = stringElements_[i]; delete[] stringElements_; stringElements_ = temp; } char *line = reinterpret_cast< char * >(malloc(n + 1)); stringElements_[numberStringElements_++] = line; strcpy(line, id); strcat(line, value); } // Decode string void CoinMpsIO::decodeString(int iString, int &iRow, int &iColumn, const char *&value) const { iRow = -1; iColumn = -1; value = NULL; if (iString >= 0 && iString < numberStringElements_) { value = stringElements_[iString]; sscanf(value, "%d,%d,", &iRow, &iColumn); value = strchr(value, ','); assert(value); value++; value = strchr(value, ','); assert(value); value++; } } // copies in strings from a CoinModel - returns number int CoinMpsIO::copyStringElements(const CoinModel *model) { #if COIN_BIG_INDEX == 0 if (!model->stringsExist()) return 0; // no strings assert(!numberStringElements_); /* First columns (including objective==numberRows) then RHS(==numberColumns (+1)) (with rowLower and rowUpper marked) then bounds LO==numberRows+1, UP==numberRows+2 */ int numberColumns = model->numberColumns(); int numberRows = model->numberRows(); int iColumn; for (iColumn = 0; iColumn < numberColumns; iColumn++) { const char *expr = model->getColumnObjectiveAsString(iColumn); if (strcmp(expr, "Numeric")) { addString(numberRows, iColumn, expr); } CoinModelLink triple = model->firstInColumn(iColumn); while (triple.row() >= 0) { int iRow = triple.row(); const char *expr = model->getElementAsString(iRow, iColumn); if (strcmp(expr, "Numeric")) { addString(iRow, iColumn, expr); } triple = model->next(triple); } } int iRow; for (iRow = 0; iRow < numberRows; iRow++) { // for now no ranges const char *expr1 = model->getRowLowerAsString(iRow); const char *expr2 = model->getRowUpperAsString(iRow); if (strcmp(expr1, "Numeric")) { if (rowupper_[iRow] > 1.0e20 && !strcmp(expr2, "Numeric")) { // G row addString(iRow, numberColumns, expr1); rowlower_[iRow] = STRING_VALUE; } else if (!strcmp(expr1, expr2)) { // E row addString(iRow, numberColumns, expr1); rowlower_[iRow] = STRING_VALUE; addString(iRow, numberColumns + 1, expr1); rowupper_[iRow] = STRING_VALUE; } else if (rowlower_[iRow] < -1.0e20 && !strcmp(expr1, "Numeric")) { // L row addString(iRow, numberColumns + 1, expr2); rowupper_[iRow] = STRING_VALUE; } else { // Range printf("Unaable to handle string ranges row %d %s %s\n", iRow, expr1, expr2); abort(); } } } // Bounds for (iColumn = 0; iColumn < numberColumns; iColumn++) { const char *expr = model->getColumnLowerAsString(iColumn); if (strcmp(expr, "Numeric")) { addString(numberRows + 1, iColumn, expr); collower_[iColumn] = STRING_VALUE; } expr = model->getColumnUpperAsString(iColumn); if (strcmp(expr, "Numeric")) { addString(numberRows + 2, iColumn, expr); colupper_[iColumn] = STRING_VALUE; } } return numberStringElements_; #else abort(); return 0; #endif } // Constructor CoinSet::CoinSet(int numberEntries, const int *which) { numberEntries_ = numberEntries; which_ = new int[numberEntries_]; weights_ = NULL; memcpy(which_, which, numberEntries_ * sizeof(int)); setType_ = 1; } // Default constructor CoinSet::CoinSet() { numberEntries_ = 0; which_ = NULL; weights_ = NULL; setType_ = 1; } // Copy constructor CoinSet::CoinSet(const CoinSet &rhs) { numberEntries_ = rhs.numberEntries_; setType_ = rhs.setType_; which_ = CoinCopyOfArray(rhs.which_, numberEntries_); weights_ = CoinCopyOfArray(rhs.weights_, numberEntries_); } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinSet & CoinSet::operator=(const CoinSet &rhs) { if (this != &rhs) { delete[] which_; delete[] weights_; numberEntries_ = rhs.numberEntries_; setType_ = rhs.setType_; which_ = CoinCopyOfArray(rhs.which_, numberEntries_); weights_ = CoinCopyOfArray(rhs.weights_, numberEntries_); } return *this; } // Destructor CoinSet::~CoinSet() { delete[] which_; delete[] weights_; } // Constructor CoinSosSet::CoinSosSet(int numberEntries, const int *which, const double *weights, int type) : CoinSet(numberEntries, which) { weights_ = new double[numberEntries_]; memcpy(weights_, weights, numberEntries_ * sizeof(double)); setType_ = type; double last = weights_[0]; int i; bool allSame = true; for (i = 1; i < numberEntries_; i++) { if (weights_[i] != last) { allSame = false; break; } } if (allSame) { for (i = 0; i < numberEntries_; i++) weights_[i] = i; } } // Destructor CoinSosSet::~CoinSosSet() { } #ifdef USE_SBB #include "SbbModel.hpp" #include "SbbBranchActual.hpp" // returns an object of type SbbObject SbbObject * CoinSosSet::sbbObject(SbbModel *model) const { // which are matrix here - need to put as integer index abort(); return new SbbSOS(model, numberEntries_, which_, weights_, 0, setType_); } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinLpIO.cpp0000644000175200017520000024650413421557502015712 0ustar coincoin/* $Id: CoinLpIO.cpp 2088 2019-01-22 09:15:46Z forrest $ */ // Last edit: 11/5/08 // // Name: CoinLpIO.cpp; Support for Lp files // Author: Francois Margot // Tepper School of Business // Carnegie Mellon University, Pittsburgh, PA 15213 // Date: 12/28/03 //----------------------------------------------------------------------------- // Copyright (C) 2003, Francois Margot, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinUtilsConfig.h" #include #include #include #include #include #include #include "CoinError.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedMatrix.hpp" #include "CoinLpIO.hpp" #include "CoinMpsIO.hpp" #include "CoinFinite.hpp" #include "CoinSort.hpp" using namespace std; //#define LPIO_DEBUG /************************************************************************/ CoinLpIO::CoinLpIO() : problemName_(CoinStrdup("")) , defaultHandler_(true) , numberRows_(0) , numberColumns_(0) , numberElements_(0) , matrixByColumn_(NULL) , matrixByRow_(NULL) , rowlower_(NULL) , rowupper_(NULL) , collower_(NULL) , colupper_(NULL) , rhs_(NULL) , rowrange_(NULL) , rowsense_(NULL) , num_objectives_(0) , integerType_(NULL) , set_(NULL) , numberSets_(0) , fileName_(NULL) , infinity_(COIN_DBL_MAX) , epsilon_(1e-5) , numberAcross_(10) , decimals_(9) , input_(NULL) { for (int j = 0; j < MAX_OBJECTIVES; j++) { objective_[j] = NULL; objName_[j] = NULL; objectiveOffset_[j] = 0; } card_previous_names_[0] = 0; card_previous_names_[1] = 0; previous_names_[0] = NULL; previous_names_[1] = NULL; maxHash_[0] = 0; numberHash_[0] = 0; hash_[0] = NULL; names_[0] = NULL; maxHash_[1] = 0; numberHash_[1] = 0; hash_[1] = NULL; names_[1] = NULL; handler_ = new CoinMessageHandler(); messages_ = CoinMessage(); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinLpIO::CoinLpIO(const CoinLpIO &rhs) : problemName_(CoinStrdup("")) , defaultHandler_(true) , numberRows_(0) , numberColumns_(0) , numberElements_(0) , matrixByColumn_(NULL) , matrixByRow_(NULL) , rowlower_(NULL) , rowupper_(NULL) , collower_(NULL) , colupper_(NULL) , rhs_(NULL) , rowrange_(NULL) , rowsense_(NULL) , integerType_(NULL) , set_(NULL) , numberSets_(0) , fileName_(CoinStrdup("")) , infinity_(COIN_DBL_MAX) , epsilon_(1e-5) , numberAcross_(10) , input_(NULL) { num_objectives_ = rhs.num_objectives_; for (int j = 0; j < MAX_OBJECTIVES; j++) { objective_[j] = NULL; if (j < num_objectives_) { objName_[j] = CoinStrdup(rhs.objName_[j]); } else { objName_[j] = NULL; } objectiveOffset_[j] = 0; } card_previous_names_[0] = 0; card_previous_names_[1] = 0; previous_names_[0] = NULL; previous_names_[1] = NULL; maxHash_[0] = 0; numberHash_[0] = 0; hash_[0] = NULL; names_[0] = NULL; maxHash_[1] = 0; numberHash_[1] = 0; hash_[1] = NULL; names_[1] = NULL; if (rhs.rowlower_ != NULL || rhs.collower_ != NULL) { gutsOfCopy(rhs); } defaultHandler_ = rhs.defaultHandler_; if (defaultHandler_) { handler_ = new CoinMessageHandler(*rhs.handler_); } else { handler_ = rhs.handler_; } messages_ = CoinMessage(); } void CoinLpIO::gutsOfCopy(const CoinLpIO &rhs) { defaultHandler_ = rhs.defaultHandler_; if (rhs.matrixByRow_) { matrixByRow_ = new CoinPackedMatrix(*(rhs.matrixByRow_)); } numberElements_ = rhs.numberElements_; numberRows_ = rhs.numberRows_; numberColumns_ = rhs.numberColumns_; decimals_ = rhs.decimals_; if (rhs.rowlower_) { rowlower_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); rowupper_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); memcpy(rowlower_, rhs.rowlower_, numberRows_ * sizeof(double)); memcpy(rowupper_, rhs.rowupper_, numberRows_ * sizeof(double)); rowrange_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); rowsense_ = reinterpret_cast< char * >(malloc(numberRows_ * sizeof(char))); rhs_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); memcpy(rowrange_, rhs.getRowRange(), numberRows_ * sizeof(double)); memcpy(rowsense_, rhs.getRowSense(), numberRows_ * sizeof(char)); memcpy(rhs_, rhs.getRightHandSide(), numberRows_ * sizeof(double)); } if (rhs.collower_) { collower_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); colupper_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); memcpy(collower_, rhs.collower_, numberColumns_ * sizeof(double)); memcpy(colupper_, rhs.colupper_, numberColumns_ * sizeof(double)); for (int j = 0; j < num_objectives_; j++) { objective_[j] = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); memcpy(objective_[j], rhs.objective_[j], numberColumns_ * sizeof(double)); } } if (rhs.integerType_) { integerType_ = reinterpret_cast< char * >(malloc(numberColumns_ * sizeof(char))); memcpy(integerType_, rhs.integerType_, numberColumns_ * sizeof(char)); } numberSets_ = rhs.numberSets_; if (numberSets_) { set_ = new CoinSet *[numberSets_]; for (int j = 0; j < numberSets_; j++) set_[j] = new CoinSet(*rhs.set_[j]); } free(fileName_); free(problemName_); fileName_ = CoinStrdup(rhs.fileName_); problemName_ = CoinStrdup(rhs.problemName_); numberHash_[0] = rhs.numberHash_[0]; numberHash_[1] = rhs.numberHash_[1]; maxHash_[0] = rhs.maxHash_[0]; maxHash_[1] = rhs.maxHash_[1]; infinity_ = rhs.infinity_; numberAcross_ = rhs.numberAcross_; for (int j = 0; j < num_objectives_; j++) { objectiveOffset_[j] = rhs.objectiveOffset_[j]; } int section; for (section = 0; section < 2; section++) { if (numberHash_[section]) { char **names2 = rhs.names_[section]; names_[section] = reinterpret_cast< char ** >(malloc(maxHash_[section] * sizeof(char *))); char **names = names_[section]; int i; for (i = 0; i < numberHash_[section]; i++) { names[i] = CoinStrdup(names2[i]); } hash_[section] = new CoinHashLink[maxHash_[section]]; std::memcpy(hash_[section], rhs.hash_[section], maxHash_[section] * sizeof(CoinHashLink)); } } } CoinLpIO & CoinLpIO::operator=(const CoinLpIO &rhs) { if (this != &rhs) { gutsOfDestructor(); if (rhs.rowlower_ != NULL || rhs.collower_ != NULL) { gutsOfCopy(rhs); } defaultHandler_ = rhs.defaultHandler_; if (defaultHandler_) { handler_ = new CoinMessageHandler(*rhs.handler_); } else { handler_ = rhs.handler_; } messages_ = CoinMessage(); } return *this; } void CoinLpIO::gutsOfDestructor() { freeAll(); if (defaultHandler_) { delete handler_; handler_ = NULL; } } /************************************************************************/ CoinLpIO::~CoinLpIO() { stopHash(0); stopHash(1); freeAll(); if (defaultHandler_) { delete handler_; handler_ = NULL; } } /************************************************************************/ void CoinLpIO::freePreviousNames(const int section) { int j; if (previous_names_[section] != NULL) { for (j = 0; j < card_previous_names_[section]; j++) { free(previous_names_[section][j]); } free(previous_names_[section]); } previous_names_[section] = NULL; card_previous_names_[section] = 0; } /* freePreviousNames */ /************************************************************************/ void CoinLpIO::freeAll() { delete matrixByColumn_; matrixByColumn_ = NULL; delete matrixByRow_; matrixByRow_ = NULL; free(rowupper_); rowupper_ = NULL; free(rowlower_); rowlower_ = NULL; free(colupper_); colupper_ = NULL; free(collower_); collower_ = NULL; free(rhs_); rhs_ = NULL; free(rowrange_); rowrange_ = NULL; free(rowsense_); rowsense_ = NULL; for (int j = 0; j < num_objectives_; j++) { free(objective_[j]); objective_[j] = NULL; } free(integerType_); integerType_ = NULL; for (int j = 0; j < numberSets_; j++) delete set_[j]; delete[] set_; set_ = NULL; numberSets_ = 0; free(problemName_); problemName_ = NULL; free(fileName_); fileName_ = NULL; freePreviousNames(0); freePreviousNames(1); delete input_; input_ = NULL; } /*************************************************************************/ const char *CoinLpIO::getProblemName() const { return problemName_; } void CoinLpIO::setProblemName(const char *name) { free(problemName_); problemName_ = CoinStrdup(name); } /*************************************************************************/ int CoinLpIO::getNumCols() const { return numberColumns_; } /*************************************************************************/ int CoinLpIO::getNumRows() const { return numberRows_; } /*************************************************************************/ CoinBigIndex CoinLpIO::getNumElements() const { return numberElements_; } /*************************************************************************/ const double *CoinLpIO::getColLower() const { return collower_; } /*************************************************************************/ const double *CoinLpIO::getColUpper() const { return colupper_; } /*************************************************************************/ const double *CoinLpIO::getRowLower() const { return rowlower_; } /*************************************************************************/ const double *CoinLpIO::getRowUpper() const { return rowupper_; } /*************************************************************************/ /** A quick inlined function to convert from lb/ub style constraint definition to sense/rhs/range style */ inline void CoinLpIO::convertBoundToSense(const double lower, const double upper, char &sense, double &right, double &range) const { range = 0.0; if (lower > -infinity_) { if (upper < infinity_) { right = upper; if (upper == lower) { sense = 'E'; } else { sense = 'R'; range = upper - lower; } } else { sense = 'G'; right = lower; } } else { if (upper < infinity_) { sense = 'L'; right = upper; } else { sense = 'N'; right = 0.0; } } } /*************************************************************************/ const char *CoinLpIO::getRowSense() const { if (rowsense_ == NULL) { int nr = numberRows_; rowsense_ = reinterpret_cast< char * >(malloc(nr * sizeof(char))); double dum1, dum2; int i; for (i = 0; i < nr; i++) { convertBoundToSense(rowlower_[i], rowupper_[i], rowsense_[i], dum1, dum2); } } return rowsense_; } /*************************************************************************/ const double *CoinLpIO::getRightHandSide() const { if (rhs_ == NULL) { int nr = numberRows_; rhs_ = reinterpret_cast< double * >(malloc(nr * sizeof(double))); char dum1; double dum2; int i; for (i = 0; i < nr; i++) { convertBoundToSense(rowlower_[i], rowupper_[i], dum1, rhs_[i], dum2); } } return rhs_; } /*************************************************************************/ const double *CoinLpIO::getRowRange() const { if (rowrange_ == NULL) { int nr = numberRows_; rowrange_ = reinterpret_cast< double * >(malloc(nr * sizeof(double))); std::fill(rowrange_, rowrange_ + nr, 0.0); char dum1; double dum2; int i; for (i = 0; i < nr; i++) { convertBoundToSense(rowlower_[i], rowupper_[i], dum1, dum2, rowrange_[i]); } } return rowrange_; } /*************************************************************************/ const int CoinLpIO::getNumObjectives() const { return num_objectives_; } /*************************************************************************/ const double *CoinLpIO::getObjCoefficients() const { return objective_[0]; } /*************************************************************************/ const double *CoinLpIO::getObjCoefficients(int j) const { return objective_[j]; } /*************************************************************************/ const CoinPackedMatrix *CoinLpIO::getMatrixByRow() const { return matrixByRow_; } /*************************************************************************/ const CoinPackedMatrix *CoinLpIO::getMatrixByCol() const { if (matrixByColumn_ == NULL && matrixByRow_) { matrixByColumn_ = new CoinPackedMatrix(*matrixByRow_); matrixByColumn_->reverseOrdering(); } return matrixByColumn_; } /*************************************************************************/ const char *CoinLpIO::getObjName() const { return objName_[0]; } /*************************************************************************/ const char *CoinLpIO::getObjName(int j) const { return objName_[j]; } /*************************************************************************/ void CoinLpIO::checkRowNames() { int i, nrow = getNumRows(); if (numberHash_[0] != nrow + 1) { setDefaultRowNames(); handler_->message(COIN_GENERAL_WARNING, messages_) << "### CoinLpIO::checkRowNames(): non distinct or missing row names or objective function name.\nNow using default row names." << CoinMessageEol; } char const *const *rowNames = getRowNames(); const char *rSense = getRowSense(); char rName[256]; // Check that row names and objective function name are all distinct, /// even after adding "_low" to ranged constraint names for (i = 0; i < nrow; i++) { if (rSense[i] == 'R') { sprintf(rName, "%s_low", rowNames[i]); if (findHash(rName, 0) != -1) { setDefaultRowNames(); char printBuffer[512]; sprintf(printBuffer, "### CoinLpIO::checkRowNames(): ranged constraint %d has a name %s identical to another constraint name or objective function name.\nUse getPreviousNames() to get the old row names.\nNow using default row names.", i, rName); handler_->message(COIN_GENERAL_WARNING, messages_) << printBuffer << CoinMessageEol; break; } } } } /* checkRowNames */ /*************************************************************************/ void CoinLpIO::checkColNames() { int ncol = getNumCols(); if (numberHash_[1] != ncol) { setDefaultColNames(); handler_->message(COIN_GENERAL_WARNING, messages_) << "### CoinLpIO::checkColNames(): non distinct or missing column names.\nNow using default column names." << CoinMessageEol; } } /* checkColNames */ /*************************************************************************/ void CoinLpIO::getPreviousRowNames(char const *const *prev, int *card_prev) const { *card_prev = card_previous_names_[0]; prev = previous_names_[0]; } /*************************************************************************/ void CoinLpIO::getPreviousColNames(char const *const *prev, int *card_prev) const { *card_prev = card_previous_names_[1]; prev = previous_names_[1]; } /*************************************************************************/ char const *const *CoinLpIO::getRowNames() const { return names_[0]; } /*************************************************************************/ char const *const *CoinLpIO::getColNames() const { return names_[1]; } /*************************************************************************/ const char *CoinLpIO::rowName(int index) const { if ((names_[0] != NULL) && (index >= 0) && (index < numberRows_ + 1)) { return names_[0][index]; } else { return NULL; } } /*************************************************************************/ const char *CoinLpIO::columnName(int index) const { if ((names_[1] != NULL) && (index >= 0) && (index < numberColumns_)) { return names_[1][index]; } else { return NULL; } } /*************************************************************************/ int CoinLpIO::rowIndex(const char *name) const { if (!hash_[0]) { return -1; } return findHash(name, 0); } /*************************************************************************/ int CoinLpIO::columnIndex(const char *name) const { if (!hash_[1]) { return -1; } return findHash(name, 1); } /************************************************************************/ double CoinLpIO::getInfinity() const { return infinity_; } /************************************************************************/ void CoinLpIO::setInfinity(const double value) { if (value >= 1.0e20) { infinity_ = value; } else { char str[8192]; sprintf(str, "### ERROR: value: %f\n", value); throw CoinError(str, "setInfinity", "CoinLpIO", __FILE__, __LINE__); } } /************************************************************************/ double CoinLpIO::getEpsilon() const { return epsilon_; } /************************************************************************/ void CoinLpIO::setEpsilon(const double value) { if (value < 0.1) { epsilon_ = value; } else { char str[8192]; sprintf(str, "### ERROR: value: %f\n", value); throw CoinError(str, "setEpsilon", "CoinLpIO", __FILE__, __LINE__); } } /************************************************************************/ int CoinLpIO::getNumberAcross() const { return numberAcross_; } /************************************************************************/ void CoinLpIO::setNumberAcross(const int value) { if (value > 0) { numberAcross_ = value; } else { char str[8192]; sprintf(str, "### ERROR: value: %d\n", value); throw CoinError(str, "setNumberAcross", "CoinLpIO", __FILE__, __LINE__); } } /************************************************************************/ int CoinLpIO::getDecimals() const { return decimals_; } /************************************************************************/ void CoinLpIO::setDecimals(const int value) { if (value > 0) { decimals_ = value; } else { char str[8192]; sprintf(str, "### ERROR: value: %d\n", value); throw CoinError(str, "setDecimals", "CoinLpIO", __FILE__, __LINE__); } } /************************************************************************/ double CoinLpIO::objectiveOffset() const { return objectiveOffset_[0]; } /************************************************************************/ double CoinLpIO::objectiveOffset(int j) const { return objectiveOffset_[j]; } /************************************************************************/ bool CoinLpIO::isInteger(int columnNumber) const { const char *intType = integerType_; if (intType == NULL) return false; assert(columnNumber >= 0 && columnNumber < numberColumns_); if (intType[columnNumber] != 0) return true; return false; } /************************************************************************/ const char *CoinLpIO::integerColumns() const { return integerType_; } /************************************************************************/ void CoinLpIO::setLpDataWithoutRowAndColNames( const CoinPackedMatrix &m, const double *collb, const double *colub, const double *obj_coeff, const char *is_integer, const double *rowlb, const double *rowub) { setLpDataWithoutRowAndColNames(m, collb, colub, &obj_coeff, 1, is_integer, rowlb, rowub); } /************************************************************************/ void CoinLpIO::setLpDataWithoutRowAndColNames( const CoinPackedMatrix &m, const double *collb, const double *colub, const double *obj_coeff[MAX_OBJECTIVES], int num_objectives, const char *is_integer, const double *rowlb, const double *rowub) { freeAll(); problemName_ = CoinStrdup(""); if (m.isColOrdered()) { matrixByRow_ = new CoinPackedMatrix(); matrixByRow_->reverseOrderedCopyOf(m); } else { matrixByRow_ = new CoinPackedMatrix(m); } numberColumns_ = matrixByRow_->getNumCols(); numberRows_ = matrixByRow_->getNumRows(); rowlower_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); rowupper_ = reinterpret_cast< double * >(malloc(numberRows_ * sizeof(double))); collower_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); colupper_ = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); std::copy(rowlb, rowlb + numberRows_, rowlower_); std::copy(rowub, rowub + numberRows_, rowupper_); std::copy(collb, collb + numberColumns_, collower_); std::copy(colub, colub + numberColumns_, colupper_); num_objectives_ = num_objectives; for (int j = 0; j < num_objectives; j++) { objective_[j] = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); std::copy(obj_coeff[j], obj_coeff[j] + numberColumns_, objective_[j]); } if (is_integer) { integerType_ = reinterpret_cast< char * >(malloc(numberColumns_ * sizeof(char))); std::copy(is_integer, is_integer + numberColumns_, integerType_); } else { integerType_ = 0; } if ((numberHash_[0] > 0) && (numberHash_[0] != numberRows_ + 1)) { stopHash(0); } if ((numberHash_[1] > 0) && (numberHash_[1] != numberColumns_)) { stopHash(1); } } /* SetLpDataWithoutRowAndColNames */ /*************************************************************************/ void CoinLpIO::setDefaultRowNames() { int i, nrow = getNumRows(); char **defaultRowNames = reinterpret_cast< char ** >(malloc((nrow + 1) * sizeof(char *))); char buff[1024]; for (i = 0; i < nrow; i++) { sprintf(buff, "cons%d", i); defaultRowNames[i] = CoinStrdup(buff); } sprintf(buff, "obj"); defaultRowNames[nrow] = CoinStrdup(buff); stopHash(0); startHash(defaultRowNames, nrow + 1, 0); objName_[0] = CoinStrdup("obj"); for (i = 0; i < nrow + 1; i++) { free(defaultRowNames[i]); } free(defaultRowNames); } /* setDefaultRowNames */ /*************************************************************************/ void CoinLpIO::setDefaultColNames() { int j, ncol = getNumCols(); char **defaultColNames = reinterpret_cast< char ** >(malloc(ncol * sizeof(char *))); char buff[256]; for (j = 0; j < ncol; j++) { sprintf(buff, "x%d", j); defaultColNames[j] = CoinStrdup(buff); } stopHash(1); startHash(defaultColNames, ncol, 1); for (j = 0; j < ncol; j++) { free(defaultColNames[j]); } free(defaultColNames); } /* setDefaultColNames */ /*************************************************************************/ void CoinLpIO::setLpDataRowAndColNames(char const *const *const rownames, char const *const *const colnames) { int nrow = getNumRows(); int ncol = getNumCols(); if (rownames != NULL) { if (are_invalid_names(rownames, nrow + 1, true)) { setDefaultRowNames(); handler_->message(COIN_GENERAL_WARNING, messages_) << "### CoinLpIO::setLpDataRowAndColNames(): Invalid row names\nUse getPreviousNames() to get the old row names.\nNow using default row names." << CoinMessageEol; } else { stopHash(0); startHash(rownames, nrow + 1, 0); objName_[0] = CoinStrdup(rownames[nrow]); checkRowNames(); } } else { if (objName_[0] == NULL) { objName_[0] = CoinStrdup("obj"); } } if (colnames != NULL) { if (are_invalid_names(colnames, ncol, false)) { setDefaultColNames(); handler_->message(COIN_GENERAL_WARNING, messages_) << "### CoinLpIO::setLpDataRowAndColNames(): Invalid column names\nNow using default row names." << CoinMessageEol; } else { stopHash(1); startHash(colnames, ncol, 1); checkColNames(); } } } /* setLpDataColAndRowNames */ // Load in SOS stuff void CoinLpIO::loadSOS(int numberSets, const CoinSet *sets) { if (numberSets_) { for (int i = 0; i < numberSets_; i++) delete set_[i]; delete[] set_; set_ = NULL; numberSets_ = 0; } if (numberSets) { numberSets_ = numberSets; set_ = new CoinSet *[numberSets_]; for (int i = 0; i < numberSets_; i++) set_[i] = new CoinSet(sets[i]); } } // Load in SOS stuff void CoinLpIO::loadSOS(int numberSets, const CoinSet **sets) { if (numberSets_) { for (int i = 0; i < numberSets_; i++) delete set_[i]; delete[] set_; set_ = NULL; numberSets_ = 0; } if (numberSets) { numberSets_ = numberSets; set_ = new CoinSet *[numberSets_]; for (int i = 0; i < numberSets_; i++) set_[i] = new CoinSet(*sets[i]); } } /************************************************************************/ void CoinLpIO::out_coeff(FILE *fp, const double v, const int print_1) const { double lp_eps = getEpsilon(); if (!print_1) { if (fabs(v - 1) < lp_eps) { return; } if (fabs(v + 1) < lp_eps) { fprintf(fp, " -"); return; } } double frac = v - floor(v); if (frac < lp_eps) { fprintf(fp, " %.0f", floor(v)); } else { if (frac > 1 - lp_eps) { fprintf(fp, " %.0f", floor(v + 0.5)); } else { int decimals = getDecimals(); char form[15]; sprintf(form, " %%.%df", decimals); fprintf(fp, form, v); } } } /* out_coeff */ /************************************************************************/ int CoinLpIO::writeLp(const char *filename, const double epsilon, const int numberAcross, const int decimals, const bool useRowNames) { FILE *fp = NULL; fp = fopen(filename, "w"); if (!fp) { char str[8192]; sprintf(str, "### ERROR: unable to open file %s\n", filename); throw CoinError(str, "writeLP", "CoinLpIO", __FILE__, __LINE__); } int nerr = writeLp(fp, epsilon, numberAcross, decimals, useRowNames); fclose(fp); return (nerr); } /************************************************************************/ int CoinLpIO::writeLp(FILE *fp, const double epsilon, const int numberAcross, const int decimals, const bool useRowNames) { setEpsilon(epsilon); setNumberAcross(numberAcross); setDecimals(decimals); return writeLp(fp, useRowNames); } /************************************************************************/ int CoinLpIO::writeLp(const char *filename, const bool useRowNames) { FILE *fp = NULL; fp = fopen(filename, "w"); if (!fp) { char str[8192]; sprintf(str, "### ERROR: unable to open file %s\n", filename); throw CoinError(str, "writeLP", "CoinLpIO", __FILE__, __LINE__); } int nerr = writeLp(fp, useRowNames); fclose(fp); return (nerr); } /************************************************************************/ int CoinLpIO::writeLp(FILE *fp, const bool useRowNames) { double lp_eps = getEpsilon(); double lp_inf = getInfinity(); int numberAcross = getNumberAcross(); int i, cnt_print, loc_row_names = 0, loc_col_names = 0; CoinBigIndex j; char **prowNames = NULL, **pcolNames = NULL; const int *indices = matrixByRow_->getIndices(); const double *elements = matrixByRow_->getElements(); int ncol = getNumCols(); int nrow = getNumRows(); const double *collow = getColLower(); const double *colup = getColUpper(); const double *rowlow = getRowLower(); const double *rowup = getRowUpper(); const char *integerType = integerColumns(); char const *const *rowNames = getRowNames(); char const *const *colNames = getColNames(); char buff[256]; if (rowNames == NULL) { loc_row_names = 1; prowNames = reinterpret_cast< char ** >(malloc((nrow + 1) * sizeof(char *))); for (j = 0; j < nrow; j++) { sprintf(buff, "cons%d", j); prowNames[j] = CoinStrdup(buff); } prowNames[nrow] = CoinStrdup("obj"); rowNames = prowNames; } if (colNames == NULL) { loc_col_names = 1; pcolNames = reinterpret_cast< char ** >(malloc(ncol * sizeof(char *))); for (j = 0; j < ncol; j++) { sprintf(buff, "x%d", j); pcolNames[j] = CoinStrdup(buff); } colNames = pcolNames; } #ifdef LPIO_DEBUG printf("CoinLpIO::writeLp(): numberRows: %d numberColumns: %d\n", nrow, ncol); #endif fprintf(fp, "\\Problem name: %s\n\n", getProblemName()); fprintf(fp, "Minimize\n"); for (int k = 0; k < num_objectives_; k++) { if (useRowNames) { fprintf(fp, "%s:", objName_[k]); } cnt_print = 0; for (j = 0; j < ncol; j++) { if ((cnt_print > 0) && (objective_[k][j] > lp_eps)) { fprintf(fp, " +"); } if (fabs(objective_[k][j]) > lp_eps) { out_coeff(fp, objective_[k][j], 0); fprintf(fp, " %s", colNames[j]); cnt_print++; if (cnt_print % numberAcross == 0) { fprintf(fp, "\n"); } } } if ((cnt_print > 0) && (objectiveOffset_[k] > lp_eps)) { fprintf(fp, " +"); } if (fabs(objectiveOffset_[k]) > lp_eps) { out_coeff(fp, objectiveOffset_[k], 1); cnt_print++; } if ((cnt_print == 0) || (cnt_print % numberAcross != 0)) { fprintf(fp, "\n"); } } fprintf(fp, "Subject To\n"); int cnt_out_rows = 0; for (i = 0; i < nrow; i++) { cnt_print = 0; if (useRowNames) { fprintf(fp, "%s: ", rowNames[i]); } cnt_out_rows++; for (j = matrixByRow_->getVectorFirst(i); j < matrixByRow_->getVectorLast(i); j++) { if ((cnt_print > 0) && (elements[j] > lp_eps)) { fprintf(fp, " +"); } if (fabs(elements[j]) > lp_eps) { out_coeff(fp, elements[j], 0); fprintf(fp, " %s", colNames[indices[j]]); cnt_print++; if (cnt_print % numberAcross == 0) { fprintf(fp, "\n"); } } } if (rowup[i] - rowlow[i] < lp_eps) { fprintf(fp, " ="); out_coeff(fp, rowlow[i], 1); fprintf(fp, "\n"); } else { if (rowup[i] < lp_inf) { fprintf(fp, " <="); out_coeff(fp, rowup[i], 1); fprintf(fp, "\n"); if (rowlower_[i] > -lp_inf) { cnt_print = 0; if (useRowNames) { fprintf(fp, "%s_low:", rowNames[i]); } cnt_out_rows++; for (j = matrixByRow_->getVectorFirst(i); j < matrixByRow_->getVectorLast(i); j++) { if ((cnt_print > 0) && (elements[j] > lp_eps)) { fprintf(fp, " +"); } if (fabs(elements[j]) > lp_eps) { out_coeff(fp, elements[j], 0); fprintf(fp, " %s", colNames[indices[j]]); cnt_print++; if (cnt_print % numberAcross == 0) { fprintf(fp, "\n"); } } } fprintf(fp, " >="); out_coeff(fp, rowlow[i], 1); fprintf(fp, "\n"); } } else { fprintf(fp, " >="); out_coeff(fp, rowlow[i], 1); fprintf(fp, "\n"); } } } #ifdef LPIO_DEBUG printf("CoinLpIO::writeLp(): Done with constraints\n"); #endif fprintf(fp, "Bounds\n"); for (j = 0; j < ncol; j++) { if ((collow[j] > -lp_inf) && (colup[j] < lp_inf)) { out_coeff(fp, collow[j], 1); fprintf(fp, " <= %s <=", colNames[j]); out_coeff(fp, colup[j], 1); fprintf(fp, "\n"); } if ((collow[j] == -lp_inf) && (colup[j] < lp_inf)) { fprintf(fp, "%s <=", colNames[j]); out_coeff(fp, colup[j], 1); fprintf(fp, "\n"); } if ((collow[j] > -lp_inf) && (colup[j] == lp_inf)) { if (fabs(collow[j]) > lp_eps) { out_coeff(fp, collow[j], 1); fprintf(fp, " <= %s\n", colNames[j]); } } if (collow[j] == -lp_inf) { fprintf(fp, " %s Free\n", colNames[j]); } } #ifdef LPIO_DEBUG printf("CoinLpIO::writeLp(): Done with bounds\n"); #endif bool semis = false; if (integerType != NULL) { int first_int = 1; cnt_print = 0; for (j = 0; j < ncol; j++) { if (integerType[j] == 1 || integerType[j] == 4) { if (first_int) { fprintf(fp, "Integers\n"); first_int = 0; } fprintf(fp, "%s ", colNames[j]); cnt_print++; if (cnt_print % numberAcross == 0) { fprintf(fp, "\n"); } } if (integerType[j] > 1) semis = true; } if (cnt_print % numberAcross != 0) { fprintf(fp, "\n"); } if (semis) { int first_int = 1; cnt_print = 0; for (j = 0; j < ncol; j++) { if (integerType[j] > 2) { if (first_int) { fprintf(fp, "Semis\n"); first_int = 0; } fprintf(fp, "%s ", colNames[j]); cnt_print++; if (cnt_print % numberAcross == 0) { fprintf(fp, "\n"); } } } if (cnt_print % numberAcross != 0) { fprintf(fp, "\n"); } } } #ifdef LPIO_DEBUG printf("CoinLpIO::writeLp(): Done with integers\n"); #endif if (set_ != NULL) { fprintf(fp, "SOS\n"); double lp_eps = getEpsilon(); int decimals = getDecimals(); char form[15]; sprintf(form, "%%.%df", decimals); for (int iSet = 0; iSet < numberSets_; iSet++) { cnt_print = 0; const CoinSet *set = set_[iSet]; // no space as readLp gets marginally confused fprintf(fp, "set%d:S%c::", iSet, '0' + set->setType()); const int *which = set->which(); const double *weights = set->weights(); int numberEntries = set->numberEntries(); for (j = 0; j < numberEntries; j++) { int iColumn = which[j]; fprintf(fp, " %s:", colNames[iColumn]); // modified out_coeff (no leading space) double v = weights[j]; double frac = v - floor(v); if (frac < lp_eps) { fprintf(fp, "%.0f", floor(v)); } else { if (frac > 1 - lp_eps) { fprintf(fp, "%.0f", floor(v + 0.5)); } else { fprintf(fp, form, v); } } cnt_print++; if (cnt_print % numberAcross == 0) { fprintf(fp, "\n"); } } if (cnt_print % numberAcross != 0) { fprintf(fp, "\n"); } } } #ifdef LPIO_DEBUG printf("CoinLpIO::writeLp(): Done with SOS\n"); #endif fprintf(fp, "End\n"); if (loc_row_names) { for (j = 0; j < nrow + 1; j++) { free(prowNames[j]); } free(prowNames); } if (loc_col_names) { for (j = 0; j < ncol; j++) { free(pcolNames[j]); } free(pcolNames); } return 0; } /* writeLp */ /*************************************************************************/ int CoinLpIO::find_obj() const { char buff[1024]; sprintf(buff, "aa"); size_t lbuff = strlen(buff); while (((lbuff != 8) || (CoinStrNCaseCmp(buff, "minimize", 8) != 0)) && ((lbuff != 3) || (CoinStrNCaseCmp(buff, "min", 3) != 0)) && ((lbuff != 8) || (CoinStrNCaseCmp(buff, "maximize", 8) != 0)) && ((lbuff != 3) || (CoinStrNCaseCmp(buff, "max", 3) != 0))) { int x = fscanfLpIO(buff); lbuff = strlen(buff); if (x <= 0) { char str[8192]; sprintf(str, "### ERROR: Unable to locate objective function\n"); throw CoinError(str, "find_obj", "CoinLpIO", __FILE__, __LINE__); } } if (((lbuff == 8) && (CoinStrNCaseCmp(buff, "minimize", 8) == 0)) || ((lbuff == 3) && (CoinStrNCaseCmp(buff, "min", 3) == 0))) { return (1); } return (-1); } /* find_obj */ /*************************************************************************/ int CoinLpIO::is_subject_to(const char *buff) const { size_t lbuff = strlen(buff); if (((lbuff == 4) && (CoinStrNCaseCmp(buff, "s.t.", 4) == 0)) || ((lbuff == 3) && (CoinStrNCaseCmp(buff, "st.", 3) == 0)) || ((lbuff == 2) && (CoinStrNCaseCmp(buff, "st", 2) == 0))) { return (1); } if ((lbuff == 7) && (CoinStrNCaseCmp(buff, "subject", 7) == 0)) { return (2); } return (0); } /* is_subject_to */ /*************************************************************************/ int CoinLpIO::first_is_number(const char *buff) const { size_t pos; char str_num[] = "1234567890"; pos = strcspn(buff, str_num); if (pos == 0) { return (1); } return (0); } /* first_is_number */ /*************************************************************************/ int CoinLpIO::is_sense(const char *buff) const { size_t pos; char str_sense[] = "<>="; pos = strcspn(buff, str_sense); if (pos == 0) { if (strcmp(buff, "<=") == 0) { return (0); } if (strcmp(buff, "=") == 0) { return (1); } if (strcmp(buff, ">=") == 0) { return (2); } printf("### ERROR: CoinLpIO: is_sense(): string: %s \n", buff); } return (-1); } /* is_sense */ /*************************************************************************/ int CoinLpIO::is_free(const char *buff) const { size_t lbuff = strlen(buff); if ((lbuff == 4) && (CoinStrNCaseCmp(buff, "free", 4) == 0)) { return (1); } return (0); } /* is_free */ /*************************************************************************/ int CoinLpIO::is_inf(const char *buff) const { size_t lbuff = strlen(buff); if ((lbuff == 3) && (CoinStrNCaseCmp(buff, "inf", 3) == 0)) { return (1); } return (0); } /* is_inf */ /*************************************************************************/ int CoinLpIO::is_comment(const char *buff) const { if ((buff[0] == '/') || (buff[0] == '\\')) { return (1); } return (0); } /* is_comment */ /*************************************************************************/ void CoinLpIO::skip_comment(char *buff) const { while (strcspn(buff, "\n") == strlen(buff)) { // end of line not read yet // keep going until in correct buffer while (bufferLength_ < 0) { if (fscanfLpIO(buff) == 0) throw("bad fgets"); } // and throw away bufferPosition_ = bufferLength_; break; } } /* skip_comment */ /*************************************************************************/ int CoinLpIO::is_invalid_name(const char *name, const bool ranged) const { size_t pos, lname, valid_lname = 100; char str_valid[] = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"!#$%&(),.;?@_'`{}~"; if (ranged) { valid_lname -= 4; // will add "_low" when writing the Lp file } if (name == NULL) { lname = 0; } else { lname = strlen(name); } if (lname < 1) { handler_->message(COIN_GENERAL_WARNING, messages_) << "### CoinLpIO::is_invalid_name(): Name is empty" << CoinMessageEol; return (5); } if (lname > valid_lname) { char printBuffer[512]; sprintf(printBuffer, "### CoinLpIO::is_invalid_name(): Name %s is too long", name); handler_->message(COIN_GENERAL_WARNING, messages_) << printBuffer << CoinMessageEol; return (1); } if (first_is_number(name)) { char printBuffer[512]; sprintf(printBuffer, "### CoinLpIO::is_invalid_name(): Name %s should not start with a number", name); handler_->message(COIN_GENERAL_WARNING, messages_) << printBuffer << CoinMessageEol; return (2); } pos = strspn(name, str_valid); if (pos != lname) { char printBuffer[512]; sprintf(printBuffer, "### CoinLpIO::is_invalid_name(): Name %s contains illegal character '%c'", name, name[pos]); handler_->message(COIN_GENERAL_WARNING, messages_) << printBuffer << CoinMessageEol; return (3); } if ((is_keyword(name)) || (is_free(name) || (is_inf(name)))) { return (4); } return (0); } /* is_invalid_name */ /*************************************************************************/ int CoinLpIO::are_invalid_names(char const *const *const vnames, const int card_vnames, const bool check_ranged) const { int i, invalid = 0, flag, nrows = getNumRows(); bool is_ranged = 0; const char *rSense = getRowSense(); if ((check_ranged) && (card_vnames != nrows + 1)) { char str[8192]; sprintf(str, "### ERROR: card_vnames: %d number of rows: %d\n", card_vnames, getNumRows()); throw CoinError(str, "are_invalid_names", "CoinLpIO", __FILE__, __LINE__); } for (i = 0; i < card_vnames; i++) { if ((check_ranged) && (i < nrows) && (rSense[i] == 'R')) { is_ranged = true; } else { is_ranged = false; } flag = is_invalid_name(vnames[i], is_ranged); if (flag) { char printBuffer[512]; sprintf(printBuffer, "### CoinLpIO::are_invalid_names(): Invalid name: vnames[%d]: %s", i, vnames[i]); handler_->message(COIN_GENERAL_WARNING, messages_) << printBuffer << CoinMessageEol; invalid = flag; } } return (invalid); } /* are_invalid_names */ /*************************************************************************/ int CoinLpIO::read_monom_obj(double *coeff, char **name, int *cnt, char **obj_name, int *num_objectives, int *obj_starts) { double mult; char buff[1024] = "aa", loc_name[1024], *start; int read_st = 0; int x = fscanfLpIO(buff); if (x <= 0) { char str[8192]; sprintf(str, "### ERROR: Unable to read objective function\n"); throw CoinError(str, "read_monom_obj", "CoinLpIO", __FILE__, __LINE__); } if (buff[strlen(buff) - 1] == ':') { buff[strlen(buff) - 1] = '\0'; #ifdef LPIO_DEBUG printf("CoinLpIO: read_monom_obj(): obj_name: %s\n", buff); #endif if (*num_objectives == MAX_OBJECTIVES) { char str[8192]; sprintf(str, "### ERROR: Too many objective functions.\n"); sprintf(str, "### ERROR: Change MAX_OBJECTIVES to larger number.\n"); throw CoinError(str, "read_monom_obj", "CoinLpIO", __FILE__, __LINE__); } obj_name[*num_objectives] = CoinStrdup(buff); obj_starts[(*num_objectives)++] = *cnt; return (0); } if (*num_objectives == 0) { obj_starts[(*num_objectives)++] = *cnt; } read_st = is_subject_to(buff); #ifdef LPIO_DEBUG printf("read_monom_obj: first buff: (%s)\n", buff); #endif if (read_st > 0) { return (read_st); } start = buff; mult = 1; if (buff[0] == '+') { mult = 1; if (strlen(buff) == 1) { fscanfLpIO(buff); start = buff; } else { start = &(buff[1]); } } if (buff[0] == '-') { mult = -1; if (strlen(buff) == 1) { fscanfLpIO(buff); start = buff; } else { start = &(buff[1]); } } if (first_is_number(start)) { coeff[*cnt] = atof(start); sprintf(loc_name, "aa"); fscanfLpIO(loc_name); } else { coeff[*cnt] = 1; strcpy(loc_name, start); } read_st = is_subject_to(loc_name); #ifdef LPIO_DEBUG printf("read_monom_obj: second buff: (%s)\n", buff); #endif if (read_st > 0) { setObjectiveOffset(mult * coeff[*cnt]); #ifdef LPIO_DEBUG printf("read_monom_obj: objectiveOffset: %f\n", objectiveOffset_); #endif return (read_st); } coeff[*cnt] *= mult; name[*cnt] = CoinStrdup(loc_name); #ifdef LPIO_DEBUG printf("read_monom_obj: (%f) (%s)\n", coeff[*cnt], name[*cnt]); #endif (*cnt)++; return (read_st); } /* read_monom_obj */ /*************************************************************************/ int CoinLpIO::read_monom_row(char *start_str, double *coeff, char **name, int cnt_coeff) const { double mult; char buff[1024], loc_name[1024], *start; int read_sense = -1; sprintf(buff, "%s", start_str); read_sense = is_sense(buff); if (read_sense > -1) { return (read_sense); } start = buff; mult = 1; if (buff[0] == '+') { mult = 1; if (strlen(buff) == 1) { fscanfLpIO(buff); start = buff; } else { start = &(buff[1]); } } if (buff[0] == '-') { mult = -1; if (strlen(buff) == 1) { fscanfLpIO(buff); start = buff; } else { start = &(buff[1]); } } if (first_is_number(start)) { coeff[cnt_coeff] = atof(start); fscanfLpIO(loc_name); } else { coeff[cnt_coeff] = 1; strcpy(loc_name, start); } coeff[cnt_coeff] *= mult; #ifdef KILL_ZERO_READLP if (fabs(coeff[cnt_coeff]) > epsilon_) name[cnt_coeff] = CoinStrdup(loc_name); else read_sense = -2; // effectively zero #else name[cnt_coeff] = CoinStrdup(loc_name); #endif #ifdef LPIO_DEBUG printf("CoinLpIO: read_monom_row: (%f) (%s)\n", coeff[cnt_coeff], name[cnt_coeff]); #endif return (read_sense); } /* read_monom_row */ /*************************************************************************/ void CoinLpIO::realloc_coeff(double **coeff, char ***colNames, int *maxcoeff) const { *maxcoeff *= 5; *colNames = reinterpret_cast< char ** >(realloc((*colNames), (*maxcoeff + 1) * sizeof(char *))); *coeff = reinterpret_cast< double * >(realloc((*coeff), (*maxcoeff + 1) * sizeof(double))); } /* realloc_coeff */ /*************************************************************************/ void CoinLpIO::realloc_row(char ***rowNames, CoinBigIndex **start, double **rhs, double **rowlow, double **rowup, int *maxrow) const { *maxrow *= 5; *rowNames = reinterpret_cast< char ** >(realloc((*rowNames), (*maxrow + 1) * sizeof(char *))); *start = reinterpret_cast< CoinBigIndex * >(realloc((*start), (*maxrow + 1) * sizeof(CoinBigIndex))); *rhs = reinterpret_cast< double * >(realloc((*rhs), (*maxrow + 1) * sizeof(double))); *rowlow = reinterpret_cast< double * >(realloc((*rowlow), (*maxrow + 1) * sizeof(double))); *rowup = reinterpret_cast< double * >(realloc((*rowup), (*maxrow + 1) * sizeof(double))); } /* realloc_row */ /*************************************************************************/ void CoinLpIO::realloc_col(double **collow, double **colup, char **is_int, int *maxcol) const { *maxcol += 100; *collow = reinterpret_cast< double * >(realloc((*collow), (*maxcol + 1) * sizeof(double))); *colup = reinterpret_cast< double * >(realloc((*colup), (*maxcol + 1) * sizeof(double))); *is_int = reinterpret_cast< char * >(realloc((*is_int), (*maxcol + 1) * sizeof(char))); // clean values double lp_inf = getInfinity(); for (int i = (*maxcol) - 100; i < *maxcol; i++) { (*collow)[i] = 0; (*colup)[i] = lp_inf; (*is_int)[i] = 0; } } /* realloc_col */ /*************************************************************************/ void CoinLpIO::read_row(char *buff, double **pcoeff, char ***pcolNames, int *cnt_coeff, int *maxcoeff, double *rhs, double *rowlow, double *rowup, int *cnt_row, double inf) const { int read_sense = -1; char start_str[1024]; sprintf(start_str, "%s", buff); while (read_sense < 0) { if ((*cnt_coeff) == (*maxcoeff)) { realloc_coeff(pcoeff, pcolNames, maxcoeff); } read_sense = read_monom_row(start_str, *pcoeff, *pcolNames, *cnt_coeff); #ifdef KILL_ZERO_READLP if (read_sense != -2) // see if zero #endif (*cnt_coeff)++; int x = fscanfLpIO(start_str); if (x <= 0) { char str[8192]; sprintf(str, "### ERROR: Unable to read row monomial\n"); throw CoinError(str, "read_monom_row", "CoinLpIO", __FILE__, __LINE__); } } (*cnt_coeff)--; rhs[*cnt_row] = atof(start_str); switch (read_sense) { case 0: rowlow[*cnt_row] = -inf; rowup[*cnt_row] = rhs[*cnt_row]; break; case 1: rowlow[*cnt_row] = rhs[*cnt_row]; rowup[*cnt_row] = rhs[*cnt_row]; break; case 2: rowlow[*cnt_row] = rhs[*cnt_row]; rowup[*cnt_row] = inf; break; default: break; } (*cnt_row)++; } /* read_row */ /*************************************************************************/ int CoinLpIO::is_keyword(const char *buff) const { size_t lbuff = strlen(buff); if (((lbuff == 5) && (CoinStrNCaseCmp(buff, "bound", 5) == 0)) || ((lbuff == 6) && (CoinStrNCaseCmp(buff, "bounds", 6) == 0))) { return (1); } if (((lbuff == 7) && (CoinStrNCaseCmp(buff, "integer", 7) == 0)) || ((lbuff == 8) && (CoinStrNCaseCmp(buff, "integers", 8) == 0))) { return (2); } if (((lbuff == 7) && (CoinStrNCaseCmp(buff, "general", 7) == 0)) || ((lbuff == 8) && (CoinStrNCaseCmp(buff, "generals", 8) == 0))) { return (2); } if (((lbuff == 6) && (CoinStrNCaseCmp(buff, "binary", 6) == 0)) || ((lbuff == 8) && (CoinStrNCaseCmp(buff, "binaries", 8) == 0))) { return (3); } if (((lbuff == 15) && (CoinStrNCaseCmp(buff, "semi-continuous", 15) == 0)) || ((lbuff == 4) && (CoinStrNCaseCmp(buff, "semi", 4) == 0)) || ((lbuff == 5) && (CoinStrNCaseCmp(buff, "semis", 5) == 0))) { return (4); } if ((lbuff == 3) && (CoinStrNCaseCmp(buff, "sos", 3) == 0)) { return (5); } if ((lbuff == 3) && (CoinStrNCaseCmp(buff, "end", 3) == 0)) { return (6); } return (0); } /* is_keyword */ /*************************************************************************/ void CoinLpIO::readLp(const char *filename, const double epsilon) { setEpsilon(epsilon); readLp(filename); } /*************************************************************************/ void CoinLpIO::readLp(const char *filename) { delete input_; input_ = NULL; bool readable = false; // see if just .lp int length = strlen(filename); if ((length > 3 && !strncmp(filename + length - 3, ".lp", 3))) { FILE *fp = fopen(filename, "r"); if (fp) { readable = true; input_ = new CoinPlainFileInput(fp); } } else if (strstr(filename, ".lp")) { std::string fname(filename); readable = fileCoinReadable(fname); if (readable) input_ = CoinFileInput::create(fname); } if (!readable) { char str[8192]; sprintf(str, "### ERROR: Unable to open file %s for reading\n", filename); throw CoinError(str, "readLp", "CoinLpIO", __FILE__, __LINE__); } readLp(); } /*************************************************************************/ void CoinLpIO::readLp(FILE *fp, const double epsilon) { setEpsilon(epsilon); readLp(fp); } /*************************************************************************/ void CoinLpIO::readLp(FILE *fp) { delete input_; input_ = new CoinPlainFileInput(fp); readLp(); } /*************************************************************************/ void CoinLpIO::readLp() { int maxrow = 1000; int maxcoeff = 40000; double lp_eps = getEpsilon(); double lp_inf = getInfinity(); char buff[1024]; bufferPosition_ = 0; bufferLength_ = 0; eofFound_ = false; int objsense, cnt_coeff = 0, cnt_row = 0, cnt_obj = 0; int num_objectives = 0; char *objName[MAX_OBJECTIVES] = { NULL, NULL }; int obj_starts[MAX_OBJECTIVES + 1]; char **colNames = reinterpret_cast< char ** >(malloc((maxcoeff + 1) * sizeof(char *))); double *coeff = reinterpret_cast< double * >(malloc((maxcoeff + 1) * sizeof(double))); char **rowNames = reinterpret_cast< char ** >(malloc((maxrow + MAX_OBJECTIVES) * sizeof(char *))); CoinBigIndex *start = reinterpret_cast< CoinBigIndex * >(malloc((maxrow + MAX_OBJECTIVES) * sizeof(CoinBigIndex))); double *rhs = reinterpret_cast< double * >(malloc((maxrow + 1) * sizeof(double))); double *rowlow = reinterpret_cast< double * >(malloc((maxrow + 1) * sizeof(double))); double *rowup = reinterpret_cast< double * >(malloc((maxrow + 1) * sizeof(double))); int i; objsense = find_obj(); int read_st = 0; while (!read_st) { read_st = read_monom_obj(coeff, colNames, &cnt_obj, objName, &num_objectives, obj_starts); if (cnt_obj == maxcoeff) { realloc_coeff(&coeff, &colNames, &maxcoeff); } } obj_starts[num_objectives] = cnt_obj; start[0] = cnt_obj; cnt_coeff = cnt_obj; if (read_st == 2) { int x = fscanfLpIO(buff); if (x <= 0) throw("bad fscanf"); size_t lbuff = strlen(buff); if ((lbuff != 2) || (CoinStrNCaseCmp(buff, "to", 2) != 0)) { char str[8192]; sprintf(str, "### ERROR: Can not locate keyword 'Subject To'\n"); throw CoinError(str, "readLp", "CoinLpIO", __FILE__, __LINE__); } } fscanfLpIO(buff); while (!is_keyword(buff)) { if (buff[strlen(buff) - 1] == ':') { buff[strlen(buff) - 1] = '\0'; #ifdef LPIO_DEBUG printf("CoinLpIO::readLp(): rowName[%d]: %s\n", cnt_row, buff); #endif rowNames[cnt_row] = CoinStrdup(buff); fscanfLpIO(buff); } else { char rname[15]; sprintf(rname, "cons%d", cnt_row); rowNames[cnt_row] = CoinStrdup(rname); } read_row(buff, &coeff, &colNames, &cnt_coeff, &maxcoeff, rhs, rowlow, rowup, &cnt_row, lp_inf); fscanfLpIO(buff); start[cnt_row] = cnt_coeff; if (cnt_row == maxrow) { realloc_row(&rowNames, &start, &rhs, &rowlow, &rowup, &maxrow); } } numberRows_ = cnt_row; stopHash(1); startHash(colNames, cnt_coeff, 1); COINColumnIndex icol; int read_sense1, read_sense2; double bnd1 = 0, bnd2 = 0; int maxcol = numberHash_[1] + 100; double *collow = reinterpret_cast< double * >(malloc((maxcol + 1) * sizeof(double))); double *colup = reinterpret_cast< double * >(malloc((maxcol + 1) * sizeof(double))); char *is_int = reinterpret_cast< char * >(malloc((maxcol + 1) * sizeof(char))); int has_int = 0; for (i = 0; i < maxcol; i++) { collow[i] = 0; colup[i] = lp_inf; is_int[i] = 0; } int done = 0; while (!done) { switch (is_keyword(buff)) { case 1: /* Bounds section */ fscanfLpIO(buff); while (is_keyword(buff) == 0) { read_sense1 = -1; read_sense2 = -1; int mult = 1; char *start_str = buff; if (buff[0] == '-' || buff[0] == '+') { mult = (buff[0] == '-') ? -1 : +1; if (strlen(buff) == 1) { fscanfLpIO(buff); start_str = buff; } else { start_str = &(buff[1]); } } int scan_sense = 0; if (first_is_number(start_str)) { bnd1 = mult * atof(start_str); scan_sense = 1; } else { if (is_inf(start_str)) { bnd1 = mult * lp_inf; scan_sense = 1; } } if (scan_sense) { fscanfLpIO(buff); read_sense1 = is_sense(buff); if (read_sense1 < 0) { char str[8192]; sprintf(str, "### ERROR: Bounds; expect a sense, get: %s\n", buff); throw CoinError(str, "readLp", "CoinLpIO", __FILE__, __LINE__); } fscanfLpIO(buff); } icol = findHash(buff, 1); if (icol < 0) { char printBuffer[512]; sprintf(printBuffer, "### CoinLpIO::readLp(): Variable %s does not appear in objective function or constraints", buff); handler_->message(COIN_GENERAL_WARNING, messages_) << printBuffer << CoinMessageEol; insertHash(buff, 1); icol = findHash(buff, 1); if (icol == maxcol) { realloc_col(&collow, &colup, &is_int, &maxcol); } } fscanfLpIO(buff); if (is_free(buff)) { collow[icol] = -lp_inf; fscanfLpIO(buff); } else { read_sense2 = is_sense(buff); if (read_sense2 > -1) { fscanfLpIO(buff); mult = 1; start_str = buff; if (buff[0] == '-' || buff[0] == '+') { mult = (buff[0] == '-') ? -1 : +1; if (strlen(buff) == 1) { fscanfLpIO(buff); start_str = buff; } else { start_str = &(buff[1]); } } if (first_is_number(start_str)) { bnd2 = mult * atof(start_str); fscanfLpIO(buff); } else { if (is_inf(start_str)) { bnd2 = mult * lp_inf; fscanfLpIO(buff); } else { char str[8192]; sprintf(str, "### ERROR: Bounds; expect a number, get: %s\n", buff); throw CoinError(str, "readLp", "CoinLpIO", __FILE__, __LINE__); } } } if ((read_sense1 > -1) && (read_sense2 > -1)) { if (read_sense1 != read_sense2) { char str[8192]; sprintf(str, "### ERROR: Bounds; variable: %s read_sense1: %d read_sense2: %d\n", buff, read_sense1, read_sense2); throw CoinError(str, "readLp", "CoinLpIO", __FILE__, __LINE__); } else { if (read_sense1 == 1) { if (fabs(bnd1 - bnd2) > lp_eps) { char str[8192]; sprintf(str, "### ERROR: Bounds; variable: %s read_sense1: %d read_sense2: %d bnd1: %f bnd2: %f\n", buff, read_sense1, read_sense2, bnd1, bnd2); throw CoinError(str, "readLp", "CoinLpIO", __FILE__, __LINE__); } collow[icol] = bnd1; colup[icol] = bnd1; } if (read_sense1 == 0) { collow[icol] = bnd1; colup[icol] = bnd2; } if (read_sense1 == 2) { colup[icol] = bnd1; collow[icol] = bnd2; } } } else { if (read_sense1 > -1) { switch (read_sense1) { case 0: collow[icol] = bnd1; break; case 1: collow[icol] = bnd1; colup[icol] = bnd1; break; case 2: colup[icol] = bnd1; break; } } if (read_sense2 > -1) { switch (read_sense2) { case 0: colup[icol] = bnd2; break; case 1: collow[icol] = bnd2; colup[icol] = bnd2; break; case 2: collow[icol] = bnd2; break; } } } } } break; case 2: /* Integers/Generals section */ fscanfLpIO(buff); while (is_keyword(buff) == 0) { icol = findHash(buff, 1); #ifdef LPIO_DEBUG printf("CoinLpIO::readLp(): Integer: colname: (%s) icol: %d\n", buff, icol); #endif if (icol < 0) { char printBuffer[512]; sprintf(printBuffer, "### CoinLpIO::readLp(): Integer variable %s does not appear in objective function or constraints", buff); handler_->message(COIN_GENERAL_WARNING, messages_) << printBuffer << CoinMessageEol; insertHash(buff, 1); icol = findHash(buff, 1); if (icol == maxcol) { realloc_col(&collow, &colup, &is_int, &maxcol); } #ifdef LPIO_DEBUG printf("CoinLpIO::readLp(): Integer: colname: (%s) icol: %d\n", buff, icol); #endif } if (is_int[icol] == 3) is_int[icol] = 4; else is_int[icol] = 1; has_int = 1; fscanfLpIO(buff); }; break; case 3: /* Binaries section */ fscanfLpIO(buff); while (is_keyword(buff) == 0) { icol = findHash(buff, 1); #ifdef LPIO_DEBUG printf("CoinLpIO::readLp(): binary: colname: (%s) icol: %d\n", buff, icol); #endif if (icol < 0) { char printBuffer[512]; sprintf(printBuffer, "### CoinLpIO::readLp(): Binary variable %s does not appear in objective function or constraints", buff); handler_->message(COIN_GENERAL_WARNING, messages_) << printBuffer << CoinMessageEol; insertHash(buff, 1); icol = findHash(buff, 1); if (icol == maxcol) { realloc_col(&collow, &colup, &is_int, &maxcol); } #ifdef LPIO_DEBUG printf("CoinLpIO::readLp(): binary: colname: (%s) icol: %d\n", buff, icol); #endif } is_int[icol] = 1; has_int = 1; if (collow[icol] < 0) { collow[icol] = 0; } if (colup[icol] > 1) { colup[icol] = 1; } fscanfLpIO(buff); } break; case 4: /* Semis section */ fscanfLpIO(buff); while (is_keyword(buff) == 0) { icol = findHash(buff, 1); #ifdef LPIO_DEBUG printf("CoinLpIO::readLp(): Semi: colname: (%s) icol: %d\n", buff, icol); #endif if (icol < 0) { char printBuffer[512]; sprintf(printBuffer, "### CoinLpIO::readLp(): Semi-continuous variable %s does not appear in objective function or constraints", buff); handler_->message(COIN_GENERAL_WARNING, messages_) << printBuffer << CoinMessageEol; insertHash(buff, 1); icol = findHash(buff, 1); if (icol == maxcol) { realloc_col(&collow, &colup, &is_int, &maxcol); } #ifdef LPIO_DEBUG printf("CoinLpIO::readLp(): Semi-continuous: colname: (%s) icol: %d\n", buff, icol); #endif } if (is_int[icol] == 1) is_int[icol] = 4; else is_int[icol] = 3; has_int = 1; fscanfLpIO(buff); }; break; case 5: /* sos section */ { numberSets_ = 0; int maxSets = 10; CoinSet **set = new CoinSet *[maxSets]; int maxEntries = 100; double *weights = new double[maxEntries]; int *which = new int[maxEntries]; char printBuffer[512]; int numberBad = 0; bool maybeSetName; fscanfLpIO(buff); while (true) { int numberEntries = 0; int setType = -1; int goodLine = 2; bool endLine = false; bool gotStart = false; maybeSetName = false; while (!endLine) { if (is_keyword(buff) == 0) { // see if :: char *next = strstr(buff, "::"); if (!gotStart) { if (!next) { // OK first time - may be name of set if (goodLine == 2) { int length = strlen(buff); if (buff[length - 1] == ':') { goodLine = 1; // merge to get rid of space char temp[200]; strcpy(temp, buff); fscanfLpIO(buff); // try again strcat(temp, buff); strcpy(buff, temp); if (maybeSetName) { // get rid of error numberBad--; maybeSetName = false; } continue; } else { goodLine = 0; } } else { goodLine = 0; } } else { // check nothing or set name if (strchr(buff, ':') < next || next == buff + 2) { // be lazy and assume set name // get type next -= 2; if (next >= buff && (!strncmp(next, "S1::", 4) || !strncmp(next, "S2::", 4))) { setType = next[1] - '0'; gotStart = true; } else { // error goodLine = 0; } } else { goodLine = 0; } } } else if (next) { // end of set endLine = true; } } else { endLine = true; } if (!goodLine) { endLine = true; } while (!endLine) { fscanfLpIO(buff); if (is_keyword(buff) == 0 && !strstr(buff, "::")) { // expect pair char *start_str = buff; char *next = strchr(start_str, ':'); if (!next) { endLine = true; goodLine = 0; } else { *next = '\0'; int iColumn = columnIndex(start_str); *next = ':'; if (iColumn >= 0) { int length = strlen(next + 1); if (!length) { // assume user put in spaces fscanfLpIO(buff); if (is_keyword(buff) != 0 || strstr(buff, "::")) { goodLine = 0; } else { next = buff - 1; } } double value = atof(next + 1); if (numberEntries == maxEntries) { maxEntries = 2 * maxEntries; double *tempD = new double[maxEntries]; int *tempI = new int[maxEntries]; memcpy(tempD, weights, numberEntries * sizeof(double)); memcpy(tempI, which, numberEntries * sizeof(int)); delete[] weights; weights = tempD; delete[] which; which = tempI; } weights[numberEntries] = value; which[numberEntries++] = iColumn; } else { // no match - assume start of next set if (!numberBad) { sprintf(printBuffer, "### CoinLpIO::readLp(): Variable %s not found or no weight", buff); handler_->message(COIN_GENERAL_WARNING, messages_) << printBuffer << CoinMessageEol; sprintf(printBuffer, "Assuming next set name - consider no set names or use setnn:S1:: (no spaces)"); handler_->message(COIN_GENERAL_WARNING, messages_) << printBuffer << CoinMessageEol; maybeSetName = true; } numberBad++; endLine = true; } } } else { endLine = true; } } if (!goodLine) { // print bad line setType = 3; sprintf(printBuffer, "### CoinLpIO::readLp(): bad SOS item %s", buff); handler_->message(COIN_GENERAL_WARNING, messages_) << printBuffer << CoinMessageEol; numberBad++; endLine = true; break; } } if (setType == 1 || setType == 2) { if (!numberEntries) { // empty set - error sprintf(printBuffer, "### CoinLpIO::readLp(): set %d is empty", numberSets_); handler_->message(COIN_GENERAL_WARNING, messages_) << printBuffer << CoinMessageEol; } else { CoinSort_2(weights, weights + numberEntries, which); double last = weights[0]; for (int i = 1; i < numberEntries; i++) { if (fabs(last - weights[i]) < 1.0e-12) { setType = 3; break; } } if (setType != 3) { if (numberSets_ == maxSets) { maxSets *= 2; CoinSet **temp = new CoinSet *[maxSets]; memcpy(temp, set, numberSets_ * sizeof(CoinSet *)); delete[] set; set = temp; } CoinSosSet *newSet = new CoinSosSet(numberEntries, which, weights, setType); set[numberSets_++] = newSet; } else { sprintf(printBuffer, "### CoinLpIO::readLp(): set %d has duplicate weights", numberSets_); handler_->message(COIN_GENERAL_WARNING, messages_) << printBuffer << CoinMessageEol; } } } if (is_keyword(buff) || (numberBad && !maybeSetName)) break; // end } delete[] weights; delete[] which; if (numberSets_) { set_ = new CoinSet *[numberSets_]; memcpy(set_, set, numberSets_ * sizeof(CoinSet *)); delete[] set; } } break; case 6: done = 1; break; default: char str[8192]; sprintf(str, "### ERROR: Lost while reading: (%s)\n", buff); throw CoinError(str, "readLp", "CoinLpIO", __FILE__, __LINE__); break; } } #ifdef LPIO_DEBUG printf("CoinLpIO::readLp(): Done with reading the Lp file\n"); #endif int *ind = reinterpret_cast< int * >(malloc((maxcoeff + 1) * sizeof(int))); for (i = 0; i < cnt_coeff; i++) { ind[i] = findHash(colNames[i], 1); #ifdef LPIO_DEBUG printf("CoinLpIO::readLp(): name[%d]: (%s) ind: %d\n", i, colNames[i], ind[i]); #endif if (ind[i] < 0) { char str[8192]; sprintf(str, "### ERROR: Hash table: %s not found\n", colNames[i]); throw CoinError(str, "readLp", "CoinLpIO", __FILE__, __LINE__); } } numberColumns_ = numberHash_[1]; numberElements_ = cnt_coeff - start[0]; double *obj[MAX_OBJECTIVES]; for (int j = 0; j < num_objectives; j++) { obj[j] = reinterpret_cast< double * >(malloc(numberColumns_ * sizeof(double))); memset(obj[j], 0, numberColumns_ * sizeof(double)); for (i = obj_starts[j]; i < obj_starts[j + 1]; i++) { icol = findHash(colNames[i], 1); if (icol < 0) { char str[8192]; sprintf(str, "### ERROR: Hash table: %s (obj) not found\n", colNames[i]); throw CoinError(str, "readLp", "CoinLpIO", __FILE__, __LINE__); } obj[j][icol] = objsense * coeff[i]; } } if (objsense == -1) { handler_->message(COIN_GENERAL_INFO, messages_) << " CoinLpIO::readLp(): Maximization problem reformulated as minimization" << CoinMessageEol; for (int j = 0; j < num_objectives_; j++) { objectiveOffset_[j] = -objectiveOffset_[j]; } } for (i = 0; i < cnt_row + 1; i++) { start[i] -= cnt_obj; } CoinPackedMatrix *matrix = new CoinPackedMatrix(false, numberColumns_, numberRows_, numberElements_, &(coeff[cnt_obj]), &(ind[cnt_obj]), start, NULL); #ifdef LPIO_DEBUG matrix->dumpMatrix(); #endif // save sets CoinSet **saveSet = set_; int saveNumberSets = numberSets_; set_ = NULL; numberSets_ = 0; setLpDataWithoutRowAndColNames(*matrix, collow, colup, const_cast< const double ** >(obj), num_objectives, has_int ? is_int : 0, rowlow, rowup); set_ = saveSet; numberSets_ = saveNumberSets; for (int j = 0; j < num_objectives; j++) { if (objName[j] == NULL) { rowNames[cnt_row + j] = CoinStrdup("obj"); } else { rowNames[cnt_row + j] = CoinStrdup(objName[j]); } } // Hash tables for column names are already set up setLpDataRowAndColNames(rowNames, NULL); if (are_invalid_names(names_[1], numberHash_[1], false)) { setDefaultColNames(); handler_->message(COIN_GENERAL_WARNING, messages_) << "### CoinLpIO::readLp(): Invalid column names\nNow using default column names." << CoinMessageEol; } for (i = 0; i < cnt_coeff; i++) { free(colNames[i]); } free(colNames); for (i = 0; i < cnt_row + 1; i++) { free(rowNames[i]); } free(rowNames); for (int j = 0; j < num_objectives; j++) { free(objName[j]); } #ifdef LPIO_DEBUG writeLp("readlp.xxx"); printf("CoinLpIO::readLp(): read Lp file written in file readlp.xxx\n"); #endif free(coeff); free(start); free(ind); free(colup); free(collow); free(rhs); free(rowlow); free(rowup); free(is_int); for (int j = 0; j < num_objectives; j++) { free(obj[j]); } delete matrix; } /* readLp */ /*************************************************************************/ void CoinLpIO::print() const { printf("problemName_: %s\n", problemName_); printf("numberRows_: %d\n", numberRows_); printf("numberColumns_: %d\n", numberColumns_); printf("matrixByRows_:\n"); matrixByRow_->dumpMatrix(); int i; printf("rowlower_:\n"); for (i = 0; i < numberRows_; i++) { printf("%.5f ", rowlower_[i]); } printf("\n"); printf("rowupper_:\n"); for (i = 0; i < numberRows_; i++) { printf("%.5f ", rowupper_[i]); } printf("\n"); printf("collower_:\n"); for (i = 0; i < numberColumns_; i++) { printf("%.5f ", collower_[i]); } printf("\n"); printf("colupper_:\n"); for (i = 0; i < numberColumns_; i++) { printf("%.5f ", colupper_[i]); } printf("\n"); for (int j = 0; j < num_objectives_; j++) { printf("objective_[%i]:\n", j); for (i = 0; i < numberColumns_; i++) { printf("%.5f ", objective_[j][i]); } } printf("\n"); if (integerType_ != NULL) { printf("integerType_:\n"); for (i = 0; i < numberColumns_; i++) { printf("%c ", integerType_[i]); } } else { printf("integerType_: NULL\n"); } printf("\n"); if (fileName_ != NULL) { printf("fileName_: %s\n", fileName_); } printf("infinity_: %.5f\n", infinity_); } /* print */ /*************************************************************************/ // Hash functions slightly modified from CoinMpsIO.cpp namespace { const int mmult[] = { 262139, 259459, 256889, 254291, 251701, 249133, 246709, 244247, 241667, 239179, 236609, 233983, 231289, 228859, 226357, 223829, 221281, 218849, 216319, 213721, 211093, 208673, 206263, 203773, 201233, 198637, 196159, 193603, 191161, 188701, 186149, 183761, 181303, 178873, 176389, 173897, 171469, 169049, 166471, 163871, 161387, 158941, 156437, 153949, 151531, 149159, 146749, 144299, 141709, 139369, 136889, 134591, 132169, 129641, 127343, 124853, 122477, 120163, 117757, 115361, 112979, 110567, 108179, 105727, 103387, 101021, 98639, 96179, 93911, 91583, 89317, 86939, 84521, 82183, 79939, 77587, 75307, 72959, 70793, 68447, 66103 }; int compute_hash(const char *name, int maxsiz, int length) { int n = 0; int j; const int nEntriesMMult = sizeof(mmult) / sizeof(int); for (j = 0; j < length; ++j) { int iname = name[j]; n += mmult[j % nEntriesMMult] * iname; } return (abs(n) % maxsiz); /* integer abs */ } } // end file-local namespace /************************************************************************/ // startHash. Creates hash list for names // setup names_[section] with names in the same order as in the parameter, // but removes duplicates void CoinLpIO::startHash(char const *const *const names, const COINColumnIndex number, int section) { maxHash_[section] = 4 * number; int maxhash = maxHash_[section]; COINColumnIndex i, ipos, iput; names_[section] = reinterpret_cast< char ** >(malloc(maxhash * sizeof(char *))); hash_[section] = new CoinHashLink[maxhash]; CoinHashLink *hashThis = hash_[section]; char **hashNames = names_[section]; for (i = 0; i < maxhash; i++) { hashThis[i].index = -1; hashThis[i].next = -1; } /* * Initialize the hash table. Only the index of the first name that * hashes to a value is entered in the table; subsequent names that * collide with it are not entered. */ for (i = 0; i < number; i++) { const char *thisName = names[i]; int length = CoinStrlenAsInt(thisName); ipos = compute_hash(thisName, maxhash, length); if (hashThis[ipos].index == -1) { hashThis[ipos].index = i; // will be changed below } } /* * Now take care of the names that collided in the preceding loop, * by finding some other entry in the table for them. * Since there are as many entries in the table as there are names, * there must be room for them. * Also setting up hashNames. */ int cnt_distinct = 0; iput = -1; for (i = 0; i < number; i++) { const char *thisName = names[i]; int length = CoinStrlenAsInt(thisName); ipos = compute_hash(thisName, maxhash, length); while (1) { COINColumnIndex j1 = hashThis[ipos].index; if (j1 == i) { // first occurence of thisName in the parameter "names" hashThis[ipos].index = cnt_distinct; hashNames[cnt_distinct] = CoinStrdup(thisName); cnt_distinct++; break; } else { #ifdef LPIO_DEBUG if (j1 > i) { char str[8192]; sprintf(str, "### ERROR: Hash table: j1: %d i: %d\n", j1, i); throw CoinError(str, "startHash", "CoinLpIO", __FILE__, __LINE__); } #endif if (strcmp(thisName, hashNames[j1]) == 0) { // thisName already entered break; } else { // Collision; check if thisName already entered COINColumnIndex k = hashThis[ipos].next; if (k == -1) { // thisName not found; enter it while (1) { ++iput; if (iput > maxhash) { char str[8192]; sprintf(str, "### ERROR: Hash table: too many names\n"); throw CoinError(str, "startHash", "CoinLpIO", __FILE__, __LINE__); break; } if (hashThis[iput].index == -1) { break; } } hashThis[ipos].next = iput; hashThis[iput].index = cnt_distinct; hashNames[cnt_distinct] = CoinStrdup(thisName); cnt_distinct++; break; } else { ipos = k; // continue the check with names in collision } } } } } numberHash_[section] = cnt_distinct; } /* startHash */ /**************************************************************************/ // stopHash. Deletes hash storage void CoinLpIO::stopHash(int section) { freePreviousNames(section); previous_names_[section] = names_[section]; card_previous_names_[section] = numberHash_[section]; delete[] hash_[section]; hash_[section] = NULL; maxHash_[section] = 0; numberHash_[section] = 0; if (section == 0) { for (int j = 0; j < num_objectives_; j++) { if (objName_[j] != NULL) { free(objName_[j]); objName_[j] = NULL; } } } } /* stopHash */ /**********************************************************************/ // findHash. -1 not found COINColumnIndex CoinLpIO::findHash(const char *name, int section) const { COINColumnIndex found = -1; char **names = names_[section]; CoinHashLink *hashThis = hash_[section]; COINColumnIndex maxhash = maxHash_[section]; COINColumnIndex ipos; /* default if we don't find anything */ if (!maxhash) return -1; int length = CoinStrlenAsInt(name); ipos = compute_hash(name, maxhash, length); while (1) { COINColumnIndex j1 = hashThis[ipos].index; if (j1 >= 0) { char *thisName2 = names[j1]; if (strcmp(name, thisName2) != 0) { COINColumnIndex k = hashThis[ipos].next; if (k != -1) ipos = k; else break; } else { found = j1; break; } } else { found = -1; break; } } return found; } /* findHash */ /*********************************************************************/ void CoinLpIO::insertHash(const char *thisName, int section) { int number = numberHash_[section]; int maxhash = maxHash_[section]; CoinHashLink *hashThis = hash_[section]; char **hashNames = names_[section]; int iput = -1; int length = CoinStrlenAsInt(thisName); int ipos = compute_hash(thisName, maxhash, length); while (1) { COINColumnIndex j1 = hashThis[ipos].index; if (j1 == -1) { hashThis[ipos].index = number; break; } else { char *thisName2 = hashNames[j1]; if (strcmp(thisName, thisName2) != 0) { COINColumnIndex k = hashThis[ipos].next; if (k == -1) { while (1) { ++iput; if (iput == maxhash) { char str[8192]; sprintf(str, "### ERROR: Hash table: too many names\n"); throw CoinError(str, "insertHash", "CoinLpIO", __FILE__, __LINE__); break; } if (hashThis[iput].index == -1) { break; } } hashThis[ipos].next = iput; hashThis[iput].index = number; break; } else { ipos = k; /* nothing worked - try it again */ } } } } hashNames[number] = CoinStrdup(thisName); (numberHash_[section])++; } // Pass in Message handler (not deleted at end) void CoinLpIO::passInMessageHandler(CoinMessageHandler *handler) { if (defaultHandler_) delete handler_; defaultHandler_ = false; handler_ = handler; } // Set language void CoinLpIO::newLanguage(CoinMessages::Language language) { messages_ = CoinMessage(language); } // Get next line into inputBuffer_ (returns number in) int CoinLpIO::newCardLpIO() const { while (bufferPosition_ == bufferLength_) { // new line bufferPosition_ = 0; bufferLength_ = 0; char *ok = input_->gets(inputBuffer_, 1024); if (!ok) return 0; int length = strlen(inputBuffer_); // take off blanks or below if (length && length < 1023) { length--; while(length>=0) { if (inputBuffer_[length]<=' ') length--; else break; } // but put back something inputBuffer_[length+1]='\n'; inputBuffer_[length+2]='\0'; } // go to single blanks and remove all blanks before :: or : char *colons = strstr(inputBuffer_, "::"); int nn = 0; if (colons) { nn = colons - inputBuffer_; for (int i = 0; i < nn; i++) { if (inputBuffer_[i] != ' ') inputBuffer_[bufferLength_++] = inputBuffer_[i]; } } bool gotEol = false; while (nn < 1024) { if (inputBuffer_[nn] == ':') { // take out blank before if (inputBuffer_[bufferLength_ - 1] == ' ') bufferLength_--; } if (inputBuffer_[nn] == '\t') inputBuffer_[nn] = ' '; if (inputBuffer_[nn] == '\0' || inputBuffer_[nn] == '\n' || inputBuffer_[nn] == '\r') { if (inputBuffer_[nn] == '\n' || inputBuffer_[nn] == '\r') gotEol = true; break; } if (inputBuffer_[nn] != ' ' || inputBuffer_[nn + 1] != ' ') inputBuffer_[bufferLength_++] = inputBuffer_[nn]; nn++; } if (gotEol) { //inputBuffer_[bufferLength_]='\n'; inputBuffer_[bufferLength_] = '\0'; } if (inputBuffer_[0] == ' ') bufferPosition_++; if (!gotEol) bufferLength_ = -bufferLength_; } return abs(bufferLength_); } // Get next string (returns number in) int CoinLpIO::fscanfLpIO(char *buff) const { assert(input_); if (bufferPosition_ == bufferLength_) { int returnCode = newCardLpIO(); if (!returnCode) { if (eofFound_) return 0; eofFound_ = true; handler_->message(COIN_GENERAL_WARNING, messages_) << "### CoinLpIO::scan_next(): End inserted" << CoinMessageEol; strcpy(buff, "End"); } } char *space = strchr(inputBuffer_ + bufferPosition_, ' '); int n = 0; int start = 0; if (space) n = space - (inputBuffer_ + bufferPosition_); if (n == 0) { if (bufferLength_ >= 0) { n = bufferLength_ - bufferPosition_; } else { // partial line - get more start = CoinMax(abs(bufferLength_) - bufferPosition_, 0); memcpy(buff, inputBuffer_ + bufferPosition_, start); bufferPosition_ = bufferLength_; int returnCode = newCardLpIO(); if (!returnCode) return 0; if (inputBuffer_[0] != ' ') { space = strchr(inputBuffer_, ' '); assert(space || bufferLength_ > 0); if (space) n = space - (inputBuffer_ + bufferPosition_); else n = bufferLength_ - bufferPosition_; } else { n = 0; } } } memcpy(buff + start, inputBuffer_ + bufferPosition_, n); bufferPosition_ += n; if (inputBuffer_[bufferPosition_] == ' ') bufferPosition_++; buff[start + n] = '\0'; while (is_comment(buff)) { skip_comment(buff); int x = fscanfLpIO(buff); if (x <= 0) { handler_->message(COIN_GENERAL_WARNING, messages_) << "### CoinLpIO::scan_next(): field expected" << CoinMessageEol; throw("bad fscanf"); } } return n + start; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/Makefile.in0000644000175200017520000010073412502177062015627 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = src DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/config_coinutils.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.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_coinutils.h CONFIG_CLEAN_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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libCoinUtils_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) am_libCoinUtils_la_OBJECTS = CoinAlloc.lo CoinBuild.lo \ CoinDenseVector.lo CoinError.lo CoinFactorization1.lo \ CoinFactorization2.lo CoinFactorization3.lo \ CoinFactorization4.lo CoinSimpFactorization.lo \ CoinDenseFactorization.lo CoinOslFactorization.lo \ CoinOslFactorization2.lo CoinOslFactorization3.lo \ CoinFileIO.lo CoinFinite.lo CoinIndexedVector.lo CoinLpIO.lo \ CoinMessage.lo CoinMessageHandler.lo CoinModel.lo \ CoinStructuredModel.lo CoinModelUseful.lo CoinModelUseful2.lo \ CoinMpsIO.lo CoinPackedMatrix.lo CoinPackedVector.lo \ CoinPackedVectorBase.lo CoinParam.lo CoinParamUtils.lo \ CoinPostsolveMatrix.lo CoinPrePostsolveMatrix.lo \ CoinPresolveDoubleton.lo CoinPresolveDual.lo \ CoinPresolveDupcol.lo CoinPresolveEmpty.lo \ CoinPresolveFixed.lo CoinPresolveForcing.lo \ CoinPresolveHelperFunctions.lo CoinPresolveImpliedFree.lo \ CoinPresolveIsolated.lo CoinPresolveMatrix.lo \ CoinPresolvePsdebug.lo CoinPresolveMonitor.lo \ CoinPresolveSingleton.lo CoinPresolveSubst.lo \ CoinPresolveTighten.lo CoinPresolveTripleton.lo \ CoinPresolveUseless.lo CoinPresolveZeros.lo CoinRational.lo \ CoinSearchTree.lo CoinShallowPackedVector.lo CoinSnapshot.lo \ CoinWarmStartBasis.lo CoinWarmStartVector.lo \ CoinWarmStartDual.lo CoinWarmStartPrimalDual.lo libCoinUtils_la_OBJECTS = $(am_libCoinUtils_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libCoinUtils_la_SOURCES) DIST_SOURCES = $(libCoinUtils_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ADD_FFLAGS = @ADD_FFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BLAS_CFLAGS = @BLAS_CFLAGS@ BLAS_CFLAGS_INSTALLED = @BLAS_CFLAGS_INSTALLED@ BLAS_DATA = @BLAS_DATA@ BLAS_DATA_INSTALLED = @BLAS_DATA_INSTALLED@ BLAS_DEPENDENCIES = @BLAS_DEPENDENCIES@ BLAS_LIBS = @BLAS_LIBS@ BLAS_LIBS_INSTALLED = @BLAS_LIBS_INSTALLED@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILSLIB_CFLAGS = @COINUTILSLIB_CFLAGS@ COINUTILSLIB_CFLAGS_INSTALLED = @COINUTILSLIB_CFLAGS_INSTALLED@ COINUTILSLIB_DEPENDENCIES = @COINUTILSLIB_DEPENDENCIES@ COINUTILSLIB_LIBS = @COINUTILSLIB_LIBS@ COINUTILSLIB_LIBS_INSTALLED = @COINUTILSLIB_LIBS_INSTALLED@ COINUTILSLIB_PCLIBS = @COINUTILSLIB_PCLIBS@ COINUTILSLIB_PCREQUIRES = @COINUTILSLIB_PCREQUIRES@ COINUTILS_SVN_REV = @COINUTILS_SVN_REV@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_BLAS_FALSE = @COIN_HAS_BLAS_FALSE@ COIN_HAS_BLAS_TRUE = @COIN_HAS_BLAS_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_LAPACK_FALSE = @COIN_HAS_LAPACK_FALSE@ COIN_HAS_LAPACK_TRUE = @COIN_HAS_LAPACK_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_ZLIB_FALSE = @COIN_HAS_ZLIB_FALSE@ COIN_HAS_ZLIB_TRUE = @COIN_HAS_ZLIB_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DBG_FFLAGS = @DBG_FFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FLIBS = @FLIBS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAPACK_CFLAGS = @LAPACK_CFLAGS@ LAPACK_CFLAGS_INSTALLED = @LAPACK_CFLAGS_INSTALLED@ LAPACK_DATA = @LAPACK_DATA@ LAPACK_DATA_INSTALLED = @LAPACK_DATA_INSTALLED@ LAPACK_DEPENDENCIES = @LAPACK_DEPENDENCIES@ LAPACK_LIBS = @LAPACK_LIBS@ LAPACK_LIBS_INSTALLED = @LAPACK_LIBS_INSTALLED@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OPT_FFLAGS = @OPT_FFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libCoinUtils # ######################################################################## # Name of the library compiled in this directory. # We want it to be installed in the $libdir directory lib_LTLIBRARIES = libCoinUtils.la # List all source files for this library, including headers libCoinUtils_la_SOURCES = \ config_coinutils.h \ CoinUtilsConfig.h \ Coin_C_defines.h \ CoinAlloc.cpp CoinAlloc.hpp \ CoinBuild.cpp CoinBuild.hpp \ CoinDenseVector.cpp CoinDenseVector.hpp \ CoinDistance.hpp \ CoinError.cpp CoinError.hpp \ CoinFactorization.hpp \ CoinFactorization1.cpp \ CoinFactorization2.cpp \ CoinFactorization3.cpp \ CoinFactorization4.cpp \ CoinSimpFactorization.hpp \ CoinSimpFactorization.cpp \ CoinDenseFactorization.hpp \ CoinDenseFactorization.cpp \ CoinOslFactorization.hpp \ CoinOslFactorization.cpp \ CoinOslFactorization2.cpp \ CoinOslFactorization3.cpp \ CoinOslC.h \ CoinFileIO.cpp CoinFileIO.hpp \ CoinFinite.cpp CoinFinite.hpp \ CoinFloatEqual.hpp \ CoinHelperFunctions.hpp \ CoinIndexedVector.cpp CoinIndexedVector.hpp \ CoinLpIO.cpp CoinLpIO.hpp \ CoinMessage.cpp CoinMessage.hpp \ CoinMessageHandler.cpp CoinMessageHandler.hpp \ CoinModel.cpp CoinModel.hpp \ CoinStructuredModel.cpp CoinStructuredModel.hpp \ CoinModelUseful.cpp CoinModelUseful.hpp \ CoinModelUseful2.cpp \ CoinMpsIO.cpp CoinMpsIO.hpp \ CoinPackedMatrix.cpp CoinPackedMatrix.hpp \ CoinPackedVector.cpp CoinPackedVector.hpp \ CoinPackedVectorBase.cpp CoinPackedVectorBase.hpp \ CoinParam.cpp CoinParamUtils.cpp CoinParam.hpp \ CoinPostsolveMatrix.cpp \ CoinPragma.hpp \ CoinPrePostsolveMatrix.cpp \ CoinPresolveDoubleton.cpp CoinPresolveDoubleton.hpp \ CoinPresolveDual.cpp CoinPresolveDual.hpp \ CoinPresolveDupcol.cpp CoinPresolveDupcol.hpp \ CoinPresolveEmpty.cpp CoinPresolveEmpty.hpp \ CoinPresolveFixed.cpp CoinPresolveFixed.hpp \ CoinPresolveForcing.cpp CoinPresolveForcing.hpp \ CoinPresolveHelperFunctions.cpp \ CoinPresolveImpliedFree.cpp CoinPresolveImpliedFree.hpp \ CoinPresolveIsolated.cpp CoinPresolveIsolated.hpp \ CoinPresolveMatrix.cpp CoinPresolveMatrix.hpp \ CoinPresolvePsdebug.cpp CoinPresolvePsdebug.hpp \ CoinPresolveMonitor.cpp CoinPresolveMonitor.hpp \ CoinPresolveSingleton.cpp CoinPresolveSingleton.hpp \ CoinPresolveSubst.cpp CoinPresolveSubst.hpp \ CoinPresolveTighten.cpp CoinPresolveTighten.hpp \ CoinPresolveTripleton.cpp CoinPresolveTripleton.hpp \ CoinPresolveUseless.cpp CoinPresolveUseless.hpp \ CoinPresolveZeros.cpp CoinPresolveZeros.hpp \ CoinRational.cpp CoinRational.hpp \ CoinSearchTree.cpp CoinSearchTree.hpp \ CoinShallowPackedVector.cpp CoinShallowPackedVector.hpp \ CoinSignal.hpp \ CoinSmartPtr.hpp \ CoinSnapshot.cpp CoinSnapshot.hpp \ CoinSort.hpp \ CoinTime.hpp \ CoinTypes.hpp \ CoinUtility.hpp \ CoinWarmStart.hpp \ CoinWarmStartBasis.cpp CoinWarmStartBasis.hpp \ CoinWarmStartVector.cpp CoinWarmStartVector.hpp \ CoinWarmStartDual.cpp CoinWarmStartDual.hpp \ CoinWarmStartPrimalDual.cpp CoinWarmStartPrimalDual.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libCoinUtils_la_LIBADD = $(COINUTILSLIB_LIBS) # This is for libtool libCoinUtils_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = $(GLPK_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'install/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ Coin_C_defines.h \ CoinAlloc.hpp \ CoinBuild.hpp \ CoinDenseVector.hpp \ CoinDistance.hpp \ CoinError.hpp \ CoinFactorization.hpp \ CoinSimpFactorization.hpp \ CoinDenseFactorization.hpp \ CoinOslFactorization.hpp \ CoinFileIO.hpp \ CoinFinite.hpp \ CoinFloatEqual.hpp \ CoinHelperFunctions.hpp \ CoinIndexedVector.hpp \ CoinLpIO.hpp \ CoinMessage.hpp \ CoinMessageHandler.hpp \ CoinModel.hpp \ CoinStructuredModel.hpp \ CoinModelUseful.hpp \ CoinMpsIO.hpp \ CoinPackedMatrix.hpp \ CoinPackedVector.hpp \ CoinPackedVectorBase.hpp \ CoinParam.hpp \ CoinPragma.hpp \ CoinPresolveDoubleton.hpp \ CoinPresolveDual.hpp \ CoinPresolveDupcol.hpp \ CoinPresolveEmpty.hpp \ CoinPresolveFixed.hpp \ CoinPresolveForcing.hpp \ CoinPresolveImpliedFree.hpp \ CoinPresolveIsolated.hpp \ CoinPresolveMatrix.hpp \ CoinPresolveMonitor.hpp \ CoinPresolvePsdebug.hpp \ CoinPresolveSingleton.hpp \ CoinPresolveSubst.hpp \ CoinPresolveTighten.hpp \ CoinPresolveTripleton.hpp \ CoinPresolveUseless.hpp \ CoinPresolveZeros.hpp \ CoinRational.hpp \ CoinSearchTree.hpp \ CoinShallowPackedVector.hpp \ CoinSignal.hpp \ CoinSmartPtr.hpp \ CoinSnapshot.hpp \ CoinSort.hpp \ CoinTime.hpp \ CoinTypes.hpp \ CoinUtility.hpp \ CoinWarmStart.hpp \ CoinWarmStartBasis.hpp \ CoinWarmStartVector.hpp \ CoinWarmStartDual.hpp \ CoinWarmStartPrimalDual.hpp all: config.h config_coinutils.h $(MAKE) $(AM_MAKEFLAGS) 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign 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 config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status src/config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h1 touch $@ config_coinutils.h: stamp-h2 @if test ! -f $@; then \ rm -f stamp-h2; \ $(MAKE) stamp-h2; \ else :; fi stamp-h2: $(srcdir)/config_coinutils.h.in $(top_builddir)/config.status @rm -f stamp-h2 cd $(top_builddir) && $(SHELL) ./config.status src/config_coinutils.h distclean-hdr: -rm -f config.h stamp-h1 config_coinutils.h stamp-h2 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libCoinUtils.la: $(libCoinUtils_la_OBJECTS) $(libCoinUtils_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libCoinUtils_la_LDFLAGS) $(libCoinUtils_la_OBJECTS) $(libCoinUtils_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinAlloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinBuild.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinDenseFactorization.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinDenseVector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinError.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinFactorization1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinFactorization2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinFactorization3.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinFactorization4.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinFileIO.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinFinite.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinIndexedVector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinLpIO.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinMessage.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinMessageHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinModel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinModelUseful.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinModelUseful2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinMpsIO.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinOslFactorization.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinOslFactorization2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinOslFactorization3.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPackedMatrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPackedVector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPackedVectorBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinParam.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinParamUtils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPostsolveMatrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPrePostsolveMatrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveDoubleton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveDual.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveDupcol.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveEmpty.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveFixed.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveForcing.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveHelperFunctions.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveImpliedFree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveIsolated.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveMatrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveMonitor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolvePsdebug.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveSingleton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveSubst.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveTighten.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveTripleton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveUseless.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPresolveZeros.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinRational.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinSearchTree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinShallowPackedVector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinSimpFactorization.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinSnapshot.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinStructuredModel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinWarmStartBasis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinWarmStartDual.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinWarmStartPrimalDual.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinWarmStartVector.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in config_coinutils.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in config_coinutils.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in config_coinutils.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in config_coinutils.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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) $(HEADERS) config.h config_coinutils.h installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-exec-local install-libLTLIBRARIES install-info: install-info-am install-man: 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: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES uninstall-local .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags 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-exec install-exec-am \ install-exec-local install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ 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 uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES uninstall-local ####################################################################### # Create the Config.h file that has all public defines and install it # ####################################################################### install-exec-local: $(install_sh_DATA) config_coinutils.h $(DESTDIR)$(includecoindir)/CoinUtilsConfig.h uninstall-local: rm -f $(DESTDIR)$(includecoindir)/CoinUtilsConfig.h # 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: DyLP-1.10.4/CoinUtils/src/CoinSimpFactorization.hpp0000644000175200017520000003145713414454441020560 0ustar coincoin/* $Id: CoinSimpFactorization.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2008, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /* This is a simple factorization of the LP Basis */ #ifndef CoinSimpFactorization_H #define CoinSimpFactorization_H #include #include #include #include "CoinTypes.hpp" #include "CoinIndexedVector.hpp" #include "CoinDenseFactorization.hpp" class CoinPackedMatrix; /// pointers used during factorization class FactorPointers { public: double *rowMax; int *firstRowKnonzeros; int *prevRow; int *nextRow; int *firstColKnonzeros; int *prevColumn; int *nextColumn; int *newCols; //constructor FactorPointers(int numRows, int numCols, int *UrowLengths_, int *UcolLengths_); // destructor ~FactorPointers(); }; class CoinSimpFactorization : public CoinOtherFactorization { friend void CoinSimpFactorizationUnitTest(const std::string &mpsDir); public: /**@name Constructors and destructor and copy */ //@{ /// Default constructor CoinSimpFactorization(); /// Copy constructor CoinSimpFactorization(const CoinSimpFactorization &other); /// Destructor virtual ~CoinSimpFactorization(); /// = copy CoinSimpFactorization &operator=(const CoinSimpFactorization &other); /// Clone virtual CoinOtherFactorization *clone() const; //@} /**@name Do factorization - public */ //@{ /// Gets space for a factorization virtual void getAreas(int numberRows, int numberColumns, int maximumL, int maximumU); /// PreProcesses column ordered copy of basis virtual void preProcess(); /** Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use numberGoodColumns and redo */ virtual int factor(); /// Does post processing on valid factorization - putting variables on correct rows virtual void postProcess(const int *sequence, int *pivotVariable); /// Makes a non-singular basis by replacing variables virtual void makeNonSingular(int *sequence, int numberColumns); //@} /**@name general stuff such as status */ //@{ /// Total number of elements in factorization virtual inline int numberElements() const { return numberRows_ * (numberColumns_ + numberPivots_); } /// Returns maximum absolute value in factorization double maximumCoefficient() const; //@} /**@name rank one updates which do exist */ //@{ /** Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModifying is true will do all accuracy checks before modifying factorization. Whether to set this depends on speed considerations. You could just do this on first iteration after factorization and thereafter re-factorize partial update already in U */ virtual int replaceColumn(CoinIndexedVector *regionSparse, int pivotRow, double pivotCheck, bool checkBeforeModifying = false, double acceptablePivot = 1.0e-8); //@} /**@name various uses of factorization (return code number elements) which user may want to know about */ //@{ /** Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no room regionSparse starts as zero and is zero at end. Note - if regionSparse2 packed on input - will be packed on output */ virtual int updateColumnFT(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute = false); /** This version has same effect as above with FTUpdate==false so number returned is always >=0 */ virtual int updateColumn(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute = false) const; /// does FTRAN on two columns virtual int updateTwoColumnsFT(CoinIndexedVector *regionSparse1, CoinIndexedVector *regionSparse2, CoinIndexedVector *regionSparse3, bool noPermute = false); /// does updatecolumn if save==true keeps column for replace column int upColumn(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute = false, bool save = false) const; /** Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output */ virtual int updateColumnTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) const; /// does updateColumnTranspose, the other is a wrapper int upColumnTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) const; //@} /// *** Below this user may not want to know about /**@name various uses of factorization which user may not want to know about (left over from my LP code) */ //@{ /// Get rid of all memory inline void clearArrays() { gutsOfDestructor(); } /// Returns array to put basis indices in inline int *indices() const { return reinterpret_cast< int * >(elements_ + numberRows_ * numberRows_); } /// Returns permute in virtual inline int *permute() const { return pivotRow_; } //@} /// The real work of destructor void gutsOfDestructor(); /// The real work of constructor void gutsOfInitialize(); /// The real work of copy void gutsOfCopy(const CoinSimpFactorization &other); /// calls factorization void factorize(int numberOfRows, int numberOfColumns, const int colStarts[], const int indicesRow[], const double elements[]); /// main loop of factorization int mainLoopFactor(FactorPointers &pointers); /// copies L by rows void copyLbyRows(); /// copies U by columns void copyUbyColumns(); /// finds a pivot element using Markowitz count int findPivot(FactorPointers &pointers, int &r, int &s, bool &ifSlack); /// finds a pivot in a shortest column int findPivotShCol(FactorPointers &pointers, int &r, int &s); /// finds a pivot in the first column available int findPivotSimp(FactorPointers &pointers, int &r, int &s); /// does Gauss elimination void GaussEliminate(FactorPointers &pointers, int &r, int &s); /// finds short row that intersects a given column int findShortRow(const int column, const int length, int &minRow, int &minRowLength, FactorPointers &pointers); /// finds short column that intersects a given row int findShortColumn(const int row, const int length, int &minCol, int &minColLength, FactorPointers &pointers); /// finds maximum absolute value in a row double findMaxInRrow(const int row, FactorPointers &pointers); /// does pivoting void pivoting(const int pivotRow, const int pivotColumn, const double invPivot, FactorPointers &pointers); /// part of pivoting void updateCurrentRow(const int pivotRow, const int row, const double multiplier, FactorPointers &pointers, int &newNonZeros); /// allocates more space for L void increaseLsize(); /// allocates more space for a row of U void increaseRowSize(const int row, const int newSize); /// allocates more space for a column of U void increaseColSize(const int column, const int newSize, const bool b); /// allocates more space for rows of U void enlargeUrow(const int numNewElements); /// allocates more space for columns of U void enlargeUcol(const int numNewElements, const bool b); /// finds a given row in a column int findInRow(const int row, const int column); /// finds a given column in a row int findInColumn(const int column, const int row); /// declares a row inactive void removeRowFromActSet(const int row, FactorPointers &pointers); /// declares a column inactive void removeColumnFromActSet(const int column, FactorPointers &pointers); /// allocates space for U void allocateSpaceForU(); /// allocates several working arrays void allocateSomeArrays(); /// initializes some numbers void initialSomeNumbers(); /// solves L x = b void Lxeqb(double *b) const; /// same as above but with two rhs void Lxeqb2(double *b1, double *b2) const; /// solves U x = b void Uxeqb(double *b, double *sol) const; /// same as above but with two rhs void Uxeqb2(double *b1, double *sol1, double *sol2, double *b2) const; /// solves x L = b void xLeqb(double *b) const; /// solves x U = b void xUeqb(double *b, double *sol) const; /// updates factorization after a Simplex iteration int LUupdate(int newBasicCol); /// creates a new eta vector void newEta(int row, int numNewElements); /// makes a copy of row permutations void copyRowPermutations(); /// solves H x = b, where H is a product of eta matrices void Hxeqb(double *b) const; /// same as above but with two rhs void Hxeqb2(double *b1, double *b2) const; /// solves x H = b void xHeqb(double *b) const; /// does FTRAN void ftran(double *b, double *sol, bool save) const; /// same as above but with two columns void ftran2(double *b1, double *sol1, double *b2, double *sol2) const; /// does BTRAN void btran(double *b, double *sol) const; ///--------------------------------------- //@} protected: /** Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular */ int checkPivot(double saveFromU, double oldPivot) const; ////////////////// data ////////////////// protected: /**@name data */ //@{ /// work array (should be initialized to zero) double *denseVector_; /// work array double *workArea2_; /// work array double *workArea3_; /// array of labels (should be initialized to zero) int *vecLabels_; /// array of indices int *indVector_; /// auxiliary vector double *auxVector_; /// auxiliary vector int *auxInd_; /// vector to keep for LUupdate double *vecKeep_; /// indices of this vector int *indKeep_; /// number of nonzeros mutable int keepSize_; /// Starts of the rows of L int *LrowStarts_; /// Lengths of the rows of L int *LrowLengths_; /// L by rows double *Lrows_; /// indices in the rows of L int *LrowInd_; /// Size of Lrows_; int LrowSize_; /// Capacity of Lrows_ int LrowCap_; /// Starts of the columns of L int *LcolStarts_; /// Lengths of the columns of L int *LcolLengths_; /// L by columns double *Lcolumns_; /// indices in the columns of L int *LcolInd_; /// numbers of elements in L int LcolSize_; /// maximum capacity of L int LcolCap_; /// Starts of the rows of U int *UrowStarts_; /// Lengths of the rows of U int *UrowLengths_; #ifdef COIN_SIMP_CAPACITY /// Capacities of the rows of U int *UrowCapacities_; #endif /// U by rows double *Urows_; /// Indices in the rows of U int *UrowInd_; /// maximum capacity of Urows int UrowMaxCap_; /// number of used places in Urows int UrowEnd_; /// first row in U int firstRowInU_; /// last row in U int lastRowInU_; /// previous row in U int *prevRowInU_; /// next row in U int *nextRowInU_; /// Starts of the columns of U int *UcolStarts_; /// Lengths of the columns of U int *UcolLengths_; #ifdef COIN_SIMP_CAPACITY /// Capacities of the columns of U int *UcolCapacities_; #endif /// U by columns double *Ucolumns_; /// Indices in the columns of U int *UcolInd_; /// previous column in U int *prevColInU_; /// next column in U int *nextColInU_; /// first column in U int firstColInU_; /// last column in U int lastColInU_; /// maximum capacity of Ucolumns_ int UcolMaxCap_; /// last used position in Ucolumns_ int UcolEnd_; /// indicator of slack variables int *colSlack_; /// inverse values of the elements of diagonal of U double *invOfPivots_; /// permutation of columns int *colOfU_; /// position of column after permutation int *colPosition_; /// permutations of rows int *rowOfU_; /// position of row after permutation int *rowPosition_; /// permutations of rows during LUupdate int *secRowOfU_; /// position of row after permutation during LUupdate int *secRowPosition_; /// position of Eta vector int *EtaPosition_; /// Starts of eta vectors int *EtaStarts_; /// Lengths of eta vectors int *EtaLengths_; /// columns of eta vectors int *EtaInd_; /// elements of eta vectors double *Eta_; /// number of elements in Eta_ int EtaSize_; /// last eta row int lastEtaRow_; /// maximum number of eta vectors int maxEtaRows_; /// Capacity of Eta_ int EtaMaxCap_; /// minimum storage increase int minIncrease_; /// maximum size for the diagonal of U after update double updateTol_; /// do Shul heuristic bool doSuhlHeuristic_; /// maximum of U double maxU_; /// bound on the growth rate double maxGrowth_; /// maximum of A double maxA_; /// maximum number of candidates for pivot int pivotCandLimit_; /// number of slacks in basis int numberSlacks_; /// number of slacks in irst basis int firstNumberSlacks_; //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveHelperFunctions.cpp0000644000175200017520000003251113414454441021726 0ustar coincoin/* $Id: CoinPresolveHelperFunctions.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /*! \file This file contains helper functions for CoinPresolve. The declarations needed for use are included in CoinPresolveMatrix.hpp. */ #include #include #include #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" /*! \defgroup PMMDVX Packed Matrix Major Dimension Vector Expansion \brief Functions to help with major-dimension vector expansion in a packed matrix structure. This next block of functions handles the problems associated with expanding a column in a column-major representation or a row in a row-major representation. We need to be able to answer the questions: * Is there room to expand a major vector in place? * Is there sufficient free space at the end of the element and minor index storage areas (bulk storage) to hold the major vector? When the answer to the first question is `no', we need to be able to move the major vector to the free space at the end of bulk storage. When the answer to the second question is `no', we need to be able to compact the major vectors in the bulk storage area in order to regain a block of useable space at the end. presolve_make_memlists initialises a linked list that tracks the position of major vectors in the bulk storage area. It's used to locate physically adjacent vectors. presolve_expand deals with adding a coefficient to a major vector, either in-place or by moving it to free space at the end of the storage areas. There are two inline wrappers, presolve_expand_col and presolve_expand_row, defined in CoinPresolveMatrix.hpp. compact_rep compacts the major vectors in the storage areas to leave a single block of free space at the end. */ //@{ /* This first function doesn't need to be known outside of this file. */ namespace { /* compact_rep This routine compacts the major vectors in the bulk storage area, leaving a single block of free space at the end. The vectors are not reordered, just shifted down to remove gaps. */ void compact_rep(double *elems, int *indices, CoinBigIndex *starts, const int *lengths, int n, const presolvehlink *link) { #if PRESOLVE_SUMMARY printf("****COMPACTING****\n"); #endif // for now, just look for the first element of the list int i = n; while (link[i].pre != NO_LINK) i = link[i].pre; CoinBigIndex j = 0; for (; i != n; i = link[i].suc) { CoinBigIndex s = starts[i]; CoinBigIndex e = starts[i] + lengths[i]; // because of the way link is organized, j <= s starts[i] = j; for (CoinBigIndex k = s; k < e; k++) { elems[j] = elems[k]; indices[j] = indices[k]; j++; } } } } /* end unnamed namespace */ /* \brief Initialise linked list for major vector order in bulk storage Initialise the linked list that will track the order of major vectors in the element and row index bulk storage arrays. When finished, link[j].pre contains the index of the previous non-empty vector in the storage arrays and link[j].suc contains the index of the next non-empty vector. For an empty vector j, link[j].pre = link[j].suc = NO_LINK. If n is the number of major-dimension vectors, link[n] is valid; link[n].pre is the index of the last non-empty vector, and link[n].suc = NO_LINK. This routine makes the implicit assumption that the order of vectors in the storage areas matches the order in starts. (I.e., there's no check that starts[j] > starts[i] for j < i.) */ void presolve_make_memlists(/*CoinBigIndex *starts,*/ int *lengths, presolvehlink *link, int n) { int i; int pre = NO_LINK; for (i = 0; i < n; i++) { if (lengths[i]) { link[i].pre = pre; if (pre != NO_LINK) link[pre].suc = i; pre = i; } else { link[i].pre = NO_LINK; link[i].suc = NO_LINK; } } if (pre != NO_LINK) link[pre].suc = n; // (1) Arbitrarily place the last non-empty entry in link[n].pre link[n].pre = pre; link[n].suc = NO_LINK; } /* presolve_expand_major The routine looks at the space currently occupied by major-dimension vector k and makes sure that there's room to add one coefficient. This may require moving the vector to the vacant area at the end of the bulk storage array. If there's no room left at the end of the array, an attempt is made to compact the existing vectors to make space. Returns true for failure, false for success. */ bool presolve_expand_major(CoinBigIndex *majstrts, double *els, int *minndxs, int *majlens, presolvehlink *majlinks, int nmaj, int k) { const CoinBigIndex bulkCap = majstrts[nmaj]; /* Get the start and end of column k, and the index of the column which follows in the bulk storage. */ CoinBigIndex kcsx = majstrts[k]; CoinBigIndex kcex = kcsx + majlens[k]; int nextcol = majlinks[k].suc; /* Do we have room to add one coefficient in place? */ if (kcex + 1 < majstrts[nextcol]) { /* no action required */ } /* Is k the last non-empty column? In that case, attempt to compact the bulk storage. This will move k, so update the column start and end. If we still have no space, it's a fatal error. */ else if (nextcol == nmaj) { compact_rep(els, minndxs, majstrts, majlens, nmaj, majlinks); kcsx = majstrts[k]; kcex = kcsx + majlens[k]; if (kcex + 1 >= bulkCap) { return (true); } } /* The most complicated case --- we need to move k from its current location to empty space at the end of the bulk storage. And we may need to make that! Compaction is identical to the above case. */ else { int lastcol = majlinks[nmaj].pre; CoinBigIndex newkcsx = majstrts[lastcol] + majlens[lastcol]; CoinBigIndex newkcex = newkcsx + majlens[k]; if (newkcex + 1 >= bulkCap) { compact_rep(els, minndxs, majstrts, majlens, nmaj, majlinks); kcsx = majstrts[k]; kcex = kcsx + majlens[k]; newkcsx = majstrts[lastcol] + majlens[lastcol]; newkcex = newkcsx + majlens[k]; } /* It is possible (probably on very small problems) that there is not room for two copies of modified column - so allow temporary overflow */ /* Moving the vector requires three actions. First we move the data, then update the packed matrix vector start, then relink the storage order list, */ memcpy(reinterpret_cast< void * >(&minndxs[newkcsx]), reinterpret_cast< void * >(&minndxs[kcsx]), majlens[k] * sizeof(int)); memcpy(reinterpret_cast< void * >(&els[newkcsx]), reinterpret_cast< void * >(&els[kcsx]), majlens[k] * sizeof(double)); majstrts[k] = newkcsx; PRESOLVE_REMOVE_LINK(majlinks, k); PRESOLVE_INSERT_LINK(majlinks, k, lastcol); if (newkcex + 1 >= bulkCap) { // compact - faking extra one //majlens[k]++; //majstrts[nmaj]=newkcex; compact_rep(els, minndxs, majstrts, majlens, nmaj, majlinks); //majlens[k]--; //majstrts[nmaj]=bulkCap; kcsx = majstrts[k]; kcex = kcsx + majlens[k]; if (kcex > bulkCap) { // still no room return (true); } } } /* Success --- the vector has room for one more coefficient. */ return (false); } //@} /* Helper function to duplicate a major-dimension vector. */ /* A major-dimension vector is composed of paired element and minor index arrays. We want to duplicate length entries from both arrays, starting at offset. If tgt > 0, we'll run a more complicated copy loop which will elide the entry with minor index == tgt. In this case, we want to reduce the size of the allocated array by 1. Pigs will fly before sizeof(int) > sizeof(double), but if it ever happens this code will fail. */ double *presolve_dupmajor(const double *elems, const int *indices, int length, CoinBigIndex offset, int tgt) { int n; if (tgt >= 0) length--; if (2 * sizeof(int) <= sizeof(double)) n = (3 * length + 1) >> 1; else n = 2 * length; double *dArray = new double[n]; int *iArray = reinterpret_cast< int * >(dArray + length); if (tgt < 0) { memcpy(dArray, elems + offset, length * sizeof(double)); memcpy(iArray, indices + offset, length * sizeof(int)); } else { int korig; int kcopy = 0; indices += offset; elems += offset; for (korig = 0; korig <= length; korig++) { int i = indices[korig]; if (i != tgt) { dArray[kcopy] = elems[korig]; iArray[kcopy++] = indices[korig]; } } } return (dArray); } /* Routines to find the position of the entry for a given minor index in a major vector. Inline wrappers with column-major and row-major parameter names are defined in CoinPresolveMatrix.hpp. The threaded matrix used in postsolve exists only as a column-major form, so only one wrapper is defined. */ /* presolve_find_minor Find the position (k) of the entry for a given minor index (tgt) within the range of entries for a major vector (ks, ke). Print a tag and abort (DIE) if there's no entry for tgt. */ #if 0 CoinBigIndex presolve_find_minor (int tgt, CoinBigIndex ks, CoinBigIndex ke, const int *minndxs) { CoinBigIndex k ; for (k = ks ; k < ke ; k++) { if (minndxs[k] == tgt) return (k) ; } DIE("FIND_MINOR") ; abort () ; return -1; } #endif /* As presolve_find_minor, but return a position one past the end of the major vector when the entry is not already present. */ CoinBigIndex presolve_find_minor1(int tgt, CoinBigIndex ks, CoinBigIndex ke, const int *minndxs) { CoinBigIndex k; for (k = ks; k < ke; k++) { if (minndxs[k] == tgt) return (k); } return (k); } /* In a threaded matrix, the major vector does not occupy a contiguous block in the bulk storage area. For example, in a threaded column-major matrix, if a is in pos'n kp of hrow, the next coefficient a will be in pos'n kq = link[kp]. Abort if we don't find it. */ CoinBigIndex presolve_find_minor2(int tgt, CoinBigIndex ks, int majlen, const int *minndxs, const CoinBigIndex *majlinks) { for (int i = 0; i < majlen; ++i) { if (minndxs[ks] == tgt) return (ks); ks = majlinks[ks]; } DIE("FIND_MINOR2"); abort(); return -1; } /* As presolve_find_minor2, but return -1 if the entry is missing */ CoinBigIndex presolve_find_minor3(int tgt, CoinBigIndex ks, int majlen, const int *minndxs, const CoinBigIndex *majlinks) { for (int i = 0; i < majlen; ++i) { if (minndxs[ks] == tgt) return (ks); ks = majlinks[ks]; } return (-1); } /* Delete the entry for a minor index from a major vector. The last entry in the major vector is moved into the hole left by the deleted entry. This leaves some space between the end of this major vector and the start of the next in the bulk storage areas (this is termed loosely packed). Inline wrappers with column-major and row-major parameter names are defined in CoinPresolveMatrix.hpp. The threaded matrix used in postsolve exists only as a column-major form, so only one wrapper is defined. */ #if 0 void presolve_delete_from_major (int majndx, int minndx, const CoinBigIndex *majstrts, int *majlens, int *minndxs, double *els) { CoinBigIndex ks = majstrts[majndx] ; CoinBigIndex ke = ks + majlens[majndx] ; CoinBigIndex kmi = presolve_find_minor(minndx,ks,ke,minndxs) ; minndxs[kmi] = minndxs[ke-1] ; els[kmi] = els[ke-1] ; majlens[majndx]-- ; return ; } // Delete all marked and zero marked void presolve_delete_many_from_major (int majndx, char * marked, const CoinBigIndex *majstrts, int *majlens, int *minndxs, double *els) { CoinBigIndex ks = majstrts[majndx] ; CoinBigIndex ke = ks + majlens[majndx] ; CoinBigIndex put=ks; for (CoinBigIndex k=ks;k= 0); return; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinTypes.hpp0000644000175200017520000000324013414454441016204 0ustar coincoin/* $Id: CoinTypes.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2004, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef _CoinTypes_hpp #define _CoinTypes_hpp #include "CoinUtilsConfig.h" /* On some systems, we require stdint.h to have the 64bit integer type defined. */ #ifdef COINUTILS_HAS_STDINT_H #include #endif #ifdef COINUTILS_HAS_CSTDINT #include #endif #define CoinInt64 COIN_INT64_T #define CoinUInt64 COIN_UINT64_T #define CoinIntPtr COIN_INTPTR_T //============================================================================= #ifndef COIN_BIG_INDEX #define COIN_BIG_INDEX 0 #endif #if COIN_BIG_INDEX == 0 typedef int CoinBigIndex; #elif COIN_BIG_INDEX == 1 typedef long CoinBigIndex; #else typedef long long CoinBigIndex; #endif //============================================================================= #ifndef COIN_BIG_DOUBLE #define COIN_BIG_DOUBLE 0 #endif // See if we want the ability to have long double work arrays #if COIN_BIG_DOUBLE == 2 #undef COIN_BIG_DOUBLE #define COIN_BIG_DOUBLE 0 #define COIN_LONG_WORK 1 typedef long double CoinWorkDouble; #elif COIN_BIG_DOUBLE == 3 #undef COIN_BIG_DOUBLE #define COIN_BIG_DOUBLE 1 #define COIN_LONG_WORK 1 typedef long double CoinWorkDouble; #else #define COIN_LONG_WORK 0 typedef double CoinWorkDouble; #endif #if COIN_BIG_DOUBLE == 0 typedef double CoinFactorizationDouble; #elif COIN_BIG_DOUBLE == 1 typedef long double CoinFactorizationDouble; #else typedef double CoinFactorizationDouble; #endif #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinOslC.h0000644000175200017520000006372413414454441015415 0ustar coincoin/* $Id: CoinOslC.h 2083 2019-01-06 19:38:09Z unxusr $ */ #ifndef COIN_OSL_C_INCLUDE /* Copyright (C) 1987, 2009, International Business Machines Corporation and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ #define COIN_OSL_C_INCLUDE #ifndef CLP_OSL #define CLP_OSL 0 #endif #define C_EKK_GO_SPARSE 200 #ifdef HAVE_ENDIAN_H #include #if __BYTE_ORDER == __LITTLE_ENDIAN #define INTEL #endif #endif #include #include #include #include #define SPARSE_UPDATE #define NO_SHIFT #include "CoinHelperFunctions.hpp" #include #ifdef __cplusplus extern "C" { #endif int c_ekkbtrn(register const EKKfactinfo *fact, double *dwork1, int *mpt, int first_nonzero); int c_ekkbtrn_ipivrw(register const EKKfactinfo *fact, double *dwork1, int *mpt, int ipivrw, int *spare); int c_ekketsj(register /*const*/ EKKfactinfo *fact, double *dwork1, int *mpt2, double dalpha, int orig_nincol, int npivot, int *nuspikp, const int ipivrw, int *spare); int c_ekkftrn(register const EKKfactinfo *fact, double *dwork1, double *dpermu, int *mpt, int numberNonZero); int c_ekkftrn_ft(register EKKfactinfo *fact, double *dwork1, int *mpt, int *nincolp); void c_ekkftrn2(register EKKfactinfo *fact, double *dwork1, double *dpermu1, int *mpt1, int *nincolp, double *dwork1_ft, int *mpt_ft, int *nincolp_ft); int c_ekklfct(register EKKfactinfo *fact); int c_ekkslcf(register const EKKfactinfo *fact); inline void c_ekkscpy(int n, const int *marr1, int *marr2) { CoinMemcpyN(marr1, n, marr2); } inline void c_ekkdcpy(int n, const double *marr1, double *marr2) { CoinMemcpyN(marr1, n, marr2); } int c_ekk_IsSet(const int *array, int bit); void c_ekk_Set(int *array, int bit); void c_ekk_Unset(int *array, int bit); void c_ekkzero(int length, int n, void *array); inline void c_ekkdzero(int n, double *marray) { CoinZeroN(marray, n); } inline void c_ekkizero(int n, int *marray) { CoinZeroN(marray, n); } inline void c_ekkczero(int n, char *marray) { CoinZeroN(marray, n); } #ifdef __cplusplus } #endif #define c_ekkscpy_0_1(s, ival, array) CoinFillN(array, s, ival) #define c_ekks1cpy(n, marr1, marr2) CoinMemcpyN(marr1, n, marr2) void clp_setup_pointers(EKKfactinfo *fact); void clp_memory(int type); double *clp_double(int number_entries); int *clp_int(int number_entries); void *clp_malloc(int number_entries); void clp_free(void *oldArray); #define SLACK_VALUE -1.0 #define C_EKK_REMOVE_LINK(hpiv, hin, link, ipivot) \ { \ int ipre = link[ipivot].pre; \ int isuc = link[ipivot].suc; \ if (ipre > 0) { \ link[ipre].suc = isuc; \ } \ if (ipre <= 0) { \ hpiv[hin[ipivot]] = isuc; \ } \ if (isuc > 0) { \ link[isuc].pre = ipre; \ } \ } #define C_EKK_ADD_LINK(hpiv, nzi, link, npr) \ { \ int ifiri = hpiv[nzi]; \ hpiv[nzi] = npr; \ link[npr].suc = ifiri; \ link[npr].pre = 0; \ if (ifiri != 0) { \ link[ifiri].pre = npr; \ } \ } #include #ifdef NO_SHIFT #define SHIFT_INDEX(limit) (limit) #define UNSHIFT_INDEX(limit) (limit) #define SHIFT_REF(arr, ind) (arr)[ind] #else #define SHIFT_INDEX(limit) ((limit) << 3) #define UNSHIFT_INDEX(limit) ((unsigned int)(limit) >> 3) #define SHIFT_REF(arr, ind) (*(double *)((char *)(arr) + (ind))) #endif #ifdef INTEL #define NOT_ZERO(x) (((*((reinterpret_cast< unsigned char * >(&x)) + 7)) & 0x7F) != 0) #else #define NOT_ZERO(x) ((x) != 0.0) #endif #define SWAP(type, _x, _y) \ { \ type _tmp = (_x); \ (_x) = (_y); \ (_y) = _tmp; \ } #define UNROLL_LOOP_BODY1(code) \ { \ { \ code \ } \ } #define UNROLL_LOOP_BODY2(code) \ { \ { code } { \ code \ } \ } #define UNROLL_LOOP_BODY4(code) \ { \ { code } { code } { code } { \ code \ } \ } #endif #ifdef COIN_OSL_CMFC /* Return codes in IRTCOD/IRTCOD are */ /* 4: numerical problems */ /* 5: not enough space in row file */ /* 6: not enough space in column file */ /* 23: system error at label 320 */ { #if 1 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif int nnentl = fact->nnentl; int nnentu = fact->nnentu; int kmxeta = fact->kmxeta; int xnewro = *xnewrop; int ncompactions = *ncompactionsp; MACTION_T *maction = reinterpret_cast< MACTION_T * >(maction_void); int i, j, k; double d1; int j1, j2; int jj, kk, kr, nz, jj1, jj2, kce, kcs, kqq, npr; int fill, naft; int enpr; int nres, npre; int knpr, irow, iadd32, ibase; double pivot; int count, nznpr; int nlast, epivr1; int kipis; double dpivx; int kipie, kcpiv, knprs, knpre; bool cancel; double multip, elemnt; int ipivot, jpivot, epivro, epivco, lstart, nfirst; int nzpivj, kfill, kstart; int nmove, ileft; #ifndef C_EKKCMFY int iput, nspare; int noRoomForDense = 0; int if_sparse_update = fact->if_sparse_update; int ifdens = 0; #endif int irtcod = 0; const int nrow = fact->nrow; /* Parameter adjustments */ --maction; /* Function Body */ lstart = nnetas - nnentl + 1; for (i = lstart; i <= nnetas; ++i) { hrowi[i] = SHIFT_INDEX(hcoli[i]); } for (i = 1; i <= nrow; ++i) { maction[i] = 0; mwork[i].pre = i - 1; mwork[i].suc = i + 1; } iadd32 = 0; nlast = nrow; nfirst = 1; mwork[1].pre = nrow; mwork[nrow].suc = 1; for (count = 1; count <= nrow; ++count) { /* Pick column singletons */ if (!(hpivco[1] <= 0)) { int small_pivot = c_ekkcsin(fact, rlink, clink, nsingp); if (small_pivot) { irtcod = 7; /* pivot too small */ if (fact->invok >= 0) { goto L1050; } } if (fact->npivots >= nrow) { goto L1050; } } /* Pick row singletons */ if (!(hpivro[1] <= 0)) { irtcod = c_ekkrsin(fact, rlink, clink, mwork, nfirst, nsingp, &xnewco, &xnewro, &nnentu, &kmxeta, &ncompactions, &nnentl); if (irtcod != 0) { if (irtcod < 0 || fact->invok >= 0) { /* -5 */ goto L1050; } /* ASSERT: irtcod == 7 - pivot too small */ /* why don't we return with an error? */ } if (fact->npivots >= nrow) { goto L1050; } lstart = nnetas - nnentl + 1; } /* Find a pivot element */ irtcod = c_ekkfpvt(fact, rlink, clink, nsingp, xrejctp, &ipivot, &jpivot); if (irtcod != 0) { /* irtcod == 10 */ goto L1050; } /* Update list structures and prepare for numerical phase */ c_ekkprpv(fact, rlink, clink, *xrejctp, ipivot, jpivot); epivco = hincol[jpivot]; ++fact->xnetal; mcstrt[fact->xnetal] = lstart - 1; hpivco[fact->xnetal] = ipivot; epivro = hinrow[ipivot]; epivr1 = epivro - 1; kipis = mrstrt[ipivot]; pivot = dluval[kipis]; dpivx = 1. / pivot; kipie = kipis + epivr1; ++kipis; #ifndef C_EKKCMFY { double size = nrow - fact->npivots; if (size > GO_DENSE && (nnentu - fact->nuspike) * GO_DENSE_RATIO > size * size) { /* say going to dense coding */ if (*nsingp == 0) { ifdens = 1; } } } #endif /* copy the pivot row entries into dvalpv */ /* the maction array tells us the index into dvalpv for a given row */ /* the alternative would be using a large array of doubles */ for (k = kipis; k <= kipie; ++k) { irow = hcoli[k]; dvalpv[k - kipis + 1] = dluval[k]; maction[irow] = static_cast< MACTION_T >(k - kipis + 1); } /* Loop over nonzeros in pivot column */ kcpiv = mcstrt[jpivot] - 1; for (nzpivj = 1; nzpivj <= epivco; ++nzpivj) { ++kcpiv; npr = hrowi[kcpiv]; hrowi[kcpiv] = 0; /* zero out for possible compaction later on */ --hincol[jpivot]; ++mcstrt[jpivot]; /* loop invariant: kcpiv == mcstrt[jpivot] - 1 */ --hinrow[npr]; enpr = hinrow[npr]; knprs = mrstrt[npr]; knpre = knprs + enpr; /* Search for element to be eliminated */ knpr = knprs; while (1) { UNROLL_LOOP_BODY4({ if (jpivot == hcoli[knpr]) { break; } knpr++; }); } multip = -dluval[knpr] * dpivx; /* swap last entry with pivot */ dluval[knpr] = dluval[knpre]; hcoli[knpr] = hcoli[knpre]; --knpre; #if 1 /* MONSTER_UNROLLED_CODE - see below */ kfill = epivr1 - (knpre - knprs + 1); nres = ((knpre - knprs + 1) & 1) + knprs; cancel = false; d1 = 1e33; j1 = hcoli[nres]; if (nres != knprs) { j = hcoli[knprs]; if (maction[j] == 0) { ++kfill; } else { jj = maction[j]; maction[j] = static_cast< MACTION_T >(-maction[j]); dluval[knprs] += multip * dvalpv[jj]; d1 = fabs(dluval[knprs]); } } j2 = hcoli[nres + 1]; jj1 = maction[j1]; for (kr = nres; kr < knpre; kr += 2) { jj2 = maction[j2]; if ((jj1 == 0)) { ++kfill; } else { maction[j1] = static_cast< MACTION_T >(-maction[j1]); dluval[kr] += multip * dvalpv[jj1]; cancel = cancel || !(fact->zeroTolerance < d1); d1 = fabs(dluval[kr]); } j1 = hcoli[kr + 2]; if ((jj2 == 0)) { ++kfill; } else { maction[j2] = static_cast< MACTION_T >(-maction[j2]); dluval[kr + 1] += multip * dvalpv[jj2]; cancel = cancel || !(fact->zeroTolerance < d1); d1 = fabs(dluval[kr + 1]); } jj1 = maction[j1]; j2 = hcoli[kr + 3]; } cancel = cancel || !(fact->zeroTolerance < d1); #else /* * This is apparently what the above code does. * In addition to being unrolled, the assignments to j[12] and jj[12] * are shifted so that the result of dereferencing maction doesn't * have to be used immediately afterwards for the branch test. * This would would cause a pipeline delay. (The apparent dereference * of hcoli will be removed by the compiler using strength reduction). * * loop through the entries in the row being processed, * flipping the sign of the maction entries as we go along. * Afterwards, we look for positive entries to see what pivot * row entries will cause fill-in. We count the number of fill-ins, too. * "cancel" says if the result of combining the pivot row with this one * causes an entry to get too small; if so, we discard those entries. */ kfill = epivr1 - (knpre - knprs + 1); cancel = false; for (kr = knprs; kr <= knpre; kr++) { j1 = hcoli[kr]; jj1 = maction[j1]; if ((jj1 == 0)) { /* no entry - this pivot column entry will have to be added */ ++kfill; } else { /* there is an entry for this column in the pivot row */ maction[j1] = -maction[j1]; dluval[kr] += multip * dvalpv[jj1]; d1 = fabs(dluval[kr]); cancel = cancel || !(fact->zeroTolerance < d1); } } #endif kstart = knpre; fill = kfill; if (cancel) { /* KSTART is used as a stack pointer for nonzeros in factored row */ kstart = knprs - 1; for (kr = knprs; kr <= knpre; ++kr) { j = hcoli[kr]; if (fabs(dluval[kr]) > fact->zeroTolerance) { ++kstart; dluval[kstart] = dluval[kr]; hcoli[kstart] = j; } else { /* Remove element from column file */ --nnentu; --hincol[j]; --enpr; kcs = mcstrt[j]; kce = kcs + hincol[j]; for (kk = kcs; kk <= kce; ++kk) { if (hrowi[kk] == npr) { hrowi[kk] = hrowi[kce]; hrowi[kce] = 0; break; } } /* ASSERT !(kk>kce) */ } } knpre = kstart; } /* Fill contains an upper bound on the amount of fill-in */ if (fill == 0) { for (k = kipis; k <= kipie; ++k) { maction[hcoli[k]] = static_cast< MACTION_T >(-maction[hcoli[k]]); } } else { naft = mwork[npr].suc; kqq = mrstrt[naft] - knpre - 1; if (fill > kqq) { /* Fill-in exceeds space left. Check if there is enough */ /* space in row file for the new row. */ nznpr = enpr + fill; if (!(xnewro + nznpr + 1 < lstart)) { if (!(nnentu + nznpr + 1 < lstart)) { irtcod = -5; goto L1050; } /* idea 1 is to compress every time xnewro increases by x thousand */ /* idea 2 is to copy nucleus rows with a reasonable gap */ /* then copy each row down when used */ /* compressions would just be 1 remainder which eventually will */ /* fit in cache */ { int iput = c_ekkrwcs(fact, dluval, hcoli, mrstrt, hinrow, mwork, nfirst); kmxeta += xnewro - iput; xnewro = iput - 1; ++ncompactions; } kipis = mrstrt[ipivot] + 1; kipie = kipis + epivr1 - 1; knprs = mrstrt[npr]; } /* I think this assignment should be inside the previous if-stmt */ /* otherwise, it does nothing */ /*assert(knpre == knprs + enpr - 1);*/ knpre = knprs + enpr - 1; /* * copy this row to the end of the row file and adjust its links. * The links keep track of the order of rows in memory. * Rows are only moved from the middle all the way to the end. */ if (npr != nlast) { npre = mwork[npr].pre; if (npr == nfirst) { nfirst = naft; } /* take out of chain */ mwork[naft].pre = npre; mwork[npre].suc = naft; /* and put in at end */ mwork[nfirst].pre = npr; mwork[nlast].suc = npr; mwork[npr].pre = nlast; mwork[npr].suc = nfirst; nlast = npr; kstart = xnewro; mrstrt[npr] = kstart + 1; nmove = knpre - knprs + 1; ibase = kstart + 1 - knprs; for (kr = knprs; kr <= knpre; ++kr) { dluval[ibase + kr] = dluval[kr]; hcoli[ibase + kr] = hcoli[kr]; } kstart += nmove; } else { kstart = knpre; } /* extra space ? */ /* * The mystery of iadd32. * This code assigns to xnewro, possibly using iadd32. * However, in that case xnewro is assigned to just after * the for-loop below, and there is no intervening reference. * Therefore, I believe that this code can be entirely eliminated; * it is the leftover of an interrupted or dropped experiment. * Presumably, this was trying to implement the ideas about * padding expressed above. */ if (iadd32 != 0) { xnewro += iadd32; } else { if (kstart + (nrow << 1) + 100 < lstart) { ileft = ((nrow - fact->npivots + 32) & -32); if (kstart + ileft * ileft + 32 < lstart) { iadd32 = ileft; xnewro = CoinMax(kstart, xnewro); xnewro = (xnewro & -32) + ileft; } else { xnewro = ((kstart + 31) & -32); } } else { xnewro = kstart; } } hinrow[npr] = enpr; } else if (!(nnentu + kqq + 2 < lstart)) { irtcod = -5; goto L1050; } /* Scan pivot row again to generate fill in. */ for (kr = kipis; kr <= kipie; ++kr) { j = hcoli[kr]; jj = maction[j]; if (jj > 0) { elemnt = multip * dvalpv[jj]; if (fabs(elemnt) > fact->zeroTolerance) { ++kstart; dluval[kstart] = elemnt; //printf("pivot %d at %d col %d el %g\n", // npr,kstart,j,elemnt); hcoli[kstart] = j; ++nnentu; nz = hincol[j]; kcs = mcstrt[j]; kce = kcs + nz - 1; if (kce == xnewco) { if (xnewco + 1 >= lstart) { if (xnewco + nz + 1 >= lstart) { /* Compress column file */ if (nnentu + nz + 1 < lstart) { xnewco = c_ekkclco(fact, hrowi, mcstrt, hincol, xnewco); ++ncompactions; kcpiv = mcstrt[jpivot] - 1; kcs = mcstrt[j]; /* HINCOL MAY HAVE CHANGED? (JJHF) ??? */ nz = hincol[j]; kce = kcs + nz - 1; } else { irtcod = -5; goto L1050; } } /* Copy column */ mcstrt[j] = xnewco + 1; ibase = mcstrt[j] - kcs; for (kk = kcs; kk <= kce; ++kk) { hrowi[ibase + kk] = hrowi[kk]; hrowi[kk] = 0; } kce = xnewco + kce - kcs + 1; xnewco = kce + 1; } else { ++xnewco; } } else if (hrowi[kce + 1] != 0) { /* here we use the fact that hrowi entries not "in use" are zeroed */ if (xnewco + nz + 1 >= lstart) { /* Compress column file */ if (nnentu + nz + 1 < lstart) { xnewco = c_ekkclco(fact, hrowi, mcstrt, hincol, xnewco); ++ncompactions; kcpiv = mcstrt[jpivot] - 1; kcs = mcstrt[j]; /* HINCOL MAY HAVE CHANGED? (JJHF) ??? */ nz = hincol[j]; kce = kcs + nz - 1; } else { irtcod = -5; goto L1050; } } /* move the column to the end of the column file */ mcstrt[j] = xnewco + 1; ibase = mcstrt[j] - kcs; for (kk = kcs; kk <= kce; ++kk) { hrowi[ibase + kk] = hrowi[kk]; hrowi[kk] = 0; } kce = xnewco + kce - kcs + 1; xnewco = kce + 1; } /* store element */ hrowi[kce + 1] = npr; hincol[j] = nz + 1; } } else { maction[j] = static_cast< MACTION_T >(-maction[j]); } } if (fill > kqq) { xnewro = kstart; } } hinrow[npr] = kstart - mrstrt[npr] + 1; /* Check if row or column file needs compression */ if (!(xnewco + 1 < lstart)) { xnewco = c_ekkclco(fact, hrowi, mcstrt, hincol, xnewco); ++ncompactions; kcpiv = mcstrt[jpivot] - 1; } if (!(xnewro + 1 < lstart)) { int iput = c_ekkrwcs(fact, dluval, hcoli, mrstrt, hinrow, mwork, nfirst); kmxeta += xnewro - iput; xnewro = iput - 1; ++ncompactions; kipis = mrstrt[ipivot] + 1; kipie = kipis + epivr1 - 1; } /* Store elementary row transformation */ ++nnentl; --nnentu; --lstart; dluval[lstart] = multip; hrowi[lstart] = SHIFT_INDEX(npr); #define INLINE_AFPV 3 /* We could do this while computing values but it makes it much more complex. At least we should get reasonable cache behavior by doing it each row */ #if INLINE_AFPV { int j; int nel, krs; int koff; int *index; double *els; nel = hinrow[npr]; krs = mrstrt[npr]; index = &hcoli[krs]; els = &dluval[krs]; #if INLINE_AFPV < 3 #if INLINE_AFPV == 1 double maxaij = 0.0; koff = 0; j = 0; while (j < nel) { double d = fabs(els[j]); if (maxaij < d) { maxaij = d; koff = j; } j++; } #else assert(nel); koff = 0; double maxaij = fabs(els[0]); for (j = 1; j < nel; j++) { double d = fabs(els[j]); if (maxaij < d) { maxaij = d; koff = j; } } #endif #else double maxaij = 0.0; koff = 0; j = 0; if ((nel & 1) != 0) { maxaij = fabs(els[0]); j = 1; } while (j < nel) { UNROLL_LOOP_BODY2({ double d = fabs(els[j]); if (maxaij < d) { maxaij = d; koff = j; } j++; }); } #endif SWAP(int, index[koff], index[0]); SWAP(double, els[koff], els[0]); } #endif { int nzi = hinrow[npr]; if (nzi > 0) { C_EKK_ADD_LINK(hpivro, nzi, rlink, npr); } } } /* after pivot move biggest to first in each row */ #if INLINE_AFPV == 0 int nn = mcstrt[fact->xnetal] - lstart + 1; c_ekkafpv(hrowi + lstart, hcoli, dluval, mrstrt, hinrow, nn); #endif /* Restore work array */ for (k = kipis; k <= kipie; ++k) { maction[hcoli[k]] = 0; } if (*xrejctp > 0) { for (k = kipis; k <= kipie; ++k) { int j = hcoli[k]; int nzj = hincol[j]; if (!(nzj <= 0) && !((clink[j].pre > nrow && nzj != 1))) { C_EKK_ADD_LINK(hpivco, nzj, clink, j); } } } else { for (k = kipis; k <= kipie; ++k) { int j = hcoli[k]; int nzj = hincol[j]; if (!(nzj <= 0)) { C_EKK_ADD_LINK(hpivco, nzj, clink, j); } } } fact->nuspike += hinrow[ipivot]; /* Go to dense coding if appropriate */ #ifndef C_EKKCMFY if (ifdens != 0) { int ndense = nrow - fact->npivots; if (!(xnewro + ndense * ndense >= lstart)) { /* set up sort order in MACTION */ c_ekkizero(nrow, reinterpret_cast< int * >(maction + 1)); iput = 0; for (i = 1; i <= nrow; ++i) { if (clink[i].pre >= 0) { ++iput; maction[i] = static_cast< short int >(iput); } } /* and get number spare needed */ nspare = 0; for (i = 1; i <= nrow; ++i) { if (rlink[i].pre >= 0) { nspare = nspare + ndense - hinrow[i]; } } if (iput != nrow - fact->npivots) { /* must be singular */ c_ekkizero(nrow, reinterpret_cast< int * >(maction + 1)); } else { /* pack down then back up */ int iput = c_ekkrwcs(fact, dluval, hcoli, mrstrt, hinrow, mwork, nfirst); kmxeta += xnewro - iput; xnewro = iput - 1; ++ncompactions; --ncompactions; if (xnewro + nspare + ndense * ndense >= lstart) { c_ekkizero(nrow, reinterpret_cast< int * >(maction + 1)); } else { xnewro += nspare; c_ekkrwct(fact, dluval, hcoli, mrstrt, hinrow, mwork, rlink, maction, dvalpv, nlast, xnewro); kmxeta += xnewro; if (nnentu + nnentl > nrow * 5 && (ndense * ndense) > (nnentu + nnentl) >> 2 && !if_sparse_update) { fact->ndenuc = ndense; } irtcod = c_ekkcmfd(fact, (reinterpret_cast< int * >(dvalpv) + 1), rlink, clink, (reinterpret_cast< int * >(maction + 1)) + 1, nnetas, &nnentl, &nnentu, nsingp); /* irtcod == 0 || irtcod == 10 */ /* 10 == found 0.0 pivot */ goto L1050; } } } else { /* say not enough room */ /*printf("no room %d\n",ndense);*/ if (1) { /* return and increase size of etas if possible */ if (!noRoomForDense) { int etasize = CoinMax(4 * fact->nnentu + (nnetas - fact->nnentl) + 1000, fact->eta_size); noRoomForDense = ndense; fact->eta_size = CoinMin(static_cast< int >(1.2 * fact->eta_size), etasize); if (fact->maxNNetas > 0 && fact->eta_size > fact->maxNNetas) { fact->eta_size = fact->maxNNetas; } } } } } #endif /* C_EKKCMFY */ } L1050 : { int iput = c_ekkrwcs(fact, dluval, hcoli, mrstrt, hinrow, mwork, nfirst); kmxeta += xnewro - iput; xnewro = iput - 1; ++ncompactions; } nnentu = xnewro; /* save order of row copy for c_ekkshfv */ mwork[nrow + 1].pre = nfirst; mwork[nrow + 1].suc = nlast; fact->nnentl = nnentl; fact->nnentu = nnentu; fact->kmxeta = kmxeta; *xnewrop = xnewro; *ncompactionsp = ncompactions; return (irtcod); } /* c_ekkcmfc */ #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinMessage.hpp0000644000175200017520000000442313414454441016470 0ustar coincoin/* $Id: CoinMessage.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinMessage_H #define CoinMessage_H #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif /*! \file This file contains the enum for the standard set of Coin messages and a class definition whose sole purpose is to supply a constructor. The text ot the messages is defined in CoinMessage.cpp, CoinMessageHandler.hpp contains the generic facilities for message handling. */ #include "CoinMessageHandler.hpp" /*! \brief Symbolic names for the standard set of COIN messages */ enum COIN_Message { COIN_MPS_LINE = 0, COIN_MPS_STATS, COIN_MPS_ILLEGAL, COIN_MPS_BADIMAGE, COIN_MPS_DUPOBJ, COIN_MPS_DUPROW, COIN_MPS_NOMATCHROW, COIN_MPS_NOMATCHCOL, COIN_MPS_FILE, COIN_MPS_BADFILE1, COIN_MPS_BADFILE2, COIN_MPS_EOF, COIN_MPS_RETURNING, COIN_MPS_CHANGED, COIN_SOLVER_MPS, COIN_PRESOLVE_COLINFEAS, COIN_PRESOLVE_ROWINFEAS, COIN_PRESOLVE_COLUMNBOUNDA, COIN_PRESOLVE_COLUMNBOUNDB, COIN_PRESOLVE_NONOPTIMAL, COIN_PRESOLVE_STATS, COIN_PRESOLVE_INFEAS, COIN_PRESOLVE_UNBOUND, COIN_PRESOLVE_INFEASUNBOUND, COIN_PRESOLVE_INTEGERMODS, COIN_PRESOLVE_POSTSOLVE, COIN_PRESOLVE_NEEDS_CLEANING, COIN_PRESOLVE_PASS, #if PRESOLVE_DEBUG COIN_PRESOLDBG_FIRSTCHECK, COIN_PRESOLDBG_RCOSTACC, COIN_PRESOLDBG_RCOSTSTAT, COIN_PRESOLDBG_STATSB, COIN_PRESOLDBG_DUALSTAT, #endif COIN_GENERAL_INFO, COIN_GENERAL_INFO2, COIN_GENERAL_WARNING, COIN_DUMMY_END }; /*! \class CoinMessage \brief The standard set of Coin messages This class provides convenient access to the standard set of Coin messages. In a nutshell, it's a CoinMessages object with a constructor that preloads the standard Coin messages. */ class CoinMessage : public CoinMessages { public: /**@name Constructors etc */ //@{ /*! \brief Constructor Build a CoinMessages object and load it with the standard set of Coin messages. */ CoinMessage(Language language = us_en); //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveDoubleton.cpp0000644000175200017520000013520313414454441020553 0ustar coincoin/* $Id: CoinPresolveDoubleton.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinFinite.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #include "CoinPresolveEmpty.hpp" // for DROP_COL/DROP_ROW #include "CoinPresolveZeros.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveDoubleton.hpp" #include "CoinPresolvePsdebug.hpp" #include "CoinMessage.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif namespace { /* begin unnamed local namespace */ #if PRESOLVE_DEBUG > 0 #define DBGPARAM(zz_param_zz) zz_param_zz #else #define DBGPARAM(zz_param_zz) #endif /* This routine does the grunt work needed to substitute x for y in all rows i where coeff[i,y] != 0. Given ax + by = c, we have y = (c - a*x)/b = c/b + (-a/b)*x Suppose we're fixing row i. We need to adjust the row bounds by -coeff[i,y]*(c/b) and coeff[i,x] by coeff[i,y]*(-a/b). The value c/b is passed as the bounds_factor, and -a/b as the coeff_factor. row0 is the doubleton row. It is assumed that coeff[row0,y] has been removed from the column major representation before this routine is called. (Otherwise, we'd have to check for it to avoid a useless row update.) Both the row and col representations are updated. There are two cases: * coeff[i,x] != 0: in the column rep, modify coeff[i,x] ; in the row rep, modify coeff[i,x] and drop coeff[i,y]. * coeff[i,x] == 0 (i.e., non-existent): in the column rep, add coeff[i,x]; mcstrt is modified if the column must be moved ; in the row rep, convert coeff[i,y] to coeff[i,x]. The row and column reps are inconsistent during the routine and at completion. In the row rep, column x and y are updated except for the doubleton row, and in the column rep only column x is updated except for coeff[row0,x]. On return, column y and row row0 will be deleted and consistency will be restored. */ bool elim_doubleton(const char *DBGPARAM(msg), CoinBigIndex *mcstrt, double *rlo, double *rup, double *colels, int *hrow, int *hcol, int *hinrow, int *hincol, presolvehlink *clink, int ncols, CoinBigIndex *mrstrt, double *rowels, double coeff_factor, double bounds_factor, int DBGPARAM(row0), int icolx, int icoly) { CoinBigIndex kcsx = mcstrt[icolx]; CoinBigIndex kcex = kcsx + hincol[icolx]; #if PRESOLVE_DEBUG > 1 printf("%s %d x=%d y=%d cf=%g bf=%g nx=%d yrows=(", msg, row0, icolx, icoly, coeff_factor, bounds_factor, hincol[icolx]); #endif /* Open a loop to scan column y. For each nonzero coefficient (row,y), update column x and the row bounds for the row. The initial assert checks that we're properly updating column x. */ CoinBigIndex base = mcstrt[icoly]; int numberInY = hincol[icoly]; for (int kwhere = 0; kwhere < numberInY; kwhere++) { PRESOLVEASSERT(kcex == kcsx + hincol[icolx]); const CoinBigIndex kcoly = base + kwhere; const int row = hrow[kcoly]; const double coeffy = colels[kcoly]; double delta = coeffy * coeff_factor; /* Look for coeff[row,x], then update accordingly. */ CoinBigIndex kcolx = presolve_find_row1(row, kcsx, kcex, hrow); #if PRESOLVE_DEBUG > 1 printf("%d%s ", row, (kcolx < kcex) ? "+" : ""); #endif /* Case 1: coeff[i,x] != 0: update it in column and row reps; drop coeff[i,y] from row rep. */ if (kcolx < kcex) { colels[kcolx] += delta; const CoinBigIndex kmi = presolve_find_col(icolx, mrstrt[row], mrstrt[row] + hinrow[row], hcol); rowels[kmi] = colels[kcolx]; presolve_delete_from_row(row, icoly, mrstrt, hinrow, hcol, rowels); /* Case 2: coeff[i,x] == 0: add it in the column rep; convert coeff[i,y] in the row rep. presolve_expand_col ensures an empty entry exists at the end of the column. The location of column x may change with expansion. */ } else { const bool no_mem = presolve_expand_col(mcstrt, colels, hrow, hincol, clink, ncols, icolx); if (no_mem) return (true); kcsx = mcstrt[icolx]; kcex = kcsx + hincol[icolx]; // recompute y as well base = mcstrt[icoly]; hrow[kcex] = row; colels[kcex] = delta; hincol[icolx]++; kcex++; CoinBigIndex k2 = presolve_find_col(icoly, mrstrt[row], mrstrt[row] + hinrow[row], hcol); hcol[k2] = icolx; rowels[k2] = delta; } /* Update the row bounds, if necessary. Avoid updating finite infinity. */ if (bounds_factor != 0.0) { delta = coeffy * bounds_factor; if (-PRESOLVE_INF < rlo[row]) rlo[row] -= delta; if (rup[row] < PRESOLVE_INF) rup[row] -= delta; } } #if PRESOLVE_DEBUG > 1 printf(")\n"); #endif return (false); } #if PRESOLVE_DEBUG > 0 /* Debug helpers */ double *doubleton_mult; int *doubleton_id; void check_doubletons(const CoinPresolveAction *paction) { const CoinPresolveAction *paction0 = paction; if (paction) { check_doubletons(paction->next); if (strcmp(paction0->name(), "doubleton_action") == 0) { const doubleton_action *daction = dynamic_cast< const doubleton_action * >(paction0); for (int i = daction->nactions_ - 1; i >= 0; --i) { int icolx = daction->actions_[i].icolx; int icoly = daction->actions_[i].icoly; double coeffx = daction->actions_[i].coeffx; double coeffy = daction->actions_[i].coeffy; doubleton_mult[icoly] = -coeffx / coeffy; doubleton_id[icoly] = icolx; } } } } void check_doubletons1(const CoinPresolveAction *paction, int ncols) { doubleton_mult = new double[ncols]; doubleton_id = new int[ncols]; int i; for (i = 0; i < ncols; ++i) doubleton_id[i] = i; check_doubletons(paction); double minmult = 1.0; int minid = -1; for (i = 0; i < ncols; ++i) { double mult = 1.0; int j = i; if (doubleton_id[j] != j) { printf("MULTS (%d): ", j); while (doubleton_id[j] != j) { printf("%d %g, ", doubleton_id[j], doubleton_mult[j]); mult *= doubleton_mult[j]; j = doubleton_id[j]; } printf(" == %g\n", mult); if (minmult > fabs(mult)) { minmult = fabs(mult); minid = i; } } } if (minid != -1) printf("MIN MULT: %d %g\n", minid, minmult); } #endif // PRESOLVE_DEBUG } /* end unnamed local namespace */ /* It is always the case that one of the variables of a doubleton is, or can be made, implied free, but neither will necessarily be a singleton. Since in the case of a doubleton the number of non-zero entries will never increase if one is eliminated, it makes sense to always eliminate them. The col rep and row rep must be consistent. */ const CoinPresolveAction * doubleton_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering doubleton_action::presolve; considering " << prob->numberRowsToDo_ << " rows." << std::endl; #endif presolve_consistent(prob); presolve_links_ok(prob); presolve_check_sol(prob); presolve_check_nbasic(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int startEmptyRows = 0; int startEmptyColumns = 0; startEmptyRows = prob->countEmptyRows(); startEmptyColumns = prob->countEmptyCols(); #if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0; if (prob->tuning_) startTime = CoinCpuTime(); #endif #endif const int n = prob->ncols_; const int m = prob->nrows_; /* Unpack column-major and row-major representations, along with rim vectors. */ CoinBigIndex *colStarts = prob->mcstrt_; int *colLengths = prob->hincol_; double *colCoeffs = prob->colels_; int *rowIndices = prob->hrow_; presolvehlink *clink = prob->clink_; double *clo = prob->clo_; double *cup = prob->cup_; CoinBigIndex *rowStarts = prob->mrstrt_; int *rowLengths = prob->hinrow_; double *rowCoeffs = prob->rowels_; int *colIndices = prob->hcol_; presolvehlink *rlink = prob->rlink_; double *rlo = prob->rlo_; double *rup = prob->rup_; const unsigned char *integerType = prob->integerType_; double *cost = prob->cost_; int numberLook = prob->numberRowsToDo_; int *look = prob->rowsToDo_; const double ztolzb = prob->ztolzb_; const double ztolzero = 1.0e-12; action *actions = new action[m]; int nactions = 0; /* zeros will hold columns that should be groomed to remove explicit zeros when we're finished. fixed will hold columns that have ended up as fixed variables. */ int *zeros = prob->usefulColumnInt_; int nzeros = 0; int *fixed = zeros + n; int nfixed = 0; unsigned char *rowstat = prob->rowstat_; double *acts = prob->acts_; double *sol = prob->sol_; /* More like `ignore infeasibility'. */ bool fixInfeasibility = ((prob->presolveOptions_ & 0x4000) != 0); /* Open the main loop to scan for doubleton candidates. */ for (int iLook = 0; iLook < numberLook; iLook++) { const int tgtrow = look[iLook]; /* We need an equality with two coefficients. Avoid isolated constraints, lest both variables vanish. Failure of the assert indicates that the row- and column-major representations are out of sync. */ if ((rowLengths[tgtrow] != 2) || (fabs(rup[tgtrow] - rlo[tgtrow]) > ZTOLDP)) continue; const CoinBigIndex krs = rowStarts[tgtrow]; int tgtcolx = colIndices[krs]; int tgtcoly = colIndices[krs + 1]; PRESOLVEASSERT(colLengths[tgtcolx] > 0 || colLengths[tgtcoly] > 0); if (colLengths[tgtcolx] == 1 && colLengths[tgtcoly] == 1) continue; /* Avoid prohibited columns and fixed columns. Make sure the coefficients are nonzero. JJF - test should allow one to be prohibited as long as you leave that one. I modified earlier code but hope I have got this right. */ if (prob->colProhibited(tgtcolx) && prob->colProhibited(tgtcoly)) continue; if (fabs(rowCoeffs[krs]) < ZTOLDP2 || fabs(rowCoeffs[krs + 1]) < ZTOLDP2) continue; if ((fabs(cup[tgtcolx] - clo[tgtcolx]) < ZTOLDP) || (fabs(cup[tgtcoly] - clo[tgtcoly]) < ZTOLDP)) continue; #if PRESOLVE_DEBUG > 2 std::cout << " row " << tgtrow << " colx " << tgtcolx << " coly " << tgtcoly << " passes preliminary eval." << std::endl; #endif /* Find this row in each column. The indices are not const because we may flip them below, once we decide which column will be eliminated. */ CoinBigIndex krowx = presolve_find_row(tgtrow, colStarts[tgtcolx], colStarts[tgtcolx] + colLengths[tgtcolx], rowIndices); double coeffx = colCoeffs[krowx]; CoinBigIndex krowy = presolve_find_row(tgtrow, colStarts[tgtcoly], colStarts[tgtcoly] + colLengths[tgtcoly], rowIndices); double coeffy = colCoeffs[krowy]; const double rhs = rlo[tgtrow]; /* Avoid obscuring a requirement for integrality. If only one variable is integer, keep it and substitute for the continuous variable. If both are integer, substitute only for the forms x = k*y (k integral and non-empty intersection on bounds on x) or x = 1-y, where both x and y are binary. flag bits for integerStatus: 0x01: x integer; 0x02: y integer This bit of code works because 0 is continuous, 1 is integer. Make sure that's true. */ assert((integerType[tgtcolx] == 0) || (integerType[tgtcolx] == 1)); assert((integerType[tgtcoly] == 0) || (integerType[tgtcoly] == 1)); int integerX = integerType[tgtcolx]; int integerY = integerType[tgtcoly]; /* if one prohibited then treat that as integer. This may be pessimistic - but will catch SOS etc */ if (prob->colProhibited2(tgtcolx)) integerX = 1; if (prob->colProhibited2(tgtcoly)) integerY = 1; int integerStatus = (integerY << 1) | integerX; if (integerStatus == 3) { int good = 0; double rhs2 = rhs; if (coeffx < 0.0) { coeffx = -coeffx; rhs2 += 1; } if ((cup[tgtcolx] == 1.0) && (clo[tgtcolx] == 0.0) && (fabs(coeffx - 1.0) < 1.0e-7) && !prob->colProhibited2(tgtcoly)) good = 1; if (coeffy < 0.0) { coeffy = -coeffy; rhs2 += 1; } if ((cup[tgtcoly] == 1.0) && (clo[tgtcoly] == 0.0) && (fabs(coeffy - 1.0) < 1.0e-7) && !prob->colProhibited2(tgtcolx)) good |= 2; if (!(good == 3 && fabs(rhs2 - 1.0) < 1.0e-7)) integerStatus = -1; /* Not x+y = 1. Try for ax+by = 0 */ if (integerStatus < 0 && rhs == 0.0) { coeffx = colCoeffs[krowx]; coeffy = colCoeffs[krowy]; double ratio; bool swap = false; if (fabs(coeffx) > fabs(coeffy)) { ratio = coeffx / coeffy; } else { ratio = coeffy / coeffx; swap = true; } ratio = fabs(ratio); if (fabs(ratio - floor(ratio + 0.5)) < ztolzero) { integerStatus = swap ? 2 : 1; } } /* One last try --- just require an integral substitution formula. But ax+by = 0 above is a subset of ax+by = c below and should pass the test below. For that matter, so will x+y = 1. Why separate special cases above? -- lh, 121106 -- */ if (integerStatus < 0) { bool canDo = false; coeffx = colCoeffs[krowx]; coeffy = colCoeffs[krowy]; double ratio; bool swap = false; double rhsRatio; if (fabs(coeffx) > fabs(coeffy)) { ratio = coeffx / coeffy; rhsRatio = rhs / coeffx; } else { ratio = coeffy / coeffx; rhsRatio = rhs / coeffy; swap = true; } ratio = fabs(ratio); if (fabs(ratio - floor(ratio + 0.5)) < ztolzero) { // possible integerStatus = swap ? 2 : 1; // but check rhs if (rhsRatio == floor(rhsRatio + 0.5)) canDo = true; } #ifdef COIN_DEVELOP2 if (canDo) printf("Good CoinPresolveDoubleton tgtcolx %d (%g and bounds %g %g) tgtcoly %d (%g and bound %g %g) - rhs %g\n", tgtcolx, colCoeffs[krowx], clo[tgtcolx], cup[tgtcolx], tgtcoly, colCoeffs[krowy], clo[tgtcoly], cup[tgtcoly], rhs); else printf("Bad CoinPresolveDoubleton tgtcolx %d (%g) tgtcoly %d (%g) - rhs %g\n", tgtcolx, colCoeffs[krowx], tgtcoly, colCoeffs[krowy], rhs); #endif if (!canDo) continue; } } /* We've resolved integrality concerns. If we concluded that we need to switch the roles of x and y because of integrality, do that now. If both variables are continuous, we may still want to swap for numeric stability. Eliminate the variable with the larger coefficient. */ if (integerStatus == 2) { CoinSwap(tgtcoly, tgtcolx); CoinSwap(krowy, krowx); } else if (integerStatus == 0) { if (fabs(colCoeffs[krowy]) < fabs(colCoeffs[krowx])) { CoinSwap(tgtcoly, tgtcolx); CoinSwap(krowy, krowx); } } /* Don't eliminate y just yet if it's entangled in a singleton row (we want to capture that explicit bound in a column bound). */ const CoinBigIndex kcsy = colStarts[tgtcoly]; const CoinBigIndex kcey = kcsy + colLengths[tgtcoly]; bool singletonRow = false; for (CoinBigIndex kcol = kcsy; kcol < kcey; kcol++) { if (rowLengths[rowIndices[kcol]] == 1) { singletonRow = true; break; } } // skip if y prohibited if (singletonRow || prob->colProhibited2(tgtcoly)) continue; coeffx = colCoeffs[krowx]; coeffy = colCoeffs[krowy]; #if PRESOLVE_DEBUG > 2 std::cout << " doubleton row " << tgtrow << ", keep x(" << tgtcolx << ") elim x(" << tgtcoly << ")." << std::endl; #endif PRESOLVE_DETAIL_PRINT(printf("pre_doubleton %dC %dC %dR E\n", tgtcoly, tgtcolx, tgtrow)); /* Capture the existing columns and other information before we start to modify the constraint system. Save the shorter column. */ action *s = &actions[nactions]; nactions++; s->row = tgtrow; s->icolx = tgtcolx; s->clox = clo[tgtcolx]; s->cupx = cup[tgtcolx]; s->costx = cost[tgtcolx]; s->icoly = tgtcoly; s->costy = cost[tgtcoly]; s->rlo = rlo[tgtrow]; s->coeffx = coeffx; s->coeffy = coeffy; s->ncolx = colLengths[tgtcolx]; s->ncoly = colLengths[tgtcoly]; if (s->ncoly < s->ncolx) { s->colel = presolve_dupmajor(colCoeffs, rowIndices, colLengths[tgtcoly], colStarts[tgtcoly], tgtrow); s->ncolx = 0; } else { s->colel = presolve_dupmajor(colCoeffs, rowIndices, colLengths[tgtcolx], colStarts[tgtcolx], tgtrow); s->ncoly = 0; } /* Move finite bound information from y to x, so that y is implied free. a x + b y = c l1 <= x <= u1 l2 <= y <= u2 l2 <= (c - a x) / b <= u2 b/-a > 0 ==> (b l2 - c) / -a <= x <= (b u2 - c) / -a b/-a < 0 ==> (b u2 - c) / -a <= x <= (b l2 - c) / -a */ { double lo1 = -PRESOLVE_INF; double up1 = PRESOLVE_INF; if (-PRESOLVE_INF < clo[tgtcoly]) { if (coeffx * coeffy < 0) lo1 = (coeffy * clo[tgtcoly] - rhs) / -coeffx; else up1 = (coeffy * clo[tgtcoly] - rhs) / -coeffx; } if (cup[tgtcoly] < PRESOLVE_INF) { if (coeffx * coeffy < 0) up1 = (coeffy * cup[tgtcoly] - rhs) / -coeffx; else lo1 = (coeffy * cup[tgtcoly] - rhs) / -coeffx; } /* Don't forget the objective coefficient. costy y = costy ((c - a x) / b) = (costy c)/b + x (costy -a)/b */ cost[tgtcolx] += (cost[tgtcoly] * -coeffx) / coeffy; prob->change_bias((cost[tgtcoly] * rhs) / coeffy); /* The transfer of bounds could make x infeasible. Patch it up if the problem is minor or if the user was so incautious as to instruct us to ignore it. Prefer an integer value if there's one nearby. If there's nothing to be done, break out of the main loop. */ { double lo2 = CoinMax(clo[tgtcolx], lo1); double up2 = CoinMin(cup[tgtcolx], up1); if (lo2 > up2) { if (lo2 <= up2 + prob->feasibilityTolerance_ || fixInfeasibility) { double nearest = floor(lo2 + 0.5); if (fabs(nearest - lo2) < 2.0 * prob->feasibilityTolerance_) { lo2 = nearest; up2 = nearest; } else { lo2 = up2; } } else { prob->status_ |= 1; prob->messageHandler()->message(COIN_PRESOLVE_COLINFEAS, prob->messages()) << tgtcolx << lo2 << up2 << CoinMessageEol; break; } } #if PRESOLVE_DEBUG > 2 std::cout << " x(" << tgtcolx << ") lb " << clo[tgtcolx] << " --> " << lo2 << ", ub " << cup[tgtcolx] << " --> " << up2 << std::endl; #endif if (integerType[tgtcolx]) { lo2 = ceil(lo2 - 1.0e-7); up2 = floor(up2 + 1.0e-7); } clo[tgtcolx] = lo2; cup[tgtcolx] = up2; /* Do we have a solution to maintain? If so, take a stab at it. If x ends up at bound, prefer to set it nonbasic, but if we're short of basic variables after eliminating y and the logical for the row, make it basic. This code will snap the value of x to bound if it's within the primal feasibility tolerance. */ if (rowstat && sol) { int numberBasic = 0; double movement = 0; if (prob->columnIsBasic(tgtcolx)) numberBasic++; if (prob->columnIsBasic(tgtcoly)) numberBasic++; if (prob->rowIsBasic(tgtrow)) numberBasic++; if (sol[tgtcolx] <= lo2 + ztolzb) { movement = lo2 - sol[tgtcolx]; sol[tgtcolx] = lo2; prob->setColumnStatus(tgtcolx, CoinPrePostsolveMatrix::atLowerBound); } else if (sol[tgtcolx] >= up2 - ztolzb) { movement = up2 - sol[tgtcolx]; sol[tgtcolx] = up2; prob->setColumnStatus(tgtcolx, CoinPrePostsolveMatrix::atUpperBound); } if (numberBasic > 1) prob->setColumnStatus(tgtcolx, CoinPrePostsolveMatrix::basic); /* We need to compensate if x was forced to move. Beyond that, even if x didn't move, we've forced y = (c-ax)/b, and that might not have been true before. So even if x didn't move, y may have moved. Note that the constant term c/b is subtracted out as the constraints are modified, so we don't include it when calculating movement for y. */ if (movement) { const CoinBigIndex kkcsx = colStarts[tgtcolx]; const CoinBigIndex kkcex = kkcsx + colLengths[tgtcolx]; for (CoinBigIndex kcol = kkcsx; kcol < kkcex; kcol++) { int row = rowIndices[kcol]; if (rowLengths[row]) acts[row] += movement * colCoeffs[kcol]; } } movement = ((-coeffx * sol[tgtcolx]) / coeffy) - sol[tgtcoly]; if (movement) { const CoinBigIndex kkcsy = colStarts[tgtcoly]; const CoinBigIndex kkcey = kkcsy + colLengths[tgtcoly]; for (CoinBigIndex kcol = kkcsy; kcol < kkcey; kcol++) { int row = rowIndices[kcol]; if (rowLengths[row]) acts[row] += movement * colCoeffs[kcol]; } } } if (lo2 == up2) fixed[nfixed++] = tgtcolx; } } /* We're done transferring bounds from y to x, and we've patched up the solution if one existed to patch. One last thing to do before we eliminate column y and the doubleton row: put column x and the entangled rows on the lists of columns and rows to look at in the next round of transforms. */ { prob->addCol(tgtcolx); const CoinBigIndex kkcsy = colStarts[tgtcoly]; const CoinBigIndex kkcey = kkcsy + colLengths[tgtcoly]; for (CoinBigIndex kcol = kkcsy; kcol < kkcey; kcol++) { int row = rowIndices[kcol]; prob->addRow(row); } const CoinBigIndex kkcsx = colStarts[tgtcolx]; const CoinBigIndex kkcex = kkcsx + colLengths[tgtcolx]; for (CoinBigIndex kcol = kkcsx; kcol < kkcex; kcol++) { int row = rowIndices[kcol]; prob->addRow(row); } } /* Empty tgtrow in the column-major matrix. Deleting the coefficient for (tgtrow,tgtcoly) is a bit costly (given that we're about to drop the whole column), but saves the trouble of checking for it in elim_doubleton. */ presolve_delete_from_col(tgtrow, tgtcolx, colStarts, colLengths, rowIndices, colCoeffs); presolve_delete_from_col(tgtrow, tgtcoly, colStarts, colLengths, rowIndices, colCoeffs); /* Drop tgtrow in the row-major representation: set the length to 0 and reclaim the major vector space in bulk storage. */ rowLengths[tgtrow] = 0; PRESOLVE_REMOVE_LINK(rlink, tgtrow); /* Transfer the colx factors to coly. This modifies coefficients in column x as it removes coefficients in column y. */ bool no_mem = elim_doubleton("ELIMD", colStarts, rlo, rup, colCoeffs, rowIndices, colIndices, rowLengths, colLengths, clink, n, rowStarts, rowCoeffs, -coeffx / coeffy, rhs / coeffy, tgtrow, tgtcolx, tgtcoly); if (no_mem) throwCoinError("out of memory", "doubleton_action::presolve"); /* Eliminate coly entirely from the col rep. We'll want to groom colx to remove explicit zeros. */ colLengths[tgtcoly] = 0; PRESOLVE_REMOVE_LINK(clink, tgtcoly); cost[tgtcoly] = 0.0; rlo[tgtrow] = 0.0; rup[tgtrow] = 0.0; zeros[nzeros++] = tgtcolx; #if PRESOLVE_CONSISTENCY > 0 presolve_consistent(prob); presolve_links_ok(prob); #endif } /* Tidy up the collected actions and clean up explicit zeros and fixed variables. Don't bother unless we're feasible (status of 0). */ if (nactions && !prob->status_) { #if PRESOLVE_SUMMARY > 0 printf("NDOUBLETONS: %d\n", nactions); #endif action *actions1 = new action[nactions]; CoinMemcpyN(actions, nactions, actions1); next = new doubleton_action(nactions, actions1, next); if (nzeros) next = drop_zero_coefficients_action::presolve(prob, zeros, nzeros, next); if (nfixed) next = remove_fixed_action::presolve(prob, fixed, nfixed, next); } deleteAction(actions, action *); #if COIN_PRESOLVE_TUNING > 0 double thisTime = 0.0; if (prob->tuning_) thisTime = CoinCpuTime(); #endif #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_sol(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows() - startEmptyRows; int droppedColumns = prob->countEmptyCols() - startEmptyColumns; std::cout << "Leaving doubleton_action::presolve, " << droppedRows << " rows, " << droppedColumns << " columns dropped"; #if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << thisTime - startTime << "s"; #endif std::cout << "." << std::endl; #endif return (next); } /* Reintroduce the column (y) and doubleton row (irow) removed in presolve. Correct the other column (x) involved in the doubleton, update the solution, etc. A fair amount of complication arises because the presolve transform saves the shorter of x or y. Postsolve thus includes portions to restore either. */ void doubleton_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_; const int nactions = nactions_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; CoinBigIndex *link = prob->link_; double *clo = prob->clo_; double *cup = prob->cup_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *dcost = prob->cost_; double *sol = prob->sol_; double *acts = prob->acts_; double *rowduals = prob->rowduals_; double *rcosts = prob->rcosts_; unsigned char *colstat = prob->colstat_; unsigned char *rowstat = prob->rowstat_; const double maxmin = prob->maxmin_; CoinBigIndex &free_list = prob->free_list_; const double ztolzb = prob->ztolzb_; const double ztoldj = prob->ztoldj_; const double ztolzero = 1.0e-12; int nrows = prob->nrows_; // Arrays to rebuild the unsaved column. int *index1 = new int[nrows]; double *element1 = new double[nrows]; CoinZeroN(element1, nrows); #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 char *cdone = prob->cdone_; char *rdone = prob->rdone_; presolve_check_threads(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); presolve_check_reduced_costs(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Entering doubleton_action::postsolve, " << nactions << " transforms to undo." << std::endl; #endif #endif /* The outer loop: step through the doubletons in this array of actions. The first activity is to unpack the doubleton. */ for (const action *f = &actions[nactions - 1]; actions <= f; f--) { const int irow = f->row; const double lo0 = f->clox; const double up0 = f->cupx; const double coeffx = f->coeffx; const double coeffy = f->coeffy; const int jcolx = f->icolx; const int jcoly = f->icoly; const double rhs = f->rlo; #if PRESOLVE_DEBUG > 2 std::cout << std::endl << " restoring doubleton " << irow << ", elim x(" << jcoly << "), kept x(" << jcolx << "); stored col "; if (f->ncoly) std::cout << jcoly; else std::cout << jcolx; std::cout << "." << std::endl; std::cout << " x(" << jcolx << ") " << prob->columnStatusString(jcolx) << " " << clo[jcolx] << " <= " << sol[jcolx] << " <= " << cup[jcolx] << "; cj " << f->costx << " dj " << rcosts[jcolx] << "." << std::endl; #endif /* jcolx is in the problem (for whatever reason), and the doubleton row (irow) and column (jcoly) have only been processed by empty row/column postsolve (i.e., reintroduced with length 0). */ PRESOLVEASSERT(cdone[jcolx] && rdone[irow] == DROP_ROW); PRESOLVEASSERT(cdone[jcoly] == DROP_COL); /* Restore bounds for doubleton row, bounds and objective coefficient for x, objective for y. Original comment: restoration of rlo and rup likely isn't necessary. */ rlo[irow] = f->rlo; rup[irow] = f->rlo; clo[jcolx] = lo0; cup[jcolx] = up0; dcost[jcolx] = f->costx; dcost[jcoly] = f->costy; /* Set primal solution for y (including status) and row activity for the doubleton row. The motivation (up in presolve) for wanting coeffx < coeffy is to avoid inflation into sol[y]. Since this is a (satisfied) equality, activity is the rhs value and the logical is nonbasic. */ const double diffy = rhs - coeffx * sol[jcolx]; if (fabs(diffy) < ztolzero) sol[jcoly] = 0; else sol[jcoly] = diffy / coeffy; acts[irow] = rhs; if (rowstat) prob->setRowStatus(irow, CoinPrePostsolveMatrix::atLowerBound); #if PRESOLVE_DEBUG > 2 /* Original comment: I've forgotten what this is about We have sol[y] = (rhs - coeffx*sol[x])/coeffy. As best I can figure, the original check here tested for the possibility of loss of significant digits through cancellation, followed by inflation if coeffy is small. The hazard is clear enough, but the test was puzzling. Overly complicated and it generated false warnings for the common case of sol[y] a clean zero. Replaced with something that I hope is more useful. The tolerances are, sad to say, completely arbitrary. -- lh, 121106 -- */ if ((fabs(diffy) < 1.0e-6) && (fabs(diffy) >= ztolzero) && (fabs(coeffy) < 1.0e-3)) std::cout << " loss of significance? rhs " << rhs << " (coeffx*sol[jcolx])" << (coeffx * sol[jcolx]) << " diff " << diffy << "." << std::endl; #endif /* Time to get into the correction/restoration of coefficients for columns x and y, with attendant correction of row bounds and activities. Accumulate partial reduced costs (missing the contribution from the doubleton row) so that we can eventually calculate a dual for the doubleton row. */ double djy = maxmin * dcost[jcoly]; double djx = maxmin * dcost[jcolx]; /* We saved column y in the action, so we'll use it to reconstruct column x. There are two aspects: correction of existing x coefficients, and fill in. Given coeffx'[k] = coeffx[k]+coeffy[k]*coeff_factor we have coeffx[k] = coeffx'[k]-coeffy[k]*coeff_factor where coeff_factor = -coeffx[dblton]/coeffy[dblton]. Keep in mind that the major vector stored in the action does not include the coefficient from the doubleton row --- the doubleton coefficients are held in coeffx and coeffy. */ if (f->ncoly) { int ncoly = f->ncoly - 1; int *indy = reinterpret_cast< int * >(f->colel + ncoly); /* Rebuild a threaded column y, starting with the end of the thread and working back to the beginning. In the process, accumulate corrections to column x in element1 and index1. Fix row bounds and activity as we go (add back the constant correction removed in presolve), and accumulate contributions to the reduced cost for y. Don't tweak finite infinity. The PRESOLVEASSERT says this row should already be present. */ CoinBigIndex ystart = NO_LINK; int nX = 0; for (int kcol = 0; kcol < ncoly; ++kcol) { const int i = indy[kcol]; PRESOLVEASSERT(rdone[i]); double yValue = f->colel[kcol]; if (-PRESOLVE_INF < rlo[i]) rlo[i] += (yValue * rhs) / coeffy; if (rup[i] < PRESOLVE_INF) rup[i] += (yValue * rhs) / coeffy; acts[i] += (yValue * rhs) / coeffy; djy -= rowduals[i] * yValue; /* Link the coefficient into column y: Acquire the first free slot in the bulk arrays and store the row index and coefficient. Then link the slot in front of coefficients we've already processed. */ const CoinBigIndex kfree = free_list; assert(kfree >= 0 && kfree < prob->bulk0_); free_list = link[free_list]; hrow[kfree] = i; colels[kfree] = yValue; link[kfree] = ystart; ystart = kfree; #if PRESOLVE_DEBUG > 4 std::cout << " link y " << kfree << " row " << i << " coeff " << yValue << " dual " << rowduals[i] << std::endl; #endif /* Calculate and store the correction to the x coefficient. */ yValue = (yValue * coeffx) / coeffy; element1[i] = yValue; index1[nX++] = i; } #if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob); #endif /* Handle the coefficients of the doubleton row. Insert coeffy, coeffx. */ const CoinBigIndex kfree = free_list; assert(kfree >= 0 && kfree < prob->bulk0_); free_list = link[free_list]; hrow[kfree] = irow; colels[kfree] = coeffy; link[kfree] = ystart; ystart = kfree; #if PRESOLVE_DEBUG > 4 std::cout << " link y " << kfree << " row " << irow << " coeff " << coeffy << " dual n/a" << std::endl; #endif element1[irow] = coeffx; index1[nX++] = irow; /* Attach the threaded column y to mcstrt and record the length. */ mcstrt[jcoly] = ystart; hincol[jcoly] = f->ncoly; /* Now integrate the corrections to column x. Scan the column and correct the existing entries. The correction could cancel the existing coefficient and we don't want to leave an explicit zero. In this case, relink the column around it. The freed slot is linked at the beginning of the free list. */ CoinBigIndex kcs = mcstrt[jcolx]; CoinBigIndex last_nonzero = NO_LINK; int numberInColumn = hincol[jcolx]; const int numberToDo = numberInColumn; for (int kcol = 0; kcol < numberToDo; ++kcol) { const int i = hrow[kcs]; assert(i >= 0 && i < nrows && i != irow); double value = colels[kcs] + element1[i]; element1[i] = 0.0; if (fabs(value) >= 1.0e-15) { colels[kcs] = value; last_nonzero = kcs; kcs = link[kcs]; djx -= rowduals[i] * value; #if PRESOLVE_DEBUG > 4 std::cout << " link x " << last_nonzero << " row " << i << " coeff " << value << " dual " << rowduals[i] << std::endl; #endif } else { #if PRESOLVE_DEBUG > 4 std::cout << " link x skipped row " << i << " dual " << rowduals[i] << std::endl; #endif numberInColumn--; // add to free list CoinBigIndex nextk = link[kcs]; assert(free_list >= 0); link[kcs] = free_list; free_list = kcs; assert(kcs >= 0); kcs = nextk; if (last_nonzero != NO_LINK) link[last_nonzero] = kcs; else mcstrt[jcolx] = kcs; } } if (last_nonzero != NO_LINK) link[last_nonzero] = NO_LINK; /* We've dealt with the existing nonzeros in column x. Any remaining nonzeros in element1 will be fill in, which we insert at the beginning of the column. */ for (int kcol = 0; kcol < nX; kcol++) { const int i = index1[kcol]; double xValue = element1[i]; element1[i] = 0.0; if (fabs(xValue) >= 1.0e-15) { if (i != irow) djx -= rowduals[i] * xValue; numberInColumn++; CoinBigIndex kfree = free_list; assert(kfree >= 0 && kfree < prob->bulk0_); free_list = link[free_list]; hrow[kfree] = i; PRESOLVEASSERT(rdone[hrow[kfree]] || (hrow[kfree] == irow)); colels[kfree] = xValue; link[kfree] = mcstrt[jcolx]; mcstrt[jcolx] = kfree; #if PRESOLVE_DEBUG > 4 std::cout << " link x " << kfree << " row " << i << " coeff " << xValue << " dual "; if (i != irow) std::cout << rowduals[i]; else std::cout << "n/a"; std::cout << std::endl; #endif } } #if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob); #endif /* Whew! Set the column length and we're done. */ assert(numberInColumn); hincol[jcolx] = numberInColumn; } else { /* Of course, we could have saved column x in the action. Now we need to regenerate coefficients of column y. Given coeffx'[k] = coeffx[k]+coeffy[k]*coeff_factor we have coeffy[k] = (coeffx'[k]-coeffx[k])*(1/coeff_factor) where coeff_factor = -coeffx[dblton]/coeffy[dblton]. */ const int ncolx = f->ncolx - 1; int *indx = reinterpret_cast< int * >(f->colel + ncolx); /* Scan existing column x to find the end. While we're at it, accumulate part of the new y coefficients in index1 and element1. */ CoinBigIndex kcs = mcstrt[jcolx]; int nX = 0; for (int kcol = 0; kcol < hincol[jcolx] - 1; ++kcol) { if (colels[kcs]) { const int i = hrow[kcs]; index1[nX++] = i; element1[i] = -(colels[kcs] * coeffy) / coeffx; } kcs = link[kcs]; } if (colels[kcs]) { const int i = hrow[kcs]; index1[nX++] = i; element1[i] = -(colels[kcs] * coeffy) / coeffx; } /* Replace column x with the the original column x held in the doubleton action (recall that this column does not include coeffx). We first move column x to the free list, then thread a column with the original coefficients, back to front. While we're at it, add the second part of the y coefficients to index1 and element1. */ link[kcs] = free_list; free_list = mcstrt[jcolx]; CoinBigIndex xstart = NO_LINK; for (int kcol = 0; kcol < ncolx; ++kcol) { const int i = indx[kcol]; PRESOLVEASSERT(rdone[i] && i != irow); double xValue = f->colel[kcol]; CoinBigIndex k = free_list; assert(k >= 0 && k < prob->bulk0_); free_list = link[free_list]; hrow[k] = i; colels[k] = xValue; link[k] = xstart; xstart = k; djx -= rowduals[i] * xValue; xValue = (xValue * coeffy) / coeffx; if (!element1[i]) { element1[i] = xValue; index1[nX++] = i; } else { element1[i] += xValue; } } #if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob); #endif /* The same, for the doubleton row. */ { double xValue = coeffx; CoinBigIndex k = free_list; assert(k >= 0 && k < prob->bulk0_); free_list = link[free_list]; hrow[k] = irow; colels[k] = xValue; link[k] = xstart; xstart = k; element1[irow] = coeffy; index1[nX++] = irow; } /* Link the new column x to mcstrt and set the length. */ mcstrt[jcolx] = xstart; hincol[jcolx] = f->ncolx; /* Now get to work building a threaded column y from the nonzeros in element1. As before, build the thread in reverse. */ CoinBigIndex ystart = NO_LINK; int leny = 0; for (int kcol = 0; kcol < nX; kcol++) { const int i = index1[kcol]; PRESOLVEASSERT(rdone[i] || i == irow); double yValue = element1[i]; element1[i] = 0.0; if (fabs(yValue) >= ztolzero) { leny++; CoinBigIndex k = free_list; assert(k >= 0 && k < prob->bulk0_); free_list = link[free_list]; hrow[k] = i; colels[k] = yValue; link[k] = ystart; ystart = k; } } #if PRESOLVE_CONSISTENCY > 0 presolve_check_free_list(prob); #endif /* Tidy up --- link the new column into mcstrt and set the length. */ mcstrt[jcoly] = ystart; assert(leny); hincol[jcoly] = leny; /* Now that we have the original y, we can scan it and do the corrections to the row bounds and activity, and get a start on a reduced cost for y. */ kcs = mcstrt[jcoly]; const int ny = hincol[jcoly]; for (int kcol = 0; kcol < ny; ++kcol) { const int row = hrow[kcs]; const double coeff = colels[kcs]; kcs = link[kcs]; if (row != irow) { // undo elim_doubleton(1) if (-PRESOLVE_INF < rlo[row]) rlo[row] += (coeff * rhs) / coeffy; // undo elim_doubleton(2) if (rup[row] < PRESOLVE_INF) rup[row] += (coeff * rhs) / coeffy; acts[row] += (coeff * rhs) / coeffy; djy -= rowduals[row] * coeff; } } } #if PRESOLVE_DEBUG > 2 /* Sanity checks. The doubleton coefficients should be linked in the first position of the each column (for no good reason except that it makes it much easier to write these checks). */ #if PRESOLVE_DEBUG > 4 std::cout << " kept: saved " << jcolx << " " << coeffx << ", reconstructed " << hrow[mcstrt[jcolx]] << " " << colels[mcstrt[jcolx]] << "." << std::endl; std::cout << " elim: saved " << jcoly << " " << coeffy << ", reconstructed " << hrow[mcstrt[jcoly]] << " " << colels[mcstrt[jcoly]] << "." << std::endl; #endif assert((coeffx == colels[mcstrt[jcolx]]) && (coeffy == colels[mcstrt[jcoly]])); #endif /* Time to calculate a dual for the doubleton row, and settle the status of x and y. Ideally, we'll leave x at whatever nonbasic status it currently has and make y basic. There's a potential problem, however: Remember that we transferred bounds from y to x when we eliminated y. If those bounds were tighter than x's original bounds, we may not be able to maintain x at its present status, or even as nonbasic. We'll make two claims here: * If the dual value for the doubleton row is chosen to keep the reduced cost djx of col x at its prior value, then the reduced cost djy of col y will be 0. (Crank through the linear algebra to convince yourself.) * If the bounds on x have loosened, then it must be possible to make y nonbasic, because we've transferred the tight bound back to y. (Yeah, I'm waving my hands. But it sounds good. -- lh, 040907 --) So ... if we can maintain x nonbasic, then we need to set y basic, which means we should calculate rowduals[dblton] so that rcost[jcoly] == 0. We may need to change the status of x (an artifact of loosening a bound when x was previously a fixed variable). If we need to push x into the basis, then we calculate rowduals[dblton] so that rcost[jcolx] == 0 and make y nonbasic. */ #if PRESOLVE_DEBUG > 2 std::cout << " pre status: x(" << jcolx << ") " << prob->columnStatusString(jcolx) << " " << clo[jcolx] << " <= " << sol[jcolx] << " <= " << cup[jcolx] << ", cj " << dcost[jcolx] << ", dj " << djx << "." << std::endl; std::cout << " pre status: x(" << jcoly << ") " << clo[jcoly] << " <= " << sol[jcoly] << " <= " << cup[jcoly] << ", cj " << dcost[jcoly] << ", dj " << djy << "." << std::endl; #endif if (colstat) { bool basicx = prob->columnIsBasic(jcolx); bool nblbxok = (fabs(lo0 - sol[jcolx]) < ztolzb) && (rcosts[jcolx] >= -ztoldj); bool nbubxok = (fabs(up0 - sol[jcolx]) < ztolzb) && (rcosts[jcolx] <= ztoldj); if (basicx || nblbxok || nbubxok) { if (!basicx) { if (nblbxok) { prob->setColumnStatus(jcolx, CoinPrePostsolveMatrix::atLowerBound); } else if (nbubxok) { prob->setColumnStatus(jcolx, CoinPrePostsolveMatrix::atUpperBound); } } prob->setColumnStatus(jcoly, CoinPrePostsolveMatrix::basic); rowduals[irow] = djy / coeffy; rcosts[jcolx] = djx - rowduals[irow] * coeffx; rcosts[jcoly] = 0.0; } else { prob->setColumnStatus(jcolx, CoinPrePostsolveMatrix::basic); prob->setColumnStatusUsingValue(jcoly); rowduals[irow] = djx / coeffx; rcosts[jcoly] = djy - rowduals[irow] * coeffy; rcosts[jcolx] = 0.0; } #if PRESOLVE_DEBUG > 2 std::cout << " post status: " << irow << " dual " << rowduals[irow] << " rhs " << rlo[irow] << std::endl; std::cout << " post status: x(" << jcolx << ") " << prob->columnStatusString(jcolx) << " " << clo[jcolx] << " <= " << sol[jcolx] << " <= " << cup[jcolx] << ", cj " << dcost[jcolx] << ", dj = " << rcosts[jcolx] << "." << std::endl; std::cout << " post status: x(" << jcoly << ") " << prob->columnStatusString(jcoly) << " " << clo[jcoly] << " <= " << sol[jcoly] << " <= " << cup[jcoly] << ", cj " << dcost[jcoly] << ", dj " << rcosts[jcoly] << "." << std::endl; /* These asserts are valid but need a scaled tolerance to work well over a range of problems. Occasionally useful for a hard stop while debugging. assert(!prob->columnIsBasic(jcolx) || (fabs(rcosts[jcolx]) < 1.0e-5)) ; assert(!prob->columnIsBasic(jcoly) || (fabs(rcosts[jcoly]) < 1.0e-5)) ; */ #endif } else { // No status array // this is the coefficient we need to force col y's reduced cost to 0.0 ; // for example, this is obviously true if y is a singleton column rowduals[irow] = djy / coeffy; rcosts[jcoly] = 0.0; } #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 /* Mark the column and row as processed by doubleton action. Then check integrity of the threaded matrix. */ cdone[jcoly] = DOUBLETON; rdone[irow] = DOUBLETON; presolve_check_threads(prob); #endif #if PRESOLVE_DEBUG > 0 /* Confirm accuracy of reduced cost for columns x and y. */ { CoinBigIndex k = mcstrt[jcolx]; const int nx = hincol[jcolx]; double dj = maxmin * dcost[jcolx]; for (int kcol = 0; kcol < nx; ++kcol) { const int row = hrow[k]; const double coeff = colels[k]; k = link[k]; dj -= rowduals[row] * coeff; } if (!(fabs(rcosts[jcolx] - dj) < 100 * ZTOLDP)) printf("BAD DOUBLE X DJ: %d %d %g %g\n", irow, jcolx, rcosts[jcolx], dj); rcosts[jcolx] = dj; } { CoinBigIndex k = mcstrt[jcoly]; const int ny = hincol[jcoly]; double dj = maxmin * dcost[jcoly]; for (int kcol = 0; kcol < ny; ++kcol) { const int row = hrow[k]; const double coeff = colels[k]; k = link[k]; dj -= rowduals[row] * coeff; } if (!(fabs(rcosts[jcoly] - dj) < 100 * ZTOLDP)) printf("BAD DOUBLE Y DJ: %d %d %g %g\n", irow, jcoly, rcosts[jcoly], dj); rcosts[jcoly] = dj; } #endif } /* Done at last. Delete the scratch arrays. */ delete[] index1; delete[] element1; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); presolve_check_reduced_costs(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving doubleton_action::postsolve." << std::endl; #endif #endif } doubleton_action::~doubleton_action() { for (int i = nactions_ - 1; i >= 0; i--) { delete[] actions_[i].colel; } deleteAction(actions_, action *); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinError.cpp0000644000175200017520000000121213414454441016161 0ustar coincoin/* $Id: CoinError.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinError.hpp" bool CoinError::printErrors_ = false; /** A function to block the popup windows that windows creates when the code crashes */ #ifdef HAVE_WINDOWS_H #include void WindowsErrorPopupBlocker() { SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); } #else void WindowsErrorPopupBlocker() { } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPragma.hpp0000644000175200017520000000162213414454441016311 0ustar coincoin/* $Id: CoinPragma.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPragma_H #define CoinPragma_H //------------------------------------------------------------------- // // This is a file which can contain Pragma's that are // generally applicable to any source file. // //------------------------------------------------------------------- #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) // Turn off compiler warning: // "empty controlled statement found; is this the intent?" #pragma warning(disable : 4390) // Turn off compiler warning about deprecated functions #pragma warning(disable : 4996) #endif #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinFactorization1.cpp0000644000175200017520000023064113415401144017770 0ustar coincoin/* $Id: CoinFactorization1.cpp 2084 2019-01-09 14:17:08Z forrest $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "CoinUtilsConfig.h" #include #include "CoinFactorization.hpp" #include "CoinIndexedVector.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedMatrix.hpp" #include "CoinFinite.hpp" #include "CoinTime.hpp" #include /* Somehow with some BLAS we get multithreaded by default For 99.99% of problems this is not a good idea. The openblas_set_num_threads(1) seems to work even with other blas */ #if CLP_USE_OPENBLAS static int blas_initialized = 0; extern "C" { void openblas_set_num_threads(int num_threads); } #endif //:class CoinFactorization. Deals with Factorization and Updates // CoinFactorization. Constructor CoinFactorization::CoinFactorization() { persistenceFlag_ = 0; gutsOfInitialize(7); } /// Copy constructor CoinFactorization::CoinFactorization(const CoinFactorization &other) { persistenceFlag_ = 0; gutsOfInitialize(3); persistenceFlag_ = other.persistenceFlag_; gutsOfCopy(other); } /// The real work of constructors etc /// Really really delete if type 2 void CoinFactorization::gutsOfDestructor(int type) { delete[] denseArea_; delete[] densePermute_; if (type == 2) { elementU_.switchOff(); startRowU_.switchOff(); convertRowToColumnU_.switchOff(); indexRowU_.switchOff(); indexColumnU_.switchOff(); startColumnU_.switchOff(); elementL_.switchOff(); indexRowL_.switchOff(); startColumnL_.switchOff(); startColumnR_.switchOff(); numberInRow_.switchOff(); numberInColumn_.switchOff(); numberInColumnPlus_.switchOff(); pivotColumn_.switchOff(); pivotColumnBack_.switchOff(); firstCount_.switchOff(); nextCount_.switchOff(); lastCount_.switchOff(); permute_.switchOff(); permuteBack_.switchOff(); nextColumn_.switchOff(); lastColumn_.switchOff(); nextRow_.switchOff(); lastRow_.switchOff(); saveColumn_.switchOff(); markRow_.switchOff(); pivotRowL_.switchOff(); pivotRegion_.switchOff(); elementByRowL_.switchOff(); startRowL_.switchOff(); indexColumnL_.switchOff(); sparse_.switchOff(); workArea_.switchOff(); workArea2_.switchOff(); } elementU_.conditionalDelete(); startRowU_.conditionalDelete(); convertRowToColumnU_.conditionalDelete(); indexRowU_.conditionalDelete(); indexColumnU_.conditionalDelete(); startColumnU_.conditionalDelete(); elementL_.conditionalDelete(); indexRowL_.conditionalDelete(); startColumnL_.conditionalDelete(); startColumnR_.conditionalDelete(); numberInRow_.conditionalDelete(); numberInColumn_.conditionalDelete(); numberInColumnPlus_.conditionalDelete(); pivotColumn_.conditionalDelete(); pivotColumnBack_.conditionalDelete(); firstCount_.conditionalDelete(); nextCount_.conditionalDelete(); lastCount_.conditionalDelete(); permute_.conditionalDelete(); permuteBack_.conditionalDelete(); nextColumn_.conditionalDelete(); lastColumn_.conditionalDelete(); nextRow_.conditionalDelete(); lastRow_.conditionalDelete(); saveColumn_.conditionalDelete(); markRow_.conditionalDelete(); pivotRowL_.conditionalDelete(); pivotRegion_.conditionalDelete(); elementByRowL_.conditionalDelete(); startRowL_.conditionalDelete(); indexColumnL_.conditionalDelete(); sparse_.conditionalDelete(); workArea_.conditionalDelete(); workArea2_.conditionalDelete(); numberCompressions_ = 0; biggerDimension_ = 0; numberRows_ = 0; numberRowsExtra_ = 0; maximumRowsExtra_ = 0; numberColumns_ = 0; numberColumnsExtra_ = 0; maximumColumnsExtra_ = 0; numberGoodU_ = 0; numberGoodL_ = 0; totalElements_ = 0; factorElements_ = 0; status_ = -1; numberSlacks_ = 0; numberU_ = 0; maximumU_ = 0; lengthU_ = 0; lengthAreaU_ = 0; numberL_ = 0; baseL_ = 0; lengthL_ = 0; lengthAreaL_ = 0; numberR_ = 0; lengthR_ = 0; lengthAreaR_ = 0; denseArea_ = NULL; densePermute_ = NULL; // next two offsets but this makes cleaner elementR_ = NULL; indexRowR_ = NULL; numberDense_ = 0; //persistenceFlag_=0; ////denseThreshold_=0; } // type - 1 bit tolerances etc, 2 rest void CoinFactorization::gutsOfInitialize(int type) { #if CLP_USE_OPENBLAS if (!blas_initialized) { blas_initialized = 1; openblas_set_num_threads(CLP_USE_OPENBLAS); } #endif if ((type & 2) != 0) { numberCompressions_ = 0; biggerDimension_ = 0; numberRows_ = 0; numberRowsExtra_ = 0; maximumRowsExtra_ = 0; numberColumns_ = 0; numberColumnsExtra_ = 0; maximumColumnsExtra_ = 0; numberGoodU_ = 0; numberGoodL_ = 0; totalElements_ = 0; factorElements_ = 0; status_ = -1; numberPivots_ = 0; numberSlacks_ = 0; numberU_ = 0; maximumU_ = 0; lengthU_ = 0; lengthAreaU_ = 0; numberL_ = 0; baseL_ = 0; lengthL_ = 0; lengthAreaL_ = 0; numberR_ = 0; lengthR_ = 0; lengthAreaR_ = 0; elementR_ = NULL; indexRowR_ = NULL; // always switch off sparse sparseThreshold_ = 0; sparseThreshold2_ = 0; denseArea_ = NULL; densePermute_ = NULL; numberDense_ = 0; if (!persistenceFlag_) { workArea_ = CoinFactorizationDoubleArrayWithLength(); workArea2_ = CoinUnsignedIntArrayWithLength(); pivotColumn_ = CoinIntArrayWithLength(); } } // after 2 because of persistenceFlag_ if ((type & 1) != 0) { areaFactor_ = 0.0; pivotTolerance_ = 1.0e-1; zeroTolerance_ = 1.0e-13; #ifndef COIN_FAST_CODE slackValue_ = -1.0; #endif messageLevel_ = 0; maximumPivots_ = 200; numberTrials_ = 4; relaxCheck_ = 1.0; #if COIN_FACTORIZATION_DENSE_CODE denseThreshold_ = 31; denseThreshold_ = 71; #else denseThreshold_ = 0; #endif biasLU_ = 2; doForrestTomlin_ = true; persistenceFlag_ = 0; } if ((type & 4) != 0) { // we need to get 1 element arrays for any with length n+1 !! startColumnL_.conditionalNew(1); startColumnR_.conditionalNew(1); startRowU_.conditionalNew(1); numberInRow_.conditionalNew(1); nextRow_.conditionalNew(1); lastRow_.conditionalNew(1); pivotRegion_.conditionalNew(1); permuteBack_.conditionalNew(1); permute_.conditionalNew(1); pivotColumnBack_.conditionalNew(1); startColumnU_.conditionalNew(1); numberInColumn_.conditionalNew(1); numberInColumnPlus_.conditionalNew(1); pivotColumn_.conditionalNew(1); nextColumn_.conditionalNew(1); lastColumn_.conditionalNew(1); #if 0 collectStatistics_=false; #endif // Below are all to collect ftranCountInput_ = 0.0; ftranCountAfterL_ = 0.0; ftranCountAfterR_ = 0.0; ftranCountAfterU_ = 0.0; btranCountInput_ = 0.0; btranCountAfterU_ = 0.0; btranCountAfterR_ = 0.0; btranCountAfterL_ = 0.0; // We can roll over factorizations numberFtranCounts_ = 0; numberBtranCounts_ = 0; // While these are averages collected over last ftranAverageAfterL_ = 0; ftranAverageAfterR_ = 0; ftranAverageAfterU_ = 0; btranAverageAfterU_ = 0; btranAverageAfterR_ = 0; btranAverageAfterL_ = 0; #ifdef ZEROFAULT startColumnL_.array()[0] = 0; startColumnR_.array()[0] = 0; startRowU_.array()[0] = 0; numberInRow_.array()[0] = 0; nextRow_.array()[0] = 0; lastRow_.array()[0] = 0; pivotRegion_.array()[0] = 0.0; permuteBack_.array()[0] = 0; permute_.array()[0] = 0; pivotColumnBack_.array()[0] = 0; startColumnU_.array()[0] = 0; numberInColumn_.array()[0] = 0; numberInColumnPlus_.array()[0] = 0; pivotColumn_.array()[0] = 0; nextColumn_.array()[0] = 0; lastColumn_.array()[0] = 0; #endif } } //Part of LP int CoinFactorization::factorize( const CoinPackedMatrix &matrix, int rowIsBasic[], int columnIsBasic[], double areaFactor) { // maybe for speed will be better to leave as many regions as possible gutsOfDestructor(); gutsOfInitialize(2); // ? is this correct //if (biasLU_==2) //biasLU_=3; if (areaFactor) areaFactor_ = areaFactor; const int *row = matrix.getIndices(); const CoinBigIndex *columnStart = matrix.getVectorStarts(); const int *columnLength = matrix.getVectorLengths(); const double *element = matrix.getElements(); int numberRows = matrix.getNumRows(); if (!numberRows) return 0; int numberColumns = matrix.getNumCols(); int numberBasic = 0; int numberElements = 0; int numberRowBasic = 0; // compute how much in basis int i; for (i = 0; i < numberRows; i++) { if (rowIsBasic[i] >= 0) numberRowBasic++; } numberBasic = numberRowBasic; for (i = 0; i < numberColumns; i++) { if (columnIsBasic[i] >= 0) { numberBasic++; numberElements += columnLength[i]; } } if (numberBasic > numberRows) { return -2; // say too many in basis } numberElements = 3 * numberBasic + 3 * numberElements + 20000; getAreas(numberRows, numberBasic, numberElements, 2 * numberElements); //fill //copy numberBasic = 0; numberElements = 0; int *indexColumnU = indexColumnU_.array(); int *indexRowU = indexRowU_.array(); CoinFactorizationDouble *elementU = elementU_.array(); for (i = 0; i < numberRows; i++) { if (rowIsBasic[i] >= 0) { indexRowU[numberElements] = i; indexColumnU[numberElements] = numberBasic; elementU[numberElements++] = slackValue_; numberBasic++; } } for (i = 0; i < numberColumns; i++) { if (columnIsBasic[i] >= 0) { CoinBigIndex j; for (j = columnStart[i]; j < columnStart[i] + columnLength[i]; j++) { indexRowU[numberElements] = row[j]; indexColumnU[numberElements] = numberBasic; elementU[numberElements++] = element[j]; } numberBasic++; } } lengthU_ = numberElements; maximumU_ = numberElements; preProcess(0); factor(); numberBasic = 0; if (status_ == 0) { int *permuteBack = permuteBack_.array(); int *back = pivotColumnBack(); for (i = 0; i < numberRows; i++) { if (rowIsBasic[i] >= 0) { rowIsBasic[i] = permuteBack[back[numberBasic++]]; } } for (i = 0; i < numberColumns; i++) { if (columnIsBasic[i] >= 0) { columnIsBasic[i] = permuteBack[back[numberBasic++]]; } } // Set up permutation vector // these arrays start off as copies of permute // (and we could use permute_ instead of pivotColumn (not back though)) CoinMemcpyN(permute_.array(), numberRows_, pivotColumn_.array()); CoinMemcpyN(permuteBack_.array(), numberRows_, pivotColumnBack()); } else if (status_ == -1) { const int *pivotColumn = pivotColumn_.array(); // mark as basic or non basic for (i = 0; i < numberRows_; i++) { if (rowIsBasic[i] >= 0) { if (pivotColumn[numberBasic] >= 0) rowIsBasic[i] = pivotColumn[numberBasic]; else rowIsBasic[i] = -1; numberBasic++; } } for (i = 0; i < numberColumns; i++) { if (columnIsBasic[i] >= 0) { if (pivotColumn[numberBasic] >= 0) columnIsBasic[i] = pivotColumn[numberBasic]; else columnIsBasic[i] = -1; numberBasic++; } } } return status_; } //Given as triplets int CoinFactorization::factorize( int numberOfRows, int numberOfColumns, int numberOfElements, int maximumL, int maximumU, const int indicesRow[], const int indicesColumn[], const double elements[], int permutation[], double areaFactor) { gutsOfDestructor(); gutsOfInitialize(2); if (areaFactor) areaFactor_ = areaFactor; getAreas(numberOfRows, numberOfColumns, maximumL, maximumU); //copy CoinMemcpyN(indicesRow, numberOfElements, indexRowU_.array()); CoinMemcpyN(indicesColumn, numberOfElements, indexColumnU_.array()); int i; CoinFactorizationDouble *elementU = elementU_.array(); for (i = 0; i < numberOfElements; i++) elementU[i] = elements[i]; lengthU_ = numberOfElements; maximumU_ = numberOfElements; preProcess(0); factor(); //say which column is pivoting on which row if (status_ == 0) { int *permuteBack = permuteBack_.array(); int *back = pivotColumnBack(); // permute so slacks on own rows etc for (i = 0; i < numberOfColumns; i++) { permutation[i] = permuteBack[back[i]]; } // Set up permutation vector // these arrays start off as copies of permute // (and we could use permute_ instead of pivotColumn (not back though)) CoinMemcpyN(permute_.array(), numberRows_, pivotColumn_.array()); CoinMemcpyN(permuteBack_.array(), numberRows_, pivotColumnBack()); } else if (status_ == -1) { const int *pivotColumn = pivotColumn_.array(); // mark as basic or non basic for (i = 0; i < numberOfColumns; i++) { if (pivotColumn[i] >= 0) { permutation[i] = pivotColumn[i]; } else { permutation[i] = -1; } } } return status_; } /* Two part version for flexibility This part creates arrays for user to fill. maximumL is guessed maximum size of L part of final factorization, maximumU of U part. These are multiplied by areaFactor which can be computed by user or internally. returns 0 -okay, -99 memory */ int CoinFactorization::factorizePart1(int numberOfRows, int, int numberOfElements, int *indicesRow[], int *indicesColumn[], CoinFactorizationDouble *elements[], double areaFactor) { // maybe for speed will be better to leave as many regions as possible gutsOfDestructor(); gutsOfInitialize(2); if (areaFactor) areaFactor_ = areaFactor; int numberElements = 3 * numberOfRows + 3 * numberOfElements + 20000; getAreas(numberOfRows, numberOfRows, numberElements, 2 * numberElements); // need to trap memory for -99 code *indicesRow = indexRowU_.array(); *indicesColumn = indexColumnU_.array(); *elements = elementU_.array(); lengthU_ = numberOfElements; maximumU_ = numberElements; return 0; } /* This is part two of factorization Arrays belong to factorization and were returned by part 1 If status okay, permutation has pivot rows. If status is singular, then basic variables have +1 and ones thrown out have -COIN_INT_MAX to say thrown out. returns 0 -okay, -1 singular, -99 memory */ int CoinFactorization::factorizePart2(int permutation[], int exactNumberElements) { lengthU_ = exactNumberElements; preProcess(0); factor(); //say which column is pivoting on which row int i; int *permuteBack = permuteBack_.array(); int *back = pivotColumnBack(); // permute so slacks on own rows etc for (i = 0; i < numberColumns_; i++) { permutation[i] = permuteBack[back[i]]; } if (status_ == 0) { // Set up permutation vector // these arrays start off as copies of permute // (and we could use permute_ instead of pivotColumn (not back though)) CoinMemcpyN(permute_.array(), numberRows_, pivotColumn_.array()); CoinMemcpyN(permuteBack_.array(), numberRows_, pivotColumnBack()); } else if (status_ == -1) { const int *pivotColumn = pivotColumn_.array(); // mark as basic or non basic for (i = 0; i < numberColumns_; i++) { if (pivotColumn[i] >= 0) { permutation[i] = pivotColumn[i]; } else { permutation[i] = -1; } } } return status_; } // ~CoinFactorization. Destructor CoinFactorization::~CoinFactorization() { gutsOfDestructor(2); } // show_self. Debug show object void CoinFactorization::show_self() const { int i; const int *pivotColumn = pivotColumn_.array(); for (i = 0; i < numberRows_; i++) { std::cout << "r " << i << " " << pivotColumn[i]; if (pivotColumnBack()) std::cout << " " << pivotColumnBack()[i]; std::cout << " " << permute_.array()[i]; if (permuteBack_.array()) std::cout << " " << permuteBack_.array()[i]; std::cout << " " << pivotRegion_.array()[i]; std::cout << std::endl; } for (i = 0; i < numberRows_; i++) { std::cout << "u " << i << " " << numberInColumn_.array()[i] << std::endl; int j; CoinSort_2(indexRowU_.array() + startColumnU_.array()[i], indexRowU_.array() + startColumnU_.array()[i] + numberInColumn_.array()[i], elementU_.array() + startColumnU_.array()[i]); for (j = startColumnU_.array()[i]; j < startColumnU_.array()[i] + numberInColumn_.array()[i]; j++) { assert(indexRowU_.array()[j] >= 0 && indexRowU_.array()[j] < numberRows_); assert(elementU_.array()[j] > -1.0e50 && elementU_.array()[j] < 1.0e50); std::cout << indexRowU_.array()[j] << " " << elementU_.array()[j] << std::endl; } } for (i = 0; i < numberRows_; i++) { std::cout << "l " << i << " " << startColumnL_.array()[i + 1] - startColumnL_.array()[i] << std::endl; CoinSort_2(indexRowL_.array() + startColumnL_.array()[i], indexRowL_.array() + startColumnL_.array()[i + 1], elementL_.array() + startColumnL_.array()[i]); int j; for (j = startColumnL_.array()[i]; j < startColumnL_.array()[i + 1]; j++) { std::cout << indexRowL_.array()[j] << " " << elementL_.array()[j] << std::endl; } } } // sort so can compare void CoinFactorization::sort() const { int i; for (i = 0; i < numberRows_; i++) { CoinSort_2(indexRowU_.array() + startColumnU_.array()[i], indexRowU_.array() + startColumnU_.array()[i] + numberInColumn_.array()[i], elementU_.array() + startColumnU_.array()[i]); } for (i = 0; i < numberRows_; i++) { CoinSort_2(indexRowL_.array() + startColumnL_.array()[i], indexRowL_.array() + startColumnL_.array()[i + 1], elementL_.array() + startColumnL_.array()[i]); } } // getAreas. Gets space for a factorization //called by constructors void CoinFactorization::getAreas(int numberOfRows, int numberOfColumns, int maximumL, int maximumU) { numberRows_ = numberOfRows; numberColumns_ = numberOfColumns; maximumRowsExtra_ = numberRows_ + maximumPivots_; numberRowsExtra_ = numberRows_; maximumColumnsExtra_ = numberColumns_ + maximumPivots_; numberColumnsExtra_ = numberColumns_; lengthAreaU_ = maximumU; lengthAreaL_ = maximumL; if (!areaFactor_) { areaFactor_ = 1.0; } if (areaFactor_ != 1.0) { if ((messageLevel_ & 16) != 0) printf("Increasing factorization areas by %g\n", areaFactor_); // but keep reasonable if (areaFactor_ * lengthAreaU_ < COIN_INT_MAX) lengthAreaU_ = static_cast< int >(areaFactor_ * lengthAreaU_); else lengthAreaU_ = COIN_INT_MAX; if (areaFactor_ * lengthAreaL_ < COIN_INT_MAX) lengthAreaL_ = static_cast< int >(areaFactor_ * lengthAreaL_); else lengthAreaL_ = COIN_INT_MAX; } int lengthU = lengthAreaU_ + EXTRA_U_SPACE; elementU_.conditionalNew(lengthU); indexRowU_.conditionalNew(lengthU); indexColumnU_.conditionalNew(lengthU); elementL_.conditionalNew(lengthAreaL_); indexRowL_.conditionalNew(lengthAreaL_); if (persistenceFlag_) { // But we can use all we have if bigger int length; length = static_cast< int >(CoinMin(elementU_.getSize(), indexRowU_.getSize())) - lengthU; if (length > lengthAreaU_) { lengthAreaU_ = length; assert(indexColumnU_.getSize() == indexRowU_.getSize()); } length = static_cast< int >(CoinMin(elementL_.getSize(), indexRowL_.getSize())); if (length > lengthAreaL_) { lengthAreaL_ = length; } } startColumnL_.conditionalNew(numberRows_ + 1); startColumnL_.array()[0] = 0; startRowU_.conditionalNew(maximumRowsExtra_ + 1); // make sure this is valid startRowU_.array()[maximumRowsExtra_] = 0; numberInRow_.conditionalNew(maximumRowsExtra_ + 1); markRow_.conditionalNew(numberRows_); pivotRowL_.conditionalNew(numberRows_ + 1); nextRow_.conditionalNew(maximumRowsExtra_ + 1); lastRow_.conditionalNew(maximumRowsExtra_ + 1); permute_.conditionalNew(maximumRowsExtra_ + 1); pivotRegion_.conditionalNew(maximumRowsExtra_ + 1); #ifdef ZEROFAULT memset(elementU_.array(), 'a', lengthAreaU_ * sizeof(CoinFactorizationDouble)); memset(indexRowU_.array(), 'b', lengthAreaU_ * sizeof(int)); memset(indexColumnU_.array(), 'c', lengthAreaU_ * sizeof(int)); memset(elementL_.array(), 'd', lengthAreaL_ * sizeof(CoinFactorizationDouble)); memset(indexRowL_.array(), 'e', lengthAreaL_ * sizeof(int)); memset(startColumnL_.array() + 1, 'f', numberRows_ * sizeof(int)); memset(startRowU_.array(), 'g', maximumRowsExtra_ * sizeof(int)); memset(numberInRow_.array(), 'h', (maximumRowsExtra_ + 1) * sizeof(int)); memset(markRow_.array(), 'i', numberRows_ * sizeof(int)); memset(pivotRowL_.array(), 'j', (numberRows_ + 1) * sizeof(int)); memset(nextRow_.array(), 'k', (maximumRowsExtra_ + 1) * sizeof(int)); memset(lastRow_.array(), 'l', (maximumRowsExtra_ + 1) * sizeof(int)); memset(permute_.array(), 'l', (maximumRowsExtra_ + 1) * sizeof(int)); memset(pivotRegion_.array(), 'm', (maximumRowsExtra_ + 1) * sizeof(CoinFactorizationDouble)); #endif startColumnU_.conditionalNew(maximumColumnsExtra_ + 1); numberInColumn_.conditionalNew(maximumColumnsExtra_ + 1); numberInColumnPlus_.conditionalNew(maximumColumnsExtra_ + 1); pivotColumn_.conditionalNew(maximumColumnsExtra_ + 1); nextColumn_.conditionalNew(maximumColumnsExtra_ + 1); lastColumn_.conditionalNew(maximumColumnsExtra_ + 1); saveColumn_.conditionalNew(numberColumns_); #ifdef ZEROFAULT memset(startColumnU_.array(), 'a', (maximumColumnsExtra_ + 1) * sizeof(int)); memset(numberInColumn_.array(), 'b', (maximumColumnsExtra_ + 1) * sizeof(int)); memset(numberInColumnPlus_.array(), 'c', (maximumColumnsExtra_ + 1) * sizeof(int)); memset(pivotColumn_.array(), 'd', (maximumColumnsExtra_ + 1) * sizeof(int)); memset(nextColumn_.array(), 'e', (maximumColumnsExtra_ + 1) * sizeof(int)); memset(lastColumn_.array(), 'f', (maximumColumnsExtra_ + 1) * sizeof(int)); #endif if (numberRows_ + numberColumns_) { if (numberRows_ > numberColumns_) { biggerDimension_ = numberRows_; } else { biggerDimension_ = numberColumns_; } firstCount_.conditionalNew(CoinMax(biggerDimension_ + 2, maximumRowsExtra_ + 1)); nextCount_.conditionalNew(numberRows_ + numberColumns_); lastCount_.conditionalNew(numberRows_ + numberColumns_); #ifdef ZEROFAULT memset(firstCount_.array(), 'g', (biggerDimension_ + 2) * sizeof(int)); memset(nextCount_.array(), 'h', (numberRows_ + numberColumns_) * sizeof(int)); memset(lastCount_.array(), 'i', (numberRows_ + numberColumns_) * sizeof(int)); #endif } else { firstCount_.conditionalNew(2); nextCount_.conditionalNew(0); lastCount_.conditionalNew(0); #ifdef ZEROFAULT memset(firstCount_.array(), 'g', 2 * sizeof(int)); #endif biggerDimension_ = 0; } } // preProcess. PreProcesses raw triplet data //state is 0 - triplets, 1 - some counts etc , 2 - .. void CoinFactorization::preProcess(int state, int) { int *indexRow = indexRowU_.array(); int *indexColumn = indexColumnU_.array(); CoinFactorizationDouble *element = elementU_.array(); int numberElements = lengthU_; int *numberInRow = numberInRow_.array(); int *numberInColumn = numberInColumn_.array(); int *numberInColumnPlus = numberInColumnPlus_.array(); int *startRow = startRowU_.array(); int *startColumn = startColumnU_.array(); int numberRows = numberRows_; int numberColumns = numberColumns_; if (state < 4) totalElements_ = numberElements; //state falls through to next state switch (state) { case 0: //counts { CoinZeroN(numberInRow, numberRows + 1); CoinZeroN(numberInColumn, maximumColumnsExtra_ + 1); int i; for (i = 0; i < numberElements; i++) { int iRow = indexRow[i]; int iColumn = indexColumn[i]; numberInRow[iRow]++; numberInColumn[iColumn]++; } } case -1: //sort case 1: //sort { int i, k; i = 0; int iColumn; for (iColumn = 0; iColumn < numberColumns; iColumn++) { //position after end of Column i += numberInColumn[iColumn]; startColumn[iColumn] = i; } for (k = numberElements - 1; k >= 0; k--) { int iColumn = indexColumn[k]; if (iColumn >= 0) { CoinFactorizationDouble value = element[k]; int iRow = indexRow[k]; indexColumn[k] = -1; while (true) { int iLook = startColumn[iColumn] - 1; startColumn[iColumn] = iLook; CoinFactorizationDouble valueSave = element[iLook]; int iColumnSave = indexColumn[iLook]; int iRowSave = indexRow[iLook]; element[iLook] = value; indexRow[iLook] = iRow; indexColumn[iLook] = -1; if (iColumnSave >= 0) { iColumn = iColumnSave; value = valueSave; iRow = iRowSave; } else { break; } } /* endwhile */ } } } case 2: //move largest in column to beginning //and do row part { int i, k; i = 0; int iRow; for (iRow = 0; iRow < numberRows; iRow++) { startRow[iRow] = i; i += numberInRow[iRow]; } CoinZeroN(numberInRow, numberRows); int iColumn; for (iColumn = 0; iColumn < numberColumns; iColumn++) { int number = numberInColumn[iColumn]; if (number) { int first = startColumn[iColumn]; int largest = first; int iRowSave = indexRow[first]; CoinFactorizationDouble valueSave = element[first]; double valueLargest = fabs(valueSave); int iLook = numberInRow[iRowSave]; numberInRow[iRowSave] = iLook + 1; indexColumn[startRow[iRowSave] + iLook] = iColumn; for (k = first + 1; k < first + number; k++) { int iRow = indexRow[k]; int iLook = numberInRow[iRow]; numberInRow[iRow] = iLook + 1; indexColumn[startRow[iRow] + iLook] = iColumn; CoinFactorizationDouble value = element[k]; double valueAbs = fabs(value); if (valueAbs > valueLargest) { valueLargest = valueAbs; largest = k; } } indexRow[first] = indexRow[largest]; element[first] = element[largest]; indexRow[largest] = iRowSave; element[largest] = valueSave; } } } case 3: //links and initialize pivots { int *lastRow = lastRow_.array(); int *nextRow = nextRow_.array(); int *lastColumn = lastColumn_.array(); int *nextColumn = nextColumn_.array(); CoinFillN(firstCount_.array(), biggerDimension_ + 2, -1); CoinFillN(pivotColumn_.array(), numberColumns_, -1); CoinZeroN(numberInColumnPlus, maximumColumnsExtra_ + 1); int iRow; for (iRow = 0; iRow < numberRows; iRow++) { lastRow[iRow] = iRow - 1; nextRow[iRow] = iRow + 1; int number = numberInRow[iRow]; addLink(iRow, number); } lastRow[maximumRowsExtra_] = numberRows - 1; nextRow[maximumRowsExtra_] = 0; lastRow[0] = maximumRowsExtra_; nextRow[numberRows - 1] = maximumRowsExtra_; startRow[maximumRowsExtra_] = numberElements; int iColumn; for (iColumn = 0; iColumn < numberColumns; iColumn++) { lastColumn[iColumn] = iColumn - 1; nextColumn[iColumn] = iColumn + 1; int number = numberInColumn[iColumn]; addLink(iColumn + numberRows, number); } lastColumn[maximumColumnsExtra_] = numberColumns - 1; nextColumn[maximumColumnsExtra_] = 0; lastColumn[0] = maximumColumnsExtra_; if (numberColumns) nextColumn[numberColumns - 1] = maximumColumnsExtra_; startColumn[maximumColumnsExtra_] = numberElements; } break; case 4: //move largest in column to beginning { int i, k; CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); int iColumn; int iRow; for (iRow = 0; iRow < numberRows; iRow++) { if (numberInRow[iRow] >= 0) { // zero count numberInRow[iRow] = 0; } else { // empty //numberInRow[iRow]=-1; already that } } //CoinZeroN ( numberInColumnPlus, maximumColumnsExtra_ + 1 ); for (iColumn = 0; iColumn < numberColumns; iColumn++) { int number = numberInColumn[iColumn]; if (number) { // use pivotRegion and startRow for remaining elements int first = startColumn[iColumn]; int largest = -1; double valueLargest = -1.0; int nOther = 0; k = first; int end = first + number; for (; k < end; k++) { int iRow = indexRow[k]; assert(iRow < numberRows_); CoinFactorizationDouble value = element[k]; if (numberInRow[iRow] >= 0) { numberInRow[iRow]++; double valueAbs = fabs(value); if (valueAbs > valueLargest) { valueLargest = valueAbs; largest = nOther; } startRow[nOther] = iRow; pivotRegion[nOther++] = value; } else { indexRow[first] = iRow; element[first++] = value; } } numberInColumnPlus[iColumn] = first - startColumn[iColumn]; startColumn[iColumn] = first; //largest if (largest >= 0) { indexRow[first] = startRow[largest]; element[first++] = pivotRegion[largest]; } for (k = 0; k < nOther; k++) { if (k != largest) { indexRow[first] = startRow[k]; element[first++] = pivotRegion[k]; } } numberInColumn[iColumn] = first - startColumn[iColumn]; } } //and do row part i = 0; for (iRow = 0; iRow < numberRows; iRow++) { startRow[iRow] = i; int n = numberInRow[iRow]; if (n > 0) { numberInRow[iRow] = 0; i += n; } } for (iColumn = 0; iColumn < numberColumns; iColumn++) { int number = numberInColumn[iColumn]; if (number) { int first = startColumn[iColumn]; for (k = first; k < first + number; k++) { int iRow = indexRow[k]; int iLook = numberInRow[iRow]; numberInRow[iRow] = iLook + 1; indexColumn[startRow[iRow] + iLook] = iColumn; } } } } // modified 3 { //set markRow so no rows updated //CoinFillN ( markRow_.array(), numberRows_, -1 ); int *lastColumn = lastColumn_.array(); int *nextColumn = nextColumn_.array(); CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); int iRow; int numberGood = 0; startColumnL_.array()[0] = 0; //for luck for (iRow = 0; iRow < numberRows; iRow++) { int number = numberInRow[iRow]; if (number < 0) { numberInRow[iRow] = 0; pivotRegion[numberGood++] = slackValue_; } } int iColumn; for (iColumn = 0; iColumn < numberColumns_; iColumn++) { lastColumn[iColumn] = iColumn - 1; nextColumn[iColumn] = iColumn + 1; int number = numberInColumn[iColumn]; deleteLink(iColumn + numberRows); addLink(iColumn + numberRows, number); } lastColumn[maximumColumnsExtra_] = numberColumns - 1; nextColumn[maximumColumnsExtra_] = 0; lastColumn[0] = maximumColumnsExtra_; if (numberColumns) nextColumn[numberColumns - 1] = maximumColumnsExtra_; startColumn[maximumColumnsExtra_] = numberElements; } } /* endswitch */ } #ifdef CLP_FACTORIZATION_INSTRUMENT double externalTimeStart = 0.0; double timeInFactorize = 0.0; double timeInUpdate = 0.0; double timeInFactorizeFake = 0.0; double timeInUpdateFake1 = 0.0; double timeInUpdateFake2 = 0.0; double timeInUpdateTranspose = 0.0; double timeInUpdateFT = 0.0; double timeInUpdateTwoFT = 0.0; double timeInReplace = 0.0; double averageLengthR = 0.0; double averageLengthL = 0.0; double averageLengthU = 0.0; double scaledLengthDense = 0.0; double scaledLengthDenseSquared = 0.0; double scaledLengthL = 0.0; double scaledLengthR = 0.0; double scaledLengthU = 0.0; int numberUpdate = 1; int numberUpdateTranspose = 0; int numberUpdateFT = 0; int numberUpdateTwoFT = 0; int numberReplace = 0; int numberAdded = 0; int currentLengthR = 0; int currentLengthU = 0; int currentTakeoutU = 0; int startLengthU = 0; int endLengthU = 0; int endLengthU2 = 0; #endif //Does most of factorization int CoinFactorization::factor() { #ifdef CLP_FACTORIZATION_INSTRUMENT int nUse = numberUpdate + numberUpdateTranspose + numberUpdateFT + 2 * numberUpdateTwoFT + numberReplace; double dUse = timeInUpdate + timeInUpdateTranspose + timeInUpdateFT + timeInUpdateTwoFT + timeInReplace; printf("%.18g time in factorization, using %.18g (%d) -average %.18g\n", timeInFactorize, dUse, nUse, dUse / static_cast< double >(nUse)); //collectStatistics_=true; int *startColumnU = startColumnU_.array(); int numberSlacksX = 0; for (int i = 0; i < numberRows_; i++) { if (startColumnU[i + 1] != startColumnU[i] + 1) break; numberSlacksX++; } int numberInUX = startColumnU[numberRows_]; printf("numberCompressions %d ftranInput %g ftranAfterL %g \ ftranAfterR %g ftranAfterU %g btranInput %g \ btranAfterU %g btranAfterR %g btranAfterL %g \ numberFtrans %d numberBtrans %d ftranAvAfterL %g \ ftranAvAfterR %g ftranAvAfterU %g btranAvAfterU %g \ btranAvAfterR %g btranAvAfterL %g\n", numberCompressions_, ftranCountInput_, ftranCountAfterL_, ftranCountAfterR_, ftranCountAfterU_, btranCountInput_, btranCountAfterU_, btranCountAfterR_, btranCountAfterL_, numberFtranCounts_, numberBtranCounts_, ftranAverageAfterL_, ftranAverageAfterR_, ftranAverageAfterU_, btranAverageAfterU_, btranAverageAfterR_, btranAverageAfterL_); printf("lengthRend %d lengthUend %d takeoutU %d\n", currentLengthR, currentLengthU, currentTakeoutU); double timeStart = externalTimeStart; timeInFactorize = 0.0; timeInUpdate = 0.0; timeInUpdateTranspose = 0.0; timeInUpdateFT = 0.0; timeInUpdateTwoFT = 0.0; timeInReplace = 0.0; numberUpdate = 1; numberUpdateTranspose = 0; numberUpdateFT = 0; numberUpdateTwoFT = 0; numberReplace = 0; numberAdded = 0; currentLengthR = 0; currentLengthU = 0; currentTakeoutU = 0; #endif int *lastColumn = lastColumn_.array(); int *lastRow = lastRow_.array(); //sparse status_ = factorSparse(); switch (status_) { case 0: //finished totalElements_ = 0; { int *pivotColumn = pivotColumn_.array(); if (numberGoodU_ < numberRows_) { int i, k; // Clean out unset nextRow int *nextRow = nextRow_.array(); //int nSing =0; k = nextRow[maximumRowsExtra_]; while (k != maximumRowsExtra_ && k >= 0) { int iRow = k; k = nextRow[k]; //nSing++; nextRow[iRow] = -1; } //assert (nSing); //printf("%d singularities - good %d rows %d\n",nSing, // numberGoodU_,numberRows_); // Now nextRow has -1 or sequence into numberGoodU_; int *permuteA = permute_.array(); for (i = 0; i < numberRows_; i++) { int iGood = nextRow[i]; if (iGood >= 0) permuteA[iGood] = i; } // swap arrays permute_.swap(nextRow_); int *permute = permute_.array(); for (i = 0; i < numberRows_; i++) { lastRow[i] = -1; } for (i = 0; i < numberColumns_; i++) { lastColumn[i] = -1; } for (i = 0; i < numberGoodU_; i++) { int goodRow = permuteA[i]; //valid pivot row int goodColumn = pivotColumn[i]; lastRow[goodRow] = goodColumn; //will now have -1 or column sequence lastColumn[goodColumn] = goodRow; //will now have -1 or row sequence } nextRow_.conditionalDelete(); k = 0; //copy back and count for (i = 0; i < numberRows_; i++) { permute[i] = lastRow[i]; if (permute[i] < 0) { //std::cout << i << " " < 10) { areaFactor_ *= 1.1; } numberCompressions_ = 0; cleanup(); } #ifdef CLP_FACTORIZATION_INSTRUMENT timeInFactorize = CoinCpuTime() - timeStart; printf("%d slacks, startU %d, endL %d, endU %d + %d dense (squared)\n", numberSlacksX, numberInUX, lengthL_, lengthU_, numberDense_ * numberDense_); currentLengthR = 0; // remember pivots not included in counts endLengthU = totalElements_ - numberDense_ * numberDense_ - lengthL_; endLengthU2 = lengthU_; currentLengthU = lengthU_; currentTakeoutU = 0; #endif return status_; } // pivotRowSingleton. Does one pivot on Row Singleton in factorization bool CoinFactorization::pivotRowSingleton(int pivotRow, int pivotColumn) { //store pivot columns (so can easily compress) int *startColumnU = startColumnU_.array(); int startColumn = startColumnU[pivotColumn]; int *numberInRow = numberInRow_.array(); int *numberInColumn = numberInColumn_.array(); int numberDoColumn = numberInColumn[pivotColumn] - 1; int endColumn = startColumn + numberDoColumn + 1; int pivotRowPosition = startColumn; int *indexRowU = indexRowU_.array(); int iRow = indexRowU[pivotRowPosition]; int *startRowU = startRowU_.array(); int *nextRow = nextRow_.array(); int *lastRow = lastRow_.array(); while (iRow != pivotRow) { pivotRowPosition++; iRow = indexRowU[pivotRowPosition]; } /* endwhile */ assert(pivotRowPosition < endColumn); //store column in L, compress in U and take column out int l = lengthL_; if (l + numberDoColumn > lengthAreaL_) { //need more memory if ((messageLevel_ & 4) != 0) std::cout << "more memory needed in middle of invert" << std::endl; return false; } int *startColumnL = startColumnL_.array(); CoinFactorizationDouble *elementL = elementL_.array(); int *indexRowL = indexRowL_.array(); startColumnL[numberGoodL_] = l; //for luck and first time numberGoodL_++; startColumnL[numberGoodL_] = l + numberDoColumn; lengthL_ += numberDoColumn; CoinFactorizationDouble *elementU = elementU_.array(); CoinFactorizationDouble pivotElement = elementU[pivotRowPosition]; CoinFactorizationDouble pivotMultiplier = 1.0 / pivotElement; pivotRegion_.array()[numberGoodU_] = pivotMultiplier; int i; int *indexColumnU = indexColumnU_.array(); for (i = startColumn; i < pivotRowPosition; i++) { int iRow = indexRowU[i]; indexRowL[l] = iRow; elementL[l] = elementU[i] * pivotMultiplier; l++; //take out of row list int start = startRowU[iRow]; int iNumberInRow = numberInRow[iRow]; int end = start + iNumberInRow; int where = start; while (indexColumnU[where] != pivotColumn) { where++; } /* endwhile */ assert(where < end); indexColumnU[where] = indexColumnU[end - 1]; iNumberInRow--; numberInRow[iRow] = iNumberInRow; deleteLink(iRow); addLink(iRow, iNumberInRow); } for (i = pivotRowPosition + 1; i < endColumn; i++) { int iRow = indexRowU[i]; indexRowL[l] = iRow; elementL[l] = elementU[i] * pivotMultiplier; l++; //take out of row list int start = startRowU[iRow]; int iNumberInRow = numberInRow[iRow]; int end = start + iNumberInRow; int where = start; while (indexColumnU[where] != pivotColumn) { where++; } /* endwhile */ assert(where < end); indexColumnU[where] = indexColumnU[end - 1]; iNumberInRow--; numberInRow[iRow] = iNumberInRow; deleteLink(iRow); addLink(iRow, iNumberInRow); } numberInColumn[pivotColumn] = 0; //modify linked list for pivots numberInRow[pivotRow] = 0; deleteLink(pivotRow); deleteLink(pivotColumn + numberRows_); //take out this bit of indexColumnU int next = nextRow[pivotRow]; int last = lastRow[pivotRow]; nextRow[last] = next; lastRow[next] = last; lastRow[pivotRow] = -2; nextRow[pivotRow] = numberGoodU_; //use for permute return true; } // pivotColumnSingleton. Does one pivot on Column Singleton in factorization bool CoinFactorization::pivotColumnSingleton(int pivotRow, int pivotColumn) { int *numberInRow = numberInRow_.array(); int *numberInColumn = numberInColumn_.array(); int *numberInColumnPlus = numberInColumnPlus_.array(); //store pivot columns (so can easily compress) int numberDoRow = numberInRow[pivotRow] - 1; int *startColumnU = startColumnU_.array(); int startColumn = startColumnU[pivotColumn]; int put = 0; int *startRowU = startRowU_.array(); int startRow = startRowU[pivotRow]; int endRow = startRow + numberDoRow + 1; int *indexColumnU = indexColumnU_.array(); int *indexRowU = indexRowU_.array(); int *saveColumn = saveColumn_.array(); int i; for (i = startRow; i < endRow; i++) { int iColumn = indexColumnU[i]; if (iColumn != pivotColumn) { saveColumn[put++] = iColumn; } } int *nextRow = nextRow_.array(); int *lastRow = lastRow_.array(); //take out this bit of indexColumnU int next = nextRow[pivotRow]; int last = lastRow[pivotRow]; nextRow[last] = next; lastRow[next] = last; nextRow[pivotRow] = numberGoodU_; //use for permute lastRow[pivotRow] = -2; //mark //clean up counts CoinFactorizationDouble *elementU = elementU_.array(); CoinFactorizationDouble pivotElement = elementU[startColumn]; pivotRegion_.array()[numberGoodU_] = 1.0 / pivotElement; numberInColumn[pivotColumn] = 0; //totalElements_ --; //numberInColumnPlus[pivotColumn]++; //move pivot row in other columns to safe zone for (i = 0; i < numberDoRow; i++) { int iColumn = saveColumn[i]; if (numberInColumn[iColumn]) { int number = numberInColumn[iColumn] - 1; //modify linked list deleteLink(iColumn + numberRows_); addLink(iColumn + numberRows_, number); //move pivot row element if (number) { int start = startColumnU[iColumn]; int pivot = start; int iRow = indexRowU[pivot]; while (iRow != pivotRow) { pivot++; iRow = indexRowU[pivot]; } assert(pivot < startColumnU[iColumn] + numberInColumn[iColumn]); if (pivot != start) { //move largest one up CoinFactorizationDouble value = elementU[start]; iRow = indexRowU[start]; elementU[start] = elementU[pivot]; indexRowU[start] = indexRowU[pivot]; elementU[pivot] = elementU[start + 1]; indexRowU[pivot] = indexRowU[start + 1]; elementU[start + 1] = value; indexRowU[start + 1] = iRow; } else { //find new largest element int iRowSave = indexRowU[start + 1]; CoinFactorizationDouble valueSave = elementU[start + 1]; double valueLargest = fabs(valueSave); int end = start + numberInColumn[iColumn]; int largest = start + 1; int k; for (k = start + 2; k < end; k++) { CoinFactorizationDouble value = elementU[k]; double valueAbs = fabs(value); if (valueAbs > valueLargest) { valueLargest = valueAbs; largest = k; } } indexRowU[start + 1] = indexRowU[largest]; elementU[start + 1] = elementU[largest]; indexRowU[largest] = iRowSave; elementU[largest] = valueSave; } } //clean up counts numberInColumn[iColumn]--; numberInColumnPlus[iColumn]++; startColumnU[iColumn]++; //totalElements_--; } } //modify linked list for pivots deleteLink(pivotRow); deleteLink(pivotColumn + numberRows_); numberInRow[pivotRow] = 0; //put in dummy pivot in L int l = lengthL_; int *startColumnL = startColumnL_.array(); startColumnL[numberGoodL_] = l; //for luck and first time numberGoodL_++; startColumnL[numberGoodL_] = l; return true; } // getColumnSpace. Gets space for one Column with given length //may have to do compression (returns true) //also moves existing vector bool CoinFactorization::getColumnSpace(int iColumn, int extraNeeded) { int *numberInColumn = numberInColumn_.array(); int *numberInColumnPlus = numberInColumnPlus_.array(); int *nextColumn = nextColumn_.array(); int *lastColumn = lastColumn_.array(); int number = numberInColumnPlus[iColumn] + numberInColumn[iColumn]; int *startColumnU = startColumnU_.array(); int space = lengthAreaU_ - startColumnU[maximumColumnsExtra_]; CoinFactorizationDouble *elementU = elementU_.array(); int *indexRowU = indexRowU_.array(); if (space < extraNeeded + number + 4) { //compression int iColumn = nextColumn[maximumColumnsExtra_]; int put = 0; while (iColumn != maximumColumnsExtra_) { //move int get; int getEnd; if (startColumnU[iColumn] >= 0) { get = startColumnU[iColumn] - numberInColumnPlus[iColumn]; getEnd = startColumnU[iColumn] + numberInColumn[iColumn]; startColumnU[iColumn] = put + numberInColumnPlus[iColumn]; } else { get = -startColumnU[iColumn]; getEnd = get + numberInColumn[iColumn]; startColumnU[iColumn] = -put; } int i; for (i = get; i < getEnd; i++) { indexRowU[put] = indexRowU[i]; elementU[put] = elementU[i]; put++; } iColumn = nextColumn[iColumn]; } /* endwhile */ numberCompressions_++; startColumnU[maximumColumnsExtra_] = put; space = lengthAreaU_ - put; if (extraNeeded == COIN_INT_MAX >> 1) { return true; } if (space < extraNeeded + number + 2) { //need more space //if we can allocate bigger then do so and copy //if not then return so code can start again status_ = -99; return false; } } int put = startColumnU[maximumColumnsExtra_]; int next = nextColumn[iColumn]; int last = lastColumn[iColumn]; if (extraNeeded || next != maximumColumnsExtra_) { //out nextColumn[last] = next; lastColumn[next] = last; //in at end last = lastColumn[maximumColumnsExtra_]; nextColumn[last] = iColumn; lastColumn[maximumColumnsExtra_] = iColumn; lastColumn[iColumn] = last; nextColumn[iColumn] = maximumColumnsExtra_; //move int get = startColumnU[iColumn] - numberInColumnPlus[iColumn]; startColumnU[iColumn] = put + numberInColumnPlus[iColumn]; if (number < 50) { int *indexRow = indexRowU; CoinFactorizationDouble *element = elementU; int i = 0; if ((number & 1) != 0) { element[put] = element[get]; indexRow[put] = indexRow[get]; i = 1; } for (; i < number; i += 2) { CoinFactorizationDouble value0 = element[get + i]; CoinFactorizationDouble value1 = element[get + i + 1]; int index0 = indexRow[get + i]; int index1 = indexRow[get + i + 1]; element[put + i] = value0; element[put + i + 1] = value1; indexRow[put + i] = index0; indexRow[put + i + 1] = index1; } } else { CoinMemcpyN(&indexRowU[get], number, &indexRowU[put]); CoinMemcpyN(&elementU[get], number, &elementU[put]); } put += number; get += number; //add 2 for luck startColumnU[maximumColumnsExtra_] = put + extraNeeded + 2; if (startColumnU[maximumColumnsExtra_] > lengthAreaU_) { // get more memory #ifdef CLP_DEVELOP printf("put %d, needed %d, start %d, length %d\n", put, extraNeeded, startColumnU[maximumColumnsExtra_], lengthAreaU_); #endif return false; } } else { //take off space startColumnU[maximumColumnsExtra_] = startColumnU[last] + numberInColumn[last]; } return true; } // getRowSpace. Gets space for one Row with given length //may have to do compression (returns true) //also moves existing vector bool CoinFactorization::getRowSpace(int iRow, int extraNeeded) { int *numberInRow = numberInRow_.array(); int number = numberInRow[iRow]; int *startRowU = startRowU_.array(); int space = lengthAreaU_ - startRowU[maximumRowsExtra_]; int *nextRow = nextRow_.array(); int *lastRow = lastRow_.array(); int *indexColumnU = indexColumnU_.array(); if (space < extraNeeded + number + 2) { //compression int iRow = nextRow[maximumRowsExtra_]; int put = 0; while (iRow != maximumRowsExtra_) { //move int get = startRowU[iRow]; int getEnd = startRowU[iRow] + numberInRow[iRow]; startRowU[iRow] = put; int i; for (i = get; i < getEnd; i++) { indexColumnU[put] = indexColumnU[i]; put++; } iRow = nextRow[iRow]; } /* endwhile */ numberCompressions_++; startRowU[maximumRowsExtra_] = put; space = lengthAreaU_ - put; if (space < extraNeeded + number + 2) { //need more space //if we can allocate bigger then do so and copy //if not then return so code can start again status_ = -99; return false; ; } } int put = startRowU[maximumRowsExtra_]; int next = nextRow[iRow]; int last = lastRow[iRow]; //out nextRow[last] = next; lastRow[next] = last; //in at end last = lastRow[maximumRowsExtra_]; nextRow[last] = iRow; lastRow[maximumRowsExtra_] = iRow; lastRow[iRow] = last; nextRow[iRow] = maximumRowsExtra_; //move int get = startRowU[iRow]; startRowU[iRow] = put; while (number) { number--; indexColumnU[put] = indexColumnU[get]; put++; get++; } /* endwhile */ //add 4 for luck startRowU[maximumRowsExtra_] = put + extraNeeded + 4; return true; } #if COIN_ONE_ETA_COPY /* Reorders U so contiguous and in order (if there is space) Returns true if it could */ bool CoinFactorization::reorderU() { #if 1 return false; #else if (numberRows_ != numberColumns_) return false; int *startColumnU = startColumnU_.array(); int *numberInColumn = numberInColumn_.array(); int *numberInColumnPlus = numberInColumnPlus_.array(); int iColumn; int put = 0; for (iColumn = 0; iColumn < numberRows_; iColumn++) put += numberInColumnPlus[iColumn]; int space = lengthAreaU_ - startColumnU[maximumColumnsExtra_]; if (space < put) { //printf("Space %d out of %d - needed %d\n", // space,lengthAreaU_,put); return false; } int *indexRowU = indexRowU_.array(); CoinFactorizationDouble *elementU = elementU_.array(); int *pivotColumn = pivotColumn_.array(); put = startColumnU[maximumColumnsExtra_]; for (int jColumn = 0; jColumn < numberRows_; jColumn++) { iColumn = pivotColumn[jColumn]; int n = numberInColumnPlus[iColumn]; int getEnd = startColumnU[iColumn]; int get = getEnd - n; startColumnU[iColumn] = put; numberInColumn[jColumn] = n; int i; for (i = get; i < getEnd; i++) { indexRowU[put] = indexRowU[i]; elementU[put] = elementU[i]; put++; } } // and pack down put = 0; for (int jColumn = 0; jColumn < numberRows_; jColumn++) { iColumn = pivotColumn[jColumn]; int n = numberInColumn[jColumn]; int get = startColumnU[iColumn]; int getEnd = get + n; int i; for (i = get; i < getEnd; i++) { indexRowU[put] = indexRowU[i]; elementU[put] = elementU[i]; put++; } } put = 0; for (iColumn = 0; iColumn < numberRows_; iColumn++) { int n = numberInColumn[iColumn]; startColumnU[iColumn] = put; put += n; //numberInColumnPlus[iColumn]=n; //numberInColumn[iColumn]=0; // necessary? //pivotColumn[iColumn]=iColumn; } #if 0 // reset nextColumn - probably not necessary int * nextColumn = nextColumn_.array(); nextColumn[maximumColumnsExtra_]=0; nextColumn[numberRows_-1] = maximumColumnsExtra_; for (iColumn=0;iColumn> 1); //compress // swap arrays numberInColumn_.swap(numberInColumnPlus_); } #else getColumnSpace(0, COIN_INT_MAX >> 1); //compress // swap arrays numberInColumn_.swap(numberInColumnPlus_); #endif int *startColumnU = startColumnU_.array(); int lastU = startColumnU[maximumColumnsExtra_]; //free some memory here saveColumn_.conditionalDelete(); markRow_.conditionalDelete(); //firstCount_.conditionalDelete() ; nextCount_.conditionalDelete(); lastCount_.conditionalDelete(); int *numberInRow = numberInRow_.array(); int *numberInColumn = numberInColumn_.array(); int *numberInColumnPlus = numberInColumnPlus_.array(); //make column starts OK //for best cache behavior get in order (last pivot at bottom of space) //that will need thinking about //use nextRow for permutation (as that is what it is) int i; #ifndef NDEBUG { if (numberGoodU_ < numberRows_) abort(); char *mark = new char[numberRows_]; memset(mark, 0, numberRows_); int *array; array = nextRow_.array(); for (i = 0; i < numberRows_; i++) { int k = array[i]; if (k < 0 || k >= numberRows_) printf("Bad a %d %d\n", i, k); assert(k >= 0 && k < numberRows_); if (mark[k] == 1) printf("Bad a %d %d\n", i, k); mark[k] = 1; } for (i = 0; i < numberRows_; i++) { assert(mark[i] == 1); if (mark[i] != 1) printf("Bad b %d\n", i); } delete[] mark; } #endif // swap arrays permute_.swap(nextRow_); //safety feature int *permute = permute_.array(); permute[numberRows_] = 0; permuteBack_.conditionalNew(maximumRowsExtra_ + 1); int *permuteBack = permuteBack_.array(); #ifdef ZEROFAULT memset(permuteBack_.array(), 'w', (maximumRowsExtra_ + 1) * sizeof(int)); #endif for (i = 0; i < numberRows_; i++) { int iRow = permute[i]; permuteBack[iRow] = i; } //redo nextRow_ #ifndef NDEBUG for (i = 0; i < numberRows_; i++) { assert(permute[i] >= 0 && permute[i] < numberRows_); assert(permuteBack[i] >= 0 && permuteBack[i] < numberRows_); } #endif #if COIN_ONE_ETA_COPY if (!compressDone) { #endif // Redo total elements totalElements_ = 0; for (i = 0; i < numberColumns_; i++) { int number = numberInColumn[i]; totalElements_ += number; startColumnU[i] -= number; } #if COIN_ONE_ETA_COPY } #endif int numberU = 0; pivotColumnBack_.conditionalNew(maximumRowsExtra_ + 1); #ifdef ZEROFAULT memset(pivotColumnBack(), 'q', (maximumRowsExtra_ + 1) * sizeof(int)); #endif const int *pivotColumn = pivotColumn_.array(); int *pivotColumnB = pivotColumnBack(); int *indexColumnU = indexColumnU_.array(); int *startColumn = startColumnU; int *indexRowU = indexRowU_.array(); CoinFactorizationDouble *elementU = elementU_.array(); #if COIN_ONE_ETA_COPY if (!compressDone) { #endif for (i = 0; i < numberColumns_; i++) { int iColumn = pivotColumn[i]; pivotColumnB[iColumn] = i; if (iColumn >= 0) { //wanted if (numberU != iColumn) { numberInColumnPlus[iColumn] = numberU; } else { numberInColumnPlus[iColumn] = -1; //already in correct place } numberU++; } } for (i = 0; i < numberColumns_; i++) { int number = numberInColumn[i]; //always 0? int where = numberInColumnPlus[i]; numberInColumnPlus[i] = -1; int start = startColumnU[i]; while (where >= 0) { //put where it should be int numberNext = numberInColumn[where]; //always 0? int whereNext = numberInColumnPlus[where]; int startNext = startColumnU[where]; numberInColumn[where] = number; numberInColumnPlus[where] = -1; startColumnU[where] = start; number = numberNext; where = whereNext; start = startNext; } /* endwhile */ } //sort - using indexColumn CoinFillN(indexColumnU_.array(), lastU, -1); int k = 0; for (i = numberSlacks_; i < numberRows_; i++) { int start = startColumn[i]; int end = start + numberInColumn[i]; int j; for (j = start; j < end; j++) { indexColumnU[j] = k++; } } for (i = numberSlacks_; i < numberRows_; i++) { int start = startColumn[i]; int end = start + numberInColumn[i]; int j; for (j = start; j < end; j++) { int k = indexColumnU[j]; int iRow = indexRowU[j]; CoinFactorizationDouble element = elementU[j]; while (k != -1) { int kNext = indexColumnU[k]; int iRowNext = indexRowU[k]; CoinFactorizationDouble elementNext = elementU[k]; indexColumnU[k] = -1; indexRowU[k] = iRow; elementU[k] = element; k = kNext; iRow = iRowNext; element = elementNext; } /* endwhile */ } } CoinZeroN(startColumnU, numberSlacks_); k = 0; for (i = numberSlacks_; i < numberRows_; i++) { startColumnU[i] = k; k += numberInColumn[i]; } maximumU_ = k; #if COIN_ONE_ETA_COPY } else { // U already OK for (i = 0; i < numberColumns_; i++) { int iColumn = pivotColumn[i]; pivotColumnB[iColumn] = i; } maximumU_ = startColumnU[numberRows_ - 1] + numberInColumn[numberRows_ - 1]; numberU = numberRows_; } #endif if ((messageLevel_ & 8)) { std::cout << " length of U " << totalElements_ << ", length of L " << lengthL_; if (numberDense_) std::cout << " plus " << numberDense_ * numberDense_ << " from " << numberDense_ << " dense rows"; std::cout << std::endl; } // and add L and dense totalElements_ += numberDense_ * numberDense_ + lengthL_; int *nextColumn = nextColumn_.array(); int *lastColumn = lastColumn_.array(); // See whether to have extra copy of R #ifndef ABC_USE_COIN_FACTORIZATION if (maximumU_ > 10 * numberRows_ || numberRows_ < 200) { // NO numberInColumnPlus_.conditionalDelete(); } else { #endif for (i = 0; i < numberColumns_; i++) { lastColumn[i] = i - 1; nextColumn[i] = i + 1; numberInColumnPlus[i] = 0; } nextColumn[numberColumns_ - 1] = maximumColumnsExtra_; lastColumn[maximumColumnsExtra_] = numberColumns_ - 1; nextColumn[maximumColumnsExtra_] = 0; lastColumn[0] = maximumColumnsExtra_; #ifndef ABC_USE_COIN_FACTORIZATION } #endif numberU_ = numberU; numberGoodU_ = numberU; numberL_ = numberGoodL_; #if COIN_DEBUG for (i = 0; i < numberRows_; i++) { if (permute[i] < 0) { std::cout << i << std::endl; abort(); } } #endif CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); for (i = numberSlacks_; i < numberU; i++) { int start = startColumnU[i]; int end = start + numberInColumn[i]; totalElements_ += numberInColumn[i]; int j; for (j = start; j < end; j++) { int iRow = indexRowU[j]; iRow = permute[iRow]; indexRowU[j] = iRow; numberInRow[iRow]++; } } #if COIN_ONE_ETA_COPY if (numberRows_ >= COIN_ONE_ETA_COPY) { #endif //space for cross reference int lengthU = lengthAreaU_ + EXTRA_U_SPACE; convertRowToColumnU_.conditionalNew(lengthU); int *convertRowToColumn = convertRowToColumnU_.array(); int j = 0; int *startRow = startRowU_.array(); int iRow; for (iRow = 0; iRow < numberRows_; iRow++) { startRow[iRow] = j; j += numberInRow[iRow]; } int numberInU = j; CoinZeroN(numberInRow_.array(), numberRows_); for (i = numberSlacks_; i < numberRows_; i++) { int start = startColumnU[i]; int end = start + numberInColumn[i]; CoinFactorizationDouble pivotValue = pivotRegion[i]; int j; for (j = start; j < end; j++) { int iRow = indexRowU[j]; int iLook = numberInRow[iRow]; numberInRow[iRow] = iLook + 1; int k = startRow[iRow] + iLook; indexColumnU[k] = i; convertRowToColumn[k] = j; //multiply by pivot elementU[j] *= pivotValue; } } int *nextRow = nextRow_.array(); int *lastRow = lastRow_.array(); for (j = 0; j < numberRows_; j++) { lastRow[j] = j - 1; nextRow[j] = j + 1; } nextRow[numberRows_ - 1] = maximumRowsExtra_; lastRow[maximumRowsExtra_] = numberRows_ - 1; nextRow[maximumRowsExtra_] = 0; lastRow[0] = maximumRowsExtra_; startRow[maximumRowsExtra_] = numberInU; #if COIN_ONE_ETA_COPY } else { // no row copy for (i = numberSlacks_; i < numberU; i++) { int start = startColumnU[i]; int end = start + numberInColumn[i]; int j; CoinFactorizationDouble pivotValue = pivotRegion[i]; for (j = start; j < end; j++) { //multiply by pivot elementU[j] *= pivotValue; } } } #endif int firstReal = numberRows_; int *startColumnL = startColumnL_.array(); int *indexRowL = indexRowL_.array(); for (i = numberRows_ - 1; i >= 0; i--) { int start = startColumnL[i]; int end = startColumnL[i + 1]; totalElements_ += end - start; if (end > start) { firstReal = i; int j; for (j = start; j < end; j++) { int iRow = indexRowL[j]; iRow = permute[iRow]; assert(iRow > firstReal); indexRowL[j] = iRow; } } } baseL_ = firstReal; numberL_ -= firstReal; factorElements_ = totalElements_; //can delete pivotRowL_ as not used pivotRowL_.conditionalDelete(); //use L for R if room int space = lengthAreaL_ - lengthL_; int spaceUsed = lengthL_ + lengthU_; int needed = (spaceUsed + numberRows_ - 1) / numberRows_; needed = needed * 2 * maximumPivots_; if (needed < 2 * numberRows_) { needed = 2 * numberRows_; } if (numberInColumnPlus_.array()) { // Need double the space for R space = space / 2; startColumnR_.conditionalNew(maximumPivots_ + 1 + maximumColumnsExtra_ + 1); int *startR = startColumnR_.array() + maximumPivots_ + 1; CoinZeroN(startR, (maximumColumnsExtra_ + 1)); } else { startColumnR_.conditionalNew(maximumPivots_ + 1); } #ifdef ZEROFAULT memset(startColumnR_.array(), 'z', (maximumPivots_ + 1) * sizeof(int)); #endif if (space >= needed) { lengthR_ = 0; lengthAreaR_ = space; elementR_ = elementL_.array() + lengthL_; indexRowR_ = indexRowL_.array() + lengthL_; } else { lengthR_ = 0; lengthAreaR_ = space; elementR_ = elementL_.array() + lengthL_; indexRowR_ = indexRowL_.array() + lengthL_; if ((messageLevel_ & 4)) std::cout << "Factorization may need some increasing area space" << std::endl; if (areaFactor_) { areaFactor_ *= 1.1; } else { areaFactor_ = 1.1; } } numberR_ = 0; } // Returns areaFactor but adjusted for dense double CoinFactorization::adjustedAreaFactor() const { double factor = areaFactor_; if (numberDense_ && areaFactor_ > 1.0) { double dense = numberDense_; dense *= dense; double withoutDense = totalElements_ - dense + 1.0; factor *= 1.0 + dense / withoutDense; } return factor; } // checkConsistency. Checks that row and column copies look OK void CoinFactorization::checkConsistency() { bool bad = false; int iRow; int *startRowU = startRowU_.array(); int *numberInRow = numberInRow_.array(); int *numberInColumn = numberInColumn_.array(); int *indexColumnU = indexColumnU_.array(); int *indexRowU = indexRowU_.array(); int *startColumnU = startColumnU_.array(); for (iRow = 0; iRow < numberRows_; iRow++) { if (numberInRow[iRow]) { int startRow = startRowU[iRow]; int endRow = startRow + numberInRow[iRow]; int j; for (j = startRow; j < endRow; j++) { int iColumn = indexColumnU[j]; int startColumn = startColumnU[iColumn]; int endColumn = startColumn + numberInColumn[iColumn]; bool found = false; int k; for (k = startColumn; k < endColumn; k++) { if (indexRowU[k] == iRow) { found = true; break; } } if (!found) { bad = true; std::cout << "row " << iRow << " column " << iColumn << " Rows" << std::endl; } } } } int iColumn; for (iColumn = 0; iColumn < numberColumns_; iColumn++) { if (numberInColumn[iColumn]) { int startColumn = startColumnU[iColumn]; int endColumn = startColumn + numberInColumn[iColumn]; int j; for (j = startColumn; j < endColumn; j++) { int iRow = indexRowU[j]; int startRow = startRowU[iRow]; int endRow = startRow + numberInRow[iRow]; bool found = false; int k; for (k = startRow; k < endRow; k++) { if (indexColumnU[k] == iColumn) { found = true; break; } } if (!found) { bad = true; std::cout << "row " << iRow << " column " << iColumn << " Columns" << std::endl; } } } } if (bad) { abort(); } } // pivotOneOtherRow. When just one other row so faster bool CoinFactorization::pivotOneOtherRow(int pivotRow, int pivotColumn) { int *numberInRow = numberInRow_.array(); int *numberInColumn = numberInColumn_.array(); int *numberInColumnPlus = numberInColumnPlus_.array(); int numberInPivotRow = numberInRow[pivotRow] - 1; int *startRowU = startRowU_.array(); int *startColumnU = startColumnU_.array(); int startColumn = startColumnU[pivotColumn]; int startRow = startRowU[pivotRow]; int endRow = startRow + numberInPivotRow + 1; //take out this bit of indexColumnU int *nextRow = nextRow_.array(); int *lastRow = lastRow_.array(); int next = nextRow[pivotRow]; int last = lastRow[pivotRow]; nextRow[last] = next; lastRow[next] = last; nextRow[pivotRow] = numberGoodU_; //use for permute lastRow[pivotRow] = -2; numberInRow[pivotRow] = 0; //store column in L, compress in U and take column out int l = lengthL_; if (l + 1 > lengthAreaL_) { //need more memory if ((messageLevel_ & 4) != 0) std::cout << "more memory needed in middle of invert" << std::endl; return false; } //l+=currentAreaL_->elementByColumn-elementL_; //int lSave=l; int *startColumnL = startColumnL_.array(); CoinFactorizationDouble *elementL = elementL_.array(); int *indexRowL = indexRowL_.array(); startColumnL[numberGoodL_] = l; //for luck and first time numberGoodL_++; startColumnL[numberGoodL_] = l + 1; lengthL_++; CoinFactorizationDouble pivotElement; CoinFactorizationDouble otherMultiplier; int otherRow; int *saveColumn = saveColumn_.array(); CoinFactorizationDouble *elementU = elementU_.array(); int *indexRowU = indexRowU_.array(); if (indexRowU[startColumn] == pivotRow) { pivotElement = elementU[startColumn]; otherMultiplier = elementU[startColumn + 1]; otherRow = indexRowU[startColumn + 1]; } else { pivotElement = elementU[startColumn + 1]; otherMultiplier = elementU[startColumn]; otherRow = indexRowU[startColumn]; } int numberSave = numberInRow[otherRow]; CoinFactorizationDouble pivotMultiplier = 1.0 / pivotElement; CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); pivotRegion[numberGoodU_] = pivotMultiplier; numberInColumn[pivotColumn] = 0; otherMultiplier = otherMultiplier * pivotMultiplier; indexRowL[l] = otherRow; elementL[l] = otherMultiplier; //take out of row list int start = startRowU[otherRow]; int end = start + numberSave; int where = start; int *indexColumnU = indexColumnU_.array(); while (indexColumnU[where] != pivotColumn) { where++; } /* endwhile */ assert(where < end); end--; indexColumnU[where] = indexColumnU[end]; int numberAdded = 0; int numberDeleted = 0; //pack down and move to work int j; const int *nextCount = nextCount_.array(); int *nextColumn = nextColumn_.array(); for (j = startRow; j < endRow; j++) { int iColumn = indexColumnU[j]; if (iColumn != pivotColumn) { int startColumn = startColumnU[iColumn]; int endColumn = startColumn + numberInColumn[iColumn]; int iRow = indexRowU[startColumn]; CoinFactorizationDouble value = elementU[startColumn]; double largest; bool foundOther = false; //leave room for pivot int put = startColumn + 1; int positionLargest = -1; CoinFactorizationDouble thisPivotValue = 0.0; CoinFactorizationDouble otherElement = 0.0; CoinFactorizationDouble nextValue = elementU[put]; ; int nextIRow = indexRowU[put]; //compress column and find largest not updated if (iRow != pivotRow) { if (iRow != otherRow) { largest = fabs(value); elementU[put] = value; indexRowU[put] = iRow; positionLargest = put; put++; int i; for (i = startColumn + 1; i < endColumn; i++) { iRow = nextIRow; value = nextValue; #ifdef ZEROFAULT // doesn't matter reading uninitialized but annoys checking if (i + 1 < endColumn) { #endif nextIRow = indexRowU[i + 1]; nextValue = elementU[i + 1]; #ifdef ZEROFAULT } #endif if (iRow != pivotRow) { if (iRow != otherRow) { //keep indexRowU[put] = iRow; elementU[put] = value; ; put++; } else { otherElement = value; foundOther = true; } } else { thisPivotValue = value; } } } else { otherElement = value; foundOther = true; //need to find largest largest = 0.0; int i; for (i = startColumn + 1; i < endColumn; i++) { iRow = nextIRow; value = nextValue; #ifdef ZEROFAULT // doesn't matter reading uninitialized but annoys checking if (i + 1 < endColumn) { #endif nextIRow = indexRowU[i + 1]; nextValue = elementU[i + 1]; #ifdef ZEROFAULT } #endif if (iRow != pivotRow) { //keep indexRowU[put] = iRow; elementU[put] = value; ; double absValue = fabs(value); if (absValue > largest) { largest = absValue; positionLargest = put; } put++; } else { thisPivotValue = value; } } } } else { //need to find largest largest = 0.0; thisPivotValue = value; int i; for (i = startColumn + 1; i < endColumn; i++) { iRow = nextIRow; value = nextValue; #ifdef ZEROFAULT // doesn't matter reading uninitialized but annoys checking if (i + 1 < endColumn) { #endif nextIRow = indexRowU[i + 1]; nextValue = elementU[i + 1]; #ifdef ZEROFAULT } #endif if (iRow != otherRow) { //keep indexRowU[put] = iRow; elementU[put] = value; ; double absValue = fabs(value); if (absValue > largest) { largest = absValue; positionLargest = put; } put++; } else { otherElement = value; foundOther = true; } } } //slot in pivot elementU[startColumn] = thisPivotValue; indexRowU[startColumn] = pivotRow; //clean up counts startColumn++; numberInColumn[iColumn] = put - startColumn; numberInColumnPlus[iColumn]++; startColumnU[iColumn]++; otherElement = otherElement - thisPivotValue * otherMultiplier; double absValue = fabs(otherElement); if (absValue > zeroTolerance_) { if (!foundOther) { //have we space saveColumn[numberAdded++] = iColumn; int next = nextColumn[iColumn]; int space; space = startColumnU[next] - put - numberInColumnPlus[next]; if (space <= 0) { //getColumnSpace also moves fixed part int number = numberInColumn[iColumn]; if (!getColumnSpace(iColumn, number + 1)) { return false; } //redo starts positionLargest = positionLargest + startColumnU[iColumn] - startColumn; startColumn = startColumnU[iColumn]; put = startColumn + number; } } elementU[put] = otherElement; indexRowU[put] = otherRow; if (absValue > largest) { largest = absValue; positionLargest = put; } put++; } else { if (foundOther) { numberDeleted++; //take out of row list int where = start; while (indexColumnU[where] != iColumn) { where++; } /* endwhile */ assert(where < end); end--; indexColumnU[where] = indexColumnU[end]; } } numberInColumn[iColumn] = put - startColumn; //move largest if (positionLargest >= 0) { value = elementU[positionLargest]; iRow = indexRowU[positionLargest]; elementU[positionLargest] = elementU[startColumn]; indexRowU[positionLargest] = indexRowU[startColumn]; elementU[startColumn] = value; indexRowU[startColumn] = iRow; } //linked list for column if (nextCount[iColumn + numberRows_] != -2) { //modify linked list deleteLink(iColumn + numberRows_); addLink(iColumn + numberRows_, numberInColumn[iColumn]); } } } //get space for row list next = nextRow[otherRow]; int space; space = startRowU[next] - end; totalElements_ += numberAdded - numberDeleted; int number = numberAdded + (end - start); if (space < numberAdded) { numberInRow[otherRow] = end - start; if (!getRowSpace(otherRow, number)) { return false; } end = startRowU[otherRow] + end - start; } // do linked lists and update counts numberInRow[otherRow] = number; if (number != numberSave) { deleteLink(otherRow); addLink(otherRow, number); } for (j = 0; j < numberAdded; j++) { indexColumnU[end++] = saveColumn[j]; } //modify linked list for pivots deleteLink(pivotRow); deleteLink(pivotColumn + numberRows_); return true; } void CoinFactorization::setPersistenceFlag(int flag) { persistenceFlag_ = flag; workArea_.setPersistence(flag, maximumRowsExtra_ + 1); workArea2_.setPersistence(flag, maximumRowsExtra_ + 1); pivotColumn_.setPersistence(flag, maximumColumnsExtra_ + 1); permute_.setPersistence(flag, maximumRowsExtra_ + 1); pivotColumnBack_.setPersistence(flag, maximumRowsExtra_ + 1); permuteBack_.setPersistence(flag, maximumRowsExtra_ + 1); nextRow_.setPersistence(flag, maximumRowsExtra_ + 1); startRowU_.setPersistence(flag, maximumRowsExtra_ + 1); numberInRow_.setPersistence(flag, maximumRowsExtra_ + 1); numberInColumn_.setPersistence(flag, maximumColumnsExtra_ + 1); numberInColumnPlus_.setPersistence(flag, maximumColumnsExtra_ + 1); firstCount_.setPersistence(flag, CoinMax(biggerDimension_ + 2, maximumRowsExtra_ + 1)); nextCount_.setPersistence(flag, numberRows_ + numberColumns_); lastCount_.setPersistence(flag, numberRows_ + numberColumns_); nextColumn_.setPersistence(flag, maximumColumnsExtra_ + 1); lastColumn_.setPersistence(flag, maximumColumnsExtra_ + 1); lastRow_.setPersistence(flag, maximumRowsExtra_ + 1); markRow_.setPersistence(flag, numberRows_); saveColumn_.setPersistence(flag, numberColumns_); indexColumnU_.setPersistence(flag, lengthAreaU_); pivotRowL_.setPersistence(flag, numberRows_ + 1); pivotRegion_.setPersistence(flag, maximumRowsExtra_ + 1); elementU_.setPersistence(flag, lengthAreaU_); indexRowU_.setPersistence(flag, lengthAreaU_); startColumnU_.setPersistence(flag, maximumColumnsExtra_ + 1); convertRowToColumnU_.setPersistence(flag, lengthAreaU_); elementL_.setPersistence(flag, lengthAreaL_); indexRowL_.setPersistence(flag, lengthAreaL_); startColumnL_.setPersistence(flag, numberRows_ + 1); startColumnR_.setPersistence(flag, maximumPivots_ + 1 + maximumColumnsExtra_ + 1); startRowL_.setPersistence(flag, 0); indexColumnL_.setPersistence(flag, 0); elementByRowL_.setPersistence(flag, 0); sparse_.setPersistence(flag, 0); } // Delete all stuff void CoinFactorization::almostDestructor() { gutsOfDestructor(2); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveForcing.hpp0000644000175200017520000000340313414454441020210 0ustar coincoin/* $Id: CoinPresolveForcing.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolveForcing_H #define CoinPresolveForcing_H #include "CoinPresolveMatrix.hpp" /*! \file */ #define IMPLIED_BOUND 7 /*! \class forcing_constraint_action \brief Detect and process forcing constraints and useless constraints A constraint is useless if the bounds on the variables prevent the constraint from ever being violated. A constraint is a forcing constraint if the bounds on the constraint force the value of an involved variable to one of its bounds. A constraint can force more than one variable. */ class forcing_constraint_action : public CoinPresolveAction { forcing_constraint_action(); forcing_constraint_action(const forcing_constraint_action &rhs); forcing_constraint_action &operator=(const forcing_constraint_action &rhs); public: struct action { const int *rowcols; const double *bounds; int row; int nlo; int nup; }; private: const int nactions_; // actions_ is owned by the class and must be deleted at destruction const action *const actions_; public: forcing_constraint_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~forcing_constraint_action(); }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/config_coinutils_default.h0000644000175200017520000000270013434057056020774 0ustar coincoin /***************************************************************************/ /* HERE DEFINE THE PROJECT SPECIFIC PUBLIC MACROS */ /* These are only in effect in a setting that doesn't use configure */ /***************************************************************************/ /* Version number of project */ #define COINUTILS_VERSION "2.11.0" /* Major Version number of project */ #define COINUTILS_VERSION_MAJOR 2 /* Minor Version number of project */ #define COINUTILS_VERSION_MINOR 11 /* Release Version number of project */ #define COINUTILS_VERSION_RELEASE 0 /* Define to 64bit integer types. Note that MS does not provide __uint64. Microsoft defines types in BaseTsd.h, part of the Windows SDK. Given that this file only gets used in the Visual Studio environment, it seems to me we'll be better off simply including it and using the types MS defines. But since I have no idea of history here, I'll leave all of this inside the guard for MSC_VER >= 1200. If you're reading this and have been developing in MSVS long enough to know, fix it. -- lh, 100915 -- */ #if _MSC_VER >= 1200 #include #define COIN_INT64_T INT64 #define COIN_UINT64_T UINT64 /* Define to integer type capturing pointer */ #define COIN_INTPTR_T ULONG_PTR #else #define COIN_INT64_T long long #define COIN_UINT64_T unsigned long long #define COIN_INTPTR_T int * #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveMonitor.hpp0000644000175200017520000000666713414454441020267 0ustar coincoin #ifndef CoinPresolveMonitor_H #define CoinPresolveMonitor_H /*! \brief Monitor a row or column for modification The purpose of this class is to monitor a row or column for modifications during presolve and postsolve. Each object can monitor one row or column. The initial copy of the row or column is loaded by the constructor. Each subsequent call to checkAndTell() compares the current state of the row or column with the stored state and reports any modifications. Internally the row or column is held as a CoinPackedVector so that it's possible to follow a row or column through presolve (CoinPresolveMatrix) and postsolve (CoinPostsolveMatrix). Do not underestimate the amount of work required here. Extracting a row from the CoinPostsolve matrix requires a scan of every element in the matrix. That's one scan by the constructor and one scan with every call to modify. But that's precisely why it's virtually impossible to debug presolve without aids. Parameter overloads for CoinPresolveMatrix and CoinPostsolveMatrix are a little clumsy, but not a problem in use. The alternative is to add methods to the CoinPresolveMatrix and CoinPostsolveMatrix classes that will only be used for debugging. That's not too attractive either. */ class CoinPresolveMonitor { public: /*! \brief Default constructor Creates an empty monitor. */ CoinPresolveMonitor(); /*! \brief Initialise from a CoinPresolveMatrix Load the initial row or column from a CoinPresolveMatrix. Set \p isRow true for a row, false for a column. */ CoinPresolveMonitor(const CoinPresolveMatrix *mtx, bool isRow, int k); /*! \brief Initialise from a CoinPostsolveMatrix Load the initial row or column from a CoinPostsolveMatrix. Set \p isRow true for a row, false for a column. */ CoinPresolveMonitor(const CoinPostsolveMatrix *mtx, bool isRow, int k); /*! \brief Compare the present row or column against the stored copy and report differences. Load the current row or column from a CoinPresolveMatrix and compare. Differences are printed to std::cout. */ void checkAndTell(const CoinPresolveMatrix *mtx); /*! \brief Compare the present row or column against the stored copy and report differences. Load the current row or column from a CoinPostsolveMatrix and compare. Differences are printed to std::cout. */ void checkAndTell(const CoinPostsolveMatrix *mtx); private: /// Extract a row from a CoinPresolveMatrix CoinPackedVector *extractRow(int i, const CoinPresolveMatrix *mtx) const; /// Extract a column from a CoinPresolveMatrix CoinPackedVector *extractCol(int j, const CoinPresolveMatrix *mtx) const; /// Extract a row from a CoinPostsolveMatrix CoinPackedVector *extractRow(int i, const CoinPostsolveMatrix *mtx) const; /// Extract a column from a CoinPostsolveMatrix CoinPackedVector *extractCol(int j, const CoinPostsolveMatrix *mtx) const; /// Worker method underlying the public checkAndTell methods. void checkAndTell(CoinPackedVector *curVec, double lb, double ub); /// True to monitor a row, false to monitor a column bool isRow_; /// Row or column index int ndx_; /*! The original row or column Sorted in increasing order of indices. */ CoinPackedVector *origVec_; /// Original row or column lower bound double lb_; /// Original row or column upper bound double ub_; }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinFactorization2.cpp0000644000175200017520000014203413414454441017776 0ustar coincoin/* $Id: CoinFactorization2.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "CoinUtilsConfig.h" #include #include #include #include "CoinFactorization.hpp" #include "CoinIndexedVector.hpp" #include "CoinHelperFunctions.hpp" #include "CoinFinite.hpp" #if COIN_FACTORIZATION_DENSE_CODE == 1 // using simple lapack interface extern "C" { /** LAPACK Fortran subroutine DGETRF. */ void F77_FUNC(dgetrf, DGETRF)(ipfint *m, ipfint *n, double *A, ipfint *ldA, ipfint *ipiv, ipfint *info); } #elif COIN_FACTORIZATION_DENSE_CODE == 2 // C interface enum CBLAS_ORDER { CblasRowMajor = 101, CblasColMajor = 102 }; extern "C" { int clapack_dgetrf(const enum CBLAS_ORDER Order, const int M, const int N, double *A, const int lda, int *ipiv); } #elif COIN_FACTORIZATION_DENSE_CODE == 3 // Intel compiler #include "mkl_lapacke.h" #endif #ifndef NDEBUG static int counter1 = 0; #endif // factorSparse. Does sparse phase of factorization //return code is <0 error, 0= finished int CoinFactorization::factorSparse() { int larger; if (numberRows_ < numberColumns_) { larger = numberColumns_; } else { larger = numberRows_; } int returnCode; #define LARGELIMIT 65530 #define SMALL_SET 65531 #define SMALL_UNSET (SMALL_SET + 1) #define LARGE_SET COIN_INT_MAX - 10 #define LARGE_UNSET (LARGE_SET + 1) if (larger < LARGELIMIT) returnCode = factorSparseSmall(); else returnCode = factorSparseLarge(); return returnCode; } // factorSparse. Does sparse phase of factorization //return code is <0 error, 0= finished int CoinFactorization::factorSparseSmall() { int *indexRow = indexRowU_.array(); int *indexColumn = indexColumnU_.array(); CoinFactorizationDouble *element = elementU_.array(); int count = 1; workArea_.conditionalNew(numberRows_); CoinFactorizationDouble *workArea = workArea_.array(); #ifndef NDEBUG counter1++; #endif // when to go dense int denseThreshold = abs(denseThreshold_); CoinZeroN(workArea, numberRows_); //get space for bit work area int workSize = 1000; workArea2_.conditionalNew(workSize); unsigned int *workArea2 = workArea2_.array(); //set markRow so no rows updated unsigned short *markRow = reinterpret_cast< unsigned short * >(markRow_.array()); CoinFillN(markRow, numberRows_, static_cast< unsigned short >(SMALL_UNSET)); int status = 0; //do slacks first int *numberInRow = numberInRow_.array(); int *numberInColumn = numberInColumn_.array(); int *numberInColumnPlus = numberInColumnPlus_.array(); int *startColumnU = startColumnU_.array(); int *startColumnL = startColumnL_.array(); if (biasLU_ < 3 && numberColumns_ == numberRows_) { int iPivotColumn; int *pivotColumn = pivotColumn_.array(); int *nextRow = nextRow_.array(); int *lastRow = lastRow_.array(); for (iPivotColumn = 0; iPivotColumn < numberColumns_; iPivotColumn++) { if (numberInColumn[iPivotColumn] == 1) { int start = startColumnU[iPivotColumn]; CoinFactorizationDouble value = element[start]; if (value == slackValue_ && numberInColumnPlus[iPivotColumn] == 0) { // treat as slack int iRow = indexRow[start]; // but only if row not marked if (numberInRow[iRow] > 0) { totalElements_ -= numberInRow[iRow]; //take out this bit of indexColumnU int next = nextRow[iRow]; int last = lastRow[iRow]; nextRow[last] = next; lastRow[next] = last; nextRow[iRow] = numberGoodU_; //use for permute lastRow[iRow] = -2; //mark //modify linked list for pivots deleteLink(iRow); numberInRow[iRow] = -1; numberInColumn[iPivotColumn] = 0; numberGoodL_++; startColumnL[numberGoodL_] = 0; pivotColumn[numberGoodU_] = iPivotColumn; numberGoodU_++; } } } } // redo preProcess(4); CoinFillN(markRow, numberRows_, static_cast< unsigned short >(SMALL_UNSET)); } numberSlacks_ = numberGoodU_; int *nextCount = nextCount_.array(); int *firstCount = firstCount_.array(); int *startRow = startRowU_.array(); int *startColumn = startColumnU; //#define UGLY_COIN_FACTOR_CODING #ifdef UGLY_COIN_FACTOR_CODING CoinFactorizationDouble *elementL = elementL_.array(); int *indexRowL = indexRowL_.array(); int *saveColumn = saveColumn_.array(); int *nextRow = nextRow_.array(); int *lastRow = lastRow_.array(); #endif double pivotTolerance = pivotTolerance_; int numberTrials = numberTrials_; int numberRows = numberRows_; // Put column singletons first - (if false) separateLinks(1, (biasLU_ > 1)); #ifndef NDEBUG int counter2 = 0; #endif while (count <= biggerDimension_) { #ifndef NDEBUG counter2++; int badRow = -1; if (counter1 == -1 && counter2 >= 0) { // check counts consistent for (int iCount = 1; iCount < numberRows_; iCount++) { int look = firstCount[iCount]; while (look >= 0) { if (look < numberRows_) { int iRow = look; if (iRow == badRow) printf("row count for row %d is %d\n", iCount, iRow); if (numberInRow[iRow] != iCount) { printf("failed debug on %d entry to factorSparse and %d try\n", counter1, counter2); printf("row %d - count %d number %d\n", iRow, iCount, numberInRow[iRow]); abort(); } look = nextCount[look]; } else { int iColumn = look - numberRows; if (numberInColumn[iColumn] != iCount) { printf("failed debug on %d entry to factorSparse and %d try\n", counter1, counter2); printf("column %d - count %d number %d\n", iColumn, iCount, numberInColumn[iColumn]); abort(); } look = nextCount[look]; } } } } #endif int minimumCount = COIN_INT_MAX; double minimumCost = COIN_DBL_MAX; int iPivotRow = -1; int iPivotColumn = -1; int pivotRowPosition = -1; int pivotColumnPosition = -1; int look = firstCount[count]; int trials = 0; int *pivotColumn = pivotColumn_.array(); if (count == 1 && firstCount[1] >= 0 && !biasLU_) { //do column singletons first to put more in U while (look >= 0) { if (look < numberRows_) { look = nextCount[look]; } else { int iColumn = look - numberRows_; assert(numberInColumn[iColumn] == count); int start = startColumnU[iColumn]; int iRow = indexRow[start]; iPivotRow = iRow; pivotRowPosition = start; iPivotColumn = iColumn; assert(iPivotRow >= 0 && iPivotColumn >= 0); pivotColumnPosition = -1; look = -1; break; } } /* endwhile */ if (iPivotRow < 0) { //back to singletons look = firstCount[1]; } } while (look >= 0) { if (look < numberRows_) { int iRow = look; #ifndef NDEBUG if (numberInRow[iRow] != count) { printf("failed on %d entry to factorSparse and %d try\n", counter1, counter2); printf("row %d - count %d number %d\n", iRow, count, numberInRow[iRow]); abort(); } #endif look = nextCount[look]; bool rejected = false; int start = startRow[iRow]; int end = start + count; int i; for (i = start; i < end; i++) { int iColumn = indexColumn[i]; assert(numberInColumn[iColumn] > 0); double cost = (count - 1) * numberInColumn[iColumn]; if (cost < minimumCost) { int where = startColumn[iColumn]; double minimumValue = element[where]; minimumValue = fabs(minimumValue) * pivotTolerance; while (indexRow[where] != iRow) { where++; } /* endwhile */ assert(where < startColumn[iColumn] + numberInColumn[iColumn]); CoinFactorizationDouble value = element[where]; value = fabs(value); if (value >= minimumValue) { minimumCost = cost; minimumCount = numberInColumn[iColumn]; iPivotRow = iRow; pivotRowPosition = -1; iPivotColumn = iColumn; assert(iPivotRow >= 0 && iPivotColumn >= 0); pivotColumnPosition = i; rejected = false; if (minimumCount < count) { look = -1; break; } } else if (iPivotRow == -1) { rejected = true; } } } trials++; if (trials >= numberTrials && iPivotRow >= 0) { look = -1; break; } if (rejected) { //take out for moment //eligible when row changes deleteLink(iRow); addLink(iRow, biggerDimension_ + 1); } } else { int iColumn = look - numberRows; assert(numberInColumn[iColumn] == count); look = nextCount[look]; int start = startColumn[iColumn]; int end = start + numberInColumn[iColumn]; CoinFactorizationDouble minimumValue = element[start]; minimumValue = fabs(minimumValue) * pivotTolerance; int i; for (i = start; i < end; i++) { CoinFactorizationDouble value = element[i]; value = fabs(value); if (value >= minimumValue) { int iRow = indexRow[i]; int nInRow = numberInRow[iRow]; assert(nInRow > 0); double cost = (count - 1) * nInRow; if (cost < minimumCost) { minimumCost = cost; minimumCount = nInRow; iPivotRow = iRow; pivotRowPosition = i; iPivotColumn = iColumn; assert(iPivotRow >= 0 && iPivotColumn >= 0); pivotColumnPosition = -1; if (minimumCount <= count + 1) { look = -1; break; } } } } trials++; if (trials >= numberTrials && iPivotRow >= 0) { look = -1; break; } } } /* endwhile */ if (iPivotRow >= 0) { assert(iPivotRow < numberRows_); int numberDoRow = numberInRow[iPivotRow] - 1; int numberDoColumn = numberInColumn[iPivotColumn] - 1; totalElements_ -= (numberDoRow + numberDoColumn + 1); if (numberDoColumn > 0) { if (numberDoRow > 0) { if (numberDoColumn > 1) { // if (1) { //need to adjust more for cache and SMP //allow at least 4 extra int increment = numberDoColumn + 1 + 4; if (increment & 15) { increment = increment & (~15); increment += 16; } int increment2 = (increment + COINFACTORIZATION_BITS_PER_INT - 1) >> COINFACTORIZATION_SHIFT_PER_INT; int size = increment2 * numberDoRow; if (size > workSize) { workSize = size; workArea2_.conditionalNew(workSize); workArea2 = workArea2_.array(); } bool goodPivot; #ifndef UGLY_COIN_FACTOR_CODING //branch out to best pivot routine goodPivot = pivot(iPivotRow, iPivotColumn, pivotRowPosition, pivotColumnPosition, workArea, workArea2, increment2, markRow, SMALL_SET); #else #define FAC_SET SMALL_SET #include "CoinFactorization.hpp" #undef FAC_SET #undef UGLY_COIN_FACTOR_CODING #endif if (!goodPivot) { status = -99; count = biggerDimension_ + 1; break; } } else { if (!pivotOneOtherRow(iPivotRow, iPivotColumn)) { status = -99; count = biggerDimension_ + 1; break; } } } else { assert(!numberDoRow); if (!pivotRowSingleton(iPivotRow, iPivotColumn)) { status = -99; count = biggerDimension_ + 1; break; } } } else { assert(!numberDoColumn); if (!pivotColumnSingleton(iPivotRow, iPivotColumn)) { status = -99; count = biggerDimension_ + 1; break; } } assert(nextRow_.array()[iPivotRow] == numberGoodU_); pivotColumn[numberGoodU_] = iPivotColumn; numberGoodU_++; // This should not need to be trapped here - but be safe if (numberGoodU_ == numberRows_) count = biggerDimension_ + 1; #if COIN_DEBUG == 2 checkConsistency(); #endif #if 0 // Even if no dense code may be better to use naive dense if (!denseThreshold_&&totalElements_>1000) { int leftRows=numberRows_-numberGoodU_; double full = leftRows; full *= full; assert (full>=0.0); double leftElements = totalElements_; double ratio; if (leftRows>2000) ratio=4.0; else ratio=3.0; if (ratio*leftElements>full) denseThreshold=1; } #endif if (denseThreshold) { // see whether to go dense int leftRows = numberRows_ - numberGoodU_; double full = leftRows; full *= full; assert(full >= 0.0); double leftElements = totalElements_; //if (leftRows==100) //printf("at 100 %d elements\n",totalElements_); double ratio; #define COIN_DENSE_MULTIPLIER 1.0 #ifndef COIN_DENSE_MULTIPLIER #define COIN_DENSE_MULTIPLIER 1.0 #endif #define COIN_DENSE_MULTIPLIER2 1 if (leftRows > 2000) { ratio = 4.0; #if COIN_DENSE_MULTIPLIER2 == 1 ratio = 3.5; #endif } else if (leftRows > 800) { ratio = 3.0; #if COIN_DENSE_MULTIPLIER2 == 1 ratio = 2.75; #endif } else if (leftRows > 256) { ratio = 2.0; } else { ratio = 1.5; } #if COIN_DENSE_MULTIPLIER2 > 10 ratio = 10000; #endif ratio *= COIN_DENSE_MULTIPLIER; if ((ratio * leftElements > full && leftRows > denseThreshold)) { #define COIN_ALIGN_DENSE 2 #if COIN_ALIGN_DENSE == 2 if ((leftRows & 7) == 0) { #endif //return to do dense if (status != 0) break; int check = 0; for (int iColumn = 0; iColumn < numberColumns_; iColumn++) { if (numberInColumn[iColumn]) check++; } if (check != leftRows && denseThreshold) { //printf("** mismatch %d columns left, %d rows\n",check,leftRows); denseThreshold = 0; } else { status = 2; if ((messageLevel_ & 4) != 0) std::cout << " Went dense at " << leftRows << " rows " << totalElements_ << " " << full << " " << leftElements << std::endl; //if (!denseThreshold_) //denseThreshold_=-check; // say how many break; } #if COIN_ALIGN_DENSE == 2 } #endif } } // start at 1 again count = 1; } else { //end of this - onto next count++; } } /* endwhile */ workArea_.conditionalDelete(); workArea2_.conditionalDelete(); return status; } //:method factorDense. Does dense phase of factorization //return code is <0 error, 0= finished int CoinFactorization::factorDense() { int status = 0; numberDense_ = numberRows_ - numberGoodU_; if (sizeof(int) == 4 && numberDense_ >= 2 << 15) { abort(); } int full; if (denseThreshold_ > 0 || true) full = numberDense_ * numberDense_; else full = -denseThreshold_ * numberDense_; totalElements_ = full; #ifdef COIN_ALIGN_DENSE int newSize = full + 8 * numberDense_; newSize += (numberDense_ + 1) / (sizeof(CoinFactorizationDouble) / sizeof(int)); newSize += 2 * ((numberDense_ + 3) / (sizeof(CoinFactorizationDouble) / sizeof(short))); newSize += ((numberRows_ + 3) / (sizeof(CoinFactorizationDouble) / sizeof(short))); // so we can align on 256 byte newSize += 32; denseArea_ = new double[newSize]; denseAreaAddress_ = denseArea_; CoinInt64 xx = reinterpret_cast< CoinInt64 >(denseAreaAddress_); int iBottom = static_cast< int >(xx & 63); int offset = (256 - iBottom) >> 3; denseAreaAddress_ += offset; CoinZeroN(denseArea_, newSize); #else denseArea_ = new double[full]; denseAreaAddress_ = denseArea_; CoinZeroN(denseArea_, full); #endif densePermute_ = new int[numberDense_]; int *indexRowU = indexRowU_.array(); //mark row lookup using lastRow int i; int *nextRow = nextRow_.array(); int *lastRow = lastRow_.array(); int *numberInColumn = numberInColumn_.array(); int *numberInColumnPlus = numberInColumnPlus_.array(); for (i = 0; i < numberRows_; i++) { if (lastRow[i] >= 0) lastRow[i] = 0; } int *indexRow = indexRowU_.array(); CoinFactorizationDouble *element = elementU_.array(); int which = 0; for (i = 0; i < numberRows_; i++) { if (!lastRow[i]) { lastRow[i] = which; nextRow[i] = numberGoodU_ + which; densePermute_[which] = i; which++; } } //for L part int *startColumnL = startColumnL_.array(); CoinFactorizationDouble *elementL = elementL_.array(); int *indexRowL = indexRowL_.array(); int endL = startColumnL[numberGoodL_]; //take out of U double *column = denseAreaAddress_; int rowsDone = 0; int iColumn = 0; int *pivotColumn = pivotColumn_.array(); CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); int *startColumnU = startColumnU_.array(); for (iColumn = 0; iColumn < numberColumns_; iColumn++) { if (numberInColumn[iColumn]) { //move int start = startColumnU[iColumn]; int number = numberInColumn[iColumn]; int end = start + number; for (int i = start; i < end; i++) { int iRow = indexRow[i]; iRow = lastRow[iRow]; assert(iRow >= 0 && iRow < numberDense_); column[iRow] = element[i]; } /* endfor */ column += numberDense_; while (lastRow[rowsDone] < 0) { rowsDone++; } /* endwhile */ nextRow[rowsDone] = numberGoodU_; rowsDone++; startColumnL[numberGoodU_ + 1] = endL; numberInColumn[iColumn] = 0; pivotColumn[numberGoodU_] = iColumn; pivotRegion[numberGoodU_] = 1.0; numberGoodU_++; } } #ifdef COIN_FACTORIZATION_DENSE_CODE if (denseThreshold_ /*>0*/) { assert(numberGoodU_ == numberRows_); numberGoodL_ = numberRows_; //now factorize //dgef(denseAreaAddress_,&numberDense_,&numberDense_,densePermute_); #if COIN_FACTORIZATION_DENSE_CODE == 1 int info; F77_FUNC(dgetrf, DGETRF) (&numberDense_, &numberDense_, denseAreaAddress_, &numberDense_, densePermute_, &info); // need to check size of pivots if (info) { //printf("Dense singular\n"); status = -1; } #elif COIN_FACTORIZATION_DENSE_CODE == 2 status = clapack_dgetrf(CblasColMajor, numberDense_, numberDense_, denseAreaAddress_, numberDense_, densePermute_); #elif COIN_FACTORIZATION_DENSE_CODE == 3 status = LAPACKE_dgetrf(LAPACK_COL_MAJOR, numberDense_, numberDense_, denseAreaAddress_, numberDense_, densePermute_); #endif return status; } #endif //abort(); numberGoodU_ = numberRows_ - numberDense_; int base = numberGoodU_; int iDense; int numberToDo = -denseThreshold_; denseThreshold_ = 0; double tolerance = zeroTolerance_; tolerance = 1.0e-30; int *nextColumn = nextColumn_.array(); const int *pivotColumnConst = pivotColumn_.array(); // make sure we have enough space in L and U for (iDense = 0; iDense < numberToDo; iDense++) { //how much space have we got iColumn = pivotColumnConst[base + iDense]; int next = nextColumn[iColumn]; int numberInPivotColumn = iDense; int space = startColumnU[next] - startColumnU[iColumn] - numberInColumnPlus[next]; //assume no zero elements if (numberInPivotColumn > space) { //getColumnSpace also moves fixed part if (!getColumnSpace(iColumn, numberInPivotColumn)) { return -99; } } // set so further moves will work numberInColumn[iColumn] = numberInPivotColumn; } // Fill in ? for (iColumn = numberGoodU_ + numberToDo; iColumn < numberRows_; iColumn++) { nextRow[iColumn] = iColumn; startColumnL[iColumn + 1] = endL; pivotRegion[iColumn] = 1.0; } if (lengthL_ + full * 0.5 > lengthAreaL_) { //need more memory if ((messageLevel_ & 4) != 0) std::cout << "more memory needed in middle of invert" << std::endl; return -99; } CoinFactorizationDouble *elementU = elementU_.array(); for (iDense = 0; iDense < numberToDo; iDense++) { int iRow; int jDense; int pivotRow = -1; double *element = denseAreaAddress_ + iDense * numberDense_; CoinFactorizationDouble largest = 1.0e-12; for (iRow = iDense; iRow < numberDense_; iRow++) { if (fabs(element[iRow]) > largest) { largest = fabs(element[iRow]); pivotRow = iRow; } } if (pivotRow >= 0) { iColumn = pivotColumnConst[base + iDense]; CoinFactorizationDouble pivotElement = element[pivotRow]; // get original row int originalRow = densePermute_[pivotRow]; // do nextRow nextRow[originalRow] = numberGoodU_; lastRow[originalRow] = -2; //mark // swap densePermute_[pivotRow] = densePermute_[iDense]; densePermute_[iDense] = originalRow; for (jDense = iDense; jDense < numberDense_; jDense++) { CoinFactorizationDouble value = element[iDense]; element[iDense] = element[pivotRow]; element[pivotRow] = value; element += numberDense_; } CoinFactorizationDouble pivotMultiplier = 1.0 / pivotElement; //printf("pivotMultiplier %g\n",pivotMultiplier); pivotRegion[numberGoodU_] = pivotMultiplier; // Do L element = denseAreaAddress_ + iDense * numberDense_; int l = lengthL_; startColumnL[numberGoodL_] = l; //for luck and first time for (iRow = iDense + 1; iRow < numberDense_; iRow++) { CoinFactorizationDouble value = element[iRow] * pivotMultiplier; element[iRow] = value; if (fabs(value) > tolerance) { indexRowL[l] = densePermute_[iRow]; elementL[l++] = value; } } numberGoodL_++; lengthL_ = l; startColumnL[numberGoodL_] = l; // update U column int start = startColumnU[iColumn]; for (iRow = 0; iRow < iDense; iRow++) { if (fabs(element[iRow]) > tolerance) { indexRowU[start] = densePermute_[iRow]; elementU[start++] = element[iRow]; } } numberInColumn[iColumn] = 0; numberInColumnPlus[iColumn] += start - startColumnU[iColumn]; startColumnU[iColumn] = start; // update other columns double *element2 = element + numberDense_; for (jDense = iDense + 1; jDense < numberToDo; jDense++) { CoinFactorizationDouble value = element2[iDense]; for (iRow = iDense + 1; iRow < numberDense_; iRow++) { //double oldValue=element2[iRow]; element2[iRow] -= value * element[iRow]; //if (oldValue&&!element2[iRow]) { //printf("Updated element for column %d, row %d old %g", // pivotColumnConst[base+jDense],densePermute_[iRow],oldValue); //printf(" new %g\n",element2[iRow]); //} } element2 += numberDense_; } numberGoodU_++; } else { return -1; } } // free area (could use L?) delete[] denseArea_; denseArea_ = NULL; // check if can use another array for densePermute_ delete[] densePermute_; densePermute_ = NULL; numberDense_ = 0; return status; } // Separate out links with same row/column count void CoinFactorization::separateLinks(int count, bool rowsFirst) { int *nextCount = nextCount_.array(); int *firstCount = firstCount_.array(); int *lastCount = lastCount_.array(); int next = firstCount[count]; int firstRow = -1; int firstColumn = -1; int lastRow = -1; int lastColumn = -1; while (next >= 0) { int next2 = nextCount[next]; if (next >= numberRows_) { nextCount[next] = -1; // Column if (firstColumn >= 0) { lastCount[next] = lastColumn; nextCount[lastColumn] = next; } else { lastCount[next] = -2 - count; firstColumn = next; } lastColumn = next; } else { // Row if (firstRow >= 0) { lastCount[next] = lastRow; nextCount[lastRow] = next; } else { lastCount[next] = -2 - count; firstRow = next; } lastRow = next; } next = next2; } if (rowsFirst && firstRow >= 0) { firstCount[count] = firstRow; nextCount[lastRow] = firstColumn; if (firstColumn >= 0) lastCount[firstColumn] = lastRow; } else if (firstRow < 0) { firstCount[count] = firstColumn; } else if (firstColumn >= 0) { firstCount[count] = firstColumn; nextCount[lastColumn] = firstRow; if (firstRow >= 0) lastCount[firstRow] = lastColumn; } } #if COIN_BIG_INDEX == 0 // Debug - save on file int CoinFactorization::saveFactorization(const char *file) const { FILE *fp = fopen(file, "wb"); if (fp) { // Save so we can pick up scalars const char *first = reinterpret_cast< const char * >(&pivotTolerance_); const char *last = reinterpret_cast< const char * >(&biasLU_); // increment last += sizeof(int); if (fwrite(first, last - first, 1, fp) != 1) return 1; // Now arrays if (CoinToFile(elementU_.array(), lengthAreaU_, fp)) return 1; if (CoinToFile(indexRowU_.array(), lengthAreaU_, fp)) return 1; if (CoinToFile(indexColumnU_.array(), lengthAreaU_, fp)) return 1; if (CoinToFile(convertRowToColumnU_.array(), lengthAreaU_, fp)) return 1; if (CoinToFile(elementByRowL_.array(), lengthAreaL_, fp)) return 1; if (CoinToFile(indexColumnL_.array(), lengthAreaL_, fp)) return 1; if (CoinToFile(startRowL_.array(), numberRows_ + 1, fp)) return 1; if (CoinToFile(elementL_.array(), lengthAreaL_, fp)) return 1; if (CoinToFile(indexRowL_.array(), lengthAreaL_, fp)) return 1; if (CoinToFile(startColumnL_.array(), numberRows_ + 1, fp)) return 1; if (CoinToFile(markRow_.array(), numberRows_, fp)) return 1; if (CoinToFile(saveColumn_.array(), numberColumns_, fp)) return 1; if (CoinToFile(startColumnR_.array(), maximumPivots_ + 1, fp)) return 1; if (CoinToFile(startRowU_.array(), maximumRowsExtra_ + 1, fp)) return 1; if (CoinToFile(numberInRow_.array(), maximumRowsExtra_ + 1, fp)) return 1; if (CoinToFile(nextRow_.array(), maximumRowsExtra_ + 1, fp)) return 1; if (CoinToFile(lastRow_.array(), maximumRowsExtra_ + 1, fp)) return 1; if (CoinToFile(pivotRegion_.array(), maximumRowsExtra_ + 1, fp)) return 1; if (CoinToFile(permuteBack_.array(), maximumRowsExtra_ + 1, fp)) return 1; if (CoinToFile(permute_.array(), maximumRowsExtra_ + 1, fp)) return 1; if (CoinToFile(pivotColumnBack_.array(), maximumRowsExtra_ + 1, fp)) return 1; if (CoinToFile(startColumnU_.array(), maximumColumnsExtra_ + 1, fp)) return 1; if (CoinToFile(numberInColumn_.array(), maximumColumnsExtra_ + 1, fp)) return 1; if (CoinToFile(numberInColumnPlus_.array(), maximumColumnsExtra_ + 1, fp)) return 1; if (CoinToFile(firstCount_.array(), biggerDimension_ + 2, fp)) return 1; if (CoinToFile(nextCount_.array(), numberRows_ + numberColumns_, fp)) return 1; if (CoinToFile(lastCount_.array(), numberRows_ + numberColumns_, fp)) return 1; if (CoinToFile(pivotRowL_.array(), numberRows_ + 1, fp)) return 1; if (CoinToFile(pivotColumn_.array(), maximumColumnsExtra_ + 1, fp)) return 1; if (CoinToFile(nextColumn_.array(), maximumColumnsExtra_ + 1, fp)) return 1; if (CoinToFile(lastColumn_.array(), maximumColumnsExtra_ + 1, fp)) return 1; if (CoinToFile(denseAreaAddress_, numberDense_ * numberDense_, fp)) return 1; if (CoinToFile(densePermute_, numberDense_, fp)) return 1; fclose(fp); } return 0; } // Debug - restore from file int CoinFactorization::restoreFactorization(const char *file, bool factorIt) { FILE *fp = fopen(file, "rb"); if (fp) { // Get rid of current gutsOfDestructor(); int newSize = 0; // for checking - should be same // Restore so we can pick up scalars char *first = reinterpret_cast< char * >(&pivotTolerance_); char *last = reinterpret_cast< char * >(&biasLU_); // increment last += sizeof(int); if (fread(first, last - first, 1, fp) != 1) return 1; int space = lengthAreaL_ - lengthL_; // Now arrays CoinFactorizationDouble *elementU = elementU_.array(); if (CoinFromFile(elementU, lengthAreaU_, fp, newSize) == 1) return 1; assert(newSize == lengthAreaU_); int *indexRowU = indexRowU_.array(); if (CoinFromFile(indexRowU, lengthAreaU_, fp, newSize) == 1) return 1; assert(newSize == lengthAreaU_); int *indexColumnU = indexColumnU_.array(); if (CoinFromFile(indexColumnU, lengthAreaU_, fp, newSize) == 1) return 1; assert(newSize == lengthAreaU_); int *convertRowToColumnU = convertRowToColumnU_.array(); if (CoinFromFile(convertRowToColumnU, lengthAreaU_, fp, newSize) == 1) return 1; assert(newSize == lengthAreaU_ || (newSize == 0 && !convertRowToColumnU_.array())); CoinFactorizationDouble *elementByRowL = elementByRowL_.array(); if (CoinFromFile(elementByRowL, lengthAreaL_, fp, newSize) == 1) return 1; assert(newSize == lengthAreaL_ || (newSize == 0 && !elementByRowL_.array())); int *indexColumnL = indexColumnL_.array(); if (CoinFromFile(indexColumnL, lengthAreaL_, fp, newSize) == 1) return 1; assert(newSize == lengthAreaL_ || (newSize == 0 && !indexColumnL_.array())); int *startRowL = startRowL_.array(); if (CoinFromFile(startRowL, numberRows_ + 1, fp, newSize) == 1) return 1; assert(newSize == numberRows_ + 1 || (newSize == 0 && !startRowL_.array())); CoinFactorizationDouble *elementL = elementL_.array(); if (CoinFromFile(elementL, lengthAreaL_, fp, newSize) == 1) return 1; assert(newSize == lengthAreaL_); int *indexRowL = indexRowL_.array(); if (CoinFromFile(indexRowL, lengthAreaL_, fp, newSize) == 1) return 1; assert(newSize == lengthAreaL_); int *startColumnL = startColumnL_.array(); if (CoinFromFile(startColumnL, numberRows_ + 1, fp, newSize) == 1) return 1; assert(newSize == numberRows_ + 1); int *markRow = markRow_.array(); if (CoinFromFile(markRow, numberRows_, fp, newSize) == 1) return 1; assert(newSize == numberRows_); int *saveColumn = saveColumn_.array(); if (CoinFromFile(saveColumn, numberColumns_, fp, newSize) == 1) return 1; assert(newSize == numberColumns_); int *startColumnR = startColumnR_.array(); if (CoinFromFile(startColumnR, maximumPivots_ + 1, fp, newSize) == 1) return 1; assert(newSize == maximumPivots_ + 1 || (newSize == 0 && !startColumnR_.array())); int *startRowU = startRowU_.array(); if (CoinFromFile(startRowU, maximumRowsExtra_ + 1, fp, newSize) == 1) return 1; assert(newSize == maximumRowsExtra_ + 1 || (newSize == 0 && !startRowU_.array())); int *numberInRow = numberInRow_.array(); if (CoinFromFile(numberInRow, maximumRowsExtra_ + 1, fp, newSize) == 1) return 1; assert(newSize == maximumRowsExtra_ + 1); int *nextRow = nextRow_.array(); if (CoinFromFile(nextRow, maximumRowsExtra_ + 1, fp, newSize) == 1) return 1; assert(newSize == maximumRowsExtra_ + 1); int *lastRow = lastRow_.array(); if (CoinFromFile(lastRow, maximumRowsExtra_ + 1, fp, newSize) == 1) return 1; assert(newSize == maximumRowsExtra_ + 1); CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); if (CoinFromFile(pivotRegion, maximumRowsExtra_ + 1, fp, newSize) == 1) return 1; assert(newSize == maximumRowsExtra_ + 1); int *permuteBack = permuteBack_.array(); if (CoinFromFile(permuteBack, maximumRowsExtra_ + 1, fp, newSize) == 1) return 1; assert(newSize == maximumRowsExtra_ + 1 || (newSize == 0 && !permuteBack_.array())); int *permute = permute_.array(); if (CoinFromFile(permute, maximumRowsExtra_ + 1, fp, newSize) == 1) return 1; assert(newSize == maximumRowsExtra_ + 1 || (newSize == 0 && !permute_.array())); int *pivotColumnBack = pivotColumnBack_.array(); if (CoinFromFile(pivotColumnBack, maximumRowsExtra_ + 1, fp, newSize) == 1) return 1; assert(newSize == maximumRowsExtra_ + 1 || (newSize == 0 && !pivotColumnBack_.array())); int *startColumnU = startColumnU_.array(); if (CoinFromFile(startColumnU, maximumColumnsExtra_ + 1, fp, newSize) == 1) return 1; assert(newSize == maximumColumnsExtra_ + 1); int *numberInColumn = numberInColumn_.array(); if (CoinFromFile(numberInColumn, maximumColumnsExtra_ + 1, fp, newSize) == 1) return 1; assert(newSize == maximumColumnsExtra_ + 1); int *numberInColumnPlus = numberInColumnPlus_.array(); if (CoinFromFile(numberInColumnPlus, maximumColumnsExtra_ + 1, fp, newSize) == 1) return 1; assert(newSize == maximumColumnsExtra_ + 1); int *firstCount = firstCount_.array(); if (CoinFromFile(firstCount, biggerDimension_ + 2, fp, newSize) == 1) return 1; assert(newSize == biggerDimension_ + 2); int *nextCount = nextCount_.array(); if (CoinFromFile(nextCount, numberRows_ + numberColumns_, fp, newSize) == 1) return 1; assert(newSize == numberRows_ + numberColumns_); int *lastCount = lastCount_.array(); if (CoinFromFile(lastCount, numberRows_ + numberColumns_, fp, newSize) == 1) return 1; assert(newSize == numberRows_ + numberColumns_); int *pivotRowL = pivotRowL_.array(); if (CoinFromFile(pivotRowL, numberRows_ + 1, fp, newSize) == 1) return 1; assert(newSize == numberRows_ + 1); int *pivotColumn = pivotColumn_.array(); if (CoinFromFile(pivotColumn, maximumColumnsExtra_ + 1, fp, newSize) == 1) return 1; assert(newSize == maximumColumnsExtra_ + 1); int *nextColumn = nextColumn_.array(); if (CoinFromFile(nextColumn, maximumColumnsExtra_ + 1, fp, newSize) == 1) return 1; assert(newSize == maximumColumnsExtra_ + 1); int *lastColumn = lastColumn_.array(); if (CoinFromFile(lastColumn, maximumColumnsExtra_ + 1, fp, newSize) == 1) return 1; assert(newSize == maximumColumnsExtra_ + 1); if (CoinFromFile(denseAreaAddress_, numberDense_ * numberDense_, fp, newSize) == 1) return 1; assert(newSize == numberDense_ * numberDense_); if (CoinFromFile(densePermute_, numberDense_, fp, newSize) == 1) return 1; assert(newSize == numberDense_); lengthAreaR_ = space; elementR_ = elementL_.array() + lengthL_; indexRowR_ = indexRowL_.array() + lengthL_; fclose(fp); if (factorIt) { if (biasLU_ >= 3 || numberRows_ != numberColumns_) preProcess(2); else preProcess(3); // no row copy factor(); } } return 0; } #endif // factorSparse. Does sparse phase of factorization //return code is <0 error, 0= finished int CoinFactorization::factorSparseLarge() { int *indexRow = indexRowU_.array(); int *indexColumn = indexColumnU_.array(); CoinFactorizationDouble *element = elementU_.array(); int count = 1; workArea_.conditionalNew(numberRows_); CoinFactorizationDouble *workArea = workArea_.array(); #ifndef NDEBUG counter1++; #endif // when to go dense int denseThreshold = abs(denseThreshold_); CoinZeroN(workArea, numberRows_); //get space for bit work area int workSize = 1000; workArea2_.conditionalNew(workSize); unsigned int *workArea2 = workArea2_.array(); //set markRow so no rows updated int *markRow = markRow_.array(); CoinFillN(markRow, numberRows_, COIN_INT_MAX - 10 + 1); int status = 0; //do slacks first int *numberInRow = numberInRow_.array(); int *numberInColumn = numberInColumn_.array(); int *numberInColumnPlus = numberInColumnPlus_.array(); int *startColumnU = startColumnU_.array(); int *startColumnL = startColumnL_.array(); if (biasLU_ < 3 && numberColumns_ == numberRows_) { int iPivotColumn; int *pivotColumn = pivotColumn_.array(); int *nextRow = nextRow_.array(); int *lastRow = lastRow_.array(); for (iPivotColumn = 0; iPivotColumn < numberColumns_; iPivotColumn++) { if (numberInColumn[iPivotColumn] == 1) { int start = startColumnU[iPivotColumn]; CoinFactorizationDouble value = element[start]; if (value == slackValue_ && numberInColumnPlus[iPivotColumn] == 0) { // treat as slack int iRow = indexRow[start]; // but only if row not marked if (numberInRow[iRow] > 0) { totalElements_ -= numberInRow[iRow]; //take out this bit of indexColumnU int next = nextRow[iRow]; int last = lastRow[iRow]; nextRow[last] = next; lastRow[next] = last; nextRow[iRow] = numberGoodU_; //use for permute lastRow[iRow] = -2; //mark //modify linked list for pivots deleteLink(iRow); numberInRow[iRow] = -1; numberInColumn[iPivotColumn] = 0; numberGoodL_++; startColumnL[numberGoodL_] = 0; pivotColumn[numberGoodU_] = iPivotColumn; numberGoodU_++; } } } } // redo preProcess(4); CoinFillN(markRow, numberRows_, COIN_INT_MAX - 10 + 1); } numberSlacks_ = numberGoodU_; int *nextCount = nextCount_.array(); int *firstCount = firstCount_.array(); int *startRow = startRowU_.array(); int *startColumn = startColumnU; //double *elementL = elementL_.array(); //int *indexRowL = indexRowL_.array(); //int *saveColumn = saveColumn_.array(); //int *nextRow = nextRow_.array(); //int *lastRow = lastRow_.array() ; double pivotTolerance = pivotTolerance_; int numberTrials = numberTrials_; int numberRows = numberRows_; // Put column singletons first - (if false) separateLinks(1, (biasLU_ > 1)); #ifndef NDEBUG int counter2 = 0; #endif while (count <= biggerDimension_) { #ifndef NDEBUG counter2++; int badRow = -1; if (counter1 == -1 && counter2 >= 0) { // check counts consistent for (int iCount = 1; iCount < numberRows_; iCount++) { int look = firstCount[iCount]; while (look >= 0) { if (look < numberRows_) { int iRow = look; if (iRow == badRow) printf("row count for row %d is %d\n", iCount, iRow); if (numberInRow[iRow] != iCount) { printf("failed debug on %d entry to factorSparse and %d try\n", counter1, counter2); printf("row %d - count %d number %d\n", iRow, iCount, numberInRow[iRow]); abort(); } look = nextCount[look]; } else { int iColumn = look - numberRows; if (numberInColumn[iColumn] != iCount) { printf("failed debug on %d entry to factorSparse and %d try\n", counter1, counter2); printf("column %d - count %d number %d\n", iColumn, iCount, numberInColumn[iColumn]); abort(); } look = nextCount[look]; } } } } #endif int minimumCount = COIN_INT_MAX; double minimumCost = COIN_DBL_MAX; int iPivotRow = -1; int iPivotColumn = -1; int pivotRowPosition = -1; int pivotColumnPosition = -1; int look = firstCount[count]; int trials = 0; int *pivotColumn = pivotColumn_.array(); if (count == 1 && firstCount[1] >= 0 && !biasLU_) { //do column singletons first to put more in U while (look >= 0) { if (look < numberRows_) { look = nextCount[look]; } else { int iColumn = look - numberRows_; assert(numberInColumn[iColumn] == count); int start = startColumnU[iColumn]; int iRow = indexRow[start]; iPivotRow = iRow; pivotRowPosition = start; iPivotColumn = iColumn; assert(iPivotRow >= 0 && iPivotColumn >= 0); pivotColumnPosition = -1; look = -1; break; } } /* endwhile */ if (iPivotRow < 0) { //back to singletons look = firstCount[1]; } } while (look >= 0) { if (look < numberRows_) { int iRow = look; #ifndef NDEBUG if (numberInRow[iRow] != count) { printf("failed on %d entry to factorSparse and %d try\n", counter1, counter2); printf("row %d - count %d number %d\n", iRow, count, numberInRow[iRow]); abort(); } #endif look = nextCount[look]; bool rejected = false; int start = startRow[iRow]; int end = start + count; int i; for (i = start; i < end; i++) { int iColumn = indexColumn[i]; assert(numberInColumn[iColumn] > 0); double cost = (count - 1) * numberInColumn[iColumn]; if (cost < minimumCost) { int where = startColumn[iColumn]; CoinFactorizationDouble minimumValue = element[where]; minimumValue = fabs(minimumValue) * pivotTolerance; while (indexRow[where] != iRow) { where++; } /* endwhile */ assert(where < startColumn[iColumn] + numberInColumn[iColumn]); CoinFactorizationDouble value = element[where]; value = fabs(value); if (value >= minimumValue) { minimumCost = cost; minimumCount = numberInColumn[iColumn]; iPivotRow = iRow; pivotRowPosition = -1; iPivotColumn = iColumn; assert(iPivotRow >= 0 && iPivotColumn >= 0); pivotColumnPosition = i; rejected = false; if (minimumCount < count) { look = -1; break; } } else if (iPivotRow == -1) { rejected = true; } } } trials++; if (trials >= numberTrials && iPivotRow >= 0) { look = -1; break; } if (rejected) { //take out for moment //eligible when row changes deleteLink(iRow); addLink(iRow, biggerDimension_ + 1); } } else { int iColumn = look - numberRows; assert(numberInColumn[iColumn] == count); look = nextCount[look]; int start = startColumn[iColumn]; int end = start + numberInColumn[iColumn]; CoinFactorizationDouble minimumValue = element[start]; minimumValue = fabs(minimumValue) * pivotTolerance; int i; for (i = start; i < end; i++) { CoinFactorizationDouble value = element[i]; value = fabs(value); if (value >= minimumValue) { int iRow = indexRow[i]; int nInRow = numberInRow[iRow]; assert(nInRow > 0); double cost = (count - 1) * nInRow; if (cost < minimumCost) { minimumCost = cost; minimumCount = nInRow; iPivotRow = iRow; pivotRowPosition = i; iPivotColumn = iColumn; assert(iPivotRow >= 0 && iPivotColumn >= 0); pivotColumnPosition = -1; if (minimumCount <= count + 1) { look = -1; break; } } } } trials++; if (trials >= numberTrials && iPivotRow >= 0) { look = -1; break; } } } /* endwhile */ if (iPivotRow >= 0) { if (iPivotRow >= 0) { int numberDoRow = numberInRow[iPivotRow] - 1; int numberDoColumn = numberInColumn[iPivotColumn] - 1; totalElements_ -= (numberDoRow + numberDoColumn + 1); if (numberDoColumn > 0) { if (numberDoRow > 0) { if (numberDoColumn > 1) { // if (1) { //need to adjust more for cache and SMP //allow at least 4 extra int increment = numberDoColumn + 1 + 4; if (increment & 15) { increment = increment & (~15); increment += 16; } int increment2 = (increment + COINFACTORIZATION_BITS_PER_INT - 1) >> COINFACTORIZATION_SHIFT_PER_INT; int size = increment2 * numberDoRow; if (size > workSize) { workSize = size; workArea2_.conditionalNew(workSize); workArea2 = workArea2_.array(); } bool goodPivot; //might be able to do better by permuting #ifndef UGLY_COIN_FACTOR_CODING //branch out to best pivot routine goodPivot = pivot(iPivotRow, iPivotColumn, pivotRowPosition, pivotColumnPosition, workArea, workArea2, increment2, markRow, LARGE_SET); #else #define FAC_SET LARGE_SET #include "CoinFactorization.hpp" #undef FAC_SET #endif if (!goodPivot) { status = -99; count = biggerDimension_ + 1; break; } } else { if (!pivotOneOtherRow(iPivotRow, iPivotColumn)) { status = -99; count = biggerDimension_ + 1; break; } } } else { assert(!numberDoRow); if (!pivotRowSingleton(iPivotRow, iPivotColumn)) { status = -99; count = biggerDimension_ + 1; break; } } } else { assert(!numberDoColumn); if (!pivotColumnSingleton(iPivotRow, iPivotColumn)) { status = -99; count = biggerDimension_ + 1; break; } } assert(nextRow_.array()[iPivotRow] == numberGoodU_); pivotColumn[numberGoodU_] = iPivotColumn; numberGoodU_++; // This should not need to be trapped here - but be safe if (numberGoodU_ == numberRows_) count = biggerDimension_ + 1; } #if COIN_DEBUG == 2 checkConsistency(); #endif #if 0 // Even if no dense code may be better to use naive dense if (!denseThreshold_&&totalElements_>1000) { int leftRows=numberRows_-numberGoodU_; double full = leftRows; full *= full; assert (full>=0.0); double leftElements = totalElements_; double ratio; if (leftRows>2000) ratio=4.0; else ratio=3.0; if (ratio*leftElements>full) denseThreshold=1; } #endif if (denseThreshold) { // see whether to go dense int leftRows = numberRows_ - numberGoodU_; double full = leftRows; full *= full; assert(full >= 0.0); double leftElements = totalElements_; //if (leftRows==100) //printf("at 100 %d elements\n",totalElements_); double ratio; if (leftRows > 2000) { ratio = 4.0; #if COIN_DENSE_MULTIPLIER2 == 1 ratio = 3.5; #endif } else if (leftRows > 800) { ratio = 3.0; #if COIN_DENSE_MULTIPLIER2 == 1 ratio = 2.75; #endif } else if (leftRows > 256) { ratio = 2.0; } else { ratio = 1.5; } #if COIN_DENSE_MULTIPLIER2 > 10 ratio = 10000; #endif ratio *= COIN_DENSE_MULTIPLIER; if ((ratio * leftElements > full && leftRows > denseThreshold)) { #if COIN_ALIGN_DENSE == 2 if ((leftRows & 7) == 0) { #endif //return to do dense if (status != 0) break; int check = 0; for (int iColumn = 0; iColumn < numberColumns_; iColumn++) { if (numberInColumn[iColumn]) check++; } if (check != leftRows && denseThreshold_) { //printf("** mismatch %d columns left, %d rows\n",check,leftRows); denseThreshold = 0; } else { status = 2; if ((messageLevel_ & 4) != 0 && true) std::cout << " Went dense at " << leftRows << " rows " << totalElements_ << " " << full << " " << leftElements << std::endl; if (!denseThreshold_) denseThreshold_ = -check; // say how many break; } #if COIN_ALIGN_DENSE == 2 } #endif } } // start at 1 again count = 1; } else { //end of this - onto next count++; } } /* endwhile */ workArea_.conditionalDelete(); workArea2_.conditionalDelete(); return status; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinModel.hpp0000644000175200017520000012237013414454441016146 0ustar coincoin/* $Id: CoinModel.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinModel_H #define CoinModel_H #include "CoinModelUseful.hpp" #include "CoinMessageHandler.hpp" #include "CoinPackedMatrix.hpp" #include "CoinFinite.hpp" class CoinBaseModel { public: /**@name Constructors, destructor */ //@{ /// Default Constructor CoinBaseModel(); /// Copy constructor CoinBaseModel(const CoinBaseModel &rhs); /// Assignment operator CoinBaseModel &operator=(const CoinBaseModel &rhs); /// Clone virtual CoinBaseModel *clone() const = 0; /// Destructor virtual ~CoinBaseModel(); //@} /**@name For getting information */ //@{ /// Return number of rows inline int numberRows() const { return numberRows_; } /// Return number of columns inline int numberColumns() const { return numberColumns_; } /// Return number of elements virtual CoinBigIndex numberElements() const = 0; /** Returns the (constant) objective offset This is the RHS entry for the objective row */ inline double objectiveOffset() const { return objectiveOffset_; } /// Set objective offset inline void setObjectiveOffset(double value) { objectiveOffset_ = value; } /// Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore inline double optimizationDirection() const { return optimizationDirection_; } /// Set direction of optimization (1 - minimize, -1 - maximize, 0 - ignore inline void setOptimizationDirection(double value) { optimizationDirection_ = value; } /// Get print level 0 - off, 1 - errors, 2 - more inline int logLevel() const { return logLevel_; } /// Set print level 0 - off, 1 - errors, 2 - more void setLogLevel(int value); /// Return the problem name inline const char *getProblemName() const { return problemName_.c_str(); } /// Set problem name void setProblemName(const char *name); /// Set problem name void setProblemName(const std::string &name); /// Return the row block name inline const std::string &getRowBlock() const { return rowBlockName_; } /// Set row block name inline void setRowBlock(const std::string &name) { rowBlockName_ = name; } /// Return the column block name inline const std::string &getColumnBlock() const { return columnBlockName_; } /// Set column block name inline void setColumnBlock(const std::string &name) { columnBlockName_ = name; } /// Pass in message handler void setMessageHandler(CoinMessageHandler *handler); //@} protected: /**@name Data members */ //@{ /// Current number of rows int numberRows_; /// Current number of columns int numberColumns_; /// Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore double optimizationDirection_; /// Objective offset to be passed on double objectiveOffset_; /// Problem name std::string problemName_; /// Rowblock name std::string rowBlockName_; /// Columnblock name std::string columnBlockName_; /// Message handler (Passed in) CoinMessageHandler *handler_; /// Messages CoinMessages messages_; /** Print level. I could have gone for full message handling but this should normally be silent and lightweight. -1 - use passed in message handler 0 - no output 1 - on errors 2 - more detailed */ int logLevel_; //@} /// data }; /** This is a simple minded model which is stored in a format which makes it easier to construct and modify but not efficient for algorithms. It has to be passed across to ClpModel or OsiSolverInterface by addRows, addCol(umn)s or loadProblem. It may have up to four parts - 1) A matrix of doubles (or strings - see note A) 2) Column information including integer information and names 3) Row information including names 4) Quadratic objective (not implemented - but see A) This class is meant to make it more efficient to build a model. It is at its most efficient when all additions are done as addRow or as addCol but not mixed. If only 1 and 2 exist then solver.addColumns may be used to pass to solver, if only 1 and 3 exist then solver.addRows may be used. Otherwise solver.loadProblem must be used. If addRows and addColumns are mixed or if individual elements are set then the speed will drop to some extent and more memory will be used. It is also possible to iterate over existing elements and to access columns and rows by name. Again each of these use memory and cpu time. However memory is unlikely to be critical as most algorithms will use much more. Notes: A) Although this could be used to pass nonlinear information around the only use at present is to have named values e.g. value1 which can then be set to a value after model is created. I have no idea whether that could be useful but I thought it might be fun. Quadratic terms are allowed in strings! A solver could try and use this if so - the convention is that 0.5* quadratic is stored B) This class could be useful for modeling. */ class CoinModel : public CoinBaseModel { public: /**@name Useful methods for building model */ //@{ /** add a row - numberInRow may be zero */ void addRow(int numberInRow, const int *columns, const double *elements, double rowLower = -COIN_DBL_MAX, double rowUpper = COIN_DBL_MAX, const char *name = NULL); /// add a column - numberInColumn may be zero */ void addColumn(int numberInColumn, const int *rows, const double *elements, double columnLower = 0.0, double columnUpper = COIN_DBL_MAX, double objectiveValue = 0.0, const char *name = NULL, bool isInteger = false); /// add a column - numberInColumn may be zero */ inline void addCol(int numberInColumn, const int *rows, const double *elements, double columnLower = 0.0, double columnUpper = COIN_DBL_MAX, double objectiveValue = 0.0, const char *name = NULL, bool isInteger = false) { addColumn(numberInColumn, rows, elements, columnLower, columnUpper, objectiveValue, name, isInteger); } /// Sets value for row i and column j inline void operator()(int i, int j, double value) { setElement(i, j, value); } /// Sets value for row i and column j void setElement(int i, int j, double value); /** Gets sorted row - user must provide enough space (easiest is allocate number of columns). If column or element NULL then just returns number Returns number of elements */ int getRow(int whichRow, int *column, double *element); /** Gets sorted column - user must provide enough space (easiest is allocate number of rows). If row or element NULL then just returns number Returns number of elements */ int getColumn(int whichColumn, int *column, double *element); /// Sets quadratic value for column i and j void setQuadraticElement(int i, int j, double value); /// Sets value for row i and column j as string inline void operator()(int i, int j, const char *value) { setElement(i, j, value); } /// Sets value for row i and column j as string void setElement(int i, int j, const char *value); /// Associates a string with a value. Returns string id (or -1 if does not exist) int associateElement(const char *stringValue, double value); /** Sets rowLower (if row does not exist then all rows up to this are defined with default values and no elements) */ void setRowLower(int whichRow, double rowLower); /** Sets rowUpper (if row does not exist then all rows up to this are defined with default values and no elements) */ void setRowUpper(int whichRow, double rowUpper); /** Sets rowLower and rowUpper (if row does not exist then all rows up to this are defined with default values and no elements) */ void setRowBounds(int whichRow, double rowLower, double rowUpper); /** Sets name (if row does not exist then all rows up to this are defined with default values and no elements) */ void setRowName(int whichRow, const char *rowName); /** Sets columnLower (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnLower(int whichColumn, double columnLower); /** Sets columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnUpper(int whichColumn, double columnUpper); /** Sets columnLower and columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnBounds(int whichColumn, double columnLower, double columnUpper); /** Sets columnObjective (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnObjective(int whichColumn, double columnObjective); /** Sets name (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnName(int whichColumn, const char *columnName); /** Sets integer state (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnIsInteger(int whichColumn, bool columnIsInteger); /** Sets columnObjective (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setObjective(int whichColumn, double columnObjective) { setColumnObjective(whichColumn, columnObjective); } /** Sets integer state (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setIsInteger(int whichColumn, bool columnIsInteger) { setColumnIsInteger(whichColumn, columnIsInteger); } /** Sets integer (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setInteger(int whichColumn) { setColumnIsInteger(whichColumn, true); } /** Sets continuous (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setContinuous(int whichColumn) { setColumnIsInteger(whichColumn, false); } /** Sets columnLower (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setColLower(int whichColumn, double columnLower) { setColumnLower(whichColumn, columnLower); } /** Sets columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setColUpper(int whichColumn, double columnUpper) { setColumnUpper(whichColumn, columnUpper); } /** Sets columnLower and columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setColBounds(int whichColumn, double columnLower, double columnUpper) { setColumnBounds(whichColumn, columnLower, columnUpper); } /** Sets columnObjective (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setColObjective(int whichColumn, double columnObjective) { setColumnObjective(whichColumn, columnObjective); } /** Sets name (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setColName(int whichColumn, const char *columnName) { setColumnName(whichColumn, columnName); } /** Sets integer (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setColIsInteger(int whichColumn, bool columnIsInteger) { setColumnIsInteger(whichColumn, columnIsInteger); } /** Sets rowLower (if row does not exist then all rows up to this are defined with default values and no elements) */ void setRowLower(int whichRow, const char *rowLower); /** Sets rowUpper (if row does not exist then all rows up to this are defined with default values and no elements) */ void setRowUpper(int whichRow, const char *rowUpper); /** Sets columnLower (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnLower(int whichColumn, const char *columnLower); /** Sets columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnUpper(int whichColumn, const char *columnUpper); /** Sets columnObjective (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnObjective(int whichColumn, const char *columnObjective); /** Sets integer (if column does not exist then all columns up to this are defined with default values and no elements) */ void setColumnIsInteger(int whichColumn, const char *columnIsInteger); /** Sets columnObjective (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setObjective(int whichColumn, const char *columnObjective) { setColumnObjective(whichColumn, columnObjective); } /** Sets integer (if column does not exist then all columns up to this are defined with default values and no elements) */ inline void setIsInteger(int whichColumn, const char *columnIsInteger) { setColumnIsInteger(whichColumn, columnIsInteger); } /** Deletes all entries in row and bounds. Will be ignored by writeMps etc and will be packed down if asked for. */ void deleteRow(int whichRow); /** Deletes all entries in column and bounds and objective. Will be ignored by writeMps etc and will be packed down if asked for. */ void deleteColumn(int whichColumn); /** Deletes all entries in column and bounds. If last column the number of columns will be decremented and true returned. */ inline void deleteCol(int whichColumn) { deleteColumn(whichColumn); } /// Takes element out of matrix - returning position (<0 if not there); CoinBigIndex deleteElement(int row, int column); /// Takes element out of matrix when position known void deleteThisElement(int row, int column, CoinBigIndex position); /** Packs down all rows i.e. removes empty rows permanently. Empty rows have no elements and feasible bounds. returns number of rows deleted. */ int packRows(); /** Packs down all columns i.e. removes empty columns permanently. Empty columns have no elements and no objective. returns number of columns deleted. */ int packColumns(); /** Packs down all columns i.e. removes empty columns permanently. Empty columns have no elements and no objective. returns number of columns deleted. */ inline int packCols() { return packColumns(); } /** Packs down all rows and columns. i.e. removes empty rows and columns permanently. Empty rows have no elements and feasible bounds. Empty columns have no elements and no objective. returns number of rows+columns deleted. */ int pack(); /** Sets columnObjective array */ void setObjective(int numberColumns, const double *objective); /** Sets columnLower array */ void setColumnLower(int numberColumns, const double *columnLower); /** Sets columnLower array */ inline void setColLower(int numberColumns, const double *columnLower) { setColumnLower(numberColumns, columnLower); } /** Sets columnUpper array */ void setColumnUpper(int numberColumns, const double *columnUpper); /** Sets columnUpper array */ inline void setColUpper(int numberColumns, const double *columnUpper) { setColumnUpper(numberColumns, columnUpper); } /** Sets rowLower array */ void setRowLower(int numberRows, const double *rowLower); /** Sets rowUpper array */ void setRowUpper(int numberRows, const double *rowUpper); /** Write the problem in MPS format to a file with the given filename. \param compression can be set to three values to indicate what kind of file should be written
  • 0: plain text (default)
  • 1: gzip compressed (.gz is appended to \c filename)
  • 2: bzip2 compressed (.bz2 is appended to \c filename) (TODO)
If the library was not compiled with the requested compression then writeMps falls back to writing a plain text file. \param formatType specifies the precision to used for values in the MPS file
  • 0: normal precision (default)
  • 1: extra accuracy
  • 2: IEEE hex
\param numberAcross specifies whether 1 or 2 (default) values should be specified on every data line in the MPS file. not const as may change model e.g. fill in default bounds */ int writeMps(const char *filename, int compression = 0, int formatType = 0, int numberAcross = 2, bool keepStrings = false); /** Check two models against each other. Return nonzero if different. Ignore names if that set. May modify both models by cleaning up */ int differentModel(CoinModel &other, bool ignoreNames); //@} /**@name For structured models */ //@{ /// Pass in CoinPackedMatrix (and switch off element updates) void passInMatrix(const CoinPackedMatrix &matrix); /** Convert elements to CoinPackedMatrix (and switch off element updates). Returns number of errors */ int convertMatrix(); /// Return a pointer to CoinPackedMatrix (or NULL) inline const CoinPackedMatrix *packedMatrix() const { return packedMatrix_; } /// Return pointers to original rows (for decomposition) inline const int *originalRows() const { return rowType_; } /// Return pointers to original columns (for decomposition) inline const int *originalColumns() const { return columnType_; } //@} /**@name For getting information */ //@{ /// Return number of elements inline CoinBigIndex numberElements() const { return numberElements_; } /// Return elements as triples inline const CoinModelTriple *elements() const { return elements_; } /// Returns value for row i and column j inline double operator()(int i, int j) const { return getElement(i, j); } /// Returns value for row i and column j double getElement(int i, int j) const; /// Returns value for row rowName and column columnName inline double operator()(const char *rowName, const char *columnName) const { return getElement(rowName, columnName); } /// Returns value for row rowName and column columnName double getElement(const char *rowName, const char *columnName) const; /// Returns quadratic value for columns i and j double getQuadraticElement(int i, int j) const; /** Returns value for row i and column j as string. Returns NULL if does not exist. Returns "Numeric" if not a string */ const char *getElementAsString(int i, int j) const; /** Returns pointer to element for row i column j. Only valid until next modification. NULL if element does not exist */ double *pointer(int i, int j) const; /** Returns position in elements for row i column j. Only valid until next modification. -1 if element does not exist */ CoinBigIndex position(int i, int j) const; /** Returns first element in given row - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink firstInRow(int whichRow) const; /** Returns last element in given row - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink lastInRow(int whichRow) const; /** Returns first element in given column - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink firstInColumn(int whichColumn) const; /** Returns last element in given column - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink lastInColumn(int whichColumn) const; /** Returns next element in current row or column - index is -1 if none. Index is given by .index and value by .value. User could also tell because input.next would be NULL */ CoinModelLink next(CoinModelLink ¤t) const; /** Returns previous element in current row or column - index is -1 if none. Index is given by .index and value by .value. User could also tell because input.previous would be NULL May not be correct if matrix updated. */ CoinModelLink previous(CoinModelLink ¤t) const; /** Returns first element in given quadratic column - index is -1 if none. Index is given by .index and value by .value May not be correct if matrix updated. */ CoinModelLink firstInQuadraticColumn(int whichColumn) const; /** Returns last element in given quadratic column - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink lastInQuadraticColumn(int whichColumn) const; /** Gets rowLower (if row does not exist then -COIN_DBL_MAX) */ double getRowLower(int whichRow) const; /** Gets rowUpper (if row does not exist then +COIN_DBL_MAX) */ double getRowUpper(int whichRow) const; /** Gets name (if row does not exist then NULL) */ const char *getRowName(int whichRow) const; inline double rowLower(int whichRow) const { return getRowLower(whichRow); } /** Gets rowUpper (if row does not exist then COIN_DBL_MAX) */ inline double rowUpper(int whichRow) const { return getRowUpper(whichRow); } /** Gets name (if row does not exist then NULL) */ inline const char *rowName(int whichRow) const { return getRowName(whichRow); } /** Gets columnLower (if column does not exist then 0.0) */ double getColumnLower(int whichColumn) const; /** Gets columnUpper (if column does not exist then COIN_DBL_MAX) */ double getColumnUpper(int whichColumn) const; /** Gets columnObjective (if column does not exist then 0.0) */ double getColumnObjective(int whichColumn) const; /** Gets name (if column does not exist then NULL) */ const char *getColumnName(int whichColumn) const; /** Gets if integer (if column does not exist then false) */ bool getColumnIsInteger(int whichColumn) const; /** Gets columnLower (if column does not exist then 0.0) */ inline double columnLower(int whichColumn) const { return getColumnLower(whichColumn); } /** Gets columnUpper (if column does not exist then COIN_DBL_MAX) */ inline double columnUpper(int whichColumn) const { return getColumnUpper(whichColumn); } /** Gets columnObjective (if column does not exist then 0.0) */ inline double columnObjective(int whichColumn) const { return getColumnObjective(whichColumn); } /** Gets columnObjective (if column does not exist then 0.0) */ inline double objective(int whichColumn) const { return getColumnObjective(whichColumn); } /** Gets name (if column does not exist then NULL) */ inline const char *columnName(int whichColumn) const { return getColumnName(whichColumn); } /** Gets if integer (if column does not exist then false) */ inline bool columnIsInteger(int whichColumn) const { return getColumnIsInteger(whichColumn); } /** Gets if integer (if column does not exist then false) */ inline bool isInteger(int whichColumn) const { return getColumnIsInteger(whichColumn); } /** Gets columnLower (if column does not exist then 0.0) */ inline double getColLower(int whichColumn) const { return getColumnLower(whichColumn); } /** Gets columnUpper (if column does not exist then COIN_DBL_MAX) */ inline double getColUpper(int whichColumn) const { return getColumnUpper(whichColumn); } /** Gets columnObjective (if column does not exist then 0.0) */ inline double getColObjective(int whichColumn) const { return getColumnObjective(whichColumn); } /** Gets name (if column does not exist then NULL) */ inline const char *getColName(int whichColumn) const { return getColumnName(whichColumn); } /** Gets if integer (if column does not exist then false) */ inline bool getColIsInteger(int whichColumn) const { return getColumnIsInteger(whichColumn); } /** Gets rowLower (if row does not exist then -COIN_DBL_MAX) */ const char *getRowLowerAsString(int whichRow) const; /** Gets rowUpper (if row does not exist then +COIN_DBL_MAX) */ const char *getRowUpperAsString(int whichRow) const; inline const char *rowLowerAsString(int whichRow) const { return getRowLowerAsString(whichRow); } /** Gets rowUpper (if row does not exist then COIN_DBL_MAX) */ inline const char *rowUpperAsString(int whichRow) const { return getRowUpperAsString(whichRow); } /** Gets columnLower (if column does not exist then 0.0) */ const char *getColumnLowerAsString(int whichColumn) const; /** Gets columnUpper (if column does not exist then COIN_DBL_MAX) */ const char *getColumnUpperAsString(int whichColumn) const; /** Gets columnObjective (if column does not exist then 0.0) */ const char *getColumnObjectiveAsString(int whichColumn) const; /** Gets if integer (if column does not exist then false) */ const char *getColumnIsIntegerAsString(int whichColumn) const; /** Gets columnLower (if column does not exist then 0.0) */ inline const char *columnLowerAsString(int whichColumn) const { return getColumnLowerAsString(whichColumn); } /** Gets columnUpper (if column does not exist then COIN_DBL_MAX) */ inline const char *columnUpperAsString(int whichColumn) const { return getColumnUpperAsString(whichColumn); } /** Gets columnObjective (if column does not exist then 0.0) */ inline const char *columnObjectiveAsString(int whichColumn) const { return getColumnObjectiveAsString(whichColumn); } /** Gets columnObjective (if column does not exist then 0.0) */ inline const char *objectiveAsString(int whichColumn) const { return getColumnObjectiveAsString(whichColumn); } /** Gets if integer (if column does not exist then false) */ inline const char *columnIsIntegerAsString(int whichColumn) const { return getColumnIsIntegerAsString(whichColumn); } /** Gets if integer (if column does not exist then false) */ inline const char *isIntegerAsString(int whichColumn) const { return getColumnIsIntegerAsString(whichColumn); } /// Row index from row name (-1 if no names or no match) int row(const char *rowName) const; /// Column index from column name (-1 if no names or no match) int column(const char *columnName) const; /// Returns type inline int type() const { return type_; } /// returns unset value inline double unsetValue() const { return -1.23456787654321e-97; } /// Creates a packed matrix - return number of errors int createPackedMatrix(CoinPackedMatrix &matrix, const double *associated); /** Fills in startPositive and startNegative with counts for +-1 matrix. If not +-1 then startPositive[0]==-1 otherwise counts and startPositive[numberColumns]== size - return number of errors */ int countPlusMinusOne(CoinBigIndex *startPositive, CoinBigIndex *startNegative, const double *associated); /** Creates +-1 matrix given startPositive and startNegative counts for +-1 matrix. */ void createPlusMinusOne(CoinBigIndex *startPositive, CoinBigIndex *startNegative, int *indices, const double *associated); /// Creates copies of various arrays - return number of errors int createArrays(double *&rowLower, double *&rowUpper, double *&columnLower, double *&columnUpper, double *&objective, int *&integerType, double *&associated); /// Says if strings exist inline bool stringsExist() const { return string_.numberItems() != 0; } /// Return string array inline const CoinModelHash *stringArray() const { return &string_; } /// Returns associated array inline double *associatedArray() const { return associated_; } /// Return rowLower array inline double *rowLowerArray() const { return rowLower_; } /// Return rowUpper array inline double *rowUpperArray() const { return rowUpper_; } /// Return columnLower array inline double *columnLowerArray() const { return columnLower_; } /// Return columnUpper array inline double *columnUpperArray() const { return columnUpper_; } /// Return objective array inline double *objectiveArray() const { return objective_; } /// Return integerType array inline int *integerTypeArray() const { return integerType_; } /// Return row names array inline const CoinModelHash *rowNames() const { return &rowName_; } /// Return column names array inline const CoinModelHash *columnNames() const { return &columnName_; } /// Reset row names inline void zapRowNames() { rowName_ = CoinModelHash(); } /// Reset column names inline void zapColumnNames() { columnName_ = CoinModelHash(); } /// Returns array of 0 or nonzero if can be a cut (or returns NULL) inline const int *cutMarker() const { return cut_; } /// Direction of optimization (1 - minimize, -1 - maximize, 0 - ignore inline double optimizationDirection() const { return optimizationDirection_; } /// Set direction of optimization (1 - minimize, -1 - maximize, 0 - ignore inline void setOptimizationDirection(double value) { optimizationDirection_ = value; } /// Return pointer to more information inline void *moreInfo() const { return moreInfo_; } /// Set pointer to more information inline void setMoreInfo(void *info) { moreInfo_ = info; } /** Returns which parts of model are set 1 - matrix 2 - rhs 4 - row names 8 - column bounds and/or objective 16 - column names 32 - integer types */ int whatIsSet() const; //@} /**@name for block models - matrix will be CoinPackedMatrix */ //@{ /*! \brief Load in a problem by copying the arguments. The constraints on the rows are given by lower and upper bounds. If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
Note that the default values for rowub and rowlb produce the constraint -infty <= ax <= infty. This is probably not what you want. */ void loadBlock(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /*! \brief Load in a problem by copying the arguments. The constraints on the rows are given by sense/rhs/range triplets. If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
Note that the default values for rowsen, rowrhs, and rowrng produce the constraint ax >= 0. */ void loadBlock(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); /*! \brief Load in a problem by copying the arguments. The constraint matrix is is specified with standard column-major column starts / row indices / coefficients vectors. The constraints on the rows are given by lower and upper bounds. The matrix vectors must be gap-free. Note that start must have numcols+1 entries so that the length of the last column can be calculated as start[numcols]-start[numcols-1]. See the previous loadBlock method using rowlb and rowub for default argument values. */ void loadBlock(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /*! \brief Load in a problem by copying the arguments. The constraint matrix is is specified with standard column-major column starts / row indices / coefficients vectors. The constraints on the rows are given by sense/rhs/range triplets. The matrix vectors must be gap-free. Note that start must have numcols+1 entries so that the length of the last column can be calculated as start[numcols]-start[numcols-1]. See the previous loadBlock method using sense/rhs/range for default argument values. */ void loadBlock(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); //@} /**@name Constructors, destructor */ //@{ /** Default constructor. */ CoinModel(); /** Constructor with sizes. */ CoinModel(int firstRows, int firstColumns, CoinBigIndex firstElements, bool noNames = false); /** Read a problem in MPS or GAMS format from the given filename. */ CoinModel(const char *fileName, int allowStrings = 0); /** Read a problem from AMPL nl file NOTE - as I can't work out configure etc the source code is in Cbc_ampl.cpp! */ CoinModel(int nonLinear, const char *fileName, const void *info); /// From arrays CoinModel(int numberRows, int numberColumns, const CoinPackedMatrix *matrix, const double *rowLower, const double *rowUpper, const double *columnLower, const double *columnUpper, const double *objective); /// Clone virtual CoinBaseModel *clone() const; /** Destructor */ virtual ~CoinModel(); //@} /**@name Copy method */ //@{ /** The copy constructor. */ CoinModel(const CoinModel &); /// = CoinModel &operator=(const CoinModel &); //@} /**@name For debug */ //@{ /// Checks that links are consistent void validateLinks() const; //@} private: /// Resize void resize(int maximumRows, int maximumColumns, CoinBigIndex maximumElements); /// Fill in default row information void fillRows(int which, bool forceCreation, bool fromAddRow = false); /// Fill in default column information void fillColumns(int which, bool forceCreation, bool fromAddColumn = false); /** Fill in default linked list information (1= row, 2 = column) Marked as const as list is mutable */ void fillList(int which, CoinModelLinkedList &list, int type) const; /** Create a linked list and synchronize free type 1 for row 2 for column Marked as const as list is mutable */ void createList(int type) const; /// Adds one string, returns index int addString(const char *string); /** Gets a double from a string possibly containing named strings, returns unset if not found */ double getDoubleFromString(CoinYacc &info, const char *string); /// Frees value memory void freeStringMemory(CoinYacc &info); public: /// Fills in all associated - returning number of errors int computeAssociated(double *associated); /** Gets correct form for a quadratic row - user to delete If row is not quadratic then returns which other variables are involved with tiny (1.0e-100) elements and count of total number of variables which could not be put in quadratic form */ CoinPackedMatrix *quadraticRow(int rowNumber, double *linear, int &numberBad) const; /// Replaces a quadratic row void replaceQuadraticRow(int rowNumber, const double *linear, const CoinPackedMatrix *quadraticPart); /** If possible return a model where if all variables marked nonzero are fixed the problem will be linear. At present may only work if quadratic. Returns NULL if not possible */ CoinModel *reorder(const char *mark) const; /** Expands out all possible combinations for a knapsack If buildObj NULL then just computes space needed - returns number elements On entry numberOutput is maximum allowed, on exit it is number needed or -1 (as will be number elements) if maximum exceeded. numberOutput will have at least space to return values which reconstruct input. Rows returned will be original rows but no entries will be returned for any rows all of whose entries are in knapsack. So up to user to allow for this. If reConstruct >=0 then returns number of entrie which make up item "reConstruct" in expanded knapsack. Values in buildRow and buildElement; */ int expandKnapsack(int knapsackRow, int &numberOutput, double *buildObj, CoinBigIndex *buildStart, int *buildRow, double *buildElement, int reConstruct = -1) const; /// Sets cut marker array void setCutMarker(int size, const int *marker); /// Sets priority array void setPriorities(int size, const int *priorities); /// priorities (given for all columns (-1 if not integer) inline const int *priorities() const { return priority_; } /// For decomposition set original row and column indices void setOriginalIndices(const int *row, const int *column); private: /** Read a problem from AMPL nl file so not constructor so gdb will work */ void gdb(int nonLinear, const char *fileName, const void *info); /// returns jColumn (-2 if linear term, -1 if unknown) and coefficient int decodeBit(char *phrase, char *&nextPhrase, double &coefficient, bool ifFirst) const; /// Aborts with message about packedMatrix void badType() const; /**@name Data members */ //@{ /// Maximum number of rows int maximumRows_; /// Maximum number of columns int maximumColumns_; /// Current number of elements CoinBigIndex numberElements_; /// Maximum number of elements CoinBigIndex maximumElements_; /// Current number of quadratic elements CoinBigIndex numberQuadraticElements_; /// Maximum number of quadratic elements CoinBigIndex maximumQuadraticElements_; /// Row lower double *rowLower_; /// Row upper double *rowUpper_; /// Row names CoinModelHash rowName_; /** Row types. Has information - at present bit 0 - rowLower is a string bit 1 - rowUpper is a string NOTE - if converted to CoinPackedMatrix - may be indices of original rows (i.e. when decomposed) */ int *rowType_; /// Objective double *objective_; /// Column Lower double *columnLower_; /// Column Upper double *columnUpper_; /// Column names CoinModelHash columnName_; /// Integer information int *integerType_; /// Strings CoinModelHash string_; /** Column types. Has information - at present bit 0 - columnLower is a string bit 1 - columnUpper is a string bit 2 - objective is a string bit 3 - integer setting is a string NOTE - if converted to CoinPackedMatrix - may be indices of original columns (i.e. when decomposed) */ int *columnType_; /// If simple then start of each row/column CoinBigIndex *start_; /// Actual elements CoinModelTriple *elements_; /// Actual elements as CoinPackedMatrix CoinPackedMatrix *packedMatrix_; /// Hash for elements mutable CoinModelHash2 hashElements_; /// Linked list for rows mutable CoinModelLinkedList rowList_; /// Linked list for columns mutable CoinModelLinkedList columnList_; /// Actual quadratic elements (always linked lists) CoinModelTriple *quadraticElements_; /// Hash for quadratic elements mutable CoinModelHash2 hashQuadraticElements_; /// Array for sorting indices int *sortIndices_; /// Array for sorting elements double *sortElements_; /// Size of sort arrays int sortSize_; /// Linked list for quadratic rows mutable CoinModelLinkedList quadraticRowList_; /// Linked list for quadratic columns mutable CoinModelLinkedList quadraticColumnList_; /// Size of associated values int sizeAssociated_; /// Associated values double *associated_; /// Number of SOS - all these are done in one go e.g. from ampl int numberSOS_; /// SOS starts int *startSOS_; /// SOS members int *memberSOS_; /// SOS type int *typeSOS_; /// SOS priority int *prioritySOS_; /// SOS reference double *referenceSOS_; /// priorities (given for all columns (-1 if not integer) int *priority_; /// Nonzero if row is cut - done in one go e.g. from ampl int *cut_; /// Pointer to more information void *moreInfo_; /** Type of build - -1 unset, 0 for row, 1 for column, 2 linked. 3 matrix is CoinPackedMatrix (and at present can't be modified); */ mutable int type_; /// True if no names EVER being used (for users who know what they are doing) bool noNames_; /** Links present (could be tested by sizes of objects) 0 - none, 1 - row links, 2 - column links, 3 - both */ mutable int links_; //@} }; /// Just function of single variable x double getFunctionValueFromString(const char *string, const char *x, double xValue); /// faster version double getDoubleFromString(CoinYacc &info, const char *string, const char *x, double xValue); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/config_coinutils.h.in0000644000175200017520000000134712450335570017700 0ustar coincoin/* inc/config_coinutils.h.in. */ #ifndef __CONFIG_COINUTILS_H__ #define __CONFIG_COINUTILS_H__ /* Define to 1 if stdint.h is available for CoinUtils */ #undef COINUTILS_HAS_STDINT_H /* Define to 1 if stdint.h is available for CoinUtils */ #undef COINUTILS_HAS_CSTDINT /* Version number of project */ #undef COINUTILS_VERSION /* Major Version number of project */ #undef COINUTILS_VERSION_MAJOR /* Minor Version number of project */ #undef COINUTILS_VERSION_MINOR /* Release Version number of project */ #undef COINUTILS_VERSION_RELEASE /* Define to 64bit integer type */ #undef COIN_INT64_T /* Define to integer type capturing pointer */ #undef COIN_INTPTR_T /* Define to 64bit unsigned integer type */ #undef COIN_UINT64_T #endif DyLP-1.10.4/CoinUtils/src/CoinWarmStartVector.hpp0000644000175200017520000003211113414454441020206 0ustar coincoin/* $Id: CoinWarmStartVector.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinWarmStartVector_H #define CoinWarmStartVector_H #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include #include #include "CoinHelperFunctions.hpp" #include "CoinWarmStart.hpp" //############################################################################# /** WarmStart information that is only a vector */ template < typename T > class CoinWarmStartVector : public virtual CoinWarmStart { protected: inline void gutsOfDestructor() { delete[] values_; } inline void gutsOfCopy(const CoinWarmStartVector< T > &rhs) { size_ = rhs.size_; values_ = new T[size_]; CoinDisjointCopyN(rhs.values_, size_, values_); } public: /// return the size of the vector int size() const { return size_; } /// return a pointer to the array of vectors const T *values() const { return values_; } /** Assign the vector to be the warmstart information. In this method the object assumes ownership of the pointer and upon return #vector will be a NULL pointer. If copying is desirable use the constructor. */ void assignVector(int size, T *&vec) { size_ = size; delete[] values_; values_ = vec; vec = NULL; } CoinWarmStartVector() : size_(0) , values_(NULL) { } CoinWarmStartVector(int size, const T *vec) : size_(size) , values_(new T[size]) { CoinDisjointCopyN(vec, size, values_); } CoinWarmStartVector(const CoinWarmStartVector &rhs) { gutsOfCopy(rhs); } CoinWarmStartVector &operator=(const CoinWarmStartVector &rhs) { if (this != &rhs) { gutsOfDestructor(); gutsOfCopy(rhs); } return *this; } inline void swap(CoinWarmStartVector &rhs) { if (this != &rhs) { std::swap(size_, rhs.size_); std::swap(values_, rhs.values_); } } /** `Virtual constructor' */ virtual CoinWarmStart *clone() const { return new CoinWarmStartVector(*this); } virtual ~CoinWarmStartVector() { gutsOfDestructor(); } /*! \brief Clear the data Make it appear as if the warmstart was just created using the default constructor. */ inline void clear() { size_ = 0; delete[] values_; values_ = NULL; } /*! \name Vector warm start `diff' methods */ //@{ /*! \brief Generate a `diff' that can convert the warm start passed as a parameter to the warm start specified by \c this. The capabilities are limited: the basis passed as a parameter can be no larger than the basis pointed to by \c this. */ virtual CoinWarmStartDiff * generateDiff(const CoinWarmStart *const oldCWS) const; /*! \brief Apply \p diff to this warm start. Update this warm start by applying \p diff. It's assumed that the allocated capacity of the warm start is sufficiently large. */ virtual void applyDiff(const CoinWarmStartDiff *const cwsdDiff); //@} private: ///@name Private data members //@{ /// the size of the vector int size_; /// the vector itself T *values_; //@} }; //============================================================================= /*! \class CoinWarmStartVectorDiff \brief A `diff' between two CoinWarmStartVector objects This class exists in order to hide from the world the details of calculating and representing a `diff' between two CoinWarmStartVector objects. For convenience, assignment, cloning, and deletion are visible to the world, and default and copy constructors are made available to derived classes. Knowledge of the rest of this structure, and of generating and applying diffs, is restricted to the friend functions CoinWarmStartVector::generateDiff() and CoinWarmStartVector::applyDiff(). The actual data structure is a pair of vectors, #diffNdxs_ and #diffVals_. */ template < typename T > class CoinWarmStartVectorDiff : public virtual CoinWarmStartDiff { friend CoinWarmStartDiff * CoinWarmStartVector< T >::generateDiff(const CoinWarmStart *const oldCWS) const; friend void CoinWarmStartVector< T >::applyDiff(const CoinWarmStartDiff *const diff); public: /*! \brief `Virtual constructor' */ virtual CoinWarmStartDiff *clone() const { return new CoinWarmStartVectorDiff(*this); } /*! \brief Assignment */ virtual CoinWarmStartVectorDiff & operator=(const CoinWarmStartVectorDiff< T > &rhs); /*! \brief Destructor */ virtual ~CoinWarmStartVectorDiff() { delete[] diffNdxs_; delete[] diffVals_; } inline void swap(CoinWarmStartVectorDiff &rhs) { if (this != &rhs) { std::swap(sze_, rhs.sze_); std::swap(diffNdxs_, rhs.diffNdxs_); std::swap(diffVals_, rhs.diffVals_); } } /*! \brief Default constructor */ CoinWarmStartVectorDiff() : sze_(0) , diffNdxs_(0) , diffVals_(NULL) { } /*! \brief Copy constructor For convenience when copying objects containing CoinWarmStartVectorDiff objects. But consider whether you should be using #clone() to retain polymorphism. */ CoinWarmStartVectorDiff(const CoinWarmStartVectorDiff< T > &rhs); /*! \brief Standard constructor */ CoinWarmStartVectorDiff(int sze, const unsigned int *const diffNdxs, const T *const diffVals); /*! \brief Clear the data Make it appear as if the diff was just created using the default constructor. */ inline void clear() { sze_ = 0; delete[] diffNdxs_; diffNdxs_ = NULL; delete[] diffVals_; diffVals_ = NULL; } private: /*! \brief Number of entries (and allocated capacity), in units of \c T. */ int sze_; /*! \brief Array of diff indices */ unsigned int *diffNdxs_; /*! \brief Array of diff values */ T *diffVals_; }; //############################################################################## template < typename T, typename U > class CoinWarmStartVectorPair : public virtual CoinWarmStart { private: CoinWarmStartVector< T > t_; CoinWarmStartVector< U > u_; public: inline int size0() const { return t_.size(); } inline int size1() const { return u_.size(); } inline const T *values0() const { return t_.values(); } inline const U *values1() const { return u_.values(); } inline void assignVector0(int size, T *&vec) { t_.assignVector(size, vec); } inline void assignVector1(int size, U *&vec) { u_.assignVector(size, vec); } CoinWarmStartVectorPair() {} CoinWarmStartVectorPair(int s0, const T *v0, int s1, const U *v1) : t_(s0, v0) , u_(s1, v1) { } CoinWarmStartVectorPair(const CoinWarmStartVectorPair< T, U > &rhs) : t_(rhs.t_) , u_(rhs.u_) { } CoinWarmStartVectorPair &operator=(const CoinWarmStartVectorPair< T, U > &rhs) { if (this != &rhs) { t_ = rhs.t_; u_ = rhs.u_; } return *this; } inline void swap(CoinWarmStartVectorPair< T, U > &rhs) { t_.swap(rhs.t_); u_.swap(rhs.u_); } virtual CoinWarmStart *clone() const { return new CoinWarmStartVectorPair(*this); } virtual ~CoinWarmStartVectorPair() {} inline void clear() { t_.clear(); u_.clear(); } virtual CoinWarmStartDiff * generateDiff(const CoinWarmStart *const oldCWS) const; virtual void applyDiff(const CoinWarmStartDiff *const cwsdDiff); }; //============================================================================= template < typename T, typename U > class CoinWarmStartVectorPairDiff : public virtual CoinWarmStartDiff { friend CoinWarmStartDiff * CoinWarmStartVectorPair< T, U >::generateDiff(const CoinWarmStart *const oldCWS) const; friend void CoinWarmStartVectorPair< T, U >::applyDiff(const CoinWarmStartDiff *const diff); private: CoinWarmStartVectorDiff< T > tdiff_; CoinWarmStartVectorDiff< U > udiff_; public: CoinWarmStartVectorPairDiff() {} CoinWarmStartVectorPairDiff(const CoinWarmStartVectorPairDiff< T, U > &rhs) : tdiff_(rhs.tdiff_) , udiff_(rhs.udiff_) { } virtual ~CoinWarmStartVectorPairDiff() {} virtual CoinWarmStartVectorPairDiff & operator=(const CoinWarmStartVectorPairDiff< T, U > &rhs) { if (this != &rhs) { tdiff_ = rhs.tdiff_; udiff_ = rhs.udiff_; } return *this; } virtual CoinWarmStartDiff *clone() const { return new CoinWarmStartVectorPairDiff(*this); } inline void swap(CoinWarmStartVectorPairDiff< T, U > &rhs) { tdiff_.swap(rhs.tdiff_); udiff_.swap(rhs.udiff_); } inline void clear() { tdiff_.clear(); udiff_.clear(); } }; //############################################################################## //############################################################################# /* Generate a `diff' that can convert the warm start passed as a parameter to the warm start specified by this. The capabilities are limited: the basis passed as a parameter can be no larger than the basis pointed to by this. */ template < typename T > CoinWarmStartDiff * CoinWarmStartVector< T >::generateDiff(const CoinWarmStart *const oldCWS) const { /* Make sure the parameter is CoinWarmStartVector or derived class. */ const CoinWarmStartVector< T > *oldVector = dynamic_cast< const CoinWarmStartVector< T > * >(oldCWS); if (!oldVector) { throw CoinError("Old warm start not derived from CoinWarmStartVector.", "generateDiff", "CoinWarmStartVector"); } const CoinWarmStartVector< T > *newVector = this; /* Make sure newVector is equal or bigger than oldVector. Calculate the worst case number of diffs and allocate vectors to hold them. */ const int oldCnt = oldVector->size(); const int newCnt = newVector->size(); assert(newCnt >= oldCnt); unsigned int *diffNdx = new unsigned int[newCnt]; T *diffVal = new T[newCnt]; /* Scan the vector vectors. For the portion of the vectors which overlap, create diffs. Then add any additional entries from newVector. */ const T *oldVal = oldVector->values(); const T *newVal = newVector->values(); int numberChanged = 0; int i; for (i = 0; i < oldCnt; i++) { if (oldVal[i] != newVal[i]) { diffNdx[numberChanged] = i; diffVal[numberChanged++] = newVal[i]; } } for (; i < newCnt; i++) { diffNdx[numberChanged] = i; diffVal[numberChanged++] = newVal[i]; } /* Create the object of our desire. */ CoinWarmStartVectorDiff< T > *diff = new CoinWarmStartVectorDiff< T >(numberChanged, diffNdx, diffVal); /* Clean up and return. */ delete[] diffNdx; delete[] diffVal; return diff; // return (dynamic_cast*>(diff)) ; } /* Apply diff to this warm start. Update this warm start by applying diff. It's assumed that the allocated capacity of the warm start is sufficiently large. */ template < typename T > void CoinWarmStartVector< T >::applyDiff(const CoinWarmStartDiff *const cwsdDiff) { /* Make sure we have a CoinWarmStartVectorDiff */ const CoinWarmStartVectorDiff< T > *diff = dynamic_cast< const CoinWarmStartVectorDiff< T > * >(cwsdDiff); if (!diff) { throw CoinError("Diff not derived from CoinWarmStartVectorDiff.", "applyDiff", "CoinWarmStartVector"); } /* Application is by straighforward replacement of words in the vector vector. */ const int numberChanges = diff->sze_; const unsigned int *diffNdxs = diff->diffNdxs_; const T *diffVals = diff->diffVals_; T *vals = this->values_; for (int i = 0; i < numberChanges; i++) { unsigned int diffNdx = diffNdxs[i]; T diffVal = diffVals[i]; vals[diffNdx] = diffVal; } } //############################################################################# // Assignment template < typename T > CoinWarmStartVectorDiff< T > & CoinWarmStartVectorDiff< T >::operator=(const CoinWarmStartVectorDiff< T > &rhs) { if (this != &rhs) { if (sze_ > 0) { delete[] diffNdxs_; delete[] diffVals_; } sze_ = rhs.sze_; if (sze_ > 0) { diffNdxs_ = new unsigned int[sze_]; memcpy(diffNdxs_, rhs.diffNdxs_, sze_ * sizeof(unsigned int)); diffVals_ = new T[sze_]; memcpy(diffVals_, rhs.diffVals_, sze_ * sizeof(T)); } else { diffNdxs_ = 0; diffVals_ = 0; } } return (*this); } // Copy constructor template < typename T > CoinWarmStartVectorDiff< T >::CoinWarmStartVectorDiff(const CoinWarmStartVectorDiff< T > &rhs) : sze_(rhs.sze_) , diffNdxs_(0) , diffVals_(0) { if (sze_ > 0) { diffNdxs_ = new unsigned int[sze_]; memcpy(diffNdxs_, rhs.diffNdxs_, sze_ * sizeof(unsigned int)); diffVals_ = new T[sze_]; memcpy(diffVals_, rhs.diffVals_, sze_ * sizeof(T)); } } /// Standard constructor template < typename T > CoinWarmStartVectorDiff< T >::CoinWarmStartVectorDiff(int sze, const unsigned int *const diffNdxs, const T *const diffVals) : sze_(sze) , diffNdxs_(0) , diffVals_(0) { if (sze > 0) { diffNdxs_ = new unsigned int[sze]; memcpy(diffNdxs_, diffNdxs, sze * sizeof(unsigned int)); diffVals_ = new T[sze]; memcpy(diffVals_, diffVals, sze * sizeof(T)); } } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinFactorization3.cpp0000644000175200017520000022262513414454441020004 0ustar coincoin/* $Id: CoinFactorization3.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "CoinUtilsConfig.h" #include #include #include "CoinFactorization.hpp" #include "CoinIndexedVector.hpp" #include "CoinHelperFunctions.hpp" #include "CoinTime.hpp" #include #include #if COIN_FACTORIZATION_DENSE_CODE == 1 // using simple lapack interface extern "C" { /** LAPACK Fortran subroutine DGETRS. */ void F77_FUNC(dgetrs, DGETRS)(char *trans, cipfint *n, cipfint *nrhs, const double *A, cipfint *ldA, cipfint *ipiv, double *B, cipfint *ldB, ipfint *info, int trans_len); } #elif COIN_FACTORIZATION_DENSE_CODE == 2 // C interface enum CBLAS_ORDER { CblasRowMajor = 101, CblasColMajor = 102 }; enum CBLAS_TRANSPOSE { CblasNoTrans = 111, CblasTrans = 112 }; extern "C" { int clapack_dgetrs(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE Trans, const int N, const int NRHS, const double *A, const int lda, const int *ipiv, double *B, const int ldb); } #elif COIN_FACTORIZATION_DENSE_CODE == 3 // Intel compiler #include "mkl_lapacke.h" #endif // For semi-sparse #define BITS_PER_CHECK 8 #define CHECK_SHIFT 3 typedef unsigned char CoinCheckZero; #ifdef CLP_FACTORIZATION_INSTRUMENT extern double externalTimeStart; extern double timeInFactorize; extern double timeInUpdate; extern double timeInFactorizeFake; extern double timeInUpdateFake1; extern double timeInUpdateFake2; extern double timeInUpdateTranspose; extern double timeInUpdateFT; extern double timeInUpdateTwoFT; extern double timeInReplace; extern int numberUpdate; extern int numberUpdateTranspose; extern int numberUpdateFT; extern int numberUpdateTwoFT; extern int numberReplace; extern int currentLengthR; extern int currentLengthU; extern int currentTakeoutU; extern double averageLengthR; extern double averageLengthL; extern double averageLengthU; extern double scaledLengthDense; extern double scaledLengthDenseSquared; extern double scaledLengthL; extern double scaledLengthR; extern double scaledLengthU; extern int startLengthU; extern int endLengthU; #endif //:class CoinFactorization. Deals with Factorization and Updates /* Updates one column (FTRAN) from region2 and permutes. region1 starts as zero Note - if regionSparse2 packed on input - will be packed on output - returns un-permuted result in region2 and region1 is zero */ int CoinFactorization::updateColumn(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute) const { #ifdef CLP_FACTORIZATION_INSTRUMENT double startTimeX = CoinCpuTime(); #endif //permute and move indices into index array int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); int numberNonZero; const int *permute = permute_.array(); double *COIN_RESTRICT region = regionSparse->denseVector(); #ifndef CLP_FACTORIZATION if (!noPermute) { #endif numberNonZero = regionSparse2->getNumElements(); int *COIN_RESTRICT index = regionSparse2->getIndices(); double *COIN_RESTRICT array = regionSparse2->denseVector(); #ifndef CLP_FACTORIZATION bool packed = regionSparse2->packedMode(); if (packed) { for (int j = 0; j < numberNonZero; j++) { int iRow = index[j]; double value = array[j]; array[j] = 0.0; iRow = permute[iRow]; region[iRow] = value; regionIndex[j] = iRow; } } else { #else assert(!regionSparse2->packedMode()); #endif for (int j = 0; j < numberNonZero; j++) { int iRow = index[j]; double value = array[iRow]; array[iRow] = 0.0; iRow = permute[iRow]; region[iRow] = value; regionIndex[j] = iRow; } #ifndef CLP_FACTORIZATION } #endif regionSparse->setNumElements(numberNonZero); #ifndef CLP_FACTORIZATION } else { numberNonZero = regionSparse->getNumElements(); } #endif if (collectStatistics_) { numberFtranCounts_++; ftranCountInput_ += numberNonZero; } // ******* L updateColumnL(regionSparse, regionIndex); if (collectStatistics_) ftranCountAfterL_ += regionSparse->getNumElements(); //permute extra //row bits here updateColumnR(regionSparse); if (collectStatistics_) ftranCountAfterR_ += regionSparse->getNumElements(); //update counts // ******* U updateColumnU(regionSparse, regionIndex); if (!doForrestTomlin_) { // Do PFI after everything else updateColumnPFI(regionSparse); } #ifdef CLP_FACTORIZATION_INSTRUMENT numberUpdate++; timeInUpdate += CoinCpuTime() - startTimeX; averageLengthR += lengthR_; averageLengthU += lengthU_; averageLengthL += lengthL_; #endif if (!noPermute) { permuteBack(regionSparse, regionSparse2); return regionSparse2->getNumElements(); } else { return regionSparse->getNumElements(); } } // Permutes back at end of updateColumn void CoinFactorization::permuteBack(CoinIndexedVector *regionSparse, CoinIndexedVector *outVector) const { // permute back int oldNumber = regionSparse->getNumElements(); const int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); double *COIN_RESTRICT region = regionSparse->denseVector(); int *COIN_RESTRICT outIndex = outVector->getIndices(); double *COIN_RESTRICT out = outVector->denseVector(); const int *COIN_RESTRICT permuteBack = pivotColumnBack(); int number = 0; if (outVector->packedMode()) { for (int j = 0; j < oldNumber; j++) { int iRow = regionIndex[j]; double value = region[iRow]; region[iRow] = 0.0; if (fabs(value) > zeroTolerance_) { iRow = permuteBack[iRow]; outIndex[number] = iRow; out[number++] = value; } } } else { int j = 0; if ((oldNumber & 1) != 0) { int iRow = regionIndex[0]; j++; double value = region[iRow]; region[iRow] = 0.0; if (fabs(value) > zeroTolerance_) { iRow = permuteBack[iRow]; outIndex[number++] = iRow; out[iRow] = value; } } for (; j < oldNumber; j += 2) { int iRow0 = regionIndex[j]; int iRow1 = regionIndex[j + 1]; double value0 = region[iRow0]; bool good0 = fabs(value0) > zeroTolerance_; double value1 = region[iRow1]; bool good1 = fabs(value1) > zeroTolerance_; region[iRow0] = 0.0; region[iRow1] = 0.0; if (good0) { iRow0 = permuteBack[iRow0]; outIndex[number++] = iRow0; out[iRow0] = value0; } if (good1) { iRow1 = permuteBack[iRow1]; outIndex[number++] = iRow1; out[iRow1] = value1; } } } outVector->setNumElements(number); regionSparse->setNumElements(0); } // updateColumnL. Updates part of column (FTRANL) void CoinFactorization::updateColumnL(CoinIndexedVector *regionSparse, int *COIN_RESTRICT regionIndex) const { if (numberL_) { int number = regionSparse->getNumElements(); int goSparse; // Guess at number at end if (sparseThreshold_ > 0) { if (ftranAverageAfterL_) { int newNumber = static_cast< int >(number * ftranAverageAfterL_); if (newNumber < sparseThreshold_ && (numberL_ << 2) > newNumber) goSparse = 2; else if (newNumber < sparseThreshold2_ && (numberL_ << 1) > newNumber) goSparse = 1; else goSparse = 0; } else { if (number < sparseThreshold_ && (numberL_ << 2) > number) goSparse = 2; else goSparse = 0; } } else { goSparse = 0; } switch (goSparse) { case 0: // densish updateColumnLDensish(regionSparse, regionIndex); break; case 1: // middling updateColumnLSparsish(regionSparse, regionIndex); break; case 2: // sparse updateColumnLSparse(regionSparse, regionIndex); break; } } #ifdef COIN_FACTORIZATION_DENSE_CODE if (numberDense_) { //take off list int lastSparse = numberRows_ - numberDense_; int number = regionSparse->getNumElements(); double *COIN_RESTRICT region = regionSparse->denseVector(); int i = 0; bool doDense = false; while (i < number) { int iRow = regionIndex[i]; if (iRow >= lastSparse) { doDense = true; regionIndex[i] = regionIndex[--number]; } else { i++; } } if (doDense) { #if COIN_FACTORIZATION_DENSE_CODE == 1 char trans = 'N'; int ione = 1; int info; F77_FUNC(dgetrs, DGETRS) (&trans, &numberDense_, &ione, denseAreaAddress_, &numberDense_, densePermute_, region + lastSparse, &numberDense_, &info, 1); #elif COIN_FACTORIZATION_DENSE_CODE == 2 clapack_dgetrs(CblasColMajor, CblasNoTrans, numberDense_, 1, denseAreaAddress_, numberDense_, densePermute_, region + lastSparse, numberDense_); #elif COIN_FACTORIZATION_DENSE_CODE == 3 LAPACKE_dgetrs(LAPACK_COL_MAJOR, 'N', numberDense_, 1, denseAreaAddress_, numberDense_, densePermute_, region + lastSparse, numberDense_); #endif for (int i = lastSparse; i < numberRows_; i++) { double value = region[i]; if (value) { if (fabs(value) >= 1.0e-15) regionIndex[number++] = i; else region[i] = 0.0; } } regionSparse->setNumElements(number); } } #endif } // Updates part of column (FTRANL) when densish void CoinFactorization::updateColumnLDensish(CoinIndexedVector *regionSparse, int *COIN_RESTRICT regionIndex) const { double *COIN_RESTRICT region = regionSparse->denseVector(); int number = regionSparse->getNumElements(); int numberNonZero; double tolerance = zeroTolerance_; numberNonZero = 0; const int *COIN_RESTRICT startColumn = startColumnL_.array(); const int *COIN_RESTRICT indexRow = indexRowL_.array(); const CoinFactorizationDouble *COIN_RESTRICT element = elementL_.array(); int last = numberRows_; assert(last == baseL_ + numberL_); #if COIN_FACTORIZATION_DENSE_CODE //can take out last bit of sparse L as empty last -= numberDense_; #endif int smallestIndex = numberRowsExtra_; // do easy ones for (int k = 0; k < number; k++) { int iPivot = regionIndex[k]; if (iPivot >= baseL_) smallestIndex = CoinMin(iPivot, smallestIndex); else regionIndex[numberNonZero++] = iPivot; } // now others for (int i = smallestIndex; i < last; i++) { CoinFactorizationDouble pivotValue = region[i]; if (fabs(pivotValue) > tolerance) { int start = startColumn[i]; int end = startColumn[i + 1]; for (int j = start; j < end; j++) { int iRow = indexRow[j]; CoinFactorizationDouble result = region[iRow]; CoinFactorizationDouble value = element[j]; region[iRow] = result - value * pivotValue; } regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } // and dense for (int i = last; i < numberRows_; i++) { CoinFactorizationDouble pivotValue = region[i]; if (fabs(pivotValue) > tolerance) { regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } regionSparse->setNumElements(numberNonZero); } // Updates part of column (FTRANL) when sparsish void CoinFactorization::updateColumnLSparsish(CoinIndexedVector *regionSparse, int *COIN_RESTRICT regionIndex) const { double *COIN_RESTRICT region = regionSparse->denseVector(); int number = regionSparse->getNumElements(); int numberNonZero; double tolerance = zeroTolerance_; numberNonZero = 0; const int *startColumn = startColumnL_.array(); const int *indexRow = indexRowL_.array(); const CoinFactorizationDouble *element = elementL_.array(); int last = numberRows_; assert(last == baseL_ + numberL_); #if COIN_FACTORIZATION_DENSE_CODE //can take out last bit of sparse L as empty last -= numberDense_; #endif // mark known to be zero int nInBig = sizeof(int) / sizeof(int); #if ABOCA_LITE_FACTORIZATION == 0 #define sparseOffset 0 #else int sparseOffset = ((regionSparse->capacity() & 0x80000000) != 0) ? sparseOffset_ : 0; assert(!sparseOffset); #endif CoinCheckZero *COIN_RESTRICT mark = reinterpret_cast< CoinCheckZero * >(sparse_.array() + (2 + nInBig) * maximumRowsExtra_ + sparseOffset); int smallestIndex = numberRowsExtra_; // do easy ones for (int k = 0; k < number; k++) { int iPivot = regionIndex[k]; if (iPivot < baseL_) { regionIndex[numberNonZero++] = iPivot; } else { smallestIndex = CoinMin(iPivot, smallestIndex); int iWord = iPivot >> CHECK_SHIFT; int iBit = iPivot - (iWord << CHECK_SHIFT); if (mark[iWord]) { mark[iWord] = static_cast< CoinCheckZero >(mark[iWord] | (1 << iBit)); } else { mark[iWord] = static_cast< CoinCheckZero >(1 << iBit); } } } // now others // First do up to convenient power of 2 int jLast = (smallestIndex + BITS_PER_CHECK - 1) >> CHECK_SHIFT; jLast = CoinMin((jLast << CHECK_SHIFT), last); int i; for (i = smallestIndex; i < jLast; i++) { CoinFactorizationDouble pivotValue = region[i]; int start = startColumn[i]; int end = startColumn[i + 1]; if (fabs(pivotValue) > tolerance) { for (int j = start; j < end; j++) { int iRow = indexRow[j]; CoinFactorizationDouble result = region[iRow]; CoinFactorizationDouble value = element[j]; region[iRow] = result - value * pivotValue; int iWord = iRow >> CHECK_SHIFT; int iBit = iRow - (iWord << CHECK_SHIFT); if (mark[iWord]) { mark[iWord] = static_cast< CoinCheckZero >(mark[iWord] | (1 << iBit)); } else { mark[iWord] = static_cast< CoinCheckZero >(1 << iBit); } } regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } int kLast = last >> CHECK_SHIFT; if (jLast < last) { // now do in chunks for (int k = (jLast >> CHECK_SHIFT); k < kLast; k++) { unsigned int iMark = mark[k]; if (iMark) { // something in chunk - do all (as imark may change) i = k << CHECK_SHIFT; int iLast = i + BITS_PER_CHECK; for (; i < iLast; i++) { CoinFactorizationDouble pivotValue = region[i]; int start = startColumn[i]; int end = startColumn[i + 1]; if (fabs(pivotValue) > tolerance) { int j; for (j = start; j < end; j++) { int iRow = indexRow[j]; CoinFactorizationDouble result = region[iRow]; CoinFactorizationDouble value = element[j]; region[iRow] = result - value * pivotValue; int iWord = iRow >> CHECK_SHIFT; int iBit = iRow - (iWord << CHECK_SHIFT); if (mark[iWord]) { mark[iWord] = static_cast< CoinCheckZero >(mark[iWord] | (1 << iBit)); } else { mark[iWord] = static_cast< CoinCheckZero >(1 << iBit); } } regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } mark[k] = 0; // zero out marked } } i = kLast << CHECK_SHIFT; } for (; i < last; i++) { CoinFactorizationDouble pivotValue = region[i]; int start = startColumn[i]; int end = startColumn[i + 1]; if (fabs(pivotValue) > tolerance) { for (int j = start; j < end; j++) { int iRow = indexRow[j]; CoinFactorizationDouble result = region[iRow]; CoinFactorizationDouble value = element[j]; region[iRow] = result - value * pivotValue; } regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } // Now dense part for (; i < numberRows_; i++) { double pivotValue = region[i]; if (fabs(pivotValue) > tolerance) { regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } // zero out ones that might have been skipped mark[smallestIndex >> CHECK_SHIFT] = 0; int kkLast = (numberRows_ + BITS_PER_CHECK - 1) >> CHECK_SHIFT; CoinZeroN(mark + kLast, kkLast - kLast); regionSparse->setNumElements(numberNonZero); } // Updates part of column (FTRANL) when sparse void CoinFactorization::updateColumnLSparse(CoinIndexedVector *regionSparse, int *COIN_RESTRICT regionIndex) const { double *COIN_RESTRICT region = regionSparse->denseVector(); int number = regionSparse->getNumElements(); int numberNonZero; double tolerance = zeroTolerance_; numberNonZero = 0; const int *startColumn = startColumnL_.array(); const int *indexRow = indexRowL_.array(); const CoinFactorizationDouble *element = elementL_.array(); // use sparse_ as temporary area // mark known to be zero #if ABOCA_LITE_FACTORIZATION == 0 #define sparseOffset 0 #else int sparseOffset = ((regionSparse->capacity() & 0x80000000) != 0) ? sparseOffset_ : 0; assert(!sparseOffset); #endif int *COIN_RESTRICT stack = sparse_.array() + sparseOffset; /* pivot */ int *COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ int *COIN_RESTRICT next = reinterpret_cast< int * >(list + maximumRowsExtra_); /* jnext */ char *COIN_RESTRICT mark = reinterpret_cast< char * >(next + maximumRowsExtra_); int nList; #ifdef COIN_DEBUG for (int i = 0; i < maximumRowsExtra_; i++) { assert(!mark[i]); } #endif nList = 0; for (int k = 0; k < number; k++) { int kPivot = regionIndex[k]; if (kPivot >= baseL_) { assert(kPivot < numberRowsExtra_); //if (kPivot>=numberRowsExtra_) abort(); if (!mark[kPivot]) { stack[0] = kPivot; int j = startColumn[kPivot + 1] - 1; int nStack = 0; while (nStack >= 0) { /* take off stack */ if (j >= startColumn[kPivot]) { int jPivot = indexRow[j--]; assert(jPivot >= baseL_ && jPivot < numberRowsExtra_); //if (jPivot=numberRowsExtra_) abort(); /* put back on stack */ next[nStack] = j; if (!mark[jPivot]) { /* and new one */ kPivot = jPivot; j = startColumn[kPivot + 1] - 1; stack[++nStack] = kPivot; assert(kPivot < numberRowsExtra_); //if (kPivot>=numberRowsExtra_) abort(); mark[kPivot] = 1; next[nStack] = j; } } else { /* finished so mark */ list[nList++] = kPivot; mark[kPivot] = 1; --nStack; if (nStack >= 0) { kPivot = stack[nStack]; assert(kPivot < numberRowsExtra_); j = next[nStack]; } } } } } else { // just put on list regionIndex[numberNonZero++] = kPivot; } } for (int i = nList - 1; i >= 0; i--) { int iPivot = list[i]; mark[iPivot] = 0; CoinFactorizationDouble pivotValue = region[iPivot]; if (fabs(pivotValue) > tolerance) { regionIndex[numberNonZero++] = iPivot; for (int j = startColumn[iPivot]; j < startColumn[iPivot + 1]; j++) { int iRow = indexRow[j]; CoinFactorizationDouble value = element[j]; region[iRow] -= value * pivotValue; } } else { region[iPivot] = 0.0; } } regionSparse->setNumElements(numberNonZero); } /* Updates one column (FTRAN) from region2 Tries to do FT update number returned is negative if no room. Also updates region3 region1 starts as zero and is zero at end */ int CoinFactorization::updateTwoColumnsFT(CoinIndexedVector *regionSparse1, CoinIndexedVector *regionSparse2, CoinIndexedVector *regionSparse3, bool noPermuteRegion3) { #ifdef CLP_FACTORIZATION_INSTRUMENT double startTimeX = CoinCpuTime(); #endif #if 1 //#ifdef NDEBUG //#undef NDEBUG //#endif //#define COIN_DEBUG #ifdef COIN_DEBUG regionSparse1->checkClean(); CoinIndexedVector save2(*regionSparse2); CoinIndexedVector save3(*regionSparse3); #endif CoinIndexedVector *regionFT; CoinIndexedVector *regionUpdate; int *COIN_RESTRICT regionIndex; int numberNonZero; const int *permute = permute_.array(); int *COIN_RESTRICT index; double *COIN_RESTRICT region; if (!noPermuteRegion3) { regionFT = regionSparse3; regionUpdate = regionSparse1; //permute and move indices into index array regionIndex = regionUpdate->getIndices(); //int numberNonZero; region = regionUpdate->denseVector(); numberNonZero = regionSparse3->getNumElements(); int *COIN_RESTRICT index = regionSparse3->getIndices(); double *COIN_RESTRICT array = regionSparse3->denseVector(); assert(!regionSparse3->packedMode()); for (int j = 0; j < numberNonZero; j++) { int iRow = index[j]; double value = array[iRow]; array[iRow] = 0.0; iRow = permute[iRow]; region[iRow] = value; regionIndex[j] = iRow; } regionUpdate->setNumElements(numberNonZero); } else { regionFT = regionSparse1; regionUpdate = regionSparse3; } //permute and move indices into index array (in U) regionIndex = regionFT->getIndices(); numberNonZero = regionSparse2->getNumElements(); index = regionSparse2->getIndices(); region = regionFT->denseVector(); double *COIN_RESTRICT array = regionSparse2->denseVector(); int *COIN_RESTRICT startColumnU = startColumnU_.array(); int start = startColumnU[maximumColumnsExtra_]; startColumnU[numberColumnsExtra_] = start; regionIndex = indexRowU_.array() + start; #ifndef ABC_USE_COIN_FACTORIZATION assert(regionSparse2->packedMode()); #else if (regionSparse2->packedMode()) { #endif for (int j = 0; j < numberNonZero; j++) { int iRow = index[j]; double value = array[j]; array[j] = 0.0; iRow = permute[iRow]; region[iRow] = value; regionIndex[j] = iRow; } #ifdef ABC_USE_COIN_FACTORIZATION } else { // not packed for (int j = 0; j < numberNonZero; j++) { int iRow = index[j]; double value = array[iRow]; array[iRow] = 0.0; iRow = permute[iRow]; region[iRow] = value; regionIndex[j] = iRow; } } #endif regionFT->setNumElements(numberNonZero); if (collectStatistics_) { numberFtranCounts_ += 2; ftranCountInput_ += regionFT->getNumElements() + regionUpdate->getNumElements(); } // ******* L updateColumnL(regionFT, regionIndex); updateColumnL(regionUpdate, regionUpdate->getIndices()); if (collectStatistics_) ftranCountAfterL_ += regionFT->getNumElements() + regionUpdate->getNumElements(); //permute extra //row bits here updateColumnRFT(regionFT, regionIndex); updateColumnR(regionUpdate); if (collectStatistics_) ftranCountAfterR_ += regionFT->getNumElements() + regionUpdate->getNumElements(); // ******* U - see if densish // Guess at number at end int goSparse = 0; if (sparseThreshold_ > 0) { int numberNonZero = (regionUpdate->getNumElements() + regionFT->getNumElements()) >> 1; if (ftranAverageAfterR_) { int newNumber = static_cast< int >(numberNonZero * ftranAverageAfterU_); if (newNumber < sparseThreshold_) goSparse = 2; else if (newNumber < sparseThreshold2_) goSparse = 1; } else { if (numberNonZero < sparseThreshold_) goSparse = 2; } } #ifndef COIN_FAST_CODE assert(slackValue_ == -1.0); #endif if (!goSparse && numberRows_ < 1000) { double *COIN_RESTRICT arrayFT = regionFT->denseVector(); int *COIN_RESTRICT indexFT = regionFT->getIndices(); int numberNonZeroFT; double *COIN_RESTRICT arrayUpdate = regionUpdate->denseVector(); int *COIN_RESTRICT indexUpdate = regionUpdate->getIndices(); int numberNonZeroUpdate; updateTwoColumnsUDensish(numberNonZeroFT, arrayFT, indexFT, numberNonZeroUpdate, arrayUpdate, indexUpdate); regionFT->setNumElements(numberNonZeroFT); regionUpdate->setNumElements(numberNonZeroUpdate); if (collectStatistics_) { ftranCountAfterU_ += numberNonZeroFT + numberNonZeroUpdate; #ifdef CLP_FACTORIZATION_INSTRUMENT scaledLengthDense += numberDense_ * numberNonZeroFT; scaledLengthDenseSquared += numberDense_ * numberDense_ * numberNonZeroFT; scaledLengthL += lengthL_ * numberNonZeroFT; scaledLengthR += lengthR_ * numberNonZeroFT; scaledLengthU += lengthU_ * numberNonZeroFT; scaledLengthDense += numberDense_ * numberNonZeroUpdate; scaledLengthDenseSquared += numberDense_ * numberDense_ * numberNonZeroUpdate; scaledLengthL += lengthL_ * numberNonZeroUpdate; scaledLengthR += lengthR_ * numberNonZeroUpdate; scaledLengthU += lengthU_ * numberNonZeroUpdate; #endif } } else { // sparse updateColumnU(regionFT, regionIndex); updateColumnU(regionUpdate, regionUpdate->getIndices()); } permuteBack(regionFT, regionSparse2); if (!noPermuteRegion3) { permuteBack(regionUpdate, regionSparse3); } #ifdef COIN_DEBUG int n2 = regionSparse2->getNumElements(); regionSparse1->checkClean(); int n2a = updateColumnFT(regionSparse1, &save2); assert(n2 == n2a); { int j; double *regionA = save2.denseVector(); int *indexA = save2.getIndices(); double *regionB = regionSparse2->denseVector(); int *indexB = regionSparse2->getIndices(); for (j = 0; j < n2; j++) { int k = indexA[j]; assert(k == indexB[j]); CoinFactorizationDouble value = regionA[j]; assert(value == regionB[j]); } } updateColumn(&save3, &save3, noPermuteRegion3); int n3 = regionSparse3->getNumElements(); assert(n3 == save3.getNumElements()); { int j; double *regionA = save3.denseVector(); int *indexA = save3.getIndices(); double *regionB = regionSparse3->denseVector(); int *indexB = regionSparse3->getIndices(); for (j = 0; j < n3; j++) { int k = indexA[j]; assert(k == indexB[j]); CoinFactorizationDouble value = regionA[k]; assert(value == regionB[k]); } } //*regionSparse2=save2; //*regionSparse3=save3; printf("REGION2 %d els\n", regionSparse2->getNumElements()); regionSparse2->print(); printf("REGION3 %d els\n", regionSparse3->getNumElements()); regionSparse3->print(); #endif return regionSparse2->getNumElements(); #else int returnCode = updateColumnFT(regionSparse1, regionSparse2); assert(noPermuteRegion3); updateColumn(regionSparse3, regionSparse3, noPermuteRegion3); #ifdef CLP_FACTORIZATION_INSTRUMENT numberUpdateTwoFT++; timeInUpdateTwoFT += CoinCpuTime() - startTimeX; averageLengthR += 2 * lengthR_; averageLengthU += 2 * lengthU_; averageLengthL += 2 * lengthL_; #endif //printf("REGION2 %d els\n",regionSparse2->getNumElements()); //regionSparse2->print(); //printf("REGION3 %d els\n",regionSparse3->getNumElements()); //regionSparse3->print(); return returnCode; #endif } // Updates part of 2 columns (FTRANU) real work void CoinFactorization::updateTwoColumnsUDensish( int &numberNonZero1, double *COIN_RESTRICT region1, int *COIN_RESTRICT index1, int &numberNonZero2, double *COIN_RESTRICT region2, int *COIN_RESTRICT index2) const { double tolerance = zeroTolerance_; const int *COIN_RESTRICT startColumn = startColumnU_.array(); const int *COIN_RESTRICT indexRow = indexRowU_.array(); const CoinFactorizationDouble *COIN_RESTRICT element = elementU_.array(); int numberNonZeroA = 0; int numberNonZeroB = 0; const int *numberInColumn = numberInColumn_.array(); const CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); for (int i = numberU_ - 1; i >= numberSlacks_; i--) { CoinFactorizationDouble pivotValue2 = region2[i]; region2[i] = 0.0; CoinFactorizationDouble pivotValue1 = region1[i]; region1[i] = 0.0; if (fabs(pivotValue2) > tolerance) { int start = startColumn[i]; const CoinFactorizationDouble *COIN_RESTRICT thisElement = element + start; const int *COIN_RESTRICT thisIndex = indexRow + start; if (fabs(pivotValue1) <= tolerance) { // just region 2 for (int j = numberInColumn[i] - 1; j >= 0; j--) { int iRow = thisIndex[j]; CoinFactorizationDouble value = thisElement[j]; #ifdef NO_LOAD region2[iRow] -= value * pivotValue2; #else CoinFactorizationDouble regionValue2 = region2[iRow]; region2[iRow] = regionValue2 - value * pivotValue2; #endif } pivotValue2 *= pivotRegion[i]; region2[i] = pivotValue2; index2[numberNonZeroB++] = i; } else { // both for (int j = numberInColumn[i] - 1; j >= 0; j--) { int iRow = thisIndex[j]; CoinFactorizationDouble value = thisElement[j]; #ifdef NO_LOAD region1[iRow] -= value * pivotValue1; region2[iRow] -= value * pivotValue2; #else CoinFactorizationDouble regionValue1 = region1[iRow]; CoinFactorizationDouble regionValue2 = region2[iRow]; region1[iRow] = regionValue1 - value * pivotValue1; region2[iRow] = regionValue2 - value * pivotValue2; #endif } pivotValue1 *= pivotRegion[i]; pivotValue2 *= pivotRegion[i]; region1[i] = pivotValue1; index1[numberNonZeroA++] = i; region2[i] = pivotValue2; index2[numberNonZeroB++] = i; } } else if (fabs(pivotValue1) > tolerance) { int start = startColumn[i]; const CoinFactorizationDouble *COIN_RESTRICT thisElement = element + start; const int *COIN_RESTRICT thisIndex = indexRow + start; // just region 1 for (int j = numberInColumn[i] - 1; j >= 0; j--) { int iRow = thisIndex[j]; CoinFactorizationDouble value = thisElement[j]; #ifdef NO_LOAD region1[iRow] -= value * pivotValue1; #else CoinFactorizationDouble regionValue1 = region1[iRow]; region1[iRow] = regionValue1 - value * pivotValue1; #endif } pivotValue1 *= pivotRegion[i]; region1[i] = pivotValue1; index1[numberNonZeroA++] = i; } } // Slacks for (int i = numberSlacks_ - 1; i >= 0; i--) { double value2 = region2[i]; double value1 = region1[i]; bool value1NonZero = (value1 != 0.0); if (fabs(value2) > tolerance) { region2[i] = -value2; index2[numberNonZeroB++] = i; } else { region2[i] = 0.0; } if (value1NonZero) { index1[numberNonZeroA] = i; if (fabs(value1) > tolerance) { region1[i] = -value1; numberNonZeroA++; } else { region1[i] = 0.0; } } } numberNonZero1 = numberNonZeroA; numberNonZero2 = numberNonZeroB; } #ifdef COIN_FACTORIZATION_DIAGNOSE static int numberTimesX = 0; static int numberSparseX = 0; double sumNumberSparseX = 0.0; static int numberSparsishX = 0; double sumNumberSparsishX = 0.0; static int numberDensishX = 0; double sumNumberDensishX = 0.0; #endif // updateColumnU. Updates part of column (FTRANU) void CoinFactorization::updateColumnU(CoinIndexedVector *regionSparse, int *indexIn) const { int numberNonZero = regionSparse->getNumElements(); int goSparse; // Guess at number at end if (sparseThreshold_ > 0) { if (ftranAverageAfterR_) { int newNumber = static_cast< int >(numberNonZero * ftranAverageAfterU_); if (newNumber < sparseThreshold_) goSparse = 2; else if (newNumber < sparseThreshold2_) goSparse = 1; else goSparse = 0; } else { if (numberNonZero < sparseThreshold_) goSparse = 2; else goSparse = 0; } } else { goSparse = 0; } #ifdef COIN_FACTORIZATION_DIAGNOSE numberTimesX++; if (!goSparse) { numberDensishX++; sumNumberDensishX += numberNonZero; } else if (goSparse == 1) { numberSparsishX++; sumNumberSparsishX += numberNonZero; } else { numberSparseX++; sumNumberSparseX += numberNonZero; } if ((numberTimesX % 1000) == 0) { double averageDensish = (numberDensishX) ? sumNumberDensishX / numberDensishX : 0.0; double averageSparsish = (numberSparsishX) ? sumNumberSparsishX / numberSparsishX : 0.0; double averageSparse = (numberSparseX) ? sumNumberSparseX / numberSparseX : 0.0; printf("sparsity D,ish,S (%d,%g) , (%d,%g) , (%d,%g) - ftranFactor %g\n", numberDensishX, averageDensish, numberSparsishX, averageSparsish, numberSparseX, averageSparse, ftranAverageAfterU_); } #endif switch (goSparse) { case 0: // densish { double *region = regionSparse->denseVector(); int *regionIndex = regionSparse->getIndices(); int numberNonZero = updateColumnUDensish(region, regionIndex); regionSparse->setNumElements(numberNonZero); } break; case 1: // middling updateColumnUSparsish(regionSparse, indexIn); break; case 2: // sparse updateColumnUSparse(regionSparse, indexIn); break; } if (collectStatistics_) { ftranCountAfterU_ += regionSparse->getNumElements(); #ifdef CLP_FACTORIZATION_INSTRUMENT int numberNonZero = regionSparse->getNumElements(); scaledLengthDense += numberDense_ * numberNonZero; scaledLengthDenseSquared += numberDense_ * numberDense_ * numberNonZero; scaledLengthL += lengthL_ * numberNonZero; scaledLengthR += lengthR_ * numberNonZero; scaledLengthU += lengthU_ * numberNonZero; #endif } } #ifdef COIN_DEVELOP double ncall_DZ = 0.0; double nrow_DZ = 0.0; double nslack_DZ = 0.0; double nU_DZ = 0.0; double nnz_DZ = 0.0; double nDone_DZ = 0.0; #endif // Updates part of column (FTRANU) real work int CoinFactorization::updateColumnUDensish(double *COIN_RESTRICT region, int *COIN_RESTRICT regionIndex) const { double tolerance = zeroTolerance_; const int *startColumn = startColumnU_.array(); const int *indexRow = indexRowU_.array(); const CoinFactorizationDouble *element = elementU_.array(); int numberNonZero = 0; const int *numberInColumn = numberInColumn_.array(); const CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); #ifdef COIN_DEVELOP ncall_DZ++; nrow_DZ += numberRows_; nslack_DZ += numberSlacks_; nU_DZ += numberU_; #endif for (int i = numberU_ - 1; i >= numberSlacks_; i--) { CoinFactorizationDouble pivotValue = region[i]; if (pivotValue) { #ifdef COIN_DEVELOP nnz_DZ++; #endif region[i] = 0.0; if (fabs(pivotValue) > tolerance) { int start = startColumn[i]; const CoinFactorizationDouble *thisElement = element + start; const int *thisIndex = indexRow + start; #ifdef COIN_DEVELOP nDone_DZ += numberInColumn[i]; #endif for (int j = numberInColumn[i] - 1; j >= 0; j--) { int iRow = thisIndex[j]; CoinFactorizationDouble regionValue = region[iRow]; CoinFactorizationDouble value = thisElement[j]; region[iRow] = regionValue - value * pivotValue; } pivotValue *= pivotRegion[i]; region[i] = pivotValue; regionIndex[numberNonZero++] = i; } } } // now do slacks #ifndef COIN_FAST_CODE if (slackValue_ == -1.0) { #endif #if 0 // Could skew loop to pick up next one earlier // might improve pipelining for (int i = numberSlacks_-1; i>2;i-=2) { double value0 = region[i]; double absValue0 = fabs ( value0 ); double value1 = region[i-1]; double absValue1 = fabs ( value1 ); if ( value0 ) { if ( absValue0 > tolerance ) { region[i]=-value0; regionIndex[numberNonZero++]=i; } else { region[i]=0.0; } } if ( value1 ) { if ( absValue1 > tolerance ) { region[i-1]=-value1; regionIndex[numberNonZero++]=i-1; } else { region[i-1]=0.0; } } } for ( ; i>=0;i--) { double value = region[i]; double absValue = fabs ( value ); if ( value ) { if ( absValue > tolerance ) { region[i]=-value; regionIndex[numberNonZero++]=i; } else { region[i]=0.0; } } } #else for (int i = numberSlacks_ - 1; i >= 0; i--) { double value = region[i]; if (value) { region[i] = -value; regionIndex[numberNonZero] = i; if (fabs(value) > tolerance) numberNonZero++; else region[i] = 0.0; } } #endif #ifndef COIN_FAST_CODE } else { assert(slackValue_ == 1.0); for (int i = numberSlacks_ - 1; i >= 0; i--) { double value = region[i]; double absValue = fabs(value); if (value) { region[i] = 0.0; if (absValue > tolerance) { region[i] = value; regionIndex[numberNonZero++] = i; } } } } #endif return numberNonZero; } // updateColumnU. Updates part of column (FTRANU) /* Since everything is in order I should be able to do a better job of marking stuff - think. Also as L is static maybe I can do something better there (I know I could if I marked the depth of every element but that would lead to other inefficiencies. */ void CoinFactorization::updateColumnUSparse(CoinIndexedVector *regionSparse, int *COIN_RESTRICT indexIn) const { int numberNonZero = regionSparse->getNumElements(); int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); double *COIN_RESTRICT region = regionSparse->denseVector(); double tolerance = zeroTolerance_; const int *startColumn = startColumnU_.array(); const int *indexRow = indexRowU_.array(); const CoinFactorizationDouble *element = elementU_.array(); const CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); // use sparse_ as temporary area // mark known to be zero #if ABOCA_LITE_FACTORIZATION == 0 #define sparseOffset 0 #else int sparseOffset = ((regionSparse->capacity() & 0x80000000) != 0) ? sparseOffset_ : 0; assert(!sparseOffset); #endif int *COIN_RESTRICT stack = sparse_.array() + sparseOffset; /* pivot */ int *COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ int *COIN_RESTRICT next = reinterpret_cast< int * >(list + maximumRowsExtra_); /* jnext */ char *COIN_RESTRICT mark = reinterpret_cast< char * >(next + maximumRowsExtra_); #ifdef COIN_DEBUG for (int i = 0; i < maximumRowsExtra_; i++) { assert(!mark[i]); } #endif // move slacks to end of stack list int *COIN_RESTRICT putLast = stack + maximumRowsExtra_; int *COIN_RESTRICT put = putLast; const int *numberInColumn = numberInColumn_.array(); int nList = 0; for (int i = 0; i < numberNonZero; i++) { int kPivot = indexIn[i]; stack[0] = kPivot; int j = startColumn[kPivot] + numberInColumn[kPivot] - 1; int nStack = 1; next[0] = j; while (nStack) { /* take off stack */ int kPivot = stack[--nStack]; if (mark[kPivot] != 1) { j = next[nStack]; if (j >= startColumn[kPivot]) { kPivot = indexRow[j--]; /* put back on stack */ next[nStack++] = j; if (!mark[kPivot]) { /* and new one */ int numberIn = numberInColumn[kPivot]; if (numberIn) { j = startColumn[kPivot] + numberIn - 1; stack[nStack] = kPivot; mark[kPivot] = 2; next[nStack++] = j; } else { // can do immediately /* finished so mark */ mark[kPivot] = 1; if (kPivot >= numberSlacks_) { list[nList++] = kPivot; } else { // slack - put at end --put; *put = kPivot; } } } } else { /* finished so mark */ mark[kPivot] = 1; if (kPivot >= numberSlacks_) { list[nList++] = kPivot; } else { // slack - put at end assert(!numberInColumn[kPivot]); --put; *put = kPivot; } } } } } #if 0 { std::sort(list,list+nList); int i; int last; last =-1; for (i=0;ilast); last=k; } std::sort(put,putLast); int n = putLast-put; last =-1; for (i=0;ilast); last=k; } } #endif numberNonZero = 0; for (int i = nList - 1; i >= 0; i--) { int iPivot = list[i]; mark[iPivot] = 0; CoinFactorizationDouble pivotValue = region[iPivot]; region[iPivot] = 0.0; if (fabs(pivotValue) > tolerance) { int start = startColumn[iPivot]; int number = numberInColumn[iPivot]; int j; for (j = start; j < start + number; j++) { CoinFactorizationDouble value = element[j]; int iRow = indexRow[j]; region[iRow] -= value * pivotValue; } pivotValue *= pivotRegion[iPivot]; region[iPivot] = pivotValue; regionIndex[numberNonZero++] = iPivot; } } // slacks #ifndef COIN_FAST_CODE if (slackValue_ == 1.0) { for (; put < putLast; put++) { int iPivot = *put; mark[iPivot] = 0; CoinFactorizationDouble pivotValue = region[iPivot]; region[iPivot] = 0.0; if (fabs(pivotValue) > tolerance) { region[iPivot] = pivotValue; regionIndex[numberNonZero++] = iPivot; } } } else { #endif for (; put < putLast; put++) { int iPivot = *put; mark[iPivot] = 0; CoinFactorizationDouble pivotValue = region[iPivot]; region[iPivot] = 0.0; if (fabs(pivotValue) > tolerance) { region[iPivot] = -pivotValue; regionIndex[numberNonZero++] = iPivot; } } #ifndef COIN_FAST_CODE } #endif regionSparse->setNumElements(numberNonZero); } // updateColumnU. Updates part of column (FTRANU) /* Since everything is in order I should be able to do a better job of marking stuff - think. Also as L is static maybe I can do something better there (I know I could if I marked the depth of every element but that would lead to other inefficiencies. */ #ifdef COIN_DEVELOP double ncall_SZ = 0.0; double nrow_SZ = 0.0; double nslack_SZ = 0.0; double nU_SZ = 0.0; double nnz_SZ = 0.0; double nDone_SZ = 0.0; #endif void CoinFactorization::updateColumnUSparsish(CoinIndexedVector *regionSparse, int *COIN_RESTRICT indexIn) const { int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); // mark known to be zero #if ABOCA_LITE_FACTORIZATION == 0 #define sparseOffset 0 #else int sparseOffset = ((regionSparse->capacity() & 0x80000000) != 0) ? sparseOffset_ : 0; assert(!sparseOffset); #endif int *COIN_RESTRICT stack = sparse_.array() + sparseOffset; /* pivot */ int *COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ int *COIN_RESTRICT next = reinterpret_cast< int * >(list + maximumRowsExtra_); /* jnext */ CoinCheckZero *COIN_RESTRICT mark = reinterpret_cast< CoinCheckZero * >(next + maximumRowsExtra_); const int *numberInColumn = numberInColumn_.array(); #ifdef COIN_DEBUG for (int i = 0; i < maximumRowsExtra_; i++) { assert(!mark[i]); } #endif int nMarked = 0; int numberNonZero = regionSparse->getNumElements(); double *COIN_RESTRICT region = regionSparse->denseVector(); double tolerance = zeroTolerance_; const int *startColumn = startColumnU_.array(); const int *indexRow = indexRowU_.array(); const CoinFactorizationDouble *element = elementU_.array(); const CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); #ifdef COIN_DEVELOP ncall_SZ++; nrow_SZ += numberRows_; nslack_SZ += numberSlacks_; nU_SZ += numberU_; #endif for (int ii = 0; ii < numberNonZero; ii++) { int iPivot = indexIn[ii]; int iWord = iPivot >> CHECK_SHIFT; int iBit = iPivot - (iWord << CHECK_SHIFT); if (mark[iWord]) { mark[iWord] = static_cast< CoinCheckZero >(mark[iWord] | (1 << iBit)); } else { mark[iWord] = static_cast< CoinCheckZero >(1 << iBit); stack[nMarked++] = iWord; } } numberNonZero = 0; // First do down to convenient power of 2 int jLast = (numberU_ - 1) >> CHECK_SHIFT; jLast = CoinMax((jLast << CHECK_SHIFT), static_cast< int >(numberSlacks_)); int i; for (i = numberU_ - 1; i >= jLast; i--) { CoinFactorizationDouble pivotValue = region[i]; region[i] = 0.0; if (fabs(pivotValue) > tolerance) { #ifdef COIN_DEVELOP nnz_SZ++; #endif int start = startColumn[i]; const CoinFactorizationDouble *thisElement = element + start; const int *thisIndex = indexRow + start; #ifdef COIN_DEVELOP nDone_SZ += numberInColumn[i]; #endif for (int j = numberInColumn[i] - 1; j >= 0; j--) { int iRow0 = thisIndex[j]; CoinFactorizationDouble regionValue0 = region[iRow0]; CoinFactorizationDouble value0 = thisElement[j]; int iWord = iRow0 >> CHECK_SHIFT; int iBit = iRow0 - (iWord << CHECK_SHIFT); if (mark[iWord]) { mark[iWord] = static_cast< CoinCheckZero >(mark[iWord] | (1 << iBit)); } else { mark[iWord] = static_cast< CoinCheckZero >(1 << iBit); stack[nMarked++] = iWord; } region[iRow0] = regionValue0 - value0 * pivotValue; } pivotValue *= pivotRegion[i]; region[i] = pivotValue; regionIndex[numberNonZero++] = i; } } int kLast = (numberSlacks_ + BITS_PER_CHECK - 1) >> CHECK_SHIFT; if (jLast > numberSlacks_) { // now do in chunks for (int k = (jLast >> CHECK_SHIFT) - 1; k >= kLast; k--) { unsigned int iMark = mark[k]; if (iMark) { // something in chunk - do all (as imark may change) int iLast = k << CHECK_SHIFT; for (i = iLast + BITS_PER_CHECK - 1; i >= iLast; i--) { CoinFactorizationDouble pivotValue = region[i]; if (pivotValue) { #ifdef COIN_DEVELOP nnz_SZ++; #endif region[i] = 0.0; if (fabs(pivotValue) > tolerance) { int start = startColumn[i]; const CoinFactorizationDouble *thisElement = element + start; const int *thisIndex = indexRow + start; #ifdef COIN_DEVELOP nDone_SZ += numberInColumn[i]; #endif for (int j = numberInColumn[i] - 1; j >= 0; j--) { int iRow0 = thisIndex[j]; CoinFactorizationDouble regionValue0 = region[iRow0]; CoinFactorizationDouble value0 = thisElement[j]; int iWord = iRow0 >> CHECK_SHIFT; int iBit = iRow0 - (iWord << CHECK_SHIFT); if (mark[iWord]) { mark[iWord] = static_cast< CoinCheckZero >(mark[iWord] | (1 << iBit)); } else { mark[iWord] = static_cast< CoinCheckZero >(1 << iBit); stack[nMarked++] = iWord; } region[iRow0] = regionValue0 - value0 * pivotValue; } pivotValue *= pivotRegion[i]; region[i] = pivotValue; regionIndex[numberNonZero++] = i; } } } mark[k] = 0; } } i = (kLast << CHECK_SHIFT) - 1; } for (; i >= numberSlacks_; i--) { CoinFactorizationDouble pivotValue = region[i]; region[i] = 0.0; if (fabs(pivotValue) > tolerance) { #ifdef COIN_DEVELOP nnz_SZ++; #endif int start = startColumn[i]; const CoinFactorizationDouble *thisElement = element + start; const int *thisIndex = indexRow + start; #ifdef COIN_DEVELOP nDone_SZ += numberInColumn[i]; #endif for (int j = numberInColumn[i] - 1; j >= 0; j--) { int iRow0 = thisIndex[j]; CoinFactorizationDouble regionValue0 = region[iRow0]; CoinFactorizationDouble value0 = thisElement[j]; int iWord = iRow0 >> CHECK_SHIFT; int iBit = iRow0 - (iWord << CHECK_SHIFT); if (mark[iWord]) { mark[iWord] = static_cast< CoinCheckZero >(mark[iWord] | (1 << iBit)); } else { mark[iWord] = static_cast< CoinCheckZero >(1 << iBit); stack[nMarked++] = iWord; } region[iRow0] = regionValue0 - value0 * pivotValue; } pivotValue *= pivotRegion[i]; region[i] = pivotValue; regionIndex[numberNonZero++] = i; } } if (numberSlacks_) { // now do slacks #ifndef COIN_FAST_CODE double factor = slackValue_; if (factor == 1.0) { // First do down to convenient power of 2 int jLast = (numberSlacks_ - 1) >> CHECK_SHIFT; jLast = jLast << CHECK_SHIFT; for (i = numberSlacks_ - 1; i >= jLast; i--) { double value = region[i]; double absValue = fabs(value); if (value) { region[i] = 0.0; if (absValue > tolerance) { region[i] = value; regionIndex[numberNonZero++] = i; } } } mark[jLast] = 0; // now do in chunks for (int k = (jLast >> CHECK_SHIFT) - 1; k >= 0; k--) { unsigned int iMark = mark[k]; if (iMark) { // something in chunk - do all (as imark may change) int iLast = k << CHECK_SHIFT; i = iLast + BITS_PER_CHECK - 1; for (; i >= iLast; i--) { double value = region[i]; double absValue = fabs(value); if (value) { region[i] = 0.0; if (absValue > tolerance) { region[i] = value; regionIndex[numberNonZero++] = i; } } } mark[k] = 0; } } } else { assert(factor == -1.0); #endif // First do down to convenient power of 2 int jLast = (numberSlacks_ - 1) >> CHECK_SHIFT; jLast = jLast << CHECK_SHIFT; for (i = numberSlacks_ - 1; i >= jLast; i--) { double value = region[i]; double absValue = fabs(value); if (value) { region[i] = 0.0; if (absValue > tolerance) { region[i] = -value; regionIndex[numberNonZero++] = i; } } } mark[jLast] = 0; // now do in chunks for (int k = (jLast >> CHECK_SHIFT) - 1; k >= 0; k--) { unsigned int iMark = mark[k]; if (iMark) { // something in chunk - do all (as imark may change) int iLast = k << CHECK_SHIFT; i = iLast + BITS_PER_CHECK - 1; for (; i >= iLast; i--) { double value = region[i]; double absValue = fabs(value); if (value) { region[i] = 0.0; if (absValue > tolerance) { region[i] = -value; regionIndex[numberNonZero++] = i; } } } mark[k] = 0; } } #ifndef COIN_FAST_CODE } #endif } regionSparse->setNumElements(numberNonZero); mark[(numberU_ - 1) >> CHECK_SHIFT] = 0; mark[numberSlacks_ >> CHECK_SHIFT] = 0; if (numberSlacks_) mark[(numberSlacks_ - 1) >> CHECK_SHIFT] = 0; #ifdef COIN_DEBUG for (i = 0; i < maximumRowsExtra_; i++) { assert(!mark[i]); } #endif } // updateColumnR. Updates part of column (FTRANR) void CoinFactorization::updateColumnR(CoinIndexedVector *regionSparse) const { double *COIN_RESTRICT region = regionSparse->denseVector(); int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); int numberNonZero = regionSparse->getNumElements(); if (!numberR_) return; //return if nothing to do double tolerance = zeroTolerance_; const int *startColumn = startColumnR_.array() - numberRows_; const int *indexRow = indexRowR_; const CoinFactorizationDouble *element = elementR_; const int *permute = permute_.array(); // Work out very dubious idea of what would be fastest int method = -1; // Size of R double sizeR = startColumnR_.array()[numberR_]; // Average double averageR = sizeR / (static_cast< double >(numberRowsExtra_)); // weights (relative to actual work) double setMark = 0.1; // setting mark double test1 = 1.0; // starting ftran (without testPivot) double testPivot = 2.0; // Seeing if zero etc double startDot = 2.0; // For starting dot product version // For final scan double final = numberNonZero * 1.0; double methodTime[3]; // For second type methodTime[1] = numberPivots_ * (testPivot + ((static_cast< double >(numberNonZero)) / (static_cast< double >(numberRows_)) * averageR)); methodTime[1] += numberNonZero * (test1 + averageR); // For first type methodTime[0] = methodTime[1] + (numberNonZero + numberPivots_) * setMark; methodTime[1] += numberNonZero * final; // third methodTime[2] = sizeR + numberPivots_ * startDot + numberNonZero * final; // switch off if necessary if (!numberInColumnPlus_.array()) { methodTime[0] = 1.0e100; methodTime[1] = 1.0e100; } else if (!sparse_.array()) { methodTime[0] = 1.0e100; } double best = 1.0e100; for (int i = 0; i < 3; i++) { if (methodTime[i] < best) { best = methodTime[i]; method = i; } } assert(method >= 0); const int *numberInColumnPlus = numberInColumnPlus_.array(); //if (method==1) //printf(" methods %g %g %g - chosen %d\n",methodTime[0],methodTime[1],methodTime[2],method); switch (method) { case 0: #ifdef STACK { // use sparse_ as temporary area // mark known to be zero #if ABOCA_LITE_FACTORIZATION == 0 #define sparseOffset 0 #else int sparseOffset = ((regionSparse->capacity() & 0x80000000) != 0) ? sparseOffset_ : 0; assert(!sparseOffset); #endif int *COIN_RESTRICT stack = sparse_.array() + sparseOffset; /* pivot */ int *COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ int *COIN_RESTRICT next = (int *)(list + maximumRowsExtra_); /* jnext */ char *COIN_RESTRICT mark = (char *)(next + maximumRowsExtra_); // we have another copy of R in R const CoinFactorizationDouble *elementR = elementR_ + lengthAreaR_; const int *indexRowR = indexRowR_ + lengthAreaR_; const int *startR = startColumnR_.array() + maximumPivots_ + 1; int nList = 0; const int *permuteBack = permuteBack_.array(); for (int k = 0; k < numberNonZero; k++) { int kPivot = regionIndex[k]; if (!mark[kPivot]) { stack[0] = kPivot; int j = -10; next[0] = j; int nStack = 0; while (nStack >= 0) { /* take off stack */ if (j >= startR[kPivot]) { int jPivot = indexRowR[j--]; /* put back on stack */ next[nStack] = j; if (!mark[jPivot]) { /* and new one */ kPivot = jPivot; j = -10; stack[++nStack] = kPivot; mark[kPivot] = 1; next[nStack] = j; } } else if (j == -10) { // before first - see if followon int jPivot = permuteBack[kPivot]; if (jPivot < numberRows_) { // no j = startR[kPivot] + numberInColumnPlus[kPivot] - 1; next[nStack] = j; } else { // add to list if (!mark[jPivot]) { /* and new one */ kPivot = jPivot; j = -10; stack[++nStack] = kPivot; mark[kPivot] = 1; next[nStack] = j; } else { j = startR[kPivot] + numberInColumnPlus[kPivot] - 1; next[nStack] = j; } } } else { // finished list[nList++] = kPivot; mark[kPivot] = 1; --nStack; if (nStack >= 0) { kPivot = stack[nStack]; j = next[nStack]; } } } } } numberNonZero = 0; for (int i = nList - 1; i >= 0; i--) { int iPivot = list[i]; mark[iPivot] = 0; CoinFactorizationDouble pivotValue; if (iPivot < numberRows_) { pivotValue = region[iPivot]; } else { int before = permute[iPivot]; pivotValue = region[iPivot] + region[before]; region[before] = 0.0; } if (fabs(pivotValue) > tolerance) { region[iPivot] = pivotValue; int start = startR[iPivot]; int number = numberInColumnPlus[iPivot]; int end = start + number; int j; for (j = start; j < end; j++) { int iRow = indexRowR[j]; CoinFactorizationDouble value = elementR[j]; region[iRow] -= value * pivotValue; } regionIndex[numberNonZero++] = iPivot; } else { region[iPivot] = 0.0; } } } #else { // use sparse_ as temporary area // mark known to be zero #if ABOCA_LITE_FACTORIZATION == 0 #define sparseOffset 0 #else int sparseOffset = ((regionSparse->capacity() & 0x80000000) != 0) ? sparseOffset_ : 0; assert(!sparseOffset); #endif int *COIN_RESTRICT stack = sparse_.array() + sparseOffset; /* pivot */ int *COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ int *COIN_RESTRICT next = reinterpret_cast< int * >(list + maximumRowsExtra_); /* jnext */ char *COIN_RESTRICT mark = reinterpret_cast< char * >(next + maximumRowsExtra_); // mark all rows which will be permuted for (int i = numberRows_; i < numberRowsExtra_; i++) { int iRow = permute[i]; mark[iRow] = 1; } // we have another copy of R in R const CoinFactorizationDouble *elementR = elementR_ + lengthAreaR_; const int *indexRowR = indexRowR_ + lengthAreaR_; const int *startR = startColumnR_.array() + maximumPivots_ + 1; // For current list order does not matter as // only affects end int newNumber = 0; for (int i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; assert(region[iRow]); if (!mark[iRow]) regionIndex[newNumber++] = iRow; int number = numberInColumnPlus[iRow]; if (number) { CoinFactorizationDouble pivotValue = region[iRow]; int start = startR[iRow]; int end = start + number; for (int j = start; j < end; j++) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue * value; } } } numberNonZero = newNumber; for (int i = numberRows_; i < numberRowsExtra_; i++) { //move using permute_ (stored in inverse fashion) int iRow = permute[i]; CoinFactorizationDouble pivotValue = region[iRow] + region[i]; //zero out pre-permuted region[iRow] = 0.0; if (fabs(pivotValue) > tolerance) { region[i] = pivotValue; if (!mark[i]) regionIndex[numberNonZero++] = i; int number = numberInColumnPlus[i]; int start = startR[i]; int end = start + number; for (int j = start; j < end; j++) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue * value; } } else { region[i] = 0.0; } mark[iRow] = 0; } } #endif break; case 1: { // no sparse region // we have another copy of R in R const CoinFactorizationDouble *elementR = elementR_ + lengthAreaR_; const int *indexRowR = indexRowR_ + lengthAreaR_; const int *startR = startColumnR_.array() + maximumPivots_ + 1; // For current list order does not matter as // only affects end for (int i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; assert(region[iRow]); int number = numberInColumnPlus[iRow]; if (number) { CoinFactorizationDouble pivotValue = region[iRow]; int start = startR[iRow]; int end = start + number; for (int j = start; j < end; j++) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue * value; } } } for (int i = numberRows_; i < numberRowsExtra_; i++) { //move using permute_ (stored in inverse fashion) int iRow = permute[i]; CoinFactorizationDouble pivotValue = region[iRow] + region[i]; //zero out pre-permuted region[iRow] = 0.0; if (fabs(pivotValue) > tolerance) { region[i] = pivotValue; regionIndex[numberNonZero++] = i; int number = numberInColumnPlus[i]; int start = startR[i]; int end = start + number; for (int j = start; j < end; j++) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue * value; } } else { region[i] = 0.0; } } } break; case 2: { int start = startColumn[numberRows_]; for (int i = numberRows_; i < numberRowsExtra_; i++) { //move using permute_ (stored in inverse fashion) int end = startColumn[i + 1]; int iRow = permute[i]; CoinFactorizationDouble pivotValue = region[iRow]; //zero out pre-permuted region[iRow] = 0.0; for (int j = start; j < end; j++) { CoinFactorizationDouble value = element[j]; int jRow = indexRow[j]; value *= region[jRow]; pivotValue -= value; } start = end; if (fabs(pivotValue) > tolerance) { region[i] = pivotValue; regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } } break; } if (method) { // pack down int n = numberNonZero; numberNonZero = 0; for (int i = 0; i < n; i++) { int indexValue = regionIndex[i]; double value = region[indexValue]; if (value) regionIndex[numberNonZero++] = indexValue; } } //set counts regionSparse->setNumElements(numberNonZero); } // updateColumnR. Updates part of column (FTRANR) void CoinFactorization::updateColumnRFT(CoinIndexedVector *regionSparse, int *COIN_RESTRICT regionIndex) { double *COIN_RESTRICT region = regionSparse->denseVector(); //int *regionIndex = regionSparse->getIndices ( ); int *COIN_RESTRICT startColumnU = startColumnU_.array(); int numberNonZero = regionSparse->getNumElements(); if (numberR_) { double tolerance = zeroTolerance_; const int *startColumn = startColumnR_.array() - numberRows_; const int *indexRow = indexRowR_; const CoinFactorizationDouble *element = elementR_; const int *permute = permute_.array(); // Work out very dubious idea of what would be fastest int method = -1; // Size of R double sizeR = startColumnR_.array()[numberR_]; // Average double averageR = sizeR / (static_cast< double >(numberRowsExtra_)); // weights (relative to actual work) double setMark = 0.1; // setting mark double test1 = 1.0; // starting ftran (without testPivot) double testPivot = 2.0; // Seeing if zero etc double startDot = 2.0; // For starting dot product version // For final scan double final = numberNonZero * 1.0; double methodTime[3]; // For second type methodTime[1] = numberPivots_ * (testPivot + ((static_cast< double >(numberNonZero)) / (static_cast< double >(numberRows_)) * averageR)); methodTime[1] += numberNonZero * (test1 + averageR); // For first type methodTime[0] = methodTime[1] + (numberNonZero + numberPivots_) * setMark; methodTime[1] += numberNonZero * final; // third methodTime[2] = sizeR + numberPivots_ * startDot + numberNonZero * final; // switch off if necessary if (!numberInColumnPlus_.array()) { methodTime[0] = 1.0e100; methodTime[1] = 1.0e100; } else if (!sparse_.array()) { methodTime[0] = 1.0e100; } const int *numberInColumnPlus = numberInColumnPlus_.array(); int *numberInColumn = numberInColumn_.array(); // adjust for final scan methodTime[1] += final; double best = 1.0e100; for (int i = 0; i < 3; i++) { if (methodTime[i] < best) { best = methodTime[i]; method = i; } } assert(method >= 0); switch (method) { case 0: { // use sparse_ as temporary area // mark known to be zero #if ABOCA_LITE_FACTORIZATION == 0 #define sparseOffset 0 #else int sparseOffset = ((regionSparse->capacity() & 0x80000000) != 0) ? sparseOffset_ : 0; assert(!sparseOffset); #endif int *COIN_RESTRICT stack = sparse_.array() + sparseOffset; /* pivot */ int *COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ int *COIN_RESTRICT next = reinterpret_cast< int * >(list + maximumRowsExtra_); /* jnext */ char *COIN_RESTRICT mark = reinterpret_cast< char * >(next + maximumRowsExtra_); // mark all rows which will be permuted for (int i = numberRows_; i < numberRowsExtra_; i++) { int iRow = permute[i]; mark[iRow] = 1; } // we have another copy of R in R const CoinFactorizationDouble *elementR = elementR_ + lengthAreaR_; const int *indexRowR = indexRowR_ + lengthAreaR_; const int *startR = startColumnR_.array() + maximumPivots_ + 1; //save in U //in at end int iColumn = numberColumnsExtra_; startColumnU[iColumn] = startColumnU[maximumColumnsExtra_]; int start = startColumnU[iColumn]; //int * putIndex = indexRowU_ + start; CoinFactorizationDouble *COIN_RESTRICT putElement = elementU_.array() + start; // For current list order does not matter as // only affects end int newNumber = 0; for (int i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; CoinFactorizationDouble pivotValue = region[iRow]; assert(region[iRow]); if (!mark[iRow]) { //putIndex[newNumber]=iRow; putElement[newNumber] = pivotValue; ; regionIndex[newNumber++] = iRow; } int number = numberInColumnPlus[iRow]; if (number) { int start = startR[iRow]; int end = start + number; for (int j = start; j < end; j++) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue * value; } } } numberNonZero = newNumber; for (int i = numberRows_; i < numberRowsExtra_; i++) { //move using permute_ (stored in inverse fashion) int iRow = permute[i]; CoinFactorizationDouble pivotValue = region[iRow] + region[i]; //zero out pre-permuted region[iRow] = 0.0; if (fabs(pivotValue) > tolerance) { region[i] = pivotValue; if (!mark[i]) { //putIndex[numberNonZero]=i; putElement[numberNonZero] = pivotValue; ; regionIndex[numberNonZero++] = i; } int number = numberInColumnPlus[i]; int start = startR[i]; int end = start + number; for (int j = start; j < end; j++) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue * value; } } else { region[i] = 0.0; } mark[iRow] = 0; } numberInColumn[iColumn] = numberNonZero; startColumnU[maximumColumnsExtra_] = start + numberNonZero; } break; case 1: { // no sparse region // we have another copy of R in R const CoinFactorizationDouble *elementR = elementR_ + lengthAreaR_; const int *indexRowR = indexRowR_ + lengthAreaR_; const int *startR = startColumnR_.array() + maximumPivots_ + 1; // For current list order does not matter as // only affects end for (int i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; assert(region[iRow]); int number = numberInColumnPlus[iRow]; if (number) { CoinFactorizationDouble pivotValue = region[iRow]; int start = startR[iRow]; int end = start + number; for (int j = start; j < end; j++) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue * value; } } } for (int i = numberRows_; i < numberRowsExtra_; i++) { //move using permute_ (stored in inverse fashion) int iRow = permute[i]; CoinFactorizationDouble pivotValue = region[iRow] + region[i]; //zero out pre-permuted region[iRow] = 0.0; if (fabs(pivotValue) > tolerance) { region[i] = pivotValue; regionIndex[numberNonZero++] = i; int number = numberInColumnPlus[i]; int start = startR[i]; int end = start + number; for (int j = start; j < end; j++) { CoinFactorizationDouble value = elementR[j]; int jRow = indexRowR[j]; region[jRow] -= pivotValue * value; } } else { region[i] = 0.0; } } } break; case 2: { int start = startColumn[numberRows_]; for (int i = numberRows_; i < numberRowsExtra_; i++) { //move using permute_ (stored in inverse fashion) int end = startColumn[i + 1]; int iRow = permute[i]; CoinFactorizationDouble pivotValue = region[iRow]; //zero out pre-permuted region[iRow] = 0.0; for (int j = start; j < end; j++) { CoinFactorizationDouble value = element[j]; int jRow = indexRow[j]; value *= region[jRow]; pivotValue -= value; } start = end; if (fabs(pivotValue) > tolerance) { region[i] = pivotValue; regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } } break; } if (method) { // pack down int n = numberNonZero; numberNonZero = 0; //save in U //in at end int iColumn = numberColumnsExtra_; assert(startColumnU[iColumn] == startColumnU[maximumColumnsExtra_]); int start = startColumnU[iColumn]; int *COIN_RESTRICT putIndex = indexRowU_.array() + start; CoinFactorizationDouble *COIN_RESTRICT putElement = elementU_.array() + start; for (int i = 0; i < n; i++) { int indexValue = regionIndex[i]; double value = region[indexValue]; if (value) { putIndex[numberNonZero] = indexValue; putElement[numberNonZero] = value; regionIndex[numberNonZero++] = indexValue; } } numberInColumn[iColumn] = numberNonZero; startColumnU[maximumColumnsExtra_] = start + numberNonZero; } //set counts regionSparse->setNumElements(numberNonZero); } else { // No R but we still need to save column //save in U //in at end int *COIN_RESTRICT numberInColumn = numberInColumn_.array(); numberNonZero = regionSparse->getNumElements(); int iColumn = numberColumnsExtra_; assert(startColumnU[iColumn] == startColumnU[maximumColumnsExtra_]); int start = startColumnU[iColumn]; numberInColumn[iColumn] = numberNonZero; startColumnU[maximumColumnsExtra_] = start + numberNonZero; int *COIN_RESTRICT putIndex = indexRowU_.array() + start; CoinFactorizationDouble *COIN_RESTRICT putElement = elementU_.array() + start; for (int i = 0; i < numberNonZero; i++) { int indexValue = regionIndex[i]; double value = region[indexValue]; putIndex[i] = indexValue; putElement[i] = value; } } } /* Updates one column (FTRAN) from region2 and permutes. region1 starts as zero Note - if regionSparse2 packed on input - will be packed on output - returns un-permuted result in region2 and region1 is zero */ int CoinFactorization::updateColumnFT(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) { #ifdef CLP_FACTORIZATION_INSTRUMENT double startTimeX = CoinCpuTime(); #endif //permute and move indices into index array int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); int numberNonZero = regionSparse2->getNumElements(); const int *permute = permute_.array(); int *COIN_RESTRICT index = regionSparse2->getIndices(); double *COIN_RESTRICT region = regionSparse->denseVector(); double *COIN_RESTRICT array = regionSparse2->denseVector(); int *COIN_RESTRICT startColumnU = startColumnU_.array(); bool doFT = doForrestTomlin_; // see if room if (doFT) { int iColumn = numberColumnsExtra_; startColumnU[iColumn] = startColumnU[maximumColumnsExtra_]; int start = startColumnU[iColumn]; int space = lengthAreaU_ - (start + numberRowsExtra_); doFT = space >= 0; if (doFT) { regionIndex = indexRowU_.array() + start; } else { startColumnU[maximumColumnsExtra_] = lengthAreaU_ + 1; } } #ifndef CLP_FACTORIZATION bool packed = regionSparse2->packedMode(); if (packed) { #else assert(regionSparse2->packedMode()); #endif for (int j = 0; j < numberNonZero; j++) { int iRow = index[j]; double value = array[j]; array[j] = 0.0; iRow = permute[iRow]; region[iRow] = value; regionIndex[j] = iRow; } #ifndef CLP_FACTORIZATION } else { for (int j = 0; j < numberNonZero; j++) { int iRow = index[j]; double value = array[iRow]; array[iRow] = 0.0; iRow = permute[iRow]; region[iRow] = value; regionIndex[j] = iRow; } } #endif regionSparse->setNumElements(numberNonZero); if (collectStatistics_) { numberFtranCounts_++; ftranCountInput_ += numberNonZero; } // ******* L #if 0 { double *region = regionSparse->denseVector ( ); //int *regionIndex = regionSparse->getIndices ( ); int numberNonZero = regionSparse->getNumElements ( ); for (int i=0;idenseVector ( ); //int *regionIndex = regionSparse->getIndices ( ); int numberNonZero = regionSparse->getNumElements ( ); for (int i=0;igetNumElements(); //permute extra //row bits here if (doFT) updateColumnRFT(regionSparse, regionIndex); else updateColumnR(regionSparse); if (collectStatistics_) ftranCountAfterR_ += regionSparse->getNumElements(); // ******* U updateColumnU(regionSparse, regionIndex); if (!doForrestTomlin_) { // Do PFI after everything else updateColumnPFI(regionSparse); } permuteBack(regionSparse, regionSparse2); #ifdef CLP_FACTORIZATION_INSTRUMENT numberUpdateFT++; timeInUpdateFT += CoinCpuTime() - startTimeX; averageLengthR += lengthR_; averageLengthU += lengthU_; averageLengthL += lengthL_; #endif // will be negative if no room if (doFT) return regionSparse2->getNumElements(); else return -regionSparse2->getNumElements(); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinParamUtils.cpp0000644000175200017520000005613413414454441017166 0ustar coincoin/* $Id: CoinParamUtils.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2007, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include "CoinUtilsConfig.h" #include "CoinParam.hpp" #include #include #include #ifdef COIN_HAS_READLINE #include #include #endif /* Unnamed local namespace */ namespace { /* cmdField: The index of the current command line field. Forced to -1 when accepting commands from stdin (interactive) or a command file. readSrc: Current input source. pendingVal: When the form param=value is encountered, both keyword and value form one command line field. We need to return `param' as the field and somehow keep the value around for the upcoming call that'll request it. That's the purpose of pendingVal. */ int cmdField = 1; FILE *readSrc = stdin; std::string pendingVal = ""; /* Get next command or field in command. When in interactive mode, prompt the user and read the resulting line of input. */ std::string nextField(const char *prompt) { static char line[1000]; static char *where = NULL; std::string field; const char *dflt_prompt = "Eh? "; if (prompt == 0) { prompt = dflt_prompt; } /* Do we have a line at the moment? If not, acquire one. When we're done, line holds the input line and where points to the start of the line. If we're using the readline library, add non-empty lines to the history list. */ if (!where) { #ifdef COIN_HAS_READLINE if (readSrc == stdin) { where = readline(prompt); if (where) { if (*where) add_history(where); strcpy(line, where); free(where); where = line; } } else { where = fgets(line, 1000, readSrc); } #else if (readSrc == stdin) { fprintf(stdout, "%s", prompt); fflush(stdout); } where = fgets(line, 1000, readSrc); #endif /* If where is NULL, we have EOF. Return a null string. */ if (!where) return field; /* Clean the image. Trailing junk first. The line will be cut off at the last non-whitespace character, but we need to scan until we find the end of the string or some other non-printing character to make sure we don't miss a printing character after whitespace. */ char *lastNonBlank = line - 1; for (where = line; *where != '\0'; where++) { if (*where != '\t' && *where < ' ') { break; } if (*where != '\t' && *where != ' ') { lastNonBlank = where; } } *(lastNonBlank + 1) = '\0'; where = line; } /* Munch through leading white space. */ while (*where == ' ' || *where == '\t') where++; /* See if we can separate a field; if so, copy it over into field for return. If we're out of line, return the string "EOL". */ char *saveWhere = where; while (*where != ' ' && *where != '\t' && *where != '\0') where++; if (where != saveWhere) { char save = *where; *where = '\0'; field = saveWhere; *where = save; } else { where = NULL; field = "EOL"; } return (field); } } /* Visible functions */ namespace CoinParamUtils { /* As mentioned above, cmdField set to -1 is the indication that we're reading from stdin or a file. */ void setInputSrc(FILE *src) { if (src != 0) { cmdField = -1; readSrc = src; } } /* A utility to allow clients to determine if we're processing parameters from the comand line or otherwise. */ bool isCommandLine() { assert(cmdField != 0); if (cmdField > 0) { return (true); } else { return (false); } } /* A utility to allow clients to determine if we're accepting parameters interactively. */ bool isInteractive() { assert(cmdField != 0); if (cmdField < 0 && readSrc == stdin) { return (true); } else { return (false); } } /* Utility functions for acquiring input. */ /* Return the next field (word) from the current command line. Generally, this is expected to be of the form `-param' or `--param', with special cases as set out below. If we're in interactive mode (cmdField == -1), nextField does all the work to prompt the user and return the next field from the resulting input. It is assumed that the user knows not to use `-' or `--' prefixes in interactive mode. If we're in command line mode (cmdField > 0), cmdField indicates the current command line word. The order of processing goes like this: * A stand-alone `-' is converted to `stdin' * A stand-alone '--' is returned as a word; interpretation is up to the client. * A prefix of '-' or '--' is stripped from the field. If the result is `stdin', it's assumed we're switching to interactive mode and the user is prompted for another command. Whatever results from the above sequence is returned to the client as the next field. An empty string indicates end of input. Prompt will be used by nextField if it's necessary to prompt the user for a command (only when reading from stdin). If provided, pfx is set to the prefix ("-", "--", or "") stripped from the field. Lack of prefix is not necessarily an error because of the following scenario: To read a file, the verbose command might be "foo -import myfile". But we might want to allow a short form, "foo myfile". And we'd like "foo import" to be interpreted as "foo -import import" (i.e., import the file named `import'). */ std::string getCommand(int argc, const char *argv[], const std::string prompt, std::string *pfx) { std::string field = "EOL"; pendingVal = ""; int pfxlen; if (pfx != 0) { (*pfx) = ""; } /* Acquire the next field, and convert as outlined above if we're processing command line parameters. */ while (field == "EOL") { pfxlen = 0; if (cmdField > 0) { if (cmdField < argc) { field = argv[cmdField++]; if (field == "-") { field = "stdin"; } else if (field == "--") { /* Prevent `--' from being eaten by next case. */ } else { if (field[0] == '-') { pfxlen = 1; if (field[1] == '-') pfxlen = 2; if (pfx != 0) (*pfx) = field.substr(0, pfxlen); field = field.substr(pfxlen); } } } else { field = ""; } } else { field = nextField(prompt.c_str()); } if (field == "stdin") { std::cout << "Switching to line mode" << std::endl; cmdField = -1; field = nextField(prompt.c_str()); } } /* Are we left with something of the form param=value? If so, separate the pieces, returning `param' and saving `value' for later use as per comments at the head of the file. */ std::string::size_type found = field.find('='); if (found != std::string::npos) { pendingVal = field.substr(found + 1); field = field.substr(0, found); } return (field); } /* Function to look up a parameter keyword (name) in the parameter vector and deal with the result. The keyword may end in one or more `?' characters; this is a query for information about matching parameters. If we have a single match satisfying the minimal match requirements, and there's no query, we simply return the index of the matching parameter in the parameter vector. If there are no matches, and no query, the return value will be -3. No matches on a query returns -1. A single short match, or a single match of any length with a query, will result in a short help message If present, these values are set as follows: * matchCntp is set to the number of parameters that matched. * shortCntp is set to the number of matches that failed to meet the minimum match requirement. * queryCntp is set to the number of trailing `?' characters at the end of name. Return values: >0: index of the single unique match for the name -1: query present -2: no query, one or more short matches -3: no query, no match -4: multiple full matches (indicates configuration error) The final three parameters (matchCnt, shortCnt, queryCnt) are optional and default to null. Use them if you want more detail on the match. */ int lookupParam(std::string name, CoinParamVec ¶mVec, int *matchCntp, int *shortCntp, int *queryCntp) { int retval = -3; if (matchCntp != 0) { *matchCntp = 0; } if (shortCntp != 0) { *shortCntp = 0; } if (queryCntp != 0) { *queryCntp = 0; } /* Is there anything here at all? */ if (name.length() == 0) { return (retval); } /* Scan the parameter name to see if it ends in one or more `?' characters. If so, take it as a request to return a list of parameters that match name up to the first `?'. The strings '?' and '???' are considered to be valid parameter names (short and long help, respectively) and are handled as special cases: If the whole string is `?'s, one and three are commands as is, while 2 and 4 or more are queries about `?' or `???'. */ int numQuery = 0; { int length = static_cast< int >(name.length()); int i; for (i = length - 1; i >= 0 && name[i] == '?'; i--) { numQuery++; } if (numQuery == length) { switch (length) { case 1: case 3: { numQuery = 0; break; } case 2: { numQuery -= 1; break; } default: { numQuery -= 3; break; } } } name = name.substr(0, length - numQuery); if (queryCntp != 0) { *queryCntp = numQuery; } } /* See if we can match the parameter name. On return, matchNdx is set to the last match satisfying the minimal match criteria, or -1 if there's no match. matchCnt is the number of matches satisfying the minimum match length, and shortCnt is possible matches that were short of the minimum match length, */ int matchNdx = -1; int shortCnt = 0; int matchCnt = CoinParamUtils::matchParam(paramVec, name, matchNdx, shortCnt); /* Set up return values before we get into further processing. */ if (matchCntp != 0) { *matchCntp = matchCnt; } if (shortCntp != 0) { *shortCntp = shortCnt; } if (numQuery > 0) { retval = -1; } else { if (matchCnt + shortCnt == 0) { retval = -3; } else if (matchCnt > 1) { retval = -4; } else { retval = -2; } } /* No matches? Nothing more to be done here. */ if (matchCnt + shortCnt == 0) { return (retval); } /* A unique match and no `?' in the name says we have our parameter. Return the result. */ if (matchCnt == 1 && shortCnt == 0 && numQuery == 0) { assert(matchNdx >= 0 && matchNdx < static_cast< int >(paramVec.size())); return (matchNdx); } /* A single match? There are two possibilities: * The string specified is shorter than the match length requested by the parameter. (Useful for avoiding inadvertent execution of commands that the client might regret.) * The string specified contained a `?', in which case we print the help. The match may or may not be short. */ if (matchCnt + shortCnt == 1) { CoinParamUtils::shortOrHelpOne(paramVec, matchNdx, name, numQuery); return (retval); } /* The final case: multiple matches. Most commonly this will be multiple short matches. If we have multiple matches satisfying the minimal length criteria, we have a configuration problem. The other question is whether the user wanted help information. Two question marks gets short help. */ if (matchCnt > 1) { std::cout << "Configuration error! `" << name << "' was fully matched " << matchCnt << " times!" << std::endl; } std::cout << "Multiple matches for `" << name << "'; possible completions:" << std::endl; CoinParamUtils::shortOrHelpMany(paramVec, name, numQuery); return (retval); } /* Utility functions to acquire parameter values from the command line. For all of these, a pendingVal is consumed if it exists. */ /* Read a string and return a pointer to the string. Set valid to indicate the result of parsing: 0: okay, 1: , 2: not present. */ std::string getStringField(int argc, const char *argv[], int *valid) { std::string field; if (pendingVal != "") { field = pendingVal; pendingVal = ""; } else { field = "EOL"; if (cmdField > 0) { if (cmdField < argc) { field = argv[cmdField++]; } } else { field = nextField(0); } } if (valid != 0) { if (field != "EOL") { *valid = 0; } else { *valid = 2; } } return (field); } /* Read an int and return the value. Set valid to indicate the result of parsing: 0: okay, 1: parse error, 2: not present. */ int getIntField(int argc, const char *argv[], int *valid) { std::string field; if (pendingVal != "") { field = pendingVal; pendingVal = ""; } else { field = "EOL"; if (cmdField > 0) { if (cmdField < argc) { field = argv[cmdField++]; } } else { field = nextField(0); } } /* The only way to check for parse error here is to set the system variable errno to 0 and then see if it's nonzero after we try to convert the string to integer. */ int value = 0; errno = 0; if (field != "EOL") { value = atoi(field.c_str()); } if (valid != 0) { if (field != "EOL") { if (errno == 0) { *valid = 0; } else { *valid = 1; } } else { *valid = 2; } } return (value); } /* Read a double and return the value. Set valid to indicate the result of parsing: 0: okay, 1: bad parse, 2: not present. But we'll never return valid == 1 because atof gives us no way to tell.) */ double getDoubleField(int argc, const char *argv[], int *valid) { std::string field; if (pendingVal != "") { field = pendingVal; pendingVal = ""; } else { field = "EOL"; if (cmdField > 0) { if (cmdField < argc) { field = argv[cmdField++]; } } else { field = nextField(0); } } /* The only way to check for parse error here is to set the system variable errno to 0 and then see if it's nonzero after we try to convert the string to integer. */ double value = 0.0; errno = 0; if (field != "EOL") { value = atof(field.c_str()); } if (valid != 0) { if (field != "EOL") { if (errno == 0) { *valid = 0; } else { *valid = 1; } } else { *valid = 2; } } return (value); } /* Utility function to scan a parameter vector for matches. Sets matchNdx to the index of the last parameter that meets the minimal match criteria (but note there should be at most one such parameter if the parameter vector is properly configured). Sets shortCnt to the number of short matches (should be zero in a properly configured vector if a minimal match is found). Returns the number of matches satisfying the minimal match requirement (should be 0 or 1 in a properly configured vector). The routine allows for the possibility of null entries in the parameter vector. In order to handle `?' and `???', there's nothing to it but to force a unique match if we match `?' exactly. (This is another quirk of clp/cbc parameter parsing, which we need to match for historical reasons.) */ int matchParam(const CoinParamVec ¶mVec, std::string name, int &matchNdx, int &shortCnt) { int vecLen = static_cast< int >(paramVec.size()); int matchCnt = 0; matchNdx = -1; shortCnt = 0; for (int i = 0; i < vecLen; i++) { CoinParam *param = paramVec[i]; if (param == 0) continue; int match = paramVec[i]->matches(name); if (match == 1) { matchNdx = i; matchCnt++; if (name == "?") { matchCnt = 1; break; } } else { shortCnt += match >> 1; } } return (matchCnt); } /* Now a bunch of routines that are useful in the context of generating help messages. */ /* Simple formatting routine for long messages. Used to print long help for parameters. Lines are broken at the first white space after 65 characters, or when an explicit return (`\n') character is scanned. Leading spaces are suppressed. */ void printIt(const char *msg) { int length = static_cast< int >(strlen(msg)); char temp[101]; int i; int n = 0; for (i = 0; i < length; i++) { if (msg[i] == '\n' || (n >= 65 && (msg[i] == ' ' || msg[i] == '\t'))) { temp[n] = '\0'; std::cout << temp << std::endl; n = 0; } else if (n || msg[i] != ' ') { temp[n++] = msg[i]; } } if (n > 0) { temp[n] = '\0'; std::cout << temp << std::endl; } return; } /* Utility function for the case where a name matches a single parameter, but either it's short, or the user wanted help, or both. The routine allows for the possibility that there are null entries in the parameter vector, but matchNdx should point to a valid entry if it's >= 0. */ void shortOrHelpOne(CoinParamVec ¶mVec, int matchNdx, std::string name, int numQuery) { int i; int numParams = static_cast< int >(paramVec.size()); int lclNdx = -1; /* For a short match, we need to look up the parameter again. This should find a short match, given the conditions where this routine is called. But be prepared to find a full match. If matchNdx >= 0, just use the index we're handed. */ if (matchNdx < 0) { int match = 0; for (i = 0; i < numParams; i++) { CoinParam *param = paramVec[i]; if (param == 0) continue; int match = param->matches(name); if (match != 0) { lclNdx = i; break; } } assert(lclNdx >= 0); if (match == 1) { std::cout << "Match for '" << name << "': " << paramVec[matchNdx]->matchName() << "."; } else { std::cout << "Short match for '" << name << "'; possible completion: " << paramVec[lclNdx]->matchName() << "."; } } else { assert(matchNdx >= 0 && matchNdx < static_cast< int >(paramVec.size())); std::cout << "Match for `" << name << "': " << paramVec[matchNdx]->matchName(); lclNdx = matchNdx; } /* Print some help, if there was a `?' in the name. `??' gets the long help. */ if (numQuery > 0) { std::cout << std::endl; if (numQuery == 1) { std::cout << paramVec[lclNdx]->shortHelp(); } else { paramVec[lclNdx]->printLongHelp(); } } std::cout << std::endl; return; } /* Utility function for the case where a name matches multiple parameters. Zero or one `?' gets just the matching names, while `??' gets short help with each match. The routine allows for the possibility that there are null entries in the parameter vector. */ void shortOrHelpMany(CoinParamVec ¶mVec, std::string name, int numQuery) { int numParams = static_cast< int >(paramVec.size()); /* Scan the parameter list. For each match, print just the name, or the name and short help. */ int lineLen = 0; bool printed = false; for (int i = 0; i < numParams; i++) { CoinParam *param = paramVec[i]; if (param == 0) continue; int match = param->matches(name); if (match > 0) { std::string nme = param->matchName(); int len = static_cast< int >(nme.length()); if (numQuery >= 2) { std::cout << nme << " : " << param->shortHelp(); std::cout << std::endl; } else { lineLen += 2 + len; if (lineLen > 80) { std::cout << std::endl; lineLen = 2 + len; } std::cout << " " << nme; printed = true; } } } if (printed) { std::cout << std::endl; } return; } /* A generic help message that explains the basic operation of parameter parsing. */ void printGenericHelp() { std::cout << std::endl; std::cout << "For command line arguments, keywords have a leading `-' or '--'; " << std::endl; std::cout << "-stdin or just - switches to stdin with a prompt." << std::endl; std::cout << "When prompted, one command per line, without the leading `-'." << std::endl; std::cout << "abcd value sets abcd to value." << std::endl; std::cout << "abcd without a value (where one is expected) gives the current value." << std::endl; std::cout << "abcd? gives a list of possible matches; if there's only one, a short" << std::endl; std::cout << "help message is printed." << std::endl; std::cout << "abcd?? prints the short help for all matches; if there's only one" << std::endl; std::cout << "match, a longer help message and current value are printed." << std::endl; return; } /* Utility function for various levels of `help' command. The entries between paramVec[firstParam] and paramVec[lastParam], inclusive, will be printed. If shortHelp is true, the short help message will be printed for each parameter. If longHelp is true, the long help message will be printed for each parameter. If hidden is true, even parameters with display = false will be printed. Each line is prefaced with the specified prefix. The routine allows for the possibility that there are null entries in the parameter vector. */ void printHelp(CoinParamVec ¶mVec, int firstParam, int lastParam, std::string prefix, bool shortHelp, bool longHelp, bool hidden) { bool noHelp = !(shortHelp || longHelp); int i; int pfxLen = static_cast< int >(prefix.length()); bool printed = false; if (noHelp) { int lineLen = 0; for (i = firstParam; i <= lastParam; i++) { CoinParam *param = paramVec[i]; if (param == 0) continue; if (param->display() || hidden) { std::string nme = param->matchName(); int len = static_cast< int >(nme.length()); if (!printed) { std::cout << std::endl << prefix; lineLen += pfxLen; printed = true; } lineLen += 2 + len; if (lineLen > 80) { std::cout << std::endl << prefix; lineLen = pfxLen + 2 + len; } std::cout << " " << nme; } } if (printed) { std::cout << std::endl; } } else if (shortHelp) { for (i = firstParam; i <= lastParam; i++) { CoinParam *param = paramVec[i]; if (param == 0) continue; if (param->display() || hidden) { std::cout << std::endl << prefix; std::cout << param->matchName(); std::cout << ": "; std::cout << param->shortHelp(); } } std::cout << std::endl; } else if (longHelp) { for (i = firstParam; i <= lastParam; i++) { CoinParam *param = paramVec[i]; if (param == 0) continue; if (param->display() || hidden) { std::cout << std::endl << prefix; std::cout << "Command: " << param->matchName(); std::cout << std::endl << prefix; std::cout << "---- description" << std::endl; printIt(param->longHelp().c_str()); std::cout << prefix << "----" << std::endl; } } } std::cout << std::endl; return; } } // end namespace CoinParamUtils /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinOslFactorization.hpp0000644000175200017520000002025013415401144020363 0ustar coincoin/* $Id: CoinOslFactorization.hpp 2084 2019-01-09 14:17:08Z forrest $ */ // Copyright (C) 1987, 2009, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /* Authors John Forrest */ #ifndef CoinOslFactorization_H #define CoinOslFactorization_H #include #include #include #include "CoinTypes.hpp" #include "CoinIndexedVector.hpp" #include "CoinDenseFactorization.hpp" class CoinPackedMatrix; /** This deals with Factorization and Updates This is ripped off from OSL!!!!!!!!! I am assuming that 32 bits is enough for number of rows or columns, but CoinBigIndex may be redefined to get 64 bits. */ typedef struct { int suc, pre; } EKKHlink; typedef struct _EKKfactinfo { double drtpiv; double demark; double zpivlu; double zeroTolerance; double areaFactor; int *xrsadr; int *xcsadr; int *xrnadr; int *xcnadr; int *krpadr; int *kcpadr; int *mpermu; int *bitArray; int *back; char *nonzero; double *trueStart; mutable double *kadrpm; int *R_etas_index; int *R_etas_start; double *R_etas_element; int *xecadr; int *xeradr; double *xeeadr; double *xe2adr; EKKHlink *kp1adr; EKKHlink *kp2adr; double *kw1adr; double *kw2adr; double *kw3adr; int *hpivcoR; int nrow; int nrowmx; int firstDoRow; int firstLRow; int maxinv; int nnetas; int iterin; int iter0; int invok; int nbfinv; int num_resets; int nnentl; int nnentu; #ifdef CLP_REUSE_ETAS int save_nnentu; #endif int ndenuc; int npivots; /* use as xpivsq in factorization */ int kmxeta; int xnetal; int first_dense; int last_dense; int iterno; int numberSlacks; int lastSlack; int firstNonSlack; int xnetalval; int lstart; int if_sparse_update; mutable int packedMode; int switch_off_sparse_update; int nuspike; bool rows_ok; /* replaces test using mrstrt[1] */ #ifdef CLP_REUSE_ETAS mutable int reintro; #endif int nR_etas; int sortedEta; /* if vector for F-T is sorted */ int lastEtaCount; int ifvsol; int eta_size; int last_eta_size; int maxNNetas; } EKKfactinfo; class CoinOslFactorization : public CoinOtherFactorization { friend void CoinOslFactorizationUnitTest(const std::string &mpsDir); public: /**@name Constructors and destructor and copy */ //@{ /// Default constructor CoinOslFactorization(); /// Copy constructor CoinOslFactorization(const CoinOslFactorization &other); /// Destructor virtual ~CoinOslFactorization(); /// = copy CoinOslFactorization &operator=(const CoinOslFactorization &other); /// Clone virtual CoinOtherFactorization *clone() const; //@} /**@name Do factorization - public */ //@{ /// Gets space for a factorization virtual void getAreas(int numberRows, int numberColumns, int maximumL, int maximumU); /// PreProcesses column ordered copy of basis virtual void preProcess(); /** Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use numberGoodColumns and redo */ virtual int factor(); /// Does post processing on valid factorization - putting variables on correct rows virtual void postProcess(const int *sequence, int *pivotVariable); /// Makes a non-singular basis by replacing variables virtual void makeNonSingular(int *sequence, int numberColumns); /** When part of LP - given by basic variables. Actually does factorization. Arrays passed in have non negative value to say basic. If status is okay, basic variables have pivot row - this is only needed If status is singular, then basic variables have pivot row and ones thrown out have -1 returns 0 -okay, -1 singular, -2 too many in basis, -99 memory */ int factorize(const CoinPackedMatrix &matrix, int rowIsBasic[], int columnIsBasic[], double areaFactor = 0.0); //@} /**@name general stuff such as number of elements */ //@{ /// Total number of elements in factorization virtual inline int numberElements() const { return numberRows_ * (numberColumns_ + numberPivots_); } /// Returns array to put basis elements in virtual CoinFactorizationDouble *elements() const; /// Returns pivot row virtual int *pivotRow() const; /// Returns work area virtual CoinFactorizationDouble *workArea() const; /// Returns int work area virtual int *intWorkArea() const; /// Number of entries in each row virtual int *numberInRow() const; /// Number of entries in each column virtual int *numberInColumn() const; /// Returns array to put basis starts in virtual int *starts() const; /// Returns permute back virtual int *permuteBack() const; /// Returns true if wants tableauColumn in replaceColumn virtual bool wantsTableauColumn() const; /** Useful information for factorization 0 - iteration number whereFrom is 0 for factorize and 1 for replaceColumn */ virtual void setUsefulInformation(const int *info, int whereFrom); /// Set maximum pivots virtual void maximumPivots(int value); /// Returns maximum absolute value in factorization double maximumCoefficient() const; /// Condition number - product of pivots after factorization double conditionNumber() const; /// Get rid of all memory virtual void clearArrays(); //@} /**@name rank one updates which do exist */ //@{ /** Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModifying is true will do all accuracy checks before modifying factorization. Whether to set this depends on speed considerations. You could just do this on first iteration after factorization and thereafter re-factorize partial update already in U */ virtual int replaceColumn(CoinIndexedVector *regionSparse, int pivotRow, double pivotCheck, bool checkBeforeModifying = false, double acceptablePivot = 1.0e-8); //@} /**@name various uses of factorization (return code number elements) which user may want to know about */ //@{ /** Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no room regionSparse starts as zero and is zero at end. Note - if regionSparse2 packed on input - will be packed on output */ virtual int updateColumnFT(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute = false); /** This version has same effect as above with FTUpdate==false so number returned is always >=0 */ virtual int updateColumn(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute = false) const; /// does FTRAN on two columns virtual int updateTwoColumnsFT(CoinIndexedVector *regionSparse1, CoinIndexedVector *regionSparse2, CoinIndexedVector *regionSparse3, bool noPermute = false); /** Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output */ virtual int updateColumnTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) const; //@} /// *** Below this user may not want to know about /**@name various uses of factorization which user may not want to know about (left over from my LP code) */ //@{ /// Get rid of all memory //inline void clearArrays() //{ gutsOfDestructor();} /// Returns array to put basis indices in virtual int *indices() const; /// Returns permute in virtual inline int *permute() const { return NULL; /*pivotRow_*/ ; } //@} /// The real work of desstructor void gutsOfDestructor(bool clearFact = true); /// The real work of constructor void gutsOfInitialize(bool zapFact = true); /// The real work of copy void gutsOfCopy(const CoinOslFactorization &other); //@} protected: /** Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular */ int checkPivot(double saveFromU, double oldPivot) const; ////////////////// data ////////////////// protected: /**@name data */ //@{ /// Osl factorization data EKKfactinfo factInfo_; //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveTighten.cpp0000644000175200017520000003612013414454441020220 0ustar coincoin/* $Id: CoinPresolveTighten.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveTighten.hpp" #include "CoinPresolveUseless.hpp" #include "CoinHelperFunctions.hpp" #include "CoinFinite.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif const char *do_tighten_action::name() const { return ("do_tighten_action"); } /* This is ekkredc2. This fairly simple transformation is not mentioned in the paper. Say there is a costless variable x such that all the constraints it's entangled with (i.e., a != 0) would be satisfied as it approaches plus or minus infinity, because all its constraints have only one bound, and increasing/decreasing the variable makes the row activity grow away from the bound (in the right direction). If x is unbounded in that direction, it can always be made large enough to satisfy the constraints, so we can just drop the variable and the entangled constraints from the problem. If x *is* bounded in that direction, there is no reason not to set it to that bound. This effectively weakens the constraints, which in fact may be subsequently presolved away. Note that none of the constraints may be bounded both above and below, since then we don't know which way to move the variable in order to satisfy the constraint. To drop constraints, we just make them useless and let other transformations take care of the rest. Note that more than one such costless unbounded variable may be part of a given constraint. In that case, the first one processed will make the constraint useless, and the second will ignore it. In postsolve, the first will be responsible for satisfying the constraint. Note that if the constraints are dropped (as in the first case), then we just make them useless. It will subsequently be discovered the the variable does not appear in any constraints, and since it has no cost it is just set to some value (either zero or a bound) and removed (by remove_empty_cols). Oddly, pilots and baxter do *worse* when this transform is applied. It's informative to compare this transform to the very similar transform implemented in remove_dual_action. Surely they could be merged. */ const CoinPresolveAction *do_tighten_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; int ncols = prob->ncols_; double *clo = prob->clo_; double *cup = prob->cup_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *dcost = prob->cost_; const unsigned char *integerType = prob->integerType_; int *fix_cols = prob->usefulColumnInt_; int nfixup_cols = 0; int nfixdown_cols = ncols; int *useless_rows = prob->usefulRowInt_; int nuseless_rows = 0; action *actions = new action[ncols]; int nactions = 0; int numberLook = prob->numberColsToDo_; int iLook; int *look = prob->colsToDo_; bool fixInfeasibility = ((prob->presolveOptions_ & 0x4000) != 0); #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering do_tighten_action::presolve; considering " << numberLook << " rows." << std::endl; #endif presolve_consistent(prob); presolve_links_ok(prob); presolve_check_sol(prob); presolve_check_nbasic(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int startEmptyRows = 0; int startEmptyColumns = 0; startEmptyRows = prob->countEmptyRows(); startEmptyColumns = prob->countEmptyCols(); #if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0; if (prob->tuning_) startTime = CoinCpuTime(); #endif #endif // singleton columns are especially likely to be caught here for (iLook = 0; iLook < numberLook; iLook++) { int j = look[iLook]; // modify bounds if integer if (integerType[j]) { clo[j] = ceil(clo[j] - 1.0e-12); cup[j] = floor(cup[j] + 1.0e-12); if (clo[j] > cup[j] && !fixInfeasibility) { // infeasible prob->status_ |= 1; prob->messageHandler()->message(COIN_PRESOLVE_COLINFEAS, prob->messages()) << j << clo[j] << cup[j] << CoinMessageEol; } } if (dcost[j] == 0.0 && !prob->colProhibited2(j)) { int iflag = 0; /* 1 - up is towards feasibility, -1 down is towards */ int nonFree = 0; // Number of non-free rows CoinBigIndex kcs = mcstrt[j]; CoinBigIndex kce = kcs + hincol[j]; // check constraints for (CoinBigIndex k = kcs; k < kce; ++k) { int i = hrow[k]; double coeff = colels[k]; double rlb = rlo[i]; double rub = rup[i]; if (-1.0e28 < rlb && rub < 1.0e28) { // bounded - we lose iflag = 0; break; } else if (-1.0e28 < rlb || rub < 1.0e28) { nonFree++; } PRESOLVEASSERT(fabs(coeff) > ZTOLDP); // see what this particular row says // jflag == 1 ==> up is towards feasibility int jflag = (coeff > 0.0 ? (rub > 1.0e28 ? 1 : -1) : (rlb < -1.0e28 ? 1 : -1)); if (iflag) { // check that it agrees with iflag. if (iflag != jflag) { iflag = 0; break; } } else { // first row -- initialize iflag iflag = jflag; } } // done checking constraints if (!nonFree) iflag = 0; // all free anyway if (iflag) { if (iflag == 1 && cup[j] < 1.0e10) { #if PRESOLVE_DEBUG > 1 printf("TIGHTEN UP: %d\n", j); #endif fix_cols[nfixup_cols++] = j; } else if (iflag == -1 && clo[j] > -1.0e10) { // symmetric case //mpre[j] = PRESOLVE_XUP; #if PRESOLVE_DEBUG > 1 printf("TIGHTEN DOWN: %d\n", j); #endif fix_cols[--nfixdown_cols] = j; } else { #if 0 static int limit; static int which = atoi(getenv("WZ")); if (which == -1) ; else if (limit != which) { limit++; continue; } else limit++; printf("TIGHTEN STATS %d %g %g %d: \n", j, clo[j], cup[j], integerType[j]); double *rowels = prob->rowels_; int *hcol = prob->hcol_; int *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; for (CoinBigIndex k=kcs; kcol = j; PRESOLVE_DETAIL_PRINT(printf("pre_tighten %dC E\n", j)); if (integerType[j]) { assert(iflag == -1 || iflag == 1); iflag *= 2; // say integer } s->direction = iflag; s->rows = new int[hincol[j]]; s->lbound = new double[hincol[j]]; s->ubound = new double[hincol[j]]; #if PRESOLVE_DEBUG > 1 printf("TIGHTEN FREE: %d ", j); #endif int nr = 0; prob->addCol(j); for (CoinBigIndex k = kcs; k < kce; ++k) { int irow = hrow[k]; // ignore this if we've already made it useless if (!(rlo[irow] == -PRESOLVE_INF && rup[irow] == PRESOLVE_INF)) { prob->addRow(irow); s->rows[nr] = irow; s->lbound[nr] = rlo[irow]; s->ubound[nr] = rup[irow]; nr++; useless_rows[nuseless_rows++] = irow; rlo[irow] = -PRESOLVE_INF; rup[irow] = PRESOLVE_INF; #if PRESOLVE_DEBUG > 1 printf("%d ", irow); #endif } } s->nrows = nr; #if PRESOLVE_DEBUG > 1 printf("\n"); #endif } } } } } #if PRESOLVE_SUMMARY > 0 if (nfixdown_cols < ncols || nfixup_cols || nuseless_rows) { printf("NTIGHTENED: %d %d %d\n", ncols - nfixdown_cols, nfixup_cols, nuseless_rows); } #endif if (nuseless_rows) { next = new do_tighten_action(nactions, CoinCopyOfArray(actions, nactions), next); next = useless_constraint_action::presolve(prob, useless_rows, nuseless_rows, next); } deleteAction(actions, action *); //delete[]useless_rows; if (nfixdown_cols < ncols) { int *fixdown_cols = fix_cols + nfixdown_cols; nfixdown_cols = ncols - nfixdown_cols; next = make_fixed_action::presolve(prob, fixdown_cols, nfixdown_cols, true, next); } //delete[]fixdown_cols; if (nfixup_cols) { next = make_fixed_action::presolve(prob, fix_cols, nfixup_cols, false, next); } //delete[]fixup_cols; #if COIN_PRESOLVE_TUNING > 0 double thisTime = 0.0; if (prob->tuning_) thisTime = CoinCpuTime(); #endif #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_sol(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows() - startEmptyRows; int droppedColumns = prob->countEmptyCols() - startEmptyColumns; std::cout << "Leaving do_tighten_action::presolve, " << droppedRows << " rows, " << droppedColumns << " columns dropped"; #if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << thisTime - startTime << "s"; #endif std::cout << "." << std::endl; #endif return (next); } void do_tighten_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_; const int nactions = nactions_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; CoinBigIndex *link = prob->link_; double *clo = prob->clo_; double *cup = prob->cup_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *sol = prob->sol_; double *acts = prob->acts_; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 char *cdone = prob->cdone_; char *rdone = prob->rdone_; presolve_check_threads(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Entering do_tighten_action::postsolve." << std::endl; #endif #endif for (const action *f = &actions[nactions - 1]; actions <= f; f--) { int jcol = f->col; int iflag = f->direction; int nr = f->nrows; const int *rows = f->rows; const double *lbound = f->lbound; const double *ubound = f->ubound; PRESOLVEASSERT(prob->getColumnStatus(jcol) != CoinPrePostsolveMatrix::basic); int i; for (i = 0; i < nr; ++i) { int irow = rows[i]; rlo[irow] = lbound[i]; rup[irow] = ubound[i]; PRESOLVEASSERT(prob->getRowStatus(irow) == CoinPrePostsolveMatrix::basic); } // We have just tightened the row bounds. // That means we'll have to compute a new value // for this variable that will satisfy everybody. // We are supposed to be in a position where this // is always possible. // Each constraint has exactly one bound. // The correction should only ever be forced to move in one direction. // double orig_sol = sol[jcol]; double correction = 0.0; int last_corrected = -1; CoinBigIndex k = mcstrt[jcol]; int nk = hincol[jcol]; for (i = 0; i < nk; ++i) { int irow = hrow[k]; double coeff = colels[k]; k = link[k]; double newrlo = rlo[irow]; double newrup = rup[irow]; double activity = acts[irow]; if (activity + correction * coeff < newrlo) { // only one of these two should fire PRESOLVEASSERT(!(activity + correction * coeff > newrup)); last_corrected = irow; // adjust to just meet newrlo (solve for correction) double new_correction = (newrlo - activity) / coeff; //adjust if integer if (iflag == -2 || iflag == 2) { new_correction += sol[jcol]; if (fabs(floor(new_correction + 0.5) - new_correction) > 1.0e-4) { new_correction = ceil(new_correction) - sol[jcol]; #ifdef COIN_DEVELOP printf("integer postsolve changing correction from %g to %g - flag %d\n", (newrlo - activity) / coeff, new_correction, iflag); #endif } } correction = new_correction; } else if (activity + correction * coeff > newrup) { last_corrected = irow; double new_correction = (newrup - activity) / coeff; //adjust if integer if (iflag == -2 || iflag == 2) { new_correction += sol[jcol]; if (fabs(floor(new_correction + 0.5) - new_correction) > 1.0e-4) { new_correction = ceil(new_correction) - sol[jcol]; #ifdef COIN_DEVELOP printf("integer postsolve changing correction from %g to %g - flag %d\n", (newrup - activity) / coeff, new_correction, iflag); #endif } } correction = new_correction; } } if (last_corrected >= 0) { sol[jcol] += correction; // by construction, the last row corrected (if there was one) // must be at its bound, so it can be non-basic. // All other rows may not be at a bound (but may if the difference // is very small, causing a new correction by a tiny amount). // now adjust the activities k = mcstrt[jcol]; for (i = 0; i < nk; ++i) { int irow = hrow[k]; double coeff = colels[k]; k = link[k]; // double activity = acts[irow]; acts[irow] += correction * coeff; } /* If the col happens to get pushed to its bound, we may as well leave it non-basic. Otherwise, set the status to basic. Why do we correct the row status only when the column is made basic? Need to look at preceding code. -- lh, 110528 -- */ if (fabs(sol[jcol] - clo[jcol]) > ZTOLDP && fabs(sol[jcol] - cup[jcol]) > ZTOLDP) { prob->setColumnStatus(jcol, CoinPrePostsolveMatrix::basic); if (acts[last_corrected] - rlo[last_corrected] < rup[last_corrected] - acts[last_corrected]) prob->setRowStatus(last_corrected, CoinPrePostsolveMatrix::atUpperBound); else prob->setRowStatus(last_corrected, CoinPrePostsolveMatrix::atLowerBound); } } } #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving do_tighten_action::postsolve." << std::endl; #endif #endif } do_tighten_action::~do_tighten_action() { if (nactions_ > 0) { for (int i = nactions_ - 1; i >= 0; --i) { delete[] actions_[i].rows; delete[] actions_[i].lbound; delete[] actions_[i].ubound; } deleteAction(actions_, action *); } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinModel.cpp0000644000175200017520000036416513414454441016153 0ustar coincoin/* $Id: CoinModel.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinUtilsConfig.h" #include "CoinHelperFunctions.hpp" #include "CoinModel.hpp" #include "CoinMessage.hpp" #include "CoinSort.hpp" #include "CoinMpsIO.hpp" #include "CoinFloatEqual.hpp" //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinBaseModel::CoinBaseModel() : numberRows_(0) , numberColumns_(0) , optimizationDirection_(1.0) , objectiveOffset_(0.0) , handler_(NULL) , logLevel_(0) { messages_ = CoinMessage(); handler_ = new CoinMessageHandler(); problemName_ = ""; rowBlockName_ = "row_master"; columnBlockName_ = "column_master"; } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinBaseModel::CoinBaseModel(const CoinBaseModel &rhs) : numberRows_(rhs.numberRows_) , numberColumns_(rhs.numberColumns_) , optimizationDirection_(rhs.optimizationDirection_) , objectiveOffset_(rhs.objectiveOffset_) , logLevel_(rhs.logLevel_) { problemName_ = rhs.problemName_; rowBlockName_ = rhs.rowBlockName_; columnBlockName_ = rhs.columnBlockName_; handler_ = new CoinMessageHandler(*rhs.handler_); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinBaseModel::~CoinBaseModel() { delete handler_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinBaseModel & CoinBaseModel::operator=(const CoinBaseModel &rhs) { if (this != &rhs) { problemName_ = rhs.problemName_; rowBlockName_ = rhs.rowBlockName_; columnBlockName_ = rhs.columnBlockName_; numberRows_ = rhs.numberRows_; numberColumns_ = rhs.numberColumns_; optimizationDirection_ = rhs.optimizationDirection_; objectiveOffset_ = rhs.objectiveOffset_; delete handler_; handler_ = new CoinMessageHandler(*rhs.handler_); logLevel_ = rhs.logLevel_; } return *this; } void CoinBaseModel::setLogLevel(int value) { if (value >= 0 && value < 3) logLevel_ = value; } void CoinBaseModel::setProblemName(const char *name) { if (name) problemName_ = name; else problemName_ = ""; } // Pass in message handler void CoinBaseModel::setMessageHandler(CoinMessageHandler *handler) { handler_ = handler; if (handler) logLevel_ = -1; else logLevel_ = CoinMax(0, logLevel_); } //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinModel::CoinModel() : CoinBaseModel() , maximumRows_(0) , maximumColumns_(0) , numberElements_(0) , maximumElements_(0) , numberQuadraticElements_(0) , maximumQuadraticElements_(0) , rowLower_(NULL) , rowUpper_(NULL) , rowType_(NULL) , objective_(NULL) , columnLower_(NULL) , columnUpper_(NULL) , integerType_(NULL) , columnType_(NULL) , start_(NULL) , elements_(NULL) , packedMatrix_(NULL) , quadraticElements_(NULL) , sortIndices_(NULL) , sortElements_(NULL) , sortSize_(0) , sizeAssociated_(0) , associated_(NULL) , numberSOS_(0) , startSOS_(NULL) , memberSOS_(NULL) , typeSOS_(NULL) , prioritySOS_(NULL) , referenceSOS_(NULL) , priority_(NULL) , cut_(NULL) , moreInfo_(NULL) , type_(-1) , noNames_(false) , links_(0) { } /* Constructor with sizes. */ CoinModel::CoinModel(int firstRows, int firstColumns, CoinBigIndex firstElements, bool noNames) : CoinBaseModel() , maximumRows_(0) , maximumColumns_(0) , numberElements_(0) , maximumElements_(0) , numberQuadraticElements_(0) , maximumQuadraticElements_(0) , rowLower_(NULL) , rowUpper_(NULL) , rowType_(NULL) , objective_(NULL) , columnLower_(NULL) , columnUpper_(NULL) , integerType_(NULL) , columnType_(NULL) , start_(NULL) , elements_(NULL) , packedMatrix_(NULL) , quadraticElements_(NULL) , sortIndices_(NULL) , sortElements_(NULL) , sortSize_(0) , sizeAssociated_(0) , associated_(NULL) , numberSOS_(0) , startSOS_(NULL) , memberSOS_(NULL) , typeSOS_(NULL) , prioritySOS_(NULL) , referenceSOS_(NULL) , priority_(NULL) , cut_(NULL) , moreInfo_(NULL) , type_(-1) , noNames_(noNames) , links_(0) { if (!firstRows) { if (firstColumns) { type_ = 1; resize(0, firstColumns, firstElements); } } else { type_ = 0; resize(firstRows, 0, firstElements); if (firstColumns) { // mixed - do linked lists for columns //createList(2); } } } /* Read a problem in MPS or GAMS format from the given filename. */ CoinModel::CoinModel(const char *fileName, int allowStrings) : CoinBaseModel() , maximumRows_(0) , maximumColumns_(0) , numberElements_(0) , maximumElements_(0) , numberQuadraticElements_(0) , maximumQuadraticElements_(0) , rowLower_(NULL) , rowUpper_(NULL) , rowType_(NULL) , objective_(NULL) , columnLower_(NULL) , columnUpper_(NULL) , integerType_(NULL) , columnType_(NULL) , start_(NULL) , elements_(NULL) , packedMatrix_(NULL) , quadraticElements_(NULL) , sortIndices_(NULL) , sortElements_(NULL) , sortSize_(0) , sizeAssociated_(0) , associated_(NULL) , numberSOS_(0) , startSOS_(NULL) , memberSOS_(NULL) , typeSOS_(NULL) , prioritySOS_(NULL) , referenceSOS_(NULL) , priority_(NULL) , cut_(NULL) , moreInfo_(NULL) , type_(-1) , noNames_(false) , links_(0) { rowBlockName_ = "row_master"; columnBlockName_ = "column_master"; int status = 0; if (!strcmp(fileName, "-") || !strcmp(fileName, "stdin")) { // stdin } else { std::string name = fileName; bool readable = fileCoinReadable(name); if (!readable) { std::cerr << "Unable to open file " << fileName << std::endl; status = -1; } } CoinMpsIO m; m.setAllowStringElements(allowStrings); m.setConvertObjective(true); if (!status) { try { status = m.readMps(fileName, ""); } catch (CoinError &e) { e.print(); status = -1; } } if (!status) { // set problem name problemName_ = m.getProblemName(); objectiveOffset_ = m.objectiveOffset(); // build model int numberRows = m.getNumRows(); int numberColumns = m.getNumCols(); // Build by row from scratch CoinPackedMatrix matrixByRow = *m.getMatrixByRow(); const double *element = matrixByRow.getElements(); const int *column = matrixByRow.getIndices(); const CoinBigIndex *rowStart = matrixByRow.getVectorStarts(); const int *rowLength = matrixByRow.getVectorLengths(); const double *rowLower = m.getRowLower(); const double *rowUpper = m.getRowUpper(); const double *columnLower = m.getColLower(); const double *columnUpper = m.getColUpper(); const double *objective = m.getObjCoefficients(); int i; for (i = 0; i < numberRows; i++) { addRow(rowLength[i], column + rowStart[i], element + rowStart[i], rowLower[i], rowUpper[i], m.rowName(i)); } int numberIntegers = 0; // Now do column part for (i = 0; i < numberColumns; i++) { setColumnBounds(i, columnLower[i], columnUpper[i]); setColumnObjective(i, objective[i]); if (m.isInteger(i)) { setColumnIsInteger(i, true); ; numberIntegers++; } } bool quadraticInteger = (numberIntegers != 0) && m.reader()->whichSection() == COIN_QUAD_SECTION; // do names int iRow; for (iRow = 0; iRow < numberRows_; iRow++) { const char *name = m.rowName(iRow); setRowName(iRow, name); } bool ifStrings = (m.numberStringElements() != 0); int nChanged = 0; int iColumn; for (iColumn = 0; iColumn < numberColumns_; iColumn++) { // Replace - + or * if strings if (!ifStrings && !quadraticInteger) { const char *name = m.columnName(iColumn); setColumnName(iColumn, name); } else { assert(strlen(m.columnName(iColumn)) < 100); char temp[100]; strcpy(temp, m.columnName(iColumn)); int n = CoinStrlenAsInt(temp); bool changed = false; for (int i = 0; i < n; i++) { if (temp[i] == '-') { temp[i] = '_'; changed = true; } else if (temp[i] == '+') { temp[i] = '$'; changed = true; } else if (temp[i] == '*') { temp[i] = '&'; changed = true; } } if (changed) nChanged++; setColumnName(iColumn, temp); } } if (nChanged) printf("%d column names changed to eliminate - + or *\n", nChanged); if (ifStrings) { // add in int numberElements = m.numberStringElements(); for (int i = 0; i < numberElements; i++) { const char *line = m.stringElement(i); int iRow; int iColumn; sscanf(line, "%d,%d,", &iRow, &iColumn); assert(iRow >= 0 && iRow <= numberRows_ + 2); assert(iColumn >= 0 && iColumn <= numberColumns_); const char *pos = strchr(line, ','); assert(pos); pos = strchr(pos + 1, ','); assert(pos); pos++; if (iRow < numberRows_ && iColumn < numberColumns_) { // element setElement(iRow, iColumn, pos); } else { fprintf(stderr, "code CoinModel strings for rim\n"); abort(); } } } // get quadratic part if (m.reader()->whichSection() == COIN_QUAD_SECTION) { CoinBigIndex *start = NULL; int *column = NULL; double *element = NULL; status = m.readQuadraticMps(NULL, start, column, element, 2); if (!status) { // If strings allowed 13 then just for Hans convert to constraint int objRow = -1; if (allowStrings == 13) { int objColumn = numberColumns_; objRow = numberRows_; // leave linear part in objective addColumn(0, NULL, NULL, -COIN_DBL_MAX, COIN_DBL_MAX, 1.0, "obj"); double minusOne = -1.0; addRow(1, &objColumn, &minusOne, -COIN_DBL_MAX, 0.0, "objrow"); } if (!ifStrings && !numberIntegers) { // no strings - add to quadratic (not done yet) for (int iColumn = 0; iColumn < numberColumns_; iColumn++) { for (CoinBigIndex j = start[iColumn]; j < start[iColumn + 1]; j++) { int jColumn = column[j]; double value = element[j]; // what about diagonal etc if (jColumn == iColumn) { printf("diag %d %d %g\n", iColumn, jColumn, value); setQuadraticElement(iColumn, jColumn, 0.5 * value); } else if (jColumn > iColumn) { printf("above diag %d %d %g\n", iColumn, jColumn, value); } else if (jColumn < iColumn) { printf("below diag %d %d %g\n", iColumn, jColumn, value); setQuadraticElement(iColumn, jColumn, value); } } } } else { // add in as strings for (int iColumn = 0; iColumn < numberColumns_; iColumn++) { char temp[20000]; temp[0] = '\0'; int put = 0; int n = 0; bool ifFirst = true; double value = getColumnObjective(iColumn); if (value && objRow < 0) { sprintf(temp, "%g", value); ifFirst = false; /* static cast is safe, temp is at most 20000 chars */ put = CoinStrlenAsInt(temp); } for (CoinBigIndex j = start[iColumn]; j < start[iColumn + 1]; j++) { int jColumn = column[j]; double value = element[j]; // what about diagonal etc if (jColumn == iColumn) { //printf("diag %d %d %g\n",iColumn,jColumn,value); value *= 0.5; } else if (jColumn > iColumn) { //printf("above diag %d %d %g\n",iColumn,jColumn,value); } else if (jColumn < iColumn) { //printf("below diag %d %d %g\n",iColumn,jColumn,value); value = 0.0; } if (value) { n++; const char *name = columnName(jColumn); if (value == 1.0) { sprintf(temp + put, "%s%s", ifFirst ? "" : "+", name); } else { if (ifFirst || value < 0.0) sprintf(temp + put, "%g*%s", value, name); else sprintf(temp + put, "+%g*%s", value, name); } put += CoinStrlenAsInt(temp + put); assert(put < 20000); ifFirst = false; } } if (n) { if (objRow < 0) setObjective(iColumn, temp); else setElement(objRow, iColumn, temp); //printf("el for objective column c%7.7d is %s\n",iColumn,temp); } } } } delete[] start; delete[] column; delete[] element; } } } // From arrays CoinModel::CoinModel(int numberRows, int numberColumns, const CoinPackedMatrix *matrix, const double *rowLower, const double *rowUpper, const double *columnLower, const double *columnUpper, const double *objective) : CoinBaseModel() , maximumRows_(numberRows) , maximumColumns_(numberColumns) , numberElements_(matrix->getNumElements()) , maximumElements_(matrix->getNumElements()) , numberQuadraticElements_(0) , maximumQuadraticElements_(0) , rowType_(NULL) , integerType_(NULL) , columnType_(NULL) , start_(NULL) , elements_(NULL) , packedMatrix_(NULL) , quadraticElements_(NULL) , sortIndices_(NULL) , sortElements_(NULL) , sortSize_(0) , sizeAssociated_(0) , associated_(NULL) , numberSOS_(0) , startSOS_(NULL) , memberSOS_(NULL) , typeSOS_(NULL) , prioritySOS_(NULL) , referenceSOS_(NULL) , priority_(NULL) , cut_(NULL) , moreInfo_(NULL) , type_(-1) , noNames_(false) , links_(0) { numberRows_ = numberRows; numberColumns_ = numberColumns; assert(numberRows_ >= matrix->getNumRows()); assert(numberColumns_ >= matrix->getNumCols()); type_ = 3; packedMatrix_ = new CoinPackedMatrix(*matrix); rowLower_ = CoinCopyOfArray(rowLower, numberRows_); rowUpper_ = CoinCopyOfArray(rowUpper, numberRows_); objective_ = CoinCopyOfArray(objective, numberColumns_); columnLower_ = CoinCopyOfArray(columnLower, numberColumns_); columnUpper_ = CoinCopyOfArray(columnUpper, numberColumns_); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinModel::CoinModel(const CoinModel &rhs) : CoinBaseModel(rhs) , maximumRows_(rhs.maximumRows_) , maximumColumns_(rhs.maximumColumns_) , numberElements_(rhs.numberElements_) , maximumElements_(rhs.maximumElements_) , numberQuadraticElements_(rhs.numberQuadraticElements_) , maximumQuadraticElements_(rhs.maximumQuadraticElements_) , rowName_(rhs.rowName_) , columnName_(rhs.columnName_) , string_(rhs.string_) , hashElements_(rhs.hashElements_) , rowList_(rhs.rowList_) , columnList_(rhs.columnList_) , hashQuadraticElements_(rhs.hashQuadraticElements_) , sortSize_(rhs.sortSize_) , quadraticRowList_(rhs.quadraticRowList_) , quadraticColumnList_(rhs.quadraticColumnList_) , sizeAssociated_(rhs.sizeAssociated_) , numberSOS_(rhs.numberSOS_) , type_(rhs.type_) , noNames_(rhs.noNames_) , links_(rhs.links_) { rowLower_ = CoinCopyOfArray(rhs.rowLower_, maximumRows_); rowUpper_ = CoinCopyOfArray(rhs.rowUpper_, maximumRows_); rowType_ = CoinCopyOfArray(rhs.rowType_, maximumRows_); objective_ = CoinCopyOfArray(rhs.objective_, maximumColumns_); columnLower_ = CoinCopyOfArray(rhs.columnLower_, maximumColumns_); columnUpper_ = CoinCopyOfArray(rhs.columnUpper_, maximumColumns_); integerType_ = CoinCopyOfArray(rhs.integerType_, maximumColumns_); columnType_ = CoinCopyOfArray(rhs.columnType_, maximumColumns_); sortIndices_ = CoinCopyOfArray(rhs.sortIndices_, sortSize_); sortElements_ = CoinCopyOfArray(rhs.sortElements_, sortSize_); associated_ = CoinCopyOfArray(rhs.associated_, sizeAssociated_); priority_ = CoinCopyOfArray(rhs.priority_, maximumColumns_); cut_ = CoinCopyOfArray(rhs.cut_, maximumRows_); moreInfo_ = rhs.moreInfo_; if (rhs.packedMatrix_) packedMatrix_ = new CoinPackedMatrix(*rhs.packedMatrix_); else packedMatrix_ = NULL; if (numberSOS_) { startSOS_ = CoinCopyOfArray(rhs.startSOS_, numberSOS_ + 1); int numberMembers = startSOS_[numberSOS_]; memberSOS_ = CoinCopyOfArray(rhs.memberSOS_, numberMembers); typeSOS_ = CoinCopyOfArray(rhs.typeSOS_, numberSOS_); prioritySOS_ = CoinCopyOfArray(rhs.prioritySOS_, numberSOS_); referenceSOS_ = CoinCopyOfArray(rhs.referenceSOS_, numberMembers); } else { startSOS_ = NULL; memberSOS_ = NULL; typeSOS_ = NULL; prioritySOS_ = NULL; referenceSOS_ = NULL; } if (type_ == 0) { start_ = CoinCopyOfArray(rhs.start_, maximumRows_ + 1); } else if (type_ == 1) { start_ = CoinCopyOfArray(rhs.start_, maximumColumns_ + 1); } else { start_ = NULL; } elements_ = CoinCopyOfArray(rhs.elements_, maximumElements_); quadraticElements_ = CoinCopyOfArray(rhs.quadraticElements_, maximumQuadraticElements_); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinModel::~CoinModel() { delete[] rowLower_; delete[] rowUpper_; delete[] rowType_; delete[] objective_; delete[] columnLower_; delete[] columnUpper_; delete[] integerType_; delete[] columnType_; delete[] start_; delete[] elements_; delete[] quadraticElements_; delete[] sortIndices_; delete[] sortElements_; delete[] associated_; delete[] startSOS_; delete[] memberSOS_; delete[] typeSOS_; delete[] prioritySOS_; delete[] referenceSOS_; delete[] priority_; delete[] cut_; delete packedMatrix_; } // Clone CoinBaseModel * CoinModel::clone() const { return new CoinModel(*this); } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinModel & CoinModel::operator=(const CoinModel &rhs) { if (this != &rhs) { CoinBaseModel::operator=(rhs); delete[] rowLower_; delete[] rowUpper_; delete[] rowType_; delete[] objective_; delete[] columnLower_; delete[] columnUpper_; delete[] integerType_; delete[] columnType_; delete[] start_; delete[] elements_; delete[] quadraticElements_; delete[] sortIndices_; delete[] sortElements_; delete[] associated_; delete[] startSOS_; delete[] memberSOS_; delete[] typeSOS_; delete[] prioritySOS_; delete[] referenceSOS_; delete[] priority_; delete[] cut_; delete packedMatrix_; maximumRows_ = rhs.maximumRows_; maximumColumns_ = rhs.maximumColumns_; numberElements_ = rhs.numberElements_; maximumElements_ = rhs.maximumElements_; numberQuadraticElements_ = rhs.numberQuadraticElements_; maximumQuadraticElements_ = rhs.maximumQuadraticElements_; sortSize_ = rhs.sortSize_; rowName_ = rhs.rowName_; columnName_ = rhs.columnName_; string_ = rhs.string_; hashElements_ = rhs.hashElements_; hashQuadraticElements_ = rhs.hashQuadraticElements_; rowList_ = rhs.rowList_; quadraticColumnList_ = rhs.quadraticColumnList_; quadraticRowList_ = rhs.quadraticRowList_; columnList_ = rhs.columnList_; sizeAssociated_ = rhs.sizeAssociated_; numberSOS_ = rhs.numberSOS_; type_ = rhs.type_; noNames_ = rhs.noNames_; links_ = rhs.links_; rowLower_ = CoinCopyOfArray(rhs.rowLower_, maximumRows_); rowUpper_ = CoinCopyOfArray(rhs.rowUpper_, maximumRows_); rowType_ = CoinCopyOfArray(rhs.rowType_, maximumRows_); objective_ = CoinCopyOfArray(rhs.objective_, maximumColumns_); columnLower_ = CoinCopyOfArray(rhs.columnLower_, maximumColumns_); columnUpper_ = CoinCopyOfArray(rhs.columnUpper_, maximumColumns_); integerType_ = CoinCopyOfArray(rhs.integerType_, maximumColumns_); columnType_ = CoinCopyOfArray(rhs.columnType_, maximumColumns_); priority_ = CoinCopyOfArray(rhs.priority_, maximumColumns_); cut_ = CoinCopyOfArray(rhs.cut_, maximumRows_); moreInfo_ = rhs.moreInfo_; if (rhs.packedMatrix_) packedMatrix_ = new CoinPackedMatrix(*rhs.packedMatrix_); else packedMatrix_ = NULL; if (numberSOS_) { startSOS_ = CoinCopyOfArray(rhs.startSOS_, numberSOS_ + 1); int numberMembers = startSOS_[numberSOS_]; memberSOS_ = CoinCopyOfArray(rhs.memberSOS_, numberMembers); typeSOS_ = CoinCopyOfArray(rhs.typeSOS_, numberSOS_); prioritySOS_ = CoinCopyOfArray(rhs.prioritySOS_, numberSOS_); referenceSOS_ = CoinCopyOfArray(rhs.referenceSOS_, numberMembers); } else { startSOS_ = NULL; memberSOS_ = NULL; typeSOS_ = NULL; prioritySOS_ = NULL; referenceSOS_ = NULL; } if (type_ == 0) { start_ = CoinCopyOfArray(rhs.start_, maximumRows_ + 1); } else if (type_ == 1) { start_ = CoinCopyOfArray(rhs.start_, maximumColumns_ + 1); } else { start_ = NULL; } elements_ = CoinCopyOfArray(rhs.elements_, maximumElements_); quadraticElements_ = CoinCopyOfArray(rhs.quadraticElements_, maximumQuadraticElements_); sortIndices_ = CoinCopyOfArray(rhs.sortIndices_, sortSize_); sortElements_ = CoinCopyOfArray(rhs.sortElements_, sortSize_); associated_ = CoinCopyOfArray(rhs.associated_, sizeAssociated_); } return *this; } /* add a row - numberInRow may be zero */ void CoinModel::addRow(int numberInRow, const int *columns, const double *elements, double rowLower, double rowUpper, const char *name) { if (type_ == -1) { // initial type_ = 0; resize(100, 0, 1000); } else if (type_ == 1) { // mixed - do linked lists for rows createList(1); } else if (type_ == 3) { badType(); } int newColumn = -1; if (numberInRow > 0) { // Move and sort if (numberInRow > sortSize_) { delete[] sortIndices_; delete[] sortElements_; sortSize_ = numberInRow + 100; sortIndices_ = new int[sortSize_]; sortElements_ = new double[sortSize_]; } bool sorted = true; int last = -1; int i; for (i = 0; i < numberInRow; i++) { int k = columns[i]; if (k <= last) sorted = false; last = k; sortIndices_[i] = k; sortElements_[i] = elements[i]; } if (!sorted) { CoinSort_2(sortIndices_, sortIndices_ + numberInRow, sortElements_); } // check for duplicates etc if (sortIndices_[0] < 0) { printf("bad index %d\n", sortIndices_[0]); // clean up abort(); } last = -1; bool duplicate = false; for (i = 0; i < numberInRow; i++) { int k = sortIndices_[i]; if (k == last) duplicate = true; last = k; } if (duplicate) { printf("duplicates - what do we want\n"); abort(); } newColumn = CoinMax(newColumn, last); } int newRow = 0; CoinBigIndex newElement = 0; if (numberElements_ + numberInRow > maximumElements_) { newElement = (3 * (numberElements_ + numberInRow) / 2) + 1000; if (numberRows_ * 10 > maximumRows_ * 9) newRow = (maximumRows_ * 3) / 2 + 100; } if (numberRows_ == maximumRows_) newRow = (maximumRows_ * 3) / 2 + 100; if (newRow || newColumn >= maximumColumns_ || newElement) { if (newColumn < maximumColumns_) { // columns okay resize(newRow, 0, newElement); } else { // newColumn will be new numberColumns_ resize(newRow, (3 * newColumn) / 2 + 100, newElement); } } // If rows extended - take care of that fillRows(numberRows_, false, true); // Do name if (name) { rowName_.addHash(numberRows_, name); } else if (!noNames_) { char name[9]; sprintf(name, "r%7.7d", numberRows_); rowName_.addHash(numberRows_, name); } rowLower_[numberRows_] = rowLower; rowUpper_[numberRows_] = rowUpper; // If columns extended - take care of that fillColumns(newColumn, false); if (type_ == 0) { // can do simply CoinBigIndex put = start_[numberRows_]; assert(put == numberElements_); bool doHash = hashElements_.numberItems() != 0; for (int i = 0; i < numberInRow; i++) { setRowAndStringInTriple(elements_[put], numberRows_, false); //elements_[put].row=static_cast(numberRows_); //elements_[put].string=0; elements_[put].column = sortIndices_[i]; elements_[put].value = sortElements_[i]; if (doHash) hashElements_.addHash(put, numberRows_, sortIndices_[i], elements_); put++; } start_[numberRows_ + 1] = put; numberElements_ += numberInRow; } else { if (numberInRow) { // must update at least one link assert(links_); if (links_ == 1 || links_ == 3) { CoinBigIndex first = rowList_.addEasy(numberRows_, numberInRow, sortIndices_, sortElements_, elements_, hashElements_); if (links_ == 3) columnList_.addHard(first, elements_, rowList_.firstFree(), rowList_.lastFree(), rowList_.next()); numberElements_ = CoinMax(numberElements_, rowList_.numberElements()); if (links_ == 3) assert(columnList_.numberElements() == rowList_.numberElements()); } else if (links_ == 2) { columnList_.addHard(numberRows_, numberInRow, sortIndices_, sortElements_, elements_, hashElements_); numberElements_ = CoinMax(numberElements_, columnList_.numberElements()); } } numberElements_ = CoinMax(numberElements_, hashElements_.numberItems()); } numberRows_++; } // add a column - numberInColumn may be zero */ void CoinModel::addColumn(int numberInColumn, const int *rows, const double *elements, double columnLower, double columnUpper, double objectiveValue, const char *name, bool isInteger) { if (type_ == -1) { // initial type_ = 1; resize(0, 100, 1000); } else if (type_ == 0) { // mixed - do linked lists for columns createList(2); } else if (type_ == 3) { badType(); } int newRow = -1; if (numberInColumn > 0) { // Move and sort if (numberInColumn > sortSize_) { delete[] sortIndices_; delete[] sortElements_; sortSize_ = numberInColumn + 100; sortIndices_ = new int[sortSize_]; sortElements_ = new double[sortSize_]; } bool sorted = true; int last = -1; int i; for (i = 0; i < numberInColumn; i++) { int k = rows[i]; if (k <= last) sorted = false; last = k; sortIndices_[i] = k; sortElements_[i] = elements[i]; } if (!sorted) { CoinSort_2(sortIndices_, sortIndices_ + numberInColumn, sortElements_); } // check for duplicates etc if (sortIndices_[0] < 0) { printf("bad index %d\n", sortIndices_[0]); // clean up abort(); } last = -1; bool duplicate = false; for (i = 0; i < numberInColumn; i++) { int k = sortIndices_[i]; if (k == last) duplicate = true; last = k; } if (duplicate) { printf("duplicates - what do we want\n"); abort(); } newRow = CoinMax(newRow, last); } int newColumn = 0; CoinBigIndex newElement = 0; if (numberElements_ + numberInColumn > maximumElements_) { newElement = (3 * (numberElements_ + numberInColumn) / 2) + 1000; if (numberColumns_ * 10 > maximumColumns_ * 9) newColumn = (maximumColumns_ * 3) / 2 + 100; } if (numberColumns_ == maximumColumns_) newColumn = (maximumColumns_ * 3) / 2 + 100; if (newColumn || newRow >= maximumRows_ || newElement) { if (newRow < maximumRows_) { // rows okay resize(0, newColumn, newElement); } else { // newRow will be new numberRows_ resize((3 * newRow) / 2 + 100, newColumn, newElement); } } // If columns extended - take care of that fillColumns(numberColumns_, false, true); // Do name if (name) { columnName_.addHash(numberColumns_, name); } else if (!noNames_) { char name[9]; sprintf(name, "c%7.7d", numberColumns_); columnName_.addHash(numberColumns_, name); } columnLower_[numberColumns_] = columnLower; columnUpper_[numberColumns_] = columnUpper; objective_[numberColumns_] = objectiveValue; if (isInteger) integerType_[numberColumns_] = 1; else integerType_[numberColumns_] = 0; // If rows extended - take care of that fillRows(newRow, false); if (type_ == 1) { // can do simply CoinBigIndex put = start_[numberColumns_]; assert(put == numberElements_); bool doHash = hashElements_.numberItems() != 0; for (int i = 0; i < numberInColumn; i++) { elements_[put].column = numberColumns_; setRowAndStringInTriple(elements_[put], sortIndices_[i], false); //elements_[put].string=0; //elements_[put].row=static_cast(sortIndices_[i]); elements_[put].value = sortElements_[i]; if (doHash) hashElements_.addHash(put, sortIndices_[i], numberColumns_, elements_); put++; } start_[numberColumns_ + 1] = put; numberElements_ += numberInColumn; } else { if (numberInColumn) { // must update at least one link assert(links_); if (links_ == 2 || links_ == 3) { CoinBigIndex first = columnList_.addEasy(numberColumns_, numberInColumn, sortIndices_, sortElements_, elements_, hashElements_); if (links_ == 3) rowList_.addHard(first, elements_, columnList_.firstFree(), columnList_.lastFree(), columnList_.next()); numberElements_ = CoinMax(numberElements_, columnList_.numberElements()); if (links_ == 3) assert(columnList_.numberElements() == rowList_.numberElements()); } else if (links_ == 1) { rowList_.addHard(numberColumns_, numberInColumn, sortIndices_, sortElements_, elements_, hashElements_); numberElements_ = CoinMax(numberElements_, rowList_.numberElements()); } } } numberColumns_++; } // Sets value for row i and column j void CoinModel::setElement(int i, int j, double value) { if (type_ == -1) { // initial type_ = 0; resize(100, 100, 1000); createList(2); } else if (type_ == 3) { badType(); } else if (!links_) { if (type_ == 0 || type_ == 2) { createList(1); } else if (type_ == 1) { createList(2); } } if (!hashElements_.maximumItems()) { hashElements_.resize(maximumElements_, elements_); } CoinBigIndex position = hashElements_.hash(i, j, elements_); if (position >= 0) { elements_[position].value = value; setStringInTriple(elements_[position], false); } else { int newColumn = 0; if (j >= maximumColumns_) { newColumn = j + 1; } int newRow = 0; if (i >= maximumRows_) { newRow = i + 1; } CoinBigIndex newElement = 0; if (numberElements_ == maximumElements_) { newElement = (3 * numberElements_ / 2) + 1000; } if (newRow || newColumn || newElement) { if (newColumn) newColumn = (3 * newColumn) / 2 + 100; if (newRow) newRow = (3 * newRow) / 2 + 100; resize(newRow, newColumn, newElement); } // If columns extended - take care of that fillColumns(j, false); // If rows extended - take care of that fillRows(i, false); // treat as addRow unless only columnList_ exists if ((links_ & 1) != 0) { CoinBigIndex first = rowList_.addEasy(i, 1, &j, &value, elements_, hashElements_); if (links_ == 3) columnList_.addHard(first, elements_, rowList_.firstFree(), rowList_.lastFree(), rowList_.next()); numberElements_ = CoinMax(numberElements_, rowList_.numberElements()); if (links_ == 3) assert(columnList_.numberElements() == rowList_.numberElements()); } else if (links_ == 2) { columnList_.addHard(i, 1, &j, &value, elements_, hashElements_); numberElements_ = CoinMax(numberElements_, columnList_.numberElements()); } numberRows_ = CoinMax(numberRows_, i + 1); ; numberColumns_ = CoinMax(numberColumns_, j + 1); ; } } // Sets quadratic value for column i and j void CoinModel::setQuadraticElement(int, int, double) { printf("not written yet\n"); abort(); return; } // Sets value for row i and column j as string void CoinModel::setElement(int i, int j, const char *value) { double dummyValue = 1.0; if (type_ == -1) { // initial type_ = 0; resize(100, 100, 1000); createList(2); } else if (type_ == 3) { badType(); } else if (!links_) { if (type_ == 0 || type_ == 2) { createList(1); } else if (type_ == 1) { createList(2); } } if (!hashElements_.maximumItems()) { // set up number of items hashElements_.setNumberItems(numberElements_); hashElements_.resize(maximumElements_, elements_); } CoinBigIndex position = hashElements_.hash(i, j, elements_); if (position >= 0) { int iValue = addString(value); elements_[position].value = iValue; setStringInTriple(elements_[position], true); } else { int newColumn = 0; if (j >= maximumColumns_) { newColumn = j + 1; } int newRow = 0; if (i >= maximumRows_) { newRow = i + 1; } CoinBigIndex newElement = 0; if (numberElements_ == maximumElements_) { newElement = (3 * numberElements_ / 2) + 1000; } if (newRow || newColumn || newElement) { if (newColumn) newColumn = (3 * newColumn) / 2 + 100; if (newRow) newRow = (3 * newRow) / 2 + 100; resize(newRow, newColumn, newElement); } // If columns extended - take care of that fillColumns(j, false); // If rows extended - take care of that fillRows(i, false); // treat as addRow unless only columnList_ exists if ((links_ & 1) != 0) { CoinBigIndex first = rowList_.addEasy(i, 1, &j, &dummyValue, elements_, hashElements_); if (links_ == 3) columnList_.addHard(first, elements_, rowList_.firstFree(), rowList_.lastFree(), rowList_.next()); numberElements_ = CoinMax(numberElements_, rowList_.numberElements()); if (links_ == 3) assert(columnList_.numberElements() == rowList_.numberElements()); } else if (links_ == 2) { columnList_.addHard(i, 1, &j, &dummyValue, elements_, hashElements_); numberElements_ = CoinMax(numberElements_, columnList_.numberElements()); } numberRows_ = CoinMax(numberRows_, i + 1); ; numberColumns_ = CoinMax(numberColumns_, j + 1); ; CoinBigIndex position = hashElements_.hash(i, j, elements_); assert(position >= 0); int iValue = addString(value); elements_[position].value = iValue; setStringInTriple(elements_[position], true); } } // Associates a string with a value. Returns string id (or -1 if does not exist) int CoinModel::associateElement(const char *stringValue, double value) { int position = string_.hash(stringValue); if (position < 0) { // not there -add position = addString(stringValue); assert(position == string_.numberItems() - 1); } if (sizeAssociated_ <= position) { int newSize = (3 * position) / 2 + 100; double *temp = new double[newSize]; CoinMemcpyN(associated_, sizeAssociated_, temp); CoinFillN(temp + sizeAssociated_, newSize - sizeAssociated_, unsetValue()); delete[] associated_; associated_ = temp; sizeAssociated_ = newSize; } associated_[position] = value; return position; } /* Sets rowLower (if row does not exist then all rows up to this are defined with default values and no elements) */ void CoinModel::setRowLower(int whichRow, double rowLower) { assert(whichRow >= 0); // make sure enough room and fill fillRows(whichRow, true); rowLower_[whichRow] = rowLower; rowType_[whichRow] &= ~1; } /* Sets rowUpper (if row does not exist then all rows up to this are defined with default values and no elements) */ void CoinModel::setRowUpper(int whichRow, double rowUpper) { assert(whichRow >= 0); // make sure enough room and fill fillRows(whichRow, true); rowUpper_[whichRow] = rowUpper; rowType_[whichRow] &= ~2; } /* Sets rowLower and rowUpper (if row does not exist then all rows up to this are defined with default values and no elements) */ void CoinModel::setRowBounds(int whichRow, double rowLower, double rowUpper) { assert(whichRow >= 0); // make sure enough room and fill fillRows(whichRow, true); rowLower_[whichRow] = rowLower; rowUpper_[whichRow] = rowUpper; rowType_[whichRow] &= ~3; } /* Sets name (if row does not exist then all rows up to this are defined with default values and no elements) */ void CoinModel::setRowName(int whichRow, const char *rowName) { assert(whichRow >= 0); // make sure enough room and fill fillRows(whichRow, true); assert(!noNames_); const char *oldName = rowName_.name(whichRow); if (oldName) rowName_.deleteHash(whichRow); if (rowName) rowName_.addHash(whichRow, rowName); } /* Sets columnLower (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnLower(int whichColumn, double columnLower) { assert(whichColumn >= 0); // make sure enough room and fill fillColumns(whichColumn, true); columnLower_[whichColumn] = columnLower; columnType_[whichColumn] &= ~1; } /* Sets columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnUpper(int whichColumn, double columnUpper) { assert(whichColumn >= 0); // make sure enough room and fill fillColumns(whichColumn, true); columnUpper_[whichColumn] = columnUpper; columnType_[whichColumn] &= ~2; } /* Sets columnLower and columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnBounds(int whichColumn, double columnLower, double columnUpper) { assert(whichColumn >= 0); // make sure enough room and fill fillColumns(whichColumn, true); columnLower_[whichColumn] = columnLower; columnUpper_[whichColumn] = columnUpper; columnType_[whichColumn] &= ~3; } /* Sets columnObjective (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnObjective(int whichColumn, double columnObjective) { assert(whichColumn >= 0); // make sure enough room and fill fillColumns(whichColumn, true); objective_[whichColumn] = columnObjective; columnType_[whichColumn] &= ~4; } /* Sets name (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnName(int whichColumn, const char *columnName) { assert(whichColumn >= 0); // make sure enough room and fill fillColumns(whichColumn, true); const char *oldName = columnName_.name(whichColumn); assert(!noNames_); if (oldName) columnName_.deleteHash(whichColumn); if (columnName) columnName_.addHash(whichColumn, columnName); } /* Sets integer (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnIsInteger(int whichColumn, bool columnIsInteger) { assert(whichColumn >= 0); // make sure enough room and fill fillColumns(whichColumn, true); integerType_[whichColumn] = (columnIsInteger) ? 1 : 0; columnType_[whichColumn] &= ~8; } // Adds one string, returns index int CoinModel::addString(const char *string) { int position = string_.hash(string); if (position < 0) { position = string_.numberItems(); string_.addHash(position, string); } return position; } /* Sets rowLower (if row does not exist then all rows up to this are defined with default values and no elements) */ void CoinModel::setRowLower(int whichRow, const char *rowLower) { assert(whichRow >= 0); // make sure enough room and fill fillRows(whichRow, true); if (rowLower) { int value = addString(rowLower); rowLower_[whichRow] = value; rowType_[whichRow] |= 1; } else { rowLower_[whichRow] = -COIN_DBL_MAX; } } /* Sets rowUpper (if row does not exist then all rows up to this are defined with default values and no elements) */ void CoinModel::setRowUpper(int whichRow, const char *rowUpper) { assert(whichRow >= 0); // make sure enough room and fill fillRows(whichRow, true); if (rowUpper) { int value = addString(rowUpper); rowUpper_[whichRow] = value; rowType_[whichRow] |= 2; } else { rowUpper_[whichRow] = COIN_DBL_MAX; } } /* Sets columnLower (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnLower(int whichColumn, const char *columnLower) { assert(whichColumn >= 0); // make sure enough room and fill fillColumns(whichColumn, true); if (columnLower) { int value = addString(columnLower); columnLower_[whichColumn] = value; columnType_[whichColumn] |= 1; } else { columnLower_[whichColumn] = 0.0; } } /* Sets columnUpper (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnUpper(int whichColumn, const char *columnUpper) { assert(whichColumn >= 0); // make sure enough room and fill fillColumns(whichColumn, true); if (columnUpper) { int value = addString(columnUpper); columnUpper_[whichColumn] = value; columnType_[whichColumn] |= 2; } else { columnUpper_[whichColumn] = COIN_DBL_MAX; } } /* Sets columnObjective (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnObjective(int whichColumn, const char *columnObjective) { assert(whichColumn >= 0); // make sure enough room and fill fillColumns(whichColumn, true); if (columnObjective) { int value = addString(columnObjective); objective_[whichColumn] = value; columnType_[whichColumn] |= 4; } else { objective_[whichColumn] = 0.0; } } /* Sets integer (if column does not exist then all columns up to this are defined with default values and no elements) */ void CoinModel::setColumnIsInteger(int whichColumn, const char *columnIsInteger) { assert(whichColumn >= 0); // make sure enough room and fill fillColumns(whichColumn, true); if (columnIsInteger) { int value = addString(columnIsInteger); integerType_[whichColumn] = value; columnType_[whichColumn] |= 8; } else { integerType_[whichColumn] = 0; } } //static const char * minusInfinity="-infinity"; //static const char * plusInfinity="+infinity"; //static const char * zero="0.0"; static const char *numeric = "Numeric"; /* Gets rowLower (if row does not exist then -COIN_DBL_MAX) */ const char * CoinModel::getRowLowerAsString(int whichRow) const { assert(whichRow >= 0); if (whichRow < numberRows_ && rowLower_) { if ((rowType_[whichRow] & 1) != 0) { int position = static_cast< int >(rowLower_[whichRow]); return string_.name(position); } else { return numeric; } } else { return numeric; } } /* Gets rowUpper (if row does not exist then +COIN_DBL_MAX) */ const char * CoinModel::getRowUpperAsString(int whichRow) const { assert(whichRow >= 0); if (whichRow < numberRows_ && rowUpper_) { if ((rowType_[whichRow] & 2) != 0) { int position = static_cast< int >(rowUpper_[whichRow]); return string_.name(position); } else { return numeric; } } else { return numeric; } } /* Gets columnLower (if column does not exist then 0.0) */ const char * CoinModel::getColumnLowerAsString(int whichColumn) const { assert(whichColumn >= 0); if (whichColumn < numberColumns_ && columnLower_) { if ((columnType_[whichColumn] & 1) != 0) { int position = static_cast< int >(columnLower_[whichColumn]); return string_.name(position); } else { return numeric; } } else { return numeric; } } /* Gets columnUpper (if column does not exist then COIN_DBL_MAX) */ const char * CoinModel::getColumnUpperAsString(int whichColumn) const { assert(whichColumn >= 0); if (whichColumn < numberColumns_ && columnUpper_) { if ((columnType_[whichColumn] & 2) != 0) { int position = static_cast< int >(columnUpper_[whichColumn]); return string_.name(position); } else { return numeric; } } else { return numeric; } } /* Gets columnObjective (if column does not exist then 0.0) */ const char * CoinModel::getColumnObjectiveAsString(int whichColumn) const { assert(whichColumn >= 0); if (whichColumn < numberColumns_ && objective_) { if ((columnType_[whichColumn] & 4) != 0) { int position = static_cast< int >(objective_[whichColumn]); return string_.name(position); } else { return numeric; } } else { return numeric; } } /* Gets if integer (if column does not exist then false) */ const char * CoinModel::getColumnIsIntegerAsString(int whichColumn) const { assert(whichColumn >= 0); if (whichColumn < numberColumns_ && integerType_) { if ((columnType_[whichColumn] & 8) != 0) { int position = integerType_[whichColumn]; return string_.name(position); } else { return numeric; } } else { return numeric; } } /* Deletes all entries in row and bounds.*/ void CoinModel::deleteRow(int whichRow) { assert(whichRow >= 0); if (whichRow < numberRows_) { if (rowLower_) { rowLower_[whichRow] = -COIN_DBL_MAX; rowUpper_[whichRow] = COIN_DBL_MAX; rowType_[whichRow] = 0; if (!noNames_) rowName_.deleteHash(whichRow); } // need lists if (type_ == 0) { assert(start_); assert(!hashElements_.numberItems()); delete[] start_; start_ = NULL; } if ((links_ & 1) == 0) { createList(1); } assert(links_); // row links guaranteed to exist rowList_.deleteSame(whichRow, elements_, hashElements_, (links_ != 3)); // Just need to set first and last and take out if (links_ == 3) columnList_.updateDeleted(whichRow, elements_, rowList_); } } /* Deletes all entries in column and bounds.*/ void CoinModel::deleteColumn(int whichColumn) { assert(whichColumn >= 0); if (whichColumn < numberColumns_) { if (columnLower_) { columnLower_[whichColumn] = 0.0; columnUpper_[whichColumn] = COIN_DBL_MAX; objective_[whichColumn] = 0.0; integerType_[whichColumn] = 0; columnType_[whichColumn] = 0; if (!noNames_) columnName_.deleteHash(whichColumn); } // need lists if (type_ == 0) { assert(start_); assert(!hashElements_.numberItems()); delete[] start_; start_ = NULL; } else if (type_ == 3) { badType(); } if ((links_ & 2) == 0) { createList(2); } assert(links_); // column links guaranteed to exist columnList_.deleteSame(whichColumn, elements_, hashElements_, (links_ != 3)); // Just need to set first and last and take out if (links_ == 3) rowList_.updateDeleted(whichColumn, elements_, columnList_); } } // Takes element out of matrix CoinBigIndex CoinModel::deleteElement(int row, int column) { CoinBigIndex iPos = position(row, column); if (iPos >= 0) deleteThisElement(row, column, iPos); return iPos; } // Takes element out of matrix when position known void #ifndef NDEBUG CoinModel::deleteThisElement(int row, int column, CoinBigIndex position) #else CoinModel::deleteThisElement(int, int, CoinBigIndex position) #endif { assert(row < numberRows_ && column < numberColumns_); assert(row == rowInTriple(elements_[position]) && column == static_cast< int >(elements_[position].column)); if ((links_ & 1) == 0) { createList(1); } assert(links_); // row links guaranteed to exist rowList_.deleteRowOne(position, elements_, hashElements_); // Just need to set first and last and take out if (links_ == 3) columnList_.updateDeletedOne(position, elements_); elements_[position].column = -1; elements_[position].value = 0.0; } /* Packs down all rows i.e. removes empty rows permanently. Empty rows have no elements and feasible bounds. returns number of rows deleted. */ int CoinModel::packRows() { if (type_ == 3) badType(); int *newRow = new int[numberRows_]; memset(newRow, 0, numberRows_ * sizeof(int)); int iRow; int n = 0; for (iRow = 0; iRow < numberRows_; iRow++) { if (rowLower_[iRow] != -COIN_DBL_MAX) newRow[iRow]++; if (rowUpper_[iRow] != COIN_DBL_MAX) newRow[iRow]++; if (!noNames_ && rowName_.name(iRow)) newRow[iRow]++; } int i; for (i = 0; i < numberElements_; i++) { if (elements_[i].column >= 0) { iRow = rowInTriple(elements_[i]); assert(iRow >= 0 && iRow < numberRows_); newRow[iRow]++; } } bool doRowNames = (rowName_.numberItems() != 0); for (iRow = 0; iRow < numberRows_; iRow++) { if (newRow[iRow]) { rowLower_[n] = rowLower_[iRow]; rowUpper_[n] = rowUpper_[iRow]; rowType_[n] = rowType_[iRow]; if (doRowNames) rowName_.setName(n, rowName_.getName(iRow)); newRow[iRow] = n++; } else { newRow[iRow] = -1; } } int numberDeleted = numberRows_ - n; if (numberDeleted) { numberRows_ = n; n = 0; for (i = 0; i < numberElements_; i++) { if (elements_[i].column >= 0) { elements_[n] = elements_[i]; setRowInTriple(elements_[n], newRow[rowInTriple(elements_[i])]); n++; } } numberElements_ = n; // now redo if (doRowNames) { rowName_.setNumberItems(numberRows_); rowName_.resize(rowName_.maximumItems(), true); } if (hashElements_.numberItems()) { hashElements_.setNumberItems(numberElements_); hashElements_.resize(hashElements_.maximumItems(), elements_, true); } if (start_) { int last = -1; if (type_ == 0) { for (i = 0; i < numberElements_; i++) { int now = rowInTriple(elements_[i]); assert(now >= last); if (now > last) { start_[last + 1] = numberElements_; for (int j = last + 1; j < now; j++) start_[j + 1] = numberElements_; last = now; } } for (int j = last + 1; j < numberRows_; j++) start_[j + 1] = numberElements_; } else { assert(type_ == 1); for (i = 0; i < numberElements_; i++) { int now = elements_[i].column; assert(now >= last); if (now > last) { start_[last + 1] = numberElements_; for (int j = last + 1; j < now; j++) start_[j + 1] = numberElements_; last = now; } } for (int j = last + 1; j < numberColumns_; j++) start_[j + 1] = numberElements_; } } if ((links_ & 1) != 0) { rowList_ = CoinModelLinkedList(); links_ &= ~1; createList(1); } if ((links_ & 2) != 0) { columnList_ = CoinModelLinkedList(); links_ &= ~2; createList(2); } } delete[] newRow; return numberDeleted; } /* Packs down all columns i.e. removes empty columns permanently. Empty columns have no elements and no objective. returns number of columns deleted. */ int CoinModel::packColumns() { if (type_ == 3) badType(); int *newColumn = new int[numberColumns_]; memset(newColumn, 0, numberColumns_ * sizeof(int)); int iColumn; int n = 0; for (iColumn = 0; iColumn < numberColumns_; iColumn++) { if (columnLower_[iColumn] != 0.0) newColumn[iColumn]++; if (columnUpper_[iColumn] != COIN_DBL_MAX) newColumn[iColumn]++; if (objective_[iColumn] != 0.0) newColumn[iColumn]++; if (!noNames_ && columnName_.name(iColumn)) newColumn[iColumn]++; } int i; for (i = 0; i < numberElements_; i++) { if (elements_[i].column >= 0) { iColumn = static_cast< int >(elements_[i].column); assert(iColumn >= 0 && iColumn < numberColumns_); newColumn[iColumn]++; } } bool doColumnNames = (columnName_.numberItems() != 0); for (iColumn = 0; iColumn < numberColumns_; iColumn++) { if (newColumn[iColumn]) { columnLower_[n] = columnLower_[iColumn]; columnUpper_[n] = columnUpper_[iColumn]; objective_[n] = objective_[iColumn]; integerType_[n] = integerType_[iColumn]; columnType_[n] = columnType_[iColumn]; if (doColumnNames) columnName_.setName(n, columnName_.getName(iColumn)); newColumn[iColumn] = n++; } else { newColumn[iColumn] = -1; } } int numberDeleted = numberColumns_ - n; if (numberDeleted) { numberColumns_ = n; n = 0; for (i = 0; i < numberElements_; i++) { if (elements_[i].column >= 0) { elements_[n] = elements_[i]; elements_[n].column = newColumn[elements_[i].column]; n++; } } numberElements_ = n; // now redo if (doColumnNames) { columnName_.setNumberItems(numberColumns_); columnName_.resize(columnName_.maximumItems(), true); } if (hashElements_.numberItems()) { hashElements_.setNumberItems(numberElements_); hashElements_.resize(hashElements_.maximumItems(), elements_, true); } if (start_) { int last = -1; if (type_ == 0) { for (i = 0; i < numberElements_; i++) { int now = rowInTriple(elements_[i]); assert(now >= last); if (now > last) { start_[last + 1] = numberElements_; for (int j = last + 1; j < now; j++) start_[j + 1] = numberElements_; last = now; } } for (int j = last + 1; j < numberRows_; j++) start_[j + 1] = numberElements_; } else { assert(type_ == 1); for (i = 0; i < numberElements_; i++) { int now = elements_[i].column; assert(now >= last); if (now > last) { start_[last + 1] = numberElements_; for (int j = last + 1; j < now; j++) start_[j + 1] = numberElements_; last = now; } } for (int j = last + 1; j < numberColumns_; j++) start_[j + 1] = numberElements_; } } if ((links_ & 1) != 0) { rowList_ = CoinModelLinkedList(); links_ &= ~1; createList(1); } if ((links_ & 2) != 0) { columnList_ = CoinModelLinkedList(); links_ &= ~2; createList(2); } } delete[] newColumn; return numberDeleted; } /* Packs down all rows and columns. i.e. removes empty rows and columns permanently. Empty rows have no elements and feasible bounds. Empty columns have no elements and no objective. returns number of rows+columns deleted. */ int CoinModel::pack() { // For now do slowly (obvious overheads) return packRows() + packColumns(); } // Creates a packed matrix - return sumber of errors int CoinModel::createPackedMatrix(CoinPackedMatrix &matrix, const double *associated) { if (type_ == 3) return 0; // badType(); // Set to say all parts type_ = 2; resize(numberRows_, numberColumns_, numberElements_); // Do counts for CoinPackedMatrix int *length = new int[numberColumns_]; CoinZeroN(length, numberColumns_); int i; int numberElements = 0; for (i = 0; i < numberElements_; i++) { int column = elements_[i].column; if (column >= 0) { length[column]++; numberElements++; } } int numberErrors = 0; CoinBigIndex *start = new CoinBigIndex[numberColumns_ + 1]; int *row = new int[numberElements]; double *element = new double[numberElements]; start[0] = 0; for (i = 0; i < numberColumns_; i++) { start[i + 1] = start[i] + length[i]; length[i] = 0; } numberElements = 0; for (i = 0; i < numberElements_; i++) { int column = elements_[i].column; if (column >= 0) { double value = elements_[i].value; if (stringInTriple(elements_[i])) { int position = static_cast< int >(value); assert(position < sizeAssociated_); value = associated[position]; if (value == unsetValue()) { numberErrors++; value = 0.0; } } if (value) { numberElements++; CoinBigIndex put = start[column] + length[column]; row[put] = rowInTriple(elements_[i]); element[put] = value; length[column]++; } } } for (i = 0; i < numberColumns_; i++) { CoinBigIndex put = start[i]; CoinSort_2(row + put, row + put + length[i], element + put); } matrix = CoinPackedMatrix(true, numberRows_, numberColumns_, numberElements, element, row, start, length, 0.0, 0.0); delete[] start; delete[] length; delete[] row; delete[] element; return numberErrors; } /* Fills in startPositive and startNegative with counts for +-1 matrix. If not +-1 then startPositive[0]==-1 otherwise counts and startPositive[numberColumns]== size - return number of errors */ int CoinModel::countPlusMinusOne(CoinBigIndex *startPositive, CoinBigIndex *startNegative, const double *associated) { if (type_ == 3) badType(); memset(startPositive, 0, numberColumns_ * sizeof(int)); memset(startNegative, 0, numberColumns_ * sizeof(int)); // Set to say all parts type_ = 2; resize(numberRows_, numberColumns_, numberElements_); int numberErrors = 0; CoinBigIndex numberElements = 0; for (CoinBigIndex i = 0; i < numberElements_; i++) { int column = elements_[i].column; if (column >= 0) { double value = elements_[i].value; if (stringInTriple(elements_[i])) { int position = static_cast< int >(value); assert(position < sizeAssociated_); value = associated[position]; if (value == unsetValue()) { numberErrors++; value = 0.0; startPositive[0] = -1; break; } } if (value) { numberElements++; if (value == 1.0) { startPositive[column]++; } else if (value == -1.0) { startNegative[column]++; } else { startPositive[0] = -1; break; } } } } if (startPositive[0] >= 0) startPositive[numberColumns_] = numberElements; return numberErrors; } /* Creates +-1 matrix given startPositive and startNegative counts for +-1 matrix. */ void CoinModel::createPlusMinusOne(CoinBigIndex *startPositive, CoinBigIndex *startNegative, int *indices, const double *associated) { if (type_ == 3) badType(); CoinBigIndex size = 0; int iColumn; for (iColumn = 0; iColumn < numberColumns_; iColumn++) { CoinBigIndex n = startPositive[iColumn]; startPositive[iColumn] = size; size += n; n = startNegative[iColumn]; startNegative[iColumn] = size; size += n; } startPositive[numberColumns_] = size; for (CoinBigIndex i = 0; i < numberElements_; i++) { int column = elements_[i].column; if (column >= 0) { double value = elements_[i].value; if (stringInTriple(elements_[i])) { int position = static_cast< int >(value); assert(position < sizeAssociated_); value = associated[position]; } int iRow = rowInTriple(elements_[i]); if (value == 1.0) { CoinBigIndex position = startPositive[column]; indices[position] = iRow; startPositive[column]++; } else if (value == -1.0) { CoinBigIndex position = startNegative[column]; indices[position] = iRow; startNegative[column]++; } } } // and now redo starts for (iColumn = numberColumns_ - 1; iColumn >= 0; iColumn--) { startPositive[iColumn + 1] = startNegative[iColumn]; startNegative[iColumn] = startPositive[iColumn]; } startPositive[0] = 0; for (iColumn = 0; iColumn < numberColumns_; iColumn++) { CoinBigIndex start = startPositive[iColumn]; CoinBigIndex end = startNegative[iColumn]; std::sort(indices + start, indices + end); start = startNegative[iColumn]; end = startPositive[iColumn + 1]; std::sort(indices + start, indices + end); } } // Fills in all associated - returning number of errors int CoinModel::computeAssociated(double *associated) { CoinYacc info; info.length = 0; int numberErrors = 0; for (int i = 0; i < string_.numberItems(); i++) { if (string_.name(i) && associated[i] == unsetValue()) { associated[i] = getDoubleFromString(info, string_.name(i)); if (associated[i] == unsetValue()) numberErrors++; } } return numberErrors; } // Creates copies of various arrays - return number of errors int CoinModel::createArrays(double *&rowLower, double *&rowUpper, double *&columnLower, double *&columnUpper, double *&objective, int *&integerType, double *&associated) { if (sizeAssociated_ < string_.numberItems()) { int newSize = string_.numberItems(); double *temp = new double[newSize]; CoinMemcpyN(associated_, sizeAssociated_, temp); CoinFillN(temp + sizeAssociated_, newSize - sizeAssociated_, unsetValue()); delete[] associated_; associated_ = temp; sizeAssociated_ = newSize; } associated = CoinCopyOfArray(associated_, sizeAssociated_); int numberErrors = computeAssociated(associated); // Fill in as much as possible rowLower = CoinCopyOfArray(rowLower_, numberRows_); rowUpper = CoinCopyOfArray(rowUpper_, numberRows_); for (int iRow = 0; iRow < numberRows_; iRow++) { if ((rowType_[iRow] & 1) != 0) { int position = static_cast< int >(rowLower[iRow]); assert(position < sizeAssociated_); double value = associated[position]; if (value != unsetValue()) { rowLower[iRow] = value; } } if ((rowType_[iRow] & 2) != 0) { int position = static_cast< int >(rowUpper[iRow]); assert(position < sizeAssociated_); double value = associated[position]; if (value != unsetValue()) { rowUpper[iRow] = value; } } } columnLower = CoinCopyOfArray(columnLower_, numberColumns_); columnUpper = CoinCopyOfArray(columnUpper_, numberColumns_); objective = CoinCopyOfArray(objective_, numberColumns_); integerType = CoinCopyOfArray(integerType_, numberColumns_); for (int iColumn = 0; iColumn < numberColumns_; iColumn++) { if ((columnType_[iColumn] & 1) != 0) { int position = static_cast< int >(columnLower[iColumn]); assert(position < sizeAssociated_); double value = associated[position]; if (value != unsetValue()) { columnLower[iColumn] = value; } } if ((columnType_[iColumn] & 2) != 0) { int position = static_cast< int >(columnUpper[iColumn]); assert(position < sizeAssociated_); double value = associated[position]; if (value != unsetValue()) { columnUpper[iColumn] = value; } } if ((columnType_[iColumn] & 4) != 0) { int position = static_cast< int >(objective[iColumn]); assert(position < sizeAssociated_); double value = associated[position]; if (value != unsetValue()) { objective[iColumn] = value; } } if ((columnType_[iColumn] & 8) != 0) { int position = integerType[iColumn]; assert(position < sizeAssociated_); double value = associated[position]; if (value != unsetValue()) { integerType[iColumn] = static_cast< int >(value); } } } return numberErrors; } /* Write the problem in MPS format to a file with the given filename. */ int CoinModel::writeMps(const char *filename, int compression, int formatType, int numberAcross, bool keepStrings) { int numberErrors = 0; // Set arrays for normal use double *rowLower = rowLower_; double *rowUpper = rowUpper_; double *columnLower = columnLower_; double *columnUpper = columnUpper_; double *objective = objective_; int *integerType = integerType_; double *associated = associated_; // If strings then do copies if (string_.numberItems()) { numberErrors = createArrays(rowLower, rowUpper, columnLower, columnUpper, objective, integerType, associated); } CoinPackedMatrix matrix; if (type_ != 3) { createPackedMatrix(matrix, associated); } else { matrix = *packedMatrix_; } char *integrality = new char[numberColumns_]; bool hasInteger = false; for (int i = 0; i < numberColumns_; i++) { if (integerType[i]) { integrality[i] = 1; hasInteger = true; } else { integrality[i] = 0; } } CoinMpsIO writer; writer.setInfinity(COIN_DBL_MAX); const char *const *rowNames = NULL; if (rowName_.numberItems()) rowNames = rowName_.names(); const char *const *columnNames = NULL; if (columnName_.numberItems()) columnNames = columnName_.names(); writer.setMpsData(matrix, COIN_DBL_MAX, columnLower, columnUpper, objective, hasInteger ? integrality : 0, rowLower, rowUpper, columnNames, rowNames); delete[] integrality; if (rowLower != rowLower_) { delete[] rowLower; delete[] rowUpper; delete[] columnLower; delete[] columnUpper; delete[] objective; delete[] integerType; delete[] associated; if (numberErrors && logLevel_ > 0 && !keepStrings) printf("%d string elements had no values associated with them\n", numberErrors); } writer.setObjectiveOffset(objectiveOffset_); writer.setProblemName(problemName_.c_str()); if (keepStrings && string_.numberItems()) { // load up strings - sorted by column and row writer.copyStringElements(this); } return writer.writeMps(filename, compression, formatType, numberAcross); } /* Check two models against each other. Return nonzero if different. Ignore names if that set. May modify both models by cleaning up */ int CoinModel::differentModel(CoinModel &other, bool ignoreNames) { int numberErrors = 0; int numberErrors2 = 0; int returnCode = 0; if (numberRows_ != other.numberRows_ || numberColumns_ != other.numberColumns_) { if (logLevel_ > 0) printf("** Mismatch on size, this has %d rows, %d columns - other has %d rows, %d columns\n", numberRows_, numberColumns_, other.numberRows_, other.numberColumns_); returnCode = 1000; } // Set arrays for normal use double *rowLower = rowLower_; double *rowUpper = rowUpper_; double *columnLower = columnLower_; double *columnUpper = columnUpper_; double *objective = objective_; int *integerType = integerType_; double *associated = associated_; // If strings then do copies if (string_.numberItems()) { numberErrors += createArrays(rowLower, rowUpper, columnLower, columnUpper, objective, integerType, associated); } // Set arrays for normal use double *rowLower2 = other.rowLower_; double *rowUpper2 = other.rowUpper_; double *columnLower2 = other.columnLower_; double *columnUpper2 = other.columnUpper_; double *objective2 = other.objective_; int *integerType2 = other.integerType_; double *associated2 = other.associated_; // If strings then do copies if (other.string_.numberItems()) { numberErrors2 += other.createArrays(rowLower2, rowUpper2, columnLower2, columnUpper2, objective2, integerType2, associated2); } CoinPackedMatrix matrix; createPackedMatrix(matrix, associated); CoinPackedMatrix matrix2; other.createPackedMatrix(matrix2, associated2); if (numberErrors || numberErrors2) if (logLevel_ > 0) printf("** Errors when converting strings, %d on this, %d on other\n", numberErrors, numberErrors2); CoinRelFltEq tolerance; if (numberRows_ == other.numberRows_) { bool checkNames = !ignoreNames; if (!rowName_.numberItems() || !other.rowName_.numberItems()) checkNames = false; int numberDifferentL = 0; int numberDifferentU = 0; int numberDifferentN = 0; for (int i = 0; i < numberRows_; i++) { if (!tolerance(rowLower[i], rowLower2[i])) numberDifferentL++; if (!tolerance(rowUpper[i], rowUpper2[i])) numberDifferentU++; if (checkNames && rowName_.name(i) && other.rowName_.name(i)) { if (strcmp(rowName_.name(i), other.rowName_.name(i))) numberDifferentN++; } } int n = numberDifferentL + numberDifferentU + numberDifferentN; returnCode += n; if (n && logLevel_ > 0) printf("Row differences , %d lower, %d upper and %d names\n", numberDifferentL, numberDifferentU, numberDifferentN); } if (numberColumns_ == other.numberColumns_) { int numberDifferentL = 0; int numberDifferentU = 0; int numberDifferentN = 0; int numberDifferentO = 0; int numberDifferentI = 0; bool checkNames = !ignoreNames; if (!columnName_.numberItems() || !other.columnName_.numberItems()) checkNames = false; for (int i = 0; i < numberColumns_; i++) { if (!tolerance(columnLower[i], columnLower2[i])) numberDifferentL++; if (!tolerance(columnUpper[i], columnUpper2[i])) numberDifferentU++; if (!tolerance(objective[i], objective2[i])) numberDifferentO++; int i1 = (integerType) ? integerType[i] : 0; int i2 = (integerType2) ? integerType2[i] : 0; if (i1 != i2) numberDifferentI++; if (checkNames && columnName_.name(i) && other.columnName_.name(i)) { if (strcmp(columnName_.name(i), other.columnName_.name(i))) numberDifferentN++; } } int n = numberDifferentL + numberDifferentU + numberDifferentN; n += numberDifferentO + numberDifferentI; returnCode += n; if (n && logLevel_ > 0) printf("Column differences , %d lower, %d upper, %d objective, %d integer and %d names\n", numberDifferentL, numberDifferentU, numberDifferentO, numberDifferentI, numberDifferentN); } if (numberRows_ == other.numberRows_ && numberColumns_ == other.numberColumns_ && numberElements_ == other.numberElements_) { if (!matrix.isEquivalent(matrix2, tolerance)) { returnCode += 100; if (returnCode && logLevel_ > 0) printf("Two matrices are not same\n"); } } if (rowLower != rowLower_) { delete[] rowLower; delete[] rowUpper; delete[] columnLower; delete[] columnUpper; delete[] objective; delete[] integerType; delete[] associated; } if (rowLower2 != other.rowLower_) { delete[] rowLower2; delete[] rowUpper2; delete[] columnLower2; delete[] columnUpper2; delete[] objective2; delete[] integerType2; delete[] associated2; } return returnCode; } // Returns value for row i and column j double CoinModel::getElement(int i, int j) const { if (!hashElements_.numberItems()) { hashElements_.setNumberItems(numberElements_); hashElements_.resize(maximumElements_, elements_); } CoinBigIndex position = hashElements_.hash(i, j, elements_); if (position >= 0) { return elements_[position].value; } else { return 0.0; } } // Returns value for row rowName and column columnName double CoinModel::getElement(const char *rowName, const char *columnName) const { if (!hashElements_.numberItems()) { hashElements_.setNumberItems(numberElements_); hashElements_.resize(maximumElements_, elements_); } assert(!noNames_); int i = rowName_.hash(rowName); int j = columnName_.hash(columnName); CoinBigIndex position; if (i >= 0 && j >= 0) position = hashElements_.hash(i, j, elements_); else position = -1; if (position >= 0) { return elements_[position].value; } else { return 0.0; } } // Returns quadratic value for columns i and j double CoinModel::getQuadraticElement(int, int) const { printf("not written yet\n"); abort(); return 0.0; } // Returns value for row i and column j as string const char * CoinModel::getElementAsString(int i, int j) const { if (!hashElements_.numberItems()) { hashElements_.setNumberItems(numberElements_); hashElements_.resize(maximumElements_, elements_); } CoinBigIndex position = hashElements_.hash(i, j, elements_); if (position >= 0) { if (stringInTriple(elements_[position])) { int iString = static_cast< int >(elements_[position].value); assert(iString >= 0 && iString < string_.numberItems()); return string_.name(iString); } else { return numeric; } } else { return NULL; } } /* Returns position of element for row i column j. Only valid until next modification. -1 if element does not exist */ CoinBigIndex CoinModel::position(int i, int j) const { if (!hashElements_.numberItems()) { hashElements_.setNumberItems(numberElements_); hashElements_.resize(maximumElements_, elements_, true); } return hashElements_.hash(i, j, elements_); } /* Returns pointer to element for row i column j. Only valid until next modification. NULL if element does not exist */ double * CoinModel::pointer(int i, int j) const { if (!hashElements_.numberItems()) { hashElements_.setNumberItems(numberElements_); hashElements_.resize(maximumElements_, elements_); } CoinBigIndex position = hashElements_.hash(i, j, elements_); if (position >= 0) { return &(elements_[position].value); } else { return NULL; } } /* Returns first element in given row - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink CoinModel::firstInRow(int whichRow) const { CoinModelLink link; if (whichRow >= 0 && whichRow < numberRows_) { link.setOnRow(true); if (type_ == 0) { assert(start_); CoinBigIndex position = start_[whichRow]; if (position < start_[whichRow + 1]) { link.setRow(whichRow); link.setPosition(position); link.setColumn(elements_[position].column); assert(whichRow == rowInTriple(elements_[position])); link.setValue(elements_[position].value); } } else { fillList(whichRow, rowList_, 1); CoinBigIndex position = rowList_.first(whichRow); if (position >= 0) { link.setRow(whichRow); link.setPosition(position); link.setColumn(elements_[position].column); assert(whichRow == rowInTriple(elements_[position])); link.setValue(elements_[position].value); } } } return link; } /* Returns last element in given row - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink CoinModel::lastInRow(int whichRow) const { CoinModelLink link; if (whichRow >= 0 && whichRow < numberRows_) { link.setOnRow(true); if (type_ == 0) { assert(start_); CoinBigIndex position = start_[whichRow + 1] - 1; if (position >= start_[whichRow]) { link.setRow(whichRow); link.setPosition(position); link.setColumn(elements_[position].column); assert(whichRow == rowInTriple(elements_[position])); link.setValue(elements_[position].value); } } else { fillList(whichRow, rowList_, 1); CoinBigIndex position = rowList_.last(whichRow); if (position >= 0) { link.setRow(whichRow); link.setPosition(position); link.setColumn(elements_[position].column); assert(whichRow == rowInTriple(elements_[position])); link.setValue(elements_[position].value); } } } return link; } /* Returns first element in given column - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink CoinModel::firstInColumn(int whichColumn) const { CoinModelLink link; if (whichColumn >= 0 && whichColumn < numberColumns_) { link.setOnRow(false); if (type_ == 1) { assert(start_); CoinBigIndex position = start_[whichColumn]; if (position < start_[whichColumn + 1]) { link.setColumn(whichColumn); link.setPosition(position); link.setRow(rowInTriple(elements_[position])); assert(whichColumn == static_cast< int >(elements_[position].column)); link.setValue(elements_[position].value); } } else { fillList(whichColumn, columnList_, 2); if ((links_ & 2) == 0) { // Create list assert(!columnList_.numberMajor()); createList(2); } CoinBigIndex position = columnList_.first(whichColumn); if (position >= 0) { link.setColumn(whichColumn); link.setPosition(position); link.setRow(rowInTriple(elements_[position])); assert(whichColumn == static_cast< int >(elements_[position].column)); link.setValue(elements_[position].value); } } } return link; } /* Returns last element in given column - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink CoinModel::lastInColumn(int whichColumn) const { CoinModelLink link; if (whichColumn >= 0 && whichColumn < numberColumns_) { link.setOnRow(false); if (type_ == 1) { assert(start_); CoinBigIndex position = start_[whichColumn + 1] - 1; if (position >= start_[whichColumn]) { link.setColumn(whichColumn); link.setPosition(position); link.setRow(rowInTriple(elements_[position])); assert(whichColumn == static_cast< int >(elements_[position].column)); link.setValue(elements_[position].value); } } else { fillList(whichColumn, columnList_, 2); CoinBigIndex position = columnList_.last(whichColumn); if (position >= 0) { link.setColumn(whichColumn); link.setPosition(position); link.setRow(rowInTriple(elements_[position])); assert(whichColumn == static_cast< int >(elements_[position].column)); link.setValue(elements_[position].value); } } } return link; } /* Returns next element in current row or column - index is -1 if none. Index is given by .index and value by .value. User could also tell because input.next would be NULL */ CoinModelLink CoinModel::next(CoinModelLink ¤t) const { CoinModelLink link = current; CoinBigIndex position = current.position(); if (position >= 0) { if (current.onRow()) { // Doing by row int whichRow = current.row(); if (type_ == 0) { assert(start_); position++; if (position < start_[whichRow + 1]) { link.setPosition(position); link.setColumn(elements_[position].column); assert(whichRow == rowInTriple(elements_[position])); link.setValue(elements_[position].value); } else { // signal end link.setPosition(-1); link.setColumn(-1); link.setRow(-1); link.setValue(0.0); } } else { assert((links_ & 1) != 0); position = rowList_.next()[position]; if (position >= 0) { link.setPosition(position); link.setColumn(elements_[position].column); assert(whichRow == rowInTriple(elements_[position])); link.setValue(elements_[position].value); } else { // signal end link.setPosition(-1); link.setColumn(-1); link.setRow(-1); link.setValue(0.0); } } } else { // Doing by column int whichColumn = current.column(); if (type_ == 1) { assert(start_); position++; if (position < start_[whichColumn + 1]) { link.setPosition(position); link.setRow(rowInTriple(elements_[position])); assert(whichColumn == static_cast< int >(elements_[position].column)); link.setValue(elements_[position].value); } else { // signal end link.setPosition(-1); link.setColumn(-1); link.setRow(-1); link.setValue(0.0); } } else { assert((links_ & 2) != 0); position = columnList_.next()[position]; if (position >= 0) { link.setPosition(position); link.setRow(rowInTriple(elements_[position])); assert(whichColumn == static_cast< int >(elements_[position].column)); link.setValue(elements_[position].value); } else { // signal end link.setPosition(-1); link.setColumn(-1); link.setRow(-1); link.setValue(0.0); } } } } return link; } /* Returns previous element in current row or column - index is -1 if none. Index is given by .index and value by .value. User could also tell because input.previous would be NULL */ CoinModelLink CoinModel::previous(CoinModelLink ¤t) const { CoinModelLink link = current; CoinBigIndex position = current.position(); if (position >= 0) { if (current.onRow()) { // Doing by row int whichRow = current.row(); if (type_ == 0) { assert(start_); position--; if (position >= start_[whichRow]) { link.setPosition(position); link.setColumn(elements_[position].column); assert(whichRow == rowInTriple(elements_[position])); link.setValue(elements_[position].value); } else { // signal end link.setPosition(-1); link.setColumn(-1); link.setRow(-1); link.setValue(0.0); } } else { assert((links_ & 1) != 0); position = rowList_.previous()[position]; if (position >= 0) { link.setPosition(position); link.setColumn(elements_[position].column); assert(whichRow == rowInTriple(elements_[position])); link.setValue(elements_[position].value); } else { // signal end link.setPosition(-1); link.setColumn(-1); link.setRow(-1); link.setValue(0.0); } } } else { // Doing by column int whichColumn = current.column(); if (type_ == 1) { assert(start_); position--; if (position >= start_[whichColumn]) { link.setPosition(position); link.setRow(rowInTriple(elements_[position])); assert(whichColumn == static_cast< int >(elements_[position].column)); link.setValue(elements_[position].value); } else { // signal end link.setPosition(-1); link.setColumn(-1); link.setRow(-1); link.setValue(0.0); } } else { assert((links_ & 2) != 0); position = columnList_.previous()[position]; if (position >= 0) { link.setPosition(position); link.setRow(rowInTriple(elements_[position])); assert(whichColumn == static_cast< int >(elements_[position].column)); link.setValue(elements_[position].value); } else { // signal end link.setPosition(-1); link.setColumn(-1); link.setRow(-1); link.setValue(0.0); } } } } return link; } /* Returns first element in given quadratic column - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink CoinModel::firstInQuadraticColumn(int) const { printf("not written yet\n"); abort(); CoinModelLink x; return x; } /* Returns last element in given quadratic column - index is -1 if none. Index is given by .index and value by .value */ CoinModelLink CoinModel::lastInQuadraticColumn(int) const { printf("not written yet\n"); abort(); CoinModelLink x; return x; } /* Gets rowLower (if row does not exist then -COIN_DBL_MAX) */ double CoinModel::getRowLower(int whichRow) const { assert(whichRow >= 0); if (whichRow < numberRows_ && rowLower_) return rowLower_[whichRow]; else return -COIN_DBL_MAX; } /* Gets rowUpper (if row does not exist then +COIN_DBL_MAX) */ double CoinModel::getRowUpper(int whichRow) const { assert(whichRow >= 0); if (whichRow < numberRows_ && rowUpper_) return rowUpper_[whichRow]; else return COIN_DBL_MAX; } /* Gets name (if row does not exist then NULL) */ const char * CoinModel::getRowName(int whichRow) const { assert(whichRow >= 0); if (whichRow < rowName_.numberItems()) return rowName_.name(whichRow); else return NULL; } /* Gets columnLower (if column does not exist then 0.0) */ double CoinModel::getColumnLower(int whichColumn) const { assert(whichColumn >= 0); if (whichColumn < numberColumns_ && columnLower_) return columnLower_[whichColumn]; else return 0.0; } /* Gets columnUpper (if column does not exist then COIN_DBL_MAX) */ double CoinModel::getColumnUpper(int whichColumn) const { assert(whichColumn >= 0); if (whichColumn < numberColumns_ && columnUpper_) return columnUpper_[whichColumn]; else return COIN_DBL_MAX; } /* Gets columnObjective (if column does not exist then 0.0) */ double CoinModel::getColumnObjective(int whichColumn) const { assert(whichColumn >= 0); if (whichColumn < numberColumns_ && objective_) return objective_[whichColumn]; else return 0.0; } /* Gets name (if column does not exist then NULL) */ const char * CoinModel::getColumnName(int whichColumn) const { assert(whichColumn >= 0); if (whichColumn < columnName_.numberItems()) return columnName_.name(whichColumn); else return NULL; } /* Gets if integer (if column does not exist then false) */ bool CoinModel::getColumnIsInteger(int whichColumn) const { assert(whichColumn >= 0); if (whichColumn < numberColumns_ && integerType_) return integerType_[whichColumn] != 0; else return false; } // Row index from row name (-1 if no names or no match) int CoinModel::row(const char *rowName) const { assert(!noNames_); return static_cast< int >(rowName_.hash(rowName)); } // Column index from column name (-1 if no names or no match) int CoinModel::column(const char *columnName) const { assert(!noNames_); return static_cast< int >(columnName_.hash(columnName)); } // Resize void CoinModel::resize(int maximumRows, int maximumColumns, CoinBigIndex maximumElements) { maximumElements = CoinMax(maximumElements, maximumElements_); if (type_ == 0 || type_ == 2) { // need to redo row stuff maximumRows = CoinMax(maximumRows, numberRows_); if (maximumRows > maximumRows_) { bool needFill = rowLower_ == NULL; double *tempArray; tempArray = new double[maximumRows]; CoinMemcpyN(rowLower_, numberRows_, tempArray); #ifdef ZEROFAULT memset(tempArray + numberRows_, 0, (maximumRows - numberRows_) * sizeof(double)); #endif delete[] rowLower_; rowLower_ = tempArray; tempArray = new double[maximumRows]; CoinMemcpyN(rowUpper_, numberRows_, tempArray); #ifdef ZEROFAULT memset(tempArray + numberRows_, 0, (maximumRows - numberRows_) * sizeof(double)); #endif delete[] rowUpper_; rowUpper_ = tempArray; int *tempArray2; tempArray2 = new int[maximumRows]; CoinMemcpyN(rowType_, numberRows_, tempArray2); #ifdef ZEROFAULT memset(tempArray2 + numberRows_, 0, (maximumRows - numberRows_) * sizeof(int)); #endif delete[] rowType_; rowType_ = tempArray2; // resize hash if (!noNames_) rowName_.resize(maximumRows); // If we have links we need to resize if ((links_ & 1) != 0) { rowList_.resize(maximumRows, maximumElements); } // If we have start then we need to resize that if (type_ == 0) { CoinBigIndex *tempArray2; tempArray2 = new CoinBigIndex[maximumRows + 1]; #ifdef ZEROFAULT memset(tempArray2, 0, (maximumRows + 1) * sizeof(CoinBigIndex)); #endif if (start_) { CoinMemcpyN(start_, (numberRows_ + 1), tempArray2); delete[] start_; } else { tempArray2[0] = 0; } start_ = tempArray2; } maximumRows_ = maximumRows; // Fill if (needFill) { int save = numberRows_ - 1; numberRows_ = 0; fillRows(save, true); } } } else if (type_ == 3) { badType(); } if (type_ == 1 || type_ == 2) { // need to redo column stuff maximumColumns = CoinMax(maximumColumns, numberColumns_); if (maximumColumns > maximumColumns_) { bool needFill = columnLower_ == NULL; double *tempArray; tempArray = new double[maximumColumns]; CoinMemcpyN(columnLower_, numberColumns_, tempArray); #ifdef ZEROFAULT memset(tempArray + numberColumns_, 0, (maximumColumns - numberColumns_) * sizeof(double)); #endif delete[] columnLower_; columnLower_ = tempArray; tempArray = new double[maximumColumns]; CoinMemcpyN(columnUpper_, numberColumns_, tempArray); #ifdef ZEROFAULT memset(tempArray + numberColumns_, 0, (maximumColumns - numberColumns_) * sizeof(double)); #endif delete[] columnUpper_; columnUpper_ = tempArray; tempArray = new double[maximumColumns]; CoinMemcpyN(objective_, numberColumns_, tempArray); #ifdef ZEROFAULT memset(tempArray + numberColumns_, 0, (maximumColumns - numberColumns_) * sizeof(double)); #endif delete[] objective_; objective_ = tempArray; int *tempArray2; tempArray2 = new int[maximumColumns]; CoinMemcpyN(columnType_, numberColumns_, tempArray2); #ifdef ZEROFAULT memset(tempArray2 + numberColumns_, 0, (maximumColumns - numberColumns_) * sizeof(int)); #endif delete[] columnType_; columnType_ = tempArray2; tempArray2 = new int[maximumColumns]; CoinMemcpyN(integerType_, numberColumns_, tempArray2); #ifdef ZEROFAULT memset(tempArray2 + numberColumns_, 0, (maximumColumns - numberColumns_) * sizeof(int)); #endif delete[] integerType_; integerType_ = tempArray2; // resize hash if (!noNames_) columnName_.resize(maximumColumns); // If we have links we need to resize if ((links_ & 2) != 0) { columnList_.resize(maximumColumns, maximumElements); } // If we have start then we need to resize that if (type_ == 1) { CoinBigIndex *tempArray2; tempArray2 = new CoinBigIndex[maximumColumns + 1]; #ifdef ZEROFAULT memset(tempArray2, 0, (maximumColumns + 1) * sizeof(CoinBigIndex)); #endif if (start_) { CoinMemcpyN(start_, (numberColumns_ + 1), tempArray2); delete[] start_; } else { tempArray2[0] = 0; } start_ = tempArray2; } maximumColumns_ = maximumColumns; // Fill if (needFill) { int save = numberColumns_ - 1; numberColumns_ = 0; fillColumns(save, true); } } } if (type_ == 3) badType(); if (maximumElements > maximumElements_) { CoinModelTriple *tempArray = new CoinModelTriple[maximumElements]; CoinMemcpyN(elements_, numberElements_, tempArray); #ifdef ZEROFAULT memset(tempArray + numberElements_, 0, (maximumElements - numberElements_) * sizeof(CoinModelTriple)); #endif delete[] elements_; elements_ = tempArray; if (hashElements_.numberItems()) hashElements_.resize(maximumElements, elements_); maximumElements_ = maximumElements; // If we have links we need to resize if ((links_ & 1) != 0) { rowList_.resize(maximumRows_, maximumElements_); } if ((links_ & 2) != 0) { columnList_.resize(maximumColumns_, maximumElements_); } } } void CoinModel::fillRows(int whichRow, bool forceCreation, bool fromAddRow) { if (forceCreation || fromAddRow) { if (type_ == -1) { // initial type_ = 0; resize(CoinMax(100, whichRow + 1), 0, 1000); } else if (type_ == 1) { type_ = 2; } if (!rowLower_) { // need to set all whichRow = numberRows_ - 1; numberRows_ = 0; if (type_ != 3) resize(CoinMax(100, whichRow + 1), 0, 0); else resize(CoinMax(1, whichRow + 1), 0, 0); } if (whichRow >= maximumRows_) { if (type_ != 3) resize(CoinMax((3 * maximumRows_) / 2, whichRow + 1), 0, 0); else resize(CoinMax(1, whichRow + 1), 0, 0); } } if (whichRow >= numberRows_ && rowLower_) { // Need to fill int i; for (i = numberRows_; i <= whichRow; i++) { rowLower_[i] = -COIN_DBL_MAX; rowUpper_[i] = COIN_DBL_MAX; rowType_[i] = 0; } } if (!fromAddRow) { numberRows_ = CoinMax(whichRow + 1, numberRows_); // If simple minded then delete start if (start_) { delete[] start_; start_ = NULL; assert(!links_); // mixed - do linked lists for rows createList(1); } } } void CoinModel::fillColumns(int whichColumn, bool forceCreation, bool fromAddColumn) { if (forceCreation || fromAddColumn) { if (type_ == -1) { // initial type_ = 1; resize(0, CoinMax(100, whichColumn + 1), 1000); } else if (type_ == 0) { type_ = 2; } if (!objective_) { // need to set all whichColumn = numberColumns_ - 1; numberColumns_ = 0; if (type_ != 3) resize(0, CoinMax(100, whichColumn + 1), 0); else resize(0, CoinMax(1, whichColumn + 1), 0); } if (whichColumn >= maximumColumns_) { if (type_ != 3) resize(0, CoinMax((3 * maximumColumns_) / 2, whichColumn + 1), 0); else resize(0, CoinMax(1, whichColumn + 1), 0); } } if (whichColumn >= numberColumns_ && objective_) { // Need to fill int i; for (i = numberColumns_; i <= whichColumn; i++) { columnLower_[i] = 0.0; columnUpper_[i] = COIN_DBL_MAX; objective_[i] = 0.0; integerType_[i] = 0; columnType_[i] = 0; } } if (!fromAddColumn) { numberColumns_ = CoinMax(whichColumn + 1, numberColumns_); // If simple minded then delete start if (start_) { delete[] start_; start_ = NULL; assert(!links_); // mixed - do linked lists for columns createList(2); } } } // Fill in default linked list information void CoinModel::fillList(int which, CoinModelLinkedList &list, int type) const { if ((links_ & type) == 0) { // Create list assert(!list.numberMajor()); if (type == 1) { list.create(maximumRows_, maximumElements_, numberRows_, numberColumns_, 0, numberElements_, elements_); } else { list.create(maximumColumns_, maximumElements_, numberColumns_, numberRows_, 1, numberElements_, elements_); } if (links_ == 1 && type == 2) { columnList_.synchronize(rowList_); } else if (links_ == 2 && type == 1) { rowList_.synchronize(columnList_); } links_ |= type; } int number = list.numberMajor(); if (which >= number) { // may still need to extend list or fill it in if (which >= list.maximumMajor()) { list.resize((which * 3) / 2 + 100, list.maximumElements()); } list.fill(number, which + 1); } } /* Gets sorted row - user must provide enough space (easiest is allocate number of columns). Returns number of elements */ int CoinModel::getRow(int whichRow, int *column, double *element) { if (!hashElements_.maximumItems()) { // set up number of items hashElements_.setNumberItems(numberElements_); hashElements_.resize(maximumElements_, elements_); } assert(whichRow >= 0); int n = 0; if (whichRow < numberRows_) { CoinModelLink triple = firstInRow(whichRow); bool sorted = true; int last = -1; while (triple.column() >= 0) { int iColumn = triple.column(); assert(whichRow == triple.row()); if (iColumn < last) sorted = false; last = iColumn; if (column) column[n] = iColumn; if (element) element[n] = triple.value(); n++; triple = next(triple); } if (!sorted) { CoinSort_2(column, column + n, element); } } return n; } /* Gets sorted column - user must provide enough space (easiest is allocate number of rows). Returns number of elements */ int CoinModel::getColumn(int whichColumn, int *row, double *element) { if (!hashElements_.maximumItems()) { // set up number of items hashElements_.setNumberItems(numberElements_); hashElements_.resize(maximumElements_, elements_); } assert(whichColumn >= 0); int n = 0; if (whichColumn < numberColumns_) { CoinModelLink triple = firstInColumn(whichColumn); bool sorted = true; int last = -1; while (triple.column() >= 0) { int iRow = triple.row(); assert(whichColumn == triple.column()); if (iRow < last) sorted = false; last = iRow; if (row) row[n] = iRow; if (element) element[n] = triple.value(); n++; triple = next(triple); } if (!sorted) { CoinSort_2(row, row + n, element); } } return n; } /* Create a linked list and synchronize free type 1 for row 2 for column Marked as const as list is mutable */ void CoinModel::createList(int type) const { type_ = 2; if (type == 1) { assert((links_ & 1) == 0); rowList_.create(maximumRows_, maximumElements_, numberRows_, numberColumns_, 0, numberElements_, elements_); if (links_ == 2) { // synchronize free list rowList_.synchronize(columnList_); } links_ |= 1; } else { assert((links_ & 2) == 0); columnList_.create(maximumColumns_, maximumElements_, numberColumns_, numberRows_, 1, numberElements_, elements_); if (links_ == 1) { // synchronize free list columnList_.synchronize(rowList_); } links_ |= 2; } } // Checks that links are consistent void CoinModel::validateLinks() const { if ((links_ & 1)) { // validate row links rowList_.validateLinks(elements_); } if ((links_ & 2)) { // validate column links columnList_.validateLinks(elements_); } } // returns jColumn (-2 if linear term, -1 if unknown) and coefficient int CoinModel::decodeBit(char *phrase, char *&nextPhrase, double &coefficient, bool ifFirst) const { char *pos = phrase; // may be leading - (or +) char *pos2 = pos; double value = 1.0; if (*pos2 == '-' || *pos2 == '+') pos2++; // next terminator * or + or - while (*pos2) { if (*pos2 == '*') { break; } else if (*pos2 == '-' || *pos2 == '+') { if (pos2 == pos || *(pos2 - 1) != 'e') break; } pos2++; } // if * must be number otherwise must be name if (*pos2 == '*') { char *pos3 = pos; while (pos3 != pos2) { #ifndef NDEBUG char x = *pos3; #endif pos3++; assert((x >= '0' && x <= '9') || x == '.' || x == '+' || x == '-' || x == 'e'); } char saved = *pos2; *pos2 = '\0'; value = atof(pos); *pos2 = saved; // and down to next pos2++; pos = pos2; while (*pos2) { if (*pos2 == '-' || *pos2 == '+') break; pos2++; } } char saved = *pos2; *pos2 = '\0'; // now name // might have + or - if (*pos == '+') { pos++; } else if (*pos == '-') { pos++; assert(value == 1.0); value = -value; } int jColumn = column(pos); // must be column unless first when may be linear term if (jColumn < 0) { if (ifFirst) { char *pos3 = pos; while (pos3 != pos2) { #ifndef NDEBUG char x = *pos3; #endif pos3++; assert((x >= '0' && x <= '9') || x == '.' || x == '+' || x == '-' || x == 'e'); } assert(*pos2 == '\0'); // keep possible - value = value * atof(pos); jColumn = -2; } else { // bad *pos2 = saved; printf("bad nonlinear term %s\n", phrase); // maybe return -1 abort(); } } *pos2 = saved; pos = pos2; coefficient = value; nextPhrase = pos; return jColumn; } /* Gets correct form for a quadratic row - user to delete If row is not quadratic then returns which other variables are involved with tiny elements and count of total number of variables which could not be put in quadratic form */ CoinPackedMatrix * CoinModel::quadraticRow(int rowNumber, double *linearRow, int &numberBad) const { numberBad = 0; CoinZeroN(linearRow, numberColumns_); int numberElements = 0; assert(rowNumber >= -1 && rowNumber < numberRows_); if (rowNumber != -1) { // not objective CoinModelLink triple = firstInRow(rowNumber); while (triple.column() >= 0) { int iColumn = triple.column(); const char *expr = getElementAsString(rowNumber, iColumn); if (strcmp(expr, "Numeric")) { // try and see which columns assert(strlen(expr) < 20000); char temp[20000]; strcpy(temp, expr); char *pos = temp; bool ifFirst = true; while (*pos) { double value; int jColumn = decodeBit(pos, pos, value, ifFirst); // must be column unless first when may be linear term if (jColumn >= 0) { numberElements++; } else if (jColumn == -2) { linearRow[iColumn] = value; } else if (jColumn == -1) { // nonlinear term - we will just be marking numberElements++; } else { printf("bad nonlinear term %s\n", temp); abort(); } ifFirst = false; } } else { linearRow[iColumn] = getElement(rowNumber, iColumn); } triple = next(triple); } if (!numberElements) { return NULL; } else { int *column = new int[numberElements]; int *column2 = new int[numberElements]; double *element = new double[numberElements]; numberElements = 0; CoinModelLink triple = firstInRow(rowNumber); while (triple.column() >= 0) { int iColumn = triple.column(); const char *expr = getElementAsString(rowNumber, iColumn); if (strcmp(expr, "Numeric")) { // try and see which columns assert(strlen(expr) < 20000); char temp[20000]; strcpy(temp, expr); char *pos = temp; bool ifFirst = true; while (*pos) { double value; int jColumn = decodeBit(pos, pos, value, ifFirst); // must be column unless first when may be linear term if (jColumn >= 0) { column[numberElements] = iColumn; column2[numberElements] = jColumn; element[numberElements++] = value; } else if (jColumn == -1) { // nonlinear term - we will just be marking assert(jColumn >= 0); column[numberElements] = iColumn; column2[numberElements] = jColumn; element[numberElements++] = 1.0e-100; numberBad++; } else if (jColumn != -2) { printf("bad nonlinear term %s\n", temp); abort(); } ifFirst = false; } } triple = next(triple); } CoinPackedMatrix *newMatrix = new CoinPackedMatrix(true, column2, column, element, numberElements); delete[] column; delete[] column2; delete[] element; return newMatrix; } } else { // objective int iColumn; for (iColumn = 0; iColumn < numberColumns_; iColumn++) { const char *expr = getColumnObjectiveAsString(iColumn); if (strcmp(expr, "Numeric")) { // try and see which columns assert(strlen(expr) < 20000); char temp[20000]; strcpy(temp, expr); char *pos = temp; bool ifFirst = true; while (*pos) { double value; int jColumn = decodeBit(pos, pos, value, ifFirst); // must be column unless first when may be linear term if (jColumn >= 0) { numberElements++; } else if (jColumn == -2) { linearRow[iColumn] = value; } else if (jColumn == -1) { // nonlinear term - we will just be marking numberElements++; } else { printf("bad nonlinear term %s\n", temp); abort(); } ifFirst = false; } } else { linearRow[iColumn] = getElement(rowNumber, iColumn); } } if (!numberElements) { return NULL; } else { int *column = new int[numberElements]; int *column2 = new int[numberElements]; double *element = new double[numberElements]; numberElements = 0; for (iColumn = 0; iColumn < numberColumns_; iColumn++) { const char *expr = getColumnObjectiveAsString(iColumn); if (strcmp(expr, "Numeric")) { // try and see which columns assert(strlen(expr) < 20000); char temp[20000]; strcpy(temp, expr); char *pos = temp; bool ifFirst = true; while (*pos) { double value; int jColumn = decodeBit(pos, pos, value, ifFirst); // must be column unless first when may be linear term if (jColumn >= 0) { column[numberElements] = iColumn; column2[numberElements] = jColumn; element[numberElements++] = value; } else if (jColumn == -1) { // nonlinear term - we will just be marking assert(jColumn >= 0); column[numberElements] = iColumn; column2[numberElements] = jColumn; element[numberElements++] = 1.0e-100; numberBad++; } else if (jColumn != -2) { printf("bad nonlinear term %s\n", temp); abort(); } ifFirst = false; } } } return new CoinPackedMatrix(true, column2, column, element, numberElements); } } } // Replaces a quadratic row void CoinModel::replaceQuadraticRow(int rowNumber, const double *linearRow, const CoinPackedMatrix *quadraticPart) { assert(rowNumber >= -1 && rowNumber < numberRows_); if (rowNumber >= 0) { CoinModelLink triple = firstInRow(rowNumber); while (triple.column() >= 0) { int iColumn = triple.column(); deleteElement(rowNumber, iColumn); // triple stale - so start over triple = firstInRow(rowNumber); } const double *element = quadraticPart->getElements(); const int *column = quadraticPart->getIndices(); const CoinBigIndex *columnStart = quadraticPart->getVectorStarts(); const int *columnLength = quadraticPart->getVectorLengths(); int numberLook = quadraticPart->getNumCols(); int i; for (i = 0; i < numberLook; i++) { if (!columnLength[i]) { // just linear part if (linearRow[i]) setElement(rowNumber, i, linearRow[i]); } else { char temp[10000]; int put = 0; char temp2[30]; bool first = true; if (linearRow[i]) { sprintf(temp, "%g", linearRow[i]); first = false; /* temp is at most 10000 long, so static_cast is safe */ put = static_cast< int >(strlen(temp)); } for (CoinBigIndex j = columnStart[i]; j < columnStart[i] + columnLength[i]; j++) { int jColumn = column[j]; double value = element[j]; if (value < 0.0 || first) sprintf(temp2, "%g*c%7.7d", value, jColumn); else sprintf(temp2, "+%g*c%7.7d", value, jColumn); int nextPut = put + static_cast< int >(strlen(temp2)); assert(nextPut < 10000); strcpy(temp + put, temp2); put = nextPut; } setElement(rowNumber, i, temp); } } // rest of linear for (; i < numberColumns_; i++) { if (linearRow[i]) setElement(rowNumber, i, linearRow[i]); } } else { // objective int iColumn; for (iColumn = 0; iColumn < numberColumns_; iColumn++) { setColumnObjective(iColumn, 0.0); } const double *element = quadraticPart->getElements(); const int *column = quadraticPart->getIndices(); const CoinBigIndex *columnStart = quadraticPart->getVectorStarts(); const int *columnLength = quadraticPart->getVectorLengths(); int numberLook = quadraticPart->getNumCols(); int i; for (i = 0; i < numberLook; i++) { if (!columnLength[i]) { // just linear part if (linearRow[i]) setColumnObjective(i, linearRow[i]); } else { char temp[10000]; int put = 0; char temp2[30]; bool first = true; if (linearRow[i]) { sprintf(temp, "%g", linearRow[i]); first = false; /* temp is at most 10000 long, so static_cast is safe */ put = static_cast< int >(strlen(temp)); } for (CoinBigIndex j = columnStart[i]; j < columnStart[i] + columnLength[i]; j++) { int jColumn = column[j]; double value = element[j]; if (value < 0.0 || first) sprintf(temp2, "%g*c%7.7d", value, jColumn); else sprintf(temp2, "+%g*c%7.7d", value, jColumn); int nextPut = put + static_cast< int >(strlen(temp2)); assert(nextPut < 10000); strcpy(temp + put, temp2); put = nextPut; } setColumnObjective(i, temp); } } // rest of linear for (; i < numberColumns_; i++) { if (linearRow[i]) setColumnObjective(i, linearRow[i]); } } } /* If possible return a model where if all variables marked nonzero are fixed the problem will be linear. At present may only work if quadratic. Returns NULL if not possible */ CoinModel * CoinModel::reorder(const char *mark) const { // redo array so 2 high priority nonlinear, 1 nonlinear, 0 linear char *highPriority = new char[numberColumns_]; double *linear = new double[numberColumns_]; CoinModel *newModel = new CoinModel(*this); int iRow; for (iRow = -1; iRow < numberRows_; iRow++) { int numberBad; CoinPackedMatrix *row = quadraticRow(iRow, linear, numberBad); assert(!numberBad); // fix later if (row) { // see if valid //const double * element = row->getElements(); const int *column = row->getIndices(); const CoinBigIndex *columnStart = row->getVectorStarts(); const int *columnLength = row->getVectorLengths(); int numberLook = row->getNumCols(); for (int i = 0; i < numberLook; i++) { if (mark[i]) highPriority[i] = 2; else highPriority[i] = 1; for (CoinBigIndex j = columnStart[i]; j < columnStart[i] + columnLength[i]; j++) { int iColumn = column[j]; if (mark[iColumn]) highPriority[iColumn] = 2; else highPriority[iColumn] = 1; } } delete row; } } for (iRow = -1; iRow < numberRows_; iRow++) { int numberBad; CoinPackedMatrix *row = quadraticRow(iRow, linear, numberBad); if (row) { // see if valid const double *element = row->getElements(); const int *columnLow = row->getIndices(); const CoinBigIndex *columnHigh = row->getVectorStarts(); const int *columnLength = row->getVectorLengths(); int numberLook = row->getNumCols(); int canSwap = 0; for (int i = 0; i < numberLook; i++) { // this one needs to be available int iPriority = highPriority[i]; for (CoinBigIndex j = columnHigh[i]; j < columnHigh[i] + columnLength[i]; j++) { int iColumn = columnLow[j]; if (highPriority[iColumn] <= 1) { assert(highPriority[iColumn] == 1); if (iPriority == 1) { canSwap = -1; // no good break; } else { canSwap = 1; } } } } if (canSwap) { if (canSwap > 0) { // rewrite row /* get triples then swap ones needed then create packedmatrix then replace row */ CoinBigIndex numberElements = columnHigh[numberLook]; int *columnHigh2 = new int[numberElements]; int *columnLow2 = new int[numberElements]; double *element2 = new double[numberElements]; for (int i = 0; i < numberLook; i++) { // this one needs to be available int iPriority = highPriority[i]; if (iPriority == 2) { for (CoinBigIndex j = columnHigh[i]; j < columnHigh[i] + columnLength[i]; j++) { columnHigh2[j] = i; columnLow2[j] = columnLow[j]; element2[j] = element[j]; } } else { for (CoinBigIndex j = columnHigh[i]; j < columnHigh[i] + columnLength[i]; j++) { columnLow2[j] = i; columnHigh2[j] = columnLow[j]; element2[j] = element[j]; } } } delete row; row = new CoinPackedMatrix(true, columnHigh2, columnLow2, element2, numberElements); delete[] columnHigh2; delete[] columnLow2; delete[] element2; // Now replace row newModel->replaceQuadraticRow(iRow, linear, row); delete row; } else { delete row; delete newModel; newModel = NULL; printf("Unable to use priority - row %d\n", iRow); break; } } } } delete[] highPriority; delete[] linear; return newModel; } // Sets cut marker array void CoinModel::setCutMarker(int size, const int *marker) { delete[] cut_; cut_ = new int[maximumRows_]; CoinZeroN(cut_, maximumRows_); CoinMemcpyN(marker, size, cut_); } // Sets priority array void CoinModel::setPriorities(int size, const int *priorities) { delete[] priority_; priority_ = new int[maximumColumns_]; CoinZeroN(priority_, maximumColumns_); CoinMemcpyN(priorities, size, priority_); } /* Sets columnObjective array */ void CoinModel::setObjective(int numberColumns, const double *objective) { fillColumns(numberColumns, true, true); for (int i = 0; i < numberColumns; i++) { objective_[i] = objective[i]; columnType_[i] &= ~4; } } /* Sets columnLower array */ void CoinModel::setColumnLower(int numberColumns, const double *columnLower) { fillColumns(numberColumns, true, true); for (int i = 0; i < numberColumns; i++) { columnLower_[i] = columnLower[i]; columnType_[i] &= ~1; } } /* Sets columnUpper array */ void CoinModel::setColumnUpper(int numberColumns, const double *columnUpper) { fillColumns(numberColumns, true, true); for (int i = 0; i < numberColumns; i++) { columnUpper_[i] = columnUpper[i]; columnType_[i] &= ~2; } } /* Sets rowLower array */ void CoinModel::setRowLower(int numberRows, const double *rowLower) { fillColumns(numberRows, true, true); for (int i = 0; i < numberRows; i++) { rowLower_[i] = rowLower[i]; rowType_[i] &= ~1; } } /* Sets rowUpper array */ void CoinModel::setRowUpper(int numberRows, const double *rowUpper) { fillColumns(numberRows, true, true); for (int i = 0; i < numberRows; i++) { rowUpper_[i] = rowUpper[i]; rowType_[i] &= ~2; } } // Pass in CoinPackedMatrix (and switch off element updates) void CoinModel::passInMatrix(const CoinPackedMatrix &matrix) { type_ = 3; packedMatrix_ = new CoinPackedMatrix(matrix); } // Convert elements to CoinPackedMatrix (and switch off element updates) int CoinModel::convertMatrix() { int numberErrors = 0; if (type_ != 3) { // If strings then do copies if (string_.numberItems()) { numberErrors = createArrays(rowLower_, rowUpper_, columnLower_, columnUpper_, objective_, integerType_, associated_); } CoinPackedMatrix matrix; createPackedMatrix(matrix, associated_); packedMatrix_ = new CoinPackedMatrix(matrix); type_ = 3; } return numberErrors; } // Aborts with message about packedMatrix void CoinModel::badType() const { fprintf(stderr, "******** operation not allowed when in block mode ****\n"); abort(); } //############################################################################# // Methods to input a problem //############################################################################# /** A function to convert from the lb/ub style of constraint definition to the sense/rhs/range style */ void convertBoundToSense(const double lower, const double upper, char &sense, double &right, double &range) { double inf = 1.0e-30; range = 0.0; if (lower > -inf) { if (upper < inf) { right = upper; if (upper == lower) { sense = 'E'; } else { sense = 'R'; range = upper - lower; } } else { sense = 'G'; right = lower; } } else { if (upper < inf) { sense = 'L'; right = upper; } else { sense = 'N'; right = 0.0; } } } //----------------------------------------------------------------------------- /** A function to convert from the sense/rhs/range style of constraint definition to the lb/ub style */ void convertSenseToBound(const char sense, const double right, const double range, double &lower, double &upper) { double inf = COIN_DBL_MAX; switch (sense) { case 'E': lower = upper = right; break; case 'L': lower = -inf; upper = right; break; case 'G': lower = right; upper = inf; break; case 'R': lower = right - range; upper = right; break; case 'N': lower = -inf; upper = inf; break; } } void CoinModel::loadBlock(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { passInMatrix(matrix); int numberRows = matrix.getNumRows(); int numberColumns = matrix.getNumCols(); setObjective(numberColumns, obj); setRowLower(numberRows, rowlb); setRowUpper(numberRows, rowub); setColumnLower(numberColumns, collb); setColumnUpper(numberColumns, colub); } //----------------------------------------------------------------------------- void CoinModel::loadBlock(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { // If any of Rhs NULLs then create arrays int numrows = matrix.getNumRows(); const char *rowsenUse = rowsen; if (!rowsen) { char *rowsen = new char[numrows]; for (int i = 0; i < numrows; i++) rowsen[i] = 'G'; rowsenUse = rowsen; } const double *rowrhsUse = rowrhs; if (!rowrhs) { double *rowrhs = new double[numrows]; for (int i = 0; i < numrows; i++) rowrhs[i] = 0.0; rowrhsUse = rowrhs; } const double *rowrngUse = rowrng; if (!rowrng) { double *rowrng = new double[numrows]; for (int i = 0; i < numrows; i++) rowrng[i] = 0.0; rowrngUse = rowrng; } double *rowlb = new double[numrows]; double *rowub = new double[numrows]; for (int i = numrows - 1; i >= 0; --i) { convertSenseToBound(rowsenUse[i], rowrhsUse[i], rowrngUse[i], rowlb[i], rowub[i]); } if (rowsen != rowsenUse) delete[] rowsenUse; if (rowrhs != rowrhsUse) delete[] rowrhsUse; if (rowrng != rowrngUse) delete[] rowrngUse; loadBlock(matrix, collb, colub, obj, rowlb, rowub); delete[] rowlb; delete[] rowub; } //----------------------------------------------------------------------------- void CoinModel::loadBlock(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { CoinBigIndex numberElements = start[numcols]; int *length = new int[numcols]; for (int i = 0; i < numcols; i++) length[i] = static_cast< int >(start[i + 1] - start[i]); CoinPackedMatrix matrix(true, numrows, numcols, numberElements, value, index, start, length, 0.0, 0.0); loadBlock(matrix, collb, colub, obj, rowlb, rowub); delete[] length; } //----------------------------------------------------------------------------- void CoinModel::loadBlock(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { // If any of Rhs NULLs then create arrays const char *rowsenUse = rowsen; if (!rowsen) { char *rowsen = new char[numrows]; for (int i = 0; i < numrows; i++) rowsen[i] = 'G'; rowsenUse = rowsen; } const double *rowrhsUse = rowrhs; if (!rowrhs) { double *rowrhs = new double[numrows]; for (int i = 0; i < numrows; i++) rowrhs[i] = 0.0; rowrhsUse = rowrhs; } const double *rowrngUse = rowrng; if (!rowrng) { double *rowrng = new double[numrows]; for (int i = 0; i < numrows; i++) rowrng[i] = 0.0; rowrngUse = rowrng; } double *rowlb = new double[numrows]; double *rowub = new double[numrows]; for (int i = numrows - 1; i >= 0; --i) { convertSenseToBound(rowsenUse[i], rowrhsUse[i], rowrngUse[i], rowlb[i], rowub[i]); } if (rowsen != rowsenUse) delete[] rowsenUse; if (rowrhs != rowrhsUse) delete[] rowrhsUse; if (rowrng != rowrngUse) delete[] rowrngUse; CoinBigIndex numberElements = start[numcols]; int *length = new int[numcols]; for (int i = 0; i < numcols; i++) length[i] = static_cast< int >(start[i + 1] - start[i]); CoinPackedMatrix matrix(true, numrows, numcols, numberElements, value, index, start, length, 0.0, 0.0); loadBlock(matrix, collb, colub, obj, rowlb, rowub); delete[] length; delete[] rowlb; delete[] rowub; } /* Returns which parts of model are set 1 - matrix 2 - rhs 4 - row names 8 - column bounds and/or objective 16 - column names 32 - integer types */ int CoinModel::whatIsSet() const { int type = (numberElements_) ? 1 : 0; bool defaultValues = true; if (rowLower_) { for (int i = 0; i < numberRows_; i++) { if (rowLower_[i] != -COIN_DBL_MAX) { defaultValues = false; break; } if (rowUpper_[i] != COIN_DBL_MAX) { defaultValues = false; break; } } } if (!defaultValues) type |= 2; if (rowName_.numberItems()) type |= 4; defaultValues = true; if (columnLower_) { for (int i = 0; i < numberColumns_; i++) { if (objective_[i] != 0.0) { defaultValues = false; break; } if (columnLower_[i] != 0.0) { defaultValues = false; break; } if (columnUpper_[i] != COIN_DBL_MAX) { defaultValues = false; break; } } } if (!defaultValues) type |= 8; if (columnName_.numberItems()) type |= 16; defaultValues = true; if (integerType_) { for (int i = 0; i < numberColumns_; i++) { if (integerType_[i]) { defaultValues = false; break; } } } if (!defaultValues) type |= 32; return type; } // For decomposition set original row and column indices void CoinModel::setOriginalIndices(const int *row, const int *column) { if (!rowType_) rowType_ = new int[numberRows_]; memcpy(rowType_, row, numberRows_ * sizeof(int)); if (!columnType_) columnType_ = new int[numberColumns_]; memcpy(columnType_, column, numberColumns_ * sizeof(int)); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinFinite.hpp0000644000175200017520000000246113414454441016322 0ustar coincoin/* $Id: CoinFinite.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /* Defines COIN_DBL_MAX and relatives and provides CoinFinite and CoinIsnan. */ #ifndef CoinFinite_H #define CoinFinite_H #include //============================================================================= // Smallest positive double value and Plus infinity (double and int) #if 1 const double COIN_DBL_MIN = (std::numeric_limits< double >::min)(); const double COIN_DBL_MAX = (std::numeric_limits< double >::max)(); const int COIN_INT_MAX = (std::numeric_limits< int >::max)(); const double COIN_INT_MAX_AS_DOUBLE = (std::numeric_limits< int >::max)(); #else #define COIN_DBL_MIN (std::numeric_limits< double >::min()) #define COIN_DBL_MAX (std::numeric_limits< double >::max()) #define COIN_INT_MAX (std::numeric_limits< int >::max()) #define COIN_INT_MAX_AS_DOUBLE (std::numeric_limits< int >::max()) #endif /** checks if a double value is finite (not infinity and not NaN) */ extern bool CoinFinite(double val); /** checks if a double value is not a number */ extern bool CoinIsnan(double val); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinDenseFactorization.hpp0000644000175200017520000003225713414454441020705 0ustar coincoin/* $Id: CoinDenseFactorization.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2008, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /* Authors John Forrest */ #ifndef CoinDenseFactorization_H #define CoinDenseFactorization_H #include #include #include #include "CoinTypes.hpp" #include "CoinIndexedVector.hpp" #include "CoinFactorization.hpp" #if COIN_FACTORIZATION_DENSE_CODE == 2 #undef COIN_FACTORIZATION_DENSE_CODE #endif class CoinPackedMatrix; /// Abstract base class which also has some scalars so can be used from Dense or Simp class CoinOtherFactorization { public: /**@name Constructors and destructor and copy */ //@{ /// Default constructor CoinOtherFactorization(); /// Copy constructor CoinOtherFactorization(const CoinOtherFactorization &other); /// Destructor virtual ~CoinOtherFactorization(); /// = copy CoinOtherFactorization &operator=(const CoinOtherFactorization &other); /// Clone virtual CoinOtherFactorization *clone() const = 0; //@} /**@name general stuff such as status */ //@{ /// Returns status inline int status() const { return status_; } /// Sets status inline void setStatus(int value) { status_ = value; } /// Returns number of pivots since factorization inline int pivots() const { return numberPivots_; } /// Sets number of pivots since factorization inline void setPivots(int value) { numberPivots_ = value; } /// Set number of Rows after factorization inline void setNumberRows(int value) { numberRows_ = value; } /// Number of Rows after factorization inline int numberRows() const { return numberRows_; } /// Total number of columns in factorization inline int numberColumns() const { return numberColumns_; } /// Number of good columns in factorization inline int numberGoodColumns() const { return numberGoodU_; } /// Allows change of pivot accuracy check 1.0 == none >1.0 relaxed inline void relaxAccuracyCheck(double value) { relaxCheck_ = value; } inline double getAccuracyCheck() const { return relaxCheck_; } /// Maximum number of pivots between factorizations inline int maximumPivots() const { return maximumPivots_; } /// Set maximum pivots virtual void maximumPivots(int value); /// Pivot tolerance inline double pivotTolerance() const { return pivotTolerance_; } void pivotTolerance(double value); /// Zero tolerance inline double zeroTolerance() const { return zeroTolerance_; } void zeroTolerance(double value); #ifndef COIN_FAST_CODE /// Whether slack value is +1 or -1 inline double slackValue() const { return slackValue_; } void slackValue(double value); #endif /// Returns array to put basis elements in virtual CoinFactorizationDouble *elements() const; /// Returns pivot row virtual int *pivotRow() const; /// Returns work area virtual CoinFactorizationDouble *workArea() const; /// Returns int work area virtual int *intWorkArea() const; /// Number of entries in each row virtual int *numberInRow() const; /// Number of entries in each column virtual int *numberInColumn() const; /// Returns array to put basis starts in virtual int *starts() const; /// Returns permute back virtual int *permuteBack() const; /** Get solve mode e.g. 0 C++ code, 1 Lapack, 2 choose If 4 set then values pass if 8 set then has iterated */ inline int solveMode() const { return solveMode_; } /** Set solve mode e.g. 0 C++ code, 1 Lapack, 2 choose If 4 set then values pass if 8 set then has iterated */ inline void setSolveMode(int value) { solveMode_ = value; } /// Returns true if wants tableauColumn in replaceColumn virtual bool wantsTableauColumn() const; /** Useful information for factorization 0 - iteration number whereFrom is 0 for factorize and 1 for replaceColumn */ virtual void setUsefulInformation(const int *info, int whereFrom); /// Get rid of all memory virtual void clearArrays() {} //@} /**@name virtual general stuff such as permutation */ //@{ /// Returns array to put basis indices in virtual int *indices() const = 0; /// Returns permute in virtual int *permute() const = 0; /// Total number of elements in factorization virtual int numberElements() const = 0; //@} /**@name Do factorization - public */ //@{ /// Gets space for a factorization virtual void getAreas(int numberRows, int numberColumns, int maximumL, int maximumU) = 0; /// PreProcesses column ordered copy of basis virtual void preProcess() = 0; /** Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use numberGoodColumns and redo */ virtual int factor() = 0; /// Does post processing on valid factorization - putting variables on correct rows virtual void postProcess(const int *sequence, int *pivotVariable) = 0; /// Makes a non-singular basis by replacing variables virtual void makeNonSingular(int *sequence, int numberColumns) = 0; //@} /**@name rank one updates which do exist */ //@{ /** Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModifying is true will do all accuracy checks before modifying factorization. Whether to set this depends on speed considerations. You could just do this on first iteration after factorization and thereafter re-factorize partial update already in U */ virtual int replaceColumn(CoinIndexedVector *regionSparse, int pivotRow, double pivotCheck, bool checkBeforeModifying = false, double acceptablePivot = 1.0e-8) = 0; //@} /**@name various uses of factorization (return code number elements) which user may want to know about */ //@{ /** Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no room regionSparse starts as zero and is zero at end. Note - if regionSparse2 packed on input - will be packed on output */ virtual int updateColumnFT(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute = false) = 0; /** This version has same effect as above with FTUpdate==false so number returned is always >=0 */ virtual int updateColumn(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute = false) const = 0; /// does FTRAN on two columns virtual int updateTwoColumnsFT(CoinIndexedVector *regionSparse1, CoinIndexedVector *regionSparse2, CoinIndexedVector *regionSparse3, bool noPermute = false) = 0; /** Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output */ virtual int updateColumnTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) const = 0; //@} ////////////////// data ////////////////// protected: /**@name data */ //@{ /// Pivot tolerance double pivotTolerance_; /// Zero tolerance double zeroTolerance_; #ifndef COIN_FAST_CODE /// Whether slack value is +1 or -1 double slackValue_; #else #ifndef slackValue_ #define slackValue_ -1.0 #endif #endif /// Relax check on accuracy in replaceColumn double relaxCheck_; /// Number of elements after factorization int factorElements_; /// Number of Rows in factorization int numberRows_; /// Number of Columns in factorization int numberColumns_; /// Number factorized in U (not row singletons) int numberGoodU_; /// Maximum number of pivots before factorization int maximumPivots_; /// Number pivots since last factorization int numberPivots_; /// Status of factorization int status_; /// Maximum rows ever (i.e. use to copy arrays etc) int maximumRows_; /// Maximum length of iterating area int maximumSpace_; /// Pivot row int *pivotRow_; /** Elements of factorization and updates length is maxR*maxR+maxSpace will always be long enough so can have nR*nR ints in maxSpace */ CoinFactorizationDouble *elements_; /// Work area of numberRows_ CoinFactorizationDouble *workArea_; /** Solve mode e.g. 0 C++ code, 1 Lapack, 2 choose If 4 set then values pass if 8 set then has iterated */ int solveMode_; //@} }; /** This deals with Factorization and Updates This is a simple dense version so other people can write a better one I am assuming that 32 bits is enough for number of rows or columns, but CoinBigIndex may be redefined to get 64 bits. */ class CoinDenseFactorization : public CoinOtherFactorization { friend void CoinDenseFactorizationUnitTest(const std::string &mpsDir); public: /**@name Constructors and destructor and copy */ //@{ /// Default constructor CoinDenseFactorization(); /// Copy constructor CoinDenseFactorization(const CoinDenseFactorization &other); /// Destructor virtual ~CoinDenseFactorization(); /// = copy CoinDenseFactorization &operator=(const CoinDenseFactorization &other); /// Clone virtual CoinOtherFactorization *clone() const; //@} /**@name Do factorization - public */ //@{ /// Gets space for a factorization virtual void getAreas(int numberRows, int numberColumns, int maximumL, int maximumU); /// PreProcesses column ordered copy of basis virtual void preProcess(); /** Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use numberGoodColumns and redo */ virtual int factor(); /// Does post processing on valid factorization - putting variables on correct rows virtual void postProcess(const int *sequence, int *pivotVariable); /// Makes a non-singular basis by replacing variables virtual void makeNonSingular(int *sequence, int numberColumns); //@} /**@name general stuff such as number of elements */ //@{ /// Total number of elements in factorization virtual inline int numberElements() const { return numberRows_ * (numberColumns_ + numberPivots_); } /// Returns maximum absolute value in factorization double maximumCoefficient() const; //@} /**@name rank one updates which do exist */ //@{ /** Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModifying is true will do all accuracy checks before modifying factorization. Whether to set this depends on speed considerations. You could just do this on first iteration after factorization and thereafter re-factorize partial update already in U */ virtual int replaceColumn(CoinIndexedVector *regionSparse, int pivotRow, double pivotCheck, bool checkBeforeModifying = false, double acceptablePivot = 1.0e-8); //@} /**@name various uses of factorization (return code number elements) which user may want to know about */ //@{ /** Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no room regionSparse starts as zero and is zero at end. Note - if regionSparse2 packed on input - will be packed on output */ virtual inline int updateColumnFT(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool = false) { return updateColumn(regionSparse, regionSparse2); } /** This version has same effect as above with FTUpdate==false so number returned is always >=0 */ virtual int updateColumn(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute = false) const; /// does FTRAN on two columns virtual int updateTwoColumnsFT(CoinIndexedVector *regionSparse1, CoinIndexedVector *regionSparse2, CoinIndexedVector *regionSparse3, bool noPermute = false); /** Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output */ virtual int updateColumnTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) const; //@} /// *** Below this user may not want to know about /**@name various uses of factorization which user may not want to know about (left over from my LP code) */ //@{ /// Get rid of all memory inline void clearArrays() { gutsOfDestructor(); } /// Returns array to put basis indices in virtual inline int *indices() const { return reinterpret_cast< int * >(elements_ + numberRows_ * numberRows_); } /// Returns permute in virtual inline int *permute() const { return NULL; /*pivotRow_*/ ; } //@} /// The real work of desstructor void gutsOfDestructor(); /// The real work of constructor void gutsOfInitialize(); /// The real work of copy void gutsOfCopy(const CoinDenseFactorization &other); //@} protected: /** Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular */ int checkPivot(double saveFromU, double oldPivot) const; ////////////////// data ////////////////// protected: /**@name data */ //@{ //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinMessage.cpp0000644000175200017520000001115413414454441016462 0ustar coincoin/* $Id: CoinMessage.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "CoinPragma.hpp" #include "CoinMessage.hpp" #include "CoinError.hpp" typedef struct { COIN_Message internalNumber; int externalNumber; // or continuation char detail; const char *message; } Coin_message; static Coin_message us_english[] = { { COIN_MPS_LINE, 1, 1, "At line %d %s" }, { COIN_MPS_STATS, 2, 1, "Problem %s has %d rows, %d columns and %d elements" }, { COIN_MPS_ILLEGAL, 3001, 0, "Illegal value for %s of %g" }, { COIN_MPS_BADIMAGE, 3002, 0, "Bad image at line %d < %s >" }, { COIN_MPS_DUPOBJ, 3003, 0, "Duplicate objective at line %d < %s >" }, { COIN_MPS_DUPROW, 3004, 0, "Duplicate row %s at line %d < %s >" }, { COIN_MPS_NOMATCHROW, 3005, 0, "No match for row %s at line %d < %s >" }, { COIN_MPS_NOMATCHCOL, 3006, 0, "No match for column %s at line %d < %s >" }, { COIN_MPS_FILE, 6001, 0, "Unable to open mps input file %s" }, { COIN_MPS_BADFILE1, 6002, 0, "Unknown image %s at line %d of file %s" }, { COIN_MPS_BADFILE2, 6003, 0, "Consider the possibility of a compressed file\ which %s is unable to read" }, { COIN_MPS_EOF, 6004, 0, "EOF on file %s" }, { COIN_MPS_RETURNING, 6005, 0, "Returning as too many errors" }, { COIN_MPS_CHANGED, 3008, 1, "Generated %s names had duplicates - %d changed" }, { COIN_SOLVER_MPS, 8, 1, "%s read with %d errors" }, { COIN_PRESOLVE_COLINFEAS, 501, 2, "Problem is infeasible due to column %d, %.16g %.16g" }, { COIN_PRESOLVE_ROWINFEAS, 502, 2, "Problem is infeasible due to row %d, %.16g %.16g" }, { COIN_PRESOLVE_COLUMNBOUNDA, 503, 2, "Problem looks unbounded above due to column %d, %g %g" }, { COIN_PRESOLVE_COLUMNBOUNDB, 504, 2, "Problem looks unbounded below due to column %d, %g %g" }, { COIN_PRESOLVE_NONOPTIMAL, 505, 1, "Presolved problem not optimal, resolve after postsolve" }, { COIN_PRESOLVE_STATS, 506, 1, "Presolve %d (%d) rows, %d (%d) columns and %d (%d) elements" }, { COIN_PRESOLVE_INFEAS, 507, 1, "Presolve determined that the problem was infeasible with tolerance of %g" }, { COIN_PRESOLVE_UNBOUND, 508, 1, "Presolve thinks problem is unbounded" }, { COIN_PRESOLVE_INFEASUNBOUND, 509, 1, "Presolve thinks problem is infeasible AND unbounded???" }, { COIN_PRESOLVE_INTEGERMODS, 510, 1, "Presolve is modifying %d integer bounds and re-presolving" }, { COIN_PRESOLVE_POSTSOLVE, 511, 1, "After Postsolve, objective %g, infeasibilities - dual %g (%d), primal %g (%d)" }, { COIN_PRESOLVE_NEEDS_CLEANING, 512, 1, "Presolved model was optimal, full model needs cleaning up" }, { COIN_PRESOLVE_PASS, 513, 3, "%d rows dropped after presolve pass %d" }, #if PRESOLVE_DEBUG { COIN_PRESOLDBG_FIRSTCHECK, 514, 3, "First occurrence of %s checks." }, { COIN_PRESOLDBG_RCOSTACC, 515, 3, "rcost[%d] = %g should be %g |diff| = %g." }, { COIN_PRESOLDBG_RCOSTSTAT, 516, 3, "rcost[%d] = %g inconsistent with status %s (%s)." }, { COIN_PRESOLDBG_STATSB, 517, 3, "status[%d] = %s rcost = %g lb = %g val = %g ub = %g." }, { COIN_PRESOLDBG_DUALSTAT, 518, 3, "dual[%d] = %g inconsistent with status %s (%s)." }, #endif { COIN_GENERAL_INFO, 9, 1, "%s" }, { COIN_GENERAL_INFO2, 10, 2, "%s" }, { COIN_GENERAL_WARNING, 3007, 1, "%s" }, { COIN_DUMMY_END, 999999, 0, "" } }; // **** aiutami! static Coin_message italian[] = { { COIN_MPS_LINE, 1, 1, "al numero %d %s" }, { COIN_MPS_STATS, 2, 1, "matrice %s ha %d file, %d colonne and %d elementi (diverso da zero)" }, { COIN_DUMMY_END, 999999, 0, "" } }; /* Constructor */ CoinMessage::CoinMessage(Language language) : CoinMessages(sizeof(us_english) / sizeof(Coin_message)) { language_ = language; strcpy(source_, "Coin"); class_ = 2; // Coin Coin_message *message = us_english; while (message->internalNumber != COIN_DUMMY_END) { CoinOneMessage oneMessage(message->externalNumber, message->detail, message->message); addMessage(message->internalNumber, oneMessage); message++; } // Put into compact form toCompact(); // now override any language ones switch (language) { case it: message = italian; break; default: message = NULL; break; } // replace if any found if (message) { while (message->internalNumber != COIN_DUMMY_END) { replaceMessage(message->internalNumber, message->message); message++; } } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinFactorization4.cpp0000644000175200017520000041433613414454441020007 0ustar coincoin/* $Id: CoinFactorization4.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "CoinUtilsConfig.h" #include #include #include "CoinFactorization.hpp" #include "CoinIndexedVector.hpp" #include "CoinHelperFunctions.hpp" #include "CoinTime.hpp" #include #include #if COIN_FACTORIZATION_DENSE_CODE == 1 // using simple lapack interface extern "C" { /** LAPACK Fortran subroutine DGETRS. */ void F77_FUNC(dgetrs, DGETRS)(char *trans, cipfint *n, cipfint *nrhs, const double *A, cipfint *ldA, cipfint *ipiv, double *B, cipfint *ldB, ipfint *info, int trans_len); } #elif COIN_FACTORIZATION_DENSE_CODE == 2 // C interface enum CBLAS_ORDER { CblasRowMajor = 101, CblasColMajor = 102 }; enum CBLAS_TRANSPOSE { CblasNoTrans = 111, CblasTrans = 112 }; extern "C" { int clapack_dgetrs(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE Trans, const int N, const int NRHS, const double *A, const int lda, const int *ipiv, double *B, const int ldb); } #elif COIN_FACTORIZATION_DENSE_CODE == 3 // Intel compiler #include "mkl_lapacke.h" #endif // For semi-sparse #define BITS_PER_CHECK 8 #define CHECK_SHIFT 3 typedef unsigned char CoinCheckZero; //:class CoinFactorization. Deals with Factorization and Updates // getRowSpaceIterate. Gets space for one Row with given length //may have to do compression (returns true) //also moves existing vector bool CoinFactorization::getRowSpaceIterate(int iRow, int extraNeeded) { const int *numberInRow = numberInRow_.array(); int number = numberInRow[iRow]; int *COIN_RESTRICT startRow = startRowU_.array(); int *COIN_RESTRICT indexColumn = indexColumnU_.array(); int *COIN_RESTRICT convertRowToColumn = convertRowToColumnU_.array(); int space = lengthAreaU_ - startRow[maximumRowsExtra_]; int *COIN_RESTRICT nextRow = nextRow_.array(); int *COIN_RESTRICT lastRow = lastRow_.array(); if (space < extraNeeded + number + 2) { //compression int iRow = nextRow[maximumRowsExtra_]; int put = 0; while (iRow != maximumRowsExtra_) { //move int get = startRow[iRow]; int getEnd = startRow[iRow] + numberInRow[iRow]; startRow[iRow] = put; int i; for (i = get; i < getEnd; i++) { indexColumn[put] = indexColumn[i]; convertRowToColumn[put] = convertRowToColumn[i]; put++; } iRow = nextRow[iRow]; } /* endwhile */ numberCompressions_++; startRow[maximumRowsExtra_] = put; space = lengthAreaU_ - put; if (space < extraNeeded + number + 2) { //need more space //if we can allocate bigger then do so and copy //if not then return so code can start again status_ = -99; return false; } } int put = startRow[maximumRowsExtra_]; int next = nextRow[iRow]; int last = lastRow[iRow]; //out nextRow[last] = next; lastRow[next] = last; //in at end last = lastRow[maximumRowsExtra_]; nextRow[last] = iRow; lastRow[maximumRowsExtra_] = iRow; lastRow[iRow] = last; nextRow[iRow] = maximumRowsExtra_; //move int get = startRow[iRow]; int *indexColumnU = indexColumnU_.array(); startRow[iRow] = put; while (number) { number--; indexColumnU[put] = indexColumnU[get]; convertRowToColumn[put] = convertRowToColumn[get]; put++; get++; } /* endwhile */ //add four for luck startRow[maximumRowsExtra_] = put + extraNeeded + 4; return true; } // getColumnSpaceIterateR. Gets space for one extra R element in Column //may have to do compression (returns true) //also moves existing vector bool CoinFactorization::getColumnSpaceIterateR(int iColumn, double value, int iRow) { CoinFactorizationDouble *COIN_RESTRICT elementR = elementR_ + lengthAreaR_; int *COIN_RESTRICT indexRowR = indexRowR_ + lengthAreaR_; int *COIN_RESTRICT startR = startColumnR_.array() + maximumPivots_ + 1; int *COIN_RESTRICT numberInColumnPlus = numberInColumnPlus_.array(); int number = numberInColumnPlus[iColumn]; //*** modify so sees if can go in //see if it can go in at end int *COIN_RESTRICT nextColumn = nextColumn_.array(); int *COIN_RESTRICT lastColumn = lastColumn_.array(); if (lengthAreaR_ - startR[maximumColumnsExtra_] < number + 1) { //compression int jColumn = nextColumn[maximumColumnsExtra_]; int put = 0; while (jColumn != maximumColumnsExtra_) { //move int get; int getEnd; get = startR[jColumn]; getEnd = get + numberInColumnPlus[jColumn]; startR[jColumn] = put; int i; for (i = get; i < getEnd; i++) { indexRowR[put] = indexRowR[i]; elementR[put] = elementR[i]; put++; } jColumn = nextColumn[jColumn]; } numberCompressions_++; startR[maximumColumnsExtra_] = put; } // Still may not be room (as iColumn was still in) if (lengthAreaR_ - startR[maximumColumnsExtra_] < number + 1) return false; int next = nextColumn[iColumn]; int last = lastColumn[iColumn]; //out nextColumn[last] = next; lastColumn[next] = last; int put = startR[maximumColumnsExtra_]; //in at end last = lastColumn[maximumColumnsExtra_]; nextColumn[last] = iColumn; lastColumn[maximumColumnsExtra_] = iColumn; lastColumn[iColumn] = last; nextColumn[iColumn] = maximumColumnsExtra_; //move int get = startR[iColumn]; startR[iColumn] = put; int i = 0; for (i = 0; i < number; i++) { elementR[put] = elementR[get]; indexRowR[put++] = indexRowR[get++]; } //insert elementR[put] = value; indexRowR[put++] = iRow; numberInColumnPlus[iColumn]++; //add 4 for luck startR[maximumColumnsExtra_] = CoinMin(static_cast< int >(put + 4), lengthAreaR_); return true; } int CoinFactorization::checkPivot(double saveFromU, double oldPivot) const { int status; #define ALLOW_SMALL_PIVOTS #ifdef ALLOW_SMALL_PIVOTS #define SMALL_PIVOT 1.0e-9 #else #define SMALL_PIVOT 1.0e-8 #endif if (fabs(saveFromU) > SMALL_PIVOT) { double checkTolerance; if (numberRowsExtra_ < numberRows_ + 2) { checkTolerance = 1.0e-5; } else if (numberRowsExtra_ < numberRows_ + 10) { checkTolerance = 1.0e-6; } else if (numberRowsExtra_ < numberRows_ + 50) { checkTolerance = 1.0e-8; } else { checkTolerance = 1.0e-10; } checkTolerance *= relaxCheck_; if (fabs(1.0 - fabs(saveFromU / oldPivot)) < checkTolerance) { status = 0; } else { #if COIN_DEBUG std::cout << "inaccurate pivot " << oldPivot << " " << saveFromU << std::endl; #endif if (fabs(fabs(oldPivot) - fabs(saveFromU)) < 1.0e-12 || fabs(1.0 - fabs(saveFromU / oldPivot)) < 1.0e-8) { status = 1; } else { status = 2; } } } else { //error if (fabs(1.0 - fabs(saveFromU / oldPivot)) < 1.0e-10) { status = 0; } else { status = 2; #if COIN_DEBUG std::cout << "inaccurate pivot " << saveFromU / oldPivot << " " << saveFromU << std::endl; #endif } } //if (status==2) //printf("status %d\n",status); return status; } #ifdef CLP_FACTORIZATION_INSTRUMENT extern double externalTimeStart; extern double timeInFactorize; extern double timeInUpdate; extern double timeInFactorizeFake; extern double timeInUpdateFake1; extern double timeInUpdateFake2; extern double timeInUpdateTranspose; extern double timeInUpdateFT; extern double timeInUpdateTwoFT; extern double timeInReplace; extern int numberUpdate; extern int numberUpdateTranspose; extern int numberUpdateFT; extern int numberUpdateTwoFT; extern int numberReplace; extern int currentLengthR; extern int currentLengthU; extern int currentTakeoutU; extern double averageLengthR; extern double averageLengthL; extern double averageLengthU; extern double scaledLengthDense; extern double scaledLengthDenseSquared; extern double scaledLengthL; extern double scaledLengthR; extern double scaledLengthU; extern int startLengthU; extern int endLengthU; #endif // replaceColumn. Replaces one Column to basis // returns 0=OK, 1=Probably OK, 2=singular, 3=no room //partial update already in U int CoinFactorization::replaceColumn(CoinIndexedVector *regionSparse, int pivotRow, double pivotCheck, bool checkBeforeModifying, double) { #ifdef CLP_FACTORIZATION_INSTRUMENT double startTimeX = CoinCpuTime(); #endif assert(numberU_ <= numberRowsExtra_); int *COIN_RESTRICT startColumnU = startColumnU_.array(); int *COIN_RESTRICT startColumn; int *COIN_RESTRICT indexRow; CoinFactorizationDouble *COIN_RESTRICT element; //return at once if too many iterations if (numberColumnsExtra_ >= maximumColumnsExtra_) { return 5; } if (lengthAreaU_ < startColumnU[maximumColumnsExtra_]) { return 3; } int *COIN_RESTRICT numberInRow = numberInRow_.array(); int *COIN_RESTRICT numberInColumn = numberInColumn_.array(); int *COIN_RESTRICT numberInColumnPlus = numberInColumnPlus_.array(); int realPivotRow; realPivotRow = pivotColumn_.array()[pivotRow]; //zeroed out region double *COIN_RESTRICT region = regionSparse->denseVector(); element = elementU_.array(); //take out old pivot column // If we have done no pivots then always check before modification if (!numberPivots_) checkBeforeModifying = true; totalElements_ -= numberInColumn[realPivotRow]; CoinFactorizationDouble *COIN_RESTRICT pivotRegion = pivotRegion_.array(); CoinFactorizationDouble oldPivot = pivotRegion[realPivotRow]; // for accuracy check pivotCheck = pivotCheck / oldPivot; #if COIN_DEBUG > 1 int checkNumber = 1000000; //if (numberL_) checkNumber=-1; if (numberR_ >= checkNumber) { printf("pivot row %d, check %g - alpha region:\n", realPivotRow, pivotCheck); /*int i; for (i=0;igetIndices(); int *COIN_RESTRICT startRow = startRowU_.array(); int start = 0; int end = 0; #if COIN_DEBUG > 1 if (numberR_ >= checkNumber) printf("Before btranu\n"); #endif #if COIN_ONE_ETA_COPY if (convertRowToColumn) { #endif start = startRow[realPivotRow]; end = start + numberInRow[realPivotRow]; int smallestIndex = numberRowsExtra_; if (!checkBeforeModifying) { for (int i = start; i < end; i++) { int iColumn = indexColumn[i]; assert(iColumn < numberRowsExtra_); smallestIndex = CoinMin(smallestIndex, iColumn); int j = convertRowToColumn[i]; region[iColumn] = element[j]; #if COIN_DEBUG > 1 if (numberR_ >= checkNumber) printf("%d %g\n", iColumn, region[iColumn]); #endif element[j] = 0.0; regionIndex[numberNonZero++] = iColumn; } } else { for (int i = start; i < end; i++) { int iColumn = indexColumn[i]; smallestIndex = CoinMin(smallestIndex, iColumn); int j = convertRowToColumn[i]; region[iColumn] = element[j]; #if COIN_DEBUG > 1 if (numberR_ >= checkNumber) printf("%d %g\n", iColumn, region[iColumn]); #endif regionIndex[numberNonZero++] = iColumn; } } //do BTRAN - finding first one to use regionSparse->setNumElements(numberNonZero); updateColumnTransposeU(regionSparse, smallestIndex); #if COIN_ONE_ETA_COPY } else { // use R to save where elements are int *saveWhere = NULL; if (checkBeforeModifying) { if (lengthR_ + maximumRowsExtra_ + 1 >= lengthAreaR_) { //not enough room return 3; } saveWhere = indexRowR_ + lengthR_; } replaceColumnU(regionSparse, saveWhere, realPivotRow); } #endif numberNonZero = regionSparse->getNumElements(); CoinFactorizationDouble saveFromU = 0.0; int startU = startColumnU[numberColumnsExtra_]; int *COIN_RESTRICT indexU = &indexRowU_.array()[startU]; CoinFactorizationDouble *COIN_RESTRICT elementU = &elementU_.array()[startU]; // Do accuracy test here if caller is paranoid if (checkBeforeModifying) { double tolerance = zeroTolerance_; int number = numberInColumn[numberColumnsExtra_]; for (int i = 0; i < number; i++) { int iRow = indexU[i]; //if (numberCompressions_==99&&lengthU_==278) //printf("row %d saveFromU %g element %g region %g\n", // iRow,saveFromU,elementU[i],region[iRow]); if (fabs(elementU[i]) > tolerance) { if (iRow != realPivotRow) { saveFromU -= elementU[i] * region[iRow]; } else { saveFromU += elementU[i]; } } } //check accuracy int status = checkPivot(saveFromU, pivotCheck); if (status) { // restore some things pivotRegion[realPivotRow] = oldPivot; number = saveEnd - startColumnU[realPivotRow]; totalElements_ += number; numberInColumn[realPivotRow] = number; regionSparse->clear(); return status; #if COIN_ONE_ETA_COPY } else if (convertRowToColumn) { #else } else { #endif // do what we would have done by now for (int i = start; i < end; i++) { int j = convertRowToColumn[i]; element[j] = 0.0; } #if COIN_ONE_ETA_COPY } else { // delete elements // used R to save where elements are int *saveWhere = indexRowR_ + lengthR_; CoinFactorizationDouble *element = elementU_.array(); int n = saveWhere[0]; for (int i = 0; i < n; i++) { int where = saveWhere[i + 1]; element[where] = 0.0; } //printf("deleting els\n"); #endif } } // Now zero out column of U //take out old pivot column for (int i = startColumnU[realPivotRow]; i < saveEnd; i++) { element[i] = 0.0; } //zero out pivot Row (before or after?) //add to R startColumn = startColumnR_.array(); indexRow = indexRowR_; element = elementR_; int l = lengthR_; int number = numberR_; startColumn[number] = l; //for luck and first time number++; startColumn[number] = l + numberNonZero; numberR_ = number; lengthR_ = l + numberNonZero; totalElements_ += numberNonZero; if (lengthR_ >= lengthAreaR_) { //not enough room regionSparse->clear(); return 3; } #if COIN_DEBUG > 1 if (numberR_ >= checkNumber) printf("After btranu\n"); #endif for (int i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; #if COIN_DEBUG > 1 if (numberR_ >= checkNumber) printf("%d %g\n", iRow, region[iRow]); #endif indexRow[l] = iRow; element[l] = region[iRow]; l++; } int *nextRow; int *lastRow; int next; int last; #if COIN_ONE_ETA_COPY if (convertRowToColumn) { #endif //take out row nextRow = nextRow_.array(); lastRow = lastRow_.array(); next = nextRow[realPivotRow]; last = lastRow[realPivotRow]; nextRow[last] = next; lastRow[next] = last; numberInRow[realPivotRow] = 0; #if COIN_DEBUG nextRow[realPivotRow] = 777777; lastRow[realPivotRow] = 777777; #endif #if COIN_ONE_ETA_COPY } #endif //do permute permute_.array()[numberRowsExtra_] = realPivotRow; // and other way permuteBack_.array()[realPivotRow] = numberRowsExtra_; permuteBack_.array()[numberRowsExtra_] = -1; ; //and for safety permute_.array()[numberRowsExtra_ + 1] = 0; pivotColumn_.array()[pivotRow] = numberRowsExtra_; pivotColumnBack()[numberRowsExtra_] = pivotRow; startColumn = startColumnU; indexRow = indexRowU_.array(); element = elementU_.array(); numberU_++; number = numberInColumn[numberColumnsExtra_]; totalElements_ += number; lengthU_ += number; if (lengthU_ >= lengthAreaU_) { //not enough room regionSparse->clear(); return 3; } saveFromU = 0.0; //put in pivot //add row counts #if COIN_DEBUG > 1 if (numberR_ >= checkNumber) printf("On U\n"); #endif #if COIN_ONE_ETA_COPY if (convertRowToColumn) { #endif for (int i = 0; i < number; i++) { int iRow = indexU[i]; #if COIN_DEBUG > 1 if (numberR_ >= checkNumber) printf("%d %g\n", iRow, elementU[i]); #endif //assert ( fabs ( elementU[i] ) > zeroTolerance_ ); if (iRow != realPivotRow) { int next = nextRow[iRow]; int iNumberInRow = numberInRow[iRow]; int space; int put = startRow[iRow] + iNumberInRow; space = startRow[next] - put; if (space <= 0) { getRowSpaceIterate(iRow, iNumberInRow + 4); put = startRow[iRow] + iNumberInRow; } indexColumn[put] = numberColumnsExtra_; convertRowToColumn[put] = i + startU; numberInRow[iRow] = iNumberInRow + 1; saveFromU = saveFromU - elementU[i] * region[iRow]; } else { //zero out and save saveFromU += elementU[i]; elementU[i] = 0.0; } } //in at end last = lastRow[maximumRowsExtra_]; nextRow[last] = numberRowsExtra_; lastRow[maximumRowsExtra_] = numberRowsExtra_; lastRow[numberRowsExtra_] = last; nextRow[numberRowsExtra_] = maximumRowsExtra_; startRow[numberRowsExtra_] = startRow[maximumRowsExtra_]; numberInRow[numberRowsExtra_] = 0; #if COIN_ONE_ETA_COPY } else { //abort(); for (int i = 0; i < number; i++) { int iRow = indexU[i]; #if COIN_DEBUG > 1 if (numberR_ >= checkNumber) printf("%d %g\n", iRow, elementU[i]); #endif if (fabs(elementU[i]) > tolerance) { if (iRow != realPivotRow) { saveFromU = saveFromU - elementU[i] * region[iRow]; } else { //zero out and save saveFromU += elementU[i]; elementU[i] = 0.0; } } else { elementU[i] = 0.0; } } } #endif //column in at beginning (as empty) int *COIN_RESTRICT nextColumn = nextColumn_.array(); int *COIN_RESTRICT lastColumn = lastColumn_.array(); next = nextColumn[maximumColumnsExtra_]; lastColumn[next] = numberColumnsExtra_; nextColumn[maximumColumnsExtra_] = numberColumnsExtra_; nextColumn[numberColumnsExtra_] = next; lastColumn[numberColumnsExtra_] = maximumColumnsExtra_; //check accuracy - but not if already checked (optimization problem) int status = (checkBeforeModifying) ? 0 : checkPivot(saveFromU, pivotCheck); if (status != 2) { CoinFactorizationDouble pivotValue = 1.0 / saveFromU; pivotRegion[numberRowsExtra_] = pivotValue; //modify by pivot for (int i = 0; i < number; i++) { elementU[i] *= pivotValue; } maximumU_ = CoinMax(maximumU_, startU + number); numberRowsExtra_++; numberColumnsExtra_++; numberGoodU_++; numberPivots_++; } if (numberRowsExtra_ > numberRows_ + 50) { int extra = factorElements_ >> 1; if (numberRowsExtra_ > numberRows_ + 100 + numberRows_ / 500) { if (extra < 2 * numberRows_) { extra = 2 * numberRows_; } } else { if (extra < 5 * numberRows_) { extra = 5 * numberRows_; } } int added = totalElements_ - factorElements_; if (added > extra && added > (factorElements_) << 1 && !status && 3 * totalElements_ > 2 * (lengthAreaU_ + lengthAreaL_)) { status = 3; if (messageLevel_ & 4) { std::cout << "Factorization has " << totalElements_ << ", basis had " << factorElements_ << std::endl; } } } if (numberInColumnPlus && status < 2) { // we are going to put another copy of R in R CoinFactorizationDouble *COIN_RESTRICT elementR = elementR_ + lengthAreaR_; int *COIN_RESTRICT indexRowR = indexRowR_ + lengthAreaR_; int *COIN_RESTRICT startR = startColumnR_.array() + maximumPivots_ + 1; int pivotRow = numberRowsExtra_ - 1; for (int i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; assert(pivotRow > iRow); next = nextColumn[iRow]; int space; if (next != maximumColumnsExtra_) space = startR[next] - startR[iRow]; else space = lengthAreaR_ - startR[iRow]; int numberInR = numberInColumnPlus[iRow]; if (space > numberInR) { // there is space int put = startR[iRow] + numberInR; numberInColumnPlus[iRow] = numberInR + 1; indexRowR[put] = pivotRow; elementR[put] = region[iRow]; //add 4 for luck if (next == maximumColumnsExtra_) startR[maximumColumnsExtra_] = CoinMin(static_cast< int >(put + 4), lengthAreaR_); } else { // no space - do we shuffle? if (!getColumnSpaceIterateR(iRow, region[iRow], pivotRow)) { // printf("Need more space for R\n"); numberInColumnPlus_.conditionalDelete(); regionSparse->clear(); break; } } region[iRow] = 0.0; } regionSparse->setNumElements(0); } else { regionSparse->clear(); } #ifdef CLP_FACTORIZATION_INSTRUMENT numberReplace++; timeInReplace += CoinCpuTime() - startTimeX; currentLengthR = lengthR_; currentLengthU = lengthU_; #endif return status; } #if ABOCA_LITE_FACTORIZATION // Does btranU part of replaceColumn (skipping entries) void CoinFactorization::replaceColumn1(CoinIndexedVector *regionSparse, int pivotRow) { //return; //return at once if too many iterations if (numberColumnsExtra_ >= maximumColumnsExtra_) { return; } int *COIN_RESTRICT startColumnU = startColumnU_.array(); if (lengthAreaU_ < startColumnU[maximumColumnsExtra_]) { return; } // If we have done no pivots then always check before modification if (!numberPivots_) return; assert(numberU_ <= numberRowsExtra_); CoinFactorizationDouble *COIN_RESTRICT element; int *COIN_RESTRICT numberInRow = numberInRow_.array(); //int * COIN_RESTRICT numberInColumn = numberInColumn_.array(); int realPivotRow; realPivotRow = pivotColumn_.array()[pivotRow]; //zeroed out region double *COIN_RESTRICT region = regionSparse->denseVector(); element = elementU_.array(); //get entries in row (pivot not stored) int numberNonZero = 0; int *COIN_RESTRICT indexColumn = indexColumnU_.array(); int *COIN_RESTRICT convertRowToColumn = convertRowToColumnU_.array(); int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); int *COIN_RESTRICT startRow = startRowU_.array(); int start = 0; int end = 0; #if COIN_ONE_ETA_COPY xxxxxx; #endif start = startRow[realPivotRow]; end = start + numberInRow[realPivotRow]; int smallestIndex = numberRowsExtra_; for (int i = start; i < end; i++) { int iColumn = indexColumn[i]; assert(iColumn < numberRowsExtra_); smallestIndex = CoinMin(smallestIndex, iColumn); int j = convertRowToColumn[i]; region[iColumn] = element[j]; //element[j] = 0.0; regionIndex[numberNonZero++] = iColumn; } //do BTRAN - finding first one to use regionSparse->setNumElements(numberNonZero); // split up later int number = regionSparse->getNumElements(); int goSparse; // Guess at number at end if (sparseThreshold_ > 0) { if (btranAverageAfterU_) { int newNumber = static_cast< int >(number * btranAverageAfterU_); if (newNumber < sparseThreshold_) goSparse = 2; else if (newNumber < sparseThreshold2_) goSparse = 1; else goSparse = 0; } else { if (number < sparseThreshold_) goSparse = 2; else goSparse = 0; } } else { goSparse = 0; } // change and use second part of temp region goSparse = 0; switch (goSparse) { case 0: // densish //updateColumnTransposeUDensish(regionSparse,smallestIndex); { double tolerance = zeroTolerance_; int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); const int *startRow = startRowU_.array(); const int *convertRowToColumn = convertRowToColumnU_.array(); const int *indexColumn = indexColumnU_.array(); const CoinFactorizationDouble *element = elementU_.array(); int last = numberU_; const int *numberInRow = numberInRow_.array(); numberNonZero = 0; for (int i = smallestIndex; i < last; i++) { if (i == realPivotRow) continue; // skip - do we need to? CoinFactorizationDouble pivotValue = region[i]; if (fabs(pivotValue) > tolerance) { int start = startRow[i]; int numberIn = numberInRow[i]; int end = start + (numberIn & (~1)); for (int j = start; j < end; j += 2) { int iRow0 = indexColumn[j]; int iRow1 = indexColumn[j + 1]; int getElement0 = convertRowToColumn[j]; int getElement1 = convertRowToColumn[j + 1]; CoinFactorizationDouble value0 = element[getElement0]; CoinFactorizationDouble value1 = element[getElement1]; region[iRow0] -= value0 * pivotValue; region[iRow1] -= value1 * pivotValue; } if ((numberIn & 1) != 0) { int iRow = indexColumn[end]; int getElement = convertRowToColumn[end]; CoinFactorizationDouble value = element[getElement]; region[iRow] -= value * pivotValue; } regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } //set counts regionSparse->setNumElements(numberNonZero); } break; case 1: // middling updateColumnTransposeUSparsish(regionSparse, smallestIndex); break; case 2: // sparse updateColumnTransposeUSparse(regionSparse); break; } } // Does replaceColumn - having already done btranU int CoinFactorization::replaceColumn2(CoinIndexedVector *regionSparse, int pivotRow, double pivotCheck) { #ifdef CLP_FACTORIZATION_INSTRUMENT double startTimeX = CoinCpuTime(); #endif assert(numberU_ <= numberRowsExtra_); int *COIN_RESTRICT startColumnU = startColumnU_.array(); int *COIN_RESTRICT startColumn; int *COIN_RESTRICT indexRow; CoinFactorizationDouble *COIN_RESTRICT element; //return at once if too many iterations if (numberColumnsExtra_ >= maximumColumnsExtra_) { return 5; } if (lengthAreaU_ < startColumnU[maximumColumnsExtra_]) { return 3; } int *COIN_RESTRICT numberInRow = numberInRow_.array(); int *COIN_RESTRICT numberInColumn = numberInColumn_.array(); int *COIN_RESTRICT numberInColumnPlus = numberInColumnPlus_.array(); int realPivotRow; realPivotRow = pivotColumn_.array()[pivotRow]; //zeroed out region double *COIN_RESTRICT region = regionSparse->denseVector(); element = elementU_.array(); //take out old pivot column totalElements_ -= numberInColumn[realPivotRow]; CoinFactorizationDouble *COIN_RESTRICT pivotRegion = pivotRegion_.array(); CoinFactorizationDouble oldPivot = pivotRegion[realPivotRow]; // for accuracy check pivotCheck = pivotCheck / oldPivot; #if COIN_DEBUG > 1 int checkNumber = 1000000; //if (numberL_) checkNumber=-1; if (numberR_ >= checkNumber) { printf("pivot row %d, check %g - alpha region:\n", realPivotRow, pivotCheck); /*int i; for (i=0;igetIndices(); int *COIN_RESTRICT startRow = startRowU_.array(); int start = 0; int end = 0; #if COIN_DEBUG > 1 if (numberR_ >= checkNumber) printf("Before btranu\n"); #endif start = startRow[realPivotRow]; end = start + numberInRow[realPivotRow]; for (int i = start; i < end; i++) { int iColumn = indexColumn[i]; assert(iColumn < numberRowsExtra_); int j = convertRowToColumn[i]; element[j] = 0.0; } numberNonZero = regionSparse->getNumElements(); CoinFactorizationDouble saveFromU = 0.0; int startU = startColumnU[numberColumnsExtra_]; int *COIN_RESTRICT indexU = &indexRowU_.array()[startU]; CoinFactorizationDouble *COIN_RESTRICT elementU = &elementU_.array()[startU]; // Now zero out column of U //take out old pivot column for (int i = startColumnU[realPivotRow]; i < saveEnd; i++) { element[i] = 0.0; } //zero out pivot Row (before or after?) //add to R startColumn = startColumnR_.array(); indexRow = indexRowR_; element = elementR_; int l = lengthR_; int number = numberR_; startColumn[number] = l; //for luck and first time number++; startColumn[number] = l + numberNonZero; numberR_ = number; lengthR_ = l + numberNonZero; totalElements_ += numberNonZero; if (lengthR_ >= lengthAreaR_) { //not enough room regionSparse->clear(); return 3; } #if COIN_DEBUG > 1 if (numberR_ >= checkNumber) printf("After btranu\n"); #endif for (int i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; #if COIN_DEBUG > 1 if (numberR_ >= checkNumber) printf("%d %g\n", iRow, region[iRow]); #endif indexRow[l] = iRow; element[l] = region[iRow]; l++; } int *nextRow; int *lastRow; int next; int last; //take out row nextRow = nextRow_.array(); lastRow = lastRow_.array(); next = nextRow[realPivotRow]; last = lastRow[realPivotRow]; nextRow[last] = next; lastRow[next] = last; numberInRow[realPivotRow] = 0; #if COIN_DEBUG nextRow[realPivotRow] = 777777; lastRow[realPivotRow] = 777777; #endif //do permute permute_.array()[numberRowsExtra_] = realPivotRow; // and other way permuteBack_.array()[realPivotRow] = numberRowsExtra_; permuteBack_.array()[numberRowsExtra_] = -1; ; //and for safety permute_.array()[numberRowsExtra_ + 1] = 0; pivotColumn_.array()[pivotRow] = numberRowsExtra_; pivotColumnBack()[numberRowsExtra_] = pivotRow; startColumn = startColumnU; indexRow = indexRowU_.array(); element = elementU_.array(); numberU_++; number = numberInColumn[numberColumnsExtra_]; totalElements_ += number; lengthU_ += number; if (lengthU_ >= lengthAreaU_) { //not enough room regionSparse->clear(); return 3; } saveFromU = 0.0; //put in pivot //add row counts #if COIN_DEBUG > 1 if (numberR_ >= checkNumber) printf("On U\n"); #endif for (int i = 0; i < number; i++) { int iRow = indexU[i]; #if COIN_DEBUG > 1 if (numberR_ >= checkNumber) printf("%d %g\n", iRow, elementU[i]); #endif //assert ( fabs ( elementU[i] ) > zeroTolerance_ ); if (iRow != realPivotRow) { int next = nextRow[iRow]; int iNumberInRow = numberInRow[iRow]; int space; int put = startRow[iRow] + iNumberInRow; space = startRow[next] - put; if (space <= 0) { getRowSpaceIterate(iRow, iNumberInRow + 4); put = startRow[iRow] + iNumberInRow; } indexColumn[put] = numberColumnsExtra_; convertRowToColumn[put] = i + startU; numberInRow[iRow] = iNumberInRow + 1; saveFromU = saveFromU - elementU[i] * region[iRow]; } else { //zero out and save saveFromU += elementU[i]; elementU[i] = 0.0; } } //in at end last = lastRow[maximumRowsExtra_]; nextRow[last] = numberRowsExtra_; lastRow[maximumRowsExtra_] = numberRowsExtra_; lastRow[numberRowsExtra_] = last; nextRow[numberRowsExtra_] = maximumRowsExtra_; startRow[numberRowsExtra_] = startRow[maximumRowsExtra_]; numberInRow[numberRowsExtra_] = 0; //column in at beginning (as empty) int *COIN_RESTRICT nextColumn = nextColumn_.array(); int *COIN_RESTRICT lastColumn = lastColumn_.array(); next = nextColumn[maximumColumnsExtra_]; lastColumn[next] = numberColumnsExtra_; nextColumn[maximumColumnsExtra_] = numberColumnsExtra_; nextColumn[numberColumnsExtra_] = next; lastColumn[numberColumnsExtra_] = maximumColumnsExtra_; //check accuracy - but not if already checked (optimization problem) int status = checkPivot(saveFromU, pivotCheck); if (status != 2) { CoinFactorizationDouble pivotValue = 1.0 / saveFromU; pivotRegion[numberRowsExtra_] = pivotValue; //modify by pivot for (int i = 0; i < number; i++) { elementU[i] *= pivotValue; } maximumU_ = CoinMax(maximumU_, startU + number); numberRowsExtra_++; numberColumnsExtra_++; numberGoodU_++; numberPivots_++; } if (numberRowsExtra_ > numberRows_ + 50) { int extra = factorElements_ >> 1; if (numberRowsExtra_ > numberRows_ + 100 + numberRows_ / 500) { if (extra < 2 * numberRows_) { extra = 2 * numberRows_; } } else { if (extra < 5 * numberRows_) { extra = 5 * numberRows_; } } int added = totalElements_ - factorElements_; if (added > extra && added > (factorElements_) << 1 && !status && 3 * totalElements_ > 2 * (lengthAreaU_ + lengthAreaL_)) { status = 3; if (messageLevel_ & 4) { std::cout << "Factorization has " << totalElements_ << ", basis had " << factorElements_ << std::endl; } } } if (numberInColumnPlus && status < 2) { // we are going to put another copy of R in R CoinFactorizationDouble *COIN_RESTRICT elementR = elementR_ + lengthAreaR_; int *COIN_RESTRICT indexRowR = indexRowR_ + lengthAreaR_; int *COIN_RESTRICT startR = startColumnR_.array() + maximumPivots_ + 1; int pivotRow = numberRowsExtra_ - 1; for (int i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; assert(pivotRow > iRow); next = nextColumn[iRow]; int space; if (next != maximumColumnsExtra_) space = startR[next] - startR[iRow]; else space = lengthAreaR_ - startR[iRow]; int numberInR = numberInColumnPlus[iRow]; if (space > numberInR) { // there is space int put = startR[iRow] + numberInR; numberInColumnPlus[iRow] = numberInR + 1; indexRowR[put] = pivotRow; elementR[put] = region[iRow]; //add 4 for luck if (next == maximumColumnsExtra_) startR[maximumColumnsExtra_] = CoinMin(static_cast< int >(put + 4), lengthAreaR_); } else { // no space - do we shuffle? if (!getColumnSpaceIterateR(iRow, region[iRow], pivotRow)) { // printf("Need more space for R\n"); numberInColumnPlus_.conditionalDelete(); regionSparse->clear(); break; } } region[iRow] = 0.0; } regionSparse->setNumElements(0); } else { regionSparse->clear(); } #ifdef CLP_FACTORIZATION_INSTRUMENT numberReplace++; timeInReplace += CoinCpuTime() - startTimeX; currentLengthR = lengthR_; currentLengthU = lengthU_; #endif return status; } #endif // updateColumnTranspose. Updates one column transpose (BTRAN) int CoinFactorization::updateColumnTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) const { #ifdef CLP_FACTORIZATION_INSTRUMENT double startTimeX = CoinCpuTime(); #endif //zero region regionSparse->clear(); double *COIN_RESTRICT region = regionSparse->denseVector(); double *COIN_RESTRICT vector = regionSparse2->denseVector(); int *COIN_RESTRICT index = regionSparse2->getIndices(); int numberNonZero = regionSparse2->getNumElements(); const int *pivotColumn = pivotColumn_.array(); //move indices into index array int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); bool packed = regionSparse2->packedMode(); if (packed) { for (int i = 0; i < numberNonZero; i++) { int iRow = index[i]; double value = vector[i]; iRow = pivotColumn[iRow]; vector[i] = 0.0; region[iRow] = value; regionIndex[i] = iRow; } } else { for (int i = 0; i < numberNonZero; i++) { int iRow = index[i]; double value = vector[iRow]; vector[iRow] = 0.0; iRow = pivotColumn[iRow]; region[iRow] = value; regionIndex[i] = iRow; } } regionSparse->setNumElements(numberNonZero); if (collectStatistics_) { numberBtranCounts_++; btranCountInput_ += static_cast< double >(numberNonZero); } if (!doForrestTomlin_) { // Do PFI before everything else updateColumnTransposePFI(regionSparse); numberNonZero = regionSparse->getNumElements(); } // ******* U // Apply pivot region - could be combined for speed CoinFactorizationDouble *COIN_RESTRICT pivotRegion = pivotRegion_.array(); int smallestIndex = numberRowsExtra_; for (int j = 0; j < numberNonZero; j++) { int iRow = regionIndex[j]; smallestIndex = CoinMin(smallestIndex, iRow); region[iRow] *= pivotRegion[iRow]; } updateColumnTransposeU(regionSparse, smallestIndex); if (collectStatistics_) btranCountAfterU_ += static_cast< double >(regionSparse->getNumElements()); //permute extra //row bits here updateColumnTransposeR(regionSparse); // ******* L updateColumnTransposeL(regionSparse); numberNonZero = regionSparse->getNumElements(); if (collectStatistics_) { btranCountAfterL_ += static_cast< double >(numberNonZero); #ifdef CLP_FACTORIZATION_INSTRUMENT scaledLengthDense += numberDense_ * numberNonZero; scaledLengthDenseSquared += numberDense_ * numberDense_ * numberNonZero; scaledLengthL += lengthL_ * numberNonZero; scaledLengthR += lengthR_ * numberNonZero; scaledLengthU += lengthU_ * numberNonZero; #endif } const int *permuteBack = pivotColumnBack(); int number = 0; if (packed) { for (int i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; double value = region[iRow]; region[iRow] = 0.0; //if (fabs(value)>zeroTolerance_) { iRow = permuteBack[iRow]; vector[number] = value; index[number++] = iRow; //} } } else { for (int i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; double value = region[iRow]; region[iRow] = 0.0; //if (fabs(value)>zeroTolerance_) { iRow = permuteBack[iRow]; vector[iRow] = value; index[number++] = iRow; //} } } regionSparse->setNumElements(0); regionSparse2->setNumElements(number); #ifdef COIN_DEBUG for (i = 0; i < numberRowsExtra_; i++) { assert(!region[i]); } #endif #ifdef CLP_FACTORIZATION_INSTRUMENT numberUpdateTranspose++; timeInUpdateTranspose += CoinCpuTime() - startTimeX; averageLengthR += lengthR_; averageLengthU += lengthU_; averageLengthL += lengthL_; #endif return number; } #define TYPE_TWO_TRANSPOSE 1 #if TYPE_TWO_TRANSPOSE #if ABOCA_LITE_FACTORIZATION #include #endif void CoinFactorization::updateOneColumnTranspose(CoinIndexedVector *regionWork, int &statistics) const { int numberNonZero = regionWork->getNumElements(); double *COIN_RESTRICT region = regionWork->denseVector(); int *COIN_RESTRICT regionIndex = regionWork->getIndices(); CoinFactorizationDouble *COIN_RESTRICT pivotRegion = pivotRegion_.array(); if (!doForrestTomlin_) { // Do PFI before everything else updateColumnTransposePFI(regionWork); numberNonZero = regionWork->getNumElements(); } // ******* U // Apply pivot region - could be combined for speed int smallestIndex = numberRowsExtra_; for (int j = 0; j < numberNonZero; j++) { int iRow = regionIndex[j]; smallestIndex = CoinMin(smallestIndex, iRow); region[iRow] *= pivotRegion[iRow]; } updateColumnTransposeU(regionWork, smallestIndex); statistics = regionWork->getNumElements(); //permute extra //row bits here updateColumnTransposeR(regionWork); // ******* L updateColumnTransposeL(regionWork); } #endif /* Updates two columns (BTRAN) from regionSparse2 and 3 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output - same for 3 NOTE NOTE - Now we assume 2 is packed and 3 is not If changes then need to checl setNumElements as that can change packed mode */ void CoinFactorization::updateTwoColumnsTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, CoinIndexedVector *regionSparse3, int type) const { /* 0 - two separate 1 - two separate but do permutes here 2 - do in three chunks 3 - do in three chunks changing coding 11 - ABOCA_LITE_FACTORIZATION and as 1 (apart from permute) 12 - ABOCA_LITE_FACTORIZATION and 2 ???? */ #if TYPE_TWO_TRANSPOSE == 0 updateColumnTranspose(regionSparse, regionSparse3); updateColumnTranspose(regionSparse, regionSparse2); #else #ifdef CLP_FACTORIZATION_INSTRUMENT double startTimeX = CoinCpuTime(); #endif const int *pivotColumn = pivotColumn_.array(); //zero region CoinIndexedVector *regionWorkA = regionSparse; regionWorkA->clear(); double *COIN_RESTRICT regionA = regionWorkA->denseVector(); double *COIN_RESTRICT vectorA = regionSparse3->denseVector(); int *COIN_RESTRICT indexA = regionSparse3->getIndices(); int numberNonZeroA = regionSparse3->getNumElements(); int *COIN_RESTRICT regionIndexA = regionWorkA->getIndices(); //move indices into index array bool packedA = regionSparse3->packedMode(); assert(!packedA); packedA = false; if (packedA) { for (int i = 0; i < numberNonZeroA; i++) { int iRow = indexA[i]; double value = vectorA[i]; iRow = pivotColumn[iRow]; vectorA[i] = 0.0; regionA[iRow] = value; regionIndexA[i] = iRow; } } else { for (int i = 0; i < numberNonZeroA; i++) { int iRow = indexA[i]; double value = vectorA[iRow]; vectorA[iRow] = 0.0; iRow = pivotColumn[iRow]; regionA[iRow] = value; regionIndexA[i] = iRow; } } regionWorkA->setNumElements(numberNonZeroA); CoinIndexedVector *regionWorkB = regionSparse3; double *COIN_RESTRICT regionB = regionWorkB->denseVector(); double *COIN_RESTRICT vectorB = regionSparse2->denseVector(); int *COIN_RESTRICT indexB = regionSparse2->getIndices(); int numberNonZeroB = regionSparse2->getNumElements(); int *COIN_RESTRICT regionIndexB = regionWorkB->getIndices(); bool packedB = regionSparse2->packedMode(); assert(packedB); packedB = true; if (packedB) { for (int i = 0; i < numberNonZeroB; i++) { int iRow = indexB[i]; double value = vectorB[i]; iRow = pivotColumn[iRow]; vectorB[i] = 0.0; regionB[iRow] = value; regionIndexB[i] = iRow; } } else { for (int i = 0; i < numberNonZeroB; i++) { int iRow = indexB[i]; double value = vectorB[iRow]; vectorB[iRow] = 0.0; iRow = pivotColumn[iRow]; regionB[iRow] = value; regionIndexB[i] = iRow; } } regionWorkB->setNumElements(numberNonZeroB); if (collectStatistics_) { numberBtranCounts_ += 2; btranCountInput_ += static_cast< double >(numberNonZeroA + numberNonZeroB); } int statistics[2]; #if TYPE_TWO_TRANSPOSE == 1 #ifdef ABOCA_LITE_FACTORIZATION if (!type) { #endif CoinFactorizationDouble *COIN_RESTRICT pivotRegion = pivotRegion_.array(); if (!doForrestTomlin_) { // Do PFI before everything else updateColumnTransposePFI(regionWorkA); numberNonZeroA = regionWorkA->getNumElements(); } // ******* U // Apply pivot region - could be combined for speed int smallestIndexA = numberRowsExtra_; for (int j = 0; j < numberNonZeroA; j++) { int iRow = regionIndexA[j]; smallestIndexA = CoinMin(smallestIndexA, iRow); regionA[iRow] *= pivotRegion[iRow]; } updateColumnTransposeU(regionWorkA, smallestIndexA); statistics[0] = regionWorkA->getNumElements(); //permute extra //row bits here updateColumnTransposeR(regionWorkA); // ******* L updateColumnTransposeL(regionWorkA); if (!doForrestTomlin_) { // Do PFI before everything else updateColumnTransposePFI(regionWorkB); numberNonZeroB = regionWorkB->getNumElements(); } // ******* U // Apply pivot region - could be combined for speed int smallestIndexB = numberRowsExtra_; for (int j = 0; j < numberNonZeroB; j++) { int iRow = regionIndexB[j]; smallestIndexB = CoinMin(smallestIndexB, iRow); regionB[iRow] *= pivotRegion[iRow]; } updateColumnTransposeU(regionWorkB, smallestIndexB); statistics[1] = regionWorkB->getNumElements(); //permute extra //row bits here updateColumnTransposeR(regionWorkB); // ******* L updateColumnTransposeL(regionWorkB); #ifdef ABOCA_LITE_FACTORIZATION } else { regionWorkB->setCapacity(regionWorkB->capacity() | 0x80000000); cilk_spawn updateOneColumnTranspose(regionWorkA, statistics[0]); //cilk_sync; cilk_spawn updateOneColumnTranspose(regionWorkB, statistics[1]); cilk_sync; regionWorkB->setCapacity(regionWorkB->capacity() & 0x7fffffff); numberNonZeroA = regionWorkA->getNumElements(); numberNonZeroA = regionWorkB->getNumElements(); } #endif #elif TYPE_TWO_TRANSPOSE == 2 #ifdef ABOCA_LITE_FACTORIZATION if (!type) { #endif CoinFactorizationDouble *COIN_RESTRICT pivotRegion = pivotRegion_.array(); if (!doForrestTomlin_) { // Do PFI before everything else updateColumnTransposePFI(regionWorkA); numberNonZeroA = regionWorkA->getNumElements(); updateColumnTransposePFI(regionWorkB); numberNonZeroB = regionWorkB->getNumElements(); } // ******* U // Apply pivot region - could be combined for speed int smallestIndexA = numberRowsExtra_; for (int j = 0; j < numberNonZeroA; j++) { int iRow = regionIndexA[j]; smallestIndexA = CoinMin(smallestIndexA, iRow); regionA[iRow] *= pivotRegion[iRow]; } int smallestIndexB = numberRowsExtra_; for (int j = 0; j < numberNonZeroB; j++) { int iRow = regionIndexB[j]; smallestIndexB = CoinMin(smallestIndexB, iRow); regionB[iRow] *= pivotRegion[iRow]; } updateColumnTransposeU(regionWorkA, smallestIndexA); updateColumnTransposeU(regionWorkB, smallestIndexB); statistics[0] = regionWorkA->getNumElements(); statistics[1] = regionWorkB->getNumElements(); //permute extra //row bits here updateColumnTransposeR(regionWorkA); updateColumnTransposeR(regionWorkB); // ******* L updateColumnTransposeL(regionWorkA); updateColumnTransposeL(regionWorkB); #ifdef ABOCA_LITE_FACTORIZATION } else { regionWorkB->setCapacity(regionWorkB->capacity() | 0x80000000); cilk_spawn updateOneColumnTranspose(regionWorkA, statistics[0]); //cilk_sync; cilk_spawn updateOneColumnTranspose(regionWorkB, statistics[1]); cilk_sync; regionWorkB->setCapacity(regionWorkB->capacity() & 0x7fffffff); numberNonZeroA = regionWorkA->getNumElements(); numberNonZeroA = regionWorkB->getNumElements(); } #endif #else CoinFactorizationDouble *COIN_RESTRICT pivotRegion = pivotRegion_.array(); if (!doForrestTomlin_) { // Do PFI before everything else updateColumnTransposePFI(regionWorkA); numberNonZeroA = regionWorkA->getNumElements(); updateColumnTransposePFI(regionWorkB); numberNonZeroB = regionWorkB->getNumElements(); } // ******* U // Apply pivot region - could be combined for speed int smallestIndexA = numberRowsExtra_; for (int j = 0; j < numberNonZeroA; j++) { int iRow = regionIndexA[j]; smallestIndexA = CoinMin(smallestIndexA, iRow); regionA[iRow] *= pivotRegion[iRow]; } int smallestIndexB = numberRowsExtra_; for (int j = 0; j < numberNonZeroB; j++) { int iRow = regionIndexB[j]; smallestIndexB = CoinMin(smallestIndexB, iRow); regionB[iRow] *= pivotRegion[iRow]; } updateColumnTransposeU(regionWorkA, smallestIndexA); updateColumnTransposeU(regionWorkB, smallestIndexB); statistics[0] = regionWorkA->getNumElements(); statistics[1] = regionWorkB->getNumElements(); //permute extra //row bits here updateColumnTransposeR(regionWorkA); updateColumnTransposeR(regionWorkB); // ******* L #ifdef COIN_FACTORIZATION_DENSE_CODE if (!numberDense_) { #endif updateColumnTransposeL(regionWorkA); updateColumnTransposeL(regionWorkB); #ifdef COIN_FACTORIZATION_DENSE_CODE } else { abort(); } #endif #endif if (collectStatistics_) { btranCountAfterL_ += static_cast< double >(numberNonZeroA + numberNonZeroB); btranCountAfterU_ += static_cast< double >(statistics[0] + statistics[1]); #ifdef CLP_FACTORIZATION_INSTRUMENT scaledLengthDense += numberDense_ * numberNonZeroA; scaledLengthDenseSquared += numberDense_ * numberDense_ * numberNonZeroA; scaledLengthL += lengthL_ * numberNonZeroA; scaledLengthR += lengthR_ * numberNonZeroA; scaledLengthU += lengthU_ * numberNonZeroA; #endif } const int *permuteBack = pivotColumnBack(); numberNonZeroA = regionWorkA->getNumElements(); numberNonZeroB = regionWorkB->getNumElements(); int number = 0; if (packedB) { for (int i = 0; i < numberNonZeroB; i++) { int iRow = regionIndexB[i]; double value = regionB[iRow]; regionB[iRow] = 0.0; //if (fabs(value)>zeroTolerance_) { iRow = permuteBack[iRow]; vectorB[number] = value; indexB[number++] = iRow; //} } } else { for (int i = 0; i < numberNonZeroB; i++) { int iRow = regionIndexB[i]; double value = regionB[iRow]; regionB[iRow] = 0.0; //if (fabs(value)>zeroTolerance_) { iRow = permuteBack[iRow]; vectorB[iRow] = value; indexB[number++] = iRow; //} } } //regionWorkB->setNumElements(0); regionSparse2->setNumElements(number); number = 0; if (packedA) { for (int i = 0; i < numberNonZeroA; i++) { int iRow = regionIndexA[i]; double value = regionA[iRow]; regionA[iRow] = 0.0; //if (fabs(value)>zeroTolerance_) { iRow = permuteBack[iRow]; vectorA[number] = value; indexA[number++] = iRow; //} } } else { for (int i = 0; i < numberNonZeroA; i++) { int iRow = regionIndexA[i]; double value = regionA[iRow]; regionA[iRow] = 0.0; //if (fabs(value)>zeroTolerance_) { iRow = permuteBack[iRow]; vectorA[iRow] = value; indexA[number++] = iRow; //} } } regionWorkA->setNumElements(0); regionSparse3->setNumElements(number); #ifdef COIN_DEBUG for (i = 0; i < numberRowsExtra_; i++) { assert(!regionA[i]); } #endif #ifdef CLP_FACTORIZATION_INSTRUMENT numberUpdateTranspose += 2; timeInUpdateTranspose += CoinCpuTime() - startTimeX; averageLengthR += 2 * lengthR_; averageLengthU += 2 * lengthU_; averageLengthL += 2 * lengthL_; #endif #endif } /* Updates part of column transpose (BTRANU) when densish, assumes index is sorted i.e. region is correct */ void CoinFactorization::updateColumnTransposeUDensish(CoinIndexedVector *regionSparse, int smallestIndex) const { double *COIN_RESTRICT region = regionSparse->denseVector(); int numberNonZero = regionSparse->getNumElements(); double tolerance = zeroTolerance_; int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); const int *startRow = startRowU_.array(); const int *convertRowToColumn = convertRowToColumnU_.array(); const int *indexColumn = indexColumnU_.array(); const CoinFactorizationDouble *element = elementU_.array(); int last = numberU_; const int *numberInRow = numberInRow_.array(); numberNonZero = 0; for (int i = smallestIndex; i < last; i++) { CoinFactorizationDouble pivotValue = region[i]; if (fabs(pivotValue) > tolerance) { int start = startRow[i]; int numberIn = numberInRow[i]; int end = start + (numberIn & (~1)); for (int j = start; j < end; j += 2) { int iRow0 = indexColumn[j]; int iRow1 = indexColumn[j + 1]; int getElement0 = convertRowToColumn[j]; int getElement1 = convertRowToColumn[j + 1]; CoinFactorizationDouble value0 = element[getElement0]; CoinFactorizationDouble value1 = element[getElement1]; region[iRow0] -= value0 * pivotValue; region[iRow1] -= value1 * pivotValue; } if ((numberIn & 1) != 0) { int iRow = indexColumn[end]; int getElement = convertRowToColumn[end]; CoinFactorizationDouble value = element[getElement]; region[iRow] -= value * pivotValue; } regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } //set counts regionSparse->setNumElements(numberNonZero); } /* Updates part of column transpose (BTRANU) when sparsish, assumes index is sorted i.e. region is correct */ void CoinFactorization::updateColumnTransposeUSparsish(CoinIndexedVector *regionSparse, int smallestIndex) const { double *COIN_RESTRICT region = regionSparse->denseVector(); int numberNonZero = regionSparse->getNumElements(); double tolerance = zeroTolerance_; int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); const int *startRow = startRowU_.array(); const int *convertRowToColumn = convertRowToColumnU_.array(); const int *indexColumn = indexColumnU_.array(); const CoinFactorizationDouble *element = elementU_.array(); int last = numberU_; const int *numberInRow = numberInRow_.array(); // mark known to be zero int nInBig = sizeof(int) / sizeof(int); #if ABOCA_LITE_FACTORIZATION == 0 #define sparseOffset 0 #else int sparseOffset = ((regionSparse->capacity() & 0x80000000) != 0) ? sparseOffset_ : 0; assert(!sparseOffset); #endif CoinCheckZero *COIN_RESTRICT mark = reinterpret_cast< CoinCheckZero * >(sparse_.array() + (2 + nInBig) * maximumRowsExtra_ + sparseOffset); for (int i = 0; i < numberNonZero; i++) { int iPivot = regionIndex[i]; int iWord = iPivot >> CHECK_SHIFT; int iBit = iPivot - (iWord << CHECK_SHIFT); if (mark[iWord]) { mark[iWord] = static_cast< CoinCheckZero >(mark[iWord] | (1 << iBit)); } else { mark[iWord] = static_cast< CoinCheckZero >(1 << iBit); } } numberNonZero = 0; // Find convenient power of 2 smallestIndex = smallestIndex >> CHECK_SHIFT; int kLast = last >> CHECK_SHIFT; // do in chunks for (int k = smallestIndex; k < kLast; k++) { unsigned int iMark = mark[k]; if (iMark) { // something in chunk - do all (as imark may change) int i = k << CHECK_SHIFT; int iLast = i + BITS_PER_CHECK; for (; i < iLast; i++) { CoinFactorizationDouble pivotValue = region[i]; if (fabs(pivotValue) > tolerance) { int start = startRow[i]; int numberIn = numberInRow[i]; int end = start + numberIn; for (int j = start; j < end; j++) { int iRow = indexColumn[j]; int getElement = convertRowToColumn[j]; CoinFactorizationDouble value = element[getElement]; int iWord = iRow >> CHECK_SHIFT; int iBit = iRow - (iWord << CHECK_SHIFT); if (mark[iWord]) { mark[iWord] = static_cast< CoinCheckZero >(mark[iWord] | (1 << iBit)); } else { mark[iWord] = static_cast< CoinCheckZero >(1 << iBit); } region[iRow] -= value * pivotValue; } regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } mark[k] = 0; } } mark[kLast] = 0; for (int i = kLast << CHECK_SHIFT; i < last; i++) { CoinFactorizationDouble pivotValue = region[i]; if (fabs(pivotValue) > tolerance) { int start = startRow[i]; int numberIn = numberInRow[i]; int end = start + numberIn; for (int j = start; j < end; j++) { int iRow = indexColumn[j]; int getElement = convertRowToColumn[j]; CoinFactorizationDouble value = element[getElement]; region[iRow] -= value * pivotValue; } regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } #ifdef COIN_DEBUG for (int i = 0; i < maximumRowsExtra_; i++) { assert(!mark[i]); } #endif //set counts regionSparse->setNumElements(numberNonZero); } /* Updates part of column transpose (BTRANU) when sparse, assumes index is sorted i.e. region is correct */ void CoinFactorization::updateColumnTransposeUSparse( CoinIndexedVector *regionSparse) const { double *COIN_RESTRICT region = regionSparse->denseVector(); int numberNonZero = regionSparse->getNumElements(); double tolerance = zeroTolerance_; int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); const int *startRow = startRowU_.array(); const int *convertRowToColumn = convertRowToColumnU_.array(); const int *indexColumn = indexColumnU_.array(); const CoinFactorizationDouble *element = elementU_.array(); const int *numberInRow = numberInRow_.array(); // use sparse_ as temporary area // mark known to be zero #if ABOCA_LITE_FACTORIZATION == 0 #define sparseOffset 0 #else int sparseOffset = ((regionSparse->capacity() & 0x80000000) != 0) ? sparseOffset_ : 0; #endif int *COIN_RESTRICT stack = sparse_.array() + sparseOffset; /* pivot */ int *COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ int *COIN_RESTRICT next = reinterpret_cast< int * >(list + maximumRowsExtra_); /* jnext */ char *COIN_RESTRICT mark = reinterpret_cast< char * >(next + maximumRowsExtra_); int nList; #ifdef COIN_DEBUG for (int i = 0; i < maximumRowsExtra_; i++) { assert(!mark[i]); } #endif #if 0 { int i; for (i=0;ii); } } #endif nList = 0; for (int k = 0; k < numberNonZero; k++) { int kPivot = regionIndex[k]; stack[0] = kPivot; int j = startRow[kPivot] + numberInRow[kPivot] - 1; next[0] = j; int nStack = 1; while (nStack) { /* take off stack */ kPivot = stack[--nStack]; if (mark[kPivot] != 1) { j = next[nStack]; if (j >= startRow[kPivot]) { kPivot = indexColumn[j--]; /* put back on stack */ next[nStack++] = j; if (!mark[kPivot]) { /* and new one */ j = startRow[kPivot] + numberInRow[kPivot] - 1; stack[nStack] = kPivot; mark[kPivot] = 2; next[nStack++] = j; } } else { // finished list[nList++] = kPivot; mark[kPivot] = 1; } } } } numberNonZero = 0; for (int i = nList - 1; i >= 0; i--) { int iPivot = list[i]; mark[iPivot] = 0; CoinFactorizationDouble pivotValue = region[iPivot]; if (fabs(pivotValue) > tolerance) { int start = startRow[iPivot]; int numberIn = numberInRow[iPivot]; int end = start + numberIn; for (int j = start; j < end; j++) { int iRow = indexColumn[j]; int getElement = convertRowToColumn[j]; CoinFactorizationDouble value = element[getElement]; region[iRow] -= value * pivotValue; } regionIndex[numberNonZero++] = iPivot; } else { region[iPivot] = 0.0; } } //set counts regionSparse->setNumElements(numberNonZero); } // updateColumnTransposeU. Updates part of column transpose (BTRANU) //assumes index is sorted i.e. region is correct //does not sort by sign void CoinFactorization::updateColumnTransposeU(CoinIndexedVector *regionSparse, int smallestIndex) const { #if COIN_ONE_ETA_COPY int *convertRowToColumn = convertRowToColumnU_.array(); if (!convertRowToColumn) { //abort(); updateColumnTransposeUByColumn(regionSparse, smallestIndex); return; } #endif int number = regionSparse->getNumElements(); int goSparse; // Guess at number at end if (sparseThreshold_ > 0) { if (btranAverageAfterU_) { int newNumber = static_cast< int >(number * btranAverageAfterU_); if (newNumber < sparseThreshold_) goSparse = 2; else if (newNumber < sparseThreshold2_) goSparse = 1; else goSparse = 0; } else { if (number < sparseThreshold_) goSparse = 2; else goSparse = 0; } } else { goSparse = 0; } switch (goSparse) { case 0: // densish updateColumnTransposeUDensish(regionSparse, smallestIndex); break; case 1: // middling updateColumnTransposeUSparsish(regionSparse, smallestIndex); break; case 2: // sparse updateColumnTransposeUSparse(regionSparse); break; } } /* updateColumnTransposeLDensish. Updates part of column transpose (BTRANL) dense by column */ void CoinFactorization::updateColumnTransposeLDensish(CoinIndexedVector *regionSparse) const { double *COIN_RESTRICT region = regionSparse->denseVector(); int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); int numberNonZero; double tolerance = zeroTolerance_; int base; int first = -1; numberNonZero = 0; //scan for (first = numberRows_ - 1; first >= 0; first--) { if (region[first]) break; } if (first >= 0) { base = baseL_; const int *COIN_RESTRICT startColumn = startColumnL_.array(); const int *COIN_RESTRICT indexRow = indexRowL_.array(); const CoinFactorizationDouble *COIN_RESTRICT element = elementL_.array(); int last = baseL_ + numberL_; if (first >= last) { first = last - 1; } for (int i = first; i >= base; i--) { int j; CoinFactorizationDouble pivotValue = region[i]; for (j = startColumn[i]; j < startColumn[i + 1]; j++) { int iRow = indexRow[j]; CoinFactorizationDouble value = element[j]; pivotValue -= value * region[iRow]; } if (fabs(pivotValue) > tolerance) { region[i] = pivotValue; regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } //may have stopped early if (first < base) { base = first + 1; } if (base > 5) { int i = base - 1; CoinFactorizationDouble pivotValue = region[i]; bool store = fabs(pivotValue) > tolerance; for (; i > 0; i--) { bool oldStore = store; CoinFactorizationDouble oldValue = pivotValue; pivotValue = region[i - 1]; store = fabs(pivotValue) > tolerance; if (!oldStore) { region[i] = 0.0; } else { region[i] = oldValue; regionIndex[numberNonZero++] = i; } } if (store) { region[0] = pivotValue; regionIndex[numberNonZero++] = 0; } else { region[0] = 0.0; } } else { for (int i = base - 1; i >= 0; i--) { CoinFactorizationDouble pivotValue = region[i]; if (fabs(pivotValue) > tolerance) { region[i] = pivotValue; regionIndex[numberNonZero++] = i; } else { region[i] = 0.0; } } } } //set counts regionSparse->setNumElements(numberNonZero); } /* updateColumnTransposeLByRow. Updates part of column transpose (BTRANL) densish but by row */ void CoinFactorization::updateColumnTransposeLByRow(CoinIndexedVector *regionSparse) const { double *COIN_RESTRICT region = regionSparse->denseVector(); int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); int numberNonZero; double tolerance = zeroTolerance_; int first = -1; // use row copy of L const CoinFactorizationDouble *element = elementByRowL_.array(); const int *startRow = startRowL_.array(); const int *column = indexColumnL_.array(); for (first = numberRows_ - 1; first >= 0; first--) { if (region[first]) break; } numberNonZero = 0; for (int i = first; i >= 0; i--) { CoinFactorizationDouble pivotValue = region[i]; if (fabs(pivotValue) > tolerance) { regionIndex[numberNonZero++] = i; int j; for (j = startRow[i + 1] - 1; j >= startRow[i]; j--) { int iRow = column[j]; CoinFactorizationDouble value = element[j]; region[iRow] -= pivotValue * value; } } else { region[i] = 0.0; } } //set counts regionSparse->setNumElements(numberNonZero); } // Updates part of column transpose (BTRANL) when sparsish by row void CoinFactorization::updateColumnTransposeLSparsish(CoinIndexedVector *regionSparse) const { double *COIN_RESTRICT region = regionSparse->denseVector(); int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); int numberNonZero = regionSparse->getNumElements(); double tolerance = zeroTolerance_; // use row copy of L const CoinFactorizationDouble *element = elementByRowL_.array(); const int *startRow = startRowL_.array(); const int *column = indexColumnL_.array(); // mark known to be zero int nInBig = sizeof(int) / sizeof(int); #if ABOCA_LITE_FACTORIZATION == 0 #define sparseOffset 0 #else int sparseOffset = ((regionSparse->capacity() & 0x80000000) != 0) ? sparseOffset_ : 0; #endif CoinCheckZero *COIN_RESTRICT mark = reinterpret_cast< CoinCheckZero * >(sparse_.array() + (2 + nInBig) * maximumRowsExtra_ + sparseOffset); for (int i = 0; i < numberNonZero; i++) { int iPivot = regionIndex[i]; int iWord = iPivot >> CHECK_SHIFT; int iBit = iPivot - (iWord << CHECK_SHIFT); if (mark[iWord]) { mark[iWord] = static_cast< CoinCheckZero >(mark[iWord] | (1 << iBit)); } else { mark[iWord] = static_cast< CoinCheckZero >(1 << iBit); } } numberNonZero = 0; // First do down to convenient power of 2 int jLast = (numberRows_ - 1) >> CHECK_SHIFT; jLast = (jLast << CHECK_SHIFT); for (int i = numberRows_ - 1; i >= jLast; i--) { CoinFactorizationDouble pivotValue = region[i]; if (fabs(pivotValue) > tolerance) { regionIndex[numberNonZero++] = i; int j; for (j = startRow[i + 1] - 1; j >= startRow[i]; j--) { int iRow = column[j]; CoinFactorizationDouble value = element[j]; int iWord = iRow >> CHECK_SHIFT; int iBit = iRow - (iWord << CHECK_SHIFT); if (mark[iWord]) { mark[iWord] = static_cast< CoinCheckZero >(mark[iWord] | (1 << iBit)); } else { mark[iWord] = static_cast< CoinCheckZero >(1 << iBit); } region[iRow] -= pivotValue * value; } } else { region[i] = 0.0; } } // and in chunks jLast = jLast >> CHECK_SHIFT; mark[jLast] = 0; for (int k = jLast - 1; k >= 0; k--) { unsigned int iMark = mark[k]; if (iMark) { // something in chunk - do all (as imark may change) int iLast = k << CHECK_SHIFT; for (int i = iLast + BITS_PER_CHECK - 1; i >= iLast; i--) { CoinFactorizationDouble pivotValue = region[i]; if (fabs(pivotValue) > tolerance) { regionIndex[numberNonZero++] = i; int j; for (j = startRow[i + 1] - 1; j >= startRow[i]; j--) { int iRow = column[j]; CoinFactorizationDouble value = element[j]; int iWord = iRow >> CHECK_SHIFT; int iBit = iRow - (iWord << CHECK_SHIFT); if (mark[iWord]) { mark[iWord] = static_cast< CoinCheckZero >(mark[iWord] | (1 << iBit)); } else { mark[iWord] = static_cast< CoinCheckZero >(1 << iBit); } region[iRow] -= pivotValue * value; } } else { region[i] = 0.0; } } mark[k] = 0; } } #ifdef COIN_DEBUG for (int i = 0; i < maximumRowsExtra_; i++) { assert(!mark[i]); } #endif //set counts regionSparse->setNumElements(numberNonZero); } /* updateColumnTransposeLSparse. Updates part of column transpose (BTRANL) sparse */ void CoinFactorization::updateColumnTransposeLSparse(CoinIndexedVector *regionSparse) const { double *COIN_RESTRICT region = regionSparse->denseVector(); int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); int numberNonZero = regionSparse->getNumElements(); double tolerance = zeroTolerance_; // use row copy of L const CoinFactorizationDouble *element = elementByRowL_.array(); const int *startRow = startRowL_.array(); const int *column = indexColumnL_.array(); // use sparse_ as temporary area // mark known to be zero #if ABOCA_LITE_FACTORIZATION == 0 #define sparseOffset 0 #else int sparseOffset = ((regionSparse->capacity() & 0x80000000) != 0) ? sparseOffset_ : 0; #endif int *COIN_RESTRICT stack = sparse_.array() + sparseOffset; /* pivot */ int *COIN_RESTRICT list = stack + maximumRowsExtra_; /* final list */ int *COIN_RESTRICT next = reinterpret_cast< int * >(list + maximumRowsExtra_); /* jnext */ char *COIN_RESTRICT mark = reinterpret_cast< char * >(next + maximumRowsExtra_); int nList; int number = numberNonZero; #ifdef COIN_DEBUG for (i = 0; i < maximumRowsExtra_; i++) { assert(!mark[i]); } #endif nList = 0; for (int k = 0; k < number; k++) { int kPivot = regionIndex[k]; if (!mark[kPivot] && region[kPivot]) { stack[0] = kPivot; int j = startRow[kPivot + 1] - 1; int nStack = 0; while (nStack >= 0) { /* take off stack */ if (j >= startRow[kPivot]) { int jPivot = column[j--]; /* put back on stack */ next[nStack] = j; if (!mark[jPivot]) { /* and new one */ kPivot = jPivot; j = startRow[kPivot + 1] - 1; stack[++nStack] = kPivot; mark[kPivot] = 1; next[nStack] = j; } } else { /* finished so mark */ list[nList++] = kPivot; mark[kPivot] = 1; --nStack; if (nStack >= 0) { kPivot = stack[nStack]; j = next[nStack]; } } } } } numberNonZero = 0; for (int i = nList - 1; i >= 0; i--) { int iPivot = list[i]; mark[iPivot] = 0; CoinFactorizationDouble pivotValue = region[iPivot]; if (fabs(pivotValue) > tolerance) { regionIndex[numberNonZero++] = iPivot; int j; for (j = startRow[iPivot]; j < startRow[iPivot + 1]; j++) { int iRow = column[j]; CoinFactorizationDouble value = element[j]; region[iRow] -= value * pivotValue; } } else { region[iPivot] = 0.0; } } //set counts regionSparse->setNumElements(numberNonZero); } // updateColumnTransposeL. Updates part of column transpose (BTRANL) void CoinFactorization::updateColumnTransposeL(CoinIndexedVector *regionSparse) const { int number = regionSparse->getNumElements(); if (!numberL_ && !numberDense_) { if (sparse_.array() || number < numberRows_) return; } int goSparse; // Guess at number at end // we may need to rethink on dense if (sparseThreshold_ > 0) { if (btranAverageAfterL_) { int newNumber = static_cast< int >(number * btranAverageAfterL_); if (newNumber < sparseThreshold_) goSparse = 2; else if (newNumber < sparseThreshold2_) goSparse = 1; else goSparse = 0; } else { if (number < sparseThreshold_) goSparse = 2; else goSparse = 0; } } else { goSparse = -1; } #ifdef COIN_FACTORIZATION_DENSE_CODE if (numberDense_) { //take off list int lastSparse = numberRows_ - numberDense_; int number = regionSparse->getNumElements(); double *COIN_RESTRICT region = regionSparse->denseVector(); int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); int i = 0; bool doDense = false; if (number <= numberRows_) { while (i < number) { int iRow = regionIndex[i]; if (iRow >= lastSparse) { doDense = true; regionIndex[i] = regionIndex[--number]; } else { i++; } } } else { for (i = numberRows_ - 1; i >= lastSparse; i--) { if (region[i]) { doDense = true; // numbers are all wrong - do a scan regionSparse->setNumElements(0); regionSparse->scan(0, lastSparse, zeroTolerance_); number = regionSparse->getNumElements(); break; } } if (sparseThreshold_) goSparse = 0; else goSparse = -1; } if (doDense) { regionSparse->setNumElements(number); #if COIN_FACTORIZATION_DENSE_CODE == 1 char trans = 'T'; int ione = 1; int info; F77_FUNC(dgetrs, DGETRS) (&trans, &numberDense_, &ione, denseAreaAddress_, &numberDense_, densePermute_, region + lastSparse, &numberDense_, &info, 1); #elif COIN_FACTORIZATION_DENSE_CODE == 2 clapack_dgetrs(CblasColMajor, CblasTrans, numberDense_, 1, denseAreaAddress_, numberDense_, densePermute_, region + lastSparse, numberDense_); #elif COIN_FACTORIZATION_DENSE_CODE == 3 LAPACKE_dgetrs(LAPACK_COL_MAJOR, 'T', numberDense_, 1, denseAreaAddress_, numberDense_, densePermute_, region + lastSparse, numberDense_); #endif //and scan again if (goSparse > 0 || !numberL_) regionSparse->scan(lastSparse, numberRows_, zeroTolerance_); } if (!numberL_) { // could be odd combination of sparse/dense if (number > numberRows_) { regionSparse->setNumElements(0); regionSparse->scan(0, numberRows_, zeroTolerance_); } return; } } #endif if (goSparse > 0 && regionSparse->getNumElements() > numberRows_) goSparse = 0; switch (goSparse) { case -1: // No row copy updateColumnTransposeLDensish(regionSparse); break; case 0: // densish but by row updateColumnTransposeLByRow(regionSparse); break; case 1: // middling(and by row) updateColumnTransposeLSparsish(regionSparse); break; case 2: // sparse updateColumnTransposeLSparse(regionSparse); break; } } #if COIN_ONE_ETA_COPY /* Combines BtranU and delete elements If deleted is NULL then delete elements otherwise store where elements are */ void CoinFactorization::replaceColumnU(CoinIndexedVector *regionSparse, int *deleted, int internalPivotRow) { double *COIN_RESTRICT region = regionSparse->denseVector(); int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); double tolerance = zeroTolerance_; const int *startColumn = startColumnU_.array(); const int *indexRow = indexRowU_.array(); CoinFactorizationDouble *element = elementU_.array(); int numberNonZero = 0; const int *numberInColumn = numberInColumn_.array(); //const CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); bool deleteNow = true; if (deleted) { deleteNow = false; deleted++; } int nPut = 0; for (int i = CoinMax(numberSlacks_, internalPivotRow); i < numberU_; i++) { assert(!region[i]); CoinFactorizationDouble pivotValue = 0.0; //region[i]*pivotRegion[i]; //printf("Epv %g reg %g pr %g\n", // pivotValue,region[i],pivotRegion[i]); //pivotValue = region[i]; for (int j = startColumn[i]; j < startColumn[i] + numberInColumn[i]; j++) { int iRow = indexRow[j]; CoinFactorizationDouble value = element[j]; if (iRow != internalPivotRow) { pivotValue -= value * region[iRow]; } else { assert(!region[iRow]); pivotValue += value; if (deleteNow) element[j] = 0.0; else deleted[nPut++] = j; } } if (fabs(pivotValue) > tolerance) { regionIndex[numberNonZero++] = i; region[i] = pivotValue; } else { region[i] = 0; } } if (!deleteNow) { deleted--; deleted[0] = nPut; } regionSparse->setNumElements(numberNonZero); } /* Updates part of column transpose (BTRANU) by column assumes index is sorted i.e. region is correct */ void CoinFactorization::updateColumnTransposeUByColumn(CoinIndexedVector *regionSparse, int smallestIndex) const { //CoinIndexedVector temp = *regionSparse; //updateColumnTransposeUDensish(&temp,smallestIndex); double *COIN_RESTRICT region = regionSparse->denseVector(); int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); double tolerance = zeroTolerance_; const int *startColumn = startColumnU_.array(); const int *indexRow = indexRowU_.array(); const CoinFactorizationDouble *element = elementU_.array(); int numberNonZero = 0; const int *numberInColumn = numberInColumn_.array(); const CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); for (int i = smallestIndex; i < numberSlacks_; i++) { double value = region[i]; if (value) { //region[i]=-value; regionIndex[numberNonZero] = i; if (fabs(value) > tolerance) numberNonZero++; else region[i] = 0.0; } } for (int i = CoinMax(numberSlacks_, smallestIndex); i < numberU_; i++) { CoinFactorizationDouble pivotValue = region[i] * pivotRegion[i]; //printf("pv %g reg %g pr %g\n", // pivotValue,region[i],pivotRegion[i]); pivotValue = region[i]; for (int j = startColumn[i]; j < startColumn[i] + numberInColumn[i]; j++) { int iRow = indexRow[j]; CoinFactorizationDouble value = element[j]; pivotValue -= value * region[iRow]; } if (fabs(pivotValue) > tolerance) { regionIndex[numberNonZero++] = i; region[i] = pivotValue; } else { region[i] = 0; } } regionSparse->setNumElements(numberNonZero); //double * region2 = temp.denseVector(); //for (i=0;idenseVector(); #ifdef COIN_DEBUG regionSparse->checkClean(); #endif int last = numberRowsExtra_ - 1; const int *indexRow = indexRowR_; const CoinFactorizationDouble *element = elementR_; const int *startColumn = startColumnR_.array() - numberRows_; //move using permute_ (stored in inverse fashion) const int *permute = permute_.array(); for (int i = last; i >= numberRows_; i--) { int putRow = permute[i]; CoinFactorizationDouble pivotValue = region[i]; //zero out old permuted region[i] = 0.0; if (pivotValue) { for (int j = startColumn[i]; j < startColumn[i + 1]; j++) { CoinFactorizationDouble value = element[j]; int iRow = indexRow[j]; region[iRow] -= value * pivotValue; } region[putRow] = pivotValue; //putRow must have been zero before so put on list ?? //but can't catch up so will have to do L from end //unless we update lookBtran in replaceColumn - yes } } } // Updates part of column transpose (BTRANR) when sparse void CoinFactorization::updateColumnTransposeRSparse(CoinIndexedVector *regionSparse) const { double *COIN_RESTRICT region = regionSparse->denseVector(); int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); int numberNonZero = regionSparse->getNumElements(); double tolerance = zeroTolerance_; #ifdef COIN_DEBUG regionSparse->checkClean(); #endif int last = numberRowsExtra_ - 1; const int *indexRow = indexRowR_; const CoinFactorizationDouble *element = elementR_; const int *startColumn = startColumnR_.array() - numberRows_; //move using permute_ (stored in inverse fashion) const int *permute = permute_.array(); // we can use sparse_ as temporary array #if ABOCA_LITE_FACTORIZATION == 0 #define sparseOffset 0 #else int sparseOffset = ((regionSparse->capacity() & 0x80000000) != 0) ? sparseOffset_ : 0; #endif int *COIN_RESTRICT spare = sparse_.array() + sparseOffset; for (int i = 0; i < numberNonZero; i++) { spare[regionIndex[i]] = i; } // still need to do in correct order (for now) for (int i = last; i >= numberRows_; i--) { int putRow = permute[i]; assert(putRow <= i); CoinFactorizationDouble pivotValue = region[i]; //zero out old permuted region[i] = 0.0; if (pivotValue) { for (int j = startColumn[i]; j < startColumn[i + 1]; j++) { CoinFactorizationDouble value = element[j]; int iRow = indexRow[j]; CoinFactorizationDouble oldValue = region[iRow]; CoinFactorizationDouble newValue = oldValue - value * pivotValue; if (oldValue) { if (newValue) region[iRow] = newValue; else region[iRow] = COIN_INDEXED_REALLY_TINY_ELEMENT; } else if (fabs(newValue) > tolerance) { region[iRow] = newValue; spare[iRow] = numberNonZero; regionIndex[numberNonZero++] = iRow; } } region[putRow] = pivotValue; // modify list int position = spare[i]; regionIndex[position] = putRow; spare[putRow] = position; } } regionSparse->setNumElements(numberNonZero); } // updateColumnTransposeR. Updates part of column (FTRANR) void CoinFactorization::updateColumnTransposeR(CoinIndexedVector *regionSparse) const { if (numberRowsExtra_ == numberRows_) return; int numberNonZero = regionSparse->getNumElements(); if (numberNonZero) { if (numberNonZero < (sparseThreshold_ << 2) || (!numberL_ && sparse_.array())) { updateColumnTransposeRSparse(regionSparse); if (collectStatistics_) btranCountAfterR_ += regionSparse->getNumElements(); } else { updateColumnTransposeRDensish(regionSparse); // we have lost indices // make sure won't try and go sparse again if (collectStatistics_) btranCountAfterR_ += CoinMin((numberNonZero << 1), numberRows_); regionSparse->setNumElements(numberRows_ + 1); } } } // makes a row copy of L void CoinFactorization::goSparse() { if (!sparseThreshold_) { if (numberRows_ > 300) { if (numberRows_ < 10000) { sparseThreshold_ = CoinMin(numberRows_ / 6, 500); sparseThreshold2_ = numberRows_ >> 2; //sparseThreshold2_=sparseThreshold_; } else { sparseThreshold_ = 1000; sparseThreshold2_ = numberRows_ >> 2; sparseThreshold_ = 500; sparseThreshold2_ = CoinMax(sparseThreshold_, numberRows_ >> 3); //sparseThreshold2_=sparseThreshold_; } //printf("sparseThreshold %d threshold2 %d - numberDense %d\n", // sparseThreshold_,sparseThreshold2_,numberDense_); } else { sparseThreshold_ = 0; sparseThreshold2_ = 0; } } else { if (!sparseThreshold_ && numberRows_ > 400) { sparseThreshold_ = CoinMin((numberRows_ - 300) / 9, 1000); } sparseThreshold2_ = sparseThreshold_; } if (!sparseThreshold_) return; // allow for stack, list, next and char map of mark int nRowIndex = (maximumRowsExtra_ + CoinSizeofAsInt(int) - 1) / CoinSizeofAsInt(char); int nInBig = static_cast< int >(sizeof(int) / sizeof(int)); assert(nInBig >= 1); #if ABOCA_LITE_FACTORIZATION == 0 sparse_.conditionalNew((2 + nInBig) * maximumRowsExtra_ + nRowIndex); // zero out mark memset(sparse_.array() + (2 + nInBig) * maximumRowsExtra_, 0, maximumRowsExtra_ * sizeof(char)); #else sparseOffset_ = (2 + nInBig) * maximumRowsExtra_ + nRowIndex; sparse_.conditionalNew(2 * sparseOffset_); // zero out mark memset(sparse_.array() + (2 + nInBig) * maximumRowsExtra_, 0, maximumRowsExtra_ * sizeof(char)); memset(sparse_.array() + sparseOffset_ + (2 + nInBig) * maximumRowsExtra_, 0, maximumRowsExtra_ * sizeof(char)); #endif elementByRowL_.conditionalDelete(); indexColumnL_.conditionalDelete(); startRowL_.conditionalNew(numberRows_ + 1); if (lengthAreaL_) { elementByRowL_.conditionalNew(lengthAreaL_); indexColumnL_.conditionalNew(lengthAreaL_); } // counts int *COIN_RESTRICT startRowL = startRowL_.array(); CoinZeroN(startRowL, numberRows_); const int *startColumnL = startColumnL_.array(); CoinFactorizationDouble *COIN_RESTRICT elementL = elementL_.array(); const int *indexRowL = indexRowL_.array(); for (int i = baseL_; i < baseL_ + numberL_; i++) { for (int j = startColumnL[i]; j < startColumnL[i + 1]; j++) { int iRow = indexRowL[j]; startRowL[iRow]++; } } // convert count to lasts int count = 0; for (int i = 0; i < numberRows_; i++) { int numberInRow = startRowL[i]; count += numberInRow; startRowL[i] = count; } startRowL[numberRows_] = count; // now insert CoinFactorizationDouble *COIN_RESTRICT elementByRowL = elementByRowL_.array(); int *COIN_RESTRICT indexColumnL = indexColumnL_.array(); for (int i = baseL_ + numberL_ - 1; i >= baseL_; i--) { for (int j = startColumnL[i]; j < startColumnL[i + 1]; j++) { int iRow = indexRowL[j]; int start = startRowL[iRow] - 1; startRowL[iRow] = start; elementByRowL[start] = elementL[j]; indexColumnL[start] = i; } } } // set sparse threshold void CoinFactorization::sparseThreshold(int value) { if (value > 0 && sparseThreshold_) { sparseThreshold_ = value; sparseThreshold2_ = sparseThreshold_; } else if (!value && sparseThreshold_) { // delete copy sparseThreshold_ = 0; sparseThreshold2_ = 0; elementByRowL_.conditionalDelete(); startRowL_.conditionalDelete(); indexColumnL_.conditionalDelete(); sparse_.conditionalDelete(); } else if (value > 0 && !sparseThreshold_) { if (value > 1) sparseThreshold_ = value; else sparseThreshold_ = 0; sparseThreshold2_ = sparseThreshold_; goSparse(); } } void CoinFactorization::maximumPivots(int value) { if (value > 0) { maximumPivots_ = value; } } void CoinFactorization::messageLevel(int value) { if (value > 0 && value < 16) { messageLevel_ = value; } } void CoinFactorization::pivotTolerance(double value) { if (value > 0.0 && value <= 1.0) { //if (value 0.0 && value < 1.0) { zeroTolerance_ = value; } } #ifndef COIN_FAST_CODE void CoinFactorization::slackValue(double value) { if (value >= 0.0) { slackValue_ = 1.0; } else { slackValue_ = -1.0; } } #endif // Reset all sparsity etc statistics void CoinFactorization::resetStatistics() { #if 0 collectStatistics_=false; #endif /// Below are all to collect ftranCountInput_ = 0.0; ftranCountAfterL_ = 0.0; ftranCountAfterR_ = 0.0; ftranCountAfterU_ = 0.0; btranCountInput_ = 0.0; btranCountAfterU_ = 0.0; btranCountAfterR_ = 0.0; btranCountAfterL_ = 0.0; /// We can roll over factorizations numberFtranCounts_ = 0; numberBtranCounts_ = 0; /// While these are averages collected over last ftranAverageAfterL_ = 0.0; ftranAverageAfterR_ = 0.0; ftranAverageAfterU_ = 0.0; btranAverageAfterU_ = 0.0; btranAverageAfterR_ = 0.0; btranAverageAfterL_ = 0.0; } /* getColumnSpaceIterate. Gets space for one extra U element in Column may have to do compression (returns true) also moves existing vector. Returns -1 if no memory or where element was put Used by replaceRow (turns off R version) */ int CoinFactorization::getColumnSpaceIterate(int iColumn, double value, int iRow) { if (numberInColumnPlus_.array()) { numberInColumnPlus_.conditionalDelete(); } int *COIN_RESTRICT numberInRow = numberInRow_.array(); int *COIN_RESTRICT numberInColumn = numberInColumn_.array(); int *COIN_RESTRICT nextColumn = nextColumn_.array(); int *COIN_RESTRICT lastColumn = lastColumn_.array(); int number = numberInColumn[iColumn]; int iNext = nextColumn[iColumn]; int *COIN_RESTRICT startColumnU = startColumnU_.array(); int *COIN_RESTRICT startRowU = startRowU_.array(); int space = startColumnU[iNext] - startColumnU[iColumn]; int put; int *COIN_RESTRICT convertRowToColumnU = convertRowToColumnU_.array(); int *COIN_RESTRICT indexColumnU = indexColumnU_.array(); CoinFactorizationDouble *COIN_RESTRICT elementU = elementU_.array(); int *COIN_RESTRICT indexRowU = indexRowU_.array(); if (space < number + 1) { //see if it can go in at end if (lengthAreaU_ - startColumnU[maximumColumnsExtra_] < number + 1) { //compression int jColumn = nextColumn[maximumColumnsExtra_]; int put = 0; while (jColumn != maximumColumnsExtra_) { //move int get; int getEnd; get = startColumnU[jColumn]; getEnd = get + numberInColumn[jColumn]; startColumnU[jColumn] = put; int i; for (i = get; i < getEnd; i++) { CoinFactorizationDouble value = elementU[i]; if (value) { indexRowU[put] = indexRowU[i]; elementU[put] = value; put++; } else { numberInColumn[jColumn]--; } } jColumn = nextColumn[jColumn]; } numberCompressions_++; startColumnU[maximumColumnsExtra_] = put; //space for cross reference int *convertRowToColumn = convertRowToColumnU_.array(); int j = 0; int *startRow = startRowU_.array(); int iRow; for (iRow = 0; iRow < numberRowsExtra_; iRow++) { startRow[iRow] = j; j += numberInRow[iRow]; } factorElements_ = j; CoinZeroN(numberInRow, numberRowsExtra_); int i; for (i = 0; i < numberRowsExtra_; i++) { int start = startColumnU[i]; int end = start + numberInColumn[i]; int j; for (j = start; j < end; j++) { int iRow = indexRowU[j]; int iLook = numberInRow[iRow]; numberInRow[iRow] = iLook + 1; int k = startRow[iRow] + iLook; indexColumnU[k] = i; convertRowToColumn[k] = j; } } } // Still may not be room (as iColumn was still in) if (lengthAreaU_ - startColumnU[maximumColumnsExtra_] >= number + 1) { int next = nextColumn[iColumn]; int last = lastColumn[iColumn]; //out nextColumn[last] = next; lastColumn[next] = last; put = startColumnU[maximumColumnsExtra_]; //in at end last = lastColumn[maximumColumnsExtra_]; nextColumn[last] = iColumn; lastColumn[maximumColumnsExtra_] = iColumn; lastColumn[iColumn] = last; nextColumn[iColumn] = maximumColumnsExtra_; //move int get = startColumnU[iColumn]; startColumnU[iColumn] = put; int i = 0; for (i = 0; i < number; i++) { CoinFactorizationDouble value = elementU[get]; int iRow = indexRowU[get++]; if (value) { elementU[put] = value; int n = numberInRow[iRow]; int start = startRowU[iRow]; int j; for (j = start; j < start + n; j++) { if (indexColumnU[j] == iColumn) { convertRowToColumnU[j] = put; break; } } assert(j < start + n); indexRowU[put++] = iRow; } else { assert(!numberInRow[iRow]); numberInColumn[iColumn]--; } } //insert int n = numberInRow[iRow]; int start = startRowU[iRow]; int j; for (j = start; j < start + n; j++) { if (indexColumnU[j] == iColumn) { convertRowToColumnU[j] = put; break; } } assert(j < start + n); elementU[put] = value; indexRowU[put] = iRow; numberInColumn[iColumn]++; //add 4 for luck startColumnU[maximumColumnsExtra_] = CoinMin(static_cast< int >(put + 4), lengthAreaU_); } else { // no room put = -1; } } else { // just slot in put = startColumnU[iColumn] + numberInColumn[iColumn]; int n = numberInRow[iRow]; int start = startRowU[iRow]; int j; for (j = start; j < start + n; j++) { if (indexColumnU[j] == iColumn) { convertRowToColumnU[j] = put; break; } } assert(j < start + n); elementU[put] = value; indexRowU[put] = iRow; numberInColumn[iColumn]++; } return put; } /* Replaces one Row in basis, At present assumes just a singleton on row is in basis returns 0=OK, 1=Probably OK, 2=singular, 3 no space */ int CoinFactorization::replaceRow(int whichRow, int iNumberInRow, const int indicesColumn[], const double elements[]) { if (!iNumberInRow) return 0; int next = nextRow_.array()[whichRow]; int *numberInRow = numberInRow_.array(); #ifndef NDEBUG const int *numberInColumn = numberInColumn_.array(); #endif int numberNow = numberInRow[whichRow]; const int *startRowU = startRowU_.array(); CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); int start = startRowU[whichRow]; CoinFactorizationDouble *elementU = elementU_.array(); int *convertRowToColumnU = convertRowToColumnU_.array(); if (numberNow && numberNow < 100) { int ind[100]; CoinMemcpyN(indexColumnU_.array() + start, numberNow, ind); int i; for (i = 0; i < iNumberInRow; i++) { int jColumn = indicesColumn[i]; int k; for (k = 0; k < numberNow; k++) { if (ind[k] == jColumn) { ind[k] = -1; break; } } if (k == numberNow) { printf("new column %d not in current\n", jColumn); } else { k = convertRowToColumnU[start + k]; CoinFactorizationDouble oldValue = elementU[k]; CoinFactorizationDouble newValue = elements[i] * pivotRegion[jColumn]; if (fabs(oldValue - newValue) > 1.0e-3) printf("column %d, old value %g new %g (el %g, piv %g)\n", jColumn, oldValue, newValue, elements[i], pivotRegion[jColumn]); } } for (i = 0; i < numberNow; i++) { if (ind[i] >= 0) printf("current column %d not in new\n", ind[i]); } assert(numberNow == iNumberInRow); } assert(numberInColumn[whichRow] == 0); assert(pivotRegion[whichRow] == 1.0); int space; int returnCode = 0; space = startRowU[next] - (start + iNumberInRow); if (space < 0) { if (!getRowSpaceIterate(whichRow, iNumberInRow)) returnCode = 3; } //return 0; if (!returnCode) { int *indexColumnU = indexColumnU_.array(); numberInRow[whichRow] = iNumberInRow; start = startRowU[whichRow]; int i; for (i = 0; i < iNumberInRow; i++) { int iColumn = indicesColumn[i]; indexColumnU[start + i] = iColumn; assert(iColumn > whichRow); CoinFactorizationDouble value = elements[i] * pivotRegion[iColumn]; #if 0 int k; bool found=false; for (k=startColumnU[iColumn];k= 0) { convertRowToColumnU[start + i] = iWhere; } else { returnCode = 3; break; } #if 0 } else { convertRowToColumnU[start+i] = k; } #endif } } return returnCode; } // Takes out all entries for given rows void CoinFactorization::emptyRows(int numberToEmpty, const int which[]) { int i; int *delRow = new int[maximumRowsExtra_]; int *indexRowU = indexRowU_.array(); #ifndef NDEBUG CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); #endif for (i = 0; i < maximumRowsExtra_; i++) delRow[i] = 0; int *numberInRow = numberInRow_.array(); int *numberInColumn = numberInColumn_.array(); CoinFactorizationDouble *elementU = elementU_.array(); const int *startColumnU = startColumnU_.array(); for (i = 0; i < numberToEmpty; i++) { int iRow = which[i]; delRow[iRow] = 1; assert(numberInColumn[iRow] == 0); assert(pivotRegion[iRow] == 1.0); numberInRow[iRow] = 0; } for (i = 0; i < numberU_; i++) { int k; int j = startColumnU[i]; for (k = startColumnU[i]; k < startColumnU[i] + numberInColumn[i]; k++) { int iRow = indexRowU[k]; if (!delRow[iRow]) { indexRowU[j] = indexRowU[k]; elementU[j++] = elementU[k]; } } numberInColumn[i] = j - startColumnU[i]; } delete[] delRow; //space for cross reference int *convertRowToColumn = convertRowToColumnU_.array(); int j = 0; int *startRow = startRowU_.array(); int iRow; for (iRow = 0; iRow < numberRows_; iRow++) { startRow[iRow] = j; j += numberInRow[iRow]; } factorElements_ = j; CoinZeroN(numberInRow, numberRows_); int *indexColumnU = indexColumnU_.array(); for (i = 0; i < numberRows_; i++) { int start = startColumnU[i]; int end = start + numberInColumn[i]; int j; for (j = start; j < end; j++) { int iRow = indexRowU[j]; int iLook = numberInRow[iRow]; numberInRow[iRow] = iLook + 1; int k = startRow[iRow] + iLook; indexColumnU[k] = i; convertRowToColumn[k] = j; } } } // Updates part of column PFI (FTRAN) void CoinFactorization::updateColumnPFI(CoinIndexedVector *regionSparse) const { double *region = regionSparse->denseVector(); int *regionIndex = regionSparse->getIndices(); double tolerance = zeroTolerance_; const int *startColumn = startColumnU_.array() + numberRows_; const int *indexRow = indexRowU_.array(); const CoinFactorizationDouble *element = elementU_.array(); int numberNonZero = regionSparse->getNumElements(); int i; #ifdef COIN_DEBUG for (i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; assert(iRow >= 0 && iRow < numberRows_); assert(region[iRow]); } #endif const CoinFactorizationDouble *pivotRegion = pivotRegion_.array() + numberRows_; const int *pivotColumn = pivotColumn_.array() + numberRows_; for (i = 0; i < numberPivots_; i++) { int pivotRow = pivotColumn[i]; CoinFactorizationDouble pivotValue = region[pivotRow]; if (pivotValue) { if (fabs(pivotValue) > tolerance) { for (int j = startColumn[i]; j < startColumn[i + 1]; j++) { int iRow = indexRow[j]; CoinFactorizationDouble oldValue = region[iRow]; CoinFactorizationDouble value = oldValue - pivotValue * element[j]; if (!oldValue) { if (fabs(value) > tolerance) { region[iRow] = value; regionIndex[numberNonZero++] = iRow; } } else { if (fabs(value) > tolerance) { region[iRow] = value; } else { region[iRow] = COIN_INDEXED_REALLY_TINY_ELEMENT; } } } pivotValue *= pivotRegion[i]; region[pivotRow] = pivotValue; } else if (pivotValue) { region[pivotRow] = COIN_INDEXED_REALLY_TINY_ELEMENT; } } } regionSparse->setNumElements(numberNonZero); } // Updates part of column transpose PFI (BTRAN), void CoinFactorization::updateColumnTransposePFI(CoinIndexedVector *regionSparse) const { double *region = regionSparse->denseVector(); int numberNonZero = regionSparse->getNumElements(); int *index = regionSparse->getIndices(); int i; #ifdef COIN_DEBUG for (i = 0; i < numberNonZero; i++) { int iRow = index[i]; assert(iRow >= 0 && iRow < numberRows_); assert(region[iRow]); } #endif const int *pivotColumn = pivotColumn_.array() + numberRows_; const CoinFactorizationDouble *pivotRegion = pivotRegion_.array() + numberRows_; double tolerance = zeroTolerance_; const int *startColumn = startColumnU_.array() + numberRows_; const int *indexRow = indexRowU_.array(); const CoinFactorizationDouble *element = elementU_.array(); for (i = numberPivots_ - 1; i >= 0; i--) { int pivotRow = pivotColumn[i]; CoinFactorizationDouble pivotValue = region[pivotRow] * pivotRegion[i]; for (int j = startColumn[i]; j < startColumn[i + 1]; j++) { int iRow = indexRow[j]; CoinFactorizationDouble value = element[j]; pivotValue -= value * region[iRow]; } //pivotValue *= pivotRegion[i]; if (fabs(pivotValue) > tolerance) { if (!region[pivotRow]) index[numberNonZero++] = pivotRow; region[pivotRow] = pivotValue; } else { if (region[pivotRow]) region[pivotRow] = COIN_INDEXED_REALLY_TINY_ELEMENT; } } //set counts regionSparse->setNumElements(numberNonZero); } /* Replaces one Column to basis for PFI returns 0=OK, 1=Probably OK, 2=singular, 3=no room Not sure what checkBeforeModifying means for PFI. */ int CoinFactorization::replaceColumnPFI(CoinIndexedVector *regionSparse, int pivotRow, double alpha) { int *startColumn = startColumnU_.array() + numberRows_; int *indexRow = indexRowU_.array(); CoinFactorizationDouble *element = elementU_.array(); CoinFactorizationDouble *pivotRegion = pivotRegion_.array() + numberRows_; // This has incoming column const double *region = regionSparse->denseVector(); const int *index = regionSparse->getIndices(); int numberNonZero = regionSparse->getNumElements(); int iColumn = numberPivots_; if (!iColumn) startColumn[0] = startColumn[maximumColumnsExtra_]; int start = startColumn[iColumn]; //return at once if too many iterations if (numberPivots_ >= maximumPivots_) { return 5; } if (lengthAreaU_ - (start + numberNonZero) < 0) { return 3; } int i; if (numberPivots_) { if (fabs(alpha) < 1.0e-5) { if (fabs(alpha) < 1.0e-7) return 2; else return 1; } } else { if (fabs(alpha) < 1.0e-8) return 2; } CoinFactorizationDouble pivotValue = 1.0 / alpha; pivotRegion[iColumn] = pivotValue; double tolerance = zeroTolerance_; const int *pivotColumn = pivotColumn_.array(); // Operations done before permute back if (regionSparse->packedMode()) { for (i = 0; i < numberNonZero; i++) { int iRow = index[i]; if (iRow != pivotRow) { if (fabs(region[i]) > tolerance) { indexRow[start] = pivotColumn[iRow]; element[start++] = region[i] * pivotValue; } } } } else { for (i = 0; i < numberNonZero; i++) { int iRow = index[i]; if (iRow != pivotRow) { if (fabs(region[iRow]) > tolerance) { indexRow[start] = pivotColumn[iRow]; element[start++] = region[iRow] * pivotValue; } } } } numberPivots_++; numberNonZero = start - startColumn[iColumn]; startColumn[numberPivots_] = start; totalElements_ += numberNonZero; int *pivotColumn2 = pivotColumn_.array() + numberRows_; pivotColumn2[iColumn] = pivotColumn[pivotRow]; return 0; } // = CoinFactorization &CoinFactorization::operator=(const CoinFactorization &other) { if (this != &other) { gutsOfDestructor(2); gutsOfInitialize(3); persistenceFlag_ = other.persistenceFlag_; gutsOfCopy(other); } return *this; } void CoinFactorization::gutsOfCopy(const CoinFactorization &other) { int lengthU = other.lengthAreaU_ + EXTRA_U_SPACE; elementU_.allocate(other.elementU_, lengthU * CoinSizeofAsInt(CoinFactorizationDouble)); indexRowU_.allocate(other.indexRowU_, lengthU * CoinSizeofAsInt(int)); elementL_.allocate(other.elementL_, other.lengthAreaL_ * CoinSizeofAsInt(CoinFactorizationDouble)); indexRowL_.allocate(other.indexRowL_, other.lengthAreaL_ * CoinSizeofAsInt(int)); startColumnL_.allocate(other.startColumnL_, (other.numberRows_ + 1) * CoinSizeofAsInt(int)); int extraSpace; if (other.numberInColumnPlus_.array()) { extraSpace = other.maximumPivots_ + 1 + other.maximumColumnsExtra_ + 1; } else { extraSpace = other.maximumPivots_ + 1; } startColumnR_.allocate(other.startColumnR_, extraSpace * CoinSizeofAsInt(int)); pivotRegion_.allocate(other.pivotRegion_, (other.maximumRowsExtra_ + 1) * CoinSizeofAsInt(CoinFactorizationDouble)); permuteBack_.allocate(other.permuteBack_, (other.maximumRowsExtra_ + 1) * CoinSizeofAsInt(int)); permute_.allocate(other.permute_, (other.maximumRowsExtra_ + 1) * CoinSizeofAsInt(int)); pivotColumnBack_.allocate(other.pivotColumnBack_, (other.maximumRowsExtra_ + 1) * CoinSizeofAsInt(int)); firstCount_.allocate(other.firstCount_, (other.maximumRowsExtra_ + 1) * CoinSizeofAsInt(int)); startColumnU_.allocate(other.startColumnU_, (other.maximumColumnsExtra_ + 1) * CoinSizeofAsInt(int)); numberInColumn_.allocate(other.numberInColumn_, (other.maximumColumnsExtra_ + 1) * CoinSizeofAsInt(int)); pivotColumn_.allocate(other.pivotColumn_, (other.maximumColumnsExtra_ + 1) * CoinSizeofAsInt(int)); nextColumn_.allocate(other.nextColumn_, (other.maximumColumnsExtra_ + 1) * CoinSizeofAsInt(int)); lastColumn_.allocate(other.lastColumn_, (other.maximumColumnsExtra_ + 1) * CoinSizeofAsInt(int)); indexColumnU_.allocate(other.indexColumnU_, lengthU * CoinSizeofAsInt(int)); nextRow_.allocate(other.nextRow_, (other.maximumRowsExtra_ + 1) * CoinSizeofAsInt(int)); lastRow_.allocate(other.lastRow_, (other.maximumRowsExtra_ + 1) * CoinSizeofAsInt(int)); const int *convertUOther = other.convertRowToColumnU_.array(); #if COIN_ONE_ETA_COPY if (convertUOther) { #endif convertRowToColumnU_.allocate(other.convertRowToColumnU_, lengthU * CoinSizeofAsInt(int)); startRowU_.allocate(other.startRowU_, (other.maximumRowsExtra_ + 1) * CoinSizeofAsInt(int)); numberInRow_.allocate(other.numberInRow_, (other.maximumRowsExtra_ + 1) * CoinSizeofAsInt(int)); #if COIN_ONE_ETA_COPY } #endif if (other.sparseThreshold_) { elementByRowL_.allocate(other.elementByRowL_, other.lengthAreaL_); indexColumnL_.allocate(other.indexColumnL_, other.lengthAreaL_); startRowL_.allocate(other.startRowL_, other.numberRows_ + 1); } numberTrials_ = other.numberTrials_; biggerDimension_ = other.biggerDimension_; relaxCheck_ = other.relaxCheck_; numberSlacks_ = other.numberSlacks_; numberU_ = other.numberU_; maximumU_ = other.maximumU_; lengthU_ = other.lengthU_; lengthAreaU_ = other.lengthAreaU_; numberL_ = other.numberL_; baseL_ = other.baseL_; lengthL_ = other.lengthL_; lengthAreaL_ = other.lengthAreaL_; numberR_ = other.numberR_; lengthR_ = other.lengthR_; lengthAreaR_ = other.lengthAreaR_; pivotTolerance_ = other.pivotTolerance_; zeroTolerance_ = other.zeroTolerance_; #ifndef COIN_FAST_CODE slackValue_ = other.slackValue_; #endif areaFactor_ = other.areaFactor_; numberRows_ = other.numberRows_; numberRowsExtra_ = other.numberRowsExtra_; maximumRowsExtra_ = other.maximumRowsExtra_; numberColumns_ = other.numberColumns_; numberColumnsExtra_ = other.numberColumnsExtra_; maximumColumnsExtra_ = other.maximumColumnsExtra_; maximumPivots_ = other.maximumPivots_; numberGoodU_ = other.numberGoodU_; numberGoodL_ = other.numberGoodL_; numberPivots_ = other.numberPivots_; messageLevel_ = other.messageLevel_; totalElements_ = other.totalElements_; factorElements_ = other.factorElements_; status_ = other.status_; doForrestTomlin_ = other.doForrestTomlin_; #if 0 collectStatistics_=other.collectStatistics_; #endif ftranCountInput_ = other.ftranCountInput_; ftranCountAfterL_ = other.ftranCountAfterL_; ftranCountAfterR_ = other.ftranCountAfterR_; ftranCountAfterU_ = other.ftranCountAfterU_; btranCountInput_ = other.btranCountInput_; btranCountAfterU_ = other.btranCountAfterU_; btranCountAfterR_ = other.btranCountAfterR_; btranCountAfterL_ = other.btranCountAfterL_; numberFtranCounts_ = other.numberFtranCounts_; numberBtranCounts_ = other.numberBtranCounts_; ftranAverageAfterL_ = other.ftranAverageAfterL_; ftranAverageAfterR_ = other.ftranAverageAfterR_; ftranAverageAfterU_ = other.ftranAverageAfterU_; btranAverageAfterU_ = other.btranAverageAfterU_; btranAverageAfterR_ = other.btranAverageAfterR_; btranAverageAfterL_ = other.btranAverageAfterL_; biasLU_ = other.biasLU_; sparseThreshold_ = other.sparseThreshold_; sparseThreshold2_ = other.sparseThreshold2_; int space = lengthAreaL_ - lengthL_; numberDense_ = other.numberDense_; denseThreshold_ = other.denseThreshold_; if (numberDense_) { denseArea_ = new double[numberDense_ * numberDense_]; denseAreaAddress_ = denseArea_; CoinMemcpyN(other.denseAreaAddress_, numberDense_ * numberDense_, denseAreaAddress_); densePermute_ = new int[numberDense_]; CoinMemcpyN(other.densePermute_, numberDense_, densePermute_); } lengthAreaR_ = space; elementR_ = elementL_.array() + lengthL_; indexRowR_ = indexRowL_.array() + lengthL_; workArea_ = other.workArea_; workArea2_ = other.workArea2_; //now copy everything //assuming numberRowsExtra==numberColumnsExtra if (numberRowsExtra_) { if (convertUOther) { CoinMemcpyN(other.startRowU_.array(), numberRowsExtra_ + 1, startRowU_.array()); CoinMemcpyN(other.numberInRow_.array(), numberRowsExtra_ + 1, numberInRow_.array()); startRowU_.array()[maximumRowsExtra_] = other.startRowU_.array()[maximumRowsExtra_]; } CoinMemcpyN(other.pivotRegion_.array(), numberRowsExtra_, pivotRegion_.array()); CoinMemcpyN(other.permuteBack_.array(), numberRowsExtra_ + 1, permuteBack_.array()); CoinMemcpyN(other.permute_.array(), numberRowsExtra_ + 1, permute_.array()); CoinMemcpyN(other.pivotColumnBack_.array(), numberRowsExtra_ + 1, pivotColumnBack_.array()); CoinMemcpyN(other.firstCount_.array(), numberRowsExtra_ + 1, firstCount_.array()); CoinMemcpyN(other.startColumnU_.array(), numberRowsExtra_ + 1, startColumnU_.array()); CoinMemcpyN(other.numberInColumn_.array(), numberRowsExtra_ + 1, numberInColumn_.array()); CoinMemcpyN(other.pivotColumn_.array(), numberRowsExtra_ + 1, pivotColumn_.array()); CoinMemcpyN(other.nextColumn_.array(), numberRowsExtra_ + 1, nextColumn_.array()); CoinMemcpyN(other.lastColumn_.array(), numberRowsExtra_ + 1, lastColumn_.array()); CoinMemcpyN(other.startColumnR_.array(), numberRowsExtra_ - numberColumns_ + 1, startColumnR_.array()); //extra one at end startColumnU_.array()[maximumColumnsExtra_] = other.startColumnU_.array()[maximumColumnsExtra_]; nextColumn_.array()[maximumColumnsExtra_] = other.nextColumn_.array()[maximumColumnsExtra_]; lastColumn_.array()[maximumColumnsExtra_] = other.lastColumn_.array()[maximumColumnsExtra_]; CoinMemcpyN(other.nextRow_.array(), numberRowsExtra_ + 1, nextRow_.array()); CoinMemcpyN(other.lastRow_.array(), numberRowsExtra_ + 1, lastRow_.array()); nextRow_.array()[maximumRowsExtra_] = other.nextRow_.array()[maximumRowsExtra_]; lastRow_.array()[maximumRowsExtra_] = other.lastRow_.array()[maximumRowsExtra_]; } CoinMemcpyN(other.elementR_, lengthR_, elementR_); CoinMemcpyN(other.indexRowR_, lengthR_, indexRowR_); //row and column copies of U /* as elements of U may have been zeroed but column counts zero copy all elements */ const int *startColumnU = startColumnU_.array(); const int *numberInColumn = numberInColumn_.array(); #ifndef NDEBUG int maxU = 0; for (int iRow = 0; iRow < numberRowsExtra_; iRow++) { int start = startColumnU[iRow]; int numberIn = numberInColumn[iRow]; maxU = CoinMax(maxU, start + numberIn); } assert(maximumU_ >= maxU); #endif CoinMemcpyN(other.elementU_.array(), maximumU_, elementU_.array()); #if COIN_ONE_ETA_COPY if (convertUOther) { #endif const int *indexColumnUOther = other.indexColumnU_.array(); int *convertU = convertRowToColumnU_.array(); int *indexColumnU = indexColumnU_.array(); const int *startRowU = startRowU_.array(); const int *numberInRow = numberInRow_.array(); for (int iRow = 0; iRow < numberRowsExtra_; iRow++) { //row int start = startRowU[iRow]; int numberIn = numberInRow[iRow]; CoinMemcpyN(indexColumnUOther + start, numberIn, indexColumnU + start); CoinMemcpyN(convertUOther + start, numberIn, convertU + start); } #if COIN_ONE_ETA_COPY } #endif const int *indexRowUOther = other.indexRowU_.array(); int *indexRowU = indexRowU_.array(); for (int iRow = 0; iRow < numberRowsExtra_; iRow++) { //column int start = startColumnU[iRow]; int numberIn = numberInColumn[iRow]; CoinMemcpyN(indexRowUOther + start, numberIn, indexRowU + start); } // L is contiguous if (numberRows_) CoinMemcpyN(other.startColumnL_.array(), numberRows_ + 1, startColumnL_.array()); CoinMemcpyN(other.elementL_.array(), lengthL_, elementL_.array()); CoinMemcpyN(other.indexRowL_.array(), lengthL_, indexRowL_.array()); if (other.sparseThreshold_) { goSparse(); } } // See if worth going sparse void CoinFactorization::checkSparse() { // See if worth going sparse and when if (numberFtranCounts_ > 100) { ftranCountInput_ = CoinMax(ftranCountInput_, 1.0); ftranAverageAfterL_ = CoinMax(ftranCountAfterL_ / ftranCountInput_, 1.0); ftranAverageAfterR_ = CoinMax(ftranCountAfterR_ / ftranCountAfterL_, 1.0); ftranAverageAfterU_ = CoinMax(ftranCountAfterU_ / ftranCountAfterR_, 1.0); if (btranCountInput_ && btranCountAfterU_ && btranCountAfterR_) { btranAverageAfterU_ = CoinMax(btranCountAfterU_ / btranCountInput_, 1.0); btranAverageAfterR_ = CoinMax(btranCountAfterR_ / btranCountAfterU_, 1.0); btranAverageAfterL_ = CoinMax(btranCountAfterL_ / btranCountAfterR_, 1.0); } else { // we have not done any useful btrans (values pass?) btranAverageAfterU_ = 1.0; btranAverageAfterR_ = 1.0; btranAverageAfterL_ = 1.0; } } // scale back ftranCountInput_ *= 0.8; ftranCountAfterL_ *= 0.8; ftranCountAfterR_ *= 0.8; ftranCountAfterU_ *= 0.8; btranCountInput_ *= 0.8; btranCountAfterU_ *= 0.8; btranCountAfterR_ *= 0.8; btranCountAfterL_ *= 0.8; } // Condition number - product of pivots after factorization double CoinFactorization::conditionNumber() const { double condition = 1.0; const CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); for (int i = 0; i < numberRows_; i++) { condition *= pivotRegion[i]; } condition = CoinMax(fabs(condition), 1.0e-50); return 1.0 / condition; } #ifdef ABC_USE_COIN_FACTORIZATION /* Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial update already in U */ double CoinFactorization::checkReplacePart1(CoinIndexedVector *regionSparse, int pivotRow) { assert(numberU_ <= numberRowsExtra_); int *COIN_RESTRICT startColumnU = startColumnU_.array(); CoinFactorizationDouble *COIN_RESTRICT element; int *COIN_RESTRICT numberInRow = numberInRow_.array(); int *COIN_RESTRICT numberInColumn = numberInColumn_.array(); int realPivotRow; realPivotRow = pivotColumn_.array()[pivotRow]; //zeroed out region double *COIN_RESTRICT region = regionSparse->denseVector(); element = elementU_.array(); //get entries in row (pivot not stored) int numberNonZero = 0; int *COIN_RESTRICT indexColumn = indexColumnU_.array(); int *COIN_RESTRICT convertRowToColumn = convertRowToColumnU_.array(); int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); int *COIN_RESTRICT startRow = startRowU_.array(); int start = 0; int end = 0; assert(convertRowToColumn); start = startRow[realPivotRow]; end = start + numberInRow[realPivotRow]; int smallestIndex = numberRowsExtra_; for (int i = start; i < end; i++) { int iColumn = indexColumn[i]; smallestIndex = CoinMin(smallestIndex, iColumn); int j = convertRowToColumn[i]; region[iColumn] = element[j]; regionIndex[numberNonZero++] = iColumn; } //do BTRAN - finding first one to use regionSparse->setNumElements(numberNonZero); updateColumnTransposeU(regionSparse, smallestIndex); numberNonZero = regionSparse->getNumElements(); CoinFactorizationDouble saveFromU = 0.0; int startU = startColumnU[numberColumnsExtra_]; int *COIN_RESTRICT indexU = &indexRowU_.array()[startU]; CoinFactorizationDouble *COIN_RESTRICT elementU = &elementU_.array()[startU]; double tolerance = zeroTolerance_; int number = numberInColumn[numberColumnsExtra_]; for (int i = 0; i < number; i++) { int iRow = indexU[i]; if (fabs(elementU[i]) > tolerance) { if (iRow != realPivotRow) { saveFromU -= elementU[i] * region[iRow]; } else { saveFromU += elementU[i]; } } } return saveFromU; } /* Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial update in vector */ double CoinFactorization::checkReplacePart1(CoinIndexedVector *regionSparse, CoinIndexedVector *partialUpdate, int pivotRow) { CoinFactorizationDouble *COIN_RESTRICT element; int *COIN_RESTRICT numberInRow = numberInRow_.array(); int realPivotRow; realPivotRow = pivotColumn_.array()[pivotRow]; //zeroed out region double *COIN_RESTRICT region = regionSparse->denseVector(); element = elementU_.array(); //get entries in row (pivot not stored) int numberNonZero = 0; int *COIN_RESTRICT indexColumn = indexColumnU_.array(); int *COIN_RESTRICT convertRowToColumn = convertRowToColumnU_.array(); int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); int *COIN_RESTRICT startRow = startRowU_.array(); int start = 0; int end = 0; assert(convertRowToColumn); start = startRow[realPivotRow]; end = start + numberInRow[realPivotRow]; int smallestIndex = numberRowsExtra_; for (int i = start; i < end; i++) { int iColumn = indexColumn[i]; smallestIndex = CoinMin(smallestIndex, iColumn); int j = convertRowToColumn[i]; region[iColumn] = element[j]; regionIndex[numberNonZero++] = iColumn; } //do BTRAN - finding first one to use regionSparse->setNumElements(numberNonZero); updateColumnTransposeU(regionSparse, smallestIndex); numberNonZero = regionSparse->getNumElements(); CoinFactorizationDouble saveFromU = 0.0; double tolerance = zeroTolerance_; int *COIN_RESTRICT indexU2 = partialUpdate->getIndices(); CoinFactorizationDouble *COIN_RESTRICT elementU2 = partialUpdate->denseVector(); int numberInColumnU2 = partialUpdate->getNumElements(); for (int i = 0; i < numberInColumnU2; i++) { int iRow = indexU2[i]; if (fabs(elementU2[i]) > tolerance) { if (iRow != realPivotRow) { saveFromU -= elementU2[i] * region[iRow]; } else { saveFromU += elementU2[i]; } } } if (lengthU_ + numberInColumnU2 >= lengthAreaU_) { //not enough room saveFromU = 0.0; } if (lengthR_ + numberNonZero >= lengthAreaR_) { //not enough room saveFromU = 0.0; } return saveFromU; } /* Checks if can replace one Column in basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room, 5 max pivots */ int CoinFactorization::checkReplacePart2(int pivotRow, double btranAlpha, double ftranAlpha, double ftAlpha, double acceptablePivot) { //return at once if too many iterations if (numberColumnsExtra_ >= maximumColumnsExtra_) { return 5; } if (lengthR_ + numberRows_ >= lengthAreaR_) { //not enough room return 3; } pivotRow = pivotColumn_.array()[pivotRow]; const CoinFactorizationDouble *pivotRegion = pivotRegion_.array(); CoinFactorizationDouble oldPivot = pivotRegion[pivotRow]; // for accuracy check CoinFactorizationDouble pivotCheck = ftranAlpha / oldPivot; //check accuracy int status = checkPivot(ftAlpha, pivotCheck); if (status == 1 && !numberPivots_) { printf("check status not ok\n"); status = 2; } return status; } /* Replaces one Column to basis, partial update already in U */ void CoinFactorization::replaceColumnPart3(CoinIndexedVector *regionSparse, int pivotRow, double alpha) { assert(numberU_ <= numberRowsExtra_); int *COIN_RESTRICT startColumnU = startColumnU_.array(); int *COIN_RESTRICT startColumn; int *COIN_RESTRICT indexRow; CoinFactorizationDouble *COIN_RESTRICT element; int *COIN_RESTRICT numberInRow = numberInRow_.array(); int *COIN_RESTRICT numberInColumn = numberInColumn_.array(); int *COIN_RESTRICT numberInColumnPlus = numberInColumnPlus_.array(); int realPivotRow; realPivotRow = pivotColumn_.array()[pivotRow]; //Filled in region double *COIN_RESTRICT region = regionSparse->denseVector(); element = elementU_.array(); //take out old pivot column totalElements_ -= numberInColumn[realPivotRow]; CoinFactorizationDouble *COIN_RESTRICT pivotRegion = pivotRegion_.array(); pivotRegion[realPivotRow] = 0.0; int saveEnd = startColumnU[realPivotRow] + numberInColumn[realPivotRow]; #ifdef CLP_FACTORIZATION_INSTRUMENT currentTakeoutU += numberInColumn[realPivotRow]; currentTakeoutU += numberInRow[realPivotRow]; #endif // not necessary at present - but take no chances for future numberInColumn[realPivotRow] = 0; //get entries in row (pivot not stored) int numberNonZero = 0; int *COIN_RESTRICT indexColumn = indexColumnU_.array(); int *COIN_RESTRICT convertRowToColumn = convertRowToColumnU_.array(); int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); int *COIN_RESTRICT startRow = startRowU_.array(); int start = 0; int end = 0; start = startRow[realPivotRow]; end = start + numberInRow[realPivotRow]; for (int i = start; i < end; i++) { int j = convertRowToColumn[i]; element[j] = 0.0; } numberNonZero = regionSparse->getNumElements(); int startU = startColumnU[numberColumnsExtra_]; int *COIN_RESTRICT indexU = &indexRowU_.array()[startU]; CoinFactorizationDouble *COIN_RESTRICT elementU = &elementU_.array()[startU]; // Now zero out column of U //take out old pivot column for (int i = startColumnU[realPivotRow]; i < saveEnd; i++) { element[i] = 0.0; } //zero out pivot Row (before or after?) //add to R startColumn = startColumnR_.array(); indexRow = indexRowR_; element = elementR_; int l = lengthR_; int number = numberR_; startColumn[number] = l; //for luck and first time number++; startColumn[number] = l + numberNonZero; numberR_ = number; lengthR_ = l + numberNonZero; totalElements_ += numberNonZero; assert(lengthR_ < lengthAreaR_); for (int i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; indexRow[l] = iRow; element[l] = region[iRow]; l++; } int *nextRow; int *lastRow; int next; int last; //take out row nextRow = nextRow_.array(); lastRow = lastRow_.array(); next = nextRow[realPivotRow]; last = lastRow[realPivotRow]; nextRow[last] = next; lastRow[next] = last; numberInRow[realPivotRow] = 0; //do permute permute_.array()[numberRowsExtra_] = realPivotRow; // and other way permuteBack_.array()[realPivotRow] = numberRowsExtra_; permuteBack_.array()[numberRowsExtra_] = -1; ; //and for safety permute_.array()[numberRowsExtra_ + 1] = 0; pivotColumn_.array()[pivotRow] = numberRowsExtra_; pivotColumnBack()[numberRowsExtra_] = pivotRow; startColumn = startColumnU; indexRow = indexRowU_.array(); element = elementU_.array(); numberU_++; number = numberInColumn[numberColumnsExtra_]; totalElements_ += number; lengthU_ += number; double saveFromU = 0.0; //put in pivot //add row counts for (int i = 0; i < number; i++) { int iRow = indexU[i]; if (iRow != realPivotRow) { int next = nextRow[iRow]; int iNumberInRow = numberInRow[iRow]; int space; int put = startRow[iRow] + iNumberInRow; space = startRow[next] - put; if (space <= 0) { getRowSpaceIterate(iRow, iNumberInRow + 4); put = startRow[iRow] + iNumberInRow; } indexColumn[put] = numberColumnsExtra_; convertRowToColumn[put] = i + startU; numberInRow[iRow] = iNumberInRow + 1; saveFromU = saveFromU - elementU[i] * region[iRow]; } else { //zero out and save saveFromU += elementU[i]; elementU[i] = 0.0; } } //in at end last = lastRow[maximumRowsExtra_]; nextRow[last] = numberRowsExtra_; lastRow[maximumRowsExtra_] = numberRowsExtra_; lastRow[numberRowsExtra_] = last; nextRow[numberRowsExtra_] = maximumRowsExtra_; startRow[numberRowsExtra_] = startRow[maximumRowsExtra_]; numberInRow[numberRowsExtra_] = 0; //column in at beginning (as empty) int *COIN_RESTRICT nextColumn = nextColumn_.array(); int *COIN_RESTRICT lastColumn = lastColumn_.array(); next = nextColumn[maximumColumnsExtra_]; lastColumn[next] = numberColumnsExtra_; nextColumn[maximumColumnsExtra_] = numberColumnsExtra_; nextColumn[numberColumnsExtra_] = next; lastColumn[numberColumnsExtra_] = maximumColumnsExtra_; CoinFactorizationDouble pivotValue = 1.0 / saveFromU; pivotRegion[numberRowsExtra_] = pivotValue; //modify by pivot for (int i = 0; i < number; i++) { elementU[i] *= pivotValue; } maximumU_ = CoinMax(maximumU_, startU + number); numberRowsExtra_++; numberColumnsExtra_++; numberGoodU_++; numberPivots_++; if (numberRowsExtra_ > numberRows_ + 50) { int extra = factorElements_ >> 1; if (numberRowsExtra_ > numberRows_ + 100 + numberRows_ / 500) { if (extra < 2 * numberRows_) { extra = 2 * numberRows_; } } else { if (extra < 5 * numberRows_) { extra = 5 * numberRows_; } } int added = totalElements_ - factorElements_; if (added > extra && added > (factorElements_) << 1 && 3 * totalElements_ > 2 * (lengthAreaU_ + lengthAreaL_)) { //status = 3; //if ( messageLevel_ & 4 ) { std::cout << "Factorization has " << totalElements_ << ", basis had " << factorElements_ << std::endl; //} abort(); } } // we are going to put another copy of R in R CoinFactorizationDouble *COIN_RESTRICT elementR = elementR_ + lengthAreaR_; int *COIN_RESTRICT indexRowR = indexRowR_ + lengthAreaR_; int *COIN_RESTRICT startR = startColumnR_.array() + maximumPivots_ + 1; int pivotRowNew = numberRowsExtra_ - 1; for (int i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; assert(pivotRowNew > iRow); next = nextColumn[iRow]; int space; if (next != maximumColumnsExtra_) space = startR[next] - startR[iRow]; else space = lengthAreaR_ - startR[iRow]; int numberInR = numberInColumnPlus[iRow]; if (space > numberInR) { // there is space int put = startR[iRow] + numberInR; numberInColumnPlus[iRow] = numberInR + 1; indexRowR[put] = pivotRowNew; elementR[put] = region[iRow]; //add 4 for luck if (next == maximumColumnsExtra_) startR[maximumColumnsExtra_] = CoinMin(static_cast< int >(put + 4), lengthAreaR_); } else { // no space - do we shuffle? if (!getColumnSpaceIterateR(iRow, region[iRow], pivotRowNew)) { // printf("Need more space for R\n"); numberInColumnPlus_.conditionalDelete(); regionSparse->clear(); break; } } region[iRow] = 0.0; } regionSparse->setNumElements(0); } /* Replaces one Column to basis, partial update in vector */ void CoinFactorization::replaceColumnPart3(CoinIndexedVector *regionSparse, CoinIndexedVector *partialUpdate, int pivotRow, double alpha) { abort(); } // Makes a non-singular basis by replacing variables void CoinFactorization::makeNonSingular(int *COIN_RESTRICT sequence) { // Replace bad ones by correct slack int *COIN_RESTRICT workArea = new int[numberRows_]; for (int i = 0; i < numberRows_; i++) workArea[i] = -1; const int *COIN_RESTRICT pivot = pivotColumn(); const int *COIN_RESTRICT permute = nextRow_.array(); for (int i = 0; i < numberGoodU_; i++) { int iOriginal = pivot[i]; assert(iOriginal >= 0); workArea[iOriginal] = i; } int iRow = 0; for (int i = 0; i < numberRows_; i++) { if (workArea[i] == -1) { while (permute[iRow] >= 0) iRow++; assert(iRow < numberRows_); // Put slack in basis sequence[i] = iRow; iRow++; } } delete[] workArea; } /* returns empty fake vector carved out of existing later - maybe use associated arrays */ CoinIndexedVector * CoinFactorization::fakeVector(CoinIndexedVector *vector) const { int oldCapacity = vector->capacity(); CoinIndexedVector *newVector = new CoinIndexedVector(); int n = (numberRows_ + 3) & ~3; newVector->setCapacity(oldCapacity - n); vector->setCapacity(n); newVector->setDenseVector(vector->denseVector() + n); newVector->setIndexVector(vector->getIndices() + n + ((n + 3) >> 2)); // take this out when calmer - and think of best way memset(vector->getIndices() + vector->capacity(), 0, vector->capacity()); //vector->checkClean(); //newVector->checkClear(); return newVector; } void CoinFactorization::deleteFakeVector(CoinIndexedVector *vector, CoinIndexedVector *fakeVector) const { int n = fakeVector->capacity() + vector->capacity(); //fakeVector->checkClear(); fakeVector->setCapacity(0); fakeVector->setDenseVector(NULL); fakeVector->setIndexVector(NULL); delete fakeVector; vector->setCapacity(n); //vector->checkClean(); } /* Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no room regionSparse starts as zero and is zero at end. Note - if regionSparse2 packed on input - will be packed on output long regions */ int CoinFactorization::updateColumnFT(CoinIndexedVector ®ionSparse) { CoinIndexedVector *newVector = fakeVector(®ionSparse); int returnCode = updateColumnFT(newVector, ®ionSparse); deleteFakeVector(®ionSparse, newVector); return returnCode; } int CoinFactorization::updateColumnFTPart1(CoinIndexedVector ®ionSparse2X) { CoinIndexedVector *regionSparse = fakeVector(®ionSparse2X); CoinIndexedVector *regionSparse2 = ®ionSparse2X; //permute and move indices into index array int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); int numberNonZero = regionSparse2->getNumElements(); const int *permute = permute_.array(); int *COIN_RESTRICT index = regionSparse2->getIndices(); double *COIN_RESTRICT region = regionSparse->denseVector(); double *COIN_RESTRICT array = regionSparse2->denseVector(); int *COIN_RESTRICT startColumnU = startColumnU_.array(); // see if room int iColumn = numberColumnsExtra_; startColumnU[iColumn] = startColumnU[maximumColumnsExtra_]; int start = startColumnU[iColumn]; int space = lengthAreaU_ - (start + numberRowsExtra_); bool doFT = space >= 0; if (doFT) { regionIndex = indexRowU_.array() + start; } else { startColumnU[maximumColumnsExtra_] = lengthAreaU_ + 1; } assert(!regionSparse2->packedMode()); for (int j = 0; j < numberNonZero; j++) { int iRow = index[j]; double value = array[iRow]; array[iRow] = 0.0; iRow = permute[iRow]; region[iRow] = value; regionIndex[j] = iRow; } regionSparse->setNumElements(numberNonZero); if (collectStatistics_) { numberFtranCounts_++; ftranCountInput_ += numberNonZero; } // ******* L updateColumnL(regionSparse, regionIndex); if (collectStatistics_) ftranCountAfterL_ += regionSparse->getNumElements(); //permute extra //row bits here if (doFT) updateColumnRFT(regionSparse, regionIndex); else updateColumnR(regionSparse); if (collectStatistics_) ftranCountAfterR_ += regionSparse->getNumElements(); deleteFakeVector(®ionSparse2X, regionSparse); // will be negative if no room if (doFT) return 1; else return -1; } void CoinFactorization::updateColumnFTPart2(CoinIndexedVector ®ionSparse2X) { CoinIndexedVector *regionSparse = fakeVector(®ionSparse2X); CoinIndexedVector *regionSparse2 = ®ionSparse2X; // ******* U int *COIN_RESTRICT regionIndex = regionSparse->getIndices(); updateColumnU(regionSparse, regionIndex); permuteBack(regionSparse, regionSparse2); deleteFakeVector(®ionSparse2X, regionSparse); } /* Updates one column (FTRAN) - long region Tries to do FT update puts partial update in vector */ void CoinFactorization::updateColumnFT(CoinIndexedVector ®ionSparseFT, CoinIndexedVector &partialUpdate, int which) { abort(); } /* Updates one column (FTRAN) long region */ int CoinFactorization::updateColumn(CoinIndexedVector ®ionSparse) const { CoinIndexedVector *newVector = fakeVector(®ionSparse); updateColumn(newVector, ®ionSparse); deleteFakeVector(®ionSparse, newVector); return regionSparse.getNumElements(); } /* Updates one column (FTRAN) from regionFT Tries to do FT update number returned is negative if no room. Also updates regionOther - long region*/ int CoinFactorization::updateTwoColumnsFT(CoinIndexedVector ®ionSparseFT, CoinIndexedVector ®ionSparseOther) { CoinIndexedVector *newVector = fakeVector(®ionSparseFT); int returnCode = updateTwoColumnsFT(newVector, ®ionSparseFT, ®ionSparseOther); deleteFakeVector(®ionSparseFT, newVector); return returnCode; } /* Updates one column (BTRAN) - long region*/ int CoinFactorization::updateColumnTranspose(CoinIndexedVector ®ionSparse) const { CoinIndexedVector *newVector = fakeVector(®ionSparse); updateColumnTranspose(newVector, ®ionSparse); deleteFakeVector(®ionSparse, newVector); return regionSparse.getNumElements(); } /* Updates one column (FTRAN) - long region */ void CoinFactorization::updateColumnCpu(CoinIndexedVector ®ionSparse, int whichCpu) const { abort(); } /* Updates one column (BTRAN) - long region */ void CoinFactorization::updateColumnTransposeCpu(CoinIndexedVector ®ionSparse, int whichCpu) const { abort(); } /* Updates one full column (FTRAN) - long region */ void CoinFactorization::updateFullColumn(CoinIndexedVector ®ionSparse) const { if (!regionSparse.getNumElements()) regionSparse.scan(0, numberRows_); CoinIndexedVector *newVector = fakeVector(®ionSparse); updateColumn(newVector, ®ionSparse); deleteFakeVector(®ionSparse, newVector); } /* Updates one full column (BTRAN) - long region */ void CoinFactorization::updateFullColumnTranspose(CoinIndexedVector ®ionSparse) const { if (!regionSparse.getNumElements()) regionSparse.scan(0, numberRows_); CoinIndexedVector *newVector = fakeVector(®ionSparse); updateColumnTranspose(newVector, ®ionSparse); deleteFakeVector(®ionSparse, newVector); } /* Updates one column for dual steepest edge weights (FTRAN) - long region */ void CoinFactorization::updateWeights(CoinIndexedVector ®ionSparse) const { abort(); } // Update partial Ftran by R update void CoinFactorization::updatePartialUpdate(CoinIndexedVector &partialUpdate) { abort(); } #endif #ifdef COIN_DEVELOP extern double ncall_DZ; extern double nrow_DZ; extern double nslack_DZ; extern double nU_DZ; extern double nnz_DZ; extern double nDone_DZ; extern double ncall_SZ; extern double nrow_SZ; extern double nslack_SZ; extern double nU_SZ; extern double nnz_SZ; extern double nDone_SZ; void print_fac_stats() { double mult = ncall_DZ ? 1.0 / ncall_DZ : 1.0; printf("UDen called %g times, average rows %g, average slacks %g, average (U-S) %g average nnz in %g average ops %g\n", ncall_DZ, mult * nrow_DZ, mult * nslack_DZ, mult * (nU_DZ - nslack_DZ), mult * nnz_DZ, mult * nDone_DZ); ncall_DZ = 0.0; nrow_DZ = 0.0; nslack_DZ = 0.0; nU_DZ = 0.0; nnz_DZ = 0.0; nDone_DZ = 0.0; mult = ncall_SZ ? 1.0 / ncall_SZ : 1.0; printf("USpars called %g times, average rows %g, average slacks %g, average (U-S) %g average nnz in %g average ops %g\n", ncall_SZ, mult * nrow_SZ, mult * nslack_SZ, mult * (nU_SZ - nslack_SZ), mult * nnz_SZ, mult * nDone_SZ); ncall_SZ = 0.0; nrow_SZ = 0.0; nslack_SZ = 0.0; nU_SZ = 0.0; nnz_SZ = 0.0; nDone_SZ = 0.0; } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveSubst.hpp0000644000175200017520000000603113414454441017721 0ustar coincoin/* $Id: CoinPresolveSubst.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolveSubst_H #define CoinPresolveSubst_H /*! \file */ #define SUBST_ROW 21 #include "CoinPresolveMatrix.hpp" /*! \class subst_constraint_action \brief Detect and process implied free variables Consider a variable x. Suppose that we can find an equality such that the bound on the equality, combined with the bounds on the other variables involved in the equality, are such that even the worst case values of the other variables still imply bounds for x which are tighter than the variable's original bounds. Since x can never reach its upper or lower bounds, it is an implied free variable. By solving the equality for x and substituting for x in every other constraint entangled with x, we can make x into a column singleton. Now x is an implied free column singleton and both x and the equality can be removed. A similar transform for the case where the variable is a natural column singleton is handled by #implied_free_action. In the current presolve architecture, #implied_free_action is responsible for detecting implied free variables that are natural column singletons or can be reduced to column singletons. #implied_free_action calls subst_constraint_action to process variables that must be reduced to column singletons. */ class subst_constraint_action : public CoinPresolveAction { private: subst_constraint_action(); subst_constraint_action(const subst_constraint_action &rhs); subst_constraint_action &operator=(const subst_constraint_action &rhs); struct action { double *rlos; double *rups; double *coeffxs; int *rows; int *ninrowxs; int *rowcolsxs; double *rowelsxs; const double *costsx; int col; int rowy; int nincol; }; const int nactions_; // actions_ is owned by the class and must be deleted at destruction const action *const actions_; subst_constraint_action(int nactions, action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const int *implied_free, const int *which, int numberFree, const CoinPresolveAction *next, int fill_level); static const CoinPresolveAction *presolveX(CoinPresolveMatrix *prob, const CoinPresolveAction *next, int fillLevel); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~subst_constraint_action(); }; /*static*/ void implied_bounds(const double *els, const double *clo, const double *cup, const int *hcol, CoinBigIndex krs, CoinBigIndex kre, double *maxupp, double *maxdownp, int jcol, double rlo, double rup, double *iclb, double *icub); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinTime.hpp0000644000175200017520000002175113414454441016005 0ustar coincoin/* $Id: CoinTime.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef _CoinTime_hpp #define _CoinTime_hpp // Uncomment the next three lines for thorough memory initialisation. // #ifndef ZEROFAULT // # define ZEROFAULT // #endif //############################################################################# #include #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #else // MacOS-X and FreeBSD needs sys/time.h #if defined(__MACH__) || defined(__FreeBSD__) #include #endif #if !defined(__MSVCRT__) #include #endif #endif //############################################################################# #if defined(_MSC_VER) #if 0 // change this to 1 if want to use the win32 API #include #ifdef small /* for some unfathomable reason (to me) rpcndr.h (pulled in by windows.h) does a '#define small char' */ #undef small #endif #define TWO_TO_THE_THIRTYTWO 4294967296.0 #define DELTA_EPOCH_IN_SECS 11644473600.0 inline double CoinGetTimeOfDay() { FILETIME ft; GetSystemTimeAsFileTime(&ft); double t = ft.dwHighDateTime * TWO_TO_THE_THIRTYTWO + ft.dwLowDateTime; t = t/10000000.0 - DELTA_EPOCH_IN_SECS; return t; } #else #include #include inline double CoinGetTimeOfDay() { struct _timeb timebuffer; #pragma warning(disable : 4996) _ftime(&timebuffer); // C4996 #pragma warning(default : 4996) return timebuffer.time + timebuffer.millitm / 1000.0; } #endif #else #include inline double CoinGetTimeOfDay() { struct timeval tv; gettimeofday(&tv, NULL); return static_cast< double >(tv.tv_sec) + static_cast< int >(tv.tv_usec) / 1000000.0; } #endif // _MSC_VER /** Query the elapsed wallclock time since the first call to this function. If a positive argument is passed to the function then the time of the first call is set to that value (this kind of argument is allowed only at the first call!). If a negative argument is passed to the function then it returns the time when it was set. */ inline double CoinWallclockTime(double callType = 0) { double callTime = CoinGetTimeOfDay(); static const double firstCall = callType > 0 ? callType : callTime; return callType < 0 ? firstCall : callTime - firstCall; } //############################################################################# //#define HAVE_SDK // if SDK under Win32 is installed, for CPU instead of elapsed time under Win #ifdef HAVE_SDK #include #ifdef small /* for some unfathomable reason (to me) rpcndr.h (pulled in by windows.h) does a '#define small char' */ #undef small #endif #define TWO_TO_THE_THIRTYTWO 4294967296.0 #endif static inline double CoinCpuTime() { #ifdef COIN_DOING_DIFFS // when trying to see differences between runs it can be helpful return 0.0; #endif double cpu_temp; #if defined(_MSC_VER) || defined(__MSVCRT__) #ifdef HAVE_SDK FILETIME creation; FILETIME exit; FILETIME kernel; FILETIME user; GetProcessTimes(GetCurrentProcess(), &creation, &exit, &kernel, &user); double t = user.dwHighDateTime * TWO_TO_THE_THIRTYTWO + user.dwLowDateTime; return t / 10000000.0; #else unsigned int ticksnow; /* clock_t is same as int */ ticksnow = (unsigned int)clock(); cpu_temp = (double)((double)ticksnow / CLOCKS_PER_SEC); #endif #else struct rusage usage; #ifdef ZEROFAULT usage.ru_utime.tv_sec = 0; usage.ru_utime.tv_usec = 0; #endif getrusage(RUSAGE_SELF, &usage); cpu_temp = static_cast< double >(usage.ru_utime.tv_sec); cpu_temp += 1.0e-6 * (static_cast< double >(usage.ru_utime.tv_usec)); #endif return cpu_temp; } //############################################################################# static inline double CoinSysTime() { double sys_temp; #if defined(_MSC_VER) || defined(__MSVCRT__) sys_temp = 0.0; #else struct rusage usage; #ifdef ZEROFAULT usage.ru_utime.tv_sec = 0; usage.ru_utime.tv_usec = 0; #endif getrusage(RUSAGE_SELF, &usage); sys_temp = static_cast< double >(usage.ru_stime.tv_sec); sys_temp += 1.0e-6 * (static_cast< double >(usage.ru_stime.tv_usec)); #endif return sys_temp; } //############################################################################# // On most systems SELF seems to include children threads, This is for when it doesn't static inline double CoinCpuTimeJustChildren() { double cpu_temp; #if defined(_MSC_VER) || defined(__MSVCRT__) cpu_temp = 0.0; #else struct rusage usage; #ifdef ZEROFAULT usage.ru_utime.tv_sec = 0; usage.ru_utime.tv_usec = 0; #endif getrusage(RUSAGE_CHILDREN, &usage); cpu_temp = static_cast< double >(usage.ru_utime.tv_sec); cpu_temp += 1.0e-6 * (static_cast< double >(usage.ru_utime.tv_usec)); #endif return cpu_temp; } //############################################################################# #include /** This class implements a timer that also implements a tracing functionality. The timer stores the start time of the timer, for how much time it was set to and when does it expire (start + limit = end). Queries can be made that tell whether the timer is expired, is past an absolute time, is past a percentage of the length of the timer. All times are given in seconds, but as double numbers, so there can be fractional values. The timer can also be initialized with a stream and a specification whether to write to or read from the stream. In the former case the result of every query is written into the stream, in the latter case timing is not tested at all, rather the supposed result is read out from the stream. This makes it possible to exactly retrace time sensitive program execution. */ class CoinTimer { private: /// When the timer was initialized/reset/restarted double start; /// double limit; double end; #ifdef COIN_COMPILE_WITH_TRACING std::fstream *stream; bool write_stream; #endif private: #ifdef COIN_COMPILE_WITH_TRACING inline bool evaluate(bool b_tmp) const { int i_tmp = b_tmp; if (stream) { if (write_stream) (*stream) << i_tmp << "\n"; else (*stream) >> i_tmp; } return i_tmp; } inline double evaluate(double d_tmp) const { if (stream) { if (write_stream) (*stream) << d_tmp << "\n"; else (*stream) >> d_tmp; } return d_tmp; } #else inline bool evaluate(const bool b_tmp) const { return b_tmp; } inline double evaluate(const double d_tmp) const { return d_tmp; } #endif public: /// Default constructor creates a timer with no time limit and no tracing CoinTimer() : start(0) , limit(1e100) , end(1e100) #ifdef COIN_COMPILE_WITH_TRACING , stream(0) , write_stream(true) #endif { } /// Create a timer with the given time limit and with no tracing CoinTimer(double lim) : start(CoinCpuTime()) , limit(lim) , end(start + lim) #ifdef COIN_COMPILE_WITH_TRACING , stream(0) , write_stream(true) #endif { } #ifdef COIN_COMPILE_WITH_TRACING /** Create a timer with no time limit and with writing/reading the trace to/from the given stream, depending on the argument \c write. */ CoinTimer(std::fstream *s, bool write) : start(0) , limit(1e100) , end(1e100) , stream(s) , write_stream(write) { } /** Create a timer with the given time limit and with writing/reading the trace to/from the given stream, depending on the argument \c write. */ CoinTimer(double lim, std::fstream *s, bool w) : start(CoinCpuTime()) , limit(lim) , end(start + lim) , stream(s) , write_stream(w) { } #endif /// Restart the timer (keeping the same time limit) inline void restart() { start = CoinCpuTime(); end = start + limit; } /// An alternate name for \c restart() inline void reset() { restart(); } /// Reset (and restart) the timer and change its time limit inline void reset(double lim) { limit = lim; restart(); } /** Return whether the given percentage of the time limit has elapsed since the timer was started */ inline bool isPastPercent(double pct) const { return evaluate(start + limit * pct < CoinCpuTime()); } /** Return whether the given amount of time has elapsed since the timer was started */ inline bool isPast(double lim) const { return evaluate(start + lim < CoinCpuTime()); } /** Return whether the originally specified time limit has passed since the timer was started */ inline bool isExpired() const { return evaluate(end < CoinCpuTime()); } /** Return how much time is left on the timer */ inline double timeLeft() const { return evaluate(end - CoinCpuTime()); } /** Return how much time has elapsed */ inline double timeElapsed() const { return evaluate(CoinCpuTime() - start); } inline void setLimit(double l) { limit = l; return; } }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinDenseVector.hpp0000644000175200017520000002722513414454441017332 0ustar coincoin/* $Id: CoinDenseVector.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2003, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinDenseVector_H #define CoinDenseVector_H #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include #include #include #include "CoinHelperFunctions.hpp" //############################################################################# /** A function that tests the methods in the CoinDenseVector class. The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging. */ template < typename T > void CoinDenseVectorUnitTest(T dummy); //############################################################################# /** Dense Vector Stores a dense (or expanded) vector of floating point values. Type of vector elements is controlled by templating. (Some working quantities such as accumulated sums are explicitly declared of type double). This allows the components of the vector integer, single or double precision. Here is a sample usage: @verbatim const int ne = 4; double el[ne] = { 10., 40., 1., 50. } // Create vector and set its value CoinDenseVector r(ne,el); // access each element assert( r.getElements()[0]==10. ); assert( r.getElements()[1]==40. ); assert( r.getElements()[2]== 1. ); assert( r.getElements()[3]==50. ); // Test for equality CoinDenseVector r1; r1=r; // Add dense vectors. // Similarly for subtraction, multiplication, // and division. CoinDenseVector add = r + r1; assert( add[0] == 10.+10. ); assert( add[1] == 40.+40. ); assert( add[2] == 1.+ 1. ); assert( add[3] == 50.+50. ); assert( r.sum() == 10.+40.+1.+50. ); @endverbatim */ template < typename T > class CoinDenseVector { private: /**@name Private member data */ //@{ /// Size of element vector int nElements_; ///Vector elements T *elements_; //@} public: /**@name Get methods. */ //@{ /// Get the size inline int getNumElements() const { return nElements_; } inline int size() const { return nElements_; } /// Get element values inline const T *getElements() const { return elements_; } /// Get element values inline T *getElements() { return elements_; } //@} //------------------------------------------------------------------- // Set indices and elements //------------------------------------------------------------------- /**@name Set methods */ //@{ /// Reset the vector (i.e. set all elemenets to zero) void clear(); /** Assignment operator */ CoinDenseVector &operator=(const CoinDenseVector &); /** Member of array operator */ T &operator[](int index) const; /** Set vector size, and elements. Size is the length of the elements vector. The element vector is copied into this class instance's member data. */ void setVector(int size, const T *elems); /** Elements set to have the same scalar value */ void setConstant(int size, T elems); /** Set an existing element in the dense vector The first argument is the "index" into the elements() array */ void setElement(int index, T element); /** Resize the dense vector to be the first newSize elements. If length is decreased, vector is truncated. If increased new entries, set to new default element */ void resize(int newSize, T fill = T()); /** Append a dense vector to this dense vector */ void append(const CoinDenseVector &); //@} /**@name norms, sum and scale */ //@{ /// 1-norm of vector inline T oneNorm() const { T norm = 0; for (int i = 0; i < nElements_; i++) norm += CoinAbs(elements_[i]); return norm; } /// 2-norm of vector inline double twoNorm() const { double norm = 0.; for (int i = 0; i < nElements_; i++) norm += elements_[i] * elements_[i]; // std namespace removed because it was causing a compile // problem with Microsoft Visual C++ return /*std::*/ sqrt(norm); } /// infinity-norm of vector inline T infNorm() const { T norm = 0; for (int i = 0; i < nElements_; i++) norm = CoinMax(norm, CoinAbs(elements_[i])); return norm; } /// sum of vector elements inline T sum() const { T sume = 0; for (int i = 0; i < nElements_; i++) sume += elements_[i]; return sume; } /// scale vector elements inline void scale(T factor) { for (int i = 0; i < nElements_; i++) elements_[i] *= factor; return; } //@} /**@name Arithmetic operators. */ //@{ /// add value to every entry void operator+=(T value); /// subtract value from every entry void operator-=(T value); /// multiply every entry by value void operator*=(T value); /// divide every entry by value void operator/=(T value); //@} /**@name Constructors and destructors */ //@{ /** Default constructor */ CoinDenseVector(); /** Alternate Constructors - set elements to vector of Ts */ CoinDenseVector(int size, const T *elems); /** Alternate Constructors - set elements to same scalar value */ CoinDenseVector(int size, T element = T()); /** Copy constructors */ CoinDenseVector(const CoinDenseVector &); /** Destructor */ ~CoinDenseVector(); //@} private: /**@name Private methods */ //@{ /// Copy internal data void gutsOfSetVector(int size, const T *elems); /// Set all elements to a given value void gutsOfSetConstant(int size, T value); //@} }; //############################################################################# /**@name Arithmetic operators on dense vectors. NOTE: Because these methods return an object (they can't return a reference, though they could return a pointer...) they are very inefficient... */ //@{ /// Return the sum of two dense vectors template < typename T > inline CoinDenseVector< T > operator+(const CoinDenseVector< T > &op1, const CoinDenseVector< T > &op2) { assert(op1.size() == op2.size()); int size = op1.size(); CoinDenseVector< T > op3(size); const T *elements1 = op1.getElements(); const T *elements2 = op2.getElements(); T *elements3 = op3.getElements(); for (int i = 0; i < size; i++) elements3[i] = elements1[i] + elements2[i]; return op3; } /// Return the difference of two dense vectors template < typename T > inline CoinDenseVector< T > operator-(const CoinDenseVector< T > &op1, const CoinDenseVector< T > &op2) { assert(op1.size() == op2.size()); int size = op1.size(); CoinDenseVector< T > op3(size); const T *elements1 = op1.getElements(); const T *elements2 = op2.getElements(); T *elements3 = op3.getElements(); for (int i = 0; i < size; i++) elements3[i] = elements1[i] - elements2[i]; return op3; } /// Return the element-wise product of two dense vectors template < typename T > inline CoinDenseVector< T > operator*(const CoinDenseVector< T > &op1, const CoinDenseVector< T > &op2) { assert(op1.size() == op2.size()); int size = op1.size(); CoinDenseVector< T > op3(size); const T *elements1 = op1.getElements(); const T *elements2 = op2.getElements(); T *elements3 = op3.getElements(); for (int i = 0; i < size; i++) elements3[i] = elements1[i] * elements2[i]; return op3; } /// Return the element-wise ratio of two dense vectors template < typename T > inline CoinDenseVector< T > operator/(const CoinDenseVector< T > &op1, const CoinDenseVector< T > &op2) { assert(op1.size() == op2.size()); int size = op1.size(); CoinDenseVector< T > op3(size); const T *elements1 = op1.getElements(); const T *elements2 = op2.getElements(); T *elements3 = op3.getElements(); for (int i = 0; i < size; i++) elements3[i] = elements1[i] / elements2[i]; return op3; } //@} /**@name Arithmetic operators on dense vector and a constant. These functions create a dense vector as a result. That dense vector will have the same indices as op1 and the specified operation is done entry-wise with the given value. */ //@{ /// Return the sum of a dense vector and a constant template < typename T > inline CoinDenseVector< T > operator+(const CoinDenseVector< T > &op1, T value) { int size = op1.size(); CoinDenseVector< T > op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for (int i = 0; i < size; i++) elements3[i] = elements1[i] + dvalue; return op3; } /// Return the difference of a dense vector and a constant template < typename T > inline CoinDenseVector< T > operator-(const CoinDenseVector< T > &op1, T value) { int size = op1.size(); CoinDenseVector< T > op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for (int i = 0; i < size; i++) elements3[i] = elements1[i] - dvalue; return op3; } /// Return the element-wise product of a dense vector and a constant template < typename T > inline CoinDenseVector< T > operator*(const CoinDenseVector< T > &op1, T value) { int size = op1.size(); CoinDenseVector< T > op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for (int i = 0; i < size; i++) elements3[i] = elements1[i] * dvalue; return op3; } /// Return the element-wise ratio of a dense vector and a constant template < typename T > inline CoinDenseVector< T > operator/(const CoinDenseVector< T > &op1, T value) { int size = op1.size(); CoinDenseVector< T > op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for (int i = 0; i < size; i++) elements3[i] = elements1[i] / dvalue; return op3; } /// Return the sum of a constant and a dense vector template < typename T > inline CoinDenseVector< T > operator+(T value, const CoinDenseVector< T > &op1) { int size = op1.size(); CoinDenseVector< T > op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for (int i = 0; i < size; i++) elements3[i] = elements1[i] + dvalue; return op3; } /// Return the difference of a constant and a dense vector template < typename T > inline CoinDenseVector< T > operator-(T value, const CoinDenseVector< T > &op1) { int size = op1.size(); CoinDenseVector< T > op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for (int i = 0; i < size; i++) elements3[i] = dvalue - elements1[i]; return op3; } /// Return the element-wise product of a constant and a dense vector template < typename T > inline CoinDenseVector< T > operator*(T value, const CoinDenseVector< T > &op1) { int size = op1.size(); CoinDenseVector< T > op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for (int i = 0; i < size; i++) elements3[i] = elements1[i] * dvalue; return op3; } /// Return the element-wise ratio of a a constant and dense vector template < typename T > inline CoinDenseVector< T > operator/(T value, const CoinDenseVector< T > &op1) { int size = op1.size(); CoinDenseVector< T > op3(size); const T *elements1 = op1.getElements(); T *elements3 = op3.getElements(); double dvalue = value; for (int i = 0; i < size; i++) elements3[i] = dvalue / elements1[i]; return op3; } //@} #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinIndexedVector.cpp0000644000175200017520000017103413415401144017636 0ustar coincoin/* $Id: CoinIndexedVector.cpp 2084 2019-01-09 14:17:08Z forrest $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include #include #include "CoinTypes.hpp" #include "CoinFloatEqual.hpp" #include "CoinHelperFunctions.hpp" #include "CoinIndexedVector.hpp" #include "CoinTypes.hpp" //############################################################################# #define WARN_USELESS 0 void CoinIndexedVector::clear() { #if WARN_USELESS int nNonZero = 0; for (int i = 0; i < capacity_; i++) { if (elements_[i]) nNonZero++; } assert(nNonZero <= nElements_); #if WARN_USELESS > 1 if (nNonZero != nElements_) printf("Vector said it had %d nonzeros - only had %d\n", nElements_, nNonZero); #endif if (!nNonZero && nElements_) printf("Vector said it had %d nonzeros - but is already empty\n", nElements_); #endif assert(nElements_ <= capacity_); if (!packedMode_) { #ifndef NDEBUG for (int i = 0; i < nElements_; i++) assert(indices_[i] >= 0 && indices_[i] < capacity_); #endif if (3 * nElements_ < capacity_) { int i = 0; if ((nElements_ & 1) != 0) { elements_[indices_[0]] = 0.0; i = 1; } for (; i < nElements_; i += 2) { int i0 = indices_[i]; int i1 = indices_[i + 1]; elements_[i0] = 0.0; elements_[i1] = 0.0; } } else { CoinZeroN(elements_, capacity_); } } else { CoinZeroN(elements_, nElements_); } nElements_ = 0; packedMode_ = false; //checkClear(); } void CoinIndexedVector::reallyClear() { CoinZeroN(elements_, capacity_); nElements_ = 0; packedMode_ = false; } //############################################################################# void CoinIndexedVector::empty() { delete[] indices_; indices_ = NULL; if (elements_) delete[](elements_ - offset_); elements_ = NULL; nElements_ = 0; capacity_ = 0; packedMode_ = false; } //############################################################################# CoinIndexedVector & CoinIndexedVector::operator=(const CoinIndexedVector &rhs) { if (this != &rhs) { clear(); packedMode_ = rhs.packedMode_; if (!packedMode_) gutsOfSetVector(rhs.capacity_, rhs.nElements_, rhs.indices_, rhs.elements_); else gutsOfSetPackedVector(rhs.capacity_, rhs.nElements_, rhs.indices_, rhs.elements_); } return *this; } /* Copy the contents of one vector into another. If multiplier is 1 It is the equivalent of = but if vectors are same size does not re-allocate memory just clears and copies */ void CoinIndexedVector::copy(const CoinIndexedVector &rhs, double multiplier) { if (capacity_ == rhs.capacity_) { // can do fast clear(); packedMode_ = rhs.packedMode_; nElements_ = 0; if (!packedMode_) { for (int i = 0; i < rhs.nElements_; i++) { int index = rhs.indices_[i]; double value = rhs.elements_[index] * multiplier; if (fabs(value) < COIN_INDEXED_TINY_ELEMENT) value = COIN_INDEXED_REALLY_TINY_ELEMENT; elements_[index] = value; indices_[nElements_++] = index; } } else { for (int i = 0; i < rhs.nElements_; i++) { int index = rhs.indices_[i]; double value = rhs.elements_[i] * multiplier; if (fabs(value) < COIN_INDEXED_TINY_ELEMENT) value = COIN_INDEXED_REALLY_TINY_ELEMENT; elements_[nElements_] = value; indices_[nElements_++] = index; } } } else { // do as two operations *this = rhs; (*this) *= multiplier; } } //############################################################################# #ifndef CLP_NO_VECTOR CoinIndexedVector & CoinIndexedVector::operator=(const CoinPackedVectorBase &rhs) { clear(); packedMode_ = false; gutsOfSetVector(rhs.getNumElements(), rhs.getIndices(), rhs.getElements()); return *this; } #endif //############################################################################# void CoinIndexedVector::borrowVector(int size, int numberIndices, int *inds, double *elems) { empty(); capacity_ = size; nElements_ = numberIndices; indices_ = inds; elements_ = elems; // whole point about borrowvector is that it is lightweight so no testing is done } //############################################################################# void CoinIndexedVector::returnVector() { indices_ = NULL; elements_ = NULL; nElements_ = 0; capacity_ = 0; packedMode_ = false; } //############################################################################# void CoinIndexedVector::setVector(int size, const int *inds, const double *elems) { clear(); gutsOfSetVector(size, inds, elems); } //############################################################################# void CoinIndexedVector::setVector(int size, int numberIndices, const int *inds, const double *elems) { clear(); gutsOfSetVector(size, numberIndices, inds, elems); } //############################################################################# void CoinIndexedVector::setConstant(int size, const int *inds, double value) { clear(); gutsOfSetConstant(size, inds, value); } //############################################################################# void CoinIndexedVector::setFull(int size, const double *elems) { // Clear out any values presently stored clear(); #ifndef COIN_FAST_CODE if (size < 0) throw CoinError("negative number of indices", "setFull", "CoinIndexedVector"); #endif reserve(size); nElements_ = 0; // elements_ array is all zero int i; for (i = 0; i < size; i++) { int indexValue = i; if (fabs(elems[i]) >= COIN_INDEXED_TINY_ELEMENT) { elements_[indexValue] = elems[i]; indices_[nElements_++] = indexValue; } } } //############################################################################# /** Access the i'th element of the full storage vector. */ double & CoinIndexedVector::operator[](int index) const { assert(!packedMode_); #ifndef COIN_FAST_CODE if (index >= capacity_) throw CoinError("index >= capacity()", "[]", "CoinIndexedVector"); if (index < 0) throw CoinError("index < 0", "[]", "CoinIndexedVector"); #endif double *where = elements_ + index; return *where; } //############################################################################# void CoinIndexedVector::setElement(int index, double element) { #ifndef COIN_FAST_CODE if (index >= nElements_) throw CoinError("index >= size()", "setElement", "CoinIndexedVector"); if (index < 0) throw CoinError("index < 0", "setElement", "CoinIndexedVector"); #endif elements_[indices_[index]] = element; } //############################################################################# void CoinIndexedVector::insert(int index, double element) { #ifndef COIN_FAST_CODE if (index < 0) throw CoinError("index < 0", "setElement", "CoinIndexedVector"); #endif if (index >= capacity_) reserve(index + 1); #ifndef COIN_FAST_CODE if (elements_[index]) throw CoinError("Index already exists", "insert", "CoinIndexedVector"); #endif indices_[nElements_++] = index; elements_[index] = element; } //############################################################################# void CoinIndexedVector::add(int index, double element) { #ifndef COIN_FAST_CODE if (index < 0) throw CoinError("index < 0", "setElement", "CoinIndexedVector"); #endif if (index >= capacity_) reserve(index + 1); if (elements_[index]) { element += elements_[index]; if (fabs(element) >= COIN_INDEXED_TINY_ELEMENT) { elements_[index] = element; } else { elements_[index] = COIN_INDEXED_REALLY_TINY_ELEMENT; } } else if (fabs(element) >= COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++] = index; assert(nElements_ <= capacity_); elements_[index] = element; } } //############################################################################# int CoinIndexedVector::clean(double tolerance) { int number = nElements_; int i; nElements_ = 0; assert(!packedMode_); for (i = 0; i < number; i++) { int indexValue = indices_[i]; if (fabs(elements_[indexValue]) >= tolerance) { indices_[nElements_++] = indexValue; } else { elements_[indexValue] = 0.0; } } return nElements_; } #ifndef NDEBUG //############################################################################# // For debug check vector is clear i.e. no elements void CoinIndexedVector::checkClear() { #ifndef NDEBUG //printf("checkClear %p\n",this); assert(!nElements_); //assert(!packedMode_); int i; for (i = 0; i < capacity_; i++) { assert(!elements_[i]); } // check mark array zeroed char *mark = reinterpret_cast< char * >(indices_ + capacity_); for (i = 0; i < capacity_; i++) { assert(!mark[i]); } #else if (nElements_) { printf("%d nElements_ - checkClear\n", nElements_); abort(); } if (packedMode_) { printf("packed mode when empty - checkClear\n"); abort(); } int i; int n = 0; int k = -1; for (i = 0; i < capacity_; i++) { if (elements_[i]) { n++; if (k < 0) k = i; } } if (n) { printf("%d elements, first %d - checkClear\n", n, k); abort(); } #endif } // For debug check vector is clean i.e. elements match indices void CoinIndexedVector::checkClean() { //printf("checkClean %p\n",this); int i; if (packedMode_) { for (i = 0; i < nElements_; i++) assert(elements_[i]); for (; i < capacity_; i++) assert(!elements_[i]); } else { double *copy = new double[capacity_]; CoinMemcpyN(elements_, capacity_, copy); for (i = 0; i < nElements_; i++) { int indexValue = indices_[i]; assert(copy[indexValue]); copy[indexValue] = 0.0; } for (i = 0; i < capacity_; i++) assert(!copy[i]); delete[] copy; } #ifndef NDEBUG // check mark array zeroed char *mark = reinterpret_cast< char * >(indices_ + capacity_); for (i = 0; i < capacity_; i++) { assert(!mark[i]); } #endif } #endif //############################################################################# #ifndef CLP_NO_VECTOR void CoinIndexedVector::append(const CoinPackedVectorBase &caboose) { const int cs = caboose.getNumElements(); const int *cind = caboose.getIndices(); const double *celem = caboose.getElements(); int maxIndex = -1; int i; for (i = 0; i < cs; i++) { int indexValue = cind[i]; if (indexValue < 0) throw CoinError("negative index", "append", "CoinIndexedVector"); if (maxIndex < indexValue) maxIndex = indexValue; } reserve(maxIndex + 1); bool needClean = false; int numberDuplicates = 0; for (i = 0; i < cs; i++) { int indexValue = cind[i]; if (elements_[indexValue]) { numberDuplicates++; elements_[indexValue] += celem[i]; if (fabs(elements_[indexValue]) < COIN_INDEXED_TINY_ELEMENT) needClean = true; // need to go through again } else { if (fabs(celem[i]) >= COIN_INDEXED_TINY_ELEMENT) { elements_[indexValue] = celem[i]; indices_[nElements_++] = indexValue; } } } if (needClean) { // go through again int size = nElements_; nElements_ = 0; for (i = 0; i < size; i++) { int indexValue = indices_[i]; double value = elements_[indexValue]; if (fabs(value) >= COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++] = indexValue; } else { elements_[indexValue] = 0.0; } } } if (numberDuplicates) throw CoinError("duplicate index", "append", "CoinIndexedVector"); } #endif //############################################################################# void CoinIndexedVector::swap(int i, int j) { if (i >= nElements_) throw CoinError("index i >= size()", "swap", "CoinIndexedVector"); if (i < 0) throw CoinError("index i < 0", "swap", "CoinIndexedVector"); if (j >= nElements_) throw CoinError("index j >= size()", "swap", "CoinIndexedVector"); if (j < 0) throw CoinError("index j < 0", "swap", "CoinIndexedVector"); // Swap positions i and j of the // indices array int isave = indices_[i]; indices_[i] = indices_[j]; indices_[j] = isave; } //############################################################################# void CoinIndexedVector::truncate(int n) { reserve(n); } //############################################################################# void CoinIndexedVector::operator+=(double value) { assert(!packedMode_); int i, indexValue; for (i = 0; i < nElements_; i++) { indexValue = indices_[i]; double newValue = elements_[indexValue] + value; if (fabs(newValue) >= COIN_INDEXED_TINY_ELEMENT) elements_[indexValue] = newValue; else elements_[indexValue] = COIN_INDEXED_REALLY_TINY_ELEMENT; } } //----------------------------------------------------------------------------- void CoinIndexedVector::operator-=(double value) { assert(!packedMode_); int i, indexValue; for (i = 0; i < nElements_; i++) { indexValue = indices_[i]; double newValue = elements_[indexValue] - value; if (fabs(newValue) >= COIN_INDEXED_TINY_ELEMENT) elements_[indexValue] = newValue; else elements_[indexValue] = COIN_INDEXED_REALLY_TINY_ELEMENT; } } //----------------------------------------------------------------------------- void CoinIndexedVector::operator*=(double value) { assert(!packedMode_); int i, indexValue; for (i = 0; i < nElements_; i++) { indexValue = indices_[i]; double newValue = elements_[indexValue] * value; if (fabs(newValue) >= COIN_INDEXED_TINY_ELEMENT) elements_[indexValue] = newValue; else elements_[indexValue] = COIN_INDEXED_REALLY_TINY_ELEMENT; } } //----------------------------------------------------------------------------- void CoinIndexedVector::operator/=(double value) { assert(!packedMode_); int i, indexValue; for (i = 0; i < nElements_; i++) { indexValue = indices_[i]; double newValue = elements_[indexValue] / value; if (fabs(newValue) >= COIN_INDEXED_TINY_ELEMENT) elements_[indexValue] = newValue; else elements_[indexValue] = COIN_INDEXED_REALLY_TINY_ELEMENT; } } //############################################################################# void CoinIndexedVector::reserve(int n) { int i; int nPlus; if (sizeof(int) == 4 * sizeof(char)) nPlus = (n + 3) >> 2; else nPlus = (n + 7) >> 4; #ifdef COIN_AVX2 nPlus += 16; #endif // don't make allocated space smaller but do take off values if (n + nPlus < capacity_) { #ifndef COIN_FAST_CODE if (n < 0) throw CoinError("negative capacity", "reserve", "CoinIndexedVector"); #endif int nNew = 0; for (i = 0; i < nElements_; i++) { int indexValue = indices_[i]; if (indexValue < n) { indices_[nNew++] = indexValue; } else { elements_[indexValue] = 0.0; } } nElements_ = nNew; } else if (n > capacity_) { // save pointers to existing data int *tempIndices = indices_; double *tempElements = elements_; double *delTemp = elements_ - offset_; // allocate new space indices_ = new int[n + nPlus]; CoinZeroN(indices_ + n, nPlus); // align on 64 byte boundary double *temp = new double[n + 9 + nPlus]; offset_ = 0; CoinInt64 xx = reinterpret_cast< CoinInt64 >(temp); int iBottom = static_cast< int >(xx & 63); //if (iBottom) offset_ = (64 - iBottom) >> 3; elements_ = temp + offset_; ; // copy data to new space // and zero out part of array if (nElements_ > 0) { CoinMemcpyN(tempIndices, nElements_, indices_); CoinMemcpyN(tempElements, capacity_, elements_); CoinZeroN(elements_ + capacity_, n - capacity_); } else { CoinZeroN(elements_, n); } capacity_ = n; // free old data if (tempElements) delete[] delTemp; delete[] tempIndices; } } //############################################################################# CoinIndexedVector::CoinIndexedVector() : indices_(NULL) , elements_(NULL) , nElements_(0) , capacity_(0) , offset_(0) , packedMode_(false) { } CoinIndexedVector::CoinIndexedVector(int size) : indices_(NULL) , elements_(NULL) , nElements_(0) , capacity_(0) , offset_(0) , packedMode_(false) { // Get space reserve(size); } //----------------------------------------------------------------------------- CoinIndexedVector::CoinIndexedVector(int size, const int *inds, const double *elems) : indices_(NULL) , elements_(NULL) , nElements_(0) , capacity_(0) , offset_(0) , packedMode_(false) { gutsOfSetVector(size, inds, elems); } //----------------------------------------------------------------------------- CoinIndexedVector::CoinIndexedVector(int size, const int *inds, double value) : indices_(NULL) , elements_(NULL) , nElements_(0) , capacity_(0) , offset_(0) , packedMode_(false) { gutsOfSetConstant(size, inds, value); } //----------------------------------------------------------------------------- CoinIndexedVector::CoinIndexedVector(int size, const double *element) : indices_(NULL) , elements_(NULL) , nElements_(0) , capacity_(0) , offset_(0) , packedMode_(false) { setFull(size, element); } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR CoinIndexedVector::CoinIndexedVector(const CoinPackedVectorBase &rhs) : indices_(NULL) , elements_(NULL) , nElements_(0) , capacity_(0) , offset_(0) , packedMode_(false) { gutsOfSetVector(rhs.getNumElements(), rhs.getIndices(), rhs.getElements()); } #endif //----------------------------------------------------------------------------- CoinIndexedVector::CoinIndexedVector(const CoinIndexedVector &rhs) : indices_(NULL) , elements_(NULL) , nElements_(0) , capacity_(0) , offset_(0) , packedMode_(false) { if (!rhs.packedMode_) gutsOfSetVector(rhs.capacity_, rhs.nElements_, rhs.indices_, rhs.elements_); else gutsOfSetPackedVector(rhs.capacity_, rhs.nElements_, rhs.indices_, rhs.elements_); } //----------------------------------------------------------------------------- CoinIndexedVector::CoinIndexedVector(const CoinIndexedVector *rhs) : indices_(NULL) , elements_(NULL) , nElements_(0) , capacity_(0) , offset_(0) , packedMode_(false) { if (!rhs->packedMode_) gutsOfSetVector(rhs->capacity_, rhs->nElements_, rhs->indices_, rhs->elements_); else gutsOfSetPackedVector(rhs->capacity_, rhs->nElements_, rhs->indices_, rhs->elements_); } //----------------------------------------------------------------------------- CoinIndexedVector::~CoinIndexedVector() { delete[] indices_; if (elements_) delete[](elements_ - offset_); } //############################################################################# //############################################################################# /// Return the sum of two indexed vectors CoinIndexedVector CoinIndexedVector::operator+( const CoinIndexedVector &op2) { assert(!packedMode_); int i; int nElements = nElements_; int capacity = CoinMax(capacity_, op2.capacity_); CoinIndexedVector newOne(*this); newOne.reserve(capacity); bool needClean = false; // new one now can hold everything so just modify old and add new for (i = 0; i < op2.nElements_; i++) { int indexValue = op2.indices_[i]; double value = op2.elements_[indexValue]; double oldValue = elements_[indexValue]; if (!oldValue) { if (fabs(value) >= COIN_INDEXED_TINY_ELEMENT) { newOne.elements_[indexValue] = value; newOne.indices_[nElements++] = indexValue; } } else { value += oldValue; newOne.elements_[indexValue] = value; if (fabs(value) < COIN_INDEXED_TINY_ELEMENT) { needClean = true; } } } newOne.nElements_ = nElements; if (needClean) { // go through again newOne.nElements_ = 0; for (i = 0; i < nElements; i++) { int indexValue = newOne.indices_[i]; double value = newOne.elements_[indexValue]; if (fabs(value) >= COIN_INDEXED_TINY_ELEMENT) { newOne.indices_[newOne.nElements_++] = indexValue; } else { newOne.elements_[indexValue] = 0.0; } } } return newOne; } /// Return the difference of two indexed vectors CoinIndexedVector CoinIndexedVector::operator-( const CoinIndexedVector &op2) { assert(!packedMode_); int i; int nElements = nElements_; int capacity = CoinMax(capacity_, op2.capacity_); CoinIndexedVector newOne(*this); newOne.reserve(capacity); bool needClean = false; // new one now can hold everything so just modify old and add new for (i = 0; i < op2.nElements_; i++) { int indexValue = op2.indices_[i]; double value = op2.elements_[indexValue]; double oldValue = elements_[indexValue]; if (!oldValue) { if (fabs(value) >= COIN_INDEXED_TINY_ELEMENT) { newOne.elements_[indexValue] = -value; newOne.indices_[nElements++] = indexValue; } } else { value = oldValue - value; newOne.elements_[indexValue] = value; if (fabs(value) < COIN_INDEXED_TINY_ELEMENT) { needClean = true; } } } newOne.nElements_ = nElements; if (needClean) { // go through again newOne.nElements_ = 0; for (i = 0; i < nElements; i++) { int indexValue = newOne.indices_[i]; double value = newOne.elements_[indexValue]; if (fabs(value) >= COIN_INDEXED_TINY_ELEMENT) { newOne.indices_[newOne.nElements_++] = indexValue; } else { newOne.elements_[indexValue] = 0.0; } } } return newOne; } /// Return the element-wise product of two indexed vectors CoinIndexedVector CoinIndexedVector::operator*( const CoinIndexedVector &op2) { assert(!packedMode_); int i; int nElements = nElements_; int capacity = CoinMax(capacity_, op2.capacity_); CoinIndexedVector newOne(*this); newOne.reserve(capacity); bool needClean = false; // new one now can hold everything so just modify old and add new for (i = 0; i < op2.nElements_; i++) { int indexValue = op2.indices_[i]; double value = op2.elements_[indexValue]; double oldValue = elements_[indexValue]; if (oldValue) { value *= oldValue; newOne.elements_[indexValue] = value; if (fabs(value) < COIN_INDEXED_TINY_ELEMENT) { needClean = true; } } } newOne.nElements_ = nElements; if (needClean) { // go through again newOne.nElements_ = 0; for (i = 0; i < nElements; i++) { int indexValue = newOne.indices_[i]; double value = newOne.elements_[indexValue]; if (fabs(value) >= COIN_INDEXED_TINY_ELEMENT) { newOne.indices_[newOne.nElements_++] = indexValue; } else { newOne.elements_[indexValue] = 0.0; } } } return newOne; } /// Return the element-wise ratio of two indexed vectors CoinIndexedVector CoinIndexedVector::operator/(const CoinIndexedVector &op2) { assert(!packedMode_); // I am treating 0.0/0.0 as 0.0 int i; int nElements = nElements_; int capacity = CoinMax(capacity_, op2.capacity_); CoinIndexedVector newOne(*this); newOne.reserve(capacity); bool needClean = false; // new one now can hold everything so just modify old and add new for (i = 0; i < op2.nElements_; i++) { int indexValue = op2.indices_[i]; double value = op2.elements_[indexValue]; double oldValue = elements_[indexValue]; if (oldValue) { if (!value) throw CoinError("zero divisor", "/", "CoinIndexedVector"); value = oldValue / value; newOne.elements_[indexValue] = value; if (fabs(value) < COIN_INDEXED_TINY_ELEMENT) { needClean = true; } } } newOne.nElements_ = nElements; if (needClean) { // go through again newOne.nElements_ = 0; for (i = 0; i < nElements; i++) { int indexValue = newOne.indices_[i]; double value = newOne.elements_[indexValue]; if (fabs(value) >= COIN_INDEXED_TINY_ELEMENT) { newOne.indices_[newOne.nElements_++] = indexValue; } else { newOne.elements_[indexValue] = 0.0; } } } return newOne; } // The sum of two indexed vectors void CoinIndexedVector::operator+=(const CoinIndexedVector &op2) { // do slowly at first *this = *this + op2; } // The difference of two indexed vectors void CoinIndexedVector::operator-=(const CoinIndexedVector &op2) { // do slowly at first *this = *this - op2; } // The element-wise product of two indexed vectors void CoinIndexedVector::operator*=(const CoinIndexedVector &op2) { // do slowly at first *this = *this * op2; } // The element-wise ratio of two indexed vectors (0.0/0.0 => 0.0) (0 vanishes) void CoinIndexedVector::operator/=(const CoinIndexedVector &op2) { // do slowly at first *this = *this / op2; } //############################################################################# void CoinIndexedVector::sortDecrIndex() { // Should replace with std sort double *elements = new double[nElements_]; CoinZeroN(elements, nElements_); CoinSort_2(indices_, indices_ + nElements_, elements, CoinFirstGreater_2< int, double >()); delete[] elements; } void CoinIndexedVector::sortPacked() { assert(packedMode_); CoinSort_2(indices_, indices_ + nElements_, elements_); } void CoinIndexedVector::sortIncrElement() { double *elements = new double[nElements_]; int i; for (i = 0; i < nElements_; i++) elements[i] = elements_[indices_[i]]; CoinSort_2(elements, elements + nElements_, indices_, CoinFirstLess_2< double, int >()); delete[] elements; } void CoinIndexedVector::sortDecrElement() { double *elements = new double[nElements_]; int i; for (i = 0; i < nElements_; i++) elements[i] = elements_[indices_[i]]; CoinSort_2(elements, elements + nElements_, indices_, CoinFirstGreater_2< double, int >()); delete[] elements; } //############################################################################# void CoinIndexedVector::gutsOfSetVector(int size, const int *inds, const double *elems) { #ifndef COIN_FAST_CODE if (size < 0) throw CoinError("negative number of indices", "setVector", "CoinIndexedVector"); #endif assert(!packedMode_); // find largest int i; int maxIndex = -1; for (i = 0; i < size; i++) { int indexValue = inds[i]; #ifndef COIN_FAST_CODE if (indexValue < 0) throw CoinError("negative index", "setVector", "CoinIndexedVector"); #endif if (maxIndex < indexValue) maxIndex = indexValue; } reserve(maxIndex + 1); nElements_ = 0; // elements_ array is all zero bool needClean = false; int numberDuplicates = 0; for (i = 0; i < size; i++) { int indexValue = inds[i]; if (elements_[indexValue] == 0) { if (fabs(elems[i]) >= COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++] = indexValue; elements_[indexValue] = elems[i]; } } else { numberDuplicates++; elements_[indexValue] += elems[i]; if (fabs(elements_[indexValue]) < COIN_INDEXED_TINY_ELEMENT) needClean = true; // need to go through again } } if (needClean) { // go through again size = nElements_; nElements_ = 0; for (i = 0; i < size; i++) { int indexValue = indices_[i]; double value = elements_[indexValue]; if (fabs(value) >= COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++] = indexValue; } else { elements_[indexValue] = 0.0; } } } if (numberDuplicates) throw CoinError("duplicate index", "setVector", "CoinIndexedVector"); } //############################################################################# void CoinIndexedVector::gutsOfSetVector(int size, int numberIndices, const int *inds, const double *elems) { assert(!packedMode_); int i; reserve(size); #ifndef COIN_FAST_CODE if (numberIndices < 0) throw CoinError("negative number of indices", "setVector", "CoinIndexedVector"); #endif nElements_ = 0; // elements_ array is all zero bool needClean = false; int numberDuplicates = 0; for (i = 0; i < numberIndices; i++) { int indexValue = inds[i]; #ifndef COIN_FAST_CODE if (indexValue < 0) throw CoinError("negative index", "setVector", "CoinIndexedVector"); else if (indexValue >= size) throw CoinError("too large an index", "setVector", "CoinIndexedVector"); #endif if (elements_[indexValue]) { numberDuplicates++; elements_[indexValue] += elems[indexValue]; if (fabs(elements_[indexValue]) < COIN_INDEXED_TINY_ELEMENT) needClean = true; // need to go through again } else { #ifndef COIN_FAC_NEW if (fabs(elems[indexValue]) >= COIN_INDEXED_TINY_ELEMENT) { #endif elements_[indexValue] = elems[indexValue]; indices_[nElements_++] = indexValue; #ifndef COIN_FAC_NEW } #endif } } if (needClean) { // go through again size = nElements_; nElements_ = 0; for (i = 0; i < size; i++) { int indexValue = indices_[i]; double value = elements_[indexValue]; if (fabs(value) >= COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++] = indexValue; } else { elements_[indexValue] = 0.0; } } } if (numberDuplicates) throw CoinError("duplicate index", "setVector", "CoinIndexedVector"); } //----------------------------------------------------------------------------- void CoinIndexedVector::gutsOfSetPackedVector(int size, int numberIndices, const int *inds, const double *elems) { packedMode_ = true; int i; reserve(size); #ifndef COIN_FAST_CODE if (numberIndices < 0) throw CoinError("negative number of indices", "setVector", "CoinIndexedVector"); #endif nElements_ = 0; // elements_ array is all zero // Does not check for duplicates for (i = 0; i < numberIndices; i++) { int indexValue = inds[i]; #ifndef COIN_FAST_CODE if (indexValue < 0) throw CoinError("negative index", "setVector", "CoinIndexedVector"); //else if (indexValue>=size) //throw CoinError("too large an index", "setVector", "CoinIndexedVector"); #endif if (fabs(elems[i]) >= COIN_INDEXED_TINY_ELEMENT) { elements_[nElements_] = elems[i]; indices_[nElements_++] = indexValue; } } } //----------------------------------------------------------------------------- void CoinIndexedVector::gutsOfSetConstant(int size, const int *inds, double value) { assert(!packedMode_); #ifndef COIN_FAST_CODE if (size < 0) throw CoinError("negative number of indices", "setConstant", "CoinIndexedVector"); #endif // find largest int i; int maxIndex = -1; for (i = 0; i < size; i++) { int indexValue = inds[i]; #ifndef COIN_FAST_CODE if (indexValue < 0) throw CoinError("negative index", "setConstant", "CoinIndexedVector"); #endif if (maxIndex < indexValue) maxIndex = indexValue; } reserve(maxIndex + 1); nElements_ = 0; int numberDuplicates = 0; // elements_ array is all zero bool needClean = false; for (i = 0; i < size; i++) { int indexValue = inds[i]; if (elements_[indexValue] == 0) { if (fabs(value) >= COIN_INDEXED_TINY_ELEMENT) { elements_[indexValue] += value; indices_[nElements_++] = indexValue; } } else { numberDuplicates++; elements_[indexValue] += value; if (fabs(elements_[indexValue]) < COIN_INDEXED_TINY_ELEMENT) needClean = true; // need to go through again } } if (needClean) { // go through again size = nElements_; nElements_ = 0; for (i = 0; i < size; i++) { int indexValue = indices_[i]; double value = elements_[indexValue]; if (fabs(value) >= COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++] = indexValue; } else { elements_[indexValue] = 0.0; } } } if (numberDuplicates) throw CoinError("duplicate index", "setConstant", "CoinIndexedVector"); } //############################################################################# // Append a CoinIndexedVector to the end void CoinIndexedVector::append(const CoinIndexedVector &caboose) { const int cs = caboose.getNumElements(); const int *cind = caboose.getIndices(); const double *celem = caboose.denseVector(); int maxIndex = -1; int i; for (i = 0; i < cs; i++) { int indexValue = cind[i]; #ifndef COIN_FAST_CODE if (indexValue < 0) throw CoinError("negative index", "append", "CoinIndexedVector"); #endif if (maxIndex < indexValue) maxIndex = indexValue; } reserve(maxIndex + 1); bool needClean = false; int numberDuplicates = 0; for (i = 0; i < cs; i++) { int indexValue = cind[i]; if (elements_[indexValue]) { numberDuplicates++; elements_[indexValue] += celem[indexValue]; if (fabs(elements_[indexValue]) < COIN_INDEXED_TINY_ELEMENT) needClean = true; // need to go through again } else { if (fabs(celem[indexValue]) >= COIN_INDEXED_TINY_ELEMENT) { elements_[indexValue] = celem[indexValue]; indices_[nElements_++] = indexValue; } } } if (needClean) { // go through again int size = nElements_; nElements_ = 0; for (i = 0; i < size; i++) { int indexValue = indices_[i]; double value = elements_[indexValue]; if (fabs(value) >= COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++] = indexValue; } else { elements_[indexValue] = 0.0; } } } if (numberDuplicates) throw CoinError("duplicate index", "append", "CoinIndexedVector"); } // Append a CoinIndexedVector to the end and modify indices void CoinIndexedVector::append(CoinIndexedVector &other, int adjustIndex, bool zapElements /*,double multiplier*/) { const int cs = other.nElements_; const int *cind = other.indices_; double *celem = other.elements_; int *newInd = indices_ + nElements_; if (packedMode_) { double *newEls = elements_ + nElements_; if (zapElements) { if (other.packedMode_) { for (int i = 0; i < cs; i++) { newInd[i] = cind[i] + adjustIndex; newEls[i] = celem[i] /* *multiplier*/; celem[i] = 0.0; } } else { for (int i = 0; i < cs; i++) { int k = cind[i]; newInd[i] = k + adjustIndex; newEls[i] = celem[k] /* *multiplier*/; celem[k] = 0.0; } } } else { if (other.packedMode_) { for (int i = 0; i < cs; i++) { newEls[i] = celem[i] /* *multiplier*/; newInd[i] = cind[i] + adjustIndex; } } else { for (int i = 0; i < cs; i++) { int k = cind[i]; newInd[i] = k + adjustIndex; newEls[i] = celem[k] /* *multiplier*/; } } } } else { double *newEls = elements_ + adjustIndex; if (zapElements) { if (other.packedMode_) { for (int i = 0; i < cs; i++) { int k = cind[i]; newInd[i] = k + adjustIndex; newEls[k] = celem[i] /* *multiplier*/; celem[i] = 0.0; } } else { for (int i = 0; i < cs; i++) { int k = cind[i]; newInd[i] = k + adjustIndex; newEls[k] = celem[k] /* *multiplier*/; celem[k] = 0.0; } } } else { if (other.packedMode_) { for (int i = 0; i < cs; i++) { int k = cind[i]; newInd[i] = k + adjustIndex; newEls[k] = celem[i] /* *multiplier*/; } } else { for (int i = 0; i < cs; i++) { int k = cind[i]; newInd[i] = k + adjustIndex; newEls[k] = celem[k] /* *multiplier*/; } } } } nElements_ += cs; if (zapElements) other.nElements_ = 0; } #ifndef CLP_NO_VECTOR /* Equal. Returns true if vectors have same length and corresponding element of each vector is equal. */ bool CoinIndexedVector::operator==(const CoinPackedVectorBase &rhs) const { const int cs = rhs.getNumElements(); const int *cind = rhs.getIndices(); const double *celem = rhs.getElements(); if (nElements_ != cs) return false; int i; bool okay = true; for (i = 0; i < cs; i++) { int iRow = cind[i]; if (celem[i] != elements_[iRow]) { okay = false; break; } } return okay; } // Not equal bool CoinIndexedVector::operator!=(const CoinPackedVectorBase &rhs) const { const int cs = rhs.getNumElements(); const int *cind = rhs.getIndices(); const double *celem = rhs.getElements(); if (nElements_ != cs) return true; int i; bool okay = false; for (i = 0; i < cs; i++) { int iRow = cind[i]; if (celem[i] != elements_[iRow]) { okay = true; break; } } return okay; } #endif // Equal with a tolerance (returns -1 or position of inequality). int CoinIndexedVector::isApproximatelyEqual(const CoinIndexedVector &rhs, double tolerance) const { CoinIndexedVector tempA(*this); CoinIndexedVector tempB(rhs); int *cind = tempB.indices_; double *celem = tempB.elements_; double *elem = tempA.elements_; int cs = tempB.nElements_; int bad = -1; CoinRelFltEq eq(tolerance); if (!packedMode_ && !tempB.packedMode_) { for (int i = 0; i < cs; i++) { int iRow = cind[i]; if (!eq(celem[iRow], elem[iRow])) { bad = iRow; break; } else { celem[iRow] = elem[iRow] = 0.0; } } cs = tempA.nElements_; cind = tempA.indices_; for (int i = 0; i < cs; i++) { int iRow = cind[i]; if (!eq(celem[iRow], elem[iRow])) { bad = iRow; break; } else { celem[iRow] = elem[iRow] = 0.0; } } } else if (packedMode_ && tempB.packedMode_) { double *celem2 = rhs.elements_; memset(celem, 0, CoinMin(capacity_, tempB.capacity_) * sizeof(double)); for (int i = 0; i < cs; i++) { int iRow = cind[i]; celem[iRow] = celem2[i]; } for (int i = 0; i < cs; i++) { int iRow = cind[i]; if (!eq(celem[iRow], elem[i])) { bad = iRow; break; } else { celem[iRow] = elem[i] = 0.0; } } } else { double *celem2 = elem; double *celem3 = celem; if (packedMode_) { celem2 = celem; celem3 = elem; } for (int i = 0; i < cs; i++) { int iRow = cind[i]; if (!eq(celem2[iRow], celem3[i])) { bad = iRow; break; } else { celem2[iRow] = celem3[i] = 0.0; } } } if (bad < 0) { for (int i = 0; i < tempA.capacity_; i++) { if (elem[i]) { if (fabs(elem[i]) > tolerance) { bad = i; break; } } } for (int i = 0; i < tempB.capacity_; i++) { if (celem[i]) { if (fabs(celem[i]) > tolerance) { bad = i; break; } } } } return bad; } /* Equal. Returns true if vectors have same length and corresponding element of each vector is equal. */ bool CoinIndexedVector::operator==(const CoinIndexedVector &rhs) const { const int cs = rhs.nElements_; const int *cind = rhs.indices_; const double *celem = rhs.elements_; if (nElements_ != cs) return false; bool okay = true; CoinRelFltEq eq(1.0e-8); if (!packedMode_ && !rhs.packedMode_) { for (int i = 0; i < cs; i++) { int iRow = cind[i]; if (!eq(celem[iRow], elements_[iRow])) { okay = false; break; } } } else if (packedMode_ && rhs.packedMode_) { double *temp = new double[CoinMax(capacity_, rhs.capacity_)]; memset(temp, 0, CoinMax(capacity_, rhs.capacity_) * sizeof(double)); for (int i = 0; i < cs; i++) { int iRow = cind[i]; temp[iRow] = celem[i]; } for (int i = 0; i < cs; i++) { int iRow = cind[i]; if (!eq(temp[iRow], elements_[i])) { okay = false; break; } } } else { const double *celem2 = elements_; if (packedMode_) { celem2 = celem; celem = elements_; } for (int i = 0; i < cs; i++) { int iRow = cind[i]; if (!eq(celem2[iRow], celem[i])) { okay = false; break; } } } return okay; } /// Not equal bool CoinIndexedVector::operator!=(const CoinIndexedVector &rhs) const { const int cs = rhs.nElements_; const int *cind = rhs.indices_; const double *celem = rhs.elements_; if (nElements_ != cs) return true; int i; bool okay = false; for (i = 0; i < cs; i++) { int iRow = cind[i]; if (celem[iRow] != elements_[iRow]) { okay = true; break; } } return okay; } // Get value of maximum index int CoinIndexedVector::getMaxIndex() const { int maxIndex = -COIN_INT_MAX; int i; for (i = 0; i < nElements_; i++) maxIndex = CoinMax(maxIndex, indices_[i]); return maxIndex; } // Get value of minimum index int CoinIndexedVector::getMinIndex() const { int minIndex = COIN_INT_MAX; int i; for (i = 0; i < nElements_; i++) minIndex = CoinMin(minIndex, indices_[i]); return minIndex; } // Scan dense region and set up indices int CoinIndexedVector::scan() { nElements_ = 0; return scan(0, capacity_); } // Scan dense region from start to < end and set up indices int CoinIndexedVector::scan(int start, int end) { assert(!packedMode_); end = CoinMin(end, capacity_); start = CoinMax(start, 0); int i; int number = 0; int *indices = indices_ + nElements_; for (i = start; i < end; i++) if (elements_[i]) indices[number++] = i; nElements_ += number; return number; } // Scan dense region and set up indices with tolerance int CoinIndexedVector::scan(double tolerance) { nElements_ = 0; #if ABOCA_LITE_FACTORIZATION == 0 return scan(0, capacity_, tolerance); #else return scan(0, capacity_ & 0x7fffffff, tolerance); #endif } // Scan dense region from start to < end and set up indices with tolerance int CoinIndexedVector::scan(int start, int end, double tolerance) { assert(!packedMode_); #if ABOCA_LITE_FACTORIZATION == 0 end = CoinMin(end, capacity_); #else end = CoinMin(end, capacity_ & 0x7fffffff); #endif start = CoinMax(start, 0); int i; int number = 0; int *indices = indices_ + nElements_; for (i = start; i < end; i++) { double value = elements_[i]; if (value) { if (fabs(value) >= tolerance) indices[number++] = i; else elements_[i] = 0.0; } } nElements_ += number; return number; } // These pack down int CoinIndexedVector::cleanAndPack(double tolerance) { if (!packedMode_) { int number = nElements_; int i; nElements_ = 0; for (i = 0; i < number; i++) { int indexValue = indices_[i]; double value = elements_[indexValue]; elements_[indexValue] = 0.0; if (fabs(value) >= tolerance) { elements_[nElements_] = value; indices_[nElements_++] = indexValue; } } packedMode_ = true; } return nElements_; } // These pack down int CoinIndexedVector::cleanAndPackSafe(double tolerance) { int number = nElements_; if (number) { int i; nElements_ = 0; assert(!packedMode_); double *temp = NULL; bool gotMemory; if (number * 3 < capacity_ - 3 - 9999999) { // can find room without new gotMemory = false; // But may need to align on 8 byte boundary char *tempC = reinterpret_cast< char * >(indices_ + number); CoinInt64 xx = reinterpret_cast< CoinInt64 >(tempC); CoinInt64 iBottom = xx & 7; if (iBottom) tempC += 8 - iBottom; temp = reinterpret_cast< double * >(tempC); xx = reinterpret_cast< CoinInt64 >(temp); iBottom = xx & 7; assert(!iBottom); } else { // might be better to do complete scan gotMemory = true; temp = new double[number]; } for (i = 0; i < number; i++) { int indexValue = indices_[i]; double value = elements_[indexValue]; elements_[indexValue] = 0.0; if (fabs(value) >= tolerance) { temp[nElements_] = value; indices_[nElements_++] = indexValue; } } CoinMemcpyN(temp, nElements_, elements_); if (gotMemory) delete[] temp; packedMode_ = true; } return nElements_; } // Scan dense region and set up indices int CoinIndexedVector::scanAndPack() { nElements_ = 0; return scanAndPack(0, capacity_); } // Scan dense region from start to < end and set up indices int CoinIndexedVector::scanAndPack(int start, int end) { assert(!packedMode_); end = CoinMin(end, capacity_); start = CoinMax(start, 0); int i; int number = 0; int *indices = indices_ + nElements_; for (i = start; i < end; i++) { double value = elements_[i]; elements_[i] = 0.0; if (value) { elements_[number] = value; indices[number++] = i; } } nElements_ += number; packedMode_ = true; return number; } // Scan dense region and set up indices with tolerance int CoinIndexedVector::scanAndPack(double tolerance) { nElements_ = 0; return scanAndPack(0, capacity_, tolerance); } // Scan dense region from start to < end and set up indices with tolerance int CoinIndexedVector::scanAndPack(int start, int end, double tolerance) { assert(!packedMode_); end = CoinMin(end, capacity_); start = CoinMax(start, 0); int i; int number = 0; int *indices = indices_ + nElements_; for (i = start; i < end; i++) { double value = elements_[i]; elements_[i] = 0.0; if (fabs(value) >= tolerance) { elements_[number] = value; indices[number++] = i; } } nElements_ += number; packedMode_ = true; return number; } // This is mainly for testing - goes from packed to indexed void CoinIndexedVector::expand() { if (nElements_ && packedMode_) { double *temp = new double[capacity_]; int i; for (i = 0; i < nElements_; i++) temp[indices_[i]] = elements_[i]; CoinZeroN(elements_, nElements_); for (i = 0; i < nElements_; i++) { int iRow = indices_[i]; elements_[iRow] = temp[iRow]; } delete[] temp; } packedMode_ = false; } // Create packed array void CoinIndexedVector::createPacked(int number, const int *indices, const double *elements) { nElements_ = number; packedMode_ = true; CoinMemcpyN(indices, number, indices_); CoinMemcpyN(elements, number, elements_); } // Create packed array void CoinIndexedVector::createUnpacked(int number, const int *indices, const double *elements) { nElements_ = number; packedMode_ = false; for (int i = 0; i < nElements_; i++) { int iRow = indices[i]; indices_[i] = iRow; elements_[iRow] = elements[i]; } } // Create unpacked singleton void CoinIndexedVector::createOneUnpackedElement(int index, double element) { nElements_ = 1; packedMode_ = false; indices_[0] = index; elements_[index] = element; } // Print out void CoinIndexedVector::print() const { printf("Vector has %d elements (%spacked mode)\n", nElements_, packedMode_ ? "" : "un"); for (int i = 0; i < nElements_; i++) { if (i && (i % 5 == 0)) printf("\n"); int index = indices_[i]; double value = packedMode_ ? elements_[i] : elements_[index]; printf(" (%d,%g)", index, value); } printf("\n"); } // Zero out array void CoinArrayWithLength::clear() { assert((size_ > 0 && array_) || !array_); memset(array_, 0, size_); } // Get array with alignment void CoinArrayWithLength::getArray(CoinBigIndex size) { if (size > 0) { if (alignment_ > 2) { offset_ = 1 << alignment_; } else { offset_ = 0; } assert(size > 0); char *array = new char[size + offset_]; if (offset_) { // need offset CoinInt64 xx = reinterpret_cast< CoinInt64 >(array); int iBottom = static_cast< int >(xx & ((offset_ - 1))); if (iBottom) offset_ = offset_ - iBottom; else offset_ = 0; array_ = array + offset_; ; } else { array_ = array; } if (size_ != -1) size_ = size; } else { array_ = NULL; } } // Get rid of array with alignment void CoinArrayWithLength::conditionalDelete() { if (size_ == -1) { char *charArray = reinterpret_cast< char * >(array_); if (charArray) delete[](charArray - offset_); array_ = NULL; } else if (size_ >= 0) { size_ = -size_ - 2; } } // Really get rid of array with alignment void CoinArrayWithLength::reallyFreeArray() { char *charArray = reinterpret_cast< char * >(array_); if (charArray) delete[](charArray - offset_); array_ = NULL; size_ = -1; } // Get enough space void CoinArrayWithLength::getCapacity(CoinBigIndex numberBytes, CoinBigIndex numberNeeded) { CoinBigIndex k = capacity(); if (k < numberBytes) { CoinBigIndex saveSize = size_; reallyFreeArray(); size_ = saveSize; getArray(CoinMax(numberBytes, numberNeeded)); } else if (size_ < 0) { size_ = -size_ - 2; } } /* Alternate Constructor - length in bytes mode - 0 size_ set to size >0 size_ set to size and zeroed if size<=0 just does alignment If abs(mode) >2 then align on that as power of 2 */ CoinArrayWithLength::CoinArrayWithLength(CoinBigIndex size, int mode) { alignment_ = abs(mode); size_ = size; getArray(size); if (mode > 0 && array_) memset(array_, 0, size); } CoinArrayWithLength::~CoinArrayWithLength() { if (array_) delete[](array_ - offset_); } // Conditionally gets new array char * CoinArrayWithLength::conditionalNew(CoinBigIndex sizeWanted) { if (size_ == -1) { getCapacity(static_cast< int >(sizeWanted)); } else { int newSize = static_cast< int >(sizeWanted * 101 / 100) + 64; // round to multiple of 16 newSize -= newSize & 15; getCapacity(static_cast< int >(sizeWanted), newSize); } return array_; } /* Copy constructor. */ CoinArrayWithLength::CoinArrayWithLength(const CoinArrayWithLength &rhs) { assert(capacity() >= 0); getArray(rhs.capacity()); if (size_ > 0) CoinMemcpyN(rhs.array_, size_, array_); } /* Copy constructor.2 */ CoinArrayWithLength::CoinArrayWithLength(const CoinArrayWithLength *rhs) { assert(rhs->capacity() >= 0); size_ = rhs->size_; getArray(rhs->capacity()); if (size_ > 0) CoinMemcpyN(rhs->array_, size_, array_); } /* Assignment operator. */ CoinArrayWithLength & CoinArrayWithLength::operator=(const CoinArrayWithLength &rhs) { if (this != &rhs) { assert(rhs.size_ != -1 || !rhs.array_); if (rhs.size_ == -1) { reallyFreeArray(); } else { getCapacity(rhs.size_); if (size_ > 0) CoinMemcpyN(rhs.array_, size_, array_); } } return *this; } /* Assignment with length (if -1 use internal length) */ void CoinArrayWithLength::copy(const CoinArrayWithLength &rhs, int numberBytes) { if (numberBytes == -1 || numberBytes <= rhs.capacity()) { CoinArrayWithLength::operator=(rhs); } else { assert(numberBytes >= 0); getCapacity(numberBytes); if (rhs.array_) CoinMemcpyN(rhs.array_, numberBytes, array_); } } /* Assignment with length - does not copy */ void CoinArrayWithLength::allocate(const CoinArrayWithLength &rhs, CoinBigIndex numberBytes) { if (numberBytes == -1 || numberBytes <= rhs.capacity()) { assert(rhs.size_ != -1 || !rhs.array_); if (rhs.size_ == -1) { reallyFreeArray(); } else { getCapacity(rhs.size_); } } else { assert(numberBytes >= 0); if (size_ == -1) { delete[] array_; array_ = NULL; } else { size_ = -1; } if (rhs.size_ >= 0) size_ = numberBytes; assert(numberBytes >= 0); assert(!array_); if (numberBytes) array_ = new char[numberBytes]; } } // Does what is needed to set persistence void CoinArrayWithLength::setPersistence(int flag, int currentLength) { if (flag) { if (size_ == -1) { if (currentLength && array_) { size_ = currentLength; } else { conditionalDelete(); size_ = 0; array_ = NULL; } } } else { size_ = -1; } } // Swaps memory between two members void CoinArrayWithLength::swap(CoinArrayWithLength &other) { #ifdef COIN_DEVELOP if (!(size_ == other.size_ || size_ == -1 || other.size_ == -1)) printf("Two arrays have sizes - %d and %d\n", size_, other.size_); #endif assert(alignment_ == other.alignment_); char *swapArray = other.array_; other.array_ = array_; array_ = swapArray; CoinBigIndex swapSize = other.size_; other.size_ = size_; size_ = swapSize; int swapOffset = other.offset_; other.offset_ = offset_; offset_ = swapOffset; } // Extend a persistent array keeping data (size in bytes) void CoinArrayWithLength::extend(int newSize) { //assert (newSize>=capacity()&&capacity()>=0); assert(size_ >= 0); // not much point otherwise if (newSize > size_) { char *temp = array_; getArray(newSize); if (temp) { CoinMemcpyN(array_, size_, temp); delete[](temp - offset_); } size_ = newSize; } } /* Default constructor */ CoinPartitionedVector::CoinPartitionedVector() : CoinIndexedVector() { memset(startPartition_, 0, ((&numberPartitions_ - startPartition_) + 1) * sizeof(int)); } /* Copy constructor. */ CoinPartitionedVector::CoinPartitionedVector(const CoinPartitionedVector &rhs) : CoinIndexedVector(rhs) { memcpy(startPartition_, rhs.startPartition_, ((&numberPartitions_ - startPartition_) + 1) * sizeof(int)); } /* Copy constructor.2 */ CoinPartitionedVector::CoinPartitionedVector(const CoinPartitionedVector *rhs) : CoinIndexedVector(rhs) { memcpy(startPartition_, rhs->startPartition_, ((&numberPartitions_ - startPartition_) + 1) * sizeof(int)); } /* Assignment operator. */ CoinPartitionedVector &CoinPartitionedVector::operator=(const CoinPartitionedVector &rhs) { if (this != &rhs) { CoinIndexedVector::operator=(rhs); memcpy(startPartition_, rhs.startPartition_, ((&numberPartitions_ - startPartition_) + 1) * sizeof(int)); } return *this; } /* Destructor */ CoinPartitionedVector::~CoinPartitionedVector() { } // Add up number of elements in partitions void CoinPartitionedVector::computeNumberElements() { if (numberPartitions_) { assert(packedMode_); int n = 0; for (int i = 0; i < numberPartitions_; i++) n += numberElementsPartition_[i]; nElements_ = n; } } // Add up number of elements in partitions and pack and get rid of partitions void CoinPartitionedVector::compact() { if (numberPartitions_) { int n = numberElementsPartition_[0]; numberElementsPartition_[0] = 0; for (int i = 1; i < numberPartitions_; i++) { int nThis = numberElementsPartition_[i]; int start = startPartition_[i]; memmove(indices_ + n, indices_ + start, nThis * sizeof(int)); memmove(elements_ + n, elements_ + start, nThis * sizeof(double)); n += nThis; } nElements_ = n; // clean up for (int i = 1; i < numberPartitions_; i++) { int nThis = numberElementsPartition_[i]; int start = startPartition_[i]; numberElementsPartition_[i] = 0; int end = nThis + start; if (nElements_ < end) { int offset = CoinMax(nElements_ - start, 0); start += offset; nThis -= offset; memset(elements_ + start, 0, nThis * sizeof(double)); } } packedMode_ = true; numberPartitions_ = 0; } } /* Reserve space. */ void CoinPartitionedVector::reserve(int n) { CoinIndexedVector::reserve(n); memset(startPartition_, 0, ((&numberPartitions_ - startPartition_) + 1) * sizeof(int)); startPartition_[1] = capacity_; // for safety } // Setup partitions (needs end as well) void CoinPartitionedVector::setPartitions(int number, const int *starts) { if (number) { packedMode_ = true; assert(number <= COIN_PARTITIONS); memcpy(startPartition_, starts, (number + 1) * sizeof(int)); numberPartitions_ = number; #ifndef NDEBUG assert(startPartition_[0] == 0); int last = -1; for (int i = 0; i < numberPartitions_; i++) { assert(startPartition_[i] >= last); assert(numberElementsPartition_[i] == 0); last = startPartition_[i]; } assert(startPartition_[numberPartitions_] >= last && startPartition_[numberPartitions_] <= capacity_); #endif } else { clearAndReset(); } } // Reset the vector (as if were just created an empty vector). Gets rid of partitions void CoinPartitionedVector::clearAndReset() { if (numberPartitions_) { assert(packedMode_ || !nElements_); for (int i = 0; i < numberPartitions_; i++) { int n = numberElementsPartition_[i]; memset(elements_ + startPartition_[i], 0, n * sizeof(double)); numberElementsPartition_[i] = 0; } } else { memset(elements_, 0, nElements_ * sizeof(double)); } nElements_ = 0; numberPartitions_ = 0; startPartition_[1] = capacity_; packedMode_ = false; } // Reset the vector (as if were just created an empty vector). Keeps partitions void CoinPartitionedVector::clearAndKeep() { assert(packedMode_); for (int i = 0; i < numberPartitions_; i++) { int n = numberElementsPartition_[i]; memset(elements_ + startPartition_[i], 0, n * sizeof(double)); numberElementsPartition_[i] = 0; } nElements_ = 0; } // Clear a partition. void CoinPartitionedVector::clearPartition(int partition) { assert(packedMode_); assert(partition < COIN_PARTITIONS); int n = numberElementsPartition_[partition]; memset(elements_ + startPartition_[partition], 0, n * sizeof(double)); numberElementsPartition_[partition] = 0; } #ifndef NDEBUG // For debug check vector is clear i.e. no elements void CoinPartitionedVector::checkClear() { #ifndef NDEBUG //printf("checkClear %p\n",this); assert(!nElements_); //assert(!packedMode_); int i; for (i = 0; i < capacity_; i++) { assert(!elements_[i]); } #else if (nElements_) { printf("%d nElements_ - checkClear\n", nElements_); abort(); } int i; int n = 0; int k = -1; for (i = 0; i < capacity_; i++) { if (elements_[i]) { n++; if (k < 0) k = i; } } if (n) { printf("%d elements, first %d - checkClear\n", n, k); abort(); } #endif } // For debug check vector is clean i.e. elements match indices void CoinPartitionedVector::checkClean() { //printf("checkClean %p\n",this); int i; if (!nElements_) { checkClear(); } else { if (packedMode_) { for (i = 0; i < nElements_; i++) assert(elements_[i]); for (; i < capacity_; i++) assert(!elements_[i]); } else { double *copy = new double[capacity_]; CoinMemcpyN(elements_, capacity_, copy); for (i = 0; i < nElements_; i++) { int indexValue = indices_[i]; assert(copy[indexValue]); copy[indexValue] = 0.0; } for (i = 0; i < capacity_; i++) assert(!copy[i]); delete[] copy; } #ifndef NDEBUG // check mark array zeroed char *mark = reinterpret_cast< char * >(indices_ + capacity_); for (i = 0; i < capacity_; i++) { assert(!mark[i]); } #endif } } #endif // Scan dense region and set up indices (returns number found) int CoinPartitionedVector::scan(int partition, double tolerance) { assert(packedMode_); assert(partition < COIN_PARTITIONS); int n = 0; int start = startPartition_[partition]; double *COIN_RESTRICT elements = elements_ + start; int *COIN_RESTRICT indices = indices_ + start; int sizePartition = startPartition_[partition + 1] - start; if (!tolerance) { for (int i = 0; i < sizePartition; i++) { double value = elements[i]; if (value) { elements[i] = 0.0; elements[n] = value; indices[n++] = i + start; } } } else { for (int i = 0; i < sizePartition; i++) { double value = elements[i]; if (value) { elements[i] = 0.0; if (fabs(value) > tolerance) { elements[n] = value; indices[n++] = i + start; } } } } numberElementsPartition_[partition] = n; return n; } // Print out void CoinPartitionedVector::print() const { printf("Vector has %d elements (%d partitions)\n", nElements_, numberPartitions_); if (!numberPartitions_) { CoinIndexedVector::print(); return; } double *tempElements = CoinCopyOfArray(elements_, capacity_); int *tempIndices = CoinCopyOfArray(indices_, capacity_); for (int partition = 0; partition < numberPartitions_; partition++) { printf("Partition %d has %d elements\n", partition, numberElementsPartition_[partition]); int start = startPartition_[partition]; double *COIN_RESTRICT elements = tempElements + start; int *COIN_RESTRICT indices = tempIndices + start; CoinSort_2(indices, indices + numberElementsPartition_[partition], elements); for (int i = 0; i < numberElementsPartition_[partition]; i++) { if (i && (i % 5 == 0)) printf("\n"); int index = indices[i]; double value = elements[i]; printf(" (%d,%g)", index, value); } printf("\n"); } } /* Sort the indexed storage vector (increasing indices). */ void CoinPartitionedVector::sort() { assert(packedMode_); for (int partition = 0; partition < numberPartitions_; partition++) { int start = startPartition_[partition]; double *COIN_RESTRICT elements = elements_ + start; int *COIN_RESTRICT indices = indices_ + start; CoinSort_2(indices, indices + numberElementsPartition_[partition], elements); } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveZeros.hpp0000644000175200017520000000317513414454441017731 0ustar coincoin/* $Id: CoinPresolveZeros.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolveZeros_H #define CoinPresolveZeros_H /*! \file Drop/reintroduce explicit zeros. */ #define DROP_ZERO 8 /*! \brief Tracking information for an explicit zero coefficient \todo Why isn't this a nested class in drop_zero_coefficients_action? That would match the structure of other presolve classes. */ struct dropped_zero { int row; int col; }; /*! \brief Removal of explicit zeros The presolve action for this class removes explicit zeros from the constraint matrix. The postsolve action puts them back. */ class drop_zero_coefficients_action : public CoinPresolveAction { const int nzeros_; const dropped_zero *const zeros_; drop_zero_coefficients_action(int nzeros, const dropped_zero *zeros, const CoinPresolveAction *next) : CoinPresolveAction(next) , nzeros_(nzeros) , zeros_(zeros) { } public: const char *name() const { return ("drop_zero_coefficients_action"); } static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, int *checkcols, int ncheckcols, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~drop_zero_coefficients_action() { deleteAction(zeros_, dropped_zero *); } }; const CoinPresolveAction *drop_zero_coefficients(CoinPresolveMatrix *prob, const CoinPresolveAction *next); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinWarmStartPrimalDual.hpp0000644000175200017520000001453413414454441021007 0ustar coincoin/* $Id: CoinWarmStartPrimalDual.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinWarmStartPrimalDual_H #define CoinWarmStartPrimalDual_H #include "CoinHelperFunctions.hpp" #include "CoinWarmStart.hpp" #include "CoinWarmStartVector.hpp" //############################################################################# /** WarmStart information that is only a dual vector */ class CoinWarmStartPrimalDual : public virtual CoinWarmStart { public: /// return the size of the dual vector inline int dualSize() const { return dual_.size(); } /// return a pointer to the array of duals inline const double *dual() const { return dual_.values(); } /// return the size of the primal vector inline int primalSize() const { return primal_.size(); } /// return a pointer to the array of primals inline const double *primal() const { return primal_.values(); } /** Assign the primal/dual vectors to be the warmstart information. In this method the object assumes ownership of the pointers and upon return \c primal and \c dual will be a NULL pointers. If copying is desirable use the constructor. NOTE: \c primal and \c dual must have been allocated by new double[], because they will be freed by delete[] upon the desructtion of this object... */ void assign(int primalSize, int dualSize, double *&primal, double *&dual) { primal_.assignVector(primalSize, primal); dual_.assignVector(dualSize, dual); } CoinWarmStartPrimalDual() : primal_() , dual_() { } CoinWarmStartPrimalDual(int primalSize, int dualSize, const double *primal, const double *dual) : primal_(primalSize, primal) , dual_(dualSize, dual) { } CoinWarmStartPrimalDual(const CoinWarmStartPrimalDual &rhs) : primal_(rhs.primal_) , dual_(rhs.dual_) { } CoinWarmStartPrimalDual &operator=(const CoinWarmStartPrimalDual &rhs) { if (this != &rhs) { primal_ = rhs.primal_; dual_ = rhs.dual_; } return *this; } /*! \brief Clear the data Make it appear as if the warmstart was just created using the default constructor. */ inline void clear() { primal_.clear(); dual_.clear(); } inline void swap(CoinWarmStartPrimalDual &rhs) { if (this != &rhs) { primal_.swap(rhs.primal_); dual_.swap(rhs.dual_); } } /** `Virtual constructor' */ virtual CoinWarmStart *clone() const { return new CoinWarmStartPrimalDual(*this); } virtual ~CoinWarmStartPrimalDual() {} /*! \name PrimalDual warm start `diff' methods */ //@{ /*! \brief Generate a `diff' that can convert the warm start passed as a parameter to the warm start specified by \c this. The capabilities are limited: the basis passed as a parameter can be no larger than the basis pointed to by \c this. */ virtual CoinWarmStartDiff * generateDiff(const CoinWarmStart *const oldCWS) const; /*! \brief Apply \p diff to this warm start. Update this warm start by applying \p diff. It's assumed that the allocated capacity of the warm start is sufficiently large. */ virtual void applyDiff(const CoinWarmStartDiff *const cwsdDiff); //@} #if 0 protected: inline const CoinWarmStartVector& primalWarmStartVector() const { return primal_; } inline const CoinWarmStartVector& dualWarmStartVector() const { return dual_; } #endif private: ///@name Private data members //@{ CoinWarmStartVector< double > primal_; CoinWarmStartVector< double > dual_; //@} }; //############################################################################# /*! \class CoinWarmStartPrimalDualDiff \brief A `diff' between two CoinWarmStartPrimalDual objects This class exists in order to hide from the world the details of calculating and representing a `diff' between two CoinWarmStartPrimalDual objects. For convenience, assignment, cloning, and deletion are visible to the world, and default and copy constructors are made available to derived classes. Knowledge of the rest of this structure, and of generating and applying diffs, is restricted to the friend functions CoinWarmStartPrimalDual::generateDiff() and CoinWarmStartPrimalDual::applyDiff(). The actual data structure is a pair of vectors, #diffNdxs_ and #diffVals_. */ class CoinWarmStartPrimalDualDiff : public virtual CoinWarmStartDiff { friend CoinWarmStartDiff * CoinWarmStartPrimalDual::generateDiff(const CoinWarmStart *const oldCWS) const; friend void CoinWarmStartPrimalDual::applyDiff(const CoinWarmStartDiff *const diff); public: /*! \brief `Virtual constructor'. To be used when retaining polymorphism is important */ virtual CoinWarmStartDiff *clone() const { return new CoinWarmStartPrimalDualDiff(*this); } /*! \brief Destructor */ virtual ~CoinWarmStartPrimalDualDiff() {} protected: /*! \brief Default constructor This is protected (rather than private) so that derived classes can see it when they make their default constructor protected or private. */ CoinWarmStartPrimalDualDiff() : primalDiff_() , dualDiff_() { } /*! \brief Copy constructor For convenience when copying objects containing CoinWarmStartPrimalDualDiff objects. But consider whether you should be using #clone() to retain polymorphism. This is protected (rather than private) so that derived classes can see it when the make their copy constructor protected or private. */ CoinWarmStartPrimalDualDiff(const CoinWarmStartPrimalDualDiff &rhs) : primalDiff_(rhs.primalDiff_) , dualDiff_(rhs.dualDiff_) { } /*! \brief Clear the data Make it appear as if the diff was just created using the default constructor. */ inline void clear() { primalDiff_.clear(); dualDiff_.clear(); } inline void swap(CoinWarmStartPrimalDualDiff &rhs) { if (this != &rhs) { primalDiff_.swap(rhs.primalDiff_); dualDiff_.swap(rhs.dualDiff_); } } private: /*! \brief These two differences describe the differences in the primal and in the dual vector. */ CoinWarmStartVectorDiff< double > primalDiff_; CoinWarmStartVectorDiff< double > dualDiff_; }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveUseless.hpp0000644000175200017520000000352613414454441020252 0ustar coincoin/* $Id: CoinPresolveUseless.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolveUseless_H #define CoinPresolveUseless_H #define USELESS 20 class useless_constraint_action : public CoinPresolveAction { struct action { double rlo; double rup; const int *rowcols; const double *rowels; int row; int ninrow; }; const int nactions_; const action *const actions_; useless_constraint_action(int nactions, const action *actions, const CoinPresolveAction *next); public: const char *name() const; // These rows are asserted to be useless, // that is, given a solution the row activity // must be in range. static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const int *useless_rows, int nuseless_rows, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~useless_constraint_action(); }; /*! \relates useless_constraint_action \brief Scan constraints looking for useless constraints A front end to identify useless constraints and hand them to useless_constraint_action::presolve() for processing. In a bit more detail, the routine implements a greedy algorithm that identifies a set of necessary constraints. A constraint is necessary if it implies a tighter bound on a variable than the original column bound. These tighter column bounds are then used to calculate row activity and identify constraints that are useless given the presence of the necessary constraints. */ const CoinPresolveAction *testRedundant(CoinPresolveMatrix *prob, const CoinPresolveAction *next); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinWarmStart.hpp0000644000175200017520000000314013414454441017023 0ustar coincoin/* $Id: CoinWarmStart.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinWarmStart_H #define CoinWarmStart_H //############################################################################# class CoinWarmStartDiff; /** Abstract base class for warm start information. Really nothing can be generalized for warm start information --- all we know is that it exists. Hence the abstract base class contains only a virtual destructor and a virtual clone function (a virtual constructor), so that derived classes can provide these functions. */ class CoinWarmStart { public: /// Abstract destructor virtual ~CoinWarmStart() {} /// `Virtual constructor' virtual CoinWarmStart *clone() const = 0; virtual CoinWarmStartDiff * generateDiff(const CoinWarmStart *const) const { return 0; } virtual void applyDiff(const CoinWarmStartDiff *const) {} }; /*! \class CoinWarmStartDiff \brief Abstract base class for warm start `diff' objects For those types of warm start objects where the notion of a `diff' makes sense, this virtual base class is provided. As with CoinWarmStart, its sole reason for existence is to make it possible to write solver-independent code. */ class CoinWarmStartDiff { public: /// Abstract destructor virtual ~CoinWarmStartDiff() {} /// `Virtual constructor' virtual CoinWarmStartDiff *clone() const = 0; }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinLpIO.hpp0000644000175200017520000007106313421557502015713 0ustar coincoin/* $Id: CoinLpIO.hpp 2088 2019-01-22 09:15:46Z forrest $ */ // Last edit: 11/5/08 // // Name: CoinLpIO.hpp; Support for Lp files // Author: Francois Margot // Tepper School of Business // Carnegie Mellon University, Pittsburgh, PA 15213 // email: fmargot@andrew.cmu.edu // Date: 12/28/03 //----------------------------------------------------------------------------- // Copyright (C) 2003, Francois Margot, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinLpIO_H #define CoinLpIO_H #include #include "CoinPackedMatrix.hpp" #include "CoinMessage.hpp" #include "CoinFileIO.hpp" class CoinSet; const int MAX_OBJECTIVES = 2; typedef int COINColumnIndex; /** Class to read and write Lp files Lp file format: / this is a comment
\ this too
Min
obj: x0 + x1 + 3 x2 - 4.5 xyr + 1
s.t.
cons1: x0 - x2 - 2.3 x4 <= 4.2 / this is another comment
c2: x1 + x2 >= 1
cc: x1 + x2 + xyr = 2
Bounds
0 <= x1 <= 3
1 >= x2
x3 = 1
-2 <= x4 <= Inf
xyr free
Integers
x0
Generals
x1 xyr
Binaries
x2
End Notes:
  • Keywords are: Min, Max, Minimize, Maximize, s.t., Subject To, Bounds, Integers, Generals, Binaries, Semis, End, Free, Inf.
  • Keywords are not case sensitive and may be in plural or singular form. They should not be used as objective, row or column names.
  • Bounds, Integers, Generals, Binaries sections are optional.
  • Generals and Integers are synonymous.
  • Bounds section (if any) must come before Integers, Generals, and Binaries sections.
  • Row names must be followed by ':' without blank space. Row names are optional. If row names are present, they must be distinct (if the k-th constraint has no given name, its name is set automatically to "consk" for k=0,...,). For valid row names, see the method is_invalid_name().
  • Column names must be followed by a blank space. They must be distinct. For valid column names, see the method is_invalid_name().
  • Multiple objectives may be specified, but when there are multiple objectives, they must have names (to indicate where each one starts).
  • The objective function names must be followed by ':' without blank space. If there is a single objective, the objective function name is optional. If no name is given, the name is set to "obj" by default. For valid objective function names, see the method is_invalid_name().
  • Ranged constraints are written as two constraints. If a name is given for a ranged constraint, the upper bound constraint has that name and the lower bound constraint has that name with "_low" as suffix. This should be kept in mind when assigning names to ranged constraint, as the resulting name must be distinct from all the other names and be considered valid by the method is_invalid_name().
  • At most one term related to any single variable may appear in the objective function; if more than one term are present, only the last one is taken into account. At most one constant term may appear in the objective function; if present, it must appear last.
  • Default bounds are 0 for lower bound and +infinity for upper bound.
  • Free variables get default lower bound -infinity and default upper bound +infinity. Writing "x0 Free" in an LP file means "set lower bound on x0 to -infinity".
  • If more than one upper (resp. lower) bound on a variable appears in the Bounds section, the last one is the one taken into account. The bounds for a binary variable are set to 0/1 only if this bound is stronger than the bound obtained from the Bounds section.
  • Numbers larger than DBL_MAX (or larger than 1e+400) in the input file might crash the code.
  • A comment must start with '\' or '/'. That symbol must either be the first character of a line or be preceded by a blank space. The comment ends at the end of the line. Comments are skipped while reading an Lp file and they may be inserted anywhere.
*/ class CoinLpIO { friend void CoinLpIOUnitTest(const std::string &lpDir); public: /**@name Constructor and Destructor */ //@{ /// Default Constructor CoinLpIO(); /// Does the heavy lifting for destruct and assignment. void gutsOfDestructor(); /// Does the heavy lifting for copy and assignment void gutsOfCopy(const CoinLpIO &); /// assignment operator CoinLpIO &operator=(const CoinLpIO &rhs); /// Copy constructor CoinLpIO(const CoinLpIO &); /// Destructor ~CoinLpIO(); /** Free the vector previous_names_[section] and set card_previous_names_[section] to 0. section = 0 for row names, section = 1 for column names. */ void freePreviousNames(const int section); /// Free all memory (except memory related to hash tables and objName_). void freeAll(); //@} /** A quick inlined function to convert from lb/ub style constraint definition to sense/rhs/range style */ inline void convertBoundToSense(const double lower, const double upper, char &sense, double &right, double &range) const; /**@name Queries */ //@{ /// Get the problem name const char *getProblemName() const; /// Set problem name void setProblemName(const char *name); /// Get number of columns int getNumCols() const; /// Get number of rows int getNumRows() const; /// Get number of nonzero elements CoinBigIndex getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds const double *getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds const double *getColUpper() const; /// Get pointer to array[getNumRows()] of row lower bounds const double *getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds const double *getRowUpper() const; /** Get pointer to array[getNumRows()] of constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ const char *getRowSense() const; /** Get pointer to array[getNumRows()] of constraint right-hand sides. Given constraints with upper (rowupper) and/or lower (rowlower) bounds, the constraint right-hand side (rhs) is set as
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ const double *getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges. Given constraints with upper (rowupper) and/or lower (rowlower) bounds, the constraint range (rowrange) is set as
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
Put another way, only ranged constraints have a nontrivial value for rowrange. */ const double *getRowRange() const; /// Get pointer to array[getNumCols()] of objective function coefficients const int getNumObjectives() const; /// Get pointer to array[getNumCols()] of objective function coefficients const double *getObjCoefficients() const; /// Get pointer to array[getNumCols()] of objective function coefficients for objective j const double *getObjCoefficients(int j) const; /// Get pointer to row-wise copy of the coefficient matrix const CoinPackedMatrix *getMatrixByRow() const; /// Get pointer to column-wise copy of the coefficient matrix const CoinPackedMatrix *getMatrixByCol() const; /// Get objective function name const char *getObjName() const; /// Get objective function name for objective j const char *getObjName(int j) const; /// Get pointer to array[*card_prev] of previous row names. /// The value of *card_prev might be different than getNumRows()+1 if /// non distinct /// row names were present or if no previous names were saved or if /// the object was holding a different problem before. void getPreviousRowNames(char const *const *prev, int *card_prev) const; /// Get pointer to array[*card_prev] of previous column names. /// The value of *card_prev might be different than getNumCols() if non /// distinct column names were present of if no previous names were saved, /// or if the object was holding a different problem before. void getPreviousColNames(char const *const *prev, int *card_prev) const; /// Get pointer to array[getNumRows()+1] of row names, including /// objective function name as last entry. char const *const *getRowNames() const; /// Get pointer to array[getNumCols()] of column names char const *const *getColNames() const; /// Return the row name for the specified index. /// Return the objective function name if index = getNumRows(). /// Return 0 if the index is out of range or if row names are not defined. const char *rowName(int index) const; /// Return the column name for the specified index. /// Return 0 if the index is out of range or if column names are not /// defined. const char *columnName(int index) const; /// Return the index for the specified row name. /// Return getNumRows() for the objective function name. /// Return -1 if the name is not found. int rowIndex(const char *name) const; /// Return the index for the specified column name. /// Return -1 if the name is not found. int columnIndex(const char *name) const; ///Returns the (constant) objective offset double objectiveOffset() const; ///Returns the (constant) objective offset for objective j double objectiveOffset(int j) const; /// Set objective offset inline void setObjectiveOffset(double value) { objectiveOffset_[0] = value; } /// Set objective offset inline void setObjectiveOffset(double value, int j) { objectiveOffset_[j] = value; } /// Return true if a column is an integer (binary or general /// integer) variable bool isInteger(int columnNumber) const; /// Get characteristic vector of integer variables const char *integerColumns() const; //@} /**@name Parameters */ //@{ /// Get infinity double getInfinity() const; /// Set infinity. Any number larger is considered infinity. /// Default: DBL_MAX void setInfinity(const double); /// Get epsilon double getEpsilon() const; /// Set epsilon. /// Default: 1e-5. void setEpsilon(const double); /// Get numberAcross, the number of monomials to be printed per line int getNumberAcross() const; /// Set numberAcross. /// Default: 10. void setNumberAcross(const int); /// Get decimals, the number of digits to write after the decimal point int getDecimals() const; /// Set decimals. /// Default: 5 void setDecimals(const int); //@} /**@name Public methods */ //@{ /** Set the data of the object. Set it from the coefficient matrix m, the lower bounds collb, the upper bounds colub, objective function obj_coeff, integrality vector integrality, lower/upper bounds on the constraints. The sense of optimization of the objective function is assumed to be a minimization. Numbers larger than DBL_MAX (or larger than 1e+400) might crash the code. There are two version. The second one is for setting multiple objectives. */ void setLpDataWithoutRowAndColNames( const CoinPackedMatrix &m, const double *collb, const double *colub, const double *obj_coeff, const char *integrality, const double *rowlb, const double *rowub); void setLpDataWithoutRowAndColNames( const CoinPackedMatrix &m, const double *collb, const double *colub, const double *obj_coeff[MAX_OBJECTIVES], int num_objectives, const char *integrality, const double *rowlb, const double *rowub); /** Return 0 if buff is a valid name for a row, a column or objective function, return a positive number otherwise. If parameter ranged = true, the name is intended for a ranged constraint.
Return 1 if the name has more than 100 characters (96 characters for a ranged constraint name, as "_low" will be added to the name).
Return 2 if the name starts with a number.
Return 3 if the name is not built with the letters a to z, A to Z, the numbers 0 to 9 or the characters " ! # $ % & ( ) . ; ? @ _ ' ` { } ~
Return 4 if the name is a keyword.
Return 5 if the name is empty or NULL. */ int is_invalid_name(const char *buff, const bool ranged) const; /** Return 0 if each of the card_vnames entries of vnames is a valid name, return a positive number otherwise. The return value, if not 0, is the return value of is_invalid_name() for the last invalid name in vnames. If check_ranged = true, the names are row names and names for ranged constaints must be checked for additional restrictions since "_low" will be added to the name if an Lp file is written. When check_ranged = true, card_vnames must have getNumRows()+1 entries, with entry vnames[getNumRows()] being the name of the objective function. For a description of valid names and return values, see the method is_invalid_name(). This method must not be called with check_ranged = true before setLpDataWithoutRowAndColNames() has been called, since access to the indices of all the ranged constraints is required. */ int are_invalid_names(char const *const *vnames, const int card_vnames, const bool check_ranged) const; /// Set objective function name to the default "obj" and row /// names to the default "cons0", "cons1", ... void setDefaultRowNames(); /// Set column names to the default "x0", "x1", ... void setDefaultColNames(); /** Set the row and column names. The array rownames must either be NULL or have exactly getNumRows()+1 distinct entries, each of them being a valid name (see is_invalid_name()) and the last entry being the intended name for the objective function. If rownames is NULL, existing row names and objective function name are not changed. If rownames is deemed invalid, default row names and objective function name are used (see setDefaultRowNames()). The memory location of array rownames (or its entries) should not be related to the memory location of the array (or entries) obtained from getRowNames() or getPreviousRowNames(), as the call to setLpDataRowAndColNames() modifies the corresponding arrays. Unpredictable results are obtained if this requirement is ignored. Similar remarks apply to the array colnames, which must either be NULL or have exactly getNumCols() entries. */ void setLpDataRowAndColNames(char const *const *const rownames, char const *const *const colnames); /** Write the data in Lp format in the file with name filename. Coefficients with value less than epsilon away from an integer value are written as integers. Write at most numberAcross monomials on a line. Write non integer numbers with decimals digits after the decimal point. Write objective function name and row names if useRowNames = true. Ranged constraints are written as two constraints. If row names are used, the upper bound constraint has the name of the original ranged constraint and the lower bound constraint has for name the original name with "_low" as suffix. If doing so creates two identical row names, default row names are used (see setDefaultRowNames()). */ int writeLp(const char *filename, const double epsilon, const int numberAcross, const int decimals, const bool useRowNames = true); /** Write the data in Lp format in the file pointed to by the paramater fp. Coefficients with value less than epsilon away from an integer value are written as integers. Write at most numberAcross monomials on a line. Write non integer numbers with decimals digits after the decimal point. Write objective function name and row names if useRowNames = true. Ranged constraints are written as two constraints. If row names are used, the upper bound constraint has the name of the original ranged constraint and the lower bound constraint has for name the original name with "_low" as suffix. If doing so creates two identical row names, default row names are used (see setDefaultRowNames()). */ int writeLp(FILE *fp, const double epsilon, const int numberAcross, const int decimals, const bool useRowNames = true); /// Write the data in Lp format in the file with name filename. /// Write objective function name and row names if useRowNames = true. int writeLp(const char *filename, const bool useRowNames = true); /// Write the data in Lp format in the file pointed to by the parameter fp. /// Write objective function name and row names if useRowNames = true. int writeLp(FILE *fp, const bool useRowNames = true); /// Read the data in Lp format from the file with name filename, using /// the given value for epsilon. If the original problem is /// a maximization problem, the objective function is immediadtly /// flipped to get a minimization problem. void readLp(const char *filename, const double epsilon); /// Read the data in Lp format from the file with name filename. /// If the original problem is /// a maximization problem, the objective function is immediadtly /// flipped to get a minimization problem. void readLp(const char *filename); /// Read the data in Lp format from the file stream, using /// the given value for epsilon. /// If the original problem is /// a maximization problem, the objective function is immediadtly /// flipped to get a minimization problem. void readLp(FILE *fp, const double epsilon); /// Read the data in Lp format from the file stream. /// If the original problem is /// a maximization problem, the objective function is immediadtly /// flipped to get a minimization problem. void readLp(FILE *fp); /// Does work of readLp void readLp(); /// Dump the data. Low level method for debugging. void print() const; /// Load in SOS stuff void loadSOS(int numberSets, const CoinSet *sets); /// Load in SOS stuff void loadSOS(int numberSets, const CoinSet **sets); /// Number of SOS sets inline int numberSets() const { return numberSets_; } /// Set information inline CoinSet **setInformation() const { return set_; } //@} /**@name Message handling */ //@{ /** Pass in Message handler Supply a custom message handler. It will not be destroyed when the CoinMpsIO object is destroyed. */ void passInMessageHandler(CoinMessageHandler *handler); /// Set the language for messages. void newLanguage(CoinMessages::Language language); /// Set the language for messages. inline void setLanguage(CoinMessages::Language language) { newLanguage(language); } /// Return the message handler inline CoinMessageHandler *messageHandler() const { return handler_; } /// Return the messages inline CoinMessages messages() { return messages_; } /// Return the messages pointer inline CoinMessages *messagesPointer() { return &messages_; } //@} protected: /// Problem name char *problemName_; /// Message handler CoinMessageHandler *handler_; /** Flag to say if the message handler is the default handler. If true, the handler will be destroyed when the CoinMpsIO object is destroyed; if false, it will not be destroyed. */ bool defaultHandler_; /// Messages CoinMessages messages_; /// Number of rows int numberRows_; /// Number of columns int numberColumns_; /// Number of elements CoinBigIndex numberElements_; /// Pointer to column-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByColumn_; /// Pointer to row-wise copy of problem matrix coefficients. CoinPackedMatrix *matrixByRow_; /// Pointer to dense vector of row lower bounds double *rowlower_; /// Pointer to dense vector of row upper bounds double *rowupper_; /// Pointer to dense vector of column lower bounds double *collower_; /// Pointer to dense vector of column upper bounds double *colupper_; /// Pointer to dense vector of row rhs mutable double *rhs_; /** Pointer to dense vector of slack variable upper bounds for ranged constraints (undefined for non-ranged constraints) */ mutable double *rowrange_; /// Pointer to dense vector of row senses mutable char *rowsense_; /// Pointer to dense vector of objective coefficients double *objective_[MAX_OBJECTIVES]; /// Number of objectives int num_objectives_; /// Constant offset for objective value double objectiveOffset_[MAX_OBJECTIVES]; /// Pointer to dense vector specifying if a variable is continuous /// (0) or integer (1). Added (3) sc (4) sc int. char *integerType_; /// Pointer to sets CoinSet **set_; /// Number of sets int numberSets_; /// Current file name char *fileName_; /// Value to use for infinity double infinity_; /// Value to use for epsilon double epsilon_; /// Number of monomials printed in a row int numberAcross_; /// Number of decimals printed for coefficients int decimals_; /// Objective function name char *objName_[MAX_OBJECTIVES]; /** Row names (including objective function name) and column names when stopHash() for the corresponding section was last called or for initial names (deemed invalid) read from a file.
section = 0 for row names, section = 1 for column names. */ char **previous_names_[2]; /// card_previous_names_[section] holds the number of entries in the vector /// previous_names_[section]. /// section = 0 for row names, /// section = 1 for column names. int card_previous_names_[2]; /// Row names (including objective function name) /// and column names (linked to Hash tables). /// section = 0 for row names, /// section = 1 for column names. char **names_[2]; typedef struct { int index, next; } CoinHashLink; /// Maximum number of entries in a hash table section. /// section = 0 for row names, /// section = 1 for column names. int maxHash_[2]; /// Number of entries in a hash table section. /// section = 0 for row names, /// section = 1 for column names. int numberHash_[2]; /// Hash tables with two sections. /// section = 0 for row names (including objective function name), /// section = 1 for column names. mutable CoinHashLink *hash_[2]; /// Current buffer (needed so can get rid of blanks with : mutable char inputBuffer_[1028]; /// Current buffer length (negative if not got eol) mutable int bufferLength_; /// Current buffer position mutable int bufferPosition_; /// File handler CoinFileInput *input_; /// If already inserted one End mutable bool eofFound_; /// Get next string (returns number in) int fscanfLpIO(char *buff) const; /// Get next line into inputBuffer_ (returns number in) int newCardLpIO() const; /// Build the hash table for the given names. The parameter number is /// the cardinality of parameter names. Remove duplicate names. /// /// section = 0 for row names, /// section = 1 for column names. void startHash(char const *const *const names, const COINColumnIndex number, int section); /// Delete hash storage. If section = 0, it also frees objName_. /// section = 0 for row names, /// section = 1 for column names. void stopHash(int section); /// Return the index of the given name, return -1 if the name is not found. /// Return getNumRows() for the objective function name. /// section = 0 for row names (including objective function name), /// section = 1 for column names. COINColumnIndex findHash(const char *name, int section) const; /// Insert thisName in the hash table if not present yet; does nothing /// if the name is already in. /// section = 0 for row names, /// section = 1 for column names. void insertHash(const char *thisName, int section); /// Write a coefficient. /// print_1 = 0 : do not print the value 1. void out_coeff(FILE *fp, double v, int print_1) const; /// Locate the objective function. /// Return 1 if found the keyword "Minimize" or one of its variants, /// -1 if found keyword "Maximize" or one of its variants. int find_obj() const; /// Return an integer indicating if the keyword "subject to" or one /// of its variants has been read. /// Return 1 if buff is the keyword "s.t" or one of its variants. /// Return 2 if buff is the keyword "subject" or one of its variants. /// Return 0 otherwise. int is_subject_to(const char *buff) const; /// Return 1 if the first character of buff is a number. /// Return 0 otherwise. int first_is_number(const char *buff) const; /// Return 1 if the first character of buff is '/' or '\'. /// Return 0 otherwise. int is_comment(const char *buff) const; /// Read the file fp until buff contains an end of line void skip_comment(char *buff) const; /// Return 1 if buff is the keyword "free" or one of its variants. /// Return 0 otherwise. int is_free(const char *buff) const; /// Return 1 if buff is the keyword "inf" or one of its variants. /// Return 0 otherwise. int is_inf(const char *buff) const; /// Return an integer indicating the inequality sense read. /// Return 0 if buff is '<='. /// Return 1 if buff is '='. /// Return 2 if buff is '>='. /// Return -1 otherwise. int is_sense(const char *buff) const; /// Return an integer indicating if one of the keywords "Bounds", "Integers", /// "Generals", "Binaries", "Semi-continuous", "Sos", "End", or one /// of their variants has been read. (note Semi-continuous not coded) /// Return 1 if buff is the keyword "Bounds" or one of its variants. /// Return 2 if buff is the keyword "Integers" or "Generals" or one of their /// variants. /// Return 3 if buff is the keyword "Binaries" or one of its variants. /// Return 4 if buff is the keyword "Semi-continuous" or one of its variants. /// Return 5 if buff is the keyword "Sos" or one of its variants. /// Return 6 if buff is the keyword "End" or one of its variants. /// Return 0 otherwise. int is_keyword(const char *buff) const; /// Read a monomial of the objective function. /// Return 1 if "subject to" or one of its variants has been read. int read_monom_obj(double *coeff, char **name, int *cnt, char **obj_name, int *num_objectives, int *obj_starts); /// Read a monomial of a constraint. /// Return a positive number if the sense of the inequality has been /// read (see method is_sense() for the return code). /// Return -1 otherwise. int read_monom_row(char *start_str, double *coeff, char **name, int cnt_coeff) const; /// Reallocate vectors related to number of coefficients. void realloc_coeff(double **coeff, char ***colNames, int *maxcoeff) const; /// Reallocate vectors related to rows. void realloc_row(char ***rowNames, CoinBigIndex **start, double **rhs, double **rowlow, double **rowup, int *maxrow) const; /// Reallocate vectors related to columns. void realloc_col(double **collow, double **colup, char **is_int, int *maxcol) const; /// Read a constraint. void read_row(char *buff, double **pcoeff, char ***pcolNames, int *cnt_coeff, int *maxcoeff, double *rhs, double *rowlow, double *rowup, int *cnt_row, double inf) const; /** Check that current objective name and all row names are distinct including row names obtained by adding "_low" for ranged constraints. If there is a conflict in the names, they are replaced by default row names (see setDefaultRowNames()). This method must not be called before setLpDataWithoutRowAndColNames() has been called, since access to the indices of all the ranged constraints is required. This method must not be called before setLpDataRowAndColNames() has been called, since access to all the row names is required. */ void checkRowNames(); /** Check that current column names are distinct. If not, they are replaced by default column names (see setDefaultColNames()). This method must not be called before setLpDataRowAndColNames() has been called, since access to all the column names is required. */ void checkColNames(); }; void CoinLpIOUnitTest(const std::string &lpDir); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinShallowPackedVector.hpp0000644000175200017520000001150413414454441021006 0ustar coincoin/* $Id: CoinShallowPackedVector.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinShallowPackedVector_H #define CoinShallowPackedVector_H #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "CoinError.hpp" #include "CoinPackedVectorBase.hpp" /** Shallow Sparse Vector This class is for sparse vectors where the indices and elements are stored elsewhere. This class only maintains pointers to the indices and elements. Since this class does not own the index and element data it provides read only access to to the data. An CoinSparsePackedVector must be used when the sparse vector's data will be altered. This class stores pointers to the vectors. It does not actually contain the vectors. Here is a sample usage: @verbatim const int ne = 4; int inx[ne] = { 1, 4, 0, 2 }; double el[ne] = { 10., 40., 1., 50. }; // Create vector and set its value CoinShallowPackedVector r(ne,inx,el); // access each index and element assert( r.indices ()[0]== 1 ); assert( r.elements()[0]==10. ); assert( r.indices ()[1]== 4 ); assert( r.elements()[1]==40. ); assert( r.indices ()[2]== 0 ); assert( r.elements()[2]== 1. ); assert( r.indices ()[3]== 2 ); assert( r.elements()[3]==50. ); // access as a full storage vector assert( r[ 0]==1. ); assert( r[ 1]==10.); assert( r[ 2]==50.); assert( r[ 3]==0. ); assert( r[ 4]==40.); // Tests for equality and equivalence CoinShallowPackedVector r1; r1=r; assert( r==r1 ); r.sort(CoinIncrElementOrdered()); assert( r!=r1 ); // Add packed vectors. // Similarly for subtraction, multiplication, // and division. CoinPackedVector add = r + r1; assert( add[0] == 1.+ 1. ); assert( add[1] == 10.+10. ); assert( add[2] == 50.+50. ); assert( add[3] == 0.+ 0. ); assert( add[4] == 40.+40. ); assert( r.sum() == 10.+40.+1.+50. ); @endverbatim */ class CoinShallowPackedVector : public CoinPackedVectorBase { friend void CoinShallowPackedVectorUnitTest(); public: /**@name Get methods */ //@{ /// Get length of indices and elements vectors virtual int getNumElements() const { return nElements_; } /// Get indices of elements virtual const int *getIndices() const { return indices_; } /// Get element values virtual const double *getElements() const { return elements_; } //@} /**@name Set methods */ //@{ /// Reset the vector (as if were just created an empty vector) void clear(); /** Assignment operator. */ CoinShallowPackedVector &operator=(const CoinShallowPackedVector &x); /** Assignment operator from a CoinPackedVectorBase. */ CoinShallowPackedVector &operator=(const CoinPackedVectorBase &x); /** just like the explicit constructor */ void setVector(int size, const int *indices, const double *elements, bool testForDuplicateIndex = true); //@} /**@name Methods to create, set and destroy */ //@{ /** Default constructor. */ CoinShallowPackedVector(bool testForDuplicateIndex = true); /** Explicit Constructor. Set vector size, indices, and elements. Size is the length of both the indices and elements vectors. The indices and elements vectors are not copied into this class instance. The ShallowPackedVector only maintains the pointers to the indices and elements vectors.
The last argument specifies whether the creator of the object knows in advance that there are no duplicate indices. */ CoinShallowPackedVector(int size, const int *indices, const double *elements, bool testForDuplicateIndex = true); /** Copy constructor from the base class. */ CoinShallowPackedVector(const CoinPackedVectorBase &); /** Copy constructor. */ CoinShallowPackedVector(const CoinShallowPackedVector &); /** Destructor. */ virtual ~CoinShallowPackedVector() {} /// Print vector information. void print(); //@} private: /**@name Private member data */ //@{ /// Vector indices const int *indices_; ///Vector elements const double *elements_; /// Size of indices and elements vectors int nElements_; //@} }; //############################################################################# /** A function that tests the methods in the CoinShallowPackedVector class. The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging. */ void CoinShallowPackedVectorUnitTest(); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinOslFactorization.cpp0000644000175200017520000013074413414454441020377 0ustar coincoin/* $Id: CoinOslFactorization.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 1987, 2009, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if COIN_BIG_INDEX == 0 #include "CoinUtilsConfig.h" #include #include "CoinPragma.hpp" #include "CoinOslFactorization.hpp" #include "CoinOslC.h" #include "CoinIndexedVector.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedMatrix.hpp" #include "CoinTypes.hpp" #include "CoinFinite.hpp" #include static void c_ekksmem(EKKfactinfo *fact, int numberRows, int maximumPivots); static void c_ekksmem_copy(EKKfactinfo *fact, const EKKfactinfo *rhsFact); static void c_ekksmem_delete(EKKfactinfo *fact); //:class CoinOslFactorization. Deals with Factorization and Updates // CoinOslFactorization. Constructor CoinOslFactorization::CoinOslFactorization() : CoinOtherFactorization() { gutsOfInitialize(); } /// Copy constructor CoinOslFactorization::CoinOslFactorization(const CoinOslFactorization &other) : CoinOtherFactorization(other) { gutsOfInitialize(); gutsOfCopy(other); } // Clone CoinOtherFactorization * CoinOslFactorization::clone() const { return new CoinOslFactorization(*this); } /// The real work of constructors etc void CoinOslFactorization::gutsOfDestructor(bool clearFact) { delete[] elements_; delete[] pivotRow_; delete[] workArea_; elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; numberRows_ = 0; numberColumns_ = 0; numberGoodU_ = 0; status_ = -1; maximumRows_ = 0; maximumSpace_ = 0; solveMode_ = 0; if (clearFact) c_ekksmem_delete(&factInfo_); } void CoinOslFactorization::gutsOfInitialize(bool zapFact) { pivotTolerance_ = 1.0e-1; zeroTolerance_ = 1.0e-13; #ifndef COIN_FAST_CODE slackValue_ = -1.0; #endif maximumPivots_ = 200; relaxCheck_ = 1.0; numberRows_ = 0; numberColumns_ = 0; numberGoodU_ = 0; status_ = -1; numberPivots_ = 0; maximumRows_ = 0; maximumSpace_ = 0; elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; solveMode_ = 0; if (zapFact) { memset(&factInfo_, 0, sizeof(factInfo_)); factInfo_.maxinv = 100; factInfo_.drtpiv = 1.0e-10; factInfo_.zeroTolerance = 1.0e-12; factInfo_.zpivlu = 0.1; factInfo_.areaFactor = 1.0; factInfo_.nbfinv = 100; } } // ~CoinOslFactorization. Destructor CoinOslFactorization::~CoinOslFactorization() { gutsOfDestructor(); } // = CoinOslFactorization &CoinOslFactorization::operator=(const CoinOslFactorization &other) { if (this != &other) { bool noGood = factInfo_.nrowmx != other.factInfo_.nrowmx && factInfo_.eta_size != other.factInfo_.eta_size; gutsOfDestructor(noGood); gutsOfInitialize(noGood); gutsOfCopy(other); } return *this; } #define WORK_MULT 2 void CoinOslFactorization::gutsOfCopy(const CoinOslFactorization &other) { pivotTolerance_ = other.pivotTolerance_; zeroTolerance_ = other.zeroTolerance_; #ifndef COIN_FAST_CODE slackValue_ = other.slackValue_; #endif relaxCheck_ = other.relaxCheck_; numberRows_ = other.numberRows_; numberColumns_ = other.numberColumns_; maximumRows_ = other.maximumRows_; maximumSpace_ = other.maximumSpace_; solveMode_ = other.solveMode_; numberGoodU_ = other.numberGoodU_; maximumPivots_ = other.maximumPivots_; numberPivots_ = other.numberPivots_; factorElements_ = other.factorElements_; status_ = other.status_; elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; c_ekksmem_copy(&factInfo_, &other.factInfo_); } // getAreas. Gets space for a factorization //called by constructors void CoinOslFactorization::getAreas(int numberOfRows, int numberOfColumns, CoinBigIndex maximumL, CoinBigIndex maximumU) { numberRows_ = numberOfRows; numberColumns_ = numberOfColumns; CoinBigIndex size = static_cast< CoinBigIndex >(factInfo_.areaFactor * (maximumL + maximumU)); factInfo_.zeroTolerance = zeroTolerance_; // If wildly out redo if (maximumRows_ > numberRows_ + 1000) { maximumRows_ = 0; maximumSpace_ = 0; factInfo_.last_eta_size = 0; } if (size > maximumSpace_) { //delete [] elements_; //elements_ = new CoinFactorizationDouble [size]; maximumSpace_ = size; } factInfo_.lastEtaCount = factInfo_.nnentu + factInfo_.nnentl; int oldnnetas = factInfo_.last_eta_size; // If we are going to increase then be on safe side if (size > oldnnetas) size = static_cast< int >(1.1 * size); factInfo_.eta_size = CoinMax(size, oldnnetas); //printf("clp size %d, old %d now %d - iteration %d - last count %d - rows %d,%d,%d\n", // size,oldnnetas,factInfo_.eta_size,factInfo_.iterno,factInfo_.lastEtaCount, //numberRows_,factInfo_.nrowmx,factInfo_.nrow); //if (!factInfo_.iterno) { //printf("here\n"); //} /** Get solve mode e.g. 0 C++ code, 1 Lapack, 2 choose If 4 set then values pass if 8 set then has iterated */ solveMode_ &= 4 + 8; // clear bottom bits factInfo_.ifvsol = ((solveMode_ & 4) != 0) ? 1 : 0; if ((solveMode_ & 8) != 0) { factInfo_.ifvsol = 0; factInfo_.invok = 1; } else { factInfo_.iter0 = factInfo_.iterno; factInfo_.invok = -1; factInfo_.if_sparse_update = 0; } #if 0 if (!factInfo_.if_sparse_update && factInfo_.iterno>factInfo_.iter0 && numberRows_>=C_EKK_GO_SPARSE) { printf("count %d rows %d etasize %d\n", factInfo_.lastEtaCount,factInfo_.nrow,factInfo_.eta_size); } #endif if (!factInfo_.if_sparse_update && factInfo_.iterno > factInfo_.iter0 && numberRows_ >= C_EKK_GO_SPARSE && (factInfo_.lastEtaCount >> 2) < factInfo_.nrow && !factInfo_.switch_off_sparse_update) { #if PRINT_DEBUG printf("**** Switching on sparse update - etacount\n"); #endif /* I suspect this can go into c_ekksslvf; * if c_ekkshff decides to switch sparse_update off, * then it problably always switches it off (?) */ factInfo_.if_sparse_update = 2; } c_ekksmem(&factInfo_, numberRows_, maximumPivots_); if (numberRows_ > maximumRows_) { maximumRows_ = numberRows_; //delete [] pivotRow_; //delete [] workArea_; //pivotRow_ = new int [2*maximumRows_+maximumPivots_]; //workArea_ = new CoinFactorizationDouble [maximumRows_*WORK_MULT]; } } // preProcess. void CoinOslFactorization::preProcess() { factInfo_.zpivlu = pivotTolerance_; // Go to Fortran int *hcoli = factInfo_.xecadr + 1; int *indexRowU = factInfo_.xeradr + 1; CoinBigIndex *startColumnU = factInfo_.xcsadr + 1; for (int i = 0; i < numberRows_; i++) { int start = startColumnU[i]; startColumnU[i]++; // to Fortran for (int j = start; j < startColumnU[i + 1]; j++) { indexRowU[j]++; // to Fortran hcoli[j] = i + 1; // to Fortran } } startColumnU[numberRows_]++; // to Fortran /* can do in column order - no zeros or duplicates */ #ifndef NDEBUG int ninbas = #endif c_ekkslcf(&factInfo_); assert(ninbas > 0); } //Does factorization int CoinOslFactorization::factor() { /* Uwe's factorization (sort of) */ int irtcod = c_ekklfct(&factInfo_); /* Check return code */ /* 0 - Fine , 1 - Backtrack, 2 - Singularities on initial, 3-Fatal */ /* now 5-Need more memory */ status_ = 0; if (factInfo_.eta_size > factInfo_.last_eta_size) { factInfo_.areaFactor *= factInfo_.eta_size; factInfo_.areaFactor /= factInfo_.last_eta_size; #ifdef CLP_INVESTIGATE printf("areaFactor increased to %g\n", factInfo_.areaFactor); #endif } if (irtcod == 5) { status_ = -99; assert(factInfo_.eta_size > factInfo_.last_eta_size); #ifdef CLP_INVESTIGATE printf("need more memory\n"); #endif } else if (irtcod) { status_ = -1; //printf("singular %d\n",irtcod); } return status_; } // Makes a non-singular basis by replacing variables void CoinOslFactorization::makeNonSingular(int *sequence, int numberColumns) { const EKKHlink *rlink = factInfo_.kp1adr; const EKKHlink *clink = factInfo_.kp2adr; int nextRow = 0; //int * mark = reinterpret_cast(factInfo_.kw1adr); //int nr=0; //int nc=0; #if 0 for (int i=0;i=0||rlink[i].pre==-(numberRows_+1)) { nr++; printf("%d rl %d cl %d\n",i,rlink[i].pre,clink[i].pre); } if (clink[i].pre>=0||clink[i].pre==-(numberRows_+1)) { nc++; printf("%d rl %d cl %d\n",i,rlink[i].pre,clink[i].pre); } } #endif //printf("nr %d nc %d\n",nr,nc); #ifndef NDEBUG bool goodPass = true; #endif int numberDone = 0; for (int i = 0; i < numberRows_; i++) { int cRow = (-clink[i].pre) - 1; if (cRow == numberRows_ || cRow < 0) { // throw out for (; nextRow < numberRows_; nextRow++) { int rRow = (-rlink[nextRow].pre) - 1; if (rRow == numberRows_ || rRow < 0) break; } if (nextRow < numberRows_) { sequence[i] = nextRow + numberColumns; nextRow++; numberDone++; } else { #ifndef NDEBUG goodPass = false; #endif assert(numberDone); //printf("BAD singular at row %d\n",i); break; } } } #ifndef NDEBUG if (goodPass) { for (; nextRow < numberRows_; nextRow++) { int rRow = (-rlink[nextRow].pre) - 1; assert(!(rRow == numberRows_ || rRow < 0)); } } #endif } // Does post processing on valid factorization - putting variables on correct rows void CoinOslFactorization::postProcess(const int *sequence, int *pivotVariable) { factInfo_.iterin = factInfo_.iterno; factInfo_.npivots = 0; numberPivots_ = 0; const int *permute3 = factInfo_.mpermu + 1; assert(permute3 == reinterpret_cast< const int * >(factInfo_.kadrpm + numberRows_ + 1)); // this is ridiculous - must be better way int *permute2 = reinterpret_cast< int * >(factInfo_.kw1adr); const int *permute = reinterpret_cast< const int * >(factInfo_.kp2adr); for (int i = 0; i < numberRows_; i++) { permute2[permute[i] - 1] = i; } for (int i = 0; i < numberRows_; i++) { // the row is i // the column is whatever matches k3[i] in k1 int look = permute3[i] - 1; int j = permute2[look]; int k = sequence[j]; pivotVariable[i] = k; } #ifdef CLP_REUSE_ETAS int *start = factInfo_.xcsadr + 1; int *putSeq = factInfo_.xrsadr + 2 * factInfo_.nrowmx + 2; int *position = putSeq + factInfo_.maxinv; int *putStart = position + factInfo_.maxinv; memcpy(putStart, start, numberRows_ * sizeof(int)); int iLast = start[numberRows_ - 1]; putStart[numberRows_] = iLast + factInfo_.xeradr[iLast] + 1; factInfo_.save_nnentu = factInfo_.nnentu; #endif #ifndef NDEBUG { int lstart = numberRows_ + factInfo_.maxinv + 5; int ndo = factInfo_.xnetal - lstart; double *dluval = factInfo_.xeeadr; int *mcstrt = factInfo_.xcsadr + lstart; if (ndo) assert(dluval[mcstrt[ndo] + 1] < 1.0e50); } #endif } /* Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModifying is true will do all accuracy checks before modifying factorization. Whether to set this depends on speed considerations. You could just do this on first iteration after factorization and thereafter re-factorize partial update already in U */ int CoinOslFactorization::replaceColumn(CoinIndexedVector *regionSparse, int pivotRow, double pivotCheck, bool /*checkBeforeModifying*/, double acceptablePivot) { if (numberPivots_ + 1 == maximumPivots_) return 3; int *regionIndex = regionSparse->getIndices(); double *region = regionSparse->denseVector(); int orig_nincol = 0; double saveTolerance = factInfo_.drtpiv; factInfo_.drtpiv = acceptablePivot; int returnCode = c_ekketsj(&factInfo_, region - 1, regionIndex, pivotCheck, orig_nincol, numberPivots_, &factInfo_.nuspike, pivotRow + 1, reinterpret_cast< int * >(factInfo_.kw1adr)); factInfo_.drtpiv = saveTolerance; if (returnCode != 2) numberPivots_++; #ifndef NDEBUG { int lstart = numberRows_ + factInfo_.maxinv + 5; int ndo = factInfo_.xnetal - lstart; double *dluval = factInfo_.xeeadr; int *mcstrt = factInfo_.xcsadr + lstart; if (ndo) assert(dluval[mcstrt[ndo] + 1] < 1.0e50); } #endif return returnCode; } /* This version has same effect as above with FTUpdate==false so number returned is always >=0 */ int CoinOslFactorization::updateColumn(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool /*noPermute*/) const { #ifndef NDEBUG { int lstart = numberRows_ + factInfo_.maxinv + 5; int ndo = factInfo_.xnetal - lstart; double *dluval = factInfo_.xeeadr; int *mcstrt = factInfo_.xcsadr + lstart; if (ndo) assert(dluval[mcstrt[ndo] + 1] < 1.0e50); } #endif assert(numberRows_ == numberColumns_); double *region2 = regionSparse2->denseVector(); int *regionIndex2 = regionSparse2->getIndices(); int numberNonZero = regionSparse2->getNumElements(); double *region = regionSparse->denseVector(); //const int * permuteIn = factInfo_.mpermu+1; // Stuff is put one up so won't get illegal read assert(!region[numberRows_]); assert(!regionSparse2->packedMode()); #if 0 int first=numberRows_; for (int j=0;jsetNumElements(numberNonZero); return 0; } /* Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no room regionSparse starts as zero and is zero at end. Note - if regionSparse2 packed on input - will be packed on output */ int CoinOslFactorization::updateColumnFT(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool /*noPermute*/) { assert(numberRows_ == numberColumns_); double *region2 = regionSparse2->denseVector(); int *regionIndex2 = regionSparse2->getIndices(); int numberNonZero = regionSparse2->getNumElements(); assert(regionSparse2->packedMode()); // packed mode //int numberNonInOriginal=numberNonZero; //double *dpermu = factInfo_.kadrpm; // Use region instead of dpermu double *save = factInfo_.kadrpm; factInfo_.kadrpm = regionSparse->denseVector() - 1; int nuspike = c_ekkftrn_ft(&factInfo_, region2, regionIndex2, &numberNonZero); factInfo_.kadrpm = save; regionSparse2->setNumElements(numberNonZero); //regionSparse2->print(); factInfo_.nuspike = nuspike; return nuspike; } int CoinOslFactorization::updateTwoColumnsFT(CoinIndexedVector *regionSparse1, CoinIndexedVector *regionSparse2, CoinIndexedVector *regionSparse3, bool /*noPermute*/) { #if 1 // probably best to merge on a LU part by part // but can try full merge double *region2 = regionSparse2->denseVector(); int *regionIndex2 = regionSparse2->getIndices(); int numberNonZero2 = regionSparse2->getNumElements(); assert(regionSparse2->packedMode()); assert(numberRows_ == numberColumns_); double *region3 = regionSparse3->denseVector(); int *regionIndex3 = regionSparse3->getIndices(); int numberNonZero3 = regionSparse3->getNumElements(); double *region = regionSparse1->denseVector(); // Stuff is put one up so won't get illegal read assert(!region[numberRows_]); assert(!regionSparse3->packedMode()); // packed mode //double *dpermu = factInfo_.kadrpm; #if 0 factInfo_.nuspike=c_ekkftrn_ft(&factInfo_, region2,regionIndex2, &numberNonZero2); numberNonZero3=c_ekkftrn(&factInfo_, region3-1,region,regionIndex3,numberNonZero3); #else c_ekkftrn2(&factInfo_, region3 - 1, region, regionIndex3, &numberNonZero3, region2, regionIndex2, &numberNonZero2); #endif regionSparse2->setNumElements(numberNonZero2); regionSparse3->setNumElements(numberNonZero3); return factInfo_.nuspike; #else // probably best to merge on a LU part by part // but can try full merge int returnCode = updateColumnFT(regionSparse1, regionSparse2); updateColumn(regionSparse1, regionSparse3, noPermute); return returnCode; #endif } /* Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output */ int CoinOslFactorization::updateColumnTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) const { assert(numberRows_ == numberColumns_); double *region2 = regionSparse2->denseVector(); int *regionIndex2 = regionSparse2->getIndices(); int numberNonZero = regionSparse2->getNumElements(); //double *region = regionSparse->denseVector ( ); /*int *regionIndex = regionSparse->getIndices ( );*/ const int *permuteIn = factInfo_.mpermu + 1; factInfo_.packedMode = regionSparse2->packedMode() ? 1 : 0; // Use region instead of dpermu double *save = factInfo_.kadrpm; factInfo_.kadrpm = regionSparse->denseVector() - 1; // use internal one for now (address is one off) double *region = factInfo_.kadrpm; if (numberNonZero < 2) { if (numberNonZero) { int ipivrw = regionIndex2[0]; if (factInfo_.packedMode) { double value = region2[0]; region2[0] = 0.0; region2[ipivrw] = value; } numberNonZero = c_ekkbtrn_ipivrw(&factInfo_, region2 - 1, regionIndex2 - 1, ipivrw + 1, reinterpret_cast< int * >(factInfo_.kp1adr)); } } else { #ifndef NDEBUG { int *mcstrt = factInfo_.xcsadr; int *hpivco_new = factInfo_.kcpadr + 1; int nrow = factInfo_.nrow; int i; int ipiv = hpivco_new[0]; int last = mcstrt[ipiv]; for (i = 0; i < nrow - 1; i++) { ipiv = hpivco_new[ipiv]; assert(mcstrt[ipiv] > last); last = mcstrt[ipiv]; } } #endif int iSmallest = COIN_INT_MAX; int iPiv = 0; const int *mcstrt = factInfo_.xcsadr; // permute and save where nonzeros are if (!factInfo_.packedMode) { if ((numberRows_ < 200 || (numberNonZero << 4) > numberRows_)) { for (int j = 0; j < numberNonZero; j++) { int jRow = regionIndex2[j]; int iRow = permuteIn[jRow]; regionIndex2[j] = iRow; region[iRow] = region2[jRow]; region2[jRow] = 0.0; } } else { for (int j = 0; j < numberNonZero; j++) { int jRow = regionIndex2[j]; int iRow = permuteIn[jRow]; regionIndex2[j] = iRow; region[iRow] = region2[jRow]; if (mcstrt[iRow] < iSmallest) { iPiv = iRow; iSmallest = mcstrt[iRow]; } region2[jRow] = 0.0; } } } else { for (int j = 0; j < numberNonZero; j++) { int jRow = regionIndex2[j]; int iRow = permuteIn[jRow]; regionIndex2[j] = iRow; region[iRow] = region2[j]; region2[j] = 0.0; } } assert(iPiv >= 0); numberNonZero = c_ekkbtrn(&factInfo_, region2 - 1, regionIndex2 - 1, iPiv); } factInfo_.kadrpm = save; factInfo_.packedMode = 0; regionSparse2->setNumElements(numberNonZero); return 0; } // Number of entries in each row int *CoinOslFactorization::numberInRow() const { return reinterpret_cast< int * >(factInfo_.xrnadr + 1); } // Number of entries in each column int *CoinOslFactorization::numberInColumn() const { return reinterpret_cast< int * >(factInfo_.xcnadr + 1); } // Returns array to put basis starts in CoinBigIndex * CoinOslFactorization::starts() const { return reinterpret_cast< CoinBigIndex * >(factInfo_.xcsadr + 1); } // Returns array to put basis elements in CoinFactorizationDouble * CoinOslFactorization::elements() const { return factInfo_.xeeadr + 1; } // Returns pivot row int *CoinOslFactorization::pivotRow() const { return factInfo_.krpadr + 1; } // Returns work area CoinFactorizationDouble * CoinOslFactorization::workArea() const { return factInfo_.kw1adr; } // Returns int work area int *CoinOslFactorization::intWorkArea() const { return reinterpret_cast< int * >(factInfo_.kw1adr); } // Returns permute back int *CoinOslFactorization::permuteBack() const { return factInfo_.kcpadr + 1; } // Returns array to put basis indices in int *CoinOslFactorization::indices() const { return factInfo_.xeradr + 1; } // Returns true if wants tableauColumn in replaceColumn bool CoinOslFactorization::wantsTableauColumn() const { return false; } /* Useful information for factorization 0 - iteration number whereFrom is 0 for factorize and 1 for replaceColumn */ #ifdef CLP_REUSE_ETAS void CoinOslFactorization::setUsefulInformation(const int *info, int whereFrom) { factInfo_.iterno = info[0]; if (whereFrom) { factInfo_.reintro = -1; if (factInfo_.first_dense >= factInfo_.last_dense) { int *putSeq = factInfo_.xrsadr + 2 * factInfo_.nrowmx + 2; int *position = putSeq + factInfo_.maxinv; //int * putStart = position+factInfo_.maxinv; int iSequence = info[1]; if (whereFrom == 1) { putSeq[factInfo_.npivots] = iSequence; } else { int i; for (i = factInfo_.npivots - 1; i >= 0; i--) { if (putSeq[i] == iSequence) break; } if (i >= 0) { factInfo_.reintro = position[i]; } else { factInfo_.reintro = -1; } factInfo_.nnentu = factInfo_.save_nnentu; } } } } #else void CoinOslFactorization::setUsefulInformation(const int *info, int /*whereFrom*/) { factInfo_.iterno = info[0]; } #endif // Get rid of all memory void CoinOslFactorization::clearArrays() { factInfo_.nR_etas = 0; factInfo_.nnentu = 0; factInfo_.nnentl = 0; maximumRows_ = 0; maximumSpace_ = 0; factInfo_.last_eta_size = 0; gutsOfDestructor(false); } void CoinOslFactorization::maximumPivots(int value) { maximumPivots_ = value; } #define CLP_FILL 15 /*#undef NDEBUG*/ //#define CLP_DEBUG_MALLOC 1000000 #if CLP_DEBUG_MALLOC static int malloc_number = 0; static int malloc_check = -1; static int malloc_counts_on = 0; struct malloc_struct { void *previous; void *next; int size; int when; int type; }; static double malloc_times = 0.0; static double malloc_total = 0.0; static double malloc_current = 0.0; static double malloc_max = 0.0; static int malloc_amount[] = { 0, 32, 128, 256, 1024, 4096, 16384, 65536, 262144, 2000000000 }; static int malloc_n = 10; double malloc_counts[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; typedef struct malloc_struct malloc_struct; static malloc_struct startM = { 0, 0, 0, 0 }; static malloc_struct endM = { 0, 0, 0, 0 }; static int extra = 4; void clp_memory(int type) { if (type == 0) { /* switch on */ malloc_counts_on = 1; startM.next = &endM; endM.previous = &startM; } else { /* summary */ double average = malloc_total / malloc_times; int i; malloc_struct *previous = (malloc_struct *)endM.previous; printf("count %g bytes %g - average %g\n", malloc_times, malloc_total, average); printf("current bytes %g - maximum %g\n", malloc_current, malloc_max); for (i = 0; i < malloc_n; i++) printf("%g ", malloc_counts[i]); printf("\n"); malloc_counts_on = 0; if (previous->previous != &startM) { int n = 0; printf("Allocated blocks\n"); while (previous->previous != &startM) { printf("(%d at %d) ", previous->size, previous->when); n++; if ((n % 5) == 0) printf("\n"); previous = (malloc_struct *)previous->previous; } printf("\n - total %d\n", n); } } malloc_number = 0; malloc_times = 0.0; malloc_total = 0.0; malloc_current = 0.0; malloc_max = 0.0; memset(malloc_counts, 0, sizeof(malloc_counts)); } static void clp_adjust(void *temp, int size, int type) { malloc_struct *itemp = (malloc_struct *)temp; malloc_struct *first = (malloc_struct *)startM.next; int i; startM.next = temp; first->previous = temp; itemp->previous = &startM; itemp->next = first; malloc_number++; if (malloc_number == malloc_check) { printf("Allocation of %d bytes at %d (type %d) not freed\n", size, malloc_number, type); } itemp->when = malloc_number; itemp->size = size; itemp->type = type; malloc_times++; malloc_total += size; malloc_current += size; malloc_max = CoinMax(malloc_max, malloc_current); for (i = 0; i < malloc_n; i++) { if ((int)size <= malloc_amount[i]) { malloc_counts[i]++; break; } } } #endif /* covers */ double *clp_double(int number_entries) { #if CLP_DEBUG_MALLOC == 0 return reinterpret_cast< double * >(malloc(number_entries * sizeof(double))); #else double *temp = reinterpret_cast< double * >(malloc((number_entries + extra) * sizeof(double))); clp_adjust(temp, number_entries * sizeof(double), 1); #if CLP_DEBUG_MALLOC > 1 if (number_entries * sizeof(double) >= CLP_DEBUG_MALLOC) printf("WWW %x malloced by double %d - size %d\n", temp + extra, malloc_number, number_entries); #endif return temp + extra; #endif } int *clp_int(int number_entries) { #if CLP_DEBUG_MALLOC == 0 return reinterpret_cast< int * >(malloc(number_entries * sizeof(int))); #else double *temp = reinterpret_cast< double * >(malloc(((number_entries + 1) / 2 + extra) * sizeof(double))); clp_adjust(temp, number_entries * sizeof(int), 2); #if CLP_DEBUG_MALLOC > 1 if (number_entries * sizeof(int) >= CLP_DEBUG_MALLOC) printf("WWW %x malloced by int %d - size %d\n", temp + extra, malloc_number, number_entries); #endif return reinterpret_cast< int * >((temp + extra)); #endif } void *clp_malloc(int number_entries) { #if CLP_DEBUG_MALLOC == 0 return malloc(number_entries); #else double *temp = reinterpret_cast< double * >(malloc(number_entries + extra * sizeof(double))); clp_adjust(temp, number_entries, 0); #if CLP_DEBUG_MALLOC > 1 if (number_entries >= CLP_DEBUG_MALLOC) printf("WWW %x malloced by void %d - size %d\n", temp + extra, malloc_number, number_entries); #endif return (void *)(temp + extra); #endif } void clp_free(void *oldArray) { #if CLP_DEBUG_MALLOC == 0 free(oldArray); #else if (oldArray) { double *temp = (reinterpret_cast< double * >(oldArray) - extra); malloc_struct *itemp = (malloc_struct *)temp; malloc_struct *next = (malloc_struct *)itemp->next; malloc_struct *previous = (malloc_struct *)itemp->previous; previous->next = next; next->previous = previous; malloc_current -= itemp->size; #if CLP_DEBUG_MALLOC > 1 if (itemp->size >= CLP_DEBUG_MALLOC) printf("WWW %x freed by free %d - old length %d - type %d\n", oldArray, itemp->when, itemp->size, itemp->type); #endif free(temp); } #endif } /*#define FIX_ADD 4*nrowmx+5 #define FIX_ADD2 4*nrowmx+5*/ #define FIX_ADD 1 * nrowmx + 5 #define FIX_ADD2 1 * nrowmx + 5 #define ALIGNMENT 32 static void *clp_align(void *memory) { if (sizeof(int) == sizeof(void *) && ALIGNMENT) { CoinInt64 k = reinterpret_cast< CoinInt64 >(memory); if ((k & (ALIGNMENT - 1)) != 0) { k &= ~(ALIGNMENT - 1); k += ALIGNMENT; memory = reinterpret_cast< void * >(k); } return memory; } else { return memory; } } void clp_setup_pointers(EKKfactinfo *fact) { /* do extra stuff */ int nrow = fact->nrow; int nrowmx = fact->nrowmx; int maxinv = fact->maxinv; fact->lstart = nrow + maxinv + 5; /* this is the number of L transforms */ fact->xnetalval = fact->xnetal - fact->lstart; fact->mpermu = (reinterpret_cast< int * >(fact->kadrpm + nrow)) + 1; fact->bitArray = fact->krpadr + (nrowmx + 2); fact->back = fact->kcpadr + 2 * nrow + maxinv + 4; fact->hpivcoR = fact->kcpadr + nrow + 3; fact->nonzero = (reinterpret_cast< char * >(&fact->mpermu[nrow + 1])) - 1; } #ifndef NDEBUG int ets_count = 0; int ets_check = -1; //static int adjust_count=0; //static int adjust_check=-1; #endif static void clp_adjust_pointers(EKKfactinfo *fact, int adjust) { #if 0 //ndef NDEBUG adjust_count++; if (adjust_check>=0&&adjust_count>=adjust_check) { printf("trouble\n"); } #endif if (fact->trueStart) { fact->kadrpm += adjust; fact->krpadr += adjust; fact->kcpadr += adjust; fact->xrsadr += adjust; fact->xcsadr += adjust; fact->xrnadr += adjust; fact->xcnadr += adjust; } if (fact->xeradr) { fact->xeradr += adjust; fact->xecadr += adjust; fact->xeeadr += adjust; } } /* deals with memory for complicated array 0 just do addresses 1 just get memory */ static double * clp_alloc_memory(EKKfactinfo *fact, int type, int *length) { int nDouble = 0; int nInt = 0; int nrowmxp; int ntot1; int ntot2; int ntot3; int nrowmx; int *tempI; double *tempD; nrowmx = fact->nrowmx; nrowmxp = nrowmx + 2; ntot1 = nrowmxp; ntot2 = 3 * nrowmx + 5; /* space for three lists */ ntot3 = 2 * nrowmx; if ((ntot1 << 1) < ntot2) { ntot1 = ntot2 >> 1; } ntot3 = CoinMax(ntot3, ntot1); /* Row work regions */ /* must be contiguous so allocate as one chunk */ /* may only need 2.5 */ /* now doing all at once - far too much - reduce later */ tempD = fact->kw1adr; tempD += nrowmxp; tempD = reinterpret_cast< double * >(clp_align(tempD)); fact->kw2adr = tempD; tempD += nrowmxp; tempD = reinterpret_cast< double * >(clp_align(tempD)); fact->kw3adr = tempD - 1; tempD += nrowmxp; tempD = reinterpret_cast< double * >(clp_align(tempD)); fact->kp1adr = reinterpret_cast< EKKHlink * >(tempD); tempD += nrowmxp; tempD = reinterpret_cast< double * >(clp_align(tempD)); fact->kp2adr = reinterpret_cast< EKKHlink * >(tempD); //tempD+=ntot3; tempD += nrowmxp; tempD = reinterpret_cast< double * >(clp_align(tempD)); /*printf("zz %x %x\n",tempD,fact->kadrpm);*/ fact->kadrpm = tempD; /* seems a lot */ tempD += ((6 * nrowmx + 8) * (sizeof(int)) / sizeof(double)); /* integer arrays */ tempI = reinterpret_cast< int * >(tempD); tempI = reinterpret_cast< int * >(clp_align(tempI)); fact->xrsadr = tempI; #ifdef CLP_REUSE_ETAS tempI += (3 * (nrowmx + fact->maxinv + 1)); #else tempI += ((nrowmx << 1) + fact->maxinv + 1); #endif tempI = reinterpret_cast< int * >(clp_align(tempI)); fact->xcsadr = tempI; #if 1 //def CLP_REUSE_ETAS tempI += (2 * nrowmx + 8 + 2 * fact->maxinv); #else tempI += (2 * nrowmx + 8 + fact->maxinv); #endif tempI += FIX_ADD + FIX_ADD2; tempI = reinterpret_cast< int * >(clp_align(tempI)); fact->xrnadr = tempI; tempI += nrowmx; tempI = reinterpret_cast< int * >(clp_align(tempI)); fact->xcnadr = tempI; tempI += nrowmx; tempI = reinterpret_cast< int * >(clp_align(tempI)); fact->krpadr = tempI; tempI += (nrowmx + 1) + ((nrowmx + 33) >> 5); /*printf("zzz %x %x\n",tempI,fact->kcpadr);*/ tempI = reinterpret_cast< int * >(clp_align(tempI)); fact->kcpadr = tempI; tempI += 3 * nrowmx + 8 + fact->maxinv; fact->R_etas_start = fact->xcsadr + nrowmx + fact->maxinv + 4; fact->R_etas_start += FIX_ADD; nInt = static_cast< int >(tempI - (reinterpret_cast< int * >(fact->trueStart))); nDouble = static_cast< int >(sizeof(int) * (nInt + 1) / sizeof(double)); *length = nDouble; /*printf("nDouble %d - type %d\n",nDouble,type);*/ nDouble += static_cast< int >((2 * ALIGNMENT) / sizeof(double)); if (type) { /*printf("%d allocated\n",nDouble);*/ tempD = reinterpret_cast< double * >(clp_double(nDouble)); #ifndef NDEBUG memset(tempD, CLP_FILL, nDouble * sizeof(double)); #endif } return tempD; } static void c_ekksmem(EKKfactinfo *fact, int nrow, int maximumPivots) { /* space for invert */ int nnetas = fact->eta_size; fact->nrow = nrow; if (!(nnetas > fact->last_eta_size || (!fact->xe2adr && fact->if_sparse_update) || nrow > fact->nrowmx || maximumPivots > fact->maxinv)) return; clp_adjust_pointers(fact, +1); if (nrow > fact->nrowmx || maximumPivots > fact->maxinv) { int length; fact->nrowmx = CoinMax(nrow, fact->nrowmx); fact->maxinv = CoinMax(maximumPivots, fact->maxinv); clp_free(fact->trueStart); fact->trueStart = 0; fact->kw1adr = 0; fact->trueStart = clp_alloc_memory(fact, 1, &length); fact->kw1adr = reinterpret_cast< double * >(clp_align(fact->trueStart)); clp_alloc_memory(fact, 0, &length); } /*if (!fact->iterno) fact->eta_size+=1000000;*/ /* TEMP*/ if (nnetas > fact->last_eta_size || (!fact->xe2adr && fact->if_sparse_update)) { fact->last_eta_size = nnetas; clp_free(reinterpret_cast< char * >(fact->xe2adr)); /* if malloc fails - we have lost memory - start again */ if (!fact->ndenuc && fact->if_sparse_update) { /* allow second copy of elements */ fact->xe2adr = clp_double(nnetas); #ifndef NDEBUG memset(fact->xe2adr, CLP_FILL, nnetas * sizeof(double)); #endif if (!fact->xe2adr) { fact->maxNNetas = fact->last_eta_size; /* dont allow any increase */ nnetas = fact->last_eta_size; fact->eta_size = nnetas; #ifdef PRINT_DEBUG if (fact->if_sparse_update) { printf("*** Sparse update off due to memory\n"); } #endif fact->if_sparse_update = 0; fact->switch_off_sparse_update = 1; } } else { fact->xe2adr = 0; fact->if_sparse_update = 0; } clp_free(fact->xeradr); fact->xeradr = clp_int(nnetas); #ifndef NDEBUG memset(fact->xeradr, CLP_FILL, nnetas * sizeof(int)); #endif if (!fact->xeradr) { nnetas = 0; } if (nnetas) { clp_free(fact->xecadr); fact->xecadr = clp_int(nnetas); #ifndef NDEBUG memset(fact->xecadr, CLP_FILL, nnetas * sizeof(int)); #endif if (!fact->xecadr) { nnetas = 0; } } if (nnetas) { clp_free(fact->xeeadr); fact->xeeadr = clp_double(nnetas); #ifndef NDEBUG memset(fact->xeeadr, CLP_FILL, nnetas * sizeof(double)); #endif if (!fact->xeeadr) { nnetas = 0; } } } if (!nnetas) { char msg[100]; sprintf(msg, "Unable to allocate factorization memory for %d elements", nnetas); throw(msg); } /*c_ekklplp->nnetas=nnetas;*/ fact->nnetas = nnetas; clp_adjust_pointers(fact, -1); } static void c_ekksmem_copy(EKKfactinfo *fact, const EKKfactinfo *rhsFact) { /* space for invert */ int nrowmx = rhsFact->nrowmx, nnetas = rhsFact->nnetas; int canReuseEtas = (fact->eta_size == rhsFact->eta_size) ? 1 : 0; int canReuseArrays = (fact->nrowmx == rhsFact->nrowmx) ? 1 : 0; clp_adjust_pointers(fact, +1); clp_adjust_pointers(const_cast< EKKfactinfo * >(rhsFact), +1); /*memset(fact,0,sizeof(EKKfactinfo));*/ /* copy scalars */ memcpy(&fact->drtpiv, &rhsFact->drtpiv, 5 * sizeof(double)); memcpy(&fact->nrow, &rhsFact->nrow, ((&fact->maxNNetas - &fact->nrow) + 1) * sizeof(int)); if (nrowmx) { int length; int kCopyEnd, nCopyEnd, nCopyStart; if (!canReuseEtas) { clp_free(fact->xeradr); clp_free(fact->xecadr); clp_free(fact->xeeadr); clp_free(fact->xe2adr); fact->xeradr = 0; fact->xecadr = 0; fact->xeeadr = 0; fact->xe2adr = 0; } if (!canReuseArrays) { clp_free(fact->trueStart); fact->trueStart = 0; fact->kw1adr = 0; fact->trueStart = clp_alloc_memory(fact, 1, &length); fact->kw1adr = reinterpret_cast< double * >(clp_align(fact->trueStart)); } clp_alloc_memory(fact, 0, &length); nnetas = fact->eta_size; assert(nnetas); { int n2 = rhsFact->nR_etas; int n3 = n2 ? rhsFact->R_etas_start[1 + n2] : 0; int *startR = rhsFact->R_etas_index + n3; nCopyEnd = static_cast< int >((rhsFact->xeradr + nnetas) - startR); nCopyStart = rhsFact->nnentu; nCopyEnd = CoinMin(nCopyEnd + 20, nnetas); kCopyEnd = nnetas - nCopyEnd; nCopyStart = CoinMin(nCopyStart + 20, nnetas); if (!n2 && !rhsFact->nnentu && !rhsFact->nnentl) { nCopyStart = nCopyEnd = 0; } } /* copy */ if (nCopyStart || nCopyEnd || true) { #if 1 memcpy(fact->kw1adr, rhsFact->kw1adr, length * sizeof(double)); #else c_ekkscpy((length*sizeof(double))/sizeof(int), reinterpret_cast( rhsFact->kw1adr,reinterpret_cast( fact->kw1adr)); #endif } /* if malloc fails - we have lost memory - start again */ if (!fact->ndenuc && fact->if_sparse_update) { /* allow second copy of elements */ if (!canReuseEtas) fact->xe2adr = clp_double(nnetas); if (!fact->xe2adr) { fact->maxNNetas = nnetas; /* dont allow any increase */ #ifdef PRINT_DEBUG if (fact->if_sparse_update) { printf("*** Sparse update off due to memory\n"); } #endif fact->if_sparse_update = 0; } else { #ifndef NDEBUG memset(fact->xe2adr, CLP_FILL, nnetas * sizeof(double)); #endif } } else { clp_free(fact->xe2adr); fact->xe2adr = 0; fact->if_sparse_update = 0; } if (!canReuseEtas) fact->xeradr = clp_int(nnetas); if (!fact->xeradr) { nnetas = 0; } else { #ifndef NDEBUG memset(fact->xeradr, CLP_FILL, nnetas * sizeof(int)); #endif /* copy */ if (nCopyStart || nCopyEnd) { #if 0 memcpy(fact->xeradr,rhsFact->xeradr,nCopyStart*sizeof(int)); memcpy(fact->xeradr+kCopyEnd,rhsFact->xeradr+kCopyEnd,nCopyEnd*sizeof(int)); #else c_ekkscpy(nCopyStart, rhsFact->xeradr, fact->xeradr); c_ekkscpy(nCopyEnd, rhsFact->xeradr + kCopyEnd, fact->xeradr + kCopyEnd); #endif } } if (nnetas) { if (!canReuseEtas) fact->xecadr = clp_int(nnetas); if (!fact->xecadr) { nnetas = 0; } else { #ifndef NDEBUG memset(fact->xecadr, CLP_FILL, nnetas * sizeof(int)); #endif /* copy */ if (fact->rows_ok && (nCopyStart || nCopyEnd)) { int i; int *hcoliR = rhsFact->xecadr - 1; int *hcoli = fact->xecadr - 1; int *mrstrt = fact->xrsadr; int *hinrow = fact->xrnadr; #if 0 memcpy(fact->xecadr+kCopyEnd,rhsFact->xecadr+kCopyEnd, nCopyEnd*sizeof(int)); #else c_ekkscpy(nCopyEnd, rhsFact->xecadr + kCopyEnd, fact->xecadr + kCopyEnd); #endif if (!fact->xe2adr) { for (i = 0; i < fact->nrow; i++) { int istart = mrstrt[i]; assert(istart > 0 && istart <= nnetas); assert(hinrow[i] >= 0 && hinrow[i] <= fact->nrow); memcpy(hcoli + istart, hcoliR + istart, hinrow[i] * sizeof(int)); } } else { double *de2valR = rhsFact->xe2adr - 1; double *de2val = fact->xe2adr - 1; #if 0 memcpy(fact->xe2adr+kCopyEnd,rhsFact->xe2adr+kCopyEnd, nCopyEnd*sizeof(double)); #else c_ekkdcpy(nCopyEnd, rhsFact->xe2adr + kCopyEnd, fact->xe2adr + kCopyEnd); #endif for (i = 0; i < fact->nrow; i++) { int istart = mrstrt[i]; assert(istart > 0 && istart <= nnetas); assert(hinrow[i] >= 0 && hinrow[i] <= fact->nrow); memcpy(hcoli + istart, hcoliR + istart, hinrow[i] * sizeof(int)); memcpy(de2val + istart, de2valR + istart, hinrow[i] * sizeof(double)); #ifndef NDEBUG { int j; for (j = istart; j < istart + hinrow[i]; j++) assert(fabs(de2val[j]) < 1.0e50); } #endif } } } } } if (nnetas) { if (!canReuseEtas) fact->xeeadr = clp_double(nnetas); if (!fact->xeeadr) { nnetas = 0; } else { #ifndef NDEBUG memset(fact->xeeadr, CLP_FILL, nnetas * sizeof(double)); #endif /* copy */ if (nCopyStart || nCopyEnd) { #if 0 memcpy(fact->xeeadr,rhsFact->xeeadr,nCopyStart*sizeof(double)); memcpy(fact->xeeadr+kCopyEnd,rhsFact->xeeadr+kCopyEnd,nCopyEnd*sizeof(double)); #else c_ekkdcpy(nCopyStart, rhsFact->xeeadr, fact->xeeadr); c_ekkdcpy(nCopyEnd, rhsFact->xeeadr + kCopyEnd, fact->xeeadr + kCopyEnd); #endif } /*fact->R_etas_index = &XERADR1()[kdnspt - 1]; fact->R_etas_element = &XEEADR1()[kdnspt - 1];*/ fact->R_etas_start = fact->xcsadr + (rhsFact->R_etas_start - rhsFact->xcsadr); fact->R_etas_index = fact->xeradr + (rhsFact->R_etas_index - rhsFact->xeradr); fact->R_etas_element = fact->xeeadr + (rhsFact->R_etas_element - rhsFact->xeeadr); } } } assert(nnetas || !nrowmx); fact->nnetas = nnetas; clp_adjust_pointers(fact, -1); clp_setup_pointers(fact); clp_adjust_pointers(const_cast< EKKfactinfo * >(rhsFact), -1); } static void c_ekksmem_delete(EKKfactinfo *fact) { clp_adjust_pointers(fact, +1); clp_free(fact->trueStart); clp_free(fact->xe2adr); clp_free(fact->xecadr); clp_free(fact->xeradr); clp_free(fact->xeeadr); fact->eta_size = 0; fact->xrsadr = 0; fact->xcsadr = 0; fact->xrnadr = 0; fact->xcnadr = 0; fact->krpadr = 0; fact->kcpadr = 0; fact->xeradr = 0; fact->xecadr = 0; fact->xeeadr = 0; fact->xe2adr = 0; fact->trueStart = 0; fact->kw2adr = 0; fact->kw3adr = 0; fact->kp1adr = 0; fact->kp2adr = 0; fact->kadrpm = 0; fact->kw1adr = 0; } int c_ekk_IsSet(const int *array, int bit); void c_ekk_Set(int *array, int bit); void c_ekk_Unset(int *array, int bit); int c_ekk_IsSet(const int *array, int bit) { int iWord = bit >> 5; int iBit = bit & 31; int word = array[iWord]; return (word & (1 << iBit)) != 0; } void c_ekk_Set(int *array, int bit) { int iWord = bit >> 5; int iBit = bit & 31; array[iWord] |= (1 << iBit); } void c_ekk_Unset(int *array, int bit) { int iWord = bit >> 5; int iBit = bit & 31; array[iWord] &= ~(1 << iBit); } int CoinOslFactorization::factorize( const CoinPackedMatrix &matrix, int rowIsBasic[], int columnIsBasic[], double areaFactor) { setSolveMode(10); if (areaFactor) factInfo_.areaFactor = areaFactor; const int *row = matrix.getIndices(); const CoinBigIndex *columnStart = matrix.getVectorStarts(); const int *columnLength = matrix.getVectorLengths(); const double *element = matrix.getElements(); int numberRows = matrix.getNumRows(); int numberColumns = matrix.getNumCols(); int numberBasic = 0; CoinBigIndex numberElements = 0; int numberRowBasic = 0; // compute how much in basis int i; // Move pivot variables across if they look good int *pivotTemp = new int[numberRows]; for (i = 0; i < numberRows; i++) { if (rowIsBasic[i] >= 0) pivotTemp[numberRowBasic++] = i; } numberBasic = numberRowBasic; for (i = 0; i < numberColumns; i++) { if (columnIsBasic[i] >= 0) { pivotTemp[numberBasic++] = i; numberElements += columnLength[i]; } } if (numberBasic > numberRows) { return -2; // say too many in basis } numberElements = 3 * numberRows + 3 * numberElements + 20000; setUsefulInformation(&numberRows, 0); getAreas(numberRows, numberRows, numberElements, 2 * numberElements); //fill numberBasic = 0; numberElements = 0; // Fill in counts so we can skip part of preProcess double *elementU = elements(); int *indexRowU = indices(); int *startColumnU = starts(); int *numberInRow = this->numberInRow(); int *numberInColumn = this->numberInColumn(); CoinZeroN(numberInRow, numberRows); CoinZeroN(numberInColumn, numberRows); for (i = 0; i < numberRowBasic; i++) { int iRow = pivotTemp[i]; // Change pivotTemp to correct sequence pivotTemp[i] = iRow + numberColumns; indexRowU[i] = iRow; startColumnU[i] = i; elementU[i] = -1.0; numberInRow[iRow] = 1; numberInColumn[i] = 1; } startColumnU[numberRowBasic] = numberRowBasic; numberElements = numberRowBasic; numberBasic = numberRowBasic; for (i = 0; i < numberColumns; i++) { if (columnIsBasic[i] >= 0) { CoinBigIndex j; for (j = columnStart[i]; j < columnStart[i] + columnLength[i]; j++) { int iRow = row[j]; numberInRow[iRow]++; indexRowU[numberElements] = iRow; elementU[numberElements++] = element[j]; } numberInColumn[numberBasic] = columnLength[i]; numberBasic++; startColumnU[numberBasic] = numberElements; } } preProcess(); factor(); if (status() == 0) { int *pivotVariable = new int[numberRows]; postProcess(pivotTemp, pivotVariable); for (i = 0; i < numberRows; i++) { int iPivot = pivotVariable[i]; if (iPivot < numberColumns) { assert(columnIsBasic[iPivot] >= 0); columnIsBasic[iPivot] = i; } else { iPivot -= numberColumns; assert(rowIsBasic[iPivot] >= 0); rowIsBasic[iPivot] = i; } } delete[] pivotVariable; } delete[] pivotTemp; return status_; } // Condition number - product of pivots after factorization double CoinOslFactorization::conditionNumber() const { double condition = 1.0; const double *dluval = factInfo_.xeeadr + 1 - 1; // stored before const int *mcstrt = factInfo_.xcsadr + 1; for (int i = 0; i < numberRows_; i++) { const int kx = mcstrt[i]; const double dpiv = dluval[kx]; condition *= dpiv; } condition = CoinMax(fabs(condition), 1.0e-50); return 1.0 / condition; } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinWarmStartBasis.hpp0000644000175200017520000003627713414454441020026 0ustar coincoin/* $Id: CoinWarmStartBasis.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ /*! \legal Copyright (C) 2000 -- 2003, International Business Machines Corporation and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ /*! \file CoinWarmStart.hpp \brief Declaration of the generic simplex (basis-oriented) warm start class. Also contains a basis diff class. */ #ifndef CoinWarmStartBasis_H #define CoinWarmStartBasis_H #include #include "CoinSort.hpp" #include "CoinHelperFunctions.hpp" #include "CoinWarmStart.hpp" //############################################################################# /*! \class CoinWarmStartBasis \brief The default COIN simplex (basis-oriented) warm start class CoinWarmStartBasis provides for a warm start object which contains the status of each variable (structural and artificial). \todo Modify this class so that the number of status entries per byte and bytes per status vector allocation unit are not hardcoded. At the least, collect this into a couple of macros. \todo Consider separate fields for allocated capacity and actual basis size. We could avoid some reallocation, at the price of retaining more space than we need. Perhaps more important, we could do much better sanity checks. */ class CoinWarmStartBasis : public virtual CoinWarmStart { public: /*! \brief Enum for status of variables Matches CoinPrePostsolveMatrix::Status, without superBasic. Most code that converts between CoinPrePostsolveMatrix::Status and CoinWarmStartBasis::Status will break if this correspondence is broken. The status vectors are currently packed using two bits per status code, four codes per byte. The location of the status information for variable \c i is in byte i>>2 and occupies bits 0:1 if i\%4 == 0, bits 2:3 if i\%4 == 1, etc. The non-member functions getStatus(const char*,int) and setStatus(char*,int,CoinWarmStartBasis::Status) are provided to hide details of the packing. */ enum Status { isFree = 0x00, ///< Nonbasic free variable basic = 0x01, ///< Basic variable atUpperBound = 0x02, ///< Nonbasic at upper bound atLowerBound = 0x03, ///< Nonbasic at lower bound superBasic = 0x04 ///< Not basic and not at bound }; /** \brief Transfer vector entry for mergeBasis(const CoinWarmStartBasis*,const XferVec*,const XferVec*) */ typedef CoinTriple< int, int, int > XferEntry; /** \brief Transfer vector for mergeBasis(const CoinWarmStartBasis*,const XferVec*,const XferVec*) */ typedef std::vector< XferEntry > XferVec; public: /*! \name Methods to get and set basis information. The status of variables is kept in a pair of arrays, one for structural variables, and one for artificials (aka logicals and slacks). The status is coded using the values of the Status enum. \sa CoinWarmStartBasis::Status for a description of the packing used in the status arrays. */ //@{ /// Return the number of structural variables inline int getNumStructural() const { return numStructural_; } /// Return the number of artificial variables inline int getNumArtificial() const { return numArtificial_; } /** Return the number of basic structurals A fast test for an all-slack basis. */ int numberBasicStructurals() const; /// Return the status of the specified structural variable. inline Status getStructStatus(int i) const { const int st = (structuralStatus_[i >> 2] >> ((i & 3) << 1)) & 3; return static_cast< CoinWarmStartBasis::Status >(st); } /// Set the status of the specified structural variable. inline void setStructStatus(int i, Status st) { char &st_byte = structuralStatus_[i >> 2]; st_byte = static_cast< char >(st_byte & ~(3 << ((i & 3) << 1))); st_byte = static_cast< char >(st_byte | (st << ((i & 3) << 1))); } /** Return the status array for the structural variables The status information is stored using the codes defined in the Status enum, 2 bits per variable, packed 4 variables per byte. */ inline char *getStructuralStatus() { return structuralStatus_; } /** \c const overload for \link CoinWarmStartBasis::getStructuralStatus() getStructuralStatus() \endlink */ inline const char *getStructuralStatus() const { return structuralStatus_; } /** As for \link getStructuralStatus() getStructuralStatus \endlink, but returns the status array for the artificial variables. */ inline char *getArtificialStatus() { return artificialStatus_; } /// Return the status of the specified artificial variable. inline Status getArtifStatus(int i) const { const int st = (artificialStatus_[i >> 2] >> ((i & 3) << 1)) & 3; return static_cast< CoinWarmStartBasis::Status >(st); } /// Set the status of the specified artificial variable. inline void setArtifStatus(int i, Status st) { char &st_byte = artificialStatus_[i >> 2]; st_byte = static_cast< char >(st_byte & ~(3 << ((i & 3) << 1))); st_byte = static_cast< char >(st_byte | (st << ((i & 3) << 1))); } /** \c const overload for \link CoinWarmStartBasis::getArtificialStatus() getArtificialStatus() \endlink */ inline const char *getArtificialStatus() const { return artificialStatus_; } //@} /*! \name Basis `diff' methods */ //@{ /*! \brief Generate a `diff' that can convert the warm start basis passed as a parameter to the warm start basis specified by \c this. The capabilities are limited: the basis passed as a parameter can be no larger than the basis pointed to by \c this. */ virtual CoinWarmStartDiff * generateDiff(const CoinWarmStart *const oldCWS) const; /*! \brief Apply \p diff to this basis Update this basis by applying \p diff. It's assumed that the allocated capacity of the basis is sufficiently large. */ virtual void applyDiff(const CoinWarmStartDiff *const cwsdDiff); //@} /*! \name Methods to modify the warm start object */ //@{ /*! \brief Set basis capacity; existing basis is discarded. After execution of this routine, the warm start object does not describe a valid basis: all structural and artificial variables have status isFree. */ virtual void setSize(int ns, int na); /*! \brief Set basis capacity; existing basis is maintained. After execution of this routine, the warm start object describes a valid basis: the status of new structural variables (added columns) is set to nonbasic at lower bound, and the status of new artificial variables (added rows) is set to basic. (The basis can be invalid if new structural variables do not have a finite lower bound.) */ virtual void resize(int newNumberRows, int newNumberColumns); /** \brief Delete a set of rows from the basis \warning This routine assumes that the set of indices to be deleted is sorted in ascending order and contains no duplicates. Use deleteRows() if this is not the case. \warning The resulting basis is guaranteed valid only if all deleted constraints are slack (hence the associated logicals are basic). Removal of a tight constraint with a nonbasic logical implies that some basic variable must be made nonbasic. This correction is left to the client. */ virtual void compressRows(int tgtCnt, const int *tgts); /** \brief Delete a set of rows from the basis \warning The resulting basis is guaranteed valid only if all deleted constraints are slack (hence the associated logicals are basic). Removal of a tight constraint with a nonbasic logical implies that some basic variable must be made nonbasic. This correction is left to the client. */ virtual void deleteRows(int rawTgtCnt, const int *rawTgts); /** \brief Delete a set of columns from the basis \warning The resulting basis is guaranteed valid only if all deleted variables are nonbasic. Removal of a basic variable implies that some nonbasic variable must be made basic. This correction is left to the client. */ virtual void deleteColumns(int number, const int *which); /** \brief Merge entries from a source basis into this basis. \warning It's the client's responsibility to ensure validity of the merged basis, if that's important to the application. The vector xferCols (xferRows) specifies runs of entries to be taken from the source basis and placed in this basis. Each entry is a CoinTriple, with first specifying the starting source index of a run, second specifying the starting destination index, and third specifying the run length. */ virtual void mergeBasis(const CoinWarmStartBasis *src, const XferVec *xferRows, const XferVec *xferCols); //@} /*! \name Constructors, destructors, and related functions */ //@{ /** Default constructor Creates a warm start object representing an empty basis (0 rows, 0 columns). */ CoinWarmStartBasis(); /** Constructs a warm start object with the specified status vectors. The parameters are copied. Consider assignBasisStatus(int,int,char*&,char*&) if the object should assume ownership. \sa CoinWarmStartBasis::Status for a description of the packing used in the status arrays. */ CoinWarmStartBasis(int ns, int na, const char *sStat, const char *aStat); /** Copy constructor */ CoinWarmStartBasis(const CoinWarmStartBasis &ws); /** `Virtual constructor' */ virtual CoinWarmStart *clone() const { return new CoinWarmStartBasis(*this); } /** Destructor */ virtual ~CoinWarmStartBasis(); /** Assignment */ virtual CoinWarmStartBasis &operator=(const CoinWarmStartBasis &rhs); /** Assign the status vectors to be the warm start information. In this method the CoinWarmStartBasis object assumes ownership of the pointers and upon return the argument pointers will be NULL. If copying is desirable, use the \link CoinWarmStartBasis(int,int,const char*,const char*) array constructor \endlink or the \link operator=(const CoinWarmStartBasis&) assignment operator \endlink. \note The pointers passed to this method will be freed using delete[], so they must be created using new[]. */ virtual void assignBasisStatus(int ns, int na, char *&sStat, char *&aStat); //@} /*! \name Miscellaneous methods */ //@{ /// Prints in readable format (for debug) virtual void print() const; /// Returns true if full basis (for debug) bool fullBasis() const; /// Returns true if full basis and fixes up (for debug) bool fixFullBasis(); //@} protected: /** \name Protected data members \sa CoinWarmStartBasis::Status for a description of the packing used in the status arrays. */ //@{ /// The number of structural variables int numStructural_; /// The number of artificial variables int numArtificial_; /// The maximum sise (in ints - actually 4*char) (so resize does not need to do new) int maxSize_; /** The status of the structural variables. */ char *structuralStatus_; /** The status of the artificial variables. */ char *artificialStatus_; //@} }; /*! \relates CoinWarmStartBasis \brief Get the status of the specified variable in the given status array. */ inline CoinWarmStartBasis::Status getStatus(const char *array, int i) { const int st = (array[i >> 2] >> ((i & 3) << 1)) & 3; return static_cast< CoinWarmStartBasis::Status >(st); } /*! \relates CoinWarmStartBasis \brief Set the status of the specified variable in the given status array. */ inline void setStatus(char *array, int i, CoinWarmStartBasis::Status st) { char &st_byte = array[i >> 2]; st_byte = static_cast< char >(st_byte & ~(3 << ((i & 3) << 1))); st_byte = static_cast< char >(st_byte | (st << ((i & 3) << 1))); } /*! \relates CoinWarmStartBasis \brief Generate a print string for a status code */ const char *statusName(CoinWarmStartBasis::Status status); /** In an example Aleksandr Kazachkov sent to me, I noticed he was using code as above but with char - it seemed useful B, F, U, L, S (S - SuperBasic) */ /// Convert status to character. char statusToChar(CoinWarmStartBasis::Status status); /// Convert character to status CoinWarmStartBasis::Status charToStatus(char status); /*! \class CoinWarmStartBasisDiff \brief A `diff' between two CoinWarmStartBasis objects This class exists in order to hide from the world the details of calculating and representing a `diff' between two CoinWarmStartBasis objects. For convenience, assignment, cloning, and deletion are visible to the world, and default and copy constructors are made available to derived classes. Knowledge of the rest of this structure, and of generating and applying diffs, is restricted to the friend functions CoinWarmStartBasis::generateDiff() and CoinWarmStartBasis::applyDiff(). The actual data structure is an unsigned int vector, #difference_ which starts with indices of changed and then has values starting after #sze_ \todo This is a pretty generic structure, and vector diff is a pretty generic activity. We should be able to convert this to a template. \todo Using unsigned int as the data type for the diff vectors might help to contain the damage when this code is inevitably compiled for 64 bit architectures. But the notion of int as 4 bytes is hardwired into CoinWarmStartBasis, so changes are definitely required. */ class CoinWarmStartBasisDiff : public virtual CoinWarmStartDiff { public: /*! \brief `Virtual constructor' */ virtual CoinWarmStartDiff *clone() const { CoinWarmStartBasisDiff *cwsbd = new CoinWarmStartBasisDiff(*this); return (dynamic_cast< CoinWarmStartDiff * >(cwsbd)); } /*! \brief Assignment */ virtual CoinWarmStartBasisDiff &operator=(const CoinWarmStartBasisDiff &rhs); /*! \brief Destructor */ virtual ~CoinWarmStartBasisDiff(); protected: /*! \brief Default constructor This is protected (rather than private) so that derived classes can see it when they make their default constructor protected or private. */ CoinWarmStartBasisDiff() : sze_(0) , difference_(0) { } /*! \brief Copy constructor For convenience when copying objects containing CoinWarmStartBasisDiff objects. But consider whether you should be using #clone() to retain polymorphism. This is protected (rather than private) so that derived classes can see it when they make their copy constructor protected or private. */ CoinWarmStartBasisDiff(const CoinWarmStartBasisDiff &cwsbd); /*! \brief Standard constructor */ CoinWarmStartBasisDiff(int sze, const unsigned int *const diffNdxs, const unsigned int *const diffVals); /*! \brief Constructor when full is smaller than diff!*/ CoinWarmStartBasisDiff(const CoinWarmStartBasis *rhs); private: friend CoinWarmStartDiff * CoinWarmStartBasis::generateDiff(const CoinWarmStart *const oldCWS) const; friend void CoinWarmStartBasis::applyDiff(const CoinWarmStartDiff *const diff); /*! \brief Number of entries (and allocated capacity), in units of \c int. */ int sze_; /*! \brief Array of diff indices and diff values */ unsigned int *difference_; }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinRational.hpp0000644000175200017520000000155013414454441016653 0ustar coincoin// Authors: Matthew Saltzman and Ted Ralphs // Copyright 2015, Matthew Saltzman and Ted Ralphs // Licensed under the Eclipse Public License 1.0 #ifndef CoinRational_H #define CoinRational_H #include //Small class for rational numbers class CoinRational { public: long getDenominator() { return denominator_; } long getNumerator() { return numerator_; } CoinRational() : numerator_(0) , denominator_(1) {}; CoinRational(long n, long d) : numerator_(n) , denominator_(d) {}; CoinRational(double val, double maxdelta, long maxdnom) { if (!nearestRational_(val, maxdelta, maxdnom)) { numerator_ = 0; denominator_ = 1; } }; private: long numerator_; long denominator_; bool nearestRational_(double val, double maxdelta, long maxdnom); }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/config.h.in0000644000175200017520000001202112450335570015576 0ustar coincoin/* src/config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if cstdint is available for CoinUtils */ #undef COINUTILS_HAS_CSTDINT /* Define to 1 if stdint.h is available for CoinUtils */ #undef COINUTILS_HAS_STDINT_H /* Default maximum pooled allocation size */ #undef COINUTILS_MEMPOOL_MAXPOOLED /* Define to 1 CoinUtils should override global new/delete */ #undef COINUTILS_MEMPOOL_OVERRIDE_NEW /* Define to 1 if the thread aware version of CoinUtils should be compiled */ #undef COINUTILS_PTHREADS /* SVN revision number of project */ #undef COINUTILS_SVN_REV /* Version number of project */ #undef COINUTILS_VERSION /* Major Version number of project */ #undef COINUTILS_VERSION_MAJOR /* Minor Version number of project */ #undef COINUTILS_VERSION_MINOR /* Release Version number of project */ #undef COINUTILS_VERSION_RELEASE /* Define to the debug sanity check level (0 is no test) */ #undef COIN_COINUTILS_CHECKLEVEL /* Define to the debug verbosity level (0 is no output) */ #undef COIN_COINUTILS_VERBOSITY /* Define to be the name of C-function for Inf check */ #undef COIN_C_FINITE /* Define to be the name of C-function for NaN check */ #undef COIN_C_ISNAN /* If defined, the BLAS Library is available. */ #undef COIN_HAS_BLAS /* Define to 1 if bzlib is available */ #undef COIN_HAS_BZLIB /* Define to 1 if the Glpk package is available */ #undef COIN_HAS_GLPK /* If defined, the LAPACK Library is available. */ #undef COIN_HAS_LAPACK /* Define to 1 if the Netlib package is available */ #undef COIN_HAS_NETLIB /* Define to 1 if readline is available */ #undef COIN_HAS_READLINE /* Define to 1 if the Sample package is available */ #undef COIN_HAS_SAMPLE /* Define to 1 if zlib is available */ #undef COIN_HAS_ZLIB /* Define to 64bit integer type */ #undef COIN_INT64_T /* Define to integer type capturing pointer */ #undef COIN_INTPTR_T /* Define to 64bit unsigned integer type */ #undef COIN_UINT64_T /* Define to dummy `main' function (if any) required to link to the Fortran libraries. */ #undef F77_DUMMY_MAIN /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ #undef F77_FUNC /* As F77_FUNC, but for C identifiers containing underscores. */ #undef F77_FUNC_ /* Define if F77 and FC dummy `main' functions are identical. */ #undef FC_DUMMY_MAIN_EQ_F77 /* Define to 1 if you have the header file. */ #undef HAVE_BZLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_CFLOAT /* Define to 1 if you have the header file. */ #undef HAVE_CIEEEFP /* Define to 1 if you have the header file. */ #undef HAVE_CINTTYPES /* Define to 1 if you have the header file. */ #undef HAVE_CMATH /* Define to 1 if you have the header file. */ #undef HAVE_CSTDINT /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_ENDIAN_H /* Define to 1 if you have the header file. */ #undef HAVE_FLOAT_H /* Define to 1 if you have the header file. */ #undef HAVE_IEEEFP_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MATH_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_READLINE_READLINE_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_STDLIB_H /* 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 header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_WINDOWS_H /* Define to 1 if you have the header file. */ #undef HAVE_ZLIB_H /* 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 version of this package. */ #undef PACKAGE_VERSION /* The size of a `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of a `int *', as computed by sizeof. */ #undef SIZEOF_INT_P /* The size of a `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of a `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION DyLP-1.10.4/CoinUtils/src/CoinSearchTree.hpp0000644000175200017520000003407413414454441017136 0ustar coincoin/* $Id: CoinSearchTree.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinSearchTree_H #define CoinSearchTree_H #include #include #include #include #include "CoinFinite.hpp" #include "CoinHelperFunctions.hpp" // #define DEBUG_PRINT //############################################################################# class BitVector128 { friend bool operator<(const BitVector128 &b0, const BitVector128 &b1); private: unsigned int bits_[4]; public: BitVector128(); BitVector128(unsigned int bits[4]); ~BitVector128() {} void set(unsigned int bits[4]); void setBit(int i); void clearBit(int i); std::string str() const; }; bool operator<(const BitVector128 &b0, const BitVector128 &b1); //############################################################################# /** A class from which the real tree nodes should be derived from. Some of the data that undoubtedly exist in the real tree node is replicated here for fast access. This class is used in the various comparison functions. */ class CoinTreeNode { protected: CoinTreeNode() : depth_(-1) , fractionality_(-1) , quality_(-COIN_DBL_MAX) , true_lower_bound_(-COIN_DBL_MAX) , preferred_() { } CoinTreeNode(int d, int f = -1, double q = -COIN_DBL_MAX, double tlb = -COIN_DBL_MAX, BitVector128 p = BitVector128()) : depth_(d) , fractionality_(f) , quality_(q) , true_lower_bound_(tlb) , preferred_(p) { } CoinTreeNode(const CoinTreeNode &x) : depth_(x.depth_) , fractionality_(x.fractionality_) , quality_(x.quality_) , true_lower_bound_(x.true_lower_bound_) , preferred_(x.preferred_) { } CoinTreeNode &operator=(const CoinTreeNode &x) { if (this != &x) { depth_ = x.depth_; fractionality_ = x.fractionality_; quality_ = x.quality_; true_lower_bound_ = x.true_lower_bound_; preferred_ = x.preferred_; } return *this; } private: /// The depth of the node in the tree int depth_; /** A measure of fractionality, e.g., the number of unsatisfied integrality requirements */ int fractionality_; /** Some quality for the node. For normal branch-and-cut problems the LP relaxation value will do just fine. It is probably an OK approximation even if column generation is done. */ double quality_; /** A true lower bound on the node. May be -infinity. For normal branch-and-cut problems the LP relaxation value is OK. It is different when column generation is done. */ double true_lower_bound_; /** */ BitVector128 preferred_; public: virtual ~CoinTreeNode() {} inline int getDepth() const { return depth_; } inline int getFractionality() const { return fractionality_; } inline double getQuality() const { return quality_; } inline double getTrueLB() const { return true_lower_bound_; } inline BitVector128 getPreferred() const { return preferred_; } inline void setDepth(int d) { depth_ = d; } inline void setFractionality(int f) { fractionality_ = f; } inline void setQuality(double q) { quality_ = q; } inline void setTrueLB(double tlb) { true_lower_bound_ = tlb; } inline void setPreferred(BitVector128 p) { preferred_ = p; } }; //============================================================================== class CoinTreeSiblings { private: CoinTreeSiblings(); CoinTreeSiblings &operator=(const CoinTreeSiblings &); private: int current_; int numSiblings_; CoinTreeNode **siblings_; public: CoinTreeSiblings(const int n, CoinTreeNode **nodes) : current_(0) , numSiblings_(n) , siblings_(new CoinTreeNode *[n]) { CoinDisjointCopyN(nodes, n, siblings_); } CoinTreeSiblings(const CoinTreeSiblings &s) : current_(s.current_) , numSiblings_(s.numSiblings_) , siblings_(new CoinTreeNode *[s.numSiblings_]) { CoinDisjointCopyN(s.siblings_, s.numSiblings_, siblings_); } ~CoinTreeSiblings() { delete[] siblings_; } inline CoinTreeNode *currentNode() const { return siblings_[current_]; } /** returns false if cannot be advanced */ inline bool advanceNode() { return ++current_ != numSiblings_; } inline int toProcess() const { return numSiblings_ - current_; } inline int size() const { return numSiblings_; } inline void printPref() const { for (int i = 0; i < numSiblings_; ++i) { std::string pref = siblings_[i]->getPreferred().str(); printf("prefs of sibligs: sibling[%i]: %s\n", i, pref.c_str()); } } }; //############################################################################# /** Function objects to compare search tree nodes. The comparison function must return true if the first argument is "better" than the second one, i.e., it should be processed first. */ /*@{*/ /** Depth First Search. */ struct CoinSearchTreeComparePreferred { static inline const char *name() { return "CoinSearchTreeComparePreferred"; } inline bool operator()(const CoinTreeSiblings *x, const CoinTreeSiblings *y) const { const CoinTreeNode *xNode = x->currentNode(); const CoinTreeNode *yNode = y->currentNode(); const BitVector128 xPref = xNode->getPreferred(); const BitVector128 yPref = yNode->getPreferred(); bool retval = true; if (xPref < yPref) { retval = true; } else if (yPref < xPref) { retval = false; } else { retval = xNode->getQuality() < yNode->getQuality(); } #ifdef DEBUG_PRINT printf("Comparing xpref (%s) and ypref (%s) : %s\n", xpref.str().c_str(), ypref.str().c_str(), retval ? "T" : "F"); #endif return retval; } }; //----------------------------------------------------------------------------- /** Depth First Search. */ struct CoinSearchTreeCompareDepth { static inline const char *name() { return "CoinSearchTreeCompareDepth"; } inline bool operator()(const CoinTreeSiblings *x, const CoinTreeSiblings *y) const { #if 1 return x->currentNode()->getDepth() >= y->currentNode()->getDepth(); #else if (x->currentNode()->getDepth() > y->currentNode()->getDepth()) return 1; if (x->currentNode()->getDepth() == y->currentNode()->getDepth() && x->currentNode()->getQuality() <= y->currentNode()->getQuality()) return 1; return 0; #endif } }; //----------------------------------------------------------------------------- /* Breadth First Search */ struct CoinSearchTreeCompareBreadth { static inline const char *name() { return "CoinSearchTreeCompareBreadth"; } inline bool operator()(const CoinTreeSiblings *x, const CoinTreeSiblings *y) const { return x->currentNode()->getDepth() < y->currentNode()->getDepth(); } }; //----------------------------------------------------------------------------- /** Best first search */ struct CoinSearchTreeCompareBest { static inline const char *name() { return "CoinSearchTreeCompareBest"; } inline bool operator()(const CoinTreeSiblings *x, const CoinTreeSiblings *y) const { return x->currentNode()->getQuality() < y->currentNode()->getQuality(); } }; //############################################################################# class CoinSearchTreeBase { private: CoinSearchTreeBase(const CoinSearchTreeBase &); CoinSearchTreeBase &operator=(const CoinSearchTreeBase &); protected: std::vector< CoinTreeSiblings * > candidateList_; int numInserted_; int size_; protected: CoinSearchTreeBase() : candidateList_() , numInserted_(0) , size_(0) { } virtual void realpop() = 0; virtual void realpush(CoinTreeSiblings *s) = 0; virtual void fixTop() = 0; public: virtual ~CoinSearchTreeBase() {} virtual const char *compName() const = 0; inline const std::vector< CoinTreeSiblings * > &getCandidates() const { return candidateList_; } inline bool empty() const { return candidateList_.empty(); } inline int size() const { return size_; } inline int numInserted() const { return numInserted_; } inline CoinTreeNode *top() const { if (size_ == 0 || candidateList_.size() == 0) return NULL; #ifdef DEBUG_PRINT char output[44]; output[43] = 0; candidateList_.front()->currentNode()->getPreferred().print(output); printf("top's pref: %s\n", output); #endif return candidateList_.front()->currentNode(); } /** pop will advance the \c next pointer among the siblings on the top and then moves the top to its correct position. #realpop is the method that actually removes the element from the heap */ inline void pop() { CoinTreeSiblings *s = candidateList_.front(); if (!s->advanceNode()) { realpop(); delete s; } else { fixTop(); } --size_; } inline void push(int numNodes, CoinTreeNode **nodes, const bool incrInserted = true) { CoinTreeSiblings *s = new CoinTreeSiblings(numNodes, nodes); realpush(s); if (incrInserted) { numInserted_ += numNodes; } size_ += numNodes; } inline void push(const CoinTreeSiblings &sib, const bool incrInserted = true) { CoinTreeSiblings *s = new CoinTreeSiblings(sib); #ifdef DEBUG_PRINT s->printPref(); #endif realpush(s); if (incrInserted) { numInserted_ += sib.toProcess(); } size_ += sib.toProcess(); } }; //############################################################################# // #define CAN_TRUST_STL_HEAP #ifdef CAN_TRUST_STL_HEAP template < class Comp > class CoinSearchTree : public CoinSearchTreeBase { private: Comp comp_; protected: virtual void realpop() { candidateList_.pop_back(); } virtual void fixTop() { CoinTreeSiblings *s = top(); realpop(); push(s, false); } virtual void realpush(CoinTreeSiblings *s) { nodes_.push_back(s); std::push_heap(candidateList_.begin(), candidateList_.end(), comp_); } public: CoinSearchTree() : CoinSearchTreeBase() , comp_() { } CoinSearchTree(const CoinSearchTreeBase &t) : CoinSearchTreeBase() , comp_() { candidateList_ = t.getCandidates(); std::make_heap(candidateList_.begin(), candidateList_.end(), comp_); numInserted_ = t.numInserted_; size_ = t.size_; } ~CoinSearchTree() {} const char *compName() const { return Comp::name(); } }; #else template < class Comp > class CoinSearchTree : public CoinSearchTreeBase { private: Comp comp_; protected: virtual void realpop() { candidateList_[0] = candidateList_.back(); candidateList_.pop_back(); fixTop(); } /** After changing data in the top node, fix the heap */ virtual void fixTop() { const size_t size = candidateList_.size(); if (size > 1) { CoinTreeSiblings **candidates = &candidateList_[0]; CoinTreeSiblings *s = candidates[0]; --candidates; size_t pos = 1; size_t ch; for (ch = 2; ch < size; pos = ch, ch *= 2) { if (comp_(candidates[ch + 1], candidates[ch])) ++ch; if (comp_(s, candidates[ch])) break; candidates[pos] = candidates[ch]; } if (ch == size) { if (comp_(candidates[ch], s)) { candidates[pos] = candidates[ch]; pos = ch; } } candidates[pos] = s; } } virtual void realpush(CoinTreeSiblings *s) { candidateList_.push_back(s); CoinTreeSiblings **candidates = &candidateList_[0]; --candidates; size_t pos = candidateList_.size(); size_t ch; for (ch = pos / 2; ch != 0; pos = ch, ch /= 2) { if (comp_(candidates[ch], s)) break; candidates[pos] = candidates[ch]; } candidates[pos] = s; } public: CoinSearchTree() : CoinSearchTreeBase() , comp_() { } CoinSearchTree(const CoinSearchTreeBase &t) : CoinSearchTreeBase() , comp_() { candidateList_ = t.getCandidates(); std::sort(candidateList_.begin(), candidateList_.end(), comp_); numInserted_ = t.numInserted(); size_ = t.size(); } virtual ~CoinSearchTree() {} const char *compName() const { return Comp::name(); } }; #endif //############################################################################# enum CoinNodeAction { CoinAddNodeToCandidates, CoinTestNodeForDiving, CoinDiveIntoNode }; class CoinSearchTreeManager { private: CoinSearchTreeManager(const CoinSearchTreeManager &); CoinSearchTreeManager &operator=(const CoinSearchTreeManager &); private: CoinSearchTreeBase *candidates_; int numSolution; /** Whether there is an upper bound or not. The upper bound may have come as input, not necessarily from a solution */ bool hasUB_; /** variable used to test whether we need to reevaluate search strategy */ bool recentlyReevaluatedSearchStrategy_; public: CoinSearchTreeManager() : candidates_(NULL) , numSolution(0) , recentlyReevaluatedSearchStrategy_(true) { } virtual ~CoinSearchTreeManager() { delete candidates_; } inline void setTree(CoinSearchTreeBase *t) { delete candidates_; candidates_ = t; } inline CoinSearchTreeBase *getTree() const { return candidates_; } inline bool empty() const { return candidates_->empty(); } inline size_t size() const { return candidates_->size(); } inline size_t numInserted() const { return candidates_->numInserted(); } inline CoinTreeNode *top() const { return candidates_->top(); } inline void pop() { candidates_->pop(); } inline void push(CoinTreeNode *node, const bool incrInserted = true) { candidates_->push(1, &node, incrInserted); } inline void push(const CoinTreeSiblings &s, const bool incrInserted = true) { candidates_->push(s, incrInserted); } inline void push(const int n, CoinTreeNode **nodes, const bool incrInserted = true) { candidates_->push(n, nodes, incrInserted); } inline CoinTreeNode *bestQualityCandidate() const { return candidates_->top(); } inline double bestQuality() const { return candidates_->top()->getQuality(); } void newSolution(double solValue); void reevaluateSearchStrategy(); }; //############################################################################# #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinDenseFactorization.cpp0000644000175200017520000007312413414454441020676 0ustar coincoin/* $Id: CoinDenseFactorization.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2008, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinUtilsConfig.h" #include "CoinPragma.hpp" #include #include #include "CoinDenseFactorization.hpp" #include "CoinIndexedVector.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedMatrix.hpp" #include "CoinFinite.hpp" #if COIN_BIG_DOUBLE == 1 #undef COIN_FACTORIZATION_DENSE_CODE #endif #ifdef COIN_FACTORIZATION_DENSE_CODE // using simple lapack interface extern "C" { /** LAPACK Fortran subroutine DGETRF. */ void F77_FUNC(dgetrf, DGETRF)(ipfint *m, ipfint *n, double *A, ipfint *ldA, ipfint *ipiv, ipfint *info); /** LAPACK Fortran subroutine DGETRS. */ void F77_FUNC(dgetrs, DGETRS)(char *trans, cipfint *n, cipfint *nrhs, const double *A, cipfint *ldA, cipfint *ipiv, double *B, cipfint *ldB, ipfint *info, int trans_len); } #endif //:class CoinDenseFactorization. Deals with Factorization and Updates // CoinDenseFactorization. Constructor CoinDenseFactorization::CoinDenseFactorization() : CoinOtherFactorization() { gutsOfInitialize(); } /// Copy constructor CoinDenseFactorization::CoinDenseFactorization(const CoinDenseFactorization &other) : CoinOtherFactorization(other) { gutsOfInitialize(); gutsOfCopy(other); } // Clone CoinOtherFactorization * CoinDenseFactorization::clone() const { return new CoinDenseFactorization(*this); } /// The real work of constructors etc void CoinDenseFactorization::gutsOfDestructor() { delete[] elements_; delete[] pivotRow_; delete[] workArea_; elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; numberRows_ = 0; numberColumns_ = 0; numberGoodU_ = 0; status_ = -1; maximumRows_ = 0; maximumSpace_ = 0; solveMode_ = 0; } void CoinDenseFactorization::gutsOfInitialize() { pivotTolerance_ = 1.0e-1; zeroTolerance_ = 1.0e-13; #ifndef COIN_FAST_CODE slackValue_ = -1.0; #endif maximumPivots_ = 200; relaxCheck_ = 1.0; numberRows_ = 0; numberColumns_ = 0; numberGoodU_ = 0; status_ = -1; numberPivots_ = 0; maximumRows_ = 0; maximumSpace_ = 0; elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; solveMode_ = 0; } // ~CoinDenseFactorization. Destructor CoinDenseFactorization::~CoinDenseFactorization() { gutsOfDestructor(); } // = CoinDenseFactorization &CoinDenseFactorization::operator=(const CoinDenseFactorization &other) { if (this != &other) { gutsOfDestructor(); gutsOfInitialize(); gutsOfCopy(other); } return *this; } #ifdef COIN_FACTORIZATION_DENSE_CODE #define WORK_MULT 2 #else #define WORK_MULT 2 #endif void CoinDenseFactorization::gutsOfCopy(const CoinDenseFactorization &other) { pivotTolerance_ = other.pivotTolerance_; zeroTolerance_ = other.zeroTolerance_; #ifndef COIN_FAST_CODE slackValue_ = other.slackValue_; #endif relaxCheck_ = other.relaxCheck_; numberRows_ = other.numberRows_; numberColumns_ = other.numberColumns_; maximumRows_ = other.maximumRows_; maximumSpace_ = other.maximumSpace_; solveMode_ = other.solveMode_; numberGoodU_ = other.numberGoodU_; maximumPivots_ = other.maximumPivots_; numberPivots_ = other.numberPivots_; factorElements_ = other.factorElements_; status_ = other.status_; if (other.pivotRow_) { pivotRow_ = new int[2 * maximumRows_ + maximumPivots_]; CoinMemcpyN(other.pivotRow_, (2 * maximumRows_ + numberPivots_), pivotRow_); elements_ = new CoinFactorizationDouble[maximumSpace_]; CoinMemcpyN(other.elements_, (maximumRows_ + numberPivots_) * maximumRows_, elements_); workArea_ = new CoinFactorizationDouble[maximumRows_ * WORK_MULT]; CoinZeroN(workArea_, maximumRows_ * WORK_MULT); } else { elements_ = NULL; pivotRow_ = NULL; workArea_ = NULL; } } // getAreas. Gets space for a factorization //called by constructors void CoinDenseFactorization::getAreas(int numberOfRows, int numberOfColumns, int, int) { numberRows_ = numberOfRows; numberColumns_ = numberOfColumns; int size = numberRows_ * (numberRows_ + CoinMax(maximumPivots_, (numberRows_ + 1) >> 1)); if (size > maximumSpace_) { delete[] elements_; elements_ = new CoinFactorizationDouble[size]; maximumSpace_ = size; } if (numberRows_ > maximumRows_) { maximumRows_ = numberRows_; delete[] pivotRow_; delete[] workArea_; pivotRow_ = new int[2 * maximumRows_ + maximumPivots_]; workArea_ = new CoinFactorizationDouble[maximumRows_ * WORK_MULT]; } } // preProcess. void CoinDenseFactorization::preProcess() { // could do better than this but this only a demo int put = numberRows_ * numberRows_; int *indexRow = reinterpret_cast< int * >(elements_ + put); int *starts = reinterpret_cast< int * >(pivotRow_); put = numberRows_ * numberColumns_; for (int i = numberColumns_ - 1; i >= 0; i--) { put -= numberRows_; memset(workArea_, 0, numberRows_ * sizeof(CoinFactorizationDouble)); assert(starts[i] <= put); for (int j = starts[i]; j < starts[i + 1]; j++) { int iRow = indexRow[j]; workArea_[iRow] = elements_[j]; } // move to correct position CoinMemcpyN(workArea_, numberRows_, elements_ + put); } } //Does factorization int CoinDenseFactorization::factor() { numberPivots_ = 0; status_ = 0; #ifdef COIN_FACTORIZATION_DENSE_CODE if (numberRows_ == numberColumns_ && (solveMode_ % 10) != 0) { int info; F77_FUNC(dgetrf, DGETRF) (&numberRows_, &numberRows_, elements_, &numberRows_, pivotRow_, &info); // need to check size of pivots if (!info) { // OK solveMode_ = 1 + 10 * (solveMode_ / 10); numberGoodU_ = numberRows_; CoinZeroN(workArea_, 2 * numberRows_); #if 0 //ndef NDEBUG const CoinFactorizationDouble * column = elements_; double smallest=COIN_DBL_MAX; for (int i=0;i largest) { largest = value; iRow = j; } } if (iRow >= 0) { if (iRow != i) { // swap assert(iRow > i); CoinFactorizationDouble *elementsA = elements_; for (int k = 0; k <= i; k++) { // swap CoinFactorizationDouble value = elementsA[i]; elementsA[i] = elementsA[iRow]; elementsA[iRow] = value; elementsA += numberRows_; } int iPivot = pivotRow_[i + numberRows_]; pivotRow_[i + numberRows_] = pivotRow_[iRow + numberRows_]; pivotRow_[iRow + numberRows_] = iPivot; } CoinFactorizationDouble pivotValue = 1.0 / elements[i]; elements[i] = pivotValue; for (int j = i + 1; j < numberRows_; j++) { elements[j] *= pivotValue; } // Update rest CoinFactorizationDouble *elementsA = elements; for (int k = i + 1; k < numberColumns_; k++) { elementsA += numberRows_; // swap if (iRow != i) { CoinFactorizationDouble value = elementsA[i]; elementsA[i] = elementsA[iRow]; elementsA[iRow] = value; } CoinFactorizationDouble value = elementsA[i]; for (int j = i + 1; j < numberRows_; j++) { elementsA[j] -= value * elements[j]; } } } else { status_ = -1; break; } numberGoodU_++; elements += numberRows_; } for (int j = 0; j < numberRows_; j++) { int k = pivotRow_[j + numberRows_]; pivotRow_[k] = j; } return status_; } // Makes a non-singular basis by replacing variables void CoinDenseFactorization::makeNonSingular(int *sequence, int numberColumns) { // Replace bad ones by correct slack int *workArea = reinterpret_cast< int * >(workArea_); int i; for (i = 0; i < numberRows_; i++) workArea[i] = -1; for (i = 0; i < numberGoodU_; i++) { int iOriginal = pivotRow_[i + numberRows_]; workArea[iOriginal] = i; //workArea[i]=iOriginal; } int lastRow = -1; for (i = 0; i < numberRows_; i++) { if (workArea[i] == -1) { lastRow = i; break; } } assert(lastRow >= 0); for (i = numberGoodU_; i < numberRows_; i++) { assert(lastRow < numberRows_); // Put slack in basis sequence[i] = lastRow + numberColumns; lastRow++; for (; lastRow < numberRows_; lastRow++) { if (workArea[lastRow] == -1) break; } } } #define DENSE_PERMUTE // Does post processing on valid factorization - putting variables on correct rows void CoinDenseFactorization::postProcess(const int *sequence, int *pivotVariable) { #ifdef COIN_FACTORIZATION_DENSE_CODE if ((solveMode_ % 10) == 0) { #endif for (int i = 0; i < numberRows_; i++) { int k = sequence[i]; #ifdef DENSE_PERMUTE pivotVariable[pivotRow_[i + numberRows_]] = k; #else //pivotVariable[pivotRow_[i]]=k; //pivotVariable[pivotRow_[i]]=k; pivotVariable[i] = k; k = pivotRow_[i]; pivotRow_[i] = pivotRow_[i + numberRows_]; pivotRow_[i + numberRows_] = k; #endif } #ifdef COIN_FACTORIZATION_DENSE_CODE } else { // lapack for (int i = 0; i < numberRows_; i++) { int k = sequence[i]; pivotVariable[i] = k; } } #endif } /* Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModifying is true will do all accuracy checks before modifying factorization. Whether to set this depends on speed considerations. You could just do this on first iteration after factorization and thereafter re-factorize partial update already in U */ int CoinDenseFactorization::replaceColumn(CoinIndexedVector *regionSparse, int pivotRow, double pivotCheck, bool /*checkBeforeModifying*/, double /*acceptablePivot*/) { if (numberPivots_ == maximumPivots_) return 3; CoinFactorizationDouble *elements = elements_ + numberRows_ * (numberColumns_ + numberPivots_); double *region = regionSparse->denseVector(); int *regionIndex = regionSparse->getIndices(); int numberNonZero = regionSparse->getNumElements(); int i; memset(elements, 0, numberRows_ * sizeof(CoinFactorizationDouble)); CoinFactorizationDouble pivotValue = pivotCheck; if (fabs(pivotValue) < zeroTolerance_) return 2; pivotValue = 1.0 / pivotValue; #ifdef COIN_FACTORIZATION_DENSE_CODE if ((solveMode_ % 10) == 0) { #endif if (regionSparse->packedMode()) { for (i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; double value = region[i]; #ifdef DENSE_PERMUTE iRow = pivotRow_[iRow]; // permute #endif elements[iRow] = value; ; } } else { // not packed! - from user pivot? for (i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; double value = region[iRow]; #ifdef DENSE_PERMUTE iRow = pivotRow_[iRow]; // permute #endif elements[iRow] = value; ; } } int realPivotRow = pivotRow_[pivotRow]; elements[realPivotRow] = pivotValue; pivotRow_[2 * numberRows_ + numberPivots_] = realPivotRow; #ifdef COIN_FACTORIZATION_DENSE_CODE } else { // lapack if (regionSparse->packedMode()) { for (i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; double value = region[i]; elements[iRow] = value; ; } } else { // not packed! - from user pivot? for (i = 0; i < numberNonZero; i++) { int iRow = regionIndex[i]; double value = region[iRow]; elements[iRow] = value; ; } } elements[pivotRow] = pivotValue; pivotRow_[2 * numberRows_ + numberPivots_] = pivotRow; } #endif numberPivots_++; return 0; } /* This version has same effect as above with FTUpdate==false so number returned is always >=0 */ int CoinDenseFactorization::updateColumn(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute) const { assert(numberRows_ == numberColumns_); double *region2 = regionSparse2->denseVector(); int *regionIndex = regionSparse2->getIndices(); int numberNonZero = regionSparse2->getNumElements(); double *region = regionSparse->denseVector(); #ifdef COIN_FACTORIZATION_DENSE_CODE if ((solveMode_ % 10) == 0) { #endif if (!regionSparse2->packedMode()) { if (!noPermute) { for (int j = 0; j < numberRows_; j++) { int iRow = pivotRow_[j + numberRows_]; region[j] = region2[iRow]; region2[iRow] = 0.0; } } else { // can't due to check mode assert (regionSparse==regionSparse2); region = regionSparse2->denseVector(); } } else { // packed mode assert(!noPermute); for (int j = 0; j < numberNonZero; j++) { int jRow = regionIndex[j]; int iRow = pivotRow_[jRow]; region[iRow] = region2[j]; region2[j] = 0.0; } } #ifdef COIN_FACTORIZATION_DENSE_CODE } else { // lapack if (!regionSparse2->packedMode()) { if (!noPermute) { for (int j = 0; j < numberRows_; j++) { region[j] = region2[j]; region2[j] = 0.0; } } else { // can't due to check mode assert (regionSparse==regionSparse2); region = regionSparse2->denseVector(); } } else { // packed mode assert(!noPermute); for (int j = 0; j < numberNonZero; j++) { int jRow = regionIndex[j]; region[jRow] = region2[j]; region2[j] = 0.0; } } } #endif int i; CoinFactorizationDouble *elements = elements_; #ifdef COIN_FACTORIZATION_DENSE_CODE if ((solveMode_ % 10) == 0) { #endif // base factorization L for (i = 0; i < numberColumns_; i++) { double value = region[i]; for (int j = i + 1; j < numberRows_; j++) { region[j] -= value * elements[j]; } elements += numberRows_; } elements = elements_ + numberRows_ * numberRows_; // base factorization U for (i = numberColumns_ - 1; i >= 0; i--) { elements -= numberRows_; CoinFactorizationDouble value = region[i] * elements[i]; region[i] = value; for (int j = 0; j < i; j++) { region[j] -= value * elements[j]; } } #ifdef COIN_FACTORIZATION_DENSE_CODE } else { char trans = 'N'; int ione = 1; int info; F77_FUNC(dgetrs, DGETRS) (&trans, &numberRows_, &ione, elements_, &numberRows_, pivotRow_, region, &numberRows_, &info, 1); } #endif // now updates elements = elements_ + numberRows_ * numberRows_; for (i = 0; i < numberPivots_; i++) { int iPivot = pivotRow_[i + 2 * numberRows_]; CoinFactorizationDouble value = region[iPivot] * elements[iPivot]; for (int j = 0; j < numberRows_; j++) { region[j] -= value * elements[j]; } region[iPivot] = value; elements += numberRows_; } // permute back and get nonzeros numberNonZero = 0; #ifdef COIN_FACTORIZATION_DENSE_CODE if ((solveMode_ % 10) == 0) { #endif if (!noPermute) { if (!regionSparse2->packedMode()) { for (int j = 0; j < numberRows_; j++) { #ifdef DENSE_PERMUTE int iRow = pivotRow_[j]; #else int iRow = j; #endif double value = region[iRow]; region[iRow] = 0.0; if (fabs(value) > zeroTolerance_) { region2[j] = value; regionIndex[numberNonZero++] = j; } } } else { // packed mode for (int j = 0; j < numberRows_; j++) { #ifdef DENSE_PERMUTE int iRow = pivotRow_[j]; #else int iRow = j; #endif double value = region[iRow]; region[iRow] = 0.0; if (fabs(value) > zeroTolerance_) { region2[numberNonZero] = value; regionIndex[numberNonZero++] = j; } } } } else { for (int j = 0; j < numberRows_; j++) { double value = region[j]; if (fabs(value) > zeroTolerance_) { regionIndex[numberNonZero++] = j; } else { region[j] = 0.0; } } } #ifdef COIN_FACTORIZATION_DENSE_CODE } else { // lapack if (!noPermute) { if (!regionSparse2->packedMode()) { for (int j = 0; j < numberRows_; j++) { double value = region[j]; region[j] = 0.0; if (fabs(value) > zeroTolerance_) { region2[j] = value; regionIndex[numberNonZero++] = j; } } } else { // packed mode for (int j = 0; j < numberRows_; j++) { double value = region[j]; region[j] = 0.0; if (fabs(value) > zeroTolerance_) { region2[numberNonZero] = value; regionIndex[numberNonZero++] = j; } } } } else { for (int j = 0; j < numberRows_; j++) { double value = region[j]; if (fabs(value) > zeroTolerance_) { regionIndex[numberNonZero++] = j; } else { region[j] = 0.0; } } } } #endif regionSparse2->setNumElements(numberNonZero); return 0; } int CoinDenseFactorization::updateTwoColumnsFT(CoinIndexedVector *regionSparse1, CoinIndexedVector *regionSparse2, CoinIndexedVector *regionSparse3, bool /*noPermute*/) { #ifdef COIN_FACTORIZATION_DENSE_CODE #if 0 CoinIndexedVector s2(*regionSparse2); CoinIndexedVector s3(*regionSparse3); updateColumn(regionSparse1,&s2); updateColumn(regionSparse1,&s3); #endif if ((solveMode_ % 10) == 0) { #endif updateColumn(regionSparse1, regionSparse2); updateColumn(regionSparse1, regionSparse3); #ifdef COIN_FACTORIZATION_DENSE_CODE } else { // lapack assert(numberRows_ == numberColumns_); double *region2 = regionSparse2->denseVector(); int *regionIndex2 = regionSparse2->getIndices(); int numberNonZero2 = regionSparse2->getNumElements(); CoinFactorizationDouble *regionW2 = workArea_; if (!regionSparse2->packedMode()) { for (int j = 0; j < numberRows_; j++) { regionW2[j] = region2[j]; region2[j] = 0.0; } } else { // packed mode for (int j = 0; j < numberNonZero2; j++) { int jRow = regionIndex2[j]; regionW2[jRow] = region2[j]; region2[j] = 0.0; } } double *region3 = regionSparse3->denseVector(); int *regionIndex3 = regionSparse3->getIndices(); int numberNonZero3 = regionSparse3->getNumElements(); CoinFactorizationDouble *regionW3 = workArea_ + numberRows_; if (!regionSparse3->packedMode()) { for (int j = 0; j < numberRows_; j++) { regionW3[j] = region3[j]; region3[j] = 0.0; } } else { // packed mode for (int j = 0; j < numberNonZero3; j++) { int jRow = regionIndex3[j]; regionW3[jRow] = region3[j]; region3[j] = 0.0; } } int i; CoinFactorizationDouble *elements = elements_; char trans = 'N'; int itwo = 2; int info; F77_FUNC(dgetrs, DGETRS) (&trans, &numberRows_, &itwo, elements_, &numberRows_, pivotRow_, workArea_, &numberRows_, &info, 1); // now updates elements = elements_ + numberRows_ * numberRows_; for (i = 0; i < numberPivots_; i++) { int iPivot = pivotRow_[i + 2 * numberRows_]; CoinFactorizationDouble value2 = regionW2[iPivot] * elements[iPivot]; CoinFactorizationDouble value3 = regionW3[iPivot] * elements[iPivot]; for (int j = 0; j < numberRows_; j++) { regionW2[j] -= value2 * elements[j]; regionW3[j] -= value3 * elements[j]; } regionW2[iPivot] = value2; regionW3[iPivot] = value3; elements += numberRows_; } // permute back and get nonzeros numberNonZero2 = 0; if (!regionSparse2->packedMode()) { for (int j = 0; j < numberRows_; j++) { double value = regionW2[j]; regionW2[j] = 0.0; if (fabs(value) > zeroTolerance_) { region2[j] = value; regionIndex2[numberNonZero2++] = j; } } } else { // packed mode for (int j = 0; j < numberRows_; j++) { double value = regionW2[j]; regionW2[j] = 0.0; if (fabs(value) > zeroTolerance_) { region2[numberNonZero2] = value; regionIndex2[numberNonZero2++] = j; } } } regionSparse2->setNumElements(numberNonZero2); numberNonZero3 = 0; if (!regionSparse3->packedMode()) { for (int j = 0; j < numberRows_; j++) { double value = regionW3[j]; regionW3[j] = 0.0; if (fabs(value) > zeroTolerance_) { region3[j] = value; regionIndex3[numberNonZero3++] = j; } } } else { // packed mode for (int j = 0; j < numberRows_; j++) { double value = regionW3[j]; regionW3[j] = 0.0; if (fabs(value) > zeroTolerance_) { region3[numberNonZero3] = value; regionIndex3[numberNonZero3++] = j; } } } regionSparse3->setNumElements(numberNonZero3); #if 0 printf("Good2==\n"); s2.print(); printf("Bad2==\n"); regionSparse2->print(); printf("======\n"); printf("Good3==\n"); s3.print(); printf("Bad3==\n"); regionSparse3->print(); printf("======\n"); #endif } #endif return 0; } /* Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - if regionSparse2 packed on input - will be packed on output */ int CoinDenseFactorization::updateColumnTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) const { assert(numberRows_ == numberColumns_); double *region2 = regionSparse2->denseVector(); int *regionIndex = regionSparse2->getIndices(); int numberNonZero = regionSparse2->getNumElements(); double *region = regionSparse->denseVector(); #ifdef COIN_FACTORIZATION_DENSE_CODE if ((solveMode_ % 10) == 0) { #endif if (!regionSparse2->packedMode()) { for (int j = 0; j < numberRows_; j++) { #ifdef DENSE_PERMUTE int iRow = pivotRow_[j]; #else int iRow = j; #endif region[iRow] = region2[j]; region2[j] = 0.0; } } else { for (int j = 0; j < numberNonZero; j++) { int jRow = regionIndex[j]; #ifdef DENSE_PERMUTE int iRow = pivotRow_[jRow]; #else int iRow = jRow; #endif region[iRow] = region2[j]; region2[j] = 0.0; } } #ifdef COIN_FACTORIZATION_DENSE_CODE } else { // lapack if (!regionSparse2->packedMode()) { for (int j = 0; j < numberRows_; j++) { region[j] = region2[j]; region2[j] = 0.0; } } else { for (int j = 0; j < numberNonZero; j++) { int jRow = regionIndex[j]; region[jRow] = region2[j]; region2[j] = 0.0; } } } #endif int i; CoinFactorizationDouble *elements = elements_ + numberRows_ * (numberRows_ + numberPivots_); // updates for (i = numberPivots_ - 1; i >= 0; i--) { elements -= numberRows_; int iPivot = pivotRow_[i + 2 * numberRows_]; CoinFactorizationDouble value = region[iPivot]; //*elements[iPivot]; for (int j = 0; j < iPivot; j++) { value -= region[j] * elements[j]; } for (int j = iPivot + 1; j < numberRows_; j++) { value -= region[j] * elements[j]; } region[iPivot] = value * elements[iPivot]; } #ifdef COIN_FACTORIZATION_DENSE_CODE if ((solveMode_ % 10) == 0) { #endif // base factorization U elements = elements_; for (i = 0; i < numberColumns_; i++) { //CoinFactorizationDouble value = region[i]*elements[i]; CoinFactorizationDouble value = region[i]; for (int j = 0; j < i; j++) { value -= region[j] * elements[j]; } //region[i] = value; region[i] = value * elements[i]; elements += numberRows_; } // base factorization L elements = elements_ + numberRows_ * numberRows_; for (i = numberColumns_ - 1; i >= 0; i--) { elements -= numberRows_; CoinFactorizationDouble value = region[i]; for (int j = i + 1; j < numberRows_; j++) { value -= region[j] * elements[j]; } region[i] = value; } #ifdef COIN_FACTORIZATION_DENSE_CODE } else { char trans = 'T'; int ione = 1; int info; F77_FUNC(dgetrs, DGETRS) (&trans, &numberRows_, &ione, elements_, &numberRows_, pivotRow_, region, &numberRows_, &info, 1); } #endif // permute back and get nonzeros numberNonZero = 0; #ifdef COIN_FACTORIZATION_DENSE_CODE if ((solveMode_ % 10) == 0) { #endif if (!regionSparse2->packedMode()) { for (int j = 0; j < numberRows_; j++) { int iRow = pivotRow_[j + numberRows_]; double value = region[j]; region[j] = 0.0; if (fabs(value) > zeroTolerance_) { region2[iRow] = value; regionIndex[numberNonZero++] = iRow; } } } else { for (int j = 0; j < numberRows_; j++) { int iRow = pivotRow_[j + numberRows_]; double value = region[j]; region[j] = 0.0; if (fabs(value) > zeroTolerance_) { region2[numberNonZero] = value; regionIndex[numberNonZero++] = iRow; } } } #ifdef COIN_FACTORIZATION_DENSE_CODE } else { // lapack if (!regionSparse2->packedMode()) { for (int j = 0; j < numberRows_; j++) { double value = region[j]; region[j] = 0.0; if (fabs(value) > zeroTolerance_) { region2[j] = value; regionIndex[numberNonZero++] = j; } } } else { for (int j = 0; j < numberRows_; j++) { double value = region[j]; region[j] = 0.0; if (fabs(value) > zeroTolerance_) { region2[numberNonZero] = value; regionIndex[numberNonZero++] = j; } } } } #endif regionSparse2->setNumElements(numberNonZero); return 0; } // Default constructor CoinOtherFactorization::CoinOtherFactorization() : pivotTolerance_(1.0e-1) , zeroTolerance_(1.0e-13) , #ifndef COIN_FAST_CODE slackValue_(-1.0) , #endif relaxCheck_(1.0) , factorElements_(0) , numberRows_(0) , numberColumns_(0) , numberGoodU_(0) , maximumPivots_(200) , numberPivots_(0) , status_(-1) , solveMode_(0) { } // Copy constructor CoinOtherFactorization::CoinOtherFactorization(const CoinOtherFactorization &other) : pivotTolerance_(other.pivotTolerance_) , zeroTolerance_(other.zeroTolerance_) , #ifndef COIN_FAST_CODE slackValue_(other.slackValue_) , #endif relaxCheck_(other.relaxCheck_) , factorElements_(other.factorElements_) , numberRows_(other.numberRows_) , numberColumns_(other.numberColumns_) , numberGoodU_(other.numberGoodU_) , maximumPivots_(other.maximumPivots_) , numberPivots_(other.numberPivots_) , status_(other.status_) , solveMode_(other.solveMode_) { } // Destructor CoinOtherFactorization::~CoinOtherFactorization() { } // = copy CoinOtherFactorization &CoinOtherFactorization::operator=(const CoinOtherFactorization &other) { if (this != &other) { pivotTolerance_ = other.pivotTolerance_; zeroTolerance_ = other.zeroTolerance_; #ifndef COIN_FAST_CODE slackValue_ = other.slackValue_; #endif relaxCheck_ = other.relaxCheck_; factorElements_ = other.factorElements_; numberRows_ = other.numberRows_; numberColumns_ = other.numberColumns_; numberGoodU_ = other.numberGoodU_; maximumPivots_ = other.maximumPivots_; numberPivots_ = other.numberPivots_; status_ = other.status_; solveMode_ = other.solveMode_; } return *this; } void CoinOtherFactorization::pivotTolerance(double value) { if (value > 0.0 && value <= 1.0) { pivotTolerance_ = value; } } void CoinOtherFactorization::zeroTolerance(double value) { if (value > 0.0 && value < 1.0) { zeroTolerance_ = value; } } #ifndef COIN_FAST_CODE void CoinOtherFactorization::slackValue(double value) { if (value >= 0.0) { slackValue_ = 1.0; } else { slackValue_ = -1.0; } } #endif void CoinOtherFactorization::maximumPivots(int value) { if (value > maximumPivots_) { delete[] pivotRow_; pivotRow_ = new int[2 * maximumRows_ + value]; } maximumPivots_ = value; } // Number of entries in each row int *CoinOtherFactorization::numberInRow() const { return reinterpret_cast< int * >(workArea_); } // Number of entries in each column int *CoinOtherFactorization::numberInColumn() const { return (reinterpret_cast< int * >(workArea_)) + numberRows_; } // Returns array to put basis starts in int *CoinOtherFactorization::starts() const { return reinterpret_cast< int * >(pivotRow_); } // Returns array to put basis elements in CoinFactorizationDouble * CoinOtherFactorization::elements() const { return elements_; } // Returns pivot row int *CoinOtherFactorization::pivotRow() const { return pivotRow_; } // Returns work area CoinFactorizationDouble * CoinOtherFactorization::workArea() const { return workArea_; } // Returns int work area int *CoinOtherFactorization::intWorkArea() const { return reinterpret_cast< int * >(workArea_); } // Returns permute back int *CoinOtherFactorization::permuteBack() const { return pivotRow_ + numberRows_; } // Returns true if wants tableauColumn in replaceColumn bool CoinOtherFactorization::wantsTableauColumn() const { return true; } /* Useful information for factorization 0 - iteration number whereFrom is 0 for factorize and 1 for replaceColumn */ void CoinOtherFactorization::setUsefulInformation(const int *, int) { } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinWarmStartPrimalDual.cpp0000644000175200017520000000452513414454441021001 0ustar coincoin/* $Id: CoinWarmStartPrimalDual.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2003, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include #include "CoinWarmStartPrimalDual.hpp" #include //############################################################################# /* Generate a `diff' that can convert the warm start passed as a parameter to the warm start specified by this. The capabilities are limited: the basis passed as a parameter can be no larger than the basis pointed to by this. */ CoinWarmStartDiff * CoinWarmStartPrimalDual::generateDiff(const CoinWarmStart *const oldCWS) const { /* Make sure the parameter is CoinWarmStartPrimalDual or derived class. */ const CoinWarmStartPrimalDual *old = dynamic_cast< const CoinWarmStartPrimalDual * >(oldCWS); if (!old) { throw CoinError("Old warm start not derived from CoinWarmStartPrimalDual.", "generateDiff", "CoinWarmStartPrimalDual"); } CoinWarmStartPrimalDualDiff *diff = new CoinWarmStartPrimalDualDiff; CoinWarmStartDiff *vecdiff; vecdiff = primal_.generateDiff(&old->primal_); diff->primalDiff_.swap(*dynamic_cast< CoinWarmStartVectorDiff< double > * >(vecdiff)); delete vecdiff; vecdiff = dual_.generateDiff(&old->dual_); diff->dualDiff_.swap(*dynamic_cast< CoinWarmStartVectorDiff< double > * >(vecdiff)); delete vecdiff; return diff; } //############################################################################# /* Apply diff to this warm start. Update this warm start by applying diff. It's assumed that the allocated capacity of the warm start is sufficiently large. */ void CoinWarmStartPrimalDual::applyDiff(const CoinWarmStartDiff *const cwsdDiff) { /* Make sure we have a CoinWarmStartPrimalDualDiff */ const CoinWarmStartPrimalDualDiff *diff = dynamic_cast< const CoinWarmStartPrimalDualDiff * >(cwsdDiff); if (!diff) { throw CoinError("Diff not derived from CoinWarmStartPrimalDualDiff.", "applyDiff", "CoinWarmStartPrimalDual"); } primal_.applyDiff(&diff->primalDiff_); dual_.applyDiff(&diff->dualDiff_); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveUseless.cpp0000644000175200017520000006356413414454441020255 0ustar coincoin/* $Id: CoinPresolveUseless.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveUseless.hpp" #include "CoinPresolveFixed.hpp" #include "CoinHelperFunctions.hpp" #include "CoinFinite.hpp" #if PRESOLVE_DEBUG || PRESOLVE_CONSISTENCY #include "CoinPresolvePsdebug.hpp" #endif /* This routine implements a greedy algorithm to find a set of necessary constraints which imply tighter bounds for some subset of the variables. It then uses the tighter column bounds to identify constraints that are useless as long as the necessary set is present. The algorithm is as follows: * Initially mark all constraints as in play. * For each in play constraint, calculate row activity bounds L(i) and U(i). Use these bounds in an attempt to tighten column bounds for all variables entangled with the row. * If some column bound is tightened, the row is necessary. Mark it as such, taking it out of play. Eventually the rows are divided into two sets, necessary and unnecessary. Go through the unnecessary rows and check L(i) and U(i) using the tightened column bounds. Remove any useless rows where row activity cannot exceed the row bounds. For efficiency, rows are marked as processed when L(i) and U(i) are first calculated and these values are not recalculated unless a column bound changes. */ const CoinPresolveAction *testRedundant(CoinPresolveMatrix *prob, const CoinPresolveAction *next) { #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering testRedundant, considering " << prob->nrows_ << " rows." << std::endl; #endif presolve_consistent(prob); presolve_links_ok(prob); presolve_check_sol(prob); presolve_check_nbasic(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 const int startEmptyRows = prob->countEmptyRows(); #if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0; if (prob->tuning_) startTime = CoinCpuTime(); #endif #endif const int m = prob->nrows_; const int n = prob->ncols_; /* Unpack the row- and column-major representations. */ const CoinBigIndex *rowStarts = prob->mrstrt_; const int *rowLengths = prob->hinrow_; const double *rowCoeffs = prob->rowels_; const int *colIndices = prob->hcol_; const CoinBigIndex *colStarts = prob->mcstrt_; const int *rowIndices = prob->hrow_; const int *colLengths = prob->hincol_; /* Rim vectors. We need copies of the column bounds to modify as we do bound propagation. */ const double *rlo = prob->rlo_; const double *rup = prob->rup_; double *columnLower = new double[n]; double *columnUpper = new double[n]; CoinMemcpyN(prob->clo_, n, columnLower); CoinMemcpyN(prob->cup_, n, columnUpper); /* And we'll need somewhere to record the unnecessary rows. */ int *useless_rows = prob->usefulRowInt_ + m; int nuseless_rows = 0; /* The usual finite infinity. */ #define USE_SMALL_LARGE #ifdef USE_SMALL_LARGE const double large = 1.0e15; #else const double large = 1.0e20; #endif #ifndef NDEBUG const double large2 = 1.0e10 * large; #endif double feasTol = prob->feasibilityTolerance_; double relaxedTol = 100.0 * feasTol; /* More like `ignore infeasibility.' */ bool fixInfeasibility = ((prob->presolveOptions_ & 0x4000) != 0); /* Scan the rows and do an initial classification. MarkIgnore is used for constraints that are not in play in bound propagation for whatever reason, either because they're not interesting, or, later, because they're necessary. Interesting rows are nonempty with at least one finite row bound. The rest we can ignore during propagation. Nonempty rows with no finite row bounds are useless; record them for later. */ const char markIgnore = 1; const char markInPlay = -1; const char markActOK = -2; char *markRow = reinterpret_cast< char * >(prob->usefulRowInt_); for (int i = 0; i < m; i++) { if ((rlo[i] > -large || rup[i] < large) && rowLengths[i] > 0) { markRow[i] = markInPlay; } else { markRow[i] = markIgnore; if (rowLengths[i] > 0) { useless_rows[nuseless_rows++] = i; prob->addRow(i); } } } /* Open the main loop. We'll keep trying to tighten bounds until we get to diminishing returns. numberCheck is set at the end of the loop based on how well we did in the first pass. numberChanged tracks how well we do on the current pass. */ int numberInfeasible = 0; int numberChanged = 0; int totalTightened = 0; int numberCheck = -1; const int MAXPASS = 10; int iPass = -1; while (iPass < MAXPASS && numberChanged > numberCheck) { iPass++; numberChanged = 0; /* Open a loop to work through the rows computing upper and lower bounds on row activity. Each bound is calculated as a finite component and an infinite component. The state transitions for a row i go like this: * Row i starts out marked with markInPlay. * When row i is processed by the loop, L(i) and U(i) are calculated and we try to tighten the column bounds of entangled columns. If nothing happens, row i is marked with markActOK. It's still in play but won't be processed again unless the mark changes back to markInPlay. * If a column bound is tightened when we process row i, it's necessary. Mark row i with markIgnore and do not process it again. Other rows k entangled with the column and marked with markActOK are remarked to markInPlay and L(k) and U(k) will be recalculated on the next major pass. If the row is not marked as markInPlay, either we're ignoring the row or L(i) and U(i) have not changed since the last time the row was processed. There's nothing to gain by processing it again. */ for (int i = 0; i < m; i++) { if (markRow[i] != markInPlay) continue; int infUpi = 0; int infLoi = 0; double finUpi = 0.0; double finDowni = 0.0; const CoinBigIndex krs = rowStarts[i]; const CoinBigIndex kre = krs + rowLengths[i]; /* Open a loop to walk the row and calculate upper (U) and lower (L) bounds on row activity. Expand the finite component just a wee bit to make sure the bounds are conservative, then add in a whopping big value to account for the infinite component. */ for (CoinBigIndex kcol = krs; kcol < kre; ++kcol) { const double value = rowCoeffs[kcol]; const int j = colIndices[kcol]; if (value > 0.0) { if (columnUpper[j] < large) finUpi += columnUpper[j] * value; else ++infUpi; if (columnLower[j] > -large) finDowni += columnLower[j] * value; else ++infLoi; } else if (value < 0.0) { if (columnUpper[j] < large) finDowni += columnUpper[j] * value; else ++infLoi; if (columnLower[j] > -large) finUpi += columnLower[j] * value; else ++infUpi; } } markRow[i] = markActOK; finUpi += 1.0e-8 * fabs(finUpi); finDowni -= 1.0e-8 * fabs(finDowni); const double maxUpi = finUpi + infUpi * 1.0e31; const double maxDowni = finDowni - infLoi * 1.0e31; /* If LB(i) > rup(i) or UB(i) < rlo(i), we're infeasible. Break for the exit, unless the user has been so foolish as to tell us to ignore infeasibility, in which case just move on to the next row. */ if (maxUpi < rlo[i] - relaxedTol || maxDowni > rup[i] + relaxedTol) { if (!fixInfeasibility) { numberInfeasible++; prob->messageHandler()->message(COIN_PRESOLVE_ROWINFEAS, prob->messages()) << i << rlo[i] << rup[i] << CoinMessageEol; break; } else { continue; } } /* Remember why we're here --- this is presolve. If the constraint satisfies this condition, it already qualifies as useless and it's highly unlikely to produce tightened column bounds. But don't record it as useless just yet; leave that for phase 2. LOU: Well, why not mark it as useless? A possible optimisation. */ if (maxUpi <= rup[i] + feasTol && maxDowni >= rlo[i] - feasTol) continue; /* We're not infeasible and one of U(i) or L(i) is not inside the row bounds. If we have something that looks like a forcing constraint but is just over the line, force the bound to exact equality to ensure conservative column bounds. */ const double rloi = rlo[i]; const double rupi = rup[i]; if (finUpi < rloi && finUpi > rloi - relaxedTol) finUpi = rloi; if (finDowni > rupi && finDowni < rupi + relaxedTol) finDowni = rupi; /* Open a loop to walk the row and try to tighten column bounds. */ for (CoinBigIndex kcol = krs; kcol < kre; ++kcol) { const double ait = rowCoeffs[kcol]; const int t = colIndices[kcol]; double lt = columnLower[t]; double ut = columnUpper[t]; double newlt = COIN_DBL_MAX; double newut = -COIN_DBL_MAX; /* For a target variable x(t) with a(it) > 0, we have new l(t) = (rlo(i)-(U(i)-a(it)u(t)))/a(it) = u(t) + (rlo(i)-U(i))/a(it) new u(t) = (rup(i)-(L(i)-a(it)l(t)))/a(it) = l(t) + (rup(i)-L(i))/a(it) Notice that if there's a single infinite contribution to L(i) or U(i) and it comes from x(t), then the finite portion finDowni or finUpi is correct and finite. Start by calculating new l(t) against rlo(i) and U(i). If the change is large, put some slack in the bound. */ if (ait > 0.0) { if (rloi > -large) { if (!infUpi) { assert(ut < large2); newlt = ut + (rloi - finUpi) / ait; if (fabs(finUpi) > 1.0e8) newlt -= 1.0e-12 * fabs(finUpi); } else if (infUpi == 1 && ut >= large) { newlt = (rloi - finUpi) / ait; if (fabs(finUpi) > 1.0e8) newlt -= 1.0e-12 * fabs(finUpi); } else { newlt = -COIN_DBL_MAX; } /* Did we improve the bound? If we're infeasible, head for the exit. If we're still feasible, walk the column and reset the marks on the entangled rows so that the activity bounds will be recalculated. Mark this constraint so we don't use it again, and correct L(i). */ if (newlt > lt + 1.0e-12 && newlt > -large) { if (ut - newlt < -relaxedTol) { numberInfeasible++; break; } columnLower[t] = newlt; markRow[i] = markIgnore; numberChanged++; const CoinBigIndex kcs = colStarts[t]; const CoinBigIndex kce = kcs + colLengths[t]; for (CoinBigIndex kcol = kcs; kcol < kce; ++kcol) { const int k = rowIndices[kcol]; if (markRow[k] == markActOK) { markRow[k] = markInPlay; } } if (lt <= -large) { finDowni += newlt * ait; infLoi--; } else { finDowni += (newlt - lt) * ait; } lt = newlt; } } /* Perform the same actions, for new u(t) against rup(i) and L(i). */ if (rupi < large) { if (!infLoi) { assert(lt > -large2); newut = lt + (rupi - finDowni) / ait; if (fabs(finDowni) > 1.0e8) newut += 1.0e-12 * fabs(finDowni); } else if (infLoi == 1 && lt <= -large) { newut = (rupi - finDowni) / ait; if (fabs(finDowni) > 1.0e8) newut += 1.0e-12 * fabs(finDowni); } else { newut = COIN_DBL_MAX; } if (newut < ut - 1.0e-12 && newut < large) { columnUpper[t] = newut; if (newut - lt < -relaxedTol) { numberInfeasible++; break; } markRow[i] = markIgnore; numberChanged++; const CoinBigIndex kcs = colStarts[t]; const CoinBigIndex kce = kcs + colLengths[t]; for (CoinBigIndex kcol = kcs; kcol < kce; ++kcol) { const int k = rowIndices[kcol]; if (markRow[k] == markActOK) { markRow[k] = markInPlay; } } if (ut >= large) { finUpi += newut * ait; infUpi--; } else { finUpi += (newut - ut) * ait; } ut = newut; } } } else { /* And repeat both sets with the appropriate flips for a(it) < 0. */ if (rloi > -large) { if (!infUpi) { assert(lt < large2); newut = lt + (rloi - finUpi) / ait; if (fabs(finUpi) > 1.0e8) newut += 1.0e-12 * fabs(finUpi); } else if (infUpi == 1 && lt <= -large) { newut = (rloi - finUpi) / ait; if (fabs(finUpi) > 1.0e8) newut += 1.0e-12 * fabs(finUpi); } else { newut = COIN_DBL_MAX; } if (newut < ut - 1.0e-12 && newut < large) { columnUpper[t] = newut; if (newut - lt < -relaxedTol) { numberInfeasible++; break; } markRow[i] = markIgnore; numberChanged++; const CoinBigIndex kcs = colStarts[t]; const CoinBigIndex kce = kcs + colLengths[t]; for (CoinBigIndex kcol = kcs; kcol < kce; ++kcol) { const int k = rowIndices[kcol]; if (markRow[k] == markActOK) { markRow[k] = markInPlay; } } if (ut >= large) { finDowni += newut * ait; infLoi--; } else { finDowni += (newut - ut) * ait; } ut = newut; } } if (rupi < large) { if (!infLoi) { assert(ut < large2); newlt = ut + (rupi - finDowni) / ait; if (fabs(finDowni) > 1.0e8) newlt -= 1.0e-12 * fabs(finDowni); } else if (infLoi == 1 && ut >= large) { newlt = (rupi - finDowni) / ait; if (fabs(finDowni) > 1.0e8) newlt -= 1.0e-12 * fabs(finDowni); } else { newlt = -COIN_DBL_MAX; } if (newlt > lt + 1.0e-12 && newlt > -large) { columnLower[t] = newlt; if (ut - newlt < -relaxedTol) { numberInfeasible++; break; } markRow[i] = markIgnore; numberChanged++; const CoinBigIndex kcs = colStarts[t]; const CoinBigIndex kce = kcs + colLengths[t]; for (CoinBigIndex kcol = kcs; kcol < kce; ++kcol) { const int k = rowIndices[kcol]; if (markRow[k] == markActOK) { markRow[k] = markInPlay; } } if (lt <= -large) { finUpi += newlt * ait; infUpi--; } else { finUpi += (newlt - lt) * ait; } lt = newlt; } } } } } totalTightened += numberChanged; if (iPass == 1) numberCheck = CoinMax(10, numberChanged >> 5); if (numberInfeasible) { prob->status_ = 1; break; } } /* At this point, we have rows marked with markIgnore, markInPlay, and markActOK. Rows marked with markIgnore may have been used to tighten the column bound on some variable, hence they are necessary. (Or they may have been marked in the initial scan, in which case they're already on the useless list or empty.) Rows marked with markInPlay or markActOK are candidates for forcing or useless constraints. */ if (!numberInfeasible) { /* Open a loop to scan the rows again looking for useless constraints. */ for (int i = 0; i < m; i++) { if (markRow[i] == markIgnore) continue; /* Recalculate L(i) and U(i). LOU: Arguably this would not be necessary if we saved L(i) and U(i). */ int infUpi = 0; int infLoi = 0; double finUpi = 0.0; double finDowni = 0.0; const CoinBigIndex krs = rowStarts[i]; const CoinBigIndex kre = krs + rowLengths[i]; for (CoinBigIndex krow = krs; krow < kre; ++krow) { const double value = rowCoeffs[krow]; const int j = colIndices[krow]; if (value > 0.0) { if (columnUpper[j] < large) finUpi += columnUpper[j] * value; else ++infUpi; if (columnLower[j] > -large) finDowni += columnLower[j] * value; else ++infLoi; } else if (value < 0.0) { if (columnUpper[j] < large) finDowni += columnUpper[j] * value; else ++infLoi; if (columnLower[j] > -large) finUpi += columnLower[j] * value; else ++infUpi; } } finUpi += 1.0e-8 * fabs(finUpi); finDowni -= 1.0e-8 * fabs(finDowni); const double maxUpi = finUpi + infUpi * 1.0e31; const double maxDowni = finDowni - infLoi * 1.0e31; /* If we have L(i) and U(i) at or inside the row bounds, we have a useless constraint. You would think we could detect forcing constraints here but that's a bit of a problem, because the tightened column bounds we're working with will not escape this routine. */ if (maxUpi <= rup[i] + feasTol && maxDowni >= rlo[i] - feasTol) { useless_rows[nuseless_rows++] = i; } } if (nuseless_rows) { next = useless_constraint_action::presolve(prob, useless_rows, nuseless_rows, next); } /* See if we can transfer tightened bounds from the work above. This is problematic. When we loosen these bounds in postsolve it's entirely possible that the variable will end up superbasic. Original comment: may not unroll */ if (prob->presolveOptions_ & 0x10) { const unsigned char *integerType = prob->integerType_; double *csol = prob->sol_; double *clo = prob->clo_; double *cup = prob->cup_; int *fixed = prob->usefulColumnInt_; int nFixed = 0; int nChanged = 0; for (int j = 0; j < n; j++) { if (clo[j] == cup[j]) continue; double lower = columnLower[j]; double upper = columnUpper[j]; if (integerType[j]) { upper = floor(upper + 1.0e-4); lower = ceil(lower - 1.0e-4); } if (upper - lower < 1.0e-8) { if (upper - lower < -feasTol) numberInfeasible++; if (CoinMin(fabs(upper), fabs(lower)) <= 1.0e-7) upper = 0.0; fixed[nFixed++] = j; prob->addCol(j); cup[j] = upper; clo[j] = upper; if (csol != 0) csol[j] = upper; } else { if (integerType[j]) { if (upper < cup[j]) { cup[j] = upper; nChanged++; prob->addCol(j); } if (lower > clo[j]) { clo[j] = lower; nChanged++; prob->addCol(j); } } } } #ifdef CLP_INVESTIGATE if (nFixed || nChanged) printf("%d fixed in impliedfree, %d changed\n", nFixed, nChanged); #endif if (nFixed) next = remove_fixed_action::presolve(prob, fixed, nFixed, next); } } delete[] columnLower; delete[] columnUpper; #if COIN_PRESOLVE_TUNING > 0 double thisTime = 0.0; if (prob->tuning_) thisTime = CoinCpuTime(); #endif #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_consistent(prob); presolve_links_ok(prob); presolve_check_sol(prob); presolve_check_nbasic(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows() - startEmptyRows; std::cout << "Leaving testRedundant, " << droppedRows << " rows dropped"; #if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << thisTime - startTime << "s"; #endif std::cout << "." << std::endl; #endif return (next); } // WHAT HAPPENS IF COLS ARE DROPPED AS A RESULT?? // should be like do_tighten. // not really - one could fix costed variables to appropriate bound. // ok, don't bother about it. If it is costed, it will be checked // when it is eliminated as an empty col; if it is costed in the // wrong direction, the problem is unbounded, otherwise it is pegged // at its bound. no special action need be taken here. const CoinPresolveAction *useless_constraint_action::presolve(CoinPresolveMatrix *prob, const int *useless_rows, int nuseless_rows, const CoinPresolveAction *next) { #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering useless_constraint_action::presolve, " << nuseless_rows << " rows." << std::endl; #endif presolve_check_sol(prob); presolve_check_nbasic(prob); #endif // may be modified by useless constraint double *colels = prob->colels_; // may be modified by useless constraint int *hrow = prob->hrow_; const CoinBigIndex *mcstrt = prob->mcstrt_; // may be modified by useless constraint int *hincol = prob->hincol_; // double *clo = prob->clo_; // double *cup = prob->cup_; const double *rowels = prob->rowels_; const int *hcol = prob->hcol_; const CoinBigIndex *mrstrt = prob->mrstrt_; // may be written by useless constraint int *hinrow = prob->hinrow_; // const int nrows = prob->nrows_; double *rlo = prob->rlo_; double *rup = prob->rup_; action *actions = new action[nuseless_rows]; for (int i = 0; i < nuseless_rows; ++i) { int irow = useless_rows[i]; #if PRESOLVE_DEBUG > 2 std::cout << " removing row " << irow << std::endl; #endif CoinBigIndex krs = mrstrt[irow]; CoinBigIndex kre = krs + hinrow[irow]; PRESOLVE_DETAIL_PRINT(printf("pre_useless %dR E\n", irow)); action *f = &actions[i]; f->row = irow; f->ninrow = hinrow[irow]; f->rlo = rlo[irow]; f->rup = rup[irow]; f->rowcols = CoinCopyOfArray(&hcol[krs], hinrow[irow]); f->rowels = CoinCopyOfArray(&rowels[krs], hinrow[irow]); for (CoinBigIndex k = krs; k < kre; k++) { presolve_delete_from_col(irow, hcol[k], mcstrt, hincol, hrow, colels); if (hincol[hcol[k]] == 0) { PRESOLVE_REMOVE_LINK(prob->clink_, hcol[k]); } } hinrow[irow] = 0; PRESOLVE_REMOVE_LINK(prob->rlink_, irow); // just to make things squeeky rlo[irow] = 0.0; rup[irow] = 0.0; } next = new useless_constraint_action(nuseless_rows, actions, next); #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_sol(prob); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving useless_constraint_action::presolve." << std::endl; #endif #endif return (next); } // Put constructors here useless_constraint_action::useless_constraint_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } useless_constraint_action::~useless_constraint_action() { for (int i = 0; i < nactions_; i++) { deleteAction(actions_[i].rowcols, int *); deleteAction(actions_[i].rowels, double *); } deleteAction(actions_, action *); } const char *useless_constraint_action::name() const { return ("useless_constraint_action"); } void useless_constraint_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_; const int nactions = nactions_; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering useless_constraint_action::postsolve, " << nactions << " rows." << std::endl; #endif presolve_check_sol(prob); presolve_check_nbasic(prob); #endif double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; CoinBigIndex *link = prob->link_; int *hincol = prob->hincol_; // double *rowduals = prob->rowduals_; double *rowacts = prob->acts_; const double *sol = prob->sol_; CoinBigIndex &free_list = prob->free_list_; double *rlo = prob->rlo_; double *rup = prob->rup_; for (const action *f = &actions[nactions - 1]; actions <= f; f--) { int irow = f->row; int ninrow = f->ninrow; const int *rowcols = f->rowcols; const double *rowels = f->rowels; double rowact = 0.0; rup[irow] = f->rup; rlo[irow] = f->rlo; for (CoinBigIndex k = 0; k < ninrow; k++) { int jcol = rowcols[k]; // CoinBigIndex kk = mcstrt[jcol]; // append deleted row element to each col { CoinBigIndex kk = free_list; assert(kk >= 0 && kk < prob->bulk0_); free_list = link[free_list]; hrow[kk] = irow; colels[kk] = rowels[k]; link[kk] = mcstrt[jcol]; mcstrt[jcol] = kk; } rowact += rowels[k] * sol[jcol]; hincol[jcol]++; } #if PRESOLVE_CONSISTENCY presolve_check_free_list(prob); #endif // I don't know if this is always true PRESOLVEASSERT(prob->getRowStatus(irow) == CoinPrePostsolveMatrix::basic); // rcosts are unaffected since rowdual is 0 rowacts[irow] = rowact; // leave until desctructor //deleteAction(rowcols,int *); //deleteAction(rowels,double *); } //deleteAction(actions_,action *); #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 presolve_check_threads(prob); presolve_check_sol(prob); presolve_check_nbasic(prob); #if PRESOLVE_DEBUG > 0 std::cout << "Leaving useless_constraint_action::postsolve." << std::endl; #endif #endif } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinShallowPackedVector.cpp0000644000175200017520000001205313414454441021001 0ustar coincoin/* $Id: CoinShallowPackedVector.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "CoinHelperFunctions.hpp" #include "CoinShallowPackedVector.hpp" //############################################################################# void CoinShallowPackedVector::clear() { clearBase(); indices_ = NULL; elements_ = NULL; nElements_ = 0; } //############################################################################# CoinShallowPackedVector & CoinShallowPackedVector::operator=(const CoinPackedVectorBase &x) { if (&x != this) { indices_ = x.getIndices(); elements_ = x.getElements(); nElements_ = x.getNumElements(); CoinPackedVectorBase::clearBase(); CoinPackedVectorBase::copyMaxMinIndex(x); try { CoinPackedVectorBase::duplicateIndex(); } catch (CoinError &e) { throw CoinError("duplicate index", "operator= from base", "CoinShallowPackedVector"); } } return *this; } //############################################################################# CoinShallowPackedVector & CoinShallowPackedVector::operator=(const CoinShallowPackedVector &x) { if (&x != this) { indices_ = x.indices_; elements_ = x.elements_; nElements_ = x.nElements_; CoinPackedVectorBase::clearBase(); CoinPackedVectorBase::copyMaxMinIndex(x); try { CoinPackedVectorBase::duplicateIndex(); } catch (CoinError &e) { throw CoinError("duplicate index", "operator=", "CoinShallowPackedVector"); } } return *this; } //############################################################################# void CoinShallowPackedVector::setVector(int size, const int *inds, const double *elems, bool testForDuplicateIndex) { indices_ = inds; elements_ = elems; nElements_ = size; CoinPackedVectorBase::clearBase(); try { CoinPackedVectorBase::setTestForDuplicateIndex(testForDuplicateIndex); } catch (CoinError &e) { throw CoinError("duplicate index", "setVector", "CoinShallowPackedVector"); } } //############################################################################# //------------------------------------------------------------------- // Default //------------------------------------------------------------------- CoinShallowPackedVector::CoinShallowPackedVector(bool testForDuplicateIndex) : CoinPackedVectorBase() , indices_(NULL) , elements_(NULL) , nElements_(0) { try { CoinPackedVectorBase::setTestForDuplicateIndex(testForDuplicateIndex); } catch (CoinError &e) { throw CoinError("duplicate index", "default constructor", "CoinShallowPackedVector"); } } //------------------------------------------------------------------- // Explicit //------------------------------------------------------------------- CoinShallowPackedVector::CoinShallowPackedVector(int size, const int *inds, const double *elems, bool testForDuplicateIndex) : CoinPackedVectorBase() , indices_(inds) , elements_(elems) , nElements_(size) { try { CoinPackedVectorBase::setTestForDuplicateIndex(testForDuplicateIndex); } catch (CoinError &e) { throw CoinError("duplicate index", "explicit constructor", "CoinShallowPackedVector"); } } //------------------------------------------------------------------- // Copy //------------------------------------------------------------------- CoinShallowPackedVector::CoinShallowPackedVector(const CoinPackedVectorBase &x) : CoinPackedVectorBase() , indices_(x.getIndices()) , elements_(x.getElements()) , nElements_(x.getNumElements()) { CoinPackedVectorBase::copyMaxMinIndex(x); try { CoinPackedVectorBase::setTestForDuplicateIndex(x.testForDuplicateIndex()); } catch (CoinError &e) { throw CoinError("duplicate index", "copy constructor from base", "CoinShallowPackedVector"); } } //------------------------------------------------------------------- // Copy //------------------------------------------------------------------- CoinShallowPackedVector::CoinShallowPackedVector(const CoinShallowPackedVector &x) : CoinPackedVectorBase() , indices_(x.getIndices()) , elements_(x.getElements()) , nElements_(x.getNumElements()) { CoinPackedVectorBase::copyMaxMinIndex(x); try { CoinPackedVectorBase::setTestForDuplicateIndex(x.testForDuplicateIndex()); } catch (CoinError &e) { throw CoinError("duplicate index", "copy constructor", "CoinShallowPackedVector"); } } //------------------------------------------------------------------- // Print //------------------------------------------------------------------- void CoinShallowPackedVector::print() { for (int i = 0; i < nElements_; i++) { std::cout << indices_[i] << ":" << elements_[i]; if (i < nElements_ - 1) std::cout << ", "; } std::cout << std::endl; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/format-source.sh0000755000175200017520000000100713414454441016702 0ustar coincoin# script to format source code and include (if not included yet), # vim formatting settings (which are automatically loaded by vim) # Haroldo - 2019 for file in *.[ch]pp *.h; do sourceName=`basename $file` echo formatting "$sourceName" clang-format -i -style=file $file # adding vim modeline if not included yet if ! grep -q "/* vi: softtabstop=" $file; then echo '' >> $file echo '/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2' >> $file echo '*/' >> $file fi done DyLP-1.10.4/CoinUtils/src/CoinWarmStartBasis.cpp0000644000175200017520000006256213414454441020015 0ustar coincoin/* $Id: CoinWarmStartBasis.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "CoinUtilsConfig.h" #include #include "CoinWarmStartBasis.hpp" #include "CoinHelperFunctions.hpp" #include #include //############################################################################# void CoinWarmStartBasis::setSize(int ns, int na) { // Round all so arrays multiple of 4 int nintS = (ns + 15) >> 4; int nintA = (na + 15) >> 4; int size = nintS + nintA; if (size) { if (size > maxSize_) { delete[] structuralStatus_; maxSize_ = size + 10; structuralStatus_ = new char[4 * maxSize_]; } memset(structuralStatus_, 0, (4 * nintS) * sizeof(char)); artificialStatus_ = structuralStatus_ + 4 * nintS; memset(artificialStatus_, 0, (4 * nintA) * sizeof(char)); } else { artificialStatus_ = NULL; } numArtificial_ = na; numStructural_ = ns; } void CoinWarmStartBasis::assignBasisStatus(int ns, int na, char *&sStat, char *&aStat) { // Round all so arrays multiple of 4 int nintS = (ns + 15) >> 4; int nintA = (na + 15) >> 4; int size = nintS + nintA; if (size) { if (size > maxSize_) { delete[] structuralStatus_; maxSize_ = size + 10; structuralStatus_ = new char[4 * maxSize_]; } CoinMemcpyN(sStat, (4 * nintS), structuralStatus_); artificialStatus_ = structuralStatus_ + 4 * nintS; CoinMemcpyN(aStat, (4 * nintA), artificialStatus_); } else { artificialStatus_ = NULL; } numStructural_ = ns; numArtificial_ = na; delete[] sStat; delete[] aStat; sStat = NULL; aStat = NULL; } CoinWarmStartBasis::CoinWarmStartBasis(int ns, int na, const char *sStat, const char *aStat) : numStructural_(ns) , numArtificial_(na) , structuralStatus_(NULL) , artificialStatus_(NULL) { // Round all so arrays multiple of 4 int nintS = ((ns + 15) >> 4); int nintA = ((na + 15) >> 4); maxSize_ = nintS + nintA; if (maxSize_ > 0) { structuralStatus_ = new char[4 * maxSize_]; if (nintS > 0) { structuralStatus_[4 * nintS - 3] = 0; structuralStatus_[4 * nintS - 2] = 0; structuralStatus_[4 * nintS - 1] = 0; CoinMemcpyN(sStat, ((ns + 3) / 4), structuralStatus_); } artificialStatus_ = structuralStatus_ + 4 * nintS; if (nintA > 0) { artificialStatus_[4 * nintA - 3] = 0; artificialStatus_[4 * nintA - 2] = 0; artificialStatus_[4 * nintA - 1] = 0; CoinMemcpyN(aStat, ((na + 3) / 4), artificialStatus_); } } } CoinWarmStartBasis::CoinWarmStartBasis(const CoinWarmStartBasis &ws) : numStructural_(ws.numStructural_) , numArtificial_(ws.numArtificial_) , structuralStatus_(NULL) , artificialStatus_(NULL) { // Round all so arrays multiple of 4 int nintS = (numStructural_ + 15) >> 4; int nintA = (numArtificial_ + 15) >> 4; maxSize_ = nintS + nintA; if (maxSize_ > 0) { structuralStatus_ = new char[4 * maxSize_]; CoinMemcpyN(ws.structuralStatus_, (4 * nintS), structuralStatus_); artificialStatus_ = structuralStatus_ + 4 * nintS; CoinMemcpyN(ws.artificialStatus_, (4 * nintA), artificialStatus_); } } CoinWarmStartBasis & CoinWarmStartBasis::operator=(const CoinWarmStartBasis &rhs) { if (this != &rhs) { numStructural_ = rhs.numStructural_; numArtificial_ = rhs.numArtificial_; // Round all so arrays multiple of 4 int nintS = (numStructural_ + 15) >> 4; int nintA = (numArtificial_ + 15) >> 4; int size = nintS + nintA; if (size > maxSize_) { delete[] structuralStatus_; maxSize_ = size + 10; structuralStatus_ = new char[4 * maxSize_]; } if (size > 0) { CoinMemcpyN(rhs.structuralStatus_, (4 * nintS), structuralStatus_); artificialStatus_ = structuralStatus_ + 4 * nintS; CoinMemcpyN(rhs.artificialStatus_, (4 * nintA), artificialStatus_); } else { artificialStatus_ = NULL; } } return *this; } // Resizes void CoinWarmStartBasis::resize(int newNumberRows, int newNumberColumns) { int i, nCharNewS, nCharOldS, nCharNewA, nCharOldA; if (newNumberRows != numArtificial_ || newNumberColumns != numStructural_) { nCharOldS = 4 * ((numStructural_ + 15) >> 4); int nIntS = (newNumberColumns + 15) >> 4; nCharNewS = 4 * nIntS; nCharOldA = 4 * ((numArtificial_ + 15) >> 4); int nIntA = (newNumberRows + 15) >> 4; nCharNewA = 4 * nIntA; int size = nIntS + nIntA; // Do slowly if number of columns increases or need new array if (newNumberColumns > numStructural_ || size > maxSize_) { if (size > maxSize_) maxSize_ = size + 10; char *array = new char[4 * maxSize_]; // zap all for clarity and zerofault etc memset(array, 0, 4 * maxSize_ * sizeof(char)); CoinMemcpyN(structuralStatus_, (nCharOldS > nCharNewS) ? nCharNewS : nCharOldS, array); CoinMemcpyN(artificialStatus_, (nCharOldA > nCharNewA) ? nCharNewA : nCharOldA, array + nCharNewS); delete[] structuralStatus_; structuralStatus_ = array; artificialStatus_ = array + nCharNewS; for (i = numStructural_; i < newNumberColumns; i++) setStructStatus(i, atLowerBound); for (i = numArtificial_; i < newNumberRows; i++) setArtifStatus(i, basic); } else { // can do faster if (newNumberColumns != numStructural_) { memmove(structuralStatus_ + nCharNewS, artificialStatus_, (nCharOldA > nCharNewA) ? nCharNewA : nCharOldA); artificialStatus_ = structuralStatus_ + 4 * nIntS; } for (i = numArtificial_; i < newNumberRows; i++) setArtifStatus(i, basic); } numStructural_ = newNumberColumns; numArtificial_ = newNumberRows; } } /* compressRows takes an ascending list of target indices without duplicates and removes them, compressing the artificialStatus_ array in place. It will fail spectacularly if the indices are not sorted. Use deleteRows if you need to preprocess the target indices to satisfy the conditions. */ void CoinWarmStartBasis::compressRows(int tgtCnt, const int *tgts) { int i, keep, t, blkStart, blkEnd; /* Depending on circumstances, constraint indices may be larger than the size of the basis. Check for that now. Scan from top, betting that in most cases the majority of indices will be valid. */ for (t = tgtCnt - 1; t >= 0 && tgts[t] >= numArtificial_; t--) ; // temporary trap to make sure that scan from top is correct choice. // if ((t+1) < tgtCnt/2) // { printf("CWSB: tgtCnt %d, t %d; BAD CASE",tgtCnt,t+1) ; } if (t < 0) return; tgtCnt = t + 1; Status stati; #ifdef COIN_DEBUG /* If we're debugging, scan to see if we're deleting nonbasic artificials. (In other words, are we deleting tight constraints?) Easiest to just do this up front as opposed to integrating it with the loops below. */ int nbCnt = 0; for (t = 0; t < tgtCnt; t++) { i = tgts[t]; stati = getStatus(artificialStatus_, i); if (stati != CoinWarmStartBasis::basic) { nbCnt++; } } if (nbCnt > 0) { std::cout << nbCnt << " nonbasic artificials deleted." << std::endl; } #endif /* Preserve all entries before the first target. Skip across consecutive target indices to establish the start of the first block to be retained. */ keep = tgts[0]; for (t = 0; t < tgtCnt - 1 && tgts[t] + 1 == tgts[t + 1]; t++) ; blkStart = tgts[t] + 1; /* Outer loop works through the indices to be deleted. Inner loop copies runs of indices to keep. */ while (t < tgtCnt - 1) { blkEnd = tgts[t + 1] - 1; for (i = blkStart; i <= blkEnd; i++) { stati = getStatus(artificialStatus_, i); setStatus(artificialStatus_, keep++, stati); } for (t++; t < tgtCnt - 1 && tgts[t] + 1 == tgts[t + 1]; t++) ; blkStart = tgts[t] + 1; } /* Finish off by copying from last deleted index to end of status array. */ for (i = blkStart; i < numArtificial_; i++) { stati = getStatus(artificialStatus_, i); setStatus(artificialStatus_, keep++, stati); } numArtificial_ -= tgtCnt; return; } /* deleteRows takes an unordered list of target indices with duplicates and removes them from the basis. The strategy is to preprocesses the list into an ascending list without duplicates, suitable for compressRows. */ void CoinWarmStartBasis::deleteRows(int rawTgtCnt, const int *rawTgts) { if (rawTgtCnt <= 0) return; int i; int last = -1; bool ordered = true; for (i = 0; i < rawTgtCnt; i++) { int iRow = rawTgts[i]; if (iRow > last) { last = iRow; } else { ordered = false; break; } } if (ordered) { compressRows(rawTgtCnt, rawTgts); } else { int *tgts = new int[rawTgtCnt]; CoinMemcpyN(rawTgts, rawTgtCnt, tgts); int *first = &tgts[0]; int *last = &tgts[rawTgtCnt]; int *endUnique; std::sort(first, last); endUnique = std::unique(first, last); int tgtCnt = static_cast< int >(endUnique - first); compressRows(tgtCnt, tgts); delete[] tgts; } return; } // Deletes columns void CoinWarmStartBasis::deleteColumns(int number, const int *which) { int i; char *deleted = new char[numStructural_]; int numberDeleted = 0; memset(deleted, 0, numStructural_ * sizeof(char)); for (i = 0; i < number; i++) { int j = which[i]; if (j >= 0 && j < numStructural_ && !deleted[j]) { numberDeleted++; deleted[j] = 1; } } int nCharNewS = 4 * ((numStructural_ - numberDeleted + 15) >> 4); int nCharNewA = 4 * ((numArtificial_ + 15) >> 4); char *array = new char[4 * maxSize_]; #ifdef ZEROFAULT memset(array, 0, (4 * maxSize_ * sizeof(char))); #endif CoinMemcpyN(artificialStatus_, nCharNewA, array + nCharNewS); int put = 0; #ifdef COIN_DEBUG int numberBasic = 0; #endif for (i = 0; i < numStructural_; i++) { Status status = getStructStatus(i); if (!deleted[i]) { setStatus(array, put, status); put++; } #ifdef COIN_DEBUG else if (status == CoinWarmStartBasis::basic) { numberBasic++; } #endif } delete[] structuralStatus_; structuralStatus_ = array; artificialStatus_ = structuralStatus_ + nCharNewS; delete[] deleted; numStructural_ -= numberDeleted; #ifdef COIN_DEBUG if (numberBasic) std::cout << numberBasic << " basic structurals deleted" << std::endl; #endif } /* Merge the specified entries from the source basis (src) into the target basis (this). For each entry in xferCols, xferRows, first is the source index, second is the target index, and third is the run length. This routine was originally created to solve the problem of correctly expanding an existing basis but can be used in a general context to merge two bases. If the xferRows (xferCols) vector is missing, no row (column) information will be transferred from src to tgt. */ void CoinWarmStartBasis::mergeBasis(const CoinWarmStartBasis *src, const XferVec *xferRows, const XferVec *xferCols) { assert(src); int srcCols = src->getNumStructural(); int srcRows = src->getNumArtificial(); /* Merge the structural variable status. */ if (srcCols > 0 && xferCols != NULL) { XferVec::const_iterator xferSpec = xferCols->begin(); XferVec::const_iterator xferEnd = xferCols->end(); for (; xferSpec != xferEnd; xferSpec++) { int srcNdx = (*xferSpec).first; int tgtNdx = (*xferSpec).second; int runLen = (*xferSpec).third; assert(srcNdx >= 0 && srcNdx + runLen <= srcCols); assert(tgtNdx >= 0 && tgtNdx + runLen <= getNumStructural()); for (int i = 0; i < runLen; i++) { CoinWarmStartBasis::Status stat = src->getStructStatus(srcNdx + i); setStructStatus(tgtNdx + i, stat); } } } /* Merge the row (artificial variable) status. */ if (srcRows > 0 && xferRows != NULL) { XferVec::const_iterator xferSpec = xferRows->begin(); XferVec::const_iterator xferEnd = xferRows->end(); for (; xferSpec != xferEnd; xferSpec++) { int srcNdx = (*xferSpec).first; int tgtNdx = (*xferSpec).second; int runLen = (*xferSpec).third; assert(srcNdx >= 0 && srcNdx + runLen <= srcRows); assert(tgtNdx >= 0 && tgtNdx + runLen <= getNumArtificial()); for (int i = 0; i < runLen; i++) { CoinWarmStartBasis::Status stat = src->getArtifStatus(srcNdx + i); setArtifStatus(tgtNdx + i, stat); } } } return; } // Prints in readable format (for debug) void CoinWarmStartBasis::print() const { int i; int numberBasic = 0; for (i = 0; i < numStructural_; i++) { Status status = getStructStatus(i); if (status == CoinWarmStartBasis::basic) numberBasic++; } int numberStructBasic = numberBasic; for (i = 0; i < numArtificial_; i++) { Status status = getArtifStatus(i); if (status == CoinWarmStartBasis::basic) numberBasic++; } std::cout << "Basis " << this << " has " << numArtificial_ << " rows and " << numStructural_ << " columns, " << numberBasic << " basic, of which " << numberStructBasic << " were columns" << std::endl; std::cout << "Rows:" << std::endl; char type[] = { 'F', 'B', 'U', 'L' }; for (i = 0; i < numArtificial_; i++) std::cout << type[getArtifStatus(i)]; std::cout << std::endl; std::cout << "Columns:" << std::endl; for (i = 0; i < numStructural_; i++) std::cout << type[getStructStatus(i)]; std::cout << std::endl; } CoinWarmStartBasis::CoinWarmStartBasis() { numStructural_ = 0; numArtificial_ = 0; maxSize_ = 0; structuralStatus_ = NULL; artificialStatus_ = NULL; } CoinWarmStartBasis::~CoinWarmStartBasis() { delete[] structuralStatus_; } // Returns number of basic structurals int CoinWarmStartBasis::numberBasicStructurals() const { int i; int numberBasic = 0; for (i = 0; i < numStructural_; i++) { Status status = getStructStatus(i); if (status == CoinWarmStartBasis::basic) numberBasic++; } return numberBasic; } // Returns true if full basis (for debug) bool CoinWarmStartBasis::fullBasis() const { int i; int numberBasic = 0; for (i = 0; i < numStructural_; i++) { Status status = getStructStatus(i); if (status == CoinWarmStartBasis::basic) numberBasic++; } for (i = 0; i < numArtificial_; i++) { Status status = getArtifStatus(i); if (status == CoinWarmStartBasis::basic) numberBasic++; } #ifdef COIN_DEVELOP if (numberBasic != numArtificial_) printf("mismatch - basis has %d rows, %d basic\n", numArtificial_, numberBasic); #endif return numberBasic == numArtificial_; } // Returns true if full basis and fixes up (for debug) bool CoinWarmStartBasis::fixFullBasis() { int i; int numberBasic = 0; for (i = 0; i < numStructural_; i++) { Status status = getStructStatus(i); if (status == CoinWarmStartBasis::basic) numberBasic++; } for (i = 0; i < numArtificial_; i++) { Status status = getArtifStatus(i); if (status == CoinWarmStartBasis::basic) numberBasic++; } #ifdef COIN_DEVELOP if (numberBasic != numArtificial_) printf("mismatch - basis has %d rows, %d basic\n", numArtificial_, numberBasic); #endif bool returnCode = (numberBasic == numArtificial_); if (numberBasic > numArtificial_) { for (i = 0; i < numStructural_; i++) { Status status = getStructStatus(i); if (status == CoinWarmStartBasis::basic) { setStructStatus(i, atLowerBound); numberBasic--; if (numberBasic == numArtificial_) break; } } } else if (numberBasic < numArtificial_) { for (i = 0; i < numArtificial_; i++) { Status status = getArtifStatus(i); if (status != CoinWarmStartBasis::basic) { setArtifStatus(i, basic); numberBasic++; if (numberBasic == numArtificial_) break; } } } return returnCode; } /* Generate a diff that'll convert oldCWS into the basis pointed to by this. This routine is a bit of a hack, for efficiency's sake. Rather than work with individual status vector entries, we're going to treat the vectors as int's --- in effect, we create one diff entry for each block of 16 status entries. Diffs for logicals are tagged with 0x80000000. */ CoinWarmStartDiff * CoinWarmStartBasis::generateDiff(const CoinWarmStart *const oldCWS) const { /* Make sure the parameter is CoinWarmStartBasis or derived class. */ const CoinWarmStartBasis *oldBasis = dynamic_cast< const CoinWarmStartBasis * >(oldCWS); #ifndef NDEBUG if (!oldBasis) { throw CoinError("Old basis not derived from CoinWarmStartBasis.", "generateDiff", "CoinWarmStartBasis"); } #endif const CoinWarmStartBasis *newBasis = this; /* Make sure newBasis is equal or bigger than oldBasis. Calculate the worst case number of diffs and allocate vectors to hold them. */ const int oldArtifCnt = oldBasis->getNumArtificial(); const int oldStructCnt = oldBasis->getNumStructural(); const int newArtifCnt = newBasis->getNumArtificial(); const int newStructCnt = newBasis->getNumStructural(); assert(newArtifCnt >= oldArtifCnt); assert(newStructCnt >= oldStructCnt); int sizeOldArtif = (oldArtifCnt + 15) >> 4; int sizeNewArtif = (newArtifCnt + 15) >> 4; int sizeOldStruct = (oldStructCnt + 15) >> 4; int sizeNewStruct = (newStructCnt + 15) >> 4; int maxBasisLength = sizeNewArtif + sizeNewStruct; unsigned int *diffNdx = new unsigned int[2 * maxBasisLength]; unsigned int *diffVal = diffNdx + maxBasisLength; /* Ok, setup's over. Now scan the logicals (aka artificials, standing in for constraints). For the portion of the status arrays which overlap, create diffs. Then add any additional status from newBasis. I removed the following bit of code & comment: if (sizeNew == sizeOld) sizeOld--; // make sure all taken I assume this is meant to trap cases where oldBasis does not occupy all of the final int, but I can't see where it's necessary. */ const unsigned int *oldStatus = reinterpret_cast< const unsigned int * >(oldBasis->getArtificialStatus()); const unsigned int *newStatus = reinterpret_cast< const unsigned int * >(newBasis->getArtificialStatus()); int numberChanged = 0; int i; for (i = 0; i < sizeOldArtif; i++) { if (oldStatus[i] != newStatus[i]) { diffNdx[numberChanged] = i | 0x80000000; diffVal[numberChanged++] = newStatus[i]; } } for (; i < sizeNewArtif; i++) { diffNdx[numberChanged] = i | 0x80000000; diffVal[numberChanged++] = newStatus[i]; } /* Repeat for structural variables. */ oldStatus = reinterpret_cast< const unsigned int * >(oldBasis->getStructuralStatus()); newStatus = reinterpret_cast< const unsigned int * >(newBasis->getStructuralStatus()); for (i = 0; i < sizeOldStruct; i++) { if (oldStatus[i] != newStatus[i]) { diffNdx[numberChanged] = i; diffVal[numberChanged++] = newStatus[i]; } } for (; i < sizeNewStruct; i++) { diffNdx[numberChanged] = i; diffVal[numberChanged++] = newStatus[i]; } /* Create the object of our desire. */ CoinWarmStartBasisDiff *diff; if ((numberChanged * 2 < maxBasisLength + 1 || !newStructCnt) && true) diff = new CoinWarmStartBasisDiff(numberChanged, diffNdx, diffVal); else diff = new CoinWarmStartBasisDiff(newBasis); /* Clean up and return. */ delete[] diffNdx; return (static_cast< CoinWarmStartDiff * >(diff)); } /* Apply a diff to the basis pointed to by this. It's assumed that the allocated capacity of the basis is sufficiently large. */ void CoinWarmStartBasis::applyDiff(const CoinWarmStartDiff *const cwsdDiff) { /* Make sure we have a CoinWarmStartBasisDiff */ const CoinWarmStartBasisDiff *diff = dynamic_cast< const CoinWarmStartBasisDiff * >(cwsdDiff); #ifndef NDEBUG if (!diff) { throw CoinError("Diff not derived from CoinWarmStartBasisDiff.", "applyDiff", "CoinWarmStartBasis"); } #endif /* Application is by straighforward replacement of words in the status arrays. Index entries for logicals (aka artificials) are tagged with 0x80000000. */ const int numberChanges = diff->sze_; unsigned int *structStatus = reinterpret_cast< unsigned int * >(this->getStructuralStatus()); unsigned int *artifStatus = reinterpret_cast< unsigned int * >(this->getArtificialStatus()); if (numberChanges >= 0) { const unsigned int *diffNdxs = diff->difference_; const unsigned int *diffVals = diffNdxs + numberChanges; for (int i = 0; i < numberChanges; i++) { unsigned int diffNdx = diffNdxs[i]; unsigned int diffVal = diffVals[i]; if ((diffNdx & 0x80000000) == 0) { structStatus[diffNdx] = diffVal; } else { artifStatus[diffNdx & 0x7fffffff] = diffVal; } } } else { // just replace const unsigned int *diffA = diff->difference_ - 1; const int artifCnt = static_cast< int >(diffA[0]); const int structCnt = -numberChanges; int sizeArtif = (artifCnt + 15) >> 4; int sizeStruct = (structCnt + 15) >> 4; CoinMemcpyN(diffA + 1, sizeStruct, structStatus); CoinMemcpyN(diffA + 1 + sizeStruct, sizeArtif, artifStatus); } return; } const char *statusName(CoinWarmStartBasis::Status status) { switch (status) { case CoinWarmStartBasis::isFree: { return ("NBFR"); } case CoinWarmStartBasis::basic: { return ("B"); } case CoinWarmStartBasis::atUpperBound: { return ("NBUB"); } case CoinWarmStartBasis::atLowerBound: { return ("NBLB"); } case CoinWarmStartBasis::superBasic: { return ("SB"); } default: { return ("INVALID!"); } } } char statusToChar(CoinWarmStartBasis::Status status) { switch (status) { case CoinWarmStartBasis::isFree: { return ('F'); } case CoinWarmStartBasis::basic: { return ('B'); } case CoinWarmStartBasis::atUpperBound: { return ('U'); } case CoinWarmStartBasis::atLowerBound: { return ('L'); } case CoinWarmStartBasis::superBasic: { return ('S'); } default: { return ('I'); } // invalid! } } CoinWarmStartBasis::Status charToStatus(char status) { switch (status) { case 'F': { return (CoinWarmStartBasis::isFree); } case 'B': { return (CoinWarmStartBasis::basic); } case 'U': { return (CoinWarmStartBasis::atUpperBound); } case 'L': { return (CoinWarmStartBasis::atLowerBound); } case 'S': { return (CoinWarmStartBasis::superBasic); } case 'X': { return (CoinWarmStartBasis::atLowerBound); } // fixed default: { abort(); } // invalid! } } /* Routines for CoinWarmStartBasisDiff */ /* Constructor given diff data. */ CoinWarmStartBasisDiff::CoinWarmStartBasisDiff(int sze, const unsigned int *const diffNdxs, const unsigned int *const diffVals) : sze_(sze) , difference_(NULL) { if (sze > 0) { difference_ = new unsigned int[2 * sze]; CoinMemcpyN(diffNdxs, sze, difference_); CoinMemcpyN(diffVals, sze, difference_ + sze_); } return; } /* Constructor when full is smaller than diff! */ CoinWarmStartBasisDiff::CoinWarmStartBasisDiff(const CoinWarmStartBasis *rhs) : sze_(0) , difference_(0) { const int artifCnt = rhs->getNumArtificial(); const int structCnt = rhs->getNumStructural(); int sizeArtif = (artifCnt + 15) >> 4; int sizeStruct = (structCnt + 15) >> 4; int maxBasisLength = sizeArtif + sizeStruct; assert(maxBasisLength && structCnt); sze_ = -structCnt; difference_ = new unsigned int[maxBasisLength + 1]; difference_[0] = artifCnt; difference_++; CoinMemcpyN(reinterpret_cast< const unsigned int * >(rhs->getStructuralStatus()), sizeStruct, difference_); CoinMemcpyN(reinterpret_cast< const unsigned int * >(rhs->getArtificialStatus()), sizeArtif, difference_ + sizeStruct); } /* Copy constructor. */ CoinWarmStartBasisDiff::CoinWarmStartBasisDiff(const CoinWarmStartBasisDiff &rhs) : sze_(rhs.sze_) , difference_(0) { if (sze_ > 0) { difference_ = CoinCopyOfArray(rhs.difference_, 2 * sze_); } else if (sze_ < 0) { const unsigned int *diff = rhs.difference_ - 1; const int artifCnt = static_cast< int >(diff[0]); const int structCnt = -sze_; int sizeArtif = (artifCnt + 15) >> 4; int sizeStruct = (structCnt + 15) >> 4; int maxBasisLength = sizeArtif + sizeStruct; difference_ = CoinCopyOfArray(diff, maxBasisLength + 1); difference_++; } return; } /* Assignment --- for convenience when assigning objects containing CoinWarmStartBasisDiff objects. */ CoinWarmStartBasisDiff & CoinWarmStartBasisDiff::operator=(const CoinWarmStartBasisDiff &rhs) { if (this != &rhs) { if (sze_ > 0) { delete[] difference_; } else if (sze_ < 0) { unsigned int *diff = difference_ - 1; delete[] diff; } sze_ = rhs.sze_; if (sze_ > 0) { difference_ = CoinCopyOfArray(rhs.difference_, 2 * sze_); } else if (sze_ < 0) { const unsigned int *diff = rhs.difference_ - 1; const int artifCnt = static_cast< int >(diff[0]); const int structCnt = -sze_; int sizeArtif = (artifCnt + 15) >> 4; int sizeStruct = (structCnt + 15) >> 4; int maxBasisLength = sizeArtif + sizeStruct; difference_ = CoinCopyOfArray(diff, maxBasisLength + 1); difference_++; } else { difference_ = 0; } } return (*this); } /*brief Destructor */ CoinWarmStartBasisDiff::~CoinWarmStartBasisDiff() { if (sze_ > 0) { delete[] difference_; } else if (sze_ < 0) { unsigned int *diff = difference_ - 1; delete[] diff; } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinIndexedVector.hpp0000644000175200017520000012044613415401144017644 0ustar coincoin/* $Id: CoinIndexedVector.hpp 2084 2019-01-09 14:17:08Z forrest $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinIndexedVector_H #define CoinIndexedVector_H #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include #include "CoinFinite.hpp" #ifndef CLP_NO_VECTOR #include "CoinPackedVectorBase.hpp" #endif #include "CoinSort.hpp" #include "CoinHelperFunctions.hpp" #include #ifndef COIN_FLOAT #define COIN_INDEXED_TINY_ELEMENT 1.0e-50 #define COIN_INDEXED_REALLY_TINY_ELEMENT 1.0e-100 #else #define COIN_INDEXED_TINY_ELEMENT 1.0e-35 #define COIN_INDEXED_REALLY_TINY_ELEMENT 1.0e-39 #endif /** Indexed Vector This stores values unpacked but apart from that is a bit like CoinPackedVector. It is designed to be lightweight in normal use. It now has a "packed" mode when it is even more like CoinPackedVector Indices array has capacity_ extra chars which are zeroed and can be used for any purpose - but must be re-zeroed Stores vector of indices and associated element values. Supports sorting of indices. Does not support negative indices. Does NOT support testing for duplicates *** getElements is no longer supported Here is a sample usage: @verbatim const int ne = 4; int inx[ne] = { 1, 4, 0, 2 } double el[ne] = { 10., 40., 1., 50. } // Create vector and set its valuex1 CoinIndexedVector r(ne,inx,el); // access as a full storage vector assert( r[ 0]==1. ); assert( r[ 1]==10.); assert( r[ 2]==50.); assert( r[ 3]==0. ); assert( r[ 4]==40.); // sort Elements in increasing order r.sortIncrElement(); // access each index and element assert( r.getIndices ()[0]== 0 ); assert( r.getIndices ()[1]== 1 ); assert( r.getIndices ()[2]== 4 ); assert( r.getIndices ()[3]== 2 ); // access as a full storage vector assert( r[ 0]==1. ); assert( r[ 1]==10.); assert( r[ 2]==50.); assert( r[ 3]==0. ); assert( r[ 4]==40.); // Tests for equality and equivalence CoinIndexedVector r1; r1=r; assert( r==r1 ); assert( r.equivalent(r1) ); r.sortIncrElement(); assert( r!=r1 ); assert( r.equivalent(r1) ); // Add indexed vectors. // Similarly for subtraction, multiplication, // and division. CoinIndexedVector add = r + r1; assert( add[0] == 1.+ 1. ); assert( add[1] == 10.+10. ); assert( add[2] == 50.+50. ); assert( add[3] == 0.+ 0. ); assert( add[4] == 40.+40. ); assert( r.sum() == 10.+40.+1.+50. ); @endverbatim */ class CoinIndexedVector { friend void CoinIndexedVectorUnitTest(); public: /**@name Get methods. */ //@{ /// Get the size inline int getNumElements() const { return nElements_; } /// Get indices of elements inline const int *getIndices() const { return indices_; } /// Get element values // ** No longer supported virtual const double * getElements() const ; /// Get indices of elements inline int *getIndices() { return indices_; } /** Get the vector as a dense vector. This is normal storage method. The user should not not delete [] this. */ inline double *denseVector() const { return elements_; } /// For very temporary use when user needs to borrow a dense vector inline void setDenseVector(double *array) { elements_ = array; } /// For very temporary use when user needs to borrow an index vector inline void setIndexVector(int *array) { indices_ = array; } /** Access the i'th element of the full storage vector. */ double &operator[](int i) const; //@} //------------------------------------------------------------------- // Set indices and elements //------------------------------------------------------------------- /**@name Set methods */ //@{ /// Set the size inline void setNumElements(int value) { nElements_ = value; if (!nElements_) packedMode_ = false; } /// Reset the vector (as if were just created an empty vector). This leaves arrays! void clear(); /// Reset the vector (as if were just created an empty vector) void empty(); /// Clear even if in a bad way void reallyClear(); /** Assignment operator. */ CoinIndexedVector &operator=(const CoinIndexedVector &); #ifndef CLP_NO_VECTOR /** Assignment operator from a CoinPackedVectorBase.
NOTE: This assumes no duplicates */ CoinIndexedVector &operator=(const CoinPackedVectorBase &rhs); #endif /** Copy the contents of one vector into another. If multiplier is 1 It is the equivalent of = but if vectors are same size does not re-allocate memory just clears and copies */ void copy(const CoinIndexedVector &rhs, double multiplier = 1.0); /** Borrow ownership of the arguments to this vector. Size is the length of the unpacked elements vector. */ void borrowVector(int size, int numberIndices, int *inds, double *elems); /** Return ownership of the arguments to this vector. State after is empty . */ void returnVector(); /** Set vector numberIndices, indices, and elements. NumberIndices is the length of both the indices and elements vectors. The indices and elements vectors are copied into this class instance's member data. Assumed to have no duplicates */ void setVector(int numberIndices, const int *inds, const double *elems); /** Set vector size, indices, and elements. Size is the length of the unpacked elements vector. The indices and elements vectors are copied into this class instance's member data. We do not check for duplicate indices */ void setVector(int size, int numberIndices, const int *inds, const double *elems); /** Elements set to have the same scalar value */ void setConstant(int size, const int *inds, double elems); /** Indices are not specified and are taken to be 0,1,...,size-1 */ void setFull(int size, const double *elems); /** Set an existing element in the indexed vector The first argument is the "index" into the elements() array */ void setElement(int index, double element); /// Insert an element into the vector void insert(int index, double element); /// Insert a nonzero element into the vector inline void quickInsert(int index, double element) { assert(!elements_[index]); indices_[nElements_++] = index; assert(nElements_ <= capacity_); elements_[index] = element; } /** Insert or if exists add an element into the vector Any resulting zero elements will be made tiny */ void add(int index, double element); /** Insert or if exists add an element into the vector Any resulting zero elements will be made tiny. This version does no checking */ inline void quickAdd(int index, double element) { if (elements_[index]) { element += elements_[index]; if ((element > 0 ? element : -element) >= COIN_INDEXED_TINY_ELEMENT) { elements_[index] = element; } else { elements_[index] = 1.0e-100; } } else if ((element > 0 ? element : -element) >= COIN_INDEXED_TINY_ELEMENT) { indices_[nElements_++] = index; assert(nElements_ <= capacity_); elements_[index] = element; } } /** Insert or if exists add an element into the vector Any resulting zero elements will be made tiny. This knows element is nonzero This version does no checking */ inline void quickAddNonZero(int index, double element) { assert(element); if (elements_[index]) { element += elements_[index]; if ((element > 0 ? element : -element) >= COIN_INDEXED_TINY_ELEMENT) { elements_[index] = element; } else { elements_[index] = COIN_DBL_MIN; } } else { indices_[nElements_++] = index; assert(nElements_ <= capacity_); elements_[index] = element; } } /** Makes nonzero tiny. This version does no checking */ inline void zero(int index) { if (elements_[index]) elements_[index] = COIN_DBL_MIN; } /** set all small values to zero and return number remaining - < tolerance => 0.0 */ int clean(double tolerance); /// Same but packs down int cleanAndPack(double tolerance); /// Same but packs down and is safe (i.e. if order is odd) int cleanAndPackSafe(double tolerance); /// Mark as packed inline void setPacked() { packedMode_ = true; } #ifndef NDEBUG /// For debug check vector is clear i.e. no elements void checkClear(); /// For debug check vector is clean i.e. elements match indices void checkClean(); #else inline void checkClear() {}; inline void checkClean() {}; #endif /// Scan dense region and set up indices (returns number found) int scan(); /** Scan dense region from start to < end and set up indices returns number found */ int scan(int start, int end); /** Scan dense region and set up indices (returns number found). Only ones >= tolerance */ int scan(double tolerance); /** Scan dense region from start to < end and set up indices returns number found. Only >= tolerance */ int scan(int start, int end, double tolerance); /// These are same but pack down int scanAndPack(); int scanAndPack(int start, int end); int scanAndPack(double tolerance); int scanAndPack(int start, int end, double tolerance); /// Create packed array void createPacked(int number, const int *indices, const double *elements); /// Create unpacked array void createUnpacked(int number, const int *indices, const double *elements); /// Create unpacked singleton void createOneUnpackedElement(int index, double element); /// This is mainly for testing - goes from packed to indexed void expand(); #ifndef CLP_NO_VECTOR /// Append a CoinPackedVector to the end void append(const CoinPackedVectorBase &caboose); #endif /// Append a CoinIndexedVector to the end (with extra space) void append(const CoinIndexedVector &caboose); /// Append a CoinIndexedVector to the end and modify indices void append(CoinIndexedVector &other, int adjustIndex, bool zapElements = false); /// Swap values in positions i and j of indices and elements void swap(int i, int j); /// Throw away all entries in rows >= newSize void truncate(int newSize); /// Print out void print() const; //@} /**@name Arithmetic operators. */ //@{ /// add value to every entry void operator+=(double value); /// subtract value from every entry void operator-=(double value); /// multiply every entry by value void operator*=(double value); /// divide every entry by value (** 0 vanishes) void operator/=(double value); //@} /**@name Comparison operators on two indexed vectors */ //@{ #ifndef CLP_NO_VECTOR /** Equal. Returns true if vectors have same length and corresponding element of each vector is equal. */ bool operator==(const CoinPackedVectorBase &rhs) const; /// Not equal bool operator!=(const CoinPackedVectorBase &rhs) const; #endif /** Equal. Returns true if vectors have same length and corresponding element of each vector is equal. */ bool operator==(const CoinIndexedVector &rhs) const; /// Not equal bool operator!=(const CoinIndexedVector &rhs) const; /// Equal with a tolerance (returns -1 or position of inequality). int isApproximatelyEqual(const CoinIndexedVector &rhs, double tolerance = 1.0e-8) const; //@} /**@name Index methods */ //@{ /// Get value of maximum index int getMaxIndex() const; /// Get value of minimum index int getMinIndex() const; //@} /**@name Sorting */ //@{ /** Sort the indexed storage vector (increasing indices). */ void sort() { std::sort(indices_, indices_ + nElements_); } void sortIncrIndex() { std::sort(indices_, indices_ + nElements_); } void sortDecrIndex(); void sortIncrElement(); void sortDecrElement(); void sortPacked(); //@} //############################################################################# /**@name Arithmetic operators on packed vectors. NOTE: These methods operate on those positions where at least one of the arguments has a value listed. At those positions the appropriate operation is executed, Otherwise the result of the operation is considered 0.
NOTE 2: Because these methods return an object (they can't return a reference, though they could return a pointer...) they are very inefficient... */ //@{ /// Return the sum of two indexed vectors CoinIndexedVector operator+( const CoinIndexedVector &op2); /// Return the difference of two indexed vectors CoinIndexedVector operator-( const CoinIndexedVector &op2); /// Return the element-wise product of two indexed vectors CoinIndexedVector operator*( const CoinIndexedVector &op2); /// Return the element-wise ratio of two indexed vectors (0.0/0.0 => 0.0) (0 vanishes) CoinIndexedVector operator/( const CoinIndexedVector &op2); /// The sum of two indexed vectors void operator+=(const CoinIndexedVector &op2); /// The difference of two indexed vectors void operator-=(const CoinIndexedVector &op2); /// The element-wise product of two indexed vectors void operator*=(const CoinIndexedVector &op2); /// The element-wise ratio of two indexed vectors (0.0/0.0 => 0.0) (0 vanishes) void operator/=(const CoinIndexedVector &op2); //@} /**@name Memory usage */ //@{ /** Reserve space. If one knows the eventual size of the indexed vector, then it may be more efficient to reserve the space. */ void reserve(int n); /** capacity returns the size which could be accomodated without having to reallocate storage. */ inline int capacity() const { return capacity_; } inline void setCapacity(int value) { capacity_ = value; } /// Sets packed mode inline void setPackedMode(bool yesNo) { packedMode_ = yesNo; } /// Gets packed mode inline bool packedMode() const { return packedMode_; } //@} /**@name Constructors and destructors */ //@{ /** Default constructor */ CoinIndexedVector(); /** Alternate Constructors - set elements to vector of doubles */ CoinIndexedVector(int size, const int *inds, const double *elems); /** Alternate Constructors - set elements to same scalar value */ CoinIndexedVector(int size, const int *inds, double element); /** Alternate Constructors - construct full storage with indices 0 through size-1. */ CoinIndexedVector(int size, const double *elements); /** Alternate Constructors - just size */ CoinIndexedVector(int size); /** Copy constructor. */ CoinIndexedVector(const CoinIndexedVector &); /** Copy constructor.2 */ CoinIndexedVector(const CoinIndexedVector *); #ifndef CLP_NO_VECTOR /** Copy constructor from a PackedVectorBase. */ CoinIndexedVector(const CoinPackedVectorBase &rhs); #endif /** Destructor */ ~CoinIndexedVector(); //@} private: /**@name Private methods */ //@{ /// Copy internal data void gutsOfSetVector(int size, const int *inds, const double *elems); void gutsOfSetVector(int size, int numberIndices, const int *inds, const double *elems); void gutsOfSetPackedVector(int size, int numberIndices, const int *inds, const double *elems); /// void gutsOfSetConstant(int size, const int *inds, double value); //@} protected: /**@name Private member data */ //@{ /// Vector indices int *indices_; ///Vector elements double *elements_; /// Size of indices and packed elements vectors int nElements_; /// Amount of memory allocated for indices_, and elements_. int capacity_; /// Offset to get where new allocated array int offset_; /// If true then is operating in packed mode bool packedMode_; //@} }; //############################################################################# /** A function that tests the methods in the CoinIndexedVector class. The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging. */ void CoinIndexedVectorUnitTest(); /** Pointer with length in bytes This has a pointer to an array and the number of bytes in array. If number of bytes==-1 then CoinConditionalNew deletes existing pointer and returns new pointer of correct size (and number bytes still -1). CoinConditionalDelete deletes existing pointer and NULLs it. So behavior is as normal (apart from New deleting pointer which will have no effect with good coding practices. If number of bytes >=0 then CoinConditionalNew just returns existing pointer if array big enough otherwise deletes existing pointer, allocates array with spare 1%+64 bytes and updates number of bytes CoinConditionalDelete sets number of bytes = -size-2 and then array returns NULL */ class CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline CoinBigIndex getSize() const { return static_cast< CoinBigIndex >(size_); } /// Get the size inline CoinBigIndex rawSize() const { return static_cast< CoinBigIndex >(size_); } /// See if persistence already on inline bool switchedOn() const { return size_ != -1; } /// Get the capacity (just read it) inline CoinBigIndex capacity() const { return (size_ > -2) ? static_cast< CoinBigIndex >(size_) : static_cast< CoinBigIndex >((-size_) - 2); } /// Set the capacity to >=0 if <=-2 inline void setCapacity() { if (size_ <= -2) size_ = (-size_) - 2; } /// Get Array inline const char *array() const { return (size_ > -2) ? array_ : NULL; } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value; } #if COIN_BIG_INDEX /// Set the size inline void setSize(long long value) { size_ = value; } #endif /// Set the size to -1 inline void switchOff() { size_ = -1; } /// Set the size to -2 and alignment inline void switchOn(int alignment = 3) { size_ = -2; alignment_ = alignment; } /// Does what is needed to set persistence void setPersistence(int flag, int currentLength); /// Zero out array void clear(); /// Swaps memory between two members void swap(CoinArrayWithLength &other); /// Extend a persistent array keeping data (size in bytes) void extend(int newSize); #if COIN_BIG_INDEX /// Extend a persistent array keeping data (size in bytes) void extend(long long newSize); #endif //@} /**@name Condition methods */ //@{ /// Conditionally gets new array char *conditionalNew(CoinBigIndex sizeWanted); /// Conditionally deletes void conditionalDelete(); //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinArrayWithLength() : array_(NULL) , size_(-1) , offset_(0) , alignment_(0) { } /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinArrayWithLength(CoinBigIndex size) : size_(-1) , offset_(0) , alignment_(0) { array_ = new char[size]; } /** Alternate Constructor - length in bytes mode - 0 size_ set to size mode>0 size_ set to size and zeroed if size<=0 just does alignment If abs(mode) >2 then align on that as power of 2 */ CoinArrayWithLength(CoinBigIndex size, int mode); /** Copy constructor. */ CoinArrayWithLength(const CoinArrayWithLength &rhs); /** Copy constructor.2 */ CoinArrayWithLength(const CoinArrayWithLength *rhs); /** Assignment operator. */ CoinArrayWithLength &operator=(const CoinArrayWithLength &rhs); /** Assignment with length (if -1 use internal length) */ void copy(const CoinArrayWithLength &rhs, int numberBytes = -1); /** Assignment with length - does not copy */ void allocate(const CoinArrayWithLength &rhs, CoinBigIndex numberBytes); /** Destructor */ ~CoinArrayWithLength(); /// Get array with alignment void getArray(CoinBigIndex size); /// Really get rid of array with alignment void reallyFreeArray(); /// Get enough space (if more needed then do at least needed) void getCapacity(CoinBigIndex numberBytes, CoinBigIndex numberIfNeeded = -1); //@} protected: /**@name Private member data */ //@{ /// Array char *array_; /// Size of array in bytes CoinBigIndex size_; /// Offset of array int offset_; /// Alignment wanted (power of 2) int alignment_; //@} }; /// double * version class CoinDoubleArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline CoinBigIndex getSize() const { return size_ / CoinSizeofAsInt(double); } /// Get Array inline double *array() const { return reinterpret_cast< double * >((size_ > -2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value * CoinSizeofAsInt(double); } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline double *conditionalNew(CoinBigIndex sizeWanted) { return reinterpret_cast< double * >(CoinArrayWithLength::conditionalNew(sizeWanted >= 0 ? static_cast< long long >((sizeWanted)*CoinSizeofAsInt(double)) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinDoubleArrayWithLength() { array_ = NULL; size_ = -1; } /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinDoubleArrayWithLength(int size) { array_ = new char[size * CoinSizeofAsInt(double)]; size_ = -1; } /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinDoubleArrayWithLength(int size, int mode) : CoinArrayWithLength(size * CoinSizeofAsInt(double), mode) { } /** Copy constructor. */ inline CoinDoubleArrayWithLength(const CoinDoubleArrayWithLength &rhs) : CoinArrayWithLength(rhs) { } /** Copy constructor.2 */ inline CoinDoubleArrayWithLength(const CoinDoubleArrayWithLength *rhs) : CoinArrayWithLength(rhs) { } /** Assignment operator. */ inline CoinDoubleArrayWithLength &operator=(const CoinDoubleArrayWithLength &rhs) { CoinArrayWithLength::operator=(rhs); return *this; } //@} }; /// CoinFactorizationDouble * version class CoinFactorizationDoubleArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline CoinBigIndex getSize() const { return size_ / CoinSizeofAsInt(CoinFactorizationDouble); } /// Get Array inline CoinFactorizationDouble *array() const { return reinterpret_cast< CoinFactorizationDouble * >((size_ > -2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value * CoinSizeofAsInt(CoinFactorizationDouble); } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline CoinFactorizationDouble *conditionalNew(CoinBigIndex sizeWanted) { return reinterpret_cast< CoinFactorizationDouble * >(CoinArrayWithLength::conditionalNew(sizeWanted >= 0 ? static_cast< long long >((sizeWanted)*CoinSizeofAsInt(CoinFactorizationDouble)) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinFactorizationDoubleArrayWithLength() { array_ = NULL; size_ = -1; } /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinFactorizationDoubleArrayWithLength(int size) { array_ = new char[size * CoinSizeofAsInt(CoinFactorizationDouble)]; size_ = -1; } /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinFactorizationDoubleArrayWithLength(int size, int mode) : CoinArrayWithLength(size * CoinSizeofAsInt(CoinFactorizationDouble), mode) { } /** Copy constructor. */ inline CoinFactorizationDoubleArrayWithLength(const CoinFactorizationDoubleArrayWithLength &rhs) : CoinArrayWithLength(rhs) { } /** Copy constructor.2 */ inline CoinFactorizationDoubleArrayWithLength(const CoinFactorizationDoubleArrayWithLength *rhs) : CoinArrayWithLength(rhs) { } /** Assignment operator. */ inline CoinFactorizationDoubleArrayWithLength &operator=(const CoinFactorizationDoubleArrayWithLength &rhs) { CoinArrayWithLength::operator=(rhs); return *this; } //@} }; /// CoinFactorizationLongDouble * version class CoinFactorizationLongDoubleArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline CoinBigIndex getSize() const { return size_ / CoinSizeofAsInt(long double); } /// Get Array inline long double *array() const { return reinterpret_cast< long double * >((size_ > -2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value * CoinSizeofAsInt(long double); } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline long double *conditionalNew(CoinBigIndex sizeWanted) { return reinterpret_cast< long double * >(CoinArrayWithLength::conditionalNew(sizeWanted >= 0 ? static_cast< long long >((sizeWanted)*CoinSizeofAsInt(long double)) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinFactorizationLongDoubleArrayWithLength() { array_ = NULL; size_ = -1; } /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinFactorizationLongDoubleArrayWithLength(int size) { array_ = new char[size * CoinSizeofAsInt(long double)]; size_ = -1; } /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinFactorizationLongDoubleArrayWithLength(int size, int mode) : CoinArrayWithLength(size * CoinSizeofAsInt(long double), mode) { } /** Copy constructor. */ inline CoinFactorizationLongDoubleArrayWithLength(const CoinFactorizationLongDoubleArrayWithLength &rhs) : CoinArrayWithLength(rhs) { } /** Copy constructor.2 */ inline CoinFactorizationLongDoubleArrayWithLength(const CoinFactorizationLongDoubleArrayWithLength *rhs) : CoinArrayWithLength(rhs) { } /** Assignment operator. */ inline CoinFactorizationLongDoubleArrayWithLength &operator=(const CoinFactorizationLongDoubleArrayWithLength &rhs) { CoinArrayWithLength::operator=(rhs); return *this; } //@} }; /// int * version class CoinIntArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline CoinBigIndex getSize() const { return size_ / CoinSizeofAsInt(int); } /// Get Array inline int *array() const { return reinterpret_cast< int * >((size_ > -2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value * CoinSizeofAsInt(int); } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline int *conditionalNew(CoinBigIndex sizeWanted) { return reinterpret_cast< int * >(CoinArrayWithLength::conditionalNew(sizeWanted >= 0 ? static_cast< long long >((sizeWanted)*CoinSizeofAsInt(int)) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinIntArrayWithLength() { array_ = NULL; size_ = -1; } /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinIntArrayWithLength(int size) { array_ = new char[size * CoinSizeofAsInt(int)]; size_ = -1; } /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinIntArrayWithLength(int size, int mode) : CoinArrayWithLength(size * CoinSizeofAsInt(int), mode) { } /** Copy constructor. */ inline CoinIntArrayWithLength(const CoinIntArrayWithLength &rhs) : CoinArrayWithLength(rhs) { } /** Copy constructor.2 */ inline CoinIntArrayWithLength(const CoinIntArrayWithLength *rhs) : CoinArrayWithLength(rhs) { } /** Assignment operator. */ inline CoinIntArrayWithLength &operator=(const CoinIntArrayWithLength &rhs) { CoinArrayWithLength::operator=(rhs); return *this; } //@} }; /// CoinBigIndex * version class CoinBigIndexArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline CoinBigIndex getSize() const { return size_ / CoinSizeofAsInt(CoinBigIndex); } /// Get Array inline CoinBigIndex *array() const { return reinterpret_cast< CoinBigIndex * >((size_ > -2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(CoinBigIndex value) { size_ = value * CoinSizeofAsInt(CoinBigIndex); } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline CoinBigIndex *conditionalNew(CoinBigIndex sizeWanted) { return reinterpret_cast< CoinBigIndex * >(CoinArrayWithLength::conditionalNew(sizeWanted >= 0 ? static_cast< long long >((sizeWanted)*CoinSizeofAsInt(CoinBigIndex)) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinBigIndexArrayWithLength() { array_ = NULL; size_ = -1; } /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinBigIndexArrayWithLength(CoinBigIndex size) { array_ = new char[size * CoinSizeofAsInt(CoinBigIndex)]; size_ = -1; } /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinBigIndexArrayWithLength(CoinBigIndex size, int mode) : CoinArrayWithLength(size * CoinSizeofAsInt(CoinBigIndex), mode) { } /** Copy constructor. */ inline CoinBigIndexArrayWithLength(const CoinBigIndexArrayWithLength &rhs) : CoinArrayWithLength(rhs) { } /** Copy constructor.2 */ inline CoinBigIndexArrayWithLength(const CoinBigIndexArrayWithLength *rhs) : CoinArrayWithLength(rhs) { } /** Assignment operator. */ inline CoinBigIndexArrayWithLength &operator=(const CoinBigIndexArrayWithLength &rhs) { CoinArrayWithLength::operator=(rhs); return *this; } //@} }; /// unsigned int * version class CoinUnsignedIntArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline CoinBigIndex getSize() const { return size_ / CoinSizeofAsInt(unsigned int); } /// Get Array inline unsigned int *array() const { return reinterpret_cast< unsigned int * >((size_ > -2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value * CoinSizeofAsInt(unsigned int); } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline unsigned int *conditionalNew(CoinBigIndex sizeWanted) { return reinterpret_cast< unsigned int * >(CoinArrayWithLength::conditionalNew(sizeWanted >= 0 ? static_cast< long long >((sizeWanted)*CoinSizeofAsInt(unsigned int)) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinUnsignedIntArrayWithLength() { array_ = NULL; size_ = -1; } /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinUnsignedIntArrayWithLength(int size) { array_ = new char[size * CoinSizeofAsInt(unsigned int)]; size_ = -1; } /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinUnsignedIntArrayWithLength(int size, int mode) : CoinArrayWithLength(size * CoinSizeofAsInt(unsigned int), mode) { } /** Copy constructor. */ inline CoinUnsignedIntArrayWithLength(const CoinUnsignedIntArrayWithLength &rhs) : CoinArrayWithLength(rhs) { } /** Copy constructor.2 */ inline CoinUnsignedIntArrayWithLength(const CoinUnsignedIntArrayWithLength *rhs) : CoinArrayWithLength(rhs) { } /** Assignment operator. */ inline CoinUnsignedIntArrayWithLength &operator=(const CoinUnsignedIntArrayWithLength &rhs) { CoinArrayWithLength::operator=(rhs); return *this; } //@} }; /// void * version class CoinVoidStarArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline CoinBigIndex getSize() const { return size_ / CoinSizeofAsInt(void *); } /// Get Array inline void **array() const { return reinterpret_cast< void ** >((size_ > -2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value * CoinSizeofAsInt(void *); } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline void **conditionalNew(CoinBigIndex sizeWanted) { return reinterpret_cast< void ** >(CoinArrayWithLength::conditionalNew(sizeWanted >= 0 ? static_cast< long long >((sizeWanted)*CoinSizeofAsInt(void *)) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinVoidStarArrayWithLength() { array_ = NULL; size_ = -1; } /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinVoidStarArrayWithLength(int size) { array_ = new char[size * CoinSizeofAsInt(void *)]; size_ = -1; } /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinVoidStarArrayWithLength(int size, int mode) : CoinArrayWithLength(size * CoinSizeofAsInt(void *), mode) { } /** Copy constructor. */ inline CoinVoidStarArrayWithLength(const CoinVoidStarArrayWithLength &rhs) : CoinArrayWithLength(rhs) { } /** Copy constructor.2 */ inline CoinVoidStarArrayWithLength(const CoinVoidStarArrayWithLength *rhs) : CoinArrayWithLength(rhs) { } /** Assignment operator. */ inline CoinVoidStarArrayWithLength &operator=(const CoinVoidStarArrayWithLength &rhs) { CoinArrayWithLength::operator=(rhs); return *this; } //@} }; /// arbitrary version class CoinArbitraryArrayWithLength : public CoinArrayWithLength { public: /**@name Get methods. */ //@{ /// Get the size inline CoinBigIndex getSize() const { return size_ / lengthInBytes_; } /// Get Array inline void **array() const { return reinterpret_cast< void ** >((size_ > -2) ? array_ : NULL); } //@} /**@name Set methods */ //@{ /// Set the size inline void setSize(int value) { size_ = value * lengthInBytes_; } //@} /**@name Condition methods */ //@{ /// Conditionally gets new array inline char *conditionalNew(CoinBigIndex length, CoinBigIndex sizeWanted) { lengthInBytes_ = length; return reinterpret_cast< char * >(CoinArrayWithLength::conditionalNew(sizeWanted >= 0 ? static_cast< long long >((sizeWanted)*lengthInBytes_) : -1)); } //@} /**@name Constructors and destructors */ //@{ /** Default constructor - NULL*/ inline CoinArbitraryArrayWithLength(int length = 1) { array_ = NULL; size_ = -1; lengthInBytes_ = length; } /** Alternate Constructor - length in bytes - size_ -1 */ inline CoinArbitraryArrayWithLength(int length, int size) { array_ = new char[size * length]; size_ = -1; lengthInBytes_ = length; } /** Alternate Constructor - length in bytes mode - 0 size_ set to size 1 size_ set to size and zeroed */ inline CoinArbitraryArrayWithLength(int length, int size, int mode) : CoinArrayWithLength(size * length, mode) { lengthInBytes_ = length; } /** Copy constructor. */ inline CoinArbitraryArrayWithLength(const CoinArbitraryArrayWithLength &rhs) : CoinArrayWithLength(rhs) { } /** Copy constructor.2 */ inline CoinArbitraryArrayWithLength(const CoinArbitraryArrayWithLength *rhs) : CoinArrayWithLength(rhs) { } /** Assignment operator. */ inline CoinArbitraryArrayWithLength &operator=(const CoinArbitraryArrayWithLength &rhs) { CoinArrayWithLength::operator=(rhs); return *this; } //@} protected: /**@name Private member data */ //@{ /// Length in bytes CoinBigIndex lengthInBytes_; //@} }; class CoinPartitionedVector : public CoinIndexedVector { public: #ifndef COIN_PARTITIONS #define COIN_PARTITIONS 8 #endif /**@name Get methods. */ //@{ /// Get the size of a partition inline int getNumElements(int partition) const { assert(partition < COIN_PARTITIONS); return numberElementsPartition_[partition]; } /// Get number of partitions inline int getNumPartitions() const { return numberPartitions_; } /// Get the size inline int getNumElements() const { return nElements_; } /// Get starts inline int startPartition(int partition) const { assert(partition <= COIN_PARTITIONS); return startPartition_[partition]; } /// Get starts inline const int *startPartitions() const { return startPartition_; } //@} //------------------------------------------------------------------- // Set indices and elements //------------------------------------------------------------------- /**@name Set methods */ //@{ /// Set the size of a partition inline void setNumElementsPartition(int partition, int value) { assert(partition < COIN_PARTITIONS); if (numberPartitions_) numberElementsPartition_[partition] = value; } /// Set the size of a partition (just for a tiny while) inline void setTempNumElementsPartition(int partition, int value) { assert(partition < COIN_PARTITIONS); numberElementsPartition_[partition] = value; } /// Add up number of elements in partitions void computeNumberElements(); /// Add up number of elements in partitions and pack and get rid of partitions void compact(); /** Reserve space. */ void reserve(int n); /// Setup partitions (needs end as well) void setPartitions(int number, const int *starts); /// Reset the vector (as if were just created an empty vector). Gets rid of partitions void clearAndReset(); /// Reset the vector (as if were just created an empty vector). Keeps partitions void clearAndKeep(); /// Clear a partition. void clearPartition(int partition); #ifndef NDEBUG /// For debug check vector is clear i.e. no elements void checkClear(); /// For debug check vector is clean i.e. elements match indices void checkClean(); #else inline void checkClear() {}; inline void checkClean() {}; #endif /// Scan dense region and set up indices (returns number found) int scan(int partition, double tolerance = 0.0); /** Scan dense region from start to < end and set up indices returns number found */ /// Print out void print() const; //@} /**@name Sorting */ //@{ /** Sort the indexed storage vector (increasing indices). */ void sort(); //@} /**@name Constructors and destructors (not all wriiten) */ //@{ /** Default constructor */ CoinPartitionedVector(); /** Alternate Constructors - set elements to vector of doubles */ CoinPartitionedVector(int size, const int *inds, const double *elems); /** Alternate Constructors - set elements to same scalar value */ CoinPartitionedVector(int size, const int *inds, double element); /** Alternate Constructors - construct full storage with indices 0 through size-1. */ CoinPartitionedVector(int size, const double *elements); /** Alternate Constructors - just size */ CoinPartitionedVector(int size); /** Copy constructor. */ CoinPartitionedVector(const CoinPartitionedVector &); /** Copy constructor.2 */ CoinPartitionedVector(const CoinPartitionedVector *); /** Assignment operator. */ CoinPartitionedVector &operator=(const CoinPartitionedVector &); /** Destructor */ ~CoinPartitionedVector(); //@} protected: /**@name Private member data */ //@{ /// Starts int startPartition_[COIN_PARTITIONS + 1]; /// Size of indices in a partition int numberElementsPartition_[COIN_PARTITIONS]; /// Number of partitions (0 means off) int numberPartitions_; //@} }; inline double *roundUpDouble(double *address) { // align on 64 byte boundary CoinInt64 xx = reinterpret_cast< CoinInt64 >(address); int iBottom = static_cast< int >(xx & 63); if (iBottom) return address + ((64 - iBottom) >> 3); else return address; } #endif DyLP-1.10.4/CoinUtils/src/CoinPresolvePsdebug.cpp0000644000175200017520000011327613414454441020217 0ustar coincoin/* $Id: CoinPresolvePsdebug.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include "CoinPresolveMatrix.hpp" #include "CoinHelperFunctions.hpp" /* \file This file contains a number of routines that are useful when doing serious debugging but unneeded otherwise. It also contains the methods that implement the CoinPresolveMonitor class. Presumably if you're deep enough into presolve to need these, you're willing to scan the file to see what can be done. See also the Presolve Debug Functions module in the doxygen doc'n and CoinPresolvePsdebug.hpp. The general approach for the matrix consistency routines is that the routines return void and abort when they find a problem. The routines that check the basis and solution complain loudly but do not abort. NOTE: The definitions for PRESOLVE_CONSISTENCY and PRESOLVE_DEBUG MUST BE CONSISTENT across all CoinPresolve source files AND OsiPresolve AND ClpPresolve AND OsiDylpPresolve (assuming any of the latter are relevant to your code). Otherwise, at best you'll get garbage output. More likely, you'll get a core dump. Resist the temptation to define these constants in individual files. In particular, cdone and rdone will NOT be consistently maintained during postsolve. Hack away as your needs dictate. */ /* Integrity checking routines for the (loosely) packed matrices of a CoinPresolveMatrix object. Some routines work on column-major and row-major reps separately, others do cross-checking. */ namespace { // begin unnamed file-local namespace #if PRESOLVE_DEBUG || PRESOLVE_CONSISTENCY /* Check for duplicate entries in a major vector by walking the vector. For each coefficient, use presolve_find_minor1 to search the remainder of the major vector for an entry with the same minor index. We don't want to find anything. */ void no_majvec_dups(const char *majdones, const CoinBigIndex *majstrts, const int *minndxs, const int *majlens, int nmaj) { for (int maj = 0; maj < nmaj; maj++) { if ((!majdones || majdones[maj]) && majlens[maj] > 0) { CoinBigIndex ks = majstrts[maj]; CoinBigIndex ke = ks + majlens[maj]; for (CoinBigIndex k = ks; k < ke; k++) { /* Assert we fell off the end of the major vector without finding the entry. */ PRESOLVEASSERT(presolve_find_minor1(minndxs[k], k + 1, ke, minndxs) == ke); } } } return; } /* As the name implies: scan for explicit zeros. */ void check_majvec_nozeros(const CoinBigIndex *majstrts, const double *majels, const int *majlens, int nmaj) { for (int maj = 0; maj < nmaj; maj++) { if (majlens[maj] > 0) { CoinBigIndex ks = majstrts[maj]; CoinBigIndex ke = ks + majlens[maj]; for (CoinBigIndex k = ks; k < ke; k++) { PRESOLVEASSERT(fabs(majels[k]) > ZTOLDP); } } } return; } /* Integrity checks for the linked lists that indicate major vector ordering in the bulk storage area (minor index and coefficient arrays). */ void links_ok(presolvehlink *majlink, int *majstrts, int *majlens, int nmaj) { int maj; /* Confirm link integrity. Vectors of length 0 should not be part of the chain. */ for (maj = 0; maj < nmaj; maj++) { int pre = majlink[maj].pre; int suc = majlink[maj].suc; if (majlens[maj] == 0) { PRESOLVEASSERT(pre == NO_LINK && suc == NO_LINK); } if (pre != NO_LINK) { PRESOLVEASSERT(0 <= pre && pre <= nmaj); PRESOLVEASSERT(majlink[pre].suc == maj); } if (suc != NO_LINK) { PRESOLVEASSERT(0 <= suc && suc <= nmaj); PRESOLVEASSERT(majlink[suc].pre == maj); } } /* There must be a first vector. */ for (maj = 0; maj < nmaj; maj++) { if (majlink[maj].pre == NO_LINK) break; } PRESOLVEASSERT(nmaj == 0 || maj < nmaj); /* The order of the linked list should match the ordering indicated by the major vector start & length arrays. */ while (maj != NO_LINK) { if (majlink[maj].suc != NO_LINK) { PRESOLVEASSERT(majstrts[maj] + majlens[maj] <= majstrts[majlink[maj].suc]); } maj = majlink[maj].suc; } return; } /* matrix_consistent checks that an entry is in the column-major representation if it is in the row-major representation. If testvals is non-zero, it also checks that their values are the same. By doing the appropriate swaps of column- and row-major data structures in the parameter list, we can check that an entry is in the row-major representation if it's in the column-major representation. I can't see any nice way to rename the parameters (majmajstrt? minmajstrt?). Original comment: ``Note that there may be entries in a row that correspond to empty columns and vice-versa.'' To which a previous browser had commented ``HUH???''. And I agree. -- lh, 040907 -- */ void matrix_consistent(const CoinBigIndex *mrstrt, const int *hinrow, const int *hcol, const double *rowels, const CoinBigIndex *mcstrt, const int *hincol, const int *hrow, const double *colels, int nrows, int testvals, const char *ROW, const char *COL) { for (int irow = 0; irow < nrows; irow++) { if (hinrow[irow] > 0) { const CoinBigIndex krs = mrstrt[irow]; const CoinBigIndex kre = krs + hinrow[irow]; for (CoinBigIndex k = krs; k < kre; k++) { int jcol = hcol[k]; const CoinBigIndex kcs = mcstrt[jcol]; const CoinBigIndex kce = kcs + hincol[jcol]; CoinBigIndex kk = presolve_find_row1(irow, kcs, kce, hrow); if (kk == kce) { std::cout << "MATRIX INCONSISTENT: can't find " << ROW << " " << irow << " in " << COL << " " << jcol << std::endl; fflush(stdout); abort(); } if (testvals && colels[kk] != rowels[k]) { std::cout << "MATRIX INCONSISTENT: values differ for " << ROW << " " << irow << " and " << COL << " " << jcol << std::endl; fflush(stdout); abort(); } } } } } #endif } // end unnamed file-local namespace /* Utilizes matrix_consistent to check for equivalence of the column- and row-major representations. Checks for presence of coefficients in the column-major matrix, given presence in the row-major matrix, then checks for presence in the row-major matrix given presence in the column-major matrix. If testvals == true (default), the check also tests that the coefficients have equal value. See further comments with matrix_consistent. */ #if PRESOLVE_CONSISTENCY void presolve_consistent(const CoinPresolveMatrix *preObj, bool testvals) { matrix_consistent(preObj->mrstrt_, preObj->hinrow_, preObj->hcol_, preObj->rowels_, preObj->mcstrt_, preObj->hincol_, preObj->hrow_, preObj->colels_, preObj->nrows_, testvals, "row", "col"); matrix_consistent(preObj->mcstrt_, preObj->hincol_, preObj->hrow_, preObj->colels_, preObj->mrstrt_, preObj->hinrow_, preObj->hcol_, preObj->rowels_, preObj->ncols_, testvals, "col", "row"); } /* Check the column- and/or row-major matrices for duplicates. By default, both will be checked. */ void presolve_no_dups(const CoinPresolveMatrix *preObj, bool doCol, bool doRow) { if (doCol) { no_majvec_dups(0, preObj->mcstrt_, preObj->hrow_, preObj->hincol_, preObj->ncols_); } if (doRow) { no_majvec_dups(0, preObj->mrstrt_, preObj->hcol_, preObj->hinrow_, preObj->nrows_); } return; } /* As the name implies: scan for explicit zeros. By default, both matrices are scanned. */ void presolve_no_zeros(const CoinPresolveMatrix *preObj, bool doCol, bool doRow) { if (doCol) { check_majvec_nozeros(preObj->mcstrt_, preObj->colels_, preObj->hincol_, preObj->ncols_); } if (doRow) { check_majvec_nozeros(preObj->mrstrt_, preObj->rowels_, preObj->hinrow_, preObj->nrows_); } return; } /* Lazy check on column lengths. Scan the row index array for the column. If the relevant row length in the row-major rep is non-zero, assume we're ok. Not advertised in CoinPresolvePsdebug.hpp. */ void presolve_hincol_ok(const int *mcstrt, const int *hincol, const int *hinrow, const int *hrow, int ncols) { int jcol; for (jcol = 0; jcol < ncols; jcol++) if (hincol[jcol] > 0) { int kcs = mcstrt[jcol]; int kce = kcs + hincol[jcol]; int n = 0; int k; for (k = kcs; k < kce; k++) { int row = hrow[k]; if (hinrow[row] > 0) n++; } if (n != hincol[jcol]) abort(); } } /* Integrity checks for the linked lists that indicate major vector ordering in the bulk storage area (minor index and coefficient arrays). */ void presolve_links_ok(const CoinPresolveMatrix *preObj, bool doCol, bool doRow) { if (doCol) { links_ok(preObj->clink_, preObj->mcstrt_, preObj->hincol_, preObj->ncols_); } if (doRow) { links_ok(preObj->rlink_, preObj->mrstrt_, preObj->hinrow_, preObj->nrows_); } return; } /* Routines to check a threaded matrix from a CoinPostsolve object. */ /* Check that the column length agrees with the column thread. There must be the correct number of coefficients, and the thread must end with the NO_LINK marker. */ void presolve_check_threads(const CoinPostsolveMatrix *obj) { CoinBigIndex *mcstrt = obj->mcstrt_; int *hincol = obj->hincol_; CoinBigIndex *link = obj->link_; char *cdone = obj->cdone_; int n = obj->ncols0_; /* Scan the columns, checking only the ones that have been processed into the constraint matrix. */ for (int j = 0; j < n; j++) { if (!cdone[j]) continue; int lenj = hincol[j]; int k; for (k = mcstrt[j]; k != NO_LINK && lenj > 0; k = link[k]) { assert(k >= 0 && k < obj->maxlink_); lenj--; } assert(k == NO_LINK && lenj == 0); } return; } /* Check the free list. We're looking for gross corruption here. The notion is that the free list plus elements in the matrix should add up to the capacity of the bulk store. */ void presolve_check_free_list(const CoinPostsolveMatrix *obj, bool chkElemCnt) { CoinBigIndex k = obj->free_list_; CoinBigIndex freeCnt = 0; CoinBigIndex maxlink = obj->maxlink_; CoinBigIndex *link = obj->link_; /* Redundancy in the data structure. These should always be equal. */ assert(maxlink == obj->bulk0_); /* Walk the free list portion of link. We should never point outside the bulk store. If we ever come across an entry that's less than 0, it had better be NO_LINK, the end marker. */ while (k >= 0) { assert(k < maxlink); freeCnt++; k = link[k]; } assert(k == NO_LINK); /* And a final test: elements in the matrix plus free space should equal the size of the bulk area. A good thought, but less than practical. Currently postsolve doesn't track the number of elements in the matrix. But you might find it useful if you're checking a newly constructed postsolve matrix. Even then, you need to make sure nelems_ is correct. In the normal scheme of things, this requires that somewhere there's a count of elements. Right now, drop_empty_cols_action::presolve does this count, and you can get an accurate value from the presolve object. assignPresolveToPostsolve will transfer this value. Otherwise you're on your own --- your constructor must somehow find this count. Using a standard CoinPackedMatrix is another way to get a count. */ if (chkElemCnt) { assert(obj->nelems_ + freeCnt == maxlink); } return; } #endif /* Routines to check solution and basis composition. */ /* CoinPostsolveMatrix This routine performs two checks on reduced costs held in rcosts_: * The value held in rcosts_ is checked against the status of the variable. Errors reported as "Bad rcost" * The reduced cost is calculated from scratch and compared to the value held in rcosts_. Errors reported as "Inacc rcost" Remember that postsolve has a schizophrenic attitude about maximisation. All transforms assume minimisation, and that's reflected in the reduced costs we see here. And you must load duals and reduced costs with the correct sign for minimisation. But, as a small courtesy (and a big inconsistency), postsolve will negate objective coefficients for you. Hence the rather odd use of maxmin. The routine is specific to CoinPostsolveMatrix because the reduced cost calculation requires traversal of (threaded) matrix columns. NOTE: This routine holds static variables. It will detect when the problem size changes and reinitialise. If you use presolve debugging over multiple problems and you want to be dead sure of reinitialisation, use the call presolve_check_reduced_costs(0), which will reinitialise and return. */ #if PRESOLVE_DEBUG void presolve_check_reduced_costs(const CoinPostsolveMatrix *postObj) { static bool warned = false; static double *warned_rcosts = 0; static int allocSize = 0; static const CoinPostsolveMatrix *lastObj = 0; /* Is the client asking for reinitialisation only? */ if (postObj == 0) { warned = false; if (warned_rcosts != 0) { delete[] warned_rcosts; warned_rcosts = 0; } allocSize = 0; lastObj = 0; return; } /* *Should* the client have asked for reinitialisation? */ int ncols0 = postObj->ncols0_; if (allocSize < ncols0 || postObj != lastObj) { warned = false; delete[] warned_rcosts; warned_rcosts = 0; allocSize = 0; lastObj = postObj; } double *rcosts = postObj->rcosts_; /* By tracking values in warned_rcosts, we can produce a single message the first time a value is determined to be incorrect. */ if (!warned) { warned = true; std::cout << "reduced cost" << std::endl; warned_rcosts = new double[ncols0]; CoinZeroN(warned_rcosts, ncols0); } double *colels = postObj->colels_; int *hrow = postObj->hrow_; int *mcstrt = postObj->mcstrt_; int *hincol = postObj->hincol_; CoinBigIndex *link = postObj->link_; double *clo = postObj->clo_; double *cup = postObj->cup_; double *dcost = postObj->cost_; double *sol = postObj->sol_; char *cdone = postObj->cdone_; char *rdone = postObj->rdone_; const double ztoldj = postObj->ztoldj_; const double ztolzb = postObj->ztolzb_; double *rowduals = postObj->rowduals_; double maxmin = postObj->maxmin_; std::string strMaxmin((maxmin < 0) ? "max" : "min"); int checkCol = -1; /* Scan all columns, but only check the ones that are marked as having been postprocessed. */ for (int j = 0; j < ncols0; j++) { if (cdone[j] == 0) continue; const char *statjstr = postObj->columnStatusString(j); /* Check the stored reduced cost for accuracy. See note above w.r.t. maxmin. */ double dj = rcosts[j]; double wrndj = warned_rcosts[j]; { int ndx; CoinBigIndex k = mcstrt[j]; int len = hincol[j]; double chkdj = maxmin * dcost[j]; if (j == checkCol) std::cout << "dj for " << j << " is " << dj << " - cost is " << chkdj << std::endl; for (ndx = 0; ndx < len; ndx++) { int row = hrow[k]; PRESOLVEASSERT(rdone[row] != 0); chkdj -= rowduals[row] * colels[k]; if (j == checkCol) std::cout << "row " << row << " coeff " << colels[k] << " dual " << rowduals[row] << " => dj " << chkdj << std::endl; k = link[k]; } if (fabs(dj - chkdj) > ztoldj && wrndj != dj) { std::cout << "Inacc rcost: " << j << " " << statjstr << " " << strMaxmin << " have " << dj << " should be " << chkdj << " err " << fabs(dj - chkdj) << std::endl; } } /* Check the stored reduced cost for consistency with the variable's status. The cases are * basic: (reduced cost) == 0 * at upper bound and not at lower bound: (reduced cost)*(maxmin) <= 0 * at lower bound and not at upper bound: (reduced cost)*(maxmin) >= 0 * not at either bound: any sign is correct (the variable can move either way) but superbasic status is sufficiently exotic that it always deserves a message. (There should be no superbasic variables at the completion of postsolve.) As a courtesy, show the reduced cost with the proper sign. */ { double xj = sol[j]; double lj = clo[j]; double uj = cup[j]; if (postObj->columnIsBasic(j)) { if (fabs(dj) > ztoldj && wrndj != dj) { std::cout << "Bad rcost: " << j << " " << maxmin * dj << " " << statjstr << " " << strMaxmin << std::endl; } } else if (fabs(xj - uj) < ztolzb && fabs(xj - lj) > ztolzb) { if (dj >= ztoldj && wrndj != dj) { std::cout << "Bad rcost: " << j << " " << maxmin * dj << " " << statjstr << " " << strMaxmin << std::endl; } } else if (fabs(xj - lj) < ztolzb && fabs(xj - uj) > ztolzb) { if (dj <= -ztoldj && wrndj != dj) { std::cout << "Bad rcost: " << j << " " << maxmin * dj << " " << statjstr << " " << strMaxmin << std::endl; } } else if (fabs(xj - lj) > ztolzb && fabs(xj - uj) > ztolzb) { if (fabs(dj) > ztoldj && wrndj != dj) { std::cout << "Superbasic rcost: " << j << " " << maxmin * dj << " " << statjstr << " " << strMaxmin << " lb " << lj << " val " << xj << " ub " << uj << std::endl; } } } warned_rcosts[j] = rcosts[j]; } } /* CoinPostsolveMatrix This routine checks the value and status of the dual variables. It checks that the value and status of the dual agree with the row activity. Errors are reported as "Bad dual" See presolve_check_reduced_costs for an explanation of the use of maxmin. Specific to CoinPostsolveMatrix due to the use of rdone. This could be fixed, but probably better to clone the function and specialise it for CoinPresolveMatrix. */ void presolve_check_duals(const CoinPostsolveMatrix *postObj) { int nrows0 = postObj->nrows0_; double *rowduals = postObj->rowduals_; double *acts = postObj->acts_; double *rup = postObj->rup_; double *rlo = postObj->rlo_; char *rdone = postObj->rdone_; const double ztoldj = postObj->ztoldj_; const double ztolzb = postObj->ztolzb_; double maxmin = postObj->maxmin_; std::string strMaxmin((maxmin < 0) ? "max" : "min"); /* Scan all processed rows. The rules are as for normal reduced costs, but we need to remember the various flips and inversions. In summary, the correct situation at optimality (minimisation) is: * acts[i] == rup[i] ==> artificial NBLB ==> dual[i] < 0 * acts[i] == rlo[i] ==> artificial NBUB ==> dual[i] > 0 We can't say much about the dual for an equality. It can go either way. As a courtesy, show the dual with the proper sign. */ for (int i = 0; i < nrows0; i++) { if (rdone[i] == 0) continue; double ui = rup[i]; double li = rlo[i]; if (ui - li < 1.0e-6) continue; double yi = rowduals[i]; double lhsi = acts[i]; const char *statistr = postObj->rowStatusString(i); if (fabs(lhsi - li) < ztolzb) { if (yi < -ztoldj) { std::cout << "Bad dual: " << i << " " << maxmin * yi << " " << statistr << " " << strMaxmin << std::endl; } } else if (fabs(lhsi - ui) < ztolzb) { if (yi > ztoldj) { std::cout << "Bad dual: " << i << " " << maxmin * yi << " " << statistr << " " << strMaxmin << std::endl; } } else if (li < lhsi && lhsi < ui) { if (fabs(yi) > ztoldj) { std::cout << "Bad dual: " << i << " " << maxmin * yi << " " << statistr << " " << strMaxmin << std::endl; } } } return; } /* CoinPresolveMatrix This routine will check the primal (column) solution for feasibility and status. If there's no column solution (sol_), the routine bails out. If the column solution is present, all else is assumed to be present. chkColSol: check colum solution (primal variables) 0 - checks off 1 - check for NaN/Inf *2 - check for above/below column bounds chkRowAct: check row solution (evaluate constraint lhs) 0 - checks off *1 - check for NaN/Inf 2 - check for inaccuracy, above/below row bounds chkStatus: check for valid status of variables 0 - checks off *1 - check status of architecturals, if colstat_ exists 2 - check status rows, if rowstat_ exists In order to check row status we need accurate row activity. Setting chkStatus to 2 forces chkRowAct to 2. CoinPrePostsolveMatrix plays games with colstat_ and rowstat_, allocating them as a single vector, so if colstat_ exists, rowstat_ really should exist. Check it anyway; this is a debug method, be robust. In general, the presolve transforms are not prepared to properly adjust the row activity (reported as `Inacc RSOL'). Postsolve transforms do better. On the bright side, the code seems to work just fine without maintaining row activity. You probably don't want to use the level 2 checks for the row solution, particularly in presolve. With a bit of thought, the various checks could be more cleanly separated to require only the minimum information for each check. */ void presolve_check_sol(const CoinPresolveMatrix *preObj, int chkColSol, int chkRowAct, int chkStatus) { double *colels = preObj->colels_; int *hrow = preObj->hrow_; int *mcstrt = preObj->mcstrt_; int *hincol = preObj->hincol_; int *hinrow = preObj->hinrow_; int n = preObj->ncols_; int m = preObj->nrows_; /* If there's no column solution, bail out now. */ if (preObj->sol_ == 0) return; double *csol = preObj->sol_; double *acts = preObj->acts_; double *clo = preObj->clo_; double *cup = preObj->cup_; double *rlo = preObj->rlo_; double *rup = preObj->rup_; double tol = preObj->ztolzb_; if (chkStatus >= 2) chkRowAct = 2; double *rsol = 0; if (chkRowAct) { rsol = new double[m]; memset(rsol, 0, m * sizeof(double)); } /* Open a loop to scan each column. For each column, do the following: * Update the row solution (lhs value) by adding the contribution from this column. * Check for bogus values (NaN, infinity) * Check for feasibility (value within column bounds) * Check that the status of the variable agrees with the value and with the lower and upper bounds. Free should have no bounds, superbasic should have at least one. */ for (int j = 0; j < n; ++j) { CoinBigIndex v = mcstrt[j]; int colLen = hincol[j]; double xj = csol[j]; double lj = clo[j]; double uj = cup[j]; if (chkRowAct >= 1) { for (int u = 0; u < colLen; ++u) { int i = hrow[v]; double aij = colels[v]; v++; rsol[i] += aij * xj; } } if (chkColSol > 0) { if (CoinIsnan(xj)) { printf("NaN CSOL: %d : lb = %g x = %g ub = %g\n", j, lj, xj, uj); } if (xj <= -PRESOLVE_INF || xj >= PRESOLVE_INF) { printf("Inf CSOL: %d : lb = %g x = %g ub = %g\n", j, lj, xj, uj); } if (chkColSol > 1) { if (xj < lj - tol) { printf("low CSOL: %d : lb = %g x = %g ub = %g\n", j, lj, xj, uj); } else if (xj > uj + tol) { printf("high CSOL: %d : lb = %g x = %g ub = %g\n", j, lj, xj, uj); } } } if (chkStatus && preObj->colstat_) { CoinPrePostsolveMatrix::Status statj = preObj->getColumnStatus(j); switch (statj) { case CoinPrePostsolveMatrix::atUpperBound: { if (uj >= PRESOLVE_INF || fabs(xj - uj) > tol) { printf("Bad status CSOL: %d : status atUpperBound : ", j); printf("lb = %g x = %g ub = %g\n", lj, xj, uj); } break; } case CoinPrePostsolveMatrix::atLowerBound: { if (lj <= -PRESOLVE_INF || fabs(xj - lj) > tol) { printf("Bad status CSOL: %d : status atLowerBound : ", j); printf("lb = %g x = %g ub = %g\n", lj, xj, uj); } break; } case CoinPrePostsolveMatrix::isFree: { if (lj > -PRESOLVE_INF || uj < PRESOLVE_INF) { printf("Bad status CSOL: %d : status isFree : ", j); printf("lb = %g x = %g ub = %g\n", lj, xj, uj); } break; } case CoinPrePostsolveMatrix::superBasic: { if (!(lj > -PRESOLVE_INF || uj < PRESOLVE_INF)) { printf("Bad status CSOL: %d : status superBasic : ", j); printf("lb = %g x = %g ub = %g\n", lj, xj, uj); } break; } case CoinPrePostsolveMatrix::basic: { /* Nothing to do here. */ break; } default: { printf("Bad status CSOL: %d : status unrecognized : ", j); break; } } } } /* Now check the row solution. acts[i] is what presolve thinks we have, rsol[i] is what we've just calculated while scanning the columns. We need only check nontrivial rows (i.e., rows with length > 0). For each row, * Check for bogus values (NaN, infinity) * Check for accuracy (acts == rsol) * Check for feasibility (rsol within row bounds) */ tol *= 1.0e3; if (chkRowAct >= 1) { for (int i = 0; i < m; ++i) { if (hinrow[i]) { double lhsi = acts[i]; double evali = rsol[i]; double li = rlo[i]; double ui = rup[i]; if (CoinIsnan(evali) || CoinIsnan(lhsi)) { printf("NaN RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i, li, evali, lhsi, ui); } if (evali <= -PRESOLVE_INF || evali >= PRESOLVE_INF || lhsi <= -PRESOLVE_INF || lhsi >= PRESOLVE_INF) { printf("Inf RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i, li, evali, lhsi, ui); } if (chkRowAct >= 2) { if (fabs(evali - lhsi) > tol) { printf("Inacc RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i, li, evali, lhsi, ui); } if (evali < li - tol || lhsi < li - tol) { printf("low RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i, li, evali, lhsi, ui); } else if (evali > ui + tol || lhsi > ui + tol) { printf("high RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i, li, evali, lhsi, ui); } } if (chkStatus >= 2 && preObj->rowstat_) { CoinPrePostsolveMatrix::Status stati = preObj->getRowStatus(i); switch (stati) { case CoinPrePostsolveMatrix::atUpperBound: { if (li <= -PRESOLVE_INF || fabs(lhsi - li) > tol) { printf("Bad status RSOL: %d : status atUpperBound : ", i); printf("LB = %g lhs = %g UB = %g\n", li, lhsi, ui); } break; } case CoinPrePostsolveMatrix::atLowerBound: { if (ui >= PRESOLVE_INF || fabs(lhsi - ui) > tol) { printf("Bad status RSOL: %d : status atLowerBound : ", i); printf("LB = %g lhs = %g UB = %g\n", li, lhsi, ui); } break; } case CoinPrePostsolveMatrix::isFree: { if (li > -PRESOLVE_INF || ui < PRESOLVE_INF) { printf("Bad status RSOL: %d : status isFree : ", i); printf("LB = %g lhs = %g UB = %g\n", li, lhsi, ui); } break; } case CoinPrePostsolveMatrix::superBasic: { printf("Bad status RSOL: %d : status superBasic : ", i); printf("LB = %g lhs = %g UB = %g\n", li, lhsi, ui); break; } case CoinPrePostsolveMatrix::basic: { /* Nothing to do here. */ break; } default: { printf("Bad status RSOL: %d : status unrecognized : ", i); break; } } } } } delete[] rsol; } return; } /* CoinPostsolveMatrix check_sol overload for CoinPostsolveMatrix. Parameters and functionality identical to check_sol immediately above, but we have to remember we're working with a threaded column-major representation. */ void presolve_check_sol(const CoinPostsolveMatrix *postObj, int chkColSol, int chkRowAct, int chkStatus) { double *colels = postObj->colels_; int *hrow = postObj->hrow_; int *mcstrt = postObj->mcstrt_; int *hincol = postObj->hincol_; int *link = postObj->link_; int n = postObj->ncols_; int m = postObj->nrows_; double *csol = postObj->sol_; double *acts = postObj->acts_; double *clo = postObj->clo_; double *cup = postObj->cup_; double *rlo = postObj->rlo_; double *rup = postObj->rup_; double tol = postObj->ztolzb_; if (chkStatus >= 2) chkRowAct = 2; double *rsol = 0; if (chkRowAct >= 1) { rsol = new double[m]; memset(rsol, 0, m * sizeof(double)); } /* Open a loop to scan each column. For each column, do the following: * Update the row solution (lhs value) by adding the contribution from this column. * Check for bogus values (NaN, infinity) * check that the status of the variable agrees with the value and with the lower and upper bounds. Free should have no bounds, superbasic should have at least one. */ for (int j = 0; j < n; ++j) { CoinBigIndex v = mcstrt[j]; int colLen = hincol[j]; double xj = csol[j]; double lj = clo[j]; double uj = cup[j]; if (chkRowAct >= 1) { for (int u = 0; u < colLen; ++u) { int i = hrow[v]; double aij = colels[v]; v = link[v]; rsol[i] += aij * xj; } } if (chkColSol >= 1) { if (CoinIsnan(xj)) { printf("NaN CSOL: %d : lb = %g x = %g ub = %g\n", j, lj, xj, uj); } if (xj <= -PRESOLVE_INF || xj >= PRESOLVE_INF) { printf("Inf CSOL: %d : lb = %g x = %g ub = %g\n", j, lj, xj, uj); } if (chkColSol >= 2) { if (xj < lj - tol) { printf("low CSOL: %d : lb = %g x = %g ub = %g\n", j, lj, xj, uj); } else if (xj > uj + tol) { printf("high CSOL: %d : lb = %g x = %g ub = %g\n", j, lj, xj, uj); } } } if (chkStatus >= 1 && postObj->colstat_) { CoinPrePostsolveMatrix::Status statj = postObj->getColumnStatus(j); switch (statj) { case CoinPrePostsolveMatrix::atUpperBound: { if (uj >= PRESOLVE_INF || fabs(xj - uj) > tol) { printf("Bad status CSOL: %d : status atUpperBound : ", j); printf("lb = %g x = %g ub = %g\n", lj, xj, uj); } break; } case CoinPrePostsolveMatrix::atLowerBound: { if (lj <= -PRESOLVE_INF || fabs(xj - lj) > tol) { printf("Bad status CSOL: %d : status atLowerBound : ", j); printf("lb = %g x = %g ub = %g\n", lj, xj, uj); } break; } case CoinPrePostsolveMatrix::isFree: { if (lj > -PRESOLVE_INF || uj < PRESOLVE_INF) { printf("Bad status CSOL: %d : status isFree : ", j); printf("lb = %g x = %g ub = %g\n", lj, xj, uj); } break; } case CoinPrePostsolveMatrix::superBasic: { if (!(lj > -PRESOLVE_INF || uj < PRESOLVE_INF)) { printf("Bad status CSOL: %d : status superBasic : ", j); printf("lb = %g x = %g ub = %g\n", lj, xj, uj); } break; } case CoinPrePostsolveMatrix::basic: { /* Nothing to do here. */ break; } default: { printf("Bad status CSOL: %d : status unrecognized : ", j); break; } } } } /* Now check the row solution. acts[i] is what presolve thinks we have, rsol[i] is what we've just calculated while scanning the columns. CoinPostsolveMatrix does not contain hinrow_, so we can't check for trivial rows (cf. check_sol for CoinPresolveMatrix). For each row, * Check for bogus values (NaN, infinity) */ tol *= 1.0e4; if (chkRowAct >= 1) { for (int i = 0; i < m; ++i) { double lhsi = acts[i]; double evali = rsol[i]; double li = rlo[i]; double ui = rup[i]; if (CoinIsnan(evali) || CoinIsnan(lhsi)) { printf("NaN RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i, li, evali, lhsi, ui); } if (evali <= -PRESOLVE_INF || evali >= PRESOLVE_INF || lhsi <= -PRESOLVE_INF || lhsi >= PRESOLVE_INF) { printf("Inf RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i, li, evali, lhsi, ui); } if (chkRowAct >= 2) { if (fabs(evali - lhsi) > tol) { printf("Inacc RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i, li, evali, lhsi, ui); } if (evali < li - tol || lhsi < li - tol) { printf("low RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i, li, evali, lhsi, ui); } else if (evali > ui + tol || lhsi > ui + tol) { printf("high RSOL: %d : lb = %g eval = %g (expected %g) ub = %g\n", i, li, evali, lhsi, ui); } } if (chkStatus >= 2 && postObj->rowstat_) { CoinPrePostsolveMatrix::Status stati = postObj->getRowStatus(i); switch (stati) { case CoinPrePostsolveMatrix::atUpperBound: { if (li <= -PRESOLVE_INF || fabs(lhsi - li) > tol) { printf("Bad status RSOL: %d : status atUpperBound : ", i); printf("LB = %g lhs = %g UB = %g\n", li, lhsi, ui); } break; } case CoinPrePostsolveMatrix::atLowerBound: { if (ui >= PRESOLVE_INF || fabs(lhsi - ui) > tol) { printf("Bad status RSOL: %d : status atLowerBound : ", i); printf("LB = %g lhs = %g UB = %g\n", li, lhsi, ui); } break; } case CoinPrePostsolveMatrix::isFree: { if (li > -PRESOLVE_INF || ui < PRESOLVE_INF) { printf("Bad status RSOL: %d : status isFree : ", i); printf("LB = %g lhs = %g UB = %g\n", li, lhsi, ui); } break; } case CoinPrePostsolveMatrix::superBasic: { printf("Bad status RSOL: %d : status superBasic : ", i); printf("LB = %g lhs = %g UB = %g\n", li, lhsi, ui); break; } case CoinPrePostsolveMatrix::basic: { /* Nothing to do here. */ break; } default: { printf("Bad status RSOL: %d : status unrecognized : ", i); break; } } } } delete[] rsol; } return; } /* CoinPostsolveMatrix Make sure that the number of basic variables is correct. */ void presolve_check_nbasic(const CoinPostsolveMatrix *postObj) { int ncols0 = postObj->ncols0_; int nrows0 = postObj->nrows0_; char *cdone = postObj->cdone_; char *rdone = postObj->rdone_; int nbasic = 0; int ncdone = 0; int nrdone = 0; int ncb = 0; int nrb = 0; for (int j = 0; j < ncols0; j++) { if (cdone[j] != 0 && postObj->columnIsBasic(j)) { nbasic++; ncb++; } if (cdone[j]) ncdone++; } for (int i = 0; i < nrows0; i++) { if (rdone[i] && postObj->rowIsBasic(i)) { nbasic++; nrb++; } if (rdone[i]) nrdone++; } if (nbasic != postObj->nrows_) { printf("NBASIC (ERROR): %d basic variables, should be %d; ", nbasic, postObj->nrows_); printf("cdone %d, col basic %d, rdone %d, row basic %d.\n", ncdone, ncb, nrdone, nrb); fflush(stdout); } #if PRESOLVE_DEBUG > 1 else { std::cout << "NBASIC: " << nbasic << " basic variables; cdone " << ncdone << ", col basic " << ncb << ", rdone " << nrdone << ", row basic " << nrb << std::endl; std::cout << std::flush; } #endif return; } /* CoinPresolveMatrix Overload of presolve_check_nbasic for a CoinPresolveMatrix. There may not be a solution, eh? */ void presolve_check_nbasic(const CoinPresolveMatrix *preObj) { if (preObj->sol_ == 0) return; int ncols = preObj->ncols_; int nrows = preObj->nrows_; int nbasic = 0; int ncb = 0; int nrb = 0; for (int j = 0; j < ncols; j++) { if (preObj->columnIsBasic(j)) { nbasic++; ncb++; } } for (int i = 0; i < nrows; i++) { if (preObj->rowIsBasic(i)) { nbasic++; nrb++; } } if (nbasic != nrows) { printf("WRONG NUMBER NBASIC: is: %d should be: %d;", nbasic, nrows); printf(" cb %d, rb %d.\n", ncb, nrb); fflush(stdout); } return; } #endif /* Original comment: I've forgotton what this is all about Looks to me like it's confirming that the columns flagged as basic indeed have enough coefficients between them to cover the basis. It'd be serious work to get this going again. Waaaaaay out of date. -- lh, 040831 -- */ #if 0 void check_pivots (const int *mrstrt, const int *hinrow, const int *hcol, int nrows, const unsigned char *colstat, const unsigned char *rowstat, int ncols) { int i ; int nbasic = 0 ; int gotone = 1 ; int stillmore ; return ; int *bcol = new int[nrows] ; memset(bcol, -1, nrows*sizeof(int)) ; char *coldone = new char[ncols] ; memset(coldone, 0, ncols) ; while (gotone) { gotone = 0 ; stillmore = 0 ; for (i=0; irowIsBasic(i)) { int krs = mrstrt[i] ; int kre = mrstrt[i] + hinrow[i] ; int nb = 0 ; int kk ; for (int k=krs; kcolumnIsBasic(hcol[k]) && !coldone[hcol[k]]) { nb++ ; kk = k ; if (nb > 1) break ; } if (nb == 1) { PRESOLVEASSERT(bcol[i] == -1) ; bcol[i] = hcol[kk] ; coldone[hcol[kk]] = 1 ; nbasic++ ; gotone = 1 ; } else stillmore = 1 ; } } PRESOLVEASSERT(!stillmore) ; for (i=0; irowIsBasic(i)) { int krs = mrstrt[i] ; int kre = mrstrt[i] + hinrow[i] ; for (int k=krs; kcolumnIsBasic(hcol[k]) || coldone[hcol[k]]) ; nbasic++ ; } PRESOLVEASSERT(nbasic == nrows) ; } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinRational.cpp0000644000175200017520000000426413414454441016653 0ustar coincoin// Authors: Matthew Saltzman and Ted Ralphs // Copyright 2015, Matthew Saltzman and Ted Ralphs // Licensed under the Eclipse Public License 1.0 #include #include #ifdef __clang__ //labs() is in cstdlib with clang #include #include #endif #include #include "CoinRational.hpp" // Based on Python code from // http://www.johndcook.com/blog/2010/10/20/best-rational-approximation/ // (with permission). // // Returns closest (or almost, anyway) rational to val with denominator less // than or equal to maxdnom. Return value is true if within tolerance, false // otherwise. bool CoinRational::nearestRational_(double val, double maxdelta, long maxdnom) { double intpart; double fracpart = fabs(modf(val, &intpart)); // Consider using remainder() instead? long a = 0, b = 1, c = 1, d = 1; #define DEBUG_X 1 #if DEBUG_X bool shouldBeOK = false; #endif while (b <= maxdnom && d <= maxdnom) { double mediant = (a + c) / (double(b + d)); if (fabs(fracpart - mediant) < maxdelta) { #if DEBUG_X shouldBeOK = true; #endif if (b + d <= maxdnom * 2) { // seems more accurate (always true) numerator_ = a + c; denominator_ = b + d; break; } else if (d > b) { numerator_ = c; denominator_ = d; break; } else { numerator_ = a; denominator_ = b; break; } } else if (fracpart > mediant) { a = a + c; b = b + d; } else { c = a + c; d = b + d; } if (b > maxdnom) { numerator_ = c; denominator_ = d; } else { numerator_ = a; denominator_ = b; } } #if DEBUG_X if (shouldBeOK) { double inaccuracy = fabs(fracpart - numerator_ / double(denominator_)); assert(inaccuracy <= maxdelta); } #endif numerator_ += std::abs(intpart) * denominator_; if (val < 0) numerator_ *= -1; #if DEBUG_X > 1 if (shouldBeOK) { printf("val %g is %ld/%ld to accuracy %g\n", val, numerator_, denominator_, fabs(val - numerator_ / double(denominator_))); } #endif return fabs(val - numerator_ / double(denominator_)) <= maxdelta; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveDual.hpp0000644000175200017520000000546713414454441017522 0ustar coincoin/* $Id: CoinPresolveDual.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolveDual_H #define CoinPresolveDual_H /*! \class remove_dual_action \brief Attempt to fix variables by bounding reduced costs The reduced cost of x_j is d_j = c_j - y*a_j (1). Assume minimization, so that at optimality d_j >= 0 for x_j nonbasic at lower bound, and d_j <= 0 for x_j nonbasic at upper bound. For a slack variable s_i, c_(n+i) = 0 and a_(n+i) is a unit vector, hence d_(n+i) = -y_i. If s_i has a finite lower bound and no upper bound, we must have y_i <= 0 at optimality. Similarly, if s_i has no lower bound and a finite upper bound, we must have y_i >= 0. For a singleton variable x_j, d_j = c_j - y_i*a_ij. Given x_j with a single finite bound, we can bound d_j greater or less than 0 at optimality, and that allows us to calculate an upper or lower bound on y_i (depending on the bound on d_j and the sign of a_ij). Now we have bounds on some subset of the y_i, and we can use these to calculate upper and lower bounds on the d_j, using bound propagation on (1). If we can manage to bound some d_j as strictly positive or strictly negative, then at optimality the corresponding variable must be nonbasic at its lower or upper bound, respectively. If the required bound is lacking, the problem is unbounded. */ class remove_dual_action : public CoinPresolveAction { public: /// Destructor ~remove_dual_action(); /// Name inline const char *name() const { return ("remove_dual_action"); } /*! \brief Attempt to fix variables by bounding reduced costs Always scans all variables. Propagates bounds on reduced costs until there's no change or until some set of variables can be fixed. */ static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); /*! \brief Postsolve In addition to fixing variables (handled by make_fixed_action), we may need use our own postsolve to restore constraint bounds. */ void postsolve(CoinPostsolveMatrix *prob) const; private: /// Postsolve (bound restore) instruction struct action { double rlo_; ///< restored row lower bound double rup_; ///< restored row upper bound int ndx_; ///< row index }; /// Constructor with postsolve actions. remove_dual_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } /// Count of bound restore entries const int nactions_; /// Bound restore entries const action *actions_; }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPackedVector.cpp0000644000175200017520000003332313414454441017452 0ustar coincoin/* $Id: CoinPackedVector.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include #include "CoinHelperFunctions.hpp" #include "CoinPackedVector.hpp" //############################################################################# void CoinPackedVector::clear() { nElements_ = 0; clearBase(); } //############################################################################# CoinPackedVector & CoinPackedVector::operator=(const CoinPackedVector &rhs) { if (this != &rhs) { clear(); gutsOfSetVector(rhs.getVectorNumElements(), rhs.getVectorIndices(), rhs.getVectorElements(), CoinPackedVectorBase::testForDuplicateIndex(), "operator="); } return *this; } //############################################################################# CoinPackedVector & CoinPackedVector::operator=(const CoinPackedVectorBase &rhs) { if (this != &rhs) { clear(); gutsOfSetVector(rhs.getNumElements(), rhs.getIndices(), rhs.getElements(), CoinPackedVectorBase::testForDuplicateIndex(), "operator= from base"); } return *this; } //############################################################################# #if 0 void CoinPackedVector::assignVector(int size, int*& inds, double*& elems, bool testForDuplicateIndex) { clear(); // Allocate storage if ( size != 0 ) { reserve(size); nElements_ = size; indices_ = inds; inds = NULL; elements_ = elems; elems = NULL; CoinIotaN(origIndices_, size, 0); } try { CoinPackedVectorBase::setTestForDuplicateIndex(testForDuplicateIndex); } catch (CoinError& e) { throw CoinError("duplicate index", "assignVector", "CoinPackedVector"); } } #else void CoinPackedVector::assignVector(int size, int *&inds, double *&elems, bool testForDuplicateIndex) { clear(); // Allocate storage if (size != 0) { //reserve(size); //This is a BUG!!! nElements_ = size; if (indices_ != NULL) delete[] indices_; indices_ = inds; inds = NULL; if (elements_ != NULL) delete[] elements_; elements_ = elems; elems = NULL; if (origIndices_ != NULL) delete[] origIndices_; origIndices_ = new int[size]; CoinIotaN(origIndices_, size, 0); capacity_ = size; } if (testForDuplicateIndex) { try { CoinPackedVectorBase::setTestForDuplicateIndex(testForDuplicateIndex); } catch (CoinError &e) { throw CoinError("duplicate index", "assignVector", "CoinPackedVector"); } } else { setTestsOff(); } } #endif //############################################################################# void CoinPackedVector::setVector(int size, const int *inds, const double *elems, bool testForDuplicateIndex) { clear(); gutsOfSetVector(size, inds, elems, testForDuplicateIndex, "setVector"); } //############################################################################# void CoinPackedVector::setConstant(int size, const int *inds, double value, bool testForDuplicateIndex) { clear(); gutsOfSetConstant(size, inds, value, testForDuplicateIndex, "setConstant"); } //############################################################################# void CoinPackedVector::setFull(int size, const double *elems, bool testForDuplicateIndex) { // Clear out any values presently stored clear(); // Allocate storage if (size != 0) { reserve(size); nElements_ = size; CoinIotaN(origIndices_, size, 0); CoinIotaN(indices_, size, 0); CoinDisjointCopyN(elems, size, elements_); } // Full array can not have duplicates CoinPackedVectorBase::setTestForDuplicateIndexWhenTrue(testForDuplicateIndex); } //############################################################################# /* Indices are not specified and are taken to be 0,1,...,size-1, but only where non zero*/ void CoinPackedVector::setFullNonZero(int size, const double *elems, bool testForDuplicateIndex) { // Clear out any values presently stored clear(); // For now waste space // Allocate storage if (size != 0) { reserve(size); nElements_ = 0; int i; for (i = 0; i < size; i++) { if (elems[i]) { origIndices_[nElements_] = i; indices_[nElements_] = i; elements_[nElements_++] = elems[i]; } } } // Full array can not have duplicates CoinPackedVectorBase::setTestForDuplicateIndexWhenTrue(testForDuplicateIndex); } //############################################################################# void CoinPackedVector::setElement(int index, double element) { #ifndef COIN_FAST_CODE if (index >= nElements_) throw CoinError("index >= size()", "setElement", "CoinPackedVector"); if (index < 0) throw CoinError("index < 0", "setElement", "CoinPackedVector"); #endif elements_[index] = element; } //############################################################################# void CoinPackedVector::insert(int index, double element) { const int s = nElements_; if (testForDuplicateIndex()) { std::set< int > &is = *indexSet("insert", "CoinPackedVector"); if (!is.insert(index).second) throw CoinError("Index already exists", "insert", "CoinPackedVector"); } if (capacity_ <= s) { reserve(CoinMax(5, 2 * capacity_)); assert(capacity_ > s); } indices_[s] = index; elements_[s] = element; origIndices_[s] = s; ++nElements_; } //############################################################################# void CoinPackedVector::append(const CoinPackedVectorBase &caboose) { const int cs = caboose.getNumElements(); if (cs == 0) { return; } if (testForDuplicateIndex()) { // Just to initialize the index heap indexSet("append (1st call)", "CoinPackedVector"); } const int s = nElements_; // Make sure there is enough room for the caboose if (capacity_ < s + cs) reserve(CoinMax(s + cs, 2 * capacity_)); const int *cind = caboose.getIndices(); const double *celem = caboose.getElements(); CoinDisjointCopyN(cind, cs, indices_ + s); CoinDisjointCopyN(celem, cs, elements_ + s); CoinIotaN(origIndices_ + s, cs, s); nElements_ += cs; if (testForDuplicateIndex()) { std::set< int > &is = *indexSet("append (2nd call)", "CoinPackedVector"); for (int i = 0; i < cs; ++i) { if (!is.insert(cind[i]).second) throw CoinError("duplicate index", "append", "CoinPackedVector"); } } } //############################################################################# void CoinPackedVector::swap(int i, int j) { if (i >= nElements_) throw CoinError("index i >= size()", "swap", "CoinPackedVector"); if (i < 0) throw CoinError("index i < 0", "swap", "CoinPackedVector"); if (i >= nElements_) throw CoinError("index j >= size()", "swap", "CoinPackedVector"); if (i < 0) throw CoinError("index j < 0", "swap", "CoinPackedVector"); // Swap positions i and j of the // indices and elements arrays std::swap(indices_[i], indices_[j]); std::swap(elements_[i], elements_[j]); } //############################################################################# void CoinPackedVector::truncate(int n) { if (n > nElements_) throw CoinError("n > size()", "truncate", "CoinPackedVector"); if (n < 0) throw CoinError("n < 0", "truncate", "CoinPackedVector"); nElements_ = n; clearBase(); } //############################################################################# void CoinPackedVector::operator+=(double value) { for (int i = 0; i < nElements_; i++) elements_[i] += value; } //----------------------------------------------------------------------------- void CoinPackedVector::operator-=(double value) { for (int i = 0; i < nElements_; i++) elements_[i] -= value; } //----------------------------------------------------------------------------- void CoinPackedVector::operator*=(double value) { for (int i = 0; i < nElements_; i++) elements_[i] *= value; } //----------------------------------------------------------------------------- void CoinPackedVector::operator/=(double value) { for (int i = 0; i < nElements_; i++) elements_[i] /= value; } //############################################################################# void CoinPackedVector::sortOriginalOrder() { CoinSort_3(origIndices_, origIndices_ + nElements_, indices_, elements_); } //############################################################################# void CoinPackedVector::reserve(int n) { // don't make allocated space smaller if (n <= capacity_) return; capacity_ = n; // save pointers to existing data int *tempIndices = indices_; int *tempOrigIndices = origIndices_; double *tempElements = elements_; // allocate new space indices_ = new int[capacity_]; origIndices_ = new int[capacity_]; elements_ = new double[capacity_]; // copy data to new space if (nElements_ > 0) { CoinDisjointCopyN(tempIndices, nElements_, indices_); CoinDisjointCopyN(tempOrigIndices, nElements_, origIndices_); CoinDisjointCopyN(tempElements, nElements_, elements_); } // free old data delete[] tempElements; delete[] tempOrigIndices; delete[] tempIndices; } //############################################################################# CoinPackedVector::CoinPackedVector(bool testForDuplicateIndex) : CoinPackedVectorBase() , indices_(NULL) , elements_(NULL) , nElements_(0) , origIndices_(NULL) , capacity_(0) { // This won't fail, the packed vector is empty. There can't be duplicate // indices. CoinPackedVectorBase::setTestForDuplicateIndex(testForDuplicateIndex); } //----------------------------------------------------------------------------- CoinPackedVector::CoinPackedVector(int size, const int *inds, const double *elems, bool testForDuplicateIndex) : CoinPackedVectorBase() , indices_(NULL) , elements_(NULL) , nElements_(0) , origIndices_(NULL) , capacity_(0) { gutsOfSetVector(size, inds, elems, testForDuplicateIndex, "constructor for array value"); } //----------------------------------------------------------------------------- CoinPackedVector::CoinPackedVector(int size, const int *inds, double value, bool testForDuplicateIndex) : CoinPackedVectorBase() , indices_(NULL) , elements_(NULL) , nElements_(0) , origIndices_(NULL) , capacity_(0) { gutsOfSetConstant(size, inds, value, testForDuplicateIndex, "constructor for constant value"); } //----------------------------------------------------------------------------- CoinPackedVector::CoinPackedVector(int capacity, int size, int *&inds, double *&elems, bool /*testForDuplicateIndex*/) : CoinPackedVectorBase() , indices_(inds) , elements_(elems) , nElements_(size) , origIndices_(NULL) , capacity_(capacity) { assert(size <= capacity); inds = NULL; elems = NULL; origIndices_ = new int[capacity_]; CoinIotaN(origIndices_, size, 0); } //----------------------------------------------------------------------------- CoinPackedVector::CoinPackedVector(int size, const double *element, bool testForDuplicateIndex) : CoinPackedVectorBase() , indices_(NULL) , elements_(NULL) , nElements_(0) , origIndices_(NULL) , capacity_(0) { setFull(size, element, testForDuplicateIndex); } //----------------------------------------------------------------------------- CoinPackedVector::CoinPackedVector(const CoinPackedVectorBase &rhs) : CoinPackedVectorBase() , indices_(NULL) , elements_(NULL) , nElements_(0) , origIndices_(NULL) , capacity_(0) { gutsOfSetVector(rhs.getNumElements(), rhs.getIndices(), rhs.getElements(), rhs.testForDuplicateIndex(), "copy constructor from base"); } //----------------------------------------------------------------------------- CoinPackedVector::CoinPackedVector(const CoinPackedVector &rhs) : CoinPackedVectorBase() , indices_(NULL) , elements_(NULL) , nElements_(0) , origIndices_(NULL) , capacity_(0) { gutsOfSetVector(rhs.getVectorNumElements(), rhs.getVectorIndices(), rhs.getVectorElements(), rhs.testForDuplicateIndex(), "copy constructor"); } //----------------------------------------------------------------------------- CoinPackedVector::~CoinPackedVector() { delete[] indices_; delete[] origIndices_; delete[] elements_; } //############################################################################# void CoinPackedVector::gutsOfSetVector(int size, const int *inds, const double *elems, bool testForDuplicateIndex, const char *method) { if (size != 0) { reserve(size); nElements_ = size; CoinDisjointCopyN(inds, size, indices_); CoinDisjointCopyN(elems, size, elements_); CoinIotaN(origIndices_, size, 0); } if (testForDuplicateIndex) { try { CoinPackedVectorBase::setTestForDuplicateIndex(testForDuplicateIndex); } catch (CoinError &e) { throw CoinError("duplicate index", method, "CoinPackedVector"); } } else { setTestsOff(); } } //----------------------------------------------------------------------------- void CoinPackedVector::gutsOfSetConstant(int size, const int *inds, double value, bool testForDuplicateIndex, const char *method) { if (size != 0) { reserve(size); nElements_ = size; CoinDisjointCopyN(inds, size, indices_); CoinFillN(elements_, size, value); CoinIotaN(origIndices_, size, 0); } try { CoinPackedVectorBase::setTestForDuplicateIndex(testForDuplicateIndex); } catch (CoinError &e) { throw CoinError("duplicate index", method, "CoinPackedVector"); } } //############################################################################# /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveImpliedFree.hpp0000644000175200017520000000351513414454441021012 0ustar coincoin/* $Id: CoinPresolveImpliedFree.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolveImpliedFree_H #define CoinPresolveImpliedFree_H /*! \file */ #define IMPLIED_FREE 9 /*! \class implied_free_action \brief Detect and process implied free variables Consider a singleton variable x (i.e., a variable involved in only one constraint). Suppose that the bounds on that constraint, combined with the bounds on the other variables involved in the constraint, are such that even the worst case values of the other variables still imply bounds for x which are tighter than the variable's original bounds. Since x can never reach its upper or lower bounds, it is an implied free variable. Both x and the constraint can be deleted from the problem. A similar transform for the case where the variable is not a natural column singleton is handled by #subst_constraint_action. */ class implied_free_action : public CoinPresolveAction { struct action { int row, col; double clo, cup; double rlo, rup; const double *rowels; const double *costs; int ninrow; }; const int nactions_; const action *const actions_; implied_free_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } public: const char *name() const; static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next, int &fillLevel); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~implied_free_action(); }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPackedMatrix.cpp0000644000175200017520000034045313414454441017461 0ustar coincoin/* $Id: CoinPackedMatrix.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinUtilsConfig.h" #include #include #include #include #include #include #include "CoinPragma.hpp" #include "CoinSort.hpp" #include "CoinHelperFunctions.hpp" #ifndef CLP_NO_VECTOR #include "CoinPackedVectorBase.hpp" #endif #include "CoinFloatEqual.hpp" #include "CoinPackedMatrix.hpp" #if !defined(COIN_COINUTILS_CHECKLEVEL) #define COIN_COINUTILS_CHECKLEVEL 0 #endif //############################################################################# // T must be an integral type (int, CoinBigIndex, etc.) template < typename T > static inline T CoinLengthWithExtra(T len, double extraGap) { return static_cast< T >(ceil(len * (1 + extraGap))); } //############################################################################# static inline void CoinTestSortedIndexSet(const int num, const int *sorted, const int maxEntry, const char *testingMethod) { if (sorted[0] < 0 || sorted[num - 1] >= maxEntry) throw CoinError("bad index", testingMethod, "CoinPackedMatrix"); if (std::adjacent_find(sorted, sorted + num) != sorted + num) throw CoinError("duplicate index", testingMethod, "CoinPackedMatrix"); } //----------------------------------------------------------------------------- static inline int * CoinTestIndexSet(const int numDel, const int *indDel, const int maxEntry, const char *testingMethod) { if (!CoinIsSorted(indDel, indDel + numDel)) { // if not sorted then sort it, test for consistency and return a pointer // to the sorted array int *sorted = new int[numDel]; CoinMemcpyN(indDel, numDel, sorted); std::sort(sorted, sorted + numDel); CoinTestSortedIndexSet(numDel, sorted, maxEntry, testingMethod); return sorted; } // Otherwise it's already sorted, so just test for consistency and return a // 0 pointer. CoinTestSortedIndexSet(numDel, indDel, maxEntry, testingMethod); return 0; } //############################################################################# void CoinPackedMatrix::reserve(const int newMaxMajorDim, const CoinBigIndex newMaxSize, bool create) { if (newMaxMajorDim > maxMajorDim_) { maxMajorDim_ = newMaxMajorDim; int *oldlength = length_; CoinBigIndex *oldstart = start_; length_ = new int[newMaxMajorDim]; start_ = new CoinBigIndex[newMaxMajorDim + 1]; start_[0] = 0; if (majorDim_ > 0) { CoinMemcpyN(oldlength, majorDim_, length_); CoinMemcpyN(oldstart, majorDim_ + 1, start_); } if (create) { // create empty vectors CoinFillN(length_ + majorDim_, maxMajorDim_ - majorDim_, 0); CoinFillN(start_ + majorDim_ + 1, maxMajorDim_ - majorDim_, static_cast< CoinBigIndex >(0)); majorDim_ = maxMajorDim_; } delete[] oldlength; delete[] oldstart; } if (newMaxSize > maxSize_) { maxSize_ = newMaxSize; int *oldind = index_; double *oldelem = element_; index_ = new int[newMaxSize]; element_ = new double[newMaxSize]; for (int i = majorDim_ - 1; i >= 0; --i) { CoinMemcpyN(oldind + start_[i], length_[i], index_ + start_[i]); CoinMemcpyN(oldelem + start_[i], length_[i], element_ + start_[i]); } delete[] oldind; delete[] oldelem; } } //----------------------------------------------------------------------------- void CoinPackedMatrix::clear() { majorDim_ = 0; minorDim_ = 0; size_ = 0; } //############################################################################# //############################################################################# void CoinPackedMatrix::setDimensions(int newnumrows, int newnumcols) { const int numrows = getNumRows(); if (newnumrows < 0) newnumrows = numrows; if (newnumrows < numrows) throw CoinError("Bad new rownum (less than current)", "setDimensions", "CoinPackedMatrix"); const int numcols = getNumCols(); if (newnumcols < 0) newnumcols = numcols; if (newnumcols < numcols) throw CoinError("Bad new colnum (less than current)", "setDimensions", "CoinPackedMatrix"); int numplus = 0; if (isColOrdered()) { minorDim_ = newnumrows; numplus = newnumcols - numcols; } else { minorDim_ = newnumcols; numplus = newnumrows - numrows; } if (numplus > 0) { int *lengths = new int[numplus]; CoinZeroN(lengths, numplus); resizeForAddingMajorVectors(numplus, lengths); delete[] lengths; majorDim_ += numplus; //forgot to change majorDim_ } } //----------------------------------------------------------------------------- void CoinPackedMatrix::setExtraGap(const double newGap) { if (newGap < 0) throw CoinError("negative new extra gap", "setExtraGap", "CoinPackedMatrix"); extraGap_ = newGap; } //----------------------------------------------------------------------------- void CoinPackedMatrix::setExtraMajor(const double newMajor) { if (newMajor < 0) throw CoinError("negative new extra major", "setExtraMajor", "CoinPackedMatrix"); extraMajor_ = newMajor; } //############################################################################# #ifndef CLP_NO_VECTOR void CoinPackedMatrix::appendCol(const CoinPackedVectorBase &vec) { if (colOrdered_) appendMajorVector(vec); else appendMinorVector(vec); } #endif //----------------------------------------------------------------------------- void CoinPackedMatrix::appendCol(const int vecsize, const int *vecind, const double *vecelem) { if (colOrdered_) appendMajorVector(vecsize, vecind, vecelem); else appendMinorVector(vecsize, vecind, vecelem); } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::appendCols(const int numcols, const CoinPackedVectorBase *const *cols) { if (colOrdered_) appendMajorVectors(numcols, cols); else appendMinorVectors(numcols, cols); } #endif //----------------------------------------------------------------------------- int CoinPackedMatrix::appendCols(const int numcols, const CoinBigIndex *columnStarts, const int *row, const double *element, int numberRows) { int numberErrors; if (colOrdered_) { numberErrors = appendMajor(numcols, columnStarts, row, element, numberRows); } else { numberErrors = appendMinor(numcols, columnStarts, row, element, numberRows); } return numberErrors; } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::appendRow(const CoinPackedVectorBase &vec) { if (colOrdered_) appendMinorVector(vec); else appendMajorVector(vec); } #endif //----------------------------------------------------------------------------- void CoinPackedMatrix::appendRow(const int vecsize, const int *vecind, const double *vecelem) { if (colOrdered_) appendMinorVector(vecsize, vecind, vecelem); else appendMajorVector(vecsize, vecind, vecelem); } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::appendRows(const int numrows, const CoinPackedVectorBase *const *rows) { if (colOrdered_) { // make sure enough columns if (numrows == 0) return; int i; int maxDim = -1; for (i = numrows - 1; i >= 0; --i) { const int vecsize = rows[i]->getNumElements(); const int *vecind = rows[i]->getIndices(); for (int j = vecsize - 1; j >= 0; --j) maxDim = CoinMax(maxDim, vecind[j]); } maxDim++; if (maxDim > majorDim_) { setDimensions(minorDim_, maxDim); //int nAdd=maxDim-majorDim_; //int * length = new int[nAdd]; //memset(length,0,nAdd*sizeof(int)); //resizeForAddingMajorVectors(nAdd,length); //delete [] length; } appendMinorVectors(numrows, rows); } else { appendMajorVectors(numrows, rows); } } #endif //----------------------------------------------------------------------------- int CoinPackedMatrix::appendRows(const int numrows, const CoinBigIndex *rowStarts, const int *column, const double *element, int numberColumns) { int numberErrors; if (colOrdered_) { numberErrors = appendMinor(numrows, rowStarts, column, element, numberColumns); } else { numberErrors = appendMajor(numrows, rowStarts, column, element, numberColumns); } return numberErrors; } //############################################################################# void CoinPackedMatrix::rightAppendPackedMatrix(const CoinPackedMatrix &matrix) { if (colOrdered_) { if (matrix.colOrdered_) { majorAppendSameOrdered(matrix); } else { majorAppendOrthoOrdered(matrix); } } else { if (matrix.colOrdered_) { minorAppendOrthoOrdered(matrix); } else { minorAppendSameOrdered(matrix); } } } //----------------------------------------------------------------------------- void CoinPackedMatrix::bottomAppendPackedMatrix(const CoinPackedMatrix &matrix) { if (colOrdered_) { if (matrix.colOrdered_) { minorAppendSameOrdered(matrix); } else { minorAppendOrthoOrdered(matrix); } } else { if (matrix.colOrdered_) { majorAppendOrthoOrdered(matrix); } else { majorAppendSameOrdered(matrix); } } } //############################################################################# void CoinPackedMatrix::deleteCols(const int numDel, const int *indDel) { if (numDel) { if (colOrdered_) deleteMajorVectors(numDel, indDel); else deleteMinorVectors(numDel, indDel); } } //----------------------------------------------------------------------------- void CoinPackedMatrix::deleteRows(const int numDel, const int *indDel) { if (numDel) { if (colOrdered_) deleteMinorVectors(numDel, indDel); else deleteMajorVectors(numDel, indDel); } } //############################################################################# /* Replace the elements of a vector. The indices remain the same. At most the number specified will be replaced. The index is between 0 and major dimension of matrix */ void CoinPackedMatrix::replaceVector(const int index, const int numReplace, const double *newElements) { if (index >= 0 && index < majorDim_) { int length = (length_[index] < numReplace) ? length_[index] : numReplace; CoinMemcpyN(newElements, length, element_ + start_[index]); } else { #ifdef COIN_DEBUG throw CoinError("bad index", "replaceVector", "CoinPackedMatrix"); #endif } } /* Modify one element of packed matrix. An element may be added. If the new element is zero it will be deleted unless keepZero true */ void CoinPackedMatrix::modifyCoefficient(int row, int column, double newElement, bool keepZero) { int minorIndex, majorIndex; if (colOrdered_) { majorIndex = column; minorIndex = row; } else { minorIndex = column; majorIndex = row; } if (majorIndex >= 0 && majorIndex < majorDim_) { if (minorIndex >= 0 && minorIndex < minorDim_) { CoinBigIndex j; CoinBigIndex end = start_[majorIndex] + length_[majorIndex]; ; for (j = start_[majorIndex]; j < end; j++) { if (minorIndex == index_[j]) { // replacement if (newElement || keepZero) { element_[j] = newElement; } else { // pack down and return length_[majorIndex]--; end--; size_--; for (; j < end; j++) { element_[j] = element_[j + 1]; index_[j] = index_[j + 1]; } } return; } } if (j == end && (newElement || keepZero)) { // we need to insert - keep in minor order if possible if (end >= start_[majorIndex + 1]) { int *addedEntries = new int[majorDim_]; memset(addedEntries, 0, majorDim_ * sizeof(int)); addedEntries[majorIndex] = 1; resizeForAddingMinorVectors(addedEntries); delete[] addedEntries; } // So where to insert? We're just going to assume that the entries // in the major vector are in increasing order, so we'll insert the // new entry to the last place we can const CoinBigIndex start = start_[majorIndex]; end = start_[majorIndex] + length_[majorIndex]; // recalculate end for (j = end - 1; j >= start; --j) { if (index_[j] < minorIndex) break; index_[j + 1] = index_[j]; element_[j + 1] = element_[j]; } ++j; index_[j] = minorIndex; element_[j] = newElement; size_++; length_[majorIndex]++; } } else { #ifdef COIN_DEBUG throw CoinError("bad minor index", "modifyCoefficient", "CoinPackedMatrix"); #endif } } else { #ifdef COIN_DEBUG throw CoinError("bad major index", "modifyCoefficient", "CoinPackedMatrix"); #endif } } /* Return one element of packed matrix. This works for either ordering If it is not present will return 0.0 */ double CoinPackedMatrix::getCoefficient(int row, int column) const { int minorIndex, majorIndex; if (colOrdered_) { majorIndex = column; minorIndex = row; } else { minorIndex = column; majorIndex = row; } double value = 0.0; if (majorIndex >= 0 && majorIndex < majorDim_) { if (minorIndex >= 0 && minorIndex < minorDim_) { CoinBigIndex j; CoinBigIndex end = start_[majorIndex] + length_[majorIndex]; ; for (j = start_[majorIndex]; j < end; j++) { if (minorIndex == index_[j]) { value = element_[j]; break; } } } else { #ifdef COIN_DEBUG throw CoinError("bad minor index", "modifyCoefficient", "CoinPackedMatrix"); #endif } } else { #ifdef COIN_DEBUG throw CoinError("bad major index", "modifyCoefficient", "CoinPackedMatrix"); #endif } return value; } //############################################################################# /* Eliminate all elements in matrix whose absolute value is less than threshold. The column starts are not affected. Returns number of elements eliminated. Elements eliminated are at end of each vector */ CoinBigIndex CoinPackedMatrix::compress(double threshold) { CoinBigIndex numberEliminated = 0; // space for eliminated int *eliminatedIndex = new int[minorDim_]; double *eliminatedElement = new double[minorDim_]; int i; for (i = 0; i < majorDim_; i++) { int length = length_[i]; CoinBigIndex k = start_[i]; int kbad = 0; CoinBigIndex j; for (j = start_[i]; j < start_[i] + length; j++) { if (fabs(element_[j]) >= threshold) { element_[k] = element_[j]; index_[k++] = index_[j]; } else { eliminatedElement[kbad] = element_[j]; eliminatedIndex[kbad++] = index_[j]; } } if (kbad) { numberEliminated += kbad; length_[i] = static_cast< int >(k - start_[i]); memcpy(index_ + k, eliminatedIndex, kbad * sizeof(int)); memcpy(element_ + k, eliminatedElement, kbad * sizeof(double)); } } size_ -= numberEliminated; delete[] eliminatedIndex; delete[] eliminatedElement; return numberEliminated; } //############################################################################# /* Eliminate all elements in matrix whose absolute value is less than threshold.ALSO removes duplicates The column starts are not affected. Returns number of elements eliminated. */ CoinBigIndex CoinPackedMatrix::eliminateDuplicates(double threshold) { CoinBigIndex numberEliminated = 0; // space for eliminated CoinBigIndex *mark = new CoinBigIndex[minorDim_]; int i; for (i = 0; i < minorDim_; i++) mark[i] = -1; for (i = 0; i < majorDim_; i++) { CoinBigIndex k = start_[i]; CoinBigIndex end = k + length_[i]; CoinBigIndex j; for (j = k; j < end; j++) { int index = index_[j]; if (mark[index] == -1) { mark[index] = j; } else { // duplicate CoinBigIndex jj = mark[index]; element_[jj] += element_[j]; element_[j] = 0.0; } } for (j = k; j < end; j++) { int index = index_[j]; mark[index] = -1; if (fabs(element_[j]) >= threshold) { element_[k] = element_[j]; index_[k++] = index_[j]; } } numberEliminated += end - k; length_[i] = static_cast< int >(k - start_[i]); } size_ -= numberEliminated; delete[] mark; return numberEliminated; } //############################################################################# void CoinPackedMatrix::removeGaps(double removeValue) { if (removeValue < 0.0) { if (size_ < start_[majorDim_]) { #if 1 // Small copies so faster to do simply int i; CoinBigIndex size = 0; for (i = 1; i < majorDim_ + 1; ++i) { const CoinBigIndex si = start_[i]; size += length_[i - 1]; if (si > size) break; } for (; i < majorDim_; ++i) { const CoinBigIndex si = start_[i]; const int li = length_[i]; start_[i] = size; for (CoinBigIndex j = si; j < si + li; j++) { assert(size < size_); index_[size] = index_[j]; element_[size++] = element_[j]; } } assert(size == size_); start_[majorDim_] = size; for (i = 0; i < majorDim_; ++i) { assert(start_[i + 1] == start_[i] + length_[i]); } #else for (int i = 1; i < majorDim_; ++i) { const CoinBigIndex si = start_[i]; const int li = length_[i]; start_[i] = start_[i - 1] + length_[i - 1]; CoinCopy(index_ + si, index_ + (si + li), index_ + start_[i]); CoinCopy(element_ + si, element_ + (si + li), element_ + start_[i]); } start_[majorDim_] = size_; #endif } else { #ifndef NDEBUG for (int i = 1; i < majorDim_; ++i) { assert(start_[i] == start_[i - 1] + length_[i - 1]); } assert(start_[majorDim_] == size_); #endif } } else { CoinBigIndex put = 0; assert(!start_[0]); CoinBigIndex start = 0; for (int i = 0; i < majorDim_; ++i) { const CoinBigIndex si = start; start = start_[i + 1]; const int li = length_[i]; for (CoinBigIndex j = si; j < si + li; j++) { double value = element_[j]; if (fabs(value) > removeValue) { index_[put] = index_[j]; element_[put++] = value; } } length_[i] = static_cast< int >(put - start_[i]); start_[i + 1] = put; } size_ = put; } } //############################################################################# /* Really clean up matrix. a) eliminate all duplicate AND small elements in matrix b) remove all gaps and set extraGap_ and extraMajor_ to 0.0 c) reallocate arrays and make max lengths equal to lengths d) orders elements returns number of elements eliminated */ CoinBigIndex CoinPackedMatrix::cleanMatrix(double threshold) { if (!majorDim_) { extraGap_ = 0.0; extraMajor_ = 0.0; return 0; } CoinBigIndex numberEliminated = 0; // space for eliminated CoinBigIndex *mark = new CoinBigIndex[minorDim_]; int i; for (i = 0; i < minorDim_; i++) mark[i] = -1; CoinBigIndex n = 0; for (i = 0; i < majorDim_; i++) { CoinBigIndex k = start_[i]; start_[i] = n; CoinBigIndex end = k + length_[i]; CoinBigIndex j; for (j = k; j < end; j++) { int index = index_[j]; if (mark[index] == -1) { mark[index] = j; } else { // duplicate CoinBigIndex jj = mark[index]; element_[jj] += element_[j]; element_[j] = 0.0; } } for (j = k; j < end; j++) { int index = index_[j]; mark[index] = -1; if (fabs(element_[j]) >= threshold) { element_[n] = element_[j]; index_[n++] = index_[j]; k++; } } numberEliminated += end - k; length_[i] = static_cast< int >(n - start_[i]); // sort CoinSort_2(index_ + start_[i], index_ + n, element_ + start_[i]); } start_[majorDim_] = n; size_ -= numberEliminated; assert(n == size_); delete[] mark; extraGap_ = 0.0; extraMajor_ = 0.0; maxMajorDim_ = majorDim_; maxSize_ = size_; // Now reallocate - do smallest ones first int *temp = CoinCopyOfArray(length_, majorDim_); delete[] length_; length_ = temp; CoinBigIndex *temp2 = CoinCopyOfArray(start_, majorDim_ + 1); delete[] start_; start_ = temp2; temp = CoinCopyOfArray(index_, size_); delete[] index_; index_ = temp; double *temp3 = CoinCopyOfArray(element_, size_); delete[] element_; element_ = temp3; return numberEliminated; } //############################################################################# void CoinPackedMatrix::submatrixOf(const CoinPackedMatrix &matrix, const int numMajor, const int *indMajor) { int i; int *sortedIndPtr = CoinTestIndexSet(numMajor, indMajor, matrix.majorDim_, "submatrixOf"); const int *sortedInd = sortedIndPtr == 0 ? indMajor : sortedIndPtr; gutsOfDestructor(); // Count how many nonzeros there'll be CoinBigIndex nzcnt = 0; const int *length = matrix.getVectorLengths(); for (i = 0; i < numMajor; ++i) { nzcnt += length[sortedInd[i]]; } colOrdered_ = matrix.colOrdered_; maxMajorDim_ = int(numMajor * (1 + extraMajor_) + 1); maxSize_ = static_cast< CoinBigIndex >(nzcnt * (1 + extraMajor_) * (1 + extraGap_) + 100); length_ = new int[maxMajorDim_]; start_ = new CoinBigIndex[maxMajorDim_ + 1]; start_[0] = 0; index_ = new int[maxSize_]; element_ = new double[maxSize_]; majorDim_ = 0; minorDim_ = matrix.minorDim_; size_ = 0; #ifdef CLP_NO_VECTOR for (i = 0; i < numMajor; ++i) { int j = sortedInd[i]; CoinBigIndex start = matrix.start_[j]; appendMajorVector(matrix.length_[j], matrix.index_ + start, matrix.element_ + start); } #else for (i = 0; i < numMajor; ++i) { const CoinShallowPackedVector reqdBySunCC = matrix.getVector(sortedInd[i]); appendMajorVector(reqdBySunCC); } #endif delete[] sortedIndPtr; } //############################################################################# void CoinPackedMatrix::submatrixOfWithDuplicates(const CoinPackedMatrix &matrix, const int numMajor, const int *indMajor) { int i; // we allow duplicates - can be useful #ifndef NDEBUG for (i = 0; i < numMajor; i++) { if (indMajor[i] < 0 || indMajor[i] >= matrix.majorDim_) throw CoinError("bad index", "submatrixOfWithDuplicates", "CoinPackedMatrix"); } #endif gutsOfDestructor(); // Get rid of gaps extraMajor_ = 0; extraGap_ = 0; colOrdered_ = matrix.colOrdered_; maxMajorDim_ = numMajor; const int *length = matrix.getVectorLengths(); length_ = new int[maxMajorDim_]; start_ = new CoinBigIndex[maxMajorDim_ + 1]; // Count how many nonzeros there'll be CoinBigIndex nzcnt = 0; for (i = 0; i < maxMajorDim_; ++i) { start_[i] = nzcnt; int thisLength = length[indMajor[i]]; nzcnt += thisLength; length_[i] = thisLength; } start_[maxMajorDim_] = nzcnt; maxSize_ = nzcnt; index_ = new int[maxSize_]; element_ = new double[maxSize_]; majorDim_ = maxMajorDim_; minorDim_ = matrix.minorDim_; size_ = 0; const CoinBigIndex *startOld = matrix.start_; const double *elementOld = matrix.element_; const int *indexOld = matrix.index_; for (i = 0; i < maxMajorDim_; ++i) { int j = indMajor[i]; CoinBigIndex start = startOld[j]; int thisLength = length_[i]; const double *element = elementOld + start; const int *index = indexOld + start; for (int j = 0; j < thisLength; j++) { element_[size_] = element[j]; index_[size_++] = index[j]; } } } //############################################################################# void CoinPackedMatrix::copyOf(const CoinPackedMatrix &rhs) { if (this != &rhs) { gutsOfDestructor(); gutsOfCopyOf(rhs.colOrdered_, rhs.minorDim_, rhs.majorDim_, rhs.size_, rhs.element_, rhs.index_, rhs.start_, rhs.length_, rhs.extraMajor_, rhs.extraGap_); } } //----------------------------------------------------------------------------- void CoinPackedMatrix::copyOf(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len, const double extraMajor, const double extraGap) { gutsOfDestructor(); gutsOfCopyOf(colordered, minor, major, numels, elem, ind, start, len, extraMajor, extraGap); } //############################################################################# /* Copy method. This method makes an exact replica of the argument, including the extra space parameters. If there is room it will re-use arrays */ void CoinPackedMatrix::copyReuseArrays(const CoinPackedMatrix &rhs) { assert(colOrdered_ == rhs.colOrdered_); if (maxMajorDim_ >= rhs.majorDim_ && maxSize_ >= rhs.size_) { majorDim_ = rhs.majorDim_; minorDim_ = rhs.minorDim_; size_ = rhs.size_; extraGap_ = rhs.extraGap_; extraMajor_ = rhs.extraMajor_; CoinMemcpyN(rhs.length_, majorDim_, length_); CoinMemcpyN(rhs.start_, majorDim_ + 1, start_); if (size_ == start_[majorDim_]) { CoinMemcpyN(rhs.index_, size_, index_); CoinMemcpyN(rhs.element_, size_, element_); } else { // we can't just simply memcpy these content over, because that can // upset memory debuggers like purify if there were gaps and those gaps // were uninitialized memory blocks for (int i = majorDim_ - 1; i >= 0; --i) { CoinMemcpyN(rhs.index_ + start_[i], length_[i], index_ + start_[i]); CoinMemcpyN(rhs.element_ + start_[i], length_[i], element_ + start_[i]); } } } else { copyOf(rhs); } } //############################################################################# // This method is essentially the same as minorAppendOrthoOrdered(). However, // since we start from an empty matrix, lots of fluff can be avoided. void CoinPackedMatrix::reverseOrderedCopyOf(const CoinPackedMatrix &rhs) { if (this == &rhs) { reverseOrdering(); return; } int i; colOrdered_ = !rhs.colOrdered_; majorDim_ = rhs.minorDim_; minorDim_ = rhs.majorDim_; size_ = rhs.size_; if (size_ == 0) { // we still need to allocate starts and lengths maxMajorDim_ = majorDim_; delete[] start_; delete[] length_; delete[] index_; delete[] element_; start_ = new CoinBigIndex[maxMajorDim_ + 1]; length_ = new int[maxMajorDim_]; for (i = 0; i < majorDim_; ++i) { start_[i] = 0; length_[i] = 0; } start_[majorDim_] = 0; index_ = new int[maxSize_]; element_ = new double[maxSize_]; return; } // Allocate sufficient space (resizeForAddingMinorVectors()) const int newMaxMajorDim_ = CoinMax(maxMajorDim_, CoinLengthWithExtra(majorDim_, extraMajor_)); if (newMaxMajorDim_ > maxMajorDim_) { maxMajorDim_ = newMaxMajorDim_; delete[] start_; delete[] length_; start_ = new CoinBigIndex[maxMajorDim_ + 1]; length_ = new int[maxMajorDim_]; } // first compute how long each major-dimension vector will be int *COIN_RESTRICT orthoLength = length_; rhs.countOrthoLength(orthoLength); start_[0] = 0; if (extraGap_ == 0) { for (i = 0; i < majorDim_; ++i) start_[i + 1] = start_[i] + orthoLength[i]; } else { const double eg = extraGap_; for (i = 0; i < majorDim_; ++i) start_[i + 1] = start_[i] + CoinLengthWithExtra(orthoLength[i], eg); } const CoinBigIndex newMaxSize = CoinMax(maxSize_, CoinLengthWithExtra(getLastStart(), extraMajor_)); if (newMaxSize > maxSize_) { maxSize_ = newMaxSize; delete[] index_; delete[] element_; index_ = new int[maxSize_]; element_ = new double[maxSize_]; #ifdef ZEROFAULT memset(index_, 0, (maxSize_ * sizeof(int))); memset(element_, 0, (maxSize_ * sizeof(double))); #endif } // now insert the entries of matrix minorDim_ = rhs.majorDim_; const CoinBigIndex *COIN_RESTRICT start = rhs.start_; const int *COIN_RESTRICT index = rhs.index_; const int *COIN_RESTRICT length = rhs.length_; const double *COIN_RESTRICT element = rhs.element_; assert(start[0] == 0); CoinBigIndex first = 0; for (i = 0; i < minorDim_; ++i) { CoinBigIndex last = first + length[i]; CoinBigIndex j = first; first = start[i + 1]; #if 0 if (((last-j)&1)!=0) { const int ind = index[j]; CoinBigIndex put = start_[ind]; start_[ind] = put +1; element_[put] = element[j]; index_[put] = i; j++; } for (; j != last; j+=2) { const int ind0 = index[j]; CoinBigIndex put0 = start_[ind0]; double value0=element[j]; const int ind1 = index[j+1]; CoinBigIndex put1 = start_[ind1]; double value1=element[j+1]; start_[ind0] = put0 +1; start_[ind1] = put1 +1; element_[put0] = value0; index_[put0] = i; element_[put1] = value1; index_[put1] = i; } #else for (; j != last; ++j) { const int ind = index[j]; CoinBigIndex put = start_[ind]; start_[ind] = put + 1; element_[put] = element[j]; index_[put] = i; } #endif } // and re-adjust start_ for (i = 0; i < majorDim_; ++i) { start_[i] -= length_[i]; } } //############################################################################# void CoinPackedMatrix::assignMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, double *&elem, int *&ind, CoinBigIndex *&start, int *&len, const int maxmajor, const CoinBigIndex maxsize) { gutsOfDestructor(); colOrdered_ = colordered; element_ = elem; index_ = ind; start_ = start; majorDim_ = major; minorDim_ = minor; size_ = numels; maxMajorDim_ = maxmajor != -1 ? maxmajor : major; maxSize_ = maxsize != -1 ? maxsize : numels; if (len == NULL) { delete[] length_; length_ = new int[maxMajorDim_]; std::adjacent_difference(start + 1, start + (major + 1), length_); length_[0] -= static_cast< int >(start[0]); } else { length_ = len; } elem = NULL; ind = NULL; start = NULL; len = NULL; } //############################################################################# CoinPackedMatrix & CoinPackedMatrix::operator=(const CoinPackedMatrix &rhs) { if (this != &rhs) { gutsOfDestructor(); extraGap_ = rhs.extraGap_; extraMajor_ = rhs.extraMajor_; gutsOfOpEqual(rhs.colOrdered_, rhs.minorDim_, rhs.majorDim_, rhs.size_, rhs.element_, rhs.index_, rhs.start_, rhs.length_); } return *this; } //############################################################################# void CoinPackedMatrix::reverseOrdering() { CoinPackedMatrix m; m.extraGap_ = extraMajor_; m.extraMajor_ = extraGap_; m.reverseOrderedCopyOf(*this); swap(m); } //----------------------------------------------------------------------------- void CoinPackedMatrix::transpose() { colOrdered_ = !colOrdered_; } //----------------------------------------------------------------------------- void CoinPackedMatrix::swap(CoinPackedMatrix &m) { std::swap(colOrdered_, m.colOrdered_); std::swap(extraGap_, m.extraGap_); std::swap(extraMajor_, m.extraMajor_); std::swap(element_, m.element_); std::swap(index_, m.index_); std::swap(start_, m.start_); std::swap(length_, m.length_); std::swap(majorDim_, m.majorDim_); std::swap(minorDim_, m.minorDim_); std::swap(size_, m.size_); std::swap(maxMajorDim_, m.maxMajorDim_); std::swap(maxSize_, m.maxSize_); } //############################################################################# //############################################################################# void CoinPackedMatrix::times(const double *x, double *y) const { if (colOrdered_) timesMajor(x, y); else timesMinor(x, y); } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::times(const CoinPackedVectorBase &x, double *y) const { if (colOrdered_) timesMajor(x, y); else timesMinor(x, y); } #endif //----------------------------------------------------------------------------- void CoinPackedMatrix::transposeTimes(const double *x, double *y) const { if (colOrdered_) timesMinor(x, y); else timesMajor(x, y); } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::transposeTimes(const CoinPackedVectorBase &x, double *y) const { if (colOrdered_) timesMinor(x, y); else timesMajor(x, y); } #endif //############################################################################# //############################################################################# /* Count the number of entries in every minor-dimension vector and fill in an array containing these lengths. */ void CoinPackedMatrix::countOrthoLength(int *orthoLength) const { CoinZeroN(orthoLength, minorDim_); if (size_ != start_[majorDim_]) { // has gaps for (int i = 0; i < majorDim_; ++i) { const CoinBigIndex first = start_[i]; const CoinBigIndex last = first + length_[i]; for (CoinBigIndex j = first; j < last; ++j) { assert(index_[j] < minorDim_ && index_[j] >= 0); ++orthoLength[index_[j]]; } } } else { // no gaps const CoinBigIndex last = start_[majorDim_]; for (CoinBigIndex j = 0; j < last; ++j) { assert(index_[j] < minorDim_ && index_[j] >= 0); ++orthoLength[index_[j]]; } } } int *CoinPackedMatrix::countOrthoLength() const { int *orthoLength = new int[minorDim_]; countOrthoLength(orthoLength); return orthoLength; } //############################################################################# /* Returns an array containing major indices. The array is getNumElements long and if getVectorStarts() is 0,2,5 then the array would start 0,0,1,1,1,2... This method is provided to go back from a packed format to a triple format. The returned array is allocated with new int[], free it with delete[]. */ int *CoinPackedMatrix::getMajorIndices() const { // Check valid if (!majorDim_ || start_[majorDim_] != size_) return NULL; int *array = new int[size_]; for (int i = 0; i < majorDim_; i++) { for (CoinBigIndex k = start_[i]; k < start_[i + 1]; k++) array[k] = i; } return array; } //############################################################################# void CoinPackedMatrix::appendMajorVector(const int vecsize, const int *vecind, const double *vecelem) { #ifdef COIN_DEBUG for (int i = 0; i < vecsize; ++i) { if (vecind[i] < 0) throw CoinError("out of range index", "appendMajorVector", "CoinPackedMatrix"); } #if 0 if (std::find_if(vecind, vecind + vecsize, compose2(logical_or(), bind2nd(less(), 0), bind2nd(greater_equal(), minorDim_))) != vecind + vecsize) throw CoinError("out of range index", "appendMajorVector", "CoinPackedMatrix"); #endif #endif if (majorDim_ == maxMajorDim_ || vecsize > maxSize_ - getLastStart()) { resizeForAddingMajorVectors(1, &vecsize); } // got to get this again since it might change! const CoinBigIndex last = getLastStart(); // OK, now just append the major-dimension vector to the end length_[majorDim_] = vecsize; CoinMemcpyN(vecind, vecsize, index_ + last); CoinMemcpyN(vecelem, vecsize, element_ + last); if (majorDim_ == 0) start_[0] = 0; start_[majorDim_ + 1] = CoinMin(last + CoinLengthWithExtra(vecsize, extraGap_), maxSize_); // LL: Do we want to allow appending a vector that has more entries than // the current size? if (vecsize > 0) { minorDim_ = CoinMax(minorDim_, (*std::max_element(vecind, vecind + vecsize)) + 1); } ++majorDim_; size_ += vecsize; } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::appendMajorVector(const CoinPackedVectorBase &vec) { appendMajorVector(vec.getNumElements(), vec.getIndices(), vec.getElements()); } //----------------------------------------------------------------------------- void CoinPackedMatrix::appendMajorVectors(const int numvecs, const CoinPackedVectorBase *const *vecs) { int i; CoinBigIndex nz = 0; for (i = 0; i < numvecs; ++i) nz += CoinLengthWithExtra(vecs[i]->getNumElements(), extraGap_); reserve(majorDim_ + numvecs, getLastStart() + nz); for (i = 0; i < numvecs; ++i) appendMajorVector(*vecs[i]); } #endif //############################################################################# void CoinPackedMatrix::appendMinorVector(const int vecsize, const int *vecind, const double *vecelem) { if (vecsize == 0) { ++minorDim_; // empty row/column - still need to increase return; } int i; #if COIN_COINUTILS_CHECKLEVEL > 3 // Test if any of the indices are out of range for (i = 0; i < vecsize; ++i) { if (vecind[i] < 0 || vecind[i] >= majorDim_) throw CoinError("out of range index", "appendMinorVector", "CoinPackedMatrix"); } // Test if there are duplicate indices int *sortedind = CoinCopyOfArray(vecind, vecsize); std::sort(sortedind, sortedind + vecsize); if (std::adjacent_find(sortedind, sortedind + vecsize) != sortedind + vecsize) { throw CoinError("identical indices", "appendMinorVector", "CoinPackedMatrix"); } #endif // test that there's a gap at the end of every major-dimension vector where // we want to add a new entry for (i = vecsize - 1; i >= 0; --i) { const int j = vecind[i]; if (start_[j] + length_[j] == start_[j + 1]) break; } if (i >= 0) { int *addedEntries = new int[majorDim_]; memset(addedEntries, 0, majorDim_ * sizeof(int)); for (i = vecsize - 1; i >= 0; --i) addedEntries[vecind[i]] = 1; resizeForAddingMinorVectors(addedEntries); delete[] addedEntries; } // OK, now insert the entries of the minor-dimension vector for (i = vecsize - 1; i >= 0; --i) { const int j = vecind[i]; const CoinBigIndex posj = start_[j] + (length_[j]++); index_[posj] = minorDim_; element_[posj] = vecelem[i]; } ++minorDim_; size_ += vecsize; } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::appendMinorVector(const CoinPackedVectorBase &vec) { appendMinorVector(vec.getNumElements(), vec.getIndices(), vec.getElements()); } //----------------------------------------------------------------------------- void CoinPackedMatrix::appendMinorVectors(const int numvecs, const CoinPackedVectorBase *const *vecs) { if (numvecs == 0) return; int i; int *addedEntries = new int[majorDim_]; CoinZeroN(addedEntries, majorDim_); for (i = numvecs - 1; i >= 0; --i) { const int vecsize = vecs[i]->getNumElements(); const int *vecind = vecs[i]->getIndices(); for (int j = vecsize - 1; j >= 0; --j) { #ifdef COIN_DEBUG if (vecind[j] < 0 || vecind[j] >= majorDim_) throw CoinError("out of range index", "appendMinorVectors", "CoinPackedMatrix"); #endif ++addedEntries[vecind[j]]; } } for (i = majorDim_ - 1; i >= 0; --i) { if (start_[i] + length_[i] + addedEntries[i] > start_[i + 1]) break; } if (i >= 0) resizeForAddingMinorVectors(addedEntries); delete[] addedEntries; // now insert the entries of the vectors for (i = 0; i < numvecs; ++i) { const int vecsize = vecs[i]->getNumElements(); const int *vecind = vecs[i]->getIndices(); const double *vecelem = vecs[i]->getElements(); for (int j = vecsize - 1; j >= 0; --j) { const int ind = vecind[j]; element_[start_[ind] + length_[ind]] = vecelem[j]; index_[start_[ind] + (length_[ind]++)] = minorDim_; } ++minorDim_; size_ += vecsize; } } #endif //############################################################################# //############################################################################# void CoinPackedMatrix::majorAppendSameOrdered(const CoinPackedMatrix &matrix) { if (minorDim_ != matrix.minorDim_) { throw CoinError("dimension mismatch", "rightAppendSameOrdered", "CoinPackedMatrix"); } if (matrix.majorDim_ == 0) return; int i; if (majorDim_ + matrix.majorDim_ > maxMajorDim_ || getLastStart() + matrix.getLastStart() > maxSize_) { // we got to resize before we add. note that the resizing method // properly fills out start_ and length_ for the major-dimension // vectors to be added! resizeForAddingMajorVectors(matrix.majorDim_, matrix.length_); start_ += majorDim_; for (i = 0; i < matrix.majorDim_; ++i) { const int l = matrix.length_[i]; CoinMemcpyN(matrix.index_ + matrix.start_[i], l, index_ + start_[i]); CoinMemcpyN(matrix.element_ + matrix.start_[i], l, element_ + start_[i]); } start_ -= majorDim_; } else { start_ += majorDim_; length_ += majorDim_; for (i = 0; i < matrix.majorDim_; ++i) { const int l = matrix.length_[i]; CoinMemcpyN(matrix.index_ + matrix.start_[i], l, index_ + start_[i]); CoinMemcpyN(matrix.element_ + matrix.start_[i], l, element_ + start_[i]); start_[i + 1] = start_[i] + matrix.start_[i + 1] - matrix.start_[i]; length_[i] = l; } start_ -= majorDim_; length_ -= majorDim_; } majorDim_ += matrix.majorDim_; size_ += matrix.size_; } //----------------------------------------------------------------------------- void CoinPackedMatrix::minorAppendSameOrdered(const CoinPackedMatrix &matrix) { if (majorDim_ != matrix.majorDim_) { throw CoinError("dimension mismatch", "bottomAppendSameOrdered", "CoinPackedMatrix"); } if (matrix.minorDim_ == 0) return; int i; for (i = majorDim_ - 1; i >= 0; --i) { if (start_[i] + length_[i] + matrix.length_[i] > start_[i + 1]) break; } if (i >= 0) resizeForAddingMinorVectors(matrix.length_); // now insert the entries of matrix for (i = majorDim_ - 1; i >= 0; --i) { int l = matrix.length_[i]; CoinBigIndex put = start_[i] + length_[i]; const CoinBigIndex get = matrix.start_[i]; for (int j = 0; j < l; j++) index_[put + j] = matrix.index_[get + j] + minorDim_; CoinMemcpyN(matrix.element_ + matrix.start_[i], l, element_ + (start_[i] + length_[i])); length_[i] += l; } minorDim_ += matrix.minorDim_; size_ += matrix.size_; } //----------------------------------------------------------------------------- void CoinPackedMatrix::majorAppendOrthoOrdered(const CoinPackedMatrix &matrix) { if (minorDim_ != matrix.majorDim_) { throw CoinError("dimension mismatch", "majorAppendOrthoOrdered", "CoinPackedMatrix"); } if (matrix.majorDim_ == 0) return; int i; CoinBigIndex j; // this trickery is needed because MSVC++ is not willing to delete[] a // 'const int *' int *orthoLengthPtr = matrix.countOrthoLength(); const int *orthoLength = orthoLengthPtr; if (majorDim_ + matrix.minorDim_ > maxMajorDim_) { resizeForAddingMajorVectors(matrix.minorDim_, orthoLength); } else { const double extra_gap = extraGap_; start_ += majorDim_; for (i = 0; i < matrix.minorDim_; ++i) { start_[i + 1] = start_[i] + CoinLengthWithExtra(orthoLength[i], extra_gap); } start_ -= majorDim_; if (start_[majorDim_ + matrix.minorDim_] > maxSize_) { resizeForAddingMajorVectors(matrix.minorDim_, orthoLength); } } // At this point everything is big enough to accommodate the new entries. // Also, start_ is set to the correct starting points for all the new // major-dimension vectors. The length of the new major-dimension vectors // may or may not be correctly set. Hence we just zero them out and they'll // be set when the entries are actually added below. start_ += majorDim_; length_ += majorDim_; CoinZeroN(length_, matrix.minorDim_); for (i = 0; i < matrix.majorDim_; ++i) { const CoinBigIndex last = matrix.getVectorLast(i); for (j = matrix.getVectorFirst(i); j < last; ++j) { const int ind = matrix.index_[j]; element_[start_[ind] + length_[ind]] = matrix.element_[j]; index_[start_[ind] + (length_[ind]++)] = i; } } length_ -= majorDim_; start_ -= majorDim_; // We need to update majorDim_ and size_. We can just add in from matrix majorDim_ += matrix.minorDim_; size_ += matrix.size_; delete[] orthoLengthPtr; } //----------------------------------------------------------------------------- void CoinPackedMatrix::minorAppendOrthoOrdered(const CoinPackedMatrix &matrix) { if (majorDim_ != matrix.minorDim_) { throw CoinError("dimension mismatch", "bottomAppendOrthoOrdered", "CoinPackedMatrix"); } if (matrix.majorDim_ == 0) return; int i; // first compute how many entries will be added to each major-dimension // vector, and if needed, resize the matrix to accommodate all // this trickery is needed because MSVC++ is not willing to delete[] a // 'const int *' int *addedEntriesPtr = matrix.countOrthoLength(); const int *addedEntries = addedEntriesPtr; for (i = majorDim_ - 1; i >= 0; --i) { if (start_[i] + length_[i] + addedEntries[i] > start_[i + 1]) break; } if (i >= 0) resizeForAddingMinorVectors(addedEntries); delete[] addedEntriesPtr; // now insert the entries of matrix for (i = 0; i < matrix.majorDim_; ++i) { const CoinBigIndex last = matrix.getVectorLast(i); for (CoinBigIndex j = matrix.getVectorFirst(i); j != last; ++j) { const int ind = matrix.index_[j]; element_[start_[ind] + length_[ind]] = matrix.element_[j]; index_[start_[ind] + (length_[ind]++)] = minorDim_; } ++minorDim_; } size_ += matrix.size_; } //############################################################################# //############################################################################# void CoinPackedMatrix::deleteMajorVectors(const int numDel, const int *indDel) { if (numDel == majorDim_) { // everything is deleted majorDim_ = 0; minorDim_ = 0; size_ = 0; // Get rid of memory as well maxMajorDim_ = 0; delete[] length_; length_ = NULL; delete[] start_; start_ = new CoinBigIndex[1]; start_[0] = 0; ; delete[] element_; element_ = NULL; delete[] index_; index_ = NULL; maxSize_ = 0; return; } if (!extraGap_ && !extraMajor_ && false) { // See if this is faster char *keep = new char[majorDim_]; memset(keep, 1, majorDim_); for (int i = 0; i < numDel; i++) { int k = indDel[i]; assert(k >= 0 && k < majorDim_ && keep[k]); keep[k] = 0; } int n; // find first for (n = 0; n < majorDim_; n++) { if (!keep[n]) break; } size_ = start_[n]; for (int i = n; i < majorDim_; i++) { if (keep[i]) { int length = length_[i]; length_[n] = length; for (CoinBigIndex j = start_[i]; j < start_[i + 1]; j++) { element_[size_] = element_[j]; index_[size_++] = index_[j]; } start_[++n] = size_; } } majorDim_ = n; delete[] keep; } else { int *sortedDelPtr = CoinTestIndexSet(numDel, indDel, majorDim_, "deleteMajorVectors"); const int *sortedDel = sortedDelPtr == 0 ? indDel : sortedDelPtr; CoinBigIndex deleted = 0; const int last = numDel - 1; for (int i = 0; i < last; ++i) { const int ind = sortedDel[i]; const int ind1 = sortedDel[i + 1]; deleted += length_[ind]; if (ind1 - ind > 1) { CoinCopy(start_ + (ind + 1), start_ + ind1, start_ + (ind - i)); CoinCopy(length_ + (ind + 1), length_ + ind1, length_ + (ind - i)); } } // copy the last block of length_ and start_ const int ind = sortedDel[last]; deleted += length_[ind]; if (sortedDel[last] != majorDim_ - 1) { const int ind1 = majorDim_; CoinCopy(start_ + (ind + 1), start_ + ind1, start_ + (ind - last)); CoinCopy(length_ + (ind + 1), length_ + ind1, length_ + (ind - last)); } majorDim_ -= numDel; const int lastlength = CoinLengthWithExtra(length_[majorDim_ - 1], extraGap_); start_[majorDim_] = CoinMin(start_[majorDim_ - 1] + lastlength, maxSize_); size_ -= deleted; // if the very first major vector was deleted then copy the new first major // vector to the beginning to make certain that start_[0] is 0. This may // not be necessary, but better safe than sorry... if (sortedDel[0] == 0) { CoinCopyN(index_ + start_[0], length_[0], index_); CoinCopyN(element_ + start_[0], length_[0], element_); start_[0] = 0; } delete[] sortedDelPtr; } } //############################################################################# void CoinPackedMatrix::deleteMinorVectors(const int numDel, const int *indDel) { if (numDel == minorDim_) { // everything is deleted minorDim_ = 0; size_ = 0; // Get rid of as much memory as possible memset(length_, 0, majorDim_ * sizeof(int)); memset(start_, 0, (majorDim_ + 1) * sizeof(CoinBigIndex)); delete[] element_; element_ = NULL; delete[] index_; index_ = NULL; maxSize_ = 0; return; } int i, j, k; // first compute the new index of every row int *newindexPtr = new int[minorDim_]; CoinZeroN(newindexPtr, minorDim_); for (j = 0; j < numDel; ++j) { const int ind = indDel[j]; #ifdef COIN_DEBUG if (ind < 0 || ind >= minorDim_) throw CoinError("out of range index", "deleteMinorVectors", "CoinPackedMatrix"); if (newindexPtr[ind] == -1) throw CoinError("duplicate index", "deleteMinorVectors", "CoinPackedMatrix"); #endif newindexPtr[ind] = -1; } for (i = 0, k = 0; i < minorDim_; ++i) { if (newindexPtr[i] != -1) { newindexPtr[i] = k++; } } // Now crawl through the matrix const int *newindex = newindexPtr; #ifdef TAKEOUT int mcount[400]; memset(mcount, 0, 400 * sizeof(int)); for (i = 0; i < majorDim_; ++i) { int *index = index_ + start_[i]; double *elem = element_ + start_[i]; const int length_i = length_[i]; for (j = 0, k = 0; j < length_i; ++j) { mcount[index[j]]++; } } for (i = 0; i < minorDim_; i++) { if (mcount[i] == 10 || mcount[i] == 15) { if (newindex[i] >= 0) printf("Keeping original row %d (new %d) with count of %d\n", i, newindex[i], mcount[i]); else printf("deleting row %d with count of %d\n", i, mcount[i]); } } #endif if (!extraGap_) { // pack down size_ = 0; for (i = 0; i < majorDim_; ++i) { int *index = index_ + start_[i]; double *elem = element_ + start_[i]; start_[i] = size_; const int length_i = length_[i]; for (j = 0; j < length_i; ++j) { const int ind = newindex[index[j]]; if (ind >= 0) { index_[size_] = ind; element_[size_++] = elem[j]; } } length_[i] = static_cast< int >(size_ - start_[i]); } start_[majorDim_] = size_; } else { int deleted = 0; for (i = 0; i < majorDim_; ++i) { int *index = index_ + start_[i]; double *elem = element_ + start_[i]; const int length_i = length_[i]; for (j = 0, k = 0; j < length_i; ++j) { const int ind = newindex[index[j]]; if (ind != -1) { index[k] = ind; elem[k++] = elem[j]; } } deleted += length_i - k; length_[i] = k; } size_ -= deleted; } delete[] newindexPtr; minorDim_ -= numDel; } //############################################################################# //############################################################################# void CoinPackedMatrix::timesMajor(const double *x, double *y) const { memset(y, 0, minorDim_ * sizeof(double)); for (int i = majorDim_ - 1; i >= 0; --i) { const double x_i = x[i]; if (x_i != 0.0) { const CoinBigIndex last = getVectorLast(i); for (CoinBigIndex j = getVectorFirst(i); j < last; ++j) y[index_[j]] += x_i * element_[j]; } } } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::timesMajor(const CoinPackedVectorBase &x, double *y) const { memset(y, 0, minorDim_ * sizeof(double)); for (CoinBigIndex i = x.getNumElements() - 1; i >= 0; --i) { const double x_i = x.getElements()[i]; if (x_i != 0.0) { const int ind = x.getIndices()[i]; const CoinBigIndex last = getVectorLast(ind); for (CoinBigIndex j = getVectorFirst(ind); j < last; ++j) y[index_[j]] += x_i * element_[j]; } } } #endif //----------------------------------------------------------------------------- void CoinPackedMatrix::timesMinor(const double *x, double *y) const { memset(y, 0, majorDim_ * sizeof(double)); for (int i = majorDim_ - 1; i >= 0; --i) { double y_i = 0; const CoinBigIndex last = getVectorLast(i); for (CoinBigIndex j = getVectorFirst(i); j < last; ++j) y_i += x[index_[j]] * element_[j]; y[i] = y_i; } } //----------------------------------------------------------------------------- #ifndef CLP_NO_VECTOR void CoinPackedMatrix::timesMinor(const CoinPackedVectorBase &x, double *y) const { memset(y, 0, majorDim_ * sizeof(double)); for (int i = majorDim_ - 1; i >= 0; --i) { double y_i = 0; const CoinBigIndex last = getVectorLast(i); for (CoinBigIndex j = getVectorFirst(i); j < last; ++j) y_i += x[index_[j]] * element_[j]; y[i] = y_i; } } #endif //############################################################################# //############################################################################# CoinPackedMatrix::CoinPackedMatrix() : colOrdered_(true) , extraGap_(0.0) , extraMajor_(0.0) , element_(0) , index_(0) , length_(0) , majorDim_(0) , minorDim_(0) , size_(0) , maxMajorDim_(0) , maxSize_(0) { start_ = new CoinBigIndex[1]; start_[0] = 0; } //----------------------------------------------------------------------------- CoinPackedMatrix::CoinPackedMatrix(const bool colordered, const double extraMajor, const double extraGap) : colOrdered_(colordered) , extraGap_(extraGap) , extraMajor_(extraMajor) , element_(0) , index_(0) , length_(0) , majorDim_(0) , minorDim_(0) , size_(0) , maxMajorDim_(0) , maxSize_(0) { start_ = new CoinBigIndex[1]; start_[0] = 0; } //----------------------------------------------------------------------------- CoinPackedMatrix::CoinPackedMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len, const double extraMajor, const double extraGap) : colOrdered_(colordered) , extraGap_(extraGap) , extraMajor_(extraMajor) , element_(NULL) , index_(NULL) , start_(NULL) , length_(NULL) , majorDim_(0) , minorDim_(0) , size_(0) , maxMajorDim_(0) , maxSize_(0) { gutsOfOpEqual(colordered, minor, major, numels, elem, ind, start, len); } //----------------------------------------------------------------------------- CoinPackedMatrix::CoinPackedMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len) : colOrdered_(colordered) , extraGap_(0.0) , extraMajor_(0.0) , element_(NULL) , index_(NULL) , start_(NULL) , length_(NULL) , majorDim_(0) , minorDim_(0) , size_(0) , maxMajorDim_(0) , maxSize_(0) { gutsOfOpEqual(colordered, minor, major, numels, elem, ind, start, len); } //----------------------------------------------------------------------------- // makes column ordered from triplets and takes out duplicates // will be sorted // // This is an interesting in-place sorting algorithm; // We have triples, and want to sort them so that triples with the same column // are adjacent. // We begin by computing how many entries there are for each column (columnCount) // and using that to compute where each set of column entries will *end* (startColumn). // As we drop entries into place, startColumn is decremented until it contains // the position where the column entries *start*. // The invalid column index -2 means there's a "hole" in that position; // the invalid column index -1 means the entry in that spot is "where it wants to go". // Initially, no one is where they want to go. // Going back to front, // if that entry is where it wants to go // then leave it there // otherwise pick it up (which leaves a hole), and // for as long as you have an entry in your right hand, // - pick up the entry (with your left hand) in the position where the one in // your right hand wants to go; // - pass the entry in your left hand to your right hand; // - was that entry really just the "hole"? If so, stop. // It could be that all the entries get shuffled in the first loop iteration // and all the rest just confirm that everyone is happy where they are. // We never move an entry that is where it wants to go, so entries are moved at // most once. They may not change position if they happen to initially be // where they want to go when the for loop gets to them. // It depends on how many subpermutations the triples initially defined. // Each while loop takes care of one permutation. // The while loop has to stop, because each time around we mark one entry as happy. // We can't run into a happy entry, because we are decrementing the startColumn // all the time, so we must be running into new entries. // Once we've processed all the slots for a column, it cannot be the case that // there are any others that want to go there. // This all means that we eventually must run into the hole. CoinPackedMatrix::CoinPackedMatrix( const bool colordered, const int *indexRow, const int *indexColumn, const double *element, CoinBigIndex numberElements) : colOrdered_(colordered) , extraGap_(0.0) , extraMajor_(0.0) , element_(NULL) , index_(NULL) , start_(NULL) , length_(NULL) , majorDim_(0) , minorDim_(0) , size_(0) , maxMajorDim_(0) , maxSize_(0) { CoinAbsFltEq eq; int *colIndices = new int[numberElements]; int *rowIndices = new int[numberElements]; double *elements = new double[numberElements]; CoinCopyN(element, numberElements, elements); if (colordered) { CoinCopyN(indexColumn, numberElements, colIndices); CoinCopyN(indexRow, numberElements, rowIndices); } else { CoinCopyN(indexColumn, numberElements, rowIndices); CoinCopyN(indexRow, numberElements, colIndices); } int numberRows; int numberColumns; if (numberElements) { numberRows = *std::max_element(rowIndices, rowIndices + numberElements) + 1; numberColumns = *std::max_element(colIndices, colIndices + numberElements) + 1; } else { numberRows = 0; numberColumns = 0; } int *rowCount = new int[numberRows]; int *columnCount = new int[numberColumns]; CoinBigIndex *startColumn = new CoinBigIndex[numberColumns + 1]; int *lengths = new int[numberColumns + 1]; int iColumn; CoinBigIndex i; CoinBigIndex k; for (i = 0; i < numberRows; i++) { rowCount[i] = 0; } for (i = 0; i < numberColumns; i++) { columnCount[i] = 0; } for (i = 0; i < numberElements; i++) { int iRow = rowIndices[i]; int iColumn = colIndices[i]; rowCount[iRow]++; columnCount[iColumn]++; } CoinBigIndex iCount = 0; for (iColumn = 0; iColumn < numberColumns; iColumn++) { /* position after end of Column */ iCount += columnCount[iColumn]; startColumn[iColumn] = iCount; } /* endfor */ startColumn[iColumn] = iCount; for (k = numberElements - 1; k >= 0; k--) { iColumn = colIndices[k]; if (iColumn >= 0) { /* pick up the entry with your right hand */ double value = elements[k]; int iRow = rowIndices[k]; colIndices[k] = -2; /* the hole */ while (1) { /* pick this up with your left */ CoinBigIndex iLook = startColumn[iColumn] - 1; double valueSave = elements[iLook]; int iColumnSave = colIndices[iLook]; int iRowSave = rowIndices[iLook]; /* put the right-hand entry where it wanted to go */ startColumn[iColumn] = iLook; elements[iLook] = value; rowIndices[iLook] = iRow; colIndices[iLook] = -1; /* mark it as being where it wants to be */ /* there was something there */ if (iColumnSave >= 0) { iColumn = iColumnSave; value = valueSave; iRow = iRowSave; } else if (iColumnSave == -2) { /* that was the hole */ break; } else { assert(1 == 0); /* should never happen */ } /* endif */ } /* endwhile */ } /* endif */ } /* endfor */ /* now pack the elements and combine entries with the same row and column */ /* also, drop entries with "small" coefficients */ numberElements = 0; for (iColumn = 0; iColumn < numberColumns; iColumn++) { CoinBigIndex start = startColumn[iColumn]; CoinBigIndex end = startColumn[iColumn + 1]; lengths[iColumn] = 0; startColumn[iColumn] = numberElements; if (end > start) { int lastRow; double lastValue; // sorts on indices dragging elements with CoinSort_2(rowIndices + start, rowIndices + end, elements + start, CoinFirstLess_2< int, double >()); lastRow = rowIndices[start]; lastValue = elements[start]; for (i = start + 1; i < end; i++) { int iRow = rowIndices[i]; double value = elements[i]; if (iRow > lastRow) { //if(fabs(lastValue)>tolerance) { if (!eq(lastValue, 0.0)) { rowIndices[numberElements] = lastRow; elements[numberElements] = lastValue; numberElements++; lengths[iColumn]++; } lastRow = iRow; lastValue = value; } else { lastValue += value; } /* endif */ } /* endfor */ //if(fabs(lastValue)>tolerance) { if (!eq(lastValue, 0.0)) { rowIndices[numberElements] = lastRow; elements[numberElements] = lastValue; numberElements++; lengths[iColumn]++; } } } /* endfor */ startColumn[numberColumns] = numberElements; #if 0 gutsOfOpEqual(colordered,numberRows,numberColumns,numberElements,elements,rowIndices,startColumn,lengths); delete [] rowCount; delete [] columnCount; delete [] startColumn; delete [] lengths; delete [] colIndices; delete [] rowIndices; delete [] elements; #else assignMatrix(colordered, numberRows, numberColumns, numberElements, elements, rowIndices, startColumn, lengths); delete[] rowCount; delete[] columnCount; delete[] lengths; delete[] colIndices; #endif } //----------------------------------------------------------------------------- CoinPackedMatrix::CoinPackedMatrix(const CoinPackedMatrix &rhs) : colOrdered_(true) , extraGap_(0.0) , extraMajor_(0.0) , element_(0) , index_(0) , start_(0) , length_(0) , majorDim_(0) , minorDim_(0) , size_(0) , maxMajorDim_(0) , maxSize_(0) { bool hasGaps = rhs.size_ < rhs.start_[rhs.majorDim_]; if (!hasGaps && !rhs.extraMajor_) { gutsOfCopyOfNoGaps(rhs.colOrdered_, rhs.minorDim_, rhs.majorDim_, rhs.element_, rhs.index_, rhs.start_); } else { gutsOfCopyOf(rhs.colOrdered_, rhs.minorDim_, rhs.majorDim_, rhs.size_, rhs.element_, rhs.index_, rhs.start_, rhs.length_, rhs.extraMajor_, rhs.extraGap_); } } /* Copy constructor - fine tuning - allowing extra space and/or reverse ordering. extraForMajor is exact extra after any possible reverse ordering. If < 0 then gaps and small values are removed as the copy is created. extraMajor_ and extraGap_ set to zero. */ CoinPackedMatrix::CoinPackedMatrix(const CoinPackedMatrix &rhs, int extraForMajor, int extraElements, bool reverseOrdering) : colOrdered_(rhs.colOrdered_) , extraGap_(0) , extraMajor_(0) , element_(0) , index_(0) , start_(0) , length_(0) , majorDim_(rhs.majorDim_) , minorDim_(rhs.minorDim_) , size_(rhs.size_) , maxMajorDim_(0) , maxSize_(0) { if (!reverseOrdering) { if (extraForMajor >= 0) { maxMajorDim_ = majorDim_ + extraForMajor; maxSize_ = size_ + extraElements; assert(maxMajorDim_ > 0); assert(maxSize_ > 0); length_ = new int[maxMajorDim_]; CoinMemcpyN(rhs.length_, majorDim_, length_); start_ = new CoinBigIndex[maxMajorDim_ + 1]; element_ = new double[maxSize_]; index_ = new int[maxSize_]; bool hasGaps = rhs.size_ < rhs.start_[rhs.majorDim_]; if (hasGaps) { // we can't just simply memcpy these content over, because that can // upset memory debuggers like purify if there were gaps and those gaps // were uninitialized memory blocks CoinBigIndex size = 0; for (int i = 0; i < majorDim_; i++) { start_[i] = size; CoinMemcpyN(rhs.index_ + rhs.start_[i], length_[i], index_ + size); CoinMemcpyN(rhs.element_ + rhs.start_[i], length_[i], element_ + size); size += length_[i]; } start_[majorDim_] = size; assert(size_ == size); } else { CoinMemcpyN(rhs.start_, majorDim_ + 1, start_); CoinMemcpyN(rhs.index_, size_, index_); CoinMemcpyN(rhs.element_, size_, element_); } } else { // take out small and gaps maxMajorDim_ = majorDim_; maxSize_ = size_; if (maxMajorDim_ > 0) { length_ = new int[maxMajorDim_]; start_ = new CoinBigIndex[maxMajorDim_ + 1]; if (maxSize_ > 0) { element_ = new double[maxSize_]; index_ = new int[maxSize_]; } CoinBigIndex size = 0; const double *oldElement = rhs.element_; const CoinBigIndex *oldStart = rhs.start_; const int *oldIndex = rhs.index_; const int *oldLength = rhs.length_; CoinBigIndex tooSmallCount = 0; for (int i = 0; i < majorDim_; i++) { start_[i] = size; for (CoinBigIndex j = oldStart[i]; j < oldStart[i] + oldLength[i]; j++) { double value = oldElement[j]; if (fabs(value) > 1.0e-21) { element_[size] = value; index_[size++] = oldIndex[j]; } else { tooSmallCount++; } } length_[i] = static_cast< int >(size - start_[i]); } start_[majorDim_] = size; assert(size_ == size + tooSmallCount); size_ = size; } else { start_ = new CoinBigIndex[1]; start_[0] = 0; } } } else { // more complicated colOrdered_ = !colOrdered_; minorDim_ = rhs.majorDim_; majorDim_ = rhs.minorDim_; maxMajorDim_ = majorDim_ + extraForMajor; maxSize_ = CoinMax(size_ + extraElements, static_cast< CoinBigIndex >(1)); assert(maxMajorDim_ > 0); length_ = new int[maxMajorDim_]; start_ = new CoinBigIndex[maxMajorDim_ + 1]; element_ = new double[maxSize_]; index_ = new int[maxSize_]; bool hasGaps = rhs.size_ < rhs.start_[rhs.majorDim_]; CoinZeroN(length_, majorDim_); int i; if (hasGaps) { // has gaps for (i = 0; i < rhs.majorDim_; ++i) { const CoinBigIndex first = rhs.start_[i]; const CoinBigIndex last = first + rhs.length_[i]; for (CoinBigIndex j = first; j < last; ++j) { assert(rhs.index_[j] < rhs.minorDim_ && rhs.index_[j] >= 0); ++length_[rhs.index_[j]]; } } } else { // no gaps const CoinBigIndex last = rhs.start_[rhs.majorDim_]; for (CoinBigIndex j = 0; j < last; ++j) { assert(rhs.index_[j] < rhs.minorDim_ && rhs.index_[j] >= 0); ++length_[rhs.index_[j]]; } } // Now do starts CoinBigIndex size = 0; for (i = 0; i < majorDim_; ++i) { start_[i] = size; size += length_[i]; } start_[majorDim_] = size; assert(size == size_); for (i = 0; i < rhs.majorDim_; ++i) { const CoinBigIndex first = rhs.start_[i]; const CoinBigIndex last = first + rhs.length_[i]; for (CoinBigIndex j = first; j < last; ++j) { const int ind = rhs.index_[j]; CoinBigIndex put = start_[ind]; start_[ind] = put + 1; element_[put] = rhs.element_[j]; index_[put] = i; } } // and re-adjust start_ for (i = 0; i < majorDim_; ++i) { start_[i] -= length_[i]; } } } // Subset constructor (without gaps) CoinPackedMatrix::CoinPackedMatrix(const CoinPackedMatrix &rhs, int numberRows, const int *whichRow, int numberColumns, const int *whichColumn) : colOrdered_(true) , extraGap_(0.0) , extraMajor_(0.0) , element_(NULL) , index_(NULL) , start_(NULL) , length_(NULL) , majorDim_(0) , minorDim_(0) , size_(0) , maxMajorDim_(0) , maxSize_(0) { if (numberRows <= 0 || numberColumns <= 0) { start_ = new CoinBigIndex[1]; start_[0] = 0; } else { if (!rhs.colOrdered_) { // just swap lists colOrdered_ = false; const int *temp = whichRow; whichRow = whichColumn; whichColumn = temp; int n = numberRows; numberRows = numberColumns; numberColumns = n; } const double *element1 = rhs.element_; const int *index1 = rhs.index_; const CoinBigIndex *start1 = rhs.start_; const int *length1 = rhs.length_; majorDim_ = numberColumns; maxMajorDim_ = numberColumns; minorDim_ = numberRows; // Throw exception if rhs empty if (rhs.majorDim_ <= 0 || rhs.minorDim_ <= 0) throw CoinError("empty rhs", "subset constructor", "CoinPackedMatrix"); // Array to say if an old row is in new copy int *newRow = new int[rhs.minorDim_]; int iRow; for (iRow = 0; iRow < rhs.minorDim_; iRow++) newRow[iRow] = -1; // and array for duplicating rows int *duplicateRow = new int[numberRows]; int numberBad = 0; int numberDuplicate = 0; for (iRow = 0; iRow < numberRows; iRow++) { duplicateRow[iRow] = -1; int kRow = whichRow[iRow]; if (kRow >= 0 && kRow < rhs.minorDim_) { if (newRow[kRow] < 0) { // first time newRow[kRow] = iRow; } else { // duplicate numberDuplicate++; int lastRow = newRow[kRow]; newRow[kRow] = iRow; duplicateRow[iRow] = lastRow; } } else { // bad row numberBad++; } } if (numberBad) throw CoinError("bad minor entries", "subset constructor", "CoinPackedMatrix"); // now get size and check columns size_ = 0; int iColumn; numberBad = 0; if (!numberDuplicate) { // No duplicates so can do faster // If not much smaller then use original size if (3 * majorDim_ > 2 * rhs.majorDim_ && 3 * minorDim_ > 2 * rhs.minorDim_) { // now create arrays maxSize_ = CoinMax(static_cast< CoinBigIndex >(1), rhs.size_); start_ = new CoinBigIndex[numberColumns + 1]; length_ = new int[numberColumns]; index_ = new int[maxSize_]; element_ = new double[maxSize_]; // and fill them size_ = 0; start_[0] = 0; for (iColumn = 0; iColumn < numberColumns; iColumn++) { int kColumn = whichColumn[iColumn]; if (kColumn >= 0 && kColumn < rhs.majorDim_) { CoinBigIndex i; for (i = start1[kColumn]; i < start1[kColumn] + length1[kColumn]; i++) { int kRow = index1[i]; double value = element1[i]; kRow = newRow[kRow]; if (kRow >= 0) { index_[size_] = kRow; element_[size_++] = value; } } } else { // bad column numberBad++; } start_[iColumn + 1] = size_; length_[iColumn] = static_cast< int >(size_ - start_[iColumn]); } if (numberBad) throw CoinError("bad major entries", "subset constructor", "CoinPackedMatrix"); } else { for (iColumn = 0; iColumn < numberColumns; iColumn++) { int kColumn = whichColumn[iColumn]; if (kColumn >= 0 && kColumn < rhs.majorDim_) { CoinBigIndex i; for (i = start1[kColumn]; i < start1[kColumn] + length1[kColumn]; i++) { int kRow = index1[i]; kRow = newRow[kRow]; if (kRow >= 0) size_++; } } else { // bad column numberBad++; } } if (numberBad) throw CoinError("bad major entries", "subset constructor", "CoinPackedMatrix"); // now create arrays maxSize_ = CoinMax(static_cast< CoinBigIndex >(1), size_); start_ = new CoinBigIndex[numberColumns + 1]; length_ = new int[numberColumns]; index_ = new int[maxSize_]; element_ = new double[maxSize_]; // and fill them size_ = 0; start_[0] = 0; for (iColumn = 0; iColumn < numberColumns; iColumn++) { int kColumn = whichColumn[iColumn]; CoinBigIndex i; for (i = start1[kColumn]; i < start1[kColumn] + length1[kColumn]; i++) { int kRow = index1[i]; double value = element1[i]; kRow = newRow[kRow]; if (kRow >= 0) { index_[size_] = kRow; element_[size_++] = value; } } start_[iColumn + 1] = size_; length_[iColumn] = static_cast< int >(size_ - start_[iColumn]); } } } else { for (iColumn = 0; iColumn < numberColumns; iColumn++) { int kColumn = whichColumn[iColumn]; if (kColumn >= 0 && kColumn < rhs.majorDim_) { CoinBigIndex i; for (i = start1[kColumn]; i < start1[kColumn] + length1[kColumn]; i++) { int kRow = index1[i]; kRow = newRow[kRow]; while (kRow >= 0) { size_++; kRow = duplicateRow[kRow]; } } } else { // bad column numberBad++; } } if (numberBad) throw CoinError("bad major entries", "subset constructor", "CoinPackedMatrix"); // now create arrays maxSize_ = CoinMax(static_cast< CoinBigIndex >(1), size_); start_ = new CoinBigIndex[numberColumns + 1]; length_ = new int[numberColumns]; index_ = new int[maxSize_]; element_ = new double[maxSize_]; // and fill them size_ = 0; start_[0] = 0; for (iColumn = 0; iColumn < numberColumns; iColumn++) { int kColumn = whichColumn[iColumn]; CoinBigIndex i; for (i = start1[kColumn]; i < start1[kColumn] + length1[kColumn]; i++) { int kRow = index1[i]; double value = element1[i]; kRow = newRow[kRow]; while (kRow >= 0) { index_[size_] = kRow; element_[size_++] = value; kRow = duplicateRow[kRow]; } } start_[iColumn + 1] = size_; length_[iColumn] = static_cast< int >(size_ - start_[iColumn]); } } delete[] newRow; delete[] duplicateRow; } } //----------------------------------------------------------------------------- CoinPackedMatrix::~CoinPackedMatrix() { gutsOfDestructor(); } //############################################################################# //############################################################################# //############################################################################# void CoinPackedMatrix::gutsOfDestructor() { delete[] length_; delete[] start_; delete[] index_; delete[] element_; length_ = 0; start_ = 0; index_ = 0; element_ = 0; } //############################################################################# void CoinPackedMatrix::gutsOfCopyOf(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len, const double extraMajor, const double extraGap) { colOrdered_ = colordered; majorDim_ = major; minorDim_ = minor; size_ = numels; extraGap_ = extraGap; extraMajor_ = extraMajor; maxMajorDim_ = CoinLengthWithExtra(majorDim_, extraMajor_); if (maxMajorDim_ > 0) { delete[] length_; length_ = new int[maxMajorDim_]; if (len == 0) { std::adjacent_difference(start + 1, start + (major + 1), length_); length_[0] -= static_cast< int >(start[0]); } else { CoinMemcpyN(len, major, length_); } delete[] start_; start_ = new CoinBigIndex[maxMajorDim_ + 1]; start_[0] = 0; CoinMemcpyN(start, major + 1, start_); } else { // empty but be safe delete[] length_; length_ = NULL; delete[] start_; start_ = new CoinBigIndex[1]; start_[0] = 0; } maxSize_ = maxMajorDim_ > 0 ? start_[major] : 0; maxSize_ = CoinLengthWithExtra(maxSize_, extraMajor_); if (maxSize_ > 0) { delete[] element_; delete[] index_; element_ = new double[maxSize_]; index_ = new int[maxSize_]; // we can't just simply memcpy these content over, because that can // upset memory debuggers like purify if there were gaps and those gaps // were uninitialized memory blocks for (int i = majorDim_ - 1; i >= 0; --i) { CoinMemcpyN(ind + start[i], length_[i], index_ + start_[i]); CoinMemcpyN(elem + start[i], length_[i], element_ + start_[i]); } } } //############################################################################# void CoinPackedMatrix::gutsOfCopyOfNoGaps(const bool colordered, const int minor, const int major, const double *elem, const int *ind, const CoinBigIndex *start) { colOrdered_ = colordered; majorDim_ = major; minorDim_ = minor; size_ = start[majorDim_]; extraGap_ = 0; extraMajor_ = 0; maxMajorDim_ = majorDim_; // delete all arrays delete[] length_; delete[] start_; delete[] element_; delete[] index_; if (maxMajorDim_ > 0) { length_ = new int[maxMajorDim_]; assert(!start[0]); start_ = new CoinBigIndex[maxMajorDim_ + 1]; start_[0] = 0; CoinBigIndex last = 0; for (int i = 0; i < majorDim_; i++) { CoinBigIndex first = last; last = start[i + 1]; length_[i] = static_cast< int >(last - first); start_[i + 1] = last; } } else { // empty but be safe length_ = NULL; start_ = new CoinBigIndex[1]; start_[0] = 0; } maxSize_ = start_[majorDim_]; if (maxSize_ > 0) { element_ = new double[maxSize_]; index_ = new int[maxSize_]; CoinMemcpyN(ind, maxSize_, index_); CoinMemcpyN(elem, maxSize_, element_); } else { element_ = NULL; index_ = NULL; } } //############################################################################# void CoinPackedMatrix::gutsOfOpEqual(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len) { colOrdered_ = colordered; majorDim_ = major; minorDim_ = minor; size_ = numels; if (!len && numels > 0 && numels == start[major] && start[0] == 0) { // No gaps - do faster if (major > maxMajorDim_ || !start_) { maxMajorDim_ = major; delete[] length_; length_ = new int[maxMajorDim_]; delete[] start_; start_ = new CoinBigIndex[maxMajorDim_ + 1]; } CoinMemcpyN(start, major + 1, start_); std::adjacent_difference(start + 1, start + (major + 1), length_); if (numels > maxSize_ || !element_) { maxSize_ = numels; delete[] element_; delete[] index_; element_ = new double[maxSize_]; index_ = new int[maxSize_]; } CoinMemcpyN(ind, numels, index_); CoinMemcpyN(elem, numels, element_); } else { maxMajorDim_ = CoinLengthWithExtra(majorDim_, extraMajor_); int i; if (maxMajorDim_ > 0) { delete[] length_; length_ = new int[maxMajorDim_]; if (len == 0) { std::adjacent_difference(start + 1, start + (major + 1), length_); length_[0] -= static_cast< int >(start[0]); } else { CoinMemcpyN(len, major, length_); } delete[] start_; start_ = new CoinBigIndex[maxMajorDim_ + 1]; start_[0] = 0; if (extraGap_ == 0) { for (i = 0; i < major; ++i) start_[i + 1] = start_[i] + length_[i]; } else { const double extra_gap = extraGap_; for (i = 0; i < major; ++i) start_[i + 1] = start_[i] + CoinLengthWithExtra(length_[i], extra_gap); } } else { // empty matrix delete[] start_; start_ = new CoinBigIndex[1]; start_[0] = 0; } maxSize_ = maxMajorDim_ > 0 ? start_[major] : 0; maxSize_ = CoinLengthWithExtra(maxSize_, extraMajor_); if (maxSize_ > 0) { delete[] element_; delete[] index_; element_ = new double[maxSize_]; index_ = new int[maxSize_]; assert(maxSize_ >= start_[majorDim_ - 1] + length_[majorDim_ - 1]); // we can't just simply memcpy these content over, because that can // upset memory debuggers like purify if there were gaps and those gaps // were uninitialized memory blocks for (i = majorDim_ - 1; i >= 0; --i) { CoinMemcpyN(ind + start[i], length_[i], index_ + start_[i]); CoinMemcpyN(elem + start[i], length_[i], element_ + start_[i]); } } } #ifndef NDEBUG for (int i = majorDim_ - 1; i >= 0; --i) { const CoinBigIndex last = getVectorLast(i); for (CoinBigIndex j = getVectorFirst(i); j < last; ++j) { int index = index_[j]; assert(index >= 0 && index < minorDim_); } } #endif } //############################################################################# // This routine is called only if we MUST resize! void CoinPackedMatrix::resizeForAddingMajorVectors(const int numVec, const int *lengthVec) { const double extra_gap = extraGap_; int i; maxMajorDim_ = CoinMax(maxMajorDim_, CoinLengthWithExtra(majorDim_ + numVec, extraMajor_)); CoinBigIndex *newStart = new CoinBigIndex[maxMajorDim_ + 1]; int *newLength = new int[maxMajorDim_]; CoinMemcpyN(length_, majorDim_, newLength); // fake that the new vectors are there CoinMemcpyN(lengthVec, numVec, newLength + majorDim_); majorDim_ += numVec; newStart[0] = 0; if (extra_gap == 0) { for (i = 0; i < majorDim_; ++i) newStart[i + 1] = newStart[i] + newLength[i]; } else { for (i = 0; i < majorDim_; ++i) newStart[i + 1] = newStart[i] + CoinLengthWithExtra(newLength[i], extra_gap); } maxSize_ = CoinMax(maxSize_, CoinLengthWithExtra(newStart[majorDim_], extraMajor_)); majorDim_ -= numVec; int *newIndex = new int[maxSize_]; double *newElem = new double[maxSize_]; for (i = majorDim_ - 1; i >= 0; --i) { CoinMemcpyN(index_ + start_[i], length_[i], newIndex + newStart[i]); CoinMemcpyN(element_ + start_[i], length_[i], newElem + newStart[i]); } gutsOfDestructor(); start_ = newStart; length_ = newLength; index_ = newIndex; element_ = newElem; } //############################################################################# void CoinPackedMatrix::resizeForAddingMinorVectors(const int *addedEntries) { int i; maxMajorDim_ = CoinMax(CoinLengthWithExtra(majorDim_, extraMajor_), maxMajorDim_); CoinBigIndex *newStart = new CoinBigIndex[maxMajorDim_ + 1]; int *newLength = new int[maxMajorDim_]; // increase the lengths temporarily so that the correct new start positions // can be easily computed (it's faster to modify the lengths and reset them // than do a test for every entry when the start positions are computed. for (i = majorDim_ - 1; i >= 0; --i) newLength[i] = length_[i] + addedEntries[i]; newStart[0] = 0; if (extraGap_ == 0) { for (i = 0; i < majorDim_; ++i) newStart[i + 1] = newStart[i] + newLength[i]; } else { const double eg = extraGap_; for (i = 0; i < majorDim_; ++i) newStart[i + 1] = newStart[i] + CoinLengthWithExtra(newLength[i], eg); } // reset the lengths for (i = majorDim_ - 1; i >= 0; --i) newLength[i] -= addedEntries[i]; maxSize_ = CoinMax(maxSize_, CoinLengthWithExtra(newStart[majorDim_], extraMajor_)); int *newIndex = new int[maxSize_]; double *newElem = new double[maxSize_]; for (i = majorDim_ - 1; i >= 0; --i) { CoinMemcpyN(index_ + start_[i], length_[i], newIndex + newStart[i]); CoinMemcpyN(element_ + start_[i], length_[i], newElem + newStart[i]); } gutsOfDestructor(); start_ = newStart; length_ = newLength; index_ = newIndex; element_ = newElem; } //############################################################################# //############################################################################# void CoinPackedMatrix::dumpMatrix(const char *fname) const { if (!fname) { printf("Dumping matrix...\n\n"); printf("colordered: %i\n", isColOrdered() ? 1 : 0); const int major = getMajorDim(); const int minor = getMinorDim(); printf("major: %i minor: %i\n", major, minor); for (int i = 0; i < major; ++i) { printf("vec %i has length %i with entries:\n", i, length_[i]); for (CoinBigIndex j = start_[i]; j < start_[i] + length_[i]; ++j) { printf(" %15i %40.25f\n", index_[j], element_[j]); } } printf("\nFinished dumping matrix\n"); } else { FILE *out = fopen(fname, "w"); fprintf(out, "Dumping matrix...\n\n"); fprintf(out, "colordered: %i\n", isColOrdered() ? 1 : 0); const int major = getMajorDim(); const int minor = getMinorDim(); fprintf(out, "major: %i minor: %i\n", major, minor); for (int i = 0; i < major; ++i) { fprintf(out, "vec %i has length %i with entries:\n", i, length_[i]); for (CoinBigIndex j = start_[i]; j < start_[i] + length_[i]; ++j) { fprintf(out, " %15i %40.25f\n", index_[j], element_[j]); } } fprintf(out, "\nFinished dumping matrix\n"); fclose(out); } } void CoinPackedMatrix::printMatrixElement(const int row_val, const int col_val) const { int major_index, minor_index; if (isColOrdered()) { major_index = col_val; minor_index = row_val; } else { major_index = row_val; minor_index = col_val; } if (major_index < 0 || major_index > getMajorDim() - 1) { std::cout << "Major index " << major_index << " not in range 0.." << getMajorDim() - 1 << std::endl; } else if (minor_index < 0 || minor_index > getMinorDim() - 1) { std::cout << "Minor index " << minor_index << " not in range 0.." << getMinorDim() - 1 << std::endl; } else { CoinBigIndex curr_point = start_[major_index]; const CoinBigIndex stop_point = curr_point + length_[major_index]; double aij = 0.0; for (; curr_point < stop_point; curr_point++) { if (index_[curr_point] == minor_index) { aij = element_[curr_point]; break; } } std::cout << aij; } } #ifndef CLP_NO_VECTOR bool CoinPackedMatrix::isEquivalent2(const CoinPackedMatrix &rhs) const { CoinRelFltEq eq; // Both must be column order or both row ordered and must be of same size if (isColOrdered() ^ rhs.isColOrdered()) { std::cerr << "Ordering " << isColOrdered() << " rhs - " << rhs.isColOrdered() << std::endl; return false; } if (getNumCols() != rhs.getNumCols()) { std::cerr << "NumCols " << getNumCols() << " rhs - " << rhs.getNumCols() << std::endl; return false; } if (getNumRows() != rhs.getNumRows()) { std::cerr << "NumRows " << getNumRows() << " rhs - " << rhs.getNumRows() << std::endl; return false; } if (getNumElements() != rhs.getNumElements()) { std::cerr << "NumElements " << getNumElements() << " rhs - " << rhs.getNumElements() << std::endl; return false; } for (int i = getMajorDim() - 1; i >= 0; --i) { CoinShallowPackedVector pv = getVector(i); CoinShallowPackedVector rhsPv = rhs.getVector(i); if (!pv.isEquivalent(rhsPv, eq)) { std::cerr << "vector # " << i << " nel " << pv.getNumElements() << " rhs - " << rhsPv.getNumElements() << std::endl; int j; const int *inds = pv.getIndices(); const double *elems = pv.getElements(); const int *inds2 = rhsPv.getIndices(); const double *elems2 = rhsPv.getElements(); for (j = 0; j < pv.getNumElements(); ++j) { double diff = elems[j] - elems2[j]; if (diff) { std::cerr << j << "( " << inds[j] << ", " << elems[j] << "), rhs ( " << inds2[j] << ", " << elems2[j] << ") diff " << diff << std::endl; const int *xx = reinterpret_cast< const int * >(elems + j); printf("%x %x", xx[0], xx[1]); xx = reinterpret_cast< const int * >(elems2 + j); printf(" %x %x\n", xx[0], xx[1]); } } //return false; } } return true; } #else /* Equivalence. Two matrices are equivalent if they are both by rows or both by columns, they have the same dimensions, and each vector is equivalent. In this method the FloatEqual function operator can be specified. */ bool CoinPackedMatrix::isEquivalent(const CoinPackedMatrix &rhs, const CoinRelFltEq &eq) const { // Both must be column order or both row ordered and must be of same size if ((isColOrdered() ^ rhs.isColOrdered()) || (getNumCols() != rhs.getNumCols()) || (getNumRows() != rhs.getNumRows()) || (getNumElements() != rhs.getNumElements())) return false; const int major = getMajorDim(); const int minor = getMinorDim(); double *values = new double[minor]; memset(values, 0, minor * sizeof(double)); bool same = true; for (int i = 0; i < major; ++i) { int length = length_[i]; if (length != rhs.length_[i]) { same = false; break; } else { CoinBigIndex j; for (j = start_[i]; j < start_[i] + length; ++j) { int index = index_[j]; values[index] = element_[j]; } for (j = rhs.start_[i]; j < rhs.start_[i] + length; ++j) { int index = index_[j]; double oldValue = values[index]; values[index] = 0.0; if (!eq(oldValue, rhs.element_[j])) { same = false; break; } } if (!same) break; } } delete[] values; return same; } #endif bool CoinPackedMatrix::isEquivalent(const CoinPackedMatrix &rhs) const { return isEquivalent(rhs, CoinRelFltEq()); } /* Sort all columns so indices are increasing.in each column */ void CoinPackedMatrix::orderMatrix() { for (int i = 0; i < majorDim_; i++) { CoinBigIndex start = start_[i]; CoinBigIndex end = start + length_[i]; CoinSort_2(index_ + start, index_ + end, element_ + start); } } /* Append a set of rows/columns to the end of the matrix. Returns number of errors i.e. if any of the new rows/columns contain an index that's larger than the number of columns-1/rows-1 (if numberOther>0) or duplicates This version is easy one i.e. adding columns to column ordered */ int CoinPackedMatrix::appendMajor(const int number, const CoinBigIndex *starts, const int *index, const double *element, int numberOther) { int i; int numberErrors = 0; CoinBigIndex numberElements = starts[number]; if (majorDim_ + number > maxMajorDim_ || getLastStart() + numberElements > maxSize_) { // we got to resize before we add. note that the resizing method // properly fills out start_ and length_ for the major-dimension // vectors to be added! if (!extraGap_ && !extraMajor_ && numberOther <= 0 && !hasGaps()) { // can do faster if (majorDim_ + number > maxMajorDim_) { maxMajorDim_ = majorDim_ + number; int *newLength = new int[maxMajorDim_]; CoinMemcpyN(length_, majorDim_, newLength); delete[] length_; length_ = newLength; CoinBigIndex *newStart = new CoinBigIndex[maxMajorDim_ + 1]; CoinMemcpyN(start_, majorDim_ + 1, newStart); delete[] start_; start_ = newStart; } if (size_ + numberElements > maxSize_) { maxSize_ = size_ + numberElements; double *newElem = new double[maxSize_]; CoinMemcpyN(element_, size_, newElem); delete[] element_; element_ = newElem; int *newIndex = new int[maxSize_]; CoinMemcpyN(index_, size_, newIndex); delete[] index_; index_ = newIndex; } CoinMemcpyN(index, numberElements, index_ + size_); // Do minor dimension int lastMinor = -1; for (CoinBigIndex j = 0; j < numberElements; j++) { int iIndex = index[j]; lastMinor = CoinMax(lastMinor, iIndex); } // update minorDim if necessary minorDim_ = CoinMax(minorDim_, lastMinor + 1); CoinMemcpyN(element, numberElements, element_ + size_); i = majorDim_; starts -= majorDim_; majorDim_ += number; CoinBigIndex iStart = 0; for (; i < majorDim_; i++) { CoinBigIndex next = starts[i + 1]; int length = static_cast< int >(next - iStart); length_[i] = length; iStart = next; size_ += length; start_[i + 1] = size_; } return 0; } else { int *length = new int[number]; for (i = 0; i < number; i++) length[i] = static_cast< int >(starts[i + 1] - starts[i]); resizeForAddingMajorVectors(number, length); delete[] length; } if (numberOther > 0) { char *which = new char[numberOther]; memset(which, 0, numberOther); for (i = 0; i < number; i++) { CoinBigIndex put = start_[majorDim_ + i]; CoinBigIndex j; for (j = starts[i]; j < starts[i + 1]; j++) { int iIndex = index[j]; element_[put] = element[j]; if (iIndex >= 0 && iIndex < numberOther) { if (!which[iIndex]) which[iIndex] = 1; else numberErrors++; } else { numberErrors++; } index_[put++] = iIndex; } for (j = starts[i]; j < starts[i + 1]; j++) { int iIndex = index[j]; if (iIndex >= 0 && iIndex < numberOther) which[iIndex] = 0; } } delete[] which; } else { // easy int lastMinor = -1; if (!extraGap_) { // just one copy int *index2 = index_ + start_[majorDim_]; for (CoinBigIndex j = 0; j < numberElements; j++) { int iIndex = index[j]; index2[j] = iIndex; lastMinor = CoinMax(lastMinor, iIndex); } CoinMemcpyN(element, numberElements, element_ + start_[majorDim_]); } else { start_ += majorDim_; for (i = 0; i < number; i++) { int length = static_cast< int >(starts[i + 1] - starts[i]); int *index2 = index_ + start_[i]; const int *index1 = index + starts[i]; for (CoinBigIndex j = 0; j < length; j++) { int iIndex = index1[j]; index2[j] = iIndex; lastMinor = CoinMax(lastMinor, iIndex); } CoinMemcpyN(element + starts[i], length, element_ + start_[i]); } start_ -= majorDim_; } // update minorDim if necessary minorDim_ = CoinMax(minorDim_, lastMinor + 1); } } else { if (numberOther > 0) { char *which = new char[numberOther]; memset(which, 0, numberOther); for (i = 0; i < number; i++) { CoinBigIndex put = start_[majorDim_ + i]; CoinBigIndex j; for (j = starts[i]; j < starts[i + 1]; j++) { int iIndex = index[j]; element_[put] = element[j]; if (iIndex >= 0 && iIndex < numberOther) { if (!which[iIndex]) which[iIndex] = 1; else numberErrors++; } else { numberErrors++; } index_[put++] = iIndex; } start_[majorDim_ + i + 1] = put; length_[majorDim_ + i] = static_cast< int >(put - start_[majorDim_ + i]); for (j = starts[i]; j < starts[i + 1]; j++) { int iIndex = index[j]; if (iIndex >= 0 && iIndex < numberOther) which[iIndex] = 0; } } delete[] which; } else { // easy int lastMinor = -1; if (!extraGap_) { // just one copy // just one copy int *index2 = index_ + start_[majorDim_]; for (CoinBigIndex j = 0; j < numberElements; j++) { int iIndex = index[j]; index2[j] = iIndex; lastMinor = CoinMax(lastMinor, iIndex); } CoinMemcpyN(element, numberElements, element_ + start_[majorDim_]); start_ += majorDim_; for (i = 0; i < number; i++) { int length = static_cast< int >(starts[i + 1] - starts[i]); start_[i + 1] = start_[i] + length; length_[majorDim_ + i] = length; } start_ -= majorDim_; } else { start_ += majorDim_; for (i = 0; i < number; i++) { int length = static_cast< int >(starts[i + 1] - starts[i]); int *index2 = index_ + start_[i]; const int *index1 = index + starts[i]; for (CoinBigIndex j = 0; j < length; j++) { int iIndex = index1[j]; index2[j] = iIndex; lastMinor = CoinMax(lastMinor, iIndex); } CoinMemcpyN(element + starts[i], length, element_ + start_[i]); start_[i + 1] = start_[i] + length; length_[majorDim_ + i] = length; } start_ -= majorDim_; } // update minorDim if necessary minorDim_ = CoinMax(minorDim_, lastMinor + 1); } } majorDim_ += number; size_ += numberElements; #ifndef NDEBUG int checkSize = 0; for (int i = 0; i < majorDim_; i++) { checkSize += length_[i]; } assert(checkSize == size_); #endif return numberErrors; } /* Append a set of rows/columns to the end of the matrix. Returns number of errors i.e. if any of the new rows/columns contain an index that's larger than the number of columns-1/rows-1 (if numberOther>0) or duplicates This version is harder one i.e. adding columns to row ordered */ int CoinPackedMatrix::appendMinor(const int number, const CoinBigIndex *starts, const int *index, const double *element, int numberOther) { int i; int numberErrors = 0; // first compute how many entries will be added to each major-dimension // vector, and if needed, resize the matrix to accommodate all int *addedEntries = NULL; if (numberOther > 0) { addedEntries = new int[majorDim_]; CoinZeroN(addedEntries, majorDim_); numberOther = majorDim_; char *which = new char[numberOther]; memset(which, 0, numberOther); for (i = 0; i < number; i++) { CoinBigIndex j; for (j = starts[i]; j < starts[i + 1]; j++) { int iIndex = index[j]; if (iIndex >= 0 && iIndex < numberOther) { addedEntries[iIndex]++; if (!which[iIndex]) which[iIndex] = 1; else numberErrors++; } else { numberErrors++; } } for (j = starts[i]; j < starts[i + 1]; j++) { int iIndex = index[j]; if (iIndex >= 0 && iIndex < numberOther) which[iIndex] = 0; } } delete[] which; } else { int largest = majorDim_ - 1; for (i = 0; i < number; i++) { CoinBigIndex j; for (j = starts[i]; j < starts[i + 1]; j++) { int iIndex = index[j]; largest = CoinMax(largest, iIndex); } } if (largest + 1 > majorDim_) { if (isColOrdered()) setDimensions(-1, largest + 1); else setDimensions(largest + 1, -1); } addedEntries = new int[majorDim_]; CoinZeroN(addedEntries, majorDim_); // no checking for (i = 0; i < number; i++) { CoinBigIndex j; for (j = starts[i]; j < starts[i + 1]; j++) { int iIndex = index[j]; addedEntries[iIndex]++; } } } for (i = majorDim_ - 1; i >= 0; i--) { if (start_[i] + length_[i] + addedEntries[i] > start_[i + 1]) break; } if (i >= 0) resizeForAddingMinorVectors(addedEntries); delete[] addedEntries; // now insert the entries of matrix for (i = 0; i < number; i++) { CoinBigIndex j; for (j = starts[i]; j < starts[i + 1]; j++) { int iIndex = index[j]; element_[start_[iIndex] + length_[iIndex]] = element[j]; index_[start_[iIndex] + (length_[iIndex]++)] = minorDim_; } ++minorDim_; } size_ += starts[number]; #ifndef NDEBUG int checkSize = 0; for (int i = 0; i < majorDim_; i++) { checkSize += length_[i]; } assert(checkSize == size_); #endif return numberErrors; } //#define ADD_ROW_ANALYZE #ifdef ADD_ROW_ANALYZE static int xxxxxx[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; #endif /* Append a set of rows/columns to the end of the matrix. This case is when we know there are no gaps and majorDim_ will not change This version is harder one i.e. adding columns to row ordered */ void CoinPackedMatrix::appendMinorFast(const int number, const CoinBigIndex *starts, const int *index, const double *element) { #ifdef ADD_ROW_ANALYZE xxxxxx[0]++; #endif // first compute how many entries will be added to each major-dimension // vector, and if needed, resize the matrix to accommodate all // Will be used as new start array CoinBigIndex *newStart = new CoinBigIndex[maxMajorDim_ + 1]; CoinZeroN(newStart, maxMajorDim_); // no checking CoinBigIndex numberAdded = starts[number]; for (CoinBigIndex j = 0; j < numberAdded; j++) { int iIndex = index[j]; newStart[iIndex]++; } int packType = 0; #ifdef ADD_ROW_ANALYZE int nBad = 0; #endif if (size_ + numberAdded <= maxSize_) { CoinBigIndex nextStart = start_[majorDim_]; // could do other way and then stop moving for (int i = majorDim_ - 1; i >= 0; i--) { CoinBigIndex start = start_[i]; if (start + length_[i] + newStart[i] <= nextStart) { nextStart = start; } else { packType = -1; #ifdef ADD_ROW_ANALYZE nBad++; #else break; #endif } } } else { // Need more space packType = 1; } #ifdef ADD_ROW_ANALYZE if (!hasGaps()) xxxxxx[9]++; if (packType == -1 && nBad < 6) packType = nBad + 1; xxxxxx[packType + 2]++; if ((xxxxxx[0] % 100) == 0) { printf("Append "); for (int i = 0; i < 10; i++) printf("%d ", xxxxxx[i]); printf("\n"); } #endif if (hasGaps() && packType) packType = 1; CoinBigIndex n = 0; if (packType) { double slack = (static_cast< double >(maxSize_ - size_ - numberAdded)) / static_cast< double >(majorDim_); slack = CoinMax(0.0, slack - 0.01); if (!slack) { for (int i = 0; i < majorDim_; ++i) { CoinBigIndex thisCount = newStart[i]; newStart[i] = n; n += length_[i] + thisCount; } } else { double added = 0.0; for (int i = 0; i < majorDim_; ++i) { CoinBigIndex thisCount = newStart[i]; newStart[i] = n; added += slack; double extra = 0; if (added >= 1.0) { extra = floor(added); added -= extra; } n += length_[i] + thisCount + static_cast< int >(extra); } } newStart[majorDim_] = n; } if (packType) { maxSize_ = CoinMax(maxSize_, n); int *newIndex = new int[maxSize_]; double *newElem = new double[maxSize_]; for (int i = majorDim_ - 1; i >= 0; --i) { CoinBigIndex start = start_[i]; #ifdef USE_MEMCPY int length = length_[i]; CoinBigIndex put = newStart[i]; CoinMemcpyN(index_ + start, length, newIndex + put); CoinMemcpyN(element_ + start, length, newElem + put); #else CoinBigIndex end = start + length_[i]; CoinBigIndex put = newStart[i]; for (CoinBigIndex j = start; j < end; j++) { newIndex[put] = index_[j]; newElem[put++] = element_[j]; } #endif } delete[] start_; delete[] index_; delete[] element_; start_ = newStart; index_ = newIndex; element_ = newElem; } else if (packType < 0) { assert(maxSize_ >= n); for (int i = majorDim_ - 1; i >= 0; --i) { CoinBigIndex start = start_[i]; int length = length_[i]; CoinBigIndex end = start + length; CoinBigIndex put = newStart[i]; //if (put==start) //break; put += length; for (CoinBigIndex j = end - 1; j >= start; j--) { index_[--put] = index_[j]; element_[put] = element_[j]; } } delete[] start_; start_ = newStart; } else { delete[] newStart; } // now insert the entries of matrix for (int i = 0; i < number; i++) { CoinBigIndex j; for (j = starts[i]; j < starts[i + 1]; j++) { int iIndex = index[j]; element_[start_[iIndex] + length_[iIndex]] = element[j]; index_[start_[iIndex] + (length_[iIndex]++)] = minorDim_; } ++minorDim_; } size_ += starts[number]; #ifndef NDEBUG int checkSize = 0; for (int i = 0; i < majorDim_; i++) { checkSize += length_[i]; } assert(checkSize == size_); #endif } /* Utility to scan a packed matrix for corruption and inconsistencies. Not exhaustive, but useful. By default, the method counts coefficients of zero and reports them, but does not consider them an error. Set zeroesAreError to true if you want an error. */ int CoinPackedMatrix::verifyMtx(int verbosity, bool zeroesAreError) const { const double smallCoeff = 1.0e-50; const double largeCoeff = 1.0e50; int majDim = majorDim_; int minDim = minorDim_; std::string majName, minName; int m, n; if (colOrdered_) { n = majDim; majName = "col"; m = minDim; minName = "row"; } else { m = majDim; majName = "row"; n = minDim; minName = "col"; } /* size_ is the number of coefficients, maxSize_ the size of the bulk store. start_[majDim] should be one past the last valid coefficient in the bulk store. The actual relation is (#coeffs + #gaps) = start_[majDim]. */ bool gaps = (size_ < start_[majDim]); CoinBigIndex maxIndex = CoinMin(maxSize_, start_[majDim]) - 1; if (verbosity >= 3) { std::cout << " Matrix is " << ((colOrdered_) ? "column" : "row") << "-major, " << m << " rows X " << n << " cols; " << size_ << " coeffs." << std::endl; std::cout << " Bulk store " << maxSize_ << " coeffs, last coeff at " << start_[majDim] - 1 << ", ex maj " << extraMajor_ << ", ex gap " << extraGap_; if (gaps) std::cout << "; matrix has gaps"; std::cout << "." << std::endl; } const CoinBigIndex *const majStarts = start_; const int *const majLens = length_; const int *const minInds = index_; const double *const coeffs = element_; /* Set up arrays to track use of bulk store entries. */ int errs = 0; int zeroes = 0; int *refCnt = new int[maxSize_]; CoinZeroN(refCnt, maxSize_); bool *inGap = new bool[maxSize_]; CoinZeroN(inGap, maxSize_); for (int majndx = 0; majndx < majDim; majndx++) { /* Check that the range of indices for the major vector falls within the bulk store. If any of these checks fail, it's pointless (and possibly unsafe) to do more with this vector. Subtle point: Normally, majStarts[majDim] = maxIndex+1 (one past the end of the bulk store), and majStarts[k], k < majDim, should be a valid index. But ... if the last major vector (k = majDim-1) has length 0, then majStarts[k] = maxIndex. This will propagate back through multiple major vectors of length 0. Hence the check for length = 0. */ CoinBigIndex majStart = majStarts[majndx]; int majLen = majLens[majndx]; if (majStart < 0 || (majStart == (maxIndex + 1) && majLen != 0) || majStart > maxIndex + 1) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": start " << majStart << " should be between 0 and " << maxIndex << "." << std::endl; } errs++; if (majStart >= maxSize_) { std::cout << " " << "index exceeds bulk store limit " << maxSize_ << "!" << std::endl; } continue; } if (majLen < 0 || majLen > minDim) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": vector length " << majLen << " should be between 0 and " << minDim << std::endl; } errs++; continue; } CoinBigIndex majEnd = majStart + majLen; if (majEnd < 0 || majEnd > maxIndex + 1) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": end " << majEnd << " should be between 0 and " << maxIndex << "." << std::endl; } errs++; if (majEnd >= maxSize_) { std::cout << " " << "index exceeds bulk store limit " << maxSize_ << "!" << std::endl; } continue; } /* Check that the major vector length is consistent with the distance between majStart[majndx] and majStart[majndx+1]. If the matrix is gap-free, they should be equal. We've already confirmed that majStart+majLen is within the bulk store, so we can continue even if these checks fail. Recall that the final entry in the major vector start array is one past the end of the bulk store. The previous tests will check more carefully if majndx+1 is not the final entry. */ CoinBigIndex majStartp1 = majStarts[majndx + 1]; CoinBigIndex startDist = majStartp1 - majStart; if (majStartp1 < 0 || majStartp1 > maxIndex + 1) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": start of next " << majName << " " << majStartp1 << " should be between 0 and " << maxIndex + 1 << "." << std::endl; } errs++; if (majStartp1 >= maxSize_) { std::cout << " " << "index exceeds bulk store limit " << maxSize_ << "!" << std::endl; } } else if ((startDist < 0) || ((startDist > minDim) && !gaps)) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": distance between " << majName << " starts " << startDist << " should be between 0 and " << minDim << "." << std::endl; } errs++; } else if (majLen > startDist) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": vector length " << majLen << " should not be greater than distance between " << majName << " starts " << startDist << std::endl; } errs++; } else if (majLen != startDist && !gaps) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": " << majName << " length " << majLen << " should equal distance " << startDist << " between " << majName << " starts in gap-free matrix." << std::endl; } errs++; } /* Scan the major dimension vector, checking for obviously bogus minor indices and coefficients. Generate reference counts for each bulk store entry. */ for (CoinBigIndex ii = majStart; ii < majEnd; ii++) { refCnt[ii]++; int minndx = minInds[ii]; if (minndx < 0 || minndx >= minDim) { if (verbosity >= 1) { std::cout << " " << majName << " " << majndx << ": " << minName << " index " << ii << " is " << minndx << ", should be between 0 and " << minDim - 1 << "." << std::endl; } errs++; } double aij = coeffs[ii]; if (CoinIsnan(aij) || CoinAbs(aij) > largeCoeff) { if (verbosity >= 1) { std::cout << " (" << ii << ") a<" << majndx << "," << minndx << "> = " << aij << " appears bogus." << std::endl; } errs++; } if (CoinAbs(aij) < smallCoeff) { if (verbosity >= 4 || zeroesAreError) { std::cout << " (" << ii << ") a<" << majndx << "," << minndx << "> = " << aij << " appears bogus." << std::endl; } zeroes++; } } /* And mark the gaps, if any. */ if (gaps) { for (CoinBigIndex ii = majEnd; ii < majStartp1; ii++) inGap[ii] = true; } } /* Check the reference counts. They should all be 1 unless the entry is in a gap, in which case it should be zero. Anything else is a problem. Allow that the matrix may not use the full size of the bulk store. */ for (CoinBigIndex ii = 0; ii <= maxIndex; ii++) { if (!((refCnt[ii] == 1 && inGap[ii] == false) || (refCnt[ii] == 0 && inGap[ii] == true))) { if (verbosity >= 1) { std::cout << " Bulk store entry " << ii << " has reference count " << refCnt[ii] << "; should be " << ((inGap[ii]) ? 0 : 1) << "." << std::endl; } errs++; } } delete[] refCnt; /* Report the result. */ if (zeroesAreError) errs += zeroes; if (errs > 0) { if (verbosity >= 1) { std::cout << " Detected " << errs << " errors in matrix"; if (zeroes) std::cout << " (includes " << zeroes << " zeroes)"; std::cout << "." << std::endl; } } else { if (verbosity >= 2) { std::cout << " Matrix verified"; if (zeroes) std::cout << " (" << zeroes << " zeroes)"; std::cout << "." << std::endl; } } return (errs); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinOslFactorization2.cpp0000644000175200017520000034650013414454441020460 0ustar coincoin/* $Id: CoinOslFactorization2.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ /* Copyright (C) 1987, 2009, International Business Machines Corporation and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ #if COIN_BIG_INDEX == 0 /* CLP_OSL - if defined use osl 0 - don't unroll 2 and 3 - don't use in Gomory 1 - don't unroll - do use in Gomory 2 - unroll - don't use in Gomory 3 - unroll and use in Gomory */ #include "CoinOslFactorization.hpp" #include "CoinOslC.h" #include "CoinFinite.hpp" #ifndef NDEBUG extern int ets_count; extern int ets_check; #endif #define COIN_REGISTER register #define COIN_REGISTER2 #define COIN_REGISTER3 register #ifdef COIN_USE_RESTRICT #define COIN_RESTRICT2 __restrict #else #define COIN_RESTRICT2 #endif static int c_ekkshfpo_scan2zero(COIN_REGISTER const EKKfactinfo *COIN_RESTRICT2 fact, const int *COIN_RESTRICT mpermu, double *COIN_RESTRICT worki, double *COIN_RESTRICT worko, int *COIN_RESTRICT mptr) { /* Local variables */ int irow; double tolerance = fact->zeroTolerance; int nin = fact->nrow; int *COIN_RESTRICT mptrX = mptr; if ((nin & 1) != 0) { irow = 1; if (fact->packedMode) { int irow0 = *mpermu; double dval; assert(irow0 >= 1 && irow0 <= nin); mpermu++; dval = worki[irow0]; if (NOT_ZERO(dval)) { worki[irow0] = 0.0; if (fabs(dval) >= tolerance) { *(worko++) = dval; *(mptrX++) = 0; } } } else { int irow0 = *mpermu; double dval; assert(irow0 >= 1 && irow0 <= nin); mpermu++; dval = worki[irow0]; if (NOT_ZERO(dval)) { worki[irow0] = 0.0; if (fabs(dval) >= tolerance) { *worko = dval; *(mptrX++) = 0; } } worko++; } } else { irow = 0; } if (fact->packedMode) { for (; irow < nin; irow += 2) { int irow0, irow1; double dval0, dval1; irow0 = mpermu[0]; irow1 = mpermu[1]; assert(irow0 >= 1 && irow0 <= nin); assert(irow1 >= 1 && irow1 <= nin); dval0 = worki[irow0]; dval1 = worki[irow1]; if (NOT_ZERO(dval0)) { worki[irow0] = 0.0; if (fabs(dval0) >= tolerance) { *(worko++) = dval0; *(mptrX++) = irow + 0; } } if (NOT_ZERO(dval1)) { worki[irow1] = 0.0; if (fabs(dval1) >= tolerance) { *(worko++) = dval1; *(mptrX++) = irow + 1; } } mpermu += 2; } } else { for (; irow < nin; irow += 2) { int irow0, irow1; double dval0, dval1; irow0 = mpermu[0]; irow1 = mpermu[1]; assert(irow0 >= 1 && irow0 <= nin); assert(irow1 >= 1 && irow1 <= nin); dval0 = worki[irow0]; dval1 = worki[irow1]; if (NOT_ZERO(dval0)) { worki[irow0] = 0.0; if (fabs(dval0) >= tolerance) { worko[0] = dval0; *(mptrX++) = irow + 0; } } if (NOT_ZERO(dval1)) { worki[irow1] = 0.0; if (fabs(dval1) >= tolerance) { worko[1] = dval1; *(mptrX++) = irow + 1; } } mpermu += 2; worko += 2; } } return static_cast< int >(mptrX - mptr); } /* * c_ekkshfpi_list executes the following loop: * * for (k=nincol, i=1; k; k--, i++) { * int ipt = mptr[i]; * int irow = mpermu[ipt]; * worko[mpermu[irow]] = worki[i]; * worki[i] = 0.0; * } */ static int c_ekkshfpi_list(const int *COIN_RESTRICT mpermu, double *COIN_RESTRICT worki, double *COIN_RESTRICT worko, const int *COIN_RESTRICT mptr, int nincol, int *lastNonZero) { int i, k, irow0, irow1; int first = COIN_INT_MAX; int last = 0; /* worko was zeroed out outside */ k = nincol; i = 0; if ((k & 1) != 0) { int ipt = mptr[i]; irow0 = mpermu[ipt]; first = CoinMin(irow0, first); last = CoinMax(irow0, last); i++; worko[irow0] = *worki; *worki++ = 0.0; } k = k >> 1; for (; k; k--) { int ipt0 = mptr[i]; int ipt1 = mptr[i + 1]; irow0 = mpermu[ipt0]; irow1 = mpermu[ipt1]; i += 2; first = CoinMin(irow0, first); last = CoinMax(irow0, last); first = CoinMin(irow1, first); last = CoinMax(irow1, last); worko[irow0] = worki[0]; worko[irow1] = worki[1]; worki[0] = 0.0; worki[1] = 0.0; worki += 2; } *lastNonZero = last; return first; } /* * c_ekkshfpi_list2 executes the following loop: * * for (k=nincol, i=1; k; k--, i++) { * int ipt = mptr[i]; * int irow = mpermu[ipt]; * worko[mpermu[irow]] = worki[ipt]; * worki[ipt] = 0.0; * } */ static int c_ekkshfpi_list2(const int *COIN_RESTRICT mpermu, double *COIN_RESTRICT worki, double *COIN_RESTRICT worko, const int *COIN_RESTRICT mptr, int nincol, int *lastNonZero) { #if 1 int i, k, irow0, irow1; int first = COIN_INT_MAX; int last = 0; /* worko was zeroed out outside */ k = nincol; i = 0; if ((k & 1) != 0) { int ipt = mptr[i]; irow0 = mpermu[ipt]; first = CoinMin(irow0, first); last = CoinMax(irow0, last); i++; worko[irow0] = worki[ipt]; worki[ipt] = 0.0; } k = k >> 1; for (; k; k--) { int ipt0 = mptr[i]; int ipt1 = mptr[i + 1]; irow0 = mpermu[ipt0]; irow1 = mpermu[ipt1]; i += 2; first = CoinMin(irow0, first); last = CoinMax(irow0, last); first = CoinMin(irow1, first); last = CoinMax(irow1, last); worko[irow0] = worki[ipt0]; worko[irow1] = worki[ipt1]; worki[ipt0] = 0.0; worki[ipt1] = 0.0; } #else int first = COIN_INT_MAX; int last = 0; /* worko was zeroed out outside */ for (int i = 0; i < nincol; i++) { int ipt = mptr[i]; int irow = mpermu[ipt]; first = CoinMin(irow, first); last = CoinMax(irow, last); worko[irow] = worki[ipt]; worki[ipt] = 0.0; } #endif *lastNonZero = last; return first; } /* * c_ekkshfpi_list3 executes the following loop: * * for (k=nincol, i=1; k; k--, i++) { * int ipt = mptr[i]; * int irow = mpermu[ipt]; * worko[irow] = worki[i]; * worki[i] = 0.0; * mptr[i] = mpermu[ipt]; * } */ static void c_ekkshfpi_list3(const int *COIN_RESTRICT mpermu, double *COIN_RESTRICT worki, double *COIN_RESTRICT worko, int *COIN_RESTRICT mptr, int nincol) { int i, k, irow0, irow1; /* worko was zeroed out outside */ k = nincol; i = 0; if ((k & 1) != 0) { int ipt = mptr[i]; irow0 = mpermu[ipt]; mptr[i] = irow0; i++; worko[irow0] = *worki; *worki++ = 0.0; } k = k >> 1; for (; k; k--) { int ipt0 = mptr[i]; int ipt1 = mptr[i + 1]; irow0 = mpermu[ipt0]; irow1 = mpermu[ipt1]; mptr[i] = irow0; mptr[i + 1] = irow1; i += 2; worko[irow0] = worki[0]; worko[irow1] = worki[1]; worki[0] = 0.0; worki[1] = 0.0; worki += 2; } } static int c_ekkscmv(COIN_REGISTER const EKKfactinfo *COIN_RESTRICT2 fact, int n, double *COIN_RESTRICT dwork, int *COIN_RESTRICT mptr, double *COIN_RESTRICT dwork2) { double tolerance = fact->zeroTolerance; int irow; const int *COIN_RESTRICT mptrsave = mptr; double *COIN_RESTRICT dwhere = dwork + 1; if ((n & 1) != 0) { if (NOT_ZERO(*dwhere)) { if (fabs(*dwhere) >= tolerance) { *++dwork2 = *dwhere; *++mptr = SHIFT_INDEX(1); } else { *dwhere = 0.0; } } dwhere++; irow = 2; } else { irow = 1; } for (n = n >> 1; n; n--) { int second = NOT_ZERO(*(dwhere + 1)); if (NOT_ZERO(*dwhere)) { if (fabs(*dwhere) >= tolerance) { *++dwork2 = *dwhere; *++mptr = SHIFT_INDEX(irow); } else { *dwhere = 0.0; } } if (second) { if (fabs(*(dwhere + 1)) >= tolerance) { *++dwork2 = *(dwhere + 1); *++mptr = SHIFT_INDEX(irow + 1); } else { *(dwhere + 1) = 0.0; } } dwhere += 2; irow += 2; } return static_cast< int >(mptr - mptrsave); } /* c_ekkscmv */ double c_ekkputl(const EKKfactinfo *COIN_RESTRICT2 fact, const int *COIN_RESTRICT mpt2, double *COIN_RESTRICT dwork1, double del3, int nincol, int nuspik) { double *COIN_RESTRICT dwork3 = fact->xeeadr + fact->nnentu; int *COIN_RESTRICT hrowi = fact->xeradr + fact->nnentu; int offset = fact->R_etas_start[fact->nR_etas + 1]; int *COIN_RESTRICT hrowiR = fact->R_etas_index + offset; double *COIN_RESTRICT dluval = fact->R_etas_element + offset; int i, j; /* dwork1 is r', the new R transform * dwork3 is the updated incoming column, alpha_p * del3 apparently has the pivot of the incoming column (???). * Here, we compute the p'th element of R^-1 alpha_p * (as described on p. 273), which is just a dot product. * I don't know why we subtract. */ for (i = 1; i <= nuspik; ++i) { j = UNSHIFT_INDEX(hrowi[i]); del3 -= dwork3[i] * dwork1[j]; } /* here we finally copy the r' to where we want it, the end */ /* also take into account that the p'th row of R^-1 is -(p'th row of R). */ /* also zero out dwork1 as we go */ for (i = 0; i < nincol; ++i) { j = mpt2[i]; hrowiR[-i] = SHIFT_INDEX(j); dluval[-i] = -dwork1[j]; dwork1[j] = 0.; } return del3; } /* c_ekkputl */ /* making this static seems to slow code down! may be being inlined */ int c_ekkputl2(const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, double *del3p, int nuspik) { double *COIN_RESTRICT dwork3 = fact->xeeadr + fact->nnentu; int *COIN_RESTRICT hrowi = fact->xeradr + fact->nnentu; int offset = fact->R_etas_start[fact->nR_etas + 1]; int *COIN_RESTRICT hrowiR = fact->R_etas_index + offset; double *COIN_RESTRICT dluval = fact->R_etas_element + offset; int i, j; #if 0 int nincol=c_ekksczr(fact,fact->nrow,dwork1,hrowiR); #else int nrow = fact->nrow; const double tolerance = fact->zeroTolerance; int *COIN_RESTRICT mptrX = hrowiR; for (i = 1; i <= nrow; ++i) { if (dwork1[i] != 0.) { if (fabs(dwork1[i]) >= tolerance) { *(mptrX--) = SHIFT_INDEX(i); } else { dwork1[i] = 0.0; } } } int nincol = static_cast< int >(hrowiR - mptrX); #endif double del3 = *del3p; /* dwork1 is r', the new R transform * dwork3 is the updated incoming column, alpha_p * del3 apparently has the pivot of the incoming column (???). * Here, we compute the p'th element of R^-1 alpha_p * (as described on p. 273), which is just a dot product. * I don't know why we subtract. */ for (i = 1; i <= nuspik; ++i) { j = UNSHIFT_INDEX(hrowi[i]); del3 -= dwork3[i] * dwork1[j]; } /* here we finally copy the r' to where we want it, the end */ /* also take into account that the p'th row of R^-1 is -(p'th row of R). */ /* also zero out dwork1 as we go */ for (i = 0; i < nincol; ++i) { j = UNSHIFT_INDEX(hrowiR[-i]); dluval[-i] = -dwork1[j]; dwork1[j] = 0.; } *del3p = del3; return nincol; } /* c_ekkputl */ static void c_ekkbtj4p_no_dense(const int nrow, const double *COIN_RESTRICT dluval, const int *COIN_RESTRICT hrowi, const int *COIN_RESTRICT mcstrt, double *COIN_RESTRICT dwork1, int ndo, int jpiv) { int i; double dv1; int iel; int irow; int i1, i2; /* count down to first nonzero */ for (i = nrow; i >= 1; i--) { if (dwork1[i]) { break; } } i--; /* as pivot is just 1.0 */ if (i > ndo + jpiv) { i = ndo + jpiv; } mcstrt -= jpiv; i2 = mcstrt[i + 1]; for (; i > jpiv; --i) { double dv1b = 0.0; int nel; i1 = mcstrt[i]; nel = i1 - i2; dv1 = dwork1[i]; iel = i2; if ((nel & 1) != 0) { irow = hrowi[iel]; dv1b = SHIFT_REF(dwork1, irow) * dluval[iel]; iel++; } for (; iel < i1; iel += 2) { int irow = hrowi[iel]; int irowb = hrowi[iel + 1]; dv1 += SHIFT_REF(dwork1, irow) * dluval[iel]; dv1b += SHIFT_REF(dwork1, irowb) * dluval[iel + 1]; } i2 = i1; dwork1[i] = dv1 + dv1b; } } /* c_ekkbtj4 */ static int c_ekkbtj4p_dense(const int nrow, const double *COIN_RESTRICT dluval, const int *COIN_RESTRICT hrowi, const int *COIN_RESTRICT mcstrt, double *COIN_RESTRICT dwork1, int ndenuc, int ndo, int jpiv) { int i; int i2; int last = ndo - ndenuc + 1; double *COIN_RESTRICT densew = &dwork1[nrow - 1]; int nincol = 0; const double *COIN_RESTRICT dlu1; dluval--; hrowi--; /* count down to first nonzero */ for (i = nrow; i >= 1; i--) { if (dwork1[i]) { break; } } if (i < ndo + jpiv) { int diff = ndo + jpiv - i; ndo -= diff; densew -= diff; nincol = diff; } i2 = mcstrt[ndo + 1]; dlu1 = &dluval[i2 + 1]; for (i = ndo; i > last; i -= 2) { int k; double dv1, dv2; const double *COIN_RESTRICT dlu2; dv1 = densew[1]; dlu2 = dlu1 + nincol; dv2 = densew[0]; for (k = 0; k < nincol; k++) { #ifdef DEBUG int kk = dlu1 - dluval; int jj = (densew + (nincol - k + 1)) - dwork1; int ll = hrowi[k + kk]; if (ll != jj) abort(); #endif dv1 += densew[nincol - k + 1] * dlu1[k]; dv2 += densew[nincol - k + 1] * dlu2[k]; } densew[1] = dv1; dlu1 = dlu2 + nincol; dv2 += dv1 * dlu1[0]; dlu1++; nincol += 2; densew[0] = dv2; densew -= 2; } return i; } /* c_ekkbtj4 */ static void c_ekkbtj4p_after_dense(const double *COIN_RESTRICT dluval, const int *COIN_RESTRICT hrowi, const int *COIN_RESTRICT mcstrt, double *COIN_RESTRICT dwork1, int i, int jpiv) { int iel; mcstrt -= jpiv; i += jpiv; iel = mcstrt[i + 1]; for (; i > jpiv + 1; i -= 2) { int i1 = mcstrt[i]; double dv1 = dwork1[i]; double dv2; for (; iel < i1; iel++) { int irow = hrowi[iel]; dv1 += SHIFT_REF(dwork1, irow) * dluval[iel]; } i1 = mcstrt[i - 1]; dv2 = dwork1[i - 1]; dwork1[i] = dv1; for (; iel < i1; iel++) { int irow = hrowi[iel]; dv2 += SHIFT_REF(dwork1, irow) * dluval[iel]; } dwork1[i - 1] = dv2; } if (i > jpiv) { int i1 = mcstrt[i]; double dv1 = dwork1[i]; for (; iel < i1; iel++) { int irow = hrowi[iel]; dv1 += SHIFT_REF(dwork1, irow) * dluval[iel]; } dwork1[i] = dv1; } } static void c_ekkbtj4p(COIN_REGISTER const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1) { int lstart = fact->lstart; const int *COIN_RESTRICT hpivco = fact->kcpadr; const double *COIN_RESTRICT dluval = fact->xeeadr + 1; const int *COIN_RESTRICT hrowi = fact->xeradr + 1; const int *COIN_RESTRICT mcstrt = fact->xcsadr + lstart - 1; int jpiv = hpivco[lstart] - 1; int ndo = fact->xnetalval; /* see if dense enough to unroll */ if (fact->ndenuc < 5) { c_ekkbtj4p_no_dense(fact->nrow, dluval, hrowi, mcstrt, dwork1, ndo, jpiv); } else { int i = c_ekkbtj4p_dense(fact->nrow, dluval, hrowi, mcstrt, dwork1, fact->ndenuc, ndo, jpiv); c_ekkbtj4p_after_dense(dluval, hrowi, mcstrt, dwork1, i, jpiv); } } /* c_ekkbtj4p */ static int c_ekkbtj4_sparse(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, int *COIN_RESTRICT mpt, /* C style */ double *COIN_RESTRICT dworko, int nincol, int *COIN_RESTRICT spare) { const int nrow = fact->nrow; const int *COIN_RESTRICT hcoli = fact->xecadr; const int *COIN_RESTRICT mrstrt = fact->xrsadr + nrow; char *COIN_RESTRICT nonzero = fact->nonzero; const int *COIN_RESTRICT hpivro = fact->krpadr; const double *COIN_RESTRICT de2val = fact->xe2adr - 1; double tolerance = fact->zeroTolerance; double dv; int iel; int k, nStack, kx; int nList = 0; int *COIN_RESTRICT list = spare; int *COIN_RESTRICT stack = spare + nrow; int *COIN_RESTRICT next = stack + nrow; int iPivot, kPivot; int iput, nput = 0, kput = nrow; int j; int firstDoRow = fact->firstDoRow; for (k = 0; k < nincol; k++) { nStack = 1; iPivot = mpt[k]; if (nonzero[iPivot] != 1 && iPivot >= firstDoRow) { stack[0] = iPivot; next[0] = mrstrt[iPivot]; while (nStack) { /* take off stack */ kPivot = stack[--nStack]; if (nonzero[kPivot] != 1 && kPivot >= firstDoRow) { j = next[nStack]; if (j == mrstrt[kPivot + 1]) { /* finished so mark */ list[nList++] = kPivot; nonzero[kPivot] = 1; } else { kPivot = hcoli[j]; /* put back on stack */ next[nStack++]++; if (!nonzero[kPivot]) { /* and new one */ stack[nStack] = kPivot; nonzero[kPivot] = 2; next[nStack++] = mrstrt[kPivot]; } } } else if (kPivot < firstDoRow) { list[--kput] = kPivot; nonzero[kPivot] = 1; } } } else if (nonzero[iPivot] != 1) { /* nothing to do (except check size at end) */ list[--kput] = iPivot; nonzero[iPivot] = 1; } } if (fact->packedMode) { dworko++; for (k = nList - 1; k >= 0; k--) { double dv; iPivot = list[k]; dv = dwork1[iPivot]; dwork1[iPivot] = 0.0; nonzero[iPivot] = 0; if (fabs(dv) > tolerance) { iput = hpivro[iPivot]; kx = mrstrt[iPivot]; dworko[nput] = dv; for (iel = kx; iel < mrstrt[iPivot + 1]; iel++) { double dval; int irow = hcoli[iel]; dval = de2val[iel]; dwork1[irow] += dv * dval; } mpt[nput++] = iput - 1; } else { dwork1[iPivot] = 0.0; /* force to zero, not just near zero */ } } /* check remainder */ for (k = kput; k < nrow; k++) { iPivot = list[k]; nonzero[iPivot] = 0; dv = dwork1[iPivot]; dwork1[iPivot] = 0.0; iput = hpivro[iPivot]; if (fabs(dv) > tolerance) { dworko[nput] = dv; mpt[nput++] = iput - 1; } } } else { /* not packed */ for (k = nList - 1; k >= 0; k--) { double dv; iPivot = list[k]; dv = dwork1[iPivot]; dwork1[iPivot] = 0.0; nonzero[iPivot] = 0; if (fabs(dv) > tolerance) { iput = hpivro[iPivot]; kx = mrstrt[iPivot]; dworko[iput] = dv; for (iel = kx; iel < mrstrt[iPivot + 1]; iel++) { double dval; int irow = hcoli[iel]; dval = de2val[iel]; dwork1[irow] += dv * dval; } mpt[nput++] = iput - 1; } else { dwork1[iPivot] = 0.0; /* force to zero, not just near zero */ } } /* check remainder */ for (k = kput; k < nrow; k++) { iPivot = list[k]; nonzero[iPivot] = 0; dv = dwork1[iPivot]; dwork1[iPivot] = 0.0; iput = hpivro[iPivot]; if (fabs(dv) > tolerance) { dworko[iput] = dv; mpt[nput++] = iput - 1; } } } return (nput); } /* c_ekkbtj4 */ static void c_ekkbtjl(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1) { int i, j, k, k1; int l1; const double *COIN_RESTRICT dluval = fact->R_etas_element; const int *COIN_RESTRICT hrowi = fact->R_etas_index; const int *COIN_RESTRICT mcstrt = fact->R_etas_start; const int *COIN_RESTRICT hpivco = fact->hpivcoR; int ndo = fact->nR_etas; #ifndef UNROLL1 #define UNROLL1 4 #endif #if UNROLL1 > 2 int l2; #endif int kn; double dv; int iel; int ipiv; int knext; knext = mcstrt[ndo + 1]; #if UNROLL1 > 2 for (i = ndo; i > 0; --i) { k1 = knext; knext = mcstrt[i]; ipiv = hpivco[i]; dv = dwork1[ipiv]; /* fast floating */ k = knext - k1; kn = k >> 2; iel = k1 + 1; if (dv != 0.) { l1 = (k & 1) != 0; l2 = (k & 2) != 0; for (j = 1; j <= kn; j++) { int irow0 = hrowi[iel + 0]; int irow1 = hrowi[iel + 1]; int irow2 = hrowi[iel + 2]; int irow3 = hrowi[iel + 3]; double dval0 = dv * dluval[iel + 0] + SHIFT_REF(dwork1, irow0); double dval1 = dv * dluval[iel + 1] + SHIFT_REF(dwork1, irow1); double dval2 = dv * dluval[iel + 2] + SHIFT_REF(dwork1, irow2); double dval3 = dv * dluval[iel + 3] + SHIFT_REF(dwork1, irow3); SHIFT_REF(dwork1, irow0) = dval0; SHIFT_REF(dwork1, irow1) = dval1; SHIFT_REF(dwork1, irow2) = dval2; SHIFT_REF(dwork1, irow3) = dval3; iel += 4; } if (l1) { int irow0 = hrowi[iel]; SHIFT_REF(dwork1, irow0) += dv * dluval[iel]; ++iel; } if (l2) { int irow0 = hrowi[iel + 0]; int irow1 = hrowi[iel + 1]; SHIFT_REF(dwork1, irow0) += dv * dluval[iel]; SHIFT_REF(dwork1, irow1) += dv * dluval[iel + 1]; } } } #else for (i = ndo; i > 0; --i) { k1 = knext; knext = mcstrt[i]; ipiv = hpivco[i]; dv = dwork1[ipiv]; k = knext - k1; kn = k >> 1; iel = k1 + 1; if (dv != 0.) { l1 = (k & 1) != 0; for (j = 1; j <= kn; j++) { int irow0 = hrowi[iel + 0]; int irow1 = hrowi[iel + 1]; double dval0 = dv * dluval[iel + 0] + SHIFT_REF(dwork1, irow0); double dval1 = dv * dluval[iel + 1] + SHIFT_REF(dwork1, irow1); SHIFT_REF(dwork1, irow0) = dval0; SHIFT_REF(dwork1, irow1) = dval1; iel += 2; } if (l1) { int irow0 = hrowi[iel]; SHIFT_REF(dwork1, irow0) += dv * dluval[iel]; ++iel; } } } #endif } /* c_ekkbtjl */ static int c_ekkbtjl_sparse(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, int *COIN_RESTRICT mpt, int nincol) { const double *COIN_RESTRICT dluval = fact->R_etas_element; const int *COIN_RESTRICT hrowi = fact->R_etas_index; const int *COIN_RESTRICT mcstrt = fact->R_etas_start; const int *COIN_RESTRICT hpivco = fact->hpivcoR; char *COIN_RESTRICT nonzero = fact->nonzero; int ndo = fact->nR_etas; int i, j, k1; double dv; int ipiv; int irow0, irow1; int knext; int number = nincol; /* ------------------------------------------- */ /* adjust back */ hrowi++; dluval++; /* DO ANY ROW TRANSFORMATIONS */ /* Function Body */ knext = mcstrt[ndo + 1]; for (i = ndo; i > 0; --i) { k1 = knext; knext = mcstrt[i]; ipiv = hpivco[i]; dv = dwork1[ipiv]; if (dv) { for (j = k1; j < knext - 1; j += 2) { irow0 = hrowi[j]; irow1 = hrowi[j + 1]; SHIFT_REF(dwork1, irow0) += dv * dluval[j]; SHIFT_REF(dwork1, irow1) += dv * dluval[j + 1]; if (!nonzero[irow0]) { nonzero[irow0] = 1; mpt[++number] = UNSHIFT_INDEX(irow0); } if (!nonzero[irow1]) { nonzero[irow1] = 1; mpt[++number] = UNSHIFT_INDEX(irow1); } } if (j < knext) { irow0 = hrowi[j]; SHIFT_REF(dwork1, irow0) += dv * dluval[j]; if (!nonzero[irow0]) { nonzero[irow0] = 1; mpt[++number] = UNSHIFT_INDEX(irow0); } } } } return (number); } /* c_ekkbtjl */ static void c_ekkbtju_dense(const int nrow, const double *COIN_RESTRICT dluval, const int *COIN_RESTRICT hrowi, const int *COIN_RESTRICT mcstrt, int *COIN_RESTRICT hpivco, double *COIN_RESTRICT dwork1, int *COIN_RESTRICT start, int last, int offset, double *COIN_RESTRICT densew) { /* Local variables */ int ipiv1, ipiv2; int save = hpivco[last]; hpivco[last] = nrow + 1; ipiv1 = *start; ipiv2 = hpivco[ipiv1]; while (ipiv2 < last) { int iel, k; const int kx1 = mcstrt[ipiv1]; const int kx2 = mcstrt[ipiv2]; const int nel1 = hrowi[kx1 - 1]; const int nel2 = hrowi[kx2 - 1]; const double dpiv1 = dluval[kx1 - 1]; const double dpiv2 = dluval[kx2 - 1]; const int n1 = offset + ipiv1; /* number in dense part */ const int nsparse1 = nel1 - n1; const int nsparse2 = nel2 - n1 - (ipiv2 - ipiv1); const int k1 = kx1 + nsparse1; const int k2 = kx2 + nsparse2; const double *dlu1 = &dluval[k1]; const double *dlu2 = &dluval[k2]; double dv1 = dwork1[ipiv1]; double dv2 = dwork1[ipiv2]; for (iel = kx1; iel < k1; ++iel) { dv1 -= SHIFT_REF(dwork1, hrowi[iel]) * dluval[iel]; } for (iel = kx2; iel < k2; ++iel) { dv2 -= SHIFT_REF(dwork1, hrowi[iel]) * dluval[iel]; } for (k = 0; k < n1; k++) { dv1 -= dlu1[k] * densew[k]; dv2 -= dlu2[k] * densew[k]; } dv1 *= dpiv1; dv2 -= dlu2[n1] * dv1; dwork1[ipiv1] = dv1; dwork1[ipiv2] = dv2 * dpiv2; ipiv1 = hpivco[ipiv2]; ipiv2 = hpivco[ipiv1]; } hpivco[last] = save; *start = ipiv1; return; } /* about 8-10% of execution time is spent in this routine */ static int c_ekkbtju_aux(const double *COIN_RESTRICT dluval, const int *COIN_RESTRICT hrowi, const int *COIN_RESTRICT mcstrt, const int *COIN_RESTRICT hpivco, double *COIN_RESTRICT dwork1, int ipiv, int loop_end) { #define UNROLL2 2 #ifndef UNROLL2 #if CLP_OSL == 2 || CLP_OSL == 3 #define UNROLL2 2 #else #define UNROLL2 1 #endif #endif while (ipiv <= loop_end) { int kx = mcstrt[ipiv]; const int nel = hrowi[kx - 1]; #if UNROLL2 < 2 const int kxe = kx + nel; #endif double dv = dwork1[ipiv]; /* rhs */ #if UNROLL2 > 1 const int *hrowi2 = hrowi + kx; const int *hrowi2end = hrowi2 + nel; const double *dluval2 = dluval + kx; #else int iel; #endif const double dpiv = dluval[kx - 1]; /* inverse of pivot */ /* subtract terms whose unknowns have been solved for */ /* a significant proportion of these loops may not modify dv at all. * However, it seems to be just as expensive to check if the loop * would modify dv as it is to just do it. * The only difference would be that dluval wouldn't be referenced * for those loops, would might save some cache paging, * but unfortunately the code generated to search for zeros (on AIX) * is *worse* than code that just multiplies by dval. */ #if UNROLL2 < 2 for (iel = kx; iel < kxe; ++iel) { const int irow = hrowi[iel]; const double dval = dluval[iel]; dv -= SHIFT_REF(dwork1, irow) * dval; } dwork1[ipiv] = dv * dpiv; /* divide by the pivot */ #else if ((nel & 1) != 0) { int irow = *hrowi2; double dval = *dluval2; dv -= SHIFT_REF(dwork1, irow) * dval; hrowi2++; dluval2++; } for (; hrowi2 < hrowi2end; hrowi2 += 2, dluval2 += 2) { int irow0 = hrowi2[0]; int irow1 = hrowi2[1]; double dval0 = dluval2[0]; double dval1 = dluval2[1]; double d0 = SHIFT_REF(dwork1, irow0); double d1 = SHIFT_REF(dwork1, irow1); dv -= d0 * dval0; dv -= d1 * dval1; } dwork1[ipiv] = dv * dpiv; /* divide by the pivot */ #endif ipiv = hpivco[ipiv]; } return (ipiv); } /* * We are given the upper diagonal matrix U from the LU factorization * and a rhs dwork1. * This solves the system U x = dwork1 * by back substitution, overwriting dwork1 with the solution x. * * It does this in textbook style by solving the equations "bottom" up, * so for each equation one new unknown is solved for by subtracting * from the rhs the sum of the terms whose unknowns have been solved for, * then dividing by the coefficient of the new unknown. * * Since we update the U matrix using F-T, the order of the columns * changes slightly each iteration. Initially, hpivco[i] == i+1, * and each iteration (generally) introduces one element where this * is no longer true. However, because we periodically refactorize, * it is much more common for hpivco[i] == i+1 than not. * * The one quirk is that value referred to as the pivot is actually * the reciprocal of the pivot, to avoid a division. * * Solving in this fashion is inappropriate if there are frequently * cases where all unknowns in an equation have value zero. * This seems to happen frequently if the sparsity of the rhs is, say, 10%. */ static void c_ekkbtju(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, int ipiv) { const int nrow = fact->nrow; double *COIN_RESTRICT dluval = fact->xeeadr; int *COIN_RESTRICT hrowi = fact->xeradr; int *COIN_RESTRICT mcstrt = fact->xcsadr; int *COIN_RESTRICT hpivco_new = fact->kcpadr + 1; int ndenuc = fact->ndenuc; int first_dense = fact->first_dense; int last_dense = fact->last_dense; const int has_dense = (first_dense < last_dense && mcstrt[ipiv] <= mcstrt[last_dense]); /* Parameter adjustments */ /* dluval and hrowi were NOT decremented here. I believe that they are used as C-style arrays below. At this point, I am going to convert them from Fortran- to C-style here by incrementing them; at some later time, I will convert their uses in this file to Fortran-style. */ dluval++; hrowi++; if (has_dense) ipiv = c_ekkbtju_aux(dluval, hrowi, mcstrt, hpivco_new, dwork1, ipiv, first_dense - 1); if (has_dense) { int n = 0; int firstDense = nrow - ndenuc + 1; double *densew = &dwork1[firstDense]; /* check first dense to see where in triangle it is */ int last = first_dense; int j = mcstrt[last] - 1; int k1 = j; int k2 = j + hrowi[j]; for (j = k2; j > k1; j--) { int irow = UNSHIFT_INDEX(hrowi[j]); if (irow < firstDense) { break; } else { #ifdef DEBUG if (irow != last - 1) { abort(); } #endif last = irow; n++; } } c_ekkbtju_dense(nrow, dluval, hrowi, mcstrt, const_cast< int * >(hpivco_new), dwork1, &ipiv, last_dense, n - first_dense, densew); } (void)c_ekkbtju_aux(dluval, hrowi, mcstrt, hpivco_new, dwork1, ipiv, nrow); } /* c_ekkbtju */ /* * mpt / *nincolp contain the indices of nonzeros in dwork1. * nonzero contains the same information as a byte-mask. * * currently, erase_nonzero is true iff this is called from c_ekketsj. */ static int c_ekkbtju_sparse(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, int *COIN_RESTRICT mpt, int nincol, int *COIN_RESTRICT spare) { const double *COIN_RESTRICT dluval = fact->xeeadr + 1; const int *COIN_RESTRICT mcstrt = fact->xcsadr; char *COIN_RESTRICT nonzero = fact->nonzero; const int *COIN_RESTRICT hcoli = fact->xecadr; const int *COIN_RESTRICT mrstrt = fact->xrsadr; const int *COIN_RESTRICT hinrow = fact->xrnadr; const double *COIN_RESTRICT de2val = fact->xe2adr - 1; int i; int iPivot; int nList = 0; int nStack, k, kx; const int nrow = fact->nrow; const double tolerance = fact->zeroTolerance; int *COIN_RESTRICT list = spare; int *COIN_RESTRICT stack = spare + nrow; int *COIN_RESTRICT next = stack + nrow; /* * Examine all nonzero elements and determine which elements may be * nonzero in the result. * Any row in U that contains terms that may have nonzero variable values * may produce a nonzero value. */ for (k = 0; k < nincol; k++) { nStack = 1; iPivot = mpt[k]; stack[0] = iPivot; next[0] = 0; while (nStack) { int kPivot, ninrow, j; /* take off stack */ kPivot = stack[--nStack]; /*printf("nStack %d kPivot %d, ninrow %d, j %d, nList %d\n", nStack,kPivot,hinrow[kPivot], next[nStack],nList);*/ if (nonzero[kPivot] != 1) { ninrow = hinrow[kPivot]; j = next[nStack]; if (j != ninrow) { kx = mrstrt[kPivot]; kPivot = hcoli[kx + j]; /* put back on stack */ next[nStack++]++; if (!nonzero[kPivot]) { /* and new one */ stack[nStack] = kPivot; nonzero[kPivot] = 2; next[nStack++] = 0; } } else { /* finished so mark */ list[nList++] = kPivot; nonzero[kPivot] = 1; } } } } i = nList - 1; nList = 0; for (; i >= 0; i--) { double dpiv; double dv; iPivot = list[i]; kx = mcstrt[iPivot]; dpiv = dluval[kx - 1]; dv = dpiv * dwork1[iPivot]; nonzero[iPivot] = 0; if (fabs(dv) >= tolerance) { int iel; int krx = mrstrt[iPivot]; int krxe = krx + hinrow[iPivot]; dwork1[iPivot] = dv; mpt[nList++] = iPivot; for (iel = krx; iel < krxe; iel++) { int irow0 = hcoli[iel]; double dval = de2val[iel]; dwork1[irow0] -= dv * dval; } } else { dwork1[iPivot] = 0.0; } } return (nList); } /* c_ekkbtjuRow */ /* * dpermu is supposed to be zeroed on entry to this routine. * It is used as a working buffer. * The input vector dwork1 is permuted into dpermu, operated on, * and the answer is permuted back into dwork1, zeroing dpermu in * the process. */ /* * nincol > 0 ==> mpt contains indices of non-zeros in dpermu * * first_nonzero contains index of first (last??)nonzero; * only used if nincol==0. * * dpermu contains permuted input; dwork1 is now zero */ int c_ekkbtrn(COIN_REGISTER3 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, int *COIN_RESTRICT mpt, int first_nonzero) { double *COIN_RESTRICT dpermu = fact->kadrpm; const int *COIN_RESTRICT mpermu = fact->mpermu; const int *COIN_RESTRICT hpivco_new = fact->kcpadr + 1; const int nrow = fact->nrow; int i; int nincol; /* find the first non-zero input */ int ipiv; if (first_nonzero) { ipiv = first_nonzero; #if 1 if (c_ekk_IsSet(fact->bitArray, ipiv)) { /* slack */ int lastSlack = fact->lastSlack; int firstDo = hpivco_new[lastSlack]; assert(dpermu[ipiv]); while (ipiv != firstDo) { assert(c_ekk_IsSet(fact->bitArray, ipiv)); if (dpermu[ipiv]) dpermu[ipiv] = -dpermu[ipiv]; ipiv = hpivco_new[ipiv]; } } #endif } else { int lastSlack = fact->numberSlacks; ipiv = hpivco_new[0]; for (i = 0; i < lastSlack; i++) { int next_piv = hpivco_new[ipiv]; assert(c_ekk_IsSet(fact->bitArray, ipiv)); if (dpermu[ipiv]) { break; } else { ipiv = next_piv; } } /* usually, there is a non-zero slack entry... */ if (i == lastSlack) { /* but if there isn't... */ for (; i < nrow; i++) { if (!dpermu[ipiv]) { ipiv = hpivco_new[ipiv]; } else { break; } } } else { /* reverse signs for slacks */ for (; i < lastSlack; i++) { assert(c_ekk_IsSet(fact->bitArray, ipiv)); if (dpermu[ipiv]) dpermu[ipiv] = -dpermu[ipiv]; ipiv = hpivco_new[ipiv]; } assert(!c_ekk_IsSet(fact->bitArray, ipiv) || ipiv > fact->nrow); /* this is presumably the first non-zero non slack */ /*ipiv=firstDo;*/ } } if (ipiv <= fact->nrow) { /* skipBtju is always (?) 0 first the first call, * ipiv tends to be >nrow for the second */ /* DO U */ c_ekkbtju(fact, dpermu, ipiv); } /* DO ROW ETAS IN L */ c_ekkbtjl(fact, dpermu); c_ekkbtj4p(fact, dpermu); /* dwork1[mpermu] = dpermu; dpermu = 0; mpt = indices of non-zeros */ nincol = c_ekkshfpo_scan2zero(fact, &mpermu[1], dpermu, &dwork1[1], &mpt[1]); /* dpermu should be zero now */ #ifdef DEBUG for (i = 1; i <= nrow; i++) { if (dpermu[i]) { abort(); } /* endif */ } /* endfor */ #endif return (nincol); } /* c_ekkbtrn */ static int c_ekkbtrn0_new(COIN_REGISTER3 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, int *COIN_RESTRICT mpt, int nincol, int *COIN_RESTRICT spare) { double *COIN_RESTRICT dpermu = fact->kadrpm; const int *COIN_RESTRICT mpermu = fact->mpermu; const int *COIN_RESTRICT hpivro = fact->krpadr; const int nrow = fact->nrow; int i; char *nonzero = fact->nonzero; int doSparse = 1; /* so: dpermu must contain room for: * nrow doubles, followed by * nrow ints (mpermu), followed by * nrow ints (the inverse permutation), followed by * an unused area (?) of nrow ints, followed by * nrow chars (this non-zero array). * * and apparently the first nrow elements of nonzero are expected * to already be zero. */ #ifdef DEBUG for (i = 1; i <= nrow; i++) { if (nonzero[i]) { abort(); } /* endif */ } /* endfor */ #endif /* now nonzero[i]==1 iff there is an entry for i in mpt */ nincol = c_ekkbtju_sparse(fact, dpermu, &mpt[1], nincol, spare); /* the vector may have more nonzero elements now */ /* DO ROW ETAS IN L */ #define DENSE_THRESHOLD (nincol * 10 + 100) if (DENSE_THRESHOLD > nrow) { doSparse = 0; c_ekkbtjl(fact, dpermu); } else { /* set nonzero */ for (i = 0; i < nincol; i++) { int j = mpt[i + 1]; nonzero[j] = 1; } nincol = c_ekkbtjl_sparse(fact, dpermu, mpt, nincol); for (i = 0; i < nincol; i++) { int j = mpt[i + 1]; nonzero[j] = 0; } if (DENSE_THRESHOLD > nrow) { doSparse = 0; #ifdef DEBUG for (i = 1; i <= nrow; i++) { if (nonzero[i]) { abort(); } } #endif } } if (!doSparse) { c_ekkbtj4p(fact, dpermu); /* dwork1[mpermu] = dpermu; dpermu = 0; mpt = indices of non-zeros */ nincol = c_ekkshfpo_scan2zero(fact, &mpermu[1], dpermu, &dwork1[1], &mpt[1]); /* dpermu should be zero now */ #ifdef DEBUG for (i = 1; i <= nrow; i++) { if (dpermu[i]) { abort(); } /* endif */ } /* endfor */ #endif } else { /* still sparse */ if (fact->nnentl) { nincol = c_ekkbtj4_sparse(fact, dpermu, &mpt[1], dwork1, nincol, spare); } else { double tolerance = fact->zeroTolerance; int irow; int nput = 0; if (fact->packedMode) { for (i = 0; i < nincol; i++) { int irow0; double dval; irow = mpt[i + 1]; dval = dpermu[irow]; if (NOT_ZERO(dval)) { if (fabs(dval) >= tolerance) { irow0 = hpivro[irow]; dwork1[1 + nput] = dval; mpt[1 + nput++] = irow0 - 1; } dpermu[irow] = 0.0; } } } else { for (i = 0; i < nincol; i++) { int irow0; double dval; irow = mpt[i + 1]; dval = dpermu[irow]; if (NOT_ZERO(dval)) { if (fabs(dval) >= tolerance) { irow0 = hpivro[irow]; dwork1[irow0] = dval; mpt[1 + nput++] = irow0 - 1; } dpermu[irow] = 0.0; } } } nincol = nput; } } return (nincol); } /* c_ekkbtrn */ /* returns c_ekkbtrn(fact, dwork1, mpt) * * but since mpt[1..nincol] contains the indices of non-zeros in dwork1, * we can do faster. */ static int c_ekkbtrn_mpt(COIN_REGISTER3 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, int *COIN_RESTRICT mpt, int nincol, int *COIN_RESTRICT spare) { double *COIN_RESTRICT dpermu = fact->kadrpm; const int nrow = fact->nrow; const int *COIN_RESTRICT mpermu = fact->mpermu; /*const int *mrstrt = fact->xrsadr;*/ #ifdef DEBUG int i; memset(spare, 'A', 3 * nrow * sizeof(int)); { for (i = 1; i <= nrow; i++) { if (dpermu[i]) { abort(); } } } #endif int i; #ifdef DEBUG for (i = 1; i <= nrow; i++) { if (fact->nonzero[i] || dpermu[i]) { abort(); } } #endif assert(fact->if_sparse_update > 0 && mpt && fact->rows_ok); /* read the input vector from mpt/dwork1; * permute it into dpermu; * construct a nonzero mask in nonzero; * overwrite mpt with the permuted indices; * clear the dwork1 vector. */ for (i = 0; i < nincol; i++) { int irow = mpt[i + 1]; int jrow = mpermu[irow]; dpermu[jrow] = dwork1[irow]; /*nonzero[jrow-1]=1; this is done in btrn0 */ mpt[i + 1] = jrow; dwork1[irow] = 0.0; } if (DENSE_THRESHOLD < nrow) { nincol = c_ekkbtrn0_new(fact, dwork1, mpt, nincol, spare); } else { nincol = c_ekkbtrn(fact, dwork1, mpt, 0); } #ifdef DEBUG { for (i = 1; i <= nrow; i++) { if (dpermu[i]) { abort(); } } if (fact->if_sparse_update > 0) { for (i = 1; i <= nrow; i++) { if (fact->nonzero[i]) { abort(); } } } } #endif return nincol; } /* returns c_ekkbtrn(fact, dwork1, mpt) * * but since (dwork1[i]!=0) == (i==ipivrw), * we can do faster. */ int c_ekkbtrn_ipivrw(COIN_REGISTER3 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, int *COIN_RESTRICT mpt, int ipivrw, int *COIN_RESTRICT spare) { double *COIN_RESTRICT dpermu = fact->kadrpm; const int nrow = fact->nrow; const int *COIN_RESTRICT mpermu = fact->mpermu; const double *COIN_RESTRICT dluval = fact->xeeadr; const int *COIN_RESTRICT mrstrt = fact->xrsadr; const int *COIN_RESTRICT hinrow = fact->xrnadr; const int *COIN_RESTRICT hcoli = fact->xecadr; const int *COIN_RESTRICT mcstrt = fact->xcsadr; int nincol; #ifdef DEBUG int i; for (i = 1; i <= nrow; i++) { if (dpermu[i]) { abort(); } /* endif */ } /* endfor */ #endif if (fact->if_sparse_update > 0 && mpt && fact->rows_ok) { mpt[1] = ipivrw; nincol = c_ekkbtrn_mpt(fact, dwork1, mpt, 1, spare); } else { int ipiv; int kpivrw = mpermu[ipivrw]; dpermu[kpivrw] = dwork1[ipivrw]; dwork1[ipivrw] = 0.0; if (fact->rows_ok) { /* !fact->if_sparse_update * but we still have rowwise info, * so we may as well use it to do the slack row */ int iipivrw = nrow + 1; int itest = fact->nnentu + 1; int k = mrstrt[kpivrw]; int lastInRow = k + hinrow[kpivrw]; double dpiv, dv; for (; k < lastInRow; k++) { int icol = hcoli[k]; int start = mcstrt[icol]; if (start < itest) { iipivrw = icol; itest = start; } } /* do missed pivot */ itest = mcstrt[kpivrw]; dpiv = dluval[itest]; dv = dpermu[kpivrw]; dv *= dpiv; dpermu[kpivrw] = dv; ipiv = iipivrw; } else { /* no luck - c_ekkbtju will slog through slacks (?) */ ipiv = kpivrw; } /* nincol not read */ /* not sparse */ /* do slacks */ if (ipiv <= fact->nrow) { if (c_ekk_IsSet(fact->bitArray, ipiv)) { const int *hpivco_new = fact->kcpadr + 1; int lastSlack = fact->lastSlack; int firstDo = hpivco_new[lastSlack]; /* slack */ /* need pivot row of first nonslack */ dpermu[ipiv] = -dpermu[ipiv]; #ifndef NDEBUG while (1) { assert(c_ekk_IsSet(fact->bitArray, ipiv)); ipiv = hpivco_new[ipiv]; if (ipiv > fact->nrow || ipiv == firstDo) break; } assert(!c_ekk_IsSet(fact->bitArray, ipiv) || ipiv > fact->nrow); assert(ipiv == firstDo); #endif ipiv = firstDo; } } nincol = c_ekkbtrn(fact, dwork1, mpt, ipiv); } return nincol; } /* * Does work associated with eq. 3.7: * r' = u' U^-1 * * where u' (can't write the overbar) is the p'th row of U, without * the entry for column p. (here, jpivrw is p). * We solve this as for btju. We know * r' U = u' * * so we solve from low index to hi, determining the next value u_i' * by doing the dot-product of r' and the i'th column of U (excluding * element i itself), subtracting that from u'_i, and dividing by * U_ii (we store the reciprocal, so here we multiply). * * Now, in principle dwork1 should be initialized to the p'th row of U. * Instead, it is initially zeroed and filled in as we go along. * Of the entries in u' that we reference during a dot product with * a column of U, either * the entry is 0 by definition, since it is < p, or * it has already been set by a previous iteration, or * it is p. * * Because of this, we know that all elements < p will be zero; * that's why we start with p (kpivrw). * While we do this product, we also zero out the p'th row. */ static void c_ekketju_aux(COIN_REGISTER2 EKKfactinfo *COIN_RESTRICT2 fact, int sparse, double *COIN_RESTRICT dluval, int *COIN_RESTRICT hrowi, const int *COIN_RESTRICT mcstrt, const int *COIN_RESTRICT hpivco, double *COIN_RESTRICT dwork1, int *ipivp, int jpivrw, int stop_col) { int ipiv = *ipivp; if (1 && ipiv < stop_col && c_ekk_IsSet(fact->bitArray, ipiv)) { /* slack */ int lastSlack = fact->lastSlack; int firstDo = hpivco[lastSlack]; while (1) { assert(c_ekk_IsSet(fact->bitArray, ipiv)); dwork1[ipiv] = -dwork1[ipiv]; ipiv = hpivco[ipiv]; /* next column - generally ipiv+1 */ if (ipiv == firstDo || ipiv >= stop_col) break; } } while (ipiv < stop_col) { double dv = dwork1[ipiv]; int kx = mcstrt[ipiv]; int nel = hrowi[kx]; double dpiv = dluval[kx]; int kcs = kx + 1; int kce = kx + nel; int iel; for (iel = kcs; iel <= kce; ++iel) { int irow = hrowi[iel]; irow = UNSHIFT_INDEX(irow); dv -= dwork1[irow] * dluval[iel]; if (irow == jpivrw) { break; } } /* assuming the p'th row is sparse, * this branch will be infrequently taken */ if (iel <= kce) { int irow = hrowi[iel]; /* irow == jpivrw */ dv += dluval[iel]; if (sparse) { /* delete this entry by overwriting it with the last */ --nel; hrowi[kx] = nel; hrowi[iel] = hrowi[kce]; #ifdef CLP_REUSE_ETAS double temp = dluval[iel]; dluval[iel] = dluval[kce]; hrowi[kce] = jpivrw; dluval[kce] = temp; #else dluval[iel] = dluval[kce]; #endif kce--; } else { /* we can't delete an entry from a dense column, * so we just zero it out */ dluval[iel] = 0.0; iel++; } /* finish up the remaining entries; same as above loop, but no check */ for (; iel <= kce; ++iel) { irow = UNSHIFT_INDEX(hrowi[iel]); dv -= dwork1[irow] * dluval[iel]; } } dwork1[ipiv] = dv * dpiv; /* divide by pivot */ ipiv = hpivco[ipiv]; /* next column - generally ipiv+1 */ } /* ? is it guaranteed that ipiv==stop_col at this point?? */ *ipivp = ipiv; } /* dwork1 is assumed to be zeroed on entry */ static void c_ekketju(COIN_REGISTER EKKfactinfo *COIN_RESTRICT2 fact, double *dluval, int *hrowi, const int *COIN_RESTRICT mcstrt, const int *COIN_RESTRICT hpivco, double *COIN_RESTRICT dwork1, int kpivrw, int first_dense, int last_dense) { int ipiv = hpivco[kpivrw]; int jpivrw = SHIFT_INDEX(kpivrw); const int nrow = fact->nrow; if (first_dense < last_dense && mcstrt[ipiv] <= mcstrt[last_dense]) { /* There are dense columns, and * some dense columns precede the pivot column */ /* first do any sparse columns "on the left" */ c_ekketju_aux(fact, true, dluval, hrowi, mcstrt, hpivco, dwork1, &ipiv, jpivrw, first_dense); /* then do dense columns */ c_ekketju_aux(fact, false, dluval, hrowi, mcstrt, hpivco, dwork1, &ipiv, jpivrw, last_dense + 1); /* final sparse columns "on the right" ...*/ } /* ...are the same as sparse columns if there are no dense */ c_ekketju_aux(fact, true, dluval, hrowi, mcstrt, hpivco, dwork1, &ipiv, jpivrw, nrow + 1); } /* c_ekketju */ /*#define PRINT_DEBUG*/ /* dwork1 is assumed to be zeroed on entry */ int c_ekketsj(COIN_REGISTER2 /*const*/ EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, int *COIN_RESTRICT mpt2, double dalpha, int orig_nincol, int npivot, int *nuspikp, const int ipivrw, int *spare) { int nuspik = *nuspikp; int *COIN_RESTRICT mpermu = fact->mpermu; int *COIN_RESTRICT hcoli = fact->xecadr; double *COIN_RESTRICT dluval = fact->xeeadr; int *COIN_RESTRICT mrstrt = fact->xrsadr; int *COIN_RESTRICT hrowi = fact->xeradr; int *COIN_RESTRICT mcstrt = fact->xcsadr; int *COIN_RESTRICT hinrow = fact->xrnadr; /*int *hincol = fact->xcnadr; int *hpivro = fact->krpadr;*/ int *COIN_RESTRICT hpivco = fact->kcpadr; double *COIN_RESTRICT de2val = fact->xe2adr; const int nrow = fact->nrow; const int ifRowCopy = fact->rows_ok; int i, j = -1, k, i1, i2, k1; int kc, iel; double del3; int nroom; bool ifrows = (mrstrt[1] != 0); int kpivrw, jpivrw; int first_dense_mcstrt, last_dense_mcstrt; int nnentl; /* includes row stuff */ int doSparse = (fact->if_sparse_update > 0); #ifdef MORE_DEBUG { const int *COIN_RESTRICT hrowi = fact->R_etas_index; const int *COIN_RESTRICT mcstrt = fact->R_etas_start; int ndo = fact->nR_etas; int knext; knext = mcstrt[ndo + 1]; for (int i = ndo; i > 0; --i) { int k1 = knext; knext = mcstrt[i]; for (int j = k1 + 1; j < knext; j++) { assert(hrowi[j] > 0 && hrowi[j] < 100000); } } } #endif int mcstrt_piv; int nincol = 0; int *COIN_RESTRICT hpivco_new = fact->kcpadr + 1; int *COIN_RESTRICT back = fact->back; int irtcod = 0; /* Parameter adjustments */ de2val--; /* Function Body */ if (!ifRowCopy) { doSparse = 0; fact->if_sparse_update = -abs(fact->if_sparse_update); } if (npivot == 1) { fact->num_resets = 0; } kpivrw = mpermu[ipivrw]; #if 0 //ndef NDEBUG ets_count++; if (ets_check>=0&&ets_count>=ets_check) { printf("trouble\n"); } #endif mcstrt_piv = mcstrt[kpivrw]; /* ndenuc - top has number deleted */ if (fact->ndenuc) { first_dense_mcstrt = mcstrt[fact->first_dense]; last_dense_mcstrt = mcstrt[fact->last_dense]; } else { first_dense_mcstrt = 0; last_dense_mcstrt = 0; } { int kdnspt = fact->nnetas - fact->nnentl; i1 = ((kdnspt - 1) + fact->R_etas_start[fact->nR_etas + 1]); /*i1 = -99999999;*/ /* fact->R_etas_start[fact->nR_etas + 1] is -(the number of els in R) */ nnentl = fact->nnetas - ((kdnspt - 1) + fact->R_etas_start[fact->nR_etas + 1]); } fact->demark = fact->nnentu + nnentl; jpivrw = SHIFT_INDEX(kpivrw); #ifdef CLP_REUSE_ETAS double del3Orig = 0.0; #endif if (nuspik < 0) { goto L7000; } else if (nuspik == 0) { del3 = 0.; } else { del3 = 0.; i1 = fact->nnentu + 1; i2 = fact->nnentu + nuspik; if (fact->sortedEta) { /* binary search */ if (hrowi[i2] == jpivrw) { /* sitting right on the end - easy */ del3 = dluval[i2]; --nuspik; } else { bool foundit = true; /* binary search - sort of implies hrowi is sorted */ i = i1; if (hrowi[i] != jpivrw) { while (1) { i = (i1 + i2) >> 1; if (i == i1) { foundit = false; break; } if (hrowi[i] < jpivrw) { i1 = i; } else if (hrowi[i] > jpivrw) { i2 = i; } else break; } } /* ??? what if we didn't find it? */ if (foundit) { del3 = dluval[i]; --nuspik; /* remove it and move the last element into its place */ hrowi[i] = hrowi[nuspik + fact->nnentu + 1]; dluval[i] = dluval[nuspik + fact->nnentu + 1]; } } } else { /* search */ for (i = i1; i <= i2; i++) { if (hrowi[i] == jpivrw) { del3 = dluval[i]; --nuspik; /* remove it and move the last element into its place */ hrowi[i] = hrowi[i2]; dluval[i] = dluval[i2]; break; } } } } #ifdef CLP_REUSE_ETAS del3Orig = del3; #endif /* OLD COLUMN POINTERS */ /* **************************************************************** */ if (!ifRowCopy) { /* old method */ /* DO U */ c_ekketju(fact, dluval, hrowi, mcstrt, hpivco_new, dwork1, kpivrw, fact->first_dense, fact->last_dense); } else { /* could take out of old column but lets try being crude */ /* try taking out */ if (fact->xe2adr != 0 && doSparse) { /* * There is both a column and row representation of U. * For each row in the kpivrw'th column of the col U rep, * find its position in the U row rep and remove it * by overwriting it with the last element. */ int k1x = mcstrt[kpivrw]; int nel = hrowi[k1x]; /* yes, this is the nel, for the pivot */ int k2x = k1x + nel; for (k = k1x + 1; k <= k2x; ++k) { int irow = UNSHIFT_INDEX(hrowi[k]); int kx = mrstrt[irow]; int nel = hinrow[irow] - 1; hinrow[irow] = nel; int jlast = kx + nel; for (int iel = kx; iel < jlast; iel++) { if (kpivrw == hcoli[iel]) { hcoli[iel] = hcoli[jlast]; de2val[iel] = de2val[jlast]; break; } } } } else if (ifRowCopy) { /* still take out */ int k1x = mcstrt[kpivrw]; int nel = hrowi[k1x]; /* yes, this is the nel, for the pivot */ int k2x = k1x + nel; for (k = k1x + 1; k <= k2x; ++k) { int irow = UNSHIFT_INDEX(hrowi[k]); int kx = mrstrt[irow]; int nel = hinrow[irow] - 1; hinrow[irow] = nel; int jlast = kx + nel; for (; kx < jlast; kx++) { if (kpivrw == hcoli[kx]) { hcoli[kx] = hcoli[jlast]; break; } } } } /* add to row version */ /* the updated column (alpha_p) was written to entries * nnentu+1..nnentu+nuspik by routine c_ekkftrn_ft. * That was just an intermediate value of the usual ftrn. */ i1 = fact->nnentu + 1; i2 = fact->nnentu + nuspik; int *COIN_RESTRICT eta_last = mpermu + nrow * 2 + 3; int *COIN_RESTRICT eta_next = eta_last + nrow + 2; if (fact->xe2adr == 0 || !doSparse) { /* we have column indices by row, but not the actual values */ for (iel = i1; iel <= i2; ++iel) { int irow = UNSHIFT_INDEX(hrowi[iel]); int iput = hinrow[irow]; int kput = mrstrt[irow]; int nextRow = eta_next[irow]; assert(kput > 0); kput += iput; if (kput < mrstrt[nextRow]) { /* there is room - append the pivot column; * this corresponds making alpha_p the rightmost column of U (p. 268)*/ hinrow[irow] = iput + 1; hcoli[kput] = kpivrw; } else { /* no room - switch off */ doSparse = 0; /* possible kpivrw 1 */ k1 = mrstrt[kpivrw]; mrstrt[1] = -1; fact->rows_ok = false; goto L1226; } } } else { if (!doSparse) { /* we have both column indices and values by row */ /* just like loop above, but with extra assign to de2val */ for (iel = i1; iel <= i2; ++iel) { int irow = UNSHIFT_INDEX(hrowi[iel]); int iput = hinrow[irow]; int kput = mrstrt[irow]; int nextRow = eta_next[irow]; assert(kput > 0); kput += iput; if (kput < mrstrt[nextRow]) { hinrow[irow] = iput + 1; hcoli[kput] = kpivrw; de2val[kput] = dluval[iel]; } else { /* no room - switch off */ doSparse = 0; /* possible kpivrw 1 */ k1 = mrstrt[kpivrw]; mrstrt[1] = -1; fact->rows_ok = false; goto L1226; } } } else { for (iel = i1; iel <= i2; ++iel) { int j, k; int irow = UNSHIFT_INDEX(hrowi[iel]); int iput = hinrow[irow]; k = mrstrt[irow] + iput; j = eta_next[irow]; if (k >= mrstrt[j]) { /* no room - can we make some? */ int klast = eta_last[nrow + 1]; int jput = mrstrt[klast] + hinrow[klast] + 2; int distance = mrstrt[nrow + 1] - jput; if (iput + 1 < distance) { /* this presumably copies the row to the end */ int jn, jl; int kstart = mrstrt[irow]; int nin = hinrow[irow]; /* out */ jn = eta_next[irow]; jl = eta_last[irow]; eta_next[jl] = jn; eta_last[jn] = jl; /* in */ eta_next[klast] = irow; eta_last[nrow + 1] = irow; eta_last[irow] = klast; eta_next[irow] = nrow + 1; mrstrt[irow] = jput; #if 0 memcpy(&hcoli[jput],&hcoli[kstart],nin*sizeof(int)); memcpy(&de2val[jput],&de2val[kstart],nin*sizeof(double)); #else c_ekkscpy(nin, hcoli + kstart, hcoli + jput); c_ekkdcpy(nin, (de2val + kstart), (de2val + jput)); #endif k = jput + iput; } else { /* shuffle down */ int spare = (fact->nnetas - fact->nnentu - fact->nnentl - 3); if (spare > nrow << 1) { /* presumbly, this compacts the rows */ int jrow, jput; if (1) { if (fact->num_resets < 1000000) { int etasize = CoinMax(4 * fact->nnentu + (fact->nnetas - fact->nnentl) + 1000, fact->eta_size); if (ifrows) { fact->num_resets++; if (npivot > 40 && fact->num_resets << 4 > npivot) { fact->eta_size = static_cast< int >(1.05 * fact->eta_size); fact->num_resets = 1000000; } } else { fact->eta_size = static_cast< int >(1.1 * fact->eta_size); fact->num_resets = 1000000; } fact->eta_size = CoinMin(fact->eta_size, etasize); if (fact->maxNNetas > 0 && fact->eta_size > fact->maxNNetas) { fact->eta_size = fact->maxNNetas; } } } jrow = eta_next[0]; jput = 1; for (j = 0; j < nrow; j++) { int k, nin = hinrow[jrow]; k = mrstrt[jrow]; mrstrt[jrow] = jput; for (; nin; nin--) { hcoli[jput] = hcoli[k]; de2val[jput++] = de2val[k++]; } jrow = eta_next[jrow]; } if (spare > nrow << 3) { spare = 3; } else if (spare > nrow << 2) { spare = 1; } else { spare = 0; } jput += nrow * spare; ; jrow = eta_last[nrow + 1]; for (j = 0; j < nrow; j++) { int k, nin = hinrow[jrow]; k = mrstrt[jrow] + nin; jput -= spare; for (; nin; nin--) { hcoli[--jput] = hcoli[--k]; de2val[jput] = de2val[k]; } mrstrt[jrow] = jput; jrow = eta_last[jrow]; } /* set up for copy below */ k = mrstrt[irow] + iput; } else { /* no room - switch off */ doSparse = 0; /* possible kpivrw 1 */ k1 = mrstrt[kpivrw]; mrstrt[1] = -1; fact->rows_ok = false; goto L1226; } } } /* now we have room - append the new value */ hinrow[irow] = iput + 1; hcoli[k] = kpivrw; de2val[k] = dluval[iel]; } } } /* TAKE OUT ALL ELEMENTS IN PIVOT ROW */ k1 = mrstrt[kpivrw]; L1226 : { int k2 = k1 + hinrow[kpivrw] - 1; /* "delete" the row */ hinrow[kpivrw] = 0; j = 0; if (doSparse) { /* remove pivot row entries from the corresponding columns */ for (k = k1; k <= k2; ++k) { int icol = hcoli[k]; int kx = mcstrt[icol]; int nel = hrowi[kx]; for (iel = kx + 1; iel <= kx + nel; iel++) { if (hrowi[iel] == jpivrw) { break; } } if (iel <= kx + nel) { /* this has to happen, right?? */ /* copy the element into a temporary */ dwork1[icol] = dluval[iel]; mpt2[nincol++] = icol; /*nonzero[icol-1]=1;*/ hrowi[kx] = nel - 1; /* column is shorter by one */ j = 1; hrowi[iel] = hrowi[kx + nel]; dluval[iel] = dluval[kx + nel]; #ifdef CLP_REUSE_ETAS hrowi[kx + nel] = jpivrw; dluval[kx + nel] = dwork1[icol]; #endif } } if (j != 0) { /* now compute r', the new R transform */ orig_nincol = c_ekkbtju_sparse(fact, dwork1, mpt2, nincol, spare); dwork1[kpivrw] = 0.0; } } else { /* row version isn't ok (?) */ for (k = k1; k <= k2; ++k) { int icol = hcoli[k]; int kx = mcstrt[icol]; int nel = hrowi[kx]; j = kx + nel; int iel; for (iel = kx + 1; iel <= j; iel++) { if (hrowi[iel] == jpivrw) break; } dwork1[icol] = dluval[iel]; if (kx < first_dense_mcstrt || kx > last_dense_mcstrt) { hrowi[kx] = nel - 1; /* shorten column */ /* not packing - presumably column isn't sorted */ hrowi[iel] = hrowi[j]; dluval[iel] = dluval[j]; #ifdef CLP_REUSE_ETAS hrowi[j] = jpivrw; dluval[j] = dwork1[icol]; #endif } else { /* dense element - just zero it */ dluval[iel] = 0.0; } } if (j != 0) { /* Find first nonzero */ int ipiv = hpivco_new[kpivrw]; while (ipiv <= nrow) { if (!dwork1[ipiv]) { ipiv = hpivco_new[ipiv]; } else { break; } } if (ipiv <= nrow) { /* DO U */ /* now compute r', the new R transform */ c_ekkbtju(fact, dwork1, ipiv); } } } } } if (kpivrw == fact->first_dense) { /* increase until valid pivot */ fact->first_dense = hpivco_new[fact->first_dense]; } else if (kpivrw == fact->last_dense) { fact->last_dense = back[fact->last_dense]; } if (fact->first_dense == fact->last_dense) { fact->ndenuc = 0; fact->first_dense = 0; fact->last_dense = -1; } if (!(ifRowCopy && j == 0)) { /* increase amount of work on Etas */ /* **************************************************************** */ /* DO ROW ETAS IN L */ { if (!doSparse) { dwork1[kpivrw] = 0.; #if 0 orig_nincol=c_ekksczr(fact,nrow, dwork1, mpt2); del3=c_ekkputl(fact, mpt2, dwork1, del3, orig_nincol, nuspik); #else orig_nincol = c_ekkputl2(fact, dwork1, &del3, nuspik); #endif } else { del3 = c_ekkputl(fact, mpt2, dwork1, del3, orig_nincol, nuspik); } } if (orig_nincol != 0) { /* STORE AS A ROW VECTOR */ int n = fact->nR_etas + 1; int i1 = fact->R_etas_start[n]; fact->nR_etas = n; fact->R_etas_start[n + 1] = i1 - orig_nincol; hpivco[fact->nR_etas + nrow + 3] = kpivrw; } } /* CHECK DEL3 AGAINST DALPHA/DOUT */ { int kx = mcstrt[kpivrw]; double dout = dluval[kx]; double dcheck = fabs(dalpha / dout); double difference = 0.0; if (fabs(del3) > CoinMin(1.0e-8, fact->drtpiv * 0.99999)) { double checkTolerance; if (fact->npivots < 2) { checkTolerance = 1.0e-5; } else if (fact->npivots < 10) { checkTolerance = 1.0e-6; } else if (fact->npivots < 50) { checkTolerance = 1.0e-8; } else { checkTolerance = 1.0e-9; } difference = fabs(1.0 - fabs(del3) / dcheck); if (difference > 0.1 * checkTolerance) { if (difference < checkTolerance || (difference < 1.0e-7 && fact->npivots >= 50)) { irtcod = 1; #ifdef PRINT_DEBUG printf("mildly bad %g after %d pivots, etsj %g ftncheck %g ftnalpha %g\n", difference, fact->npivots, del3, dcheck, dalpha); #endif } else { irtcod = 2; #ifdef PRINT_DEBUG printf("bad %g after %d pivots, etsj %g ftncheck %g ftnalpha %g\n", difference, fact->npivots, del3, dcheck, dalpha); #endif } } } else { irtcod = 2; #ifdef PRINT_DEBUG printf("bad small %g after %d pivots, etsj %g ftncheck %g ftnalpha %g\n", difference, fact->npivots, del3, dcheck, dalpha); #endif } if (irtcod > 1) goto L8000; fact->npivots++; } mcstrt[kpivrw] = fact->nnentu; #ifdef CLP_REUSE_ETAS { int *putSeq = fact->xrsadr + 2 * fact->nrowmx + 2; int *position = putSeq + fact->maxinv; int *putStart = position + fact->maxinv; putStart[fact->nrow + fact->npivots - 1] = fact->nnentu; } #endif dluval[fact->nnentu] = 1. / del3; /* new pivot */ hrowi[fact->nnentu] = nuspik; /* new nelems */ #ifndef NDEBUG { int lastSlack = fact->lastSlack; int firstDo = hpivco_new[lastSlack]; int ipiv = hpivco_new[0]; int now = fact->numberSlacks; if (now) { while (1) { if (ipiv > fact->nrow || ipiv == firstDo) break; assert(c_ekk_IsSet(fact->bitArray, ipiv)); ipiv = hpivco_new[ipiv]; } if (ipiv <= fact->nrow) { while (1) { if (ipiv > fact->nrow) break; assert(!c_ekk_IsSet(fact->bitArray, ipiv)); ipiv = hpivco_new[ipiv]; } } } } #endif { /* do new hpivco */ int inext = hpivco_new[kpivrw]; int iback = back[kpivrw]; if (inext != nrow + 1) { int ilast = back[nrow + 1]; hpivco_new[iback] = inext; back[inext] = iback; assert(hpivco_new[ilast] == nrow + 1); hpivco_new[ilast] = kpivrw; back[kpivrw] = ilast; hpivco_new[kpivrw] = nrow + 1; back[nrow + 1] = kpivrw; } } { int lastSlack = fact->lastSlack; int now = fact->numberSlacks; if (now && mcstrt_piv <= mcstrt[lastSlack]) { if (c_ekk_IsSet(fact->bitArray, kpivrw)) { /*printf("piv %d lastSlack %d\n",mcstrt_piv,lastSlack);*/ fact->numberSlacks--; now--; /* one less slack */ c_ekk_Unset(fact->bitArray, kpivrw); if (now && kpivrw == lastSlack) { int i; int ipiv; ipiv = hpivco_new[0]; for (i = 0; i < now - 1; i++) ipiv = hpivco_new[ipiv]; lastSlack = ipiv; assert(c_ekk_IsSet(fact->bitArray, ipiv)); assert(!c_ekk_IsSet(fact->bitArray, hpivco_new[ipiv]) || hpivco_new[ipiv] > fact->nrow); fact->lastSlack = lastSlack; } else if (!now) { fact->lastSlack = 0; } } } fact->firstNonSlack = hpivco_new[lastSlack]; #ifndef NDEBUG { int lastSlack = fact->lastSlack; int firstDo = hpivco_new[lastSlack]; int ipiv = hpivco_new[0]; int now = fact->numberSlacks; if (now) { while (1) { if (ipiv > fact->nrow || ipiv == firstDo) break; assert(c_ekk_IsSet(fact->bitArray, ipiv)); ipiv = hpivco_new[ipiv]; } if (ipiv <= fact->nrow) { while (1) { if (ipiv > fact->nrow) break; assert(!c_ekk_IsSet(fact->bitArray, ipiv)); ipiv = hpivco_new[ipiv]; } } } } #endif } fact->nnentu += nuspik; #ifdef CLP_REUSE_ETAS if (fact->first_dense >= fact->last_dense) { // save fact->nnentu++; dluval[fact->nnentu] = del3Orig; hrowi[fact->nnentu] = kpivrw; int *putSeq = fact->xrsadr + 2 * fact->nrowmx + 2; int *position = putSeq + fact->maxinv; int *putStart = position + fact->maxinv; int nnentu_at_factor = putStart[fact->nrow] & 0x7fffffff; //putStart[fact->nrow+fact->npivots]=fact->nnentu+1; int where; if (mcstrt_piv < nnentu_at_factor) { // original LU where = kpivrw - 1; } else { // could do binary search int *look = putStart + fact->nrow; for (where = fact->npivots - 1; where >= 0; where--) { if (mcstrt_piv == (look[where] & 0x7fffffff)) break; } assert(where >= 0); where += fact->nrow; } position[fact->npivots - 1] = where; if (orig_nincol == 0) { // flag putStart[fact->nrow + fact->npivots - 1] |= 0x80000000; } } #endif { int kdnspt = fact->nnetas - fact->nnentl; /* fact->R_etas_start[fact->nR_etas + 1] is -(the number of els in R) */ nnentl = fact->nnetas - ((kdnspt - 1) + fact->R_etas_start[fact->nR_etas + 1]); } fact->demark = (fact->nnentu + nnentl) - fact->demark; /* if need to redo row version */ if (!fact->rows_ok && fact->first_dense >= fact->last_dense) { int extraSpace = 10000; int spareSpace; if (fact->if_sparse_update > 0) { spareSpace = (fact->nnetas - fact->nnentu - fact->nnentl); } else { /* missing out nnentl stuff */ spareSpace = fact->nnetas - fact->nnentu; } /* save clean row copy if enough room */ nroom = spareSpace / nrow; if ((fact->nnentu << 3) > 150 * fact->maxinv) { extraSpace = 150 * fact->maxinv; } else { extraSpace = fact->nnentu << 3; } ifrows = false; if (fact->nnetas > fact->nnentu + fact->nnentl + extraSpace) { ifrows = true; } if (nroom < 5) { ifrows = false; } if (nroom > CoinMin(50, fact->maxinv - (fact->iterno - fact->iterin))) { ifrows = true; } #ifdef PRINT_DEBUGx printf(" redoing row copy %d %d %d\n", ifrows, nroom, spareSpace); #endif if (1) { if (fact->num_resets < 1000000) { if (ifrows) { fact->num_resets++; if (npivot > 40 && fact->num_resets << 4 > npivot) { fact->eta_size = static_cast< int >(1.05 * fact->eta_size); fact->num_resets = 1000000; } } else { fact->eta_size = static_cast< int >(1.1 * fact->eta_size); fact->num_resets = 1000000; } if (fact->maxNNetas > 0 && fact->eta_size > fact->maxNNetas) { fact->eta_size = fact->maxNNetas; } } } fact->rows_ok = ifrows; if (ifrows) { int ibase = 1; c_ekkizero(nrow, &hinrow[1]); for (i = 1; i <= nrow; ++i) { int kx = mcstrt[i]; int nel = hrowi[kx]; int kcs = kx + 1; int kce = kx + nel; for (kc = kcs; kc <= kce; ++kc) { int irow = UNSHIFT_INDEX(hrowi[kc]); if (dluval[kc]) { hinrow[irow]++; } } } int *eta_last = mpermu + nrow * 2 + 3; int *eta_next = eta_last + nrow + 2; eta_next[0] = 1; for (i = 1; i <= nrow; ++i) { eta_next[i] = i + 1; eta_last[i] = i - 1; mrstrt[i] = ibase; ibase = ibase + hinrow[i] + nroom; hinrow[i] = 0; } eta_last[nrow + 1] = nrow; //eta_next[nrow+1]=nrow+2; mrstrt[nrow + 1] = ibase; if (fact->xe2adr == 0) { for (i = 1; i <= nrow; ++i) { int kx = mcstrt[i]; int nel = hrowi[kx]; int kcs = kx + 1; int kce = kx + nel; for (kc = kcs; kc <= kce; ++kc) { if (dluval[kc]) { int irow = UNSHIFT_INDEX(hrowi[kc]); int iput = hinrow[irow]; assert(irow); hcoli[mrstrt[irow] + iput] = i; hinrow[irow] = iput + 1; } } } } else { for (i = 1; i <= nrow; ++i) { int kx = mcstrt[i]; int nel = hrowi[kx]; int kcs = kx + 1; int kce = kx + nel; for (kc = kcs; kc <= kce; ++kc) { int irow = UNSHIFT_INDEX(hrowi[kc]); int iput = hinrow[irow]; hcoli[mrstrt[irow] + iput] = i; de2val[mrstrt[irow] + iput] = dluval[kc]; hinrow[irow] = iput + 1; } } } } else { mrstrt[1] = 0; if (fact->if_sparse_update > 0 && fact->iterno - fact->iterin > 100) { goto L7000; } } } goto L8000; /* OUT OF SPACE - COULD PACK DOWN */ L7000: irtcod = 1; #ifdef PRINT_DEBUG printf(" out of space\n"); #endif if (1) { if ((npivot << 3) < fact->nbfinv) { /* low on space */ if (npivot < 10) { fact->eta_size = fact->eta_size << 1; } else { double ratio = fact->nbfinv; double ratio2 = npivot << 3; ratio = ratio / ratio2; if (ratio > 2.0) { ratio = 2.0; } /* endif */ fact->eta_size = static_cast< int >(ratio * fact->eta_size); } /* endif */ } else { fact->eta_size = static_cast< int >(1.05 * fact->eta_size); } /* endif */ if (fact->maxNNetas > 0 && fact->eta_size > fact->maxNNetas) { fact->eta_size = fact->maxNNetas; } } /* ================= IF ERROR SHOULD WE GET RID OF LAST ITERATION??? */ L8000: *nuspikp = nuspik; #ifdef MORE_DEBUG for (int i = 1; i <= fact->nrow; i++) { int kx = mcstrt[i]; int nel = hrowi[kx]; for (int j = 0; j < nel; j++) { assert(i != hrowi[j + kx + 1]); } } #endif #ifdef CLP_REUSE_ETAS fact->save_nnentu = fact->nnentu; #endif return (irtcod); } /* c_ekketsj */ static void c_ekkftj4p(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, int firstNonZero) { /* this is where the L factors start, because this is the place * where c_ekktria starts laying them down (see initialization of xnetal). */ int lstart = fact->lstart; const int *COIN_RESTRICT hpivco = fact->kcpadr; int firstLRow = hpivco[lstart]; if (firstNonZero > firstLRow) { lstart += firstNonZero - firstLRow; } assert(firstLRow == fact->firstLRow); int jpiv = hpivco[lstart]; const double *COIN_RESTRICT dluval = fact->xeeadr; const int *COIN_RESTRICT hrowi = fact->xeradr; const int *COIN_RESTRICT mcstrt = fact->xcsadr + lstart; int ndo = fact->xnetal - lstart; int i, iel; /* find first non-zero */ for (i = 0; i < ndo; i++) { if (dwork1[i + jpiv] != 0.0) break; } for (; i < ndo; ++i) { double dv = dwork1[i + jpiv]; if (dv != 0.) { int kce1 = mcstrt[i + 1]; for (iel = mcstrt[i]; iel > kce1; --iel) { int irow0 = hrowi[iel]; SHIFT_REF(dwork1, irow0) += dv * dluval[iel]; } } } } /* c_ekkftj4p */ /* * This version is more efficient for input columns that are sparse. * It is instructive to consider the case of an especially sparse column, * which is a slack. The slack for row r has exactly one non-zero element, * in row r, which is +-1.0. Let pr = mpermu[r]. * In this case, nincol==1 and mpt[0] == pr on entry. * if mpt[0] == pr <= jpiv * then this slack is completely unaffected by L; * this is reflected by the fact that save_where = last * after the first loop, so none of the remaining loops * ever execute, * else if mpt[0] == pr > jpiv, but pr-jpiv > ndo * then the slack is also unaffected by L, this time because * its row is "after" L. During factorization, it may * be the case that the first part of the basis is upper * triangular (c_ekktria), but it may also be the case that the * last part of the basis is upper triangular (in which case the * L triangle gets "chopped off" on the right). In both cases, * no L entries are required. Since in this case the tests * (i<=ndo) will fail (and dwork1[ipiv]==1.0), the code will * do nothing. * else if mpt[0] == pr > jpiv and pr-jpiv <= ndo * then the slack *is* affected by L. * the for-loop inside the second while-loop will discover * that none of the factors for the corresponding column of L * are non-zero in the slack column, so last will not be incremented. * We multiply the eta-vector, and the last loop does nothing. */ static int c_ekkftj4_sparse(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, int *COIN_RESTRICT mpt, int nincol, int *COIN_RESTRICT spare) { const int nrow = fact->nrow; /* this is where the L factors start, because this is the place * where c_ekktria starts laying them down (see initialization of xnetal). */ int lstart = fact->lstart; const int *COIN_RESTRICT hpivco = fact->kcpadr; const double *COIN_RESTRICT dluval = fact->xeeadr; const int *COIN_RESTRICT hrowi = fact->xeradr; const int *COIN_RESTRICT mcstrt = fact->xcsadr + lstart - 1; double tolerance = fact->zeroTolerance; int jpiv = hpivco[lstart] - 1; char *COIN_RESTRICT nonzero = fact->nonzero; int ndo = fact->xnetalval; int k, nStack; int nList = 0; int iPivot; int *COIN_RESTRICT list = spare; int *COIN_RESTRICT stack = spare + nrow; int *COIN_RESTRICT next = stack + nrow; double dv; int iel; int nput = 0, kput = nrow; int check = jpiv + ndo + 1; const int *COIN_RESTRICT mcstrt2 = mcstrt - jpiv; for (k = 0; k < nincol; k++) { nStack = 1; iPivot = mpt[k]; if (nonzero[iPivot] != 1 && iPivot > jpiv && iPivot < check) { stack[0] = iPivot; next[0] = mcstrt2[iPivot + 1] + 1; while (nStack) { int kPivot, j; /* take off stack */ kPivot = stack[--nStack]; if (nonzero[kPivot] != 1 && kPivot > jpiv && kPivot < check) { j = next[nStack]; if (j > mcstrt2[kPivot]) { /* finished so mark */ list[nList++] = kPivot; nonzero[kPivot] = 1; } else { kPivot = UNSHIFT_INDEX(hrowi[j]); /* put back on stack */ next[nStack++]++; if (!nonzero[kPivot]) { /* and new one */ stack[nStack] = kPivot; nonzero[kPivot] = 2; next[nStack++] = mcstrt2[kPivot + 1] + 1; } } } else if (kPivot >= check) { list[--kput] = kPivot; nonzero[kPivot] = 1; } } } else if (nonzero[iPivot] != 1) { /* nothing to do (except check size at end) */ list[--kput] = iPivot; nonzero[iPivot] = 1; } } for (k = nList - 1; k >= 0; k--) { double dv; iPivot = list[k]; dv = dwork1[iPivot]; nonzero[iPivot] = 0; if (fabs(dv) > tolerance) { /* the same code as in c_ekkftj4p */ int kce1 = mcstrt2[iPivot + 1]; for (iel = mcstrt2[iPivot]; iel > kce1; --iel) { int irow0 = hrowi[iel]; SHIFT_REF(dwork1, irow0) += dv * dluval[iel]; } mpt[nput++] = iPivot; } else { dwork1[iPivot] = 0.0; /* force to zero, not just near zero */ } } /* check remainder */ for (k = kput; k < nrow; k++) { iPivot = list[k]; nonzero[iPivot] = 0; dv = dwork1[iPivot]; if (fabs(dv) > tolerance) { mpt[nput++] = iPivot; } else { dwork1[iPivot] = 0.0; /* force to zero, not just near zero */ } } return (nput); } /* c_ekkftj4 */ /* * This applies the R transformations of the F-T LU update procedure, * equation 3.11 on p. 270 in the 1972 Math Programming paper. * Note that since the non-zero off-diagonal elements are in a row, * multiplying an R by a column is a reduction, not like applying * L or U. * * Note that this may introduce new non-zeros in dwork1, * since an hpivco entry may correspond to a zero element, * and that some non-zeros in dwork1 may be cancelled. */ static int c_ekkftjl_sparse3(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, int *COIN_RESTRICT mpt, int *COIN_RESTRICT hput, double *COIN_RESTRICT dluput, int nincol) { int i; int knext; int ipiv; double dv; const double *COIN_RESTRICT dluval = fact->R_etas_element + 1; const int *COIN_RESTRICT hrowi = fact->R_etas_index + 1; const int *COIN_RESTRICT mcstrt = fact->R_etas_start; int ndo = fact->nR_etas; double tolerance = fact->zeroTolerance; const int *COIN_RESTRICT hpivco = fact->hpivcoR; /* and make cleaner */ hput++; dluput++; /* DO ANY ROW TRANSFORMATIONS */ /* Function Body */ /* mpt has correct list of nonzeros */ if (ndo != 0) { knext = mcstrt[1]; for (i = 1; i <= ndo; ++i) { int k1 = knext; /* == mcstrt[i] */ int iel; ipiv = hpivco[i]; dv = dwork1[ipiv]; bool onList = (dv != 0.0); knext = mcstrt[i + 1]; for (iel = knext; iel < k1; ++iel) { int irow = hrowi[iel]; dv += SHIFT_REF(dwork1, irow) * dluval[iel]; } /* (1) if dwork[ipiv] == 0.0, then this may add a non-zero. * (2) if dwork[ipiv] != 0.0, then this may cancel out a non-zero. */ if (onList) { if (fabs(dv) > tolerance) { dwork1[ipiv] = dv; } else { dwork1[ipiv] = 1.0e-128; } } else { if (fabs(dv) > tolerance) { /* put on list if not there */ mpt[nincol++] = ipiv; dwork1[ipiv] = dv; } } } } knext = 0; for (i = 0; i < nincol; i++) { ipiv = mpt[i]; dv = dwork1[ipiv]; if (fabs(dv) > tolerance) { hput[knext] = SHIFT_INDEX(ipiv); dluput[knext] = dv; mpt[knext++] = ipiv; } else { dwork1[ipiv] = 0.0; } } return knext; } /* c_ekkftjl */ static int c_ekkftjl_sparse2(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, int *COIN_RESTRICT mpt, int nincol) { double tolerance = fact->zeroTolerance; const double *COIN_RESTRICT dluval = fact->R_etas_element + 1; const int *COIN_RESTRICT hrowi = fact->R_etas_index + 1; const int *COIN_RESTRICT mcstrt = fact->R_etas_start; int ndo = fact->nR_etas; const int *COIN_RESTRICT hpivco = fact->hpivcoR; int i; int knext; int ipiv; double dv; /* DO ANY ROW TRANSFORMATIONS */ /* Function Body */ /* mpt has correct list of nonzeros */ if (ndo != 0) { knext = mcstrt[1]; for (i = 1; i <= ndo; ++i) { int k1 = knext; /* == mcstrt[i] */ int iel; ipiv = hpivco[i]; dv = dwork1[ipiv]; bool onList = (dv != 0.0); knext = mcstrt[i + 1]; for (iel = knext; iel < k1; ++iel) { int irow = hrowi[iel]; dv += SHIFT_REF(dwork1, irow) * dluval[iel]; } /* (1) if dwork[ipiv] == 0.0, then this may add a non-zero. * (2) if dwork[ipiv] != 0.0, then this may cancel out a non-zero. */ if (onList) { if (fabs(dv) > tolerance) { dwork1[ipiv] = dv; } else { dwork1[ipiv] = 1.0e-128; } } else { if (fabs(dv) > tolerance) { /* put on list if not there */ mpt[nincol++] = ipiv; dwork1[ipiv] = dv; } } } } knext = 0; for (i = 0; i < nincol; i++) { ipiv = mpt[i]; dv = dwork1[ipiv]; if (fabs(dv) > tolerance) { mpt[knext++] = ipiv; } else { dwork1[ipiv] = 0.0; } } return knext; } /* c_ekkftjl */ static void c_ekkftjl(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1) { double tolerance = fact->zeroTolerance; const double *COIN_RESTRICT dluval = fact->R_etas_element + 1; const int *COIN_RESTRICT hrowi = fact->R_etas_index + 1; const int *COIN_RESTRICT mcstrt = fact->R_etas_start; int ndo = fact->nR_etas; const int *COIN_RESTRICT hpivco = fact->hpivcoR; int i; int knext; /* DO ANY ROW TRANSFORMATIONS */ /* Function Body */ if (ndo != 0) { /* * The following three lines are here just to ensure that this * new formulation of the loop has exactly the same effect * as the original. */ { int ipiv = hpivco[1]; double dv = dwork1[ipiv]; dwork1[ipiv] = (fabs(dv) > tolerance) ? dv : 0.0; } knext = mcstrt[1]; for (i = 1; i <= ndo; ++i) { int k1 = knext; /* == mcstrt[i] */ int ipiv = hpivco[i]; double dv = dwork1[ipiv]; int iel; //#define UNROLL3 2 #ifndef UNROLL3 #if CLP_OSL == 2 || CLP_OSL == 3 #define UNROLL3 2 #else #define UNROLL3 1 #endif #endif knext = mcstrt[i + 1]; #if UNROLL3 < 2 for (iel = knext; iel < k1; ++iel) { int irow = hrowi[iel]; dv += SHIFT_REF(dwork1, irow) * dluval[iel]; } #else iel = knext; if (((k1 - knext) & 1) != 0) { int irow = hrowi[iel]; dv += SHIFT_REF(dwork1, irow) * dluval[iel]; iel++; } for (; iel < k1; iel += 2) { int irow0 = hrowi[iel]; double dval0 = dluval[iel]; int irow1 = hrowi[iel + 1]; double dval1 = dluval[iel + 1]; dv += SHIFT_REF(dwork1, irow0) * dval0; dv += SHIFT_REF(dwork1, irow1) * dval1; } #endif /* (1) if dwork[ipiv] == 0.0, then this may add a non-zero. * (2) if dwork[ipiv] != 0.0, then this may cancel out a non-zero. */ dwork1[ipiv] = (fabs(dv) > tolerance) ? dv : 0.0; } } } /* c_ekkftjl */ /* this assumes it is ok to reference back[loop_limit] */ /* another 3 seconds from a ~570 second run can be trimmed * by using two routines, one with scan==true and the other false, * since that eliminates the branch instructions involving them * entirely. This was how the code was originally written. * However, I'm still hoping that eventually we can use * C++ templates to do that for us automatically. */ static void c_ekkftjup_scan_aux(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, double *COIN_RESTRICT dworko, int loop_limit, int *ip, int **mptp) { const double *COIN_RESTRICT dluval = fact->xeeadr + 1; const int *COIN_RESTRICT hrowi = fact->xeradr + 1; const int *COIN_RESTRICT mcstrt = fact->xcsadr; const int *COIN_RESTRICT hpivro = fact->krpadr; const int *COIN_RESTRICT back = fact->back; double tolerance = fact->zeroTolerance; int ipiv = *ip; double dv = dwork1[ipiv]; int *mptX = *mptp; assert(mptX); while (ipiv != loop_limit) { int next_ipiv = back[ipiv]; dwork1[ipiv] = 0.0; #ifndef UNROLL4 #define UNROLL4 2 #endif /* invariant: dv == dwork1[ipiv] */ /* in the case of world.mps with dual, this condition is true * only 20-60% of the time. */ if (fabs(dv) > tolerance) { const int kx = mcstrt[ipiv]; const int nel = hrowi[kx - 1]; const double dpiv = dluval[kx - 1]; #if UNROLL4 > 1 const int *hrowi2 = hrowi + kx; const int *hrowi2end = hrowi2 + nel; const double *dluval2 = dluval + kx; #else int iel; #endif dv *= dpiv; /* * The following loop is the unrolled version of this: * * for (iel = kx+1; iel <= kx + nel; iel++) { * SHIFT_REF(dwork1, hrowi[iel]) -= dv * dluval[iel]; * } */ #if UNROLL4 < 2 iel = kx; if (nel & 1) { int irow = hrowi[iel]; double dval = dluval[iel]; SHIFT_REF(dwork1, irow) -= dv * dval; iel++; } for (; iel < kx + nel; iel += 2) { int irow0 = hrowi[iel]; int irow1 = hrowi[iel + 1]; double dval0 = dluval[iel]; double dval1 = dluval[iel + 1]; double d0 = SHIFT_REF(dwork1, irow0); double d1 = SHIFT_REF(dwork1, irow1); d0 -= dv * dval0; d1 -= dv * dval1; SHIFT_REF(dwork1, irow0) = d0; SHIFT_REF(dwork1, irow1) = d1; } /* end loop */ #else if ((nel & 1) != 0) { int irow = *hrowi2; double dval = *dluval2; SHIFT_REF(dwork1, irow) -= dv * dval; hrowi2++; dluval2++; } for (; hrowi2 < hrowi2end; hrowi2 += 2, dluval2 += 2) { int irow0 = hrowi2[0]; int irow1 = hrowi2[1]; double dval0 = dluval2[0]; double dval1 = dluval2[1]; double d0 = SHIFT_REF(dwork1, irow0); double d1 = SHIFT_REF(dwork1, irow1); d0 -= dv * dval0; d1 -= dv * dval1; SHIFT_REF(dwork1, irow0) = d0; SHIFT_REF(dwork1, irow1) = d1; } #endif /* put this down here so that dv is less likely to cause a stall */ if (fabs(dv) >= tolerance) { int iput = hpivro[ipiv]; dworko[iput] = dv; *mptX++ = iput - 1; } } dv = dwork1[next_ipiv]; ipiv = next_ipiv; } /* endwhile */ *mptp = mptX; *ip = ipiv; } static void c_ekkftjup_aux3(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, double *COIN_RESTRICT dworko, const int *COIN_RESTRICT back, const int *COIN_RESTRICT hpivro, int *ipivp, int loop_limit, int **mptXp) { double tolerance = fact->zeroTolerance; int ipiv = *ipivp; if (ipiv != loop_limit) { int *mptX = *mptXp; double dv = dwork1[ipiv]; do { int next_ipiv = back[ipiv]; double next_dv = dwork1[next_ipiv]; dwork1[ipiv] = 0.0; if (fabs(dv) >= tolerance) { int iput = hpivro[ipiv]; dworko[iput] = dv; *mptX++ = iput - 1; } ipiv = next_ipiv; dv = next_dv; } while (ipiv != loop_limit); *mptXp = mptX; *ipivp = ipiv; } } static void c_ekkftju_dense(const double *dluval, const int *COIN_RESTRICT hrowi, const int *COIN_RESTRICT mcstrt, const int *COIN_RESTRICT back, double *COIN_RESTRICT dwork1, int *start, int last, int offset, double *densew) { int ipiv = *start; while (ipiv > last) { const int ipiv1 = ipiv; double dv1 = dwork1[ipiv1]; ipiv = back[ipiv]; if (fabs(dv1) > 1.0e-14) { const int kx1 = mcstrt[ipiv1]; const int nel1 = hrowi[kx1 - 1]; const double dpiv1 = dluval[kx1 - 1]; int iel, k; const int n1 = offset + ipiv1; /* number in dense part */ const int nsparse1 = nel1 - n1; const int k1 = kx1 + nsparse1; const double *dlu1 = &dluval[k1]; int ipiv2 = back[ipiv1]; const int nskip = ipiv1 - ipiv2; dv1 *= dpiv1; dwork1[ipiv1] = dv1; for (k = n1 - (nskip - 1) - 1; k >= 0; k--) { const double dval = dv1 * dlu1[k]; double dv2 = densew[k] - dval; ipiv = back[ipiv]; if (fabs(dv2) > 1.0e-14) { const int kx2 = mcstrt[ipiv2]; const int nel2 = hrowi[kx2 - 1]; const double dpiv2 = dluval[kx2 - 1]; /* number in dense part is k */ const int nsparse2 = nel2 - k; const int k2 = kx2 + nsparse2; const double *dlu2 = &dluval[k2]; dv2 *= dpiv2; densew[k] = dv2; /* was dwork1[ipiv2]=dv2; */ k--; /* * The following loop is the unrolled version of: * * for (; k >= 0; k--) { * densew[k]-=dv1*dlu1[k]+dv2*dlu2[k]; * } */ if ((k & 1) == 0) { densew[k] -= dv1 * dlu1[k] + dv2 * dlu2[k]; k--; } for (; k >= 0; k -= 2) { double da, db; da = densew[k]; db = densew[k - 1]; da -= dv1 * dlu1[k]; db -= dv1 * dlu1[k - 1]; da -= dv2 * dlu2[k]; db -= dv2 * dlu2[k - 1]; densew[k] = da; densew[k - 1] = db; } /* end loop */ /* * The following loop is the unrolled version of: * * for (iel=kx2+nsparse2-1; iel >= kx2; iel--) { * SHIFT_REF(dwork1, hrowi[iel]) -= dv2*dluval[iel]; * } */ iel = kx2 + nsparse2 - 1; if ((nsparse2 & 1) != 0) { int irow0 = hrowi[iel]; double dval = dluval[iel]; SHIFT_REF(dwork1, irow0) -= dv2 * dval; iel--; } for (; iel >= kx2; iel -= 2) { double dval0 = dluval[iel]; double dval1 = dluval[iel - 1]; int irow0 = hrowi[iel]; int irow1 = hrowi[iel - 1]; double d0 = SHIFT_REF(dwork1, irow0); double d1 = SHIFT_REF(dwork1, irow1); d0 -= dv2 * dval0; d1 -= dv2 * dval1; SHIFT_REF(dwork1, irow0) = d0; SHIFT_REF(dwork1, irow1) = d1; } /* end loop */ } else { densew[k] = 0.0; /* skip if next deleted */ k -= ipiv2 - ipiv - 1; ipiv2 = ipiv; if (ipiv < last) { k--; for (; k >= 0; k--) { double dval; dval = dv1 * dlu1[k]; densew[k] = densew[k] - dval; } } } } /* * The following loop is the unrolled version of: * * for (iel=kx1+nsparse1-1; iel >= kx1; iel--) { * SHIFT_REF(dwork1, hrowi[iel]) -= dv1*dluval[iel]; * } */ iel = kx1 + nsparse1 - 1; if ((nsparse1 & 1) != 0) { int irow0 = hrowi[iel]; double dval = dluval[iel]; SHIFT_REF(dwork1, irow0) -= dv1 * dval; iel--; } for (; iel >= kx1; iel -= 2) { double dval0 = dluval[iel]; double dval1 = dluval[iel - 1]; int irow0 = hrowi[iel]; int irow1 = hrowi[iel - 1]; double d0 = SHIFT_REF(dwork1, irow0); double d1 = SHIFT_REF(dwork1, irow1); d0 -= dv1 * dval0; d1 -= dv1 * dval1; SHIFT_REF(dwork1, irow0) = d0; SHIFT_REF(dwork1, irow1) = d1; } /* end loop */ } else { dwork1[ipiv1] = 0.0; } /* endif */ } /* endwhile */ *start = ipiv; } /* do not use return value if mpt==0 */ /* using dual, this is usually called via c_ekkftrn_ft, from c_ekksdul * (so mpt is non-null). * it is generally called every iteration, but sometimes several iterations * are skipped (null moves?). * * generally, back[i] == i-1 (initialized in c_ekkshfv towards the end). */ static int c_ekkftjup(COIN_REGISTER3 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, int last, double *COIN_RESTRICT dworko, int *COIN_RESTRICT mpt) { const double *COIN_RESTRICT dluval = fact->xeeadr; const int *COIN_RESTRICT hrowi = fact->xeradr; const int *COIN_RESTRICT mcstrt = fact->xcsadr; const int *COIN_RESTRICT hpivro = fact->krpadr; double tolerance = fact->zeroTolerance; int ndenuc = fact->ndenuc; const int first_dense = fact->first_dense; const int last_dense = fact->last_dense; int i; int *mptX = mpt; const int nrow = fact->nrow; const int *COIN_RESTRICT back = fact->back; int ipiv = back[nrow + 1]; if (last_dense > first_dense && mcstrt[ipiv] >= mcstrt[last_dense]) { c_ekkftjup_scan_aux(fact, dwork1, dworko, last_dense, &ipiv, &mptX); { int j; int n = 0; const int firstDense = nrow - ndenuc + 1; double *densew = &dwork1[firstDense]; int offset; /* check first dense to see where in triangle it is */ int last = first_dense; const int k1 = mcstrt[last]; const int k2 = k1 + hrowi[k1]; for (j = k2; j > k1; j--) { int irow = UNSHIFT_INDEX(hrowi[j]); if (irow < firstDense) { break; } else { #ifdef DEBUG if (irow != last - 1) { abort(); } #endif last = irow; n++; } } offset = n - first_dense; i = ipiv; /* loop counter i may be modified by this call */ c_ekkftju_dense(&dluval[1], &hrowi[1], mcstrt, back, dwork1, &i, first_dense, offset, densew); c_ekkftjup_aux3(fact, dwork1, dworko, back, hpivro, &ipiv, i, &mptX); } } c_ekkftjup_scan_aux(fact, dwork1, dworko, last, &ipiv, &mptX); if (ipiv != 0) { double dv = dwork1[ipiv]; do { int next_ipiv = back[ipiv]; double next_dv = dwork1[next_ipiv]; dwork1[ipiv] = 0.0; if (fabs(dv) >= tolerance) { int iput = hpivro[ipiv]; dworko[iput] = -dv; *mptX++ = iput - 1; } ipiv = next_ipiv; dv = next_dv; } while (ipiv != 0); } return static_cast< int >(mptX - mpt); } /* this assumes it is ok to reference back[loop_limit] */ /* another 3 seconds from a ~570 second run can be trimmed * by using two routines, one with scan==true and the other false, * since that eliminates the branch instructions involving them * entirely. This was how the code was originally written. * However, I'm still hoping that eventually we can use * C++ templates to do that for us automatically. */ static void c_ekkftjup_scan_aux_pack(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, double *COIN_RESTRICT dworko, int loop_limit, int *ip, int **mptp) { double tolerance = fact->zeroTolerance; const double *dluval = fact->xeeadr + 1; const int *hrowi = fact->xeradr + 1; const int *mcstrt = fact->xcsadr; const int *hpivro = fact->krpadr; const int *back = fact->back; int ipiv = *ip; double dv = dwork1[ipiv]; int *mptX = *mptp; #if 0 int inSlacks=0; int lastSlack; if (fact->numberSlacks!=0) lastSlack=fact->lastSlack; else lastSlack=0; if (c_ekk_IsSet(fact->bitArray,ipiv)) { printf("already in slacks - ipiv %d\n",ipiv); inSlacks=1; return; } #endif assert(mptX); while (ipiv != loop_limit) { int next_ipiv = back[ipiv]; #if 0 if (ipiv==lastSlack) { printf("now in slacks - ipiv %d\n",ipiv); inSlacks=1; break; } if (inSlacks) { assert (c_ekk_IsSet(fact->bitArray,ipiv)); assert (dluval[mcstrt[ipiv]-1]==-1.0); assert (hrowi[mcstrt[ipiv]-1]==0); } #endif dwork1[ipiv] = 0.0; /* invariant: dv == dwork1[ipiv] */ /* in the case of world.mps with dual, this condition is true * only 20-60% of the time. */ if (fabs(dv) > tolerance) { const int kx = mcstrt[ipiv]; const int nel = hrowi[kx - 1]; const double dpiv = dluval[kx - 1]; #ifndef UNROLL5 #define UNROLL5 2 #endif #if UNROLL5 > 1 const int *hrowi2 = hrowi + kx; const int *hrowi2end = hrowi2 + nel; const double *dluval2 = dluval + kx; #else int iel; #endif dv *= dpiv; /* * The following loop is the unrolled version of this: * * for (iel = kx+1; iel <= kx + nel; iel++) { * SHIFT_REF(dwork1, hrowi[iel]) -= dv * dluval[iel]; * } */ #if UNROLL5 < 2 iel = kx; if (nel & 1) { int irow = hrowi[iel]; double dval = dluval[iel]; SHIFT_REF(dwork1, irow) -= dv * dval; iel++; } for (; iel < kx + nel; iel += 2) { int irow0 = hrowi[iel]; int irow1 = hrowi[iel + 1]; double dval0 = dluval[iel]; double dval1 = dluval[iel + 1]; double d0 = SHIFT_REF(dwork1, irow0); double d1 = SHIFT_REF(dwork1, irow1); d0 -= dv * dval0; d1 -= dv * dval1; SHIFT_REF(dwork1, irow0) = d0; SHIFT_REF(dwork1, irow1) = d1; } /* end loop */ #else if ((nel & 1) != 0) { int irow = *hrowi2; double dval = *dluval2; SHIFT_REF(dwork1, irow) -= dv * dval; hrowi2++; dluval2++; } for (; hrowi2 < hrowi2end; hrowi2 += 2, dluval2 += 2) { int irow0 = hrowi2[0]; int irow1 = hrowi2[1]; double dval0 = dluval2[0]; double dval1 = dluval2[1]; double d0 = SHIFT_REF(dwork1, irow0); double d1 = SHIFT_REF(dwork1, irow1); d0 -= dv * dval0; d1 -= dv * dval1; SHIFT_REF(dwork1, irow0) = d0; SHIFT_REF(dwork1, irow1) = d1; } #endif /* put this down here so that dv is less likely to cause a stall */ if (fabs(dv) >= tolerance) { int iput = hpivro[ipiv]; *dworko++ = dv; *mptX++ = iput - 1; } } dv = dwork1[next_ipiv]; ipiv = next_ipiv; } /* endwhile */ *mptp = mptX; *ip = ipiv; } static void c_ekkftjup_aux3_pack(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, double *COIN_RESTRICT dworko, const int *COIN_RESTRICT back, const int *COIN_RESTRICT hpivro, int *ipivp, int loop_limit, int **mptXp) { double tolerance = fact->zeroTolerance; int ipiv = *ipivp; if (ipiv != loop_limit) { int *mptX = *mptXp; double dv = dwork1[ipiv]; do { int next_ipiv = back[ipiv]; double next_dv = dwork1[next_ipiv]; dwork1[ipiv] = 0.0; if (fabs(dv) >= tolerance) { int iput = hpivro[ipiv]; *dworko++ = dv; *mptX++ = iput - 1; } ipiv = next_ipiv; dv = next_dv; } while (ipiv != loop_limit); *mptXp = mptX; *ipivp = ipiv; } } /* do not use return value if mpt==0 */ /* using dual, this is usually called via c_ekkftrn_ft, from c_ekksdul * (so mpt is non-null). * it is generally called every iteration, but sometimes several iterations * are skipped (null moves?). * * generally, back[i] == i-1 (initialized in c_ekkshfv towards the end). */ static int c_ekkftjup_pack(COIN_REGISTER3 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, int last, double *COIN_RESTRICT dworko, int *COIN_RESTRICT mpt) { const double *COIN_RESTRICT dluval = fact->xeeadr; const int *COIN_RESTRICT hrowi = fact->xeradr; const int *COIN_RESTRICT mcstrt = fact->xcsadr; const int *COIN_RESTRICT hpivro = fact->krpadr; double tolerance = fact->zeroTolerance; int ndenuc = fact->ndenuc; const int first_dense = fact->first_dense; const int last_dense = fact->last_dense; int *mptX = mpt; int *mptY = mpt; const int nrow = fact->nrow; const int *COIN_RESTRICT back = fact->back; int ipiv = back[nrow + 1]; assert(mpt); if (last_dense > first_dense && mcstrt[ipiv] >= mcstrt[last_dense]) { c_ekkftjup_scan_aux_pack(fact, dwork1, dworko, last_dense, &ipiv, &mptX); /* adjust */ dworko += (mptX - mpt); mpt = mptX; { int j; int n = 0; const int firstDense = nrow - ndenuc + 1; double *densew = &dwork1[firstDense]; int offset; /* check first dense to see where in triangle it is */ int last = first_dense; const int k1 = mcstrt[last]; const int k2 = k1 + hrowi[k1]; for (j = k2; j > k1; j--) { int irow = UNSHIFT_INDEX(hrowi[j]); if (irow < firstDense) { break; } else { #ifdef DEBUG if (irow != last - 1) { abort(); } #endif last = irow; n++; } } offset = n - first_dense; int ipiv2 = ipiv; /* loop counter i may be modified by this call */ c_ekkftju_dense(&dluval[1], &hrowi[1], mcstrt, back, dwork1, &ipiv2, first_dense, offset, densew); c_ekkftjup_aux3_pack(fact, dwork1, dworko, back, hpivro, &ipiv, ipiv2, &mptX); /* adjust dworko */ dworko += (mptX - mpt); mpt = mptX; } } c_ekkftjup_scan_aux_pack(fact, dwork1, dworko, last, &ipiv, &mptX); /* adjust dworko */ dworko += (mptX - mpt); while (ipiv != 0) { double dv = dwork1[ipiv]; int next_ipiv = back[ipiv]; dwork1[ipiv] = 0.0; if (fabs(dv) >= tolerance) { int iput = hpivro[ipiv]; *dworko++ = -dv; *mptX++ = iput - 1; } ipiv = next_ipiv; } return static_cast< int >(mptX - mptY); } static int c_ekkftju_sparse_a(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, int *COIN_RESTRICT mpt, int nincol, int *COIN_RESTRICT spare) { const int *COIN_RESTRICT hrowi = fact->xeradr + 1; const int *COIN_RESTRICT mcstrt = fact->xcsadr; const int nrow = fact->nrow; char *COIN_RESTRICT nonzero = fact->nonzero; int k, nStack, kx, nel; int nList = 0; int iPivot; /*int kkk=nincol;*/ int *COIN_RESTRICT list = spare; int *COIN_RESTRICT stack = spare + nrow; int *COIN_RESTRICT next = stack + nrow; for (k = 0; k < nincol; k++) { nStack = 1; iPivot = mpt[k]; stack[0] = iPivot; next[0] = 0; while (nStack) { int kPivot, j; /* take off stack */ kPivot = stack[--nStack]; if (nonzero[kPivot] != 1) { kx = mcstrt[kPivot]; nel = hrowi[kx - 1]; j = next[nStack]; if (j == nel) { /* finished so mark */ list[nList++] = kPivot; nonzero[kPivot] = 1; } else { kPivot = hrowi[kx + j]; /* put back on stack */ next[nStack++]++; if (!nonzero[kPivot]) { /* and new one */ stack[nStack] = kPivot; nonzero[kPivot] = 2; next[nStack++] = 0; /*kkk++;*/ } } } } } return (nList); } static int c_ekkftju_sparse_b(COIN_REGISTER2 const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, double *COIN_RESTRICT dworko, int *COIN_RESTRICT mpt, int nList, int *COIN_RESTRICT spare) { const double *COIN_RESTRICT dluval = fact->xeeadr + 1; const int *COIN_RESTRICT hrowi = fact->xeradr + 1; const int *COIN_RESTRICT mcstrt = fact->xcsadr; const int *COIN_RESTRICT hpivro = fact->krpadr; double tolerance = fact->zeroTolerance; char *COIN_RESTRICT nonzero = fact->nonzero; int i, k, kx, nel; int iPivot; /*int kkk=nincol;*/ int *COIN_RESTRICT list = spare; i = nList - 1; nList = 0; for (; i >= 0; i--) { double dpiv; double dv; iPivot = list[i]; /*printf("pivot %d %d\n",i,iPivot);*/ dv = dwork1[iPivot]; kx = mcstrt[iPivot]; nel = hrowi[kx - 1]; dwork1[iPivot] = 0.0; dpiv = dluval[kx - 1]; dv *= dpiv; nonzero[iPivot] = 0; iPivot = hpivro[iPivot]; if (fabs(dv) >= tolerance) { *dworko++ = dv; mpt[nList++] = iPivot - 1; for (k = kx; k < kx + nel; k++) { double dval; double dd; int irow = hrowi[k]; dval = dluval[k]; dd = dwork1[irow]; dd -= dv * dval; dwork1[irow] = dd; } } } return (nList); } /* dwork1 = (B^-1)dwork1; * I think dpermu[1..nrow+1] is zeroed on exit (?) * I don't think it is expected to have any particular value on entry (?) */ int c_ekkftrn(COIN_REGISTER const EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, double *COIN_RESTRICT dpermu, int *COIN_RESTRICT mpt, int numberNonZero) { const int *COIN_RESTRICT mpermu = fact->mpermu; int lastNonZero; int firstNonZero = c_ekkshfpi_list2(mpermu + 1, dwork1 + 1, dpermu, mpt, numberNonZero, &lastNonZero); if (fact->nnentl && lastNonZero >= fact->firstLRow) { /* dpermu = (L^-1)dpermu */ c_ekkftj4p(fact, dpermu, firstNonZero); } int lastSlack; /* dpermu = (R^-1) dpermu */ c_ekkftjl(fact, dpermu); assert(fact->numberSlacks != 0 || !fact->lastSlack); lastSlack = fact->lastSlack; /* dwork1 = (U^-1)dpermu; dpermu zeroed (?) */ return c_ekkftjup(fact, dpermu, lastSlack, dwork1, mpt); } /* c_ekkftrn */ int c_ekkftrn_ft(COIN_REGISTER EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1_ft, int *COIN_RESTRICT mpt_ft, int *nincolp_ft) { double *COIN_RESTRICT dpermu_ft = fact->kadrpm; int *COIN_RESTRICT spare = reinterpret_cast< int * >(fact->kp1adr); int nincol = *nincolp_ft; int nuspik; double *COIN_RESTRICT dluvalPut = fact->xeeadr + fact->nnentu + 1; int *COIN_RESTRICT hrowiPut = fact->xeradr + fact->nnentu + 1; const int nrow = fact->nrow; /* mpermu contains the permutation */ const int *COIN_RESTRICT mpermu = fact->mpermu; int lastSlack; int kdnspt = fact->nnetas - fact->nnentl; bool isRoom = (fact->nnentu + (nrow << 1) < (kdnspt - 2) + fact->R_etas_start[fact->nR_etas + 1]); /* say F-T will be sorted */ fact->sortedEta = 1; assert(fact->numberSlacks != 0 || !fact->lastSlack); lastSlack = fact->lastSlack; #ifdef CLP_REUSE_ETAS bool skipStuff = (fact->reintro >= 0); int save_nR_etas = fact->nR_etas; int *save_hpivcoR = fact->hpivcoR; int *save_R_etas_start = fact->R_etas_start; if (skipStuff) { // just move int *putSeq = fact->xrsadr + 2 * fact->nrowmx + 2; int *position = putSeq + fact->maxinv; int *putStart = position + fact->maxinv; memset(dwork1_ft, 0, nincol * sizeof(double)); int iPiv = fact->reintro; int start = putStart[iPiv] & 0x7fffffff; int end = putStart[iPiv + 1] & 0x7fffffff; double *COIN_RESTRICT dluval = fact->xeeadr; int *COIN_RESTRICT hrowi = fact->xeradr; double dValue; if (fact->reintro < fact->nrow) { iPiv++; dValue = 1.0 / dluval[start++]; } else { iPiv = hrowi[--end]; dValue = dluval[end]; start++; int ndoSkip = 0; for (int i = fact->nrow; i < fact->reintro; i++) { if ((putStart[i] & 0x80000000) == 0) ndoSkip++; } fact->nR_etas -= ndoSkip; fact->hpivcoR += ndoSkip; fact->R_etas_start += ndoSkip; } dpermu_ft[iPiv] = dValue; if (fact->if_sparse_update > 0 && DENSE_THRESHOLD < nrow) { nincol = 0; if (dValue) mpt_ft[nincol++] = iPiv; for (int i = start; i < end; i++) { int iRow = hrowi[i]; dpermu_ft[iRow] = dluval[i]; mpt_ft[nincol++] = iRow; } } else { for (int i = start; i < end; i++) { int iRow = hrowi[i]; dpermu_ft[iRow] = dluval[i]; } } } #else bool skipStuff = false; #endif if (fact->if_sparse_update > 0 && DENSE_THRESHOLD < nrow) { if (!skipStuff) { /* iterating so c_ekkgtcl will have list */ /* in order for this to make sense, nonzero[1..nrow] must already be zeroed */ c_ekkshfpi_list3(mpermu + 1, dwork1_ft, dpermu_ft, mpt_ft, nincol); /* it may be the case that the basis was entirely upper-triangular */ if (fact->nnentl) { nincol = c_ekkftj4_sparse(fact, dpermu_ft, mpt_ft, nincol, spare); } } /* DO ROW ETAS IN L */ if (isRoom) { ++fact->nnentu; nincol = c_ekkftjl_sparse3(fact, dpermu_ft, mpt_ft, hrowiPut, dluvalPut, nincol); nuspik = nincol; /* temporary */ /* say not sorted */ fact->sortedEta = 0; } else { /* no room */ nuspik = -3; nincol = c_ekkftjl_sparse2(fact, dpermu_ft, mpt_ft, nincol); } /* DO U */ if (DENSE_THRESHOLD > nrow - fact->numberSlacks) { nincol = c_ekkftjup_pack(fact, dpermu_ft, lastSlack, dwork1_ft, mpt_ft); } else { nincol = c_ekkftju_sparse_a(fact, mpt_ft, nincol, spare); nincol = c_ekkftju_sparse_b(fact, dpermu_ft, dwork1_ft, mpt_ft, nincol, spare); } } else { if (!skipStuff) { int lastNonZero; int firstNonZero = c_ekkshfpi_list(mpermu + 1, dwork1_ft, dpermu_ft, mpt_ft, nincol, &lastNonZero); if (fact->nnentl && lastNonZero >= fact->firstLRow) { /* dpermu_ft = (L^-1)dpermu_ft */ c_ekkftj4p(fact, dpermu_ft, firstNonZero); } } /* dpermu_ft = (R^-1) dpermu_ft */ c_ekkftjl(fact, dpermu_ft); if (isRoom) { /* fake start to allow room for pivot */ /* dluval[fact->nnentu...] = non-zeros of dpermu_ft; * hrowi[fact->nnentu..] = indices of these non-zeros; * near-zeros in dluval flattened */ ++fact->nnentu; nincol = c_ekkscmv(fact, fact->nrow, dpermu_ft, hrowiPut, dluvalPut); /* * note that this is not the value of nincol determined by c_ekkftjup. * For Forrest-Tomlin update we want vector before U * this vector will replace one in U */ nuspik = nincol; } else { /* no room */ nuspik = -3; } /* dwork1_ft = (U^-1)dpermu_ft; dpermu_ft zeroed (?) */ nincol = c_ekkftjup_pack(fact, dpermu_ft, lastSlack, dwork1_ft, mpt_ft); } #ifdef CLP_REUSE_ETAS fact->nR_etas = save_nR_etas; fact->hpivcoR = save_hpivcoR; fact->R_etas_start = save_R_etas_start; #endif *nincolp_ft = nincol; return (nuspik); } /* c_ekkftrn */ void c_ekkftrn2(COIN_REGISTER EKKfactinfo *COIN_RESTRICT2 fact, double *COIN_RESTRICT dwork1, double *COIN_RESTRICT dpermu1, int *COIN_RESTRICT mpt1, int *nincolp, double *COIN_RESTRICT dwork1_ft, int *COIN_RESTRICT mpt_ft, int *nincolp_ft) { double *COIN_RESTRICT dluvalPut = fact->xeeadr + fact->nnentu + 1; int *COIN_RESTRICT hrowiPut = fact->xeradr + fact->nnentu + 1; const int nrow = fact->nrow; /* mpermu contains the permutation */ const int *COIN_RESTRICT mpermu = fact->mpermu; int lastSlack; assert(fact->numberSlacks != 0 || !fact->lastSlack); lastSlack = fact->lastSlack; int nincol = *nincolp_ft; /* using dwork1 instead double *dpermu_ft = fact->kadrpm; */ int *spare = reinterpret_cast< int * >(fact->kp1adr); int kdnspt = fact->nnetas - fact->nnentl; bool isRoom = (fact->nnentu + (nrow << 1) < (kdnspt - 2) + fact->R_etas_start[fact->nR_etas + 1]); /* say F-T will be sorted */ fact->sortedEta = 1; int lastNonZero; int firstNonZero = c_ekkshfpi_list2(mpermu + 1, dwork1 + 1, dpermu1, mpt1, *nincolp, &lastNonZero); if (fact->nnentl && lastNonZero >= fact->firstLRow) { /* dpermu1 = (L^-1)dpermu1 */ c_ekkftj4p(fact, dpermu1, firstNonZero); } #ifdef CLP_REUSE_ETAS bool skipStuff = (fact->reintro >= 0); int save_nR_etas = fact->nR_etas; int *save_hpivcoR = fact->hpivcoR; int *save_R_etas_start = fact->R_etas_start; if (skipStuff) { // just move int *putSeq = fact->xrsadr + 2 * fact->nrowmx + 2; int *position = putSeq + fact->maxinv; int *putStart = position + fact->maxinv; memset(dwork1_ft, 0, nincol * sizeof(double)); int iPiv = fact->reintro; int start = putStart[iPiv] & 0x7fffffff; int end = putStart[iPiv + 1] & 0x7fffffff; double *COIN_RESTRICT dluval = fact->xeeadr; int *COIN_RESTRICT hrowi = fact->xeradr; double dValue; if (fact->reintro < fact->nrow) { iPiv++; dValue = 1.0 / dluval[start++]; } else { iPiv = hrowi[--end]; dValue = dluval[end]; start++; int ndoSkip = 0; for (int i = fact->nrow; i < fact->reintro; i++) { if ((putStart[i] & 0x80000000) == 0) ndoSkip++; } fact->nR_etas -= ndoSkip; fact->hpivcoR += ndoSkip; fact->R_etas_start += ndoSkip; } dwork1[iPiv] = dValue; if (fact->if_sparse_update > 0 && DENSE_THRESHOLD < nrow) { nincol = 0; if (dValue) mpt_ft[nincol++] = iPiv; for (int i = start; i < end; i++) { int iRow = hrowi[i]; dwork1[iRow] = dluval[i]; mpt_ft[nincol++] = iRow; } } else { for (int i = start; i < end; i++) { int iRow = hrowi[i]; dwork1[iRow] = dluval[i]; } } } #else bool skipStuff = false; #endif if (fact->if_sparse_update > 0 && DENSE_THRESHOLD < nrow) { if (!skipStuff) { /* iterating so c_ekkgtcl will have list */ /* in order for this to make sense, nonzero[1..nrow] must already be zeroed */ c_ekkshfpi_list3(mpermu + 1, dwork1_ft, dwork1, mpt_ft, nincol); /* it may be the case that the basis was entirely upper-triangular */ if (fact->nnentl) { nincol = c_ekkftj4_sparse(fact, dwork1, mpt_ft, nincol, spare); } } /* DO ROW ETAS IN L */ if (isRoom) { ++fact->nnentu; nincol = c_ekkftjl_sparse3(fact, dwork1, mpt_ft, hrowiPut, dluvalPut, nincol); fact->nuspike = nincol; /* say not sorted */ fact->sortedEta = 0; } else { /* no room */ fact->nuspike = -3; nincol = c_ekkftjl_sparse2(fact, dwork1, mpt_ft, nincol); } } else { if (!skipStuff) { int lastNonZero; int firstNonZero = c_ekkshfpi_list(mpermu + 1, dwork1_ft, dwork1, mpt_ft, nincol, &lastNonZero); if (fact->nnentl && lastNonZero >= fact->firstLRow) { /* dpermu_ft = (L^-1)dpermu_ft */ c_ekkftj4p(fact, dwork1, firstNonZero); } } c_ekkftjl(fact, dwork1); if (isRoom) { /* fake start to allow room for pivot */ /* dluval[fact->nnentu...] = non-zeros of dpermu_ft; * hrowi[fact->nnentu..] = indices of these non-zeros; * near-zeros in dluval flattened */ ++fact->nnentu; nincol = c_ekkscmv(fact, fact->nrow, dwork1, hrowiPut, dluvalPut); /* * note that this is not the value of nincol determined by c_ekkftjup. * For Forrest-Tomlin update we want vector before U * this vector will replace one in U */ fact->nuspike = nincol; } else { /* no room */ fact->nuspike = -3; } } #ifdef CLP_REUSE_ETAS fact->nR_etas = save_nR_etas; fact->hpivcoR = save_hpivcoR; fact->R_etas_start = save_R_etas_start; #endif /* dpermu1 = (R^-1) dpermu1 */ c_ekkftjl(fact, dpermu1); /* DO U */ if (fact->if_sparse_update <= 0 || DENSE_THRESHOLD > nrow - fact->numberSlacks) { nincol = c_ekkftjup_pack(fact, dwork1, lastSlack, dwork1_ft, mpt_ft); } else { nincol = c_ekkftju_sparse_a(fact, mpt_ft, nincol, spare); nincol = c_ekkftju_sparse_b(fact, dwork1, dwork1_ft, mpt_ft, nincol, spare); } *nincolp_ft = nincol; /* dwork1 = (U^-1)dpermu1; dpermu1 zeroed (?) */ *nincolp = c_ekkftjup(fact, dpermu1, lastSlack, dwork1, mpt1); } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinFileIO.hpp0000644000175200017520000001460013414454441016211 0ustar coincoin/* $Id: CoinFileIO.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2005, COIN-OR. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinFileIO_H #define CoinFileIO_H #include /// Base class for FileIO classes. class CoinFileIOBase { public: /// Constructor. /// @param fileName The name of the file used by this object. CoinFileIOBase(const std::string &fileName); /// Destructor. ~CoinFileIOBase(); /// Return the name of the file used by this object. const char *getFileName() const; /// Return the method of reading being used inline std::string getReadType() const { return readType_.c_str(); } protected: std::string readType_; private: CoinFileIOBase(); CoinFileIOBase(const CoinFileIOBase &); std::string fileName_; }; /// Abstract base class for file input classes. class CoinFileInput : public CoinFileIOBase { public: /// indicates whether CoinFileInput supports gzip'ed files static bool haveGzipSupport(); /// indicates whether CoinFileInput supports bzip2'ed files static bool haveBzip2Support(); /// Factory method, that creates a CoinFileInput (more precisely /// a subclass of it) for the file specified. This method reads the /// first few bytes of the file and determines if this is a compressed /// or a plain file and returns the correct subclass to handle it. /// If the file does not exist or uses a compression not compiled in /// an exception is thrown. /// @param fileName The file that should be read. static CoinFileInput *create(const std::string &fileName); /// Constructor (don't use this, use the create method instead). /// @param fileName The name of the file used by this object. CoinFileInput(const std::string &fileName); /// Destructor. virtual ~CoinFileInput(); /// Read a block of data from the file, similar to fread. /// @param buffer Address of a buffer to store the data into. /// @param size Number of bytes to read (buffer should be large enough). /// @return Number of bytes read. virtual int read(void *buffer, int size) = 0; /// Reads up to (size-1) characters an stores them into the buffer, /// similar to fgets. /// Reading ends, when EOF or a newline occurs or (size-1) characters have /// been read. The resulting string is terminated with '\0'. If reading /// ends due to an encoutered newline, the '\n' is put into the buffer, /// before the '\0' is appended. /// @param buffer The buffer to put the string into. /// @param size The size of the buffer in characters. /// @return buffer on success, or 0 if no characters have been read. virtual char *gets(char *buffer, int size) = 0; }; /// This reads plain text files class CoinPlainFileInput : public CoinFileInput { public: CoinPlainFileInput(const std::string &fileName); /// When already opened CoinPlainFileInput(FILE *fp); virtual ~CoinPlainFileInput(); virtual int read(void *buffer, int size); virtual char *gets(char *buffer, int size); private: FILE *f_; }; /// Abstract base class for file output classes. class CoinFileOutput : public CoinFileIOBase { public: /// The compression method. enum Compression { COMPRESS_NONE = 0, ///< No compression. COMPRESS_GZIP = 1, ///< gzip compression. COMPRESS_BZIP2 = 2 ///< bzip2 compression. }; /// Returns whether the specified compression method is supported /// (i.e. was compiled into COIN). static bool compressionSupported(Compression compression); /// Factory method, that creates a CoinFileOutput (more precisely /// a subclass of it) for the file specified. If the compression method /// is not supported an exception is thrown (so use compressionSupported /// first, if this is a problem). The reason for not providing direct /// access to the subclasses (and using such a method instead) is that /// depending on the build configuration some of the classes are not /// available (or functional). This way we can handle all required ifdefs /// here instead of polluting other files. /// @param fileName The file that should be read. /// @param compression Compression method used. static CoinFileOutput *create(const std::string &fileName, Compression compression); /// Constructor (don't use this, use the create method instead). /// @param fileName The name of the file used by this object. CoinFileOutput(const std::string &fileName); /// Destructor. virtual ~CoinFileOutput(); /// Write a block of data to the file, similar to fwrite. /// @param buffer Address of a buffer containing the data to be written. /// @param size Number of bytes to write. /// @return Number of bytes written. virtual int write(const void *buffer, int size) = 0; /// Write a string to the file (like fputs). /// Just as with fputs no trailing newline is inserted! /// The terminating '\0' is not written to the file. /// The default implementation determines the length of the string /// and calls write on it. /// @param s The zero terminated string to be written. /// @return true on success, false on error. virtual bool puts(const char *s); /// Convenience method: just a 'puts(s.c_str())'. inline bool puts(const std::string &s) { return puts(s.c_str()); } }; /*! \relates CoinFileInput \brief Test if the given string looks like an absolute file path The criteria are: - unix: string begins with `/' - windows: string begins with `\' or with `drv:' (drive specifier) */ bool fileAbsPath(const std::string &path); /*! \relates CoinFileInput \brief Test if the file is readable, using likely versions of the file name, and return the name that worked. The file name is constructed from \p name using the following rules:
  • An absolute path is not modified.
  • If the name begins with `~', an attempt is made to replace `~' with the value of the environment variable HOME.
  • If a default prefix (\p dfltPrefix) is provided, it is prepended to the name.
If the constructed file name cannot be opened, and CoinUtils was built with support for compressed files, fileCoinReadable will try any standard extensions for supported compressed files. The value returned in \p name is the file name that actually worked. */ bool fileCoinReadable(std::string &name, const std::string &dfltPrefix = std::string("")); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinOslFactorization3.cpp0000644000175200017520000025120013414454441020451 0ustar coincoin/* $Id: CoinOslFactorization3.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ /* Copyright (C) 1987, 2009, International Business Machines Corporation and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ #if COIN_BIG_INDEX == 0 #include "CoinOslFactorization.hpp" #include "CoinOslC.h" #include "CoinFinite.hpp" #define GO_DENSE 70 #define GO_DENSE_RATIO 1.8 int c_ekkclco(const EKKfactinfo *fact, int *hcoli, int *mrstrt, int *hinrow, int xnewro); void c_ekkclcp(const int *hcol, const double *dels, const int *mrstrt, int *hrow, double *dels2, int *mcstrt, int *hincol, int itype, int nnrow, int nncol, int ninbas); int c_ekkcmfc(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, EKKHlink *mwork, void *maction_void, int nnetas, int *nsingp, int *xrejctp, int *xnewrop, int xnewco, int *ncompactionsp); int c_ekkcmfy(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, EKKHlink *mwork, void *maction_void, int nnetas, int *nsingp, int *xrejctp, int *xnewrop, int xnewco, int *ncompactionsp); int c_ekkcmfd(EKKfactinfo *fact, int *mcol, EKKHlink *rlink, EKKHlink *clink, int *maction, int nnetas, int *nnentlp, int *nnentup, int *nsingp); int c_ekkford(const EKKfactinfo *fact, const int *hinrow, const int *hincol, int *hpivro, int *hpivco, EKKHlink *rlink, EKKHlink *clink); void c_ekkrowq(int *hrow, int *hcol, double *dels, int *mrstrt, const int *hinrow, int nnrow, int ninbas); int c_ekkrwco(const EKKfactinfo *fact, double *dluval, int *hcoli, int *mrstrt, int *hinrow, int xnewro); int c_ekkrwcs(const EKKfactinfo *fact, double *dluval, int *hcoli, int *mrstrt, const int *hinrow, const EKKHlink *mwork, int nfirst); void c_ekkrwct(const EKKfactinfo *fact, double *dluval, int *hcoli, int *mrstrt, const int *hinrow, const EKKHlink *mwork, const EKKHlink *rlink, const short *msort, double *dsort, int nlast, int xnewro); int c_ekkshff(EKKfactinfo *fact, EKKHlink *clink, EKKHlink *rlink, int xnewro); void c_ekkshfv(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, int xnewro); int c_ekktria(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, int *nsingp, int *xnewcop, int *xnewrop, int *nlrowtp, const int ninbas); #if 0 static void c_ekkafpv(int *hentry, int *hcoli, double *dluval, int *mrstrt, int *hinrow, int nentry) { int j; int nel, krs; int koff; int irow; int ientry; int * index; for (ientry = 0; ientry < nentry; ++ientry) { #ifdef INTEL int * els_long,maxaij_long; #endif double * els; irow = UNSHIFT_INDEX(hentry[ientry]); nel = hinrow[irow]; krs = mrstrt[irow]; index=&hcoli[krs]; els=&dluval[krs]; #ifdef INTEL els_long=reinterpret_cast (els); maxaij_long=0; #else double maxaij = 0.f; #endif koff = 0; j=0; if ((nel&1)!=0) { #ifdef INTEL maxaij_long = els_long[1] & 0x7fffffff; #else maxaij=fabs(els[0]); #endif j=1; } while (jxecadr; double *dluval = fact->xeeadr; //double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif const int nrow = fact->nrow; const double drtpiv = fact->drtpiv; int j, k, kc, kce, kcs, nzj; double pivot; int kipis, kipie; int jpivot; #ifndef NDEBUG int kpivot = -1; #else int kpivot = -1; #endif bool small_pivot = false; /* next singleton column. * Note that when the pivot column itself was removed from the * list, the column in the list after it (if any) moves to the * head of the list. * Also, if any column from the pivot row was reduced to length 1, * then it will have been added to the list and now be in front. */ for (jpivot = hpivco[1]; jpivot > 0; jpivot = hpivco[1]) { const int ipivot = hrowi[mcstrt[jpivot]]; /* (2) */ assert(ipivot); /* The pivot row is being eliminated (3) */ C_EKK_REMOVE_LINK(hpivro, hinrow, rlink, ipivot); /* Loop over nonzeros in pivot row: */ kipis = mrstrt[ipivot]; kipie = kipis + hinrow[ipivot] - 1; for (k = kipis; k <= kipie; ++k) { j = hcoli[k]; /* * We're eliminating column jpivot, * so we're eliminating the row it occurs in, * so every column in this row is becoming one shorter. * * I don't know why we don't do the same for rejected columns. * * if xrejct is false, then no column has ever been rejected * and this test wouldn't have to be made. * However, that means this whole loop would have to be copied. */ if (!(clink[j].pre > nrow)) { C_EKK_REMOVE_LINK(hpivco, hincol, clink, j); /* (3) */ } --hincol[j]; kcs = mcstrt[j]; kce = kcs + hincol[j]; for (kc = kcs; kc <= kce; ++kc) { if (ipivot == hrowi[kc]) { break; } } /* ASSERT !(kc>kce) */ /* (2) */ hrowi[kc] = hrowi[kce]; hrowi[kce] = 0; if (j == jpivot) { /* remember the slot corresponding to the pivot column */ kpivot = k; } else { /* * We just reduced the length of the column. * If we haven't eliminated all of its elements completely, * then we have to put it back in its new length list. * * If the column was rejected, we only put it back in a length * list when it has been reduced to a singleton column, * because it would just be rejected again. */ nzj = hincol[j]; if (!(nzj <= 0) && !(clink[j].pre > nrow && nzj != 1)) { C_EKK_ADD_LINK(hpivco, nzj, clink, j); /* (3) */ } } } assert(kpivot > 0); /* store pivot sequence number */ ++fact->npivots; rlink[ipivot].pre = -fact->npivots; clink[jpivot].pre = -fact->npivots; /* compute how much room we'll need later */ fact->nuspike += hinrow[ipivot]; /* check the pivot */ pivot = dluval[kpivot]; if (fabs(pivot) < drtpiv) { /* pivot element too small */ small_pivot = true; rlink[ipivot].pre = -nrow - 1; clink[jpivot].pre = -nrow - 1; ++(*nsingp); } /* swap the pivoted column entry with the first entry in the row */ dluval[kpivot] = dluval[kipis]; dluval[kipis] = pivot; hcoli[kpivot] = hcoli[kipis]; hcoli[kipis] = jpivot; } return (small_pivot); } /* c_ekkcsin */ /* Uwe H. Suhl, March 1987 */ /* This routine processes row singletons during the computation of */ /* an LU-decomposition for the nucleus. */ /* Return codes (checked version 1.16): */ /* -5: not enough space in row file */ /* -6: not enough space in column file */ /* 7: pivot element too small */ /* -52: system error at label 220 (ipivot not found) */ /* -53: system error at label 400 (jpivot not found) */ int c_ekkrsin(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, EKKHlink *mwork, int nfirst, int *nsingp, int *xnewcop, int *xnewrop, int *nnentup, int *kmxetap, int *ncompactionsp, int *nnentlp) { #if 1 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; //double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif const int nrow = fact->nrow; const double drtpiv = fact->drtpiv; int xnewro = *xnewrop; int xnewco = *xnewcop; int kmxeta = *kmxetap; int nnentu = *nnentup; int ncompactions = *ncompactionsp; int nnentl = *nnentlp; int i, j, k, kc, kr, npr, nzi; double pivot; int kjpis, kjpie, knprs, knpre; double elemnt, maxaij; int ipivot, epivco, lstart; #ifndef NDEBUG int kpivot = -1; #else int kpivot = -1; #endif int irtcod = 0; const int nnetas = fact->nnetas; lstart = nnetas - nnentl + 1; for (ipivot = hpivro[1]; ipivot > 0; ipivot = hpivro[1]) { const int jpivot = hcoli[mrstrt[ipivot]]; kjpis = mcstrt[jpivot]; kjpie = kjpis + hincol[jpivot]; for (k = kjpis; k < kjpie; ++k) { i = hrowi[k]; /* * We're eliminating row ipivot, * so we're eliminating the column it occurs in, * so every row in this column is becoming one shorter. * * No exception is made for rejected rows. */ C_EKK_REMOVE_LINK(hpivro, hinrow, rlink, i); } /* The pivot column is being eliminated */ /* I don't know why there is an exception for rejected columns */ if (!(clink[jpivot].pre > nrow)) { C_EKK_REMOVE_LINK(hpivco, hincol, clink, jpivot); } epivco = hincol[jpivot] - 1; kjpie = kjpis + epivco; for (kc = kjpis; kc <= kjpie; ++kc) { if (ipivot == hrowi[kc]) { break; } } /* ASSERT !(kc>kjpie) */ /* move the last column entry into this deleted one to keep */ /* the entries compact */ hrowi[kc] = hrowi[kjpie]; hrowi[kjpie] = 0; /* store pivot sequence number */ ++fact->npivots; rlink[ipivot].pre = -fact->npivots; clink[jpivot].pre = -fact->npivots; /* Check if row or column files have to be compressed */ if (!(xnewro + epivco < lstart)) { if (!(nnentu + epivco < lstart)) { return (-5); } { int iput = c_ekkrwcs(fact, dluval, hcoli, mrstrt, hinrow, mwork, nfirst); kmxeta += xnewro - iput; xnewro = iput - 1; ++ncompactions; } } if (!(xnewco + epivco < lstart)) { if (!(nnentu + epivco < lstart)) { return (-5); } xnewco = c_ekkclco(fact, hrowi, mcstrt, hincol, xnewco); ++ncompactions; } /* This column has no more entries in it */ hincol[jpivot] = 0; /* Perform numerical part of elimination. */ pivot = dluval[mrstrt[ipivot]]; if (fabs(pivot) < drtpiv) { irtcod = 7; rlink[ipivot].pre = -nrow - 1; clink[jpivot].pre = -nrow - 1; ++(*nsingp); } /* If epivco is 0, then we can treat this like a singleton column (?)*/ if (!(epivco <= 0)) { ++fact->xnetal; mcstrt[fact->xnetal] = lstart - 1; hpivco[fact->xnetal] = ipivot; /* Loop over nonzeros in pivot column. */ kjpis = mcstrt[jpivot]; kjpie = kjpis + epivco; nnentl += epivco; nnentu -= epivco; for (kc = kjpis; kc < kjpie; ++kc) { npr = hrowi[kc]; /* zero out the row entries as we go along */ hrowi[kc] = 0; /* each row in the column is getting shorter */ --hinrow[npr]; /* find the entry in this row for the pivot column */ knprs = mrstrt[npr]; knpre = knprs + hinrow[npr]; for (kr = knprs; kr <= knpre; ++kr) { if (jpivot == hcoli[kr]) break; } /* ASSERT !(kr>knpre) */ elemnt = dluval[kr]; /* move the last pivot column entry into this one */ /* to keep entries compact */ dluval[kr] = dluval[knpre]; hcoli[kr] = hcoli[knpre]; /* * c_ekkmltf put the largest entries in front, and * we want to maintain that property. * There is only a problem if we just pivoted out the first * entry, and there is more than one entry in the list. */ if (!(kr != knprs || hinrow[npr] <= 1)) { maxaij = 0.f; for (k = knprs; k <= knpre; ++k) { if (!(fabs(dluval[k]) <= maxaij)) { maxaij = fabs(dluval[k]); kpivot = k; } } assert(kpivot > 0); maxaij = dluval[kpivot]; dluval[kpivot] = dluval[knprs]; dluval[knprs] = maxaij; j = hcoli[kpivot]; hcoli[kpivot] = hcoli[knprs]; hcoli[knprs] = j; } /* store elementary row transformation */ --lstart; dluval[lstart] = -elemnt / pivot; hrowi[lstart] = SHIFT_INDEX(npr); /* Only add the row back in a length list if it isn't empty */ nzi = hinrow[npr]; if (!(nzi <= 0)) { C_EKK_ADD_LINK(hpivro, nzi, rlink, npr); } } ++fact->nuspike; } } *xnewrop = xnewro; *xnewcop = xnewco; *kmxetap = kmxeta; *nnentup = nnentu; *ncompactionsp = ncompactions; *nnentlp = nnentl; return (irtcod); } /* c_ekkrsin */ int c_ekkfpvt(const EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, int *nsingp, int *xrejctp, int *xipivtp, int *xjpivtp) { double zpivlu = fact->zpivlu; #if 1 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; //double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif int i, j, k, ke, kk, ks, nz, nz1, kce, kcs, kre, krs; double minsze; int marcst, mincst, mincnt, trials, nentri; int jpivot = -1; bool rjectd; int ipivot; const int nrow = fact->nrow; int irtcod = 0; /* this used to be initialized in c_ekklfct */ const int xtrial = 1; trials = 0; ipivot = 0; mincst = COIN_INT_MAX; mincnt = COIN_INT_MAX; for (nz = 2; nz <= nrow; ++nz) { nz1 = nz - 1; if (mincnt <= nz) { goto L900; } /* Search rows for a pivot */ for (i = hpivro[nz]; !(i <= 0); i = rlink[i].suc) { ks = mrstrt[i]; ke = ks + nz - 1; /* Determine magnitude of minimal acceptable element */ minsze = fabs(dluval[ks]) * zpivlu; for (k = ks; k <= ke; ++k) { /* Consider a column only if it passes the stability test */ if (!(fabs(dluval[k]) < minsze)) { j = hcoli[k]; marcst = nz1 * hincol[j]; if (!(marcst >= mincst)) { mincst = marcst; mincnt = hincol[j]; ipivot = i; jpivot = j; if (mincnt <= nz + 1) { goto L900; } } } } ++trials; if (trials >= xtrial) { goto L900; } } /* Search columns for a pivot */ j = hpivco[nz]; while (!(j <= 0)) { /* XSEARD = XSEARD + 1 */ rjectd = false; kcs = mcstrt[j]; kce = kcs + nz - 1; for (k = kcs; k <= kce; ++k) { i = hrowi[k]; nentri = hinrow[i]; marcst = nz1 * nentri; if (!(marcst >= mincst)) { /* Determine magnitude of minimal acceptable element */ minsze = fabs(dluval[mrstrt[i]]) * zpivlu; krs = mrstrt[i]; kre = krs + nentri - 1; for (kk = krs; kk <= kre; ++kk) { if (hcoli[kk] == j) break; } /* ASSERT (kk <= kre) */ /* perform stability test */ if (!(fabs(dluval[kk]) < minsze)) { mincst = marcst; mincnt = nentri; ipivot = i; jpivot = j; rjectd = false; if (mincnt <= nz) { goto L900; } } else { if (ipivot == 0) { rjectd = true; } } } } ++trials; if (trials >= xtrial && ipivot > 0) { goto L900; } if (rjectd) { int jsuc = clink[j].suc; ++(*xrejctp); C_EKK_REMOVE_LINK(hpivco, hincol, clink, j); clink[j].pre = nrow + 1; j = jsuc; } else { j = clink[j].suc; } } } /* FLAG REJECTED ROWS (should this be columns ?) */ for (j = 1; j <= nrow; ++j) { if (hinrow[j] == 0) { rlink[j].pre = -nrow - 1; ++(*nsingp); } } irtcod = 10; L900: *xipivtp = ipivot; *xjpivtp = jpivot; return (irtcod); } /* c_ekkfpvt */ void c_ekkprpv(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, int xrejct, int ipivot, int jpivot) { #if 1 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; //double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif int i, k; int kc; double pivot; int kipis = mrstrt[ipivot]; int kipie = kipis + hinrow[ipivot] - 1; #ifndef NDEBUG int kpivot = -1; #else int kpivot = -1; #endif const int nrow = fact->nrow; /* Update data structures */ { int kjpis = mcstrt[jpivot]; int kjpie = kjpis + hincol[jpivot]; for (k = kjpis; k < kjpie; ++k) { i = hrowi[k]; C_EKK_REMOVE_LINK(hpivro, hinrow, rlink, i); } } for (k = kipis; k <= kipie; ++k) { int j = hcoli[k]; if ((xrejct == 0) || !(clink[j].pre > nrow)) { C_EKK_REMOVE_LINK(hpivco, hincol, clink, j); } --hincol[j]; int kcs = mcstrt[j]; int kce = kcs + hincol[j]; for (kc = kcs; kc < kce; kc++) { if (hrowi[kc] == ipivot) break; } assert(kc < kce || hrowi[kce] == ipivot); hrowi[kc] = hrowi[kce]; hrowi[kce] = 0; if (j == jpivot) { kpivot = k; } } assert(kpivot > 0); /* Store the pivot sequence number */ ++fact->npivots; rlink[ipivot].pre = -fact->npivots; clink[jpivot].pre = -fact->npivots; pivot = dluval[kpivot]; dluval[kpivot] = dluval[kipis]; dluval[kipis] = pivot; hcoli[kpivot] = hcoli[kipis]; hcoli[kipis] = jpivot; } /* c_ekkprpv */ /* * c_ekkclco is almost exactly like c_ekkrwco. */ int c_ekkclco(const EKKfactinfo *fact, int *hcoli, int *mrstrt, int *hinrow, int xnewro) { #if 0 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif int i, k, nz, kold; int kstart; const int nrow = fact->nrow; for (i = 1; i <= nrow; ++i) { nz = hinrow[i]; if (0 < nz) { /* save the last column entry of row i in hinrow */ /* and replace that entry with -i */ k = mrstrt[i] + nz - 1; hinrow[i] = hcoli[k]; hcoli[k] = -i; } } kstart = 0; kold = 0; for (k = 1; k <= xnewro; ++k) { if (hcoli[k] != 0) { ++kstart; /* if this is the last entry for the row... */ if (hcoli[k] < 0) { /* restore the entry */ i = -hcoli[k]; hcoli[k] = hinrow[i]; /* update mrstart and hinrow */ mrstrt[i] = kold + 1; hinrow[i] = kstart - kold; kold = kstart; } hcoli[kstart] = hcoli[k]; } } /* INSERTED INCASE CALLED FROM YTRIAN JJHF */ mrstrt[nrow + 1] = kstart + 1; return (kstart); } /* c_ekkclco */ #undef MACTION_T #define COIN_OSL_CMFC #define MACTION_T short int int c_ekkcmfc(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, EKKHlink *mwork, void *maction_void, int nnetas, int *nsingp, int *xrejctp, int *xnewrop, int xnewco, int *ncompactionsp) #include "CoinOslC.h" #undef COIN_OSL_CMFC #undef MACTION_T static int c_ekkidmx(int n, const double *dx) { int ret_val; int i; double dmax; --dx; /* Function Body */ if (n < 1) { return (0); } if (n == 1) { return (1); } ret_val = 1; dmax = fabs(dx[1]); for (i = 2; i <= n; ++i) { if (fabs(dx[i]) > dmax) { ret_val = i; dmax = fabs(dx[i]); } } return ret_val; } /* c_ekkidmx */ /* Return codes in IRTCOD/IRTCOD are */ /* 4: numerical problems */ /* 5: not enough space in row file */ /* 6: not enough space in column file */ int c_ekkcmfd(EKKfactinfo *fact, int *mcol, EKKHlink *rlink, EKKHlink *clink, int *maction, int nnetas, int *nnentlp, int *nnentup, int *nsingp) { int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; int nnentl = *nnentlp; int nnentu = *nnentup; int storeZero = fact->ndenuc; int mkrs[8]; double dpivyy[8]; /* Local variables */ int i, j; double d0, dx; int nz, ndo, krs; int kend, jcol; int irow, iput, jrow, krxs; int mjcol[8]; double pivot; int count; int ilast, isort; double dpivx, dsave; double dpivxx[8]; double multip; int lstart, ndense, krlast, kcount, idense, ipivot, jdense, kchunk, jpivot; const int nrow = fact->nrow; int irtcod = 0; lstart = nnetas - nnentl + 1; /* put list of columns in last HROWI */ /* fix row order once for all */ ndense = nrow - fact->npivots; iput = ndense + 1; for (i = 1; i <= nrow; ++i) { if (hpivro[i] > 0) { irow = hpivro[i]; for (j = 1; j <= nrow; ++j) { --iput; maction[iput] = irow; irow = rlink[irow].suc; if (irow == 0) { break; } } } } if (iput != 1) { ++(*nsingp); } else { /* Use HCOLI just for last row */ ilast = maction[1]; krlast = mrstrt[ilast]; /* put list of columns in last HCOLI */ iput = 0; for (i = 1; i <= nrow; ++i) { if (clink[i].pre >= 0) { hcoli[krlast + iput] = i; ++iput; } } if (iput != ndense) { ++(*nsingp); } else { ndo = ndense / 8; /* do most */ for (kcount = 1; kcount <= ndo; ++kcount) { idense = ndense; isort = 8; for (count = ndense; count >= ndense - 7; --count) { ipivot = maction[count]; krs = mrstrt[ipivot]; --isort; mkrs[isort] = krs; } isort = 8; for (count = ndense; count >= ndense - 7; --count) { /* Find a pivot element */ --isort; ipivot = maction[count]; krs = mkrs[isort]; jcol = c_ekkidmx(idense, &dluval[krs]) - 1; pivot = dluval[krs + jcol]; --idense; mcol[count] = jcol; mjcol[isort] = mcol[count]; dluval[krs + jcol] = dluval[krs + idense]; if (fabs(pivot) < fact->zeroTolerance) { pivot = 0.; dpivx = 0.; } else { dpivx = 1. / pivot; } dluval[krs + idense] = pivot; dpivxx[isort] = dpivx; for (j = isort - 1; j >= 0; --j) { krxs = mkrs[j]; multip = -dluval[krxs + jcol] * dpivx; dluval[krxs + jcol] = dluval[krxs + idense]; /* for moment skip if zero */ if (fabs(multip) > fact->zeroTolerance) { for (i = 0; i < idense; ++i) { dluval[krxs + i] += multip * dluval[krs + i]; } } else { multip = 0.; } dluval[krxs + idense] = multip; } } /* sort all U in rows already done */ for (i = 7; i >= 0; --i) { /* **** this is important bit */ krs = mkrs[i]; for (j = i - 1; j >= 0; --j) { jcol = mjcol[j]; dsave = dluval[krs + jcol]; dluval[krs + jcol] = dluval[krs + idense + j]; dluval[krs + idense + j] = dsave; } } /* leave IDENSE as it is */ if (ndense <= 400) { for (jrow = ndense - 8; jrow >= 1; --jrow) { irow = maction[jrow]; krxs = mrstrt[irow]; for (j = 7; j >= 0; --j) { jcol = mjcol[j]; dsave = dluval[krxs + jcol]; dluval[krxs + jcol] = dluval[krxs + idense + j]; dluval[krxs + idense + j] = dsave; } for (j = 7; j >= 0; --j) { krs = mkrs[j]; jdense = idense + j; dpivx = dpivxx[j]; multip = -dluval[krxs + jdense] * dpivx; if (fabs(multip) <= fact->zeroTolerance) { multip = 0.; } dpivyy[j] = multip; dluval[krxs + jdense] = multip; for (i = idense; i < jdense; ++i) { dluval[krxs + i] += multip * dluval[krs + i]; } } for (i = 0; i < idense; ++i) { dx = dluval[krxs + i]; d0 = dpivyy[0] * dluval[mkrs[0] + i]; dx += dpivyy[1] * dluval[mkrs[1] + i]; d0 += dpivyy[2] * dluval[mkrs[2] + i]; dx += dpivyy[3] * dluval[mkrs[3] + i]; d0 += dpivyy[4] * dluval[mkrs[4] + i]; dx += dpivyy[5] * dluval[mkrs[5] + i]; d0 += dpivyy[6] * dluval[mkrs[6] + i]; dx += dpivyy[7] * dluval[mkrs[7] + i]; dluval[krxs + i] = d0 + dx; } } } else { for (jrow = ndense - 8; jrow >= 1; --jrow) { irow = maction[jrow]; krxs = mrstrt[irow]; for (j = 7; j >= 0; --j) { jcol = mjcol[j]; dsave = dluval[krxs + jcol]; dluval[krxs + jcol] = dluval[krxs + idense + j]; dluval[krxs + idense + j] = dsave; } for (j = 7; j >= 0; --j) { krs = mkrs[j]; jdense = idense + j; dpivx = dpivxx[j]; multip = -dluval[krxs + jdense] * dpivx; if (fabs(multip) <= fact->zeroTolerance) { multip = 0.; } dluval[krxs + jdense] = multip; for (i = idense; i < jdense; ++i) { dluval[krxs + i] += multip * dluval[krs + i]; } } } for (kchunk = 0; kchunk < idense; kchunk += 400) { kend = CoinMin(idense - 1, kchunk + 399); for (jrow = ndense - 8; jrow >= 1; --jrow) { irow = maction[jrow]; krxs = mrstrt[irow]; for (j = 7; j >= 0; --j) { dpivyy[j] = dluval[krxs + idense + j]; } for (i = kchunk; i <= kend; ++i) { dx = dluval[krxs + i]; d0 = dpivyy[0] * dluval[mkrs[0] + i]; dx += dpivyy[1] * dluval[mkrs[1] + i]; d0 += dpivyy[2] * dluval[mkrs[2] + i]; dx += dpivyy[3] * dluval[mkrs[3] + i]; d0 += dpivyy[4] * dluval[mkrs[4] + i]; dx += dpivyy[5] * dluval[mkrs[5] + i]; d0 += dpivyy[6] * dluval[mkrs[6] + i]; dx += dpivyy[7] * dluval[mkrs[7] + i]; dluval[krxs + i] = d0 + dx; } } } } /* resort all U in rows already done */ for (i = 7; i >= 0; --i) { krs = mkrs[i]; for (j = 0; j < i; ++j) { jcol = mjcol[j]; dsave = dluval[krs + jcol]; dluval[krs + jcol] = dluval[krs + idense + j]; dluval[krs + idense + j] = dsave; } } ndense += -8; } idense = ndense; /* do remainder */ for (count = ndense; count >= 1; --count) { /* Find a pivot element */ ipivot = maction[count]; krs = mrstrt[ipivot]; jcol = c_ekkidmx(idense, &dluval[krs]) - 1; pivot = dluval[krs + jcol]; --idense; mcol[count] = jcol; dluval[krs + jcol] = dluval[krs + idense]; if (fabs(pivot) < fact->zeroTolerance) { dluval[krs + idense] = 0.; } else { dpivx = 1. / pivot; dluval[krs + idense] = pivot; for (jrow = idense; jrow >= 1; --jrow) { irow = maction[jrow]; krxs = mrstrt[irow]; multip = -dluval[krxs + jcol] * dpivx; dluval[krxs + jcol] = dluval[krxs + idense]; /* for moment skip if zero */ if (fabs(multip) > fact->zeroTolerance) { dluval[krxs + idense] = multip; for (i = 0; i < idense; ++i) { dluval[krxs + i] += multip * dluval[krs + i]; } } else { dluval[krxs + idense] = 0.; } } } } /* now create in form for OSL */ ndense = nrow - fact->npivots; idense = ndense; for (count = ndense; count >= 1; --count) { /* Find a pivot element */ ipivot = maction[count]; krs = mrstrt[ipivot]; --idense; jcol = mcol[count]; jpivot = hcoli[krlast + jcol]; ++fact->npivots; pivot = dluval[krs + idense]; if (pivot == 0.) { hinrow[ipivot] = 0; rlink[ipivot].pre = -nrow - 1; ++(*nsingp); irtcod = 10; } else { rlink[ipivot].pre = -fact->npivots; clink[jpivot].pre = -fact->npivots; hincol[jpivot] = 0; ++fact->xnetal; mcstrt[fact->xnetal] = lstart - 1; hpivco[fact->xnetal] = ipivot; for (jrow = idense; jrow >= 1; --jrow) { irow = maction[jrow]; krxs = mrstrt[irow]; multip = dluval[krxs + idense]; /* for moment skip if zero */ if (multip != 0. || storeZero) { /* Store elementary row transformation */ ++nnentl; --nnentu; --lstart; dluval[lstart] = multip; hrowi[lstart] = SHIFT_INDEX(irow); } } hcoli[krlast + jcol] = hcoli[krlast + idense]; /* update pivot row and last row HCOLI */ dluval[krs + idense] = dluval[krs]; hcoli[krlast + idense] = hcoli[krlast]; nz = 1; dluval[krs] = pivot; hcoli[krs] = jpivot; if (!storeZero) { for (i = 1; i <= idense; ++i) { if (fabs(dluval[krs + i]) > fact->zeroTolerance) { ++nz; hcoli[krs + nz - 1] = hcoli[krlast + i]; dluval[krs + nz - 1] = dluval[krs + i]; } } hinrow[ipivot] = nz; } else { for (i = 1; i <= idense; ++i) { ++nz; hcoli[krs + nz - 1] = hcoli[krlast + i]; dluval[krs + nz - 1] = dluval[krs + i]; } hinrow[ipivot] = nz; } } } } } *nnentlp = nnentl; *nnentup = nnentu; return (irtcod); } /* c_ekkcmfd */ /* ***C_EKKCMFC */ /* * Generate a variant of c_ekkcmfc that uses an maction array of type * int rather than short. */ #undef MACTION_T #define C_EKKCMFY #define COIN_OSL_CMFC #define MACTION_T int int c_ekkcmfy(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, EKKHlink *mwork, void *maction_void, int nnetas, int *nsingp, int *xrejctp, int *xnewrop, int xnewco, int *ncompactionsp) #include "CoinOslC.h" #undef COIN_OSL_CMFC #undef C_EKKCMFY #undef MACTION_T int c_ekkford(const EKKfactinfo *fact, const int *hinrow, const int *hincol, int *hpivro, int *hpivco, EKKHlink *rlink, EKKHlink *clink) { int i, iri, nzi; const int nrow = fact->nrow; int nsing = 0; /* Uwe H. Suhl, August 1986 */ /* Builds linked lists of rows and cols of nucleus for efficient */ /* pivot searching. */ memset(hpivro + 1, 0, nrow * sizeof(int)); memset(hpivco + 1, 0, nrow * sizeof(int)); for (i = 1; i <= nrow; ++i) { //hpivro[i] = 0; //hpivco[i] = 0; assert(rlink[i].suc == 0); assert(clink[i].suc == 0); } /* Generate double linked list of rows having equal numbers of */ /* nonzeros in each row. Skip pivotal rows. */ for (i = 1; i <= nrow; ++i) { if (!(rlink[i].pre < 0)) { nzi = hinrow[i]; if (nzi <= 0) { ++nsing; rlink[i].pre = -nrow - 1; } else { iri = hpivro[nzi]; hpivro[nzi] = i; rlink[i].suc = iri; rlink[i].pre = 0; if (iri != 0) { rlink[iri].pre = i; } } } } /* Generate double linked list of cols having equal numbers of */ /* nonzeros in each col. Skip pivotal cols. */ for (i = 1; i <= nrow; ++i) { if (!(clink[i].pre < 0)) { nzi = hincol[i]; if (nzi <= 0) { ++nsing; clink[i].pre = -nrow - 1; } else { iri = hpivco[nzi]; hpivco[nzi] = i; clink[i].suc = iri; clink[i].pre = 0; if (iri != 0) { clink[iri].pre = i; } } } } return (nsing); } /* c_ekkford */ /* c version of OSL from 36100 */ /* Assumes that a basis exists in correct form */ /* Calls Uwe's routines (approximately) */ /* Then if OK shuffles U into column order */ /* Return codes: */ /* 0: everything ok */ /* 1: everything ok but performance would be better if more space */ /* would be make available */ /* 4: growth rate of element in U too big */ /* 5: not enough space in row file */ /* 6: not enough space in column file */ /* 7: pivot too small - col sing */ /* 8: pivot too small - row sing */ /* 10: matrix is singular */ /* I suspect c_ekklfct never returns 1 */ /* * layout of data * * dluval/hcoli: (L^-1)B - hole - L factors * * The L factors are written from high to low, starting from nnetas. * There are nnentl factors in L. lstart the next entry to use for the * L factors. Eventually, (L^-1)B turns into U. * The ninbas coefficients of matrix B are originally in the start of * dluval/hcoli. As L transforms it, rows may have to be expanded. * If there is room, they are copied to the start of the hole, * otherwise the first part of this area is compacted, and hopefully * there is then room. * There are nnentu coefficients in (L^-1)B. * nnentu + nnentl >= ninbas. * nnentu + nnentl == ninbas if there has been no fill-in. * nnentu is decreased when the pivot eliminates elements * (in which case there is a corresponding increase in nnentl), * and if pivoting happens to cancel out factors (in which case * there is no corresponding increase in L). * nnentu is increased if there is fill-in (no decrease in L). * If nnentu + nnentl >= nnetas, then we've run out of room. * It is not the case that the elements of (L^-1)B are all in the * first nnentu positions of dluval/hcoli, but that is of course * the lower bound on the number of positions needed to store it. * nuspik is roughly the sum of the row lengths of the rows that were pivoted * out. singleton rows in c_ekktria do not change nuspik, but * c_ekkrsin does increment it for each singleton row. * That is, there are nuspik elements that in the upper part of (L^-1)B, * and (nnentu - nuspik) elements left in B. */ /* * As part of factorization, we test candidate pivots for numerical * stability; if the largest element in a row/col is much larger than * the smallest, this generally causes problems. To easily determine * what the largest element is, we ensure that it is always in front. * This establishes this property; later on we take steps to preserve it. */ static void c_ekkmltf(const EKKfactinfo *fact, double *dluval, int *hcoli, const int *mrstrt, const int *hinrow, const EKKHlink *rlink) { #if 0 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif int i, j, k; int koff = -1; const int nrow = fact->nrow; for (i = 1; i <= nrow; ++i) { /* ignore rows that have already been pivoted */ /* if it is a singleton row, the property trivially holds */ if (!(rlink[i].pre < 0 || hinrow[i] <= 1)) { const int krs = mrstrt[i]; const int kre = krs + hinrow[i] - 1; double maxaij = 0.f; /* this assumes that at least one of the dluvals is non-zero. */ for (k = krs; k <= kre; ++k) { if (!(fabs(dluval[k]) <= maxaij)) { maxaij = fabs(dluval[k]); koff = k; } } assert(koff > 0); maxaij = dluval[koff]; j = hcoli[koff]; dluval[koff] = dluval[krs]; hcoli[koff] = hcoli[krs]; dluval[krs] = maxaij; hcoli[krs] = j; } } } /* c_ekkmltf */ int c_ekklfct(register EKKfactinfo *fact) { const int nrow = fact->nrow; int ninbas = fact->xcsadr[nrow + 1] - 1; int ifvsol = fact->ifvsol; int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; EKKHlink *rlink = fact->kp1adr; EKKHlink *clink = fact->kp2adr; EKKHlink *mwork = (reinterpret_cast< EKKHlink * >(fact->kw1adr)) - 1; int nsing, kdnspt, xnewro, xnewco; int i; int xrejct; int irtcod; const int nnetas = fact->nnetas; int ncompactions; double save_drtpiv = fact->drtpiv; double save_zpivlu = fact->zpivlu; if (ifvsol > 0 && fact->invok < 0) { fact->zpivlu = CoinMin(0.9, fact->zpivlu * 10.); fact->drtpiv = 1.0e-8; } rlink--; clink--; /* Function Body */ hcoli[nnetas] = 1; hrowi[nnetas] = 1; dluval[nnetas] = 0.0; /* set amount of work */ xrejct = 0; nsing = 0; kdnspt = nnetas + 1; fact->ndenuc = 0; /* Triangularize */ irtcod = c_ekktria(fact, rlink, clink, &nsing, &xnewco, &xnewro, &ncompactions, ninbas); fact->nnentl = ninbas - fact->nnentu; if (irtcod < 0) { /* no space or system error */ goto L8000; } if (irtcod != 0 && fact->invok >= 0) { goto L8500; /* 7 or 8 - pivot too small */ } #if 0 /* is this necessary ? */ lstart = nnetas - fact->nnentl + 1; for (i = lstart; i <= nnetas; ++i) { hrowi[i] = (hcoli[i] << 3); } #endif /* See if finished */ if (!(fact->npivots >= nrow)) { int nsing1; /* No - do nucleus */ nsing1 = c_ekkford(fact, hinrow, hincol, hpivro, hpivco, rlink, clink); nsing += nsing1; if (nsing1 != 0 && fact->invok >= 0) { irtcod = 7; goto L8500; } c_ekkmltf(fact, dluval, hcoli, mrstrt, hinrow, rlink); { bool callcmfy = false; if (nrow > 32767) { int count = 0; for (i = 1; i <= nrow; ++i) { count = CoinMax(count, hinrow[i]); } if (count + nrow - fact->npivots > 32767) { /* will have to use I*4 version of CMFC */ /* no changes to pointer params */ callcmfy = true; } } irtcod = (callcmfy ? c_ekkcmfy : c_ekkcmfc)(fact, rlink, clink, mwork, &mwork[nrow + 1], nnetas, &nsing, &xrejct, &xnewro, xnewco, &ncompactions); /* irtcod one of 0,-5,7,10 */ } if (irtcod < 0) { goto L8000; } kdnspt = nnetas - fact->nnentl; } /* return if error */ if (nsing > 0 || irtcod == 10) { irtcod = 99; } /* irtcod one of 0,7,99 */ if (irtcod != 0) { goto L8500; } ++fact->xnetal; mcstrt[fact->xnetal] = nnetas - fact->nnentl; /* give message if tight on memory */ if (ncompactions > 2) { if (1) { int etasize = CoinMax(4 * fact->nnentu + (nnetas - fact->nnentl) + 1000, fact->eta_size); fact->eta_size = CoinMin(static_cast< int >(1.2 * fact->eta_size), etasize); if (fact->maxNNetas > 0 && fact->eta_size > fact->maxNNetas) { fact->eta_size = fact->maxNNetas; } } /* endif */ } /* Shuffle U and multiply L by 8 (if assembler) */ { int jrtcod = c_ekkshff(fact, clink, rlink, xnewro); /* nR_etas is the number of R transforms; * it is incremented only in c_ekketsj. */ fact->nR_etas = 0; /*fact->R_etas_start = mcstrt+nrow+fact->nnentl+3;*/ fact->R_etas_start[1] = /*kdnspt - 1*/ 0; /* magic */ fact->R_etas_index = &fact->xeradr[kdnspt - 1]; fact->R_etas_element = &fact->xeeadr[kdnspt - 1]; if (jrtcod != 0) { irtcod = jrtcod; /* irtcod == 2 */ } } goto L8500; /* Fatal error */ L8000: if (1) { if (fact->maxNNetas != fact->eta_size && nnetas) { /* return and get more space */ /* double eta_size, unless that exceeds max (if there is one) */ fact->eta_size = fact->eta_size << 1; if (fact->maxNNetas > 0 && fact->eta_size > fact->maxNNetas) { fact->eta_size = fact->maxNNetas; } return (5); } } /*c_ekkmesg_no_i1(121, -irtcod);*/ irtcod = 3; L8500: /* restore pivot tolerance */ fact->drtpiv = save_drtpiv; fact->zpivlu = save_zpivlu; #ifndef NDEBUG if (fact->rows_ok) { int *hinrow = fact->xrnadr; if (!fact->xe2adr) { for (int i = 1; i <= fact->nrow; i++) { assert(hinrow[i] >= 0 && hinrow[i] <= fact->nrow); } } } #endif return (irtcod); } /* c_ekklfct */ /* summary of return codes c_ekktria: 7 small pivot -5 no memory c_ekkcsin: returns true if small pivot c_ekkrsin: -5 no memory 7 small pivot c_ekkfpvt: 10: no pivots found (singular) c_ekkcmfd: 10: zero pivot (not just small) c_ekkcmfc: -5: no memory any non-zero code from c_ekkcsin, c_ekkrsin, c_ekkfpvt, c_ekkprpv, c_ekkcmfd c_ekkshff: 2: singular c_ekklfct: any positive code from c_ekktria, c_ekkcmfc, c_ekkshff (2,7,10) *except* 10, which is changed to 99. all negative return codes are changed to 5 or 3 (5 == ran out of memory but could get more, 3 == ran out of memory, no luck) so: 2,3,5,7,99 c_ekklfct1: 1: c_ekksmem_invert failed 2: c_ekkslcf/c_ekkslct ran out of room any return code from c_ekklfct, except 2 and 5 */ void c_ekkrowq(int *hrow, int *hcol, double *dels, int *mrstrt, const int *hinrow, int nnrow, int ninbas) { int i, k, iak, jak; double daik; int iloc; double dsave; int isave, jsave; /* Order matrix rowwise using MRSTRT, DELS, HCOL */ k = 1; /* POSITION AFTER END OF ROW */ for (i = 1; i <= nnrow; ++i) { k += hinrow[i]; mrstrt[i] = k; } for (k = ninbas; k >= 1; --k) { iak = hrow[k]; if (iak != 0) { daik = dels[k]; jak = hcol[k]; hrow[k] = 0; while (1) { --mrstrt[iak]; iloc = mrstrt[iak]; dsave = dels[iloc]; isave = hrow[iloc]; jsave = hcol[iloc]; dels[iloc] = daik; hrow[iloc] = 0; hcol[iloc] = jak; if (isave == 0) break; daik = dsave; iak = isave; jak = jsave; } } } } /* c_ekkrowq */ int c_ekkrwco(const EKKfactinfo *fact, double *dluval, int *hcoli, int *mrstrt, int *hinrow, int xnewro) { int i, k, nz, kold; int kstart; const int nrow = fact->nrow; for (i = 1; i <= nrow; ++i) { nz = hinrow[i]; if (0 < nz) { /* save the last column entry of row i in hinrow */ /* and replace that entry with -i */ k = mrstrt[i] + nz - 1; hinrow[i] = hcoli[k]; hcoli[k] = -i; } } kstart = 0; kold = 0; for (k = 1; k <= xnewro; ++k) { if (hcoli[k] != 0) { ++kstart; /* if this is the last entry for the row... */ if (hcoli[k] < 0) { /* restore the entry */ i = -hcoli[k]; hcoli[k] = hinrow[i]; /* update mrstart and hinrow */ /* ACTUALLY, hinrow should already be accurate */ mrstrt[i] = kold + 1; hinrow[i] = kstart - kold; kold = kstart; } /* move the entry */ dluval[kstart] = dluval[k]; hcoli[kstart] = hcoli[k]; } } return (kstart); } /* c_ekkrwco */ int c_ekkrwcs(const EKKfactinfo *fact, double *dluval, int *hcoli, int *mrstrt, const int *hinrow, const EKKHlink *mwork, int nfirst) { #if 0 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif int i, k, k1, k2, nz; int irow, iput; const int nrow = fact->nrow; /* Compress row file */ iput = 1; irow = nfirst; for (i = 1; i <= nrow; ++i) { nz = hinrow[irow]; k1 = mrstrt[irow]; if (k1 != iput) { mrstrt[irow] = iput; k2 = k1 + nz - 1; for (k = k1; k <= k2; ++k) { dluval[iput] = dluval[k]; hcoli[iput] = hcoli[k]; ++iput; } } else { iput += nz; } irow = mwork[irow].suc; } return (iput); } /* c_ekkrwcs */ void c_ekkrwct(const EKKfactinfo *fact, double *dluval, int *hcoli, int *mrstrt, const int *hinrow, const EKKHlink *mwork, const EKKHlink *rlink, const short *msort, double *dsort, int nlast, int xnewro) { #if 0 int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; #endif int i, k, k1, nz, icol; int kmax; int irow, iput; int ilook; const int nrow = fact->nrow; iput = xnewro; irow = nlast; kmax = nrow - fact->npivots; for (i = 1; i <= nrow; ++i) { nz = hinrow[irow]; k1 = mrstrt[irow] - 1; if (rlink[irow].pre < 0) { /* pivoted on already */ iput -= nz; if (k1 != iput) { mrstrt[irow] = iput + 1; for (k = nz; k >= 1; --k) { dluval[iput + k] = dluval[k1 + k]; hcoli[iput + k] = hcoli[k1 + k]; } } } else { /* not pivoted - going dense */ iput -= kmax; mrstrt[irow] = iput + 1; c_ekkdzero(kmax, &dsort[1]); for (k = 1; k <= nz; ++k) { icol = hcoli[k1 + k]; ilook = msort[icol]; dsort[ilook] = dluval[k1 + k]; } c_ekkdcpy(kmax, (dsort + 1), (dluval + iput + 1)); } irow = mwork[irow].pre; } } /* c_ekkrwct */ /* takes Uwe's modern structures and puts them back 20 years */ int c_ekkshff(EKKfactinfo *fact, EKKHlink *clink, EKKHlink *rlink, int xnewro) { int *hpivro = fact->krpadr; int i, j; int nbas, icol; int ipiv; const int nrow = fact->nrow; int nsing; for (i = 1; i <= nrow; ++i) { j = -rlink[i].pre; rlink[i].pre = j; if (j > 0 && j <= nrow) { hpivro[j] = i; } j = -clink[i].pre; clink[i].pre = j; } /* hpivro[j] is now (hopefully) the row that was pivoted on step j */ /* rlink[i].pre is the step in which row i was pivoted */ nbas = 0; nsing = 0; /* Decide if permutation wanted */ fact->first_dense = nrow - fact->ndenuc + 1 + 1; fact->last_dense = nrow; /* rlink[].suc is dead at this point */ /* * replace the the basis index * with the pivot (or permuted) index generated by factorization. * This eventually goes into mpermu. */ for (icol = 1; icol <= nrow; ++icol) { int ibasis = icol; ipiv = clink[ibasis].pre; if (0 < ipiv && ipiv <= nrow) { rlink[ibasis].suc = ipiv; ++nbas; } } nsing = nrow - nbas; if (nsing > 0) { abort(); } /* if we reach here, then rlink[1..nrow].suc == clink[1..nrow].pre */ /* switch off sparse update if any dense section */ { const int notMuchRoom = (fact->nnentu + xnewro + 10 > fact->nnetas - fact->nnentl); /* must be same as in c_ekkshfv */ if (fact->ndenuc || notMuchRoom || nrow < C_EKK_GO_SPARSE) { #if PRINT_DEBUG if (fact->if_sparse_update) { printf("**** Switching off sparse update - dense - c_ekkshff\n"); } #endif fact->if_sparse_update = 0; } } /* hpivro[1..nrow] is not read by c_ekkshfv */ c_ekkshfv(fact, rlink, clink, xnewro); return (0); } /* c_ekkshff */ /* sorts on indices dragging elements with */ static void c_ekk_sort2(int *key, double *array2, int number) { int minsize = 10; int n = number; int sp; int *v = key; int *m, t; int *ls[32], *rs[32]; int *l, *r, c; double it; int j; /*check already sorted */ #ifndef LONG_MAX #define LONG_MAX 0x7fffffff; #endif int last = -LONG_MAX; for (j = 0; j < number; j++) { if (key[j] >= last) { last = key[j]; } else { break; } /* endif */ } /* endfor */ if (j == number) { return; } /* endif */ sp = 0; ls[sp] = v; rs[sp] = v + (n - 1); while (sp >= 0) { if (rs[sp] - ls[sp] > minsize) { l = ls[sp]; r = rs[sp]; m = l + (r - l) / 2; if (*l > *m) { t = *l; *l = *m; *m = t; it = array2[l - v]; array2[l - v] = array2[m - v]; array2[m - v] = it; } if (*m > *r) { t = *m; *m = *r; *r = t; it = array2[m - v]; array2[m - v] = array2[r - v]; array2[r - v] = it; if (*l > *m) { t = *l; *l = *m; *m = t; it = array2[l - v]; array2[l - v] = array2[m - v]; array2[m - v] = it; } } c = *m; while (r - l > 1) { while (*(++l) < c) ; while (*(--r) > c) ; t = *l; *l = *r; *r = t; it = array2[l - v]; array2[l - v] = array2[r - v]; array2[r - v] = it; } l = r - 1; if (l < m) { ls[sp + 1] = ls[sp]; rs[sp + 1] = l; ls[sp] = r; } else { ls[sp + 1] = r; rs[sp + 1] = rs[sp]; rs[sp] = l; } sp++; } else sp--; } for (l = v, m = v + (n - 1); l < m; l++) { if (*l > *(l + 1)) { c = *(l + 1); it = array2[(l - v) + 1]; for (r = l; r >= v && *r > c; r--) { *(r + 1) = *r; array2[(r - v) + 1] = array2[(r - v)]; } *(r + 1) = c; array2[(r - v) + 1] = it; } } } /* For each row compute reciprocal of pivot element and take out of */ /* Also use HLINK(1 to permute column numbers */ /* and HPIVRO to permute row numbers */ /* Sort into column order as was stored by row */ /* If Assembler then shift row numbers in L by 3 */ /* Put column numbers in U for L-U update */ /* and multiply U elements by - reciprocal of pivot element */ /* and set up backward pointers for pivot rows */ void c_ekkshfv(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, int xnewro) { int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; double *dvalpv = fact->kw3adr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *hpivro = fact->krpadr; int *hpivco = fact->kcpadr; double *dpermu = fact->kadrpm; double *de2val = fact->xe2adr ? fact->xe2adr - 1 : 0; int nnentu = fact->nnentu; int xnetal = fact->xnetal; int numberSlacks; /* numberSlacks not read */ int i, j, k, kk, nel; int nroom; bool need_more_space; int ndenuc = fact->ndenuc; int if_sparse_update = fact->if_sparse_update; int nnentl = fact->nnentl; int nnetas = fact->nnetas; int *ihlink = (reinterpret_cast< int * >(clink)) + 1; /* can't use rlink for simple loop below */ const int nrow = fact->nrow; const int maxinv = fact->maxinv; /* this is not just a temporary - c_ekkbtrn etc use this */ int *mpermu = (reinterpret_cast< int * >(dpermu + nrow)) + 1; int *temp = ihlink + nrow; int *temp2 = temp + nrow; const int notMuchRoom = (nnentu + xnewro + 10 > nnetas - nnentl); /* compress hlink and make simpler */ for (i = 1; i <= nrow; ++i) { mpermu[i] = rlink[i].pre; ihlink[i] = rlink[i].suc; } /* mpermu[i] == the step in which row i was pivoted */ /* ihlink[i] == the step in which col i was pivoted */ /* must be same as in c_ekkshff */ if (fact->ndenuc || notMuchRoom || nrow < C_EKK_GO_SPARSE) { int ninbas; /* CHANGE COLUMN NUMBERS AND FILL IN RECIPROCALS */ /* ALSO RECOMPUTE NUMBER IN COLUMN */ /* initialize with a fake pivot in each column */ c_ekkscpy_0_1(nrow, 1, &hincol[1]); if (notMuchRoom) { fact->eta_size = static_cast< int >(1.05 * fact->eta_size); /* eta_size can be no larger than maxNNetas */ if (fact->maxNNetas > 0 && fact->eta_size > fact->maxNNetas) { fact->eta_size = fact->maxNNetas; } } /* endif */ /* For each row compute reciprocal of pivot element and take out of U */ /* Also use ihlink to permute column numbers */ /* the rows are not stored compactly or in order, * so we have to find out where the last one is stored */ ninbas = 0; for (i = 1; i <= nrow; ++i) { int jpiv = mpermu[i]; int nin = hinrow[i]; int krs = mrstrt[i]; int kre = krs + nin; temp[jpiv] = krs; temp2[jpiv] = nin; ninbas = CoinMax(kre, ninbas); /* c_ekktria etc ensure that the first row entry is the pivot */ dvalpv[jpiv] = 1. / dluval[krs]; hcoli[krs] = 0; /* probably needed for c_ekkrowq */ /* room for the pivot has already been allocated, so hincol ok */ for (kk = krs + 1; kk < kre; ++kk) { int j = ihlink[hcoli[kk]]; hcoli[kk] = j; /* permute the col index */ hrowi[kk] = jpiv; /* permute the row index */ ++hincol[j]; } } /* temp [mpermu[i]] == mrstrt[i] */ /* temp2[mpermu[i]] == hinrow[i] */ ninbas--; /* ???? */ c_ekkscpy(nrow, &temp[1], &mrstrt[1]); c_ekkscpy(nrow, &temp2[1], &hinrow[1]); /* now mrstrt, hinrow, hcoli and hrowi have been permuted */ /* Sort into column order as was stored by row */ /* There will be an empty entry in front of each each column, * because we initialized hincol to 1s, and c_ekkrowq fills in * entries from the back */ c_ekkrowq(hcoli, hrowi, dluval, mcstrt, hincol, nrow, ninbas); /* The shuffle zeroed out column pointers */ /* Put them back for L-U update */ /* Also multiply U elements by - reciprocal of pivot element */ /* Also decrement mcstrt/hincol to give "real" sizes */ for (i = 1; i <= nrow; ++i) { int kx = --mcstrt[i]; nel = --hincol[i]; hrowi[kx] = nel; dluval[kx] = dvalpv[i]; #ifndef NO_SHIFT for (int j = kx + 1; j <= kx + nel; j++) hrowi[j] = SHIFT_INDEX(hrowi[j]); #endif } /* sort dense part */ for (i = nrow - ndenuc + 1; i <= nrow; i++) { int kx = mcstrt[i] + 1; /* "real" entries start after pivot */ int nel = hincol[i]; c_ekk_sort2(&hrowi[kx], &dluval[kx], nel); } /* Recompute number in U */ nnentu = mcstrt[nrow] + hincol[nrow]; mcstrt[nrow + 4] = nnentu + 1; /* magic - AND DEAD */ /* as not much room switch off fast etas */ mrstrt[1] = 0; /* magic */ fact->rows_ok = false; i = nrow + maxinv + 5; /* DEAD */ } else { /* *************************************** */ /* enough memory to do a bit faster */ /* For each row compute reciprocal of pivot element and */ /* take out of U */ /* Also use HLINK(1 to permute column numbers */ int ninbas = 0; int ilast; /* last available entry */ int spareSpace; double *dluval2; /*int * hlink2 = ihlink+nrow; int * mrstrt2 = hlink2+nrow;*/ /* mwork has order of row copy */ EKKHlink *mwork = (reinterpret_cast< EKKHlink * >(fact->kw1adr)) - 1; fact->rows_ok = true; if (if_sparse_update) { ilast = nnetas - nnentl; } else { /* missing out nnentl stuff */ ilast = nnetas; } spareSpace = ilast - nnentu; need_more_space = false; /* save clean row copy if enough room */ nroom = (spareSpace) / nrow; if (nrow < 10000) { if (nroom < 10) { need_more_space = true; } } else { if (nroom < 5 && !if_sparse_update) { need_more_space = true; } } if (nroom > CoinMin(50, maxinv)) { need_more_space = false; } if (need_more_space) { if (if_sparse_update) { int i1 = fact->eta_size + 10 * nrow; fact->eta_size = static_cast< int >(1.2 * fact->eta_size); if (i1 > fact->eta_size) { fact->eta_size = i1; } } else { fact->eta_size = static_cast< int >(1.05 * fact->eta_size); } } else { if (nroom < 11) { if (if_sparse_update) { int i1 = fact->eta_size + (11 - nroom) * nrow; fact->eta_size = static_cast< int >(1.2 * fact->eta_size); if (i1 > fact->eta_size) { fact->eta_size = i1; } } } } if (fact->maxNNetas > 0 && fact->eta_size > fact->maxNNetas) { fact->eta_size = fact->maxNNetas; } { /* we can swap de2val and dluval to save copying */ int *eta_last = mpermu + nrow * 2 + 3; int *eta_next = eta_last + nrow + 2; int last = 0; eta_last[0] = -1; if (nnentl) { /* went into c_ekkcmfc - if not then in order */ int next; /*next=mwork[((nrow+1)<<1)+1];*/ next = mwork[nrow + 1].pre; #ifdef DEBUG j = mrstrt[next]; #endif for (i = 1; i <= nrow; ++i) { int iperm = mpermu[next]; eta_next[last] = iperm; eta_last[iperm] = last; temp[iperm] = mrstrt[next]; temp2[iperm] = hinrow[next]; #ifdef DEBUG if (mrstrt[next] != j) abort(); j = mrstrt[next] + hinrow[next]; #endif /*next= mwork[(next<<1)+2];*/ next = mwork[next].suc; last = iperm; } } else { #ifdef DEBUG j = 0; #endif for (i = 1; i <= nrow; ++i) { int iperm = mpermu[i]; eta_next[last] = iperm; eta_last[iperm] = last; temp[iperm] = mrstrt[i]; temp2[iperm] = hinrow[i]; last = iperm; #ifdef DEBUG if (mrstrt[i] <= j) abort(); if (i > 1 && mrstrt[i] != j + hinrow[i - 1]) abort(); j = mrstrt[i]; #endif } } eta_next[last] = nrow + 1; eta_last[nrow + 1] = last; eta_next[nrow + 1] = nrow + 2; c_ekkscpy(nrow, &temp[1], &mrstrt[1]); c_ekkscpy(nrow, &temp2[1], &hinrow[1]); i = eta_last[nrow + 1]; ninbas = mrstrt[i] + hinrow[i] - 1; #ifdef DEBUG if (spareSpace < ninbas) { abort(); } #endif c_ekkizero(nrow, &hincol[1]); #ifdef DEBUG for (i = nrow; i > 0; i--) { int krs = mrstrt[i]; int jpiv = hcoli[krs]; if (ihlink[jpiv] != i) abort(); } #endif for (i = 1; i <= ninbas; ++i) { k = hcoli[i]; k = ihlink[k]; #ifdef DEBUG if (k <= 0 || k > nrow) abort(); #endif hcoli[i] = k; hincol[k]++; } #ifdef DEBUG for (i = nrow; i > 0; i--) { int krs = mrstrt[i]; int jpiv = hcoli[krs]; if (jpiv != i) abort(); if (krs > ninbas) abort(); } #endif /* Sort into column order as was stored by row */ k = 1; /* Position */ for (kk = 1; kk <= nrow; ++kk) { nel = hincol[kk]; mcstrt[kk] = k; hrowi[k] = nel - 1; k += hincol[kk]; hincol[kk] = 0; } if (de2val) { dluval2 = de2val; } else { dluval2 = dluval + ninbas; } nnentu = k - 1; mcstrt[nrow + 4] = nnentu + 1; /* create column copy */ for (i = nrow; i > 0; i--) { int krs = mrstrt[i]; int kre = krs + hinrow[i]; hinrow[i]--; mrstrt[i]++; { int kx = mcstrt[i]; /*nel = hincol[i]; if (hrowi[kx]!=nel) abort(); hrowi[kx] = nel-1;*/ dluval2[kx] = 1.0 / dluval[krs]; /*hincol[i]=0;*/ for (kk = krs + 1; kk < kre; ++kk) { int j = hcoli[kk]; int iput = hincol[j] + 1; hincol[j] = iput; iput += mcstrt[j]; hrowi[iput] = SHIFT_INDEX(i); dluval2[iput] = dluval[kk]; } } } if (de2val) { double *a = dluval; double *address; /* move first down */ i = eta_next[0]; { int krs = mrstrt[i]; nel = hinrow[i]; for (j = 1; j <= nel; j++) { hcoli[j] = hcoli[j + krs - 1]; dluval[j] = dluval[j + krs - 1]; } } mrstrt[i] = 1; /****** swap dluval and de2val !!!! ******/ /* should work even for dspace */ /* move L part across */ address = fact->xeeadr + 1; fact->xeeadr = fact->xe2adr - 1; fact->xe2adr = address; if (nnentl) { int n = xnetal - nrow - maxinv - 5; int j1, j2; int *mcstrt2 = mcstrt + nrow + maxinv + 4; j2 = mcstrt2[1]; j1 = mcstrt2[n + 1] + 1; #if 0 memcpy(de2val+j1,dluval+j1,(j2-j1+1)*sizeof(double)); #else c_ekkdcpy(j2 - j1 + 1, (dluval + j1), (de2val + j1)); #endif } dluval = de2val; de2val = a; } else { /* copy down dluval */ #if 0 memcpy(&dluval[1],&dluval2[1],ninbas*sizeof(double)); #else c_ekkdcpy(ninbas, (dluval2 + 1), (dluval + 1)); #endif } /* sort dense part */ for (i = nrow - ndenuc + 1; i <= nrow; i++) { int kx = mcstrt[i] + 1; int nel = hincol[i]; c_ekk_sort2(&hrowi[kx], &dluval[kx], nel); } } mrstrt[nrow + 1] = ilast + 1; } /* Find first non slack */ for (i = 1; i <= nrow; ++i) { int kcs = mcstrt[i]; if (hincol[i] != 0 || dluval[kcs] != SLACK_VALUE) { break; } } numberSlacks = i - 1; { /* set slacks to 1 */ int *array = fact->krpadr + (fact->nrowmx + 2); int nSet = (numberSlacks) >> 5; int n2 = (fact->nrowmx + 32) >> 5; int i; memset(array, 0xff, nSet * sizeof(int)); memset(array + nSet, 0, (n2 - nSet) * sizeof(int)); for (i = nSet << 5; i <= numberSlacks; i++) c_ekk_Set(array, i); c_ekk_Unset(array, fact->nrow + 1); /* make sure off end not slack */ #ifndef NDEBUG for (i = 1; i <= numberSlacks; i++) assert(c_ekk_IsSet(array, i)); for (; i <= fact->nrow; i++) assert(!c_ekk_IsSet(array, i)); #endif } /* and set up backward pointers */ /* clean up HPIVCO for fancy assembler stuff */ /* xnetal was initialized to nrow + maxinv + 4 in c_ekktria, and grows */ c_ekkscpy_0_1(maxinv + 1, 1, &hpivco[nrow + 4]); /* magic */ hpivco[xnetal] = 1; /* shuffle down for gaps so can get rid of hpivco for L */ { const int lstart = nrow + maxinv + 5; int n = xnetal - lstart; /* number of L entries */ int add, iel; int *hpivco_L = &hpivco[lstart]; int *mcstrt_L = &mcstrt[lstart]; if (nnentl) { /* elements of L were stored in descending order in dluval/hcoli */ int kle = mcstrt_L[0]; int kls = mcstrt_L[n] + 1; if (if_sparse_update) { int i2, iel; int *mrstrt2 = &mrstrt[nrow]; /* need row copy of L */ /* hpivro is spare for counts; just used as a temp buffer */ c_ekkizero(nrow, &hpivro[1]); /* permute L indices; count L row lengths */ for (iel = kls; iel <= kle; ++iel) { int jrow = mpermu[UNSHIFT_INDEX(hrowi[iel])]; hpivro[jrow]++; hrowi[iel] = SHIFT_INDEX(jrow); } { int ibase = nnetas - nnentl + 1; int firstDoRow = 0; for (i = 1; i <= nrow; i++) { mrstrt2[i] = ibase; if (hpivro[i] && !firstDoRow) { firstDoRow = i; } ibase += hpivro[i]; hpivro[i] = mrstrt2[i]; } if (!firstDoRow) { firstDoRow = nrow + 1; } mrstrt2[i] = ibase; fact->firstDoRow = firstDoRow; } i2 = mcstrt_L[n]; for (i = n - 1; i >= 0; --i) { int i1 = mcstrt_L[i]; int ipiv = hpivco_L[i]; ipiv = mpermu[ipiv]; hpivco_L[i] = ipiv; for (iel = i2; iel < i1; iel++) { int irow = UNSHIFT_INDEX(hrowi[iel + 1]); int iput = hpivro[irow]; hpivro[irow] = iput + 1; hcoli[iput] = ipiv; de2val[iput] = dluval[iel + 1]; } i2 = i1; } } else { /* just permute row numbers */ for (j = 0; j < n; ++j) { hpivco_L[j] = mpermu[hpivco_L[j]]; } for (iel = kls; iel <= kle; ++iel) { int jrow = mpermu[UNSHIFT_INDEX(hrowi[iel])]; hrowi[iel] = SHIFT_INDEX(jrow); } } add = hpivco_L[n - 1] - hpivco_L[0] - n + 1; if (add) { int i; int last = hpivco_L[n - 1]; int laststart = mcstrt_L[n]; int base = hpivco_L[0] - 1; /* adjust so numbers match */ mcstrt_L -= base; hpivco_L -= base; mcstrt_L[last] = laststart; for (i = n - 1; i >= 0; i--) { int ipiv = hpivco_L[i + base]; while (ipiv < last) { mcstrt_L[last - 1] = laststart; hpivco_L[last - 1] = last; last--; } laststart = mcstrt_L[i + base]; mcstrt_L[last - 1] = laststart; hpivco_L[last - 1] = last; last--; } xnetal += add; } } //int lstart=fact->lstart; //const int * COIN_RESTRICT hpivco = fact->kcpadr; fact->firstLRow = hpivco[lstart]; } fact->nnentu = nnentu; fact->xnetal = xnetal; /* now we have xnetal * we can set up pointers */ clp_setup_pointers(fact); /* this is the array used in c_ekkbtrn; it is passed to c_ekkbtju as hpivco. * this gets modified by F-T as we pivot columns in and out. */ { /* do new hpivco */ int *hpivco_new = fact->kcpadr + 1; int *back = &fact->kcpadr[2 * nrow + maxinv + 4]; /* set zeroth to stop illegal read */ back[0] = 1; hpivco_new[nrow + 1] = nrow + 1; /* deliberate loop for dense tests */ hpivco_new[0] = 1; for (i = 1; i <= nrow; i++) { hpivco_new[i] = i + 1; back[i + 1] = i; } back[1] = 0; fact->first_dense = CoinMax(fact->first_dense, 4); fact->numberSlacks = numberSlacks; fact->lastSlack = numberSlacks; fact->firstNonSlack = hpivco_new[numberSlacks]; } /* also zero out permute region and nonzero */ c_ekkdzero(nrow, (dpermu + 1)); if (if_sparse_update) { char *nonzero = reinterpret_cast< char * >(&mpermu[nrow + 1]); /* used in c_ekkbtrn */ /*c_ekkizero(nrow,(int *)nonzero);*/ c_ekkczero(nrow, nonzero); /*memset(nonzero,0,nrow*sizeof(int));*/ /* for faster method */ } for (i = 1; i <= nrow; ++i) { hpivro[mpermu[i]] = i; } } /* c_ekkshfv */ static void c_ekkclcp1(const int *hcol, const int *mrstrt, int *hrow, int *mcstrt, int *hincol, int nnrow, int nncol, int ninbas) { int i, j, kc, kr, kre, krs, icol; int iput; /* Create columnwise storage of row indices */ kc = 1; for (j = 1; j <= nncol; ++j) { mcstrt[j] = kc; kc += hincol[j]; hincol[j] = 0; } mcstrt[nncol + 1] = ninbas + 1; for (i = 1; i <= nnrow; ++i) { krs = mrstrt[i]; kre = mrstrt[i + 1] - 1; for (kr = krs; kr <= kre; ++kr) { icol = hcol[kr]; iput = hincol[icol]; hincol[icol] = iput + 1; iput += mcstrt[icol]; hrow[iput] = i; } } } /* c_ekkclcp */ inline void c_ekkclcp2(const int *hcol, const double *dels, const int *mrstrt, int *hrow, double *dels2, int *mcstrt, int *hincol, int nnrow, int nncol, int ninbas) { int i, j, kc, kr, kre, krs, icol; int iput; /* Create columnwise storage of row indices */ kc = 1; for (j = 1; j <= nncol; ++j) { mcstrt[j] = kc; kc += hincol[j]; hincol[j] = 0; } mcstrt[nncol + 1] = ninbas + 1; for (i = 1; i <= nnrow; ++i) { krs = mrstrt[i]; kre = mrstrt[i + 1] - 1; for (kr = krs; kr <= kre; ++kr) { icol = hcol[kr]; iput = hincol[icol]; hincol[icol] = iput + 1; iput += mcstrt[icol]; hrow[iput] = i; dels2[iput] = dels[kr]; } } } /* c_ekkclcp */ int c_ekkslcf(register const EKKfactinfo *fact) { int *hrow = fact->xeradr; int *hcol = fact->xecadr; double *dels = fact->xeeadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *mrstrt = fact->xrsadr; int *mcstrt = fact->xcsadr; const int nrow = fact->nrow; int ninbas; /* space for etas */ const int nnetas = fact->nnetas; ninbas = mcstrt[nrow + 1] - 1; /* Now sort */ if (ninbas << 1 > nnetas) { /* Put it in row order */ int i, k; c_ekkrowq(hrow, hcol, dels, mrstrt, hinrow, nrow, ninbas); k = 1; for (i = 1; i <= nrow; ++i) { mrstrt[i] = k; k += hinrow[i]; } mrstrt[nrow + 1] = k; /* make a column copy without the extra values */ c_ekkclcp1(hcol, mrstrt, hrow, mcstrt, hincol, nrow, nrow, ninbas); } else { /* Move elements up memory */ c_ekkdcpy(ninbas, (dels + 1), (dels + ninbas + 1)); /* make a row copy with the extra values */ c_ekkclcp2(hrow, &dels[ninbas], mcstrt, hcol, dels, mrstrt, hinrow, nrow, nrow, ninbas); } return (ninbas); } /* c_ekkslcf */ /* Uwe H. Suhl, September 1986 */ /* Removes lower and upper triangular factors from the matrix. */ /* Code for routine: 102 */ /* Return codes: */ /* 0: ok */ /* -5: not enough space in row file */ /* 7: pivot too small - col sing */ /* * This selects singleton columns and rows for the LU factorization. * Singleton columns require no * * (1) Note that columns are processed using a queue, not a stack; * this produces better pivots. * * (2) At most nrows elements are ever entered into the queue. * * (3) When pivoting singleton columns, every column that is part of * the pivot row is shortened by one, including the singleton column * itself; the hincol entries are updated appropriately. * Thus, pivoting on a singleton column may create other singleton columns * (but not singleton rows). * The dual property is true for rows. * * (4) Row entries (hrowi) are not changed when pivoting singleton columns. * Singleton columns that are created as a result of pivoting the * rows of other singleton columns will therefore have row entries * corresponding to those pivoted rows. Since we need to find the * row entry for the row being pivoted, we have to * search its row entries for the one whose hlink entry indicates * that it has not yet been pivoted. * * (9) As a result of pivoting columns, sections in hrowi corresponding to * pivoted columns are no longer needed, and entries in sections * for non-pivoted columns may have entries corresponding to pivoted rows. * This is why hrowi needs to be compacted. * * (5) When the row_pre and col_pre fields of the hlink struct contain * negative values, they indicate that the row has been pivoted, and * the negative of that value is the pivot order. * That is the only use for these fields in this routine. * * (6) This routine assumes that hlink is initialized to zeroes. * Under this assumption, the following is an invariant in this routine: * * (clink[i].pre < 0) ==> (hincol[i]==0) * * The converse is not true; see (15). * * The dual is also true, but only while pivoting singletong rows, * since we don't update hinrow while pivoting columns; * THESE VALUES ARE USED LATER, BUT I DON'T UNDERSTAND HOW YET. * * (7) hpivco is used for two purposes. The low end is used to implement the * queue when pivoting columns; the high end is used to hold eta-matrix * entries. * * (8) As a result of pivoting columns, for all i:1<=i<=nrow, either * hinrow[i] has not changed * or * hinrow[i] = 0 * This is another way of saying that pivoting singleton columns cannot * create singleton rows. * The dual holds for hincol after pivoting rows. * * (10) In constrast to (4), while pivoting rows we * do not let the hcoli get out-of-date. That is because as part of * the process of numerical pivoting we have to find the row entries * for all the rows in the pivot column, so we may as well keep the * entries up to date. This is done by moving the last column entry * for each row into the entry that was used for the pivot column. * * (11) When pivoting a column, we must find the pivot row entry in * its row table. Sometimes we search for other things at the same time. * The same is true for pivoting columns. This search should never * fail. * * (12) Information concerning the eta matrices is stored in the high * ends of arrays that are also used to store information concerning * the basis; these arrays are: hpivco, mcstrt, dluval and hcoli. * Information is only stored in these arrays as a part of pivoting * singleton rows, since the only thing that needs to be saved as * a part of pivoting singleton columns is which rows and columns were chosen, * and this is stored in hlink. * Since they have to share the same array, the eta information grows * downward instead of upward. Eventually, eta information may grow * down to the top of the basis information. As pivoting proceeds, * more and more of this information is no longer needed, so when this * happens we can try compacting the arrays to see if we can recover * enough space. lstart points at the bottom entry in the arrays, * xnewro/xnewco at the top of the basis information, and each time we * pivot a singleton row we know that we will need exactly as many new * entries as there are rows in the pivot column, so we can easily * determine if we need more room. The variable maxinv may be used * to reserve extra room when inversion starts. * * (13) Eta information is stored in a fashion that is similar to how * matrices are stored. There is one entry in hpivco and mcstrt for * each eta (other than the initial ones for singleton columns and * for singleton rows that turn out to be singleton columns), * in the order they were chosen. hpivco records the pivot row, * and mcstrt points at the first entry in the other two arrays * for this row. dluval contains the actual eta values for the column, * and hcoli the rows these values were in. * These entries in mcstrt and hpivco grow upward; they start above * the entries used to store basis information. * (Actually, I don't see why they need to start maxinv+4 entries past the top). * * (14) c_ekkrwco assumes that invalidated hrowi/hcoli entries contain 0. * * (15) When pivoting singleton columns, it may possibly happen * that a row with all singleton column entries is created. * In this case, all of the columns will be enqueued, and pivoting * on any of them eliminates the rest, without their being chosen * as pivots. The dual holds for singleton rows. * DOES THIS INDICATE A SINGULARITY? * * (15) There are some aspects of the implementation that I find odd. * hrowi is not set to 0 for pivot rows while pivoting singleton columns, * which would make sense to me. Things don't work if this isn't done, * so the information is used somehow later on. Also, the information * for the pivot column is shifted to the front of the pivot row * when pivoting singleton columns; this is also necessary for reasons * I don't understand. */ int c_ekktria(EKKfactinfo *fact, EKKHlink *rlink, EKKHlink *clink, int *nsingp, int *xnewcop, int *xnewrop, int *ncompactionsp, const int ninbas) { const int nrow = fact->nrow; const int maxinv = fact->maxinv; int *hcoli = fact->xecadr; double *dluval = fact->xeeadr; int *mrstrt = fact->xrsadr; int *hrowi = fact->xeradr; int *mcstrt = fact->xcsadr; int *hinrow = fact->xrnadr; int *hincol = fact->xcnadr; int *stack = fact->krpadr; /* normally hpivro */ int *hpivco = fact->kcpadr; const double drtpiv = fact->drtpiv; CoinZeroN(reinterpret_cast< int * >(rlink + 1), static_cast< int >(nrow * (sizeof(EKKHlink) / sizeof(int)))); CoinZeroN(reinterpret_cast< int * >(clink + 1), static_cast< int >(nrow * (sizeof(EKKHlink) / sizeof(int)))); fact->npivots = 0; /* Use NUSPIK to keep sum of deactivated row counts */ fact->nuspike = 0; int xnetal = nrow + maxinv + 4; int xnewro = mrstrt[nrow] + hinrow[nrow] - 1; int xnewco = xnewro; int kmxeta = ninbas; int ncompactions = 0; int i, j, k, kc, kce, kcs, npr; double pivot; int kipis, kipie, kjpis, kjpie, knprs, knpre; int ipivot, jpivot, stackc, stackr; #ifndef NDEBUG int kpivot = -1; #else int kpivot = -1; #endif int epivco, kstart, maxstk; int irtcod = 0; int lastSlack = 0; int lstart = fact->nnetas + 1; /*int nnentu = ninbas; */ int lstart_minus_nnentu = lstart - ninbas; /* do initial column singletons - as can do faster */ for (jpivot = 1; jpivot <= nrow; ++jpivot) { if (hincol[jpivot] == 1) { ipivot = hrowi[mcstrt[jpivot]]; if (ipivot > lastSlack) { lastSlack = ipivot; } else { /* so we can't put a structural over a slack */ break; } kipis = mrstrt[ipivot]; #if 1 assert(hcoli[kipis] == jpivot); #else if (hcoli[kipis] != jpivot) { kpivot = kipis + 1; while (hcoli[kpivot] != jpivot) kpivot++; #ifdef DEBUG kipie = kipis + hinrow[ipivot]; if (kpivot >= kipie) { abort(); } #endif pivot = dluval[kpivot]; dluval[kpivot] = dluval[kipis]; dluval[kipis] = pivot; hcoli[kpivot] = hcoli[kipis]; hcoli[kipis] = jpivot; } #endif if (dluval[kipis] == SLACK_VALUE) { /* record the new pivot row and column */ ++fact->npivots; rlink[ipivot].pre = -fact->npivots; clink[jpivot].pre = -fact->npivots; hincol[jpivot] = 0; fact->nuspike += hinrow[ipivot]; } else { break; } } else { break; } } /* Fill queue with other column singletons and clean up */ maxstk = 0; for (j = 1; j <= nrow; ++j) { if (hincol[j]) { int n = 0; kcs = mcstrt[j]; kce = mcstrt[j + 1]; for (k = kcs; k < kce; ++k) { if (!(rlink[hrowi[k]].pre < 0)) { n++; } } hincol[j] = n; if (n == 1) { /* we just created a new singleton column - enqueue it */ ++maxstk; stack[maxstk] = j; } } } stackc = 0; /* (1) */ while (!(stackc >= maxstk)) { /* (1) */ /* dequeue the next entry */ ++stackc; jpivot = stack[stackc]; /* (15) */ if (hincol[jpivot] != 0) { for (k = mcstrt[jpivot]; rlink[hrowi[k]].pre < 0; k++) { /* (4) */ } ipivot = hrowi[k]; /* All the columns in this row are being shortened. */ kipis = mrstrt[ipivot]; kipie = kipis + hinrow[ipivot]; for (k = kipis; k < kipie; ++k) { j = hcoli[k]; --hincol[j]; /* (3) (6) */ if (j == jpivot) { kpivot = k; /* (11) */ } else if (hincol[j] == 1) { /* we just created a new singleton column - enqueue it */ ++maxstk; stack[maxstk] = j; } } /* record the new pivot row and column */ ++fact->npivots; rlink[ipivot].pre = -fact->npivots; clink[jpivot].pre = -fact->npivots; fact->nuspike += hinrow[ipivot]; /* check the pivot */ assert(kpivot > 0); pivot = dluval[kpivot]; if (fabs(pivot) < drtpiv) { irtcod = 7; ++(*nsingp); rlink[ipivot].pre = -nrow - 1; clink[jpivot].pre = -nrow - 1; } /* swap the pivot column entry with the first one. */ /* I don't know why. */ dluval[kpivot] = dluval[kipis]; dluval[kipis] = pivot; hcoli[kpivot] = hcoli[kipis]; hcoli[kipis] = jpivot; } } /* (8) */ /* The entire basis may already be triangular */ if (fact->npivots < nrow) { /* (9) */ kstart = 0; for (j = 1; j <= nrow; ++j) { if (!(clink[j].pre < 0)) { kcs = mcstrt[j]; kce = mcstrt[j + 1]; mcstrt[j] = kstart + 1; for (k = kcs; k < kce; ++k) { if (!(rlink[hrowi[k]].pre < 0)) { ++kstart; hrowi[kstart] = hrowi[k]; } } hincol[j] = kstart - mcstrt[j] + 1; } } xnewco = kstart; /* Fill stack with initial row singletons that haven't been pivoted away */ stackr = 0; for (i = 1; i <= nrow; ++i) { if (!(rlink[i].pre < 0) && (hinrow[i] == 1)) { ++stackr; stack[stackr] = i; } } while (!(stackr <= 0)) { ipivot = stack[stackr]; assert(ipivot); --stackr; #if 1 assert(rlink[ipivot].pre >= 0); #else /* This test is probably unnecessary: rlink[i].pre < 0 ==> hinrow[i]==0 */ if (rlink[ipivot].pre < 0) { continue; } #endif /* (15) */ if (hinrow[ipivot] != 0) { /* This is a singleton row, which means it has exactly one column */ jpivot = hcoli[mrstrt[ipivot]]; kjpis = mcstrt[jpivot]; epivco = hincol[jpivot] - 1; hincol[jpivot] = 0; /* this column is being pivoted away */ /* (11) */ kjpie = kjpis + epivco; for (k = kjpis; k <= kjpie; ++k) { if (ipivot == hrowi[k]) break; } /* ASSERT (k <= kjpie) */ /* move the last row entry for the pivot column into the pivot row's entry */ /* I don't know why */ hrowi[k] = hrowi[kjpie]; /* invalidate the (old) last row entry of the pivot column */ /* I don't know why */ hrowi[kjpie] = 0; /* (12) */ if (!(xnewro + epivco < lstart)) { int kstart; if (!(epivco < lstart_minus_nnentu)) { irtcod = -5; break; } kstart = c_ekkrwco(fact, dluval, hcoli, mrstrt, hinrow, xnewro); ++ncompactions; kmxeta += (xnewro - kstart) << 1; xnewro = kstart; } if (!(xnewco + epivco < lstart)) { if (!(epivco < lstart_minus_nnentu)) { irtcod = -5; break; } xnewco = c_ekkclco(fact, hrowi, mcstrt, hincol, xnewco); ++ncompactions; /* HINCOL MAY HAVE CHANGED ??? (JJHF) */ epivco = hincol[jpivot]; } /* record the new pivot row and column */ ++fact->npivots; rlink[ipivot].pre = -fact->npivots; clink[jpivot].pre = -fact->npivots; /* no update for nuspik */ /* check the pivot */ pivot = dluval[mrstrt[ipivot]]; if (fabs(pivot) < drtpiv) { /* If the pivot is too small, reject it, but keep going */ irtcod = 7; rlink[ipivot].pre = -nrow - 1; clink[jpivot].pre = -nrow - 1; } /* Perform numerical part of elimination. */ if (!(epivco <= 0)) { ++xnetal; mcstrt[xnetal] = lstart - 1; hpivco[xnetal] = ipivot; pivot = -1.f / pivot; kcs = mcstrt[jpivot]; kce = kcs + epivco - 1; hincol[jpivot] = 0; for (kc = kcs; kc <= kce; ++kc) { npr = hrowi[kc]; /* why bother? */ hrowi[kc] = 0; --hinrow[npr]; /* (3) */ if (hinrow[npr] == 1) { /* this may create new singleton rows */ ++stackr; stack[stackr] = npr; } /* (11) */ knprs = mrstrt[npr]; knpre = knprs + hinrow[npr]; for (k = knprs; k <= knpre; ++k) { if (jpivot == hcoli[k]) { kpivot = k; break; } } /* ASSERT (kpivot <= knpre) */ { /* (10) */ double elemnt = dluval[kpivot]; dluval[kpivot] = dluval[knpre]; hcoli[kpivot] = hcoli[knpre]; hcoli[knpre] = 0; /* (14) */ /* store elementary row transformation */ --lstart; dluval[lstart] = elemnt * pivot; hcoli[lstart] = npr; } } } } } } /* (8) */ *xnewcop = xnewco; *xnewrop = xnewro; fact->xnetal = xnetal; fact->nnentu = lstart - lstart_minus_nnentu; fact->kmxeta = kmxeta; *ncompactionsp = ncompactions; return (irtcod); } /* c_ekktria */ #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinSmartPtr.hpp0000644000175200017520000005073013414454441016662 0ustar coincoin// Copyright (C) 2004, 2006 International Business Machines and others. // All Rights Reserved. // This code is published under the Eclipse Public License. // // $Id: CoinSmartPtr.hpp 2083 2019-01-06 19:38:09Z unxusr $ // // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13 // Removed lots of debugging stuff and reformatted: Laszlo Ladanyi, IBM #ifndef CoinSmartPtr_hpp #define CoinSmartPtr_hpp #include #include #include #include namespace Coin { //######################################################################### /** ReferencedObject class. * This is part of the implementation of an intrusive smart pointer * design. This class stores the reference count of all the smart * pointers that currently reference it. See the documentation for * the SmartPtr class for more details. * * A SmartPtr behaves much like a raw pointer, but manages the lifetime * of an object, deleting the object automatically. This class implements * a reference-counting, intrusive smart pointer design, where all * objects pointed to must inherit off of ReferencedObject, which * stores the reference count. Although this is intrusive (native types * and externally authored classes require wrappers to be referenced * by smart pointers), it is a safer design. A more detailed discussion of * these issues follows after the usage information. * * Usage Example: * Note: to use the SmartPtr, all objects to which you point MUST * inherit off of ReferencedObject. * * \verbatim * * In MyClass.hpp... * * #include "CoinSmartPtr.hpp" * * class MyClass : public Coin::ReferencedObject // must derive from ReferencedObject * { * ... * } * * In my_usage.cpp... * * #include "CoinSmartPtr.hpp" * #include "MyClass.hpp" * * void func(AnyObject& obj) * { * Coin::SmartPtr ptr_to_myclass = new MyClass(...); * // ptr_to_myclass now points to a new MyClass, * // and the reference count is 1 * * ... * * obj.SetMyClass(ptr_to_myclass); * // Here, let's assume that AnyObject uses a * // SmartPtr internally here. * // Now, both ptr_to_myclass and the internal * // SmartPtr in obj point to the same MyClass object * // and its reference count is 2. * * ... * * // No need to delete ptr_to_myclass, this * // will be done automatically when the * // reference count drops to zero. * * } * * \endverbatim * * Other Notes: * The SmartPtr implements both dereference operators -> & *. * The SmartPtr does NOT implement a conversion operator to * the raw pointer. Use the GetRawPtr() method when this * is necessary. Make sure that the raw pointer is NOT * deleted. * The SmartPtr implements the comparison operators == & != * for a variety of types. Use these instead of * \verbatim * if (GetRawPtr(smrt_ptr) == ptr) // Don't use this * \endverbatim * SmartPtr's, as currently implemented, do NOT handle circular references. * For example: consider a higher level object using SmartPtrs to point * to A and B, but A and B also point to each other (i.e. A has a * SmartPtr to B and B has a SmartPtr to A). In this scenario, when the * higher level object is finished with A and B, their reference counts * will never drop to zero (since they reference each other) and they * will not be deleted. This can be detected by memory leak tools like * valgrind. If the circular reference is necessary, the problem can be * overcome by a number of techniques: * * 1) A and B can have a method that "releases" each other, that is * they set their internal SmartPtrs to NULL. * \verbatim * void AClass::ReleaseCircularReferences() * { * smart_ptr_to_B = NULL; * } * \endverbatim * Then, the higher level class can call these methods before * it is done using A & B. * * 2) Raw pointers can be used in A and B to reference each other. * Here, an implicit assumption is made that the lifetime is * controlled by the higher level object and that A and B will * both exist in a controlled manner. Although this seems * dangerous, in many situations, this type of referencing * is very controlled and this is reasonably safe. * * 3) This SmartPtr class could be redesigned with the Weak/Strong * design concept. Here, the SmartPtr is identified as being * Strong (controls lifetime of the object) or Weak (merely * referencing the object). The Strong SmartPtr increments * (and decrements) the reference count in ReferencedObject * but the Weak SmartPtr does not. In the example above, * the higher level object would have Strong SmartPtrs to * A and B, but A and B would have Weak SmartPtrs to each * other. Then, when the higher level object was done with * A and B, they would be deleted. The Weak SmartPtrs in A * and B would not decrement the reference count and would, * of course, not delete the object. This idea is very similar * to item (2), where it is implied that the sequence of events * is controlled such that A and B will not call anything using * their pointers following the higher level delete (i.e. in * their destructors!). This is somehow safer, however, because * code can be written (however expensive) to perform run-time * detection of this situation. For example, the ReferencedObject * could store pointers to all Weak SmartPtrs that are referencing * it and, in its destructor, tell these pointers that it is * dying. They could then set themselves to NULL, or set an * internal flag to detect usage past this point. * * Comments on Non-Intrusive Design: * In a non-intrusive design, the reference count is stored somewhere other * than the object being referenced. This means, unless the reference * counting pointer is the first referencer, it must get a pointer to the * referenced object from another smart pointer (so it has access to the * reference count location). In this non-intrusive design, if we are * pointing to an object with a smart pointer (or a number of smart * pointers), and we then give another smart pointer the address through * a RAW pointer, we will have two independent, AND INCORRECT, reference * counts. To avoid this pitfall, we use an intrusive reference counting * technique where the reference count is stored in the object being * referenced. */ class ReferencedObject { public: ReferencedObject() : reference_count_(0) { } virtual ~ReferencedObject() { assert(reference_count_ == 0); } inline int ReferenceCount() const { return reference_count_; } inline void AddRef() const { ++reference_count_; } inline void ReleaseRef() const { --reference_count_; } private: mutable int reference_count_; }; //######################################################################### //#define IP_DEBUG_SMARTPTR #if COIN_IPOPT_CHECKLEVEL > 2 #define IP_DEBUG_SMARTPTR #endif #ifdef IP_DEBUG_SMARTPTR #include "IpDebug.hpp" #endif /** Template class for Smart Pointers. * A SmartPtr behaves much like a raw pointer, but manages the lifetime * of an object, deleting the object automatically. This class implements * a reference-counting, intrusive smart pointer design, where all * objects pointed to must inherit off of ReferencedObject, which * stores the reference count. Although this is intrusive (native types * and externally authored classes require wrappers to be referenced * by smart pointers), it is a safer design. A more detailed discussion of * these issues follows after the usage information. * * Usage Example: * Note: to use the SmartPtr, all objects to which you point MUST * inherit off of ReferencedObject. * * \verbatim * * In MyClass.hpp... * * #include "CoinSmartPtr.hpp" * * class MyClass : public Coin::ReferencedObject // must derive from ReferencedObject * { * ... * } * * In my_usage.cpp... * * #include "CoinSmartPtr.hpp" * #include "MyClass.hpp" * * void func(AnyObject& obj) * { * SmartPtr ptr_to_myclass = new MyClass(...); * // ptr_to_myclass now points to a new MyClass, * // and the reference count is 1 * * ... * * obj.SetMyClass(ptr_to_myclass); * // Here, let's assume that AnyObject uses a * // SmartPtr internally here. * // Now, both ptr_to_myclass and the internal * // SmartPtr in obj point to the same MyClass object * // and its reference count is 2. * * ... * * // No need to delete ptr_to_myclass, this * // will be done automatically when the * // reference count drops to zero. * * } * * \endverbatim * * It is not necessary to use SmartPtr's in all cases where an * object is used that has been allocated "into" a SmartPtr. It is * possible to just pass objects by reference or regular pointers, * even if lower down in the stack a SmartPtr is to be held on to. * Everything should work fine as long as a pointer created by "new" * is immediately passed into a SmartPtr, and if SmartPtr's are used * to hold on to objects. * * Other Notes: * The SmartPtr implements both dereference operators -> & *. * The SmartPtr does NOT implement a conversion operator to * the raw pointer. Use the GetRawPtr() method when this * is necessary. Make sure that the raw pointer is NOT * deleted. * The SmartPtr implements the comparison operators == & != * for a variety of types. Use these instead of * \verbatim * if (GetRawPtr(smrt_ptr) == ptr) // Don't use this * \endverbatim * SmartPtr's, as currently implemented, do NOT handle circular references. * For example: consider a higher level object using SmartPtrs to point to * A and B, but A and B also point to each other (i.e. A has a SmartPtr * to B and B has a SmartPtr to A). In this scenario, when the higher * level object is finished with A and B, their reference counts will * never drop to zero (since they reference each other) and they * will not be deleted. This can be detected by memory leak tools like * valgrind. If the circular reference is necessary, the problem can be * overcome by a number of techniques: * * 1) A and B can have a method that "releases" each other, that is * they set their internal SmartPtrs to NULL. * \verbatim * void AClass::ReleaseCircularReferences() * { * smart_ptr_to_B = NULL; * } * \endverbatim * Then, the higher level class can call these methods before * it is done using A & B. * * 2) Raw pointers can be used in A and B to reference each other. * Here, an implicit assumption is made that the lifetime is * controlled by the higher level object and that A and B will * both exist in a controlled manner. Although this seems * dangerous, in many situations, this type of referencing * is very controlled and this is reasonably safe. * * 3) This SmartPtr class could be redesigned with the Weak/Strong * design concept. Here, the SmartPtr is identified as being * Strong (controls lifetime of the object) or Weak (merely * referencing the object). The Strong SmartPtr increments * (and decrements) the reference count in ReferencedObject * but the Weak SmartPtr does not. In the example above, * the higher level object would have Strong SmartPtrs to * A and B, but A and B would have Weak SmartPtrs to each * other. Then, when the higher level object was done with * A and B, they would be deleted. The Weak SmartPtrs in A * and B would not decrement the reference count and would, * of course, not delete the object. This idea is very similar * to item (2), where it is implied that the sequence of events * is controlled such that A and B will not call anything using * their pointers following the higher level delete (i.e. in * their destructors!). This is somehow safer, however, because * code can be written (however expensive) to perform run-time * detection of this situation. For example, the ReferencedObject * could store pointers to all Weak SmartPtrs that are referencing * it and, in its destructor, tell these pointers that it is * dying. They could then set themselves to NULL, or set an * internal flag to detect usage past this point. * * Comments on Non-Intrusive Design: * In a non-intrusive design, the reference count is stored somewhere other * than the object being referenced. This means, unless the reference * counting pointer is the first referencer, it must get a pointer to the * referenced object from another smart pointer (so it has access to the * reference count location). In this non-intrusive design, if we are * pointing to an object with a smart pointer (or a number of smart * pointers), and we then give another smart pointer the address through * a RAW pointer, we will have two independent, AND INCORRECT, reference * counts. To avoid this pitfall, we use an intrusive reference counting * technique where the reference count is stored in the object being * referenced. */ template < class T > class SmartPtr { public: /** Returns the raw pointer contained. Use to get the value of the * raw ptr (i.e. to pass to other methods/functions, etc.) Note: This * method does NOT copy, therefore, modifications using this value * modify the underlying object contained by the SmartPtr, NEVER * delete this returned value. */ T *GetRawPtr() const { return ptr_; } /** Returns true if the SmartPtr is NOT NULL. * Use this to check if the SmartPtr is not null * This is preferred to if(GetRawPtr(sp) != NULL) */ bool IsValid() const { return ptr_ != NULL; } /** Returns true if the SmartPtr is NULL. * Use this to check if the SmartPtr IsNull. * This is preferred to if(GetRawPtr(sp) == NULL) */ bool IsNull() const { return ptr_ == NULL; } private: /**@name Private Data/Methods */ //@{ /** Actual raw pointer to the object. */ T *ptr_; /** Release the currently referenced object. */ void ReleasePointer_() { if (ptr_) { ptr_->ReleaseRef(); if (ptr_->ReferenceCount() == 0) { delete ptr_; } ptr_ = NULL; } } /** Set the value of the internal raw pointer from another raw * pointer, releasing the previously referenced object if necessary. */ SmartPtr< T > &SetFromRawPtr_(T *rhs) { ReleasePointer_(); // Release any old pointer if (rhs != NULL) { rhs->AddRef(); ptr_ = rhs; } return *this; } /** Set the value of the internal raw pointer from a SmartPtr, * releasing the previously referenced object if necessary. */ inline SmartPtr< T > &SetFromSmartPtr_(const SmartPtr< T > &rhs) { SetFromRawPtr_(rhs.GetRawPtr()); return (*this); } //@} public: #define dbg_smartptr_verbosity 0 /**@name Constructors/Destructors */ //@{ /** Default constructor, initialized to NULL */ SmartPtr() : ptr_(NULL) { } /** Copy constructor, initialized from copy */ SmartPtr(const SmartPtr< T > ©) : ptr_(NULL) { (void)SetFromSmartPtr_(copy); } /** Constructor, initialized from T* ptr */ SmartPtr(T *ptr) : ptr_(NULL) { (void)SetFromRawPtr_(ptr); } /** Destructor, automatically decrements the reference count, deletes * the object if necessary.*/ ~SmartPtr() { ReleasePointer_(); } //@} /**@name Overloaded operators. */ //@{ /** Overloaded arrow operator, allows the user to call * methods using the contained pointer. */ T *operator->() const { #if COIN_COINUTILS_CHECKLEVEL > 0 assert(ptr_); #endif return ptr_; } /** Overloaded dereference operator, allows the user * to dereference the contained pointer. */ T &operator*() const { #if COIN_IPOPT_CHECKLEVEL > 0 assert(ptr_); #endif return *ptr_; } /** Overloaded equals operator, allows the user to * set the value of the SmartPtr from a raw pointer */ SmartPtr< T > &operator=(T *rhs) { return SetFromRawPtr_(rhs); } /** Overloaded equals operator, allows the user to * set the value of the SmartPtr from another * SmartPtr */ SmartPtr< T > &operator=(const SmartPtr< T > &rhs) { return SetFromSmartPtr_(rhs); } /** Overloaded equality comparison operator, allows the * user to compare the value of two SmartPtrs */ template < class U1, class U2 > friend bool operator==(const SmartPtr< U1 > &lhs, const SmartPtr< U2 > &rhs); /** Overloaded equality comparison operator, allows the * user to compare the value of a SmartPtr with a raw pointer. */ template < class U1, class U2 > friend bool operator==(const SmartPtr< U1 > &lhs, U2 *raw_rhs); /** Overloaded equality comparison operator, allows the * user to compare the value of a raw pointer with a SmartPtr. */ template < class U1, class U2 > friend bool operator==(U1 *lhs, const SmartPtr< U2 > &raw_rhs); /** Overloaded in-equality comparison operator, allows the * user to compare the value of two SmartPtrs */ template < class U1, class U2 > friend bool operator!=(const SmartPtr< U1 > &lhs, const SmartPtr< U2 > &rhs); /** Overloaded in-equality comparison operator, allows the * user to compare the value of a SmartPtr with a raw pointer. */ template < class U1, class U2 > friend bool operator!=(const SmartPtr< U1 > &lhs, U2 *raw_rhs); /** Overloaded in-equality comparison operator, allows the * user to compare the value of a SmartPtr with a raw pointer. */ template < class U1, class U2 > friend bool operator!=(U1 *lhs, const SmartPtr< U2 > &raw_rhs); //@} }; template < class U1, class U2 > bool ComparePointers(const U1 *lhs, const U2 *rhs) { if (lhs == rhs) { return true; } // If lhs and rhs point to the same object with different interfaces // U1 and U2, we cannot guarantee that the value of the pointers will // be equivalent. We can guarantee this if we convert to void*. return static_cast< const void * >(lhs) == static_cast< const void * >(rhs); } } // namespace Coin //############################################################################# /**@name SmartPtr friends that are overloaded operators, so they are not in the Coin namespace. */ //@{ template < class U1, class U2 > bool operator==(const Coin::SmartPtr< U1 > &lhs, const Coin::SmartPtr< U2 > &rhs) { return Coin::ComparePointers(lhs.GetRawPtr(), rhs.GetRawPtr()); } template < class U1, class U2 > bool operator==(const Coin::SmartPtr< U1 > &lhs, U2 *raw_rhs) { return Coin::ComparePointers(lhs.GetRawPtr(), raw_rhs); } template < class U1, class U2 > bool operator==(U1 *raw_lhs, const Coin::SmartPtr< U2 > &rhs) { return Coin::ComparePointers(raw_lhs, rhs.GetRawPtr()); } template < class U1, class U2 > bool operator!=(const Coin::SmartPtr< U1 > &lhs, const Coin::SmartPtr< U2 > &rhs) { return !operator==(lhs, rhs); } template < class U1, class U2 > bool operator!=(const Coin::SmartPtr< U1 > &lhs, U2 *raw_rhs) { return !operator==(lhs, raw_rhs); } template < class U1, class U2 > bool operator!=(U1 *raw_lhs, const Coin::SmartPtr< U2 > &rhs) { return !operator==(raw_lhs, rhs); } //@} #define CoinReferencedObject Coin::ReferencedObject #define CoinSmartPtr Coin::SmartPtr #define CoinComparePointers Coin::ComparePointers #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveSingleton.cpp0000644000175200017520000010012113414454441020551 0ustar coincoin/* $Id: CoinPresolveSingleton.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #include "CoinPresolveEmpty.hpp" // for DROP_COL/DROP_ROW #include "CoinPresolveFixed.hpp" #include "CoinPresolveSingleton.hpp" #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #include "CoinPresolvePsdebug.hpp" #endif #include "CoinMessage.hpp" #include "CoinFinite.hpp" /* * Original comment: * * Transfers singleton row bound information to the corresponding column bounds. * What I refer to as a row singleton would be called a doubleton * in the paper, since my terminology doesn't refer to the slacks. * In terms of the paper, we transfer the bounds of the slack onto * the variable (vii) and then "substitute" the slack out of the problem * (which is a noop). */ /* Given blow(i) <= a(ij)x(j) <= b(i), we can transfer the bounds enforced by the constraint to the column bounds l(j) and u(j) on x(j) and delete the row. You can think of this as a specialised instance of doubleton_action, where the target variable is the logical that transforms an inequality to an equality. Since the system doesn't have logicals at this point, the row is a singleton. At some time in the past, the main loop was written to scan all rows but was limited in the number of rows it could process in one call. The notFinished parameter is the only remaining vestige of this behaviour and should probably be removed. For now, make sure it's forced to false for the benefit of code that looks at the returned value. -- lh, 121015 -- */ const CoinPresolveAction * slack_doubleton_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next, bool ¬Finished) { #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 #if PRESOLVE_DEBUG > 0 std::cout << "Entering slack_doubleton_action::presolve." << std::endl; #endif #if PRESOLVE_CONSISTENCY > 0 presolve_consistent(prob); presolve_links_ok(prob); presolve_check_sol(prob); presolve_check_nbasic(prob); #endif #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int startEmptyRows = prob->countEmptyRows(); int startEmptyColumns = prob->countEmptyCols(); #if COIN_PRESOLVE_TUNING > 0 double startTime = 0.0; if (prob->tuning_) { startTime = CoinCpuTime(); } #endif #endif notFinished = false; /* Unpack the problem representation. */ double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; double *clo = prob->clo_; double *cup = prob->cup_; double *rowels = prob->rowels_; const int *hcol = prob->hcol_; const CoinBigIndex *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; double *rlo = prob->rlo_; double *rup = prob->rup_; /* Rowstat is used to decide if the solution is present. */ unsigned char *rowstat = prob->rowstat_; double *acts = prob->acts_; double *sol = prob->sol_; const unsigned char *integerType = prob->integerType_; const double ztolzb = prob->ztolzb_; int numberLook = prob->numberRowsToDo_; int *look = prob->rowsToDo_; bool fixInfeasibility = ((prob->presolveOptions_ & 0x4000) != 0); action *actions = new action[numberLook]; int nactions = 0; int *fixed_cols = prob->usefulColumnInt_; int nfixed_cols = 0; bool infeas = false; /* Walk the rows looking for singletons. */ for (int iLook = 0; iLook < numberLook; iLook++) { int i = look[iLook]; if (hinrow[i] != 1) continue; int j = hcol[mrstrt[i]]; double aij = rowels[mrstrt[i]]; double lo = rlo[i]; double up = rup[i]; double abs_aij = fabs(aij); /* A tiny value of a(ij) invites numerical error, since the new bound will be (something)/a(ij). Columns that are already fixed are also uninteresting. */ if (abs_aij < ZTOLDP2) continue; if (fabs(cup[j] - clo[j]) < ztolzb) continue; PRESOLVE_DETAIL_PRINT(printf("pre_singleton %dC %dR E\n", j, i)); /* Get down to work. First create the postsolve action for row i / x(j). */ action *s = &actions[nactions]; nactions++; s->col = j; s->clo = clo[j]; s->cup = cup[j]; s->row = i; s->rlo = rlo[i]; s->rup = rup[i]; s->coeff = aij; #if PRESOLVE_DEBUG > 1 std::cout << " removing row " << i << ": " << rlo[i] << " <= " << aij << "*x(" << j << ") <= " << rup[i] << std::endl; #endif /* Do the work of bounds transfer. Starting with blow(i) <= a(ij)x(j) <= b(i), we end up with blow(i)/a(ij) <= x(j) <= b(i)/a(ij) a(ij) > 0 blow(i)/a(ij) >= x(j) >= b(i)/a(ij) a(ij) < 0 The code deals with a(ij) < 0 by swapping and negating the row bounds and calculating with |a(ij)|. Be careful not to convert finite infinity to finite, or vice versa. */ if (aij < 0.0) { CoinSwap(lo, up); lo = -lo; up = -up; } if (lo <= -PRESOLVE_INF) lo = -PRESOLVE_INF; else { lo /= abs_aij; if (lo <= -PRESOLVE_INF) lo = -PRESOLVE_INF; } if (up > PRESOLVE_INF) up = PRESOLVE_INF; else { up /= abs_aij; if (up > PRESOLVE_INF) up = PRESOLVE_INF; } #if PRESOLVE_DEBUG > 2 std::cout << " l(" << j << ") = " << clo[j] << " ==> " << lo << ", delta " << (lo - clo[j]) << std::endl; std::cout << " u(" << j << ") = " << cup[j] << " ==> " << up << ", delta " << (cup[j] - up) << std::endl; #endif /* lo and up are now the new l(j) and u(j), respectively. If they're better than the existing bounds, update. Have a care with integer variables --- don't let numerical inaccuracy pull us off an integral bound. */ if (clo[j] < lo && lo > -1.0e100) { // If integer be careful if (integerType[j]) { if (fabs(lo - floor(lo + 0.5)) < 0.000001) lo = floor(lo + 0.5); if (clo[j] < lo) clo[j] = lo; } else { clo[j] = lo; } } if (cup[j] > up && up < 1.0e100) { if (integerType[j]) { if (fabs(up - floor(up + 0.5)) < 0.000001) up = floor(up + 0.5); if (cup[j] > up) cup[j] = up; } else { cup[j] = up; } } /* Is x(j) now fixed? Remember it for later. */ if (fabs(cup[j] - clo[j]) < ZTOLDP) { fixed_cols[nfixed_cols++] = j; } /* Is x(j) infeasible? Fix it if we're within the feasibility tolerance, or if the user was so foolish as to request repair of infeasibility. Integer values are preferred, if close enough. If the infeasibility is too large to ignore, mark the problem infeasible and head for the exit. */ if (lo > up) { if (lo <= up + prob->feasibilityTolerance_ || fixInfeasibility) { double nearest = floor(lo + 0.5); if (fabs(nearest - lo) < 2.0 * prob->feasibilityTolerance_) { lo = nearest; up = nearest; } else { lo = up; } clo[j] = lo; cup[j] = up; } else { prob->status_ |= 1; prob->messageHandler()->message(COIN_PRESOLVE_COLINFEAS, prob->messages()) << j << lo << up << CoinMessageEol; infeas = true; break; } } #if PRESOLVE_DEBUG > 1 printf("SINGLETON R-%d C-%d\n", i, j); #endif /* Remove the row from the row-major representation. */ hinrow[i] = 0; PRESOLVE_REMOVE_LINK(prob->rlink_, i); rlo[i] = 0.0; rup[i] = 0.0; /* Remove the row from this col in the column-major representation. It can happen that this will empty the column, in which case we can delink it. If the column isn't empty, queue it for further processing. */ presolve_delete_from_col(i, j, mcstrt, hincol, hrow, colels); if (hincol[j] == 0) { PRESOLVE_REMOVE_LINK(prob->clink_, j); } else { prob->addCol(j); } /* Update the solution, if it's present. The trick is maintaining the right number of basic variables. We've deleted a row, so we need to reduce the basis by one. There's a corner case that doesn't seem to be covered. What happens if both x(j) and s(i) are nonbasic? The number of basic variables will not be reduced. This is admittedly a pathological situation: It implies that there's an existing bound l(j) or u(j) exactly equal to the bound imposed by this constraint, so that x(j) can be nonbasic at bound and the constraint can be simultaneously tight. -- lh, 121115 -- */ if (rowstat) { int basisChoice = 0; int numberBasic = 0; double movement = 0; if (prob->columnIsBasic(j)) { numberBasic++; basisChoice = 2; // move to row to keep consistent } if (prob->rowIsBasic(i)) numberBasic++; PRESOLVEASSERT(numberBasic > 0); if (sol[j] <= clo[j] + ztolzb) { movement = clo[j] - sol[j]; sol[j] = clo[j]; prob->setColumnStatus(j, CoinPrePostsolveMatrix::atLowerBound); } else if (sol[j] >= cup[j] - ztolzb) { movement = cup[j] - sol[j]; sol[j] = cup[j]; prob->setColumnStatus(j, CoinPrePostsolveMatrix::atUpperBound); } else { basisChoice = 1; } if (numberBasic > 1 || basisChoice == 1) prob->setColumnStatus(j, CoinPrePostsolveMatrix::basic); else if (basisChoice == 2) prob->setRowStatus(i, CoinPrePostsolveMatrix::basic); if (movement) { const CoinBigIndex &kcs = mcstrt[j]; const CoinBigIndex kce = kcs + hincol[j]; for (CoinBigIndex kcol = kcs; kcol < kce; kcol++) { int k = hrow[kcol]; PRESOLVEASSERT(hinrow[k] > 0); acts[k] += movement * colels[kcol]; } } } } /* Done with processing. Time to deal with the results. First add the postsolve actions for the singletons to the postsolve list. Then call remove_fixed_action to handle variables that were fixed during the loop. (We've already adjusted the solution, so make_fixed_action is not needed.) */ if (!infeas && nactions) { #if PRESOLVE_SUMMARY std::cout << "SINGLETON ROWS: " << nactions << std::endl; #endif action *save_actions = new action[nactions]; CoinMemcpyN(actions, nactions, save_actions); next = new slack_doubleton_action(nactions, save_actions, next); if (nfixed_cols) next = remove_fixed_action::presolve(prob, fixed_cols, nfixed_cols, next); } delete[] actions; #if COIN_PRESOLVE_TUNING > 0 double thisTime = 0.0; if (prob->tuning_) thisTime = CoinCpuTime(); #endif #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_consistent(prob); presolve_links_ok(prob); presolve_check_sol(prob); presolve_check_nbasic(prob); #endif #if PRESOLVE_DEBUG > 0 || COIN_PRESOLVE_TUNING > 0 int droppedRows = prob->countEmptyRows() - startEmptyRows; int droppedColumns = prob->countEmptyCols() - startEmptyColumns; std::cout << "Leaving slack_doubleton_action::presolve, " << droppedRows << " rows, " << droppedColumns << " columns dropped"; #if COIN_PRESOLVE_TUNING > 0 std::cout << " in " << (thisTime - startTime) << "s, total " << (thisTime - prob->startTime_); #endif std::cout << "." << std::endl; #endif return (next); } void slack_doubleton_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_; const int nactions = nactions_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; CoinBigIndex *link = prob->link_; double *clo = prob->clo_; double *cup = prob->cup_; double *sol = prob->sol_; double *rcosts = prob->rcosts_; unsigned char *colstat = prob->colstat_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *acts = prob->acts_; double *rowduals = prob->rowduals_; #if PRESOLVE_DEBUG char *rdone = prob->rdone_; std::cout << "Entering slack_doubleton_action::postsolve, " << nactions << " constraints to process." << std::endl; presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #endif CoinBigIndex &free_list = prob->free_list_; const double ztolzb = prob->ztolzb_; for (const action *f = &actions[nactions - 1]; actions <= f; f--) { int irow = f->row; double lo0 = f->clo; double up0 = f->cup; double coeff = f->coeff; int jcol = f->col; rlo[irow] = f->rlo; rup[irow] = f->rup; clo[jcol] = lo0; cup[jcol] = up0; acts[irow] = coeff * sol[jcol]; /* Create the row and restore the single coefficient, linking the new coefficient at the start of the column. */ { CoinBigIndex k = free_list; assert(k >= 0 && k < prob->bulk0_); free_list = link[free_list]; hrow[k] = irow; colels[k] = coeff; link[k] = mcstrt[jcol]; mcstrt[jcol] = k; hincol[jcol]++; } /* Since we are adding a row, we have to set the row status and dual to satisfy complimentary slackness. We may also have to modify the column status and reduced cost if bounds have been relaxed. */ if (!colstat) { // ???? rowduals[irow] = 0.0; } else { if (prob->columnIsBasic(jcol)) { /* The variable is basic, hence the slack must be basic, hence the dual for the row is zero. Relaxing the bounds on a basic variable doesn't change anything. */ prob->setRowStatus(irow, CoinPrePostsolveMatrix::basic); rowduals[irow] = 0.0; } else if ((fabs(sol[jcol] - lo0) <= ztolzb && rcosts[jcol] >= 0) || (fabs(sol[jcol] - up0) <= ztolzb && rcosts[jcol] <= 0)) { /* The variable is nonbasic and the sign of the reduced cost is correct for the bound. Again, the slack will be basic and the dual zero. */ prob->setRowStatus(irow, CoinPrePostsolveMatrix::basic); rowduals[irow] = 0.0; } else if (!(fabs(sol[jcol] - lo0) <= ztolzb) && !(fabs(sol[jcol] - up0) <= ztolzb)) { /* The variable was not basic but transferring bounds back to the constraint has relaxed the column bounds. The variable will need to be made basic. The constraint must then be tight and the dual must be set so that the reduced cost of the variable becomes zero. */ prob->setColumnStatus(jcol, CoinPrePostsolveMatrix::basic); prob->setRowStatusUsingValue(irow); rowduals[irow] = rcosts[jcol] / coeff; rcosts[jcol] = 0.0; } else { /* The variable is at bound, but the reduced cost is wrong. Again set the row dual to bring the reduced cost to zero. This implies that the constraint is tight and the slack will be nonbasic. */ prob->setColumnStatus(jcol, CoinPrePostsolveMatrix::basic); prob->setRowStatusUsingValue(irow); rowduals[irow] = rcosts[jcol] / coeff; rcosts[jcol] = 0.0; } } #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 rdone[irow] = SLACK_DOUBLETON; #endif } #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 presolve_check_threads(prob); presolve_check_sol(prob, 2, 2, 2); presolve_check_nbasic(prob); #endif #if PRESOLVE_DEBUG > 0 std::cout << "Leaving slack_doubleton_action::postsolve." << std::endl; #endif return; } /* If we have a variable with one entry and no cost then we can transform the row from E to G etc. If there is a row objective region then we may be able to do this even with a cost. */ const CoinPresolveAction * slack_singleton_action::presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next, double *rowObjective) { double startTime = 0.0; int startEmptyRows = 0; int startEmptyColumns = 0; if (prob->tuning_) { startTime = CoinCpuTime(); startEmptyRows = prob->countEmptyRows(); startEmptyColumns = prob->countEmptyCols(); } double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; //int ncols = prob->ncols_ ; double *clo = prob->clo_; double *cup = prob->cup_; double *rowels = prob->rowels_; int *hcol = prob->hcol_; CoinBigIndex *mrstrt = prob->mrstrt_; int *hinrow = prob->hinrow_; int nrows = prob->nrows_; double *rlo = prob->rlo_; double *rup = prob->rup_; // Existence of unsigned char *rowstat = prob->rowstat_; double *acts = prob->acts_; double *sol = prob->sol_; const unsigned char *integerType = prob->integerType_; const double ztolzb = prob->ztolzb_; double *dcost = prob->cost_; //const double maxmin = prob->maxmin_ ; #if PRESOLVE_DEBUG std::cout << "Entering slack_singleton_action::presolve." << std::endl; presolve_check_sol(prob); presolve_check_nbasic(prob); #endif int numberLook = prob->numberColsToDo_; int iLook; int *look = prob->colsToDo_; // Make sure we allocate at least one action int maxActions = CoinMin(numberLook, nrows / 10) + 1; action *actions = new action[maxActions]; int nactions = 0; int *fixed_cols = new int[numberLook]; int nfixed_cols = 0; int nWithCosts = 0; double costOffset = 0.0; for (iLook = 0; iLook < numberLook; iLook++) { int iCol = look[iLook]; if (dcost[iCol]) continue; if (hincol[iCol] == 1) { int iRow = hrow[mcstrt[iCol]]; double coeff = colels[mcstrt[iCol]]; double acoeff = fabs(coeff); if (acoeff < ZTOLDP2) continue; // don't bother with fixed cols if (fabs(cup[iCol] - clo[iCol]) < ztolzb) continue; if (integerType && integerType[iCol]) { // only possible if everything else integer and unit coefficient // check everything else a bit later if (acoeff != 1.0) continue; double currentLower = rlo[iRow]; double currentUpper = rup[iRow]; if (coeff == 1.0 && currentLower == 1.0 && currentUpper == 1.0) { // leave if integer slack on sum x == 1 bool allInt = true; for (CoinBigIndex j = mrstrt[iRow]; j < mrstrt[iRow] + hinrow[iRow]; j++) { int iColumn = hcol[j]; double value = fabs(rowels[j]); if (!integerType[iColumn] || value != 1.0) { allInt = false; break; } } if (allInt) continue; // leave as may help search } } if (!prob->colProhibited(iCol)) { double currentLower = rlo[iRow]; double currentUpper = rup[iRow]; if (!rowObjective) { if (dcost[iCol]) continue; } else if ((dcost[iCol] && currentLower != currentUpper) || rowObjective[iRow]) { continue; } double newLower = currentLower; double newUpper = currentUpper; if (coeff < 0.0) { if (currentUpper > 1.0e20 || cup[iCol] > 1.0e20) { newUpper = COIN_DBL_MAX; } else { newUpper -= coeff * cup[iCol]; if (newUpper > 1.0e20) newUpper = COIN_DBL_MAX; } if (currentLower < -1.0e20 || clo[iCol] < -1.0e20) { newLower = -COIN_DBL_MAX; } else { newLower -= coeff * clo[iCol]; if (newLower < -1.0e20) newLower = -COIN_DBL_MAX; } } else { if (currentUpper > 1.0e20 || clo[iCol] < -1.0e20) { newUpper = COIN_DBL_MAX; } else { newUpper -= coeff * clo[iCol]; if (newUpper > 1.0e20) newUpper = COIN_DBL_MAX; } if (currentLower < -1.0e20 || cup[iCol] > 1.0e20) { newLower = -COIN_DBL_MAX; } else { newLower -= coeff * cup[iCol]; if (newLower < -1.0e20) newLower = -COIN_DBL_MAX; } } if (integerType && integerType[iCol]) { // only possible if everything else integer if (newLower > -1.0e30) { if (newLower != floor(newLower + 0.5)) continue; } if (newUpper < 1.0e30) { if (newUpper != floor(newUpper + 0.5)) continue; } bool allInt = true; for (CoinBigIndex j = mrstrt[iRow]; j < mrstrt[iRow] + hinrow[iRow]; j++) { int iColumn = hcol[j]; double value = fabs(rowels[j]); if (!integerType[iColumn] || value != floor(value + 0.5)) { allInt = false; break; } } if (!allInt) continue; // no good } if (nactions >= maxActions) { maxActions += CoinMin(numberLook - iLook, maxActions); action *temp = new action[maxActions]; memcpy(temp, actions, nactions * sizeof(action)); // changed as 4.6 compiler bug! CoinMemcpyN(actions,nactions,temp) ; delete[] actions; actions = temp; } action *s = &actions[nactions]; nactions++; s->col = iCol; s->clo = clo[iCol]; s->cup = cup[iCol]; s->row = iRow; s->rlo = rlo[iRow]; s->rup = rup[iRow]; s->coeff = coeff; presolve_delete_from_row(iRow, iCol, mrstrt, hinrow, hcol, rowels); if (!hinrow[iRow]) PRESOLVE_REMOVE_LINK(prob->rlink_, iRow); // put row on stack of things to do next time prob->addRow(iRow); #ifdef PRINTCOST if (rowObjective && dcost[iCol]) { printf("Singleton %d had coeff of %g in row %d - bounds %g %g - cost %g\n", iCol, coeff, iRow, clo[iCol], cup[iCol], dcost[iCol]); printf("Row bounds were %g %g now %g %g\n", rlo[iRow], rup[iRow], newLower, newUpper); } #endif // Row may be redundant but let someone else do that rlo[iRow] = newLower; rup[iRow] = newUpper; if (rowstat && sol) { // update solution and basis if ((sol[iCol] < cup[iCol] - ztolzb && sol[iCol] > clo[iCol] + ztolzb) || prob->columnIsBasic(iCol)) prob->setRowStatus(iRow, CoinPrePostsolveMatrix::basic); prob->setColumnStatusUsingValue(iCol); } // Force column to zero clo[iCol] = 0.0; cup[iCol] = 0.0; if (rowObjective && dcost[iCol]) { rowObjective[iRow] = -dcost[iCol] / coeff; nWithCosts++; // adjust offset costOffset += currentLower * rowObjective[iRow]; prob->dobias_ -= currentLower * rowObjective[iRow]; } if (sol) { double movement; if (fabs(sol[iCol] - clo[iCol]) < fabs(sol[iCol] - cup[iCol])) { movement = clo[iCol] - sol[iCol]; sol[iCol] = clo[iCol]; } else { movement = cup[iCol] - sol[iCol]; sol[iCol] = cup[iCol]; } if (movement) acts[iRow] += movement * coeff; } /* Remove the row from this col in the col rep.and delink it. */ presolve_delete_from_col(iRow, iCol, mcstrt, hincol, hrow, colels); assert(hincol[iCol] == 0); PRESOLVE_REMOVE_LINK(prob->clink_, iCol); //clo[iCol] = 0.0 ; //cup[iCol] = 0.0 ; fixed_cols[nfixed_cols++] = iCol; //presolve_consistent(prob) ; } } } if (nactions) { #if PRESOLVE_SUMMARY printf("SINGLETON COLS: %d\n", nactions); #endif #ifdef COIN_DEVELOP printf("%d singletons, %d with costs - offset %g\n", nactions, nWithCosts, costOffset); #endif action *save_actions = new action[nactions]; CoinMemcpyN(actions, nactions, save_actions); next = new slack_singleton_action(nactions, save_actions, next); if (nfixed_cols) next = make_fixed_action::presolve(prob, fixed_cols, nfixed_cols, true, // arbitrary next); } delete[] actions; delete[] fixed_cols; if (prob->tuning_) { double thisTime = CoinCpuTime(); int droppedRows = prob->countEmptyRows() - startEmptyRows; int droppedColumns = prob->countEmptyCols() - startEmptyColumns; printf("CoinPresolveSingleton(3) - %d rows, %d columns dropped in time %g, total %g\n", droppedRows, droppedColumns, thisTime - startTime, thisTime - prob->startTime_); } #if PRESOLVE_DEBUG presolve_check_sol(prob); presolve_check_nbasic(prob); std::cout << "Leaving slack_singleton_action::presolve." << std::endl; #endif return (next); } void slack_singleton_action::postsolve(CoinPostsolveMatrix *prob) const { const action *const actions = actions_; const int nactions = nactions_; double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; int *hincol = prob->hincol_; CoinBigIndex *link = prob->link_; // int ncols = prob->ncols_ ; //double *rowels = prob->rowels_ ; //int *hcol = prob->hcol_ ; //CoinBigIndex *mrstrt = prob->mrstrt_ ; //int *hinrow = prob->hinrow_ ; double *clo = prob->clo_; double *cup = prob->cup_; double *rlo = prob->rlo_; double *rup = prob->rup_; double *sol = prob->sol_; double *rcosts = prob->rcosts_; double *acts = prob->acts_; double *rowduals = prob->rowduals_; double *dcost = prob->cost_; //const double maxmin = prob->maxmin_ ; unsigned char *colstat = prob->colstat_; // unsigned char *rowstat = prob->rowstat_ ; #if PRESOLVE_DEBUG char *rdone = prob->rdone_; std::cout << "Entering slack_singleton_action::postsolve." << std::endl; presolve_check_sol(prob); presolve_check_nbasic(prob); #endif CoinBigIndex &free_list = prob->free_list_; const double ztolzb = prob->ztolzb_; #ifdef CHECK_ONE_ROW { double act = 0.0; for (int i = 0; i < prob->ncols_; i++) { double solV = sol[i]; assert(solV >= clo[i] - ztolzb && solV <= cup[i] + ztolzb); int j = mcstrt[i]; for (int k = 0; k < hincol[i]; k++) { if (hrow[j] == CHECK_ONE_ROW) { act += colels[j] * solV; } j = link[j]; } } assert(act >= rlo[CHECK_ONE_ROW] - ztolzb && act <= rup[CHECK_ONE_ROW] + ztolzb); printf("start %g %g %g %g\n", rlo[CHECK_ONE_ROW], act, acts[CHECK_ONE_ROW], rup[CHECK_ONE_ROW]); } #endif for (const action *f = &actions[nactions - 1]; actions <= f; f--) { int iRow = f->row; double lo0 = f->clo; double up0 = f->cup; double coeff = f->coeff; int iCol = f->col; assert(!hincol[iCol]); #ifdef CHECK_ONE_ROW if (iRow == CHECK_ONE_ROW) printf("Col %d coeff %g old bounds %g,%g new %g,%g - new rhs %g,%g - act %g\n", iCol, coeff, clo[iCol], cup[iCol], lo0, up0, f->rlo, f->rup, acts[CHECK_ONE_ROW]); #endif rlo[iRow] = f->rlo; rup[iRow] = f->rup; clo[iCol] = lo0; cup[iCol] = up0; double movement = 0.0; // acts was without coefficient - adjust acts[iRow] += coeff * sol[iCol]; if (acts[iRow] < rlo[iRow] - ztolzb) movement = rlo[iRow] - acts[iRow]; else if (acts[iRow] > rup[iRow] + ztolzb) movement = rup[iRow] - acts[iRow]; double cMove = movement / coeff; sol[iCol] += cMove; acts[iRow] += movement; if (!dcost[iCol]) { // and to get column feasible cMove = 0.0; if (sol[iCol] > cup[iCol] + ztolzb) cMove = cup[iCol] - sol[iCol]; else if (sol[iCol] < clo[iCol] - ztolzb) cMove = clo[iCol] - sol[iCol]; sol[iCol] += cMove; acts[iRow] += cMove * coeff; /* * Have to compute status. At most one can be basic. It's possible that both are nonbasic and nonbasic status must change. */ if (colstat) { int numberBasic = 0; if (prob->columnIsBasic(iCol)) numberBasic++; if (prob->rowIsBasic(iRow)) numberBasic++; #ifdef COIN_DEVELOP if (numberBasic > 1) printf("odd in singleton\n"); #endif if (sol[iCol] > clo[iCol] + ztolzb && sol[iCol] < cup[iCol] - ztolzb) { prob->setColumnStatus(iCol, CoinPrePostsolveMatrix::basic); prob->setRowStatusUsingValue(iRow); } else if (acts[iRow] > rlo[iRow] + ztolzb && acts[iRow] < rup[iRow] - ztolzb) { prob->setRowStatus(iRow, CoinPrePostsolveMatrix::basic); prob->setColumnStatusUsingValue(iCol); } else if (numberBasic) { prob->setRowStatus(iRow, CoinPrePostsolveMatrix::basic); prob->setColumnStatusUsingValue(iCol); } else { prob->setRowStatusUsingValue(iRow); prob->setColumnStatusUsingValue(iCol); } } #if PRESOLVE_DEBUG > 1 printf("SLKSING: %d = %g restored %d lb = %g ub = %g.\n", iCol, sol[iCol], prob->getColumnStatus(iCol), clo[iCol], cup[iCol]); #endif } else { // must have been equality row assert(rlo[iRow] == rup[iRow]); double cost = rcosts[iCol]; // adjust for coefficient cost -= rowduals[iRow] * coeff; bool basic = true; if (fabs(sol[iCol] - cup[iCol]) < ztolzb && cost < -1.0e-6) basic = false; else if (fabs(sol[iCol] - clo[iCol]) < ztolzb && cost > 1.0e-6) basic = false; //printf("Singleton %d had coeff of %g in row %d (dual %g) - bounds %g %g - cost %g, (dj %g)\n", // iCol,coeff,iRow,rowduals[iRow],clo[iCol],cup[iCol],dcost[iCol],rcosts[iCol]) ; //if (prob->columnIsBasic(iCol)) //printf("column basic! ") ; //if (prob->rowIsBasic(iRow)) //printf("row basic ") ; //printf("- make column basic %s\n",basic ? "yes" : "no") ; if (basic && !prob->rowIsBasic(iRow)) { #ifdef PRINTCOST printf("Singleton %d had coeff of %g in row %d (dual %g) - bounds %g %g - cost %g, (dj %g - new %g)\n", iCol, coeff, iRow, rowduals[iRow], clo[iCol], cup[iCol], dcost[iCol], rcosts[iCol], cost); #endif #ifdef COIN_DEVELOP if (prob->columnIsBasic(iCol)) printf("column basic!\n"); #endif basic = false; } if (fabs(rowduals[iRow]) > 1.0e-6 && prob->rowIsBasic(iRow)) basic = true; if (basic) { // Make basic have zero reduced cost rowduals[iRow] = rcosts[iCol] / coeff; rcosts[iCol] = 0.0; } else { rcosts[iCol] = cost; //rowduals[iRow]=0.0 ; } if (colstat) { if (basic) { if (!prob->rowIsBasic(iRow)) { #if 0 // find column in row int jCol=-1 ; //for (CoinBigIndex j=mrstrt[iRow];jncols0_;k++) { CoinBigIndex j=mcstrt[k] ; for (int i=0;isetColumnStatus(iCol, CoinPrePostsolveMatrix::basic); } prob->setRowStatusUsingValue(iRow); } else { //prob->setRowStatus(iRow,CoinPrePostsolveMatrix::basic) ; prob->setColumnStatusUsingValue(iCol); } } } #if 0 int nb=0 ; int kk ; for (kk=0;kknrows_;kk++) if (prob->rowIsBasic(kk)) nb++ ; for (kk=0;kkncols_;kk++) if (prob->columnIsBasic(kk)) nb++ ; assert (nb==prob->nrows_) ; #endif // add new element { CoinBigIndex k = free_list; assert(k >= 0 && k < prob->bulk0_); free_list = link[free_list]; hrow[k] = iRow; colels[k] = coeff; link[k] = mcstrt[iCol]; mcstrt[iCol] = k; } hincol[iCol]++; // right? #ifdef CHECK_ONE_ROW { double act = 0.0; for (int i = 0; i < prob->ncols_; i++) { double solV = sol[i]; assert(solV >= clo[i] - ztolzb && solV <= cup[i] + ztolzb); int j = mcstrt[i]; for (int k = 0; k < hincol[i]; k++) { if (hrow[j] == CHECK_ONE_ROW) { //printf("c %d el %g sol %g old act %g new %g\n", // i,colels[j],solV,act, act+colels[j]*solV) ; act += colels[j] * solV; } j = link[j]; } } assert(act >= rlo[CHECK_ONE_ROW] - ztolzb && act <= rup[CHECK_ONE_ROW] + ztolzb); printf("rhs now %g %g %g %g\n", rlo[CHECK_ONE_ROW], act, acts[CHECK_ONE_ROW], rup[CHECK_ONE_ROW]); } #endif #if PRESOLVE_DEBUG rdone[iRow] = SLACK_SINGLETON; #endif } #if PRESOLVE_DEBUG presolve_check_sol(prob); presolve_check_nbasic(prob); std::cout << "Leaving slack_singleton_action::postsolve." << std::endl; #endif return; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPostsolveMatrix.cpp0000644000175200017520000001336013414454441020262 0ustar coincoin/* $Id: CoinPostsolveMatrix.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #if PRESOLVE_DEBUG || PRESOLVE_CONSISTENCY #include "CoinPresolvePsdebug.hpp" #endif /*! \file This file contains methods for CoinPostsolveMatrix, the object used during postsolve transformations. */ /* Constructor and destructor for CoinPostsolveMatrix. */ /* Default constructor Postpone allocation of space until we actually load the object. */ CoinPostsolveMatrix::CoinPostsolveMatrix(int ncols_alloc, int nrows_alloc, CoinBigIndex nelems_alloc) : CoinPrePostsolveMatrix(ncols_alloc, nrows_alloc, nelems_alloc) , free_list_(0) , maxlink_(nelems_alloc) , link_(0) , cdone_(0) , rdone_(0) { /* nothing to do here */ return; } /* Destructor */ CoinPostsolveMatrix::~CoinPostsolveMatrix() { delete[] link_; delete[] cdone_; delete[] rdone_; return; } /* This routine loads a CoinPostsolveMatrix object from a CoinPresolveMatrix object. The CoinPresolveMatrix object will be stripped, its components transferred to the CoinPostsolveMatrix object, and the empty shell of the CoinPresolveObject will be destroyed. The routine expects an empty CoinPostsolveMatrix object, and will leak any memory already allocated. */ void CoinPostsolveMatrix::assignPresolveToPostsolve(CoinPresolveMatrix *&preObj) { /* Start with simple data --- allocated and current size. */ ncols0_ = preObj->ncols0_; nrows0_ = preObj->nrows0_; nelems0_ = preObj->nelems0_; bulk0_ = preObj->bulk0_; ncols_ = preObj->ncols_; nrows_ = preObj->nrows_; nelems_ = preObj->nelems_; /* Now bring over the column-major matrix and other problem data. */ mcstrt_ = preObj->mcstrt_; preObj->mcstrt_ = 0; hincol_ = preObj->hincol_; preObj->hincol_ = 0; hrow_ = preObj->hrow_; preObj->hrow_ = 0; colels_ = preObj->colels_; preObj->colels_ = 0; cost_ = preObj->cost_; preObj->cost_ = 0; originalOffset_ = preObj->originalOffset_; clo_ = preObj->clo_; preObj->clo_ = 0; cup_ = preObj->cup_; preObj->cup_ = 0; rlo_ = preObj->rlo_; preObj->rlo_ = 0; rup_ = preObj->rup_; preObj->rup_ = 0; originalColumn_ = preObj->originalColumn_; preObj->originalColumn_ = 0; originalRow_ = preObj->originalRow_; preObj->originalRow_ = 0; ztolzb_ = preObj->ztolzb_; ztoldj_ = preObj->ztoldj_; maxmin_ = preObj->maxmin_; /* Now the problem solution. Often this will be empty, but that's not a problem. */ sol_ = preObj->sol_; preObj->sol_ = 0; rowduals_ = preObj->rowduals_; preObj->rowduals_ = 0; acts_ = preObj->acts_; preObj->acts_ = 0; rcosts_ = preObj->rcosts_; preObj->rcosts_ = 0; colstat_ = preObj->colstat_; preObj->colstat_ = 0; rowstat_ = preObj->rowstat_; preObj->rowstat_ = 0; /* The CoinPostsolveMatrix comes with messages and a handler, but replace them with the versions from the CoinPresolveObject, in case they've been customized. Let preObj believe it's no longer responsible for the handler. */ if (defaultHandler_ == true) delete handler_; handler_ = preObj->handler_; preObj->defaultHandler_ = false; messages_ = preObj->messages_; /* Initialise the postsolve portions of this object. Which amounts to setting up the thread links to match the column-major matrix representation. This would be trivial except that the presolve matrix is loosely packed. We can either compress the matrix, or record the existing free space pattern. Bet that the latter is more efficient. Remember that mcstrt_[ncols_] actually points to the end of the bulk storage area, so when we process the last column in the bulk storage area, we'll add the free space block at the end of bulk storage to the free list. We need to allow for a 0x0 matrix here --- a pathological case, but it slips in when (for example) confirming a solution in an ILP code. */ free_list_ = NO_LINK; maxlink_ = bulk0_; link_ = new CoinBigIndex[maxlink_]; if (ncols_ > 0) { CoinBigIndex minkcs = -1; for (int j = 0; j < ncols_; j++) { CoinBigIndex kcs = mcstrt_[j]; int lenj = hincol_[j]; assert(lenj > 0); CoinBigIndex kce = kcs + lenj - 1; CoinBigIndex k; for (k = kcs; k < kce; k++) { link_[k] = k + 1; } link_[k++] = NO_LINK; if (preObj->clink_[j].pre == NO_LINK) { minkcs = kcs; } int nxtj = preObj->clink_[j].suc; assert(nxtj >= 0 && nxtj <= ncols_); CoinBigIndex nxtcs = mcstrt_[nxtj]; for (; k < nxtcs; k++) { link_[k] = free_list_; free_list_ = k; } } assert(minkcs >= 0); if (minkcs > 0) { for (CoinBigIndex k = 0; k < minkcs; k++) { link_[k] = free_list_; free_list_ = k; } } } else { for (CoinBigIndex k = 0; k < maxlink_; k++) { link_[k] = free_list_; free_list_ = k; } } /* That's it, preObj can die now. */ delete preObj; preObj = 0; #if PRESOLVE_DEBUG || PRESOLVE_CONSISTENCY /* These are used to track the action of postsolve transforms during debugging. */ cdone_ = new char[ncols0_]; CoinFillN(cdone_, ncols_, PRESENT_IN_REDUCED); CoinZeroN(cdone_ + ncols_, ncols0_ - ncols_); rdone_ = new char[nrows0_]; CoinFillN(rdone_, nrows_, PRESENT_IN_REDUCED); CoinZeroN(rdone_ + nrows_, nrows0_ - nrows_); #else cdone_ = 0; rdone_ = 0; #endif #if PRESOLVE_CONSISTENCY presolve_check_free_list(this, true); presolve_check_threads(this); #endif return; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveEmpty.hpp0000644000175200017520000000655713414454441017734 0ustar coincoin/* $Id: CoinPresolveEmpty.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolveEmpty_H #define CoinPresolveEmpty_H /*! \file Drop/reinsert empty rows/columns. */ const int DROP_ROW = 3; const int DROP_COL = 4; /*! \class drop_empty_cols_action \brief Physically removes empty columns in presolve, and reinserts empty columns in postsolve. Physical removal of rows and columns should be the last activities performed during presolve. Do them exactly once. The row-major matrix is not maintained by this transform. To physically drop the columns, CoinPrePostsolveMatrix::mcstrt_ and CoinPrePostsolveMatrix::hincol_ are compressed, along with column bounds, objective, and (if present) the column portions of the solution. This renumbers the columns. drop_empty_cols_action::presolve will reconstruct CoinPresolveMatrix::clink_. \todo Confirm correct behaviour with solution in presolve. */ class drop_empty_cols_action : public CoinPresolveAction { private: const int nactions_; struct action { double clo; double cup; double cost; double sol; int jcol; }; const action *const actions_; drop_empty_cols_action(int nactions, const action *const actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } public: const char *name() const { return ("drop_empty_cols_action"); } static const CoinPresolveAction *presolve(CoinPresolveMatrix *, const int *ecols, int necols, const CoinPresolveAction *); static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~drop_empty_cols_action() { deleteAction(actions_, action *); } }; /*! \class drop_empty_rows_action \brief Physically removes empty rows in presolve, and reinserts empty rows in postsolve. Physical removal of rows and columns should be the last activities performed during presolve. Do them exactly once. The row-major matrix is not maintained by this transform. To physically drop the rows, the rows are renumbered, excluding empty rows. This involves rewriting CoinPrePostsolveMatrix::hrow_ and compressing the row bounds and (if present) the row portions of the solution. \todo Confirm behaviour when a solution is present in presolve. */ class drop_empty_rows_action : public CoinPresolveAction { private: struct action { double rlo; double rup; int row; int fill_row; // which row was moved into position row to fill it }; const int nactions_; const action *const actions_; drop_empty_rows_action(int nactions, const action *actions, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) { } public: const char *name() const { return ("drop_empty_rows_action"); } static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; virtual ~drop_empty_rows_action() { deleteAction(actions_, action *); } }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveMatrix.cpp0000644000175200017520000004221013414454441020057 0ustar coincoin/* $Id: CoinPresolveMatrix.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include "CoinHelperFunctions.hpp" #include "CoinPresolveMatrix.hpp" #include "CoinTime.hpp" /*! \file This file contains methods for CoinPresolveMatrix, the object used during presolve transformations. */ /* Constructor and destructor for CoinPresolveMatrix. */ /* CoinPresolveMatrix constructor The constructor does very little, for much the same reasons that the CoinPrePostsolveMatrix constructor does little. Might as well wait until we load a matrix. In general, for presolve the allocated size can be equal to the size of the constraint matrix before presolve transforms are applied. (Presolve transforms are assumed to reduce the size of the constraint system.) But we need to keep the *_alloc parameters for compatibility with CoinPrePostsolveMatrix. */ CoinPresolveMatrix::CoinPresolveMatrix(int ncols_alloc, int nrows_alloc, CoinBigIndex nelems_alloc) : CoinPrePostsolveMatrix(ncols_alloc, nrows_alloc, nelems_alloc) , clink_(0) , rlink_(0) , dobias_(0.0) , mrstrt_(0) , hinrow_(0) , rowels_(0) , hcol_(0) , integerType_(0) , anyInteger_(false) , tuning_(false) , startTime_(0.0) , feasibilityTolerance_(0.0) , status_(-1) , pass_(0) , maxSubstLevel_(3) , colChanged_(0) , colsToDo_(0) , numberColsToDo_(0) , nextColsToDo_(0) , numberNextColsToDo_(0) , rowChanged_(0) , rowsToDo_(0) , numberRowsToDo_(0) , nextRowsToDo_(0) , numberNextRowsToDo_(0) , presolveOptions_(0) , anyProhibited_(false) , usefulRowInt_(NULL) , usefulRowDouble_(NULL) , usefulColumnInt_(NULL) , usefulColumnDouble_(NULL) , randomNumber_(NULL) , infiniteUp_(NULL) , sumUp_(NULL) , infiniteDown_(NULL) , sumDown_(NULL) { /* nothing to do here */ return; } /* CoinPresolveMatrix destructor. */ CoinPresolveMatrix::~CoinPresolveMatrix() { delete[] clink_; delete[] rlink_; delete[] mrstrt_; delete[] hinrow_; delete[] rowels_; delete[] hcol_; delete[] integerType_; delete[] rowChanged_; delete[] rowsToDo_; delete[] nextRowsToDo_; delete[] colChanged_; delete[] colsToDo_; delete[] nextColsToDo_; delete[] usefulRowInt_; delete[] usefulRowDouble_; delete[] usefulColumnInt_; delete[] usefulColumnDouble_; delete[] randomNumber_; delete[] infiniteUp_; delete[] sumUp_; delete[] infiniteDown_; delete[] sumDown_; return; } /* This routine loads a CoinPackedMatrix and proceeds to do the bulk of the initialisation for the PrePostsolve and Presolve objects. In the CoinPrePostsolveMatrix portion of the object, it initialises the column-major packed matrix representation and the arrays that track the motion of original columns and rows. In the CoinPresolveMatrix portion of the object, it initialises the row-major packed matrix representation, the arrays that assist in matrix storage management, and the arrays that track the rows and columns to be processed. Arrays are allocated to the requested size (ncols0_, nrow0_, nelems0_). The source matrix must be column ordered; it does not need to be gap-free. Bulk storage in the column-major (hrow_, colels_) and row-major (hcol_, rowels_) matrices is allocated at twice the required size so that we can expand columns and rows as needed. This is almost certainly grossly oversize, but (1) it's efficient, and (2) the utility routines which compact the bulk storage areas have no provision to reallocate. */ void CoinPresolveMatrix::setMatrix(const CoinPackedMatrix *mtx) { /* Check to make sure the matrix will fit and is column ordered. */ if (mtx->isColOrdered() == false) { throw CoinError("source matrix must be column ordered", "setMatrix", "CoinPrePostsolveMatrix"); } int numCols = mtx->getNumCols(); if (numCols > ncols0_) { throw CoinError("source matrix exceeds allocated capacity", "setMatrix", "CoinPrePostsolveMatrix"); } /* Acquire the actual size, but allocate the matrix storage to the requested capacity. The column-major rep is part of the PrePostsolve object, the row-major rep belongs to the Presolve object. */ ncols_ = numCols; nrows_ = mtx->getNumRows(); nelems_ = mtx->getNumElements(); bulk0_ = static_cast< CoinBigIndex >(bulkRatio_ * nelems0_); if (mcstrt_ == 0) mcstrt_ = new CoinBigIndex[ncols0_ + 1]; if (hincol_ == 0) hincol_ = new int[ncols0_ + 1]; if (hrow_ == 0) hrow_ = new int[bulk0_]; if (colels_ == 0) colels_ = new double[bulk0_]; if (mrstrt_ == 0) mrstrt_ = new CoinBigIndex[nrows0_ + 1]; if (hinrow_ == 0) hinrow_ = new int[nrows0_ + 1]; if (hcol_ == 0) hcol_ = new int[bulk0_]; if (rowels_ == 0) rowels_ = new double[bulk0_]; /* Grab the corresponding vectors from the source matrix. */ const CoinBigIndex *src_mcstrt = mtx->getVectorStarts(); const int *src_hincol = mtx->getVectorLengths(); const double *src_colels = mtx->getElements(); const int *src_hrow = mtx->getIndices(); /* Bulk copy the column starts and lengths. */ CoinMemcpyN(src_mcstrt, mtx->getSizeVectorStarts(), mcstrt_); CoinMemcpyN(src_hincol, mtx->getSizeVectorLengths(), hincol_); /* Copy the coefficients column by column in case there are gaps between the columns in the bulk storage area. The assert is just in case the gaps are *really* big. */ assert(src_mcstrt[ncols_] <= bulk0_); int j; for (j = 0; j < numCols; j++) { int lenj = src_hincol[j]; CoinBigIndex offset = mcstrt_[j]; CoinMemcpyN(src_colels + offset, lenj, colels_ + offset); CoinMemcpyN(src_hrow + offset, lenj, hrow_ + offset); } /* Now make a row-major copy. Start by counting the number of coefficients in each row; we can do this directly in hinrow. Given the number of coefficients in a row, we know how to lay out the bulk storage area. */ CoinZeroN(hinrow_, nrows0_ + 1); for (j = 0; j < ncols_; j++) { int *rowIndices = hrow_ + mcstrt_[j]; int lenj = hincol_[j]; for (int k = 0; k < lenj; k++) { int i = rowIndices[k]; hinrow_[i]++; } } /* Initialize mrstrt[i] to the start of row i+1. As we drop each coefficient and column index into the bulk storage arrays, we'll decrement and store. When we're done, mrstrt[i] will point to the start of row i, as it should. */ int totalCoeffs = 0; int i; for (i = 0; i < nrows_; i++) { totalCoeffs += hinrow_[i]; mrstrt_[i] = totalCoeffs; } mrstrt_[nrows_] = totalCoeffs; for (j = ncols_ - 1; j >= 0; j--) { int lenj = hincol_[j]; double *colCoeffs = colels_ + mcstrt_[j]; int *rowIndices = hrow_ + mcstrt_[j]; for (int k = 0; k < lenj; k++) { int ri; ri = rowIndices[k]; double aij = colCoeffs[k]; CoinBigIndex l = --mrstrt_[ri]; rowels_[l] = aij; hcol_[l] = j; } } /* Now the support structures. The entry for original column j should start out as j; similarly for row i. originalColumn_ and originalRow_ belong to the PrePostsolve object. */ if (originalColumn_ == 0) originalColumn_ = new int[ncols0_]; if (originalRow_ == 0) originalRow_ = new int[nrows0_]; for (j = 0; j < ncols0_; j++) originalColumn_[j] = j; for (i = 0; i < nrows0_; i++) originalRow_[i] = i; /* We have help to set up the clink_ and rlink_ vectors (aids for matrix bulk storage management). clink_ and rlink_ belong to the Presolve object. Once this is done, it's safe to set mrstrt_[nrows_] and mcstrt_[ncols_] to the full size of the bulk storage area. */ if (clink_ == 0) clink_ = new presolvehlink[ncols0_ + 1]; if (rlink_ == 0) rlink_ = new presolvehlink[nrows0_ + 1]; presolve_make_memlists(/*mcstrt_,*/ hincol_, clink_, ncols_); presolve_make_memlists(/*mrstrt_,*/ hinrow_, rlink_, nrows_); mcstrt_[ncols_] = bulk0_; mrstrt_[nrows_] = bulk0_; /* No rows or columns have been changed just yet. colChanged_ and rowChanged_ belong to the Presolve object. */ if (colChanged_ == 0) colChanged_ = new unsigned char[ncols0_]; CoinZeroN(colChanged_, ncols0_); if (rowChanged_ == 0) rowChanged_ = new unsigned char[nrows0_]; CoinZeroN(rowChanged_, nrows0_); /* Finally, allocate the various *ToDo arrays. These are used to track the rows and columns which should be processed in a given round of presolve transforms. These belong to the Presolve object. Setting number*ToDo to 0 is all the initialization that's required here. */ rowsToDo_ = new int[nrows0_]; numberRowsToDo_ = 0; nextRowsToDo_ = new int[nrows0_]; numberNextRowsToDo_ = 0; colsToDo_ = new int[ncols0_]; numberColsToDo_ = 0; nextColsToDo_ = new int[ncols0_]; numberNextColsToDo_ = 0; initializeStuff(); return; } /* Recompute ups and downs for a row (nonzero if infeasible). If oneRow == -1 then do all rows. */ int CoinPresolveMatrix::recomputeSums(int oneRow) { const int &numberRows = nrows_; const int &numberColumns = ncols_; const double *const columnLower = clo_; const double *const columnUpper = cup_; double *const rowLower = rlo_; double *const rowUpper = rup_; const double *element = rowels_; const int *column = hcol_; const CoinBigIndex *rowStart = mrstrt_; const int *rowLength = hinrow_; const double large = PRESOLVE_SMALL_INF; const double &tolerance = feasibilityTolerance_; const int iFirst = ((oneRow >= 0) ? oneRow : 0); const int iLast = ((oneRow >= 0) ? oneRow : numberRows); /* Open a loop to process rows of interest. */ int infeasible = 0; for (int iRow = iFirst; iRow < iLast; iRow++) { infiniteUp_[iRow] = 0; sumUp_[iRow] = 0.0; infiniteDown_[iRow] = 0; sumDown_[iRow] = 0.0; /* Compute finite and infinite contributions to row lhs upper and lower bounds for nonempty rows with at least one reasonable bound. */ if ((rowLower[iRow] > -large || rowUpper[iRow] < large) && rowLength[iRow] > 0) { int infiniteUpper = 0; int infiniteLower = 0; double maximumUp = 0.0; double maximumDown = 0.0; const CoinBigIndex &rStart = rowStart[iRow]; const CoinBigIndex rEnd = rStart + rowLength[iRow]; for (CoinBigIndex j = rStart; j < rEnd; ++j) { const double &value = element[j]; const int &iColumn = column[j]; const double &lj = columnLower[iColumn]; const double &uj = columnUpper[iColumn]; if (value > 0.0) { if (uj < large) maximumUp += uj * value; else ++infiniteUpper; if (lj > -large) maximumDown += lj * value; else ++infiniteLower; } else if (value < 0.0) { if (uj < large) maximumDown += uj * value; else ++infiniteLower; if (lj > -large) maximumUp += lj * value; else ++infiniteUpper; } } infiniteUp_[iRow] = infiniteUpper; sumUp_[iRow] = maximumUp; infiniteDown_[iRow] = infiniteLower; sumDown_[iRow] = maximumDown; double maxUp = maximumUp + infiniteUpper * large; double maxDown = maximumDown - infiniteLower * large; /* Check for redundant or infeasible row. */ if (maxUp <= rowUpper[iRow] + tolerance && maxDown >= rowLower[iRow] - tolerance) { infiniteUp_[iRow] = numberColumns + 1; infiniteDown_[iRow] = numberColumns + 1; } else if (maxUp < rowLower[iRow] - tolerance) { infeasible++; } else if (maxDown > rowUpper[iRow] + tolerance) { infeasible++; } } else if (rowLength[iRow] > 0) { /* A row where both rhs bounds are very large. Mark as redundant. */ assert(rowLower[iRow] <= -large && rowUpper[iRow] >= large); infiniteUp_[iRow] = numberColumns + 1; infiniteDown_[iRow] = numberColumns + 1; } else { /* Row with length zero. Check the the rhs bounds include zero and force `near-to-zero' to exactly zero. */ assert(rowLength[iRow] == 0); if (rowLower[iRow] > 0.0 || rowUpper[iRow] < 0.0) { double tolerance2 = 10.0 * tolerance; if (rowLower[iRow] > 0.0 && rowLower[iRow] < tolerance2) rowLower[iRow] = 0.0; else infeasible++; if (rowUpper[iRow] < 0.0 && rowUpper[iRow] > -tolerance2) rowUpper[iRow] = 0.0; else infeasible++; } } } return (infeasible); } /* Preallocate scratch work arrays, arrays to hold row lhs bound information, and an array of random numbers. */ void CoinPresolveMatrix::initializeStuff() { usefulRowInt_ = new int[3 * nrows_]; usefulRowDouble_ = new double[2 * nrows_]; usefulColumnInt_ = new int[2 * ncols_]; usefulColumnDouble_ = new double[2 * ncols_]; int k = CoinMax(ncols_ + 1, nrows_ + 1); randomNumber_ = new double[k]; coin_init_random_vec(randomNumber_, k); infiniteUp_ = new int[nrows_]; sumUp_ = new double[nrows_]; infiniteDown_ = new int[nrows_]; sumDown_ = new double[nrows_]; return; } /* Free arrays allocated in initializeStuff. */ void CoinPresolveMatrix::deleteStuff() { delete[] usefulRowInt_; delete[] usefulRowDouble_; delete[] usefulColumnInt_; delete[] usefulColumnDouble_; delete[] randomNumber_; delete[] infiniteUp_; delete[] sumUp_; delete[] infiniteDown_; delete[] sumDown_; usefulRowInt_ = NULL; usefulRowDouble_ = NULL; usefulColumnInt_ = NULL; usefulColumnDouble_ = NULL; randomNumber_ = NULL; infiniteUp_ = NULL; sumUp_ = NULL; infiniteDown_ = NULL; sumDown_ = NULL; } /* These functions set integer type information. The first expects an array with an entry for each variable. The second sets all variables to integer or continuous type. */ void CoinPresolveMatrix::setVariableType(const unsigned char *variableType, int lenParam) { int len; if (lenParam < 0) { len = ncols_; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setIntegerType", "CoinPresolveMatrix"); } else { len = lenParam; } if (integerType_ == 0) integerType_ = new unsigned char[ncols0_]; CoinCopyN(variableType, len, integerType_); return; } void CoinPresolveMatrix::setVariableType(bool allIntegers, int lenParam) { int len; if (lenParam < 0) { len = ncols_; } else if (lenParam > ncols0_) { throw CoinError("length exceeds allocated size", "setIntegerType", "CoinPresolveMatrix"); } else { len = lenParam; } if (integerType_ == 0) integerType_ = new unsigned char[ncols0_]; const unsigned char value = 1; if (allIntegers == true) { CoinFillN(integerType_, len, value); } else { CoinZeroN(integerType_, len); } return; } /* The next pair of routines initialises the [row,col]ToDo lists in preparation for a major pass. All except rows/columns marked as prohibited are added to the lists. */ void CoinPresolveMatrix::initColsToDo() /* Initialize the ToDo lists in preparation for a major iteration of preprocessing. First, cut back the ToDo and NextToDo lists to zero entries. Then place all columns not marked prohibited on the ToDo list. */ { int j; numberNextColsToDo_ = 0; if (anyProhibited_ == false) { for (j = 0; j < ncols_; j++) { colsToDo_[j] = j; } numberColsToDo_ = ncols_; } else { numberColsToDo_ = 0; for (j = 0; j < ncols_; j++) if (colProhibited(j) == false) { colsToDo_[numberColsToDo_++] = j; } } return; } void CoinPresolveMatrix::initRowsToDo() /* Initialize the ToDo lists in preparation for a major iteration of preprocessing. First, cut back the ToDo and NextToDo lists to zero entries. Then place all rows not marked prohibited on the ToDo list. */ { int i; numberNextRowsToDo_ = 0; if (anyProhibited_ == false) { for (i = 0; i < nrows_; i++) { rowsToDo_[i] = i; } numberRowsToDo_ = nrows_; } else { numberRowsToDo_ = 0; for (i = 0; i < nrows_; i++) if (rowProhibited(i) == false) { rowsToDo_[numberRowsToDo_++] = i; } } return; } int CoinPresolveMatrix::stepColsToDo() /* This routine transfers the contents of NextToDo to ToDo, simultaneously resetting the Changed indicator. It returns the number of columns transfered. */ { int k; for (k = 0; k < numberNextColsToDo_; k++) { int j = nextColsToDo_[k]; unsetColChanged(j); colsToDo_[k] = j; } numberColsToDo_ = numberNextColsToDo_; numberNextColsToDo_ = 0; return (numberColsToDo_); } int CoinPresolveMatrix::stepRowsToDo() /* This routine transfers the contents of NextToDo to ToDo, simultaneously resetting the Changed indicator. It returns the number of columns transfered. */ { int k; for (k = 0; k < numberNextRowsToDo_; k++) { int i = nextRowsToDo_[k]; unsetRowChanged(i); rowsToDo_[k] = i; } numberRowsToDo_ = numberNextRowsToDo_; numberNextRowsToDo_ = 0; return (numberRowsToDo_); } // Say we want statistics - also set time void CoinPresolveMatrix::statistics() { tuning_ = true; startTime_ = CoinCpuTime(); } #ifdef PRESOLVE_DEBUG #include "CoinPresolvePsdebug.cpp" #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveIsolated.cpp0000644000175200017520000001161413414454441020363 0ustar coincoin/* $Id: CoinPresolveIsolated.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinPresolveMatrix.hpp" #include "CoinPresolveIsolated.hpp" #include "CoinHelperFunctions.hpp" #if PRESOLVE_DEBUG || PRESOLVE_CONSISTENCY #include "CoinPresolvePsdebug.hpp" #endif // Rarely, there may a constraint whose variables only // occur in that constraint. // In this case it is a completely independent problem. // We should be able to solve it right now. // Since that is actually not trivial, I'm just going to ignore // them and stick them back in at postsolve. const CoinPresolveAction *isolated_constraint_action::presolve(CoinPresolveMatrix *prob, int irow, const CoinPresolveAction *next) { int *hincol = prob->hincol_; const CoinBigIndex *mcstrt = prob->mcstrt_; int *hrow = prob->hrow_; double *colels = prob->colels_; double *clo = prob->clo_; double *cup = prob->cup_; const double *rowels = prob->rowels_; const int *hcol = prob->hcol_; const CoinBigIndex *mrstrt = prob->mrstrt_; // may be written by useless constraint int *hinrow = prob->hinrow_; double *rlo = prob->rlo_; double *rup = prob->rup_; CoinBigIndex krs = mrstrt[irow]; CoinBigIndex kre = krs + hinrow[irow]; double *dcost = prob->cost_; const double maxmin = prob->maxmin_; #if PRESOLVE_DEBUG { printf("ISOLATED: %d - ", irow); CoinBigIndex k; for (k = krs; k < kre; ++k) printf("%d ", hcol[k]); printf("\n"); } #endif if (rlo[irow] != 0.0 || rup[irow] != 0.0) { #if PRESOLVE_DEBUG printf("can't handle non-trivial isolated constraints for now\n"); #endif return NULL; } CoinBigIndex k; for (k = krs; k < kre; ++k) { int jcol = hcol[k]; if ((clo[jcol] != 0.0 && cup[jcol] != 0.0) || (maxmin * dcost[jcol] > 0.0 && clo[jcol] != 0.0) || (maxmin * dcost[jcol] < 0.0 && cup[jcol] != 0.0)) { #if PRESOLVE_DEBUG printf("can't handle non-trivial isolated constraints for now\n"); #endif return NULL; } } int nc = hinrow[irow]; #if 0 double tableau = new double[nc]; double sol = new double[nc]; double clo = new double[nc]; double cup = new double[nc]; for (int i=0; iclo[krs+i]; cup[i] = prob->cup[krs+i]; sol[i] = clo[i]; } #endif // HACK - set costs to 0.0 so empty.cpp doesn't complain double *costs = new double[nc]; for (k = krs; k < kre; ++k) { costs[k - krs] = dcost[hcol[k]]; dcost[hcol[k]] = 0.0; } next = new isolated_constraint_action(rlo[irow], rup[irow], irow, nc, CoinCopyOfArray(&hcol[krs], nc), CoinCopyOfArray(&rowels[krs], nc), costs, next); for (k = krs; k < kre; k++) { presolve_delete_from_col(irow, hcol[k], mcstrt, hincol, hrow, colels); if (hincol[hcol[k]] == 0) { PRESOLVE_REMOVE_LINK(prob->clink_, hcol[k]); } } hinrow[irow] = 0; PRESOLVE_REMOVE_LINK(prob->rlink_, irow); // just to make things squeeky rlo[irow] = 0.0; rup[irow] = 0.0; #if CHECK_CONSISTENCY presolve_links_ok(prob); presolve_consistent(prob); #endif return (next); } const char *isolated_constraint_action::name() const { return ("isolated_constraint_action"); } void isolated_constraint_action::postsolve(CoinPostsolveMatrix *prob) const { double *colels = prob->colels_; int *hrow = prob->hrow_; CoinBigIndex *mcstrt = prob->mcstrt_; CoinBigIndex *link = prob->link_; int *hincol = prob->hincol_; double *rowduals = prob->rowduals_; double *rowacts = prob->acts_; double *sol = prob->sol_; CoinBigIndex &free_list = prob->free_list_; // hides fields double *rlo = prob->rlo_; double *rup = prob->rup_; double rowact = 0.0; int irow = this->row_; rup[irow] = this->rup_; rlo[irow] = this->rlo_; int k; for (k = 0; k < this->ninrow_; k++) { int jcol = this->rowcols_[k]; sol[jcol] = 0.0; // ONLY ACCEPTED SUCH CONSTRAINTS CoinBigIndex kk = free_list; assert(kk >= 0 && kk < prob->bulk0_); free_list = link[free_list]; mcstrt[jcol] = kk; //rowact += rowels[k] * sol[jcol]; colels[kk] = this->rowels_[k]; hrow[kk] = irow; link[kk] = NO_LINK; hincol[jcol] = 1; } #if PRESOLVE_CONSISTENCY presolve_check_free_list(prob); #endif // ??? prob->setRowStatus(irow, CoinPrePostsolveMatrix::basic); rowduals[irow] = 0.0; rowacts[irow] = rowact; // leave until desctructor // deleteAction(rowcols_,int *); // deleteAction(rowels_,double *); // deleteAction(costs_,double *); } isolated_constraint_action::~isolated_constraint_action() { deleteAction(rowcols_, int *); deleteAction(rowels_, double *); deleteAction(costs_, double *); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinModelUseful.cpp0000644000175200017520000011651713414454441017333 0ustar coincoin/* $Id: CoinModelUseful.cpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinPragma.hpp" #include #include #include #include #include #include #include #include "CoinHelperFunctions.hpp" #include "CoinModelUseful.hpp" //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinModelLink::CoinModelLink() : row_(-1) , column_(-1) , value_(0.0) , position_(-1) , onRow_(true) { } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinModelLink::CoinModelLink(const CoinModelLink &rhs) : row_(rhs.row_) , column_(rhs.column_) , value_(rhs.value_) , position_(rhs.position_) , onRow_(rhs.onRow_) { } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinModelLink::~CoinModelLink() { } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinModelLink & CoinModelLink::operator=(const CoinModelLink &rhs) { if (this != &rhs) { row_ = rhs.row_; column_ = rhs.column_; value_ = rhs.value_; position_ = rhs.position_; onRow_ = rhs.onRow_; } return *this; } namespace { const int mmult[] = { 262139, 259459, 256889, 254291, 251701, 249133, 246709, 244247, 241667, 239179, 236609, 233983, 231289, 228859, 226357, 223829, 221281, 218849, 216319, 213721, 211093, 208673, 206263, 203773, 201233, 198637, 196159, 193603, 191161, 188701, 186149, 183761, 181303, 178873, 176389, 173897, 171469, 169049, 166471, 163871, 161387, 158941, 156437, 153949, 151531, 149159, 146749, 144299, 141709, 139369, 136889, 134591, 132169, 129641, 127343, 124853, 122477, 120163, 117757, 115361, 112979, 110567, 108179, 105727, 103387, 101021, 98639, 96179, 93911, 91583, 89317, 86939, 84521, 82183, 79939, 77587, 75307, 72959, 70793, 68447, 66103 }; const int lengthMult = static_cast< int >(sizeof(mmult) / sizeof(int)); } //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinModelHash::CoinModelHash() : names_(NULL) , hash_(NULL) , numberItems_(0) , maximumItems_(0) , lastSlot_(-1) { } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinModelHash::CoinModelHash(const CoinModelHash &rhs) : names_(NULL) , hash_(NULL) , numberItems_(rhs.numberItems_) , maximumItems_(rhs.maximumItems_) , lastSlot_(rhs.lastSlot_) { if (maximumItems_) { names_ = new char *[maximumItems_]; for (int i = 0; i < maximumItems_; i++) { names_[i] = CoinStrdup(rhs.names_[i]); } hash_ = CoinCopyOfArray(rhs.hash_, 4 * maximumItems_); } } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinModelHash::~CoinModelHash() { for (int i = 0; i < maximumItems_; i++) free(names_[i]); delete[] names_; delete[] hash_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinModelHash & CoinModelHash::operator=(const CoinModelHash &rhs) { if (this != &rhs) { for (int i = 0; i < maximumItems_; i++) free(names_[i]); delete[] names_; delete[] hash_; numberItems_ = rhs.numberItems_; maximumItems_ = rhs.maximumItems_; lastSlot_ = rhs.lastSlot_; if (maximumItems_) { names_ = new char *[maximumItems_]; for (int i = 0; i < maximumItems_; i++) { names_[i] = CoinStrdup(rhs.names_[i]); } hash_ = CoinCopyOfArray(rhs.hash_, 4 * maximumItems_); } else { names_ = NULL; hash_ = NULL; } } return *this; } // Set number of items void CoinModelHash::setNumberItems(int number) { assert(number >= 0 && number <= numberItems_); numberItems_ = number; } // Resize hash (also re-hashs) void CoinModelHash::resize(int maxItems, bool forceReHash) { assert(numberItems_ <= maximumItems_); if (maxItems <= maximumItems_ && !forceReHash) return; int n = maximumItems_; maximumItems_ = maxItems; char **names = new char *[maximumItems_]; int i; for (i = 0; i < n; i++) names[i] = names_[i]; for (; i < maximumItems_; i++) names[i] = NULL; delete[] names_; names_ = names; delete[] hash_; int maxHash = 4 * maximumItems_; hash_ = new CoinModelHashLink[maxHash]; int ipos; for (i = 0; i < maxHash; i++) { hash_[i].index = -1; hash_[i].next = -1; } /* * Initialize the hash table. Only the index of the first name that * hashes to a value is entered in the table; subsequent names that * collide with it are not entered. */ for (i = 0; i < numberItems_; ++i) { if (names_[i]) { ipos = hashValue(names_[i]); if (hash_[ipos].index == -1) { hash_[ipos].index = i; } } } /* * Now take care of the names that collided in the preceding loop, * by finding some other entry in the table for them. * Since there are as many entries in the table as there are names, * there must be room for them. */ lastSlot_ = -1; for (i = 0; i < numberItems_; ++i) { if (!names_[i]) continue; char *thisName = names[i]; ipos = hashValue(thisName); while (true) { int j1 = hash_[ipos].index; if (j1 == i) break; else { char *thisName2 = names[j1]; if (strcmp(thisName, thisName2) == 0) { printf("** duplicate name %s\n", names[i]); abort(); break; } else { int k = hash_[ipos].next; if (k == -1) { while (true) { ++lastSlot_; if (lastSlot_ > numberItems_) { printf("** too many names\n"); abort(); break; } if (hash_[lastSlot_].index == -1) { break; } } hash_[ipos].next = lastSlot_; hash_[lastSlot_].index = i; break; } else { ipos = k; /* nothing worked - try it again */ } } } } } } // validate void CoinModelHash::validateHash() const { for (int i = 0; i < numberItems_; ++i) { if (names_[i]) { assert(hash(names_[i]) >= 0); } } } // Returns index or -1 int CoinModelHash::hash(const char *name) const { int found = -1; int ipos; /* default if we don't find anything */ if (!numberItems_) return -1; ipos = hashValue(name); while (true) { int j1 = hash_[ipos].index; if (j1 >= 0) { char *thisName2 = names_[j1]; if (strcmp(name, thisName2) != 0) { int k = hash_[ipos].next; if (k != -1) ipos = k; else break; } else { found = j1; break; } } else { int k = hash_[ipos].next; if (k != -1) ipos = k; else break; } } return found; } // Adds to hash void CoinModelHash::addHash(int index, const char *name) { // resize if necessary if (numberItems_ >= maximumItems_) resize(1000 + 3 * numberItems_ / 2); assert(!names_[index]); names_[index] = CoinStrdup(name); int ipos = hashValue(name); numberItems_ = CoinMax(numberItems_, index + 1); if (hash_[ipos].index < 0) { hash_[ipos].index = index; } else { while (true) { int j1 = hash_[ipos].index; if (j1 == index) break; // duplicate? else { if (j1 >= 0) { char *thisName2 = names_[j1]; if (strcmp(name, thisName2) == 0) { printf("** duplicate name %s\n", names_[index]); abort(); break; } else { int k = hash_[ipos].next; if (k == -1) { while (true) { ++lastSlot_; if (lastSlot_ > numberItems_) { printf("** too many names\n"); abort(); break; } if (hash_[lastSlot_].index < 0 && hash_[lastSlot_].next < 0) { break; } } hash_[ipos].next = lastSlot_; hash_[lastSlot_].index = index; hash_[lastSlot_].next = -1; break; } else { ipos = k; } } } else { //slot available hash_[ipos].index = index; } } } } } // Deletes from hash void CoinModelHash::deleteHash(int index) { if (index < numberItems_ && names_[index]) { int ipos = hashValue(names_[index]); while (ipos >= 0) { int j1 = hash_[ipos].index; if (j1 != index) { ipos = hash_[ipos].next; } else { hash_[ipos].index = -1; // available break; } } assert(ipos >= 0); free(names_[index]); names_[index] = NULL; } } // Returns name at position (or NULL) const char * CoinModelHash::name(int which) const { if (which < numberItems_) return names_[which]; else return NULL; } // Returns non const name at position (or NULL) char * CoinModelHash::getName(int which) const { if (which < numberItems_) return names_[which]; else return NULL; } // Sets name at position (does not create) void CoinModelHash::setName(int which, char *name) { if (which < numberItems_) names_[which] = name; } // Returns a hash value int CoinModelHash::hashValue(const char *name) const { int n = 0; int j; int length = static_cast< int >(strlen(name)); // may get better spread with unsigned const unsigned char *name2 = reinterpret_cast< const unsigned char * >(name); while (length) { int length2 = CoinMin(length, lengthMult); for (j = 0; j < length2; ++j) { n += mmult[j] * name2[j]; } name += length2; length -= length2; } int maxHash = 4 * maximumItems_; return (abs(n) % maxHash); /* integer abs */ } //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinModelHash2::CoinModelHash2() : hash_(NULL) , numberItems_(0) , maximumItems_(0) , lastSlot_(-1) { } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinModelHash2::CoinModelHash2(const CoinModelHash2 &rhs) : hash_(NULL) , numberItems_(rhs.numberItems_) , maximumItems_(rhs.maximumItems_) , lastSlot_(rhs.lastSlot_) { if (maximumItems_) { hash_ = CoinCopyOfArray(rhs.hash_, 4 * maximumItems_); } } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinModelHash2::~CoinModelHash2() { delete[] hash_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinModelHash2 & CoinModelHash2::operator=(const CoinModelHash2 &rhs) { if (this != &rhs) { delete[] hash_; numberItems_ = rhs.numberItems_; maximumItems_ = rhs.maximumItems_; lastSlot_ = rhs.lastSlot_; if (maximumItems_) { hash_ = CoinCopyOfArray(rhs.hash_, 4 * maximumItems_); } else { hash_ = NULL; } } return *this; } // Set number of items void CoinModelHash2::setNumberItems(CoinBigIndex number) { assert(number >= 0 && (number <= numberItems_ || !numberItems_)); numberItems_ = number; } // Resize hash (also re-hashs) void CoinModelHash2::resize(CoinBigIndex maxItems, const CoinModelTriple *triples, bool forceReHash) { assert(numberItems_ <= maximumItems_ || !maximumItems_); if (maxItems <= maximumItems_ && !forceReHash) return; if (maxItems > maximumItems_) { maximumItems_ = maxItems; delete[] hash_; hash_ = new CoinModelHashLink2[4 * maximumItems_]; } CoinBigIndex maxHash = 4 * maximumItems_; CoinBigIndex ipos; CoinBigIndex i; for (i = 0; i < maxHash; i++) { hash_[i].index = -1; hash_[i].next = -1; } /* * Initialize the hash table. Only the index of the first name that * hashes to a value is entered in the table; subsequent names that * collide with it are not entered. */ for (i = 0; i < numberItems_; ++i) { int row = static_cast< int >(rowInTriple(triples[i])); int column = triples[i].column; if (column >= 0) { ipos = hashValue(row, column); if (hash_[ipos].index == -1) { hash_[ipos].index = i; } } } /* * Now take care of the entries that collided in the preceding loop, * by finding some other entry in the table for them. * Since there are as many entries in the table as there are entries, * there must be room for them. */ lastSlot_ = -1; for (i = 0; i < numberItems_; ++i) { int row = static_cast< int >(rowInTriple(triples[i])); int column = triples[i].column; if (column >= 0) { ipos = hashValue(row, column); while (true) { CoinBigIndex j1 = hash_[ipos].index; if (j1 == i) break; else { int row2 = static_cast< int >(rowInTriple(triples[j1])); int column2 = triples[j1].column; if (row == row2 && column == column2) { printf("** duplicate entry %d %d\n", row, column); abort(); break; } else { CoinBigIndex k = hash_[ipos].next; if (k == -1) { while (true) { ++lastSlot_; if (lastSlot_ > numberItems_) { printf("** too many entries\n"); abort(); break; } if (hash_[lastSlot_].index == -1) { break; } } hash_[ipos].next = lastSlot_; hash_[lastSlot_].index = i; break; } else { ipos = k; } } } } } } } // Returns index or -1 CoinBigIndex CoinModelHash2::hash(int row, int column, const CoinModelTriple *triples) const { CoinBigIndex found = -1; CoinBigIndex ipos; /* default if we don't find anything */ if (!numberItems_) return -1; ipos = hashValue(row, column); while (true) { CoinBigIndex j1 = hash_[ipos].index; if (j1 >= 0) { int row2 = static_cast< int >(rowInTriple(triples[j1])); int column2 = triples[j1].column; if (row != row2 || column != column2) { CoinBigIndex k = hash_[ipos].next; if (k != -1) ipos = k; else break; } else { found = j1; break; } } else { CoinBigIndex k = hash_[ipos].next; if (k != -1) ipos = k; else break; } } return found; } // Adds to hash void CoinModelHash2::addHash(CoinBigIndex index, int row, int column, const CoinModelTriple *triples) { // resize if necessary if (numberItems_ >= maximumItems_ || index + 1 >= maximumItems_) resize(CoinMax(1000 + 3 * numberItems_ / 2, index + 1), triples); CoinBigIndex ipos = hashValue(row, column); numberItems_ = CoinMax(numberItems_, index + 1); assert(numberItems_ <= maximumItems_); if (hash_[ipos].index < 0) { hash_[ipos].index = index; } else { while (true) { CoinBigIndex j1 = hash_[ipos].index; if (j1 == index) { break; // duplicate?? } else { if (j1 >= 0) { int row2 = static_cast< int >(rowInTriple(triples[j1])); int column2 = triples[j1].column; if (row == row2 && column == column2) { printf("** duplicate entry %d %d\n", row, column); abort(); break; } else { CoinBigIndex k = hash_[ipos].next; if (k == -1) { while (true) { ++lastSlot_; if (lastSlot_ > numberItems_) { printf("** too many entrys\n"); abort(); break; } if (hash_[lastSlot_].index < 0) { break; } } hash_[ipos].next = lastSlot_; hash_[lastSlot_].index = index; hash_[lastSlot_].next = -1; break; } else { ipos = k; } } } else { // slot available hash_[ipos].index = index; } } } } } // Deletes from hash void CoinModelHash2::deleteHash(CoinBigIndex index, int row, int column) { if (index < numberItems_) { CoinBigIndex ipos = hashValue(row, column); while (ipos >= 0) { CoinBigIndex j1 = hash_[ipos].index; if (j1 != index) { ipos = hash_[ipos].next; } else { hash_[ipos].index = -1; // available break; } } } } namespace { const int mmult2[] = { 262139, 259459, 256889, 254291, 251701, 249133, 246709, 244247, 241667, 239179, 236609, 233983, 231289, 228859, 226357, 223829 }; } // Returns a hash value CoinBigIndex CoinModelHash2::hashValue(int row, int column) const { // Optimizer should take out one side of if if (sizeof(int) == 4 * sizeof(char)) { unsigned char tempChar[4]; unsigned int n = 0; int *temp = reinterpret_cast< int * >(tempChar); *temp = row; n += mmult2[0] * tempChar[0]; n += mmult2[1] * tempChar[1]; n += mmult2[2] * tempChar[2]; n += mmult[3] * tempChar[3]; *temp = column; n += mmult2[0 + 8] * tempChar[0]; n += mmult2[1 + 8] * tempChar[1]; n += mmult2[2 + 8] * tempChar[2]; n += mmult2[3 + 8] * tempChar[3]; return n % (maximumItems_ << 1); } else { // ints are 8 unsigned char tempChar[8]; int n = 0; unsigned int j; int *temp = reinterpret_cast< int * >(tempChar); *temp = row; for (j = 0; j < sizeof(int); ++j) { int itemp = tempChar[j]; n += mmult2[j] * itemp; } *temp = column; for (j = 0; j < sizeof(int); ++j) { int itemp = tempChar[j]; n += mmult2[j + 8] * itemp; } CoinBigIndex maxHash = 4 * maximumItems_; CoinBigIndex absN = abs(n); CoinBigIndex returnValue = absN % maxHash; return returnValue; } } //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- CoinModelLinkedList::CoinModelLinkedList() : previous_(NULL) , next_(NULL) , first_(NULL) , last_(NULL) , numberMajor_(0) , maximumMajor_(0) , numberElements_(0) , maximumElements_(0) , type_(-1) { } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- CoinModelLinkedList::CoinModelLinkedList(const CoinModelLinkedList &rhs) : numberMajor_(rhs.numberMajor_) , maximumMajor_(rhs.maximumMajor_) , numberElements_(rhs.numberElements_) , maximumElements_(rhs.maximumElements_) , type_(rhs.type_) { if (maximumMajor_) { previous_ = CoinCopyOfArray(rhs.previous_, maximumElements_); next_ = CoinCopyOfArray(rhs.next_, maximumElements_); first_ = CoinCopyOfArray(rhs.first_, maximumMajor_ + 1); last_ = CoinCopyOfArray(rhs.last_, maximumMajor_ + 1); } else { previous_ = NULL; next_ = NULL; first_ = NULL; last_ = NULL; } } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- CoinModelLinkedList::~CoinModelLinkedList() { delete[] previous_; delete[] next_; delete[] first_; delete[] last_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- CoinModelLinkedList & CoinModelLinkedList::operator=(const CoinModelLinkedList &rhs) { if (this != &rhs) { delete[] previous_; delete[] next_; delete[] first_; delete[] last_; numberMajor_ = rhs.numberMajor_; maximumMajor_ = rhs.maximumMajor_; numberElements_ = rhs.numberElements_; maximumElements_ = rhs.maximumElements_; type_ = rhs.type_; if (maximumMajor_) { previous_ = CoinCopyOfArray(rhs.previous_, maximumElements_); next_ = CoinCopyOfArray(rhs.next_, maximumElements_); first_ = CoinCopyOfArray(rhs.first_, maximumMajor_ + 1); last_ = CoinCopyOfArray(rhs.last_, maximumMajor_ + 1); } else { previous_ = NULL; next_ = NULL; first_ = NULL; last_ = NULL; } } return *this; } // Resize list - for row list maxMajor is maximum rows void CoinModelLinkedList::resize(int maxMajor, CoinBigIndex maxElements) { maxMajor = CoinMax(maxMajor, maximumMajor_); maxElements = CoinMax(maxElements, maximumElements_); if (maxMajor > maximumMajor_) { CoinBigIndex *first = new CoinBigIndex[maxMajor + 1]; CoinBigIndex free; if (maximumMajor_) { CoinMemcpyN(first_, maximumMajor_, first); #ifdef ZEROFAULT memset(first + maximumMajor_, 0, (maxMajor - maximumMajor_) * sizeof(CoinBigIndex)); #endif free = first_[maximumMajor_]; first[maximumMajor_] = -1; } else { free = -1; } first[maxMajor] = free; delete[] first_; first_ = first; CoinBigIndex *last = new CoinBigIndex[maxMajor + 1]; if (maximumMajor_) { CoinMemcpyN(last_, maximumMajor_, last); #ifdef ZEROFAULT memset(last + maximumMajor_, 0, (maxMajor - maximumMajor_) * sizeof(CoinBigIndex)); #endif free = last_[maximumMajor_]; last[maximumMajor_] = -1; } else { free = -1; } last[maxMajor] = free; delete[] last_; last_ = last; maximumMajor_ = maxMajor; } if (maxElements > maximumElements_) { CoinBigIndex *previous = new CoinBigIndex[maxElements]; CoinMemcpyN(previous_, numberElements_, previous); #ifdef ZEROFAULT memset(previous + numberElements_, 0, (maxElements - numberElements_) * sizeof(CoinBigIndex)); #endif delete[] previous_; previous_ = previous; CoinBigIndex *next = new CoinBigIndex[maxElements]; CoinMemcpyN(next_, numberElements_, next); #ifdef ZEROFAULT memset(next + numberElements_, 0, (maxElements - numberElements_) * sizeof(CoinBigIndex)); #endif delete[] next_; next_ = next; maximumElements_ = maxElements; } } // Create list - for row list maxMajor is maximum rows void CoinModelLinkedList::create(int maxMajor, CoinBigIndex maxElements, int numberMajor, int /*numberMinor*/, int type, CoinBigIndex numberElements, const CoinModelTriple *triples) { maxMajor = CoinMax(maxMajor, maximumMajor_); maxMajor = CoinMax(maxMajor, numberMajor); maxElements = CoinMax(maxElements, maximumElements_); maxElements = CoinMax(maxElements, numberElements); type_ = type; assert(!previous_); previous_ = new CoinBigIndex[maxElements]; next_ = new CoinBigIndex[maxElements]; maximumElements_ = maxElements; assert(maxElements >= numberElements); assert(maxMajor > 0 && !maximumMajor_); first_ = new CoinBigIndex[maxMajor + 1]; last_ = new CoinBigIndex[maxMajor + 1]; #ifdef ZEROFAULT memset(previous_, 0, maxElements * sizeof(CoinBigIndex)); memset(next_, 0, maxElements * sizeof(CoinBigIndex)); memset(first_, 0, (maxMajor + 1) * sizeof(CoinBigIndex)); memset(last_, 0, (maxMajor + 1) * sizeof(CoinBigIndex)); #endif assert(numberElements >= 0); numberElements_ = numberElements; maximumMajor_ = maxMajor; // do lists int i; for (i = 0; i < numberMajor; i++) { first_[i] = -1; last_[i] = -1; } first_[maximumMajor_] = -1; last_[maximumMajor_] = -1; int freeChain = -1; for (i = 0; i < numberElements; i++) { if (triples[i].column >= 0) { int iMajor; if (!type_) { // for rows iMajor = static_cast< int >(rowInTriple(triples[i])); } else { iMajor = triples[i].column; } assert(iMajor < numberMajor); if (first_[iMajor] >= 0) { // not first CoinBigIndex j = last_[iMajor]; next_[j] = i; previous_[i] = j; } else { // first first_[iMajor] = i; previous_[i] = -1; } last_[iMajor] = i; } else { // on deleted list if (freeChain >= 0) { next_[freeChain] = i; previous_[i] = freeChain; } else { first_[maximumMajor_] = i; previous_[i] = -1; } freeChain = i; } } // Now clean up if (freeChain >= 0) { next_[freeChain] = -1; last_[maximumMajor_] = freeChain; } for (i = 0; i < numberMajor; i++) { CoinBigIndex k = last_[i]; if (k >= 0) { next_[k] = -1; last_[i] = k; } } numberMajor_ = numberMajor; } /* Adds to list - easy case i.e. add row to row list Returns where chain starts */ CoinBigIndex CoinModelLinkedList::addEasy(int majorIndex, CoinBigIndex numberOfElements, const int *indices, const double *elements, CoinModelTriple *triples, CoinModelHash2 &hash) { assert(majorIndex < maximumMajor_); if (numberOfElements + numberElements_ > maximumElements_) { resize(maximumMajor_, (3 * (numberElements_ + numberOfElements)) / 2 + 1000); } CoinBigIndex first = -1; if (majorIndex >= numberMajor_) { for (int i = numberMajor_; i <= majorIndex; i++) { first_[i] = -1; last_[i] = -1; } } if (numberOfElements) { bool doHash = hash.maximumItems() != 0; CoinBigIndex lastFree = last_[maximumMajor_]; CoinBigIndex last = last_[majorIndex]; for (int i = 0; i < numberOfElements; i++) { CoinBigIndex put; if (lastFree >= 0) { put = lastFree; lastFree = previous_[lastFree]; } else { put = numberElements_; assert(put < maximumElements_); numberElements_++; } if (type_ == 0) { // row setRowAndStringInTriple(triples[put], majorIndex, false); triples[put].column = indices[i]; } else { // column setRowAndStringInTriple(triples[put], indices[i], false); triples[put].column = majorIndex; } triples[put].value = elements[i]; if (doHash) hash.addHash(put, static_cast< int >(rowInTriple(triples[put])), triples[put].column, triples); if (last >= 0) { next_[last] = put; } else { first_[majorIndex] = put; } previous_[put] = last; last = put; } next_[last] = -1; if (last_[majorIndex] < 0) { // first in row first = first_[majorIndex]; } else { first = next_[last_[majorIndex]]; } last_[majorIndex] = last; if (lastFree >= 0) { next_[lastFree] = -1; last_[maximumMajor_] = lastFree; } else { first_[maximumMajor_] = -1; last_[maximumMajor_] = -1; } } numberMajor_ = CoinMax(numberMajor_, majorIndex + 1); return first; } /* Adds to list - hard case i.e. add row to column list */ void CoinModelLinkedList::addHard(int minorIndex, CoinBigIndex numberOfElements, const int *indices, const double *elements, CoinModelTriple *triples, CoinModelHash2 &hash) { CoinBigIndex lastFree = last_[maximumMajor_]; bool doHash = hash.maximumItems() != 0; for (int i = 0; i < numberOfElements; i++) { CoinBigIndex put; if (lastFree >= 0) { put = lastFree; lastFree = previous_[lastFree]; } else { put = numberElements_; assert(put < maximumElements_); numberElements_++; } int other = indices[i]; if (type_ == 0) { // row setRowAndStringInTriple(triples[put], other, false); triples[put].column = minorIndex; } else { // column setRowAndStringInTriple(triples[put], minorIndex, false); triples[put].column = other; } triples[put].value = elements[i]; if (doHash) hash.addHash(put, static_cast< int >(rowInTriple(triples[put])), triples[put].column, triples); if (other >= numberMajor_) { // Need to fill in null values fill(numberMajor_, other + 1); numberMajor_ = other + 1; } CoinBigIndex last = last_[other]; if (last >= 0) { next_[last] = put; } else { first_[other] = put; } previous_[put] = last; next_[put] = -1; last_[other] = put; } if (lastFree >= 0) { next_[lastFree] = -1; last_[maximumMajor_] = lastFree; } else { first_[maximumMajor_] = -1; last_[maximumMajor_] = -1; } } /* Adds to list - hard case i.e. add row to column list This is when elements have been added to other copy */ void CoinModelLinkedList::addHard(CoinBigIndex first, const CoinModelTriple *triples, CoinBigIndex firstFree, CoinBigIndex lastFree, const CoinBigIndex *next) { first_[maximumMajor_] = firstFree; last_[maximumMajor_] = lastFree; CoinBigIndex put = first; int minorIndex = -1; while (put >= 0) { assert(put < maximumElements_); numberElements_ = CoinMax(numberElements_, put + 1); int other; if (type_ == 0) { // row other = rowInTriple(triples[put]); if (minorIndex >= 0) assert(triples[put].column == minorIndex); else minorIndex = triples[put].column; } else { // column other = triples[put].column; if (minorIndex >= 0) assert(static_cast< int >(rowInTriple(triples[put])) == minorIndex); else minorIndex = rowInTriple(triples[put]); } assert(other < maximumMajor_); if (other >= numberMajor_) { // Need to fill in null values fill(numberMajor_, other + 1); numberMajor_ = other + 1; } CoinBigIndex last = last_[other]; if (last >= 0) { next_[last] = put; } else { first_[other] = put; } previous_[put] = last; next_[put] = -1; last_[other] = put; put = next[put]; } } /* Deletes from list - same case i.e. delete row from row list */ void CoinModelLinkedList::deleteSame(int which, CoinModelTriple *triples, CoinModelHash2 &hash, bool zapTriples) { assert(which >= 0); if (which < numberMajor_) { CoinBigIndex lastFree = last_[maximumMajor_]; CoinBigIndex put = first_[which]; first_[which] = -1; while (put >= 0) { if (hash.numberItems()) { // take out of hash hash.deleteHash(put, static_cast< int >(rowInTriple(triples[put])), triples[put].column); } if (zapTriples) { triples[put].column = -1; triples[put].value = 0.0; } if (lastFree >= 0) { next_[lastFree] = put; } else { first_[maximumMajor_] = put; } previous_[put] = lastFree; lastFree = put; put = next_[put]; } if (lastFree >= 0) { next_[lastFree] = -1; last_[maximumMajor_] = lastFree; } else { assert(last_[maximumMajor_] == -1); } last_[which] = -1; } } /* Deletes from list - other case i.e. delete row from column list This is when elements have been deleted from other copy */ void CoinModelLinkedList::updateDeleted(int /*which*/, CoinModelTriple *triples, CoinModelLinkedList &otherList) { CoinBigIndex firstFree = otherList.firstFree(); CoinBigIndex lastFree = otherList.lastFree(); const CoinBigIndex *previousOther = otherList.previous(); assert(maximumMajor_); if (lastFree >= 0) { // First free should be same if (first_[maximumMajor_] >= 0) assert(firstFree == first_[maximumMajor_]); CoinBigIndex last = last_[maximumMajor_]; first_[maximumMajor_] = firstFree; // Maybe nothing to do if (last_[maximumMajor_] == lastFree) return; last_[maximumMajor_] = lastFree; int iMajor; if (!type_) { // for rows iMajor = static_cast< int >(rowInTriple(triples[lastFree])); } else { iMajor = triples[lastFree].column; } if (first_[iMajor] >= 0) { // take out CoinBigIndex previousThis = previous_[lastFree]; CoinBigIndex nextThis = next_[lastFree]; if (previousThis >= 0 && previousThis != last) { next_[previousThis] = nextThis; #ifndef NDEBUG int iTest; if (!type_) { // for rows iTest = static_cast< int >(rowInTriple(triples[previousThis])); } else { iTest = triples[previousThis].column; } assert(triples[previousThis].column >= 0); assert(iTest == iMajor); #endif } else { first_[iMajor] = nextThis; } if (nextThis >= 0) { previous_[nextThis] = previousThis; #ifndef NDEBUG int iTest; if (!type_) { // for rows iTest = static_cast< int >(rowInTriple(triples[nextThis])); } else { iTest = triples[nextThis].column; } assert(triples[nextThis].column >= 0); assert(iTest == iMajor); #endif } else { last_[iMajor] = previousThis; } } triples[lastFree].column = -1; triples[lastFree].value = 0.0; // Do first (by which I mean last) next_[lastFree] = -1; CoinBigIndex previous = previousOther[lastFree]; while (previous != last) { if (previous >= 0) { if (!type_) { // for rows iMajor = static_cast< int >(rowInTriple(triples[previous])); } else { iMajor = triples[previous].column; } if (first_[iMajor] >= 0) { // take out CoinBigIndex previousThis = previous_[previous]; CoinBigIndex nextThis = next_[previous]; if (previousThis >= 0 && previousThis != last) { next_[previousThis] = nextThis; #ifndef NDEBUG int iTest; if (!type_) { // for rows iTest = static_cast< int >(rowInTriple(triples[previousThis])); } else { iTest = triples[previousThis].column; } assert(triples[previousThis].column >= 0); assert(iTest == iMajor); #endif } else { first_[iMajor] = nextThis; } if (nextThis >= 0) { previous_[nextThis] = previousThis; #ifndef NDEBUG int iTest; if (!type_) { // for rows iTest = static_cast< int >(rowInTriple(triples[nextThis])); } else { iTest = triples[nextThis].column; } assert(triples[nextThis].column >= 0); assert(iTest == iMajor); #endif } else { last_[iMajor] = previousThis; } } triples[previous].column = -1; triples[previous].value = 0.0; next_[previous] = lastFree; } else { assert(lastFree == firstFree); } previous_[lastFree] = previous; lastFree = previous; previous = previousOther[lastFree]; } if (last >= 0) { next_[previous] = lastFree; } else { assert(firstFree == lastFree); } previous_[lastFree] = previous; } } /* Deletes one element from Row list */ void CoinModelLinkedList::deleteRowOne(CoinBigIndex position, CoinModelTriple *triples, CoinModelHash2 &hash) { int row = rowInTriple(triples[position]); assert(row < numberMajor_); if (hash.numberItems()) { // take out of hash hash.deleteHash(position, static_cast< int >(rowInTriple(triples[position])), triples[position].column); } CoinBigIndex previous = previous_[position]; CoinBigIndex next = next_[position]; // put on free list CoinBigIndex lastFree = last_[maximumMajor_]; if (lastFree >= 0) { next_[lastFree] = position; } else { first_[maximumMajor_] = position; assert(last_[maximumMajor_] == -1); } last_[maximumMajor_] = position; previous_[position] = lastFree; next_[position] = -1; // Now take out of row if (previous >= 0) { next_[previous] = next; } else { first_[row] = next; } if (next >= 0) { previous_[next] = previous; } else { last_[row] = previous; } } /* Update column list for one element when one element deleted from row copy */ void CoinModelLinkedList::updateDeletedOne(CoinBigIndex position, const CoinModelTriple *triples) { assert(maximumMajor_); int column = triples[position].column; assert(column >= 0 && column < numberMajor_); CoinBigIndex previous = previous_[position]; CoinBigIndex next = next_[position]; // put on free list CoinBigIndex lastFree = last_[maximumMajor_]; if (lastFree >= 0) { next_[lastFree] = position; } else { first_[maximumMajor_] = position; assert(last_[maximumMajor_] == -1); } last_[maximumMajor_] = position; previous_[position] = lastFree; next_[position] = -1; // Now take out of column if (previous >= 0) { next_[previous] = next; } else { first_[column] = next; } if (next >= 0) { previous_[next] = previous; } else { last_[column] = previous; } } // Fills first,last with -1 void CoinModelLinkedList::fill(int first, int last) { for (int i = first; i < last; i++) { first_[i] = -1; last_[i] = -1; } } /* Puts in free list from other list */ void CoinModelLinkedList::synchronize(CoinModelLinkedList &other) { CoinBigIndex first = other.first_[other.maximumMajor_]; first_[maximumMajor_] = first; CoinBigIndex last = other.last_[other.maximumMajor_]; last_[maximumMajor_] = last; CoinBigIndex put = first; while (put >= 0) { previous_[put] = other.previous_[put]; next_[put] = other.next_[put]; put = next_[put]; } } // Checks that links are consistent void CoinModelLinkedList::validateLinks(const CoinModelTriple *triples) const { char *mark = new char[maximumElements_]; memset(mark, 0, maximumElements_); CoinBigIndex lastElement = -1; int i; for (i = 0; i < numberMajor_; i++) { CoinBigIndex position = first_[i]; #ifndef NDEBUG CoinBigIndex lastPosition = -1; #endif while (position >= 0) { assert(position == first_[i] || next_[previous_[position]] == position); assert(type_ || i == static_cast< int >(rowInTriple(triples[position]))); // i == iMajor for rows assert(!type_ || i == triples[position].column); // i == iMajor assert(triples[position].column >= 0); mark[position] = 1; lastElement = CoinMax(lastElement, position); #ifndef NDEBUG lastPosition = position; #endif position = next_[position]; } assert(lastPosition == last_[i]); } for (i = 0; i <= lastElement; i++) { if (!mark[i]) assert(triples[i].column == -1); } delete[] mark; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/src/CoinPresolveFixed.hpp0000644000175200017520000001357613414454441017674 0ustar coincoin/* $Id: CoinPresolveFixed.hpp 2083 2019-01-06 19:38:09Z unxusr $ */ // Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef CoinPresolveFixed_H #define CoinPresolveFixed_H #define FIXED_VARIABLE 1 /*! \class remove_fixed_action \brief Excise fixed variables from the model. Implements the action of virtually removing one or more fixed variables x_j from the model by substituting the value sol_j in each constraint. Specifically, for each constraint i where a_ij != 0, rlo_i and rup_i are adjusted by -a_ij*sol_j and a_ij is set to 0. There is an implicit assumption that the variable already has the correct value. If this isn't true, corrections to row activity may be incorrect. If you want to guard against this possibility, consider make_fixed_action. Actual removal of the empty column from the matrix is handled by drop_empty_cols_action. Correction of the objective function is done there. */ class remove_fixed_action : public CoinPresolveAction { public: /*! \brief Structure to hold information necessary to reintroduce a column into the problem representation. */ struct action { int col; ///< column index of variable int start; ///< start of coefficients in #colels_ and #colrows_ double sol; ///< value of variable }; /// Array of row indices for coefficients of excised columns int *colrows_; /// Array of coefficients of excised columns double *colels_; /// Number of entries in #actions_ int nactions_; /// Vector specifying variable(s) affected by this object action *actions_; private: /*! \brief Constructor */ remove_fixed_action(int nactions, action *actions, double *colels, int *colrows, const CoinPresolveAction *next); public: /// Returns string "remove_fixed_action". const char *name() const; /*! \brief Excise the specified columns. Remove the specified columns (\p nfcols, \p fcols) from the problem representation (\p prob), leaving the appropriate postsolve object linked as the head of the list of postsolve objects (currently headed by \p next). */ static const remove_fixed_action *presolve(CoinPresolveMatrix *prob, int *fcols, int nfcols, const CoinPresolveAction *next); void postsolve(CoinPostsolveMatrix *prob) const; /// Destructor virtual ~remove_fixed_action(); }; /*! \relates remove_fixed_action \brief Scan the problem for fixed columns and remove them. A front end to collect a list of columns with equal bounds and hand them to remove_fixed_action::presolve() for processing. */ const CoinPresolveAction *remove_fixed(CoinPresolveMatrix *prob, const CoinPresolveAction *next); /*! \class make_fixed_action \brief Fix a variable at a specified bound. Implements the action of fixing a variable by forcing both bounds to the same value and forcing the value of the variable to match. If the bounds are already equal, and the value of the variable is already correct, consider remove_fixed_action. */ class make_fixed_action : public CoinPresolveAction { /// Structure to preserve the bound overwritten when fixing a variable struct action { double bound; ///< Value of bound overwritten to fix variable. int col; ///< column index of variable }; /// Number of preserved bounds int nactions_; /// Vector of preserved bounds, one for each variable fixed in this object const action *actions_; /*! \brief True to fix at lower bound, false to fix at upper bound. Note that this applies to all variables fixed in this object. */ const bool fix_to_lower_; /*! \brief The postsolve object with the information required to repopulate the fixed columns. */ const remove_fixed_action *faction_; /*! \brief Constructor */ make_fixed_action(int nactions, const action *actions, bool fix_to_lower, const remove_fixed_action *faction, const CoinPresolveAction *next) : CoinPresolveAction(next) , nactions_(nactions) , actions_(actions) , fix_to_lower_(fix_to_lower) , faction_(faction) { } public: /// Returns string "make_fixed_action". const char *name() const; /*! \brief Perform actions to fix variables and return postsolve object For each specified variable (\p nfcols, \p fcols), fix the variable to the specified bound (\p fix_to_lower) by setting the variable's bounds to be equal in \p prob. Create a postsolve object, link it at the head of the list of postsolve objects (\p next), and return the object. */ static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, int *fcols, int nfcols, bool fix_to_lower, const CoinPresolveAction *next); /*! \brief Postsolve (unfix variables) Back out the variables fixed by the presolve side of this object. */ void postsolve(CoinPostsolveMatrix *prob) const; /// Destructor virtual ~make_fixed_action() { deleteAction(actions_, action *); delete faction_; } }; /*! \relates make_fixed_action \brief Scan variables and fix any with equal bounds A front end to collect a list of columns with equal bounds and hand them to make_fixed_action::presolve() for processing. */ const CoinPresolveAction *make_fixed(CoinPresolveMatrix *prob, const CoinPresolveAction *next); /*! \brief Transfer costs from singleton variables \relates make_fixed_action Transfers costs from singleton variables in equalities onto the other variables. Will also transfer costs from one integer variable to other integer variables with zero cost if there's a net gain in integer variables with non-zero cost. The relation to make_fixed_action is tenuous, but this transform should be attempted before the initial round of variable fixing. */ void transferCosts(CoinPresolveMatrix *prob); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/CoinUtils/depcomp0000755000175200017520000003710011405215457014346 0ustar coincoin#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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 outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac 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" # 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 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. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## 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). ## - 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 -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## 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. tr ' ' ' ' < "$tmpdepfile" | ## 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. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -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 -eq 0; then : else 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 ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; 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. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else 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" ;; 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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in 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.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #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 $1 != '--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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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 $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac 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. -*|$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" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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 $1 != '--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, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; 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-end: "$" # End: DyLP-1.10.4/CoinUtils/config.guess0000755000175200017520000012706311405215457015321 0ustar coincoin#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-05-17' # 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 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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 Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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 # 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 tupples: *-*-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 __ELF__ >/dev/null 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 ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-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'` exit ;; 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-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-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-unknown-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 ;; 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:SunOS:5.*:* | ix86xen:SunOS:5.*:*) echo i386-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-unknown-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:*:[45]) 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 __LP64__ >/dev/null 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}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-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-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-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-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu 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 ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${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-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa:Linux:*:*) echo xtensa-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; 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}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-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}-unknown-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 i386. echo i386-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-unknown-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; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-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-unknown-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 ;; 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 case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac 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 ;; 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}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-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-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-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 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 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: DyLP-1.10.4/CoinUtils/MSVisualStudio/0000755000175200017520000000000013434203623015657 5ustar coincoinDyLP-1.10.4/CoinUtils/MSVisualStudio/v9/0000755000175200017520000000000013434203623016215 5ustar coincoinDyLP-1.10.4/CoinUtils/MSVisualStudio/v9/unitTestCoinUtils/0000755000175200017520000000000013434203623021666 5ustar coincoinDyLP-1.10.4/CoinUtils/MSVisualStudio/v9/unitTestCoinUtils/unitTestCoinUtils.vcproj0000644000175200017520000005117011475605352026600 0ustar coincoin DyLP-1.10.4/CoinUtils/MSVisualStudio/v9/libCoinUtils/0000755000175200017520000000000013434203623020615 5ustar coincoinDyLP-1.10.4/CoinUtils/MSVisualStudio/v9/libCoinUtils/libCoinUtils.vcproj0000644000175200017520000020443412456350462024460 0ustar coincoin DyLP-1.10.4/CoinUtils/MSVisualStudio/v9/CoinUtils.sln0000644000175200017520000000423011473056425020652 0ustar coincoin Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "libCoinUtils\libCoinUtils.vcproj", "{C4867F15-438D-4FF8-8388-62FBAAA9786C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unitTestCoinUtils", "unitTestCoinUtils\unitTestCoinUtils.vcproj", "{D8879B84-4497-48E6-96A5-49B154FB0422}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.ActiveCfg = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.Build.0 = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.ActiveCfg = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.Build.0 = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.ActiveCfg = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.Build.0 = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.ActiveCfg = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.Build.0 = Release|x64 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|Win32.ActiveCfg = Debug|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|Win32.Build.0 = Debug|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|x64.ActiveCfg = Debug|x64 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|x64.Build.0 = Debug|x64 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|Win32.ActiveCfg = Release|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|Win32.Build.0 = Release|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|x64.ActiveCfg = Release|x64 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal DyLP-1.10.4/CoinUtils/MSVisualStudio/v9alt/0000755000175200017520000000000013434203623016716 5ustar coincoinDyLP-1.10.4/CoinUtils/MSVisualStudio/v9alt/CoinUtilsUnitTest.vcproj0000644000175200017520000002544111527111333023557 0ustar coincoin DyLP-1.10.4/CoinUtils/MSVisualStudio/v9alt/genDefForCoinUtils.ps10000644000175200017520000002333611527111333023040 0ustar coincoinþÿ # Usage: genDefForCoinUtils.ps <objDir> # <objDir> should be $(IntDir) in VS # Should be unnecessary when fired off from VS, but handy for testing. $VSPathComponents = ,'C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE' $VSPathComponents += 'C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN' $VSPathComponents += 'C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools' $VSPathComponents += 'C:\Windows\Microsoft.NET\Framework\v3.5' $VSPathComponents += 'C:\Windows\Microsoft.NET\Framework\v2.0.50727' $VSPathComponents += 'C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\VCPackages' $VSPathComponents += 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin' echo "Checking path for VS directories ..." foreach ($VSComponent in $VSPathComponents) { if ("$env:PATH" -notlike "*$VSComponent*") { echo "Prepending $VSComponent" $env:PATH = "$VSComponent;"+$env:PATH } } # Get the set of .obj files. Here we don't have problem with mingled # files for different libraries --- everything belongs to libCoinUtils --- # but we do want to exclude the *Test.obj files that will appear after # the unit test has been built. $objPath = $Args[0] "Looking in $objPath ..." $objFiles = get-item -path $objPath\Coin*.obj -exclude *Test.obj if (!$objfiles) { Out-Default -InputObject "No file selected" return 1 } $babyString = ".*Coin.*" $defFile = new-item -path $objPath -name libCoinUtils.def -type "file" -force add-content -path $defFile -value "LIBRARY libCoinUtils`r`n`r`nEXPORTS" $tmpfile = "$objPath\gendef.tmp.out" # "Using $tmpfile" $totalSyms = 0 echo "Processing files ... " foreach ($file in $objFiles) { $fileBase = $file.basename write-output $fileBase # The following line works just fine when this script is invoked directly # from powershell, and indirectly from a cmd window. But when it's invoked # as the pre-link event in VS, VS does something to output redirection that # causes all output to appear in the VS output window. Sending the dumpbin # output to a file fixes the problem until I can figure out how to block # VS's redirection of output. # $symbols = dumpbin /symbols $file $junk = dumpbin /OUT:$tmpfile /symbols $file $symbols = get-content $tmpfile # Eliminate Static symbols. Likewise labels. $symbols = $symbols -notmatch '^.*Static[^|]*\|.*$' $symbols = $symbols -notmatch '^.*Label[^|]*\|.*$' # Trim off the junk fore and aft. Some lines have no trailing information, # hence the second pattern $symbols = $symbols -replace '^.*\| ([^ ]+) .*$','$1' $symbols = $symbols -replace '^.*\| ([^ ]+)$','$1' # Lines we want will have @@ in the decorated name $filteredSymbols = $symbols -like "*@@*" $symLen = $filteredSymbols.length "Grabbed $symLen symbols" # Anything with "...@@$$..." seems to be invalid (either an artifact or a # system routine). But on occasion (template classes) it seems that the # required signature (@@$$F -> @@) is needed but isn't generated. So let's # try synthesizing it on the fly here. $filteredSymbols = $filteredSymbols -replace '@@\$\$F','@@' $filteredSymbols = $filteredSymbols -notlike '*@@$$*' # Lines with symbols that start with _ look to be compiler artifacts. Some # are acceptable to the linker, some not. It doesn't seem necessary to # export any of them. There's considerable, but not total, overlap between # this class of symbols and the previous class. $filteredSymbols = $filteredSymbols -notmatch '^_.*' # These are not acceptable to the linker, no specific reason given. $filteredSymbols = $filteredSymbols -notmatch '^\?\?.@\$\$.*' # Lines with symbols that start with ??_[EG] are deleting destructors # (whatever that is) and should not be exported. $filteredSymbols = $filteredSymbols -notmatch '^\?\?_[EG].*' $symLen = $filteredSymbols.length "Initial filtering leaves $symLen" # std:: is not our problem (and in fact causes trouble), but we have to be a # little bit careful not to throw out the baby with the bathwater. It's not # possible (as best I can see) to distinguish std:: in a parameter vs. std:: # as the name space for a method without knowing a lot more about the # mangling algorithm. Throw out the bath, then retrieve the baby. $notStd = $filteredSymbols -notlike "*@std@@*" $bathwaterAndBaby = $filteredSymbols -like "*@std@@*" $baby = $bathwaterAndBaby -match "$babyString" $filteredSymbols = $notStd+$baby $symLen = $filteredSymbols.length "Removing std:: leaves $symLen" $filteredSymbols = $filteredSymbols | sort-object -unique $symLen = $filteredSymbols.length "$symLen unique symbols" $totalSyms += $symLen add-content -path $defFile -value "`r`n; $fileBase" add-content -path $defFile -value $filteredSymbols } remove-item $tmpfile "Collected $totalSyms symbols." return DyLP-1.10.4/CoinUtils/MSVisualStudio/v9alt/libCoinUtils.vcproj0000644000175200017520000004520111527111333022542 0ustar coincoin DyLP-1.10.4/CoinUtils/MSVisualStudio/v9alt/CoinUtils.sln0000644000175200017520000000547611456461010021357 0ustar coincoinMicrosoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "libCoinUtils.vcproj", "{E032A017-12C0-4375-9B72-87C4E58E16B0}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CoinUtilsUnitTest", "CoinUtilsUnitTest.vcproj", "{AF4625D1-9169-4503-A18D-870DD6988B86}" ProjectSection(ProjectDependencies) = postProject {E032A017-12C0-4375-9B72-87C4E58E16B0} = {E032A017-12C0-4375-9B72-87C4E58E16B0} EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 DebugDLL|Win32 = DebugDLL|Win32 DebugDLL|x64 = DebugDLL|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E032A017-12C0-4375-9B72-87C4E58E16B0}.Debug|Win32.ActiveCfg = Debug|Win32 {E032A017-12C0-4375-9B72-87C4E58E16B0}.Debug|Win32.Build.0 = Debug|Win32 {E032A017-12C0-4375-9B72-87C4E58E16B0}.Debug|x64.ActiveCfg = Debug|x64 {E032A017-12C0-4375-9B72-87C4E58E16B0}.Debug|x64.Build.0 = Debug|x64 {E032A017-12C0-4375-9B72-87C4E58E16B0}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {E032A017-12C0-4375-9B72-87C4E58E16B0}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {E032A017-12C0-4375-9B72-87C4E58E16B0}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {E032A017-12C0-4375-9B72-87C4E58E16B0}.DebugDLL|x64.Build.0 = DebugDLL|x64 {E032A017-12C0-4375-9B72-87C4E58E16B0}.Release|Win32.ActiveCfg = Release|Win32 {E032A017-12C0-4375-9B72-87C4E58E16B0}.Release|Win32.Build.0 = Release|Win32 {E032A017-12C0-4375-9B72-87C4E58E16B0}.Release|x64.ActiveCfg = Release|x64 {E032A017-12C0-4375-9B72-87C4E58E16B0}.Release|x64.Build.0 = Release|x64 {AF4625D1-9169-4503-A18D-870DD6988B86}.Debug|Win32.ActiveCfg = Debug|Win32 {AF4625D1-9169-4503-A18D-870DD6988B86}.Debug|Win32.Build.0 = Debug|Win32 {AF4625D1-9169-4503-A18D-870DD6988B86}.Debug|x64.ActiveCfg = Debug|x64 {AF4625D1-9169-4503-A18D-870DD6988B86}.Debug|x64.Build.0 = Debug|x64 {AF4625D1-9169-4503-A18D-870DD6988B86}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {AF4625D1-9169-4503-A18D-870DD6988B86}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {AF4625D1-9169-4503-A18D-870DD6988B86}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {AF4625D1-9169-4503-A18D-870DD6988B86}.DebugDLL|x64.Build.0 = DebugDLL|x64 {AF4625D1-9169-4503-A18D-870DD6988B86}.Release|Win32.ActiveCfg = Release|Win32 {AF4625D1-9169-4503-A18D-870DD6988B86}.Release|Win32.Build.0 = Release|Win32 {AF4625D1-9169-4503-A18D-870DD6988B86}.Release|x64.ActiveCfg = Release|x64 {AF4625D1-9169-4503-A18D-870DD6988B86}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal DyLP-1.10.4/CoinUtils/MSVisualStudio/v9alt/coinutils.vsprops0000644000175200017520000000126211444013507022365 0ustar coincoin DyLP-1.10.4/CoinUtils/MSVisualStudio/v10/0000755000175200017520000000000013434203623016265 5ustar coincoinDyLP-1.10.4/CoinUtils/MSVisualStudio/v10/libCoinUtils/0000755000175200017520000000000013434203623020665 5ustar coincoinDyLP-1.10.4/CoinUtils/MSVisualStudio/v10/libCoinUtils/libCoinUtils.vcxproj0000644000175200017520000033004512456350462024716 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C} libCoinUtils StaticLibrary StaticLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\..\BuildTools\headers;C:\cygwin\home\ted\SYMPHONY-trunk\CoinUtils\inc;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS true true Level3 true NDEBUG;%(PreprocessorDefinitions) 0x0409 true X64 Default ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS Level3 true NDEBUG;%(PreprocessorDefinitions) 0x0409 true ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) _DEBUG;%(PreprocessorDefinitions) 0x0409 true X64 ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS true EnableFastChecks Level3 true ProgramDatabase _DEBUG;%(PreprocessorDefinitions) 0x0409 true Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) DyLP-1.10.4/CoinUtils/MSVisualStudio/v10/CoinUtils.sln0000644000175200017520000000377711537753401020740 0ustar coincoin Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "libCoinUtils\libCoinUtils.vcxproj", "{C4867F15-438D-4FF8-8388-62FBAAA9786C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unitTestCoinUtils", "unitTestCoinUtils\unitTestCoinUtils.vcxproj", "{D8879B84-4497-48E6-96A5-49B154FB0422}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.ActiveCfg = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.Build.0 = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.ActiveCfg = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.Build.0 = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.ActiveCfg = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.Build.0 = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.ActiveCfg = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.Build.0 = Release|x64 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|Win32.ActiveCfg = Debug|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|Win32.Build.0 = Debug|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|x64.ActiveCfg = Debug|x64 {D8879B84-4497-48E6-96A5-49B154FB0422}.Debug|x64.Build.0 = Debug|x64 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|Win32.ActiveCfg = Release|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|Win32.Build.0 = Release|Win32 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|x64.ActiveCfg = Release|x64 {D8879B84-4497-48E6-96A5-49B154FB0422}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal DyLP-1.10.4/CoinUtils/MSVisualStudio/v10/unitTestCoinUtils/0000755000175200017520000000000013434203623021736 5ustar coincoinDyLP-1.10.4/CoinUtils/MSVisualStudio/v10/unitTestCoinUtils/unitTestCoinUtils.vcxproj0000644000175200017520000010247512227360442027037 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 {D8879B84-4497-48E6-96A5-49B154FB0422} unitTestCoinUtils Application false MultiByte Application false MultiByte Application false MultiByte Application false MultiByte <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(SolutionDir)$(Platform)-$(PlatformToolset)-$(Configuration)\ $(Platform)-$(PlatformToolset)-$(Configuration)\ false $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset .\Debug/unitTestCoinUtils.tlb Disabled ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;COIN_MSVS;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS EnableFastChecks MultiThreadedDebugDLL true .\Debug/unitTestCoinUtils.pch Level3 true EditAndContinue Default _DEBUG;%(PreprocessorDefinitions) 0x0409 NotSet true true $(TargetDir)$(TargetName).pdb Console false MachineX86 libCoinUtils.lib;%(AdditionalDependencies) $(OutDir);%(AdditionalLibraryDirectories) false X64 .\Debug/unitTestCoinUtils.tlb Disabled ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;COIN_MSVS;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS EnableFastChecks MultiThreadedDebugDLL true .\Debug/unitTestCoinUtils.pch Level3 true ProgramDatabase Default _DEBUG;%(PreprocessorDefinitions) 0x0409 true true $(TargetDir)$(TargetName).pdb Console false MachineX64 libCoinUtils.lib;%(AdditionalDependencies) $(OutDir);%(AdditionalLibraryDirectories) false .\Release/unitTestCoinUtils.tlb MaxSpeed OnlyExplicitInline ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;COIN_MSVS;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS true MultiThreadedDLL true true .\Release/unitTestCoinUtils.pch Level3 true Default NDEBUG;%(PreprocessorDefinitions) 0x0409 true $(TargetDir)$(TargetName).pdb Console false MachineX86 libCoinUtils.lib;%(AdditionalDependencies) $(OutDir);%(AdditionalLibraryDirectories) true false X64 .\Release/unitTestCoinUtils.tlb MaxSpeed OnlyExplicitInline ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;COIN_MSVS;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS true MultiThreadedDLL true true .\Release/unitTestCoinUtils.pch Level3 true Default NDEBUG;%(PreprocessorDefinitions) 0x0409 true $(TargetDir)$(TargetName).pdb Console false MachineX64 libCoinUtils.lib;%(AdditionalDependencies) $(OutDir);%(AdditionalLibraryDirectories) true false Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) {c4867f15-438d-4ff8-8388-62fbaaa9786c} false DyLP-1.10.4/CoinUtils/MSVisualStudio/v10alt/0000755000175200017520000000000013434203623016766 5ustar coincoinDyLP-1.10.4/CoinUtils/MSVisualStudio/v10alt/libCoinUtils.vcxproj0000644000175200017520000005133311613161051023003 0ustar coincoin DebugDLL Win32 DebugDLL x64 Debug Win32 Debug x64 Release Win32 Release x64 {E032A017-12C0-4375-9B72-87C4E58E16B0} libCoinUtils ManagedCProj DynamicLibrary Unicode false StaticLibrary Unicode false true StaticLibrary Unicode false DynamicLibrary Unicode false StaticLibrary Unicode false true StaticLibrary Unicode false <_ProjectFileVersion>10.0.30319.1 $(CoinLibDir)\ $(CoinLibDir)\ $(CoinLibDir)\ $(CoinLibDir)\ $(CoinBinDir)\ $(CoinBinDir)\ AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled WIN32;COINUTILS_BUILD;_DEBUG;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) Default MultiThreadedDebugDLL Level3 ProgramDatabase X64 Disabled %(AdditionalIncludeDirectories) WIN32;COINUTILS_BUILD;_DEBUG;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) Default MultiThreadedDebugDLL Level3 ProgramDatabase %(AdditionalIncludeDirectories) WIN32;COINUTILS_BUILD;NDEBUG;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) Default MultiThreadedDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) X64 %(AdditionalIncludeDirectories) WIN32;COINUTILS_BUILD;NDEBUG;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) Default MultiThreadedDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) Disabled WIN32;COINUTILS_BUILD;_DEBUG;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) Default MultiThreadedDebugDLL Level3 ProgramDatabase generate .def file powershell -ExecutionPolicy RemoteSigned -File .\genDefForCoinUtils.ps1 $(IntDir) Osi %(AdditionalLibraryDirectories) $(IntDir)$(ProjectName).def true if not exist $(CoinLibDir) mkdir $(CoinLibDir) move /y $(OutDir)$(TargetName).lib $(CoinLibDir) X64 Disabled %(AdditionalIncludeDirectories) WIN32;COINUTILS_BUILD;_DEBUG;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase generate .def file powershell -ExecutionPolicy RemoteSigned -File .\genDefForCoinUtils.ps1 $(IntDir) Osi $(IntDir)$(ProjectName).def true move import library to $(CoinLibDir) if not exist $(CoinLibDir) mkdir $(CoinLibDir) move /y $(OutDir)$(TargetName).lib $(CoinLibDir) true true true true true true DyLP-1.10.4/CoinUtils/MSVisualStudio/v10alt/coinutils.props0000644000175200017520000000232411536303472022071 0ustar coincoin yes $(CoinRoot)\CoinUtils\CoinUtils\src <_ProjectFileVersion>10.0.30319.1 $(CoinUtilsIncludeDir);$(IncludePath) $(CoinUtilsIncludeDir);%(AdditionalIncludeDirectories) libCoinUtils.lib;%(AdditionalDependencies) $(CoinLibDir);%(AdditionalLibraryDirectories) $(Have_CoinUtils_Props) $(CoinUtilsIncludeDir) DyLP-1.10.4/CoinUtils/MSVisualStudio/v10alt/genDefForCoinUtils.ps10000644000175200017520000002333611536242645023123 0ustar coincoinþÿ # Usage: genDefForCoinUtils.ps <objDir> # <objDir> should be $(IntDir) in VS # Should be unnecessary when fired off from VS, but handy for testing. $VSPathComponents = ,'C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE' $VSPathComponents += 'C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN' $VSPathComponents += 'C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools' $VSPathComponents += 'C:\Windows\Microsoft.NET\Framework\v3.5' $VSPathComponents += 'C:\Windows\Microsoft.NET\Framework\v2.0.50727' $VSPathComponents += 'C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\VCPackages' $VSPathComponents += 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin' echo "Checking path for VS directories ..." foreach ($VSComponent in $VSPathComponents) { if ("$env:PATH" -notlike "*$VSComponent*") { echo "Prepending $VSComponent" $env:PATH = "$VSComponent;"+$env:PATH } } # Get the set of .obj files. Here we don't have problem with mingled # files for different libraries --- everything belongs to libCoinUtils --- # but we do want to exclude the *Test.obj files that will appear after # the unit test has been built. $objPath = $Args[0] "Looking in $objPath ..." $objFiles = get-item -path $objPath\Coin*.obj -exclude *Test.obj if (!$objfiles) { Out-Default -InputObject "No file selected" return 1 } $babyString = ".*Coin.*" $defFile = new-item -path $objPath -name libCoinUtils.def -type "file" -force add-content -path $defFile -value "LIBRARY libCoinUtils`r`n`r`nEXPORTS" $tmpfile = "$objPath\gendef.tmp.out" # "Using $tmpfile" $totalSyms = 0 echo "Processing files ... " foreach ($file in $objFiles) { $fileBase = $file.basename write-output $fileBase # The following line works just fine when this script is invoked directly # from powershell, and indirectly from a cmd window. But when it's invoked # as the pre-link event in VS, VS does something to output redirection that # causes all output to appear in the VS output window. Sending the dumpbin # output to a file fixes the problem until I can figure out how to block # VS's redirection of output. # $symbols = dumpbin /symbols $file $junk = dumpbin /OUT:$tmpfile /symbols $file $symbols = get-content $tmpfile # Eliminate Static symbols. Likewise labels. $symbols = $symbols -notmatch '^.*Static[^|]*\|.*$' $symbols = $symbols -notmatch '^.*Label[^|]*\|.*$' # Trim off the junk fore and aft. Some lines have no trailing information, # hence the second pattern $symbols = $symbols -replace '^.*\| ([^ ]+) .*$','$1' $symbols = $symbols -replace '^.*\| ([^ ]+)$','$1' # Lines we want will have @@ in the decorated name $filteredSymbols = $symbols -like "*@@*" $symLen = $filteredSymbols.length "Grabbed $symLen symbols" # Anything with "...@@$$..." seems to be invalid (either an artifact or a # system routine). But on occasion (template classes) it seems that the # required signature (@@$$F -> @@) is needed but isn't generated. So let's # try synthesizing it on the fly here. $filteredSymbols = $filteredSymbols -replace '@@\$\$F','@@' $filteredSymbols = $filteredSymbols -notlike '*@@$$*' # Lines with symbols that start with _ look to be compiler artifacts. Some # are acceptable to the linker, some not. It doesn't seem necessary to # export any of them. There's considerable, but not total, overlap between # this class of symbols and the previous class. $filteredSymbols = $filteredSymbols -notmatch '^_.*' # These are not acceptable to the linker, no specific reason given. $filteredSymbols = $filteredSymbols -notmatch '^\?\?.@\$\$.*' # Lines with symbols that start with ??_[EG] are deleting destructors # (whatever that is) and should not be exported. $filteredSymbols = $filteredSymbols -notmatch '^\?\?_[EG].*' $symLen = $filteredSymbols.length "Initial filtering leaves $symLen" # std:: is not our problem (and in fact causes trouble), but we have to be a # little bit careful not to throw out the baby with the bathwater. It's not # possible (as best I can see) to distinguish std:: in a parameter vs. std:: # as the name space for a method without knowing a lot more about the # mangling algorithm. Throw out the bath, then retrieve the baby. $notStd = $filteredSymbols -notlike "*@std@@*" $bathwaterAndBaby = $filteredSymbols -like "*@std@@*" $baby = $bathwaterAndBaby -match "$babyString" $filteredSymbols = $notStd+$baby $symLen = $filteredSymbols.length "Removing std:: leaves $symLen" $filteredSymbols = $filteredSymbols | sort-object -unique $symLen = $filteredSymbols.length "$symLen unique symbols" $totalSyms += $symLen add-content -path $defFile -value "`r`n; $fileBase" add-content -path $defFile -value $filteredSymbols } remove-item $tmpfile "Collected $totalSyms symbols." return DyLP-1.10.4/CoinUtils/MSVisualStudio/v10alt/CoinUtilsUnitTest.vcxproj0000644000175200017520000004056411613161051024020 0ustar coincoin DebugDLL Win32 DebugDLL x64 Debug Win32 Debug x64 Release Win32 Release x64 {AF4625D1-9169-4503-A18D-870DD6988B86} CoinUtilsUnitTest ManagedCProj Application Unicode false Application Unicode false true Application Unicode false Application Unicode false Application Unicode false true Application Unicode false <_ProjectFileVersion>10.0.30319.1 $(CoinBinDir)\ true $(CoinBinDir)\ true $(CoinBinDir)\ false $(CoinBinDir)\ false $(CoinBinDir)\ true $(CoinBinDir)\ true AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled WIN32;COINUTILS_BUILD;_DEBUG;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS MultiThreadedDebugDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) true true MachineX86 %(AdditionalDependencies) false X64 Disabled %(AdditionalIncludeDirectories) WIN32;COINUTILS_BUILD;_DEBUG;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS MultiThreadedDebugDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) true true MachineX64 %(AdditionalDependencies) false WIN32;COINUTILS_BUILD;NDEBUG;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS MultiThreadedDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) true MachineX86 %(AdditionalDependencies) false X64 WIN32;COINUTILS_BUILD;NDEBUG;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS MultiThreadedDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) true MachineX64 %(AdditionalDependencies) false Disabled WIN32;COINUTILS_BUILD;_DEBUG;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS MultiThreadedDebugDLL Level3 ProgramDatabase false %(AdditionalLibraryDirectories) true true MachineX86 %(AdditionalDependencies) X64 Disabled %(AdditionalIncludeDirectories) WIN32;COINUTILS_BUILD;_DEBUG;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS MultiThreadedDebugDLL Level3 ProgramDatabase false %(AdditionalDependencies) %(AdditionalLibraryDirectories) true true MachineX64 true true true true true true {e032a017-12c0-4375-9b72-87c4e58e16b0} false DyLP-1.10.4/CoinUtils/MSVisualStudio/v10alt/CoinUtils.sln0000644000175200017520000000524511536242645021433 0ustar coincoinMicrosoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "libCoinUtils.vcxproj", "{E032A017-12C0-4375-9B72-87C4E58E16B0}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CoinUtilsUnitTest", "CoinUtilsUnitTest.vcxproj", "{AF4625D1-9169-4503-A18D-870DD6988B86}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 DebugDLL|Win32 = DebugDLL|Win32 DebugDLL|x64 = DebugDLL|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E032A017-12C0-4375-9B72-87C4E58E16B0}.Debug|Win32.ActiveCfg = Debug|Win32 {E032A017-12C0-4375-9B72-87C4E58E16B0}.Debug|Win32.Build.0 = Debug|Win32 {E032A017-12C0-4375-9B72-87C4E58E16B0}.Debug|x64.ActiveCfg = Debug|x64 {E032A017-12C0-4375-9B72-87C4E58E16B0}.Debug|x64.Build.0 = Debug|x64 {E032A017-12C0-4375-9B72-87C4E58E16B0}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {E032A017-12C0-4375-9B72-87C4E58E16B0}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {E032A017-12C0-4375-9B72-87C4E58E16B0}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {E032A017-12C0-4375-9B72-87C4E58E16B0}.DebugDLL|x64.Build.0 = DebugDLL|x64 {E032A017-12C0-4375-9B72-87C4E58E16B0}.Release|Win32.ActiveCfg = Release|Win32 {E032A017-12C0-4375-9B72-87C4E58E16B0}.Release|Win32.Build.0 = Release|Win32 {E032A017-12C0-4375-9B72-87C4E58E16B0}.Release|x64.ActiveCfg = Release|x64 {E032A017-12C0-4375-9B72-87C4E58E16B0}.Release|x64.Build.0 = Release|x64 {AF4625D1-9169-4503-A18D-870DD6988B86}.Debug|Win32.ActiveCfg = Debug|Win32 {AF4625D1-9169-4503-A18D-870DD6988B86}.Debug|Win32.Build.0 = Debug|Win32 {AF4625D1-9169-4503-A18D-870DD6988B86}.Debug|x64.ActiveCfg = Debug|x64 {AF4625D1-9169-4503-A18D-870DD6988B86}.Debug|x64.Build.0 = Debug|x64 {AF4625D1-9169-4503-A18D-870DD6988B86}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32 {AF4625D1-9169-4503-A18D-870DD6988B86}.DebugDLL|Win32.Build.0 = DebugDLL|Win32 {AF4625D1-9169-4503-A18D-870DD6988B86}.DebugDLL|x64.ActiveCfg = DebugDLL|x64 {AF4625D1-9169-4503-A18D-870DD6988B86}.DebugDLL|x64.Build.0 = DebugDLL|x64 {AF4625D1-9169-4503-A18D-870DD6988B86}.Release|Win32.ActiveCfg = Release|Win32 {AF4625D1-9169-4503-A18D-870DD6988B86}.Release|Win32.Build.0 = Release|Win32 {AF4625D1-9169-4503-A18D-870DD6988B86}.Release|x64.ActiveCfg = Release|x64 {AF4625D1-9169-4503-A18D-870DD6988B86}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal DyLP-1.10.4/CoinUtils/MSVisualStudio/v14/0000755000175200017520000000000013434203623016271 5ustar coincoinDyLP-1.10.4/CoinUtils/MSVisualStudio/v14/libCoinUtils/0000755000175200017520000000000013434203623020671 5ustar coincoinDyLP-1.10.4/CoinUtils/MSVisualStudio/v14/libCoinUtils/libCoinUtils.vcxproj0000644000175200017520000033045313401025010024700 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C} libCoinUtils 10.0.17763.0 StaticLibrary v141 StaticLibrary v141 StaticLibrary v141 StaticLibrary v141 <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\..\BuildTools\headers;C:\cygwin\home\ted\SYMPHONY-trunk\CoinUtils\inc;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS true true Level3 true NDEBUG;%(PreprocessorDefinitions) 0x0409 true X64 Default ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS Level3 true NDEBUG;%(PreprocessorDefinitions) 0x0409 true ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) _DEBUG;%(PreprocessorDefinitions) 0x0409 true X64 ..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) COINUTILS_BUILD;WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions);_SCL_SECURE_NO_WARNINGS true EnableFastChecks Level3 true ProgramDatabase _DEBUG;%(PreprocessorDefinitions) 0x0409 true Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks Disabled %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) EnableFastChecks MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) MaxSpeed %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) DyLP-1.10.4/CoinUtils/ltmain.sh0000755000175200017520000057753011405215457014634 0ustar coincoin# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 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 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # 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. basename="s,^.*/,,g" # 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" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" # 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 # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # 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 "$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" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # 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. func_win32_libid () { 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 if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $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_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 () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done 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 "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # 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. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # 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 $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi 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 my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do 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 have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2005 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --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 $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # 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= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # 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= 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) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$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,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$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. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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 $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) 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 "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 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 $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "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." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </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." $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 $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </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." $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 $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built fi 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 case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$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 dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= 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 compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes 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 $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" 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*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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*) # 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 deplibs="$deplibs -framework System" 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 deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -pg pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ -t[45]*|-txscale*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 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*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # 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 ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" 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. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'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\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; 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 test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$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 test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$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 case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; 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 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 "$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) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; 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 (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac 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 ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." 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 -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; 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 newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` 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 used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi 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. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # 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 case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$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 $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE 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. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$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 $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$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 notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi 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 newlib_search_path="$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*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test 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 test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$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 -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 *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if 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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; 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*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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 "$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 module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; 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 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; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$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 $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$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:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; 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:"*) ;; *) finalize_shlibpath="$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 [\\/]*) add_dir="$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*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$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" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared 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 "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs 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 "*) ;; *) lib_search_path="$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 "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$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 tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" 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 if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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="$2" number_minor="$3" number_revision="$4" # # 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 darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; 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]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE 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 major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` 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 iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` 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 iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; 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 $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$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) ;; $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 removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` dependency_libs=`$echo "$dependency_libs " | ${SED} -e "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 temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 "*) ;; *) dlfiles="$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 "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-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 deplibs="$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. $rm conftest.c cat > conftest.c </dev/null` 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$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 newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e '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 "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $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 fi ;; 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 is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; 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 # 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$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 if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$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 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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$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" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$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 "$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 realname="$2" shift; 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 linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "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"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $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:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # 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 output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$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. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 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~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "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" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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\" 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 # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(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 "$mode" = relink; then $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 $show "${rm}r $gentop" $run ${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 $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run 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 "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $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 wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${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" # $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" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$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 "*) ;; *) finalize_rpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$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 "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # 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/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= 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*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; 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 "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" 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 rpath="$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 rpath="$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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? 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" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e '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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` 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 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #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 # 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 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ 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; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); 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 ("getcwd failed"); 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 ("getcwd failed"); 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 * 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; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # 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 variable: 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 echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ 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 >> $output "\ # 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 $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE 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 $EXIT_FAILURE fi fi\ " chmod +x $output fi 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" 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" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$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 # 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 $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_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 for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$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= 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 save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; 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 "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then 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) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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' # Libraries that this one depends upon. dependency_libs='$dependency_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 fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # 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. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; 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. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$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 "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. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi 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 $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run 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 if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run 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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` 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 file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "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) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $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" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 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 -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # 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 ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" 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) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; 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 (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$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 rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [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 --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information 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. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [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: $modename [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 -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking 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: $modename [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: $modename [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: $modename [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 rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [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 -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 -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] 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: $modename [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." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # 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 disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: DyLP-1.10.4/CoinUtils/README0000644000175200017520000000020112422527716013645 0ustar coincoinThis is the CoinUtils project. For information on the purpose o this project please visit https://projects.coin-or.org/CoinUtils DyLP-1.10.4/CoinUtils/config.sub0000755000175200017520000007772611405215457014776 0ustar coincoin#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-04-29' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # 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 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # 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. # 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) 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) os= basic_machine=$1 ;; -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*) 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 \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | 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 | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-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-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | 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-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | 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-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # 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 ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; 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 ;; cr16c) basic_machine=cr16c-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 ;; 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'm not sure what "Sysv32" means. Should this be sysv3.2? 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 ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; 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-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; 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 ;; 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 ;; 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) basic_machine=powerpc-unknown ;; ppc-*) 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) 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 ;; 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 ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; 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 ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-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[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. -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* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -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* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -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*) # 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 ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -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 ;; # 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 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) 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 ;; -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: DyLP-1.10.4/CoinUtils/coinutils-uninstalled.pc.in0000644000175200017520000000045511573155175020264 0ustar coincoinprefix=@prefix@ libdir=@ABSBUILDDIR@/src Name: CoinUtils Description: COIN-OR Utilities URL: https://projects.coin-or.org/CoinUtils Version: @PACKAGE_VERSION@ Libs: ${libdir}/libCoinUtils.la @COINUTILSLIB_PCLIBS@ Cflags: -I@abs_source_dir@/src -I@ABSBUILDDIR@/src Requires: @COINUTILSLIB_PCREQUIRES@ DyLP-1.10.4/CoinUtils/configure.ac0000644000175200017520000002413613434057056015267 0ustar coincoin# Copyright (C) 2006,2009 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: configure.ac 2097 2019-02-22 20:40:14Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 ############################################################################# # Names and other basic things # ############################################################################# AC_PREREQ(2.59) AC_INIT([CoinUtils],[2.11.0],[http://projects.coin-or.org/CoinUtils]) AC_COPYRIGHT([ Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License.]) # List one file in the package so that the configure script can test # whether the package is actually there AC_CONFIG_SRCDIR(src/CoinError.cpp) # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. AC_PREFIX_DEFAULT([`pwd`]) ############################################################################# # Standard build tool stuff # ############################################################################# # Get the system type AC_CANONICAL_BUILD # If this project depends on external projects, the Externals file in # the source root directory contains definition of where to find those # externals. The following macro ensures that those externals are # retrieved by svn if they are not there yet. AC_COIN_PROJECTDIR_INIT(CoinUtils,14:0:11) # Check if user wants to produce debugging code AC_COIN_DEBUG_COMPILE(CoinUtils) # Get the name of the C++ compiler and appropriate compiler options AC_COIN_PROG_CXX # Get the name of the Fortran compiler and appropriate compiler options AC_COIN_PROG_F77 # Find out how to call Fortran from C and determine Fortran runtime libraries if test "x$F77" != xunavailable then AC_COIN_F77_WRAPPERS fi # Initialize automake and libtool AC_COIN_INIT_AUTO_TOOLS ############################################################################ # Stuff that we need for finite and isnan # ############################################################################ AC_COIN_CHECK_ISFINITE AC_COIN_CHECK_ISNAN ############################################################################# # Thread configuration # ############################################################################# # Define new options: # --enable-coinutils-threads # --enable-coinutils-mempool-override-new # --enable-coinutils-mempool-maxpooled AC_LANG_PUSH(C++) AC_ARG_ENABLE([coinutils-threads], [AC_HELP_STRING([--enable-coinutils-threads], [enables compilation of thread aware CoinUtils (mempool so far)])]) if test "$enable_coinutils_threads" = yes; then # Define the preprocessor macro AC_DEFINE([COINUTILS_PTHREADS],[1],[Define to 1 if the thread aware version of CoinUtils should be compiled]) AC_CHECK_LIB([rt],[clock_gettime], [COINUTILSLIB_LIBS="-lrt $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lrt $COINUTILSLIB_PCLIBS"], [AC_MSG_ERROR([--enable-coinutils-threads selected, but -lrt unavailable])]) AC_CHECK_LIB([pthread],[pthread_create], [COINUTILSLIB_LIBS="-lpthread $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lpthread $COINUTILSLIB_PCLIBS"], [AC_MSG_ERROR([--enable-coinutils-threads selected, but -lpthreads unavailable])]) fi AC_ARG_ENABLE([coinutils-mempool-override-new], [AC_HELP_STRING([--enable-coinutils-mempool-override-new], [enables the CoinUtils mempool to override global new/delete])]) if test "$enable_coinutils_mempool_override_new" = yes; then AC_DEFINE([COINUTILS_MEMPOOL_OVERRIDE_NEW],[1],[Define to 1 CoinUtils should override global new/delete]) fi AC_ARG_ENABLE([coinutils-mempool-maxpooled], [AC_HELP_STRING([--enable-coinutils-mempool-maxpooled], [Specify the default maximum memory allocation size that is served by the memory pool. If negative (or 'no') then the memory pool is disabled completely. Otherwise its value can be overridden at runtime using the COINUTILS_MEMPOOL_MAXPOOLED environment variable.])]) if test "$enable_coinutils_mempool_maxpooled" = yes; then AC_DEFINE([COINUTILS_MEMPOOL_MAXPOOLED],[4096],[Default maximum pooled allocation size]) elif test "$enable_coinutils_mempool_maxpooled" = no; then AC_DEFINE([COINUTILS_MEMPOOL_MAXPOOLED],[-1],[Disable CoinUtils memory pool]) elif test x"$enable_coinutils_mempool_maxpooled" = x; then AC_DEFINE([COINUTILS_MEMPOOL_MAXPOOLED],[-1],[Disable CoinUtils memory pool]) else AC_DEFINE_UNQUOTED([COINUTILS_MEMPOOL_MAXPOOLED],${enable_coinutils_mempool_maxpooled},[Default maximum pooled allocation size]) fi ############################################################################# # Finding certain integer types # ############################################################################# AC_COIN_CHECK_CXX_CHEADER(inttypes) AC_COIN_CHECK_CXX_CHEADER(stdint) ##### 64bit Integer types # The problem here is that you can't extend `int64_t' to `unsigned int64_t'. # So we need distinct CoinInt64 and CoinUInt64. It should be safe to assume # uint64_t, given int64_t. CoinInt64= CoinUInt64= # try int64_t AC_CHECK_TYPE([int64_t],[CoinInt64=int64_t ; CoinUInt64=uint64_t],[],[ #ifdef HAVE_CINTTYPES # include #else # ifdef HAVE_INTTYPES_H # include # endif #endif ]) # We need to use the C compiler in the AC_CHECK_SIZEOF since otherwise the # MSCV compiler complains about redefinition of "exit". ac_cv_sizeof_ # sometimes adds `^M' to the number, hence the check for `8?'. AC_LANG_PUSH(C) # try long long if test x"$CoinInt64" = x; then AC_CHECK_SIZEOF([long long]) case $ac_cv_sizeof_long_long in 8 | 8?) CoinInt64="long long" CoinUInt64="unsigned long long" ;; esac fi #try long if test x"$CoinInt64" = x; then AC_CHECK_SIZEOF([long]) case $ac_cv_sizeof_long in 8 | 8?) CoinInt64="long" CoinUInt64="unsigned long" ;; esac fi #try int if test x"$CoinInt64" = x; then AC_CHECK_SIZEOF([int]) case $ac_cv_sizeof_int in 8 | 8?) CoinInt64="int" CoinUInt64="unsigned int" ;; esac fi AC_LANG_POP(C) if test x"$CoinInt64" = x; then AC_MSG_ERROR([Cannot find integer type with 64 bits]) fi AC_DEFINE_UNQUOTED([COIN_INT64_T],[$CoinInt64],[Define to 64bit integer type]) AC_DEFINE_UNQUOTED([COIN_UINT64_T],[$CoinInt64], [Define to 64bit unsigned integer type]) ##### Integer type for Pointer CoinIntPtr= # try intptr_t AC_CHECK_TYPE([intptr_t],[CoinIntPtr=intptr_t],[],[ #ifdef HAVE_CINTTYPES # include #else # ifdef HAVE_INTTYPES_H # include # endif #endif ]) AC_LANG_PUSH(C) # try long long if test x"$CoinIntPtr" = x; then AC_CHECK_SIZEOF([int *]) AC_CHECK_SIZEOF([long long]) if test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_int_p"; then CoinIntPtr="long long" fi fi # try long if test x"$CoinIntPtr" = x; then AC_CHECK_SIZEOF([long]) if test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_int_p"; then CoinIntPtr="long" fi fi # try int if test x"$CoinIntPtr" = x; then AC_CHECK_SIZEOF([int]) if test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_int_p"; then CoinIntPtr="int" fi fi AC_LANG_POP(C) if test x"$CoinIntPtr" = x; then AC_MSG_ERROR([Cannot find integer type capturing pointer]) fi AC_DEFINE_UNQUOTED([COIN_INTPTR_T],[$CoinIntPtr],[Define to integer type capturing pointer]) if test "x$ac_cv_header_stdint_h" = xyes ; then AC_DEFINE([COINUTILS_HAS_STDINT_H], [1], [Define to 1 if stdint.h is available for CoinUtils]) fi if test "x$ac_cv_header_cstdint" = xyes ; then AC_DEFINE([COINUTILS_HAS_CSTDINT], [1], [Define to 1 if cstdint is available for CoinUtils]) fi ############################################################################# # Check whether we have windows.h # ############################################################################# AC_CHECK_HEADERS([windows.h]) ############################################################################# # Check whether we have endian.h # ############################################################################# AC_CHECK_HEADERS([endian.h]) ############################################################################# # COIN-OR components # ############################################################################# AC_COIN_CHECK_LIBM(CoinUtilsLib) AC_COIN_CHECK_PACKAGE_BLAS(CoinUtilsLib) AC_COIN_CHECK_PACKAGE_LAPACK(CoinUtilsLib) AC_COIN_CHECK_PACKAGE(Glpk, [coinglpk], [CoinUtilsLib]) AC_COIN_CHECK_PACKAGE(Sample, [coindatasample]) AC_COIN_CHECK_PACKAGE(Netlib, [coindatanetlib]) AC_COIN_CHECK_GNU_ZLIB(CoinUtilsLib) AC_COIN_CHECK_GNU_BZLIB(CoinUtilsLib) AC_COIN_CHECK_GNU_READLINE(CoinUtilsLib) AC_COIN_VPATH_LINK(test/plan.mod) ############################################################################# # Check for doxygen # ############################################################################# AC_COIN_DOXYGEN() ############################################################################## # Finishing up by writing all the output # ############################################################################## # Here list all the files that configure should create (except for the # configuration header file) AC_CONFIG_FILES([Makefile src/Makefile test/Makefile coinutils.pc coinutils-uninstalled.pc]) AC_CONFIG_FILES([doxydoc/doxygen.conf]) # Here put the location and name of the configuration header file AC_CONFIG_HEADER([src/config.h src/config_coinutils.h]) # Finally, we let configure write all the output... AC_COIN_FINALIZE DyLP-1.10.4/CoinUtils/INSTALL0000644000175200017520000000031010740302141013777 0ustar coincoinThis is the CoinUtils project. For information on how to install the package this project was downloaded with see the INSTALL file in the root of the package (the parent directory of this directory). DyLP-1.10.4/CoinUtils/doxydoc/0000755000175200017520000000000013434203623014435 5ustar coincoinDyLP-1.10.4/CoinUtils/doxydoc/doxygen.conf.in0000644000175200017520000017377512231275134017412 0ustar coincoin# Doxyfile 1.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = @PACKAGE_NAME@ # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @PACKAGE_VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doxydoc # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = "@abs_top_srcdir@/" # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = @coin_doxy_logname@ #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @abs_top_srcdir@/src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.hpp \ *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.svn* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 3 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = YES # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see #
Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = YES #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = YES # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = letter # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = @coin_doxy_tagfiles@ # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = @coin_doxy_tagname@ # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = YES # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = NO # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @coin_doxy_usedot@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES DyLP-1.10.4/CoinUtils/Makefile.am0000644000175200017520000000561512462215603015030 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1788 2015-01-28 17:25:23Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # Subdirectories # ######################################################################## SUBDIRS = src # We don't want to compile the test subdirectory, unless the test target is # specified. But we need to list it as subdirectory to make sure that it is # included in the tarball if ALWAYS_FALSE SUBDIRS += test endif ######################################################################## # Additional files to be included in tarball # ######################################################################## # Here we need include all files that are not mentioned in other Makefiles EXTRA_DIST = ######################################################################## # Extra Targets # ######################################################################## test: all cd test; $(MAKE) test unitTest: test # Doxygen documentation doxydoc: doxygen doxydoc/doxygen.conf clean-doxydoc: ( cd doxydoc ; rm -rf html *.log *.tag ) clean-local: clean-doxydoc if test -r test/Makefile; then cd test; $(MAKE) clean; fi distclean-local: if test -r test/Makefile; then cd test; $(MAKE) distclean; fi install-exec-local: install-doc uninstall-local: uninstall-doc .PHONY: test unitTest doxydoc ######################################################################## # Installation of the addlibs and .pc file # ######################################################################## pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = coinutils.pc addlibsdir = $(DESTDIR)$(datadir)/coin/doc/CoinUtils install-data-hook: @$(mkdir_p) "$(addlibsdir)" if COIN_HAS_PKGCONFIG PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@:$(DESTDIR)$(pkgconfiglibdir) \ "$(PKG_CONFIG)" --libs coinutils > $(addlibsdir)/coinutils_addlibs.txt else if COIN_CXX_IS_CL echo "-libpath:`$(CYGPATH_W) @abs_lib_dir@` libCoinUtils.lib @COINUTILSLIB_LIBS_INSTALLED@" > $(addlibsdir)/coinutils_addlibs.txt else echo -L@abs_lib_dir@ -lCoinUtils @COINUTILSLIB_LIBS_INSTALLED@ > $(addlibsdir)/coinutils_addlibs.txt endif endif uninstall-hook: rm -f $(addlibsdir)/coinutils_addlibs.txt ######################################################################## # Maintainer Stuff # ######################################################################## CLEANFILES = # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = include BuildTools/Makemain.inc DyLP-1.10.4/CoinUtils/missing0000755000175200017520000002540611405215457014376 0ustar coincoin#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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 run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] 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 # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: DyLP-1.10.4/CoinUtils/install-sh0000755000175200017520000002202111405215457014771 0ustar coincoin#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # 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. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= 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: -c (ignored) -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. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; 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 for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi 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 "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # 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: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # 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 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $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 "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: DyLP-1.10.4/CoinUtils/test/0000755000175200017520000000000013434203623013743 5ustar coincoinDyLP-1.10.4/CoinUtils/test/CoinPackedVectorTest.cpp0000644000175200017520000006775111654260357020523 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifdef NDEBUG #undef NDEBUG #endif #include #include "CoinPragma.hpp" #include "CoinFloatEqual.hpp" #include "CoinFinite.hpp" #include "CoinPackedVector.hpp" #include "CoinShallowPackedVector.hpp" //-------------------------------------------------------------------------- void CoinPackedVectorUnitTest() { int i; // Test default constructor { CoinPackedVector r; assert( r.indices_==NULL ); assert( r.origIndices_==NULL ); assert( r.elements_==NULL ); assert( r.getNumElements()==0 ); assert( r.capacity_==0); } // Test set and get methods const int ne = 4; int inx[ne] = { 1, 3, 4, 7 }; double el[ne] = { 1.2, 3.4, 5.6, 7.8 }; { CoinPackedVector r; assert( r.getNumElements()==0 ); // Test setting/getting elements with int* & float* vectors r.setVector( ne, inx, el ); assert( r.getNumElements()==ne ); for ( i=0; ir.getElements()[i] ) incr=false; assert( !incr ); r.sortIncrElement(); incr = true; for ( i=1; ir.getElements()[i] ) incr=false; assert( incr ); } { CoinPackedVector r; const int ne = 3; int inx[ne] = { 1, 2, 3 }; double el[ne] = { 2.2, 4.4, 8.8}; r.setVector(ne,inx,el); int c = r.capacity(); int max = r.getMaxIndex(); int min = r.getMinIndex(); // Test swap function r.swap(0,2); assert( r.getIndices()[0]==3 ); assert( r.getIndices()[1]==2 ); assert( r.getIndices()[2]==1 ); assert( r.getElements()[0]==8.8 ); assert( r.getElements()[1]==4.4 ); assert( r.getElements()[2]==2.2 ); assert( r.getMaxIndex() == max ); assert( r.getMinIndex() == min ); assert( r.capacity() == c ); // Test the append function CoinPackedVector s; const int nes = 4; int inxs[nes] = { 11, 12, 13, 14 }; double els[nes] = { .122, 14.4, 18.8, 19.9}; s.setVector(nes,inxs,els); r.append(s); assert( r.getNumElements()==7 ); assert( r.getIndices()[0]==3 ); assert( r.getIndices()[1]==2 ); assert( r.getIndices()[2]==1 ); assert( r.getIndices()[3]==11 ); assert( r.getIndices()[4]==12 ); assert( r.getIndices()[5]==13 ); assert( r.getIndices()[6]==14 ); assert( r.getElements()[0]==8.8 ); assert( r.getElements()[1]==4.4 ); assert( r.getElements()[2]==2.2 ); assert( r.getElements()[3]==.122 ); assert( r.getElements()[4]==14.4 ); assert( r.getElements()[5]==18.8 ); assert( r.getElements()[6]==19.9 ); assert( r.getMaxIndex() == 14 ); assert( r.getMinIndex() == 1 ); // Test the resize function c = r.capacity(); r.truncate(4); assert( r.getNumElements()==4 ); assert( r.getIndices()[0]==3 ); assert( r.getIndices()[1]==2 ); assert( r.getIndices()[2]==1 ); assert( r.getIndices()[3]==11 ); assert( r.getElements()[0]==8.8 ); assert( r.getElements()[1]==4.4 ); assert( r.getElements()[2]==2.2 ); assert( r.getElements()[3]==.122 ); assert( r.getMaxIndex() == 11 ); assert( r.getMinIndex() == 1 ); assert( r.capacity() == c ); } // Test copy constructor and assignment operator { CoinPackedVector rhs; { CoinPackedVector r; { CoinPackedVector rC1(r); assert( 0==r.getNumElements() ); assert( 0==rC1.getNumElements() ); r.setVector( ne, inx, el ); assert( ne==r.getNumElements() ); assert( 0==rC1.getNumElements() ); } CoinPackedVector rC2(r); assert( ne==r.getNumElements() ); assert( ne==rC2.getNumElements() ); for ( i=0; i, +v1, v1+v2 { const int ne1 = 5; int inx1[ne1] = { 1, 3, 4, 7, 5 }; double el1[ne1] = { 1., 5., 6., 2., 9. }; const int ne2 = 4; int inx2[ne2] = { 7, 4, 2, 1 }; double el2[ne2] = { 7., 4., 2., 1. }; CoinPackedVector v1; CoinPackedVector v2; CoinPackedVector r ; CoinPackedVector rV ; v1.setVector(ne1,inx1,el1); rV.setVector(ne1,inx1,el1) ; r = v1 + v2 ; assert(r.isEquivalent(rV)) ; r = v2 + v1 ; assert(r.isEquivalent(rV)) ; v2.setVector(ne2,inx2,el2); r = v1 + v2 ; const int ner = 6; int inxr[ner] = { 1, 2, 3, 4, 5, 7 }; double elr[ner] = { 1.+1., 0.+2., 5.+0., 6.+4., 9.+0., 2.+7. }; rV.setVector(ner,inxr,elr); assert( r.isEquivalent(rV) ); } // Test subtracting vectors. Note that zeros are not automatically // compressed out of the result. { const int ne1 = 5; int inx1[ne1] = { 1, 3, 4, 7, 5 }; double el1[ne1] = { 1., 5., 6., 2., 9. }; const int ne2 = 4; int inx2[ne2] = { 7, 4, 2, 1 }; double el2[ne2] = { 7., 4., 2., 1. }; CoinPackedVector v1; v1.setVector(ne1,inx1,el1); CoinPackedVector v2; v2.setVector(ne2,inx2,el2); CoinPackedVector r = v1 - v2; const int ner = 6; int inxr[ner] = { 1, 2, 3, 4, 5, 7 }; double elr[ner] = { 1.-1., 0.-2., 5.-0., 6.-4., 9.-0., 2.-7. }; CoinPackedVector rV; rV.setVector(ner,inxr,elr); assert( r.isEquivalent(rV) ); } // Test multiplying vectors. Note that zeros are not automatically // compressed out of the result. { const int ne1 = 5; int inx1[ne1] = { 1, 3, 4, 7, 5 }; double el1[ne1] = { 1., 5., 6., 2., 9. }; const int ne2 = 4; int inx2[ne2] = { 7, 4, 2, 1 }; double el2[ne2] = { 7., 4., 2., 1. }; CoinPackedVector v1; v1.setVector(ne1,inx1,el1); CoinPackedVector v2; v2.setVector(ne2,inx2,el2); CoinPackedVector r = v1 * v2; const int ner = 6; int inxr[ner] = { 1, 2, 3, 4, 5, 7 }; double elr[ner] = { 1.*1., 0.*2., 5.*0., 6.*4., 9.*0., 2.*7. }; CoinPackedVector rV; rV.setVector(ner,inxr,elr); assert( r.isEquivalent(rV) ); } // Test dividing vectors. Note that zeros are not automatically compressed // out of the result. Previously, used HUGE_VAL to get IEEE infinity, but // this triggers a bug in some GCC compilers. -- lh, 061020 -- { const int ne1 = 3; int inx1[ne1] = { 1, 4, 7 }; double el1[ne1] = { 1., 6., 2. }; const int ne2 = 4; int inx2[ne2] = { 7, 4, 2, 1 }; double el2[ne2] = { 7., 4., 2., 1. }; # ifdef COIN_C_FINITE double one = 1.0 ; double zero = 0.0 ; double infty = one/zero ; # else double infty = COIN_DBL_MAX ; # endif CoinPackedVector v1; CoinPackedVector v2; CoinPackedVector r ; CoinPackedVector rV; v1.setVector(ne1,inx1,el1) ; rV.setConstant(ne1,inx1,0) ; r = v2 / v1; assert(r.isEquivalent(rV)) ; rV.setConstant(ne1,inx1,infty) ; r = v1 / v2; assert(r.isEquivalent(rV)) ; r.isEquivalent(rV) ; v2.setVector(ne2,inx2,el2); r = v1 / v2; const int ner = 4; int inxr[ner] = { 1, 2, 4, 7 }; double elr[ner] = { 1./1., 0./2., 6./4., 2./7. }; rV.setVector(ner,inxr,elr); assert( r.isEquivalent(rV) ); } // Test sum { CoinPackedVector s; assert( s.sum() == 0 ); s.insert(25,45.); assert(s.sum()==45.); const int ne1 = 5; int inx1[ne1] = { 10, 3, 4, 7, 5 }; double el1[ne1] = { 1., 5., 6., 2., 9. }; s.setVector(ne1,inx1,el1); assert(s.sum()==1.+5.+6.+2.+9.); } // Just another interesting test { // Create numerator vector const int ne1 = 2; int inx1[ne1] = { 1, 4 }; double el1[ne1] = { 1., 6. }; CoinPackedVector v1(ne1,inx1,el1); // create denominator vector const int ne2 = 3; int inx2[ne2] = { 1, 2, 4 }; double el2[ne2] = { 1., 7., 4.}; CoinPackedVector v2(ne2,inx2,el2); // Compute ratio CoinPackedVector ratio = v1 / v2; // Sort ratios ratio.sortIncrElement(); // Test that the sort really worked assert( ratio.getElements()[0] == 0.0/7.0 ); assert( ratio.getElements()[1] == 1.0/1.0 ); assert( ratio.getElements()[2] == 6.0/4.0 ); // Get numerator of of sorted ratio vector assert( v1[ ratio.getIndices()[0] ] == 0.0 ); assert( v1[ ratio.getIndices()[1] ] == 1.0 ); assert( v1[ ratio.getIndices()[2] ] == 6.0 ); // Get denominator of of sorted ratio vector assert( v2[ ratio.getIndices()[0] ] == 7.0 ); assert( v2[ ratio.getIndices()[1] ] == 1.0 ); assert( v2[ ratio.getIndices()[2] ] == 4.0 ); } // Test copy constructor from ShallowPackedVector { const int ne = 4; int inx[ne] = { 1, 4, 0, 2 }; double el[ne] = { 10., 40., 1., 50. }; CoinPackedVector std(ne,inx,el); CoinShallowPackedVector * spvP = new CoinShallowPackedVector(ne,inx,el); CoinPackedVector pv(*spvP); assert( pv == std ); assert( pv.isEquivalent(std) ); delete spvP; assert( pv == std ); assert( pv.isEquivalent(std) ); pv.sortIncrElement(); assert( pv != std ); assert( pv.isEquivalent(std) ); } // Test assignment from ShallowPackedVector { const int ne = 4; int inx[ne] = { 1, 4, 0, 2 }; double el[ne] = { 10., 40., 1., 50. }; CoinPackedVector std(ne,inx,el); CoinShallowPackedVector * spvP = new CoinShallowPackedVector(ne,inx,el); CoinPackedVector pv; pv = *spvP; assert( pv == std ); assert( pv.isEquivalent(std) ); delete spvP; assert( pv == std ); assert( pv.isEquivalent(std) ); pv.sortIncrElement(); assert( pv != std ); assert( pv.isEquivalent(std) ); } { // Test that sample usage works const int ne = 4; int inx[ne] = { 1, 4, 0, 2 }; double el[ne] = { 10., 40., 1., 50. }; CoinPackedVector r(ne,inx,el); assert( r.getIndices()[0]== 1 ); assert( r.getElements()[0]==10. ); assert( r.getIndices()[1]== 4 ); assert( r.getElements()[1]==40. ); assert( r.getIndices()[2]== 0 ); assert( r.getElements()[2]== 1. ); assert( r.getIndices()[3]== 2 ); assert( r.getElements()[3]==50. ); assert( r.getOriginalPosition()[0]==0 ); assert( r.getOriginalPosition()[1]==1 ); assert( r.getOriginalPosition()[2]==2 ); assert( r.getOriginalPosition()[3]==3 ); assert( r[ 0]==1. ); assert( r[ 1]==10.); assert( r[ 2]==50.); assert( r[ 3]==0. ); assert( r[ 4]==40.); r.sortIncrElement(); assert( r.getIndices()[0]== 0 ); assert( r.getElements()[0]== 1. ); assert( r.getIndices()[1]== 1 ); assert( r.getElements()[1]==10. ); assert( r.getIndices()[2]== 4 ); assert( r.getElements()[2]==40. ); assert( r.getIndices()[3]== 2 ); assert( r.getElements()[3]==50. ); assert( r.getOriginalPosition()[0]==2 ); assert( r.getOriginalPosition()[1]==0 ); assert( r.getOriginalPosition()[2]==1 ); assert( r.getOriginalPosition()[3]==3 ); assert( r[ 0]==1. ); assert( r[ 1]==10.); assert( r[ 2]==50.); assert( r[ 3]==0. ); assert( r[ 4]==40.); r.sortOriginalOrder(); assert( r.getIndices()[0]== 1 ); assert( r.getElements()[0]==10. ); assert( r.getIndices()[1]== 4 ); assert( r.getElements()[1]==40. ); assert( r.getIndices()[2]== 0 ); assert( r.getElements()[2]== 1. ); assert( r.getIndices()[3]== 2 ); assert( r.getElements()[3]==50. ); CoinPackedVector r1; r1=r; assert( r==r1 ); assert( r.isEquivalent(r1) ); r.sortIncrElement(); assert( r!=r1 ); assert( r.isEquivalent(r1) ); CoinPackedVector add = r + r1; assert( add[0] == 1.+ 1. ); assert( add[1] == 10.+10. ); assert( add[2] == 50.+50. ); assert( add[3] == 0.+ 0. ); assert( add[4] == 40.+40. ); assert( r.sum() == 10.+40.+1.+50. ); } { // Test findIndex const int ne = 4; int inx[ne] = { 1, -4, 0, 2 }; double el[ne] = { 10., 40., 1., 50. }; CoinPackedVector r(ne,inx,el); assert( r.findIndex(2) == 3 ); assert( r.findIndex(0) == 2 ); assert( r.findIndex(-4) == 1 ); assert( r.findIndex(1) == 0 ); assert( r.findIndex(3) == -1 ); } #if 0 { // Test construction with testing for duplicates as false const int ne = 4; int inx[ne] = { 1, -4, 0, 2 }; double el[ne] = { 10., 40., 1., 50. }; CoinPackedVector rT(ne,inx,el); CoinPackedVector r(false); assert( !r.isExistingIndex(1) ); r.insert(1,10.); assert( !r.isExistingIndex(-4) ); r.insert(-4,20.); assert( !r.isExistingIndex(0) ); r.insert(0,1.); assert( r.isExistingIndex(-4) ); // This line is failing!! // If r is constructed with true, // then it does not fail int neg4Index = r.findIndex(-4); assert( neg4Index == 1 ); r.setElement(neg4Index, r.getElements()[neg4Index] + 20); assert( !r.isExistingIndex(2) ); r.insert(2,50.); assert( r == rT ); } #endif /* Repeat various tests, using the constructor that takes ownership of the vectors. */ { const int neo = ne; int *inxo = new int[neo]; double *elo = new double[neo]; for (i = 0 ; i < neo ; i++) inxo[i] = inx[i] ; for (i = 0 ; i < neo ; i++) elo[i] = el[i] ; CoinPackedVector r(neo,neo,inxo,elo); assert( inxo == NULL ) ; assert( elo == NULL ) ; // Test getting elements with int* & float* vectors assert( r.getNumElements()==ne ); for ( i=0; ir.getElements()[i] ) incr=false; assert( !incr ); r.sortIncrElement(); incr = true; for ( i=1; ir.getElements()[i] ) incr=false; assert( incr ); } } DyLP-1.10.4/CoinUtils/test/CoinPackedMatrixTest.cpp0000644000175200017520000005036411665060546020515 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #ifdef NDEBUG #undef NDEBUG #endif #include #include "CoinFloatEqual.hpp" #include "CoinPackedVector.hpp" #include "CoinPackedMatrix.hpp" //############################################################################# void CoinPackedMatrixUnitTest() { CoinRelFltEq eq; { // Test construction on empty matrices CoinPackedMatrix m; CoinPackedMatrix lhs = m; CoinPackedMatrix mCopy(m); assert( eq(m.getExtraGap(),0.0) ); assert( eq(lhs.getExtraGap(),0.0) ); assert( eq(mCopy.getExtraGap(),0.0) ); assert( eq(m.getExtraMajor(),0.0) ); assert( eq(lhs.getExtraMajor(),0.0) ); assert( eq(mCopy.getExtraMajor(),0.0) ); assert( m.isColOrdered() ); assert( lhs.isColOrdered() ); assert( mCopy.isColOrdered() ); assert( m.getNumElements() == 0 ); assert( lhs.getNumElements() == 0 ); assert( mCopy.getNumElements() == 0 ); assert( m.getNumCols() == 0 ); assert( lhs.getNumCols() == 0 ); assert( mCopy.getNumCols() == 0 ); assert( m.getNumRows() == 0 ); assert( lhs.getNumRows() == 0 ); assert( mCopy.getNumRows() == 0 ); assert( m.getElements() == 0 ); assert( lhs.getElements() == 0 ); assert( mCopy.getElements() == 0 ); assert( m.getIndices() == 0 ); assert( lhs.getIndices() == 0 ); assert( mCopy.getIndices() == 0 ); assert( m.getSizeVectorStarts()==0 ); assert( lhs.getSizeVectorStarts()==0 ); assert( mCopy.getSizeVectorStarts()==0 ); assert( m.getSizeVectorLengths()==0 ); assert( lhs.getSizeVectorLengths()==0 ); assert( mCopy.getSizeVectorLengths()==0 ); // out as empty matrix still has one start //assert( m.getVectorStarts()==NULL ); //assert( lhs.getVectorStarts()==NULL ); //assert( mCopy.getVectorStarts()==NULL ); assert( m.getVectorLengths()==NULL ); assert( lhs.getVectorLengths()==NULL ); assert( mCopy.getVectorLengths()==NULL ); assert( m.getMajorDim() == 0 ); assert( lhs.getMajorDim() == 0 ); assert( mCopy.getMajorDim() == 0 ); assert( m.getMinorDim() == 0 ); assert( lhs.getMinorDim() == 0 ); assert( mCopy.getMinorDim() == 0 ); } { CoinPackedMatrix * globalP; { /************************************************************************* * Setup data to represent this matrix by rows * * 3x1 + x2 - 2x4 - x5 - x8 * 2x2 + 1.1x3 * x3 + x6 * 2.8x4 -1.2x7 * 5.6x1 + x5 + 1.9x8 * *************************************************************************/ #if 0 // By columns const int minor=5; const int major=8; const int numels=14; const double elemBase[numels]={3., 5.6, 1., 2., 1.1, 1., -2., 2.8, -1., 1., 1., -1.2, -1., 1.9}; const int indBase[numels]={0,4,0,1,1,2,0,3,0,4,2,3,0,4}; const CoinBigIndex startsBase[major+1]={0,2,4,6,8,10,11,12,14}; const int lenBase[major]={2,2,2,2,2,1,1,2}; #else // By rows const int minor=8; const int major=5; const int numels=14; const double elemBase[numels]={3., 1., -2., -1., -1., 2., 1.1, 1., 1., 2.8, -1.2, 5.6, 1., 1.9 }; const int indBase[numels]={0,1,3,4,7,1,2,2,5,3,6,0,4,7}; const CoinBigIndex startsBase[major+1]={0,5,7,9,11,14}; const int lenBase[major]={5,2,2,2,3}; #endif double * elem = new double[numels]; int * ind = new int[numels]; CoinBigIndex * starts = new CoinBigIndex[major+1]; int * lens = new int[major]; std::copy(elemBase,elemBase+numels,elem); std::copy(indBase,indBase+numels,ind); std::copy(startsBase,startsBase+major+1,starts); std::copy(lenBase,lenBase+major,lens); /* Explicitly request gap on this matrix, so we can see it propagate in subsequent copy & assignment. */ CoinPackedMatrix pm(false,minor,major,numels,elem,ind,starts,lens, .25,.25); assert( elem!=NULL ); assert( ind!=NULL ); assert( starts!=NULL ); assert( lens!=NULL ); delete[] elem; delete[] ind; delete[] starts; delete[] lens; assert( eq(pm.getExtraGap(),.25) ); assert( eq(pm.getExtraMajor(),.25) ); assert( !pm.isColOrdered() ); assert( pm.getNumElements()==numels ); assert( pm.getNumCols()==minor ); assert( pm.getNumRows()==major); assert( pm.getSizeVectorStarts()==major+1 ); assert( pm.getSizeVectorLengths()==major ); const double * ev = pm.getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[7], 2.0) ); assert( eq(ev[8], 1.1) ); assert( eq(ev[10], 1.0) ); assert( eq(ev[11], 1.0) ); assert( eq(ev[13], 2.8) ); assert( eq(ev[14], -1.2) ); assert( eq(ev[16], 5.6) ); assert( eq(ev[17], 1.0) ); assert( eq(ev[18], 1.9) ); const CoinBigIndex * mi = pm.getVectorStarts(); assert( mi[0]==0 ); assert( mi[1]==7 ); assert( mi[2]==10 ); assert( mi[3]==13 ); assert( mi[4]==16 ); assert( mi[5]==20 ); const int * vl = pm.getVectorLengths(); assert( vl[0]==5 ); assert( vl[1]==2 ); assert( vl[2]==2 ); assert( vl[3]==2 ); assert( vl[4]==3 ); const int * ei = pm.getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 1 ); assert( ei[2] == 3 ); assert( ei[3] == 4 ); assert( ei[4] == 7 ); assert( ei[7] == 1 ); assert( ei[8] == 2 ); assert( ei[10] == 2 ); assert( ei[11] == 5 ); assert( ei[13] == 3 ); assert( ei[14] == 6 ); assert( ei[16] == 0 ); assert( ei[17] == 4 ); assert( ei[18] == 7 ); assert( pm.getMajorDim() == 5 ); assert( pm.getMinorDim() == 8 ); assert( pm.getNumElements() == 14 ); assert( pm.getSizeVectorStarts()==6 ); { // Test copy constructor CoinPackedMatrix pmC(pm); assert( eq(pmC.getExtraGap(),.25) ); assert( eq(pmC.getExtraMajor(),.25) ); assert( !pmC.isColOrdered() ); assert( pmC.getNumElements()==numels ); assert( pmC.getNumCols()==minor ); assert( pmC.getNumRows()==major); assert( pmC.getSizeVectorStarts()==major+1 ); assert( pmC.getSizeVectorLengths()==major ); // Test that osm has the correct values assert( pm.getElements() != pmC.getElements() ); const double * ev = pmC.getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[7], 2.0) ); assert( eq(ev[8], 1.1) ); assert( eq(ev[10], 1.0) ); assert( eq(ev[11], 1.0) ); assert( eq(ev[13], 2.8) ); assert( eq(ev[14], -1.2) ); assert( eq(ev[16], 5.6) ); assert( eq(ev[17], 1.0) ); assert( eq(ev[18], 1.9) ); assert( pm.getVectorStarts() != pmC.getVectorStarts() ); const CoinBigIndex * mi = pmC.getVectorStarts(); assert( mi[0]==0 ); assert( mi[1]==7 ); assert( mi[2]==10 ); assert( mi[3]==13 ); assert( mi[4]==16 ); assert( mi[5]==20 ); assert( pm.getVectorLengths() != pmC.getVectorLengths() ); const int * vl = pmC.getVectorLengths(); assert( vl[0]==5 ); assert( vl[1]==2 ); assert( vl[2]==2 ); assert( vl[3]==2 ); assert( vl[4]==3 ); assert( pm.getIndices() != pmC.getIndices() ); const int * ei = pmC.getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 1 ); assert( ei[2] == 3 ); assert( ei[3] == 4 ); assert( ei[4] == 7 ); assert( ei[7] == 1 ); assert( ei[8] == 2 ); assert( ei[10] == 2 ); assert( ei[11] == 5 ); assert( ei[13] == 3 ); assert( ei[14] == 6 ); assert( ei[16] == 0 ); assert( ei[17] == 4 ); assert( ei[18] == 7 ); assert( pmC.isEquivalent(pm) ); // Test assignment { CoinPackedMatrix pmA; // Gap should be 0.0 assert( eq(pmA.getExtraGap(),0.0) ); assert( eq(pmA.getExtraMajor(),0.0) ); pmA = pm; assert( eq(pmA.getExtraGap(),0.25) ); assert( eq(pmA.getExtraMajor(),0.25) ); assert( !pmA.isColOrdered() ); assert( pmA.getNumElements()==numels ); assert( pmA.getNumCols()==minor ); assert( pmA.getNumRows()==major); assert( pmA.getSizeVectorStarts()==major+1 ); assert( pmA.getSizeVectorLengths()==major ); // Test that osm1 has the correct values assert( pm.getElements() != pmA.getElements() ); const double * ev = pmA.getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[7], 2.0) ); assert( eq(ev[8], 1.1) ); assert( eq(ev[10], 1.0) ); assert( eq(ev[11], 1.0) ); assert( eq(ev[13], 2.8) ); assert( eq(ev[14], -1.2) ); assert( eq(ev[16], 5.6) ); assert( eq(ev[17], 1.0) ); assert( eq(ev[18], 1.9) ); // Test modification of a single element pmA.modifyCoefficient(2,5,-7.0); assert( eq(ev[11], -7.0) ); // and back pmA.modifyCoefficient(2,5,1.0); assert( eq(ev[11], 1.0) ); assert( pm.getVectorStarts() != pmA.getVectorStarts() ); const CoinBigIndex * mi = pmA.getVectorStarts(); assert( mi[0]==0 ); assert( mi[1]==7 ); assert( mi[2]==10 ); assert( mi[3]==13 ); assert( mi[4]==16 ); assert( mi[5]==20 ); assert( pm.getVectorLengths() != pmA.getVectorLengths() ); const int * vl = pmC.getVectorLengths(); assert( vl[0]==5 ); assert( vl[1]==2 ); assert( vl[2]==2 ); assert( vl[3]==2 ); assert( vl[4]==3 ); assert( pm.getIndices() != pmA.getIndices() ); const int * ei = pmA.getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 1 ); assert( ei[2] == 3 ); assert( ei[3] == 4 ); assert( ei[4] == 7 ); assert( ei[7] == 1 ); assert( ei[8] == 2 ); assert( ei[10] == 2 ); assert( ei[11] == 5 ); assert( ei[13] == 3 ); assert( ei[14] == 6 ); assert( ei[16] == 0 ); assert( ei[17] == 4 ); assert( ei[18] == 7 ); assert( pmA.isEquivalent(pm) ); assert( pmA.isEquivalent(pmC) ); // Test new to global globalP = new CoinPackedMatrix(pmA); assert( eq(globalP->getElements()[0], 3.0) ); assert( globalP->isEquivalent(pmA) ); } assert( eq(globalP->getElements()[0], 3.0) ); } assert( eq(globalP->getElements()[0], 3.0) ); } // Test that cloned matrix contains correct values const double * ev = globalP->getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[7], 2.0) ); assert( eq(ev[8], 1.1) ); assert( eq(ev[10], 1.0) ); assert( eq(ev[11], 1.0) ); assert( eq(ev[13], 2.8) ); assert( eq(ev[14], -1.2) ); assert( eq(ev[16], 5.6) ); assert( eq(ev[17], 1.0) ); assert( eq(ev[18], 1.9) ); // Check printMatrixElement std::cout << "Testing printMatrixElement:" << std::endl ; std::cout << "Expecting 1.1, 0.0, -1.2." << std::endl ; std::cout << "a(1,2) = " ; globalP->printMatrixElement(1,2) ; std::cout << "; a(3,5) = " ; globalP->printMatrixElement(3,5) ; std::cout << "; a(3,6) = " ; globalP->printMatrixElement(3,6) ; std::cout << std::endl ; std::cout << "Expecting bounds error messages." << std::endl ; std::cout << "a(-1,-1) = " ; globalP->printMatrixElement(-1,-1) ; std::cout << "a(0,-1) = " ; globalP->printMatrixElement(0,-1) ; std::cout << "a(4,8) = " ; globalP->printMatrixElement(4,8) ; std::cout << "a(5,8) = " ; globalP->printMatrixElement(5,8) ; # if 0 /* If you want an exhaustive test, enable these loops. */ for (CoinBigIndex rowndx = -1 ; rowndx <= globalP->getMajorDim() ; rowndx++) { for (CoinBigIndex colndx = -1 ; colndx < globalP->getMinorDim() ; colndx++) { std::cout << "a(" << rowndx << "," << colndx << ") = " ; globalP->printMatrixElement(rowndx,colndx) ; std::cout << std::endl ; } } # endif const CoinBigIndex * mi = globalP->getVectorStarts(); assert( mi[0]==0 ); assert( mi[1]==7 ); assert( mi[2]==10 ); assert( mi[3]==13 ); assert( mi[4]==16 ); assert( mi[5]==20 ); const int * ei = globalP->getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 1 ); assert( ei[2] == 3 ); assert( ei[3] == 4 ); assert( ei[4] == 7 ); assert( ei[7] == 1 ); assert( ei[8] == 2 ); assert( ei[10] == 2 ); assert( ei[11] == 5 ); assert( ei[13] == 3 ); assert( ei[14] == 6 ); assert( ei[16] == 0 ); assert( ei[17] == 4 ); assert( ei[18] == 7 ); assert( globalP->getMajorDim() == 5 ); assert( globalP->getMinorDim() == 8 ); assert( globalP->getNumElements() == 14 ); assert( globalP->getSizeVectorStarts()==6 ); // Test method which returns length of vectors assert( globalP->getVectorSize(0)==5 ); assert( globalP->getVectorSize(1)==2 ); assert( globalP->getVectorSize(2)==2 ); assert( globalP->getVectorSize(3)==2 ); assert( globalP->getVectorSize(4)==3 ); // Test getVectorSize exceptions { bool errorThrown = false; try { globalP->getVectorSize(-1); } catch (CoinError& e) { errorThrown = true; } assert( errorThrown ); } { bool errorThrown = false; try { globalP->getVectorSize(5); } catch (CoinError& e) { errorThrown = true; } assert( errorThrown ); } // Test vector method { // 3x1 + x2 - 2x4 - x5 - x8 CoinShallowPackedVector pv = globalP->getVector(0); assert( pv.getNumElements() == 5 ); assert( eq(pv[0], 3.0) ); assert( eq(pv[1], 1.0) ); assert( eq(pv[3],-2.0) ); assert( eq(pv[4],-1.0) ); assert( eq(pv[7],-1.0) ); // 2x2 + 1.1x3 pv = globalP->getVector(1); assert( pv.getNumElements() == 2 ); assert( eq(pv[1], 2.0) ); assert( eq(pv[2], 1.1) ); // x3 + x6 pv = globalP->getVector(2); assert( pv.getNumElements() == 2 ); assert( eq(pv[2], 1.0) ); assert( eq(pv[5], 1.0) ); // 2.8x4 -1.2x7 pv = globalP->getVector(3); assert( pv.getNumElements() == 2 ); assert( eq(pv[3], 2.8) ); assert( eq(pv[6],-1.2) ); // 5.6x1 + x5 + 1.9x8 pv = globalP->getVector(4); assert( pv.getNumElements() == 3 ); assert( eq(pv[0], 5.6) ); assert( eq(pv[4], 1.0) ); assert( eq(pv[7], 1.9) ); } // Test vector method exceptions { bool errorThrown = false; try { CoinShallowPackedVector v = globalP->getVector(-1); } catch (CoinError& e) { errorThrown = true; } assert( errorThrown ); } { bool errorThrown = false; try { CoinShallowPackedVector vs = globalP->getVector(5); } catch (CoinError& e) { errorThrown = true; } assert( errorThrown ); } { CoinPackedMatrix pm(*globalP); assert( pm.getExtraGap() != 0.0 ); assert( pm.getExtraMajor() != 0.0 ); pm.setExtraGap(0.0); pm.setExtraMajor(0.0); assert( pm.getExtraGap() == 0.0 ); assert( pm.getExtraMajor() == 0.0 ); pm.reverseOrdering(); assert( pm.getExtraGap() == 0.0 ); assert( pm.getExtraMajor() == 0.0 ); } // Test ordered triples constructor { /************************************************************************* * Setup data to represent this matrix by rows * * 3x1 + x2 - 2x4 - x5 - x8 * 2x2y+ 1.1x3 * x3 + x6y * 2.8x4 -1.2x7 * 5.6x1 + x5 + 1.9x8 * *************************************************************************/ const int ne=17; int ri[ne]; int ci[ne]; double el[ne]; ri[ 0]=1; ci[ 0]=2; el[ 0]=1.1; ri[ 1]=0; ci[ 1]=3; el[ 1]=-2.0; ri[ 2]=4; ci[ 2]=7; el[ 2]=1.9; ri[ 3]=3; ci[ 3]=6; el[ 3]=-1.2; ri[ 4]=2; ci[ 4]=5; el[ 4]=1.0; ri[ 5]=4; ci[ 5]=0; el[ 5]=5.6; ri[ 6]=0; ci[ 6]=7; el[ 6]=-1.0; ri[ 7]=0; ci[ 7]=0; el[ 7]=3.0; ri[ 8]=0; ci[ 8]=4; el[ 8]=-1.0; ri[ 9]=4; ci[ 9]=4; el[ 9]=1.0; ri[10]=3; ci[10]=3; el[10]=2.0; // (3,3) is a duplicate element ri[11]=1; ci[11]=1; el[11]=2.0; ri[12]=0; ci[12]=1; el[12]=1.0; ri[13]=2; ci[13]=2; el[13]=1.0; ri[14]=3; ci[14]=3; el[14]=0.8; // (3,3) is a duplicate element ri[15]=2; ci[15]=0; el[15]=-3.1415; ri[16]=2; ci[16]=0; el[16]= 3.1415; assert(!globalP->isColOrdered()); // create col ordered matrix from triples CoinPackedMatrix pmtco(true,ri,ci,el,ne); // Test that duplicates got the correct value assert( eq( pmtco.getVector(3)[3] , 2.8 ) ); assert( eq( pmtco.getVector(0)[2] , 0.0 ) ); // Test to make sure there are no gaps in the created matrix assert( pmtco.getVectorStarts()[0]==0 ); assert( pmtco.getVectorStarts()[1]==2 ); assert( pmtco.getVectorStarts()[2]==4 ); assert( pmtco.getVectorStarts()[3]==6 ); assert( pmtco.getVectorStarts()[4]==8 ); assert( pmtco.getVectorStarts()[5]==10 ); assert( pmtco.getVectorStarts()[6]==11 ); assert( pmtco.getVectorStarts()[7]==12 ); assert( pmtco.getVectorStarts()[8]==14 ); // Test the whole matrix CoinPackedMatrix globalco; globalco.reverseOrderedCopyOf(*globalP); assert(pmtco.isEquivalent(globalco)); // create row ordered matrix from triples CoinPackedMatrix pmtro(false,ri,ci,el,ne); assert(!pmtro.isColOrdered()); assert( eq( pmtro.getVector(3)[3] , 2.8 ) ); assert( eq( pmtro.getVector(2)[0] , 0.0 ) ); assert( pmtro.getVectorStarts()[0]==0 ); assert( pmtro.getVectorStarts()[1]==5 ); assert( pmtro.getVectorStarts()[2]==7 ); assert( pmtro.getVectorStarts()[3]==9 ); assert( pmtro.getVectorStarts()[4]==11 ); assert( pmtro.getVectorStarts()[5]==14 ); assert(globalP->isEquivalent(pmtro)); } delete globalP; } #if 0 { // test append CoinPackedMatrix pm; const int ne = 4; int inx[ne] = { 1, -4, 0, 2 }; double el[ne] = { 10., 40., 1., 50. }; CoinPackedVector r(ne,inx,el); pm.appendRow(r); // This line fails } #endif } DyLP-1.10.4/CoinUtils/test/plan.mod0000644000175200017520000000170511316446223015403 0ustar coincoin/* plan.mod (taken from GLPK 4.41 distribution) */ var bin1, >= 0, <= 200; var bin2, >= 0, <= 2500; var bin3, >= 400, <= 800; var bin4, >= 100, <= 700; var bin5, >= 0, <= 1500; var alum, >= 0; var silicon, >= 0; minimize value: .03 * bin1 + .08 * bin2 + .17 * bin3 + .12 * bin4 + .15 * bin5 + .21 * alum + .38 * silicon; subject to yield: bin1 + bin2 + bin3 + bin4 + bin5 + alum + silicon = 2000; fe: .15 * bin1 + .04 * bin2 + .02 * bin3 + .04 * bin4 + .02 * bin5 + .01 * alum + .03 * silicon <= 60; cu: .03 * bin1 + .05 * bin2 + .08 * bin3 + .02 * bin4 + .06 * bin5 + .01 * alum <= 100; mn: .02 * bin1 + .04 * bin2 + .01 * bin3 + .02 * bin4 + .02 * bin5 <= 40; mg: .02 * bin1 + .03 * bin2 + .01 * bin5 <= 30; al: .70 * bin1 + .75 * bin2 + .80 * bin3 + .75 * bin4 + .80 * bin5 + .97 * alum >= 1500; si: 250 <= .02 * bin1 + .06 * bin2 + .08 * bin3 + .12 * bin4 + .02 * bin5 + .01 * alum + .97 * silicon <= 300; end; /* eof */ DyLP-1.10.4/CoinUtils/test/Makefile.am0000644000175200017520000000406712167532767016026 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1600 2013-07-11 13:41:11Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # unitTest for CoinUtils # ######################################################################## noinst_PROGRAMS = unitTest unitTest_SOURCES = \ CoinLpIOTest.cpp \ CoinDenseVectorTest.cpp \ CoinErrorTest.cpp \ CoinIndexedVectorTest.cpp \ CoinMessageHandlerTest.cpp \ CoinModelTest.cpp \ CoinMpsIOTest.cpp \ CoinPackedMatrixTest.cpp \ CoinPackedVectorTest.cpp \ CoinShallowPackedVectorTest.cpp \ unitTest.cpp # List libraries to link into binary unitTest_LDADD = ../src/libCoinUtils.la $(COINUTILSLIB_LIBS) # Dependencies of binaries are mostly the same as given in LDADD, but with -l and -L removed unitTest_DEPENDENCIES = ../src/libCoinUtils.la $(COINUTILSLIB_DEPENDENCIES) # 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`$(CYGPATH_W) $(srcdir)/../src` # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src unittestflags = if COIN_HAS_SAMPLE unittestflags += -mpsDir=`$(CYGPATH_W) $(SAMPLE_DATA)` endif if COIN_HAS_NETLIB unittestflags += -netlibDir=`$(CYGPATH_W) $(NETLIB_DATA)` -testModel=adlittle.mps endif test: unitTest$(EXEEXT) ./unitTest$(EXEEXT) $(unittestflags) .PHONY: test ######################################################################## # Cleaning stuff # ######################################################################## # Here we list everything that is not generated by the compiler, e.g., # output files of a program DISTCLEANFILES = \ byColumn.mps byRow.mps CoinMpsIoTest.mps string.mps DyLP-1.10.4/CoinUtils/test/CoinModelTest.cpp0000644000175200017520000005676011552534611017201 0ustar coincoin// Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #ifdef NDEBUG #undef NDEBUG #endif #include #include "CoinMpsIO.hpp" #include "CoinModel.hpp" #include "CoinHelperFunctions.hpp" #include "CoinTime.hpp" //############################################################################# /* Build a model in some interesting way Nine blocks defined by 4 random numbers If next random number <0.4 addRow next possible If <0.8 addColumn if possible Otherwise do by element For each one use random <0.5 to add rim at same time At end fill in rim at random */ void buildRandom(CoinModel & baseModel, double random, double & timeIt, int iPass) { CoinModel model; int numberRows = baseModel.numberRows(); int numberColumns = baseModel.numberColumns(); int numberElements = baseModel.numberElements(); // Row numbers and column numbers int lastRow[4]; int lastColumn[4]; int i; lastRow[0]=0; lastColumn[0]=0; lastRow[3]=numberRows; lastColumn[3]=numberColumns; for ( i=1;i<3;i++) { int size; size = (int) ((0.25*random+0.2)*numberRows); random = CoinDrand48(); lastRow[i]=lastRow[i-1]+size; size = (int) ((0.25*random+0.2)*numberColumns); random = CoinDrand48(); lastColumn[i]=lastColumn[i-1]+size; } // whether block done 0 row first char block[9]={0,0,0,0,0,0,0,0,0}; // whether rowRim done char rowDone[3]={0,0,0}; // whether columnRim done char columnDone[3]={0,0,0}; // Save array for deleting elements CoinModelTriple * dTriple = new CoinModelTriple[numberElements]; numberElements=0; double time1 = CoinCpuTime(); for (int jBlock=0;jBlock<9;jBlock++) { int iType=-1; int iBlock=-1; if (random<0.4) { // trying addRow int j; for (j=0;j<3;j++) { int k; for (k=0;k<3;k++) { if (block[3*j+k]) break; //already taken } if (k==3) { // can do but decide which one iBlock = 3*j + (int) (CoinDrand48()*0.3); iType=0; break; } } } if (iType==-1&&random<0.8) { // trying addRow int j; for (j=0;j<3;j++) { int k; for (k=0;k<3;k++) { if (block[j+3*k]) break; //already taken } if (k==3) { // can do but decide which one iBlock = j + 3*((int) (CoinDrand48()*0.3)); iType=1; break; } } } if (iType==-1) { iType=2; int j; for (j=0;j<9;j++) { if (!block[j]) { iBlock=j; break; } } } random=CoinDrand48(); assert (iBlock>=0&&iBlock<9); assert (iType>=0); assert (!block[iBlock]); block[iBlock]=static_cast(1+iType); int jRow = iBlock/3; int jColumn = iBlock%3; bool doRow = (CoinDrand48()<0.5)&&!rowDone[jRow]; bool doColumn = (CoinDrand48()<0.5&&!columnDone[jColumn]); if (!iType) { // addRow int * column = new int[lastColumn[jColumn+1]-lastColumn[jColumn]]; double * element = new double[lastColumn[jColumn+1]-lastColumn[jColumn]]; for (i=lastRow[jRow];i=0) { if (triple.column()>=lastColumn[jColumn]&&triple.column()=model.numberRows()); if (i>model.numberRows()) { assert (i==lastRow[jRow]); std::cout << "need to fill in rows" << std::endl ; for (int k=0;k=0) { if (triple.row()>=lastRow[jRow]&&triple.row()=model.numberColumns()); if (i>model.numberColumns()) { assert (i==lastColumn[jColumn]); std::cout << "need to fill in columns" << std::endl ; for (int k=0;k=0) { int iColumn = triple.column(); if (iColumn>=lastColumn[jColumn]&&iColumn=0) { int iRow = triple.row(); if (iRow>=lastRow[jRow]&&iRow=0;i--) { int iRow = (int) rowInTriple(elements[i]); int iColumn = elements[i].column; if (iRow>=lastRow[jRow]&&iRow=lastColumn[jColumn]&&iColumn=0) { int iColumn = triple.column(); if (iColumn>=lastColumn[jColumn]&&iColumn=0) { int iRow = triple.row(); if (iRow>=lastRow[jRow]&&iRow=0;i--) { int iRow = (int) rowInTriple(elements[i]); int iColumn = elements[i].column; if (iRow>=lastRow[jRow]&&iRow=lastColumn[jColumn]&&iColumn10) { double random2=CoinDrand48(); double randomDelete = 0.2 + 0.5*random2; // fraction to delete //model.validateLinks(); if (random2<0.2) { // delete some rows for (int j=lastRow[jRow];j=0) { int iColumn = triple.column(); assert (j==triple.row()); setRowInTriple(dTriple[numberElements],j); dTriple[numberElements].column=iColumn; dTriple[numberElements].value = triple.value(); numberElements++; triple=model.next(triple); } model.deleteRow(j); if (rowDone[jRow]) { // put back rim model.setRowLower(j,rowLower); model.setRowUpper(j,rowUpper); model.setRowName(j,rowName); } free(rowName); } } } else if (random2<0.4) { // delete some columns for (int j=lastColumn[jColumn];j=0) { int iRow = triple.row(); assert (j==triple.column()); dTriple[numberElements].column = j; setRowInTriple(dTriple[numberElements],iRow); dTriple[numberElements].value = triple.value(); numberElements++; triple=model.next(triple); } model.deleteColumn(j); if (columnDone[jColumn]) { // put back rim model.setColumnLower(j,columnLower); model.setColumnUpper(j,columnUpper); model.setObjective(j,objective); model.setIsInteger(j,integer); model.setColumnName(j,columnName); } free(columnName); } } } else { // delete some elements //model.validateLinks(); const CoinModelTriple * elements = baseModel.elements(); for (i=0;i=lastRow[jRow]&&iRow=lastColumn[jColumn]&&iColumn=0) numberElements++; } } } } } } // Do rim if necessary for (int k=0;k<3;k++) { if (!rowDone[k]) { for (i=lastRow[k];i=0;i--) temp.setRowLower(i,model.getRowLower(i)); for (i=0;i=0;i--) { temp.setColumnLower(i,model.getColumnLower(i)); temp.setColumnObjective(i,model.getColumnObjective(i)); temp.setColumnIsInteger(i,model.getColumnIsInteger(i)); } for (i=0;i=0) { temp(i,triple.column(),triple.value()); triple=model.next(triple); } } // and by column for (i=numberColumns-1;i>=0;i--) { CoinModelLink triple=model.lastInColumn(i); while (triple.row()>=0) { assert (triple.value()==temp(triple.row(),i)); temp(triple.row(),i,triple.value()); triple=model.previous(triple); } } // check equal model.setLogLevel(1); assert (!model.differentModel(temp,false)); } // Try creating model with strings { CoinModel temp; int i; for (i=numberRows-1;i>=0;i--) { double value = model.getRowLower(i); if (value==-1.0) temp.setRowLower(i,"minusOne"); else if (value==1.0) temp.setRowLower(i,"sqrt(plusOne)"); else if (value==4.0) temp.setRowLower(i,"abs(4*plusOne)"); else temp.setRowLower(i,value); } for (i=0;i=0;i--) { temp.setColumnLower(i,model.getColumnLower(i)); temp.setColumnObjective(i,model.getColumnObjective(i)); temp.setColumnIsInteger(i,model.getColumnIsInteger(i)); } for (i=0;i=0) { double value = triple.value(); if (value==-1.0) temp(i,triple.column(),"minusOne"); else if (value==1.0) temp(i,triple.column(),"plusOne"); else if (value==-2.0) temp(i,triple.column(),"minusOne-1.0"); else if (value==2.0) temp(i,triple.column(),"plusOne+1.0+minusOne+(2.0-plusOne)"); else temp(i,triple.column(),value); triple=model.next(triple); } } temp.associateElement("minusOne",-1.0); temp.associateElement("plusOne",1.0); temp.setProblemName("fromStrings"); temp.writeMps("string.mps"); // check equal model.setLogLevel(1); assert (!model.differentModel(temp,false)); } // Test with various ways of generating { /* Get a model. Try first with netlibDir, fall back to mpsDir (sampleDir) if that fails. */ CoinMpsIO m; std::string fn = netlibDir+testModel; double time1 = CoinCpuTime(); int numErr = m.readMps(fn.c_str(),""); if (numErr != 0) { std::cout << "Could not read " << testModel << " in " << netlibDir << "; falling back to " << mpsDir << "." << std::endl ; fn = mpsDir+testModel ; numErr = m.readMps(fn.c_str(),"") ; if (numErr != 0) { std::cout << "Could not read " << testModel << "; skipping test." << std::endl ; } } if (numErr == 0) { std::cout << "Time for readMps is " << (CoinCpuTime()-time1) << " seconds." << std::endl ; int numberRows = m.getNumRows(); int numberColumns = m.getNumCols(); // Build model CoinModel model; CoinPackedMatrix matrixByRow = * m.getMatrixByRow(); const double * element = matrixByRow.getElements(); const int * column = matrixByRow.getIndices(); const CoinBigIndex * rowStart = matrixByRow.getVectorStarts(); const int * rowLength = matrixByRow.getVectorLengths(); const double * rowLower = m.getRowLower(); const double * rowUpper = m.getRowUpper(); const double * columnLower = m.getColLower(); const double * columnUpper = m.getColUpper(); const double * objective = m.getObjCoefficients(); int i; for (i=0;i #include "CoinDenseVector.hpp" #include "CoinFloatEqual.hpp" //-------------------------------------------------------------------------- template void CoinDenseVectorUnitTest(T dummy) { // Test default constructor { CoinDenseVector r; assert( r.getElements() == 0 ); assert( r.getNumElements() == 0 ); } const int ne = 4; T el[ne] = { 10, 40, 1, 50 }; // Create vector and set its value CoinDenseVector r(ne,el); // access each element assert( r.getElements()[0]==10. ); assert( r.getElements()[1]==40. ); assert( r.getElements()[2]== 1. ); assert( r.getElements()[3]==50. ); // Test norms etc assert( r.sum() == 10.+40.+1.+50. ); assert( r.oneNorm() == 101.0); // std namespace removed to compile with Microsoft Visual C++ V6 //assert( r.twoNorm() == /*std::*/sqrt(100.0 + 1600. + 1. + 2500.)); CoinRelFltEq eq; assert( eq(r.twoNorm() , /*std::*/sqrt(100.0 + 1600. + 1. + 2500.))); assert( r.infNorm() == 50.); assert(r[0]+r[1]+r[2]+r[3]==101.); // Test for equality CoinDenseVector r1; r1=r; assert( r1.getElements()[0]==10. ); assert( r1.getElements()[1]==40. ); assert( r1.getElements()[2]== 1. ); assert( r1.getElements()[3]==50. ); // Add dense vectors. CoinDenseVector add = r + r1; assert( add[0] == 10.+10. ); assert( add[1] == 40.+40. ); assert( add[2] == 1.+ 1. ); assert( add[3] == 50.+50. ); // Similarly for copy constructor and subtraction and multiplication CoinDenseVector r2(r); CoinDenseVector diff = r - r2; assert(diff.sum() == 0.0); CoinDenseVector mult = r * r2; assert( mult[0] == 10.*10. ); assert( mult[1] == 40.*40. ); assert( mult[2] == 1.* 1. ); assert( mult[3] == 50.*50. ); // and division. CoinDenseVector div = r / r1; assert(div.sum() == 4.0); } template void CoinDenseVectorUnitTest(float); template void CoinDenseVectorUnitTest(double); //template void CoinDenseVectorUnitTest(int); DyLP-1.10.4/CoinUtils/test/CoinMessageHandlerTest.cpp0000644000175200017520000002304112130031043020765 0ustar coincoin// Copyright (c) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /* A brief test of CoinMessageHandler. Tests that we can print basic messages, and checks that we can handle messages with parts. Does a few more subtle tests involving cloning and handlers with no associated messages. Does not attempt to test any of the various enbryonic features. */ #include "CoinPragma.hpp" #include "CoinMessageHandler.hpp" #include namespace { // begin file-local namespace /* Define a set of test messages. */ enum COIN_TestMessage { COIN_TST_NOFIELDS, COIN_TST_INT, COIN_TST_DBL, COIN_TST_DBLFMT, COIN_TST_CHAR, COIN_TST_STRING, COIN_TST_MULTIPART, COIN_TST_NOCODES, COIN_TST_END } ; /* Convenient structure for doing static initialisation. Essentially, we want something that'll allow us to set up an array of structures with the information required by CoinOneMessage. Then we can easily walk the array, create a CoinOneMessage structure for each message, and add each message to a CoinMessages structure. */ typedef struct { COIN_TestMessage internalNumber; int externalNumber; char detail; const char * message; } MsgDefn ; MsgDefn us_tstmsgs[] = { {COIN_TST_NOFIELDS,1,1,"This message has no parts and no fields."}, {COIN_TST_INT,3,1,"This message has an integer field: (%d)"}, {COIN_TST_DBL,4,1,"This message has a double field: (%g)"}, {COIN_TST_DBLFMT,4,1, "This message has an explicit precision .3: (%.3g)"}, {COIN_TST_CHAR,5,1,"This message has a char field: (%c)"}, {COIN_TST_STRING,6,1,"This message has a string field: (%s)"}, {COIN_TST_MULTIPART,7,1, "Prefix%? Part 1%? Part 2 with integer in hex %#.4x%? Part 3%? suffix."}, {COIN_TST_NOCODES,8,1,""}, {COIN_TST_END,7,1,"This is the dummy end marker."} } ; /* Tests that don't use formatted messages. */ void testsWithoutMessages (int &errs) { CoinMessageHandler hdl ; /* format_ must be null in order for on-the-fly message construction to work properly. */ hdl.message() << "This should print if the constructor sets format_ to null." << CoinMessageEol ; /* Log level should have no effect by default, so set it to 0 to prove the point. */ hdl.message() << "By default, the log level has no effect for on-the-fly messages." << CoinMessageEol ; hdl.setLogLevel(0) ; if (hdl.logLevel() != 0) { std::cout << "Cannot set/get log level of 0!" << std::endl ; errs++ ; } hdl.message() << "Log level is now" << hdl.logLevel() << "." << CoinMessageEol ; /* But we can specify a log level and it will be effective. What's more, each message is completely independent, so the default behaviour should return after an explicit log level suppressed printing. */ hdl.message() << "But we can specify a log level and have it take effect." << CoinMessageEol ; hdl.message(1) << "This message should not print!" << CoinMessageEol ; hdl.message() << "If you saw a message that said 'should not print', there's a problem." << CoinMessageEol ; /* This next sequence exposed a subtle bug in cloning. Failure here may well cause a core dump. Here's the scenario: Since we haven't used any messages, rhs.format_ is null and rhs.currentMessage_ is set to the default for CoinOneMessage, which sets the format string to the null string "\0". Cloning assumed that rhs.format_ was a pointer into the format string from currentMessage_, and proceeded to set up format_ in the clone to be a pointer into the cloned currentMessage_, allowing for the fact that we might be somewhere in the middle of the message at the time of cloning. Net result was that format_ was non-null in the clone, but god only knows where it pointed to. When the code tried to write to *format_, the result was a core dump. */ hdl.message() << "A core dump here indicates a cloning failure." << CoinMessageEol ; CoinMessageHandler hdlClone(hdl) ; hdlClone.message() << "This should print if cloning sets format_ to null." << CoinMessageEol ; return ; } /* Basic functionality for printing messages. Check that supported parameter types work, and that we can selectively suppress portions of a message. */ void basicTestsWithMessages (const CoinMessages &testMessages, int &errs) { CoinMessageHandler hdl ; hdl.setLogLevel(1) ; if (hdl.logLevel() != 1) { std::cout << "Cannot set/get log level of 1!" << std::endl ; errs++ ; } /* Simple tests of one piece messages. */ hdl.message(COIN_TST_NOFIELDS,testMessages) << CoinMessageEol ; hdl.message(COIN_TST_INT,testMessages) << 42 << CoinMessageEol ; hdl.message(COIN_TST_DBL,testMessages) << (42.42+1.0/7.0) << CoinMessageEol ; std::cout << "Changing to 10 significant digits." << std::endl ; int savePrecision = hdl.precision() ; hdl.setPrecision(10) ; hdl.message(COIN_TST_DBL,testMessages) << (42.42+1.0/7.0) << CoinMessageEol ; std::cout << "And back to " << savePrecision << " significant digits." << std::endl ; hdl.setPrecision(savePrecision) ; hdl.message(COIN_TST_DBL,testMessages) << (42.42+1.0/7.0) << CoinMessageEol ; hdl.message(COIN_TST_DBLFMT,testMessages) << (42.42+1.0/7.0) << CoinMessageEol ; hdl.message(COIN_TST_CHAR,testMessages) << 'w' << CoinMessageEol ; hdl.message(COIN_TST_STRING,testMessages) << "forty-two" << CoinMessageEol ; /* A multipart message, consisting of prefix, three optional parts, and a suffix. Note that we need four calls to printing() in order to process the four `%?' codes. */ hdl.message(COIN_TST_MULTIPART,testMessages) ; hdl.printing(true) ; hdl.printing(true) << 42 ; hdl.printing(true) ; hdl.printing(true) << CoinMessageEol ; hdl.message(COIN_TST_MULTIPART,testMessages) ; hdl.printing(false) ; hdl.printing(false) << 42 ; hdl.printing(false) ; hdl.printing(true) << CoinMessageEol ; hdl.message(COIN_TST_MULTIPART,testMessages) ; hdl.printing(true) ; hdl.printing(false) << 42 ; hdl.printing(false) ; hdl.printing(true) << CoinMessageEol ; hdl.message(COIN_TST_MULTIPART,testMessages) ; hdl.printing(false) ; hdl.printing(true) << 42 ; hdl.printing(false) ; hdl.printing(true) << CoinMessageEol ; hdl.message(COIN_TST_MULTIPART,testMessages) ; hdl.printing(false) ; hdl.printing(false) << 42 ; hdl.printing(true) ; hdl.printing(true) << CoinMessageEol ; /* Construct a message from scratch given an empty message. Parameters are printed with default format codes. */ hdl.message(COIN_TST_NOCODES,testMessages) ; hdl.message() << "Standardised prefix, free form remainder:" ; hdl.message() << "An int" << 42 << "A double" << 4.2 << "a new line" << CoinMessageNewline << "and done." << CoinMessageEol ; /* Construct a message from scratch given nothing at all. hdl.finish is equivalent to CoinMessageEol (more accurately, processing CoinMessagEol consists of a call to finish). */ hdl.message() << "No standardised prefix, free form reminder: integer (" << 42 << ")." ; hdl.finish() ; /* And the transition mechanism, where we just dump the string we're given. It's not possible to augment this message, as printStatus_ is set to 2, which prevents the various operator<< methods from contributing to the output buffer, with the exception of operator<<(CoinMessageMarker). */ hdl.message(27,"Tran","Transition message.",'I') << CoinMessageEol ; return ; } /* More difficult tests. Clone a handler in mid-message. Why? Because we can. */ void advTestsWithMessages (const CoinMessages &testMessages, int &errs) { CoinMessageHandler hdl ; /* A multipart message, consisting of prefix, three optional parts, and a suffix. Note that we need four calls to printing() in order to process the four `%?' codes. */ hdl.message() << "Trying a clone in mid-message." << CoinMessageEol ; hdl.message(COIN_TST_MULTIPART,testMessages) ; hdl.printing(true) ; hdl.printing(true) ; CoinMessageHandler hdl2 ; hdl2 = hdl ; hdl2.message() << 42 ; hdl2.printing(true) ; hdl2.printing(true) << CoinMessageEol ; hdl.message() << 0x42 ; hdl.printing(false) ; hdl.printing(false) << CoinMessageEol ; hdl.message() << "The second copy should be missing Part 3 and suffix." << CoinMessageEol ; return ; } } // end file-local namespace bool CoinMessageHandlerUnitTest () { int errs = 0 ; /* Create a CoinMessages object to hold our messages. */ CoinMessages testMessages(sizeof(us_tstmsgs)/sizeof(MsgDefn)) ; strcpy(testMessages.source_,"Test") ; /* Load with messages. This involves creating successive messages (CoinOneMessage) and loading them into the array. This is the usual copy operation; client is responsible for disposing of the original message (accomplished here by keeping the CoinOneMessage internal to the loop body). */ MsgDefn *msgDef = us_tstmsgs ; while (msgDef->internalNumber != COIN_TST_END) { CoinOneMessage msg(msgDef->externalNumber,msgDef->detail,msgDef->message) ; testMessages.addMessage(msgDef->internalNumber,msg) ; msgDef++ ; } /* Run some tests on a message handler without messages. */ testsWithoutMessages(errs) ; /* Basic tests with messages. */ basicTestsWithMessages(testMessages,errs) ; /* Advanced tests with messages. */ advTestsWithMessages(testMessages,errs) ; /* Did we make it without error? */ if (errs) { std::cout << "ERROR! CoinMessageHandlerTest reports " << errs << " errors." << std::endl ; } else { std::cout << "CoinMessageHandlerTest completed without error." << std::endl ; } return (errs == 0) ; } DyLP-1.10.4/CoinUtils/test/CoinIndexedVectorTest.cpp0000644000175200017520000003154712017155726020703 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names # pragma warning(disable:4786) #endif #ifdef NDEBUG #undef NDEBUG // checkClean and checkClear not define #define NO_CHECK_CL #endif #include #include "CoinFinite.hpp" #include "CoinIndexedVector.hpp" #include "CoinShallowPackedVector.hpp" //-------------------------------------------------------------------------- void CoinIndexedVectorUnitTest() { int i; // Test default constructor { CoinIndexedVector r; assert( r.indices_==NULL ); assert( r.elements_==NULL ); assert( r.getNumElements()==0 ); assert( r.capacity_==0); } // Test set and get methods const int ne = 4; int inx[ne] = { 1, 3, 4, 7 }; double el[ne] = { 1.2, 3.4, 5.6, 7.8 }; { CoinIndexedVector r; assert( r.getNumElements()==0 ); // Test setting/getting elements with int* & float* vectors r.setVector( ne, inx, el ); assert( r.getNumElements()==ne ); for ( i=0; i #include "CoinLpIO.hpp" #include "CoinFloatEqual.hpp" #include //############################################################################# //-------------------------------------------------------------------------- // test import methods void CoinLpIOUnitTest(const std::string& lpDir) { // Test default constructor { CoinLpIO m; assert( m.rowsense_ == NULL ); assert( m.rhs_ == NULL ); assert( m.rowrange_ == NULL ); assert( m.matrixByRow_ == NULL ); assert( m.matrixByColumn_ == NULL ); assert( m.integerType_ == NULL); assert( m.fileName_ == NULL ); assert( !strcmp( m.problemName_ , "")); assert( m.objName_[0] == NULL); } { CoinRelFltEq eq; CoinLpIO m; std::string fn = lpDir + "exmip1.lp"; m.readLp(fn.c_str()); assert( !strcmp( m.problemName_ , "")); assert( !strcmp( m.objName_[0] , "OBJ")); // Test language and re-use m.newLanguage(CoinMessages::it); m.messageHandler()->setPrefix(false); m.readLp(fn.c_str()); // Test copy constructor and assignment operator { CoinLpIO lhs; { CoinLpIO im(m); CoinLpIO imC1(im); assert( imC1.getNumCols() == im.getNumCols() ); assert( imC1.getNumRows() == im.getNumRows() ); for (int i = 0; i < im.numberHash_[0]; i++) { // check the row name assert(!strcmp(im.names_[0][i], imC1.names_[0][i])); } for (int i = 0; i < im.numberHash_[1]; i++) { // check the column name assert(!strcmp(im.names_[1][i], imC1.names_[1][i])); } for (int i = 0; i < im.maxHash_[0]; i++) { // check hash value for row name assert(im.hash_[0][i].next == imC1.hash_[0][i].next); assert(im.hash_[0][i].index == imC1.hash_[0][i].index); } for (int i = 0; i < im.maxHash_[1]; i++) { // check hash value for column name assert(im.hash_[1][i].next == imC1.hash_[1][i].next); assert(im.hash_[1][i].index == imC1.hash_[1][i].index); } CoinLpIO imC2(im); assert( imC2.getNumCols() == im.getNumCols() ); assert( imC2.getNumRows() == im.getNumRows() ); lhs = imC2; assert( lhs.getNumCols() == imC2.getNumCols() ); assert( lhs.getNumRows() == imC2.getNumRows() ); for (int i = 0; i < imC2.numberHash_[0]; i++) { // check the row name assert(!strcmp(lhs.names_[0][i], imC2.names_[0][i])); } for (int i = 0; i < imC2.numberHash_[1]; i++) { // check the column name assert(!strcmp(lhs.names_[1][i], imC2.names_[1][i])); } for (int i = 0; i < imC2.maxHash_[0]; i++) { // check hash value for row name assert(lhs.hash_[0][i].next == imC2.hash_[0][i].next); assert(lhs.hash_[0][i].index == imC2.hash_[0][i].index); } for (int i = 0; i < im.maxHash_[1]; i++) { // check hash value for column name assert(lhs.hash_[1][i].next == imC2.hash_[1][i].next); assert(lhs.hash_[1][i].index == imC2.hash_[1][i].index); } } // Test that lhs has correct values even though rhs has gone out of scope assert( lhs.getNumCols() == m.getNumCols() ); assert( lhs.getNumRows() == m.getNumRows() ); } { CoinLpIO dumSi(m); int nc = dumSi.getNumCols(); int nr = dumSi.getNumRows(); const double* cl = dumSi.getColLower(); const double* cu = dumSi.getColUpper(); const double* rl = dumSi.getRowLower(); const double* ru = dumSi.getRowUpper(); assert( nc == 10 ); assert( nr == 5 ); assert( eq(cl[0], 2.5) ); assert( eq(cl[1], 0.5) ); assert( eq(cu[1], 4) ); assert( eq(cu[2], 4.3) ); assert( eq(rl[0], 2.5) ); assert( eq(rl[4], 15.0) ); assert( eq(ru[1], 2.1) ); assert( eq(ru[4], 15.0) ); assert( !eq(cl[3], 1.2345) ); assert( !eq(cu[4], 10.2345) ); assert( eq( dumSi.getObjCoefficients()[0], 1.0) ); assert( eq( dumSi.getObjCoefficients()[1], 2.0) ); assert( eq( dumSi.getObjCoefficients()[2], -1.0) ); assert( eq( dumSi.getObjCoefficients()[3], 0.0) ); assert( eq( dumSi.getObjCoefficients()[4], 0.0) ); assert( eq( dumSi.getObjCoefficients()[5], 0.0) ); assert( eq( dumSi.getObjCoefficients()[6], 0.0) ); assert( eq( dumSi.getObjCoefficients()[7], 0.0) ); assert( eq( dumSi.getObjCoefficients()[8], 0.0) ); assert( eq( dumSi.getObjCoefficients()[9], 0.0) ); dumSi.writeLp("CoinLpIoTest.lp", true); } // Read just written file { CoinLpIO dumSi; dumSi.readLp("CoinLpIoTest.lp"); int nc = dumSi.getNumCols(); int nr = dumSi.getNumRows(); const double* cl = dumSi.getColLower(); const double* cu = dumSi.getColUpper(); const double* rl = dumSi.getRowLower(); const double* ru = dumSi.getRowUpper(); assert( nc == 10 ); assert( nr == 5 ); assert( eq(cl[0], 2.5) ); assert( eq(cl[1], 0.5) ); assert( eq(cu[1], 4) ); assert( eq(cu[2], 4.3) ); assert( eq(rl[0], 2.5) ); assert( eq(rl[4], 15.0) ); assert( eq(ru[1], 2.1) ); assert( eq(ru[4], 15.0) ); assert( !eq(cl[3], 1.2345) ); assert( !eq(cu[4], 10.2345) ); assert( eq( dumSi.getObjCoefficients()[0], 1.0) ); assert( eq( dumSi.getObjCoefficients()[1], 2.0) ); assert( eq( dumSi.getObjCoefficients()[2], -1.0) ); assert( eq( dumSi.getObjCoefficients()[3], 0.0) ); assert( eq( dumSi.getObjCoefficients()[4], 0.0) ); assert( eq( dumSi.getObjCoefficients()[5], 0.0) ); assert( eq( dumSi.getObjCoefficients()[6], 0.0) ); assert( eq( dumSi.getObjCoefficients()[7], 0.0) ); } // Test matrixByRow method { const CoinLpIO si(m); const CoinPackedMatrix* smP = si.getMatrixByRow(); CoinRelFltEq eq; const double* ev = smP->getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[5], 2.0) ); assert( eq(ev[6], 1.1) ); assert( eq(ev[7], 1.0) ); assert( eq(ev[8], 1.0) ); assert( eq(ev[9], 2.8) ); assert( eq(ev[10], -1.2) ); assert( eq(ev[11], -1.0 ) ); assert( eq(ev[12], 5.6) ); assert( eq(ev[13], 1.0) ); assert( eq(ev[14], 1.9) ); assert( eq(ev[15], -1.0) ); const CoinBigIndex* mi = smP->getVectorStarts(); assert( mi[0] == 0 ); assert( mi[1] == 5 ); assert( mi[2] == 7 ); assert( mi[3] == 9 ); assert( mi[4] == 12 ); assert( mi[5] == 16 ); const int* ei = smP->getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 3 ); assert( ei[2] == 4 ); assert( ei[3] == 1 ); assert( ei[4] == 2 ); assert( ei[5] == 3 ); assert( ei[6] == 5 ); assert( ei[7] == 5 ); assert( ei[8] == 6 ); assert( ei[9] == 4 ); assert( ei[10] == 7 ); assert( ei[11] == 8 ); assert( ei[12] == 0 ); assert( ei[13] == 1 ); assert( ei[14] == 2 ); assert( ei[15] == 9 ); assert( smP->getMajorDim() == 5 ); assert( smP->getNumElements() == 16 ); } // Test matrixByCol method { const CoinLpIO si(m); const CoinPackedMatrix* smP = si.getMatrixByCol(); CoinRelFltEq eq; const double* ev = smP->getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 5.6) ); assert( eq(ev[2], -1.0) ); assert( eq(ev[3], 1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[5], 1.9) ); assert( eq(ev[6], 1.0) ); assert( eq(ev[7], 2.0) ); assert( eq(ev[8], -2.0) ); assert( eq(ev[9], 2.8) ); assert( eq(ev[10], 1.1) ); assert( eq(ev[11], 1.0) ); assert( eq(ev[12], 1.0) ); assert( eq(ev[13], -1.2) ); assert( eq(ev[14], -1.0) ); assert( eq(ev[15], -1.0) ); const CoinBigIndex* mi = smP->getVectorStarts(); assert( mi[0] == 0 ); assert( mi[1] == 2 ); assert( mi[2] == 4 ); assert( mi[3] == 6 ); assert( mi[4] == 8 ); assert( mi[5] == 10 ); assert( mi[6] == 12 ); assert( mi[7] == 13 ); assert( mi[8] == 14 ); assert( mi[9] == 15 ); assert( mi[10] == 16 ); const int* ei = smP->getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 4 ); assert( ei[2] == 0 ); assert( ei[3] == 4 ); assert( ei[4] == 0 ); assert( ei[5] == 4 ); assert( ei[6] == 0 ); assert( ei[7] == 1 ); assert( ei[8] == 0 ); assert( ei[9] == 3 ); assert( ei[10] == 1 ); assert( ei[11] == 2 ); assert( ei[12] == 2 ); assert( ei[13] == 3 ); assert( ei[14] == 3 ); assert( ei[15] == 4 ); assert( smP->getMajorDim() == 10 ); assert( smP->getNumElements() == 16 ); assert( smP->getSizeVectorStarts() == 11 ); assert( smP->getMinorDim() == 5 ); } //-------------- // Test rowsense, rhs, rowrange, matrixByRow { CoinLpIO lhs; { assert( lhs.rowrange_ == NULL ); assert( lhs.rowsense_ == NULL ); assert( lhs.rhs_ == NULL ); assert( lhs.matrixByColumn_ == NULL ); CoinLpIO siC1(m); assert( siC1.rowrange_ != NULL ); assert( siC1.rowsense_ != NULL ); assert( siC1.rhs_ != NULL ); assert( siC1.matrixByRow_ != NULL ); const char* siC1rs = siC1.getRowSense(); assert( siC1rs[0] == 'G' ); assert( siC1rs[1] == 'L' ); assert( siC1rs[2] == 'E' ); assert( siC1rs[3] == 'E' ); assert( siC1rs[4] == 'E' ); const double* siC1rhs = siC1.getRightHandSide(); assert( eq(siC1rhs[0], 2.5) ); assert( eq(siC1rhs[1], 2.1) ); assert( eq(siC1rhs[2], 4.0) ); assert( eq(siC1rhs[3], 1.8) ); assert( eq(siC1rhs[4], 15.) ); const double* siC1rr = siC1.getRowRange(); assert( eq(siC1rr[0], 0.0) ); assert( eq(siC1rr[1], 0.0) ); assert( eq(siC1rr[2], 0.0) ); assert( eq(siC1rr[3], 0.0) ); assert( eq(siC1rr[4], 0.0) ); const CoinPackedMatrix* siC1mbr = siC1.getMatrixByRow(); assert( siC1mbr != NULL ); const double* ev = siC1mbr->getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[5], 2.0) ); assert( eq(ev[6], 1.1) ); assert( eq(ev[7], 1.0) ); assert( eq(ev[8], 1.0) ); assert( eq(ev[9], 2.8) ); assert( eq(ev[10], -1.2) ); assert( eq(ev[11], -1.0) ); assert( eq(ev[12], 5.6) ); assert( eq(ev[13], 1.0) ); assert( eq(ev[14], 1.9) ); assert( eq(ev[15], -1.0) ); const CoinBigIndex* mi = siC1mbr->getVectorStarts(); assert( mi[0] == 0 ); assert( mi[1] == 5 ); assert( mi[2] == 7 ); assert( mi[3] == 9 ); assert( mi[4] == 12 ); assert( mi[5] == 16 ); const int* ei = siC1mbr->getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 3 ); assert( ei[2] == 4 ); assert( ei[3] == 1 ); assert( ei[4] == 2 ); assert( ei[5] == 3 ); assert( ei[6] == 5 ); assert( ei[7] == 5 ); assert( ei[8] == 6 ); assert( ei[9] == 4 ); assert( ei[10] == 7 ); assert( ei[11] == 8 ); assert( ei[12] == 0 ); assert( ei[13] == 1 ); assert( ei[14] == 2 ); assert( ei[15] == 9 ); assert( siC1mbr->getMajorDim() == 5 ); assert( siC1mbr->getNumElements() == 16 ); assert( siC1rs == siC1.getRowSense() ); assert( siC1rhs == siC1.getRightHandSide() ); assert( siC1rr == siC1.getRowRange() ); } } } } DyLP-1.10.4/CoinUtils/test/CoinShallowPackedVectorTest.cpp0000644000175200017520000003167111654260357022045 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifdef NDEBUG #undef NDEBUG #endif #include #include "CoinPragma.hpp" #include "CoinFinite.hpp" #include "CoinFloatEqual.hpp" #include "CoinShallowPackedVector.hpp" #include "CoinPackedVector.hpp" void CoinShallowPackedVectorUnitTest() { CoinRelFltEq eq; int i; // Test default constructor { CoinShallowPackedVector r; assert( r.indices_==NULL ); assert( r.elements_==NULL ); assert( r.nElements_==0 ); } // Test set and get methods const int ne = 4; int inx[ne] = { 1, 3, 4, 7 }; double el[ne] = { 1.2, 3.4, 5.6, 7.8 }; { CoinShallowPackedVector r; assert( r.getNumElements()==0 ); // Test setting/getting elements with int* & double* vectors r.setVector( ne, inx, el ); assert( r.getNumElements()==ne ); for ( i=0; i #include #include "CoinPragma.hpp" #include "CoinFinite.hpp" #include "CoinError.hpp" #include "CoinHelperFunctions.hpp" #include "CoinSort.hpp" #include "CoinShallowPackedVector.hpp" #include "CoinPackedVector.hpp" #include "CoinDenseVector.hpp" #include "CoinIndexedVector.hpp" #include "CoinPackedMatrix.hpp" #include "CoinMpsIO.hpp" #include "CoinLpIO.hpp" #include "CoinMessageHandler.hpp" void CoinModelUnitTest(const std::string & mpsDir, const std::string & netlibDir, const std::string & testModel); // Function Prototypes. Function definitions is in this file. void testingMessage( const char * const msg ); //---------------------------------------------------------------- // unitTest [-mpsDir=V1] [-netlibDir=V2] [-testModel=V3] // // where (unix defaults): // -mpsDir: directory containing mps test files // Default value V1="../../Data/Sample" // -netlibDir: directory containing netlib files // Default value V2="../../Data/Netlib" // -testModel: name of model in netlibdir for testing CoinModel // Default value V3="25fv47.mps" // // All parameters are optional. //---------------------------------------------------------------- int main (int argc, const char *argv[]) { /* Set default location for Data directory, assuming traditional package layout. */ const char dirsep = CoinFindDirSeparator(); std::string dataDir ; if (dirsep == '/') dataDir = "../../Data" ; else dataDir = "..\\..\\Data" ; # ifdef COIN_MSVS // Visual Studio builds are deeper. dataDir = "..\\..\\"+dataDir ; # endif // define valid parameter keywords std::set definedKeyWords; // Really should be sampleDir, but let's not rock the boat. definedKeyWords.insert("-mpsDir"); // Directory for netlib problems. definedKeyWords.insert("-netlibDir"); // Allow for large named model for CoinModel definedKeyWords.insert("-testModel"); /* Set parameter defaults. */ std::string mpsDir = dataDir + dirsep + "Sample" + dirsep ; std::string netlibDir = dataDir + dirsep + "Netlib" + dirsep ; std::string testModel = "p0033.mps" ; /* Process command line parameters. Assume params of the form 'keyword' or 'keyword=value'. */ std::map parms; for (int i = 1 ; i < argc ; i++) { std::string parm(argv[i]); std::string key,value; std::string::size_type eqPos = parm.find('='); if (eqPos == std::string::npos) { key = parm ; value = "" ; } else { key = parm.substr(0,eqPos) ; value = parm.substr(eqPos+1) ; } /* Check for valid keyword. Print help and exit on failure. */ if (definedKeyWords.find(key) == definedKeyWords.end()) { std::cerr << "Undefined parameter \"" << key << "\".\n" << "Correct usage: \n" << " unitTest [-mpsDir=V1] [-netlibDir=V2] [-testModel=V3]\n" << "where:\n" << " -mpsDir: directory containing mps test files\n" << " Default value V1=\"" << mpsDir << "\"\n" << " -netlibDir: directory containing netlib files\n" << " Default value V2=\"" << netlibDir << "\"\n" << " -testModel: name of model testing CoinModel\n" << " Default value V3=\"" << testModel << "\"\n"; return 1 ; } parms[key] = value ; } // Deal with any values given on the command line if (parms.find("-mpsDir") != parms.end()) mpsDir = parms["-mpsDir"] + dirsep; if (parms.find("-netlibDir") != parms.end()) netlibDir = parms["-netlibDir"] + dirsep; if (parms.find("-testModel") != parms.end()) testModel = parms["-testModel"] ; bool allOK = true ; // *FIXME* : these tests should be written... // testingMessage( "Testing CoinHelperFunctions\n" ); // CoinHelperFunctionsUnitTest(); // testingMessage( "Testing CoinSort\n" ); // tripleCompareUnitTest(); /* Check that finite and isnan are working. */ double finiteVal = 1.0 ; double zero = 0.0 ; double checkVal ; testingMessage( "Testing CoinFinite ... " ) ; # ifdef COIN_C_FINITE checkVal = finiteVal/zero ; # else checkVal = COIN_DBL_MAX ; # endif testingMessage( " finite value: " ) ; if (CoinFinite(finiteVal)) { testingMessage( "ok" ) ; } else { allOK = false ; testingMessage( "ERROR" ) ; } testingMessage( "; infinite value: " ) ; if (!CoinFinite(checkVal)) { testingMessage( "ok.\n" ) ; } else { allOK = false ; testingMessage( "ERROR.\n" ) ; } # ifdef COIN_C_ISNAN testingMessage( "Testing CoinIsnan ... " ) ; testingMessage( " finite value: " ) ; if (!CoinIsnan(finiteVal)) { testingMessage( "ok" ) ; } else { allOK = false ; testingMessage( "ERROR" ) ; } testingMessage( "; NaN value: " ) ; checkVal = checkVal/checkVal ; if (CoinIsnan(checkVal)) { testingMessage( "ok.\n" ) ; } else { allOK = false ; testingMessage( "ERROR.\n" ) ; } # else allOK = false ; testingMessage( "ERROR: No functional CoinIsnan.\n" ) ; # endif testingMessage( "Testing CoinModel\n" ); CoinModelUnitTest(mpsDir,netlibDir,testModel); testingMessage( "Testing CoinError\n" ); CoinErrorUnitTest(); testingMessage( "Testing CoinShallowPackedVector\n" ); CoinShallowPackedVectorUnitTest(); testingMessage( "Testing CoinPackedVector\n" ); CoinPackedVectorUnitTest(); testingMessage( "Testing CoinIndexedVector\n" ); CoinIndexedVectorUnitTest(); testingMessage( "Testing CoinPackedMatrix\n" ); CoinPackedMatrixUnitTest(); // At moment CoinDenseVector is not compiling with MS V C++ V6 #if 1 testingMessage( "Testing CoinDenseVector\n" ); //CoinDenseVectorUnitTest(0); CoinDenseVectorUnitTest(0.0); CoinDenseVectorUnitTest(0.0f); #endif testingMessage( "Testing CoinMpsIO\n" ); CoinMpsIOUnitTest(mpsDir); testingMessage( "Testing CoinLpIO\n" ); CoinLpIOUnitTest(mpsDir); testingMessage( "Testing CoinMessageHandler\n" ); if (!CoinMessageHandlerUnitTest()) { allOK = false ; } if (allOK) { testingMessage( "All tests completed successfully.\n" ); return (0) ; } else { testingMessage( "\nERROR: " ) ; testingMessage( "Errors occurred during testing; please check the output.\n\n"); return (1) ; } } // Display message on stdout and stderr void testingMessage( const char * const msg ) { std::cerr < #include "CoinMpsIO.hpp" #include "CoinFloatEqual.hpp" //############################################################################# //-------------------------------------------------------------------------- // test import methods void CoinMpsIOUnitTest(const std::string & mpsDir) { // Test default constructor { CoinMpsIO m; assert( m.rowsense_==NULL ); assert( m.rhs_==NULL ); assert( m.rowrange_==NULL ); assert( m.matrixByRow_==NULL ); assert( m.matrixByColumn_==NULL ); assert( m.integerType_==NULL); assert( !strcmp( m.getFileName() , "????")); assert( !strcmp( m.getProblemName() , "")); assert( !strcmp( m.objectiveName_ , "")); assert( !strcmp( m.rhsName_ , "")); assert( !strcmp( m.rangeName_ , "")); assert( !strcmp( m.boundName_ , "")); } { CoinRelFltEq eq; CoinMpsIO m; std::string fn = mpsDir+"exmip1"; int numErr = m.readMps(fn.c_str(),"mps"); assert( numErr== 0 ); assert( !strcmp( m.problemName_ , "EXAMPLE")); assert( !strcmp( m.objectiveName_ , "OBJ")); assert( !strcmp( m.rhsName_ , "RHS1")); assert( !strcmp( m.rangeName_ , "RNG1")); assert( !strcmp( m.boundName_ , "BND1")); // Test language and re-use m.newLanguage(CoinMessages::it); m.messageHandler()->setPrefix(false); // This call should return an error indicating that the // end-of-file was reached. // This is because the file remains open to possibly read // a quad. section. numErr = m.readMps(fn.c_str(),"mps"); assert( numErr < 0 ); // Test copy constructor and assignment operator { CoinMpsIO lhs; { CoinMpsIO im(m); CoinMpsIO imC1(im); assert( imC1.getNumCols() == im.getNumCols() ); assert( imC1.getNumRows() == im.getNumRows() ); CoinMpsIO imC2(im); assert( imC2.getNumCols() == im.getNumCols() ); assert( imC2.getNumRows() == im.getNumRows() ); lhs=imC2; } // Test that lhs has correct values even though rhs has gone out of scope assert( lhs.getNumCols() == m.getNumCols() ); assert( lhs.getNumRows() == m.getNumRows() ); } { CoinMpsIO dumSi(m); int nc = dumSi.getNumCols(); int nr = dumSi.getNumRows(); const double * cl = dumSi.getColLower(); const double * cu = dumSi.getColUpper(); const double * rl = dumSi.getRowLower(); const double * ru = dumSi.getRowUpper(); assert( nc == 8 ); assert( nr == 5 ); assert( eq(cl[0],2.5) ); assert( eq(cl[1],0.0) ); assert( eq(cu[1],4.1) ); assert( eq(cu[2],1.0) ); assert( eq(rl[0],2.5) ); assert( eq(rl[4],3.0) ); assert( eq(ru[1],2.1) ); assert( eq(ru[4],15.0) ); assert( !eq(cl[3],1.2345) ); assert( !eq(cu[4],10.2345) ); assert( eq( dumSi.getObjCoefficients()[0], 1.0) ); assert( eq( dumSi.getObjCoefficients()[1], 0.0) ); assert( eq( dumSi.getObjCoefficients()[2], 0.0) ); assert( eq( dumSi.getObjCoefficients()[3], 0.0) ); assert( eq( dumSi.getObjCoefficients()[4], 2.0) ); assert( eq( dumSi.getObjCoefficients()[5], 0.0) ); assert( eq( dumSi.getObjCoefficients()[6], 0.0) ); assert( eq( dumSi.getObjCoefficients()[7], -1.0) ); dumSi.writeMps("CoinMpsIoTest.mps");//,0,0,1); } // Read just written file { CoinMpsIO dumSi; dumSi.readMps("CoinMpsIoTest"); int nc = dumSi.getNumCols(); int nr = dumSi.getNumRows(); const double * cl = dumSi.getColLower(); const double * cu = dumSi.getColUpper(); const double * rl = dumSi.getRowLower(); const double * ru = dumSi.getRowUpper(); assert( nc == 8 ); assert( nr == 5 ); assert( eq(cl[0],2.5) ); assert( eq(cl[1],0.0) ); assert( eq(cu[1],4.1) ); assert( eq(cu[2],1.0) ); assert( eq(rl[0],2.5) ); assert( eq(rl[4],3.0) ); assert( eq(ru[1],2.1) ); assert( eq(ru[4],15.0) ); assert( !eq(cl[3],1.2345) ); assert( !eq(cu[4],10.2345) ); assert( eq( dumSi.getObjCoefficients()[0], 1.0) ); assert( eq( dumSi.getObjCoefficients()[1], 0.0) ); assert( eq( dumSi.getObjCoefficients()[2], 0.0) ); assert( eq( dumSi.getObjCoefficients()[3], 0.0) ); assert( eq( dumSi.getObjCoefficients()[4], 2.0) ); assert( eq( dumSi.getObjCoefficients()[5], 0.0) ); assert( eq( dumSi.getObjCoefficients()[6], 0.0) ); assert( eq( dumSi.getObjCoefficients()[7], -1.0) ); } // Test matrixByRow method { const CoinMpsIO si(m); const CoinPackedMatrix * smP = si.getMatrixByRow(); // LL: const CoinDumPackedMatrix * osmP = dynamic_cast(smP); // LL: assert( osmP!=NULL ); CoinRelFltEq eq; const double * ev = smP->getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[5], 2.0) ); assert( eq(ev[6], 1.1) ); assert( eq(ev[7], 1.0) ); assert( eq(ev[8], 1.0) ); assert( eq(ev[9], 2.8) ); assert( eq(ev[10], -1.2) ); assert( eq(ev[11], 5.6) ); assert( eq(ev[12], 1.0) ); assert( eq(ev[13], 1.9) ); const CoinBigIndex * mi = smP->getVectorStarts(); assert( mi[0]==0 ); assert( mi[1]==5 ); assert( mi[2]==7 ); assert( mi[3]==9 ); assert( mi[4]==11 ); assert( mi[5]==14 ); const int * ei = smP->getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 1 ); assert( ei[2] == 3 ); assert( ei[3] == 4 ); assert( ei[4] == 7 ); assert( ei[5] == 1 ); assert( ei[6] == 2 ); assert( ei[7] == 2 ); assert( ei[8] == 5 ); assert( ei[9] == 3 ); assert( ei[10] == 6 ); assert( ei[11] == 0 ); assert( ei[12] == 4 ); assert( ei[13] == 7 ); assert( smP->getMajorDim() == 5 ); assert( smP->getNumElements() == 14 ); } // Test matrixByCol method { const CoinMpsIO si(m); const CoinPackedMatrix * smP = si.getMatrixByCol(); // LL: const CoinDumPackedMatrix * osmP = dynamic_cast(smP); // LL: assert( osmP!=NULL ); CoinRelFltEq eq; const double * ev = smP->getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 5.6) ); assert( eq(ev[2], 1.0) ); assert( eq(ev[3], 2.0) ); assert( eq(ev[4], 1.1) ); assert( eq(ev[5], 1.0) ); assert( eq(ev[6], -2.0) ); assert( eq(ev[7], 2.8) ); assert( eq(ev[8], -1.0) ); assert( eq(ev[9], 1.0) ); assert( eq(ev[10], 1.0) ); assert( eq(ev[11], -1.2) ); assert( eq(ev[12], -1.0) ); assert( eq(ev[13], 1.9) ); const CoinBigIndex * mi = smP->getVectorStarts(); assert( mi[0]==0 ); assert( mi[1]==2 ); assert( mi[2]==4 ); assert( mi[3]==6 ); assert( mi[4]==8 ); assert( mi[5]==10 ); assert( mi[6]==11 ); assert( mi[7]==12 ); assert( mi[8]==14 ); const int * ei = smP->getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 4 ); assert( ei[2] == 0 ); assert( ei[3] == 1 ); assert( ei[4] == 1 ); assert( ei[5] == 2 ); assert( ei[6] == 0 ); assert( ei[7] == 3 ); assert( ei[8] == 0 ); assert( ei[9] == 4 ); assert( ei[10] == 2 ); assert( ei[11] == 3 ); assert( ei[12] == 0 ); assert( ei[13] == 4 ); assert( smP->getMajorDim() == 8 ); assert( smP->getNumElements() == 14 ); assert( smP->getSizeVectorStarts()==9 ); assert( smP->getMinorDim() == 5 ); } //-------------- // Test rowsense, rhs, rowrange, matrixByRow { CoinMpsIO lhs; { assert( m.rowrange_==NULL ); assert( m.rowsense_==NULL ); assert( m.rhs_==NULL ); assert( m.matrixByRow_==NULL ); CoinMpsIO siC1(m); assert( siC1.rowrange_==NULL ); assert( siC1.rowsense_==NULL ); assert( siC1.rhs_==NULL ); assert( siC1.matrixByRow_==NULL ); const char * siC1rs = siC1.getRowSense(); assert( siC1rs[0]=='G' ); assert( siC1rs[1]=='L' ); assert( siC1rs[2]=='E' ); assert( siC1rs[3]=='R' ); assert( siC1rs[4]=='R' ); const double * siC1rhs = siC1.getRightHandSide(); assert( eq(siC1rhs[0],2.5) ); assert( eq(siC1rhs[1],2.1) ); assert( eq(siC1rhs[2],4.0) ); assert( eq(siC1rhs[3],5.0) ); assert( eq(siC1rhs[4],15.) ); const double * siC1rr = siC1.getRowRange(); assert( eq(siC1rr[0],0.0) ); assert( eq(siC1rr[1],0.0) ); assert( eq(siC1rr[2],0.0) ); assert( eq(siC1rr[3],5.0-1.8) ); assert( eq(siC1rr[4],15.0-3.0) ); const CoinPackedMatrix * siC1mbr = siC1.getMatrixByRow(); assert( siC1mbr != NULL ); const double * ev = siC1mbr->getElements(); assert( eq(ev[0], 3.0) ); assert( eq(ev[1], 1.0) ); assert( eq(ev[2], -2.0) ); assert( eq(ev[3], -1.0) ); assert( eq(ev[4], -1.0) ); assert( eq(ev[5], 2.0) ); assert( eq(ev[6], 1.1) ); assert( eq(ev[7], 1.0) ); assert( eq(ev[8], 1.0) ); assert( eq(ev[9], 2.8) ); assert( eq(ev[10], -1.2) ); assert( eq(ev[11], 5.6) ); assert( eq(ev[12], 1.0) ); assert( eq(ev[13], 1.9) ); const CoinBigIndex * mi = siC1mbr->getVectorStarts(); assert( mi[0]==0 ); assert( mi[1]==5 ); assert( mi[2]==7 ); assert( mi[3]==9 ); assert( mi[4]==11 ); assert( mi[5]==14 ); const int * ei = siC1mbr->getIndices(); assert( ei[0] == 0 ); assert( ei[1] == 1 ); assert( ei[2] == 3 ); assert( ei[3] == 4 ); assert( ei[4] == 7 ); assert( ei[5] == 1 ); assert( ei[6] == 2 ); assert( ei[7] == 2 ); assert( ei[8] == 5 ); assert( ei[9] == 3 ); assert( ei[10] == 6 ); assert( ei[11] == 0 ); assert( ei[12] == 4 ); assert( ei[13] == 7 ); assert( siC1mbr->getMajorDim() == 5 ); assert( siC1mbr->getNumElements() == 14 ); assert( siC1rs == siC1.getRowSense() ); assert( siC1rhs == siC1.getRightHandSide() ); assert( siC1rr == siC1.getRowRange() ); } } //test special sections: SOS, QUADOBJ, CSECTION { CoinMpsIO m_MpsData; std::string fn = mpsDir+"spec_sections"; int nOfSOS; CoinSet ** SOS; int status = m_MpsData.readMps(fn.c_str(),"mps", nOfSOS, SOS); assert (status == 0); assert (nOfSOS == 2); assert (SOS[0]->numberEntries() == 2); assert (SOS[1]->numberEntries() == 2); assert (SOS[0]->setType() == 1); assert (SOS[1]->setType() == 2); { int numberEntries = SOS[0]->numberEntries(); const int * which = SOS[0]->which(); const double * weights = SOS[0]->weights(); assert (which[0] == 2); assert (which[1] == 3); assert (weights[0] == 0); assert (weights[1] == 1); } { int numberEntries = SOS[1]->numberEntries(); const int * which = SOS[1]->which(); const double * weights = SOS[1]->weights(); assert (which[0] == 4); assert (which[1] == 5); assert (weights[0] == 20); assert (weights[1] == 40); } int * columnStart = NULL; int * columnIdx = NULL; double * elements = NULL; status = m_MpsData.readQuadraticMps(NULL, columnStart, columnIdx, elements, 0); assert (status == 0); assert (columnStart[ 0] == 0); assert (columnStart[ 1] == 0); assert (columnStart[ 2] == 0); assert (columnStart[ 3] == 0); assert (columnStart[ 4] == 0); assert (columnStart[ 5] == 0); assert (columnStart[ 6] == 0); assert (columnStart[ 7] == 2); assert (columnStart[ 8] == 3); assert (columnStart[ 9] == 3); assert (columnStart[10] == 3); assert (columnStart[11] == 3); assert (columnStart[12] == 3); assert (columnStart[13] == 3); assert (columnStart[14] == 3); assert (columnStart[15] == 3); assert (columnIdx[0] == 6); assert (columnIdx[1] == 7); assert (columnIdx[2] == 7); assert (elements[0] == 1.0); assert (elements[1] == 2.0); assert (elements[2] == 7.0); int nOfCones; int * coneStart = NULL; int * coneIdx = NULL; int * coneType = NULL; status = m_MpsData.readConicMps(NULL, coneStart, coneIdx, coneType, nOfCones); assert (status == 0); assert (nOfCones == 2); assert (coneType[0] == 1); assert (coneType[1] == 2); assert (coneStart[0] == 0); assert (coneStart[1] == 3); assert (coneStart[2] == 7); assert (coneStart[0] == 0); assert (coneStart[1] == 3); assert (coneStart[2] == 7); assert (coneIdx[0] == 8); assert (coneIdx[1] == 9); assert (coneIdx[2] == 10); assert (coneIdx[3] == 11); assert (coneIdx[4] == 12); assert (coneIdx[5] == 13); assert (coneIdx[6] == 14); } #ifdef COIN_HAS_GLPK // test GMPL reader { CoinMessageHandler msghandler; CoinMpsIO mpsio; mpsio.passInMessageHandler(&msghandler); int ret = mpsio.readGMPL("plan.mod", NULL, true); printf("read plan.mod with return == %d\n", ret); assert(ret == 0); int nc = mpsio.getNumCols(); int nr = mpsio.getNumRows(); const double * cl = mpsio.getColLower(); const double * cu = mpsio.getColUpper(); const double * rl = mpsio.getRowLower(); const double * ru = mpsio.getRowUpper(); const double * obj = mpsio.getObjCoefficients(); assert( nc == 7 ); assert( nr == 8 ); assert( eq(cl[0],0) ); assert( eq(cl[1],0) ); assert( eq(cl[2],400) ); assert( eq(cl[3],100) ); assert( eq(cl[4],0) ); assert( eq(cl[5],0) ); assert( eq(cl[6],0) ); assert( eq(cu[0],200) ); assert( eq(cu[1],2500) ); assert( eq(cu[2],800) ); assert( eq(cu[3],700) ); assert( eq(cu[4],1500) ); assert( eq(cu[5],mpsio.getInfinity()) ); assert( eq(cu[6],mpsio.getInfinity()) ); assert( eq(rl[0],-mpsio.getInfinity()) ); assert( eq(rl[1],2000) ); assert( eq(rl[2],-mpsio.getInfinity()) ); assert( eq(rl[3],-mpsio.getInfinity()) ); assert( eq(rl[4],-mpsio.getInfinity()) ); assert( eq(rl[5],-mpsio.getInfinity()) ); assert( eq(rl[6],1500) ); assert( eq(rl[7],250) ); assert( eq(ru[0],mpsio.getInfinity()) ); assert( eq(ru[1],2000) ); assert( eq(ru[2],60) ); assert( eq(ru[3],100) ); assert( eq(ru[4],40) ); assert( eq(ru[5],30) ); assert( eq(ru[6],mpsio.getInfinity()) ); assert( eq(ru[7],300) ); assert( eq(obj[0],0.03) ); assert( eq(obj[1],0.08) ); assert( eq(obj[2],0.17) ); assert( eq(obj[3],0.12) ); assert( eq(obj[4],0.15) ); assert( eq(obj[5],0.21) ); assert( eq(obj[6],0.38) ); const CoinPackedMatrix * matrix = mpsio.getMatrixByRow(); assert( matrix != NULL ); assert( matrix->getMajorDim() == nr ); int nel = matrix->getNumElements(); assert( nel == 48 ); const double * ev = matrix->getElements(); assert( ev != NULL ); const int * ei = matrix->getIndices(); assert( ei != NULL ); const CoinBigIndex * mi = matrix->getVectorStarts(); assert( mi != NULL ); assert( eq(ev[0],0.03) ); assert( eq(ev[1],0.08) ); assert( eq(ev[2],0.17) ); assert( eq(ev[3],0.12) ); assert( eq(ev[4],0.15) ); assert( eq(ev[5],0.21) ); assert( eq(ev[6],0.38) ); assert( eq(ev[7],1) ); assert( eq(ev[8],1) ); assert( eq(ev[9],1) ); assert( eq(ev[10],1) ); assert( eq(ev[11],1) ); assert( eq(ev[12],1) ); assert( eq(ev[13],1) ); assert( eq(ev[14],0.15) ); assert( eq(ev[15],0.04) ); assert( eq(ev[16],0.02) ); assert( eq(ev[17],0.04) ); assert( eq(ev[18],0.02) ); assert( eq(ev[19],0.01) ); assert( eq(ev[20],0.03) ); assert( eq(ev[21],0.03) ); assert( eq(ev[22],0.05) ); assert( eq(ev[23],0.08) ); assert( eq(ev[24],0.02) ); assert( eq(ev[25],0.06) ); assert( eq(ev[26],0.01) ); assert( eq(ev[27],0.02) ); assert( eq(ev[28],0.04) ); assert( eq(ev[29],0.01) ); assert( eq(ev[30],0.02) ); assert( eq(ev[31],0.02) ); assert( eq(ev[32],0.02) ); assert( eq(ev[33],0.03) ); assert( eq(ev[34],0.01) ); assert( eq(ev[35],0.7) ); assert( eq(ev[36],0.75) ); assert( eq(ev[37],0.8) ); assert( eq(ev[38],0.75) ); assert( eq(ev[39],0.8) ); assert( eq(ev[40],0.97) ); assert( eq(ev[41],0.02) ); assert( eq(ev[42],0.06) ); assert( eq(ev[43],0.08) ); assert( eq(ev[44],0.12) ); assert( eq(ev[45],0.02) ); assert( eq(ev[46],0.01) ); assert( eq(ev[47],0.97) ); assert( ei[0] == 0 ); assert( ei[1] == 1 ); assert( ei[2] == 2 ); assert( ei[3] == 3 ); assert( ei[4] == 4 ); assert( ei[5] == 5 ); assert( ei[6] == 6 ); assert( ei[7] == 0 ); assert( ei[8] == 1 ); assert( ei[9] == 2 ); assert( ei[10] == 3 ); assert( ei[11] == 4 ); assert( ei[12] == 5 ); assert( ei[13] == 6 ); assert( ei[14] == 0 ); assert( ei[15] == 1 ); assert( ei[16] == 2 ); assert( ei[17] == 3 ); assert( ei[18] == 4 ); assert( ei[19] == 5 ); assert( ei[20] == 6 ); assert( ei[21] == 0 ); assert( ei[22] == 1 ); assert( ei[23] == 2 ); assert( ei[24] == 3 ); assert( ei[25] == 4 ); assert( ei[26] == 5 ); assert( ei[27] == 0 ); assert( ei[28] == 1 ); assert( ei[29] == 2 ); assert( ei[30] == 3 ); assert( ei[31] == 4 ); assert( ei[32] == 0 ); assert( ei[33] == 1 ); assert( ei[34] == 4 ); assert( ei[35] == 0 ); assert( ei[36] == 1 ); assert( ei[37] == 2 ); assert( ei[38] == 3 ); assert( ei[39] == 4 ); assert( ei[40] == 5 ); assert( ei[41] == 0 ); assert( ei[42] == 1 ); assert( ei[43] == 2 ); assert( ei[44] == 3 ); assert( ei[45] == 4 ); assert( ei[46] == 5 ); assert( ei[47] == 6 ); assert( mi[0] == 0 ); assert( mi[1] == 7 ); assert( mi[2] == 14 ); assert( mi[3] == 21 ); assert( mi[4] == 27 ); assert( mi[5] == 32 ); assert( mi[6] == 35 ); assert( mi[7] == 41 ); assert( mi[8] == 48 ); } #endif } } DyLP-1.10.4/CoinUtils/test/Makefile.in0000644000175200017520000004771312502177062016026 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = unitTest$(EXEEXT) @COIN_HAS_SAMPLE_TRUE@am__append_1 = -mpsDir=`$(CYGPATH_W) $(SAMPLE_DATA)` @COIN_HAS_NETLIB_TRUE@am__append_2 = -netlibDir=`$(CYGPATH_W) $(NETLIB_DATA)` -testModel=adlittle.mps subdir = test DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/src/config_coinutils.h CONFIG_CLEAN_FILES = PROGRAMS = $(noinst_PROGRAMS) am_unitTest_OBJECTS = CoinLpIOTest.$(OBJEXT) \ CoinDenseVectorTest.$(OBJEXT) CoinErrorTest.$(OBJEXT) \ CoinIndexedVectorTest.$(OBJEXT) \ CoinMessageHandlerTest.$(OBJEXT) CoinModelTest.$(OBJEXT) \ CoinMpsIOTest.$(OBJEXT) CoinPackedMatrixTest.$(OBJEXT) \ CoinPackedVectorTest.$(OBJEXT) \ CoinShallowPackedVectorTest.$(OBJEXT) unitTest.$(OBJEXT) unitTest_OBJECTS = $(am_unitTest_OBJECTS) am__DEPENDENCIES_1 = depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(unitTest_SOURCES) DIST_SOURCES = $(unitTest_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ADD_FFLAGS = @ADD_FFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BLAS_CFLAGS = @BLAS_CFLAGS@ BLAS_CFLAGS_INSTALLED = @BLAS_CFLAGS_INSTALLED@ BLAS_DATA = @BLAS_DATA@ BLAS_DATA_INSTALLED = @BLAS_DATA_INSTALLED@ BLAS_DEPENDENCIES = @BLAS_DEPENDENCIES@ BLAS_LIBS = @BLAS_LIBS@ BLAS_LIBS_INSTALLED = @BLAS_LIBS_INSTALLED@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILSLIB_CFLAGS = @COINUTILSLIB_CFLAGS@ COINUTILSLIB_CFLAGS_INSTALLED = @COINUTILSLIB_CFLAGS_INSTALLED@ COINUTILSLIB_DEPENDENCIES = @COINUTILSLIB_DEPENDENCIES@ COINUTILSLIB_LIBS = @COINUTILSLIB_LIBS@ COINUTILSLIB_LIBS_INSTALLED = @COINUTILSLIB_LIBS_INSTALLED@ COINUTILSLIB_PCLIBS = @COINUTILSLIB_PCLIBS@ COINUTILSLIB_PCREQUIRES = @COINUTILSLIB_PCREQUIRES@ COINUTILS_SVN_REV = @COINUTILS_SVN_REV@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_BLAS_FALSE = @COIN_HAS_BLAS_FALSE@ COIN_HAS_BLAS_TRUE = @COIN_HAS_BLAS_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_LAPACK_FALSE = @COIN_HAS_LAPACK_FALSE@ COIN_HAS_LAPACK_TRUE = @COIN_HAS_LAPACK_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_ZLIB_FALSE = @COIN_HAS_ZLIB_FALSE@ COIN_HAS_ZLIB_TRUE = @COIN_HAS_ZLIB_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DBG_FFLAGS = @DBG_FFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FLIBS = @FLIBS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAPACK_CFLAGS = @LAPACK_CFLAGS@ LAPACK_CFLAGS_INSTALLED = @LAPACK_CFLAGS_INSTALLED@ LAPACK_DATA = @LAPACK_DATA@ LAPACK_DATA_INSTALLED = @LAPACK_DATA_INSTALLED@ LAPACK_DEPENDENCIES = @LAPACK_DEPENDENCIES@ LAPACK_LIBS = @LAPACK_LIBS@ LAPACK_LIBS_INSTALLED = @LAPACK_LIBS_INSTALLED@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OPT_FFLAGS = @OPT_FFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign unitTest_SOURCES = \ CoinLpIOTest.cpp \ CoinDenseVectorTest.cpp \ CoinErrorTest.cpp \ CoinIndexedVectorTest.cpp \ CoinMessageHandlerTest.cpp \ CoinModelTest.cpp \ CoinMpsIOTest.cpp \ CoinPackedMatrixTest.cpp \ CoinPackedVectorTest.cpp \ CoinShallowPackedVectorTest.cpp \ unitTest.cpp # List libraries to link into binary unitTest_LDADD = ../src/libCoinUtils.la $(COINUTILSLIB_LIBS) # Dependencies of binaries are mostly the same as given in LDADD, but with -l and -L removed unitTest_DEPENDENCIES = ../src/libCoinUtils.la $(COINUTILSLIB_DEPENDENCIES) # 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`$(CYGPATH_W) $(srcdir)/../src` # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src unittestflags = $(am__append_1) $(am__append_2) ######################################################################## # Cleaning stuff # ######################################################################## # Here we list everything that is not generated by the compiler, e.g., # output files of a program DISTCLEANFILES = \ byColumn.mps byRow.mps CoinMpsIoTest.mps string.mps 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign 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 clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done unitTest$(EXEEXT): $(unitTest_OBJECTS) $(unitTest_DEPENDENCIES) @rm -f unitTest$(EXEEXT) $(CXXLINK) $(unitTest_LDFLAGS) $(unitTest_OBJECTS) $(unitTest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinDenseVectorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinErrorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinIndexedVectorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinLpIOTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinMessageHandlerTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinModelTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinMpsIOTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPackedMatrixTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinPackedVectorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CoinShallowPackedVectorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unitTest.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: 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: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS ctags 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-exec \ install-exec-am install-info install-info-am install-man \ 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 uninstall uninstall-am \ uninstall-info-am test: unitTest$(EXEEXT) ./unitTest$(EXEEXT) $(unittestflags) .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: DyLP-1.10.4/CoinUtils/test/CoinErrorTest.cpp0000644000175200017520000000222011510454173017206 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifdef NDEBUG #undef NDEBUG #endif #include #include "CoinError.hpp" void CoinErrorUnitTest() { // Test default constructor { CoinError r; assert( r.message_=="" ); assert( r.method_=="" ); assert( r.class_=="" ); } // Test alternate constructor and get method CoinError rhs; { CoinError a("msg","me.hpp","cl"); assert( a.message()=="msg" ); assert( a.methodName()=="me.hpp" ); assert( a.className()=="cl" ); // Test copy constructor { CoinError c(a); assert( c.message()=="msg" ); assert( c.methodName()=="me.hpp" ); assert( c.className()=="cl" ); } // Test assignment { CoinError a1("msg1","meth1","cl1"); assert( a1.message()=="msg1" ); assert( a1.methodName()=="meth1" ); assert( a1.className()=="cl1" ); rhs = a1; } } assert( rhs.message()=="msg1" ); assert( rhs.methodName()=="meth1" ); assert( rhs.className()=="cl1" ); } DyLP-1.10.4/CoinUtils/coinutils.pc.in0000644000175200017520000000047611507663424015745 0ustar coincoinprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: CoinUtils Description: COIN-OR Utilities URL: https://projects.coin-or.org/CoinUtils Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lCoinUtils @COINUTILSLIB_PCLIBS@ Cflags: -I${includedir} Requires: @COINUTILSLIB_PCREQUIRES@ DyLP-1.10.4/CoinUtils/configure0000755000175200017520000471311413434057056014715 0ustar coincoin#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for CoinUtils 2.11.0. # # Report bugs to . # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # # # Copyright 2006 International Business Machines and others. # All Rights Reserved. # This file is part of the open source package Coin which is distributed # under the Eclipse Public License. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1 && unset CDPATH if test -z "$ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if (echo_test_string=`eval $cmd`) 2>/dev/null && echo_test_string=`eval $cmd` && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi tagnames=${tagnames+${tagnames},}CXX tagnames=${tagnames+${tagnames},}F77 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='CoinUtils' PACKAGE_TARNAME='coinutils' PACKAGE_VERSION='2.11.0' PACKAGE_STRING='CoinUtils 2.11.0' PACKAGE_BUGREPORT='http://projects.coin-or.org/CoinUtils' ac_unique_file="src/CoinError.cpp" ac_default_prefix=`pwd` # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os ALWAYS_FALSE_TRUE ALWAYS_FALSE_FALSE have_svnversion COINUTILS_SVN_REV CDEFS ADD_CFLAGS DBG_CFLAGS OPT_CFLAGS sol_cc_compiler CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT COIN_CC_IS_CL_TRUE COIN_CC_IS_CL_FALSE MPICC CXXDEFS ADD_CXXFLAGS DBG_CXXFLAGS OPT_CXXFLAGS CXX CXXFLAGS ac_ct_CXX COIN_CXX_IS_CL_TRUE COIN_CXX_IS_CL_FALSE MPICXX ADD_FFLAGS DBG_FFLAGS OPT_FFLAGS F77 ac_ct_F77 FFLAGS MPIF77 FLIBS EGREP LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOLM4 have_autoconf have_automake have_svn BUILDTOOLSDIR AUX_DIR abs_source_dir abs_lib_dir abs_include_dir abs_bin_dir HAVE_EXTERNALS_TRUE HAVE_EXTERNALS_FALSE host host_cpu host_vendor host_os ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP LIBTOOL ac_c_preproc_warn_flag ac_cxx_preproc_warn_flag RPATH_FLAGS DEPENDENCY_LINKING_TRUE DEPENDENCY_LINKING_FALSE LT_LDFLAGS PKG_CONFIG ac_ct_PKG_CONFIG COIN_HAS_PKGCONFIG_TRUE COIN_HAS_PKGCONFIG_FALSE COIN_PKG_CONFIG_PATH COIN_PKG_CONFIG_PATH_UNINSTALLED BLAS_LIBS BLAS_CFLAGS BLAS_DATA BLAS_DEPENDENCIES BLAS_LIBS_INSTALLED BLAS_CFLAGS_INSTALLED BLAS_DATA_INSTALLED COINUTILSLIB_CFLAGS COINUTILSLIB_LIBS COINUTILSLIB_PCLIBS COINUTILSLIB_PCREQUIRES COINUTILSLIB_DEPENDENCIES COINUTILSLIB_CFLAGS_INSTALLED COINUTILSLIB_LIBS_INSTALLED COIN_HAS_BLAS_TRUE COIN_HAS_BLAS_FALSE LAPACK_LIBS LAPACK_CFLAGS LAPACK_DATA LAPACK_DEPENDENCIES LAPACK_LIBS_INSTALLED LAPACK_CFLAGS_INSTALLED LAPACK_DATA_INSTALLED COIN_HAS_LAPACK_TRUE COIN_HAS_LAPACK_FALSE GLPK_LIBS GLPK_CFLAGS GLPK_DATA GLPK_DEPENDENCIES GLPK_LIBS_INSTALLED GLPK_CFLAGS_INSTALLED GLPK_DATA_INSTALLED COIN_HAS_GLPK_TRUE COIN_HAS_GLPK_FALSE SAMPLE_LIBS SAMPLE_CFLAGS SAMPLE_DATA SAMPLE_DEPENDENCIES SAMPLE_LIBS_INSTALLED SAMPLE_CFLAGS_INSTALLED SAMPLE_DATA_INSTALLED COIN_HAS_SAMPLE_TRUE COIN_HAS_SAMPLE_FALSE NETLIB_LIBS NETLIB_CFLAGS NETLIB_DATA NETLIB_DEPENDENCIES NETLIB_LIBS_INSTALLED NETLIB_CFLAGS_INSTALLED NETLIB_DATA_INSTALLED COIN_HAS_NETLIB_TRUE COIN_HAS_NETLIB_FALSE COIN_HAS_ZLIB_TRUE COIN_HAS_ZLIB_FALSE coin_have_doxygen coin_have_latex coin_doxy_usedot coin_doxy_tagname coin_doxy_logname COIN_HAS_DOXYGEN_TRUE COIN_HAS_DOXYGEN_FALSE COIN_HAS_LATEX_TRUE COIN_HAS_LATEX_FALSE coin_doxy_tagfiles coin_doxy_excludes LIBEXT VPATH_DISTCLEANFILES ABSBUILDDIR LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # 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. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= 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 ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -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 | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$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 ;; -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 ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) 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 ;; -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=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 ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && 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'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac 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 echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 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 # 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 its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | 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 if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CDEFS_set=${CDEFS+set} ac_env_CDEFS_value=$CDEFS ac_cv_env_CDEFS_set=${CDEFS+set} ac_cv_env_CDEFS_value=$CDEFS ac_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_cv_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_cv_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_cv_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_cv_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_cv_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_cv_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_MPICC_set=${MPICC+set} ac_env_MPICC_value=$MPICC ac_cv_env_MPICC_set=${MPICC+set} ac_cv_env_MPICC_value=$MPICC ac_env_CXXDEFS_set=${CXXDEFS+set} ac_env_CXXDEFS_value=$CXXDEFS ac_cv_env_CXXDEFS_set=${CXXDEFS+set} ac_cv_env_CXXDEFS_value=$CXXDEFS ac_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_cv_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_cv_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_cv_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_cv_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_cv_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_cv_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_MPICXX_set=${MPICXX+set} ac_env_MPICXX_value=$MPICXX ac_cv_env_MPICXX_set=${MPICXX+set} ac_cv_env_MPICXX_value=$MPICXX ac_env_ADD_FFLAGS_set=${ADD_FFLAGS+set} ac_env_ADD_FFLAGS_value=$ADD_FFLAGS ac_cv_env_ADD_FFLAGS_set=${ADD_FFLAGS+set} ac_cv_env_ADD_FFLAGS_value=$ADD_FFLAGS ac_env_DBG_FFLAGS_set=${DBG_FFLAGS+set} ac_env_DBG_FFLAGS_value=$DBG_FFLAGS ac_cv_env_DBG_FFLAGS_set=${DBG_FFLAGS+set} ac_cv_env_DBG_FFLAGS_value=$DBG_FFLAGS ac_env_OPT_FFLAGS_set=${OPT_FFLAGS+set} ac_env_OPT_FFLAGS_value=$OPT_FFLAGS ac_cv_env_OPT_FFLAGS_set=${OPT_FFLAGS+set} ac_cv_env_OPT_FFLAGS_value=$OPT_FFLAGS ac_env_F77_set=${F77+set} ac_env_F77_value=$F77 ac_cv_env_F77_set=${F77+set} ac_cv_env_F77_value=$F77 ac_env_FFLAGS_set=${FFLAGS+set} ac_env_FFLAGS_value=$FFLAGS ac_cv_env_FFLAGS_set=${FFLAGS+set} ac_cv_env_FFLAGS_value=$FFLAGS ac_env_MPIF77_set=${MPIF77+set} ac_env_MPIF77_value=$MPIF77 ac_cv_env_MPIF77_set=${MPIF77+set} ac_cv_env_MPIF77_value=$MPIF77 ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP ac_env_PKG_CONFIG_set=${PKG_CONFIG+set} ac_env_PKG_CONFIG_value=$PKG_CONFIG ac_cv_env_PKG_CONFIG_set=${PKG_CONFIG+set} ac_cv_env_PKG_CONFIG_value=$PKG_CONFIG # # 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 CoinUtils 2.11.0 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 \`..'] _ACEOF cat <<_ACEOF 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] --datadir=DIR read-only architecture-independent data [PREFIX/share] --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] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _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 CoinUtils 2.11.0:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug compile all projects with debug options tests (implies --disable-shared) --enable-debug-coinutils compile project CoinUtils with debug compiler flags --enable-msvc Prefer (i)cl/ifort/link over GNU on MinGW/Cygwin. --enable-static[=PKGS] build static libraries [default=no] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --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-dependency-linking disable linking library dependencies into shared libraries --enable-coinutils-threads enables compilation of thread aware CoinUtils (mempool so far) --enable-coinutils-mempool-override-new enables the CoinUtils mempool to override global new/delete --enable-coinutils-mempool-maxpooled Specify the default maximum memory allocation size that is served by the memory pool. If negative (or 'no') then the memory pool is disabled completely. Otherwise its value can be overridden at runtime using the COINUTILS_MEMPOOL_MAXPOOLED environment variable. --disable-pkg-config disable use of pkg-config (if available) --disable-interpackage-dependencies disables deduction of Makefile dependencies from package linker flags --disable-zlib do not compile with compression library zlib --disable-bzlib do not compile with compression library bzlib --enable-gnu-packages compile with GNU packages (disabled by default) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-coinutils-verbosity specify the debug verbosity level for project CoinUtils --with-coinutils-checklevel specify the sanity check level for project CoinUtils --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] --with-blas specify BLAS library (or BUILD to enforce use of ThirdParty/Blas) --with-coin-instdir prefix of installation directory for precompiled COIN packages --with-blas-lib linker flags for using package Blas --with-blas-incdir directory with header files for using package Blas --with-blas-datadir directory with data files for using package Blas --with-lapack specify LAPACK library (or BUILD to enforce use of ThirdParty/Lapack) --with-lapack-lib linker flags for using package Lapack --with-lapack-incdir directory with header files for using package Lapack --with-lapack-datadir directory with data files for using package Lapack --with-glpk-lib linker flags for using package Glpk --with-glpk-incdir directory with header files for using package Glpk --with-glpk-datadir directory with data files for using package Glpk --with-sample-lib linker flags for using package Sample --with-sample-incdir directory with header files for using package Sample --with-sample-datadir directory with data files for using package Sample --with-netlib-lib linker flags for using package Netlib --with-netlib-incdir directory with header files for using package Netlib --with-netlib-datadir directory with data files for using package Netlib --with-dot use dot (from graphviz) when creating documentation with doxygen if available; --without-dot to disable Some influential environment variables: CDEFS Additional -D flags to be used when compiling C code. ADD_CFLAGS Additional C compiler options DBG_CFLAGS Debug C compiler options OPT_CFLAGS Optimize C compiler options CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory MPICC C MPI Compiler CXXDEFS Additional -D flags to be used when compiling C++ code. ADD_CXXFLAGS Additional C++ compiler options DBG_CXXFLAGS Debug C++ compiler options OPT_CXXFLAGS Optimize C++ compiler options CXX C++ compiler command CXXFLAGS C++ compiler flags MPICXX C++ MPI Compiler ADD_FFLAGS Additional Fortran compiler options DBG_FFLAGS Debug Fortran compiler options OPT_FFLAGS Optimize Fortran compiler options F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags MPIF77 Fortran MPI Compiler CPP C preprocessor CXXCPP C++ preprocessor PKG_CONFIG path to pkg-config utility 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 fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style 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 elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF CoinUtils configure 2.11.0 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by CoinUtils $as_me 2.11.0, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { 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` hostinfo = `(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=. echo "PATH: $as_dir" done } >&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_sep= 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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$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 ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >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 # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" 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. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 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 `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 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 { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`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. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } 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 # List one file in the package so that the configure script can test # whether the package is actually there # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. ############################################################################# # Standard build tool stuff # ############################################################################# # Get the system type ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; 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 { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # If this project depends on external projects, the Externals file in # the source root directory contains definition of where to find those # externals. The following macro ensures that those externals are # retrieved by svn if they are not there yet. # As backup, we make sure we don't loose an FLIBS if it has been set # by the user save_FLIBS="$FLIBS" # A useful makefile conditional that is always false if false; then ALWAYS_FALSE_TRUE= ALWAYS_FALSE_FALSE='#' else ALWAYS_FALSE_TRUE='#' ALWAYS_FALSE_FALSE= fi # We set the following variable so that we know later in AC_COIN_FINALIZE # that we are in a project main directory coin_projectdir=yes # Set the project's version numbers cat >>confdefs.h <<_ACEOF #define COINUTILS_VERSION "$PACKAGE_VERSION" _ACEOF coin_majorver=`echo $PACKAGE_VERSION | sed -n -e 's/^\([0-9]*\).*/\1/gp'` coin_minorver=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.\([0-9]*\).*/\1/gp'` coin_releasever=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\).*/\1/gp'` if test "x$coin_majorver" = x ; then coin_majorver=9999 ; fi if test "x$coin_minorver" = x ; then coin_minorver=9999 ; fi if test "x$coin_releasever" = x ; then coin_releasever=9999 ; fi cat >>confdefs.h <<_ACEOF #define COINUTILS_VERSION_MAJOR $coin_majorver _ACEOF cat >>confdefs.h <<_ACEOF #define COINUTILS_VERSION_MINOR $coin_minorver _ACEOF cat >>confdefs.h <<_ACEOF #define COINUTILS_VERSION_RELEASE $coin_releasever _ACEOF # We use the following variable to have a string with the upper case # version of the project name COIN_PRJCT=COINUTILS # Set the project's SVN revision number. The complicated sed expression # (made worse by quadrigraphs) ensures that things like 4123:4168MS end up # as a single number. # Extract the first word of "svnversion", so it can be a program name with args. set dummy svnversion; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svnversion+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svnversion"; then ac_cv_prog_have_svnversion="$have_svnversion" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svnversion="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svnversion" && ac_cv_prog_have_svnversion="no" fi fi have_svnversion=$ac_cv_prog_have_svnversion if test -n "$have_svnversion"; then echo "$as_me:$LINENO: result: $have_svnversion" >&5 echo "${ECHO_T}$have_svnversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "x$have_svnversion" = xyes; then svn_rev_tmp=`LANG=en_EN svnversion $srcdir 2>/dev/null` if test "x$svn_rev_tmp" != xexported -a "x$svn_rev_tmp" != x -a "x$svn_rev_tmp" != "xUnversioned directory"; then COINUTILS_SVN_REV=`echo $svn_rev_tmp | sed -n -e 's/^[0-9]*://' -e 's/\([0-9]\)[^0-9]*$/\1/p'` cat >>confdefs.h <<_ACEOF #define COINUTILS_SVN_REV $COINUTILS_SVN_REV _ACEOF fi fi # Capture libtool library version, if given. coin_libversion=14:0:11 # Check if user wants to produce debugging code echo "$as_me:$LINENO: checking whether we want to compile in debug mode" >&5 echo $ECHO_N "checking whether we want to compile in debug mode... $ECHO_C" >&6 # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" case "${enableval}" in yes) coin_debug_compile=true if test "${enable_shared+set}" = set; then :; else enable_shared=no fi ;; no) coin_debug_compile=false ;; *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug" >&5 echo "$as_me: error: bad value ${enableval} for --enable-debug" >&2;} { (exit 1); exit 1; }; } ;; esac else coin_debug_compile=false fi; # Check whether --enable-debug-coinutils or --disable-debug-coinutils was given. if test "${enable_debug_coinutils+set}" = set; then enableval="$enable_debug_coinutils" case "${enableval}" in yes) coin_debug_compile=true ;; no) coin_debug_compile=false ;; *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug-coinutils" >&5 echo "$as_me: error: bad value ${enableval} for --enable-debug-coinutils" >&2;} { (exit 1); exit 1; }; } ;; esac else : fi; # m4_ifvaln([CoinUtils], if test $coin_debug_compile = true; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Check whether --with-coinutils-verbosity or --without-coinutils-verbosity was given. if test "${with_coinutils_verbosity+set}" = set; then withval="$with_coinutils_verbosity" if test "$withval" = yes; then withval=1 fi coin_coinutils_verbosity=$withval else coin_coinutils_verbosity=0 fi; cat >>confdefs.h <<_ACEOF #define COIN_COINUTILS_VERBOSITY $coin_coinutils_verbosity _ACEOF # Check whether --with-coinutils-checklevel or --without-coinutils-checklevel was given. if test "${with_coinutils_checklevel+set}" = set; then withval="$with_coinutils_checklevel" if test "$withval" = yes; then withval=1 fi coin_coinutils_checklevel=$withval else coin_coinutils_checklevel=0 fi; cat >>confdefs.h <<_ACEOF #define COIN_COINUTILS_CHECKLEVEL $coin_coinutils_checklevel _ACEOF # m4_ifvaln([CoinUtils], # Get the name of the C++ compiler and appropriate compiler options # for backward compatibility # Check whether --enable-doscompile or --disable-doscompile was given. if test "${enable_doscompile+set}" = set; then enableval="$enable_doscompile" enable_doscompile=$enableval else enable_doscompile=no fi; # Check whether --enable-msvc or --disable-msvc was given. if test "${enable_msvc+set}" = set; then enableval="$enable_msvc" enable_msvc=$enableval else enable_msvc=no if test "$enable_doscompile" = msvc ; then enable_msvc=yes elif test "$enable_doscompile" != no ; then { { echo "$as_me:$LINENO: error: --enable-doscompile=$enable_doscompile not supported anymore." >&5 echo "$as_me: error: --enable-doscompile=$enable_doscompile not supported anymore." >&2;} { (exit 1); exit 1; }; } fi fi; if test "$enable_msvc" = MD; then enable_shared=yes enable_msvc=yes fi if test "$enable_msvc" = yes; then case $build in *-cygwin* | *-mingw*) ;; *) { { echo "$as_me:$LINENO: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&5 echo "$as_me: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&2;} { (exit 1); exit 1; }; } ;; esac 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 # For consistency, we set the C compiler to the same value of the C++ # compiler, if the C++ is set, but the C compiler isn't (only for CXX=cl) if test x"$CXX" != x; then case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) if test x"$CC" = x; then CC="$CXX" { echo "$as_me:$LINENO: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&5 echo "$as_me: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&2;} fi ;; esac fi coin_has_cc=yes save_cflags="$CFLAGS" # For *-*-solaris*, promote Studio/Workshop cc compiler to front of list. # Depending on the user's PATH, when Studio/Workshop cc is not present we may # find /usr/ucb/cc, which is almost certainly not a good choice for the C # compiler. In this case, put cc after gcc. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl gcc" else comps="gcc icl cl" fi ;; *-*-solaris*) # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_sol_cc_compiler+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$sol_cc_compiler"; then ac_cv_prog_sol_cc_compiler="$sol_cc_compiler" # 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_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_sol_cc_compiler="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done 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_sol_cc_compiler 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 sol_cc_compiler to just the basename; use the full file name. shift ac_cv_prog_sol_cc_compiler="$as_dir/$ac_word${1+' '}$@" fi fi fi fi sol_cc_compiler=$ac_cv_prog_sol_cc_compiler if test -n "$sol_cc_compiler"; then echo "$as_me:$LINENO: result: $sol_cc_compiler" >&5 echo "${ECHO_T}$sol_cc_compiler" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$sol_cc_compiler" = "cc" ; then comps="cc xlc gcc pgcc icc" else comps="xlc gcc pgcc icc cc" fi ;; *-*-darwin*) comps="clang gcc cc" ;; *-linux-gnu*) comps="gcc cc pgcc icc xlc" ;; *-linux-*) comps="xlc gcc cc pgcc icc" ;; *) comps="xlc_r xlc cc gcc pgcc icc" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CC || test "${ac_cv_prog_CC+set}" != set || { ac_cv_prog_CC=; export ac_cv_prog_CC; } # AC_MSG_NOTICE([C compiler candidates: $comps]) 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 for ac_prog in $comps 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out 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. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* 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 -std1 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 -std1. */ int osf4_cc_array ['\x00' == 0 ? 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 # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f 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 -z "$CC" ; then { { echo "$as_me:$LINENO: error: Failed to find a C compiler!" >&5 echo "$as_me: error: Failed to find a C compiler!" >&2;} { (exit 1); exit 1; }; } fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cc_g" = yes ; then ac_cv_prog_cc_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CFLAGS="$save_cflags" # add automake conditional so we can recognize cl compiler in makefile coin_cc_is_cl=false case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_cc_is_cl=true ;; esac if test $coin_cc_is_cl = true; then COIN_CC_IS_CL_TRUE= COIN_CC_IS_CL_FALSE='#' else COIN_CC_IS_CL_TRUE='#' COIN_CC_IS_CL_FALSE= fi # Check if a project specific CFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CFLAGS+set} if test x$coin_tmp = xset; then eval CFLAGS=\${${COIN_PRJCT}_CFLAGS} fi fi if test x"$CFLAGS" = x; then coin_add_cflags= coin_opt_cflags= coin_dbg_cflags= coin_warn_cflags= if test "$GCC" = "yes"; then case "$CC" in icc* | */icc*) ;; *) coin_opt_cflags="-O3" coin_add_cflags="-pipe" coin_dbg_cflags="-g -O0" coin_warn_cflags="-Wimplicit -Wparentheses -Wsequence-point -Wreturn-type -Wcast-qual -Wall -Wno-unknown-pragmas -Wno-long-long" esac fi if test -z "$coin_opt_cflags"; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -O2' coin_dbg_cflags='-MDd' else coin_opt_cflags='-MT -O2' coin_dbg_cflags='-MTd' fi coin_add_cflags='-nologo -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -Ox' coin_dbg_cflags='-MDd -debug' else coin_opt_cflags='-MT -Ox' coin_dbg_cflags='-MTd -debug' fi coin_add_cflags='-nologo -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CC" in icc* | */icc*) coin_opt_cflags="-O3 -ip -mp1" coin_add_cflags="" coin_dbg_cflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cflags="-i_dynamic $coin_add_cflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgcc* | */pgcc*) coin_opt_cflags="-fast" coin_add_cflags="-Kieee -pc 64" coin_dbg_cflags="-g" ;; esac ;; *-ibm-*) case "$CC" in xlc* | */xlc* | mpxlc* | */mpxlc*) coin_opt_cflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cflags="-bmaxdata:0x80000000 -qsuppress=1500-036 -qsuppress=1500-029" coin_dbg_cflags="-g" ;; esac ;; *-hp-*) coin_opt_cflags="-O" coin_add_cflags="-Ae" coin_dbg_cflags="-g" ;; *-*-solaris*) coin_opt_cflags="-xO4" coin_dbg_cflags="-g" ;; *-sgi-*) coin_opt_cflags="-O -OPT:Olimit=0" coin_dbg_cflags="-g" ;; esac fi if test "$ac_cv_prog_cc_g" = yes && test -z "$coin_dbg_cflags" ; then coin_dbg_cflags="-g" fi if test -z "$coin_opt_cflags"; then # Try if -O option works if nothing else is set CFLAGS="-O" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cflags" = xyes; then coin_warn_cflags= fi if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$coin_dbg_cflags $coin_add_cflags $coin_warn_cflags" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$coin_opt_cflags $coin_add_cflags -DNDEBUG $coin_warn_cflags" fi DBG_CFLAGS="$DBG_CFLAGS $ADD_CFLAGS $CDEFS" OPT_CFLAGS="$OPT_CFLAGS $ADD_CFLAGS $CDEFS" if test "$coin_debug_compile" = "true"; then CFLAGS="$DBG_CFLAGS" else CFLAGS="$OPT_CFLAGS" fi else CFLAGS="$CFLAGS $ADD_CFLAGS $CDEFS" if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$CFLAGS" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$CFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CFLAGS="$CFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CFLAGS works save_CFLAGS="$CFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&2;} CFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C compiler options are: $CFLAGS" >&5 echo "$as_me: C compiler options are: $CFLAGS" >&6;} if test x"$MPICC" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C compiler $MPICC" >&5 echo "$as_me: Will use MPI C compiler $MPICC" >&6;} CC="$MPICC" fi # Correct the LD variable if we are using the MS or Intel-windows compiler case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac 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 #Let's try if that overcomes configuration problem with VC++ 6.0 ac_ext=cc 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 coin_has_cxx=yes save_cxxflags="$CXXFLAGS" # For *-*-solaris*, promote Studio/Workshop compiler to front of list. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl g++" else comps="g++ icl cl" fi ;; *-*-solaris*) comps="CC xlC_r aCC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; *-darwin*) comps="clang++ g++ c++ CC" ;; *-linux-gnu*) comps="g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC xlC_r aCC CC" ;; *) comps="xlC_r aCC CC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CXX || test "${ac_cv_prog_CXX+set}" != set || { ac_cv_prog_CXX=; export ac_cv_prog_CXX; } # AC_MSG_NOTICE([C++ compiler candidates: $comps]) ac_ext=cc 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 -n "$ac_tool_prefix"; then for ac_prog in $CCC $comps 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$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 for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=cc 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_PROG_CXX sets CXX to g++ if it cannot find a working C++ compiler #thus, we test here whether $CXX is actually working ac_ext=cc 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 echo "$as_me:$LINENO: checking whether C++ compiler $CXX works" >&5 echo $ECHO_N "checking whether C++ compiler $CXX works... $ECHO_C" >&6; cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&5 echo "$as_me: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cc 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 coin_cxx_is_cl=false # It seems that we need to cleanup something here for the Windows case "$CXX" in clang* | */clang*) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) sed -e 's/^void exit (int);//' confdefs.h >> confdefs.hh mv confdefs.hh confdefs.h coin_cxx_is_cl=true ;; esac # add automake conditional so we can recognize cl compiler in makefile if test $coin_cxx_is_cl = true; then COIN_CXX_IS_CL_TRUE= COIN_CXX_IS_CL_FALSE='#' else COIN_CXX_IS_CL_TRUE='#' COIN_CXX_IS_CL_FALSE= fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cxx_g" = yes ; then ac_cv_prog_cxx_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CXXFLAGS="$save_cxxflags" # Check if a project specific CXXFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CXXFLAGS+set} if test x$coin_tmp = xset; then eval CXXFLAGS=\${${COIN_PRJCT}_CXXFLAGS} fi fi if test x"$CXXFLAGS" = x; then # ToDo decide whether we want -DNDEBUG for optimization coin_add_cxxflags= coin_opt_cxxflags= coin_dbg_cxxflags= coin_warn_cxxflags= if test "$GXX" = "yes"; then case "$CXX" in icpc* | */icpc*) ;; *) # ToDo decide about unroll-loops coin_opt_cxxflags="-O3" coin_add_cxxflags="-pipe" coin_dbg_cxxflags="-g -O0" coin_warn_cxxflags="-Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas -Wno-long-long" esac fi # Note that we do not need to cover GCC in the following tests. if test -z "$coin_opt_cxxflags"; then case $build in *-cygwin* | *-mingw*) case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -O2' coin_dbg_cxxflags='-MDd' else coin_opt_cxxflags='-MT -O2' coin_dbg_cxxflags='-MTd' fi coin_add_cxxflags='-nologo -EHsc -GR -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -Ox' coin_dbg_cxxflags='-MDd -debug' else coin_opt_cxxflags='-MT -Ox' coin_dbg_cxxflags='-MTd -debug' fi coin_add_cxxflags='-nologo -EHsc -GR -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CXX" in icpc* | */icpc*) coin_opt_cxxflags="-O3 -ip -mp1" coin_add_cxxflags="" coin_dbg_cxxflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CXXFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cxxflags="-i_dynamic $coin_add_cxxflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgCC* | */pgCC*) coin_opt_cxxflags="-fast" coin_add_cxxflags="-Kieee -pc 64" coin_dbg_cxxflags="-g" ;; esac ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) coin_opt_cxxflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cxxflags="-bmaxdata:0x80000000 -qrtti=dyna -qsuppress=1500-036 -qsuppress=1500-029 -qsourcetype=c++" coin_dbg_cxxflags="-g" ;; esac ;; *-hp-*) case "$CXX" in aCC* | */aCC* ) coin_opt_cxxflags="-O" coin_add_cxxflags="-AA" coin_dbg_cxxflags="-g" ;; esac ;; *-*-solaris*) coin_opt_cxxflags="-O4" coin_dbg_cxxflags="-g" ;; esac fi # Generic flag settings. If these don't work, add a case above. if test "$ac_cv_prog_cxx_g" = yes && test -z "$coin_dbg_cxxflags" ; then coin_dbg_cxxflags="-g" fi if test -z "$coin_opt_cxxflags"; then # Try if -O option works if nothing else is set CXXFLAGS=-O cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cxxflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cxxflags" = xyes; then coin_warn_cxxflags= fi # Do final setup of flags based on values determined above. if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$coin_dbg_cxxflags $coin_add_cxxflags $coin_warn_cxxflags" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$coin_opt_cxxflags $coin_add_cxxflags -DNDEBUG $coin_warn_cxxflags" fi DBG_CXXFLAGS="$DBG_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" OPT_CXXFLAGS="$OPT_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test "$coin_debug_compile" = "true"; then CXXFLAGS="$DBG_CXXFLAGS" else CXXFLAGS="$OPT_CXXFLAGS" fi # Handle the case where CXXFLAGS was set externally. else CXXFLAGS="$CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$CXXFLAGS" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$CXXFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CXXFLAGS="$CXXFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CXXFLAGS works save_CXXFLAGS="$CXXFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&2;} CXXFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C++ compiler options are: $CXXFLAGS" >&5 echo "$as_me: C++ compiler options are: $CXXFLAGS" >&6;} if test x"$MPICXX" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C++ compiler $MPICXX" >&5 echo "$as_me: Will use MPI C++ compiler $MPICXX" >&6;} CXX="$MPICXX" fi # correct the LD variable in a build with MS or Intel-windows compiler case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac 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 # Get the name of the Fortran compiler and appropriate compiler options case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then coin_f77_comps="ifort fl32 compile_f2c" else coin_f77_comps="gfortran ifort g95 g77 fl32 compile_f2c" fi ;; *-*-solaris*) coin_f77_comps="f95 f90 g95 f77 xlf_r fort77 gfortran g77 pgf90 pgf77 ifort ifc frt af77" ;; *-linux-gnu*) coin_f77_comps="gfortran ifort g95 fort77 f77 g77 pgf90 pgf77 ifc frt af77 xlf_r" ;; *) coin_f77_comps="xlf_r fort77 gfortran ifort g95 f77 g77 pgf90 pgf77 ifc frt af77" ;; esac ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu coin_has_f77=yes save_fflags="$FFLAGS" # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_F77 || test "${ac_cv_prog_F77+set}" != set || { ac_cv_prog_F77=; export ac_cv_prog_F77; } # This is a real belt-and-suspenders approach. AC_COIN_FIND_F77 will use # coin_f77_comps to see if there's a program that matches one of the names. # If there's no such program, F77 = unavailable. If we match the name, # feed AC_PROG_F77 the same search list, just to be sure it's a functioning # compiler. # AC_MSG_NOTICE([Fortran compiler candidates: $coin_f77_comps]) { echo "$as_me:$LINENO: Trying to determine Fortran compiler name" >&5 echo "$as_me: Trying to determine Fortran compiler name" >&6;} if test -n "$ac_tool_prefix"; then for ac_prog in $coin_f77_comps 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in $coin_f77_comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done test -n "$ac_ct_F77" || ac_ct_F77="unavailable" F77=$ac_ct_F77 fi if test "$F77" != "unavailable" ; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $coin_f77_comps 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in $coin_f77_comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done F77=$ac_ct_F77 fi # Provide some information about the compiler. echo "$as_me:4318:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo yes` ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu else { echo "$as_me:$LINENO: WARNING: Failed to find a Fortran compiler!" >&5 echo "$as_me: WARNING: Failed to find a Fortran compiler!" >&2;} fi FFLAGS="$save_fflags" # Check if a project specific FFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_FFLAGS+set} if test x$coin_tmp = xset; then eval FFLAGS=\${${COIN_PRJCT}_FFLAGS} fi fi if test "$F77" != "unavailable" && test x"$FFLAGS" = x ; then coin_add_fflags= coin_opt_fflags= coin_dbg_fflags= coin_warn_fflags= if test "$G77" = "yes"; then coin_opt_fflags="-O3" coin_add_fflags="-pipe" coin_dbg_fflags="-g -O0" else case $build in *-cygwin* | *-mingw*) case $F77 in ifort* | */ifort* | IFORT* | */IFORT* ) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_fflags='-MD -O3' coin_dbg_fflags='-MDd -debug' else coin_opt_fflags='-MT -O3' coin_dbg_fflags='-MTd -debug' fi coin_add_fflags='-fpp -nologo' ;; compile_f2c*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_fflags='-MD -O2' coin_dbg_fflags='-MDd' else coin_opt_fflags='-MT -O2' coin_dbg_fflags='-MTd' fi coin_add_fflags='-nologo -wd4996' ;; esac ;; *-linux-*) case $F77 in ifc* | */ifc* | ifort* | */ifort*) coin_opt_fflags="-O3 -ip" coin_add_fflags="-cm -w90 -w95" coin_dbg_fflags="-g -CA -CB -CS" # Check if -i_dynamic is necessary (for new glibc library) FFLAGS= cat >conftest.$ac_ext <<_ACEOF program main write(*,*) 'Hello world' end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_fflags="-i_dynamic $coin_add_fflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgf77* | */pgf77* | pgf90* | */pgf90*) coin_opt_fflags="-fast" coin_add_fflags="-Kieee -pc 64" coin_dbg_fflags="-g" ;; esac ;; *-ibm-*) case "$F77" in xlf* | */xlf* | mpxlf* | */mpxlf* ) coin_opt_fflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_fflags="-bmaxdata:0x80000000 -qsuppress=1500-036 -qsuppress=1500-029" coin_dbg_fflags="-g -C" ;; esac ;; *-hp-*) coin_opt_fflags="+O3" coin_add_fflags="+U77" coin_dbg_fflags="-C -g" ;; *-*-solaris*) coin_opt_fflags="-O4" coin_dbg_fflags="-g" ;; *-sgi-*) coin_opt_fflags="-O5 -OPT:Olimit=0" coin_dbg_fflags="-g" ;; esac fi if test "$ac_cv_prog_f77_g" = yes && test -z "$coin_dbg_fflags" ; then coin_dbg_fflags="-g" fi if test -z "$coin_opt_fflags"; then # Try if -O option works if nothing else is set FFLAGS=-O cat >conftest.$ac_ext <<_ACEOF program main integer i end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_fflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_fflags" = xyes; then coin_warn_fflags= fi if test x${DBG_FFLAGS+set} != xset; then DBG_FFLAGS="$coin_dbg_fflags $coin_add_fflags $coin_warn_fflags" fi if test x${OPT_FFLAGS+set} != xset; then OPT_FFLAGS="$coin_opt_fflags $coin_add_fflags $coin_warn_fflags" fi DBG_FFLAGS="$DBG_FFLAGS $ADD_FFLAGS" OPT_FFLAGS="$OPT_FFLAGS $ADD_FFLAGS" if test "$coin_debug_compile" = "true"; then FFLAGS="$DBG_FFLAGS" else FFLAGS="$OPT_FFLAGS" fi else FFLAGS="$FFLAGS $ADD_FFLAGS" if test x${DBG_FFLAGS+set} != xset; then DBG_FFLAGS="$FFLAGS" fi if test x${OPT_FFLAGS+set} != xset; then OPT_FFLAGS="$FFLAGS" fi fi # Try if FFLAGS works if test "$F77" != "unavailable" ; then cat >conftest.$ac_ext <<_ACEOF program main integer i end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 FFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$FFLAGS"; then { echo "$as_me:$LINENO: WARNING: The flags FFLAGS=\"$FFLAGS\" do not work. I will now just try '-O', but you might want to set FFLAGS manually." >&5 echo "$as_me: WARNING: The flags FFLAGS=\"$FFLAGS\" do not work. I will now just try '-O', but you might want to set FFLAGS manually." >&2;} FFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF program main integer i end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 FFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$FFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for FFLAGS does not work. I will continue with empty FFLAGS, but you might want to set FFLAGS manually." >&5 echo "$as_me: WARNING: This value for FFLAGS does not work. I will continue with empty FFLAGS, but you might want to set FFLAGS manually." >&2;} fi fi fi { echo "$as_me:$LINENO: Fortran compiler options are: $FFLAGS" >&5 echo "$as_me: Fortran compiler options are: $FFLAGS" >&6;} if test x"$MPIF77" = x; then :; else { echo "$as_me:$LINENO: Will use MPI Fortran compiler $MPIF77" >&5 echo "$as_me: Will use MPI Fortran compiler $MPIF77" >&6;} F77="$MPIF77" fi # correct the LD variable if we use the intel fortran compiler in windows case $build in *-cygwin* | *-mingw*) case "$F77" in ifort* | */ifort* | IFORT* | */IFORT*) LD=link ;; esac ;; esac 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 # Find out how to call Fortran from C and determine Fortran runtime libraries if test "x$F77" != xunavailable then # get FLIBS ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu echo "$as_me:$LINENO: checking how to get verbose linking output from $F77" >&5 echo $ECHO_N "checking how to get verbose linking output from $F77... $ECHO_C" >&6 if test "${ac_cv_prog_f77_v+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_verb" (eval echo $as_me:4834: \"$ac_link\") >&5 ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'` echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -f conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_f77_v_output" case $ac_f77_v_output in # If we are using xlf then replace all the commas with spaces. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/,/ /g'` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/\"-mGLOB[^\"]*\"/ /g'` ;; # If we are using Cray Fortran then delete quotes. # Use "\"" instead of '"' for font-lock-mode. # FIXME: a more general fix for quoted arguments with spaces? *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed "s/\"//g"` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_f77_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_f77_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_f77_v"; then { echo "$as_me:$LINENO: WARNING: cannot determine how to obtain linking information from $F77" >&5 echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;} fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { echo "$as_me:$LINENO: WARNING: compilation failed" >&5 echo "$as_me: WARNING: compilation failed" >&2;} fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_f77_v" >&5 echo "${ECHO_T}$ac_cv_prog_f77_v" >&6 echo "$as_me:$LINENO: checking for Fortran libraries of $F77" >&5 echo $ECHO_N "checking for Fortran libraries of $F77... $ECHO_C" >&6 if test "${ac_cv_f77_libs+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "x$FLIBS" != "x"; then ac_cv_f77_libs="$FLIBS" # Let the user override the test. else cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FFLAGS=$FFLAGS FFLAGS="$FFLAGS $ac_cv_prog_f77_v" (eval echo $as_me:4912: \"$ac_link\") >&5 ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | grep -v 'Driving:'` echo "$ac_f77_v_output" >&5 FFLAGS=$ac_save_FFLAGS rm -f conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_f77_v_output="`echo $ac_f77_v_output | grep 'LPATH is:' | sed 's,.*LPATH is\(: *[^ ]*\).*,\1,;s,: */, -L/,g'` $ac_f77_v_output" case $ac_f77_v_output in # If we are using xlf then replace all the commas with spaces. *xlfentry*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/,/ /g'` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_f77_v_output=`echo $ac_f77_v_output | sed 's/\"-mGLOB[^\"]*\"/ /g'` ;; # If we are using Cray Fortran then delete quotes. # Use "\"" instead of '"' for font-lock-mode. # FIXME: a more general fix for quoted arguments with spaces? *cft90*) ac_f77_v_output=`echo $ac_f77_v_output | sed "s/\"//g"` ;; esac ac_cv_f77_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_f77_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt[01].o | -lcrtbegin.o | -lc | -lgcc | -libmil | -LANG:=*) ;; -lkernel32) test x"$CYGWIN" != xyes && ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" ;; -[LRuY]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `echo $ac_arg | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_arg="$ac_arg $ac_j" ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_f77_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" fi ;; # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`echo $ac_f77_v_output | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" done else ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi echo "$as_me:$LINENO: result: $ac_cv_f77_libs" >&5 echo "${ECHO_T}$ac_cv_f77_libs" >&6 FLIBS="$ac_cv_f77_libs" 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 orig_FLIBS="$FLIBS" # If FLIBS has been set by the user, we just restore its value here if test x"$save_FLIBS" != x; then FLIBS="$save_FLIBS" else # This is to correct a missing exclusion in autoconf 2.59 if test x"$FLIBS" != x; then my_flibs= for flag in $FLIBS; do case $flag in -lcrt*.o) ;; -lcygwin) ;; -lgcc*) ;; *) my_flibs="$my_flibs $flag" ;; esac done FLIBS="$my_flibs" fi case $build in # The following is a fix to define FLIBS for ifort on Windows # In its original version, it linked in libifcorert.lib or libifcorertd.lib on Windows/ifort explicitly. # However, this seem to create a dependency on libifcorert.dll (or libifcorertd.dll) in the executables. # This is seem to be unnecessary, libifcorert(d).lib has been removed from the link line. # Further, excluding libc.lib from the default libs seemed to be necessary only for VS < 8. # Since the corresponding flag seems to make more trouble than it avoids, it has been removed now. *-cygwin* | *-mingw*) case "$F77" in # ifort* | */ifort* | IFORT* | */IFORT*) # FLIBS="-link $LIBS /NODEFAULTLIB:libc.lib" # if "$coin_debug_compile" = true ; then # FLIBS="-link $LIBS /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmt.lib" # else # FLIBS="-link $LIBS /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmtd.lib" # fi # ;; compile_f2c*) FLIBS=`$F77 -FLIBS` ;; esac;; *-hp-*) FLIBS="$FLIBS -lm";; *-ibm-*) FLIBS=`echo $FLIBS | sed 's/-lc)/-lc/g'` ;; *-linux-*) case "$F77" in pgf77* | */pgf77* | pgf90* | */pgf90*) # ask linker to go through the archives multiple times # (the Fortran compiler seems to do that automatically...) FLIBS="-Wl,--start-group $FLIBS -Wl,--end-group" ;; esac esac ac_cv_f77_libs="$FLIBS" fi if test "x$orig_FLIBS" != "x$FLIBS" ; then { echo "$as_me:$LINENO: Corrected Fortran libraries: $FLIBS" >&5 echo "$as_me: Corrected Fortran libraries: $FLIBS" >&6;} fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu echo "$as_me:$LINENO: checking for dummy main to link with Fortran libraries" >&5 echo $ECHO_N "checking for dummy main to link with Fortran libraries... $ECHO_C" >&6 if test "${ac_cv_f77_dummy_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_f77_dm_save_LIBS=$LIBS LIBS="$LIBS $FLIBS" ac_fortran_dm_var=F77_DUMMY_MAIN 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 # First, try linking without a dummy main: cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_fortran_dummy_main=none else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_fortran_dummy_main=unknown fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define $ac_fortran_dm_var $ac_func #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_fortran_dummy_main=$ac_func; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_cv_f77_dummy_main=$ac_cv_fortran_dummy_main rm -f conftest* LIBS=$ac_f77_dm_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_f77_dummy_main" >&5 echo "${ECHO_T}$ac_cv_f77_dummy_main" >&6 F77_DUMMY_MAIN=$ac_cv_f77_dummy_main if test "$F77_DUMMY_MAIN" != unknown; then if test $F77_DUMMY_MAIN != none; then cat >>confdefs.h <<_ACEOF #define F77_DUMMY_MAIN $F77_DUMMY_MAIN _ACEOF if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then cat >>confdefs.h <<\_ACEOF #define FC_DUMMY_MAIN_EQ_F77 1 _ACEOF fi fi else { { echo "$as_me:$LINENO: error: linking to Fortran libraries from C fails See \`config.log' for more details." >&5 echo "$as_me: error: linking to Fortran libraries from C fails See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu echo "$as_me:$LINENO: checking for Fortran name-mangling scheme" >&5 echo $ECHO_N "checking for Fortran name-mangling scheme... $ECHO_C" >&6 if test "${ac_cv_f77_mangling+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FLIBS" 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_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_success=yes; break 2 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac 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_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_success_extra=yes; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_f77_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_f77_mangling="$ac_cv_f77_mangling, no extra underscore" else ac_cv_f77_mangling="$ac_cv_f77_mangling, extra underscore" fi else ac_cv_f77_mangling="unknown" fi else ac_cv_f77_mangling="unknown" fi LIBS=$ac_save_LIBS rm -f cfortran_test* conftest* else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compile a simple Fortran program See \`config.log' for more details." >&5 echo "$as_me: error: cannot compile a simple Fortran program See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_f77_mangling" >&5 echo "${ECHO_T}$ac_cv_f77_mangling" >&6 ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in "lower case, no underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) name _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) name _ACEOF ;; "lower case, no underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) name _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) name ## _ _ACEOF ;; "lower case, underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) name ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) name ## _ _ACEOF ;; "lower case, underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) name ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) name ## __ _ACEOF ;; "upper case, no underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) NAME _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) NAME _ACEOF ;; "upper case, no underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) NAME _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) NAME ## _ _ACEOF ;; "upper case, underscore, no extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) NAME ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) NAME ## _ _ACEOF ;; "upper case, underscore, extra underscore") cat >>confdefs.h <<\_ACEOF #define F77_FUNC(name,NAME) NAME ## _ _ACEOF cat >>confdefs.h <<\_ACEOF #define F77_FUNC_(name,NAME) NAME ## __ _ACEOF ;; *) { echo "$as_me:$LINENO: WARNING: unknown Fortran name-mangling scheme" >&5 echo "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu 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 # Initialize automake and libtool { # START coin_disable_shared=no # Test if force_shared has been set if test "x" = xforce_shared; then if test x$enable_shared = xno; then { { echo "$as_me:$LINENO: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&5 echo "$as_me: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&2;} { (exit 1); exit 1; }; } fi enable_shared=yes; else case $build in *-cygwin* | *-mingw*) coin_disable_shared=yes if test x"$enable_shared" = xyes; then case "$CC" in clang* ) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Building of DLLs not supported in this configuration." >&5 echo "$as_me: Building of DLLs not supported in this configuration." >&6;} ;; *gcc*) if test x"$enable_dependency_linking" = xyes; then coin_disable_shared=no else { echo "$as_me:$LINENO: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&5 echo "$as_me: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&2;} fi ;; *) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; esac fi ;; *-aix*) coin_disable_shared=yes platform=AIX if test x"$enable_shared" = xyes; then { echo "$as_me:$LINENO: WARNING: Shared objects are not supported." >&5 echo "$as_me: WARNING: Shared objects are not supported." >&2;} fi ;; esac fi if test x"$coin_disable_shared" = xyes; then if test x"$enable_shared" = xyes; then : else # we don't disable shared, because it was not selected anyway coin_disable_shared=no fi enable_shared=no fi # By default, we only want the shared objects to be compiled # Check whether --enable-static or --disable-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; # Initialize automake echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi am__api_version="1.9" # 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. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_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 ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done 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. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$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' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # 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 ( 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 rm -f conftest.file 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". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 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 $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-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='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi # AC_MSG_NOTICE([Beginning automake initialisation.]) # Stuff for automake # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } 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='coinutils' VERSION='2.11.0' 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"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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'. 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 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 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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 echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$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 depcc="$CXX" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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'. 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 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 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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 echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 # Check whether --enable-maintainer-mode or --disable-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; echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$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 coin_have_externals=no if test "$enable_maintainer_mode" = yes; then # If maintainer mode is chosen, we make sure that the correct versions # of the tools are used, and that we know where libtool.m4 is (to # recreate acinclude.m4) LIBTOOLM4= # Normally, $HOME AUTOTOOLS_DFLT=$HOME echo "$as_me:$LINENO: checking whether we are using the correct autotools" >&5 echo $ECHO_N "checking whether we are using the correct autotools... $ECHO_C" >&6 if test "${ac_cv_use_correct_autotools+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_use_correct_autotools=check fi echo "$as_me:$LINENO: result: $ac_cv_use_correct_autotools" >&5 echo "${ECHO_T}$ac_cv_use_correct_autotools" >&6 if test $ac_cv_use_correct_autotools = check; then ac_cv_use_correct_autotools=yes # Check if we have autoconf # Extract the first word of "autoconf", so it can be a program name with args. set dummy autoconf; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_autoconf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_autoconf"; then ac_cv_prog_have_autoconf="$have_autoconf" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_autoconf="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_autoconf" && ac_cv_prog_have_autoconf="no" fi fi have_autoconf=$ac_cv_prog_have_autoconf if test -n "$have_autoconf"; then echo "$as_me:$LINENO: result: $have_autoconf" >&5 echo "${ECHO_T}$have_autoconf" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_autoconf = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether autoconf is the correct version correct_version='2.59' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of autoconf" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of autoconf... $ECHO_C" >&6 autoconf --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of autoconf as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of autoconf as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable autoconf is picked up from the correct location echo "$as_me:$LINENO: checking whether autoconf is coming from the correct location" >&5 echo $ECHO_N "checking whether autoconf is coming from the correct location... $ECHO_C" >&6 autoconf_dir=`which autoconf | sed -e 's=/autoconf=='` autoconf_dir=`cd $autoconf_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $autoconf_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if we have automake # Extract the first word of "automake", so it can be a program name with args. set dummy automake; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_automake+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_automake"; then ac_cv_prog_have_automake="$have_automake" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_automake="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_automake" && ac_cv_prog_have_automake="no" fi fi have_automake=$ac_cv_prog_have_automake if test -n "$have_automake"; then echo "$as_me:$LINENO: result: $have_automake" >&5 echo "${ECHO_T}$have_automake" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_automake = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether automake is the correct version correct_version='1.9.6' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of automake" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of automake... $ECHO_C" >&6 automake --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of automake as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of automake as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable automake is picked up from the correct location echo "$as_me:$LINENO: checking whether automake is coming from the correct location" >&5 echo $ECHO_N "checking whether automake is coming from the correct location... $ECHO_C" >&6 automake_dir=`which automake | sed -e 's=/automake=='` automake_dir=`cd $automake_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $automake_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if this is the correct version of libtool (with escaped dots) if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi correct_version='1.5.22' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` if test -r $want_dir/libtool/ltmain.sh; then have_ltmain=yes : else have_ltmain=no : fi echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of libtool." >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of libtool.... $ECHO_C" >&6 if test $have_ltmain = yes; then if $EGREP $grep_version $want_dir/libtool/ltmain.sh >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of libtool." >&5 echo "$as_me: error: You don't have the correct version of libtool." >&2;} { (exit 1); exit 1; }; } fi else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: I cannot find the ltmain.sh file." >&5 echo "$as_me: error: I cannot find the ltmain.sh file." >&2;} { (exit 1); exit 1; }; } fi fi # Check if we can find the libtool file if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi if test -r $want_dir/aclocal/libtool.m4; then LIBTOOLM4="$want_dir/aclocal/libtool.m4" : else { { echo "$as_me:$LINENO: error: I cannot find the libtool.m4 file." >&5 echo "$as_me: error: I cannot find the libtool.m4 file." >&2;} { (exit 1); exit 1; }; } : fi # Check if we have an Dependencies file if test -r $srcdir/Dependencies; then coin_have_externals=yes fi # Check if subversion is installed and understands https # Extract the first word of "svn", so it can be a program name with args. set dummy svn; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svn+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svn"; then ac_cv_prog_have_svn="$have_svn" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svn="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svn" && ac_cv_prog_have_svn="no" fi fi have_svn=$ac_cv_prog_have_svn if test -n "$have_svn"; then echo "$as_me:$LINENO: result: $have_svn" >&5 echo "${ECHO_T}$have_svn" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test x$have_svn = xyes; then echo "$as_me:$LINENO: checking whether svn understands https" >&5 echo $ECHO_N "checking whether svn understands https... $ECHO_C" >&6 if test "${ac_cv_svn_understands_https+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else svn --version > confauto.out 2>&1 if $EGREP https confauto.out >/dev/null 2>&1; then ac_cv_svn_understands_https=yes else ac_cv_svn_understands_https=no have_svn=no ac_cv_prog_have_svn=no fi rm -f confauto.out fi echo "$as_me:$LINENO: result: $ac_cv_svn_understands_https" >&5 echo "${ECHO_T}$ac_cv_svn_understands_https" >&6 fi # Find the location of the BuildTools directory BUILDTOOLSDIR= if test -r $srcdir/BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/BuildTools else if test -r $srcdir/../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../BuildTools else if test -r $srcdir/../../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../../BuildTools else { { echo "$as_me:$LINENO: error: Cannot find the BuildTools directory" >&5 echo "$as_me: error: Cannot find the BuildTools directory" >&2;} { (exit better disable maintainer mode.); exit better disable maintainer mode.; }; } fi fi fi # for running automake by make, we need to have Makemain.inc available at the place where it usually can be found during run_autotools if test "$BUILDTOOLSDIR" != "$srcdir/BuildTools" ; then $LN_S `cd $BUILDTOOLSDIR; pwd` "$srcdir/BuildTools" fi # The following variable is set to the name of the directory where # the autotool scripts are located AUX_DIR=$ac_aux_dir fi # helpful variable for the base directory of this package abs_source_dir=`cd $srcdir; pwd` # Stuff for example Makefiles if test x$prefix = xNONE; then full_prefix=$ac_default_prefix else full_prefix=$prefix fi full_prefix=`cd $full_prefix ; pwd` abs_lib_dir=$full_prefix/lib abs_include_dir=$full_prefix/include abs_bin_dir=$full_prefix/bin if test $coin_have_externals = yes && test x$have_svn = xyes; then HAVE_EXTERNALS_TRUE= HAVE_EXTERNALS_FALSE='#' else HAVE_EXTERNALS_TRUE='#' HAVE_EXTERNALS_FALSE= fi # AC_MSG_NOTICE([End automake initialisation.]) LIBTOOL= if test -f ../libtool; then coin_config_dir=.. LIBTOOL='$(SHELL) $(top_builddir)/../libtool' fi if test "x$LIBTOOL" = x; then if test -f ../../libtool; then coin_config_dir=../.. LIBTOOL='$(SHELL) $(top_builddir)/../../libtool' fi fi if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Creating libtool script (calling COIN_PROG_LIBTOOL).]) # Stuff for libtool # Check whether --enable-shared or --disable-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 --enable-fast-install or --disable-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; echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 if test "${lt_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # 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 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 fi SED=$lt_cv_path_SED echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 # Check whether --with-gnu-ld or --without-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. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&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 echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$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 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 echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 echo "${ECHO_T}$lt_cv_path_NM" >&6 NM="$lt_cv_path_NM" echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 aix4* | aix5*) 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'. lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | kfreebsd*-gnu | 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 ;; 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]) 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 ;; interix3*) # 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 Linux ELF. linux*) 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=unknown ;; 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 ;; solaris*) 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 ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac fi echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 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 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 whether --enable-libtool-lock or --disable-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:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 7438 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|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-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) 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" echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f 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 echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$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 ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) LD="${LD-ld} -64" ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" 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 echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f 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 echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #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)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF 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=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done 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=cc 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 echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f 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 echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc 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 fi # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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*) # 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; ;; 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 ;; 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 ;; *) # 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. SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done 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` ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 else echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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]*\)' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \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\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; linux*) if test "$host_cpu" = ia64; then symcode='[ABCDGIRSTW]' lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" 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 # 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 # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Try without a prefix undercore, 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. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$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=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && 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 < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_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 -f 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 echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6 else echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6 objdir=$lt_cv_objdir 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 # 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 to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' 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 \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 <&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 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 echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 <&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 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 echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAGIC_CMD=: fi fi fi ;; esac enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-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 # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi; test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= 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;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' # 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 printf "$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 printf "$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 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... lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$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:9418: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:9422: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$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= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 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*) # 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' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # 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' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; interix3*) # 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 ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; hpux*) # 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='-fPIC' ;; esac ;; *) lt_prog_compiler_pic='-fPIC' ;; 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 ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic='-qnocommon' lt_prog_compiler_wl='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # 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' ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # 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' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) 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 echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 echo "${ECHO_T}$lt_prog_compiler_pic" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext printf "$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:9686: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:9690: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 if test x"$lt_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 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 # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works=yes fi else lt_prog_compiler_static_works=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 if test x"$lt_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:9790: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:9794: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag= enable_shared_with_static_runtimes=no archive_cmds= archive_expsym_cmds= old_archive_From_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported link_all_deplibs=unknown hardcode_automatic=no module_cmds= module_expsym_cmds= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # 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_" # 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. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # 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 if test "$with_gnu_ld" = 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>/dev/null` in *\ [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 aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) 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 # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs=no ;; 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*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' 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/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' 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 ;; interix3*) 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' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= 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; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # 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; $echo \"$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' ;; esac archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; 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 -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi 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 $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' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&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. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then 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 ;; 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 ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$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 $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 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 ;; aix4* | aix5*) 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 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")) && (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].*|aix5*) 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_libdir_separator=':' link_all_deplibs=yes 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 hardcode_direct=yes 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 # 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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 echo "${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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' 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*) 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 # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32*) # 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. 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 `echo "$deplibs" | $SED -e '\''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' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs=no ;; esac fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=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* | kfreebsd*-gnu | dragonfly*) archive_cmds='$CC -shared -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 -fPIC ${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 -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${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 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 -a "$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 ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${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' ;; *) archive_cmds='$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 hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=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 $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld='-rpath $libdir' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: 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 ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no 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 ;; 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" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi 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} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${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='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -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; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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 hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${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 ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else 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' 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 linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; 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*) 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='`test -z "$SCOABSPATH" && echo ${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,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$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 fi echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6 test "$ld_shlibs" = no && can_build_shared=no # # 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 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:$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=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 echo "${ECHO_T}$archive_cmds_need_lc" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var" || \ test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existant 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_AC_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 echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6 if test "$hardcode_action" = relink; 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 striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&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" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}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" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac 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*) 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 echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; 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 ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* 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_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* 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_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" 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" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 < #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 #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=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; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && 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 echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$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\" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 < #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 #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=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; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && 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 echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$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 # Report which library types will actually be built echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&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 ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler \ CC \ LD \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_prog_compiler_no_builtin_flag \ export_dynamic_flag_spec \ thread_safe_flag_spec \ whole_archive_flag_spec \ enable_shared_with_static_runtimes \ old_archive_cmds \ old_archive_from_new_cmds \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ archive_cmds \ archive_expsym_cmds \ postinstall_cmds \ postuninstall_cmds \ old_archive_from_expsyms_cmds \ allow_undefined_flag \ no_undefined_flag \ export_symbols_cmds \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ hardcode_automatic \ module_cmds \ module_expsym_cmds \ lt_cv_prog_compiler_c_o \ exclude_expsyms \ include_expsyms; do case $var in old_archive_cmds | \ old_archive_from_new_cmds | \ archive_cmds | \ archive_expsym_cmds | \ module_cmds | \ module_expsym_cmds | \ old_archive_from_expsyms_cmds | \ export_symbols_cmds | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" { echo "$as_me:$LINENO: creating $ofile" >&5 echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 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 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # 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. # 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//" # 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 # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # 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 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler # Is the compiler the GNU C compiler? with_gcc=$GCC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # 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 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # 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 and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps # Dependencies to place after the objects being linked to create a # shared library. 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 # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # 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 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 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # 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 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_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 # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\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 EOF ;; esac # 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) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" # Check whether --with-tags or --without-tags was given. if test "${with_tags+set}" = set; then withval="$with_tags" tagnames="$withval" fi; if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi if test -z "$LTCFLAGS"; then eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 echo "$as_me: error: invalid tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} { (exit 1); exit 1; }; } fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) 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=cc 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= export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # 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= # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC 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++"} 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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # We don't want -fno-exception wen 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 or --without-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. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&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 echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$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 -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -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 "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix4* | aix5*) 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].*|aix5*) 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_libdir_separator_CXX=':' link_all_deplibs_CXX=yes 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 hardcode_direct_CXX=yes 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 # 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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 echo "${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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' 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*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' 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 ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='' link_all_deplibs_CXX=yes if test "$GXX" = yes ; then lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else 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' fi module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_CXX=no ;; esac 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 ;; freebsd[12]*) # 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* | kfreebsd*-gnu | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; 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) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${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*) hardcode_libdir_flag_spec_ld_CXX='+b $libdir' ;; *) 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_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; echo $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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${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 ;; interix3*) 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" && echo -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 -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${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=: ;; linux*) 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; echo $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*) # 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*) # Portland Group C++ compiler 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' 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; $echo \"$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=`echo $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; echo $list' ;; 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::"' ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no 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='echo' ;; osf3*) 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 # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) 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" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' 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. # # 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=`echo $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; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' 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 "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; 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. old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) 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" && echo -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' 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=`echo $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; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' 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 "\-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*) # 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 C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. We must also pass each convience library through # to the system linker between allextract/defaultextract. # The C++ compiler will combine linker options so we # cannot just pass the convience library names through # without $wl. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='echo' # 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 -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 -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 \"\-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 \"\-L\"" fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' 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. # 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. # So that behaviour is only enabled if SCOABSPATH is set to a # non-empty value in the environment. Most likely only useful for # creating official distributions of packages. # This is a hack until libtool officially supports absolute path # names for shared libraries. 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='`test -z "$SCOABSPATH" && echo ${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,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$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 echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$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... cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` for p in `eval $output_verbose_link_cmd`; do case $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 else prev= fi if test "$pre_test_object_deps_done" = no; then case $p 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 ;; *.$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 # PORTME: override above test on systems where it is broken case $host_os in interix3*) # 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= ;; solaris*) case $cc_basename in CC*) # 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. postdeps_CXX='-lCstd -lCrun' ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 # 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*) # 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' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # 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' ;; 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= ;; interix3*) # 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 IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # 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_AC_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 ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_CXX='-qnocommon' lt_prog_compiler_wl_CXX='-Wl,' ;; esac ;; 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* | kfreebsd*-gnu | 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*) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; icpc* | ecpc*) # Intel C++ lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC*) # 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' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; 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*) # 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 ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; 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 ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext printf "$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:14667: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:14671: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_CXX=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 if test x"$lt_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 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 # # 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\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_CXX=yes fi else lt_prog_compiler_static_works_CXX=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6 if test x"$lt_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_CXX=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:14771: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:14775: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # 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 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")) && (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*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no # # 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 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:$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=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else 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* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&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-existant 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_AC_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 echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 echo "${ECHO_T}$hardcode_action_CXX" >&6 if test "$hardcode_action_CXX" = relink; 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 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_CXX \ CC_CXX \ LD_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ export_dynamic_flag_spec_CXX \ thread_safe_flag_spec_CXX \ whole_archive_flag_spec_CXX \ enable_shared_with_static_runtimes_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ postinstall_cmds_CXX \ postuninstall_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ export_symbols_cmds_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ hardcode_automatic_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ lt_cv_prog_compiler_c_o_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX; do case $var in old_archive_cmds_CXX | \ old_archive_from_new_cmds_CXX | \ archive_cmds_CXX | \ archive_expsym_cmds_CXX | \ module_cmds_CXX | \ module_expsym_cmds_CXX | \ old_archive_from_expsyms_cmds_CXX | \ export_symbols_cmds_CXX | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # 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 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_CXX # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_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 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_CXX old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # 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 and install a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_CXX # Dependencies to place after the objects being linked to create a # shared library. 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 # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_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 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 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_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 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # 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 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld 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 else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # Code to be used in simple compile tests lt_simple_compile_test_code=" subroutine t\n return\n end\n" # Code to be used in simple link tests lt_simple_link_test_code=" program t\n end\n" # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${F77-"f77"} compiler=$CC compiler_F77=$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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&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 ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 GCC_F77="$G77" LD_F77="$LD" lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-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_F77='-Bstatic' fi ;; amigaos*) # 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_F77='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # 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_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; interix3*) # 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_F77=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; hpux*) # 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_F77='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_F77='-qnocommon' lt_prog_compiler_wl_F77='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # 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_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-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_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # 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:16341: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:16345: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_F77=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 if test x"$lt_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_F77=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_F77=yes fi else lt_prog_compiler_static_works_F77=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6 if test x"$lt_prog_compiler_static_works_F77" = xyes; then : else lt_prog_compiler_static_F77= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_F77=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:16445: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:16449: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_F77=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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_F77= enable_shared_with_static_runtimes_F77=no archive_cmds_F77= archive_expsym_cmds_F77= old_archive_From_new_cmds_F77= old_archive_from_expsyms_cmds_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= thread_safe_flag_spec_F77= hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_direct_F77=no hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported link_all_deplibs_F77=unknown hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= always_export_symbols_F77=no export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # 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_F77="_GLOBAL_OFFSET_TABLE_" # 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. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # 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_F77=yes if test "$with_gnu_ld" = 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_F77='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${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_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [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 aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_F77='$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_F77='-L$libdir' hardcode_minus_L_F77=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_F77=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_F77='$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_F77='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_F77=no fi ;; interix3*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${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_F77='$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_F77='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' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;; esac archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs_F77=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $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_F77=no cat <&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. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_F77=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 ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = no; then runpath_var= hardcode_libdir_flag_spec_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$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_F77=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_F77=unsupported fi ;; aix4* | aix5*) 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 if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$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].*|aix5*) 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_F77='' hardcode_direct_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes 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 hardcode_direct_F77=yes else # We have old collect2 hardcode_direct_F77=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_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= 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 # 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_F77=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_F77='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${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_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$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. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${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_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77='$convenience' archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="\$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*) archive_cmds_F77='$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_F77='-L$libdir' hardcode_minus_L_F77=yes # see comment about different semantics on the GNU ld section ld_shlibs_F77=no ;; bsdi[45]*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32*) # 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. hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=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_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_F77='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_F77=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported whole_archive_flag_spec_F77='' link_all_deplibs_F77=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_F77=no ;; esac fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; freebsd1*) ld_shlibs_F77=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_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${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_F77='$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_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$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_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared -fPIC ${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_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$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 hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_F77='+b $libdir' hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; *) hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: link_all_deplibs_F77=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; openbsd*) hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$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_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_F77='-rpath $libdir' fi hardcode_libdir_separator_F77=: ;; solaris*) no_undefined_flag_F77=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$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' fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_F77=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_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_F77='${wl}-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$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_F77='${wl}-z,text' allow_undefined_flag_F77='${wl}-z,nodefs' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 echo "${ECHO_T}$ld_shlibs_F77" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 pic_flag=$lt_prog_compiler_pic_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_F77=no else archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || \ test -n "$runpath_var_F77" || \ test "X$hardcode_automatic_F77" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_F77" != 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_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 echo "${ECHO_T}$hardcode_action_F77" >&6 if test "$hardcode_action_F77" = relink; 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 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_F77 \ CC_F77 \ LD_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_static_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ export_dynamic_flag_spec_F77 \ thread_safe_flag_spec_F77 \ whole_archive_flag_spec_F77 \ enable_shared_with_static_runtimes_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ predep_objects_F77 \ postdep_objects_F77 \ predeps_F77 \ postdeps_F77 \ compiler_lib_search_path_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ postinstall_cmds_F77 \ postuninstall_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ export_symbols_cmds_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_ld_F77 \ hardcode_libdir_separator_F77 \ hardcode_automatic_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ lt_cv_prog_compiler_c_o_F77 \ exclude_expsyms_F77 \ include_expsyms_F77; do case $var in old_archive_cmds_F77 | \ old_archive_from_new_cmds_F77 | \ archive_cmds_F77 | \ archive_expsym_cmds_F77 | \ module_cmds_F77 | \ module_expsym_cmds_F77 | \ old_archive_from_expsyms_cmds_F77 | \ export_symbols_cmds_F77 | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_F77 # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_F77 old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_F77 # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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_F77 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # 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_F77 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_F77" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o objext_GCJ=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}\n" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${GCJ-"gcj"} compiler=$CC compiler_GCJ=$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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # GCJ did not exist at the time GCC didn't implicitly link libc in. archive_cmds_need_lc_GCJ=no old_archive_cmds_GCJ=$old_archive_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... lt_prog_compiler_no_builtin_flag_GCJ= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$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:18652: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:18656: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_static_GCJ='-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_GCJ='-Bstatic' fi ;; amigaos*) # 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_GCJ='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # 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_GCJ='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_GCJ='-fno-common' ;; interix3*) # 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_GCJ=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_GCJ=-Kconform_pic fi ;; hpux*) # 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_GCJ='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_GCJ='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' else lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_GCJ='-qnocommon' lt_prog_compiler_wl_GCJ='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # 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_GCJ='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_GCJ='-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_GCJ='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_GCJ='-non_shared' ;; newsos6) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-fpic' lt_prog_compiler_static_GCJ='-Bstatic' ;; ccc*) lt_prog_compiler_wl_GCJ='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_GCJ='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; solaris*) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_GCJ='-Qoption ld ';; *) lt_prog_compiler_wl_GCJ='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_GCJ='-Qoption ld ' lt_prog_compiler_pic_GCJ='-PIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_GCJ='-Kconform_pic' lt_prog_compiler_static_GCJ='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; unicos*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_can_build_shared_GCJ=no ;; uts4*) lt_prog_compiler_pic_GCJ='-pic' lt_prog_compiler_static_GCJ='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_GCJ" # 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:18920: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:18924: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_GCJ=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in "" | " "*) ;; *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; esac else lt_prog_compiler_pic_GCJ= lt_prog_compiler_can_build_shared_GCJ=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_GCJ= ;; *) lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_GCJ=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_GCJ=yes fi else lt_prog_compiler_static_works_GCJ=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6 if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then : else lt_prog_compiler_static_GCJ= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:19024: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:19028: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_GCJ=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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_GCJ= enable_shared_with_static_runtimes_GCJ=no archive_cmds_GCJ= archive_expsym_cmds_GCJ= old_archive_From_new_cmds_GCJ= old_archive_from_expsyms_cmds_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= thread_safe_flag_spec_GCJ= hardcode_libdir_flag_spec_GCJ= hardcode_libdir_flag_spec_ld_GCJ= hardcode_libdir_separator_GCJ= hardcode_direct_GCJ=no hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=unsupported link_all_deplibs_GCJ=unknown hardcode_automatic_GCJ=no module_cmds_GCJ= module_expsym_cmds_GCJ= always_export_symbols_GCJ=no export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_GCJ= # 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_GCJ="_GLOBAL_OFFSET_TABLE_" # 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. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # 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_GCJ=yes if test "$with_gnu_ld" = 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_GCJ='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_GCJ='${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_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_GCJ= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [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 aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_GCJ=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_GCJ='$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_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_GCJ=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_GCJ=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_GCJ=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_GCJ='-L$libdir' allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=no enable_shared_with_static_runtimes_GCJ=yes export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_GCJ='$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_GCJ='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_GCJ=no fi ;; interix3*) hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${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_GCJ='$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_GCJ='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' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;; esac archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs_GCJ=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $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_GCJ=no cat <&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. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_GCJ=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 ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac ;; sunos4*) archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac if test "$ld_shlibs_GCJ" = no; then runpath_var= hardcode_libdir_flag_spec_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=yes archive_expsym_cmds_GCJ='$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_GCJ=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_GCJ=unsupported fi ;; aix4* | aix5*) 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 if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_GCJ='$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].*|aix5*) 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_GCJ='' hardcode_direct_GCJ=yes hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes 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 hardcode_direct_GCJ=yes else # We have old collect2 hardcode_direct_GCJ=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_GCJ=yes hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_libdir_separator_GCJ= 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 # 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_GCJ=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_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${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_GCJ='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_GCJ="-z nodefs" archive_expsym_cmds_GCJ="\$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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${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_GCJ=' ${wl}-bernotok' allow_undefined_flag_GCJ=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_GCJ='$convenience' archive_cmds_need_lc_GCJ=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_GCJ="\$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*) archive_cmds_GCJ='$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_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # see comment about different semantics on the GNU ld section ld_shlibs_GCJ=no ;; bsdi[45]*) export_dynamic_flag_spec_GCJ=-rdynamic ;; cygwin* | mingw* | pw32*) # 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. hardcode_libdir_flag_spec_GCJ=' ' allow_undefined_flag_GCJ=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_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_GCJ='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_GCJ=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_GCJ=no hardcode_direct_GCJ=no hardcode_automatic_GCJ=yes hardcode_shlibpath_var_GCJ=unsupported whole_archive_flag_spec_GCJ='' link_all_deplibs_GCJ=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_GCJ=no ;; esac fi ;; dgux*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; freebsd1*) ld_shlibs_GCJ=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_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${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_GCJ='$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_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$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_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -shared -fPIC ${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_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$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 hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no ;; *) hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: link_all_deplibs_GCJ=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; newsos6) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_shlibpath_var_GCJ=no ;; openbsd*) hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' ;; *) archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes allow_undefined_flag_GCJ=unsupported archive_cmds_GCJ='$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_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_GCJ='-rpath $libdir' fi hardcode_libdir_separator_GCJ=: ;; solaris*) no_undefined_flag_GCJ=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$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' fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_shlibpath_var_GCJ=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_GCJ=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_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; sysv4) case $host_vendor in sni) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_GCJ='$CC -r -o $output$reload_objs' hardcode_direct_GCJ=no ;; motorola) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv4.3*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_GCJ=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_GCJ='${wl}-z,text' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$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_GCJ='${wl}-z,text' allow_undefined_flag_GCJ='${wl}-z,nodefs' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; *) ld_shlibs_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 echo "${ECHO_T}$ld_shlibs_GCJ" >&6 test "$ld_shlibs_GCJ" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_GCJ" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_GCJ=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_GCJ 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_GCJ pic_flag=$lt_prog_compiler_pic_GCJ compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_GCJ=no else archive_cmds_need_lc_GCJ=yes fi allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var_GCJ" || \ test "X$hardcode_automatic_GCJ" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_GCJ" != 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_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && test "$hardcode_minus_L_GCJ" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_GCJ=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_GCJ=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_GCJ=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 echo "${ECHO_T}$hardcode_action_GCJ" >&6 if test "$hardcode_action_GCJ" = relink; 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 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_GCJ \ CC_GCJ \ LD_GCJ \ lt_prog_compiler_wl_GCJ \ lt_prog_compiler_pic_GCJ \ lt_prog_compiler_static_GCJ \ lt_prog_compiler_no_builtin_flag_GCJ \ export_dynamic_flag_spec_GCJ \ thread_safe_flag_spec_GCJ \ whole_archive_flag_spec_GCJ \ enable_shared_with_static_runtimes_GCJ \ old_archive_cmds_GCJ \ old_archive_from_new_cmds_GCJ \ predep_objects_GCJ \ postdep_objects_GCJ \ predeps_GCJ \ postdeps_GCJ \ compiler_lib_search_path_GCJ \ archive_cmds_GCJ \ archive_expsym_cmds_GCJ \ postinstall_cmds_GCJ \ postuninstall_cmds_GCJ \ old_archive_from_expsyms_cmds_GCJ \ allow_undefined_flag_GCJ \ no_undefined_flag_GCJ \ export_symbols_cmds_GCJ \ hardcode_libdir_flag_spec_GCJ \ hardcode_libdir_flag_spec_ld_GCJ \ hardcode_libdir_separator_GCJ \ hardcode_automatic_GCJ \ module_cmds_GCJ \ module_expsym_cmds_GCJ \ lt_cv_prog_compiler_c_o_GCJ \ exclude_expsyms_GCJ \ include_expsyms_GCJ; do case $var in old_archive_cmds_GCJ | \ old_archive_from_new_cmds_GCJ | \ archive_cmds_GCJ | \ archive_expsym_cmds_GCJ | \ module_cmds_GCJ | \ module_expsym_cmds_GCJ | \ old_archive_from_expsyms_cmds_GCJ | \ export_symbols_cmds_GCJ | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_GCJ # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_GCJ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_GCJ # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_GCJ # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_GCJ pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_GCJ # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_GCJ old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_GCJ archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_GCJ module_expsym_cmds=$lt_module_expsym_cmds_GCJ # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_GCJ # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_GCJ # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_GCJ # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_GCJ # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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_GCJ # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_GCJ # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_GCJ # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ # 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_GCJ # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_GCJ # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_GCJ" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_GCJ # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_GCJ # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_GCJ # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_GCJ # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" else tagname="" fi ;; RC) # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' # 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. # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${RC-"windres"} compiler=$CC compiler_RC=$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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` lt_cv_prog_compiler_c_o_RC=yes # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_RC \ CC_RC \ LD_RC \ lt_prog_compiler_wl_RC \ lt_prog_compiler_pic_RC \ lt_prog_compiler_static_RC \ lt_prog_compiler_no_builtin_flag_RC \ export_dynamic_flag_spec_RC \ thread_safe_flag_spec_RC \ whole_archive_flag_spec_RC \ enable_shared_with_static_runtimes_RC \ old_archive_cmds_RC \ old_archive_from_new_cmds_RC \ predep_objects_RC \ postdep_objects_RC \ predeps_RC \ postdeps_RC \ compiler_lib_search_path_RC \ archive_cmds_RC \ archive_expsym_cmds_RC \ postinstall_cmds_RC \ postuninstall_cmds_RC \ old_archive_from_expsyms_cmds_RC \ allow_undefined_flag_RC \ no_undefined_flag_RC \ export_symbols_cmds_RC \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_flag_spec_ld_RC \ hardcode_libdir_separator_RC \ hardcode_automatic_RC \ module_cmds_RC \ module_expsym_cmds_RC \ lt_cv_prog_compiler_c_o_RC \ exclude_expsyms_RC \ include_expsyms_RC; do case $var in old_archive_cmds_RC | \ old_archive_from_new_cmds_RC | \ archive_cmds_RC | \ archive_expsym_cmds_RC | \ module_cmds_RC | \ module_expsym_cmds_RC | \ old_archive_from_expsyms_cmds_RC | \ export_symbols_cmds_RC | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU C compiler? with_gcc=$GCC_RC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_RC # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_RC old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_RC # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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_RC # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_RC # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # 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_RC # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_RC" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" ;; *) { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 echo "$as_me: error: Unsupported tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 echo "$as_me: error: unable to update list of available tagged configurations." >&2;} { (exit 1); exit 1; }; } fi fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion # No longer needed now that CPPFLAGS is correctly set -- lh, 061214 -- # AC_REQUIRE([AC_COIN_DLFCN_H]) # NEW: If libtool exists in the directory higher up, we use that one # instead of creating a new one # It turns out that the code for AC_PROG_LIBTOOL is somehow AC_REQUIRED # out in front of this macro body. You'll notice that LIBTOOL is already # defined here. We'll have to count on this macro not being called if libtool # already exists, or at least move the libtool fixes outside the conditional. # AC_MSG_NOTICE([Entering coin_prog_libtool, LIBTOOL = "$LIBTOOL".]) # This test is therefore removed. -- lh, 061214 -- # if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Calling PROG_LIBTOOL.]) # AC_MSG_NOTICE([Finished PROG_LIBTOOL.]) { echo "$as_me:$LINENO: Build is \"$build\"." >&5 echo "$as_me: Build is \"$build\"." >&6;} mydos2unix='| dos2unix' case $build in *-mingw*) CYGPATH_W=echo ;; esac case $build in # Here we need to check if -m32 is specified. If so, we need to correct # sys_lib_search_path_spec *-cygwin* | *-mingw*) case "$CXX" in clang* ) # we assume that libtool patches for CLANG are the same as for GNU compiler - correct??? { echo "$as_me:$LINENO: Applying patches to libtool for CLANG compiler" >&5 echo "$as_me: Applying patches to libtool for CLANG 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 ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Applying patches to libtool for cl compiler" >&5 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 \\$('"$CYGPATH_W \$1"') '"$mydos2unix"' | xargs echo); echo \\$bla; for i in \\$bla; do lib -nologo -extract:\\$i \\$('"$CYGPATH_W \$1"'); done%' \ -e 's%$AR t "$f_ex_an_ar_oldlib"%lib -nologo -list \$('"$CYGPATH_W \$1"') '"$mydos2unix"'%' \ -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 ;; *) { echo "$as_me:$LINENO: Applying patches to libtool for GNU compiler" >&5 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 ;; esac mv conftest.bla libtool chmod 755 libtool ;; *x86_64-*) if test "$GCC" = yes && (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm32' >& /dev/null); then { echo "$as_me:$LINENO: Applying patches to libtool for 32bit compilation" >&5 echo "$as_me: Applying patches to libtool for 32bit compilation" >&6;} sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="/lib /usr/lib"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi ;; *-solaris*) if test "$GCC" = yes && \ (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm64' >/dev/null 2>&1) ; then hdwisa=`isainfo | sed -e 's/\([^ ]*\) .*$/\1/'` if `$EGREP 'sys_lib_search_path_spec=' libtool | $EGREP -v $hdwisa >/dev/null 2>&1` ; then { echo "$as_me:$LINENO: Applying patches to libtool for 64-bit GCC compilation" >&5 echo "$as_me: Applying patches to libtool for 64-bit GCC compilation" >&6;} fixlibtmp=`$CC -m64 -print-search-dirs | $EGREP '^libraries:'` fixlibtmp=`echo $fixlibtmp | sed -e 's/libraries: =//' -e 's/:/ /g'` if `echo "$fixlibtmp" | $EGREP -v $hdwisa >/dev/null 2>&1` ; then # AC_MSG_NOTICE(Compensating for broken gcc) for lib in $fixlibtmp ; do if test -d "${lib}${hdwisa}" ; then syslibpath64="$syslibpath64 ${lib}${hdwisa}/" fi done syslibpath64="${syslibpath64} ${fixlibtmp}" else syslibpath64="$fixlibtmp" fi sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="'"$syslibpath64"'"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi # AC_MSG_NOTICE(Result is ) # $EGREP 'sys_lib_search_path_spec=' libtool fi ;; # Cygwin. Ah, cygwin. Too big and ugly to inline; see the macro. *-darwin*) { echo "$as_me:$LINENO: Applying patches to libtool for Darwin" >&5 echo "$as_me: Applying patches to libtool for Darwin" >&6;} sed -e 's/verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"/verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"/' \ -e 's/ -dynamiclib / -dynamiclib -single_module /g' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; esac # This fi matches the commented `if test "x$LIBTOOL" = x;' up at the head of # the macro. -- lh, 061214 -- # fi # AC_MSG_NOTICE([End libtool initialisation.]) # AC_MSG_NOTICE([Finished COIN_PROG_LIBTOOL.]) # set RPATH_FLAGS to the compiler link flags required to hardcode location # of the shared objects RPATH_FLAGS= if test $enable_shared = yes; then case $build in *-linux-*) if test "$GXX" = "yes"; then RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -Wl,--rpath -Wl,$dir" done fi ;; *-darwin*) RPATH_FLAGS=nothing ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) RPATH_FLAGS=nothing ;; esac ;; *-hp-*) RPATH_FLAGS=nothing ;; *-mingw32) RPATH_FLAGS=nothing ;; *-*-solaris*) RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -R$dir" done esac if test "$RPATH_FLAGS" = ""; then { echo "$as_me:$LINENO: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&5 echo "$as_me: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&2;} fi if test "$RPATH_FLAGS" = "nothing"; then RPATH_FLAGS= fi fi else { echo "$as_me:$LINENO: Using libtool script in directory $coin_config_dir" >&5 echo "$as_me: Using libtool script in directory $coin_config_dir" >&6;} # get all missing information from the config.log file # output variables and defines as_save_IFS=$IFS IFS=' ' for oneline in `cat $coin_config_dir/config.status`; do case "$oneline" in # First some automake conditionals s,@am__fastdep* | s,@AR@* | s,@CPP@* | s,@CPPFLAGS@* | s,@CXXCPP@* | \ s,@RANLIB@* | s,@STRIP@* | s,@ac_ct_AR@* | s,@ac_ct_RANLIB@* | \ s,@ac_ct_STRIP@* | s,@host* | s,@LN_S@* | s,@RPATH_FLAGS@* | \ s,@ac_c_preproc_warn_flag@* | s,@ac_cxx_preproc_warn_flag@* ) command=`echo $oneline | sed -e 's/^s,@//' -e 's/@,/="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; s,@DEFS@* ) command=`echo $oneline | sed -e 's/^s,@DEFS@,/defsline="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; esac done IFS=$as_save_IFS # And some defines (assuming here that the packages base dir # doesn't have a config.h file for word in $defsline; do # echo word $word case $word in -DHAVE_[A-Z_]*_H=1 | -DSTDC_HEADERS=1 ) i=`echo $word | sed -e 's/-D/#define /' -e 's/=/ /'` # echo dd $i echo $i >>confdefs.h ;; esac done fi # AC_MSG_NOTICE([End of INIT_AUTO_TOOLS.]) # Check whether --enable-dependency-linking or --disable-dependency-linking was given. if test "${enable_dependency_linking+set}" = set; then enableval="$enable_dependency_linking" dependency_linking="$enableval" else dependency_linking=auto fi; if test "$dependency_linking" = auto; then # On Cygwin and AIX, building DLLs doesn't work dependency_linking=no if test x"$coin_disable_shared" = xno; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) dependency_linking=yes ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) dependency_linking=no ;; *gcc*) dependency_linking=yes ;; *) dependency_linking=yes ;; esac ;; *) dependency_linking=yes ;; esac fi fi if test "$dependency_linking" = yes ; then LT_LDFLAGS="-no-undefined" else LT_LDFLAGS= fi if test "$dependency_linking" = yes; then DEPENDENCY_LINKING_TRUE= DEPENDENCY_LINKING_FALSE='#' else DEPENDENCY_LINKING_TRUE='#' DEPENDENCY_LINKING_FALSE= fi # Check if we want to set the library version echo "$as_me:$LINENO: checking if library version is set" >&5 echo $ECHO_N "checking if library version is set... $ECHO_C" >&6 if test x"$coin_libversion" != x; then LT_LDFLAGS="$LT_LDFLAGS -version-info $coin_libversion" echo "$as_me:$LINENO: result: $coin_libversion" >&5 echo "${ECHO_T}$coin_libversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi #END } ############################################################################ # Stuff that we need for finite and isnan # ############################################################################ ac_ext=cc 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_ext=cc 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 x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([cmath],[],[],[$hdr]) for ac_header in cmath do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_cmath" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([math.h],[],[],[$hdr]) for ac_header in math.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done fi ac_ext=cc 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_ext=cc 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 x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([cfloat],[],[],[$hdr]) for ac_header in cfloat do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_cfloat" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([float.h],[],[],[$hdr]) for ac_header in float.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done fi ac_ext=cc 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_ext=cc 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 x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([cieeefp],[],[],[$hdr]) for ac_header in cieeefp do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_cieeefp" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([ieeefp.h],[],[],[$hdr]) for ac_header in ieeefp.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done fi ac_ext=cc 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 COIN_C_FINITE= echo "$as_me:$LINENO: checking whether isfinite is declared" >&5 echo $ECHO_N "checking whether isfinite is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_isfinite+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef isfinite char *p = (char *) isfinite; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl_isfinite=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_isfinite=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_isfinite" >&5 echo "${ECHO_T}$ac_cv_have_decl_isfinite" >&6 if test $ac_cv_have_decl_isfinite = yes; then COIN_C_FINITE=isfinite fi if test -z "$COIN_C_FINITE"; then echo "$as_me:$LINENO: checking whether finite is declared" >&5 echo $ECHO_N "checking whether finite is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_finite+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef finite char *p = (char *) finite; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl_finite=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_finite=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_finite" >&5 echo "${ECHO_T}$ac_cv_have_decl_finite" >&6 if test $ac_cv_have_decl_finite = yes; then COIN_C_FINITE=finite fi if test -z "$COIN_C_FINITE"; then echo "$as_me:$LINENO: checking whether _finite is declared" >&5 echo $ECHO_N "checking whether _finite is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl__finite+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef _finite char *p = (char *) _finite; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl__finite=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl__finite=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl__finite" >&5 echo "${ECHO_T}$ac_cv_have_decl__finite" >&6 if test $ac_cv_have_decl__finite = yes; then COIN_C_FINITE=_finite fi fi fi if test -z "$COIN_C_FINITE"; then { echo "$as_me:$LINENO: WARNING: Cannot find C-function for checking Inf." >&5 echo "$as_me: WARNING: Cannot find C-function for checking Inf." >&2;} else cat >>confdefs.h <<_ACEOF #define COIN_C_FINITE $COIN_C_FINITE _ACEOF 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 ac_ext=cc 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_ext=cc 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 x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([cmath],[],[],[$hdr]) for ac_header in cmath do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_cmath" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([math.h],[],[],[$hdr]) for ac_header in math.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done fi ac_ext=cc 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_ext=cc 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 x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([cfloat],[],[],[$hdr]) for ac_header in cfloat do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_cfloat" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([float.h],[],[],[$hdr]) for ac_header in float.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done fi ac_ext=cc 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_ext=cc 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 x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([cieeefp],[],[],[$hdr]) for ac_header in cieeefp do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_cieeefp" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([ieeefp.h],[],[],[$hdr]) for ac_header in ieeefp.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done fi ac_ext=cc 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 COIN_C_ISNAN= echo "$as_me:$LINENO: checking whether isnan is declared" >&5 echo $ECHO_N "checking whether isnan is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_isnan+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef isnan char *p = (char *) isnan; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl_isnan=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_isnan=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_isnan" >&5 echo "${ECHO_T}$ac_cv_have_decl_isnan" >&6 if test $ac_cv_have_decl_isnan = yes; then COIN_C_ISNAN=isnan fi # It appears that for some systems (e.g., Mac OSX), cmath will provide only # std::isnan, and bare isnan will be unavailable. Typically we need a parameter # in the test to allow C++ to do overload resolution. if test -z "$COIN_C_ISNAN"; then echo "$as_me:$LINENO: checking whether std::isnan(42.42) is declared" >&5 echo $ECHO_N "checking whether std::isnan(42.42) is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_std__isnan_42_42_+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef std::isnan(42.42) char *p = (char *) std::isnan(42.42); #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl_std__isnan_42_42_=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_std__isnan_42_42_=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_std__isnan_42_42_" >&5 echo "${ECHO_T}$ac_cv_have_decl_std__isnan_42_42_" >&6 if test $ac_cv_have_decl_std__isnan_42_42_ = yes; then COIN_C_ISNAN=std::isnan fi fi if test -z "$COIN_C_ISNAN"; then echo "$as_me:$LINENO: checking whether _isnan is declared" >&5 echo $ECHO_N "checking whether _isnan is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl__isnan+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef _isnan char *p = (char *) _isnan; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl__isnan=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl__isnan=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl__isnan" >&5 echo "${ECHO_T}$ac_cv_have_decl__isnan" >&6 if test $ac_cv_have_decl__isnan = yes; then COIN_C_ISNAN=_isnan fi fi if test -z "$COIN_C_ISNAN"; then echo "$as_me:$LINENO: checking whether isnand is declared" >&5 echo $ECHO_N "checking whether isnand is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_isnand+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef HAVE_CMATH # include #else # ifdef HAVE_MATH_H # include # endif #endif #ifdef HAVE_CFLOAT # include #else # ifdef HAVE_FLOAT_H # include # endif #endif #ifdef HAVE_CIEEEFP # include #else # ifdef HAVE_IEEEFP_H # include # endif #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef isnand char *p = (char *) isnand; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl_isnand=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_isnand=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_isnand" >&5 echo "${ECHO_T}$ac_cv_have_decl_isnand" >&6 if test $ac_cv_have_decl_isnand = yes; then COIN_C_ISNAN=isnand fi fi if test -z "$COIN_C_ISNAN"; then { echo "$as_me:$LINENO: WARNING: Cannot find C-function for checking NaN." >&5 echo "$as_me: WARNING: Cannot find C-function for checking NaN." >&2;} else cat >>confdefs.h <<_ACEOF #define COIN_C_ISNAN $COIN_C_ISNAN _ACEOF 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 ############################################################################# # Thread configuration # ############################################################################# # Define new options: # --enable-coinutils-threads # --enable-coinutils-mempool-override-new # --enable-coinutils-mempool-maxpooled ac_ext=cc 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 # Check whether --enable-coinutils-threads or --disable-coinutils-threads was given. if test "${enable_coinutils_threads+set}" = set; then enableval="$enable_coinutils_threads" fi; if test "$enable_coinutils_threads" = yes; then # Define the preprocessor macro cat >>confdefs.h <<\_ACEOF #define COINUTILS_PTHREADS 1 _ACEOF echo "$as_me:$LINENO: checking for clock_gettime in -lrt" >&5 echo $ECHO_N "checking for clock_gettime in -lrt... $ECHO_C" >&6 if test "${ac_cv_lib_rt_clock_gettime+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char clock_gettime (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { clock_gettime (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_rt_clock_gettime=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_rt_clock_gettime=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_rt_clock_gettime" >&5 echo "${ECHO_T}$ac_cv_lib_rt_clock_gettime" >&6 if test $ac_cv_lib_rt_clock_gettime = yes; then COINUTILSLIB_LIBS="-lrt $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lrt $COINUTILSLIB_PCLIBS" else { { echo "$as_me:$LINENO: error: --enable-coinutils-threads selected, but -lrt unavailable" >&5 echo "$as_me: error: --enable-coinutils-threads selected, but -lrt unavailable" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5 echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6 if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char pthread_create (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { pthread_create (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_pthread_pthread_create=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_pthread_pthread_create=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5 echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6 if test $ac_cv_lib_pthread_pthread_create = yes; then COINUTILSLIB_LIBS="-lpthread $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lpthread $COINUTILSLIB_PCLIBS" else { { echo "$as_me:$LINENO: error: --enable-coinutils-threads selected, but -lpthreads unavailable" >&5 echo "$as_me: error: --enable-coinutils-threads selected, but -lpthreads unavailable" >&2;} { (exit 1); exit 1; }; } fi fi # Check whether --enable-coinutils-mempool-override-new or --disable-coinutils-mempool-override-new was given. if test "${enable_coinutils_mempool_override_new+set}" = set; then enableval="$enable_coinutils_mempool_override_new" fi; if test "$enable_coinutils_mempool_override_new" = yes; then cat >>confdefs.h <<\_ACEOF #define COINUTILS_MEMPOOL_OVERRIDE_NEW 1 _ACEOF fi # Check whether --enable-coinutils-mempool-maxpooled or --disable-coinutils-mempool-maxpooled was given. if test "${enable_coinutils_mempool_maxpooled+set}" = set; then enableval="$enable_coinutils_mempool_maxpooled" fi; if test "$enable_coinutils_mempool_maxpooled" = yes; then cat >>confdefs.h <<\_ACEOF #define COINUTILS_MEMPOOL_MAXPOOLED 4096 _ACEOF elif test "$enable_coinutils_mempool_maxpooled" = no; then cat >>confdefs.h <<\_ACEOF #define COINUTILS_MEMPOOL_MAXPOOLED -1 _ACEOF elif test x"$enable_coinutils_mempool_maxpooled" = x; then cat >>confdefs.h <<\_ACEOF #define COINUTILS_MEMPOOL_MAXPOOLED -1 _ACEOF else cat >>confdefs.h <<_ACEOF #define COINUTILS_MEMPOOL_MAXPOOLED ${enable_coinutils_mempool_maxpooled} _ACEOF fi ############################################################################# # Finding certain integer types # ############################################################################# ac_ext=cc 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 x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([cinttypes],[],[],[$hdr]) for ac_header in cinttypes do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_cinttypes" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([inttypes.h],[],[],[$hdr]) for ac_header in inttypes.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done fi ac_ext=cc 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_ext=cc 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 x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([cstdint],[],[],[$hdr]) for ac_header in cstdint do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_cstdint" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([stdint.h],[],[],[$hdr]) for ac_header in stdint.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done fi ac_ext=cc 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 ##### 64bit Integer types # The problem here is that you can't extend `int64_t' to `unsigned int64_t'. # So we need distinct CoinInt64 and CoinUInt64. It should be safe to assume # uint64_t, given int64_t. CoinInt64= CoinUInt64= # try int64_t echo "$as_me:$LINENO: checking for int64_t" >&5 echo $ECHO_N "checking for int64_t... $ECHO_C" >&6 if test "${ac_cv_type_int64_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef HAVE_CINTTYPES # include #else # ifdef HAVE_INTTYPES_H # include # endif #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((int64_t *) 0) return 0; if (sizeof (int64_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_int64_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int64_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int64_t" >&5 echo "${ECHO_T}$ac_cv_type_int64_t" >&6 if test $ac_cv_type_int64_t = yes; then CoinInt64=int64_t ; CoinUInt64=uint64_t fi # We need to use the C compiler in the AC_CHECK_SIZEOF since otherwise the # MSCV compiler complains about redefinition of "exit". ac_cv_sizeof_ # sometimes adds `^M' to the number, hence the check for `8?'. 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 # try long long if test x"$CoinInt64" = x; then echo "$as_me:$LINENO: checking for long long" >&5 echo $ECHO_N "checking for long long... $ECHO_C" >&6 if test "${ac_cv_type_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((long long *) 0) return 0; if (sizeof (long long)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 echo "${ECHO_T}$ac_cv_type_long_long" >&6 echo "$as_me:$LINENO: checking size of long long" >&5 echo $ECHO_N "checking size of long long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long_long" = yes; then # The cast to unsigned long 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. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (long long)); } unsigned long ulongval () { return (long) (sizeof (long long)); } #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF case $ac_cv_sizeof_long_long in 8 | 8?) CoinInt64="long long" CoinUInt64="unsigned long long" ;; esac fi #try long if test x"$CoinInt64" = x; then echo "$as_me:$LINENO: checking for long" >&5 echo $ECHO_N "checking for long... $ECHO_C" >&6 if test "${ac_cv_type_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((long *) 0) return 0; if (sizeof (long)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 echo "${ECHO_T}$ac_cv_type_long" >&6 echo "$as_me:$LINENO: checking size of long" >&5 echo $ECHO_N "checking size of long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then # The cast to unsigned long 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. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (long)); } unsigned long ulongval () { return (long) (sizeof (long)); } #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF case $ac_cv_sizeof_long in 8 | 8?) CoinInt64="long" CoinUInt64="unsigned long" ;; esac fi #try int if test x"$CoinInt64" = x; then echo "$as_me:$LINENO: checking for int" >&5 echo $ECHO_N "checking for int... $ECHO_C" >&6 if test "${ac_cv_type_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((int *) 0) return 0; if (sizeof (int)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_int=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 echo "${ECHO_T}$ac_cv_type_int" >&6 echo "$as_me:$LINENO: checking size of int" >&5 echo $ECHO_N "checking size of int... $ECHO_C" >&6 if test "${ac_cv_sizeof_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then # The cast to unsigned long 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. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_int=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (int)); } unsigned long ulongval () { return (long) (sizeof (int)); } #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (int))) < 0) { long i = longval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_int=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_int=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF case $ac_cv_sizeof_int in 8 | 8?) CoinInt64="int" CoinUInt64="unsigned int" ;; esac fi ac_ext=cc 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 x"$CoinInt64" = x; then { { echo "$as_me:$LINENO: error: Cannot find integer type with 64 bits" >&5 echo "$as_me: error: Cannot find integer type with 64 bits" >&2;} { (exit 1); exit 1; }; } fi cat >>confdefs.h <<_ACEOF #define COIN_INT64_T $CoinInt64 _ACEOF cat >>confdefs.h <<_ACEOF #define COIN_UINT64_T $CoinInt64 _ACEOF ##### Integer type for Pointer CoinIntPtr= # try intptr_t echo "$as_me:$LINENO: checking for intptr_t" >&5 echo $ECHO_N "checking for intptr_t... $ECHO_C" >&6 if test "${ac_cv_type_intptr_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef HAVE_CINTTYPES # include #else # ifdef HAVE_INTTYPES_H # include # endif #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((intptr_t *) 0) return 0; if (sizeof (intptr_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_intptr_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_intptr_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_intptr_t" >&5 echo "${ECHO_T}$ac_cv_type_intptr_t" >&6 if test $ac_cv_type_intptr_t = yes; then CoinIntPtr=intptr_t 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 # try long long if test x"$CoinIntPtr" = x; then echo "$as_me:$LINENO: checking for int *" >&5 echo $ECHO_N "checking for int *... $ECHO_C" >&6 if test "${ac_cv_type_int_p+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((int * *) 0) return 0; if (sizeof (int *)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_int_p=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int_p=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int_p" >&5 echo "${ECHO_T}$ac_cv_type_int_p" >&6 echo "$as_me:$LINENO: checking size of int *" >&5 echo $ECHO_N "checking size of int *... $ECHO_C" >&6 if test "${ac_cv_sizeof_int_p+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int_p" = yes; then # The cast to unsigned long 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. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int *))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int *))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int *))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int *))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int *))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_int_p=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int *), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int *), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (int *)); } unsigned long ulongval () { return (long) (sizeof (int *)); } #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (int *))) < 0) { long i = longval (); if (i != ((long) (sizeof (int *)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (int *)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_int_p=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (int *), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int *), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_int_p=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_int_p" >&5 echo "${ECHO_T}$ac_cv_sizeof_int_p" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT_P $ac_cv_sizeof_int_p _ACEOF echo "$as_me:$LINENO: checking for long long" >&5 echo $ECHO_N "checking for long long... $ECHO_C" >&6 if test "${ac_cv_type_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((long long *) 0) return 0; if (sizeof (long long)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 echo "${ECHO_T}$ac_cv_type_long_long" >&6 echo "$as_me:$LINENO: checking size of long long" >&5 echo $ECHO_N "checking size of long long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long_long" = yes; then # The cast to unsigned long 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. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (long long)); } unsigned long ulongval () { return (long) (sizeof (long long)); } #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF if test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_int_p"; then CoinIntPtr="long long" fi fi # try long if test x"$CoinIntPtr" = x; then echo "$as_me:$LINENO: checking for long" >&5 echo $ECHO_N "checking for long... $ECHO_C" >&6 if test "${ac_cv_type_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((long *) 0) return 0; if (sizeof (long)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 echo "${ECHO_T}$ac_cv_type_long" >&6 echo "$as_me:$LINENO: checking size of long" >&5 echo $ECHO_N "checking size of long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then # The cast to unsigned long 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. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (long)); } unsigned long ulongval () { return (long) (sizeof (long)); } #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF if test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_int_p"; then CoinIntPtr="long" fi fi # try int if test x"$CoinIntPtr" = x; then echo "$as_me:$LINENO: checking for int" >&5 echo $ECHO_N "checking for int... $ECHO_C" >&6 if test "${ac_cv_type_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((int *) 0) return 0; if (sizeof (int)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_int=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 echo "${ECHO_T}$ac_cv_type_int" >&6 echo "$as_me:$LINENO: checking size of int" >&5 echo $ECHO_N "checking size of int... $ECHO_C" >&6 if test "${ac_cv_sizeof_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then # The cast to unsigned long 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. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_int=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (int)); } unsigned long ulongval () { return (long) (sizeof (int)); } #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (int))) < 0) { long i = longval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_int=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_int=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF if test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_int_p"; then CoinIntPtr="int" fi fi ac_ext=cc 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 x"$CoinIntPtr" = x; then { { echo "$as_me:$LINENO: error: Cannot find integer type capturing pointer" >&5 echo "$as_me: error: Cannot find integer type capturing pointer" >&2;} { (exit 1); exit 1; }; } fi cat >>confdefs.h <<_ACEOF #define COIN_INTPTR_T $CoinIntPtr _ACEOF if test "x$ac_cv_header_stdint_h" = xyes ; then cat >>confdefs.h <<\_ACEOF #define COINUTILS_HAS_STDINT_H 1 _ACEOF fi if test "x$ac_cv_header_cstdint" = xyes ; then cat >>confdefs.h <<\_ACEOF #define COINUTILS_HAS_CSTDINT 1 _ACEOF fi ############################################################################# # Check whether we have windows.h # ############################################################################# for ac_header in windows.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ############################################################################# # Check whether we have endian.h # ############################################################################# for ac_header in endian.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ############################################################################# # COIN-OR components # ############################################################################# if test $coin_cc_is_cl != true ; then COINUTILSLIB_LIBS="-lm $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lm $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS_INSTALLED="-lm $COINUTILSLIB_LIBS_INSTALLED" fi # Check whether --enable-pkg-config or --disable-pkg-config was given. if test "${enable_pkg_config+set}" = set; then enableval="$enable_pkg_config" use_pkgconfig="$enableval" else if test x$coin_cc_is_cl = xtrue; then use_pkgconfig=no else use_pkgconfig=yes fi fi; if test $use_pkgconfig = yes ; then if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="${ac_tool_prefix}pkg-config" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_PKG_CONFIG"; then ac_ct_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_PKG_CONFIG"; then ac_cv_prog_ac_ct_PKG_CONFIG="$ac_ct_PKG_CONFIG" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_PKG_CONFIG="pkg-config" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_PKG_CONFIG=$ac_cv_prog_ac_ct_PKG_CONFIG if test -n "$ac_ct_PKG_CONFIG"; then echo "$as_me:$LINENO: result: $ac_ct_PKG_CONFIG" >&5 echo "${ECHO_T}$ac_ct_PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi PKG_CONFIG=$ac_ct_PKG_CONFIG else PKG_CONFIG="$ac_cv_prog_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.16.0 echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6 if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 PKG_CONFIG="" fi fi # check if pkg-config supports the short-errors flag if test -n "$PKG_CONFIG" && \ $PKG_CONFIG --atleast-pkgconfig-version 0.20; then pkg_short_errors=" --short-errors " else pkg_short_errors="" fi fi if test -n "$PKG_CONFIG"; then COIN_HAS_PKGCONFIG_TRUE= COIN_HAS_PKGCONFIG_FALSE='#' else COIN_HAS_PKGCONFIG_TRUE='#' COIN_HAS_PKGCONFIG_FALSE= fi # assemble pkg-config search path for installed projects COIN_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" # let's assume that when installing into $prefix, then the user may have installed some other coin projects there before, so it's worth to have a look into there # best would actually to use ${libdir}, since .pc files get installed into ${libdir}/pkgconfig, # unfortunately, ${libdir} expands to ${exec_prefix}/lib and ${exec_prefix} to ${prefix}... if test "x${prefix}" = xNONE ; then COIN_PKG_CONFIG_PATH="${ac_default_prefix}/lib64/pkgconfig:${ac_default_prefix}/lib/pkgconfig:${ac_default_prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" else COIN_PKG_CONFIG_PATH="${prefix}/lib64/pkgconfig:${prefix}/lib/pkgconfig:${prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" fi # Check whether --with-coin-instdir or --without-coin-instdir was given. if test "${with_coin_instdir+set}" = set; then withval="$with_coin_instdir" if test -d "$withval"; then : ; else { { echo "$as_me:$LINENO: error: argument for --with-coin-instdir not a directory" >&5 echo "$as_me: error: argument for --with-coin-instdir not a directory" >&2;} { (exit 1); exit 1; }; } fi COIN_PKG_CONFIG_PATH="$withval/lib/pkgconfig:$withval/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" fi; # assemble additional pkg-config search paths for uninstalled projects if test x$coin_projectdir = xyes ; then # if we are in a project setup, then in a classic setup, we want to find uninstalled projects # their (relative) location is written to coin_subdirs.txt by the configure in the project base directory # unfortunately, if the user set prefix, then we do not know where the project base directory is located # but it is likely to be either .. (if we are a usual coin project) or ../.. (if we are a unusual coin project like ThirdParty or Data) COIN_PKG_CONFIG_PATH_UNINSTALLED= if test -f ../coin_subdirs.txt ; then for i in `cat ../coin_subdirs.txt` ; do if test -d ../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi if test -f ../../coin_subdirs.txt ; then for i in `cat ../../coin_subdirs.txt` ; do if test -d ../../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi fi if test -n "$PKG_CONFIG" && test x$coin_cc_is_cl = xtrue; then { echo "$as_me:$LINENO: WARNING: Using pkg-config together with MS or Intel Compiler on Windows is not support by example Makefiles. Consider using --disable-pkg-config." >&5 echo "$as_me: WARNING: Using pkg-config together with MS or Intel Compiler on Windows is not support by example Makefiles. Consider using --disable-pkg-config." >&2;} fi # Check whether --with-blas or --without-blas was given. if test "${with_blas+set}" = set; then withval="$with_blas" use_blas="$withval" else use_blas= fi; # if user specified --with-blas-lib, then we should give COIN_CHECK_PACKAGE # preference # Check whether --with-blas-lib or --without-blas-lib was given. if test "${with_blas_lib+set}" = set; then withval="$with_blas_lib" use_blas=BUILD fi; # Check if user supplied option makes sense if test x"$use_blas" != x; then if test "$use_blas" = "BUILD"; then # we come to this later : elif test "$use_blas" != "no"; then coin_save_LIBS="$LIBS" LIBS="$use_blas $LIBS" if test "$F77" != unavailable ; then coin_need_flibs=no echo "$as_me:$LINENO: checking whether user supplied BLASLIB=\"$use_blas\" works" >&5 echo $ECHO_N "checking whether user supplied BLASLIB=\"$use_blas\" works... $ECHO_C" >&6 case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call daxpy ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied BLAS library \"$use_blas\" does not work" >&5 echo "$as_me: error: user supplied BLAS library \"$use_blas\" does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied BLAS library \"$use_blas\" does not work" >&5 echo "$as_me: error: user supplied BLAS library \"$use_blas\" does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied BLAS library \"$use_blas\" does not work" >&5 echo "$as_me: error: user supplied BLAS library \"$use_blas\" does not work" >&2;} { (exit 1); exit 1; }; } fi fi ;; cc|cpp) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied BLAS library \"$use_blas\" does not work" >&5 echo "$as_me: error: user supplied BLAS library \"$use_blas\" does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied BLAS library \"$use_blas\" does not work" >&5 echo "$as_me: error: user supplied BLAS library \"$use_blas\" does not work" >&2;} { (exit 1); exit 1; }; } fi fi ;; esac use_blas="$use_blas $FLIBS" else { echo "$as_me:$LINENO: checking whether user supplied BLASLIB=\"$use_blas\" works with C linkage" >&5 echo "$as_me: checking whether user supplied BLASLIB=\"$use_blas\" works with C linkage" >&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 echo "$as_me:$LINENO: checking for daxpy" >&5 echo $ECHO_N "checking for daxpy... $ECHO_C" >&6 if test "${ac_cv_func_daxpy+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define daxpy to an innocuous variant, in case declares daxpy. For example, HP-UX 11i declares gettimeofday. */ #define daxpy innocuous_daxpy /* System header to define __stub macros and hopefully few prototypes, which can conflict with char daxpy (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef daxpy /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char daxpy (); /* 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_daxpy) || defined (__stub___daxpy) choke me #else char (*f) () = daxpy; #endif #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return f != daxpy; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_daxpy=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_daxpy=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_daxpy" >&5 echo "${ECHO_T}$ac_cv_func_daxpy" >&6 if test $ac_cv_func_daxpy = yes; then : else { { echo "$as_me:$LINENO: error: user supplied BLAS library \"$use_blas\" does not work" >&5 echo "$as_me: error: user supplied BLAS library \"$use_blas\" does not work" >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc 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 fi LIBS="$coin_save_LIBS" fi else # Try to autodetect the library for blas based on build system #AC_MSG_CHECKING([default locations for BLAS]) case $build in *-sgi-*) echo "$as_me:$LINENO: checking whether -lcomplib.sgimath has BLAS" >&5 echo $ECHO_N "checking whether -lcomplib.sgimath has BLAS... $ECHO_C" >&6 coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lcomplib.sgimath $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call daxpy ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then use_blas="-lcomplib.sgimath" if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas="-lcomplib.sgimath" if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_blas="-lcomplib.sgimath" if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas="-lcomplib.sgimath" if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_blas="-lcomplib.sgimath" if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac LIBS="$coin_save_LIBS" ;; # Ideally, we'd use -library=sunperf, but it's an imperfect world. Studio # cc doesn't recognise -library, it wants -xlic_lib. Studio 12 CC doesn't # recognise -xlic_lib. Libtool doesn't like -xlic_lib anyway. Sun claims # that CC and cc will understand -library in Studio 13. The main extra # function of -xlic_lib and -library is to arrange for the Fortran run-time # libraries to be linked for C++ and C. We can arrange that explicitly. *-*-solaris*) echo "$as_me:$LINENO: checking for BLAS in libsunperf" >&5 echo $ECHO_N "checking for BLAS in libsunperf... $ECHO_C" >&6 coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lsunperf $FLIBS $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call daxpy ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then use_blas='-lsunperf' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='-lsunperf' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='-lsunperf' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='-lsunperf' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='-lsunperf' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac LIBS="$coin_save_LIBS" ;; *-cygwin* | *-mingw*) case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_save_LIBS="$LIBS" LIBS="mkl_intel_c.lib mkl_sequential.lib mkl_core.lib $LIBS" if test "$F77" != unavailable ; then echo "$as_me:$LINENO: checking for BLAS in MKL (32bit)" >&5 echo $ECHO_N "checking for BLAS in MKL (32bit)... $ECHO_C" >&6 case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call daxpy ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then use_blas='mkl_intel_c.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='mkl_intel_c.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='mkl_intel_c.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='mkl_intel_c.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='mkl_intel_c.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac else { echo "$as_me:$LINENO: for BLAS in MKL (32bit) using C linkage" >&5 echo "$as_me: for BLAS in MKL (32bit) using C linkage" >&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 echo "$as_me:$LINENO: checking for daxpy" >&5 echo $ECHO_N "checking for daxpy... $ECHO_C" >&6 if test "${ac_cv_func_daxpy+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define daxpy to an innocuous variant, in case declares daxpy. For example, HP-UX 11i declares gettimeofday. */ #define daxpy innocuous_daxpy /* System header to define __stub macros and hopefully few prototypes, which can conflict with char daxpy (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef daxpy /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char daxpy (); /* 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_daxpy) || defined (__stub___daxpy) choke me #else char (*f) () = daxpy; #endif #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return f != daxpy; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_daxpy=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_daxpy=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_daxpy" >&5 echo "${ECHO_T}$ac_cv_func_daxpy" >&6 if test $ac_cv_func_daxpy = yes; then use_blas='mkl_intel_c.lib mkl_sequential.lib mkl_core.lib' fi ac_ext=cc 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 fi LIBS="$coin_save_LIBS" if test "x$use_blas" = x ; then LIBS="mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib $LIBS" if test "$F77" != unavailable ; then echo "$as_me:$LINENO: checking for BLAS in MKL (64bit)" >&5 echo $ECHO_N "checking for BLAS in MKL (64bit)... $ECHO_C" >&6 case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call daxpy ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then use_blas='mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib' echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac else { echo "$as_me:$LINENO: for BLAS in MKL (64bit) using C linkage" >&5 echo "$as_me: for BLAS in MKL (64bit) using C linkage" >&6;} # unset cached outcome of test with 32bit MKL unset ac_cv_func_daxpy 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 echo "$as_me:$LINENO: checking for daxpy" >&5 echo $ECHO_N "checking for daxpy... $ECHO_C" >&6 if test "${ac_cv_func_daxpy+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define daxpy to an innocuous variant, in case declares daxpy. For example, HP-UX 11i declares gettimeofday. */ #define daxpy innocuous_daxpy /* System header to define __stub macros and hopefully few prototypes, which can conflict with char daxpy (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef daxpy /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char daxpy (); /* 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_daxpy) || defined (__stub___daxpy) choke me #else char (*f) () = daxpy; #endif #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return f != daxpy; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_daxpy=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_daxpy=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_daxpy" >&5 echo "${ECHO_T}$ac_cv_func_daxpy" >&6 if test $ac_cv_func_daxpy = yes; then use_blas='mkl_intel_lp64.lib mkl_sequential.lib mkl_core.lib' fi ac_ext=cc 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 fi LIBS="$coin_save_LIBS" fi ;; esac ;; *-darwin*) echo "$as_me:$LINENO: checking for BLAS in Veclib" >&5 echo $ECHO_N "checking for BLAS in Veclib... $ECHO_C" >&6 coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-framework Accelerate $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call daxpy ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then use_blas='-framework Accelerate' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='-framework Accelerate' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='-framework Accelerate' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='-framework Accelerate' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='-framework Accelerate' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac LIBS="$coin_save_LIBS" ;; esac if test -z "$use_blas" ; then echo "$as_me:$LINENO: checking whether -lblas has BLAS" >&5 echo $ECHO_N "checking whether -lblas has BLAS... $ECHO_C" >&6 coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lblas $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call daxpy ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then use_blas='-lblas' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='-lblas' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdaxpy(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='-lblas' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DAXPY" ;; lower*) ac_val="daxpy" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdaxpy="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_blas='-lblas' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdaxpy();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdaxpy() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_blas='-lblas' if test $coin_need_flibs = yes ; then use_blas="$use_blas $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_blas" >&5 echo "${ECHO_T}yes: $use_blas" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac LIBS="$coin_save_LIBS" fi # If we have no other ideas, consider building BLAS. if test -z "$use_blas" ; then use_blas=BUILD fi fi if test "x$use_blas" = xBUILD ; then echo "$as_me:$LINENO: checking for COIN-OR package Blas" >&5 echo $ECHO_N "checking for COIN-OR package Blas... $ECHO_C" >&6 coin_has_blas=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Blas"; then coin_has_blas=skipping fi done fi if test "$coin_has_blas" != skipping; then # Check whether --with-m4_tolower(Blas) or --without-m4_tolower(Blas) was given. if test "${with_blas+set}" = set; then withval="$with_blas" if test "$withval" = no ; then coin_has_blas=skipping fi fi; fi BLAS_LIBS= BLAS_CFLAGS= BLAS_DATA= BLAS_DEPENDENCIES= BLAS_PCLIBS= BLAS_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_blas != skipping; then # Check whether --with-m4_tolower(Blas)-lib or --without-m4_tolower(Blas)-lib was given. if test "${with_blas_lib+set}" = set; then withval="$with_blas_lib" if test "$withval" = no ; then coin_has_blas=skipping else coin_has_blas=yes BLAS_LIBS="$withval" BLAS_PCLIBS="$withval" COINUTILSLIB_PCLIBS="$withval $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS="$withval $COINUTILSLIB_LIBS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then BLAS_LIBS_INSTALLED="$withval" COINUTILSLIB_LIBS_INSTALLED="$withval $COINUTILSLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_blas != skipping; then # Check whether --with-m4_tolower(Blas)-incdir or --without-m4_tolower(Blas)-incdir was given. if test "${with_blas_incdir+set}" = set; then withval="$with_blas_incdir" if test "$withval" = no ; then coin_has_blas=skipping else coin_has_blas=yes BLAS_CFLAGS="-I`${CYGPATH_W} $withval`" COINUTILSLIB_CFLAGS="-I`${CYGPATH_W} $withval` $COINUTILSLIB_CFLAGS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then BLAS_CFLAGS_INSTALLED="$BLAS_CFLAGS" COINUTILSLIB_CFLAGS_INSTALLED="$BLAS_CFLAGS $COINUTILSLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_blas != skipping; then # Check whether --with-m4_tolower(Blas)-datadir or --without-m4_tolower(Blas)-datadir was given. if test "${with_blas_datadir+set}" = set; then withval="$with_blas_datadir" if test "$withval" = no ; then coin_has_blas=skipping else coin_has_blas=yes BLAS_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then BLAS_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_blas = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coinblas"; then BLAS_VERSIONS=`$PKG_CONFIG --modversion "coinblas" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coinblas" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi BLAS_CFLAGS="$cflags" BLAS_LIBS=`$PKG_CONFIG --libs "coinblas" 2>/dev/null` BLAS_DATA=`$PKG_CONFIG --variable=datadir "coinblas" 2>/dev/null` coin_has_blas=yes echo "$as_me:$LINENO: result: yes: $BLAS_VERSIONS" >&5 echo "${ECHO_T}yes: $BLAS_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then BLAS_LIBS=`echo " $BLAS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi BLAS_PCREQUIRES="coinblas" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in CoinUtilsLib COINUTILSLIB_PCREQUIRES="coinblas $COINUTILSLIB_PCREQUIRES" COINUTILSLIB_CFLAGS="$BLAS_CFLAGS $COINUTILSLIB_CFLAGS" COINUTILSLIB_LIBS="$BLAS_LIBS $COINUTILSLIB_LIBS" else BLAS_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coinblas"` coin_has_blas=notGiven echo "$as_me:$LINENO: result: not given: $BLAS_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $BLAS_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Blas without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Blas without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Blas (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Blas (fallback)... $ECHO_C" >&6 coin_has_blas=notGiven BLAS_LIBS= BLAS_LIBS_INSTALLED= BLAS_CFLAGS= BLAS_CFLAGS_INSTALLED= BLAS_DATA= BLAS_DATA_INSTALLED= BLAS_PCLIBS= BLAS_PCREQUIRES= # initial list of dependencies is "coinblas", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coinblas" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$BLAS_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` BLAS_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$BLAS_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi BLAS_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi BLAS_CFLAGS="$projcflags $BLAS_CFLAGS" # set LIBS variable BLAS_LIBS="$projlibs $BLAS_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi BLAS_CFLAGS_INSTALLED="$projcflags $BLAS_CFLAGS_INSTALLED" # set LIBS variable BLAS_LIBS_INSTALLED="$projlibs $BLAS_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_blas=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_BLAS 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then BLAS_LIBS=`echo " $BLAS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` BLAS_LIBS_INSTALLED=`echo " $BLAS_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi BLAS_PCREQUIRES="coinblas" COINUTILSLIB_PCREQUIRES="coinblas $COINUTILSLIB_PCREQUIRES" COINUTILSLIB_CFLAGS="$BLAS_CFLAGS $COINUTILSLIB_CFLAGS" COINUTILSLIB_LIBS="$BLAS_LIBS $COINUTILSLIB_LIBS" COINUTILSLIB_CFLAGS_INSTALLED="$BLAS_CFLAGS_INSTALLED $COINUTILSLIB_CFLAGS_INSTALLED" COINUTILSLIB_LIBS_INSTALLED="$BLAS_LIBS_INSTALLED $COINUTILSLIB_LIBS_INSTALLED" fi if test $coin_has_blas != notGiven && test $coin_has_blas != skipping; then COIN_HAS_BLAS_TRUE= COIN_HAS_BLAS_FALSE='#' else COIN_HAS_BLAS_TRUE='#' COIN_HAS_BLAS_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_blas" >&5 echo "${ECHO_T}$coin_has_blas" >&6 fi if test $coin_has_blas != skipping && test $coin_has_blas != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_BLAS 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) BLAS_DEPENDENCIES=`echo " $BLAS_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` COINUTILSLIB_DEPENDENCIES=`echo " $COINUTILSLIB_LIBS " | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$BLAS_CFLAGS" ; then { echo "$as_me:$LINENO: Blas CFLAGS are $BLAS_CFLAGS" >&5 echo "$as_me: Blas CFLAGS are $BLAS_CFLAGS" >&6;} fi if test -n "$BLAS_LIBS" ; then { echo "$as_me:$LINENO: Blas LIBS are $BLAS_LIBS" >&5 echo "$as_me: Blas LIBS are $BLAS_LIBS" >&6;} fi if test -n "$BLAS_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Blas DEPENDENCIES are $BLAS_DEPENDENCIES" >&5 echo "$as_me: Blas DEPENDENCIES are $BLAS_DEPENDENCIES" >&6;} fi if test -n "$BLAS_DATA" ; then { echo "$as_me:$LINENO: Blas DATA is $BLAS_DATA" >&5 echo "$as_me: Blas DATA is $BLAS_DATA" >&6;} fi if test -n "$BLAS_PCLIBS" ; then { echo "$as_me:$LINENO: Blas PCLIBS are $BLAS_PCLIBS" >&5 echo "$as_me: Blas PCLIBS are $BLAS_PCLIBS" >&6;} fi if test -n "$BLAS_PCREQUIRES" ; then { echo "$as_me:$LINENO: Blas PCREQUIRES are $BLAS_PCREQUIRES" >&5 echo "$as_me: Blas PCREQUIRES are $BLAS_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: CoinUtilsLib CFLAGS are $COINUTILSLIB_CFLAGS" >&5 echo "$as_me: CoinUtilsLib CFLAGS are $COINUTILSLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: CoinUtilsLib LIBS are $COINUTILSLIB_LIBS" >&5 echo "$as_me: CoinUtilsLib LIBS are $COINUTILSLIB_LIBS" >&6;} { echo "$as_me:$LINENO: CoinUtilsLib DEPENDENCIES are $COINUTILSLIB_DEPENDENCIES" >&5 echo "$as_me: CoinUtilsLib DEPENDENCIES are $COINUTILSLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_blas != notGiven && test $coin_has_blas != skipping; then COIN_HAS_BLAS_TRUE= COIN_HAS_BLAS_FALSE='#' else COIN_HAS_BLAS_TRUE='#' COIN_HAS_BLAS_FALSE= fi elif test "x$use_blas" != x && test "$use_blas" != no; then coin_has_blas=yes if test 0 = 0; then COIN_HAS_BLAS_TRUE= COIN_HAS_BLAS_FALSE='#' else COIN_HAS_BLAS_TRUE='#' COIN_HAS_BLAS_FALSE= fi cat >>confdefs.h <<\_ACEOF #define COIN_HAS_BLAS 1 _ACEOF BLAS_LIBS="$use_blas" BLAS_CFLAGS= BLAS_DATA= COINUTILSLIB_PCLIBS="$BLAS_LIBS $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS="$BLAS_LIBS $COINUTILSLIB_LIBS" COINUTILSLIB_LIBS_INSTALLED="$BLAS_LIBS $COINUTILSLIB_LIBS_INSTALLED" else coin_has_blas=no if test 0 = 1; then COIN_HAS_BLAS_TRUE= COIN_HAS_BLAS_FALSE='#' else COIN_HAS_BLAS_TRUE='#' COIN_HAS_BLAS_FALSE= fi fi # Check whether --with-lapack or --without-lapack was given. if test "${with_lapack+set}" = set; then withval="$with_lapack" use_lapack=$withval else use_lapack= fi; #if user specified --with-lapack-lib, then we should give COIN_HAS_PACKAGE preference # Check whether --with-lapack-lib or --without-lapack-lib was given. if test "${with_lapack_lib+set}" = set; then withval="$with_lapack_lib" use_lapack=BUILD fi; # Check if user supplied option makes sense if test x"$use_lapack" != x; then if test "$use_lapack" = "BUILD"; then # we come to this later : elif test "$use_lapack" != no; then use_lapack="$use_lapack $BLAS_LIBS" coin_save_LIBS="$LIBS" LIBS="$use_lapack $LIBS" if test "$F77" != unavailable; then echo "$as_me:$LINENO: checking whether user supplied LAPACKLIB=\"$use_lapack\" works" >&5 echo $ECHO_N "checking whether user supplied LAPACKLIB=\"$use_lapack\" works... $ECHO_C" >&6 coin_need_flibs=no case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call dsyev ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied LAPACK library \"$use_lapack\" does not work" >&5 echo "$as_me: error: user supplied LAPACK library \"$use_lapack\" does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied LAPACK library \"$use_lapack\" does not work" >&5 echo "$as_me: error: user supplied LAPACK library \"$use_lapack\" does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied LAPACK library \"$use_lapack\" does not work" >&5 echo "$as_me: error: user supplied LAPACK library \"$use_lapack\" does not work" >&2;} { (exit 1); exit 1; }; } fi fi ;; cc|cpp) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied LAPACK library \"$use_lapack\" does not work" >&5 echo "$as_me: error: user supplied LAPACK library \"$use_lapack\" does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: user supplied LAPACK library \"$use_lapack\" does not work" >&5 echo "$as_me: error: user supplied LAPACK library \"$use_lapack\" does not work" >&2;} { (exit 1); exit 1; }; } fi fi ;; esac else { echo "$as_me:$LINENO: whether user supplied LAPACKLIB=\"$use_lapack\" works with C linkage" >&5 echo "$as_me: whether user supplied LAPACKLIB=\"$use_lapack\" works with C linkage" >&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 echo "$as_me:$LINENO: checking for dsyev" >&5 echo $ECHO_N "checking for dsyev... $ECHO_C" >&6 if test "${ac_cv_func_dsyev+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dsyev to an innocuous variant, in case declares dsyev. For example, HP-UX 11i declares gettimeofday. */ #define dsyev innocuous_dsyev /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dsyev (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dsyev /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dsyev (); /* 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_dsyev) || defined (__stub___dsyev) choke me #else char (*f) () = dsyev; #endif #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return f != dsyev; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dsyev=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dsyev=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dsyev" >&5 echo "${ECHO_T}$ac_cv_func_dsyev" >&6 if test $ac_cv_func_dsyev = yes; then : else { { echo "$as_me:$LINENO: error: user supplied LAPACK library \"$use_lapack\" does not work" >&5 echo "$as_me: error: user supplied LAPACK library \"$use_lapack\" does not work" >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc 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 fi LIBS="$coin_save_LIBS" fi else if test x$coin_has_blas = xyes; then # First try to see if LAPACK is already available with BLAS library coin_save_LIBS="$LIBS" LIBS="$BLAS_LIBS $LIBS" if test "$F77" != unavailable; then coin_need_flibs=no echo "$as_me:$LINENO: checking whether LAPACK is already available with BLAS library" >&5 echo $ECHO_N "checking whether LAPACK is already available with BLAS library... $ECHO_C" >&6 case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call dsyev ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then use_lapack="$BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack="$BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack="$BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack="$BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack="$BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac else { echo "$as_me:$LINENO: checking whether LAPACK is already available with BLAS library" >&5 echo "$as_me: checking whether LAPACK is already available with BLAS library" >&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 echo "$as_me:$LINENO: checking for dsyev" >&5 echo $ECHO_N "checking for dsyev... $ECHO_C" >&6 if test "${ac_cv_func_dsyev+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dsyev to an innocuous variant, in case declares dsyev. For example, HP-UX 11i declares gettimeofday. */ #define dsyev innocuous_dsyev /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dsyev (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dsyev /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dsyev (); /* 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_dsyev) || defined (__stub___dsyev) choke me #else char (*f) () = dsyev; #endif #ifdef __cplusplus } #endif #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return f != dsyev; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dsyev=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dsyev=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dsyev" >&5 echo "${ECHO_T}$ac_cv_func_dsyev" >&6 if test $ac_cv_func_dsyev = yes; then use_lapack="$BLAS_LIBS" fi ac_ext=cc 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 fi LIBS="$coin_save_LIBS" fi if test -z "$use_lapack"; then # Try to autodetect the library for lapack based on build system case $build in # TODO: Is this check actually needed here, since -lcomplib.sigmath should have been recognized as Blas library, # and above it is checked whether the Blas library already contains Lapack *-sgi-*) echo "$as_me:$LINENO: checking whether -lcomplib.sgimath has LAPACK" >&5 echo $ECHO_N "checking whether -lcomplib.sgimath has LAPACK... $ECHO_C" >&6 coin_save_LIBS="$LIBS" coin_need_flibs=no LIBS="-lcomplib.sgimath $BLAS_LIBS $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call dsyev ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then use_lapack="-lcomplib.sgimath $BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack="-lcomplib.sgimath $BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack="-lcomplib.sgimath $BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack="-lcomplib.sgimath $BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack="-lcomplib.sgimath $BLAS_LIBS" if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac LIBS="$coin_save_LIBS" ;; # See comments in COIN_CHECK_PACKAGE_BLAS. # TODO: Is this check actually needed here, since -lsunperf should have been recognized as Blas library, # and above it is checked whether the Blas library already contains Lapack *-*-solaris*) echo "$as_me:$LINENO: checking for LAPACK in libsunperf" >&5 echo $ECHO_N "checking for LAPACK in libsunperf... $ECHO_C" >&6 coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-lsunperf $BLAS_LIBS $FLIBS $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call dsyev ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then use_lapack='-lsunperf $BLAS_LIBS' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack='-lsunperf $BLAS_LIBS' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack='-lsunperf $BLAS_LIBS' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack='-lsunperf $BLAS_LIBS' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack='-lsunperf $BLAS_LIBS' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac LIBS="$coin_save_LIBS" ;; # On cygwin, do this check only if doscompile is disabled. The prebuilt library # will want to link with cygwin, hence won't run standalone in DOS. esac fi if test -z "$use_lapack" ; then echo "$as_me:$LINENO: checking whether -llapack has LAPACK" >&5 echo $ECHO_N "checking whether -llapack has LAPACK... $ECHO_C" >&6 coin_need_flibs=no coin_save_LIBS="$LIBS" LIBS="-llapack $BLAS_LIBS $LIBS" case $ac_ext in f) cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { call dsyev ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then use_lapack='-llapack' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; c) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack='-llapack' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ void $cfuncdsyev(); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack='-llapack' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; cc|cpp) ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu case $ac_cv_f77_mangling in upper*) ac_val="DSYEV" ;; lower*) ac_val="dsyev" ;; *) ac_val="unknown" ;; esac case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac cfuncdsyev="$ac_val" ac_ext=cc 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 x"$coin_need_flibs" = xyes; then flink_try=no; else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then flink_try=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 flink_try=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test $flink_try = yes; then use_lapack='-llapack' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else if test x"$FLIBS" != x; then flink_save_libs="$LIBS" LIBS="$LIBS $FLIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ extern "C" {void $cfuncdsyev();} #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { $cfuncdsyev() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS="$flink_save_libs" coin_need_flibs=yes use_lapack='-llapack' if test $coin_need_flibs = yes ; then use_lapack="$use_lapack $FLIBS" fi echo "$as_me:$LINENO: result: yes: $use_lapack" >&5 echo "${ECHO_T}yes: $use_lapack" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS="$flink_save_libs" echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi ;; esac LIBS="$coin_save_LIBS" fi # If we have no other ideas, consider building LAPACK. if test -z "$use_lapack" ; then use_lapack=BUILD fi fi if test "x$use_lapack" = xBUILD ; then echo "$as_me:$LINENO: checking for COIN-OR package Lapack" >&5 echo $ECHO_N "checking for COIN-OR package Lapack... $ECHO_C" >&6 coin_has_lapack=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Lapack"; then coin_has_lapack=skipping fi done fi if test "$coin_has_lapack" != skipping; then # Check whether --with-m4_tolower(Lapack) or --without-m4_tolower(Lapack) was given. if test "${with_lapack+set}" = set; then withval="$with_lapack" if test "$withval" = no ; then coin_has_lapack=skipping fi fi; fi LAPACK_LIBS= LAPACK_CFLAGS= LAPACK_DATA= LAPACK_DEPENDENCIES= LAPACK_PCLIBS= LAPACK_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_lapack != skipping; then # Check whether --with-m4_tolower(Lapack)-lib or --without-m4_tolower(Lapack)-lib was given. if test "${with_lapack_lib+set}" = set; then withval="$with_lapack_lib" if test "$withval" = no ; then coin_has_lapack=skipping else coin_has_lapack=yes LAPACK_LIBS="$withval" LAPACK_PCLIBS="$withval" COINUTILSLIB_PCLIBS="$withval $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS="$withval $COINUTILSLIB_LIBS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then LAPACK_LIBS_INSTALLED="$withval" COINUTILSLIB_LIBS_INSTALLED="$withval $COINUTILSLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_lapack != skipping; then # Check whether --with-m4_tolower(Lapack)-incdir or --without-m4_tolower(Lapack)-incdir was given. if test "${with_lapack_incdir+set}" = set; then withval="$with_lapack_incdir" if test "$withval" = no ; then coin_has_lapack=skipping else coin_has_lapack=yes LAPACK_CFLAGS="-I`${CYGPATH_W} $withval`" COINUTILSLIB_CFLAGS="-I`${CYGPATH_W} $withval` $COINUTILSLIB_CFLAGS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then LAPACK_CFLAGS_INSTALLED="$LAPACK_CFLAGS" COINUTILSLIB_CFLAGS_INSTALLED="$LAPACK_CFLAGS $COINUTILSLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_lapack != skipping; then # Check whether --with-m4_tolower(Lapack)-datadir or --without-m4_tolower(Lapack)-datadir was given. if test "${with_lapack_datadir+set}" = set; then withval="$with_lapack_datadir" if test "$withval" = no ; then coin_has_lapack=skipping else coin_has_lapack=yes LAPACK_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then LAPACK_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_lapack = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coinlapack"; then LAPACK_VERSIONS=`$PKG_CONFIG --modversion "coinlapack" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coinlapack" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi LAPACK_CFLAGS="$cflags" LAPACK_LIBS=`$PKG_CONFIG --libs "coinlapack" 2>/dev/null` LAPACK_DATA=`$PKG_CONFIG --variable=datadir "coinlapack" 2>/dev/null` coin_has_lapack=yes echo "$as_me:$LINENO: result: yes: $LAPACK_VERSIONS" >&5 echo "${ECHO_T}yes: $LAPACK_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then LAPACK_LIBS=`echo " $LAPACK_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi LAPACK_PCREQUIRES="coinlapack" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in CoinUtilsLib COINUTILSLIB_PCREQUIRES="coinlapack $COINUTILSLIB_PCREQUIRES" COINUTILSLIB_CFLAGS="$LAPACK_CFLAGS $COINUTILSLIB_CFLAGS" COINUTILSLIB_LIBS="$LAPACK_LIBS $COINUTILSLIB_LIBS" else LAPACK_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coinlapack"` coin_has_lapack=notGiven echo "$as_me:$LINENO: result: not given: $LAPACK_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $LAPACK_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Lapack without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Lapack without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Lapack (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Lapack (fallback)... $ECHO_C" >&6 coin_has_lapack=notGiven LAPACK_LIBS= LAPACK_LIBS_INSTALLED= LAPACK_CFLAGS= LAPACK_CFLAGS_INSTALLED= LAPACK_DATA= LAPACK_DATA_INSTALLED= LAPACK_PCLIBS= LAPACK_PCREQUIRES= # initial list of dependencies is "coinlapack", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coinlapack" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$LAPACK_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` LAPACK_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$LAPACK_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi LAPACK_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi LAPACK_CFLAGS="$projcflags $LAPACK_CFLAGS" # set LIBS variable LAPACK_LIBS="$projlibs $LAPACK_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi LAPACK_CFLAGS_INSTALLED="$projcflags $LAPACK_CFLAGS_INSTALLED" # set LIBS variable LAPACK_LIBS_INSTALLED="$projlibs $LAPACK_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_lapack=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_LAPACK 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then LAPACK_LIBS=`echo " $LAPACK_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` LAPACK_LIBS_INSTALLED=`echo " $LAPACK_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi LAPACK_PCREQUIRES="coinlapack" COINUTILSLIB_PCREQUIRES="coinlapack $COINUTILSLIB_PCREQUIRES" COINUTILSLIB_CFLAGS="$LAPACK_CFLAGS $COINUTILSLIB_CFLAGS" COINUTILSLIB_LIBS="$LAPACK_LIBS $COINUTILSLIB_LIBS" COINUTILSLIB_CFLAGS_INSTALLED="$LAPACK_CFLAGS_INSTALLED $COINUTILSLIB_CFLAGS_INSTALLED" COINUTILSLIB_LIBS_INSTALLED="$LAPACK_LIBS_INSTALLED $COINUTILSLIB_LIBS_INSTALLED" fi if test $coin_has_lapack != notGiven && test $coin_has_lapack != skipping; then COIN_HAS_LAPACK_TRUE= COIN_HAS_LAPACK_FALSE='#' else COIN_HAS_LAPACK_TRUE='#' COIN_HAS_LAPACK_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_lapack" >&5 echo "${ECHO_T}$coin_has_lapack" >&6 fi if test $coin_has_lapack != skipping && test $coin_has_lapack != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_LAPACK 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) LAPACK_DEPENDENCIES=`echo " $LAPACK_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` COINUTILSLIB_DEPENDENCIES=`echo " $COINUTILSLIB_LIBS " | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$LAPACK_CFLAGS" ; then { echo "$as_me:$LINENO: Lapack CFLAGS are $LAPACK_CFLAGS" >&5 echo "$as_me: Lapack CFLAGS are $LAPACK_CFLAGS" >&6;} fi if test -n "$LAPACK_LIBS" ; then { echo "$as_me:$LINENO: Lapack LIBS are $LAPACK_LIBS" >&5 echo "$as_me: Lapack LIBS are $LAPACK_LIBS" >&6;} fi if test -n "$LAPACK_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Lapack DEPENDENCIES are $LAPACK_DEPENDENCIES" >&5 echo "$as_me: Lapack DEPENDENCIES are $LAPACK_DEPENDENCIES" >&6;} fi if test -n "$LAPACK_DATA" ; then { echo "$as_me:$LINENO: Lapack DATA is $LAPACK_DATA" >&5 echo "$as_me: Lapack DATA is $LAPACK_DATA" >&6;} fi if test -n "$LAPACK_PCLIBS" ; then { echo "$as_me:$LINENO: Lapack PCLIBS are $LAPACK_PCLIBS" >&5 echo "$as_me: Lapack PCLIBS are $LAPACK_PCLIBS" >&6;} fi if test -n "$LAPACK_PCREQUIRES" ; then { echo "$as_me:$LINENO: Lapack PCREQUIRES are $LAPACK_PCREQUIRES" >&5 echo "$as_me: Lapack PCREQUIRES are $LAPACK_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: CoinUtilsLib CFLAGS are $COINUTILSLIB_CFLAGS" >&5 echo "$as_me: CoinUtilsLib CFLAGS are $COINUTILSLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: CoinUtilsLib LIBS are $COINUTILSLIB_LIBS" >&5 echo "$as_me: CoinUtilsLib LIBS are $COINUTILSLIB_LIBS" >&6;} { echo "$as_me:$LINENO: CoinUtilsLib DEPENDENCIES are $COINUTILSLIB_DEPENDENCIES" >&5 echo "$as_me: CoinUtilsLib DEPENDENCIES are $COINUTILSLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_lapack != notGiven && test $coin_has_lapack != skipping; then COIN_HAS_LAPACK_TRUE= COIN_HAS_LAPACK_FALSE='#' else COIN_HAS_LAPACK_TRUE='#' COIN_HAS_LAPACK_FALSE= fi elif test "x$use_lapack" != x && test "$use_lapack" != no; then coin_has_lapack=yes if test 0 = 0; then COIN_HAS_LAPACK_TRUE= COIN_HAS_LAPACK_FALSE='#' else COIN_HAS_LAPACK_TRUE='#' COIN_HAS_LAPACK_FALSE= fi cat >>confdefs.h <<\_ACEOF #define COIN_HAS_LAPACK 1 _ACEOF LAPACK_LIBS="$use_lapack" LAPACK_CFLAGS= LAPACK_DATA= COINUTILSLIB_PCLIBS="$LAPACK_LIBS $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS="$LAPACK_LIBS $COINUTILSLIB_LIBS" COINUTILSLIB_LIBS_INSTALLED="$LAPACK_LIBS $COINUTILSLIB_LIBS_INSTALLED" else coin_has_lapack=no if test 0 = 1; then COIN_HAS_LAPACK_TRUE= COIN_HAS_LAPACK_FALSE='#' else COIN_HAS_LAPACK_TRUE='#' COIN_HAS_LAPACK_FALSE= fi fi echo "$as_me:$LINENO: checking for COIN-OR package Glpk" >&5 echo $ECHO_N "checking for COIN-OR package Glpk... $ECHO_C" >&6 coin_has_glpk=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Glpk"; then coin_has_glpk=skipping fi done fi if test "$coin_has_glpk" != skipping; then # Check whether --with-m4_tolower(Glpk) or --without-m4_tolower(Glpk) was given. if test "${with_glpk+set}" = set; then withval="$with_glpk" if test "$withval" = no ; then coin_has_glpk=skipping fi fi; fi GLPK_LIBS= GLPK_CFLAGS= GLPK_DATA= GLPK_DEPENDENCIES= GLPK_PCLIBS= GLPK_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_glpk != skipping; then # Check whether --with-m4_tolower(Glpk)-lib or --without-m4_tolower(Glpk)-lib was given. if test "${with_glpk_lib+set}" = set; then withval="$with_glpk_lib" if test "$withval" = no ; then coin_has_glpk=skipping else coin_has_glpk=yes GLPK_LIBS="$withval" GLPK_PCLIBS="$withval" COINUTILSLIB_PCLIBS="$withval $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS="$withval $COINUTILSLIB_LIBS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then GLPK_LIBS_INSTALLED="$withval" COINUTILSLIB_LIBS_INSTALLED="$withval $COINUTILSLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_glpk != skipping; then # Check whether --with-m4_tolower(Glpk)-incdir or --without-m4_tolower(Glpk)-incdir was given. if test "${with_glpk_incdir+set}" = set; then withval="$with_glpk_incdir" if test "$withval" = no ; then coin_has_glpk=skipping else coin_has_glpk=yes GLPK_CFLAGS="-I`${CYGPATH_W} $withval`" COINUTILSLIB_CFLAGS="-I`${CYGPATH_W} $withval` $COINUTILSLIB_CFLAGS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then GLPK_CFLAGS_INSTALLED="$GLPK_CFLAGS" COINUTILSLIB_CFLAGS_INSTALLED="$GLPK_CFLAGS $COINUTILSLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_glpk != skipping; then # Check whether --with-m4_tolower(Glpk)-datadir or --without-m4_tolower(Glpk)-datadir was given. if test "${with_glpk_datadir+set}" = set; then withval="$with_glpk_datadir" if test "$withval" = no ; then coin_has_glpk=skipping else coin_has_glpk=yes GLPK_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then GLPK_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_glpk = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coinglpk"; then GLPK_VERSIONS=`$PKG_CONFIG --modversion "coinglpk" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coinglpk" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi GLPK_CFLAGS="$cflags" GLPK_LIBS=`$PKG_CONFIG --libs "coinglpk" 2>/dev/null` GLPK_DATA=`$PKG_CONFIG --variable=datadir "coinglpk" 2>/dev/null` coin_has_glpk=yes echo "$as_me:$LINENO: result: yes: $GLPK_VERSIONS" >&5 echo "${ECHO_T}yes: $GLPK_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then GLPK_LIBS=`echo " $GLPK_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi GLPK_PCREQUIRES="coinglpk" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in CoinUtilsLib COINUTILSLIB_PCREQUIRES="coinglpk $COINUTILSLIB_PCREQUIRES" COINUTILSLIB_CFLAGS="$GLPK_CFLAGS $COINUTILSLIB_CFLAGS" COINUTILSLIB_LIBS="$GLPK_LIBS $COINUTILSLIB_LIBS" else GLPK_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coinglpk"` coin_has_glpk=notGiven echo "$as_me:$LINENO: result: not given: $GLPK_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $GLPK_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Glpk without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Glpk without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Glpk (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Glpk (fallback)... $ECHO_C" >&6 coin_has_glpk=notGiven GLPK_LIBS= GLPK_LIBS_INSTALLED= GLPK_CFLAGS= GLPK_CFLAGS_INSTALLED= GLPK_DATA= GLPK_DATA_INSTALLED= GLPK_PCLIBS= GLPK_PCREQUIRES= # initial list of dependencies is "coinglpk", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coinglpk" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$GLPK_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` GLPK_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$GLPK_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi GLPK_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi GLPK_CFLAGS="$projcflags $GLPK_CFLAGS" # set LIBS variable GLPK_LIBS="$projlibs $GLPK_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi GLPK_CFLAGS_INSTALLED="$projcflags $GLPK_CFLAGS_INSTALLED" # set LIBS variable GLPK_LIBS_INSTALLED="$projlibs $GLPK_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_glpk=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_GLPK 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then GLPK_LIBS=`echo " $GLPK_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` GLPK_LIBS_INSTALLED=`echo " $GLPK_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi GLPK_PCREQUIRES="coinglpk" COINUTILSLIB_PCREQUIRES="coinglpk $COINUTILSLIB_PCREQUIRES" COINUTILSLIB_CFLAGS="$GLPK_CFLAGS $COINUTILSLIB_CFLAGS" COINUTILSLIB_LIBS="$GLPK_LIBS $COINUTILSLIB_LIBS" COINUTILSLIB_CFLAGS_INSTALLED="$GLPK_CFLAGS_INSTALLED $COINUTILSLIB_CFLAGS_INSTALLED" COINUTILSLIB_LIBS_INSTALLED="$GLPK_LIBS_INSTALLED $COINUTILSLIB_LIBS_INSTALLED" fi if test $coin_has_glpk != notGiven && test $coin_has_glpk != skipping; then COIN_HAS_GLPK_TRUE= COIN_HAS_GLPK_FALSE='#' else COIN_HAS_GLPK_TRUE='#' COIN_HAS_GLPK_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_glpk" >&5 echo "${ECHO_T}$coin_has_glpk" >&6 fi if test $coin_has_glpk != skipping && test $coin_has_glpk != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_GLPK 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) GLPK_DEPENDENCIES=`echo " $GLPK_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` COINUTILSLIB_DEPENDENCIES=`echo " $COINUTILSLIB_LIBS " | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$GLPK_CFLAGS" ; then { echo "$as_me:$LINENO: Glpk CFLAGS are $GLPK_CFLAGS" >&5 echo "$as_me: Glpk CFLAGS are $GLPK_CFLAGS" >&6;} fi if test -n "$GLPK_LIBS" ; then { echo "$as_me:$LINENO: Glpk LIBS are $GLPK_LIBS" >&5 echo "$as_me: Glpk LIBS are $GLPK_LIBS" >&6;} fi if test -n "$GLPK_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Glpk DEPENDENCIES are $GLPK_DEPENDENCIES" >&5 echo "$as_me: Glpk DEPENDENCIES are $GLPK_DEPENDENCIES" >&6;} fi if test -n "$GLPK_DATA" ; then { echo "$as_me:$LINENO: Glpk DATA is $GLPK_DATA" >&5 echo "$as_me: Glpk DATA is $GLPK_DATA" >&6;} fi if test -n "$GLPK_PCLIBS" ; then { echo "$as_me:$LINENO: Glpk PCLIBS are $GLPK_PCLIBS" >&5 echo "$as_me: Glpk PCLIBS are $GLPK_PCLIBS" >&6;} fi if test -n "$GLPK_PCREQUIRES" ; then { echo "$as_me:$LINENO: Glpk PCREQUIRES are $GLPK_PCREQUIRES" >&5 echo "$as_me: Glpk PCREQUIRES are $GLPK_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: CoinUtilsLib CFLAGS are $COINUTILSLIB_CFLAGS" >&5 echo "$as_me: CoinUtilsLib CFLAGS are $COINUTILSLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: CoinUtilsLib LIBS are $COINUTILSLIB_LIBS" >&5 echo "$as_me: CoinUtilsLib LIBS are $COINUTILSLIB_LIBS" >&6;} { echo "$as_me:$LINENO: CoinUtilsLib DEPENDENCIES are $COINUTILSLIB_DEPENDENCIES" >&5 echo "$as_me: CoinUtilsLib DEPENDENCIES are $COINUTILSLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_glpk != notGiven && test $coin_has_glpk != skipping; then COIN_HAS_GLPK_TRUE= COIN_HAS_GLPK_FALSE='#' else COIN_HAS_GLPK_TRUE='#' COIN_HAS_GLPK_FALSE= fi echo "$as_me:$LINENO: checking for COIN-OR package Sample" >&5 echo $ECHO_N "checking for COIN-OR package Sample... $ECHO_C" >&6 coin_has_sample=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Sample"; then coin_has_sample=skipping fi done fi if test "$coin_has_sample" != skipping; then # Check whether --with-m4_tolower(Sample) or --without-m4_tolower(Sample) was given. if test "${with_sample+set}" = set; then withval="$with_sample" if test "$withval" = no ; then coin_has_sample=skipping fi fi; fi SAMPLE_LIBS= SAMPLE_CFLAGS= SAMPLE_DATA= SAMPLE_DEPENDENCIES= SAMPLE_PCLIBS= SAMPLE_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_sample != skipping; then # Check whether --with-m4_tolower(Sample)-lib or --without-m4_tolower(Sample)-lib was given. if test "${with_sample_lib+set}" = set; then withval="$with_sample_lib" if test "$withval" = no ; then coin_has_sample=skipping else coin_has_sample=yes SAMPLE_LIBS="$withval" SAMPLE_PCLIBS="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SAMPLE_LIBS_INSTALLED="$withval" fi fi fi; fi if test $coin_has_sample != skipping; then # Check whether --with-m4_tolower(Sample)-incdir or --without-m4_tolower(Sample)-incdir was given. if test "${with_sample_incdir+set}" = set; then withval="$with_sample_incdir" if test "$withval" = no ; then coin_has_sample=skipping else coin_has_sample=yes SAMPLE_CFLAGS="-I`${CYGPATH_W} $withval`" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SAMPLE_CFLAGS_INSTALLED="$SAMPLE_CFLAGS" fi fi fi; fi if test $coin_has_sample != skipping; then # Check whether --with-m4_tolower(Sample)-datadir or --without-m4_tolower(Sample)-datadir was given. if test "${with_sample_datadir+set}" = set; then withval="$with_sample_datadir" if test "$withval" = no ; then coin_has_sample=skipping else coin_has_sample=yes SAMPLE_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SAMPLE_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_sample = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coindatasample"; then SAMPLE_VERSIONS=`$PKG_CONFIG --modversion "coindatasample" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coindatasample" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SAMPLE_CFLAGS="$cflags" SAMPLE_LIBS=`$PKG_CONFIG --libs "coindatasample" 2>/dev/null` SAMPLE_DATA=`$PKG_CONFIG --variable=datadir "coindatasample" 2>/dev/null` coin_has_sample=yes echo "$as_me:$LINENO: result: yes: $SAMPLE_VERSIONS" >&5 echo "${ECHO_T}yes: $SAMPLE_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then SAMPLE_LIBS=`echo " $SAMPLE_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi SAMPLE_PCREQUIRES="coindatasample" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in else SAMPLE_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coindatasample"` coin_has_sample=notGiven echo "$as_me:$LINENO: result: not given: $SAMPLE_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $SAMPLE_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Sample without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Sample without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Sample (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Sample (fallback)... $ECHO_C" >&6 coin_has_sample=notGiven SAMPLE_LIBS= SAMPLE_LIBS_INSTALLED= SAMPLE_CFLAGS= SAMPLE_CFLAGS_INSTALLED= SAMPLE_DATA= SAMPLE_DATA_INSTALLED= SAMPLE_PCLIBS= SAMPLE_PCREQUIRES= # initial list of dependencies is "coindatasample", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coindatasample" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$SAMPLE_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` SAMPLE_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$SAMPLE_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi SAMPLE_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SAMPLE_CFLAGS="$projcflags $SAMPLE_CFLAGS" # set LIBS variable SAMPLE_LIBS="$projlibs $SAMPLE_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SAMPLE_CFLAGS_INSTALLED="$projcflags $SAMPLE_CFLAGS_INSTALLED" # set LIBS variable SAMPLE_LIBS_INSTALLED="$projlibs $SAMPLE_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_sample=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_SAMPLE 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then SAMPLE_LIBS=`echo " $SAMPLE_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` SAMPLE_LIBS_INSTALLED=`echo " $SAMPLE_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi SAMPLE_PCREQUIRES="coindatasample" fi if test $coin_has_sample != notGiven && test $coin_has_sample != skipping; then COIN_HAS_SAMPLE_TRUE= COIN_HAS_SAMPLE_FALSE='#' else COIN_HAS_SAMPLE_TRUE='#' COIN_HAS_SAMPLE_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_sample" >&5 echo "${ECHO_T}$coin_has_sample" >&6 fi if test $coin_has_sample != skipping && test $coin_has_sample != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_SAMPLE 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) SAMPLE_DEPENDENCIES=`echo " $SAMPLE_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$SAMPLE_CFLAGS" ; then { echo "$as_me:$LINENO: Sample CFLAGS are $SAMPLE_CFLAGS" >&5 echo "$as_me: Sample CFLAGS are $SAMPLE_CFLAGS" >&6;} fi if test -n "$SAMPLE_LIBS" ; then { echo "$as_me:$LINENO: Sample LIBS are $SAMPLE_LIBS" >&5 echo "$as_me: Sample LIBS are $SAMPLE_LIBS" >&6;} fi if test -n "$SAMPLE_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Sample DEPENDENCIES are $SAMPLE_DEPENDENCIES" >&5 echo "$as_me: Sample DEPENDENCIES are $SAMPLE_DEPENDENCIES" >&6;} fi if test -n "$SAMPLE_DATA" ; then { echo "$as_me:$LINENO: Sample DATA is $SAMPLE_DATA" >&5 echo "$as_me: Sample DATA is $SAMPLE_DATA" >&6;} fi if test -n "$SAMPLE_PCLIBS" ; then { echo "$as_me:$LINENO: Sample PCLIBS are $SAMPLE_PCLIBS" >&5 echo "$as_me: Sample PCLIBS are $SAMPLE_PCLIBS" >&6;} fi if test -n "$SAMPLE_PCREQUIRES" ; then { echo "$as_me:$LINENO: Sample PCREQUIRES are $SAMPLE_PCREQUIRES" >&5 echo "$as_me: Sample PCREQUIRES are $SAMPLE_PCREQUIRES" >&6;} fi fi fi # Define the Makefile conditional if test $coin_has_sample != notGiven && test $coin_has_sample != skipping; then COIN_HAS_SAMPLE_TRUE= COIN_HAS_SAMPLE_FALSE='#' else COIN_HAS_SAMPLE_TRUE='#' COIN_HAS_SAMPLE_FALSE= fi echo "$as_me:$LINENO: checking for COIN-OR package Netlib" >&5 echo $ECHO_N "checking for COIN-OR package Netlib... $ECHO_C" >&6 coin_has_netlib=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Netlib"; then coin_has_netlib=skipping fi done fi if test "$coin_has_netlib" != skipping; then # Check whether --with-m4_tolower(Netlib) or --without-m4_tolower(Netlib) was given. if test "${with_netlib+set}" = set; then withval="$with_netlib" if test "$withval" = no ; then coin_has_netlib=skipping fi fi; fi NETLIB_LIBS= NETLIB_CFLAGS= NETLIB_DATA= NETLIB_DEPENDENCIES= NETLIB_PCLIBS= NETLIB_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_netlib != skipping; then # Check whether --with-m4_tolower(Netlib)-lib or --without-m4_tolower(Netlib)-lib was given. if test "${with_netlib_lib+set}" = set; then withval="$with_netlib_lib" if test "$withval" = no ; then coin_has_netlib=skipping else coin_has_netlib=yes NETLIB_LIBS="$withval" NETLIB_PCLIBS="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then NETLIB_LIBS_INSTALLED="$withval" fi fi fi; fi if test $coin_has_netlib != skipping; then # Check whether --with-m4_tolower(Netlib)-incdir or --without-m4_tolower(Netlib)-incdir was given. if test "${with_netlib_incdir+set}" = set; then withval="$with_netlib_incdir" if test "$withval" = no ; then coin_has_netlib=skipping else coin_has_netlib=yes NETLIB_CFLAGS="-I`${CYGPATH_W} $withval`" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then NETLIB_CFLAGS_INSTALLED="$NETLIB_CFLAGS" fi fi fi; fi if test $coin_has_netlib != skipping; then # Check whether --with-m4_tolower(Netlib)-datadir or --without-m4_tolower(Netlib)-datadir was given. if test "${with_netlib_datadir+set}" = set; then withval="$with_netlib_datadir" if test "$withval" = no ; then coin_has_netlib=skipping else coin_has_netlib=yes NETLIB_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then NETLIB_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_netlib = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coindatanetlib"; then NETLIB_VERSIONS=`$PKG_CONFIG --modversion "coindatanetlib" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coindatanetlib" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi NETLIB_CFLAGS="$cflags" NETLIB_LIBS=`$PKG_CONFIG --libs "coindatanetlib" 2>/dev/null` NETLIB_DATA=`$PKG_CONFIG --variable=datadir "coindatanetlib" 2>/dev/null` coin_has_netlib=yes echo "$as_me:$LINENO: result: yes: $NETLIB_VERSIONS" >&5 echo "${ECHO_T}yes: $NETLIB_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then NETLIB_LIBS=`echo " $NETLIB_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi NETLIB_PCREQUIRES="coindatanetlib" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in else NETLIB_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coindatanetlib"` coin_has_netlib=notGiven echo "$as_me:$LINENO: result: not given: $NETLIB_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $NETLIB_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Netlib without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Netlib without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Netlib (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Netlib (fallback)... $ECHO_C" >&6 coin_has_netlib=notGiven NETLIB_LIBS= NETLIB_LIBS_INSTALLED= NETLIB_CFLAGS= NETLIB_CFLAGS_INSTALLED= NETLIB_DATA= NETLIB_DATA_INSTALLED= NETLIB_PCLIBS= NETLIB_PCREQUIRES= # initial list of dependencies is "coindatanetlib", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coindatanetlib" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$NETLIB_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` NETLIB_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$NETLIB_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi NETLIB_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi NETLIB_CFLAGS="$projcflags $NETLIB_CFLAGS" # set LIBS variable NETLIB_LIBS="$projlibs $NETLIB_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi NETLIB_CFLAGS_INSTALLED="$projcflags $NETLIB_CFLAGS_INSTALLED" # set LIBS variable NETLIB_LIBS_INSTALLED="$projlibs $NETLIB_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_netlib=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_NETLIB 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then NETLIB_LIBS=`echo " $NETLIB_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` NETLIB_LIBS_INSTALLED=`echo " $NETLIB_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi NETLIB_PCREQUIRES="coindatanetlib" fi if test $coin_has_netlib != notGiven && test $coin_has_netlib != skipping; then COIN_HAS_NETLIB_TRUE= COIN_HAS_NETLIB_FALSE='#' else COIN_HAS_NETLIB_TRUE='#' COIN_HAS_NETLIB_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_netlib" >&5 echo "${ECHO_T}$coin_has_netlib" >&6 fi if test $coin_has_netlib != skipping && test $coin_has_netlib != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_NETLIB 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) NETLIB_DEPENDENCIES=`echo " $NETLIB_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$NETLIB_CFLAGS" ; then { echo "$as_me:$LINENO: Netlib CFLAGS are $NETLIB_CFLAGS" >&5 echo "$as_me: Netlib CFLAGS are $NETLIB_CFLAGS" >&6;} fi if test -n "$NETLIB_LIBS" ; then { echo "$as_me:$LINENO: Netlib LIBS are $NETLIB_LIBS" >&5 echo "$as_me: Netlib LIBS are $NETLIB_LIBS" >&6;} fi if test -n "$NETLIB_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Netlib DEPENDENCIES are $NETLIB_DEPENDENCIES" >&5 echo "$as_me: Netlib DEPENDENCIES are $NETLIB_DEPENDENCIES" >&6;} fi if test -n "$NETLIB_DATA" ; then { echo "$as_me:$LINENO: Netlib DATA is $NETLIB_DATA" >&5 echo "$as_me: Netlib DATA is $NETLIB_DATA" >&6;} fi if test -n "$NETLIB_PCLIBS" ; then { echo "$as_me:$LINENO: Netlib PCLIBS are $NETLIB_PCLIBS" >&5 echo "$as_me: Netlib PCLIBS are $NETLIB_PCLIBS" >&6;} fi if test -n "$NETLIB_PCREQUIRES" ; then { echo "$as_me:$LINENO: Netlib PCREQUIRES are $NETLIB_PCREQUIRES" >&5 echo "$as_me: Netlib PCREQUIRES are $NETLIB_PCREQUIRES" >&6;} fi fi fi # Define the Makefile conditional if test $coin_has_netlib != notGiven && test $coin_has_netlib != skipping; then COIN_HAS_NETLIB_TRUE= COIN_HAS_NETLIB_FALSE='#' else COIN_HAS_NETLIB_TRUE='#' COIN_HAS_NETLIB_FALSE= fi coin_has_zlib=no # Check whether --enable-zlib or --disable-zlib was given. if test "${enable_zlib+set}" = set; then enableval="$enable_zlib" coin_enable_zlib=$enableval else coin_enable_zlib=yes fi; if test $coin_enable_zlib = yes; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([zlib.h],[coin_has_zlib=yes],[],[$hdr]) for ac_header in zlib.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF coin_has_zlib=yes fi done if test $coin_has_zlib = yes; then echo "$as_me:$LINENO: checking for gzopen in -lz" >&5 echo $ECHO_N "checking for gzopen in -lz... $ECHO_C" >&6 if test "${ac_cv_lib_z_gzopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gzopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { gzopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_z_gzopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_z_gzopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_z_gzopen" >&5 echo "${ECHO_T}$ac_cv_lib_z_gzopen" >&6 if test $ac_cv_lib_z_gzopen = yes; then : else coin_has_zlib=no fi fi if test $coin_has_zlib = yes; then COINUTILSLIB_LIBS="-lz $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lz $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS_INSTALLED="-lz $COINUTILSLIB_LIBS_INSTALLED" cat >>confdefs.h <<\_ACEOF #define COIN_HAS_ZLIB 1 _ACEOF fi fi if test x$coin_has_zlib = xyes; then COIN_HAS_ZLIB_TRUE= COIN_HAS_ZLIB_FALSE='#' else COIN_HAS_ZLIB_TRUE='#' COIN_HAS_ZLIB_FALSE= fi # Check whether --enable-bzlib or --disable-bzlib was given. if test "${enable_bzlib+set}" = set; then enableval="$enable_bzlib" coin_enable_bzlib=$enableval else coin_enable_bzlib=yes fi; coin_has_bzlib=no if test $coin_enable_bzlib = yes; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([bzlib.h],[coin_has_bzlib=yes],[],[$hdr]) for ac_header in bzlib.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------------------------- ## ## Report this to http://projects.coin-or.org/CoinUtils ## ## ---------------------------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF coin_has_bzlib=yes fi done if test $coin_has_bzlib = yes; then echo "$as_me:$LINENO: checking for BZ2_bzReadOpen in -lbz2" >&5 echo $ECHO_N "checking for BZ2_bzReadOpen in -lbz2... $ECHO_C" >&6 if test "${ac_cv_lib_bz2_BZ2_bzReadOpen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbz2 $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char BZ2_bzReadOpen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { BZ2_bzReadOpen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_bz2_BZ2_bzReadOpen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_bz2_BZ2_bzReadOpen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_bz2_BZ2_bzReadOpen" >&5 echo "${ECHO_T}$ac_cv_lib_bz2_BZ2_bzReadOpen" >&6 if test $ac_cv_lib_bz2_BZ2_bzReadOpen = yes; then : else coin_has_bzlib=no fi fi if test $coin_has_bzlib = yes; then COINUTILSLIB_LIBS="-lbz2 $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lbz2 $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS_INSTALLED="-lbz2 $COINUTILSLIB_LIBS_INSTALLED" cat >>confdefs.h <<\_ACEOF #define COIN_HAS_BZLIB 1 _ACEOF fi fi # Check whether --enable-gnu-packages or --disable-gnu-packages was given. if test "${enable_gnu_packages+set}" = set; then enableval="$enable_gnu_packages" coin_enable_gnu=$enableval else coin_enable_gnu=no fi; coin_has_readline=no if test $coin_enable_gnu = yes; then #if test x"#include " = x; then # hdr="#include " #else # hdr="#include " #fi #AC_CHECK_HEADERS([readline/readline.h],[coin_has_readline=yes],[],[$hdr]) for ac_header in readline/readline.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF coin_has_readline=yes fi done coin_save_LIBS="$LIBS" LIBS= # First we check if tputs and friends are available if test $coin_has_readline = yes; then echo "$as_me:$LINENO: checking for library containing tputs" >&5 echo $ECHO_N "checking for library containing tputs... $ECHO_C" >&6 if test "${ac_cv_search_tputs+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_tputs=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char tputs (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { tputs (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_tputs="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_tputs" = no; then for ac_lib in ncurses termcap curses; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char tputs (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { tputs (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_tputs="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_tputs" >&5 echo "${ECHO_T}$ac_cv_search_tputs" >&6 if test "$ac_cv_search_tputs" != no; then test "$ac_cv_search_tputs" = "none required" || LIBS="$ac_cv_search_tputs $LIBS" else coin_has_readline=no fi fi # Now we check for readline if test $coin_has_readline = yes; then echo "$as_me:$LINENO: checking for readline in -lreadline" >&5 echo $ECHO_N "checking for readline in -lreadline... $ECHO_C" >&6 if test "${ac_cv_lib_readline_readline+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lreadline $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char readline (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { readline (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_readline_readline=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_readline_readline=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_readline_readline" >&5 echo "${ECHO_T}$ac_cv_lib_readline_readline" >&6 if test $ac_cv_lib_readline_readline = yes; then : else coin_has_readline=no fi fi if test $coin_has_readline = yes; then COINUTILSLIB_LIBS="-lreadline $LIBS $COINUTILSLIB_LIBS" COINUTILSLIB_PCLIBS="-lreadline $LIBS $COINUTILSLIB_PCLIBS" COINUTILSLIB_LIBS_INSTALLED="-lreadline $LIBS $COINUTILSLIB_LIBS_INSTALLED" cat >>confdefs.h <<\_ACEOF #define COIN_HAS_READLINE 1 _ACEOF fi LIBS="$coin_save_LIBS" fi echo "$as_me:$LINENO: checking whether this is a VPATH configuration" >&5 echo $ECHO_N "checking whether this is a VPATH configuration... $ECHO_C" >&6 if test `cd $srcdir; pwd` != `pwd`; then coin_vpath_config=yes; else coin_vpath_config=no; fi echo "$as_me:$LINENO: result: $coin_vpath_config" >&5 echo "${ECHO_T}$coin_vpath_config" >&6 # Allow for newlines in the parameter if test $coin_vpath_config = yes; then cvl_tmp="test/plan.mod" for file in $cvl_tmp ; do coin_vpath_link_files="$coin_vpath_link_files $file" done fi ############################################################################# # Check for doxygen # ############################################################################# { echo "$as_me:$LINENO: configuring doxygen documentation options" >&5 echo "$as_me: configuring doxygen documentation options" >&6;} # Check to see if doxygen is available. # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_doxygen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_doxygen"; then ac_cv_prog_coin_have_doxygen="$coin_have_doxygen" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_doxygen="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_doxygen" && ac_cv_prog_coin_have_doxygen="no" fi fi coin_have_doxygen=$ac_cv_prog_coin_have_doxygen if test -n "$coin_have_doxygen"; then echo "$as_me:$LINENO: result: $coin_have_doxygen" >&5 echo "${ECHO_T}$coin_have_doxygen" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_latex+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_latex"; then ac_cv_prog_coin_have_latex="$coin_have_latex" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_latex="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_latex" && ac_cv_prog_coin_have_latex="no" fi fi coin_have_latex=$ac_cv_prog_coin_have_latex if test -n "$coin_have_latex"; then echo "$as_me:$LINENO: result: $coin_have_latex" >&5 echo "${ECHO_T}$coin_have_latex" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Look for the dot tool from the graphviz package, unless the user has # disabled it. # Check whether --with-dot or --without-dot was given. if test "${with_dot+set}" = set; then withval="$with_dot" else withval=yes fi; if test x"$withval" = xno ; then coin_doxy_usedot=NO echo "$as_me:$LINENO: checking for dot " >&5 echo $ECHO_N "checking for dot ... $ECHO_C" >&6 echo "$as_me:$LINENO: result: disabled" >&5 echo "${ECHO_T}disabled" >&6 else # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_doxy_usedot+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_doxy_usedot"; then ac_cv_prog_coin_doxy_usedot="$coin_doxy_usedot" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_doxy_usedot="YES" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_doxy_usedot" && ac_cv_prog_coin_doxy_usedot="NO" fi fi coin_doxy_usedot=$ac_cv_prog_coin_doxy_usedot if test -n "$coin_doxy_usedot"; then echo "$as_me:$LINENO: result: $coin_doxy_usedot" >&5 echo "${ECHO_T}$coin_doxy_usedot" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi # Generate a tag file name and a log file name coin_doxy_tagname=doxydoc/${PACKAGE}_doxy.tag coin_doxy_logname=doxydoc/${PACKAGE}_doxy.log if test $coin_have_doxygen = yes; then COIN_HAS_DOXYGEN_TRUE= COIN_HAS_DOXYGEN_FALSE='#' else COIN_HAS_DOXYGEN_TRUE='#' COIN_HAS_DOXYGEN_FALSE= fi if test $coin_have_latex = yes; then COIN_HAS_LATEX_TRUE= COIN_HAS_LATEX_FALSE='#' else COIN_HAS_LATEX_TRUE='#' COIN_HAS_LATEX_FALSE= fi # Process the list of project names and massage them into possible doxygen # doc'n directories. Prefer 1) classic external, source processed using # a project-specific doxygen.conf, we use the tag file; 2) classic # external, source processed using package doxygen.conf; 3) installed # doxydoc. Alternatives 1) and 2) are only possible if the directory will be # configured, which we can't know unless this is the package base configure, # since coin_subdirs is only set there. Hence it's sufficient to check for # membership. If we use a tag file from a classic external, exclude the # source from doxygen processing when doxygen runs in the base directory. coin_doxy_tagfiles= coin_doxy_excludes= tmp="" for proj in $tmp ; do lc_proj=`echo $proj | tr [A-Z] [a-z]` echo "$as_me:$LINENO: checking for doxygen doc'n for $proj " >&5 echo $ECHO_N "checking for doxygen doc'n for $proj ... $ECHO_C" >&6 doxytag=${lc_proj}_doxy.tag doxyfound=no # proj will be configured, hence doxydoc present in build tree doxysrcdir="${srcdir}/../${proj}" # AC_MSG_NOTICE([Considering $doxysrcdir (base)]) if test -d "$doxysrcdir" ; then # with a doxydoc directory? doxydir="$doxysrcdir/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (base)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) if test -d "$doxydir" ; then # use tag file; don't process source doxydir="../${proj}/doxydoc" coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=../../$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 coin_doxy_excludes="$coin_doxy_excludes */${proj}" else # will process the source -- nothing further to be done here echo "$as_me:$LINENO: result: $doxysrcdir (src)" >&5 echo "${ECHO_T}$doxysrcdir (src)" >&6 fi doxyfound=yes fi # Not built, fall back to installed tag file if test $doxyfound = no ; then eval doxydir="${datadir}/coin/doc/${proj}/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (install)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 fi done ############################################################################## # Finishing up by writing all the output # ############################################################################## # Here list all the files that configure should create (except for the # configuration header file) ac_config_files="$ac_config_files Makefile src/Makefile test/Makefile coinutils.pc coinutils-uninstalled.pc" ac_config_files="$ac_config_files doxydoc/doxygen.conf" # Here put the location and name of the configuration header file ac_config_headers="$ac_config_headers src/config.h src/config_coinutils.h" # Finally, we let configure write all the output... echo "$as_me:$LINENO: checking which command should be used to link input files" >&5 echo $ECHO_N "checking which command should be used to link input files... $ECHO_C" >&6 coin_link_input_cmd="$LN_S" case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_link_input_cmd=cp ;; esac echo "$as_me:$LINENO: result: $coin_link_input_cmd" >&5 echo "${ECHO_T}$coin_link_input_cmd" >&6 if test x$coin_skip_ac_output != xyes; then # library extension case "$CC" in clang* ) LIBEXT=a ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LIBEXT=lib ;; *) LIBEXT=a ;; esac # Define VPATH_DISTCLEANFILES to be everything that needs to be # cleaned for distclean in a vpath configuration VPATH_DISTCLEANFILES="$coin_vpath_link_files" # Take out subdirectories if their configuration concluded that they # don't need to be compiled if test x"$coin_ac_skip_subdirs" != x; then new_subdirs= for i in $subdirs; do skipme=no for j in $coin_ac_skip_subdirs; do if test $i = $j; then skipme=yes; fi done if test $skipme = no; then new_subdirs="$new_subdirs $i" fi done subdirs="$new_subdirs" fi # need to come before AC_OUTPUT if test x$coin_projectdir != xyes; then # write coin_subdirs to a file so that project configuration knows where to find uninstalled projects echo $coin_subdirs > coin_subdirs.txt else # substitute for OBJDIR, needed to setup .pc file for uninstalled project ABSBUILDDIR="`pwd`" fi 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, don't put newlines in cache variables' values. # 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. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *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 \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" 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}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ 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[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${ALWAYS_FALSE_TRUE}" && test -z "${ALWAYS_FALSE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_CC_IS_CL_TRUE}" && test -z "${COIN_CC_IS_CL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_CC_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_CC_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_CXX_IS_CL_TRUE}" && test -z "${COIN_CXX_IS_CL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_CXX_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_CXX_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${HAVE_EXTERNALS_TRUE}" && test -z "${HAVE_EXTERNALS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DEPENDENCY_LINKING_TRUE}" && test -z "${DEPENDENCY_LINKING_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"DEPENDENCY_LINKING\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"DEPENDENCY_LINKING\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_PKGCONFIG_TRUE}" && test -z "${COIN_HAS_PKGCONFIG_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_PKGCONFIG\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_PKGCONFIG\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_BLAS_TRUE}" && test -z "${COIN_HAS_BLAS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_BLAS_TRUE}" && test -z "${COIN_HAS_BLAS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_BLAS_TRUE}" && test -z "${COIN_HAS_BLAS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_BLAS_TRUE}" && test -z "${COIN_HAS_BLAS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_BLAS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LAPACK_TRUE}" && test -z "${COIN_HAS_LAPACK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LAPACK_TRUE}" && test -z "${COIN_HAS_LAPACK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LAPACK_TRUE}" && test -z "${COIN_HAS_LAPACK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LAPACK_TRUE}" && test -z "${COIN_HAS_LAPACK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LAPACK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_GLPK_TRUE}" && test -z "${COIN_HAS_GLPK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_GLPK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_GLPK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_GLPK_TRUE}" && test -z "${COIN_HAS_GLPK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_GLPK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_GLPK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_SAMPLE_TRUE}" && test -z "${COIN_HAS_SAMPLE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_SAMPLE_TRUE}" && test -z "${COIN_HAS_SAMPLE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_NETLIB_TRUE}" && test -z "${COIN_HAS_NETLIB_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_NETLIB_TRUE}" && test -z "${COIN_HAS_NETLIB_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_ZLIB_TRUE}" && test -z "${COIN_HAS_ZLIB_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_ZLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_ZLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_DOXYGEN_TRUE}" && test -z "${COIN_HAS_DOXYGEN_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LATEX_TRUE}" && test -z "${COIN_HAS_LATEX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $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} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by CoinUtils $as_me 2.11.0, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -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 --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_cs_version="\\ CoinUtils config.status 2.11.0 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. 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=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; 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 if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "coinutils.pc" ) CONFIG_FILES="$CONFIG_FILES coinutils.pc" ;; "coinutils-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES coinutils-uninstalled.pc" ;; "doxydoc/doxygen.conf" ) CONFIG_FILES="$CONFIG_FILES doxydoc/doxygen.conf" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "src/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; "src/config_coinutils.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/config_coinutils.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; 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 to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@ALWAYS_FALSE_TRUE@,$ALWAYS_FALSE_TRUE,;t t s,@ALWAYS_FALSE_FALSE@,$ALWAYS_FALSE_FALSE,;t t s,@have_svnversion@,$have_svnversion,;t t s,@COINUTILS_SVN_REV@,$COINUTILS_SVN_REV,;t t s,@CDEFS@,$CDEFS,;t t s,@ADD_CFLAGS@,$ADD_CFLAGS,;t t s,@DBG_CFLAGS@,$DBG_CFLAGS,;t t s,@OPT_CFLAGS@,$OPT_CFLAGS,;t t s,@sol_cc_compiler@,$sol_cc_compiler,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@COIN_CC_IS_CL_TRUE@,$COIN_CC_IS_CL_TRUE,;t t s,@COIN_CC_IS_CL_FALSE@,$COIN_CC_IS_CL_FALSE,;t t s,@MPICC@,$MPICC,;t t s,@CXXDEFS@,$CXXDEFS,;t t s,@ADD_CXXFLAGS@,$ADD_CXXFLAGS,;t t s,@DBG_CXXFLAGS@,$DBG_CXXFLAGS,;t t s,@OPT_CXXFLAGS@,$OPT_CXXFLAGS,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@COIN_CXX_IS_CL_TRUE@,$COIN_CXX_IS_CL_TRUE,;t t s,@COIN_CXX_IS_CL_FALSE@,$COIN_CXX_IS_CL_FALSE,;t t s,@MPICXX@,$MPICXX,;t t s,@ADD_FFLAGS@,$ADD_FFLAGS,;t t s,@DBG_FFLAGS@,$DBG_FFLAGS,;t t s,@OPT_FFLAGS@,$OPT_FFLAGS,;t t s,@F77@,$F77,;t t s,@ac_ct_F77@,$ac_ct_F77,;t t s,@FFLAGS@,$FFLAGS,;t t s,@MPIF77@,$MPIF77,;t t s,@FLIBS@,$FLIBS,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@mkdir_p@,$mkdir_p,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@AMTAR@,$AMTAR,;t t s,@am__tar@,$am__tar,;t t s,@am__untar@,$am__untar,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@CXXDEPMODE@,$CXXDEPMODE,;t t s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t s,@MAINT@,$MAINT,;t t s,@LIBTOOLM4@,$LIBTOOLM4,;t t s,@have_autoconf@,$have_autoconf,;t t s,@have_automake@,$have_automake,;t t s,@have_svn@,$have_svn,;t t s,@BUILDTOOLSDIR@,$BUILDTOOLSDIR,;t t s,@AUX_DIR@,$AUX_DIR,;t t s,@abs_source_dir@,$abs_source_dir,;t t s,@abs_lib_dir@,$abs_lib_dir,;t t s,@abs_include_dir@,$abs_include_dir,;t t s,@abs_bin_dir@,$abs_bin_dir,;t t s,@HAVE_EXTERNALS_TRUE@,$HAVE_EXTERNALS_TRUE,;t t s,@HAVE_EXTERNALS_FALSE@,$HAVE_EXTERNALS_FALSE,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@ECHO@,$ECHO,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@CPP@,$CPP,;t t s,@CXXCPP@,$CXXCPP,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@ac_c_preproc_warn_flag@,$ac_c_preproc_warn_flag,;t t s,@ac_cxx_preproc_warn_flag@,$ac_cxx_preproc_warn_flag,;t t s,@RPATH_FLAGS@,$RPATH_FLAGS,;t t s,@DEPENDENCY_LINKING_TRUE@,$DEPENDENCY_LINKING_TRUE,;t t s,@DEPENDENCY_LINKING_FALSE@,$DEPENDENCY_LINKING_FALSE,;t t s,@LT_LDFLAGS@,$LT_LDFLAGS,;t t s,@PKG_CONFIG@,$PKG_CONFIG,;t t s,@ac_ct_PKG_CONFIG@,$ac_ct_PKG_CONFIG,;t t s,@COIN_HAS_PKGCONFIG_TRUE@,$COIN_HAS_PKGCONFIG_TRUE,;t t s,@COIN_HAS_PKGCONFIG_FALSE@,$COIN_HAS_PKGCONFIG_FALSE,;t t s,@COIN_PKG_CONFIG_PATH@,$COIN_PKG_CONFIG_PATH,;t t s,@COIN_PKG_CONFIG_PATH_UNINSTALLED@,$COIN_PKG_CONFIG_PATH_UNINSTALLED,;t t s,@BLAS_LIBS@,$BLAS_LIBS,;t t s,@BLAS_CFLAGS@,$BLAS_CFLAGS,;t t s,@BLAS_DATA@,$BLAS_DATA,;t t s,@BLAS_DEPENDENCIES@,$BLAS_DEPENDENCIES,;t t s,@BLAS_LIBS_INSTALLED@,$BLAS_LIBS_INSTALLED,;t t s,@BLAS_CFLAGS_INSTALLED@,$BLAS_CFLAGS_INSTALLED,;t t s,@BLAS_DATA_INSTALLED@,$BLAS_DATA_INSTALLED,;t t s,@COINUTILSLIB_CFLAGS@,$COINUTILSLIB_CFLAGS,;t t s,@COINUTILSLIB_LIBS@,$COINUTILSLIB_LIBS,;t t s,@COINUTILSLIB_PCLIBS@,$COINUTILSLIB_PCLIBS,;t t s,@COINUTILSLIB_PCREQUIRES@,$COINUTILSLIB_PCREQUIRES,;t t s,@COINUTILSLIB_DEPENDENCIES@,$COINUTILSLIB_DEPENDENCIES,;t t s,@COINUTILSLIB_CFLAGS_INSTALLED@,$COINUTILSLIB_CFLAGS_INSTALLED,;t t s,@COINUTILSLIB_LIBS_INSTALLED@,$COINUTILSLIB_LIBS_INSTALLED,;t t s,@COIN_HAS_BLAS_TRUE@,$COIN_HAS_BLAS_TRUE,;t t s,@COIN_HAS_BLAS_FALSE@,$COIN_HAS_BLAS_FALSE,;t t s,@LAPACK_LIBS@,$LAPACK_LIBS,;t t s,@LAPACK_CFLAGS@,$LAPACK_CFLAGS,;t t s,@LAPACK_DATA@,$LAPACK_DATA,;t t s,@LAPACK_DEPENDENCIES@,$LAPACK_DEPENDENCIES,;t t s,@LAPACK_LIBS_INSTALLED@,$LAPACK_LIBS_INSTALLED,;t t s,@LAPACK_CFLAGS_INSTALLED@,$LAPACK_CFLAGS_INSTALLED,;t t s,@LAPACK_DATA_INSTALLED@,$LAPACK_DATA_INSTALLED,;t t s,@COIN_HAS_LAPACK_TRUE@,$COIN_HAS_LAPACK_TRUE,;t t s,@COIN_HAS_LAPACK_FALSE@,$COIN_HAS_LAPACK_FALSE,;t t s,@GLPK_LIBS@,$GLPK_LIBS,;t t s,@GLPK_CFLAGS@,$GLPK_CFLAGS,;t t s,@GLPK_DATA@,$GLPK_DATA,;t t s,@GLPK_DEPENDENCIES@,$GLPK_DEPENDENCIES,;t t s,@GLPK_LIBS_INSTALLED@,$GLPK_LIBS_INSTALLED,;t t s,@GLPK_CFLAGS_INSTALLED@,$GLPK_CFLAGS_INSTALLED,;t t s,@GLPK_DATA_INSTALLED@,$GLPK_DATA_INSTALLED,;t t s,@COIN_HAS_GLPK_TRUE@,$COIN_HAS_GLPK_TRUE,;t t s,@COIN_HAS_GLPK_FALSE@,$COIN_HAS_GLPK_FALSE,;t t s,@SAMPLE_LIBS@,$SAMPLE_LIBS,;t t s,@SAMPLE_CFLAGS@,$SAMPLE_CFLAGS,;t t s,@SAMPLE_DATA@,$SAMPLE_DATA,;t t s,@SAMPLE_DEPENDENCIES@,$SAMPLE_DEPENDENCIES,;t t s,@SAMPLE_LIBS_INSTALLED@,$SAMPLE_LIBS_INSTALLED,;t t s,@SAMPLE_CFLAGS_INSTALLED@,$SAMPLE_CFLAGS_INSTALLED,;t t s,@SAMPLE_DATA_INSTALLED@,$SAMPLE_DATA_INSTALLED,;t t s,@COIN_HAS_SAMPLE_TRUE@,$COIN_HAS_SAMPLE_TRUE,;t t s,@COIN_HAS_SAMPLE_FALSE@,$COIN_HAS_SAMPLE_FALSE,;t t s,@NETLIB_LIBS@,$NETLIB_LIBS,;t t s,@NETLIB_CFLAGS@,$NETLIB_CFLAGS,;t t s,@NETLIB_DATA@,$NETLIB_DATA,;t t s,@NETLIB_DEPENDENCIES@,$NETLIB_DEPENDENCIES,;t t s,@NETLIB_LIBS_INSTALLED@,$NETLIB_LIBS_INSTALLED,;t t s,@NETLIB_CFLAGS_INSTALLED@,$NETLIB_CFLAGS_INSTALLED,;t t s,@NETLIB_DATA_INSTALLED@,$NETLIB_DATA_INSTALLED,;t t s,@COIN_HAS_NETLIB_TRUE@,$COIN_HAS_NETLIB_TRUE,;t t s,@COIN_HAS_NETLIB_FALSE@,$COIN_HAS_NETLIB_FALSE,;t t s,@COIN_HAS_ZLIB_TRUE@,$COIN_HAS_ZLIB_TRUE,;t t s,@COIN_HAS_ZLIB_FALSE@,$COIN_HAS_ZLIB_FALSE,;t t s,@coin_have_doxygen@,$coin_have_doxygen,;t t s,@coin_have_latex@,$coin_have_latex,;t t s,@coin_doxy_usedot@,$coin_doxy_usedot,;t t s,@coin_doxy_tagname@,$coin_doxy_tagname,;t t s,@coin_doxy_logname@,$coin_doxy_logname,;t t s,@COIN_HAS_DOXYGEN_TRUE@,$COIN_HAS_DOXYGEN_TRUE,;t t s,@COIN_HAS_DOXYGEN_FALSE@,$COIN_HAS_DOXYGEN_FALSE,;t t s,@COIN_HAS_LATEX_TRUE@,$COIN_HAS_LATEX_TRUE,;t t s,@COIN_HAS_LATEX_FALSE@,$COIN_HAS_LATEX_FALSE,;t t s,@coin_doxy_tagfiles@,$coin_doxy_tagfiles,;t t s,@coin_doxy_excludes@,$coin_doxy_excludes,;t t s,@LIBEXT@,$LIBEXT,;t t s,@VPATH_DISTCLEANFILES@,$VPATH_DISTCLEANFILES,;t t s,@ABSBUILDDIR@,$ABSBUILDDIR,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # 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. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;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,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #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. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # 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. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi # Compute $ac_file's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $ac_file | $ac_file:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X$ac_file : 'X\(//\)[^/]' \| \ X$ac_file : 'X\(//\)$' \| \ X$ac_file : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X$ac_file | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'`/stamp-h$_am_stamp_count done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; 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. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || 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"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # 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 || { (exit 1); exit 1; } fi if test x"$coin_vpath_link_files" = x; then : ; else lnkcmd="$coin_link_input_cmd" if test "$lnkcmd" = cp; then { echo "$as_me:$LINENO: Copying data files for VPATH configuration" >&5 echo "$as_me: Copying data files for VPATH configuration" >&6;} else { echo "$as_me:$LINENO: Creating VPATH links for data files" >&5 echo "$as_me: Creating VPATH links for data files" >&6;} fi for file in $coin_vpath_link_files; do dir=`(dirname "./$file") 2>/dev/null || $as_expr X"./$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"./$file" : 'X\(//\)[^/]' \| \ X"./$file" : 'X\(//\)$' \| \ X"./$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"./$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test -d $dir; then : ; else { if $as_mkdir_p; then mkdir -p $dir else as_dir=$dir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dir" >&5 echo "$as_me: error: cannot create directory $dir" >&2;} { (exit 1); exit 1; }; }; } fi rm -f $file $lnkcmd $abs_source_dir/$file $file done fi { echo "$as_me:$LINENO: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&5 echo "$as_me: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&6;} if test x$coin_projectdir = xyes; then { echo "$as_me:$LINENO: Configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Configuration of $PACKAGE_NAME successful" >&6;} else { echo "$as_me:$LINENO: Main configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Main configuration of $PACKAGE_NAME successful" >&6;} fi else { echo "$as_me:$LINENO: No configuration of $PACKAGE_NAME necessary" >&5 echo "$as_me: No configuration of $PACKAGE_NAME necessary" >&6;} fi DyLP-1.10.4/CoinUtils/LICENSE0000644000175200017520000002622711507200411013771 0ustar coincoinEclipse 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. DyLP-1.10.4/CoinUtils/Makefile.in0000644000175200017520000010173412504677023015045 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 # Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 ######################################################################## # Documentation installation # ######################################################################## srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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@ # We don't want to compile the test subdirectory, unless the test target is # specified. But we need to list it as subdirectory to make sure that it is # included in the tarball @ALWAYS_FALSE@am__append_1 = test DIST_COMMON = README $(am__configure_deps) \ $(srcdir)/BuildTools/Makemain.inc $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/coinutils-uninstalled.pc.in \ $(srcdir)/coinutils.pc.in $(top_srcdir)/configure \ $(top_srcdir)/doxydoc/doxygen.conf.in AUTHORS INSTALL \ config.guess config.sub depcomp install-sh ltmain.sh missing @HAVE_EXTERNALS_TRUE@am__append_2 = Dependencies @HAVE_EXTERNALS_TRUE@am__append_3 = .Dependencies-stamp subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.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 configure.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/src/config_coinutils.h CONFIG_CLEAN_FILES = coinutils.pc coinutils-uninstalled.pc \ doxydoc/doxygen.conf SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive 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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(pkgconfiglibdir)" pkgconfiglibDATA_INSTALL = $(INSTALL_DATA) DATA = $(pkgconfiglib_DATA) ETAGS = etags CTAGS = ctags DIST_SUBDIRS = src test DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ADD_FFLAGS = @ADD_FFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BLAS_CFLAGS = @BLAS_CFLAGS@ BLAS_CFLAGS_INSTALLED = @BLAS_CFLAGS_INSTALLED@ BLAS_DATA = @BLAS_DATA@ BLAS_DATA_INSTALLED = @BLAS_DATA_INSTALLED@ BLAS_DEPENDENCIES = @BLAS_DEPENDENCIES@ BLAS_LIBS = @BLAS_LIBS@ BLAS_LIBS_INSTALLED = @BLAS_LIBS_INSTALLED@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILSLIB_CFLAGS = @COINUTILSLIB_CFLAGS@ COINUTILSLIB_CFLAGS_INSTALLED = @COINUTILSLIB_CFLAGS_INSTALLED@ COINUTILSLIB_DEPENDENCIES = @COINUTILSLIB_DEPENDENCIES@ COINUTILSLIB_LIBS = @COINUTILSLIB_LIBS@ COINUTILSLIB_LIBS_INSTALLED = @COINUTILSLIB_LIBS_INSTALLED@ COINUTILSLIB_PCLIBS = @COINUTILSLIB_PCLIBS@ COINUTILSLIB_PCREQUIRES = @COINUTILSLIB_PCREQUIRES@ COINUTILS_SVN_REV = @COINUTILS_SVN_REV@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_BLAS_FALSE = @COIN_HAS_BLAS_FALSE@ COIN_HAS_BLAS_TRUE = @COIN_HAS_BLAS_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_LAPACK_FALSE = @COIN_HAS_LAPACK_FALSE@ COIN_HAS_LAPACK_TRUE = @COIN_HAS_LAPACK_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_ZLIB_FALSE = @COIN_HAS_ZLIB_FALSE@ COIN_HAS_ZLIB_TRUE = @COIN_HAS_ZLIB_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DBG_FFLAGS = @DBG_FFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ FLIBS = @FLIBS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAPACK_CFLAGS = @LAPACK_CFLAGS@ LAPACK_CFLAGS_INSTALLED = @LAPACK_CFLAGS_INSTALLED@ LAPACK_DATA = @LAPACK_DATA@ LAPACK_DATA_INSTALLED = @LAPACK_DATA_INSTALLED@ LAPACK_DEPENDENCIES = @LAPACK_DEPENDENCIES@ LAPACK_LIBS = @LAPACK_LIBS@ LAPACK_LIBS_INSTALLED = @LAPACK_LIBS_INSTALLED@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MPIF77 = @MPIF77@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OPT_FFLAGS = @OPT_FFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # Subdirectories # ######################################################################## SUBDIRS = src $(am__append_1) ######################################################################## # Additional files to be included in tarball # ######################################################################## # Here we need include all files that are not mentioned in other Makefiles EXTRA_DIST = $(am__append_2) ######################################################################## # Installation of the addlibs and .pc file # ######################################################################## pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = coinutils.pc addlibsdir = $(DESTDIR)$(datadir)/coin/doc/CoinUtils ######################################################################## # Maintainer Stuff # ######################################################################## CLEANFILES = # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = $(am__append_3) $(VPATH_DISTCLEANFILES) DocFiles = README AUTHORS LICENSE DocInstallDir = $(datadir)/coin/doc/$(PACKAGE_NAME) COIN_HAS_DOXYGEN = @COIN_HAS_DOXYGEN_TRUE@TRUE COIN_HAS_LATEX = @COIN_HAS_LATEX_TRUE@TRUE all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/BuildTools/Makemain.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ cd $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ 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) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) coinutils.pc: $(top_builddir)/config.status $(srcdir)/coinutils.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ coinutils-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/coinutils-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ doxydoc/doxygen.conf: $(top_builddir)/config.status $(top_srcdir)/doxydoc/doxygen.conf.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-pkgconfiglibDATA: $(pkgconfiglib_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfiglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfiglibdir)" @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(pkgconfiglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ $(pkgconfiglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done uninstall-pkgconfiglibDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ rm -f "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done # 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. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; 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; \ (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" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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 || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/. $(distdir)/BuildTools $(distdir)/doxydoc @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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 \ test -d "$(distdir)/$$subdir" \ || $(mkdir_p) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -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 $(SHELL) $(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__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__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) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(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 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { 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)$(pkgconfiglibdir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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 clean-local 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 info: info-recursive info-am: install-data-am: install-pkgconfiglibDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-exec-am: install-exec-local install-info: install-info-recursive install-man: 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-info-am uninstall-local \ uninstall-pkgconfiglibDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ check-am clean clean-generic clean-libtool clean-local \ clean-recursive ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \ distclean-generic distclean-libtool distclean-local \ distclean-recursive distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-hook install-exec install-exec-am \ install-exec-local install-info install-info-am install-man \ install-pkgconfiglibDATA install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic maintainer-clean-recursive \ mostlyclean mostlyclean-generic mostlyclean-libtool \ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-hook uninstall-info-am \ uninstall-local uninstall-pkgconfiglibDATA ######################################################################## # Extra Targets # ######################################################################## test: all cd test; $(MAKE) test unitTest: test # Doxygen documentation doxydoc: doxygen doxydoc/doxygen.conf clean-doxydoc: ( cd doxydoc ; rm -rf html *.log *.tag ) clean-local: clean-doxydoc if test -r test/Makefile; then cd test; $(MAKE) clean; fi distclean-local: if test -r test/Makefile; then cd test; $(MAKE) distclean; fi install-exec-local: install-doc uninstall-local: uninstall-doc .PHONY: test unitTest doxydoc install-data-hook: @$(mkdir_p) "$(addlibsdir)" @COIN_HAS_PKGCONFIG_TRUE@ PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@:$(DESTDIR)$(pkgconfiglibdir) \ @COIN_HAS_PKGCONFIG_TRUE@ "$(PKG_CONFIG)" --libs coinutils > $(addlibsdir)/coinutils_addlibs.txt @COIN_CXX_IS_CL_TRUE@@COIN_HAS_PKGCONFIG_FALSE@ echo "-libpath:`$(CYGPATH_W) @abs_lib_dir@` libCoinUtils.lib @COINUTILSLIB_LIBS_INSTALLED@" > $(addlibsdir)/coinutils_addlibs.txt @COIN_CXX_IS_CL_FALSE@@COIN_HAS_PKGCONFIG_FALSE@ echo -L@abs_lib_dir@ -lCoinUtils @COINUTILSLIB_LIBS_INSTALLED@ > $(addlibsdir)/coinutils_addlibs.txt uninstall-hook: rm -f $(addlibsdir)/coinutils_addlibs.txt doxygen-docs: if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ doxygen doxydoc/doxygen.conf;\ fi;\ fi pdf-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/latex"; then \ if test "$(COIN_HAS_LATEX)" = TRUE; then \ cd doxydoc/latex;\ $(MAKE) pdf;\ cd -;\ fi;\ fi;\ fi clean-doxygen-docs: if test -d "doxydoc/"; then \ cd doxydoc ;\ rm -rf html latex *.log *.tag;\ fi install-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc"; \ $(INSTALL_DATA) @coin_doxy_tagname@ "$(DESTDIR)$(DocInstallDir)/@coin_doxy_tagname@";\ if test -f "doxydoc/latex/refman.pdf"; then \ $(INSTALL_DATA) doxydoc/latex/refman.pdf "$(DESTDIR)$(DocInstallDir)";\ fi;\ if test -d "doxydoc/html"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/search/" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc/search/"; \ $(INSTALL_DATA) doxydoc/html/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc";\ $(INSTALL_DATA) doxydoc/html/search/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc/search";\ fi;\ fi;\ fi uninstall-doxygen-docs: if test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/"; then \ rm -rf "$(DESTDIR)$(DocInstallDir)/doxydoc/"; \ fi if test -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; then \ rm -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; \ fi all-doxygen-docs: for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) doxygen-docs) \ fi ; \ done ; clean-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) clean-doxygen-docs) \ fi ; \ done ; install-all-doxygen-docs: all-doxygen-docs for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) install-doxygen-docs) \ fi ; \ done ; uninstall-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) uninstall-doxygen-docs) \ fi ; \ done ; install-doc: $(DocFiles) test -z "$(DocInstallDir)" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)" for file in $(DocFiles); do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ if test -f "$$dir$$file"; then $(INSTALL_DATA) "$$dir$$file" "$(DESTDIR)$(DocInstallDir)/$$file"; fi; \ done uninstall-doc: for file in $(DocFiles); do \ rm -f "$(DESTDIR)$(DocInstallDir)/$$file"; \ done ######################################################################## # Maintainer Stuff # ######################################################################## # Make sure acinclude is using most recent coin.m4 @MAINTAINER_MODE_TRUE@$(srcdir)/acinclude.m4: $(BUILDTOOLSDIR)/coin.m4 @MAINTAINER_MODE_TRUE@ cat $(LIBTOOLM4) $< > $@ # Make sure the autotools scripts are up to date @MAINTAINER_MODE_TRUE@$(AUX_DIR)/install-sh: $(BUILDTOOLSDIR)/install-sh @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/missing: $(BUILDTOOLSDIR)/missing @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.guess: $(BUILDTOOLSDIR)/config.guess @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.sub: $(BUILDTOOLSDIR)/config.sub @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/depcomp: $(BUILDTOOLSDIR)/depcomp @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/ltmain.sh: $(BUILDTOOLSDIR)/ltmain.sh @MAINTAINER_MODE_TRUE@ cp $< $@ # Take care of updating externals (if Dependencies file exists) @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@$(top_builddir)/Makefile: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@.Dependencies-stamp: $(srcdir)/Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); BuildTools/set_externals Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ touch .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@update-externals: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); svn update .PHONY: install-doc uninstall-doc update-externals # 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: DyLP-1.10.4/Osi/0000755000175200017520000000000013434203624011606 5ustar coincoinDyLP-1.10.4/Osi/AUTHORS0000644000175200017520000000027710625200560012657 0ustar coincoinFasano, J.P. Forrest, John J. Hafer, Lou Ladanyi, Laszlo Lannez, Sebastien (OsiCuts insert method) Margot, Francois Saltzman, Matt Ralphs, Ted Walton, Philip (trait specification of OsiCuts) DyLP-1.10.4/Osi/depcomp0000755000175200017520000003710011405216166013165 0ustar coincoin#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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 outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac 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" # 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 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. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## 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). ## - 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 -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## 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. tr ' ' ' ' < "$tmpdepfile" | ## 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. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -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 -eq 0; then : else 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 ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; 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. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else 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" ;; 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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in 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.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #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 $1 != '--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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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 $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac 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. -*|$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" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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 $1 != '--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, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; 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-end: "$" # End: DyLP-1.10.4/Osi/CHANGELOG0000644000175200017520000001250513421763114013024 0ustar coincoin23/01/2018 OsiMsk - add compatibility with Mosek 9.0 beta 20/04/2017 OsiSpx - add compatibility with SoPlex 3.0 31/05/2016 OsiMsk - get it compiling with Mosek 8 beta (conic MIP only with Mosek 7, MSK_initenv() removed) 18/05/2016 OsiCpx - switch from deprecated CPXcopymipstart to CPXaddmipstarts 10/03/2016 OsiMsk - improved performance of frequently called checkMSKerror() and MSKassert() functions (contributed by Geoff Leyland) 17/02/2016 OsiCpx - fixed handling of cplex message callbacks in OsiCpx::reset() 15/02/2016 OsiCpx - fixed OsiCpx::getRowActivity() when solved a MIP 09/06/2015 OsiSpx - added compatibility with SoPlex 2.2 - added OsiSpx::getLpPtr() 12/06/2014 OsiSpx - added compatibility with SoPlex 2.0 (using SoPlex legacy interface) 10/02/2014 OsiMsk - fixed bug in OsiMsk::getPrimalRays() when number of rows < number of columns 17/01/2014 OsiGrb - fixed bug in OsiGrb::deleteCols() where the columns types got lost 11/18/2013 OsiMsk - changed MIP optimizer to Mosek's own conic MIP optimizer, if Mosek version >= 7 09/11/2013 OsiCpx - fixed getIterationCount() for MIPs (use CPXgetmipitcnt instead of CPXgetitcnt) 08/30/2013 OsiGrb - fixed bug in getObjectiveCoefficients and getBasisStatus for LPs without ranged rows 08/23/2013 OsiGrb - fixed bug in deleting row or column names when deleting several rows/columns at once 04/02/2013 OsiMsk - update to work with Mosek 7, too (contributed by Erling D. Andersen) 02/02/2013 OsiUnitTest - replace macro for asserting a condition and collecting its outcome by a function to improve compilation speed (contributed by Victor Zverovich) 29/11/2012 OsiMsk - added getRescode() to get result code of last MSK_optimize call 21/11/2012 OsiCpx - calling setWarmStart with a too small basis now disables the use of an advanced basis for the next LP solve 20/11/2012 OsiGlpk, OsiCpx - workaround problem in Glpk with empty problem name (patch by Bertrand Le Cun) - not using CPXsolninfo for MIPs with CPLEX < 11.0 anymore 25/07/2012 OsiGrb - fix mipstart option in OsiGrb: pass only values for discrete variables to Gurobi 26/11/2011 OsiGrb - add implementation of OsiGrb::applyCuts that batches the row cuts before transfering them to Gurobi 12/11/2011 OsiSpx - add resolve with cleared basis if solve fails with exception (which may be due to a singular startbasis), needs SoPlex >= 1.5.0.7 03/09/2011 OsiMsk - fix bug in one loadProblem method when NULL was passed as row range array 30/07/2011 Osi - fix writing LP files with names: the objective name was not copied, leading to a segfault in CoinLpIO 30/07/2011 OsiSpx, OsiGlpk - allow NULLs for row* arguments in some loadProblem call 28/07/2011 OsiSpx - invert dual ray in getDualRays to match Osi definition when testing infeasibility proof 12/07/2011 MSVisualStudio - updated MSVC++ v10 project files to catch up with buildsystem changes 25/06/2011 Osi - add generic implementations of is{Primal,Dual}ObjectiveLimitReached 25/06/2011 OsiCommonTest - add unittest command line parameter -onerror to specify behaviour in case of a failing test 23/06/2011 OsiMsk - add isLicenseError() to check whether last solve was abandoned due to a mosek licensing issue 22/06/2011 OsiCpx - fix handling of primal/dual objective limit so it correctly takes objoffset into account - preserve objective sense also when empty model is loaded - make sure getWarmStart returns proper atlower/atupper status for inequalities 13/06/2011 OsiCommonTest, unittest - removed now redundant counting of unittest failures, so test functions now return void 03/06/2011 OsiMsk - fix caching flags (bitwise negation is ~, not !) - free all cached data when loading problem - fix getDualRay and getPrimalRay so they should return a ray now - fixed various further issues in unittest, so OsiMsk passes it now 15/05/2011 OsiXpr - added option (mipstart) to pass column solution as initial solution to a MIP solve 30/04/2011 OsiCpx, OsiGrb - added option (mipstart) to pass column solution as initial solution to a MIP solve 29/04/2011 OsiMsk - fix loss of Mosek task when copying OsiMsk 25/04/2011 OsiSpx - add methods to set/get/check timelimit - fix bug in solve methods where cached result vectors where not cleared - fix setWarmStart to swap status for slack variables as in getWarmStart - fix caching flags (bitwise negation is ~, not !) - redirect set/get name discipline to base class - fix primal/dual objective limit: take objoffset into account, correct check if limit changed after solve - getColSolution and getObjValue now return lower bound and value in lower bound before solve 01/04/2011 OsiGlpk - if initial basis is invalid or singular in initialSolve or resolve, construct advanced basis and try again 31/03/2011 OsiGrb - fixed handling of free variables in setWarmStart 30/03/2011 OsiGrb - fixed memory leak in loadProblem 21/03/2011 OsiCommonTest, unittest - add classes TestOutcome{s} to collect outcome of unittests - add macros to simplify asserts and exception catching and storing results as TestOutcome - change general and OsiGlpk tests to use new macros - return number of unexpected errors as return code of unittest - add parameter -verbosity to unittest to specify amount of output of unittests - a bit cleanup 21/03/2011 started CHANGELOG DyLP-1.10.4/Osi/src/0000755000175200017520000000000013434203623012374 5ustar coincoinDyLP-1.10.4/Osi/src/OsiCommonTest/0000755000175200017520000000000013434203623015137 5ustar coincoinDyLP-1.10.4/Osi/src/OsiCommonTest/OsiColCutTest.cpp0000644000175200017520000002566113432644766020400 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). //#include //#include //#include #include "CoinPragma.hpp" #include "OsiUnitTests.hpp" #include "OsiColCut.hpp" //-------------------------------------------------------------------------- void OsiColCutUnitTest(const OsiSolverInterface *baseSiP, const std::string &mpsDir) { // Test default constructor { OsiColCut r; OSIUNITTEST_ASSERT_ERROR(r.lbs_.getIndices() == NULL, {}, "osicolcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.lbs_.getElements() == NULL, {}, "osicolcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.lbs_.getNumElements() == 0, {}, "osicolcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.lbs().getNumElements() == 0, {}, "osicolcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.ubs_.getIndices() == NULL, {}, "osicolcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.ubs_.getElements() == NULL, {}, "osicolcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.ubs_.getNumElements() == 0, {}, "osicolcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.ubs().getNumElements() == 0, {}, "osicolcut", "default constructor"); } // Test set and get methods const int ne = 4; int inx[ne] = { 1, 3, 4, 7 }; double el[ne] = { 1.2, 3.4, 5.6, 7.8 }; const int ne3 = 0; int *inx3 = NULL; double *el3 = NULL; { OsiColCut r; // Test setting/getting bounds r.setLbs(ne, inx, el); r.setEffectiveness(222.); OSIUNITTEST_ASSERT_ERROR(r.lbs().getNumElements() == ne, return, "osicolcut", "setting bounds"); bool bounds_ok = true; for (int i = 0; i < ne; i++) { bounds_ok &= r.lbs().getIndices()[i] == inx[i]; bounds_ok &= r.lbs().getElements()[i] == el[i]; } OSIUNITTEST_ASSERT_ERROR(bounds_ok, {}, "osicolcut", "setting bounds"); OSIUNITTEST_ASSERT_ERROR(r.effectiveness() == 222.0, {}, "osicolcut", "setting bounds"); r.setUbs(ne3, inx3, el3); OSIUNITTEST_ASSERT_ERROR(r.ubs().getNumElements() == 0, {}, "osicolcut", "setting bounds"); OSIUNITTEST_ASSERT_ERROR(r.ubs().getIndices() == NULL, {}, "osicolcut", "setting bounds"); OSIUNITTEST_ASSERT_ERROR(r.ubs().getElements() == NULL, {}, "osicolcut", "setting bounds"); } // Test copy constructor and assignment operator { OsiColCut rhs; { OsiColCut r; OsiColCut rC1(r); OSIUNITTEST_ASSERT_ERROR(rC1.lbs().getNumElements() == r.lbs().getNumElements(), {}, "osicolcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC1.ubs().getNumElements() == r.ubs().getNumElements(), {}, "osicolcut", "copy constructor"); r.setLbs(ne, inx, el); r.setUbs(ne, inx, el); r.setEffectiveness(121.); OSIUNITTEST_ASSERT_ERROR(rC1.lbs().getNumElements() != r.lbs().getNumElements(), {}, "osicolcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC1.ubs().getNumElements() != r.lbs().getNumElements(), {}, "osicolcut", "copy constructor"); OsiColCut rC2(r); OSIUNITTEST_ASSERT_ERROR(rC2.lbs().getNumElements() == r.lbs().getNumElements(), {}, "osicolcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC2.ubs().getNumElements() == r.ubs().getNumElements(), {}, "osicolcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC2.lbs().getNumElements() == ne, return, "osicolcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC2.ubs().getNumElements() == ne, return, "osicolcut", "copy constructor"); bool bounds_ok = true; for (int i = 0; i < ne; i++) { bounds_ok &= rC2.lbs().getIndices()[i] == inx[i]; bounds_ok &= rC2.lbs().getElements()[i] == el[i]; bounds_ok &= rC2.ubs().getIndices()[i] == inx[i]; bounds_ok &= rC2.ubs().getElements()[i] == el[i]; } OSIUNITTEST_ASSERT_ERROR(bounds_ok, {}, "osicolcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC2.effectiveness() == 121.0, {}, "osicolcut", "copy constructor"); rhs = rC2; } // Test that rhs has correct values even though lhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(rhs.lbs().getNumElements() == ne, return, "osicolcut", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(rhs.ubs().getNumElements() == ne, return, "osicolcut", "assignment operator"); bool bounds_ok = true; for (int i = 0; i < ne; i++) { bounds_ok &= rhs.lbs().getIndices()[i] == inx[i]; bounds_ok &= rhs.lbs().getElements()[i] == el[i]; bounds_ok &= rhs.ubs().getIndices()[i] == inx[i]; bounds_ok &= rhs.ubs().getElements()[i] == el[i]; } OSIUNITTEST_ASSERT_ERROR(bounds_ok, {}, "osicolcut", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(rhs.effectiveness() == 121.0, {}, "osicolcut", "assignment operator"); } // Test setting bounds with packed vector and operator== { const int ne1 = 4; int inx1[ne] = { 1, 3, 4, 7 }; double el1[ne] = { 1.2, 3.4, 5.6, 7.8 }; const int ne2 = 2; int inx2[ne2] = { 1, 3 }; double el2[ne2] = { 1.2, 3.4 }; CoinPackedVector v1, v2; v1.setVector(ne1, inx1, el1); v2.setVector(ne2, inx2, el2); OsiColCut c1, c2; OSIUNITTEST_ASSERT_ERROR(c1 == c2, {}, "osicolcut", "setting bounds with packed vector and operator =="); OSIUNITTEST_ASSERT_ERROR(!(c1 != c2), {}, "osicolcut", "setting bounds with packed vector and operator !="); c1.setLbs(v1); OSIUNITTEST_ASSERT_ERROR(c1 != c2, {}, "osicolcut", "setting bounds with packed vector and operator !="); OSIUNITTEST_ASSERT_ERROR(!(c1 == c2), {}, "osicolcut", "setting bounds with packed vector and operator =="); OSIUNITTEST_ASSERT_ERROR(c1.lbs() == v1, {}, "osicolcut", "setting bounds with packed vector and operator !="); c1.setUbs(v2); OSIUNITTEST_ASSERT_ERROR(c1.ubs() == v2, {}, "osicolcut", "setting bounds with packed vector and operator !="); c1.setEffectiveness(3.); OSIUNITTEST_ASSERT_ERROR(c1.effectiveness() == 3.0, {}, "osicolcut", "setting bounds with packed vector and operator !="); { OsiColCut c3(c1); OSIUNITTEST_ASSERT_ERROR(c3 == c1, {}, "osicolcut", "operator =="); OSIUNITTEST_ASSERT_ERROR(!(c3 != c1), {}, "osicolcut", "operator !="); } { OsiColCut c3(c1); c3.setLbs(v2); OSIUNITTEST_ASSERT_ERROR(c3 != c1, {}, "osicolcut", "operator !="); OSIUNITTEST_ASSERT_ERROR(!(c3 == c1), {}, "osicolcut", "operator =="); } { OsiColCut c3(c1); c3.setUbs(v1); OSIUNITTEST_ASSERT_ERROR(c3 != c1, {}, "osicolcut", "operator !="); OSIUNITTEST_ASSERT_ERROR(!(c3 == c1), {}, "osicolcut", "operator =="); } { OsiColCut c3(c1); c3.setEffectiveness(5.); OSIUNITTEST_ASSERT_ERROR(c3 != c1, {}, "osicolcut", "operator !="); OSIUNITTEST_ASSERT_ERROR(!(c3 == c1), {}, "osicolcut", "operator =="); } } // internal consistency { const int ne = 1; int inx[ne] = { -3 }; double el[ne] = { 1.2 }; OsiColCut r; r.setLbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!r.consistent(), {}, "osicolcut", "consistent"); } { const int ne = 1; int inx[ne] = { -3 }; double el[ne] = { 1.2 }; OsiColCut r; r.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!r.consistent(), {}, "osicolcut", "consistent"); } { const int ne = 1; int inx[ne] = { 100 }; double el[ne] = { 1.2 }; const int ne1 = 2; int inx1[ne1] = { 50, 100 }; double el1[ne1] = { 100., 100. }; OsiColCut r; r.setUbs(ne, inx, el); r.setLbs(ne1, inx1, el1); OSIUNITTEST_ASSERT_ERROR(r.consistent(), {}, "osicolcut", "consistent"); OsiSolverInterface *imP = baseSiP->clone(); assert(imP != NULL); std::string fn = mpsDir + "exmip1"; imP->readMps(fn.c_str(), "mps"); OSIUNITTEST_ASSERT_ERROR(!r.consistent(*imP), {}, "osicolcut", "consistent"); delete imP; } { const int ne = 1; int inx[ne] = { 100 }; double el[ne] = { 1.2 }; const int ne1 = 2; int inx1[ne1] = { 50, 100 }; double el1[ne1] = { 100., 1. }; OsiColCut r; r.setUbs(ne, inx, el); r.setLbs(ne1, inx1, el1); OSIUNITTEST_ASSERT_ERROR(r.consistent(), {}, "osicolcut", "consistent"); } { // Test consistent(IntegerModel) method. OsiSolverInterface *imP = baseSiP->clone(); assert(imP != NULL); std::string fn = mpsDir + "exmip1"; imP->readMps(fn.c_str(), "mps"); OsiColCut cut; const int ne = 1; int inx[ne] = { 20 }; double el[ne] = { 0.25 }; cut.setLbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!cut.consistent(*imP), {}, "osicolcut", "consistent(IntegerModel)"); cut.setLbs(0, NULL, NULL); cut.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!cut.consistent(*imP), {}, "osicolcut", "consistent(IntegerModel)"); inx[0] = 4; cut.setLbs(ne, inx, el); cut.setUbs(0, NULL, NULL); OSIUNITTEST_ASSERT_ERROR(cut.consistent(*imP), {}, "osicolcut", "consistent(IntegerModel)"); el[0] = 4.5; cut.setLbs(0, NULL, NULL); cut.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.consistent(*imP), {}, "osicolcut", "consistent(IntegerModel)"); cut.setLbs(ne, inx, el); cut.setUbs(0, NULL, NULL); OSIUNITTEST_ASSERT_ERROR(cut.consistent(*imP), {}, "osicolcut", "consistent(IntegerModel)"); OSIUNITTEST_ASSERT_ERROR(cut.infeasible(*imP), {}, "osicolcut", "infeasible(IntegerModel)"); el[0] = 3.0; cut.setLbs(ne, inx, el); cut.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.consistent(*imP), {}, "osicolcut", "consistent(IntegerModel)"); delete imP; } { //Test infeasible(im) method // Test consistent(IntegerModel) method. OsiSolverInterface *imP = baseSiP->clone(); assert(imP != NULL); std::string fn = mpsDir + "exmip1"; imP->readMps(fn.c_str(), "mps"); OsiColCut cut; const int ne = 1; int inx[ne] = { 4 }; double el[ne] = { 4.5 }; cut.setLbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.infeasible(*imP), {}, "osicolcut", "infeasible(IntegerModel)"); el[0] = 0.25; cut.setLbs(0, NULL, NULL); cut.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.infeasible(*imP), {}, "osicolcut", "infeasible(IntegerModel)"); el[0] = 3.0; cut.setLbs(ne, inx, el); cut.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!cut.infeasible(*imP), {}, "osicolcut", "infeasible(IntegerModel)"); delete imP; } { //Test violation double solution[] = { 1.0 }; OsiColCut cut; const int ne = 1; int inx[ne] = { 0 }; double el[ne] = { 4.5 }; cut.setLbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.violated(solution), {}, "osicolcut", "violated"); el[0] = 0.25; cut.setLbs(0, NULL, NULL); cut.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.violated(solution), {}, "osicolcut", "violated"); el[0] = 1.0; cut.setLbs(ne, inx, el); cut.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!cut.violated(solution), {}, "osicolcut", "violated"); } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiCommonTest/OsiSimplexAPITest.cpp0000644000175200017520000006004613414504135021137 0ustar coincoin/* Copyright (C) 2000 -- 2010, Lou Hafer, International Business Machines, and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ #include "CoinPragma.hpp" #include "OsiUnitTests.hpp" #include "OsiConfig.h" /* #include "CoinTime.hpp" #include #include #include #include #include #include #include */ #include "CoinHelperFunctions.hpp" #include "CoinFinite.hpp" #include "CoinFloatEqual.hpp" #include "CoinPackedVector.hpp" #include "CoinPackedMatrix.hpp" #include "OsiSolverInterface.hpp" using namespace OsiUnitTest; /* Helper methods for the OSI simplex API test. */ namespace { /* Test that the given vector is a unit vector with a 1 in the specified index position */ bool isUnitVector(int /* ndx */, int len, double *vec) { bool retval = false; CoinAbsFltEq fltEq; int nzCount = 0; int oneCount = 0; int onePosn = -1; for (int j = 0; j < len; j++) { if (!fltEq(vec[j], 0.0)) { nzCount++; if (fltEq(vec[j], 1.0)) { oneCount++; onePosn = j; } } } if (nzCount == 1 && oneCount == 1 && onePosn >= 0) { retval = true; } if (OsiUnitTest::verbosity >= 2 && !retval) { if (nzCount > oneCount) { std::cout << " Vector contains " << nzCount - oneCount << " elements that are neither 1.0 or 0.0." << std::endl; } if (oneCount > 1) { std::cout << " Vector contains " << oneCount << " elements that are 1.0." << std::endl; } if (oneCount < 1) { std::cout << " Vector contains no elements that are 1.0." << std::endl; } } return (retval); } /* Build a constraint system in basis order. Assumes that enableFactorization has been called. Indirect test of getBasics, because if the basis columns are loaded incorrectly, checks that B inv(B) = I will surely fail. */ CoinPackedMatrix *buildBasisMatrix(const OsiSolverInterface *si) { std::string solverName; si->getStrParam(OsiSolverName, solverName); CoinPackedMatrix *basisMtx = new CoinPackedMatrix(); const CoinPackedMatrix *mtx = si->getMatrixByCol(); int m = si->getNumRows(); int n = si->getNumCols(); int *basicIndices = new int[m]; si->getBasics(basicIndices); for (int i = 0; i < m; i++) { int j = basicIndices[i]; if (j < n) { if (OsiUnitTest::verbosity >= 2) { std::cout << " Retrieving column " << j << " for basis pos'n " << i << "." << std::endl; } CoinShallowPackedVector col = mtx->getVector(j); basisMtx->appendCol(col); } else { j -= n; if (OsiUnitTest::verbosity >= 2) { std::cout << " Fabricating e<" << j << "> for basis pos'n " << i << "." << std::endl; } CoinPackedVector ei = CoinPackedVector(1, &j, 1.0); basisMtx->appendCol(ei); } } return (basisMtx); } /* Test columns beta = inv(B)e of the basis inverse by calculating B beta and checking that the result is the appropriate unit vector. Also tests getBasics, because we use it to build the basis matrix. It's assumed that the si passed as a parameter is ready for tableau queries: a problem has been loaded and solved to optimality and enableFactorization has been called. */ void testBInvCol(const OsiSolverInterface *si) { std::string solverName; si->getStrParam(OsiSolverName, solverName); int m = si->getNumRows(); std::cout << " Testing getBInvCol ... " << std::endl; CoinPackedMatrix *basisMtx = buildBasisMatrix(si); /* Fetch beta, calculate B beta, k = 0, ..., m-1, and check that we have the appropriate unit vector. */ double *betak = new double[m]; double *ek = new double[m]; for (int k = 0; k < m; k++) { CoinFillN(betak, m, COIN_DBL_MAX); CoinFillN(ek, m, COIN_DBL_MAX); OSIUNITTEST_CATCH_ERROR(si->getBInvCol(k, betak), {}, solverName, "testBInvCol"); basisMtx->times(betak, ek); OSIUNITTEST_ASSERT_ERROR(isUnitVector(k, m, ek), if (OsiUnitTest::verbosity >= 1) { std::cout << " " << "B beta<" << k << "> != e<" << k << ">." << std::endl; }, solverName, "testBInvCol"); } delete[] betak; delete[] ek; delete basisMtx; } /* Test rows beta = einv(B) of the basis inverse by calculating betaB and checking that the result is the appropriate unit vector. Also tests getBasics, because we need it to build the basis matrix. It's assumed that the si passed as a parameter is ready for tableau queries: a problem has been loaded and solved to optimality and enableFactorization has been called. */ void testBInvRow(const OsiSolverInterface *si) { std::string solverName; si->getStrParam(OsiSolverName, solverName); int m = si->getNumRows(); std::cout << " Testing getBInvRow ... " << std::endl; /* Should construct in row-major form for transposeTimes, but efficiency is not all that big an issue here. */ CoinPackedMatrix *basisMtx = buildBasisMatrix(si); /* Fetch beta, calculate beta B, i = 0, ..., m-1, and check that we have the appropriate unit vector. */ double *betai = new double[m]; double *ei = new double[m]; for (int i = 0; i < m; i++) { CoinFillN(betai, m, COIN_DBL_MAX); CoinFillN(ei, m, COIN_DBL_MAX); OSIUNITTEST_CATCH_ERROR(si->getBInvRow(i, betai), {}, solverName, "testBInvRow"); basisMtx->transposeTimes(betai, ei); OSIUNITTEST_ASSERT_ERROR(isUnitVector(i, m, ei), if (OsiUnitTest::verbosity >= 1) { std::cout << " " << "beta<" << i << ">B != e<" << i << ">." << std::endl; }, solverName, "testBInvRow"); } delete[] betai; delete[] ei; delete basisMtx; } /* Test columns abar = inv(B) a by checking that B abar = a. It's assumed that the si passed as a parameter is ready for tableau queries: a problem has been loaded and solved to optimality and enableFactorization has been called. */ void testBInvACol(const OsiSolverInterface *si) { std::string solverName; si->getStrParam(OsiSolverName, solverName); int n = si->getNumCols(); int m = si->getNumRows(); std::cout << " Testing getBInvACol ... " << std::endl; CoinPackedMatrix *basisMtx = buildBasisMatrix(si); const CoinPackedMatrix *mtx = si->getMatrixByCol(); /* Fetch abar, calculate B abar, k = 0, ..., n-1, and check that the result is a. */ double *abarj = new double[m]; double *aj = new double[m]; for (int j = 0; j < n; j++) { CoinFillN(abarj, m, COIN_DBL_MAX); CoinFillN(aj, m, COIN_DBL_MAX); OSIUNITTEST_CATCH_ERROR(si->getBInvACol(j, abarj), {}, solverName, "testBInvACol"); basisMtx->times(abarj, aj); const CoinShallowPackedVector pv = mtx->getVector(j); OSIUNITTEST_ASSERT_ERROR(isEquivalent(pv, m, aj), if (OsiUnitTest::verbosity >= 1) { std::cout << " " << "B abar<" << j << "> != a<" << j << ">." << std::endl; }, solverName, "testBInvACol"); } delete[] abarj; delete[] aj; delete basisMtx; } /* Test rows abar = e(inv(B)(A I)). This is an awkward thing to check, because there's no analog to the column identity B abar = a. Go with brute force: Build inv(B)A row by row with getBInvARow and check it against inv(B)A built column by column with getBInvACol. (Clearly, testBInvACol should run first.) e(inv(B)I) is of course beta = einv(B), so we can just check that betaB = e. It's assumed that the si passed as a parameter is ready for tableau queries: a problem has been loaded and solved to optimality and enableFactorization has been called. */ void testBInvARow(const OsiSolverInterface *si) { std::string solverName; si->getStrParam(OsiSolverName, solverName); int n = si->getNumCols(); int m = si->getNumRows(); std::cout << " Testing getBInvARow ... " << std::endl; CoinPackedMatrix *basisMtx = buildBasisMatrix(si); /* Construct inv(B)A by column, then change over to row-major ordering so we can compare with the version build from tableau rows. Interesting quirk here: Turns out p0033's tableau has no nonzeros in rows with index 6 or 15. Because of that, when abarj is converted to row-major, it has only 15 rows, and that causes isEquivalent2 to fail. So force the full size. */ CoinPackedMatrix abarjMtx; double *abarj = new double[m]; for (int j = 0; j < n; j++) { si->getBInvACol(j, abarj); CoinPackedVector pkv; pkv.setFullNonZero(m, abarj); abarjMtx.appendCol(pkv); } delete[] abarj; abarjMtx.reverseOrdering(); abarjMtx.setDimensions(m, n); if (OsiUnitTest::verbosity >= 1) { std::cout << " Col-major tableau is " << abarjMtx.getNumRows() << " x " << abarjMtx.getNumCols() << " with " << abarjMtx.getNumElements() << " elements." << std::endl; } /* Construct inv(B)A by row. Check the vectors returned for inv(B)I = beta as we go. */ CoinPackedMatrix abariMtx; abariMtx.reverseOrdering(); double *abari = new double[n]; double *betai = new double[m]; double *ei = new double[m]; for (int i = 0; i < m; i++) { CoinFillN(abari, n, COIN_DBL_MAX); CoinFillN(betai, m, COIN_DBL_MAX); OSIUNITTEST_CATCH_ERROR(si->getBInvARow(i, abari, betai), {}, solverName, "testBInvARow"); CoinPackedVector pkv; pkv.setFullNonZero(n, abari); if (OsiUnitTest::verbosity >= 2) { std::cout << " Adding"; const int *indices = pkv.getIndices(); for (int v = 0; v < pkv.getNumElements(); v++) { std::cout << " (" << i << "," << indices[v] << ")"; } std::cout << std::endl; if (!isEquivalent(pkv, n, abari)) std::cout << " !! packed abari != full abari !!" << std::endl; } abariMtx.appendRow(pkv); basisMtx->transposeTimes(betai, ei); OSIUNITTEST_ASSERT_ERROR(isUnitVector(i, m, ei), if (OsiUnitTest::verbosity >= 1) { std::cout << " " << "beta<" << i << ">B != e<" << i << ">." << std::endl; }, solverName, "testBInvARow"); } abariMtx.setDimensions(m, n); if (OsiUnitTest::verbosity >= 2) { std::cout << " Row-major tableau is " << abariMtx.getNumRows() << " x " << abariMtx.getNumCols() << " with " << abariMtx.getNumElements() << " elements." << std::endl; } delete[] abari; delete[] betai; delete[] ei; delete basisMtx; /* Check that the two matrices are equivalent. isEquivalent2 will report differences, but we won't get a good count. But then, one error is all we need to report. */ OSIUNITTEST_ASSERT_ERROR(abariMtx.isEquivalent2(abarjMtx), {}, solverName, "testBInvARow: tableaus built by rows and columns match"); } /* Test the row and column duals returned by getReducedGradient. ** This method requires that the solver have an optimal solution in hand. ** The method checks the values returned by getReducedGradient against the values held in the solver (getRowPrice, getReducedCost) and tests that the sign of the reduced costs matches the status of the architectural variables. None of these are guaranteed unless the problem has been solved to optimality. The validity of the test hinges on the assumption that an implementor will just do the calculations for the given c rather than try to determine if the answer held in the solver is valid for the given c. * For row duals, test that y = cinv(B), using getBInvCol (already tested) to obtain the columns of the basis inverse. Also check that we agree with getRowPrice. * For column duals (aka reduced costs), test that cbar = c - yN, using the duals we've just checked. Also check that we agree with getReducedCost. Cross-check the sign of the reduced costs against the status vector returned by getBasisStatus. It's assumed that the si passed as a parameter is ready for tableau queries: a problem has been loaded and solved to optimality and enableFactorization has been called. */ void testReducedGradient(const OsiSolverInterface *si) { std::string solverName; si->getStrParam(OsiSolverName, solverName); int n = si->getNumCols(); int m = si->getNumRows(); double objSense = si->getObjSense(); std::cout << " Testing getReducedGradient ... "; /* Acquire the solver's notion of current duals and reduced costs before we do anything else. */ const double *yGold = si->getRowPrice(); const double *cbarGold = si->getReducedCost(); /* Acquire the basis and build c, the vector of basic cost coefficients. For logicals (basicIndices[k] >= n) assume a zero coefficient. */ int *basicIndices = new int[m]; si->getBasics(basicIndices); const double *c = si->getObjCoefficients(); double *cB = new double[m]; for (int k = 0; k < m; k++) { int j = basicIndices[k]; if (j < n) { if (OsiUnitTest::verbosity >= 2) { std::cout << " Retrieving c<" << j << "> = " << c[j] << " for basis pos'n " << k << "." << std::endl; } cB[k] = c[j]; } else { if (OsiUnitTest::verbosity >= 2) { std::cout << " Assuming c = " << 0.0 << " for basis pos'n " << k << "." << std::endl; } cB[k] = 0.0; } } delete[] basicIndices; /* Call getReducedGradient to get duals and reduced costs. */ double *cbar = new double[n]; double *y = new double[m]; OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si->getReducedGradient(cbar, y, c), delete[] cbar; delete[] y; return, solverName, "testReducedGradient", TestOutcome::ERROR, solverName == "cplex"); /* Run through the columns of the basis. Retrieve beta, calculate dot(c,beta) and check that all three sources of y agree. */ double *betaj = new double[m]; CoinRelFltEq eq; for (int k = 0; k < m; k++) { double yk = 0.0; si->getBInvCol(k, betaj); for (int i = 0; i < m; i++) { yk += cB[i] * betaj[i]; } OSIUNITTEST_ASSERT_ERROR(eq(y[k], yGold[k]), if (OsiUnitTest::verbosity >= 1) std::cout << " " << y[k] << " = y<" << k << "> != yGold<" << k << "> = " << yGold[k] << ", diff = " << y[k] - yGold[k] << "." << std::endl, solverName, "testReducedGradient"); OSIUNITTEST_ASSERT_ERROR(eq(y[k], yk), if (OsiUnitTest::verbosity >= 1) std::cout << " " << y[k] << " = y<" << k << "> != cbeta<" << k << "> = " << yk << ", diff = " << y[k] - yk << "." << std::endl, solverName, "testReducedGradient"); } delete[] cB; delete[] betaj; /* Now that we're confident the duals are correct, use them to calculate cbar as c-yN and check that all sources for cbar agree. Also check that the sign is correct given the status of the variable. There's no need to differentiate basic and nonbasic columns here. */ int *archStatus = new int[n]; int *logStatus = new int[m]; si->getBasisStatus(archStatus, logStatus); double dualTol; si->getDblParam(OsiDualTolerance, dualTol); const int OsiSimplex_isFree = 0; const int OsiSimplex_basic = 1; const int OsiSimplex_nbub = 2; const int OsiSimplex_nblb = 3; std::string statNames[] = { "NBFR", "B", "NBUB", "NBLB" }; const CoinPackedMatrix *mtx = si->getMatrixByCol(); double *cbarCalc = new double[n]; mtx->transposeTimes(y, cbarCalc); std::transform(c, c + n, cbarCalc, cbarCalc, std::minus< double >()); for (int j = 1; j < n; j++) { double cbarj = cbar[j]; int statj = archStatus[j]; if (OsiUnitTest::verbosity >= 2) std::cout << " x<" << j << "> " << statNames[statj] << ", cbar<" << j << "> = " << cbarj << "." << std::endl; OSIUNITTEST_ASSERT_ERROR(eq(cbarj, cbarGold[j]), if (OsiUnitTest::verbosity >= 1) std::cout << " " << cbarj << " = cbar<" << j << "> != cbarGold<" << j << "> = " << cbarGold[j] << ", diff = " << cbarj - cbarGold[j] << "." << std::endl, solverName, "testReducedGradient"); OSIUNITTEST_ASSERT_ERROR(eq(cbarj, cbarCalc[j]), if (OsiUnitTest::verbosity >= 1) std::cout << " " << cbarj << " = cbar<" << j << "> != c<" << j << "> - ya<" << j << "> = " << cbarCalc[j] << ", diff = " << cbarj - cbarCalc[j] << "." << std::endl, solverName, "testReducedGradient"); double testcbarj = objSense * cbarj; switch (statj) { case OsiSimplex_nbub: { OSIUNITTEST_ASSERT_ERROR(testcbarj <= dualTol, if (OsiUnitTest::verbosity >= 1) std::cout << " cbar<" << j << "> = " << cbarj << " has the wrong sign for a NBUB variable." << std::endl, solverName, "testReducedGradient"); break; } case OsiSimplex_nblb: { OSIUNITTEST_ASSERT_ERROR(testcbarj >= -dualTol, if (OsiUnitTest::verbosity >= 1) std::cout << " cbar<" << j << "> = " << cbarj << " has the wrong sign for a NBLB variable." << std::endl, solverName, "testReducedGradient"); break; } case OsiSimplex_isFree: { OSIUNITTEST_ASSERT_ERROR(CoinAbs(testcbarj) <= dualTol, if (OsiUnitTest::verbosity >= 1) std::cout << " cbar<" << j << "> = " << cbarj << " should be zero for a NBFR variable." << std::endl, solverName, "testReducedGradient"); break; } case OsiSimplex_basic: { OSIUNITTEST_ASSERT_ERROR(CoinAbs(testcbarj) <= dualTol, if (OsiUnitTest::verbosity >= 1) std::cout << " cbar<" << j << "> = " << cbarj << " should be zero for a basic variable." << std::endl, solverName, "testReducedGradient"); break; } default: { break; } } } delete[] y; delete[] cbar; delete[] cbarCalc; delete[] archStatus; delete[] logStatus; } /* Test the mode 2 portion of the simplex API. Solve an lp by hand */ void testSimplexMode2(const OsiSolverInterface *emptySi, std::string sampleDir) { OsiSolverInterface *si = emptySi->clone(); std::string solverName; si->getStrParam(OsiSolverName, solverName); std::string fn = sampleDir + "p0033"; si->readMps(fn.c_str(), "mps"); si->setObjSense(-1.0); si->initialSolve(); si->setObjSense(1.0); // enable special mode si->enableSimplexInterface(true); // we happen to know that variables are 0-1 and rows are L int numberIterations = 0; int numberColumns = si->getNumCols(); int numberRows = si->getNumRows(); double *fakeCost = new double[numberColumns]; double *duals = new double[numberRows]; double *djs = new double[numberColumns]; const double *solution = si->getColSolution(); memcpy(fakeCost, si->getObjCoefficients(), numberColumns * sizeof(double)); while (1) { const double *dj; const double *dual; if ((numberIterations & 1) == 0) { // use given ones dj = si->getReducedCost(); dual = si->getRowPrice(); } else { // create dj = djs; dual = duals; si->getReducedGradient(djs, duals, fakeCost); } int i; int colIn = 9999; int direction = 1; double best = 1.0e-6; // find most negative reduced cost // Should check basic - but should be okay on this problem for (i = 0; i < numberRows; i++) { double value = dual[i]; if (value > best) { direction = -1; best = value; colIn = -i - 1; } } for (i = 0; i < numberColumns; i++) { double value = dj[i]; if (value < -best && solution[i] < 1.0e-6) { direction = 1; best = -value; colIn = i; } else if (value > best && solution[i] > 1.0 - 1.0e-6) { direction = -1; best = value; colIn = i; } } if (colIn == 9999) break; // should be optimal int colOut; int outStatus; double theta; OSIUNITTEST_ASSERT_ERROR(!si->primalPivotResult(colIn, direction, colOut, outStatus, theta, NULL), break, solverName, "testSimplexMode2"); printf("out %d, direction %d theta %g\n", colOut, outStatus, theta); numberIterations++; } delete[] fakeCost; delete[] duals; delete[] djs; // exit special mode si->disableSimplexInterface(); si->resolve(); OSIUNITTEST_ASSERT_ERROR(!si->getIterationCount(), {}, solverName, "testSimplexMode2: resolve after disable simplex interface"); si->setObjSense(-1.0); si->initialSolve(); std::cout << solverName << " passed OsiSimplexInterface test" << std::endl; delete si; } /* Test Simplex API mode 1 (tableau access) methods. */ void testSimplexMode1(const OsiSolverInterface *emptySi, std::string sampleDir) { OsiSolverInterface *si = emptySi->clone(); std::string solverName; si->getStrParam(OsiSolverName, solverName); si->setHintParam(OsiDoReducePrint, true, OsiHintDo); /* Read p0033 and check that there's no optimal basis prior to solving. */ std::string fn = sampleDir + "p0033"; si->readMps(fn.c_str(), "mps"); OSIUNITTEST_ASSERT_ERROR(!si->basisIsAvailable(), if (OsiUnitTest::verbosity >= 1) std::cout << " " << solverName << " shows no optimal basis before initial solve." << std::endl, *si, "testSimplexMode1: basis before solve"); /* Solve as minimisation problem. */ si->setObjSense(1.0); si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return, *si, "testSimplexMode1: solve p0033"); if (OsiUnitTest::verbosity >= 1) { std::cout << " " << solverName << " solved p0033 z = " << si->getObjValue() << "." << std::endl; } /* Now get tough. Resolve, first as maximisation, then minimisation. Enable the tableau interface and check the methods. */ double minmax[] = { -1.0, 1.0 }; for (int ndx = 0; ndx < 2; ndx++) { si->setObjSense(minmax[ndx]); std::cout << " " << ((minmax[ndx] < 0) ? "maximisation ..." : "minimisation") << " ..." << std::endl; si->resolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return, *si, "testSimplexMode1: resolve p0033"); if (OsiUnitTest::verbosity >= 1) { std::cout << " " << solverName << ((si->getObjSense() < 0) ? " maximised" : " minimised") << " p0033 z = " << si->getObjValue() << "." << std::endl; } OSIUNITTEST_ASSERT_ERROR(si->basisIsAvailable(), {}, *si, "testSimplexMode1: basis available after resolve"); if (OsiUnitTest::verbosity >= 1 && si->basisIsAvailable()) { std::cout << " " << solverName << " shows optimal basis after resolve." << std::endl; } /* Enable simplex mode 1. */ si->enableFactorization(); /* Test the various methods. */ testBInvCol(si); testBInvRow(si); testBInvACol(si); testBInvARow(si); testReducedGradient(si); /* Disable simplex mode 1. */ si->disableFactorization(); } /* Trash this solver and we're finished. */ delete si; } } // end file-local namespace namespace OsiUnitTest { /* Test a solver's implementation of the OSI simplex API. */ void testSimplexAPI(const OsiSolverInterface *emptySi, const std::string &sampleDir) { OsiSolverInterface *si = emptySi->clone(); std::string solverName; si->getStrParam(OsiSolverName, solverName); /* Do the tests only if the solver implements the simplex API. */ if (si->canDoSimplexInterface() == 0) { OSIUNITTEST_ADD_OUTCOME(solverName, "testSimplexAPI", "skipped test", OsiUnitTest::TestOutcome::NOTE, true); std::cout << solverName << " has no OsiSimplex API." << std::endl; return; } /* Test the mode 1 (tableau access) portion of the API. */ if (si->canDoSimplexInterface() >= 1) { std::cout << "Testing Simplex API mode 1 for " << solverName << " ... " << std::endl; testSimplexMode1(emptySi, sampleDir); } /* Test the mode 2 (pivot-by-pivot control) portion of the API. */ if (si->canDoSimplexInterface() >= 2) { std::cout << "Testing Simplex API mode 2 for " << solverName << " ... " << std::endl; testSimplexMode2(emptySi, sampleDir); } else { OSIUNITTEST_ADD_OUTCOME(solverName, "testSimplexAPI mode 2", "skipped test", OsiUnitTest::TestOutcome::NOTE, true); std::cout << solverName << " does not implement Simplex API mode 2." << std::endl; } } } /* namespace OsiUnitTest */ /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiCommonTest/OsiSolverInterfaceTest.cpp0000644000175200017520000056362113434062050022263 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /* !! MAINTAINERS PLEASE READ !! The OSI unit test is gradually undergoing a conversion. Over time, the goal is to factor the original monolith into separate files and routines. Individual routines should collect test outcomes in the global OsiUnitTest::outcomes object using the OSIUNITTEST_* macros defined in OsiUnitTests.hpp. Ideally, the implementor of an OsiXXX could indicated expected failures, to avoid the current practice of modifying the unit test to avoid attempting the test for a particular OsiXXX. The original approach was to use asserts in tests; the net effect is that the unit test chokes and dies as soon as something goes wrong. The current approach is to soldier on until something has gone wrong which makes further testing pointless if OsiUnitTest::haltonerror is set to 0, to hold and ask the user for pressing a key if OsiUnitTest::haltonerror is set to 1, and to stop immediately if OsiUnitTest::haltonerror is set to 2 (but only in case of an error, not for warnings). The general idea is to return the maximum amount of useful information with each run. The OsiUnitTest::verbosity variable should be used to decide on the amount of information to be printed. At level 0, only minimal output should be printed, at level 1, more information about failed tests should be printed, while at level 2, also information on passed tests and other details should be printed. If you work on this code, please keep these conventions in mind: * Tests should be encapsulated in subroutines. If you have a moment, factor something out of the main routine --- it'd be nice to get it down under 500 lines. * All local helper routines should be defined in the file-local namespace. * This unit test is meant as a certification that OsiXXX correctly implements the OSI API specification. Don't step around it! If OsiXXX is not capable of meeting a particular requirement and you edit the unit test code to avoid the test, don't just sweep it under the rug! Print a failure message saying the test has been skipped, or something else informative. OsiVol is the worst offender for this (the underlying algorithm is not simplex and imposes serious limitations on the type of lp that vol can handle). Any simplex-oriented solver should *NOT* be exempted from any test. If it's pointless to even try, print a failure message. -- lh, 08.01.07, 10.08.26 -- */ #include "CoinPragma.hpp" #include "OsiConfig.h" #include #include #include #include #include #include /* A utility definition which allows for easy suppression of unused variable warnings from GCC. Handy in this environment, where we're constantly def'ing things in and out. */ #ifndef UNUSED #if defined(__GNUC__) #define UNUSED __attribute__((unused)) #else #define UNUSED #endif #endif #include "OsiUnitTests.hpp" #include "OsiSolverInterface.hpp" #include "CoinTime.hpp" #include "CoinFloatEqual.hpp" #include "CoinPackedVector.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" #include "OsiRowCut.hpp" #include "OsiCuts.hpp" #include "OsiPresolve.hpp" /* Define helper routines in the file-local namespace. */ namespace OsiUnitTest { extern void testSimplexAPI(const OsiSolverInterface *emptySi, const std::string &mpsDir); } using namespace OsiUnitTest; namespace { //############################################################################# // A routine to build a CoinPackedMatrix matching the exmip1 example. //############################################################################# const CoinPackedMatrix *BuildExmip1Mtx() /* Simple function to build a packed matrix for the exmip1 example used in tests. The function exists solely to hide the intermediate variables. Probably could be written as an initialised declaration. See COIN/Mps/Sample/exmip1.mps for a human-readable presentation. Don't forget to dispose of the matrix when you're done with it. Ordered triples seem easiest. They're listed in row-major order. */ { int rowndxs[] = { 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4 }; int colndxs[] = { 0, 1, 3, 4, 7, 1, 2, 2, 5, 3, 6, 0, 4, 7 }; double coeffs[] = { 3.0, 1.0, -2.0, -1.0, -1.0, 2.0, 1.1, 1.0, 1.0, 2.8, -1.2, 5.6, 1.0, 1.9 }; CoinPackedMatrix *mtx = new CoinPackedMatrix(true, &rowndxs[0], &colndxs[0], &coeffs[0], 14); return (mtx); } //############################################################################# // Short tests contributed by Vivian DeSmedt. Thanks! //############################################################################# /* DeSmedt Problem #1 Initially, max 3*x1 + x2 x* = [ 5 0 ] 2*x1 + x2 <= 10 row_act = [ 10 5 ] x1 + 3*x2 <= 15 Test for solver status, expected solution, row activity. Then change objective to [1 1], resolve, check again for solver status, expected solution [3 4] and expected row activity [10 15]. */ bool test1VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedMatrix m; m.transpose(); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); m.appendRow(r0); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); m.appendRow(r1); int numcol = 2; double *obj = new double[numcol]; obj[0] = 3; obj[1] = 1; double *collb = new double[numcol]; collb[0] = 0; collb[1] = 0; double *colub = new double[numcol]; colub[0] = inf; colub[1] = inf; int numrow = 2; double *rowlb = new double[numrow]; rowlb[0] = -inf; rowlb[1] = -inf; double *rowub = new double[numrow]; rowub[0] = 10; rowub[1] = 15; s->loadProblem(m, collb, colub, obj, rowlb, rowub); delete[] obj; delete[] collb; delete[] colub; delete[] rowlb; delete[] rowub; s->setObjSense(-1); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 10, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test2VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedMatrix m; m.transpose(); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); m.appendRow(r0); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); m.appendRow(r1); CoinPackedVector r2; r2.insert(0, 1); r2.insert(1, 1); m.appendRow(r2); int numcol = 2; double *obj = new double[numcol]; obj[0] = 3; obj[1] = 1; double *collb = new double[numcol]; collb[0] = 0; collb[1] = 0; double *colub = new double[numcol]; colub[0] = inf; colub[1] = inf; int numrow = 3; double *rowlb = new double[numrow]; rowlb[0] = -inf; rowlb[1] = -inf; rowlb[2] = 1; double *rowub = new double[numrow]; rowub[0] = 10; rowub[1] = 15; rowub[2] = inf; s->loadProblem(m, collb, colub, obj, rowlb, rowub); delete[] obj; delete[] collb; delete[] colub; delete[] rowlb; delete[] rowub; s->setObjSense(-1); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 10, 5, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 3); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15, 7 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 3); return ret; } //-------------------------------------------------------------------------- bool test3VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; //double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, 0, 10, 3); s->addCol(empty, 0, 10, 1); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); s->addRow(r0, 0, 10); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, 0, 15); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 10, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test4VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, 0, inf, 3); s->addCol(empty, 0, inf, 1); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); s->addRow(r0, -inf, 10); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, -inf, 15); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 10, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- /* Constructs the system max 3x1 + x2 -inf <= 2x1 + x2 <= 10 -inf <= x1 + 3x2 <= 15 The optimal solution is unbounded. Objective is then changed to max x1 + x2 which has a bounded optimum at x1 = 3, x2 = 4. */ bool test5VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, -inf, inf, 3); s->addCol(empty, -inf, inf, 1); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); s->addRow(r0, -inf, 10); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, -inf, 15); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && !s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && s->isProvenDualInfeasible(); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test6VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, 0, inf, 3); s->addCol(empty, 0, inf, 1); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); s->addRow(r0, 0, 10); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, 0, 15); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 10, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test7VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, 4, inf, 3); s->addCol(empty, 3, inf, 1); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); s->addRow(r0, 0, 10); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, 0, 15); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && !s->isProvenOptimal(); ret = ret && s->isProvenPrimalInfeasible(); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && !s->isProvenOptimal(); ret = ret && s->isProvenPrimalInfeasible(); return ret; } //-------------------------------------------------------------------------- bool test8VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, -inf, inf, 3); s->addCol(empty, -inf, inf, 1); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); s->addRow(r0, 0, 10); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, 0, 15); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 6, -2 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 10, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test9VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, -inf, inf, 3); s->addCol(empty, -inf, inf, 1); CoinPackedVector r0; r0.insert(0, 2); r0.insert(1, 1); s->addRow(r0, 0, 10); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, 0, 15); CoinPackedVector r2; r2.insert(0, 1); r2.insert(1, 4); s->addRow(r2, 12, inf); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 4, 2 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 10, 10, 12 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 3); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 10, 15, 19 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 3); return ret; } //-------------------------------------------------------------------------- bool test10VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); int numcols = 2; int numrows = 2; const CoinBigIndex start[] = { 0, 2, 4 }; const int index[] = { 0, 1, 0, 1 }; const double value[] = { 4, 1, 2, 3 }; const double collb[] = { 0, 0 }; const double colub[] = { inf, inf }; double obj[] = { 3, 1 }; char rowsen[] = { 'R', 'R' }; double rowrhs[] = { 20, 15 }; double rowrng[] = { 20, 15 }; s->loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowsen, rowrhs, rowrng); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 20, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 20, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test11VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); int numcols = 2; int numrows = 2; const CoinBigIndex start[] = { 0, 2, 4 }; const int index[] = { 0, 1, 0, 1 }; const double value[] = { 4, 1, 2, 3 }; const double collb[] = { 0, 0 }; const double colub[] = { inf, inf }; double obj[] = { 3, 1 }; double rowlb[] = { 0, 0 }; double rowub[] = { 20, 15 }; s->loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowlb, rowub); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 20, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 20, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test12VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedMatrix m; m.transpose(); CoinPackedVector r0; r0.insert(0, 4); r0.insert(1, 2); m.appendRow(r0); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); m.appendRow(r1); int numcol = 2; double *obj = new double[numcol]; obj[0] = 3; obj[1] = 1; double *collb = new double[numcol]; collb[0] = 0; collb[1] = 0; double *colub = new double[numcol]; colub[0] = inf; colub[1] = inf; int numrow = 2; double *rowlb = new double[numrow]; rowlb[0] = 0; rowlb[1] = 0; double *rowub = new double[numrow]; rowub[0] = 20; rowub[1] = 15; s->loadProblem(m, collb, colub, obj, rowlb, rowub); delete[] obj; delete[] collb; delete[] colub; delete[] rowlb; delete[] rowub; s->setObjSense(-1); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 20, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 20, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test13VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedMatrix m; CoinPackedVector c0; c0.insert(0, 4); c0.insert(1, 1); m.appendCol(c0); CoinPackedVector c1; c1.insert(0, 2); c1.insert(1, 3); m.appendCol(c1); int numcol = 2; double *obj = new double[numcol]; obj[0] = 3; obj[1] = 1; double *collb = new double[numcol]; collb[0] = 0; collb[1] = 0; double *colub = new double[numcol]; colub[0] = inf; colub[1] = inf; int numrow = 2; double *rowlb = new double[numrow]; rowlb[0] = 0; rowlb[1] = 0; double *rowub = new double[numrow]; rowub[0] = 20; rowub[1] = 15; s->loadProblem(m, collb, colub, obj, rowlb, rowub); delete[] obj; delete[] collb; delete[] colub; delete[] rowlb; delete[] rowub; s->setObjSense(-1); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 20, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 20, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test14VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addCol(empty, 0, inf, 3); s->addCol(empty, 0, inf, 1); CoinPackedVector r0; r0.insert(0, 4); r0.insert(1, 2); s->addRow(r0, 0, 20); CoinPackedVector r1; r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, 0, 15); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 20, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 20, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } //-------------------------------------------------------------------------- bool test15VivianDeSmedt(OsiSolverInterface *s) { bool ret = true; double inf = s->getInfinity(); CoinPackedVector empty; s->addRow(empty, 0, 20); s->addRow(empty, 0, 15); CoinPackedVector c0; c0.insert(0, 4); c0.insert(1, 1); s->addCol(c0, 0, inf, 3); CoinPackedVector c1; c1.insert(0, 2); c1.insert(1, 3); s->addCol(c1, 0, inf, 1); s->setObjSense(-1); s->writeMps("test"); s->initialSolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution1[] = { 5, 0 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution1, 2); const double activity1[] = { 20, 5 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity1, 2); s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); ret = ret && s->isProvenOptimal(); ret = ret && !s->isProvenPrimalInfeasible(); ret = ret && !s->isProvenDualInfeasible(); const double solution2[] = { 3, 4 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getColSolution(), solution2, 2); const double activity2[] = { 20, 15 }; ret = ret && equivalentVectors(s, s, 0.0001, s->getRowActivity(), activity2, 2); return ret; } /* Another test case submitted by Vivian De Smedt. The test is to modify the objective function and check that the solver's optimum point tracks correctly. The initial problem is max 3*x1 + x2 s.t. 2*x1 + x2 <= 10 x1 + 3*x2 <= 15 with optimum z* = 15 at (x1,x2) = (5,0). Then the objective is changed to x1 + x2, with new optimum z* = 7 at (3,4). The volume algorithm doesn't return exact solution values, so relax the test for correctness when we're checking the solution. */ void changeObjAndResolve(const OsiSolverInterface *emptySi) { OsiSolverInterface *s = emptySi->clone(); double dEmpty = 0; int iEmpty = 0; CoinBigIndex iEmpty2 = 0; /* Establish an empty problem. Establish empty columns with bounds and objective coefficient only. Finally, insert constraint coefficients and set for maximisation. */ s->loadProblem(0, 0, &iEmpty2, &iEmpty, &dEmpty, &dEmpty, &dEmpty, &dEmpty, &dEmpty, &dEmpty); CoinPackedVector c; s->addCol(c, 0, 10, 3); s->addCol(c, 0, 10, 1); double inf = s->getInfinity(); CoinPackedVector r1; r1.insert(0, 2); r1.insert(1, 1); s->addRow(r1, -inf, 10); r1.clear(); r1.insert(0, 1); r1.insert(1, 3); s->addRow(r1, -inf, 15); s->setObjSense(-1); /* Optimise for 3*x1 + x2 and check for correctness. */ s->initialSolve(); const double *colSol = s->getColSolution(); OSIUNITTEST_ASSERT_ERROR(colSol[0] >= 4.5, {}, *s, "changeObjAndResolve"); OSIUNITTEST_ASSERT_ERROR(colSol[1] <= 0.5, {}, *s, "changeObjAndResolve"); /* Set objective to x1 + x2 and reoptimise. */ s->setObjCoeff(0, 1); s->setObjCoeff(1, 1); s->resolve(); colSol = s->getColSolution(); OSIUNITTEST_ASSERT_ERROR(colSol[0] >= 2.3 && colSol[0] <= 3.7, {}, *s, "changeObjAndResolve"); OSIUNITTEST_ASSERT_ERROR(colSol[1] >= 3.5 && colSol[1] <= 4.5, {}, *s, "changeObjAndResolve"); delete s; } /* This code is taken from some bug reports of Sebastian Nowozin. It demonstrates some issues he had with OsiClp. https://projects.coin-or.org/Osi/ticket/54 https://projects.coin-or.org/Osi/ticket/55 https://projects.coin-or.org/Osi/ticket/56 https://projects.coin-or.org/Osi/ticket/58 The short summary is that enabling/disabling the level 2 simplex interface (controllable pivoting) with an empty constraint matrix caused problems. For solvers that don't support simplex level 2, all we're testing is constraint system mods and resolve. Query (lh): The original comments with this code referred to use of Binv to generate cuts Binv et al. are level 1 simplex interface routines. Perhaps the test should use level 1. */ bool test16SebastianNowozin(OsiSolverInterface *si) { CoinAbsFltEq fltEq; CoinPackedMatrix *matrix = new CoinPackedMatrix(false, 0, 0); matrix->setDimensions(0, 4); double objective[] = { 0.1, 0.2, -0.1, -0.2 }; double varLB[] = { 0.0, 0.0, 0.0, 0.0 }; double varUB[] = { 1.0, 1.0, 1.0, 1.0 }; si->loadProblem(*matrix, varLB, varUB, objective, NULL, NULL); delete matrix; /* Set objective sense prior to objective, just to catch the unwary. */ si->setObjSense(1); si->setObjective(objective); /* The code provided with ticket 54 is illegal --- this first call cannot be resolve(). The first solve must be an initialSolve, for the benefit of solvers which use it for initialisation. -- lh, 080903 -- */ si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return false, *si, "test16SebastianNowozin initial solve"); OSIUNITTEST_ASSERT_ERROR(fltEq(si->getObjValue(), -0.3), return false, *si, "test16SebastianNowozin initial solve"); /* Expected: primal = [ 0 0 1 1 ] */ OSIUNITTEST_ASSERT_ERROR(si->getColSolution() != NULL, return false, *si, "test16SebastianNowozin initial solve"); /* Simulate a constraint generation interval that will require the simplex interface. Enable, then disable level 2 simplex interface (controllable pivoting), if the solver has it. */ if (si->canDoSimplexInterface() >= 2) { OSIUNITTEST_CATCH_ERROR(si->enableFactorization(), return false, *si, "test16SebastianNowozin initial solve"); OSIUNITTEST_CATCH_ERROR(si->enableSimplexInterface(true), return false, *si, "test16SebastianNowozin initial solve"); // try // { si->enableFactorization() ; // si->enableSimplexInterface(true) ; } // catch (CoinError e) // { std::string errmsg ; // errmsg = "first enableFactorization or enableSimplexInterface" ; // errmsg = errmsg + " threw CoinError: " + e.message() ; // OSIUNITTEST_ADD_OUTCOME(*si, "test16SebastianNowozin first enableFactorization or enableSimplexInterface", errmsg.c_str(), TestOutcome::ERROR, false); // failureMessage(*si,errmsg) ; // return (false) ; } // OSIUNITTEST_ADD_OUTCOME(*si, "test16SebastianNowozin first enableFactorization or enableSimplexInterface", "no exception", TestOutcome::PASSED, false); // (...) constraint generation here si->disableFactorization(); } /* Add two constraints and resolve */ CoinPackedVector row1; // x_2 + x_3 - x_0 <= 0 row1.insert(0, -1.0); row1.insert(2, 1.0); row1.insert(3, 1.0); si->addRow(row1, -si->getInfinity(), 0.0); CoinPackedVector row2; // x_0 + x_1 - x_3 <= 0 row2.insert(0, 1.0); row2.insert(1, 1.0); row2.insert(3, -1.0); si->addRow(row2, -si->getInfinity(), 0.0); si->resolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return false, *si, "test16SebastianNowozin first resolve"); OSIUNITTEST_ASSERT_ERROR(fltEq(si->getObjValue(), -0.1), return false, *si, "test16SebastianNowozin first resolve"); /* Expected: primal = [ 1 0 0 1 ] */ OSIUNITTEST_ASSERT_ERROR(si->getColSolution() != NULL, return false, *si, "test16SebastianNowozin first resolve"); /* Simulate another constraint generation run. */ if (si->canDoSimplexInterface() >= 2) { OSIUNITTEST_CATCH_ERROR(si->enableFactorization(), return false, *si, "test16SebastianNowozin first resolve"); OSIUNITTEST_CATCH_ERROR(si->enableSimplexInterface(true), return false, *si, "test16SebastianNowozin first resolve"); // try // { si->enableFactorization() ; // si->enableSimplexInterface(true) ; } // catch (CoinError e) // { std::string errmsg ; // errmsg = "second enableFactorization or enableSimplexInterface" ; // errmsg = errmsg + " threw CoinError: " + e.message() ; // failureMessage(*si,errmsg) ; // OSIUNITTEST_ADD_OUTCOME(*si, "test16SebastianNowozin second enableFactorization or enableSimplexInterface", errmsg.c_str(), TestOutcome::ERROR, false); // return (false) ; } // OSIUNITTEST_ADD_OUTCOME(*si, "test16SebastianNowozin second enableFactorization or enableSimplexInterface", "no exception", TestOutcome::PASSED, false); // (...) constraint generation here si->disableFactorization(); } /* Remove a constraint, add .15 to the objective coefficients, and resolve. */ int rows_to_delete_arr[] = { 0 }; si->deleteRows(1, rows_to_delete_arr); std::transform(objective, objective + 4, objective, std::bind2nd(std::plus< double >(), 0.15)); si->setObjective(objective); si->resolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return false, *si, "test16SebastianNowozin second resolve"); OSIUNITTEST_ASSERT_ERROR(fltEq(si->getObjValue(), -0.05), return false, *si, "test16SebastianNowozin second resolve"); /* Expected: obj = [ .25 .35 .05 -.05], primal = [ 0 0 0 1 ] */ OSIUNITTEST_ASSERT_ERROR(si->getColSolution() != NULL, return false, *si, "test16SebastianNowozin second resolve"); return true; } /* This code checks an issue reported by Sebastian Nowozin in OsiClp ticket 57. He said that OsiClpSolverInterface::getReducedGradient() requires a prior call to both enableSimplexInterface(true) and enableFactorization(), but only checks/asserts the simplex interface. Same comment as test16 --- would simplex level 1 suffice? */ bool test17SebastianNowozin(OsiSolverInterface *si) { if (si->canDoSimplexInterface() < 2) { return (true); } CoinPackedMatrix *matrix = new CoinPackedMatrix(false, 0, 0); matrix->setDimensions(0, 4); double objective[] = { 0.1, 0.2, -0.1, -0.2, }; double varLB[] = { 0.0, 0.0, 0.0, 0.0, }; double varUB[] = { 1.0, 1.0, 1.0, 1.0, }; si->loadProblem(*matrix, varLB, varUB, objective, NULL, NULL); si->setObjSense(1); delete matrix; CoinPackedVector row1; // x_2 + x_3 - x_0 <= 0 row1.insert(0, -1.0); row1.insert(2, 1.0); row1.insert(3, 1.0); si->addRow(row1, -si->getInfinity(), 0.0); si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return false, *si, "test17SebastianNowozin"); if (!si->isProvenOptimal()) return false; /* Unlike test16, here we do not call si->enableFactorization() first. */ OSIUNITTEST_CATCH_ERROR(si->enableSimplexInterface(true), return false, *si, "test17SebastianNowozin"); /* Now check that getReducedGradient works. */ double dummy[4] = { 1., 1., 1., 1. }; OSIUNITTEST_CATCH_ERROR(si->getReducedGradient(dummy, dummy, dummy), return false, *si, "test17SebastianNowozin"); return true; } //############################################################################# // Routines to test various feature groups //############################################################################# /*! \brief Test row and column name manipulation emptySi should be an empty solver interface, fn the path to the exmpi1 example. */ void testNames(const OsiSolverInterface *emptySi, std::string fn) { bool recognisesOsiNames = true; bool ok; OsiSolverInterface *si = emptySi->clone(); std::string exmip1ObjName = "OBJ"; OsiSolverInterface::OsiNameVec exmip1RowNames(0); exmip1RowNames.push_back("ROW01"); exmip1RowNames.push_back("ROW02"); exmip1RowNames.push_back("ROW03"); exmip1RowNames.push_back("ROW04"); exmip1RowNames.push_back("ROW05"); OsiSolverInterface::OsiNameVec exmip1ColNames(0); exmip1ColNames.push_back("COL01"); exmip1ColNames.push_back("COL02"); exmip1ColNames.push_back("COL03"); exmip1ColNames.push_back("COL04"); exmip1ColNames.push_back("COL05"); exmip1ColNames.push_back("COL06"); exmip1ColNames.push_back("COL07"); exmip1ColNames.push_back("COL08"); testingMessage("Testing row/column name handling ..."); /* Try to get the solver name, but don't immediately abort. */ std::string solverName = "Unknown solver"; OSIUNITTEST_ASSERT_WARNING(si->getStrParam(OsiSolverName, solverName) == true, {}, solverName, "testNames: getStrParam(OsiSolverName)"); /* Checking default names. dfltRowColName is pretty liberal about indices, but they should never be negative. Since default row/column names are a letter plus n digits, asking for a length of 5 on the objective gets you a leading 'O' plus five more letters. */ std::string dfltName = si->dfltRowColName('o', 0, 5); std::string expName = "OBJECT"; OSIUNITTEST_ASSERT_WARNING(dfltName == expName, {}, solverName, "testNames: default objective name"); dfltName = si->dfltRowColName('r', -1, 5); expName = "!!invalid Row -1!!"; OSIUNITTEST_ASSERT_WARNING(dfltName == expName, {}, solverName, "testNames: default name for invalid row"); dfltName = si->dfltRowColName('c', -1, 5); expName = "!!invalid Col -1!!"; OSIUNITTEST_ASSERT_WARNING(dfltName == expName, {}, solverName, "testNames: default name for invalid col"); /* Start by telling the SI to use lazy names and see if it comes up with the right names from the MPS file. There's no point in proceeding further if we can't read an MPS file. */ // std::cout << "Testing lazy names from MPS input file." << std::endl ; OSIUNITTEST_ASSERT_SEVERITY_EXPECTED(si->setIntParam(OsiNameDiscipline, 1) == true, recognisesOsiNames = false, solverName, "testNames: switch to lazy names", TestOutcome::NOTE, false); OSIUNITTEST_ASSERT_ERROR(si->readMps(fn.c_str(), "mps") == 0, delete si; return, solverName, "testNames: read MPS"); OsiSolverInterface::OsiNameVec rowNames; int rowNameCnt; OsiSolverInterface::OsiNameVec colNames; int colNameCnt; int m = si->getNumRows(); if (recognisesOsiNames) { std::string objName = si->getObjName(); OSIUNITTEST_ASSERT_WARNING(objName == exmip1ObjName, {}, solverName, "testNames lazy names: objective name"); OSIUNITTEST_ASSERT_WARNING(si->getRowName(m) == exmip1ObjName, {}, solverName, "testNames lazy names: name of one after last row is objective name"); rowNames = si->getRowNames(); rowNameCnt = static_cast< int >(rowNames.size()); OSIUNITTEST_ASSERT_WARNING(rowNameCnt == static_cast< int >(exmip1RowNames.size()), {}, solverName, "testNames lazy names: row names count"); ok = true; for (int i = 0; i < rowNameCnt; i++) { if (rowNames[i] != exmip1RowNames[i]) { ok = false; std::cout << "ERROR! "; std::cout << "Row " << i << " is \"" << rowNames[i] << "\" expected \"" << exmip1RowNames[i] << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: row names"); colNames = si->getColNames(); colNameCnt = static_cast< int >(colNames.size()); OSIUNITTEST_ASSERT_WARNING(colNameCnt == static_cast< int >(exmip1ColNames.size()), {}, solverName, "testNames lazy names: column names count"); ok = true; for (int j = 0; j < colNameCnt; j++) { if (colNames[j] != exmip1ColNames[j]) { ok = false; std::cout << "ERROR! "; std::cout << "Column " << j << " is " << colNames[j] << "\" expected \"" << exmip1ColNames[j] << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: column names"); /* Switch back to name discipline 0. We should revert to default names. Failure to switch back to discipline 0 after successfully switching to discipline 1 is some sort of internal confusion in the Osi; abort the test. */ // std::cout << "Switching to no names (aka default names)." << std::endl ; OSIUNITTEST_ASSERT_WARNING(si->setIntParam(OsiNameDiscipline, 0) == true, delete si; return, solverName, "testNames: switch to no names"); } /* This block of tests for default names should pass even if the underlying Osi doesn't recognise OsiNameDiscipline. When using default names, name vectors are not necessary, hence should have size zero. */ rowNames = si->getRowNames(); OSIUNITTEST_ASSERT_WARNING(rowNames.size() == 0, {}, solverName, "testNames no names: row names count"); ok = true; for (int i = 0; i < m; i++) { if (si->getRowName(i) != si->dfltRowColName('r', i)) { ok = false; std::cout << "ERROR! "; std::cout << "Row " << i << " is \"" << si->getRowName(i) << "\" expected \"" << si->dfltRowColName('r', i) << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames no names: row names"); colNames = si->getColNames(); OSIUNITTEST_ASSERT_WARNING(colNames.size() == 0, {}, solverName, "testNames no names: column names count"); int n = si->getNumCols(); ok = true; for (int j = 0; j < n; j++) { if (si->getColName(j) != si->dfltRowColName('c', j)) { ok = false; std::cout << "ERROR! "; std::cout << "Column " << j << " is \"" << si->getColName(j) << "\" expected \"" << si->dfltRowColName('c', j) << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames no names: column names"); /* This is as much as we can ask if the underlying solver doesn't recognise OsiNameDiscipline. Return if that's the case. */ if (!recognisesOsiNames) { delete si; return; } /* Switch back to lazy names. The previous names should again be available. */ // std::cout << "Switching back to lazy names." << std::endl ; OSIUNITTEST_ASSERT_WARNING(si->setIntParam(OsiNameDiscipline, 1) == true, delete si; return, solverName, "testNames: switch to lazy names"); rowNames = si->getRowNames(); rowNameCnt = static_cast< int >(rowNames.size()); OSIUNITTEST_ASSERT_WARNING(rowNameCnt == static_cast< int >(exmip1RowNames.size()), {}, solverName, "testNames lazy names: row names count"); ok = true; for (int i = 0; i < rowNameCnt; i++) { if (rowNames[i] != exmip1RowNames[i]) { ok = false; std::cout << "ERROR! "; std::cout << "Row " << i << " is \"" << rowNames[i] << "\" expected \"" << exmip1RowNames[i] << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: row names"); colNames = si->getColNames(); colNameCnt = static_cast< int >(colNames.size()); OSIUNITTEST_ASSERT_WARNING(colNameCnt == static_cast< int >(exmip1ColNames.size()), {}, solverName, "testNames lazy names: column names count"); ok = true; for (int j = 0; j < colNameCnt; j++) { if (colNames[j] != exmip1ColNames[j]) { ok = false; std::cout << "ERROR! "; std::cout << "Column " << j << " is " << colNames[j] << "\" expected \"" << exmip1ColNames[j] << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: column names"); /* Add a row. We should see no increase in the size of the row name vector, and asking for the name of the new row should return a default name. */ int nels = 5; int indices[5] = { 0, 2, 3, 5, 7 }; double els[5] = { 1.0, 3.0, 4.0, 5.0, 42.0 }; CoinPackedVector newRow(nels, indices, els); si->addRow(newRow, -4.2, .42); OSIUNITTEST_ASSERT_WARNING(si->getNumRows() == m + 1, delete si; return, solverName, "testNames lazy names: added a row"); rowNames = si->getRowNames(); rowNameCnt = static_cast< int >(rowNames.size()); OSIUNITTEST_ASSERT_WARNING(rowNameCnt == m, {}, solverName, "testNames lazy names: row names count after row addition"); OSIUNITTEST_ASSERT_WARNING(si->getRowName(m) == si->dfltRowColName('r', m), {}, solverName, "testNames lazy names: default name for added row"); /* Now set a name for the row. */ std::string newRowName = "NewRow"; si->setRowName(m, newRowName); OSIUNITTEST_ASSERT_WARNING(si->getRowName(m) == newRowName, {}, solverName, "testNames lazy names: setting new row name"); /* Ok, who are we really talking with? Delete row 0 and see if the names change appropriately. Since deleteRows is pure virtual, the names will change only if the underlying OsiXXX supports names (i.e., it must make a call to deleteRowNames). */ // std::cout << "Testing row deletion." << std::endl ; si->deleteRows(1, indices); rowNames = si->getRowNames(); rowNameCnt = static_cast< int >(rowNames.size()); OSIUNITTEST_ASSERT_WARNING(rowNameCnt == m, {}, solverName, "testNames lazy names: row names count after deleting row"); ok = true; for (int i = 0; i < rowNameCnt; i++) { std::string expected; if (i != m - 1) { expected = exmip1RowNames[i + 1]; } else { expected = newRowName; } if (rowNames[i] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Row " << i << " is \"" << rowNames[i] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: row names after deleting row"); /* Add/delete a column and do the same tests. Expected results as above. */ nels = 3; indices[0] = 0; indices[1] = 2; indices[2] = 4; els[0] = 1.0; els[1] = 4.0; els[2] = 24.0; CoinPackedVector newCol(nels, indices, els); si->addCol(newCol, -4.2, .42, 42.0); OSIUNITTEST_ASSERT_ERROR(si->getNumCols() == n + 1, delete si; return, solverName, "testNames lazy names: columns count after adding column"); colNames = si->getColNames(); colNameCnt = static_cast< int >(colNames.size()); OSIUNITTEST_ASSERT_WARNING(colNameCnt == n, {}, solverName, "testNames lazy names: columns names count after adding column"); OSIUNITTEST_ASSERT_WARNING(si->getColName(n) == si->dfltRowColName('c', n), {}, solverName, "testNames lazy names default column name after adding column"); std::string newColName = "NewCol"; si->setColName(n, newColName); OSIUNITTEST_ASSERT_WARNING(si->getColName(n) == newColName, {}, solverName, "testNames lazy names: setting column name"); // std::cout << "Testing column deletion." << std::endl ; si->deleteCols(1, indices); colNames = si->getColNames(); colNameCnt = static_cast< int >(colNames.size()); OSIUNITTEST_ASSERT_WARNING(colNameCnt == n, {}, solverName, "testNames lazy names: column names count after deleting column"); ok = true; for (int j = 0; j < colNameCnt; j++) { std::string expected; if (j != n - 1) { expected = exmip1ColNames[j + 1]; } else { expected = newColName; } if (colNames[j] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Column " << j << " is \"" << colNames[j] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: column names after deleting column"); /* Interchange row and column names. */ // std::cout << "Testing bulk replacement of names." << std::endl ; si->setRowNames(exmip1ColNames, 0, 3, 2); rowNames = si->getRowNames(); rowNameCnt = static_cast< int >(rowNames.size()); OSIUNITTEST_ASSERT_WARNING(rowNameCnt == m, {}, solverName, "testNames lazy names: row names count after bulk replace"); ok = true; for (int i = 0; i < rowNameCnt; i++) { std::string expected; if (i < 2) { expected = exmip1RowNames[i + 1]; } else if (i >= 2 && i <= 4) { expected = exmip1ColNames[i - 2]; } else { expected = newRowName; } if (rowNames[i] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Row " << i << " is \"" << rowNames[i] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: row names after bulk replace"); si->setColNames(exmip1RowNames, 3, 2, 0); colNames = si->getColNames(); colNameCnt = static_cast< int >(colNames.size()); OSIUNITTEST_ASSERT_WARNING(colNameCnt == n, {}, solverName, "testNames lazy names: column names count after bulk replace"); ok = true; for (int j = 0; j < colNameCnt; j++) { std::string expected; if (j < 2) { expected = exmip1RowNames[j + 3]; } else if (j >= 2 && j <= 6) { expected = exmip1ColNames[j + 1]; } else { expected = newColName; } if (colNames[j] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Column " << j << " is \"" << colNames[j] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: column names after bulk replace"); /* Delete a few row and column names (directly, as opposed to deleting rows or columns). Names should shift downward. */ // std::cout << "Testing name deletion." << std::endl ; si->deleteRowNames(0, 2); rowNames = si->getRowNames(); rowNameCnt = static_cast< int >(rowNames.size()); OSIUNITTEST_ASSERT_WARNING(rowNameCnt == m - 2, {}, solverName, "testNames lazy names: row names count after deleting 2 rows"); ok = true; for (int i = 0; i < rowNameCnt; i++) { std::string expected; if (i < rowNameCnt) { expected = exmip1ColNames[i]; } if (rowNames[i] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Row " << i << " is \"" << rowNames[i] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: row names after deleting 2 rows"); si->deleteColNames(5, 3); colNames = si->getColNames(); colNameCnt = static_cast< int >(colNames.size()); OSIUNITTEST_ASSERT_WARNING(colNameCnt == n - 3, {}, solverName, "testNames lazy names: column names count after deleting 3 columns"); ok = true; for (int j = 0; j < colNameCnt; j++) { std::string expected; if (j < 2) { expected = exmip1RowNames[j + 3]; } else if (j >= 2 && j < colNameCnt) { expected = exmip1ColNames[j + 1]; } if (colNames[j] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Column " << j << " is \"" << colNames[j] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames lazy names: column names after deleting 3 columns"); /* Finally, switch to full names, and make sure we retrieve full length vectors. */ // std::cout << "Switching to full names." << std::endl ; OSIUNITTEST_ASSERT_WARNING(si->setIntParam(OsiNameDiscipline, 2), delete si; return, solverName, "testNames lazy names: change name discipline"); m = si->getNumRows(); rowNames = si->getRowNames(); rowNameCnt = static_cast< int >(rowNames.size()); OSIUNITTEST_ASSERT_WARNING(rowNameCnt == m + 1, {}, solverName, "testNames full names: row names count"); OSIUNITTEST_ASSERT_WARNING(rowNames[m] == exmip1ObjName, {}, solverName, "testNames full names: objective name"); ok = true; for (int i = 0; i < rowNameCnt - 1; i++) { std::string expected; if (i < 3) { expected = exmip1ColNames[i]; } else { expected = si->dfltRowColName('r', i); } if (rowNames[i] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Row " << i << " is \"" << rowNames[i] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames full names: row names"); n = si->getNumCols(); colNames = si->getColNames(); colNameCnt = static_cast< int >(colNames.size()); OSIUNITTEST_ASSERT_WARNING(colNameCnt == n, {}, solverName, "testNames full names: column names count"); ok = true; for (int j = 0; j < colNameCnt; j++) { std::string expected; if (j < 2) { expected = exmip1RowNames[j + 3]; } else if (j >= 2 && j <= 4) { expected = exmip1ColNames[j + 1]; } else { expected = si->dfltRowColName('c', j); } if (colNames[j] != expected) { ok = false; std::cout << "ERROR! "; std::cout << "Column " << j << " is " << colNames[j] << "\" expected \"" << expected << "\"." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, {}, solverName, "testNames full names: column names"); delete si; } //-------------------------------------------------------------------------- /*! \brief Tests for a solution imposed by the user. Checks the routines setColSolution (primal variables) and setRowSolution (dual variables). Goes on to check that getReducedCost and getRowActivity use the imposed solution. The prototype OSI supplied as the parameter should be loaded with a smallish problem. */ void testSettingSolutions(OsiSolverInterface &proto) { OsiSolverInterface *si = proto.clone(); bool allOK = true; int i; int m = si->getNumRows(); int n = si->getNumCols(); double mval, cval, rval; const double *rowVec, *colVec, *objVec; double *colShouldBe = new double[m]; double *rowShouldBe = new double[n]; CoinAbsFltEq fltEq; testingMessage("Checking that solver can set row and column solutions ..."); /* Create dummy solution vectors. */ double *dummyColSol = new double[n]; for (i = 0; i < n; i++) { dummyColSol[i] = i + .5; } double *dummyRowSol = new double[m]; for (i = 0; i < m; i++) { dummyRowSol[i] = i - .5; } /* First the values we can set directly: primal (column) and dual (row) solutions. The osi should copy the vector, hence the pointer we get back should not be the pointer we supply. But it's reasonable to expect exact equality, as no arithmetic should be performed. */ si->setColSolution(dummyColSol); OSIUNITTEST_ASSERT_ERROR(dummyColSol != si->getColSolution(), allOK = false, *si, "setting solutions: solver should not return original pointer"); rowVec = si->getColSolution(); bool ok = true; for (i = 0; i < n; i++) { mval = rowVec[i]; rval = dummyColSol[i]; if (mval != rval) { ok = false; std::cout << "x<" << i << "> = " << mval << ", expecting " << rval << ", |error| = " << (mval - rval) << "." << std::endl; } } OSIUNITTEST_ASSERT_ERROR(ok == true, allOK = false, *si, "setting solutions: solver stored column solution correctly"); si->setRowPrice(dummyRowSol); OSIUNITTEST_ASSERT_ERROR(dummyRowSol != si->getRowPrice(), allOK = false, *si, "setting solutions: solver should not return original pointer"); colVec = si->getRowPrice(); if (colVec != NULL) { ok = true; for (i = 0; i < m; i++) { mval = colVec[i]; cval = dummyRowSol[i]; if (mval != cval) { ok = false; std::cout << "y<" << i << "> = " << mval << ", expecting " << cval << ", |error| = " << (mval - cval) << "." << std::endl; } } } else ok = false; OSIUNITTEST_ASSERT_ERROR(ok == true, allOK = false, *si, "setting solutions: solver stored row price correctly"); /* Now let's get serious. Check that reduced costs and row activities match the values we just specified for row and column solutions. Absolute equality cannot be assumed here. Reduced costs first: c - yA */ rowVec = si->getReducedCost(); objVec = si->getObjCoefficients(); const CoinPackedMatrix *mtx = si->getMatrixByCol(); mtx->transposeTimes(dummyRowSol, rowShouldBe); if (rowVec != NULL) { ok = true; for (i = 0; i < n; i++) { mval = rowVec[i]; rval = objVec[i] - rowShouldBe[i]; if (!fltEq(mval, rval)) { ok = false; std::cout << "cbar<" << i << "> = " << mval << ", expecting " << rval << ", |error| = " << (mval - rval) << "." << std::endl; } } } else ok = false; OSIUNITTEST_ASSERT_WARNING(ok == true, allOK = false, *si, "setting solutions: reduced costs from solution set with setRowPrice"); /* Row activity: Ax */ colVec = si->getRowActivity(); mtx->times(dummyColSol, colShouldBe); ok = true; for (i = 0; i < m; i++) { mval = colVec[i]; cval = colShouldBe[i]; if (!fltEq(mval, cval)) { ok = false; std::cout << "lhs<" << i << "> = " << mval << ", expecting " << cval << ", |error| = " << (mval - cval) << "." << std::endl; } } OSIUNITTEST_ASSERT_WARNING(ok == true, allOK = false, *si, "setting solutions: row activity from solution set with setColSolution"); if (allOK) { testingMessage(" ok.\n"); } else { failureMessage(*si, "Errors handling imposed column/row solutions."); } delete[] dummyColSol; delete[] colShouldBe; delete[] dummyRowSol; delete[] rowShouldBe; delete si; return; } //-------------------------------------------------------------------------- /*! \brief Helper routines to test OSI parameters. A set of helper routines to test integer, double, and hint parameter set/get routines. */ bool testIntParam(OsiSolverInterface *si, int k, int val) { int i = 123456789, orig = 123456789; bool ret; OsiIntParam key = static_cast< OsiIntParam >(k); si->getIntParam(key, orig); if (si->setIntParam(key, val)) { ret = (si->getIntParam(key, i) == true) && (i == val); } else { ret = (si->getIntParam(key, i) == true) && (i == orig); } return ret; } bool testDblParam(OsiSolverInterface *si, int k, double val) { double d = 123456789.0, orig = 123456789.0; bool ret; OsiDblParam key = static_cast< OsiDblParam >(k); si->getDblParam(key, orig); if (si->setDblParam(key, val)) { ret = (si->getDblParam(key, d) == true) && (d == val); } else { ret = (si->getDblParam(key, d) == true) && (d == orig); } return ret; } bool testHintParam(OsiSolverInterface *si, int k, bool sense, OsiHintStrength strength, int *throws) /* Tests for proper behaviour of [set,get]HintParam methods. The initial get tests the return value to see if the hint is implemented; the values returned for sense and strength are not checked. If the hint is implemented, a pair of set/get calls is performed at the strength specified by the parameter. The set can return true or, at strength OsiForceDo, throw an exception if the solver cannot comply. The rationale would be that only OsiForceDo must be obeyed, so anything else should return true regardless of whether the solver followed the hint. The test checks that the value and strength returned by getHintParam matches the previous call to setHintParam. This is arguably wrong --- one can argue that it should reflect the solver's ability to comply with the hint. But that's how the OSI interface standard has evolved up to now. If the hint is not implemented, attempting to set the hint should return false, or throw an exception at strength OsiForceDo. The testing code which calls testHintParam is set up so that a successful return is defined as true if the hint is implemented, false if it is not. Information printing is suppressed; uncomment and recompile if you want it. */ { bool post_sense; OsiHintStrength post_strength; bool ret; OsiHintParam key = static_cast< OsiHintParam >(k); if (si->getHintParam(key, post_sense, post_strength)) { ret = false; std::ostringstream tstname; tstname << "testHintParam: hint " << static_cast< int >(key) << " sense " << sense << " strength " << static_cast< int >(strength); if (strength == OsiForceDo) { try { if (si->setHintParam(key, sense, strength)) { ret = (si->getHintParam(key, post_sense, post_strength) == true) && (post_strength == strength) && (post_sense == sense); } } catch (CoinError &e) { std::cout << tstname.str() << " catched CoinError exception " << e.message() << std::endl; ret = true; (*throws)++; } } else { OSIUNITTEST_CATCH_WARNING( if (si->setHintParam(key, sense, strength)) { ret = (si->getHintParam(key, post_sense, post_strength) == true) && (post_strength == strength) && (post_sense == sense); }, (*throws)++; ret = (strength == OsiForceDo), *si, tstname.str()); } } else { ret = true; std::ostringstream tstname; tstname << "testHintParam: hint " << static_cast< int >(key) << " sense " << sense << " strength " << static_cast< int >(strength); OSIUNITTEST_CATCH_WARNING(ret = si->setHintParam(key, sense, strength), (*throws)++; ret = !(strength == OsiForceDo), *si, tstname.str()); } return ret; } /* Test functionality related to the objective function: * Does the solver properly handle a constant offset? * Does the solver properly handle primal and dual objective limits? This routine only checks for the correct answers. It does not check whether the solver stops early due to objective limits. * Does the solver properly handle minimisation / maximisation via setObjSense? The return value is the number of failures recorded by the routine. */ void testObjFunctions(const OsiSolverInterface *emptySi, const std::string &mpsDir) { OsiSolverInterface *si = emptySi->clone(); CoinRelFltEq eq; int i; std::cout << "Testing functionality related to the objective." << std::endl; std::string solverName = "Unknown solver"; si->getStrParam(OsiSolverName, solverName); /* Check for default objective sense. This should be minimisation. */ OSIUNITTEST_ASSERT_ERROR(si->getObjSense() == 1.0 || si->getObjSense() == -1.0, {}, solverName, "testObjFunctions: default objective sense is determinant value"); OSIUNITTEST_ASSERT_WARNING(si->getObjSense() == 1.0, {}, solverName, "testObjFunctions: default objective sense is minimization"); /* Read in e226; chosen because it has an offset defined in the mps file. We can't continue if we can't read the test problem. */ std::string fn = mpsDir + "e226"; OSIUNITTEST_ASSERT_ERROR(si->readMps(fn.c_str(), "mps") == 0, delete si; return, solverName, "testObjFunctions: read MPS"); /* Solve and test for the correct objective value. */ si->initialSolve(); double objValue = si->getObjValue(); double objNoOffset = -18.751929066; double objOffset = +7.113; OSIUNITTEST_ASSERT_ERROR(eq(objValue, (objNoOffset + objOffset)), {}, solverName, "testObjFunctions: getObjValue with constant in objective"); /* Test objective limit methods. If no limit has been specified, they should return false. */ OSIUNITTEST_ASSERT_ERROR(!si->isPrimalObjectiveLimitReached(), {}, solverName, "testObjFunctions: isPrimalObjectiveLimitReached without limit (min)"); OSIUNITTEST_ASSERT_ERROR(!si->isDualObjectiveLimitReached(), {}, solverName, "testObjFunctions: isDualObjectiveLimitReached without limit (min)"); /* One could think that also no limit should be reached in case of maximization. * However, by default primal and dual limits are not unset, but set to plus or minus infinity. * So, if we change the objective sense, we need to remember to set also the limits to a nonlimiting value. */ si->setObjSense(-1.0); si->setDblParam(OsiPrimalObjectiveLimit, COIN_DBL_MAX); si->setDblParam(OsiDualObjectiveLimit, -COIN_DBL_MAX); OSIUNITTEST_ASSERT_ERROR(!si->isPrimalObjectiveLimitReached(), {}, solverName, "testObjFunctions: isPrimalObjectiveLimitReached without limit (max)"); OSIUNITTEST_ASSERT_ERROR(!si->isDualObjectiveLimitReached(), {}, solverName, "testObjFunctions: isDualObjectiveLimitReached without limit (max)"); si->setObjSense(1.0); si->setDblParam(OsiPrimalObjectiveLimit, -COIN_DBL_MAX); si->setDblParam(OsiDualObjectiveLimit, COIN_DBL_MAX); /* Test objective limit methods. There's no attempt to see if the solver stops early when given a limit that's tighter than the optimal objective. All we're doing here is checking that the routines return the correct value when the limits are exceeded. For minimisation (maximisation) the primal limit represents an acceptable level of `goodness'; to be true, we should be below (above) it. The dual limit represents an unacceptable level of `badness'; to be true, we should be above (below) it. The loop performs two iterations, first for maximisation, then for minimisation. For maximisation, z* = 111.65096. The second iteration is sort of redundant, but it does test the ability to switch back to minimisation. */ double expectedObj[2] = { 111.650960689, objNoOffset + objOffset }; double primalObjLim[2] = { 100.0, -5.0 }; double dualObjLim[2] = { 120.0, -15.0 }; double optSense[2] = { -1.0, 1.0 }; for (i = 0; i <= 1; i++) { si->setObjSense(optSense[i]); // reset objective limits to infinity si->setDblParam(OsiPrimalObjectiveLimit, -optSense[i] * COIN_DBL_MAX); si->setDblParam(OsiDualObjectiveLimit, optSense[i] * COIN_DBL_MAX); si->initialSolve(); objValue = si->getObjValue(); OSIUNITTEST_ASSERT_ERROR(eq(objValue, expectedObj[i]), {}, solverName, "testObjFunctions: optimal value during max/min switch"); si->setDblParam(OsiPrimalObjectiveLimit, primalObjLim[i]); si->setDblParam(OsiDualObjectiveLimit, dualObjLim[i]); OSIUNITTEST_ASSERT_WARNING(si->isPrimalObjectiveLimitReached(), {}, solverName, "testObjFunctions: primal objective limit"); OSIUNITTEST_ASSERT_WARNING(si->isDualObjectiveLimitReached(), {}, solverName, "testObjFunctions: dual objective limit"); } delete si; si = 0; /* Finally, check that the objective sense is treated as a parameter of the solver, not a property of the problem. The test clones emptySi, inverts the default objective sense, clones a second solver, then loads and optimises e226. */ si = emptySi->clone(); double dfltSense = si->getObjSense(); dfltSense = -dfltSense; si->setObjSense(dfltSense); OsiSolverInterface *si2 = si->clone(); delete si; si = NULL; OSIUNITTEST_ASSERT_ERROR(si2->getObjSense() == dfltSense, {}, solverName, "testObjFunctions: objective sense preserved by clone"); OSIUNITTEST_ASSERT_ERROR(si2->readMps(fn.c_str(), "mps") == 0, delete si; return, solverName, "testObjFunctions: 2nd read MPS"); OSIUNITTEST_ASSERT_ERROR(si2->getObjSense() == dfltSense, {}, solverName, "testObjFunctions: objective sense preserved by problem load"); si2->initialSolve(); if (dfltSense < 0) { i = 0; } else { i = 1; } objValue = si2->getObjValue(); OSIUNITTEST_ASSERT_ERROR(eq(objValue, expectedObj[i]), {}, solverName, "testObjFunctions: optimal value of load problem after set objective sense"); delete si2; } /* Check that solver returns the proper status for artificial variables. The OSI convention is that this status should be reported as if the artificial uses a positive coefficient. Specifically: ax <= b ==> ax + s = b, 0 <= s <= infty ax >= b ==> ax + s = b, -infty <= s <= 0 If the constraint is tight at optimum, then the status should be atLowerBound for a <= constraint, atUpperBound for a >= constraint. The test problem is x1 >= -5 (c0) x1 <= 2 (c1) x2 >= 44 (c2) x2 <= 51 (c3) This is evaluated for two objectives, so that we have all combinations of tight constraints under minimisation and maximisation. max x1-x2 min x1-x2 obj -42 -56 c0 basic upper c1 lower basic c2 upper basic c3 basic lower */ void testArtifStatus(const OsiSolverInterface *emptySi) { OsiSolverInterface *si = emptySi->clone(); double infty = si->getInfinity(); testingMessage("Testing status for artificial variables.\n"); /* Set up the example problem in packed column-major vector format and load it into the solver. */ int colCnt = 2; int rowCnt = 4; int indices[] = { 0, 1, 2, 3 }; double coeffs[] = { 1.0, 1.0, 1.0, 1.0 }; CoinBigIndex starts[] = { 0, 2, 4 }; double obj[] = { 1.0, -1.0 }; double vubs[] = { infty, infty }; double vlbs[] = { -infty, -infty }; double rubs[] = { infty, 2.0, infty, 51.0 }; double rlbs[] = { -5.0, -infty, 44.0, -infty }; std::string contype[] = { ">=", "<=", ">=", "<=" }; std::string statCode[] = { "isFree", "basic", "atUpperBound", "atLowerBound" }; std::string sense[] = { "maximise", "minimise" }; si->loadProblem(colCnt, rowCnt, starts, indices, coeffs, vlbs, vubs, obj, rlbs, rubs); /* Vectors for objective sense and correct answers. Maximise first. */ double objSense[] = { -1.0, 1.0 }; double zopt[] = { -42.0, -56 }; CoinWarmStartBasis::Status goodStatus[] = { CoinWarmStartBasis::basic, CoinWarmStartBasis::atLowerBound, CoinWarmStartBasis::atUpperBound, CoinWarmStartBasis::basic, CoinWarmStartBasis::atUpperBound, CoinWarmStartBasis::basic, CoinWarmStartBasis::basic, CoinWarmStartBasis::atLowerBound }; /* Get to work. Open a loop, set the objective sense, solve the problem, and then check the results: We should have an optimal solution, with the correct objective. We should be able to ask for a warm start basis, and it should show the correct status. */ CoinRelFltEq eq; for (int iter = 0; iter <= 1; iter++) { si->setObjSense(objSense[iter]); si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), {}; continue, *si, "testArtifStatus: initial solve"); OSIUNITTEST_ASSERT_ERROR(eq(si->getObjValue(), zopt[iter]), {}; continue, *si, "testArtifStatus: initial solve optimal value"); CoinWarmStart *ws = si->getWarmStart(); CoinWarmStartBasis *wsb = dynamic_cast< CoinWarmStartBasis * >(ws); OSIUNITTEST_ASSERT_ERROR(wsb != NULL, {}; continue, *si, "testArtifStatus: initial solve warm start basis"); CoinWarmStartBasis::Status stati; bool ok = true; for (int i = 0; i < rowCnt; i++) { stati = wsb->getArtifStatus(i); if (stati != goodStatus[iter * rowCnt + i]) { ok = false; std::cout << "Incorrect status " << statCode[stati] << " for " << contype[i] << " constraint c" << i << " (" << sense[iter] << "), expected " << statCode[goodStatus[iter * rowCnt + i]] << "." << std::endl; } } OSIUNITTEST_ASSERT_ERROR(ok == true, {}, *si, "testArtifStatus: artifical variable status"); delete ws; } /* Clean up. */ delete si; } /* This method checks [cbar cbar] = [c-yB c-yN] = [0 (c - yN)] for the architectural variables. (But note there's no need to discriminate between basic and nonbasic columns in the tests below.) This provides a moderately strong check on the correctness of y (getRowPrice) and cbar (getReducedCosts). The method also checks that the sign of cbar is appropriate for the status of the variables. */ void testReducedCosts(const OsiSolverInterface *emptySi, const std::string &sampleDir) { OsiSolverInterface *si = emptySi->clone(); std::string solverName; si->getStrParam(OsiSolverName, solverName); si->setHintParam(OsiDoReducePrint, true, OsiHintDo); std::cout << "Testing duals and reduced costs ... "; /* Read p0033 and solve to optimality (minimisation). */ std::string fn = sampleDir + "p0033"; si->readMps(fn.c_str(), "mps"); si->setObjSense(1.0); si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return, solverName, "testReducedCosts: solving p0033"); if (OsiUnitTest::verbosity >= 1) { std::cout << " " << solverName << " solved p0033 z = " << si->getObjValue() << "." << std::endl; } /* Get the unchanging components: size, matrix, objective. */ int n = si->getNumCols(); double *cbarCalc = new double[n]; double dualTol; si->getDblParam(OsiDualTolerance, dualTol); CoinRelFltEq eq; std::string statNames[] = { "NBFR", "B", "NBUB", "NBLB" }; /* Resolve, first as maximisation, then minimisation, and do the tests. */ double minmax[] = { -1.0, 1.0 }; for (int ndx = 0; ndx < 2; ndx++) { si->setObjSense(minmax[ndx]); si->resolve(); OSIUNITTEST_ASSERT_ERROR(si->isProvenOptimal(), return, solverName, "testReducedCosts: solving p0033 after changing objective sense"); if (OsiUnitTest::verbosity >= 1) { std::cout << " " << solverName << ((si->getObjSense() < 0) ? " maximised" : " minimised") << " p0033 z = " << si->getObjValue() << "." << std::endl; } /* Retrieve status, duals, and reduced costs. Calculate c - yA. */ const CoinPackedMatrix *mtx = si->getMatrixByCol(); const double *c = si->getObjCoefficients(); const CoinWarmStartBasis *wsb = dynamic_cast< CoinWarmStartBasis * >(si->getWarmStart()); double dir = si->getObjSense(); const double *y = si->getRowPrice(); const double *cbar = si->getReducedCost(); mtx->transposeTimes(y, cbarCalc); std::transform(c, c + n, cbarCalc, cbarCalc, std::minus< double >()); /* Walk the architecturals and check that cbar = c - ya and has the correct sign given the status and objective sense (max/min). */ bool cbarCalcj_ok = true; bool testcbarj_ok = true; for (int j = 0; j < n; j++) { CoinWarmStartBasis::Status statj = wsb->getStructStatus(j); double cbarj = cbar[j]; double cbarCalcj = cbarCalc[j]; if (OsiUnitTest::verbosity >= 1) { std::cout << " x<" << j << "> " << statNames[statj] << ", cbar<" << j << "> = " << cbarj << "." << std::endl; } if (!eq(cbarj, cbarCalcj)) { cbarCalcj_ok = false; if (OsiUnitTest::verbosity >= 1) { std::cout << " " << cbarj << " = cbar<" << j << "> != c<" << j << "> - ya<" << j << "> = " << cbarCalcj << ", diff = " << cbarj - cbarCalcj << "." << std::endl; } } double testcbarj = dir * cbarj; switch (statj) { case CoinWarmStartBasis::atUpperBound: { if (testcbarj > dualTol) { testcbarj_ok = false; if (OsiUnitTest::verbosity >= 1) { std::cout << " cbar<" << j << "> = " << cbarj << " has the wrong sign for a NBUB variable." << std::endl; } } break; } case CoinWarmStartBasis::atLowerBound: { if (testcbarj < -dualTol) { testcbarj_ok = false; if (OsiUnitTest::verbosity >= 1) { std::cout << " cbar<" << j << "> = " << cbarj << " has the wrong sign for a NBLB variable." << std::endl; } } break; } case CoinWarmStartBasis::isFree: { if (CoinAbs(testcbarj) > dualTol) { testcbarj_ok = false; if (OsiUnitTest::verbosity >= 1) { std::cout << " cbar<" << j << "> = " << cbarj << " should be zero for a NBFR variable." << std::endl; } } break; } case CoinWarmStartBasis::basic: { if (CoinAbs(testcbarj) > dualTol) { testcbarj_ok = false; if (OsiUnitTest::verbosity >= 1) { std::cout << " cbar<" << j << "> = " << cbarj << " should be zero for a basic variable." << std::endl; } } break; } default: { break; } } } OSIUNITTEST_ASSERT_ERROR(cbarCalcj_ok == true, {}, solverName, "testReducedCosts: reduced costs"); OSIUNITTEST_ASSERT_ERROR(testcbarj_ok == true, {}, solverName, "testReducedCosts: basis status of structural variable"); delete wsb; } delete[] cbarCalc; } /* Test the writeMps and writeMpsNative functions by loading a problem, writing it out to a file, reloading it, and solving. Implicitly assumes readMps has already been tested. fn should be the path to exmip1. */ void testWriteMps(const OsiSolverInterface *emptySi, std::string fn) { testingMessage("Testing writeMps and writeMpsNative.\n"); CoinRelFltEq eq(1.0e-8); OsiSolverInterface *si1 = emptySi->clone(); OsiSolverInterface *si2 = emptySi->clone(); OsiSolverInterface *si3 = emptySi->clone(); /* Sanity test. Read in exmip1 and do an initialSolve. */ OSIUNITTEST_ASSERT_ERROR(si1->readMps(fn.c_str(), "mps") == 0, return, *si1, "testWriteMps: read MPS"); bool solved = true; OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si1->initialSolve(), solved = false, *si1, "testWriteMps: solving LP", TestOutcome::ERROR, e.className() == "OsiVolSolverInterface" || e.className() == "OsiTestSolverInterface"); double soln = si1->getObjValue(); /* Write a test output file with writeMpsNative, then read and solve. See if we get the right answer. FIXME: Really, this test should verify values --- Vol could participate in that (lh, 070726). */ si1->writeMpsNative("test.out", NULL, NULL); OSIUNITTEST_ASSERT_ERROR(si2->readMps("test.out", "") == 0, return, *si1, "testWriteMps: read LP written by writeMpsNative"); if (solved) { OSIUNITTEST_CATCH_ERROR(si2->initialSolve(), return, *si1, "testWriteMps: solving LP written by writeMpsNative"); OSIUNITTEST_ASSERT_ERROR(eq(soln, si2->getObjValue()), return, *si1, "testWriteMps: solving LP written by writeMpsNative"); } /* Repeat with writeMps. */ si1->writeMps("test2", "out"); OSIUNITTEST_ASSERT_ERROR(si3->readMps("test2.out", "") == 0, return, *si1, "testWriteMps: read LP written by writeMps"); if (solved) { OSIUNITTEST_CATCH_ERROR(si3->initialSolve(), return, *si1, "testWriteMps: solving LP written by writeMps"); OSIUNITTEST_ASSERT_ERROR(eq(soln, si3->getObjValue()), return, *si1, "testWriteMps: solving LP written by writeMps"); } /* Clean up. */ delete si1; delete si2; delete si3; } /* Test writeLp and writeLpNative. Same sequence as for testWriteMps, above. Implicitly assumes readLp has been tested, but in fact that's not the case at present (lh, 070726). */ void testWriteLp(const OsiSolverInterface *emptySi, std::string fn) { testingMessage("Testing writeLp and writeLpNative.\n"); CoinRelFltEq eq(1.0e-8); OsiSolverInterface *si1 = emptySi->clone(); OsiSolverInterface *si2 = emptySi->clone(); OsiSolverInterface *si3 = emptySi->clone(); OSIUNITTEST_ASSERT_ERROR(si1->readMps(fn.c_str(), "mps") == 0, return, *si1, "testWriteLp: read MPS"); bool solved = true; OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si1->initialSolve(), solved = false, *si1, "testWriteLp: solving LP", TestOutcome::ERROR, e.className() == "OsiVolSolverInterface" || e.className() == "OsiTestSolverInterface"); double soln = si1->getObjValue(); si1->writeLpNative("test.lp", NULL, NULL, 1.0e-9, 10, 8); OSIUNITTEST_ASSERT_ERROR(si2->readLp("test.lp") == 0, return, *si1, "testWriteLp: read LP written by writeLpNative"); if (solved) { OSIUNITTEST_CATCH_ERROR(si2->initialSolve(), return, *si1, "testWriteLp: solving LP written by writeLpNative"); OSIUNITTEST_ASSERT_ERROR(eq(soln, si2->getObjValue()), return, *si1, "testWriteLp: solving LP written by writeLpNative"); } si1->writeLp("test2"); OSIUNITTEST_ASSERT_ERROR(si3->readLp("test2.lp") == 0, return, *si1, "testWriteLp: read LP written by writeLp"); if (solved) { OSIUNITTEST_CATCH_ERROR(si3->initialSolve(), return, *si1, "testWriteLp: solving LP written by writeLp"); OSIUNITTEST_ASSERT_ERROR(eq(soln, si3->getObjValue()), return, *si1, "testWriteLp: solving LP written by writeLp"); } delete si1; delete si2; delete si3; } /* Test load and assign problem. The first batch of tests loads up eight solvers, using each variant of loadProblem and assignProblem, runs initialSolve for all, then checks all values for all variants. */ void testLoadAndAssignProblem(const OsiSolverInterface *emptySi, const OsiSolverInterface *exmip1Si) { CoinRelFltEq eq(1.0e-8); std::string solverName; if (!emptySi->getStrParam(OsiSolverName, solverName)) solverName = "unknown"; /* Test each variant of loadProblem and assignProblem. Clone a whack of solvers and use one for each variant. Then run initialSolve() on each solver. Then check that all values are as they should be. Note that we are not testing the variants that supply the matrix as a set of vectors (row/col starts, col/row indices, coefficients). To be really thorough, we should do another eight ... */ { testingMessage("Testing loadProblem and assignProblem methods.\n"); OsiSolverInterface *base = exmip1Si->clone(); OsiSolverInterface *si1 = emptySi->clone(); OsiSolverInterface *si2 = emptySi->clone(); OsiSolverInterface *si3 = emptySi->clone(); OsiSolverInterface *si4 = emptySi->clone(); OsiSolverInterface *si5 = emptySi->clone(); OsiSolverInterface *si6 = emptySi->clone(); OsiSolverInterface *si7 = emptySi->clone(); OsiSolverInterface *si8 = emptySi->clone(); si1->loadProblem(*base->getMatrixByCol(), base->getColLower(), base->getColUpper(), base->getObjCoefficients(), base->getRowSense(), base->getRightHandSide(), base->getRowRange()); si2->loadProblem(*base->getMatrixByRow(), base->getColLower(), base->getColUpper(), base->getObjCoefficients(), base->getRowSense(), base->getRightHandSide(), base->getRowRange()); si3->loadProblem(*base->getMatrixByCol(), base->getColLower(), base->getColUpper(), base->getObjCoefficients(), base->getRowLower(), base->getRowUpper()); si4->loadProblem(*base->getMatrixByCol(), base->getColLower(), base->getColUpper(), base->getObjCoefficients(), base->getRowLower(), base->getRowUpper()); { double objOffset; base->getDblParam(OsiObjOffset, objOffset); si1->setDblParam(OsiObjOffset, objOffset); si2->setDblParam(OsiObjOffset, objOffset); si3->setDblParam(OsiObjOffset, objOffset); si4->setDblParam(OsiObjOffset, objOffset); si5->setDblParam(OsiObjOffset, objOffset); si6->setDblParam(OsiObjOffset, objOffset); si7->setDblParam(OsiObjOffset, objOffset); si8->setDblParam(OsiObjOffset, objOffset); } /* Assign methods should set their parameters to NULL, so check for that. */ CoinPackedMatrix *pm = new CoinPackedMatrix(*base->getMatrixByCol()); double *clb = new double[base->getNumCols()]; std::copy(base->getColLower(), base->getColLower() + base->getNumCols(), clb); double *cub = new double[base->getNumCols()]; std::copy(base->getColUpper(), base->getColUpper() + base->getNumCols(), cub); double *objc = new double[base->getNumCols()]; std::copy(base->getObjCoefficients(), base->getObjCoefficients() + base->getNumCols(), objc); double *rlb = new double[base->getNumRows()]; std::copy(base->getRowLower(), base->getRowLower() + base->getNumRows(), rlb); double *rub = new double[base->getNumRows()]; std::copy(base->getRowUpper(), base->getRowUpper() + base->getNumRows(), rub); si5->assignProblem(pm, clb, cub, objc, rlb, rub); OSIUNITTEST_ASSERT_ERROR(pm == NULL, return, solverName, "testLoadAndAssignProblem: si5 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(clb == NULL, return, solverName, "testLoadAndAssignProblem: si5 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(cub == NULL, return, solverName, "testLoadAndAssignProblem: si5 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(objc == NULL, return, solverName, "testLoadAndAssignProblem: si5 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rlb == NULL, return, solverName, "testLoadAndAssignProblem: si5 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rub == NULL, return, solverName, "testLoadAndAssignProblem: si5 assignProblem should set parameters to NULL"); pm = new CoinPackedMatrix(*base->getMatrixByRow()); clb = new double[base->getNumCols()]; std::copy(base->getColLower(), base->getColLower() + base->getNumCols(), clb); cub = new double[base->getNumCols()]; std::copy(base->getColUpper(), base->getColUpper() + base->getNumCols(), cub); objc = new double[base->getNumCols()]; std::copy(base->getObjCoefficients(), base->getObjCoefficients() + base->getNumCols(), objc); rlb = new double[base->getNumRows()]; std::copy(base->getRowLower(), base->getRowLower() + base->getNumRows(), rlb); rub = new double[base->getNumRows()]; std::copy(base->getRowUpper(), base->getRowUpper() + base->getNumRows(), rub); si6->assignProblem(pm, clb, cub, objc, rlb, rub); OSIUNITTEST_ASSERT_ERROR(pm == NULL, return, solverName, "testLoadAndAssignProblem: si6 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(clb == NULL, return, solverName, "testLoadAndAssignProblem: si6 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(cub == NULL, return, solverName, "testLoadAndAssignProblem: si6 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(objc == NULL, return, solverName, "testLoadAndAssignProblem: si6 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rlb == NULL, return, solverName, "testLoadAndAssignProblem: si6 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rub == NULL, return, solverName, "testLoadAndAssignProblem: si6 assignProblem should set parameters to NULL"); pm = new CoinPackedMatrix(*base->getMatrixByCol()); clb = new double[base->getNumCols()]; std::copy(base->getColLower(), base->getColLower() + base->getNumCols(), clb); cub = new double[base->getNumCols()]; std::copy(base->getColUpper(), base->getColUpper() + base->getNumCols(), cub); objc = new double[base->getNumCols()]; std::copy(base->getObjCoefficients(), base->getObjCoefficients() + base->getNumCols(), objc); char *rsen = new char[base->getNumRows()]; std::copy(base->getRowSense(), base->getRowSense() + base->getNumRows(), rsen); double *rhs = new double[base->getNumRows()]; std::copy(base->getRightHandSide(), base->getRightHandSide() + base->getNumRows(), rhs); double *rng = new double[base->getNumRows()]; std::copy(base->getRowRange(), base->getRowRange() + base->getNumRows(), rng); si7->assignProblem(pm, clb, cub, objc, rsen, rhs, rng); OSIUNITTEST_ASSERT_ERROR(pm == NULL, return, solverName, "testLoadAndAssignProblem: si7 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(clb == NULL, return, solverName, "testLoadAndAssignProblem: si7 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(cub == NULL, return, solverName, "testLoadAndAssignProblem: si7 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(objc == NULL, return, solverName, "testLoadAndAssignProblem: si7 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rsen == NULL, return, solverName, "testLoadAndAssignProblem: si7 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rhs == NULL, return, solverName, "testLoadAndAssignProblem: si7 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rng == NULL, return, solverName, "testLoadAndAssignProblem: si7 assignProblem should set parameters to NULL"); pm = new CoinPackedMatrix(*base->getMatrixByCol()); clb = new double[base->getNumCols()]; std::copy(base->getColLower(), base->getColLower() + base->getNumCols(), clb); cub = new double[base->getNumCols()]; std::copy(base->getColUpper(), base->getColUpper() + base->getNumCols(), cub); objc = new double[base->getNumCols()]; std::copy(base->getObjCoefficients(), base->getObjCoefficients() + base->getNumCols(), objc); rsen = new char[base->getNumRows()]; std::copy(base->getRowSense(), base->getRowSense() + base->getNumRows(), rsen); rhs = new double[base->getNumRows()]; std::copy(base->getRightHandSide(), base->getRightHandSide() + base->getNumRows(), rhs); rng = new double[base->getNumRows()]; std::copy(base->getRowRange(), base->getRowRange() + base->getNumRows(), rng); si8->assignProblem(pm, clb, cub, objc, rsen, rhs, rng); OSIUNITTEST_ASSERT_ERROR(pm == NULL, return, solverName, "testLoadAndAssignProblem: si8 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(clb == NULL, return, solverName, "testLoadAndAssignProblem: si8 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(cub == NULL, return, solverName, "testLoadAndAssignProblem: si8 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(objc == NULL, return, solverName, "testLoadAndAssignProblem: si8 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rsen == NULL, return, solverName, "testLoadAndAssignProblem: si8 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rhs == NULL, return, solverName, "testLoadAndAssignProblem: si8 assignProblem should set parameters to NULL"); OSIUNITTEST_ASSERT_ERROR(rng == NULL, return, solverName, "testLoadAndAssignProblem: si8 assignProblem should set parameters to NULL"); // Create an indices vector CoinPackedVector basePv, pv; OSIUNITTEST_ASSERT_ERROR(base->getNumCols() < 10, return, solverName, "testLoadAndAssignProblem"); OSIUNITTEST_ASSERT_ERROR(base->getNumRows() < 10, return, solverName, "testLoadAndAssignProblem"); int indices[10]; int i; for (i = 0; i < 10; i++) indices[i] = i; // Test solve methods. // Vol solver interface is expected to throw // an error if the data has a ranged row. // Prepare test that there is non-zero range basePv.setFull(base->getNumRows(), base->getRowRange()); pv.setConstant(base->getNumRows(), indices, 0.0); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(base->initialSolve(), return, *base, "testLoadAndAssignProblem: base initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si1->initialSolve(), return, *base, "testLoadAndAssignProblem: si1 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si2->initialSolve(), return, *base, "testLoadAndAssignProblem: si2 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si3->initialSolve(), return, *base, "testLoadAndAssignProblem: si3 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si4->initialSolve(), return, *base, "testLoadAndAssignProblem: si4 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si5->initialSolve(), return, *base, "testLoadAndAssignProblem: si5 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si6->initialSolve(), return, *base, "testLoadAndAssignProblem: si6 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si7->initialSolve(), return, *base, "testLoadAndAssignProblem: si7 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); OSIUNITTEST_CATCH_SEVERITY_EXPECTED(si8->initialSolve(), return, *base, "testLoadAndAssignProblem: si8 initialSolve", TestOutcome::ERROR, solverName == "vol" && !basePv.isEquivalent(pv)); // Test collower basePv.setVector(base->getNumCols(), indices, base->getColLower()); pv.setVector(si1->getNumCols(), indices, si1->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si1 column lower bounds"); pv.setVector(si2->getNumCols(), indices, si2->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si2 column lower bounds"); pv.setVector(si3->getNumCols(), indices, si3->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si3 column lower bounds"); pv.setVector(si4->getNumCols(), indices, si4->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si4 column lower bounds"); pv.setVector(si5->getNumCols(), indices, si5->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si5 column lower bounds"); pv.setVector(si6->getNumCols(), indices, si6->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si6 column lower bounds"); pv.setVector(si7->getNumCols(), indices, si7->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si7 column lower bounds"); pv.setVector(si8->getNumCols(), indices, si8->getColLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si8 column lower bounds"); // Test colupper basePv.setVector(base->getNumCols(), indices, base->getColUpper()); pv.setVector(si1->getNumCols(), indices, si1->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si1 column upper bounds"); pv.setVector(si2->getNumCols(), indices, si2->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si2 column upper bounds"); pv.setVector(si3->getNumCols(), indices, si3->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si3 column upper bounds"); pv.setVector(si4->getNumCols(), indices, si4->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si4 column upper bounds"); pv.setVector(si5->getNumCols(), indices, si5->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si5 column upper bounds"); pv.setVector(si6->getNumCols(), indices, si6->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si6 column upper bounds"); pv.setVector(si7->getNumCols(), indices, si7->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si7 column upper bounds"); pv.setVector(si8->getNumCols(), indices, si8->getColUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si8 column upper bounds"); // Test getObjCoefficients basePv.setVector(base->getNumCols(), indices, base->getObjCoefficients()); pv.setVector(si1->getNumCols(), indices, si1->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si1 objective coefficients"); pv.setVector(si2->getNumCols(), indices, si2->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si2 objective coefficients"); pv.setVector(si3->getNumCols(), indices, si3->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si3 objective coefficients"); pv.setVector(si4->getNumCols(), indices, si4->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si4 objective coefficients"); pv.setVector(si5->getNumCols(), indices, si5->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si5 objective coefficients"); pv.setVector(si6->getNumCols(), indices, si6->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si6 objective coefficients"); pv.setVector(si7->getNumCols(), indices, si7->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si7 objective coefficients"); pv.setVector(si8->getNumCols(), indices, si8->getObjCoefficients()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si8 objective coefficients"); // Test rowrhs basePv.setFull(base->getNumRows(), base->getRightHandSide()); pv.setFull(si1->getNumRows(), si1->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si1 right hand side"); pv.setFull(si2->getNumRows(), si2->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si2 right hand side"); pv.setFull(si3->getNumRows(), si3->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si3 right hand side"); pv.setFull(si4->getNumRows(), si4->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si4 right hand side"); pv.setFull(si5->getNumRows(), si5->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si5 right hand side"); pv.setFull(si6->getNumRows(), si6->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si6 right hand side"); pv.setFull(si7->getNumRows(), si7->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si7 right hand side"); pv.setFull(si8->getNumRows(), si8->getRightHandSide()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si8 right hand side"); // Test rowrange basePv.setFull(base->getNumRows(), base->getRowRange()); pv.setFull(si1->getNumRows(), si1->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si1 row range"); pv.setFull(si2->getNumRows(), si2->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si2 row range"); pv.setFull(si3->getNumRows(), si3->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si3 row range"); pv.setFull(si4->getNumRows(), si4->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si4 row range"); pv.setFull(si5->getNumRows(), si5->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si5 row range"); pv.setFull(si6->getNumRows(), si6->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si6 row range"); pv.setFull(si7->getNumRows(), si7->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si7 row range"); pv.setFull(si8->getNumRows(), si8->getRowRange()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si8 row range"); // Test row sense { const char *cb = base->getRowSense(); const char *c1 = si1->getRowSense(); const char *c2 = si2->getRowSense(); const char *c3 = si3->getRowSense(); const char *c4 = si4->getRowSense(); const char *c5 = si5->getRowSense(); const char *c6 = si6->getRowSense(); const char *c7 = si7->getRowSense(); const char *c8 = si8->getRowSense(); int nr = base->getNumRows(); bool rowsense_ok1 = true; bool rowsense_ok2 = true; bool rowsense_ok3 = true; bool rowsense_ok4 = true; bool rowsense_ok5 = true; bool rowsense_ok6 = true; bool rowsense_ok7 = true; bool rowsense_ok8 = true; for (i = 0; i < nr; i++) { rowsense_ok1 &= cb[i] == c1[i]; rowsense_ok2 &= cb[i] == c2[i]; rowsense_ok3 &= cb[i] == c3[i]; rowsense_ok4 &= cb[i] == c4[i]; rowsense_ok5 &= cb[i] == c5[i]; rowsense_ok6 &= cb[i] == c6[i]; rowsense_ok7 &= cb[i] == c7[i]; rowsense_ok8 &= cb[i] == c8[i]; } OSIUNITTEST_ASSERT_ERROR(rowsense_ok1, return, solverName, "testLoadAndAssignProblem: si1 row sense"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok2, return, solverName, "testLoadAndAssignProblem: si2 row sense"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok3, return, solverName, "testLoadAndAssignProblem: si3 row sense"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok4, return, solverName, "testLoadAndAssignProblem: si4 row sense"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok5, return, solverName, "testLoadAndAssignProblem: si5 row sense"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok6, return, solverName, "testLoadAndAssignProblem: si6 row sense"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok7, return, solverName, "testLoadAndAssignProblem: si7 row sense"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok8, return, solverName, "testLoadAndAssignProblem: si8 row sense"); } // Test rowlower basePv.setVector(base->getNumRows(), indices, base->getRowLower()); pv.setVector(si1->getNumRows(), indices, si1->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si1 row lower bounds"); pv.setVector(si2->getNumRows(), indices, si2->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si2 row lower bounds"); pv.setVector(si3->getNumRows(), indices, si3->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si3 row lower bounds"); pv.setVector(si4->getNumRows(), indices, si4->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si4 row lower bounds"); pv.setVector(si5->getNumRows(), indices, si5->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si5 row lower bounds"); pv.setVector(si6->getNumRows(), indices, si6->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si6 row lower bounds"); pv.setVector(si7->getNumRows(), indices, si7->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si7 row lower bounds"); pv.setVector(si8->getNumRows(), indices, si8->getRowLower()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si8 row lower bounds"); // Test rowupper basePv.setVector(base->getNumRows(), indices, base->getRowUpper()); pv.setVector(si1->getNumRows(), indices, si1->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si1 row upper bounds"); pv.setVector(si2->getNumRows(), indices, si2->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si2 row upper bounds"); pv.setVector(si3->getNumRows(), indices, si3->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si3 row upper bounds"); pv.setVector(si4->getNumRows(), indices, si4->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si4 row upper bounds"); pv.setVector(si5->getNumRows(), indices, si5->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si5 row upper bounds"); pv.setVector(si6->getNumRows(), indices, si6->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si6 row upper bounds"); pv.setVector(si7->getNumRows(), indices, si7->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si7 row upper bounds"); pv.setVector(si8->getNumRows(), indices, si8->getRowUpper()); OSIUNITTEST_ASSERT_ERROR(basePv.isEquivalent(pv), return, solverName, "testLoadAndAssignProblem: si8 row upper bounds"); // Test Constraint Matrix OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si1->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si1 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si1->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si1 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si2->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si2 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si2->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si2 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si3->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si3 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si3->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si3 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si4->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si4 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si4->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si4 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si5->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si5 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si5->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si5 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si6->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si6 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si6->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si6 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si7->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si7 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si7->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si7 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByCol()->isEquivalent(*si8->getMatrixByCol()), return, solverName, "testLoadAndAssignProblem: si8 constraint matrix"); OSIUNITTEST_ASSERT_ERROR(base->getMatrixByRow()->isEquivalent(*si8->getMatrixByRow()), return, solverName, "testLoadAndAssignProblem: si8 constraint matrix"); // Test Objective Value OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si1->getObjValue()), return, solverName, "testLoadAndAssignProblem: si1 objective value"); OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si2->getObjValue()), return, solverName, "testLoadAndAssignProblem: si2 objective value"); OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si3->getObjValue()), return, solverName, "testLoadAndAssignProblem: si3 objective value"); OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si4->getObjValue()), return, solverName, "testLoadAndAssignProblem: si4 objective value"); OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si5->getObjValue()), return, solverName, "testLoadAndAssignProblem: si5 objective value"); OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si6->getObjValue()), return, solverName, "testLoadAndAssignProblem: si6 objective value"); OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si7->getObjValue()), return, solverName, "testLoadAndAssignProblem: si7 objective value"); OSIUNITTEST_ASSERT_ERROR(eq(base->getObjValue(), si8->getObjValue()), return, solverName, "testLoadAndAssignProblem: si8 objective value"); // Clean-up delete si8; delete si7; delete si6; delete si5; delete si4; delete si3; delete si2; delete si1; delete base; } /* The OSI interface spec says any of the parameters to loadProblem can default to null. Let's see if that works. Test the rowub, rowlb and sense, rhs, range variants. Arguably we should check all variants again, but let's hope that OSI implementors carry things over from one variant to another. For Gurobi, this does not work. Since Gurobi does not know about free rows (rowtype 'N'), OsiGrb translates free rows into 'L' (lower-equal) rows with a -infty right-hand side. This makes some of the tests below fail. Ok, gurobi has quirks. As do other solvers. But those quirks should be hidden from users of OsiGrb -- i.e., the translation should be done within OsiGrb, and should not be visible to the user (or this test). That's the point of OSI. It's an implementation failure and should not be swept under the rug here. -- lh, 100826 -- OsiGrb does quite some attempts to hide this translation from the user, need to check further what could be done. -- sv, 110306 -- ps: it's just coincidence that I actually see your messages here... */ if (solverName != "gurobi") { int i; OsiSolverInterface *si1 = emptySi->clone(); OsiSolverInterface *si2 = emptySi->clone(); si1->loadProblem(*exmip1Si->getMatrixByCol(), NULL, NULL, NULL, NULL, NULL); si2->loadProblem(*exmip1Si->getMatrixByCol(), NULL, NULL, NULL, NULL, NULL, NULL); // Test column settings OSIUNITTEST_ASSERT_ERROR(si1->getNumCols() == exmip1Si->getNumCols(), return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); bool collower_ok = true; bool colupper_ok = true; bool colobjcoef_ok = true; for (i = 0; i < si1->getNumCols(); i++) { collower_ok &= eq(si1->getColLower()[i], 0.0); colupper_ok &= eq(si1->getColUpper()[i], si1->getInfinity()); colobjcoef_ok &= eq(si1->getObjCoefficients()[i], 0.0); } OSIUNITTEST_ASSERT_ERROR(collower_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(colupper_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(colobjcoef_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); // Test row settings OSIUNITTEST_ASSERT_ERROR(si1->getNumRows() == exmip1Si->getNumRows(), return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); const double *rh = si1->getRightHandSide(); const double *rr = si1->getRowRange(); const char *rs = si1->getRowSense(); const double *rl = si1->getRowLower(); const double *ru = si1->getRowUpper(); bool rowrhs_ok = true; bool rowrange_ok = true; bool rowsense_ok = true; bool rowlower_ok = true; bool rowupper_ok = true; for (i = 0; i < si1->getNumRows(); i++) { rowrhs_ok &= eq(rh[i], 0.0); rowrange_ok &= eq(rr[i], 0.0); rowsense_ok &= 'N' == rs[i]; rowlower_ok &= eq(rl[i], -si1->getInfinity()); rowupper_ok &= eq(ru[i], si1->getInfinity()); } OSIUNITTEST_ASSERT_ERROR(rowrhs_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowrange_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowlower_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowupper_ok == true, return, solverName, "testLoadAndAssignProblem: si1 loadProblem with matrix only"); // And repeat for si2 OSIUNITTEST_ASSERT_ERROR(si2->getNumCols() == exmip1Si->getNumCols(), return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); collower_ok = true; colupper_ok = true; colobjcoef_ok = true; for (i = 0; i < si2->getNumCols(); i++) { collower_ok &= eq(si2->getColLower()[i], 0.0); colupper_ok &= eq(si2->getColUpper()[i], si2->getInfinity()); colobjcoef_ok &= eq(si2->getObjCoefficients()[i], 0.0); } OSIUNITTEST_ASSERT_ERROR(collower_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(colupper_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(colobjcoef_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); // OSIUNITTEST_ASSERT_ERROR(si2->getNumRows() == exmip1Si->getNumRows(), return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); rh = si2->getRightHandSide(); rr = si2->getRowRange(); rs = si2->getRowSense(); rl = si2->getRowLower(); ru = si2->getRowUpper(); rowrhs_ok = true; rowrange_ok = true; rowsense_ok = true; rowlower_ok = true; rowupper_ok = true; for (i = 0; i < si2->getNumRows(); i++) { rowrhs_ok &= eq(rh[i], 0.0); rowrange_ok &= eq(rr[i], 0.0); rowsense_ok &= 'G' == rs[i]; rowlower_ok &= eq(rl[i], 0.0); rowupper_ok &= eq(ru[i], si2->getInfinity()); } OSIUNITTEST_ASSERT_ERROR(rowrhs_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowrange_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowlower_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); OSIUNITTEST_ASSERT_ERROR(rowupper_ok == true, return, solverName, "testLoadAndAssignProblem: si2 loadProblem with matrix only"); delete si1; delete si2; } else { failureMessage(solverName, "OsiGrb exposes inability to handle 'N' constraints (expected)."); OSIUNITTEST_ADD_OUTCOME(solverName, "testLoadAndAssignProblem", "ability to handle 'N' constraints", TestOutcome::ERROR, true); } /* Load problem with row rhs, sense and range, but leave column bounds and objective at defaults. A belt-and-suspenders kind of test. Arguably we should have the symmetric case, with column bounds valid and row values at default. */ { int i; OsiSolverInterface *si = emptySi->clone(); si->loadProblem(*exmip1Si->getMatrixByRow(), NULL, NULL, NULL, exmip1Si->getRowSense(), exmip1Si->getRightHandSide(), exmip1Si->getRowRange()); // Test column settings OSIUNITTEST_ASSERT_ERROR(si->getNumCols() == exmip1Si->getNumCols(), return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); bool collower_ok = true; bool colupper_ok = true; bool colobjcoef_ok = true; for (i = 0; i < si->getNumCols(); i++) { collower_ok &= eq(si->getColLower()[i], 0.0); colupper_ok &= eq(si->getColUpper()[i], si->getInfinity()); colobjcoef_ok &= eq(si->getObjCoefficients()[i], 0.0); } OSIUNITTEST_ASSERT_ERROR(collower_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); OSIUNITTEST_ASSERT_ERROR(colupper_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); OSIUNITTEST_ASSERT_ERROR(colobjcoef_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); // Test row settings OSIUNITTEST_ASSERT_ERROR(si->getNumRows() == exmip1Si->getNumRows(), return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); bool rowrhs_ok = true; bool rowrange_ok = true; bool rowsense_ok = true; bool rowlower_ok = true; bool rowupper_ok = true; for (i = 0; i < si->getNumRows(); i++) { rowrhs_ok &= eq(si->getRightHandSide()[i], exmip1Si->getRightHandSide()[i]); rowrange_ok &= eq(si->getRowRange()[i], exmip1Si->getRowRange()[i]); rowsense_ok &= si->getRowSense()[i] == exmip1Si->getRowSense()[i]; char s = si->getRowSense()[i]; if (s == 'G') { rowlower_ok &= eq(si->getRowLower()[i], exmip1Si->getRightHandSide()[i]); rowupper_ok &= eq(si->getRowUpper()[i], si->getInfinity()); } else if (s == 'L') { rowlower_ok &= eq(si->getRowLower()[i], -si->getInfinity()); rowupper_ok &= eq(si->getRowUpper()[i], exmip1Si->getRightHandSide()[i]); } else if (s == 'E') { rowlower_ok &= eq(si->getRowLower()[i], si->getRowUpper()[i]); rowupper_ok &= eq(si->getRowUpper()[i], exmip1Si->getRightHandSide()[i]); } else if (s == 'N') { rowlower_ok &= eq(si->getRowLower()[i], -si->getInfinity()); rowupper_ok &= eq(si->getRowUpper()[i], si->getInfinity()); } else if (s == 'R') { rowlower_ok &= eq(si->getRowLower()[i], exmip1Si->getRightHandSide()[i] - exmip1Si->getRowRange()[i]); rowupper_ok &= eq(si->getRowUpper()[i], exmip1Si->getRightHandSide()[i]); } } OSIUNITTEST_ASSERT_ERROR(rowrhs_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); OSIUNITTEST_ASSERT_ERROR(rowrange_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); OSIUNITTEST_ASSERT_ERROR(rowsense_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); OSIUNITTEST_ASSERT_ERROR(rowlower_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); OSIUNITTEST_ASSERT_ERROR(rowupper_ok == true, return, solverName, "testLoadAndAssignProblem: loadProblem with matrix and row bounds only"); delete si; } return; } /* Test adding rows and columns to an empty constraint system. */ void testAddToEmptySystem(const OsiSolverInterface *emptySi, bool volSolverInterface) { CoinRelFltEq eq(1.0e-7); std::string solverName = "Unknown solver"; emptySi->getStrParam(OsiSolverName, solverName); /* Add rows to an empty system. Begin by creating empty columns, then add some rows. */ { OsiSolverInterface *si = emptySi->clone(); int i; //Matrix int column[] = { 0, 1, 2 }; double row1E[] = { 4.0, 7.0, 5.0 }; double row2E[] = { 7.0, 4.0, 5.0 }; CoinPackedVector row1(3, column, row1E); CoinPackedVector row2(3, column, row2E); double objective[] = { 5.0, 6.0, 5.5 }; { // Add empty columns for (i = 0; i < 3; i++) { const CoinPackedVector reqdBySunCC; si->addCol(reqdBySunCC, 0.0, 10.0, objective[i]); } // Add rows si->addRow(row1, 2.0, 100.0); si->addRow(row2, 2.0, 100.0); // Vol can not solve problem of this form if (!volSolverInterface) { // solve si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(eq(si->getObjValue(), 2.0), {}, solverName, "testAddToEmptySystem: getObjValue after adding empty columns"); } } delete si; } // Test adding rows to NULL - alternative row vector format { OsiSolverInterface *si = emptySi->clone(); int i; //Matrix int column[] = { 0, 1, 2, 0, 1, 2 }; double row1E[] = { 4.0, 7.0, 5.0 }; double row2E[] = { 7.0, 4.0, 5.0 }; double row12E[] = { 4.0, 7.0, 5.0, 7.0, 4.0, 5.0 }; CoinBigIndex starts[] = { 0, 3, 6 }; double ub[] = { 100.0, 100.0 }; double objective[] = { 5.0, 6.0, 5.5 }; { // Add empty columns for (i = 0; i < 3; i++) { const CoinPackedVector reqdBySunCC; si->addCol(reqdBySunCC, 0.0, 10.0, objective[i]); } // Add rows si->addRows(2, starts, column, row12E, NULL, ub); // and again si->addRow(3, column, row1E, 2.0, 100.0); si->addRow(3, column, row2E, 2.0, 100.0); // Vol can not solve problem of this form if (!volSolverInterface) { // solve si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(eq(si->getObjValue(), 2.0), {}, solverName, "testAddToEmptySystem: getObjValue after adding empty columns and then rows"); } } delete si; } /* Add columns to an empty system. Start by creating empty rows, then add some columns. */ { OsiSolverInterface *si = emptySi->clone(); int i; //Matrix int row[] = { 0, 1 }; double col1E[] = { 4.0, 7.0 }; double col2E[] = { 7.0, 4.0 }; double col3E[] = { 5.0, 5.0 }; CoinPackedVector col1(2, row, col1E); CoinPackedVector col2(2, row, col2E); CoinPackedVector col3(2, row, col3E); double objective[] = { 5.0, 6.0, 5.5 }; { // Add empty rows for (i = 0; i < 2; i++) { const CoinPackedVector reqdBySunCC; si->addRow(reqdBySunCC, 2.0, 100.0); } // Add columns if (volSolverInterface) { // FIXME: this test could be done w/ the volume, but the rows must not be ranged. OSIUNITTEST_ADD_OUTCOME(solverName, "testAddToEmptySystem", "addCol adds columns to NULL", TestOutcome::WARNING, true); failureMessage(solverName, "addCol add columns to null"); } else { si->addCol(col1, 0.0, 10.0, objective[0]); si->addCol(col2, 0.0, 10.0, objective[1]); si->addCol(col3, 0.0, 10.0, objective[2]); // solve si->initialSolve(); CoinRelFltEq eq(1.0e-7); OSIUNITTEST_ASSERT_ERROR(eq(si->getObjValue(), 2.0), {}, solverName, "testAddToEmptySystem: getObjValue after adding empty rows and then columns"); } } delete si; } // Test adding columns to NULL - alternative column vector format { OsiSolverInterface *si = emptySi->clone(); int i; //Matrix int row[] = { 0, 1 }; double col1E[] = { 4.0, 7.0 }; double col23E[] = { 7.0, 4.0, 5.0, 5.0 }; int row23E[] = { 0, 1, 0, 1 }; CoinBigIndex start23E[] = { 0, 2, 4 }; double ub23E[] = { 10.0, 10.0 }; double objective[] = { 5.0, 6.0, 5.5 }; { // Add empty rows for (i = 0; i < 2; i++) { const CoinPackedVector reqdBySunCC; si->addRow(reqdBySunCC, 2.0, 100.0); } // Add columns if (volSolverInterface) { // FIXME: this test could be done w/ the volume, but the rows must not be ranged. OSIUNITTEST_ADD_OUTCOME(solverName, "testAddToEmptySystem", "addCol adds columns to NULL", TestOutcome::WARNING, true); } else { si->addCols(2, start23E, row23E, col23E, NULL, ub23E, objective + 1); si->addCol(2, row, col1E, 0.0, 10.0, objective[0]); // solve si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(eq(si->getObjValue(), 2.0), {}, solverName, "testAddToEmptySystem: getObjValue after adding empty rows and then columns (alternative format)"); } } delete si; } /* Add contradicting columns to an empty system. Either the OSI rejects these column via an exception or the LP is proven infeasible. */ { OsiSolverInterface *si = emptySi->clone(); int i; //Matrix int row[] = { 0, 1 }; double col1E[] = { 4.0, 7.0 }; double col2E[] = { 7.0, 4.0 }; double col3E[] = { 5.0, 5.0 }; CoinPackedVector col1(2, row, col1E); CoinPackedVector col2(2, row, col2E); CoinPackedVector col3(2, row, col3E); double objective[] = { 5.0, 6.0, 5.5 }; { // Add empty rows for (i = 0; i < 2; i++) { const CoinPackedVector reqdBySunCC; si->addRow(reqdBySunCC, 100.0, 100.0); } // Add columns try { si->addCol(col1, 10.0, -10.0, objective[0]); si->addCol(col2, si->getInfinity(), 0.0, objective[1]); si->addCol(col3, si->getInfinity(), si->getInfinity(), objective[2]); // solve si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(si->isAbandoned() || si->isProvenPrimalInfeasible(), {}, solverName, "testAddToEmptySystem: not infeasible or abandoned after adding contradicting columns"); } catch( CoinError& e ) { OSIUNITTEST_ADD_OUTCOME(solverName, "testAddToEmptySystem", "addCol adds contradicting columns threw CoinError", TestOutcome::PASSED, true); } } delete si; } /* Add rows with contradicting sides to an empty system. Begin by creating empty columns, then add some rows. */ { OsiSolverInterface *si = emptySi->clone(); int i; //Matrix int column[] = { 0, 1, 2 }; double row1E[] = { 4.0, 7.0, 5.0 }; double row2E[] = { 7.0, 4.0, 5.0 }; CoinPackedVector row1(3, column, row1E); CoinPackedVector row2(3, column, row2E); double objective[] = { 5.0, 6.0, 5.5 }; { // Add empty columns for (i = 0; i < 3; i++) { const CoinPackedVector reqdBySunCC; si->addCol(reqdBySunCC, 0.0, 10.0, objective[i]); } try { // Add rows si->addRow(row1, -100.0, 100.0); si->addRow(row2, si->getInfinity(), -si->getInfinity()); // Vol can not solve problem of this form if (!volSolverInterface) { // solve si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(si->isAbandoned() || si->isProvenPrimalInfeasible(), {}, solverName, "testAddToEmptySystem: infeasible or abandoned after adding rows with contradicting sides"); } } catch( CoinError& e ) { OSIUNITTEST_ADD_OUTCOME(solverName, "testAddToEmptySystem", "addRow for rows with contradicting sides threw CoinError", TestOutcome::PASSED, true); } } delete si; } } /* OsiPresolve has the property that it will report the correct (untransformed) objective for the presolved problem. Test OsiPresolve by checking the objective that we get by optimising the presolved problem. Then postsolve to get back to the original problem statement and check that we have the same objective without further iterations. This is much more a check on OsiPresolve than on the OsiXXX under test. OsiPresolve simply calls the underlying OsiXXX when it needs to solve a model. All the work involved with presolve and postsolve transforms is handled in OsiPresolve. The problems are a selection of problems from Data/Sample. In particular, e226 is in the list by virtue of having a constant offset (7.113) defined for the objective, and p0201 is in the list because presolve (as of 071015) finds no reductions. The objective for finnis (1.7279106559e+05) is not the same as the objective used by Netlib (1.7279096547e+05), but solvers clp, dylp, glpk, and cplex agree that it's correct. This test could be made stronger, but more brittle, by checking for the expected size of the constraint system after presolve. It would also be good to add a maximisation problem and check for signs of reduced costs and duals. Returns the number of errors encountered. */ int testOsiPresolve(const OsiSolverInterface *emptySi, const std::string &sampleDir) { typedef std::pair< std::string, double > probPair; std::vector< probPair > sampleProbs; sampleProbs.push_back(probPair("brandy", 1.5185098965e+03)); sampleProbs.push_back(probPair("e226", (-18.751929066 + 7.113))); //#ifdef COIN_HAS_GRB // // for the demo license of Gurobi, model "finnis" is too large, so we skip it in this case // if( dynamic_cast(emptySi) && dynamic_cast(emptySi)->isDemoLicense() ) // std::cout << "Skip model finnis in test of OsiPresolve with Gurobi, since we seem to have only a demo license of Gurobi." << std::endl; // else //#endif sampleProbs.push_back(probPair("finnis", 1.7279106559e+05)); sampleProbs.push_back(probPair("p0201", 6875)); CoinRelFltEq eq(1.0e-8); int errs = 0; int warnings = 0; std::string solverName = "Unknown solver"; OSIUNITTEST_ASSERT_ERROR(emptySi->getStrParam(OsiSolverName, solverName) == true, ++errs, solverName, "testOsiPresolve: getStrParam(OsiSolverName)"); std::cout << "Testing OsiPresolve ... " << std::endl; for (unsigned i = 0; i < sampleProbs.size(); i++) { OsiSolverInterface *si = emptySi->clone(); if (!si->setIntParam(OsiNameDiscipline, 1)) std::cout << " attempt to switch to lazy names failed."; std::string mpsName = sampleProbs[i].first; double correctObj = sampleProbs[i].second; std::cout << " testing presolve on " << mpsName << "." << std::endl; std::string fn = sampleDir + mpsName; OSIUNITTEST_ASSERT_ERROR(si->readMps(fn.c_str(), "mps") == 0, delete si; ++errs; continue, solverName, "testOsiPresolve: read MPS"); /* Set up for presolve. Allow very slight (1.0e-8) bound relaxation to retain feasibility. Discard integrality information (false) and limit the number of presolve passes to 5. */ OsiSolverInterface *presolvedModel; OsiPresolve pinfo; presolvedModel = pinfo.presolvedModel(*si, 1.0e-8, false, 5); OSIUNITTEST_ASSERT_ERROR(presolvedModel != NULL, delete si; ++errs; continue, solverName, "testOsiPresolve"); /* Optimise the presolved model and check the objective. We need to turn off any native presolve, which may or may not affect the objective. */ presolvedModel->setHintParam(OsiDoPresolveInInitial, false, OsiHintDo); presolvedModel->initialSolve(); OSIUNITTEST_ASSERT_ERROR(eq(correctObj, presolvedModel->getObjValue()), delete si; ++errs; continue, solverName, "testOsiPresolve"); /* Postsolve to return to the original formulation. The presolvedModel should no longer be needed once we've executed postsolve. Check that we get the correct objective without iterations. As before, turn off any native presolve. */ pinfo.postsolve(true); delete presolvedModel; si->setHintParam(OsiDoPresolveInResolve, false, OsiHintDo); si->resolve(); OSIUNITTEST_ASSERT_ERROR(eq(correctObj, si->getObjValue()), ++errs, solverName, "testOsiPresolve: postsolve objective value"); OSIUNITTEST_ASSERT_WARNING(si->getIterationCount() == 0, ++warnings, solverName, "testOsiPresolve: postsolve number of iterations"); delete si; } if (errs == 0) { std::cout << "OsiPresolve test ok with " << warnings << " warnings." << std::endl; } else { failureMessage(solverName, "errors during OsiPresolve test."); } return (errs); } /* Test the values returned by an empty solver interface. */ void testEmptySi(const OsiSolverInterface *emptySi) { std::string solverName; const OsiSolverInterface *si = emptySi->clone(); std::cout << "Testing empty solver interface ... " << std::endl; si->getStrParam(OsiSolverName, solverName); OSIUNITTEST_ASSERT_ERROR(si->getNumRows() == 0, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getNumCols() == 0, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getNumElements() == 0, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getColLower() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getColUpper() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getColSolution() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getObjCoefficients() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getRowRange() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getRightHandSide() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getRowSense() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getRowLower() == NULL, {}, solverName, "testEmptySi"); OSIUNITTEST_ASSERT_ERROR(si->getRowUpper() == NULL, {}, solverName, "testEmptySi"); delete si; } /* This routine uses the problem galenet (included in Data/Sample) to check getDualRays. Galenet is a primal infeasible flow problem: s1: t14 <= 20 s2: t24 + t25 <= 20 s3: t35 <= 20 n4: t14 + t24 - t46 - t47 = 0 n5: t25 + t35 - t57 - t58 = 0 d6: t46 >= 10 d7: t47 + t57 >= 20 d8: t58 >= 30 t14,t58 <= 30 tt24, t57 <= 20 t25, t35, t46 <= 10 t47 <= 2 Galenet is the original form, with mixed explicit constraints and implicit bound constraints. Galenetbnds is the same problem, but with implicit bounds converted to explicit constraints and all constraints converted to inequalities so that the algebraic test still works. The routine doesn't actually test for specific dual rays; rather, it tests for rA >= 0 and rb < 0, on the assumption that the dual constraint system matches the canonical form min yb yA >= c. (More accurately, on the assumption that the sign convention of the ray is correct for the canonical form.) The strategy is to check first for the ability to return a ray with row and column components, then a ray with row components only. If both of these result in a throw, conclude that the solver does not implement getDualRays. */ void testDualRays(const OsiSolverInterface *emptySi, const std::string &sampleDir) { unsigned int rayNdx, raysReturned; bool hasGetDualRays = false; std::string solverName; OsiSolverInterface *si = 0; std::vector< double * > rays; const int raysRequested = 5; const std::string mpsNames[] = { "galenet", "galenetbnds" }; const bool rayTypes[] = { true, false }; std::cout << "Testing getDualRays ..." << std::endl; /* Figure out what we can test. getDualRays only makes sense after solving a problem, so the strategy is to solve galenet and try for full rays. If that fails, solve galenetbnds and try for row-component rays. If that fails, conclude that the solver doesn't implement getDualRays. */ for (int iter = 0; iter <= 1; iter++) { const bool fullRay = rayTypes[iter]; const std::string mpsName = mpsNames[iter]; const std::string fn = sampleDir + mpsName; si = emptySi->clone(); si->getStrParam(OsiSolverName, solverName); std::cout << " checking if " << solverName << " implements getDualRays(maxRays" << ((fullRay == true) ? ",true" : "") << ") ... "; si->setIntParam(OsiNameDiscipline, 1); OSIUNITTEST_ASSERT_ERROR(si->readMps(fn.c_str(), "mps") == 0, delete si; return, solverName, "testDualRays: read MPS"); /* Solve and report the result. We should be primal infeasible, and not optimal. Specify maximisation just for kicks. */ si->setObjSense(-1.0); si->setHintParam(OsiDoPresolveInInitial, false, OsiHintDo); si->setHintParam(OsiDoReducePrint, true, OsiHintDo); si->initialSolve(); OSIUNITTEST_ASSERT_ERROR(!si->isProvenOptimal(), {}, solverName, "testDualRays: infeasible instance not proven optimal"); OSIUNITTEST_ASSERT_ERROR(si->isProvenPrimalInfeasible(), {}, solverName, "testDualRays: recognize infeasiblity of instance"); /* Try a call to getDualRays. If the call throws, abort this iteration and try again. */ try { rays = si->getDualRays(raysRequested, fullRay); hasGetDualRays = true; std::cout << "yes." << std::endl; } catch (CoinError &err) { std::cout << "no." << std::endl; delete si; si = 0; continue; } /* We have rays. Check to see how many. There should be at least one, and no more than the number requested. If there are none, bail out now. */ raysReturned = static_cast< unsigned int >(rays.size()); OSIUNITTEST_ASSERT_ERROR(raysReturned >= 1, break, solverName, "testDualRays: number of returned rays"); OSIUNITTEST_ASSERT_WARNING(static_cast< int >(raysReturned) <= raysRequested, {}, solverName, "testDualRays: number of returned rays"); /* Do a bit of setup before checking each ray. If we're dealing with a full ray, we'll need variable bounds, solution value, and status. Acquire the bounds arrays, and acquire a warm start object so we can ask for column status. Failure to retrieve a warm start aborts the test. */ unsigned int m, n, i, j; m = si->getNumRows(); n = si->getNumCols(); unsigned int rayLen = m; CoinWarmStartBasis *wsb = 0; const double *vlbs = 0; const double *vubs = 0; const double *xvals = 0; const double *rhs = si->getRightHandSide(); const char *sense = si->getRowSense(); if (fullRay == true) { rayLen += n; wsb = dynamic_cast< CoinWarmStartBasis * >(si->getWarmStart()); OSIUNITTEST_ASSERT_ERROR(wsb != NULL, break, solverName, "testDualRays: get warmstart basis"); vlbs = si->getColLower(); vubs = si->getColUpper(); xvals = si->getColSolution(); } double tol; si->getDblParam(OsiDualTolerance, tol); double *rA = new double[rayLen]; /* Open a loop to check each ray for validity. */ for (rayNdx = 0; rayNdx < raysReturned; rayNdx++) { double *ray = rays[rayNdx]; if (OsiUnitTest::verbosity >= 2) { std::cout << " Ray[" << rayNdx << "]: " << std::endl; for (i = 0; i < m; i++) { if (fabs(ray[i]) > tol) { std::cout << " " << si->getRowName(i) << " [" << i << "]: " << ray[i] << "\t rhs: " << rhs[i] << "\t sense: " << sense[i] << std::endl; } } if (fullRay == true) { for (j = 0; j < n; j++) { if (fabs(ray[m + j]) > tol) { std::cout << " " << si->getColName(j) << " [" << j << "]: " << ray[m + j] << std::endl; } } } } /* Check that the ray is not identically zero. */ for (i = 0; i < rayLen; i++) { if (fabs(ray[i]) > tol) break; } OSIUNITTEST_ASSERT_ERROR(i < rayLen, continue, solverName, "testDualRays: ray should not be zero"); /* Check that dot(r,b) < 0. For the first m components this is a straightforward dot product. If we're dealing with column components, we need to synthesize the coefficient on-the-fly. There can be at most one nonzero associated with an out-of-bound basic primal, which corresponds to the nonbasic dual that's driving the ray. */ double rdotb = 0.0; int nzoobCnt = 0; for (i = 0; i < m; i++) { rdotb += rhs[i] * ray[i]; } if (fullRay == true) { CoinWarmStartBasis::Status statj; for (j = 0; j < n; j++) { statj = wsb->getStructStatus(j); switch (statj) { case CoinWarmStartBasis::atUpperBound: { rdotb += vubs[j] * ray[m + j]; break; } case CoinWarmStartBasis::atLowerBound: { rdotb += (-vlbs[j]) * ray[m + j]; break; } case CoinWarmStartBasis::basic: { if (ray[m + j] != 0) { nzoobCnt++; OSIUNITTEST_ASSERT_ERROR(xvals[j] > vubs[j] || xvals[j] < vlbs[j], break, solverName, "testDualRays: xval outside bounds for nonzero ray entry"); if (xvals[j] > vubs[j]) { rdotb += vubs[j] * ray[m + j]; } else if (xvals[j] < vlbs[j]) { rdotb += (-vlbs[j]) * ray[m + j]; } } break; } default: { OSIUNITTEST_ASSERT_ERROR(fabs(ray[i]) <= tol, {}, solverName, "testDualRays: zero ray entry for basic variables"); break; } } } OSIUNITTEST_ASSERT_ERROR(nzoobCnt <= 1, {}, solverName, "testDualRays: at most one nonzero ray entry for basic variables"); } if (OsiUnitTest::verbosity >= 2) std::cout << "dot(r,b) = " << rdotb << std::endl; OSIUNITTEST_ASSERT_ERROR(rdotb < 0, {}, solverName, "testDualRays: ray points into right direction"); /* On to rA >= 0. As with dot(r,b), it's trivially easy to do the calculation for explicit constraints, but we have to synthesize the coefficients corresponding to bounded variables on-the-fly. Upper bounds look like x <= u, lower bounds -x <= -l. No need to repeat the ray coefficient tests. */ CoinFillN(rA, m, 0.0); si->getMatrixByCol()->transposeTimes(ray, rA); if (fullRay == true) { CoinWarmStartBasis::Status statj; for (j = 0; j < n; j++) { statj = wsb->getStructStatus(j); switch (statj) { case CoinWarmStartBasis::atUpperBound: { rA[j] += ray[m + j]; break; } case CoinWarmStartBasis::atLowerBound: { rA[j] += -ray[m + j]; break; } case CoinWarmStartBasis::basic: { if (ray[m + j] != 0) { if (xvals[j] > vubs[j]) rA[j] += ray[m + j]; else if (xvals[j] < vlbs[j]) rA[j] += -ray[m + j]; } break; } default: { break; } } } } bool badVal = false; for (j = 0; j < n; j++) { if (rA[j] < -tol) { std::cout << " " << solverName << ": ray[" << rayNdx << "] fails rA >= 0 for column " << j << " with value " << rA[j] << "." << std::endl; badVal = true; } } OSIUNITTEST_ASSERT_ERROR(badVal == false, {}, solverName, "testDualRays: rA >= 0"); if (badVal == true && OsiUnitTest::verbosity >= 2) { std::cout << " Ray[" << rayNdx << "]: " << std::endl; for (i = 0; i < m; i++) { if (fabs(ray[i]) > tol) { std::cout << " [" << i << "]: " << ray[i] << std::endl; } } } } /* Clean up. */ delete[] rA; for (rayNdx = 0; rayNdx < raysReturned; rayNdx++) { delete[] rays[rayNdx]; } delete si; } /* Report the result and we're done. */ OSIUNITTEST_ASSERT_SEVERITY_EXPECTED(hasGetDualRays, {}, solverName, "testDualRays: getDualRays is implemented", TestOutcome::NOTE, false); if (hasGetDualRays == false) { testingMessage(" *** WARNING *** getDualRays is unimplemented.\n"); } } } // end file-local namespace //############################################################################# // The main event //############################################################################# /* The order of tests should be examined. As it stands, we test immediately for the ability to read an mps file and bail if we can't do it. But quite a few tests could be performed without reading an mps file. -- lh, 080107 -- Gradually, oh so gradually, the Osi unit test is converting to produce some information about failed tests, and this routine now returns a count. Whenever you revise a test, please take the time to produce a count of errors. */ void OsiSolverInterfaceCommonUnitTest(const OsiSolverInterface *emptySi, const std::string &mpsDir, const std::string & /* netlibDir */) { CoinRelFltEq eq; /* Test if the si knows its name. The name will be used for displaying messages when testing. */ std::string solverName; { OsiSolverInterface *si = emptySi->clone(); assert(si != NULL); solverName = "Unknown Solver"; OSIUNITTEST_ASSERT_ERROR(si->getStrParam(OsiSolverName, solverName), {}, solverName, "getStrParam(OsiSolverName) supported"); OSIUNITTEST_ASSERT_ERROR(solverName != "Unknown Solver", {}, solverName, "solver knows its name"); delete si; } { std::string temp = ": running common unit tests.\n"; temp = solverName + temp; testingMessage(temp.c_str()); } /* Set a variable so we can easily determine which solver interface we're testing. This is so that we can easily decide to omit a test when it's beyond the capability of a solver. */ bool volSolverInterface UNUSED = (solverName == "vol"); bool dylpSolverInterface UNUSED = (solverName == "dylp"); bool glpkSolverInterface UNUSED = (solverName == "glpk"); bool xprSolverInterface UNUSED = (solverName == "xpress"); bool symSolverInterface UNUSED = (solverName == "sym"); bool grbSolverInterface UNUSED = (solverName == "gurobi"); bool cpxSolverInterface UNUSED = (solverName == "cplex"); bool spxSolverInterface UNUSED = (solverName == "soplex"); /* Test values returned by an empty solver interface. */ testEmptySi(emptySi); /* See if we can read an MPS file. We're dead in the water if we can't do this. */ std::string fn = mpsDir + "exmip1"; OsiSolverInterface *exmip1Si = emptySi->clone(); assert(exmip1Si != NULL); OSIUNITTEST_ASSERT_ERROR(exmip1Si->readMps(fn.c_str(), "mps") == 0, return, *exmip1Si, "read MPS file"); /* Test that the solver correctly handles row and column names. */ testNames(emptySi, fn); /* Test constants in objective function, dual and primal objective limit functions, objective sense (max/min). Do not perform test if Vol solver, because it requires problems of a special form and can not solve netlib e226. */ if (!volSolverInterface) { testObjFunctions(emptySi, mpsDir); } else { OSIUNITTEST_ADD_OUTCOME(solverName, "testObjFunctions", "skipped test for OsiVol", OsiUnitTest::TestOutcome::NOTE, true); } // Test that problem was loaded correctly { int nc = exmip1Si->getNumCols(); int nr = exmip1Si->getNumRows(); OSIUNITTEST_ASSERT_ERROR(nc == 8, return, *exmip1Si, "problem read correctly: number of columns"); OSIUNITTEST_ASSERT_ERROR(nr == 5, return, *exmip1Si, "problem read correctly: number of rows"); const char *exmip1Sirs = exmip1Si->getRowSense(); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[0] == 'G', {}, *exmip1Si, "problem read correctly: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[1] == 'L', {}, *exmip1Si, "problem read correctly: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[2] == 'E', {}, *exmip1Si, "problem read correctly: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[3] == 'R', {}, *exmip1Si, "problem read correctly: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[4] == 'R', {}, *exmip1Si, "problem read correctly: row sense"); const double *exmip1Sirhs = exmip1Si->getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[0], 2.5), {}, *exmip1Si, "problem read correctly: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[1], 2.1), {}, *exmip1Si, "problem read correctly: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[2], 4.0), {}, *exmip1Si, "problem read correctly: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[3], 5.0), {}, *exmip1Si, "problem read correctly: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[4], 15.), {}, *exmip1Si, "problem read correctly: row rhs"); const double *exmip1Sirr = exmip1Si->getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[0], 0.0), {}, *exmip1Si, "problem read correctly: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[1], 0.0), {}, *exmip1Si, "problem read correctly: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[2], 0.0), {}, *exmip1Si, "problem read correctly: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[3], 5.0 - 1.8), {}, *exmip1Si, "problem read correctly: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[4], 15.0 - 3.0), {}, *exmip1Si, "problem read correctly: row range"); const CoinPackedMatrix *goldByCol = BuildExmip1Mtx(); CoinPackedMatrix goldmtx; goldmtx.reverseOrderedCopyOf(*goldByCol); delete goldByCol; CoinPackedMatrix pm; pm.setExtraGap(0.0); pm.setExtraMajor(0.0); pm = *exmip1Si->getMatrixByRow(); pm.removeGaps(); OSIUNITTEST_ASSERT_ERROR(goldmtx.isEquivalent(pm), {}, *exmip1Si, "problem read correctly: matrix by row"); const double *cl = exmip1Si->getColLower(); OSIUNITTEST_ASSERT_ERROR(eq(cl[0], 2.5), {}, *exmip1Si, "problem read correctly: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[1], 0.0), {}, *exmip1Si, "problem read correctly: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[2], 0.0), {}, *exmip1Si, "problem read correctly: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[3], 0.0), {}, *exmip1Si, "problem read correctly: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[4], 0.5), {}, *exmip1Si, "problem read correctly: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[5], 0.0), {}, *exmip1Si, "problem read correctly: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[6], 0.0), {}, *exmip1Si, "problem read correctly: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[7], 0.0), {}, *exmip1Si, "problem read correctly: columns lower bounds"); const double *cu = exmip1Si->getColUpper(); OSIUNITTEST_ASSERT_ERROR(eq(cu[0], exmip1Si->getInfinity()), {}, *exmip1Si, "problem read correctly: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[1], 4.1), {}, *exmip1Si, "problem read correctly: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[2], 1.0), {}, *exmip1Si, "problem read correctly: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[3], 1.0), {}, *exmip1Si, "problem read correctly: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[4], 4.0), {}, *exmip1Si, "problem read correctly: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[5], exmip1Si->getInfinity()), {}, *exmip1Si, "problem read correctly: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[6], exmip1Si->getInfinity()), {}, *exmip1Si, "problem read correctly: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[7], 4.3), {}, *exmip1Si, "problem read correctly: columns upper bounds"); const double *rl = exmip1Si->getRowLower(); OSIUNITTEST_ASSERT_ERROR(eq(rl[0], 2.5), {}, *exmip1Si, "problem read correctly: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[1], -exmip1Si->getInfinity()), {}, *exmip1Si, "problem read correctly: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[2], 4.0), {}, *exmip1Si, "problem read correctly: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[3], 1.8), {}, *exmip1Si, "problem read correctly: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[4], 3.0), {}, *exmip1Si, "problem read correctly: rows lower bounds"); const double *ru = exmip1Si->getRowUpper(); OSIUNITTEST_ASSERT_ERROR(eq(ru[0], exmip1Si->getInfinity()), {}, *exmip1Si, "problem read correctly: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[1], 2.1), {}, *exmip1Si, "problem read correctly: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[2], 4.0), {}, *exmip1Si, "problem read correctly: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[3], 5.0), {}, *exmip1Si, "problem read correctly: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[4], 15.), {}, *exmip1Si, "problem read correctly: rows upper bounds"); const double *objCoef = exmip1Si->getObjCoefficients(); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[0], 1.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[1], 0.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[2], 0.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[3], 0.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[4], 2.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[5], 0.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[6], 0.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[7], -1.0), {}, *exmip1Si, "problem read correctly: objective coefficients"); // make sure col solution is something reasonable, // that is between upper and lower bounds const double *cs = exmip1Si->getColSolution(); int c; bool okColSol = true; //double inf = exmip1Si->getInfinity(); for (c = 0; c < nc; c++) { // if colSol is not between column bounds then // colSol is unreasonable. if (!(cl[c] <= cs[c] && cs[c] <= cu[c])) okColSol = false; // if at least one column bound is not infinite, // then it is unreasonable to have colSol as infinite // FIXME: temporarily commented out pending some group thought on the // semantics of this test. -- lh, 03.04.29 -- // if ( (cl[c]=inf ) okColSol=false; } OSIUNITTEST_ASSERT_WARNING(okColSol, {}, *exmip1Si, "column solution before solve"); // Test that objective value is correct // FIXME: the test checks the primal value. vol fails this, because vol // considers the dual value to be the objective value /* gurobi fails this, because gurobi does not have a solution before a model is solved (which makes sense, I (SV) think) Eh, well, you can argue the point, but the current OSI spec requires that there be a valid solution from the point that the problem is loaded. Nothing says it needs to be a good solution. -- lh, 100826 -- */ double correctObjValue = CoinPackedVector(nc, objCoef).dotProduct(cs); double siObjValue = exmip1Si->getObjValue(); OSIUNITTEST_ASSERT_SEVERITY_EXPECTED(eq(correctObjValue, siObjValue), {}, *exmip1Si, "solution value before solve", TestOutcome::WARNING, solverName == "Vol"); } // Test matrixByCol method { const CoinPackedMatrix *goldmtx = BuildExmip1Mtx(); OsiSolverInterface &si = *exmip1Si->clone(); CoinPackedMatrix sm = *si.getMatrixByCol(); sm.removeGaps(); OSIUNITTEST_ASSERT_ERROR(goldmtx->isEquivalent(sm), {}, solverName, "getMatrixByCol"); delete goldmtx; // Test getting and setting of objective offset double objOffset; OSIUNITTEST_ASSERT_ERROR(si.getDblParam(OsiObjOffset, objOffset), {}, solverName, "getDblParam(OsiObjOffset)"); OSIUNITTEST_ASSERT_ERROR(eq(objOffset, 0.0), {}, solverName, "objective offset 0 for exmip1"); OSIUNITTEST_ASSERT_ERROR(si.setDblParam(OsiObjOffset, 3.21), {}, solverName, "setDblParam(OsiObjOffset)"); si.getDblParam(OsiObjOffset, objOffset); OSIUNITTEST_ASSERT_ERROR(eq(objOffset, 3.21), {}, solverName, "storing objective offset"); delete &si; } // Test clone { OsiSolverInterface *si2; int ad = 13579; { OsiSolverInterface *si1 = exmip1Si->clone(); int ad = 13579; si1->setApplicationData(&ad); OSIUNITTEST_ASSERT_ERROR(*(static_cast< int * >(si1->getApplicationData())) == ad, {}, solverName, "storing application data"); si2 = si1->clone(); delete si1; } OSIUNITTEST_ASSERT_ERROR(*(static_cast< int * >(si2->getApplicationData())) == ad, {}, solverName, "cloning of application data"); int nc = si2->getNumCols(); int nr = si2->getNumRows(); OSIUNITTEST_ASSERT_ERROR(nc == 8, return, *exmip1Si, "problem cloned: number of columns"); OSIUNITTEST_ASSERT_ERROR(nr == 5, return, *exmip1Si, "problem cloned: number of rows"); const char *exmip1Sirs = si2->getRowSense(); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[0] == 'G', {}, solverName, "problem cloned: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[1] == 'L', {}, solverName, "problem cloned: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[2] == 'E', {}, solverName, "problem cloned: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[3] == 'R', {}, solverName, "problem cloned: row sense"); OSIUNITTEST_ASSERT_ERROR(exmip1Sirs[4] == 'R', {}, solverName, "problem cloned: row sense"); const double *exmip1Sirhs = si2->getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[0], 2.5), {}, solverName, "problem cloned: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[1], 2.1), {}, solverName, "problem cloned: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[2], 4.0), {}, solverName, "problem cloned: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[3], 5.0), {}, solverName, "problem cloned: row rhs"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirhs[4], 15.), {}, solverName, "problem cloned: row rhs"); const double *exmip1Sirr = si2->getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[0], 0.0), {}, solverName, "problem cloned: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[1], 0.0), {}, solverName, "problem cloned: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[2], 0.0), {}, solverName, "problem cloned: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[3], 5.0 - 1.8), {}, solverName, "problem cloned: row range"); OSIUNITTEST_ASSERT_ERROR(eq(exmip1Sirr[4], 15.0 - 3.0), {}, solverName, "problem cloned: row range"); const CoinPackedMatrix *goldByCol = BuildExmip1Mtx(); CoinPackedMatrix goldmtx; goldmtx.reverseOrderedCopyOf(*goldByCol); CoinPackedMatrix pm; pm.setExtraGap(0.0); pm.setExtraMajor(0.0); pm = *si2->getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(goldmtx.isEquivalent(pm), {}, solverName, "problem cloned: matrix by row"); delete goldByCol; const double *cl = si2->getColLower(); OSIUNITTEST_ASSERT_ERROR(eq(cl[0], 2.5), {}, solverName, "problem cloned: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[1], 0.0), {}, solverName, "problem cloned: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[2], 0.0), {}, solverName, "problem cloned: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[3], 0.0), {}, solverName, "problem cloned: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[4], 0.5), {}, solverName, "problem cloned: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[5], 0.0), {}, solverName, "problem cloned: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[6], 0.0), {}, solverName, "problem cloned: columns lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cl[7], 0.0), {}, solverName, "problem cloned: columns lower bounds"); const double *cu = si2->getColUpper(); OSIUNITTEST_ASSERT_ERROR(eq(cu[0], exmip1Si->getInfinity()), {}, solverName, "problem cloned: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[1], 4.1), {}, solverName, "problem cloned: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[2], 1.0), {}, solverName, "problem cloned: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[3], 1.0), {}, solverName, "problem cloned: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[4], 4.0), {}, solverName, "problem cloned: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[5], exmip1Si->getInfinity()), {}, solverName, "problem cloned: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[6], exmip1Si->getInfinity()), {}, solverName, "problem cloned: columns upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(cu[7], 4.3), {}, solverName, "problem cloned: columns upper bounds"); const double *rl = si2->getRowLower(); OSIUNITTEST_ASSERT_ERROR(eq(rl[0], 2.5), {}, solverName, "problem cloned: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[1], -exmip1Si->getInfinity()), {}, solverName, "problem cloned: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[2], 4.0), {}, solverName, "problem cloned: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[3], 1.8), {}, solverName, "problem cloned: rows lower bounds"); OSIUNITTEST_ASSERT_ERROR(eq(rl[4], 3.0), {}, solverName, "problem cloned: rows lower bounds"); const double *ru = si2->getRowUpper(); OSIUNITTEST_ASSERT_ERROR(eq(ru[0], exmip1Si->getInfinity()), {}, solverName, "problem cloned: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[1], 2.1), {}, solverName, "problem cloned: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[2], 4.0), {}, solverName, "problem cloned: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[3], 5.0), {}, solverName, "problem cloned: rows upper bounds"); OSIUNITTEST_ASSERT_ERROR(eq(ru[4], 15.), {}, solverName, "problem cloned: rows upper bounds"); const double *objCoef = exmip1Si->getObjCoefficients(); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[0], 1.0), {}, solverName, "problem cloned: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[1], 0.0), {}, solverName, "problem cloned: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[2], 0.0), {}, solverName, "problem cloned: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[3], 0.0), {}, solverName, "problem cloned: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[4], 2.0), {}, solverName, "problem cloned: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[5], 0.0), {}, solverName, "problem cloned: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[6], 0.0), {}, solverName, "problem cloned: objective coefficients"); OSIUNITTEST_ASSERT_ERROR(eq(objCoef[7], -1.0), {}, solverName, "problem cloned: objective coefficients"); // make sure col solution is something reasonable, // that is between upper and lower bounds const double *cs = exmip1Si->getColSolution(); int c; bool okColSol = true; //double inf = exmip1Si->getInfinity(); for (c = 0; c < nc; c++) { // if colSol is not between column bounds then // colSol is unreasonable. if (!(cl[c] <= cs[c] && cs[c] <= cu[c])) okColSol = false; // if at least one column bound is not infinite, // then it is unreasonable to have colSol as infinite // FIXME: temporarily commented out pending some group thought on the // semantics of this test. -- lh, 03.04.29 -- // if ( (cl[c]=inf ) okColSol=false; } OSIUNITTEST_ASSERT_WARNING(okColSol, {}, solverName, "problem cloned: column solution before solve"); // Test getting of objective offset double objOffset; OSIUNITTEST_ASSERT_ERROR(si2->getDblParam(OsiObjOffset, objOffset), {}, solverName, "problem cloned: getDblParam(OsiObjOffset)"); OSIUNITTEST_ASSERT_ERROR(eq(objOffset, 0.0), {}, solverName, "problem cloned: objective offset 0.0"); delete si2; } // end of clone testing // Test apply cuts method { OsiSolverInterface &im = *(exmip1Si->clone()); OsiCuts cuts; // Generate some cuts { // Get number of rows and columns in model int nr = im.getNumRows(); int nc = im.getNumCols(); OSIUNITTEST_ASSERT_ERROR(nr == 5, return, solverName, "apply cuts: number of rows"); OSIUNITTEST_ASSERT_ERROR(nc == 8, return, solverName, "apply cuts: number of columns"); // Generate a valid row cut from thin air int c; { int *inx = new int[nc]; for (c = 0; c < nc; c++) inx[c] = c; double *el = new double[nc]; for (c = 0; c < nc; c++) el[c] = (static_cast< double >(c)) * (static_cast< double >(c)); OsiRowCut rc; rc.setRow(nc, inx, el); rc.setLb(-100.); rc.setUb(100.); rc.setEffectiveness(22); cuts.insert(rc); delete[] el; delete[] inx; } // Generate valid col cut from thin air { const double *oslColLB = im.getColLower(); const double *oslColUB = im.getColUpper(); int *inx = new int[nc]; for (c = 0; c < nc; c++) inx[c] = c; double *lb = new double[nc]; double *ub = new double[nc]; for (c = 0; c < nc; c++) lb[c] = oslColLB[c] + 0.001; for (c = 0; c < nc; c++) ub[c] = oslColUB[c] - 0.001; OsiColCut cc; cc.setLbs(nc, inx, lb); cc.setUbs(nc, inx, ub); cuts.insert(cc); delete[] ub; delete[] lb; delete[] inx; } { // Generate a row and column cut which are ineffective OsiRowCut *rcP = new OsiRowCut; rcP->setEffectiveness(-1.); cuts.insert(rcP); OSIUNITTEST_ASSERT_ERROR(rcP == NULL, {}, solverName, "apply cuts: insert row cut keeps pointer"); OsiColCut *ccP = new OsiColCut; ccP->setEffectiveness(-12.); cuts.insert(ccP); OSIUNITTEST_ASSERT_ERROR(ccP == NULL, {}, solverName, "apply cuts: insert column cut keeps pointer"); } { //Generate inconsistent Row cut OsiRowCut rc; const int ne = 1; int inx[ne] = { -10 }; double el[ne] = { 2.5 }; rc.setRow(ne, inx, el); rc.setLb(3.); rc.setUb(4.); OSIUNITTEST_ASSERT_ERROR(!rc.consistent(), {}, solverName, "apply cuts: inconsistent row cut"); cuts.insert(rc); } { //Generate inconsistent col cut OsiColCut cc; const int ne = 1; int inx[ne] = { -10 }; double el[ne] = { 2.5 }; cc.setUbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!cc.consistent(), {}, solverName, "apply cuts: inconsistent column cut"); cuts.insert(cc); } { // Generate row cut which is inconsistent for model m OsiRowCut rc; const int ne = 1; int inx[ne] = { 10 }; double el[ne] = { 2.5 }; rc.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(rc.consistent(), {}, solverName, "apply cuts: row cut inconsistent for model only"); OSIUNITTEST_ASSERT_ERROR(!rc.consistent(im), {}, solverName, "apply cuts: row cut inconsistent for model only"); cuts.insert(rc); } { // Generate col cut which is inconsistent for model m OsiColCut cc; const int ne = 1; int inx[ne] = { 30 }; double el[ne] = { 2.0 }; cc.setLbs(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cc.consistent(), {}, solverName, "apply cuts: column cut inconsistent for model only"); OSIUNITTEST_ASSERT_ERROR(!cc.consistent(im), {}, solverName, "apply cuts: column cut inconsistent for model only"); cuts.insert(cc); } { // Generate col cut which is infeasible OsiColCut cc; const int ne = 1; int inx[ne] = { 0 }; double el[ne] = { 2.0 }; cc.setUbs(ne, inx, el); cc.setEffectiveness(1000.); OSIUNITTEST_ASSERT_ERROR(cc.consistent(), {}, solverName, "apply cuts: column cut infeasible for model"); OSIUNITTEST_ASSERT_ERROR(cc.consistent(im), {}, solverName, "apply cuts: column cut infeasible for model"); OSIUNITTEST_ASSERT_ERROR(cc.infeasible(im), {}, solverName, "apply cuts: column cut infeasible for model"); cuts.insert(cc); } } OSIUNITTEST_ASSERT_ERROR(cuts.sizeRowCuts() == 4, {}, solverName, "apply cuts: number of stored row cuts"); OSIUNITTEST_ASSERT_ERROR(cuts.sizeColCuts() == 5, {}, solverName, "apply cuts: number of stored column cuts"); { OsiSolverInterface::ApplyCutsReturnCode rc = im.applyCuts(cuts); OSIUNITTEST_ASSERT_ERROR(rc.getNumIneffective() == 2, {}, solverName, "apply cuts: number of row cuts found ineffective"); OSIUNITTEST_ASSERT_ERROR(rc.getNumApplied() == 2, {}, solverName, "apply cuts: number of row cuts applied"); OSIUNITTEST_ASSERT_ERROR(rc.getNumInfeasible() == 1, {}, solverName, "apply cuts: number of row cuts found infeasible"); OSIUNITTEST_ASSERT_ERROR(rc.getNumInconsistentWrtIntegerModel() == 2, {}, solverName, "apply cuts: number of row cuts found inconsistent wr.t. integer model"); OSIUNITTEST_ASSERT_ERROR(rc.getNumInconsistent() == 2, {}, solverName, "apply cuts: number of row cuts found inconsistent"); OSIUNITTEST_ASSERT_ERROR(cuts.sizeCuts() == rc.getNumIneffective() + rc.getNumApplied() + rc.getNumInfeasible() + rc.getNumInconsistentWrtIntegerModel() + rc.getNumInconsistent(), {}, solverName, "apply cuts: consistent count of row cuts"); } delete &im; } // end of apply cut method testing /* Test setting primal (column) and row (dual) solutions, and test that reduced cost and row activity match. GUROBI does not support setting solutions (only basis can be set), so we skip this test. This is a failure of the implementation of OsiGrb. Most solvers do not allow you to simply set a solution by giving primal values, it needs to be handled in the OsiXXX. That's what OsiGrb should do. See longer rant where OsiGrb exposes Gurobi's inability to handle 'N' constraints. Here, run the tests and see the error messages. Shouldn't cause failure because we're not yet properly counting errors. -- lh, 100826 -- */ testSettingSolutions(*exmip1Si); // Test column type methods // skip for vol since it does not support this function if (volSolverInterface) { OSIUNITTEST_ADD_OUTCOME(solverName, "testing column type methods", "skipped test for OsiVol", TestOutcome::NOTE, true); } else { OsiSolverInterface &fim = *(emptySi->clone()); std::string fn = mpsDir + "exmip1"; fim.readMps(fn.c_str(), "mps"); // exmip1.mps has 2 integer variables with index 2 & 3 OSIUNITTEST_ASSERT_ERROR(fim.getNumIntegers() == 2, {}, solverName, "column type methods: number of integers"); OSIUNITTEST_ASSERT_ERROR(fim.isContinuous(0), {}, solverName, "column type methods: isContinuous"); OSIUNITTEST_ASSERT_ERROR(fim.isContinuous(1), {}, solverName, "column type methods: isContinuous"); OSIUNITTEST_ASSERT_ERROR(!fim.isContinuous(2), {}, solverName, "column type methods: isContinuous"); OSIUNITTEST_ASSERT_ERROR(!fim.isContinuous(3), {}, solverName, "column type methods: isContinuous"); OSIUNITTEST_ASSERT_ERROR(fim.isContinuous(4), {}, solverName, "column type methods: isContinuous"); OSIUNITTEST_ASSERT_ERROR(!fim.isInteger(0), {}, solverName, "column type methods: isInteger"); OSIUNITTEST_ASSERT_ERROR(!fim.isInteger(1), {}, solverName, "column type methods: isInteger"); OSIUNITTEST_ASSERT_ERROR(fim.isInteger(2), {}, solverName, "column type methods: isInteger"); OSIUNITTEST_ASSERT_ERROR(fim.isInteger(3), {}, solverName, "column type methods: isInteger"); OSIUNITTEST_ASSERT_ERROR(!fim.isInteger(4), {}, solverName, "column type methods: isInteger"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(0), {}, solverName, "column type methods: isBinary"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(1), {}, solverName, "column type methods: isBinary"); OSIUNITTEST_ASSERT_ERROR(fim.isBinary(2), {}, solverName, "column type methods: isBinary"); OSIUNITTEST_ASSERT_ERROR(fim.isBinary(3), {}, solverName, "column type methods: isBinary"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(4), {}, solverName, "column type methods: isBinary"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(0), {}, solverName, "column type methods: isIntegerNonBinary"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(1), {}, solverName, "column type methods: isIntegerNonBinary"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(2), {}, solverName, "column type methods: isIntegerNonBinary"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(3), {}, solverName, "column type methods: isIntegerNonBinary"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(4), {}, solverName, "column type methods: isIntegerNonBinary"); // Test fractionalIndices do { double sol[] = { 1.0, 2.0, 2.9, 3.0, 4.0, 0.0, 0.0, 0.0 }; fim.setColSolution(sol); OsiVectorInt fi = fim.getFractionalIndices(1e-5); OSIUNITTEST_ASSERT_ERROR(fi.size() == 1, break, solverName, "column type methods: getFractionalIndices"); OSIUNITTEST_ASSERT_ERROR(fi[0] == 2, {}, solverName, "column type methods: getFractionalIndices"); // Set integer variables very close to integer values sol[2] = 5 + .00001 / 2.; sol[3] = 8 - .00001 / 2.; fim.setColSolution(sol); fi = fim.getFractionalIndices(1e-5); OSIUNITTEST_ASSERT_ERROR(fi.size() == 0, {}, solverName, "column type methods: getFractionalIndices"); // Set integer variables close, but beyond tolerances sol[2] = 5 + .00001 * 2.; sol[3] = 8 - .00001 * 2.; fim.setColSolution(sol); fi = fim.getFractionalIndices(1e-5); OSIUNITTEST_ASSERT_ERROR(fi.size() == 2, break, solverName, "column type methods: getFractionalIndices"); OSIUNITTEST_ASSERT_ERROR(fi[0] == 2, {}, solverName, "column type methods: getFractionalIndices"); OSIUNITTEST_ASSERT_ERROR(fi[1] == 3, {}, solverName, "column type methods: getFractionalIndices"); } while (false); // Change data so column 2 & 3 are integerNonBinary fim.setColUpper(2, 5.0); fim.setColUpper(3, 6.0); OSIUNITTEST_ASSERT_ERROR(eq(fim.getColUpper()[2], 5.0), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(eq(fim.getColUpper()[3], 6.0), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(0), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(1), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(2), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(3), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isBinary(4), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(fim.getNumIntegers() == 2, {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(0), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(1), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(fim.isIntegerNonBinary(2), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(fim.isIntegerNonBinary(3), {}, solverName, "column type methods: convert binary to integer variable"); OSIUNITTEST_ASSERT_ERROR(!fim.isIntegerNonBinary(4), {}, solverName, "column type methods: convert binary to integer variable"); delete &fim; } /* Test load and assign methods, and do an initialSolve while we have the problem loaded. This routine also puts some stress on cloning --- it creates nine simultaneous clones of the OSI under test. */ testLoadAndAssignProblem(emptySi, exmip1Si); testAddToEmptySystem(emptySi, volSolverInterface); /* Test write methods. */ testWriteMps(emptySi, fn); testWriteLp(emptySi, fn); /* Test the simplex portion of the OSI interface. */ testSimplexAPI(emptySi, mpsDir); // Add a Laci suggested test case // Load in a problem as column ordered matrix, // extract the row ordered copy, // add a row, // extract the row ordered copy again and test whether it's ok. // (the same can be done with reversing the role // of row and column ordered.) { OsiSolverInterface *si = emptySi->clone(); si->loadProblem( *(exmip1Si->getMatrixByCol()), exmip1Si->getColLower(), exmip1Si->getColUpper(), exmip1Si->getObjCoefficients(), exmip1Si->getRowSense(), exmip1Si->getRightHandSide(), exmip1Si->getRowRange()); CoinPackedMatrix pm1 = *(si->getMatrixByRow()); // Get a row of the matrix to make a cut const CoinShallowPackedVector neededBySunCC = exmip1Si->getMatrixByRow()->getVector(1); CoinPackedVector pv = neededBySunCC; pv.setElement(0, 3.14 * pv.getElements()[0]); OsiRowCut rc; rc.setRow(pv); rc.setLb(exmip1Si->getRowLower()[1] - 0.5); rc.setUb(exmip1Si->getRowUpper()[1] - 0.5); OsiCuts cuts; cuts.insert(rc); si->applyCuts(cuts); CoinPackedMatrix pm2 = *(si->getMatrixByRow()); OSIUNITTEST_ASSERT_ERROR(pm1.getNumRows() == pm2.getNumRows() - 1, {}, solverName, "switching from column to row ordering: added row"); int i; for (i = 0; i < pm1.getNumRows(); ++i) { const CoinShallowPackedVector neededBySunCC1 = pm1.getVector(i); const CoinShallowPackedVector neededBySunCC2 = pm2.getVector(i); if (neededBySunCC1 != neededBySunCC2) break; } OSIUNITTEST_ASSERT_ERROR(i == pm1.getNumRows(), {}, solverName, "switching from column to row ordering: matrix ok"); OSIUNITTEST_ASSERT_ERROR(pm2.getVector(pm2.getNumRows() - 1).isEquivalent(pv), {}, solverName, "switching from column to row ordering: last row equals added cut"); delete si; } { OsiSolverInterface *si = emptySi->clone(); si->loadProblem( *(exmip1Si->getMatrixByRow()), exmip1Si->getColLower(), exmip1Si->getColUpper(), exmip1Si->getObjCoefficients(), exmip1Si->getRowLower(), exmip1Si->getRowUpper()); CoinPackedMatrix pm1 = *(si->getMatrixByCol()); // Get a row of the matrix to make a cut const CoinShallowPackedVector neededBySunCC = exmip1Si->getMatrixByRow()->getVector(1); CoinPackedVector pv = neededBySunCC; pv.setElement(0, 3.14 * pv.getElements()[0]); OsiRowCut rc; rc.setRow(pv); rc.setLb(exmip1Si->getRowLower()[1] - 0.5); rc.setUb(exmip1Si->getRowUpper()[1] - 0.5); OsiCuts cuts; cuts.insert(rc); si->applyCuts(cuts); CoinPackedMatrix pm2 = *(si->getMatrixByCol()); OSIUNITTEST_ASSERT_ERROR(pm1.isColOrdered(), {}, solverName, "switching from row to column ordering"); OSIUNITTEST_ASSERT_ERROR(pm2.isColOrdered(), {}, solverName, "switching from row to column ordering"); OSIUNITTEST_ASSERT_ERROR(pm1.getNumRows() == pm2.getNumRows() - 1, {}, solverName, "switching from row to column ordering: added row"); CoinPackedMatrix pm1ByRow; pm1ByRow.reverseOrderedCopyOf(pm1); CoinPackedMatrix pm2ByRow; pm2ByRow.reverseOrderedCopyOf(pm2); OSIUNITTEST_ASSERT_ERROR(!pm1ByRow.isColOrdered(), {}, solverName, "switching from row to column ordering"); OSIUNITTEST_ASSERT_ERROR(!pm2ByRow.isColOrdered(), {}, solverName, "switching from row to column ordering"); OSIUNITTEST_ASSERT_ERROR(pm1ByRow.getNumRows() == pm2ByRow.getNumRows() - 1, {}, solverName, "switching from row to column ordering"); OSIUNITTEST_ASSERT_ERROR(pm1.getNumRows() == pm1ByRow.getNumRows(), {}, solverName, "switching from row to column ordering"); OSIUNITTEST_ASSERT_ERROR(pm2.getNumRows() == pm2ByRow.getNumRows(), {}, solverName, "switching from row to column ordering"); int i; for (i = 0; i < pm1ByRow.getNumRows(); ++i) { const CoinShallowPackedVector neededBySunCC1 = pm1ByRow.getVector(i); const CoinShallowPackedVector neededBySunCC2 = pm2ByRow.getVector(i); if (neededBySunCC1 != neededBySunCC2) break; } OSIUNITTEST_ASSERT_ERROR(i == pm1ByRow.getNumRows(), {}, solverName, "switching from row to column ordering: matrix ok"); OSIUNITTEST_ASSERT_ERROR(pm2ByRow.getVector(pm2ByRow.getNumRows() - 1).isEquivalent(pv), {}, solverName, "switching from row to column ordering: last row is added cut"); delete si; } delete exmip1Si; { // Testing parameter settings OsiSolverInterface *si = emptySi->clone(); int i; int ival; double dval; bool hint; OsiHintStrength hintStrength; OSIUNITTEST_ASSERT_ERROR(si->getIntParam(OsiLastIntParam, ival) == false, {}, solverName, "parameter methods: retrieve last int param"); OSIUNITTEST_ASSERT_ERROR(si->getDblParam(OsiLastDblParam, dval) == false, {}, solverName, "parameter methods: retrieve last double param"); OSIUNITTEST_ASSERT_ERROR(si->getHintParam(OsiLastHintParam, hint) == false, {}, solverName, "parameter methods: retrieve last hint param"); OSIUNITTEST_ASSERT_ERROR(si->setIntParam(OsiLastIntParam, 0) == false, {}, solverName, "parameter methods: set last int param"); OSIUNITTEST_ASSERT_ERROR(si->setDblParam(OsiLastDblParam, 0.0) == false, {}, solverName, "parameter methods: set last double param"); OSIUNITTEST_ASSERT_ERROR(si->setHintParam(OsiLastHintParam, false) == false, {}, solverName, "parameter methods: set last hint param"); bool param_ok = true; for (i = 0; i < OsiLastIntParam; ++i) { const bool exists = si->getIntParam(static_cast< OsiIntParam >(i), ival); // existence and test should result in the same param_ok &= (!exists ^ testIntParam(si, i, -1)); param_ok &= (!exists ^ testIntParam(si, i, 0)); param_ok &= (!exists ^ testIntParam(si, i, 1)); param_ok &= (!exists ^ testIntParam(si, i, 9999999)); param_ok &= (!exists ^ testIntParam(si, i, COIN_INT_MAX)); if (exists) param_ok &= (si->getIntParam(static_cast< OsiIntParam >(i), ival)); } OSIUNITTEST_ASSERT_ERROR(param_ok == true, {}, solverName, "parameter methods: test intparam"); param_ok = true; for (i = 0; i < OsiLastDblParam; ++i) { const bool exists = si->getDblParam(static_cast< OsiDblParam >(i), dval); // existence and test should result in the same param_ok &= (!exists ^ testDblParam(si, i, -1e50)); param_ok &= (!exists ^ testDblParam(si, i, -1e10)); param_ok &= (!exists ^ testDblParam(si, i, -1)); param_ok &= (!exists ^ testDblParam(si, i, -1e-4)); param_ok &= (!exists ^ testDblParam(si, i, -1e-15)); param_ok &= (!exists ^ testDblParam(si, i, 1e50)); param_ok &= (!exists ^ testDblParam(si, i, 1e10)); param_ok &= (!exists ^ testDblParam(si, i, 1)); param_ok &= (!exists ^ testDblParam(si, i, 1e-4)); param_ok &= (!exists ^ testDblParam(si, i, 1e-15)); if (exists) param_ok &= (si->setDblParam(static_cast< OsiDblParam >(i), dval)); } OSIUNITTEST_ASSERT_ERROR(param_ok == true, {}, solverName, "parameter methods: test dblparam"); // test hints --- see testHintParam for detailed explanation. { int throws = 0; param_ok = true; for (i = 0; i < OsiLastHintParam; ++i) { const bool exists = si->getHintParam(static_cast< OsiHintParam >(i), hint, hintStrength); param_ok &= (!exists ^ testHintParam(si, i, true, OsiHintIgnore, &throws)); param_ok &= (!exists ^ testHintParam(si, i, true, OsiHintTry, &throws)); param_ok &= (!exists ^ testHintParam(si, i, false, OsiHintTry, &throws)); param_ok &= (!exists ^ testHintParam(si, i, true, OsiHintDo, &throws)); param_ok &= (!exists ^ testHintParam(si, i, false, OsiHintDo, &throws)); param_ok &= (!exists ^ testHintParam(si, i, true, OsiForceDo, &throws)); param_ok &= (!exists ^ testHintParam(si, i, false, OsiForceDo, &throws)); } std::cout.flush(); std::cerr << "Checked " << static_cast< int >(OsiLastHintParam) << " hints x (true, false) at strength OsiForceDo; " << throws << " throws." << std::endl; OSIUNITTEST_ASSERT_ERROR(param_ok == true, {}, solverName, "parameter methods: test hintparam"); } delete si; } /* A test to see if resolve gets the correct answer after changing the objective. Safe for Vol, as the result is checked by testing an interval on the primal solution. */ changeObjAndResolve(emptySi); /* Test OsiPresolve. This is a `bolt on' presolve, distinct from any presolve that might be innate to the solver. */ if (!volSolverInterface && !symSolverInterface) { testOsiPresolve(emptySi, mpsDir); } else { OSIUNITTEST_ADD_OUTCOME(solverName, "testOsiPresolved", "skipped test", OsiUnitTest::TestOutcome::NOTE, true); } /* Do a check to see if the solver returns the correct status for artificial variables. See the routine for detailed comments. Vol has no basis, hence no status. */ if (!volSolverInterface && !symSolverInterface) testArtifStatus(emptySi); else OSIUNITTEST_ADD_OUTCOME(solverName, "testArtifStatus", "skipped test", OsiUnitTest::TestOutcome::NOTE, true); // Perform tests that are embodied in functions if (!volSolverInterface && !symSolverInterface) { typedef bool (*TestFunction)(OsiSolverInterface *); std::vector< std::pair< TestFunction, const char * > > test_functions; test_functions.push_back(std::pair< TestFunction, const char * >(&test1VivianDeSmedt, "test1VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test2VivianDeSmedt, "test2VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test3VivianDeSmedt, "test3VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test4VivianDeSmedt, "test4VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test5VivianDeSmedt, "test5VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test6VivianDeSmedt, "test6VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test7VivianDeSmedt, "test7VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test8VivianDeSmedt, "test8VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test9VivianDeSmedt, "test9VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test10VivianDeSmedt, "test10VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test11VivianDeSmedt, "test11VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test12VivianDeSmedt, "test12VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test13VivianDeSmedt, "test13VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test14VivianDeSmedt, "test14VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test15VivianDeSmedt, "test15VivianDeSmedt")); test_functions.push_back(std::pair< TestFunction, const char * >(&test16SebastianNowozin, "test16SebastianNowozin")); test_functions.push_back(std::pair< TestFunction, const char * >(&test17SebastianNowozin, "test17SebastianNowozin")); unsigned int i; for (i = 0; i < test_functions.size(); ++i) { OsiSolverInterface *s = emptySi->clone(); const char *testName = test_functions[i].second; { bool test = test_functions[i].first(s); OSIUNITTEST_ASSERT_ERROR(test == true, {}, solverName, testName); } delete s; } } else OSIUNITTEST_ADD_OUTCOME(solverName, "test*VivianDeSmedt and test*SebastianNowozin", "skipped test", OsiUnitTest::TestOutcome::NOTE, true); /* Test duals and reduced costs, then dual rays. Vol doesn't react well to either test. */ if (!volSolverInterface && !symSolverInterface) { testReducedCosts(emptySi, mpsDir); testDualRays(emptySi, mpsDir); } else { OSIUNITTEST_ADD_OUTCOME(solverName, "testReducedCosts", "skipped test", OsiUnitTest::TestOutcome::NOTE, true); OSIUNITTEST_ADD_OUTCOME(solverName, "testDualRays", "skipped test", OsiUnitTest::TestOutcome::NOTE, true); } } /* Orphan comment? If anyone happens to poke at the code that this belongs to, move it. My (lh) guess is it should go somewhere in the deSmedt tests. I just haven't made time to check them all. And I really do want to find this. It'd be a great test case for the dual ray routine. With this matrix we have a primal/dual infeas problem. Leaving the first row makes it primal feas, leaving the first col makes it dual feas. All vars are >= 0 obj: -1 2 -3 4 -5 (min) 0 -1 0 0 -2 >= 1 1 0 -3 0 4 >= -2 0 3 0 -5 0 >= 3 0 0 5 0 -6 >= -4 2 -4 0 6 0 >= 5 */ /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiCommonTest/Makefile.am0000644000175200017520000000346612243462564017214 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1942 2013-11-21 19:56:36Z stefan $ # Author: Lou Hafer SFU 2010-11-20 AUTOMAKE_OPTIONS = foreign ######################################################################## # Common Test library for Osi # ######################################################################## # Name of the library compiled in this directory. We want it to be installed # in $libdir lib_LTLIBRARIES = libOsiCommonTests.la # List all source files for this library, including headers libOsiCommonTests_la_SOURCES = \ OsiCommonTests.hpp \ OsiColCutTest.cpp \ OsiCutsTest.cpp \ OsiRowCutDebuggerTest.cpp \ OsiRowCutTest.cpp \ OsiSimplexAPITest.cpp \ OsiNetlibTest.cpp \ OsiUnitTestUtils.cpp \ OsiSolverInterfaceTest.cpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiCommonTests_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la endif # Libtool flags libOsiCommonTests_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../Osi` $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, includecoindir = $(includedir)/coin includecoin_HEADERS = OsiUnitTests.hpp DyLP-1.10.4/Osi/src/OsiCommonTest/OsiNetlibTest.cpp0000644000175200017520000003256513433361417020413 0ustar coincoin/* Copyright (C) 2000 -- 2010, Lou Hafer, International Business Machines, and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ #include "CoinPragma.hpp" #include "OsiUnitTests.hpp" #include "OsiConfig.h" #include "CoinTime.hpp" #include "CoinFloatEqual.hpp" /* #include #include #include #include #include #include #include */ #include "OsiSolverInterface.hpp" /*! \brief Run solvers on NetLib problems. The routine creates a vector of NetLib problems (problem name, objective, various other characteristics), and a vector of solvers to be tested. Each solver is run on each problem. The run is deemed successful if the solver reports the correct problem size after loading and returns the correct objective value after optimization. If multiple solvers are available, the results are compared pairwise against the results reported by adjacent solvers in the solver vector. Due to limitations of the volume solver, it must be the last solver in vecEmptySiP. */ void OsiSolverInterfaceMpsUnitTest(const std::vector< OsiSolverInterface * > &vecEmptySiP, const std::string &mpsDir) { int i; unsigned int m; /* Vectors to hold test problem names and characteristics. The objective value after optimization (objValue) must agree to the specified tolerance (objValueTol). */ std::vector< std::string > mpsName; std::vector< bool > minObj; std::vector< int > nRows; std::vector< int > nCols; std::vector< double > objValue; std::vector< double > objValueTol; /* And a macro to make the vector creation marginally readable. */ #define PUSH_MPS(zz_mpsName_zz, zz_minObj_zz, \ zz_nRows_zz, zz_nCols_zz, zz_objValue_zz, zz_objValueTol_zz) \ mpsName.push_back(zz_mpsName_zz); \ minObj.push_back(zz_minObj_zz); \ nRows.push_back(zz_nRows_zz); \ nCols.push_back(zz_nCols_zz); \ objValueTol.push_back(zz_objValueTol_zz); \ objValue.push_back(zz_objValue_zz); /* Load up the problem vector. Note that the row counts here include the objective function. */ PUSH_MPS("25fv47", true, 822, 1571, 5.5018458883E+03, 1.0e-10) PUSH_MPS("80bau3b", true, 2263, 9799, 9.8722419241E+05, 1.e-10) PUSH_MPS("adlittle", true, 57, 97, 2.2549496316e+05, 1.e-10) PUSH_MPS("afiro", true, 28, 32, -4.6475314286e+02, 1.e-10) PUSH_MPS("agg", true, 489, 163, -3.5991767287e+07, 1.e-10) PUSH_MPS("agg2", true, 517, 302, -2.0239252356e+07, 1.e-10) PUSH_MPS("agg3", true, 517, 302, 1.0312115935e+07, 1.e-10) PUSH_MPS("bandm", true, 306, 472, -1.5862801845e+02, 1.e-10) PUSH_MPS("beaconfd", true, 174, 262, 3.3592485807e+04, 1.e-10) PUSH_MPS("blend", true, 75, 83, -3.0812149846e+01, 1.e-10) PUSH_MPS("bnl1", true, 644, 1175, 1.9776295615E+03, 1.e-10) PUSH_MPS("bnl2", true, 2325, 3489, 1.8112365404e+03, 1.e-10) PUSH_MPS("boeing1", true, /*351*/ 352, 384, -3.3521356751e+02, 1.e-10) PUSH_MPS("boeing2", true, 167, 143, -3.1501872802e+02, 1.e-10) PUSH_MPS("bore3d", true, 234, 315, 1.3730803942e+03, 1.e-10) PUSH_MPS("brandy", true, 221, 249, 1.5185098965e+03, 1.e-10) PUSH_MPS("capri", true, 272, 353, 2.6900129138e+03, 1.e-10) PUSH_MPS("cycle", true, 1904, 2857, -5.2263930249e+00, 1.e-9) PUSH_MPS("czprob", true, 930, 3523, 2.1851966989e+06, 1.e-10) PUSH_MPS("d2q06c", true, 2172, 5167, 122784.21557456, 1.e-7) PUSH_MPS("d6cube", true, 416, 6184, 3.1549166667e+02, 1.e-8) PUSH_MPS("degen2", true, 445, 534, -1.4351780000e+03, 1.e-10) PUSH_MPS("degen3", true, 1504, 1818, -9.8729400000e+02, 1.e-10) PUSH_MPS("dfl001", true, 6072, 12230, 1.1266396047E+07, 1.e-5) PUSH_MPS("e226", true, 224, 282, (-18.751929066 + 7.113), 1.e-10) // NOTE: Objective function has constant of 7.113 PUSH_MPS("etamacro", true, 401, 688, -7.5571521774e+02, 1.e-6) PUSH_MPS("fffff800", true, 525, 854, 5.5567961165e+05, 1.e-6) PUSH_MPS("finnis", true, 498, 614, 1.7279096547e+05, 1.e-6) PUSH_MPS("fit1d", true, 25, 1026, -9.1463780924e+03, 1.e-10) PUSH_MPS("fit1p", true, 628, 1677, 9.1463780924e+03, 1.e-10) PUSH_MPS("fit2d", true, 26, 10500, -6.8464293294e+04, 1.e-10) PUSH_MPS("fit2p", true, 3001, 13525, 6.8464293232e+04, 1.e-9) PUSH_MPS("forplan", true, 162, 421, -6.6421873953e+02, 1.e-6) PUSH_MPS("ganges", true, 1310, 1681, -1.0958636356e+05, 1.e-5) PUSH_MPS("gfrd-pnc", true, 617, 1092, 6.9022359995e+06, 1.e-10) PUSH_MPS("greenbea", true, 2393, 5405, /*-7.2462405908e+07*/ -72555248.129846, 1.e-10) PUSH_MPS("greenbeb", true, 2393, 5405, /*-4.3021476065e+06*/ -4302260.2612066, 1.e-10) PUSH_MPS("grow15", true, 301, 645, -1.0687094129e+08, 1.e-10) PUSH_MPS("grow22", true, 441, 946, -1.6083433648e+08, 1.e-10) PUSH_MPS("grow7", true, 141, 301, -4.7787811815e+07, 1.e-10) PUSH_MPS("israel", true, 175, 142, -8.9664482186e+05, 1.e-10) PUSH_MPS("kb2", true, 44, 41, -1.7499001299e+03, 1.e-10) PUSH_MPS("lotfi", true, 154, 308, -2.5264706062e+01, 1.e-10) PUSH_MPS("maros", true, 847, 1443, -5.8063743701e+04, 1.e-10) PUSH_MPS("maros-r7", true, 3137, 9408, 1.4971851665e+06, 1.e-10) PUSH_MPS("modszk1", true, 688, 1620, 3.2061972906e+02, 1.e-10) PUSH_MPS("nesm", true, 663, 2923, 1.4076073035e+07, 1.e-5) PUSH_MPS("perold", true, 626, 1376, -9.3807580773e+03, 1.e-6) PUSH_MPS("pilot", true, 1442, 3652, /*-5.5740430007e+02*/ -557.48972927292, 5.e-5) PUSH_MPS("pilot4", true, 411, 1000, -2.5811392641e+03, 1.e-6) PUSH_MPS("pilot87", true, 2031, 4883, 3.0171072827e+02, 1.e-4) PUSH_MPS("pilotnov", true, 976, 2172, -4.4972761882e+03, 1.e-10) // ?? PUSH_MPS("qap8",true,913,1632,2.0350000000e+02,1.e-10) // ?? PUSH_MPS("qap12",true,3193,8856,5.2289435056e+02,1.e-10) // ?? PUSH_MPS("qap15",true,6331,22275,1.0409940410e+03,1.e-10) PUSH_MPS("recipe", true, 92, 180, -2.6661600000e+02, 1.e-10) PUSH_MPS("sc105", true, 106, 103, -5.2202061212e+01, 1.e-10) PUSH_MPS("sc205", true, 206, 203, -5.2202061212e+01, 1.e-10) PUSH_MPS("sc50a", true, 51, 48, -6.4575077059e+01, 1.e-10) PUSH_MPS("sc50b", true, 51, 48, -7.0000000000e+01, 1.e-10) PUSH_MPS("scagr25", true, 472, 500, -1.4753433061e+07, 1.e-10) PUSH_MPS("scagr7", true, 130, 140, -2.3313892548e+06, 1.e-6) PUSH_MPS("scfxm1", true, 331, 457, 1.8416759028e+04, 1.e-10) PUSH_MPS("scfxm2", true, 661, 914, 3.6660261565e+04, 1.e-10) PUSH_MPS("scfxm3", true, 991, 1371, 5.4901254550e+04, 1.e-10) PUSH_MPS("scorpion", true, 389, 358, 1.8781248227e+03, 1.e-10) PUSH_MPS("scrs8", true, 491, 1169, 9.0429998619e+02, 1.e-5) PUSH_MPS("scsd1", true, 78, 760, 8.6666666743e+00, 1.e-10) PUSH_MPS("scsd6", true, 148, 1350, 5.0500000078e+01, 1.e-10) PUSH_MPS("scsd8", true, 398, 2750, 9.0499999993e+02, 1.e-8) PUSH_MPS("sctap1", true, 301, 480, 1.4122500000e+03, 1.e-10) PUSH_MPS("sctap2", true, 1091, 1880, 1.7248071429e+03, 1.e-10) PUSH_MPS("sctap3", true, 1481, 2480, 1.4240000000e+03, 1.e-10) PUSH_MPS("seba", true, 516, 1028, 1.5711600000e+04, 1.e-10) PUSH_MPS("share1b", true, 118, 225, -7.6589318579e+04, 1.e-10) PUSH_MPS("share2b", true, 97, 79, -4.1573224074e+02, 1.e-10) PUSH_MPS("shell", true, 537, 1775, 1.2088253460e+09, 1.e-10) PUSH_MPS("ship04l", true, 403, 2118, 1.7933245380e+06, 1.e-10) PUSH_MPS("ship04s", true, 403, 1458, 1.7987147004e+06, 1.e-10) PUSH_MPS("ship08l", true, 779, 4283, 1.9090552114e+06, 1.e-10) PUSH_MPS("ship08s", true, 779, 2387, 1.9200982105e+06, 1.e-10) PUSH_MPS("ship12l", true, 1152, 5427, 1.4701879193e+06, 1.e-10) PUSH_MPS("ship12s", true, 1152, 2763, 1.4892361344e+06, 1.e-10) PUSH_MPS("sierra", true, 1228, 2036, 1.5394362184e+07, 1.e-10) PUSH_MPS("stair", true, 357, 467, -2.5126695119e+02, 1.e-10) PUSH_MPS("standata", true, 360, 1075, 1.2576995000e+03, 1.e-10) // GUB PUSH_MPS("standgub",true,362,1184,1257.6995,1.e-10) PUSH_MPS("standmps", true, 468, 1075, 1.4060175000E+03, 1.e-10) PUSH_MPS("stocfor1", true, 118, 111, -4.1131976219E+04, 1.e-10) PUSH_MPS("stocfor2", true, 2158, 2031, -3.9024408538e+04, 1.e-10) // ?? PUSH_MPS("stocfor3",true,16676,15695,-3.9976661576e+04,1.e-10) // ?? PUSH_MPS("truss",true,1001,8806,4.5881584719e+05,1.e-10) PUSH_MPS("tuff", true, 334, 587, 2.9214776509e-01, 1.e-10) PUSH_MPS("vtpbase", true, 199, 203, 1.2983146246e+05, 1.e-10) PUSH_MPS("wood1p", true, 245, 2594, 1.4429024116e+00, 5.e-5) PUSH_MPS("woodw", true, 1099, 8405, 1.3044763331E+00, 1.e-10) #undef PUSH_MPS const unsigned int numProblems = static_cast< unsigned int >(mpsName.size()); /* Create vectors to hold solver interfaces, the name of each solver interface, the current state of processing, and statistics about the number of problems solved and the time taken. */ const int numSolvers = static_cast< int >(vecEmptySiP.size()); std::vector< OsiSolverInterface * > vecSiP(numSolvers); std::vector< std::string > siName(numSolvers); std::vector< int > siStage(numSolvers); std::vector< int > numProbSolved(numSolvers); std::vector< double > timeTaken(numSolvers); for (i = 0; i < numSolvers; i++) { siName[i] = "unknown"; numProbSolved[i] = 0; timeTaken[i] = 0.0; } /* For each problem, create a fresh clone of the `empty' solvers from vecEmptySiP, then proceed in stages: read the MPS file, solve the problem, check the solution. If there are multiple solvers in vecSiP, the results of each solver are compared with its neighbors in the vector. */ for (m = 0; m < numProblems; m++) { std::cout << " processing mps file: " << mpsName[m] << " (" << m + 1 << " out of " << numProblems << ")" << std::endl; /* Stage 0: Create fresh solver clones. */ int solversReadMpsFile = 0; for (i = numSolvers - 1; i >= 0; --i) { vecSiP[i] = vecEmptySiP[i]->clone(); vecSiP[i]->getStrParam(OsiSolverName, siName[i]); siStage[i] = 0; } /* Stage 1: Read the MPS file into each solver interface. As a basic check, make sure the size of the constraint matrix is correct. */ for (i = 0; i < numSolvers; i++) { std::string fn = mpsDir + mpsName[m]; if (vecSiP[i]->readMps(fn.c_str(), "mps") != 0) OSIUNITTEST_ADD_OUTCOME(*vecSiP[i], "netlib " + mpsName[m], "reading MPS file failed", OsiUnitTest::TestOutcome::ERROR, false); if (minObj[m]) vecSiP[i]->setObjSense(1.0); else vecSiP[i]->setObjSense(-1.0); int nr = vecSiP[i]->getNumRows(); int nc = vecSiP[i]->getNumCols(); if (nr == nRows[m] - 1 && nc == nCols[m]) { siStage[i] = 1; solversReadMpsFile++; } else OSIUNITTEST_ADD_OUTCOME(*vecSiP[i], "netlib " + mpsName[m], "number of rows and columns wrong", OsiUnitTest::TestOutcome::ERROR, false); } /* If more than one solver succeeded, compare representations. */ if (solversReadMpsFile > 0) { // Find an initial pair to compare int s1; for (s1 = 0; s1 < numSolvers - 1 && siStage[s1] < 1; s1++) ; int s2; for (s2 = s1 + 1; s2 < numSolvers && siStage[s2] < 1; s2++) ; while (s2 < numSolvers) { std::cout << " comparing problem representation for " << siName[s1] << " and " << siName[s2] << " ..."; if (OsiUnitTest::compareProblems(vecSiP[s1], vecSiP[s2])) std::cout << " ok." << std::endl; s1 = s2; for (s2++; s2 < numSolvers && siStage[s2] < 1; s2++) ; } } /* Stage 2: Ask each solver that successfully read the problem to solve it, then check the return code and objective. */ for (i = 0; i < numSolvers; ++i) { if (siStage[i] < 1) continue; double startTime = CoinCpuTime(); OSIUNITTEST_CATCH_ERROR(vecSiP[i]->initialSolve(), continue, *vecSiP[i], "netlib " + mpsName[m]); double timeOfSolution = CoinCpuTime() - startTime; OSIUNITTEST_ASSERT_ERROR(vecSiP[i]->isProvenOptimal(), {}, *vecSiP[i], "netlib " + mpsName[m]); if (vecSiP[i]->isProvenOptimal()) { double soln = vecSiP[i]->getObjValue(); CoinRelFltEq eq(objValueTol[m]); OSIUNITTEST_ASSERT_ERROR(eq(soln, objValue[m]), std::cerr << soln << " != " << objValue[m] << "; error = " << fabs(objValue[m] - soln), *vecSiP[i], "netlib " + mpsName[m]); if (eq(soln, objValue[m])) { std::cout << " " << siName[i] << " " << soln << " = " << objValue[m] << ", " << vecSiP[i]->getIterationCount() << " iters; okay"; numProbSolved[i]++; } std::cout << " - took " << timeOfSolution << " seconds." << std::endl; timeTaken[i] += timeOfSolution; } else { std::cout.flush(); std::cerr << " " << siName[i] << "; error "; if (vecSiP[i]->isProvenPrimalInfeasible()) std::cerr << "primal infeasible"; else if (vecSiP[i]->isIterationLimitReached()) std::cerr << "iteration limit"; else if (vecSiP[i]->isAbandoned()) std::cerr << "abandoned"; else std::cerr << "unknown"; } } /* Delete the used solver interfaces so we can reload fresh clones for the next problem. */ for (i = 0; i < numSolvers; i++) delete vecSiP[i]; } /* Print a summary for each solver. */ for (i = 0; i < numSolvers; i++) { std::cout << siName[i] << " solved " << numProbSolved[i] << " out of " << numProblems << " and took " << timeTaken[i] << " seconds." << std::endl; } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiCommonTest/OsiCutsTest.cpp0000644000175200017520000002662313414504135020105 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinPragma.hpp" #include "OsiUnitTests.hpp" #include "OsiCuts.hpp" //-------------------------------------------------------------------------- void OsiCutsUnitTest() { CoinRelFltEq eq; // Test default constructor { OsiCuts r; OSIUNITTEST_ASSERT_ERROR(r.colCutPtrs_.empty(), {}, "osicuts", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.rowCutPtrs_.empty(), {}, "osicuts", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.sizeColCuts() == 0, {}, "osicuts", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.sizeRowCuts() == 0, {}, "osicuts", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.sizeCuts() == 0, {}, "osicuts", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.mostEffectiveCutPtr() == NULL, {}, "osicuts", "default constructor"); } // Create some cuts OsiRowCut rcv[5]; OsiColCut ccv[5]; OsiCuts cuts; int i; for (i = 0; i < 5; i++) { rcv[i].setEffectiveness(100. + i); ccv[i].setEffectiveness(200. + i); cuts.insert(rcv[i]); cuts.insert(ccv[i]); } OsiCuts rhs; { OsiCuts cs; // test inserting & accessing cut for (i = 0; i < 5; i++) { OSIUNITTEST_ASSERT_ERROR(cs.sizeRowCuts() == i, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(cs.sizeCuts() == 2 * i, {}, "osicuts", "inserting and accessing cuts"); cs.insert(rcv[i]); OSIUNITTEST_ASSERT_ERROR(cs.sizeRowCuts() == i + 1, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(cs.sizeCuts() == 2 * i + 1, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(cs.rowCut(i) == rcv[i], {}, "osicuts", "inserting and accessing cuts"); #if 0 const OsiCut * cp = cs.cutPtr(2*i); OSIUNITTEST_ASSERT_ERROR(cs.rowCut(i).effectiveness() == cp->effectiveness(), {}, "osicuts", "inserting and accessing cuts"); const OsiRowCut * rcP = dynamic_cast( cp ); OSIUNITTEST_ASSERT_ERROR(rcP != NULL, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(*rcP == rcv[i], {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(dynamic_cast(cs.cutPtr(2*i)) == NULL, {}, "osicuts", "inserting and accessing cuts"); #endif OSIUNITTEST_ASSERT_ERROR(cs.sizeColCuts() == i, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(cs.sizeCuts() == 2 * i + 1, {}, "osicuts", "inserting and accessing cuts"); cs.insert(ccv[i]); OSIUNITTEST_ASSERT_ERROR(cs.sizeColCuts() == i + 1, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(cs.sizeCuts() == 2 * i + 2, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(cs.colCut(i) == ccv[i], {}, "osicuts", "inserting and accessing cuts"); #if 0 OSIUNITTEST_ASSERT_ERROR(dynamic_cast(cs.cutPtr(2*i+1)) == NULL, {}, "osicuts", "inserting and accessing cuts"); ccP = dynamic_cast( cs.cutPtr(2*i+1) ); OSIUNITTEST_ASSERT_ERROR(ccP != NULL, {}, "osicuts", "inserting and accessing cuts"); OSIUNITTEST_ASSERT_ERROR(*ccP == ccv[i], {}, "osicuts", "inserting and accessing cuts"); #endif OSIUNITTEST_ASSERT_ERROR(eq(cs.mostEffectiveCutPtr()->effectiveness(), 200.0 + i), {}, "osicuts", "inserting and accessing cuts"); } // Test inserting collection of OsiCuts { OsiCuts cs; cs.insert(cuts); OSIUNITTEST_ASSERT_ERROR(cs.sizeColCuts() == 5, {}, "osicuts", "inserting collection of cuts"); OSIUNITTEST_ASSERT_ERROR(cs.sizeRowCuts() == 5, {}, "osicuts", "inserting collection of cuts"); OSIUNITTEST_ASSERT_ERROR(cs.sizeCuts() == 10, {}, "osicuts", "inserting collection of cuts"); } /* Test handling of cut pointers. Create a vector of cut pointers, then add them to the collection. Dump the row cuts, then add again. The cut objects should be deleted when the OsiCuts object is deleted at the end of the block. This test should be monitored with some flavour of runtime access checking to be sure that cuts are not freed twice or not freed at all. */ { OsiCuts cs; OsiRowCut *rcPVec[5]; OsiColCut *ccPVec[5]; for (i = 0; i < 5; i++) { rcPVec[i] = rcv[i].clone(); ccPVec[i] = ccv[i].clone(); } // test inserting cut ptr & accessing cut for (i = 0; i < 5; i++) { OSIUNITTEST_ASSERT_ERROR(cs.sizeRowCuts() == i, {}, "osicuts", "handling of cut pointers"); OsiRowCut *rcP = rcPVec[i]; OSIUNITTEST_ASSERT_ERROR(rcP != NULL, {}, "osicuts", "handling of cut pointers"); cs.insert(rcP); OSIUNITTEST_ASSERT_ERROR(rcP == NULL, {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.sizeRowCuts() == i + 1, {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.rowCut(i) == rcv[i], {}, "osicuts", "handling of cut pointers"); OsiColCut *ccP = ccPVec[i]; OSIUNITTEST_ASSERT_ERROR(ccP != NULL, {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.sizeColCuts() == i, {}, "osicuts", "handling of cut pointers"); cs.insert(ccP); OSIUNITTEST_ASSERT_ERROR(ccP == NULL, {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.sizeColCuts() == i + 1, {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.colCut(i) == ccv[i], {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(eq(cs.mostEffectiveCutPtr()->effectiveness(), 200.0 + i), {}, "osicuts", "handling of cut pointers"); } cs.dumpCuts(); // row cuts only for (i = 0; i < 5; i++) { OSIUNITTEST_ASSERT_ERROR(cs.sizeRowCuts() == i, {}, "osicuts", "handling of cut pointers"); OsiRowCut *rcP = rcPVec[i]; OSIUNITTEST_ASSERT_ERROR(rcP != NULL, {}, "osicuts", "handling of cut pointers"); cs.insert(rcP); OSIUNITTEST_ASSERT_ERROR(rcP == NULL, {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.sizeRowCuts() == i + 1, {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.rowCut(i) == rcv[i], {}, "osicuts", "handling of cut pointers"); OSIUNITTEST_ASSERT_ERROR(cs.sizeColCuts() == 5, {}, "osicuts", "handling of cut pointers"); } } // Test copy constructor OsiCuts csC(cs); OSIUNITTEST_ASSERT_ERROR(csC.sizeRowCuts() == 5, {}, "osicuts", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(csC.sizeColCuts() == 5, {}, "osicuts", "copy constructor"); bool copy_ok = true; for (i = 0; i < 5; i++) { copy_ok &= csC.rowCut(i) == rcv[i]; copy_ok &= csC.colCut(i) == ccv[i]; copy_ok &= csC.rowCut(i) == cs.rowCut(i); copy_ok &= csC.colCut(i) == cs.colCut(i); ; } OSIUNITTEST_ASSERT_ERROR(copy_ok, {}, "osicuts", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(eq(csC.mostEffectiveCutPtr()->effectiveness(), 204.0), {}, "osicuts", "copy constructor"); rhs = cs; } // Test results of assignment operation bool ok = true; for (i = 0; i < 5; i++) { ok &= rhs.rowCut(i) == rcv[i]; ok &= rhs.colCut(i) == ccv[i]; } OSIUNITTEST_ASSERT_ERROR(ok, {}, "osicuts", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(eq(rhs.mostEffectiveCutPtr()->effectiveness(), 204.0), {}, "osicuts", "assignment operator"); // Test removing cuts { OsiCuts t(rhs); OSIUNITTEST_ASSERT_ERROR(t.sizeRowCuts() == 5, {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.sizeColCuts() == 5, {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(eq(rhs.mostEffectiveCutPtr()->effectiveness(), 204.0), {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(eq(t.mostEffectiveCutPtr()->effectiveness(), 204.0), {}, "osicuts", "removing cuts"); t.eraseRowCut(3); OSIUNITTEST_ASSERT_ERROR(t.sizeRowCuts() == 4, {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.sizeColCuts() == 5, {}, "osicuts", "removing cuts"); bool ok = true; for (i = 0; i < 5; i++) ok &= t.colCut(i) == ccv[i]; OSIUNITTEST_ASSERT_ERROR(ok, {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(0) == rcv[0], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(1) == rcv[1], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(2) == rcv[2], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(3) == rcv[4], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(eq(t.mostEffectiveCutPtr()->effectiveness(), 204.0), {}, "osicuts", "removing cuts"); t.eraseColCut(4); OSIUNITTEST_ASSERT_ERROR(t.sizeRowCuts() == 4, {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.sizeColCuts() == 4, {}, "osicuts", "removing cuts"); ok = true; for (i = 0; i < 4; i++) ok &= t.colCut(i) == ccv[i]; OSIUNITTEST_ASSERT_ERROR(ok, {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(0) == rcv[0], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(1) == rcv[1], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(2) == rcv[2], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(t.rowCut(3) == rcv[4], {}, "osicuts", "removing cuts"); OSIUNITTEST_ASSERT_ERROR(eq(t.mostEffectiveCutPtr()->effectiveness(), 203.0), {}, "osicuts", "removing cuts"); } // sorting cuts { OsiCuts t(rhs); OSIUNITTEST_ASSERT_ERROR(t.sizeRowCuts() == 5, {}, "osicuts", "sorting cuts"); OSIUNITTEST_ASSERT_ERROR(t.sizeColCuts() == 5, {}, "osicuts", "sorting cuts"); t.rowCut(0).setEffectiveness(9.); t.rowCut(1).setEffectiveness(1.); t.rowCut(2).setEffectiveness(7.); t.rowCut(3).setEffectiveness(3.); t.rowCut(4).setEffectiveness(5.); t.colCut(0).setEffectiveness(2.); t.colCut(1).setEffectiveness(8.); t.colCut(2).setEffectiveness(4.); t.colCut(3).setEffectiveness(6.); t.colCut(4).setEffectiveness(.5); double totEff = 1. + 2. + 3. + 4. + 5. + 6. + 7. + 8. + 9. + 0.5; { // Test iterator over all cuts double sumEff = 0.; for (OsiCuts::iterator it = t.begin(); it != t.end(); ++it) { double eff = (*it)->effectiveness(); sumEff += eff; } OSIUNITTEST_ASSERT_ERROR(sumEff == totEff, {}, "osicuts", "sorting cuts"); } t.sort(); bool colcutsort_ok = true; for (i = 1; i < 5; i++) colcutsort_ok &= t.colCut(i - 1) > t.colCut(i); OSIUNITTEST_ASSERT_ERROR(colcutsort_ok, {}, "osicuts", "sorting cuts"); bool rowcutsort_ok = true; for (i = 1; i < 5; i++) rowcutsort_ok &= t.rowCut(i - 1) > t.rowCut(i); OSIUNITTEST_ASSERT_ERROR(rowcutsort_ok, {}, "osicuts", "sorting cuts"); { // Test iterator over all cuts double sumEff = 0.; for (OsiCuts::iterator it = t.begin(); it != t.end(); ++it) { sumEff += (*it)->effectiveness(); } OSIUNITTEST_ASSERT_ERROR(sumEff == totEff, {}, "osicuts", "sorting cuts"); } { OsiCuts::iterator it = t.begin(); OsiCut *cm1 = *it; ++it; bool sort_ok = true; for (; it != t.end(); it++) { OsiCut *c = *it; sort_ok &= (*cm1) > (*c); cm1 = c; } OSIUNITTEST_ASSERT_ERROR(sort_ok, {}, "osicuts", "sorting cuts"); } } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiCommonTest/OsiUnitTestUtils.cpp0000644000175200017520000004267413414504135021133 0ustar coincoin/* Copyright (C) 2000 -- 2010, Lou Hafer, International Business Machines, and others. All Rights Reserved. This code is licensed under the terms of the Eclipse Public License (EPL). */ #include "CoinPragma.hpp" #include "OsiUnitTests.hpp" #include "OsiConfig.h" /* #include "CoinTime.hpp" #include #include #include #include #include #include #include */ #include "OsiSolverInterface.hpp" #include "CoinFloatEqual.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedMatrix.hpp" /* #include "CoinPackedVector.hpp" #include "CoinWarmStartBasis.hpp" #include "OsiRowCut.hpp" #include "OsiCuts.hpp" #include "OsiPresolve.hpp" */ namespace OsiUnitTest { unsigned int verbosity = 0; unsigned int haltonerror = 0; TestOutcomes outcomes; //############################################################################# // Helper routines for messages. //############################################################################# /* If anyone is feeling ambitious, it'd be a really good idea to handle i/o for the unittest by way of a standard CoinMessageHandler. Might require a bit of tweaking in CoinMessageHandler. */ // A helper function to write out a message about a test failure void failureMessage(const std::string &solverName, const std::string &message) { std::string messageText; messageText = "*** "; messageText += solverName + "SolverInterface testing issue: "; messageText += message; // flush stdout so that error messages are properly interleaved. std::cout.flush(); std::cerr << messageText.c_str() << std::endl; } void failureMessage(const OsiSolverInterface &si, const std::string &message) { std::string solverName; si.getStrParam(OsiSolverName, solverName); failureMessage(solverName, message); } void failureMessage(const std::string &solverName, const std::string &testname, const std::string &testcond) { std::string messageText; messageText = "*** "; messageText += solverName + "SolverInterface testing issue: "; messageText += testname + " failed: " + testcond; // flush stdout so that error messages are properly interleaved. std::cout.flush(); std::cerr << messageText.c_str() << std::endl; } void failureMessage(const OsiSolverInterface &si, const std::string &testname, const std::string &testcond) { std::string solverName; si.getStrParam(OsiSolverName, solverName); failureMessage(solverName, testname, testcond); } /* Display message on stderr. Flush cout buffer before printing the message, so that output comes out in order in spite of buffered cout. */ void testingMessage(const char *const msg) { std::cout.flush(); std::cerr << msg; } //############################################################################# // Vector comparison utility. //############################################################################# // A helper function to compare the equivalence of two vectors bool equivalentVectors(const OsiSolverInterface *si1, const OsiSolverInterface *si2, double tol, const double *v1, const double *v2, int size) { bool retVal = true; double infty1 = si1->getInfinity(); double infty2 = si2->getInfinity(); CoinRelFltEq eq(tol); int i; /* Both values must be the same infinity or equal within the specified tolerance. Otherwise we have failure. */ for (i = 0; i < size; i++) { if (!(v1[i] <= -infty1 && v2[i] <= -infty2) && !(v1[i] >= infty1 && v2[i] >= infty2) && !eq(v1[i], v2[i])) { std::cout.flush(); std::cerr << "eq " << i << " " << v1[i] << " " << v2[i] << std::endl; retVal = false; break; } } return retVal; } /* Check a packed vector for equality with a full vector. The algorithm is to first confirm that the elements of the packed vector are present in the full vector, then scan the full vector to make sure there are no additional nonzeros. */ bool isEquivalent(const CoinPackedVectorBase &pv, int n, const double *fv) { int pvCnt = pv.getNumElements(); const int *indices = pv.getIndices(); const double *elems = pv.getElements(); bool retval = true; CoinRelFltEq eq; for (int v = 0; v < pvCnt; v++) { int k = indices[v]; if (!eq(elems[v], fv[k])) { retval = false; break; } } if (retval == true) { int fvCnt = 0; for (int k = 0; k < n; k++) { if (!eq(fv[k], 0.0)) fvCnt++; } if (fvCnt != pvCnt) retval = false; } return (retval); } /* Method to compare the problem representation held by a pair of solver interfaces. */ bool compareProblems(OsiSolverInterface *osi1, OsiSolverInterface *osi2) { bool areEquiv = true; std::string si1Name, si2Name; osi1->getStrParam(OsiSolverName, si1Name); osi2->getStrParam(OsiSolverName, si2Name); // Compare row and column counts int colCnt = 0; if (osi1->getNumCols() != osi2->getNumCols()) { std::cerr << " Unequal column count, " << si1Name << " vs. " << si2Name << std::endl; return (false); } else { colCnt = osi1->getNumCols(); } int rowCnt = 0; if (osi1->getNumRows() != osi2->getNumRows()) { std::cerr << " Unequal row count, " << si1Name << " vs. " << si2Name << std::endl; return (false); } else { rowCnt = osi1->getNumRows(); } // Compare column bounds areEquiv = equivalentVectors(osi1, osi2, 1.e-10, osi1->getColLower(), osi2->getColLower(), colCnt); if (areEquiv == false) { std::cerr << " Unequal column lower bounds, " << si1Name << " vs. " << si2Name << std::endl; return (false); } areEquiv = equivalentVectors(osi1, osi2, 1.e-10, osi1->getColUpper(), osi2->getColUpper(), colCnt); if (areEquiv == false) { std::cerr << " Unequal column upper bounds, " << si1Name << " vs. " << si2Name << std::endl; return (false); } // Compare row bounds areEquiv = equivalentVectors(osi1, osi2, 1.e-10, osi1->getRowLower(), osi2->getRowLower(), rowCnt); if (areEquiv == false) { std::cerr << " Unequal row lower bounds, " << si1Name << " vs. " << si2Name << std::endl; return (false); } areEquiv = equivalentVectors(osi1, osi2, 1.e-10, osi1->getRowUpper(), osi2->getRowUpper(), rowCnt); if (areEquiv == false) { std::cerr << " Unequal row lower bounds, " << si1Name << " vs. " << si2Name << std::endl; return (false); } // Compare row sense { const char *rowSense1 = osi1->getRowSense(); const char *rowSense2 = osi2->getRowSense(); areEquiv = true; for (int r = 0; r < rowCnt && areEquiv == true; r++) { if (rowSense1[r] != rowSense2[r]) { areEquiv = false; } } if (areEquiv == false) { std::cerr << " Unequal row sense, " << si1Name << " vs. " << si2Name << std::endl; return (false); } } // Compare row rhs areEquiv = equivalentVectors(osi1, osi2, 1.e-10, osi1->getRightHandSide(), osi2->getRightHandSide(), rowCnt); if (areEquiv == false) { std::cerr << " Unequal right-hand-side, " << si1Name << " vs. " << si2Name << std::endl; return (false); } // Compare range areEquiv = equivalentVectors(osi1, osi2, 1.e-10, osi1->getRowRange(), osi2->getRowRange(), rowCnt); if (areEquiv == false) { std::cerr << " Unequal row range, " << si1Name << " vs. " << si2Name << std::endl; return (false); } // Compare objective sense if (osi1->getObjSense() != osi2->getObjSense()) { std::cerr << " Unequal objective sense, " << si1Name << " vs. " << si2Name << std::endl; return (false); } // Compare objective coefficients areEquiv = equivalentVectors(osi1, osi2, 1.e-10, osi1->getObjCoefficients(), osi2->getObjCoefficients(), colCnt); if (areEquiv == false) { std::cerr << " Unequal objective coefficients, " << si1Name << " vs. " << si2Name << std::endl; return (false); } // Compare number of elements if (osi1->getNumElements() != osi2->getNumElements()) { std::cerr << " Unequal number of constraint matrix coefficients, " << si1Name << " vs. " << si2Name << std::endl; return (false); } // Compare constraint matrix, for both row-major and column-major orderings { const CoinPackedMatrix *rmm1 = osi1->getMatrixByRow(); const CoinPackedMatrix *rm = osi2->getMatrixByRow(); if (!rmm1->isEquivalent(*rm)) { std::cerr << " Unequal constraint matrix, row-major ordering, " << si1Name << " vs. " << si2Name << std::endl; return (false); } const CoinPackedMatrix *cmm1 = osi1->getMatrixByCol(); const CoinPackedMatrix *cm = osi2->getMatrixByCol(); if (!cmm1->isEquivalent(*cm)) { std::cerr << " Unequal constraint matrix, column-major ordering, " << si1Name << " vs. " << si2Name << std::endl; return (false); } } // Check column types { areEquiv = true; for (int j = 0; j < colCnt && areEquiv == true; j++) { if (osi1->isContinuous(j) != osi2->isContinuous(j)) areEquiv = false; if (osi1->isBinary(j) != osi2->isBinary(j)) areEquiv = false; if (osi1->isIntegerNonBinary(j) != osi2->isIntegerNonBinary(j)) areEquiv = false; if (osi1->isFreeBinary(j) != osi2->isFreeBinary(j)) areEquiv = false; if (osi1->isInteger(j) != osi2->isInteger(j)) areEquiv = false; } if (areEquiv == false) { std::cerr << " Unequal variable type, " << si1Name << " vs. " << si2Name << std::endl; return (false); } } return (true); } bool processParameters(int argc, const char **argv, std::map< std::string, std::string > &parms, const std::map< std::string, int > &ignorekeywords) { /* Initialise the parameter keywords. */ std::set< std::string > definedKeyWords; definedKeyWords.insert("-cerr2cout"); definedKeyWords.insert("-mpsDir"); definedKeyWords.insert("-netlibDir"); definedKeyWords.insert("-miplib3Dir"); definedKeyWords.insert("-testOsiSolverInterface"); definedKeyWords.insert("-nobuf"); definedKeyWords.insert("-cutsOnly"); definedKeyWords.insert("-verbosity"); definedKeyWords.insert("-onerror"); /* Set default values for data directories. */ const char dirsep = CoinFindDirSeparator(); std::string pathTmp; pathTmp = ".."; pathTmp += dirsep; pathTmp += ".."; pathTmp += dirsep; pathTmp += "Data"; pathTmp += dirsep; #ifdef COIN_MSVS // Visual Studio builds are deeper pathTmp = "..\\..\\" + pathTmp; #endif parms["-mpsDir"] = pathTmp + "Sample"; parms["-netlibDir"] = pathTmp + "Netlib"; parms["-miplib3Dir"] = pathTmp + "miplib3"; /* Read the command line parameters and fill a map of parameter keys and associated data. The parser allows for parameters which are only a keyword, or parameters of the form keyword=value (no spaces). */ for (int i = 1; i < argc; i++) { std::string parm(argv[i]); std::string key, value; std::string::size_type eqPos = parm.find('='); if (eqPos == std::string::npos) { key = parm; } else { key = parm.substr(0, eqPos); value = parm.substr(eqPos + 1); } /* * Should the specified key be ignored? */ if (ignorekeywords.find(key) != ignorekeywords.end()) { assert(ignorekeywords.find(key)->second >= 0); i += ignorekeywords.find(key)->second; continue; } /* Is the specified key valid? */ if (definedKeyWords.find(key) == definedKeyWords.end()) { if (key != "-usage" && key != "-help") std::cerr << "Undefined parameter \"" << key << "\"." << std::endl; std::cerr << "Usage: unitTest [-nobuf] [-mpsDir=V1] [-netlibDir=V2] [-miplibDir=V3] [-testOsiSolverInterface] [-cutsOnly] [-verbosity=num]" << std::endl; std::cerr << " where:" << std::endl; std::cerr << " -cerr2cout: redirect cerr to cout; sometimes useful to synchronise cout & cerr." << std::endl; std::cerr << " -mpsDir: directory containing mps test files." << std::endl << " Default value V1=\"../../Data/Sample\"" << std::endl; std::cerr << " -netlibDir: directory containing netlib files." << std::endl << " Default value V2=\"../../Data/Netlib\"" << std::endl; std::cerr << " -miplib3Dir: directory containing miplib3 files." << std::endl << " Default value V3=\"../../Data/miplib3\"" << std::endl; std::cerr << " -testOsiSolverInterface: run each OSI on the netlib problem set." << std::endl << " Default is to not run the netlib problem set." << std::endl; std::cerr << " -cutsOnly: If specified, only OsiCut tests are run." << std::endl; std::cerr << " -nobuf: use unbuffered output." << std::endl << " Default is buffered output." << std::endl; std::cerr << " -verbosity: verbosity level of tests output (0-2)." << std::endl << " Default is 0 (minimal output)." << std::endl; std::cerr << " -onerror: behaviour in case of failing test (continue, wait, stop)." << std::endl << " Default is continue." << std::endl; return false; } /* Valid keyword; stash the value for later reference. */ parms[key] = value; } /* Tack the directory separator onto the data directories so we don't have to worry about it later. */ if (parms["-mpsDir"].length() > 0) parms["-mpsDir"] += dirsep; if (parms["-netlibDir"].length() > 0) parms["-netlibDir"] += dirsep; if (parms["-miplib3"].length() > 0) parms["-miplib3Dir"] += dirsep; /* Did the user request unbuffered i/o? It seems we need to go after this through stdio --- using pubsetbuf(0,0) on the C++ streams has no discernible affect. Nor, for that matter, did setting the unitbuf flag on the streams. Why? At a guess, sync_with_stdio connects the streams to the stdio buffers, and the C++ side isn't programmed to change them? */ if (parms.find("-nobuf") != parms.end()) { // std::streambuf *coutBuf, *cerrBuf ; // coutBuf = std::cout.rdbuf() ; // coutBuf->pubsetbuf(0,0) ; // cerrBuf = std::cerr.rdbuf() ; // cerrBuf->pubsetbuf(0,0) ; setbuf(stderr, 0); setbuf(stdout, 0); } /* Did the user request a redirect for cerr? This must occur before any i/o is performed. */ if (parms.find("-cerr2cout") != parms.end()) std::cerr.rdbuf(std::cout.rdbuf()); /* * Did the user set a verbosity level? */ if (parms.find("-verbosity") != parms.end()) { char *endptr; std::string verbstring = parms["-verbosity"]; unsigned long verblevel = strtoul(verbstring.c_str(), &endptr, 10); if (*endptr != '\0' || verblevel < 0) { std::cerr << "verbosity level must be a nonnegative number" << std::endl; return false; } OsiUnitTest::verbosity = static_cast< unsigned int >(verblevel); } /* * Did the user specify what to do in case of a failure? */ if (parms.find("-onerror") != parms.end()) { std::string onerror = parms["-onerror"]; if (onerror == "continue") OsiUnitTest::haltonerror = 0; else if (onerror == "wait") OsiUnitTest::haltonerror = 1; else if (onerror == "stop") OsiUnitTest::haltonerror = 2; else { std::cerr << "-onerror must be specified with either 'continue', 'wait', or 'stop'" << std::endl; return false; } } return true; } std::string TestOutcome::SeverityLevelName[LAST] = { "NOTE", "PASSED", "WARNING", "ERROR" }; void TestOutcome::print() const { printf("%-10s", SeverityLevelName[severity].c_str()); printf("%-10s", component.c_str()); printf("%s", testname.c_str()); printf("\n"); if (expected) printf(" (expected) "); else printf(" "); printf("%s\n", testcond.c_str()); printf(" "); printf("%s:%d\n", filename.c_str(), linenumber); // printf("\n"); } void TestOutcomes::add(const OsiSolverInterface &si, std::string tst, const char *cond, TestOutcome::SeverityLevel sev, const char *file, int line, bool exp) { std::string solverName; si.getStrParam(OsiSolverName, solverName); push_back(TestOutcome(solverName, tst, cond, sev, file, line, exp)); } void TestOutcomes::print() const { int count[TestOutcome::LAST]; int expected[TestOutcome::LAST]; for (int i = 0; i < TestOutcome::LAST; ++i) { count[i] = 0; expected[i] = 0; } /* Walk the list, counting entries at each severity level. Print if verbosity level is high enough. */ for (const_iterator it(begin()); it != end(); ++it) { ++count[it->severity]; if (it->expected) ++expected[it->severity]; if ((it->severity != TestOutcome::PASSED || OsiUnitTest::verbosity >= 2) && (it->severity != TestOutcome::NOTE || OsiUnitTest::verbosity >= 1)) it->print(); } /// Print summary counts for (int i = 0; i < TestOutcome::LAST; ++i) printf("Severity %-10s: %4d thereof expected: %4d\n", TestOutcome::SeverityLevelName[i].c_str(), count[i], expected[i]); } void TestOutcomes::getCountBySeverity(TestOutcome::SeverityLevel sev, int &total, int &expected) const { assert(sev >= 0); assert(sev < TestOutcome::LAST); total = 0; expected = 0; for (const_iterator it(begin()); it != end(); ++it) { if (it->severity != sev) continue; ++total; if (it->expected) ++expected; } } } // end OsiUnitTest namespace /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiCommonTest/OsiRowCutTest.cpp0000644000175200017520000003205713432644766020427 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include "CoinPragma.hpp" #include "OsiUnitTests.hpp" #include "OsiRowCut.hpp" #include "CoinFloatEqual.hpp" //-------------------------------------------------------------------------- void OsiRowCutUnitTest(const OsiSolverInterface *baseSiP, const std::string &mpsDir) { CoinRelFltEq eq; // Test default constructor { OsiRowCut r; OSIUNITTEST_ASSERT_ERROR(r.row_.getIndices() == NULL, {}, "osirowcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.row_.getElements() == NULL, {}, "osirowcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.row_.getNumElements() == 0, {}, "osirowcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.lb_ == -COIN_DBL_MAX, {}, "osirowcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.ub_ == COIN_DBL_MAX, {}, "osirowcut", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.effectiveness() == 0.0, {}, "osirowcut", "default constructor"); } // Test set and get methods const int ne = 4; int inx[ne] = { 1, 3, 4, 7 }; double el[ne] = { 1.2, 3.4, 5.6, 7.8 }; { OsiRowCut r; // Test setting getting bounds r.setLb(65.432); r.setUb(123.45); OSIUNITTEST_ASSERT_ERROR(r.lb() == 65.432, {}, "osirowcut", "set bounds"); OSIUNITTEST_ASSERT_ERROR(r.ub() == 123.45, {}, "osirowcut", "set bounds"); // Test setting/getting of effectiveness,timesUsed,timesTested r.setEffectiveness(45.); OSIUNITTEST_ASSERT_ERROR(r.effectiveness() == 45.0, {}, "osirowcut", "set effectivenesss"); // Test setting/getting elements with int* & float* vectors r.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(r.row().getNumElements() == ne, return, "osirowcut", "set row"); bool row_ok = true; for (int i = 0; i < ne; i++) { row_ok &= r.row().getIndices()[i] == inx[i]; row_ok &= r.row().getElements()[i] == el[i]; } OSIUNITTEST_ASSERT_ERROR(row_ok, {}, "osirowcut", "set row"); } // Repeat test with ownership constructor { int *inxo = new int[ne]; double *elo = new double[ne]; double lb = 65.432; double ub = 123.45; int i; for (i = 0; i < ne; i++) inxo[i] = inx[i]; for (i = 0; i < ne; i++) elo[i] = el[i]; OsiRowCut r(lb, ub, ne, ne, inxo, elo); OSIUNITTEST_ASSERT_ERROR(r.row().getNumElements() == ne, {}, "osirowcut", "ownership constructor"); OSIUNITTEST_ASSERT_ERROR(r.effectiveness() == 0.0, {}, "osirowcut", "ownership constructor"); // Test getting bounds OSIUNITTEST_ASSERT_ERROR(r.lb() == lb, {}, "osirowcut", "ownership constructor"); OSIUNITTEST_ASSERT_ERROR(r.ub() == ub, {}, "osirowcut", "ownership constructor"); // Test setting/getting of effectiveness r.setEffectiveness(45.); OSIUNITTEST_ASSERT_ERROR(r.effectiveness() == 45.0, {}, "osirowcut", "ownership constructor"); // Test getting elements with int* & float* vectors OSIUNITTEST_ASSERT_ERROR(r.row().getNumElements() == ne, return, "osirowcut", "ownership constructor"); bool row_ok = true; for (int i = 0; i < ne; i++) { row_ok &= r.row().getIndices()[i] == inx[i]; row_ok &= r.row().getElements()[i] == el[i]; } OSIUNITTEST_ASSERT_ERROR(row_ok, {}, "osirowcut", "ownership constructor"); } // Test sense, rhs, range { { OsiRowCut r; OSIUNITTEST_ASSERT_ERROR(r.sense() == 'N', {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.rhs() == 0.0, {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.range() == 0.0, {}, "osirowcut", "sense, rhs, range"); } { OsiRowCut r; r.setLb(65.432); OSIUNITTEST_ASSERT_ERROR(r.sense() == 'G', {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.rhs() == 65.432, {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.range() == 0.0, {}, "osirowcut", "sense, rhs, range"); } { OsiRowCut r; r.setLb(65.432); r.setUb(65.432); OSIUNITTEST_ASSERT_ERROR(r.sense() == 'E', {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.rhs() == 65.432, {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.range() == 0.0, {}, "osirowcut", "sense, rhs, range"); } { OsiRowCut r; r.setUb(123.45); OSIUNITTEST_ASSERT_ERROR(r.sense() == 'L', {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.rhs() == 123.45, {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.range() == 0.0, {}, "osirowcut", "sense, rhs, range"); } { OsiRowCut r; r.setLb(65.432); r.setUb(123.45); OSIUNITTEST_ASSERT_ERROR(r.sense() == 'R', {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(r.rhs() == 123.45, {}, "osirowcut", "sense, rhs, range"); OSIUNITTEST_ASSERT_ERROR(eq(r.range(), 123.45 - 65.432), {}, "osirowcut", "sense, rhs, range"); } } // Test copy constructor and assignment operator { OsiRowCut rhs; { OsiRowCut r; OsiRowCut rC1(r); OSIUNITTEST_ASSERT_ERROR(rC1.row().getNumElements() == r.row().getNumElements(), {}, "osirowcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC1.row().getIndices() == r.row().getIndices(), {}, "osirowcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC1.row().getElements() == r.row().getElements(), {}, "osirowcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC1.lb() == r.lb(), {}, "osirowcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC1.ub() == r.ub(), {}, "osirowcut", "copy constructor"); r.setLb(65.432); r.setUb(123.45); r.setRow(ne, inx, el); r.setEffectiveness(123.); OSIUNITTEST_ASSERT_ERROR(rC1.row().getNumElements() != r.row().getNumElements(), {}, "osirowcut", "modify copy"); OSIUNITTEST_ASSERT_ERROR(rC1.row().getIndices() != r.row().getIndices(), {}, "osirowcut", "modify copy"); OSIUNITTEST_ASSERT_ERROR(rC1.row().getElements() != r.row().getElements(), {}, "osirowcut", "modify copy"); OSIUNITTEST_ASSERT_ERROR(rC1.lb() != r.lb(), {}, "osirowcut", "modify copy"); OSIUNITTEST_ASSERT_ERROR(rC1.ub() != r.ub(), {}, "osirowcut", "modify copy"); OSIUNITTEST_ASSERT_ERROR(rC1.effectiveness() != r.effectiveness(), {}, "osirowcut", "modify copy"); OsiRowCut rC2(r); OSIUNITTEST_ASSERT_ERROR(rC2.row().getNumElements() == r.row().getNumElements(), return, "osirowcut", "copy constructor"); bool row_ok = true; for (int i = 0; i < r.row().getNumElements(); i++) { row_ok &= rC2.row().getIndices()[i] == r.row().getIndices()[i]; row_ok &= rC2.row().getElements()[i] == r.row().getElements()[i]; } OSIUNITTEST_ASSERT_ERROR(row_ok, {}, "osirowcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC2.lb() == r.lb(), {}, "osirowcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC2.ub() == r.ub(), {}, "osirowcut", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(rC2.effectiveness() == r.effectiveness(), {}, "osirowcut", "copy constructor"); rhs = rC2; } // Test that rhs has correct values even though lhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(rhs.row().getNumElements() == ne, return, "osirowcut", "assignment operator"); bool row_ok = true; for (int i = 0; i < ne; i++) { row_ok &= rhs.row().getIndices()[i] == inx[i]; row_ok &= rhs.row().getElements()[i] == el[i]; } OSIUNITTEST_ASSERT_ERROR(row_ok, {}, "osirowcut", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(rhs.effectiveness() == 123.0, {}, "osirowcut", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(rhs.lb() == 65.432, {}, "osirowcut", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(rhs.ub() == 123.45, {}, "osirowcut", "assignment operator"); } // Test setting row with packed vector { CoinPackedVector r; r.setVector(ne, inx, el); OsiRowCut rc; OSIUNITTEST_ASSERT_ERROR(rc.row() != r, {}, "osirowcut", "setting row with packed vector"); rc.setRow(r); OSIUNITTEST_ASSERT_ERROR(rc.row() == r, {}, "osirowcut", "setting row with packed vector"); } // Test operator== { CoinPackedVector r; r.setVector(ne, inx, el); OsiRowCut rc; rc.setRow(r); rc.setEffectiveness(2.); rc.setLb(3.0); rc.setUb(4.0); { OsiRowCut c(rc); OSIUNITTEST_ASSERT_ERROR(c == rc, {}, "osirowcut", "operator =="); OSIUNITTEST_ASSERT_ERROR(!(c != rc), {}, "osirowcut", "operator !="); OSIUNITTEST_ASSERT_ERROR(!(c < rc), {}, "osirowcut", "operator <"); OSIUNITTEST_ASSERT_ERROR(!(rc < c), {}, "osirowcut", "operator <"); OSIUNITTEST_ASSERT_ERROR(!(c > rc), {}, "osirowcut", "operator >"); OSIUNITTEST_ASSERT_ERROR(!(rc > c), {}, "osirowcut", "operator >"); } { OsiRowCut c(rc); const int ne1 = 4; int inx1[ne] = { 1, 3, 4, 7 }; double el1[ne] = { 1.2, 3.4, 5.6, 7.9 }; c.setRow(ne1, inx1, el1); OSIUNITTEST_ASSERT_ERROR(!(c == rc), {}, "osirowcut", "operator =="); OSIUNITTEST_ASSERT_ERROR(c != rc, {}, "osirowcut", "operator !="); OSIUNITTEST_ASSERT_ERROR(!(rc < c), {}, "osirowcut", "operator <"); } { OsiRowCut c(rc); c.setEffectiveness(3.); OSIUNITTEST_ASSERT_ERROR(!(c == rc), {}, "osirowcut", "operator =="); OSIUNITTEST_ASSERT_ERROR(c != rc, {}, "osirowcut", "operator !="); OSIUNITTEST_ASSERT_ERROR(!(c < rc), {}, "osirowcut", "operator <"); OSIUNITTEST_ASSERT_ERROR((rc < c), {}, "osirowcut", "operator <"); OSIUNITTEST_ASSERT_ERROR((c > rc), {}, "osirowcut", "operator >"); OSIUNITTEST_ASSERT_ERROR(!(rc > c), {}, "osirowcut", "operator >"); } { OsiRowCut c(rc); c.setLb(4.0); OSIUNITTEST_ASSERT_ERROR(!(c == rc), {}, "osirowcut", "operator =="); OSIUNITTEST_ASSERT_ERROR(c != rc, {}, "osirowcut", "operator !="); } { OsiRowCut c(rc); c.setUb(5.0); OSIUNITTEST_ASSERT_ERROR(!(c == rc), {}, "osirowcut", "operator =="); OSIUNITTEST_ASSERT_ERROR(c != rc, {}, "osirowcut", "operator !="); } } #ifndef COIN_NOTEST_DUPLICATE { // Test consistent OsiSolverInterface *imP = baseSiP->clone(); assert(imP != NULL); std::string fn = mpsDir + "exmip1"; OSIUNITTEST_ASSERT_ERROR(imP->readMps(fn.c_str(), "mps") == 0, {}, "osirowcut", "read MPS"); OsiRowCut c; const int ne = 3; int inx[ne] = { -1, 5, 4 }; double el[ne] = { 1., 1., 1. }; c.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!c.consistent(), {}, "osirowcut", "consistent"); inx[0] = 5; #if 0 c.setRow(ne,inx,el); OSIUNITTEST_ASSERT_ERROR(!c.consistent(), {}, "osirowcut", "consistent"); #else bool errorThrown = false; try { c.setRow(ne, inx, el); } catch (CoinError e) { errorThrown = true; } OSIUNITTEST_ASSERT_ERROR(errorThrown == true, {}, "osirowcut", "duplicate entries"); #endif inx[0] = 3; c.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(c.consistent(), {}, "osirowcut", "consistent"); c.setLb(5.); c.setUb(5.); OSIUNITTEST_ASSERT_ERROR(c.consistent(), {}, "osirowcut", "consistent"); c.setLb(5.5); OSIUNITTEST_ASSERT_ERROR(c.consistent(), {}, "osirowcut", "consistent"); OSIUNITTEST_ASSERT_ERROR(c.infeasible(*imP), {}, "osirowcut", "infeasible"); delete imP; } #endif { // Test consistent(IntegerModel) method. OsiSolverInterface *imP = baseSiP->clone(); assert(imP != NULL); std::string fn = mpsDir + "exmip1"; OSIUNITTEST_ASSERT_ERROR(imP->readMps(fn.c_str(), "mps") == 0, {}, "osirowcut", "read MPS"); OsiRowCut cut; const int ne = 3; int inx[ne] = { 3, 5, 4 }; double el[ne] = { 1., 1., 1. }; cut.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.consistent(), {}, "osirowcut", "consistent"); inx[0] = 7; cut.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.consistent(*imP), {}, "osirowcut", "consistent(IntegerModel)"); inx[0] = 8; cut.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(cut.consistent(), {}, "osirowcut", "consistent(IntegerModel)"); OSIUNITTEST_ASSERT_ERROR(!cut.consistent(*imP), {}, "osirowcut", "consistent(IntegerModel)"); delete imP; } { //Test infeasible(im) method OsiSolverInterface *imP = baseSiP->clone(); assert(imP != NULL); std::string fn = mpsDir + "exmip1"; OSIUNITTEST_ASSERT_ERROR(imP->readMps(fn.c_str(), "mps") == 0, {}, "osirowcut", "read MPS"); OsiRowCut cut; const int ne = 3; int inx[ne] = { 3, 5, 4 }; double el[ne] = { 1., 1., 1. }; cut.setRow(ne, inx, el); OSIUNITTEST_ASSERT_ERROR(!cut.infeasible(*imP), {}, "osirowcut", "infeasible(IntegerModel)"); OsiRowCut c1; OSIUNITTEST_ASSERT_ERROR(!c1.infeasible(*imP), {}, "osirowcut", "infeasible(IntegerModel)"); OSIUNITTEST_ASSERT_ERROR(c1.consistent(), {}, "osirowcut", "consistent"); OSIUNITTEST_ASSERT_ERROR(c1.consistent(*imP), {}, "osirowcut", "consistent(IntegerModel)"); delete imP; } { //Test violation double solution[] = { 1.0, 1.0, 1.0, 2.0, 2.0, 2.0 }; OsiRowCut cut; const int ne = 3; int inx[ne] = { 3, 5, 4 }; double el[ne] = { 1., 1., 1. }; cut.setRow(ne, inx, el); cut.setUb(5.); OSIUNITTEST_ASSERT_ERROR(cut.violated(solution), {}, "osirowcut", "violation"); cut.setLb(5.); cut.setUb(10.); OSIUNITTEST_ASSERT_ERROR(!cut.violated(solution), {}, "osirowcut", "violation"); cut.setLb(6.1); OSIUNITTEST_ASSERT_ERROR(cut.violated(solution), {}, "osirowcut", "violation"); } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiCommonTest/Makefile.in0000644000175200017520000005710712502175645017225 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Lou Hafer SFU 2010-11-20 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = src/OsiCommonTest DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiCommonTests_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) \ @DEPENDENCY_LINKING_TRUE@ ../Osi/libOsi.la am_libOsiCommonTests_la_OBJECTS = OsiColCutTest.lo OsiCutsTest.lo \ OsiRowCutDebuggerTest.lo OsiRowCutTest.lo OsiSimplexAPITest.lo \ OsiNetlibTest.lo OsiUnitTestUtils.lo OsiSolverInterfaceTest.lo libOsiCommonTests_la_OBJECTS = $(am_libOsiCommonTests_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiCommonTests_la_SOURCES) DIST_SOURCES = $(libOsiCommonTests_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # Common Test library for Osi # ######################################################################## # Name of the library compiled in this directory. We want it to be installed # in $libdir lib_LTLIBRARIES = libOsiCommonTests.la # List all source files for this library, including headers libOsiCommonTests_la_SOURCES = \ OsiCommonTests.hpp \ OsiColCutTest.cpp \ OsiCutsTest.cpp \ OsiRowCutDebuggerTest.cpp \ OsiRowCutTest.cpp \ OsiSimplexAPITest.cpp \ OsiNetlibTest.cpp \ OsiUnitTestUtils.cpp \ OsiSolverInterfaceTest.cpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiCommonTests_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la # Libtool flags libOsiCommonTests_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../Osi` $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, includecoindir = $(includedir)/coin includecoin_HEADERS = OsiUnitTests.hpp 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiCommonTest/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiCommonTest/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 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiCommonTests.la: $(libOsiCommonTests_la_OBJECTS) $(libOsiCommonTests_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiCommonTests_la_LDFLAGS) $(libOsiCommonTests_la_OBJECTS) $(libOsiCommonTests_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiColCutTest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiCutsTest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiNetlibTest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiRowCutDebuggerTest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiRowCutTest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiSimplexAPITest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiSolverInterfaceTest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiUnitTestUtils.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: 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: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags 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-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ 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 uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # 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: DyLP-1.10.4/Osi/src/OsiCommonTest/OsiUnitTests.hpp0000644000175200017520000004052413414504135020272 0ustar coincoin// Copyright (C) 2010 // All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /*! \file OsiUnitTests.hpp Utility methods for OSI unit tests. */ #ifndef OSISOLVERINTERFACETEST_HPP_ #define OSISOLVERINTERFACETEST_HPP_ #include #include #include #include #include #include #include #include class OsiSolverInterface; class CoinPackedVectorBase; /** A function that tests that a lot of problems given in MPS files (mostly the NETLIB problems) solve properly with all the specified solvers. * * The routine creates a vector of NetLib problems (problem name, objective, * various other characteristics), and a vector of solvers to be tested. * * Each solver is run on each problem. The run is deemed successful if the * solver reports the correct problem size after loading and returns the * correct objective value after optimization. * If multiple solvers are available, the results are compared pairwise against * the results reported by adjacent solvers in the solver vector. Due to * limitations of the volume solver, it must be the last solver in vecEmptySiP. */ void OsiSolverInterfaceMpsUnitTest(const std::vector< OsiSolverInterface * > &vecEmptySiP, const std::string &mpsDir); /** A function that tests the methods in the OsiSolverInterface class. * Some time ago, if this method is compiled with optimization, * the compilation took 10-15 minutes and the machine pages (has 256M core memory!)... */ void OsiSolverInterfaceCommonUnitTest(const OsiSolverInterface *emptySi, const std::string &mpsDir, const std::string &netlibDir); /** A function that tests the methods in the OsiColCut class. */ void OsiColCutUnitTest(const OsiSolverInterface *baseSiP, const std::string &mpsDir); /** A function that tests the methods in the OsiRowCut class. */ void OsiRowCutUnitTest(const OsiSolverInterface *baseSiP, const std::string &mpsDir); /** A function that tests the methods in the OsiRowCutDebugger class. */ void OsiRowCutDebuggerUnitTest(const OsiSolverInterface *siP, const std::string &mpsDir); /** A function that tests the methods in the OsiCuts class. */ void OsiCutsUnitTest(); /// A namespace so we can define a few `global' variables to use during tests. namespace OsiUnitTest { class TestOutcomes; /*! \brief Verbosity level of unit tests 0 (default) for minimal output; larger numbers produce more output */ extern unsigned int verbosity; /*! \brief Behaviour on failing a test - 0 (= default) continue - 1 press any key to continue - 2 stop with abort() */ extern unsigned int haltonerror; /*! \brief Test outcomes A global TestOutcomes object to store test outcomes during the run of the unit test for an OSI. */ extern TestOutcomes outcomes; /*! \brief Print an error message Formatted as "XxxSolverInterface testing issue: message" where Xxx is the string provided as \p solverName. Flushes std::cout before printing to std::cerr. */ void failureMessage(const std::string &solverName, const std::string &message); /// \overload void failureMessage(const OsiSolverInterface &si, const std::string &message); /*! \brief Print an error message, specifying the test name and condition Formatted as "XxxSolverInterface testing issue: testname failed: testcond" where Xxx is the OsiStrParam::OsiSolverName parameter of the \p si. Flushes std::cout before printing to std::cerr. */ void failureMessage(const std::string &solverName, const std::string &testname, const std::string &testcond); /// \overload void failureMessage(const OsiSolverInterface &si, const std::string &testname, const std::string &testcond); /*! \brief Print a message. Prints the message as given. Flushes std::cout before printing to std::cerr. */ void testingMessage(const char *const msg); /*! \brief Utility method to check equality Tests for equality using CoinRelFltEq with tolerance \p tol. Understands the notion of solver infinity and obtains the value for infinity from the solver interfaces supplied as parameters. */ bool equivalentVectors(const OsiSolverInterface *si1, const OsiSolverInterface *si2, double tol, const double *v1, const double *v2, int size); /*! \brief Compare two problems for equality Compares the problems held in the two solvers: constraint matrix, row and column bounds, column type, and objective. Rows are checked using upper and lower bounds and using sense, bound, and range. */ bool compareProblems(OsiSolverInterface *osi1, OsiSolverInterface *osi2); /*! \brief Compare a packed vector with an expanded vector Checks that all values present in the packed vector are present in the full vector and checks that there are no extra entries in the full vector. Uses CoinRelFltEq with the default tolerance. */ bool isEquivalent(const CoinPackedVectorBase &pv, int n, const double *fv); /*! \brief Process command line parameters. An unrecognised keyword which is not in the \p ignorekeywords map will trigger the help message and a return value of false. For each keyword in \p ignorekeywords, you can specify the number of following parameters that should be ignored. This should be replaced with the one of the standard CoinUtils parameter mechanisms. */ bool processParameters(int argc, const char **argv, std::map< std::string, std::string > &parms, const std::map< std::string, int > &ignorekeywords = std::map< std::string, int >()); /// A single test outcome record. class TestOutcome { public: /// Test result typedef enum { NOTE = 0, PASSED = 1, WARNING = 2, ERROR = 3, LAST = 4 } SeverityLevel; /// Print strings for SeverityLevel static std::string SeverityLevelName[LAST]; /// Name of component under test std::string component; /// Name of test std::string testname; /// Condition being tested std::string testcond; /// Test result SeverityLevel severity; /// Set to true if problem is expected bool expected; /// Name of code file where test executed std::string filename; /// Line number in code file where test executed int linenumber; /// Standard constructor TestOutcome(const std::string &comp, const std::string &tst, const char *cond, SeverityLevel sev, const char *file, int line, bool exp = false) : component(comp) , testname(tst) , testcond(cond) , severity(sev) , expected(exp) , filename(file) , linenumber(line) { } /// Print the test outcome void print() const; }; /// Utility class to maintain a list of test outcomes. class TestOutcomes : public std::list< TestOutcome > { public: /// Add an outcome to the list void add(std::string comp, std::string tst, const char *cond, TestOutcome::SeverityLevel sev, const char *file, int line, bool exp = false) { push_back(TestOutcome(comp, tst, cond, sev, file, line, exp)); } /*! \brief Add an outcome to the list Get the component name from the solver interface. */ void add(const OsiSolverInterface &si, std::string tst, const char *cond, TestOutcome::SeverityLevel sev, const char *file, int line, bool exp = false); /// Print the list of outcomes void print() const; /*! \brief Count total and expected outcomes at given severity level Given a severity level, walk the list of outcomes and count the total number of outcomes at this severity level and the number expected. */ void getCountBySeverity(TestOutcome::SeverityLevel sev, int &total, int &expected) const; }; /// Convert parameter to a string (stringification) #define OSIUNITTEST_QUOTEME_(x) #x /// Convert to string with one level of expansion of the parameter #define OSIUNITTEST_QUOTEME(x) OSIUNITTEST_QUOTEME_(x) template < typename Component > bool OsiUnitTestAssertSeverityExpected( bool condition, const char *condition_str, const char *filename, int line, const Component &component, const std::string &testname, TestOutcome::SeverityLevel severity, bool expected) { if (condition) { OsiUnitTest::outcomes.add(component, testname, condition_str, OsiUnitTest::TestOutcome::PASSED, filename, line, false); if (OsiUnitTest::verbosity >= 2) { std::ostringstream successmsg; successmsg << __FILE__ << ":" << __LINE__ << ": " << testname << " (condition \'" << condition_str << "\') passed.\n"; OsiUnitTest::testingMessage(successmsg.str().c_str()); } return true; } OsiUnitTest::outcomes.add(component, testname, condition_str, severity, filename, line, expected); OsiUnitTest::failureMessage(component, testname, condition_str); switch (OsiUnitTest::haltonerror) { case 2: { if (severity >= OsiUnitTest::TestOutcome::ERROR) std::abort(); break; } case 1: { std::cout << std::endl << "press any key to continue..." << std::endl; std::getchar(); break; } default:; } return false; } /// Add a test outcome to the list held in OsiUnitTest::outcomes #define OSIUNITTEST_ADD_OUTCOME(component, testname, testcondition, severity, expected) \ OsiUnitTest::outcomes.add(component, testname, testcondition, severity, \ __FILE__, __LINE__, expected) /*! \brief Test for a condition and record the result Test \p condition and record the result in OsiUnitTest::outcomes. If it succeeds, record the result as OsiUnitTest::TestOutcome::PASSED and print a message for OsiUnitTest::verbosity >= 2. If it fails, record the test as failed with \p severity and \p expected and react as specified by OsiUnitTest::haltonerror. \p failurecode is executed when failure is not fatal. */ #define OSIUNITTEST_ASSERT_SEVERITY_EXPECTED(condition, failurecode, component, \ testname, severity, expected) \ { \ if (!OsiUnitTestAssertSeverityExpected(condition, #condition, \ __FILE__, __LINE__, component, testname, severity, expected)) { \ failurecode; \ } \ } /*! \brief Perform a test with severity OsiUnitTest::TestOutcome::ERROR, failure not expected. */ #define OSIUNITTEST_ASSERT_ERROR(condition, failurecode, component, testname) \ OSIUNITTEST_ASSERT_SEVERITY_EXPECTED(condition, failurecode, component, testname, \ OsiUnitTest::TestOutcome::ERROR, false) /*! \brief Perform a test with severity OsiUnitTest::TestOutcome::WARNING, failure not expected. */ #define OSIUNITTEST_ASSERT_WARNING(condition, failurecode, component, testname) \ OSIUNITTEST_ASSERT_SEVERITY_EXPECTED(condition, failurecode, component, testname, \ OsiUnitTest::TestOutcome::WARNING, false) /*! \brief Perform a test surrounded by a try/catch block \p trycode is executed in a try/catch block; if there's no throw the test is deemed to have succeeded and is recorded in OsiUnitTest::outcomes with status OsiUnitTest::TestOutcome::PASSED. If the \p trycode throws a CoinError, the failure is recorded with status \p severity and \p expected and the value of OsiUnitTest::haltonerror is consulted. If the failure is not fatal, \p catchcode is executed. If any other error is thrown, the failure is recorded as for a CoinError and \p catchcode is executed (haltonerror is not consulted). */ #define OSIUNITTEST_CATCH_SEVERITY_EXPECTED(trycode, catchcode, component, testname, \ severity, expected) \ { \ try { \ trycode; \ OSIUNITTEST_ADD_OUTCOME(component, testname, #trycode " did not throw exception", \ OsiUnitTest::TestOutcome::PASSED, false); \ if (OsiUnitTest::verbosity >= 2) { \ std::string successmsg(__FILE__ ":" OSIUNITTEST_QUOTEME(__LINE__) ": "); \ successmsg = successmsg + testname; \ successmsg = successmsg + " (code \'" #trycode "\') did not throw exception"; \ successmsg = successmsg + ".\n"; \ OsiUnitTest::testingMessage(successmsg.c_str()); \ } \ } catch (CoinError & e) { \ std::stringstream errmsg; \ errmsg << #trycode " threw CoinError: " << e.message(); \ if (e.className().length() > 0) \ errmsg << " in " << e.className(); \ if (e.methodName().length() > 0) \ errmsg << " in " << e.methodName(); \ if (e.lineNumber() >= 0) \ errmsg << " at " << e.fileName() << ":" << e.lineNumber(); \ OSIUNITTEST_ADD_OUTCOME(component, testname, errmsg.str().c_str(), \ severity, expected); \ OsiUnitTest::failureMessage(component, testname, errmsg.str().c_str()); \ switch (OsiUnitTest::haltonerror) { \ case 2: { \ if (severity >= OsiUnitTest::TestOutcome::ERROR) \ abort(); \ break; \ } \ case 1: { \ std::cout << std::endl \ << "press any key to continue..." << std::endl; \ getchar(); \ break; \ } \ default:; \ } \ catchcode; \ } catch (...) { \ std::string errmsg; \ errmsg = #trycode; \ errmsg = errmsg + " threw unknown exception"; \ OSIUNITTEST_ADD_OUTCOME(component, testname, errmsg.c_str(), severity, false); \ OsiUnitTest::failureMessage(component, testname, errmsg.c_str()); \ catchcode; \ } \ } /*! \brief Perform a try/catch test with severity OsiUnitTest::TestOutcome::ERROR, failure not expected. */ #define OSIUNITTEST_CATCH_ERROR(trycode, catchcode, component, testname) \ OSIUNITTEST_CATCH_SEVERITY_EXPECTED(trycode, catchcode, component, testname, OsiUnitTest::TestOutcome::ERROR, false) /*! \brief Perform a try/catch test with severity OsiUnitTest::TestOutcome::WARNING, failure not expected. */ #define OSIUNITTEST_CATCH_WARNING(trycode, catchcode, component, testname) \ OSIUNITTEST_CATCH_SEVERITY_EXPECTED(trycode, catchcode, component, testname, OsiUnitTest::TestOutcome::WARNING, false) } // end namespace OsiUnitTest #endif /*OSISOLVERINTERFACETEST_HPP_*/ /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiCommonTest/OsiRowCutDebuggerTest.cpp0000644000175200017520000001110013414504135022037 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinPragma.hpp" #include "OsiUnitTests.hpp" #include "OsiRowCutDebugger.hpp" //-------------------------------------------------------------------------- // test cut debugger methods. void OsiRowCutDebuggerUnitTest(const OsiSolverInterface *baseSiP, const std::string &mpsDir) { CoinRelFltEq eq; // Test default constructor { OsiRowCutDebugger r; OSIUNITTEST_ASSERT_ERROR(r.integerVariable_ == NULL, {}, "osirowcutdebugger", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.knownSolution_ == NULL, {}, "osirowcutdebugger", "default constructor"); OSIUNITTEST_ASSERT_ERROR(r.numberColumns_ == 0, {}, "osirowcutdebugger", "default constructor"); } { // Get non trivial instance OsiSolverInterface *imP = baseSiP->clone(); std::string fn = mpsDir + "exmip1"; imP->readMps(fn.c_str(), "mps"); OSIUNITTEST_ASSERT_ERROR(imP->getNumRows() == 5, {}, "osirowcutdebugger", "read exmip1"); /* Activate the debugger. The garbled name here is deliberate; the debugger should isolate the portion of the string between '/' and '.' (in normal use, this would be the base file name, stripped of the prefix and extension). */ imP->activateRowCutDebugger("ab cd /x/ /exmip1.asc"); int i; // return debugger const OsiRowCutDebugger *debugger = imP->getRowCutDebugger(); OSIUNITTEST_ASSERT_ERROR(debugger != NULL, {}, "osirowcutdebugger", "return debugger"); OSIUNITTEST_ASSERT_ERROR(debugger->numberColumns_ == 8, {}, "osirowcutdebugger", "return debugger"); const bool type[] = { 0, 0, 1, 1, 0, 0, 0, 0 }; const double values[] = { 2.5, 0, 1, 1, 0.5, 3, 0, 0.26315789473684253 }; CoinPackedVector objCoefs(8, imP->getObjCoefficients()); bool type_ok = true; #if 0 for (i=0;i<8;i++) type_ok &= type[i] == debugger->integerVariable_[i]; OSIUNITTEST_ASSERT_ERROR(type_ok, {}, "osirowcutdebugger", "???"); #endif double objValue = objCoefs.dotProduct(values); double debuggerObjValue = objCoefs.dotProduct(debugger->knownSolution_); OSIUNITTEST_ASSERT_ERROR(eq(objValue, debuggerObjValue), {}, "osirowcutdebugger", "objective value"); OsiRowCutDebugger rhs; { OsiRowCutDebugger rC1(*debugger); OSIUNITTEST_ASSERT_ERROR(rC1.numberColumns_ == 8, {}, "osirowcutdebugger", "copy constructor"); type_ok = true; for (i = 0; i < 8; i++) type_ok &= type[i] == rC1.integerVariable_[i]; OSIUNITTEST_ASSERT_ERROR(type_ok, {}, "osirowcutdebugger", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(eq(objValue, objCoefs.dotProduct(rC1.knownSolution_)), {}, "osirowcutdebugger", "copy constructor"); rhs = rC1; OSIUNITTEST_ASSERT_ERROR(rhs.numberColumns_ == 8, {}, "osirowcutdebugger", "assignment operator"); type_ok = true; for (i = 0; i < 8; i++) type_ok &= type[i] == rhs.integerVariable_[i]; OSIUNITTEST_ASSERT_ERROR(type_ok, {}, "osirowcutdebugger", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(eq(objValue, objCoefs.dotProduct(rhs.knownSolution_)), {}, "osirowcutdebugger", "assignment operator"); } // Test that rhs has correct values even though lhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(rhs.numberColumns_ == 8, {}, "osirowcutdebugger", "assignment operator"); type_ok = true; for (i = 0; i < 8; i++) type_ok &= type[i] == rhs.integerVariable_[i]; OSIUNITTEST_ASSERT_ERROR(type_ok, {}, "osirowcutdebugger", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(eq(objValue, objCoefs.dotProduct(rhs.knownSolution_)), {}, "osirowcutdebugger", "assignment operator"); OsiRowCut cut[2]; const int ne = 3; int inx[ne] = { 0, 2, 3 }; double el[ne] = { 1., 1., 1. }; cut[0].setRow(ne, inx, el); cut[0].setUb(5.); el[1] = 5; cut[1].setRow(ne, inx, el); cut[1].setUb(5); OsiCuts cs; cs.insert(cut[0]); cs.insert(cut[1]); OSIUNITTEST_ASSERT_ERROR(!debugger->invalidCut(cut[0]), {}, "osirowcutdebugger", "recognize (in)valid cut"); OSIUNITTEST_ASSERT_ERROR(debugger->invalidCut(cut[1]), {}, "osirowcutdebugger", "recognize (in)valid cut"); OSIUNITTEST_ASSERT_ERROR(debugger->validateCuts(cs, 0, 2) == 1, {}, "osirowcutdebugger", "recognize (in)valid cut"); OSIUNITTEST_ASSERT_ERROR(debugger->validateCuts(cs, 0, 1) == 0, {}, "osirowcutdebugger", "recognize (in)valid cut"); delete imP; } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiXpr/0000755000175200017520000000000013434203623013620 5ustar coincoinDyLP-1.10.4/Osi/src/OsiXpr/OsiXprSolverInterface.cpp0000644000175200017520000021765613414504254020607 0ustar coincoin// copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /* OPEN: have a look at the OPEN tags */ /* OPEN: read/set more controls ... */ #include #include #include #include "CoinPragma.hpp" #define __ANSIC_ #include #undef __ANSIC_ #include "OsiXprSolverInterface.hpp" #include "CoinHelperFunctions.hpp" #include "OsiCuts.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" #include "OsiRowCut.hpp" #include "CoinWarmStartBasis.hpp" #include "CoinMessage.hpp" //#define DEBUG static void XPRS_CC OsiXprMessageCallback(XPRSprob prob, void *vUserDat, const char *msg, int msgLen, int msgType) { if (vUserDat) { if (msgType < 0) { ((CoinMessageHandler *)vUserDat)->finish(); } else { /* CoinMessageHandler does not recognize that a "\0" string means that a newline should be printed. * So we let it print a space (followed by a newline). */ if (((CoinMessageHandler *)vUserDat)->logLevel() > 0) ((CoinMessageHandler *)vUserDat)->message(0, "XPRS", *msg ? msg : " ", ' ') << CoinMessageEol; } } else { if (msgType < 0) { fflush(stdout); } else { printf("%.*s\n", msgLen, msg); fflush(stdout); } } } static void reporterror(const char *fname, int iline, int ierr) { fprintf(stdout, "ERROR: %s in line %d error %d occured\n", fname, iline, ierr); } #define XPRS_CHECKED(function, args) \ do { \ int _nReturn; \ if ((_nReturn = function args) != 0) { \ reporterror(#function, __LINE__, _nReturn); \ } \ } while (0) //############################################################################# // Solve methods //############################################################################# void OsiXprSolverInterface::initialSolve() { freeSolution(); #if XPVERSION <= 20 if (objsense_ == 1.0) { XPRS_CHECKED(XPRSminim, (prob_, "l")); } else if (objsense_ == -1.0) { XPRS_CHECKED(XPRSmaxim, (prob_, "l")); } #else XPRS_CHECKED(XPRSlpoptimize, (prob_, "l")); #endif lastsolvewasmip = false; } //----------------------------------------------------------------------------- void OsiXprSolverInterface::resolve() { freeSolution(); #if XPVERSION <= 20 if (objsense_ == 1.0) { XPRS_CHECKED(XPRSminim, (prob_, "dl")); } else if (objsense_ == -1.0) { XPRS_CHECKED(XPRSmaxim, (prob_, "dl")); } #else XPRS_CHECKED(XPRSlpoptimize, (prob_, "dl")); #endif lastsolvewasmip = false; } //----------------------------------------------------------------------------- void OsiXprSolverInterface::branchAndBound() { int status; if (colsol_ != NULL && domipstart) { XPRS_CHECKED(XPRSloadmipsol, (prob_, colsol_, &status)); /* status = 0 .. accepted * = 1 .. infeasible * = 2 .. cutoff * = 3 .. LP reoptimization interrupted */ } freeSolution(); #if XPVERSION <= 20 /* XPRSglobal cannot be called if there is no LP relaxation available yet * -> solve LP relaxation first, if no LP solution available */ XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); if (status != XPRS_LP_OPTIMAL) initialSolve(); XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); if (status != XPRS_LP_OPTIMAL) { messageHandler()->message(0, "XPRS", "XPRESS failed to solve LP relaxation; cannot call XPRSglobal", ' ') << CoinMessageEol; return; } #else XPRS_CHECKED(XPRSmipoptimize, (prob_, "")); #endif lastsolvewasmip = true; } //############################################################################# // Parameter related methods //############################################################################# bool OsiXprSolverInterface::setIntParam(OsiIntParam key, int value) { bool retval = false; switch (key) { case OsiMaxNumIteration: retval = XPRSsetintcontrol(prob_, XPRS_LPITERLIMIT, value) == 0; break; case OsiMaxNumIterationHotStart: retval = false; break; case OsiLastIntParam: retval = false; break; case OsiNameDiscipline: retval = false; break; } return retval; } //----------------------------------------------------------------------------- /* OPEN: more dbl parameters ... */ bool OsiXprSolverInterface::setDblParam(OsiDblParam key, double value) { bool retval = false; switch (key) { case OsiDualObjectiveLimit: retval = XPRSsetdblcontrol(prob_, XPRS_MIPABSCUTOFF, value) == 0; break; case OsiPrimalObjectiveLimit: retval = false; break; case OsiDualTolerance: retval = XPRSsetdblcontrol(prob_, XPRS_FEASTOL, value) == 0; break; case OsiPrimalTolerance: retval = XPRSsetdblcontrol(prob_, XPRS_FEASTOL, value) == 0; break; case OsiObjOffset: return OsiSolverInterface::setDblParam(key, value); case OsiLastDblParam: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OsiXprSolverInterface::setStrParam(OsiStrParam key, const std::string &value) { bool retval = false; switch (key) { case OsiProbName: /* OPEN: what does this mean */ OsiSolverInterface::setStrParam(key, value); return retval = true; case OsiLastStrParam: return false; case OsiSolverName: return false; } return false; } //----------------------------------------------------------------------------- bool OsiXprSolverInterface::getIntParam(OsiIntParam key, int &value) const { bool retval = false; switch (key) { case OsiMaxNumIteration: /* OPEN: the return value was logically wrong */ retval = XPRSgetintcontrol(prob_, XPRS_LPITERLIMIT, &value) == 0; break; case OsiMaxNumIterationHotStart: retval = false; break; case OsiLastIntParam: retval = false; break; case OsiNameDiscipline: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OsiXprSolverInterface::getDblParam(OsiDblParam key, double &value) const { bool retval = false; switch (key) { case OsiDualObjectiveLimit: retval = XPRSgetdblcontrol(prob_, XPRS_MIPABSCUTOFF, &value) == 0; break; case OsiPrimalObjectiveLimit: retval = false; break; case OsiDualTolerance: retval = XPRSgetdblcontrol(prob_, XPRS_FEASTOL, &value) == 0; break; case OsiPrimalTolerance: retval = XPRSgetdblcontrol(prob_, XPRS_FEASTOL, &value) == 0; break; case OsiObjOffset: retval = OsiSolverInterface::getDblParam(key, value); break; case OsiLastDblParam: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OsiXprSolverInterface::getStrParam(OsiStrParam key, std::string &value) const { bool retval = false; switch (key) { case OsiProbName: OsiSolverInterface::getStrParam(key, value); retval = true; break; case OsiSolverName: value = "xpress"; retval = true; break; case OsiLastStrParam: retval = false; } return retval; } //############################################################################# // Methods returning info on how the solution process terminated //############################################################################# bool OsiXprSolverInterface::isAbandoned() const { int status, glstat; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_MIPSTATUS, &glstat)); return status == XPRS_LP_UNFINISHED // LP unfinished || glstat == XPRS_MIP_NO_SOL_FOUND // global search incomplete -- no int sol || glstat == XPRS_MIP_SOLUTION; // global search incomplete -- int sol found } bool OsiXprSolverInterface::isProvenOptimal() const { int status, glstat; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_MIPSTATUS, &glstat)); return status == XPRS_LP_OPTIMAL // LP optimal || status == XPRS_LP_CUTOFF // LP obj worse than cutoff || glstat == XPRS_MIP_OPTIMAL; // global search complete -- int found } bool OsiXprSolverInterface::isProvenPrimalInfeasible() const { int status; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); return status == XPRS_LP_INFEAS; // LP infeasible } bool OsiXprSolverInterface::isProvenDualInfeasible() const { int status; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); return status == XPRS_LP_UNBOUNDED; // LP Unbounded } bool OsiXprSolverInterface::isPrimalObjectiveLimitReached() const { /* OPEN: what does that mean */ return false; // N/A in XOSL } bool OsiXprSolverInterface::isDualObjectiveLimitReached() const { int status; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); return status == XPRS_LP_CUTOFF_IN_DUAL; // LP cut off in dual } bool OsiXprSolverInterface::isIterationLimitReached() const { int itrlim, itcnt; XPRS_CHECKED(XPRSgetintcontrol, (prob_, XPRS_LPITERLIMIT, &itrlim)); XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_SIMPLEXITER, &itcnt)); return itcnt >= itrlim; } //############################################################################# // WarmStart related methods //############################################################################# CoinWarmStart *OsiXprSolverInterface::getEmptyWarmStart() const { return (dynamic_cast< CoinWarmStart * >(new CoinWarmStartBasis())); } CoinWarmStart *OsiXprSolverInterface::getWarmStart() const { int pstat, retstat; /* OPEN: what does this mean */ XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_PRESOLVESTATE, &pstat)); if ((pstat & 128) == 0) return NULL; CoinWarmStartBasis *ws = NULL; int numcols = getNumCols(); int numrows = getNumRows(); const double *lb = getColLower(); double infty = getInfinity(); int *rstatus = new int[numrows]; int *cstatus = new int[numcols]; retstat = XPRSgetbasis(prob_, rstatus, cstatus); if (retstat == 0) { int i; ws = new CoinWarmStartBasis; ws->setSize(numcols, numrows); for (i = 0; i < numrows; i++) { switch (rstatus[i]) { case 0: ws->setArtifStatus(i, CoinWarmStartBasis::atLowerBound); break; case 1: ws->setArtifStatus(i, CoinWarmStartBasis::basic); break; case 2: ws->setArtifStatus(i, CoinWarmStartBasis::atUpperBound); break; case 3: ws->setArtifStatus(i, CoinWarmStartBasis::isFree); break; default: // unknown row status delete ws; ws = NULL; goto TERMINATE; } } for (i = 0; i < numcols; i++) { switch (cstatus[i]) { case 0: if (lb[i] <= -infty) ws->setStructStatus(i, CoinWarmStartBasis::isFree); else ws->setStructStatus(i, CoinWarmStartBasis::atLowerBound); break; case 1: ws->setStructStatus(i, CoinWarmStartBasis::basic); break; case 2: ws->setStructStatus(i, CoinWarmStartBasis::atUpperBound); break; case 3: ws->setStructStatus(i, CoinWarmStartBasis::isFree); break; default: // unknown column status delete ws; ws = NULL; goto TERMINATE; } } } TERMINATE: delete[] cstatus; delete[] rstatus; return ws; } //----------------------------------------------------------------------------- bool OsiXprSolverInterface::setWarmStart(const CoinWarmStart *warmstart) { const CoinWarmStartBasis *ws = dynamic_cast< const CoinWarmStartBasis * >(warmstart); if (!ws) return false; int numcols = ws->getNumStructural(); int numrows = ws->getNumArtificial(); if (numcols != getNumCols() || numrows != getNumRows()) return false; bool retval; int retstat; int *cstatus = new int[numcols]; int *rstatus = new int[numrows]; int i; for (i = 0; i < numrows; i++) { switch (ws->getArtifStatus(i)) { case CoinWarmStartBasis::atLowerBound: rstatus[i] = 0; break; case CoinWarmStartBasis::basic: rstatus[i] = 1; break; case CoinWarmStartBasis::atUpperBound: rstatus[i] = 2; break; default: // unknown row status retval = false; goto TERMINATE; } } for (i = 0; i < numcols; i++) { switch (ws->getStructStatus(i)) { case CoinWarmStartBasis::atLowerBound: case CoinWarmStartBasis::isFree: cstatus[i] = 0; break; case CoinWarmStartBasis::basic: cstatus[i] = 1; break; case CoinWarmStartBasis::atUpperBound: cstatus[i] = 2; break; default: // unknown row status retval = false; goto TERMINATE; } } retstat = XPRSloadbasis(prob_, rstatus, cstatus); retval = (retstat == 0); TERMINATE: delete[] cstatus; delete[] rstatus; return retval; } //############################################################################# // Hotstart related methods (primarily used in strong branching) //############################################################################# void OsiXprSolverInterface::markHotStart() { // *FIXME* : do better... -LL OsiSolverInterface::markHotStart(); } void OsiXprSolverInterface::solveFromHotStart() { // *FIXME* : do better... -LL OsiSolverInterface::solveFromHotStart(); } void OsiXprSolverInterface::unmarkHotStart() { // *FIXME* : do better... -LL OsiSolverInterface::unmarkHotStart(); } //############################################################################# // Problem information methods (original data) //############################################################################# //------------------------------------------------------------------ // Get number of rows and columns //------------------------------------------------------------------ int OsiXprSolverInterface::getNumCols() const { if (!isDataLoaded()) return 0; int ncols; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_ORIGINALCOLS, &ncols)); return ncols; } //----------------------------------------------------------------------------- int OsiXprSolverInterface::getNumRows() const { if (!isDataLoaded()) return 0; int nrows; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_ORIGINALROWS, &nrows)); return nrows; } //----------------------------------------------------------------------------- int OsiXprSolverInterface::getNumElements() const { if (!isDataLoaded()) return 0; int retVal; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_ELEMS, &retVal)); return retVal; } //------------------------------------------------------------------ // Get pointer to rim vectors //------------------------------------------------------------------ const double * OsiXprSolverInterface::getColLower() const { if (collower_ == NULL) { if (isDataLoaded()) { int ncols = getNumCols(); if (ncols > 0) { collower_ = new double[ncols]; XPRS_CHECKED(XPRSgetlb, (prob_, collower_, 0, ncols - 1)); } } } return collower_; } //----------------------------------------------------------------------------- const double * OsiXprSolverInterface::getColUpper() const { if (colupper_ == NULL) { if (isDataLoaded()) { int ncols = getNumCols(); if (ncols > 0) { colupper_ = new double[ncols]; XPRS_CHECKED(XPRSgetub, (prob_, colupper_, 0, ncols - 1)); } } } return colupper_; } //----------------------------------------------------------------------------- const char * OsiXprSolverInterface::getRowSense() const { if (rowsense_ == NULL) { if (isDataLoaded()) { int nrows = getNumRows(); if (nrows > 0) { rowsense_ = new char[nrows]; XPRS_CHECKED(XPRSgetrowtype, (prob_, rowsense_, 0, nrows - 1)); } } } return rowsense_; } //----------------------------------------------------------------------------- const double * OsiXprSolverInterface::getRightHandSide() const { if (rhs_ == NULL) { if (isDataLoaded()) { int nrows = getNumRows(); if (nrows > 0) { rhs_ = new double[nrows]; XPRS_CHECKED(XPRSgetrhs, (prob_, rhs_, 0, nrows - 1)); // Make sure free rows have rhs of zero const char *rs = getRowSense(); int nr = getNumRows(); int i; for (i = 0; i < nr; i++) { if (rs[i] == 'N') rhs_[i] = 0.0; } } } } return rhs_; } //----------------------------------------------------------------------------- const double * OsiXprSolverInterface::getRowRange() const { if (rowrange_ == NULL) { if (isDataLoaded()) { int nrows = getNumRows(); if (nrows > 0) { rowrange_ = new double[nrows]; XPRS_CHECKED(XPRSgetrhsrange, (prob_, rowrange_, 0, nrows - 1)); // Make sure non-R rows have range of 0.0 // XPRESS seems to set N and L rows to a range of Infinity const char *rs = getRowSense(); int nr = getNumRows(); int i; for (i = 0; i < nr; i++) { if (rs[i] != 'R') rowrange_[i] = 0.0; } } } } return rowrange_; } //----------------------------------------------------------------------------- const double * OsiXprSolverInterface::getRowLower() const { if (rowlower_ == NULL) { int nrows = getNumRows(); const char *rowsense = getRowSense(); const double *rhs = getRightHandSide(); const double *rowrange = getRowRange(); if (nrows > 0) { rowlower_ = new double[nrows]; double dum1; for (int i = 0; i < nrows; i++) { convertSenseToBound(rowsense[i], rhs[i], rowrange[i], rowlower_[i], dum1); } } } return rowlower_; } //----------------------------------------------------------------------------- const double * OsiXprSolverInterface::getRowUpper() const { if (rowupper_ == NULL) { int nrows = getNumRows(); const char *rowsense = getRowSense(); const double *rhs = getRightHandSide(); const double *rowrange = getRowRange(); if (nrows > 0) { rowupper_ = new double[nrows]; double dum1; for (int i = 0; i < nrows; i++) { convertSenseToBound(rowsense[i], rhs[i], rowrange[i], dum1, rowupper_[i]); } } } return rowupper_; } //----------------------------------------------------------------------------- const double * OsiXprSolverInterface::getObjCoefficients() const { if (objcoeffs_ == NULL) { if (isDataLoaded()) { int ncols = getNumCols(); if (ncols > 0) { objcoeffs_ = new double[ncols]; XPRS_CHECKED(XPRSgetobj, (prob_, objcoeffs_, 0, ncols - 1)); } } } return objcoeffs_; } //----------------------------------------------------------------------------- double OsiXprSolverInterface::getObjSense() const { return objsense_; } //----------------------------------------------------------------------------- // Return information on integrality //----------------------------------------------------------------------------- bool OsiXprSolverInterface::isContinuous(int colNumber) const { getVarTypes(); //std::cerr <<"OsiXprSolverInterface::isContinuous " <colupper(); const double *collower = this->collower(); getVarTypes(); return isBinary(colNumber) && colupper[colNumber] != collower[colNumber]; } #endif //------------------------------------------------------------------ // Row and column copies of the matrix ... //------------------------------------------------------------------ const CoinPackedMatrix * OsiXprSolverInterface::getMatrixByRow() const { if (matrixByRow_ == NULL) { if (isDataLoaded()) { int nrows = getNumRows(); int ncols = getNumCols(); int nelems; XPRS_CHECKED(XPRSgetrows, (prob_, NULL, NULL, NULL, 0, &nelems, 0, nrows - 1)); int *start = new int[nrows + 1]; int *length = new int[nrows]; int *index = new int[nelems]; double *element = new double[nelems]; XPRS_CHECKED(XPRSgetrows, (prob_, start, index, element, nelems, &nelems, 0, nrows - 1)); std::adjacent_difference(start + 1, start + (nrows + 1), length); matrixByRow_ = new CoinPackedMatrix(true, 0, 0); // (mjs) No gaps! // Gaps =><= presolve. matrixByRow_->assignMatrix(false /* not column ordered */, ncols, nrows, nelems, element, index, start, length); } else { matrixByRow_ = new CoinPackedMatrix(true, 0, 0); // (mjs) No gaps! matrixByRow_->reverseOrdering(); } } return matrixByRow_; } //----------------------------------------------------------------------------- const CoinPackedMatrix * OsiXprSolverInterface::getMatrixByCol() const { if (matrixByCol_ == NULL) { matrixByCol_ = new CoinPackedMatrix(*getMatrixByRow()); matrixByCol_->reverseOrdering(); } return matrixByCol_; } //------------------------------------------------------------------ // Get solver's value for infinity //------------------------------------------------------------------ double OsiXprSolverInterface::getInfinity() const { return XPRS_PLUSINFINITY; } //############################################################################# // Problem information methods (results) //############################################################################# const double * OsiXprSolverInterface::getColSolution() const { if (colsol_ == NULL) { if (isDataLoaded()) { int status; int nc = getNumCols(); if (nc > 0) { colsol_ = new double[nc]; if (lastsolvewasmip) { XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_MIPSTATUS, &status)); if (status == XPRS_MIP_SOLUTION || status == XPRS_MIP_OPTIMAL) XPRS_CHECKED(XPRSgetmipsol, (prob_, colsol_, NULL)); else XPRS_CHECKED(XPRSgetlb, (prob_, colsol_, 0, nc - 1)); } else { XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); if (status == XPRS_LP_OPTIMAL) XPRS_CHECKED(XPRSgetlpsol, (prob_, colsol_, NULL, NULL, NULL)); else XPRS_CHECKED(XPRSgetlb, (prob_, colsol_, 0, nc - 1)); } } } } return colsol_; } //----------------------------------------------------------------------------- const double * OsiXprSolverInterface::getRowPrice() const { if (rowprice_ == NULL) { if (isDataLoaded()) { int nr = getNumRows(); if (nr > 0) { int status; rowprice_ = new double[nr]; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); if (status == XPRS_LP_OPTIMAL) XPRS_CHECKED(XPRSgetlpsol, (prob_, NULL, NULL, rowprice_, NULL)); else memset(rowprice_, 0, nr * sizeof(double)); } } } return rowprice_; } //----------------------------------------------------------------------------- const double *OsiXprSolverInterface::getReducedCost() const { if (colprice_ == NULL) { if (isDataLoaded()) { int status; int nc = getNumCols(); colprice_ = new double[nc]; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); if (status == XPRS_LP_OPTIMAL) XPRS_CHECKED(XPRSgetlpsol, (prob_, NULL, NULL, NULL, colprice_)); else memset(colprice_, 0, nc * sizeof(double)); } } return colprice_; } //----------------------------------------------------------------------------- const double *OsiXprSolverInterface::getRowActivity() const { if (rowact_ == NULL) { if (isDataLoaded()) { int nrows = getNumRows(); if (nrows > 0) { int status; int i; const double *rhs = getRightHandSide(); rowact_ = new double[nrows]; if (lastsolvewasmip) { XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_MIPSTATUS, &status)); if (status == XPRS_MIP_SOLUTION || status == XPRS_MIP_OPTIMAL) { XPRS_CHECKED(XPRSgetmipsol, (prob_, NULL, rowact_)); for (i = 0; i < nrows; i++) rowact_[i] = rhs[i] - rowact_[i]; } else memset(rowact_, 0, nrows * sizeof(double)); } else { XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); if (status == XPRS_LP_OPTIMAL) { XPRS_CHECKED(XPRSgetlpsol, (prob_, NULL, rowact_, NULL, NULL)); for (i = 0; i < nrows; i++) rowact_[i] = rhs[i] - rowact_[i]; } else memset(rowact_, 0, nrows * sizeof(double)); } #if 0 /* OPEN: why do we need the presolve state here ??? */ XPRS_CHECKED( XPRSgetintattrib, (prob_,XPRS_PRESOLVESTATE, &status) ); if ( status == 7 ) { int i; XPRS_CHECKED( XPRSgetsol, (prob_,NULL, rowact_, NULL, NULL) ); for ( i = 0; i < nrows; i++ ) rowact_[i] = rhs[i] - rowact_[i]; } else { CoinFillN(rowact_, nrows, 0.0); } #endif } } } return rowact_; } //----------------------------------------------------------------------------- double OsiXprSolverInterface::getObjValue() const { double objvalue = 0; double objconstant = 0; if (isDataLoaded()) { int status; if (lastsolvewasmip) { XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_MIPSTATUS, &status)); if (status == XPRS_MIP_SOLUTION || status == XPRS_MIP_OPTIMAL) XPRS_CHECKED(XPRSgetdblattrib, (prob_, XPRS_MIPOBJVAL, &objvalue)); else objvalue = CoinPackedVector(getNumCols(), getObjCoefficients()).dotProduct(getColSolution()); } else { XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_LPSTATUS, &status)); if (status == XPRS_LP_OPTIMAL) XPRS_CHECKED(XPRSgetdblattrib, (prob_, XPRS_LPOBJVAL, &objvalue)); else objvalue = CoinPackedVector(getNumCols(), getObjCoefficients()).dotProduct(getColSolution()); } OsiSolverInterface::getDblParam(OsiObjOffset, objconstant); // Constant offset is not saved with the xpress representation, // but it has to be returned from here anyway. } return objvalue - objconstant; } //----------------------------------------------------------------------------- int OsiXprSolverInterface::getIterationCount() const { int itcnt; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_SIMPLEXITER, &itcnt)); return itcnt; } //----------------------------------------------------------------------------- std::vector< double * > OsiXprSolverInterface::getDualRays(int maxNumRays, bool fullRay) const { // *FIXME* : must write the method -LL throw CoinError("method is not yet written", "getDualRays", "OsiXprSolverInterface"); return std::vector< double * >(); } //----------------------------------------------------------------------------- std::vector< double * > OsiXprSolverInterface::getPrimalRays(int maxNumRays) const { #if 0 // *FIXME* : Still need to expand column into full ncols-length vector const int nrows = getNumRows(); int nrspar; XPRS_CHECKED( XPRSgetintattrib, (prob_,XPRS_SPAREROWS, &nrspar) ); int junb; int retcode; retcode = XPRSgetunbvec(prob_,&junb); if ( retcode != 0 ) return std::vector(0, (double *) NULL);; double *ray = new double[nrows]; if ( junb < nrows ) { // it's a slack int i; for ( i = 0; i < nrows; i++ ) ray[i] = 0.0; ray[junb] = 1.0; XPRS_CHECKED( XPRSftran, (prob_,ray) ); } else if ( junb >= nrows + nrspar && junb < nrows + nrspar + getNumCols() ){ // it's a structural variable int *mstart = new int[nrows]; int *mrowind = new int[nrows]; double *dmatval = new double[nrows]; int nelt; int jcol = junb - nrows - nrspar; XPRS_CHECKED( XPRSgetcols, (prob_,mstart, mrowind, dmatval, nrows, &nelt, jcol, jcol) ); /* Unpack into the zeroed array y */ int i, ielt; for ( i = 0; i < nrows; i++ ) ray[i] = 0.0; for ( ielt = 0; ielt < nelt; ielt++ ) ray[mrowind[ielt]] = dmatval[ielt]; XPRS_CHECKED( XPRSftran, (prob_,ray) ); delete [] mstart; delete [] mrowind; delete [] dmatval; } else { // it's an error retcode = 1; } if ( retcode == 0 ) return std::vector(1, ray); else { delete ray; return std::vector(0, (double *) NULL); } #endif // *FIXME* : must write the method -LL throw CoinError("method is not yet written", "getPrimalRays", "OsiXprSolverInterface"); return std::vector< double * >(); } //----------------------------------------------------------------------------- #if 0 OsiVectorInt OsiXprSolverInterface::getFractionalIndices(const double etol) const { OsiVectorInt retVal; int numInts = numintvars(); const double *sol = colsol(); getVarTypes(); OsiRelFltEq eq(etol); for ( int i = 0; i < numInts; i++ ) { double colSolElem = sol[ivarind_[i]]; double distanceFromInteger = colSolElem - floor(colSolElem + 0.5); if ( !eq( distanceFromInteger, 0.0 ) ) retVal.push_back(ivarind_[i]); } return retVal; } #endif //############################################################################# // Problem modifying methods (rim vectors) //############################################################################# void OsiXprSolverInterface::setObjCoeff(int elementIndex, double elementValue) { if (isDataLoaded()) { XPRS_CHECKED(XPRSchgobj, (prob_, 1, &elementIndex, &elementValue)); freeCachedResults(); } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setColLower(int elementIndex, double elementValue) { if (isDataLoaded()) { char boundType = 'L'; getVarTypes(); if (vartype_ && vartype_[elementIndex] == 'B' && (elementValue != 0.0 && elementValue != 1.0)) { char elementType = 'I'; XPRS_CHECKED(XPRSchgcoltype, (prob_, 1, &elementIndex, &elementType)); } XPRS_CHECKED(XPRSchgbounds, (prob_, 1, &elementIndex, &boundType, &elementValue)); freeCachedResults(); // delete [] collower_; // collower_ = NULL; } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setColUpper(int elementIndex, double elementValue) { if (isDataLoaded()) { char boundType = 'U'; getVarTypes(); XPRS_CHECKED(XPRSchgbounds, (prob_, 1, &elementIndex, &boundType, &elementValue)); if (vartype_ && vartype_[elementIndex] == 'B' && (elementValue != 0.0 && elementValue != 1.0)) { char elementType = 'I'; XPRS_CHECKED(XPRSchgcoltype, (prob_, 1, &elementIndex, &elementType)); } freeCachedResults(); // delete [] colupper_; // colupper_ = NULL; } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setColBounds(const int elementIndex, double lower, double upper) { if (isDataLoaded()) { char qbtype[2] = { 'L', 'U' }; int mindex[2]; double bnd[2]; getVarTypes(); mindex[0] = elementIndex; mindex[1] = elementIndex; bnd[0] = lower; bnd[1] = upper; XPRS_CHECKED(XPRSchgbounds, (prob_, 2, mindex, qbtype, bnd)); if (vartype_ && vartype_[mindex[0]] == 'B' && !((lower == 0.0 && upper == 0.0) || (lower == 1.0 && upper == 1.0) || (lower == 0.0 && upper == 1.0))) { char elementType = 'I'; XPRS_CHECKED(XPRSchgcoltype, (prob_, 1, &mindex[0], &elementType)); } freeCachedResults(); // delete [] colupper_; // colupper_ = NULL; } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { OsiSolverInterface::setColSetBounds(indexFirst, indexLast, boundList); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setRowLower(int elementIndex, double elementValue) { double rhs = getRightHandSide()[elementIndex]; double range = getRowRange()[elementIndex]; char sense = getRowSense()[elementIndex]; double lower = 0, upper = 0; convertSenseToBound(sense, rhs, range, lower, upper); if (lower != elementValue) { convertBoundToSense(elementValue, upper, sense, rhs, range); setRowType(elementIndex, sense, rhs, range); // freeCachedResults(); --- invoked in setRowType() } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setRowUpper(int elementIndex, double elementValue) { double rhs = getRightHandSide()[elementIndex]; double range = getRowRange()[elementIndex]; char sense = getRowSense()[elementIndex]; double lower = 0, upper = 0; convertSenseToBound(sense, rhs, range, lower, upper); if (upper != elementValue) { convertBoundToSense(lower, elementValue, sense, rhs, range); setRowType(elementIndex, sense, rhs, range); // freeCachedResults(); --- invoked in setRowType() } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setRowBounds(int elementIndex, double lower, double upper) { double rhs, range; char sense; convertBoundToSense(lower, upper, sense, rhs, range); setRowType(elementIndex, sense, rhs, range); // freeCachedRowRim(); --- invoked in setRowType() } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setRowType(int index, char sense, double rightHandSide, double range) { if (isDataLoaded()) { int mindex[1] = { index }; char qrtype[1] = { sense }; double rhs[1] = { rightHandSide }; double rng[1] = { range }; XPRS_CHECKED(XPRSchgrowtype, (prob_, 1, mindex, qrtype)); XPRS_CHECKED(XPRSchgrhs, (prob_, 1, mindex, rhs)); // range is properly defined only for range-type rows, so we call XPRSchgrhsrange only for ranged rows if (sense == 'R') XPRS_CHECKED(XPRSchgrhsrange, (prob_, 1, mindex, rng)); freeCachedResults(); } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { OsiSolverInterface::setRowSetBounds(indexFirst, indexLast, boundList); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList) { OsiSolverInterface::setRowSetTypes(indexFirst, indexLast, senseList, rhsList, rangeList); } //############################################################################# void OsiXprSolverInterface::setContinuous(int index) { if (isDataLoaded()) { int pstat; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_PRESOLVESTATE, &pstat)); if ((pstat & 6) == 0) { // not presolved char qctype = 'C'; XPRS_CHECKED(XPRSchgcoltype, (prob_, 1, &index, &qctype)); freeCachedResults(); } } } void OsiXprSolverInterface::setInteger(int index) { if (isDataLoaded()) { int pstat; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_PRESOLVESTATE, &pstat)); if ((pstat & 6) == 0) { // not presolved char qctype; if (getColLower()[index] == 0.0 && getColUpper()[index] == 1.0) qctype = 'B'; else qctype = 'I'; XPRS_CHECKED(XPRSchgcoltype, (prob_, 1, &index, &qctype)); freeCachedResults(); } } } void OsiXprSolverInterface::setContinuous(const int *indices, int len) { if (isDataLoaded()) { int pstat; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_PRESOLVESTATE, &pstat)); if ((pstat & 6) == 0) { // not presolved char *qctype = new char[len]; CoinFillN(qctype, len, 'C'); XPRS_CHECKED(XPRSchgcoltype, (prob_, len, const_cast< int * >(indices), qctype)); freeCachedResults(); delete[] qctype; } } } void OsiXprSolverInterface::setInteger(const int *indices, int len) { if (isDataLoaded()) { int pstat; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_PRESOLVESTATE, &pstat)); if ((pstat & 6) == 0) { // not presolved char *qctype = new char[len]; const double *clb = getColLower(); const double *cub = getColUpper(); for (int i = 0; i < len; i++) { if (clb[indices[i]] == 0.0 && cub[indices[i]] == 1.0) qctype[i] = 'B'; else qctype[i] = 'I'; } XPRS_CHECKED(XPRSchgcoltype, (prob_, len, const_cast< int * >(indices), qctype)); freeCachedResults(); delete[] qctype; } } } //############################################################################# void OsiXprSolverInterface::setObjSense(double s) { assert(s == 1.0 || s == -1.0); objsense_ = s; XPRS_CHECKED(XPRSchgobjsense, (prob_, (int)s)); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setColSolution(const double *colsol) { freeSolution(); colsol_ = new double[getNumCols()]; for (int i = 0; i < getNumCols(); i++) colsol_[i] = colsol[i]; } //----------------------------------------------------------------------------- void OsiXprSolverInterface::setRowPrice(const double *rowprice) { freeSolution(); rowprice_ = new double[getNumRows()]; for (int i = 0; i < getNumRows(); i++) rowprice_[i] = rowprice[i]; } //############################################################################# // Problem modifying methods (matrix) //############################################################################# void OsiXprSolverInterface::addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj) { if (isDataLoaded()) { freeCachedResults(); int mstart = 0; XPRS_CHECKED(XPRSaddcols, (prob_, 1, vec.getNumElements(), const_cast< double * >(&obj), &mstart, const_cast< int * >(vec.getIndices()), const_cast< double * >(vec.getElements()), const_cast< double * >(&collb), const_cast< double * >(&colub))); } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj) { // freeCachedResults(); for (int i = 0; i < numcols; i++) addCol(*(cols[i]), collb[i], colub[i], obj[i]); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::deleteCols(const int num, const int *columnIndices) { freeCachedResults(); XPRS_CHECKED(XPRSdelcols, (prob_, num, const_cast< int * >(columnIndices))); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub) { // freeCachedResults(); -- will be invoked char sense; double rhs, range; convertBoundToSense(rowlb, rowub, sense, rhs, range); addRow(vec, sense, rhs, range); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng) { freeCachedResults(); int mstart[2] = { 0, vec.getNumElements() }; XPRS_CHECKED(XPRSaddrows, (prob_, 1, vec.getNumElements(), const_cast< char * >(&rowsen), const_cast< double * >(&rowrhs), const_cast< double * >(&rowrng), mstart, const_cast< int * >(vec.getIndices()), const_cast< double * >(vec.getElements()))); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub) { // *FIXME* : must write the method -LL throw CoinError("method is not yet written", "addRows", "OsiXprSolverInterface"); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng) { // *FIXME* : must write the method -LL throw CoinError("method is not yet written", "addRows", "OsiXprSolverInterface"); } //----------------------------------------------------------------------------- void OsiXprSolverInterface::deleteRows(const int num, const int *rowIndices) { freeCachedResults(); XPRS_CHECKED(XPRSdelrows, (prob_, num, const_cast< int * >(rowIndices))); } //############################################################################# // Methods to input a problem //############################################################################# void OsiXprSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { const double inf = getInfinity(); char *rowSense = new char[matrix.getNumRows()]; double *rowRhs = new double[matrix.getNumRows()]; double *rowRange = new double[matrix.getNumRows()]; int i; for (i = matrix.getNumRows() - 1; i >= 0; --i) { double rlb; if (rowlb != NULL) rlb = rowlb[i]; else rlb = -inf; double rub; if (rowub != NULL) rub = rowub[i]; else rub = inf; convertBoundToSense(rlb, rub, rowSense[i], rowRhs[i], rowRange[i]); #if 0 if ( rlb==rub ) { rowSense[i]='E'; rowRhs[i] =rlb; rowRange[i]=0.0; continue; } if ( rlb<=-inf && rub>=inf ) { rowSense[i]='N'; rowRhs[i] =inf; rowRange[i]=0.0; continue; } if ( rlb<=-inf && !(rub>=inf) ) { rowSense[i]='L'; rowRhs[i] =rub; rowRange[i]=0.0; continue; } if ( !(rlb<=-inf) && rub>=inf ) { rowSense[i]='G'; rowRhs[i] =rlb; rowRange[i]=0.0; continue; } if ( !(rlb<=-inf) && !(rub>=inf) ) { rowSense[i]='R'; rowRhs[i] =rub; rowRange[i]=rub-rlb; continue; } #endif } loadProblem(matrix, collb, colub, obj, rowSense, rowRhs, rowRange); delete[] rowSense; delete[] rowRhs; delete[] rowRange; } //----------------------------------------------------------------------------- void OsiXprSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub) { loadProblem(*matrix, collb, colub, obj, rowlb, rowub); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowlb; rowlb = 0; delete[] rowub; rowub = 0; } //----------------------------------------------------------------------------- // #define OSIXPR_ADD_OBJ_ROW void OsiXprSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { freeCachedResults(); int i; char *rsen; double *rrhs; // Set column values to defaults if NULL pointer passed int nc = matrix.getNumCols(); int nr = matrix.getNumRows(); double *clb; double *cub; double *ob; if (collb != NULL) { clb = const_cast< double * >(collb); } else { clb = new double[nc]; for (i = 0; i < nc; i++) clb[i] = 0.0; } if (colub != NULL) cub = const_cast< double * >(colub); else { cub = new double[nc]; for (i = 0; i < nc; i++) cub[i] = XPRS_PLUSINFINITY; } if (obj != NULL) ob = const_cast< double * >(obj); else { ob = new double[nc]; for (i = 0; i < nc; i++) ob[i] = 0.0; } if (rowsen != NULL) rsen = const_cast< char * >(rowsen); else { rsen = new char[nr]; for (i = 0; i < nr; ++i) rsen[i] = 'G'; } if (rowrhs != NULL) rrhs = const_cast< double * >(rowrhs); else { rrhs = new double[nr]; for (i = 0; i < nr; ++i) rrhs[i] = 0.0; } bool freeMatrixRequired = false; CoinPackedMatrix *m = NULL; if (!matrix.isColOrdered()) { m = new CoinPackedMatrix(true, 0, 0); // (mjs) No gaps! m->reverseOrderedCopyOf(matrix); freeMatrixRequired = true; } else { m = const_cast< CoinPackedMatrix * >(&matrix); } // Generate a problem name char probName[256]; sprintf(probName, "Prob%i", osiSerial_); nc = m->getNumCols(); nr = m->getNumRows(); if (getLogFilePtr() != NULL) { fprintf(getLogFilePtr(), "{\n"); fprintf(getLogFilePtr(), " char rowsen[%d];\n", nr); for (i = 0; i < nr; i++) fprintf(getLogFilePtr(), " rowsen[%d]='%c';\n", i, rsen[i]); fprintf(getLogFilePtr(), " double rowrhs[%d];\n", nr); for (i = 0; i < nr; i++) fprintf(getLogFilePtr(), " rowrhs[%d]=%f;\n", i, rrhs[i]); fprintf(getLogFilePtr(), " double rowrng[%d];\n", nr); for (i = 0; i < nr; i++) fprintf(getLogFilePtr(), " rowrng[%d]=%f;\n", i, rowrng ? rowrng[i] : 0.0); fprintf(getLogFilePtr(), " double ob[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " ob[%d]=%f;\n", i, ob[i]); fprintf(getLogFilePtr(), " double clb[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " clb[%d]=%f;\n", i, clb[i]); fprintf(getLogFilePtr(), " double cub[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " cub[%d]=%f;\n", i, cub[i]); fprintf(getLogFilePtr(), " int vectorStarts[%d];\n", nc + 1); for (i = 0; i <= nc; i++) fprintf(getLogFilePtr(), " vectorStarts[%d]=%d;\n", i, m->getVectorStarts()[i]); fprintf(getLogFilePtr(), " int vectorLengths[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " vectorLengths[%d]=%d;\n", i, m->getVectorLengths()[i]); fprintf(getLogFilePtr(), " int indices[%d];\n", m->getVectorStarts()[nc]); for (i = 0; i < m->getVectorStarts()[nc]; i++) fprintf(getLogFilePtr(), " indices[%d]=%d;\n", i, m->getIndices()[i]); fprintf(getLogFilePtr(), " double elements[%d];\n", m->getVectorStarts()[nc]); for (i = 0; i < m->getVectorStarts()[nc]; i++) fprintf(getLogFilePtr(), " elements[%d]=%f;\n", i, m->getElements()[i]); fprintf(getLogFilePtr(), "}\n"); } int iret = XPRSloadlp(prob_, probName, nc, nr, const_cast< char * >(rsen), const_cast< double * >(rrhs), const_cast< double * >(rowrng), ob, const_cast< int * >(m->getVectorStarts()), const_cast< int * >(m->getVectorLengths()), const_cast< int * >(m->getIndices()), const_cast< double * >(m->getElements()), clb, cub); setStrParam(OsiProbName, probName); if (iret != 0) XPRSgetintattrib(prob_, XPRS_ERRORCODE, &iret); assert(iret == 0); char pname[256]; // Problem names can be 200 chars in XPRESS 12 XPRS_CHECKED(XPRSgetprobname, (prob_, pname)); xprProbname_ = pname; if (collb == NULL) delete[] clb; if (colub == NULL) delete[] cub; if (obj == NULL) delete[] ob; if (rowsen == NULL) delete[] rsen; if (rowrhs == NULL) delete[] rrhs; if (freeMatrixRequired) { delete m; } } //----------------------------------------------------------------------------- void OsiXprSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng) { loadProblem(*matrix, collb, colub, obj, rowsen, rowrhs, rowrng); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowsen; rowsen = 0; delete[] rowrhs; rowrhs = 0; delete[] rowrng; rowrng = 0; } //----------------------------------------------------------------------------- void OsiXprSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { const double inf = getInfinity(); char *rowSense = new char[numrows]; double *rowRhs = new double[numrows]; double *rowRange = new double[numrows]; for (int i = numrows - 1; i >= 0; --i) { const double lower = rowlb ? rowlb[i] : -inf; const double upper = rowub ? rowub[i] : inf; convertBoundToSense(lower, upper, rowSense[i], rowRhs[i], rowRange[i]); } loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowSense, rowRhs, rowRange); delete[] rowSense; delete[] rowRhs; delete[] rowRange; } //----------------------------------------------------------------------------- void OsiXprSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { freeCachedResults(); int i; // Set column values to defaults if NULL pointer passed int nc = numcols; int nr = numrows; int *len = new int[nc + 1]; double *clb; double *cub; double *ob; char *rsen; double *rrhs; std::adjacent_difference(start, start + (nc + 1), len); if (collb != NULL) { clb = const_cast< double * >(collb); } else { clb = new double[nc]; for (i = 0; i < nc; i++) clb[i] = 0.0; } if (colub != NULL) cub = const_cast< double * >(colub); else { cub = new double[nc]; for (i = 0; i < nc; i++) cub[i] = XPRS_PLUSINFINITY; } if (obj != NULL) ob = const_cast< double * >(obj); else { ob = new double[nc]; for (i = 0; i < nc; i++) ob[i] = 0.0; } if (rowsen != NULL) rsen = const_cast< char * >(rowsen); else { rsen = new char[nr]; for (i = 0; i < nr; ++i) rsen[i] = 'G'; } if (rowrhs != NULL) rrhs = const_cast< double * >(rowrhs); else { rrhs = new double[nr]; for (i = 0; i < nr; ++i) rrhs[i] = 0.0; } // Generate a problem name char probName[256]; sprintf(probName, "Prob%i", osiSerial_); if (getLogFilePtr() != NULL) { fprintf(getLogFilePtr(), "{\n"); fprintf(getLogFilePtr(), " char rowsen[%d];\n", nr); for (i = 0; i < nr; i++) fprintf(getLogFilePtr(), " rowsen[%d]='%c';\n", i, rsen[i]); fprintf(getLogFilePtr(), " double rowrhs[%d];\n", nr); for (i = 0; i < nr; i++) fprintf(getLogFilePtr(), " rowrhs[%d]=%f;\n", i, rrhs[i]); fprintf(getLogFilePtr(), " double rowrng[%d];\n", nr); for (i = 0; i < nr; i++) fprintf(getLogFilePtr(), " rowrng[%d]=%f;\n", i, rowrng ? rowrng[i] : 0.0); fprintf(getLogFilePtr(), " double ob[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " ob[%d]=%f;\n", i, ob[i]); fprintf(getLogFilePtr(), " double clb[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " clb[%d]=%f;\n", i, clb[i]); fprintf(getLogFilePtr(), " double cub[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " cub[%d]=%f;\n", i, cub[i]); fprintf(getLogFilePtr(), " int vectorStarts[%d];\n", nc + 1); for (i = 0; i <= nc; i++) fprintf(getLogFilePtr(), " vectorStarts[%d]=%d;\n", i, start[i]); fprintf(getLogFilePtr(), " int vectorLengths[%d];\n", nc); for (i = 0; i < nc; i++) fprintf(getLogFilePtr(), " vectorLengths[%d]=%d;\n", i, len[i + 1]); fprintf(getLogFilePtr(), " int indices[%d];\n", start[nc]); for (i = 0; i < start[nc]; i++) fprintf(getLogFilePtr(), " indices[%d]=%d;\n", i, index[i]); fprintf(getLogFilePtr(), " double elements[%d];\n", start[nc]); for (i = 0; i < start[nc]; i++) fprintf(getLogFilePtr(), " elements[%d]=%f;\n", i, value[i]); fprintf(getLogFilePtr(), "}\n"); } int iret = XPRSloadlp(prob_, probName, nc, nr, const_cast< char * >(rsen), const_cast< double * >(rrhs), const_cast< double * >(rowrng), ob, const_cast< int * >(start), const_cast< int * >(len + 1), const_cast< int * >(index), const_cast< double * >(value), clb, cub); setStrParam(OsiProbName, probName); if (iret != 0) XPRSgetintattrib(prob_, XPRS_ERRORCODE, &iret); assert(iret == 0); char pname[256]; // Problem names can be 200 chars in XPRESS 12 XPRS_CHECKED(XPRSgetprobname, (prob_, pname)); xprProbname_ = pname; if (collb == NULL) delete[] clb; if (colub == NULL) delete[] cub; if (obj == NULL) delete[] ob; if (rowsen == NULL) delete[] rsen; if (rowrhs == NULL) delete[] rrhs; delete[] len; } //----------------------------------------------------------------------------- // Read mps files //----------------------------------------------------------------------------- int OsiXprSolverInterface::readMps(const char *filename, const char *extension) { #if 0 if (getLogFilePtr()!=NULL) { fprintf(getLogFilePtr(),"{\n"); fprintf(getLogFilePtr()," XPRSreadprob(prob_,\"%s\");\n",filename); fprintf(getLogFilePtr()," int namlen;\n"); fprintf(getLogFilePtr()," XPRSgetintcontrol(prob_,XPRS_NAMELENGTH,&namlen);\n"); fprintf(getLogFilePtr()," namlen *= 8;\n"); } // Read Mps file. // XPRESS generates its own file extensions, so we ignore any supplied. int iret = XPRSreadprob(prob_,filename); if ( iret != 0 ) XPRSgetintattrib(prob_,XPRS_ERRORCODE, &iret); assert( iret == 0 ); // Get length of Mps names int namlen; XPRSgetintattrib(prob_,XPRS_NAMELENGTH, &namlen); namlen *= 8; if (getLogFilePtr()!=NULL) { fprintf(getLogFilePtr()," char objRowName[%d],rowName[%d];\n",namlen,namlen); fprintf(getLogFilePtr()," XPRSgetstrcontrol(prob_,XPRS_MPSOBJNAME, objRowName);\n"); fprintf(getLogFilePtr()," int nr;\n"); fprintf(getLogFilePtr()," XPRSsetintcontrol(prob_,XPRS_ROWS, &nr);"); } // Allocate space to hold row names. char * objRowName = new char[namlen+1]; char * rowName = new char[namlen+1]; // Get name of objective row. // If "" returned, then first N row is objective row XPRSgetstrcontrol(prob_,XPRS_MPSOBJNAME,objRowName); // Get number of rows int nr; XPRSgetintattrib(prob_,XPRS_ROWS, &nr); if (getLogFilePtr()!=NULL) { fprintf(getLogFilePtr()," char rs[%d];\n",nr); fprintf(getLogFilePtr()," XPRSgetrowtype(prob_,rs, 0, %d);\n",nr-1); } // Get row sense. char * rs = new char[nr]; XPRSgetrowtype(prob_,rs, 0, nr - 1); // Loop once for each row looking for objective row int i; for ( i=0; i 0 && newnz > 0) { XPRS_CHECKED(XPRSsetintcontrol, (prob_, XPRS_EXTRAROWS, newrows)); XPRS_CHECKED(XPRSsetintcontrol, (prob_, XPRS_EXTRAELEMS, newnz)); } } //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiSolverInterface * OsiXprSolverInterface::clone(bool copyData) const { return (new OsiXprSolverInterface(*this)); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiXprSolverInterface:: OsiXprSolverInterface(const OsiXprSolverInterface &source) : OsiSolverInterface(source) , prob_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) , colupper_(NULL) , collower_(NULL) , rowupper_(NULL) , rowlower_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , objcoeffs_(NULL) , objsense_(source.objsense_) , colsol_(NULL) , rowsol_(NULL) , rowact_(NULL) , rowprice_(NULL) , colprice_(NULL) , ivarind_(NULL) , ivartype_(NULL) , vartype_(NULL) , domipstart(false) { incrementInstanceCounter(); xprProbname_ = ""; gutsOfConstructor(); gutsOfCopy(source); // Other values remain NULL until requested } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiXprSolverInterface::~OsiXprSolverInterface() { gutsOfDestructor(); XPRSdestroyprob(prob_); decrementInstanceCounter(); } //------------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiXprSolverInterface & OsiXprSolverInterface::operator=(const OsiXprSolverInterface &rhs) { if (this != &rhs) { OsiSolverInterface::operator=(rhs); osiSerial_++; // even though numInstances_ doesn't change gutsOfDestructor(); gutsOfCopy(rhs); } return *this; } //############################################################################# // Applying cuts //############################################################################# void OsiXprSolverInterface::applyColCut(const OsiColCut &cc) { const double *collower = getColLower(); const double *colupper = getColUpper(); const CoinPackedVector &lbs = cc.lbs(); const CoinPackedVector &ubs = cc.ubs(); int *index = new int[lbs.getNumElements() + ubs.getNumElements()]; char *btype = new char[lbs.getNumElements() + ubs.getNumElements()]; double *value = new double[lbs.getNumElements() + ubs.getNumElements()]; int i, nbds; for (i = nbds = 0; i < lbs.getNumElements(); i++, nbds++) { index[nbds] = lbs.getIndices()[i]; btype[nbds] = 'L'; value[nbds] = (collower[index[nbds]] > lbs.getElements()[i]) ? collower[index[nbds]] : lbs.getElements()[i]; } for (i = 0; i < ubs.getNumElements(); i++, nbds++) { index[nbds] = ubs.getIndices()[i]; btype[nbds] = 'U'; value[nbds] = (colupper[index[nbds]] < ubs.getElements()[i]) ? colupper[index[nbds]] : ubs.getElements()[i]; } if (getLogFilePtr() != NULL) { fprintf(getLogFilePtr(), "{\n"); fprintf(getLogFilePtr(), " int index[%d];\n", nbds); fprintf(getLogFilePtr(), " char btype[%d];\n", nbds); fprintf(getLogFilePtr(), " double value[%d];\n", nbds); for (i = 0; i < nbds; i++) { fprintf(getLogFilePtr(), " index[%d]=%d;\n", i, index[i]); fprintf(getLogFilePtr(), " btype[%d]='%c';\n", i, btype[i]); fprintf(getLogFilePtr(), " value[%d]=%f;\n", i, value[i]); } fprintf(getLogFilePtr(), "}\n"); } XPRS_CHECKED(XPRSchgbounds, (prob_, nbds, index, btype, value)); delete[] index; delete[] btype; delete[] value; freeCachedResults(); // delete [] colupper_; colupper_ = NULL; // delete [] collower_; collower_ = NULL; } //----------------------------------------------------------------------------- void OsiXprSolverInterface::applyRowCut(const OsiRowCut &rowCut) { const CoinPackedVector &row = rowCut.row(); int start[2] = { 0, row.getNumElements() }; char sense = rowCut.sense(); double rhs = rowCut.rhs(); double r = rowCut.range(); if (getLogFilePtr() != NULL) { int i; fprintf(getLogFilePtr(), "{\n"); fprintf(getLogFilePtr(), " char sense = '%c';\n", sense); fprintf(getLogFilePtr(), " double rhs = '%f';\n", rhs); fprintf(getLogFilePtr(), " double r = '%f';\n", r); fprintf(getLogFilePtr(), " int start[2] = {0,%d};\n", start[1]); fprintf(getLogFilePtr(), " int indices[%d];\n", row.getNumElements()); fprintf(getLogFilePtr(), " double elements[%d];\n", row.getNumElements()); for (i = 0; i < row.getNumElements(); i++) { fprintf(getLogFilePtr(), " indices[%d]=%d;\n", i, row.getIndices()[i]); fprintf(getLogFilePtr(), " elements[%d]=%f;\n", i, row.getElements()[i]); } fprintf(getLogFilePtr(), "\n"); } // In XPRESS XPRSaddrows(prob_) prototype, indices and elements should be const, but // they're not. int rc; rc = XPRSaddrows(prob_, 1, row.getNumElements(), &sense, &rhs, &r, start, const_cast< int * >(row.getIndices()), const_cast< double * >(row.getElements())); assert(rc == 0); freeCachedResults(); } //############################################################################# // Private methods //############################################################################# void OsiXprSolverInterface::gutsOfCopy(const OsiXprSolverInterface &source) { if (source.xprProbname_ != "") { // source has data std::ostringstream pname; pname << xprProbname_ << "#" << osiSerial_ << '\0'; xprProbname_ = pname.str(); // sprintf(xprProbname_, "%s#%d", source.xprProbname_, osiSerial_); // std::cout << "Problem " << xprProbname_ << " copied to matrix "; XPRS_CHECKED(XPRScopyprob, (prob_, source.prob_, xprProbname_.c_str())); XPRS_CHECKED(XPRScopycontrols, (prob_, source.prob_)); /* if the callbacks are used, a XPRScopycallbacks needs to be added */ } } //------------------------------------------------------------------- void OsiXprSolverInterface::gutsOfConstructor() { XPRS_CHECKED(XPRScreateprob, (&prob_)); XPRS_CHECKED(XPRSsetcbmessage, (prob_, OsiXprMessageCallback, messageHandler())); /* always create an empty problem to initialize all data structures * since the user had no chance to pass in his own message handler, we turn off the output for the following operation */ int outputlog; XPRS_CHECKED(XPRSgetintcontrol, (prob_, XPRS_OUTPUTLOG, &outputlog)); XPRS_CHECKED(XPRSsetintcontrol, (prob_, XPRS_OUTPUTLOG, 0)); int istart = 0; XPRS_CHECKED(XPRSloadlp, (prob_, "empty", 0, 0, NULL, NULL, NULL, NULL, &istart, NULL, NULL, NULL, NULL, NULL)); XPRS_CHECKED(XPRSchgobjsense, (prob_, (int)objsense_)); XPRS_CHECKED(XPRSsetintcontrol, (prob_, XPRS_OUTPUTLOG, outputlog)); //OPEN: only switched off for debugging //XPRS_CHECKED( XPRSsetlogfile, (prob_,"xpress.log") ); // **FIXME** (mjs) Integer problems require solution file or callback to save // optimal solution. The quick fix is to leave the default solutionfile setting, // but implementing a callback would be better. // XPRS_CHECKED( XPRSsetintcontrol, (prob_, XPRS_SOLUTIONFILE,0) ); // XPRS_CHECKED( XPRSsetintcontrol, ( prob_, XPRS_PRESOLVE, 0) ); lastsolvewasmip = false; } //------------------------------------------------------------------- void OsiXprSolverInterface::gutsOfDestructor() { freeCachedResults(); assert(matrixByRow_ == NULL); assert(matrixByCol_ == NULL); assert(colupper_ == NULL); assert(collower_ == NULL); assert(rowupper_ == NULL); assert(rowlower_ == NULL); assert(rowsense_ == NULL); assert(rhs_ == NULL); assert(rowrange_ == NULL); assert(objcoeffs_ == NULL); assert(colsol_ == NULL); assert(rowsol_ == NULL); assert(rowprice_ == NULL); assert(colprice_ == NULL); assert(rowact_ == NULL); assert(vartype_ == NULL); } //------------------------------------------------------------------- void OsiXprSolverInterface::freeSolution() { delete[] colsol_; colsol_ = NULL; delete[] rowsol_; rowsol_ = NULL; delete[] rowact_; rowact_ = NULL; delete[] rowprice_; rowprice_ = NULL; delete[] colprice_; colprice_ = NULL; } //------------------------------------------------------------------- void OsiXprSolverInterface::freeCachedResults() { delete matrixByRow_; matrixByRow_ = NULL; delete matrixByCol_; matrixByCol_ = NULL; delete[] colupper_; colupper_ = NULL; delete[] collower_; collower_ = NULL; delete[] rowupper_; rowupper_ = NULL; delete[] rowlower_; rowlower_ = NULL; delete[] rowsense_; rowsense_ = NULL; delete[] rhs_; rhs_ = NULL; delete[] rowrange_; rowrange_ = NULL; delete[] objcoeffs_; objcoeffs_ = NULL; freeSolution(); delete[] ivarind_; ivarind_ = NULL; delete[] ivartype_; ivartype_ = NULL; delete[] vartype_; vartype_ = NULL; } //------------------------------------------------------------------- // Set up lists of integer variables //------------------------------------------------------------------- int OsiXprSolverInterface::getNumIntVars() const { int nintvars = 0, nsets = 0; if (isDataLoaded()) { XPRS_CHECKED(XPRSgetglobal, (prob_, &nintvars, &nsets, NULL, NULL, NULL, NULL, NULL, NULL, NULL)); } return nintvars; } void OsiXprSolverInterface::getVarTypes() const { int nintvars = getNumIntVars(); int nsets; int ncols = getNumCols(); if (vartype_ == NULL && nintvars > 0) { if (getLogFilePtr() != NULL) { fprintf(getLogFilePtr(), "{\n"); fprintf(getLogFilePtr(), " int nintvars = %d;\n", nintvars); fprintf(getLogFilePtr(), " int nsets;\n"); fprintf(getLogFilePtr(), " char ivartype[%d];\n", nintvars); fprintf(getLogFilePtr(), " char ivarind[%d];\n", nintvars); fprintf(getLogFilePtr(), "}\n"); } ivartype_ = new char[nintvars]; ivarind_ = new int[nintvars]; XPRS_CHECKED(XPRSgetglobal, (prob_, &nintvars, &nsets, ivartype_, ivarind_, NULL, NULL, NULL, NULL, NULL)); // Currently, only binary and integer vars are supported. vartype_ = new char[ncols]; int i, j; for (i = j = 0; j < ncols; j++) { if (i < nintvars && j == ivarind_[i]) { vartype_[j] = ivartype_[i]; i++; } else vartype_[j] = 'C'; } } } bool OsiXprSolverInterface::isDataLoaded() const { int istatus; XPRS_CHECKED(XPRSgetintattrib, (prob_, XPRS_MIPSTATUS, &istatus)); istatus &= XPRS_MIP_NOT_LOADED; return istatus == 0; } //############################################################################# /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiXpr/Makefile.in0000644000175200017520000005553213200225426015673 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = src/OsiXpr DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiXpr_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) \ @DEPENDENCY_LINKING_TRUE@ ../Osi/libOsi.la \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) am_libOsiXpr_la_OBJECTS = OsiXprSolverInterface.lo libOsiXpr_la_OBJECTS = $(am_libOsiXpr_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiXpr_la_SOURCES) DIST_SOURCES = $(libOsiXpr_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiXpr # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiXpr.la # List all source files for this library, including headers libOsiXpr_la_SOURCES = \ OsiXprSolverInterface.cpp OsiXprSolverInterface.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiXpr_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(XPRLIB) # This is for libtool (on Windows) libOsiXpr_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. # "top_srcdir" refers to the basic directory for the main package that is # being compiled. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ -I`$(CYGPATH_W) $(XPRINCDIR)` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiXprSolverInterface.hpp 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiXpr/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiXpr/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 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiXpr.la: $(libOsiXpr_la_OBJECTS) $(libOsiXpr_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiXpr_la_LDFLAGS) $(libOsiXpr_la_OBJECTS) $(libOsiXpr_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiXprSolverInterface.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: 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: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags 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-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ 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 uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # 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: DyLP-1.10.4/Osi/src/OsiXpr/osi-xpress-uninstalled.pc.in0000644000175200017520000000044011507670402021205 0ustar coincoinprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiXpr Name: OsiXpress Description: COIN-OR Open Solver Interface for Xpress URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiXpr.la @XPRLIB@ Cflags: -I@abs_source_dir@/src/OsiXpr -I@XPRINCDIR@ Requires: osi DyLP-1.10.4/Osi/src/OsiXpr/osi-xpress.pc.in0000644000175200017520000000046711510106235016666 0ustar coincoinprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiXpress Description: COIN-OR Open Solver Interface for Xpress URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiXpr @XPRLIB@ Cflags: -I${includedir} -I@XPRINCDIR@ Requires: osi DyLP-1.10.4/Osi/src/OsiXpr/OsiXprSolverInterface.hpp0000644000175200017520000007106413414504254020603 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiXprSolverInterface_H #define OsiXprSolverInterface_H #include #include #include "OsiSolverInterface.hpp" typedef struct xo_prob_struct *XPRSprob; //############################################################################# /** XPRESS-MP Solver Interface Instantiation of OsiSolverInterface for XPRESS-MP */ class OsiXprSolverInterface : virtual public OsiSolverInterface { friend void OsiXprSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); public: /**@name Solve methods */ //@{ /// Solve initial LP relaxation virtual void initialSolve(); /// Resolve an LP relaxation after problem modification virtual void resolve(); /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound(); //@} /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. */ //@{ // Set an integer parameter bool setIntParam(OsiIntParam key, int value); // Set an double parameter bool setDblParam(OsiDblParam key, double value); // Set a string parameter bool setStrParam(OsiStrParam key, const std::string &value); // Get an integer parameter bool getIntParam(OsiIntParam key, int &value) const; // Get an double parameter bool getDblParam(OsiDblParam key, double &value) const; // Get a string parameter bool getStrParam(OsiStrParam key, std::string &value) const; // Set mipstart option (pass column solution to XPRESS before MIP start) void setMipStart(bool value) { domipstart = value; } // Get mipstart option value bool getMipStart() const { return domipstart; } //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there a numerical difficulties? virtual bool isAbandoned() const; /// Is optimality proven? virtual bool isProvenOptimal() const; /// Is primal infeasiblity proven? virtual bool isProvenPrimalInfeasible() const; /// Is dual infeasiblity proven? virtual bool isProvenDualInfeasible() const; /// Is the given primal objective limit reached? virtual bool isPrimalObjectiveLimitReached() const; /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const; //@} //--------------------------------------------------------------------------- /**@name WarmStart related methods */ //@{ /// Get empty warm start object CoinWarmStart *getEmptyWarmStart() const; /// Get warmstarting information virtual CoinWarmStart *getWarmStart() const; /** Set warmstarting information. Return true/false depending on whether the warmstart information was accepted or not. */ virtual bool setWarmStart(const CoinWarmStart *warmstart); //@} //--------------------------------------------------------------------------- /**@name Hotstart related methods (primarily used in strong branching).
The user can create a hotstart (a snapshot) of the optimization process then reoptimize over and over again always starting from there.
NOTE: between hotstarted optimizations only bound changes are allowed. */ //@{ /// Create a hotstart point of the optimization process virtual void markHotStart(); /// Optimize starting from the hotstart virtual void solveFromHotStart(); /// Delete the snapshot virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem information methods These methods call the solver's query routines to return information about the problem referred to by the current object. Querying a problem that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /**@name Methods related to querying the input data */ //@{ /// Get number of columns virtual int getNumCols() const; /// Get number of rows virtual int getNumRows() const; /// Get number of nonzero elements virtual int getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds virtual const double *getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds virtual const double *getColUpper() const; /** Get pointer to array[getNumRows()] of row constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ virtual const char *getRowSense() const; /** Get pointer to array[getNumRows()] of rows right-hand sides
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ virtual const double *getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges.
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
*/ virtual const double *getRowRange() const; /// Get pointer to array[getNumRows()] of row lower bounds virtual const double *getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds virtual const double *getRowUpper() const; /// Get pointer to array[getNumCols()] of objective function coefficients virtual const double *getObjCoefficients() const; /// Get objective function sense (1 for min (default), -1 for max) virtual double getObjSense() const; /// Return true if variable is continuous virtual bool isContinuous(int colIndex) const; #if 0 /// Return true if variable is binary virtual bool isBinary(int colIndex) const; /** Return true if column is integer. Note: This function returns true if the the column is binary or a general integer. */ virtual bool isInteger(int colIndex) const; /// Return true if variable is general integer virtual bool isIntegerNonBinary(int colIndex) const; /// Return true if variable is binary and not fixed at either bound virtual bool isFreeBinary(int colIndex) const; #endif /// Get pointer to row-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByRow() const; /// Get pointer to column-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByCol() const; /// Get solver's value for infinity virtual double getInfinity() const; //@} /**@name Methods related to querying the solution */ //@{ /// Get pointer to array[getNumCols()] of primal solution vector virtual const double *getColSolution() const; /// Get pointer to array[getNumRows()] of dual prices virtual const double *getRowPrice() const; /// Get a pointer to array[getNumCols()] of reduced costs virtual const double *getReducedCost() const; /** Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector */ virtual const double *getRowActivity() const; /// Get objective function value virtual double getObjValue() const; /** Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver. */ virtual int getIterationCount() const; /** Get as many dual rays as the solver can provide. (In case of proven primal infeasibility there should be at least one.) The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumRows() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getDualRays(int maxNumRays, bool fullRay = false) const; /** Get as many primal rays as the solver can provide. (In case of proven dual infeasibility there should be at least one.) NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumCols() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getPrimalRays(int maxNumRays) const; #if 0 /** Get vector of indices of solution which are integer variables presently at fractional values */ virtual OsiVectorInt getFractionalIndices(const double etol=1.e-05) const; #endif //@} //@} //--------------------------------------------------------------------------- /**@name Problem modifying methods */ //@{ //------------------------------------------------------------------------- /**@name Changing bounds on variables and constraints */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff(int elementIndex, double elementValue); /** Set a single column lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setColLower(int elementIndex, double elementValue); /** Set a single column upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setColUpper(int elementIndex, double elementValue); /** Set a single column lower and upper bound
The default implementation just invokes setColLower() and setColUpper() */ virtual void setColBounds(int elementIndex, double lower, double upper); /** Set the bounds on a number of columns simultaneously
The default implementation just invokes setColLower() and setColUpper() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the variables whose either bound changes @param boundList the new lower/upper bound pairs for the variables */ virtual void setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set a single row lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setRowLower(int elementIndex, double elementValue); /** Set a single row upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setRowUpper(int elementIndex, double elementValue); /** Set a single row lower and upper bound
The default implementation just invokes setRowLower() and setRowUpper() */ virtual void setRowBounds(int elementIndex, double lower, double upper); /** Set the type of a single row
*/ virtual void setRowType(int index, char sense, double rightHandSide, double range); /** Set the bounds on a number of rows simultaneously
The default implementation just invokes setRowLower() and setRowUpper() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the constraints */ virtual void setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set the type of a number of rows simultaneously
The default implementation just invokes setRowType() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the constraints whose any characteristics changes @param senseList the new senses @param rhsList the new right hand sides @param rangeList the new ranges */ virtual void setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList); //@} //------------------------------------------------------------------------- /**@name Integrality related changing methods */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index); /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index); /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int *indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int *indices, int len); //@} //------------------------------------------------------------------------- /// Set objective function sense (1 for min (default), -1 for max,) virtual void setObjSense(double s); /** Set the primal solution column values colsol[numcols()] is an array of values of the problem column variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of colsol() until changed by another call to setColsol() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double *colsol); /** Set dual solution vector rowprice[numrows()] is an array of values of the problem row dual variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of rowprice() until changed by another call to setRowprice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double *rowprice); //------------------------------------------------------------------------- /**@name Methods to expand a problem.
Note that if a column is added then by default it will correspond to a continuous variable. */ //@{ /** */ virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj); /** */ virtual void addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj); /** */ virtual void deleteCols(const int num, const int *colIndices); /** */ virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub); /** */ virtual void addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng); /** */ virtual void deleteRows(const int num, const int *rowIndices); #if 0 //----------------------------------------------------------------------- /** Apply a collection of cuts.
Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.numberIneffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.numberInconsistent() -- number of invalid cuts
  • ReturnCode.numberInconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.numberInfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.numberApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == numberIneffective() + numberInconsistent() + numberInconsistentWrtIntegerModel() + numberInfeasible() + nubmerApplied()
*/ virtual ApplyCutsReturnCode applyCuts(const OsiCuts & cs, double effectivenessLb = 0.0); //@} //@} #endif //--------------------------------------------------------------------------- /**@name Methods to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by lower and upper bounds). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub); /** Load in an problem by copying the arguments (the constraints on the rows are given by sense/rhs/range triplets). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by sense/rhs/range triplets). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); /** Read an mps file from the given filename */ virtual int readMps(const char *filename, const char *extension = "mps"); /** Write the problem into an mps file of the given filename. If objSense is non zero then -1.0 forces the code to write a maximization objective and +1.0 to write a minimization one. If 0.0 then solver can do what it wants */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense = 0.0) const; //@} /**@name Message handling */ //@{ /** Pass in a message handler It is the client's responsibility to destroy a message handler installed by this routine; it will not be destroyed when the solver interface is destroyed. */ void passInMessageHandler(CoinMessageHandler *handler); //@} //--------------------------------------------------------------------------- /**@name XPRESS specific public interfaces */ //@{ /**@name Static instance counter methods */ //@{ /** XPRESS has a context that must be created prior to all other XPRESS calls. This method:
  • Increments by 1 the number of uses of the XPRESS environment.
  • Creates the XPRESS context when the number of uses is changed to 1 from 0.
*/ static void incrementInstanceCounter(); /** XPRESS has a context that should be deleted after XPRESS calls. This method:
  • Decrements by 1 the number of uses of the XPRESS environment.
  • Deletes the XPRESS context when the number of uses is change to 0 from 1.
*/ static void decrementInstanceCounter(); /** Return the number of instances of instantiated objects using XPRESS services. */ static unsigned int getNumInstances(); /** Return a pointer to the XPRESS problem */ XPRSprob getLpPtr() { return prob_; } //@} /// Return XPRESS-MP Version number static int version(); /**@name Log File */ //@{ static int iXprCallCount_; /// Get logfile FILE * static FILE *getLogFilePtr(); /**Set logfile name. The logfile is an attempt to capture the calls to Xpress functions for debugging. */ static void setLogFileName(const char *filename); //@} //@} /**@name Constructors and destructors */ //@{ /// Default Constructor OsiXprSolverInterface(int newrows = 50, int newnz = 100); /// Clone virtual OsiSolverInterface *clone(bool copyData = true) const; /// Copy constructor OsiXprSolverInterface(const OsiXprSolverInterface &); /// Assignment operator OsiXprSolverInterface &operator=(const OsiXprSolverInterface &rhs); /// Destructor virtual ~OsiXprSolverInterface(); //@} protected: /**@name Protected methods */ //@{ /// Apply a row cut. Return true if cut was applied. virtual void applyRowCut(const OsiRowCut &rc); /** Apply a column cut (bound adjustment). Return true if cut was applied. */ virtual void applyColCut(const OsiColCut &cc); //@} private: /**@name Private static class data */ //@{ /// Name of the logfile static const char *logFileName_; /// The FILE* to the logfile static FILE *logFilePtr_; /// Number of live problem instances static unsigned int numInstances_; /// Counts calls to incrementInstanceCounter() static unsigned int osiSerial_; //@} /**@name Private methods */ //@{ /// The real work of a copy constructor (used by copy and assignment) void gutsOfCopy(const OsiXprSolverInterface &source); /// The real work of a constructor (used by construct and assignment) void gutsOfConstructor(); /// The real work of a destructor (used by copy and assignment) void gutsOfDestructor(); /// Destroy cached copy of solution data (whenever it changes) void freeSolution(); /** Destroy cached copies of problem and solution data (whenever they change) */ void freeCachedResults(); /// Number of integer variables in the problem int getNumIntVars() const; /**@name Methods to support for XPRESS-MP multiple matrix facility */ //@{ /// Build cached copy of variable types void getVarTypes() const; /** Save the current problem in XPRESS (if necessary) and make this problem current (restore if necessary). */ void activateMe() const; /** Save and restore are necessary if there is data associated with this problem. Also, queries to a problem with no data should respond sensibly; XPRESS query results are undefined. */ bool isDataLoaded() const; //@} //@} /**@name Private member data */ //@{ /**@name Data to support for XPRESS-MP multiple matrix facility */ //@{ mutable XPRSprob prob_; /// XPRESS problem name (should be unique for each saved problem) mutable std::string xprProbname_; //@} /**@name Cached copies of XPRESS-MP problem data */ //@{ /** Pointer to row-wise copy of problem matrix coefficients.
Note that XPRESS keeps the objective row in the problem matrix, so row indices and counts are adjusted accordingly. */ mutable CoinPackedMatrix *matrixByRow_; mutable CoinPackedMatrix *matrixByCol_; /// Pointer to dense vector of structural variable upper bounds mutable double *colupper_; /// Pointer to dense vector of structural variable lower bounds mutable double *collower_; /// Pointer to dense vector of slack variable upper bounds mutable double *rowupper_; /// Pointer to dense vector of slack variable lower bounds mutable double *rowlower_; /// Pointer to dense vector of row sense indicators mutable char *rowsense_; /// Pointer to dense vector of row right-hand side values mutable double *rhs_; /** Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows) */ mutable double *rowrange_; /// Pointer to dense vector of objective coefficients mutable double *objcoeffs_; /// Sense of objective (1 for min; -1 for max) mutable double objsense_; /// Pointer to dense vector of primal structural variable values mutable double *colsol_; /// Pointer to dense vector of primal slack variable values mutable double *rowsol_; /// Pointer to dense vector of primal slack variable values mutable double *rowact_; /// Pointer to dense vector of dual row variable values mutable double *rowprice_; /// Pointer to dense vector of dual column variable values mutable double *colprice_; /// Pointer to list of indices of XPRESS "global" variables mutable int *ivarind_; /** Pointer to list of global variable types:
  • 'B': binary variable
  • 'I': general integer variable (but might have 0-1 bounds)
  • 'P': partial integer variable (not currently supported)
  • 'S': sem-continuous variable (not currently supported)
*/ mutable char *ivartype_; /** Pointer to dense vector of variable types (as above, or 'C' for continuous) */ mutable char *vartype_; /** Indicates whether the last solve was for a MIP or an LP. */ mutable bool lastsolvewasmip; //@} //@} /// Whether to pass a column solution to XPRESS before starting MIP solve (loadmipsol) bool domipstart; }; //############################################################################# /** A function that tests the methods in the OsiXprSolverInterface class. */ void OsiXprSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiXpr/Makefile.am0000644000175200017520000000350113200225426015647 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 2111 2017-11-07 03:40:06Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiXpr # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiXpr.la # List all source files for this library, including headers libOsiXpr_la_SOURCES = \ OsiXprSolverInterface.cpp OsiXprSolverInterface.hpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiXpr_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(XPRLIB) endif # This is for libtool (on Windows) libOsiXpr_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. # "top_srcdir" refers to the basic directory for the main package that is # being compiled. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ -I`$(CYGPATH_W) $(XPRINCDIR)` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiXprSolverInterface.hpp DyLP-1.10.4/Osi/src/OsiXpr/format-source.sh0000755000175200017520000000100313414504254016741 0ustar coincoin# script to format source code and include (if not included yet), # vim formatting settings (which are automatically loaded by vim) # Haroldo - 2019 for file in *.[ch]pp; do sourceName=`basename $file` echo formatting "$sourceName" clang-format -i -style=file $file # adding vim modeline if not included yet if ! grep -q "/* vi: softtabstop=" $file; then echo '' >> $file echo '/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2' >> $file echo '*/' >> $file fi done DyLP-1.10.4/Osi/src/OsiCpx/0000755000175200017520000000000013434203623013601 5ustar coincoinDyLP-1.10.4/Osi/src/OsiCpx/OsiCpxSolverInterface.hpp0000644000175200017520000007751713414504201020546 0ustar coincoin//----------------------------------------------------------------------------- // name: OSI Interface for CPLEX // author: Tobias Pfender // Konrad-Zuse-Zentrum Berlin (Germany) // email: pfender@zib.de // date: 09/25/2000 // license: this file may be freely distributed under the terms of EPL // comments: please scan this file for '???' and read the comments //----------------------------------------------------------------------------- // Copyright (C) 2000, Tobias Pfender, International Business Machines // Corporation and others. All Rights Reserved. #ifndef OsiCpxSolverInterface_H #define OsiCpxSolverInterface_H #include "OsiSolverInterface.hpp" #include "CoinWarmStartBasis.hpp" #include "OsiColCut.hpp" #include "OsiRowCut.hpp" typedef struct cpxlp *CPXLPptr; typedef struct cpxenv *CPXENVptr; /** CPLEX Solver Interface Instantiation of OsiCpxSolverInterface for CPLEX */ class OsiCpxSolverInterface : virtual public OsiSolverInterface { friend void OsiCpxSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); public: //--------------------------------------------------------------------------- /**@name Solve methods */ //@{ /// Solve initial LP relaxation virtual void initialSolve(); /// Resolve an LP relaxation after problem modification virtual void resolve(); /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound(); //@} //--------------------------------------------------------------------------- /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. */ //@{ // Set an integer parameter bool setIntParam(OsiIntParam key, int value); // Set an double parameter bool setDblParam(OsiDblParam key, double value); // Set a string parameter bool setStrParam(OsiStrParam key, const std::string &value); // Get an integer parameter bool getIntParam(OsiIntParam key, int &value) const; // Get an double parameter bool getDblParam(OsiDblParam key, double &value) const; // Get a string parameter bool getStrParam(OsiStrParam key, std::string &value) const; // Set mipstart option (pass column solution to CPLEX before MIP start) void setMipStart(bool value) { domipstart = value; } // Get mipstart option value bool getMipStart() const { return domipstart; } //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there a numerical difficulties? virtual bool isAbandoned() const; /// Is optimality proven? virtual bool isProvenOptimal() const; /// Is primal infeasiblity proven? virtual bool isProvenPrimalInfeasible() const; /// Is dual infeasiblity proven? virtual bool isProvenDualInfeasible() const; /// Is the given primal objective limit reached? virtual bool isPrimalObjectiveLimitReached() const; /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const; //@} //--------------------------------------------------------------------------- /**@name WarmStart related methods */ //@{ /*! \brief Get an empty warm start object This routine returns an empty CoinWarmStartBasis object. Its purpose is to provide a way to give a client a warm start basis object of the appropriate type, which can resized and modified as desired. */ CoinWarmStart *getEmptyWarmStart() const; /// Get warmstarting information virtual CoinWarmStart *getWarmStart() const; /** Set warmstarting information. Return true/false depending on whether the warmstart information was accepted or not. */ virtual bool setWarmStart(const CoinWarmStart *warmstart); //@} //--------------------------------------------------------------------------- /**@name Hotstart related methods (primarily used in strong branching).
The user can create a hotstart (a snapshot) of the optimization process then reoptimize over and over again always starting from there.
NOTE: between hotstarted optimizations only bound changes are allowed. */ //@{ /// Create a hotstart point of the optimization process virtual void markHotStart(); /// Optimize starting from the hotstart virtual void solveFromHotStart(); /// Delete the snapshot virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem information methods These methods call the solver's query routines to return information about the problem referred to by the current object. Querying a problem that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /**@name Methods related to querying the input data */ //@{ /// Get number of columns virtual int getNumCols() const; /// Get number of rows virtual int getNumRows() const; /// Get number of nonzero elements virtual int getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds virtual const double *getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds virtual const double *getColUpper() const; /** Get pointer to array[getNumRows()] of row constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ virtual const char *getRowSense() const; /** Get pointer to array[getNumRows()] of rows right-hand sides
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ virtual const double *getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges.
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
*/ virtual const double *getRowRange() const; /// Get pointer to array[getNumRows()] of row lower bounds virtual const double *getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds virtual const double *getRowUpper() const; /// Get pointer to array[getNumCols()] of objective function coefficients virtual const double *getObjCoefficients() const; /// Get objective function sense (1 for min (default), -1 for max) virtual double getObjSense() const; /// Return true if column is continuous virtual bool isContinuous(int colNumber) const; #if 0 /// Return true if column is binary virtual bool isBinary(int columnNumber) const; /** Return true if column is integer. Note: This function returns true if the the column is binary or a general integer. */ virtual bool isInteger(int columnNumber) const; /// Return true if column is general integer virtual bool isIntegerNonBinary(int columnNumber) const; /// Return true if column is binary and not fixed at either bound virtual bool isFreeBinary(int columnNumber) const; #endif /// Get pointer to row-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByRow() const; /// Get pointer to column-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByCol() const; /// Get solver's value for infinity virtual double getInfinity() const; //@} /**@name Methods related to querying the solution */ //@{ /// Get pointer to array[getNumCols()] of primal solution vector virtual const double *getColSolution() const; /// Get pointer to array[getNumRows()] of dual prices virtual const double *getRowPrice() const; /// Get a pointer to array[getNumCols()] of reduced costs virtual const double *getReducedCost() const; /** Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector */ virtual const double *getRowActivity() const; /// Get objective function value virtual double getObjValue() const; /** Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver. */ virtual int getIterationCount() const; /** Get as many dual rays as the solver can provide. (In case of proven primal infeasibility there should be at least one.) The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumRows() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getDualRays(int maxNumRays, bool fullRay = false) const; /** Get as many primal rays as the solver can provide. (In case of proven dual infeasibility there should be at least one.) NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumCols() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getPrimalRays(int maxNumRays) const; #if 0 /** Get vector of indices of solution which are integer variables presently at fractional values */ virtual OsiVectorInt getFractionalIndices(const double etol=1.e-05) const; #endif //@} //@} //--------------------------------------------------------------------------- /**@name Problem modifying methods */ //@{ //------------------------------------------------------------------------- /**@name Changing bounds on variables and constraints */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff(int elementIndex, double elementValue); /** Set a a set of objective function coefficients */ virtual void setObjCoeffSet(const int *indexFirst, const int *indexLast, const double *coeffList); using OsiSolverInterface::setColLower; /** Set a single column lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setColLower(int elementIndex, double elementValue); using OsiSolverInterface::setColUpper; /** Set a single column upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setColUpper(int elementIndex, double elementValue); /** Set a single column lower and upper bound
The default implementation just invokes setColLower() and setColUpper() */ virtual void setColBounds(int elementIndex, double lower, double upper); /** Set the bounds on a number of columns simultaneously
The default implementation just invokes setCollower() and setColupper() over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose
either bound changes @param boundList the new lower/upper bound pairs for the variables */ virtual void setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set a single row lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setRowLower(int elementIndex, double elementValue); /** Set a single row upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setRowUpper(int elementIndex, double elementValue); /** Set a single row lower and upper bound
The default implementation just invokes setRowLower() and setRowUpper() */ virtual void setRowBounds(int elementIndex, double lower, double upper); /** Set the type of a single row
*/ virtual void setRowType(int index, char sense, double rightHandSide, double range); /** Set the bounds on a number of rows simultaneously
The default implementation just invokes setRowLower() and setRowUpper() over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the constraints */ virtual void setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set the type of a number of rows simultaneously
The default implementation just invokes setRowType() and over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose type changes @param senseList the new senses @param rhsList the new right hand sides @param rangeList the new ranges */ virtual void setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList); //@} //------------------------------------------------------------------------- /**@name Integrality related changing methods */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index); /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index); /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int *indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int *indices, int len); //@} //------------------------------------------------------------------------- /// Set objective function sense (1 for min (default), -1 for max,) virtual void setObjSense(double s); /** Set the primal solution column values colsol[numcols()] is an array of values of the problem column variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of colsol() until changed by another call to setColsol() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double *colsol); /** Set dual solution vector rowprice[numrows()] is an array of values of the problem row dual variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of rowprice() until changed by another call to setRowprice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double *rowprice); //------------------------------------------------------------------------- /**@name Methods to expand a problem.
Note that if a column is added then by default it will correspond to a continuous variable. */ //@{ using OsiSolverInterface::addCol; /** */ virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj); using OsiSolverInterface::addCols; /** */ virtual void addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj); /** */ virtual void deleteCols(const int num, const int *colIndices); using OsiSolverInterface::addRow; /** */ virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub); /** */ virtual void addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng); using OsiSolverInterface::addRows; /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng); /** */ virtual void deleteRows(const int num, const int *rowIndices); #if 0 // ??? implemented in OsiSolverInterface //----------------------------------------------------------------------- /** Apply a collection of cuts.
Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.numberIneffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.numberInconsistent() -- number of invalid cuts
  • ReturnCode.numberInconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.numberInfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.numberApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == numberIneffective() + numberInconsistent() + numberInconsistentWrtIntegerModel() + numberInfeasible() + nubmerApplied()
*/ virtual ApplyCutsReturnCode applyCuts(const OsiCuts & cs, double effectivenessLb = 0.0); #endif //@} //@} //--------------------------------------------------------------------------- /**@name Methods to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by lower and upper bounds). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub); /** Load in an problem by copying the arguments (the constraints on the rows are given by sense/rhs/range triplets). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by sense/rhs/range triplets). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); using OsiSolverInterface::readMps; /** Read an mps file from the given filename */ virtual int readMps(const char *filename, const char *extension = "mps"); /** Write the problem into an mps file of the given filename. If objSense is non zero then -1.0 forces the code to write a maximization objective and +1.0 to write a minimization one. If 0.0 then solver can do what it wants */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense = 0.0) const; //@} /**@name Message handling */ //@{ /** Pass in a message handler It is the client's responsibility to destroy a message handler installed by this routine; it will not be destroyed when the solver interface is destroyed. */ void passInMessageHandler(CoinMessageHandler *handler); //@} //--------------------------------------------------------------------------- /**@name CPLEX specific public interfaces */ //@{ /** Get pointer to CPLEX model and free all specified cached data entries (combined with logical or-operator '|' ): */ enum keepCachedFlag { /// discard all cached data (default) KEEPCACHED_NONE = 0, /// column information: objective values, lower and upper bounds, variable types KEEPCACHED_COLUMN = 1, /// row information: right hand sides, ranges and senses, lower and upper bounds for row KEEPCACHED_ROW = 2, /// problem matrix: matrix ordered by column and by row KEEPCACHED_MATRIX = 4, /// LP solution: primal and dual solution, reduced costs, row activities KEEPCACHED_RESULTS = 8, /// only discard cached LP solution KEEPCACHED_PROBLEM = KEEPCACHED_COLUMN | KEEPCACHED_ROW | KEEPCACHED_MATRIX, /// keep all cached data (similar to getMutableLpPtr()) KEEPCACHED_ALL = KEEPCACHED_PROBLEM | KEEPCACHED_RESULTS, /// free only cached column and LP solution information FREECACHED_COLUMN = KEEPCACHED_PROBLEM & ~KEEPCACHED_COLUMN, /// free only cached row and LP solution information FREECACHED_ROW = KEEPCACHED_PROBLEM & ~KEEPCACHED_ROW, /// free only cached matrix and LP solution information FREECACHED_MATRIX = KEEPCACHED_PROBLEM & ~KEEPCACHED_MATRIX, /// free only cached LP solution information FREECACHED_RESULTS = KEEPCACHED_ALL & ~KEEPCACHED_RESULTS }; CPXLPptr getLpPtr(int keepCached = KEEPCACHED_NONE); //@{ /// Method to access CPLEX environment pointer CPXENVptr getEnvironmentPtr(); //@} /// return a vector of variable types (continous, binary, integer) const char *getCtype() const; /**@name Constructors and destructor */ //@{ /// Default Constructor OsiCpxSolverInterface(); /// Clone virtual OsiSolverInterface *clone(bool copyData = true) const; /// Copy constructor OsiCpxSolverInterface(const OsiCpxSolverInterface &); /// Assignment operator OsiCpxSolverInterface &operator=(const OsiCpxSolverInterface &rhs); /// Destructor virtual ~OsiCpxSolverInterface(); /// Resets as if default constructor virtual void reset(); //@} /***************************************************************************/ /**@name OsiSimplexInterface methods Cplex adds a slack with coeff +1 in "<=" and "=" constraints, with coeff -1 in ">=", slack being non negative. We switch in order to get a "Clp tableau" where all the slacks have coefficient +1 in the original tableau. If a slack for ">=" is non basic, invB is not changed; column of the slack in the optimal tableau is flipped. If a slack for ">=" is basic, corresp. row of invB is flipped; whole row of the optimal tableau is flipped; then whole column for the slack in opt tableau is flipped. Ranged rows are not supported. It might work, but no garantee is given. Code implemented only for Cplex9.0 and higher, lower version number of Cplex will abort the code. */ //@{ /** Returns 1 if can just do getBInv etc 2 if has all OsiSimplex methods and 0 if it has none */ virtual int canDoSimplexInterface() const; using OsiSolverInterface::enableSimplexInterface; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void enableSimplexInterface(int doingPrimal) {}; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void disableSimplexInterface() {}; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void enableFactorization() const {}; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void disableFactorization() const {}; ///Returns true if a basis is available virtual bool basisIsAvailable() const; /** Returns a basis status of the structural/artificial variables At present as warm start i.e 0: free, 1: basic, 2: upper, 3: lower */ virtual void getBasisStatus(int *cstat, int *rstat) const; ///Get a row of the tableau (slack part in slack if not NULL) virtual void getBInvARow(int row, double *z, double *slack = NULL) const; ///Get a row of the basis inverse virtual void getBInvRow(int row, double *z) const; ///Get a column of the tableau virtual void getBInvACol(int col, double *vec) const; ///Get a column of the basis inverse virtual void getBInvCol(int col, double *vec) const; /** Get indices of the pivot variable in each row (order of indices corresponds to the order of elements in a vector retured by getBInvACol() and getBInvCol()). */ virtual void getBasics(int *index) const; /// switches CPLEX to prob type LP void switchToLP(); /// switches CPLEX to prob type MIP void switchToMIP(); //@} /***************************************************************************/ protected: /// Get LP Pointer for const methods CPXLPptr getMutableLpPtr() const; /// Get Environment Pointer for const methods CPXENVptr getMutableEnvironmentPtr() const; /**@name Protected methods */ //@{ /// Apply a row cut. Return true if cut was applied. virtual void applyRowCut(const OsiRowCut &rc); /** Apply a column cut (bound adjustment). Return true if cut was applied. */ virtual void applyColCut(const OsiColCut &cc); //@} private: /**@name Private static class functions */ //@{ /// resizes coltype_ vector to be able to store at least minsize elements void resizeColType(int minsize); /// frees colsize_ vector void freeColType(); //@} /**@name Private methods */ //@{ /// The real work of a copy constructor (used by copy and assignment) void gutsOfCopy(const OsiCpxSolverInterface &source); /// The real work of the constructor void gutsOfConstructor(); /// The real work of the destructor void gutsOfDestructor(); /// free cached column rim vectors void freeCachedColRim(); /// free cached row rim vectors void freeCachedRowRim(); /// free cached result vectors void freeCachedResults(); /// free cached matrices void freeCachedMatrix(); /// free all cached data (except specified entries, see getLpPtr()) void freeCachedData(int keepCached = KEEPCACHED_NONE); /// free all allocated memory void freeAllMemory(); //@} /**@name Private member data */ //@{ /// CPLEX environment used in this class instance mutable CPXENVptr env_; /// CPLEX model represented by this class instance mutable CPXLPptr lp_; /// Hotstart information int *hotStartCStat_; int hotStartCStatSize_; int *hotStartRStat_; int hotStartRStatSize_; int hotStartMaxIteration_; /**@name Cached information derived from the CPLEX model */ //@{ /// Pointer to objective vector mutable double *obj_; /// Pointer to dense vector of variable lower bounds mutable double *collower_; /// Pointer to dense vector of variable lower bounds mutable double *colupper_; /// Pointer to dense vector of row sense indicators mutable char *rowsense_; /// Pointer to dense vector of row right-hand side values mutable double *rhs_; /// Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows) mutable double *rowrange_; /// Pointer to dense vector of row lower bounds mutable double *rowlower_; /// Pointer to dense vector of row upper bounds mutable double *rowupper_; /// Pointer to primal solution vector mutable double *colsol_; /// Pointer to dual solution vector mutable double *rowsol_; /// Pointer to reduced cost vector mutable double *redcost_; /// Pointer to row activity (slack) vector mutable double *rowact_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByRow_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByCol_; //@} /**@name Additional information needed for storing MIP problems */ //@{ /// Pointer to dense vector of variable types (continous, binary, integer) char *coltype_; /// Size of allocated memory for coltype_ int coltypesize_; /// Stores whether CPLEX' prob type is currently set to MIP mutable bool probtypemip_; /// Whether to pass a column solution to CPLEX before starting MIP solve (copymipstart) bool domipstart; /// Whether to disable use of advanced basis (if given) bool disableadvbasis; //@} }; //############################################################################# /** A function that tests the methods in the OsiCpxSolverInterface class. */ void OsiCpxSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiCpx/Makefile.am0000644000175200017520000000334513200223007015627 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 2110 2017-11-07 03:18:31Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiCpx # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiCpx.la # List all source files for this library, including headers libOsiCpx_la_SOURCES = \ OsiCpxSolverInterface.cpp OsiCpxSolverInterface.hpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiCpx_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(CPXLIB) endif # This is for libtool (on Windows) libOsiCpx_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(CPXINCDIR)` \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiCpxSolverInterface.hpp DyLP-1.10.4/Osi/src/OsiCpx/osi-cplex-uninstalled.pc.in0000644000175200017520000000043611507670402020762 0ustar coincoinprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiCpx Name: OsiCplex Description: COIN-OR Open Solver Interface for CPLEX URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiCpx.la @CPXLIB@ Cflags: -I@abs_source_dir@/src/OsiCpx -I@CPXINCDIR@ Requires: osi DyLP-1.10.4/Osi/src/OsiCpx/osi-cplex.pc.in0000644000175200017520000000046511510106235016434 0ustar coincoinprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiCplex Description: COIN-OR Open Solver Interface for CPLEX URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiCpx @CPXLIB@ Cflags: -I${includedir} -I@CPXINCDIR@ Requires: osi DyLP-1.10.4/Osi/src/OsiCpx/format-source.sh0000755000175200017520000000100313414504201016712 0ustar coincoin# script to format source code and include (if not included yet), # vim formatting settings (which are automatically loaded by vim) # Haroldo - 2019 for file in *.[ch]pp; do sourceName=`basename $file` echo formatting "$sourceName" clang-format -i -style=file $file # adding vim modeline if not included yet if ! grep -q "/* vi: softtabstop=" $file; then echo '' >> $file echo '/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2' >> $file echo '*/' >> $file fi done DyLP-1.10.4/Osi/src/OsiCpx/Makefile.in0000644000175200017520000005537613200223007015653 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = src/OsiCpx DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiCpx_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) \ @DEPENDENCY_LINKING_TRUE@ ../Osi/libOsi.la \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) am_libOsiCpx_la_OBJECTS = OsiCpxSolverInterface.lo libOsiCpx_la_OBJECTS = $(am_libOsiCpx_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiCpx_la_SOURCES) DIST_SOURCES = $(libOsiCpx_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiCpx # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiCpx.la # List all source files for this library, including headers libOsiCpx_la_SOURCES = \ OsiCpxSolverInterface.cpp OsiCpxSolverInterface.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiCpx_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(CPXLIB) # This is for libtool (on Windows) libOsiCpx_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(CPXINCDIR)` \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiCpxSolverInterface.hpp 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiCpx/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiCpx/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 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiCpx.la: $(libOsiCpx_la_OBJECTS) $(libOsiCpx_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiCpx_la_LDFLAGS) $(libOsiCpx_la_OBJECTS) $(libOsiCpx_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiCpxSolverInterface.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: 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: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags 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-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ 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 uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # 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: DyLP-1.10.4/Osi/src/OsiCpx/OsiCpxSolverInterface.cpp0000644000175200017520000034053013433035707020540 0ustar coincoin//----------------------------------------------------------------------------- // name: OSI Interface for CPLEX // author: Tobias Pfender // Konrad-Zuse-Zentrum Berlin (Germany) // email: pfender@zib.de // date: 09/25/2000 // license: this file may be freely distributed under the terms of EPL // comments: please scan this file for '???' and read the comments //----------------------------------------------------------------------------- // Copyright (C) 2000, Tobias Pfender, International Business Machines // Corporation and others. All Rights Reserved. #include #include #include #include #include "CoinPragma.hpp" #include "OsiCpxSolverInterface.hpp" #include "cplex.h" // CPLEX 10.0 removed CPXERR_NO_INT_SOLN #if !defined(CPXERR_NO_INT_SOLN) #define CPXERR_NO_INT_SOLN CPXERR_NO_SOLN #endif // #define DEBUG 1 #ifdef DEBUG #define debugMessage printf #else #define debugMessage \ if (false) \ printf #endif //############################################################################# // A couple of helper functions //############################################################################# inline void freeCacheDouble(double *&ptr) { if (ptr != NULL) { delete[] ptr; ptr = NULL; } } inline void freeCacheChar(char *&ptr) { if (ptr != NULL) { delete[] ptr; ptr = NULL; } } inline void freeCacheMatrix(CoinPackedMatrix *&ptr) { if (ptr != NULL) { delete ptr; ptr = NULL; } } static inline void checkCPXerror(int err, std::string cpxfuncname, std::string osimethod) { if (err != 0) { char s[100]; sprintf(s, "%s returned error %d", cpxfuncname.c_str(), err); #ifdef DEBUG std::cerr << "ERROR: " << s << " (" << osimethod << " in OsiCpxSolverInterface)" << std::endl; #endif throw CoinError(s, osimethod.c_str(), "OsiCpxSolverInterface"); } } static bool incompletemessage = false; static void CPXPUBLIC OsiCpxMessageCallbackPrint(CoinMessageHandler *handler, const char *msg) { /* cplex adds the newlines into their message, while the coin message handler like to add its own newlines * we treat the cases where there is a newline in the beginning or no newline at the end separately * TODO a better way is to scan msg for newlines and to send each line to the handler separately */ if (msg[0] == '\n') { if (incompletemessage) { *handler << CoinMessageEol; incompletemessage = false; } else handler->message(0, "CPX", " ", ' ') << CoinMessageEol; ++msg; if (!*msg) return; } size_t len = strlen(msg); assert(len > 0); if (msg[len - 1] == '\n') { (const_cast< char * >(msg))[len - 1] = '\0'; if (incompletemessage) { *handler << msg << CoinMessageEol; incompletemessage = false; } else handler->message(0, "CPX", msg, ' ') << CoinMessageEol; } else { handler->message(0, "CPX", msg, ' '); incompletemessage = true; } } static void CPXPUBLIC OsiCpxMessageCallbackResultLog(void *handle, const char *msg) { if (!*msg) return; if (handle) { if (((CoinMessageHandler *)handle)->logLevel() >= 1) OsiCpxMessageCallbackPrint((CoinMessageHandler *)handle, msg); } else { printf(msg); } } static void CPXPUBLIC OsiCpxMessageCallbackWarning(void *handle, const char *msg) { if (handle) { if (((CoinMessageHandler *)handle)->logLevel() >= 0) OsiCpxMessageCallbackPrint((CoinMessageHandler *)handle, msg); } else { printf(msg); } } static void CPXPUBLIC OsiCpxMessageCallbackError(void *handle, const char *msg) { if (handle) { OsiCpxMessageCallbackPrint((CoinMessageHandler *)handle, msg); } else { fprintf(stderr, msg); } } void OsiCpxSolverInterface::switchToLP(void) { debugMessage("OsiCpxSolverInterface::switchToLP()\n"); if (probtypemip_) { CPXLPptr lp = getMutableLpPtr(); #if CPX_VERSION >= 800 assert(CPXgetprobtype(env_, lp) == CPXPROB_MILP); #else assert(CPXgetprobtype(env_, lp) == CPXPROB_MIP); #endif int err = CPXchgprobtype(env_, lp, CPXPROB_LP); checkCPXerror(err, "CPXchgprobtype", "switchToLP"); probtypemip_ = false; } } void OsiCpxSolverInterface::switchToMIP(void) { debugMessage("OsiCpxSolverInterface::switchToMIP()\n"); if (!probtypemip_) { CPXLPptr lp = getMutableLpPtr(); int nc = getNumCols(); int *cindarray = new int[nc]; assert(CPXgetprobtype(env_, lp) == CPXPROB_LP); assert(coltype_ != NULL); for (int i = 0; i < nc; ++i) cindarray[i] = i; #if CPX_VERSION >= 800 int err = CPXchgprobtype(env_, lp, CPXPROB_MILP); #else int err = CPXchgprobtype(env_, lp, CPXPROB_MIP); #endif checkCPXerror(err, "CPXchgprobtype", "switchToMIP"); err = CPXchgctype(env_, lp, nc, cindarray, coltype_); checkCPXerror(err, "CPXchgctype", "switchToMIP"); delete[] cindarray; probtypemip_ = true; } } void OsiCpxSolverInterface::resizeColType(int minsize) { debugMessage("OsiCpxSolverInterface::resizeColType()\n"); if (minsize > coltypesize_) { int newcoltypesize = 2 * coltypesize_; if (minsize > newcoltypesize) newcoltypesize = minsize; char *newcoltype = new char[newcoltypesize]; if (coltype_ != NULL) { CoinDisjointCopyN(coltype_, coltypesize_, newcoltype); delete[] coltype_; } coltype_ = newcoltype; coltypesize_ = newcoltypesize; } assert(minsize == 0 || coltype_ != NULL); assert(coltypesize_ >= minsize); } void OsiCpxSolverInterface::freeColType() { debugMessage("OsiCpxSolverInterface::freeColType()\n"); if (coltypesize_ > 0) { delete[] coltype_; coltype_ = NULL; coltypesize_ = 0; } assert(coltype_ == NULL); } //############################################################################# // Solve methods //############################################################################# void OsiCpxSolverInterface::initialSolve() { debugMessage("OsiCpxSolverInterface::initialSolve()\n"); switchToLP(); bool takeHint; OsiHintStrength strength; int algorithm = 0; getHintParam(OsiDoDualInInitial, takeHint, strength); if (strength != OsiHintIgnore) algorithm = takeHint ? -1 : 1; int presolve = 1; getHintParam(OsiDoPresolveInInitial, takeHint, strength); if (strength != OsiHintIgnore) presolve = takeHint ? 1 : 0; CPXLPptr lp = getLpPtr(OsiCpxSolverInterface::FREECACHED_RESULTS); if (presolve) CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_ON); else CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_OFF); // if (messageHandler()->logLevel() == 0) // CPXsetintparam( env_, CPX_PARAM_SCRIND, CPX_OFF ); // else // CPXsetintparam( env_, CPX_PARAM_SCRIND, CPX_ON ); if (messageHandler()->logLevel() == 0) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 0); else if (messageHandler()->logLevel() == 1) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 1); else if (messageHandler()->logLevel() > 1) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 2); CPXsetintparam(env_, CPX_PARAM_ADVIND, !disableadvbasis); double objoffset; double primalobjlimit; double dualobjlimit; getDblParam(OsiObjOffset, objoffset); getDblParam(OsiPrimalObjectiveLimit, primalobjlimit); getDblParam(OsiDualObjectiveLimit, dualobjlimit); if (getObjSense() == +1) { if (primalobjlimit < COIN_DBL_MAX) CPXsetdblparam(env_, CPX_PARAM_OBJLLIM, primalobjlimit + objoffset); if (dualobjlimit > -COIN_DBL_MAX) CPXsetdblparam(env_, CPX_PARAM_OBJULIM, dualobjlimit + objoffset); } else { if (primalobjlimit > -COIN_DBL_MAX) CPXsetdblparam(env_, CPX_PARAM_OBJULIM, primalobjlimit + objoffset); if (dualobjlimit < COIN_DBL_MAX) CPXsetdblparam(env_, CPX_PARAM_OBJLLIM, dualobjlimit + objoffset); } int term; switch (algorithm) { default: case 0: term = CPXlpopt(env_, lp); #if CPX_VERSION >= 800 checkCPXerror(term, "CPXlpopt", "initialSolve"); #endif break; case 1: term = CPXprimopt(env_, lp); #if CPX_VERSION >= 800 checkCPXerror(term, "CPXprimopt", "initialSolve"); #endif break; case -1: term = CPXdualopt(env_, lp); #if CPX_VERSION >= 800 checkCPXerror(term, "CPXdualopt", "initialSolve"); #endif break; } /* If the problem is found infeasible during presolve, resolve it to get a proper term code */ #if CPX_VERSION >= 800 int stat = CPXgetstat(env_, getMutableLpPtr()); if (stat == CPX_STAT_INForUNBD && presolve) { CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_OFF); switch (algorithm) { default: case 0: term = CPXlpopt(env_, lp); checkCPXerror(term, "CPXlpopt", "initialSolve"); break; case 1: term = CPXprimopt(env_, lp); checkCPXerror(term, "CPXprimopt", "initialSolve"); break; case -1: term = CPXdualopt(env_, lp); checkCPXerror(term, "CPXdualopt", "initialSolve"); break; } CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_ON); } #else if (term == CPXERR_PRESLV_INForUNBD && presolve) { CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_OFF); switch (algorithm) { default: case 0: term = CPXlpopt(env_, lp); break; case 1: term = CPXprimopt(env_, lp); break; case -1: term = CPXdualopt(env_, lp); break; } CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_ON); } #endif disableadvbasis = false; } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::resolve() { debugMessage("OsiCpxSolverInterface::resolve()\n"); switchToLP(); bool takeHint; OsiHintStrength strength; int algorithm = 0; getHintParam(OsiDoDualInResolve, takeHint, strength); if (strength != OsiHintIgnore) algorithm = takeHint ? -1 : 1; int presolve = 0; getHintParam(OsiDoPresolveInResolve, takeHint, strength); if (strength != OsiHintIgnore) presolve = takeHint ? 1 : 0; CPXLPptr lp = getLpPtr(OsiCpxSolverInterface::FREECACHED_RESULTS); if (presolve) CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_ON); else CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_OFF); // if (messageHandler()->logLevel() == 0) // CPXsetintparam( env_, CPX_PARAM_SCRIND, CPX_OFF ); // else // CPXsetintparam( env_, CPX_PARAM_SCRIND, CPX_ON ); if (messageHandler()->logLevel() == 0) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 0); else if (messageHandler()->logLevel() == 1) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 1); else if (messageHandler()->logLevel() > 1) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 2); CPXsetintparam(env_, CPX_PARAM_ADVIND, !disableadvbasis); int term; switch (algorithm) { default: case 0: term = CPXlpopt(env_, lp); #if CPX_VERSION >= 800 checkCPXerror(term, "CPXlpopt", "resolve"); #endif break; case 1: term = CPXprimopt(env_, lp); #if CPX_VERSION >= 800 checkCPXerror(term, "CPXprimopt", "resolve"); #endif break; case -1: term = CPXdualopt(env_, lp); #if CPX_VERSION >= 800 checkCPXerror(term, "CPXdualopt", "resolve"); #endif break; } /* If the problem is found infeasible during presolve, resolve it to get a proper term code */ #if CPX_VERSION >= 800 int stat = CPXgetstat(env_, getMutableLpPtr()); if (stat == CPX_STAT_INForUNBD && presolve) { CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_OFF); switch (algorithm) { default: case 0: term = CPXlpopt(env_, lp); checkCPXerror(term, "CPXlpopt", "resolve"); break; case 1: term = CPXprimopt(env_, lp); checkCPXerror(term, "CPXprimopt", "resolve"); break; case -1: term = CPXdualopt(env_, lp); checkCPXerror(term, "CPXdualopt", "resolve"); break; } CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_ON); } #else if (term == CPXERR_PRESLV_INForUNBD && presolve) { CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_OFF); switch (algorithm) { default: case 0: term = CPXlpopt(env_, lp); checkCPXerror(term, "CPXlpopt", "resolve"); break; case 1: term = CPXprimopt(env_, lp); checkCPXerror(term, "CPXprimopt", "resolve"); break; case -1: term = CPXdualopt(env_, lp); checkCPXerror(term, "CPXdualopt", "resolve"); break; } CPXsetintparam(env_, CPX_PARAM_PREIND, CPX_ON); } #endif disableadvbasis = false; } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::branchAndBound() { int term; debugMessage("OsiCpxSolverInterface::branchAndBound()\n"); switchToMIP(); if (colsol_ != NULL && domipstart) { int ncols = getNumCols(); int *ind = new int[ncols]; CoinIotaN(ind, ncols, 0); #if 1 int zero = 0; term = CPXaddmipstarts(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_ALL), 1, ncols, &zero, ind, colsol_, NULL, NULL); checkCPXerror(term, "CPXaddmipstarts", "branchAndBound"); #else /* deprecated */ term = CPXcopymipstart(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_ALL), ncols, ind, colsol_); checkCPXerror(term, "CPXcopymipstart", "branchAndBound"); #endif delete[] ind; CPXsetintparam(env_, CPX_PARAM_ADVIND, CPX_ON); } else CPXsetintparam(env_, CPX_PARAM_ADVIND, CPX_OFF); CPXLPptr lp = getLpPtr(OsiCpxSolverInterface::FREECACHED_RESULTS); // if (messageHandler()->logLevel() == 0) // CPXsetintparam( env_, CPX_PARAM_SCRIND, CPX_OFF ); // else // CPXsetintparam( env_, CPX_PARAM_SCRIND, CPX_ON ); if (messageHandler()->logLevel() == 0) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 0); else if (messageHandler()->logLevel() == 1) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 1); else if (messageHandler()->logLevel() > 1) CPXsetintparam(env_, CPX_PARAM_SIMDISPLAY, 2); term = CPXmipopt(env_, lp); checkCPXerror(term, "CPXmipopt", "branchAndBound"); } //############################################################################# // Parameter related methods //############################################################################# bool OsiCpxSolverInterface::setIntParam(OsiIntParam key, int value) { debugMessage("OsiCpxSolverInterface::setIntParam(%d, %d)\n", key, value); bool retval = false; switch (key) { case OsiMaxNumIteration: retval = (CPXsetintparam(env_, CPX_PARAM_ITLIM, value) == 0); // ??? OsiMaxNumIteration == #Simplex-iterations ??? break; case OsiMaxNumIterationHotStart: if (value >= 0) { hotStartMaxIteration_ = value; retval = true; } else retval = false; break; case OsiNameDiscipline: retval = OsiSolverInterface::setIntParam(key, value); break; case OsiLastIntParam: retval = false; break; default: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OsiCpxSolverInterface::setDblParam(OsiDblParam key, double value) { debugMessage("OsiCpxSolverInterface::setDblParam(%d, %g)\n", key, value); bool retval = false; switch (key) { case OsiDualTolerance: retval = (CPXsetdblparam(env_, CPX_PARAM_EPOPT, value) == 0); // ??? OsiDualTolerance == CPLEX Optimality tolerance ??? break; case OsiPrimalTolerance: retval = (CPXsetdblparam(env_, CPX_PARAM_EPRHS, value) == 0); // ??? OsiPrimalTolerance == CPLEX Feasibility tolerance ??? break; case OsiDualObjectiveLimit: case OsiPrimalObjectiveLimit: case OsiObjOffset: retval = OsiSolverInterface::setDblParam(key, value); break; case OsiLastDblParam: retval = false; break; default: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OsiCpxSolverInterface::setStrParam(OsiStrParam key, const std::string &value) { debugMessage("OsiCpxSolverInterface::setStrParam(%d, %s)\n", key, value.c_str()); bool retval = false; switch (key) { case OsiProbName: OsiSolverInterface::setStrParam(key, value); return retval = true; case OsiSolverName: return false; case OsiLastStrParam: return false; default: return false; } return false; } //----------------------------------------------------------------------------- bool OsiCpxSolverInterface::getIntParam(OsiIntParam key, int &value) const { debugMessage("OsiCpxSolverInterface::getIntParam(%d)\n", key); bool retval = false; switch (key) { case OsiMaxNumIteration: retval = (CPXgetintparam(env_, CPX_PARAM_ITLIM, &value) == 0); // ??? OsiMaxNumIteration == #Simplex-iterations ??? break; case OsiMaxNumIterationHotStart: value = hotStartMaxIteration_; retval = true; break; case OsiNameDiscipline: retval = OsiSolverInterface::getIntParam(key, value); break; case OsiLastIntParam: retval = false; break; default: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OsiCpxSolverInterface::getDblParam(OsiDblParam key, double &value) const { debugMessage("OsiCpxSolverInterface::getDblParam(%d)\n", key); bool retval = false; switch (key) { case OsiDualTolerance: retval = (CPXgetdblparam(env_, CPX_PARAM_EPOPT, &value) == 0); // ??? OsiDualTolerance == CPLEX Optimality tolerance ??? break; case OsiPrimalTolerance: retval = (CPXgetdblparam(env_, CPX_PARAM_EPRHS, &value) == 0); // ??? OsiPrimalTolerance == CPLEX Feasibility tolerance ??? break; case OsiDualObjectiveLimit: case OsiPrimalObjectiveLimit: case OsiObjOffset: retval = OsiSolverInterface::getDblParam(key, value); break; case OsiLastDblParam: retval = false; break; default: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OsiCpxSolverInterface::getStrParam(OsiStrParam key, std::string &value) const { debugMessage("OsiCpxSolverInterface::getStrParam(%d)\n", key); switch (key) { case OsiProbName: OsiSolverInterface::getStrParam(key, value); break; case OsiSolverName: value = "cplex"; break; case OsiLastStrParam: return false; default: return false; } return true; } //############################################################################# // Methods returning info on how the solution process terminated //############################################################################# bool OsiCpxSolverInterface::isAbandoned() const { debugMessage("OsiCpxSolverInterface::isAbandoned()\n"); int stat = CPXgetstat(env_, getMutableLpPtr()); #if CPX_VERSION >= 800 return (stat == 0 || stat == CPX_STAT_NUM_BEST || stat == CPX_STAT_ABORT_USER); #else return (stat == 0 || stat == CPX_NUM_BEST_FEAS || stat == CPX_NUM_BEST_INFEAS || stat == CPX_ABORT_FEAS || stat == CPX_ABORT_INFEAS || stat == CPX_ABORT_CROSSOVER); #endif } bool OsiCpxSolverInterface::isProvenOptimal() const { debugMessage("OsiCpxSolverInterface::isProvenOptimal()\n"); int stat = CPXgetstat(env_, getMutableLpPtr()); #if CPX_VERSION >= 800 return ((probtypemip_ == false && (stat == CPX_STAT_OPTIMAL || stat == CPX_STAT_OPTIMAL_INFEAS)) || (probtypemip_ == true && (stat == CPXMIP_OPTIMAL || stat == CPXMIP_OPTIMAL_TOL))); #else return ((probtypemip_ == false && (stat == CPX_OPTIMAL || stat == CPX_OPTIMAL_INFEAS)) || (probtypemip_ == true && stat == CPXMIP_OPTIMAL)); #endif } bool OsiCpxSolverInterface::isProvenPrimalInfeasible() const { debugMessage("OsiCpxSolverInterface::isProvenPrimalInfeasible()\n"); int stat = CPXgetstat(env_, getMutableLpPtr()); #if CPX_VERSION >= 800 // In CPLEX 8, the return code is with respect // to the original problem, regardless of the algorithm used to solve it // --tkr 7/31/03 return (stat == CPX_STAT_INFEASIBLE); // return (method == CPX_ALG_PRIMAL && stat == CPX_STAT_INFEASIBLE || // method == CPX_ALG_DUAL && stat == CPX_STAT_UNBOUNDED); #else int method = CPXgetmethod(env_, getMutableLpPtr()); return ((method == CPX_ALG_PRIMAL && stat == CPX_INFEASIBLE) || (method == CPX_ALG_DUAL && stat == CPX_UNBOUNDED) || stat == CPX_ABORT_PRIM_INFEAS || stat == CPX_ABORT_PRIM_DUAL_INFEAS); #endif } bool OsiCpxSolverInterface::isProvenDualInfeasible() const { debugMessage("OsiCpxSolverInterface::isProvenDualInfeasible()\n"); int stat = CPXgetstat(env_, getMutableLpPtr()); #if CPX_VERSION >= 800 // In CPLEX 8, the return code is with respect // to the original problem, regardless of the algorithm used to solve it // --tkr 7/31/03 return (stat == CPX_STAT_UNBOUNDED); //return (method == CPX_ALG_PRIMAL && stat == CPX_STAT_UNBOUNDED || // method == CPX_ALG_DUAL && stat == CPX_STAT_INFEASIBLE); #else int method = CPXgetmethod(env_, getMutableLpPtr()); return ((method == CPX_ALG_PRIMAL && stat == CPX_UNBOUNDED) || (method == CPX_ALG_DUAL && stat == CPX_INFEASIBLE) || stat == CPX_ABORT_DUAL_INFEAS || stat == CPX_ABORT_PRIM_DUAL_INFEAS); #endif } bool OsiCpxSolverInterface::isPrimalObjectiveLimitReached() const { debugMessage("OsiCpxSolverInterface::isPrimalObjectiveLimitReached()\n"); int stat = CPXgetstat(env_, getMutableLpPtr()); int method = CPXgetmethod(env_, getMutableLpPtr()); #if CPX_VERSION >= 800 return method == CPX_ALG_PRIMAL && stat == CPX_STAT_ABORT_OBJ_LIM; #else return method == CPX_ALG_PRIMAL && stat == CPX_OBJ_LIM; #endif } bool OsiCpxSolverInterface::isDualObjectiveLimitReached() const { debugMessage("OsiCpxSolverInterface::isDualObjectiveLimitReached()\n"); int stat = CPXgetstat(env_, getMutableLpPtr()); int method = CPXgetmethod(env_, getMutableLpPtr()); #if CPX_VERSION >= 800 return method == CPX_ALG_DUAL && stat == CPX_STAT_ABORT_OBJ_LIM; #else return method == CPX_ALG_DUAL && stat == CPX_OBJ_LIM; #endif } bool OsiCpxSolverInterface::isIterationLimitReached() const { debugMessage("OsiCpxSolverInterface::isIterationLimitReached()\n"); int stat = CPXgetstat(env_, getMutableLpPtr()); #if CPX_VERSION >= 800 return stat == CPX_STAT_ABORT_IT_LIM; #else return stat == CPX_IT_LIM_FEAS || stat == CPX_IT_LIM_INFEAS; #endif } //############################################################################# // WarmStart related methods //############################################################################# CoinWarmStart *OsiCpxSolverInterface::getEmptyWarmStart() const { return (dynamic_cast< CoinWarmStart * >(new CoinWarmStartBasis())); } CoinWarmStart *OsiCpxSolverInterface::getWarmStart() const { debugMessage("OsiCpxSolverInterface::getWarmStart()\n"); if (probtypemip_) return getEmptyWarmStart(); CoinWarmStartBasis *ws = NULL; int numcols = getNumCols(); int numrows = getNumRows(); int *cstat = new int[numcols]; int *rstat = new int[numrows]; char *sense = new char[numrows]; int restat, i; restat = CPXgetsense(env_, getMutableLpPtr(), sense, 0, numrows - 1); if (restat == 0) restat = CPXgetbase(env_, getMutableLpPtr(), cstat, rstat); if (restat == 0) { ws = new CoinWarmStartBasis; ws->setSize(numcols, numrows); for (i = 0; i < numrows; ++i) { switch (rstat[i]) { case CPX_BASIC: ws->setArtifStatus(i, CoinWarmStartBasis::basic); break; case CPX_AT_LOWER: if (sense[i] == 'G') ws->setArtifStatus(i, CoinWarmStartBasis::atUpperBound); else ws->setArtifStatus(i, CoinWarmStartBasis::atLowerBound); break; case CPX_AT_UPPER: if (sense[i] == 'L') ws->setArtifStatus(i, CoinWarmStartBasis::atLowerBound); else ws->setArtifStatus(i, CoinWarmStartBasis::atUpperBound); break; default: // unknown row status delete ws; ws = NULL; goto TERMINATE; } } for (i = 0; i < numcols; ++i) { switch (cstat[i]) { case CPX_BASIC: ws->setStructStatus(i, CoinWarmStartBasis::basic); break; case CPX_AT_LOWER: ws->setStructStatus(i, CoinWarmStartBasis::atLowerBound); break; case CPX_AT_UPPER: ws->setStructStatus(i, CoinWarmStartBasis::atUpperBound); break; case CPX_FREE_SUPER: ws->setStructStatus(i, CoinWarmStartBasis::isFree); break; default: // unknown column status delete ws; ws = NULL; goto TERMINATE; } } } TERMINATE: delete[] cstat; delete[] rstat; delete[] sense; return ws; } //----------------------------------------------------------------------------- bool OsiCpxSolverInterface::setWarmStart(const CoinWarmStart *warmstart) { debugMessage("OsiCpxSolverInterface::setWarmStart(%p)\n", (void *)warmstart); const CoinWarmStartBasis *ws = dynamic_cast< const CoinWarmStartBasis * >(warmstart); int numcols, numrows, i, restat; int *cstat, *rstat; bool retval = false; if (!ws) return false; numcols = getNumCols(); numrows = getNumRows(); /* if too small warm start information is given, we take this as a sign to disable a warm start in the next LP solve */ if (ws->getNumStructural() < numcols || ws->getNumArtificial() < numrows) { disableadvbasis = true; return false; } switchToLP(); cstat = new int[numcols]; rstat = new int[numrows]; for (i = 0; i < numrows; ++i) { switch (ws->getArtifStatus(i)) { case CoinWarmStartBasis::basic: rstat[i] = CPX_BASIC; break; case CoinWarmStartBasis::atLowerBound: rstat[i] = CPX_AT_LOWER; break; case CoinWarmStartBasis::atUpperBound: rstat[i] = CPX_AT_UPPER; break; default: // unknown row status retval = false; goto TERMINATE; } } for (i = 0; i < numcols; ++i) { switch (ws->getStructStatus(i)) { case CoinWarmStartBasis::basic: cstat[i] = CPX_BASIC; break; case CoinWarmStartBasis::atLowerBound: cstat[i] = CPX_AT_LOWER; break; case CoinWarmStartBasis::atUpperBound: cstat[i] = CPX_AT_UPPER; break; case CoinWarmStartBasis::isFree: cstat[i] = CPX_FREE_SUPER; break; default: // unknown row status retval = false; goto TERMINATE; } } // *FIXME* : can this be getMutableLpPtr() ? Does any cached data change by // *FIXME* : setting warmstart? Or at least wouldn't it be sufficient to // *FIXME* : clear the cached results but not the problem data? // -> is fixed by using FREECACHED_RESULTS; only cached solution will be discarded restat = CPXcopybase(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_RESULTS), cstat, rstat); retval = (restat == 0); TERMINATE: delete[] cstat; delete[] rstat; return retval; } //############################################################################# // Hotstart related methods (primarily used in strong branching) //############################################################################# void OsiCpxSolverInterface::markHotStart() { debugMessage("OsiCpxSolverInterface::markHotStart()\n"); int err; int numcols, numrows; assert(!probtypemip_); numcols = getNumCols(); numrows = getNumRows(); if (numcols > hotStartCStatSize_) { delete[] hotStartCStat_; hotStartCStatSize_ = static_cast< int >(1.2 * static_cast< double >(numcols)); // get some extra space for future hot starts hotStartCStat_ = new int[hotStartCStatSize_]; } if (numrows > hotStartRStatSize_) { delete[] hotStartRStat_; hotStartRStatSize_ = static_cast< int >(1.2 * static_cast< double >(numrows)); // get some extra space for future hot starts hotStartRStat_ = new int[hotStartRStatSize_]; } err = CPXgetbase(env_, getMutableLpPtr(), hotStartCStat_, hotStartRStat_); checkCPXerror(err, "CPXgetbase", "markHotStart"); } void OsiCpxSolverInterface::solveFromHotStart() { debugMessage("OsiCpxSolverInterface::solveFromHotStart()\n"); int err; int maxiter; switchToLP(); assert(getNumCols() <= hotStartCStatSize_); assert(getNumRows() <= hotStartRStatSize_); err = CPXcopybase(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_RESULTS), hotStartCStat_, hotStartRStat_); checkCPXerror(err, "CPXcopybase", "solveFromHotStart"); err = CPXgetintparam(env_, CPX_PARAM_ITLIM, &maxiter); checkCPXerror(err, "CPXgetintparam", "solveFromHotStart"); err = CPXsetintparam(env_, CPX_PARAM_ITLIM, hotStartMaxIteration_); checkCPXerror(err, "CPXsetintparam", "solveFromHotStart"); resolve(); err = CPXsetintparam(env_, CPX_PARAM_ITLIM, maxiter); checkCPXerror(err, "CPXsetintparam", "solveFromHotStart"); } void OsiCpxSolverInterface::unmarkHotStart() { debugMessage("OsiCpxSolverInterface::unmarkHotStart()\n"); // ??? be lazy with deallocating memory and do nothing here, deallocate memory in the destructor } //############################################################################# // Problem information methods (original data) //############################################################################# //------------------------------------------------------------------ // Get number of rows, columns, elements, ... //------------------------------------------------------------------ int OsiCpxSolverInterface::getNumCols() const { debugMessage("OsiCpxSolverInterface::getNumCols()\n"); return CPXgetnumcols(env_, getMutableLpPtr()); } int OsiCpxSolverInterface::getNumRows() const { debugMessage("OsiCpxSolverInterface::getNumRows()\n"); return CPXgetnumrows(env_, getMutableLpPtr()); } int OsiCpxSolverInterface::getNumElements() const { debugMessage("OsiCpxSolverInterface::getNumElements()\n"); return CPXgetnumnz(env_, getMutableLpPtr()); } //------------------------------------------------------------------ // Get pointer to rim vectors //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getColLower() const { debugMessage("OsiCpxSolverInterface::getColLower()\n"); if (collower_ == NULL) { int ncols = CPXgetnumcols(env_, getMutableLpPtr()); if (ncols > 0) { collower_ = new double[ncols]; CPXgetlb(env_, getMutableLpPtr(), collower_, 0, ncols - 1); } } return collower_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getColUpper() const { debugMessage("OsiCpxSolverInterface::getColUpper()\n"); if (colupper_ == NULL) { int ncols = CPXgetnumcols(env_, getMutableLpPtr()); if (ncols > 0) { colupper_ = new double[ncols]; CPXgetub(env_, getMutableLpPtr(), colupper_, 0, ncols - 1); } } return colupper_; } //------------------------------------------------------------------ const char *OsiCpxSolverInterface::getRowSense() const { debugMessage("OsiCpxSolverInterface::getRowSense()\n"); if (rowsense_ == NULL) { // rowsense is determined with rhs, so invoke rhs getRightHandSide(); assert(rowsense_ != NULL || getNumRows() == 0); } return rowsense_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getRightHandSide() const { debugMessage("OsiCpxSolverInterface::getRightHandSide()\n"); if (rhs_ == NULL) { CPXLPptr lp = getMutableLpPtr(); int nrows = getNumRows(); if (nrows > 0) { rhs_ = new double[nrows]; CPXgetrhs(env_, lp, rhs_, 0, nrows - 1); assert(rowrange_ == NULL); rowrange_ = new double[nrows]; CPXgetrngval(env_, lp, rowrange_, 0, nrows - 1); assert(rowsense_ == NULL); rowsense_ = new char[nrows]; CPXgetsense(env_, lp, rowsense_, 0, nrows - 1); double inf = getInfinity(); int i; for (i = 0; i < nrows; ++i) { if (rowsense_[i] != 'R') rowrange_[i] = 0.0; else { if (rhs_[i] <= -inf) { rowsense_[i] = 'N'; rowrange_[i] = 0.0; rhs_[i] = 0.0; } else { if (rowrange_[i] >= 0.0) rhs_[i] = rhs_[i] + rowrange_[i]; else rowrange_[i] = -rowrange_[i]; } } } } } return rhs_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getRowRange() const { debugMessage("OsiCpxSolverInterface::getRowRange()\n"); if (rowrange_ == NULL) { // rowrange is determined with rhs, so invoke rhs getRightHandSide(); assert(rowrange_ != NULL || getNumRows() == 0); } return rowrange_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getRowLower() const { debugMessage("OsiCpxSolverInterface::getRowLower()\n"); if (rowlower_ == NULL) { int nrows = getNumRows(); const char *rowsense = getRowSense(); const double *rhs = getRightHandSide(); const double *rowrange = getRowRange(); if (nrows > 0) { rowlower_ = new double[nrows]; double dum1; for (int i = 0; i < nrows; i++) convertSenseToBound(rowsense[i], rhs[i], rowrange[i], rowlower_[i], dum1); } } return rowlower_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getRowUpper() const { debugMessage("OsiCpxSolverInterface::getRowUpper()\n"); if (rowupper_ == NULL) { int nrows = getNumRows(); const char *rowsense = getRowSense(); const double *rhs = getRightHandSide(); const double *rowrange = getRowRange(); if (nrows > 0) { rowupper_ = new double[nrows]; double dum1; for (int i = 0; i < nrows; i++) convertSenseToBound(rowsense[i], rhs[i], rowrange[i], dum1, rowupper_[i]); } } return rowupper_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getObjCoefficients() const { debugMessage("OsiCpxSolverInterface::getObjCoefficients()\n"); if (obj_ == NULL) { int ncols = CPXgetnumcols(env_, getMutableLpPtr()); if (ncols > 0) { obj_ = new double[ncols]; int err = CPXgetobj(env_, getMutableLpPtr(), obj_, 0, ncols - 1); checkCPXerror(err, "CPXgetobj", "getObjCoefficients"); } } return obj_; } //------------------------------------------------------------------ double OsiCpxSolverInterface::getObjSense() const { debugMessage("OsiCpxSolverInterface::getObjSense()\n"); if (CPXgetobjsen(env_, getMutableLpPtr()) == CPX_MIN) return +1.0; else return -1.0; } //------------------------------------------------------------------ // Return information on integrality //------------------------------------------------------------------ bool OsiCpxSolverInterface::isContinuous(int colNumber) const { debugMessage("OsiCpxSolverInterface::isContinuous(%d)\n", colNumber); return getCtype()[colNumber] == 'C'; } //------------------------------------------------------------------ // Row and column copies of the matrix ... //------------------------------------------------------------------ const CoinPackedMatrix *OsiCpxSolverInterface::getMatrixByRow() const { debugMessage("OsiCpxSolverInterface::getMatrixByRow()\n"); if (matrixByRow_ == NULL) { int nrows = getNumRows(); int ncols = getNumCols(); int nelems; int *starts = new int[nrows + 1]; int *len = new int[nrows]; int requiredSpace; CPXgetrows(env_, getMutableLpPtr(), &nelems, starts, NULL, NULL, 0, &requiredSpace, 0, nrows - 1); assert(-requiredSpace == getNumElements()); int *indices = new int[-requiredSpace]; double *elements = new double[-requiredSpace]; CPXgetrows(env_, getMutableLpPtr(), &nelems, starts, indices, elements, -requiredSpace, &requiredSpace, 0, nrows - 1); assert(requiredSpace == 0); matrixByRow_ = new CoinPackedMatrix(); // Should be able to pass null for length of packed matrix, // assignMatrix does not seem to allow (even though documentation // say it is possible to do this). // For now compute the length. starts[nrows] = nelems; for (int i = 0; i < nrows; ++i) len[i] = starts[i + 1] - starts[i]; matrixByRow_->assignMatrix(false /* not column ordered */, ncols, nrows, nelems, elements, indices, starts, len /*NULL*/); } return matrixByRow_; } //------------------------------------------------------------------ const CoinPackedMatrix *OsiCpxSolverInterface::getMatrixByCol() const { debugMessage("OsiCpxSolverInterface::getMatrixByCol()\n"); if (matrixByCol_ == NULL) { int nrows = getNumRows(); int ncols = getNumCols(); int nelems; int *starts = new int[ncols + 1]; int *len = new int[ncols]; int requiredSpace; CPXgetcols(env_, getMutableLpPtr(), &nelems, starts, NULL, NULL, 0, &requiredSpace, 0, ncols - 1); assert(-requiredSpace == getNumElements()); int *indices = new int[-requiredSpace]; double *elements = new double[-requiredSpace]; CPXgetcols(env_, getMutableLpPtr(), &nelems, starts, indices, elements, -requiredSpace, &requiredSpace, 0, ncols - 1); assert(requiredSpace == 0); matrixByCol_ = new CoinPackedMatrix(); // Should be able to pass null for length of packed matrix, // assignMatrix does not seem to allow (even though documentation // say it is possible to do this). // For now compute the length. starts[ncols] = nelems; for (int i = 0; i < ncols; i++) len[i] = starts[i + 1] - starts[i]; matrixByCol_->assignMatrix(true /* column ordered */, nrows, ncols, nelems, elements, indices, starts, len /*NULL*/); assert(matrixByCol_->getNumCols() == ncols); assert(matrixByCol_->getNumRows() == nrows); } return matrixByCol_; } //------------------------------------------------------------------ // Get solver's value for infinity //------------------------------------------------------------------ double OsiCpxSolverInterface::getInfinity() const { debugMessage("OsiCpxSolverInterface::getInfinity()\n"); return CPX_INFBOUND; } //############################################################################# // Problem information methods (results) //############################################################################# // *FIXME*: what should be done if a certain vector doesn't exist??? const double *OsiCpxSolverInterface::getColSolution() const { debugMessage("OsiCpxSolverInterface::getColSolution()\n"); if (colsol_ == NULL) { CPXLPptr lp = getMutableLpPtr(); int ncols = CPXgetnumcols(env_, lp); if (ncols > 0) { colsol_ = new double[ncols]; if (probtypemip_) { #if CPX_VERSION >= 1100 int solntype; CPXsolninfo(env_, lp, NULL, &solntype, NULL, NULL); if (solntype != CPX_NO_SOLN) { int err = CPXgetmipx(env_, lp, colsol_, 0, ncols - 1); checkCPXerror(err, "CPXgetmipx", "getColSolution"); } else { CoinFillN(colsol_, ncols, 0.0); } #else int err = CPXgetmipx(env_, lp, colsol_, 0, ncols - 1); if (err == CPXERR_NO_INT_SOLN) CoinFillN(colsol_, ncols, 0.0); else checkCPXerror(err, "CPXgetmipx", "getColSolution"); #endif } else { int solntype; CPXsolninfo(env_, lp, NULL, &solntype, NULL, NULL); if (solntype != CPX_NO_SOLN) { int err = CPXgetx(env_, lp, colsol_, 0, ncols - 1); checkCPXerror(err, "CPXgetx", "getColSolution"); } else { CoinFillN(colsol_, ncols, 0.0); } } } } return colsol_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getRowPrice() const { debugMessage("OsiCpxSolverInterface::getRowPrice()\n"); if (rowsol_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rowsol_ = new double[nrows]; int solntype; /* check if a solution exists, if Cplex >= 11.0 */ #if CPX_VERSION >= 1100 CPXsolninfo(env_, getMutableLpPtr(), NULL, &solntype, NULL, NULL); #else solntype = CPX_BASIC_SOLN; #endif if (solntype != CPX_NO_SOLN) { int err = CPXgetpi(env_, getMutableLpPtr(), rowsol_, 0, nrows - 1); checkCPXerror(err, "CPXgetpi", "getRowPrice"); } else { CoinFillN(rowsol_, nrows, 0.0); } } } return rowsol_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getReducedCost() const { debugMessage("OsiCpxSolverInterface::getReducedCost()\n"); if (redcost_ == NULL) { int ncols = CPXgetnumcols(env_, getMutableLpPtr()); if (ncols > 0) { redcost_ = new double[ncols]; int solntype; /* check if a solution exists, if Cplex >= 11.0 */ #if CPX_VERSION >= 1100 CPXsolninfo(env_, getMutableLpPtr(), NULL, &solntype, NULL, NULL); #else solntype = CPX_BASIC_SOLN; #endif if (solntype != CPX_NO_SOLN) { int err = CPXgetdj(env_, getMutableLpPtr(), redcost_, 0, ncols - 1); checkCPXerror(err, "CPXgetdj", "getReducedCost"); } else { CoinFillN(redcost_, ncols, 0.0); } } } return redcost_; } //------------------------------------------------------------------ const double *OsiCpxSolverInterface::getRowActivity() const { debugMessage("OsiCpxSolverInterface::getRowActivity()\n"); if (rowact_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rowact_ = new double[nrows]; int solntype; if (probtypemip_) { /* check if a solution exists, if Cplex >= 11.0 */ #if CPX_VERSION >= 1100 CPXsolninfo(env_, getMutableLpPtr(), NULL, &solntype, NULL, NULL); if (solntype != CPX_NO_SOLN) { double *rowslack = new double[nrows]; int err = CPXgetmipslack(env_, getMutableLpPtr(), rowslack, 0, nrows - 1); checkCPXerror(err, "CPXgetmipslack", "getRowActivity"); for (int r = 0; r < nrows; ++r) rowact_[r] = getRightHandSide()[r] - rowslack[r]; delete[] rowslack; } else { CoinFillN(rowact_, nrows, 0.0); } #else double *rowslack = new double[nrows]; int err = CPXgetmipslack(env_, getMutableLpPtr(), rowslack, 0, nrows - 1); if (err == CPXERR_NO_SOLN || err == CPXERR_NO_INT_SOLN) { CoinFillN(rowact_, nrows, 0.0); } else { checkCPXerror(err, "CPXgetmipslack", "getRowActivity"); for (int r = 0; r < nrows; ++r) rowact_[r] = getRightHandSide()[r] - rowslack[r]; } delete[] rowslack; #endif } else { CPXsolninfo(env_, getMutableLpPtr(), NULL, &solntype, NULL, NULL); if (solntype != CPX_NO_SOLN) { int err = CPXgetax(env_, getMutableLpPtr(), rowact_, 0, nrows - 1); checkCPXerror(err, "CPXgetax", "getRowActivity"); } else { CoinFillN(rowact_, nrows, 0.0); } } } } return rowact_; } //------------------------------------------------------------------ double OsiCpxSolverInterface::getObjValue() const { debugMessage("OsiCpxSolverInterface::getObjValue()\n"); double objval = 0.0; int err; int solntype; CPXLPptr lp = getMutableLpPtr(); if (probtypemip_) { #if CPX_VERSION >= 1100 CPXsolninfo(env_, lp, NULL, &solntype, NULL, NULL); if (solntype != CPX_NO_SOLN) { err = CPXgetmipobjval(env_, lp, &objval); checkCPXerror(err, "CPXgetmipobjval", "getObjValue"); } else { // => return 0.0 as objective value (?? is this the correct behaviour ??) objval = 0.0; } #else err = CPXgetmipobjval(env_, lp, &objval); if (err == CPXERR_NO_INT_SOLN) // => return 0.0 as objective value (?? is this the correct behaviour ??) objval = 0.0; else checkCPXerror(err, "CPXgetmipobjval", "getObjValue"); #endif } else { CPXsolninfo(env_, lp, NULL, &solntype, NULL, NULL); if (solntype != CPX_NO_SOLN) { err = CPXgetobjval(env_, lp, &objval); checkCPXerror(err, "CPXgetobjval", "getObjValue"); } else { // => return 0.0 as objective value (?? is this the correct behaviour ??) objval = 0.0; } } // Adjust objective function value by constant term in objective function double objOffset; getDblParam(OsiObjOffset, objOffset); objval -= objOffset; return objval; } //------------------------------------------------------------------ int OsiCpxSolverInterface::getIterationCount() const { debugMessage("OsiCpxSolverInterface::getIterationCount()\n"); // CPXgetitcnt prints an error if no solution exists, so check before, if Cplex >= 11.0 #if CPX_VERSION >= 1100 int solntype; CPXsolninfo(env_, getMutableLpPtr(), NULL, &solntype, NULL, NULL); if (solntype == CPX_NO_SOLN) return 0; #endif if (probtypemip_) return CPXgetmipitcnt(env_, getMutableLpPtr()); else return CPXgetitcnt(env_, getMutableLpPtr()); } //------------------------------------------------------------------ std::vector< double * > OsiCpxSolverInterface::getDualRays(int maxNumRays, bool fullRay) const { debugMessage("OsiCpxSolverInterface::getDualRays(%d,%s)\n", maxNumRays, fullRay ? "true" : "false"); if (fullRay == true) { throw CoinError("Full dual rays not yet implemented.", "getDualRays", "OsiCpxSolverInterface"); } OsiCpxSolverInterface solver(*this); const int numcols = getNumCols(); const int numrows = getNumRows(); int *index = new int[CoinMax(numcols, numrows)]; int i; for (i = CoinMax(numcols, numrows) - 1; i >= 0; --i) { index[i] = i; } double *obj = new double[CoinMax(numcols, 2 * numrows)]; CoinFillN(obj, numcols, 0.0); solver.setObjCoeffSet(index, index + numcols, obj); double *clb = new double[2 * numrows]; double *cub = new double[2 * numrows]; const double plusone = 1.0; const double minusone = -1.0; const char *sense = getRowSense(); const CoinPackedVectorBase **cols = new const CoinPackedVectorBase *[2 * numrows]; int newcols = 0; for (i = 0; i < numrows; ++i) { switch (sense[i]) { case 'L': cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &minusone, false); break; case 'G': cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &plusone, false); break; case 'R': cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &minusone, false); cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &plusone, false); break; case 'N': break; } } CoinFillN(obj, newcols, 1.0); CoinFillN(clb, newcols, 0.0); CoinFillN(cub, newcols, getInfinity()); solver.addCols(newcols, cols, clb, cub, obj); delete[] index; delete[] cols; delete[] clb; delete[] cub; delete[] obj; solver.setObjSense(1.0); // minimize solver.initialSolve(); const double *solverpi = solver.getRowPrice(); double *pi = new double[numrows]; for (i = numrows - 1; i >= 0; --i) { pi[i] = -solverpi[i]; } return std::vector< double * >(1, pi); } //------------------------------------------------------------------ std::vector< double * > OsiCpxSolverInterface::getPrimalRays(int maxNumRays) const { debugMessage("OsiCpxSolverInterface::getPrimalRays(%d)\n", maxNumRays); double *ray = new double[getNumCols()]; int err = CPXgetray(env_, getMutableLpPtr(), ray); checkCPXerror(err, "CPXgetray", "getPrimalRays"); return std::vector< double * >(1, ray); } //############################################################################# // Problem modifying methods (rim vectors) //############################################################################# void OsiCpxSolverInterface::setObjCoeff(int elementIndex, double elementValue) { debugMessage("OsiCpxSolverInterface::setObjCoeff(%d, %g)\n", elementIndex, elementValue); // int err = CPXchgobj(env_, getLpPtr( OsiCpxSolverInterface::FREECACHED_COLUMN ), 1, &elementIndex, &elementValue); int err = CPXchgobj(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 1, &elementIndex, &elementValue); checkCPXerror(err, "CPXchgobj", "setObjCoeff"); if (obj_ != NULL) { obj_[elementIndex] = elementValue; } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setObjCoeffSet(const int *indexFirst, const int *indexLast, const double *coeffList) { debugMessage("OsiCpxSolverInterface::setObjCoeffSet(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)coeffList); const long int cnt = indexLast - indexFirst; // int err = CPXchgobj(env_, // getLpPtr(OsiCpxSolverInterface::FREECACHED_COLUMN), cnt, // const_cast(indexFirst), // const_cast(coeffList)); int err = CPXchgobj(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), static_cast< int >(cnt), const_cast< int * >(indexFirst), const_cast< double * >(coeffList)); checkCPXerror(err, "CPXchgobj", "setObjCoeffSet"); if (obj_ != NULL) { for (int i = 0; i < cnt; ++i) { obj_[indexFirst[i]] = coeffList[i]; } } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setColLower(int elementIndex, double elementValue) { debugMessage("OsiCpxSolverInterface::setColLower(%d, %g)\n", elementIndex, elementValue); char c = 'L'; // int err = CPXchgbds( env_, getLpPtr( OsiCpxSolverInterface::FREECACHED_COLUMN ), 1, &elementIndex, &c, &elementValue ); int err = CPXchgbds(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 1, &elementIndex, &c, &elementValue); checkCPXerror(err, "CPXchgbds", "setColLower"); if (collower_ != NULL) { collower_[elementIndex] = elementValue; } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setColUpper(int elementIndex, double elementValue) { debugMessage("OsiCpxSolverInterface::setColUpper(%d, %g)\n", elementIndex, elementValue); char c = 'U'; // int err = CPXchgbds( env_, getLpPtr( OsiCpxSolverInterface::FREECACHED_COLUMN ), 1, &elementIndex, &c, &elementValue ); int err = CPXchgbds(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 1, &elementIndex, &c, &elementValue); checkCPXerror(err, "CPXchgbds", "setColUpper"); if (colupper_ != NULL) { colupper_[elementIndex] = elementValue; } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setColBounds(int elementIndex, double lower, double upper) { debugMessage("OsiCpxSolverInterface::setColBounds(%d, %g, %g)\n", elementIndex, lower, upper); char c[2] = { 'L', 'U' }; int ind[2]; double bd[2]; int err; ind[0] = elementIndex; ind[1] = elementIndex; bd[0] = lower; bd[1] = upper; // err = CPXchgbds( env_, getLpPtr( OsiCpxSolverInterface::FREECACHED_COLUMN ), 2, ind, c, bd ); err = CPXchgbds(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 2, ind, c, bd); checkCPXerror(err, "CPXchgbds", "setColBounds"); if (collower_ != NULL) { collower_[elementIndex] = lower; } if (colupper_ != NULL) { colupper_[elementIndex] = upper; } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { debugMessage("OsiCpxSolverInterface::setColSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); const long int cnt = indexLast - indexFirst; if (cnt <= 0) return; char *c = new char[2 * cnt]; int *ind = new int[2 * cnt]; for (int i = 0; i < cnt; ++i) { register const int j = 2 * i; c[j] = 'L'; c[j + 1] = 'U'; const int colind = indexFirst[i]; ind[j] = colind; ind[j + 1] = colind; if (collower_ != NULL) { collower_[colind] = boundList[2 * i]; } if (colupper_ != NULL) { colupper_[colind] = boundList[2 * i + 1]; } } // int err = CPXchgbds( env_, // getLpPtr(OsiCpxSolverInterface::FREECACHED_ROW ), // 2*cnt, ind, c, // const_cast(boundList) ); int err = CPXchgbds(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 2 * static_cast< int >(cnt), ind, c, const_cast< double * >(boundList)); checkCPXerror(err, "CPXchgbds", "setColSetBounds"); delete[] ind; delete[] c; // OsiSolverInterface::setColSetBounds( indexFirst, indexLast, boundList ); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setRowLower(int i, double elementValue) { debugMessage("OsiCpxSolverInterface::setRowLower(%d, %g)\n", i, elementValue); double rhs = getRightHandSide()[i]; double range = getRowRange()[i]; char sense = getRowSense()[i]; double lower = 0, upper = 0; convertSenseToBound(sense, rhs, range, lower, upper); if (lower != elementValue) { convertBoundToSense(elementValue, upper, sense, rhs, range); setRowType(i, sense, rhs, range); } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setRowUpper(int i, double elementValue) { debugMessage("OsiCpxSolverInterface::setRowUpper(%d, %g)\n", i, elementValue); double rhs = getRightHandSide()[i]; double range = getRowRange()[i]; char sense = getRowSense()[i]; double lower = 0, upper = 0; convertSenseToBound(sense, rhs, range, lower, upper); if (upper != elementValue) { convertBoundToSense(lower, elementValue, sense, rhs, range); setRowType(i, sense, rhs, range); } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setRowBounds(int elementIndex, double lower, double upper) { debugMessage("OsiCpxSolverInterface::setRowBounds(%d, %g, %g)\n", elementIndex, lower, upper); double rhs, range; char sense; convertBoundToSense(lower, upper, sense, rhs, range); setRowType(elementIndex, sense, rhs, range); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setRowType(int i, char sense, double rightHandSide, double range) { debugMessage("OsiCpxSolverInterface::setRowType(%d, %c, %g, %g)\n", i, sense, rightHandSide, range); int err; // in CPLEX, ranged constraints are interpreted as rhs <= coeff*x <= rhs+range, which is different from Osi double cpxrhs = rightHandSide; if (sense == 'R') { assert(range >= 0.0); cpxrhs -= range; } if (sense == 'N') { sense = 'R'; cpxrhs = -getInfinity(); range = 2 * getInfinity(); } /************** err = CPXchgsense( env_, getLpPtr( OsiCpxSolverInterface::FREECACHED_ROW ), 1, &i, &sense ); checkCPXerror( err, "CPXchgsense", "setRowType" ); err = CPXchgrhs( env_, getLpPtr( OsiCpxSolverInterface::FREECACHED_ROW ), 1, &i, &rightHandSide ); checkCPXerror( err, "CPXchgrhs", "setRowType" ); err = CPXchgrngval( env_, getLpPtr( OsiCpxSolverInterface::FREECACHED_ROW ), 1, &i, &range ); checkCPXerror( err, "CPXchgrngval", "setRowType" ); ***************/ err = CPXchgsense(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 1, &i, &sense); checkCPXerror(err, "CPXchgsense", "setRowType"); if (rowsense_ != NULL) { rowsense_[i] = sense; } err = CPXchgrhs(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 1, &i, &cpxrhs); checkCPXerror(err, "CPXchgrhs", "setRowType"); if (rhs_ != NULL) { rhs_[i] = rightHandSide; } err = CPXchgrngval(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_PROBLEM), 1, &i, &range); checkCPXerror(err, "CPXchgrngval", "setRowType"); if (rowrange_ != NULL) { rowrange_[i] = range; } if (rowlower_ != NULL || rowupper_ != NULL) { double dummy; convertSenseToBound(sense, rightHandSide, range, rowlower_ ? rowlower_[i] : dummy, rowupper_ ? rowupper_[i] : dummy); } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { debugMessage("OsiCpxSolverInterface::setRowSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); const long int cnt = indexLast - indexFirst; if (cnt <= 0) return; char *sense = new char[cnt]; double *rhs = new double[cnt]; double *range = new double[cnt]; for (int i = 0; i < cnt; ++i) { convertBoundToSense(boundList[2 * i], boundList[2 * i + 1], sense[i], rhs[i], range[i]); } setRowSetTypes(indexFirst, indexLast, sense, rhs, range); delete[] range; delete[] rhs; delete[] sense; // OsiSolverInterface::setRowSetBounds( indexFirst, indexLast, boundList ); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList) { debugMessage("OsiCpxSolverInterface::setRowSetTypes(%p, %p, %p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)senseList, (void *)rhsList, (void *)rangeList); const long int cnt = indexLast - indexFirst; if (cnt <= 0) return; char *sense = new char[cnt]; double *rhs = new double[cnt]; double *range = new double[cnt]; int *rangeind = new int[cnt]; int rangecnt = 0; for (int i = 0; i < cnt; ++i) { sense[i] = senseList[i]; rhs[i] = rhsList[i]; if (sense[i] == 'R') { assert(rangeList[i] >= 0.0); rhs[i] -= rangeList[i]; rangeind[rangecnt] = indexFirst[i]; range[rangecnt] = rangeList[i]; ++rangecnt; } if (sense[i] == 'N') { sense[i] = 'R'; rhs[i] = -getInfinity(); rangeind[rangecnt] = indexFirst[i]; range[rangecnt] = 2 * getInfinity(); ++rangecnt; } } int err; /****************** err = CPXchgsense(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_ROW), cnt, const_cast(indexFirst), sense); checkCPXerror( err, "CPXchgsense", "setRowSetTypes" ); err = CPXchgrhs(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_ROW), cnt, const_cast(indexFirst), rhs); checkCPXerror( err, "CPXchgrhs", "setRowSetTypes" ); err = CPXchgrngval(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_ROW), rangecnt, rangeind, range); checkCPXerror( err, "CPXchgrngval", "setRowSetTypes" ); ********************/ err = CPXchgsense(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_ROW), static_cast< int >(cnt), const_cast< int * >(indexFirst), sense); checkCPXerror(err, "CPXchgsense", "setRowSetTypes"); err = CPXchgrhs(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_ROW), static_cast< int >(cnt), const_cast< int * >(indexFirst), rhs); checkCPXerror(err, "CPXchgrhs", "setRowSetTypes"); err = CPXchgrngval(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_ROW), rangecnt, rangeind, range); checkCPXerror(err, "CPXchgrngval", "setRowSetTypes"); int j; if (rowsense_ != NULL) { for (j = 0; j < cnt; j++) { rowsense_[indexFirst[j]] = sense[j]; } } if (rhs_ != NULL) { for (j = 0; j < cnt; j++) { rhs_[indexFirst[j]] = rhs[j]; } } if (rowrange_ != NULL) { for (j = 0; j < rangecnt; j++) { rowrange_[rangeind[j]] = range[j]; } } delete[] rangeind; delete[] range; delete[] rhs; delete[] sense; // OsiSolverInterface::setRowSetTypes( indexFirst, indexLast, senseList, // rhsList, rangeList ); } //############################################################################# void OsiCpxSolverInterface::setContinuous(int index) { debugMessage("OsiCpxSolverInterface::setContinuous(%d)\n", index); assert(coltype_ != NULL); assert(coltypesize_ >= getNumCols()); coltype_[index] = 'C'; if (probtypemip_) { CPXLPptr lp = getMutableLpPtr(); int err; err = CPXchgctype(env_, lp, 1, &index, &coltype_[index]); checkCPXerror(err, "CPXchgctype", "setContinuous"); } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setInteger(int index) { debugMessage("OsiCpxSolverInterface::setInteger(%d)\n", index); assert(coltype_ != NULL); assert(coltypesize_ >= getNumCols()); if (getColLower()[index] == 0.0 && getColUpper()[index] == 1.0) coltype_[index] = 'B'; else coltype_[index] = 'I'; if (probtypemip_) { CPXLPptr lp = getMutableLpPtr(); int err; err = CPXchgctype(env_, lp, 1, &index, &coltype_[index]); checkCPXerror(err, "CPXchgctype", "setInteger"); } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setContinuous(const int *indices, int len) { debugMessage("OsiCpxSolverInterface::setContinuous(%p, %d)\n", (void *)indices, len); for (int i = 0; i < len; ++i) setContinuous(indices[i]); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setInteger(const int *indices, int len) { debugMessage("OsiCpxSolverInterface::setInteger(%p, %d)\n", (void *)indices, len); for (int i = 0; i < len; ++i) setInteger(indices[i]); } //############################################################################# void OsiCpxSolverInterface::setObjSense(double s) { debugMessage("OsiCpxSolverInterface::setObjSense(%g)\n", s); if (s == +1.0) CPXchgobjsen(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_RESULTS), CPX_MIN); else CPXchgobjsen(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_RESULTS), CPX_MAX); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setColSolution(const double *cs) { debugMessage("OsiCpxSolverInterface::setColSolution(%p)\n", (void *)cs); int nc = getNumCols(); if (cs == NULL) freeCachedResults(); else if (nc > 0) { // If colsol isn't allocated, then allocate it if (colsol_ == NULL) colsol_ = new double[nc]; // Copy in new col solution. CoinDisjointCopyN(cs, nc, colsol_); // CPLEX < 7.0 doesn't support setting a col solution without a row solution // -> if a row solution exists or CPLEX version >= 7, then pass into CPLEX #if CPX_VERSION < 700 if (rowsol_ != NULL) #endif { int err = CPXcopystart(env_, getMutableLpPtr(), NULL, NULL, const_cast< double * >(colsol_), const_cast< double * >(rowsol_), NULL, NULL); checkCPXerror(err, "CPXcopystart", "setColSolution"); } } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::setRowPrice(const double *rs) { debugMessage("OsiCpxSolverInterface::setRowPrice(%p)\n", (void *)rs); int nr = getNumRows(); if (rs == NULL) freeCachedResults(); else if (nr > 0) { // If rowsol isn't allocated, then allocate it if (rowsol_ == NULL) rowsol_ = new double[nr]; // Copy in new row solution. CoinDisjointCopyN(rs, nr, rowsol_); // if a col solution exists, then pass into CPLEX if (colsol_ != NULL) { int err = CPXcopystart(env_, getMutableLpPtr(), NULL, NULL, const_cast< double * >(colsol_), const_cast< double * >(rowsol_), NULL, NULL); checkCPXerror(err, "CPXcopystart", "setRowPrice"); } } } //############################################################################# // Problem modifying methods (matrix) //############################################################################# void OsiCpxSolverInterface::addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj) { debugMessage("OsiCpxSolverInterface::addCol(%p, %g, %g, %g)\n", (void *)&vec, collb, colub, obj); int nc = getNumCols(); assert(coltypesize_ >= nc); resizeColType(nc + 1); coltype_[nc] = 'C'; int err; int cmatbeg[2] = { 0, vec.getNumElements() }; err = CPXaddcols(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_ROW), 1, vec.getNumElements(), const_cast< double * >(&obj), cmatbeg, const_cast< int * >(vec.getIndices()), const_cast< double * >(vec.getElements()), const_cast< double * >(&collb), const_cast< double * >(&colub), NULL); checkCPXerror(err, "CPXaddcols", "addCol"); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj) { debugMessage("OsiCpxSolverInterface::addCols(%d, %p, %p, %p, %p)\n", numcols, (void *)cols, (void *)collb, (void *)colub, (void *)obj); int nc = getNumCols(); assert(coltypesize_ >= nc); resizeColType(nc + numcols); CoinFillN(&coltype_[nc], numcols, 'C'); int i; int nz = 0; for (i = 0; i < numcols; ++i) nz += cols[i]->getNumElements(); int *index = new int[nz]; double *elem = new double[nz]; int *start = new int[numcols + 1]; nz = 0; start[0] = 0; for (i = 0; i < numcols; ++i) { const CoinPackedVectorBase *col = cols[i]; const int len = col->getNumElements(); CoinDisjointCopyN(col->getIndices(), len, index + nz); CoinDisjointCopyN(col->getElements(), len, elem + nz); nz += len; start[i + 1] = nz; } int err = CPXaddcols(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_ROW), numcols, nz, const_cast< double * >(obj), start, index, elem, const_cast< double * >(collb), const_cast< double * >(colub), NULL); checkCPXerror(err, "CPXaddcols", "addCols"); delete[] start; delete[] elem; delete[] index; // int i; // for( i = 0; i < numcols; ++i ) // addCol( *(cols[i]), collb[i], colub[i], obj[i] ); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::deleteCols(const int num, const int *columnIndices) { debugMessage("OsiCpxSolverInterface::deleteCols(%d, %p)\n", num, (void *)columnIndices); int ncols = getNumCols(); int *delstat = new int[ncols]; int i, err; CoinFillN(delstat, ncols, 0); for (i = 0; i < num; ++i) delstat[columnIndices[i]] = 1; err = CPXdelsetcols(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_ROW), delstat); checkCPXerror(err, "CPXdelsetcols", "deleteCols"); for (i = 0; i < ncols; ++i) { assert(delstat[i] <= i); if (delstat[i] != -1) coltype_[delstat[i]] = coltype_[i]; } delete[] delstat; //--- //--- MVG: took from OsiClp for updating names //--- int nameDiscipline; getIntParam(OsiNameDiscipline, nameDiscipline); if (num && nameDiscipline) { // Very clumsy (and inefficient) - need to sort and then go backwards in ? chunks int *indices = CoinCopyOfArray(columnIndices, num); std::sort(indices, indices + num); int num2 = num; while (num2) { int next = indices[num2 - 1]; int firstDelete = num2 - 1; int i; for (i = num2 - 2; i >= 0; --i) { if (indices[i] + 1 == next) { --next; firstDelete = i; } else { break; } } OsiSolverInterface::deleteColNames(indices[firstDelete], num2 - firstDelete); num2 = firstDelete; assert(num2 >= 0); } delete[] indices; } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub) { debugMessage("OsiCpxSolverInterface::addRow(%p, %g, %g)\n", (void *)&vec, rowlb, rowub); char sense; double rhs, range; convertBoundToSense(rowlb, rowub, sense, rhs, range); addRow(vec, sense, rhs, range); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng) { debugMessage("OsiCpxSolverInterface::addRow(%p, %c, %g, %g)\n", (void *)&vec, rowsen, rowrhs, rowrng); int err; int rmatbeg = 0; double rhs; double range; char sense = rowsen; switch (rowsen) { case 'R': //assert(rowrng >= 0.0); rhs = rowrhs - rowrng; range = rowrng; break; case 'N': sense = 'R'; rhs = -getInfinity(); range = 2 * getInfinity(); break; default: rhs = rowrhs; range = 0.0; } err = CPXaddrows(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_COLUMN), 0, 1, vec.getNumElements(), &rhs, &sense, &rmatbeg, const_cast< int * >(vec.getIndices()), const_cast< double * >(vec.getElements()), NULL, NULL); checkCPXerror(err, "CPXaddrows", "addRow"); if (sense == 'R') { int row = getNumRows() - 1; err = CPXchgrngval(env_, getLpPtr(OsiCpxSolverInterface::FREECACHED_ROW), 1, &row, &range); checkCPXerror(err, "CPXchgrngval", "addRow"); } } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub) { debugMessage("OsiCpxSolverInterface::addRows(%d, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowlb, (void *)rowub); int i; for (i = 0; i < numrows; ++i) addRow(*(rows[i]), rowlb[i], rowub[i]); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng) { debugMessage("OsiCpxSolverInterface::addRows(%d, %p, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowsen, (void *)rowrhs, (void *)rowrng); int i; for (i = 0; i < numrows; ++i) addRow(*(rows[i]), rowsen[i], rowrhs[i], rowrng[i]); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::deleteRows(const int num, const int *rowIndices) { debugMessage("OsiCpxSolverInterface::deleteRows(%d, %p)\n", num, (void *)rowIndices); int nrows = getNumRows(); int *delstat = new int[nrows]; int i, err; CoinFillN(delstat, nrows, 0); for (i = 0; i < num; ++i) delstat[rowIndices[i]] = 1; err = CPXdelsetrows(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_COLUMN), delstat); checkCPXerror(err, "CPXdelsetrows", "deleteRows"); delete[] delstat; //--- //--- SV: took from OsiClp for updating names //--- int nameDiscipline; getIntParam(OsiNameDiscipline, nameDiscipline); if (num && nameDiscipline) { // Very clumsy (and inefficient) - need to sort and then go backwards in ? chunks int *indices = CoinCopyOfArray(rowIndices, num); std::sort(indices, indices + num); int num2 = num; while (num2) { int next = indices[num2 - 1]; int firstDelete = num2 - 1; int i; for (i = num2 - 2; i >= 0; --i) { if (indices[i] + 1 == next) { --next; firstDelete = i; } else { break; } } OsiSolverInterface::deleteRowNames(indices[firstDelete], num2 - firstDelete); num2 = firstDelete; assert(num2 >= 0); } delete[] indices; } } //############################################################################# // Methods to input a problem //############################################################################# void OsiCpxSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { debugMessage("OsiCpxSolverInterface::loadProblem(1)(%p, %p, %p, %p, %p, %p)\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowlb, (void *)rowub); const double inf = getInfinity(); int nrows = matrix.getNumRows(); char *rowSense = new char[nrows]; double *rowRhs = new double[nrows]; double *rowRange = new double[nrows]; int i; for (i = nrows - 1; i >= 0; --i) { const double lower = rowlb ? rowlb[i] : -inf; const double upper = rowub ? rowub[i] : inf; convertBoundToSense(lower, upper, rowSense[i], rowRhs[i], rowRange[i]); } loadProblem(matrix, collb, colub, obj, rowSense, rowRhs, rowRange); delete[] rowSense; delete[] rowRhs; delete[] rowRange; } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub) { debugMessage("OsiCpxSolverInterface::assignProblem()\n"); loadProblem(*matrix, collb, colub, obj, rowlb, rowub); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowlb; rowlb = 0; delete[] rowub; rowub = 0; } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { debugMessage("OsiCpxSolverInterface::loadProblem(2)(%p, %p, %p, %p, %p, %p, %p)\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen, (void *)rowrhs, (void *)rowrng); char *lclRowsen = NULL; double *lclRowrhs = NULL; int nc = matrix.getNumCols(); int nr = matrix.getNumRows(); if (nr == 0 && nc == 0) { // empty LP if (lp_ != NULL) { // kill old LP int objDirection = CPXgetobjsen(env_, getMutableLpPtr()); int err = CPXfreeprob(env_, &lp_); checkCPXerror(err, "CPXfreeprob", "loadProblem"); lp_ = NULL; freeAllMemory(); CPXchgobjsen(env_, getLpPtr(), objDirection); } return; } if (nr == 0) { int objDirection = CPXgetobjsen(env_, getMutableLpPtr()); if (lp_ != NULL) { // kill old LP int err = CPXfreeprob(env_, &lp_); checkCPXerror(err, "CPXfreeprob", "loadProblem"); lp_ = NULL; freeAllMemory(); } // getLpPtr() call will create new LP int err = CPXnewcols(env_, getLpPtr(), nc, obj, collb, colub, NULL, NULL); checkCPXerror(err, "CPXcopylp", "loadProblem"); CPXchgobjsen(env_, getLpPtr(), objDirection); return; } if (rowsen == NULL) { lclRowsen = new char[nr]; CoinFillN(lclRowsen, nr, 'G'); rowsen = lclRowsen; } if (rowrhs == NULL) { lclRowrhs = new double[nr]; CoinFillN(lclRowrhs, nr, 0.0); rowrhs = lclRowrhs; } int i; // Set column values to defaults if NULL pointer passed double *clb; double *cub; double *ob; double *rr = NULL; double *rhs; if (collb != NULL) clb = const_cast< double * >(collb); else { clb = new double[nc]; CoinFillN(clb, nc, 0.0); } if (colub != NULL) cub = const_cast< double * >(colub); else { cub = new double[nc]; CoinFillN(cub, nc, getInfinity()); } if (obj != NULL) ob = const_cast< double * >(obj); else { ob = new double[nc]; CoinFillN(ob, nc, 0.0); } if (rowrng != NULL) { rhs = new double[nr]; rr = new double[nr]; for (i = 0; i < nr; i++) { if (rowsen[i] == 'R') { if (rowrng[i] >= 0) { rhs[i] = rowrhs[i] - rowrng[i]; rr[i] = rowrng[i]; } else { rhs[i] = rowrhs[i]; rr[i] = -rowrng[i]; } } else { rhs[i] = rowrhs[i]; rr[i] = 0.0; } } } else rhs = const_cast< double * >(rowrhs); bool freeMatrixRequired = false; CoinPackedMatrix *m = NULL; if (!matrix.isColOrdered()) { m = new CoinPackedMatrix(); m->reverseOrderedCopyOf(matrix); freeMatrixRequired = true; } else m = const_cast< CoinPackedMatrix * >(&matrix); assert(nc == m->getNumCols()); assert(nr == m->getNumRows()); assert(m->isColOrdered()); int objDirection = CPXgetobjsen(env_, getMutableLpPtr()); int err = CPXcopylp(env_, getLpPtr(), nc, nr, // Leave ObjSense alone(set to current value). objDirection, ob, rhs, const_cast< char * >(rowsen), const_cast< int * >(m->getVectorStarts()), const_cast< int * >(m->getVectorLengths()), const_cast< int * >(m->getIndices()), const_cast< double * >(m->getElements()), const_cast< double * >(clb), const_cast< double * >(cub), rr); checkCPXerror(err, "CPXcopylp", "loadProblem"); if (collb == NULL) delete[] clb; if (colub == NULL) delete[] cub; if (obj == NULL) delete[] ob; if (rowrng != NULL) { delete[] rr; delete[] rhs; } if (freeMatrixRequired) delete m; resizeColType(nc); CoinFillN(coltype_, nc, 'C'); if (lclRowsen != NULL) delete[] lclRowsen; if (lclRowrhs != NULL) delete[] lclRowrhs; } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng) { debugMessage("OsiCpxSolverInterface::assignProblem()\n"); loadProblem(*matrix, collb, colub, obj, rowsen, rowrhs, rowrng); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowsen; rowsen = 0; delete[] rowrhs; rowrhs = 0; delete[] rowrng; rowrng = 0; } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { debugMessage("OsiCpxSolverInterface::loadProblem(3)()\n"); const double inf = getInfinity(); char *rowSense = new char[numrows]; double *rowRhs = new double[numrows]; double *rowRange = new double[numrows]; for (int i = numrows - 1; i >= 0; --i) { const double lower = rowlb ? rowlb[i] : -inf; const double upper = rowub ? rowub[i] : inf; convertBoundToSense(lower, upper, rowSense[i], rowRhs[i], rowRange[i]); } loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowSense, rowRhs, rowRange); delete[] rowSense; delete[] rowRhs; delete[] rowRange; } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { debugMessage("OsiCpxSolverInterface::loadProblem(4)(%d, %d, %p, %p, %p, %p, %p, %p, %p, %p, %p)\n", numcols, numrows, (void *)start, (void *)index, (void *)value, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen, (void *)rowrhs, (void *)rowrng); const int nc = numcols; const int nr = numrows; if (nr == 0 && nc == 0) { // empty LP if (lp_ != NULL) { // kill old LP int objDirection = CPXgetobjsen(env_, getMutableLpPtr()); int err = CPXfreeprob(env_, &lp_); checkCPXerror(err, "CPXfreeprob", "loadProblem"); lp_ = NULL; freeAllMemory(); CPXchgobjsen(env_, getLpPtr(), objDirection); } return; } if (nr == 0) { int objDirection = CPXgetobjsen(env_, getMutableLpPtr()); if (lp_ != NULL) { // kill old LP int err = CPXfreeprob(env_, &lp_); checkCPXerror(err, "CPXfreeprob", "loadProblem"); lp_ = NULL; freeAllMemory(); } // getLpPtr() call will create new LP int err = CPXnewcols(env_, getLpPtr(), nc, obj, collb, colub, NULL, NULL); checkCPXerror(err, "CPXcopylp", "loadProblem"); CPXchgobjsen(env_, getLpPtr(), objDirection); return; } char *lclRowsen = NULL; double *lclRowrhs = NULL; if (rowsen == NULL) { lclRowsen = new char[nr]; CoinFillN(lclRowsen, nr, 'G'); rowsen = lclRowsen; } if (rowrhs == NULL) { lclRowrhs = new double[nr]; CoinFillN(lclRowrhs, nr, 0.0); } int i; // Set column values to defaults if NULL pointer passed int *len = new int[nc]; double *clb = new double[nc]; double *cub = new double[nc]; double *ob = new double[nc]; double *rr = new double[nr]; double *rhs = new double[nr]; char *sen = new char[nr]; for (i = 0; i < nc; ++i) { len[i] = start[i + 1] - start[i]; } if (collb != NULL) CoinDisjointCopyN(collb, nc, clb); else CoinFillN(clb, nc, 0.0); if (colub != NULL) CoinDisjointCopyN(colub, nc, cub); else CoinFillN(cub, nc, getInfinity()); if (obj != NULL) CoinDisjointCopyN(obj, nc, ob); else CoinFillN(ob, nc, 0.0); if (rowrng != NULL) { for (i = 0; i < nr; i++) { if (rowsen[i] == 'R') { if (rowrng[i] >= 0) { rhs[i] = rowrhs[i] - rowrng[i]; rr[i] = rowrng[i]; } else { rhs[i] = rowrhs[i]; rr[i] = -rowrng[i]; } } else { rhs[i] = rowrhs[i]; rr[i] = 0.0; } } } else { CoinDisjointCopyN(rowrhs, nr, rhs); } CoinDisjointCopyN(rowsen, nr, sen); int objDirection = CPXgetobjsen(env_, getMutableLpPtr()); int err = CPXcopylp(env_, getLpPtr(), nc, nr, // Leave ObjSense alone(set to current value). objDirection, ob, rhs, sen, const_cast< int * >(start), len, const_cast< int * >(index), const_cast< double * >(value), clb, cub, rr); checkCPXerror(err, "CPXcopylp", "loadProblem"); delete[] len; delete[] clb; delete[] cub; delete[] ob; delete[] rr; delete[] rhs; delete[] sen; if (lclRowsen != NULL) delete[] lclRowsen; if (lclRowrhs != NULL) delete[] lclRowrhs; resizeColType(nc); CoinFillN(coltype_, nc, 'C'); } //----------------------------------------------------------------------------- // Read mps files //----------------------------------------------------------------------------- int OsiCpxSolverInterface::readMps(const char *filename, const char *extension) { debugMessage("OsiCpxSolverInterface::readMps(%s, %s)\n", filename, extension); #if 0 std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; int err = CPXreadcopyprob( env_, getLpPtr(), const_cast( fullname.c_str() ), NULL ); checkCPXerror( err, "CPXreadcopyprob", "readMps" ); #endif // just call base class method return OsiSolverInterface::readMps(filename, extension); } //----------------------------------------------------------------------------- // Write mps files //----------------------------------------------------------------------------- void OsiCpxSolverInterface::writeMps(const char *filename, const char *extension, double objSense) const { debugMessage("OsiCpxSolverInterface::writeMps(%s, %s, %g)\n", filename, extension, objSense); // *FIXME* : this will not output ctype information to the MPS file char filetype[4] = "MPS"; std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; int err = CPXwriteprob(env_, getMutableLpPtr(), const_cast< char * >(fullname.c_str()), filetype); checkCPXerror(err, "CPXwriteprob", "writeMps"); } void OsiCpxSolverInterface::passInMessageHandler(CoinMessageHandler *handler) { int err; CPXCHANNELptr cpxresults; CPXCHANNELptr cpxwarning; CPXCHANNELptr cpxerror; CPXCHANNELptr cpxlog; err = CPXgetchannels(env_, &cpxresults, &cpxwarning, &cpxerror, &cpxlog); checkCPXerror(err, "CPXgetchannels", "gutsOfConstructor"); err = CPXdelfuncdest(env_, cpxresults, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXdelfuncdest", "gutsOfConstructor"); err = CPXdelfuncdest(env_, cpxlog, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXdelfuncdest", "gutsOfConstructor"); err = CPXdelfuncdest(env_, cpxwarning, messageHandler(), OsiCpxMessageCallbackWarning); checkCPXerror(err, "CPXdelfuncdest", "gutsOfConstructor"); err = CPXdelfuncdest(env_, cpxerror, messageHandler(), OsiCpxMessageCallbackError); checkCPXerror(err, "CPXdelfuncdest", "gutsOfConstructor"); OsiSolverInterface::passInMessageHandler(handler); err = CPXaddfuncdest(env_, cpxresults, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); err = CPXaddfuncdest(env_, cpxlog, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); err = CPXaddfuncdest(env_, cpxwarning, messageHandler(), OsiCpxMessageCallbackWarning); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); err = CPXaddfuncdest(env_, cpxerror, messageHandler(), OsiCpxMessageCallbackError); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); } //############################################################################# // CPX specific public interfaces //############################################################################# CPXENVptr OsiCpxSolverInterface::getEnvironmentPtr() { assert(env_ != NULL); return env_; } CPXLPptr OsiCpxSolverInterface::getLpPtr(int keepCached) { freeCachedData(keepCached); return getMutableLpPtr(); } //----------------------------------------------------------------------------- const char *OsiCpxSolverInterface::getCtype() const { debugMessage("OsiCpxSolverInterface::getCtype()\n"); return coltype_; } //############################################################################# // Constructors, destructors clone and assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiCpxSolverInterface::OsiCpxSolverInterface() : OsiSolverInterface() , env_(NULL) , lp_(NULL) , hotStartCStat_(NULL) , hotStartCStatSize_(0) , hotStartRStat_(NULL) , hotStartRStatSize_(0) , hotStartMaxIteration_(1000000) , // ??? default iteration limit for strong branching is large obj_(NULL) , collower_(NULL) , colupper_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , rowlower_(NULL) , rowupper_(NULL) , colsol_(NULL) , rowsol_(NULL) , redcost_(NULL) , rowact_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) , coltype_(NULL) , coltypesize_(0) , probtypemip_(false) , domipstart(false) , disableadvbasis(false) { debugMessage("OsiCpxSolverInterface::OsiCpxSolverInterface()\n"); gutsOfConstructor(); } //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiSolverInterface *OsiCpxSolverInterface::clone(bool copyData) const { debugMessage("OsiCpxSolverInterface::clone(%d)\n", copyData); return (new OsiCpxSolverInterface(*this)); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiCpxSolverInterface::OsiCpxSolverInterface(const OsiCpxSolverInterface &source) : OsiSolverInterface(source) , env_(NULL) , lp_(NULL) , hotStartCStat_(NULL) , hotStartCStatSize_(0) , hotStartRStat_(NULL) , hotStartRStatSize_(0) , hotStartMaxIteration_(source.hotStartMaxIteration_) , obj_(NULL) , collower_(NULL) , colupper_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , rowlower_(NULL) , rowupper_(NULL) , colsol_(NULL) , rowsol_(NULL) , redcost_(NULL) , rowact_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) , coltype_(NULL) , coltypesize_(0) , probtypemip_(false) , domipstart(false) , disableadvbasis(false) { debugMessage("OsiCpxSolverInterface::OsiCpxSolverInterface(%p)\n", (void *)&source); gutsOfConstructor(); gutsOfCopy(source); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiCpxSolverInterface::~OsiCpxSolverInterface() { debugMessage("OsiCpxSolverInterface::~OsiCpxSolverInterface()\n"); gutsOfDestructor(); } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiCpxSolverInterface &OsiCpxSolverInterface::operator=(const OsiCpxSolverInterface &rhs) { debugMessage("OsiCpxSolverInterface::operator=(%p)\n", (void *)&rhs); if (this != &rhs) { OsiSolverInterface::operator=(rhs); gutsOfDestructor(); gutsOfConstructor(); if (rhs.lp_ != NULL) gutsOfCopy(rhs); } return *this; } //############################################################################# // Applying cuts //############################################################################# void OsiCpxSolverInterface::applyColCut(const OsiColCut &cc) { debugMessage("OsiCpxSolverInterface::applyColCut(%p)\n", (void *)&cc); const double *cplexColLB = getColLower(); const double *cplexColUB = getColUpper(); const CoinPackedVector &lbs = cc.lbs(); const CoinPackedVector &ubs = cc.ubs(); int i; for (i = 0; i < lbs.getNumElements(); ++i) if (lbs.getElements()[i] > cplexColLB[lbs.getIndices()[i]]) setColLower(lbs.getIndices()[i], lbs.getElements()[i]); for (i = 0; i < ubs.getNumElements(); ++i) if (ubs.getElements()[i] < cplexColUB[ubs.getIndices()[i]]) setColUpper(ubs.getIndices()[i], ubs.getElements()[i]); } //----------------------------------------------------------------------------- void OsiCpxSolverInterface::applyRowCut(const OsiRowCut &rowCut) { debugMessage("OsiCpxSolverInterface::applyRowCut(%p)\n", (void *)&rowCut); int err = 0; double rhs = 0.0; double rng = 0.0; char sns; double lb = rowCut.lb(); double ub = rowCut.ub(); if (lb <= -getInfinity() && ub >= getInfinity()) // free constraint { rhs = -getInfinity(); rng = 2 * getInfinity(); // CPLEX doesn't support free constraints sns = 'R'; // -> implement them as ranged rows with infinite bounds } else if (lb <= -getInfinity()) // <= constraint { rhs = ub; sns = 'L'; } else if (ub >= getInfinity()) // >= constraint { rhs = lb; sns = 'G'; } else if (ub == lb) // = constraint { rhs = ub; sns = 'E'; } else // range constraint { rhs = lb; rng = ub - lb; sns = 'R'; } int rmatbeg = 0; err = CPXaddrows(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_COLUMN), 0, 1, rowCut.row().getNumElements(), &rhs, &sns, &rmatbeg, const_cast< int * >(rowCut.row().getIndices()), const_cast< double * >(rowCut.row().getElements()), NULL, NULL); checkCPXerror(err, "CPXaddrows", "applyRowCut"); if (sns == 'R') { err = CPXchgcoef(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_COLUMN), CPXgetnumrows(env_, getLpPtr(OsiCpxSolverInterface::KEEPCACHED_COLUMN)) - 1, -2, rng); checkCPXerror(err, "CPXchgcoef", "applyRowCut"); } } //############################################################################# // Private methods (non-static and static) and static data //############################################################################# //------------------------------------------------------------------- // Get pointer to CPXLPptr. // const methods should use getMutableLpPtr(). // non-const methods should use getLpPtr(). //------------------------------------------------------------------- CPXLPptr OsiCpxSolverInterface::getMutableLpPtr() const { if (lp_ == NULL) { int err; assert(env_ != NULL); #if 0 //char pn[] = "OSI_CPLEX"; lp_ = CPXcreateprob( env_, &err, pn ); #else std::string pn; getStrParam(OsiProbName, pn); lp_ = CPXcreateprob(env_, &err, const_cast< char * >(pn.c_str())); #endif checkCPXerror(err, "CPXcreateprob", "getMutableLpPtr"); // err = CPXchgprobtype(env_,lp_,CPXPROB_LP); // checkCPXerror( err, "CPXchgprobtype", "getMutableLpPtr" ); assert(lp_ != NULL); } return lp_; } //------------------------------------------------------------------- CPXENVptr OsiCpxSolverInterface::getMutableEnvironmentPtr() const { assert(env_ != NULL); return env_; } //------------------------------------------------------------------- void OsiCpxSolverInterface::gutsOfCopy(const OsiCpxSolverInterface &source) { // Set Objective Sense setObjSense(source.getObjSense()); // Set Rim and constraints const double *obj = source.getObjCoefficients(); const double *rhs = source.getRightHandSide(); const char *sense = source.getRowSense(); const CoinPackedMatrix *cols = source.getMatrixByCol(); const double *lb = source.getColLower(); const double *ub = source.getColUpper(); loadProblem(*cols, lb, ub, obj, sense, rhs, source.getRowRange()); // Set MIP information resizeColType(source.coltypesize_); CoinDisjointCopyN(source.coltype_, source.coltypesize_, coltype_); // Set Solution setColSolution(source.getColSolution()); setRowPrice(source.getRowPrice()); // Should also copy row and col names. #if 0 char** cname = new char*[numcols]; char* cnamestore = NULL; int surplus; err = CPXgetcolname( env_, source.lp_, cname, NULL, 0, &surplus, 0, numcols-1 ); if( err != CPXERR_NO_NAMES ) { cnamestore = new char[-surplus]; err = CPXgetcolname( env_, source.lp_, cname, cnamestore, -surplus, &surplus, 0, numcols-1 ); checkCPXerror( err, "CPXgetcolname", "gutsOfCopy" ); assert( surplus == 0 ); } else { delete [] cname; cname = NULL; } char** rname = new char*[numrows]; char* rnamestore = NULL; err = CPXgetrowname( env_, source.lp_, rname, NULL, 0, &surplus, 0, numrows-1 ); if( err != CPXERR_NO_NAMES ) { rnamestore = new char[-surplus]; err = CPXgetrowname( env_, source.lp_, rname, rnamestore, -surplus, &surplus, 0, numrows-1 ); checkCPXerror( err, "CPXgetrowname", "gutsOfCopy" ); assert( surplus == 0 ); } else { delete [] rname; rname = NULL; } err = CPXcopylpwnames( env_, getLpPtr(), numcols, numrows, objsen, const_cast(obj), const_cast(rhs), const_cast(sense), const_cast(cols->vectorStarts()), const_cast(cols->vectorLengths()), const_cast(cols->indices()), const_cast(cols->elements()), const_cast(lb), const_cast(ub), rng, cname, rname); checkCPXerror( err, "CPXcopylpwnames", "gutsOfCopy" ); if( rname != NULL ) { delete [] rnamestore; delete [] rname; } if( cname != NULL ) { delete [] cnamestore; delete [] cname; } delete [] rng; #endif } //------------------------------------------------------------------- void OsiCpxSolverInterface::gutsOfConstructor() { int err; #if CPX_VERSION >= 800 env_ = CPXopenCPLEX(&err); #else env_ = CPXopenCPLEXdevelop(&err); #endif checkCPXerror(err, "CPXopenCPLEXdevelop", "gutsOfConstructor"); assert(env_ != NULL); CPXCHANNELptr cpxresults; CPXCHANNELptr cpxwarning; CPXCHANNELptr cpxerror; CPXCHANNELptr cpxlog; err = CPXgetchannels(env_, &cpxresults, &cpxwarning, &cpxerror, &cpxlog); checkCPXerror(err, "CPXgetchannels", "gutsOfConstructor"); err = CPXaddfuncdest(env_, cpxresults, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); err = CPXaddfuncdest(env_, cpxlog, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); err = CPXaddfuncdest(env_, cpxwarning, messageHandler(), OsiCpxMessageCallbackWarning); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); err = CPXaddfuncdest(env_, cpxerror, messageHandler(), OsiCpxMessageCallbackError); checkCPXerror(err, "CPXaddfuncdest", "gutsOfConstructor"); /* turn off all output to screen */ err = CPXsetintparam(env_, CPX_PARAM_SCRIND, CPX_OFF); checkCPXerror(err, "CPXsetintparam", "gutsOfConstructor"); #if 0 // CPXcreateprob was moved to getLpPtr() method. lp_ = CPXcreateprob( env_, &err, "OSI_CPLEX" ); checkCPXerror( err, "CPXcreateprob", "gutsOfConstructor" ); // err = CPXchgprobtype(env_,lp_,CPXPROB_LP); // checkCPXerror( err, "CPXchgprobtype", "getMutableLpPtr" ); assert( lp_ != NULL ); #endif } //------------------------------------------------------------------- void OsiCpxSolverInterface::gutsOfDestructor() { if (lp_ != NULL) { int err = CPXfreeprob(env_, &lp_); checkCPXerror(err, "CPXfreeprob", "gutsOfDestructor"); lp_ = NULL; freeAllMemory(); } if (env_ != NULL) { int err = CPXcloseCPLEX(&env_); checkCPXerror(err, "CPXcloseCPLEX", "gutsOfDestructor"); env_ = NULL; } assert(lp_ == NULL); assert(env_ == NULL); assert(obj_ == NULL); assert(collower_ == NULL); assert(colupper_ == NULL); assert(rowsense_ == NULL); assert(rhs_ == NULL); assert(rowrange_ == NULL); assert(rowlower_ == NULL); assert(rowupper_ == NULL); assert(colsol_ == NULL); assert(rowsol_ == NULL); assert(redcost_ == NULL); assert(rowact_ == NULL); assert(matrixByRow_ == NULL); assert(matrixByCol_ == NULL); assert(coltype_ == NULL); assert(coltypesize_ == 0); } //------------------------------------------------------------------- /// free cached vectors void OsiCpxSolverInterface::freeCachedColRim() { freeCacheDouble(obj_); freeCacheDouble(collower_); freeCacheDouble(colupper_); assert(obj_ == NULL); assert(collower_ == NULL); assert(colupper_ == NULL); } void OsiCpxSolverInterface::freeCachedRowRim() { freeCacheChar(rowsense_); freeCacheDouble(rhs_); freeCacheDouble(rowrange_); freeCacheDouble(rowlower_); freeCacheDouble(rowupper_); assert(rowsense_ == NULL); assert(rhs_ == NULL); assert(rowrange_ == NULL); assert(rowlower_ == NULL); assert(rowupper_ == NULL); } void OsiCpxSolverInterface::freeCachedMatrix() { freeCacheMatrix(matrixByRow_); freeCacheMatrix(matrixByCol_); assert(matrixByRow_ == NULL); assert(matrixByCol_ == NULL); } void OsiCpxSolverInterface::freeCachedResults() { freeCacheDouble(colsol_); freeCacheDouble(rowsol_); freeCacheDouble(redcost_); freeCacheDouble(rowact_); assert(colsol_ == NULL); assert(rowsol_ == NULL); assert(redcost_ == NULL); assert(rowact_ == NULL); } void OsiCpxSolverInterface::freeCachedData(int keepCached) { if (!(keepCached & OsiCpxSolverInterface::KEEPCACHED_COLUMN)) freeCachedColRim(); if (!(keepCached & OsiCpxSolverInterface::KEEPCACHED_ROW)) freeCachedRowRim(); if (!(keepCached & OsiCpxSolverInterface::KEEPCACHED_MATRIX)) freeCachedMatrix(); if (!(keepCached & OsiCpxSolverInterface::KEEPCACHED_RESULTS)) freeCachedResults(); } void OsiCpxSolverInterface::freeAllMemory() { freeCachedData(); if (hotStartCStat_ != NULL) delete[] hotStartCStat_; if (hotStartRStat_ != NULL) delete[] hotStartRStat_; hotStartCStat_ = NULL; hotStartCStatSize_ = 0; hotStartRStat_ = NULL; hotStartRStatSize_ = 0; freeColType(); } //############################################################################# // Resets as if default constructor void OsiCpxSolverInterface::reset() { int err; CPXCHANNELptr cpxresults; CPXCHANNELptr cpxwarning; CPXCHANNELptr cpxerror; CPXCHANNELptr cpxlog; err = CPXgetchannels(env_, &cpxresults, &cpxwarning, &cpxerror, &cpxlog); err = CPXdelfuncdest(env_, cpxresults, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXdelfuncdest", "reset"); err = CPXdelfuncdest(env_, cpxlog, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXdelfuncdest", "reset"); err = CPXdelfuncdest(env_, cpxwarning, messageHandler(), OsiCpxMessageCallbackWarning); checkCPXerror(err, "CPXdelfuncdest", "reset"); err = CPXdelfuncdest(env_, cpxerror, messageHandler(), OsiCpxMessageCallbackError); checkCPXerror(err, "CPXdelfuncdest", "reset"); setInitialData(); // clear base class (this may reset the message handler, too) err = CPXaddfuncdest(env_, cpxresults, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXaddfuncdest", "reset"); err = CPXaddfuncdest(env_, cpxlog, messageHandler(), OsiCpxMessageCallbackResultLog); checkCPXerror(err, "CPXaddfuncdest", "reset"); err = CPXaddfuncdest(env_, cpxwarning, messageHandler(), OsiCpxMessageCallbackWarning); checkCPXerror(err, "CPXaddfuncdest", "reset"); err = CPXaddfuncdest(env_, cpxerror, messageHandler(), OsiCpxMessageCallbackError); checkCPXerror(err, "CPXaddfuncdest", "reset"); if (lp_ != NULL) { // kill old LP int err = CPXfreeprob(env_, &lp_); checkCPXerror(err, "CPXfreeprob", "loadProblem"); lp_ = NULL; freeAllMemory(); } } #if CPX_VERSION >= 900 /**********************************************************************/ /* Returns 1 if can just do getBInv etc 2 if has all OsiSimplex methods and 0 if it has none */ int OsiCpxSolverInterface::canDoSimplexInterface() const { return 1; } /**********************************************************************/ bool OsiCpxSolverInterface::basisIsAvailable() const { CPXLPptr lp = getMutableLpPtr(); int solnmethod, solntype, pfeasind, dfeasind; int status = CPXsolninfo(env_, lp, &solnmethod, &solntype, &pfeasind, &dfeasind); if (status) { return false; } if (solntype == CPX_BASIC_SOLN) { return true; } return false; } /**********************************************************************/ /* CPLEX return codes: For cstat: CPX_AT_LOWER 0 : variable at lower bound CPX_BASIC 1 : variable is basic CPX_AT_UPPER 2 : variable at upper bound CPX_FREE_SUPER 3 : variable free and non-basic For rstat: Non ranged rows: CPX_AT_LOWER 0 : associated slack/surplus/artificial variable non-basic at value 0.0 CPX_BASIC 1 : associated slack/surplus/artificial variable basic Ranged rows: CPX_AT_LOWER 0 : associated slack/surplus/artificial variable non-basic at its lower bound CPX_BASIC 1 : associated slack/surplus/artificial variable basic CPX_AT_UPPER 2 : associated slack/surplus/artificial variable non-basic at upper bound Cplex adds a slack with coeff +1 in <= and =, with coeff -1 in >=, slack being non negative. We switch in order to get a "Clp tableau" where all the slacks have coeff +1. If a slack for >= is non basic, invB is not changed; column of the slack in opt tableau is flipped. If slack for >= is basic, corresp. row of invB is flipped; whole row of opt tableau is flipped; then whole column for the slack in opt tableau is flipped. */ /* Osi return codes: 0: free 1: basic 2: upper 3: lower */ void OsiCpxSolverInterface::getBasisStatus(int *cstat, int *rstat) const { CPXLPptr lp = getMutableLpPtr(); int status = CPXgetbase(env_, lp, cstat, rstat); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBasisStatus(): Unable to get base\n"); exit(1); } int ncol = getNumCols(); int nrow = getNumRows(); const int objsense = (int)getObjSense(); const double *dual = getRowPrice(); const double *row_act = getRowActivity(); const double *rowLower = getRowLower(); const double *rowUpper = getRowUpper(); char *sense = new char[nrow]; status = CPXgetsense(env_, lp, sense, 0, nrow - 1); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBasisStatus(): Unable to get sense for the rows\n"); exit(1); } for (int i = 0; i < ncol; i++) { switch (cstat[i]) { case 0: cstat[i] = 3; break; case 1: break; case 2: break; case 3: cstat[i] = 0; break; default: printf("### ERROR: OsiCpxSolverInterface::getBasisStatus(): unknown column status: %d\n", cstat[i]); break; } } if (objsense == 1) { for (int i = 0; i < nrow; i++) { switch (rstat[i]) { case 0: rstat[i] = 3; if (sense[i] == 'E') { if (dual[i] > 0) { rstat[i] = 2; } } if (sense[i] == 'R') { if (rowUpper[i] > rowLower[i] + 1e-6) { if (row_act[i] < rowUpper[i] - 1e-6) { rstat[i] = 2; } } else { if (dual[i] > 0) { rstat[i] = 2; } } } if (sense[i] == 'G') { rstat[i] = 2; } break; case 1: break; case 2: if (sense[i] == 'E') { if (dual[i] < 0) { rstat[i] = 3; } } if (sense[i] == 'R') { if (rowUpper[i] > rowLower[i] + 1e-6) { if (row_act[i] > rowLower[i] + 1e-6) { rstat[i] = 3; } } else { if (dual[i] < 0) { rstat[i] = 3; } } } break; default: printf("### ERROR: OsiCpxSolverInterface::getBasisStatus(): unknown row status: %d\n", rstat[i]); break; } } } else { // objsense == -1 for (int i = 0; i < nrow; i++) { switch (rstat[i]) { case 0: rstat[i] = 3; if (sense[i] == 'E') { if (dual[i] < 0) { rstat[i] = 2; } } if (sense[i] == 'R') { if (rowUpper[i] > rowLower[i] + 1e-6) { if (row_act[i] < rowUpper[i] - 1e-6) { rstat[i] = 2; } } else { if (dual[i] < 0) { rstat[i] = 2; } } } if (sense[i] == 'G') { rstat[i] = 2; } break; case 1: break; case 2: if (sense[i] == 'E') { if (dual[i] > 0) { rstat[i] = 3; } } if (sense[i] == 'R') { if (rowUpper[i] > rowLower[i] + 1e-6) { if (row_act[i] > rowLower[i] + 1e-6) { rstat[i] = 3; } } else { if (dual[i] > 0) { rstat[i] = 3; } } } break; default: printf("### ERROR: OsiCpxSolverInterface::getBasisStatus(): unknown row status: %d\n", rstat[i]); break; } } } delete[] sense; } /**********************************************************************/ void OsiCpxSolverInterface::getBInvARow(int row, double *z, double *slack) const { CPXLPptr lp = getMutableLpPtr(); int nrow = getNumRows(); int ncol = getNumCols(); char *sense = new char[nrow]; int status = CPXgetsense(env_, lp, sense, 0, nrow - 1); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBInvARow(): Unable to get senses for the rows\n"); exit(1); } status = CPXbinvarow(env_, lp, row, z); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBInvARow(): Unable to get row %d of the tableau\n", row); exit(1); } if (slack != NULL) { status = CPXbinvrow(env_, lp, row, slack); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBInvARow(): Unable to get row %d of B inverse\n", row); exit(1); } // slack contains now the row of BInv(cplex); // slack(cplex) is obtained by flipping in slack all entries for >= constr // slack(clp) is obtained by flipping the same entries in slack(cplex) // i.e. slack(clp) is the current slack. } if (sense[row] == 'G') { int *ind_bas = new int[nrow]; int ind_slack = ncol + row; getBasics(ind_bas); for (int i = 0; i < nrow; i++) { if (ind_bas[i] == ind_slack) { // slack for row is basic; whole row // must be flipped for (int j = 0; j < nrow; j++) { z[j] = -z[j]; } if (slack != NULL) { for (int j = 0; j < nrow; j++) { slack[j] = -slack[j]; } } } break; } delete[] ind_bas; } delete[] sense; } /* getBInvARow */ /**********************************************************************/ void OsiCpxSolverInterface::getBInvRow(int row, double *z) const { CPXLPptr lp = getMutableLpPtr(); int nrow = getNumRows(); int ncol = getNumCols(); int status = CPXbinvrow(env_, lp, row, z); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBInvRow(): Unable to get row %d of the basis inverse\n", row); exit(1); } int *ind_bas = new int[nrow]; getBasics(ind_bas); if (ind_bas[row] >= ncol) { // binv row corresponds to a slack variable int Arow = ind_bas[row] - ncol; // Arow is the number of the row in the problem matrix which this slack belongs to char sense; status = CPXgetsense(env_, lp, &sense, Arow, Arow); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBInvRow(): Unable to get senses for row %d\n", Arow); exit(1); } if (sense == 'G') { // slack has coeff -1 in Cplex; thus row in binv must be flipped for (int j = 0; j < nrow; j++) { z[j] = -z[j]; } } } delete[] ind_bas; /* char sense; status = CPXgetsense(env_, lp, &sense, row, row); if(status) { printf("### ERROR: OsiCpxSolverInterface::getBInvRow(): Unable to get senses for row %d\n", row); exit(1); } if(sense == 'G') { int *ind_bas = new int[nrow]; getBasics(ind_bas); for(int i=0; i ncol && sense[ind_bas[i] - ncol] == 'G') vec[i] = -vec[i]; // slack for row is basic; whole row must be flipped delete[] sense; delete[] ind_bas; } /* getBInvACol */ /**********************************************************************/ void OsiCpxSolverInterface::getBInvCol(int col, double *vec) const { CPXLPptr lp = getMutableLpPtr(); int status = CPXbinvcol(env_, lp, col, vec); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBInvCol(): Unable to get column %d of the basis inverse\n", col); exit(1); } int nrow = getNumRows(); int ncol = getNumCols(); char *sense = new char[nrow]; status = CPXgetsense(env_, lp, sense, 0, nrow - 1); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBInvCol(): Unable to get senses for the rows\n"); exit(1); } int *ind_bas = new int[nrow]; getBasics(ind_bas); for (int i = 0; i < nrow; i++) if (ind_bas[i] > ncol && sense[ind_bas[i] - ncol] == 'G') vec[i] = -vec[i]; // slack for row i is basic; whole row must be flipped delete[] sense; delete[] ind_bas; } /* getBInvCol */ /**********************************************************************/ void OsiCpxSolverInterface::getBasics(int *index) const { int ncol = getNumCols(); int nrow = getNumRows(); CPXLPptr lp = getMutableLpPtr(); double *cplex_trash = new double[nrow]; int status = CPXgetbhead(env_, lp, index, cplex_trash); if (status) { printf("### ERROR: OsiCpxSolverInterface::getBasics(): Unable to get basis head\n"); exit(1); } for (int i = 0; i < nrow; i++) { if (index[i] < 0) { index[i] = ncol - 1 - index[i]; } } delete[] cplex_trash; } /* getBasics */ #else /* not CPX_VERSION >= 900 */ /**********************************************************************/ /* Returns 1 if can just do getBInv etc 2 if has all OsiSimplex methods and 0 if it has none */ int OsiCpxSolverInterface::canDoSimplexInterface() const { return 0; } /**********************************************************************/ bool OsiCpxSolverInterface::basisIsAvailable() const { printf("### ERROR: OsiCpxSolverInterface::basisIsAvailable(): Cplex version lower than 9.0\n"); exit(1); return false; } /**********************************************************************/ void OsiCpxSolverInterface::getBasisStatus(int *cstat, int *rstat) const { printf("### ERROR: OsiCpxSolverInterface::getBasisStatus(): Cplex version lower than 9.0\n"); exit(1); } /**********************************************************************/ void OsiCpxSolverInterface::getBInvARow(int row, double *z, double *slack) const { printf("### ERROR: OsiCpxSolverInterface::getBInvARow(): Cplex version lower than 9.0\n"); exit(1); } /* getBInvARow */ /**********************************************************************/ void OsiCpxSolverInterface::getBInvRow(int row, double *z) const { printf("### ERROR: OsiCpxSolverInterface::getBInvRow(): Cplex version lower than 9.0\n"); exit(1); } /* getBInvRow */ /**********************************************************************/ void OsiCpxSolverInterface::getBInvACol(int col, double *vec) const { printf("### ERROR: OsiCpxSolverInterface::getBInvACol(): Cplex version lower than 9.0\n"); exit(1); } /* getBInvACol */ /**********************************************************************/ void OsiCpxSolverInterface::getBInvCol(int col, double *vec) const { printf("### ERROR: OsiCpxSolverInterface::getBInvCol(): Cplex version lower than 9.0\n"); exit(1); } /* getBInvCol */ /**********************************************************************/ void OsiCpxSolverInterface::getBasics(int *index) const { printf("### ERROR: OsiCpxSolverInterface::getBasics(): Cplex version lower than 9.0\n"); exit(1); } /* getBasics */ #endif /* not CPX_VERSION >= 900 */ /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiGrb/0000755000175200017520000000000013434203623013561 5ustar coincoinDyLP-1.10.4/Osi/src/OsiGrb/Makefile.in0000644000175200017520000005526113200225426015633 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2009 Stefan Vigerske and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = src/OsiGrb DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiGrb_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) \ @DEPENDENCY_LINKING_TRUE@ ../Osi/libOsi.la \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) am_libOsiGrb_la_OBJECTS = OsiGrbSolverInterface.lo libOsiGrb_la_OBJECTS = $(am_libOsiGrb_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiGrb_la_SOURCES) DIST_SOURCES = $(libOsiGrb_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiGrb ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiGrb.la # List all source files for this library, including headers libOsiGrb_la_SOURCES = OsiGrbSolverInterface.cpp OsiGrbSolverInterface.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiGrb_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(GRBLIB) # This is for libtool (on Windows) libOsiGrb_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ -I`$(CYGPATH_W) $(GRBINCDIR)` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiGrbSolverInterface.hpp 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiGrb/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiGrb/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 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiGrb.la: $(libOsiGrb_la_OBJECTS) $(libOsiGrb_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiGrb_la_LDFLAGS) $(libOsiGrb_la_OBJECTS) $(libOsiGrb_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiGrbSolverInterface.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: 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: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags 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-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ 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 uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # 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: DyLP-1.10.4/Osi/src/OsiGrb/OsiGrbSolverInterface.cpp0000644000175200017520000035377713414504222020511 0ustar coincoin//----------------------------------------------------------------------------- // name: OSI Interface for Gurobi // template: OSI Cplex Interface written by T. Achterberg // author: Stefan Vigerske // Humboldt University Berlin // license: this file may be freely distributed under the terms of EPL // comments: please scan this file for '???' and 'TODO' and read the comments //----------------------------------------------------------------------------- // Copyright (C) 2009 Humboldt University Berlin and others. // All Rights Reserved. // $Id: OsiGrbSolverInterface.cpp 2197 2019-01-06 23:00:34Z unxusr $ #include #include #include #include #include "CoinPragma.hpp" #include "CoinError.hpp" #include "OsiConfig.h" #include "OsiGrbSolverInterface.hpp" #include "OsiCuts.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" extern "C" { #include "gurobi_c.h" } /* A utility definition which allows for easy suppression of unused variable warnings from GCC. */ #ifndef UNUSED #if defined(__GNUC__) #define UNUSED __attribute__((unused)) #else #define UNUSED #endif #endif //#define DEBUG 1 #ifdef DEBUG #define debugMessage printf("line %4d: ", __LINE__) & printf #else #define debugMessage \ if (false) \ printf #endif #define GUROBI_CALL(m, x) \ do { \ int _retcode; \ if ((_retcode = (x)) != 0) { \ char s[1001]; \ if (OsiGrbSolverInterface::globalenv_) { \ sprintf(s, "Error <%d> from GUROBI function call: ", _retcode); \ strncat(s, GRBgeterrormsg(OsiGrbSolverInterface::globalenv_), 1000); \ } else \ sprintf(s, "Error <%d> from GUROBI function call (no license?).", _retcode); \ debugMessage("%s:%d: %s", __FILE__, __LINE__, s); \ throw CoinError(s, m, "OsiGrbSolverInterface", __FILE__, __LINE__); \ } \ } while (false) template < bool > struct CompileTimeAssert; template <> struct CompileTimeAssert< true > { }; #if GRB_VERSION_MAJOR < 4 #define GRB_METHOD_DUAL GRB_LPMETHOD_DUAL #define GRB_METHOD_PRIMAL GRB_LPMETHOD_PRIMAL #define GRB_INT_PAR_METHOD GRB_INT_PAR_LPMETHOD #endif //############################################################################# // A couple of helper functions //############################################################################# inline void freeCacheDouble(double *&ptr) { if (ptr != NULL) { delete[] ptr; ptr = NULL; } } inline void freeCacheChar(char *&ptr) { if (ptr != NULL) { delete[] ptr; ptr = NULL; } } inline void freeCacheMatrix(CoinPackedMatrix *&ptr) { if (ptr != NULL) { delete ptr; ptr = NULL; } } void OsiGrbSolverInterface::switchToLP(void) { debugMessage("OsiGrbSolverInterface::switchToLP()\n"); if (probtypemip_) { GRBmodel *lp = getMutableLpPtr(); int nc = getNumCols(); char *contattr = new char[nc]; CoinFillN(contattr, nc, 'C'); GUROBI_CALL("switchToLP", GRBsetcharattrarray(lp, GRB_CHAR_ATTR_VTYPE, 0, nc, contattr)); delete[] contattr; probtypemip_ = false; } } void OsiGrbSolverInterface::switchToMIP(void) { debugMessage("OsiGrbSolverInterface::switchToMIP()\n"); if (!probtypemip_) { GRBmodel *lp = getMutableLpPtr(); int nc = getNumCols(); assert(coltype_ != NULL); GUROBI_CALL("switchToMIP", GRBsetcharattrarray(lp, GRB_CHAR_ATTR_VTYPE, 0, nc, coltype_)); probtypemip_ = true; } } void OsiGrbSolverInterface::resizeColSpace(int minsize) { debugMessage("OsiGrbSolverInterface::resizeColSpace()\n"); if (minsize > colspace_) { int newcolspace = 2 * colspace_; if (minsize > newcolspace) newcolspace = minsize; char *newcoltype = new char[newcolspace]; if (coltype_ != NULL) { CoinDisjointCopyN(coltype_, colspace_, newcoltype); delete[] coltype_; } coltype_ = newcoltype; if (colmap_O2G != NULL) { int *newcolmap_O2G = new int[newcolspace]; CoinDisjointCopyN(colmap_O2G, colspace_, newcolmap_O2G); delete[] colmap_O2G; colmap_O2G = newcolmap_O2G; } if (colmap_G2O != NULL) { int *newcolmap_G2O = new int[newcolspace + auxcolspace]; CoinDisjointCopyN(colmap_G2O, colspace_ + auxcolspace, newcolmap_G2O); delete[] colmap_G2O; colmap_G2O = newcolmap_G2O; } colspace_ = newcolspace; } assert(minsize == 0 || coltype_ != NULL); assert(colspace_ >= minsize); } void OsiGrbSolverInterface::freeColSpace() { debugMessage("OsiGrbSolverInterface::freeColSpace()\n"); if (colspace_ > 0) { delete[] coltype_; delete[] colmap_O2G; delete[] colmap_G2O; coltype_ = NULL; colmap_O2G = NULL; colmap_G2O = NULL; colspace_ = 0; auxcolspace = 0; } assert(coltype_ == NULL); assert(colmap_O2G == NULL); assert(colmap_G2O == NULL); } void OsiGrbSolverInterface::resizeAuxColSpace(int minsize) { debugMessage("OsiGrbSolverInterface::resizeAuxColSpace()\n"); if (minsize > auxcolspace) { int newauxcolspace = 2 * auxcolspace; if (minsize > newauxcolspace) newauxcolspace = minsize; if (colmap_G2O != NULL) { int *newcolmap_G2O = new int[colspace_ + newauxcolspace]; CoinDisjointCopyN(colmap_G2O, colspace_ + auxcolspace, newcolmap_G2O); delete[] colmap_G2O; colmap_G2O = newcolmap_G2O; } auxcolspace = newauxcolspace; } } /// resizes auxcolind vector to current number of rows and inits values to -1 void OsiGrbSolverInterface::resizeAuxColIndSpace() { debugMessage("OsiGrbSolverInterface::resizeAuxColIndSpace()\n"); int numrows = getNumRows(); if (auxcolindspace < numrows) { int newspace = 2 * auxcolindspace; if (numrows > newspace) newspace = numrows; int *newauxcolind = new int[newspace]; if (auxcolindspace > 0) CoinDisjointCopyN(auxcolind, auxcolindspace, newauxcolind); for (int i = auxcolindspace; i < newspace; ++i) newauxcolind[i] = -1; delete[] auxcolind; auxcolind = newauxcolind; auxcolindspace = newspace; } } //############################################################################# // Solve methods //############################################################################# void OsiGrbSolverInterface::initialSolve() { debugMessage("OsiGrbSolverInterface::initialSolve()\n"); bool takeHint; OsiHintStrength strength; int prevalgorithm = -1; switchToLP(); GRBmodel *lp = getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS); /* set whether dual or primal, if hint has been given */ getHintParam(OsiDoDualInInitial, takeHint, strength); if (strength != OsiHintIgnore) { GUROBI_CALL("initialSolve", GRBgetintparam(GRBgetenv(lp), GRB_INT_PAR_METHOD, &prevalgorithm)); GUROBI_CALL("initialSolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_METHOD, takeHint ? GRB_METHOD_DUAL : GRB_METHOD_PRIMAL)); } /* set whether presolve or not */ int presolve = GRB_PRESOLVE_AUTO; getHintParam(OsiDoPresolveInInitial, takeHint, strength); if (strength != OsiHintIgnore) presolve = takeHint ? GRB_PRESOLVE_AUTO : GRB_PRESOLVE_OFF; GUROBI_CALL("initialSolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_PRESOLVE, presolve)); /* set whether output or not */ GUROBI_CALL("initialSolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_OUTPUTFLAG, (messageHandler()->logLevel() > 0))); /* optimize */ GUROBI_CALL("initialSolve", GRBoptimize(lp)); /* reoptimize without presolve if status unclear */ int stat; GUROBI_CALL("initialSolve", GRBgetintattr(lp, GRB_INT_ATTR_STATUS, &stat)); if (stat == GRB_INF_OR_UNBD && presolve != GRB_PRESOLVE_OFF) { GUROBI_CALL("initialSolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_PRESOLVE, GRB_PRESOLVE_OFF)); GUROBI_CALL("initialSolve", GRBoptimize(lp)); GUROBI_CALL("initialSolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_PRESOLVE, presolve)); } /* reset method parameter, if changed */ if (prevalgorithm != -1) GUROBI_CALL("initialSolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_METHOD, prevalgorithm)); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::resolve() { debugMessage("OsiGrbSolverInterface::resolve()\n"); bool takeHint; OsiHintStrength strength; int prevalgorithm = -1; switchToLP(); GRBmodel *lp = getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS); /* set whether primal or dual */ getHintParam(OsiDoDualInResolve, takeHint, strength); if (strength != OsiHintIgnore) { GUROBI_CALL("resolve", GRBgetintparam(GRBgetenv(lp), GRB_INT_PAR_METHOD, &prevalgorithm)); GUROBI_CALL("resolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_METHOD, takeHint ? GRB_METHOD_DUAL : GRB_METHOD_PRIMAL)); } /* set whether presolve or not */ int presolve = GRB_PRESOLVE_OFF; getHintParam(OsiDoPresolveInResolve, takeHint, strength); if (strength != OsiHintIgnore) presolve = takeHint ? GRB_PRESOLVE_AUTO : GRB_PRESOLVE_OFF; GUROBI_CALL("resolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_PRESOLVE, presolve)); /* set whether output or not */ GUROBI_CALL("resolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_OUTPUTFLAG, (messageHandler()->logLevel() > 0))); /* optimize */ GUROBI_CALL("resolve", GRBoptimize(lp)); /* reoptimize if status unclear */ int stat; GUROBI_CALL("resolve", GRBgetintattr(lp, GRB_INT_ATTR_STATUS, &stat)); if (stat == GRB_INF_OR_UNBD && presolve != GRB_PRESOLVE_OFF) { GUROBI_CALL("resolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_PRESOLVE, GRB_PRESOLVE_OFF)); GUROBI_CALL("resolve", GRBoptimize(lp)); GUROBI_CALL("resolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_PRESOLVE, presolve)); } /* reset method parameter, if changed */ if (prevalgorithm != -1) GUROBI_CALL("initialSolve", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_METHOD, prevalgorithm)); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::branchAndBound() { debugMessage("OsiGrbSolverInterface::branchAndBound()\n"); switchToMIP(); if (colsol_ != NULL && domipstart) { int *discridx = new int[getNumIntegers()]; double *discrval = new double[getNumIntegers()]; int j = 0; for (int i = 0; i < getNumCols() && j < getNumIntegers(); ++i) { if (!isInteger(i) && !isBinary(i)) continue; discridx[j] = i; discrval[j] = colsol_[i]; ++j; } assert(j == getNumIntegers()); GUROBI_CALL("branchAndBound", GRBsetdblattrlist(getMutableLpPtr(), GRB_DBL_ATTR_START, getNumIntegers(), discridx, discrval)); delete[] discridx; delete[] discrval; } GRBmodel *lp = getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS); GUROBI_CALL("branchAndBound", GRBsetintparam(GRBgetenv(lp), GRB_INT_PAR_OUTPUTFLAG, (messageHandler()->logLevel() > 0))); GUROBI_CALL("branchAndBound", GRBoptimize(lp)); } //############################################################################# // Parameter related methods //############################################################################# bool OsiGrbSolverInterface::setIntParam(OsiIntParam key, int value) { debugMessage("OsiGrbSolverInterface::setIntParam(%d, %d)\n", key, value); switch (key) { case OsiMaxNumIteration: if (GRBsetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_ITERATIONLIMIT, (double)value) != 0) { *messageHandler() << "Warning: Setting GUROBI iteration limit to" << value << "failed." << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; return false; } return true; case OsiMaxNumIterationHotStart: if (value >= 0) { hotStartMaxIteration_ = value; return true; } return false; case OsiNameDiscipline: if (value < 0 || value > 3) return false; nameDisc_ = value; return true; case OsiLastIntParam: default: return false; } } //----------------------------------------------------------------------------- bool OsiGrbSolverInterface::setDblParam(OsiDblParam key, double value) { debugMessage("OsiGrbSolverInterface::setDblParam(%d, %g)\n", key, value); switch (key) { // Gurobi does not have primal or dual objective limits // case OsiDualObjectiveLimit: // break; // case OsiPrimalObjectiveLimit: // break; case OsiDualTolerance: if (GRBsetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_OPTIMALITYTOL, value) != 0) { *messageHandler() << "Warning: Setting GUROBI dual (i.e., optimality) tolerance to" << value << "failed." << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; return false; } return true; case OsiPrimalTolerance: if (GRBsetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_FEASIBILITYTOL, value) != 0) { *messageHandler() << "Warning: Setting GUROBI primal (i.e., feasiblity) tolerance to" << value << "failed." << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; return false; } return true; case OsiObjOffset: return OsiSolverInterface::setDblParam(key, value); case OsiLastDblParam: default: return false; } } //----------------------------------------------------------------------------- bool OsiGrbSolverInterface::setStrParam(OsiStrParam key, const std::string &value) { debugMessage("OsiGrbSolverInterface::setStrParam(%d, %s)\n", key, value.c_str()); switch (key) { case OsiProbName: GUROBI_CALL("setStrParam", GRBsetstrattr(getLpPtr(), GRB_STR_ATTR_MODELNAME, const_cast< char * >(value.c_str()))); return true; case OsiSolverName: case OsiLastStrParam: default: return false; } } // Set a hint parameter bool OsiGrbSolverInterface::setHintParam(OsiHintParam key, bool yesNo, OsiHintStrength strength, void *otherInfo) { debugMessage("OsiGrbSolverInterface::setHintParam(%d, %d)\n", key, yesNo); if (key == OsiDoScale) { GUROBI_CALL("setHintParam", GRBsetintparam(GRBgetenv(getMutableLpPtr()), GRB_INT_PAR_SCALEFLAG, yesNo)); OsiSolverInterface::setHintParam(key, yesNo, strength, otherInfo); return true; } return OsiSolverInterface::setHintParam(key, yesNo, strength, otherInfo); } //----------------------------------------------------------------------------- bool OsiGrbSolverInterface::getIntParam(OsiIntParam key, int &value) const { debugMessage("OsiGrbSolverInterface::getIntParam(%d)\n", key); switch (key) { case OsiMaxNumIteration: double dblval; GUROBI_CALL("getIntParam", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getIntParam", GRBgetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_ITERATIONLIMIT, &dblval)); value = (int)dblval; return true; case OsiMaxNumIterationHotStart: value = hotStartMaxIteration_; return true; case OsiNameDiscipline: value = nameDisc_; return true; case OsiLastIntParam: default: return false; } } //----------------------------------------------------------------------------- bool OsiGrbSolverInterface::getDblParam(OsiDblParam key, double &value) const { debugMessage("OsiGrbSolverInterface::getDblParam(%d)\n", key); GUROBI_CALL("getDblParam", GRBupdatemodel(getMutableLpPtr())); switch (key) { // Gurobi does not have primal or dual objective limits // case OsiDualObjectiveLimit: // break; // case OsiPrimalObjectiveLimit: // break; case OsiDualTolerance: GUROBI_CALL("getDblParam", GRBgetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_OPTIMALITYTOL, &value)); return true; case OsiPrimalTolerance: GUROBI_CALL("getDblParam", GRBgetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_FEASIBILITYTOL, &value)); return true; case OsiObjOffset: return OsiSolverInterface::getDblParam(key, value); case OsiLastDblParam: default: return false; } } //----------------------------------------------------------------------------- bool OsiGrbSolverInterface::getStrParam(OsiStrParam key, std::string &value) const { debugMessage("OsiGrbSolverInterface::getStrParam(%d)\n", key); switch (key) { case OsiProbName: { char *name = NULL; GUROBI_CALL("getStrParam", GRBgetstrattr(getMutableLpPtr(), GRB_STR_ATTR_MODELNAME, &name)); assert(name != NULL); value = name; return true; } case OsiSolverName: value = "gurobi"; return true; case OsiLastStrParam: default: return false; } } // Get a hint parameter bool OsiGrbSolverInterface::getHintParam(OsiHintParam key, bool &yesNo, OsiHintStrength &strength, void *&otherInformation) const { debugMessage("OsiGrbSolverInterface::getHintParam[1](%d)\n", key); if (key == OsiDoScale) { OsiSolverInterface::getHintParam(key, yesNo, strength, otherInformation); GUROBI_CALL("getHintParam", GRBupdatemodel(getMutableLpPtr())); int value; GUROBI_CALL("getHintParam", GRBgetintparam(GRBgetenv(getMutableLpPtr()), GRB_INT_PAR_SCALEFLAG, &value)); yesNo = value; return true; } return OsiSolverInterface::getHintParam(key, yesNo, strength, otherInformation); } // Get a hint parameter bool OsiGrbSolverInterface::getHintParam(OsiHintParam key, bool &yesNo, OsiHintStrength &strength) const { debugMessage("OsiGrbSolverInterface::getHintParam[2](%d)\n", key); if (key == OsiDoScale) { OsiSolverInterface::getHintParam(key, yesNo, strength); GUROBI_CALL("getHintParam", GRBupdatemodel(getMutableLpPtr())); int value; GUROBI_CALL("getHintParam", GRBgetintparam(GRBgetenv(getMutableLpPtr()), GRB_INT_PAR_SCALEFLAG, &value)); yesNo = value; return true; } return OsiSolverInterface::getHintParam(key, yesNo, strength); } // Get a hint parameter bool OsiGrbSolverInterface::getHintParam(OsiHintParam key, bool &yesNo) const { debugMessage("OsiGrbSolverInterface::getHintParam[3](%d)\n", key); if (key == OsiDoScale) { OsiSolverInterface::getHintParam(key, yesNo); GUROBI_CALL("getHintParam", GRBupdatemodel(getMutableLpPtr())); int value; GUROBI_CALL("getHintParam", GRBgetintparam(GRBgetenv(getMutableLpPtr()), GRB_INT_PAR_SCALEFLAG, &value)); yesNo = value; return true; } return OsiSolverInterface::getHintParam(key, yesNo); } //############################################################################# // Methods returning info on how the solution process terminated //############################################################################# bool OsiGrbSolverInterface::isAbandoned() const { debugMessage("OsiGrbSolverInterface::isAbandoned()\n"); GUROBI_CALL("isAbandoned", GRBupdatemodel(getMutableLpPtr())); int stat; GUROBI_CALL("isAbandoned", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_STATUS, &stat)); return ( stat == GRB_LOADED || stat == GRB_NUMERIC || stat == GRB_INTERRUPTED); } bool OsiGrbSolverInterface::isProvenOptimal() const { debugMessage("OsiGrbSolverInterface::isProvenOptimal()\n"); GUROBI_CALL("isProvenOptimal", GRBupdatemodel(getMutableLpPtr())); int stat; GUROBI_CALL("isProvenOptimal", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_STATUS, &stat)); return (stat == GRB_OPTIMAL); } bool OsiGrbSolverInterface::isProvenPrimalInfeasible() const { debugMessage("OsiGrbSolverInterface::isProvenPrimalInfeasible()\n"); GUROBI_CALL("isProvenPrimalInfeasible", GRBupdatemodel(getMutableLpPtr())); int stat; GUROBI_CALL("isProvenPrimalInfeasible", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_STATUS, &stat)); return (stat == GRB_INFEASIBLE); } bool OsiGrbSolverInterface::isProvenDualInfeasible() const { debugMessage("OsiGrbSolverInterface::isProvenDualInfeasible()\n"); GUROBI_CALL("isProvenDualInfeasible", GRBupdatemodel(getMutableLpPtr())); int stat; GUROBI_CALL("isProvenDualInfeasible", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_STATUS, &stat)); return (stat == GRB_UNBOUNDED); } bool OsiGrbSolverInterface::isPrimalObjectiveLimitReached() const { debugMessage("OsiGrbSolverInterface::isPrimalObjectiveLimitReached()\n"); return false; } bool OsiGrbSolverInterface::isDualObjectiveLimitReached() const { debugMessage("OsiGrbSolverInterface::isDualObjectiveLimitReached()\n"); return false; } bool OsiGrbSolverInterface::isIterationLimitReached() const { debugMessage("OsiGrbSolverInterface::isIterationLimitReached()\n"); GUROBI_CALL("isIterationLimitReached", GRBupdatemodel(getMutableLpPtr())); int stat; GUROBI_CALL("isIterationLimitReached", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_STATUS, &stat)); return (stat == GRB_ITERATION_LIMIT); } //############################################################################# // WarmStart related methods //############################################################################# CoinWarmStart *OsiGrbSolverInterface::getEmptyWarmStart() const { return (dynamic_cast< CoinWarmStart * >(new CoinWarmStartBasis())); } // below we assume that getBasisStatus uses the same values as the warm start enum, i.e. 0: free, 1: basic, 2: upper, 3: lower static CompileTimeAssert< CoinWarmStartBasis::isFree == 0 > UNUSED change_In_Enum_CoinWarmStartBasis_Status_free_breaks_this_function; static CompileTimeAssert< CoinWarmStartBasis::basic == 1 > UNUSED change_In_Enum_CoinWarmStartBasis_Status_basic_breaks_this_function; static CompileTimeAssert< CoinWarmStartBasis::atUpperBound == 2 > UNUSED change_In_Enum_CoinWarmStartBasis_Status_upper_breaks_this_function; static CompileTimeAssert< CoinWarmStartBasis::atLowerBound == 3 > UNUSED change_In_Enum_CoinWarmStartBasis_Status_lower_breaks_this_function; CoinWarmStart *OsiGrbSolverInterface::getWarmStart() const { debugMessage("OsiGrbSolverInterface::getWarmStart()\n"); assert(!probtypemip_); if (!basisIsAvailable()) return NULL; CoinWarmStartBasis *ws = NULL; int numcols = getNumCols(); int numrows = getNumRows(); int *cstat = new int[numcols]; int *rstat = new int[numrows]; int i; #if 1 getBasisStatus(cstat, rstat); ws = new CoinWarmStartBasis; ws->setSize(numcols, numrows); for (i = 0; i < numrows; ++i) ws->setArtifStatus(i, CoinWarmStartBasis::Status(rstat[i])); for (i = 0; i < numcols; ++i) ws->setStructStatus(i, CoinWarmStartBasis::Status(cstat[i])); #else GUROBI_CALL("getWarmStart", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getWarmStart", GRBgetintattrarray(getMutableLpPtr(), GRB_INT_ATTR_VBASIS, 0, numcols, cstat)); GUROBI_CALL("getWarmStart", GRBgetintattrarray(getMutableLpPtr(), GRB_INT_ATTR_CBASIS, 0, numrows, rstat)); ws = new CoinWarmStartBasis; ws->setSize(numcols, numrows); char sense; for (i = 0; i < numrows; ++i) { switch (rstat[i]) { case GRB_BASIC: ws->setArtifStatus(i, CoinWarmStartBasis::basic); break; case GRB_NONBASIC_LOWER: case GRB_NONBASIC_UPPER: GUROBI_CALL("getWarmStart", GRBgetcharattrelement(getMutableLpPtr(), GRB_CHAR_ATTR_SENSE, i, &sense)); ws->setArtifStatus(i, (sense == '>' ? CoinWarmStartBasis::atUpperBound : CoinWarmStartBasis::atLowerBound)); break; default: // unknown row status delete ws; delete[] rstat; delete[] cstat; return NULL; } } for (i = 0; i < numcols; ++i) { switch (cstat[i]) { case GRB_BASIC: ws->setStructStatus(i, CoinWarmStartBasis::basic); break; case GRB_NONBASIC_LOWER: ws->setStructStatus(i, CoinWarmStartBasis::atLowerBound); break; case GRB_NONBASIC_UPPER: ws->setStructStatus(i, CoinWarmStartBasis::atUpperBound); break; case GRB_SUPERBASIC: ws->setStructStatus(i, CoinWarmStartBasis::isFree); break; default: // unknown column status delete[] rstat; delete[] cstat; delete ws; return NULL; } } #endif delete[] cstat; delete[] rstat; return ws; } //----------------------------------------------------------------------------- bool OsiGrbSolverInterface::setWarmStart(const CoinWarmStart *warmstart) { debugMessage("OsiGrbSolverInterface::setWarmStart(%p)\n", (void *)warmstart); const CoinWarmStartBasis *ws = dynamic_cast< const CoinWarmStartBasis * >(warmstart); int numcols, numrows, i, oi; int *stat; if (!ws) return false; numcols = ws->getNumStructural(); numrows = ws->getNumArtificial(); if (numcols != getNumCols() || numrows != getNumRows()) return false; switchToLP(); stat = new int[numcols + nauxcols > numrows ? numcols + nauxcols : numrows]; for (i = 0; i < numrows; ++i) { switch (ws->getArtifStatus(i)) { case CoinWarmStartBasis::basic: stat[i] = GRB_BASIC; break; case CoinWarmStartBasis::atLowerBound: case CoinWarmStartBasis::atUpperBound: stat[i] = GRB_NONBASIC_LOWER; break; case CoinWarmStartBasis::isFree: stat[i] = GRB_SUPERBASIC; break; default: // unknown row status delete[] stat; return false; } } GUROBI_CALL("setWarmStart", GRBsetintattrarray(getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS), GRB_INT_ATTR_CBASIS, 0, numrows, stat)); for (i = 0; i < numcols + nauxcols; ++i) { oi = colmap_G2O ? colmap_G2O[i] : i; if (oi >= 0) { /* normal variable */ switch (ws->getStructStatus(oi)) { case CoinWarmStartBasis::basic: stat[i] = GRB_BASIC; break; case CoinWarmStartBasis::atLowerBound: stat[i] = GRB_NONBASIC_LOWER; break; case CoinWarmStartBasis::atUpperBound: stat[i] = GRB_NONBASIC_UPPER; break; case CoinWarmStartBasis::isFree: stat[i] = GRB_SUPERBASIC; break; default: // unknown col status delete[] stat; return false; } } else { /* auxiliary variable, derive status from status of corresponding ranged row */ switch (ws->getArtifStatus(-oi - 1)) { case CoinWarmStartBasis::basic: stat[i] = GRB_BASIC; break; case CoinWarmStartBasis::atLowerBound: stat[i] = GRB_NONBASIC_LOWER; break; case CoinWarmStartBasis::atUpperBound: stat[i] = GRB_NONBASIC_UPPER; break; case CoinWarmStartBasis::isFree: stat[i] = GRB_SUPERBASIC; break; default: // unknown col status delete[] stat; return false; } } } GUROBI_CALL("setWarmStart", GRBsetintattrarray(getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS), GRB_INT_ATTR_VBASIS, 0, numcols + nauxcols, stat)); delete[] stat; return true; } //############################################################################# // Hotstart related methods (primarily used in strong branching) //############################################################################# void OsiGrbSolverInterface::markHotStart() { debugMessage("OsiGrbSolverInterface::markHotStart()\n"); int numcols, numrows; assert(!probtypemip_); numcols = getNumCols() + nauxcols; numrows = getNumRows(); if (numcols > hotStartCStatSize_) { delete[] hotStartCStat_; hotStartCStatSize_ = static_cast< int >(1.2 * static_cast< double >(numcols + nauxcols)); // get some extra space for future hot starts hotStartCStat_ = new int[hotStartCStatSize_]; } if (numrows > hotStartRStatSize_) { delete[] hotStartRStat_; hotStartRStatSize_ = static_cast< int >(1.2 * static_cast< double >(numrows)); // get some extra space for future hot starts hotStartRStat_ = new int[hotStartRStatSize_]; } GUROBI_CALL("markHotStart", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("markHotStart", GRBgetintattrarray(getMutableLpPtr(), GRB_INT_ATTR_VBASIS, 0, numcols + nauxcols, hotStartCStat_)); GUROBI_CALL("markHotStart", GRBgetintattrarray(getMutableLpPtr(), GRB_INT_ATTR_CBASIS, 0, numrows, hotStartRStat_)); } void OsiGrbSolverInterface::solveFromHotStart() { debugMessage("OsiGrbSolverInterface::solveFromHotStart()\n"); double maxiter; switchToLP(); assert(getNumCols() <= hotStartCStatSize_); assert(getNumRows() <= hotStartRStatSize_); GUROBI_CALL("solveFromHotStart", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("solveFromHotStart", GRBsetintattrarray(getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS), GRB_INT_ATTR_CBASIS, 0, getNumRows(), hotStartRStat_)); GUROBI_CALL("solveFromHotStart", GRBsetintattrarray(getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS), GRB_INT_ATTR_VBASIS, 0, getNumCols() + nauxcols, hotStartCStat_)); GUROBI_CALL("solveFromHotStart", GRBgetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_ITERATIONLIMIT, &maxiter)); GUROBI_CALL("solveFromHotStart", GRBsetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_ITERATIONLIMIT, (double)hotStartMaxIteration_)); resolve(); GUROBI_CALL("solveFromHotStart", GRBsetdblparam(GRBgetenv(getMutableLpPtr()), GRB_DBL_PAR_ITERATIONLIMIT, maxiter)); } void OsiGrbSolverInterface::unmarkHotStart() { debugMessage("OsiGrbSolverInterface::unmarkHotStart()\n"); // ??? be lazy with deallocating memory and do nothing here, deallocate memory in the destructor } //############################################################################# // Problem information methods (original data) //############################################################################# //------------------------------------------------------------------ // Get number of rows, columns, elements, ... //------------------------------------------------------------------ int OsiGrbSolverInterface::getNumCols() const { debugMessage("OsiGrbSolverInterface::getNumCols()\n"); int numcols; GUROBI_CALL("getNumCols", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getNumCols", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_NUMVARS, &numcols)); numcols -= nauxcols; return numcols; } int OsiGrbSolverInterface::getNumRows() const { debugMessage("OsiGrbSolverInterface::getNumRows()\n"); int numrows; GUROBI_CALL("getNumRows", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getNumRows", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_NUMCONSTRS, &numrows)); return numrows; } int OsiGrbSolverInterface::getNumElements() const { debugMessage("OsiGrbSolverInterface::getNumElements()\n"); int numnz; GUROBI_CALL("getNumElements", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getNumElements", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_NUMNZS, &numnz)); /* each auxiliary column contributes one nonzero element to exactly one row */ numnz -= nauxcols; return numnz; } //------------------------------------------------------------------ // Get pointer to rim vectors //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getColLower() const { debugMessage("OsiGrbSolverInterface::getColLower()\n"); if (collower_ == NULL) { int ncols = getNumCols(); if (ncols > 0) { collower_ = new double[ncols]; GUROBI_CALL("getColLower", GRBupdatemodel(getMutableLpPtr())); if (nauxcols) GUROBI_CALL("getColLower", GRBgetdblattrlist(getMutableLpPtr(), GRB_DBL_ATTR_LB, ncols, colmap_O2G, collower_)); else GUROBI_CALL("getColLower", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_LB, 0, ncols, collower_)); } } return collower_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getColUpper() const { debugMessage("OsiGrbSolverInterface::getColUpper()\n"); if (colupper_ == NULL) { int ncols = getNumCols(); if (ncols > 0) { colupper_ = new double[ncols]; GUROBI_CALL("getColUpper", GRBupdatemodel(getMutableLpPtr())); if (nauxcols) GUROBI_CALL("getColUpper", GRBgetdblattrlist(getMutableLpPtr(), GRB_DBL_ATTR_UB, ncols, colmap_O2G, colupper_)); else GUROBI_CALL("getColUpper", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_UB, 0, ncols, colupper_)); } } return colupper_; } //------------------------------------------------------------------ const char *OsiGrbSolverInterface::getRowSense() const { debugMessage("OsiGrbSolverInterface::getRowSense()\n"); if (rowsense_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rowsense_ = new char[nrows]; GUROBI_CALL("getRowSense", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getRowSense", GRBgetcharattrarray(getMutableLpPtr(), GRB_CHAR_ATTR_SENSE, 0, nrows, rowsense_)); for (int i = 0; i < nrows; ++i) { if (auxcolind && auxcolind[i] >= 0) { assert(rowsense_[i] == GRB_EQUAL); rowsense_[i] = 'R'; continue; } switch (rowsense_[i]) { case GRB_LESS_EQUAL: rowsense_[i] = 'L'; break; case GRB_GREATER_EQUAL: rowsense_[i] = 'G'; break; case GRB_EQUAL: rowsense_[i] = 'E'; break; } } } } return rowsense_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getRightHandSide() const { debugMessage("OsiGrbSolverInterface::getRightHandSide()\n"); if (rhs_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rhs_ = new double[nrows]; GUROBI_CALL("getRightHandSide", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getRightHandSide", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_RHS, 0, nrows, rhs_)); /* for ranged rows, we give the rhs of the aux. variable used to represent the range of this row as row rhs */ if (nauxcols) for (int i = 0; i < nrows; ++i) if (auxcolind[i] >= 0) GUROBI_CALL("getRightHandSide", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_UB, auxcolind[i], &rhs_[i])); } } return rhs_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getRowRange() const { debugMessage("OsiGrbSolverInterface::getRowRange()\n"); if (rowrange_ == NULL) { int nrows = getNumRows(); if (nrows > 0) rowrange_ = CoinCopyOfArrayOrZero((double *)NULL, nrows); if (nauxcols) { double auxlb, auxub; for (int i = 0; i < nrows; ++i) if (auxcolind[i] >= 0) { GUROBI_CALL("getRowRange", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_LB, auxcolind[i], &auxlb)); GUROBI_CALL("getRowRange", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_UB, auxcolind[i], &auxub)); rowrange_[i] = auxub - auxlb; } } } return rowrange_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getRowLower() const { debugMessage("OsiGrbSolverInterface::getRowLower()\n"); if (rowlower_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { const char *rowsense = getRowSense(); rowlower_ = new double[nrows]; double rhs; double dum1; for (int i = 0; i < nrows; ++i) { if (auxcolind && auxcolind[i] >= 0) { assert(rowsense[i] == 'R'); GUROBI_CALL("getRowLower", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_LB, auxcolind[i], &rowlower_[i])); } else { GUROBI_CALL("getRowLower", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_RHS, i, &rhs)); convertSenseToBound(rowsense[i], rhs, 0.0, rowlower_[i], dum1); } } } } return rowlower_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getRowUpper() const { debugMessage("OsiGrbSolverInterface::getRowUpper()\n"); if (rowupper_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { const char *rowsense = getRowSense(); rowupper_ = new double[nrows]; double rhs; double dum1; for (int i = 0; i < nrows; ++i) { if (auxcolind && auxcolind[i] >= 0) { assert(rowsense[i] == 'R'); GUROBI_CALL("getRowUpper", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_UB, auxcolind[i], &rowupper_[i])); } else { GUROBI_CALL("getRowUpper", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_RHS, i, &rhs)); convertSenseToBound(rowsense[i], rhs, 0.0, dum1, rowupper_[i]); } } } } return rowupper_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getObjCoefficients() const { debugMessage("OsiGrbSolverInterface::getObjCoefficients()\n"); if (obj_ == NULL) { int ncols = getNumCols(); if (ncols > 0) { obj_ = new double[ncols]; GUROBI_CALL("getObjCoefficients", GRBupdatemodel(getMutableLpPtr())); if (nauxcols) GUROBI_CALL("getObjCoefficients", GRBgetdblattrlist(getMutableLpPtr(), GRB_DBL_ATTR_OBJ, ncols, colmap_O2G, obj_)); else GUROBI_CALL("getObjCoefficients", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_OBJ, 0, ncols, obj_)); } } return obj_; } //------------------------------------------------------------------ double OsiGrbSolverInterface::getObjSense() const { debugMessage("OsiGrbSolverInterface::getObjSense()\n"); int sense; GUROBI_CALL("getObjSense", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getObjSense", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_MODELSENSE, &sense)); return (double)sense; } //------------------------------------------------------------------ // Return information on integrality //------------------------------------------------------------------ bool OsiGrbSolverInterface::isContinuous(int colNumber) const { debugMessage("OsiGrbSolverInterface::isContinuous(%d)\n", colNumber); return getCtype()[colNumber] == 'C'; } //------------------------------------------------------------------ // Row and column copies of the matrix ... //------------------------------------------------------------------ const CoinPackedMatrix *OsiGrbSolverInterface::getMatrixByRow() const { debugMessage("OsiGrbSolverInterface::getMatrixByRow()\n"); if (matrixByRow_ == NULL) { int nrows = getNumRows(); int ncols = getNumCols(); if (nrows == 0) { matrixByRow_ = new CoinPackedMatrix(); matrixByRow_->setDimensions(0, ncols); return matrixByRow_; } int nelems; int *starts = new int[nrows + 1]; int *len = new int[nrows]; GUROBI_CALL("getMatrixByRow", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getMatrixByRow", GRBgetconstrs(getMutableLpPtr(), &nelems, NULL, NULL, NULL, 0, nrows)); assert(nelems == getNumElements() + nauxcols); int *indices = new int[nelems]; double *elements = new double[nelems]; GUROBI_CALL("getMatrixByRow", GRBgetconstrs(getMutableLpPtr(), &nelems, starts, indices, elements, 0, nrows)); matrixByRow_ = new CoinPackedMatrix(); // Should be able to pass null for length of packed matrix, // assignMatrix does not seem to allow (even though documentation say it is possible to do this). // For now compute the length. starts[nrows] = nelems; for (int i = 0; i < nrows; ++i) len[i] = starts[i + 1] - starts[i]; matrixByRow_->assignMatrix(false /* not column ordered */, ncols + nauxcols, nrows, nelems, elements, indices, starts, len); if (nauxcols) { // delete auxiliary columns from matrix int *auxcols = new int[nauxcols]; int j = 0; for (int i = 0; i < ncols + nauxcols; ++i) if (colmap_G2O[i] < 0) auxcols[j++] = i; assert(j == nauxcols); matrixByRow_->deleteCols(nauxcols, auxcols); delete[] auxcols; assert(matrixByRow_->getNumElements() == getNumElements()); assert(matrixByRow_->getMinorDim() <= ncols); } } return matrixByRow_; } //------------------------------------------------------------------ const CoinPackedMatrix *OsiGrbSolverInterface::getMatrixByCol() const { debugMessage("OsiGrbSolverInterface::getMatrixByCol()\n"); if (matrixByCol_ == NULL) { int nrows = getNumRows(); int ncols = getNumCols(); matrixByCol_ = new CoinPackedMatrix(); if (ncols > 0) { int nelems; int *starts = new int[ncols + nauxcols + 1]; int *len = new int[ncols + nauxcols]; GUROBI_CALL("getMatrixByCol", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getMatrixByCol", GRBgetvars(getMutableLpPtr(), &nelems, NULL, NULL, NULL, 0, ncols + nauxcols)); int *indices = new int[nelems]; double *elements = new double[nelems]; GUROBI_CALL("getMatrixByCol", GRBgetvars(getMutableLpPtr(), &nelems, starts, indices, elements, 0, ncols + nauxcols)); // Should be able to pass null for length of packed matrix, // assignMatrix does not seem to allow (even though documentation say it is possible to do this). // For now compute the length. starts[ncols + nauxcols] = nelems; for (int i = 0; i < ncols + nauxcols; i++) len[i] = starts[i + 1] - starts[i]; matrixByCol_->assignMatrix(true /* column ordered */, nrows, ncols + nauxcols, nelems, elements, indices, starts, len); assert(matrixByCol_->getNumCols() == ncols + nauxcols); assert(matrixByCol_->getNumRows() == nrows); if (nauxcols) { // delete auxiliary columns from matrix int *auxcols = new int[nauxcols]; int j = 0; for (int i = 0; i < ncols + nauxcols; ++i) if (colmap_G2O[i] < 0) auxcols[j++] = i; assert(j == nauxcols); matrixByCol_->deleteCols(nauxcols, auxcols); delete[] auxcols; assert(matrixByCol_->getNumElements() == getNumElements()); assert(matrixByCol_->getMajorDim() <= ncols); assert(matrixByCol_->getMinorDim() <= nrows); } } else matrixByCol_->setDimensions(nrows, ncols); } return matrixByCol_; } //------------------------------------------------------------------ // Get solver's value for infinity //------------------------------------------------------------------ double OsiGrbSolverInterface::getInfinity() const { debugMessage("OsiGrbSolverInterface::getInfinity()\n"); return GRB_INFINITY; } //############################################################################# // Problem information methods (results) //############################################################################# // *FIXME*: what should be done if a certain vector doesn't exist??? const double *OsiGrbSolverInterface::getColSolution() const { debugMessage("OsiGrbSolverInterface::getColSolution()\n"); if (colsol_ == NULL) { int ncols = getNumCols(); if (ncols > 0) { colsol_ = new double[ncols]; GUROBI_CALL("getColSolution", GRBupdatemodel(getMutableLpPtr())); if (GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_X, 0, colsol_) == 0) { // if a solution is available, get it if (nauxcols) GUROBI_CALL("getColSolution", GRBgetdblattrlist(getMutableLpPtr(), GRB_DBL_ATTR_X, ncols, colmap_O2G, colsol_)); else GUROBI_CALL("getColSolution", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_X, 0, ncols, colsol_)); } else { *messageHandler() << "Warning: OsiGrbSolverInterface::getColSolution() called, but no solution available! Returning lower bounds, but they may be at -infinity. Be aware!" << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; if (nauxcols) GUROBI_CALL("getColSolution", GRBgetdblattrlist(getMutableLpPtr(), GRB_DBL_ATTR_LB, ncols, colmap_O2G, colsol_)); else GUROBI_CALL("getColSolution", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_LB, 0, ncols, colsol_)); } } } return colsol_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getRowPrice() const { debugMessage("OsiGrbSolverInterface::getRowPrice()\n"); if (rowsol_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rowsol_ = new double[nrows]; GUROBI_CALL("getRowPrice", GRBupdatemodel(getMutableLpPtr())); if (GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_PI, 0, rowsol_) == 0) { GUROBI_CALL("getRowPrice", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_PI, 0, nrows, rowsol_)); } else { *messageHandler() << "Warning: OsiGrbSolverInterface::getRowPrice() called, but no solution available! Returning 0.0. Be aware!" << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; CoinZeroN(rowsol_, nrows); } //??? what is the dual value for a ranged row? } } return rowsol_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getReducedCost() const { debugMessage("OsiGrbSolverInterface::getReducedCost()\n"); if (redcost_ == NULL) { int ncols = getNumCols(); if (ncols > 0) { redcost_ = new double[ncols]; GUROBI_CALL("getReducedCost", GRBupdatemodel(getMutableLpPtr())); if (GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_RC, 0, redcost_) == 0) { // if reduced costs are available, get them if (nauxcols) GUROBI_CALL("getReducedCost", GRBgetdblattrlist(getMutableLpPtr(), GRB_DBL_ATTR_RC, ncols, colmap_O2G, redcost_)); else GUROBI_CALL("getReducedCost", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_RC, 0, ncols, redcost_)); } else { *messageHandler() << "Warning: OsiGrbSolverInterface::getReducedCost() called, but no solution available! Returning 0.0. Be aware!" << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; CoinZeroN(redcost_, ncols); } } } return redcost_; } //------------------------------------------------------------------ const double *OsiGrbSolverInterface::getRowActivity() const { debugMessage("OsiGrbSolverInterface::getRowActivity()\n"); if (rowact_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rowact_ = new double[nrows]; GUROBI_CALL("getRowActivity", GRBupdatemodel(getMutableLpPtr())); if (GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_SLACK, 0, rowact_) == 0) { GUROBI_CALL("getRowActivity", GRBgetdblattrarray(getMutableLpPtr(), GRB_DBL_ATTR_SLACK, 0, nrows, rowact_)); for (int r = 0; r < nrows; ++r) { if (nauxcols && auxcolind[r] >= 0) { GUROBI_CALL("getRowActivity", GRBgetdblattrelement(getMutableLpPtr(), GRB_DBL_ATTR_X, auxcolind[r], &rowact_[r])); } else rowact_[r] = getRightHandSide()[r] - rowact_[r]; } } else { *messageHandler() << "Warning: OsiGrbSolverInterface::getRowActivity() called, but no solution available! Returning 0.0. Be aware!" << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; CoinZeroN(rowact_, nrows); } } } return rowact_; } //------------------------------------------------------------------ double OsiGrbSolverInterface::getObjValue() const { debugMessage("OsiGrbSolverInterface::getObjValue()\n"); double objval = 0.0; GUROBI_CALL("getObjValue", GRBupdatemodel(getMutableLpPtr())); if (GRBgetdblattr(getMutableLpPtr(), GRB_DBL_ATTR_OBJVAL, &objval) == 0) { // Adjust objective function value by constant term in objective function double objOffset; getDblParam(OsiObjOffset, objOffset); objval = objval - objOffset; } else { *messageHandler() << "Warning: OsiGrbSolverInterface::getObjValue() called, but probably no solution available! Returning 0.0. Be aware!" << CoinMessageEol; if (OsiGrbSolverInterface::globalenv_) *messageHandler() << "\t GUROBI error message: " << GRBgeterrormsg(OsiGrbSolverInterface::globalenv_) << CoinMessageEol; } return objval; } //------------------------------------------------------------------ int OsiGrbSolverInterface::getIterationCount() const { debugMessage("OsiGrbSolverInterface::getIterationCount()\n"); double itercnt; GUROBI_CALL("getIterationCount", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("getIterationCount", GRBgetdblattr(getMutableLpPtr(), GRB_DBL_ATTR_ITERCOUNT, &itercnt)); return (int)itercnt; } //------------------------------------------------------------------ std::vector< double * > OsiGrbSolverInterface::getDualRays(int maxNumRays, bool fullRay) const { debugMessage("OsiGrbSolverInterface::getDualRays(%d,%s)\n", maxNumRays, fullRay ? "true" : "false"); if (fullRay == true) { throw CoinError("Full dual rays not yet implemented.", "getDualRays", "OsiGrbSolverInterface"); } OsiGrbSolverInterface solver(*this); const int numcols = getNumCols(); const int numrows = getNumRows(); int *index = new int[CoinMax(numcols, numrows)]; int i; for (i = CoinMax(numcols, numrows) - 1; i >= 0; --i) { index[i] = i; } double *obj = new double[CoinMax(numcols, 2 * numrows)]; CoinFillN(obj, numcols, 0.0); solver.setObjCoeffSet(index, index + numcols, obj); double *clb = new double[2 * numrows]; double *cub = new double[2 * numrows]; const double plusone = 1.0; const double minusone = -1.0; const char *sense = getRowSense(); const CoinPackedVectorBase **cols = new const CoinPackedVectorBase *[numrows]; int newcols = 0; for (i = 0; i < numrows; ++i) { switch (sense[i]) { case 'L': cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &minusone, false); break; case 'G': cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &plusone, false); break; case 'R': cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &minusone, false); cols[newcols++] = new CoinShallowPackedVector(1, &index[i], &plusone, false); break; case 'N': case 'E': break; } } CoinFillN(obj, newcols, 1.0); CoinFillN(clb, newcols, 0.0); CoinFillN(cub, newcols, getInfinity()); solver.addCols(newcols, cols, clb, cub, obj); delete[] index; delete[] cols; delete[] clb; delete[] cub; delete[] obj; solver.setObjSense(1.0); // minimize solver.initialSolve(); const double *solverpi = solver.getRowPrice(); double *pi = new double[numrows]; for (i = numrows - 1; i >= 0; --i) { pi[i] = -solverpi[i]; } return std::vector< double * >(1, pi); } //------------------------------------------------------------------ std::vector< double * > OsiGrbSolverInterface::getPrimalRays(int maxNumRays) const { debugMessage("OsiGrbSolverInterface::getPrimalRays(%d)\n", maxNumRays); return std::vector< double * >(); } //############################################################################# // Problem modifying methods (rim vectors) //############################################################################# void OsiGrbSolverInterface::setObjCoeff(int elementIndex, double elementValue) { debugMessage("OsiGrbSolverInterface::setObjCoeff(%d, %g)\n", elementIndex, elementValue); GUROBI_CALL("setObjCoeff", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_OBJ, nauxcols ? colmap_O2G[elementIndex] : elementIndex, elementValue)); if (obj_ != NULL) obj_[elementIndex] = elementValue; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setObjCoeffSet(const int *indexFirst, const int *indexLast, const double *coeffList) { debugMessage("OsiGrbSolverInterface::setObjCoeffSet(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)coeffList); const int cnt = (int)(indexLast - indexFirst); if (cnt == 0) return; if (cnt == 1) { setObjCoeff(*indexFirst, *coeffList); return; } assert(cnt > 1); if (nauxcols) { int *indices = new int[cnt]; for (int i = 0; i < cnt; ++i) indices[i] = colmap_O2G[indexFirst[i]]; GUROBI_CALL("setObjCoeffSet", GRBsetdblattrlist(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_OBJ, cnt, indices, const_cast< double * >(coeffList))); delete[] indices; } else { GUROBI_CALL("setObjCoeffSet", GRBsetdblattrlist(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_OBJ, cnt, const_cast< int * >(indexFirst), const_cast< double * >(coeffList))); } if (obj_ != NULL) for (int i = 0; i < cnt; ++i) obj_[indexFirst[i]] = coeffList[i]; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setColLower(int elementIndex, double elementValue) { debugMessage("OsiGrbSolverInterface::setColLower(%d, %g)\n", elementIndex, elementValue); GUROBI_CALL("setColLower", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_LB, nauxcols ? colmap_O2G[elementIndex] : elementIndex, elementValue)); if (collower_ != NULL) collower_[elementIndex] = elementValue; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setColUpper(int elementIndex, double elementValue) { debugMessage("OsiGrbSolverInterface::setColUpper(%d, %g)\n", elementIndex, elementValue); GUROBI_CALL("setColUpper", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_UB, nauxcols ? colmap_O2G[elementIndex] : elementIndex, elementValue)); if (colupper_ != NULL) colupper_[elementIndex] = elementValue; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setColBounds(int elementIndex, double lower, double upper) { debugMessage("OsiGrbSolverInterface::setColBounds(%d, %g, %g)\n", elementIndex, lower, upper); setColLower(elementIndex, lower); setColUpper(elementIndex, upper); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { debugMessage("OsiGrbSolverInterface::setColSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); const int cnt = (int)(indexLast - indexFirst); if (cnt == 0) return; if (cnt == 1) { setColLower(*indexFirst, boundList[0]); setColUpper(*indexFirst, boundList[1]); return; } assert(cnt > 1); double *lbList = new double[cnt]; double *ubList = new double[cnt]; int *indices = nauxcols ? new int[cnt] : NULL; for (int i = 0; i < cnt; ++i) { lbList[i] = boundList[2 * i]; ubList[i] = boundList[2 * i + 1]; if (indices) indices[i] = colmap_O2G[indexFirst[i]]; if (collower_ != NULL) collower_[indexFirst[i]] = boundList[2 * i]; if (colupper_ != NULL) colupper_[indexFirst[i]] = boundList[2 * i + 1]; } GUROBI_CALL("setColSetBounds", GRBsetdblattrlist(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_LB, cnt, indices ? indices : const_cast< int * >(indexFirst), lbList)); GUROBI_CALL("setColSetBounds", GRBsetdblattrlist(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_UB, cnt, indices ? indices : const_cast< int * >(indexFirst), ubList)); delete[] lbList; delete[] ubList; delete[] indices; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setRowLower(int i, double elementValue) { debugMessage("OsiGrbSolverInterface::setRowLower(%d, %g)\n", i, elementValue); double rhs = getRightHandSide()[i]; double range = getRowRange()[i]; char sense = getRowSense()[i]; double lower = 0, upper = 0; convertSenseToBound(sense, rhs, range, lower, upper); if (lower != elementValue) { convertBoundToSense(elementValue, upper, sense, rhs, range); setRowType(i, sense, rhs, range); } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setRowUpper(int i, double elementValue) { debugMessage("OsiGrbSolverInterface::setRowUpper(%d, %g)\n", i, elementValue); double rhs = getRightHandSide()[i]; double range = getRowRange()[i]; char sense = getRowSense()[i]; double lower = 0, upper = 0; convertSenseToBound(sense, rhs, range, lower, upper); if (upper != elementValue) { convertBoundToSense(lower, elementValue, sense, rhs, range); setRowType(i, sense, rhs, range); } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setRowBounds(int elementIndex, double lower, double upper) { debugMessage("OsiGrbSolverInterface::setRowBounds(%d, %g, %g)\n", elementIndex, lower, upper); double rhs, range; char sense; convertBoundToSense(lower, upper, sense, rhs, range); setRowType(elementIndex, sense, rhs, range); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setRowType(int i, char sense, double rightHandSide, double range) { debugMessage("OsiGrbSolverInterface::setRowType(%d, %c, %g, %g)\n", i, sense, rightHandSide, range); GUROBI_CALL("setRowType", GRBupdatemodel(getMutableLpPtr())); if (nauxcols && auxcolind[i] >= 0) { // so far, row i is a ranged row switch (sense) { case 'R': // row i was ranged row and remains a ranged row assert(range > 0); GUROBI_CALL("setRowType", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_LB, auxcolind[i], rightHandSide - range)); GUROBI_CALL("setRowType", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_UB, auxcolind[i], rightHandSide)); break; case 'N': case 'L': case 'G': case 'E': convertToNormalRow(i, sense, rightHandSide); break; default: std::cerr << "Unknown row sense: " << sense << std::endl; exit(-1); } } else if (sense == 'R') { convertToRangedRow(i, rightHandSide, range); } else { char grbsense; switch (sense) { case 'N': grbsense = GRB_LESS_EQUAL; rightHandSide = getInfinity(); break; case 'L': grbsense = GRB_LESS_EQUAL; break; case 'G': grbsense = GRB_GREATER_EQUAL; break; case 'E': grbsense = GRB_EQUAL; break; default: std::cerr << "Unknown row sense: " << sense << std::endl; exit(-1); } GUROBI_CALL("setRowType", GRBsetcharattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_CHAR_ATTR_SENSE, i, grbsense)); GUROBI_CALL("setRowType", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_RHS, i, rightHandSide)); } if (rowsense_ != NULL) rowsense_[i] = sense; if (rhs_ != NULL) rhs_[i] = rightHandSide; if (rowlower_ != NULL || rowupper_ != NULL) { double dummy; convertSenseToBound(sense, rightHandSide, range, rowlower_ ? rowlower_[i] : dummy, rowupper_ ? rowupper_[i] : dummy); } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { debugMessage("OsiGrbSolverInterface::setRowSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); const long int cnt = indexLast - indexFirst; if (cnt <= 0) return; char *sense = new char[cnt]; double *rhs = new double[cnt]; double *range = new double[cnt]; for (int i = 0; i < cnt; ++i) convertBoundToSense(boundList[2 * i], boundList[2 * i + 1], sense[i], rhs[i], range[i]); setRowSetTypes(indexFirst, indexLast, sense, rhs, range); delete[] range; delete[] rhs; delete[] sense; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList) { debugMessage("OsiGrbSolverInterface::setRowSetTypes(%p, %p, %p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)senseList, (void *)rhsList, (void *)rangeList); const int cnt = (int)(indexLast - indexFirst); if (cnt == 0) return; if (cnt == 1) { setRowType(*indexFirst, *senseList, *rhsList, *rangeList); return; } assert(cnt > 0); GUROBI_CALL("setRowSetTypes", GRBupdatemodel(getMutableLpPtr())); char *grbsense = new char[cnt]; double *rhs = new double[cnt]; for (int i = 0; i < cnt; ++i) { rhs[i] = rhsList[i]; if (nauxcols && auxcolind[indexFirst[i]] >= 0) { // so far, row is a ranged row switch (senseList[i]) { case 'R': // row i was ranged row and remains a ranged row assert(rangeList[i] > 0); GUROBI_CALL("setRowSetTypes", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_LB, auxcolind[indexFirst[i]], rhsList[i] - rangeList[i])); GUROBI_CALL("setRowSetTypes", GRBsetdblattrelement(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), GRB_DBL_ATTR_UB, auxcolind[indexFirst[i]], rhsList[i])); grbsense[i] = GRB_EQUAL; rhs[i] = 0.0; break; case 'N': convertToNormalRow(indexFirst[i], senseList[i], rhsList[i]); grbsense[i] = GRB_LESS_EQUAL; rhs[i] = getInfinity(); break; case 'L': convertToNormalRow(indexFirst[i], senseList[i], rhsList[i]); grbsense[i] = GRB_LESS_EQUAL; break; case 'G': convertToNormalRow(indexFirst[i], senseList[i], rhsList[i]); grbsense[i] = GRB_GREATER_EQUAL; break; case 'E': convertToNormalRow(indexFirst[i], senseList[i], rhsList[i]); grbsense[i] = GRB_EQUAL; break; default: std::cerr << "Unknown row sense: " << senseList[i] << std::endl; exit(-1); } } else if (senseList[i] == 'R') { convertToRangedRow(indexFirst[i], rhsList[i], rangeList[i]); grbsense[i] = GRB_EQUAL; rhs[i] = 0.0; } else { switch (senseList[i]) { case 'N': grbsense[i] = GRB_LESS_EQUAL; rhs[i] = getInfinity(); break; case 'L': grbsense[i] = GRB_LESS_EQUAL; break; case 'G': grbsense[i] = GRB_GREATER_EQUAL; break; case 'E': grbsense[i] = GRB_EQUAL; break; default: std::cerr << "Unknown row sense: " << senseList[i] << std::endl; exit(-1); } } if (rowsense_ != NULL) rowsense_[indexFirst[i]] = senseList[i]; if (rhs_ != NULL) rhs_[indexFirst[i]] = senseList[i] == 'N' ? getInfinity() : rhsList[i]; } GUROBI_CALL("setRowSetTypes", GRBsetcharattrlist(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), GRB_CHAR_ATTR_SENSE, cnt, const_cast< int * >(indexFirst), grbsense)); GUROBI_CALL("setRowSetTypes", GRBsetdblattrlist(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), GRB_DBL_ATTR_RHS, cnt, const_cast< int * >(indexFirst), rhs)); delete[] rhs; delete[] grbsense; } //############################################################################# void OsiGrbSolverInterface::setContinuous(int index) { debugMessage("OsiGrbSolverInterface::setContinuous(%d)\n", index); assert(coltype_ != NULL); assert(colspace_ >= getNumCols()); coltype_[index] = GRB_CONTINUOUS; if (probtypemip_) { GUROBI_CALL("setContinuous", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("setContinuous", GRBsetcharattrelement(getMutableLpPtr(), GRB_CHAR_ATTR_VTYPE, nauxcols ? colmap_O2G[index] : index, GRB_CONTINUOUS)); } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setInteger(int index) { debugMessage("OsiGrbSolverInterface::setInteger(%d)\n", index); assert(coltype_ != NULL); assert(colspace_ >= getNumCols()); if (getColLower()[index] == 0.0 && getColUpper()[index] == 1.0) coltype_[index] = GRB_BINARY; else coltype_[index] = GRB_INTEGER; if (probtypemip_) { GUROBI_CALL("setInteger", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("setInteger", GRBsetcharattrelement(getMutableLpPtr(), GRB_CHAR_ATTR_VTYPE, nauxcols ? colmap_O2G[index] : index, coltype_[index])); } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setContinuous(const int *indices, int len) { debugMessage("OsiGrbSolverInterface::setContinuous(%p, %d)\n", (void *)indices, len); for (int i = 0; i < len; ++i) setContinuous(indices[i]); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setInteger(const int *indices, int len) { debugMessage("OsiGrbSolverInterface::setInteger(%p, %d)\n", (void *)indices, len); for (int i = 0; i < len; ++i) setInteger(indices[i]); } //############################################################################# void OsiGrbSolverInterface::setRowName(int ndx, std::string name) { debugMessage("OsiGrbSolverInterface::setRowName\n"); if (ndx < 0 || ndx >= getNumRows()) return; int nameDiscipline; getIntParam(OsiNameDiscipline, nameDiscipline); if (nameDiscipline == 0) return; OsiSolverInterface::setRowName(ndx, name); GUROBI_CALL("setRowName", GRBsetstrattrelement(getLpPtr(), GRB_STR_ATTR_CONSTRNAME, ndx, const_cast< char * >(name.c_str()))); } void OsiGrbSolverInterface::setColName(int ndx, std::string name) { debugMessage("OsiGrbSolverInterface::setColName\n"); if (ndx < 0 || ndx >= getNumCols()) return; int nameDiscipline; getIntParam(OsiNameDiscipline, nameDiscipline); if (nameDiscipline == 0) return; OsiSolverInterface::setColName(ndx, name); GUROBI_CALL("setColName", GRBsetstrattrelement(getLpPtr(), GRB_STR_ATTR_VARNAME, nauxcols ? colmap_O2G[ndx] : ndx, const_cast< char * >(name.c_str()))); } //############################################################################# void OsiGrbSolverInterface::setObjSense(double s) { debugMessage("OsiGrbSolverInterface::setObjSense(%g)\n", s); GUROBI_CALL("setObjSense", GRBsetintattr(getLpPtr(OsiGrbSolverInterface::FREECACHED_RESULTS), GRB_INT_ATTR_MODELSENSE, (int)s)); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setColSolution(const double *cs) { debugMessage("OsiGrbSolverInterface::setColSolution(%p)\n", (void *)cs); int nc = getNumCols(); if (cs == NULL) freeCachedResults(); else if (nc > 0) { // If colsol isn't allocated, then allocate it if (colsol_ == NULL) colsol_ = new double[nc]; // Copy in new col solution. CoinDisjointCopyN(cs, nc, colsol_); //*messageHandler() << "OsiGrb::setColSolution: Gurobi does not allow setting the column solution. Command is ignored." << CoinMessageEol; } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::setRowPrice(const double *rs) { debugMessage("OsiGrbSolverInterface::setRowPrice(%p)\n", (void *)rs); int nr = getNumRows(); if (rs == NULL) freeCachedResults(); else if (nr > 0) { // If rowsol isn't allocated, then allocate it if (rowsol_ == NULL) rowsol_ = new double[nr]; // Copy in new row solution. CoinDisjointCopyN(rs, nr, rowsol_); *messageHandler() << "OsiGrb::setRowPrice: Gurobi does not allow setting the row price. Command is ignored." << CoinMessageEol; } } //############################################################################# // Problem modifying methods (matrix) //############################################################################# void OsiGrbSolverInterface::addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj) { debugMessage("OsiGrbSolverInterface::addCol(%p, %g, %g, %g)\n", (void *)&vec, collb, colub, obj); int nc = getNumCols(); assert(colspace_ >= nc); resizeColSpace(nc + 1); coltype_[nc] = GRB_CONTINUOUS; GUROBI_CALL("addCol", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("addCol", GRBaddvar(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), vec.getNumElements(), const_cast< int * >(vec.getIndices()), const_cast< double * >(vec.getElements()), obj, collb, colub, coltype_[nc], NULL)); if (nauxcols) { colmap_O2G[nc] = nc + nauxcols; colmap_G2O[nc + nauxcols] = nc; } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj) { debugMessage("OsiGrbSolverInterface::addCols(%d, %p, %p, %p, %p)\n", numcols, (void *)cols, (void *)collb, (void *)colub, (void *)obj); int nc = getNumCols(); assert(colspace_ >= nc); resizeColSpace(nc + numcols); CoinFillN(&coltype_[nc], numcols, GRB_CONTINUOUS); int i; int nz = 0; for (i = 0; i < numcols; ++i) nz += cols[i]->getNumElements(); int *index = new int[nz]; double *elem = new double[nz]; int *start = new int[numcols + 1]; nz = 0; start[0] = 0; for (i = 0; i < numcols; ++i) { const CoinPackedVectorBase *col = cols[i]; const int len = col->getNumElements(); CoinDisjointCopyN(col->getIndices(), len, index + nz); CoinDisjointCopyN(col->getElements(), len, elem + nz); nz += len; start[i + 1] = nz; } GUROBI_CALL("addCols", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("addCols", GRBaddvars(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), numcols, nz, start, index, elem, const_cast< double * >(obj), const_cast< double * >(collb), const_cast< double * >(colub), NULL, NULL)); delete[] start; delete[] elem; delete[] index; if (nauxcols) for (i = 0; i < numcols; ++i) { colmap_O2G[nc + i] = nc + i + nauxcols; colmap_G2O[nc + i + nauxcols] = nc + i; } } static int intcompare(const void *p1, const void *p2) { return (*(const int *)p1) - (*(const int *)p2); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::deleteCols(const int num, const int *columnIndices) { debugMessage("OsiGrbSolverInterface::deleteCols(%d, %p)\n", num, (void *)columnIndices); if (num == 0) return; GUROBI_CALL("deleteCols", GRBupdatemodel(getMutableLpPtr())); int *ind = NULL; if (nauxcols) { int nc = getNumCols(); ind = new int[num]; // translate into gurobi indices and sort for (int i = 0; i < num; ++i) ind[i] = colmap_O2G[columnIndices[i]]; qsort((void *)ind, num, sizeof(int), intcompare); // delete indices in gurobi GUROBI_CALL("deleteCols", GRBdelvars(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), num, ind)); nc -= num; // update colmap_G2O and auxcolind int offset = 0; int j = 0; for (int i = ind[0]; i < nc + nauxcols; ++i) { if (j < num && i == ind[j]) { // variable i has been deleted, increase offset by 1 assert(colmap_G2O[i] >= 0); ++offset; while (j < num && i == ind[j]) ++j; } // variable from position i+offset has moved to position i if (colmap_G2O[i + offset] >= 0) { // if variable at (hithero) position i+offset was a regular variable, then it is now stored at position i // substract offset since variable indices also changed in Osi colmap_G2O[i] = colmap_G2O[i + offset] - offset; assert(colmap_G2O[i] >= 0); // update also colmap_O2G colmap_O2G[colmap_G2O[i]] = i; } else { // if variable at (hithero) position i+offset was an auxiliary variable, then the corresponding row index is now stored at position i int rngrowidx = -colmap_G2O[i + offset] - 1; assert(auxcolind[rngrowidx] == i + offset); colmap_G2O[i] = colmap_G2O[i + offset]; // update also auxcolind to point to position i now auxcolind[rngrowidx] = i; } } } else { GUROBI_CALL("deleteCols", GRBdelvars(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), num, const_cast< int * >(columnIndices))); } #ifndef NDEBUG if (nauxcols) { int nc = getNumCols(); int nr = getNumRows(); for (int i = 0; i < nc + nauxcols; ++i) { assert(i >= nc || colmap_G2O[colmap_O2G[i]] == i); assert(colmap_G2O[i] < 0 || colmap_O2G[colmap_G2O[i]] == i); assert(colmap_G2O[i] >= 0 || -colmap_G2O[i] - 1 < nr); assert(colmap_G2O[i] >= 0 || auxcolind[-colmap_G2O[i] - 1] == i); } } #endif if (!getColNames().empty() || coltype_ != NULL) { if (ind == NULL) ind = new int[num]; memcpy(ind, columnIndices, num * sizeof(int)); qsort((void *)ind, num, sizeof(int), intcompare); if (!getColNames().empty()) for (int i = num - 1; i >= 0; --i) deleteColNames(ind[i], 1); if (coltype_ != NULL) { int offset = 0; for (int i = 0; i <= getNumCols(); ++i) { // variable i+offset was deleted if (offset < num && ind[offset] == i + offset) ++offset; // move column type from position i+offset to i coltype_[i] = coltype_[i + offset]; } } } delete[] ind; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub) { debugMessage("OsiGrbSolverInterface::addRow(%p, %g, %g)\n", (void *)&vec, rowlb, rowub); char sense; double rhs, range; convertBoundToSense(rowlb, rowub, sense, rhs, range); addRow(vec, sense, rhs, range); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng) { debugMessage("OsiGrbSolverInterface::addRow(%p, %c, %g, %g)\n", (void *)&vec, rowsen, rowrhs, rowrng); char grbsense; double rhs = rowrhs; switch (rowsen) { case 'R': /* ranged rows are added as equality rows first, and then an auxiliary variable is added */ assert(rowrng > 0.0); grbsense = GRB_EQUAL; rhs = 0.0; break; case 'N': grbsense = GRB_LESS_EQUAL; rhs = getInfinity(); break; case 'L': grbsense = GRB_LESS_EQUAL; break; case 'G': grbsense = GRB_GREATER_EQUAL; break; case 'E': grbsense = GRB_EQUAL; break; default: std::cerr << "Unknown row sense: " << rowsen << std::endl; exit(-1); } GUROBI_CALL("addRow", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("addRow", GRBaddconstr(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_COLUMN), vec.getNumElements(), const_cast< int * >(vec.getIndices()), const_cast< double * >(vec.getElements()), grbsense, rhs, NULL)); if (rowsen == 'R') convertToRangedRow(getNumRows() - 1, rowrhs, rowrng); else if (nauxcols) resizeAuxColIndSpace(); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub) { debugMessage("OsiGrbSolverInterface::addRows(%d, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowlb, (void *)rowub); int i; int nz = 0; for (i = 0; i < numrows; ++i) nz += rows[i]->getNumElements(); int *index = new int[nz]; double *elem = new double[nz]; int *start = new int[numrows + 1]; char *grbsense = new char[numrows]; double *rhs = new double[numrows]; double range; bool haverangedrows = false; nz = 0; start[0] = 0; for (i = 0; i < numrows; ++i) { const CoinPackedVectorBase *row = rows[i]; const int len = row->getNumElements(); CoinDisjointCopyN(row->getIndices(), len, index + nz); CoinDisjointCopyN(row->getElements(), len, elem + nz); nz += len; start[i + 1] = nz; convertBoundToSense(rowlb[i], rowub[i], grbsense[i], rhs[i], range); if (range || grbsense[i] == 'R') { grbsense[i] = 'E'; rhs[i] = 0.0; haverangedrows = true; } switch (grbsense[i]) { case 'N': grbsense[i] = GRB_LESS_EQUAL; rhs[i] = getInfinity(); break; case 'L': grbsense[i] = GRB_LESS_EQUAL; break; case 'G': grbsense[i] = GRB_GREATER_EQUAL; break; case 'E': grbsense[i] = GRB_EQUAL; break; } } GUROBI_CALL("addRows", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("addRows", GRBaddconstrs(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), numrows, nz, start, index, elem, grbsense, rhs, NULL)); delete[] start; delete[] elem; delete[] index; delete[] grbsense; delete[] rhs; if (haverangedrows) { int nr = getNumRows() - numrows; for (i = 0; i < numrows; ++i) if (rowlb[i] > getInfinity() && rowub[i] < getInfinity() && rowub[i] - rowlb[i] > 0.0) convertToRangedRow(nr + i, rowub[i], rowub[i] - rowlb[i]); } else if (nauxcols) resizeAuxColIndSpace(); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng) { debugMessage("OsiGrbSolverInterface::addRows(%d, %p, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowsen, (void *)rowrhs, (void *)rowrng); int i; int nz = 0; for (i = 0; i < numrows; ++i) nz += rows[i]->getNumElements(); int *index = new int[nz]; double *elem = new double[nz]; int *start = new int[numrows + 1]; char *grbsense = new char[numrows]; double *rhs = new double[numrows]; bool haverangedrows = false; nz = 0; start[0] = 0; for (i = 0; i < numrows; ++i) { const CoinPackedVectorBase *row = rows[i]; const int len = row->getNumElements(); CoinDisjointCopyN(row->getIndices(), len, index + nz); CoinDisjointCopyN(row->getElements(), len, elem + nz); nz += len; start[i + 1] = nz; rhs[i] = rowrhs[i]; switch (rowsen[i]) { case 'R': assert(rowrng[i] > 0.0); grbsense[i] = GRB_EQUAL; rhs[i] = 0.0; haverangedrows = true; break; case 'N': grbsense[i] = GRB_LESS_EQUAL; rhs[i] = getInfinity(); break; case 'L': grbsense[i] = GRB_LESS_EQUAL; break; case 'G': grbsense[i] = GRB_GREATER_EQUAL; break; case 'E': grbsense[i] = GRB_EQUAL; break; } } GUROBI_CALL("addRows", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("addRows", GRBaddconstrs(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), numrows, nz, start, index, elem, grbsense, rhs, NULL)); delete[] start; delete[] elem; delete[] index; delete[] grbsense; delete[] rhs; if (haverangedrows) { int nr = getNumRows() - numrows; for (i = 0; i < numrows; ++i) if (rowsen[i] == 'R') convertToRangedRow(nr + i, rowrhs[i], rowrng[i]); } else if (nauxcols) resizeAuxColIndSpace(); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::deleteRows(const int num, const int *rowIndices) { debugMessage("OsiGrbSolverInterface::deleteRows(%d, %p)\n", num, (void *)rowIndices); if (nauxcols) { // check if a ranged row should be deleted; if so, then convert it into a normal row first for (int i = 0; i < num; ++i) { if (auxcolind[rowIndices[i]] >= 0) convertToNormalRow(rowIndices[i], 'E', 0.0); } } GUROBI_CALL("deleteRows", GRBdelconstrs(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_COLUMN), num, const_cast< int * >(rowIndices))); if (nauxcols == 0 && getRowNames().empty()) return; int *ind = CoinCopyOfArray(rowIndices, num); qsort((void *)ind, num, sizeof(int), intcompare); if (nauxcols) { int nr = getNumRows(); int offset = 0; int j = 0; for (int i = 0; i < nr; ++i) { if (j < num && i == ind[j]) { ++offset; while (j < num && i == ind[j]) ++j; } auxcolind[i] = auxcolind[i + offset]; if (auxcolind[i] >= 0) colmap_G2O[auxcolind[i]] = -i - 1; } } #ifndef NDEBUG if (nauxcols) { int nc = getNumCols(); int nr = getNumRows(); for (int i = 0; i < nc + nauxcols; ++i) { assert(i >= nc || colmap_G2O[colmap_O2G[i]] == i); assert(colmap_G2O[i] < 0 || colmap_O2G[colmap_G2O[i]] == i); assert(colmap_G2O[i] >= 0 || -colmap_G2O[i] - 1 < nr); assert(colmap_G2O[i] >= 0 || auxcolind[-colmap_G2O[i] - 1] == i); } } #endif if (!getRowNames().empty()) for (int i = num - 1; i >= 0; --i) deleteRowNames(ind[i], 1); delete[] ind; } //############################################################################# // Methods to input a problem //############################################################################# void OsiGrbSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { debugMessage("OsiGrbSolverInterface::loadProblem(1)(%p, %p, %p, %p, %p, %p)\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowlb, (void *)rowub); const double inf = getInfinity(); int nrows = matrix.getNumRows(); char *rowSense = new char[nrows]; double *rowRhs = new double[nrows]; double *rowRange = new double[nrows]; int i; for (i = nrows - 1; i >= 0; --i) { const double lower = rowlb ? rowlb[i] : -inf; const double upper = rowub ? rowub[i] : inf; convertBoundToSense(lower, upper, rowSense[i], rowRhs[i], rowRange[i]); } loadProblem(matrix, collb, colub, obj, rowSense, rowRhs, rowRange); delete[] rowSense; delete[] rowRhs; delete[] rowRange; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub) { debugMessage("OsiGrbSolverInterface::assignProblem()\n"); loadProblem(*matrix, collb, colub, obj, rowlb, rowub); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowlb; rowlb = 0; delete[] rowub; rowub = 0; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { debugMessage("OsiGrbSolverInterface::loadProblem(2)(%p, %p, %p, %p, %p, %p, %p)\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen, (void *)rowrhs, (void *)rowrng); int nc = matrix.getNumCols(); int nr = matrix.getNumRows(); int i; char *myrowsen = new char[nr]; double *myrowrhs = new double[nr]; bool haverangedrows = false; for (i = 0; i < nr; ++i) { if (rowrhs) myrowrhs[i] = rowrhs[i]; else myrowrhs[i] = 0.0; if (rowsen) switch (rowsen[i]) { case 'R': assert(rowrng && rowrng[i] > 0.0); myrowsen[i] = GRB_EQUAL; myrowrhs[i] = 0.0; haverangedrows = true; break; case 'N': myrowsen[i] = GRB_LESS_EQUAL; myrowrhs[i] = getInfinity(); break; case 'L': myrowsen[i] = GRB_LESS_EQUAL; break; case 'G': myrowsen[i] = GRB_GREATER_EQUAL; break; case 'E': myrowsen[i] = GRB_EQUAL; break; } else myrowsen[i] = 'G'; } // Set column values to defaults if NULL pointer passed double *clb; double *cub; double *ob; if (collb != NULL) clb = const_cast< double * >(collb); else { clb = new double[nc]; CoinFillN(clb, nc, 0.0); } if (colub != NULL) cub = const_cast< double * >(colub); else { cub = new double[nc]; CoinFillN(cub, nc, getInfinity()); } if (obj != NULL) ob = const_cast< double * >(obj); else { ob = new double[nc]; CoinFillN(ob, nc, 0.0); } bool freeMatrixRequired = false; CoinPackedMatrix *m = NULL; if (!matrix.isColOrdered()) { m = new CoinPackedMatrix(); m->reverseOrderedCopyOf(matrix); freeMatrixRequired = true; } else m = const_cast< CoinPackedMatrix * >(&matrix); // up to GUROBI 2.0.1, GUROBI may give an "Index is out of range" error if the constraint matrix has uninitalized "gaps" #if (GRB_VERSION_MAJOR < 2) || (GRB_VERSION_MAJOR == 2 && GRB_VERSION_MINOR == 0 && GRB_VERSION_TECHNICAL <= 1) if (m->hasGaps()) { if (freeMatrixRequired) { m->removeGaps(); } else { m = new CoinPackedMatrix(matrix); if (m->hasGaps()) m->removeGaps(); freeMatrixRequired = true; } } #endif assert(nc == m->getNumCols()); assert(nr == m->getNumRows()); assert(m->isColOrdered()); int modelsense; GUROBI_CALL("loadProblem", GRBupdatemodel(getMutableLpPtr())); GUROBI_CALL("loadProblem", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_MODELSENSE, &modelsense)); std::string pn; getStrParam(OsiProbName, pn); gutsOfDestructor(); // kill old LP, if any GUROBI_CALL("loadProblem", GRBloadmodel(getEnvironmentPtr(), &lp_, const_cast< char * >(pn.c_str()), nc, nr, modelsense, 0.0, ob, const_cast< char * >(myrowsen), myrowrhs, const_cast< int * >(m->getVectorStarts()), const_cast< int * >(m->getVectorLengths()), const_cast< int * >(m->getIndices()), const_cast< double * >(m->getElements()), const_cast< double * >(clb), const_cast< double * >(cub), NULL, NULL, NULL)); // GUROBI up to version 2.0.1 may return a scaled LP after GRBoptimize when requesting it via GRBgetvars #if (GRB_VERSION_MAJOR < 2) || (GRB_VERSION_MAJOR == 2 && GRB_VERSION_MINOR == 0 && GRB_VERSION_TECHNICAL <= 1) setHintParam(OsiDoScale, false); #endif delete[] myrowsen; delete[] myrowrhs; if (collb == NULL) delete[] clb; if (colub == NULL) delete[] cub; if (obj == NULL) delete[] ob; if (freeMatrixRequired) delete m; resizeColSpace(nc); CoinFillN(coltype_, nc, GRB_CONTINUOUS); if (haverangedrows) { assert(rowrhs); assert(rowrng); assert(rowsen); for (i = 0; i < nr; ++i) if (rowsen[i] == 'R') convertToRangedRow(i, rowrhs[i], rowrng[i]); } } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng) { debugMessage("OsiGrbSolverInterface::assignProblem()\n"); loadProblem(*matrix, collb, colub, obj, rowsen, rowrhs, rowrng); delete matrix; matrix = NULL; delete[] collb; collb = NULL; delete[] colub; colub = NULL; delete[] obj; obj = NULL; delete[] rowsen; rowsen = NULL; delete[] rowrhs; rowrhs = NULL; delete[] rowrng; rowrng = NULL; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { debugMessage("OsiGrbSolverInterface::loadProblem(3)()\n"); const double inf = getInfinity(); char *rowSense = new char[numrows]; double *rowRhs = new double[numrows]; double *rowRange = new double[numrows]; for (int i = numrows - 1; i >= 0; --i) { const double lower = rowlb ? rowlb[i] : -inf; const double upper = rowub ? rowub[i] : inf; convertBoundToSense(lower, upper, rowSense[i], rowRhs[i], rowRange[i]); } loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowSense, rowRhs, rowRange); delete[] rowSense; delete[] rowRhs; delete[] rowRange; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { debugMessage("OsiGrbSolverInterface::loadProblem(4)(%d, %d, %p, %p, %p, %p, %p, %p, %p, %p, %p)\n", numcols, numrows, (void *)start, (void *)index, (void *)value, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen, (void *)rowrhs, (void *)rowrng); int nc = numcols; int nr = numrows; int i; char *myrowsen = new char[nr]; double *myrowrhs = new double[nr]; bool haverangedrows = false; for (i = 0; i < nr; i++) { if (rowrhs) myrowrhs[i] = rowrhs[i]; else myrowrhs[i] = 0.0; if (rowsen) switch (rowsen[i]) { case 'R': assert(rowrng && rowrng[i] > 0.0); myrowsen[i] = GRB_EQUAL; myrowrhs[i] = 0.0; haverangedrows = true; break; case 'N': myrowsen[i] = GRB_LESS_EQUAL; myrowrhs[i] = getInfinity(); break; case 'L': myrowsen[i] = GRB_LESS_EQUAL; break; case 'G': myrowsen[i] = GRB_GREATER_EQUAL; break; case 'E': myrowsen[i] = GRB_EQUAL; break; } else myrowsen[i] = 'G'; } // Set column values to defaults if NULL pointer passed double *clb; double *cub; double *ob; if (collb != NULL) clb = const_cast< double * >(collb); else { clb = new double[nc]; CoinFillN(clb, nc, 0.0); } if (colub != NULL) cub = const_cast< double * >(colub); else { cub = new double[nc]; CoinFillN(cub, nc, getInfinity()); } if (obj != NULL) ob = const_cast< double * >(obj); else { ob = new double[nc]; CoinFillN(ob, nc, 0.0); } int *len = new int[nc]; for (i = 0; i < nc; ++i) len[i] = start[i + 1] - start[i]; GUROBI_CALL("loadProblem", GRBupdatemodel(getMutableLpPtr())); int modelsense; GUROBI_CALL("loadProblem", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_MODELSENSE, &modelsense)); std::string pn; getStrParam(OsiProbName, pn); gutsOfDestructor(); // kill old LP, if any GUROBI_CALL("loadProblem", GRBloadmodel(getEnvironmentPtr(), &lp_, const_cast< char * >(pn.c_str()), nc, nr, modelsense, 0.0, ob, myrowsen, myrowrhs, const_cast< int * >(start), len, const_cast< int * >(index), const_cast< double * >(value), const_cast< double * >(clb), const_cast< double * >(cub), NULL, NULL, NULL)); // GUROBI up to version 2.0.1 may return a scaled LP after GRBoptimize when requesting it via GRBgetvars #if (GRB_VERSION_MAJOR < 2) || (GRB_VERSION_MAJOR == 2 && GRB_VERSION_MINOR == 0 && GRB_VERSION_TECHNICAL <= 1) setHintParam(OsiDoScale, false); #endif delete[] myrowsen; delete[] myrowrhs; if (collb == NULL) delete[] clb; if (colub == NULL) delete[] cub; if (obj == NULL) delete[] ob; delete[] len; resizeColSpace(nc); CoinFillN(coltype_, nc, GRB_CONTINUOUS); if (haverangedrows) { assert(rowrhs); assert(rowrng); assert(rowsen); for (i = 0; i < nr; ++i) if (rowsen[i] == 'R') convertToRangedRow(i, rowrhs[i], rowrng[i]); } } //----------------------------------------------------------------------------- // Read mps files //----------------------------------------------------------------------------- int OsiGrbSolverInterface::readMps(const char *filename, const char *extension) { debugMessage("OsiGrbSolverInterface::readMps(%s, %s)\n", filename, extension); // just call base class method return OsiSolverInterface::readMps(filename, extension); } //----------------------------------------------------------------------------- // Write mps files //----------------------------------------------------------------------------- void OsiGrbSolverInterface::writeMps(const char *filename, const char *extension, double objSense) const { debugMessage("OsiGrbSolverInterface::writeMps(%s, %s, %g)\n", filename, extension, objSense); std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; //TODO give row and column names? writeMpsNative(fullname.c_str(), NULL, NULL); // do not call Gurobi's MPS writer, because // 1. it only writes mps if the extension is mps // 2. the instance in Gurobi may have extra columns due to reformulated ranged rows, that may be confusing // GUROBI_CALL( "writeMps", GRBwrite(getMutableLpPtr(), const_cast(fullname.c_str())) ); } //############################################################################# // CPX specific public interfaces //############################################################################# GRBenv *OsiGrbSolverInterface::getEnvironmentPtr() const { assert(localenv_ != NULL || globalenv_ != NULL); return localenv_ ? localenv_ : globalenv_; } GRBmodel *OsiGrbSolverInterface::getLpPtr(int keepCached) { freeCachedData(keepCached); return getMutableLpPtr(); } /// Return whether the current Gurobi environment runs in demo mode. bool OsiGrbSolverInterface::isDemoLicense() const { debugMessage("OsiGrbSolverInterface::isDemoLicense()\n"); GRBenv *env = getEnvironmentPtr(); GRBmodel *testlp; // a Gurobi demo license allows to solve only models with up to 500 variables // thus, let's try to create and solve a model with 1000 variables GUROBI_CALL("isDemoLicense", GRBnewmodel(env, &testlp, "licensetest", 1000, NULL, NULL, NULL, NULL, NULL)); // GUROBI_CALL( "resolve", GRBsetintparam(GRBgetenv(testlp), GRB_INT_PAR_PRESOLVE, presolve) ); int rc = GRBoptimize(testlp); if (rc == GRB_ERROR_SIZE_LIMIT_EXCEEDED) return true; GUROBI_CALL("isDemoLicense", rc); GRBfreemodel(testlp); return false; } //----------------------------------------------------------------------------- const char *OsiGrbSolverInterface::getCtype() const { debugMessage("OsiGrbSolverInterface::getCtype()\n"); return coltype_; } //############################################################################# // Static instance counter methods //############################################################################# void OsiGrbSolverInterface::incrementInstanceCounter() { if (numInstances_ == 0 && !globalenv_) { GUROBI_CALL("incrementInstanceCounter", GRBloadenv(&globalenv_, NULL)); assert(globalenv_ != NULL); globalenv_is_ours = true; } numInstances_++; } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::decrementInstanceCounter() { assert(numInstances_ != 0); assert(globalenv_ != NULL); numInstances_--; if (numInstances_ == 0 && globalenv_is_ours) { GRBfreeenv(globalenv_); globalenv_ = NULL; } } //----------------------------------------------------------------------------- unsigned int OsiGrbSolverInterface::getNumInstances() { return numInstances_; } void OsiGrbSolverInterface::setEnvironment(GRBenv *globalenv) { if (numInstances_) { assert(globalenv_); throw CoinError("Cannot set global GUROBI environment, since some OsiGrb instance is still using it.", "setEnvironment", "OsiGrbSolverInterface", __FILE__, __LINE__); } assert(!globalenv_ || !globalenv_is_ours); globalenv_ = globalenv; globalenv_is_ours = false; } //############################################################################# // Constructors, destructors clone and assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiGrbSolverInterface::OsiGrbSolverInterface(bool use_local_env) : OsiSolverInterface() , localenv_(NULL) , lp_(NULL) , hotStartCStat_(NULL) , hotStartCStatSize_(0) , hotStartRStat_(NULL) , hotStartRStatSize_(0) , hotStartMaxIteration_(1000000) , // ??? default iteration limit for strong branching is large nameDisc_(0) , obj_(NULL) , collower_(NULL) , colupper_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , rowlower_(NULL) , rowupper_(NULL) , colsol_(NULL) , rowsol_(NULL) , redcost_(NULL) , rowact_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) , probtypemip_(false) , domipstart(false) , colspace_(0) , coltype_(NULL) , nauxcols(0) , auxcolspace(0) , colmap_O2G(NULL) , colmap_G2O(NULL) , auxcolindspace(0) , auxcolind(NULL) { debugMessage("OsiGrbSolverInterface::OsiGrbSolverInterface()\n"); if (use_local_env) { GUROBI_CALL("OsiGrbSolverInterface", GRBloadenv(&localenv_, NULL)); assert(localenv_ != NULL); } else incrementInstanceCounter(); gutsOfConstructor(); // change Osi default to Gurobi default setHintParam(OsiDoDualInInitial, true, OsiHintTry); } OsiGrbSolverInterface::OsiGrbSolverInterface(GRBenv *localgrbenv) : OsiSolverInterface() , localenv_(localgrbenv) , lp_(NULL) , hotStartCStat_(NULL) , hotStartCStatSize_(0) , hotStartRStat_(NULL) , hotStartRStatSize_(0) , hotStartMaxIteration_(1000000) , // ??? default iteration limit for strong branching is large nameDisc_(0) , obj_(NULL) , collower_(NULL) , colupper_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , rowlower_(NULL) , rowupper_(NULL) , colsol_(NULL) , rowsol_(NULL) , redcost_(NULL) , rowact_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) , probtypemip_(false) , domipstart(false) , colspace_(0) , coltype_(NULL) , nauxcols(0) , auxcolspace(0) , colmap_O2G(NULL) , colmap_G2O(NULL) , auxcolindspace(0) , auxcolind(NULL) { debugMessage("OsiGrbSolverInterface::OsiGrbSolverInterface()\n"); if (localenv_ == NULL) { // if user called this constructor with NULL pointer, we assume that he meant that a local environment should be created GUROBI_CALL("OsiGrbSolverInterface", GRBloadenv(&localenv_, NULL)); assert(localenv_ != NULL); } gutsOfConstructor(); // change Osi default to Gurobi default setHintParam(OsiDoDualInInitial, true, OsiHintTry); } //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiSolverInterface *OsiGrbSolverInterface::clone(bool copyData) const { debugMessage("OsiGrbSolverInterface::clone(%d)\n", copyData); return (new OsiGrbSolverInterface(*this)); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiGrbSolverInterface::OsiGrbSolverInterface(const OsiGrbSolverInterface &source) : OsiSolverInterface(source) , localenv_(NULL) , lp_(NULL) , hotStartCStat_(NULL) , hotStartCStatSize_(0) , hotStartRStat_(NULL) , hotStartRStatSize_(0) , hotStartMaxIteration_(source.hotStartMaxIteration_) , nameDisc_(source.nameDisc_) , obj_(NULL) , collower_(NULL) , colupper_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , rowlower_(NULL) , rowupper_(NULL) , colsol_(NULL) , rowsol_(NULL) , redcost_(NULL) , rowact_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) , probtypemip_(false) , domipstart(false) , colspace_(0) , coltype_(NULL) , nauxcols(0) , auxcolspace(0) , colmap_O2G(NULL) , colmap_G2O(NULL) , auxcolindspace(0) , auxcolind(NULL) { debugMessage("OsiGrbSolverInterface::OsiGrbSolverInterface(%p)\n", (void *)&source); if (source.localenv_) { GUROBI_CALL("OsiGrbSolverInterface", GRBloadenv(&localenv_, NULL)); assert(localenv_ != NULL); } else incrementInstanceCounter(); gutsOfConstructor(); gutsOfCopy(source); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiGrbSolverInterface::~OsiGrbSolverInterface() { debugMessage("OsiGrbSolverInterface::~OsiGrbSolverInterface()\n"); gutsOfDestructor(); if (localenv_) { GRBfreeenv(localenv_); } else decrementInstanceCounter(); } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiGrbSolverInterface &OsiGrbSolverInterface::operator=(const OsiGrbSolverInterface &rhs) { debugMessage("OsiGrbSolverInterface::operator=(%p)\n", (void *)&rhs); if (this != &rhs) { OsiSolverInterface::operator=(rhs); gutsOfDestructor(); gutsOfConstructor(); if (rhs.lp_ != NULL) gutsOfCopy(rhs); } return *this; } //############################################################################# // Applying cuts //############################################################################# OsiSolverInterface::ApplyCutsReturnCode OsiGrbSolverInterface::applyCuts(const OsiCuts &cs, double effectivenessLb) { debugMessage("OsiGrbSolverInterface::applyCuts(%p)\n", (void *)&cs); OsiSolverInterface::ApplyCutsReturnCode retVal; int i; // Loop once for each column cut for (i = 0; i < cs.sizeColCuts(); i++) { if (cs.colCut(i).effectiveness() < effectivenessLb) { retVal.incrementIneffective(); continue; } if (!cs.colCut(i).consistent()) { retVal.incrementInternallyInconsistent(); continue; } if (!cs.colCut(i).consistent(*this)) { retVal.incrementExternallyInconsistent(); continue; } if (cs.colCut(i).infeasible(*this)) { retVal.incrementInfeasible(); continue; } applyColCut(cs.colCut(i)); retVal.incrementApplied(); } // Loop once for each row cut int nToApply = 0; size_t space = 0; for (i = 0; i < cs.sizeRowCuts(); i++) { if (cs.rowCut(i).effectiveness() < effectivenessLb) { retVal.incrementIneffective(); continue; } if (!cs.rowCut(i).consistent()) { retVal.incrementInternallyInconsistent(); continue; } if (!cs.rowCut(i).consistent(*this)) { retVal.incrementExternallyInconsistent(); continue; } if (cs.rowCut(i).infeasible(*this)) { retVal.incrementInfeasible(); continue; } nToApply++; space += cs.rowCut(i).row().getNumElements(); retVal.incrementApplied(); } int base_row = getNumRows(); int base_col = getNumCols() + nauxcols; //now apply row cuts jointly int *start = new int[nToApply + 1]; int *indices = new int[space]; double *values = new double[space]; double *lower = new double[nToApply]; double *upper = new double[nToApply]; int cur = 0; int r = 0; int nTrulyRanged = nToApply; for (i = 0; i < cs.sizeRowCuts(); i++) { if (cs.rowCut(i).effectiveness() < effectivenessLb) { continue; } if (!cs.rowCut(i).consistent()) { continue; } if (!cs.rowCut(i).consistent(*this)) { continue; } if (cs.rowCut(i).infeasible(*this)) { continue; } start[r] = cur; const OsiRowCut &rowCut = cs.rowCut(i); lower[r] = rowCut.lb(); upper[r] = rowCut.ub(); std::cerr << "range " << lower[r] << " - " << upper[r] << std::endl; if (lower[r] <= -getInfinity()) { lower[r] = -GRB_INFINITY; nTrulyRanged--; } else if (upper[r] >= getInfinity()) { upper[r] = GRB_INFINITY; nTrulyRanged--; } for (int k = 0; k < rowCut.row().getNumElements(); k++) { values[cur + k] = rowCut.row().getElements()[k]; indices[cur + k] = rowCut.row().getIndices()[k]; } r++; cur += rowCut.row().getNumElements(); } start[nToApply] = cur; int nPrevVars = getNumCols(); GUROBI_CALL("applyRowCuts", GRBaddrangeconstrs(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_COLUMN), nToApply, static_cast< int >(space), start, indices, values, lower, upper, NULL)); GUROBI_CALL("applyRowCuts", GRBupdatemodel(getMutableLpPtr())); // store correspondence between ranged rows and new variables added by Gurobi int nNewVars = getNumCols() - nPrevVars; if (nNewVars != nTrulyRanged) { std::cerr << "ERROR in applying cuts for Gurobi: " << __FILE__ << " : " << "line " << __LINE__ << " . Exiting" << std::endl; exit(-1); } if (nTrulyRanged > 0) { if (nauxcols == 0) { // this is the first ranged row assert(colmap_O2G == NULL); assert(colmap_G2O == NULL); assert(colspace_ >= getNumCols()); auxcolspace = nTrulyRanged; colmap_G2O = new int[colspace_ + auxcolspace]; CoinIotaN(colmap_G2O, colspace_ + auxcolspace, 0); colmap_O2G = CoinCopyOfArray(colmap_G2O, colspace_); } else { assert(colmap_O2G != NULL); assert(colmap_G2O != NULL); resizeAuxColSpace(nauxcols + nTrulyRanged); } nauxcols += nTrulyRanged; resizeAuxColIndSpace(); int next = 0; for (int k = 0; k < nToApply; k++) { if (lower[k] > -GRB_INFINITY && upper[k] < GRB_INFINITY) { auxcolind[base_row + next] = base_col + next; colmap_G2O[auxcolind[base_row + next]] = -(base_row + next) - 1; next++; } } } delete[] start; delete[] indices; delete[] values; delete[] lower; delete[] upper; return retVal; } void OsiGrbSolverInterface::applyColCut(const OsiColCut &cc) { debugMessage("OsiGrbSolverInterface::applyColCut(%p)\n", (void *)&cc); const double *gurobiColLB = getColLower(); const double *gurobiColUB = getColUpper(); const CoinPackedVector &lbs = cc.lbs(); const CoinPackedVector &ubs = cc.ubs(); int i; for (i = 0; i < lbs.getNumElements(); ++i) if (lbs.getElements()[i] > gurobiColLB[lbs.getIndices()[i]]) setColLower(lbs.getIndices()[i], lbs.getElements()[i]); for (i = 0; i < ubs.getNumElements(); ++i) if (ubs.getElements()[i] < gurobiColUB[ubs.getIndices()[i]]) setColUpper(ubs.getIndices()[i], ubs.getElements()[i]); } //----------------------------------------------------------------------------- void OsiGrbSolverInterface::applyRowCut(const OsiRowCut &rowCut) { debugMessage("OsiGrbSolverInterface::applyRowCut(%p)\n", (void *)&rowCut); double rhs = 0.0; char sns; double lb = rowCut.lb(); double ub = rowCut.ub(); bool isrange = false; if (lb <= -getInfinity() && ub >= getInfinity()) // free constraint { rhs = getInfinity(); sns = GRB_LESS_EQUAL; } else if (lb <= -getInfinity()) // <= constraint { rhs = ub; sns = GRB_LESS_EQUAL; } else if (ub >= getInfinity()) // >= constraint { rhs = lb; sns = GRB_GREATER_EQUAL; } else if (ub == lb) // = constraint { rhs = ub; sns = GRB_EQUAL; } else // range constraint { rhs = 0.0; sns = GRB_EQUAL; isrange = true; } GUROBI_CALL("applyRowCut", GRBaddconstr(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_COLUMN), rowCut.row().getNumElements(), const_cast< int * >(rowCut.row().getIndices()), const_cast< double * >(rowCut.row().getElements()), sns, rhs, NULL)); if (isrange) { convertToRangedRow(getNumRows() - 1, ub, ub - lb); } else if (nauxcols) resizeAuxColIndSpace(); } //############################################################################# // Private methods (non-static and static) and static data //############################################################################# //------------------------------------------------------------------ // Static data //------------------------------------------------------------------ GRBenv *OsiGrbSolverInterface::globalenv_ = NULL; bool OsiGrbSolverInterface::globalenv_is_ours = true; unsigned int OsiGrbSolverInterface::numInstances_ = 0; //------------------------------------------------------------------- // Get pointer to GRBmodel*. // const methods should use getMutableLpPtr(). // non-const methods should use getLpPtr(). //------------------------------------------------------------------- GRBmodel *OsiGrbSolverInterface::getMutableLpPtr() const { if (lp_ == NULL) { assert(getEnvironmentPtr() != NULL); GUROBI_CALL("getMutableLpPtr", GRBnewmodel(getEnvironmentPtr(), &lp_, "OsiGrb_problem", 0, NULL, NULL, NULL, NULL, NULL)); assert(lp_ != NULL); // GUROBI up to version 2.0.1 may return a scaled LP after GRBoptimize when requesting it via GRBgetvars #if (GRB_VERSION_MAJOR < 2) || (GRB_VERSION_MAJOR == 2 && GRB_VERSION_MINOR == 0 && GRB_VERSION_TECHNICAL <= 1) GUROBI_CALL("getMutableLpPtr", GRBsetintparam(GRBgetenv(lp_), GRB_INT_PAR_SCALEFLAG, 0)); #endif } return lp_; } //------------------------------------------------------------------- void OsiGrbSolverInterface::gutsOfCopy(const OsiGrbSolverInterface &source) { // Set Rim and constraints const double *obj = source.getObjCoefficients(); const double *rhs = source.getRightHandSide(); const char *sense = source.getRowSense(); const CoinPackedMatrix *cols = source.getMatrixByCol(); const double *lb = source.getColLower(); const double *ub = source.getColUpper(); loadProblem(*cols, lb, ub, obj, sense, rhs, source.getRowRange()); // Set Objective Sense setObjSense(source.getObjSense()); // Set Objective Constant double dblParam; source.getDblParam(OsiObjOffset, dblParam); setDblParam(OsiObjOffset, dblParam); // Set MIP information resizeColSpace(source.colspace_); CoinDisjointCopyN(source.coltype_, source.colspace_, coltype_); // Set Problem name std::string strParam; source.getStrParam(OsiProbName, strParam); setStrParam(OsiProbName, strParam); // Set Solution - not supported by Gurobi // setColSolution(source.getColSolution()); // setRowPrice(source.getRowPrice()); } //------------------------------------------------------------------- void OsiGrbSolverInterface::gutsOfConstructor() { } //------------------------------------------------------------------- void OsiGrbSolverInterface::gutsOfDestructor() { debugMessage("OsiGrbSolverInterface::gutsOfDestructor()\n"); if (lp_ != NULL) { GUROBI_CALL("gutsOfDestructor", GRBfreemodel(lp_)); lp_ = NULL; freeAllMemory(); } assert(lp_ == NULL); assert(obj_ == NULL); assert(collower_ == NULL); assert(colupper_ == NULL); assert(rowsense_ == NULL); assert(rhs_ == NULL); assert(rowrange_ == NULL); assert(rowlower_ == NULL); assert(rowupper_ == NULL); assert(colsol_ == NULL); assert(rowsol_ == NULL); assert(redcost_ == NULL); assert(rowact_ == NULL); assert(matrixByRow_ == NULL); assert(matrixByCol_ == NULL); assert(coltype_ == NULL); assert(colspace_ == 0); assert(auxcolspace == 0); assert(auxcolindspace == 0); } //------------------------------------------------------------------- /// free cached vectors void OsiGrbSolverInterface::freeCachedColRim() { freeCacheDouble(obj_); freeCacheDouble(collower_); freeCacheDouble(colupper_); assert(obj_ == NULL); assert(collower_ == NULL); assert(colupper_ == NULL); } void OsiGrbSolverInterface::freeCachedRowRim() { freeCacheChar(rowsense_); freeCacheDouble(rhs_); freeCacheDouble(rowrange_); freeCacheDouble(rowlower_); freeCacheDouble(rowupper_); assert(rowsense_ == NULL); assert(rhs_ == NULL); assert(rowrange_ == NULL); assert(rowlower_ == NULL); assert(rowupper_ == NULL); } void OsiGrbSolverInterface::freeCachedMatrix() { freeCacheMatrix(matrixByRow_); freeCacheMatrix(matrixByCol_); assert(matrixByRow_ == NULL); assert(matrixByCol_ == NULL); } void OsiGrbSolverInterface::freeCachedResults() { freeCacheDouble(colsol_); freeCacheDouble(rowsol_); freeCacheDouble(redcost_); freeCacheDouble(rowact_); assert(colsol_ == NULL); assert(rowsol_ == NULL); assert(redcost_ == NULL); assert(rowact_ == NULL); } void OsiGrbSolverInterface::freeCachedData(int keepCached) { if (!(keepCached & OsiGrbSolverInterface::KEEPCACHED_COLUMN)) freeCachedColRim(); if (!(keepCached & OsiGrbSolverInterface::KEEPCACHED_ROW)) freeCachedRowRim(); if (!(keepCached & OsiGrbSolverInterface::KEEPCACHED_MATRIX)) freeCachedMatrix(); if (!(keepCached & OsiGrbSolverInterface::KEEPCACHED_RESULTS)) freeCachedResults(); } void OsiGrbSolverInterface::freeAllMemory() { freeCachedData(); if (hotStartCStat_ != NULL) delete[] hotStartCStat_; if (hotStartRStat_ != NULL) delete[] hotStartRStat_; hotStartCStat_ = NULL; hotStartCStatSize_ = 0; hotStartRStat_ = NULL; hotStartRStatSize_ = 0; freeColSpace(); delete[] auxcolind; auxcolind = NULL; auxcolindspace = 0; } /// converts a normal row into a ranged row by adding an auxiliary variable void OsiGrbSolverInterface::convertToRangedRow(int rowidx, double rhs, double range) { debugMessage("OsiGrbSolverInterface::convertToRangedRow()\n"); assert(rowidx >= 0); assert(rowidx < getNumRows()); assert(rhs > -getInfinity()); assert(rhs < getInfinity()); assert(range > 0.0); assert(range < getInfinity()); if (nauxcols == 0) { // row rowidx is the first ranged row assert(colmap_O2G == NULL); assert(colmap_G2O == NULL); assert(colspace_ >= getNumCols()); auxcolspace = 1; colmap_G2O = new int[colspace_ + auxcolspace]; CoinIotaN(colmap_G2O, colspace_ + auxcolspace, 0); colmap_O2G = CoinCopyOfArray(colmap_G2O, colspace_); } else { assert(colmap_O2G != NULL); assert(colmap_G2O != NULL); resizeAuxColSpace(nauxcols + 1); } resizeAuxColIndSpace(); assert(auxcolind[rowidx] == -1); /* not a ranged row yet */ GUROBI_CALL("convertToRangedRow", GRBupdatemodel(getMutableLpPtr())); double minusone = -1.0; GUROBI_CALL("convertToRangedRow", GRBaddvar(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_PROBLEM), 1, &rowidx, &minusone, 0.0, rhs - range, rhs, GRB_CONTINUOUS, NULL)); auxcolind[rowidx] = getNumCols() + nauxcols - 1; colmap_G2O[auxcolind[rowidx]] = -rowidx - 1; ++nauxcols; #ifndef NDEBUG if (nauxcols) { int nc = getNumCols(); int nr = getNumRows(); for (int i = 0; i < nc + nauxcols; ++i) { assert(i >= nc || colmap_G2O[colmap_O2G[i]] == i); assert(colmap_G2O[i] < 0 || colmap_O2G[colmap_G2O[i]] == i); assert(colmap_G2O[i] >= 0 || -colmap_G2O[i] - 1 < nr); assert(colmap_G2O[i] >= 0 || auxcolind[-colmap_G2O[i] - 1] == i); } } #endif } /// converts a ranged row into a normal row by removing its auxiliary variable void OsiGrbSolverInterface::convertToNormalRow(int rowidx, char sense, double rhs) { debugMessage("OsiGrbSolverInterface::convertToNormalRow()\n"); assert(rowidx >= 0); assert(rowidx < getNumRows()); int auxvar = auxcolind[rowidx]; assert(nauxcols); assert(auxvar >= 0); assert(colmap_G2O[auxvar] == -rowidx - 1); GUROBI_CALL("convertToNormalRow", GRBupdatemodel(getMutableLpPtr())); /* row rowidx should be an ordinary equality row with rhs == 0 now */ GUROBI_CALL("convertToNormalRow", GRBdelvars(getLpPtr(OsiGrbSolverInterface::KEEPCACHED_ROW), 1, &auxcolind[rowidx])); auxcolind[rowidx] = -1; if (nauxcols > 1) { int nc = getNumCols(); for (int i = auxvar; i < nc; ++i) { if (colmap_O2G[i] > auxvar) --colmap_O2G[i]; colmap_G2O[i] = colmap_G2O[i + 1]; } for (int i = nc; i < nc + nauxcols; ++i) colmap_G2O[i] = colmap_G2O[i + 1]; int nr = getNumRows(); for (int i = 0; i < nr; ++i) if (auxcolind[i] > auxvar) --auxcolind[i]; --nauxcols; } else { // no ranged rows left delete[] colmap_O2G; delete[] colmap_G2O; delete[] auxcolind; auxcolspace = 0; auxcolindspace = 0; nauxcols = 0; } setRowType(rowidx, sense, rhs, 0.0); #ifndef NDEBUG if (nauxcols) { int nc = getNumCols(); int nr = getNumRows(); for (int i = 0; i < nc + nauxcols; ++i) { assert(i >= nc || colmap_G2O[colmap_O2G[i]] == i); assert(colmap_G2O[i] < 0 || colmap_O2G[colmap_G2O[i]] == i); assert(colmap_G2O[i] >= 0 || -colmap_G2O[i] - 1 < nr); assert(colmap_G2O[i] >= 0 || auxcolind[-colmap_G2O[i] - 1] == i); } } #endif } //############################################################################# // Resets as if default constructor void OsiGrbSolverInterface::reset() { setInitialData(); // clear base class gutsOfDestructor(); } /**********************************************************************/ /* Returns 1 if can just do getBInv etc 2 if has all OsiSimplex methods and 0 if it has none */ int OsiGrbSolverInterface::canDoSimplexInterface() const { return 0; } /**********************************************************************/ bool OsiGrbSolverInterface::basisIsAvailable() const { if (getNumCols() == 0) return true; GUROBI_CALL("basisIsAvailable", GRBupdatemodel(getMutableLpPtr())); int status; GUROBI_CALL("basisIsAvailable", GRBgetintattr(getMutableLpPtr(), GRB_INT_ATTR_STATUS, &status)); if (status == GRB_LOADED || status == GRB_INFEASIBLE || status == GRB_INF_OR_UNBD || status == GRB_UNBOUNDED) return false; int dum; return GRBgetintattrelement(getMutableLpPtr(), GRB_INT_ATTR_VBASIS, 0, &dum) == 0; } /* Osi return codes: 0: free 1: basic 2: upper 3: lower */ void OsiGrbSolverInterface::getBasisStatus(int *cstat, int *rstat) const { int numcols = getNumCols(); int numrows = getNumRows(); GUROBI_CALL("getBasisStatus", GRBupdatemodel(getMutableLpPtr())); if (nauxcols) GUROBI_CALL("getBasisStatus", GRBgetintattrlist(getMutableLpPtr(), GRB_INT_ATTR_VBASIS, numcols, colmap_O2G, cstat)); else GUROBI_CALL("getBasisStatus", GRBgetintattrarray(getMutableLpPtr(), GRB_INT_ATTR_VBASIS, 0, numcols, cstat)); for (int i = 0; i < numcols; ++i) switch (cstat[i]) { case GRB_BASIC: cstat[i] = 1; break; case GRB_NONBASIC_LOWER: cstat[i] = 3; break; case GRB_NONBASIC_UPPER: cstat[i] = 2; break; case GRB_SUPERBASIC: cstat[i] = 0; break; } GUROBI_CALL("getBasisStatus", GRBgetintattrarray(getMutableLpPtr(), GRB_INT_ATTR_CBASIS, 0, numrows, rstat)); char sense; for (int i = 0; i < numrows; ++i) { if (nauxcols && auxcolind[i] >= 0) { /* if the row is a ranged row, then we take the basis status from the corresponding auxiliary column is this correct??? */ int auxcolstat; GUROBI_CALL("getBasisStatus", GRBgetintattrelement(getMutableLpPtr(), GRB_INT_ATTR_VBASIS, auxcolind[i], &auxcolstat)); switch (auxcolstat) { case GRB_BASIC: rstat[i] = 1; break; case GRB_NONBASIC_LOWER: rstat[i] = 3; break; case GRB_NONBASIC_UPPER: rstat[i] = 2; break; case GRB_SUPERBASIC: rstat[i] = 0; break; } } else { switch (rstat[i]) { case GRB_SUPERBASIC: rstat[i] = 0; break; case GRB_BASIC: rstat[i] = 1; break; case GRB_NONBASIC_LOWER: case GRB_NONBASIC_UPPER: GUROBI_CALL("getBasisStatus", GRBgetcharattrelement(getMutableLpPtr(), GRB_CHAR_ATTR_SENSE, i, &sense)); rstat[i] = (sense == '>' ? 2 : 3); break; } } } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiGrb/osi-gurobi-uninstalled.pc.in0000644000175200017520000000044011507670402021111 0ustar coincoinprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiGrb Name: OsiGurobi Description: COIN-OR Open Solver Interface for Gurobi URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiGrb.la @GRBLIB@ Cflags: -I@abs_source_dir@/src/OsiGrb -I@GRBINCDIR@ Requires: osi DyLP-1.10.4/Osi/src/OsiGrb/osi-gurobi.pc.in0000644000175200017520000000046711510106235016572 0ustar coincoinprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiGurobi Description: COIN-OR Open Solver Interface for Gurobi URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiGrb @GRBLIB@ Cflags: -I${includedir} -I@GRBINCDIR@ Requires: osi DyLP-1.10.4/Osi/src/OsiGrb/OsiGrbSolverInterface.hpp0000644000175200017520000010263713414504222020501 0ustar coincoin//----------------------------------------------------------------------------- // name: OSI Interface for Gurobi // template: OSI Cplex Interface written by T. Achterberg // author: Stefan Vigerske // Humboldt University Berlin // date: 09/02/2009 // license: this file may be freely distributed under the terms of EPL // comments: please scan this file for '???' and read the comments //----------------------------------------------------------------------------- // Copyright (C) 2009 Humboldt University Berlin and others. // All Rights Reserved. // $Id: OsiGrbSolverInterface.hpp 2197 2019-01-06 23:00:34Z unxusr $ #ifndef OsiGrbSolverInterface_H #define OsiGrbSolverInterface_H #include #include "OsiSolverInterface.hpp" typedef struct _GRBmodel GRBmodel; typedef struct _GRBenv GRBenv; /** Gurobi Solver Interface Instantiation of OsiGrbSolverInterface for Gurobi */ class OsiGrbSolverInterface : virtual public OsiSolverInterface { friend void OsiGrbSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); public: //--------------------------------------------------------------------------- /**@name Solve methods */ //@{ /// Solve initial LP relaxation virtual void initialSolve(); /// Resolve an LP relaxation after problem modification virtual void resolve(); /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound(); //@} //--------------------------------------------------------------------------- /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. */ //@{ // Set an integer parameter bool setIntParam(OsiIntParam key, int value); // Set an double parameter bool setDblParam(OsiDblParam key, double value); // Set a string parameter bool setStrParam(OsiStrParam key, const std::string &value); // Set a hint parameter bool setHintParam(OsiHintParam key, bool yesNo = true, OsiHintStrength strength = OsiHintTry, void * = NULL); // Get an integer parameter bool getIntParam(OsiIntParam key, int &value) const; // Get an double parameter bool getDblParam(OsiDblParam key, double &value) const; // Get a string parameter bool getStrParam(OsiStrParam key, std::string &value) const; // Get a hint parameter bool getHintParam(OsiHintParam key, bool &yesNo, OsiHintStrength &strength, void *&otherInformation) const; // Get a hint parameter bool getHintParam(OsiHintParam key, bool &yesNo, OsiHintStrength &strength) const; // Get a hint parameter bool getHintParam(OsiHintParam key, bool &yesNo) const; // Set mipstart option (pass column solution to CPLEX before MIP start) void setMipStart(bool value) { domipstart = value; } // Get mipstart option value bool getMipStart() const { return domipstart; } //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there a numerical difficulties? virtual bool isAbandoned() const; /// Is optimality proven? virtual bool isProvenOptimal() const; /// Is primal infeasiblity proven? virtual bool isProvenPrimalInfeasible() const; /// Is dual infeasiblity proven? virtual bool isProvenDualInfeasible() const; /// Is the given primal objective limit reached? virtual bool isPrimalObjectiveLimitReached() const; /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const; //@} //--------------------------------------------------------------------------- /**@name WarmStart related methods */ //@{ /*! \brief Get an empty warm start object This routine returns an empty CoinWarmStartBasis object. Its purpose is to provide a way to give a client a warm start basis object of the appropriate type, which can resized and modified as desired. */ CoinWarmStart *getEmptyWarmStart() const; /// Get warmstarting information virtual CoinWarmStart *getWarmStart() const; /** Set warmstarting information. Return true/false depending on whether the warmstart information was accepted or not. */ virtual bool setWarmStart(const CoinWarmStart *warmstart); //@} //--------------------------------------------------------------------------- /**@name Hotstart related methods (primarily used in strong branching).
The user can create a hotstart (a snapshot) of the optimization process then reoptimize over and over again always starting from there.
NOTE: between hotstarted optimizations only bound changes are allowed. */ //@{ /// Create a hotstart point of the optimization process virtual void markHotStart(); /// Optimize starting from the hotstart virtual void solveFromHotStart(); /// Delete the snapshot virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem information methods These methods call the solver's query routines to return information about the problem referred to by the current object. Querying a problem that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /**@name Methods related to querying the input data */ //@{ /// Get number of columns virtual int getNumCols() const; /// Get number of rows virtual int getNumRows() const; /// Get number of nonzero elements virtual int getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds virtual const double *getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds virtual const double *getColUpper() const; /** Get pointer to array[getNumRows()] of row constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ virtual const char *getRowSense() const; /** Get pointer to array[getNumRows()] of rows right-hand sides
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ virtual const double *getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges.
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
*/ virtual const double *getRowRange() const; /// Get pointer to array[getNumRows()] of row lower bounds virtual const double *getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds virtual const double *getRowUpper() const; /// Get pointer to array[getNumCols()] of objective function coefficients virtual const double *getObjCoefficients() const; /// Get objective function sense (1 for min (default), -1 for max) virtual double getObjSense() const; /// Return true if column is continuous virtual bool isContinuous(int colNumber) const; /// Get pointer to row-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByRow() const; /// Get pointer to column-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByCol() const; /// Get solver's value for infinity virtual double getInfinity() const; //@} /**@name Methods related to querying the solution */ //@{ /// Get pointer to array[getNumCols()] of primal solution vector virtual const double *getColSolution() const; /// Get pointer to array[getNumRows()] of dual prices virtual const double *getRowPrice() const; /// Get a pointer to array[getNumCols()] of reduced costs virtual const double *getReducedCost() const; /** Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector */ virtual const double *getRowActivity() const; /// Get objective function value virtual double getObjValue() const; /** Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver. */ virtual int getIterationCount() const; /** Get as many dual rays as the solver can provide. (In case of proven primal infeasibility there should be at least one.) The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumRows() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getDualRays(int maxNumRays, bool fullRay = false) const; /** Get as many primal rays as the solver can provide. (In case of proven dual infeasibility there should be at least one.) NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumCols() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getPrimalRays(int maxNumRays) const; //@} //@} //--------------------------------------------------------------------------- /**@name Problem modifying methods */ //@{ //------------------------------------------------------------------------- /**@name Changing bounds on variables and constraints */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff(int elementIndex, double elementValue); /** Set a a set of objective function coefficients */ virtual void setObjCoeffSet(const int *indexFirst, const int *indexLast, const double *coeffList); using OsiSolverInterface::setColLower; /** Set a single column lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setColLower(int elementIndex, double elementValue); using OsiSolverInterface::setColUpper; /** Set a single column upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setColUpper(int elementIndex, double elementValue); /** Set a single column lower and upper bound
The default implementation just invokes setColLower() and setColUpper() */ virtual void setColBounds(int elementIndex, double lower, double upper); /** Set the bounds on a number of columns simultaneously
The default implementation just invokes setCollower() and setColupper() over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the variables */ virtual void setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set a single row lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setRowLower(int elementIndex, double elementValue); /** Set a single row upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setRowUpper(int elementIndex, double elementValue); /** Set a single row lower and upper bound
The default implementation just invokes setRowLower() and setRowUpper() */ virtual void setRowBounds(int elementIndex, double lower, double upper); /** Set the type of a single row
*/ virtual void setRowType(int index, char sense, double rightHandSide, double range); /** Set the bounds on a number of rows simultaneously
The default implementation just invokes setRowLower() and setRowUpper() over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the constraints */ virtual void setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set the type of a number of rows simultaneously
The default implementation just invokes setRowType() and over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose type changes @param senseList the new senses @param rhsList the new right hand sides @param rangeList the new ranges */ virtual void setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList); //@} //------------------------------------------------------------------------- /**@name Integrality related changing methods */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index); /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index); /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int *indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int *indices, int len); //@} //------------------------------------------------------------------------- /**@name Naming methods */ //@{ /*! \brief Set a row name */ virtual void setRowName(int ndx, std::string name); /*! \brief Set a column name */ virtual void setColName(int ndx, std::string name); //@} //------------------------------------------------------------------------- /// Set objective function sense (1 for min (default), -1 for max,) virtual void setObjSense(double s); /** Set the primal solution column values colsol[numcols()] is an array of values of the problem column variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of colsol() until changed by another call to setColsol() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double *colsol); /** Set dual solution vector rowprice[numrows()] is an array of values of the problem row dual variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of rowprice() until changed by another call to setRowprice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double *rowprice); //------------------------------------------------------------------------- /**@name Methods to expand a problem.
Note that if a column is added then by default it will correspond to a continuous variable. */ //@{ using OsiSolverInterface::addCol; /** */ virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj); using OsiSolverInterface::addCols; /** */ virtual void addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj); /** */ virtual void deleteCols(const int num, const int *colIndices); using OsiSolverInterface::addRow; /** */ virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub); /** */ virtual void addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng); using OsiSolverInterface::addRows; /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng); /** */ virtual void deleteRows(const int num, const int *rowIndices); //@} //@} //--------------------------------------------------------------------------- /**@name Methods to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by lower and upper bounds). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub); /** Load in an problem by copying the arguments (the constraints on the rows are given by sense/rhs/range triplets). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by sense/rhs/range triplets). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); using OsiSolverInterface::readMps; /** Read an mps file from the given filename */ virtual int readMps(const char *filename, const char *extension = "mps"); /** Write the problem into an mps file of the given filename. If objSense is non zero then -1.0 forces the code to write a maximization objective and +1.0 to write a minimization one. If 0.0 then solver can do what it wants */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense = 0.0) const; //@} //--------------------------------------------------------------------------- /**@name Gurobi specific public interfaces */ //@{ /** Get pointer to Gurobi model and free all specified cached data entries (combined with logical or-operator '|' ): */ enum keepCachedFlag { /// discard all cached data (default) KEEPCACHED_NONE = 0, /// column information: objective values, lower and upper bounds, variable types KEEPCACHED_COLUMN = 1, /// row information: right hand sides, ranges and senses, lower and upper bounds for row KEEPCACHED_ROW = 2, /// problem matrix: matrix ordered by column and by row KEEPCACHED_MATRIX = 4, /// LP solution: primal and dual solution, reduced costs, row activities KEEPCACHED_RESULTS = 8, /// only discard cached LP solution KEEPCACHED_PROBLEM = KEEPCACHED_COLUMN | KEEPCACHED_ROW | KEEPCACHED_MATRIX, /// keep all cached data (similar to getMutableLpPtr()) KEEPCACHED_ALL = KEEPCACHED_PROBLEM | KEEPCACHED_RESULTS, /// free only cached column and LP solution information FREECACHED_COLUMN = KEEPCACHED_PROBLEM & ~KEEPCACHED_COLUMN, /// free only cached row and LP solution information FREECACHED_ROW = KEEPCACHED_PROBLEM & ~KEEPCACHED_ROW, /// free only cached matrix and LP solution information FREECACHED_MATRIX = KEEPCACHED_PROBLEM & ~KEEPCACHED_MATRIX, /// free only cached LP solution information FREECACHED_RESULTS = KEEPCACHED_ALL & ~KEEPCACHED_RESULTS }; GRBmodel *getLpPtr(int keepCached = KEEPCACHED_NONE); //@{ /// Method to access Gurobi environment pointer GRBenv *getEnvironmentPtr() const; /// Return whether the current Gurobi environment runs in demo mode. bool isDemoLicense() const; //@} /// return a vector of variable types (continous, binary, integer) const char *getCtype() const; /**@name Static instance counter methods */ /** Gurobi has a context which must be created prior to all other Gurobi calls. This method:
  • Increments by 1 the number of uses of the Gurobi environment.
  • Creates the Gurobi context when the number of uses is change to 1 from 0.
*/ static void incrementInstanceCounter(); /** Gurobi has a context which should be deleted after Gurobi calls. This method:
  • Decrements by 1 the number of uses of the Gurobi environment.
  • Deletes the Gurobi context when the number of uses is change to 0 from 1.
*/ static void decrementInstanceCounter(); /// sets the global gurobi environment to a user given one static void setEnvironment(GRBenv *globalenv); /// Return the number of instances of instantiated objects using Gurobi services. static unsigned int getNumInstances(); //@} //@} /**@name Constructors and destructor */ //@{ /// Default Constructor OsiGrbSolverInterface(bool use_local_env = false); /// Constructor that takes a gurobi environment and assumes membership OsiGrbSolverInterface(GRBenv *localgrbenv); /// Clone virtual OsiSolverInterface *clone(bool copyData = true) const; /// Copy constructor OsiGrbSolverInterface(const OsiGrbSolverInterface &); /// Assignment operator OsiGrbSolverInterface &operator=(const OsiGrbSolverInterface &rhs); /// Destructor virtual ~OsiGrbSolverInterface(); /// Resets as if default constructor virtual void reset(); //@} /***************************************************************************/ /**@name OsiSimplexInterface methods Gurobi adds a slack with coeff +1 in "<=" and "=" constraints, with coeff -1 in ">=", slack being non negative. We switch in order to get a "Clp tableau" where all the slacks have coefficient +1 in the original tableau. If a slack for ">=" is non basic, invB is not changed; column of the slack in the optimal tableau is flipped. If a slack for ">=" is basic, corresp. row of invB is flipped; whole row of the optimal tableau is flipped; then whole column for the slack in opt tableau is flipped. Ranged rows are not supported. It might work, but no garantee is given. */ //@{ /** Returns 1 if can just do getBInv etc 2 if has all OsiSimplex methods and 0 if it has none */ virtual int canDoSimplexInterface() const; using OsiSolverInterface::enableSimplexInterface; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void enableSimplexInterface(int doingPrimal) {}; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void disableSimplexInterface() {}; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void enableFactorization() const {}; /** Useless function, defined only for compatibility with OsiSimplexInterface */ virtual void disableFactorization() const {}; ///Returns true if a basis is available virtual bool basisIsAvailable() const; /** Returns a basis status of the structural/artificial variables At present as warm start i.e 0: free, 1: basic, 2: upper, 3: lower */ virtual void getBasisStatus(int *cstat, int *rstat) const; // ///Get a row of the tableau (slack part in slack if not NULL) // virtual void getBInvARow(int row, double* z, double * slack=NULL) const; // // ///Get a row of the basis inverse // virtual void getBInvRow(int row, double* z) const; // // ///Get a column of the tableau // virtual void getBInvACol(int col, double* vec) const; // // ///Get a column of the basis inverse // virtual void getBInvCol(int col, double* vec) const; // // /** Get indices of the pivot variable in each row // (order of indices corresponds to the // order of elements in a vector retured by getBInvACol() and // getBInvCol()). // */ // virtual void getBasics(int* index) const; /// switches Gurobi to prob type LP void switchToLP(); /// switches Gurobi to prob type MIP void switchToMIP(); //@} /***************************************************************************/ /***************************************************************************/ /** Apply a collection of cuts. Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.getNumineffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.getNuminconsistent() -- number of invalid cuts
  • ReturnCode.getNuminconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.getNuminfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.getNumApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == getNumineffective() + getNuminconsistent() + getNuminconsistentWrtIntegerModel() + getNuminfeasible() + getNumApplied()
*/ virtual OsiSolverInterface::ApplyCutsReturnCode applyCuts(const OsiCuts &cs, double effectivenessLb = 0.0); protected: /**@name Protected methods */ //@{ /// Apply a row cut. Return true if cut was applied. virtual void applyRowCut(const OsiRowCut &rc); /** Apply a column cut (bound adjustment). Return true if cut was applied. */ virtual void applyColCut(const OsiColCut &cc); //@} private: /**@name Private static class functions */ //@{ /// resizes coltype_, colmap_O2G, colmap_G2O vectors to be able to store at least minsize elements void resizeColSpace(int minsize); /// frees colsize_ vector void freeColSpace(); /// resizes colmap_G2O vector to be able to store at least minsize (auxiliary) elements void resizeAuxColSpace(int minsize); /// resizes auxcolind vector to current number of rows and inits values to -1 void resizeAuxColIndSpace(); //@} /**@name Private static class data */ //@{ /// Gurobi environment pointer static GRBenv *globalenv_; /// whether OsiGrb has created the global environment (and thus should free it) static bool globalenv_is_ours; /// Number of instances using the global Gurobi environment static unsigned int numInstances_; //@} /**@name Private methods */ //@{ /// Get LP Pointer for const methods GRBmodel *getMutableLpPtr() const; /// The real work of a copy constructor (used by copy and assignment) void gutsOfCopy(const OsiGrbSolverInterface &source); /// The real work of the constructor void gutsOfConstructor(); /// The real work of the destructor void gutsOfDestructor(); /// free cached column rim vectors void freeCachedColRim(); /// free cached row rim vectors void freeCachedRowRim(); /// free cached result vectors void freeCachedResults(); /// free cached matrices void freeCachedMatrix(); /// free all cached data (except specified entries, see getLpPtr()) void freeCachedData(int keepCached = KEEPCACHED_NONE); /// free all allocated memory void freeAllMemory(); /// converts a normal row into a ranged row by adding an auxiliary variable void convertToRangedRow(int rowidx, double rhs, double range); /// converts a ranged row into a normal row by removing its auxiliary variable void convertToNormalRow(int rowidx, char sense, double rhs); //@} /**@name Private member data */ //@{ /// Gurobi environment used only by this class instance mutable GRBenv *localenv_; /// Gurobi model represented by this class instance mutable GRBmodel *lp_; /// Hotstart information int *hotStartCStat_; int hotStartCStatSize_; int *hotStartRStat_; int hotStartRStatSize_; int hotStartMaxIteration_; /// OSI name discipline int nameDisc_; /**@name Cached information derived from the Gurobi model */ //@{ /// Pointer to objective vector mutable double *obj_; /// Pointer to dense vector of variable lower bounds mutable double *collower_; /// Pointer to dense vector of variable lower bounds mutable double *colupper_; /// Pointer to dense vector of row sense indicators mutable char *rowsense_; /// Pointer to dense vector of row right-hand side values mutable double *rhs_; /// Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows) mutable double *rowrange_; /// Pointer to dense vector of row lower bounds mutable double *rowlower_; /// Pointer to dense vector of row upper bounds mutable double *rowupper_; /// Pointer to primal solution vector mutable double *colsol_; /// Pointer to dual solution vector mutable double *rowsol_; /// Pointer to reduced cost vector mutable double *redcost_; /// Pointer to row activity (slack) vector mutable double *rowact_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByRow_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByCol_; //@} /**@name Additional information needed for storing MIP problems and handling ranged rows */ //@{ /// Stores whether we currently see the problem as a MIP mutable bool probtypemip_; /// Whether to pass a column solution to CPLEX before starting MIP solve (copymipstart) bool domipstart; /// Size of allocated memory for coltype_, colmap_O2G, and (with offset auxcolspace) colmap_G2O. int colspace_; /// Pointer to dense vector of variable types (continous, binary, integer) char *coltype_; /// Number of auxiliary columns in Gurobi model for handling of ranged rows int nauxcols; /// Size of allocated memory for colmap_G2O that exceeds colspace_ int auxcolspace; /// Maps variable indices from Osi to Gurobi /// Is NULL if there are no ranged rows! (assume identity mapping then) int *colmap_O2G; /// Maps variable indices from Gurobi to Osi /// A negative value indicates that a variable is an auxiliary variable that was added to handle a ranged row /// -colmap_G2O[i]-1 gives the index of the ranged row in this case /// Is NULL if there are no ranged rows! (assume identity mapping then) int *colmap_G2O; /// Current length of auxcolind array. int auxcolindspace; /// Gives for each row the index of the corresponding auxiliary variable, if it is a ranged row. /// Otherwise, gives -1. /// Is NULL if there are no ranged rows! (assume -1 for each row then) int *auxcolind; //@} }; //############################################################################# /** A function that tests the methods in the OsiGrbSolverInterface class. */ void OsiGrbSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiGrb/Makefile.am0000644000175200017520000000323113200225426015610 0ustar coincoin# Copyright (C) 2009 Stefan Vigerske and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 2111 2017-11-07 03:40:06Z tkr $ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiGrb ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiGrb.la # List all source files for this library, including headers libOsiGrb_la_SOURCES = OsiGrbSolverInterface.cpp OsiGrbSolverInterface.hpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiGrb_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(GRBLIB) endif # This is for libtool (on Windows) libOsiGrb_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ -I`$(CYGPATH_W) $(GRBINCDIR)` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiGrbSolverInterface.hpp DyLP-1.10.4/Osi/src/OsiGrb/format-source.sh0000755000175200017520000000100313414504222016675 0ustar coincoin# script to format source code and include (if not included yet), # vim formatting settings (which are automatically loaded by vim) # Haroldo - 2019 for file in *.[ch]pp; do sourceName=`basename $file` echo formatting "$sourceName" clang-format -i -style=file $file # adding vim modeline if not included yet if ! grep -q "/* vi: softtabstop=" $file; then echo '' >> $file echo '/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2' >> $file echo '*/' >> $file fi done DyLP-1.10.4/Osi/src/OsiMsk/0000755000175200017520000000000013434203623013601 5ustar coincoinDyLP-1.10.4/Osi/src/OsiMsk/Makefile.in0000644000175200017520000005537613200225426015662 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = src/OsiMsk DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiMsk_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) \ @DEPENDENCY_LINKING_TRUE@ ../Osi/libOsi.la \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) am_libOsiMsk_la_OBJECTS = OsiMskSolverInterface.lo libOsiMsk_la_OBJECTS = $(am_libOsiMsk_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiMsk_la_SOURCES) DIST_SOURCES = $(libOsiMsk_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiMsk # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiMsk.la # List all source files for this library, including headers libOsiMsk_la_SOURCES = \ OsiMskSolverInterface.cpp OsiMskSolverInterface.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiMsk_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(MSKLIB) # This is for libtool (on Windows) libOsiMsk_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ -I`$(CYGPATH_W) $(MSKINCDIR)` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiMskSolverInterface.hpp 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiMsk/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiMsk/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 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiMsk.la: $(libOsiMsk_la_OBJECTS) $(libOsiMsk_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiMsk_la_LDFLAGS) $(libOsiMsk_la_OBJECTS) $(libOsiMsk_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiMskSolverInterface.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: 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: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags 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-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ 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 uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # 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: DyLP-1.10.4/Osi/src/OsiMsk/OsiMskSolverInterface.cpp0000644000175200017520000046022413421763114020540 0ustar coincoin/* Osi interface for Mosek ver. 7.0 Lower versions are not supported ----------------------------------------------------------------------------- name: OSI Interface for MOSEK ----------------------------------------------------------------------------- This code is licensed under the terms of the Eclipse Public License (EPL). Originally developed by Bo Jensen from MOSEK ApS. No longer a maintainer. */ #include #include #include #include #include "OsiConfig.h" #include "CoinPragma.hpp" #include "CoinError.hpp" #include "CoinFinite.hpp" #include "OsiMskSolverInterface.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" #include "mosek.h" #define MSK_OSI_DEBUG_LEVEL 0 #ifndef NDEBUG #define MSK_OSI_ASSERT_LEVEL 0 #else #define MSK_OSI_ASSERT_LEVEL 4 #endif #define MSK_DO_MOSEK_LOG 0 #define debugMessage printf //Choose algorithm to be default in initial solve #define INITIAL_SOLVE MSK_OPTIMIZER_FREE //Choose algorithm to be default in resolve #define RESOLVE_SOLVE MSK_OPTIMIZER_FREE_SIMPLEX // Unset this flag to disable the warnings from interface. #define MSK_WARNING_ON #if MSK_VERSION_MAJOR >= 9 #define MSKCONST const #endif #undef getc //############################################################################# // A couple of helper functions //############################################################################# // Free memory pointet to by a double pointer inline void freeCacheDouble( double*& ptr ) { if( ptr != NULL ) { delete [] ptr; ptr = NULL; } } // Free memory pointet to by a char pointer inline void freeCacheChar( char*& ptr ) { if( ptr != NULL ) { delete [] ptr; ptr = NULL; } } // Free memory pointet to by a CoinPackedMatrix pointer inline void freeCacheMatrix( CoinPackedMatrix*& ptr ) { if( ptr != NULL ) { delete ptr; ptr = NULL; } } // Function used to connect MOSEK to stream #if MSK_VERSION_MAJOR >= 7 static void MSKAPI printlog(void *ptr, const char* s) #else static void MSKAPI printlog(void *ptr, char* s) #endif { printf("%s",s); } static void MSKAPI OsiMskStreamFuncLog(MSKuserhandle_t handle, MSKCONST char* str) { if (handle) { if (((CoinMessageHandler*)handle)->logLevel() >= 1) ((CoinMessageHandler*)handle)->message(0, "MSK", str, ' ') << CoinMessageEol; } else { printf(str); printf("\n"); } } static void MSKAPI OsiMskStreamFuncWarning(MSKuserhandle_t handle, MSKCONST char* str) { if (handle) { if (((CoinMessageHandler*)handle)->logLevel() >= 0) ((CoinMessageHandler*)handle)->message(0, "MSK", str, ' ') << CoinMessageEol; } else { printf(str); printf("\n"); } } static void MSKAPI OsiMskStreamFuncError(MSKuserhandle_t handle, MSKCONST char* str) { if (handle) { ((CoinMessageHandler*)handle)->message(0, "MSK", str, ' ') << CoinMessageEol; } else { fprintf(stderr, str); fprintf(stderr, "\n"); } } // Prints a error message and throws a exception static inline void checkMSKerror( int err, const char* mskfuncname, const char* osimethod ) { if( err != MSK_RES_OK ) { char s[100]; sprintf( s, "%s returned error %d", mskfuncname, err ); std::cout << "ERROR: " << s << " (" << osimethod << " in OsiMskSolverInterface)" << std::endl; throw CoinError( s, osimethod, "OsiMskSolverInterface" ); } } // Prints a error message and throws a exception static inline void MSKassert(int assertlevel, int test, const char* assertname, const char* osimethod ) { if( assertlevel > MSK_OSI_ASSERT_LEVEL && !test ) { std::cout << "Assert: " << assertname << " (" << osimethod << " in OsiMskSolverInterface)" << std::endl; throw CoinError( assertname, osimethod, "OsiMskSolverInterface" ); } } // Converts Range/Sense/Rhs to MSK bound structure static inline void MskConvertSenseToBound(const char rowsen, const double rowrng, const double rowrhs, double &rlb, double &rub, int &rtag) { switch (rowsen) { case 'E': rlb = rowrhs; rub = rowrhs; rtag = MSK_BK_FX; break; case 'L': rlb = MSK_INFINITY; rub = rowrhs; rtag = MSK_BK_UP; break; case 'G': rlb = rowrhs; rub = MSK_INFINITY; rtag = MSK_BK_LO; break; case 'R': if( rowrng >= 0 ) { rlb = rowrhs - rowrng; rub = rowrhs; } else { rlb = rowrhs; rub = rowrhs + rowrng; } rtag = MSK_BK_RA; break; case 'N': rlb = -MSK_INFINITY; rub = MSK_INFINITY; rtag = MSK_BK_FR; break; default: MSKassert(3,1,"Unknown rowsen","MskConvertSenseToBound"); } } // Converts a set of bounds to MSK boundkeys static inline void MskConvertColBoundToTag(const double collb, const double colub, double &clb, double &cub, int &ctag) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin MskConvertColBoundToTag()\n"); #endif if(collb > -MSK_INFINITY && colub < MSK_INFINITY) { ctag = MSK_BK_RA; clb = collb; cub = colub; } else if(collb <= - MSK_INFINITY && colub < MSK_INFINITY) { ctag = MSK_BK_UP; clb = -MSK_INFINITY; cub = colub; } else if(collb > - MSK_INFINITY && colub >= MSK_INFINITY) { ctag = MSK_BK_LO; clb = collb; cub = MSK_INFINITY; } else if(collb <= -MSK_INFINITY && colub >= MSK_INFINITY) { ctag = MSK_BK_FR; clb = -MSK_INFINITY; cub = MSK_INFINITY; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End MskConvertColBoundToTag()\n"); #endif } // Returns true if "solution" is defined in MOSEK, where solution can be basic, interior or // integer resp. (MSK_SOL_BAS), (MSK_SOL_ITR) or (MSK_SOL_ITG). bool OsiMskSolverInterface::definedSolution(int solution) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::definedSolution() %p\n",(void*)this); #endif int err, res; err = MSK_solutiondef(getMutableLpPtr(), (MSKsoltypee) solution, &res); checkMSKerror(err,"MSK_solutiondef","definedSolution"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::definedSolution()\n"); #endif return ( res != MSK_RES_OK); } // Returns the flag for solver currently switched on in MOSEK resp. (MSK_OPTIMIZER_FREE), // (MSK_OPTIMIZER_INTPNT), (MSK_OPTIMIZER_PRIMAL_SIMPLEX), (MSK_OPTIMIZER_MIXED_INT), or // (MSK_OPTIMIZER_MIXED_INT_CONIC). // MOSEK also has Conic and nonconvex solvers, but these are for obvious reasons not // an option in the Osi interface. int OsiMskSolverInterface::solverUsed() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::solverUsed()\n"); #endif #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::solverUsed()\n"); #endif return MSKsolverused_; } // Switch the MOSEK solver to LP uses default solver specified by 'InitialSolver' void OsiMskSolverInterface::switchToLP( void ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::switchToLP()\n"); #endif int err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_MIO_MODE, MSK_MIO_MODE_IGNORED); checkMSKerror(err,"MSK_putintparam","switchToLp"); probtypemip_ = false; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::switchToLP()\n"); #endif } // Switch the MOSEK solver to MIP. void OsiMskSolverInterface::switchToMIP( void ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::switchToMIP()\n"); #endif int err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_MIO_MODE, MSK_MIO_MODE_SATISFIED); checkMSKerror(err,"MSK_putintparam","switchToMIP"); #if MSK_VERSION_MAJOR == 7 err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_MIXED_INT_CONIC); #else err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, MSK_OPTIMIZER_MIXED_INT); #endif checkMSKerror(err,"MSK_putintparam","switchToMIP"); probtypemip_ = true; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::switchToMIP()\n"); #endif } // Resize the coltype array. void OsiMskSolverInterface::resizeColType( int minsize ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::resizeColType()\n"); #endif if( minsize > coltypesize_ ) { int newcoltypesize = 2*coltypesize_; if( minsize > newcoltypesize ) newcoltypesize = minsize; char *newcoltype = new char[newcoltypesize]; if( coltype_ != NULL ) { CoinDisjointCopyN( coltype_, coltypesize_, newcoltype ); delete[] coltype_; } coltype_ = newcoltype; coltypesize_ = newcoltypesize; } MSKassert(3,minsize == 0 || coltype_ != NULL,"Unknown rowsen","MskConvertSenseToBound"); MSKassert(3,coltypesize_ >= minsize,"coltypesize_ >= minsize","MskConvertSenseToBound"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::resizeColType()\n"); #endif } // Free coltype array void OsiMskSolverInterface::freeColType() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::freeColType()\n"); #endif if( coltypesize_ > 0 ) { delete[] coltype_; coltype_ = NULL; coltypesize_ = 0; } MSKassert(3,coltype_ == NULL,"coltype_ == NULL","freeColType"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::freeColType()\n"); #endif } //############################################################################# // Solve methods //############################################################################# //----------------------------------------------------------------------------- // Free cached results and optimize the LP problem in task void OsiMskSolverInterface::initialSolve() { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::initialSolve() %p\n", (void*)this); #endif if( definedSolution( MSK_SOL_BAS ) == true ) { resolve(); } else { int err,solver; err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_SIM_HOTSTART, MSK_SIM_HOTSTART_STATUS_KEYS); checkMSKerror(err,"MSK_putintparam","initialsolve"); err = MSK_getintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, &solver); checkMSKerror(err,"MSK_getintparam","initialsolve"); switchToLP(); err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, INITIAL_SOLVE); checkMSKerror(err,"MSK_putintparam","initialSolve"); err = MSK_getintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, &MSKsolverused_); checkMSKerror(err,"MSK_getintparam","initialsolve"); #if MSK_DO_MOSEK_LOG > 0 err = MSK_putintparam( getMutableLpPtr(),MSK_IPAR_LOG_SIM,MSK_DO_MOSEK_LOG); checkMSKerror(err,"MSK_putintparam","initialsolve"); #endif Mskerr = MSK_optimize(getLpPtr( OsiMskSolverInterface::FREECACHED_RESULTS )); #if MSK_DO_MOSEK_LOG > 0 err = MSK_solutionsummary( getMutableLpPtr(),MSK_STREAM_LOG); checkMSKerror(err,"MSK_solutionsummary","initialsolve"); #endif err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, solver); checkMSKerror(err,"MSK_putintparam","initialsolve"); } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::initialSolve()\n"); #endif } //----------------------------------------------------------------------------- // Resolves an LP problem. void OsiMskSolverInterface::resolve() { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::resolve %p\n", (void*)this); #endif if( definedSolution( MSK_SOL_BAS ) == true ) { int err,solver; err = MSK_getintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, &solver); checkMSKerror(err,"MSK_getintparam","resolve"); switchToLP(); err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_SIM_HOTSTART, MSK_SIM_HOTSTART_STATUS_KEYS); checkMSKerror(err,"MSK_putintparam","resolve"); err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, RESOLVE_SOLVE); checkMSKerror(err,"MSK_putintparam","resolve"); #if 0 err = MSK_putintparam( getMutableLpPtr(), MSK_IPAR_SIM_MAX_ITERATIONS, 20000000 ); #endif err = MSK_getintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, &MSKsolverused_); checkMSKerror(err,"MSK_getintparam","resolve"); #if MSK_DO_MOSEK_LOG > 0 err = MSK_putintparam( getMutableLpPtr(),MSK_IPAR_LOG,MSK_DO_MOSEK_LOG); checkMSKerror(err,"MSK_putintparam","resolve"); err = MSK_putintparam( getMutableLpPtr(),MSK_IPAR_LOG_SIM,MSK_DO_MOSEK_LOG); checkMSKerror(err,"MSK_putintparam","resolve"); #endif Mskerr = MSK_optimize(getLpPtr( OsiMskSolverInterface::FREECACHED_RESULTS )); #if MSK_DO_MOSEK_LOG > 0 err = MSK_solutionsummary( getMutableLpPtr(),MSK_STREAM_LOG); printf("Mskerr : %d\n",Mskerr); #endif err = MSK_putintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, solver); checkMSKerror(err,"MSK_putintparam","resolve"); } else { initialSolve(); } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::resolve... press any key to continue\n"); getchar(); #endif } //----------------------------------------------------------------------------- // Resolves an MIP problem with MOSEK MIP solver. void OsiMskSolverInterface::branchAndBound() { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::branchAndBound()\n"); #endif switchToMIP(); int err = MSK_getintparam(getMutableLpPtr(), MSK_IPAR_OPTIMIZER, &MSKsolverused_); checkMSKerror(err,"MSK_getintparam","branchAndBound"); Mskerr = MSK_optimize(getLpPtr( OsiMskSolverInterface::FREECACHED_RESULTS )); #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::branchAndBound()\n"); #endif } //############################################################################# // Parameter related methods //############################################################################# //----------------------------------------------------------------------------- // Sets a int parameter in MOSEK bool OsiMskSolverInterface::setIntParam(OsiIntParam key, int value) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setIntParam(%d, %d)\n", key, value); #endif bool retval = false; switch (key) { case OsiMaxNumIteration: retval = (MSK_putintparam(getMutableLpPtr(), MSK_IPAR_SIM_MAX_ITERATIONS, value ) == MSK_RES_OK); break; case OsiMaxNumIterationHotStart: if (value < 0) { retval = false; } else { hotStartMaxIteration_ = value; retval = true; } break; case OsiNameDiscipline: retval = false; break; case OsiLastIntParam: retval = false; break; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setIntParam(%d, %d)\n", key, value); #endif return retval; } //----------------------------------------------------------------------------- // Sets a double parameter in MOSEK. bool OsiMskSolverInterface::setDblParam(OsiDblParam key, double value) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setDblParam(%d, %g)\n", key, value); #endif bool retval = false; switch (key) { case OsiDualObjectiveLimit: if( getObjSense() == +1 ) // Minimize retval = ( MSK_putdouparam( getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, value ) == MSK_RES_OK ); // min else retval = ( MSK_putdouparam( getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, value ) == MSK_RES_OK ); // max break; case OsiPrimalObjectiveLimit: if( getObjSense() == +1 ) // Minimize retval = ( MSK_putdouparam( getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, value ) == MSK_RES_OK ); // min else retval = ( MSK_putdouparam( getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, value ) == MSK_RES_OK ); // max break; case OsiDualTolerance: retval = ( MSK_putdouparam( getMutableLpPtr(), MSK_DPAR_BASIS_TOL_S, value ) == MSK_RES_OK ); break; case OsiPrimalTolerance: retval = ( MSK_putdouparam( getMutableLpPtr(), MSK_DPAR_BASIS_TOL_X, value ) == MSK_RES_OK ); break; case OsiObjOffset: ObjOffset_ = value; retval = true; break; case OsiLastDblParam: retval = false; break; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setDblParam(%d, %g)\n", key, value); #endif return retval; } //----------------------------------------------------------------------------- // Sets a string parameter in MOSEK. bool OsiMskSolverInterface::setStrParam(OsiStrParam key, const std::string & value) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setStrParam(%d, %s)\n", key, value.c_str()); #endif bool retval=false; switch (key) { case OsiProbName: OsiSolverInterface::setStrParam(key,value); return retval = true; case OsiSolverName: return false; case OsiLastStrParam: return false; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setStrParam(%d, %s)\n", key, value.c_str()); #endif return retval; } //----------------------------------------------------------------------------- // Gets a int parameter in MOSEK. bool OsiMskSolverInterface::getIntParam(OsiIntParam key, int& value) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getIntParam(%d)\n", key); #endif bool retval = false; switch (key) { case OsiMaxNumIteration: retval = (MSK_getintparam(getMutableLpPtr(), MSK_IPAR_SIM_MAX_ITERATIONS, &value ) == MSK_RES_OK); break; case OsiMaxNumIterationHotStart: value = hotStartMaxIteration_; retval = true; break; case OsiNameDiscipline: value = 0; retval = false; break; case OsiLastIntParam: retval = false; break; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getIntParam(%d)\n", key); #endif return retval; } //----------------------------------------------------------------------------- // Get a double parameter in MOSEK. bool OsiMskSolverInterface::getDblParam(OsiDblParam key, double& value) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getDblParam(%d)\n", key); #endif bool retval = false; switch (key) { case OsiDualObjectiveLimit: if( getObjSense() == +1 ) retval = ( MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, &value ) == MSK_RES_OK ); // max else retval = ( MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, &value ) == MSK_RES_OK ); // min break; case OsiPrimalObjectiveLimit: if( getObjSense() == +1 ) retval = ( MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, &value ) == MSK_RES_OK ); // min else retval = ( MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, &value ) == MSK_RES_OK ); // max break; case OsiDualTolerance: retval = ( MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_BASIS_TOL_S, &value ) == MSK_RES_OK ); break; case OsiPrimalTolerance: retval = ( MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_BASIS_TOL_X, &value ) == MSK_RES_OK ); break; case OsiObjOffset: value = ObjOffset_; retval = true; break; case OsiLastDblParam: retval = false; break; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getDblParam(%d)\n", key); #endif return retval; } //----------------------------------------------------------------------------- // Gets a string parameter from MOSEK bool OsiMskSolverInterface::getStrParam(OsiStrParam key, std::string & value) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getStrParam(%d)\n", key); #endif switch (key) { case OsiProbName: OsiSolverInterface::getStrParam(key, value); break; case OsiSolverName: value = "MOSEK"; break; case OsiLastStrParam: return false; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getStrParam(%d)\n", key); #endif return true; } //############################################################################# // Methods returning info on how the solution process terminated //############################################################################# //----------------------------------------------------------------------------- // Returns true if solver abandoned in last call to solver. // Mosek does not use this functionality bool OsiMskSolverInterface::isAbandoned() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isAbandoned()\n"); debugMessage("isAbandoned() %d\n",(Mskerr != MSK_RES_OK)); debugMessage("End OsiMskSolverInterface::isAbandoned()\n"); #endif return (Mskerr != MSK_RES_OK); } //----------------------------------------------------------------------------- // Returns true if "solution" available is proved to be optimal, where "solution" in LP // could be both interior and basic, checks for both. bool OsiMskSolverInterface::isProvenOptimal() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isProvenOptimal()\n"); #endif int err; MSKsolstae status; MSKsoltypee solution; if( probtypemip_ == false) { if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else { if( definedSolution( MSK_SOL_ITR ) == true ) solution = MSK_SOL_ITR; else return false; } } else { if( definedSolution( MSK_SOL_ITG ) == true ) solution = MSK_SOL_ITG; else return false; } err = MSK_getsolution(getMutableLpPtr(), solution, NULL, &status, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror(err,"MSK_getsolution","isProvenOptimal"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Solution type , %d status %d \n ",(status == MSK_SOL_STA_OPTIMAL), status) ; debugMessage("End OsiMskSolverInterface::isProvenOptimal()\n"); #endif return ( status == MSK_SOL_STA_OPTIMAL || status == MSK_SOL_STA_INTEGER_OPTIMAL); } //----------------------------------------------------------------------------- // Returns true if a certificate of primal inf. exits bool OsiMskSolverInterface::isProvenPrimalInfeasible() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isProvenPrimalInfeasible()\n"); #endif int err; MSKsolstae status; MSKsoltypee solution; if( probtypemip_ == false) { if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else { if( definedSolution( MSK_SOL_ITR ) == true ) solution = MSK_SOL_ITR; else return false; } } else { if( definedSolution( MSK_SOL_ITG ) == true) solution = MSK_SOL_ITG; else return false; } err = MSK_getsolution(getMutableLpPtr(), solution, NULL, &status, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror(err,"MSK_getsolution","isProvenPrimalInfeasible"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("isProvenPrimalInfeasible %d \n",(status == MSK_SOL_STA_PRIM_INFEAS_CER)); debugMessage("End OsiMskSolverInterface::isProvenPrimalInfeasible()\n"); #endif return ( status == MSK_SOL_STA_PRIM_INFEAS_CER ); } //----------------------------------------------------------------------------- // Should return true if a certificate of dual inf. exits // But COIN does not support this feature thus we return false bool OsiMskSolverInterface::isProvenDualInfeasible() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isProvenDualInfeasible()\n"); #endif int err; MSKsolstae status; MSKsoltypee solution; if( probtypemip_ == false ) { if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else { if( definedSolution( MSK_SOL_ITR ) == true ) solution = MSK_SOL_ITR; else return false; } } else { if( definedSolution( MSK_SOL_ITG ) == true) solution = MSK_SOL_ITG; else return false; } err = MSK_getsolution(getMutableLpPtr(), solution, NULL, &status, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ); checkMSKerror(err,"MSK_getsolution","isProvenDualInfeasible"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("isProvenDualInfeasible %d \n",(status == MSK_SOL_STA_DUAL_INFEAS_CER)); debugMessage("End OsiMskSolverInterface::isProvenDualInfeasible()\n"); #endif return ( status == MSK_SOL_STA_DUAL_INFEAS_CER ); } //----------------------------------------------------------------------------- // Returns true if primal objective limit is reached. Checks the objective sense // first. bool OsiMskSolverInterface::isPrimalObjectiveLimitReached() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isPrimalObjectiveLimitReached()\n"); #endif if( Mskerr == MSK_RES_TRM_OBJECTIVE_RANGE ) { int err; double obj = getObjValue(),value=MSK_INFINITY; if( getObjSense() == +1 ) { err = MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, &value); checkMSKerror(err,"MSK_getdouparam","isPrimalObjectiveLimitReached"); } else { err = MSK_getdouparam(getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, &value ); checkMSKerror(err,"MSK_getdouparam","isPrimalObjectiveLimitReached"); obj = -obj; value = -value; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("primal objective value %-16.10e , lowerbound %-16.10e , reached %d \n",obj,value,(value <= obj)); debugMessage("End OsiMskSolverInterface::isPrimalObjectiveLimitReached()\n"); #endif return ( !( value == MSK_INFINITY || value == -MSK_INFINITY ) && value > obj ); } else { if( Mskerr == MSK_RES_OK ) { if( definedSolution( MSK_SOL_BAS ) == true ) { int err; double obj = getObjValue(),value=MSK_INFINITY; if( getObjSense() == +1 ) { err = MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, &value); checkMSKerror(err,"MSK_getdouparam","isPrimalObjectiveLimitReached"); return (obj < value); } else { err = MSK_getdouparam(getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, &value ); checkMSKerror(err,"MSK_getdouparam","isPrimalObjectiveLimitReached"); obj = -obj; value = -value; return (obj < value); } } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::isPrimalObjectiveLimitReached()\n"); #endif return false; } } //----------------------------------------------------------------------------- // Returns true if dual objective limit is reached. Checks the objective sense // first. bool OsiMskSolverInterface::isDualObjectiveLimitReached() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isDualObjectiveLimitReached()\n"); #endif if( Mskerr == MSK_RES_TRM_OBJECTIVE_RANGE ) { int err; double obj = getObjValue(),value=MSK_INFINITY; if( getObjSense() == +1 ) { err = MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, &value); checkMSKerror(err,"MSK_getdouparam","isDualObjectiveLimitReached"); } else { err = MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, &value ); checkMSKerror(err,"MSK_getdouparam","isDualObjectiveLimitReached"); obj = -obj; value = -value; } checkMSKerror( err, "MSK_getdouparam", "isPrimalObjectiveLimitReached" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("dual objective value %f , lowerbound %f , reached %i \n",obj,value,(value <= obj)); debugMessage("End OsiMskSolverInterface::isDualObjectiveLimitReached()\n"); #endif return ( !( value == MSK_INFINITY || value == -MSK_INFINITY ) && value <= obj ); } else { if( Mskerr == MSK_RES_OK ) { if( definedSolution( MSK_SOL_BAS ) == true ) { int err; double obj = getObjValue(),value=MSK_INFINITY; if( getObjSense() == +1 ) { err = MSK_getdouparam( getMutableLpPtr(), MSK_DPAR_UPPER_OBJ_CUT, &value); checkMSKerror(err,"MSK_getdouparam","isDualObjectiveLimitReached"); return (obj > value); } else { err = MSK_getdouparam(getMutableLpPtr(), MSK_DPAR_LOWER_OBJ_CUT, &value ); checkMSKerror(err,"MSK_getdouparam","isDualObjectiveLimitReached"); obj = -obj; value = -value; return (obj > value); } } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::isDualObjectiveLimitReached()\n"); #endif return false; } } //----------------------------------------------------------------------------- // Returns true if iteration number used in last call to optimize eq. max number for // the solver used. bool OsiMskSolverInterface::isIterationLimitReached() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isIterationLimitReached()\n"); #endif #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("iteration limit reached %d \n",Mskerr); debugMessage("End OsiMskSolverInterface::isIterationLimitReached()\n"); #endif return Mskerr == MSK_RES_TRM_MAX_ITERATIONS; } //----------------------------------------------------------------------------- // Returns true if a license problem occured in last call to optimize. bool OsiMskSolverInterface::isLicenseError() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isLicenseError()\n"); #endif #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("license error %d \n",Mskerr); debugMessage("End OsiMskSolverInterface::isLicenseError()\n"); #endif return Mskerr >= MSK_RES_ERR_LICENSE && Mskerr <= MSK_RES_ERR_LICENSE_NO_SERVER_SUPPORT; } //############################################################################# // WarmStart related methods //############################################################################# // Get an empty warm start object CoinWarmStart* OsiMskSolverInterface::getEmptyWarmStart () const { return (dynamic_cast(new CoinWarmStartBasis())) ; } //----------------------------------------------------------------------------- // Get warm start, returns NULL pointer if not available CoinWarmStart* OsiMskSolverInterface::getWarmStart() const { CoinWarmStartBasis* ws = NULL; int numbas = 0,numcols = getNumCols(),numrows = getNumRows(),*skx,*skc, err, i,*bkc,*bkx; double *blc,*buc,*blx,*bux,*xc,*xx; bool skip = false; #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::getWarmStart numcols %d numrows %d %p\n",numcols,numrows, (void*)this); #endif skx = new int[numcols]; skc = new int[numrows]; bkc = new int[numrows]; blc = new double[numrows]; buc = new double[numrows]; xc = new double[numrows]; bkx = new int[numcols]; blx = new double[numcols]; bux = new double[numcols]; xx = new double[numcols]; #if MSK_VERSION_MAJOR < 9 err = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_CON, 0, numrows, (MSKboundkeye*)bkc, (MSKrealt*)blc, (MSKrealt*)buc); checkMSKerror( err, "MSK_getboundslice", "getWarmStart" ); err = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_VAR, 0, numcols, (MSKboundkeye*)bkx, (MSKrealt*)blx, (MSKrealt*)bux); checkMSKerror( err, "MSK_getboundslice", "getWarmStart" ); #else err = MSK_getconboundslice(getMutableLpPtr(), 0, numrows, (MSKboundkeye*)bkc, (MSKrealt*)blc, (MSKrealt*)buc); checkMSKerror( err, "getconboundslice", "getWarmStart" ); err = MSK_getvarboundslice(getMutableLpPtr(), 0, numcols, (MSKboundkeye*)bkx, (MSKrealt*)blx, (MSKrealt*)bux); checkMSKerror( err, "MSK_getvarboundslice", "getWarmStart" ); #endif MSKassert(3,!probtypemip_,"!probtypemip_","getWarmStart"); if( definedSolution( MSK_SOL_BAS ) == true ) { err = MSK_getsolution(getMutableLpPtr(), MSK_SOL_BAS, NULL, NULL, (MSKstakeye*)skc, (MSKstakeye*)skx, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror( err, "MSK_getsolution", "getWarmStart" ); } else { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("No basic solution in OsiMskSolverInterface::getWarmStart()\n"); #endif /* No basic solution stored choose slack basis */ /* Otherwise the unittest can not be passed */ ws = new CoinWarmStartBasis; ws->setSize( numcols, numrows ); for( i = 0; i < numrows; ++i ) ws->setArtifStatus( i, CoinWarmStartBasis::basic ); numbas = numrows; for( i = 0; i < numcols; ++i ) { switch(bkx[i]) { case MSK_BK_RA: case MSK_BK_LO: ws->setStructStatus( i, CoinWarmStartBasis::atLowerBound ); break; case MSK_BK_FX: case MSK_BK_UP: ws->setStructStatus( i, CoinWarmStartBasis::atUpperBound ); break; case MSK_BK_FR: ws->setStructStatus( i, CoinWarmStartBasis::isFree ); break; default: checkMSKerror( 1, "Wrong bound key", "getWarmStart" ); } } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::getWarmStart()\n"); #endif delete[] skc; delete[] skx; delete[] bkc; delete[] blc; delete[] buc; delete[] xc; delete[] bkx; delete[] blx; delete[] bux; delete[] xx; /* Leave function */ return ws; } if( err == MSK_RES_OK ) { /* Status keys should be defined */ ws = new CoinWarmStartBasis; MSKassert(3,ws != NULL,"1) ws != NULL","getWarmStart"); ws->setSize( numcols, numrows ); for( i = 0; i < numrows && ws != NULL; ++i ) { switch( skc[i] ) { case MSK_SK_UNK: case MSK_SK_BAS: /* Warning : Slacks in Osi and Mosek er negated */ ws->setArtifStatus( i, CoinWarmStartBasis::basic ); ++numbas; break; case MSK_SK_LOW: /* Warning : Slacks in Osi and Mosek er negated */ ws->setArtifStatus( i, CoinWarmStartBasis::atUpperBound ); break; case MSK_SK_FIX: case MSK_SK_UPR: /* Warning : Slacks in Osi and Mosek er negated */ ws->setArtifStatus( i, CoinWarmStartBasis::atLowerBound ); break; case MSK_SK_SUPBAS: ws->setArtifStatus( i, CoinWarmStartBasis::isFree ); break; default: // unknown row status delete ws; ws = NULL; skip = true; checkMSKerror( 1, "Wrong slack status key", "getWarmStart" ); break; } } if( skip == false ) { for( i = 0; i < numcols && ws != NULL; ++i ) { switch( skx[i] ) { case MSK_SK_UNK: case MSK_SK_BAS: ++numbas; ws->setStructStatus( i, CoinWarmStartBasis::basic ); break; case MSK_SK_FIX: case MSK_SK_LOW: ws->setStructStatus( i, CoinWarmStartBasis::atLowerBound ); break; case MSK_SK_UPR: ws->setStructStatus( i, CoinWarmStartBasis::atUpperBound ); break; case MSK_SK_SUPBAS: ws->setStructStatus( i, CoinWarmStartBasis::isFree ); break; default: // unknown column status delete ws; ws = NULL; checkMSKerror( 1, "Wrong variable status key", "getWarmStart" ); break; } } } } delete[] skx; delete[] skc; delete[] bkc; delete[] blc; delete[] buc; delete[] xc; delete[] bkx; delete[] blx; delete[] bux; delete[] xx; MSKassert(3,ws!=NULL,"2) ws!=NULL","getWarmStart"); #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::getWarmStart() (%p) numcols %d numrows %d numbas %d\n",(void*)(ws),numcols,numrows,numbas); #endif return ws; } //----------------------------------------------------------------------------- // Set warm start bool OsiMskSolverInterface::setWarmStart(const CoinWarmStart* warmstart) { const CoinWarmStartBasis* ws = dynamic_cast(warmstart); int numcols, numrows, i, restat,numbas=0; int *skx, *skc, *bkc, *bkx; bool retval = false, skip = false; if( !ws ) return false; numcols = ws->getNumStructural(); numrows = ws->getNumArtificial(); #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::setWarmStart(%p) this = %p numcols %d numrows %d\n", (void *)warmstart,(void*)this,numcols,numrows); #endif if( numcols != getNumCols() || numrows != getNumRows() ) return false; switchToLP(); skx = new int[numcols]; skc = new int[numrows]; bkc = new int[numrows]; #if MSK_VERSION_MAJOR < 9 restat = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_CON, 0, numrows, (MSKboundkeye*) (bkc), NULL, NULL); checkMSKerror( restat, "MSK_getboundslice", "setWarmStart" ); #else restat = MSK_getconboundslice(getMutableLpPtr(), 0, numrows, (MSKboundkeye*) (bkc), NULL, NULL); checkMSKerror( restat, "MSK_getconboundslice", "setWarmStart" ); #endif for( i = 0; i < numrows; ++i ) { switch( ws->getArtifStatus( i ) ) { case CoinWarmStartBasis::basic: skc[i] = MSK_SK_BAS; ++numbas; break; /* Warning : Slacks in Osi and Mosek er negated */ case CoinWarmStartBasis::atUpperBound: switch(bkc[i]) { case MSK_BK_LO: case MSK_BK_RA: skc[i] = MSK_SK_LOW; break; case MSK_BK_FX: skc[i] = MSK_SK_FIX; break; default: skc[i] = MSK_SK_UNK; break; } break; /* Warning : Slacks in Osi and Mosek er negated */ case CoinWarmStartBasis::atLowerBound: switch(bkc[i]) { case MSK_BK_UP: case MSK_BK_RA: skc[i] = MSK_SK_UPR; break; case MSK_BK_FX: skc[i] = MSK_SK_FIX; break; default: skc[i] = MSK_SK_UNK; break; } break; case CoinWarmStartBasis::isFree: skc[i] = MSK_SK_SUPBAS; break; default: // unknown row status retval = false; skip = true; MSKassert(3,1,"Unkown rowstatus","setWarmStart"); break; } } delete[] bkc; if( skip == false ) { bkx = new int[numcols]; #if MSK_VERSION_MAJOR < 9 restat = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_VAR, 0, numcols, (MSKboundkeye*) (bkx), NULL, NULL); checkMSKerror( restat, "MSK_getboundslice", "setWarmStart" ); #else restat = MSK_getvarboundslice(getMutableLpPtr(), 0, numcols, (MSKboundkeye*) (bkx), NULL, NULL); checkMSKerror( restat, "MSK_getvarboundslice", "setWarmStart" ); #endif for( i = 0; i < numcols; ++i ) { switch( ws->getStructStatus( i ) ) { case CoinWarmStartBasis::basic: skx[i] = MSK_SK_BAS; ++numbas; break; case CoinWarmStartBasis::atLowerBound: switch(bkx[i]) { case MSK_BK_LO: case MSK_BK_RA: skx[i] = MSK_SK_LOW; break; case MSK_BK_FX: skx[i] = MSK_SK_FIX; default: skx[i] = MSK_SK_UNK; break; } break; case CoinWarmStartBasis::atUpperBound: switch(bkx[i]) { case MSK_BK_UP: case MSK_BK_RA: skx[i] = MSK_SK_UPR; break; case MSK_BK_FX: skx[i] = MSK_SK_FIX; default: skx[i] = MSK_SK_UNK; break; } break; case CoinWarmStartBasis::isFree: skx[i] = MSK_SK_SUPBAS; break; default: // unknown col status retval = false; skip = true; MSKassert(3,1,"Unkown col status","setWarmStart"); break; } } delete[] bkx; } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("OsiMskSolverInterface::setWarmStart(%p) numcols %d numrows %d numbas %d\n", (void *)warmstart,numcols,numrows,numbas); #endif #if 0 MSKassert(3,numbas == numrows,"Wrong number of basis variables","setWarmStart"); #endif if( skip == false ) { restat = MSK_putsolution( getLpPtr( OsiMskSolverInterface::FREECACHED_RESULTS ), MSK_SOL_BAS, (MSKstakeye*) (skc), (MSKstakeye*) (skx), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); delete[] skx; delete[] skc; } else { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Skipping setting values in OsiMskSolverInterface::setWarmStart()\n"); #endif #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::setWarmStart(%p)\n", (void *)warmstart); #endif delete[] skx; delete[] skc; return false; } retval = (restat == MSK_RES_OK); #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::setWarmStart(%p)\n", (void *)warmstart); #endif return retval; } //############################################################################# // Hotstart related methods (primarily used in strong branching) //############################################################################# //----------------------------------------------------------------------------- // Mark hot start void OsiMskSolverInterface::markHotStart() { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::markHotStart()\n"); #endif int err; int numcols, numrows; MSKassert(3,!probtypemip_,"probtypemip_","markHotStart"); numcols = getNumCols(); numrows = getNumRows(); if( numcols > hotStartCStatSize_ ) { delete[] hotStartCStat_; hotStartCStatSize_ = static_cast( 1.0 * static_cast( numcols ) ); // get some extra space for future hot starts hotStartCStat_ = new int[hotStartCStatSize_]; } if( numrows > hotStartRStatSize_ ) { delete[] hotStartRStat_; hotStartRStatSize_ = static_cast( 1.0 * static_cast( numrows ) ); // get some extra space for future hot starts hotStartRStat_ = new int[hotStartRStatSize_]; } err = MSK_getsolution(getMutableLpPtr(), MSK_SOL_BAS, NULL, NULL, (MSKstakeye*) (hotStartRStat_), (MSKstakeye*) (hotStartCStat_), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror( err, "MSK_getsolution", "markHotStart" ); #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::markHotStart()\n"); #endif } //----------------------------------------------------------------------------- // Solve from a hot start void OsiMskSolverInterface::solveFromHotStart() { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::solveFromHotStart()\n"); #endif int err; int maxiter; switchToLP(); MSKassert(3,getNumCols() <= hotStartCStatSize_,"getNumCols() <= hotStartCStatSize_","solveFromHotStart"); MSKassert(3,getNumRows() <= hotStartRStatSize_,"getNumRows() <= hotStartRStatSize_","solveFromHotStart"); err = MSK_putsolution(getLpPtr( OsiMskSolverInterface::FREECACHED_RESULTS ), MSK_SOL_BAS, (MSKstakeye*) (hotStartRStat_), (MSKstakeye*) (hotStartCStat_), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror( err, "MSK_putsolution", "solveFromHotStart" ); err = MSK_getintparam( getMutableLpPtr(), MSK_IPAR_SIM_MAX_ITERATIONS, &maxiter ); checkMSKerror( err, "MSK_getintparam", "solveFromHotStart" ); err = MSK_putintparam( getMutableLpPtr(), MSK_IPAR_SIM_MAX_ITERATIONS, hotStartMaxIteration_ ); checkMSKerror( err, "MSK_putintparam", "solveFromHotStart" ); resolve(); err = MSK_putintparam( getMutableLpPtr(), MSK_IPAR_SIM_MAX_ITERATIONS, maxiter ); checkMSKerror( err, "MSK_putintparam", "solveFromHotStart" ); #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::solveFromHotStart()\n"); #endif } //----------------------------------------------------------------------------- // Unmark a hot start void OsiMskSolverInterface::unmarkHotStart() { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::unmarkHotStart()\n"); #endif freeCachedData(); if( hotStartCStat_ != NULL ) delete[] hotStartCStat_; if( hotStartRStat_ != NULL ) delete[] hotStartRStat_; hotStartCStat_ = NULL; hotStartCStatSize_ = 0; hotStartRStat_ = NULL; hotStartRStatSize_ = 0; #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::unmarkHotStart()\n"); #endif } //############################################################################# // Problem information methods (original data) //############################################################################# //----------------------------------------------------------------------------- // Returns number of columns in MOSEK task int OsiMskSolverInterface::getNumCols() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getNumCols()\n"); #endif int numcol, err; err = MSK_getnumvar(getMutableLpPtr(),&numcol); checkMSKerror( err, "MSK_getnumvar", "getNumCols" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getNumCols()\n"); #endif return numcol; } //----------------------------------------------------------------------------- // Returns number of rows in MOSEK task int OsiMskSolverInterface::getNumRows() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getNumRows()\n"); #endif int numrow, err; err = MSK_getnumcon(getMutableLpPtr(),&numrow); checkMSKerror( err, "MSK_getnumcon", "getNumRows" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getNumRows()\n"); #endif return numrow; } //----------------------------------------------------------------------------- // Returns number of non-zeroes (in matrix) in MOSEK task int OsiMskSolverInterface::getNumElements() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getNumElements()\n"); #endif int numnon, err; err = MSK_getnumanz(getMutableLpPtr(),&numnon); checkMSKerror( err, "MSK_getnumanz", "getNumElements" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getNumElements()\n"); #endif return numnon; } //----------------------------------------------------------------------------- // Returns lower bounds on columns in MOSEK task const double * OsiMskSolverInterface::getColLower() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getColLower()\n"); #endif if(collower_ == NULL ) { int ncols = getNumCols(); MSKassert(3,colupper_ == NULL,"colupper_","getColLower"); if( ncols > 0 ) { if(colupper_ == NULL) colupper_ = new double[ncols]; if(collower_ == NULL) collower_ = new double[ncols]; int *dummy_tags = new int[ncols]; #if MSK_VERSION_MAJOR < 9 int err = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_VAR, (MSKidxt)0, (MSKidxt)ncols, (MSKboundkeye*) (dummy_tags), collower_, colupper_); checkMSKerror(err, "MSK_getboundslice","getColUpper"); #else int err = MSK_getvarboundslice(getMutableLpPtr(), 0, ncols, (MSKboundkeye*) (dummy_tags), collower_, colupper_); checkMSKerror(err, "MSK_getvarboundslice","getColUpper"); #endif for( int k = 0; k < ncols; ++k ) { if( dummy_tags[k] == MSK_BK_UP || dummy_tags[k] == MSK_BK_FR ) { /* No lower */ collower_[k] = -getInfinity(); } if( dummy_tags[k] == MSK_BK_LO || dummy_tags[k] == MSK_BK_FR ) { /* No upper */ colupper_[k] = getInfinity(); } } delete[] dummy_tags; } else { if(colupper_ != NULL) delete [] colupper_; if(collower_ != NULL) delete [] collower_; colupper_ = collower_ = NULL; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getColLower()\n"); #endif return collower_; } //----------------------------------------------------------------------------- // Returns upper bounds on columns in MOSEK task const double * OsiMskSolverInterface::getColUpper() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getColUpper()\n"); #endif if( colupper_ == NULL ) { int ncols = getNumCols(); MSKassert(3,collower_ == NULL,"collower_ == NULL","getColUpper"); if( ncols > 0 ) { if(colupper_ == NULL) colupper_ = new double[ncols]; if(collower_ == NULL) collower_ = new double[ncols]; int *dummy_tags = new int[ncols]; #if MSK_VERSION_MAJOR < 9 int err = MSK_getboundslice( getMutableLpPtr(), MSK_ACC_VAR, (MSKidxt)0, (MSKidxt)ncols, (MSKboundkeye*) (dummy_tags), collower_, colupper_); checkMSKerror(err,"MSK_getboundslice","getColUpper"); #else int err = MSK_getvarboundslice( getMutableLpPtr(), 0, ncols, (MSKboundkeye*) (dummy_tags), collower_, colupper_); checkMSKerror(err,"MSK_getvarboundslice","getColUpper"); #endif delete[] dummy_tags; } else { if(colupper_ != NULL) delete [] colupper_; if(collower_ != NULL) delete [] collower_; colupper_ = collower_ = NULL; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getColUpper()\n"); #endif return colupper_; } //----------------------------------------------------------------------------- // Returns rowsense in MOSEK task, call getRightHandSide to produce triplets. const char * OsiMskSolverInterface::getRowSense() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getRowSense()\n"); #endif if( rowsense_==NULL ) { getRightHandSide(); if( getNumRows() != 0 ) MSKassert(3,rowsense_!=NULL,"rowsense_!=NULL","getRowSense"); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getRowSense()\n"); #endif return rowsense_; } //----------------------------------------------------------------------------- // Returns the RHS in triplet form. MOSEK uses always boundkeys instead of the // triplet, so we have to convert back to triplet. const double * OsiMskSolverInterface::getRightHandSide() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getRightHandSide()\n"); #endif if(rowsense_ == NULL) { int nr = getNumRows(); if ( nr != 0 ) { MSKassert(3,(rhs_ == NULL) && (rowrange_ == NULL),"(rhs_ == NULL) && (rowrange_ == NULL)","getRightHandSide"); rowsense_ = new char[nr]; rhs_ = new double[nr]; rowrange_ = new double[nr]; const double * lb = getRowLower(); const double * ub = getRowUpper(); int i; for ( i=0; i 3 debugMessage("End OsiMskSolverInterface::getRightHandSide()\n"); #endif return rhs_; } //----------------------------------------------------------------------------- // Returns rowrange in MOSEK task, call getRightHandSide to produce triplets. const double * OsiMskSolverInterface::getRowRange() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getRowRange()\n"); #endif if( rowrange_ == NULL ) { getRightHandSide(); MSKassert(3,rowrange_!=NULL || getNumRows() == 0,"rowrange_!=NULL || getNumRows() == 0","getRowRange"); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getRowRange()\n"); #endif return rowrange_; } //----------------------------------------------------------------------------- // Returns lower bounds on rows in MOSEK task. const double * OsiMskSolverInterface::getRowLower() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getRowLower()\n"); #endif if( rowlower_ == NULL ) { MSKassert(3,rowupper_ == NULL,"rowupper_ == NULL","getRowLower"); int nrows = getNumRows(); if( nrows > 0 ) { rowlower_ = new double[nrows]; rowupper_ = new double[nrows]; int *dummy_tags = new int[nrows]; #if MSK_VERSION_MAJOR < 9 int err = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_CON, (MSKidxt)0, (MSKidxt)nrows, (MSKboundkeye*) (dummy_tags), rowlower_, rowupper_); checkMSKerror(err,"MSK_getboundslice","getRowLower"); #else int err = MSK_getconboundslice(getMutableLpPtr(), 0, nrows, (MSKboundkeye*) (dummy_tags), rowlower_, rowupper_); checkMSKerror(err,"MSK_getconboundslice","getRowLower"); #endif delete[] dummy_tags; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getRowLower()\n"); #endif return rowlower_; } //----------------------------------------------------------------------------- // Returns upper bounds on rows in MOSEK task. const double * OsiMskSolverInterface::getRowUpper() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getRowUpper()\n"); #endif if( rowupper_ == NULL ) { MSKassert(3,rowlower_ == NULL,"probtypemip_","getRowUpper"); int nrows = getNumRows(); if( nrows > 0 ) { rowupper_ = new double[nrows]; rowlower_ = new double[nrows]; int *dummy_tags = new int[nrows]; #if MSK_VERSION_MAJOR < 9 int err = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_CON, (MSKidxt)0, (MSKidxt)nrows, (MSKboundkeye*) (dummy_tags), rowlower_, rowupper_); checkMSKerror(err,"MSK_getboundslice","getRowUpper"); #else int err = MSK_getconboundslice(getMutableLpPtr(), 0, nrows, (MSKboundkeye*) (dummy_tags), rowlower_, rowupper_); checkMSKerror(err,"MSK_getconboundslice","getRowUpper"); #endif delete[] dummy_tags; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getRowUpper()\n"); #endif return rowupper_; } //----------------------------------------------------------------------------- // Returns objective coefficient in MOSEK task. const double * OsiMskSolverInterface::getObjCoefficients() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getObjCoefficients()\n"); #endif if( obj_ == NULL ) { int ncols = getNumCols(); if( ncols > 0 ) { obj_ = new double[ncols]; int err = MSK_getc( getMutableLpPtr(), obj_ ); checkMSKerror( err, "MSK_getc", "getObjCoefficients" ); } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getObjCoefficients()\n"); #endif return obj_; } //----------------------------------------------------------------------------- // Returns the direction of optimization double OsiMskSolverInterface::getObjSense() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getObjSense()\n"); #endif int err; MSKobjsensee objsen; err = MSK_getobjsense(getMutableLpPtr(), &objsen); checkMSKerror(err,"MSK_getintparam","getObjSense"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getObjSense()\n"); #endif if( objsen == MSK_OBJECTIVE_SENSE_MAXIMIZE ) return -1.0; else return +1.0; } //----------------------------------------------------------------------------- // Returns true if variabel is set to continuous bool OsiMskSolverInterface::isContinuous( int colNumber ) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::isContinuous(%d)\n", colNumber); debugMessage("End OsiMskSolverInterface::isContinuous(%d)\n", colNumber); #endif return getCtype()[colNumber] == 'C'; } //----------------------------------------------------------------------------- // Returns a Coin matrix by row const CoinPackedMatrix * OsiMskSolverInterface::getMatrixByRow() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getMatrixByRow()\n"); #endif if ( matrixByRow_ == NULL ) { int nc, nr, nz, *sub, *ptrb, *ptre, surp, *len; double *val; nc = getNumCols(); nr = getNumRows(); nz = surp = getNumElements(); ptrb = new int[nr+1]; ptre = new int[nr]; sub = new int[nz]; val = new double[nz]; len = new int[nr]; ptrb[nr] = nz; #if MSK_VERSION_MAJOR < 9 int err = MSK_getaslice(getMutableLpPtr(), MSK_ACC_CON, 0, nr, nz, &surp, ptrb, ptre, sub, val); checkMSKerror(err, "MSK_getaslice", "getMatrixByRow"); #else int err = MSK_getarowslice(getMutableLpPtr(), 0, nr, nz, &surp, ptrb, ptre, sub, val); checkMSKerror(err, "MSK_getarowslice", "getMatrixByRow"); #endif for(int i=0; iassignMatrix(false , nc, nr, nz, val, sub, ptrb, len); MSKassert(3,matrixByRow_->getNumCols()==nc,"matrixByRow_->getNumCols()==nc","getMatrixByRow"); MSKassert(3,matrixByRow_->getNumRows()==nr,"matrixByRow_->getNumRows()==nr","getMatrixByRow"); delete[] ptrb; delete[] ptre; delete[] sub; delete[] val; delete[] len; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getMatrixByRow()\n"); #endif return matrixByRow_; } //----------------------------------------------------------------------------- // Returns a Coin matrix by column const CoinPackedMatrix * OsiMskSolverInterface::getMatrixByCol() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getMatrixByCol()\n"); #endif if ( matrixByCol_ == NULL ) { int nc, nr, nz, *sub, *ptrb, *ptre, surp, *len; double *val; nc = getNumCols(); nr = getNumRows(); nz = surp = getNumElements(); ptrb = new int[nc+1]; ptre = new int[nc]; sub = new int[nz]; val = new double[nz]; len = new int[nc]; ptrb[nc] = nz; #if MSK_VERSION_MAJOR < 9 int err = MSK_getaslice(getMutableLpPtr(), MSK_ACC_VAR, 0, nc, nz, &surp, ptrb, ptre, sub, val); checkMSKerror(err, "MSK_getaslice", "getMatrixByCol"); #else int err = MSK_getacolslice(getMutableLpPtr(), 0, nc, nz, &surp, ptrb, ptre, sub, val); checkMSKerror(err, "MSK_getacolslice", "getMatrixByCol"); #endif for(int i=0; iassignMatrix(true , nr, nc, nz, val, sub, ptrb, len); MSKassert(3,matrixByCol_->getNumCols()==nc,"matrixByCol_->getNumCols()==nc","getMatrixByCol"); MSKassert(3,matrixByCol_->getNumRows()==nr,"matrixByCol_->getNumRows()==nr","getMatrixByCol"); delete[] ptrb; delete[] ptre; delete[] sub; delete[] val; delete[] len; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getMatrixByCol()\n"); #endif return matrixByCol_; } //----------------------------------------------------------------------------- // Returns the infinity level used in MOSEK. double OsiMskSolverInterface::getInfinity() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getInfinity()\n"); debugMessage("End OsiMskSolverInterface::getInfinity()\n"); #endif return MSK_INFINITY; } //############################################################################# // Problem information methods (results) //############################################################################# //----------------------------------------------------------------------------- // Returns the current col solution. const double * OsiMskSolverInterface::getColSolution() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getColSolution() %p\n",(void*)this); #endif if( colsol_ != NULL ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("colsol_ != NULL\n"); #endif return colsol_; } int i; int nc = getNumCols(); if( nc > 0 ) { MSKsoltypee solution = MSK_SOL_END; if(colsol_ == NULL) colsol_ = new double[nc]; if( probtypemip_ == false) { if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else if( definedSolution( MSK_SOL_ITR) == true ) solution = MSK_SOL_ITR; } else if( definedSolution( MSK_SOL_ITG ) == true ) solution = MSK_SOL_ITG; if ( solution == MSK_SOL_END ) { double const *cl=getColLower(),*cu=getColLower(); /* this is just plain stupid, but needed to pass unit test */ for( i = 0; i < nc; ++i ) { if( cl[i] > -getInfinity() ) { colsol_[i] = cl[i]; } else if( cu[i] < getInfinity() ) { colsol_[i] = cu[i]; } else { colsol_[i] = 0.0; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("colsol_ truncated to zero due to no solution\n"); debugMessage("probtypemip_ %d\n",probtypemip_); #endif return colsol_; } int err = MSK_getsolution(getMutableLpPtr(), solution, NULL, NULL, NULL, NULL, NULL, NULL, colsol_, NULL, NULL, NULL, NULL, NULL, NULL ); checkMSKerror(err,"MSK_getsolution","getColSolution"); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getColSolution()\n"); #endif return colsol_; } //----------------------------------------------------------------------------- // Returns the row price / dual variabels in MOSEK task const double * OsiMskSolverInterface::getRowPrice() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getRowPrice()\n"); #endif if( rowsol_ == NULL ) { int i; int nr = getNumRows(); if( nr > 0 ) { MSKsoltypee solution = MSK_SOL_END; rowsol_ = new double[nr]; if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else if( definedSolution( MSK_SOL_ITR) == true ) solution = MSK_SOL_ITR; if ( solution == MSK_SOL_END ) { for( i = 0; i < nr; ++i ) rowsol_[i] = 0.0; return rowsol_; } int err = MSK_getsolution(getMutableLpPtr(), solution, NULL, NULL, NULL, NULL, NULL, NULL, NULL, rowsol_, NULL, NULL, NULL, NULL, NULL); checkMSKerror( err, "MSK_getsolution", "getRowPrice" ); } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getRowPrice()\n"); #endif return rowsol_; } //----------------------------------------------------------------------------- // Returns the reduced cost in MOSEK task. const double * OsiMskSolverInterface::getReducedCost() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getReducedCost()\n"); #endif if( redcost_ == NULL ) { int ncols = getNumCols(); if( ncols > 0 ) { MSKsoltypee solution = MSK_SOL_END; if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else if( definedSolution( MSK_SOL_ITR) == true ) solution = MSK_SOL_ITR; if ( solution == MSK_SOL_END ) return NULL; redcost_ = new double[ncols]; double *slx = new double[ncols]; double *sux = new double[ncols]; int err = MSK_getsolution(getMutableLpPtr(), solution, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, slx, sux, NULL); // Calculate reduced cost for(int i = 0; i < ncols; i++) redcost_[i] = slx[i]-sux[i]; delete[] slx; delete[] sux; checkMSKerror( err, "MSK_getsolution", "getReducedCost" ); } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getReducedCost()\n"); #endif return redcost_; } //----------------------------------------------------------------------------- // Returns the rowactivity in MOSEK task. const double * OsiMskSolverInterface::getRowActivity() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getRowActivity()\n"); #endif if( rowact_ == NULL ) { int nrows = getNumRows(); if( nrows > 0 ) { rowact_ = new double[nrows]; const double *x = getColSolution() ; const CoinPackedMatrix *mtx = getMatrixByRow() ; mtx->times(x,rowact_) ; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getRowActivity()\n"); #endif return rowact_; } //----------------------------------------------------------------------------- // Returns the objective for defined solution in MOSEK task. double OsiMskSolverInterface::getObjValue() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getObjValue()\n"); #endif double objval = OsiSolverInterface::getObjValue(); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getObjValue()\n"); #endif return objval; } //----------------------------------------------------------------------------- // Returns the iteration used in last call to optimize. Notice that the cross // over phase in interior methods is not returned, when interior point is // used, only the interior point iterations. int OsiMskSolverInterface::getIterationCount() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getIterationCount()\n"); #endif int nr = 0, solver, err; int nrp=0; solver = solverUsed(); if( solver == MSK_OPTIMIZER_PRIMAL_SIMPLEX ) { { err = MSK_getintinf(getMutableLpPtr(), MSK_IINF_SIM_PRIMAL_ITER, &nr); checkMSKerror(err,"MSK_getintinf","getIterationsCount"); } } else if( solver == MSK_OPTIMIZER_DUAL_SIMPLEX ) { { err = MSK_getintinf(getMutableLpPtr(), MSK_IINF_SIM_DUAL_ITER, &nr); checkMSKerror(err,"MSK_getintinf","getIterationsCount"); } } else if( solver == MSK_OPTIMIZER_FREE_SIMPLEX ) { { err = MSK_getintinf(getMutableLpPtr(), MSK_IINF_SIM_DUAL_ITER, &nr); checkMSKerror(err,"MSK_getintinf","getIterationsCount"); err = MSK_getintinf(getMutableLpPtr(), MSK_IINF_SIM_PRIMAL_ITER, &nrp); checkMSKerror(err,"MSK_getintinf","getIterationsCount"); nr = nr+nrp; } } else if( solver == MSK_OPTIMIZER_INTPNT ) { { err = MSK_getintinf(getMutableLpPtr(), MSK_IINF_INTPNT_ITER, &nr); checkMSKerror(err,"MSK_getintinf","getIterationsCount"); } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getIterationCount()\n"); #endif return nr; } //----------------------------------------------------------------------------- // Returns one dual ray std::vector OsiMskSolverInterface::getDualRays(int maxNumRays, bool fullRay) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getDualRays(%d,%s)\n", maxNumRays, fullRay?"true":"false"); #endif if (fullRay == true) { throw CoinError("Full dual rays not yet implemented.","getDualRays", "OsiMskSolverInterface"); } OsiMskSolverInterface solver(*this); int numrows = getNumRows(), r; MSKsolstae status; MSKsoltypee solution; if( probtypemip_ == false ) { if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else { if( definedSolution( MSK_SOL_ITR ) == true ) solution = MSK_SOL_ITR; else return std::vector(); } } else { if( definedSolution( MSK_SOL_ITG ) == true ) solution = MSK_SOL_ITG; else return std::vector(); } double *farkasray = new double[numrows]; r = MSK_getsolution(getMutableLpPtr(), solution, NULL, &status, NULL, NULL, NULL, NULL, NULL, farkasray, NULL, NULL, NULL, NULL, NULL); checkMSKerror( r, "MSK_getsolution", "getDualRays" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getDualRays(%d)\n", maxNumRays); #endif if( status != MSK_SOL_STA_PRIM_INFEAS_CER ) { delete[] farkasray; return std::vector(); } else return std::vector(1, farkasray); } //----------------------------------------------------------------------------- // Returns one primal ray std::vector OsiMskSolverInterface::getPrimalRays(int maxNumRays) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getPrimalRays(%d)\n", maxNumRays); #endif OsiMskSolverInterface solver(*this); int numcols = getNumCols(), r; MSKsolstae status; MSKsoltypee solution; if( probtypemip_ == false ) { if( definedSolution( MSK_SOL_BAS ) == true ) solution = MSK_SOL_BAS; else { if( definedSolution( MSK_SOL_ITR ) == true ) solution = MSK_SOL_ITR; else return std::vector(); } } else { if( definedSolution( MSK_SOL_ITG ) == true ) solution = MSK_SOL_ITG; else return std::vector(); } double *farkasray = new double[numcols]; r = MSK_getsolution(getMutableLpPtr(), solution, NULL, &status, NULL, NULL, NULL, NULL, farkasray, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror( r, "MSK_getsolution", "getPrimalRays" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getPrimalRays(%d)\n", maxNumRays); #endif if( status != MSK_SOL_STA_DUAL_INFEAS_CER ) { delete[] farkasray; return std::vector(); } else return std::vector(1, farkasray); } //############################################################################# // Problem modifying methods (rim vectors) //############################################################################# //----------------------------------------------------------------------------- // Sets a variabels objective coeff. void OsiMskSolverInterface::setObjCoeff( int elementIndex, double elementValue ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setObjCoeff(%d, %g)\n", elementIndex, elementValue); #endif const double *oldobj; if( redcost_ && !obj_ ) oldobj = getObjCoefficients(); else oldobj = obj_; int err = MSK_putclist(getMutableLpPtr(), 1, &elementIndex, &elementValue); checkMSKerror(err, "MSK_putclist", "setObjCoeff"); if( obj_ ) { if( redcost_ ) { redcost_[elementIndex] += elementValue-oldobj[elementIndex]; obj_[elementIndex] = elementValue; } else { obj_[elementIndex] = elementValue; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setObjCoeff(%d, %g)\n", elementIndex, elementValue); #endif } //----------------------------------------------------------------------------- // Sets a list of objective coeff. void OsiMskSolverInterface::setObjCoeffSet(const int* indexFirst, const int* indexLast, const double* coeffList) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setObjCoeffSet(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)coeffList); #endif const double *oldobj; const long int cnt = indexLast - indexFirst; if( redcost_ && !obj_ ) oldobj = getObjCoefficients(); else oldobj = obj_; int err = MSK_putclist(getMutableLpPtr(), static_cast(cnt), const_cast(indexFirst), const_cast(coeffList)); checkMSKerror(err, "MSK_putclist", "setObjCoeffSet"); if( obj_ ) { if( redcost_ ) { for( int j = 0; j < cnt; ++j) { redcost_[j] += coeffList[indexFirst[j]]-oldobj[j]; obj_[j] = coeffList[indexFirst[j]]; } } else { for( int j = 0; j < cnt; ++j) { obj_[j] = coeffList[indexFirst[j]]; } } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setObjCoeffSet(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)coeffList); #endif } //----------------------------------------------------------------------------- // Sets lower bound on one specific column void OsiMskSolverInterface::setColLower(int elementIndex, double elementValue) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setColLower(%d, %g)\n", elementIndex, elementValue); #endif int finite = 1; if( elementValue <= -getInfinity() ) finite = 0; #if MSK_VERSION_MAJOR < 9 int err = MSK_chgbound(getMutableLpPtr(), MSK_ACC_VAR, elementIndex, 1, /*It is a lower bound*/ finite, /* Is it finite */ elementValue); checkMSKerror( err, "MSK_chgbound", "setColLower" ); #else int err = MSK_chgvarbound(getMutableLpPtr(), elementIndex, 1, /*It is a lower bound*/ finite, /* Is it finite */ elementValue); checkMSKerror( err, "MSK_chgvarbound", "setColLower" ); #endif if( collower_ != NULL ) collower_[elementIndex] = elementValue; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setColLower(%d, %g)\n", elementIndex, elementValue); #endif } //----------------------------------------------------------------------------- // Sets upper bound on one specific column. void OsiMskSolverInterface::setColUpper(int elementIndex, double elementValue) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setColUpper(%d, %g)\n", elementIndex, elementValue); #endif int finite = 1; if( elementValue >= getInfinity() ) finite = 0; #if MSK_VERSION_MAJOR < 9 int err = MSK_chgbound( getMutableLpPtr(), MSK_ACC_VAR, elementIndex, 0, /* It is a upper bound */ finite, /* Is it finite */ elementValue); checkMSKerror( err, "MSK_chgbound", "setColUpper" ); #else int err = MSK_chgvarbound( getMutableLpPtr(), elementIndex, 0, /* It is a upper bound */ finite, /* Is it finite */ elementValue); checkMSKerror( err, "MSK_chgvarbound", "setColUpper" ); #endif if( colupper_ != NULL ) colupper_[elementIndex] = elementValue; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setColUpper(%d, %g)\n", elementIndex, elementValue); #endif } //----------------------------------------------------------------------------- // Sets upper and lower bound on one specific column void OsiMskSolverInterface::setColBounds( int elementIndex, double lower, double upper ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setColBounds(%d, %g, %g)\n", elementIndex, lower, upper); #endif setColLower(elementIndex, lower); setColUpper(elementIndex, upper); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setColBounds(%d, %g, %g)\n", elementIndex, lower, upper); #endif } //----------------------------------------------------------------------------- // Sets upper and lower bounds on a list of columns. Due to the strange storage of // boundlist, it is not possible to change all the bounds in one call to MOSEK, // so the standard method is used. void OsiMskSolverInterface::setColSetBounds(const int* indexFirst, const int* indexLast, const double* boundList) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setColSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); #endif OsiSolverInterface::setColSetBounds( indexFirst, indexLast, boundList ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setColSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); #endif } //----------------------------------------------------------------------------- // Sets the lower bound on a row void OsiMskSolverInterface::setRowLower( int i, double elementValue ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setRowLower(%d, %g)\n", i, elementValue); #endif double rhs = getRightHandSide()[i]; double range = getRowRange()[i]; char sense = getRowSense()[i]; double lower=-MSK_INFINITY, upper=MSK_INFINITY; convertSenseToBound( sense, rhs, range, lower, upper ); if( lower != elementValue ) { convertBoundToSense( elementValue, upper, sense, rhs, range ); setRowType( i, sense, rhs, range ); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setRowLower(%d, %g)\n", i, elementValue); #endif } //----------------------------------------------------------------------------- // Sets the upper bound on a row void OsiMskSolverInterface::setRowUpper( int i, double elementValue ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setRowUpper(%d, %g)\n", i, elementValue); #endif double rhs = getRightHandSide()[i]; double range = getRowRange()[i]; char sense = getRowSense()[i]; double lower=-MSK_INFINITY, upper=MSK_INFINITY; convertSenseToBound( sense, rhs, range, lower, upper ); if( upper != elementValue ) { convertBoundToSense( lower, elementValue, sense, rhs, range ); setRowType( i, sense, rhs, range ); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setRowUpper(%d, %g)\n", i, elementValue); #endif } //----------------------------------------------------------------------------- // Sets the upper and lower bound on a row void OsiMskSolverInterface::setRowBounds( int elementIndex, double lower, double upper ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setRowBounds(%d, %g, %g)\n", elementIndex, lower, upper); #endif double rhs, range; char sense; convertBoundToSense( lower, upper, sense, rhs, range ); setRowType( elementIndex, sense, rhs, range ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setRowBounds(%d, %g, %g)\n", elementIndex, lower, upper); #endif } //----------------------------------------------------------------------------- // Sets the triplet on a row void OsiMskSolverInterface::setRowType(int i, char sense, double rightHandSide,double range) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setRowType(%d, %c, %g, %g)\n", i, sense, rightHandSide, range); #endif double rub=MSK_INFINITY,rlb=-MSK_INFINITY; int rtag=MSK_BK_FR; MskConvertSenseToBound(sense, range, rightHandSide, rlb, rub, rtag); #if MSK_VERSION_MAJOR < 9 int err = MSK_putbound(getMutableLpPtr(), MSK_ACC_CON, i, (MSKboundkeye)rtag, rlb, rub); checkMSKerror( err, "MSK_putbound", "setRowType" ); #else int err = MSK_putconbound(getMutableLpPtr(), i, (MSKboundkeye)rtag, rlb, rub); checkMSKerror( err, "MSK_putconbound", "setRowType" ); #endif if( rowsense_ != NULL ) rowsense_[i] = sense; if( rowrange_ != NULL ) rowrange_[i] = range; if( rhs_ != NULL ) rhs_[i] = rightHandSide; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setRowType(%d, %c, %g, %g)\n", i, sense, rightHandSide, range); #endif } //----------------------------------------------------------------------------- // Set upper og lower bounds for a lisit of rows. Due to the strange storage of // boundlist, it is not possible to change all the bounds in one call to MOSEK, // so the standard method is used. void OsiMskSolverInterface::setRowSetBounds(const int* indexFirst, const int* indexLast, const double* boundList) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setRowSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); #endif const long int cnt = indexLast - indexFirst; if (cnt <= 0) return; for (int i = 0; i < cnt; ++i) setRowBounds(indexFirst[i], boundList[2*i], boundList[2*i+1]); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setRowSetBounds(%p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)boundList); #endif } //----------------------------------------------------------------------------- // Set triplets for a list of rows void OsiMskSolverInterface::setRowSetTypes(const int* indexFirst, const int* indexLast, const char* senseList, const double* rhsList, const double* rangeList) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setRowSetTypes(%p, %p, %p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)senseList, (void *)rhsList, (void *)rangeList); #endif const long int cnt = indexLast - indexFirst; if (cnt <= 0) return; for (int i = 0; i < cnt; ++i) setRowType(indexFirst[i], senseList[i], rhsList[i], rangeList[i]); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setRowSetTypes(%p, %p, %p, %p, %p)\n", (void *)indexFirst, (void *)indexLast, (void *)senseList, (void *)rhsList, (void *)rangeList); #endif } //----------------------------------------------------------------------------- // Sets a variabel to continuous void OsiMskSolverInterface::setContinuous(int index) { int numcols = getNumCols(); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setContinuous(%d)\n", index); #endif MSKassert(3,coltype_ != NULL,"coltype_ != NULL","setContinuous"); MSKassert(3,coltypesize_ >= getNumCols(),"coltypesize_ >= getNumCols()","setContinuous"); coltype_[index] = 'C'; if( index < numcols ) { int err = MSK_putvartype( getMutableLpPtr(), index, MSK_VAR_TYPE_CONT); checkMSKerror( err, "MSK_putvartype", "setContinuous" ); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setContinuous(%d)\n", index); #endif } //----------------------------------------------------------------------------- // Sets a variabel to integer void OsiMskSolverInterface::setInteger(int index) { int numcols = getNumCols(); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setInteger(%d)\n", index); #endif MSKassert(3,coltype_ != NULL,"coltype_ != NULL","setInteger"); MSKassert(3,coltypesize_ >= getNumCols(),"coltypesize_ >= getNumCols()","setInteger"); coltype_[index] = 'I'; if( index < numcols ) { int err = MSK_putvartype( getMutableLpPtr(), index, MSK_VAR_TYPE_INT); checkMSKerror( err, "MSK_putvartype", "setInteger" ); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setInteger(%d)\n", index); #endif } //----------------------------------------------------------------------------- // Sets a list of variables to continuous void OsiMskSolverInterface::setContinuous(const int* indices, int len) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setContinuous(%p, %d)\n", (void *)indices, len); #endif for( int i = 0; i < len; ++i ) setContinuous(indices[i]); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setContinuous(%p, %d)\n", (void *)indices, len); #endif } //----------------------------------------------------------------------------- // Sets a list of variables to integer void OsiMskSolverInterface::setInteger(const int* indices, int len) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setInteger(%p, %d)\n", (void *)indices, len); #endif for( int i = 0; i < len; ++i ) setInteger(indices[i]); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setInteger(%p, %d)\n", (void *)indices, len); #endif } //----------------------------------------------------------------------------- // Sets the direction of optimization void OsiMskSolverInterface::setObjSense(double s) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::setObjSense(%g)\n", s); #endif int err; double pre; pre = getObjSense(); if( s == +1.0 ) { err = MSK_putobjsense(getMutableLpPtr(), MSK_OBJECTIVE_SENSE_MINIMIZE); } else { err = MSK_putobjsense(getMutableLpPtr(), MSK_OBJECTIVE_SENSE_MAXIMIZE); } checkMSKerror(err,"MSK_putintparam","setObjSense"); if( pre != s ) { /* A hack to pass unit test, ugly as hell */ /* When objective sense is changed then reset obj cuts */ if( s > 0 ) { setDblParam(OsiPrimalObjectiveLimit,-COIN_DBL_MAX) ; setDblParam(OsiDualObjectiveLimit,COIN_DBL_MAX) ; } else { setDblParam(OsiPrimalObjectiveLimit,COIN_DBL_MAX) ; setDblParam(OsiDualObjectiveLimit,-COIN_DBL_MAX) ; } } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::setObjSense(%g)\n", s); #endif } //----------------------------------------------------------------------------- // Sets the col solution. This is very fuzzy WE LIKE STATUS KEYS not numerical values i.e superbasics or basic !!!. void OsiMskSolverInterface::setColSolution(const double * cs) { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::setColSolution %p\n", (void*)this); #endif int err,nc = getNumCols(),nr = getNumRows(), numbas = 0; MSKstakeye *tskc,*tskx; MSKboundkeye *tbkx,*tbkc; MSKrealt *tblx,*tbux,*tblc,*tbuc; double *txc; if( cs == NULL ) { freeCachedResults(); } else if( nc > 0 ) { if( colsol_ != NULL ) delete[] colsol_; colsol_ = new double[nc]; CoinDisjointCopyN( cs, nc, colsol_ ); tbkx = new MSKboundkeye[nc]; tskx = new MSKstakeye[nc]; tblx = new MSKrealt[nc]; tbux = new MSKrealt[nc]; tskc = new MSKstakeye[nr]; txc = new double[nr]; tbkc = new MSKboundkeye[nr]; tblc = new MSKrealt[nr]; tbuc = new MSKrealt[nr]; const CoinPackedMatrix *mtx = getMatrixByCol() ; assert(mtx->getNumCols() == nc); assert(mtx->getNumRows() == nr); mtx->times(cs,txc) ; /* Negate due to different Osi and Mosek slack representation */ for( int i = 0; i < nr; ++i ) { txc[i] = -txc[i]; tskc[i] = MSK_SK_UNK; } #if MSK_VERSION_MAJOR < 9 err = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_CON, 0, nr, tbkc, tblc, tbuc); checkMSKerror( err, "MSK_getboundslice", "setColsolution" ); err = MSK_getboundslice(getMutableLpPtr(), MSK_ACC_VAR, 0, nc, tbkx, tblx, tbux); checkMSKerror( err, "MSK_getboundslice", "setColsolution" ); #else err = MSK_getconboundslice(getMutableLpPtr(), 0, nr, tbkc, tblc, tbuc); checkMSKerror( err, "MSK_getconboundslice", "setColsolution" ); err = MSK_getvarboundslice(getMutableLpPtr(), 0, nc, tbkx, tblx, tbux); checkMSKerror( err, "MSK_getvarboundslice", "setColsolution" ); #endif if( definedSolution( MSK_SOL_BAS ) == true ) { err = MSK_getsolution(getMutableLpPtr(), MSK_SOL_BAS, NULL, NULL, tskc, tskx, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror(err,"MSK_getsolution","setColSol"); } for( int i = 0; i < nr; ++i ) { if( tbkc[i] == MSK_BK_FX && tblc[i] == txc[i] ) { tskc[i] = MSK_SK_FIX; } else if( ( tbkc[i] == MSK_BK_LO || tbkc[i] == MSK_BK_RA ) && tblc[i] == txc[i] ) { tskc[i] = MSK_SK_LOW; } else if( ( tbkc[i] == MSK_BK_UP || tbkc[i] == MSK_BK_RA ) && tbuc[i] == txc[i] ) { tskc[i] = MSK_SK_UPR; } else if( tbkc[i] == MSK_BK_FR && txc[i] == 0.0 ) { tskc[i] = MSK_SK_SUPBAS; } else { #if 0 printf("Slack : %d bkc : %d blc : %-16.10e buc : %-16.10e xc : %-16.10e\n", i,tbkc[i],tblc[i],tbuc[i],txc[i]); #endif ++numbas; tskc[i] = MSK_SK_BAS; } } for( int j = 0; j < nc; ++j ) { if( tbkx[j] == MSK_BK_FX && tblx[j] == cs[j] ) { tskx[j] = MSK_SK_FIX; } else if( ( tbkx[j] == MSK_BK_LO || tbkx[j] == MSK_BK_RA ) && tblx[j] == cs[j] ) { tskx[j] = MSK_SK_LOW; } else if( ( tbkx[j] == MSK_BK_UP || tbkx[j] == MSK_BK_RA ) && tbux[j] == cs[j] ) { tskx[j] = MSK_SK_UPR; } else if( ( tbkx[j] == MSK_BK_FR && cs[j] == 0.0 ) || numbas >= nr ) { tskx[j] = MSK_SK_SUPBAS; } else { #if 0 printf("Org %d : bkx : %d blx : %-16.10e bux : %-16.10e xx : %-16.10e\n", j,tbkx[j],tblx[j],tbux[j],cs[j]); #endif tskx[j] = MSK_SK_BAS; } } err = MSK_putsolution(getMutableLpPtr(), MSK_SOL_BAS, tskc, tskx, NULL, (MSKrealt*) txc, const_cast(cs), NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror(err,"MSK_putsolution","setColSol"); MSKassert(3,definedSolution( MSK_SOL_BAS ) == true,"definedSolution( MSK_SOL_BAS ) == true","setColSolution"); delete [] tbkx; delete [] tblx; delete [] tbux; delete [] tskx; delete [] tskc; delete [] txc; delete [] tbkc; delete [] tblc; delete [] tbuc; } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::setColSolution(%p)\n", (void *)cs); #endif } //----------------------------------------------------------------------------- // Sets the rowprices. void OsiMskSolverInterface::setRowPrice(const double * rs) { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::setRowPrice(%p)\n", (void *)rs); #endif int err,nr = getNumRows(),nc = getNumCols(); MSKstakeye *tskc,*tskx; MSKrealt *tslc,*tsuc,*tslx,*tsux,*txc,*txx; double *redcost; if( rs == NULL ) freeCachedResults(); else if( nr > 0 ) { if ( rowsol_ == NULL ) rowsol_ = new double[nr]; colsol_ = new double[nc]; tskc = new MSKstakeye[nr]; tslc = new MSKrealt[nr]; tsuc = new MSKrealt[nr]; txc = new MSKrealt[nr]; tskx = new MSKstakeye[nc]; tslx = new MSKrealt[nc]; tsux = new MSKrealt[nc]; txx = new MSKrealt[nc]; redcost = new double[nc]; CoinDisjointCopyN( rs, nr, rowsol_ ); /* Calc reduced costs */ const CoinPackedMatrix *mtx = getMatrixByCol() ; mtx->transposeTimes(rs,redcost) ; for( int j = 0; j < nc; ++j ) { redcost[j] = getObjCoefficients()[j]-redcost[j]; tslx[j] = CoinMax(0.0,redcost[j]); tsux[j] = CoinMax(0.0,-redcost[j]); } if( definedSolution( MSK_SOL_BAS ) == true ) { for( int i = 0; i < nr; ++i ) { #if MSK_VERSION_MAJOR < 9 MSKrealt sn; err = MSK_getsolutioni(getMutableLpPtr(), MSK_ACC_CON, i, MSK_SOL_BAS, &tskc[i], &txc[i], &tslc[i], &tsuc[i], &sn); checkMSKerror(err,"MSK_putsolutioni","setRowPrice"); #else err = MSK_getskcslice(getMutableLpPtr(), MSK_SOL_BAS, i, i+1, &tskc[i]); checkMSKerror(err,"MSK_getskcslice","setRowPrice"); err = MSK_getxcslice(getMutableLpPtr(), MSK_SOL_BAS, i, i+1, &txc[i]); checkMSKerror(err,"MSK_getxcslice","setRowPrice"); err = MSK_getslcslice(getMutableLpPtr(), MSK_SOL_BAS, i, i+1, &tslc[i]); checkMSKerror(err,"MSK_getslcslice","setRowPrice"); err = MSK_getsucslice(getMutableLpPtr(), MSK_SOL_BAS, i, i+1, &tsuc[i]); checkMSKerror(err,"MSK_getsucslice","setRowPrice"); #endif tslc[i] = CoinMax(0.0,rowsol_[i]); tsuc[i] = CoinMax(0.0,-rowsol_[i]); } err = MSK_getsolution(getMutableLpPtr(), MSK_SOL_BAS, NULL, NULL, NULL, tskx, NULL, NULL, txx, NULL, NULL, NULL, NULL, NULL, NULL); checkMSKerror(err,"MSK_getsolution","setRowPrice"); err = MSK_putsolution(getMutableLpPtr(), MSK_SOL_BAS, tskc, tskx, NULL, txc, txx, rowsol_, tslc, tsuc, tslx, tsux, NULL); checkMSKerror(err,"MSK_putsolution","setRowPrice"); } else { for( int i = 0; i < nr; ++i ) { tslc[i] = CoinMax(0.0,rowsol_[i]); tsuc[i] = CoinMax(0.0,-rowsol_[i]); tskc[i] = MSK_SK_UNK; } for( int i = 0; i < nc; ++i ) { tskx[i] = MSK_SK_UNK; txx[i] = 0.0; } err = MSK_putsolution(getMutableLpPtr(), MSK_SOL_BAS, tskc, tskx, NULL, NULL, NULL, rowsol_, tslc, tsuc, tslx, tsux, NULL); checkMSKerror(err,"MSK_putsolution","setRowPrice"); } for( int i = 0; i < nc; ++i ) { colsol_[i] = txx[i]; } delete [] tskc; delete [] tslc; delete [] tsuc; delete [] txc; delete [] tskx; delete [] tslx; delete [] tsux; delete [] txx; delete [] redcost; } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::setRowPrice(%p)\n", (void *)rs); #endif } //############################################################################# // Problem modifying methods (matrix) //############################################################################# //----------------------------------------------------------------------------- // Adds a column to the MOSEK task void OsiMskSolverInterface::addCol(const CoinPackedVectorBase& vec, const double collb, const double colub, const double obj) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::addCol(%p, %g, %g, %g)\n", (void *)&vec, collb, colub, obj); #endif int nc = getNumCols(); MSKassert(3,coltypesize_ >= nc,"coltypesize_ >= nc","addCol"); resizeColType(nc + 1); coltype_[nc] = 'C'; int ends = vec.getNumElements(); MSKboundkeye tag; MSKtask_t task=getLpPtr(); double inf = getInfinity(); if(collb > -inf && colub >= inf) tag = MSK_BK_LO; else if(collb <= -inf && colub < inf) tag = MSK_BK_UP; else if(collb > -inf && colub < inf) tag = MSK_BK_RA; else if(collb <= -inf && colub >= inf) tag = MSK_BK_FR; else throw CoinError("Bound error", "addCol", "OsiMSKSolverInterface"); #if MSK_VERSION_MAJOR >= 7 int err; MSKint32t j; err = MSK_getnumvar(task,&j); if ( err==MSK_RES_OK ) err = MSK_appendvars(task,1); if ( err==MSK_RES_OK ) err = MSK_putcj(task,j,obj); if ( err==MSK_RES_OK ) err = MSK_putacol(task,j,ends,const_cast(vec.getIndices()),const_cast(vec.getElements())); if ( err==MSK_RES_OK ) err = MSK_putvarbound(task,j,tag,collb,colub); #else int start = 0; int err = MSK_appendvars(task, 1, const_cast (&obj), &start, &ends, const_cast(vec.getIndices()), const_cast(vec.getElements()), (&tag), const_cast (&collb), const_cast (&colub)); #endif checkMSKerror( err, "MSK_appendvars", "addCol" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::addCol(%p, %g, %g, %g)\n", (void *)&vec, collb, colub, obj); #endif } //----------------------------------------------------------------------------- // Adds a list of columns to the MOSEK task void OsiMskSolverInterface::addCols(const int numcols, const CoinPackedVectorBase * const * cols, const double* collb, const double* colub, const double* obj) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::addCols(%d, %p, %p, %p, %p)\n", numcols, (void *)cols, (void *)collb, (void *)colub, (void *)obj); #endif int i, nz = 0, err = MSK_RES_OK; // For efficiency we put hints on the total future size err = MSK_getmaxnumanz(getLpPtr(), &nz); checkMSKerror( err, "MSK_getmaxanz", "addCols" ); for( i = 0; i < numcols; ++i) nz += cols[i]->getNumElements(); err = MSK_putmaxnumanz(getLpPtr(), nz); checkMSKerror( err, "MSK_putmaxanz", "addCols" ); err = MSK_putmaxnumvar(getLpPtr(), numcols+getNumCols()); checkMSKerror( err, "MSK_putmaxnumvar", "addCols" ); for( i = 0; i < numcols; ++i ) addCol( *(cols[i]), collb[i], colub[i], obj[i] ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::addCols(%d, %p, %p, %p, %p)\n", numcols, (void *)cols, (void *)collb, (void *)colub, (void *)obj); #endif } //----------------------------------------------------------------------------- // Deletes a list of columns from the MOSEK task void OsiMskSolverInterface::deleteCols(const int num, const int * columnIndices) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::deleteCols(%d, %p)\n", num, (void *)columnIndices); #endif #if MSK_VERSION_MAJOR >= 7 int err; err = MSK_removevars(getLpPtr( OsiMskSolverInterface::KEEPCACHED_ROW ), num, const_cast(columnIndices)); checkMSKerror( err, "MSK_removevars", "deleteCols" ); #else int err; err = MSK_remove(getLpPtr( OsiMskSolverInterface::KEEPCACHED_ROW ), MSK_ACC_VAR, num, const_cast(columnIndices)); checkMSKerror( err, "MSK_remove", "deleteCols" ); #endif #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::deleteCols(%d, %p)\n", num, (void *)columnIndices); #endif } //----------------------------------------------------------------------------- // Adds a row in bound form to the MOSEK task void OsiMskSolverInterface::addRow(const CoinPackedVectorBase& vec, const double rowlb, const double rowub) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::addRow(%p, %g, %g)\n", (void *)&vec, rowlb, rowub); #endif getNumRows(); int ends = vec.getNumElements(); double inf = getInfinity(); MSKboundkeye tag; MSKtask_t task = getLpPtr( OsiMskSolverInterface::KEEPCACHED_COLUMN ); if(rowlb > -inf && rowub >= inf) tag = MSK_BK_LO; else if(rowlb <= -inf && rowub < inf) tag = MSK_BK_UP; else if(rowlb > -inf && rowub < inf) tag = MSK_BK_RA; else if(rowlb <= -inf && rowub >= inf) tag = MSK_BK_FR; else throw CoinError("Bound error", "addRow", "OsiMSKSolverInterface"); #if MSK_VERSION_MAJOR >= 7 int err; MSKint32t i; err = MSK_getnumcon(task,&i); if ( err==MSK_RES_OK ) err = MSK_appendcons(task,1); if ( err==MSK_RES_OK ) err = MSK_putconbound(task,i,tag,rowlb,rowub); if ( err==MSK_RES_OK ) err = MSK_putarow(task,i,ends, const_cast(vec.getIndices()), const_cast(vec.getElements())); #else int start = 0; int err = MSK_appendcons(task, 1, &start, &ends, const_cast(vec.getIndices()), const_cast(vec.getElements()), (&tag), const_cast (&rowlb), const_cast (&rowub)); #endif checkMSKerror( err, "MSK_appendcons", "addRow" ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::addRow(%p, %g, %g)\n", (void *)&vec, rowlb, rowub); #endif } //----------------------------------------------------------------------------- // Adds a row in triplet form to the MOSEK task void OsiMskSolverInterface::addRow(const CoinPackedVectorBase& vec, const char rowsen, const double rowrhs, const double rowrng) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::addRow(%p, %c, %g, %g)\n", (void *)&vec, rowsen, rowrhs, rowrng); #endif int rtag=MSK_BK_FR; double lb=-MSK_INFINITY,ub=MSK_INFINITY; MskConvertSenseToBound( rowsen, rowrng, rowrhs, lb, ub, rtag ); addRow(vec, lb, ub); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::addRow(%p, %c, %g, %g)\n", (void *)&vec, rowsen, rowrhs, rowrng); #endif } //----------------------------------------------------------------------------- // Adds a serie of rows in bound form to the MOSEK task void OsiMskSolverInterface::addRows(const int numrows, const CoinPackedVectorBase * const * rows, const double* rowlb, const double* rowub) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::addRows(%d, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowlb, (void *)rowub); #endif int i,nz = 0, err = MSK_RES_OK; // For efficiency we put hints on the total future size err = MSK_getmaxnumanz( getLpPtr(), &nz); checkMSKerror( err, "MSK_getmaxanz", "addRows" ); for( i = 0; i < numrows; ++i) nz += rows[i]->getNumElements(); err = MSK_putmaxnumanz(getLpPtr(), nz); checkMSKerror( err, "MSK_putmaxanz", "addRows" ); err = MSK_putmaxnumcon(getLpPtr(), numrows+getNumRows()); checkMSKerror( err, "MSK_putmaxnumcon", "addRows" ); for( i = 0; i < numrows; ++i ) addRow( *(rows[i]), rowlb[i], rowub[i] ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::addRows(%d, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowlb, (void *)rowub); #endif } //----------------------------------------------------------------------------- // Adds a list of rows in triplet form to the MOSEK task void OsiMskSolverInterface::addRows(const int numrows, const CoinPackedVectorBase * const * rows, const char* rowsen, const double* rowrhs, const double* rowrng) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::addRows(%d, %p, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowsen, (void *)rowrhs, (void *)rowrng); #endif int i, err = MSK_RES_OK, nz = 0; // For efficiency we put hints on the total future size for( i = 0; i < numrows; ++i) nz += rows[i]->getNumElements(); err = MSK_putmaxnumanz( getLpPtr(), nz); checkMSKerror( err, "MSK_putmaxanz", "addRows" ); err = MSK_putmaxnumcon( getLpPtr(), numrows); checkMSKerror( err, "MSK_putmaxnumcon", "addRows" ); for( i = 0; i < numrows; ++i ) addRow( *(rows[i]), rowsen[i], rowrhs[i], rowrng[i] ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::addRows(%d, %p, %p, %p, %p)\n", numrows, (void *)rows, (void *)rowsen, (void *)rowrhs, (void *)rowrng); #endif } //----------------------------------------------------------------------------- // Deletes a list of rows the MOSEK task void OsiMskSolverInterface::deleteRows(const int num, const int * rowIndices) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::deleteRows(%d, %p)\n", num, (void *)rowIndices); #endif int err; #if MSK_VERSION_MAJOR >= 7 err = MSK_removecons(getLpPtr( OsiMskSolverInterface::KEEPCACHED_COLUMN ), num, const_cast(rowIndices)); checkMSKerror( err, "MSK_removecons", "deleteRows" ); #else err = MSK_remove(getLpPtr( OsiMskSolverInterface::KEEPCACHED_COLUMN ), MSK_ACC_CON, num, const_cast(rowIndices)); checkMSKerror( err, "MSK_remove", "deleteRows" ); #endif #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::deleteRows(%d, %p)\n", num, (void *)rowIndices); #endif } //############################################################################# // Methods to input a problem //############################################################################# //----------------------------------------------------------------------------- // Loads a problem. Should have its "own" implementation so we don't have to convert // to triplet, since this is convertet back in the load function called. But // for simplicity, this is not done. void OsiMskSolverInterface::loadProblem(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub ) { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::loadProblem(%p, %p, %p, %p, %p, %p)\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowlb, (void *)rowub); #endif const double inf = getInfinity(); int nrows = matrix.getNumRows(); char * rowSense; double * rowRhs; double * rowRange; if( nrows ) { rowSense = new char [nrows]; rowRhs = new double[nrows]; rowRange = new double[nrows]; } else { rowSense = NULL; rowRhs = NULL; rowRange = NULL; } int i; if( rowlb == NULL && rowub == NULL) for ( i = nrows - 1; i >= 0; --i ) convertBoundToSense( -inf, inf, rowSense[i], rowRhs[i], rowRange[i] ); else if( rowlb == NULL) for ( i = nrows - 1; i >= 0; --i ) convertBoundToSense( -inf, rowub[i], rowSense[i], rowRhs[i], rowRange[i] ); else if( rowub == NULL) for ( i = nrows - 1; i >= 0; --i ) convertBoundToSense( rowlb[i], inf, rowSense[i], rowRhs[i], rowRange[i] ); else for ( i = nrows - 1; i >= 0; --i ) convertBoundToSense( rowlb[i], rowub[i], rowSense[i], rowRhs[i], rowRange[i] ); loadProblem( matrix, collb, colub, obj, rowSense, rowRhs, rowRange ); if( nrows ) { delete [] rowSense; delete [] rowRhs; delete [] rowRange; } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::loadProblem(%p, %p, %p, %p, %p, %p)\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowlb, (void *)rowub); #endif } //----------------------------------------------------------------------------- // Loads a problem void OsiMskSolverInterface::assignProblem( CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, double*& rowlb, double*& rowub ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::assignProblem()\n"); #endif loadProblem( *matrix, collb, colub, obj, rowlb, rowub ); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowlb; rowlb = 0; delete[] rowub; rowub = 0; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::assignProblem()\n"); #endif } //----------------------------------------------------------------------------- // Loads a problem void OsiMskSolverInterface::loadProblem( const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng ) { int nc=matrix.getNumCols(); int nr=matrix.getNumRows(); #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::loadProblem(%p, %p, %p, %p, %p, %p, %p) numcols : %d numrows : %d\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen, (void *)rowrhs, (void *)rowrng,nc,nr); #endif if( nr == 0 && nc == 0 ) gutsOfDestructor(); else { /* Warning input pointers can be NULL */ int i,j; double * ob; int * rtag = NULL; double * rlb = NULL; double * rub = NULL; int * ctag = NULL; int * cends = NULL; const int *len; const int *start; double * clb = NULL; double * cub = NULL; if( obj != NULL ) ob=const_cast(obj); else { ob = new double[nc]; CoinFillN(ob, nc, 0.0); } if( nr ) { rtag = new int[nr]; rlb = new double[nr]; rub = new double[nr]; } if( rowsen && rowrng && rowrhs ) { for( i=0; i < nr; i++ ) MskConvertSenseToBound( rowsen[i], rowrng[i], rowrhs[i], rlb[i], rub[i], rtag[i]); } else { for( i=0; i < nr; i++ ) { rlb[i] = 0.0; rub[i] = MSK_INFINITY; rtag[i] = MSK_BK_LO; } } bool freeMatrixRequired = false; CoinPackedMatrix * m = NULL; if( !matrix.isColOrdered() ) { m = new CoinPackedMatrix(); m->reverseOrderedCopyOf(matrix); freeMatrixRequired = true; } else m = const_cast(&matrix); MSKassert(3,nc == m->getNumCols(),"nc == m->getNumCols()","loadProblem"); MSKassert(3,nr == m->getNumRows(),"nr == m->getNumRows()","loadProblem"); MSKassert(3,m->isColOrdered(),"m->isColOrdered()","loadProblem"); double inf =getInfinity(); if( nc ) { ctag = new int[nc]; cends = new int[nc]; clb = new double[nc]; cub = new double[nc]; } len = (m->getVectorLengths()); start = (m->getVectorStarts()); if( collb == NULL && colub == NULL ) { for(j=0; j < nc; j++) { cends[j] = start[j] + len[j]; MskConvertColBoundToTag(0, inf, clb[j], cub[j], ctag[j]); } } else if( collb == NULL ) { for(j=0; j < nc; j++) { cends[j] = start[j] + len[j]; MskConvertColBoundToTag( 0, colub[j], clb[j], cub[j], ctag[j]); } } else if( colub == NULL ) { for(j=0; j < nc; j++) { cends[j] = start[j] + len[j]; MskConvertColBoundToTag(collb[j], inf, clb[j], cub[j], ctag[j]); } } else { for(j=0; j < nc; j++) { cends[j] = start[j] + len[j]; MskConvertColBoundToTag( collb[j], colub[j], clb[j], cub[j], ctag[j]); } } int err=MSK_inputdata(getLpPtr( OsiMskSolverInterface::KEEPCACHED_NONE ), nr, nc, nr, nc, ob, 0.0, const_cast(m->getVectorStarts()), cends, const_cast(m->getIndices()), const_cast(m->getElements()), (MSKboundkeye*)rtag, rlb, rub, (MSKboundkeye*)ctag, clb, cub); checkMSKerror( err, "MSK_inputdata", "loadProblem" ); if( obj == NULL ) delete[] ob; if( nr ) { delete[] rtag; delete[] rlb; delete[] rub; } if( nc ) { delete[] ctag; delete[] clb; delete[] cub; delete[] cends; } if ( freeMatrixRequired ) delete m; resizeColType(nc); CoinFillN(coltype_, nc, 'C'); } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::loadProblem(%p, %p, %p, %p, %p, %p, %p)\n", (void *)&matrix, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen, (void *)rowrhs, (void *)rowrng); #endif } //----------------------------------------------------------------------------- // Assigns a problem void OsiMskSolverInterface::assignProblem( CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, char*& rowsen, double*& rowrhs, double*& rowrng ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::assignProblem()\n"); #endif loadProblem( *matrix, collb, colub, obj, rowsen, rowrhs, rowrng ); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowsen; rowsen = 0; delete[] rowrhs; rowrhs = 0; delete[] rowrng; rowrng = 0; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::assignProblem()\n"); #endif } //----------------------------------------------------------------------------- // Loads a problem void OsiMskSolverInterface::loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub ) { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::loadProblem() numcols : %d numrows : %d\n",numcols,numrows); #endif const double inf = getInfinity(); char * rowSense = new char [numrows]; double * rowRhs = new double[numrows]; double * rowRange = new double[numrows]; for ( int i = numrows - 1; i >= 0; --i ) { const double lower = rowlb ? rowlb[i] : -inf; const double upper = rowub ? rowub[i] : inf; convertBoundToSense( lower, upper, rowSense[i], rowRhs[i], rowRange[i] ); } loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowSense, rowRhs, rowRange); delete [] rowSense; delete [] rowRhs; delete [] rowRange; #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::loadProblem()\n"); #endif } //----------------------------------------------------------------------------- // Loads a problem void OsiMskSolverInterface::loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng ) { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::loadProblem(%d, %d, %p, %p, %p, %p, %p, %p, %p, %p, %p)\n", numcols, numrows, (void *)start, (void *)index, (void *)value, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen,(void *)rowrhs, (void *)rowrng); #endif const int nc = numcols; const int nr = numrows; if( nr == 0 && nc == 0 ) gutsOfDestructor(); else { MSKassert(3,rowsen != NULL,"rowsen != NULL","loadProblem"); MSKassert(3,rowrhs != NULL,"rowrhs != NULL","loadProblem"); int i,j; double * ob; int * rtag =NULL; double * rlb = NULL; double * rub = NULL; int * ctag =NULL; int * cends = NULL; double * clb = NULL; double * cub = NULL; if( obj != NULL ) ob=const_cast(obj); else { ob = new double[nc]; CoinFillN(ob, nc, 0.0); } if( nr ) { rtag = new int[nr]; rlb = new double[nr]; rub = new double[nr]; } for( i=0; i < nr; i++ ) MskConvertSenseToBound( rowsen[i], rowrng != NULL ? rowrng[i] : 0.0, rowrhs[i], rlb[i], rub[i], rtag[i]); double inf = getInfinity(); if( nc ) { ctag = new int[nc]; cends = new int[nc]; clb = new double[nc]; cub = new double[nc]; } if( collb == NULL && colub == NULL ) for(j=0; j < nc; j++) { cends[j] = start[j+1]; MskConvertColBoundToTag(0, inf, clb[j], cub[j], ctag[j]); } else if( collb == NULL ) for(j=0; j < nc; j++) { cends[j] = start[j+1]; MskConvertColBoundToTag( 0, colub[j], clb[j], cub[j], ctag[j]); } else if( colub == NULL ) for(j=0; j < nc; j++) { cends[j] = start[j+1]; MskConvertColBoundToTag(collb[j], inf, clb[j], cub[j], ctag[j]); } else for(j=0; j < nc; j++) { cends[j] = start[j+1]; MskConvertColBoundToTag( collb[j], colub[j], clb[j], cub[j], ctag[j]); } int err=MSK_inputdata(getLpPtr( OsiMskSolverInterface::KEEPCACHED_NONE ), nr, nc, nr, nc, ob, 0.0, const_cast(start), cends, const_cast(index), const_cast(value), (MSKboundkeye*)rtag, rlb, rub, (MSKboundkeye*)ctag, clb, cub); checkMSKerror( err, "MSK_inputdata", "loadProblem3" ); if( obj == NULL ) delete[] ob; if( nr ) { delete[] rtag; delete[] rlb; delete[] rub; } if( nc ) { delete[] ctag; delete[] cends; delete[] clb; delete[] cub; } resizeColType(nc); CoinFillN(coltype_, nc, 'C'); } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::loadProblem(%d, %d, %p, %p, %p, %p, %p, %p, %p, %p, %p)\n", numcols, numrows, (void *)start, (void *)index, (void *)value, (void *)collb, (void *)colub, (void *)obj, (void *)rowsen, (void *)rowrhs, (void *)rowrng); #endif } //----------------------------------------------------------------------------- // Reads a MPS file with Coin native MPS reader. If marked code is switch on // then MOSEK file reader is used, and .gz files can be read aswell. int OsiMskSolverInterface::readMps(const char * filename, const char * extension ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::readMps(%s, %s) %p\n", filename, extension,(void*)this); debugMessage("End OsiMskSolverInterface::readMps(%s, %s)\n", filename, extension); #endif return OsiSolverInterface::readMps(filename,extension); } //----------------------------------------------------------------------------- // Writes the problem in MPS format, uses MOSEK writer. void OsiMskSolverInterface::writeMps( const char * filename, const char * extension, double objSense ) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::writeMps(%s, %s, %g)\n", filename, extension, objSense); #endif std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; OsiSolverInterface::writeMpsNative(fullname.c_str(),NULL, NULL, 0, 2, objSense); #if 0 int err = MSK_writedata( getMutableLpPtr(), const_cast( fullname.c_str() )); checkMSKerror( err, "MSK_writedatafile", "writeMps" ); #endif #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::writeMps(%s, %s, %g)\n", filename, extension, objSense); #endif } void OsiMskSolverInterface::passInMessageHandler(CoinMessageHandler * handler) { OsiSolverInterface::passInMessageHandler(handler); MSK_linkfunctotaskstream(getMutableLpPtr(), MSK_STREAM_LOG, messageHandler(), OsiMskStreamFuncLog); MSK_linkfunctotaskstream(getMutableLpPtr(), MSK_STREAM_ERR, messageHandler(), OsiMskStreamFuncWarning); MSK_linkfunctotaskstream(getMutableLpPtr(), MSK_STREAM_WRN, messageHandler(), OsiMskStreamFuncError); } //############################################################################# // MSK specific public interfaces //############################################################################# //----------------------------------------------------------------------------- // Returns MOSEK task in the interface object MSKenv_t OsiMskSolverInterface::getEnvironmentPtr() { MSKassert(3,env_ != NULL,"probtypemip_","getEnvironmentPtr"); return env_; } //----------------------------------------------------------------------------- // Returns MOSEK task in the interface object MSKtask_t OsiMskSolverInterface::getLpPtr( int keepCached ) { freeCachedData( keepCached ); return getMutableLpPtr(); } //----------------------------------------------------------------------------- // Returns the coltype_ array const char * OsiMskSolverInterface::getCtype() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getCtype()\n"); debugMessage("End OsiMskSolverInterface::getCtype()\n"); #endif return coltype_; } //############################################################################# // Static instance counter methods //############################################################################# //----------------------------------------------------------------------------- // Increment the instance count, so we know when to close and open MOSEK. void OsiMskSolverInterface::incrementInstanceCounter() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::incrementInstanceCounter()\n"); #endif if ( numInstances_ == 0 ) { int err=0; #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("creating new Mosek environment\n"); #endif #if MSK_VERSION_MAJOR >= 7 err = MSK_makeenv(&env_,NULL); #else err = MSK_makeenv(&env_,NULL,NULL,NULL,NULL); #endif checkMSKerror( err, "MSK_makeenv", "incrementInstanceCounter" ); err = MSK_linkfunctoenvstream(env_, MSK_STREAM_LOG, NULL, printlog); checkMSKerror( err, "MSK_linkfunctoenvstream", "incrementInstanceCounter" ); #if MSK_VERSION_MAJOR < 8 err = MSK_initenv(env_); checkMSKerror( err, "MSK_initenv", "incrementInstanceCounter" ); #endif } numInstances_++; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::incrementInstanceCounter()\n"); #endif } //----------------------------------------------------------------------------- // Decrement the instance count, so we know when to close and open MOSEK. void OsiMskSolverInterface::decrementInstanceCounter() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::decrementInstanceCounter()\n"); #endif MSKassert(3,numInstances_ != 0,"numInstances_ != 0","decrementInstanceCounter"); numInstances_--; if ( numInstances_ == 0 ) { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("deleting Mosek environment\n"); #endif int err = MSK_deleteenv(&env_); checkMSKerror( err, "MSK_deleteenv", "decrementInstanceCounter" ); env_ = NULL; } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::decrementInstanceCounter()\n"); #endif } //----------------------------------------------------------------------------- // Returns the number of OsiMskSolverInterface objects in play unsigned int OsiMskSolverInterface::getNumInstances() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getNumInstances()\n"); debugMessage("End OsiMskSolverInterface::getNumInstances()\n"); #endif return numInstances_; } //############################################################################# // Constructors, destructors clone and assignment //############################################################################# //----------------------------------------------------------------------------- // Constructor OsiMskSolverInterface::OsiMskSolverInterface(MSKenv_t mskenv) : OsiSolverInterface(), Mskerr(MSK_RES_OK), ObjOffset_(0.0), InitialSolver(INITIAL_SOLVE), task_(NULL), hotStartCStat_(NULL), hotStartCStatSize_(0), hotStartRStat_(NULL), hotStartRStatSize_(0), hotStartMaxIteration_(1000000), obj_(NULL), collower_(NULL), colupper_(NULL), rowsense_(NULL), rhs_(NULL), rowrange_(NULL), rowlower_(NULL), rowupper_(NULL), colsol_(NULL), rowsol_(NULL), redcost_(NULL), rowact_(NULL), matrixByRow_(NULL), matrixByCol_(NULL), coltype_(NULL), coltypesize_(0), probtypemip_(false) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::OsiMskSolverinterface()\n"); #endif if (mskenv) { if (env_) { throw CoinError("Already have a global Mosek environment. Cannot use second one.", "OsiMskSolverInterface", "OsiMskSolverInterface"); } env_ = mskenv; ++numInstances_; } else incrementInstanceCounter(); gutsOfConstructor(); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::OsiMskSolverinterface()\n"); #endif } //----------------------------------------------------------------------------- // Clone from one to another object OsiSolverInterface * OsiMskSolverInterface::clone(bool copyData) const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::clone(%d)\n", copyData); debugMessage("End OsiMskSolverInterface::clone(%d)\n", copyData); #endif return( new OsiMskSolverInterface( *this ) ); } //----------------------------------------------------------------------------- // Copy constructor OsiMskSolverInterface::OsiMskSolverInterface( const OsiMskSolverInterface & source ) : OsiSolverInterface(source), Mskerr(MSK_RES_OK), MSKsolverused_(INITIAL_SOLVE), ObjOffset_(source.ObjOffset_), InitialSolver(INITIAL_SOLVE), task_(NULL), hotStartCStat_(NULL), hotStartCStatSize_(0), hotStartRStat_(NULL), hotStartRStatSize_(0), hotStartMaxIteration_(source.hotStartMaxIteration_), obj_(NULL), collower_(NULL), colupper_(NULL), rowsense_(NULL), rhs_(NULL), rowrange_(NULL), rowlower_(NULL), rowupper_(NULL), colsol_(NULL), rowsol_(NULL), redcost_(NULL), rowact_(NULL), matrixByRow_(NULL), matrixByCol_(NULL), coltype_(NULL), coltypesize_(0), probtypemip_(false) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::OsiMskSolverInterface from (%p) to %p\n", (void *)&source,(void*)this); #endif incrementInstanceCounter(); gutsOfConstructor(); gutsOfCopy( source ); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::OsiMskSolverInterface(%p)\n", (void *)&source); #endif } //----------------------------------------------------------------------------- // Destructor OsiMskSolverInterface::~OsiMskSolverInterface() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::~OsiMskSolverInterface()\n"); #endif gutsOfDestructor(); decrementInstanceCounter(); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::~OsiMskSolverInterface()\n"); #endif } //----------------------------------------------------------------------------- // Assign operator OsiMskSolverInterface& OsiMskSolverInterface::operator=( const OsiMskSolverInterface& rhs ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::operator=(%p)\n", (void *)&rhs); #endif if (this != &rhs) { OsiSolverInterface::operator=( rhs ); gutsOfDestructor(); gutsOfConstructor(); if ( rhs.task_ !=NULL ) gutsOfCopy( rhs ); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::operator=(%p)\n", (void *)&rhs); #endif return *this; } //############################################################################# // Applying cuts //############################################################################# //----------------------------------------------------------------------------- // Apply col cut void OsiMskSolverInterface::applyColCut( const OsiColCut & cc ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::applyColCut(%p)\n", (void *)&cc); #endif double * MskColLB = new double[getNumCols()]; double * MskColUB = new double[getNumCols()]; const CoinPackedVector & lbs = cc.lbs(); const CoinPackedVector & ubs = cc.ubs(); int i; for( i = 0; i < getNumCols(); ++i ) { MskColLB[i] = getColLower()[i]; MskColUB[i] = getColUpper()[i]; } for( i = 0; i < lbs.getNumElements(); ++i ) if ( lbs.getElements()[i] > MskColLB[lbs.getIndices()[i]] ) setColLower( lbs.getIndices()[i], lbs.getElements()[i] ); for( i = 0; i < ubs.getNumElements(); ++i ) if ( ubs.getElements()[i] < MskColUB[ubs.getIndices()[i]] ) setColUpper( ubs.getIndices()[i], ubs.getElements()[i] ); delete[] MskColLB; delete[] MskColUB; #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::applyColCut(%p)\n", (void *)&cc); #endif } //----------------------------------------------------------------------------- // Apply row cut void OsiMskSolverInterface::applyRowCut( const OsiRowCut & rowCut ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::applyRowCut(%p)\n", (void *)&rowCut); #endif const CoinPackedVector & row=rowCut.row(); addRow(row , rowCut.lb(),rowCut.ub()); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::applyRowCut(%p)\n", (void *)&rowCut); #endif } //############################################################################# // Private methods (non-static and static) and static data //############################################################################# unsigned int OsiMskSolverInterface::numInstances_ = 0; MSKenv_t OsiMskSolverInterface::env_=NULL; //----------------------------------------------------------------------------- // Returns MOSEK task in object MSKtask_t OsiMskSolverInterface::getMutableLpPtr() const { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::getMutableLpPtr()\n"); #endif if ( task_ == NULL ) { MSKassert(3,env_ != NULL,"env_ == NULL","getMutableLpPtr"); int err = MSK_makeemptytask(env_,&task_); checkMSKerror(err, "MSK_makeemptytask","getMutableLpPtr"); err = MSK_linkfunctotaskstream(task_, MSK_STREAM_LOG, messageHandler(), OsiMskStreamFuncLog); checkMSKerror( err, "MSK_linkfunctotaskstream", "getMutableLpPtr" ); err = MSK_linkfunctotaskstream(task_, MSK_STREAM_WRN, messageHandler(), OsiMskStreamFuncWarning); checkMSKerror( err, "MSK_linkfunctotaskstream", "getMutableLpPtr" ); err = MSK_linkfunctotaskstream(task_, MSK_STREAM_ERR, messageHandler(), OsiMskStreamFuncError); checkMSKerror( err, "MSK_linkfunctotaskstream", "getMutableLpPtr" ); err = MSK_putintparam(task_, MSK_IPAR_WRITE_GENERIC_NAMES, MSK_ON); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); err = MSK_putintparam(task_, MSK_IPAR_PRESOLVE_USE, MSK_ON); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); #if MSK_VERSION_MAJOR < 9 err = MSK_putintparam(task_, MSK_IPAR_WRITE_DATA_FORMAT, MSK_DATA_FORMAT_MPS); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); #endif err = MSK_putintparam(task_, MSK_IPAR_WRITE_GENERIC_NAMES, MSK_ON); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); #if MSK_DO_MOSEK_LOG > 0 char file[] = "MOSEK.log"; err = MSK_linkfiletotaskstream(task_, MSK_STREAM_LOG, file, 0); checkMSKerror( err, "MSK_linkfiletotaskstream", "getMutableLpPtr" ); err = MSK_putintparam(task_, MSK_IPAR_LOG, 100); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); err = MSK_putintparam(task_, MSK_IPAR_LOG_SIM, 100); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); err = MSK_putintparam(task_, MSK_IPAR_LOG_INTPNT, 100); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); #else err = MSK_putintparam(task_, MSK_IPAR_LOG, 100); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); #endif err = MSK_putintparam(task_,MSK_IPAR_SIM_SOLVE_FORM,MSK_SOLVE_PRIMAL); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); err = MSK_putintparam(task_,MSK_IPAR_SIM_HOTSTART,MSK_SIM_HOTSTART_STATUS_KEYS); checkMSKerror(err,"MSK_putintparam","getMutableLpPtr()"); std::string pn; getStrParam(OsiProbName,pn); MSK_puttaskname( task_, const_cast(pn.c_str()) ); checkMSKerror(err,"MSK_puttaskname","getMutableLpPtr()"); } #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::getMutableLpPtr()\n"); #endif return task_; } //----------------------------------------------------------------------------- // Makes a copy void OsiMskSolverInterface::gutsOfCopy( const OsiMskSolverInterface & source ) { #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("Begin OsiMskSolverInterface::gutsOfCopy()\n"); #endif int err; InitialSolver = source.InitialSolver; MSKassert(3, task_ == NULL, "task_ == NULL", "gutsOfCopy"); err = MSK_clonetask(source.getMutableLpPtr(),&task_); checkMSKerror( err, "MSK_clonetask", "gutsOfCopy" ); // Set MIP information resizeColType(source.coltypesize_); CoinDisjointCopyN( source.coltype_, source.coltypesize_, coltype_ ); // Updates task MIP information for( int k = 0; k < source.coltypesize_; ++k ) { switch(coltype_[k]) { case 'I': setInteger(k); break; case 'C': setContinuous(k); break; } } #if MSK_OSI_DEBUG_LEVEL > 1 debugMessage("End OsiMskSolverInterface::gutsOfCopy()\n"); #endif } //----------------------------------------------------------------------------- // Empty function void OsiMskSolverInterface::gutsOfConstructor() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::gutsOfConstructor()\n"); #endif #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::gutsOfConstructor()\n"); #endif } //----------------------------------------------------------------------------- // Function called from destructor void OsiMskSolverInterface::gutsOfDestructor() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::gutsOfDestructor()\n"); #endif freeCachedData(KEEPCACHED_NONE); if ( task_ != NULL ) { MSK_unlinkfuncfromtaskstream(getMutableLpPtr(), MSK_STREAM_LOG); MSK_unlinkfuncfromtaskstream(getMutableLpPtr(), MSK_STREAM_ERR); MSK_unlinkfuncfromtaskstream(getMutableLpPtr(), MSK_STREAM_WRN); int err = MSK_deletetask(&task_); checkMSKerror( err, "MSK_deletetask", "gutsOfDestructor" ); task_ = NULL; freeAllMemory(); } MSKassert(3,task_==NULL,"task_==NULL","gutsOfDestructor"); MSKassert(3,obj_==NULL,"obj_==NULL","gutsOfDestructor"); MSKassert(3,collower_==NULL,"collower_==NULL","gutsOfDestructor"); MSKassert(3,colupper_==NULL,"colupper_==NULL","gutsOfDestructor"); MSKassert(3,rowsense_==NULL,"rowsense_==NULL","gutsOfDestructor"); MSKassert(3,rhs_==NULL,"rhs_==NULL","gutsOfDestructor"); MSKassert(3,rowrange_==NULL,"rowrange_==NULL","gutsOfDestructor"); MSKassert(3,rowlower_==NULL,"rowlower_==NULL","gutsOfDestructor"); MSKassert(3,rowupper_==NULL,"rowupper_==NULL","gutsOfDestructor"); MSKassert(3,colsol_==NULL,"colsol_==NULL","gutsOfDestructor"); MSKassert(3,rowsol_==NULL,"rowsol_==NULL","gutsOfDestructor"); MSKassert(3,redcost_==NULL,"redcost_==NULL","gutsOfDestructor"); MSKassert(3,rowact_==NULL,"rowact_==NULL","gutsOfDestructor"); MSKassert(3,matrixByRow_==NULL,"probtypemip_","gutsOfDestructor"); MSKassert(3,matrixByCol_==NULL,"matrixByCol_==NULL","gutsOfDestructor"); MSKassert(3,coltype_==NULL,"coltype_==NULL","gutsOfDestructor"); MSKassert(3,coltypesize_==0,"coltypesize_==0","gutsOfDestructor"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::gutsOfDestructor()\n"); #endif } //----------------------------------------------------------------------------- // Free function void OsiMskSolverInterface::freeCachedColRim() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::freeCachedColRim()\n"); #endif freeCacheDouble( obj_ ); freeCacheDouble( collower_ ); freeCacheDouble( colupper_ ); MSKassert(3,obj_==NULL,"obj_==NULL","freeCachedColRim"); MSKassert(3,collower_==NULL,"collower_==NULL","freeCachedColRim"); MSKassert(3,colupper_==NULL,"colupper_==NULL","freeCachedColRim"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::freeCachedColRim()\n"); #endif } //----------------------------------------------------------------------------- // Free function void OsiMskSolverInterface::freeCachedRowRim() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::freeCachedRowRim()\n"); #endif freeCacheChar( rowsense_ ); freeCacheDouble( rhs_ ); freeCacheDouble( rowrange_ ); freeCacheDouble( rowlower_ ); freeCacheDouble( rowupper_ ); MSKassert(3,rowsense_==NULL,"rowsense_==NULL","freeCachedRowRim"); MSKassert(3,rhs_==NULL,"rhs_==NULL","freeCachedRowRim"); MSKassert(3,rowrange_==NULL,"rowrange_==NULL","freeCachedRowRim"); MSKassert(3,rowlower_==NULL,"rowlower_==NULL","freeCachedRowRim"); MSKassert(3,rowupper_==NULL,"rowupper_==NULL","freeCachedRowRim"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::freeCachedRowRim()\n"); #endif } //----------------------------------------------------------------------------- // Free function void OsiMskSolverInterface::freeCachedMatrix() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::freeCachedMatrix()\n"); #endif freeCacheMatrix( matrixByRow_ ); freeCacheMatrix( matrixByCol_ ); MSKassert(3,matrixByRow_==NULL,"matrixByRow_==NULL","freeCachedMatrix"); MSKassert(3,matrixByCol_==NULL,"matrixByCol_==NULL","freeCachedMatrix"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::freeCachedMatrix()\n"); #endif } //----------------------------------------------------------------------------- // Free function void OsiMskSolverInterface::freeCachedResults() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::freeCachedResults()\n"); #endif freeCacheDouble( colsol_ ); freeCacheDouble( rowsol_ ); freeCacheDouble( redcost_ ); freeCacheDouble( rowact_ ); MSKassert(3,colsol_==NULL,"colsol_==NULL","freeCachedResults"); MSKassert(3,rowsol_==NULL,"rowsol_==NULL","freeCachedResults"); MSKassert(3,redcost_==NULL,"redcost_==NULL","freeCachedResults"); MSKassert(3,rowact_==NULL,"rowact_==NULL","freeCachedResults"); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::freeCachedResults()\n"); #endif } //----------------------------------------------------------------------------- // Free function void OsiMskSolverInterface::freeCachedData( int keepCached ) { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::freeCachedResults()\n"); #endif if( !(keepCached & OsiMskSolverInterface::KEEPCACHED_COLUMN) ) freeCachedColRim(); if( !(keepCached & OsiMskSolverInterface::KEEPCACHED_ROW) ) freeCachedRowRim(); if( !(keepCached & OsiMskSolverInterface::KEEPCACHED_MATRIX) ) freeCachedMatrix(); if( !(keepCached & OsiMskSolverInterface::KEEPCACHED_RESULTS) ) freeCachedResults(); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::freeCachedResults()\n"); #endif } //----------------------------------------------------------------------------- // Free function void OsiMskSolverInterface::freeAllMemory() { #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("Begin OsiMskSolverInterface::freeCachedResults()\n"); #endif freeCachedData(); if( hotStartCStat_ != NULL ) delete[] hotStartCStat_; if( hotStartRStat_ != NULL ) delete[] hotStartRStat_; hotStartCStat_ = NULL; hotStartCStatSize_ = 0; hotStartRStat_ = NULL; hotStartRStatSize_ = 0; freeColType(); #if MSK_OSI_DEBUG_LEVEL > 3 debugMessage("End OsiMskSolverInterface::freeCachedResults()\n"); #endif } DyLP-1.10.4/Osi/src/OsiMsk/OsiMskSolverInterface.hpp0000644000175200017520000007530412055732267020555 0ustar coincoin// Osi interface for Mosek ver. 5.0 // Lower versions are not supported //----------------------------------------------------------------------------- // name: OSI Interface for MOSEK // author: Bo Jensen // email: support@MOSEK.com //----------------------------------------------------------------------------- // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiMskSolverInterface_H #define OsiMskSolverInterface_H #include "OsiSolverInterface.hpp" typedef void* MSKtask_t; typedef void* MSKenv_t; /* MOSEK Solver Interface Instantiation of OsiMskSolverInterface for MOSEK */ class OsiMskSolverInterface : virtual public OsiSolverInterface { friend void OsiMskSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir); public: //--------------------------------------------------------------------------- /**@name Solve methods */ //@{ /// Solve initial LP relaxation virtual void initialSolve(); /// Resolve an LP relaxation after problem modification virtual void resolve(); /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound(); //@} //--------------------------------------------------------------------------- /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. */ //@{ // Set an integer parameter bool setIntParam(OsiIntParam key, int value); // Set an double parameter bool setDblParam(OsiDblParam key, double value); // Set a string parameter bool setStrParam(OsiStrParam key, const std::string & value); // Get an integer parameter bool getIntParam(OsiIntParam key, int& value) const; // Get an double parameter bool getDblParam(OsiDblParam key, double& value) const; // Get a string parameter bool getStrParam(OsiStrParam key, std::string& value) const; //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there a numerical difficulties? virtual bool isAbandoned() const; /// Is optimality proven? virtual bool isProvenOptimal() const; /// Is primal infeasiblity proven? virtual bool isProvenPrimalInfeasible() const; /// Is dual infeasiblity proven? virtual bool isProvenDualInfeasible() const; /// Is the given primal objective limit reached? virtual bool isPrimalObjectiveLimitReached() const; /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const; /// Has there been a license problem? virtual bool isLicenseError() const; /// Get rescode return of last Mosek optimizer call int getRescode() const { return Mskerr; } //@} //--------------------------------------------------------------------------- /**@name WarmStart related methods */ /*! \brief Get an empty warm start object This routine returns an empty CoinWarmStartBasis object. Its purpose is to provide a way to give a client a warm start basis object of the appropriate type, which can resized and modified as desired. */ CoinWarmStart* getEmptyWarmStart () const; //@{ /// Get warmstarting information virtual CoinWarmStart* getWarmStart() const; /** Set warmstarting information. Return true/false depending on whether the warmstart information was accepted or not. */ virtual bool setWarmStart(const CoinWarmStart* warmstart); //@} //--------------------------------------------------------------------------- /**@name Hotstart related methods (primarily used in strong branching).
The user can create a hotstart (a snapshot) of the optimization process then reoptimize over and over again always starting from there.
NOTE: between hotstarted optimizations only bound changes are allowed. */ //@{ /// Create a hotstart point of the optimization process virtual void markHotStart(); /// Optimize starting from the hotstart virtual void solveFromHotStart(); /// Delete the snapshot virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem information methods These methods call the solver's query routines to return information about the problem referred to by the current object. Querying a problem that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /**@name Methods related to querying the input data */ //@{ /// Get number of columns virtual int getNumCols() const; /// Get number of rows virtual int getNumRows() const; /// Get number of nonzero elements virtual int getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds virtual const double * getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds virtual const double * getColUpper() const; /** Get pointer to array[getNumRows()] of row constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ virtual const char * getRowSense() const; /** Get pointer to array[getNumRows()] of rows right-hand sides
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ virtual const double * getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges.
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
*/ virtual const double * getRowRange() const; /// Get pointer to array[getNumRows()] of row lower bounds virtual const double * getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds virtual const double * getRowUpper() const; /// Get pointer to array[getNumCols()] of objective function coefficients virtual const double * getObjCoefficients() const; /// Get objective function sense (1 for min (default), -1 for max) virtual double getObjSense() const; /// Return true if column is continuous virtual bool isContinuous(int colNumber) const; #if 0 /// Return true if column is binary virtual bool isBinary(int columnNumber) const; /** Return true if column is integer. Note: This function returns true if the the column is binary or a general integer. */ virtual bool isInteger(int columnNumber) const; /// Return true if column is general integer virtual bool isIntegerNonBinary(int columnNumber) const; /// Return true if column is binary and not fixed at either bound virtual bool isFreeBinary(int columnNumber) const; #endif /// Get pointer to row-wise copy of matrix virtual const CoinPackedMatrix * getMatrixByRow() const; /// Get pointer to column-wise copy of matrix virtual const CoinPackedMatrix * getMatrixByCol() const; /// Get solver's value for infinity virtual double getInfinity() const; //@} /**@name Methods related to querying the solution */ //@{ /// Get pointer to array[getNumCols()] of primal solution vector virtual const double * getColSolution() const; /// Get pointer to array[getNumRows()] of dual prices virtual const double * getRowPrice() const; /// Get a pointer to array[getNumCols()] of reduced costs virtual const double * getReducedCost() const; /** Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector */ virtual const double * getRowActivity() const; /// Get objective function value virtual double getObjValue() const; /** Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver. */ virtual int getIterationCount() const; /** Get as many dual rays as the solver can provide. (In case of proven primal infeasibility there should be at least one.) The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumRows() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector getDualRays(int maxNumRays, bool fullRay=false) const; /** Get as many primal rays as the solver can provide. (In case of proven dual infeasibility there should be at least one.) NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumCols() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector getPrimalRays(int maxNumRays) const; #if 0 /** Get vector of indices of solution which are integer variables presently at fractional values */ virtual OsiVectorInt getFractionalIndices(const double etol=1.e-05) const; #endif //@} //@} //--------------------------------------------------------------------------- /**@name Problem modifying methods */ //@{ //------------------------------------------------------------------------- /**@name Changing bounds on variables and constraints */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff( int elementIndex, double elementValue ); /** Set a a set of objective function coefficients */ virtual void setObjCoeffSet(const int* indexFirst, const int* indexLast, const double* coeffList); /** Set a single column lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setColLower( int elementIndex, double elementValue ); /** Set a single column upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setColUpper( int elementIndex, double elementValue ); /** Set a single column lower and upper bound
The default implementation just invokes setColLower() and setColUpper() */ virtual void setColBounds( int elementIndex, double lower, double upper ); /** Set the bounds on a number of columns simultaneously
The default implementation just invokes setCollower() and setColupper() over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the variables */ virtual void setColSetBounds(const int* indexFirst, const int* indexLast, const double* boundList); /** Set a single row lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setRowLower( int elementIndex, double elementValue ); /** Set a single row upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setRowUpper( int elementIndex, double elementValue ); /** Set a single row lower and upper bound
The default implementation just invokes setRowLower() and setRowUpper() */ virtual void setRowBounds( int elementIndex, double lower, double upper ); /** Set the type of a single row
*/ virtual void setRowType(int index, char sense, double rightHandSide, double range); /** Set the bounds on a number of rows simultaneously
The default implementation just invokes setRowLower() and setRowUpper() over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the constraints */ virtual void setRowSetBounds(const int* indexFirst, const int* indexLast, const double* boundList); /** Set the type of a number of rows simultaneously
The default implementation just invokes setRowType() and over and over again. @param [indexfirst,indexLast] contains the indices of the constraints whose type changes @param senseList the new senses @param rhsList the new right hand sides @param rangeList the new ranges */ virtual void setRowSetTypes(const int* indexFirst, const int* indexLast, const char* senseList, const double* rhsList, const double* rangeList); //@} //------------------------------------------------------------------------- /**@name Integrality related changing methods */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index); /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index); /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int* indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int* indices, int len); //@} //------------------------------------------------------------------------- /// Set objective function sense (1 for min (default), -1 for max,) virtual void setObjSense(double s); /** Set the primal solution column values colsol[numcols()] is an array of values of the problem column variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of colsol() until changed by another call to setColsol() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double * colsol); /** Set dual solution vector rowprice[numrows()] is an array of values of the problem row dual variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of rowprice() until changed by another call to setRowprice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double * rowprice); //------------------------------------------------------------------------- /**@name Methods to expand a problem.
Note that if a column is added then by default it will correspond to a continuous variable. */ //@{ /** */ virtual void addCol(const CoinPackedVectorBase& vec, const double collb, const double colub, const double obj); /** */ virtual void addCols(const int numcols, const CoinPackedVectorBase * const * cols, const double* collb, const double* colub, const double* obj); /** */ virtual void deleteCols(const int num, const int * colIndices); /** */ virtual void addRow(const CoinPackedVectorBase& vec, const double rowlb, const double rowub); /** */ virtual void addRow(const CoinPackedVectorBase& vec, const char rowsen, const double rowrhs, const double rowrng); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase * const * rows, const double* rowlb, const double* rowub); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase * const * rows, const char* rowsen, const double* rowrhs, const double* rowrng); /** */ virtual void deleteRows(const int num, const int * rowIndices); #if 0 // ??? implemented in OsiSolverInterface //----------------------------------------------------------------------- /** Apply a collection of cuts.
Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.numberIneffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.numberInconsistent() -- number of invalid cuts
  • ReturnCode.numberInconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.numberInfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.numberApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == numberIneffective() + numberInconsistent() + numberInconsistentWrtIntegerModel() + numberInfeasible() + nubmerApplied()
*/ virtual ApplyCutsReturnCode applyCuts(const OsiCuts & cs, double effectivenessLb = 0.0); #endif //@} //@} //--------------------------------------------------------------------------- /**@name Methods to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ virtual void loadProblem(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by lower and upper bounds). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, double*& rowlb, double*& rowub); /** Load in an problem by copying the arguments (the constraints on the rows are given by sense/rhs/range triplets). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
*/ virtual void loadProblem(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by sense/rhs/range triplets). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, char*& rowsen, double*& rowrhs, double*& rowrng); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng); /** Read an mps file from the given filename */ virtual int readMps(const char *filename, const char *extension = "mps"); /** Write the problem into an mps file of the given filename. If objSense is non zero then -1.0 forces the code to write a maximization objective and +1.0 to write a minimization one. If 0.0 then solver can do what it wants */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense=0.0) const; //@} /**@name Message handling */ //@{ /** Pass in a message handler It is the client's responsibility to destroy a message handler installed by this routine; it will not be destroyed when the solver interface is destroyed. */ void passInMessageHandler(CoinMessageHandler * handler); //@} //--------------------------------------------------------------------------- /**@name MOSEK specific public interfaces */ //@{ /** Get pointer to MOSEK model and free all specified cached data entries (combined with logical or-operator '|' ): */ enum keepCachedFlag { /// discard all cached data (default) KEEPCACHED_NONE = 0, /// column information: objective values, lower and upper bounds, variable types KEEPCACHED_COLUMN = 1, /// row information: right hand sides, ranges and senses, lower and upper bounds for row KEEPCACHED_ROW = 2, /// problem matrix: matrix ordered by column and by row KEEPCACHED_MATRIX = 4, /// LP solution: primal and dual solution, reduced costs, row activities KEEPCACHED_RESULTS = 8, /// only discard cached LP solution KEEPCACHED_PROBLEM = KEEPCACHED_COLUMN | KEEPCACHED_ROW | KEEPCACHED_MATRIX, /// keep all cached data (similar to getMutableLpPtr()) KEEPCACHED_ALL = KEEPCACHED_PROBLEM | KEEPCACHED_RESULTS, /// free only cached column and LP solution information FREECACHED_COLUMN = KEEPCACHED_PROBLEM & ~KEEPCACHED_COLUMN, /// free only cached row and LP solution information FREECACHED_ROW = KEEPCACHED_PROBLEM & ~KEEPCACHED_ROW, /// free only cached matrix and LP solution information FREECACHED_MATRIX = KEEPCACHED_PROBLEM & ~KEEPCACHED_MATRIX, /// free only cached LP solution information FREECACHED_RESULTS = KEEPCACHED_ALL & ~KEEPCACHED_RESULTS }; MSKtask_t getLpPtr( int keepCached = KEEPCACHED_NONE ); //@{ /// Method to access MOSEK environment pointer MSKenv_t getEnvironmentPtr(); //@} /// return a vector of variable types (continous, binary, integer) const char* getCtype() const; /**@name Static instance counter methods */ /** MOSEK has a context which must be created prior to all other MOSEK calls. This method:
  • Increments by 1 the number of uses of the MOSEK environment.
  • Creates the MOSEK context when the number of uses is change to 1 from 0.
*/ static void incrementInstanceCounter(); /** MOSEK has a context which should be deleted after MOSEK calls. This method:
  • Decrements by 1 the number of uses of the MOSEK environment.
  • Deletes the MOSEK context when the number of uses is change to 0 from 1.
*/ static void decrementInstanceCounter(); /// Return the number of instances of instantiated objects using MOSEK services. static unsigned int getNumInstances(); //@} //@} /**@name Constructors and destructor */ //@{ /// Default Constructor /// optional argument mskenv can be used to reach in an initialized user environment /// OsiMsk assumes membership of mskenv, so it will be freed when the last instanciation of OsiMsk is deleted OsiMskSolverInterface(MSKenv_t mskenv = NULL); /// Clone virtual OsiSolverInterface * clone(bool copyData = true) const; /// Copy constructor OsiMskSolverInterface( const OsiMskSolverInterface& ); /// Assignment operator OsiMskSolverInterface& operator=( const OsiMskSolverInterface& rhs ); /// Destructor virtual ~OsiMskSolverInterface(); //@} protected: /**@name Protected methods */ //@{ /// Apply a row cut. Return true if cut was applied. virtual void applyRowCut( const OsiRowCut & rc ); /** Apply a column cut (bound adjustment). Return true if cut was applied. */ virtual void applyColCut( const OsiColCut & cc ); //@} private: /**@name Private static class functions */ //@{ /// switches MOSEK to prob type LP void switchToLP(); /// switches MOSEK to prob type MIP void switchToMIP(); /// resizes coltype_ vector to be able to store at least minsize elements void resizeColType( int minsize ); /// frees colsize_ vector void freeColType(); bool definedSolution(int solution) const; int solverUsed() const; //@} /**@name Private static class data */ //@{ /// MOSEK environment pointer static MSKenv_t env_ ; /// Number of live problem instances //static unsigned int numInstances_; //@} static unsigned int numInstances_; /**@name Private methods */ //@{ int Mskerr; int MSKsolverused_; double ObjOffset_; int InitialSolver; /// Get task Pointer for const methods public: MSKtask_t getMutableLpPtr() const; /// The real work of a copy constructor (used by copy and assignment) void gutsOfCopy( const OsiMskSolverInterface & source ); /// The real work of the constructor void gutsOfConstructor(); /// The real work of the destructor void gutsOfDestructor(); /// free cached column rim vectors void freeCachedColRim(); /// free cached row rim vectors void freeCachedRowRim(); /// free cached result vectors void freeCachedResults(); /// free cached matrices void freeCachedMatrix(); /// free all cached data (except specified entries, see getLpPtr()) void freeCachedData( int keepCached = KEEPCACHED_NONE ); /// free all allocated memory void freeAllMemory(); /**@name Private member data */ //@{ /// MOSEK model represented by this class instance mutable MSKtask_t task_; /// Hotstart information int *hotStartCStat_; int hotStartCStatSize_; int *hotStartRStat_; int hotStartRStatSize_; int hotStartMaxIteration_; /**@name Cached information derived from the MOSEK model */ //@{ /// Pointer to objective vector mutable double *obj_; /// Pointer to dense vector of variable lower bounds mutable double *collower_; /// Pointer to dense vector of variable lower bounds mutable double *colupper_; /// Pointer to dense vector of row sense indicators mutable char *rowsense_; /// Pointer to dense vector of row right-hand side values mutable double *rhs_; /// Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows) mutable double *rowrange_; /// Pointer to dense vector of row lower bounds mutable double *rowlower_; /// Pointer to dense vector of row upper bounds mutable double *rowupper_; /// Pointer to primal solution vector mutable double *colsol_; /// Pointer to dual solution vector mutable double *rowsol_; /// Pointer to reduced cost vector mutable double *redcost_; /// Pointer to row activity (slack) vector mutable double *rowact_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByRow_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByCol_; //@} /**@name Additional information needed for storing MIP problems */ //@{ /// Pointer to dense vector of variable types (continous, binary, integer) char *coltype_; /// Size of allocated memory for coltype_ int coltypesize_; /// Stores whether MOSEK' prob type is currently set to MIP mutable bool probtypemip_; //@} }; //############################################################################# /** A function that tests the methods in the OsiMskSolverInterface class */ void OsiMskSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir); #endif DyLP-1.10.4/Osi/src/OsiMsk/Makefile.am0000644000175200017520000000334513200225426015636 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 2111 2017-11-07 03:40:06Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiMsk # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiMsk.la # List all source files for this library, including headers libOsiMsk_la_SOURCES = \ OsiMskSolverInterface.cpp OsiMskSolverInterface.hpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiMsk_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la $(MSKLIB) endif # This is for libtool (on Windows) libOsiMsk_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../Osi` \ -I`$(CYGPATH_W) $(MSKINCDIR)` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiMskSolverInterface.hpp DyLP-1.10.4/Osi/src/OsiMsk/osi-mosek-uninstalled.pc.in0000644000175200017520000000043611507670402020765 0ustar coincoinprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiMsk Name: OsiMosek Description: COIN-OR Open Solver Interface for Mosek URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiMsk.la @MSKLIB@ Cflags: -I@abs_source_dir@/src/OsiMsk -I@MSKINCDIR@ Requires: osi DyLP-1.10.4/Osi/src/OsiMsk/osi-mosek.pc.in0000644000175200017520000000046511510106235016437 0ustar coincoinprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiMosek Description: COIN-OR Open Solver Interface for Mosek URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiMsk @MSKLIB@ Cflags: -I${includedir} -I@MSKINCDIR@ Requires: osi DyLP-1.10.4/Osi/src/OsiSpx/0000755000175200017520000000000013434203623013621 5ustar coincoinDyLP-1.10.4/Osi/src/OsiSpx/Makefile.in0000644000175200017520000005514113200225426015670 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = src/OsiSpx DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiSpx_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) \ @DEPENDENCY_LINKING_TRUE@ ../Osi/libOsi.la am_libOsiSpx_la_OBJECTS = OsiSpxSolverInterface.lo libOsiSpx_la_OBJECTS = $(am_libOsiSpx_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiSpx_la_SOURCES) DIST_SOURCES = $(libOsiSpx_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiSpx # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiSpx.la # List all source files for this library, including headers libOsiSpx_la_SOURCES = OsiSpxSolverInterface.cpp OsiSpxSolverInterface.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiSpx_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la # This is for libtool libOsiSpx_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../Osi` $(COINUTILS_CFLAGS) $(SOPLEX_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiSpxSolverInterface.hpp 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiSpx/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiSpx/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 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiSpx.la: $(libOsiSpx_la_OBJECTS) $(libOsiSpx_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiSpx_la_LDFLAGS) $(libOsiSpx_la_OBJECTS) $(libOsiSpx_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiSpxSolverInterface.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: 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: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags 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-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ 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 uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # 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: DyLP-1.10.4/Osi/src/OsiSpx/OsiSpxSolverInterface.cpp0000644000175200017520000014342113414504352020574 0ustar coincoin//----------------------------------------------------------------------------- // name: OSI Interface for SoPlex >= 1.4.2c // authors: Tobias Pfender // Ambros Gleixner // Wei Huang // Konrad-Zuse-Zentrum Berlin (Germany) // date: 01/16/2002 // license: this file may be freely distributed under the terms of EPL //----------------------------------------------------------------------------- // Copyright (C) 2002, Tobias Pfender, International Business Machines // Corporation and others. All Rights Reserved. // Last edit: $Id: OsiSpxSolverInterface.cpp 2200 2019-01-06 23:02:02Z unxusr $ #include "CoinPragma.hpp" #include #include #include #include #include #include "CoinError.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" #ifndef SOPLEX_LEGACY #define SOPLEX_LEGACY #endif #include "soplex.h" // it's important to include this header after soplex.h #include "OsiSpxSolverInterface.hpp" //############################################################################# // A couple of helper functions //############################################################################# inline void freeCacheDouble(double *&ptr) { if (ptr != NULL) { delete[] ptr; ptr = NULL; } } inline void freeCacheChar(char *&ptr) { if (ptr != NULL) { delete[] ptr; ptr = NULL; } } inline void freeCacheMatrix(CoinPackedMatrix *&ptr) { if (ptr != NULL) { delete ptr; ptr = NULL; } } inline void throwSPXerror(std::string error, std::string osimethod) { std::cout << "ERROR: " << error << " (" << osimethod << " in OsiSpxSolverInterface)" << std::endl; throw CoinError(error.c_str(), osimethod.c_str(), "OsiSpxSolverInterface"); } //############################################################################# // Solve methods //############################################################################# void OsiSpxSolverInterface::initialSolve() { bool takeHint; OsiHintStrength strength; // by default we use dual simplex // unless we get the hint to use primal simplex bool dual = true; getHintParam(OsiDoDualInInitial, takeHint, strength); if (strength != OsiHintIgnore) dual = takeHint; // always use column representation if (soplex_->rep() != soplex::SPxSolver::COLUMN) soplex_->setRep(soplex::SPxSolver::COLUMN); // set algorithm type if (dual) { if (soplex_->type() != soplex::SPxSolver::LEAVE) soplex_->setType(soplex::SPxSolver::LEAVE); } else { if (soplex_->type() != soplex::SPxSolver::ENTER) soplex_->setType(soplex::SPxSolver::ENTER); } // set dual objective limit double dualobjlimit; OsiSolverInterface::getDblParam(OsiDualObjectiveLimit, dualobjlimit); if (fabs(dualobjlimit) < getInfinity()) { double objoffset; OsiSolverInterface::getDblParam(OsiDualObjectiveLimit, objoffset); dualobjlimit += objoffset; } soplex_->setTerminationValue(dualobjlimit); // solve try { soplex_->solve(); } catch (soplex::SPxException e) { *messageHandler() << "SoPlex initial solve failed with exception " << e.what() << CoinMessageEol; #if (SOPLEX_VERSION >= 160) || (SOPLEX_SUBVERSION >= 7) try { *messageHandler() << "Retry with cleared basis" << CoinMessageEol; soplex_->clearBasis(); soplex_->solve(); } catch (soplex::SPxException e) { *messageHandler() << "SoPlex initial solve with cleared basis failed with exception " << e.what() << CoinMessageEol; } #endif } freeCachedResults(); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::resolve() { bool takeHint; OsiHintStrength strength; // by default we use dual simplex // unless we get the hint to use primal simplex bool dual = true; getHintParam(OsiDoDualInResolve, takeHint, strength); if (strength != OsiHintIgnore) dual = takeHint; // always use column representation if (soplex_->rep() != soplex::SPxSolver::COLUMN) soplex_->setRep(soplex::SPxSolver::COLUMN); // set algorithm type if (dual) { if (soplex_->type() != soplex::SPxSolver::LEAVE) soplex_->setType(soplex::SPxSolver::LEAVE); } else { if (soplex_->type() != soplex::SPxSolver::ENTER) soplex_->setType(soplex::SPxSolver::ENTER); } // set dual objective limit double dualobjlimit; OsiSolverInterface::getDblParam(OsiDualObjectiveLimit, dualobjlimit); if (fabs(dualobjlimit) < getInfinity()) { double objoffset; OsiSolverInterface::getDblParam(OsiDualObjectiveLimit, objoffset); dualobjlimit += objoffset; } soplex_->setTerminationValue(dualobjlimit); // solve try { soplex_->solve(); } catch (soplex::SPxException e) { *messageHandler() << "SoPlex resolve failed with exception " << e.what() << CoinMessageEol; #if (SOPLEX_VERSION >= 160) || (SOPLEX_SUBVERSION >= 7) try { *messageHandler() << "Retry with cleared basis" << CoinMessageEol; soplex_->clearBasis(); soplex_->solve(); } catch (soplex::SPxException e) { *messageHandler() << "SoPlex resolve with cleared basis failed with exception " << e.what() << CoinMessageEol; } #endif } freeCachedResults(); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::branchAndBound() { throwSPXerror("SoPlex does not provide an internal branch and bound procedure", "branchAndBound"); } //############################################################################# // Parameter related methods //############################################################################# bool OsiSpxSolverInterface::setIntParam(OsiIntParam key, int value) { bool retval = false; try { switch (key) { case OsiMaxNumIteration: soplex_->setTerminationIter(value); retval = true; break; case OsiMaxNumIterationHotStart: if (value >= 0) { hotStartMaxIteration_ = value; retval = true; } else retval = false; break; case OsiLastIntParam: retval = false; break; case OsiNameDiscipline: retval = OsiSolverInterface::setIntParam(key, value); break; } } catch (soplex::SPxException e) { *messageHandler() << "OsiSpx::setDblParam failed with exception " << e.what() << CoinMessageEol; retval = false; } return retval; } //----------------------------------------------------------------------------- bool OsiSpxSolverInterface::setDblParam(OsiDblParam key, double value) { bool retval = false; try { switch (key) { case OsiDualObjectiveLimit: retval = OsiSolverInterface::setDblParam(key, value); break; case OsiPrimalObjectiveLimit: retval = OsiSolverInterface::setDblParam(key, value); break; case OsiDualTolerance: // SoPlex doesn't support different deltas for primal and dual soplex_->setDelta(value); retval = true; break; case OsiPrimalTolerance: // SoPlex doesn't support different deltas for primal and dual soplex_->setDelta(value); retval = true; break; case OsiObjOffset: retval = OsiSolverInterface::setDblParam(key, value); break; case OsiLastDblParam: retval = false; break; } } catch (soplex::SPxException e) { *messageHandler() << "OsiSpx::setDblParam failed with exception " << e.what() << CoinMessageEol; retval = false; } return retval; } void OsiSpxSolverInterface::setTimeLimit(double value) { soplex_->setTerminationTime(value); } //----------------------------------------------------------------------------- bool OsiSpxSolverInterface::getIntParam(OsiIntParam key, int &value) const { bool retval = false; switch (key) { case OsiMaxNumIteration: value = soplex_->terminationIter(); retval = true; break; case OsiMaxNumIterationHotStart: value = hotStartMaxIteration_; retval = true; break; case OsiLastIntParam: retval = false; break; case OsiNameDiscipline: retval = OsiSolverInterface::getIntParam(key, value); break; } return retval; } //----------------------------------------------------------------------------- bool OsiSpxSolverInterface::getDblParam(OsiDblParam key, double &value) const { bool retval = false; switch (key) { case OsiDualObjectiveLimit: retval = OsiSolverInterface::getDblParam(key, value); break; case OsiPrimalObjectiveLimit: retval = OsiSolverInterface::getDblParam(key, value); break; case OsiDualTolerance: value = soplex_->delta(); retval = true; break; case OsiPrimalTolerance: value = soplex_->delta(); retval = true; break; case OsiObjOffset: retval = OsiSolverInterface::getDblParam(key, value); break; case OsiLastDblParam: retval = false; break; } return retval; } bool OsiSpxSolverInterface::getStrParam(OsiStrParam key, std::string &value) const { switch (key) { case OsiSolverName: value = "SoPlex"; return true; default:; } return false; } double OsiSpxSolverInterface::getTimeLimit() const { return soplex_->terminationTime(); } //############################################################################# // Methods returning info on how the solution process terminated //############################################################################# bool OsiSpxSolverInterface::isAbandoned() const { int stat = soplex_->status(); return (stat == soplex::SPxSolver::SINGULAR || stat == soplex::SPxSolver::ERROR); } bool OsiSpxSolverInterface::isProvenOptimal() const { int stat = soplex_->status(); return (stat == soplex::SPxSolver::OPTIMAL); } bool OsiSpxSolverInterface::isProvenPrimalInfeasible() const { int stat = soplex_->status(); return (stat == soplex::SPxSolver::INFEASIBLE); } bool OsiSpxSolverInterface::isProvenDualInfeasible() const { int stat = soplex_->status(); return (stat == soplex::SPxSolver::UNBOUNDED); } bool OsiSpxSolverInterface::isDualObjectiveLimitReached() const { if (soplex_->status() == soplex::SPxSolver::ABORT_VALUE) return true; return OsiSolverInterface::isDualObjectiveLimitReached(); } bool OsiSpxSolverInterface::isIterationLimitReached() const { return (soplex_->status() == soplex::SPxSolver::ABORT_ITER); } bool OsiSpxSolverInterface::isTimeLimitReached() const { return (soplex_->status() == soplex::SPxSolver::ABORT_TIME); } //############################################################################# // WarmStart related methods //############################################################################# CoinWarmStart *OsiSpxSolverInterface::getWarmStart() const { CoinWarmStartBasis *ws = NULL; int numcols = getNumCols(); int numrows = getNumRows(); int i; ws = new CoinWarmStartBasis(); ws->setSize(numcols, numrows); if (soplex_->status() <= soplex::SPxSolver::NO_PROBLEM) return ws; // The OSI standard assumes the artificial slack variables to have positive coefficients. SoPlex uses the convention // Ax - s = 0, lhs <= s <= rhs, so we have to invert the ON_LOWER and ON_UPPER statuses. for (i = 0; i < numrows; ++i) { switch (soplex_->getBasisRowStatus(i)) { case soplex::SPxSolver::BASIC: ws->setArtifStatus(i, CoinWarmStartBasis::basic); break; case soplex::SPxSolver::FIXED: case soplex::SPxSolver::ON_LOWER: ws->setArtifStatus(i, CoinWarmStartBasis::atUpperBound); break; case soplex::SPxSolver::ON_UPPER: ws->setArtifStatus(i, CoinWarmStartBasis::atLowerBound); break; case soplex::SPxSolver::ZERO: ws->setArtifStatus(i, CoinWarmStartBasis::isFree); break; default: throwSPXerror("invalid row status", "getWarmStart"); break; } } for (i = 0; i < numcols; ++i) { switch (soplex_->getBasisColStatus(i)) { case soplex::SPxSolver::BASIC: ws->setStructStatus(i, CoinWarmStartBasis::basic); break; case soplex::SPxSolver::FIXED: case soplex::SPxSolver::ON_LOWER: ws->setStructStatus(i, CoinWarmStartBasis::atLowerBound); break; case soplex::SPxSolver::ON_UPPER: ws->setStructStatus(i, CoinWarmStartBasis::atUpperBound); break; case soplex::SPxSolver::ZERO: ws->setStructStatus(i, CoinWarmStartBasis::isFree); break; default: throwSPXerror("invalid column status", "getWarmStart"); break; } } return ws; } //----------------------------------------------------------------------------- bool OsiSpxSolverInterface::setWarmStart(const CoinWarmStart *warmstart) { const CoinWarmStartBasis *ws = dynamic_cast< const CoinWarmStartBasis * >(warmstart); int numcols, numrows, i; soplex::SPxSolver::VarStatus *cstat, *rstat; bool retval = false; if (!ws) return false; numcols = ws->getNumStructural(); numrows = ws->getNumArtificial(); if (numcols != getNumCols() || numrows != getNumRows()) return false; cstat = new soplex::SPxSolver::VarStatus[numcols]; rstat = new soplex::SPxSolver::VarStatus[numrows]; // The OSI standard assumes the artificial slack variables to have positive coefficients. SoPlex uses the convention // Ax - s = 0, lhs <= s <= rhs, so we have to invert the atLowerBound and atUpperBound statuses. for (i = 0; i < numrows; ++i) { switch (ws->getArtifStatus(i)) { case CoinWarmStartBasis::basic: rstat[i] = soplex::SPxSolver::BASIC; break; case CoinWarmStartBasis::atLowerBound: rstat[i] = soplex::SPxSolver::ON_UPPER; break; case CoinWarmStartBasis::atUpperBound: rstat[i] = soplex::SPxSolver::ON_LOWER; break; case CoinWarmStartBasis::isFree: rstat[i] = soplex::SPxSolver::ZERO; break; default: // unknown row status retval = false; goto TERMINATE; } } for (i = 0; i < numcols; ++i) { switch (ws->getStructStatus(i)) { case CoinWarmStartBasis::basic: cstat[i] = soplex::SPxSolver::BASIC; break; case CoinWarmStartBasis::atLowerBound: cstat[i] = soplex::SPxSolver::ON_LOWER; break; case CoinWarmStartBasis::atUpperBound: cstat[i] = soplex::SPxSolver::ON_UPPER; break; case CoinWarmStartBasis::isFree: cstat[i] = soplex::SPxSolver::ZERO; break; default: // unknown column status retval = false; goto TERMINATE; } } try { soplex_->setBasis(rstat, cstat); } catch (soplex::SPxException e) { std::cerr << "SoPlex setting starting basis failed with exception " << e.what() << std::endl; retval = false; goto TERMINATE; } retval = true; TERMINATE: delete[] cstat; delete[] rstat; return retval; } //############################################################################# // Hotstart related methods (primarily used in strong branching) //############################################################################# void OsiSpxSolverInterface::markHotStart() { int numcols, numrows; numcols = getNumCols(); numrows = getNumRows(); if (numcols > hotStartCStatSize_) { delete[] reinterpret_cast< soplex::SPxSolver::VarStatus * >(hotStartCStat_); hotStartCStatSize_ = static_cast< int >(1.2 * static_cast< double >(numcols)); // get some extra space for future hot starts hotStartCStat_ = reinterpret_cast< void * >(new soplex::SPxSolver::VarStatus[hotStartCStatSize_]); } if (numrows > hotStartRStatSize_) { delete[] reinterpret_cast< soplex::SPxSolver::VarStatus * >(hotStartRStat_); hotStartRStatSize_ = static_cast< int >(1.2 * static_cast< double >(numrows)); // get some extra space for future hot starts hotStartRStat_ = reinterpret_cast< void * >(new soplex::SPxSolver::VarStatus[hotStartRStatSize_]); } soplex_->getBasis(reinterpret_cast< soplex::SPxSolver::VarStatus * >(hotStartRStat_), reinterpret_cast< soplex::SPxSolver::VarStatus * >(hotStartCStat_)); } void OsiSpxSolverInterface::solveFromHotStart() { int maxiter; assert(getNumCols() <= hotStartCStatSize_); assert(getNumRows() <= hotStartRStatSize_); // @todo why the hotstart basis is not set here ????? //soplex_->setBasis( reinterpret_cast(hotStartRStat_), reinterpret_cast(hotStartCStat_) ); maxiter = soplex_->terminationIter(); soplex_->setTerminationIter(hotStartMaxIteration_); resolve(); soplex_->setTerminationIter(maxiter); } void OsiSpxSolverInterface::unmarkHotStart() { // be lazy with deallocating memory and do nothing here, deallocate memory in the destructor } //############################################################################# // Problem information methods (original data) //############################################################################# //------------------------------------------------------------------ // Get number of rows, columns, elements, ... //------------------------------------------------------------------ int OsiSpxSolverInterface::getNumCols() const { return soplex_->nCols(); } int OsiSpxSolverInterface::getNumRows() const { return soplex_->nRows(); } int OsiSpxSolverInterface::getNumElements() const { #if 0 return soplex_->nNzos(); #else int retVal = 0; int nrows = getNumRows(); int row; for (row = 0; row < nrows; ++row) { const soplex::SVector &rowvec = soplex_->rowVector(row); retVal += rowvec.size(); } return retVal; #endif } //------------------------------------------------------------------ // Get pointer to rim vectors //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getColLower() const { const double *retVal = NULL; if (getNumCols() != 0) retVal = soplex_->lower().get_const_ptr(); return retVal; } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getColUpper() const { const double *retVal = NULL; if (getNumCols() != 0) retVal = soplex_->upper().get_const_ptr(); return retVal; } //------------------------------------------------------------------ const char *OsiSpxSolverInterface::getRowSense() const { if (rowsense_ == NULL) { // rowsense is determined with rhs, so invoke rhs getRightHandSide(); assert(rowsense_ != NULL || getNumRows() == 0); } return rowsense_; } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getRightHandSide() const { if (rhs_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { int row; assert(rowrange_ == NULL); assert(rowsense_ == NULL); rhs_ = new double[nrows]; rowrange_ = new double[nrows]; rowsense_ = new char[nrows]; for (row = 0; row < nrows; ++row) convertBoundToSense(soplex_->lhs(row), soplex_->rhs(row), rowsense_[row], rhs_[row], rowrange_[row]); } } return rhs_; } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getRowRange() const { if (rowrange_ == NULL) { // rowrange is determined with rhs, so invoke rhs getRightHandSide(); assert(rowrange_ != NULL || getNumRows() == 0); } return rowrange_; } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getRowLower() const { const double *retVal = NULL; if (getNumRows() != 0) retVal = soplex_->lhs().get_const_ptr(); return retVal; } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getRowUpper() const { const double *retVal = NULL; if (getNumRows() != 0) retVal = soplex_->rhs().get_const_ptr(); return retVal; } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getObjCoefficients() const { const double *retVal = NULL; if (obj_ == NULL) { if (getNumCols() != 0) { obj_ = new soplex::DVector(getNumCols()); soplex_->getObj(*obj_); retVal = obj_->get_const_ptr(); } } else { retVal = obj_->get_const_ptr(); } return retVal; } //------------------------------------------------------------------ double OsiSpxSolverInterface::getObjSense() const { switch (soplex_->spxSense()) { case soplex::SPxLP::MINIMIZE: return +1.0; case soplex::SPxLP::MAXIMIZE: return -1.0; default: throwSPXerror("invalid optimization sense", "getObjSense"); return 0.0; } } //------------------------------------------------------------------ // Return information on integrality //------------------------------------------------------------------ bool OsiSpxSolverInterface::isContinuous(int colNumber) const { #if SOPLEX_VERSION >= 300 return (spxintvars_->pos(colNumber) < 0); #else return (spxintvars_->number(colNumber) < 0); #endif } //------------------------------------------------------------------ // Row and column copies of the matrix ... //------------------------------------------------------------------ const CoinPackedMatrix *OsiSpxSolverInterface::getMatrixByRow() const { if (matrixByRow_ == NULL) { int nrows = getNumRows(); int ncols = getNumCols(); int nelems = getNumElements(); double *elements = new double[nelems]; int *indices = new int[nelems]; int *starts = new int[nrows + 1]; int *len = new int[nrows]; int row, i, elem; elem = 0; for (row = 0; row < nrows; ++row) { const soplex::SVector &rowvec = soplex_->rowVector(row); starts[row] = elem; len[row] = rowvec.size(); for (i = 0; i < len[row]; ++i, ++elem) { assert(elem < nelems); elements[elem] = rowvec.value(i); indices[elem] = rowvec.index(i); } } starts[nrows] = elem; assert(elem == nelems); matrixByRow_ = new CoinPackedMatrix(); matrixByRow_->assignMatrix(false /* not column ordered */, ncols, nrows, nelems, elements, indices, starts, len); } return matrixByRow_; } //------------------------------------------------------------------ const CoinPackedMatrix *OsiSpxSolverInterface::getMatrixByCol() const { if (matrixByCol_ == NULL) { int nrows = getNumRows(); int ncols = getNumCols(); int nelems = getNumElements(); double *elements = new double[nelems]; int *indices = new int[nelems]; int *starts = new int[ncols + 1]; int *len = new int[ncols]; int col, i, elem; elem = 0; for (col = 0; col < ncols; ++col) { const soplex::SVector &colvec = soplex_->colVector(col); starts[col] = elem; len[col] = colvec.size(); for (i = 0; i < len[col]; ++i, ++elem) { assert(elem < nelems); elements[elem] = colvec.value(i); indices[elem] = colvec.index(i); } } starts[ncols] = elem; assert(elem == nelems); matrixByCol_ = new CoinPackedMatrix(); matrixByCol_->assignMatrix(true /* column ordered */, nrows, ncols, nelems, elements, indices, starts, len); } return matrixByCol_; } //------------------------------------------------------------------ // Get solver's value for infinity //------------------------------------------------------------------ double OsiSpxSolverInterface::getInfinity() const { return soplex::infinity; } //############################################################################# // Problem information methods (results) //############################################################################# // *FIXME*: what should be done if a certain vector doesn't exist??? const double *OsiSpxSolverInterface::getColSolution() const { if (colsol_ == NULL) { int ncols = getNumCols(); if (ncols > 0) { colsol_ = new soplex::DVector(ncols); if (isProvenOptimal()) soplex_->getPrimal(*colsol_); else *colsol_ = soplex_->lower(); } else return NULL; } return colsol_->get_const_ptr(); } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getRowPrice() const { if (rowsol_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rowsol_ = new soplex::DVector(nrows); if (isProvenOptimal()) soplex_->getDual(*rowsol_); else rowsol_->clear(); } else return NULL; } return rowsol_->get_const_ptr(); } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getReducedCost() const { if (redcost_ == NULL) { int ncols = getNumCols(); if (ncols > 0) { redcost_ = new soplex::DVector(ncols); if (isProvenOptimal()) soplex_->getRedCost(*redcost_); else redcost_->clear(); } else return NULL; } return redcost_->get_const_ptr(); } //------------------------------------------------------------------ const double *OsiSpxSolverInterface::getRowActivity() const { if (rowact_ == NULL) { int nrows = getNumRows(); if (nrows > 0) { rowact_ = new soplex::DVector(nrows); if (isProvenOptimal()) soplex_->getSlacks(*rowact_); else rowact_->clear(); } else return NULL; } return rowact_->get_const_ptr(); } //------------------------------------------------------------------ double OsiSpxSolverInterface::getObjValue() const { double objval; switch (soplex_->status()) { case soplex::SPxSolver::OPTIMAL: case soplex::SPxSolver::UNBOUNDED: case soplex::SPxSolver::INFEASIBLE: objval = soplex_->objValue(); break; default: { const double *colsol = getColSolution(); const double *objcoef = getObjCoefficients(); int ncols = getNumCols(); objval = 0.0; for (int i = 0; i < ncols; ++i) objval += colsol[i] * objcoef[i]; break; } } // Adjust objective function value by constant term in objective function double objOffset; getDblParam(OsiObjOffset, objOffset); objval = objval - objOffset; return objval; } //------------------------------------------------------------------ int OsiSpxSolverInterface::getIterationCount() const { return soplex_->iteration(); } //------------------------------------------------------------------ std::vector< double * > OsiSpxSolverInterface::getDualRays(int maxNumRays, bool fullRay) const { if (fullRay == true) { throw CoinError("Full dual rays not yet implemented.", "getDualRays", "OsiSpxSolverInterface"); } std::vector< double * > ret = std::vector< double * >(); if (soplex_->status() == soplex::SPxSolver::INFEASIBLE && maxNumRays > 0) { ret.push_back(new double[getNumRows()]); soplex::Vector proof(getNumRows(), ret[0]); soplex_->getDualfarkas(proof); for (int i = 0; i < getNumRows(); ++i) ret[0][i] *= -1.0; } return ret; } //------------------------------------------------------------------ std::vector< double * > OsiSpxSolverInterface::getPrimalRays(int maxNumRays) const { // *FIXME* : must write the method throw CoinError("method is not yet written", "getPrimalRays", "OsiSpxSolverInterface"); return std::vector< double * >(); } //############################################################################# // Problem modifying methods (rim vectors) //############################################################################# void OsiSpxSolverInterface::setObjCoeff(int elementIndex, double elementValue) { soplex_->changeObj(elementIndex, elementValue); freeCachedData(OsiSpxSolverInterface::FREECACHED_COLUMN); } void OsiSpxSolverInterface::setColLower(int elementIndex, double elementValue) { soplex_->changeLower(elementIndex, elementValue); freeCachedData(OsiSpxSolverInterface::FREECACHED_COLUMN); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setColUpper(int elementIndex, double elementValue) { soplex_->changeUpper(elementIndex, elementValue); freeCachedData(OsiSpxSolverInterface::FREECACHED_COLUMN); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setColBounds(int elementIndex, double lower, double upper) { soplex_->changeBounds(elementIndex, lower, upper); freeCachedData(OsiSpxSolverInterface::FREECACHED_COLUMN); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setRowLower(int i, double elementValue) { soplex_->changeLhs(i, elementValue); freeCachedData(OsiSpxSolverInterface::FREECACHED_ROW); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setRowUpper(int i, double elementValue) { soplex_->changeRhs(i, elementValue); freeCachedData(OsiSpxSolverInterface::FREECACHED_ROW); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setRowBounds(int elementIndex, double lower, double upper) { soplex_->changeRange(elementIndex, lower, upper); freeCachedData(OsiSpxSolverInterface::FREECACHED_ROW); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setRowType(int i, char sense, double rightHandSide, double range) { double lower = 0.0; double upper = 0.0; convertSenseToBound(sense, rightHandSide, range, lower, upper); setRowBounds(i, lower, upper); } //############################################################################# void OsiSpxSolverInterface::setContinuous(int index) { #if SOPLEX_VERSION >= 300 int pos = spxintvars_->pos(index); #else int pos = spxintvars_->number(index); #endif if (pos >= 0) { spxintvars_->remove(pos); freeCachedData(OsiSpxSolverInterface::FREECACHED_COLUMN); } } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setInteger(int index) { #if SOPLEX_VERSION >= 300 int pos = spxintvars_->pos(index); #else int pos = spxintvars_->number(index); #endif if (pos < 0) { spxintvars_->addIdx(index); freeCachedData(OsiSpxSolverInterface::FREECACHED_COLUMN); } } //############################################################################# void OsiSpxSolverInterface::setObjSense(double s) { if (s != getObjSense()) { if (s == +1.0) soplex_->changeSense(soplex::SPxLP::MINIMIZE); else soplex_->changeSense(soplex::SPxLP::MAXIMIZE); freeCachedData(OsiSpxSolverInterface::FREECACHED_RESULTS); } } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setColSolution(const double *cs) { int col; int ncols = getNumCols(); if (colsol_ != NULL) delete colsol_; if (ncols > 0 && cs != NULL) { colsol_ = new soplex::DVector(ncols); for (col = 0; col < ncols; ++col) (*colsol_)[col] = cs[col]; } else colsol_ = NULL; } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::setRowPrice(const double *rs) { int row; int nrows = getNumRows(); if (rowsol_ != NULL) delete rowsol_; if (nrows > 0 && rs != NULL) { rowsol_ = new soplex::DVector(nrows); for (row = 0; row < nrows; ++row) (*rowsol_)[row] = rs[row]; } else rowsol_ = NULL; } //############################################################################# // Problem modifying methods (matrix) //############################################################################# void OsiSpxSolverInterface::addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj) { soplex::DSVector colvec; colvec.add(vec.getNumElements(), vec.getIndices(), vec.getElements()); soplex_->addCol(soplex::LPCol(obj, colvec, colub, collb)); freeCachedData(OsiSpxSolverInterface::KEEPCACHED_ROW); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::deleteCols(const int num, const int *columnIndices) { soplex_->removeCols(const_cast< int * >(columnIndices), num); freeCachedData(OsiSpxSolverInterface::KEEPCACHED_ROW); // took from OsiClp for updating names int nameDiscipline; getIntParam(OsiNameDiscipline, nameDiscipline); if (num && nameDiscipline) { // Very clumsy (and inefficient) - need to sort and then go backwards in ? chunks int *indices = CoinCopyOfArray(columnIndices, num); std::sort(indices, indices + num); int num2 = num; while (num2) { int next = indices[num2 - 1]; int firstDelete = num2 - 1; int i; for (i = num2 - 2; i >= 0; --i) { if (indices[i] + 1 == next) { --next; firstDelete = i; } else { break; } } OsiSolverInterface::deleteColNames(indices[firstDelete], num2 - firstDelete); num2 = firstDelete; assert(num2 >= 0); } delete[] indices; } } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub) { soplex::DSVector rowvec; rowvec.add(vec.getNumElements(), vec.getIndices(), vec.getElements()); soplex_->addRow(soplex::LPRow(rowlb, rowvec, rowub)); freeCachedData(OsiSpxSolverInterface::KEEPCACHED_COLUMN); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng) { double rowlb = 0.0; double rowub = 0.0; convertSenseToBound(rowsen, rowrhs, rowrng, rowlb, rowub); addRow(vec, rowlb, rowub); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::deleteRows(const int num, const int *rowIndices) { soplex_->removeRows(const_cast< int * >(rowIndices), num); freeCachedData(OsiSpxSolverInterface::KEEPCACHED_COLUMN); // took from OsiClp for updating names int nameDiscipline; getIntParam(OsiNameDiscipline, nameDiscipline); if (num && nameDiscipline) { // Very clumsy (and inefficient) - need to sort and then go backwards in ? chunks int *indices = CoinCopyOfArray(rowIndices, num); std::sort(indices, indices + num); int num2 = num; while (num2) { int next = indices[num2 - 1]; int firstDelete = num2 - 1; int i; for (i = num2 - 2; i >= 0; --i) { if (indices[i] + 1 == next) { --next; firstDelete = i; } else { break; } } OsiSolverInterface::deleteRowNames(indices[firstDelete], num2 - firstDelete); num2 = firstDelete; assert(num2 >= 0); } delete[] indices; } } //############################################################################# // Methods to input a problem //############################################################################# void OsiSpxSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { int ncols = matrix.getNumCols(); int nrows = matrix.getNumRows(); const int *length = matrix.getVectorLengths(); const int *start = matrix.getVectorStarts(); const double *elem = matrix.getElements(); const int *index = matrix.getIndices(); double *thecollb, *thecolub, *theobj, *therowlb, *therowub; // create defaults if parameter is NULL if (collb == NULL) { thecollb = new double[ncols]; CoinFillN(thecollb, ncols, 0.0); } else thecollb = const_cast< double * >(collb); if (colub == NULL) { thecolub = new double[ncols]; CoinFillN(thecolub, ncols, getInfinity()); } else thecolub = const_cast< double * >(colub); if (obj == NULL) { theobj = new double[ncols]; CoinFillN(theobj, ncols, 0.0); } else theobj = const_cast< double * >(obj); if (rowlb == NULL) { therowlb = new double[nrows]; CoinFillN(therowlb, nrows, -getInfinity()); } else therowlb = const_cast< double * >(rowlb); if (rowub == NULL) { therowub = new double[nrows]; CoinFillN(therowub, nrows, +getInfinity()); } else therowub = const_cast< double * >(rowub); // copy problem into soplex_ soplex_->clear(); spxintvars_->clear(); freeCachedData(OsiSpxSolverInterface::KEEPCACHED_NONE); if (matrix.isColOrdered()) { int row, col, pos; soplex::LPRowSet rowset(nrows, 0); soplex::DSVector rowvec; soplex::LPColSet colset(ncols, matrix.getNumElements()); soplex::DSVector colvec; /* insert empty rows */ rowvec.clear(); for (row = 0; row < nrows; ++row) rowset.add(therowlb[row], rowvec, therowub[row]); soplex_->addRows(rowset); /* create columns */ for (col = 0; col < ncols; ++col) { pos = start[col]; colvec.clear(); colvec.add(length[col], &(index[pos]), &(elem[pos])); colset.add(theobj[col], thecollb[col], colvec, thecolub[col]); } soplex_->addCols(colset); // soplex_->changeRange( soplex::Vector( nrows, therowlb ), soplex::Vector( nrows, therowub ) ); } else { int row, col, pos; soplex::LPRowSet rowset(nrows, matrix.getNumElements()); soplex::DSVector rowvec; soplex::LPColSet colset(ncols, 0); soplex::DSVector colvec; /* insert empty columns */ colvec.clear(); for (col = 0; col < ncols; ++col) colset.add(theobj[col], thecollb[col], colvec, thecolub[col]); soplex_->addCols(colset); /* create rows */ for (row = 0; row < nrows; ++row) { pos = start[row]; rowvec.clear(); rowvec.add(length[row], &(index[pos]), &(elem[pos])); rowset.add(therowlb[row], rowvec, therowub[row]); } soplex_->addRows(rowset); // soplex_->changeObj( soplex::Vector( ncols, theobj ) ); // soplex_->changeBounds( soplex::Vector( ncols, thecollb ), soplex::Vector( ncols, thecolub ) ); } // switch sense to minimization problem soplex_->changeSense(soplex::SPxSolver::MINIMIZE); // delete default arrays if neccessary if (collb == NULL) delete[] thecollb; if (colub == NULL) delete[] thecolub; if (obj == NULL) delete[] theobj; if (rowlb == NULL) delete[] therowlb; if (rowub == NULL) delete[] therowub; } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub) { loadProblem(*matrix, collb, colub, obj, rowlb, rowub); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowlb; rowlb = 0; delete[] rowub; rowub = 0; } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { int nrows = matrix.getNumRows(); double *rowlb = new double[nrows]; double *rowub = new double[nrows]; int row; char *therowsen; double *therowrhs, *therowrng; if (rowsen == NULL) { therowsen = new char[nrows]; CoinFillN(therowsen, nrows, 'G'); } else therowsen = const_cast< char * >(rowsen); if (rowrhs == NULL) { therowrhs = new double[nrows]; CoinFillN(therowrhs, nrows, 0.0); } else therowrhs = const_cast< double * >(rowrhs); if (rowrng == NULL) { therowrng = new double[nrows]; CoinFillN(therowrng, nrows, 0.0); } else therowrng = const_cast< double * >(rowrng); for (row = 0; row < nrows; ++row) convertSenseToBound(therowsen[row], therowrhs[row], therowrng[row], rowlb[row], rowub[row]); loadProblem(matrix, collb, colub, obj, rowlb, rowub); if (rowsen == NULL) delete[] therowsen; if (rowrhs == NULL) delete[] therowrhs; if (rowrng == NULL) delete[] therowrng; delete[] rowlb; delete[] rowub; } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng) { loadProblem(*matrix, collb, colub, obj, rowsen, rowrhs, rowrng); delete matrix; matrix = 0; delete[] collb; collb = 0; delete[] colub; colub = 0; delete[] obj; obj = 0; delete[] rowsen; rowsen = 0; delete[] rowrhs; rowrhs = 0; delete[] rowrng; rowrng = 0; } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { int col, pos; soplex::LPColSet colset(numcols, start[numcols]); soplex::DSVector colvec; soplex_->clear(); spxintvars_->clear(); freeCachedData(OsiSpxSolverInterface::KEEPCACHED_NONE); for (col = 0; col < numcols; ++col) { pos = start[col]; colvec.clear(); colvec.add(start[col + 1] - pos, &(index[pos]), &(value[pos])); colset.add(obj[col], collb[col], colvec, colub[col]); } soplex_->addCols(colset); soplex_->changeRange(soplex::Vector(numrows, const_cast< double * >(rowlb)), soplex::Vector(numrows, const_cast< double * >(rowub))); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { double *rowlb = new double[numrows]; double *rowub = new double[numrows]; int row; for (row = 0; row < numrows; ++row) convertSenseToBound(rowsen != NULL ? rowsen[row] : 'G', rowrhs != NULL ? rowrhs[row] : 0.0, rowrng != NULL ? rowrng[row] : 0.0, rowlb[row], rowub[row]); loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowlb, rowub); delete[] rowlb; delete[] rowub; } //----------------------------------------------------------------------------- // Read mps files //----------------------------------------------------------------------------- int OsiSpxSolverInterface::readMps(const char *filename, const char *extension) { #if 0 std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; std::ifstream file(fullname.c_str()); if (!file.good()) { std::cerr << "Error opening file " << fullname << " for reading!" << std::endl; return 1; } soplex_->clear(); if( !soplex_->readMPS(file, NULL, NULL, NULL) ) throwSPXerror( "error reading file <" + fullname + ">", "readMps" ); #endif // we preserve the objective sense independent of the problem which is read soplex::SPxLP::SPxSense objsen = soplex_->spxSense(); int retval = OsiSolverInterface::readMps(filename, extension); soplex_->changeSense(objsen); return retval; } //----------------------------------------------------------------------------- // Write mps files //----------------------------------------------------------------------------- void OsiSpxSolverInterface::writeMps(const char *filename, const char *extension, double objSense) const { std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; std::ofstream file(fullname.c_str()); if (!file.good()) { std::cerr << "Error opening file " << fullname << " for writing!" << std::endl; return; } soplex::DIdxSet integers(getNumIntegers()); for (int i = 0; i < getNumCols(); ++i) if (isInteger(i)) integers.addIdx(i); soplex_->writeMPS(file, NULL, NULL, &integers); } //############################################################################# // Constructors, destructors clone and assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiSpxSolverInterface::OsiSpxSolverInterface() : OsiSolverInterface() , #if SOPLEX_VERSION >= 220 spxout_(new soplex::SPxOut) , soplex_(new soplex::SoPlex(*spxout_, soplex::SPxSolver::ENTER, soplex::SPxSolver::COLUMN)) , // default is primal simplex algorithm #else spxout_(NULL) , soplex_(new soplex::SoPlex(soplex::SPxSolver::ENTER, soplex::SPxSolver::COLUMN)) , // default is primal simplex algorithm #endif spxintvars_(new soplex::DIdxSet()) , hotStartCStat_(NULL) , hotStartCStatSize_(0) , hotStartRStat_(NULL) , hotStartRStatSize_(0) , hotStartMaxIteration_(1000000) , // ??? default iteration limit for strong branching is large obj_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , colsol_(NULL) , rowsol_(NULL) , redcost_(NULL) , rowact_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) { #if SOPLEX_VERSION >= 220 #ifndef NDEBUG spxout_->setVerbosity(soplex::SPxOut::INFO1); #else spxout_->setVerbosity(soplex::SPxOut::DEBUG); #endif #else #ifndef NDEBUG soplex::Param::setVerbose(3); #else soplex::Param::setVerbose(2); #endif #endif // SoPlex default objective sense is maximization, thus we explicitly set it to minimization soplex_->changeSense(soplex::SPxLP::MINIMIZE); } //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiSolverInterface *OsiSpxSolverInterface::clone(bool copyData) const { return (new OsiSpxSolverInterface(*this)); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiSpxSolverInterface::OsiSpxSolverInterface(const OsiSpxSolverInterface &source) : OsiSolverInterface(source) , soplex_(new soplex::SoPlex(*source.soplex_)) , spxintvars_(new soplex::DIdxSet(*source.spxintvars_)) , hotStartCStat_(NULL) , hotStartCStatSize_(0) , hotStartRStat_(NULL) , hotStartRStatSize_(0) , hotStartMaxIteration_(source.hotStartMaxIteration_) , obj_(NULL) , rowsense_(NULL) , rhs_(NULL) , rowrange_(NULL) , colsol_(NULL) , rowsol_(NULL) , redcost_(NULL) , rowact_(NULL) , matrixByRow_(NULL) , matrixByCol_(NULL) { if (source.colsol_ != NULL) setColSolution(source.getColSolution()); if (source.rowsol_ != NULL) setRowPrice(source.getRowPrice()); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiSpxSolverInterface::~OsiSpxSolverInterface() { freeAllMemory(); } //------------------------------------------------------------------- // SPX specific public interfaces //------------------------------------------------------------------- soplex::SoPlex *OsiSpxSolverInterface::getLpPtr(int keepCached) { freeCachedData(keepCached); return soplex_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiSpxSolverInterface &OsiSpxSolverInterface::operator=(const OsiSpxSolverInterface &source) { if (this != &source) { freeAllMemory(); OsiSolverInterface::operator=(source); spxintvars_ = new soplex::DIdxSet(*source.spxintvars_); soplex_ = new soplex::SoPlex(*source.soplex_); if (source.colsol_ != NULL) setColSolution(source.getColSolution()); if (source.rowsol_ != NULL) setRowPrice(source.getRowPrice()); hotStartMaxIteration_ = source.hotStartMaxIteration_; } return *this; } //############################################################################# // Applying cuts //############################################################################# void OsiSpxSolverInterface::applyColCut(const OsiColCut &cc) { const double *soplexColLB = getColLower(); const double *soplexColUB = getColUpper(); const CoinPackedVector &lbs = cc.lbs(); const CoinPackedVector &ubs = cc.ubs(); int i; for (i = 0; i < lbs.getNumElements(); ++i) if (lbs.getElements()[i] > soplexColLB[lbs.getIndices()[i]]) setColLower(lbs.getIndices()[i], lbs.getElements()[i]); for (i = 0; i < ubs.getNumElements(); ++i) if (ubs.getElements()[i] < soplexColUB[ubs.getIndices()[i]]) setColUpper(ubs.getIndices()[i], ubs.getElements()[i]); } //----------------------------------------------------------------------------- void OsiSpxSolverInterface::applyRowCut(const OsiRowCut &rowCut) { addRow(rowCut.row(), rowCut.lb(), rowCut.ub()); } //############################################################################# // Private methods (non-static and static) //############################################################################# //------------------------------------------------------------------- /// free cached vectors void OsiSpxSolverInterface::freeCachedColRim() { delete obj_; obj_ = NULL; } void OsiSpxSolverInterface::freeCachedRowRim() { freeCacheChar(rowsense_); freeCacheDouble(rhs_); freeCacheDouble(rowrange_); assert(rowsense_ == NULL); assert(rhs_ == NULL); assert(rowrange_ == NULL); } void OsiSpxSolverInterface::freeCachedMatrix() { freeCacheMatrix(matrixByRow_); freeCacheMatrix(matrixByCol_); assert(matrixByRow_ == NULL); assert(matrixByCol_ == NULL); } void OsiSpxSolverInterface::freeCachedResults() { delete colsol_; delete rowsol_; delete redcost_; delete rowact_; colsol_ = NULL; rowsol_ = NULL; redcost_ = NULL; rowact_ = NULL; } void OsiSpxSolverInterface::freeCachedData(int keepCached) { if (!(keepCached & OsiSpxSolverInterface::KEEPCACHED_COLUMN)) freeCachedColRim(); if (!(keepCached & OsiSpxSolverInterface::KEEPCACHED_ROW)) freeCachedRowRim(); if (!(keepCached & OsiSpxSolverInterface::KEEPCACHED_MATRIX)) freeCachedMatrix(); if (!(keepCached & OsiSpxSolverInterface::KEEPCACHED_RESULTS)) freeCachedResults(); } void OsiSpxSolverInterface::freeAllMemory() { freeCachedData(); delete[] reinterpret_cast< soplex::SPxSolver::VarStatus * >(hotStartCStat_); delete[] reinterpret_cast< soplex::SPxSolver::VarStatus * >(hotStartRStat_); hotStartCStat_ = NULL; hotStartCStatSize_ = 0; hotStartRStat_ = NULL; hotStartRStatSize_ = 0; delete soplex_; #if SOPLEX_VERSION >= 220 delete spxout_; #endif delete spxintvars_; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiSpx/OsiSpxSolverInterface.hpp0000644000175200017520000006634613414504352020613 0ustar coincoin//----------------------------------------------------------------------------- // name: OSI Interface for SoPlex >= 1.4.2c // authors: Tobias Pfender // Ambros Gleixner // Wei Huang // Konrad-Zuse-Zentrum Berlin (Germany) // email: pfender@zib.de // date: 01/16/2002 // license: this file may be freely distributed under the terms of the EPL //----------------------------------------------------------------------------- // Copyright (C) 2002, Tobias Pfender, International Business Machines // Corporation and others. All Rights Reserved. // Last edit: $Id: OsiSpxSolverInterface.hpp 2200 2019-01-06 23:02:02Z unxusr $ #ifndef OsiSpxSolverInterface_H #define OsiSpxSolverInterface_H #include #include "OsiSolverInterface.hpp" #include "CoinWarmStartBasis.hpp" #ifndef _SOPLEX_H_ /* forward declarations so the header can be compiled without having to include soplex.h * however, these declaration work only for SoPlex < 2.0, so we do them only if soplex.h hasn't been included already */ namespace soplex { class DIdxSet; class DVector; class SPxOut; class SoPlex; } #endif /** SoPlex Solver Interface Instantiation of OsiSpxSolverInterface for SoPlex */ class OsiSpxSolverInterface : virtual public OsiSolverInterface { friend void OsiSpxSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); public: //--------------------------------------------------------------------------- /**@name Solve methods */ //@{ /// Solve initial LP relaxation virtual void initialSolve(); /// Resolve an LP relaxation after problem modification virtual void resolve(); /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound(); //@} //--------------------------------------------------------------------------- /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. */ //@{ // Set an integer parameter bool setIntParam(OsiIntParam key, int value); // Set an double parameter bool setDblParam(OsiDblParam key, double value); // Get an integer parameter bool getIntParam(OsiIntParam key, int &value) const; // Get an double parameter bool getDblParam(OsiDblParam key, double &value) const; // Get a string parameter bool getStrParam(OsiStrParam key, std::string &value) const; // Set timelimit void setTimeLimit(double value); // Get timelimit double getTimeLimit() const; //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there a numerical difficulties? virtual bool isAbandoned() const; /// Is optimality proven? virtual bool isProvenOptimal() const; /// Is primal infeasiblity proven? virtual bool isProvenPrimalInfeasible() const; /// Is dual infeasiblity proven? virtual bool isProvenDualInfeasible() const; // Is the given primal objective limit reached? - use implementation from OsiSolverInterface /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const; /// Time limit reached? virtual bool isTimeLimitReached() const; //@} //--------------------------------------------------------------------------- /**@name WarmStart related methods */ //@{ /// Get empty warm start object inline CoinWarmStart *getEmptyWarmStart() const { return (dynamic_cast< CoinWarmStart * >(new CoinWarmStartBasis())); } /// Get warmstarting information virtual CoinWarmStart *getWarmStart() const; /** Set warmstarting information. Return true/false depending on whether the warmstart information was accepted or not. */ virtual bool setWarmStart(const CoinWarmStart *warmstart); //@} //--------------------------------------------------------------------------- /**@name Hotstart related methods (primarily used in strong branching).
The user can create a hotstart (a snapshot) of the optimization process then reoptimize over and over again always starting from there.
NOTE: between hotstarted optimizations only bound changes are allowed. */ //@{ /// Create a hotstart point of the optimization process virtual void markHotStart(); /// Optimize starting from the hotstart virtual void solveFromHotStart(); /// Delete the snapshot virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem information methods These methods call the solver's query routines to return information about the problem referred to by the current object. Querying a problem that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /**@name Methods related to querying the input data */ //@{ /// Get number of columns virtual int getNumCols() const; /// Get number of rows virtual int getNumRows() const; /// Get number of nonzero elements virtual int getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds virtual const double *getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds virtual const double *getColUpper() const; /** Get pointer to array[getNumRows()] of row constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ virtual const char *getRowSense() const; /** Get pointer to array[getNumRows()] of rows right-hand sides
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ virtual const double *getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges.
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
*/ virtual const double *getRowRange() const; /// Get pointer to array[getNumRows()] of row lower bounds virtual const double *getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds virtual const double *getRowUpper() const; /// Get pointer to array[getNumCols()] of objective function coefficients virtual const double *getObjCoefficients() const; /// Get objective function sense (1 for min (default), -1 for max) virtual double getObjSense() const; /// Return true if column is continuous virtual bool isContinuous(int colNumber) const; #if 0 /// Return true if column is binary virtual bool isBinary(int columnNumber) const; /** Return true if column is integer. Note: This function returns true if the the column is binary or a general integer. */ virtual bool isInteger(int columnNumber) const; /// Return true if column is general integer virtual bool isIntegerNonBinary(int columnNumber) const; /// Return true if column is binary and not fixed at either bound virtual bool isFreeBinary(int columnNumber) const; #endif /// Get pointer to row-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByRow() const; /// Get pointer to column-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByCol() const; /// Get solver's value for infinity virtual double getInfinity() const; //@} /**@name Methods related to querying the solution */ //@{ /// Get pointer to array[getNumCols()] of primal solution vector virtual const double *getColSolution() const; /// Get pointer to array[getNumRows()] of dual prices virtual const double *getRowPrice() const; /// Get a pointer to array[getNumCols()] of reduced costs virtual const double *getReducedCost() const; /** Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector */ virtual const double *getRowActivity() const; /// Get objective function value virtual double getObjValue() const; /** Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver. */ virtual int getIterationCount() const; /** Get as many dual rays as the solver can provide. (In case of proven primal infeasibility there should be at least one.) The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumRows() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getDualRays(int maxNumRays, bool fullRay = false) const; /** Get as many primal rays as the solver can provide. (In case of proven dual infeasibility there should be at least one.) NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumCols() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getPrimalRays(int maxNumRays) const; #if 0 /** Get vector of indices of solution which are integer variables presently at fractional values */ virtual OsiVectorInt getFractionalIndices(const double etol=1.e-05) const; #endif //@} //@} //--------------------------------------------------------------------------- /**@name Problem modifying methods */ //@{ //------------------------------------------------------------------------- /**@name Changing bounds on variables and constraints */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff(int elementIndex, double elementValue); /** Set a single column lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setColLower(int elementIndex, double elementValue); /** Set a single column upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setColUpper(int elementIndex, double elementValue); /** Set a single column lower and upper bound
The default implementation just invokes setColLower and setColUpper */ virtual void setColBounds(int elementIndex, double lower, double upper); #if 0 // we are using the default implementation of OsiSolverInterface /** Set the bounds on a number of columns simultaneously
The default implementation just invokes setCollower and setColupper over and over again. @param [indexfirst,indexLast) contains the indices of the constraints whose either bound changes @param indexList the indices of those variables @param boundList the new lower/upper bound pairs for the variables */ virtual void setColSetBounds(const int* indexFirst, const int* indexLast, const double* boundList); #endif /** Set a single row lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setRowLower(int elementIndex, double elementValue); /** Set a single row upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setRowUpper(int elementIndex, double elementValue); /** Set a single row lower and upper bound
The default implementation just invokes setRowUower and setRowUpper */ virtual void setRowBounds(int elementIndex, double lower, double upper); /** Set the type of a single row
*/ virtual void setRowType(int index, char sense, double rightHandSide, double range); #if 0 // we are using the default implementation of OsiSolverInterface /** Set the bounds on a number of rows simultaneously
The default implementation just invokes setRowlower and setRowupper over and over again. @param [indexfirst,indexLast) contains the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the constraints */ virtual void setRowSetBounds(const int* indexFirst, const int* indexLast, const double* boundList); /** Set the type of a number of rows simultaneously
The default implementation just invokes setRowtype and over and over again. @param [indexfirst,indexLast) contains the indices of the constraints whose type changes @param senseList the new senses @param rhsList the new right hand sides @param rangeList the new ranges */ virtual void setRowSetTypes(const int* indexFirst, const int* indexLast, const char* senseList, const double* rhsList, const double* rangeList); #endif //@} //------------------------------------------------------------------------- /**@name Integrality related changing methods */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index); /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index); #if 0 // we are using the default implementation of OsiSolverInterface /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int* indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int* indices, int len); #endif //@} //------------------------------------------------------------------------- /// Set objective function sense (1 for min (default), -1 for max,) virtual void setObjSense(double s); /** Set the primal solution column values colsol[numcols()] is an array of values of the problem column variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of colsol() until changed by another call to setColsol() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double *colsol); /** Set dual solution vector rowprice[numrows()] is an array of values of the problem row dual variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of rowprice() until changed by another call to setRowprice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double *rowprice); //------------------------------------------------------------------------- /**@name Methods to expand a problem.
Note that if a column is added then by default it will correspond to a continuous variable. */ //@{ /** */ virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj); #if 0 // we are using the default implementation of OsiSolverInterface /** */ virtual void addCols(const int numcols, const CoinPackedVectorBase * const * cols, const double* collb, const double* colub, const double* obj); #endif /** */ virtual void deleteCols(const int num, const int *colIndices); /** */ virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub); /** */ virtual void addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng); #if 0 // we are using the default implementation of OsiSolverInterface /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase * const * rows, const double* rowlb, const double* rowub); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase * const * rows, const char* rowsen, const double* rowrhs, const double* rowrng); #endif /** */ virtual void deleteRows(const int num, const int *rowIndices); #if 0 // we are using the default implementation of OsiSolverInterface \ //----------------------------------------------------------------------- /** Apply a collection of cuts.
Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.numberIneffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.numberInconsistent() -- number of invalid cuts
  • ReturnCode.numberInconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.numberInfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.numberApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == numberIneffective() + numberInconsistent() + numberInconsistentWrtIntegerModel() + numberInfeasible() + nubmerApplied()
*/ virtual ApplyCutsReturnCode applyCuts(const OsiCuts & cs, double effectivenessLb = 0.0); #endif //@} //@} //--------------------------------------------------------------------------- /**@name Methods to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by lower and upper bounds). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub); /** Load in an problem by copying the arguments (the constraints on the rows are given by sense/rhs/range triplets). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by sense/rhs/range triplets). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); /** Read an mps file from the given filename */ virtual int readMps(const char *filename, const char *extension = "mps"); /** Write the problem into an mps file of the given filename. If objSense is non zero then -1.0 forces the code to write a maximization objective and +1.0 to write a minimization one. If 0.0 then solver can do what it wants */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense = 0.0) const; //@} //--------------------------------------------------------------------------- /**@name Constructors and destructor */ //@{ /// Default Constructor OsiSpxSolverInterface(); /// Clone virtual OsiSolverInterface *clone(bool copyData = true) const; /// Copy constructor OsiSpxSolverInterface(const OsiSpxSolverInterface &); /// Assignment operator OsiSpxSolverInterface &operator=(const OsiSpxSolverInterface &rhs); /// Destructor virtual ~OsiSpxSolverInterface(); //@} enum keepCachedFlag { /// discard all cached data (default) KEEPCACHED_NONE = 0, /// column information: objective values, lower and upper bounds, variable types KEEPCACHED_COLUMN = 1, /// row information: right hand sides, ranges and senses, lower and upper bounds for row KEEPCACHED_ROW = 2, /// problem matrix: matrix ordered by column and by row KEEPCACHED_MATRIX = 4, /// LP solution: primal and dual solution, reduced costs, row activities KEEPCACHED_RESULTS = 8, /// only discard cached LP solution KEEPCACHED_PROBLEM = KEEPCACHED_COLUMN | KEEPCACHED_ROW | KEEPCACHED_MATRIX, /// keep all cached data (similar to getMutableLpPtr()) KEEPCACHED_ALL = KEEPCACHED_PROBLEM | KEEPCACHED_RESULTS, /// free only cached column and LP solution information FREECACHED_COLUMN = KEEPCACHED_PROBLEM & ~KEEPCACHED_COLUMN, /// free only cached row and LP solution information FREECACHED_ROW = KEEPCACHED_PROBLEM & ~KEEPCACHED_ROW, /// free only cached matrix and LP solution information FREECACHED_MATRIX = KEEPCACHED_PROBLEM & ~KEEPCACHED_MATRIX, /// free only cached LP solution information FREECACHED_RESULTS = KEEPCACHED_ALL & ~KEEPCACHED_RESULTS }; soplex::SoPlex *getLpPtr(int keepCached = KEEPCACHED_NONE); soplex::SPxOut *getSPxOut() { return spxout_; } protected: /**@name Protected methods */ //@{ /// Apply a row cut. Return true if cut was applied. virtual void applyRowCut(const OsiRowCut &rc); /** Apply a column cut (bound adjustment). Return true if cut was applied. */ virtual void applyColCut(const OsiColCut &cc); //@} /**@name Protected member data */ //@{ /// SoPlex output object soplex::SPxOut *spxout_; /// SoPlex solver object soplex::SoPlex *soplex_; //@} private: /**@name Private methods */ //@{ /// free cached column rim vectors void freeCachedColRim(); /// free cached row rim vectors void freeCachedRowRim(); /// free cached result vectors void freeCachedResults(); /// free cached matrices void freeCachedMatrix(); /// free all cached data (except specified entries, see getLpPtr()) void freeCachedData(int keepCached = KEEPCACHED_NONE); /// free all allocated memory void freeAllMemory(); //@} /**@name Private member data */ //@{ /// indices of integer variables soplex::DIdxSet *spxintvars_; /// Hotstart information void *hotStartCStat_; int hotStartCStatSize_; void *hotStartRStat_; int hotStartRStatSize_; int hotStartMaxIteration_; /**@name Cached information derived from the SoPlex model */ //@{ /// Pointer to objective Vector mutable soplex::DVector *obj_; /// Pointer to dense vector of row sense indicators mutable char *rowsense_; /// Pointer to dense vector of row right-hand side values mutable double *rhs_; /// Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows) mutable double *rowrange_; /// Pointer to primal solution vector mutable soplex::DVector *colsol_; /// Pointer to dual solution vector mutable soplex::DVector *rowsol_; /// Pointer to reduced cost vector mutable soplex::DVector *redcost_; /// Pointer to row activity (slack) vector mutable soplex::DVector *rowact_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByRow_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByCol_; //@} //@} }; //############################################################################# /** A function that tests the methods in the OsiSpxSolverInterface class. */ void OsiSpxSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiSpx/osi-soplex-uninstalled.pc.in0000644000175200017520000000046311573154674021214 0ustar coincoinprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiSpx Name: OsiSoplex Description: COIN-OR Open Solver Interface for SoPlex URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiSpx.la @OSISPXLIB_PCLIBS@ Cflags: -I@abs_source_dir@/src/OsiSpx Requires: osi @OSISPXLIB_PCREQUIRES@ DyLP-1.10.4/Osi/src/OsiSpx/osi-soplex.pc.in0000644000175200017520000000051211564020404016646 0ustar coincoinprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiSoplex Description: COIN-OR Open Solver Interface for SoPlex URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiSpx @OSISPXLIB_PCLIBS@ Cflags: -I${includedir} Requires: osi @OSISPXLIB_PCREQUIRES@ DyLP-1.10.4/Osi/src/OsiSpx/Makefile.am0000644000175200017520000000317413200225426015656 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 2111 2017-11-07 03:40:06Z tkr $ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiSpx # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiSpx.la # List all source files for this library, including headers libOsiSpx_la_SOURCES = OsiSpxSolverInterface.cpp OsiSpxSolverInterface.hpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiSpx_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la endif # This is for libtool libOsiSpx_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../Osi` $(COINUTILS_CFLAGS) $(SOPLEX_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiSpxSolverInterface.hpp DyLP-1.10.4/Osi/src/OsiGlpk/0000755000175200017520000000000013434203623013744 5ustar coincoinDyLP-1.10.4/Osi/src/OsiGlpk/format-source.sh0000755000175200017520000000100313414504306017063 0ustar coincoin# script to format source code and include (if not included yet), # vim formatting settings (which are automatically loaded by vim) # Haroldo - 2019 for file in *.[ch]pp; do sourceName=`basename $file` echo formatting "$sourceName" clang-format -i -style=file $file # adding vim modeline if not included yet if ! grep -q "/* vi: softtabstop=" $file; then echo '' >> $file echo '/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2' >> $file echo '*/' >> $file fi done DyLP-1.10.4/Osi/src/OsiGlpk/Makefile.in0000644000175200017520000005527212502175645016033 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = src/OsiGlpk DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsiGlpk_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) \ @DEPENDENCY_LINKING_TRUE@ ../Osi/libOsi.la am_libOsiGlpk_la_OBJECTS = OsiGlpkSolverInterface.lo libOsiGlpk_la_OBJECTS = $(am_libOsiGlpk_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsiGlpk_la_SOURCES) DIST_SOURCES = $(libOsiGlpk_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiGlpk # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiGlpk.la # List all source files for this library, including headers libOsiGlpk_la_SOURCES = \ OsiGlpkSolverInterface.cpp OsiGlpkSolverInterface.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsiGlpk_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la # This is for libtool libOsiGlpk_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../Osi` $(COINUTILS_CFLAGS) $(GLPK_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiGlpkSolverInterface.hpp 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/OsiGlpk/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/OsiGlpk/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 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsiGlpk.la: $(libOsiGlpk_la_OBJECTS) $(libOsiGlpk_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsiGlpk_la_LDFLAGS) $(libOsiGlpk_la_OBJECTS) $(libOsiGlpk_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiGlpkSolverInterface.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: 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: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags 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-exec \ install-exec-am install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ 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 uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES # 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: DyLP-1.10.4/Osi/src/OsiGlpk/OsiGlpkSolverInterface.cpp0000644000175200017520000027247213414504306021052 0ustar coincoin//----------------------------------------------------------------------------- // name: OSI Interface for GLPK //----------------------------------------------------------------------------- // Copyright (C) 2001, 2002 Vivian De Smedt // Copyright (C) 2002, 2003 Braden Hunsaker // Copyright (C) 2003, 2004 University of Pittsburgh // Copyright (C) 2004 Joseph Young // Copyright (C) 2007 Lou Hafer // University of Pittsburgh coding done by Brady Hunsaker // All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). // // Comments: // // Areas that may need work in the code are marked with '???'. // // As of version 4.7, GLPK problems can be of class LPX_LP or LPX_MIP. // The difference is that LPX_MIP problems have a separate MIP data block, // and certain functions are only allowed for LPX_MIP problems. // // In (much) earlier versions of GLPK, if an LPX_MIP problem was // changed back into a LPX_LP problem, then the MIP data was lost, // including which columns are integer. However, LPX_MIP problems // still had access to LP information (like lpx_get_status). // // It appears that this behavior is no longer true in version 4.7. // Therefore it may be worthwhile to adjust the interface to change // the class of the problem as needed. For the time being, however, // all OSI problems are set to type LPX_MIP. The only trick is // differentiating when the user calls status routines like // isProvenOptimal(). For now, we assume that the user is referring // to the most recent solution call. We add an extra variable, // bbWasLast_, to the class to record which solution call was most // recent (lp or mip). // // Possible areas of improvement // ----------------------------- // // Methods that are not implemented: // // getPrimalRays, getDualRays // // Methods that are implemented, but do not do what you probably expect: // // setColSolution, setRowPrice // // Many methods have not been attempted to be improved (for speed) // to take advantage of how GLPK works. The emphasis has been on // making things functional and not too messy. There's plenty of room // for more efficient implementations. // /* Various bits and pieces of knowledge that are handy when working on OsiGlpk. Glpk uses 1-based indexing. Be careful. Primal and dual solutions may be set by the user. This means that getColSolution and getRowPrice are obliged to return the cached solution vector whenever it's available. Various other routines which calculate values based on primal and dual solutions must also use the cached vectors. On the other hand, we don't want to be rebuilding the cache with every call to the solver. The approach is that a call to the solver removes the cached values. Subsequent calls to retrieve solution values will repopulate the cache by interrogating glpk. */ #include #include #include #include #include extern "C" { #include "glpk.h" } #ifndef GLP_PROB_DEFINED #define GLP_PROB_DEFINED #endif #include "CoinError.hpp" #include "CoinPragma.hpp" #include "OsiConfig.h" #include "OsiGlpkSolverInterface.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" /* Grab the COIN standard finite infinity from CoinFinite.hpp. Also set a zero tolerance, so we can set clean zeros in computed reduced costs and row activities. The value 1.0e-9 is lifted from glpk --- this is the value that it uses when the LPX_K_ROUND parameter is active. */ #include "CoinFinite.hpp" namespace { const double CoinInfinity = COIN_DBL_MAX; const double GlpkZeroTol = 1.0e-9; } /* Cut names down to a reasonable size. */ #define OGSI OsiGlpkSolverInterface /* A few defines to control execution tracing. OGSI_TRACK_SOLVERS track creation, copy, deletion of OGSI objects OGSI_TRACK_FRESH track how a solution is made stale/fresh OGSI_VERBOSITY enables warnings when > 0; probably should be converted to honest messages for message handler */ #define OGSI_TRACK_SOLVERS 0 #define OGSI_TRACK_FRESH 0 #define OGSI_VERBOSITY 0 //############################################################################# // File-local methods //############################################################################# namespace { /* Convenience routine for generating error messages. Who knows, maybe it'll get used eventually :-). */ inline void checkGLPKerror(int err, std::string glpkfuncname, std::string osimethod) { if (err != 0) { char s[100]; sprintf(s, "%s returned error %d", glpkfuncname.c_str(), err); std::cout << "ERROR: " << s << " (" << osimethod << " in OsiGlpkSolverInterface)" << std::endl; throw CoinError(s, osimethod.c_str(), "OsiGlpkSolverInterface"); } return; } } // end file-local namespace //############################################################################# // Solve methods //############################################################################# /* Solve an LP from scratch. */ void OGSI::initialSolve() { #if OGSI_TRACK_FRESH > 0 std::cout << "OGSI(" << std::hex << this << std::dec << ")::initialSolve." << std::endl; #endif LPX *model = getMutableModelPtr(); /* Prep. Toss any cached solution information. */ freeCachedData(OGSI::FREECACHED_RESULTS); /* Solve the lp. */ int err = lpx_simplex(model); // for Glpk, a solve fails if the initial basis is invalid or singular // thus, we construct a (advanced) basis first and try again #ifdef LPX_E_BADB if (err == LPX_E_BADB) { lpx_adv_basis(model); err = lpx_simplex(model); } else #endif if (err == LPX_E_SING || err == LPX_E_FAULT) { lpx_adv_basis(model); err = lpx_simplex(model); } iter_used_ = lpx_get_int_parm(model, LPX_K_ITCNT); /* Sort out the various state indications. When the presolver is turned on, lpx_simplex() will not be able to tell whether the objective function has hit it's upper or lower limit, and does not return OBJLL or OBJUL. The code for these cases should be beefed up to check the objective against the limit. The codes NOPFS and NODFS are returned only when the presolver is used. If we ever reach the default case, we're deeply confused. */ isIterationLimitReached_ = false; isTimeLimitReached_ = false; isAbandoned_ = false; isPrimInfeasible_ = false; isDualInfeasible_ = false; isFeasible_ = false; isObjLowerLimitReached_ = false; isObjUpperLimitReached_ = false; switch (err) { case LPX_E_OK: { break; } case LPX_E_ITLIM: { isIterationLimitReached_ = true; break; } case LPX_E_OBJLL: { isObjLowerLimitReached_ = true; break; } case LPX_E_OBJUL: { isObjUpperLimitReached_ = true; break; } case LPX_E_TMLIM: { isTimeLimitReached_ = true; } // no break here, so we still report abandoned case LPX_E_FAULT: case LPX_E_SING: #ifdef LPX_E_BADB case LPX_E_BADB: #endif { isAbandoned_ = true; break; } case LPX_E_NOPFS: { isPrimInfeasible_ = true; break; } case LPX_E_NODFS: { isDualInfeasible_ = true; break; } default: { assert(false); } } switch (lpx_get_status(model)) { case LPX_OPT: case LPX_FEAS: { isFeasible_ = true; break; } default: { } } // Record that simplex was most recent bbWasLast_ = 0; return; } //----------------------------------------------------------------------------- void OGSI::resolve() { #if OGSI_TRACK_FRESH > 0 std::cout << "OGSI(" << std::hex << this << std::dec << ")::resolve." << std::endl; #endif LPX *model = getMutableModelPtr(); freeCachedData(OGSI::FREECACHED_RESULTS); // lpx_simplex will use the current basis if possible int err = lpx_simplex(model); // for Glpk, a solve fails if the initial basis is invalid or singular // thus, we construct a (advanced) basis first and try again #ifdef LPX_E_BADB if (err == LPX_E_BADB) { lpx_adv_basis(model); err = lpx_simplex(model); } else #endif if (err == LPX_E_SING || err == LPX_E_FAULT) { lpx_adv_basis(model); err = lpx_simplex(model); } iter_used_ = lpx_get_int_parm(model, LPX_K_ITCNT); isIterationLimitReached_ = false; isTimeLimitReached_ = false; isAbandoned_ = false; isObjLowerLimitReached_ = false; isObjUpperLimitReached_ = false; isPrimInfeasible_ = false; isDualInfeasible_ = false; isFeasible_ = false; switch (err) { case LPX_E_OK: { break; } case LPX_E_ITLIM: { isIterationLimitReached_ = true; break; } case LPX_E_OBJLL: { isObjLowerLimitReached_ = true; break; } case LPX_E_OBJUL: { isObjUpperLimitReached_ = true; break; } case LPX_E_TMLIM: { isTimeLimitReached_ = true; } // no break here, so we still report abandoned case LPX_E_FAULT: case LPX_E_SING: #ifdef LPX_E_BADB case LPX_E_BADB: #endif { isAbandoned_ = true; break; } case LPX_E_NOPFS: { isPrimInfeasible_ = true; break; } case LPX_E_NODFS: { isDualInfeasible_ = true; break; } default: { assert(false); } } switch (lpx_get_status(model)) { case LPX_OPT: case LPX_FEAS: { isFeasible_ = true; break; } default: { } } // Record that simplex was most recent bbWasLast_ = 0; return; } //----------------------------------------------------------------------------- /* Call glpk's built-in MIP solver. Any halfway recent version (from glpk 4.4, at least) will have lpx_intopt, a branch-and-cut solver. The presence of cut generators is more recent. */ void OGSI::branchAndBound() { LPX *model = getMutableModelPtr(); /* Destroy cached data. */ freeCachedData(OGSI::FREECACHED_RESULTS); /* Assuming we have integer variables in the model, call the best MIP solver we can manage. lpx_intopt does not require an optimal LP solution as a starting point, so we can call it directly. lpx_integer needs an initial optimal solution to the relaxation. */ if (lpx_get_num_int(model)) { int err = LPX_E_FAULT; #ifdef GLPK_HAS_INTOPT err = lpx_intopt(model); #else if (lpx_get_status(model) != LPX_OPT) { initialSolve(); } err = lpx_integer(model); #endif /* We have a result. What is it? Start with a positive attitude and revise as needed. The various LPX_E_* and LPX_I_* defines are stable back as far as glpk-4.4. When we get LPX_E_OK (MIP terminated normally), we need to look more closely. LPX_I_OPT indicates a proven optimal integer solution. LPX_I_NOFEAS indicates that there is no integer feasible solution. LPX_I_UNDEF says the MIP solution is undefined. LPX_I_FEAS says that in integer feasible solution was found but not proven optimal (termination of search due to some limit is the common cause). It's not clear what to do with LPX_I_UNDEF; currently, it is not really reflected in termination status. LPX_I_FEAS is reflected by the OsiGlpk specific method isFeasible(). Various other codes are returned by lpx_intopt (lpx_integer returns a subset of these). LPX_E_NOPFS (LPX_E_NODFS) indicate no primal (dual) feasible solution; detected at the root, either by presolve or when attempting the root relaxation. LPX_E_ITLIM (LPX_E_TMLIM) indicate iteration (time) limit reached. Osi doesn't provide for time limit, so lump it in with iteration limit (an arguable choice, but seems better than the alternatives) and have extra method isTimeLimitReached(). LPX_E_SING (lp solver failed due to singular basis) is legimately characterised as abandoned. LPX_E_FAULT indicates a structural problem (problem not of class MIP, or an integer variable has a non-integer bound), which really translates into internal confusion in OsiGlpk. Previous comments expressed uncertainty about the iteration count. This should be checked at some point. -- lh, 070709 -- */ iter_used_ = lpx_get_int_parm(model, LPX_K_ITCNT); isIterationLimitReached_ = false; isTimeLimitReached_ = false; isAbandoned_ = false; isPrimInfeasible_ = false; isDualInfeasible_ = false; isFeasible_ = false; isObjLowerLimitReached_ = false; isObjUpperLimitReached_ = false; switch (err) { case LPX_E_OK: #ifdef LPX_E_MIPGAP case LPX_E_MIPGAP: #endif { break; } case LPX_E_NOPFS: { isPrimInfeasible_ = true; break; } case LPX_E_NODFS: { isDualInfeasible_ = true; break; } case LPX_E_TMLIM: { isTimeLimitReached_ = true; } // no break case LPX_E_ITLIM: { isIterationLimitReached_ = true; break; } case LPX_E_SING: { isAbandoned_ = true; break; } case LPX_E_FAULT: { assert(false); break; } default: { assert(false); break; } } //check this also if err!=LPX_E_OPT, so we know about feasibility in case time/resource limit is reached int mip_status = lpx_mip_status(model); switch (mip_status) { case LPX_I_OPT: { isFeasible_ = true; break; } case LPX_I_NOFEAS: { isPrimInfeasible_ = true; break; } case LPX_I_UNDEF: { break; } case LPX_I_FEAS: { isFeasible_ = true; break; } default: { assert(false); break; } } /* The final action is to note that our last call to glpk was the MIP solver. */ bbWasLast_ = 1; } /* Not a MIP (no integer variables). Call the LP solver. Since we can call branchAndBound with no initial LP solution, initialSolve is appropriate here. (But for glpk, it actually makes no difference --- lpx_simplex makes the decision on how to proceed.) */ else { initialSolve(); } return; } //############################################################################# // Parameter related methods //############################################################################# /* When we set parameters, we have to stash them locally as well as pushing them into the LPX object. The trouble comes when loading a new problem. If the LPX object is already loaded with a problem, the easiest approach is to simply delete it and start fresh. But then we lose all the parameters that are held in the LPX object. By keeping a copy, we have a way to recover. Really, we should be keeping these values in the OSI base class arrays, but the amount of storage involved is too small to provide motivation to change from the present setup. */ bool OGSI::setIntParam(OsiIntParam key, int value) { bool retval = false; switch (key) { case OsiMaxNumIteration: { if (value >= 0) { maxIteration_ = value; lpx_set_int_parm(lp_, LPX_K_ITLIM, value); retval = true; } else { retval = false; } break; } case OsiMaxNumIterationHotStart: { if (value >= 0) { hotStartMaxIteration_ = value; retval = true; } else { retval = false; } break; } case OsiNameDiscipline: { if (value < 0 || value > 3) { retval = false; } else { nameDisc_ = value; retval = true; } break; } case OsiLastIntParam: { retval = false; break; } } return (retval); } //----------------------------------------------------------------------------- /* Self-protection is required here --- glpk will fault if handed a value it doesn't like. */ bool OGSI::setDblParam(OsiDblParam key, double value) { bool retval = false; switch (key) { case OsiDualObjectiveLimit: // as of 4.7, GLPK only uses this if it does dual simplex { dualObjectiveLimit_ = value; if (getObjSense() == 1) // minimization { lpx_set_real_parm(lp_, LPX_K_OBJUL, value); } else // maximization { lpx_set_real_parm(lp_, LPX_K_OBJLL, value); } retval = true; break; } case OsiPrimalObjectiveLimit: // as of 4.7, GLPK only uses this if it does dual simplex { primalObjectiveLimit_ = value; if (getObjSense() == 1) { lpx_set_real_parm(lp_, LPX_K_OBJLL, value); } else { lpx_set_real_parm(lp_, LPX_K_OBJUL, value); } retval = true; break; } case OsiDualTolerance: { if (value >= 0 && value <= .001) { dualTolerance_ = value; lpx_set_real_parm(lp_, LPX_K_TOLDJ, value); retval = true; } else { retval = false; } break; } case OsiPrimalTolerance: { if (value >= 0 && value <= .001) { primalTolerance_ = value; lpx_set_real_parm(lp_, LPX_K_TOLBND, value); retval = true; } else { retval = false; } break; } case OsiObjOffset: { objOffset_ = value; lpx_set_obj_coef(lp_, 0, value); retval = true; break; } case OsiLastDblParam: { retval = false; break; } } return (retval); } //----------------------------------------------------------------------------- bool OGSI::setStrParam(OsiStrParam key, const std::string &value) { bool retval = false; switch (key) { case OsiProbName: { probName_ = value; if (probName_.length() == 0) probName_ = "Pb"; lpx_set_prob_name(lp_, const_cast< char * >(value.c_str())); retval = true; break; } case OsiSolverName: { retval = true; break; } case OsiLastStrParam: { break; } } return (retval); } //----------------------------------------------------------------------------- namespace { /*! A helper routine to deal with hints where glpk lacks any flexibility --- the facility is unimplemented, or always on. Failure is defined as OsiForceDo in the wrong direction; in this case an error is thrown. If the routine returns, then either the hint is compatible with glpk's capabilities, or it can be ignored. */ void unimp_hint(CoinMessageHandler *hdl, bool glpkSense, bool hintSense, OsiHintStrength hintStrength, const char *msgString) { if (glpkSense != hintSense) { std::string message = "glpk "; if (glpkSense == true) { message += "cannot disable "; } else { message += "does not support "; } message += msgString; *hdl << message << CoinMessageEol; if (hintStrength == OsiForceDo) { throw CoinError(message, "setHintParam", "OsiDylpSolverInterface"); } } return; } } // end file-local namespace bool OGSI::setHintParam(OsiHintParam key, bool sense, OsiHintStrength strength, void *info) /* OSI provides arrays for the sense and strength. OGSI provides the array for info. */ { bool retval = false; CoinMessageHandler *msgHdl = messageHandler(); /* Check for out of range. */ if (key >= OsiLastHintParam) return (false); /* Set the hint in the OSI structures. Unlike the other set*Param routines, setHintParam will return false for key == OsiLastHintParam. Unfortunately, it'll also throw for strength = OsiForceDo, without setting a return value. We need to catch that throw. */ try { retval = OsiSolverInterface::setHintParam(key, sense, strength); } catch (CoinError &) { retval = (strength == OsiForceDo); } if (retval == false) return (false); info_[key] = info; /* Did the client say `ignore this'? Who are we to argue. */ if (strength == OsiHintIgnore) return (true); /* We have a valid hint which would be impolite to simply ignore. Deal with it as best we can. But say something if we're ignoring the hint. This is under construction. For the present, we don't distinguish between initial solve and resolve. */ switch (key) { case OsiDoPresolveInInitial: case OsiDoPresolveInResolve: { if (sense == false) { if (strength >= OsiHintTry) lpx_set_int_parm(lp_, LPX_K_PRESOL, 0); } else { lpx_set_int_parm(lp_, LPX_K_PRESOL, 1); } retval = true; break; } case OsiDoDualInInitial: case OsiDoDualInResolve: { unimp_hint(msgHdl, false, sense, strength, "exclusive use of dual simplex"); if (sense == false) { if (strength >= OsiHintDo) lpx_set_int_parm(lp_, LPX_K_DUAL, 0); } else { lpx_set_int_parm(lp_, LPX_K_DUAL, 1); } retval = true; break; } case OsiDoCrash: { unimp_hint(msgHdl, false, sense, strength, "basis crash"); retval = true; break; } case OsiDoInBranchAndCut: { unimp_hint(msgHdl, false, sense, strength, "do in branch and cut"); retval = true; break; } /* 0 is no scaling, 3 is geometric mean followed by equilibration. */ case OsiDoScale: { if (sense == false) { if (strength >= OsiHintTry) lpx_set_int_parm(lp_, LPX_K_SCALE, 0); } else { lpx_set_int_parm(lp_, LPX_K_SCALE, 3); } retval = true; break; } /* Glpk supports four levels, 0 (no output), 1 (errors only), 2 (normal), and 3 (normal plus informational). */ case OsiDoReducePrint: { if (sense == true) { if (strength <= OsiHintTry) { lpx_set_int_parm(lp_, LPX_K_MSGLEV, 1); } else { lpx_set_int_parm(lp_, LPX_K_MSGLEV, 0); } } else { if (strength <= OsiHintTry) { lpx_set_int_parm(lp_, LPX_K_MSGLEV, 2); } else { lpx_set_int_parm(lp_, LPX_K_MSGLEV, 3); } } int logLevel = lpx_get_int_parm(lp_, LPX_K_MSGLEV); messageHandler()->setLogLevel(logLevel); retval = true; break; } /* The OSI spec says that unimplemented options (and, by implication, hints) should return false. In the case of a hint, however, we can ignore anything except OsiForceDo, so usability says we should anticipate new hints and set this up so the solver doesn't break. So return true. */ default: { unimp_hint(msgHdl, !sense, sense, strength, "unrecognized hint"); retval = true; break; } } return (retval); } //----------------------------------------------------------------------------- bool OGSI::getIntParam(OsiIntParam key, int &value) const { bool retval = false; switch (key) { case OsiMaxNumIteration: value = maxIteration_; retval = true; break; case OsiMaxNumIterationHotStart: value = hotStartMaxIteration_; retval = true; break; case OsiNameDiscipline: value = nameDisc_; retval = true; break; case OsiLastIntParam: retval = false; break; } return retval; } //----------------------------------------------------------------------------- bool OGSI::getDblParam(OsiDblParam key, double &value) const { bool retval = false; switch (key) { case OsiDualObjectiveLimit: value = dualObjectiveLimit_; retval = true; break; case OsiPrimalObjectiveLimit: value = primalObjectiveLimit_; retval = true; break; case OsiDualTolerance: value = dualTolerance_; retval = true; break; case OsiPrimalTolerance: value = primalTolerance_; retval = true; break; case OsiObjOffset: value = lpx_get_obj_coef(getMutableModelPtr(), 0); retval = true; break; case OsiLastDblParam: retval = false; break; } return retval; } bool OGSI::getStrParam(OsiStrParam key, std::string &value) const { // bool retval = false; switch (key) { case OsiProbName: value = lpx_get_prob_name(getMutableModelPtr()); break; case OsiSolverName: value = "glpk"; break; case OsiLastStrParam: return false; } return true; } //############################################################################# // Methods returning info on how the solution process terminated //############################################################################# bool OGSI::isAbandoned() const { return isAbandoned_; } bool OGSI::isProvenOptimal() const { LPX *model = getMutableModelPtr(); if (bbWasLast_ == 0) { int stat = lpx_get_status(model); return stat == LPX_OPT; } else { int stat = lpx_mip_status(model); return stat == LPX_I_OPT; } } bool OGSI::isProvenPrimalInfeasible() const { LPX *model = getMutableModelPtr(); if (isPrimInfeasible_ == true) return true; if (bbWasLast_ == 0) return lpx_get_prim_stat(model) == LPX_P_NOFEAS; else return lpx_mip_status(model) == LPX_I_NOFEAS; } bool OGSI::isProvenDualInfeasible() const { LPX *model = getMutableModelPtr(); if (isDualInfeasible_ == true) return true; if (bbWasLast_ == 0) return lpx_get_dual_stat(model) == LPX_D_NOFEAS; else // Not sure what to do for MIPs; does it just mean unbounded? // ??? for now, return false return false; } /* This should return true if the solver stopped on the primal limit, or if the current objective is better than the primal limit. getObjSense == 1 is minimisation, -1 is maximisation. */ bool OGSI::isPrimalObjectiveLimitReached() const { bool retval = false; double obj = getObjValue(); double objlim; getDblParam(OsiPrimalObjectiveLimit, objlim); if (getObjSense() == 1) { if (isObjLowerLimitReached_ || obj < objlim) { retval = true; } } else { if (isObjUpperLimitReached_ || obj > objlim) { retval = true; } } return (retval); } /* This should return true if the solver stopped on the dual limit, or if the current objective is worse than the dual limit. */ bool OGSI::isDualObjectiveLimitReached() const { bool retval = false; double obj = getObjValue(); double objlim; getDblParam(OsiDualObjectiveLimit, objlim); if (getObjSense() == 1) { if (isObjUpperLimitReached_ || obj > objlim) { retval = true; } } else { if (isObjLowerLimitReached_ || obj < objlim) { retval = true; } } return (retval); } bool OGSI::isIterationLimitReached() const { return isIterationLimitReached_; } bool OGSI::isTimeLimitReached() const { return isTimeLimitReached_; } bool OGSI::isFeasible() const { return isFeasible_; } //############################################################################# // WarmStart related methods //############################################################################# /* Return a warm start object matching the current state of the solver. Nonbasic fixed variables (LPX_NS) are translated to CWSB::atLowerBound. */ CoinWarmStart *OGSI::getWarmStart() const { /* Create an empty basis and size it to the correct dimensions. */ CoinWarmStartBasis *ws = new CoinWarmStartBasis(); int numcols = getNumCols(); int numrows = getNumRows(); ws->setSize(numcols, numrows); /* Walk the rows. Retrieve the status information from the glpk model and store it in the CWSB object. The convention in Osi regarding the status of a row when on bounds is different from Glpk. Thus, Glpk's at-lower-bound will be mapped to Osi's at-upper-bound and Glpk's at-upper-bound will be mapped to Osi's at-lower-bound. */ for (int i = 0; i < numrows; i++) { int stati = lpx_get_row_stat(lp_, i + 1); switch (stati) { case LPX_BS: { ws->setArtifStatus(i, CoinWarmStartBasis::basic); break; } case LPX_NS: case LPX_NL: { ws->setArtifStatus(i, CoinWarmStartBasis::atUpperBound); break; } case LPX_NU: { ws->setArtifStatus(i, CoinWarmStartBasis::atLowerBound); break; } case LPX_NF: { ws->setArtifStatus(i, CoinWarmStartBasis::isFree); break; } default: { assert(false); break; } } } /* And repeat for the columns. */ for (int j = 0; j < numcols; j++) { int statj = lpx_get_col_stat(lp_, j + 1); switch (statj) { case LPX_BS: { ws->setStructStatus(j, CoinWarmStartBasis::basic); break; } case LPX_NS: case LPX_NL: { ws->setStructStatus(j, CoinWarmStartBasis::atLowerBound); break; } case LPX_NU: { ws->setStructStatus(j, CoinWarmStartBasis::atUpperBound); break; } case LPX_NF: { ws->setStructStatus(j, CoinWarmStartBasis::isFree); break; } default: { assert(false); break; } } } return (ws); } //----------------------------------------------------------------------------- /* Set the given warm start information in the solver. By definition, a null warmstart parameter is interpreted as `refresh warm start information from the solver.' Since OGSI does not cache warm start information, no action is required. The convention in Osi regarding the status of a row when on bounds is different from Glpk. Thus, Osi's at-upper-bound will be mapped to Glpk's at-lower-bound and Osi's at-lower-bound will be mapped to Glpk's at-upper-bound. */ bool OGSI::setWarmStart(const CoinWarmStart *warmstart) { /* If this is a simple refresh request, we're done. */ if (warmstart == 0) { return (true); } /* Check that the parameter is a CWSB of the appropriate size. */ const CoinWarmStartBasis *ws = dynamic_cast< const CoinWarmStartBasis * >(warmstart); if (ws == 0) { return false; } int numcols = ws->getNumStructural(); int numrows = ws->getNumArtificial(); if (numcols != getNumCols() || numrows != getNumRows()) { return (false); } /* Looks like a basis. Translate to the appropriate codes for glpk and install. Row status first (logical/artificial variables), then column status (architectural variables). */ for (int i = 0; i < numrows; i++) { int stati; switch (ws->getArtifStatus(i)) { case CoinWarmStartBasis::basic: { stati = LPX_BS; break; } case CoinWarmStartBasis::atLowerBound: { stati = LPX_NU; break; } case CoinWarmStartBasis::atUpperBound: { stati = LPX_NL; break; } case CoinWarmStartBasis::isFree: { stati = LPX_NF; break; } default: { assert(false); return (false); } } lpx_set_row_stat(lp_, i + 1, stati); } for (int j = 0; j < numcols; j++) { int statj; switch (ws->getStructStatus(j)) { case CoinWarmStartBasis::basic: { statj = LPX_BS; break; } case CoinWarmStartBasis::atLowerBound: { statj = LPX_NL; break; } case CoinWarmStartBasis::atUpperBound: { statj = LPX_NU; break; } case CoinWarmStartBasis::isFree: { statj = LPX_NF; break; } default: { assert(false); return (false); } } lpx_set_col_stat(lp_, j + 1, statj); } return (true); } //############################################################################# // Hotstart related methods (primarily used in strong branching) //############################################################################# void OGSI::markHotStart() { LPX *model = getMutableModelPtr(); int numcols, numrows; numcols = getNumCols(); numrows = getNumRows(); if (numcols > hotStartCStatSize_) { delete[] hotStartCStat_; delete[] hotStartCVal_; delete[] hotStartCDualVal_; hotStartCStatSize_ = static_cast< int >(1.2 * static_cast< double >(numcols)); // get some extra space for future hot starts hotStartCStat_ = new int[hotStartCStatSize_]; hotStartCVal_ = new double[hotStartCStatSize_]; hotStartCDualVal_ = new double[hotStartCStatSize_]; } int j; for (j = 0; j < numcols; j++) { int stat; double val; double dualVal; stat = lpx_get_col_stat(model, j); val = lpx_get_col_prim(model, j); dualVal = lpx_get_col_dual(model, j); hotStartCStat_[j] = stat; hotStartCVal_[j] = val; hotStartCDualVal_[j] = dualVal; } if (numrows > hotStartRStatSize_) { delete[] hotStartRStat_; delete[] hotStartRVal_; delete[] hotStartRDualVal_; hotStartRStatSize_ = static_cast< int >(1.2 * static_cast< double >(numrows)); // get some extra space for future hot starts hotStartRStat_ = new int[hotStartRStatSize_]; hotStartRVal_ = new double[hotStartRStatSize_]; hotStartRDualVal_ = new double[hotStartRStatSize_]; } int i; for (i = 0; i < numrows; i++) { int stat; double val; double dualVal; stat = lpx_get_row_stat(model, i + 1); val = lpx_get_row_prim(model, i + 1); dualVal = lpx_get_row_dual(model, i + 1); hotStartRStat_[i] = stat; hotStartRVal_[i] = val; hotStartRDualVal_[i] = dualVal; } } //----------------------------------------------------------------------------- void OGSI::solveFromHotStart() { #if OGSI_TRACK_FRESH > 0 std::cout << "OGSI(" << std::hex << this << std::dec << ")::solveFromHotStart." << std::endl; #endif LPX *model = getMutableModelPtr(); int numcols, numrows; numcols = getNumCols(); numrows = getNumRows(); assert(numcols <= hotStartCStatSize_); assert(numrows <= hotStartRStatSize_); int j; for (j = 0; j < numcols; j++) { lpx_set_col_stat(model, j + 1, hotStartCStat_[j]); } int i; for (i = 0; i < numrows; i++) { lpx_set_row_stat(model, i + 1, hotStartRStat_[i]); } freeCachedData(OGSI::FREECACHED_RESULTS); int maxIteration = maxIteration_; maxIteration_ = hotStartMaxIteration_; resolve(); maxIteration_ = maxIteration; } //----------------------------------------------------------------------------- void OGSI::unmarkHotStart() { // ??? be lazy with deallocating memory and do nothing here, deallocate memory in the destructor. } //############################################################################# // Problem information methods (original data) //############################################################################# //----------------------------------------------------------------------------- // Get number of rows, columns, elements, ... //----------------------------------------------------------------------------- int OGSI::getNumCols() const { return lpx_get_num_cols(getMutableModelPtr()); } int OGSI::getNumRows() const { return lpx_get_num_rows(getMutableModelPtr()); } CoinBigIndex OGSI::getNumElements() const { return lpx_get_num_nz(getMutableModelPtr()); } //----------------------------------------------------------------------------- // Get pointer to rim vectors //------------------------------------------------------------------ const double *OGSI::getColLower() const { LPX *model = getMutableModelPtr(); if (collower_ == NULL) { assert(colupper_ == NULL); int numcols = getNumCols(); if (numcols > 0) { collower_ = new double[numcols]; colupper_ = new double[numcols]; } double inf = getInfinity(); int i; for (i = 0; i < numcols; i++) { int type; double lb; double ub; type = lpx_get_col_type(model, i + 1); lb = lpx_get_col_lb(model, i + 1); ub = lpx_get_col_ub(model, i + 1); switch (type) { case LPX_FR: lb = -inf; ub = inf; break; case LPX_LO: ub = inf; break; case LPX_UP: lb = -inf; break; case LPX_FX: case LPX_DB: break; default: assert(false); break; } collower_[i] = lb; colupper_[i] = ub; } } return collower_; } //----------------------------------------------------------------------------- const double *OGSI::getColUpper() const { if (colupper_ == NULL) { getColLower(); //assert( colupper_ != NULL ); // Could be null if no columns. } return colupper_; } //----------------------------------------------------------------------------- const char *OGSI::getRowSense() const { // Could be in OsiSolverInterfaceImpl. if (rowsense_ == NULL) { assert(rhs_ == NULL && rowrange_ == NULL); int numrows = getNumRows(); if (numrows > 0) { rowsense_ = new char[numrows]; rhs_ = new double[numrows]; rowrange_ = new double[numrows]; } const double *rowlower = getRowLower(); const double *rowupper = getRowUpper(); int i; for (i = 0; i < numrows; i++) { char sense; double right; double range; convertBoundToSense(rowlower[i], rowupper[i], sense, right, range); rowsense_[i] = sense; rhs_[i] = right; rowrange_[i] = range; } } return rowsense_; } //----------------------------------------------------------------------------- const double *OGSI::getRightHandSide() const { if (rhs_ == NULL) { getRowSense(); //assert( rhs_ != NULL ); // Could be null if no rows. } return rhs_; } //----------------------------------------------------------------------------- const double *OGSI::getRowRange() const { if (rowrange_ == NULL) { getRowSense(); //assert( rowrange_ != NULL ); // Could be null if no rows. } return rowrange_; } //----------------------------------------------------------------------------- const double *OGSI::getRowLower() const { LPX *model = getMutableModelPtr(); if (rowlower_ == NULL) { assert(rowupper_ == NULL); int numrows = getNumRows(); if (numrows > 0) { rowlower_ = new double[numrows]; rowupper_ = new double[numrows]; } int i; for (i = 0; i < numrows; i++) { double inf = getInfinity(); int type; double lb; double ub; type = lpx_get_row_type(model, i + 1); lb = lpx_get_row_lb(model, i + 1); ub = lpx_get_row_ub(model, i + 1); switch (type) { case LPX_FR: lb = -inf; ub = inf; break; case LPX_LO: ub = inf; break; case LPX_UP: lb = -inf; break; case LPX_DB: case LPX_FX: break; default: assert(false); break; } rowlower_[i] = lb; rowupper_[i] = ub; } } return rowlower_; } //----------------------------------------------------------------------------- const double *OGSI::getRowUpper() const { if (rowupper_ == NULL) { getRowLower(); //assert( rowupper_ != NULL ); // Could be null if no rows. } return rowupper_; } //----------------------------------------------------------------------------- const double *OGSI::getObjCoefficients() const { if (obj_ == NULL) { LPX *model = getMutableModelPtr(); int numcols = getNumCols(); if (numcols > 0) { obj_ = new double[numcols]; } int i; for (i = 0; i < numcols; i++) { obj_[i] = lpx_get_obj_coef(model, i + 1); } } return obj_; } //----------------------------------------------------------------------------- double OGSI::getObjSense() const { if (lpx_get_obj_dir(lp_) == LPX_MIN) { return (+1.0); } else if (lpx_get_obj_dir(lp_) == LPX_MAX) { return (-1.0); } else // internal confusion { assert(false); return (0); } } //----------------------------------------------------------------------------- // Return information on integrality //----------------------------------------------------------------------------- bool OGSI::isContinuous(int colNumber) const { return lpx_get_col_kind(getMutableModelPtr(), colNumber + 1) == LPX_CV; } //----------------------------------------------------------------------------- // Row and column copies of the matrix ... //----------------------------------------------------------------------------- const CoinPackedMatrix *OGSI::getMatrixByRow() const { if (matrixByRow_ == NULL) { LPX *model = getMutableModelPtr(); matrixByRow_ = new CoinPackedMatrix(); matrixByRow_->transpose(); // converts to row-order matrixByRow_->setDimensions(0, getNumCols()); int numcols = getNumCols(); int *colind = new int[numcols + 1]; double *colelem = new double[numcols + 1]; int i; for (i = 0; i < getNumRows(); i++) { int colsize = lpx_get_mat_row(model, i + 1, colind, colelem); int j; for (j = 1; j <= colsize; j++) { --colind[j]; } // Note: lpx_get_mat_row apparently may return the // elements in decreasing order. This differs from // people's standard expectations but is not an error. matrixByRow_->appendRow(colsize, colind + 1, colelem + 1); } delete[] colind; delete[] colelem; if (numcols) matrixByRow_->removeGaps(); } return matrixByRow_; } //----------------------------------------------------------------------------- const CoinPackedMatrix *OGSI::getMatrixByCol() const { if (matrixByCol_ == NULL) { LPX *model = getMutableModelPtr(); matrixByCol_ = new CoinPackedMatrix(); matrixByCol_->setDimensions(getNumRows(), 0); int numrows = getNumRows(); int *rowind = new int[numrows + 1]; double *rowelem = new double[numrows + 1]; int j; for (j = 0; j < getNumCols(); j++) { int rowsize = lpx_get_mat_col(model, j + 1, rowind, rowelem); int i; for (i = 1; i <= rowsize; i++) { --rowind[i]; } matrixByCol_->appendCol(rowsize, rowind + 1, rowelem + 1); } delete[] rowind; delete[] rowelem; if (numrows) matrixByCol_->removeGaps(); } return matrixByCol_; } //----------------------------------------------------------------------------- // Get solver's value for infinity //----------------------------------------------------------------------------- double OGSI::getInfinity() const { return (CoinInfinity); } //############################################################################# // Problem information methods (results) //############################################################################# /* Retrieve column solution, querying solver if we don't have a cached solution. Refresh reduced costs while we're here. Reduced costs may or may not already exist (user can create a reduced cost vector by supplying duals (row price) and asking for reduced costs). Appropriate calls depend on whether last call to solver was simplex or branch-and-bound. */ const double *OGSI::getColSolution() const { /* Use the cached solution vector, if present. If we have no constraint system, return 0. */ if (colsol_ != 0) { return (colsol_); } int numcols = getNumCols(); if (numcols == 0) { return (0); } colsol_ = new double[numcols]; if (redcost_ != 0) delete[] redcost_; { redcost_ = new double[numcols]; } /* Grab the problem status. */ int probStatus; if (bbWasLast_) { probStatus = lpx_mip_status(lp_); } else { probStatus = lpx_get_status(lp_); } /* If the problem hasn't been solved, glpk returns zeros, but OSI requires that the solution be within bound. getColLower() will ensure both upper and lower bounds are present. There's an implicit assumption that we're feasible (i.e., collower[j] < colupper[j]). Solution values will be 0.0 unless that's outside the bounds. */ if (probStatus == LPX_UNDEF || probStatus == LPX_I_UNDEF) { getColLower(); int j; for (j = 0; j < numcols; j++) { colsol_[j] = 0.0; if (collower_[j] > 0.0) { colsol_[j] = collower_[j]; } else if (colupper_[j] < 0.0) { colsol_[j] = colupper_[j]; } } } /* We should have a defined solution. For simplex, refresh the reduced costs as well as the primal solution. Remove infinitesimals from the results. */ else if (bbWasLast_ == 0) { int j; for (j = 0; j < numcols; j++) { colsol_[j] = lpx_get_col_prim(lp_, j + 1); if (fabs(colsol_[j]) < GlpkZeroTol) { colsol_[j] = 0.0; } redcost_[j] = lpx_get_col_dual(lp_, j + 1); if (fabs(redcost_[j]) < GlpkZeroTol) { redcost_[j] = 0.0; } } } /* Last solve was branch-and-bound. Set the reduced costs to 0. Remove infinitesimals from the results. */ else { int j; for (j = 0; j < numcols; j++) { colsol_[j] = lpx_mip_col_val(lp_, j + 1); if (fabs(colsol_[j]) < GlpkZeroTol) { colsol_[j] = 0.0; } redcost_[j] = 0.0; } } return (colsol_); } //----------------------------------------------------------------------------- /* Acquire the row solution (dual variables). The user can set this independently, so use the cached copy if it's present. */ const double *OGSI::getRowPrice() const { /* If we have a cached solution, use it. If the constraint system is empty, return 0. Otherwise, allocate a new vector. */ if (rowsol_ != 0) { return (rowsol_); } int numrows = getNumRows(); if (numrows == 0) { return (0); } rowsol_ = new double[numrows]; /* For simplex, we have dual variables. For MIP, just set them to zero. Remove infinitesimals from the results. */ if (bbWasLast_ == 0) { int i; for (i = 0; i < numrows; i++) { rowsol_[i] = lpx_get_row_dual(lp_, i + 1); if (fabs(rowsol_[i]) < GlpkZeroTol) { rowsol_[i] = 0.0; } } } else { int i; for (i = 0; i < numrows; i++) { rowsol_[i] = 0; } } return (rowsol_); } //----------------------------------------------------------------------------- /* It's tempting to dive into glpk for this, but ... the client may have used setRowPrice(), and it'd be nice to return reduced costs that agree with the duals. To use glpk's routine (lpx_get_col_dual), the interface needs to track the origin of the dual (row price) values. */ const double *OGSI::getReducedCost() const { /* Return the cached copy, if it exists. */ if (redcost_ != 0) { return (redcost_); } /* We need to calculate. Make sure we have a constraint system, then allocate a vector and initialise it with the objective coefficients. */ int n = getNumCols(); if (n == 0) { return (0); } redcost_ = new double[n]; CoinDisjointCopyN(getObjCoefficients(), n, redcost_); /* Try and acquire dual variables. */ const double *y = getRowPrice(); if (!y) { return (redcost_); } /* Acquire the constraint matrix and calculate y*A. */ const CoinPackedMatrix *mtx = getMatrixByCol(); double *yA = new double[n]; mtx->transposeTimes(y, yA); /* Calculate c-yA and remove infinitesimals from the result. */ for (int j = 0; j < n; j++) { redcost_[j] -= yA[j]; if (fabs(redcost_[j]) < GlpkZeroTol) { redcost_[j] = 0; } } delete[] yA; return (redcost_); } //----------------------------------------------------------------------------- /* As with getReducedCost, we need to be mindful that the primal solution may have been set by the client. As it happens, however, glpk has no equivalent routine, so there's no temptation to resist. */ const double *OGSI::getRowActivity() const { /* Return the cached copy, if it exists. */ if (rowact_) { return (rowact_); } /* We need to calculate. Make sure we have a constraint system, then allocate a vector and initialise it with the objective coefficients. */ int m = getNumRows(); if (m == 0) { return (0); } rowact_ = new double[m]; /* Acquire primal variables. */ const double *x = getColSolution(); if (!x) { CoinZeroN(rowact_, m); return (rowact_); } /* Acquire the constraint matrix and calculate A*x. */ const CoinPackedMatrix *mtx = getMatrixByRow(); mtx->times(x, rowact_); /* Remove infinitesimals from the result. */ for (int i = 0; i < m; i++) { if (fabs(rowact_[i]) < GlpkZeroTol) { rowact_[i] = 0; } } return (rowact_); } //----------------------------------------------------------------------------- double OGSI::getObjValue() const { return OsiSolverInterface::getObjValue(); } //----------------------------------------------------------------------------- int OGSI::getIterationCount() const { return iter_used_; } //----------------------------------------------------------------------------- std::vector< double * > OGSI::getDualRays(int /*maxNumRays*/, bool /*fullRay*/) const { // ??? not yet implemented. throw CoinError("method is not yet implemented", "getDualRays", "OsiGlpkSolverInterface"); return std::vector< double * >(); } //----------------------------------------------------------------------------- std::vector< double * > OGSI::getPrimalRays(int /*maxNumRays*/) const { // ??? not yet implemented. throw CoinError("method is not yet implemented", "getPrimalRays", "OsiGlpkSolverInterface"); return std::vector< double * >(); } //############################################################################# // Problem modifying methods (rim vectors) //############################################################################# /* Yes, I know the OSI spec says that pointers returned by get*() routines are valid only as long as the data is unchanged. But in practice, client code (in particular, portions of Cgl and Cbc) expects that simple changes to rim vector values will not invalidate pointers returned by the various get*() routines. So, for example, modifying an objective coefficient should not free the cached copies of the objective and column bounds. They should be updated on-the-fly. This is exactly the opposite of the original OsiGlpk design, hence this warning. Beyond that, it's helpful for an OSI to hold on to the current solution as long as possible. So, for example, a bounds change that does not make the current solution infeasible should not trash the cached solution. -- lh, 070326 */ void OGSI::setObjCoeff(int j, double cj) { assert(j >= 0 && j < getNumCols()); /* Remove the solution. Arguably the only thing that we should remove here is the cached reduced cost. */ freeCachedData(OGSI::KEEPCACHED_PROBLEM); /* Push the changed objective down to glpk. */ lpx_set_obj_coef(lp_, j + 1, cj); if (obj_) { obj_[j] = cj; } return; } //----------------------------------------------------------------------------- void OGSI::setColLower(int j, double lbj) { /* Get the upper bound, so we can call setColBounds. glpk reports 0 for an infinite bound, so we need to check the status and possibly correct. */ double inf = getInfinity(); int type = lpx_get_col_type(lp_, j + 1); double ubj = lpx_get_col_ub(lp_, j + 1); switch (type) { case LPX_UP: case LPX_DB: case LPX_FX: { break; } case LPX_FR: case LPX_LO: { ubj = inf; break; } default: { assert(false); } } #if OGSI_TRACK_FRESH > 0 /* Check if this bound really invalidates the current solution. This check will give false positives because OsiGlpk needs a notion of `valid solution from solver'. getColSolution will always return something, even if it has to make it up on the spot. */ { const double *x = getColSolution(); if (x) { if (x[j] < lbj - GlpkZeroTol) { std::cout << "OGSI(" << std::hex << this << std::dec << ")::setColLower: new bound " << lbj << " exceeds current value " << x[j] << " by " << (lbj - x[j]) << "." << std::endl; } } } #endif setColBounds(j, lbj, ubj); return; } //----------------------------------------------------------------------------- void OGSI::setColUpper(int j, double ubj) { /* Get the lower bound, so we can call setColBounds. glpk reports 0 for an infinite bound, so we need to check the status and possibly correct. */ double inf = getInfinity(); int type = lpx_get_col_type(lp_, j + 1); double lbj = lpx_get_col_lb(lp_, j + 1); switch (type) { case LPX_LO: case LPX_DB: case LPX_FX: { break; } case LPX_FR: case LPX_UP: { lbj = inf; break; } default: { assert(false); } } #if OGSI_TRACK_FRESH > 0 /* Check if this bound really invalidates the current solution. This check will give false positives because OsiGlpk needs a notion of `valid solution from solver'. getColSolution will always return something, even if it has to make it up on the spot. */ { const double *x = getColSolution(); if (x) { if (x[j] > ubj + GlpkZeroTol) { std::cout << "OGSI(" << std::hex << this << std::dec << ")::setColUpper: new bound " << ubj << " exceeds current value " << x[j] << " by " << (x[j] - ubj) << "." << std::endl; } } } #endif setColBounds(j, lbj, ubj); return; } //----------------------------------------------------------------------------- /* Yes, in theory, we shouldn't need to worry about maintaining those cached column bounds over changes to the problem. See the note at the top of this section. */ void OGSI::setColBounds(int j, double lower, double upper) { assert(j >= 0 && j < getNumCols()); /* Free only the cached solution. Keep the cached structural variables. */ freeCachedData(OGSI::KEEPCACHED_PROBLEM); /* Figure out what type we should use for glpk. */ double inf = getInfinity(); int type; if (lower == upper) { type = LPX_FX; } else if (lower > -inf && upper < inf) { type = LPX_DB; } else if (lower > -inf) { type = LPX_LO; } else if (upper < inf) { type = LPX_UP; } else { type = LPX_FR; } /* Push the bound change down into the solver. 1-based addressing. */ int statj = lpx_get_col_stat(lp_, j + 1); lpx_set_col_bnds(lp_, j + 1, type, lower, upper); lpx_set_col_stat(lp_, j + 1, statj); statj = lpx_get_col_stat(lp_, j + 1); /* Correct the cached upper and lower bound vectors, if present. */ if (collower_) { collower_[j] = lower; } if (colupper_) { colupper_[j] = upper; } return; } //----------------------------------------------------------------------------- void OGSI::setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { OsiSolverInterface::setColSetBounds(indexFirst, indexLast, boundList); } //----------------------------------------------------------------------------- void OGSI::setRowLower(int elementIndex, double elementValue) { // Could be in OsiSolverInterfaceImpl. double inf = getInfinity(); int type; double lb; double ub; type = lpx_get_row_type(getMutableModelPtr(), elementIndex + 1); ub = lpx_get_row_ub(getMutableModelPtr(), elementIndex + 1); lb = elementValue; switch (type) { case LPX_UP: case LPX_DB: case LPX_FX: break; case LPX_FR: case LPX_LO: ub = inf; break; default: assert(false); } setRowBounds(elementIndex, lb, ub); } //----------------------------------------------------------------------------- void OGSI::setRowUpper(int elementIndex, double elementValue) { // Could be in OsiSolverInterfaceImpl. double inf = getInfinity(); int type; double lb; double ub; type = lpx_get_row_type(getMutableModelPtr(), elementIndex + 1); lb = lpx_get_row_lb(getMutableModelPtr(), elementIndex + 1); ub = elementValue; switch (type) { case LPX_LO: case LPX_DB: case LPX_FX: break; case LPX_FR: case LPX_UP: lb = -inf; break; default: assert(false); } setRowBounds(elementIndex, lb, ub); } //----------------------------------------------------------------------------- /* As with setColBounds, just changing the bounds should not invalidate the current rim vectors. */ void OGSI::setRowBounds(int i, double lower, double upper) { /* Free only the row and column solution, keep the cached structural vectors. */ freeCachedData(OGSI::KEEPCACHED_PROBLEM); /* Figure out the correct row type for glpk and push the change down into the solver. 1-based addressing. */ double inf = getInfinity(); int type; if (lower == upper) { type = LPX_FX; } else if (lower > -inf && upper < inf) { type = LPX_DB; } else if (lower > -inf) { type = LPX_LO; } else if (upper < inf) { type = LPX_UP; } else { type = LPX_FR; } lpx_set_row_bnds(lp_, i + 1, type, lower, upper); /* Update cached vectors, if they exist. */ if (rowlower_) { rowlower_[i] = lower; } if (rowupper_) { rowupper_[i] = upper; } return; } //----------------------------------------------------------------------------- void OGSI::setRowType(int elementIndex, char sense, double rightHandSide, double range) { // Could be in OsiSolverInterfaceImpl. double lower = 0.0; double upper = 0.0; convertSenseToBound(sense, rightHandSide, range, lower, upper); setRowBounds(elementIndex, lower, upper); } //----------------------------------------------------------------------------- void OGSI::setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { // Could be in OsiSolverInterface (should'nt be implemeted at here). OsiSolverInterface::setRowSetBounds(indexFirst, indexLast, boundList); } //----------------------------------------------------------------------------- void OGSI::setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList) { // Could be in OsiSolverInterface (should'nt be implemeted at here). OsiSolverInterface::setRowSetTypes(indexFirst, indexLast, senseList, rhsList, rangeList); } //############################################################################# void OGSI::setContinuous(int index) { LPX *model = getMutableModelPtr(); freeCachedData(OGSI::FREECACHED_COLUMN); lpx_set_col_kind(model, index + 1, LPX_CV); } //----------------------------------------------------------------------------- void OGSI::setInteger(int index) { LPX *model = getMutableModelPtr(); freeCachedData(OGSI::FREECACHED_COLUMN); lpx_set_col_kind(model, index + 1, LPX_IV); /* Temporary hack to correct upper bounds on general integer variables. CoinMpsIO insists on forcing a bound of 1e30 for general integer variables with no upper bound. This causes several cut generators (MIR, MIR2) to fail. Put the bound back to infinity. -- lh, 070530 -- double uj = getColUpper()[index] ; if (uj >= 1e30) { setColUpper(index,getInfinity()) ; } */ return; } //----------------------------------------------------------------------------- void OGSI::setContinuous(const int *indices, int len) { // Could be in OsiSolverInterfaceImpl. int i; for (i = 0; i < len; i++) { setContinuous(indices[i]); } } //----------------------------------------------------------------------------- void OGSI::setInteger(const int *indices, int len) { // Could be in OsiSolverInterfaceImpl. int i; for (i = 0; i < len; i++) { setInteger(indices[i]); } } //############################################################################# /* Opt for the natural sense (minimisation) unless the user is clear that maximisation is what's desired. */ void OGSI::setObjSense(double s) { freeCachedData(OGSI::FREECACHED_RESULTS); if (s <= -1.0) { lpx_set_obj_dir(lp_, LPX_MAX); } else { lpx_set_obj_dir(lp_, LPX_MIN); } return; } //----------------------------------------------------------------------------- void OGSI::setColSolution(const double *cs) { // You probably don't want to use this function. You probably want // setWarmStart instead. // This implementation changes the cached information, // BUT DOES NOT TELL GLPK about the changes. In that sense, it's not // really useful. It is added to conform to current OSI expectations. // Other results (such as row prices) might not make sense with this // new solution, but we can't free all the results we have, since the // row prices may have already been set with setRowPrice. if (cs == 0) delete[] colsol_; else { int nc = getNumCols(); if (colsol_ == 0) colsol_ = new double[nc]; // Copy in new col solution. CoinDisjointCopyN(cs, nc, colsol_); } } //----------------------------------------------------------------------------- void OGSI::setRowPrice(const double *rs) { // You probably don't want to use this function. You probably want // setWarmStart instead. // This implementation changes the cached information, // BUT DOES NOT TELL GLPK about the changes. In that sense, it's not // really useful. It is added to conform to current OSI expectations. // Other results (such as column solutions) might not make sense with this // new solution, but we can't free all the results we have, since the // column solutions may have already been set with setColSolution. if (rs == 0) delete[] rowsol_; else { int nr = getNumRows(); if (rowsol_ == 0) rowsol_ = new double[nr]; // Copy in new col solution. CoinDisjointCopyN(rs, nr, rowsol_); } } //############################################################################# // Problem modifying methods (matrix) //############################################################################# void OGSI::addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj) { // Note: GLPK expects only non-zero coefficients will be given in // lpx_set_mat_col and will abort if there are any zeros. So any // zeros must be removed prior to calling lpx_set_mat_col. LPX *model = getMutableModelPtr(); freeCachedData(OGSI::KEEPCACHED_ROW); lpx_add_cols(model, 1); int numcols = getNumCols(); setColBounds(numcols - 1, collb, colub); setObjCoeff(numcols - 1, obj); int i; // For GLPK, we don't want the arrays to start at 0 // We also need to weed out any 0.0 coefficients const int *indices = vec.getIndices(); const double *elements = vec.getElements(); int numrows = getNumRows(); int *indices_adj = new int[1 + vec.getNumElements()]; double *elements_adj = new double[1 + vec.getNumElements()]; int count = 0; for (i = 0; i < vec.getNumElements(); i++) { if (elements[i] != 0.0) { if (indices[i] + 1 > numrows) { lpx_add_rows(model, indices[i] + 1 - numrows); numrows = indices[i] + 1; // ??? could do this more efficiently with a single call based on the max } count++; // GLPK arrays start at 1 indices_adj[count] = indices[i] + 1; elements_adj[count] = elements[i]; } } lpx_set_mat_col(model, numcols, count, indices_adj, elements_adj); delete[] indices_adj; delete[] elements_adj; #if OGSI_TRACK_FRESH > 2 std::cout << "OGSI(" << std::hex << this << std::dec << ")::addCol: new column." << std::endl; #endif } //----------------------------------------------------------------------------- void OGSI::addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj) { // ??? We could do this more efficiently now // Could be in OsiSolverInterfaceImpl. int i; for (i = 0; i < numcols; ++i) addCol(*(cols[i]), collb[i], colub[i], obj[i]); } //----------------------------------------------------------------------------- void OGSI::deleteCols(const int num, const int *columnIndices) { int *columnIndicesPlus1 = new int[num + 1]; LPX *model = getMutableModelPtr(); freeCachedData(OGSI::KEEPCACHED_ROW); for (int i = 0; i < num; i++) { columnIndicesPlus1[i + 1] = columnIndices[i] + 1; deleteColNames(columnIndices[i], 1); } lpx_del_cols(model, num, columnIndicesPlus1); delete[] columnIndicesPlus1; #if OGSI_TRACK_FRESH > 0 std::cout << "OGSI(" << std::hex << this << std::dec << ")::deleteCols: deleted " << num << "columns." << std::endl; #endif } //----------------------------------------------------------------------------- void OGSI::addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub) { // Note: GLPK expects only non-zero coefficients will be given in // lpx_set_mat_row and will abort if there are any zeros. So any // zeros must be removed prior to calling lpx_set_mat_row. LPX *model = getMutableModelPtr(); freeCachedData(OGSI::KEEPCACHED_COLUMN); lpx_add_rows(model, 1); int numrows = getNumRows(); setRowBounds(numrows - 1, rowlb, rowub); int i; const int *indices = vec.getIndices(); const double *elements = vec.getElements(); int numcols = getNumCols(); // For GLPK, we don't want the arrays to start at 0 // Also, we need to weed out any 0.0 elements int *indices_adj = new int[1 + vec.getNumElements()]; double *elements_adj = new double[1 + vec.getNumElements()]; int count = 0; for (i = 0; i < vec.getNumElements(); i++) { if (elements[i] != 0.0) { if (indices[i] + 1 > numcols) { // ??? Could do this more efficiently with a single call lpx_add_cols(model, indices[i] + 1 - numcols); numcols = indices[i] + 1; } count++; elements_adj[count] = elements[i]; indices_adj[count] = indices[i] + 1; } } lpx_set_mat_row(model, numrows, count, indices_adj, elements_adj); delete[] indices_adj; delete[] elements_adj; #if OGSI_TRACK_FRESH > 0 std::cout << "OGSI(" << std::hex << this << std::dec << ")::addRow: new row." << std::endl; #endif } //----------------------------------------------------------------------------- void OGSI::addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng) { // Could be in OsiSolverInterfaceImpl. double lb = 0.0; double ub = 0.0; convertSenseToBound(rowsen, rowrhs, rowrng, lb, ub); addRow(vec, lb, ub); } //----------------------------------------------------------------------------- void OGSI::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub) { // ??? Could do this more efficiently now // Could be in OsiSolverInterfaceImpl. int i; for (i = 0; i < numrows; ++i) addRow(*(rows[i]), rowlb[i], rowub[i]); } //----------------------------------------------------------------------------- void OGSI::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng) { // Could be in OsiSolverInterfaceImpl. int i; for (i = 0; i < numrows; ++i) addRow(*(rows[i]), rowsen[i], rowrhs[i], rowrng[i]); } //----------------------------------------------------------------------------- /* There's an expectation that a valid basis will be maintained across row deletions. Fortunately, glpk will do this automagically as long as we play by the rules and delete only slack constraints. If we delete a constraint with a nonbasic slack, we're in trouble. */ void OGSI::deleteRows(const int num, const int *osiIndices) { int *glpkIndices = new int[num + 1]; int i, ndx; /* Arguably, column results remain valid across row deletion. */ freeCachedData(OGSI::KEEPCACHED_COLUMN); /* Glpk uses 1-based indexing, so convert the array of indices. While we're doing that, delete the row names. */ for (ndx = 0; ndx < num; ndx++) { glpkIndices[ndx + 1] = osiIndices[ndx] + 1; deleteRowNames(osiIndices[ndx], 1); } /* See if we're about to do damage. If we delete a row with a nonbasic slack, we'll have an excess of basic variables. */ int notBasic = 0; for (ndx = 1; ndx <= num; ndx++) { i = glpkIndices[ndx]; int stati = lpx_get_row_stat(lp_, i); if (stati != LPX_BS) { notBasic++; } } if (notBasic) { #if OGSI_VERBOSITY > 1 std::cout << "OGSI(" << std::hex << this << std::dec << ")::deleteRows: deleting " << notBasic << " tight constraints; " << "basis is no longer valid." << std::endl; #endif } /* Tell glpk to delete the rows. */ lpx_del_rows(lp_, num, glpkIndices); delete[] glpkIndices; #if OGSI_TRACK_FRESH > 0 std::cout << "OGSI(" << std::hex << this << std::dec << ")::deleteRows: deleted " << num << " rows." << std::endl; #endif return; } //############################################################################# // Methods to input a problem //############################################################################# void OGSI::loadProblem(const CoinPackedMatrix &matrix, const double *collb_parm, const double *colub_parm, const double *obj_parm, const double *rowlb_parm, const double *rowub_parm) { #if OGSI_TRACK_FRESH > 0 std::cout << "OGSI(" << std::hex << this << std::dec << ")::loadProblem." << std::endl; #endif /* There's always an existing LPX object. If it's empty, we can simply load in the new data. If it's non-empty, easiest to delete it and start afresh. When we do this, we need to reload parameters. For hints, it's easiest to grab from the existing LPX structure. In any event, get rid of cached data in the OsiGlpk object. */ if (lpx_get_num_cols(lp_) != 0 || lpx_get_num_rows(lp_) != 0) { int presolVal = lpx_get_int_parm(lp_, LPX_K_PRESOL); int usedualVal = lpx_get_int_parm(lp_, LPX_K_DUAL); int scaleVal = lpx_get_int_parm(lp_, LPX_K_SCALE); int logVal = lpx_get_int_parm(lp_, LPX_K_MSGLEV); #if OGSI_TRACK_FRESH > 0 std::cout << " emptying LPX(" << std::hex << lp_ << std::dec << "), " #endif lpx_delete_prob(lp_); lp_ = lpx_create_prob(); assert(lp_); #if OGSI_TRACK_FRESH > 0 std::cout << "loading LPX(" << std::hex << lp_ << std::dec << ")." << std::endl; #endif lpx_set_class(lp_, LPX_MIP); lpx_set_int_parm(lp_, LPX_K_ITLIM, maxIteration_); if (getObjSense() == 1) // minimization { lpx_set_real_parm(lp_, LPX_K_OBJUL, dualObjectiveLimit_); lpx_set_real_parm(lp_, LPX_K_OBJLL, primalObjectiveLimit_); } else // maximization { lpx_set_real_parm(lp_, LPX_K_OBJLL, dualObjectiveLimit_); lpx_set_real_parm(lp_, LPX_K_OBJUL, primalObjectiveLimit_); } lpx_set_real_parm(lp_, LPX_K_TOLDJ, dualTolerance_); lpx_set_real_parm(lp_, LPX_K_TOLBND, primalTolerance_); lpx_set_obj_coef(lp_, 0, objOffset_); lpx_set_prob_name(lp_, const_cast< char * >(probName_.c_str())); lpx_set_int_parm(lp_, LPX_K_PRESOL, presolVal); lpx_set_int_parm(lp_, LPX_K_DUAL, usedualVal); lpx_set_int_parm(lp_, LPX_K_SCALE, scaleVal); lpx_set_int_parm(lp_, LPX_K_MSGLEV, logVal); messageHandler()->setLogLevel(logVal); } freeCachedData(OGSI::KEEPCACHED_NONE); double inf = getInfinity(); int m = matrix.getNumRows(); int n = matrix.getNumCols(); int i, j; double *zeroVec, *infVec, *negInfVec; const double *collb, *colub, *obj, *rowlb, *rowub; /* Check if we need default values for any of the vectors, and set up accordingly. */ if (collb_parm == 0 || obj_parm == 0) { zeroVec = new double[n]; CoinZeroN(zeroVec, n); } else { zeroVec = 0; } if (colub_parm == 0 || rowub_parm == 0) { if (colub_parm == 0 && rowub_parm == 0) { j = CoinMax(m, n); } else if (colub_parm == 0) { j = n; } else { j = m; } infVec = new double[j]; CoinFillN(infVec, j, inf); } else { infVec = 0; } if (rowlb_parm == 0) { negInfVec = new double[m]; CoinFillN(negInfVec, m, -inf); } else { negInfVec = 0; } if (collb_parm == 0) { collb = zeroVec; } else { collb = collb_parm; } if (colub_parm == 0) { colub = infVec; } else { colub = colub_parm; } if (obj_parm == 0) { obj = zeroVec; } else { obj = obj_parm; } if (rowlb_parm == 0) { rowlb = negInfVec; } else { rowlb = rowlb_parm; } if (rowub_parm == 0) { rowub = infVec; } else { rowub = rowub_parm; } /* The actual load. */ if (matrix.isColOrdered()) { for (j = 0; j < n; j++) { const CoinShallowPackedVector reqdBySunCC = matrix.getVector(j); addCol(reqdBySunCC, collb[j], colub[j], obj[j]); } // Make sure there are enough rows if (m > getNumRows()) { lpx_add_rows(lp_, m - getNumRows()); } for (i = 0; i < m; i++) { setRowBounds(i, rowlb[i], rowub[i]); } } else { for (i = 0; i < m; i++) { const CoinShallowPackedVector reqdBySunCC = matrix.getVector(i); addRow(reqdBySunCC, rowlb[i], rowub[i]); } // Make sure there are enough columns if (n > getNumCols()) { lpx_add_cols(lp_, n - getNumCols()); } for (j = 0; j < n; j++) { setColBounds(j, collb[j], colub[j]); setObjCoeff(j, obj[j]); } } /* Cleanup. */ if (zeroVec) delete[] zeroVec; if (infVec) delete[] infVec; if (negInfVec) delete[] negInfVec; return; } //----------------------------------------------------------------------------- void OGSI::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub) { // Could be in OsiSolverInterfaceImpl. loadProblem(*matrix, collb, colub, obj, rowlb, rowub); delete matrix; matrix = NULL; delete[] collb; collb = NULL; delete[] colub; colub = NULL; delete[] obj; obj = NULL; delete[] rowlb; rowlb = NULL; delete[] rowub; rowub = NULL; } //----------------------------------------------------------------------------- void OGSI::loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { // Could be in OsiSolverInterfaceImpl. int numrows = matrix.getNumRows(); double *rowlb = new double[numrows]; double *rowub = new double[numrows]; int i; for (i = numrows - 1; i >= 0; --i) { convertSenseToBound(rowsen ? rowsen[i] : 'G', rowrhs ? rowrhs[i] : 0.0, rowrng ? rowrng[i] : 0.0, rowlb[i], rowub[i]); } loadProblem(matrix, collb, colub, obj, rowlb, rowub); delete[] rowlb; delete[] rowub; } //----------------------------------------------------------------------------- void OGSI::assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng) { // Could be in OsiSolverInterfaceImpl. loadProblem(*matrix, collb, colub, obj, rowsen, rowrhs, rowrng); delete matrix; matrix = NULL; delete[] collb; collb = NULL; delete[] colub; colub = NULL; delete[] obj; obj = NULL; delete[] rowsen; rowsen = NULL; delete[] rowrhs; rowrhs = NULL; delete[] rowrng; rowrng = NULL; } //----------------------------------------------------------------------------- void OGSI::loadProblem(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) { freeCachedData(OGSI::KEEPCACHED_NONE); LPX *model = getMutableModelPtr(); double inf = getInfinity(); // Can't send 0 to lpx_add_xxx if (numcols > 0) lpx_add_cols(model, numcols); if (numrows > 0) lpx_add_rows(model, numrows); // How many elements? Column-major, so indices of start are columns CoinBigIndex numelem = start[numcols]; // int numelem = 0; // while ( index[numelem] != 0 ) // numelem++; int *index_adj = new int[1 + numelem]; double *value_adj = new double[1 + numelem]; int i; for (i = 1; i <= numelem; i++) { index_adj[i] = index[i - 1] + 1; value_adj[i] = value[i - 1]; } for (i = 0; i < numcols; i++) { setColBounds(i, collb ? collb[i] : 0.0, colub ? colub[i] : inf); lpx_set_mat_col(model, i + 1, static_cast< int >(start[i + 1] - start[i]), &(index_adj[start[i]]), &(value_adj[start[i]])); setObjCoeff(i, obj ? obj[i] : 0.0); } int j; for (j = 0; j < numrows; j++) { setRowBounds(j, rowlb ? rowlb[j] : -inf, rowub ? rowub[j] : inf); } delete[] index_adj; delete[] value_adj; } //----------------------------------------------------------------------------- void OGSI::loadProblem(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) { double *rowlb = new double[numrows]; double *rowub = new double[numrows]; for (int i = numrows - 1; i >= 0; --i) { convertSenseToBound(rowsen != NULL ? rowsen[i] : 'G', rowrhs != NULL ? rowrhs[i] : 0.0, rowrng != NULL ? rowrng[i] : 0.0, rowlb[i], rowub[i]); } loadProblem(numcols, numrows, start, index, value, collb, colub, obj, rowlb, rowub); delete[] rowlb; delete[] rowub; } //----------------------------------------------------------------------------- // Read mps files //----------------------------------------------------------------------------- /* Call OSI::readMps, which will parse the mps file and call OsiGlpk::loadProblem. */ int OGSI::readMps(const char *filename, const char *extension) { int retval = OsiSolverInterface::readMps(filename, extension); return (retval); } //----------------------------------------------------------------------------- // Write mps files //----------------------------------------------------------------------------- void OGSI::writeMps(const char *filename, const char *extension, double /*objSense*/) const { // Could be in OsiSolverInterfaceImpl. #if 1 std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; lpx_write_mps(getMutableModelPtr(), const_cast< char * >(fullname.c_str())); #else // Fall back on native MPS writer. // These few lines of code haven't been tested. 2004/10/15 std::string f(filename); std::string e(extension); std::string fullname = f + "." + e; OsiSolverInterface::writeMpsNative(fullname.c_str(), NULL, NULL, 0, 2, objSense); #endif } //############################################################################ // GLPK-specific methods //############################################################################ // Get a pointer to the instance LPX *OGSI::getModelPtr() { freeCachedResults(); return lp_; } //############################################################################# // Constructors, destructors clone and assignment //############################################################################# //----------------------------------------------------------------------------- // Default Constructor //----------------------------------------------------------------------------- OGSI::OsiGlpkSolverInterface() : OsiSolverInterface() { gutsOfConstructor(); incrementInstanceCounter(); #if OGSI_TRACK_SOLVERS > 0 std::cout << "OGSI(" << std::hex << this << std::dec << "): default constructor." << std::endl; #endif } //----------------------------------------------------------------------------- // Clone //----------------------------------------------------------------------------- OsiSolverInterface *OGSI::clone(bool copyData) const { #if OGSI_TRACK_SOLVERS > 0 std::cout << "OGSI(" << std::hex << this << std::dec << "): cloning." << std::endl; #endif if (copyData) return (new OsiGlpkSolverInterface(*this)); else return (new OsiGlpkSolverInterface()); } //----------------------------------------------------------------------------- // Copy constructor //----------------------------------------------------------------------------- OGSI::OsiGlpkSolverInterface(const OsiGlpkSolverInterface &source) : OsiSolverInterface(source) { gutsOfConstructor(); gutsOfCopy(source); incrementInstanceCounter(); #if OGSI_TRACK_SOLVERS > 0 std::cout << "OGSI(" << std::hex << this << "): copy from " << &source << std::dec << "." << std::endl; #endif } //----------------------------------------------------------------------------- // Destructor //----------------------------------------------------------------------------- OGSI::~OsiGlpkSolverInterface() { gutsOfDestructor(); decrementInstanceCounter(); #if OGSI_TRACK_SOLVERS > 0 std::cout << "OGSI(" << std::hex << this << std::dec << "): destructor." << std::endl; #endif } // Resets // ??? look over this carefully to be sure it is correct void OGSI::reset() { setInitialData(); // this is from the base class OsiSolverInterface gutsOfDestructor(); gutsOfConstructor(); #if OGSI_TRACK_SOLVERS > 0 std::cout << "OGSI(" << std::hex << this << std::dec << "): reset." << std::endl; #endif return; } //----------------------------------------------------------------------------- // Assignment operator //----------------------------------------------------------------------------- OsiGlpkSolverInterface &OGSI::operator=(const OsiGlpkSolverInterface &rhs) { if (this != &rhs) { OsiSolverInterface::operator=(rhs); gutsOfDestructor(); gutsOfConstructor(); if (rhs.lp_ != NULL) gutsOfCopy(rhs); } #if OGSI_TRACK_SOLVERS > 0 std::cout << "OGSI(" << std::hex << this << "): assign from " << &rhs << std::dec << "." << std::endl; #endif return *this; } //############################################################################# // Applying cuts //############################################################################# void OGSI::applyColCut(const OsiColCut &cc) { // Could be in OsiSolverInterfaceImpl. const double *colLb = getColLower(); const double *colUb = getColUpper(); const CoinPackedVector &lbs = cc.lbs(); const CoinPackedVector &ubs = cc.ubs(); int i; #if 0 // replaced (JJF) because colLb and colUb are invalidated by sets for( i = 0; i < lbs.getNumElements(); ++i ) if( lbs.getElements()[i] > colLb[lbs.getIndices()[i]] ) setColLower( lbs.getIndices()[i], lbs.getElements()[i] ); for( i = 0; i < ubs.getNumElements(); ++i ) if( ubs.getElements()[i] < colUb[ubs.getIndices()[i]] ) setColUpper( ubs.getIndices()[i], ubs.getElements()[i] ); #else double inf = getInfinity(); int type; // lower bounds for (i = 0; i < lbs.getNumElements(); ++i) { int column = lbs.getIndices()[i]; double lower = lbs.getElements()[i]; double upper = colUb[column]; if (lower > colLb[column]) { // update cached version as well collower_[column] = lower; if (lower == upper) type = LPX_FX; else if (lower > -inf && upper < inf) type = LPX_DB; else if (lower > -inf) type = LPX_LO; else if (upper < inf) type = LPX_UP; else type = LPX_FR; lpx_set_col_bnds(getMutableModelPtr(), column + 1, type, lower, upper); } } // lower bounds for (i = 0; i < ubs.getNumElements(); ++i) { int column = ubs.getIndices()[i]; double upper = ubs.getElements()[i]; double lower = colLb[column]; if (upper < colUb[column]) { // update cached version as well colupper_[column] = upper; if (lower == upper) type = LPX_FX; else if (lower > -inf && upper < inf) type = LPX_DB; else if (lower > -inf) type = LPX_LO; else if (upper < inf) type = LPX_UP; else type = LPX_FR; lpx_set_col_bnds(getMutableModelPtr(), column + 1, type, lower, upper); } } #endif } //----------------------------------------------------------------------------- void OGSI::applyRowCut(const OsiRowCut &rowCut) { // Could be in OsiSolverInterfaceImpl. addRow(rowCut.row(), rowCut.lb(), rowCut.ub()); } //############################################################################# // Private methods (non-static and static) and static data //############################################################################# LPX *OGSI::getMutableModelPtr(void) const { return lp_; } /* This routine must work even if there's no problem loaded in the solver. */ void OGSI::gutsOfCopy(const OsiGlpkSolverInterface &source) { LPX *srclpx = source.lp_; LPX *lpx = lp_; double dblParam; int intParam; std::string strParam; /* Copy information from the source OSI that a user might change before loading a problem: objective sense and offset, other OSI parameters. Use the get/set parameter calls here to hide pushing information into the LPX object. */ setObjSense(source.getObjSense()); source.getDblParam(OsiObjOffset, dblParam); setDblParam(OsiObjOffset, dblParam); source.getIntParam(OsiNameDiscipline, intParam); setIntParam(OsiNameDiscipline, intParam); source.getIntParam(OsiMaxNumIteration, intParam); setIntParam(OsiMaxNumIteration, intParam); source.getIntParam(OsiMaxNumIterationHotStart, intParam); setIntParam(OsiMaxNumIterationHotStart, intParam); source.getDblParam(OsiPrimalObjectiveLimit, dblParam); setDblParam(OsiPrimalObjectiveLimit, dblParam); source.getDblParam(OsiDualObjectiveLimit, dblParam); setDblParam(OsiDualObjectiveLimit, dblParam); source.getDblParam(OsiPrimalTolerance, dblParam); setDblParam(OsiPrimalTolerance, dblParam); source.getDblParam(OsiDualTolerance, dblParam); setDblParam(OsiDualTolerance, dblParam); /* For hints, we need to be a little more circumspect, so as not to pump out a bunch of warnings. Pull parameters from the source LPX object and load into the copy. The actual values of the hint parameters (sense & strength) are held up on the parent OSI object, so we don't need to worry about copying them. */ intParam = lpx_get_int_parm(srclpx, LPX_K_PRESOL); lpx_set_int_parm(lpx, LPX_K_PRESOL, intParam); intParam = lpx_get_int_parm(srclpx, LPX_K_DUAL); lpx_set_int_parm(lpx, LPX_K_DUAL, intParam); intParam = lpx_get_int_parm(srclpx, LPX_K_SCALE); lpx_set_int_parm(lpx, LPX_K_SCALE, intParam); /* Printing is a bit more complicated. Pull the parameter and set the log level in the message handler and set the print parameter in glpk. */ intParam = lpx_get_int_parm(srclpx, LPX_K_MSGLEV); lpx_set_int_parm(lpx, LPX_K_MSGLEV, intParam); messageHandler()->setLogLevel(intParam); #ifdef LPX_K_USECUTS intParam = lpx_get_int_parm(lp_, LPX_K_USECUTS); lpx_set_int_parm(lp_, LPX_K_USECUTS, intParam); #endif /* Now --- do we have a problem loaded? If not, we're done. */ int n = source.getNumCols(); int m = source.getNumRows(); assert(m >= 0 && n >= 0); if (m == 0 && n == 0) { #if OGSI_TRACK_SOLVERS > 0 std::cout << " no problem loaded." << std::endl; #endif return; } /* We have rows and/or columns, so we need to transfer the problem. Do a few parameters and status fields that may have changed if a problem is loaded. Then pull the problem information and load it into the lpx object for this OSI. Information on integrality must be copied over separately. */ source.getStrParam(OsiProbName, strParam); setStrParam(OsiProbName, strParam); bbWasLast_ = source.bbWasLast_; iter_used_ = source.iter_used_; const double *obj = source.getObjCoefficients(); const CoinPackedMatrix *cols = source.getMatrixByCol(); const double *lb = source.getColLower(); const double *ub = source.getColUpper(); const double *rlb = source.getRowLower(); const double *rub = source.getRowUpper(); loadProblem(*cols, lb, ub, obj, rlb, rub); int i, j; for (j = 0; j < n; j++) { if (source.isInteger(j)) { setInteger(j); } } /* Copy the solution information. We need to be a bit careful here. Even though the source has something loaded as a problem, there's no guarantee that we've even called glpk, so we can't consult glpk directly for solution values. */ setColSolution(source.getColSolution()); setRowPrice(source.getRowPrice()); /* We can, however, consult it directly for variable status: glpk initialises this information as soon as columns and/or rows are created. Of course, that applies to the problem we've just created, too. If we're just copying nonsense, then don't bother. Once we've copied the status into the new lpx object, do the warm-up. */ if (lpx_get_status(srclpx) != LPX_UNDEF) { for (j = 1; j <= n; j++) { int statj = lpx_get_col_stat(srclpx, j); lpx_set_col_stat(lpx, j, statj); } for (i = 1; i <= m; i++) { int stati = lpx_get_row_stat(srclpx, i); lpx_set_row_stat(lpx, i, stati); } #ifndef NDEBUG int retval = lpx_warm_up(lpx); #endif #if OGSI_TRACK_SOLVERS > 1 std::cout << " lpx_warm_up returns " << retval << "." << std::endl; #endif assert(retval == LPX_E_OK); } return; } //----------------------------------------------------------------------------- void OGSI::gutsOfConstructor() { bbWasLast_ = 0; iter_used_ = 0; obj_ = NULL; collower_ = NULL; colupper_ = NULL; ctype_ = NULL; rowsense_ = NULL; rhs_ = NULL; rowrange_ = NULL; rowlower_ = NULL; rowupper_ = NULL; colsol_ = NULL; rowsol_ = NULL; redcost_ = NULL; rowact_ = NULL; matrixByRow_ = NULL; matrixByCol_ = NULL; maxIteration_ = COIN_INT_MAX; hotStartMaxIteration_ = 0; nameDisc_ = 0; dualObjectiveLimit_ = getInfinity(); primalObjectiveLimit_ = -getInfinity(); dualTolerance_ = 1.0e-6; primalTolerance_ = 1.0e-6; objOffset_ = 0.0; probName_ = ""; hotStartCStat_ = NULL; hotStartCStatSize_ = 0; hotStartRStat_ = NULL; hotStartRStatSize_ = 0; isIterationLimitReached_ = false; isTimeLimitReached_ = false; isAbandoned_ = false; isPrimInfeasible_ = false; isDualInfeasible_ = false; isObjLowerLimitReached_ = false; isObjUpperLimitReached_ = false; isFeasible_ = false; lp_ = lpx_create_prob(); assert(lp_ != NULL); // Make all problems MIPs. See note at top of file. lpx_set_class(lp_, LPX_MIP); // Push OSI parameters down into LPX object. lpx_set_int_parm(lp_, LPX_K_ITLIM, maxIteration_); if (getObjSense() == 1.0) // minimization { lpx_set_real_parm(lp_, LPX_K_OBJUL, dualObjectiveLimit_); lpx_set_real_parm(lp_, LPX_K_OBJLL, primalObjectiveLimit_); } else // maximization { lpx_set_real_parm(lp_, LPX_K_OBJLL, dualObjectiveLimit_); lpx_set_real_parm(lp_, LPX_K_OBJUL, -primalObjectiveLimit_); } lpx_set_real_parm(lp_, LPX_K_TOLDJ, dualTolerance_); lpx_set_real_parm(lp_, LPX_K_TOLBND, primalTolerance_); lpx_set_obj_coef(lp_, 0, objOffset_); lpx_set_prob_name(lp_, const_cast< char * >(probName_.c_str())); /* Stefan: with the new simplex algorithm in Glpk 4.31, some netlib instances (e.g., dfl001) take very long or get into a cycle. Thus, let's try to leave parameters onto their defaults. */ // lpx_set_int_parm(lp_,LPX_K_PRESOL,0) ; // lpx_set_int_parm(lp_,LPX_K_DUAL,1) ; // lpx_set_int_parm(lp_,LPX_K_SCALE,3) ; /* Printing is a bit more complicated. Set the log level in the handler and set the print parameter in glpk. */ lpx_set_int_parm(lp_, LPX_K_MSGLEV, 1); messageHandler()->setLogLevel(1); /* Enable cuts if they're available. This is a bit of a pain, as the interface has changed since it was first introduced in 4.9. LPX_K_USECUTS appears in 4.9; the parameter value appears to be unused in this version. LPX_C_ALL appears in 4.10. */ #ifdef LPX_K_USECUTS #ifdef LPX_C_ALL lpx_set_int_parm(lp_, LPX_K_USECUTS, LPX_C_ALL); #else lpx_set_int_parm(lp_, LPX_K_USECUTS, 0); #endif #endif } //----------------------------------------------------------------------------- void OGSI::gutsOfDestructor() { if (lp_ != NULL) { lpx_delete_prob(lp_); lp_ = NULL; freeAllMemory(); } assert(lp_ == NULL); assert(obj_ == NULL); assert(collower_ == NULL); assert(colupper_ == NULL); assert(ctype_ == NULL); assert(rowsense_ == NULL); assert(rhs_ == NULL); assert(rowrange_ == NULL); assert(rowlower_ == NULL); assert(rowupper_ == NULL); assert(colsol_ == NULL); assert(rowsol_ == NULL); assert(redcost_ == NULL); assert(rowact_ == NULL); assert(matrixByRow_ == NULL); assert(matrixByCol_ == NULL); } //----------------------------------------------------------------------------- // free cached vectors //----------------------------------------------------------------------------- void OGSI::freeCachedColRim() { delete[] ctype_; delete[] obj_; delete[] collower_; delete[] colupper_; ctype_ = NULL; obj_ = NULL; collower_ = NULL; colupper_ = NULL; } //----------------------------------------------------------------------------- void OGSI::freeCachedRowRim() { delete[] rowsense_; delete[] rhs_; delete[] rowrange_; delete[] rowlower_; delete[] rowupper_; rowsense_ = NULL; rhs_ = NULL; rowrange_ = NULL; rowlower_ = NULL; rowupper_ = NULL; } //----------------------------------------------------------------------------- void OGSI::freeCachedMatrix() { delete matrixByRow_; delete matrixByCol_; matrixByRow_ = NULL; matrixByCol_ = NULL; } //----------------------------------------------------------------------------- void OGSI::freeCachedResults() { iter_used_ = 0; isAbandoned_ = false; isIterationLimitReached_ = false; isTimeLimitReached_ = false; isPrimInfeasible_ = false; isDualInfeasible_ = false; isFeasible_ = false; delete[] colsol_; delete[] rowsol_; delete[] redcost_; delete[] rowact_; colsol_ = NULL; rowsol_ = NULL; redcost_ = NULL; rowact_ = NULL; } //----------------------------------------------------------------------------- void OGSI::freeCachedData(int keepCached) { if (!(keepCached & OGSI::KEEPCACHED_COLUMN)) freeCachedColRim(); if (!(keepCached & OGSI::KEEPCACHED_ROW)) freeCachedRowRim(); if (!(keepCached & OGSI::KEEPCACHED_MATRIX)) freeCachedMatrix(); if (!(keepCached & OGSI::KEEPCACHED_RESULTS)) freeCachedResults(); } //----------------------------------------------------------------------------- void OGSI::freeAllMemory() { freeCachedData(OGSI::KEEPCACHED_NONE); delete[] hotStartCStat_; delete[] hotStartRStat_; hotStartCStat_ = NULL; hotStartCStatSize_ = 0; hotStartRStat_ = NULL; hotStartRStatSize_ = 0; } //----------------------------------------------------------------------------- /*! Set the objective function name. */ void OGSI::setObjName(std::string name) { OsiSolverInterface::setObjName(name); lpx_set_obj_name(lp_, const_cast< char * >(name.c_str())); } /*! Set a row name. Make sure both glpk and OSI see the same name. */ void OGSI::setRowName(int ndx, std::string name) { int nameDiscipline; /* Quietly do nothing if the index is out of bounds. */ if (ndx < 0 || ndx >= getNumRows()) { return; } /* Get the name discipline. Quietly do nothing if it's auto. */ (void)getIntParam(OsiNameDiscipline, nameDiscipline); if (nameDiscipline == 0) { return; } /* Set the name in the OSI base, then in the consys structure. */ OsiSolverInterface::setRowName(ndx, name); lpx_set_row_name(lp_, ndx + 1, const_cast< char * >(name.c_str())); return; } /*! Set a column name. Make sure both glpk and OSI see the same name. */ void OGSI::setColName(int ndx, std::string name) { int nameDiscipline; /* Quietly do nothing if the index is out of bounds. */ if (ndx < 0 || ndx >= getNumCols()) { return; } /* Get the name discipline. Quietly do nothing if it's auto. */ (void)getIntParam(OsiNameDiscipline, nameDiscipline); if (nameDiscipline == 0) { return; } /* Set the name in the OSI base, then in the consys structure. */ OsiSolverInterface::setColName(ndx, name); lpx_set_col_name(lp_, ndx + 1, const_cast< char * >(name.c_str())); return; } //----------------------------------------------------------------------------- unsigned int OsiGlpkSolverInterface::numInstances_ = 0; void OsiGlpkSolverInterface::decrementInstanceCounter() { assert(numInstances_ != 0); if (--numInstances_ == 0) glp_free_env(); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiGlpk/Makefile.am0000644000175200017520000000330612243462564016012 0ustar coincoin# Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1942 2013-11-21 19:56:36Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsiGlpk # ######################################################################## # Name of the library compiled in this directory. lib_LTLIBRARIES = libOsiGlpk.la # List all source files for this library, including headers libOsiGlpk_la_SOURCES = \ OsiGlpkSolverInterface.cpp OsiGlpkSolverInterface.hpp # List all additionally required libraries if DEPENDENCY_LINKING libOsiGlpk_la_LIBADD = $(OSILIB_LIBS) ../Osi/libOsi.la endif # This is for libtool libOsiGlpk_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows. AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../Osi` $(COINUTILS_CFLAGS) $(GLPK_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'include/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = OsiGlpkSolverInterface.hpp DyLP-1.10.4/Osi/src/OsiGlpk/OsiGlpkSolverInterface.hpp0000644000175200017520000007717713414504306021064 0ustar coincoin//----------------------------------------------------------------------------- // name: OSI Interface for GLPK //----------------------------------------------------------------------------- // Copyright (C) 2001, Vivian De Smedt, Braden Hunsaker // Copyright (C) 2003 University of Pittsburgh // University of Pittsburgh coding done by Brady Hunsaker // All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiGlpkSolverInterface_H #define OsiGlpkSolverInterface_H #include #include "OsiSolverInterface.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" /** GPLK Solver Interface Instantiation of OsiGlpkSolverInterface for GPLK */ #ifndef LPX #define LPX glp_prob #endif #ifndef GLP_PROB_DEFINED #define GLP_PROB_DEFINED // Glpk < 4.48: typedef struct { double _opaque_prob[100]; } glp_prob; // Glpk 4.48: typedef struct glp_prob glp_prob; #endif class OsiGlpkSolverInterface : virtual public OsiSolverInterface { friend void OsiGlpkSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); public: //--------------------------------------------------------------------------- /**@name Solve methods */ //@{ /// Solve initial LP relaxation virtual void initialSolve(); /// Resolve an LP relaxation after problem modification virtual void resolve(); /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound(); //@} //--------------------------------------------------------------------------- /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. */ //@{ // Set an integer parameter bool setIntParam(OsiIntParam key, int value); // Set an double parameter bool setDblParam(OsiDblParam key, double value); // Set a string parameter bool setStrParam(OsiStrParam key, const std::string &value); // Set a hint parameter bool setHintParam(OsiHintParam key, bool sense = true, OsiHintStrength strength = OsiHintTry, void *info = 0); // Get an integer parameter bool getIntParam(OsiIntParam key, int &value) const; // Get an double parameter bool getDblParam(OsiDblParam key, double &value) const; // Get a string parameter bool getStrParam(OsiStrParam key, std::string &value) const; //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there a numerical difficulties? virtual bool isAbandoned() const; /// Is optimality proven? virtual bool isProvenOptimal() const; /// Is primal infeasiblity proven? virtual bool isProvenPrimalInfeasible() const; /// Is dual infeasiblity proven? virtual bool isProvenDualInfeasible() const; /// Is the given primal objective limit reached? virtual bool isPrimalObjectiveLimitReached() const; /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const; /// Time limit reached? virtual bool isTimeLimitReached() const; /// (Integer) Feasible solution found? virtual bool isFeasible() const; //@} //--------------------------------------------------------------------------- /**@name WarmStart related methods */ //@{ /*! \brief Get an empty warm start object This routine returns an empty CoinWarmStartBasis object. Its purpose is to provide a way to give a client a warm start basis object of the appropriate type, which can resized and modified as desired. */ inline CoinWarmStart *getEmptyWarmStart() const { return (dynamic_cast< CoinWarmStart * >(new CoinWarmStartBasis())); } /// Get warmstarting information virtual CoinWarmStart *getWarmStart() const; /** Set warmstarting information. Return true/false depending on whether the warmstart information was accepted or not. */ virtual bool setWarmStart(const CoinWarmStart *warmstart); //@} //--------------------------------------------------------------------------- /**@name Hotstart related methods (primarily used in strong branching).
The user can create a hotstart (a snapshot) of the optimization process then reoptimize over and over again always starting from there.
NOTE: between hotstarted optimizations only bound changes are allowed. */ //@{ /// Create a hotstart point of the optimization process virtual void markHotStart(); /// Optimize starting from the hotstart virtual void solveFromHotStart(); /// Delete the snapshot virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem information methods These methods call the solver's query routines to return information about the problem referred to by the current object. Querying a problem that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /**@name Methods related to querying the input data */ //@{ /// Get number of columns virtual int getNumCols() const; /// Get number of rows virtual int getNumRows() const; /// Get number of nonzero elements virtual CoinBigIndex getNumElements() const; /// Get pointer to array[getNumCols()] of column lower bounds virtual const double *getColLower() const; /// Get pointer to array[getNumCols()] of column upper bounds virtual const double *getColUpper() const; /** Get pointer to array[getNumRows()] of row constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ virtual const char *getRowSense() const; /** Get pointer to array[getNumRows()] of rows right-hand sides
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ virtual const double *getRightHandSide() const; /** Get pointer to array[getNumRows()] of row ranges.
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is 0.0
*/ virtual const double *getRowRange() const; /// Get pointer to array[getNumRows()] of row lower bounds virtual const double *getRowLower() const; /// Get pointer to array[getNumRows()] of row upper bounds virtual const double *getRowUpper() const; /// Get pointer to array[getNumCols()] of objective function coefficients virtual const double *getObjCoefficients() const; /// Get objective function sense (1 for min (default), -1 for max) virtual double getObjSense() const; /// Return true if column is continuous virtual bool isContinuous(int colNumber) const; #if 0 /// Return true if column is binary virtual bool isBinary(int columnNumber) const; /** Return true if column is integer. Note: This function returns true if the the column is binary or a general integer. */ virtual bool isInteger(int columnNumber) const; /// Return true if column is general integer virtual bool isIntegerNonBinary(int columnNumber) const; /// Return true if column is binary and not fixed at either bound virtual bool isFreeBinary(int columnNumber) const; #endif /// Get pointer to row-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByRow() const; /// Get pointer to column-wise copy of matrix virtual const CoinPackedMatrix *getMatrixByCol() const; /// Get solver's value for infinity virtual double getInfinity() const; //@} /**@name Methods related to querying the solution */ //@{ /// Get pointer to array[getNumCols()] of primal solution vector virtual const double *getColSolution() const; /// Get pointer to array[getNumRows()] of dual prices virtual const double *getRowPrice() const; /// Get a pointer to array[getNumCols()] of reduced costs virtual const double *getReducedCost() const; /** Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector */ virtual const double *getRowActivity() const; /// Get objective function value virtual double getObjValue() const; /** Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver. */ virtual int getIterationCount() const; /** Get as many dual rays as the solver can provide. (In case of proven primal infeasibility there should be at least one.) NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumRows() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getDualRays(int maxNumRays, bool fullRay = false) const; /** Get as many primal rays as the solver can provide. (In case of proven dual infeasibility there should be at least one.) The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumCols() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector< double * > getPrimalRays(int maxNumRays) const; #if 0 /** Get vector of indices of solution which are integer variables presently at fractional values */ virtual OsiVectorInt getFractionalIndices(const double etol=1.e-05) const; #endif //@} //@} //--------------------------------------------------------------------------- /**@name Problem modifying methods */ //@{ //------------------------------------------------------------------------- /**@name Changing bounds on variables and constraints */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff(int elementIndex, double elementValue); using OsiSolverInterface::setColLower; /** Set a single column lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setColLower(int elementIndex, double elementValue); using OsiSolverInterface::setColUpper; /** Set a single column upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setColUpper(int elementIndex, double elementValue); /** Set a single column lower and upper bound
The default implementation just invokes setColLower() and setColUpper() */ virtual void setColBounds(int elementIndex, double lower, double upper); /** Set the bounds on a number of columns simultaneously
The default implementation just invokes setColLower() and setColUpper() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the variables whose either bound changes @param boundList the new lower/upper bound pairs for the variables */ virtual void setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set a single row lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setRowLower(int elementIndex, double elementValue); /** Set a single row upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setRowUpper(int elementIndex, double elementValue); /** Set a single row lower and upper bound
The default implementation just invokes setRowLower() and setRowUpper() */ virtual void setRowBounds(int elementIndex, double lower, double upper); /** Set the type of a single row
*/ virtual void setRowType(int index, char sense, double rightHandSide, double range); /** Set the bounds on a number of rows simultaneously
The default implementation just invokes setRowLower() and setRowUpper() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the constraints */ virtual void setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set the type of a number of rows simultaneously
The default implementation just invokes setRowType() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the constraints whose any characteristics changes @param senseList the new senses @param rhsList the new right hand sides @param rangeList the new ranges */ virtual void setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList); //@} //------------------------------------------------------------------------- /**@name Integrality related changing methods */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index); /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index); /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int *indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int *indices, int len); //@} //------------------------------------------------------------------------- /// Set objective function sense (1 for min (default), -1 for max,) virtual void setObjSense(double s); /** Set the primal solution column values colsol[numcols()] is an array of values of the problem column variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of colsol() until changed by another call to setColsol() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double *colsol); /** Set dual solution vector rowprice[numrows()] is an array of values of the problem row dual variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of rowprice() until changed by another call to setRowprice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double *rowprice); //------------------------------------------------------------------------- /**@name Methods to expand a problem.
Note that if a column is added then by default it will correspond to a continuous variable. */ //@{ using OsiSolverInterface::addCol; /** */ virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj); using OsiSolverInterface::addCols; /** */ virtual void addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj); /** */ virtual void deleteCols(const int num, const int *colIndices); using OsiSolverInterface::addRow; /** */ virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub); /** */ virtual void addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng); using OsiSolverInterface::addRows; /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng); /** */ virtual void deleteRows(const int num, const int *rowIndices); #if 0 // ??? implemented in OsiSolverInterface //----------------------------------------------------------------------- /** Apply a collection of cuts.
Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.numberIneffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.numberInconsistent() -- number of invalid cuts
  • ReturnCode.numberInconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.numberInfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.numberApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == numberIneffective() + numberInconsistent() + numberInconsistentWrtIntegerModel() + numberInfeasible() + nubmerApplied()
*/ virtual ApplyCutsReturnCode applyCuts(const OsiCuts & cs, double effectivenessLb = 0.0); #endif //@} //@} //--------------------------------------------------------------------------- /**@name Methods to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by lower and upper bounds). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub); /** Load in an problem by copying the arguments (the constraints on the rows are given by sense/rhs/range triplets). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
*/ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by sense/rhs/range triplets). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng); using OsiSolverInterface::readMps; /** Read an mps file from the given filename */ virtual int readMps(const char *filename, const char *extension = "mps"); /** Write the problem into an mps file of the given filename. If objSense is non zero then -1.0 forces the code to write a maximization objective and +1.0 to write a minimization one. If 0.0 then solver can do what it wants */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense = 0.0) const; //@} //--------------------------------------------------------------------------- /*! \name Methods for row and column names. Only the set methods need to be overridden to ensure consistent names between OsiGlpk and the OSI base class. */ //@{ /*! \brief Set the objective function name */ void setObjName(std::string name); /*! \brief Set a row name Quietly does nothing if the name discipline (#OsiNameDiscipline) is auto. Quietly fails if the row index is invalid. */ void setRowName(int ndx, std::string name); /*! \brief Set a column name Quietly does nothing if the name discipline (#OsiNameDiscipline) is auto. Quietly fails if the column index is invalid. */ void setColName(int ndx, std::string name); //@} //--------------------------------------------------------------------------- /**@name GLPK specific public interfaces */ //@{ enum keepCachedFlag { /// discard all cached data (default) KEEPCACHED_NONE = 0, /// column information: objective values, lower and upper bounds, variable types KEEPCACHED_COLUMN = 1, /// row information: right hand sides, ranges and senses, lower and upper bounds for row KEEPCACHED_ROW = 2, /// problem matrix: matrix ordered by column and by row KEEPCACHED_MATRIX = 4, /// LP solution: primal and dual solution, reduced costs, row activities KEEPCACHED_RESULTS = 8, /// only discard cached LP solution KEEPCACHED_PROBLEM = KEEPCACHED_COLUMN | KEEPCACHED_ROW | KEEPCACHED_MATRIX, /// keep all cached data (similar to getMutableLpPtr()) KEEPCACHED_ALL = KEEPCACHED_PROBLEM | KEEPCACHED_RESULTS, /// free only cached column and LP solution information FREECACHED_COLUMN = KEEPCACHED_PROBLEM & ~KEEPCACHED_COLUMN, /// free only cached row and LP solution information FREECACHED_ROW = KEEPCACHED_PROBLEM & ~KEEPCACHED_ROW, /// free only cached matrix and LP solution information FREECACHED_MATRIX = KEEPCACHED_PROBLEM & ~KEEPCACHED_MATRIX, /// free only cached LP solution information FREECACHED_RESULTS = KEEPCACHED_ALL & ~KEEPCACHED_RESULTS }; /// Get pointer to GLPK model LPX *getModelPtr(); //@} /**@name Static instance counter methods */ /** GLPK has a context which must be freed after all GLPK LPs (or MIPs) are freed. * It is automatically created when the first LP is created. This method:
  • Increments by 1 the number of uses of the GLPK environment.
*/ static void incrementInstanceCounter() { ++numInstances_; } /** GLPK has a context which must be freed after all GLPK LPs (or MIPs) are freed. This method:
  • Decrements by 1 the number of uses of the GLPK environment.
  • Deletes the GLPK environment when the number of uses is change to 0 from 1.
*/ static void decrementInstanceCounter(); /// Return the number of LP/MIP instances of instantiated objects using the GLPK environment. static unsigned int getNumInstances() { return numInstances_; } //@} /**@name Constructors and destructor */ //@{ /// Default Constructor OsiGlpkSolverInterface(); /// Clone virtual OsiSolverInterface *clone(bool copyData = true) const; /// Copy constructor OsiGlpkSolverInterface(const OsiGlpkSolverInterface &); /// Assignment operator OsiGlpkSolverInterface &operator=(const OsiGlpkSolverInterface &rhs); /// Destructor virtual ~OsiGlpkSolverInterface(); /// Resets as if default constructor virtual void reset(); //@} protected: /**@name Protected methods */ //@{ /// Apply a row cut. Return true if cut was applied. virtual void applyRowCut(const OsiRowCut &rc); /** Apply a column cut (bound adjustment). Return true if cut was applied. */ virtual void applyColCut(const OsiColCut &cc); /// Pointer to the model LPX *getMutableModelPtr() const; //@} private: /**@name Private methods */ //@{ /// The real work of a copy constructor (used by copy and assignment) void gutsOfCopy(const OsiGlpkSolverInterface &source); /// The real work of the constructor void gutsOfConstructor(); /// The real work of the destructor void gutsOfDestructor(); /// free cached column rim vectors void freeCachedColRim(); /// free cached row rim vectors void freeCachedRowRim(); /// free cached result vectors void freeCachedResults(); /// free cached matrices void freeCachedMatrix(); /// free all cached data (except specified entries, see getLpPtr()) void freeCachedData(int keepCached = KEEPCACHED_NONE); /// free all allocated memory void freeAllMemory(); /// Just for testing purposes void printBounds(); /// Fill cached collumn bounds void fillColBounds() const; //@} /**@name Private member data */ //@{ /// GPLK model represented by this class instance mutable LPX *lp_; /// number of GLPK instances currently in use (counts only those created by OsiGlpk) static unsigned int numInstances_; // Remember whether simplex or b&b was most recently done // 0 = simplex; 1 = b&b int bbWasLast_; // Int parameters. /// simplex iteration limit (per call to solver) int maxIteration_; /// simplex iteration limit (for hot start) int hotStartMaxIteration_; /// OSI name discipline int nameDisc_; // Double parameters. /// dual objective limit (measure of badness; stop if we're worse) double dualObjectiveLimit_; /// primal objective limit (measure of goodness; stop if we're better) double primalObjectiveLimit_; /// dual feasibility tolerance double dualTolerance_; /// primal feasibility tolerance double primalTolerance_; /// constant offset for objective function double objOffset_; // String parameters /// Problem name std::string probName_; /*! \brief Array for info blocks associated with hints. */ mutable void *info_[OsiLastHintParam]; /// Hotstart information /// size of column status and value arrays int hotStartCStatSize_; /// column status array int *hotStartCStat_; /// primal variable values double *hotStartCVal_; /// dual variable values double *hotStartCDualVal_; /// size of row status and value arrays int hotStartRStatSize_; /// row status array int *hotStartRStat_; /// row slack values double *hotStartRVal_; /// row dual values double *hotStartRDualVal_; // Status information /// glpk stopped on iteration limit bool isIterationLimitReached_; /// glpk stopped on time limit bool isTimeLimitReached_; /// glpk abandoned the problem bool isAbandoned_; /*! \brief glpk stopped on lower objective limit When minimising, this is the primal limit; when maximising, the dual limit. */ bool isObjLowerLimitReached_; /*! \brief glpk stopped on upper objective limit When minimising, this is the dual limit; when maximising, the primal limit. */ bool isObjUpperLimitReached_; /// glpk declared the problem primal infeasible bool isPrimInfeasible_; /// glpk declared the problem dual infeasible bool isDualInfeasible_; /// glpk declared the problem feasible bool isFeasible_; /**@name Cached information derived from the GLPK model */ //@{ /// Number of iterations mutable int iter_used_; /// Pointer to objective vector mutable double *obj_; /// Pointer to dense vector of variable lower bounds mutable double *collower_; /// Pointer to dense vector of variable lower bounds mutable double *colupper_; /// Pointer to dense vector of variable types (continous, binary, integer) mutable char *ctype_; /// Pointer to dense vector of row sense indicators mutable char *rowsense_; /// Pointer to dense vector of row right-hand side values mutable double *rhs_; /// Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows) mutable double *rowrange_; /// Pointer to dense vector of row lower bounds mutable double *rowlower_; /// Pointer to dense vector of row upper bounds mutable double *rowupper_; /// Pointer to primal solution vector mutable double *colsol_; /// Pointer to dual solution vector mutable double *rowsol_; /// Pointer to reduced cost vector mutable double *redcost_; /// Pointer to row activity (slack) vector mutable double *rowact_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByRow_; /// Pointer to row-wise copy of problem matrix coefficients. mutable CoinPackedMatrix *matrixByCol_; //@} //@} }; //############################################################################# /** A function that tests the methods in the OsiGlpkSolverInterface class. */ void OsiGlpkSolverInterfaceUnitTest(const std::string &mpsDir, const std::string &netlibDir); #endif // OsiGlpkSolverInterface_H /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/OsiGlpk/osi-glpk-uninstalled.pc.in0000644000175200017520000000046611507670402020752 0ustar coincoinprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiGlpk Name: OsiGlpk Description: COIN-OR Open Solver Interface for GLPK URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiGlpk.la @OSIGLPKLIB_PCLIBS@ Cflags: -I@abs_source_dir@/src/OsiGlpk Requires: osi @OSIGLPKLIB_PCREQUIRES@ DyLP-1.10.4/Osi/src/OsiGlpk/osi-glpk.pc.in0000644000175200017520000000051111510106235016411 0ustar coincoinprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiGlpk Description: COIN-OR Open Solver Interface for GLPK URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiGlpk @OSIGLPKLIB_PCLIBS@ Cflags: -I${includedir} Requires: osi @OSIGLPKLIB_PCREQUIRES@ DyLP-1.10.4/Osi/src/Osi/0000755000175200017520000000000013434203624013127 5ustar coincoinDyLP-1.10.4/Osi/src/Osi/OsiAuxInfo.cpp0000644000175200017520000001101313414504051015647 0ustar coincoin// Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include #include "CoinPragma.hpp" #include "CoinHelperFunctions.hpp" #include "OsiSolverInterface.hpp" #include "OsiAuxInfo.hpp" // Default Constructor OsiAuxInfo::OsiAuxInfo(void *appData) : appData_(appData) { } // Destructor OsiAuxInfo::~OsiAuxInfo() { } // Clone OsiAuxInfo * OsiAuxInfo::clone() const { return new OsiAuxInfo(*this); } // Copy constructor OsiAuxInfo::OsiAuxInfo(const OsiAuxInfo &rhs) : appData_(rhs.appData_) { } OsiAuxInfo & OsiAuxInfo::operator=(const OsiAuxInfo &rhs) { if (this != &rhs) { appData_ = rhs.appData_; } return *this; } // Default Constructor OsiBabSolver::OsiBabSolver(int solverType) : OsiAuxInfo() , bestObjectiveValue_(1.0e100) , mipBound_(-1.0e100) , solver_(NULL) , bestSolution_(NULL) , beforeLower_(NULL) , beforeUpper_(NULL) , extraInfo_(NULL) , solverType_(solverType) , sizeSolution_(0) , extraCharacteristics_(0) { } // Destructor OsiBabSolver::~OsiBabSolver() { delete[] bestSolution_; } // Clone OsiAuxInfo * OsiBabSolver::clone() const { return new OsiBabSolver(*this); } // Copy constructor OsiBabSolver::OsiBabSolver(const OsiBabSolver &rhs) : OsiAuxInfo(rhs) , bestObjectiveValue_(rhs.bestObjectiveValue_) , mipBound_(rhs.mipBound_) , solver_(rhs.solver_) , bestSolution_(NULL) , beforeLower_(rhs.beforeLower_) , beforeUpper_(rhs.beforeUpper_) , extraInfo_(rhs.extraInfo_) , solverType_(rhs.solverType_) , sizeSolution_(rhs.sizeSolution_) , extraCharacteristics_(rhs.extraCharacteristics_) { if (rhs.bestSolution_) { assert(solver_); bestSolution_ = CoinCopyOfArray(rhs.bestSolution_, sizeSolution_); } } OsiBabSolver & OsiBabSolver::operator=(const OsiBabSolver &rhs) { if (this != &rhs) { OsiAuxInfo::operator=(rhs); delete[] bestSolution_; solver_ = rhs.solver_; solverType_ = rhs.solverType_; bestObjectiveValue_ = rhs.bestObjectiveValue_; bestSolution_ = NULL; mipBound_ = rhs.mipBound_; sizeSolution_ = rhs.sizeSolution_; extraCharacteristics_ = rhs.extraCharacteristics_; beforeLower_ = rhs.beforeLower_; beforeUpper_ = rhs.beforeUpper_; extraInfo_ = rhs.extraInfo_; if (rhs.bestSolution_) { assert(solver_); bestSolution_ = CoinCopyOfArray(rhs.bestSolution_, sizeSolution_); } } return *this; } // Returns 1 if solution, 0 if not int OsiBabSolver::solution(double &solutionValue, double *betterSolution, int numberColumns) { if (!solver_) return 0; //printf("getSol %x solution_address %x - value %g\n", // this,bestSolution_,bestObjectiveValue_); if (bestObjectiveValue_ < solutionValue && bestSolution_) { // new solution memcpy(betterSolution, bestSolution_, CoinMin(numberColumns, sizeSolution_) * sizeof(double)); if (sizeSolution_ < numberColumns) CoinZeroN(betterSolution + sizeSolution_, numberColumns - sizeSolution_); solutionValue = bestObjectiveValue_; // free up //delete [] bestSolution_; //bestSolution_=NULL; //bestObjectiveValue_=1.0e100; return 1; } else { return 0; } } bool OsiBabSolver::hasSolution(double &solutionValue, double *solution) { if (!bestSolution_) return false; int numberColumns = solver_->getNumCols(); memcpy(solution, bestSolution_, numberColumns * sizeof(double)); solutionValue = bestObjectiveValue_; return true; } // set solution void OsiBabSolver::setSolution(const double *solution, int numberColumns, double objectiveValue) { assert(solver_); // just in case size has changed delete[] bestSolution_; sizeSolution_ = CoinMin(solver_->getNumCols(), numberColumns); bestSolution_ = new double[sizeSolution_]; CoinZeroN(bestSolution_, sizeSolution_); CoinMemcpyN(solution, CoinMin(sizeSolution_, numberColumns), bestSolution_); bestObjectiveValue_ = objectiveValue * solver_->getObjSense(); } // Get objective (well mip bound) double OsiBabSolver::mipBound() const { assert(solver_); if (solverType_ != 3) return solver_->getObjSense() * solver_->getObjValue(); else return mipBound_; } // Returns true if node feasible bool OsiBabSolver::mipFeasible() const { assert(solver_); if (solverType_ == 0) return true; else if (solverType_ != 3) return solver_->isProvenOptimal(); else return mipBound_ < 1.0e50; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiConfig.h0000644000175200017520000000242412101340333015147 0ustar coincoin/* Copyright (C) 2011 * All Rights Reserved. * This code is published under the Eclipse Public License. * * $Id: OsiConfig.h 1881 2013-01-28 00:05:47Z stefan $ * * Include file for the configuration of Osi. * * On systems where the code is configured with the configure script * (i.e., compilation is always done with HAVE_CONFIG_H defined), this * header file includes the automatically generated header file. * * On systems that are compiled in other ways (e.g., with the * Developer Studio), a header files is included to define those * macros that depend on the operating system and the compiler. The * macros that define the configuration of the particular user setting * (e.g., presence of other COIN-OR packages or third party code) are set * by the files config_*default.h. The project maintainer needs to remember * to update these file and choose reasonable defines. * A user can modify the default setting by editing the config_*default.h files. */ #ifndef __OSICONFIG_H__ #define __OSICONFIG_H__ #ifdef HAVE_CONFIG_H #ifdef OSI_BUILD #include "config.h" #else #include "config_osi.h" #endif #else /* HAVE_CONFIG_H */ #ifdef OSI_BUILD #include "config_default.h" #else #include "config_osi_default.h" #endif #endif /* HAVE_CONFIG_H */ #endif /*__OSICONFIG_H__*/ DyLP-1.10.4/Osi/src/Osi/config_osi_default.h0000644000175200017520000000110713434065666017136 0ustar coincoin /***************************************************************************/ /* HERE DEFINE THE PROJECT SPECIFIC PUBLIC MACROS */ /* These are only in effect in a setting that doesn't use configure */ /***************************************************************************/ /* Version number of project */ #define OSI_VERSION "0.108.0" /* Major Version number of project */ #define OSI_VERSION_MAJOR 0 /* Minor Version number of project */ #define OSI_VERSION_MINOR 108 /* Release Version number of project */ #define OSI_VERSION_RELEASE 0 DyLP-1.10.4/Osi/src/Osi/Makefile.am0000644000175200017520000000460212243462564015174 0ustar coincoin# Copyright (C) 2010 Lou Hafer # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1942 2013-11-21 19:56:36Z stefan $ # Author: Lou Hafer SFU 2010-07-29 AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsi # ######################################################################## # Name of the library compiled in this directory. We want it to be installed # in $libdir lib_LTLIBRARIES = libOsi.la # List all source files for this library, including headers libOsi_la_SOURCES = \ OsiConfig.h \ OsiAuxInfo.cpp OsiAuxInfo.hpp \ OsiBranchingObject.cpp OsiBranchingObject.hpp \ OsiChooseVariable.cpp OsiChooseVariable.hpp \ OsiColCut.cpp OsiColCut.hpp \ OsiCollections.hpp \ OsiCut.cpp OsiCut.hpp \ OsiCuts.cpp OsiCuts.hpp \ OsiNames.cpp \ OsiPresolve.cpp OsiPresolve.hpp \ OsiRowCut.cpp OsiRowCut.hpp \ OsiRowCutDebugger.cpp OsiRowCutDebugger.hpp \ OsiSolverBranch.cpp OsiSolverBranch.hpp \ OsiSolverInterface.cpp OsiSolverInterface.hpp \ OsiSolverParameters.hpp # List all additionally required libraries if DEPENDENCY_LINKING libOsi_la_LIBADD = $(OSILIB_LIBS) endif # This is for libtool libOsi_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags. AM_CPPFLAGS = $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation. # This "cygpath" stuff is necessary to compile with native compilers on Windows. DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'includedir/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ OsiAuxInfo.hpp \ OsiBranchingObject.hpp \ OsiChooseVariable.hpp \ OsiColCut.hpp \ OsiCollections.hpp \ OsiCut.hpp \ OsiCuts.hpp \ OsiPresolve.hpp \ OsiRowCut.hpp \ OsiRowCutDebugger.hpp \ OsiSolverBranch.hpp \ OsiSolverInterface.hpp \ OsiSolverParameters.hpp install-exec-local: $(install_sh_DATA) config_osi.h $(DESTDIR)$(includecoindir)/OsiConfig.h uninstall-local: rm -f $(DESTDIR)$(includecoindir)/OsiConfig.h DyLP-1.10.4/Osi/src/Osi/OsiAuxInfo.hpp0000644000175200017520000002065313414504051015666 0ustar coincoin// Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiAuxInfo_H #define OsiAuxInfo_H class OsiSolverInterface; //############################################################################# /** This class allows for a more structured use of algorithmic tweaking to an OsiSolverInterface. It is designed to replace the simple use of appData_ pointer. This has been done to make it easier to use NonLinear solvers and other exotic beasts in a branch and bound mode. After this class definition there is one for a derived class for just such a purpose. */ class OsiAuxInfo { public: // Default Constructor OsiAuxInfo(void *appData = NULL); // Copy Constructor OsiAuxInfo(const OsiAuxInfo &rhs); // Destructor virtual ~OsiAuxInfo(); /// Clone virtual OsiAuxInfo *clone() const; /// Assignment operator OsiAuxInfo &operator=(const OsiAuxInfo &rhs); /// Get application data inline void *getApplicationData() const { return appData_; } protected: /// Pointer to user-defined data structure void *appData_; }; //############################################################################# /** This class allows for the use of more exotic solvers e.g. Non-Linear or Volume. You can derive from this although at present I can't see the need. */ class OsiBabSolver : public OsiAuxInfo { public: // Default Constructor OsiBabSolver(int solverType = 0); // Copy Constructor OsiBabSolver(const OsiBabSolver &rhs); // Destructor virtual ~OsiBabSolver(); /// Clone virtual OsiAuxInfo *clone() const; /// Assignment operator OsiBabSolver &operator=(const OsiBabSolver &rhs); /// Update solver inline void setSolver(const OsiSolverInterface *solver) { solver_ = solver; } /// Update solver inline void setSolver(const OsiSolverInterface &solver) { solver_ = &solver; } /** returns 0 if no heuristic solution, 1 if valid solution with better objective value than one passed in Sets solution values if good, sets objective value numberColumns is size of newSolution */ int solution(double &objectiveValue, double *newSolution, int numberColumns); /** Set solution and objective value. Number of columns and optimization direction taken from current solver. Size of solution is numberColumns (may be padded or truncated in function) */ void setSolution(const double *solution, int numberColumns, double objectiveValue); /** returns true if the object stores a solution, false otherwise. If there is a solution then solutionValue and solution will be filled out as well. In that case the user needs to allocate solution to be a big enough array. */ bool hasSolution(double &solutionValue, double *solution); /** Sets solver type 0 - normal LP solver 1 - DW - may also return heuristic solutions 2 - NLP solver or similar - can't compute objective value just from solution check solver to see if feasible and what objective value is - may also return heuristic solution 3 - NLP solver or similar - can't compute objective value just from solution check this (rather than solver) to see if feasible and what objective value is. Using Outer Approximation so called lp based - may also return heuristic solution 4 - normal solver but cuts are needed for integral solution */ inline void setSolverType(int value) { solverType_ = value; } /** gets solver type 0 - normal LP solver 1 - DW - may also return heuristic solutions 2 - NLP solver or similar - can't compute objective value just from solution check this (rather than solver) to see if feasible and what objective value is - may also return heuristic solution 3 - NLP solver or similar - can't compute objective value just from solution check this (rather than solver) to see if feasible and what objective value is. Using Outer Approximation so called lp based - may also return heuristic solution 4 - normal solver but cuts are needed for integral solution */ inline int solverType() const { return solverType_; } /** Return true if getting solution may add cuts so hot start etc will be obsolete */ inline bool solutionAddsCuts() const { return solverType_ == 3; } /// Return true if we should try cuts at root even if looks satisfied inline bool alwaysTryCutsAtRootNode() const { return solverType_ == 4; } /** Returns true if can use solver objective or feasible values, otherwise use mipBound etc */ inline bool solverAccurate() const { return solverType_ == 0 || solverType_ == 2 || solverType_ == 4; } /// Returns true if can use reduced costs for fixing inline bool reducedCostsAccurate() const { return solverType_ == 0 || solverType_ == 4; } /// Get objective (well mip bound) double mipBound() const; /// Returns true if node feasible bool mipFeasible() const; /// Set mip bound (only used for some solvers) inline void setMipBound(double value) { mipBound_ = value; } /// Get objective value of saved solution inline double bestObjectiveValue() const { return bestObjectiveValue_; } /// Says whether we want to try cuts at all inline bool tryCuts() const { return solverType_ != 2; } /// Says whether we have a warm start (so can do strong branching) inline bool warmStart() const { return solverType_ != 2; } /** Get bit mask for odd actions of solvers 1 - solution or bound arrays may move in mysterious ways e.g. cplex 2 - solver may want bounds before branch */ inline int extraCharacteristics() const { return extraCharacteristics_; } /** Set bit mask for odd actions of solvers 1 - solution or bound arrays may move in mysterious ways e.g. cplex 2 - solver may want bounds before branch */ inline void setExtraCharacteristics(int value) { extraCharacteristics_ = value; } /// Pointer to lower bounds before branch (only if extraCharacteristics set) inline const double *beforeLower() const { return beforeLower_; } /// Set pointer to lower bounds before branch (only if extraCharacteristics set) inline void setBeforeLower(const double *array) { beforeLower_ = array; } /// Pointer to upper bounds before branch (only if extraCharacteristics set) inline const double *beforeUpper() const { return beforeUpper_; } /// Set pointer to upper bounds before branch (only if extraCharacteristics set) inline void setBeforeUpper(const double *array) { beforeUpper_ = array; } /// Set pointer to extra stuff inline void setExtraPointer(void *extraInfo) { extraInfo_ = extraInfo; } /// get pointer to extra info inline void *getExtraPointer() const { return extraInfo_; } protected: /// Objective value of best solution (if there is one) (minimization) double bestObjectiveValue_; /// Current lower bound on solution ( if > 1.0e50 infeasible) double mipBound_; /// Solver to use for getting/setting solutions etc const OsiSolverInterface *solver_; /// Best integer feasible solution double *bestSolution_; /// Pointer to lower bounds before branch (only if extraCharacteristics set) const double *beforeLower_; /// Pointer to upper bounds before branch (only if extraCharacteristics set) const double *beforeUpper_; /// Pointer to extra info void *extraInfo_; /** Solver type 0 - normal LP solver 1 - DW - may also return heuristic solutions 2 - NLP solver or similar - can't compute objective value just from solution check this (rather than solver) to see if feasible and what objective value is - may also return heuristic solution 3 - NLP solver or similar - can't compute objective value just from solution check this (rather than solver) to see if feasible and what objective value is. Using Outer Approximation so called lp based - may also return heuristic solution */ int solverType_; /// Size of solution int sizeSolution_; /** Bit mask for odd actions of solvers 1 - solution or bound arrays may move in mysterious ways e.g. cplex 2 - solver may want bounds before branch */ int extraCharacteristics_; }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiCuts.cpp0000644000175200017520000002360613414504051015227 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include #include #include "OsiCuts.hpp" //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiCuts::OsiCuts() : rowCutPtrs_() , colCutPtrs_() { // nothing to do here } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiCuts::OsiCuts(const OsiCuts &source) : rowCutPtrs_() , colCutPtrs_() { gutsOfCopy(source); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiCuts::~OsiCuts() { gutsOfDestructor(); } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiCuts & OsiCuts::operator=(const OsiCuts &rhs) { if (this != &rhs) { gutsOfDestructor(); gutsOfCopy(rhs); } return *this; } //------------------------------------------------------------------- void OsiCuts::gutsOfCopy(const OsiCuts &source) { assert(sizeRowCuts() == 0); assert(sizeColCuts() == 0); assert(sizeCuts() == 0); int i; int ne = source.sizeRowCuts(); for (i = 0; i < ne; i++) insert(source.rowCut(i)); ne = source.sizeColCuts(); for (i = 0; i < ne; i++) insert(source.colCut(i)); } //------------------------------------------------------------------- void OsiCuts::gutsOfDestructor() { int i; int ne = static_cast< int >(rowCutPtrs_.size()); for (i = 0; i < ne; i++) { if (rowCutPtrs_[i]->globallyValidAsInteger() != 2) delete rowCutPtrs_[i]; } rowCutPtrs_.clear(); ne = static_cast< int >(colCutPtrs_.size()); for (i = 0; i < ne; i++) { if (colCutPtrs_[i]->globallyValidAsInteger() != 2) delete colCutPtrs_[i]; } colCutPtrs_.clear(); assert(sizeRowCuts() == 0); assert(sizeColCuts() == 0); assert(sizeCuts() == 0); } //------------------------------------------------------------ // // Embedded iterator class implementation // //------------------------------------------------------------ OsiCuts::iterator::iterator(OsiCuts &cuts) : cuts_(cuts) , rowCutIndex_(-1) , colCutIndex_(-1) , cutP_(NULL) { this->operator++(); } OsiCuts::iterator::iterator(const OsiCuts::iterator &src) : cuts_(src.cuts_) , rowCutIndex_(src.rowCutIndex_) , colCutIndex_(src.colCutIndex_) , cutP_(src.cutP_) { // nothing to do here } OsiCuts::iterator &OsiCuts::iterator::operator=(const OsiCuts::iterator &rhs) { if (this != &rhs) { cuts_ = rhs.cuts_; rowCutIndex_ = rhs.rowCutIndex_; colCutIndex_ = rhs.colCutIndex_; cutP_ = rhs.cutP_; } return *this; } OsiCuts::iterator::~iterator() { //nothing to do } OsiCuts::iterator OsiCuts::iterator::begin() { rowCutIndex_ = -1; colCutIndex_ = -1; this->operator++(); return *this; } OsiCuts::iterator OsiCuts::iterator::end() { rowCutIndex_ = cuts_.sizeRowCuts(); colCutIndex_ = cuts_.sizeColCuts() - 1; cutP_ = NULL; return *this; } OsiCuts::iterator OsiCuts::iterator::operator++() { cutP_ = NULL; // Are there any more row cuts to consider? if ((rowCutIndex_ + 1) >= cuts_.sizeRowCuts()) { // Only column cuts left. colCutIndex_++; // Only update cutP if there is a column cut. // This is necessary for the iterator to work for // OsiCuts that don't have any cuts. if (cuts_.sizeColCuts() > 0 && colCutIndex_ < cuts_.sizeColCuts()) cutP_ = cuts_.colCutPtr(colCutIndex_); } // Are there any more col cuts to consider? else if ((colCutIndex_ + 1) >= cuts_.sizeColCuts()) { // Only row cuts left rowCutIndex_++; if (rowCutIndex_ < cuts_.sizeRowCuts()) cutP_ = cuts_.rowCutPtr(rowCutIndex_); } // There are still Row & column cuts left to consider else { double nextColCutE = cuts_.colCut(colCutIndex_ + 1).effectiveness(); double nextRowCutE = cuts_.rowCut(rowCutIndex_ + 1).effectiveness(); if (nextColCutE > nextRowCutE) { colCutIndex_++; cutP_ = cuts_.colCutPtr(colCutIndex_); } else { rowCutIndex_++; cutP_ = cuts_.rowCutPtr(rowCutIndex_); } } return *this; } //------------------------------------------------------------ // // Embedded const_iterator class implementation // //------------------------------------------------------------ OsiCuts::const_iterator::const_iterator(const OsiCuts &cuts) : cutsPtr_(&cuts) , rowCutIndex_(-1) , colCutIndex_(-1) , cutP_(NULL) { this->operator++(); } OsiCuts::const_iterator::const_iterator(const OsiCuts::const_iterator &src) : cutsPtr_(src.cutsPtr_) , rowCutIndex_(src.rowCutIndex_) , colCutIndex_(src.colCutIndex_) , cutP_(src.cutP_) { // nothing to do here } OsiCuts::const_iterator & OsiCuts::const_iterator::operator=(const OsiCuts::const_iterator &rhs) { if (this != &rhs) { cutsPtr_ = rhs.cutsPtr_; rowCutIndex_ = rhs.rowCutIndex_; colCutIndex_ = rhs.colCutIndex_; cutP_ = rhs.cutP_; } return *this; } OsiCuts::const_iterator::~const_iterator() { //nothing to do } OsiCuts::const_iterator OsiCuts::const_iterator::begin() { rowCutIndex_ = -1; colCutIndex_ = -1; this->operator++(); return *this; } OsiCuts::const_iterator OsiCuts::const_iterator::end() { rowCutIndex_ = cutsPtr_->sizeRowCuts(); colCutIndex_ = cutsPtr_->sizeColCuts() - 1; cutP_ = NULL; return *this; } OsiCuts::const_iterator OsiCuts::const_iterator::operator++() { cutP_ = NULL; // Are there any more row cuts to consider? if ((rowCutIndex_ + 1) >= cutsPtr_->sizeRowCuts()) { // Only column cuts left. colCutIndex_++; // Only update cutP if there is a column cut. // This is necessary for the iterator to work for // OsiCuts that don't have any cuts. if (cutsPtr_->sizeRowCuts() > 0 && colCutIndex_ < cutsPtr_->sizeColCuts()) cutP_ = cutsPtr_->colCutPtr(colCutIndex_); } // Are there any more col cuts to consider? else if ((colCutIndex_ + 1) >= cutsPtr_->sizeColCuts()) { // Only row cuts left rowCutIndex_++; if (rowCutIndex_ < cutsPtr_->sizeRowCuts()) cutP_ = cutsPtr_->rowCutPtr(rowCutIndex_); } // There are still Row & column cuts left to consider else { double nextColCutE = cutsPtr_->colCut(colCutIndex_ + 1).effectiveness(); double nextRowCutE = cutsPtr_->rowCut(rowCutIndex_ + 1).effectiveness(); if (nextColCutE > nextRowCutE) { colCutIndex_++; cutP_ = cutsPtr_->colCutPtr(colCutIndex_); } else { rowCutIndex_++; cutP_ = cutsPtr_->rowCutPtr(rowCutIndex_); } } return *this; } /* Insert a row cut unless it is a duplicate (CoinAbsFltEq)*/ void OsiCuts::insertIfNotDuplicate(OsiRowCut &rc, CoinAbsFltEq treatAsSame) { double newLb = rc.lb(); double newUb = rc.ub(); CoinPackedVector vector = rc.row(); int numberElements = vector.getNumElements(); int *newIndices = vector.getIndices(); double *newElements = vector.getElements(); CoinSort_2(newIndices, newIndices + numberElements, newElements); bool notDuplicate = true; int numberRowCuts = sizeRowCuts(); for (int i = 0; i < numberRowCuts; i++) { const OsiRowCut *cutPtr = rowCutPtr(i); if (cutPtr->row().getNumElements() != numberElements) continue; if (!treatAsSame(cutPtr->lb(), newLb)) continue; if (!treatAsSame(cutPtr->ub(), newUb)) continue; const CoinPackedVector *thisVector = &(cutPtr->row()); const int *indices = thisVector->getIndices(); const double *elements = thisVector->getElements(); int j; for (j = 0; j < numberElements; j++) { if (indices[j] != newIndices[j]) break; if (!treatAsSame(elements[j], newElements[j])) break; } if (j == numberElements) { notDuplicate = false; break; } } if (notDuplicate) { OsiRowCut *newCutPtr = new OsiRowCut(); newCutPtr->setLb(newLb); newCutPtr->setUb(newUb); newCutPtr->setRow(vector); newCutPtr->setGloballyValid(rc.globallyValid()); newCutPtr->setEffectiveness(rc.effectiveness()); rowCutPtrs_.push_back(newCutPtr); } } /* Insert a row cut unless it is a duplicate (CoinRelFltEq)*/ void OsiCuts::insertIfNotDuplicate(OsiRowCut &rc, CoinRelFltEq treatAsSame) { double newLb = rc.lb(); double newUb = rc.ub(); CoinPackedVector vector = rc.row(); int numberElements = vector.getNumElements(); int *newIndices = vector.getIndices(); double *newElements = vector.getElements(); CoinSort_2(newIndices, newIndices + numberElements, newElements); bool notDuplicate = true; int numberRowCuts = sizeRowCuts(); for (int i = 0; i < numberRowCuts; i++) { const OsiRowCut *cutPtr = rowCutPtr(i); if (cutPtr->row().getNumElements() != numberElements) continue; if (!treatAsSame(cutPtr->lb(), newLb)) continue; if (!treatAsSame(cutPtr->ub(), newUb)) continue; const CoinPackedVector *thisVector = &(cutPtr->row()); const int *indices = thisVector->getIndices(); const double *elements = thisVector->getElements(); int j; for (j = 0; j < numberElements; j++) { if (indices[j] != newIndices[j]) break; if (!treatAsSame(elements[j], newElements[j])) break; } if (j == numberElements) { notDuplicate = false; break; } } if (notDuplicate) { OsiRowCut *newCutPtr = new OsiRowCut(); newCutPtr->setLb(newLb); newCutPtr->setUb(newUb); newCutPtr->setRow(vector); newCutPtr->setGloballyValid(rc.globallyValid()); newCutPtr->setEffectiveness(rc.effectiveness()); rowCutPtrs_.push_back(newCutPtr); } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiCuts.hpp0000644000175200017520000003250613414504051015233 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiCuts_H #define OsiCuts_H #include "CoinPragma.hpp" #include #include #include "OsiCollections.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinFloatEqual.hpp" /** Collections of row cuts and column cuts */ class OsiCuts { friend void OsiCutsUnitTest(); public: /**@name Iterator classes */ //@{ /** Iterator This is a class for iterating over the collection of cuts. */ class iterator { friend class OsiCuts; public: iterator(OsiCuts &cuts); iterator(const iterator &src); iterator &operator=(const iterator &rhs); ~iterator(); OsiCut *operator*() const { return cutP_; } iterator operator++(); iterator operator++(int) { iterator temp = *this; ++*this; return temp; } bool operator==(const iterator &it) const { return (colCutIndex_ + rowCutIndex_) == (it.colCutIndex_ + it.rowCutIndex_); } bool operator!=(const iterator &it) const { return !((*this) == it); } bool operator<(const iterator &it) const { return (colCutIndex_ + rowCutIndex_) < (it.colCutIndex_ + it.rowCutIndex_); } private: iterator(); // *THINK* : how to inline these without sticking the code here (ugly...) iterator begin(); iterator end(); OsiCuts &cuts_; int rowCutIndex_; int colCutIndex_; OsiCut *cutP_; }; /** Const Iterator This is a class for iterating over the collection of cuts. */ class const_iterator { friend class OsiCuts; public: typedef std::forward_iterator_tag iterator_category; typedef OsiCut *value_type; typedef size_t difference_type; typedef OsiCut **pointer; typedef OsiCut *&reference; public: const_iterator(const OsiCuts &cuts); const_iterator(const const_iterator &src); const_iterator &operator=(const const_iterator &rhs); ~const_iterator(); const OsiCut *operator*() const { return cutP_; } const_iterator operator++(); const_iterator operator++(int) { const_iterator temp = *this; ++*this; return temp; } bool operator==(const const_iterator &it) const { return (colCutIndex_ + rowCutIndex_) == (it.colCutIndex_ + it.rowCutIndex_); } bool operator!=(const const_iterator &it) const { return !((*this) == it); } bool operator<(const const_iterator &it) const { return (colCutIndex_ + rowCutIndex_) < (it.colCutIndex_ + it.rowCutIndex_); } private: inline const_iterator(); // *THINK* : how to inline these without sticking the code here (ugly...) const_iterator begin(); const_iterator end(); const OsiCuts *cutsPtr_; int rowCutIndex_; int colCutIndex_; const OsiCut *cutP_; }; //@} //------------------------------------------------------------------- // // Cuts class definition begins here: // //------------------------------------------------------------------- /** \name Inserting a cut into collection */ //@{ /** \brief Insert a row cut */ inline void insert(const OsiRowCut &rc); /** \brief Insert a row cut unless it is a duplicate - cut may get sorted. Duplicate is defined as CoinAbsFltEq says same*/ void insertIfNotDuplicate(OsiRowCut &rc, CoinAbsFltEq treatAsSame = CoinAbsFltEq(1.0e-12)); /** \brief Insert a row cut unless it is a duplicate - cut may get sorted. Duplicate is defined as CoinRelFltEq says same*/ void insertIfNotDuplicate(OsiRowCut &rc, CoinRelFltEq treatAsSame); /** \brief Insert a column cut */ inline void insert(const OsiColCut &cc); /** \brief Insert a row cut. The OsiCuts object takes control of the cut object. On return, \c rcPtr is NULL. */ inline void insert(OsiRowCut *&rcPtr); /** \brief Insert a column cut. The OsiCuts object takes control of the cut object. On return \c ccPtr is NULL. */ inline void insert(OsiColCut *&ccPtr); #if 0 inline void insert( OsiCut * & cPtr ); #endif /** \brief Insert a set of cuts */ inline void insert(const OsiCuts &cs); //@} /**@name Number of cuts in collection */ //@{ /// Number of row cuts in collection inline int sizeRowCuts() const; /// Number of column cuts in collection inline int sizeColCuts() const; /// Number of cuts in collection inline int sizeCuts() const; //@} /**@name Debug stuff */ //@{ /// Print cuts in collection inline void printCuts() const; //@} /**@name Get a cut from collection */ //@{ /// Get pointer to i'th row cut inline OsiRowCut *rowCutPtr(int i); /// Get const pointer to i'th row cut inline const OsiRowCut *rowCutPtr(int i) const; /// Get pointer to i'th column cut inline OsiColCut *colCutPtr(int i); /// Get const pointer to i'th column cut inline const OsiColCut *colCutPtr(int i) const; /// Get reference to i'th row cut inline OsiRowCut &rowCut(int i); /// Get const reference to i'th row cut inline const OsiRowCut &rowCut(int i) const; /// Get reference to i'th column cut inline OsiColCut &colCut(int i); /// Get const reference to i'th column cut inline const OsiColCut &colCut(int i) const; /// Get const pointer to the most effective cut inline const OsiCut *mostEffectiveCutPtr() const; /// Get pointer to the most effective cut inline OsiCut *mostEffectiveCutPtr(); //@} /**@name Deleting cut from collection */ //@{ /// Remove i'th row cut from collection inline void eraseRowCut(int i); /// Remove i'th column cut from collection inline void eraseColCut(int i); /// Get pointer to i'th row cut and remove ptr from collection inline OsiRowCut *rowCutPtrAndZap(int i); /*! \brief Clear all row cuts without deleting them Handy in case one wants to use CGL without managing cuts in one of the OSI containers. Client is ultimately responsible for deleting the data structures holding the row cuts. */ inline void dumpCuts(); /*! \brief Selective delete and clear for row cuts. Deletes the cuts specified in \p to_erase then clears remaining cuts without deleting them. A hybrid of eraseRowCut(int) and dumpCuts(). Client is ultimately responsible for deleting the data structures for row cuts not specified in \p to_erase. */ inline void eraseAndDumpCuts(const std::vector< int > to_erase); //@} /**@name Sorting collection */ //@{ /// Cuts with greatest effectiveness are first. inline void sort(); //@} /**@name Iterators Example of using an iterator to sum effectiveness of all cuts in the collection.
     double sumEff=0.0;
     for ( OsiCuts::iterator it=cuts.begin(); it!=cuts.end(); ++it )
           sumEff+= (*it)->effectiveness();
     
*/ //@{ /// Get iterator to beginning of collection inline iterator begin() { iterator it(*this); it.begin(); return it; } /// Get const iterator to beginning of collection inline const_iterator begin() const { const_iterator it(*this); it.begin(); return it; } /// Get iterator to end of collection inline iterator end() { iterator it(*this); it.end(); return it; } /// Get const iterator to end of collection inline const_iterator end() const { const_iterator it(*this); it.end(); return it; } //@} /**@name Constructors and destructors */ //@{ /// Default constructor OsiCuts(); /// Copy constructor OsiCuts(const OsiCuts &); /// Assignment operator OsiCuts &operator=(const OsiCuts &rhs); /// Destructor virtual ~OsiCuts(); //@} private: //*@name Function operator for sorting cuts by efectiveness */ //@{ class OsiCutCompare { public: /// Function for sorting cuts by effectiveness inline bool operator()(const OsiCut *c1P, const OsiCut *c2P) { return c1P->effectiveness() > c2P->effectiveness(); } }; //@} /**@name Private methods */ //@{ /// Copy internal data void gutsOfCopy(const OsiCuts &source); /// Delete internal data void gutsOfDestructor(); //@} /**@name Private member data */ //@{ /// Vector of row cuts pointers OsiVectorRowCutPtr rowCutPtrs_; /// Vector of column cuts pointers OsiVectorColCutPtr colCutPtrs_; //@} }; //------------------------------------------------------------------- // insert cuts into collection //------------------------------------------------------------------- void OsiCuts::insert(const OsiRowCut &rc) { OsiRowCut *newCutPtr = rc.clone(); //assert(dynamic_cast(newCutPtr) != NULL ); rowCutPtrs_.push_back(static_cast< OsiRowCut * >(newCutPtr)); } void OsiCuts::insert(const OsiColCut &cc) { OsiColCut *newCutPtr = cc.clone(); //assert(dynamic_cast(newCutPtr) != NULL ); colCutPtrs_.push_back(static_cast< OsiColCut * >(newCutPtr)); } void OsiCuts::insert(OsiRowCut *&rcPtr) { rowCutPtrs_.push_back(rcPtr); rcPtr = NULL; } void OsiCuts::insert(OsiColCut *&ccPtr) { colCutPtrs_.push_back(ccPtr); ccPtr = NULL; } #if 0 void OsiCuts::insert( OsiCut* & cPtr ) { OsiRowCut * rcPtr = dynamic_cast(cPtr); if ( rcPtr != NULL ) { insert( rcPtr ); cPtr = rcPtr; } else { OsiColCut * ccPtr = dynamic_cast(cPtr); assert( ccPtr != NULL ); insert( ccPtr ); cPtr = ccPtr; } } #endif // LANNEZ SEBASTIEN added Thu May 25 01:22:51 EDT 2006 void OsiCuts::insert(const OsiCuts &cs) { for (OsiCuts::const_iterator it = cs.begin(); it != cs.end(); it++) { const OsiRowCut *rCut = dynamic_cast< const OsiRowCut * >(*it); const OsiColCut *cCut = dynamic_cast< const OsiColCut * >(*it); assert(rCut || cCut); if (rCut) insert(*rCut); else insert(*cCut); } } //------------------------------------------------------------------- // sort //------------------------------------------------------------------- void OsiCuts::sort() { std::sort(colCutPtrs_.begin(), colCutPtrs_.end(), OsiCutCompare()); std::sort(rowCutPtrs_.begin(), rowCutPtrs_.end(), OsiCutCompare()); } //------------------------------------------------------------------- // Get number of in collections //------------------------------------------------------------------- int OsiCuts::sizeRowCuts() const { return static_cast< int >(rowCutPtrs_.size()); } int OsiCuts::sizeColCuts() const { return static_cast< int >(colCutPtrs_.size()); } int OsiCuts::sizeCuts() const { return static_cast< int >(sizeRowCuts() + sizeColCuts()); } //---------------------------------------------------------------- // Get i'th cut from the collection //---------------------------------------------------------------- const OsiRowCut *OsiCuts::rowCutPtr(int i) const { return rowCutPtrs_[i]; } const OsiColCut *OsiCuts::colCutPtr(int i) const { return colCutPtrs_[i]; } OsiRowCut *OsiCuts::rowCutPtr(int i) { return rowCutPtrs_[i]; } OsiColCut *OsiCuts::colCutPtr(int i) { return colCutPtrs_[i]; } const OsiRowCut &OsiCuts::rowCut(int i) const { return *rowCutPtr(i); } const OsiColCut &OsiCuts::colCut(int i) const { return *colCutPtr(i); } OsiRowCut &OsiCuts::rowCut(int i) { return *rowCutPtr(i); } OsiColCut &OsiCuts::colCut(int i) { return *colCutPtr(i); } //---------------------------------------------------------------- // Get most effective cut from collection //---------------------------------------------------------------- const OsiCut *OsiCuts::mostEffectiveCutPtr() const { const_iterator b = begin(); const_iterator e = end(); return *(std::min_element(b, e, OsiCutCompare())); } OsiCut *OsiCuts::mostEffectiveCutPtr() { iterator b = begin(); iterator e = end(); //return *(std::min_element(b,e,OsiCutCompare())); OsiCut *retVal = NULL; double maxEff = COIN_DBL_MIN; for (OsiCuts::iterator it = b; it != e; ++it) { if (maxEff < (*it)->effectiveness()) { maxEff = (*it)->effectiveness(); retVal = *it; } } return retVal; } //---------------------------------------------------------------- // Print all cuts //---------------------------------------------------------------- void OsiCuts::printCuts() const { // do all column cuts first int i; int numberColCuts = sizeColCuts(); for (i = 0; i < numberColCuts; i++) { const OsiColCut *cut = colCutPtr(i); cut->print(); } int numberRowCuts = sizeRowCuts(); for (i = 0; i < numberRowCuts; i++) { const OsiRowCut *cut = rowCutPtr(i); cut->print(); } } //---------------------------------------------------------------- // Erase i'th cut from the collection //---------------------------------------------------------------- void OsiCuts::eraseRowCut(int i) { delete rowCutPtrs_[i]; rowCutPtrs_.erase(rowCutPtrs_.begin() + i); } void OsiCuts::eraseColCut(int i) { delete colCutPtrs_[i]; colCutPtrs_.erase(colCutPtrs_.begin() + i); } /// Get pointer to i'th row cut and remove ptr from collection OsiRowCut * OsiCuts::rowCutPtrAndZap(int i) { OsiRowCut *cut = rowCutPtrs_[i]; rowCutPtrs_[i] = NULL; rowCutPtrs_.erase(rowCutPtrs_.begin() + i); return cut; } void OsiCuts::dumpCuts() { rowCutPtrs_.clear(); } void OsiCuts::eraseAndDumpCuts(const std::vector< int > to_erase) { for (unsigned i = 0; i < to_erase.size(); i++) { delete rowCutPtrs_[to_erase[i]]; } rowCutPtrs_.clear(); } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/Makefile.in0000644000175200017520000006232512502175645015212 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2010 Lou Hafer # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Lou Hafer SFU 2010-07-29 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = src/Osi DIST_COMMON = $(includecoin_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/config_osi.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.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_osi.h CONFIG_CLEAN_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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @DEPENDENCY_LINKING_TRUE@libOsi_la_DEPENDENCIES = \ @DEPENDENCY_LINKING_TRUE@ $(am__DEPENDENCIES_1) am_libOsi_la_OBJECTS = OsiAuxInfo.lo OsiBranchingObject.lo \ OsiChooseVariable.lo OsiColCut.lo OsiCut.lo OsiCuts.lo \ OsiNames.lo OsiPresolve.lo OsiRowCut.lo OsiRowCutDebugger.lo \ OsiSolverBranch.lo OsiSolverInterface.lo libOsi_la_OBJECTS = $(am_libOsi_la_OBJECTS) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libOsi_la_SOURCES) DIST_SOURCES = $(libOsi_la_SOURCES) includecoinHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(includecoin_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # libOsi # ######################################################################## # Name of the library compiled in this directory. We want it to be installed # in $libdir lib_LTLIBRARIES = libOsi.la # List all source files for this library, including headers libOsi_la_SOURCES = \ OsiConfig.h \ OsiAuxInfo.cpp OsiAuxInfo.hpp \ OsiBranchingObject.cpp OsiBranchingObject.hpp \ OsiChooseVariable.cpp OsiChooseVariable.hpp \ OsiColCut.cpp OsiColCut.hpp \ OsiCollections.hpp \ OsiCut.cpp OsiCut.hpp \ OsiCuts.cpp OsiCuts.hpp \ OsiNames.cpp \ OsiPresolve.cpp OsiPresolve.hpp \ OsiRowCut.cpp OsiRowCut.hpp \ OsiRowCutDebugger.cpp OsiRowCutDebugger.hpp \ OsiSolverBranch.cpp OsiSolverBranch.hpp \ OsiSolverInterface.cpp OsiSolverInterface.hpp \ OsiSolverParameters.hpp # List all additionally required libraries @DEPENDENCY_LINKING_TRUE@libOsi_la_LIBADD = $(OSILIB_LIBS) # This is for libtool libOsi_la_LDFLAGS = $(LT_LDFLAGS) # Here list all include flags. AM_CPPFLAGS = $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation. # This "cygpath" stuff is necessary to compile with native compilers on Windows. DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` ######################################################################## # Headers that need to be installed # ######################################################################## # Here list all the header files that are required by a user of the library, # and that therefore should be installed in 'includedir/coin' includecoindir = $(includedir)/coin includecoin_HEADERS = \ OsiAuxInfo.hpp \ OsiBranchingObject.hpp \ OsiChooseVariable.hpp \ OsiColCut.hpp \ OsiCollections.hpp \ OsiCut.hpp \ OsiCuts.hpp \ OsiPresolve.hpp \ OsiRowCut.hpp \ OsiRowCutDebugger.hpp \ OsiSolverBranch.hpp \ OsiSolverInterface.hpp \ OsiSolverParameters.hpp all: config.h config_osi.h $(MAKE) $(AM_MAKEFLAGS) 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Osi/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Osi/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 config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status src/Osi/config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h1 touch $@ config_osi.h: stamp-h2 @if test ! -f $@; then \ rm -f stamp-h2; \ $(MAKE) stamp-h2; \ else :; fi stamp-h2: $(srcdir)/config_osi.h.in $(top_builddir)/config.status @rm -f stamp-h2 cd $(top_builddir) && $(SHELL) ./config.status src/Osi/config_osi.h distclean-hdr: -rm -f config.h stamp-h1 config_osi.h stamp-h2 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libOsi.la: $(libOsi_la_OBJECTS) $(libOsi_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libOsi_la_LDFLAGS) $(libOsi_la_OBJECTS) $(libOsi_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiAuxInfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiBranchingObject.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiChooseVariable.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiColCut.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiCut.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiCuts.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiNames.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiPresolve.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiRowCut.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiRowCutDebugger.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiSolverBranch.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiSolverInterface.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includecoinHEADERS: $(includecoin_HEADERS) @$(NORMAL_INSTALL) test -z "$(includecoindir)" || $(mkdir_p) "$(DESTDIR)$(includecoindir)" @list='$(includecoin_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(includecoinHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includecoindir)/$$f'"; \ $(includecoinHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includecoindir)/$$f"; \ done uninstall-includecoinHEADERS: @$(NORMAL_UNINSTALL) @list='$(includecoin_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(includecoindir)/$$f'"; \ rm -f "$(DESTDIR)$(includecoindir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in config_osi.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in config_osi.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in config_osi.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in config_osi.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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) $(HEADERS) config.h config_osi.h installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includecoindir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includecoinHEADERS install-exec-am: install-exec-local install-libLTLIBRARIES install-info: install-info-am install-man: 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: uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES uninstall-local .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags 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-exec install-exec-am \ install-exec-local install-includecoinHEADERS install-info \ install-info-am install-libLTLIBRARIES install-man \ 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 uninstall uninstall-am \ uninstall-includecoinHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES uninstall-local install-exec-local: $(install_sh_DATA) config_osi.h $(DESTDIR)$(includecoindir)/OsiConfig.h uninstall-local: rm -f $(DESTDIR)$(includecoindir)/OsiConfig.h # 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: DyLP-1.10.4/Osi/src/Osi/OsiChooseVariable.cpp0000644000175200017520000011335213414504051017175 0ustar coincoin// Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include #include "CoinPragma.hpp" #include "OsiSolverInterface.hpp" #include "OsiAuxInfo.hpp" #include "OsiSolverBranch.hpp" #include "CoinWarmStartBasis.hpp" #include "CoinPackedMatrix.hpp" #include "CoinTime.hpp" #include "CoinSort.hpp" #include "CoinFinite.hpp" #include "OsiChooseVariable.hpp" using namespace std; OsiChooseVariable::OsiChooseVariable() : goodObjectiveValue_(COIN_DBL_MAX) , upChange_(0.0) , downChange_(0.0) , goodSolution_(NULL) , list_(NULL) , useful_(NULL) , solver_(NULL) , status_(-1) , bestObjectIndex_(-1) , bestWhichWay_(-1) , firstForcedObjectIndex_(-1) , firstForcedWhichWay_(-1) , numberUnsatisfied_(0) , numberStrong_(0) , numberOnList_(0) , numberStrongDone_(0) , numberStrongIterations_(0) , numberStrongFixed_(0) , trustStrongForBound_(true) , trustStrongForSolution_(true) { } OsiChooseVariable::OsiChooseVariable(const OsiSolverInterface *solver) : goodObjectiveValue_(COIN_DBL_MAX) , upChange_(0.0) , downChange_(0.0) , goodSolution_(NULL) , solver_(solver) , status_(-1) , bestObjectIndex_(-1) , bestWhichWay_(-1) , firstForcedObjectIndex_(-1) , firstForcedWhichWay_(-1) , numberUnsatisfied_(0) , numberStrong_(0) , numberOnList_(0) , numberStrongDone_(0) , numberStrongIterations_(0) , numberStrongFixed_(0) , trustStrongForBound_(true) , trustStrongForSolution_(true) { // create useful arrays int numberObjects = solver_->numberObjects(); list_ = new int[numberObjects]; useful_ = new double[numberObjects]; } OsiChooseVariable::OsiChooseVariable(const OsiChooseVariable &rhs) { goodObjectiveValue_ = rhs.goodObjectiveValue_; upChange_ = rhs.upChange_; downChange_ = rhs.downChange_; status_ = rhs.status_; bestObjectIndex_ = rhs.bestObjectIndex_; bestWhichWay_ = rhs.bestWhichWay_; firstForcedObjectIndex_ = rhs.firstForcedObjectIndex_; firstForcedWhichWay_ = rhs.firstForcedWhichWay_; numberUnsatisfied_ = rhs.numberUnsatisfied_; numberStrong_ = rhs.numberStrong_; numberOnList_ = rhs.numberOnList_; numberStrongDone_ = rhs.numberStrongDone_; numberStrongIterations_ = rhs.numberStrongIterations_; numberStrongFixed_ = rhs.numberStrongFixed_; trustStrongForBound_ = rhs.trustStrongForBound_; trustStrongForSolution_ = rhs.trustStrongForSolution_; solver_ = rhs.solver_; if (solver_) { int numberObjects = solver_->numberObjects(); int numberColumns = solver_->getNumCols(); if (rhs.goodSolution_) { goodSolution_ = CoinCopyOfArray(rhs.goodSolution_, numberColumns); } else { goodSolution_ = NULL; } list_ = CoinCopyOfArray(rhs.list_, numberObjects); useful_ = CoinCopyOfArray(rhs.useful_, numberObjects); } else { goodSolution_ = NULL; list_ = NULL; useful_ = NULL; } } OsiChooseVariable & OsiChooseVariable::operator=(const OsiChooseVariable &rhs) { if (this != &rhs) { delete[] goodSolution_; delete[] list_; delete[] useful_; goodObjectiveValue_ = rhs.goodObjectiveValue_; upChange_ = rhs.upChange_; downChange_ = rhs.downChange_; status_ = rhs.status_; bestObjectIndex_ = rhs.bestObjectIndex_; bestWhichWay_ = rhs.bestWhichWay_; firstForcedObjectIndex_ = rhs.firstForcedObjectIndex_; firstForcedWhichWay_ = rhs.firstForcedWhichWay_; numberUnsatisfied_ = rhs.numberUnsatisfied_; numberStrong_ = rhs.numberStrong_; numberOnList_ = rhs.numberOnList_; numberStrongDone_ = rhs.numberStrongDone_; numberStrongIterations_ = rhs.numberStrongIterations_; numberStrongFixed_ = rhs.numberStrongFixed_; trustStrongForBound_ = rhs.trustStrongForBound_; trustStrongForSolution_ = rhs.trustStrongForSolution_; solver_ = rhs.solver_; if (solver_) { int numberObjects = solver_->numberObjects(); int numberColumns = solver_->getNumCols(); if (rhs.goodSolution_) { goodSolution_ = CoinCopyOfArray(rhs.goodSolution_, numberColumns); } else { goodSolution_ = NULL; } list_ = CoinCopyOfArray(rhs.list_, numberObjects); useful_ = CoinCopyOfArray(rhs.useful_, numberObjects); } else { goodSolution_ = NULL; list_ = NULL; useful_ = NULL; } } return *this; } OsiChooseVariable::~OsiChooseVariable() { delete[] goodSolution_; delete[] list_; delete[] useful_; } // Clone OsiChooseVariable * OsiChooseVariable::clone() const { return new OsiChooseVariable(*this); } // Set solver and redo arrays void OsiChooseVariable::setSolver(const OsiSolverInterface *solver) { solver_ = solver; delete[] list_; delete[] useful_; // create useful arrays int numberObjects = solver_->numberObjects(); list_ = new int[numberObjects]; useful_ = new double[numberObjects]; } // Initialize int OsiChooseVariable::setupList(OsiBranchingInformation *info, bool initialize) { if (initialize) { status_ = -2; delete[] goodSolution_; bestObjectIndex_ = -1; numberStrongDone_ = 0; numberStrongIterations_ = 0; numberStrongFixed_ = 0; goodSolution_ = NULL; goodObjectiveValue_ = COIN_DBL_MAX; } numberOnList_ = 0; numberUnsatisfied_ = 0; int numberObjects = solver_->numberObjects(); assert(numberObjects); double check = 0.0; int checkIndex = 0; int bestPriority = COIN_INT_MAX; // pretend one strong even if none int maximumStrong = numberStrong_ ? CoinMin(numberStrong_, numberObjects) : 1; int putOther = numberObjects; int i; for (i = 0; i < maximumStrong; i++) { list_[i] = -1; useful_[i] = 0.0; } OsiObject **object = info->solver_->objects(); // Say feasible bool feasible = true; for (i = 0; i < numberObjects; i++) { int way; double value = object[i]->infeasibility(info, way); if (value > 0.0) { numberUnsatisfied_++; if (value == COIN_DBL_MAX) { // infeasible feasible = false; break; } int priorityLevel = object[i]->priority(); // Better priority? Flush choices. if (priorityLevel < bestPriority) { for (int j = 0; j < maximumStrong; j++) { if (list_[j] >= 0) { int iObject = list_[j]; list_[j] = -1; useful_[j] = 0.0; list_[--putOther] = iObject; } } bestPriority = priorityLevel; check = 0.0; } if (priorityLevel == bestPriority) { if (value > check) { //add to list int iObject = list_[checkIndex]; if (iObject >= 0) list_[--putOther] = iObject; // to end list_[checkIndex] = i; useful_[checkIndex] = value; // find worst check = COIN_DBL_MAX; for (int j = 0; j < maximumStrong; j++) { if (list_[j] >= 0) { if (useful_[j] < check) { check = useful_[j]; checkIndex = j; } } else { check = 0.0; checkIndex = j; break; } } } else { // to end list_[--putOther] = i; } } else { // to end list_[--putOther] = i; } } } // Get list numberOnList_ = 0; if (feasible) { for (i = 0; i < maximumStrong; i++) { if (list_[i] >= 0) { list_[numberOnList_] = list_[i]; useful_[numberOnList_++] = -useful_[i]; } } if (numberOnList_) { // Sort CoinSort_2(useful_, useful_ + numberOnList_, list_); // move others i = numberOnList_; for (; putOther < numberObjects; putOther++) list_[i++] = list_[putOther]; assert(i == numberUnsatisfied_); if (!numberStrong_) numberOnList_ = 0; } } else { // not feasible numberUnsatisfied_ = -1; } return numberUnsatisfied_; } /* Choose a variable Returns - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates We can pick up branch from whichObject() and whichWay() We can pick up a forced branch (can change bound) from whichForcedObject() and whichForcedWay() If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() */ int OsiChooseVariable::chooseVariable(OsiSolverInterface *solver, OsiBranchingInformation *, bool) { if (numberUnsatisfied_) { bestObjectIndex_ = list_[0]; bestWhichWay_ = solver->object(bestObjectIndex_)->whichWay(); firstForcedObjectIndex_ = -1; firstForcedWhichWay_ = -1; return 0; } else { return 1; } } // Returns true if solution looks feasible against given objects bool OsiChooseVariable::feasibleSolution(const OsiBranchingInformation *info, const double *solution, int numberObjects, const OsiObject **objects) { bool satisfied = true; const double *saveSolution = info->solution_; info->solution_ = solution; for (int i = 0; i < numberObjects; i++) { double value = objects[i]->checkInfeasibility(info); if (value > 0.0) { satisfied = false; break; } } info->solution_ = saveSolution; return satisfied; } // Saves a good solution void OsiChooseVariable::saveSolution(const OsiSolverInterface *solver) { delete[] goodSolution_; int numberColumns = solver->getNumCols(); goodSolution_ = CoinCopyOfArray(solver->getColSolution(), numberColumns); goodObjectiveValue_ = solver->getObjSense() * solver->getObjValue(); } // Clears out good solution after use void OsiChooseVariable::clearGoodSolution() { delete[] goodSolution_; goodSolution_ = NULL; goodObjectiveValue_ = COIN_DBL_MAX; } /* This is a utility function which does strong branching on a list of objects and stores the results in OsiHotInfo.objects. On entry the object sequence is stored in the OsiHotInfo object and maybe more. It returns - -1 - one branch was infeasible both ways 0 - all inspected - nothing can be fixed 1 - all inspected - some can be fixed (returnCriterion==0) 2 - may be returning early - one can be fixed (last one done) (returnCriterion==1) 3 - returning because max time */ int OsiChooseStrong::doStrongBranching(OsiSolverInterface *solver, OsiBranchingInformation *info, int numberToDo, int returnCriterion) { // Might be faster to extend branch() to return bounds changed double *saveLower = NULL; double *saveUpper = NULL; int numberColumns = solver->getNumCols(); solver->markHotStart(); const double *lower = info->lower_; const double *upper = info->upper_; saveLower = CoinCopyOfArray(info->lower_, numberColumns); saveUpper = CoinCopyOfArray(info->upper_, numberColumns); numResults_ = 0; int returnCode = 0; double timeStart = CoinCpuTime(); for (int iDo = 0; iDo < numberToDo; iDo++) { OsiHotInfo *result = results_ + iDo; // For now just 2 way OsiBranchingObject *branch = result->branchingObject(); assert(branch->numberBranches() == 2); /* Try the first direction. Each subsequent call to branch() performs the specified branch and advances the branch object state to the next branch alternative.) */ OsiSolverInterface *thisSolver = solver; if (branch->boundBranch()) { // ordinary branch->branch(solver); // maybe we should check bounds for stupidities here? solver->solveFromHotStart(); } else { // adding cuts or something thisSolver = solver->clone(); branch->branch(thisSolver); // set hot start iterations int limit; thisSolver->getIntParam(OsiMaxNumIterationHotStart, limit); thisSolver->setIntParam(OsiMaxNumIteration, limit); thisSolver->resolve(); } // can check if we got solution // status is 0 finished, 1 infeasible and 2 unfinished and 3 is solution int status0 = result->updateInformation(thisSolver, info, this); numberStrongIterations_ += thisSolver->getIterationCount(); if (status0 == 3) { // new solution already saved if (trustStrongForSolution_) { info->cutoff_ = goodObjectiveValue_; status0 = 0; } } if (solver != thisSolver) delete thisSolver; // Restore bounds for (int j = 0; j < numberColumns; j++) { if (saveLower[j] != lower[j]) solver->setColLower(j, saveLower[j]); if (saveUpper[j] != upper[j]) solver->setColUpper(j, saveUpper[j]); } /* Try the next direction */ thisSolver = solver; if (branch->boundBranch()) { // ordinary branch->branch(solver); // maybe we should check bounds for stupidities here? solver->solveFromHotStart(); } else { // adding cuts or something thisSolver = solver->clone(); branch->branch(thisSolver); // set hot start iterations int limit; thisSolver->getIntParam(OsiMaxNumIterationHotStart, limit); thisSolver->setIntParam(OsiMaxNumIteration, limit); thisSolver->resolve(); } // can check if we got solution // status is 0 finished, 1 infeasible and 2 unfinished and 3 is solution int status1 = result->updateInformation(thisSolver, info, this); numberStrongDone_++; numberStrongIterations_ += thisSolver->getIterationCount(); if (status1 == 3) { // new solution already saved if (trustStrongForSolution_) { info->cutoff_ = goodObjectiveValue_; status1 = 0; } } if (solver != thisSolver) delete thisSolver; // Restore bounds for (int j = 0; j < numberColumns; j++) { if (saveLower[j] != lower[j]) solver->setColLower(j, saveLower[j]); if (saveUpper[j] != upper[j]) solver->setColUpper(j, saveUpper[j]); } /* End of evaluation for this candidate variable. Possibilities are: * Both sides below cutoff; this variable is a candidate for branching. * Both sides infeasible or above the objective cutoff: no further action here. Break from the evaluation loop and assume the node will be purged by the caller. * One side below cutoff: Install the branch (i.e., fix the variable). Possibly break from the evaluation loop and assume the node will be reoptimised by the caller. */ numResults_++; if (status0 == 1 && status1 == 1) { // infeasible returnCode = -1; break; // exit loop } else if (status0 == 1 || status1 == 1) { numberStrongFixed_++; if (!returnCriterion) { returnCode = 1; } else { returnCode = 2; break; } } bool hitMaxTime = (CoinCpuTime() - timeStart > info->timeRemaining_); if (hitMaxTime) { returnCode = 3; break; } } delete[] saveLower; delete[] saveUpper; // Delete the snapshot solver->unmarkHotStart(); return returnCode; } // Given a candidate fill in useful information e.g. estimates void OsiChooseVariable::updateInformation(const OsiBranchingInformation *info, int, OsiHotInfo *hotInfo) { int index = hotInfo->whichObject(); assert(index < solver_->numberObjects()); //assert (branch<2); OsiObject **object = info->solver_->objects(); upChange_ = object[index]->upEstimate(); downChange_ = object[index]->downEstimate(); } #if 1 // Given a branch fill in useful information e.g. estimates void OsiChooseVariable::updateInformation(int index, int branch, double, double, int) { assert(index < solver_->numberObjects()); assert(branch < 2); OsiObject **object = solver_->objects(); if (branch) upChange_ = object[index]->upEstimate(); else downChange_ = object[index]->downEstimate(); } #endif //############################################################################## void OsiPseudoCosts::gutsOfDelete() { if (numberObjects_ > 0) { numberObjects_ = 0; numberBeforeTrusted_ = 0; delete[] upTotalChange_; upTotalChange_ = NULL; delete[] downTotalChange_; downTotalChange_ = NULL; delete[] upNumber_; upNumber_ = NULL; delete[] downNumber_; downNumber_ = NULL; } } void OsiPseudoCosts::gutsOfCopy(const OsiPseudoCosts &rhs) { numberObjects_ = rhs.numberObjects_; numberBeforeTrusted_ = rhs.numberBeforeTrusted_; if (numberObjects_ > 0) { upTotalChange_ = CoinCopyOfArray(rhs.upTotalChange_, numberObjects_); downTotalChange_ = CoinCopyOfArray(rhs.downTotalChange_, numberObjects_); upNumber_ = CoinCopyOfArray(rhs.upNumber_, numberObjects_); downNumber_ = CoinCopyOfArray(rhs.downNumber_, numberObjects_); } } OsiPseudoCosts::OsiPseudoCosts() : upTotalChange_(NULL) , downTotalChange_(NULL) , upNumber_(NULL) , downNumber_(NULL) , numberObjects_(0) , numberBeforeTrusted_(0) { } OsiPseudoCosts::~OsiPseudoCosts() { gutsOfDelete(); } OsiPseudoCosts::OsiPseudoCosts(const OsiPseudoCosts &rhs) : upTotalChange_(NULL) , downTotalChange_(NULL) , upNumber_(NULL) , downNumber_(NULL) , numberObjects_(0) , numberBeforeTrusted_(0) { gutsOfCopy(rhs); } OsiPseudoCosts & OsiPseudoCosts::operator=(const OsiPseudoCosts &rhs) { if (this != &rhs) { gutsOfDelete(); gutsOfCopy(rhs); } return *this; } void OsiPseudoCosts::initialize(int n) { gutsOfDelete(); numberObjects_ = n; if (numberObjects_ > 0) { upTotalChange_ = new double[numberObjects_]; downTotalChange_ = new double[numberObjects_]; upNumber_ = new int[numberObjects_]; downNumber_ = new int[numberObjects_]; CoinZeroN(upTotalChange_, numberObjects_); CoinZeroN(downTotalChange_, numberObjects_); CoinZeroN(upNumber_, numberObjects_); CoinZeroN(downNumber_, numberObjects_); } } //############################################################################## OsiChooseStrong::OsiChooseStrong() : OsiChooseVariable() , shadowPriceMode_(0) , pseudoCosts_() , results_(NULL) , numResults_(0) { } OsiChooseStrong::OsiChooseStrong(const OsiSolverInterface *solver) : OsiChooseVariable(solver) , shadowPriceMode_(0) , pseudoCosts_() , results_(NULL) , numResults_(0) { // create useful arrays pseudoCosts_.initialize(solver_->numberObjects()); } OsiChooseStrong::OsiChooseStrong(const OsiChooseStrong &rhs) : OsiChooseVariable(rhs) , shadowPriceMode_(rhs.shadowPriceMode_) , pseudoCosts_(rhs.pseudoCosts_) , results_(NULL) , numResults_(0) { } OsiChooseStrong & OsiChooseStrong::operator=(const OsiChooseStrong &rhs) { if (this != &rhs) { OsiChooseVariable::operator=(rhs); shadowPriceMode_ = rhs.shadowPriceMode_; pseudoCosts_ = rhs.pseudoCosts_; delete[] results_; results_ = NULL; numResults_ = 0; } return *this; } OsiChooseStrong::~OsiChooseStrong() { delete[] results_; } // Clone OsiChooseVariable * OsiChooseStrong::clone() const { return new OsiChooseStrong(*this); } #define MAXMIN_CRITERION 0.85 // Initialize int OsiChooseStrong::setupList(OsiBranchingInformation *info, bool initialize) { if (initialize) { status_ = -2; delete[] goodSolution_; bestObjectIndex_ = -1; numberStrongDone_ = 0; numberStrongIterations_ = 0; numberStrongFixed_ = 0; goodSolution_ = NULL; goodObjectiveValue_ = COIN_DBL_MAX; } numberOnList_ = 0; numberUnsatisfied_ = 0; int numberObjects = solver_->numberObjects(); if (numberObjects > pseudoCosts_.numberObjects()) { // redo useful arrays pseudoCosts_.initialize(numberObjects); } double check = -COIN_DBL_MAX; int checkIndex = 0; int bestPriority = COIN_INT_MAX; int maximumStrong = CoinMin(numberStrong_, numberObjects); int putOther = numberObjects; int i; for (i = 0; i < numberObjects; i++) { list_[i] = -1; useful_[i] = 0.0; } OsiObject **object = info->solver_->objects(); // Get average pseudo costs and see if pseudo shadow prices possible int shadowPossible = shadowPriceMode_; if (shadowPossible) { for (i = 0; i < numberObjects; i++) { if (!object[i]->canHandleShadowPrices()) { shadowPossible = 0; break; } } if (shadowPossible) { int numberRows = solver_->getNumRows(); const double *pi = info->pi_; double sumPi = 0.0; for (i = 0; i < numberRows; i++) sumPi += fabs(pi[i]); sumPi /= static_cast< double >(numberRows); // and scale back sumPi *= 0.01; info->defaultDual_ = sumPi; // switch on int numberColumns = solver_->getNumCols(); int size = CoinMax(numberColumns, 2 * numberRows); info->usefulRegion_ = new double[size]; CoinZeroN(info->usefulRegion_, size); info->indexRegion_ = new int[size]; } } double sumUp = 0.0; double numberUp = 0.0; double sumDown = 0.0; double numberDown = 0.0; const double *upTotalChange = pseudoCosts_.upTotalChange(); const double *downTotalChange = pseudoCosts_.downTotalChange(); const int *upNumber = pseudoCosts_.upNumber(); const int *downNumber = pseudoCosts_.downNumber(); const int numberBeforeTrusted = pseudoCosts_.numberBeforeTrusted(); for (i = 0; i < numberObjects; i++) { sumUp += upTotalChange[i]; numberUp += upNumber[i]; sumDown += downTotalChange[i]; numberDown += downNumber[i]; } double upMultiplier = (1.0 + sumUp) / (1.0 + numberUp); double downMultiplier = (1.0 + sumDown) / (1.0 + numberDown); // Say feasible bool feasible = true; #if 0 int pri[]={10,1000,10000}; int priCount[]={0,0,0}; #endif for (i = 0; i < numberObjects; i++) { int way; double value = object[i]->infeasibility(info, way); if (value > 0.0) { numberUnsatisfied_++; if (value == COIN_DBL_MAX) { // infeasible feasible = false; break; } int priorityLevel = object[i]->priority(); #if 0 for (int k=0;k<3;k++) { if (priorityLevel==pri[k]) priCount[k]++; } #endif // Better priority? Flush choices. if (priorityLevel < bestPriority) { for (int j = maximumStrong - 1; j >= 0; j--) { if (list_[j] >= 0) { int iObject = list_[j]; list_[j] = -1; useful_[j] = 0.0; list_[--putOther] = iObject; } } maximumStrong = CoinMin(maximumStrong, putOther); bestPriority = priorityLevel; check = -COIN_DBL_MAX; checkIndex = 0; } if (priorityLevel == bestPriority) { // Modify value sumUp = upTotalChange[i] + 1.0e-30; numberUp = upNumber[i]; sumDown = downTotalChange[i] + 1.0e-30; numberDown = downNumber[i]; double upEstimate = object[i]->upEstimate(); double downEstimate = object[i]->downEstimate(); if (shadowPossible < 2) { upEstimate = numberUp ? ((upEstimate * sumUp) / numberUp) : (upEstimate * upMultiplier); if (numberUp < numberBeforeTrusted) upEstimate *= (numberBeforeTrusted + 1.0) / (numberUp + 1.0); downEstimate = numberDown ? ((downEstimate * sumDown) / numberDown) : (downEstimate * downMultiplier); if (numberDown < numberBeforeTrusted) downEstimate *= (numberBeforeTrusted + 1.0) / (numberDown + 1.0); } else { // use shadow prices always } value = MAXMIN_CRITERION * CoinMin(upEstimate, downEstimate) + (1.0 - MAXMIN_CRITERION) * CoinMax(upEstimate, downEstimate); if (value > check) { //add to list int iObject = list_[checkIndex]; if (iObject >= 0) { assert(list_[putOther - 1] < 0); list_[--putOther] = iObject; // to end } list_[checkIndex] = i; assert(checkIndex < putOther); useful_[checkIndex] = value; // find worst check = COIN_DBL_MAX; maximumStrong = CoinMin(maximumStrong, putOther); for (int j = 0; j < maximumStrong; j++) { if (list_[j] >= 0) { if (useful_[j] < check) { check = useful_[j]; checkIndex = j; } } else { check = 0.0; checkIndex = j; break; } } } else { // to end assert(list_[putOther - 1] < 0); list_[--putOther] = i; maximumStrong = CoinMin(maximumStrong, putOther); } } else { // worse priority // to end assert(list_[putOther - 1] < 0); list_[--putOther] = i; maximumStrong = CoinMin(maximumStrong, putOther); } } } #if 0 printf("%d at %d, %d at %d and %d at %d\n",priCount[0],pri[0], priCount[1],pri[1],priCount[2],pri[2]); #endif // Get list numberOnList_ = 0; if (feasible) { for (i = 0; i < CoinMin(maximumStrong, putOther); i++) { if (list_[i] >= 0) { list_[numberOnList_] = list_[i]; useful_[numberOnList_++] = -useful_[i]; } } if (numberOnList_) { // Sort CoinSort_2(useful_, useful_ + numberOnList_, list_); // move others i = numberOnList_; for (; putOther < numberObjects; putOther++) list_[i++] = list_[putOther]; assert(i == numberUnsatisfied_); if (!numberStrong_) numberOnList_ = 0; } } else { // not feasible numberUnsatisfied_ = -1; } // Get rid of any shadow prices info info->defaultDual_ = -1.0; // switch off delete[] info->usefulRegion_; delete[] info->indexRegion_; return numberUnsatisfied_; } void OsiChooseStrong::resetResults(int num) { delete[] results_; numResults_ = 0; results_ = new OsiHotInfo[num]; } /* Choose a variable Returns - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates We can pick up branch from whichObject() and whichWay() We can pick up a forced branch (can change bound) from whichForcedObject() and whichForcedWay() If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() */ int OsiChooseStrong::chooseVariable(OsiSolverInterface *solver, OsiBranchingInformation *info, bool fixVariables) { if (numberUnsatisfied_) { const double *upTotalChange = pseudoCosts_.upTotalChange(); const double *downTotalChange = pseudoCosts_.downTotalChange(); const int *upNumber = pseudoCosts_.upNumber(); const int *downNumber = pseudoCosts_.downNumber(); int numberBeforeTrusted = pseudoCosts_.numberBeforeTrusted(); // Somehow we can get here with it 0 ! if (!numberBeforeTrusted) { numberBeforeTrusted = 5; pseudoCosts_.setNumberBeforeTrusted(numberBeforeTrusted); } int numberLeft = CoinMin(numberStrong_ - numberStrongDone_, numberUnsatisfied_); int numberToDo = 0; resetResults(numberLeft); int returnCode = 0; bestObjectIndex_ = -1; bestWhichWay_ = -1; firstForcedObjectIndex_ = -1; firstForcedWhichWay_ = -1; double bestTrusted = -COIN_DBL_MAX; for (int i = 0; i < numberLeft; i++) { int iObject = list_[i]; if (upNumber[iObject] < numberBeforeTrusted || downNumber[iObject] < numberBeforeTrusted) { results_[numberToDo++] = OsiHotInfo(solver, info, solver->objects(), iObject); } else { const OsiObject *obj = solver->object(iObject); double upEstimate = (upTotalChange[iObject] * obj->upEstimate()) / upNumber[iObject]; double downEstimate = (downTotalChange[iObject] * obj->downEstimate()) / downNumber[iObject]; double value = MAXMIN_CRITERION * CoinMin(upEstimate, downEstimate) + (1.0 - MAXMIN_CRITERION) * CoinMax(upEstimate, downEstimate); if (value > bestTrusted) { bestObjectIndex_ = iObject; bestWhichWay_ = upEstimate > downEstimate ? 0 : 1; bestTrusted = value; } } } int numberFixed = 0; if (numberToDo) { returnCode = doStrongBranching(solver, info, numberToDo, 1); if (returnCode >= 0 && returnCode <= 2) { if (returnCode) { returnCode = 4; if (bestObjectIndex_ >= 0) returnCode = 3; } for (int i = 0; i < numResults_; i++) { int iObject = results_[i].whichObject(); double upEstimate; if (results_[i].upStatus() != 1) { assert(results_[i].upStatus() >= 0); upEstimate = results_[i].upChange(); } else { // infeasible - just say expensive if (info->cutoff_ < 1.0e50) upEstimate = 2.0 * (info->cutoff_ - info->objectiveValue_); else upEstimate = 2.0 * fabs(info->objectiveValue_); if (firstForcedObjectIndex_ < 0) { firstForcedObjectIndex_ = iObject; firstForcedWhichWay_ = 0; } numberFixed++; if (fixVariables) { const OsiObject *obj = solver->object(iObject); OsiBranchingObject *branch = obj->createBranch(solver, info, 0); branch->branch(solver); delete branch; } } double downEstimate; if (results_[i].downStatus() != 1) { assert(results_[i].downStatus() >= 0); downEstimate = results_[i].downChange(); } else { // infeasible - just say expensive if (info->cutoff_ < 1.0e50) downEstimate = 2.0 * (info->cutoff_ - info->objectiveValue_); else downEstimate = 2.0 * fabs(info->objectiveValue_); if (firstForcedObjectIndex_ < 0) { firstForcedObjectIndex_ = iObject; firstForcedWhichWay_ = 1; } numberFixed++; if (fixVariables) { const OsiObject *obj = solver->object(iObject); OsiBranchingObject *branch = obj->createBranch(solver, info, 1); branch->branch(solver); delete branch; } } double value = MAXMIN_CRITERION * CoinMin(upEstimate, downEstimate) + (1.0 - MAXMIN_CRITERION) * CoinMax(upEstimate, downEstimate); if (value > bestTrusted) { bestTrusted = value; bestObjectIndex_ = iObject; bestWhichWay_ = upEstimate > downEstimate ? 0 : 1; // but override if there is a preferred way const OsiObject *obj = solver->object(iObject); if (obj->preferredWay() >= 0 && obj->infeasibility()) bestWhichWay_ = obj->preferredWay(); if (returnCode) returnCode = 2; } } } else if (returnCode == 3) { // max time - just choose one bestObjectIndex_ = list_[0]; bestWhichWay_ = 0; returnCode = 0; } } else { bestObjectIndex_ = list_[0]; } if (bestObjectIndex_ >= 0) { OsiObject *obj = solver->objects()[bestObjectIndex_]; obj->setWhichWay(bestWhichWay_); } if (numberFixed == numberUnsatisfied_ && numberFixed) returnCode = 4; return returnCode; } else { return 1; } } // Given a candidate fill in useful information e.g. estimates void OsiPseudoCosts::updateInformation(const OsiBranchingInformation *info, int branch, OsiHotInfo *hotInfo) { int index = hotInfo->whichObject(); assert(index < info->solver_->numberObjects()); const OsiObject *object = info->solver_->object(index); assert(object->upEstimate() > 0.0 && object->downEstimate() > 0.0); assert(branch < 2); if (branch) { if (hotInfo->upStatus() != 1) { assert(hotInfo->upStatus() >= 0); upTotalChange_[index] += hotInfo->upChange() / object->upEstimate(); upNumber_[index]++; } else { #if 0 // infeasible - just say expensive if (info->cutoff_<1.0e50) upTotalChange_[index] += 2.0*(info->cutoff_-info->objectiveValue_)/object->upEstimate(); else upTotalChange_[index] += 2.0*fabs(info->objectiveValue_)/object->upEstimate(); #endif } } else { if (hotInfo->downStatus() != 1) { assert(hotInfo->downStatus() >= 0); downTotalChange_[index] += hotInfo->downChange() / object->downEstimate(); downNumber_[index]++; } else { #if 0 // infeasible - just say expensive if (info->cutoff_<1.0e50) downTotalChange_[index] += 2.0*(info->cutoff_-info->objectiveValue_)/object->downEstimate(); else downTotalChange_[index] += 2.0*fabs(info->objectiveValue_)/object->downEstimate(); #endif } } } #if 1 // Given a branch fill in useful information e.g. estimates void OsiPseudoCosts::updateInformation(int index, int branch, double changeInObjective, double changeInValue, int status) { //assert (indexnumberObjects()); assert(branch < 2); assert(changeInValue > 0.0); assert(branch < 2); if (branch) { if (status != 1) { assert(status >= 0); upTotalChange_[index] += changeInObjective / changeInValue; upNumber_[index]++; } } else { if (status != 1) { assert(status >= 0); downTotalChange_[index] += changeInObjective / changeInValue; downNumber_[index]++; } } } #endif OsiHotInfo::OsiHotInfo() : originalObjectiveValue_(COIN_DBL_MAX) , changes_(NULL) , iterationCounts_(NULL) , statuses_(NULL) , branchingObject_(NULL) , whichObject_(-1) { } OsiHotInfo::OsiHotInfo(OsiSolverInterface *solver, const OsiBranchingInformation *info, const OsiObject *const *objects, int whichObject) : originalObjectiveValue_(COIN_DBL_MAX) , whichObject_(whichObject) { originalObjectiveValue_ = info->objectiveValue_; const OsiObject *object = objects[whichObject_]; // create object - "down" first branchingObject_ = object->createBranch(solver, info, 0); // create arrays int numberBranches = branchingObject_->numberBranches(); changes_ = new double[numberBranches]; iterationCounts_ = new int[numberBranches]; statuses_ = new int[numberBranches]; CoinZeroN(changes_, numberBranches); CoinZeroN(iterationCounts_, numberBranches); CoinFillN(statuses_, numberBranches, -1); } OsiHotInfo::OsiHotInfo(const OsiHotInfo &rhs) { originalObjectiveValue_ = rhs.originalObjectiveValue_; whichObject_ = rhs.whichObject_; if (rhs.branchingObject_) { branchingObject_ = rhs.branchingObject_->clone(); int numberBranches = branchingObject_->numberBranches(); changes_ = CoinCopyOfArray(rhs.changes_, numberBranches); iterationCounts_ = CoinCopyOfArray(rhs.iterationCounts_, numberBranches); statuses_ = CoinCopyOfArray(rhs.statuses_, numberBranches); } else { branchingObject_ = NULL; changes_ = NULL; iterationCounts_ = NULL; statuses_ = NULL; } } OsiHotInfo & OsiHotInfo::operator=(const OsiHotInfo &rhs) { if (this != &rhs) { delete branchingObject_; delete[] changes_; delete[] iterationCounts_; delete[] statuses_; originalObjectiveValue_ = rhs.originalObjectiveValue_; whichObject_ = rhs.whichObject_; if (rhs.branchingObject_) { branchingObject_ = rhs.branchingObject_->clone(); int numberBranches = branchingObject_->numberBranches(); changes_ = CoinCopyOfArray(rhs.changes_, numberBranches); iterationCounts_ = CoinCopyOfArray(rhs.iterationCounts_, numberBranches); statuses_ = CoinCopyOfArray(rhs.statuses_, numberBranches); } else { branchingObject_ = NULL; changes_ = NULL; iterationCounts_ = NULL; statuses_ = NULL; } } return *this; } OsiHotInfo::~OsiHotInfo() { delete branchingObject_; delete[] changes_; delete[] iterationCounts_; delete[] statuses_; } // Clone OsiHotInfo * OsiHotInfo::clone() const { return new OsiHotInfo(*this); } /* Fill in useful information after strong branch */ int OsiHotInfo::updateInformation(const OsiSolverInterface *solver, const OsiBranchingInformation *info, OsiChooseVariable *choose) { int iBranch = branchingObject_->branchIndex() - 1; assert(iBranch >= 0 && iBranch < branchingObject_->numberBranches()); iterationCounts_[iBranch] += solver->getIterationCount(); int status; if (solver->isProvenOptimal()) status = 0; // optimal else if (solver->isIterationLimitReached() && !solver->isDualObjectiveLimitReached()) status = 2; // unknown else status = 1; // infeasible // Could do something different if we can't trust double newObjectiveValue = solver->getObjSense() * solver->getObjValue(); changes_[iBranch] = CoinMax(0.0, newObjectiveValue - originalObjectiveValue_); // we might have got here by primal if (choose->trustStrongForBound()) { if (!status && newObjectiveValue >= info->cutoff_) { status = 1; // infeasible changes_[iBranch] = 1.0e100; } } statuses_[iBranch] = status; if (!status && choose->trustStrongForSolution() && newObjectiveValue < choose->goodObjectiveValue()) { // check if solution const OsiSolverInterface *saveSolver = info->solver_; info->solver_ = solver; const double *saveLower = info->lower_; info->lower_ = solver->getColLower(); const double *saveUpper = info->upper_; info->upper_ = solver->getColUpper(); // also need to make sure bounds OK as may not be info solver #if 0 if (saveSolver->getMatrixByCol()) { const CoinBigIndex * columnStart = info->columnStart_; assert (saveSolver->getMatrixByCol()->getVectorStarts()==columnStart); } #endif if (choose->feasibleSolution(info, solver->getColSolution(), solver->numberObjects(), const_cast< const OsiObject ** >(solver->objects()))) { // put solution somewhere choose->saveSolution(solver); status = 3; } info->solver_ = saveSolver; info->lower_ = saveLower; info->upper_ = saveUpper; } // Now update - possible strong branching info choose->updateInformation(info, iBranch, this); return status; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiSolverBranch.cpp0000644000175200017520000003450013414504051016674 0ustar coincoin// Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "CoinHelperFunctions.hpp" #include "CoinWarmStartBasis.hpp" #include "OsiConfig.h" #include "CoinFinite.hpp" #include "OsiSolverInterface.hpp" #include "OsiSolverBranch.hpp" #include #include #include //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiSolverBranch::OsiSolverBranch() : indices_(NULL) , bound_(NULL) { memset(start_, 0, sizeof(start_)); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiSolverBranch::OsiSolverBranch(const OsiSolverBranch &rhs) { memcpy(start_, rhs.start_, sizeof(start_)); int size = start_[4]; if (size) { indices_ = CoinCopyOfArray(rhs.indices_, size); bound_ = CoinCopyOfArray(rhs.bound_, size); } else { indices_ = NULL; bound_ = NULL; } } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiSolverBranch::~OsiSolverBranch() { delete[] indices_; delete[] bound_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiSolverBranch & OsiSolverBranch::operator=(const OsiSolverBranch &rhs) { if (this != &rhs) { delete[] indices_; delete[] bound_; memcpy(start_, rhs.start_, sizeof(start_)); int size = start_[4]; if (size) { indices_ = CoinCopyOfArray(rhs.indices_, size); bound_ = CoinCopyOfArray(rhs.bound_, size); } else { indices_ = NULL; bound_ = NULL; } } return *this; } //----------------------------------------------------------------------------- // add simple branch //----------------------------------------------------------------------------- void OsiSolverBranch::addBranch(int iColumn, double value) { delete[] indices_; delete[] bound_; indices_ = new int[2]; bound_ = new double[2]; indices_[0] = iColumn; indices_[1] = iColumn; start_[0] = 0; start_[1] = 0; start_[2] = 1; bound_[0] = floor(value); start_[3] = 2; bound_[1] = ceil(value); start_[4] = 2; assert(bound_[0] != bound_[1]); } //----------------------------------------------------------------------------- // Add bounds - way =-1 is first , +1 is second //----------------------------------------------------------------------------- void OsiSolverBranch::addBranch(int way, int numberTighterLower, const int *whichLower, const double *newLower, int numberTighterUpper, const int *whichUpper, const double *newUpper) { assert(way == -1 || way == 1); int numberNew = numberTighterLower + numberTighterUpper; int base = way + 1; // will be 0 or 2 int numberNow = start_[4 - base] - start_[2 - base]; int *tempI = new int[numberNow + numberNew]; double *tempD = new double[numberNow + numberNew]; int putNew = (way == -1) ? 0 : start_[2]; int putNow = (way == -1) ? numberNew : 0; memcpy(tempI + putNow, indices_ + start_[2 - base], numberNow * sizeof(int)); memcpy(tempD + putNow, bound_ + start_[2 - base], numberNow * sizeof(double)); memcpy(tempI + putNew, whichLower, numberTighterLower * sizeof(int)); memcpy(tempD + putNew, newLower, numberTighterLower * sizeof(double)); putNew += numberTighterLower; memcpy(tempI + putNew, whichUpper, numberTighterUpper * sizeof(int)); memcpy(tempD + putNew, newUpper, numberTighterUpper * sizeof(double)); delete[] indices_; indices_ = tempI; delete[] bound_; bound_ = tempD; int numberOldLower = start_[3 - base] - start_[2 - base]; int numberOldUpper = start_[4 - base] - start_[3 - base]; start_[0] = 0; if (way == -1) { start_[1] = numberTighterLower; start_[2] = start_[1] + numberTighterUpper; start_[3] = start_[2] + numberOldLower; start_[4] = start_[3] + numberOldUpper; } else { start_[1] = numberOldLower; start_[2] = start_[1] + numberOldUpper; start_[3] = start_[2] + numberTighterLower; start_[4] = start_[3] + numberTighterUpper; } } //----------------------------------------------------------------------------- // Add bounds - way =-1 is first , +1 is second //----------------------------------------------------------------------------- void OsiSolverBranch::addBranch(int way, int numberColumns, const double *oldLower, const double *newLower2, const double *oldUpper, const double *newUpper2) { assert(way == -1 || way == 1); // find int i; int *whichLower = new int[numberColumns]; double *newLower = new double[numberColumns]; int numberTighterLower = 0; for (i = 0; i < numberColumns; i++) { if (newLower2[i] > oldLower[i]) { whichLower[numberTighterLower] = i; newLower[numberTighterLower++] = newLower2[i]; } } int *whichUpper = new int[numberColumns]; double *newUpper = new double[numberColumns]; int numberTighterUpper = 0; for (i = 0; i < numberColumns; i++) { if (newUpper2[i] < oldUpper[i]) { whichUpper[numberTighterUpper] = i; newUpper[numberTighterUpper++] = newUpper2[i]; } } int numberNew = numberTighterLower + numberTighterUpper; int base = way + 1; // will be 0 or 2 int numberNow = start_[4 - base] - start_[2 - base]; int *tempI = new int[numberNow + numberNew]; double *tempD = new double[numberNow + numberNew]; int putNew = (way == -1) ? 0 : start_[2]; int putNow = (way == -1) ? numberNew : 0; memcpy(tempI + putNow, indices_ + start_[2 - base], numberNow * sizeof(int)); memcpy(tempD + putNow, bound_ + start_[2 - base], numberNow * sizeof(double)); memcpy(tempI + putNew, whichLower, numberTighterLower * sizeof(int)); memcpy(tempD + putNew, newLower, numberTighterLower * sizeof(double)); putNew += numberTighterLower; memcpy(tempI + putNew, whichUpper, numberTighterUpper * sizeof(int)); memcpy(tempD + putNew, newUpper, numberTighterUpper * sizeof(double)); delete[] indices_; indices_ = tempI; delete[] bound_; bound_ = tempD; int numberOldLower = start_[3 - base] - start_[2 - base]; int numberOldUpper = start_[4 - base] - start_[3 - base]; start_[0] = 0; if (way == -1) { start_[1] = numberTighterLower; start_[2] = start_[1] + numberTighterUpper; start_[3] = start_[2] + numberOldLower; start_[4] = start_[3] + numberOldUpper; } else { start_[1] = numberOldLower; start_[2] = start_[1] + numberOldUpper; start_[3] = start_[2] + numberTighterLower; start_[4] = start_[3] + numberTighterUpper; } delete[] whichLower; delete[] newLower; delete[] whichUpper; delete[] newUpper; } // Apply bounds void OsiSolverBranch::applyBounds(OsiSolverInterface &solver, int way) const { int base = way + 1; assert(way == -1 || way == 1); int numberColumns = solver.getNumCols(); const double *columnLower = solver.getColLower(); int i; for (i = start_[base]; i < start_[base + 1]; i++) { int iColumn = indices_[i]; if (iColumn < numberColumns) { double value = CoinMax(bound_[i], columnLower[iColumn]); solver.setColLower(iColumn, value); } else { int iRow = iColumn - numberColumns; const double *rowLower = solver.getRowLower(); double value = CoinMax(bound_[i], rowLower[iRow]); solver.setRowLower(iRow, value); } } const double *columnUpper = solver.getColUpper(); for (i = start_[base + 1]; i < start_[base + 2]; i++) { int iColumn = indices_[i]; if (iColumn < numberColumns) { double value = CoinMin(bound_[i], columnUpper[iColumn]); solver.setColUpper(iColumn, value); } else { int iRow = iColumn - numberColumns; const double *rowUpper = solver.getRowUpper(); double value = CoinMin(bound_[i], rowUpper[iRow]); solver.setRowUpper(iRow, value); } } } // Returns true if current solution satsifies one side of branch bool OsiSolverBranch::feasibleOneWay(const OsiSolverInterface &solver) const { bool feasible = false; int numberColumns = solver.getNumCols(); const double *columnLower = solver.getColLower(); const double *columnUpper = solver.getColUpper(); const double *columnSolution = solver.getColSolution(); double primalTolerance; solver.getDblParam(OsiPrimalTolerance, primalTolerance); for (int base = 0; base < 4; base += 2) { feasible = true; int i; for (i = start_[base]; i < start_[base + 1]; i++) { int iColumn = indices_[i]; if (iColumn < numberColumns) { double value = CoinMax(bound_[i], columnLower[iColumn]); if (columnSolution[iColumn] < value - primalTolerance) { feasible = false; break; } } else { abort(); // do later (other stuff messed up anyway - e.g. CBC) } } if (!feasible) break; for (i = start_[base + 1]; i < start_[base + 2]; i++) { int iColumn = indices_[i]; if (iColumn < numberColumns) { double value = CoinMin(bound_[i], columnUpper[iColumn]); if (columnSolution[iColumn] > value + primalTolerance) { feasible = false; break; } } else { abort(); // do later (other stuff messed up anyway - e.g. CBC) } } if (feasible) break; // OK this way } return feasible; } //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiSolverResult::OsiSolverResult() : objectiveValue_(COIN_DBL_MAX) , primalSolution_(NULL) , dualSolution_(NULL) { } //------------------------------------------------------------------- // Constructor from solver //------------------------------------------------------------------- OsiSolverResult::OsiSolverResult(const OsiSolverInterface &solver, const double *lowerBefore, const double *upperBefore) : objectiveValue_(COIN_DBL_MAX) , primalSolution_(NULL) , dualSolution_(NULL) { if (solver.isProvenOptimal() && !solver.isDualObjectiveLimitReached()) { objectiveValue_ = solver.getObjValue() * solver.getObjSense(); CoinWarmStartBasis *basis = dynamic_cast< CoinWarmStartBasis * >(solver.getWarmStart()); assert(basis); basis_ = *basis; delete basis; int numberRows = basis_.getNumArtificial(); int numberColumns = basis_.getNumStructural(); assert(numberColumns == solver.getNumCols()); assert(numberRows == solver.getNumRows()); primalSolution_ = CoinCopyOfArray(solver.getColSolution(), numberColumns); dualSolution_ = CoinCopyOfArray(solver.getRowPrice(), numberRows); fixed_.addBranch(-1, numberColumns, lowerBefore, solver.getColLower(), upperBefore, solver.getColUpper()); } } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiSolverResult::OsiSolverResult(const OsiSolverResult &rhs) { objectiveValue_ = rhs.objectiveValue_; basis_ = rhs.basis_; fixed_ = rhs.fixed_; int numberRows = basis_.getNumArtificial(); int numberColumns = basis_.getNumStructural(); if (numberColumns) { primalSolution_ = CoinCopyOfArray(rhs.primalSolution_, numberColumns); dualSolution_ = CoinCopyOfArray(rhs.dualSolution_, numberRows); } else { primalSolution_ = NULL; dualSolution_ = NULL; } } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiSolverResult::~OsiSolverResult() { delete[] primalSolution_; delete[] dualSolution_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiSolverResult & OsiSolverResult::operator=(const OsiSolverResult &rhs) { if (this != &rhs) { delete[] primalSolution_; delete[] dualSolution_; objectiveValue_ = rhs.objectiveValue_; basis_ = rhs.basis_; fixed_ = rhs.fixed_; int numberRows = basis_.getNumArtificial(); int numberColumns = basis_.getNumStructural(); if (numberColumns) { primalSolution_ = CoinCopyOfArray(rhs.primalSolution_, numberColumns); dualSolution_ = CoinCopyOfArray(rhs.dualSolution_, numberRows); } else { primalSolution_ = NULL; dualSolution_ = NULL; } } return *this; } // Create result void OsiSolverResult::createResult(const OsiSolverInterface &solver, const double *lowerBefore, const double *upperBefore) { delete[] primalSolution_; delete[] dualSolution_; if (solver.isProvenOptimal() && !solver.isDualObjectiveLimitReached()) { objectiveValue_ = solver.getObjValue() * solver.getObjSense(); CoinWarmStartBasis *basis = dynamic_cast< CoinWarmStartBasis * >(solver.getWarmStart()); assert(basis); basis_ = *basis; int numberRows = basis_.getNumArtificial(); int numberColumns = basis_.getNumStructural(); assert(numberColumns == solver.getNumCols()); assert(numberRows == solver.getNumRows()); primalSolution_ = CoinCopyOfArray(solver.getColSolution(), numberColumns); dualSolution_ = CoinCopyOfArray(solver.getRowPrice(), numberRows); fixed_.addBranch(-1, numberColumns, lowerBefore, solver.getColLower(), upperBefore, solver.getColUpper()); } else { // infeasible objectiveValue_ = COIN_DBL_MAX; basis_ = CoinWarmStartBasis(); ; primalSolution_ = NULL; dualSolution_ = NULL; } } // Restore result void OsiSolverResult::restoreResult(OsiSolverInterface &solver) const { //solver.setObjValue(objectiveValue_)*solver.getObjSense(); solver.setWarmStart(&basis_); solver.setColSolution(primalSolution_); solver.setRowPrice(dualSolution_); fixed_.applyBounds(solver, -1); } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiRowCutDebugger.cpp0000644000175200017520000017103413414504051017200 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include #include #include #include #include "CoinPragma.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedVector.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" #include "OsiRowCutDebugger.hpp" /* Check if any cuts cut off the known solution. If so then print offending cuts and return non-zero code */ int OsiRowCutDebugger::validateCuts(const OsiCuts &cs, int first, int last) const { int nbad = 0; int i; const double epsilon = 1.0e-8; const int nRowCuts = CoinMin(cs.sizeRowCuts(), last); for (i = first; i < nRowCuts; i++) { OsiRowCut rcut = cs.rowCut(i); CoinPackedVector rpv = rcut.row(); const int n = rpv.getNumElements(); const int *indices = rpv.getIndices(); const double *elements = rpv.getElements(); int k; double lb = rcut.lb(); double ub = rcut.ub(); double sum = 0.0; for (k = 0; k < n; k++) { int column = indices[k]; sum += knownSolution_[column] * elements[k]; } // is it violated if (sum > ub + epsilon || sum < lb - epsilon) { double violation = CoinMax(sum - ub, lb - sum); std::cout << "Cut " << i << " with " << n << " coefficients, cuts off known solution by " << violation << ", lo=" << lb << ", ub=" << ub << std::endl; for (k = 0; k < n; k++) { int column = indices[k]; std::cout << "( " << column << " , " << elements[k] << " ) "; if ((k % 4) == 3) std::cout << std::endl; } std::cout << std::endl; std::cout << "Non zero solution values are" << std::endl; int j = 0; for (k = 0; k < n; k++) { int column = indices[k]; if (fabs(knownSolution_[column]) > 1.0e-9) { std::cout << "( " << column << " , " << knownSolution_[column] << " ) "; if ((j % 4) == 3) std::cout << std::endl; j++; } } std::cout << std::endl; nbad++; } } return nbad; } /* If we are on the path to the known integer solution then check out if generated cut cuts off the known solution! If so then print offending cut and return non-zero code */ bool OsiRowCutDebugger::invalidCut(const OsiRowCut &rcut) const { bool bad = false; const double epsilon = 1.0e-6; CoinPackedVector rpv = rcut.row(); const int n = rpv.getNumElements(); const int *indices = rpv.getIndices(); const double *elements = rpv.getElements(); int k; double lb = rcut.lb(); double ub = rcut.ub(); double sum = 0.0; for (k = 0; k < n; k++) { int column = indices[k]; sum += knownSolution_[column] * elements[k]; } // is it violated if (sum > ub + epsilon || sum < lb - epsilon) { double violation = CoinMax(sum - ub, lb - sum); std::cout << "Cut with " << n << " coefficients, cuts off known solutions by " << violation << ", lo=" << lb << ", ub=" << ub << std::endl; for (k = 0; k < n; k++) { int column = indices[k]; std::cout << "( " << column << " , " << elements[k] << " ) "; if ((k % 4) == 3) std::cout << std::endl; } std::cout << std::endl; std::cout << "Non zero solution values are" << std::endl; int j = 0; for (k = 0; k < n; k++) { int column = indices[k]; if (fabs(knownSolution_[column]) > 1.0e-9) { std::cout << "( " << column << " , " << knownSolution_[column] << " ) "; if ((j % 4) == 3) std::cout << std::endl; j++; } } std::cout << std::endl; bad = true; } return bad; } /* Returns true if the column bounds in the solver do not exclude the solution held by the debugger, false otherwise Inspects only the integer variables. */ bool OsiRowCutDebugger::onOptimalPath(const OsiSolverInterface &si) const { if (integerVariable_) { int nCols = si.getNumCols(); if (nCols != numberColumns_) return false; // check user has not modified problem int i; const double *collower = si.getColLower(); const double *colupper = si.getColUpper(); bool onOptimalPath = true; for (i = 0; i < numberColumns_; i++) { if (collower[i] > colupper[i] + 1.0e-12) { printf("Infeasible bounds for %d - %g, %g\n", i, collower[i], colupper[i]); } if (si.isInteger(i)) { // value of integer variable in solution double value = knownSolution_[i]; if (value > colupper[i] + 1.0e-3 || value < collower[i] - 1.0e-3) { onOptimalPath = false; break; } } } return onOptimalPath; } else { // no information return false; } } /* Returns true if the debugger is active (i.e., if the debugger holds a known solution). */ bool OsiRowCutDebugger::active() const { return (integerVariable_ != NULL); } /* Print known solution Generally, prints the nonzero values of the known solution. Any incorrect values are flagged with an `*'. Zeros are printed if they are incorrect. As an aid to finding the output when there's something wrong, the first two incorrect values are printed again, flagged with `BAD'. Inspects only the integer variables. Returns the number of incorrect variables, or -1 if no solution is available. A mismatch in the number of columns between the debugger's solution and the solver qualifies as `no solution'. */ int OsiRowCutDebugger::printOptimalSolution(const OsiSolverInterface &si) const { int nCols = si.getNumCols(); if (integerVariable_ && nCols == numberColumns_) { const double *collower = si.getColLower(); const double *colupper = si.getColUpper(); /* Dump the nonzeros of the optimal solution. Print zeros if there's a problem. */ int bad[2] = { -1, -1 }; int badVars = 0; for (int j = 0; j < numberColumns_; j++) { if (integerVariable_[j]) { double value = knownSolution_[j]; bool ok = true; if (value > colupper[j] + 1.0e-3 || value < collower[j] - 1.0e-3) { if (bad[0] < 0) { bad[0] = j; } else { bad[1] = j; } ok = false; std::cout << "* "; } if (value || !ok) std::cout << j << " " << value << std::endl; } } for (int i = 0; i < 2; i++) { if (bad[i] >= 0) { int j = bad[i]; std::cout << "BAD " << j << " " << collower[j] << " <= " << knownSolution_[j] << " <= " << colupper[j] << std::endl; } } return (badVars); } else { // no information return -1; } } /* Activate a row cut debugger using the name of the model. A known optimal solution will be used to validate cuts. See the source below for the set of known problems. Most are miplib3. Returns true if the debugger is successfully activated. */ bool OsiRowCutDebugger::activate(const OsiSolverInterface &si, const char *model) { // set to true to print an activation message const bool printActivationNotice = false; int i; //get rid of any arrays delete[] integerVariable_; delete[] knownSolution_; numberColumns_ = 0; int expectedNumberColumns = 0; enum { undefined, pure0_1, continuousWith0_1, generalMip } probType; // Convert input parameter model to be lowercase and // only consider characters between '/' and '.' std::string modelL; //name in lowercase for (i = 0; i < static_cast< int >(strlen(model)); i++) { char value = static_cast< char >(tolower(model[i])); if (value == '/') { modelL.erase(); } else if (value == '.') { break; } else { modelL.append(1, value); } } CoinPackedVector intSoln; probType = undefined; //-------------------------------------------------------- // // Define additional problems by adding it as an additional // "else if ( modelL == '???' ) { ... }" // stanza below. // // Assign values to probType and intSoln. // // probType - pure0_1, continuousWith0_1, or generalMip // // intSoln - // when probType is pure0_1 // intSoln contains the indices of the variables // at 1 in the optimal solution // when probType is continuousWith0_1 // intSoln contains the indices of integer // variables at one in the optimal solution // when probType is generalMip // intSoln contains the the indices of the integer // variables and their value in the optimal solution //-------------------------------------------------------- // exmip1 if (modelL == "exmip1") { probType = continuousWith0_1; intSoln.insert(2, 1.); intSoln.insert(3, 1.); expectedNumberColumns = 8; } // p0033 else if (modelL == "p0033") { probType = pure0_1; // Alternate solution -- 21,23 replace 22. // int intIndicesAt1[]={ 0,6,7,9,13,17,18,21,23,24,25,26,27,28,29 }; int intIndicesAt1[] = { 0, 6, 7, 9, 13, 17, 18, 22, 24, 25, 26, 27, 28, 29 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 33; } // flugpl else if (modelL == "flugpl") { probType = generalMip; int intIndicesV[] = { 1, 3, 4, 6, 7, 9, 10, 12, 13, 15 }; double intSolnV[] = { 6., 60., 6., 60., 16., 70., 7., 70., 12., 75. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 18; } // enigma else if (modelL == "enigma") { probType = pure0_1; int intIndicesAt1[] = { 0, 18, 25, 36, 44, 59, 61, 77, 82, 93 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 100; } // mod011 else if (modelL == "mod011") { probType = continuousWith0_1; int intIndicesAt1[] = { 10, 29, 32, 40, 58, 77, 80, 88 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 10958; } // probing else if (modelL == "probing") { probType = continuousWith0_1; int intIndicesAt1[] = { 1, 18, 33, 59 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 149; } // mas76 else if (modelL == "mas76") { probType = continuousWith0_1; int intIndicesAt1[] = { 4, 11, 13, 18, 42, 46, 48, 52, 85, 93, 114, 119, 123, 128, 147 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 151; } // ltw3 else if (modelL == "ltw3") { probType = continuousWith0_1; int intIndicesAt1[] = { 20, 23, 24, 26, 32, 33, 40, 47 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 48; } // mod008 else if (modelL == "mod008") { probType = pure0_1; int intIndicesAt1[] = { 1, 59, 83, 116, 123 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 319; } // mod010 else if (modelL == "mod010") { probType = pure0_1; int intIndicesAt1[] = { 2, 9, 16, 22, 26, 50, 65, 68, 82, 86, 102, 145, 149, 158, 181, 191, 266, 296, 376, 479, 555, 625, 725, 851, 981, 1030, 1095, 1260, 1321, 1339, 1443, 1459, 1568, 1602, 1780, 1856, 1951, 2332, 2352, 2380, 2471, 2555, 2577, 2610, 2646, 2647 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 2655; } // modglob else if (modelL == "modglob") { probType = continuousWith0_1; int intIndicesAt1[] = { 204, 206, 208, 212, 216, 218, 220, 222, 230, 232, 234, 236, 244, 248, 250, 254, 256, 258, 260, 262, 264, 266, 268, 274, 278, 282, 284, 286, 288 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 422; } // p0201 else if (modelL == "p0201") { probType = pure0_1; int intIndicesAt1[] = { 8, 10, 21, 38, 39, 56, 60, 74, 79, 92, 94, 110, 111, 128, 132, 146, 151, 164, 166, 182, 183, 200 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 201; } // p0282 else if (modelL == "p0282") { probType = pure0_1; int intIndicesAt1[] = { 3, 11, 91, 101, 103, 117, 155, 169, 191, 199, 215, 223, 225, 237, 240, 242, 243, 244, 246, 248, 251, 254, 256, 257, 260, 262, 263, 273, 275, 276, 277, 280, 281 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 282; } // p0548 else if (modelL == "p0548") { probType = pure0_1; int intIndicesAt1[] = { 2, 3, 13, 14, 17, 23, 24, 43, 44, 47, 61, 62, 74, 75, 81, 82, 92, 93, 96, 98, 105, 120, 126, 129, 140, 141, 153, 154, 161, 162, 165, 177, 182, 184, 189, 192, 193, 194, 199, 200, 209, 214, 215, 218, 222, 226, 234, 239, 247, 256, 257, 260, 274, 286, 301, 305, 306, 314, 317, 318, 327, 330, 332, 334, 336, 340, 347, 349, 354, 358, 368, 369, 379, 380, 385, 388, 389, 390, 393, 394, 397, 401, 402, 406, 407, 417, 419, 420, 423, 427, 428, 430, 437, 439, 444, 446, 447, 450, 451, 452, 472, 476, 477, 480, 488, 491, 494, 500, 503, 508, 509, 510, 511, 512, 515, 517, 518, 519, 521, 522, 523, 525, 526, 527, 528, 529, 530, 531, 532, 533, 536, 537, 538, 539, 541, 542, 545, 547 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 548; } // p2756 else if (modelL == "p2756") { probType = pure0_1; int intIndicesAt1[] = { 7, 25, 50, 63, 69, 71, 81, 124, 164, 208, 210, 212, 214, 220, 266, 268, 285, 299, 301, 322, 362, 399, 455, 464, 468, 475, 518, 574, 588, 590, 612, 632, 652, 679, 751, 767, 794, 819, 838, 844, 892, 894, 913, 919, 954, 966, 996, 998, 1021, 1027, 1044, 1188, 1230, 1248, 1315, 1348, 1366, 1367, 1420, 1436, 1473, 1507, 1509, 1521, 1555, 1558, 1607, 1659, 1715, 1746, 1761, 1789, 1800, 1844, 1885, 1913, 1916, 1931, 1992, 2002, 2050, 2091, 2155, 2158, 2159, 2197, 2198, 2238, 2264, 2292, 2318, 2481, 2496, 2497, 2522, 2531, 2573, 2583, 2587, 2588, 2596, 2635, 2637, 2639, 2643, 2645, 2651, 2653, 2672, 2675, 2680, 2683, 2708, 2727, 2730, 2751 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 2756; } /* nw04 It turns out that the NAME line in nw04.mps distributed in miplib is actually NW-capital O-4. Who'd a thunk it? -- lh, 110402 -- */ else if (modelL == "nw04" || modelL == "nwo4") { probType = pure0_1; int intIndicesAt1[] = { 231, 1792, 1980, 7548, 21051, 28514, 53087, 53382, 76917 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 87482; } // bell3a else if (modelL == "bell3a") { probType = generalMip; int intIndicesV[] = { 61, 62, 65, 66, 67, 68, 69, 70 }; double intSolnV[] = { 4., 21., 4., 4., 6., 1., 25., 8. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 133; } // 10teams else if (modelL == "10teams") { probType = continuousWith0_1; int intIndicesAt1[] = { 236, 298, 339, 379, 443, 462, 520, 576, 616, 646, 690, 749, 778, 850, 878, 918, 986, 996, 1065, 1102, 1164, 1177, 1232, 1281, 1338, 1358, 1421, 1474, 1522, 1533, 1607, 1621, 1708, 1714, 1775, 1835, 1887, 1892, 1945, 1989 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 2025; } // rentacar else if (modelL == "rentacar") { probType = continuousWith0_1; int intIndicesAt1[] = { 9502, 9505, 9507, 9511, 9512, 9513, 9514, 9515, 9516, 9521, 9522, 9526, 9534, 9535, 9536, 9537, 9542, 9543, 9544, 9548, 9550, 9554 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 9557; } // qiu else if (modelL == "qiu") { probType = continuousWith0_1; int intIndicesAt1[] = { 0, 5, 8, 9, 11, 13, 16, 17, 19, 20, 24, 28, 32, 33, 35, 37, 40, 47 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 840; } // pk1 else if (modelL == "pk1") { probType = continuousWith0_1; int intIndicesAt1[] = { 1, 4, 5, 6, 7, 11, 13, 16, 17, 23, 24, 27, 28, 34, 35, 37, 43, 44, 45, 46, 47, 51, 52, 54 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 86; } // pp08a else if (modelL == "pp08a") { probType = continuousWith0_1; int intIndicesAt1[] = { 177, 179, 181, 183, 185, 190, 193, 195, 197, 199, 202, 204, 206, 208, 216, 220, 222, 229, 235 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 240; } // pp08aCUTS else if (modelL == "pp08acuts") { probType = continuousWith0_1; int intIndicesAt1[] = { 177, 179, 181, 183, 185, 190, 193, 195, 197, 199, 202, 204, 206, 208, 216, 220, 222, 229, 235 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 240; } // danoint else if (modelL == "danoint") { probType = continuousWith0_1; int intIndicesAt1[] = { 3, 5, 8, 11, 15, 21, 24, 25, 31, 34, 37, 42, 46, 48, 51, 56 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 521; } // dcmulti else if (modelL == "dcmulti") { probType = continuousWith0_1; int intIndicesAt1[] = { 2, 3, 11, 14, 15, 16, 21, 24, 28, 34, 35, 36, 39, 40, 41, 42, 45, 52, 53, 60, 61, 64, 65, 66, 67 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 548; } // egout else if (modelL == "egout") { probType = continuousWith0_1; int intIndicesAt1[] = { 0, 3, 5, 7, 8, 9, 11, 12, 13, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 34, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 54 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 141; } // fixnet6 else if (modelL == "fixnet6") { probType = continuousWith0_1; int intIndicesAt1[] = { 1, 16, 23, 31, 37, 51, 64, 179, 200, 220, 243, 287, 375, 413, 423, 533, 537, 574, 688, 690, 693, 712, 753, 773, 778, 783, 847 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 878; } // khb05250 else if (modelL == "khb05250") { probType = continuousWith0_1; int intIndicesAt1[] = { 1, 3, 8, 11, 12, 15, 16, 17, 18, 21, 22, 23 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 1350; } // lseu else if (modelL == "lseu") { probType = pure0_1; int intIndicesAt1[] = { 0, 1, 6, 13, 26, 33, 38, 43, 50, 52, 63, 65, 85 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 89; } // air03 else if (modelL == "air03") { probType = pure0_1; int intIndicesAt1[] = { 1, 3, 5, 13, 14, 28, 38, 49, 75, 76, 151, 185, 186, 271, 370, 466, 570, 614, 732, 819, 1151, 1257, 1490, 2303, 2524, 3301, 3616, 4129, 4390, 4712, 5013, 5457, 5673, 6436, 7623, 8122, 8929, 10689, 10694, 10741, 10751 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 10757; } // air04 else if (modelL == "air04") { probType = pure0_1; int intIndicesAt1[] = { 0, 1, 3, 4, 5, 6, 7, 9, 11, 12, 13, 17, 19, 20, 21, 25, 26, 27, 28, 29, 32, 35, 36, 39, 40, 42, 44, 45, 47, 48, 49, 50, 51, 52, 53, 56, 57, 58, 60, 63, 64, 66, 67, 68, 73, 74, 80, 81, 83, 85, 87, 92, 93, 94, 95, 99, 101, 102, 105, 472, 616, 680, 902, 1432, 1466, 1827, 2389, 2535, 2551, 2883, 3202, 3215, 3432, 3438, 3505, 3517, 3586, 3811, 3904, 4092, 4685, 4700, 4834, 4847, 4892, 5189, 5211, 5394, 5878, 6045, 6143, 6493, 6988, 7511, 7664, 7730, 7910, 8041, 8350, 8615, 8635, 8670 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 8904; } // air05 else if (modelL == "air05") { probType = pure0_1; int intIndicesAt1[] = { 2, 4, 5, 6, 7, 8, 9, 10, 14, 15, 19, 20, 25, 34, 35, 37, 39, 40, 41, 42, 43, 44, 45, 47, 48, 50, 52, 55, 57, 58, 66, 72, 105, 218, 254, 293, 381, 695, 1091, 1209, 1294, 1323, 1348, 1580, 1769, 2067, 2156, 2162, 2714, 2732, 3113, 3131, 3145, 3323, 3398, 3520, 3579, 4295, 5025, 5175, 5317, 5340, 6324, 6504, 6645, 6809 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 7195; } // seymour else if (modelL == "seymour") { probType = pure0_1; int intIndicesAt1[] = { 1, 2, 3, 5, 6, 7, 9, 11, 12, 16, 18, 22, 23, 25, 27, 31, 32, 34, 35, 36, 38, 39, 40, 42, 44, 45, 46, 49, 50, 51, 52, 54, 55, 56, 58, 61, 63, 65, 67, 68, 69, 70, 71, 75, 79, 81, 82, 84, 85, 86, 87, 88, 89, 91, 93, 95, 97, 98, 99, 100, 101, 102, 103, 106, 108, 112, 116, 118, 119, 120, 122, 123, 124, 125, 126, 129, 130, 132, 135, 137, 140, 141, 142, 143, 144, 148, 150, 151, 154, 156, 159, 160, 162, 163, 164, 165, 167, 169, 170, 174, 177, 178, 180, 181, 182, 183, 188, 189, 192, 194, 200, 201, 202, 203, 204, 211, 214, 218, 226, 227, 228, 231, 232, 237, 240, 242, 244, 247, 248, 249, 251, 253, 256, 257, 259, 261, 264, 265, 266, 268, 270, 272, 278, 280, 284, 286, 288, 289, 291, 292, 296, 299, 302, 305, 307, 308, 311, 312, 313, 314, 315, 316, 317, 319, 321, 325, 328, 332, 334, 335, 337, 338, 339, 340, 343, 346, 355, 357, 358, 365, 369, 372, 373, 374, 375, 376, 378, 381, 383, 386, 392, 396, 399, 402, 403, 412, 416, 419, 424, 425, 426, 427, 430, 431, 432, 436, 437, 438, 440, 441, 443, 450, 451, 452, 453, 456, 460, 461, 462, 467, 469, 475, 476, 477, 478, 479, 485, 486, 489, 491, 493, 498, 500, 501, 508, 513, 515, 516, 518, 519, 520, 524, 527, 541, 545, 547, 548, 559, 562, 563, 564, 566, 567, 570, 572, 575, 576, 582, 583, 587, 589, 595, 599, 602, 610, 611, 615, 622, 631, 646, 647, 649, 652, 658, 662, 665, 667, 671, 676, 679, 683, 685, 686, 688, 689, 691, 699, 705, 709, 711, 712, 716, 721, 722, 724, 726, 729, 732, 738, 739, 741, 745, 746, 747, 749, 752, 757, 765, 767, 768, 775, 779, 780, 791, 796, 798, 808, 809, 812, 813, 817, 819, 824, 825, 837, 839, 849, 851, 852, 857, 865, 874, 883, 885, 890, 897, 902, 907, 913, 915, 923, 924, 927, 931, 933, 936, 938, 941, 945, 949, 961, 970, 971, 978, 984, 985, 995, 997, 999, 1001, 1010, 1011, 1012, 1025, 1027, 1035, 1043, 1055, 1056, 1065, 1077, 1089, 1091, 1096, 1100, 1104, 1112, 1126, 1130, 1131, 1132, 1134, 1136, 1143, 1149, 1162, 1163, 1164, 1183, 1184, 1191, 1200, 1201, 1209, 1215, 1220, 1226, 1228, 1229, 1233, 1241, 1243, 1244, 1258, 1277, 1279, 1285, 1291, 1300, 1303, 1306, 1311, 1320, 1323, 1333, 1344, 1348, 1349, 1351, 1356, 1363, 1364, 1365, 1366 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 1372; } // stein27 else if (modelL == "stein27") { probType = pure0_1; int intIndicesAt1[] = { 0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 13, 16, 17, 19, 21, 22, 25, 26 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 27; } // stein45 else if (modelL == "stein45") { probType = pure0_1; int intIndicesAt1[] = { 0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 14, 17, 18, 19, 21, 23, 24, 25, 26, 28, 31, 32, 33, 36, 37, 39, 40, 42, 43, 44 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 45; } // misc03 else if (modelL == "misc03") { probType = continuousWith0_1; int intIndicesAt1[] = { 4, 40, 62, 75, 99, 114, 127, 134, 147, 148, 150, 152, 154, 155, 157 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 160; } // misc06 else if (modelL == "misc06") { probType = continuousWith0_1; int intIndicesAt1[] = { 1557, 1560, 1561, 1580, 1585, 1588, 1589, 1614, 1615, 1616, 1617, 1626, 1630, 1631, 1642, 1643, 1644, 1645, 1650, 1654, 1658, 1659 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 1808; } // misc07 else if (modelL == "misc07") { probType = continuousWith0_1; int intIndicesAt1[] = { 21, 27, 57, 103, 118, 148, 185, 195, 205, 209, 243, 245, 247, 249, 251, 253, 255, 257 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 260; } // rgn else if (modelL == "rgn") { probType = continuousWith0_1; int intIndicesAt1[] = { 16, 49, 72, 92 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 180; } // mitre else if (modelL == "mitre") { probType = pure0_1; int intIndicesAt1[] = { 4, 37, 67, 93, 124, 154, 177, 209, 240, 255, 287, 319, 340, 372, 403, 425, 455, 486, 516, 547, 579, 596, 628, 661, 676, 713, 744, 758, 795, 825, 851, 881, 910, 933, 963, 993, 1021, 1052, 1082, 1111, 1141, 1172, 1182, 1212, 1242, 1272, 1303, 1332, 1351, 1382, 1414, 1445, 1478, 1508, 1516, 1546, 1576, 1601, 1632, 1662, 1693, 1716, 1749, 1781, 1795, 1828, 1860, 1876, 1909, 1940, 1962, 1994, 2027, 2058, 2091, 2122, 2128, 2161, 2192, 2226, 2261, 2290, 2304, 2339, 2369, 2393, 2426, 2457, 2465, 2500, 2529, 2555, 2590, 2619, 2633, 2665, 2696, 2728, 2760, 2792, 2808, 2838, 2871, 2896, 2928, 2960, 2981, 3014, 3045, 3065, 3098, 3127, 3139, 3170, 3200, 3227, 3260, 3292, 3310, 3345, 3375, 3404, 3437, 3467, 3482, 3513, 3543, 3558, 3593, 3623, 3653, 3686, 3717, 3730, 3762, 3794, 3814, 3845, 3877, 3901, 3936, 3966, 3988, 4019, 4049, 4063, 4096, 4126, 4153, 4186, 4216, 4245, 4276, 4306, 4318, 4350, 4383, 4402, 4435, 4464, 4486, 4519, 4550, 4578, 4611, 4641, 4663, 4695, 4726, 4738, 4768, 4799, 4830, 4863, 4892, 4919, 4950, 4979, 4991, 5024, 5054, 5074, 5107, 5137, 5165, 5198, 5228, 5244, 5275, 5307, 5325, 5355, 5384, 5406, 5436, 5469, 5508, 5538, 5568, 5585, 5615, 5646, 5675, 5705, 5734, 5745, 5774, 5804, 5836, 5865, 5895, 5924, 5954, 5987, 6001, 6033, 6064, 6096, 6126, 6155, 6172, 6202, 6232, 6250, 6280, 6309, 6328, 6361, 6392, 6420, 6450, 6482, 6500, 6531, 6561, 6598, 6629, 6639, 6669, 6699, 6731, 6762, 6784, 6814, 6844, 6861, 6894, 6924, 6955, 6988, 7018, 7042, 7075, 7105, 7116, 7149, 7179, 7196, 7229, 7258, 7282, 7312, 7345, 7376, 7409, 7438, 7457, 7487, 7520, 7534, 7563, 7593, 7624, 7662, 7692, 7701, 7738, 7769, 7794, 7827, 7857, 7872, 7904, 7935, 7960, 7990, 8022, 8038, 8071, 8101, 8137, 8167, 8199, 8207, 8240, 8269, 8301, 8334, 8363, 8387, 8420, 8450, 8470, 8502, 8534, 8550, 8580, 8610, 8639, 8669, 8699, 8709, 8741, 8772, 8803, 8834, 8867, 8883, 8912, 8942, 8973, 9002, 9032, 9061, 9094, 9124, 9128, 9159, 9201, 9232, 9251, 9280, 9310, 9333, 9338, 9405, 9419, 9423, 9428, 9465, 9472, 9482, 9526, 9639, 9644, 9666, 9673, 9729, 9746, 9751, 9819, 9832, 9833, 9894, 9911, 9934, 9990, 10007, 10012, 10083, 10090, 10095, 10137, 10176, 10177, 10271, 10279, 10280, 10288, 10292, 10298, 10299, 10319, 10351, 10490, 10505, 10553, 10571, 10579, 10600, 10612, 10683, 10688 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 10724; } // cap6000 else if (modelL == "cap6000") { probType = pure0_1; int intIndicesAt1[] = { 46, 141, 238, 250, 253, 257, 260, 261, 266, 268, 270, 274, 277, 280, 289, 292, 296, 297, 300, 305, 306, 310, 314, 317, 319, 321, 324, 329, 332, 333, 336, 339, 343, 345, 350, 353, 354, 357, 361, 364, 367, 370, 372, 376, 379, 381, 386, 387, 392, 395, 397, 400, 402, 405, 410, 413, 416, 419, 420, 425, 427, 430, 434, 436, 441, 444, 447, 451, 454, 456, 459, 463, 467, 468, 473, 474, 479, 480, 483, 488, 490, 493, 496, 499, 501, 506, 509, 511, 522, 536, 537, 552, 563, 565, 569, 571, 574, 576, 580, 582, 588, 591, 596, 597, 601, 607, 609, 613, 616, 618, 621, 626, 632, 634, 644, 647, 648, 658, 661, 663, 668, 670, 680, 688, 691, 695, 698, 699, 703, 713, 721, 723, 730, 740, 742, 746, 751, 755, 757, 760, 765, 770, 775, 777, 781, 785, 792, 796, 801, 804, 812, 821, 826, 834, 838, 840, 844, 872, 881, 883, 887, 888, 899, 904, 906, 917, 919, 931, 938, 945, 948, 953, 958, 962, 963, 970, 976, 979, 981, 997, 1000, 1004, 1005, 1009, 1013, 1014, 1024, 1026, 1034, 1039, 1055, 1061, 1069, 1076, 1078, 1084, 1089, 1099, 1101, 1104, 1109, 1111, 1124, 1127, 1129, 1133, 1138, 1140, 1145, 1148, 1149, 1159, 1166, 1167, 1171, 1180, 1187, 1194, 1197, 1205, 1224, 1228, 1246, 1255, 1261, 1269, 1275, 1286, 1289, 1291, 1311, 1390, 1406, 1410, 1413, 1418, 1427, 1435, 1440, 1446, 1453, 1455, 1468, 1477, 1479, 1486, 1492, 1502, 1508, 1509, 1525, 1551, 1559, 1591, 1643, 1657, 1660, 1662, 1677, 1710, 1719, 1752, 1840, 1862, 1870, 1891, 1936, 1986, 2087, 2178, 2203, 2212, 2311, 2503, 2505, 2530, 2532, 2557, 2561, 2564, 2567, 2571, 2578, 2581, 2588, 2591, 2594, 2595, 2598, 2603, 2605, 2616, 2620, 2624, 2630, 2637, 2643, 2647, 2654, 2656, 2681, 2689, 2699, 2703, 2761, 2764, 2867, 2871, 2879, 2936, 2971, 3024, 3076, 3094, 3119, 3378, 3435, 3438, 3446, 3476, 3570, 3605, 3646, 3702, 3725, 3751, 3755, 3758, 3760, 3764, 3765, 3770, 3773, 3776, 3779, 3782, 3784, 3788, 3791, 3792, 3796, 3799, 3803, 3804, 3807, 3811, 3814, 3816, 3821, 3823, 3826, 3830, 3831, 3836, 3838, 3840, 3844, 3847, 3851, 3852, 3855, 3859, 3863, 3864, 3867, 3895, 3921, 3948, 3960, 3970, 3988, 4026, 4032, 4035, 4036, 4038, 4041, 4042, 4045, 4046, 4048, 4050, 4053, 4055, 4057, 4058, 4060, 4063, 4065, 4067, 4069, 4071, 4072, 4075, 4076, 4079, 4081, 4082, 4085, 4087, 4088, 4090, 4092, 4094, 4097, 4099, 4100, 4102, 4104, 4107, 4109, 4111, 4113, 4114, 4207, 4209, 4213, 4216, 4220, 4227, 4233, 4238, 4240, 4248, 4253, 4259, 4260, 4267, 4268, 4273, 4280, 4284, 4290, 4292, 4295, 4301, 4303, 4311, 4319, 4326, 4329, 4332, 4335, 4336, 4344, 4349, 4351, 4355, 4363, 4371, 4372, 4378, 4388, 4401, 4409, 4413, 4417, 4420, 4435, 4441, 4451, 4458, 4463, 4468, 4474, 4478, 4482, 4483, 4488, 4497, 4499, 4522, 4614, 4626, 4645, 4648, 4751, 4755, 4758, 4759, 4763, 4840, 4846, 4859, 4865, 4883, 4943, 4970, 5030, 5084, 5124, 5181, 5224, 5236, 5238, 5328, 5362, 5375, 5378, 5434, 5478, 5483, 5562, 5581, 5586, 5591, 5644, 5684 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 6000; } // gen else if (modelL == "gen") { probType = generalMip; int intIndicesV[] = { 15, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 107, 108, 109, 110, 111, 112, 113, 114, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 432, 433, 434, 435, 436 }; double intSolnV[] = { 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 23., 12., 11., 14., 16. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 870; } // dsbmip else if (modelL == "dsbmip") { probType = generalMip; int intIndicesV[] = { 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1729, 1745, 1748, 1751, 1753, 1754, 1758, 1760, 1766, 1771, 1774, 1777, 1781, 1787, 1792, 1796, 1800, 1805, 1811, 1817, 1819, 1821, 1822, 1824, 1828, 1835, 1839, 1841, 1844, 1845, 1851, 1856, 1860, 1862, 1864, 1869, 1875, 1883 }; double intSolnV[] = { 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 1886; } // gesa2 else if (modelL == "gesa2") { probType = generalMip; int intIndicesV[] = { 323, 324, 336, 337, 349, 350, 362, 363, 375, 376, 388, 389, 401, 402, 414, 415, 423, 424, 426, 427, 428, 436, 437, 439, 440, 441, 449, 450, 452, 453, 454, 462, 463, 465, 466, 467, 475, 476, 478, 479, 480, 489, 491, 492, 493, 502, 504, 505, 506, 514, 515, 517, 518, 519, 527, 528, 530, 531, 532, 537, 538, 540, 541, 543, 544, 545, 550, 551, 553, 554, 556, 557, 558, 563, 564, 566, 567, 569, 570, 571, 573, 577, 579, 580, 582, 583, 584, 592, 593, 595, 596, 597, 605, 606, 608, 609, 610, 622, 623, 1130, 1131, 1134, 1135, 1138, 1139, 1142, 1143, 1146, 1147, 1150, 1151, 1154, 1155, 1158, 1159, 1161, 1162, 1165, 1166, 1169, 1170, 1173, 1174, 1177, 1178, 1182, 1183, 1185, 1186, 1189, 1190, 1193, 1194, 1196, 1197, 1200, 1201, 1204, 1205, 1209, 1210, 1213, 1214, 1218, 1222, 1223 }; double intSolnV[] = { 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 2., 1., 2., 3., 2., 2., 1., 2., 3., 2., 2., 1., 2., 3., 2., 2., 1., 2., 2., 2., 2., 1., 2., 2., 2., 1., 2., 2., 2., 1., 2., 1., 2., 2., 1., 2., 2., 2., 2., 1., 2., 1., 4., 3., 3., 2., 1., 2., 1., 4., 3., 3., 2., 1., 2., 1., 4., 3., 3., 2., 1., 2., 1., 4., 3., 3., 2., 1., 2., 3., 3., 2., 1., 2., 1., 2., 2., 1., 2., 1., 2., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 1224; } // gesa2_o else if (modelL == "gesa2_o") { probType = generalMip; int intIndicesV[] = { 315, 316, 328, 329, 341, 342, 354, 355, 367, 368, 380, 381, 393, 394, 406, 407, 419, 420, 423, 427, 428, 432, 433, 436, 440, 441, 445, 446, 449, 453, 454, 458, 459, 462, 466, 467, 471, 472, 475, 479, 480, 484, 485, 492, 493, 497, 498, 505, 506, 510, 511, 514, 518, 519, 523, 524, 527, 531, 532, 536, 537, 539, 540, 543, 544, 545, 549, 550, 552, 553, 556, 557, 558, 562, 563, 565, 566, 569, 570, 571, 575, 576, 577, 579, 582, 583, 584, 588, 589, 592, 596, 597, 601, 602, 605, 609, 610, 614, 615, 735, 739, 740, 748, 826, 839, 851, 852, 855, 856, 889, 1136, 1137, 1138, 1139, 1140, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1165, 1175, 1193, 1194, 1195, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1220, 1221, 1222, 1223 }; double intSolnV[] = { 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 2., 1., 2., 3., 2., 2., 1., 2., 3., 2., 2., 1., 2., 3., 2., 2., 1., 2., 2., 2., 2., 1., 2., 2., 2., 1., 2., 2., 2., 1., 2., 1., 2., 2., 1., 2., 2., 2., 2., 1., 2., 1., 3., 4., 3., 2., 1., 2., 1., 3., 4., 3., 2., 1., 2., 1., 3., 4., 3., 2., 1., 2., 1., 3., 4., 3., 2., 1., 2., 3., 3., 2., 1., 2., 1., 2., 2., 1., 2., 1., 2., 2., 2., 1., 1., 1., 1., 4., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 1224; } // gesa3 else if (modelL == "gesa3") { probType = generalMip; int intIndicesV[] = { 298, 299, 310, 311, 322, 323, 334, 335, 346, 347, 358, 359, 365, 370, 371, 377, 378, 380, 382, 383, 389, 390, 392, 394, 395, 401, 402, 404, 405, 406, 407, 413, 414, 416, 417, 418, 419, 425, 426, 428, 429, 430, 431, 437, 438, 440, 441, 442, 443, 449, 450, 452, 454, 455, 461, 462, 464, 466, 467, 473, 474, 476, 478, 479, 485, 486, 488, 490, 491, 497, 498, 500, 502, 503, 509, 510, 512, 514, 515, 521, 522, 524, 526, 527, 533, 534, 536, 538, 539, 545, 546, 548, 550, 551, 557, 558, 560, 562, 563, 569, 572, 574, 575, 1058, 1059, 1062, 1063, 1066, 1067, 1070, 1071, 1074, 1075, 1078, 1079, 1082, 1083, 1086, 1087, 1090, 1091, 1094, 1095, 1098, 1099, 1102, 1103, 1106, 1107, 1110, 1111, 1114, 1115, 1118, 1119, 1122, 1123, 1126, 1127, 1130, 1131, 1134, 1135, 1138, 1139, 1142, 1143, 1146, 1147, 1150, 1151 }; double intSolnV[] = { 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 1., 2., 2., 1., 1., 1., 2., 2., 1., 2., 1., 2., 2., 1., 2., 2., 1., 2., 2., 1., 2., 2., 1., 2., 2., 1., 2., 2., 1., 2., 2., 1., 2., 1., 1., 2., 2., 1., 2., 1., 2., 2., 1., 2., 1., 2., 2., 1., 2., 1., 2., 4., 1., 2., 1., 2., 4., 2., 4., 1., 2., 4., 2., 4., 1., 2., 4., 2., 4., 1., 2., 4., 1., 4., 1., 2., 3., 1., 3., 1., 2., 2., 1., 2., 1., 2., 1., 1., 1., 2., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 1152; } // gesa3_o else if (modelL == "gesa3_o") { probType = generalMip; int intIndicesV[] = { 291, 292, 303, 304, 315, 316, 327, 328, 339, 340, 351, 352, 361, 363, 364, 373, 374, 375, 376, 379, 385, 386, 387, 388, 391, 397, 398, 399, 400, 403, 407, 409, 410, 411, 412, 415, 419, 421, 422, 423, 424, 427, 431, 433, 434, 435, 436, 439, 443, 445, 446, 447, 448, 451, 457, 458, 459, 460, 463, 469, 470, 471, 472, 475, 481, 482, 483, 484, 487, 493, 494, 495, 496, 499, 505, 506, 507, 508, 511, 517, 518, 519, 520, 523, 529, 530, 531, 532, 535, 541, 542, 543, 544, 547, 553, 554, 555, 556, 559, 565, 566, 567, 568, 578, 590, 602, 614, 626, 638, 649, 650, 661, 662, 667, 674, 686, 695, 698, 710, 722, 734, 746, 758, 769, 770, 782, 787, 794, 806, 818, 830, 842, 854, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151 }; double intSolnV[] = { 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 2., 1., 1., 2., 2., 1., 1., 2., 1., 2., 2., 1., 2., 1., 2., 2., 1., 2., 1., 2., 2., 2., 1., 2., 1., 2., 2., 2., 1., 2., 1., 2., 2., 2., 1., 2., 1., 1., 2., 2., 1., 2., 1., 2., 2., 1., 2., 1., 2., 2., 1., 2., 1., 4., 2., 1., 2., 1., 4., 4., 1., 2., 2., 4., 4., 1., 2., 2., 4., 4., 1., 2., 2., 4., 4., 1., 2., 1., 3., 3., 1., 2., 1., 2., 2., 1., 2., 1., 1., 1., 1., 2., 4., 4., 4., 4., 4., 4., 1., 4., 1., 4., 1., 4., 4., 2., 4., 4., 4., 4., 4., 4., 2., 4., 4., 1., 4., 4., 4., 4., 4., 4., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 1152; } // noswot else if (modelL == "noswot_z") { probType = generalMip; int intIndicesV[] = { 1 }; double intSolnV[] = { 1.0 }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 128; } // qnet1 else if (modelL == "qnet1") { probType = generalMip; int intIndicesV[] = { 61, 69, 79, 81, 101, 104, 111, 115, 232, 265, 267, 268, 269, 285, 398, 412, 546, 547, 556, 642, 709, 718, 721, 741, 760, 1073, 1077, 1084, 1097, 1100, 1104, 1106, 1109, 1248, 1259, 1260, 1263, 1265, 1273, 1274, 1276, 1286, 1291, 1302, 1306, 1307, 1316, 1350, 1351, 1363, 1366, 1368, 1371, 1372, 1380, 1381, 1385, 1409 }; double intSolnV[] = { 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 2., 1., 1., 1., 1., 3., 1., 2., 1., 1., 1., 1., 6., 3., 1., 1., 5., 2., 1., 2., 2., 1., 2., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 1541; } // qnet1_o (? marginally different from qnet1) else if (modelL == "qnet1_o") { probType = generalMip; int intIndicesV[] = { 61, 69, 79, 81, 101, 106, 111, 114, 115, 232, 266, 267, 268, 269, 277, 285, 398, 412, 546, 547, 556, 642, 709, 718, 721, 741, 760, 1073, 1077, 1084, 1097, 1100, 1104, 1106, 1109, 1248, 1259, 1260, 1263, 1265, 1273, 1274, 1276, 1286, 1291, 1302, 1306, 1307, 1316, 1350, 1351, 1363, 1366, 1368, 1371, 1372, 1380, 1381, 1385, 1409 }; double intSolnV[] = { 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 2., 1., 1., 1., 1., 3., 1., 2., 1., 1., 1., 1., 6., 3., 1., 1., 5., 2., 1., 2., 2., 1., 2., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 1541; } // gt2 else if (modelL == "gt2") { probType = generalMip; int intIndicesV[] = { 82, 85, 88, 92, 94, 95, 102, 103, 117, 121, 122, 128, 141, 146, 151, 152, 165, 166, 176, 179 }; double intSolnV[] = { 1., 3., 1., 5., 2., 1., 1., 2., 2., 2., 1., 2., 1., 1., 2., 1., 1., 6., 1., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 188; } // fiber else if (modelL == "fiber") { probType = continuousWith0_1; int intIndicesAt1[] = { 36, 111, 190, 214, 235, 270, 338, 346, 372, 386, 421, 424, 441, 470, 473, 483, 484, 498, 580, 594, 597, 660, 689, 735, 742, 761, 762, 776, 779, 817, 860, 1044, 1067, 1122, 1238 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 1298; } // vpm1 else if (modelL == "vpm1") { probType = continuousWith0_1; int intIndicesAt1[] = { 180, 181, 182, 185, 195, 211, 214, 226, 231, 232, 244, 251, 263, 269, 285, 294, 306, 307, 314, 319 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 378; } // vpm2 else if (modelL == "vpm2") { probType = continuousWith0_1; int intIndicesAt1[] = { 170, 173, 180, 181, 182, 185, 193, 194, 196, 213, 219, 220, 226, 245, 251, 262, 263, 267, 269, 273, 288, 289, 294, 319, 320 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 378; } // markshare1 else if (modelL == "markshare1") { probType = continuousWith0_1; int intIndicesAt1[] = { 12, 13, 17, 18, 22, 27, 28, 29, 33, 34, 35, 36, 39, 42, 43, 44, 46, 47, 49, 51, 52, 53, 54, 55, 59 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 62; } // markshare2 else if (modelL == "markshare2") { probType = continuousWith0_1; int intIndicesAt1[] = { 16, 21, 25, 26, 29, 30, 31, 32, 34, 35, 37, 40, 42, 44, 45, 47, 48, 52, 53, 57, 58, 59, 60, 61, 62, 63, 65, 71, 73 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 74; } // l152lav else if (modelL == "l152lav") { probType = pure0_1; int intIndicesAt1[] = { 1, 16, 30, 33, 67, 111, 165, 192, 198, 321, 411, 449, 906, 961, 981, 1052, 1075, 1107, 1176, 1231, 1309, 1415, 1727, 1847, 1902, 1917, 1948, 1950 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); expectedNumberColumns = 1989; } // bell5 else if (modelL == "bell5") { probType = generalMip; int intIndicesV[] = { 0, 1, 2, 3, 4, 6, 33, 34, 36, 47, 48, 49, 50, 51, 52, 53, 54, 56 }; double intSolnV[] = { 1., 1., 1., 1., 1., 1., 1., 1., 11., 2., 38., 2., 498., 125., 10., 17., 41., 19. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 104; } // blend2 else if (modelL == "blend2") { probType = generalMip; int intIndicesV[] = { 24, 35, 44, 45, 46, 52, 63, 64, 70, 71, 76, 84, 85, 132, 134, 151, 152, 159, 164, 172, 173, 289, 300, 309, 310, 311, 317, 328, 329, 335, 336, 341, 349, 350 }; double intSolnV[] = { 2., 1., 1., 1., 1., 1., 1., 1., 2., 1., 1., 1., 2., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1. }; int vecLen = sizeof(intIndicesV) / sizeof(int); intSoln.setVector(vecLen, intIndicesV, intSolnV); expectedNumberColumns = 353; } // seymour1 else if (modelL == "seymour_1") { probType = continuousWith0_1; int intIndicesAt1[] = { 0, 2, 3, 4, 6, 7, 8, 11, 12, 15, 18, 22, 23, 25, 27, 31, 32, 34, 35, 36, 37, 39, 40, 41, 42, 44, 45, 46, 49, 51, 54, 55, 56, 58, 61, 62, 63, 65, 67, 68, 69, 70, 71, 75, 79, 81, 82, 84, 85, 86, 87, 88, 89, 91, 93, 94, 95, 97, 98, 99, 101, 102, 103, 104, 106, 108, 110, 111, 112, 116, 118, 119, 120, 122, 123, 125, 126, 128, 129, 130, 131, 135, 140, 141, 142, 143, 144, 148, 149, 151, 152, 153, 156, 158, 160, 162, 163, 164, 165, 167, 169, 170, 173, 177, 178, 179, 181, 182, 186, 188, 189, 192, 193, 200, 201, 202, 203, 204, 211, 214, 218, 226, 227, 228, 231, 233, 234, 235, 238, 242, 244, 246, 249, 251, 252, 254, 257, 259, 260, 263, 266, 268, 270, 271, 276, 278, 284, 286, 288, 289, 291, 292, 299, 305, 307, 308, 311, 313, 315, 316, 317, 319, 321, 325, 328, 332, 334, 335, 337, 338, 340, 343, 346, 347, 354, 355, 357, 358, 365, 369, 372, 373, 374, 375, 376, 379, 381, 383, 386, 392, 396, 399, 402, 403, 412, 416, 423, 424, 425, 427, 430, 431, 432, 436, 437, 438, 440, 441, 443, 449, 450, 451, 452 }; int numIndices = sizeof(intIndicesAt1) / sizeof(int); intSoln.setConstant(numIndices, intIndicesAt1, 1.0); probType = generalMip; expectedNumberColumns = 1372; } // check to see if the model parameter is // a known problem. if (probType != undefined && si.getNumCols() == expectedNumberColumns) { // Specified model is a known problem numberColumns_ = si.getNumCols(); integerVariable_ = new bool[numberColumns_]; knownSolution_ = new double[numberColumns_]; //CoinFillN(integerVariable_, numberColumns_,0); //CoinFillN(knownSolution_,numberColumns_,0.0); if (probType == pure0_1) { // mark all variables as integer CoinFillN(integerVariable_, numberColumns_, true); // set solution to 0.0 for all not mentioned CoinFillN(knownSolution_, numberColumns_, 0.0); // mark column solution that have value 1 for (i = 0; i < intSoln.getNumElements(); i++) { int col = intSoln.getIndices()[i]; knownSolution_[col] = intSoln.getElements()[i]; assert(knownSolution_[col] == 1.); } } else { // Probtype is continuousWith0_1 or generalMip assert(probType == continuousWith0_1 || probType == generalMip); OsiSolverInterface *siCopy = si.clone(); assert(siCopy->getMatrixByCol()->isEquivalent(*si.getMatrixByCol())); // Loop once for each column looking for integer variables for (i = 0; i < numberColumns_; i++) { // Is the this an integer variable? if (siCopy->isInteger(i)) { // integer variable found integerVariable_[i] = true; // Determine optimal solution value for integer i // from values saved in intSoln and probType. double soln; if (probType == continuousWith0_1) { // Since 0_1 problem, had better be binary assert(siCopy->isBinary(i)); // intSoln only contains integers with optimal value of 1 if (intSoln.isExistingIndex(i)) { soln = 1.0; assert(intSoln[i] == 1.); } else { soln = 0.0; } } else { // intSoln only contains integers with nonzero optimal values if (intSoln.isExistingIndex(i)) { soln = intSoln[i]; assert(intSoln[i] >= 1.); } else { soln = 0.0; } } // Set bounds in copyied problem to fix variable to its solution siCopy->setColUpper(i, soln); siCopy->setColLower(i, soln); } else { // this is not an integer variable integerVariable_[i] = false; } } // All integers have been fixed at optimal value. // Now solve to get continuous values #if 0 assert( siCopy->getNumRows()==5); assert( siCopy->getNumCols()==8); int r,c; for ( r=0; rgetNumRows(); r++ ) { std::cerr <<"rhs[" <rhs())[r] <getNumCols(); c++ ) { std::cerr <<"collower[" <collower())[c] <colupper())[c] <setWarmStart(&allSlack); siCopy->setHintParam(OsiDoScale, false); siCopy->initialSolve(); #if 0 for ( c=0; cgetNumCols(); c++ ) { std::cerr <<"colsol[" <colsol())[c] <getObjValue(),3.2368421052632)); #endif assert(siCopy->isProvenOptimal()); knownValue_ = siCopy->getObjValue(); // Save column solution CoinCopyN(siCopy->getColSolution(), numberColumns_, knownSolution_); delete siCopy; } } else if (printActivationNotice) { if (probType != undefined && si.getNumCols() != expectedNumberColumns) { std::cout << std::endl << " OsiRowCutDebugger::activate: expected " << expectedNumberColumns << " cols but see " << si.getNumCols() << "; cannot activate." << std::endl; } else { std::cout << " OsiRowCutDebugger::activate: unrecognised problem " << model << "; cannot activate." << std::endl; } } //if (integerVariable_!=NULL) si.rowCutDebugger_=this; return (integerVariable_ != NULL); } /* Activate a row cut debugger using a full solution array. It's up to the user to get it correct. Returns true if the debugger is activated. The solution array must be getNumCols() in length, but only the entries for integer variables need to be correct. keepContinuous defaults to false, but in some uses (nonlinear solvers, for example) it's useful to keep the given values, as they reflect constraints that are not present in the linear relaxation. */ bool OsiRowCutDebugger::activate(const OsiSolverInterface &si, const double *solution, bool keepContinuous) { // set true to get a debug message about activation const bool printActivationNotice = false; int i; //get rid of any arrays delete[] integerVariable_; delete[] knownSolution_; OsiSolverInterface *siCopy = si.clone(); numberColumns_ = siCopy->getNumCols(); integerVariable_ = new bool[numberColumns_]; knownSolution_ = new double[numberColumns_]; /* Fix the integer variables from the supplied solution (making sure that the values are integer). */ for (i = 0; i < numberColumns_; i++) { if (siCopy->isInteger(i)) { integerVariable_[i] = true; double soln = floor(solution[i] + 0.5); siCopy->setColUpper(i, soln); siCopy->setColLower(i, soln); } else { integerVariable_[i] = false; } } /* Solve the lp relaxation, then cache the primal solution and objective. If we're preserving the values of the given continuous variables, we can't trust the solver's calculation of the objective; it may well be using different values for the continuous variables. */ siCopy->setHintParam(OsiDoScale, false); //siCopy->writeMps("bad.mps") ; siCopy->initialSolve(); if (keepContinuous == false) { if (siCopy->isProvenOptimal()) { CoinCopyN(siCopy->getColSolution(), numberColumns_, knownSolution_); knownValue_ = siCopy->getObjValue(); if (printActivationNotice) { std::cout << std::endl << "OsiRowCutDebugger::activate: activated (opt), z = " << knownValue_ << std::endl; } } else { if (printActivationNotice) { std::cout << std::endl << "OsiRowCutDebugger::activate: solution was not optimal; " << "cannot activate." << std::endl; } delete[] integerVariable_; delete[] knownSolution_; integerVariable_ = NULL; knownSolution_ = NULL; knownValue_ = COIN_DBL_MAX; } } else { CoinCopyN(solution, numberColumns_, knownSolution_); const double *c = siCopy->getObjCoefficients(); knownValue_ = 0.0; for (int j = 0; j < numberColumns_; j++) { knownValue_ += c[j] * solution[j]; } knownValue_ = knownValue_ * siCopy->getObjSense(); if (printActivationNotice) { std::cout << std::endl << "OsiRowCutDebugger::activate: activated, z = " << knownValue_ << std::endl; } } delete siCopy; return (integerVariable_ != NULL); } //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiRowCutDebugger::OsiRowCutDebugger() : knownValue_(COIN_DBL_MAX) , numberColumns_(0) , integerVariable_(NULL) , knownSolution_(NULL) { // nothing to do here } //------------------------------------------------------------------- // Alternate Constructor with model name //------------------------------------------------------------------- // Constructor with name of model OsiRowCutDebugger::OsiRowCutDebugger( const OsiSolverInterface &si, const char *model) : knownValue_(COIN_DBL_MAX) , numberColumns_(0) , integerVariable_(NULL) , knownSolution_(NULL) { activate(si, model); } // Constructor with full solution (only integers need be correct) OsiRowCutDebugger::OsiRowCutDebugger(const OsiSolverInterface &si, const double *solution, bool enforceOptimality) : knownValue_(COIN_DBL_MAX) , numberColumns_(0) , integerVariable_(NULL) , knownSolution_(NULL) { activate(si, solution, enforceOptimality); } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiRowCutDebugger::OsiRowCutDebugger(const OsiRowCutDebugger &source) : knownValue_(COIN_DBL_MAX) , numberColumns_(0) , integerVariable_(NULL) , knownSolution_(NULL) { // copy if (source.active()) { assert(source.integerVariable_ != NULL); assert(source.knownSolution_ != NULL); knownValue_ = source.knownValue_; numberColumns_ = source.numberColumns_; integerVariable_ = new bool[numberColumns_]; knownSolution_ = new double[numberColumns_]; CoinCopyN(source.integerVariable_, numberColumns_, integerVariable_); CoinCopyN(source.knownSolution_, numberColumns_, knownSolution_); } } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiRowCutDebugger::~OsiRowCutDebugger() { // free memory delete[] integerVariable_; delete[] knownSolution_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiRowCutDebugger & OsiRowCutDebugger::operator=(const OsiRowCutDebugger &rhs) { if (this != &rhs) { delete[] integerVariable_; delete[] knownSolution_; knownValue_ = COIN_DBL_MAX; // copy if (rhs.active()) { assert(rhs.integerVariable_ != NULL); assert(rhs.knownSolution_ != NULL); knownValue_ = rhs.knownValue_; numberColumns_ = rhs.numberColumns_; integerVariable_ = new bool[numberColumns_]; knownSolution_ = new double[numberColumns_]; CoinCopyN(rhs.integerVariable_, numberColumns_, integerVariable_); CoinCopyN(rhs.knownSolution_, numberColumns_, knownSolution_); } } return *this; } /* Edit a solution after column changes (typically column deletion and/or transposition due to preprocessing). Given an array which translates current column indices to original column indices, shrink the solution to match. The transform is irreversible (in the sense that the debugger doesn't keep a record of the changes). */ void OsiRowCutDebugger::redoSolution(int numberColumns, const int *originalColumns) { const bool printRecalcMessage = false; assert(numberColumns <= numberColumns_); if (numberColumns < numberColumns_) { char *mark = new char[numberColumns_]; memset(mark, 0, numberColumns_); int i; for (i = 0; i < numberColumns; i++) mark[originalColumns[i]] = 1; numberColumns = 0; for (i = 0; i < numberColumns_; i++) { if (mark[i]) { integerVariable_[numberColumns] = integerVariable_[i]; knownSolution_[numberColumns++] = knownSolution_[i]; } } delete[] mark; numberColumns_ = numberColumns; if (printRecalcMessage) { #if 0 FILE * fp = fopen("xx.xx","wb"); assert (fp); fwrite(&numberColumns,sizeof(int),1,fp); fwrite(knownSolution_,sizeof(double),numberColumns,fp); fclose(fp); exit(0); #endif printf("debug solution - recalculated\n"); } } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiColCut.cpp0000644000175200017520000000676113414504051015505 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "OsiColCut.hpp" #include #include #include //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiColCut::OsiColCut() : OsiCut() , lbs_() , ubs_() { // nothing to do here } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiColCut::OsiColCut(const OsiColCut &source) : OsiCut(source) , lbs_(source.lbs_) , ubs_(source.ubs_) { // Nothing to do here } //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiColCut *OsiColCut::clone() const { return (new OsiColCut(*this)); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiColCut::~OsiColCut() { // Nothing to do here } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiColCut & OsiColCut::operator=(const OsiColCut &rhs) { if (this != &rhs) { OsiCut::operator=(rhs); lbs_ = rhs.lbs_; ubs_ = rhs.ubs_; } return *this; } //---------------------------------------------------------------- // Print //------------------------------------------------------------------- void OsiColCut::print() const { const CoinPackedVector &cutLbs = lbs(); const CoinPackedVector &cutUbs = ubs(); int i; std::cout << "Column cut has " << cutLbs.getNumElements() << " lower bound cuts and " << cutUbs.getNumElements() << " upper bound cuts" << std::endl; for (i = 0; i < cutLbs.getNumElements(); i++) { int colIndx = cutLbs.getIndices()[i]; double newLb = cutLbs.getElements()[i]; std::cout << "[ x" << colIndx << " >= " << newLb << "] "; } for (i = 0; i < cutUbs.getNumElements(); i++) { int colIndx = cutUbs.getIndices()[i]; double newUb = cutUbs.getElements()[i]; std::cout << "[ x" << colIndx << " <= " << newUb << "] "; } std::cout << std::endl; } /* Returns infeasibility of the cut with respect to solution passed in i.e. is positive if cuts off that solution. solution is getNumCols() long.. */ double OsiColCut::violated(const double *solution) const { const CoinPackedVector &cutLbs = lbs(); const CoinPackedVector &cutUbs = ubs(); double sum = 0.0; int i; const int *column = cutLbs.getIndices(); int number = cutLbs.getNumElements(); const double *bound = cutLbs.getElements(); for (i = 0; i < number; i++) { int colIndx = column[i]; double newLb = bound[i]; if (newLb > solution[colIndx]) sum += newLb - solution[colIndx]; } column = cutUbs.getIndices(); number = cutUbs.getNumElements(); bound = cutUbs.getElements(); for (i = 0; i < number; i++) { int colIndx = column[i]; double newUb = bound[i]; if (newUb < solution[colIndx]) sum += solution[colIndx] - newUb; } return sum; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiChooseVariable.hpp0000644000175200017520000004606713414504051017212 0ustar coincoin// Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiChooseVariable_H #define OsiChooseVariable_H #include #include #include "CoinWarmStartBasis.hpp" #include "OsiBranchingObject.hpp" class OsiSolverInterface; class OsiHotInfo; /** This class chooses a variable to branch on The base class just chooses the variable and direction without strong branching but it has information which would normally be used by strong branching e.g. to re-enter having fixed a variable but using same candidates for strong branching. The flow is : a) initialize the process. This decides on strong branching list and stores indices of all infeasible objects b) do strong branching on list. If list is empty then just choose one candidate and return without strong branching. If not empty then go through list and return best. However we may find that the node is infeasible or that we can fix a variable. If so we return and it is up to user to call again (after fixing a variable). */ class OsiChooseVariable { public: /// Default Constructor OsiChooseVariable(); /// Constructor from solver (so we can set up arrays etc) OsiChooseVariable(const OsiSolverInterface *solver); /// Copy constructor OsiChooseVariable(const OsiChooseVariable &); /// Assignment operator OsiChooseVariable &operator=(const OsiChooseVariable &rhs); /// Clone virtual OsiChooseVariable *clone() const; /// Destructor virtual ~OsiChooseVariable(); /** Sets up strong list and clears all if initialize is true. Returns number of infeasibilities. If returns -1 then has worked out node is infeasible! */ virtual int setupList(OsiBranchingInformation *info, bool initialize); /** Choose a variable Returns - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates We can pick up branch from bestObjectIndex() and bestWhichWay() We can pick up a forced branch (can change bound) from firstForcedObjectIndex() and firstForcedWhichWay() If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() If fixVariables is true then 2,3,4 are all really same as problem changed */ virtual int chooseVariable(OsiSolverInterface *solver, OsiBranchingInformation *info, bool fixVariables); /// Returns true if solution looks feasible against given objects virtual bool feasibleSolution(const OsiBranchingInformation *info, const double *solution, int numberObjects, const OsiObject **objects); /// Saves a good solution void saveSolution(const OsiSolverInterface *solver); /// Clears out good solution after use void clearGoodSolution(); /// Given a candidate fill in useful information e.g. estimates virtual void updateInformation(const OsiBranchingInformation *info, int branch, OsiHotInfo *hotInfo); #if 1 /// Given a branch fill in useful information e.g. estimates virtual void updateInformation(int whichObject, int branch, double changeInObjective, double changeInValue, int status); #endif /// Objective value for feasible solution inline double goodObjectiveValue() const { return goodObjectiveValue_; } /// Estimate of up change or change on chosen if n-way inline double upChange() const { return upChange_; } /// Estimate of down change or max change on other possibilities if n-way inline double downChange() const { return downChange_; } /// Good solution - deleted by finalize inline const double *goodSolution() const { return goodSolution_; } /// Index of chosen object inline int bestObjectIndex() const { return bestObjectIndex_; } /// Set index of chosen object inline void setBestObjectIndex(int value) { bestObjectIndex_ = value; } /// Preferred way of chosen object inline int bestWhichWay() const { return bestWhichWay_; } /// Set preferred way of chosen object inline void setBestWhichWay(int value) { bestWhichWay_ = value; } /// Index of forced object inline int firstForcedObjectIndex() const { return firstForcedObjectIndex_; } /// Set index of forced object inline void setFirstForcedObjectIndex(int value) { firstForcedObjectIndex_ = value; } /// Preferred way of forced object inline int firstForcedWhichWay() const { return firstForcedWhichWay_; } /// Set preferred way of forced object inline void setFirstForcedWhichWay(int value) { firstForcedWhichWay_ = value; } /// Get the number of objects unsatisfied at this node - accurate on first pass inline int numberUnsatisfied() const { return numberUnsatisfied_; } /// Number of objects to choose for strong branching inline int numberStrong() const { return numberStrong_; } /// Set number of objects to choose for strong branching inline void setNumberStrong(int value) { numberStrong_ = value; } /// Number left on strong list inline int numberOnList() const { return numberOnList_; } /// Number of strong branches actually done inline int numberStrongDone() const { return numberStrongDone_; } /// Number of strong iterations actually done inline int numberStrongIterations() const { return numberStrongIterations_; } /// Number of strong branches which changed bounds inline int numberStrongFixed() const { return numberStrongFixed_; } /// List of candidates inline const int *candidates() const { return list_; } /// Trust results from strong branching for changing bounds inline bool trustStrongForBound() const { return trustStrongForBound_; } /// Set trust results from strong branching for changing bounds inline void setTrustStrongForBound(bool yesNo) { trustStrongForBound_ = yesNo; } /// Trust results from strong branching for valid solution inline bool trustStrongForSolution() const { return trustStrongForSolution_; } /// Set trust results from strong branching for valid solution inline void setTrustStrongForSolution(bool yesNo) { trustStrongForSolution_ = yesNo; } /// Set solver and redo arrays void setSolver(const OsiSolverInterface *solver); /** Return status - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates We can pick up branch from bestObjectIndex() and bestWhichWay() We can pick up a forced branch (can change bound) from firstForcedObjectIndex() and firstForcedWhichWay() If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() */ inline int status() const { return status_; } inline void setStatus(int value) { status_ = value; } protected: // Data /// Objective value for feasible solution double goodObjectiveValue_; /// Estimate of up change or change on chosen if n-way double upChange_; /// Estimate of down change or max change on other possibilities if n-way double downChange_; /// Good solution - deleted by finalize double *goodSolution_; /// List of candidates int *list_; /// Useful array (for sorting etc) double *useful_; /// Pointer to solver const OsiSolverInterface *solver_; /* Status - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates */ int status_; /// Index of chosen object int bestObjectIndex_; /// Preferred way of chosen object int bestWhichWay_; /// Index of forced object int firstForcedObjectIndex_; /// Preferred way of forced object int firstForcedWhichWay_; /// The number of objects unsatisfied at this node. int numberUnsatisfied_; /// Number of objects to choose for strong branching int numberStrong_; /// Number left on strong list int numberOnList_; /// Number of strong branches actually done int numberStrongDone_; /// Number of strong iterations actually done int numberStrongIterations_; /// Number of bound changes due to strong branching int numberStrongFixed_; /// List of unsatisfied objects - first numberOnList_ for strong branching /// Trust results from strong branching for changing bounds bool trustStrongForBound_; /// Trust results from strong branching for valid solution bool trustStrongForSolution_; }; /** This class is the placeholder for the pseudocosts used by OsiChooseStrong. It can also be used by any other pseudocost based strong branching algorithm. */ class OsiPseudoCosts { protected: // Data /// Total of all changes up double *upTotalChange_; /// Total of all changes down double *downTotalChange_; /// Number of times up int *upNumber_; /// Number of times down int *downNumber_; /// Number of objects (could be found from solver) int numberObjects_; /// Number before we trust int numberBeforeTrusted_; private: void gutsOfDelete(); void gutsOfCopy(const OsiPseudoCosts &rhs); public: OsiPseudoCosts(); virtual ~OsiPseudoCosts(); OsiPseudoCosts(const OsiPseudoCosts &rhs); OsiPseudoCosts &operator=(const OsiPseudoCosts &rhs); /// Number of times before trusted inline int numberBeforeTrusted() const { return numberBeforeTrusted_; } /// Set number of times before trusted inline void setNumberBeforeTrusted(int value) { numberBeforeTrusted_ = value; } /// Initialize the pseudocosts with n entries void initialize(int n); /// Give the number of objects for which pseudo costs are stored inline int numberObjects() const { return numberObjects_; } /** @name Accessor methods to pseudo costs data */ //@{ inline double *upTotalChange() { return upTotalChange_; } inline const double *upTotalChange() const { return upTotalChange_; } inline double *downTotalChange() { return downTotalChange_; } inline const double *downTotalChange() const { return downTotalChange_; } inline int *upNumber() { return upNumber_; } inline const int *upNumber() const { return upNumber_; } inline int *downNumber() { return downNumber_; } inline const int *downNumber() const { return downNumber_; } //@} /// Given a candidate fill in useful information e.g. estimates virtual void updateInformation(const OsiBranchingInformation *info, int branch, OsiHotInfo *hotInfo); #if 1 /// Given a branch fill in useful information e.g. estimates virtual void updateInformation(int whichObject, int branch, double changeInObjective, double changeInValue, int status); #endif }; /** This class chooses a variable to branch on This chooses the variable and direction with reliability strong branching. The flow is : a) initialize the process. This decides on strong branching list and stores indices of all infeasible objects b) do strong branching on list. If list is empty then just choose one candidate and return without strong branching. If not empty then go through list and return best. However we may find that the node is infeasible or that we can fix a variable. If so we return and it is up to user to call again (after fixing a variable). */ class OsiChooseStrong : public OsiChooseVariable { public: /// Default Constructor OsiChooseStrong(); /// Constructor from solver (so we can set up arrays etc) OsiChooseStrong(const OsiSolverInterface *solver); /// Copy constructor OsiChooseStrong(const OsiChooseStrong &); /// Assignment operator OsiChooseStrong &operator=(const OsiChooseStrong &rhs); /// Clone virtual OsiChooseVariable *clone() const; /// Destructor virtual ~OsiChooseStrong(); /** Sets up strong list and clears all if initialize is true. Returns number of infeasibilities. If returns -1 then has worked out node is infeasible! */ virtual int setupList(OsiBranchingInformation *info, bool initialize); /** Choose a variable Returns - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All looks satisfied - no candidate 2 We can change the bound on a variable - but we also have a strong branching candidate 3 We can change the bound on a variable - but we have a non-strong branching candidate 4 We can change the bound on a variable - no other candidates We can pick up branch from bestObjectIndex() and bestWhichWay() We can pick up a forced branch (can change bound) from firstForcedObjectIndex() and firstForcedWhichWay() If we have a solution then we can pick up from goodObjectiveValue() and goodSolution() If fixVariables is true then 2,3,4 are all really same as problem changed */ virtual int chooseVariable(OsiSolverInterface *solver, OsiBranchingInformation *info, bool fixVariables); /** Pseudo Shadow Price mode 0 - off 1 - use if no strong info 2 - use if strong not trusted 3 - use even if trusted */ inline int shadowPriceMode() const { return shadowPriceMode_; } /// Set Shadow price mode inline void setShadowPriceMode(int value) { shadowPriceMode_ = value; } /** Accessor method to pseudo cost object*/ const OsiPseudoCosts &pseudoCosts() const { return pseudoCosts_; } /** Accessor method to pseudo cost object*/ OsiPseudoCosts &pseudoCosts() { return pseudoCosts_; } /** A feww pass-through methods to access members of pseudoCosts_ as if they were members of OsiChooseStrong object */ inline int numberBeforeTrusted() const { return pseudoCosts_.numberBeforeTrusted(); } inline void setNumberBeforeTrusted(int value) { pseudoCosts_.setNumberBeforeTrusted(value); } inline int numberObjects() const { return pseudoCosts_.numberObjects(); } protected: /** This is a utility function which does strong branching on a list of objects and stores the results in OsiHotInfo.objects. On entry the object sequence is stored in the OsiHotInfo object and maybe more. It returns - -1 - one branch was infeasible both ways 0 - all inspected - nothing can be fixed 1 - all inspected - some can be fixed (returnCriterion==0) 2 - may be returning early - one can be fixed (last one done) (returnCriterion==1) 3 - returning because max time */ int doStrongBranching(OsiSolverInterface *solver, OsiBranchingInformation *info, int numberToDo, int returnCriterion); /** Clear out the results array */ void resetResults(int num); protected: /** Pseudo Shadow Price mode 0 - off 1 - use and multiply by strong info 2 - use */ int shadowPriceMode_; /** The pseudo costs for the chooser */ OsiPseudoCosts pseudoCosts_; /** The results of the strong branching done on the candidates where the pseudocosts were not sufficient */ OsiHotInfo *results_; /** The number of OsiHotInfo objetcs that contain information */ int numResults_; }; /** This class contains the result of strong branching on a variable When created it stores enough information for strong branching */ class OsiHotInfo { public: /// Default Constructor OsiHotInfo(); /// Constructor from useful information OsiHotInfo(OsiSolverInterface *solver, const OsiBranchingInformation *info, const OsiObject *const *objects, int whichObject); /// Copy constructor OsiHotInfo(const OsiHotInfo &); /// Assignment operator OsiHotInfo &operator=(const OsiHotInfo &rhs); /// Clone virtual OsiHotInfo *clone() const; /// Destructor virtual ~OsiHotInfo(); /** Fill in useful information after strong branch. Return status */ int updateInformation(const OsiSolverInterface *solver, const OsiBranchingInformation *info, OsiChooseVariable *choose); /// Original objective value inline double originalObjectiveValue() const { return originalObjectiveValue_; } /// Up change - invalid if n-way inline double upChange() const { assert(branchingObject_->numberBranches() == 2); return changes_[1]; } /// Down change - invalid if n-way inline double downChange() const { assert(branchingObject_->numberBranches() == 2); return changes_[0]; } /// Set up change - invalid if n-way inline void setUpChange(double value) { assert(branchingObject_->numberBranches() == 2); changes_[1] = value; } /// Set down change - invalid if n-way inline void setDownChange(double value) { assert(branchingObject_->numberBranches() == 2); changes_[0] = value; } /// Change on way k inline double change(int k) const { return changes_[k]; } /// Up iteration count - invalid if n-way inline int upIterationCount() const { assert(branchingObject_->numberBranches() == 2); return iterationCounts_[1]; } /// Down iteration count - invalid if n-way inline int downIterationCount() const { assert(branchingObject_->numberBranches() == 2); return iterationCounts_[0]; } /// Iteration count on way k inline int iterationCount(int k) const { return iterationCounts_[k]; } /// Up status - invalid if n-way inline int upStatus() const { assert(branchingObject_->numberBranches() == 2); return statuses_[1]; } /// Down status - invalid if n-way inline int downStatus() const { assert(branchingObject_->numberBranches() == 2); return statuses_[0]; } /// Set up status - invalid if n-way inline void setUpStatus(int value) { assert(branchingObject_->numberBranches() == 2); statuses_[1] = value; } /// Set down status - invalid if n-way inline void setDownStatus(int value) { assert(branchingObject_->numberBranches() == 2); statuses_[0] = value; } /// Status on way k inline int status(int k) const { return statuses_[k]; } /// Branching object inline OsiBranchingObject *branchingObject() const { return branchingObject_; } inline int whichObject() const { return whichObject_; } protected: // Data /// Original objective value double originalObjectiveValue_; /// Objective changes double *changes_; /// Iteration counts int *iterationCounts_; /** Status -1 - not done 0 - feasible and finished 1 - infeasible 2 - not finished */ int *statuses_; /// Branching object OsiBranchingObject *branchingObject_; /// Which object on list int whichObject_; }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiCut.cpp0000644000175200017520000000351313414504051015037 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include "OsiCut.hpp" //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiCut::OsiCut() : effectiveness_(0.) , globallyValid_(0) //timesUsed_(0), //timesTested_(0) { // nothing to do here } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiCut::OsiCut( const OsiCut &source) : effectiveness_(source.effectiveness_) , globallyValid_(source.globallyValid_) //timesUsed_(source.timesUsed_), //timesTested_(source.timesTested_) { // nothing to do here } #if 0 //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiCut * OsiCut::clone() const { return (new OsiCut(*this));} #endif //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiCut::~OsiCut() { // nothing to do here } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiCut & OsiCut::operator=(const OsiCut &rhs) { if (this != &rhs) { effectiveness_ = rhs.effectiveness_; globallyValid_ = rhs.globallyValid_; //timesUsed_=rhs.timesUsed_; //timesTested_=rhs.timesTested_; } return *this; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiSolverBranch.hpp0000644000175200017520000000773213414504051016710 0ustar coincoin// Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiSolverBranch_H #define OsiSolverBranch_H class OsiSolverInterface; #include "CoinWarmStartBasis.hpp" //############################################################################# /** Solver Branch Class This provides information on a branch as a set of tighter bounds on both ways */ class OsiSolverBranch { public: ///@name Add and Get methods //@{ /// Add a simple branch (i.e. first sets ub of floor(value), second lb of ceil(value)) void addBranch(int iColumn, double value); /// Add bounds - way =-1 is first , +1 is second void addBranch(int way, int numberTighterLower, const int *whichLower, const double *newLower, int numberTighterUpper, const int *whichUpper, const double *newUpper); /// Add bounds - way =-1 is first , +1 is second void addBranch(int way, int numberColumns, const double *oldLower, const double *newLower, const double *oldUpper, const double *newUpper); /// Apply bounds void applyBounds(OsiSolverInterface &solver, int way) const; /// Returns true if current solution satsifies one side of branch bool feasibleOneWay(const OsiSolverInterface &solver) const; /// Starts inline const int *starts() const { return start_; } /// Which variables inline const int *which() const { return indices_; } /// Bounds inline const double *bounds() const { return bound_; } //@} ///@name Constructors and destructors //@{ /// Default Constructor OsiSolverBranch(); /// Copy constructor OsiSolverBranch(const OsiSolverBranch &rhs); /// Assignment operator OsiSolverBranch &operator=(const OsiSolverBranch &rhs); /// Destructor ~OsiSolverBranch(); //@} private: ///@name Private member data //@{ /// Start of lower first, upper first, lower second, upper second int start_[5]; /// Column numbers (if >= numberColumns treat as rows) int *indices_; /// New bounds double *bound_; //@} }; //############################################################################# /** Solver Result Class This provides information on a result as a set of tighter bounds on both ways */ class OsiSolverResult { public: ///@name Add and Get methods //@{ /// Create result void createResult(const OsiSolverInterface &solver, const double *lowerBefore, const double *upperBefore); /// Restore result void restoreResult(OsiSolverInterface &solver) const; /// Get basis inline const CoinWarmStartBasis &basis() const { return basis_; } /// Objective value (as minimization) inline double objectiveValue() const { return objectiveValue_; } /// Primal solution inline const double *primalSolution() const { return primalSolution_; } /// Dual solution inline const double *dualSolution() const { return dualSolution_; } /// Extra fixed inline const OsiSolverBranch &fixed() const { return fixed_; } //@} ///@name Constructors and destructors //@{ /// Default Constructor OsiSolverResult(); /// Constructor from solver OsiSolverResult(const OsiSolverInterface &solver, const double *lowerBefore, const double *upperBefore); /// Copy constructor OsiSolverResult(const OsiSolverResult &rhs); /// Assignment operator OsiSolverResult &operator=(const OsiSolverResult &rhs); /// Destructor ~OsiSolverResult(); //@} private: ///@name Private member data //@{ /// Value of objective (if >= OsiSolverInterface::getInfinity() then infeasible) double objectiveValue_; /// Warm start information CoinWarmStartBasis basis_; /// Primal solution (numberColumns) double *primalSolution_; /// Dual solution (numberRows) double *dualSolution_; /// Which extra variables have been fixed (only way==-1 counts) OsiSolverBranch fixed_; //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiRowCutDebugger.hpp0000644000175200017520000001375513414504051017212 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiRowCutDebugger_H #define OsiRowCutDebugger_H /*! \file OsiRowCutDebugger.hpp \brief Provides a facility to validate cut constraints to ensure that they do not cut off a given solution. */ #include #include "OsiCuts.hpp" #include "OsiSolverInterface.hpp" /*! \brief Validate cuts against a known solution OsiRowCutDebugger provides a facility for validating cuts against a known solution for a problem. The debugger knows an optimal solution for many of the miplib3 problems. Check the source for #activate(const OsiSolverInterface&,const char*) in OsiRowCutDebugger.cpp for the full set of known problems. A full solution vector can be supplied as a parameter with (#activate(const OsiSolverInterface&,const double*,bool)). Only the integer values need to be valid. The default behaviour is to solve an lp relaxation with the integer variables fixed to the specified values and use the optimal solution to fill in the continuous variables in the solution. The debugger can be instructed to preserve the continuous variables (useful when debugging solvers where the linear relaxation doesn't capture all the constraints). Note that the solution must match the problem held in the solver interface. If you want to use the row cut debugger on a problem after applying presolve transformations, your solution must match the presolved problem. (But see #redoSolution().) */ class OsiRowCutDebugger { friend void OsiRowCutDebuggerUnitTest(const OsiSolverInterface *siP, const std::string &mpsDir); public: /*! @name Validate Row Cuts Check that the specified cuts do not cut off the known solution. */ //@{ /*! \brief Check that the set of cuts does not cut off the solution known to the debugger. Check if any generated cuts cut off the solution known to the debugger! If so then print offending cuts. Return the number of invalid cuts. */ virtual int validateCuts(const OsiCuts &cs, int first, int last) const; /*! \brief Check that the cut does not cut off the solution known to the debugger. Return true if cut is invalid */ virtual bool invalidCut(const OsiRowCut &rowcut) const; /*! \brief Returns true if the solution held in the solver is compatible with the known solution. More specifically, returns true if the known solution satisfies the column bounds held in the solver. */ bool onOptimalPath(const OsiSolverInterface &si) const; //@} /*! @name Activate the Debugger The debugger is considered to be active when it holds a known solution. */ //@{ /*! \brief Activate a debugger using the name of a problem. The debugger knows an optimal solution for most of miplib3. Check the source code for the full list. Returns true if the debugger is successfully activated. */ bool activate(const OsiSolverInterface &si, const char *model); /*! \brief Activate a debugger using a full solution array. The solution must have one entry for every variable, but only the entries for integer values are used. By default the debugger will solve an lp relaxation with the integer variables fixed and fill in values for the continuous variables from this solution. If the debugger should preserve the given values for the continuous variables, set \p keepContinuous to \c true. Returns true if debugger activates successfully. */ bool activate(const OsiSolverInterface &si, const double *solution, bool keepContinuous = false); /// Returns true if the debugger is active bool active() const; //@} /*! @name Query or Manipulate the Known Solution */ //@{ /// Return the known solution inline const double *optimalSolution() const { return knownSolution_; } /// Return the number of columns in the known solution inline int numberColumns() const { return (numberColumns_); } /// Return the value of the objective for the known solution inline double optimalValue() const { return knownValue_; } /*! \brief Edit the known solution to reflect column changes Given a translation array \p originalColumns[numberColumns] which can translate current column indices to original column indices, this method will edit the solution held in the debugger so that it matches the current set of columns. Useful when the original problem is preprocessed prior to cut generation. The debugger does keep a record of the changes. */ void redoSolution(int numberColumns, const int *originalColumns); /// Print optimal solution (returns -1 bad debug, 0 on optimal, 1 not) int printOptimalSolution(const OsiSolverInterface &si) const; //@} /**@name Constructors and Destructors */ //@{ /// Default constructor - no checking OsiRowCutDebugger(); /*! \brief Constructor with name of model. See #activate(const OsiSolverInterface&,const char*). */ OsiRowCutDebugger(const OsiSolverInterface &si, const char *model); /*! \brief Constructor with full solution. See #activate(const OsiSolverInterface&,const double*,bool). */ OsiRowCutDebugger(const OsiSolverInterface &si, const double *solution, bool enforceOptimality = false); /// Copy constructor OsiRowCutDebugger(const OsiRowCutDebugger &); /// Assignment operator OsiRowCutDebugger &operator=(const OsiRowCutDebugger &rhs); /// Destructor virtual ~OsiRowCutDebugger(); //@} private: // Private member data /**@name Private member data */ //@{ /// Value of known solution double knownValue_; /*! \brief Number of columns in known solution This must match the number of columns reported by the solver. */ int numberColumns_; /// array specifying integer variables bool *integerVariable_; /// array specifying known solution double *knownSolution_; //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiColCut.hpp0000644000175200017520000002011013414504051015472 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiColCut_H #define OsiColCut_H #include #include "CoinPackedVector.hpp" #include "OsiCollections.hpp" #include "OsiCut.hpp" /** Column Cut Class Column Cut Class has:
  • a sparse vector of column lower bounds
  • a sparse vector of column upper bounds
*/ class OsiColCut : public OsiCut { friend void OsiColCutUnitTest(const OsiSolverInterface *baseSiP, const std::string &mpsDir); public: //---------------------------------------------------------------- /**@name Setting column bounds */ //@{ /// Set column lower bounds inline void setLbs( int nElements, const int *colIndices, const double *lbElements); /// Set column lower bounds from a packed vector inline void setLbs(const CoinPackedVector &lbs); /// Set column upper bounds inline void setUbs( int nElements, const int *colIndices, const double *ubElements); /// Set column upper bounds from a packed vector inline void setUbs(const CoinPackedVector &ubs); //@} //---------------------------------------------------------------- /**@name Getting column bounds */ //@{ /// Get column lower bounds inline const CoinPackedVector &lbs() const; /// Get column upper bounds inline const CoinPackedVector &ubs() const; //@} /**@name Comparison operators */ //@{ #if __GNUC__ != 2 using OsiCut::operator==; #endif /** equal - true if lower bounds, upper bounds, and OsiCut are equal. */ inline virtual bool operator==(const OsiColCut &rhs) const; #if __GNUC__ != 2 using OsiCut::operator!=; #endif /// not equal inline virtual bool operator!=(const OsiColCut &rhs) const; //@} //---------------------------------------------------------------- /**@name Sanity checks on cut */ //@{ /** Returns true if the cut is consistent with respect to itself. This checks to ensure that:
  • The bound vectors do not have duplicate indices,
  • The bound vectors indices are >=0
*/ inline virtual bool consistent() const; /** Returns true if cut is consistent with respect to the solver interface's model. This checks to ensure that the lower & upperbound packed vectors:
  • do not have an index >= the number of column is the model.
*/ inline virtual bool consistent(const OsiSolverInterface &im) const; /** Returns true if the cut is infeasible with respect to its bounds and the column bounds in the solver interface's models. This checks whether:
  • the maximum of the new and existing lower bounds is strictly greater than the minimum of the new and existing upper bounds.
*/ inline virtual bool infeasible(const OsiSolverInterface &im) const; /** Returns infeasibility of the cut with respect to solution passed in i.e. is positive if cuts off that solution. solution is getNumCols() long.. */ virtual double violated(const double *solution) const; //@} //---------------------------------------------------------------- /**@name Constructors and destructors */ //@{ /// Assignment operator OsiColCut &operator=(const OsiColCut &rhs); /// Copy constructor OsiColCut(const OsiColCut &); /// Default Constructor OsiColCut(); /// Clone virtual OsiColCut *clone() const; /// Destructor virtual ~OsiColCut(); //@} /**@name Debug stuff */ //@{ /// Print cuts in collection virtual void print() const; //@} private: /**@name Private member data */ //@{ /// Lower bounds CoinPackedVector lbs_; /// Upper bounds CoinPackedVector ubs_; //@} }; //------------------------------------------------------------------- // Set lower & upper bound vectors //------------------------------------------------------------------- void OsiColCut::setLbs( int size, const int *colIndices, const double *lbElements) { lbs_.setVector(size, colIndices, lbElements); } // void OsiColCut::setUbs( int size, const int *colIndices, const double *ubElements) { ubs_.setVector(size, colIndices, ubElements); } // void OsiColCut::setLbs(const CoinPackedVector &lbs) { lbs_ = lbs; } // void OsiColCut::setUbs(const CoinPackedVector &ubs) { ubs_ = ubs; } //------------------------------------------------------------------- // Get Column Lower Bounds and Column Upper Bounds //------------------------------------------------------------------- const CoinPackedVector &OsiColCut::lbs() const { return lbs_; } // const CoinPackedVector &OsiColCut::ubs() const { return ubs_; } //---------------------------------------------------------------- // == operator //------------------------------------------------------------------- bool OsiColCut::operator==( const OsiColCut &rhs) const { if (this->OsiCut::operator!=(rhs)) return false; if (lbs() != rhs.lbs()) return false; if (ubs() != rhs.ubs()) return false; return true; } // bool OsiColCut::operator!=( const OsiColCut &rhs) const { return !((*this) == rhs); } //---------------------------------------------------------------- // consistent & infeasible //------------------------------------------------------------------- bool OsiColCut::consistent() const { const CoinPackedVector &lb = lbs(); const CoinPackedVector &ub = ubs(); // Test for consistent cut. // Are packed vectors consistent? lb.duplicateIndex("consistent", "OsiColCut"); ub.duplicateIndex("consistent", "OsiColCut"); if (lb.getMinIndex() < 0) return false; if (ub.getMinIndex() < 0) return false; return true; } // bool OsiColCut::consistent(const OsiSolverInterface &im) const { const CoinPackedVector &lb = lbs(); const CoinPackedVector &ub = ubs(); // Test for consistent cut. if (lb.getMaxIndex() >= im.getNumCols()) return false; if (ub.getMaxIndex() >= im.getNumCols()) return false; return true; } #if 0 bool OsiColCut::feasible(const OsiSolverInterface &im) const { const double * oldColLb = im.getColLower(); const double * oldColUb = im.getColUpper(); const CoinPackedVector & cutLbs = lbs(); const CoinPackedVector & cutUbs = ubs(); int i; for ( i=0; i oldColLb[colIndx] ) newLb = cutLbs.elements()[i]; else newLb = oldColLb[colIndx]; double newUb = oldColUb[colIndx]; if ( cutUbs.indexExists(colIndx) ) if ( cutUbs[colIndx] < newUb ) newUb = cutUbs[colIndx]; if ( newLb > newUb ) return false; } for ( i=0; i newLb ) newLb = cutLbs[colIndx]; if ( newUb < newLb ) return false; } return true; } #endif bool OsiColCut::infeasible(const OsiSolverInterface &im) const { const double *oldColLb = im.getColLower(); const double *oldColUb = im.getColUpper(); const CoinPackedVector &cutLbs = lbs(); const CoinPackedVector &cutUbs = ubs(); int i; for (i = 0; i < cutLbs.getNumElements(); i++) { int colIndx = cutLbs.getIndices()[i]; double newLb = cutLbs.getElements()[i] > oldColLb[colIndx] ? cutLbs.getElements()[i] : oldColLb[colIndx]; double newUb = oldColUb[colIndx]; if (cutUbs.isExistingIndex(colIndx)) if (cutUbs[colIndx] < newUb) newUb = cutUbs[colIndx]; if (newLb > newUb) return true; } for (i = 0; i < cutUbs.getNumElements(); i++) { int colIndx = cutUbs.getIndices()[i]; double newUb = cutUbs.getElements()[i] < oldColUb[colIndx] ? cutUbs.getElements()[i] : oldColUb[colIndx]; double newLb = oldColLb[colIndx]; if (cutLbs.isExistingIndex(colIndx)) if (cutLbs[colIndx] > newLb) newLb = cutLbs[colIndx]; if (newUb < newLb) return true; } return false; } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiPresolve.cpp0000644000175200017520000014632613414504051016115 0ustar coincoin// Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). /* Debug compile symbols for CoinPresolve. PRESOLVE_CONSISTENCY, PRESOLVE_DEBUG, and PRESOLVE_SUMMARY control consistency checking and debugging in the continuous presolve. See the comments in CoinPresolvePsdebug.hpp. DO NOT just define the symbols here in this file. Unless these symbols are consistent across all presolve code, you'll get something between garbage and a core dump. */ #include #include #include #include "CoinHelperFunctions.hpp" #include "CoinFinite.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStartBasis.hpp" #include "OsiSolverInterface.hpp" #include "OsiPresolve.hpp" #include "CoinPresolveMatrix.hpp" #if PRESOLVE_CONSISTENCY > 0 || PRESOLVE_DEBUG > 0 || PRESOLVE_SUMMARY > 0 #include "CoinPresolvePsdebug.hpp" #include "CoinPresolveMonitor.hpp" #endif #include "CoinPresolveEmpty.hpp" #include "CoinPresolveFixed.hpp" #include "CoinPresolveSingleton.hpp" #include "CoinPresolveDoubleton.hpp" #include "CoinPresolveTripleton.hpp" #include "CoinPresolveZeros.hpp" #include "CoinPresolveSubst.hpp" #include "CoinPresolveForcing.hpp" #include "CoinPresolveDual.hpp" #include "CoinPresolveTighten.hpp" #include "CoinPresolveUseless.hpp" #include "CoinPresolveDupcol.hpp" #include "CoinPresolveImpliedFree.hpp" #include "CoinPresolveIsolated.hpp" #include "CoinMessage.hpp" OsiPresolve::OsiPresolve() : originalModel_(NULL) , presolvedModel_(NULL) , nonLinearValue_(0.0) , originalColumn_(NULL) , originalRow_(NULL) , paction_(0) , ncols_(0) , nrows_(0) , nelems_(0) , presolveActions_(0) , numberPasses_(5) { } OsiPresolve::~OsiPresolve() { gutsOfDestroy(); } // Gets rid of presolve actions (e.g.when infeasible) void OsiPresolve::gutsOfDestroy() { const CoinPresolveAction *paction = paction_; while (paction) { const CoinPresolveAction *next = paction->next; delete paction; paction = next; } delete[] originalColumn_; delete[] originalRow_; paction_ = NULL; originalColumn_ = NULL; originalRow_ = NULL; } /* This version of presolve returns a pointer to a new presolved model. NULL if infeasible doStatus controls activities required to transform an existing solution to match the presolved problem. I'd (lh) argue that this should default to false, but to maintain previous behaviour it defaults to true. Really, this is only useful if you've already optimised before applying presolve and also want to work with the solution after presolve. I think that this is the less common case. The more common situation is to apply presolve before optimising. */ OsiSolverInterface * OsiPresolve::presolvedModel(OsiSolverInterface &si, double feasibilityTolerance, bool keepIntegers, int numberPasses, const char *prohibited, bool doStatus, const char *rowProhibited) { ncols_ = si.getNumCols(); nrows_ = si.getNumRows(); nelems_ = si.getNumElements(); numberPasses_ = numberPasses; double maxmin = si.getObjSense(); originalModel_ = &si; delete[] originalColumn_; originalColumn_ = new int[ncols_]; delete[] originalRow_; originalRow_ = new int[nrows_]; int i; for (i = 0; i < ncols_; i++) originalColumn_[i] = i; for (i = 0; i < nrows_; i++) originalRow_[i] = i; // result is 0 - okay, 1 infeasible, -1 go round again int result = -1; // User may have deleted - its their responsibility presolvedModel_ = NULL; // Messages CoinMessages msgs = CoinMessage(si.messages().language()); // Only go round 100 times even if integer preprocessing int totalPasses = 100; while (result == -1) { // make new copy delete presolvedModel_; presolvedModel_ = si.clone(); totalPasses--; // drop integer information if wanted if (!keepIntegers) { int i; for (i = 0; i < ncols_; i++) presolvedModel_->setContinuous(i); } CoinPresolveMatrix prob(ncols_, maxmin, presolvedModel_, nrows_, nelems_, doStatus, nonLinearValue_, prohibited, rowProhibited); // make sure row solution correct if (doStatus) { double *colels = prob.colels_; int *hrow = prob.hrow_; CoinBigIndex *mcstrt = prob.mcstrt_; int *hincol = prob.hincol_; int ncols = prob.ncols_; double *csol = prob.sol_; double *acts = prob.acts_; int nrows = prob.nrows_; int colx; memset(acts, 0, nrows * sizeof(double)); for (colx = 0; colx < ncols; ++colx) { double solutionValue = csol[colx]; for (CoinBigIndex i = mcstrt[colx]; i < mcstrt[colx] + hincol[colx]; ++i) { int row = hrow[i]; double coeff = colels[i]; acts[row] += solutionValue * coeff; } } } // move across feasibility tolerance prob.feasibilityTolerance_ = feasibilityTolerance; /* Do presolve. Allow for the possibility that presolve might be ineffective (i.e., we're feasible but no postsolve actions are queued. */ paction_ = presolve(&prob); result = 0; // Get rid of useful arrays prob.deleteStuff(); /* This we don't need to do unless presolve actually reduced the system. */ if (prob.status_ == 0 && paction_) { // Looks feasible but double check to see if anything slipped through int n = prob.ncols_; double *lo = prob.clo_; double *up = prob.cup_; int i; for (i = 0; i < n; i++) { if (up[i] < lo[i]) { if (up[i] < lo[i] - 1.0e-8) { // infeasible prob.status_ = 1; } else { up[i] = lo[i]; } } } n = prob.nrows_; lo = prob.rlo_; up = prob.rup_; for (i = 0; i < n; i++) { if (up[i] < lo[i]) { if (up[i] < lo[i] - 1.0e-8) { // infeasible prob.status_ = 1; } else { up[i] = lo[i]; } } } } /* If we're feasible, load the presolved system into the solver. Presumably we could skip model update and copying of status and solution if presolve took no action. */ if (prob.status_ == 0) { prob.update_model(presolvedModel_, nrows_, ncols_, nelems_); #if PRESOLVE_CONSISTENCY > 0 if (doStatus) { int basicCnt = 0; int basicColumns = 0; int i; CoinPresolveMatrix::Status status; for (i = 0; i < prob.ncols_; i++) { status = prob.getColumnStatus(i); if (status == CoinPrePostsolveMatrix::basic) basicColumns++; } basicCnt = basicColumns; for (i = 0; i < prob.nrows_; i++) { status = prob.getRowStatus(i); if (status == CoinPrePostsolveMatrix::basic) basicCnt++; } #if PRESOLVE_DEBUG > 0 presolve_check_nbasic(&prob); #endif if (basicCnt > prob.nrows_) { // Take out slacks double *acts = prob.acts_; double *rlo = prob.rlo_; double *rup = prob.rup_; double infinity = si.getInfinity(); for (i = 0; i < prob.nrows_; i++) { status = prob.getRowStatus(i); if (status == CoinPrePostsolveMatrix::basic) { basicCnt--; double down = acts[i] - rlo[i]; double up = rup[i] - acts[i]; if (CoinMin(up, down) < infinity) { if (down <= up) prob.setRowStatus(i, CoinPrePostsolveMatrix::atLowerBound); else prob.setRowStatus(i, CoinPrePostsolveMatrix::atUpperBound); } else { prob.setRowStatus(i, CoinPrePostsolveMatrix::isFree); } } if (basicCnt == prob.nrows_) break; } } } #endif /* Install the status and primal solution, if we've been carrying them along. The code that copies status is efficient but brittle. The current definitions for CoinWarmStartBasis::Status and CoinPrePostsolveMatrix::Status are in one-to-one correspondence. This code will fail if that ever changes. */ if (doStatus) { presolvedModel_->setColSolution(prob.sol_); CoinWarmStartBasis *basis = dynamic_cast< CoinWarmStartBasis * >(presolvedModel_->getEmptyWarmStart()); basis->resize(prob.nrows_, prob.ncols_); int i; for (i = 0; i < prob.ncols_; i++) { CoinWarmStartBasis::Status status = static_cast< CoinWarmStartBasis::Status >(prob.getColumnStatus(i)); basis->setStructStatus(i, status); } for (i = 0; i < prob.nrows_; i++) { CoinWarmStartBasis::Status status = static_cast< CoinWarmStartBasis::Status >(prob.getRowStatus(i)); basis->setArtifStatus(i, status); } presolvedModel_->setWarmStart(basis); delete basis; delete[] prob.sol_; delete[] prob.acts_; delete[] prob.colstat_; prob.sol_ = NULL; prob.acts_ = NULL; prob.colstat_ = NULL; } /* Copy original column and row information from the CoinPresolveMatrix object so it'll be available for postsolve. */ int ncolsNow = presolvedModel_->getNumCols(); memcpy(originalColumn_, prob.originalColumn_, ncolsNow * sizeof(int)); delete[] prob.originalColumn_; prob.originalColumn_ = NULL; int nrowsNow = presolvedModel_->getNumRows(); memcpy(originalRow_, prob.originalRow_, nrowsNow * sizeof(int)); delete[] prob.originalRow_; prob.originalRow_ = NULL; // now clean up integer variables. This can modify original { int numberChanges = 0; const double *lower0 = originalModel_->getColLower(); const double *upper0 = originalModel_->getColUpper(); const double *lower = presolvedModel_->getColLower(); const double *upper = presolvedModel_->getColUpper(); for (i = 0; i < ncolsNow; i++) { if (!presolvedModel_->isInteger(i)) continue; int iOriginal = originalColumn_[i]; double lowerValue0 = lower0[iOriginal]; double upperValue0 = upper0[iOriginal]; double lowerValue = ceil(lower[i] - 1.0e-5); double upperValue = floor(upper[i] + 1.0e-5); presolvedModel_->setColBounds(i, lowerValue, upperValue); // need to be careful if dupcols if (lowerValue > upperValue) { numberChanges++; CoinMessageHandler *hdlr = presolvedModel_->messageHandler(); hdlr->message(COIN_PRESOLVE_COLINFEAS, msgs) << iOriginal << lowerValue << upperValue << CoinMessageEol; result = 1; } else if ((prob.presolveOptions_ & 0x80000000) == 0) { if (lowerValue > lowerValue0 + 1.0e-8) { originalModel_->setColLower(iOriginal, lowerValue); numberChanges++; } if (upperValue < upperValue0 - 1.0e-8) { originalModel_->setColUpper(iOriginal, upperValue); numberChanges++; } } } if (numberChanges) { CoinMessageHandler *hdlr = presolvedModel_->messageHandler(); hdlr->message(COIN_PRESOLVE_INTEGERMODS, msgs) << numberChanges << CoinMessageEol; // we can't go round again in integer if dupcols if (!result && totalPasses > 0 && (prob.presolveOptions_ & 0x80000000) == 0) { result = -1; // round again const CoinPresolveAction *paction = paction_; while (paction) { const CoinPresolveAction *next = paction->next; delete paction; paction = next; } paction_ = NULL; } } } } else if (prob.status_ != 0) { // infeasible or unbounded result = 1; } } if (!result) { int nrowsAfter = presolvedModel_->getNumRows(); int ncolsAfter = presolvedModel_->getNumCols(); CoinBigIndex nelsAfter = presolvedModel_->getNumElements(); CoinMessageHandler *hdlr = presolvedModel_->messageHandler(); hdlr->message(COIN_PRESOLVE_STATS, msgs) << nrowsAfter << -(nrows_ - nrowsAfter) << ncolsAfter << -(ncols_ - ncolsAfter) << nelsAfter << -(nelems_ - nelsAfter) << CoinMessageEol; } else { gutsOfDestroy(); delete presolvedModel_; presolvedModel_ = NULL; } return presolvedModel_; } // Return pointer to presolved model OsiSolverInterface * OsiPresolve::model() const { return presolvedModel_; } // Return pointer to original model OsiSolverInterface * OsiPresolve::originalModel() const { return originalModel_; } void OsiPresolve::postsolve(bool updateStatus) { // Messages CoinMessages msgs = CoinMessage(presolvedModel_->messages().language()); CoinMessageHandler *hdlr = presolvedModel_->messageHandler(); if (!presolvedModel_->isProvenOptimal()) { hdlr->message(COIN_PRESOLVE_NONOPTIMAL, msgs) << CoinMessageEol; } // this is the size of the original problem const int ncols0 = ncols_; const int nrows0 = nrows_; const CoinBigIndex nelems0 = nelems_; // reality check assert(ncols0 == originalModel_->getNumCols()); assert(nrows0 == originalModel_->getNumRows()); // this is the reduced problem int ncols = presolvedModel_->getNumCols(); int nrows = presolvedModel_->getNumRows(); double *acts = new double[nrows0]; double *sol = new double[ncols0]; CoinZeroN(acts, nrows0); CoinZeroN(sol, ncols0); unsigned char *rowstat = NULL; unsigned char *colstat = NULL; CoinWarmStartBasis *presolvedBasis = dynamic_cast< CoinWarmStartBasis * >(presolvedModel_->getWarmStart()); if (!presolvedBasis) updateStatus = false; if (updateStatus) { colstat = new unsigned char[ncols0 + nrows0]; #ifdef ZEROFAULT memset(colstat, 0, ((ncols0 + nrows0) * sizeof(char))); #endif rowstat = colstat + ncols0; for (int i = 0; i < ncols; i++) { colstat[i] = presolvedBasis->getStructStatus(i); } for (int i = 0; i < nrows; i++) { rowstat[i] = presolvedBasis->getArtifStatus(i); } } delete presolvedBasis; #if PRESOLVE_CONSISTENCY > 0 if (updateStatus) { int basicCnt = 0; for (int i = 0; i < ncols; i++) { if (colstat[i] == CoinWarmStartBasis::basic) basicCnt++; } for (int i = 0; i < nrows; i++) { if (rowstat[i] == CoinWarmStartBasis::basic) basicCnt++; } assert(basicCnt == nrows); } #endif /* Postsolve back to the original problem. The CoinPostsolveMatrix object assumes ownership of sol, acts, colstat, and rowstat. */ CoinPostsolveMatrix prob(presolvedModel_, ncols0, nrows0, nelems0, presolvedModel_->getObjSense(), sol, acts, colstat, rowstat); postsolve(prob); #if PRESOLVE_CONSISTENCY > 0 if (updateStatus) { int basicCnt = 0; for (int i = 0; i < ncols0; i++) { if (prob.getColumnStatus(i) == CoinPrePostsolveMatrix::basic) basicCnt++; } for (int i = 0; i < nrows0; i++) { if (prob.getRowStatus(i) == CoinPrePostsolveMatrix::basic) basicCnt++; } assert(basicCnt == nrows0); } #endif originalModel_->setColSolution(sol); if (updateStatus) { CoinWarmStartBasis *basis = dynamic_cast< CoinWarmStartBasis * >(presolvedModel_->getEmptyWarmStart()); basis->setSize(ncols0, nrows0); const double *lower = originalModel_->getColLower(); const double *upper = originalModel_->getColUpper(); const double *solution = originalModel_->getColSolution(); for (int i = 0; i < ncols0; i++) { CoinWarmStartBasis::Status status = static_cast< CoinWarmStartBasis::Status >(prob.getColumnStatus(i)); // Fix obvious mistakes if (status != CoinWarmStartBasis::basic && status != CoinWarmStartBasis::isFree) { if (solution[i] < lower[i] + 1.0e-8) status = CoinWarmStartBasis::atLowerBound; else if (solution[i] > upper[i] - 1.0e-8) status = CoinWarmStartBasis::atUpperBound; } assert(status != CoinWarmStartBasis::atLowerBound || originalModel_->getColLower()[i] > -originalModel_->getInfinity()); assert(status != CoinWarmStartBasis::atUpperBound || originalModel_->getColUpper()[i] < originalModel_->getInfinity()); basis->setStructStatus(i, status); } #if PRESOLVE_DEBUG > 0 /* Do a thorough check of row and column solutions. There should be no inconsistencies at this point. */ std::cout << "Checking solution before transferring basis." << std::endl; presolve_check_sol(&prob, 2, 2, 2); int errs = 0; #endif for (int i = 0; i < nrows0; i++) { CoinWarmStartBasis::Status status = static_cast< CoinWarmStartBasis::Status >(prob.getRowStatus(i)); basis->setArtifStatus(i, status); } originalModel_->setWarmStart(basis); delete basis; } } // return pointer to original columns const int * OsiPresolve::originalColumns() const { return originalColumn_; } // return pointer to original rows const int * OsiPresolve::originalRows() const { return originalRow_; } // Set pointer to original model void OsiPresolve::setOriginalModel(OsiSolverInterface *model) { originalModel_ = model; } #if 0 // A lazy way to restrict which transformations are applied // during debugging. static int ATOI(const char *name) { return true; #if PRESOLVE_DEBUG > 0 || PRESOLVE_SUMMARY > 0 if (getenv(name)) { int val = atoi(getenv(name)); printf("%s = %d\n", name, val); return (val); } else { if (strcmp(name,"off")) return (true); else return (false); } #else return (true); #endif } #endif #if PRESOLVE_DEBUG > 0 // Anonymous namespace for debug routines namespace { /* A control routine for debug checks --- keeps down the clutter in doPresolve. Each time it's called, it prints a list of transforms applied since the last call, then does checks. */ void check_and_tell(const CoinPresolveMatrix *const prob, const CoinPresolveAction *first, const CoinPresolveAction *&mark) { const CoinPresolveAction *current; if (first != mark) { printf("PRESOLVE: applied"); for (current = first; current != mark && current != 0; current = current->next) { printf(" %s", current->name()); } printf("\n"); presolve_check_sol(prob); presolve_check_nbasic(prob); mark = first; } return; } /* At a guess, this code is intended to allow a known solution to be checked against presolve progress. Pulled it into the local debug namespace, but really should be integrated with CoinPresolvePsdebug. At the least, needs a method to conveniently set debugSolution. -- lh, 110605 -- */ double *debugSolution = NULL; int debugNumberColumns = -1; int counter = 1000000; bool break2(CoinPresolveMatrix *prob) { if (counter > 0) printf("break2: counter %d\n", counter); counter--; if (debugSolution && prob->ncols_ == debugNumberColumns) { for (int i = 0; i < prob->ncols_; i++) { double value = debugSolution[i]; if (value < prob->clo_[i]) { printf("%d inf %g %g %g\n", i, prob->clo_[i], value, prob->cup_[i]); } else if (value > prob->cup_[i]) { printf("%d inf %g %g %g\n", i, prob->clo_[i], value, prob->cup_[i]); } } } if (!counter) { printf("skipping next and all\n"); } return (counter <= 0); } } // end anonymous namespace for debug routines #endif #if PRESOLVE_DEBUG > 0 #define possibleBreak \ if (break2(prob)) \ break #define possibleSkip if (!break2(prob)) #else #define possibleBreak #define possibleSkip #endif // This is the presolve loop. // It is a separate virtual function so that it can be easily // customized by subclassing CoinPresolve. const CoinPresolveAction *OsiPresolve::presolve(CoinPresolveMatrix *prob) { paction_ = 0; prob->status_ = 0; // say feasible #if PRESOLVE_DEBUG > 0 const CoinPresolveAction *pactiond = 0; presolve_check_sol(prob, 2, 1, 1); // CoinPresolveMonitor *monitor = new CoinPresolveMonitor(prob,true,22) ; CoinPresolveMonitor *monitor = 0; #endif /* Transfer costs off of singleton variables, and also between integer variables when advantageous. transferCosts is defined in CoinPresolveFixed.cpp */ if ((presolveActions_ & 0x04) != 0) { transferCosts(prob); #if PRESOLVE_DEBUG > 0 if (monitor) monitor->checkAndTell(prob); #endif } /* Fix variables before we get into the main transform loop. */ paction_ = make_fixed(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif // if integers then switch off dual stuff // later just do individually bool doDualStuff = true; if ((presolveActions_ & 0x01) == 0) { int ncol = presolvedModel_->getNumCols(); for (int i = 0; i < ncol; i++) if (presolvedModel_->isInteger(i)) doDualStuff = false; } #if PRESOLVE_CONSISTENCY > 0 presolve_links_ok(prob); #endif /* If we're feasible, set up for the main presolve transform loop. */ if (!prob->status_) { #if 0 /* This block is used during debugging. See ATOI to see how it works. Some editing will be required to turn it all on. */ bool slackd = ATOI("SLACKD")!=0; //bool forcing = ATOI("FORCING")!=0; bool doubleton = ATOI("DOUBLETON")!=0; bool forcing = ATOI("off")!=0; bool ifree = ATOI("off")!=0; bool zerocost = ATOI("off")!=0; bool dupcol = ATOI("off")!=0; bool duprow = ATOI("off")!=0; bool dual = ATOI("off")!=0; #else #if 1 // normal operation --- all transforms enabled bool slackSingleton = true; bool slackd = true; bool doubleton = true; bool tripleton = true; bool forcing = true; bool ifree = true; bool zerocost = true; bool dupcol = true; bool duprow = true; bool dual = doDualStuff; #else // compile time selection of transforms. bool slackSingleton = true; bool slackd = false; bool doubleton = true; bool tripleton = true; bool forcing = true; bool ifree = false; bool zerocost = false; bool dupcol = false; bool duprow = false; bool dual = false; #endif #endif /* Process OsiPresolve options. Set corresponding CoinPresolve options and control variables here. */ // Switch off some stuff if would annoy set partitioning etc if ((presolveActions_ & 0x02) != 0) { doubleton = false; tripleton = false; ifree = false; } // stop x+y+z=1 if ((presolveActions_ & 0x08) != 0) prob->setPresolveOptions(prob->presolveOptions() | 0x04); // switch on stuff which can't be unrolled easily if ((presolveActions_ & 0x10) != 0) prob->setPresolveOptions(prob->presolveOptions() | 0x10); // switch on gub stuff (unimplemented as of 110605 -- lh --) if ((presolveActions_ & 0x20) != 0) prob->setPresolveOptions(prob->presolveOptions() | 0x20); // allow duplicate column processing for integer columns if ((presolveActions_ & 0x01) != 0) prob->setPresolveOptions(prob->presolveOptions() | 0x01); /* Set [rows,cols]ToDo to process all rows & cols unless there are specific prohibitions. */ prob->initColsToDo(); prob->initRowsToDo(); /* Try to remove duplicate rows and columns. */ if (dupcol) { possibleSkip; paction_ = dupcol_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 if (monitor) monitor->checkAndTell(prob); #endif } if (duprow) { possibleSkip; paction_ = duprow_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 if (monitor) monitor->checkAndTell(prob); #endif } /* The main loop starts with a minor loop that does inexpensive presolve transforms until convergence. At each iteration of this loop, next[Rows,Cols]ToDo is copied over to [rows,cols]ToDo. Then there's a block to set [rows,cols]ToDo to examine all rows & cols, followed by executions of expensive transforms. Then we come back around for another iteration of the main loop. [rows,cols]ToDo is not reset as we come back around, so we dive into the inexpensive loop set up to process all. lastDropped is a count of total number of rows dropped by presolve. Used as an additional criterion to end the main presolve loop. */ int lastDropped = 0; prob->pass_ = 0; for (int iLoop = 0; iLoop < numberPasses_; iLoop++) { #if PRESOLVE_SUMMARY > 0 std::cout << "Starting major pass " << (iLoop + 1) << std::endl; #endif const CoinPresolveAction *const paction0 = paction_; // #define IMPLIED 3 #ifdef IMPLIED int fill_level = 3; #define IMPLIED2 1 #if IMPLIED != 3 #if IMPLIED > 0 && IMPLIED < 11 fill_level = IMPLIED; printf("** fill_level == %d !\n", fill_level); #endif #if IMPLIED > 11 && IMPLIED < 21 fill_level = -(IMPLIED - 10); printf("** fill_level == %d !\n", fill_level); #endif #endif #else // look for substitutions with no fill int fill_level = 2; #endif int whichPass = 0; /* Apply inexpensive transforms until convergence or infeasible/unbounded. */ while (true) { whichPass++; prob->pass_++; const CoinPresolveAction *const paction1 = paction_; if (slackd) { bool notFinished = true; while (notFinished) { possibleBreak; paction_ = slack_doubleton_action::presolve(prob, paction_, notFinished); } #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (zerocost) { possibleBreak; paction_ = do_tighten_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (dual && whichPass == 1) { possibleBreak; // this can also make E rows so do one bit here paction_ = remove_dual_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (doubleton) { possibleBreak; paction_ = doubleton_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (tripleton) { possibleBreak; paction_ = tripleton_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (forcing) { possibleBreak; paction_ = forcing_constraint_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (ifree && (whichPass % 5) == 1) { possibleBreak; paction_ = implied_free_action::presolve(prob, paction_, fill_level); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } #if PRESOLVE_CONSISTENCY > 0 presolve_links_ok(prob); presolve_no_zeros(prob); presolve_consistent(prob); #endif /* Set up for next pass. Original comment adds: later do faster if many changes i.e. memset and memcpy */ prob->stepRowsToDo(); #if PRESOLVE_DEBUG > 0 int rowCheck = -1; bool rowFound = false; for (int i = 0; i < prob->numberRowsToDo_; i++) { int index = prob->rowsToDo_[i]; if (index == rowCheck) { std::cout << " row " << index << " on list after pass " << whichPass << std::endl; rowFound = true; } } if (!rowFound && rowCheck >= 0) prob->rowsToDo_[prob->numberRowsToDo_++] = rowCheck; #endif prob->stepColsToDo(); #if PRESOLVE_DEBUG > 0 int colCheck = -1; bool colFound = false; for (int i = 0; i < prob->numberNextColsToDo_; i++) { int index = prob->colsToDo_[i]; if (index == colCheck) { std::cout << " col " << index << " on list after pass " << whichPass << std::endl; colFound = true; } } if (!colFound && colCheck >= 0) prob->colsToDo_[prob->numberColsToDo_++] = colCheck; #endif /* Break if nothing happened (no postsolve actions queued). The check for fill_level > 0 is a hack to allow repeating the loop with some modified fill level (playing with negative values). fill_level = 0 (as set in other places) will clearly be a problem. -- lh, 110605 -- */ if (paction_ == paction1 && fill_level > 0) break; } /* End of inexpensive transform loop. Reset [rows,cols]ToDo to process all rows and columns unless there are specfic prohibitions. */ prob->initRowsToDo(); prob->initColsToDo(); /* Try expensive presolve transforms. Original comment adds: this caused world.mps to run into numerical difficulties */ #if PRESOLVE_SUMMARY > 0 std::cout << "Starting expensive." << std::endl; #endif /* Try and fix variables at upper or lower bound by calculating bounds on the dual variables and propagating them to the reduced costs. Every other iteration, see if this has created free variables. */ if (dual) { for (int itry = 0; itry < 5; itry++) { const CoinPresolveAction *const paction2 = paction_; possibleBreak; paction_ = remove_dual_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; if (ifree) { #ifdef IMPLIED #if IMPLIED2 == 0 int fill_level = 0; // switches off substitution #elif IMPLIED2 != 99 int fill_level = IMPLIED2; #endif #endif if ((itry & 1) == 0) { possibleBreak; paction_ = implied_free_action::presolve(prob, paction_, fill_level); } #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (paction_ == paction2) break; } } else if (ifree) { /* Just check for free variables. */ #ifdef IMPLIED #if IMPLIED2 == 0 int fill_level = 0; // switches off substitution #elif IMPLIED2 != 99 int fill_level = IMPLIED2; #endif #endif possibleBreak; paction_ = implied_free_action::presolve(prob, paction_, fill_level); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } /* Check if other transformations have produced duplicate rows or columns. */ if (dupcol) { possibleBreak; paction_ = dupcol_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } if (duprow) { possibleBreak; paction_ = duprow_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif if (prob->status_) break; } // Will trigger abort due to unimplemented postsolve -- lh, 110605 -- if ((presolveActions_ & 0x20) != 0) { possibleBreak; paction_ = gubrow_action::presolve(prob, paction_); } /* Count the number of empty rows and see if we've made progress in this pass. */ bool stopLoop = false; { const int *const hinrow = prob->hinrow_; int numberDropped = 0; for (int i = 0; i < nrows_; i++) if (!hinrow[i]) numberDropped++; #if PRESOLVE_DEBUG > 0 std::cout << " " << (numberDropped - lastDropped) << " rows dropped in pass " << iLoop << "." << std::endl; #endif if (numberDropped == lastDropped) stopLoop = true; else lastDropped = numberDropped; } /* Check for singleton variables that can act like a logical, allowing a row to be transformed from an equality to an inequality. The third parameter allows for costs for the existing logicals. This is apparently used by clp; consult the clp presolve before implementing it here. -- lh, 110605 -- Original comment: Do this here as not very loopy */ if (slackSingleton) { possibleBreak; paction_ = slack_singleton_action::presolve(prob, paction_, NULL); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif } #if PRESOLVE_DEBUG > 0 presolve_check_sol(prob, 1); #endif if (paction_ == paction0 || stopLoop) break; } // End of major pass loop } /* Final cleanup: drop zero coefficients from the matrix, then drop empty rows and columns. */ if (!prob->status_) { paction_ = drop_zero_coefficients(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); if (monitor) monitor->checkAndTell(prob); #endif paction_ = drop_empty_cols_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); #endif paction_ = drop_empty_rows_action::presolve(prob, paction_); #if PRESOLVE_DEBUG > 0 check_and_tell(prob, paction_, pactiond); #endif } /* Not feasible? Say something and clean up. */ CoinMessageHandler *hdlr = prob->messageHandler(); CoinMessages msgs = CoinMessage(prob->messages().language()); if (prob->status_) { if (prob->status_ == 1) hdlr->message(COIN_PRESOLVE_INFEAS, msgs) << prob->feasibilityTolerance_ << CoinMessageEol; else if (prob->status_ == 2) hdlr->message(COIN_PRESOLVE_UNBOUND, msgs) << CoinMessageEol; else hdlr->message(COIN_PRESOLVE_INFEASUNBOUND, msgs) << CoinMessageEol; gutsOfDestroy(); } return (paction_); } /* We could have implemented this by having each postsolve routine directly call the next one, but this makes it easier to add debugging checks. */ void OsiPresolve::postsolve(CoinPostsolveMatrix &prob) { const CoinPresolveAction *paction = paction_; #if PRESOLVE_DEBUG > 0 std::cout << "Begin POSTSOLVING." << std::endl; if (prob.colstat_) { presolve_check_nbasic(&prob); presolve_check_sol(&prob, 2, 2, 2); } presolve_check_duals(&prob); #endif while (paction) { #if PRESOLVE_DEBUG > 0 std::cout << "POSTSOLVING " << paction->name() << std::endl; #endif paction->postsolve(&prob); #if PRESOLVE_DEBUG > 0 if (prob.colstat_) { presolve_check_nbasic(&prob); presolve_check_sol(&prob, 2, 2, 2); } #endif paction = paction->next; #if PRESOLVE_DEBUG > 0 presolve_check_duals(&prob); #endif } #if PRESOLVE_DEBUG > 0 std::cout << "End POSTSOLVING" << std::endl; #endif #if PRESOLVE_DEBUG > 0 for (int j = 0; j < prob.ncols_; j++) { if (!prob.cdone_[j]) { printf("!cdone[%d]\n", j); abort(); } } for (int i = 0; i < prob.nrows_; i++) { if (!prob.rdone_[i]) { printf("!rdone[%d]\n", i); abort(); } } for (int j = 0; j < prob.ncols_; j++) { if (prob.sol_[j] < -1e10 || prob.sol_[j] > 1e10) printf("!!!%d %g\n", j, prob.sol_[j]); } #endif /* Put back duals. Flip sign for maximisation problems. */ double maxmin = originalModel_->getObjSense(); if (maxmin < 0.0) { double *pi = prob.rowduals_; for (int i = 0; i < nrows_; i++) pi[i] = -pi[i]; } originalModel_->setRowPrice(prob.rowduals_); } static inline double getTolerance(const OsiSolverInterface *si, OsiDblParam key) { double tol; if (!si->getDblParam(key, tol)) { CoinPresolveAction::throwCoinError("getDblParam failed", "CoinPrePostsolveMatrix::CoinPrePostsolveMatrix"); } return (tol); } // Assumptions: // 1. nrows>=m.getNumRows() // 2. ncols>=m.getNumCols() // // In presolve, these values are equal. // In postsolve, they may be inequal, since the reduced problem // may be smaller, but we need room for the large problem. // ncols may be larger than si.getNumCols() in postsolve, // this at that point si will be the reduced problem, // but we need to reserve enough space for the original problem. CoinPrePostsolveMatrix::CoinPrePostsolveMatrix(const OsiSolverInterface *si, int ncols_in, int nrows_in, CoinBigIndex nelems_in) : ncols_(si->getNumCols()) , nelems_(si->getNumElements()) , ncols0_(ncols_in) , nrows0_(nrows_in) , bulkRatio_(2.0) , mcstrt_(new CoinBigIndex[ncols_in + 1]) , hincol_(new int[ncols_in + 1]) , cost_(new double[ncols_in]) , clo_(new double[ncols_in]) , cup_(new double[ncols_in]) , rlo_(new double[nrows_in]) , rup_(new double[nrows_in]) , originalColumn_(new int[ncols_in]) , originalRow_(new int[nrows_in]) , ztolzb_(getTolerance(si, OsiPrimalTolerance)) , ztoldj_(getTolerance(si, OsiDualTolerance)) , maxmin_(si->getObjSense()) , handler_(0) , defaultHandler_(false) , messages_() { bulk0_ = static_cast< CoinBigIndex >(bulkRatio_ * nelems_in + ncols_in); hrow_ = new int[bulk0_ + ncols_in]; colels_ = new double[bulk0_ + ncols_in]; si->getDblParam(OsiObjOffset, originalOffset_); int ncols = si->getNumCols(); int nrows = si->getNumRows(); setMessageHandler(si->messageHandler()); CoinDisjointCopyN(si->getColLower(), ncols, clo_); CoinDisjointCopyN(si->getColUpper(), ncols, cup_); CoinDisjointCopyN(si->getObjCoefficients(), ncols, cost_); CoinDisjointCopyN(si->getRowLower(), nrows, rlo_); CoinDisjointCopyN(si->getRowUpper(), nrows, rup_); int i; // initialize and clean up bounds double infinity = si->getInfinity(); if (infinity != COIN_DBL_MAX) { for (i = 0; i < ncols; i++) { if (clo_[i] == -infinity) clo_[i] = -COIN_DBL_MAX; if (cup_[i] == infinity) cup_[i] = COIN_DBL_MAX; } for (i = 0; i < nrows; i++) { if (rlo_[i] == -infinity) rlo_[i] = -COIN_DBL_MAX; if (rup_[i] == infinity) rup_[i] = COIN_DBL_MAX; } } for (i = 0; i < ncols_in; i++) originalColumn_[i] = i; for (i = 0; i < nrows_in; i++) originalRow_[i] = i; sol_ = NULL; rowduals_ = NULL; acts_ = NULL; rcosts_ = NULL; colstat_ = NULL; rowstat_ = NULL; } // I am not familiar enough with CoinPackedMatrix to be confident // that I will implement a row-ordered version of toColumnOrderedGapFree // properly. static bool isGapFree(const CoinPackedMatrix &matrix) { const CoinBigIndex *start = matrix.getVectorStarts(); const int *length = matrix.getVectorLengths(); int i; for (i = matrix.getSizeVectorLengths() - 1; i >= 0; --i) { if (start[i + 1] - start[i] != length[i]) break; } return (!(i >= 0)); } CoinPresolveMatrix::CoinPresolveMatrix(int ncols0_in, double maxmin, // end prepost members OsiSolverInterface *si, // rowrep int nrows_in, CoinBigIndex nelems_in, bool doStatus, double nonLinearValue, const char *prohibited, const char *rowProhibited) : CoinPrePostsolveMatrix(si, ncols0_in, nrows_in, nelems_in) , clink_(new presolvehlink[ncols0_in + 1]) , rlink_(new presolvehlink[nrows_in + 1]) , dobias_(0.0) , // temporary init mrstrt_(new CoinBigIndex[nrows_in + 1]) , hinrow_(new int[nrows_in + 1]) , integerType_(new unsigned char[ncols0_in]) , anyInteger_(false) , tuning_(false) , startTime_(0.0) , feasibilityTolerance_(0.0) , status_(-1) , maxSubstLevel_(3) , colsToDo_(new int[ncols0_in]) , numberColsToDo_(0) , nextColsToDo_(new int[ncols0_in]) , numberNextColsToDo_(0) , rowsToDo_(new int[nrows_in]) , numberRowsToDo_(0) , nextRowsToDo_(new int[nrows_in]) , numberNextRowsToDo_(0) , presolveOptions_(0) { rowels_ = new double[bulk0_]; hcol_ = new int[bulk0_]; nrows_ = si->getNumRows(); const CoinBigIndex bufsize = static_cast< CoinBigIndex >(bulk0_); // Set up change bits rowChanged_ = new unsigned char[nrows_]; memset(rowChanged_, 0, nrows_); colChanged_ = new unsigned char[ncols_]; memset(colChanged_, 0, ncols_); const CoinPackedMatrix *m1 = si->getMatrixByCol(); // The coefficient matrix is a big hunk of stuff. // Do the copy here to try to avoid running out of memory. const CoinBigIndex *start = m1->getVectorStarts(); const int *length = m1->getVectorLengths(); const int *row = m1->getIndices(); const double *element = m1->getElements(); int icol; CoinBigIndex nel = 0; mcstrt_[0] = 0; for (icol = 0; icol < ncols_; icol++) { CoinBigIndex j; for (j = start[icol]; j < start[icol] + length[icol]; j++) { if (fabs(element[j]) > ZTOLDP) { hrow_[nel] = row[j]; colels_[nel++] = element[j]; } } hincol_[icol] = static_cast< int >(nel - mcstrt_[icol]); mcstrt_[icol + 1] = nel; } // same thing for row rep CoinPackedMatrix *m = new CoinPackedMatrix(); m->reverseOrderedCopyOf(*si->getMatrixByCol()); // do by hand because of zeros m->removeGaps(); CoinDisjointCopyN(m->getVectorStarts(), nrows_, mrstrt_); mrstrt_[nrows_] = nelems_; CoinDisjointCopyN(m->getVectorLengths(), nrows_, hinrow_); CoinDisjointCopyN(m->getIndices(), nelems_, hcol_); CoinDisjointCopyN(m->getElements(), nelems_, rowels_); start = m->getVectorStarts(); length = m->getVectorLengths(); const int *column = m->getIndices(); element = m->getElements(); // out zeros int irow; nel = 0; mrstrt_[0] = 0; for (irow = 0; irow < nrows_; irow++) { CoinBigIndex j; for (j = start[irow]; j < start[irow] + length[irow]; j++) { if (fabs(element[j]) > ZTOLDP) { hcol_[nel] = column[j]; rowels_[nel++] = element[j]; } } hinrow_[irow] = static_cast< int >(nel - mrstrt_[irow]); mrstrt_[irow + 1] = nel; } nelems_ = nel; delete m; { int i; int numberIntegers = 0; for (i = 0; i < ncols_; i++) { if (si->isInteger(i)) { integerType_[i] = 1; numberIntegers++; } else { integerType_[i] = 0; } } anyInteger_ = (numberIntegers != 0); } // Set up prohibited bits if needed if (nonLinearValue) { anyProhibited_ = true; for (icol = 0; icol < ncols_; icol++) { CoinBigIndex j; bool nonLinearColumn = false; if (cost_[icol] == nonLinearValue) nonLinearColumn = true; for (j = mcstrt_[icol]; j < mcstrt_[icol + 1]; j++) { if (colels_[j] == nonLinearValue) { nonLinearColumn = true; setRowProhibited(hrow_[j]); } } if (nonLinearColumn) setColProhibited(icol); } } else if (prohibited) { anyProhibited_ = true; for (icol = 0; icol < ncols_; icol++) { if (prohibited[icol]) setColProhibited(icol); } } else { anyProhibited_ = false; } // Any rows special? if (rowProhibited) { anyProhibited_ = true; for (int irow = 0; irow < nrows_; irow++) { if (rowProhibited[irow]) setRowProhibited(irow); } } // Go to minimization if (maxmin < 0.0) { for (int i = 0; i < ncols_; i++) cost_[i] = -cost_[i]; maxmin_ = 1.0; } if (doStatus) { // allow for status and solution sol_ = new double[ncols_]; const double *presol; presol = si->getColSolution(); memcpy(sol_, presol, ncols_ * sizeof(double)); ; acts_ = new double[nrows_]; memcpy(acts_, si->getRowActivity(), nrows_ * sizeof(double)); CoinWarmStartBasis *basis = dynamic_cast< CoinWarmStartBasis * >(si->getWarmStart()); colstat_ = new unsigned char[nrows_ + ncols_]; rowstat_ = colstat_ + ncols_; // If basis is NULL then put in all slack basis if (basis && basis->getNumStructural() == ncols_) { int i; for (i = 0; i < ncols_; i++) { colstat_[i] = basis->getStructStatus(i); } for (i = 0; i < nrows_; i++) { rowstat_[i] = basis->getArtifStatus(i); } } else { int i; // no basis for (i = 0; i < ncols_; i++) { colstat_[i] = 3; } for (i = 0; i < nrows_; i++) { rowstat_[i] = 1; } } delete basis; } #if 0 for (i=0; i 0 presolve_consistent(this); #endif } // avoid compiler warnings about unused variables #if PRESOLVE_SUMMARY > 0 void CoinPresolveMatrix::update_model(OsiSolverInterface *si, int nrows0, int ncols0, CoinBigIndex nelems0) #else void CoinPresolveMatrix::update_model(OsiSolverInterface *si, int /*nrows0*/, int /*ncols0*/, CoinBigIndex /*nelems0*/) #endif { int nels = 0; int i; if (si->getObjSense() < 0.0) { for (int i = 0; i < ncols_; i++) cost_[i] = -cost_[i]; dobias_ = -dobias_; maxmin_ = -1.0; } for (i = 0; i < ncols_; i++) nels += hincol_[i]; CoinPackedMatrix m(true, nrows_, ncols_, nels, colels_, hrow_, mcstrt_, hincol_); si->loadProblem(m, clo_, cup_, cost_, rlo_, rup_); for (i = 0; i < ncols_; i++) { if (integerType_[i]) si->setInteger(i); else si->setContinuous(i); } si->setDblParam(OsiObjOffset, originalOffset_ - dobias_); #if PRESOLVE_SUMMARY > 0 std::cout << "New ncol/nrow/nels: " << ncols_ << "(-" << ncols0 - ncols_ << ") " << nrows_ << "(-" << nrows0 - nrows_ << ") " << si->getNumElements() << "(-" << nelems0 - si->getNumElements() << ") " << std::endl; #endif } //////////////// POSTSOLVE CoinPostsolveMatrix::CoinPostsolveMatrix(OsiSolverInterface *si, int ncols0_in, int nrows0_in, CoinBigIndex nelems0, double maxmin, // end prepost members double *sol_in, double *acts_in, unsigned char *colstat_in, unsigned char *rowstat_in) : CoinPrePostsolveMatrix(si, ncols0_in, nrows0_in, nelems0) , /* Used only to mark processed columns and rows so that debugging routines know what to check. */ #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 cdone_(new char[ncols0_in]) , rdone_(new char[nrows0_in]) #else cdone_(0) , rdone_(0) #endif { /* The CoinPrePostsolveMatrix constructor will set bulk0_ to bulkRatio_*nelems0. By default, bulkRatio_ is 2. This is certainly larger than absolutely necessary, but good for efficiency (minimises the need to compress the bulk store). The main storage arrays for the threaded column-major representation (hrow_, colels_, link_) should be allocated to this size. */ free_list_ = 0; maxlink_ = bulk0_; link_ = new CoinBigIndex[maxlink_]; nrows_ = si->getNumRows(); ncols_ = si->getNumCols(); sol_ = sol_in; rowduals_ = NULL; acts_ = acts_in; rcosts_ = NULL; colstat_ = colstat_in; rowstat_ = rowstat_in; // this is the *reduced* model, which is probably smaller int ncols1 = ncols_; int nrows1 = nrows_; const CoinPackedMatrix *m = si->getMatrixByCol(); #if 0 if (! isGapFree(*m)) { CoinPresolveAction::throwCoinError("Matrix not gap free", "CoinPostsolveMatrix"); } #endif const CoinBigIndex nelemsr = m->getNumElements(); if (isGapFree(*m)) { CoinDisjointCopyN(m->getVectorStarts(), ncols1, mcstrt_); CoinZeroN(mcstrt_ + ncols1, ncols0_ - ncols1); mcstrt_[ncols_] = nelems0; // points to end of bulk store CoinDisjointCopyN(m->getVectorLengths(), ncols1, hincol_); CoinDisjointCopyN(m->getIndices(), nelemsr, hrow_); CoinDisjointCopyN(m->getElements(), nelemsr, colels_); } else { CoinPackedMatrix *mm = new CoinPackedMatrix(*m); if (mm->hasGaps()) mm->removeGaps(); assert(nelemsr == mm->getNumElements()); CoinDisjointCopyN(mm->getVectorStarts(), ncols1, mcstrt_); CoinZeroN(mcstrt_ + ncols1, ncols0_ - ncols1); mcstrt_[ncols_] = nelems0; // points to end of bulk store CoinDisjointCopyN(mm->getVectorLengths(), ncols1, hincol_); CoinDisjointCopyN(mm->getIndices(), nelemsr, hrow_); CoinDisjointCopyN(mm->getElements(), nelemsr, colels_); } #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 memset(cdone_, -1, ncols0_); memset(rdone_, -1, nrows0_); #endif rowduals_ = new double[nrows0_]; CoinDisjointCopyN(si->getRowPrice(), nrows1, rowduals_); rcosts_ = new double[ncols0_]; CoinDisjointCopyN(si->getReducedCost(), ncols1, rcosts_); #if PRESOLVE_DEBUG > 0 // check accuracy of reduced costs (rcosts_ is recalculated reduced costs) si->getMatrixByCol()->transposeTimes(rowduals_, rcosts_); const double *obj = si->getObjCoefficients(); const double *dj = si->getReducedCost(); { int i; for (i = 0; i < ncols1; i++) { double newDj = obj[i] - rcosts_[i]; rcosts_[i] = newDj; assert(fabs(newDj - dj[i]) < 1.0e-1); } } // check reduced costs are 0 for basic variables { int i; for (i = 0; i < ncols1; i++) if (columnIsBasic(i)) assert(fabs(rcosts_[i]) < 1.0e-5); for (i = 0; i < nrows1; i++) if (rowIsBasic(i)) assert(fabs(rowduals_[i]) < 1.0e-5); } #endif /* CoinPresolve may, once, have handled both minimisation and maximisation, but hard-wired minimisation has crept in. */ if (maxmin < 0.0) { for (int i = 0; i < nrows1; i++) rowduals_[i] = -rowduals_[i]; for (int j = 0; j < ncols1; j++) { rcosts_[j] = -rcosts_[j]; } } /* CoinPresolve requires both column solution and row activity for correct operation. */ CoinDisjointCopyN(si->getColSolution(), ncols1, sol_); CoinDisjointCopyN(si->getRowActivity(), nrows1, acts_); si->setDblParam(OsiObjOffset, originalOffset_); for (int j = 0; j < ncols1; j++) { CoinBigIndex kcs = mcstrt_[j]; CoinBigIndex kce = kcs + hincol_[j]; for (CoinBigIndex k = kcs; k < kce; ++k) { link_[k] = k + 1; } if (kce > 0) link_[kce - 1] = NO_LINK; } if (maxlink_ > 0) { CoinBigIndex ml = maxlink_; for (CoinBigIndex k = nelemsr; k < ml; ++k) link_[k] = k + 1; link_[ml - 1] = NO_LINK; } free_list_ = nelemsr; #if PRESOLVE_DEBUG > 0 || PRESOLVE_CONSISTENCY > 0 /* These are used to track the action of postsolve transforms during debugging. */ CoinFillN(cdone_, ncols1, PRESENT_IN_REDUCED); CoinZeroN(cdone_ + ncols1, ncols0_in - ncols1); CoinFillN(rdone_, nrows1, PRESENT_IN_REDUCED); CoinZeroN(rdone_ + nrows1, nrows0_in - nrows1); #endif } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiCut.hpp0000644000175200017520000001657713414504051015062 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiCut_H #define OsiCut_H #include "OsiCollections.hpp" #include "OsiSolverInterface.hpp" /** Base Class for cut. The Base cut class contains:
  • a measure of the cut's effectivness
*/ /* COIN_NOTEST_DUPLICATE is rooted in CoinUtils. Check there before you meddle here. */ #ifdef COIN_FAST_CODE #ifndef COIN_NOTEST_DUPLICATE #define COIN_NOTEST_DUPLICATE #endif #endif #ifndef COIN_NOTEST_DUPLICATE #define COIN_DEFAULT_VALUE_FOR_DUPLICATE true #else #define COIN_DEFAULT_VALUE_FOR_DUPLICATE false #endif class OsiCut { public: //------------------------------------------------------------------- /**@name Effectiveness */ //@{ /// Set effectiveness inline void setEffectiveness(double e); /// Get effectiveness inline double effectiveness() const; //@} /**@name GloballyValid */ //@{ /// Set globallyValid (nonzero true) inline void setGloballyValid(bool trueFalse) { globallyValid_ = trueFalse ? 1 : 0; } inline void setGloballyValid() { globallyValid_ = 1; } inline void setNotGloballyValid() { globallyValid_ = 0; } /// Get globallyValid inline bool globallyValid() const { return globallyValid_ != 0; } /// Set globallyValid as integer (nonzero true) inline void setGloballyValidAsInteger(int trueFalse) { globallyValid_ = trueFalse; } /// Get globallyValid inline int globallyValidAsInteger() const { return globallyValid_; } //@} /**@name Debug stuff */ //@{ /// Print cuts in collection virtual void print() const {} //@} #if 0 / **@name Times used */ / /@{ / // Set times used inline void setTimesUsed( int t ); / // Increment times used inline void incrementTimesUsed(); / // Get times used inline int timesUsed() const; / /@} / **@name Times tested */ / /@{ / // Set times tested inline void setTimesTested( int t ); / // Increment times tested inline void incrementTimesTested(); / // Get times tested inline int timesTested() const; / /@} #endif //---------------------------------------------------------------- /**@name Comparison operators */ //@{ ///equal. 2 cuts are equal if there effectiveness are equal inline virtual bool operator==(const OsiCut &rhs) const; /// not equal inline virtual bool operator!=(const OsiCut &rhs) const; /// less than. True if this.effectiveness < rhs.effectiveness inline virtual bool operator<(const OsiCut &rhs) const; /// less than. True if this.effectiveness > rhs.effectiveness inline virtual bool operator>(const OsiCut &rhs) const; //@} //---------------------------------------------------------------- // consistent() - returns true if the cut is consistent with repect to itself. // This might include checks to ensure that a packed vector // itself does not have a negative index. // consistent(const OsiSolverInterface& si) - returns true if cut is consistent with // respect to the solver interface's model. This might include a check to // make sure a column index is not greater than the number // of columns in the problem. // infeasible(const OsiSolverInterface& si) - returns true if the cut is infeasible // "with respect to itself". This might include a check to ensure // the lower bound is greater than the upper bound, or if the // cut simply replaces bounds that the new bounds are feasible with // respect to the old bounds. //----------------------------------------------------------------- /**@name Sanity checks on cut */ //@{ /** Returns true if the cut is consistent with respect to itself, without considering any data in the model. For example, it might check to ensure that a column index is not negative. */ inline virtual bool consistent() const = 0; /** Returns true if cut is consistent when considering the solver interface's model. For example, it might check to ensure that a column index is not greater than the number of columns in the model. Assumes consistent() is true. */ inline virtual bool consistent(const OsiSolverInterface &si) const = 0; /** Returns true if the cut is infeasible "with respect to itself" and cannot be satisfied. This method does NOT check whether adding the cut to the solver interface's model will make the -model- infeasble. A cut which returns !infeasible(si) may very well make the model infeasible. (Of course, adding a cut with returns infeasible(si) will make the model infeasible.) The "with respect to itself" is in quotes becaues in the case where the cut simply replaces existing bounds, it may make sense to test infeasibility with respect to the current bounds held in the solver interface's model. For example, if the cut has a single variable in it, it might check that the maximum of new and existing lower bounds is greater than the minium of the new and existing upper bounds. Assumes that consistent(si) is true.
Infeasible cuts can be a useful mechanism for a cut generator to inform the solver interface that its detected infeasibility of the problem. */ inline virtual bool infeasible(const OsiSolverInterface &si) const = 0; /** Returns infeasibility of the cut with respect to solution passed in i.e. is positive if cuts off that solution. solution is getNumCols() long.. */ virtual double violated(const double *solution) const = 0; //@} protected: /**@name Constructors and destructors */ //@{ /// Default Constructor OsiCut(); /// Copy constructor OsiCut(const OsiCut &); /// Assignment operator OsiCut &operator=(const OsiCut &rhs); /// Destructor virtual ~OsiCut(); //@} private: /**@name Private member data */ //@{ /// Effectiveness double effectiveness_; /// If cut has global validity i.e. can be used anywhere in tree int globallyValid_; #if 0 /// Times used int timesUsed_; /// Times tested int timesTested_; #endif //@} }; //------------------------------------------------------------------- // Set/Get member data //------------------------------------------------------------------- void OsiCut::setEffectiveness(double e) { effectiveness_ = e; } double OsiCut::effectiveness() const { return effectiveness_; } #if 0 void OsiCut::setTimesUsed( int t ) { timesUsed_=t; } void OsiCut::incrementTimesUsed() { timesUsed_++; } int OsiCut::timesUsed() const { return timesUsed_; } void OsiCut::setTimesTested( int t ) { timesTested_=t; } void OsiCut::incrementTimesTested() { timesTested_++; } int OsiCut::timesTested() const{ return timesTested_; } #endif //---------------------------------------------------------------- // == operator //------------------------------------------------------------------- bool OsiCut::operator==(const OsiCut &rhs) const { return effectiveness() == rhs.effectiveness(); } bool OsiCut::operator!=(const OsiCut &rhs) const { return !((*this) == rhs); } bool OsiCut::operator<(const OsiCut &rhs) const { return effectiveness() < rhs.effectiveness(); } bool OsiCut::operator>(const OsiCut &rhs) const { return effectiveness() > rhs.effectiveness(); } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/config_default.h0000644000175200017520000000240012101340333016232 0ustar coincoin /* include the COIN-OR-wide system specific configure header */ #include "configall_system.h" /* include the public project specific macros */ #include "config_osi_default.h" /***************************************************************************/ /* HERE DEFINE THE PROJECT SPECIFIC MACROS */ /* These are only in effect in a setting that doesn't use configure */ /***************************************************************************/ /* Define to the debug sanity check level (0 is no test) */ #define COIN_OSI_CHECKLEVEL 0 /* Define to the debug verbosity level (0 is no output) */ #define COIN_OSI_VERBOSITY 0 /* Define to 1 if the CoinUtils package is used. * Don't undef this unless you really know what you're doing. */ #define COIN_HAS_COINUTILS 1 /* Define to 1 if the Cplex package is used */ /* #define COIN_HAS_CPX 1 */ /* Define to 1 if the Glpk package is used */ /* #define COIN_HAS_GLPK 1 */ /* Define to 1 if the Gurobi package is used */ /* #define COIN_HAS_GRB 1 */ /* Define to 1 if the Mosek package is used */ /* #define COIN_HAS_MSK 1 */ /* Define to 1 if the SoPlex package is used */ /* #define COIN_HAS_SPX 1 */ /* Define to 1 if the Xpress package is used */ /* #define COIN_HAS_XPR 1 */ DyLP-1.10.4/Osi/src/Osi/format-source.sh0000755000175200017520000000100313414504051016242 0ustar coincoin# script to format source code and include (if not included yet), # vim formatting settings (which are automatically loaded by vim) # Haroldo - 2019 for file in *.[ch]pp; do sourceName=`basename $file` echo formatting "$sourceName" clang-format -i -style=file $file # adding vim modeline if not included yet if ! grep -q "/* vi: softtabstop=" $file; then echo '' >> $file echo '/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2' >> $file echo '*/' >> $file fi done DyLP-1.10.4/Osi/src/Osi/OsiPresolve.hpp0000644000175200017520000002270613414504051016115 0ustar coincoin// Copyright (C) 2003, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiPresolve_H #define OsiPresolve_H #include "OsiSolverInterface.hpp" class CoinPresolveAction; #include "CoinPresolveMatrix.hpp" /*! \class OsiPresolve \brief OSI interface to COIN problem simplification capabilities COIN provides a number of classes which implement problem simplification algorithms (CoinPresolveAction, CoinPrePostsolveMatrix, and derived classes). The model of operation is as follows:
  • Create a copy of the original problem.
  • Subject the copy to a series of transformations (the presolve methods) to produce a presolved model. Each transformation is also expected to provide a method to reverse the transformation (the postsolve method). The postsolve methods are collected in a linked list; the postsolve method for the final presolve transformation is at the head of the list.
  • Hand the presolved problem to the solver for optimization.
  • Apply the collected postsolve methods to the presolved problem and solution, restating the solution in terms of the original problem.
The COIN presolve algorithms are unaware of OSI. The OsiPresolve class takes care of the interface. Given an OsiSolverInterface \c origModel, it will take care of creating a clone properly loaded with the presolved problem and ready for optimization. After optimization, it will apply postsolve transformations and load the result back into \c origModel. Assuming a problem has been loaded into an \c OsiSolverInterface \c origModel, a bare-bones application looks like this: \code OsiPresolve pinfo ; OsiSolverInterface *presolvedModel ; // Return an OsiSolverInterface loaded with the presolved problem. presolvedModel = pinfo.presolvedModel(*origModel,1.0e-8,false,numberPasses) ; presolvedModel->initialSolve() ; // Restate the solution and load it back into origModel. pinfo.postsolve(true) ; delete presolvedModel ; \endcode */ class OsiPresolve { public: /// Default constructor (empty object) OsiPresolve(); /// Virtual destructor virtual ~OsiPresolve(); /*! \brief Create a new OsiSolverInterface loaded with the presolved problem. This method implements the first two steps described in the class documentation. It clones \c origModel and applies presolve transformations, storing the resulting list of postsolve transformations. It returns a pointer to a new OsiSolverInterface loaded with the presolved problem, or NULL if the problem is infeasible or unbounded. If \c keepIntegers is true then bounds may be tightened in the original. Bounds will be moved by up to \c feasibilityTolerance to try and stay feasible. When \c doStatus is true, the current solution will be transformed to match the presolved model. This should be paired with postsolve(). It is up to the client to destroy the returned OsiSolverInterface, after calling postsolve(). This method is virtual. Override this method if you need to customize the steps of creating a model to apply presolve transformations. In some sense, a wrapper for presolve(CoinPresolveMatrix*). */ virtual OsiSolverInterface *presolvedModel(OsiSolverInterface &origModel, double feasibilityTolerance = 0.0, bool keepIntegers = true, int numberPasses = 5, const char *prohibited = NULL, bool doStatus = true, const char *rowProhibited = NULL); /*! \brief Restate the solution to the presolved problem in terms of the original problem and load it into the original model. postsolve() restates the solution in terms of the original problem and updates the original OsiSolverInterface supplied to presolvedModel(). If the problem has not been solved to optimality, there are no guarantees. If you are using an algorithm like simplex that has a concept of a basic solution, then set updateStatus The advantage of going back to the original problem is that it will be exactly as it was, i.e., 0.0 will not become 1.0e-19. Note that if you modified the original problem after presolving, then you must ``undo'' these modifications before calling postsolve(). In some sense, a wrapper for postsolve(CoinPostsolveMatrix&). */ virtual void postsolve(bool updateStatus = true); /*! \brief Return a pointer to the presolved model. */ OsiSolverInterface *model() const; /// Return a pointer to the original model OsiSolverInterface *originalModel() const; /// Set the pointer to the original model void setOriginalModel(OsiSolverInterface *model); /// Return a pointer to the original columns const int *originalColumns() const; /// Return a pointer to the original rows const int *originalRows() const; /// Return number of rows in original model inline int getNumRows() const { return nrows_; } /// Return number of columns in original model inline int getNumCols() const { return ncols_; } /** "Magic" number. If this is non-zero then any elements with this value may change and so presolve is very limited in what can be done to the row and column. This is for non-linear problems. */ inline void setNonLinearValue(double value) { nonLinearValue_ = value; } inline double nonLinearValue() const { return nonLinearValue_; } /*! \brief Fine control over presolve actions Set/clear the following bits to allow or suppress actions: - 0x01 allow duplicate column processing on integer columns and dual stuff on integers - 0x02 switch off actions which can change +1 to something else (doubleton, tripleton, implied free) - 0x04 allow transfer of costs from singletons and between integer variables (when advantageous) - 0x08 do not allow x+y+z=1 transform - 0x10 allow actions that don't easily unroll - 0x20 allow dubious gub element reduction GUB element reduction is only partially implemented in CoinPresolve (see gubrow_action) and willl cause an abort at postsolve. It's not clear what's meant by `dual stuff on integers'. -- lh, 110605 -- */ inline void setPresolveActions(int action) { presolveActions_ = (presolveActions_ & 0xffff0000) | (action & 0xffff); } /// Get presolved model inline OsiSolverInterface *presolvedModel() const { return presolvedModel_; } /// Set presolved model inline void setPresolvedModel(OsiSolverInterface *presolvedModel) { presolvedModel_ = presolvedModel; } private: /*! Original model (solver interface loaded with the original problem). Must not be destroyed until after postsolve(). */ OsiSolverInterface *originalModel_; /*! Presolved model (solver interface loaded with the presolved problem) Must be destroyed by the client (using delete) after postsolve(). */ OsiSolverInterface *presolvedModel_; /*! "Magic" number. If this is non-zero then any elements with this value may change and so presolve is very limited in what can be done to the row and column. This is for non-linear problems. One could also allow for cases where sign of coefficient is known. */ double nonLinearValue_; /// Original column numbers int *originalColumn_; /// Original row numbers int *originalRow_; /// The list of transformations applied. const CoinPresolveAction *paction_; /*! \brief Number of columns in original model. The problem will expand back to its former size as postsolve transformations are applied. It is efficient to allocate data structures for the final size of the problem rather than expand them as needed. */ int ncols_; /*! \brief Number of rows in original model. */ int nrows_; /*! \brief Number of nonzero matrix coefficients in the original model. */ CoinBigIndex nelems_; /** Whether we want to skip dual part of presolve etc. 1 bit allows duplicate column processing on integer columns and dual stuff on integers 4 transfers costs to integer variables */ int presolveActions_; /// Number of major passes int numberPasses_; protected: /*! \brief Apply presolve transformations to the problem. Handles the core activity of applying presolve transformations. If you want to apply the individual presolve routines differently, or perhaps add your own to the mix, define a derived class and override this method */ virtual const CoinPresolveAction *presolve(CoinPresolveMatrix *prob); /*! \brief Reverse presolve transformations to recover the solution to the original problem. Handles the core activity of applying postsolve transformations. Postsolving is pretty generic; just apply the transformations in reverse order. You will probably only be interested in overriding this method if you want to add code to test for consistency while debugging new presolve techniques. */ virtual void postsolve(CoinPostsolveMatrix &prob); /*! \brief Destroys queued postsolve actions. E.g., when presolve() determines the problem is infeasible, so that it will not be necessary to actually solve the presolved problem and convert the result back to the original problem. */ void gutsOfDestroy(); }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/config_osi.h.in0000644000175200017520000000052211573730114016024 0ustar coincoin/* src/Osi/config_osi.h.in. */ #ifndef __CONFIG_OSI_H__ #define __CONFIG_OSI_H__ /* Version number of project */ #undef OSI_VERSION /* Major Version number of project */ #undef OSI_VERSION_MAJOR /* Minor Version number of project */ #undef OSI_VERSION_MINOR /* Release Version number of project */ #undef OSI_VERSION_RELEASE #endif DyLP-1.10.4/Osi/src/Osi/OsiBranchingObject.cpp0000644000175200017520000015774313414504051017345 0ustar coincoin// Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include #include #include #include //#define OSI_DEBUG #include "OsiSolverInterface.hpp" #include "OsiBranchingObject.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedMatrix.hpp" #include "CoinSort.hpp" #include "CoinError.hpp" #include "CoinFinite.hpp" // Default Constructor OsiObject::OsiObject() : infeasibility_(0.0) , whichWay_(0) , numberWays_(2) , priority_(1000) { } // Destructor OsiObject::~OsiObject() { } // Copy constructor OsiObject::OsiObject(const OsiObject &rhs) { infeasibility_ = rhs.infeasibility_; whichWay_ = rhs.whichWay_; priority_ = rhs.priority_; numberWays_ = rhs.numberWays_; } // Assignment operator OsiObject & OsiObject::operator=(const OsiObject &rhs) { if (this != &rhs) { infeasibility_ = rhs.infeasibility_; whichWay_ = rhs.whichWay_; priority_ = rhs.priority_; numberWays_ = rhs.numberWays_; } return *this; } // Return "up" estimate (default 1.0e-5) double OsiObject::upEstimate() const { return 1.0e-5; } // Return "down" estimate (default 1.0e-5) double OsiObject::downEstimate() const { return 1.0e-5; } // Column number if single column object -1 otherwise int OsiObject::columnNumber() const { return -1; } // Infeasibility - large is 0.5 double OsiObject::infeasibility(const OsiSolverInterface *solver, int &preferredWay) const { // Can't guarantee has matrix OsiBranchingInformation info(solver, false, false); return infeasibility(&info, preferredWay); } // This does NOT set mutable stuff double OsiObject::checkInfeasibility(const OsiBranchingInformation *info) const { int way; double saveInfeasibility = infeasibility_; short int saveWhichWay = whichWay_; double value = infeasibility(info, way); infeasibility_ = saveInfeasibility; whichWay_ = saveWhichWay; return value; } /* For the variable(s) referenced by the object, look at the current solution and set bounds to match the solution. Returns measure of how much it had to move solution to make feasible */ double OsiObject::feasibleRegion(OsiSolverInterface *solver) const { // Can't guarantee has matrix OsiBranchingInformation info(solver, false, false); return feasibleRegion(solver, &info); } // Default Constructor OsiObject2::OsiObject2() : OsiObject() , preferredWay_(-1) , otherInfeasibility_(0.0) { } // Destructor OsiObject2::~OsiObject2() { } // Copy constructor OsiObject2::OsiObject2(const OsiObject2 &rhs) : OsiObject(rhs) , preferredWay_(rhs.preferredWay_) , otherInfeasibility_(rhs.otherInfeasibility_) { } // Assignment operator OsiObject2 & OsiObject2::operator=(const OsiObject2 &rhs) { if (this != &rhs) { OsiObject::operator=(rhs); preferredWay_ = rhs.preferredWay_; otherInfeasibility_ = rhs.otherInfeasibility_; } return *this; } // Default Constructor OsiBranchingObject::OsiBranchingObject() { originalObject_ = NULL; branchIndex_ = 0; value_ = 0.0; numberBranches_ = 2; } // Useful constructor OsiBranchingObject::OsiBranchingObject(OsiSolverInterface *, double value) { originalObject_ = NULL; branchIndex_ = 0; value_ = value; numberBranches_ = 2; } // Copy constructor OsiBranchingObject::OsiBranchingObject(const OsiBranchingObject &rhs) { originalObject_ = rhs.originalObject_; branchIndex_ = rhs.branchIndex_; value_ = rhs.value_; numberBranches_ = rhs.numberBranches_; } // Assignment operator OsiBranchingObject & OsiBranchingObject::operator=(const OsiBranchingObject &rhs) { if (this != &rhs) { originalObject_ = rhs.originalObject_; branchIndex_ = rhs.branchIndex_; value_ = rhs.value_; numberBranches_ = rhs.numberBranches_; } return *this; } // Destructor OsiBranchingObject::~OsiBranchingObject() { } // For debug int OsiBranchingObject::columnNumber() const { if (originalObject_) return originalObject_->columnNumber(); else return -1; } /** Default Constructor */ OsiBranchingInformation::OsiBranchingInformation() : objectiveValue_(COIN_DBL_MAX) , cutoff_(COIN_DBL_MAX) , direction_(COIN_DBL_MAX) , integerTolerance_(1.0e-7) , primalTolerance_(1.0e-7) , timeRemaining_(COIN_DBL_MAX) , defaultDual_(-1.0) , solver_(NULL) , numberColumns_(0) , lower_(NULL) , solution_(NULL) , upper_(NULL) , hotstartSolution_(NULL) , pi_(NULL) , rowActivity_(NULL) , objective_(NULL) , rowLower_(NULL) , rowUpper_(NULL) , elementByColumn_(NULL) , columnStart_(NULL) , columnLength_(NULL) , row_(NULL) , usefulRegion_(NULL) , indexRegion_(NULL) , numberSolutions_(0) , numberBranchingSolutions_(0) , depth_(0) , owningSolution_(false) { } /** Useful constructor */ OsiBranchingInformation::OsiBranchingInformation(const OsiSolverInterface *solver, bool /*normalSolver*/, bool owningSolution) : timeRemaining_(COIN_DBL_MAX) , defaultDual_(-1.0) , solver_(solver) , hotstartSolution_(NULL) , usefulRegion_(NULL) , indexRegion_(NULL) , numberSolutions_(0) , numberBranchingSolutions_(0) , depth_(0) , owningSolution_(owningSolution) { direction_ = solver_->getObjSense(); objectiveValue_ = solver_->getObjValue(); objectiveValue_ *= direction_; solver_->getDblParam(OsiDualObjectiveLimit, cutoff_); cutoff_ *= direction_; integerTolerance_ = solver_->getIntegerTolerance(); solver_->getDblParam(OsiPrimalTolerance, primalTolerance_); numberColumns_ = solver_->getNumCols(); lower_ = solver_->getColLower(); if (owningSolution_) solution_ = CoinCopyOfArray(solver_->getColSolution(), numberColumns_); else solution_ = solver_->getColSolution(); upper_ = solver_->getColUpper(); pi_ = solver_->getRowPrice(); rowActivity_ = solver_->getRowActivity(); objective_ = solver_->getObjCoefficients(); rowLower_ = solver_->getRowLower(); rowUpper_ = solver_->getRowUpper(); const CoinPackedMatrix *matrix = solver_->getMatrixByCol(); if (matrix) { // Column copy of matrix if matrix exists elementByColumn_ = matrix->getElements(); row_ = matrix->getIndices(); columnStart_ = matrix->getVectorStarts(); columnLength_ = matrix->getVectorLengths(); } else { // Matrix does not exist elementByColumn_ = NULL; row_ = NULL; columnStart_ = NULL; columnLength_ = NULL; } } // Copy constructor OsiBranchingInformation::OsiBranchingInformation(const OsiBranchingInformation &rhs) { objectiveValue_ = rhs.objectiveValue_; cutoff_ = rhs.cutoff_; direction_ = rhs.direction_; integerTolerance_ = rhs.integerTolerance_; primalTolerance_ = rhs.primalTolerance_; timeRemaining_ = rhs.timeRemaining_; defaultDual_ = rhs.defaultDual_; solver_ = rhs.solver_; numberColumns_ = rhs.numberColumns_; lower_ = rhs.lower_; owningSolution_ = rhs.owningSolution_; if (owningSolution_) solution_ = CoinCopyOfArray(rhs.solution_, numberColumns_); else solution_ = rhs.solution_; upper_ = rhs.upper_; hotstartSolution_ = rhs.hotstartSolution_; pi_ = rhs.pi_; rowActivity_ = rhs.rowActivity_; objective_ = rhs.objective_; rowLower_ = rhs.rowLower_; rowUpper_ = rhs.rowUpper_; elementByColumn_ = rhs.elementByColumn_; row_ = rhs.row_; columnStart_ = rhs.columnStart_; columnLength_ = rhs.columnLength_; usefulRegion_ = rhs.usefulRegion_; assert(!usefulRegion_); indexRegion_ = rhs.indexRegion_; numberSolutions_ = rhs.numberSolutions_; numberBranchingSolutions_ = rhs.numberBranchingSolutions_; depth_ = rhs.depth_; } // Clone OsiBranchingInformation * OsiBranchingInformation::clone() const { return new OsiBranchingInformation(*this); } // Assignment operator OsiBranchingInformation & OsiBranchingInformation::operator=(const OsiBranchingInformation &rhs) { if (this != &rhs) { objectiveValue_ = rhs.objectiveValue_; cutoff_ = rhs.cutoff_; direction_ = rhs.direction_; integerTolerance_ = rhs.integerTolerance_; primalTolerance_ = rhs.primalTolerance_; timeRemaining_ = rhs.timeRemaining_; defaultDual_ = rhs.defaultDual_; numberColumns_ = rhs.numberColumns_; lower_ = rhs.lower_; owningSolution_ = rhs.owningSolution_; if (owningSolution_) { solution_ = CoinCopyOfArray(rhs.solution_, numberColumns_); delete[] solution_; } else { solution_ = rhs.solution_; } upper_ = rhs.upper_; hotstartSolution_ = rhs.hotstartSolution_; pi_ = rhs.pi_; rowActivity_ = rhs.rowActivity_; objective_ = rhs.objective_; rowLower_ = rhs.rowLower_; rowUpper_ = rhs.rowUpper_; elementByColumn_ = rhs.elementByColumn_; row_ = rhs.row_; columnStart_ = rhs.columnStart_; columnLength_ = rhs.columnLength_; usefulRegion_ = rhs.usefulRegion_; assert(!usefulRegion_); indexRegion_ = rhs.indexRegion_; numberSolutions_ = rhs.numberSolutions_; numberBranchingSolutions_ = rhs.numberBranchingSolutions_; depth_ = rhs.depth_; } return *this; } // Destructor OsiBranchingInformation::~OsiBranchingInformation() { if (owningSolution_) delete[] solution_; } // Default Constructor OsiTwoWayBranchingObject::OsiTwoWayBranchingObject() : OsiBranchingObject() { firstBranch_ = 0; } // Useful constructor OsiTwoWayBranchingObject::OsiTwoWayBranchingObject(OsiSolverInterface *solver, const OsiObject *object, int way, double value) : OsiBranchingObject(solver, value) { originalObject_ = object; firstBranch_ = way; } // Copy constructor OsiTwoWayBranchingObject::OsiTwoWayBranchingObject(const OsiTwoWayBranchingObject &rhs) : OsiBranchingObject(rhs) { firstBranch_ = rhs.firstBranch_; } // Assignment operator OsiTwoWayBranchingObject & OsiTwoWayBranchingObject::operator=(const OsiTwoWayBranchingObject &rhs) { if (this != &rhs) { OsiBranchingObject::operator=(rhs); firstBranch_ = rhs.firstBranch_; } return *this; } // Destructor OsiTwoWayBranchingObject::~OsiTwoWayBranchingObject() { } /********* Simple Integers *******************************/ /** Default Constructor Equivalent to an unspecified binary variable. */ OsiSimpleInteger::OsiSimpleInteger() : OsiObject2() , originalLower_(0.0) , originalUpper_(1.0) , columnNumber_(-1) { } /** Useful constructor Loads actual upper & lower bounds for the specified variable. */ OsiSimpleInteger::OsiSimpleInteger(const OsiSolverInterface *solver, int iColumn) : OsiObject2() { columnNumber_ = iColumn; originalLower_ = solver->getColLower()[columnNumber_]; originalUpper_ = solver->getColUpper()[columnNumber_]; } // Useful constructor - passed solver index and original bounds OsiSimpleInteger::OsiSimpleInteger(int iColumn, double lower, double upper) : OsiObject2() { columnNumber_ = iColumn; originalLower_ = lower; originalUpper_ = upper; } // Copy constructor OsiSimpleInteger::OsiSimpleInteger(const OsiSimpleInteger &rhs) : OsiObject2(rhs) { columnNumber_ = rhs.columnNumber_; originalLower_ = rhs.originalLower_; originalUpper_ = rhs.originalUpper_; } // Clone OsiObject * OsiSimpleInteger::clone() const { return new OsiSimpleInteger(*this); } // Assignment operator OsiSimpleInteger & OsiSimpleInteger::operator=(const OsiSimpleInteger &rhs) { if (this != &rhs) { OsiObject2::operator=(rhs); columnNumber_ = rhs.columnNumber_; originalLower_ = rhs.originalLower_; originalUpper_ = rhs.originalUpper_; } return *this; } // Destructor OsiSimpleInteger::~OsiSimpleInteger() { } /* Reset variable bounds to their original values. Bounds may be tightened, so it may be good to be able to reset them to their original values. */ void OsiSimpleInteger::resetBounds(const OsiSolverInterface *solver) { originalLower_ = solver->getColLower()[columnNumber_]; originalUpper_ = solver->getColUpper()[columnNumber_]; } // Redoes data when sequence numbers change void OsiSimpleInteger::resetSequenceEtc(int numberColumns, const int *originalColumns) { int i; for (i = 0; i < numberColumns; i++) { if (originalColumns[i] == columnNumber_) break; } if (i < numberColumns) columnNumber_ = i; else abort(); // should never happen } // Infeasibility - large is 0.5 double OsiSimpleInteger::infeasibility(const OsiBranchingInformation *info, int &whichWay) const { double value = info->solution_[columnNumber_]; value = CoinMax(value, info->lower_[columnNumber_]); value = CoinMin(value, info->upper_[columnNumber_]); double nearest = floor(value + (1.0 - 0.5)); if (nearest > value) { whichWay = 1; } else { whichWay = 0; } infeasibility_ = fabs(value - nearest); double returnValue = infeasibility_; if (infeasibility_ <= info->integerTolerance_) { otherInfeasibility_ = 1.0; returnValue = 0.0; } else if (info->defaultDual_ < 0.0) { otherInfeasibility_ = 1.0 - infeasibility_; } else { const double *pi = info->pi_; const double *activity = info->rowActivity_; const double *lower = info->rowLower_; const double *upper = info->rowUpper_; const double *element = info->elementByColumn_; const int *row = info->row_; const CoinBigIndex *columnStart = info->columnStart_; const int *columnLength = info->columnLength_; double direction = info->direction_; double downMovement = value - floor(value); double upMovement = 1.0 - downMovement; double valueP = info->objective_[columnNumber_] * direction; CoinBigIndex start = columnStart[columnNumber_]; CoinBigIndex end = start + columnLength[columnNumber_]; double upEstimate = 0.0; double downEstimate = 0.0; if (valueP > 0.0) upEstimate = valueP * upMovement; else downEstimate -= valueP * downMovement; double tolerance = info->primalTolerance_; for (CoinBigIndex j = start; j < end; j++) { int iRow = row[j]; if (lower[iRow] < -1.0e20) assert(pi[iRow] <= 1.0e-4); if (upper[iRow] > 1.0e20) assert(pi[iRow] >= -1.0e-4); valueP = pi[iRow] * direction; double el2 = element[j]; double value2 = valueP * el2; double u = 0.0; double d = 0.0; if (value2 > 0.0) u = value2; else d = -value2; // if up makes infeasible then make at least default double newUp = activity[iRow] + upMovement * el2; if (newUp > upper[iRow] + tolerance || newUp < lower[iRow] - tolerance) u = CoinMax(u, info->defaultDual_); upEstimate += u * upMovement; // if down makes infeasible then make at least default double newDown = activity[iRow] - downMovement * el2; if (newDown > upper[iRow] + tolerance || newDown < lower[iRow] - tolerance) d = CoinMax(d, info->defaultDual_); downEstimate += d * downMovement; } if (downEstimate >= upEstimate) { infeasibility_ = CoinMax(1.0e-12, upEstimate); otherInfeasibility_ = CoinMax(1.0e-12, downEstimate); whichWay = 1; } else { infeasibility_ = CoinMax(1.0e-12, downEstimate); otherInfeasibility_ = CoinMax(1.0e-12, upEstimate); whichWay = 0; } returnValue = infeasibility_; } if (preferredWay_ >= 0 && returnValue) whichWay = preferredWay_; whichWay_ = static_cast< short int >(whichWay); return returnValue; } // This looks at solution and sets bounds to contain solution /** More precisely: it first forces the variable within the existing bounds, and then tightens the bounds to fix the variable at the nearest integer value. */ double OsiSimpleInteger::feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const { double value = info->solution_[columnNumber_]; double newValue = CoinMax(value, info->lower_[columnNumber_]); newValue = CoinMin(newValue, info->upper_[columnNumber_]); newValue = floor(newValue + 0.5); solver->setColLower(columnNumber_, newValue); solver->setColUpper(columnNumber_, newValue); return fabs(value - newValue); } /* Column number if single column object -1 otherwise, so returns >= 0 Used by heuristics */ int OsiSimpleInteger::columnNumber() const { return columnNumber_; } // Creates a branching object OsiBranchingObject * OsiSimpleInteger::createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const { double value = info->solution_[columnNumber_]; value = CoinMax(value, info->lower_[columnNumber_]); value = CoinMin(value, info->upper_[columnNumber_]); assert(info->upper_[columnNumber_] > info->lower_[columnNumber_]); #ifndef NDEBUG double nearest = floor(value + 0.5); assert(fabs(value - nearest) > info->integerTolerance_); #endif OsiBranchingObject *branch = new OsiIntegerBranchingObject(solver, this, way, value); return branch; } // Return "down" estimate double OsiSimpleInteger::downEstimate() const { if (whichWay_) return 1.0 - infeasibility_; else return infeasibility_; } // Return "up" estimate double OsiSimpleInteger::upEstimate() const { if (!whichWay_) return 1.0 - infeasibility_; else return infeasibility_; } // Default Constructor OsiIntegerBranchingObject::OsiIntegerBranchingObject() : OsiTwoWayBranchingObject() { down_[0] = 0.0; down_[1] = 0.0; up_[0] = 0.0; up_[1] = 0.0; } // Useful constructor OsiIntegerBranchingObject::OsiIntegerBranchingObject(OsiSolverInterface *solver, const OsiSimpleInteger *object, int way, double value) : OsiTwoWayBranchingObject(solver, object, way, value) { int iColumn = object->columnNumber(); down_[0] = solver->getColLower()[iColumn]; down_[1] = floor(value_); up_[0] = ceil(value_); up_[1] = solver->getColUpper()[iColumn]; } /* Create a standard floor/ceiling branch object Specifies a simple two-way branch in a more flexible way. One arm of the branch will be lb <= x <= downUpperBound, the other upLowerBound <= x <= ub. Specify way = -1 to set the object state to perform the down arm first, way = 1 for the up arm. */ OsiIntegerBranchingObject::OsiIntegerBranchingObject(OsiSolverInterface *solver, const OsiSimpleInteger *object, int way, double value, double downUpperBound, double upLowerBound) : OsiTwoWayBranchingObject(solver, object, way, value) { int iColumn = object->columnNumber(); down_[0] = solver->getColLower()[iColumn]; down_[1] = downUpperBound; up_[0] = upLowerBound; up_[1] = solver->getColUpper()[iColumn]; } // Copy constructor OsiIntegerBranchingObject::OsiIntegerBranchingObject(const OsiIntegerBranchingObject &rhs) : OsiTwoWayBranchingObject(rhs) { down_[0] = rhs.down_[0]; down_[1] = rhs.down_[1]; up_[0] = rhs.up_[0]; up_[1] = rhs.up_[1]; } // Assignment operator OsiIntegerBranchingObject & OsiIntegerBranchingObject::operator=(const OsiIntegerBranchingObject &rhs) { if (this != &rhs) { OsiTwoWayBranchingObject::operator=(rhs); down_[0] = rhs.down_[0]; down_[1] = rhs.down_[1]; up_[0] = rhs.up_[0]; up_[1] = rhs.up_[1]; } return *this; } OsiBranchingObject * OsiIntegerBranchingObject::clone() const { return (new OsiIntegerBranchingObject(*this)); } // Destructor OsiIntegerBranchingObject::~OsiIntegerBranchingObject() { } /* Perform a branch by adjusting the bounds of the specified variable. Note that each arm of the branch advances the object to the next arm by advancing the value of branchIndex_. Providing new values for the variable's lower and upper bounds for each branching direction gives a little bit of additional flexibility and will be easily extensible to multi-way branching. Returns change in guessed objective on next branch */ double OsiIntegerBranchingObject::branch(OsiSolverInterface *solver) { const OsiSimpleInteger *obj = dynamic_cast< const OsiSimpleInteger * >(originalObject_); assert(obj); int iColumn = obj->columnNumber(); double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; int way = (!branchIndex_) ? (2 * firstBranch_ - 1) : -(2 * firstBranch_ - 1); if (0) { printf("branching %s on %d bounds %g %g / %g %g\n", (way == -1) ? "down" : "up", iColumn, down_[0], down_[1], up_[0], up_[1]); const double *lower = solver->getColLower(); const double *upper = solver->getColUpper(); for (int i = 0; i < 8; i++) printf(" [%d (%g,%g)]", i, lower[i], upper[i]); printf("\n"); } if (way < 0) { #ifdef OSI_DEBUG { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("branching down on var %d: [%g,%g] => [%g,%g]\n", iColumn, olb, oub, down_[0], down_[1]); } #endif solver->setColLower(iColumn, down_[0]); solver->setColUpper(iColumn, down_[1]); } else { #ifdef OSI_DEBUG { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("branching up on var %d: [%g,%g] => [%g,%g]\n", iColumn, olb, oub, up_[0], up_[1]); } #endif solver->setColLower(iColumn, up_[0]); solver->setColUpper(iColumn, up_[1]); } double nlb = solver->getColLower()[iColumn]; if (nlb < olb) { #ifndef NDEBUG printf("bad lb change for column %d from %g to %g\n", iColumn, olb, nlb); #endif solver->setColLower(iColumn, olb); } double nub = solver->getColUpper()[iColumn]; if (nub > oub) { #ifndef NDEBUG printf("bad ub change for column %d from %g to %g\n", iColumn, oub, nub); #endif solver->setColUpper(iColumn, oub); } #ifndef NDEBUG if (nlb < olb + 1.0e-8 && nub > oub - 1.0e-8) printf("bad null change for column %d - bounds %g,%g\n", iColumn, olb, oub); #endif branchIndex_++; return 0.0; } // Print what would happen void OsiIntegerBranchingObject::print(const OsiSolverInterface *solver) { const OsiSimpleInteger *obj = dynamic_cast< const OsiSimpleInteger * >(originalObject_); assert(obj); int iColumn = obj->columnNumber(); int way = (!branchIndex_) ? (2 * firstBranch_ - 1) : -(2 * firstBranch_ - 1); if (way < 0) { { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("OsiInteger would branch down on var %d : [%g,%g] => [%g,%g]\n", iColumn, olb, oub, down_[0], down_[1]); } } else { { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("OsiInteger would branch up on var %d : [%g,%g] => [%g,%g]\n", iColumn, olb, oub, up_[0], up_[1]); } } } // Default Constructor OsiSOS::OsiSOS() : OsiObject2() , members_(NULL) , weights_(NULL) , numberMembers_(0) , sosType_(-1) , integerValued_(false) { } // Useful constructor (which are indices) OsiSOS::OsiSOS(const OsiSolverInterface *, int numberMembers, const int *which, const double *weights, int type) : OsiObject2() , numberMembers_(numberMembers) , sosType_(type) { integerValued_ = type == 1; // not strictly true - should check problem if (numberMembers_) { members_ = new int[numberMembers_]; weights_ = new double[numberMembers_]; memcpy(members_, which, numberMembers_ * sizeof(int)); if (weights) { memcpy(weights_, weights, numberMembers_ * sizeof(double)); } else { for (int i = 0; i < numberMembers_; i++) weights_[i] = i; } // sort so weights increasing CoinSort_2(weights_, weights_ + numberMembers_, members_); double last = -COIN_DBL_MAX; int i; for (i = 0; i < numberMembers_; i++) { double possible = CoinMax(last + 1.0e-10, weights_[i]); weights_[i] = possible; last = possible; } } else { members_ = NULL; weights_ = NULL; } assert(sosType_ > 0 && sosType_ < 3); } // Copy constructor OsiSOS::OsiSOS(const OsiSOS &rhs) : OsiObject2(rhs) { numberMembers_ = rhs.numberMembers_; sosType_ = rhs.sosType_; integerValued_ = rhs.integerValued_; if (numberMembers_) { members_ = new int[numberMembers_]; weights_ = new double[numberMembers_]; memcpy(members_, rhs.members_, numberMembers_ * sizeof(int)); memcpy(weights_, rhs.weights_, numberMembers_ * sizeof(double)); } else { members_ = NULL; weights_ = NULL; } } // Clone OsiObject * OsiSOS::clone() const { return new OsiSOS(*this); } // Assignment operator OsiSOS & OsiSOS::operator=(const OsiSOS &rhs) { if (this != &rhs) { OsiObject2::operator=(rhs); delete[] members_; delete[] weights_; numberMembers_ = rhs.numberMembers_; sosType_ = rhs.sosType_; integerValued_ = rhs.integerValued_; if (numberMembers_) { members_ = new int[numberMembers_]; weights_ = new double[numberMembers_]; memcpy(members_, rhs.members_, numberMembers_ * sizeof(int)); memcpy(weights_, rhs.weights_, numberMembers_ * sizeof(double)); } else { members_ = NULL; weights_ = NULL; } } return *this; } // Destructor OsiSOS::~OsiSOS() { delete[] members_; delete[] weights_; } // Infeasibility - large is 0.5 double OsiSOS::infeasibility(const OsiBranchingInformation *info, int &whichWay) const { int j; int firstNonZero = -1; int lastNonZero = -1; int firstNonFixed = -1; int lastNonFixed = -1; const double *solution = info->solution_; //const double * lower = info->lower_; const double *upper = info->upper_; //double largestValue=0.0; double integerTolerance = info->integerTolerance_; double primalTolerance = info->primalTolerance_; double weight = 0.0; double sum = 0.0; // check bounds etc double lastWeight = -1.0e100; for (j = 0; j < numberMembers_; j++) { int iColumn = members_[j]; if (lastWeight >= weights_[j] - 1.0e-12) throw CoinError("Weights too close together in SOS", "infeasibility", "OsiSOS"); lastWeight = weights_[j]; if (upper[iColumn]) { double value = CoinMax(0.0, solution[iColumn]); if (value > integerTolerance) { // Possibly due to scaling a fixed variable might slip through #ifdef COIN_DEVELOP if (value > upper[iColumn] + 10.0 * primalTolerance) printf("** Variable %d (%d) has value %g and upper bound of %g\n", iColumn, j, value, upper[iColumn]); #endif if (value > upper[iColumn]) { value = upper[iColumn]; } sum += value; weight += weights_[j] * value; if (firstNonZero < 0) firstNonZero = j; lastNonZero = j; } if (firstNonFixed < 0) firstNonFixed = j; lastNonFixed = j; } } whichWay = 1; whichWay_ = 1; if (lastNonZero - firstNonZero >= sosType_) { // find where to branch assert(sum > 0.0); // probably best to use pseudo duals double value = lastNonZero - firstNonZero + 1; value *= 0.5 / static_cast< double >(numberMembers_); infeasibility_ = value; otherInfeasibility_ = 1.0 - value; if (info->defaultDual_ >= 0.0) { // Using pseudo shadow prices weight /= sum; int iWhere; for (iWhere = firstNonZero; iWhere < lastNonZero; iWhere++) if (weight < weights_[iWhere + 1]) break; assert(iWhere != lastNonZero); /* Complicated - infeasibility is being used for branching so we don't want estimate of satisfying set but of each way on branch. So let us suppose that all on side being fixed to 0 goes to closest */ int lastDown = iWhere; int firstUp = iWhere + 1; if (sosType_ == 2) { // SOS 2 - choose nearest if (weight - weights_[iWhere] >= weights_[iWhere + 1] - weight) lastDown++; // But make sure OK if (lastDown == firstNonFixed) { lastDown++; } else if (lastDown == lastNonFixed) { lastDown--; } firstUp = lastDown; } // Now get current contribution and compute weight for end points double weightDown = 0.0; double weightUp = 0.0; const double *element = info->elementByColumn_; const int *row = info->row_; const CoinBigIndex *columnStart = info->columnStart_; const int *columnLength = info->columnLength_; double direction = info->direction_; const double *objective = info->objective_; // Compute where we would move to double objValue = 0.0; double *useful = info->usefulRegion_; int *index = info->indexRegion_; int n = 0; for (j = firstNonZero; j <= lastNonZero; j++) { int iColumn = members_[j]; double multiplier = solution[iColumn]; if (j >= lastDown) weightDown += multiplier; if (j <= firstUp) weightUp += multiplier; if (multiplier > 0.0) { objValue += objective[iColumn] * multiplier; CoinBigIndex start = columnStart[iColumn]; CoinBigIndex end = start + columnLength[iColumn]; for (CoinBigIndex j = start; j < end; j++) { int iRow = row[j]; double value = element[j] * multiplier; if (useful[iRow]) { value += useful[iRow]; if (!value) value = 1.0e-100; } else { assert(value); index[n++] = iRow; } useful[iRow] = value; } } } if (sosType_ == 2) assert(fabs(weightUp + weightDown - sum - solution[members_[lastDown]]) < 1.0e-4); int startX[2]; int endX[2]; startX[0] = firstNonZero; startX[1] = firstUp; endX[0] = lastDown; endX[1] = lastNonZero; double fakeSolution[2]; int check[2]; fakeSolution[0] = weightDown; check[0] = members_[lastDown]; fakeSolution[1] = weightUp; check[1] = members_[firstUp]; const double *pi = info->pi_; const double *activity = info->rowActivity_; const double *lower = info->rowLower_; const double *upper = info->rowUpper_; int numberRows = info->solver_->getNumRows(); double *useful2 = useful + numberRows; int *index2 = index + numberRows; for (int i = 0; i < 2; i++) { double obj = 0.0; int n2 = 0; for (j = startX[i]; j <= endX[i]; j++) { int iColumn = members_[j]; double multiplier = solution[iColumn]; if (iColumn == check[i]) multiplier = fakeSolution[i]; if (multiplier > 0.0) { obj += objective[iColumn] * multiplier; CoinBigIndex start = columnStart[iColumn]; CoinBigIndex end = start + columnLength[iColumn]; for (CoinBigIndex j = start; j < end; j++) { int iRow = row[j]; double value = element[j] * multiplier; if (useful2[iRow]) { value += useful2[iRow]; if (!value) value = 1.0e-100; } else { assert(value); index2[n2++] = iRow; } useful2[iRow] = value; } } } // movement in objective obj = (obj - objValue) * direction; double estimate = (obj > 0.0) ? obj : 0.0; for (j = 0; j < n; j++) { int iRow = index[j]; // movement double movement = useful2[iRow] - useful[iRow]; useful[iRow] = 0.0; useful2[iRow] = 0.0; double valueP = pi[iRow] * direction; if (lower[iRow] < -1.0e20) assert(valueP <= 1.0e-4); if (upper[iRow] > 1.0e20) assert(valueP >= -1.0e-4); double value2 = valueP * movement; double thisEstimate = (value2 > 0.0) ? value2 : 0; // if makes infeasible then make at least default double newValue = activity[iRow] + movement; if (newValue > upper[iRow] + primalTolerance || newValue < lower[iRow] - primalTolerance) thisEstimate = CoinMax(thisEstimate, info->defaultDual_); estimate += thisEstimate; } for (j = 0; j < n2; j++) { int iRow = index2[j]; // movement double movement = useful2[iRow] - useful[iRow]; useful[iRow] = 0.0; useful2[iRow] = 0.0; if (movement) { double valueP = pi[iRow] * direction; if (lower[iRow] < -1.0e20) assert(valueP <= 1.0e-4); if (upper[iRow] > 1.0e20) assert(valueP >= -1.0e-4); double value2 = valueP * movement; double thisEstimate = (value2 > 0.0) ? value2 : 0; // if makes infeasible then make at least default double newValue = activity[iRow] + movement; if (newValue > upper[iRow] + primalTolerance || newValue < lower[iRow] - primalTolerance) thisEstimate = CoinMax(thisEstimate, info->defaultDual_); estimate += thisEstimate; } } // store in fakeSolution fakeSolution[i] = estimate; } double downEstimate = fakeSolution[0]; double upEstimate = fakeSolution[1]; if (downEstimate >= upEstimate) { infeasibility_ = CoinMax(1.0e-12, upEstimate); otherInfeasibility_ = CoinMax(1.0e-12, downEstimate); whichWay = 1; } else { infeasibility_ = CoinMax(1.0e-12, downEstimate); otherInfeasibility_ = CoinMax(1.0e-12, upEstimate); whichWay = 0; } whichWay_ = static_cast< short >(whichWay); value = infeasibility_; } return value; } else { infeasibility_ = 0.0; otherInfeasibility_ = 1.0; return 0.0; // satisfied } } // This looks at solution and sets bounds to contain solution double OsiSOS::feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const { int j; int firstNonZero = -1; int lastNonZero = -1; const double *solution = info->solution_; //const double * lower = info->lower_; const double *upper = info->upper_; double sum = 0.0; // Find largest one or pair double movement = 0.0; if (sosType_ == 1) { for (j = 0; j < numberMembers_; j++) { int iColumn = members_[j]; double value = CoinMax(0.0, solution[iColumn]); if (value > sum && upper[iColumn]) { firstNonZero = j; sum = value; } } lastNonZero = firstNonZero; } else { // type 2 for (j = 1; j < numberMembers_; j++) { int iColumn = members_[j]; int jColumn = members_[j - 1]; double value1 = CoinMax(0.0, solution[iColumn]); double value0 = CoinMax(0.0, solution[jColumn]); double value = value0 + value1; if (value > sum) { if (upper[iColumn] || upper[jColumn]) { firstNonZero = upper[jColumn] ? j - 1 : j; lastNonZero = upper[iColumn] ? j : j - 1; sum = value; } } } } for (j = 0; j < numberMembers_; j++) { if (j < firstNonZero || j > lastNonZero) { int iColumn = members_[j]; double value = CoinMax(0.0, solution[iColumn]); movement += value; solver->setColUpper(iColumn, 0.0); } } return movement; } // Redoes data when sequence numbers change void OsiSOS::resetSequenceEtc(int numberColumns, const int *originalColumns) { int n2 = 0; for (int j = 0; j < numberMembers_; j++) { int iColumn = members_[j]; int i; for (i = 0; i < numberColumns; i++) { if (originalColumns[i] == iColumn) break; } if (i < numberColumns) { members_[n2] = i; weights_[n2++] = weights_[j]; } } if (n2 < numberMembers_) { printf("** SOS number of members reduced from %d to %d!\n", numberMembers_, n2); numberMembers_ = n2; } } // Return "down" estimate double OsiSOS::downEstimate() const { if (whichWay_) return otherInfeasibility_; else return infeasibility_; } // Return "up" estimate double OsiSOS::upEstimate() const { if (!whichWay_) return otherInfeasibility_; else return infeasibility_; } // Creates a branching object OsiBranchingObject * OsiSOS::createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const { int j; const double *solution = info->solution_; double tolerance = info->primalTolerance_; const double *upper = info->upper_; int firstNonFixed = -1; int lastNonFixed = -1; int firstNonZero = -1; int lastNonZero = -1; double weight = 0.0; double sum = 0.0; for (j = 0; j < numberMembers_; j++) { int iColumn = members_[j]; if (upper[iColumn]) { double value = CoinMax(0.0, solution[iColumn]); sum += value; if (firstNonFixed < 0) firstNonFixed = j; lastNonFixed = j; if (value > tolerance) { weight += weights_[j] * value; if (firstNonZero < 0) firstNonZero = j; lastNonZero = j; } } } assert(lastNonZero - firstNonZero >= sosType_); // find where to branch assert(sum > 0.0); weight /= sum; int iWhere; double separator = 0.0; for (iWhere = firstNonZero; iWhere < lastNonZero; iWhere++) if (weight < weights_[iWhere + 1]) break; if (sosType_ == 1) { // SOS 1 separator = 0.5 * (weights_[iWhere] + weights_[iWhere + 1]); } else { // SOS 2 if (iWhere == lastNonFixed - 1) iWhere = lastNonFixed - 2; separator = weights_[iWhere + 1]; } // create object OsiBranchingObject *branch; branch = new OsiSOSBranchingObject(solver, this, way, separator); return branch; } // Default Constructor OsiSOSBranchingObject::OsiSOSBranchingObject() : OsiTwoWayBranchingObject() { } // Useful constructor OsiSOSBranchingObject::OsiSOSBranchingObject(OsiSolverInterface *solver, const OsiSOS *set, int way, double separator) : OsiTwoWayBranchingObject(solver, set, way, separator) { } // Copy constructor OsiSOSBranchingObject::OsiSOSBranchingObject(const OsiSOSBranchingObject &rhs) : OsiTwoWayBranchingObject(rhs) { } // Assignment operator OsiSOSBranchingObject & OsiSOSBranchingObject::operator=(const OsiSOSBranchingObject &rhs) { if (this != &rhs) { OsiTwoWayBranchingObject::operator=(rhs); } return *this; } OsiBranchingObject * OsiSOSBranchingObject::clone() const { return (new OsiSOSBranchingObject(*this)); } // Destructor OsiSOSBranchingObject::~OsiSOSBranchingObject() { } double OsiSOSBranchingObject::branch(OsiSolverInterface *solver) { const OsiSOS *set = dynamic_cast< const OsiSOS * >(originalObject_); assert(set); int way = (!branchIndex_) ? (2 * firstBranch_ - 1) : -(2 * firstBranch_ - 1); branchIndex_++; int numberMembers = set->numberMembers(); const int *which = set->members(); const double *weights = set->weights(); //const double * lower = solver->getColLower(); //const double * upper = solver->getColUpper(); // *** for way - up means fix all those in down section if (way < 0) { int i; for (i = 0; i < numberMembers; i++) { if (weights[i] > value_) break; } assert(i < numberMembers); for (; i < numberMembers; i++) solver->setColUpper(which[i], 0.0); } else { int i; for (i = 0; i < numberMembers; i++) { if (weights[i] >= value_) break; else solver->setColUpper(which[i], 0.0); } assert(i < numberMembers); } return 0.0; } // Print what would happen void OsiSOSBranchingObject::print(const OsiSolverInterface *solver) { const OsiSOS *set = dynamic_cast< const OsiSOS * >(originalObject_); assert(set); int way = (!branchIndex_) ? (2 * firstBranch_ - 1) : -(2 * firstBranch_ - 1); int numberMembers = set->numberMembers(); const int *which = set->members(); const double *weights = set->weights(); //const double * lower = solver->getColLower(); const double *upper = solver->getColUpper(); int first = numberMembers; int last = -1; int numberFixed = 0; int numberOther = 0; int i; for (i = 0; i < numberMembers; i++) { double bound = upper[which[i]]; if (bound) { first = CoinMin(first, i); last = CoinMax(last, i); } } // *** for way - up means fix all those in down section if (way < 0) { printf("SOS Down"); for (i = 0; i < numberMembers; i++) { double bound = upper[which[i]]; if (weights[i] > value_) break; else if (bound) numberOther++; } assert(i < numberMembers); for (; i < numberMembers; i++) { double bound = upper[which[i]]; if (bound) numberFixed++; } } else { printf("SOS Up"); for (i = 0; i < numberMembers; i++) { double bound = upper[which[i]]; if (weights[i] >= value_) break; else if (bound) numberFixed++; } assert(i < numberMembers); for (; i < numberMembers; i++) { double bound = upper[which[i]]; if (bound) numberOther++; } } printf(" - at %g, free range %d (%g) => %d (%g), %d would be fixed, %d other way\n", value_, which[first], weights[first], which[last], weights[last], numberFixed, numberOther); } /** Default Constructor */ OsiLotsize::OsiLotsize() : OsiObject2() , columnNumber_(-1) , rangeType_(0) , numberRanges_(0) , largestGap_(0) , bound_(NULL) , range_(0) { } /** Useful constructor Loads actual upper & lower bounds for the specified variable. */ OsiLotsize::OsiLotsize(const OsiSolverInterface *, int iColumn, int numberPoints, const double *points, bool range) : OsiObject2() { assert(numberPoints > 0); columnNumber_ = iColumn; // sort ranges int *sort = new int[numberPoints]; double *weight = new double[numberPoints]; int i; if (range) { rangeType_ = 2; } else { rangeType_ = 1; } for (i = 0; i < numberPoints; i++) { sort[i] = i; weight[i] = points[i * rangeType_]; } CoinSort_2(weight, weight + numberPoints, sort); numberRanges_ = 1; largestGap_ = 0; if (rangeType_ == 1) { bound_ = new double[numberPoints + 1]; bound_[0] = weight[0]; for (i = 1; i < numberPoints; i++) { if (weight[i] != weight[i - 1]) bound_[numberRanges_++] = weight[i]; } // and for safety bound_[numberRanges_] = bound_[numberRanges_ - 1]; for (i = 1; i < numberRanges_; i++) { largestGap_ = CoinMax(largestGap_, bound_[i] - bound_[i - 1]); } } else { bound_ = new double[2 * numberPoints + 2]; bound_[0] = points[sort[0] * 2]; bound_[1] = points[sort[0] * 2 + 1]; double hi = bound_[1]; assert(hi >= bound_[0]); for (i = 1; i < numberPoints; i++) { double thisLo = points[sort[i] * 2]; double thisHi = points[sort[i] * 2 + 1]; assert(thisHi >= thisLo); if (thisLo > hi) { bound_[2 * numberRanges_] = thisLo; bound_[2 * numberRanges_ + 1] = thisHi; numberRanges_++; hi = thisHi; } else { //overlap hi = CoinMax(hi, thisHi); bound_[2 * numberRanges_ - 1] = hi; } } // and for safety bound_[2 * numberRanges_] = bound_[2 * numberRanges_ - 2]; bound_[2 * numberRanges_ + 1] = bound_[2 * numberRanges_ - 1]; for (i = 1; i < numberRanges_; i++) { largestGap_ = CoinMax(largestGap_, bound_[2 * i] - bound_[2 * i - 1]); } } delete[] sort; delete[] weight; range_ = 0; } // Copy constructor OsiLotsize::OsiLotsize(const OsiLotsize &rhs) : OsiObject2(rhs) { columnNumber_ = rhs.columnNumber_; rangeType_ = rhs.rangeType_; numberRanges_ = rhs.numberRanges_; range_ = rhs.range_; largestGap_ = rhs.largestGap_; if (numberRanges_) { assert(rangeType_ > 0 && rangeType_ < 3); bound_ = new double[(numberRanges_ + 1) * rangeType_]; memcpy(bound_, rhs.bound_, (numberRanges_ + 1) * rangeType_ * sizeof(double)); } else { bound_ = NULL; } } // Clone OsiObject * OsiLotsize::clone() const { return new OsiLotsize(*this); } // Assignment operator OsiLotsize & OsiLotsize::operator=(const OsiLotsize &rhs) { if (this != &rhs) { OsiObject2::operator=(rhs); columnNumber_ = rhs.columnNumber_; rangeType_ = rhs.rangeType_; numberRanges_ = rhs.numberRanges_; largestGap_ = rhs.largestGap_; delete[] bound_; range_ = rhs.range_; if (numberRanges_) { assert(rangeType_ > 0 && rangeType_ < 3); bound_ = new double[(numberRanges_ + 1) * rangeType_]; memcpy(bound_, rhs.bound_, (numberRanges_ + 1) * rangeType_ * sizeof(double)); } else { bound_ = NULL; } } return *this; } // Destructor OsiLotsize::~OsiLotsize() { delete[] bound_; } /* Finds range of interest so value is feasible in range range_ or infeasible between hi[range_] and lo[range_+1]. Returns true if feasible. */ bool OsiLotsize::findRange(double value, double integerTolerance) const { assert(range_ >= 0 && range_ < numberRanges_ + 1); int iLo; int iHi; double infeasibility = 0.0; if (rangeType_ == 1) { if (value < bound_[range_] - integerTolerance) { iLo = 0; iHi = range_ - 1; } else if (value < bound_[range_] + integerTolerance) { return true; } else if (value < bound_[range_ + 1] - integerTolerance) { return false; } else { iLo = range_ + 1; iHi = numberRanges_ - 1; } // check lo and hi bool found = false; if (value > bound_[iLo] - integerTolerance && value < bound_[iLo + 1] + integerTolerance) { range_ = iLo; found = true; } else if (value > bound_[iHi] - integerTolerance && value < bound_[iHi + 1] + integerTolerance) { range_ = iHi; found = true; } else { range_ = (iLo + iHi) >> 1; } //points while (!found) { if (value < bound_[range_]) { if (value >= bound_[range_ - 1]) { // found range_--; break; } else { iHi = range_; } } else { if (value < bound_[range_ + 1]) { // found break; } else { iLo = range_; } } range_ = (iLo + iHi) >> 1; } if (value - bound_[range_] <= bound_[range_ + 1] - value) { infeasibility = value - bound_[range_]; } else { infeasibility = bound_[range_ + 1] - value; if (infeasibility < integerTolerance) range_++; } return (infeasibility < integerTolerance); } else { // ranges if (value < bound_[2 * range_] - integerTolerance) { iLo = 0; iHi = range_ - 1; } else if (value < bound_[2 * range_ + 1] + integerTolerance) { return true; } else if (value < bound_[2 * range_ + 2] - integerTolerance) { return false; } else { iLo = range_ + 1; iHi = numberRanges_ - 1; } // check lo and hi bool found = false; if (value > bound_[2 * iLo] - integerTolerance && value < bound_[2 * iLo + 2] - integerTolerance) { range_ = iLo; found = true; } else if (value >= bound_[2 * iHi] - integerTolerance) { range_ = iHi; found = true; } else { range_ = (iLo + iHi) >> 1; } //points while (!found) { if (value < bound_[2 * range_]) { if (value >= bound_[2 * range_ - 2]) { // found range_--; break; } else { iHi = range_; } } else { if (value < bound_[2 * range_ + 2]) { // found break; } else { iLo = range_; } } range_ = (iLo + iHi) >> 1; } if (value >= bound_[2 * range_] - integerTolerance && value <= bound_[2 * range_ + 1] + integerTolerance) infeasibility = 0.0; else if (value - bound_[2 * range_ + 1] < bound_[2 * range_ + 2] - value) { infeasibility = value - bound_[2 * range_ + 1]; } else { infeasibility = bound_[2 * range_ + 2] - value; } return (infeasibility < integerTolerance); } } /* Returns floor and ceiling */ void OsiLotsize::floorCeiling(double &floorLotsize, double &ceilingLotsize, double value, double tolerance) const { bool feasible = findRange(value, tolerance); if (rangeType_ == 1) { floorLotsize = bound_[range_]; ceilingLotsize = bound_[range_ + 1]; // may be able to adjust if (feasible && fabs(value - floorLotsize) > fabs(value - ceilingLotsize)) { floorLotsize = bound_[range_ + 1]; ceilingLotsize = bound_[range_ + 2]; } } else { // ranges assert(value >= bound_[2 * range_ + 1]); floorLotsize = bound_[2 * range_ + 1]; ceilingLotsize = bound_[2 * range_ + 2]; } } // Infeasibility - large is 0.5 double OsiLotsize::infeasibility(const OsiBranchingInformation *info, int &preferredWay) const { const double *solution = info->solution_; const double *lower = info->lower_; const double *upper = info->upper_; double value = solution[columnNumber_]; value = CoinMax(value, lower[columnNumber_]); value = CoinMin(value, upper[columnNumber_]); double integerTolerance = info->integerTolerance_; /*printf("%d %g %g %g %g\n",columnNumber_,value,lower[columnNumber_], solution[columnNumber_],upper[columnNumber_]);*/ assert(value >= bound_[0] - integerTolerance && value <= bound_[rangeType_ * numberRanges_ - 1] + integerTolerance); infeasibility_ = 0.0; bool feasible = findRange(value, integerTolerance); if (!feasible) { if (rangeType_ == 1) { if (value - bound_[range_] < bound_[range_ + 1] - value) { preferredWay = -1; infeasibility_ = value - bound_[range_]; otherInfeasibility_ = bound_[range_ + 1] - value; } else { preferredWay = 1; infeasibility_ = bound_[range_ + 1] - value; otherInfeasibility_ = value - bound_[range_]; } } else { // ranges if (value - bound_[2 * range_ + 1] < bound_[2 * range_ + 2] - value) { preferredWay = -1; infeasibility_ = value - bound_[2 * range_ + 1]; otherInfeasibility_ = bound_[2 * range_ + 2] - value; } else { preferredWay = 1; infeasibility_ = bound_[2 * range_ + 2] - value; otherInfeasibility_ = value - bound_[2 * range_ + 1]; } } } else { // always satisfied preferredWay = -1; otherInfeasibility_ = 1.0; } if (infeasibility_ < integerTolerance) infeasibility_ = 0.0; else infeasibility_ /= largestGap_; return infeasibility_; } /* Column number if single column object -1 otherwise, so returns >= 0 Used by heuristics */ int OsiLotsize::columnNumber() const { return columnNumber_; } /* Set bounds to contain the current solution. More precisely, for the variable associated with this object, take the value given in the current solution, force it within the current bounds if required, then set the bounds to fix the variable at the integer nearest the solution value. Returns amount it had to move variable. */ double OsiLotsize::feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const { const double *lower = solver->getColLower(); const double *upper = solver->getColUpper(); const double *solution = info->solution_; double value = solution[columnNumber_]; value = CoinMax(value, lower[columnNumber_]); value = CoinMin(value, upper[columnNumber_]); findRange(value, info->integerTolerance_); double nearest; if (rangeType_ == 1) { nearest = bound_[range_]; solver->setColLower(columnNumber_, nearest); solver->setColUpper(columnNumber_, nearest); } else { // ranges solver->setColLower(columnNumber_, bound_[2 * range_]); solver->setColUpper(columnNumber_, bound_[2 * range_ + 1]); if (value > bound_[2 * range_ + 1]) nearest = bound_[2 * range_ + 1]; else if (value < bound_[2 * range_]) nearest = bound_[2 * range_]; else nearest = value; } // Scaling may have moved it a bit // Lotsizing variables could be a lot larger #ifndef NDEBUG assert(fabs(value - nearest) <= (100.0 + 10.0 * fabs(nearest)) * info->integerTolerance_); #endif return fabs(value - nearest); } // Creates a branching object // Creates a branching object OsiBranchingObject * OsiLotsize::createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const { const double *solution = info->solution_; const double *lower = solver->getColLower(); const double *upper = solver->getColUpper(); double value = solution[columnNumber_]; value = CoinMax(value, lower[columnNumber_]); value = CoinMin(value, upper[columnNumber_]); assert(!findRange(value, info->integerTolerance_)); return new OsiLotsizeBranchingObject(solver, this, way, value); } /* Bounds may be tightened, so it may be good to be able to refresh the local copy of the original bounds. */ void OsiLotsize::resetBounds(const OsiSolverInterface *) { } // Return "down" estimate double OsiLotsize::downEstimate() const { if (whichWay_) return otherInfeasibility_; else return infeasibility_; } // Return "up" estimate double OsiLotsize::upEstimate() const { if (!whichWay_) return otherInfeasibility_; else return infeasibility_; } // Redoes data when sequence numbers change void OsiLotsize::resetSequenceEtc(int numberColumns, const int *originalColumns) { int i; for (i = 0; i < numberColumns; i++) { if (originalColumns[i] == columnNumber_) break; } if (i < numberColumns) columnNumber_ = i; else abort(); // should never happen } // Default Constructor OsiLotsizeBranchingObject::OsiLotsizeBranchingObject() : OsiTwoWayBranchingObject() { down_[0] = 0.0; down_[1] = 0.0; up_[0] = 0.0; up_[1] = 0.0; } // Useful constructor OsiLotsizeBranchingObject::OsiLotsizeBranchingObject(OsiSolverInterface *solver, const OsiLotsize *originalObject, int way, double value) : OsiTwoWayBranchingObject(solver, originalObject, way, value) { int iColumn = originalObject->columnNumber(); down_[0] = solver->getColLower()[iColumn]; double integerTolerance = solver->getIntegerTolerance(); originalObject->floorCeiling(down_[1], up_[0], value, integerTolerance); up_[1] = solver->getColUpper()[iColumn]; } // Copy constructor OsiLotsizeBranchingObject::OsiLotsizeBranchingObject(const OsiLotsizeBranchingObject &rhs) : OsiTwoWayBranchingObject(rhs) { down_[0] = rhs.down_[0]; down_[1] = rhs.down_[1]; up_[0] = rhs.up_[0]; up_[1] = rhs.up_[1]; } // Assignment operator OsiLotsizeBranchingObject & OsiLotsizeBranchingObject::operator=(const OsiLotsizeBranchingObject &rhs) { if (this != &rhs) { OsiTwoWayBranchingObject::operator=(rhs); down_[0] = rhs.down_[0]; down_[1] = rhs.down_[1]; up_[0] = rhs.up_[0]; up_[1] = rhs.up_[1]; } return *this; } OsiBranchingObject * OsiLotsizeBranchingObject::clone() const { return (new OsiLotsizeBranchingObject(*this)); } // Destructor OsiLotsizeBranchingObject::~OsiLotsizeBranchingObject() { } /* Perform a branch by adjusting the bounds of the specified variable. Note that each arm of the branch advances the object to the next arm by advancing the value of way_. Providing new values for the variable's lower and upper bounds for each branching direction gives a little bit of additional flexibility and will be easily extensible to multi-way branching. */ double OsiLotsizeBranchingObject::branch(OsiSolverInterface *solver) { const OsiLotsize *obj = dynamic_cast< const OsiLotsize * >(originalObject_); assert(obj); int iColumn = obj->columnNumber(); int way = (!branchIndex_) ? (2 * firstBranch_ - 1) : -(2 * firstBranch_ - 1); if (way < 0) { #ifdef OSI_DEBUG { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("branching down on var %d: [%g,%g] => [%g,%g]\n", iColumn, olb, oub, down_[0], down_[1]); } #endif solver->setColLower(iColumn, down_[0]); solver->setColUpper(iColumn, down_[1]); } else { #ifdef OSI_DEBUG { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("branching up on var %d: [%g,%g] => [%g,%g]\n", iColumn, olb, oub, up_[0], up_[1]); } #endif solver->setColLower(iColumn, up_[0]); solver->setColUpper(iColumn, up_[1]); } branchIndex_++; return 0.0; } // Print void OsiLotsizeBranchingObject::print(const OsiSolverInterface *solver) { const OsiLotsize *obj = dynamic_cast< const OsiLotsize * >(originalObject_); assert(obj); int iColumn = obj->columnNumber(); int way = (!branchIndex_) ? (2 * firstBranch_ - 1) : -(2 * firstBranch_ - 1); if (way < 0) { { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("branching down on var %d: [%g,%g] => [%g,%g]\n", iColumn, olb, oub, down_[0], down_[1]); } } else { { double olb, oub; olb = solver->getColLower()[iColumn]; oub = solver->getColUpper()[iColumn]; printf("branching up on var %d: [%g,%g] => [%g,%g]\n", iColumn, olb, oub, up_[0], up_[1]); } } } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiRowCut.cpp0000644000175200017520000002015013414504051015523 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include #include #include "CoinPragma.hpp" #include "CoinFinite.hpp" #include "OsiRowCut.hpp" #ifndef OSI_INLINE_ROWCUT_METHODS // //------------------------------------------------------------------- // // Set/Get lower & upper bounds // //------------------------------------------------------------------- double OsiRowCut::lb() const { return lb_; } void OsiRowCut::setLb(double lb) { lb_ = lb; } double OsiRowCut::ub() const { return ub_; } void OsiRowCut::setUb(double ub) { ub_ = ub; } //------------------------------------------------------------------- // Set row elements //------------------------------------------------------------------- void OsiRowCut::setRow(int size, const int *colIndices, const double *elements, bool testForDuplicateIndex) { row_.setVector(size, colIndices, elements, testForDuplicateIndex); } void OsiRowCut::setRow(const CoinPackedVector &v) { row_ = v; } //------------------------------------------------------------------- // Get the row //------------------------------------------------------------------- const CoinPackedVector &OsiRowCut::row() const { return row_; } //------------------------------------------------------------------- // Get the row for changing //------------------------------------------------------------------- CoinPackedVector &OsiRowCut::mutableRow() { return row_; } //---------------------------------------------------------------- // == operator //------------------------------------------------------------------- bool OsiRowCut::operator==(const OsiRowCut &rhs) const { if (this->OsiCut::operator!=(rhs)) return false; if (row() != rhs.row()) return false; if (lb() != rhs.lb()) return false; if (ub() != rhs.ub()) return false; return true; } bool OsiRowCut::operator!=(const OsiRowCut &rhs) const { return !((*this) == rhs); } //---------------------------------------------------------------- // consistent & infeasible //------------------------------------------------------------------- bool OsiRowCut::consistent() const { const CoinPackedVector &r = row(); r.duplicateIndex("consistent", "OsiRowCut"); if (r.getMinIndex() < 0) return false; return true; } bool OsiRowCut::consistent(const OsiSolverInterface &im) const { const CoinPackedVector &r = row(); if (r.getMaxIndex() >= im.getNumCols()) return false; return true; } bool OsiRowCut::infeasible(const OsiSolverInterface &) const { if (lb() > ub()) return true; return false; } #endif /* Returns infeasibility of the cut with respect to solution passed in i.e. is positive if cuts off that solution. solution is getNumCols() long.. */ double OsiRowCut::violated(const double *solution) const { int i; double sum = 0.0; const int *column = row_.getIndices(); int number = row_.getNumElements(); const double *element = row_.getElements(); for (i = 0; i < number; i++) { int colIndx = column[i]; sum += solution[colIndx] * element[i]; } if (sum > ub_) return sum - ub_; else if (sum < lb_) return lb_ - sum; else return 0.0; } //------------------------------------------------------------------- // Row sense, rhs, range //------------------------------------------------------------------- char OsiRowCut::sense() const { if (lb_ == ub_) return 'E'; else if (lb_ == -COIN_DBL_MAX && ub_ == COIN_DBL_MAX) return 'N'; else if (lb_ == -COIN_DBL_MAX) return 'L'; else if (ub_ == COIN_DBL_MAX) return 'G'; else return 'R'; } double OsiRowCut::rhs() const { if (lb_ == ub_) return ub_; else if (lb_ == -COIN_DBL_MAX && ub_ == COIN_DBL_MAX) return 0.0; else if (lb_ == -COIN_DBL_MAX) return ub_; else if (ub_ == COIN_DBL_MAX) return lb_; else return ub_; } double OsiRowCut::range() const { if (lb_ == ub_) return 0.0; else if (lb_ == -COIN_DBL_MAX && ub_ == COIN_DBL_MAX) return 0.0; else if (lb_ == -COIN_DBL_MAX) return 0.0; else if (ub_ == COIN_DBL_MAX) return 0.0; else return ub_ - lb_; } //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiRowCut::OsiRowCut() : OsiCut() , row_() , lb_(-COIN_DBL_MAX) , ub_(COIN_DBL_MAX) { //#ifdef NDEBUG //row_.setTestForDuplicateIndex(false); //#endif } //------------------------------------------------------------------- // Ownership constructor //------------------------------------------------------------------- OsiRowCut::OsiRowCut(double cutlb, double cutub, int capacity, int size, int *&colIndices, double *&elements) : OsiCut() , row_(capacity, size, colIndices, elements) , lb_(cutlb) , ub_(cutub) { } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiRowCut::OsiRowCut(const OsiRowCut &source) : OsiCut(source) , row_(source.row_) , lb_(source.lb_) , ub_(source.ub_) { // Nothing to do here } //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiRowCut *OsiRowCut::clone() const { return (new OsiRowCut(*this)); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiRowCut::~OsiRowCut() { // Nothing to do here } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiRowCut & OsiRowCut::operator=(const OsiRowCut &rhs) { if (this != &rhs) { OsiCut::operator=(rhs); row_ = rhs.row_; lb_ = rhs.lb_; ub_ = rhs.ub_; } return *this; } //---------------------------------------------------------------- // Print //------------------------------------------------------------------- void OsiRowCut::print() const { int i; std::cout << "Row cut has " << row_.getNumElements() << " elements"; if (lb_ < -1.0e20 && ub_ < 1.0e20) std::cout << " with upper rhs of " << ub_; else if (lb_ > -1.0e20 && ub_ > 1.0e20) std::cout << " with lower rhs of " << lb_; else std::cout << " !!! with lower, upper rhs of " << lb_ << " and " << ub_; std::cout << std::endl; for (i = 0; i < row_.getNumElements(); i++) { int colIndx = row_.getIndices()[i]; double element = row_.getElements()[i]; if (i > 0 && element > 0) std::cout << " +"; std::cout << element << " * x" << colIndx << " "; } std::cout << std::endl; } //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiRowCut2::OsiRowCut2(int row) : OsiRowCut() , whichRow_(row) { // nothing to do here } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiRowCut2::OsiRowCut2(const OsiRowCut2 &source) : OsiRowCut(source) , whichRow_(source.whichRow_) { // Nothing to do here } //---------------------------------------------------------------- // Clone //---------------------------------------------------------------- OsiRowCut *OsiRowCut2::clone() const { return (new OsiRowCut2(*this)); } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiRowCut2::~OsiRowCut2() { // Nothing to do here } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiRowCut2 & OsiRowCut2::operator=(const OsiRowCut2 &rhs) { if (this != &rhs) { OsiRowCut::operator=(rhs); whichRow_ = rhs.whichRow_; } return *this; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiCollections.hpp0000644000175200017520000000157013414504051016570 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiCollections_H #define OsiCollections_H #include //Forward declarations class OsiColCut; class OsiRowCut; class OsiCut; /* Collection Classes */ /**@name Typedefs for Standard Template Library collections of Osi Objects. */ //@{ /// Vector of int typedef std::vector< int > OsiVectorInt; /// Vector of double typedef std::vector< double > OsiVectorDouble; /// Vector of OsiColCut pointers typedef std::vector< OsiColCut * > OsiVectorColCutPtr; /// Vector of OsiRowCut pointers typedef std::vector< OsiRowCut * > OsiVectorRowCutPtr; /// Vector of OsiCut pointers typedef std::vector< OsiCut * > OsiVectorCutPtr; //@} #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiBranchingObject.hpp0000644000175200017520000007565013414504051017346 0ustar coincoin// Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiBranchingObject_H #define OsiBranchingObject_H #include #include #include #include "CoinError.hpp" #include "CoinTypes.hpp" class OsiSolverInterface; class OsiSolverBranch; class OsiBranchingObject; class OsiBranchingInformation; //############################################################################# //This contains the abstract base class for an object and for branching. //It also contains a simple integer class //############################################################################# /** Abstract base class for `objects'. The branching model used in Osi is based on the idea of an object. In the abstract, an object is something that has a feasible region, can be evaluated for infeasibility, can be branched on (i.e., there's some constructive action to be taken to move toward feasibility), and allows comparison of the effect of branching. This class (OsiObject) is the base class for an object. To round out the branching model, the class OsiBranchingObject describes how to perform a branch, and the class OsiBranchDecision describes how to compare two OsiBranchingObjects. To create a new type of object you need to provide three methods: #infeasibility(), #feasibleRegion(), and #createBranch(), described below. This base class is primarily virtual to allow for any form of structure. Any form of discontinuity is allowed. As there is an overhead in getting information from solvers and because other useful information is available there is also an OsiBranchingInformation class which can contain pointers to information. If used it must at minimum contain pointers to current value of objective, maximum allowed objective and pointers to arrays for bounds and solution and direction of optimization. Also integer and primal tolerance. Classes which inherit might have other information such as depth, number of solutions, pseudo-shadow prices etc etc. May be easier just to throw in here - as I keep doing */ class OsiObject { public: /// Default Constructor OsiObject(); /// Copy constructor OsiObject(const OsiObject &); /// Assignment operator OsiObject &operator=(const OsiObject &rhs); /// Clone virtual OsiObject *clone() const = 0; /// Destructor virtual ~OsiObject(); /** Infeasibility of the object This is some measure of the infeasibility of the object. 0.0 indicates that the object is satisfied. The preferred branching direction is returned in whichWay, where for normal two-way branching 0 is down, 1 is up This is used to prepare for strong branching but should also think of case when no strong branching The object may also compute an estimate of cost of going "up" or "down". This will probably be based on pseudo-cost ideas This should also set mutable infeasibility_ and whichWay_ This is for instant re-use for speed Default for this just calls infeasibility with OsiBranchingInformation NOTE - Convention says that an infeasibility of COIN_DBL_MAX means object has worked out it can't be satisfied! */ double infeasibility(const OsiSolverInterface *solver, int &whichWay) const; // Faster version when more information available virtual double infeasibility(const OsiBranchingInformation *info, int &whichWay) const = 0; // This does NOT set mutable stuff virtual double checkInfeasibility(const OsiBranchingInformation *info) const; /** For the variable(s) referenced by the object, look at the current solution and set bounds to match the solution. Returns measure of how much it had to move solution to make feasible */ virtual double feasibleRegion(OsiSolverInterface *solver) const; /** For the variable(s) referenced by the object, look at the current solution and set bounds to match the solution. Returns measure of how much it had to move solution to make feasible Faster version */ virtual double feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const = 0; /** Create a branching object and indicate which way to branch first. The branching object has to know how to create branches (fix variables, etc.) */ virtual OsiBranchingObject *createBranch(OsiSolverInterface * /*solver*/, const OsiBranchingInformation * /*info*/, int /*way*/) const { throw CoinError("Need code", "createBranch", "OsiBranchingObject"); return NULL; } /** \brief Return true if object can take part in normal heuristics */ virtual bool canDoHeuristics() const { return true; } /** \brief Return true if object can take part in move to nearest heuristic */ virtual bool canMoveToNearest() const { return false; } /** Column number if single column object -1 otherwise, Used by heuristics */ virtual int columnNumber() const; /// Return Priority - note 1 is highest priority inline int priority() const { return priority_; } /// Set priority inline void setPriority(int priority) { priority_ = priority; } /** \brief Return true if branch should only bound variables */ virtual bool boundBranch() const { return true; } /// Return true if knows how to deal with Pseudo Shadow Prices virtual bool canHandleShadowPrices() const { return false; } /// Return maximum number of ways branch may have inline int numberWays() const { return numberWays_; } /// Set maximum number of ways branch may have inline void setNumberWays(int numberWays) { numberWays_ = static_cast< short int >(numberWays); } /** Return preferred way to branch. If two then way=0 means down and 1 means up, otherwise way points to preferred branch */ inline void setWhichWay(int way) { whichWay_ = static_cast< short int >(way); } /** Return current preferred way to branch. If two then way=0 means down and 1 means up, otherwise way points to preferred branch */ inline int whichWay() const { return whichWay_; } /// Get pre-emptive preferred way of branching - -1 off, 0 down, 1 up (for 2-way) virtual int preferredWay() const { return -1; } /// Return infeasibility inline double infeasibility() const { return infeasibility_; } /// Return "up" estimate (default 1.0e-5) virtual double upEstimate() const; /// Return "down" estimate (default 1.0e-5) virtual double downEstimate() const; /** Reset variable bounds to their original values. Bounds may be tightened, so it may be good to be able to reset them to their original values. */ virtual void resetBounds(const OsiSolverInterface *) {} /** Change column numbers after preprocessing */ virtual void resetSequenceEtc(int, const int *) {} /// Updates stuff like pseudocosts before threads virtual void updateBefore(const OsiObject *) {} /// Updates stuff like pseudocosts after threads finished virtual void updateAfter(const OsiObject *, const OsiObject *) {} protected: /// data /// Computed infeasibility mutable double infeasibility_; /// Computed preferred way to branch mutable short whichWay_; /// Maximum number of ways on branch short numberWays_; /// Priority int priority_; }; /// Define a class to add a bit of complexity to OsiObject /// This assumes 2 way branching class OsiObject2 : public OsiObject { public: /// Default Constructor OsiObject2(); /// Copy constructor OsiObject2(const OsiObject2 &); /// Assignment operator OsiObject2 &operator=(const OsiObject2 &rhs); /// Destructor virtual ~OsiObject2(); /// Set preferred way of branching - -1 off, 0 down, 1 up (for 2-way) inline void setPreferredWay(int value) { preferredWay_ = value; } /// Get preferred way of branching - -1 off, 0 down, 1 up (for 2-way) virtual int preferredWay() const { return preferredWay_; } protected: /// Preferred way of branching - -1 off, 0 down, 1 up (for 2-way) int preferredWay_; /// "Infeasibility" on other way mutable double otherInfeasibility_; }; /** \brief Abstract branching object base class In the abstract, an OsiBranchingObject contains instructions for how to branch. We want an abstract class so that we can describe how to branch on simple objects (e.g., integers) and more exotic objects (e.g., cliques or hyperplanes). The #branch() method is the crucial routine: it is expected to be able to step through a set of branch arms, executing the actions required to create each subproblem in turn. The base class is primarily virtual to allow for a wide range of problem modifications. See OsiObject for an overview of the two classes (OsiObject and OsiBranchingObject) which make up Osi's branching model. */ class OsiBranchingObject { public: /// Default Constructor OsiBranchingObject(); /// Constructor OsiBranchingObject(OsiSolverInterface *solver, double value); /// Copy constructor OsiBranchingObject(const OsiBranchingObject &); /// Assignment operator OsiBranchingObject &operator=(const OsiBranchingObject &rhs); /// Clone virtual OsiBranchingObject *clone() const = 0; /// Destructor virtual ~OsiBranchingObject(); /// The number of branch arms created for this branching object inline int numberBranches() const { return numberBranches_; } /// The number of branch arms left for this branching object inline int numberBranchesLeft() const { return numberBranches_ - branchIndex_; } /// Increment the number of branch arms left for this branching object inline void incrementNumberBranchesLeft() { numberBranches_++; } /** Set the number of branch arms left for this branching object Just for forcing */ inline void setNumberBranchesLeft(int /*value*/) { /*assert (value==1&&!branchIndex_);*/ numberBranches_ = 1; } /// Decrement the number of branch arms left for this branching object inline void decrementNumberBranchesLeft() { branchIndex_++; } /** \brief Execute the actions required to branch, as specified by the current state of the branching object, and advance the object's state. Returns change in guessed objective on next branch */ virtual double branch(OsiSolverInterface *solver) = 0; /** \brief Execute the actions required to branch, as specified by the current state of the branching object, and advance the object's state. Returns change in guessed objective on next branch */ virtual double branch() { return branch(NULL); } /** \brief Return true if branch should fix variables */ virtual bool boundBranch() const { return true; } /** Get the state of the branching object This is just the branch index */ inline int branchIndex() const { return branchIndex_; } /** Set the state of the branching object. */ inline void setBranchingIndex(int branchIndex) { branchIndex_ = static_cast< short int >(branchIndex); } /// Current value inline double value() const { return value_; } /// Return pointer back to object which created inline const OsiObject *originalObject() const { return originalObject_; } /// Set pointer back to object which created inline void setOriginalObject(const OsiObject *object) { originalObject_ = object; } /** Double checks in case node can change its mind! Returns objective value Can change objective etc */ virtual void checkIsCutoff(double) {} /// For debug int columnNumber() const; /** \brief Print something about branch - only if log level high */ virtual void print(const OsiSolverInterface * = NULL) const {} protected: /// Current value - has some meaning about branch double value_; /// Pointer back to object which created const OsiObject *originalObject_; /** Number of branches */ int numberBranches_; /** The state of the branching object. i.e. branch index This starts at 0 when created */ short branchIndex_; }; /* This contains information This could also contain pseudo shadow prices or information for dealing with computing and trusting pseudo-costs */ class OsiBranchingInformation { public: /// Default Constructor OsiBranchingInformation(); /** Useful Constructor (normalSolver true if has matrix etc etc) copySolution true if constructot should make a copy */ OsiBranchingInformation(const OsiSolverInterface *solver, bool normalSolver, bool copySolution = false); /// Copy constructor OsiBranchingInformation(const OsiBranchingInformation &); /// Assignment operator OsiBranchingInformation &operator=(const OsiBranchingInformation &rhs); /// Clone virtual OsiBranchingInformation *clone() const; /// Destructor virtual ~OsiBranchingInformation(); // Note public public: /// data /** State of search 0 - no solution 1 - only heuristic solutions 2 - branched to a solution 3 - no solution but many nodes */ int stateOfSearch_; /// Value of objective function (in minimization sense) double objectiveValue_; /// Value of objective cutoff (in minimization sense) double cutoff_; /// Direction 1.0 for minimization, -1.0 for maximization double direction_; /// Integer tolerance double integerTolerance_; /// Primal tolerance double primalTolerance_; /// Maximum time remaining before stopping on time double timeRemaining_; /// Dual to use if row bound violated (if negative then pseudoShadowPrices off) double defaultDual_; /// Pointer to solver mutable const OsiSolverInterface *solver_; /// The number of columns int numberColumns_; /// Pointer to current lower bounds on columns mutable const double *lower_; /// Pointer to current solution mutable const double *solution_; /// Pointer to current upper bounds on columns mutable const double *upper_; /// Highly optional target (hot start) solution const double *hotstartSolution_; /// Pointer to duals const double *pi_; /// Pointer to row activity const double *rowActivity_; /// Objective const double *objective_; /// Pointer to current lower bounds on rows const double *rowLower_; /// Pointer to current upper bounds on rows const double *rowUpper_; /// Elements in column copy of matrix const double *elementByColumn_; /// Column starts const CoinBigIndex *columnStart_; /// Column lengths const int *columnLength_; /// Row indices const int *row_; /** Useful region of length CoinMax(numberColumns,2*numberRows) This is allocated and deleted before OsiObject::infeasibility It is zeroed on entry and should be so on exit It only exists if defaultDual_>=0.0 */ double *usefulRegion_; /// Useful index region to go with usefulRegion_ int *indexRegion_; /// Number of solutions found int numberSolutions_; /// Number of branching solutions found (i.e. exclude heuristics) int numberBranchingSolutions_; /// Depth in tree int depth_; /// TEMP bool owningSolution_; }; /// This just adds two-wayness to a branching object class OsiTwoWayBranchingObject : public OsiBranchingObject { public: /// Default constructor OsiTwoWayBranchingObject(); /** Create a standard tw0-way branch object Specifies a simple two-way branch. Specify way = -1 to set the object state to perform the down arm first, way = 1 for the up arm. */ OsiTwoWayBranchingObject(OsiSolverInterface *solver, const OsiObject *originalObject, int way, double value); /// Copy constructor OsiTwoWayBranchingObject(const OsiTwoWayBranchingObject &); /// Assignment operator OsiTwoWayBranchingObject &operator=(const OsiTwoWayBranchingObject &rhs); /// Destructor virtual ~OsiTwoWayBranchingObject(); using OsiBranchingObject::branch; /** \brief Sets the bounds for the variable according to the current arm of the branch and advances the object state to the next arm. state. Returns change in guessed objective on next branch */ virtual double branch(OsiSolverInterface *solver) = 0; inline int firstBranch() const { return firstBranch_; } /// Way returns -1 on down +1 on up inline int way() const { return !branchIndex_ ? firstBranch_ : -firstBranch_; } protected: /// Which way was first branch -1 = down, +1 = up int firstBranch_; }; /// Define a single integer class class OsiSimpleInteger : public OsiObject2 { public: /// Default Constructor OsiSimpleInteger(); /// Useful constructor - passed solver index OsiSimpleInteger(const OsiSolverInterface *solver, int iColumn); /// Useful constructor - passed solver index and original bounds OsiSimpleInteger(int iColumn, double lower, double upper); /// Copy constructor OsiSimpleInteger(const OsiSimpleInteger &); /// Clone virtual OsiObject *clone() const; /// Assignment operator OsiSimpleInteger &operator=(const OsiSimpleInteger &rhs); /// Destructor virtual ~OsiSimpleInteger(); using OsiObject::infeasibility; /// Infeasibility - large is 0.5 virtual double infeasibility(const OsiBranchingInformation *info, int &whichWay) const; using OsiObject::feasibleRegion; /** Set bounds to fix the variable at the current (integer) value. Given an integer value, set the lower and upper bounds to fix the variable. Returns amount it had to move variable. */ virtual double feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const; /** Creates a branching object The preferred direction is set by \p way, 0 for down, 1 for up. */ virtual OsiBranchingObject *createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const; /// Set solver column number inline void setColumnNumber(int value) { columnNumber_ = value; } /** Column number if single column object -1 otherwise, so returns >= 0 Used by heuristics */ virtual int columnNumber() const; /// Original bounds inline double originalLowerBound() const { return originalLower_; } inline void setOriginalLowerBound(double value) { originalLower_ = value; } inline double originalUpperBound() const { return originalUpper_; } inline void setOriginalUpperBound(double value) { originalUpper_ = value; } /** Reset variable bounds to their original values. Bounds may be tightened, so it may be good to be able to reset them to their original values. */ virtual void resetBounds(const OsiSolverInterface *solver); /** Change column numbers after preprocessing */ virtual void resetSequenceEtc(int numberColumns, const int *originalColumns); /// Return "up" estimate (default 1.0e-5) virtual double upEstimate() const; /// Return "down" estimate (default 1.0e-5) virtual double downEstimate() const; /// Return true if knows how to deal with Pseudo Shadow Prices virtual bool canHandleShadowPrices() const { return false; } protected: /// data /// Original lower bound double originalLower_; /// Original upper bound double originalUpper_; /// Column number in solver int columnNumber_; }; /** Simple branching object for an integer variable This object can specify a two-way branch on an integer variable. For each arm of the branch, the upper and lower bounds on the variable can be independently specified. 0 -> down, 1-> up. */ class OsiIntegerBranchingObject : public OsiTwoWayBranchingObject { public: /// Default constructor OsiIntegerBranchingObject(); /** Create a standard floor/ceiling branch object Specifies a simple two-way branch. Let \p value = x*. One arm of the branch will be lb <= x <= floor(x*), the other ceil(x*) <= x <= ub. Specify way = -1 to set the object state to perform the down arm first, way = 1 for the up arm. */ OsiIntegerBranchingObject(OsiSolverInterface *solver, const OsiSimpleInteger *originalObject, int way, double value); /** Create a standard floor/ceiling branch object Specifies a simple two-way branch in a more flexible way. One arm of the branch will be lb <= x <= downUpperBound, the other upLowerBound <= x <= ub. Specify way = -1 to set the object state to perform the down arm first, way = 1 for the up arm. */ OsiIntegerBranchingObject(OsiSolverInterface *solver, const OsiSimpleInteger *originalObject, int way, double value, double downUpperBound, double upLowerBound); /// Copy constructor OsiIntegerBranchingObject(const OsiIntegerBranchingObject &); /// Assignment operator OsiIntegerBranchingObject &operator=(const OsiIntegerBranchingObject &rhs); /// Clone virtual OsiBranchingObject *clone() const; /// Destructor virtual ~OsiIntegerBranchingObject(); using OsiBranchingObject::branch; /** \brief Sets the bounds for the variable according to the current arm of the branch and advances the object state to the next arm. state. Returns change in guessed objective on next branch */ virtual double branch(OsiSolverInterface *solver); using OsiBranchingObject::print; /** \brief Print something about branch - only if log level high */ virtual void print(const OsiSolverInterface *solver = NULL); protected: // Probably could get away with just value which is already stored /// Lower [0] and upper [1] bounds for the down arm (way_ = -1) double down_[2]; /// Lower [0] and upper [1] bounds for the up arm (way_ = 1) double up_[2]; }; /** Define Special Ordered Sets of type 1 and 2. These do not have to be integer - so do not appear in lists of integers. which_ points columns of matrix */ class OsiSOS : public OsiObject2 { public: // Default Constructor OsiSOS(); /** Useful constructor - which are indices and weights are also given. If null then 0,1,2.. type is SOS type */ OsiSOS(const OsiSolverInterface *solver, int numberMembers, const int *which, const double *weights, int type = 1); // Copy constructor OsiSOS(const OsiSOS &); /// Clone virtual OsiObject *clone() const; // Assignment operator OsiSOS &operator=(const OsiSOS &rhs); // Destructor virtual ~OsiSOS(); using OsiObject::infeasibility; /// Infeasibility - large is 0.5 virtual double infeasibility(const OsiBranchingInformation *info, int &whichWay) const; using OsiObject::feasibleRegion; /** Set bounds to fix the variable at the current (integer) value. Given an integer value, set the lower and upper bounds to fix the variable. Returns amount it had to move variable. */ virtual double feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const; /** Creates a branching object The preferred direction is set by \p way, 0 for down, 1 for up. */ virtual OsiBranchingObject *createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const; /// Return "up" estimate (default 1.0e-5) virtual double upEstimate() const; /// Return "down" estimate (default 1.0e-5) virtual double downEstimate() const; /// Redoes data when sequence numbers change virtual void resetSequenceEtc(int numberColumns, const int *originalColumns); /// Number of members inline int numberMembers() const { return numberMembers_; } /// Members (indices in range 0 ... numberColumns-1) inline const int *members() const { return members_; } /// SOS type inline int sosType() const { return sosType_; } /// SOS type inline int setType() const { return sosType_; } /** Array of weights */ inline const double *weights() const { return weights_; } /** \brief Return true if object can take part in normal heuristics */ virtual bool canDoHeuristics() const { return (sosType_ == 1 && integerValued_); } /// Set whether set is integer valued or not inline void setIntegerValued(bool yesNo) { integerValued_ = yesNo; } /// Return true if knows how to deal with Pseudo Shadow Prices virtual bool canHandleShadowPrices() const { return true; } /// Set number of members inline void setNumberMembers(int value) { numberMembers_ = value; } /// Members (indices in range 0 ... numberColumns-1) inline int *mutableMembers() const { return members_; } /// Set SOS type inline void setSosType(int value) { sosType_ = value; } /** Array of weights */ inline double *mutableWeights() const { return weights_; } protected: /// data /// Members (indices in range 0 ... numberColumns-1) int *members_; /// Weights double *weights_; /// Number of members int numberMembers_; /// SOS type int sosType_; /// Whether integer valued bool integerValued_; }; /** Branching object for Special ordered sets */ class OsiSOSBranchingObject : public OsiTwoWayBranchingObject { public: // Default Constructor OsiSOSBranchingObject(); // Useful constructor OsiSOSBranchingObject(OsiSolverInterface *solver, const OsiSOS *originalObject, int way, double separator); // Copy constructor OsiSOSBranchingObject(const OsiSOSBranchingObject &); // Assignment operator OsiSOSBranchingObject &operator=(const OsiSOSBranchingObject &rhs); /// Clone virtual OsiBranchingObject *clone() const; // Destructor virtual ~OsiSOSBranchingObject(); using OsiBranchingObject::branch; /// Does next branch and updates state virtual double branch(OsiSolverInterface *solver); using OsiBranchingObject::print; /** \brief Print something about branch - only if log level high */ virtual void print(const OsiSolverInterface *solver = NULL); private: /// data }; /** Lotsize class */ class OsiLotsize : public OsiObject2 { public: // Default Constructor OsiLotsize(); /* Useful constructor - passed model index. Also passed valid values - if range then pairs */ OsiLotsize(const OsiSolverInterface *solver, int iColumn, int numberPoints, const double *points, bool range = false); // Copy constructor OsiLotsize(const OsiLotsize &); /// Clone virtual OsiObject *clone() const; // Assignment operator OsiLotsize &operator=(const OsiLotsize &rhs); // Destructor virtual ~OsiLotsize(); using OsiObject::infeasibility; /// Infeasibility - large is 0.5 virtual double infeasibility(const OsiBranchingInformation *info, int &whichWay) const; using OsiObject::feasibleRegion; /** Set bounds to contain the current solution. More precisely, for the variable associated with this object, take the value given in the current solution, force it within the current bounds if required, then set the bounds to fix the variable at the integer nearest the solution value. Returns amount it had to move variable. */ virtual double feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const; /** Creates a branching object The preferred direction is set by \p way, 0 for down, 1 for up. */ virtual OsiBranchingObject *createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const; /// Set solver column number inline void setColumnNumber(int value) { columnNumber_ = value; } /** Column number if single column object -1 otherwise, so returns >= 0 Used by heuristics */ virtual int columnNumber() const; /** Reset original upper and lower bound values from the solver. Handy for updating bounds held in this object after bounds held in the solver have been tightened. */ virtual void resetBounds(const OsiSolverInterface *solver); /** Finds range of interest so value is feasible in range range_ or infeasible between hi[range_] and lo[range_+1]. Returns true if feasible. */ bool findRange(double value, double integerTolerance) const; /** Returns floor and ceiling */ virtual void floorCeiling(double &floorLotsize, double &ceilingLotsize, double value, double tolerance) const; /// Original bounds inline double originalLowerBound() const { return bound_[0]; } inline double originalUpperBound() const { return bound_[rangeType_ * numberRanges_ - 1]; } /// Type - 1 points, 2 ranges inline int rangeType() const { return rangeType_; } /// Number of points inline int numberRanges() const { return numberRanges_; } /// Ranges inline double *bound() const { return bound_; } /** Change column numbers after preprocessing */ virtual void resetSequenceEtc(int numberColumns, const int *originalColumns); /// Return "up" estimate (default 1.0e-5) virtual double upEstimate() const; /// Return "down" estimate (default 1.0e-5) virtual double downEstimate() const; /// Return true if knows how to deal with Pseudo Shadow Prices virtual bool canHandleShadowPrices() const { return true; } /** \brief Return true if object can take part in normal heuristics */ virtual bool canDoHeuristics() const { return false; } private: /// data /// Column number in model int columnNumber_; /// Type - 1 points, 2 ranges int rangeType_; /// Number of points int numberRanges_; // largest gap double largestGap_; /// Ranges double *bound_; /// Current range mutable int range_; }; /** Lotsize branching object This object can specify a two-way branch on an integer variable. For each arm of the branch, the upper and lower bounds on the variable can be independently specified. Variable_ holds the index of the integer variable in the integerVariable_ array of the model. */ class OsiLotsizeBranchingObject : public OsiTwoWayBranchingObject { public: /// Default constructor OsiLotsizeBranchingObject(); /** Create a lotsize floor/ceiling branch object Specifies a simple two-way branch. Let \p value = x*. One arm of the branch will be is lb <= x <= valid range below(x*), the other valid range above(x*) <= x <= ub. Specify way = -1 to set the object state to perform the down arm first, way = 1 for the up arm. */ OsiLotsizeBranchingObject(OsiSolverInterface *solver, const OsiLotsize *originalObject, int way, double value); /// Copy constructor OsiLotsizeBranchingObject(const OsiLotsizeBranchingObject &); /// Assignment operator OsiLotsizeBranchingObject &operator=(const OsiLotsizeBranchingObject &rhs); /// Clone virtual OsiBranchingObject *clone() const; /// Destructor virtual ~OsiLotsizeBranchingObject(); using OsiBranchingObject::branch; /** \brief Sets the bounds for the variable according to the current arm of the branch and advances the object state to the next arm. state. Returns change in guessed objective on next branch */ virtual double branch(OsiSolverInterface *solver); using OsiBranchingObject::print; /** \brief Print something about branch - only if log level high */ virtual void print(const OsiSolverInterface *solver = NULL); protected: /// Lower [0] and upper [1] bounds for the down arm (way_ = -1) double down_[2]; /// Lower [0] and upper [1] bounds for the up arm (way_ = 1) double up_[2]; }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiRowCut.hpp0000644000175200017520000002030113414504051015526 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiRowCut_H #define OsiRowCut_H #include "CoinPackedVector.hpp" #include "OsiCollections.hpp" #include "OsiCut.hpp" //#define OSI_INLINE_ROWCUT_METHODS #ifdef OSI_INLINE_ROWCUT_METHODS #define OsiRowCut_inline inline #else #define OsiRowCut_inline #endif /** Row Cut Class A row cut has:
  • a lower bound
  • an upper bound
  • a vector of row elements
*/ class OsiRowCut : public OsiCut { friend void OsiRowCutUnitTest(const OsiSolverInterface *baseSiP, const std::string &mpsDir); public: /**@name Row bounds */ //@{ /// Get lower bound OsiRowCut_inline double lb() const; /// Set lower bound OsiRowCut_inline void setLb(double lb); /// Get upper bound OsiRowCut_inline double ub() const; /// Set upper bound OsiRowCut_inline void setUb(double ub); //@} /**@name Row rhs, sense, range */ //@{ /// Get sense ('E', 'G', 'L', 'N', 'R') char sense() const; /// Get right-hand side double rhs() const; /// Get range (ub - lb for 'R' rows, 0 otherwise) double range() const; //@} //------------------------------------------------------------------- /**@name Row elements */ //@{ /// Set row elements OsiRowCut_inline void setRow( int size, const int *colIndices, const double *elements, bool testForDuplicateIndex = COIN_DEFAULT_VALUE_FOR_DUPLICATE); /// Set row elements from a packed vector OsiRowCut_inline void setRow(const CoinPackedVector &v); /// Get row elements OsiRowCut_inline const CoinPackedVector &row() const; /// Get row elements for changing OsiRowCut_inline CoinPackedVector &mutableRow(); //@} /**@name Comparison operators */ //@{ #if __GNUC__ != 2 using OsiCut::operator==; #endif /** equal - true if lower bound, upper bound, row elements, and OsiCut are equal. */ OsiRowCut_inline bool operator==(const OsiRowCut &rhs) const; #if __GNUC__ != 2 using OsiCut::operator!=; #endif /// not equal OsiRowCut_inline bool operator!=(const OsiRowCut &rhs) const; //@} //---------------------------------------------------------------- /**@name Sanity checks on cut */ //@{ /** Returns true if the cut is consistent. This checks to ensure that:
  • The row element vector does not have duplicate indices
  • The row element vector indices are >= 0
*/ OsiRowCut_inline bool consistent() const; /** Returns true if cut is consistent with respect to the solver interface's model. This checks to ensure that
  • The row element vector indices are < the number of columns in the model
*/ OsiRowCut_inline bool consistent(const OsiSolverInterface &im) const; /** Returns true if the row cut itself is infeasible and cannot be satisfied. This checks whether
  • the lower bound is strictly greater than the upper bound.
*/ OsiRowCut_inline bool infeasible(const OsiSolverInterface &im) const; /** Returns infeasibility of the cut with respect to solution passed in i.e. is positive if cuts off that solution. solution is getNumCols() long.. */ virtual double violated(const double *solution) const; //@} /**@name Arithmetic operators. Apply CoinPackedVector methods to the vector */ //@{ /// add value to every vector entry void operator+=(double value) { row_ += value; } /// subtract value from every vector entry void operator-=(double value) { row_ -= value; } /// multiply every vector entry by value void operator*=(double value) { row_ *= value; } /// divide every vector entry by value void operator/=(double value) { row_ /= value; } //@} /// Allow access row sorting function void sortIncrIndex() { row_.sortIncrIndex(); } /**@name Constructors and destructors */ //@{ /// Assignment operator OsiRowCut &operator=(const OsiRowCut &rhs); /// Copy constructor OsiRowCut(const OsiRowCut &); /// Clone virtual OsiRowCut *clone() const; /// Default Constructor OsiRowCut(); /** \brief Ownership Constructor This constructor assumes ownership of the vectors passed as parameters for indices and elements. \p colIndices and \p elements will be NULL on return. */ OsiRowCut(double cutlb, double cutub, int capacity, int size, int *&colIndices, double *&elements); /// Destructor virtual ~OsiRowCut(); //@} /**@name Debug stuff */ //@{ /// Print cuts in collection virtual void print() const; //@} private: /**@name Private member data */ //@{ /// Row elements CoinPackedVector row_; /// Row lower bound double lb_; /// Row upper bound double ub_; //@} }; #ifdef OSI_INLINE_ROWCUT_METHODS //------------------------------------------------------------------- // Set/Get lower & upper bounds //------------------------------------------------------------------- double OsiRowCut::lb() const { return lb_; } void OsiRowCut::setLb(double lb) { lb_ = lb; } double OsiRowCut::ub() const { return ub_; } void OsiRowCut::setUb(double ub) { ub_ = ub; } //------------------------------------------------------------------- // Set row elements //------------------------------------------------------------------- void OsiRowCut::setRow(int size, const int *colIndices, const double *elements) { row_.setVector(size, colIndices, elements); } void OsiRowCut::setRow(const CoinPackedVector &v) { row_ = v; } //------------------------------------------------------------------- // Get the row //------------------------------------------------------------------- const CoinPackedVector &OsiRowCut::row() const { return row_; } //------------------------------------------------------------------- // Get the row so we can change //------------------------------------------------------------------- CoinPackedVector &OsiRowCut::mutableRow() { return row_; } //---------------------------------------------------------------- // == operator //------------------------------------------------------------------- bool OsiRowCut::operator==(const OsiRowCut &rhs) const { if (this->OsiCut::operator!=(rhs)) return false; if (row() != rhs.row()) return false; if (lb() != rhs.lb()) return false; if (ub() != rhs.ub()) return false; return true; } bool OsiRowCut::operator!=(const OsiRowCut &rhs) const { return !((*this) == rhs); } //---------------------------------------------------------------- // consistent & infeasible //------------------------------------------------------------------- bool OsiRowCut::consistent() const { const CoinPackedVector &r = row(); r.duplicateIndex("consistent", "OsiRowCut"); if (r.getMinIndex() < 0) return false; return true; } bool OsiRowCut::consistent(const OsiSolverInterface &im) const { const CoinPackedVector &r = row(); if (r.getMaxIndex() >= im.getNumCols()) return false; return true; } bool OsiRowCut::infeasible(const OsiSolverInterface &im) const { if (lb() > ub()) return true; return false; } #endif /** Row Cut Class which refers back to row which created it. It may be useful to strengthen a row rather than add a cut. To do this we need to know which row is strengthened. This trivial extension to OsiRowCut does that. */ class OsiRowCut2 : public OsiRowCut { public: /**@name Which row */ //@{ /// Get row inline int whichRow() const { return whichRow_; } /// Set row inline void setWhichRow(int row) { whichRow_ = row; } //@} /**@name Constructors and destructors */ //@{ /// Assignment operator OsiRowCut2 &operator=(const OsiRowCut2 &rhs); /// Copy constructor OsiRowCut2(const OsiRowCut2 &); /// Clone virtual OsiRowCut *clone() const; /// Default Constructor OsiRowCut2(int row = -1); /// Destructor virtual ~OsiRowCut2(); //@} private: /**@name Private member data */ //@{ /// Which row int whichRow_; //@} }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiSolverInterface.cpp0000644000175200017520000025371113414504051017406 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include #include #include "CoinPragma.hpp" #include "CoinHelperFunctions.hpp" #include "CoinMpsIO.hpp" #include "CoinMessage.hpp" #include "CoinWarmStart.hpp" #ifdef COIN_SNAPSHOT #include "CoinSnapshot.hpp" #endif #include "OsiSolverInterface.hpp" #ifdef CBC_NEXT_VERSION #include "OsiSolverBranch.hpp" #endif #include "OsiCuts.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "OsiRowCutDebugger.hpp" #include "OsiAuxInfo.hpp" #include "OsiBranchingObject.hpp" #include #include "CoinFinite.hpp" #include "CoinBuild.hpp" #include "CoinModel.hpp" #include "CoinLpIO.hpp" //############################################################################# // Hotstart related methods (primarily used in strong branching) // It is assumed that only bounds (on vars/constraints) can change between // markHotStart() and unmarkHotStart() //############################################################################# void OsiSolverInterface::markHotStart() { delete ws_; ws_ = getWarmStart(); } void OsiSolverInterface::solveFromHotStart() { setWarmStart(ws_); resolve(); } void OsiSolverInterface::unmarkHotStart() { delete ws_; ws_ = NULL; } //############################################################################# // Get indices of solution vector which are integer variables presently at // fractional values //############################################################################# OsiVectorInt OsiSolverInterface::getFractionalIndices(const double etol) const { const int colnum = getNumCols(); OsiVectorInt frac; CoinAbsFltEq eq(etol); for (int i = 0; i < colnum; ++i) { if (isInteger(i)) { const double ci = getColSolution()[i]; const double distanceFromInteger = ci - floor(ci + 0.5); if (!eq(distanceFromInteger, 0.0)) frac.push_back(i); } } return frac; } CoinBigIndex OsiSolverInterface::getNumElements() const { return getMatrixByRow()->getNumElements(); } //############################################################################# // Methods for determining the type of column variable. // The method isContinuous() is presently implemented in the derived classes. // The methods below depend on isContinuous and the values // stored in the column bounds. //############################################################################# bool OsiSolverInterface::isBinary(int colIndex) const { if (isContinuous(colIndex)) return false; const double *cu = getColUpper(); const double *cl = getColLower(); if ( (cu[colIndex] == 1 || cu[colIndex] == 0) && (cl[colIndex] == 0 || cl[colIndex] == 1)) return true; else return false; } //############################################################################# // Method for getting a column solution that is guaranteed to be // between the column lower and upper bounds. // // This method is was introduced for Cgl. Osi developers can // improve performance for their favorite solvers by // overriding this method and providing an implementation that caches // strictColSolution_. //############################################################################# const double * OsiSolverInterface::getStrictColSolution() { const double *colSolution = getColSolution(); const double *colLower = getColLower(); const double *colUpper = getColUpper(); const int numCols = getNumCols(); strictColSolution_.clear(); strictColSolution_.insert(strictColSolution_.end(), colSolution, colSolution + numCols); for (int i = numCols - 1; i > 0; --i) { if (colSolution[i] <= colUpper[i]) { if (colSolution[i] >= colLower[i]) { continue; } else { strictColSolution_[i] = colLower[i]; } } else { strictColSolution_[i] = colUpper[i]; } } return &strictColSolution_[0]; } //----------------------------------------------------------------------------- bool OsiSolverInterface::isInteger(int colIndex) const { return !isContinuous(colIndex); } //----------------------------------------------------------------------------- /* Return number of integer variables. OSI implementors really should replace this one, it's generally trivial from within the OSI, but this is the only safe way to do it generically. */ int OsiSolverInterface::getNumIntegers() const { if (numberIntegers_ >= 0) { // we already know return numberIntegers_; } else { // work out const int numCols = getNumCols(); int numIntegers = 0; for (int i = 0; i < numCols; ++i) { if (!isContinuous(i)) { numIntegers++; } } return (numIntegers); } } //----------------------------------------------------------------------------- bool OsiSolverInterface::isIntegerNonBinary(int colIndex) const { if (isInteger(colIndex) && !isBinary(colIndex)) return true; else return false; } //----------------------------------------------------------------------------- bool OsiSolverInterface::isFreeBinary(int colIndex) const { if (isContinuous(colIndex)) return false; const double *cu = getColUpper(); const double *cl = getColLower(); if ( (cu[colIndex] == 1) && (cl[colIndex] == 0)) return true; else return false; } /* Return array of column length 0 - continuous 1 - binary (may get fixed later) 2 - general integer (may get fixed later) */ const char * OsiSolverInterface::getColType(bool refresh) const { if (!columnType_ || refresh) { const int numCols = getNumCols(); if (!columnType_) columnType_ = new char[numCols]; const double *cu = getColUpper(); const double *cl = getColLower(); for (int i = 0; i < numCols; ++i) { if (!isContinuous(i)) { if ((cu[i] == 1 || cu[i] == 0) && (cl[i] == 0 || cl[i] == 1)) columnType_[i] = 1; else columnType_[i] = 2; } else { columnType_[i] = 0; } } } return columnType_; } /* ############################################################################### Built-in methods for problem modification Some of these can surely be reimplemented more efficiently given knowledge of the derived OsiXXX data structures, but we can't make assumptions here. For others, it's less clear. Given standard vector data structures in the underlying OsiXXX, likely the only possible gain is avoiding a method call. ############################################################################### */ void OsiSolverInterface::setObjCoeffSet(const int *indexFirst, const int *indexLast, const double *coeffList) { const std::ptrdiff_t cnt = indexLast - indexFirst; for (std::ptrdiff_t i = 0; i < cnt; ++i) { setObjCoeff(indexFirst[i], coeffList[i]); } } //----------------------------------------------------------------------------- void OsiSolverInterface::setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { while (indexFirst != indexLast) { setColBounds(*indexFirst, boundList[0], boundList[1]); ++indexFirst; boundList += 2; } } //----------------------------------------------------------------------------- void OsiSolverInterface::setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList) { while (indexFirst != indexLast) { setRowBounds(*indexFirst, boundList[0], boundList[1]); ++indexFirst; boundList += 2; } } //----------------------------------------------------------------------------- void OsiSolverInterface::setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList) { while (indexFirst != indexLast) { setRowType(*indexFirst++, *senseList++, *rhsList++, *rangeList++); } } //----------------------------------------------------------------------------- void OsiSolverInterface::setContinuous(const int *indices, int len) { for (int i = 0; i < len; ++i) { setContinuous(indices[i]); } } //----------------------------------------------------------------------------- void OsiSolverInterface::setInteger(const int *indices, int len) { for (int i = 0; i < len; ++i) { setInteger(indices[i]); } } //----------------------------------------------------------------------------- /* Set the objective coefficients for all columns array [getNumCols()] is an array of values for the objective. This defaults to a series of set operations and is here for speed. */ void OsiSolverInterface::setObjective(const double *array) { int n = getNumCols(); for (int i = 0; i < n; i++) setObjCoeff(i, array[i]); } //----------------------------------------------------------------------------- /* Set the lower bounds for all columns array [getNumCols()] is an array of values for the objective. This defaults to a series of set operations and is here for speed. */ void OsiSolverInterface::setColLower(const double *array) { int n = getNumCols(); for (int i = 0; i < n; i++) setColLower(i, array[i]); } //----------------------------------------------------------------------------- /* Set the upper bounds for all columns array [getNumCols()] is an array of values for the objective. This defaults to a series of set operations and is here for speed. */ void OsiSolverInterface::setColUpper(const double *array) { int n = getNumCols(); for (int i = 0; i < n; i++) setColUpper(i, array[i]); } //----------------------------------------------------------------------------- /* Add a named column. Less than efficient, because the underlying solver almost surely generates an internal name when creating the column, which is then replaced. */ void OsiSolverInterface::addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj, std::string name) { int ndx = getNumCols(); addCol(vec, collb, colub, obj); setColName(ndx, name); } void OsiSolverInterface::addCol(int numberElements, const int *rows, const double *elements, const double collb, const double colub, const double obj, std::string name) { int ndx = getNumCols(); addCol(numberElements, rows, elements, collb, colub, obj); setColName(ndx, name); } /* Convenience alias for addCol */ void OsiSolverInterface::addCol(int numberElements, const int *rows, const double *elements, const double collb, const double colub, const double obj) { CoinPackedVector column(numberElements, rows, elements); addCol(column, collb, colub, obj); } //----------------------------------------------------------------------------- /* Add a set of columns (primal variables) to the problem. Default implementation simply makes repeated calls to addCol(). */ void OsiSolverInterface::addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj) { for (int i = 0; i < numcols; ++i) { addCol(*cols[i], collb[i], colub[i], obj[i]); } } void OsiSolverInterface::addCols(const int numcols, const CoinBigIndex *columnStarts, const int *rows, const double *elements, const double *collb, const double *colub, const double *obj) { double infinity = getInfinity(); for (int i = 0; i < numcols; ++i) { CoinBigIndex start = columnStarts[i]; int number = static_cast< int >(columnStarts[i + 1] - start); assert(number >= 0); addCol(number, rows + start, elements + start, collb ? collb[i] : 0.0, colub ? colub[i] : infinity, obj ? obj[i] : 0.0); } } //----------------------------------------------------------------------------- // Add columns from a build object void OsiSolverInterface::addCols(const CoinBuild &buildObject) { assert(buildObject.type() == 1); // check correct int number = buildObject.numberColumns(); if (number) { CoinPackedVectorBase **columns = new CoinPackedVectorBase *[number]; int iColumn; double *objective = new double[number]; double *lower = new double[number]; double *upper = new double[number]; for (iColumn = 0; iColumn < number; iColumn++) { const int *rows; const double *elements; int numberElements = buildObject.column(iColumn, lower[iColumn], upper[iColumn], objective[iColumn], rows, elements); columns[iColumn] = new CoinPackedVector(numberElements, rows, elements); } addCols(number, columns, lower, upper, objective); for (iColumn = 0; iColumn < number; iColumn++) delete columns[iColumn]; delete[] columns; delete[] objective; delete[] lower; delete[] upper; } return; } // Add columns from a model object int OsiSolverInterface::addCols(CoinModel &modelObject) { bool goodState = true; if (modelObject.rowLowerArray()) { // some row information exists int numberRows2 = modelObject.numberRows(); const double *rowLower = modelObject.rowLowerArray(); const double *rowUpper = modelObject.rowUpperArray(); for (int i = 0; i < numberRows2; i++) { if (rowLower[i] != -COIN_DBL_MAX) goodState = false; if (rowUpper[i] != COIN_DBL_MAX) goodState = false; } } if (goodState) { // can do addColumns int numberErrors = 0; // Set arrays for normal use double *rowLower = modelObject.rowLowerArray(); double *rowUpper = modelObject.rowUpperArray(); double *columnLower = modelObject.columnLowerArray(); double *columnUpper = modelObject.columnUpperArray(); double *objective = modelObject.objectiveArray(); int *integerType = modelObject.integerTypeArray(); double *associated = modelObject.associatedArray(); // If strings then do copies if (modelObject.stringsExist()) { numberErrors = modelObject.createArrays(rowLower, rowUpper, columnLower, columnUpper, objective, integerType, associated); } CoinPackedMatrix matrix; modelObject.createPackedMatrix(matrix, associated); int numberColumns = getNumCols(); // save number of columns int numberColumns2 = modelObject.numberColumns(); if (numberColumns2 && !numberErrors) { // Clean up infinity double infinity = getInfinity(); int iColumn; for (iColumn = 0; iColumn < numberColumns2; iColumn++) { if (columnUpper[iColumn] > 1.0e30) columnUpper[iColumn] = infinity; if (columnLower[iColumn] < -1.0e30) columnLower[iColumn] = -infinity; } const int *row = matrix.getIndices(); const int *columnLength = matrix.getVectorLengths(); const CoinBigIndex *columnStart = matrix.getVectorStarts(); const double *element = matrix.getElements(); CoinPackedVectorBase **columns = new CoinPackedVectorBase *[numberColumns2]; assert(columnLower); for (iColumn = 0; iColumn < numberColumns2; iColumn++) { CoinBigIndex start = columnStart[iColumn]; columns[iColumn] = new CoinPackedVector(columnLength[iColumn], row + start, element + start); } addCols(numberColumns2, columns, columnLower, columnUpper, objective); for (iColumn = 0; iColumn < numberColumns2; iColumn++) delete columns[iColumn]; delete[] columns; // Do integers if wanted assert(integerType); for (iColumn = 0; iColumn < numberColumns2; iColumn++) { if (integerType[iColumn]) setInteger(iColumn + numberColumns); } } if (columnLower != modelObject.columnLowerArray()) { delete[] rowLower; delete[] rowUpper; delete[] columnLower; delete[] columnUpper; delete[] objective; delete[] integerType; delete[] associated; //if (numberErrors) //handler_->message(CLP_BAD_STRING_VALUES,messages_) // <message(CLP_COMPLICATED_MODEL,messages_) //<(rowStarts[i + 1] - start); assert(number >= 0); addRow(number, columns + start, elements + start, rowlb ? rowlb[i] : -infinity, rowub ? rowub[i] : infinity); } } void OsiSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub) { for (int i = 0; i < numrows; ++i) { addRow(*rows[i], rowlb[i], rowub[i]); } } void OsiSolverInterface::addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng) { for (int i = 0; i < numrows; ++i) { addRow(*rows[i], rowsen[i], rowrhs[i], rowrng[i]); } } //----------------------------------------------------------------------------- void OsiSolverInterface::addRows(const CoinBuild &buildObject) { int number = buildObject.numberRows(); if (number) { CoinPackedVectorBase **rows = new CoinPackedVectorBase *[number]; int iRow; double *lower = new double[number]; double *upper = new double[number]; for (iRow = 0; iRow < number; iRow++) { const int *columns; const double *elements; int numberElements = buildObject.row(iRow, lower[iRow], upper[iRow], columns, elements); rows[iRow] = new CoinPackedVector(numberElements, columns, elements); } addRows(number, rows, lower, upper); for (iRow = 0; iRow < number; iRow++) delete rows[iRow]; delete[] rows; delete[] lower; delete[] upper; } } //----------------------------------------------------------------------------- int OsiSolverInterface::addRows(CoinModel &modelObject) { bool goodState = true; if (modelObject.columnLowerArray()) { // some column information exists int numberColumns2 = modelObject.numberColumns(); const double *columnLower = modelObject.columnLowerArray(); const double *columnUpper = modelObject.columnUpperArray(); const double *objective = modelObject.objectiveArray(); const int *integerType = modelObject.integerTypeArray(); for (int i = 0; i < numberColumns2; i++) { if (columnLower[i] != 0.0) goodState = false; if (columnUpper[i] != COIN_DBL_MAX) goodState = false; if (objective[i] != 0.0) goodState = false; if (integerType[i] != 0) goodState = false; } } if (goodState) { // can do addRows int numberErrors = 0; // Set arrays for normal use double *rowLower = modelObject.rowLowerArray(); double *rowUpper = modelObject.rowUpperArray(); double *columnLower = modelObject.columnLowerArray(); double *columnUpper = modelObject.columnUpperArray(); double *objective = modelObject.objectiveArray(); int *integerType = modelObject.integerTypeArray(); double *associated = modelObject.associatedArray(); // If strings then do copies if (modelObject.stringsExist()) { numberErrors = modelObject.createArrays(rowLower, rowUpper, columnLower, columnUpper, objective, integerType, associated); } CoinPackedMatrix matrix; modelObject.createPackedMatrix(matrix, associated); int numberRows2 = modelObject.numberRows(); if (numberRows2 && !numberErrors) { // Clean up infinity double infinity = getInfinity(); int iRow; for (iRow = 0; iRow < numberRows2; iRow++) { if (rowUpper[iRow] > 1.0e30) rowUpper[iRow] = infinity; if (rowLower[iRow] < -1.0e30) rowLower[iRow] = -infinity; } // matrix by rows matrix.reverseOrdering(); const int *column = matrix.getIndices(); const int *rowLength = matrix.getVectorLengths(); const CoinBigIndex *rowStart = matrix.getVectorStarts(); const double *element = matrix.getElements(); CoinPackedVectorBase **rows = new CoinPackedVectorBase *[numberRows2]; assert(rowLower); for (iRow = 0; iRow < numberRows2; iRow++) { CoinBigIndex start = rowStart[iRow]; rows[iRow] = new CoinPackedVector(rowLength[iRow], column + start, element + start); } addRows(numberRows2, rows, rowLower, rowUpper); for (iRow = 0; iRow < numberRows2; iRow++) delete rows[iRow]; delete[] rows; } if (rowLower != modelObject.rowLowerArray()) { delete[] rowLower; delete[] rowUpper; delete[] columnLower; delete[] columnUpper; delete[] objective; delete[] integerType; delete[] associated; //if (numberErrors) //handler_->message(CLP_BAD_STRING_VALUES,messages_) // <message(CLP_COMPLICATED_MODEL,messages_) //< 1.0e30) columnUpper[iColumn] = infinity; if (columnLower[iColumn] < -1.0e30) columnLower[iColumn] = -infinity; } for (iRow = 0; iRow < numberRows; iRow++) { if (rowUpper[iRow] > 1.0e30) rowUpper[iRow] = infinity; if (rowLower[iRow] < -1.0e30) rowLower[iRow] = -infinity; } CoinWarmStart *ws = getWarmStart(); bool restoreBasis = keepSolution && numberRows && numberRows == getNumRows() && numberColumns == getNumCols(); loadProblem(matrix, columnLower, columnUpper, objective, rowLower, rowUpper); setRowColNames(modelObject); if (restoreBasis) setWarmStart(ws); delete ws; // Do integers if wanted assert(integerType); for (int iColumn = 0; iColumn < numberColumns; iColumn++) { if (integerType[iColumn]) setInteger(iColumn); } if (rowLower != modelObject.rowLowerArray() || columnLower != modelObject.columnLowerArray()) { delete[] rowLower; delete[] rowUpper; delete[] columnLower; delete[] columnUpper; delete[] objective; delete[] integerType; delete[] associated; //if (numberErrors) // handler_->message(CLP_BAD_STRING_VALUES,messages_) // <getApplicationData(); } void OsiSolverInterface::setAuxiliaryInfo(OsiAuxInfo *auxiliaryInfo) { delete appDataEtc_; appDataEtc_ = auxiliaryInfo->clone(); } // Get pointer to auxiliary info object OsiAuxInfo * OsiSolverInterface::getAuxiliaryInfo() const { return appDataEtc_; } //############################################################################# // Methods related to Row Cut Debuggers //############################################################################# //------------------------------------------------------------------- // Activate Row Cut Debugger
// If the model name passed is on list of known models // then all cuts are checked to see that they do NOT cut // off the known optimal solution. void OsiSolverInterface::activateRowCutDebugger(const char *modelName) { delete rowCutDebugger_; rowCutDebugger_ = NULL; // so won't use in new rowCutDebugger_ = new OsiRowCutDebugger(*this, modelName); } /* Activate debugger using full solution array. Only integer values need to be correct. Up to user to get it correct. */ void OsiSolverInterface::activateRowCutDebugger(const double *solution, bool keepContinuous) { delete rowCutDebugger_; rowCutDebugger_ = NULL; // so won't use in new rowCutDebugger_ = new OsiRowCutDebugger(*this, solution, keepContinuous); } //------------------------------------------------------------------- // Get Row Cut Debugger
// If there is a row cut debugger object associated with // model AND if the known optimal solution is within the // current feasible region then a pointer to the object is // returned which may be used to test validity of cuts. // Otherwise NULL is returned const OsiRowCutDebugger *OsiSolverInterface::getRowCutDebugger() const { if (rowCutDebugger_ && rowCutDebugger_->onOptimalPath(*this)) { return rowCutDebugger_; } else { return NULL; } } // If you want to get debugger object even if not on optimal path then use this OsiRowCutDebugger *OsiSolverInterface::getRowCutDebuggerAlways() const { if (rowCutDebugger_ && rowCutDebugger_->active()) { return rowCutDebugger_; } else { return NULL; } } //############################################################################# // Constructors / Destructor / Assignment //############################################################################# //------------------------------------------------------------------- // Default Constructor //------------------------------------------------------------------- OsiSolverInterface::OsiSolverInterface() : rowCutDebugger_(NULL) , handler_(NULL) , defaultHandler_(true) , columnType_(NULL) , appDataEtc_(NULL) , ws_(NULL) { setInitialData(); } // Set data for default constructor void OsiSolverInterface::setInitialData() { delete rowCutDebugger_; rowCutDebugger_ = NULL; delete ws_; ws_ = NULL; delete appDataEtc_; appDataEtc_ = new OsiAuxInfo(); if (defaultHandler_) { delete handler_; handler_ = NULL; } defaultHandler_ = true; delete[] columnType_; columnType_ = NULL; intParam_[OsiMaxNumIteration] = 9999999; intParam_[OsiMaxNumIterationHotStart] = 9999999; intParam_[OsiNameDiscipline] = 0; // Dual objective limit is acceptable `badness'; for minimisation, COIN_DBL_MAX dblParam_[OsiDualObjectiveLimit] = COIN_DBL_MAX; // Primal objective limit is desired `goodness'; for minimisation, -COIN_DBL_MAX dblParam_[OsiPrimalObjectiveLimit] = -COIN_DBL_MAX; dblParam_[OsiDualTolerance] = 1e-6; dblParam_[OsiPrimalTolerance] = 1e-6; dblParam_[OsiObjOffset] = 0.0; strParam_[OsiProbName] = "OsiDefaultName"; strParam_[OsiSolverName] = "Unknown Solver"; handler_ = new CoinMessageHandler(); messages_ = CoinMessage(); // initialize all hints int hint; for (hint = OsiDoPresolveInInitial; hint < OsiLastHintParam; hint++) { hintParam_[hint] = false; hintStrength_[hint] = OsiHintIgnore; } // objects numberObjects_ = 0; numberIntegers_ = -1; object_ = NULL; // names rowNames_ = OsiNameVec(0); colNames_ = OsiNameVec(0); objName_ = ""; } //------------------------------------------------------------------- // Copy constructor //------------------------------------------------------------------- OsiSolverInterface::OsiSolverInterface(const OsiSolverInterface &rhs) : rowCutDebugger_(NULL) , ws_(NULL) { appDataEtc_ = rhs.appDataEtc_->clone(); if (rhs.rowCutDebugger_ != NULL) rowCutDebugger_ = new OsiRowCutDebugger(*rhs.rowCutDebugger_); defaultHandler_ = rhs.defaultHandler_; if (defaultHandler_) { handler_ = new CoinMessageHandler(*rhs.handler_); } else { handler_ = rhs.handler_; } messages_ = CoinMessages(rhs.messages_); CoinDisjointCopyN(rhs.intParam_, OsiLastIntParam, intParam_); CoinDisjointCopyN(rhs.dblParam_, OsiLastDblParam, dblParam_); CoinDisjointCopyN(rhs.strParam_, OsiLastStrParam, strParam_); CoinDisjointCopyN(rhs.hintParam_, OsiLastHintParam, hintParam_); CoinDisjointCopyN(rhs.hintStrength_, OsiLastHintParam, hintStrength_); // objects numberObjects_ = rhs.numberObjects_; numberIntegers_ = rhs.numberIntegers_; if (numberObjects_) { object_ = new OsiObject *[numberObjects_]; for (int i = 0; i < numberObjects_; i++) object_[i] = rhs.object_[i]->clone(); } else { object_ = NULL; } // names rowNames_ = rhs.rowNames_; colNames_ = rhs.colNames_; objName_ = rhs.objName_; // NULL as number of columns not known columnType_ = NULL; } //------------------------------------------------------------------- // Destructor //------------------------------------------------------------------- OsiSolverInterface::~OsiSolverInterface() { // delete debugger - should be safe as only ever returned const delete rowCutDebugger_; rowCutDebugger_ = NULL; delete ws_; ws_ = NULL; delete appDataEtc_; if (defaultHandler_) { delete handler_; handler_ = NULL; } for (int i = 0; i < numberObjects_; i++) delete object_[i]; delete[] object_; delete[] columnType_; } //---------------------------------------------------------------- // Assignment operator //------------------------------------------------------------------- OsiSolverInterface & OsiSolverInterface::operator=(const OsiSolverInterface &rhs) { if (this != &rhs) { delete appDataEtc_; appDataEtc_ = rhs.appDataEtc_->clone(); delete rowCutDebugger_; if (rhs.rowCutDebugger_ != NULL) rowCutDebugger_ = new OsiRowCutDebugger(*rhs.rowCutDebugger_); else rowCutDebugger_ = NULL; CoinDisjointCopyN(rhs.intParam_, OsiLastIntParam, intParam_); CoinDisjointCopyN(rhs.dblParam_, OsiLastDblParam, dblParam_); CoinDisjointCopyN(rhs.strParam_, OsiLastStrParam, strParam_); CoinDisjointCopyN(rhs.hintParam_, OsiLastHintParam, hintParam_); CoinDisjointCopyN(rhs.hintStrength_, OsiLastHintParam, hintStrength_); delete ws_; ws_ = NULL; if (defaultHandler_) { delete handler_; handler_ = NULL; } defaultHandler_ = rhs.defaultHandler_; if (defaultHandler_) { handler_ = new CoinMessageHandler(*rhs.handler_); } else { handler_ = rhs.handler_; } // objects int i; for (i = 0; i < numberObjects_; i++) delete object_[i]; delete[] object_; numberObjects_ = rhs.numberObjects_; numberIntegers_ = rhs.numberIntegers_; if (numberObjects_) { object_ = new OsiObject *[numberObjects_]; for (i = 0; i < numberObjects_; i++) object_[i] = rhs.object_[i]->clone(); } else { object_ = NULL; } // names rowNames_ = rhs.rowNames_; colNames_ = rhs.colNames_; objName_ = rhs.objName_; delete[] columnType_; // NULL as number of columns not known columnType_ = NULL; } return *this; } //----------------------------------------------------------------------------- // Read mps files //----------------------------------------------------------------------------- int OsiSolverInterface::readMps(const char *filename, const char *extension) { CoinMpsIO m; int logLvl = handler_->logLevel(); if (logLvl > 1) { m.messageHandler()->setLogLevel(handler_->logLevel()); } else { m.messageHandler()->setLogLevel(0); } m.setInfinity(getInfinity()); int numberErrors = m.readMps(filename, extension); handler_->message(COIN_SOLVER_MPS, messages_) << m.getProblemName() << numberErrors << CoinMessageEol; if (!numberErrors) { // set objective function offest setDblParam(OsiObjOffset, m.objectiveOffset()); // set problem name setStrParam(OsiProbName, m.getProblemName()); // no errors --- load problem, set names and integrality loadProblem(*m.getMatrixByCol(), m.getColLower(), m.getColUpper(), m.getObjCoefficients(), m.getRowSense(), m.getRightHandSide(), m.getRowRange()); setRowColNames(m); const char *integer = m.integerColumns(); if (integer) { int i, n = 0; int nCols = m.getNumCols(); int *index = new int[nCols]; for (i = 0; i < nCols; i++) { if (integer[i]) { index[n++] = i; } } setInteger(index, n); delete[] index; } } return numberErrors; } /* Read a problem in GMPL format from the given filenames. Will only work if glpk installed */ int OsiSolverInterface::readGMPL(const char *filename, const char *dataname) { CoinMpsIO m; m.setInfinity(getInfinity()); m.passInMessageHandler(handler_); int numberErrors = m.readGMPL(filename, dataname, false); handler_->message(COIN_SOLVER_MPS, messages_) << m.getProblemName() << numberErrors << CoinMessageEol; if (!numberErrors) { // set objective function offest setDblParam(OsiObjOffset, m.objectiveOffset()); // set problem name setStrParam(OsiProbName, m.getProblemName()); // no errors --- load problem, set names and integrality loadProblem(*m.getMatrixByCol(), m.getColLower(), m.getColUpper(), m.getObjCoefficients(), m.getRowSense(), m.getRightHandSide(), m.getRowRange()); setRowColNames(m); const char *integer = m.integerColumns(); if (integer) { int i, n = 0; int nCols = m.getNumCols(); int *index = new int[nCols]; for (i = 0; i < nCols; i++) { if (integer[i]) { index[n++] = i; } } setInteger(index, n); delete[] index; } } return numberErrors; } /* Read a problem in MPS format from the given full filename. This uses CoinMpsIO::readMps() to read the MPS file and returns the number of errors encountered. It also may return an array of set information */ int OsiSolverInterface::readMps(const char *filename, const char *extension, int &numberSets, CoinSet **&sets) { CoinMpsIO m; m.setInfinity(getInfinity()); int numberErrors = m.readMps(filename, extension, numberSets, sets); handler_->message(COIN_SOLVER_MPS, messages_) << m.getProblemName() << numberErrors << CoinMessageEol; if (!numberErrors) { // set objective function offset setDblParam(OsiObjOffset, m.objectiveOffset()); // set problem name setStrParam(OsiProbName, m.getProblemName()); // no errors --- load problem, set names and integrality loadProblem(*m.getMatrixByCol(), m.getColLower(), m.getColUpper(), m.getObjCoefficients(), m.getRowSense(), m.getRightHandSide(), m.getRowRange()); setRowColNames(m); const char *integer = m.integerColumns(); if (integer) { int i, n = 0; int nCols = m.getNumCols(); int *index = new int[nCols]; for (i = 0; i < nCols; i++) { if (integer[i]) { index[n++] = i; } } setInteger(index, n); delete[] index; } } return numberErrors; } int OsiSolverInterface::writeMpsNative(const char *filename, const char **rowNames, const char **columnNames, int formatType, int numberAcross, double objSense, int numberSOS, const CoinSet *setInfo) const { const int numcols = getNumCols(); char *integrality = CoinCopyOfArray(getColType(false), numcols); bool hasInteger = false; for (int i = 0; i < numcols; ++i) { if (isInteger(i)) { hasInteger = true; break; } } // Get multiplier for objective function - default 1.0 double *objective = new double[numcols]; memcpy(objective, getObjCoefficients(), numcols * sizeof(double)); //if (objSense*getObjSense()<0.0) { double locObjSense = (objSense == 0 ? 1 : objSense); if (getObjSense() * locObjSense < 0.0) { for (int i = 0; i < numcols; ++i) objective[i] = -objective[i]; } CoinMpsIO writer; writer.setInfinity(getInfinity()); writer.passInMessageHandler(handler_); writer.setMpsData(*getMatrixByCol(), getInfinity(), getColLower(), getColUpper(), objective, hasInteger ? integrality : 0, getRowLower(), getRowUpper(), columnNames, rowNames); double objOffset = 0.0; getDblParam(OsiObjOffset, objOffset); writer.setObjectiveOffset(objOffset); delete[] objective; delete[] integrality; return writer.writeMps(filename, 1 /*gzip it*/, formatType, numberAcross, NULL, numberSOS, setInfo); } /***********************************************************************/ void OsiSolverInterface::writeLp(const char *filename, const char *extension, double epsilon, int numberAcross, int decimals, double objSense, bool useRowNames) const { std::string f(filename); std::string e(extension); std::string fullname; if (e != "") { fullname = f + "." + e; } else { // no extension so no trailing period fullname = f; } char **colnames; char **rownames; int nameDiscipline; if (!getIntParam(OsiNameDiscipline, nameDiscipline)) nameDiscipline = 0; if (useRowNames && nameDiscipline == 2) { colnames = new char *[getNumCols()]; rownames = new char *[getNumRows() + 1]; for (int i = 0; i < getNumCols(); ++i) colnames[i] = strdup(getColName(i).c_str()); for (int i = 0; i < getNumRows(); ++i) rownames[i] = strdup(getRowName(i).c_str()); rownames[getNumRows()] = strdup(getObjName().c_str()); } else { colnames = NULL; rownames = NULL; } // Fall back on Osi version OsiSolverInterface::writeLpNative(fullname.c_str(), rownames, colnames, epsilon, numberAcross, decimals, objSense, useRowNames); if (useRowNames && nameDiscipline == 2) { for (int i = 0; i < getNumCols(); ++i) free(colnames[i]); for (int i = 0; i < getNumRows() + 1; ++i) free(rownames[i]); delete[] colnames; delete[] rownames; } } /*************************************************************************/ void OsiSolverInterface::writeLp(FILE *fp, double epsilon, int numberAcross, int decimals, double objSense, bool useRowNames) const { char **colnames; char **rownames; int nameDiscipline; getIntParam(OsiNameDiscipline, nameDiscipline); if (useRowNames && nameDiscipline == 2) { colnames = new char *[getNumCols()]; rownames = new char *[getNumRows() + 1]; for (int i = 0; i < getNumCols(); ++i) colnames[i] = strdup(getColName(i).c_str()); for (int i = 0; i < getNumRows(); ++i) rownames[i] = strdup(getRowName(i).c_str()); rownames[getNumRows()] = strdup(getObjName().c_str()); } else { colnames = NULL; rownames = NULL; } // Fall back on Osi version OsiSolverInterface::writeLpNative(fp, rownames, colnames, epsilon, numberAcross, decimals, objSense, useRowNames); if (useRowNames && nameDiscipline == 2) { for (int i = 0; i < getNumCols(); ++i) free(colnames[i]); for (int i = 0; i < getNumRows() + 1; ++i) free(rownames[i]); delete[] colnames; delete[] rownames; } } /***********************************************************************/ int OsiSolverInterface::writeLpNative(const char *filename, char const *const *const rowNames, char const *const *const columnNames, const double epsilon, const int numberAcross, const int decimals, const double objSense, const bool useRowNames) const { FILE *fp = NULL; fp = fopen(filename, "w"); if (!fp) { printf("### ERROR: in OsiSolverInterface::writeLpNative(): unable to open file %s\n", filename); exit(1); } int nerr = writeLpNative(fp, rowNames, columnNames, epsilon, numberAcross, decimals, objSense, useRowNames); fclose(fp); return (nerr); } /***********************************************************************/ int OsiSolverInterface::writeLpNative(FILE *fp, char const *const *const rowNames, char const *const *const columnNames, const double epsilon, const int numberAcross, const int decimals, const double objSense, const bool useRowNames) const { const int numcols = getNumCols(); char *integrality = new char[numcols]; bool hasInteger = false; for (int i = 0; i < numcols; i++) { if (isInteger(i)) { integrality[i] = 1; hasInteger = true; } else { integrality[i] = 0; } } // Get multiplier for objective function - default 1.0 double *objective = new double[numcols]; const double *curr_obj = getObjCoefficients(); //if(getObjSense() * objSense < 0.0) { double locObjSense = (objSense == 0 ? 1 : objSense); if (getObjSense() * locObjSense < 0.0) { for (int i = 0; i < numcols; i++) { objective[i] = -curr_obj[i]; } } else { for (int i = 0; i < numcols; i++) { objective[i] = curr_obj[i]; } } CoinLpIO writer; writer.setInfinity(getInfinity()); writer.setEpsilon(epsilon); writer.setNumberAcross(numberAcross); writer.setDecimals(decimals); writer.setLpDataWithoutRowAndColNames(*getMatrixByRow(), getColLower(), getColUpper(), objective, hasInteger ? integrality : 0, getRowLower(), getRowUpper()); writer.setLpDataRowAndColNames(rowNames, columnNames); //writer.print(); delete[] objective; delete[] integrality; return writer.writeLp(fp, epsilon, numberAcross, decimals, useRowNames); } /*writeLpNative */ /*************************************************************************/ int OsiSolverInterface::readLp(const char *filename, const double epsilon) { FILE *fp = fopen(filename, "r"); if (!fp) { printf("### ERROR: OsiSolverInterface::readLp(): Unable to open file %s for reading\n", filename); return (1); } int nerr = readLp(fp, epsilon); // closed by readLP fclose(fp); return (nerr); } /*************************************************************************/ int OsiSolverInterface::readLp(FILE *fp, const double epsilon) { CoinLpIO m; m.readLp(fp, epsilon); // set objective function offest setDblParam(OsiObjOffset, 0); // set problem name setStrParam(OsiProbName, m.getProblemName()); // no errors --- load problem, set names and integrality loadProblem(*m.getMatrixByRow(), m.getColLower(), m.getColUpper(), m.getObjCoefficients(), m.getRowLower(), m.getRowUpper()); setRowColNames(m); const char *integer = m.integerColumns(); if (integer) { int i, n = 0; int nCols = m.getNumCols(); int *index = new int[nCols]; for (i = 0; i < nCols; i++) { if (integer[i]) { index[n++] = i; } } setInteger(index, n); delete[] index; } setObjSense(1); return (0); } /* readLp */ /*************************************************************************/ // Pass in Message handler (not deleted at end) void OsiSolverInterface::passInMessageHandler(CoinMessageHandler *handler) { if (defaultHandler_) { delete handler_; handler_ = NULL; } defaultHandler_ = false; handler_ = handler; } // Set language void OsiSolverInterface::newLanguage(CoinMessages::Language language) { messages_ = CoinMessage(language); } // Is the given primal objective limit reached? bool OsiSolverInterface::isPrimalObjectiveLimitReached() const { double primalobjlimit; if (getDblParam(OsiPrimalObjectiveLimit, primalobjlimit)) return getObjSense() * getObjValue() < getObjSense() * primalobjlimit; else return false; } // Is the given dual objective limit reached? bool OsiSolverInterface::isDualObjectiveLimitReached() const { double dualobjlimit; if (getDblParam(OsiDualObjectiveLimit, dualobjlimit)) return getObjSense() * getObjValue() > getObjSense() * dualobjlimit; else return false; } // copy all parameters in this section from one solver to another void OsiSolverInterface::copyParameters(OsiSolverInterface &rhs) { /* We should think about this block of code. appData, rowCutDebugger, and handler_ are not part of the standard parameter data. Arguably copy actions for them belong in the base Osi.clone() or as separate methods. -lh, 091021- */ delete appDataEtc_; appDataEtc_ = rhs.appDataEtc_->clone(); delete rowCutDebugger_; if (rhs.rowCutDebugger_ != NULL) rowCutDebugger_ = new OsiRowCutDebugger(*rhs.rowCutDebugger_); else rowCutDebugger_ = NULL; if (defaultHandler_) { delete handler_; } /* Is this correct? Shouldn't we clone a non-default handler instead of simply assigning the pointer? -lh, 091021- */ defaultHandler_ = rhs.defaultHandler_; if (defaultHandler_) { handler_ = new CoinMessageHandler(*rhs.handler_); } else { handler_ = rhs.handler_; } CoinDisjointCopyN(rhs.intParam_, OsiLastIntParam, intParam_); CoinDisjointCopyN(rhs.dblParam_, OsiLastDblParam, dblParam_); CoinDisjointCopyN(rhs.strParam_, OsiLastStrParam, strParam_); CoinDisjointCopyN(rhs.hintParam_, OsiLastHintParam, hintParam_); CoinDisjointCopyN(rhs.hintStrength_, OsiLastHintParam, hintStrength_); } // Resets as if default constructor void OsiSolverInterface::reset() { // Throw an exception throw CoinError("Needs coding for this interface", "reset", "OsiSolverInterface"); } /*Enables normal operation of subsequent functions. This method is supposed to ensure that all typical things (like reduced costs, etc.) are updated when individual pivots are executed and can be queried by other methods. says whether will be doing primal or dual */ void OsiSolverInterface::enableSimplexInterface(bool) {} //Undo whatever setting changes the above method had to make void OsiSolverInterface::disableSimplexInterface() {} /* Returns 1 if can just do getBInv etc 2 if has all OsiSimplex methods and 0 if it has none */ int OsiSolverInterface::canDoSimplexInterface() const { return 0; } /* Tells solver that calls to getBInv etc are about to take place. Underlying code may need mutable as this may be called from CglCut:;generateCuts which is const. If that is too horrific then each solver e.g. BCP or CBC will have to do something outside main loop. */ void OsiSolverInterface::enableFactorization() const { // Throw an exception throw CoinError("Needs coding for this interface", "enableFactorization", "OsiSolverInterface"); } // and stop void OsiSolverInterface::disableFactorization() const { // Throw an exception throw CoinError("Needs coding for this interface", "disableFactorization", "OsiSolverInterface"); } //Returns true if a basis is available bool OsiSolverInterface::basisIsAvailable() const { return false; } /* (JJF ?date?) The following two methods may be replaced by the methods of OsiSolverInterface using OsiWarmStartBasis if: 1. OsiWarmStartBasis resize operation is implemented more efficiently and 2. It is ensured that effects on the solver are the same (lh 100818) 1. CoinWarmStartBasis is the relevant resize, and John's right, it needs to be reworked. The problem is that when new columns or rows are added, the new space is initialised two bits at a time. It needs to be done in bulk. There are other problems with CoinWarmStartBasis that should be addressed at the same time. 2. setWarmStart followed by resolve should do it. */ void OsiSolverInterface::getBasisStatus(int *, int *) const { // Throw an exception throw CoinError("Needs coding for this interface", "getBasisStatus", "OsiSolverInterface"); } /* Set the status of structural/artificial variables and factorize, update solution etc NOTE artificials are treated as +1 elements so for <= rhs artificial will be at lower bound if constraint is tight */ int OsiSolverInterface::setBasisStatus(const int *, const int *) { // Throw an exception throw CoinError("Needs coding for this interface", "setBasisStatus", "OsiSolverInterface"); } /* Perform a pivot by substituting a colIn for colOut in the basis. The status of the leaving variable is given in statOut. Where 1 is to upper bound, -1 to lower bound */ int OsiSolverInterface::pivot(int, int, int) { // Throw an exception throw CoinError("Needs coding for this interface", "pivot", "OsiSolverInterface"); } /* Obtain a result of the primal pivot Outputs: colOut -- leaving column, outStatus -- its status, t -- step size, and, if dx!=NULL, *dx -- primal ray direction. Inputs: colIn -- entering column, sign -- direction of its change (+/-1). Both for colIn and colOut, artificial variables are index by the negative of the row index minus 1. Return code (for now): 0 -- leaving variable found, -1 -- everything else? Clearly, more informative set of return values is required Primal and dual solutions are updated */ int OsiSolverInterface::primalPivotResult(int, int, int &, int &, double &, CoinPackedVector *) { // Throw an exception throw CoinError("Needs coding for this interface", "primalPivotResult", "OsiSolverInterface"); } /* Obtain a result of the dual pivot (similar to the previous method) Differences: entering variable and a sign of its change are now the outputs, the leaving variable and its statuts -- the inputs If dx!=NULL, then *dx contains dual ray Return code: same */ int OsiSolverInterface::dualPivotResult(int &, int &, int, int, double &, CoinPackedVector *) { // Throw an exception throw CoinError("Needs coding for this interface", "dualPivotResult", "OsiSolverInterface"); } //Get the reduced gradient for the cost vector c void OsiSolverInterface::getReducedGradient(double *, double *, const double *) const { // Throw an exception throw CoinError("Needs coding for this interface", "getReducedGradient", "OsiSolverInterface"); } //Get a row of the tableau (slack part in slack if not NULL) void OsiSolverInterface::getBInvARow(int, double *, double *) const { // Throw an exception throw CoinError("Needs coding for this interface", "getBInvARow", "OsiSolverInterface"); } //Get a row of the basis inverse void OsiSolverInterface::getBInvRow(int, double *) const { // Throw an exception throw CoinError("Needs coding for this interface", "getBInvRow", "OsiSolverInterface"); } //Get a column of the tableau void OsiSolverInterface::getBInvACol(int, double *) const { // Throw an exception throw CoinError("Needs coding for this interface", "getBInvACol", "OsiSolverInterface"); } //Get a column of the basis inverse void OsiSolverInterface::getBInvCol(int, double *) const { // Throw an exception throw CoinError("Needs coding for this interface", "getBInvCol", "OsiSolverInterface"); } /* Get warm start information. Return warm start information for the current state of the solver interface. If there is no valid warm start information, an empty warm start object wil be returned. This does not necessarily create an object - may just point to one. must Delete set true if user should delete returned object. OsiClp version always returns pointer and false. */ CoinWarmStart * OsiSolverInterface::getPointerToWarmStart(bool &mustDelete) { mustDelete = true; return getWarmStart(); } /* Get basic indices (order of indices corresponds to the order of elements in a vector retured by getBInvACol() and getBInvCol()). */ void OsiSolverInterface::getBasics(int *) const { // Throw an exception throw CoinError("Needs coding for this interface", "getBasics", "OsiSolverInterface"); } /* Check two models against each other. Return nonzero if different. Ignore names if that set. May modify both models by cleaning up */ int OsiSolverInterface::differentModel(OsiSolverInterface &other, bool /*ignoreNames*/) { // set reasonable defaults bool takeHint; OsiHintStrength strength; // Switch off printing if asked to bool gotHint = (getHintParam(OsiDoReducePrint, takeHint, strength)); assert(gotHint); bool printStuff = true; if (strength != OsiHintIgnore && takeHint) printStuff = false; int returnCode = 0; int numberRows = getNumRows(); int numberColumns = getNumCols(); int numberIntegers = getNumIntegers(); if (numberRows != other.getNumRows() || numberColumns != other.getNumCols()) { if (printStuff) printf("** Mismatch on size, this has %d rows, %d columns - other has %d rows, %d columns\n", numberRows, numberColumns, other.getNumRows(), other.getNumCols()); return 1000; } if (numberIntegers != other.getNumIntegers()) { if (printStuff) printf("** Mismatch on number of integers, this has %d - other has %d\n", numberIntegers, other.getNumIntegers()); return 1001; } int numberErrors1 = 0; int numberErrors2 = 0; for (int i = 0; i < numberColumns; i++) { if (isInteger(i)) { if (!other.isInteger(i)) numberErrors1++; } else { if (other.isInteger(i)) numberErrors2++; } } if (numberErrors1 || numberErrors2) { if (printStuff) printf("** Mismatch on integers, %d (this int, other not), %d (this not other int)\n", numberErrors1, numberErrors2); return 1002; } // Arrays const double *rowLower = getRowLower(); const double *rowUpper = getRowUpper(); const double *columnLower = getColLower(); const double *columnUpper = getColUpper(); const double *objective = getObjCoefficients(); const double *rowLower2 = other.getRowLower(); const double *rowUpper2 = other.getRowUpper(); const double *columnLower2 = other.getColLower(); const double *columnUpper2 = other.getColUpper(); const double *objective2 = other.getObjCoefficients(); const CoinPackedMatrix *matrix = getMatrixByCol(); const CoinPackedMatrix *matrix2 = other.getMatrixByCol(); CoinRelFltEq tolerance; int numberDifferentL = 0; int numberDifferentU = 0; for (int i = 0; i < numberRows; i++) { if (!tolerance(rowLower[i], rowLower2[i])) numberDifferentL++; if (!tolerance(rowUpper[i], rowUpper2[i])) numberDifferentU++; } int n = numberDifferentL + numberDifferentU; returnCode += n; if (n && printStuff) printf("Row differences , %d lower, %d upper\n", numberDifferentL, numberDifferentU); numberDifferentL = 0; numberDifferentU = 0; int numberDifferentO = 0; for (int i = 0; i < numberColumns; i++) { if (!tolerance(columnLower[i], columnLower2[i])) numberDifferentL++; if (!tolerance(columnUpper[i], columnUpper2[i])) numberDifferentU++; if (!tolerance(objective[i], objective2[i])) numberDifferentO++; } n = numberDifferentL + numberDifferentU + numberDifferentO; returnCode += n; if (n && printStuff) printf("Column differences , %d lower, %d upper, %d objective\n", numberDifferentL, numberDifferentU, numberDifferentO); if (matrix->getNumElements() == other.getNumElements()) { if (!matrix->isEquivalent(*matrix2, tolerance)) { returnCode += 100; if (printStuff) printf("Two matrices are not same\n"); } } else { returnCode += 200; if (printStuff) printf("Two matrices are not same - %d elements and %d elements\n", matrix->getNumElements(), matrix2->getNumElements()); } return returnCode; } #ifdef COIN_SNAPSHOT // Fill in a CoinSnapshot CoinSnapshot * OsiSolverInterface::snapshot(bool createArrays) const { CoinSnapshot *snap = new CoinSnapshot(); // scalars snap->setObjSense(getObjSense()); snap->setInfinity(getInfinity()); snap->setObjValue(getObjValue()); double objOffset = 0.0; getDblParam(OsiObjOffset, objOffset); snap->setObjOffset(objOffset); snap->setDualTolerance(dblParam_[OsiDualTolerance]); snap->setPrimalTolerance(dblParam_[OsiPrimalTolerance]); snap->setIntegerTolerance(getIntegerTolerance()); snap->setIntegerUpperBound(dblParam_[OsiDualObjectiveLimit]); if (createArrays) { snap->loadProblem(*getMatrixByCol(), getColLower(), getColUpper(), getObjCoefficients(), getRowLower(), getRowUpper()); snap->createRightHandSide(); // Solution snap->setColSolution(getColSolution(), true); snap->setRowPrice(getRowPrice(), true); snap->setReducedCost(getReducedCost(), true); snap->setRowActivity(getRowActivity(), true); } else { snap->setNumCols(getNumCols()); snap->setNumRows(getNumRows()); snap->setNumElements(getNumElements()); snap->setMatrixByCol(getMatrixByCol(), false); snap->setColLower(getColLower(), false); snap->setColUpper(getColUpper(), false); snap->setObjCoefficients(getObjCoefficients(), false); snap->setRowLower(getRowLower(), false); snap->setRowUpper(getRowUpper(), false); // Solution snap->setColSolution(getColSolution(), false); snap->setRowPrice(getRowPrice(), false); snap->setReducedCost(getReducedCost(), false); snap->setRowActivity(getRowActivity(), false); } // If integer then create array (which snapshot has to own); int numberColumns = getNumCols(); char *type = new char[numberColumns]; int numberIntegers = 0; for (int i = 0; i < numberColumns; i++) { if (isInteger(i)) { numberIntegers++; if (isBinary(i)) type[i] = 'B'; else type[i] = 'I'; } else { type[i] = 'C'; } } if (numberIntegers) snap->setColType(type, true); else snap->setNumIntegers(0); delete[] type; return snap; } #endif /* Identify integer variables and create corresponding objects. Record integer variables and create an OsiSimpleInteger object for each one. All existing OsiSimpleInteger objects will be destroyed. New */ void OsiSolverInterface::findIntegers(bool justCount) { numberIntegers_ = 0; int numberColumns = getNumCols(); int iColumn; for (iColumn = 0; iColumn < numberColumns; iColumn++) { if (isInteger(iColumn)) numberIntegers_++; } if (justCount) { assert(!numberObjects_); assert(!object_); return; } int numberIntegers = 0; int iObject; for (iObject = 0; iObject < numberObjects_; iObject++) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(object_[iObject]); if (obj) numberIntegers++; } // if same number return if (numberIntegers_ == numberIntegers) return; // space for integers int *marked = new int[numberColumns]; for (iColumn = 0; iColumn < numberColumns; iColumn++) marked[iColumn] = -1; // mark simple integers OsiObject **oldObject = object_; int nObjects = numberObjects_; for (iObject = 0; iObject < nObjects; iObject++) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(oldObject[iObject]); if (obj) { iColumn = obj->columnNumber(); assert(iColumn >= 0 && iColumn < numberColumns); marked[iColumn] = iObject; } } // make a large enough array for new objects numberObjects_ += numberIntegers_ - numberIntegers; if (numberObjects_) object_ = new OsiObject *[numberObjects_]; else object_ = NULL; /* Walk the variables again, filling in the indices and creating objects for the integer variables. Initially, the objects hold the index and upper & lower bounds. */ numberObjects_ = 0; for (iColumn = 0; iColumn < numberColumns; iColumn++) { if (isInteger(iColumn)) { iObject = marked[iColumn]; if (iObject >= 0) object_[numberObjects_++] = oldObject[iObject]; else object_[numberObjects_++] = new OsiSimpleInteger(this, iColumn); } } // Now append other objects for (iObject = 0; iObject < nObjects; iObject++) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(oldObject[iObject]); if (!obj) object_[numberObjects_++] = oldObject[iObject]; } // Delete old array (just array) delete[] oldObject; delete[] marked; } /* Identify integer variables and SOS and create corresponding objects. Record integer variables and create an OsiSimpleInteger object for each one. All existing OsiSimpleInteger objects will be destroyed. If the solver supports SOS then do the same for SOS. If justCount then no objects created and we just store numberIntegers_ Returns number of SOS */ int OsiSolverInterface::findIntegersAndSOS(bool justCount) { findIntegers(justCount); return 0; } // Delete all object information void OsiSolverInterface::deleteObjects() { for (int i = 0; i < numberObjects_; i++) delete object_[i]; delete[] object_; object_ = NULL; numberObjects_ = 0; } /* Add in object information. Objects are cloned; the owner can delete the originals. */ void OsiSolverInterface::addObjects(int numberObjects, OsiObject **objects) { // Create integers if first time if (!numberObjects_) findIntegers(false); /* But if incoming objects inherit from simple integer we just want to replace */ int numberColumns = getNumCols(); /** mark is -1 if not integer, >=0 if using existing simple integer and >=numberColumns if using new integer */ int *mark = new int[numberColumns]; int i; for (i = 0; i < numberColumns; i++) mark[i] = -1; int newNumberObjects = numberObjects; int newIntegers = 0; for (i = 0; i < numberObjects; i++) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(objects[i]); if (obj) { int iColumn = obj->columnNumber(); mark[iColumn] = i + numberColumns; newIntegers++; } } // and existing for (i = 0; i < numberObjects_; i++) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(object_[i]); if (obj) { int iColumn = obj->columnNumber(); if (mark[iColumn] < 0) { newIntegers++; newNumberObjects++; mark[iColumn] = i; } else { // But delete existing delete object_[i]; object_[i] = NULL; } } else { newNumberObjects++; } } numberIntegers_ = newIntegers; OsiObject **temp = new OsiObject *[newNumberObjects]; // Put integers first newIntegers = 0; numberIntegers_ = 0; for (i = 0; i < numberColumns; i++) { int which = mark[i]; if (which >= 0) { if (!isInteger(i)) { newIntegers++; setInteger(i); } if (which < numberColumns) { temp[numberIntegers_] = object_[which]; } else { temp[numberIntegers_] = objects[which - numberColumns]->clone(); } numberIntegers_++; } } int n = numberIntegers_; // Now rest of old for (i = 0; i < numberObjects_; i++) { if (object_[i]) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(object_[i]); if (!obj) { temp[n++] = object_[i]; } } } // and rest of new for (i = 0; i < numberObjects; i++) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(objects[i]); if (!obj) { temp[n++] = objects[i]->clone(); } } delete[] mark; delete[] object_; object_ = temp; numberObjects_ = newNumberObjects; } // Deletes branching information before columns deleted void OsiSolverInterface::deleteBranchingInfo(int numberDeleted, const int *which) { if (numberObjects_) { int numberColumns = getNumCols(); // mark is -1 if deleted and new number if not deleted int *mark = new int[numberColumns]; int i; int iColumn; for (i = 0; i < numberColumns; i++) mark[i] = 0; for (i = 0; i < numberDeleted; i++) { iColumn = which[i]; if (iColumn >= 0 && iColumn < numberColumns) mark[iColumn] = -1; } iColumn = 0; for (i = 0; i < numberColumns; i++) { if (mark[i] >= 0) { mark[i] = iColumn; iColumn++; } } int oldNumberObjects = numberObjects_; numberIntegers_ = 0; numberObjects_ = 0; for (i = 0; i < oldNumberObjects; i++) { OsiSimpleInteger *obj = dynamic_cast< OsiSimpleInteger * >(object_[i]); if (obj) { iColumn = obj->columnNumber(); int jColumn = mark[iColumn]; if (jColumn >= 0) { obj->setColumnNumber(jColumn); object_[numberObjects_++] = obj; numberIntegers_++; } else { delete obj; } } else { // not integer - all I know about is SOS OsiSOS *obj = dynamic_cast< OsiSOS * >(object_[i]); if (obj) { int oldNumberMembers = obj->numberMembers(); int numberMembers = 0; double *weight = obj->mutableWeights(); int *members = obj->mutableMembers(); for (int k = 0; k < oldNumberMembers; k++) { iColumn = members[k]; int jColumn = mark[iColumn]; if (jColumn >= 0) { members[numberMembers] = jColumn; weight[numberMembers++] = weight[k]; } } if (numberMembers) { obj->setNumberMembers(numberMembers); object_[numberObjects_++] = obj; } } } } delete[] mark; } else { findIntegers(false); } } /* Use current solution to set bounds so current integer feasible solution will stay feasible. Only feasible bounds will be used, even if current solution outside bounds. The amount of such violation will be returned (and if small can be ignored) */ double OsiSolverInterface::forceFeasible() { /* Run through the objects and use feasibleRegion() to set variable bounds so as to fix the variables specified in the objects at their value in this solution. Since the object list contains (at least) one object for every integer variable, this has the effect of fixing all integer variables. */ int i; // Can't guarantee has matrix const OsiBranchingInformation info(this, false, false); double infeasibility = 0.0; for (i = 0; i < numberObjects_; i++) infeasibility += object_[i]->feasibleRegion(this, &info); return infeasibility; } /* For variables currently at bound, fix at bound if reduced cost >= gap Returns number fixed */ int OsiSolverInterface::reducedCostFix(double gap, bool justInteger) { double direction = getObjSense(); double tolerance; getDblParam(OsiPrimalTolerance, tolerance); if (gap <= 0.0) return 0; const double *lower = getColLower(); const double *upper = getColUpper(); const double *solution = getColSolution(); const double *reducedCost = getReducedCost(); int numberFixed = 0; int numberColumns = getNumCols(); for (int iColumn = 0; iColumn < numberColumns; iColumn++) { if (isInteger(iColumn) || !justInteger) { double djValue = direction * reducedCost[iColumn]; if (upper[iColumn] - lower[iColumn] > tolerance) { if (solution[iColumn] < lower[iColumn] + tolerance && djValue > gap) { setColUpper(iColumn, lower[iColumn]); numberFixed++; } else if (solution[iColumn] > upper[iColumn] - tolerance && -djValue > gap) { setColLower(iColumn, upper[iColumn]); numberFixed++; } } } } return numberFixed; } #ifdef COIN_FACTORIZATION_INFO // Return number of entries in L part of current factorization CoinBigIndex OsiSolverInterface::getSizeL() const { return -1; } // Return number of entries in U part of current factorization CoinBigIndex OsiSolverInterface::getSizeU() const { return -1; } #endif #ifdef CBC_NEXT_VERSION /* Solve 2**N (N==depth) problems and return solutions and bases. There are N branches each of which changes bounds on both sides as given by branch. The user should provide an array of (empty) results which will be filled in. See OsiSolveResult for more details (in OsiSolveBranch.?pp) but it will include a basis and primal solution. The order of results is left to right at feasible leaf nodes so first one is down, down, ..... Returns number of feasible leaves. Also sets number of solves done and number of iterations. This is provided so a solver can do faster. If forceBranch true then branch done even if satisfied */ int OsiSolverInterface::solveBranches(int depth, const OsiSolverBranch *branch, OsiSolverResult *result, int &numberSolves, int &numberIterations, bool forceBranch) { int *stack = new int[depth]; CoinWarmStart **basis = new CoinWarmStart *[depth]; int iDepth; for (iDepth = 0; iDepth < depth; iDepth++) { stack[iDepth] = -1; basis[iDepth] = NULL; } //#define PRINTALL #ifdef PRINTALL int seq[10]; double val[10]; assert(iDepth <= 10); for (iDepth = 0; iDepth < depth; iDepth++) { assert(branch[iDepth].starts()[4] == 2); assert(branch[iDepth].which()[0] == branch[iDepth].which()[1]); assert(branch[iDepth].bounds()[0] == branch[iDepth].bounds()[1] - 1.0); seq[iDepth] = branch[iDepth].which()[0]; val[iDepth] = branch[iDepth].bounds()[0]; printf("depth %d seq %d nominal value %g\n", iDepth, seq[iDepth], val[iDepth] + 0.5); } #endif int numberColumns = getNumCols(); double *lowerBefore = CoinCopyOfArray(getColLower(), numberColumns); double *upperBefore = CoinCopyOfArray(getColUpper(), numberColumns); iDepth = 0; int numberFeasible = 0; bool finished = false; bool backTrack = false; bool iterated = false; numberIterations = 0; numberSolves = 0; int nFeas = 0; while (!finished) { bool feasible = true; if (stack[iDepth] == -1) { delete basis[iDepth]; basis[iDepth] = getWarmStart(); } else { setWarmStart(basis[iDepth]); } // may be a faster way setColLower(lowerBefore); setColUpper(upperBefore); for (int i = 0; i < iDepth; i++) { // skip if values feasible and not forceBranch if (stack[i]) branch[i].applyBounds(*this, stack[i]); } bool doBranch = true; if (!forceBranch && !backTrack) { // see if feasible on one side if (!branch[iDepth].feasibleOneWay(*this)) { branch[iDepth].applyBounds(*this, stack[iDepth]); } else { doBranch = false; stack[iDepth] = 0; } } else { branch[iDepth].applyBounds(*this, stack[iDepth]); } if (doBranch) { resolve(); numberIterations += getIterationCount(); numberSolves++; iterated = true; if (!isProvenOptimal() || isDualObjectiveLimitReached()) { feasible = false; #ifdef PRINTALL const double *columnLower = getColLower(); const double *columnUpper = getColUpper(); const double *columnSolution = getColSolution(); printf("infeas depth %d ", iDepth); for (int jDepth = 0; jDepth <= iDepth; jDepth++) { int iColumn = seq[jDepth]; printf(" (%d %g, %g, %g (nom %g))", iColumn, columnLower[iColumn], columnSolution[iColumn], columnUpper[iColumn], val[jDepth] + 0.5); } printf("\n"); #endif } } else { // must be feasible nFeas++; #ifdef PRINTALL const double *columnLower = getColLower(); const double *columnUpper = getColUpper(); const double *columnSolution = getColSolution(); printf("feas depth %d ", iDepth); int iColumn = seq[iDepth]; printf(" (%d %g, %g, %g (nom %g))", iColumn, columnLower[iColumn], columnSolution[iColumn], columnUpper[iColumn], val[iDepth] + 0.5); printf("\n"); #endif } backTrack = false; iDepth++; if (iDepth == depth || !feasible) { if (feasible && iterated) { result[numberFeasible++] = OsiSolverResult(*this, lowerBefore, upperBefore); #ifdef PRINTALL const double *columnLower = getColLower(); const double *columnUpper = getColUpper(); const double *columnSolution = getColSolution(); printf("sol obj %g", getObjValue()); for (int jDepth = 0; jDepth < depth; jDepth++) { int iColumn = seq[jDepth]; printf(" (%d %g, %g, %g (nom %g))", iColumn, columnLower[iColumn], columnSolution[iColumn], columnUpper[iColumn], val[jDepth] + 0.5); } printf("\n"); #endif } // on to next iDepth--; iterated = false; backTrack = true; while (stack[iDepth] >= 0) { if (iDepth == 0) { // finished finished = true; break; } stack[iDepth] = -1; iDepth--; } if (!finished) { stack[iDepth] = 1; } } } delete[] stack; for (iDepth = 0; iDepth < depth; iDepth++) delete basis[iDepth]; delete[] basis; // restore bounds setColLower(lowerBefore); setColUpper(upperBefore); delete[] lowerBefore; delete[] upperBefore; #if 0 static int xxxxxx=0; static int yyyyyy=0; static int zzzzzz=0; zzzzzz += nFeas; for (int j=0;j<(1<4 , larger gives more information 0 - Just set min and max values of coefficients */ void OsiSolverInterface::statistics(double &minimumNegative, double &maximumNegative, double &minimumPositive, double &maximumPositive, int type) const { minimumNegative = -COIN_DBL_MAX; maximumNegative = 0.0; minimumPositive = COIN_DBL_MAX; maximumPositive = 0.0; // get matrix data pointers const double *elementByColumn = getMatrixByCol()->getElements(); const CoinBigIndex *columnStart = getMatrixByCol()->getVectorStarts(); const int *columnLength = getMatrixByCol()->getVectorLengths(); const int *row = getMatrixByCol()->getIndices(); int numberColumns = getNumCols(); int numberRows = getNumRows(); CoinBigIndex numberElements = getMatrixByCol()->getNumElements(); int i; for (i = 0; i < numberColumns; i++) { CoinBigIndex j; for (j = columnStart[i]; j < columnStart[i] + columnLength[i]; j++) { double value = elementByColumn[j]; if (value > 0.0) { minimumPositive = CoinMin(minimumPositive, value); maximumPositive = CoinMax(maximumPositive, value); } else if (value < 0.0) { minimumNegative = CoinMax(minimumNegative, value); maximumNegative = CoinMin(maximumNegative, value); } } } if (!type) return; // more statistics const char *integerInformation = getColType(); const double *columnLower = getColLower(); const double *columnUpper = getColUpper(); int numberIntegers = getNumIntegers(); int iRow, iColumn; int numberBinary = 0; if (numberIntegers) { for (iColumn = 0; iColumn < numberColumns; iColumn++) { if (integerInformation[iColumn] == 1) numberBinary++; } if (type == 1) printf("Problem has %d rows, %d columns - %d integers (%d of which binary)\n", numberRows, numberColumns, numberIntegers, numberBinary); else printf("Problem has %d integers (%d of which binary)\n", numberIntegers, numberBinary); } else if (type == 1) { printf("Problem has %d rows, %d columns\n", numberRows, numberColumns); } const double *objective = getObjCoefficients(); if (numberIntegers) { double *obj = new double[numberIntegers]; int *which = new int[numberIntegers]; int numberFixed = 0; int numberZeroContinuous = 0; int numberZeroInteger = 0; int numberSort = 0; for (int iColumn = 0; iColumn < numberColumns; iColumn++) { if (columnUpper[iColumn] > columnLower[iColumn]) { if (!objective[iColumn]) { if (integerInformation[iColumn]) numberZeroInteger++; else numberZeroContinuous++; } else if (integerInformation[iColumn]) { obj[numberSort] = objective[iColumn]; which[numberSort++] = iColumn; } } else { numberFixed++; } } if (numberFixed) printf("%d variables fixed\n", numberFixed); if (numberZeroContinuous || numberZeroInteger) printf("Zero Objective coefficients - %d continuous and %d integer\n", numberZeroContinuous, numberZeroInteger); for (int ifAbs = 0; ifAbs < 2; ifAbs++) { int numberDifferentObj = 0; CoinSort_2(obj, obj + numberSort, which); double last = obj[0]; for (int jColumn = 1; jColumn < numberSort; jColumn++) { if (fabs(obj[jColumn] - last) > 1.0e-12) { numberDifferentObj++; last = obj[jColumn]; } obj[jColumn] = fabs(last); } numberDifferentObj++; printf("Range of integer objective coefficients %s ", ifAbs ? "(absolute values) " : ""); printf("(%g -> %g) - %d unique values\n", obj[0], last, numberDifferentObj); obj[0] = fabs(last); } delete[] which; delete[] obj; } if (type < 2) return; printf("\n"); const double *rowLower = getRowLower(); const double *rowUpper = getRowUpper(); int *number = new int[2 * CoinMax(numberRows, numberColumns)]; memset(number, 0, 2 * CoinMax(numberRows, numberColumns) * sizeof(int)); int *rowCount = number + CoinMax(numberRows, numberColumns); int numberObjSingletons = 0; /* cType 0 0/inf, 1 0/up, 2 lo/inf, 3 lo/up, 4 free, 5 fix, 6 -inf/0, 7 -inf/up, 8 0/1 */ int cType[9]; std::string cName[] = { "0.0->inf,", "0.0->up,", "lo->inf,", "lo->up,", "free,", "fixed,", "-inf->0.0,", "-inf->up,", "0.0->1.0" }; int nObjective = 0; memset(cType, 0, sizeof(cType)); for (iColumn = 0; iColumn < numberColumns; iColumn++) { int length = columnLength[iColumn]; if (length == 1 && objective[iColumn]) numberObjSingletons++; number[length]++; CoinBigIndex j; for (j = columnStart[iColumn]; j < columnStart[iColumn] + columnLength[iColumn]; j++) { rowCount[row[j]]++; } if (objective[iColumn]) nObjective++; if (columnLower[iColumn] > -1.0e20) { if (columnLower[iColumn] == 0.0) { if (columnUpper[iColumn] > 1.0e20) cType[0]++; else if (columnUpper[iColumn] == 1.0) cType[8]++; else if (columnUpper[iColumn] == 0.0) cType[5]++; else cType[1]++; } else { if (columnUpper[iColumn] > 1.0e20) cType[2]++; else if (columnUpper[iColumn] == columnLower[iColumn]) cType[5]++; else cType[3]++; } } else { if (columnUpper[iColumn] > 1.0e20) cType[4]++; else if (columnUpper[iColumn] == 0.0) cType[6]++; else cType[7]++; } } /* rType 0 E 0, 1 E 1, 2 E -1, 3 E other, 4 G 0, 5 G 1, 6 G other, 7 L 0, 8 L 1, 9 L other, 10 Range 0/1, 11 Range other, 12 free */ int rType[13]; std::string rName[] = { "E 0.0,", "E 1.0,", "E -1.0,", "E other,", "G 0.0,", "G 1.0,", "G other,", "L 0.0,", "L 1.0,", "L other,", "Range 0.0->1.0,", "Range other,", "Free" }; memset(rType, 0, sizeof(rType)); for (iRow = 0; iRow < numberRows; iRow++) { if (rowLower[iRow] > -1.0e20) { if (rowLower[iRow] == 0.0) { if (rowUpper[iRow] > 1.0e20) rType[4]++; else if (rowUpper[iRow] == 1.0) rType[10]++; else if (rowUpper[iRow] == 0.0) rType[0]++; else rType[11]++; } else if (rowLower[iRow] == 1.0) { if (rowUpper[iRow] > 1.0e20) rType[5]++; else if (rowUpper[iRow] == rowLower[iRow]) rType[1]++; else rType[11]++; } else if (rowLower[iRow] == -1.0) { if (rowUpper[iRow] > 1.0e20) rType[6]++; else if (rowUpper[iRow] == rowLower[iRow]) rType[2]++; else rType[11]++; } else { if (rowUpper[iRow] > 1.0e20) rType[6]++; else if (rowUpper[iRow] == rowLower[iRow]) rType[3]++; else rType[11]++; } } else { if (rowUpper[iRow] > 1.0e20) rType[12]++; else if (rowUpper[iRow] == 0.0) rType[7]++; else if (rowUpper[iRow] == 1.0) rType[8]++; else rType[9]++; } } // Basic statistics printf("Problem has %d rows, %d columns (%d with objective) and %d elements\n", numberRows, numberColumns, nObjective, numberElements); if (number[0] + number[1]) { printf("There are "); if (numberObjSingletons) printf("%d singletons with objective ", numberObjSingletons); int numberNoObj = number[1] - numberObjSingletons; if (numberNoObj) printf("%d singletons with no objective ", numberNoObj); if (number[0]) printf("** %d columns have no entries", number[0]); printf("\n"); } printf("Column breakdown:\n"); int k; for (k = 0; k < static_cast< int >(sizeof(cType) / sizeof(int)); k++) { printf("%d of type %s ", cType[k], cName[k].c_str()); if (((k + 1) % 3) == 0) printf("\n"); } if ((k % 3) != 0) printf("\n"); printf("\nRow breakdown:\n"); for (k = 0; k < static_cast< int >(sizeof(rType) / sizeof(int)); k++) { printf("%d of type %s ", rType[k], rName[k].c_str()); if (((k + 1) % 3) == 0) printf("\n"); } if ((k % 3) != 0) printf("\n"); if (type < 3) return; int kMax = type > 3 ? 1000000 : 10; k = 0; printf("\n"); for (iRow = 1; iRow <= numberRows; iRow++) { if (number[iRow]) { k++; printf("%d columns have %d entries\n", number[iRow], iRow); if (k == kMax) break; } } if (k == kMax) { int n = 0; for (; iRow < numberRows; iRow++) { n += number[iRow]; } if (n) printf("%d columns have more than %d entries\n", n, kMax); } memset(number, 0, numberColumns * sizeof(int)); for (iRow = 0; iRow < numberRows; iRow++) { int length = rowCount[iRow]; number[length]++; } k = 0; printf("\n"); for (iRow = 1; iRow <= numberRows; iRow++) { if (number[iRow]) { k++; printf("%d rows have %d entries\n", number[iRow], iRow); if (k == kMax) break; } } if (k == kMax) { int n = 0; for (; iRow < numberRows; iRow++) { n += number[iRow]; } if (n) printf("%d rows have more than %d entries\n", n, kMax); } delete[] number; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiSolverInterface.hpp0000644000175200017520000023112113414504051017402 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiSolverInterface_H #define OsiSolverInterface_H #include #include #include #include "CoinTypes.hpp" #include "CoinMessageHandler.hpp" #include "CoinPackedVectorBase.hpp" #include "CoinPackedMatrix.hpp" #include "CoinWarmStart.hpp" #include "CoinFinite.hpp" #include "CoinError.hpp" #include "OsiCollections.hpp" #include "OsiSolverParameters.hpp" class CoinSnapshot; class CoinLpIO; class CoinMpsIO; class OsiCuts; class OsiAuxInfo; class OsiRowCut; class OsiRowCutDebugger; class CoinSet; class CoinBuild; class CoinModel; class OsiSolverBranch; class OsiSolverResult; class OsiObject; //############################################################################# /*! \brief Abstract Base Class for describing an interface to a solver. Many OsiSolverInterface query methods return a const pointer to the requested read-only data. If the model data is changed or the solver is called, these pointers may no longer be valid and should be refreshed by invoking the member function to obtain an updated copy of the pointer. For example: \code OsiSolverInterface solverInterfacePtr ; const double * ruBnds = solverInterfacePtr->getRowUpper(); solverInterfacePtr->applyCuts(someSetOfCuts); // ruBnds is no longer a valid pointer and must be refreshed ruBnds = solverInterfacePtr->getRowUpper(); \endcode Querying a problem that has no data associated with it will result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. */ class OsiSolverInterface { friend void OsiSolverInterfaceCommonUnitTest( const OsiSolverInterface *emptySi, const std::string &mpsDir, const std::string &netlibDir); friend void OsiSolverInterfaceMpsUnitTest( const std::vector< OsiSolverInterface * > &vecSiP, const std::string &mpsDir); public: /// Internal class for obtaining status from the applyCuts method class ApplyCutsReturnCode { friend class OsiSolverInterface; friend class OsiClpSolverInterface; friend class OsiGrbSolverInterface; public: ///@name Constructors and desctructors //@{ /// Default constructor ApplyCutsReturnCode() : intInconsistent_(0) , extInconsistent_(0) , infeasible_(0) , ineffective_(0) , applied_(0) { } /// Copy constructor ApplyCutsReturnCode(const ApplyCutsReturnCode &rhs) : intInconsistent_(rhs.intInconsistent_) , extInconsistent_(rhs.extInconsistent_) , infeasible_(rhs.infeasible_) , ineffective_(rhs.ineffective_) , applied_(rhs.applied_) { } /// Assignment operator ApplyCutsReturnCode &operator=(const ApplyCutsReturnCode &rhs) { if (this != &rhs) { intInconsistent_ = rhs.intInconsistent_; extInconsistent_ = rhs.extInconsistent_; infeasible_ = rhs.infeasible_; ineffective_ = rhs.ineffective_; applied_ = rhs.applied_; } return *this; } /// Destructor ~ApplyCutsReturnCode() {} //@} /**@name Accessing return code attributes */ //@{ /// Number of logically inconsistent cuts inline int getNumInconsistent() const { return intInconsistent_; } /// Number of cuts inconsistent with the current model inline int getNumInconsistentWrtIntegerModel() const { return extInconsistent_; } /// Number of cuts that cause obvious infeasibility inline int getNumInfeasible() const { return infeasible_; } /// Number of redundant or ineffective cuts inline int getNumIneffective() const { return ineffective_; } /// Number of cuts applied inline int getNumApplied() const { return applied_; } //@} private: /**@name Private methods */ //@{ /// Increment logically inconsistent cut counter inline void incrementInternallyInconsistent() { intInconsistent_++; } /// Increment model-inconsistent counter inline void incrementExternallyInconsistent() { extInconsistent_++; } /// Increment infeasible cut counter inline void incrementInfeasible() { infeasible_++; } /// Increment ineffective cut counter inline void incrementIneffective() { ineffective_++; } /// Increment applied cut counter inline void incrementApplied() { applied_++; } //@} ///@name Private member data //@{ /// Counter for logically inconsistent cuts int intInconsistent_; /// Counter for model-inconsistent cuts int extInconsistent_; /// Counter for infeasible cuts int infeasible_; /// Counter for ineffective cuts int ineffective_; /// Counter for applied cuts int applied_; //@} }; //--------------------------------------------------------------------------- ///@name Solve methods //@{ /// Solve initial LP relaxation virtual void initialSolve() = 0; /*! \brief Resolve an LP relaxation after problem modification Note the `re-' in `resolve'. initialSolve() should be used to solve the problem for the first time. */ virtual void resolve() = 0; /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound() = 0; #ifdef CBC_NEXT_VERSION /* Would it make sense to collect all of these routines in a `MIP Helper' section? It'd make it easier for users and implementors to find them. */ /** Solve 2**N (N==depth) problems and return solutions and bases. There are N branches each of which changes bounds on both sides as given by branch. The user should provide an array of (empty) results which will be filled in. See OsiSolveResult for more details (in OsiSolveBranch.?pp) but it will include a basis and primal solution. The order of results is left to right at feasible leaf nodes so first one is down, down, ..... Returns number of feasible leaves. Also sets number of solves done and number of iterations. This is provided so a solver can do faster. If forceBranch true then branch done even if satisfied */ virtual int solveBranches(int depth, const OsiSolverBranch *branch, OsiSolverResult *result, int &numberSolves, int &numberIterations, bool forceBranch = false); #endif //@} //--------------------------------------------------------------------------- /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. When a set method returns false, the original value (if any) should be unchanged. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. \note There is a default implementation of the set/get methods, namely to store/retrieve the given value using an array in the base class. A specific solver implementation can use this feature, for example, to store parameters that should be used later on. Implementors of a solver interface should overload these functions to provide the proper interface to and accurately reflect the capabilities of a specific solver. The format for hints is slightly different in that a boolean specifies the sense of the hint and an enum specifies the strength of the hint. Hints should be initialised when a solver is instantiated. (See OsiSolverParameters.hpp for defined hint parameters and strength.) When specifying the sense of the hint, a value of true means to work with the hint, false to work against it. For example,
  • \code setHintParam(OsiDoScale,true,OsiHintTry) \endcode is a mild suggestion to the solver to scale the constraint system.
  • \code setHintParam(OsiDoScale,false,OsiForceDo) \endcode tells the solver to disable scaling, or throw an exception if it cannot comply.
As another example, a solver interface could use the value and strength of the \c OsiDoReducePrint hint to adjust the amount of information printed by the interface and/or solver. The extent to which a solver obeys hints is left to the solver. The value and strength returned by \c getHintParam will match the most recent call to \c setHintParam, and will not necessarily reflect the solver's ability to comply with the hint. If the hint strength is \c OsiForceDo, the solver is required to throw an exception if it cannot perform the specified action. \note As with the other set/get methods, there is a default implementation which maintains arrays in the base class for hint sense and strength. The default implementation does not store the \c otherInformation pointer, and always throws an exception for strength \c OsiForceDo. Implementors of a solver interface should override these functions to provide the proper interface to and accurately reflect the capabilities of a specific solver. */ //@{ //! Set an integer parameter virtual bool setIntParam(OsiIntParam key, int value) { if (key == OsiLastIntParam) return (false); intParam_[key] = value; return true; } //! Set a double parameter virtual bool setDblParam(OsiDblParam key, double value) { if (key == OsiLastDblParam) return (false); dblParam_[key] = value; return true; } //! Set a string parameter virtual bool setStrParam(OsiStrParam key, const std::string &value) { if (key == OsiLastStrParam) return (false); strParam_[key] = value; return true; } /*! \brief Set a hint parameter The \c otherInformation parameter can be used to pass in an arbitrary block of information which is interpreted by the OSI and the underlying solver. Users are cautioned that this hook is solver-specific. Implementors: The default implementation completely ignores \c otherInformation and always throws an exception for OsiForceDo. This is almost certainly not the behaviour you want; you really should override this method. */ virtual bool setHintParam(OsiHintParam key, bool yesNo = true, OsiHintStrength strength = OsiHintTry, void * /*otherInformation*/ = NULL) { if (key == OsiLastHintParam) return false; hintParam_[key] = yesNo; hintStrength_[key] = strength; if (strength == OsiForceDo) throw CoinError("OsiForceDo illegal", "setHintParam", "OsiSolverInterface"); return true; } //! Get an integer parameter virtual bool getIntParam(OsiIntParam key, int &value) const { if (key == OsiLastIntParam) return (false); value = intParam_[key]; return true; } //! Get a double parameter virtual bool getDblParam(OsiDblParam key, double &value) const { if (key == OsiLastDblParam) return (false); value = dblParam_[key]; return true; } //! Get a string parameter virtual bool getStrParam(OsiStrParam key, std::string &value) const { if (key == OsiLastStrParam) return (false); value = strParam_[key]; return true; } /*! \brief Get a hint parameter (all information) Return all available information for the hint: sense, strength, and any extra information associated with the hint. Implementors: The default implementation will always set \c otherInformation to NULL. This is almost certainly not the behaviour you want; you really should override this method. */ virtual bool getHintParam(OsiHintParam key, bool &yesNo, OsiHintStrength &strength, void *&otherInformation) const { if (key == OsiLastHintParam) return false; yesNo = hintParam_[key]; strength = hintStrength_[key]; otherInformation = NULL; return true; } /*! \brief Get a hint parameter (sense and strength only) Return only the sense and strength of the hint. */ virtual bool getHintParam(OsiHintParam key, bool &yesNo, OsiHintStrength &strength) const { if (key == OsiLastHintParam) return false; yesNo = hintParam_[key]; strength = hintStrength_[key]; return true; } /*! \brief Get a hint parameter (sense only) Return only the sense (true/false) of the hint. */ virtual bool getHintParam(OsiHintParam key, bool &yesNo) const { if (key == OsiLastHintParam) return false; yesNo = hintParam_[key]; return true; } /*! \brief Copy all parameters in this section from one solver to another Note that the current implementation also copies the appData block, message handler, and rowCutDebugger. Arguably these should have independent copy methods. */ void copyParameters(OsiSolverInterface &rhs); /** \brief Return the integrality tolerance of the underlying solver. We should be able to get an integrality tolerance, but until that time just use the primal tolerance \todo This method should be replaced; it's architecturally wrong. This should be an honest dblParam with a keyword. Underlying solvers that do not support integer variables should return false for set and get on this parameter. Underlying solvers that support integrality should add this to the parameters they support, using whatever tolerance is appropriate. -lh, 091021- */ inline double getIntegerTolerance() const { return dblParam_[OsiPrimalTolerance]; } //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there numerical difficulties? virtual bool isAbandoned() const = 0; /// Is optimality proven? virtual bool isProvenOptimal() const = 0; /// Is primal infeasibility proven? virtual bool isProvenPrimalInfeasible() const = 0; /// Is dual infeasibility proven? virtual bool isProvenDualInfeasible() const = 0; /// Is the given primal objective limit reached? virtual bool isPrimalObjectiveLimitReached() const; /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const = 0; //@} //--------------------------------------------------------------------------- /** \name Warm start methods Note that the warm start methods return a generic CoinWarmStart object. The precise characteristics of this object are solver-dependent. Clients who wish to maintain a maximum degree of solver independence should take care to avoid unnecessary assumptions about the properties of a warm start object. */ //@{ /*! \brief Get an empty warm start object This routine returns an empty warm start object. Its purpose is to provide a way for a client to acquire a warm start object of the appropriate type for the solver, which can then be resized and modified as desired. */ virtual CoinWarmStart *getEmptyWarmStart() const = 0; /** \brief Get warm start information. Return warm start information for the current state of the solver interface. If there is no valid warm start information, an empty warm start object wil be returned. */ virtual CoinWarmStart *getWarmStart() const = 0; /** \brief Get warm start information. Return warm start information for the current state of the solver interface. If there is no valid warm start information, an empty warm start object wil be returned. This does not necessarily create an object - may just point to one. must Delete set true if user should delete returned object. */ virtual CoinWarmStart *getPointerToWarmStart(bool &mustDelete); /** \brief Set warm start information. Return true or false depending on whether the warm start information was accepted or not. By definition, a call to setWarmStart with a null parameter should cause the solver interface to refresh its warm start information from the underlying solver. */ virtual bool setWarmStart(const CoinWarmStart *warmstart) = 0; //@} //--------------------------------------------------------------------------- /**@name Hot start methods Primarily used in strong branching. The user can create a hot start object --- a snapshot of the optimization process --- then reoptimize over and over again, starting from the same point. \note
  • Between hot started optimizations only bound changes are allowed.
  • The copy constructor and assignment operator should NOT copy any hot start information.
  • The default implementation simply extracts a warm start object in \c markHotStart, resets to the warm start object in \c solveFromHotStart, and deletes the warm start object in \c unmarkHotStart. Actual solver implementations are encouraged to do better.
*/ //@{ /// Create a hot start snapshot of the optimization process. virtual void markHotStart(); /// Optimize starting from the hot start snapshot. virtual void solveFromHotStart(); /// Delete the hot start snapshot. virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem query methods Querying a problem that has no data associated with it will result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /// Get the number of columns virtual int getNumCols() const = 0; /// Get the number of rows virtual int getNumRows() const = 0; /// Get the number of nonzero elements virtual CoinBigIndex getNumElements() const = 0; /// Get the number of integer variables virtual int getNumIntegers() const; /// Get a pointer to an array[getNumCols()] of column lower bounds virtual const double *getColLower() const = 0; /// Get a pointer to an array[getNumCols()] of column upper bounds virtual const double *getColUpper() const = 0; /*! \brief Get a pointer to an array[getNumRows()] of row constraint senses.
  • 'L': <= constraint
  • 'E': = constraint
  • 'G': >= constraint
  • 'R': ranged constraint
  • 'N': free constraint
*/ virtual const char *getRowSense() const = 0; /*! \brief Get a pointer to an array[getNumRows()] of row right-hand sides
  • if getRowSense()[i] == 'L' then getRightHandSide()[i] == getRowUpper()[i]
  • if getRowSense()[i] == 'G' then getRightHandSide()[i] == getRowLower()[i]
  • if getRowSense()[i] == 'R' then getRightHandSide()[i] == getRowUpper()[i]
  • if getRowSense()[i] == 'N' then getRightHandSide()[i] == 0.0
*/ virtual const double *getRightHandSide() const = 0; /*! \brief Get a pointer to an array[getNumRows()] of row ranges.
  • if getRowSense()[i] == 'R' then getRowRange()[i] == getRowUpper()[i] - getRowLower()[i]
  • if getRowSense()[i] != 'R' then getRowRange()[i] is 0.0
*/ virtual const double *getRowRange() const = 0; /// Get a pointer to an array[getNumRows()] of row lower bounds virtual const double *getRowLower() const = 0; /// Get a pointer to an array[getNumRows()] of row upper bounds virtual const double *getRowUpper() const = 0; /*! \brief Get a pointer to an array[getNumCols()] of objective function coefficients. */ virtual const double *getObjCoefficients() const = 0; /*! \brief Get the objective function sense - 1 for minimisation (default) - -1 for maximisation */ virtual double getObjSense() const = 0; /// Return true if the variable is continuous virtual bool isContinuous(int colIndex) const = 0; /// Return true if the variable is binary virtual bool isBinary(int colIndex) const; /*! \brief Return true if the variable is integer. This method returns true if the variable is binary or general integer. */ virtual bool isInteger(int colIndex) const; /// Return true if the variable is general integer virtual bool isIntegerNonBinary(int colIndex) const; /// Return true if the variable is binary and not fixed virtual bool isFreeBinary(int colIndex) const; /*! \brief Return an array[getNumCols()] of column types \deprecated See #getColType */ inline const char *columnType(bool refresh = false) const { return getColType(refresh); } /// Set column type inline void setColumnType(int iColumn, char type) { if (!columnType_) getColType(true); columnType_[iColumn] = type; } /*! \brief Return an array[getNumCols()] of column types - 0 - continuous - 1 - binary - 2 - general integer - 3 - if supported - semi-continuous - 4 - if supported - semi-continuous integer If \p refresh is true, the classification of integer variables as binary or general integer will be reevaluated. If the current bounds are [0,1], or if the variable is fixed at 0 or 1, it will be classified as binary, otherwise it will be classified as general integer. */ virtual const char *getColType(bool refresh = false) const; /// Get a pointer to a row-wise copy of the matrix virtual const CoinPackedMatrix *getMatrixByRow() const = 0; /// Get a pointer to a column-wise copy of the matrix virtual const CoinPackedMatrix *getMatrixByCol() const = 0; /*! \brief Get a pointer to a mutable row-wise copy of the matrix. Returns NULL if the request is not meaningful (i.e., the OSI will not recognise any modifications to the matrix). */ virtual CoinPackedMatrix *getMutableMatrixByRow() const { return NULL; } /*! \brief Get a pointer to a mutable column-wise copy of the matrix Returns NULL if the request is not meaningful (i.e., the OSI will not recognise any modifications to the matrix). */ virtual CoinPackedMatrix *getMutableMatrixByCol() const { return NULL; } /// Get the solver's value for infinity virtual double getInfinity() const = 0; //@} /**@name Solution query methods */ //@{ /// Get a pointer to an array[getNumCols()] of primal variable values virtual const double *getColSolution() const = 0; /** Get a pointer to an array[getNumCols()] of primal variable values guaranteed to be between the column lower and upper bounds. */ virtual const double *getStrictColSolution(); /// Get pointer to array[getNumRows()] of dual variable values virtual const double *getRowPrice() const = 0; /// Get a pointer to an array[getNumCols()] of reduced costs virtual const double *getReducedCost() const = 0; /** Get a pointer to array[getNumRows()] of row activity levels. The row activity for a row is the left-hand side evaluated at the current solution. */ virtual const double *getRowActivity() const = 0; /// Get the objective function value. virtual double getObjValue() const = 0; /** Get the number of iterations it took to solve the problem (whatever `iteration' means to the solver). */ virtual int getIterationCount() const = 0; /** Get as many dual rays as the solver can provide. In case of proven primal infeasibility there should (with high probability) be at least one. The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. \note Implementors of solver interfaces note that the double pointers in the vector should point to arrays of length getNumRows() (fullRay = false) or (getNumRows()+getNumCols()) (fullRay = true) and they should be allocated with new[]. \note Clients of solver interfaces note that it is the client's responsibility to free the double pointers in the vector using delete[]. Clients are reminded that a problem can be dual and primal infeasible. */ virtual std::vector< double * > getDualRays(int maxNumRays, bool fullRay = false) const = 0; /** Get as many primal rays as the solver can provide. In case of proven dual infeasibility there should (with high probability) be at least one. \note Implementors of solver interfaces note that the double pointers in the vector should point to arrays of length getNumCols() and they should be allocated with new[]. \note Clients of solver interfaces note that it is the client's responsibility to free the double pointers in the vector using delete[]. Clients are reminded that a problem can be dual and primal infeasible. */ virtual std::vector< double * > getPrimalRays(int maxNumRays) const = 0; /** Get vector of indices of primal variables which are integer variables but have fractional values in the current solution. */ virtual OsiVectorInt getFractionalIndices(const double etol = 1.e-05) const; //@} //------------------------------------------------------------------------- /**@name Methods to modify the objective, bounds, and solution For functions which take a set of indices as parameters (\c setObjCoeffSet(), \c setColSetBounds(), \c setRowSetBounds(), \c setRowSetTypes()), the parameters follow the C++ STL iterator convention: \c indexFirst points to the first index in the set, and \c indexLast points to a position one past the last index in the set. */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff(int elementIndex, double elementValue) = 0; /** Set a set of objective function coefficients */ virtual void setObjCoeffSet(const int *indexFirst, const int *indexLast, const double *coeffList); /** Set the objective coefficients for all columns. array [getNumCols()] is an array of values for the objective. This defaults to a series of set operations and is here for speed. */ virtual void setObjective(const double *array); /** Set the objective function sense. Use 1 for minimisation (default), -1 for maximisation. \note Implementors note that objective function sense is a parameter of the OSI, not a property of the problem. Objective sense can be set prior to problem load and should not be affected by loading a new problem. */ virtual void setObjSense(double s) = 0; /** Set a single column lower bound. Use -getInfinity() for -infinity. */ virtual void setColLower(int elementIndex, double elementValue) = 0; /** Set the lower bounds for all columns. array [getNumCols()] is an array of values for the lower bounds. This defaults to a series of set operations and is here for speed. */ virtual void setColLower(const double *array); /** Set a single column upper bound. Use getInfinity() for infinity. */ virtual void setColUpper(int elementIndex, double elementValue) = 0; /** Set the upper bounds for all columns. array [getNumCols()] is an array of values for the upper bounds. This defaults to a series of set operations and is here for speed. */ virtual void setColUpper(const double *array); /** Set a single column lower and upper bound. The default implementation just invokes setColLower() and setColUpper() */ virtual void setColBounds(int elementIndex, double lower, double upper) { setColLower(elementIndex, lower); setColUpper(elementIndex, upper); } /** Set the upper and lower bounds of a set of columns. The default implementation just invokes setColBounds() over and over again. For each column, boundList must contain both a lower and upper bound, in that order. */ virtual void setColSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set a single row lower bound. Use -getInfinity() for -infinity. */ virtual void setRowLower(int elementIndex, double elementValue) = 0; /** Set a single row upper bound. Use getInfinity() for infinity. */ virtual void setRowUpper(int elementIndex, double elementValue) = 0; /** Set a single row lower and upper bound. The default implementation just invokes setRowLower() and setRowUpper() */ virtual void setRowBounds(int elementIndex, double lower, double upper) { setRowLower(elementIndex, lower); setRowUpper(elementIndex, upper); } /** Set the bounds on a set of rows. The default implementation just invokes setRowBounds() over and over again. For each row, boundList must contain both a lower and upper bound, in that order. */ virtual void setRowSetBounds(const int *indexFirst, const int *indexLast, const double *boundList); /** Set the type of a single row */ virtual void setRowType(int index, char sense, double rightHandSide, double range) = 0; /** Set the type of a set of rows. The default implementation just invokes setRowType() over and over again. */ virtual void setRowSetTypes(const int *indexFirst, const int *indexLast, const char *senseList, const double *rhsList, const double *rangeList); /** Set the primal solution variable values colsol[getNumCols()] is an array of values for the primal variables. These values are copied to memory owned by the solver interface object or the solver. They will be returned as the result of getColSolution() until changed by another call to setColSolution() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double *colsol) = 0; /** Set dual solution variable values rowprice[getNumRows()] is an array of values for the dual variables. These values are copied to memory owned by the solver interface object or the solver. They will be returned as the result of getRowPrice() until changed by another call to setRowPrice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double *rowprice) = 0; /** Fix variables at bound based on reduced cost For variables currently at bound, fix the variable at bound if the reduced cost exceeds the gap. Return the number of variables fixed. If justInteger is set to false, the routine will also fix continuous variables, but the test still assumes a delta of 1.0. */ virtual int reducedCostFix(double gap, bool justInteger = true); //@} //------------------------------------------------------------------------- /**@name Methods to set variable type */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index) = 0; /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index) = 0; /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int *indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int *indices, int len); //@} //------------------------------------------------------------------------- //------------------------------------------------------------------------- /*! \brief Data type for name vectors. */ typedef std::vector< std::string > OsiNameVec; /*! \name Methods for row and column names Osi defines three name management disciplines: `auto names' (0), `lazy names' (1), and `full names' (2). See the description of #OsiNameDiscipline for details. Changing the name discipline (via setIntParam()) will not automatically add or remove name information, but setting the discipline to auto will make existing information inaccessible until the discipline is reset to lazy or full. By definition, a row index of getNumRows() (i.e., one larger than the largest valid row index) refers to the objective function. OSI users and implementors: While the OSI base class can define an interface and provide rudimentary support, use of names really depends on support by the OsiXXX class to ensure that names are managed correctly. If an OsiXXX class does not support names, it should return false for calls to getIntParam() or setIntParam() that reference OsiNameDiscipline. */ //@{ /*! \brief Generate a standard name of the form Rnnnnnnn or Cnnnnnnn Set \p rc to 'r' for a row name, 'c' for a column name. The `nnnnnnn' part is generated from ndx and will contain 7 digits by default, padded with zeros if necessary. As a special case, ndx = getNumRows() is interpreted as a request for the name of the objective function. OBJECTIVE is returned, truncated to digits+1 characters to match the row and column names. */ virtual std::string dfltRowColName(char rc, int ndx, unsigned digits = 7) const; /*! \brief Return the name of the objective function */ virtual std::string getObjName(unsigned maxLen = static_cast< unsigned >(std::string::npos)) const; /*! \brief Set the name of the objective function */ virtual inline void setObjName(std::string name) { objName_ = name; } /*! \brief Return the name of the row. The routine will always return some name, regardless of the name discipline or the level of support by an OsiXXX derived class. Use maxLen to limit the length. */ virtual std::string getRowName(int rowIndex, unsigned maxLen = static_cast< unsigned >(std::string::npos)) const; /*! \brief Return a pointer to a vector of row names If the name discipline (#OsiNameDiscipline) is auto, the return value will be a vector of length zero. If the name discipline is lazy, the vector will contain only names supplied by the client and will be no larger than needed to hold those names; entries not supplied will be null strings. In particular, the objective name is not included in the vector for lazy names. If the name discipline is full, the vector will have getNumRows() names, either supplied or generated, plus one additional entry for the objective name. */ virtual const OsiNameVec &getRowNames(); /*! \brief Set a row name Quietly does nothing if the name discipline (#OsiNameDiscipline) is auto. Quietly fails if the row index is invalid. */ virtual void setRowName(int ndx, std::string name); /*! \brief Set multiple row names The run of len entries starting at srcNames[srcStart] are installed as row names starting at row index tgtStart. The base class implementation makes repeated calls to setRowName. */ virtual void setRowNames(OsiNameVec &srcNames, int srcStart, int len, int tgtStart); /*! \brief Delete len row names starting at index tgtStart The specified row names are removed and the remaining row names are copied down to close the gap. */ virtual void deleteRowNames(int tgtStart, int len); /*! \brief Return the name of the column The routine will always return some name, regardless of the name discipline or the level of support by an OsiXXX derived class. Use maxLen to limit the length. */ virtual std::string getColName(int colIndex, unsigned maxLen = static_cast< unsigned >(std::string::npos)) const; /*! \brief Return a pointer to a vector of column names If the name discipline (#OsiNameDiscipline) is auto, the return value will be a vector of length zero. If the name discipline is lazy, the vector will contain only names supplied by the client and will be no larger than needed to hold those names; entries not supplied will be null strings. If the name discipline is full, the vector will have getNumCols() names, either supplied or generated. */ virtual const OsiNameVec &getColNames(); /*! \brief Set a column name Quietly does nothing if the name discipline (#OsiNameDiscipline) is auto. Quietly fails if the column index is invalid. */ virtual void setColName(int ndx, std::string name); /*! \brief Set multiple column names The run of len entries starting at srcNames[srcStart] are installed as column names starting at column index tgtStart. The base class implementation makes repeated calls to setColName. */ virtual void setColNames(OsiNameVec &srcNames, int srcStart, int len, int tgtStart); /*! \brief Delete len column names starting at index tgtStart The specified column names are removed and the remaining column names are copied down to close the gap. */ virtual void deleteColNames(int tgtStart, int len); /*! \brief Set row and column names from a CoinMpsIO object. Also sets the name of the objective function. If the name discipline is auto, you get what you asked for. This routine does not use setRowName or setColName. */ void setRowColNames(const CoinMpsIO &mps); /*! \brief Set row and column names from a CoinModel object. If the name discipline is auto, you get what you asked for. This routine does not use setRowName or setColName. */ void setRowColNames(CoinModel &mod); /*! \brief Set row and column names from a CoinLpIO object. Also sets the name of the objective function. If the name discipline is auto, you get what you asked for. This routine does not use setRowName or setColName. */ void setRowColNames(CoinLpIO &mod); //@} //------------------------------------------------------------------------- //------------------------------------------------------------------------- /**@name Methods to modify the constraint system. Note that new columns are added as continuous variables. */ //@{ /** Add a column (primal variable) to the problem. */ virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj) = 0; /*! \brief Add a named column (primal variable) to the problem. The default implementation adds the column, then changes the name. This can surely be made more efficient within an OsiXXX class. */ virtual void addCol(const CoinPackedVectorBase &vec, const double collb, const double colub, const double obj, std::string name); /** Add a column (primal variable) to the problem. */ virtual void addCol(int numberElements, const int *rows, const double *elements, const double collb, const double colub, const double obj); /*! \brief Add a named column (primal variable) to the problem. The default implementation adds the column, then changes the name. This can surely be made more efficient within an OsiXXX class. */ virtual void addCol(int numberElements, const int *rows, const double *elements, const double collb, const double colub, const double obj, std::string name); /** Add a set of columns (primal variables) to the problem. The default implementation simply makes repeated calls to addCol(). */ virtual void addCols(const int numcols, const CoinPackedVectorBase *const *cols, const double *collb, const double *colub, const double *obj); /** Add a set of columns (primal variables) to the problem. The default implementation simply makes repeated calls to addCol(). */ virtual void addCols(const int numcols, const CoinBigIndex *columnStarts, const int *rows, const double *elements, const double *collb, const double *colub, const double *obj); /// Add columns using a CoinBuild object void addCols(const CoinBuild &buildObject); /** Add columns from a model object. returns -1 if object in bad state (i.e. has row information) otherwise number of errors modelObject non const as can be regularized as part of build */ int addCols(CoinModel &modelObject); #if 0 /** */ virtual void addCols(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj); #endif /** \brief Remove a set of columns (primal variables) from the problem. The solver interface for a basis-oriented solver will maintain valid warm start information if all deleted variables are nonbasic. */ virtual void deleteCols(const int num, const int *colIndices) = 0; /*! \brief Add a row (constraint) to the problem. */ virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub) = 0; /*! \brief Add a named row (constraint) to the problem. The default implementation adds the row, then changes the name. This can surely be made more efficient within an OsiXXX class. */ virtual void addRow(const CoinPackedVectorBase &vec, const double rowlb, const double rowub, std::string name); /*! \brief Add a row (constraint) to the problem. */ virtual void addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng) = 0; /*! \brief Add a named row (constraint) to the problem. The default implementation adds the row, then changes the name. This can surely be made more efficient within an OsiXXX class. */ virtual void addRow(const CoinPackedVectorBase &vec, const char rowsen, const double rowrhs, const double rowrng, std::string name); /*! Add a row (constraint) to the problem. Converts to addRow(CoinPackedVectorBase&,const double,const double). */ virtual void addRow(int numberElements, const int *columns, const double *element, const double rowlb, const double rowub); /*! Add a set of rows (constraints) to the problem. The default implementation simply makes repeated calls to addRow(). */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const double *rowlb, const double *rowub); /** Add a set of rows (constraints) to the problem. The default implementation simply makes repeated calls to addRow(). */ virtual void addRows(const int numrows, const CoinPackedVectorBase *const *rows, const char *rowsen, const double *rowrhs, const double *rowrng); /** Add a set of rows (constraints) to the problem. The default implementation simply makes repeated calls to addRow(). */ virtual void addRows(const int numrows, const CoinBigIndex *rowStarts, const int *columns, const double *element, const double *rowlb, const double *rowub); /// Add rows using a CoinBuild object void addRows(const CoinBuild &buildObject); /*! Add rows from a CoinModel object. Returns -1 if the object is in the wrong state (i.e., has column-major information), otherwise the number of errors. The modelObject is not const as it can be regularized as part of the build. */ int addRows(CoinModel &modelObject); #if 0 /** */ virtual void addRows(const CoinPackedMatrix& matrix, const double* rowlb, const double* rowub); /** */ virtual void addRows(const CoinPackedMatrix& matrix, const char* rowsen, const double* rowrhs, const double* rowrng); #endif /** \brief Delete a set of rows (constraints) from the problem. The solver interface for a basis-oriented solver will maintain valid warm start information if all deleted rows are loose. */ virtual void deleteRows(const int num, const int *rowIndices) = 0; /** \brief Replace the constraint matrix I (JJF) am getting annoyed because I can't just replace a matrix. The default behavior of this is do nothing so only use where that would not matter, e.g. strengthening a matrix for MIP. */ virtual void replaceMatrixOptional(const CoinPackedMatrix &) {} /** \brief Replace the constraint matrix And if it does matter (not used at present) */ virtual void replaceMatrix(const CoinPackedMatrix &) { abort(); } /** \brief Save a copy of the base model If solver wants it can save a copy of "base" (continuous) model here. */ virtual void saveBaseModel() {} /** \brief Reduce the constraint system to the specified number of constraints. If solver wants it can restore a copy of "base" (continuous) model here. \note The name is somewhat misleading. Implementors should consider the opportunity to optimise behaviour in the common case where \p numberRows is exactly the number of original constraints. Do not, however, neglect the possibility that \p numberRows does not equal the number of original constraints. */ virtual void restoreBaseModel(int numberRows); //----------------------------------------------------------------------- /** Apply a collection of cuts. Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.getNumineffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.getNuminconsistent() -- number of invalid cuts
  • ReturnCode.getNuminconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.getNuminfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.getNumApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == getNumineffective() + getNuminconsistent() + getNuminconsistentWrtIntegerModel() + getNuminfeasible() + getNumApplied()
*/ virtual ApplyCutsReturnCode applyCuts(const OsiCuts &cs, double effectivenessLb = 0.0); /** Apply a collection of row cuts which are all effective. applyCuts seems to do one at a time which seems inefficient. Would be even more efficient to pass an array of pointers. */ virtual void applyRowCuts(int numberCuts, const OsiRowCut *cuts); /** Apply a collection of row cuts which are all effective. This is passed in as an array of pointers. */ virtual void applyRowCuts(int numberCuts, const OsiRowCut **cuts); /// Deletes branching information before columns deleted void deleteBranchingInfo(int numberDeleted, const int *which); //@} //--------------------------------------------------------------------------- /**@name Methods for problem input and output */ //@{ /*! \brief Load in a problem by copying the arguments. The constraints on the rows are given by lower and upper bounds. If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
Note that the default values for rowub and rowlb produce the constraint -infty <= ax <= infty. This is probably not what you want. */ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) = 0; /*! \brief Load in a problem by assuming ownership of the arguments. The constraints on the rows are given by lower and upper bounds. For default argument values see the matching loadProblem method. \warning The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, double *&rowlb, double *&rowub) = 0; /*! \brief Load in a problem by copying the arguments. The constraints on the rows are given by sense/rhs/range triplets. If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
Note that the default values for rowsen, rowrhs, and rowrng produce the constraint ax >= 0. */ virtual void loadProblem(const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) = 0; /*! \brief Load in a problem by assuming ownership of the arguments. The constraints on the rows are given by sense/rhs/range triplets. For default argument values see the matching loadProblem method. \warning The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix *&matrix, double *&collb, double *&colub, double *&obj, char *&rowsen, double *&rowrhs, double *&rowrng) = 0; /*! \brief Load in a problem by copying the arguments. The constraint matrix is is specified with standard column-major column starts / row indices / coefficients vectors. The constraints on the rows are given by lower and upper bounds. The matrix vectors must be gap-free. Note that start must have numcols+1 entries so that the length of the last column can be calculated as start[numcols]-start[numcols-1]. See the previous loadProblem method using rowlb and rowub for default argument values. */ virtual void loadProblem(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub) = 0; /*! \brief Load in a problem by copying the arguments. The constraint matrix is is specified with standard column-major column starts / row indices / coefficients vectors. The constraints on the rows are given by sense/rhs/range triplets. The matrix vectors must be gap-free. Note that start must have numcols+1 entries so that the length of the last column can be calculated as start[numcols]-start[numcols-1]. See the previous loadProblem method using sense/rhs/range for default argument values. */ virtual void loadProblem(const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const char *rowsen, const double *rowrhs, const double *rowrng) = 0; /*! \brief Load a model from a CoinModel object. Return the number of errors encountered. The modelObject parameter cannot be const as it may be changed as part of process. If keepSolution is true will try and keep warmStart. */ virtual int loadFromCoinModel(CoinModel &modelObject, bool keepSolution = false); /*! \brief Read a problem in MPS format from the given filename. The default implementation uses CoinMpsIO::readMps() to read the MPS file and returns the number of errors encountered. */ virtual int readMps(const char *filename, const char *extension = "mps"); /*! \brief Read a problem in MPS format from the given full filename. This uses CoinMpsIO::readMps() to read the MPS file and returns the number of errors encountered. It also may return an array of set information */ virtual int readMps(const char *filename, const char *extension, int &numberSets, CoinSet **&sets); /*! \brief Read a problem in GMPL format from the given filenames. The default implementation uses CoinMpsIO::readGMPL(). This capability is available only if the third-party package Glpk is installed. */ virtual int readGMPL(const char *filename, const char *dataname = NULL); /*! \brief Write the problem in MPS format to the specified file. If objSense is non-zero, a value of -1.0 causes the problem to be written with a maximization objective; +1.0 forces a minimization objective. If objSense is zero, the choice is left to the implementation. */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense = 0.0) const = 0; /*! \brief Write the problem in MPS format to the specified file with more control over the output. Row and column names may be null. formatType is
  • 0 - normal
  • 1 - extra accuracy
  • 2 - IEEE hex
Returns non-zero on I/O error */ int writeMpsNative(const char *filename, const char **rowNames, const char **columnNames, int formatType = 0, int numberAcross = 2, double objSense = 0.0, int numberSOS = 0, const CoinSet *setInfo = NULL) const; /***********************************************************************/ // Lp files /** Write the problem into an Lp file of the given filename with the specified extension. Coefficients with value less than epsilon away from an integer value are written as integers. Write at most numberAcross monomials on a line. Write non integer numbers with decimals digits after the decimal point. The written problem is always a minimization problem. If the current problem is a maximization problem, the intended objective function for the written problem is the current objective function multiplied by -1. If the current problem is a minimization problem, the intended objective function for the written problem is the current objective function. If objSense < 0, the intended objective function is multiplied by -1 before writing the problem. It is left unchanged otherwise. Write objective function name and constraint names if useRowNames is true. This version calls writeLpNative(). */ virtual void writeLp(const char *filename, const char *extension = "lp", double epsilon = 1e-5, int numberAcross = 10, int decimals = 9, double objSense = 0.0, bool useRowNames = true) const; /** Write the problem into the file pointed to by the parameter fp. Other parameters are similar to those of writeLp() with first parameter filename. */ virtual void writeLp(FILE *fp, double epsilon = 1e-5, int numberAcross = 10, int decimals = 5, double objSense = 0.0, bool useRowNames = true) const; /** Write the problem into an Lp file. Parameters are similar to those of writeLp(), but in addition row names and column names may be given. Parameter rowNames may be NULL, in which case default row names are used. If rowNames is not NULL, it must have exactly one entry per row in the problem and one additional entry (rowNames[getNumRows()] with the objective function name. These getNumRows()+1 entries must be distinct. If this is not the case, default row names are used. In addition, format restrictions are imposed on names (see CoinLpIO::is_invalid_name() for details). Similar remarks can be made for the parameter columnNames which must either be NULL or have exactly getNumCols() distinct entries. Write objective function name and constraint names if useRowNames is true. */ int writeLpNative(const char *filename, char const *const *const rowNames, char const *const *const columnNames, const double epsilon = 1.0e-5, const int numberAcross = 10, const int decimals = 5, const double objSense = 0.0, const bool useRowNames = true) const; /** Write the problem into the file pointed to by the parameter fp. Other parameters are similar to those of writeLpNative() with first parameter filename. */ int writeLpNative(FILE *fp, char const *const *const rowNames, char const *const *const columnNames, const double epsilon = 1.0e-5, const int numberAcross = 10, const int decimals = 5, const double objSense = 0.0, const bool useRowNames = true) const; /// Read file in LP format from file with name filename. /// See class CoinLpIO for description of this format. virtual int readLp(const char *filename, const double epsilon = 1e-5); /// Read file in LP format from the file pointed to by fp. /// See class CoinLpIO for description of this format. int readLp(FILE *fp, const double epsilon = 1e-5); //@} //--------------------------------------------------------------------------- /**@name Miscellaneous */ //@{ /** Check two models against each other. Return nonzero if different. Ignore names if that set. (Note initial version does not check names) May modify both models by cleaning up */ int differentModel(OsiSolverInterface &other, bool ignoreNames = true); /** Get some statistics about model - min/max always computed type 0->4 , larger gives more information 0 - Just set min and max values of coefficients */ void statistics(double &minimumNegative, double &maximumNegative, double &minimumPositive, double &maximumPositive, int type = 3) const; #ifdef COIN_SNAPSHOT /// Return a CoinSnapshot virtual CoinSnapshot *snapshot(bool createArrays = true) const; #endif #ifdef COIN_FACTORIZATION_INFO /// Return number of entries in L part of current factorization virtual CoinBigIndex getSizeL() const; /// Return number of entries in U part of current factorization virtual CoinBigIndex getSizeU() const; #endif //@} //--------------------------------------------------------------------------- /**@name Setting/Accessing application data */ //@{ /** Set application data. This is a pointer that the application can store into and retrieve from the solver interface. This field is available for the application to optionally define and use. */ void setApplicationData(void *appData); /** Create a clone of an Auxiliary Information object. The base class just stores an application data pointer but can be more general. Application data pointer is designed for one user while this can be extended to cope with more general extensions. */ void setAuxiliaryInfo(OsiAuxInfo *auxiliaryInfo); /// Get application data void *getApplicationData() const; /// Get pointer to auxiliary info object OsiAuxInfo *getAuxiliaryInfo() const; //@} //--------------------------------------------------------------------------- /**@name Message handling See the COIN library documentation for additional information about COIN message facilities. */ //@{ /** Pass in a message handler It is the client's responsibility to destroy a message handler installed by this routine; it will not be destroyed when the solver interface is destroyed. */ virtual void passInMessageHandler(CoinMessageHandler *handler); /// Set language void newLanguage(CoinMessages::Language language); inline void setLanguage(CoinMessages::Language language) { newLanguage(language); } /// Return a pointer to the current message handler inline CoinMessageHandler *messageHandler() const { return handler_; } /// Return the current set of messages inline CoinMessages messages() { return messages_; } /// Return a pointer to the current set of messages inline CoinMessages *messagesPointer() { return &messages_; } /// Return true if default handler inline bool defaultHandler() const { return defaultHandler_; } //@} //--------------------------------------------------------------------------- /**@name Methods for dealing with discontinuities other than integers. Osi should be able to know about SOS and other types. This is an optional section where such information can be stored. */ //@{ /** \brief Identify integer variables and create corresponding objects. Record integer variables and create an OsiSimpleInteger object for each one. All existing OsiSimpleInteger objects will be destroyed. If justCount then no objects created and we just store numberIntegers_ */ void findIntegers(bool justCount); /** \brief Identify integer variables and SOS and create corresponding objects. Record integer variables and create an OsiSimpleInteger object for each one. All existing OsiSimpleInteger objects will be destroyed. If the solver supports SOS then do the same for SOS. If justCount then no objects created and we just store numberIntegers_ Returns number of SOS */ virtual int findIntegersAndSOS(bool justCount); /// Get the number of objects inline int numberObjects() const { return numberObjects_; } /// Set the number of objects inline void setNumberObjects(int number) { numberObjects_ = number; } /// Get the array of objects inline OsiObject **objects() const { return object_; } /// Get the specified object const inline OsiObject *object(int which) const { return object_[which]; } /// Get the specified object inline OsiObject *modifiableObject(int which) const { return object_[which]; } /// Delete all object information void deleteObjects(); /** Add in object information. Objects are cloned; the owner can delete the originals. */ void addObjects(int numberObjects, OsiObject **objects); /** Use current solution to set bounds so current integer feasible solution will stay feasible. Only feasible bounds will be used, even if current solution outside bounds. The amount of such violation will be returned (and if small can be ignored) */ double forceFeasible(); //@} //--------------------------------------------------------------------------- /*! @name Methods related to testing generated cuts See the documentation for OsiRowCutDebugger for additional details. */ //@{ /*! \brief Activate the row cut debugger. If \p modelName is in the set of known models then all cuts are checked to see that they do NOT cut off the optimal solution known to the debugger. */ virtual void activateRowCutDebugger(const char *modelName); /*! \brief Activate the row cut debugger using a full solution array. Activate the debugger for a model not included in the debugger's internal database. Cuts will be checked to see that they do NOT cut off the given solution. \p solution must be a full solution vector, but only the integer variables need to be correct. The debugger will fill in the continuous variables by solving an lp relaxation with the integer variables fixed as specified. If the given values for the continuous variables should be preserved, set \p keepContinuous to true. */ virtual void activateRowCutDebugger(const double *solution, bool enforceOptimality = true); /*! \brief Get the row cut debugger provided the solution known to the debugger is within the feasible region held in the solver. If there is a row cut debugger object associated with model AND if the solution known to the debugger is within the solver's current feasible region (i.e., the column bounds held in the solver are compatible with the known solution) then a pointer to the debugger is returned which may be used to test validity of cuts. Otherwise NULL is returned */ const OsiRowCutDebugger *getRowCutDebugger() const; /*! \brief Get the row cut debugger object Return the row cut debugger object if it exists. One common usage of this method is to obtain a debugger object in order to execute OsiRowCutDebugger::redoSolution (so that the stored solution is again compatible with the problem held in the solver). */ OsiRowCutDebugger *getRowCutDebuggerAlways() const; //@} /*! \name OsiSimplexInterface \brief Simplex Interface Methods for an advanced interface to a simplex solver. The interface comprises two groups of methods. Group 1 contains methods for tableau access. Group 2 contains methods for dictating individual simplex pivots. */ //@{ /*! \brief Return the simplex implementation level. The return codes are: - 0: the simplex interface is not implemented. - 1: the Group 1 (tableau access) methods are implemented. - 2: the Group 2 (pivoting) methods are implemented The codes are cumulative - a solver which implements Group 2 also implements Group 1. */ virtual int canDoSimplexInterface() const; //@} /*! \name OsiSimplex Group 1 \brief Tableau access methods. This group of methods provides access to rows and columns of the basis inverse and to rows and columns of the tableau. */ //@{ /*! \brief Prepare the solver for the use of tableau access methods. Prepares the solver for the use of the tableau access methods, if any such preparation is required. The \c const attribute is required due to the places this method may be called (e.g., within CglCutGenerator::generateCuts()). */ virtual void enableFactorization() const; /*! \brief Undo the effects of #enableFactorization. */ virtual void disableFactorization() const; /*! \brief Check if an optimal basis is available. Returns true if the problem has been solved to optimality and a basis is available. This should be used to see if the tableau access operations are possible and meaningful. \note Implementors please note that this method may be called before #enableFactorization. */ virtual bool basisIsAvailable() const; /// Synonym for #basisIsAvailable inline bool optimalBasisIsAvailable() const { return basisIsAvailable(); } /*! \brief Retrieve status information for column and row variables. This method returns status as integer codes:
  • 0: free
  • 1: basic
  • 2: nonbasic at upper bound
  • 3: nonbasic at lower bound
The #getWarmStart method provides essentially the same functionality for a simplex-oriented solver, but the implementation details are very different. \note Logical variables associated with rows are all assumed to have +1 coefficients, so for a <= constraint the logical will be at lower bound if the constraint is tight. \note Implementors may choose to implement this method as a wrapper which converts a CoinWarmStartBasis to the requested representation. */ virtual void getBasisStatus(int *cstat, int *rstat) const; /*! \brief Set the status of column and row variables and update the basis factorization and solution. Status information should be coded as documented for #getBasisStatus. Returns 0 if all goes well, 1 if something goes wrong. This method differs from #setWarmStart in the format of the input and in its immediate effect. Think of it as #setWarmStart immediately followed by #resolve, but no pivots are allowed. \note Implementors may choose to implement this method as a wrapper that calls #setWarmStart and #resolve if the no pivot requirement can be satisfied. */ virtual int setBasisStatus(const int *cstat, const int *rstat); /*! \brief Calculate duals and reduced costs for the given objective coefficients. The solver's objective coefficient vector is not changed. */ virtual void getReducedGradient(double *columnReducedCosts, double *duals, const double *c) const; /*! \brief Get a row of the tableau If \p slack is not null, it will be loaded with the coefficients for the artificial (logical) variables (i.e., the row of the basis inverse). */ virtual void getBInvARow(int row, double *z, double *slack = NULL) const; /*! \brief Get a row of the basis inverse */ virtual void getBInvRow(int row, double *z) const; /*! \brief Get a column of the tableau */ virtual void getBInvACol(int col, double *vec) const; /*! \brief Get a column of the basis inverse */ virtual void getBInvCol(int col, double *vec) const; /*! \brief Get indices of basic variables If the logical (artificial) for row i is basic, the index should be coded as (#getNumCols + i). The order of indices must match the order of elements in the vectors returned by #getBInvACol and #getBInvCol. */ virtual void getBasics(int *index) const; //@} /*! \name OsiSimplex Group 2 \brief Pivoting methods This group of methods provides for control of individual pivots by a simplex solver. */ //@{ /**Enables normal operation of subsequent functions. This method is supposed to ensure that all typical things (like reduced costs, etc.) are updated when individual pivots are executed and can be queried by other methods. says whether will be doing primal or dual */ virtual void enableSimplexInterface(bool doingPrimal); ///Undo whatever setting changes the above method had to make virtual void disableSimplexInterface(); /** Perform a pivot by substituting a colIn for colOut in the basis. The status of the leaving variable is given in outStatus. Where 1 is to upper bound, -1 to lower bound Return code was undefined - now for OsiClp is 0 for okay, 1 if inaccuracy forced re-factorization (should be okay) and -1 for singular factorization */ virtual int pivot(int colIn, int colOut, int outStatus); /** Obtain a result of the primal pivot Outputs: colOut -- leaving column, outStatus -- its status, t -- step size, and, if dx!=NULL, *dx -- primal ray direction. Inputs: colIn -- entering column, sign -- direction of its change (+/-1). Both for colIn and colOut, artificial variables are index by the negative of the row index minus 1. Return code (for now): 0 -- leaving variable found, -1 -- everything else? Clearly, more informative set of return values is required Primal and dual solutions are updated */ virtual int primalPivotResult(int colIn, int sign, int &colOut, int &outStatus, double &t, CoinPackedVector *dx); /** Obtain a result of the dual pivot (similar to the previous method) Differences: entering variable and a sign of its change are now the outputs, the leaving variable and its statuts -- the inputs If dx!=NULL, then *dx contains dual ray Return code: same */ virtual int dualPivotResult(int &colIn, int &sign, int colOut, int outStatus, double &t, CoinPackedVector *dx); //@} //--------------------------------------------------------------------------- ///@name Constructors and destructors //@{ /// Default Constructor OsiSolverInterface(); /** Clone The result of calling clone(false) is defined to be equivalent to calling the default constructor OsiSolverInterface(). */ virtual OsiSolverInterface *clone(bool copyData = true) const = 0; /// Copy constructor OsiSolverInterface(const OsiSolverInterface &); /// Assignment operator OsiSolverInterface &operator=(const OsiSolverInterface &rhs); /// Destructor virtual ~OsiSolverInterface(); /** Reset the solver interface. A call to reset() returns the solver interface to the same state as it would have if it had just been constructed by calling the default constructor OsiSolverInterface(). */ virtual void reset(); //@} //--------------------------------------------------------------------------- protected: ///@name Protected methods //@{ /** Apply a row cut (append to the constraint matrix). */ virtual void applyRowCut(const OsiRowCut &rc) = 0; /** Apply a column cut (adjust the bounds of one or more variables). */ virtual void applyColCut(const OsiColCut &cc) = 0; /** A quick inlined function to convert from the lb/ub style of constraint definition to the sense/rhs/range style */ inline void convertBoundToSense(const double lower, const double upper, char &sense, double &right, double &range) const; /** A quick inlined function to convert from the sense/rhs/range style of constraint definition to the lb/ub style */ inline void convertSenseToBound(const char sense, const double right, const double range, double &lower, double &upper) const; /** A quick inlined function to force a value to be between a minimum and a maximum value */ template < class T > inline T forceIntoRange(const T value, const T lower, const T upper) const { return value < lower ? lower : (value > upper ? upper : value); } /** Set OsiSolverInterface object state for default constructor This routine establishes the initial values of data fields in the OsiSolverInterface object when the object is created using the default constructor. */ void setInitialData(); //@} ///@name Protected member data //@{ /*! \brief Pointer to row cut debugger object Mutable so that we can update the solution held in the debugger while maintaining const'ness for the Osi object. */ mutable OsiRowCutDebugger *rowCutDebugger_; // Why not just make useful stuff protected? /// Message handler CoinMessageHandler *handler_; /** Flag to say if the currrent handler is the default handler. Indicates if the solver interface object is responsible for destruction of the handler (true) or if the client is responsible (false). */ bool defaultHandler_; /// Messages CoinMessages messages_; /// Number of integers int numberIntegers_; /// Total number of objects int numberObjects_; /// Integer and ... information (integer info normally at beginning) OsiObject **object_; /** Column type 0 - continuous 1 - binary (may get fixed later) 2 - general integer (may get fixed later) 3 - if supported - semi-continuous 4 - if supported - semi-continuous integer */ mutable char *columnType_; //@} //--------------------------------------------------------------------------- private: ///@name Private member data //@{ /// Pointer to user-defined data structure - and more if user wants OsiAuxInfo *appDataEtc_; /// Array of integer parameters int intParam_[OsiLastIntParam]; /// Array of double parameters double dblParam_[OsiLastDblParam]; /// Array of string parameters std::string strParam_[OsiLastStrParam]; /// Array of hint parameters bool hintParam_[OsiLastHintParam]; /// Array of hint strengths OsiHintStrength hintStrength_[OsiLastHintParam]; /** Warm start information used for hot starts when the default hot start implementation is used. */ CoinWarmStart *ws_; /// Column solution satisfying lower and upper column bounds std::vector< double > strictColSolution_; /// Row names OsiNameVec rowNames_; /// Column names OsiNameVec colNames_; /// Objective name std::string objName_; //@} }; //############################################################################# /** A quick inlined function to convert from the lb/ub style of constraint definition to the sense/rhs/range style */ inline void OsiSolverInterface::convertBoundToSense(const double lower, const double upper, char &sense, double &right, double &range) const { double inf = getInfinity(); range = 0.0; if (lower > -inf) { if (upper < inf) { right = upper; if (upper == lower) { sense = 'E'; } else { sense = 'R'; range = upper - lower; } } else { sense = 'G'; right = lower; } } else { if (upper < inf) { sense = 'L'; right = upper; } else { sense = 'N'; right = 0.0; } } } //----------------------------------------------------------------------------- /** A quick inlined function to convert from the sense/rhs/range style of constraint definition to the lb/ub style */ inline void OsiSolverInterface::convertSenseToBound(const char sense, const double right, const double range, double &lower, double &upper) const { double inf = getInfinity(); switch (sense) { case 'E': lower = upper = right; break; case 'L': lower = -inf; upper = right; break; case 'G': lower = right; upper = inf; break; case 'R': lower = right - range; upper = right; break; case 'N': lower = -inf; upper = inf; break; } } #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiSolverParameters.hpp0000644000175200017520000001122613414504051017607 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #ifndef OsiSolverParameters_H #define OsiSolverParameters_H enum OsiIntParam { /*! \brief Iteration limit for initial solve and resolve. The maximum number of iterations (whatever that means for the given solver) the solver can execute in the OsiSolverinterface::initialSolve() and OsiSolverinterface::resolve() methods before terminating. */ OsiMaxNumIteration = 0, /*! \brief Iteration limit for hot start The maximum number of iterations (whatever that means for the given solver) the solver can execute in the OsiSolverinterface::solveFromHotStart() method before terminating. */ OsiMaxNumIterationHotStart, /*! \brief Handling of row and column names. The name discipline specifies how the solver will handle row and column names: - 0: Auto names: Names cannot be set by the client. Names of the form Rnnnnnnn or Cnnnnnnn are generated on demand when a name for a specific row or column is requested; nnnnnnn is derived from the row or column index. Requests for a vector of names return a vector with zero entries. - 1: Lazy names: Names supplied by the client are retained. Names of the form Rnnnnnnn or Cnnnnnnn are generated on demand if no name has been supplied by the client. Requests for a vector of names return a vector sized to the largest index of a name supplied by the client; some entries in the vector may be null strings. - 2: Full names: Names supplied by the client are retained. Names of the form Rnnnnnnn or Cnnnnnnn are generated on demand if no name has been supplied by the client. Requests for a vector of names return a vector sized to match the constraint system, and all entries will contain either the name specified by the client or a generated name. */ OsiNameDiscipline, /*! \brief End marker. Used by OsiSolverInterface to allocate a fixed-sized array to store integer parameters. */ OsiLastIntParam }; enum OsiDblParam { /*! \brief Dual objective limit. This is to be used as a termination criteria in algorithms where the dual objective changes monotonically (e.g., dual simplex, volume algorithm). */ OsiDualObjectiveLimit = 0, /*! \brief Primal objective limit. This is to be used as a termination criteria in algorithms where the primal objective changes monotonically (e.g., primal simplex) */ OsiPrimalObjectiveLimit, /*! \brief Dual feasibility tolerance. The maximum amount a dual constraint can be violated and still be considered feasible. */ OsiDualTolerance, /*! \brief Primal feasibility tolerance. The maximum amount a primal constraint can be violated and still be considered feasible. */ OsiPrimalTolerance, /** The value of any constant term in the objective function. */ OsiObjOffset, /*! \brief End marker. Used by OsiSolverInterface to allocate a fixed-sized array to store double parameters. */ OsiLastDblParam }; enum OsiStrParam { /*! \brief The name of the loaded problem. This is the string specified on the Name card of an mps file. */ OsiProbName = 0, /*! \brief The name of the solver. This parameter is read-only. */ OsiSolverName, /*! \brief End marker. Used by OsiSolverInterface to allocate a fixed-sized array to store string parameters. */ OsiLastStrParam }; enum OsiHintParam { /** Whether to do a presolve in initialSolve */ OsiDoPresolveInInitial = 0, /** Whether to use a dual algorithm in initialSolve. The reverse is to use a primal algorithm */ OsiDoDualInInitial, /** Whether to do a presolve in resolve */ OsiDoPresolveInResolve, /** Whether to use a dual algorithm in resolve. The reverse is to use a primal algorithm */ OsiDoDualInResolve, /** Whether to scale problem */ OsiDoScale, /** Whether to create a non-slack basis (only in initialSolve) */ OsiDoCrash, /** Whether to reduce amount of printout, e.g., for branch and cut */ OsiDoReducePrint, /** Whether we are in branch and cut - so can modify behavior */ OsiDoInBranchAndCut, /** Just a marker, so that OsiSolverInterface can allocate a static sized array to store parameters. */ OsiLastHintParam }; enum OsiHintStrength { /** Ignore hint (default) */ OsiHintIgnore = 0, /** This means it is only a hint */ OsiHintTry, /** This means do hint if at all possible */ OsiHintDo, /** And this means throw an exception if not possible */ OsiForceDo }; #endif /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/OsiNames.cpp0000644000175200017520000006165313414504051015360 0ustar coincoin// Copyright (C) 2007, Lou Hafer and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #if defined(_MSC_VER) // Turn off compiler warning about long names #pragma warning(disable : 4786) #endif #include #include #include "OsiSolverInterface.hpp" #include "CoinLpIO.hpp" #include "CoinMpsIO.hpp" #include "CoinModel.hpp" /* These routines support three name disciplines: 0: No names: No name information is retained. rowNames_ and colNames_ are always vectors of length 0. Requests for individual names will return a name of the form RowNNN or ColNNN, generated on request. 1: Lazy names: Name information supplied by the client is retained. rowNames_ and colNames_ are sized to be large enough to hold names supplied by the client, and no larger. If the client has left holes, those entries will contain a null string. Requests for individual names will return the name supplied by the client, or a generated name. Requests for a vector of names will return a reference to rowNames_ or colNames_, with no modification. This mode is intended for applications like branch-and-cut, where the client is only interested in the original constraint system and could care less about names for generated constraints and variables. The various read[Mps,GMPL,Lp] routines capture the names that are part of the input format. If the client is building from scratch, they'll need to supply the names as they install constraints and variables. 2: Full names: From the client's point of view, this looks exactly like lazy names, except that when a vector of names is requested, the vector is always sized to match the constraint system and all entries have names (either supplied or generated). Internally, full names looks just like lazy names, with the exception that if the client requests one of the name vectors, we generate the full version on the spot and keep it around for further use. This approach sidesteps some ugly implementation issues. The base routines to add a row or column, or load a problem from matrices, are pure virtual. There's just no way to guarantee we can keep the name vectors up-to-date with each modification. Nor do we want to be in the business of generating a name as soon as the row or column appears, only to have our generated name immediately overridden by the client. Arguably these magic numbers should be an enum, but that's not the current OSI style. */ namespace { /* Generate a `name' that's really an error message. A separate routine strictly for standardisation and ease of use. The 'u' code is intended to be used when a routine is expecting one of 'r' or 'c' and saw something else. */ std::string invRowColName(char rcd, int ndx) { std::ostringstream buildName; buildName << "!!invalid "; switch (rcd) { case 'r': { buildName << "Row " << ndx << "!!"; break; } case 'c': { buildName << "Col " << ndx << "!!"; break; } case 'd': { buildName << "Discipline " << ndx << "!!"; break; } case 'u': { buildName << "Row/Col " << ndx << "!!"; break; } default: { buildName << "!!Internal Confusion!!"; break; } } return (buildName.str()); } /* Adjust the allocated capacity of the name vectors, if they're sufficiently far off (more than 1000 elements). Use this routine only if you don't need the current contents of the vectors. The `assignment & swap' bit is a trick lifted from Stroustrop 16.3.8 to make sure we really give back some space. */ void reallocRowColNames(OsiSolverInterface::OsiNameVec &rowNames, int m, OsiSolverInterface::OsiNameVec &colNames, int n) { int rowCap = static_cast< int >(rowNames.capacity()); int colCap = static_cast< int >(colNames.capacity()); if (rowCap - m > 1000) { rowNames.resize(m); OsiSolverInterface::OsiNameVec tmp = rowNames; rowNames.swap(tmp); } else if (rowCap < m) { rowNames.reserve(m); } assert(rowNames.capacity() >= static_cast< unsigned >(m)); if (colCap - n > 1000) { colNames.resize(n); OsiSolverInterface::OsiNameVec tmp = colNames; colNames.swap(tmp); } else if (colCap < n) { colNames.reserve(n); } assert(colNames.capacity() >= static_cast< unsigned >(n)); return; } /* It's handy to have a 0-length name vector hanging around to use as a return value when the name discipline = auto. Then we don't have to worry about what's actually occupying rowNames_ or colNames_. */ const OsiSolverInterface::OsiNameVec zeroLengthNameVec(0); } /* Generate the default RNNNNNNN/CNNNNNNN. This is a separate routine so that it's available to generate names for new rows and columns. If digits is nonzero, it's used, otherwise the default is 7 digits after the initial R or C. If rc = 'o', return the default name for the objective function. Yes, it's true that ndx = m is (by definition) supposed to refer to the objective function. But ... we're often calling this routine to get a name *before* installing the row. Unless you want all your rows to be named OBJECTIVE, something different is needed here. */ std::string OsiSolverInterface::dfltRowColName(char rc, int ndx, unsigned digits) const { std::ostringstream buildName; if (!(rc == 'r' || rc == 'c' || rc == 'o')) { return (invRowColName('u', ndx)); } if (ndx < 0) { return (invRowColName(rc, ndx)); } if (digits <= 0) { digits = 7; } if (rc == 'o') { std::string dfltObjName = "OBJECTIVE"; buildName << dfltObjName.substr(0, digits + 1); } else { buildName << ((rc == 'r') ? "R" : "C"); buildName << std::setw(digits) << std::setfill('0'); buildName << ndx; } return buildName.str(); } /* Return the name of the objective function. */ std::string OsiSolverInterface::getObjName(unsigned maxLen) const { std::string name; if (objName_.length() == 0) { name = dfltRowColName('o', 0, maxLen); } else { name = objName_.substr(0, maxLen); } return (name); } /* Return a row name, according to the current name discipline, truncated if necessary. If the row index is out of range, the name becomes an error message. By definition, ndx = getNumRows() (i.e., one greater than the largest valid row index) is the objective function. */ std::string OsiSolverInterface::getRowName(int ndx, unsigned maxLen) const { int nameDiscipline; std::string name; /* Check for valid row index. */ int m = getNumRows(); if (ndx < 0 || ndx > m) { name = invRowColName('r', ndx); return (name); } /* The objective is kept separately, so we don't always have an entry at index m in the names vector. If no name is set, return the default. */ if (ndx == m) { return (getObjName(maxLen)); } /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Find/generate the proper name, based on discipline. */ switch (nameDiscipline) { case 0: { name = dfltRowColName('r', ndx); break; } case 1: case 2: { name = ""; if (static_cast< unsigned >(ndx) < rowNames_.size()) name = rowNames_[ndx]; if (name.length() == 0) name = dfltRowColName('r', ndx); break; } default: { name = invRowColName('d', nameDiscipline); return (name); } } /* Return the (possibly truncated) substring. The default for maxLen is npos (no truncation). */ return (name.substr(0, maxLen)); } /* Return the vector of row names. The vector we need depends on the name discipline: 0: return a vector of length 0 1: return rowNames_, no tweaking required 2: Check that rowNames_ is complete. Generate a complete vector on the spot if we need it. */ const OsiSolverInterface::OsiNameVec &OsiSolverInterface::getRowNames() { int nameDiscipline; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Return the proper vector, as described at the head of the routine. If we need to generate a full vector, resize the existing vector and scan, filling in entries as required. */ switch (nameDiscipline) { case 0: { return (zeroLengthNameVec); } case 1: { return (rowNames_); } case 2: { int m = getNumRows(); if (rowNames_.size() < static_cast< unsigned >(m + 1)) { rowNames_.resize(m + 1); } for (int i = 0; i < m; i++) { if (rowNames_[i].length() == 0) { rowNames_[i] = dfltRowColName('r', i); } } if (rowNames_[m].length() == 0) { rowNames_[m] = getObjName(); } return (rowNames_); } default: { /* quietly fail */ return (zeroLengthNameVec); } } /* We should never reach here. */ assert(false); return (zeroLengthNameVec); } /* Return a column name, according to the current name discipline, truncated if necessary. If the column index is out of range, the name becomes an error message. */ std::string OsiSolverInterface::getColName(int ndx, unsigned maxLen) const { int nameDiscipline; std::string name; /* Check for valid column index. */ if (ndx < 0 || ndx >= getNumCols()) { name = invRowColName('c', ndx); return (name); } /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Find/generate the proper name, based on discipline. */ switch (nameDiscipline) { case 0: { name = dfltRowColName('c', ndx); break; } case 1: case 2: { name = ""; if (static_cast< unsigned >(ndx) < colNames_.size()) name = colNames_[ndx]; if (name.length() == 0) name = dfltRowColName('c', ndx); break; } default: { name = invRowColName('d', nameDiscipline); return (name); } } /* Return the (possibly truncated) substring. The default for maxLen is npos (no truncation). */ return (name.substr(0, maxLen)); } /* Return the vector of column names. The vector we need depends on the name discipline: 0: return a vector of length 0 1: return colNames_, no tweaking required 2: Check that colNames_ is complete. Generate a complete vector on the spot if we need it. */ const OsiSolverInterface::OsiNameVec &OsiSolverInterface::getColNames() { int nameDiscipline; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Return the proper vector, as described at the head of the routine. If we need to generate a full vector, resize the existing vector and scan, filling in entries as required. */ switch (nameDiscipline) { case 0: { return (zeroLengthNameVec); } case 1: { return (colNames_); } case 2: { int n = getNumCols(); if (colNames_.size() < static_cast< unsigned >(n)) { colNames_.resize(n); } for (int j = 0; j < n; j++) { if (colNames_[j].length() == 0) { colNames_[j] = dfltRowColName('c', j); } } return (colNames_); } default: { /* quietly fail */ return (zeroLengthNameVec); } } /* We should never reach here. */ assert(false); return (zeroLengthNameVec); } /* Set a single row name. Quietly does nothing if the index or name discipline is invalid. */ void OsiSolverInterface::setRowName(int ndx, std::string name) { int nameDiscipline; /* Quietly do nothing if the index is out of bounds. This should be changed, but what's our error convention, eh? There's no precedent in OsiSolverInterface.cpp. */ if (ndx < 0 || ndx >= getNumRows()) { return; } /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Do the right thing, according to the discipline. */ switch (nameDiscipline) { case 0: { break; } case 1: case 2: { if (static_cast< unsigned >(ndx) > rowNames_.capacity()) { rowNames_.resize(ndx + 1); } else if (static_cast< unsigned >(ndx) >= rowNames_.size()) { rowNames_.resize(ndx + 1); } rowNames_[ndx] = name; break; } default: { break; } } return; } /* Set a run of row names. Quietly fail if the specified indices are invalid. On the target side, [tgtStart, tgtStart+len-1] must be in the range [0,m-1], where m is the number of rows. On the source side, srcStart must be zero or greater. If we run off the end of srcNames, we just generate default names. */ void OsiSolverInterface::setRowNames(OsiNameVec &srcNames, int srcStart, int len, int tgtStart) { int nameDiscipline; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* If the name discipline is auto, we're already done. */ if (nameDiscipline == 0) { return; } /* A little self-protection. Check that we're within [0,m-1] on the target side, and that srcStart is zero or greater. Quietly fail if the indices don't fit. */ int m = getNumRows(); if (tgtStart < 0 || tgtStart + len > m) { return; } if (srcStart < 0) { return; } int srcLen = static_cast< int >(srcNames.size()); /* Load 'em up. */ int srcNdx = srcStart; int tgtNdx = tgtStart; for (; tgtNdx < tgtStart + len; srcNdx++, tgtNdx++) { if (srcNdx < srcLen) { setRowName(tgtNdx, srcNames[srcNdx]); } else { setRowName(tgtNdx, dfltRowColName('r', tgtNdx)); } } return; } /* Delete one or more row names. */ void OsiSolverInterface::deleteRowNames(int tgtStart, int len) { int nameDiscipline; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* If the name discipline is auto, we're done. */ if (nameDiscipline == 0) { return; } /* Trim the range to names that exist in the name vector. If we're doing lazy names, it's quite likely that we don't need to do any work. */ int lastNdx = static_cast< int >(rowNames_.size()); if (tgtStart < 0 || tgtStart >= lastNdx) { return; } if (tgtStart + len > lastNdx) { len = lastNdx - tgtStart; } /* Erase the names. */ OsiNameVec::iterator firstIter, lastIter; firstIter = rowNames_.begin() + tgtStart; lastIter = firstIter + len; rowNames_.erase(firstIter, lastIter); return; } /* Set a single column name. Quietly does nothing if the index or name discipline is invalid. */ void OsiSolverInterface::setColName(int ndx, std::string name) { int nameDiscipline; /* Quietly do nothing if the index is out of bounds. This should be changed, but what's our error convention, eh? There's no precedent in OsiSolverInterface.cpp. */ if (ndx < 0 || ndx >= getNumCols()) { return; } /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Do the right thing, according to the discipline. */ switch (nameDiscipline) { case 0: { break; } case 1: case 2: { if (static_cast< unsigned >(ndx) > colNames_.capacity()) { colNames_.resize(ndx + 1); } else if (static_cast< unsigned >(ndx) >= colNames_.size()) { colNames_.resize(ndx + 1); } colNames_[ndx] = name; break; } default: { break; } } return; } /* Set a run of column names. Quietly fail if the specified indices are invalid. On the target side, [tgtStart, tgtStart+len-1] must be in the range [0,n-1], where n is the number of columns. On the source side, srcStart must be zero or greater. If we run off the end of srcNames, we just generate default names. */ void OsiSolverInterface::setColNames(OsiNameVec &srcNames, int srcStart, int len, int tgtStart) { int nameDiscipline; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* If the name discipline is auto, we're already done. */ if (nameDiscipline == 0) { return; } /* A little self-protection. Check that we're within [0,m-1] on the target side, and that srcStart is zero or greater. Quietly fail if the indices don't fit. */ int n = getNumCols(); if (tgtStart < 0 || tgtStart + len > n) { return; } if (srcStart < 0) { return; } int srcLen = static_cast< int >(srcNames.size()); /* Load 'em up. */ int srcNdx = srcStart; int tgtNdx = tgtStart; for (; tgtNdx < tgtStart + len; srcNdx++, tgtNdx++) { if (srcNdx < srcLen) { setColName(tgtNdx, srcNames[srcNdx]); } else { setColName(tgtNdx, dfltRowColName('c', tgtNdx)); } } return; } /* Delete one or more column names. Quietly fail if firstNdx is less than zero or if firstNdx+len is greater than the number of columns. */ void OsiSolverInterface::deleteColNames(int tgtStart, int len) { int nameDiscipline; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* If the name discipline is auto, we're done. */ if (nameDiscipline == 0) { return; } /* Trim the range to names that exist in the name vector. If we're doing lazy names, it's quite likely that we don't need to do any work. */ int lastNdx = static_cast< int >(colNames_.size()); if (tgtStart < 0 || tgtStart >= lastNdx) { return; } if (tgtStart + len > lastNdx) { len = lastNdx - tgtStart; } /* Erase the names. */ OsiNameVec::iterator firstIter, lastIter; firstIter = colNames_.begin() + tgtStart; lastIter = firstIter + len; colNames_.erase(firstIter, lastIter); return; } /* Install the name information from a CoinMpsIO object. */ void OsiSolverInterface::setRowColNames(const CoinMpsIO &mps) { int nameDiscipline, m, n; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Whatever happens, we're about to clean out the current name vectors. Decide on an appropriate size and call reallocRowColNames to adjust capacity. */ if (nameDiscipline == 0) { m = 0; n = 0; } else { m = mps.getNumRows(); n = mps.getNumCols(); } reallocRowColNames(rowNames_, m, colNames_, n); /* If name discipline is auto, we're done already. Otherwise, load 'em up. If I understand MPS correctly, names are required. */ if (nameDiscipline != 0) { rowNames_.resize(m); for (int i = 0; i < m; i++) { rowNames_[i] = mps.rowName(i); } objName_ = mps.getObjectiveName(); colNames_.resize(n); for (int j = 0; j < n; j++) { colNames_[j] = mps.columnName(j); } } return; } /* Install the name information from a CoinModel object. CoinModel does not maintain a name for the objective function (in fact, it has no concept of objective function). */ void OsiSolverInterface::setRowColNames(CoinModel &mod) { int nameDiscipline, m, n; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Whatever happens, we're about to clean out the current name vectors. Decide on an appropriate size and call reallocRowColNames to adjust capacity. */ if (nameDiscipline == 0) { m = 0; n = 0; } else { m = mod.rowNames()->numberItems(); n = mod.columnNames()->numberItems(); } reallocRowColNames(rowNames_, m, colNames_, n); /* If name discipline is auto, we're done already. Otherwise, load 'em up. As best I can see, there's no guarantee that we'll have names for all rows and columns, so we need to pay attention. */ if (nameDiscipline != 0) { int maxRowNdx = -1, maxColNdx = -1; const char *const *names = mod.rowNames()->names(); rowNames_.resize(m); for (int i = 0; i < m; i++) { std::string nme = names[i]; if (nme.length() == 0) { if (nameDiscipline == 2) { nme = dfltRowColName('r', i); } } if (nme.length() > 0) { maxRowNdx = i; } rowNames_[i] = nme; } rowNames_.resize(maxRowNdx + 1); names = mod.columnNames()->names(); colNames_.resize(n); for (int j = 0; j < n; j++) { std::string nme = names[j]; if (nme.length() == 0) { if (nameDiscipline == 2) { nme = dfltRowColName('c', j); } } if (nme.length() > 0) { maxColNdx = j; } colNames_[j] = nme; } colNames_.resize(maxColNdx + 1); } /* And we're done. */ return; } /* Install the name information from a CoinLpIO object. Nearly identical to the previous routine, but we start from a different object. */ void OsiSolverInterface::setRowColNames(CoinLpIO &mod) { int nameDiscipline, m, n; /* Determine how we're handling names. It's possible that the underlying solver has overridden getIntParam, but doesn't recognise OsiNameDiscipline. In that case, we want to default to auto names */ bool recognisesOsiNames = getIntParam(OsiNameDiscipline, nameDiscipline); if (recognisesOsiNames == false) { nameDiscipline = 0; } /* Whatever happens, we're about to clean out the current name vectors. Decide on an appropriate size and call reallocRowColNames to adjust capacity. */ if (nameDiscipline == 0) { m = 0; n = 0; } else { m = mod.getNumRows(); n = mod.getNumCols(); } reallocRowColNames(rowNames_, m, colNames_, n); /* If name discipline is auto, we're done already. Otherwise, load 'em up. I have no idea whether we can guarantee valid names for all rows and columns, so we need to pay attention. */ if (nameDiscipline != 0) { int maxRowNdx = -1, maxColNdx = -1; const char *const *names = mod.getRowNames(); rowNames_.resize(m); for (int i = 0; i < m; i++) { std::string nme = names[i]; if (nme.length() == 0) { if (nameDiscipline == 2) { nme = dfltRowColName('r', i); } } if (nme.length() > 0) { maxRowNdx = i; } rowNames_[i] = nme; } rowNames_.resize(maxRowNdx + 1); objName_ = mod.getObjName(); names = mod.getColNames(); colNames_.resize(n); for (int j = 0; j < n; j++) { std::string nme = names[j]; if (nme.length() == 0) { if (nameDiscipline == 2) { nme = dfltRowColName('c', j); } } if (nme.length() > 0) { maxColNdx = j; } colNames_[j] = nme; } colNames_.resize(maxColNdx + 1); } /* And we're done. */ return; } /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2 */ DyLP-1.10.4/Osi/src/Osi/config.h.in0000644000175200017520000000613611573725230015164 0ustar coincoin/* src/Osi/config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if the CoinUtils package is available */ #undef COIN_HAS_COINUTILS /* Define to 1 if the Cplex package is available */ #undef COIN_HAS_CPX /* Define to 1 if the Glpk package is available */ #undef COIN_HAS_GLPK /* Define to 1 if the Gurobi package is available */ #undef COIN_HAS_GRB /* Define to 1 if the Mosek package is available */ #undef COIN_HAS_MSK /* Define to 1 if the Netlib package is available */ #undef COIN_HAS_NETLIB /* Define to 1 if the Sample package is available */ #undef COIN_HAS_SAMPLE /* Define to 1 if the SoPlex package is available */ #undef COIN_HAS_SOPLEX /* Define to 1 if the Xpress package is available */ #undef COIN_HAS_XPR /* Define to the debug sanity check level (0 is no test) */ #undef COIN_OSI_CHECKLEVEL /* Define to the debug verbosity level (0 is no output) */ #undef COIN_OSI_VERBOSITY /* Define to 1 if GLPK has the advanced B&B solver lpx_intopt */ #undef GLPK_HAS_INTOPT /* Define to 1 if you have the header file. */ #undef HAVE_CFLOAT /* Define to 1 if you have the header file. */ #undef HAVE_CIEEEFP /* Define to 1 if you have the header file. */ #undef HAVE_CMATH /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_FLOAT_H /* Define to 1 if you have the header file. */ #undef HAVE_IEEEFP_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MATH_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_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_STDLIB_H /* 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 header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* SVN revision number of project */ #undef OSI_SVN_REV /* Version number of project */ #undef OSI_VERSION /* Major Version number of project */ #undef OSI_VERSION_MAJOR /* Minor Version number of project */ #undef OSI_VERSION_MINOR /* Release Version number of project */ #undef OSI_VERSION_RELEASE /* 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 version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION DyLP-1.10.4/Osi/config.guess0000755000175200017520000012706311405216166014140 0ustar coincoin#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-05-17' # 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 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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 Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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 # 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 tupples: *-*-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 __ELF__ >/dev/null 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 ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-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'` exit ;; 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-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-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-unknown-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 ;; 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:SunOS:5.*:* | ix86xen:SunOS:5.*:*) echo i386-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-unknown-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:*:[45]) 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 __LP64__ >/dev/null 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}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-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-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-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-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu 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 ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${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-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa:Linux:*:*) echo xtensa-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; 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}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-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}-unknown-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 i386. echo i386-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-unknown-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; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-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-unknown-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 ;; 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 case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac 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 ;; 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}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-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-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-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 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 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: DyLP-1.10.4/Osi/MSVisualStudio/0000755000175200017520000000000013434203624014501 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v9/0000755000175200017520000000000013434203624015037 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v9/OsiExamplesBuild/0000755000175200017520000000000013434203624020250 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v9/OsiExamplesBuild/OsiExamplesBuild.vcproj0000644000175200017520000001044411122615267024713 0ustar coincoin DyLP-1.10.4/Osi/MSVisualStudio/v9/OsiUnitTest/0000755000175200017520000000000013434203624017271 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v9/OsiUnitTest/OsiUnitTest.vcproj0000644000175200017520000001732111475606620022762 0ustar coincoin DyLP-1.10.4/Osi/MSVisualStudio/v9/libOsiCommonTest/0000755000175200017520000000000013434203624020271 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v9/libOsiCommonTest/libOsiCommonTest.vcproj0000644000175200017520000001635211475326621024765 0ustar coincoin DyLP-1.10.4/Osi/MSVisualStudio/v9/OsiExamplesBasic/0000755000175200017520000000000013434203624020232 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v9/OsiExamplesBasic/OsiExamplesBasic.vcproj0000644000175200017520000001045311122615267024657 0ustar coincoin DyLP-1.10.4/Osi/MSVisualStudio/v9/OsiExamplesParameters/0000755000175200017520000000000013434203624021314 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v9/OsiExamplesParameters/OsiExamplesParameters.vcproj0000644000175200017520000001047511122615267027027 0ustar coincoin DyLP-1.10.4/Osi/MSVisualStudio/v9/OsiExamplesQuery/0000755000175200017520000000000013434203624020316 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v9/OsiExamplesQuery/OsiExamplesQuery.vcproj0000644000175200017520000001047111122615267025027 0ustar coincoin DyLP-1.10.4/Osi/MSVisualStudio/v9/OsiExamplesSpecific/0000755000175200017520000000000013434203624020736 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v9/OsiExamplesSpecific/OsiExamplesSpecific.vcproj0000644000175200017520000001046311122615267026070 0ustar coincoin DyLP-1.10.4/Osi/MSVisualStudio/v9/libOsi/0000755000175200017520000000000013434203624016260 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v9/libOsi/libOsi.vcproj0000644000175200017520000002331511562355715020743 0ustar coincoin DyLP-1.10.4/Osi/MSVisualStudio/v9/Osi.sln0000644000175200017520000002106312130536345016312 0ustar coincoinMicrosoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsi", "libOsi\libOsi.vcproj", "{7D98E2CB-876E-4F75-9F71-77D3FE87E149}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "..\..\..\CoinUtils\MSVisualStudio\v9\libCoinUtils\libCoinUtils.vcproj", "{C4867F15-438D-4FF8-8388-62FBAAA9786C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesBasic", "OsiExamplesBasic\OsiExamplesBasic.vcproj", "{B874A948-B5F4-4501-9735-BD9586C5216D}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesBuild", "OsiExamplesBuild\OsiExamplesBuild.vcproj", "{1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesParameters", "OsiExamplesParameters\OsiExamplesParameters.vcproj", "{C0F44D7F-B535-44DC-9125-515E813A1753}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesQuery", "OsiExamplesQuery\OsiExamplesQuery.vcproj", "{E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesSpecific", "OsiExamplesSpecific\OsiExamplesSpecific.vcproj", "{B5A702D5-C5F7-40EE-99E0-A500AE91528A}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiCommonTest", "libOsiCommonTest\libOsiCommonTest.vcproj", "{109D6E6F-6D91-460F-86AE-DF27400E09A9}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiUnitTest", "OsiUnitTest\OsiUnitTest.vcproj", "{0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}" ProjectSection(ProjectDependencies) = postProject {C4867F15-438D-4FF8-8388-62FBAAA9786C} = {C4867F15-438D-4FF8-8388-62FBAAA9786C} {109D6E6F-6D91-460F-86AE-DF27400E09A9} = {109D6E6F-6D91-460F-86AE-DF27400E09A9} {7D98E2CB-876E-4F75-9F71-77D3FE87E149} = {7D98E2CB-876E-4F75-9F71-77D3FE87E149} EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.ActiveCfg = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.Build.0 = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.ActiveCfg = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.Build.0 = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.ActiveCfg = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.Build.0 = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.ActiveCfg = Release|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.Build.0 = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.ActiveCfg = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.Build.0 = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.ActiveCfg = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.Build.0 = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.ActiveCfg = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.Build.0 = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.ActiveCfg = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.Build.0 = Release|x64 {B349E853-2E2B-468E-8853-184ACD948678}.Debug|Win32.ActiveCfg = Debug|Win32 {B349E853-2E2B-468E-8853-184ACD948678}.Debug|x64.ActiveCfg = Debug|Win32 {B349E853-2E2B-468E-8853-184ACD948678}.Release|Win32.ActiveCfg = Release|Win32 {B349E853-2E2B-468E-8853-184ACD948678}.Release|Win32.Build.0 = Release|Win32 {B349E853-2E2B-468E-8853-184ACD948678}.Release|x64.ActiveCfg = Release|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Debug|Win32.ActiveCfg = Debug|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Debug|x64.ActiveCfg = Debug|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Release|Win32.ActiveCfg = Release|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Release|Win32.Build.0 = Release|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Release|x64.ActiveCfg = Release|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Debug|Win32.ActiveCfg = Debug|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Debug|x64.ActiveCfg = Debug|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Release|Win32.ActiveCfg = Release|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Release|Win32.Build.0 = Release|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Release|x64.ActiveCfg = Release|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Debug|Win32.ActiveCfg = Debug|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Debug|x64.ActiveCfg = Debug|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Release|Win32.ActiveCfg = Release|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Release|Win32.Build.0 = Release|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Release|x64.ActiveCfg = Release|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Debug|Win32.ActiveCfg = Debug|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Debug|x64.ActiveCfg = Debug|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Release|Win32.ActiveCfg = Release|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Release|Win32.Build.0 = Release|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Release|x64.ActiveCfg = Release|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Debug|Win32.ActiveCfg = Debug|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Debug|x64.ActiveCfg = Debug|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Release|Win32.ActiveCfg = Release|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Release|Win32.Build.0 = Release|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Release|x64.ActiveCfg = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.ActiveCfg = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.Build.0 = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.ActiveCfg = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.Build.0 = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.ActiveCfg = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.Build.0 = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.ActiveCfg = Release|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.Build.0 = Release|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|Win32.ActiveCfg = Debug|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|Win32.Build.0 = Debug|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|x64.ActiveCfg = Debug|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|x64.Build.0 = Debug|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|Win32.ActiveCfg = Release|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|Win32.Build.0 = Release|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|x64.ActiveCfg = Release|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal DyLP-1.10.4/Osi/MSVisualStudio/v10/0000755000175200017520000000000013434203624015107 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v10/Osi.sln0000644000175200017520000001435512130536345016370 0ustar coincoinMicrosoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsi", "libOsi\libOsi.vcxproj", "{7D98E2CB-876E-4F75-9F71-77D3FE87E149}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libCoinUtils", "..\..\..\CoinUtils\MSVisualStudio\v10\libCoinUtils\libCoinUtils.vcxproj", "{C4867F15-438D-4FF8-8388-62FBAAA9786C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesBasic", "OsiExamplesBasic\OsiExamplesBasic.vcxproj", "{B874A948-B5F4-4501-9735-BD9586C5216D}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesBuild", "OsiExamplesBuild\OsiExamplesBuild.vcxproj", "{1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesParameters", "OsiExamplesParameters\OsiExamplesParameters.vcxproj", "{C0F44D7F-B535-44DC-9125-515E813A1753}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesQuery", "OsiExamplesQuery\OsiExamplesQuery.vcxproj", "{E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiExamplesSpecific", "OsiExamplesSpecific\OsiExamplesSpecific.vcxproj", "{B5A702D5-C5F7-40EE-99E0-A500AE91528A}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libOsiCommonTest", "libOsiCommonTest\libOsiCommonTest.vcxproj", "{109D6E6F-6D91-460F-86AE-DF27400E09A9}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OsiUnitTest", "OsiUnitTest\OsiUnitTest.vcxproj", "{0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.ActiveCfg = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|Win32.Build.0 = Debug|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.ActiveCfg = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Debug|x64.Build.0 = Debug|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.ActiveCfg = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|Win32.Build.0 = Release|Win32 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.ActiveCfg = Release|x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149}.Release|x64.Build.0 = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.ActiveCfg = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|Win32.Build.0 = Debug|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.ActiveCfg = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Debug|x64.Build.0 = Debug|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.ActiveCfg = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|Win32.Build.0 = Release|Win32 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.ActiveCfg = Release|x64 {C4867F15-438D-4FF8-8388-62FBAAA9786C}.Release|x64.Build.0 = Release|x64 {B349E853-2E2B-468E-8853-184ACD948678}.Debug|Win32.ActiveCfg = Debug|Win32 {B349E853-2E2B-468E-8853-184ACD948678}.Debug|x64.ActiveCfg = Debug|Win32 {B349E853-2E2B-468E-8853-184ACD948678}.Release|Win32.ActiveCfg = Release|Win32 {B349E853-2E2B-468E-8853-184ACD948678}.Release|x64.ActiveCfg = Release|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Debug|Win32.ActiveCfg = Debug|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Debug|x64.ActiveCfg = Debug|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Release|Win32.ActiveCfg = Release|Win32 {B874A948-B5F4-4501-9735-BD9586C5216D}.Release|x64.ActiveCfg = Release|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Debug|Win32.ActiveCfg = Debug|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Debug|x64.ActiveCfg = Debug|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Release|Win32.ActiveCfg = Release|Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4}.Release|x64.ActiveCfg = Release|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Debug|Win32.ActiveCfg = Debug|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Debug|x64.ActiveCfg = Debug|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Release|Win32.ActiveCfg = Release|Win32 {C0F44D7F-B535-44DC-9125-515E813A1753}.Release|x64.ActiveCfg = Release|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Debug|Win32.ActiveCfg = Debug|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Debug|x64.ActiveCfg = Debug|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Release|Win32.ActiveCfg = Release|Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C}.Release|x64.ActiveCfg = Release|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Debug|Win32.ActiveCfg = Debug|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Debug|x64.ActiveCfg = Debug|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Release|Win32.ActiveCfg = Release|Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A}.Release|x64.ActiveCfg = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.ActiveCfg = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|Win32.Build.0 = Debug|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.ActiveCfg = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Debug|x64.Build.0 = Debug|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.ActiveCfg = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|Win32.Build.0 = Release|Win32 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.ActiveCfg = Release|x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9}.Release|x64.Build.0 = Release|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|Win32.ActiveCfg = Debug|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|Win32.Build.0 = Debug|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|x64.ActiveCfg = Debug|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Debug|x64.Build.0 = Debug|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|Win32.ActiveCfg = Release|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|Win32.Build.0 = Release|Win32 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|x64.ActiveCfg = Release|x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal DyLP-1.10.4/Osi/MSVisualStudio/v10/OsiExamplesBuild/0000755000175200017520000000000013434203624020320 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v10/OsiExamplesBuild/OsiExamplesBuild.vcxproj0000644000175200017520000001471312101652430025145 0ustar coincoin Debug Win32 Release Win32 {1864FDC9-F116-4EB0-9B3F-6FD11E0307B4} Win32Proj Application MultiByte Application MultiByte <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset Disabled ..\..\..\..\Osi\src\OsiClp;..\..\..\..\Osi\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug Level3 EditAndContinue $(OutDir)OsiExamplesBuild.exe true $(OutDir)OsiExamplesBuild.pdb Console false MachineX86 ..\..\..\..\Osi\src\OsiClp;..\..\..\..\Osi\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase $(OutDir)OsiExamplesBuild.exe true Console true true false MachineX86 {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false DyLP-1.10.4/Osi/MSVisualStudio/v10/OsiUnitTest/0000755000175200017520000000000013434203624017341 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v10/OsiUnitTest/OsiUnitTest.vcxproj0000644000175200017520000003027112101652430023204 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C} OsiUnitTest Application Unicode false false Application Unicode false Application Unicode false false Application Unicode false <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true true MachineX86 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false X64 Disabled ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true true MachineX64 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true MachineX86 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true MachineX64 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {109d6e6f-6d91-460f-86ae-df27400e09a9} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false DyLP-1.10.4/Osi/MSVisualStudio/v10/libOsiCommonTest/0000755000175200017520000000000013434203624020341 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v10/libOsiCommonTest/libOsiCommonTest.vcxproj0000644000175200017520000002364412130312011025200 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9} libOsiCommonTest StaticLibrary false StaticLibrary StaticLibrary false StaticLibrary <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false DyLP-1.10.4/Osi/MSVisualStudio/v10/OsiExamplesBasic/0000755000175200017520000000000013434203624020302 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v10/OsiExamplesBasic/OsiExamplesBasic.vcxproj0000644000175200017520000001474312101652430025114 0ustar coincoin Debug Win32 Release Win32 {B874A948-B5F4-4501-9735-BD9586C5216D} OsiExamplesBasic Win32Proj Application MultiByte Application MultiByte <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset Disabled ..\..\..\src\OsiClp;..\..\..\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug Level3 EditAndContinue $(OutDir)OsiExamplesBasic.exe true $(OutDir)OsiExamplesBasic.pdb Console false MachineX86 ..\..\..\src\OsiClp;..\..\..\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase $(OutDir)OsiExamplesBasic.exe true Console true true false MachineX86 {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false DyLP-1.10.4/Osi/MSVisualStudio/v10/OsiExamplesParameters/0000755000175200017520000000000013434203624021364 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v10/OsiExamplesParameters/OsiExamplesParameters.vcxproj0000644000175200017520000001473712101652430027263 0ustar coincoin Debug Win32 Release Win32 {C0F44D7F-B535-44DC-9125-515E813A1753} Win32Proj Application MultiByte Application MultiByte <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset Disabled ..\..\..\..\Osi\src\OsiClp;..\..\..\..\Osi\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug Level3 EditAndContinue $(OutDir)OsiExamplesParameters.exe true $(OutDir)OsiExamplesParameters.pdb Console false MachineX86 ..\..\..\..\Osi\src\OsiClp;..\..\..\..\Osi\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase $(OutDir)OsiExamplesParameters.exe true Console true true false MachineX86 {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false DyLP-1.10.4/Osi/MSVisualStudio/v10/OsiExamplesQuery/0000755000175200017520000000000013434203624020366 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v10/OsiExamplesQuery/OsiExamplesQuery.vcxproj0000644000175200017520000001476112101652430025264 0ustar coincoin Debug Win32 Release Win32 {E54AF10F-FCBB-4A09-AAB7-2C83CF91BD2C} OsiExamplesQuery Win32Proj Application MultiByte Application MultiByte <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset Disabled ..\..\..\src\OsiClp;..\..\..\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug Level3 EditAndContinue $(OutDir)OsiExamplesQuery.exe true $(OutDir)OsiExamplesQuery.pdb Console false MachineX86 ..\..\..\..\Osi\src\OsiClp;..\..\..\..\Osi\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase $(OutDir)OsiExamplesQuery.exe true Console true true false MachineX86 {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false DyLP-1.10.4/Osi/MSVisualStudio/v10/OsiExamplesSpecific/0000755000175200017520000000000013434203624021006 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v10/OsiExamplesSpecific/OsiExamplesSpecific.vcxproj0000644000175200017520000001472712101652430026326 0ustar coincoin Debug Win32 Release Win32 {B5A702D5-C5F7-40EE-99E0-A500AE91528A} Win32Proj Application MultiByte Application MultiByte <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset Disabled ..\..\..\..\Osi\src\OsiClp;..\..\..\..\Osi\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug Level3 EditAndContinue $(OutDir)OsiExamplesSpecific.exe true $(OutDir)OsiExamplesSpecific.pdb Console false MachineX86 ..\..\..\..\Osi\src\OsiClp;..\..\..\..\Osi\src;..\..\..\..\Clp\src;..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) MultiThreaded Level3 ProgramDatabase $(OutDir)OsiExamplesSpecific.exe true Console true true false MachineX86 {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false DyLP-1.10.4/Osi/MSVisualStudio/v10/libOsi/0000755000175200017520000000000013434203624016330 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v10/libOsi/libOsi.vcxproj0000644000175200017520000002571212130312011021154 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149} StaticLibrary StaticLibrary StaticLibrary StaticLibrary <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks _DEBUG;%(PreprocessorDefinitions) 0x0409 true X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks Level3 true ProgramDatabase _DEBUG;%(PreprocessorDefinitions) 0x0409 true ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true true NDEBUG;%(PreprocessorDefinitions) 0x0409 true X64 Default ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true NDEBUG;%(PreprocessorDefinitions) 0x0409 true DyLP-1.10.4/Osi/MSVisualStudio/v14/0000755000175200017520000000000013434203624015113 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v14/OsiUnitTest/0000755000175200017520000000000013434203624017345 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v14/OsiUnitTest/OsiUnitTest.vcxproj0000644000175200017520000003120513401025325023207 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 {0DCD21B9-FCBD-4B2A-B1DE-65FA359C904C} OsiUnitTest 10.0.17763.0 Application Unicode false false v141 Application Unicode false v141 Application Unicode false false v141 Application Unicode false v141 <_ProjectFileVersion>10.0.30319.1 $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ true $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ false AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset Disabled ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true true MachineX86 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false X64 Disabled ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true true MachineX64 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true MachineX86 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;COIN_MSVS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase $(OutDir);%(AdditionalLibraryDirectories) true MachineX64 libCoinUtils.lib;libOsi.lib;libOsiCommonTest.lib;%(AdditionalDependencies) false {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {109d6e6f-6d91-460f-86ae-df27400e09a9} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false DyLP-1.10.4/Osi/MSVisualStudio/v14/libOsiCommonTest/0000755000175200017520000000000013434203624020345 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v14/libOsiCommonTest/libOsiCommonTest.vcxproj0000644000175200017520000002425013401023472025212 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 {109D6E6F-6D91-460F-86AE-DF27400E09A9} libOsiCommonTest 10.0.17763.0 StaticLibrary false v141 StaticLibrary v141 StaticLibrary false v141 StaticLibrary v141 <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDebugDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;..\..\..\..\Osi\src\OsiCommonTest;%(AdditionalIncludeDirectories) OSI_BUILD;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase %(AdditionalLibraryDirectories) {c4867f15-438d-4ff8-8388-62fbaaa9786c} false {7d98e2cb-876e-4f75-9f71-77d3fe87e149} false DyLP-1.10.4/Osi/MSVisualStudio/v14/libOsi/0000755000175200017520000000000013434203624016334 5ustar coincoinDyLP-1.10.4/Osi/MSVisualStudio/v14/libOsi/libOsi.vcxproj0000644000175200017520000002631613377773061021217 0ustar coincoin Debug Win32 Debug x64 Release Win32 Release x64 {7D98E2CB-876E-4F75-9F71-77D3FE87E149} 10.0.17763.0 StaticLibrary v141 StaticLibrary v141 StaticLibrary v141 StaticLibrary v141 <_ProjectFileVersion>10.0.30319.1 AllRules.ruleset AllRules.ruleset AllRules.ruleset AllRules.ruleset ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks _DEBUG;%(PreprocessorDefinitions) 0x0409 true X64 ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks Level3 true ProgramDatabase _DEBUG;%(PreprocessorDefinitions) 0x0409 true ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true true NDEBUG;%(PreprocessorDefinitions) 0x0409 true X64 Default ..\..\..\..\CoinUtils\src;..\..\..\..\BuildTools\headers;..\..\..\..\Osi\src\Osi;%(AdditionalIncludeDirectories) OSI_BUILD;WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true NDEBUG;%(PreprocessorDefinitions) 0x0409 true DyLP-1.10.4/Osi/ltmain.sh0000755000175200017520000057753011405216166013453 0ustar coincoin# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 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 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # 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. basename="s,^.*/,,g" # 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" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.22 TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)" # 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 # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # 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 "$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" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # 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. func_win32_libid () { 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 if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $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_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 () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done 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 "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # 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. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # 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 $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi 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 my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xdir="$my_gentop/$my_xlib" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do 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 have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2005 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --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 $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # 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= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # 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= 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) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$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,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$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. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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 $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) 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 "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 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 $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "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." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </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." $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 $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </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." $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 $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built fi 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 case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$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 dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= 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 compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes 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 $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" 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*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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*) # 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 deplibs="$deplibs -framework System" 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 deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -pg pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \ -t[45]*|-txscale*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 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*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # 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 ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi 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 dlfiles="$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. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$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 non_pic_objects="$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" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" 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. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'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\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; 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 test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$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 test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$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 case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; 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 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 "$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) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; 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 (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac 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 ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." 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 -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; 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 newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` 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 used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi 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. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # 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 case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$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 $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE 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. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$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 $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$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 notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi 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 newlib_search_path="$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*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test 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 test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$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 -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 *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if 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 "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; 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*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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 "$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 module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; 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 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; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$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 $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$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:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; 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:"*) ;; *) finalize_shlibpath="$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 [\\/]*) add_dir="$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*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$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" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared 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 "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs 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 "*) ;; *) lib_search_path="$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 "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$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 tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" 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 if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # 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="$2" number_minor="$3" number_revision="$4" # # 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 darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; 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]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; 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]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE 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 major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` 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 iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` 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 iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; 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 $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$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) ;; $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 removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` dependency_libs=`$echo "$dependency_libs " | ${SED} -e "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 temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$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 "*) ;; *) dlfiles="$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 "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-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 deplibs="$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. $rm conftest.c cat > conftest.c </dev/null` 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$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 newdeplibs="$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 else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e '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 "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $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 fi ;; 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 is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; 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 # 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$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 if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$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 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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$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" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$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 "$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 realname="$2" shift; 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 linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "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"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $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:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # 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 output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$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. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 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~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "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" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" 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\" 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 # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(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 "$mode" = relink; then $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 $show "${rm}r $gentop" $run ${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 $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run 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 "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $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 wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${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" # $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" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; 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 "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$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 "*) ;; *) finalize_rpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$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"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$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 "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # 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/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= 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*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"` else compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` fi ;; * ) compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; 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 "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" 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 rpath="$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 rpath="$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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? 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" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e '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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` 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 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #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 # 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 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ 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; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); 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 ("getcwd failed"); 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 ("getcwd failed"); 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 * 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; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # 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 variable: 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 echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ 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 >> $output "\ # 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 $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE 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 $EXIT_FAILURE fi fi\ " chmod +x $output fi 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" 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" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$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 # 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 $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_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 for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$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= 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 save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "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}\" || 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 var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; 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 "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then 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) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # 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' # Libraries that this one depends upon. dependency_libs='$dependency_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 fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # 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. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; 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. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$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 "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. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi 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 $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run 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 if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run 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 destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` 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 file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo 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. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "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) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $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" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 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 -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # 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 ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" 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) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; 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 (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$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 rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [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 --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information 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. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [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: $modename [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 -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking 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: $modename [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: $modename [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: $modename [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 rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [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 -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 -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] 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: $modename [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." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # 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 disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: DyLP-1.10.4/Osi/config.sub0000755000175200017520000007772611405216166013615 0ustar coincoin#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2007-04-29' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # 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 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. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # 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. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # 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. # 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 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-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) 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) os= basic_machine=$1 ;; -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*) 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 \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | 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 | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-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-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | 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-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | 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-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # 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 ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; 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 ;; cr16c) basic_machine=cr16c-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 ;; 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'm not sure what "Sysv32" means. Should this be sysv3.2? 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 ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; 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-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; 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 ;; 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 ;; 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) basic_machine=powerpc-unknown ;; ppc-*) 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) 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 ;; 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 ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; 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 ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-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[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. -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* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -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* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -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*) # 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 ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -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 ;; # 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 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) 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 ;; -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: DyLP-1.10.4/Osi/README0000644000175200017520000000571211507173764012505 0ustar coincoinOPEN SOLVER INTERFACE LIBRARY README ============================= In this README, 1. 'coin-Osi' is the full path to the directory in which you have dowloaded Osi. 2. 'build' is the full path to the directory used for the installation of Osi. It might be coin-Osi or some other directory of your choosing. OVERVIEW ======== Welcome to the COIN-OR Open Solver Interface Library (Osi). Osi is distributed under the Eclipse Public License Version 1.0 and is freely redistributable. All source code and documentation is copyright by International Business Machines Corporation and (many) others. This README file may be distributed freely. The COIN-OR Open Solver Interface Library is a collection of solver interfaces (SIs) that provide a common interface --- the OSI API --- for all the supported solvers. Each SI is in a separate directory. The authors of each SI are listed in the AUTHORS file in the subdirectory. The names of maintainers and contributors to the base OsiSolverInterface code are listed in the AUTHORS file in this (Osi) directory. For more information, see the Osi Trac page (see below). OSI TRAC PAGE ============= https://projects.coin-or.org/Osi INSTALLATION ============ If you have downloaded the Osi package in the local directory coin-Osi, please see the INSTALL file in coin-Osi (the parent directory of this directory, unless you've changed the default Coin package directory structure) for instructions on how to install the entire package. If you have obtained Osi by downloading some other package, Osi will be installed as part of the installation of that package. See the INSTALL file in the main directory of the package (again, the parent directory of this directory). SUPPORT ======= 1. Authors See the AUTHORS file. 2. Project Managers The main project managers are Lou Hafer, lou@cs.sfu.ca Matt Saltzmann, mjs@clemson.edu Lots of others help out. 3. Mailing List Casual discussion of Osi can usually be found in the coin-discuss mailing list. Serious discussion occurs in the coin-osi-devel mailing list. To subscribe to either, go to http://list.coin-or.org/mailman/listinfo and follow the links. 4. Bug Reports Bug reports should be reported by creating a ticket at https://projects.coin-or.org/Osi/newticket You will need to create a login id. We apologise for the hassle, but it's the only way to avoid spammers. The more you can tell us about the bug (version of Osi, compiler version, operating system, etc.) the better the chance that we can duplicate your bug and fix it. It's helpful if you leave a valid email address, in case we need to contact you for more information. You can also report bugs on the mailing lists, but you're at the mercy of the memory of the developers. Once that email gets filed, well, out of sight, out of mind. 5. Requests for Enhancements As for bugs, please create a ticket. Or, join the coin-osi-devel list and lobby directly. DyLP-1.10.4/Osi/osi-unittests.pc.in0000644000175200017520000000046211510106235015364 0ustar coincoinprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: OsiUnitTests Description: COIN-OR Open Solver Interface Common Unit Tests URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsiCommonTests Cflags: -I${includedir} Requires: osi DyLP-1.10.4/Osi/osi.pc.in0000644000175200017520000000045411510106235013325 0ustar coincoinprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@/coin Name: Osi Description: COIN-OR Open Solver Interface URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lOsi @OSILIB_PCLIBS@ Cflags: -I${includedir} Requires: @OSILIB_PCREQUIRES@ DyLP-1.10.4/Osi/configure.ac0000644000175200017520000002056113434065666014114 0ustar coincoin# Copyright (C) 2006 International Business Machines. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: configure.ac 2213 2019-02-22 21:37:58Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 ############################################################################# # Names and other basic things # ############################################################################# AC_PREREQ(2.59) AC_INIT([Osi],[0.108.0],[osi@list.coin-or.org]) AC_COPYRIGHT([ Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License.]) # List one file in the package so that the configure script can test # whether the package is actually there AC_CONFIG_SRCDIR(src/Osi/OsiAuxInfo.cpp) # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. AC_PREFIX_DEFAULT([`pwd`]) ############################################################################# # Standard build tool stuff # ############################################################################# # Get the system type AC_CANONICAL_BUILD # A bit of initial setup AC_COIN_PROJECTDIR_INIT(Osi,14:0:13) # Check if user wants to produce debugging code AC_COIN_DEBUG_COMPILE(Osi) # Get the name of the C++ compiler and appropriate compiler options AC_COIN_PROG_CXX # Initialize automake and libtool AC_COIN_INIT_AUTO_TOOLS ############################################################################# # COIN-OR components # ############################################################################# AC_COIN_CHECK_PACKAGE(CoinUtils, [coinutils], [OsiLib]) if test $coin_has_coinutils != yes ; then AC_MSG_ERROR([Required package CoinUtils not available.]) fi AC_COIN_CHECK_PACKAGE(Glpk, [coinglpk], [OsiGlpkLib]) AC_COIN_CHECK_PACKAGE(SoPlex, [coinsoplex < 1.7],[OsiSpxLib]) AC_COIN_CHECK_PACKAGE(Sample, [coindatasample]) AC_COIN_CHECK_PACKAGE(Netlib, [coindatanetlib]) ############################################################################# # Third party solvers # ############################################################################# # Check which third party solvers are available. Cplex detection has been # tested on a semi-regular basis, and Mosek detection most likely works. For # the rest, it's anyone's guess. -- lh, 080529 -- # fixed detection of Mosek and Xpress -- stefan, 091003 (linux32, gcc) -- AC_COIN_CHECK_USER_LIBRARY([Cplex], [CPX],[cplex.h], [CPXgetstat]) AC_COIN_CHECK_USER_LIBRARY([Mosek], [MSK],[mosek.h], [MSK_makeenv]) AC_COIN_CHECK_USER_LIBRARY([Xpress],[XPR],[xprs.h], [XPRSinit]) AC_COIN_CHECK_USER_LIBRARY([Gurobi],[GRB],[gurobi_c.h],[GRBloadenv]) ############################################################################# # Examples solver # ############################################################################# # choose a solver interface that can be used in the examples if test $coin_has_glpk = yes ; then OSI_EXAMPLES_SOLVER_NAME=OsiGlpkSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="$GLPK_CFLAGS" OSI_EXAMPLES_SOLVER_LIBS="-lOsiGlpk $GLPK_LIBS_INSTALLED" OSI_EXAMPLES_SOLVER_PCNAME=osi-glpk elif test $coin_has_cpx = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiCpxSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$CPXINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiCpx $CPXLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-cplex elif test $coin_has_grb = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiGrbSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$GRBINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiGrb $GRBLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-gurobi elif test $coin_has_msk = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiMskSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$MSKINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiMsk $MSKLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-mosek elif test $coin_has_xpr = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiXprSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$XPRINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiXpr $XPRLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-xpress elif test $coin_has_soplex = yes ; then OSI_EXAMPLES_SOLVER_NAME=OsiSpxSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="$SOPLEX_CFLAGS" OSI_EXAMPLES_SOLVER_LIBS="-lOsiSpx $SOPLEX_LIBS_INSTALLED" OSI_EXAMPLES_SOLVER_PCNAME=osi-soplex else AC_MSG_WARN([No solver available, examples will not work.]) fi # adjust linker flags for (i)cl compiler if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then [OSI_EXAMPLES_SOLVER_LIBS=`echo " $OSI_EXAMPLES_SOLVER_LIBS" | sed -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'`] fi AC_SUBST(OSI_EXAMPLES_SOLVER_NAME) AC_SUBST(OSI_EXAMPLES_SOLVER_CFLAGS) AC_SUBST(OSI_EXAMPLES_SOLVER_LIBS) AC_SUBST(OSI_EXAMPLES_SOLVER_PCNAME) ############################################################################# # Configuration options for individual OSIs # ############################################################################# # If any of the tests performed in this section actually require the presence # of the solver (file presence, link checks, etc.) be sure to guard the call. # We assume that GLPK is not too old AC_DEFINE(GLPK_HAS_INTOPT, [1], [Define to 1 if GLPK has the advanced B&B solver lpx_intopt]) ############################################################################# # Check for doxygen # ############################################################################# AC_COIN_DOXYGEN(CoinUtils) ############################################################################# # System header # ############################################################################# AC_COIN_CHECK_CXX_CHEADER(math) AC_COIN_CHECK_CXX_CHEADER(float) AC_COIN_CHECK_CXX_CHEADER(ieeefp) ############################################################################## # Finishing up by writing all the output # ############################################################################## # Here list all the files that configure should create (except for the # configuration header file) AC_CONFIG_FILES([Makefile examples/Makefile src/Osi/Makefile src/OsiCpx/Makefile src/OsiGlpk/Makefile src/OsiMsk/Makefile src/OsiXpr/Makefile src/OsiGrb/Makefile src/OsiSpx/Makefile src/OsiCommonTest/Makefile test/Makefile osi.pc osi-uninstalled.pc osi-unittests.pc osi-unittests-uninstalled.pc]) if test $coin_has_cpx = true ; then AC_CONFIG_FILES([osi-cplex.pc:src/OsiCpx/osi-cplex.pc.in osi-cplex-uninstalled.pc:src/OsiCpx/osi-cplex-uninstalled.pc.in]) fi if test $coin_has_glpk = yes ; then AC_CONFIG_FILES([osi-glpk.pc:src/OsiGlpk/osi-glpk.pc.in osi-glpk-uninstalled.pc:src/OsiGlpk/osi-glpk-uninstalled.pc.in]) fi if test $coin_has_grb = true ; then AC_CONFIG_FILES([osi-gurobi.pc:src/OsiGrb/osi-gurobi.pc.in osi-gurobi-uninstalled.pc:src/OsiGrb/osi-gurobi-uninstalled.pc.in]) fi if test $coin_has_msk = true ; then AC_CONFIG_FILES([osi-mosek.pc:src/OsiMsk/osi-mosek.pc.in osi-mosek-uninstalled.pc:src/OsiMsk/osi-mosek-uninstalled.pc.in]) fi if test $coin_has_xpr = true ; then AC_CONFIG_FILES([osi-xpress.pc:src/OsiXpr/osi-xpress.pc.in osi-xpress-uninstalled.pc:src/OsiXpr/osi-xpress-uninstalled.pc.in]) fi if test $coin_has_soplex = yes ; then AC_CONFIG_FILES([osi-soplex.pc:src/OsiSpx/osi-soplex.pc.in osi-soplex-uninstalled.pc:src/OsiSpx/osi-soplex-uninstalled.pc.in]) fi AC_CONFIG_FILES([doxydoc/doxygen.conf]) # Here put the location and name of the configuration header file AC_CONFIG_HEADER([src/Osi/config.h src/Osi/config_osi.h]) # Finally, we let configure write all the output... AC_COIN_FINALIZE DyLP-1.10.4/Osi/doxydoc/0000755000175200017520000000000013434203624013257 5ustar coincoinDyLP-1.10.4/Osi/doxydoc/doxygen.conf.in0000644000175200017520000017400012231275137016214 0ustar coincoin# Doxyfile 1.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = @PACKAGE_NAME@ # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @PACKAGE_VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doxydoc # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = "@abs_top_srcdir@/" # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = @coin_doxy_logname@ #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @abs_top_srcdir@/src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.hpp \ *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.svn* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 3 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = YES # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = YES #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = YES # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = letter # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = @coin_doxy_tagfiles@ # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = @coin_doxy_tagname@ # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = YES # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @coin_doxy_usedot@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES DyLP-1.10.4/Osi/Makefile.am0000644000175200017520000000703512462104002013635 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1993 2015-01-28 06:56:02Z tkr $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # Subdirectories and installation of .pc files # ######################################################################## pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = osi.pc osi-unittests.pc SUBDIRS = src/Osi src/OsiCommonTest if COIN_HAS_CPX SUBDIRS += src/OsiCpx pkgconfiglib_DATA += osi-cplex.pc endif if COIN_HAS_GLPK SUBDIRS += src/OsiGlpk pkgconfiglib_DATA += osi-glpk.pc endif if COIN_HAS_MSK SUBDIRS += src/OsiMsk pkgconfiglib_DATA += osi-mosek.pc endif if COIN_HAS_XPR SUBDIRS += src/OsiXpr pkgconfiglib_DATA += osi-xpress.pc endif if COIN_HAS_GRB SUBDIRS += src/OsiGrb pkgconfiglib_DATA += osi-gurobi.pc endif if COIN_HAS_SOPLEX SUBDIRS += src/OsiSpx pkgconfiglib_DATA += osi-soplex.pc endif # We don't want to compile the test subdirectory, unless the test target is # specified. But we need to list it as subdirectory to make sure that it is # included in the tarball if ALWAYS_FALSE SUBDIRS += test endif ######################################################################## # Additional files to be included in tarball # ######################################################################## # Here we need include all files that are not mentioned in other Makefiles EXTRA_DIST = \ examples/basic2.cpp \ examples/basic.cpp \ examples/build.cpp \ examples/Makefile.in \ examples/parameters.cpp \ examples/query.cpp \ examples/README \ examples/specific.cpp ######################################################################## # Extra Targets # ######################################################################## test: all cd test; $(MAKE) test unitTest: test # Doxygen documentation doxydoc: doxygen doxydoc/doxygen.conf clean-doxydoc: ( cd doxydoc ; rm -rf html *.log *.tag ) clean-local: clean-doxydoc if test -r test/Makefile; then cd test; $(MAKE) clean; fi distclean-local: if test -r test/Makefile; then cd test; $(MAKE) distclean; fi install-exec-local: install-doc uninstall-local: uninstall-doc .PHONY: test unitTest doxydoc ######################################################################## # Installation of the addlibs file # ######################################################################## addlibsdir = $(DESTDIR)$(datadir)/coin/doc/Osi install-data-hook: @$(mkdir_p) "$(addlibsdir)" if COIN_HAS_PKGCONFIG PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@:$(DESTDIR)$(pkgconfiglibdir) \ $(PKG_CONFIG) --libs osi > $(addlibsdir)/osi_addlibs.txt else if COIN_CXX_IS_CL echo "-libpath:`$(CYGPATH_W) @abs_lib_dir@` libOsi.lib @OSILIB_LIBS_INSTALLED@" > $(addlibsdir)/osi_addlibs.txt else echo -L@abs_lib_dir@ -lOsi @OSILIB_LIBS_INSTALLED@ > $(addlibsdir)/osi_addlibs.txt endif endif uninstall-hook: rm -f $(addlibsdir)/osi_addlibs.txt ######################################################################## # Maintainer Stuff # ######################################################################## CLEANFILES = # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = include BuildTools/Makemain.inc DyLP-1.10.4/Osi/missing0000755000175200017520000002540611405216166013215 0ustar coincoin#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # 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 run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] 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 # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: DyLP-1.10.4/Osi/install-sh0000755000175200017520000002202111405216166013610 0ustar coincoin#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # 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. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= 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: -c (ignored) -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. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; 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 for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi 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 "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # 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: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # 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 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $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 "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: DyLP-1.10.4/Osi/examples/0000755000175200017520000000000013434203624013424 5ustar coincoinDyLP-1.10.4/Osi/examples/query.cpp0000644000175200017520000000416212101340333015265 0ustar coincoin// Example of using COIN-OR OSI // Demonstrates some problem and solution query methods #include #include OSIXXXhpp int main(void) { // Create a problem pointer. We use the base class here. OsiSolverInterface *si; // When we instantiate the object, we need a specific derived class. si = new OSIXXX; // Read in an mps file. This one's from the MIPLIB library. #if defined(SAMPLEDIR) si->readMps(SAMPLEDIR "/p0033"); #else fprintf(stderr, "Do not know where to find sample MPS files.\n"); exit(1); #endif // Display some information about the instance int nrows = si->getNumRows(); int ncols = si->getNumCols(); int nelem = si->getNumElements(); std::cout << "This problem has " << nrows << " rows, " << ncols << " columns, and " << nelem << " nonzeros." << std::endl; double const *upper_bounds = si->getColUpper(); std::cout << "The upper bound on the first column is " << upper_bounds[0] << std::endl; // All information about the instance is available with similar methods // Solve the (relaxation of the) problem si->initialSolve(); // Check the solution if ( si->isProvenOptimal() ) { std::cout << "Found optimal solution!" << std::endl; std::cout << "Objective value is " << si->getObjValue() << std::endl; // Examine solution int n = si->getNumCols(); const double *solution; solution = si->getColSolution(); std::cout << "Solution: "; for (int i = 0; i < n; i++) std::cout << solution[i] << " "; std::cout << std::endl; std::cout << "It took " << si->getIterationCount() << " iterations" << " to solve." << std::endl; } else { std::cout << "Didn't find optimal solution." << std::endl; // Check other status functions. What happened? if (si->isProvenPrimalInfeasible()) std::cout << "Problem is proven to be infeasible." << std::endl; if (si->isProvenDualInfeasible()) std::cout << "Problem is proven dual infeasible." << std::endl; if (si->isIterationLimitReached()) std::cout << "Reached iteration limit." << std::endl; } return 0; } DyLP-1.10.4/Osi/examples/readconic.cpp0000644000175200017520000000475012223503721016061 0ustar coincoin// $Id: readconic.cpp 1898 2013-04-09 18:06:04Z stefan $ // Copyright (C) 2005, International Business Machines // Corporation and others. All Rights Reserved. // This code is licensed under the terms of the Eclipse Public License (EPL). #include "CoinMpsIO.hpp" int main (int argc, const char *argv[]) { CoinMpsIO m_MpsData; int nOfSOS; CoinSet ** SOS = NULL; std::string mpsFileName; #if defined(SAMPLEDIR) mpsFileName = SAMPLEDIR "/conic.mps"; #else if (argc < 2) { fprintf(stderr, "Do not know where to find sample MPS files.\n"); exit(1); } #endif if (argc>=2) mpsFileName = argv[1]; int status = m_MpsData.readMps( mpsFileName.c_str(), "", nOfSOS, SOS ); assert (!status); int * columnStart = NULL; int * columnIdx = NULL; double * elements = NULL; status = m_MpsData.readQuadraticMps(NULL, columnStart, columnIdx, elements, 0); assert (!status); int nOfCones; int * coneStart = NULL; int * coneIdx = NULL; int * coneType = NULL; status = m_MpsData.readConicMps(NULL, coneStart, coneIdx, coneType, nOfCones); assert (!status); if (nOfSOS) { printf("%d SOS sets\n",nOfSOS); for (int iSOS=0;iSOSnumberEntries(); printf("Set %d has %d entries - type %d\n",iSOS,numberEntries,SOS[iSOS]->setType()); const int * which = SOS[iSOS]->which(); const double * weights = SOS[iSOS]->weights(); for (int i=0;i #include #include #include #include #include #include #include "CoinPragma.hpp" #include "CoinHelperFunctions.hpp" #include "CoinPackedVector.hpp" #include "CoinPackedMatrix.hpp" #include "CoinTime.hpp" #include "opbdp_solve.hpp" #include "PBCS.h" // Not threadsafe static unsigned int ** opbdp_solution=NULL; static int opbdp_number_solutions=0; static int opbdp_maximum_solutions=0; static int size_solution=0; static PBCS *save_pbcs=NULL; void opbdp_save_solution(OrdInt & sol) { if (opbdp_number_solutions==opbdp_maximum_solutions) { opbdp_maximum_solutions = opbdp_maximum_solutions*2+100; unsigned int ** temp = new unsigned int * [opbdp_maximum_solutions]; CoinMemcpyN(opbdp_solution,opbdp_number_solutions,temp); CoinZeroN(temp+opbdp_number_solutions,opbdp_maximum_solutions-opbdp_number_solutions); delete [] opbdp_solution; opbdp_solution=temp; } unsigned int * array = new unsigned int [size_solution]; CoinZeroN(array,size_solution); opbdp_solution[opbdp_number_solutions++]=array; sol.first(); while(!sol.last()) { int var = sol.next(); if (var > 0) setAtOne(var-1,array,true); } OrdInt Fixed = save_pbcs->get_fixed(); Fixed.first(); while(!Fixed.last()) { int flit = Fixed.next(); if (flit > 0) setAtOne(flit-1,array,true); } // add hidden ones due to equations save_pbcs->Eq.first(); while(!save_pbcs->Eq.last()) { int l = save_pbcs->Eq.next(); int r = save_pbcs->Eq(l); if (sol.member(r) || Fixed.member(r)) setAtOne(l-1,array,true); else if (sol.member(-r) || Fixed.member(-r)) setAtOne(l-1,array,true); // just positives are added } } //------------------------------------------------------------------- // Returns the greatest common denominator of two // positive integers, a and b, found using Euclid's algorithm //------------------------------------------------------------------- static int gcd(int a, int b) { int remainder = -1; // make sure a<=b (will always remain so) if(a > b) { // Swap a and b int temp = a; a = b; b = temp; } // if zero then gcd is nonzero (zero may occur in rhs of packed) if (!a) { if (b) { return b; } else { printf("**** gcd given two zeros!!\n"); abort(); } } while (remainder) { remainder = b % a; b = a; a = remainder; } return b; } static int solve(const OsiSolverInterface * model,PBCS & pbcs, OrdInt & sol) { int numberColumns = model->getNumCols(); size_solution = (numberColumns+31)/32; int numberRows = model->getNumRows(); bool all01=true; int i; const double * objective = model->getObjCoefficients(); double infinity = model->getInfinity(); const CoinPackedMatrix * matrix = model->getMatrixByRow(); const double * columnLower = model->getColLower(); const double * columnUpper = model->getColUpper(); const double * rowLower = model->getRowLower(); const double * rowUpper = model->getRowUpper(); for (i = 0; i < numberColumns; i++) { if (!model->isInteger(i)||columnLower[i]<0.0||columnUpper[i]>1.0) { all01=false; break; } } if (!all01) return -1; // Get scale factors to make integral const int * column = matrix->getIndices(); const int * rowLength = matrix->getVectorLengths(); const CoinBigIndex * rowStart = matrix->getVectorStarts(); const double * elementByRow = matrix->getElements(); // objective not too important double maximumObjElement = 0.0 ; for (i = 0 ; i < numberColumns ; i++) maximumObjElement = CoinMax(maximumObjElement,fabs(objective[i])) ; int objGood = 0 ; double objMultiplier = 2520.0 ; bool good=true; if (maximumObjElement) { while (10.0*objMultiplier*maximumObjElement < 1.0e9) objMultiplier *= 10.0 ; if (maximumObjElement*2520>=1.0e9) objMultiplier=1.0; double tolerance = 1.0e-9*objMultiplier; for (i = 0 ; i < numberColumns ; i++) { double value=fabs(objective[i])*objMultiplier ; if (!value) continue; int nearest = (int) floor(value+0.5) ; if (fabs(value-floor(value+0.5)) > tolerance) { // just take for now objGood = 1 ; good=false; break ; } else if (!objGood) { objGood = nearest ; } else { objGood = gcd(objGood,nearest) ; } } objMultiplier /= objGood; if (!good) { printf("Unable to scale objective correctly - maximum %g\n", maximumObjElement); objMultiplier = 1.0e7/maximumObjElement; } } else { objMultiplier=0.0; // no objective } double maximumElement=0.0; // now real stuff for (i=0;i=1.0e8) elMultiplier=1.0; double tolerance = 1.0e-8*elMultiplier; good=true; for (i=0;i tolerance) { elGood = 0 ; good=false; break ; } else if (!elGood) { elGood = nearest ; } else { elGood = gcd(elGood,nearest) ; } } } if (rowUpper[i]!=infinity) { double value=fabs(rowUpper[i])*elMultiplier ; if (value) { int nearest = (int) floor(value+0.5) ; if (fabs(value-floor(value+0.5)) > tolerance) { elGood = 0 ; good=false; break ; } else if (!elGood) { elGood = nearest ; } else { elGood = gcd(elGood,nearest) ; } } } for (CoinBigIndex j=rowStart[i];j tolerance) { elGood = 0 ; good=false; break ; } else if (!elGood) { elGood = nearest ; } else { elGood = gcd(elGood,nearest) ; } } } if (!good) return -1; // no good // multiplier elMultiplier /= elGood; double objOffset=0.0; model->getDblParam(OsiObjOffset,objOffset); int doMax= (model->getObjSense()<0.0) ? 1 : 0; printf("Objective multiplier is %g, element mutiplier %g, offset %g\n", objMultiplier,elMultiplier,objOffset); Products objf; Atoms atoms; save_pbcs = & pbcs; pbcs.set_atoms(&atoms); pbcs.set_enum_heuristic(0); for (i=0;i 1) std::cout << "Big M coefficient reduction changed " << changed << " coefficients"<0) { const double * objective = model->getObjCoefficients(); double objOffset=0.0; model->getDblParam(OsiObjOffset,objOffset); int numberColumns = model->getNumCols(); double * solution = new double [numberColumns]; CoinZeroN(solution,numberColumns); sol.first(); while(!sol.last()) { int var = sol.next(); if (var > 0) solution[var-1]=1.0; } OrdInt Fixed = pbcs.get_fixed(); Fixed.first(); while(!Fixed.last()) { int flit = Fixed.next(); if (flit > 0) solution[flit-1]=1.0; } // add hidden ones due to equations pbcs.Eq.first(); while(!pbcs.Eq.last()) { int l = pbcs.Eq.next(); int r = pbcs.Eq(l); if (sol.member(r) || Fixed.member(r)) solution[l-1]=1.0; else if (sol.member(-r) || Fixed.member(-r)) solution[l-1]=1.0; // just positives are added } numberFound=1; double objValue = - objOffset; for (int i=0;igetObjSense()>0 ? "minimum" : "maximum")<<" of "<setObjValue(objValue); model->setColSolution(solution); delete [] solution; } else if (!numberFound) { std::cout << "Constraint Set is unsatisfiable"<0||opbdp_number_solutions) { // all solutions numberFound = opbdp_number_solutions; return opbdp_solution; } else { // no solution return NULL; } } DyLP-1.10.4/Osi/examples/build.cpp0000644000175200017520000000567512130536345015245 0ustar coincoin// Example of using COIN-OR OSI, building the instance internally // with sparse matrix object #include #include OSIXXXhpp #include "CoinPackedMatrix.hpp" #include "CoinPackedVector.hpp" int main(void) { // Create a problem pointer. We use the base class here. OsiSolverInterface *si; // When we instantiate the object, we need a specific derived class. si = new OSIXXX; // Build our own instance from scratch /* * This section adapted from Matt Galati's example * on the COIN-OR Tutorial website. * * Problem from Bertsimas, Tsitsiklis page 21 * * optimal solution: x* = (1,1) * * minimize -1 x0 - 1 x1 * s.t 1 x0 + 2 x1 <= 3 * 2 x0 + 1 x1 <= 3 * x0 >= 0 * x1 >= 0 */ int n_cols = 2; double *objective = new double[n_cols];//the objective coefficients double *col_lb = new double[n_cols];//the column lower bounds double *col_ub = new double[n_cols];//the column upper bounds //Define the objective coefficients. //minimize -1 x0 - 1 x1 objective[0] = -1.0; objective[1] = -1.0; //Define the variable lower/upper bounds. // x0 >= 0 => 0 <= x0 <= infinity // x1 >= 0 => 0 <= x1 <= infinity col_lb[0] = 0.0; col_lb[1] = 0.0; col_ub[0] = si->getInfinity(); col_ub[1] = si->getInfinity(); int n_rows = 2; double *row_lb = new double[n_rows]; //the row lower bounds double *row_ub = new double[n_rows]; //the row upper bounds //Define the constraint matrix. CoinPackedMatrix *matrix = new CoinPackedMatrix(false,0,0); matrix->setDimensions(0, n_cols); //1 x0 + 2 x1 <= 3 => -infinity <= 1 x0 + 2 x2 <= 3 CoinPackedVector row1; row1.insert(0, 1.0); row1.insert(1, 2.0); row_lb[0] = -1.0 * si->getInfinity(); row_ub[0] = 3.0; matrix->appendRow(row1); //2 x0 + 1 x1 <= 3 => -infinity <= 2 x0 + 1 x1 <= 3 CoinPackedVector row2; row2.insert(0, 2.0); row2.insert(1, 1.0); row_lb[1] = -1.0 * si->getInfinity(); row_ub[1] = 3.0; matrix->appendRow(row2); //load the problem to OSI si->loadProblem(*matrix, col_lb, col_ub, objective, row_lb, row_ub); //write the MPS file to a file called example.mps si->writeMps("example"); // Solve the (relaxation of the) problem si->initialSolve(); // Check the solution if ( si->isProvenOptimal() ) { std::cout << "Found optimal solution!" << std::endl; std::cout << "Objective value is " << si->getObjValue() << std::endl; int n = si->getNumCols(); const double* solution = si->getColSolution(); // We can then print the solution or could examine it. for( int i = 0; i < n; ++i ) std::cout << si->getColName(i) << " = " << solution[i] << std::endl; } else { std::cout << "Didn't find optimal solution." << std::endl; // Could then check other status functions. } return 0; } DyLP-1.10.4/Osi/examples/Makefile.in0000644000175200017520000001072212101340333015460 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # $Id: Makefile.in 1881 2013-01-28 00:05:47Z stefan $ ########################################################################## # You can modify this example makefile to fit for your own program. # # Usually, you only need to change CHANGEME entries below. # ########################################################################## # CHANGEME # To compile other examples, either change the following line, or add the # argument DRIVER=filename_without_extension to make, e.g., # `make DRIVER=parameters' DRIVER = basic # CHANGME # This should be the name of your executable; change if you want a name # that's different from the file name. EXE = $(DRIVER)@EXEEXT@ # CHANGEME # OBJS should include all object files necessary to build your program. For # the examples, only one file is needed for each example. You will probably # have more as your code grows. OBJS = $(DRIVER).@OBJEXT@ # CHANGEME # Additional libraries. The examples require only the COIN libraries specified # as LIBS below. You may need more. ADDLIBS = # CHANGEME # Additional flags for compilation (e.g., include flags). As for libraries, # the examples require only COIN include files, specified as part of CXXFLAGS # below. ADDINCFLAGS = # CHANGEME # Directory to the sources for the (example) problem definition files. VPATH # is used if you are building in a different directory than the source. This # can be handy for various reasons; if none occur to you, don't worry about # it. SRCDIR = @srcdir@ VPATH = @srcdir@ ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile the # # package. # ########################################################################## COIN_HAS_PKGCONFIG = @COIN_HAS_PKGCONFIG_TRUE@TRUE COIN_CXX_IS_CL = @COIN_CXX_IS_CL_TRUE@TRUE COIN_HAS_SAMPLE = @COIN_HAS_SAMPLE_TRUE@TRUE COIN_HAS_NETLIB = @COIN_HAS_NETLIB_TRUE@TRUE # C++ Compiler command CXX = @CXX@ # C++ Compiler options CXXFLAGS = @CXXFLAGS@ @OSI_EXAMPLES_SOLVER_CFLAGS@ \ -DOSIXXXhpp=\"@OSI_EXAMPLES_SOLVER_NAME@.hpp\" -DOSIXXX=@OSI_EXAMPLES_SOLVER_NAME@ # Sample data directory ifeq ($(COIN_HAS_SAMPLE), TRUE) ifeq ($(COIN_HAS_PKGCONFIG), TRUE) CXXFLAGS += -DSAMPLEDIR=\"`PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --variable=datadir coindatasample`\" else CXXFLAGS += -DSAMPLEDIR=\"@SAMPLE_DATA_INSTALLED@\" endif endif # Netlib data directory ifeq ($(COIN_HAS_NETLIB), TRUE) ifeq ($(COIN_HAS_PKGCONFIG), TRUE) CXXFLAGS += -DNETLIBDIR=\"`PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --variable=datadir coindatanetlib`\" else CXXFLAGS += -DNETLIBDIR=\"@NETLIB_DATA_INSTALLED@\" endif endif # additional C++ Compiler options for linking CXXLINKFLAGS = @RPATH_FLAGS@ # Include directories (we use the CYGPATH_W variables to allow compilation with Windows compilers) ifeq ($(COIN_HAS_PKGCONFIG), TRUE) INCL = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --cflags @OSI_EXAMPLES_SOLVER_PCNAME@ osi` else INCL = @OSILIB_CFLAGS_INSTALLED@ endif INCL += $(ADDINCFLAGS) # Linker flags ifeq ($(COIN_HAS_PKGCONFIG), TRUE) LIBS = `PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@ @PKG_CONFIG@ --libs @OSI_EXAMPLES_SOLVER_PCNAME@ osi` else ifeq ($(COIN_CXX_IS_CL), TRUE) LIBS = -link -libpath:`$(CYGPATH_W) @abs_lib_dir@` libOsi.lib @OSI_EXAMPLES_SOLVER_LIBS@ @OSILIB_LIBS_INSTALLED@ else LIBS = -L@abs_lib_dir@ -lOsi @OSI_EXAMPLES_SOLVER_LIBS@ @OSILIB_LIBS_INSTALLED@ endif endif # The following is necessary under cygwin, if native compilers are used CYGPATH_W = @CYGPATH_W@ all: $(EXE) .SUFFIXES: .cpp .c .o .obj $(EXE): $(OBJS) bla=;\ for file in $(OBJS); do bla="$$bla `$(CYGPATH_W) $$file`"; done; \ $(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) -o $@ $$bla $(LIBS) $(ADDLIBS) clean: rm -rf $(EXE) $(OBJS) .cpp.o: $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$< .cpp.obj: $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi` .c.o: $(CC) $(CFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$< .c.obj: $(CC) $(CFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi` DyLP-1.10.4/Osi/examples/basic.cpp0000644000175200017520000000233312130536345015213 0ustar coincoin// Bare bones example of using COIN-OR OSI #include #include OSIXXXhpp int main(void) { // Create a problem pointer. We use the base class here. OsiSolverInterface *si; // When we instantiate the object, we need a specific derived class. si = new OSIXXX; // Read in an mps file. This one's from the MIPLIB library. #if defined(SAMPLEDIR) si->readMps(SAMPLEDIR "/p0033"); #else fprintf(stderr, "Do not know where to find sample MPS files.\n"); exit(1); #endif // Solve the (relaxation of the) problem si->initialSolve(); // Check the solution if ( si->isProvenOptimal() ) { std::cout << "Found optimal solution!" << std::endl; std::cout << "Objective value is " << si->getObjValue() << std::endl; int n = si->getNumCols(); const double* solution = si->getColSolution(); // We can then print the solution or could examine it. for( int i = 0; i < n && i < 5; ++i ) std::cout << si->getColName(i) << " = " << solution[i] << std::endl; if( 5 < n ) std::cout << "..." << std::endl; } else { std::cout << "Didn't find optimal solution." << std::endl; // Could then check other status functions. } return 0; } DyLP-1.10.4/Osi/examples/opbdp_solve.hpp0000644000175200017520000000273111403136004016443 0ustar coincoin// Copyright (C) 2006, International Business Machines // Corporation and others. All Rights Reserved. #ifndef OsiOpbdpSolve_H #define OsiOpbdpSolve_H #include #include "OsiSolverInterface.hpp" /** Solve pure 0-1 with integral coefficients etc (or can be made by scaling) using opdbp The solution will be set in model If no solution then returns 0, if not suitable returns -1 */ int solveOpbdp(OsiSolverInterface * model); /** Find all solutions of a pure 0-1 with integral coefficients etc (or can be made by scaling) using opdbp Returns an array of bit solution vectors. i is 1 if bit set (see below) If no solution then numberFound will be 0, if not suitable -1 This needs the line at about 206 of EnumerateOpt.cpp local_maximum = value + 1; // try to reach that one! replaced by if (verbosity!=-1) { local_maximum = value + 1; // try to reach that one! } else { local_maximum = 0; void opbdp_save_solution(OrdInt & sol); OrdInt sol = last_solution.to_OrdInt(); opbdp_save_solution(sol); // save solution } */ unsigned int ** solveOpbdp(const OsiSolverInterface * model,int & numberFound); inline bool atOne(int i,unsigned int * array) { return ((array[i>>5]>>(i&31))&1)!=0; } inline void setAtOne(int i,unsigned int * array,bool trueFalse) { unsigned int & value = array[i>>5]; int bit = i&31; if (trueFalse) value |= (1< #include OSIXXXhpp int main(void) { // Create a problem pointer. We use the base class here. OsiSolverInterface *si; // When we instantiate the object, we need a specific derived class. si = new OSIXXX; // Read in an mps file. This one's from the MIPLIB library. #if defined(SAMPLEDIR) si->readMps(SAMPLEDIR "/p0033"); #else fprintf(stderr, "Do not know where to find sample MPS files.\n"); exit(1); #endif // Display some information about the instance int nrows = si->getNumRows(); int ncols = si->getNumCols(); int nelem = si->getNumElements(); std::cout << "This problem has " << nrows << " rows, " << ncols << " columns, and " << nelem << " nonzeros." << std::endl; double const * upper_bounds = si->getColUpper(); std::cout << "The upper bound on the first column is " << upper_bounds[0] << std::endl; // All information about the instance is available with similar methods // Before solving, indicate some parameters si->setIntParam( OsiMaxNumIteration, 10); si->setDblParam( OsiPrimalTolerance, 0.001 ); // Can also read parameters std::string solver; si->getStrParam( OsiSolverName, solver ); std::cout << "About to solve with: " << solver << std::endl; // Solve the (relaxation of the) problem si->initialSolve(); // Check the solution if ( si->isProvenOptimal() ) { std::cout << "Found optimal solution!" << std::endl; std::cout << "Objective value is " << si->getObjValue() << std::endl; // Examine solution int n = si->getNumCols(); const double *solution; solution = si->getColSolution(); std::cout << "Solution: "; for (int i = 0; i < n; i++) std::cout << solution[i] << " "; std::cout << std::endl; std::cout << "It took " << si->getIterationCount() << " iterations" << " to solve." << std::endl; } else { std::cout << "Didn't find optimal solution." << std::endl; // Check other status functions. What happened? if (si->isProvenPrimalInfeasible()) std::cout << "Problem is proven to be infeasible." << std::endl; if (si->isProvenDualInfeasible()) std::cout << "Problem is proven dual infeasible." << std::endl; if (si->isIterationLimitReached()) std::cout << "Reached iteration limit." << std::endl; } return 0; } DyLP-1.10.4/Osi/test/0000755000175200017520000000000013434203624012565 5ustar coincoinDyLP-1.10.4/Osi/test/OsiGlpkSolverInterfaceTest.cpp0000644000175200017520000012162011612344643020522 0ustar coincoin// Copyright (C) 2002, International Business Machines // Corporation and others. All Rights Reserved. // Copyright (C) 2004 University of Pittsburgh // University of Pittsburgh coding done by Brady Hunsaker // This file is licensed under the terms of Eclipse Public License (EPL). // OsiGlpkSolverInterfaceTest.cpp adapted from OsiClpSolverInterfaceTest.cpp // on 2004/10/16 // Check for ??? to see tests that aren't working correctly. // Also note that OsiPresolve doesn't appear to work with OsiGlpk. This // needs to be examined. #include "CoinPragma.hpp" #include "OsiConfig.h" //#include //#include //#include //#include #include "OsiUnitTests.hpp" #include "OsiGlpkSolverInterface.hpp" #include "OsiRowCut.hpp" #include "OsiCuts.hpp" #include "CoinFloatEqual.hpp" // Added so windows build with dsp files works, // when not building with glpk. #ifdef COIN_HAS_GLPK void OsiGlpkSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir) { // Test default constructor { OsiGlpkSolverInterface m; OSIUNITTEST_ASSERT_ERROR(m.obj_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.collower_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colupper_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.ctype_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowlower_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowupper_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colsol_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsol_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByCol_ == NULL, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getApplicationData() == NULL, {}, "glpk", "default constructor"); int i=2346; m.setApplicationData(&i); OSIUNITTEST_ASSERT_ERROR(*((int *)(m.getApplicationData())) == i, {}, "glpk", "default constructor"); } { CoinRelFltEq eq; OsiGlpkSolverInterface m; std::string fn = mpsDir+"exmip1"; m.readMps(fn.c_str(),"mps"); { OsiGlpkSolverInterface im; OSIUNITTEST_ASSERT_ERROR(im.getNumCols() == 0, {}, "glpk", "default constructor"); OSIUNITTEST_ASSERT_ERROR(im.getModelPtr() != NULL, {}, "glpk", "default constructor"); // Test reset im.reset(); OSIUNITTEST_ASSERT_ERROR(m.obj_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.collower_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.colupper_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.ctype_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.rowlower_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.rowupper_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.colsol_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.rowsol_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.matrixByCol_ == NULL, {}, "glpk", "reset"); OSIUNITTEST_ASSERT_ERROR(m.getApplicationData() == NULL, {}, "glpk", "reset"); } // Test copy constructor and assignment operator { OsiGlpkSolverInterface lhs; { OsiGlpkSolverInterface im(m); OsiGlpkSolverInterface imC1(im); OSIUNITTEST_ASSERT_ERROR(imC1.getModelPtr() != im.getModelPtr(), {}, "glpk", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumCols() == im.getNumCols(), {}, "glpk", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumRows() == im.getNumRows(), {}, "glpk", "copy constructor"); OsiGlpkSolverInterface imC2(im); OSIUNITTEST_ASSERT_ERROR(imC2.getModelPtr() != im.getModelPtr(), {}, "glpk", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumCols() == im.getNumCols(), {}, "glpk", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumRows() == im.getNumRows(), {}, "glpk", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getModelPtr() != imC2.getModelPtr(), {}, "glpk", "copy constructor"); lhs = imC2; } // Test that lhs has correct values even though rhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.getModelPtr() != m.getModelPtr(), {}, "glpk", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumCols() == m.getNumCols(), {}, "glpk", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumRows() == m.getNumRows(), {}, "glpk", "copy constructor"); } // Test clone { OsiGlpkSolverInterface glpkSi(m); OsiSolverInterface * siPtr = &glpkSi; OsiSolverInterface * siClone = siPtr->clone(); OsiGlpkSolverInterface * glpkClone = dynamic_cast(siClone); OSIUNITTEST_ASSERT_ERROR(glpkClone != NULL, {}, "glpk", "clone"); OSIUNITTEST_ASSERT_ERROR(glpkClone->getModelPtr() != glpkSi.getModelPtr(), {}, "glpk", "clone"); OSIUNITTEST_ASSERT_ERROR(glpkClone->getNumRows() == glpkSi.getNumRows(), {}, "glpk", "clone"); OSIUNITTEST_ASSERT_ERROR(glpkClone->getNumCols() == glpkSi.getNumCols(), {}, "glpk", "clone"); delete siClone; } // test infinity { OsiGlpkSolverInterface si; OSIUNITTEST_ASSERT_ERROR(si.getInfinity() == COIN_DBL_MAX, {}, "glpk", "infinity"); } #if 0 // ??? These index error 'throw's aren't in OsiGlpk // Test some catches { OsiGlpkSolverInterface solver; try { solver.setObjCoeff(0,0.0); } catch (CoinError e) { std::cout<<"Correct throw"<getMajorDim() == 5, return, "glpk", "getMatrixByRow: major dim"); OSIUNITTEST_ASSERT_ERROR(smP->getNumElements() == 14, return, "glpk", "getMatrixByRow: num elements"); CoinRelFltEq eq; const double * ev = smP->getElements(); // GLPK returns each row in reverse order. This is consistent with // the sparse matrix format but is not what most solvers do. That's // why this section is different. OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4], 3.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3], 1.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1],-1.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0],-1.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 2.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 1.1), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], 2.8), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9],-1.2), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 5.6), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "glpk", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 1.9), {}, "glpk", "getMatrixByRow: elements"); const CoinBigIndex * mi = smP->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "glpk", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "glpk", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "glpk", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "glpk", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "glpk", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "glpk", "getMatrixByRow: vector starts"); const int * ei = smP->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 0, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 1, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 4, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 7, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 1, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 2, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 2, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 5, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 3, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 6, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 0, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "glpk", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 7, {}, "glpk", "getMatrixByRow: indices"); } // Test adding several cuts { OsiGlpkSolverInterface fim; std::string fn = mpsDir+"exmip1"; fim.readMps(fn.c_str(),"mps"); // exmip1.mps has 2 integer variables with index 2 & 3 fim.initialSolve(); OsiRowCut cuts[3]; // Generate one ineffective cut plus two trivial cuts int c; int nc = fim.getNumCols(); int *inx = new int[nc]; for (c=0;cgetMajorDim() == 8, return, "glpk", "getMatrixByCol: major dim"); OSIUNITTEST_ASSERT_ERROR(smP->getMinorDim() == 5, return, "glpk", "getMatrixByCol: minor dim"); OSIUNITTEST_ASSERT_ERROR(smP->getNumElements() == 14, return, "glpk", "getMatrixByCol: number of elements"); OSIUNITTEST_ASSERT_ERROR(smP->getSizeVectorStarts() == 9, return, "glpk", "getMatrixByCol: vector starts size"); CoinRelFltEq eq; const double * ev = smP->getElements(); // Unlike row-ordered matrices, GLPK does column-ordered the "normal" way OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 5.6), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2], 1.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3], 2.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4], 1.1), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 1.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6],-2.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 2.8), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8],-1.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 1.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], 1.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11],-1.2), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12],-1.0), {}, "glpk", "getMatrixByCol: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "glpk", "getMatrixByCol: elements"); const CoinBigIndex * mi = smP->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 2, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 4, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 6, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 8, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 10, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[6] == 11, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[7] == 12, {}, "glpk", "getMatrixByCol: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[8] == 14, {}, "glpk", "getMatrixByCol: vector starts"); const int * ei = smP->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 4, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 0, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 1, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 1, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 2, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 0, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 3, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 0, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 4, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 2, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 3, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 0, {}, "glpk", "getMatrixByCol: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 4, {}, "glpk", "getMatrixByCol: indices"); } //-------------- // Test rowsense, rhs, rowrange, matrixByRow { OsiGlpkSolverInterface lhs; { #if 0 // FIXME ??? these won't work because the copy constructor changes the values in m OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "glpk", "???"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "glpk", "???"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "glpk", "???"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "glpk", "???"); #endif OsiGlpkSolverInterface siC1(m); OSIUNITTEST_ASSERT_WARNING(siC1.rowrange_ == NULL, {}, "glpk", "row range"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsense_ == NULL, {}, "glpk", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1.rhs_ == NULL, {}, "glpk", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1.matrixByRow_ == NULL, {}, "glpk", "matrix by row"); const char * siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "glpk", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "glpk", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "glpk", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "glpk", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "glpk", "row sense"); const double * siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "glpk", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "glpk", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "glpk", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "glpk", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "glpk", "right hand side"); const double * siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "glpk", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "glpk", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "glpk", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "glpk", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "glpk", "row range"); const CoinPackedMatrix * siC1mbr = siC1.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(siC1mbr != NULL, {}, "glpk", "matrix by row"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getMajorDim() == 5, return, "glpk", "matrix by row: major dim"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getNumElements() == 14, return, "glpk", "matrix by row: num elements"); const double * ev = siC1mbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4], 3.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3], 1.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1],-1.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0],-1.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 2.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 1.1), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], 2.8), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9],-1.2), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 5.6), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "glpk", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 1.9), {}, "glpk", "matrix by row: elements"); const CoinBigIndex * mi = siC1mbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "glpk", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "glpk", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "glpk", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "glpk", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "glpk", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "glpk", "matrix by row: vector starts"); const int * ei = siC1mbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 0, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 1, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 4, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 7, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 1, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 2, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 2, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 5, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 3, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 6, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 0, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 7, {}, "glpk", "matrix by row: indices"); OSIUNITTEST_ASSERT_WARNING(siC1rs == siC1.getRowSense(), {}, "glpk", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1rhs == siC1.getRightHandSide(), {}, "glpk", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1rr == siC1.getRowRange(), {}, "glpk", "row range"); // Change glpk Model by adding free row OsiRowCut rc; rc.setLb(-COIN_DBL_MAX); rc.setUb( COIN_DBL_MAX); OsiCuts cuts; cuts.insert(rc); siC1.applyCuts(cuts); // Since model was changed, test that cached data is now freed. OSIUNITTEST_ASSERT_ERROR(siC1.rowrange_ == NULL, {}, "glpk", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsense_ == NULL, {}, "glpk", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rhs_ == NULL, {}, "glpk", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByRow_ == NULL, {}, "glpk", "free cached data after adding row"); siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "glpk", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "glpk", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "glpk", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "glpk", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "glpk", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[5] == 'N', {}, "glpk", "row sense after adding row"); siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "glpk", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "glpk", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "glpk", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "glpk", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "glpk", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[5],0.0), {}, "glpk", "right hand side after adding row"); siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "glpk", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "glpk", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "glpk", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "glpk", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "glpk", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[5],0.0), {}, "glpk", "row range after adding row"); lhs = siC1; } // Test that lhs has correct values even though siC1 has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.rowrange_ == NULL, {}, "glpk", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsense_ == NULL, {}, "glpk", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rhs_ == NULL, {}, "glpk", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByRow_ == NULL, {}, "glpk", "freed origin after assignment"); const char * lhsrs = lhs.getRowSense(); OSIUNITTEST_ASSERT_ERROR(lhsrs[0] == 'G', {}, "glpk", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[1] == 'L', {}, "glpk", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[2] == 'E', {}, "glpk", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[3] == 'R', {}, "glpk", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[4] == 'R', {}, "glpk", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[5] == 'N', {}, "glpk", "row sense after assignment"); const double * lhsrhs = lhs.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[0],2.5), {}, "glpk", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[1],2.1), {}, "glpk", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[2],4.0), {}, "glpk", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[3],5.0), {}, "glpk", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[4],15.), {}, "glpk", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[5],0.0), {}, "glpk", "right hand side after assignment"); const double *lhsrr = lhs.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[0],0.0), {}, "glpk", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[1],0.0), {}, "glpk", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[2],0.0), {}, "glpk", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[3],5.0-1.8), {}, "glpk", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[4],15.0-3.0), {}, "glpk", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[5],0.0), {}, "glpk", "row range after assignment"); const CoinPackedMatrix * lhsmbr = lhs.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(lhsmbr != NULL, return, "glpk", "matrix by row after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getMajorDim() == 6, return, "glpk", "matrix by row after assignment: major dim"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getNumElements() == 14, return, "glpk", "matrix by row after assignment: num elements"); const double * ev = lhsmbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4], 3.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3], 1.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1],-1.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0],-1.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 2.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 1.1), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], 2.8), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9],-1.2), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 5.6), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "glpk", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 1.9), {}, "glpk", "matrix by row after assignment: elements"); const CoinBigIndex * mi = lhsmbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "glpk", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "glpk", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "glpk", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "glpk", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "glpk", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "glpk", "matrix by row after assignment: vector starts"); const int * ei = lhsmbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 0, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 1, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 4, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 7, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 1, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 2, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 2, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 5, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 3, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 6, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 0, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "glpk", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 7, {}, "glpk", "matrix by row after assignment: indices"); } } // Test add/delete columns { OsiGlpkSolverInterface m; std::string fn = mpsDir+"p0033"; m.readMps(fn.c_str(),"mps"); double inf = m.getInfinity(); CoinPackedVector c0; c0.insert(0, 4); c0.insert(1, 1); m.addCol(c0, 0, inf, 3); m.initialSolve(); double objValue = m.getObjValue(); CoinRelFltEq eq(1.0e-2); OSIUNITTEST_ASSERT_ERROR(eq(objValue,2520.57), {}, "glpk", "add/delete columns: first optimal value"); // Try deleting first column that's nonbasic at lower bound (0). int * d = new int[1]; CoinWarmStartBasis *cwsb = dynamic_cast(m.getWarmStart()) ; OSIUNITTEST_ASSERT_ERROR(cwsb != NULL, {}, "glpk", "add/delete columns: have warm start basis"); CoinWarmStartBasis::Status stati ; int iCol ; for (iCol = 0 ; iCol < cwsb->getNumStructural() ; iCol++) { stati = cwsb->getStructStatus(iCol) ; if (stati == CoinWarmStartBasis::atLowerBound) break ; } d[0]=iCol; m.deleteCols(1,d); delete [] d; delete cwsb; d=NULL; m.resolve(); objValue = m.getObjValue(); OSIUNITTEST_ASSERT_ERROR(eq(objValue,2520.57), {}, "glpk", "add/delete columns: optimal value after deleting nonbasic column"); // Try deleting column we added. If basic, go to initialSolve as deleting // basic variable trashes basis required for warm start. iCol = m.getNumCols()-1; cwsb = dynamic_cast(m.getWarmStart()) ; stati = cwsb->getStructStatus(iCol) ; delete cwsb; m.deleteCols(1,&iCol); if (stati == CoinWarmStartBasis::basic) { m.initialSolve() ; } else { m.resolve(); } objValue = m.getObjValue(); OSIUNITTEST_ASSERT_ERROR(eq(objValue,2520.57), {}, "glpk", "add/delete columns: optimal value after deleting added column"); } #if 0 // ??? Simplex routines not adapted to OsiGlpk yet // Solve an lp by hand { OsiGlpkSolverInterface m; std::string fn = mpsDir+"p0033"; m.readMps(fn.c_str(),"mps"); m.setObjSense(-1.0); m.getModelPtr()->messageHandler()->setLogLevel(4); m.initialSolve(); m.getModelPtr()->factorization()->maximumPivots(5); m.setObjSense(1.0); // enable special mode m.enableSimplexInterface(true); // we happen to know that variables are 0-1 and rows are L int numberIterations=0; int numberColumns = m.getNumCols(); int numberRows = m.getNumRows(); double * fakeCost = new double[numberColumns]; double * duals = new double [numberRows]; double * djs = new double [numberColumns]; const double * solution = m.getColSolution(); memcpy(fakeCost,m.getObjCoefficients(),numberColumns*sizeof(double)); while (1) { const double * dj; const double * dual; if ((numberIterations&1)==0) { // use given ones dj = m.getReducedCost(); dual = m.getRowPrice(); } else { // create dj = djs; dual = duals; m.getReducedGradient(djs,duals,fakeCost); } int i; int colIn=9999; int direction=1; double best=1.0e-6; // find most negative reduced cost // Should check basic - but should be okay on this problem for (i=0;ibest) { direction=-1; best=value; colIn=-i-1; } } for (i=0;ibest&&solution[i]>1.0-1.0e-6) { direction=-1; best=value; colIn=i; } } if (colIn==9999) break; // should be optimal int colOut; int outStatus; double theta; OSIUNITTEST_ASSERT_ERROR(m.primalPivotResult(colIn,direction,colOut,outStatus,theta,NULL) == 0, {}, "glpk", "simplex routines"); printf("out %d, direction %d theta %g\n", colOut,outStatus,theta); numberIterations++; } delete [] fakeCost; delete [] duals; delete [] djs; // exit special mode m.disableSimplexInterface(); m.getModelPtr()->messageHandler()->setLogLevel(4); m.resolve(); OSIUNITTEST_ASSERT_ERROR(m.getIterationCount() == 0, {}, "glpk", "simplex routines"); m.setObjSense(-1.0); m.initialSolve(); } // Solve an lp when interface is on { OsiGlpkSolverInterface m; std::string fn = mpsDir+"p0033"; m.readMps(fn.c_str(),"mps"); // enable special mode m.setHintParam(OsiDoScale,false,OsiHintDo); m.setHintParam(OsiDoPresolveInInitial,false,OsiHintDo); m.setHintParam(OsiDoDualInInitial,false,OsiHintDo); m.setHintParam(OsiDoPresolveInResolve,false,OsiHintDo); m.setHintParam(OsiDoDualInResolve,false,OsiHintDo); m.enableSimplexInterface(true); m.initialSolve(); } // Check tableau stuff when simplex interface is on { OsiGlpkSolverInterface m; /* Wolsey : Page 130 max 4x1 - x2 7x1 - 2x2 <= 14 x2 <= 3 2x1 - 2x2 <= 3 x1 in Z+, x2 >= 0 */ double inf_ = m.getInfinity(); int n_cols = 2; int n_rows = 3; double obj[2] = {-4.0, 1.0}; double collb[2] = {0.0, 0.0}; double colub[2] = {inf_, inf_}; double rowlb[3] = {-inf_, -inf_, -inf_}; double rowub[3] = {14.0, 3.0, 3.0}; int rowIndices[5] = {0, 2, 0, 1, 2}; int colIndices[5] = {0, 0, 1, 1, 1}; double elements[5] = {7.0, 2.0, -2.0, 1.0, -2.0}; CoinPackedMatrix M(true, rowIndices, colIndices, elements, 5); m.loadProblem(M, collb, colub, obj, rowlb, rowub); m.enableSimplexInterface(true); m.initialSolve(); //check that the tableau matches wolsey (B-1 A) // slacks in second part of binvA double * binvA = (double*) malloc((n_cols+n_rows) * sizeof(double)); printf("B-1 A"); for(int i = 0; i < n_rows; i++){ m.getBInvARow(i, binvA,binvA+n_cols); printf("\nrow: %d -> ",i); for(int j=0; j < n_cols+n_rows; j++){ printf("%g, ", binvA[j]); } } printf("\n"); m.disableSimplexInterface(); free(binvA); } #endif /* Read in exmip1 and solve it with verbose output setting. */ { OsiGlpkSolverInterface osi ; std::cout << "Boosting verbosity.\n" ; osi.setHintParam(OsiDoReducePrint,false,OsiForceDo) ; std::string exmpsfile = mpsDir+"exmip1" ; std::string probname ; std::cout << "Reading mps file \"" << exmpsfile << "\"\n" ; osi.readMps(exmpsfile.c_str(), "mps") ; OSIUNITTEST_ASSERT_ERROR(osi.getStrParam(OsiProbName,probname), {}, "glpk", "get problem name"); std::cout << "Solving " << probname << " ... \n" ; osi.initialSolve() ; double val = osi.getObjValue() ; std::cout << "And the answer is " << val << ".\n" ; OSIUNITTEST_ASSERT_ERROR(fabs(val - 3.23) < 0.01, {}, "glpk", "solve exmip1"); } // Do common solverInterface testing { OsiGlpkSolverInterface m; OsiSolverInterfaceCommonUnitTest(&m, mpsDir,netlibDir); } } #endif DyLP-1.10.4/Osi/test/OsiTestSolver.cpp0000644000175200017520000004334112101340333016050 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This file is licensed under the terms of Eclipse Public License (EPL). #include #include #include #include #include #include "OsiTestSolver.hpp" //############################################################################# /// Usage: v=w; where w is a VOL_dvector VOL_dvector& VOL_dvector::operator=(const VOL_dvector& w) { if (this == &w) return *this; delete[] v; const int wsz = w.size(); if (wsz == 0) { v = 0; sz = 0; } else { v = new double[sz = wsz]; for (int i = sz - 1; i >= 0; --i) v[i] = w[i]; } return *this; } /// Usage v=w; where w is a double. It copies w in every entry of v VOL_dvector& VOL_dvector::operator=(const double w) { for (int i = sz - 1; i >= 0; --i) v[i] = w; return *this; } //############################################################################# /// Usage: v=w; where w is a VOL_ivector VOL_ivector& VOL_ivector::operator=(const VOL_ivector& w) { if (this == &w) return *this; delete[] v; const int wsz = w.size(); if (wsz == 0) { v = 0; sz = 0; } else { v = new int[sz = wsz]; for (int i = sz - 1; i >= 0; --i) v[i] = w[i]; } return *this; } /// Usage v=w; where w is an int. It copies w in every entry of v VOL_ivector& VOL_ivector::operator=(const int w) { for (int i = sz - 1; i >= 0; --i) v[i] = w; return *this; } //############################################################################ /// find maximum absolute value of the primal violations void VOL_primal::find_max_viol(const VOL_dvector& dual_lb, const VOL_dvector& dual_ub) { const int nc = v.size(); viol = 0; for ( int i = 0; i < nc; ++i ) { if ( (v[i] > 0.0 && dual_ub[i] != 0.0) || (v[i] < 0.0 && dual_lb[i] != 0.0) ) viol = VolMax(viol, VolAbs(v[i])); } } //############################################################################ /// Dual step. It takes a step in the direction v // lcost is a member of VOL_dual void VOL_dual::step(const double target, const double lambda, const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_dvector& v) { const int nc = u.size(); int i; double viol = 0.0; for (i = 0; i < nc; ++i) { if (( v[i] > 0.0 && u[i] < dual_ub[i] ) || ( v[i] < 0.0 && u[i] > dual_lb[i] )) { viol += v[i] * v[i]; } } const double stp = viol == 0.0 ? 0.0 : (target - lcost) / viol * lambda; for (i = 0; i < nc; ++i) { if (( v[i] > 0.0 && u[i] < dual_ub[i] ) || ( v[i] < 0.0 && u[i] > dual_lb[i] )) { u[i] += stp * v[i]; if (u[i] < dual_lb[i]) u[i] = dual_lb[i]; else if (u[i] > dual_ub[i]) u[i] = dual_ub[i]; } } } /// ascent = inner product(v, u - last_u) double VOL_dual::ascent(const VOL_dvector& v, const VOL_dvector& last_u) const { const int nc = u.size(); int i; double asc = 0.0; for (i = 0; i < nc; ++i) asc += v[i] * (u[i] - last_u[i]); return asc; } /** compute xrc. This is (c - u A) * ( xstar - x ). This is just miscellaneous information, it is not used in the algorithm. */ void VOL_dual::compute_xrc(const VOL_dvector& xstar, const VOL_dvector& x, const VOL_dvector& rc) { const int nc = x.size(); xrc = 0; for (int i = 0; i < nc; ++i) { xrc += rc[i] * (xstar[i] - x[i]); } } //############################################################################ /** Computing inner products. It computes v * ( alpha v + (1-alpha) h), v * h, v * v, h * h. Here v is the subgradient direction, and h is the conjugate direction. */ VOL_vh::VOL_vh(const double alpha, const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_dvector& v, const VOL_dvector& vstar, const VOL_dvector& u) : hh(0), norm(0), vh(0), asc(0) { int i; const int nc = vstar.size(); double vv; for (i = 0; i < nc; ++i) { const double vi = v[i]; const double vsi = vstar[i]; vv = alpha * vi + (1.0 - alpha) * vsi; if (u[i] == 0.0 && dual_lb[i] == 0.0 && vv <= 0.0) continue; if (u[i] == 0.0 && dual_ub[i] == 0.0 && vv >= 0.0) continue; asc += vi * vv; vh += vi * vsi; norm += vi * vi; hh += vsi * vsi; } } //############################################################################ /** Computes indicators for printing. They are v2=vstar * vstar, asc= v*v, vu= vstar * u, vabs = sum( abs(vstar[i]))/m, v2= sum( vstar[i]^2) / m. */ VOL_indc::VOL_indc(const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual) { v2 = vu = vabs = asc = 0.0; const VOL_dvector v = primal.v; const VOL_dvector vstar = pstar.v; const VOL_dvector u = dual.u; int i; const int nc = vstar.size(); for (i = 0; i < nc; ++i) { if (u[i] == 0.0 && dual_lb[i] == 0.0 && vstar[i] <= 0.0) continue; if (u[i] == 0.0 && dual_ub[i] == 0.0 && vstar[i] >= 0.0) continue; v2 += vstar[i] * vstar[i]; asc += v[i] * v[i]; vu -= vstar[i] * u[i]; vabs += VolAbs(vstar[i]); } v2 = sqrt(v2) / nc; vabs /= nc; } //############################################################################ // reading parameters that control the algorithm void VOL_problem::read_params(const char* filename) { char s[100]; FILE* infile = fopen(filename, "r"); if (!infile) { printf("Failure to open file: %s\n", filename); abort(); } while (fgets(s, 100, infile)) { const size_t len = strlen(s) - 1; if (s[len] == '\n') s[len] = 0; std::string ss(s); if (ss.find("temp_dualfile") == 0) { size_t i = ss.find("="); size_t i1 = ss.length()-i-1; std::string sss = ss.substr(i+1,i1); parm.temp_dualfile = new char[sss.length() + 1]; memcpy(parm.temp_dualfile, sss.c_str(), sss.length()); parm.temp_dualfile[sss.length()] = 0; } else if (ss.find("ubinit") == 0) { size_t i = ss.find("="); parm.ubinit = atof(&s[i+1]); } else if (ss.find("printflag") == 0) { size_t i = ss.find("="); parm.printflag = atoi(&s[i+1]); } else if (ss.find("printinvl") == 0) { size_t i = ss.find("="); parm.printinvl = atoi(&s[i+1]); } else if (ss.find("maxsgriters") == 0) { size_t i = ss.find("="); parm.maxsgriters = atoi(&s[i+1]); } else if (ss.find("heurinvl") == 0) { size_t i = ss.find("="); parm.heurinvl = atoi(&s[i+1]); } else if (ss.find("greentestinvl") == 0) { size_t i = ss.find("="); parm.greentestinvl = atoi(&s[i+1]); } else if (ss.find("yellowtestinvl") == 0) { size_t i = ss.find("="); parm.yellowtestinvl = atoi(&s[i+1]); } else if (ss.find("redtestinvl") == 0) { size_t i = ss.find("="); parm.redtestinvl = atoi(&s[i+1]); } else if (ss.find("lambdainit") == 0) { size_t i = ss.find("="); parm.lambdainit = atof(&s[i+1]); } else if (ss.find("alphainit") == 0) { size_t i = ss.find("="); parm.alphainit = atof(&s[i+1]); } else if (ss.find("alphamin") == 0) { size_t i = ss.find("="); parm.alphamin = atof(&s[i+1]); } else if (ss.find("alphafactor") == 0) { size_t i = ss.find("="); parm.alphafactor = atof(&s[i+1]); } else if (ss.find("alphaint") == 0) { size_t i = ss.find("="); parm.alphaint = atoi(&s[i+1]); } else if (ss.find("primal_abs_precision") == 0) { size_t i = ss.find("="); parm.primal_abs_precision = atof(&s[i+1]); // } else if (ss.find("primal_rel_precision") == 0) { // size_t i = ss.find("="); // parm.primal_rel_precision = atof(&s[i+1]); } else if (ss.find("gap_abs_precision") == 0) { size_t i = ss.find("="); parm.gap_abs_precision = atof(&s[i+1]); } else if (ss.find("gap_rel_precision") == 0) { size_t i = ss.find("="); parm.gap_rel_precision = atof(&s[i+1]); } else if (ss.find("ascent_check_invl") == 0) { size_t i = ss.find("="); parm.ascent_check_invl = atoi(&s[i+1]); } else if (ss.find("minimum_rel_ascent") == 0) { size_t i = ss.find("="); parm.minimum_rel_ascent = atoi(&s[i+1]); } else if (ss.find("granularity") == 0) { size_t i = ss.find("="); parm.granularity = atof(&s[i+1]); } } fclose(infile); } //############################################################################# void VOL_problem::set_default_parm() { parm.lambdainit = 0.1; parm.alphainit = 0.01; parm.alphamin = 0.001; parm.alphafactor = 0.5; parm.ubinit = COIN_DBL_MAX; parm.primal_abs_precision = 0.02; // parm.primal_rel_precision = 0.01; parm.gap_abs_precision = 0.0; parm.gap_rel_precision = 0.001; parm.granularity = 0.0; parm.minimum_rel_ascent = 0.0001; parm.ascent_first_check = 500; parm.ascent_check_invl = 100; parm.maxsgriters = 2000; parm.printflag = 3; parm.printinvl = 50; parm.heurinvl = 100000000; parm.greentestinvl = 1; parm.yellowtestinvl = 2; parm.redtestinvl = 10; parm.alphaint = 80; parm.temp_dualfile = 0; } //############################################################################# VOL_problem::VOL_problem() : alpha_(-1), lambda_(-1), iter_(0), value(-1), psize(-1), dsize(-1) { set_default_parm(); } // VOL_problem::VOL_problem(const char *filename) : alpha_(-1), lambda_(-1), iter_(0), value(-1), psize(-1), dsize(-1) { set_default_parm(); read_params(filename); } //###################################################################### VOL_problem::~VOL_problem() { delete[] parm.temp_dualfile; } //###################################################################### /// print information about the current iteration void VOL_problem::print_info(const int iter, const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual) { VOL_indc indc(dual_lb, dual_ub, primal, pstar, dual); printf("%i. L=%f P=%f vu=%f infeas=%f\n asc=%f vmax=%f P-vu=%f xrc =%f\n", iter, dual.lcost, pstar.value, indc.vu, indc.v2, indc.asc, pstar.viol, pstar.value - indc.vu, dual.xrc); } //###################################################################### /// this is the Volume Algorithm int VOL_problem::solve(VOL_user_hooks& hooks, const bool use_preset_dual) { if (initialize(use_preset_dual) < 0) // initialize several parameters return -1; double best_ub = parm.ubinit; // upper bound int retval = 0; VOL_dvector rc(psize); // reduced costs VOL_dual dual(dsize); // dual vector dual.u = dsol; VOL_primal primal(psize, dsize); // primal vector retval = hooks.compute_rc(dual.u, rc); // compute reduced costs if (retval < 0) return -1; // solve relaxed problem retval = hooks.solve_subproblem(dual.u, rc, dual.lcost, primal.x, primal.v, primal.value); if (retval < 0) return -1; // set target for the lagrangian value double target = readjust_target(-COIN_DBL_MAX/2, dual.lcost); // find primal violation primal.find_max_viol(dual_lb, dual_ub); // this may be left out for speed VOL_primal pstar(primal); // set pstar=primal pstar.find_max_viol(dual_lb, dual_ub); // set violation of pstar dual.compute_xrc(pstar.x, primal.x, rc); // compute xrc // VOL_dual dstar(dual); // dstar is the best dual solution so far VOL_dual dlast(dual); // set dlast=dual iter_ = 0; if (parm.printflag) print_info(iter_, primal, pstar, dual); VOL_swing swing; VOL_alpha_factor alpha_factor; double * lcost_sequence = new double[parm.ascent_check_invl]; const int ascent_first_check = VolMax(parm.ascent_first_check, parm.ascent_check_invl); for (iter_ = 1; iter_ <= parm.maxsgriters; ++iter_) { // main iteration dlast = dual; // take a dual step dual.step(target, lambda_, dual_lb, dual_ub, pstar.v); // compute reduced costs retval = hooks.compute_rc(dual.u, rc); if (retval < 0) break; // solve relaxed problem retval = hooks.solve_subproblem(dual.u, rc, dual.lcost, primal.x, primal.v, primal.value); if (retval < 0) break; // set the violation of primal primal.find_max_viol(dual_lb, dual_ub); // this may be left out for speed dual.compute_xrc(pstar.x, primal.x, rc); // compute xrc if (dual.lcost > dstar.lcost) { dstar = dual; // update dstar } // check if target should be updated target = readjust_target(target, dstar.lcost); // compute inner product between the new subgradient and the // last direction. This to decide among green, yellow, red const double ascent = dual.ascent(primal.v, dlast.u); // green, yellow, red swing.cond(dlast, dual.lcost, ascent, iter_); // change lambda if needed lambda_ *= swing.lfactor(parm, lambda_, iter_); if (iter_ % parm.alphaint == 0) { // change alpha if needed const double fact = alpha_factor.factor(parm, dstar.lcost, alpha_); if (fact != 1.0 && (parm.printflag & 2)) { printf(" ------------decreasing alpha to %f\n", alpha_*fact); } alpha_ *= fact; } // convex combination with new primal vector pstar.cc(power_heur(primal, pstar, dual), primal); pstar.find_max_viol(dual_lb, dual_ub); // find maximum violation of pstar if (swing.rd) dual = dstar; // if there is no improvement reset dual=dstar if ((iter_ % parm.printinvl == 0) && parm.printflag) { // printing iteration information print_info(iter_, primal, pstar, dual); swing.print(); } if (iter_ % parm.heurinvl == 0) { // run primal heuristic double ub = COIN_DBL_MAX; retval = hooks.heuristics(*this, pstar.x, ub); if (retval < 0) break; if (ub < best_ub) best_ub = ub; } // save dual solution every 500 iterations if (iter_ % 500 == 0 && parm.temp_dualfile != 0) { FILE* outfile = fopen(parm.temp_dualfile, "w"); const VOL_dvector& u = dstar.u; const int m = u.size(); for (int i = 0; i < m; ++i) { fprintf(outfile, "%i %f\n", i+1, u[i]); } fclose(outfile); } // test terminating criteria const bool primal_feas = (pstar.viol < parm.primal_abs_precision); //const double gap = VolAbs(pstar.value - dstar.lcost); const double gap = pstar.value - dstar.lcost; const bool small_gap = VolAbs(dstar.lcost) < 0.0001 ? (gap < parm.gap_abs_precision) : ( (gap < parm.gap_abs_precision) || (gap/VolAbs(dstar.lcost) < parm.gap_rel_precision) ); // test optimality if (primal_feas && small_gap){ if (parm.printflag) printf(" small lp gap \n"); break; } // test proving integer optimality if (best_ub - dstar.lcost < parm.granularity){ if (parm.printflag) printf(" small ip gap \n"); break; } // test for non-improvement const int k = iter_ % parm.ascent_check_invl; if (iter_ > ascent_first_check) { if (dstar.lcost - lcost_sequence[k] < VolAbs(lcost_sequence[k]) * parm.minimum_rel_ascent){ if (parm.printflag) printf(" small improvement \n"); break; } } lcost_sequence[k] = dstar.lcost; } delete[] lcost_sequence; if (parm.printflag) print_info(iter_, primal, pstar, dual); // set solution to return value = dstar.lcost; psol = pstar.x; dsol = dstar.u; viol = pstar.v; return retval; } /// A function to initialize a few variables int VOL_problem::initialize(const bool use_preset_dual) { // setting bounds for dual variables if (dual_lb.size() > 0) { if (dual_lb.size() != dsize) { printf("size inconsistent (dual_lb)\n"); return -1; } } else { // fill it with -infinity dual_lb.allocate(dsize); dual_lb = - COIN_DBL_MAX; } if (dual_ub.size() > 0) { if (dual_ub.size() != dsize) { printf("size inconsistent (dual_ub)\n"); return -1; } } else { // fill it with infinity dual_ub.allocate(dsize); dual_ub = COIN_DBL_MAX; } // setting initial values for parameters alpha_ = parm.alphainit; lambda_ = parm.lambdainit; // check if there is an initial dual solution if (use_preset_dual) { if (dsol.size() != dsize) { printf("size inconsistent (dsol)\n"); return -1; } } else { dsol.clear(); dsol.allocate(dsize); dsol = 0.0; } return 0; } /// Here we increase the target once we get within 5% of it double VOL_problem::readjust_target(const double oldtarget, const double lcost) const { double target = oldtarget; if (lcost >= target - VolAbs(target) * 0.05) { if (VolAbs(lcost) < 10.0) { target = 10.0; } else { target += 0.025 * VolAbs(target); target = VolMax(target, lcost + 0.05 * VolAbs(lcost)); } if (target != oldtarget && (parm.printflag & 2)) { printf(" **** readjusting target!!! new target = %f *****\n", target); } } return target; } /** Here we decide the value of alpha_fb to be used in the convex combination. More details of this are in doc.ps IN: alpha, primal, pstar, dual OUT: pstar = alpha_fb * pstar + (1 - alpha_fb) * primal */ double VOL_problem::power_heur(const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual) const { const double alpha = alpha_; VOL_vh prod(alpha, dual_lb, dual_ub, primal.v, pstar.v, dual.u); double a_asc = (alpha * prod.norm - prod.vh) / (prod.norm - prod.vh); double alpha_fb; if (prod.norm + prod.hh - 2.0 * prod.vh > 0.0) alpha_fb = (prod.hh - prod.vh) / (prod.norm + prod.hh - 2.0 * prod.vh); else alpha_fb = alpha; if (alpha_fb > alpha) alpha_fb = alpha; if (alpha_fb < a_asc) alpha_fb = a_asc; if (alpha_fb > 1.0) alpha_fb = alpha; if (alpha_fb < 0.0) alpha_fb = alpha / 10.0; return alpha_fb; } DyLP-1.10.4/Osi/test/OsiTestSolverInterface.cpp0000644000175200017520000011402711510425067017704 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This file is licensed under the terms of Eclipse Public License (EPL). // this is a copy of OsiVolSolverInterface (trunk rev. 1466) renamed to OsiTestSolverInterface #include "CoinPragma.hpp" #include #include #include #include #include "CoinHelperFunctions.hpp" #include "CoinWarmStartDual.hpp" #include "OsiTestSolverInterface.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" //####################################################################### // Private helper methods //####################################################################### void OsiTestSolverInterface::updateRowMatrix_() const { if (! rowMatrixCurrent_) { rowMatrix_.reverseOrderedCopyOf(colMatrix_); rowMatrixCurrent_ = true; } } void OsiTestSolverInterface::updateColMatrix_() const { if (! colMatrixCurrent_) { colMatrix_.reverseOrderedCopyOf(rowMatrix_); colMatrixCurrent_ = true; } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::checkData_() const { int i; for (i = getNumRows() - 1; i >= 0; --i) { if (rowlower_[i] > -1.0e20 && rowupper_[i] < 1.0e20 && rowlower_[i] != rowupper_[i]) throw CoinError("Volume algorithm is unable to handle ranged rows", "checkData_", "OsiTestSolverInterface"); } for (i = getNumCols() - 1; i >= 0; --i) { if (collower_[i] < -1.0e20 || colupper_[i] > 1.0e20) throw CoinError("Volume algorithm is unable to handle infinite bounds", "checkData_", "OsiTestSolverInterface"); } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::compute_rc_(const double* u, double* rc) const { if (isZeroOneMinusOne_) { rowMatrixOneMinusOne_->timesMajor(u, rc); } else { rowMatrix_.transposeTimes(u, rc); } const int psize = getNumCols(); std::transform(rc, rc+psize, objcoeffs_, rc, std::minus()); std::transform(rc, rc+psize, rc, std::negate()); } //############################################################################# bool OsiTestSolverInterface::test_zero_one_minusone_(const CoinPackedMatrix& m) const { const int vecnum = m.getMajorDim(); const double* elem = m.getElements(); const int* start = m.getVectorStarts(); const int* length = m.getVectorLengths(); int i, j; for (i = 0; i < vecnum; ++i) { for (j = start[i] + length[i] - 1; j >= start[i]; --j) { const double val = elem[j]; if (val != 1.0 && val != 0.0 && val != -1.0) { return false; } } } return true; } //----------------------------------------------------------------------------- OsiTestSolverInterface::OsiVolMatrixOneMinusOne_:: OsiVolMatrixOneMinusOne_(const CoinPackedMatrix& m) { const int major = m.getMajorDim(); const double* elem = m.getElements(); const int* ind = m.getIndices(); const int* start = m.getVectorStarts(); const int* length = m.getVectorLengths(); majorDim_ = major; minorDim_ = m.getMinorDim(); plusSize_ = 0; minusSize_ = 0; int i, j; for (i = 0; i < major; ++i) { for (j = start[i] + length[i] - 1; j >= start[i]; --j) { const double val = elem[j]; if (val == 1.0) { ++plusSize_; } else if (val == -1.0) { ++minusSize_; } } } if (plusSize_ > 0) { plusInd_ = new int[plusSize_]; } if (minusSize_ > 0) { minusInd_ = new int[minusSize_]; } plusStart_ = new int[major]; plusLength_ = new int[major]; minusStart_ = new int[major]; minusLength_ = new int[major]; plusSize_ = 0; minusSize_ = 0; for (i = 0; i < major; ++i) { plusStart_[i] = plusSize_; minusStart_[i] = minusSize_; const int last = start[i] + length[i]; for (j = start[i]; j < last; ++j) { const double val = elem[j]; if (val == 1.0) { plusInd_[plusSize_++] = ind[j]; } else if (val == -1.0) { minusInd_[minusSize_++] = ind[j]; } } plusLength_[i] = plusSize_ - plusStart_[i]; minusLength_[i] = minusSize_ - minusStart_[i]; } if (plusSize_ == 0) { delete[] plusStart_; plusStart_ = NULL; delete[] plusLength_; plusLength_ = NULL; } if (minusSize_ == 0) { delete[] minusStart_; minusStart_ = NULL; delete[] minusLength_; minusLength_ = NULL; } } //----------------------------------------------------------------------------- OsiTestSolverInterface::OsiVolMatrixOneMinusOne_:: ~OsiVolMatrixOneMinusOne_() { if (plusSize_ > 0) { delete[] plusInd_; plusInd_ = NULL; delete[] plusStart_; plusStart_ = NULL; delete[] plusLength_; plusLength_ = NULL; } if (minusSize_ > 0) { delete[] minusInd_; minusInd_ = NULL; delete[] minusStart_; minusStart_ = NULL; delete[] minusLength_; minusLength_ = NULL; } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::OsiVolMatrixOneMinusOne_:: timesMajor(const double* x, double* y) const { memset(y, 0, minorDim_ * sizeof(double)); int i; if (plusSize_ > 0 && minusSize_ > 0) { for (i = majorDim_ - 1; i >= 0; --i) { const double x_i = x[i]; if (x_i != 0.0) { const int* vecInd = plusInd_ + plusStart_[i]; int j; for ( j = plusLength_[i] - 1; j >= 0; --j) y[vecInd[j]] += x_i; vecInd = minusInd_ + minusStart_[i]; for ( j = minusLength_[i] - 1; j >= 0; --j) y[vecInd[j]] -= x_i; } } return; } if (plusSize_ > 0) { for (i = majorDim_ - 1; i >= 0; --i) { const double x_i = x[i]; if (x_i != 0.0) { const int* vecInd = plusInd_ + plusStart_[i]; for (int j = plusLength_[i] - 1; j >= 0; --j) y[vecInd[j]] += x_i; } } return; } if (minusSize_ > 0) { for (i = majorDim_ - 1; i >= 0; --i) { const double x_i = x[i]; if (x_i != 0.0) { const int* vecInd = minusInd_ + minusStart_[i]; for (int j = minusLength_[i] - 1; j >= 0; --j) y[vecInd[j]] -= x_i; } } return; } } //############################################################################# void OsiTestSolverInterface::gutsOfDestructor_() { rowMatrix_.clear(); colMatrix_.clear(); rowMatrixCurrent_ = true; colMatrixCurrent_ = true; delete[] colupper_; colupper_ = 0; delete[] collower_; collower_ = 0; delete[] continuous_; continuous_ = 0; delete[] rowupper_; rowupper_ = 0; delete[] rowlower_; rowlower_ = 0; delete[] rowsense_; rowsense_ = 0; delete[] rhs_; rhs_ = 0; delete[] rowrange_; rowrange_ = 0; delete[] objcoeffs_; objcoeffs_ = 0; delete[] colsol_; colsol_ = 0; delete[] rowprice_; rowprice_ = 0; delete[] rowpriceHotStart_; rowpriceHotStart_ = 0; delete[] rc_; rc_ = 0; delete[] lhs_; lhs_ = 0; lagrangeanCost_ = 0.0; maxNumrows_ = 0; maxNumcols_ = 0; } //############################################################################# void OsiTestSolverInterface::rowRimAllocator_() { rowupper_ = new double[maxNumrows_]; rowlower_ = new double[maxNumrows_]; rowsense_ = new char[maxNumrows_]; rhs_ = new double[maxNumrows_]; rowrange_ = new double[maxNumrows_]; rowprice_ = new double[maxNumrows_]; lhs_ = new double[maxNumrows_]; } //----------------------------------------------------------------------------- void OsiTestSolverInterface::colRimAllocator_() { colupper_ = new double[maxNumcols_]; collower_ = new double[maxNumcols_]; continuous_ = new bool[maxNumcols_]; objcoeffs_ = new double[maxNumcols_]; colsol_ = new double[maxNumcols_]; rc_ = new double[maxNumcols_]; } //----------------------------------------------------------------------------- void OsiTestSolverInterface::rowRimResize_(const int newSize) { if (newSize > maxNumrows_) { double* rub = rowupper_; double* rlb = rowlower_; char* sense = rowsense_; double* right = rhs_; double* range = rowrange_; double* dual = rowprice_; double* left = lhs_; maxNumrows_ = CoinMax(1000, (newSize * 5) / 4); rowRimAllocator_(); const int rownum = getNumRows(); CoinDisjointCopyN(rub , rownum, rowupper_); CoinDisjointCopyN(rlb , rownum, rowlower_); CoinDisjointCopyN(sense, rownum, rowsense_); CoinDisjointCopyN(right, rownum, rhs_); CoinDisjointCopyN(range, rownum, rowrange_); CoinDisjointCopyN(dual , rownum, rowprice_); CoinDisjointCopyN(left , rownum, lhs_); delete[] rub; delete[] rlb; delete[] sense; delete[] right; delete[] range; delete[] dual; delete[] left; } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::colRimResize_(const int newSize) { if (newSize > maxNumcols_) { double* cub = colupper_; double* clb = collower_; bool* cont = continuous_; double* obj = objcoeffs_; double* sol = colsol_; double* rc = rc_; maxNumcols_ = CoinMax(1000, (newSize * 5) / 4); colRimAllocator_(); const int colnum = getNumCols(); CoinDisjointCopyN(cub , colnum, colupper_); CoinDisjointCopyN(clb , colnum, collower_); CoinDisjointCopyN(cont, colnum, continuous_); CoinDisjointCopyN(obj , colnum, objcoeffs_); CoinDisjointCopyN(sol , colnum, colsol_); CoinDisjointCopyN(rc , colnum, rc_); delete[] cub; delete[] clb; delete[] cont; delete[] obj; delete[] sol; delete[] rc; } } //############################################################################# void OsiTestSolverInterface::convertBoundsToSenses_() { for (int i = getNumRows() - 1; i >= 0; --i ) { convertBoundToSense(rowlower_[i], rowupper_[i], rowsense_[i], rhs_[i], rowrange_[i]); } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::convertSensesToBounds_() { for (int i = getNumRows() - 1; i >= 0; --i) { convertSenseToBound(rowsense_[i], rhs_[i], rowrange_[i], rowlower_[i], rowupper_[i]); } } //############################################################################# // Here are the routines implementing the virtual methods inherited from // VOL_user_hooks. //############################################################################# int OsiTestSolverInterface::compute_rc(const VOL_dvector& u, VOL_dvector& rc) { compute_rc_(u.v, rc.v); return 0; } //----------------------------------------------------------------------- int OsiTestSolverInterface::solve_subproblem(const VOL_dvector& dual, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector& v, double& pcost) { int i; const int psize = x.size(); for (i = 0; i < psize; ++i) { x[i] = (rc[i] >= 0.0) ? collower_[i] : colupper_[i]; } const int dsize = v.size(); lcost = (std::inner_product(rhs_, rhs_ + dsize, dual.v, 0.0) + std::inner_product(x.v, x.v + psize, rc.v, 0.0) ); if (isZeroOneMinusOne_) { colMatrixOneMinusOne_->timesMajor(x.v, v.v); } else { colMatrix_.times(x.v, v.v); } std::transform(v.v, v.v+dsize, rhs_, v.v, std::minus()); std::transform(v.v, v.v+dsize, v.v, std::negate()); pcost = std::inner_product(x.v, x.v + psize, objcoeffs_, 0.0); return 0; } //############################################################################# // Solve methods //############################################################################# void OsiTestSolverInterface::initialSolve() { // set every entry to 0.0 in the dual solution CoinFillN(rowprice_, getNumRows(), 0.0); resolve(); } //----------------------------------------------------------------------------- void OsiTestSolverInterface::resolve() { int i; checkData_(); // Only one of these can do any work updateRowMatrix_(); updateColMatrix_(); const int dsize = getNumRows(); const int psize = getNumCols(); // Negate the objective coefficients if necessary if (objsense_ < 0) { std::transform(objcoeffs_, objcoeffs_+psize, objcoeffs_, std::negate()); } // Set the lb/ub on the duals volprob_.dual_lb.allocate(dsize); volprob_.dual_ub.allocate(dsize); double * dlb = volprob_.dual_lb.v; double * dub = volprob_.dual_ub.v; for (i = 0; i < dsize; ++i) { dlb[i] = rowupper_[i] < getInfinity() ? -1.0e31 : 0.0; dub[i] = rowlower_[i] > -getInfinity() ? 1.0e31 : 0.0; } volprob_.dsize = dsize; volprob_.psize = psize; // Set the dual starting point VOL_dvector& dsol = volprob_.dsol; dsol.allocate(dsize); std::transform(rowprice_, rowprice_+dsize, dsol.v, std::bind2nd(std::multiplies(), objsense_)); // adjust the dual vector (if necessary) to be sure it's feasible double * dv = dsol.v; for (i = 0; i < dsize; ++i) { if (dv[i] < dlb[i]) { dv[i] = dlb[i]; } else if (dv[i] > dub[i]) { dv[i] = dub[i]; } } // If requested, check whether the matrix contains anything but 0/1/-1 #if 0 isZeroOneMinusOne_ = false; #else isZeroOneMinusOne_ = test_zero_one_minusone_(colMatrix_); if (isZeroOneMinusOne_) { colMatrixOneMinusOne_ = new OsiVolMatrixOneMinusOne_(colMatrix_); rowMatrixOneMinusOne_ = new OsiVolMatrixOneMinusOne_(rowMatrix_); } #endif volprob_.solve(*this, true); // extract the solution // the lower bound on the objective value lagrangeanCost_ = objsense_ * volprob_.value; // the primal solution CoinDisjointCopyN(volprob_.psol.v, psize, colsol_); // Reset the objective coefficients if necessary if (objsense_ < 0) { std::transform(objcoeffs_, objcoeffs_ + psize, objcoeffs_, std::negate()); // also, multiply the dual solution by -1 std::transform(volprob_.dsol.v, volprob_.dsol.v+dsize, rowprice_, std::negate()); } else { // now we just have to copy the dual CoinDisjointCopyN(volprob_.dsol.v, dsize, rowprice_); } // Compute the reduced costs compute_rc_(rowprice_, rc_); // Compute the left hand side (row activity levels) if (isZeroOneMinusOne_) { colMatrixOneMinusOne_->timesMajor(colsol_, lhs_); } else { colMatrix_.times(colsol_, lhs_); } if (isZeroOneMinusOne_) { delete colMatrixOneMinusOne_; colMatrixOneMinusOne_ = NULL; delete rowMatrixOneMinusOne_; rowMatrixOneMinusOne_ = NULL; } } //############################################################################# // Parameter related methods //############################################################################# bool OsiTestSolverInterface::setIntParam(OsiIntParam key, int value) { switch (key) { case OsiMaxNumIteration: if (value < 0) return false; volprob_.parm.maxsgriters = value; break; case OsiMaxNumIterationHotStart: if (value < 0) return false; OsiSolverInterface::setIntParam(key, value); break; case OsiLastIntParam: return false; default: return false; } return true; } //----------------------------------------------------------------------------- bool OsiTestSolverInterface::setDblParam(OsiDblParam key, double value) { switch (key) { case OsiDualObjectiveLimit: volprob_.parm.ubinit = value; break; case OsiPrimalObjectiveLimit: // not applicable return false; case OsiDualTolerance: // only ~0 is applicable, so accept only 1e-50 ... return (value == 1e-50); case OsiPrimalTolerance: if (value < 1e-04 || value > 1e-1) return false; volprob_.parm.primal_abs_precision = value; break; case OsiObjOffset: return OsiSolverInterface::setDblParam(key, value); case OsiLastDblParam: return false; default: return false; } return true; } //----------------------------------------------------------------------------- bool OsiTestSolverInterface::setStrParam(OsiStrParam key, const std::string & value) { bool retval=false; switch (key) { case OsiSolverName: return false; case OsiProbName: OsiSolverInterface::setStrParam(key,value); return retval = true; case OsiLastStrParam: return false; default: return false; } return false; } //----------------------------------------------------------------------------- bool OsiTestSolverInterface::getIntParam(OsiIntParam key, int& value) const { switch (key) { case OsiMaxNumIteration: value = volprob_.parm.maxsgriters; break; case OsiMaxNumIterationHotStart: OsiSolverInterface::getIntParam(key, value); break; case OsiLastIntParam: return false; default: return false; } return true; } //----------------------------------------------------------------------------- bool OsiTestSolverInterface::getDblParam(OsiDblParam key, double& value) const { switch (key) { case OsiDualObjectiveLimit: value = volprob_.parm.ubinit; break; case OsiPrimalObjectiveLimit: // not applicable return false; case OsiDualTolerance: // not applicable, but must return almost 0 value = 1e-50; break; case OsiPrimalTolerance: value = volprob_.parm.primal_abs_precision; break; case OsiObjOffset: OsiSolverInterface::getDblParam(key, value); break; case OsiLastDblParam: return false; default: return false; } return true; } //----------------------------------------------------------------------------- bool OsiTestSolverInterface::getStrParam(OsiStrParam key, std::string & value) const { switch (key) { case OsiProbName: OsiSolverInterface::getStrParam(key, value); return true; case OsiSolverName: value = "vol"; return true; case OsiLastStrParam: return false; default: return false; } return false; } //############################################################################# // Methods returning info on how the solution process terminated //############################################################################# bool OsiTestSolverInterface::isAbandoned() const { // *THINK*: see the *THINK* in isProvenOptimal() return false; } bool OsiTestSolverInterface::isProvenOptimal() const { // if exited before reaching the iteration limit it is declared optimal // *THINK*: Granted, it can exit because the dual value is not improving. // *THINK*: Should that be "abandoned"? But then it'll be abandoned way too // *THINK*: frequently... return (! isDualObjectiveLimitReached() && volprob_.iter() < volprob_.parm.maxsgriters); } bool OsiTestSolverInterface::isProvenPrimalInfeasible() const { // LL: *FIXME* : at the moment the volume can't detect primal infeasibility. // LL: *FIXME* : The dual will go to infinity. return false; } bool OsiTestSolverInterface::isProvenDualInfeasible() const { // LL: *FIXME* : at the moment the volume assumes dual feasibility... return false; } bool OsiTestSolverInterface::isPrimalObjectiveLimitReached() const { // The volume algorithm doesn't know anything about the primal; only the // dual is monotone return false; } bool OsiTestSolverInterface::isDualObjectiveLimitReached() const { return volprob_.parm.ubinit - volprob_.value < volprob_.parm.granularity; } bool OsiTestSolverInterface::isIterationLimitReached() const { return volprob_.iter() >= volprob_.parm.maxsgriters; } //############################################################################# // WarmStart related methods //############################################################################# CoinWarmStart* OsiTestSolverInterface::getEmptyWarmStart () const { return (dynamic_cast(new CoinWarmStartDual())) ; } CoinWarmStart* OsiTestSolverInterface::getWarmStart() const { return new CoinWarmStartDual(getNumRows(), rowprice_); } //----------------------------------------------------------------------------- bool OsiTestSolverInterface::setWarmStart(const CoinWarmStart* warmstart) { const CoinWarmStartDual* ws = dynamic_cast(warmstart); if (! ws) return false; const int ws_size = ws->size(); if (ws_size != getNumRows() && ws_size != 0) { throw CoinError("wrong dual warmstart size", "setWarmStart", "OsiTestSolverInterface"); } CoinDisjointCopyN(ws->dual(), ws_size, rowprice_); return true; } //############################################################################# // HotStart related methods //############################################################################# void OsiTestSolverInterface::markHotStart() { delete[] rowpriceHotStart_; rowpriceHotStart_ = new double[getNumRows()]; CoinDisjointCopyN(rowprice_, getNumRows(), rowpriceHotStart_); } void OsiTestSolverInterface::solveFromHotStart() { int itlimOrig = volprob_.parm.maxsgriters; getIntParam(OsiMaxNumIterationHotStart, volprob_.parm.maxsgriters); CoinDisjointCopyN(rowpriceHotStart_, getNumRows(), rowprice_); resolve(); volprob_.parm.maxsgriters = itlimOrig; } void OsiTestSolverInterface::unmarkHotStart() { delete[] rowpriceHotStart_; rowpriceHotStart_ = NULL; } //############################################################################# // Problem information methods (original data) //############################################################################# bool OsiTestSolverInterface::isContinuous(int colNumber) const { assert( continuous_!=NULL ); if ( continuous_[colNumber] ) return true; return false; } //----------------------------------------------------------------------------- const CoinPackedMatrix * OsiTestSolverInterface::getMatrixByRow() const { updateRowMatrix_(); return &rowMatrix_; } //----------------------------------------------------------------------- const CoinPackedMatrix * OsiTestSolverInterface::getMatrixByCol() const { updateColMatrix_(); return &colMatrix_; } //############################################################################# // Problem information methods (results) //############################################################################# std::vector OsiTestSolverInterface::getDualRays(int /*maxNumRays*/, bool /*fullRay*/) const { // *FIXME* : must write the method -LL throw CoinError("method is not yet written", "getDualRays", "OsiTestSolverInterface"); return std::vector(); } //------------------------------------------------------------------ std::vector OsiTestSolverInterface::getPrimalRays(int /*maxNumRays*/) const { // *FIXME* : must write the method -LL throw CoinError("method is not yet written", "getPrimalRays", "OsiTestSolverInterface"); return std::vector(); } //############################################################################# // Problem modifying methods (rim vectors) //############################################################################# //----------------------------------------------------------------------------- void OsiTestSolverInterface::setColSetBounds(const int* indexFirst, const int* indexLast, const double* boundList) { while (indexFirst < indexLast) { const int ind = *indexFirst; collower_[ind] = boundList[0]; colupper_[ind] = boundList[1]; ++indexFirst; boundList += 2; } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::setRowSetBounds(const int* indexFirst, const int* indexLast, const double* boundList) { if (indexLast - indexFirst < getNumRows() / 3) { while (indexFirst < indexLast) { setRowBounds(*indexFirst, boundList[0], boundList[1]); ++indexFirst; boundList += 2; } } else { // it's better to convert everything at once while (indexFirst < indexLast) { const int ind = *indexFirst; rowlower_[ind] = boundList[0]; rowupper_[ind] = boundList[1]; ++indexFirst; boundList += 2; } convertBoundsToSenses_(); } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::setRowSetTypes(const int* indexFirst, const int* indexLast, const char* senseList, const double* rhsList, const double* rangeList) { if (indexLast - indexFirst < getNumRows() / 3) { while (indexFirst < indexLast) { setRowType(*indexFirst++, *senseList++, *rhsList++, *rangeList++); } } else { // it's better to convert everything at once while (indexFirst < indexLast) { const int ind = *indexFirst++; rowsense_[ind] = *senseList++; rhs_[ind] = *rhsList++; rowrange_[ind] = *rangeList++; } convertSensesToBounds_(); } } //############################################################################# void OsiTestSolverInterface::setContinuous(int index) { assert(continuous_ != NULL); if (index < 0 || index > getNumCols()) { throw CoinError("Index out of bound.", "setContinuous", "OsiTestSolverInterface"); } continuous_[index] = true; } //----------------------------------------------------------------------- void OsiTestSolverInterface::setInteger(int index) { assert(continuous_ != NULL); if (index < 0 || index > getNumCols()) { throw CoinError("Index out of bound.", "setContinuous", "OsiTestSolverInterface"); } continuous_[index] = false; } //----------------------------------------------------------------------- void OsiTestSolverInterface::setContinuous(const int* indices, int len) { assert(continuous_ != NULL); const int colnum = getNumCols(); int i; for (i = len - 1; i >= 0; --i) { if (indices[i] < 0 || indices[i] > colnum) { throw CoinError("Index out of bound.", "setContinuous", "OsiTestSolverInterface"); } } for (i = len - 1; i >= 0; --i) { continuous_[indices[i]] = true; } } //----------------------------------------------------------------------- void OsiTestSolverInterface::setInteger(const int* indices, int len) { assert(continuous_ != NULL); const int colnum = getNumCols(); int i; for (i = len - 1; i >= 0; --i) { if (indices[i] < 0 || indices[i] > colnum) { throw CoinError("Index out of bound.", "setContinuous", "OsiTestSolverInterface"); } } for (i = len - 1; i >= 0; --i) { continuous_[indices[i]] = false; } } //############################################################################# void OsiTestSolverInterface::setColSolution(const double *colsol) { CoinDisjointCopyN(colsol, getNumCols(), colsol_); // Compute the left hand side (row activity levels) if (isZeroOneMinusOne_) { colMatrixOneMinusOne_->timesMajor(colsol_, lhs_); } else { colMatrix_.times(colsol_, lhs_); } } //----------------------------------------------------------------------- void OsiTestSolverInterface::setRowPrice(const double *rowprice) { CoinDisjointCopyN(rowprice, getNumRows(), rowprice_); compute_rc_(rowprice_, rc_); } //############################################################################# // Problem modifying methods (matrix) //############################################################################# void OsiTestSolverInterface::addCol(const CoinPackedVectorBase& vec, const double collb, const double colub, const double obj) { const int colnum = getNumCols(); colRimResize_(colnum + 1); collower_[colnum] = collb; colupper_[colnum] = colub; objcoeffs_[colnum] = obj; continuous_[colnum] = true; colsol_[colnum] = fabs(collb) 0) { const int colnum = getNumCols(); colRimResize_(colnum + numcols); CoinDisjointCopyN(collb, numcols, collower_ + colnum); CoinDisjointCopyN(colub, numcols, colupper_ + colnum); CoinDisjointCopyN(obj, numcols, objcoeffs_ + colnum); CoinFillN(continuous_ + colnum, numcols, true); int c; for ( c=0; c 0) { int * delPos = new int[num]; CoinDisjointCopyN(columnIndices, num, delPos); std::sort(delPos, delPos + num); const int delNum = static_cast(std::unique(delPos, delPos + num) - delPos); const int colnum = getNumCols(); CoinDeleteEntriesFromArray(collower_, collower_ + colnum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(colupper_, colupper_ + colnum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(objcoeffs_, objcoeffs_ + colnum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(continuous_, continuous_ + colnum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(colsol_, colsol_ + colnum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rc_, rc_ + colnum, delPos, delPos + delNum); updateColMatrix_(); colMatrix_.deleteCols(delNum, delPos); rowMatrixCurrent_ = false; } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::addRow(const CoinPackedVectorBase& vec, const double rowlb, const double rowub) { const int rownum = getNumRows(); rowRimResize_(rownum + 1); rowlower_[rownum] = rowlb; rowupper_[rownum] = rowub; convertBoundToSense(rowlb, rowub, rowsense_[rownum], rhs_[rownum], rowrange_[rownum]); rowprice_[rownum] = 0.0; lhs_[rownum] = 0.0; updateRowMatrix_(); rowMatrix_.appendRow(vec); colMatrixCurrent_ = false; } //----------------------------------------------------------------------------- void OsiTestSolverInterface::addRow(const CoinPackedVectorBase& vec, const char rowsen, const double rowrhs, const double rowrng) { const int rownum = getNumRows(); rowRimResize_(rownum + 1); rowsense_[rownum] = rowsen; rhs_[rownum] = rowrhs; rowrange_[rownum] = rowrng; convertSenseToBound(rowsen, rowrhs, rowrng, rowlower_[rownum], rowupper_[rownum]); rowprice_[rownum] = 0.0; lhs_[rownum] = 0.0; updateRowMatrix_(); rowMatrix_.appendRow(vec); colMatrixCurrent_ = false; } //----------------------------------------------------------------------------- void OsiTestSolverInterface::addRows(const int numrows, const CoinPackedVectorBase * const * rows, const double* rowlb, const double* rowub) { if (numrows > 0) { const int rownum = getNumRows(); rowRimResize_(rownum + numrows); CoinDisjointCopyN(rowlb, numrows, rowlower_ + rownum); CoinDisjointCopyN(rowub, numrows, rowupper_ + rownum); for (int i = rownum + numrows - 1; i >= rownum; --i) { convertBoundToSense(rowlower_[i], rowupper_[i], rowsense_[i], rhs_[i], rowrange_[i]); } CoinFillN(rowprice_ + rownum, numrows, 0.0); CoinFillN(lhs_ + rownum, numrows, 0.0); updateRowMatrix_(); rowMatrix_.appendRows(numrows, rows); colMatrixCurrent_ = false; } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::addRows(const int numrows, const CoinPackedVectorBase * const * rows, const char* rowsen, const double* rowrhs, const double* rowrng) { if (numrows > 0) { const int rownum = getNumRows(); rowRimResize_(rownum + numrows); CoinDisjointCopyN(rowsen, numrows, rowsense_ + rownum); CoinDisjointCopyN(rowrhs, numrows, rhs_ + rownum); CoinDisjointCopyN(rowrng, numrows, rowrange_ + rownum); for (int i = rownum + numrows - 1; i >= rownum; --i) { convertSenseToBound(rowsense_[i], rhs_[i], rowrange_[i], rowlower_[i], rowupper_[i]); } CoinFillN(rowprice_ + rownum, numrows, 0.0); CoinFillN(lhs_ + rownum, numrows, 0.0); updateRowMatrix_(); rowMatrix_.appendRows(numrows, rows); colMatrixCurrent_ = false; } } //----------------------------------------------------------------------------- void OsiTestSolverInterface::deleteRows(const int num, const int * rowIndices) { if (num > 0) { int * delPos = new int[num]; CoinDisjointCopyN(rowIndices, num, delPos); std::sort(delPos, delPos + num); const int delNum = static_cast(std::unique(delPos, delPos + num) - delPos); const int rownum = getNumRows(); CoinDeleteEntriesFromArray(rowlower_, rowlower_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rowupper_, rowupper_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rowsense_, rowsense_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rowrange_, rowrange_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rhs_, rhs_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(rowprice_, rowprice_ + rownum, delPos, delPos + delNum); CoinDeleteEntriesFromArray(lhs_, lhs_ + rownum, delPos, delPos + delNum); updateRowMatrix_(); rowMatrix_.deleteRows(delNum, delPos); colMatrixCurrent_ = false; delete[] delPos; } } //############################################################################# // Constructors, destructors clone and assignment //############################################################################# OsiTestSolverInterface::OsiTestSolverInterface () : rowMatrixCurrent_(true), rowMatrix_(), colMatrixCurrent_(true), colMatrix_(), isZeroOneMinusOne_(false), colupper_(0), collower_(0), continuous_(0), rowupper_(0), rowlower_(0), rowsense_(0), rhs_(0), rowrange_(0), objcoeffs_(0), objsense_(1.0), colsol_(0), rowprice_(0), rc_(0), lhs_(0), lagrangeanCost_(0.0), rowpriceHotStart_(0), maxNumrows_(0), maxNumcols_(0), volprob_() { volprob_.parm.granularity = 0.0; } //----------------------------------------------------------------------- OsiSolverInterface * OsiTestSolverInterface::clone(bool copyData) const { return copyData ? new OsiTestSolverInterface(*this) : new OsiTestSolverInterface(); } //----------------------------------------------------------------------- OsiTestSolverInterface::OsiTestSolverInterface(const OsiTestSolverInterface& x) : OsiSolverInterface(x), rowMatrixCurrent_(true), rowMatrix_(), colMatrixCurrent_(true), colMatrix_(), isZeroOneMinusOne_(false), colupper_(0), collower_(0), continuous_(0), rowupper_(0), rowlower_(0), rowsense_(0), rhs_(0), rowrange_(0), objcoeffs_(0), objsense_(1.0), colsol_(0), rowprice_(0), rc_(0), lhs_(0), lagrangeanCost_(0.0), rowpriceHotStart_(0), maxNumrows_(0), maxNumcols_(0), volprob_() { operator=(x); volprob_.parm.granularity = 0.0; } //----------------------------------------------------------------------- OsiTestSolverInterface& OsiTestSolverInterface::operator=(const OsiTestSolverInterface& rhs) { if (&rhs == this) return *this; OsiSolverInterface::operator=(rhs); gutsOfDestructor_(); rowMatrixCurrent_ = rhs.rowMatrixCurrent_; if (rowMatrixCurrent_) rowMatrix_ = rhs.rowMatrix_; colMatrixCurrent_ = rhs.colMatrixCurrent_; if (colMatrixCurrent_) colMatrix_ = rhs.colMatrix_; if (rhs.maxNumrows_) { maxNumrows_ = rhs.maxNumrows_; rowRimAllocator_(); const int rownum = getNumRows(); CoinDisjointCopyN(rhs.rowupper_, rownum, rowupper_); CoinDisjointCopyN(rhs.rowlower_, rownum, rowlower_); CoinDisjointCopyN(rhs.rowsense_, rownum, rowsense_); CoinDisjointCopyN(rhs.rhs_, rownum, rhs_); CoinDisjointCopyN(rhs.rowrange_, rownum, rowrange_); CoinDisjointCopyN(rhs.rowprice_, rownum, rowprice_); CoinDisjointCopyN(rhs.lhs_, rownum, lhs_); } if (rhs.maxNumcols_) { maxNumcols_ = rhs.maxNumcols_; colRimAllocator_(); const int colnum = getNumCols(); CoinDisjointCopyN(rhs.colupper_, colnum, colupper_); CoinDisjointCopyN(rhs.collower_, colnum, collower_); CoinDisjointCopyN(rhs.continuous_, colnum, continuous_); CoinDisjointCopyN(rhs.objcoeffs_, colnum, objcoeffs_); CoinDisjointCopyN(rhs.colsol_, colnum, colsol_); CoinDisjointCopyN(rhs.rc_, colnum, rc_); } volprob_.parm.granularity = 0.0; return *this; } //----------------------------------------------------------------------- OsiTestSolverInterface::~OsiTestSolverInterface () { gutsOfDestructor_(); } //############################################################################# // Applying cuts //############################################################################# void OsiTestSolverInterface::applyRowCut(const OsiRowCut& rc) { const int rownum = getNumRows(); const double lb = rc.lb(); const double ub = rc.ub(); rowRimResize_(rownum + 1); rowprice_[rownum] = 0.0; rowlower_[rownum] = lb; rowupper_[rownum] = ub; convertBoundToSense(lb, ub, rowsense_[rownum], rhs_[rownum], rowrange_[rownum]); updateRowMatrix_(); rowMatrix_.appendRow(rc.row()); colMatrixCurrent_ = false; } //----------------------------------------------------------------------- void OsiTestSolverInterface::applyColCut(const OsiColCut& cc) { int i; const double* lb_elem = cc.lbs().getElements(); const int* lb_ind = cc.lbs().getIndices(); for (i = cc.lbs().getNumElements() - 1; i >= 0; --i) { collower_[lb_ind[i]] = CoinMax(collower_[lb_ind[i]], lb_elem[i]); } const double* ub_elem = cc.ubs().getElements(); const int* ub_ind = cc.ubs().getIndices(); for (i = cc.ubs().getNumElements() - 1; i >= 0; --i) { colupper_[ub_ind[i]] = CoinMin(colupper_[ub_ind[i]], ub_elem[i]); } } //############################################################################# DyLP-1.10.4/Osi/test/OsiTestSolverInterfaceTest.cpp0000644000175200017520000000120311575423733020544 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This file is licensed under the terms of Eclipse Public License (EPL). #include "OsiTestSolverInterface.hpp" #include "OsiUnitTests.hpp" //############################################################################# //-------------------------------------------------------------------------- void OsiTestSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir) { // Do common solverInterface testing { OsiTestSolverInterface m; OsiSolverInterfaceCommonUnitTest(&m, mpsDir, netlibDir); } } DyLP-1.10.4/Osi/test/Makefile.am0000644000175200017520000000745211621722556014637 0ustar coincoin# Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. ## $Id: Makefile.am 1800 2011-08-14 10:37:34Z stefan $ # Author: Andreas Waechter IBM 2006-04-13 AUTOMAKE_OPTIONS = foreign ######################################################################## # unitTest for Coin # ######################################################################## noinst_PROGRAMS = unitTest unitTest_SOURCES = unitTest.cpp \ OsiTestSolver.cpp \ OsiTestSolverInterface.cpp \ OsiTestSolverInterfaceIO.cpp \ OsiTestSolverInterfaceTest.cpp # List libraries of COIN projects unitTest_LDADD = ../src/OsiCommonTest/libOsiCommonTests.la unitTest_DEPENDENCIES = ../src/OsiCommonTest/libOsiCommonTests.la # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = \ -I`$(CYGPATH_W) $(srcdir)/../src/Osi` \ -I`$(CYGPATH_W) $(srcdir)/../src/OsiCommonTest` \ $(COINUTILS_CFLAGS) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi # Depending of what solvers are available, we add the corresponding files, # libraries and include dirs if COIN_HAS_CPX unitTest_SOURCES += OsiCpxSolverInterfaceTest.cpp AM_CPPFLAGS += -I`$(CYGPATH_W) $(CPXINCDIR)` \ -I`$(CYGPATH_W) $(srcdir)/../src/OsiCpx` unitTest_LDADD += ../src/OsiCpx/libOsiCpx.la unitTest_DEPENDENCIES += ../src/OsiCpx/libOsiCpx.la LIBS += $(CPXLIB) endif if COIN_HAS_GLPK unitTest_SOURCES += OsiGlpkSolverInterfaceTest.cpp AM_CPPFLAGS += $(GLPK_CFLAGS) \ -I`$(CYGPATH_W) $(srcdir)/../src/OsiGlpk` unitTest_LDADD += ../src/OsiGlpk/libOsiGlpk.la unitTest_DEPENDENCIES += ../src/OsiGlpk/libOsiGlpk.la LIBS += $(GLPK_LIBS) endif if COIN_HAS_MSK unitTest_SOURCES += OsiMskSolverInterfaceTest.cpp AM_CPPFLAGS += -I`$(CYGPATH_W) $(MSKINCDIR)` \ -I`$(CYGPATH_W) $(srcdir)/../src/OsiMsk` unitTest_LDADD += ../src/OsiMsk/libOsiMsk.la unitTest_DEPENDENCIES += ../src/OsiMsk/libOsiMsk.la LIBS += $(MSKLIB) endif if COIN_HAS_XPR unitTest_SOURCES += OsiXprSolverInterfaceTest.cpp AM_CPPFLAGS += -I`$(CYGPATH_W) $(XPRINCDIR)` \ -I`$(CYGPATH_W) $(srcdir)/../src/OsiXpr` unitTest_LDADD += ../src/OsiXpr/libOsiXpr.la unitTest_DEPENDENCIES += ../src/OsiXpr/libOsiXpr.la LIBS += $(XPRLIB) endif if COIN_HAS_GRB unitTest_SOURCES += OsiGrbSolverInterfaceTest.cpp AM_CPPFLAGS += -I`$(CYGPATH_W) $(GRBINCDIR)` \ -I`$(CYGPATH_W) $(srcdir)/../src/OsiGrb` unitTest_LDADD += ../src/OsiGrb/libOsiGrb.la unitTest_DEPENDENCIES += ../src/OsiGrb/libOsiGrb.la LIBS += $(GRBLIB) endif if COIN_HAS_SOPLEX unitTest_SOURCES += OsiSpxSolverInterfaceTest.cpp AM_CPPFLAGS += $(SOPLEX_CFLAGS) \ -I`$(CYGPATH_W) $(srcdir)/../src/OsiSpx` unitTest_LDADD += ../src/OsiSpx/libOsiSpx.la unitTest_DEPENDENCIES += ../src/OsiSpx/libOsiSpx.la LIBS += $(SOPLEX_LIBS) endif unitTest_LDADD += ../src/Osi/libOsi.la $(OSILIB_LIBS) unitTest_DEPENDENCIES += ../src/Osi/libOsi.la $(OSILIB_DEPENDENCIES) unittestflags = if COIN_HAS_SAMPLE unittestflags += -mpsDir=`$(CYGPATH_W) $(SAMPLE_DATA)` endif if COIN_HAS_NETLIB unittestflags += -netlibDir=`$(CYGPATH_W) $(NETLIB_DATA)` -testOsiSolverInterface endif test: unitTest$(EXEEXT) ./unitTest$(EXEEXT) $(unittestflags) .PHONY: test ######################################################################## # Cleaning stuff # ######################################################################## # Here we list everything that is not generated by the compiler, e.g., # output files of a program DISTCLEANFILES = *.mps *.mps.gz *.lp test2out *.out.gz *.out DyLP-1.10.4/Osi/test/OsiTestSolver.hpp0000644000175200017520000005247412243675677016121 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This file is licensed under the terms of Eclipse Public License (EPL). // this is a copy of VolVolume (stable/1.1 rev. 233) #ifndef __OSITESTSOLVER_HPP__ #define __OSITESTSOLVER_HPP__ #include #include #include #include #include #include "CoinFinite.hpp" #ifndef VOL_DEBUG // When VOL_DEBUG is 1, we check vector indices #define VOL_DEBUG 0 #endif template static inline T VolMax(register const T x, register const T y) { return ((x) > (y)) ? (x) : (y); } template static inline T VolAbs(register const T x) { return ((x) > 0) ? (x) : -(x); } //############################################################################ #if defined(VOL_DEBUG) && (VOL_DEBUG != 0) #define VOL_TEST_INDEX(i, size) \ { \ if ((i) < 0 || (i) >= (size)) { \ printf("bad VOL_?vector index\n"); \ abort(); \ } \ } #define VOL_TEST_SIZE(size) \ { \ if (s <= 0) { \ printf("bad VOL_?vector size\n"); \ abort(); \ } \ } #else #define VOL_TEST_INDEX(i, size) #define VOL_TEST_SIZE(size) #endif //############################################################################ class VOL_dvector; class VOL_ivector; class VOL_primal; class VOL_dual; class VOL_swing; class VOL_alpha_factor; class VOL_vh; class VOL_indc; class VOL_user_hooks; class VOL_problem; //############################################################################ /** This class contains the parameters controlling the Volume Algorithm */ struct VOL_parms { /** initial value of lambda */ double lambdainit; /** initial value of alpha */ double alphainit; /** minimum value for alpha */ double alphamin; /** when little progress is being done, we multiply alpha by alphafactor */ double alphafactor; /** initial upper bound of the value of an integer solution */ double ubinit; /** accept if max abs viol is less than this */ double primal_abs_precision; /** accept if abs gap is less than this */ double gap_abs_precision; /** accept if rel gap is less than this */ double gap_rel_precision; /** terminate if best_ub - lcost < granularity */ double granularity; /** terminate if the relative increase in lcost through ascent_check_invl steps is less than this */ double minimum_rel_ascent; /** when to check for sufficient relative ascent the first time */ int ascent_first_check; /** through how many iterations does the relative ascent have to reach a minimum */ int ascent_check_invl; /** maximum number of iterations */ int maxsgriters; /** controls the level of printing. The flag should the the 'OR'-d value of the following options:
  • 0 - print nothing
  • 1 - print iteration information
  • 2 - add lambda information
  • 4 - add number of Red, Yellow, Green iterations
Default: 3 */ int printflag; /** controls how often do we print */ int printinvl; /** controls how often we run the primal heuristic */ int heurinvl; /** how many consecutive green iterations are allowed before changing lambda */ int greentestinvl; /** how many consecutive yellow iterations are allowed before changing lambda */ int yellowtestinvl; /** how many consecutive red iterations are allowed before changing lambda */ int redtestinvl; /** number of iterations before we check if alpha should be decreased */ int alphaint; /** name of file for saving dual solution */ char* temp_dualfile; }; //############################################################################ /** vector of doubles. It is used for most vector operations. Note: If VOL_DEBUG is #defined to be 1 then each time an entry is accessed in the vector the index of the entry is tested for nonnegativity and for being less than the size of the vector. It's good to turn this on while debugging, but in final runs it should be turned off (beause of the performance hit). */ class VOL_dvector { public: /** The array holding the vector */ double* v; /** The size of the vector */ int sz; public: /** Construct a vector of size s. The content of the vector is undefined. */ VOL_dvector(const int s) { VOL_TEST_SIZE(s); v = new double[sz = s]; } /** Default constructor creates a vector of size 0. */ VOL_dvector() : v(0), sz(0) {} /** Copy constructor makes a replica of x. */ VOL_dvector(const VOL_dvector& x) : v(0), sz(0) { sz = x.sz; if (sz > 0) { v = new double[sz]; std::copy(x.v, x.v + sz, v); } } /** The destructor deletes the data array. */ ~VOL_dvector() { delete[] v; } /** Return the size of the vector. */ inline int size() const {return sz;} /** Return a reference to the i-th entry. */ inline double& operator[](const int i) { VOL_TEST_INDEX(i, sz); return v[i]; } /** Return the i-th entry. */ inline double operator[](const int i) const { VOL_TEST_INDEX(i, sz); return v[i]; } /** Delete the content of the vector and replace it with a vector of length 0. */ inline void clear() { delete[] v; v = 0; sz = 0; } /** Convex combination. Replace the current vector v with v = (1-gamma) v + gamma w. */ inline void cc(const double gamma, const VOL_dvector& w) { if (sz != w.sz) { printf("bad VOL_dvector sizes\n"); abort(); } double * p_v = v - 1; const double * p_w = w.v - 1; const double * const p_e = v + sz; const double one_gamma = 1.0 - gamma; while ( ++p_v != p_e ){ *p_v = one_gamma * (*p_v) + gamma * (*++p_w); } } /** delete the current vector and allocate space for a vector of size s. */ inline void allocate(const int s) { VOL_TEST_SIZE(s); delete[] v; v = new double[sz = s]; } /** swaps the vector with w. */ inline void swap(VOL_dvector& w) { std::swap(v, w.v); std::swap(sz, w.sz); } /** Copy w into the vector. */ VOL_dvector& operator=(const VOL_dvector& w); /** Replace every entry in the vector with w. */ VOL_dvector& operator=(const double w); }; //----------------------------------------------------------------------------- /** vector of ints. It's used to store indices, it has similar functions as VOL_dvector. Note: If VOL_DEBUG is #defined to be 1 then each time an entry is accessed in the vector the index of the entry is tested for nonnegativity and for being less than the size of the vector. It's good to turn this on while debugging, but in final runs it should be turned off (beause of the performance hit). */ class VOL_ivector { public: /** The array holding the vector. */ int* v; /** The size of the vector. */ int sz; public: /** Construct a vector of size s. The content of the vector is undefined. */ VOL_ivector(const int s) { VOL_TEST_SIZE(s); v = new int[sz = s]; } /** Default constructor creates a vector of size 0. */ VOL_ivector() : v(0), sz(0) {} /** Copy constructor makes a replica of x. */ VOL_ivector(const VOL_ivector& x) { sz = x.sz; if (sz > 0) { v = new int[sz]; std::copy(x.v, x.v + sz, v); } } /** The destructor deletes the data array. */ ~VOL_ivector(){ delete [] v; } /** Return the size of the vector. */ inline int size() const { return sz; } /** Return a reference to the i-th entry. */ inline int& operator[](const int i) { VOL_TEST_INDEX(i, sz); return v[i]; } /** Return the i-th entry. */ inline int operator[](const int i) const { VOL_TEST_INDEX(i, sz); return v[i]; } /** Delete the content of the vector and replace it with a vector of length 0. */ inline void clear() { delete[] v; v = 0; sz = 0; } /** delete the current vector and allocate space for a vector of size s. */ inline void allocate(const int s) { VOL_TEST_SIZE(s); delete[] v; v = new int[sz = s]; } /** swaps the vector with w. */ inline void swap(VOL_ivector& w) { std::swap(v, w.v); std::swap(sz, w.sz); } /** Copy w into the vector. */ VOL_ivector& operator=(const VOL_ivector& v); /** Replace every entry in the vector with w. */ VOL_ivector& operator=(const int w); }; //############################################################################ // A class describing a primal solution. This class is used only internally class VOL_primal { public: // objective value of this primal solution double value; // the largest of the v[i]'s double viol; // primal solution VOL_dvector x; // v=b-Ax, for the relaxed constraints VOL_dvector v; VOL_primal(const int psize, const int dsize) : x(psize), v(dsize) {} VOL_primal(const VOL_primal& primal) : value(primal.value), viol(primal.viol), x(primal.x), v(primal.v) {} ~VOL_primal() {} inline VOL_primal& operator=(const VOL_primal& p) { if (this == &p) return *this; value = p.value; viol = p.viol; x = p.x; v = p.v; return *this; } // convex combination. data members in this will be overwritten // convex combination between two primal solutions // x <-- alpha x + (1 - alpha) p.x // v <-- alpha v + (1 - alpha) p.v inline void cc(const double alpha, const VOL_primal& p) { value = alpha * p.value + (1.0 - alpha) * value; x.cc(alpha, p.x); v.cc(alpha, p.v); } // find maximum of v[i] void find_max_viol(const VOL_dvector& dual_lb, const VOL_dvector& dual_ub); }; //----------------------------------------------------------------------------- // A class describing a dual solution. This class is used only internally class VOL_dual { public: // lagrangian value double lcost; // reduced costs * (pstar-primal) double xrc; // this information is only printed // dual vector VOL_dvector u; VOL_dual(const int dsize) : u(dsize) { u = 0.0;} VOL_dual(const VOL_dual& dual) : lcost(dual.lcost), xrc(dual.xrc), u(dual.u) {} ~VOL_dual() {} inline VOL_dual& operator=(const VOL_dual& p) { if (this == &p) return *this; lcost = p.lcost; xrc = p.xrc; u = p.u; return *this; } // dual step void step(const double target, const double lambda, const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_dvector& v); double ascent(const VOL_dvector& v, const VOL_dvector& last_u) const; void compute_xrc(const VOL_dvector& pstarx, const VOL_dvector& primalx, const VOL_dvector& rc); }; //############################################################################ /* here we check whether an iteration is green, yellow or red. Also according to this information we decide whether lambda should be changed */ class VOL_swing { private: VOL_swing(const VOL_swing&); VOL_swing& operator=(const VOL_swing&); public: enum condition {green, yellow, red} lastswing; int lastgreeniter, lastyellowiter, lastrediter; int ngs, nrs, nys; int rd; VOL_swing() { lastgreeniter = lastyellowiter = lastrediter = 0; ngs = nrs = nys = 0; } ~VOL_swing(){} inline void cond(const VOL_dual& dual, const double lcost, const double ascent, const int iter) { double eps = 1.e-3; if (ascent > 0.0 && lcost > dual.lcost + eps) { lastswing = green; lastgreeniter = iter; ++ngs; rd = 0; } else { if (ascent <= 0 && lcost > dual.lcost) { lastswing = yellow; lastyellowiter = iter; ++nys; rd = 0; } else { lastswing = red; lastrediter = iter; ++nrs; rd = 1; } } } inline double lfactor(const VOL_parms& parm, const double lambda, const int iter) { double lambdafactor = 1.0; double eps = 5.e-4; int cons; switch (lastswing) { case green: cons = iter - VolMax(lastyellowiter, lastrediter); if (parm.printflag & 4) printf(" G: Consecutive Gs = %3d\n\n", cons); if (cons >= parm.greentestinvl && lambda < 2.0) { lastgreeniter = lastyellowiter = lastrediter = iter; lambdafactor = 2.0; if (parm.printflag & 2) printf("\n ---- increasing lamda to %g ----\n\n", lambda * lambdafactor); } break; case yellow: cons = iter - VolMax(lastgreeniter, lastrediter); if (parm.printflag & 4) printf(" Y: Consecutive Ys = %3d\n\n", cons); if (cons >= parm.yellowtestinvl) { lastgreeniter = lastyellowiter = lastrediter = iter; lambdafactor = 1.1; if (parm.printflag & 2) printf("\n **** increasing lamda to %g *****\n\n", lambda * lambdafactor); } break; case red: cons = iter - VolMax(lastgreeniter, lastyellowiter); if (parm.printflag & 4) printf(" R: Consecutive Rs = %3d\n\n", cons); if (cons >= parm.redtestinvl && lambda > eps) { lastgreeniter = lastyellowiter = lastrediter = iter; lambdafactor = 0.67; if (parm.printflag & 2) printf("\n **** decreasing lamda to %g *****\n\n", lambda * lambdafactor); } break; } return lambdafactor; } inline void print() { printf("**** G= %i, Y= %i, R= %i ****\n", ngs, nys, nrs); ngs = nrs = nys = 0; } }; //############################################################################ /* alpha should be decreased if after some number of iterations the objective has increased less that 1% */ class VOL_alpha_factor { private: VOL_alpha_factor(const VOL_alpha_factor&); VOL_alpha_factor& operator=(const VOL_alpha_factor&); public: double lastvalue; VOL_alpha_factor() {lastvalue = -COIN_DBL_MAX;} ~VOL_alpha_factor() {} inline double factor(const VOL_parms& parm, const double lcost, const double alpha) { if (alpha < parm.alphamin) return 1.0; register const double ll = VolAbs(lcost); const double x = ll > 10 ? (lcost-lastvalue)/ll : (lcost-lastvalue); lastvalue = lcost; return (x <= 0.01) ? parm.alphafactor : 1.0; } }; //############################################################################ /* here we compute the norm of the conjugate direction -hh-, the norm of the subgradient -norm-, the inner product between the subgradient and the last conjugate direction -vh-, and the inner product between the new conjugate direction and the subgradient */ class VOL_vh { private: VOL_vh(const VOL_vh&); VOL_vh& operator=(const VOL_vh&); public: double hh; double norm; double vh; double asc; VOL_vh(const double alpha, const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_dvector& v, const VOL_dvector& vstar, const VOL_dvector& u); ~VOL_vh(){} }; //############################################################################ /* here we compute different parameter to be printed. v2 is the square of the norm of the subgradient. vu is the inner product between the dual variables and the subgradient. vabs is the maximum absolute value of the violations of pstar. asc is the inner product between the conjugate direction and the subgradient */ class VOL_indc { private: VOL_indc(const VOL_indc&); VOL_indc& operator=(const VOL_indc&); public: double v2; double vu; double vabs; double asc; public: VOL_indc(const VOL_dvector& dual_lb, const VOL_dvector& dual_ub, const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual); ~VOL_indc() {} }; //############################################################################# /** The user hooks should be overridden by the user to provide the problem specific routines for the volume algorithm. The user should derive a class ... for all hooks: return value of -1 means that volume should quit */ class VOL_user_hooks { public: virtual ~VOL_user_hooks() {} public: // for all hooks: return value of -1 means that volume should quit /** compute reduced costs @param u (IN) the dual variables @param rc (OUT) the reduced cost with respect to the dual values */ virtual int compute_rc(const VOL_dvector& u, VOL_dvector& rc) = 0; /** Solve the subproblem for the subgradient step. @param dual (IN) the dual variables @param rc (IN) the reduced cost with respect to the dual values @param lcost (OUT) the lagrangean cost with respect to the dual values @param x (OUT) the primal result of solving the subproblem @param v (OUT) b-Ax for the relaxed constraints @param pcost (OUT) the primal objective value of x */ virtual int solve_subproblem(const VOL_dvector& dual, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector& v, double& pcost) = 0; /** Starting from the primal vector x, run a heuristic to produce an integer solution @param x (IN) the primal vector @param heur_val (OUT) the value of the integer solution (return COIN_DBL_MAX here if no feas sol was found */ virtual int heuristics(const VOL_problem& p, const VOL_dvector& x, double& heur_val) = 0; }; //############################################################################# /** This class holds every data for the Volume Algorithm and its solve method must be invoked to solve the problem. The INPUT fields must be filled out completely before solve is invoked. dsol have to be filled out if and only if the last argument to solve is true. */ class VOL_problem { private: VOL_problem(const VOL_problem&); VOL_problem& operator=(const VOL_problem&); void set_default_parm(); // ############ INPUT fields ######################## public: /**@name Constructors and destructor */ //@{ /** Default constructor. */ VOL_problem(); /** Create a a VOL_problem object and read in the parameters from filename. */ VOL_problem(const char *filename); /** Destruct the object. */ ~VOL_problem(); //@} /**@name Method to solve the problem. */ //@{ /** Solve the problem using the hooks. Any information needed in the hooks must be stored in the structure user_data points to. */ int solve(VOL_user_hooks& hooks, const bool use_preset_dual = false); //@} private: /**@name Internal data (may be inquired for) */ //@{ /** value of alpha */ double alpha_; /** value of lambda */ double lambda_; // This union is here for padding (so that data members would be // double-aligned on x86 CPU union { /** iteration number */ int iter_; double __pad0; }; //@} public: /**@name External data (containing the result after solve) */ //@{ /** final lagrangian value (OUTPUT) */ double value; /** final dual solution (INPUT/OUTPUT) */ VOL_dvector dsol; /** final primal solution (OUTPUT) */ VOL_dvector psol; /** violations (b-Ax) for the relaxed constraints */ VOL_dvector viol; //@} /**@name External data (may be changed by the user before calling solve) */ //@{ /** The parameters controlling the Volume Algorithm (INPUT) */ VOL_parms parm; /** length of primal solution (INPUT) */ int psize; /** length of dual solution (INPUT) */ int dsize; /** lower bounds for the duals (if 0 length, then filled with -inf) (INPUT) */ VOL_dvector dual_lb; /** upper bounds for the duals (if 0 length, then filled with +inf) (INPUT) */ VOL_dvector dual_ub; //@} public: /**@name Methods returning final data */ //@{ /** returns the iteration number */ int iter() const { return iter_; } /** returns the value of alpha */ double alpha() const { return alpha_; } /** returns the value of lambda */ double lambda() const { return lambda_; } //@} private: /**@name Private methods used internally */ //@{ /** Read in the parameters from the file filename. */ void read_params(const char* filename); /** initializes duals, bounds for the duals, alpha, lambda */ int initialize(const bool use_preset_dual); /** print volume info every parm.printinvl iterations */ void print_info(const int iter, const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual); /** Checks if lcost is close to the target, if so it increases the target. Close means that we got within 5% of the target. */ double readjust_target(const double oldtarget, const double lcost) const; /** Here we decide the value of alpha1 to be used in the convex combination. The new pstar will be computed as
pstar = alpha1 * pstar + (1 - alpha1) * primal
More details of this are in doc.ps.
IN: alpha, primal, pstar, dual
@return alpha1 */ double power_heur(const VOL_primal& primal, const VOL_primal& pstar, const VOL_dual& dual) const; //@} }; #endif DyLP-1.10.4/Osi/test/OsiTestSolverInterface.hpp0000644000175200017520000010172111575423733017717 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This file is licensed under the terms of Eclipse Public License (EPL). // this is a copy of OsiVolSolverInterface (trunk rev. 1466) renamed to OsiTestSolverInterface #ifndef OsiTestSolverInterface_H #define OsiTestSolverInterface_H #include #include "OsiTestSolver.hpp" #include "CoinPackedMatrix.hpp" #include "OsiSolverInterface.hpp" static const double OsiTestInfinity = 1.0e31; //############################################################################# /** Vol(ume) Solver Interface Instantiation of OsiTestSolverInterface for the Volume Algorithm */ class OsiTestSolverInterface : virtual public OsiSolverInterface, public VOL_user_hooks { friend void OsiTestSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir); private: class OsiVolMatrixOneMinusOne_ { int majorDim_; int minorDim_; int plusSize_; int * plusInd_; int * plusStart_; int * plusLength_; int minusSize_; int * minusInd_; int * minusStart_; int * minusLength_; public: OsiVolMatrixOneMinusOne_(const CoinPackedMatrix& m); ~OsiVolMatrixOneMinusOne_(); void timesMajor(const double* x, double* y) const; }; public: //--------------------------------------------------------------------------- /**@name Solve methods */ //@{ /// Solve initial LP relaxation virtual void initialSolve(); /// Resolve an LP relaxation after problem modification virtual void resolve(); /// Invoke solver's built-in enumeration algorithm virtual void branchAndBound() { throw CoinError("Sorry, the Volume Algorithm doesn't implement B&B", "branchAndBound", "OsiTestSolverInterface"); } //@} //--------------------------------------------------------------------------- /**@name Parameter set/get methods The set methods return true if the parameter was set to the given value, false otherwise. There can be various reasons for failure: the given parameter is not applicable for the solver (e.g., refactorization frequency for the volume algorithm), the parameter is not yet implemented for the solver or simply the value of the parameter is out of the range the solver accepts. If a parameter setting call returns false check the details of your solver. The get methods return true if the given parameter is applicable for the solver and is implemented. In this case the value of the parameter is returned in the second argument. Otherwise they return false. */ //@{ // Set an integer parameter bool setIntParam(OsiIntParam key, int value); // Set an double parameter bool setDblParam(OsiDblParam key, double value); // Set a string parameter bool setStrParam(OsiStrParam key, const std::string & value); // Get an integer parameter bool getIntParam(OsiIntParam key, int& value) const; // Get an double parameter bool getDblParam(OsiDblParam key, double& value) const; // Get a string parameter bool getStrParam(OsiStrParam key, std::string& value) const; //@} //--------------------------------------------------------------------------- ///@name Methods returning info on how the solution process terminated //@{ /// Are there a numerical difficulties? virtual bool isAbandoned() const; /// Is optimality proven? virtual bool isProvenOptimal() const; /// Is primal infeasiblity proven? virtual bool isProvenPrimalInfeasible() const; /// Is dual infeasiblity proven? virtual bool isProvenDualInfeasible() const; /// Is the given primal objective limit reached? virtual bool isPrimalObjectiveLimitReached() const; /// Is the given dual objective limit reached? virtual bool isDualObjectiveLimitReached() const; /// Iteration limit reached? virtual bool isIterationLimitReached() const; //@} //--------------------------------------------------------------------------- /**@name WarmStart related methods */ //@{ /*! \brief Get an empty warm start object This routine returns an empty warm start object. Its purpose is to provide a way to give a client a warm start object of the appropriate type, which can resized and modified as desired. */ virtual CoinWarmStart *getEmptyWarmStart () const ; /// Get warmstarting information virtual CoinWarmStart* getWarmStart() const; /** Set warmstarting information. Return true/false depending on whether the warmstart information was accepted or not. */ virtual bool setWarmStart(const CoinWarmStart* warmstart); //@} //--------------------------------------------------------------------------- /**@name Hotstart related methods (primarily used in strong branching).
The user can create a hotstart (a snapshot) of the optimization process then reoptimize over and over again always starting from there.
NOTE: between hotstarted optimizations only bound changes are allowed. */ //@{ /// Create a hotstart point of the optimization process virtual void markHotStart(); /// Optimize starting from the hotstart virtual void solveFromHotStart(); /// Delete the snapshot virtual void unmarkHotStart(); //@} //--------------------------------------------------------------------------- /**@name Problem information methods These methods call the solver's query routines to return information about the problem referred to by the current object. Querying a problem that has no data associated with it result in zeros for the number of rows and columns, and NULL pointers from the methods that return vectors. Const pointers returned from any data-query method are valid as long as the data is unchanged and the solver is not called. */ //@{ /**@name Methods related to querying the input data */ //@{ /// Get number of columns virtual int getNumCols() const { return rowMatrixCurrent_? rowMatrix_.getNumCols() : colMatrix_.getNumCols(); } /// Get number of rows virtual int getNumRows() const { return rowMatrixCurrent_? rowMatrix_.getNumRows() : colMatrix_.getNumRows(); } /// Get number of nonzero elements virtual int getNumElements() const { return rowMatrixCurrent_? rowMatrix_.getNumElements() : colMatrix_.getNumElements(); } /// Get pointer to array[getNumCols()] of column lower bounds virtual const double * getColLower() const { return collower_; } /// Get pointer to array[getNumCols()] of column upper bounds virtual const double * getColUpper() const { return colupper_; } /** Get pointer to array[getNumRows()] of row constraint senses.
  • 'L' <= constraint
  • 'E' = constraint
  • 'G' >= constraint
  • 'R' ranged constraint
  • 'N' free constraint
*/ virtual const char * getRowSense() const { return rowsense_; } /** Get pointer to array[getNumRows()] of rows right-hand sides
  • if rowsense()[i] == 'L' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'G' then rhs()[i] == rowlower()[i]
  • if rowsense()[i] == 'R' then rhs()[i] == rowupper()[i]
  • if rowsense()[i] == 'N' then rhs()[i] == 0.0
*/ virtual const double * getRightHandSide() const { return rhs_; } /** Get pointer to array[getNumRows()] of row ranges.
  • if rowsense()[i] == 'R' then rowrange()[i] == rowupper()[i] - rowlower()[i]
  • if rowsense()[i] != 'R' then rowrange()[i] is undefined
*/ virtual const double * getRowRange() const { return rowrange_; } /// Get pointer to array[getNumRows()] of row lower bounds virtual const double * getRowLower() const { return rowlower_; } /// Get pointer to array[getNumRows()] of row upper bounds virtual const double * getRowUpper() const { return rowupper_; } /// Get pointer to array[getNumCols()] of objective function coefficients virtual const double * getObjCoefficients() const { return objcoeffs_; } /// Get objective function sense (1 for min (default), -1 for max) virtual double getObjSense() const { return objsense_; } /// Return true if column is continuous virtual bool isContinuous(int colNumber) const; #if 0 /// Return true if column is binary virtual bool isBinary(int colNumber) const; /** Return true if column is integer. Note: This function returns true if the the column is binary or a general integer. */ virtual bool isInteger(int colNumber) const; /// Return true if column is general integer virtual bool isIntegerNonBinary(int colNumber) const; /// Return true if column is binary and not fixed at either bound virtual bool isFreeBinary(int colNumber) const; #endif /// Get pointer to row-wise copy of matrix virtual const CoinPackedMatrix * getMatrixByRow() const; /// Get pointer to column-wise copy of matrix virtual const CoinPackedMatrix * getMatrixByCol() const; /// Get solver's value for infinity virtual double getInfinity() const { return OsiTestInfinity; } //@} /**@name Methods related to querying the solution */ //@{ /// Get pointer to array[getNumCols()] of primal solution vector virtual const double * getColSolution() const { return colsol_; } /// Get pointer to array[getNumRows()] of dual prices virtual const double * getRowPrice() const { return rowprice_; } /// Get a pointer to array[getNumCols()] of reduced costs virtual const double * getReducedCost() const { return rc_; } /** Get pointer to array[getNumRows()] of row activity levels (constraint matrix times the solution vector */ virtual const double * getRowActivity() const { return lhs_; } /// Get objective function value virtual double getObjValue() const { #if 1 // This does not pass unitTest if getObjValue is called before solve return lagrangeanCost_; #else return OsiSolverInterface::getObjValue(); #endif } /** Get how many iterations it took to solve the problem (whatever "iteration" mean to the solver. */ virtual int getIterationCount() const { return volprob_.iter(); } /** Get as many dual rays as the solver can provide. (In case of proven primal infeasibility there should be at least one.) The first getNumRows() ray components will always be associated with the row duals (as returned by getRowPrice()). If \c fullRay is true, the final getNumCols() entries will correspond to the ray components associated with the nonbasic variables. If the full ray is requested and the method cannot provide it, it will throw an exception. NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumRows() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector getDualRays(int maxNumRays, bool fullRay = false) const; /** Get as many primal rays as the solver can provide. (In case of proven dual infeasibility there should be at least one.) NOTE for implementers of solver interfaces:
The double pointers in the vector should point to arrays of length getNumCols() and they should be allocated via new[].
NOTE for users of solver interfaces:
It is the user's responsibility to free the double pointers in the vector using delete[]. */ virtual std::vector getPrimalRays(int maxNumRays) const; #if 0 /** Get indices of solution vector which are integer variables presently at fractional values */ virtual OsiVectorInt getFractionalIndices(const double etol=1.e-05) const; #endif //@} //@} //--------------------------------------------------------------------------- /**@name Problem modifying methods */ //@{ //------------------------------------------------------------------------- /**@name Changing bounds on variables and constraints */ //@{ /** Set an objective function coefficient */ virtual void setObjCoeff( int elementIndex, double elementValue ) { objcoeffs_[elementIndex] = elementValue; } using OsiSolverInterface::setColLower ; /** Set a single column lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setColLower( int elementIndex, double elementValue ) { collower_[elementIndex] = elementValue; } using OsiSolverInterface::setColUpper ; /** Set a single column upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setColUpper( int elementIndex, double elementValue ) { colupper_[elementIndex] = elementValue; } /** Set a single column lower and upper bound */ virtual void setColBounds( int elementIndex, double lower, double upper ) { collower_[elementIndex] = lower; colupper_[elementIndex] = upper; } /** Set the bounds on a number of columns simultaneously
The default implementation just invokes setColLower() and setColUpper() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the variables whose either bound changes @param boundList the new lower/upper bound pairs for the variables */ virtual void setColSetBounds(const int* indexFirst, const int* indexLast, const double* boundList); /** Set a single row lower bound
Use -COIN_DBL_MAX for -infinity. */ virtual void setRowLower( int elementIndex, double elementValue ) { rowlower_[elementIndex] = elementValue; convertBoundToSense(elementValue, rowupper_[elementIndex], rowsense_[elementIndex], rhs_[elementIndex], rowrange_[elementIndex]); } /** Set a single row upper bound
Use COIN_DBL_MAX for infinity. */ virtual void setRowUpper( int elementIndex, double elementValue ) { rowupper_[elementIndex] = elementValue; convertBoundToSense(rowlower_[elementIndex], elementValue, rowsense_[elementIndex], rhs_[elementIndex], rowrange_[elementIndex]); } /** Set a single row lower and upper bound */ virtual void setRowBounds( int elementIndex, double lower, double upper ) { rowlower_[elementIndex] = lower; rowupper_[elementIndex] = upper; convertBoundToSense(lower, upper, rowsense_[elementIndex], rhs_[elementIndex], rowrange_[elementIndex]); } /** Set the type of a single row
*/ virtual void setRowType(int index, char sense, double rightHandSide, double range) { rowsense_[index] = sense; rhs_[index] = rightHandSide; rowrange_[index] = range; convertSenseToBound(sense, rightHandSide, range, rowlower_[index], rowupper_[index]); } /** Set the bounds on a number of rows simultaneously
The default implementation just invokes setRowLower() and setRowUpper() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the constraints whose either bound changes @param boundList the new lower/upper bound pairs for the constraints */ virtual void setRowSetBounds(const int* indexFirst, const int* indexLast, const double* boundList); /** Set the type of a number of rows simultaneously
The default implementation just invokes setRowType() over and over again. @param indexFirst,indexLast pointers to the beginning and after the end of the array of the indices of the constraints whose any characteristics changes @param senseList the new senses @param rhsList the new right hand sides @param rangeList the new ranges */ virtual void setRowSetTypes(const int* indexFirst, const int* indexLast, const char* senseList, const double* rhsList, const double* rangeList); //@} //------------------------------------------------------------------------- /**@name Integrality related changing methods */ //@{ /** Set the index-th variable to be a continuous variable */ virtual void setContinuous(int index); /** Set the index-th variable to be an integer variable */ virtual void setInteger(int index); /** Set the variables listed in indices (which is of length len) to be continuous variables */ virtual void setContinuous(const int* indices, int len); /** Set the variables listed in indices (which is of length len) to be integer variables */ virtual void setInteger(const int* indices, int len); //@} //------------------------------------------------------------------------- /// Set objective function sense (1 for min (default), -1 for max,) virtual void setObjSense(double s ) { objsense_ = s < 0 ? -1.0 : 1.0; } /** Set the primal solution column values colsol[numcols()] is an array of values of the problem column variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of colsol() until changed by another call to setColsol() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setColSolution(const double * colsol); /** Set dual solution vector rowprice[numrows()] is an array of values of the problem row dual variables. These values are copied to memory owned by the solver object or the solver. They will be returned as the result of rowprice() until changed by another call to setRowprice() or by a call to any solver routine. Whether the solver makes use of the solution in any way is solver-dependent. */ virtual void setRowPrice(const double * rowprice); //------------------------------------------------------------------------- /**@name Methods to expand a problem.
Note that if a column is added then by default it will correspond to a continuous variable. */ //@{ using OsiSolverInterface::addCol ; /** */ virtual void addCol(const CoinPackedVectorBase& vec, const double collb, const double colub, const double obj); using OsiSolverInterface::addCols ; /** */ virtual void addCols(const int numcols, const CoinPackedVectorBase * const * cols, const double* collb, const double* colub, const double* obj); #if 0 /** */ virtual void addCols(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj); #endif /** */ virtual void deleteCols(const int num, const int * colIndices); using OsiSolverInterface::addRow ; /** */ virtual void addRow(const CoinPackedVectorBase& vec, const double rowlb, const double rowub); /** */ virtual void addRow(const CoinPackedVectorBase& vec, const char rowsen, const double rowrhs, const double rowrng); using OsiSolverInterface::addRows ; /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase * const * rows, const double* rowlb, const double* rowub); /** */ virtual void addRows(const int numrows, const CoinPackedVectorBase * const * rows, const char* rowsen, const double* rowrhs, const double* rowrng); #if 0 /** */ virtual void addRows(const CoinPackedMatrix& matrix, const double* rowlb, const double* rowub); /** */ virtual void addRows(const CoinPackedMatrix& matrix, const char* rowsen, const double* rowrhs, const double* rowrng); #endif /** */ virtual void deleteRows(const int num, const int * rowIndices); //----------------------------------------------------------------------- #if 0 /** Apply a collection of cuts.
Only cuts which have an effectiveness >= effectivenessLb are applied.
  • ReturnCode.numberIneffective() -- number of cuts which were not applied because they had an effectiveness < effectivenessLb
  • ReturnCode.numberInconsistent() -- number of invalid cuts
  • ReturnCode.numberInconsistentWrtIntegerModel() -- number of cuts that are invalid with respect to this integer model
  • ReturnCode.numberInfeasible() -- number of cuts that would make this integer model infeasible
  • ReturnCode.numberApplied() -- number of integer cuts which were applied to the integer model
  • cs.size() == numberIneffective() + numberInconsistent() + numberInconsistentWrtIntegerModel() + numberInfeasible() + nubmerApplied()
*/ virtual ApplyCutsReturnCode applyCuts(const OsiCuts & cs, double effectivenessLb = 0.0); #endif //@} //@} //--------------------------------------------------------------------------- protected: /**@name Helper methods for problem input */ void initFromRlbRub(const int rownum, const double* rowlb, const double* rowub); void initFromRhsSenseRange(const int rownum, const char* rowsen, const double* rowrhs, const double* rowrng); void initFromClbCubObj(const int colnum, const double* collb, const double* colub, const double* obj); public: /**@name Methods to input a problem */ //@{ /** Load in an problem by copying the arguments (the constraints on the rows are given by lower and upper bounds). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • rowub: all rows have upper bound infinity
  • rowlb: all rows have lower bound -infinity
  • obj: all variables have 0 objective coefficient
*/ virtual void loadProblem(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by lower and upper bounds). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, double*& rowlb, double*& rowub); /** Load in an problem by copying the arguments (the constraints on the rows are given by sense/rhs/range triplets). If a pointer is 0 then the following values are the default:
  • colub: all columns have upper bound infinity
  • collb: all columns have lower bound 0
  • obj: all variables have 0 objective coefficient
  • rowsen: all rows are >=
  • rowrhs: all right hand sides are 0
  • rowrng: 0 for the ranged rows
*/ virtual void loadProblem(const CoinPackedMatrix& matrix, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng); /** Load in an problem by assuming ownership of the arguments (the constraints on the rows are given by sense/rhs/range triplets). For default values see the previous method.
WARNING: The arguments passed to this method will be freed using the C++ delete and delete[] functions. */ virtual void assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, char*& rowsen, double*& rowrhs, double*& rowrng); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const double* rowlb, const double* rowub); /** Just like the other loadProblem() methods except that the matrix is given in a standard column major ordered format (without gaps). */ virtual void loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng); using OsiSolverInterface::readMps ; /** Read an mps file from the given filename */ virtual int readMps(const char *filename, const char *extension = "mps"); /** Write the problem into an mps file of the given filename. If objSense is non zero then -1.0 forces the code to write a maximization objective and +1.0 to write a minimization one. If 0.0 then solver can do what it wants */ virtual void writeMps(const char *filename, const char *extension = "mps", double objSense=0.0) const; //@} //--------------------------------------------------------------------------- /**@name OSL specific public interfaces */ //@{ /// Get pointer to Vol model VOL_problem* volprob() { return &volprob_; } //@} //--------------------------------------------------------------------------- /**@name Constructors and destructors */ //@{ /// Default Constructor OsiTestSolverInterface (); /// Clone virtual OsiSolverInterface * clone(bool copyData = true) const; /// Copy constructor OsiTestSolverInterface (const OsiTestSolverInterface &); /// Assignment operator OsiTestSolverInterface & operator=(const OsiTestSolverInterface& rhs); /// Destructor virtual ~OsiTestSolverInterface (); //@} //--------------------------------------------------------------------------- protected: ///@name Protected methods //@{ /** Apply a row cut (append to constraint matrix). */ virtual void applyRowCut(const OsiRowCut& rc); /** Apply a column cut (adjust one or more bounds). */ virtual void applyColCut(const OsiColCut& cc); //@} //--------------------------------------------------------------------------- private: /**@name Methods of VOL_user_hooks */ //@{ /// compute reduced costs virtual int compute_rc(const VOL_dvector& u, VOL_dvector& rc); /// Solve the subproblem for the subgradient step. virtual int solve_subproblem(const VOL_dvector& dual, const VOL_dvector& rc, double& lcost, VOL_dvector& x, VOL_dvector& v, double& pcost); /** Starting from the primal vector x, run a heuristic to produce an integer solution. This is not done in LP solving. */ virtual int heuristics(const VOL_problem& /*p*/, const VOL_dvector& /*x*/, double& heur_val) { heur_val = COIN_DBL_MAX; return 0; } //@} //--------------------------------------------------------------------------- private: /**@name Private helper methods */ //@{ /** Update the row ordered matrix from the column ordered one */ void updateRowMatrix_() const; /** Update the column ordered matrix from the row ordered one */ void updateColMatrix_() const; /** Test whether the Volume Algorithm can be applied to the given problem. */ void checkData_() const; /** Compute the reduced costs (rc) with respect to the dual values given in u. */ void compute_rc_(const double* u, double* rc) const; /** A method deleting every member data */ void gutsOfDestructor_(); /** A method allocating sufficient space for the rim vectors corresponding to the rows. */ void rowRimAllocator_(); /** A method allocating sufficient space for the rim vectors corresponding to the columns. */ void colRimAllocator_(); /** Reallocate the rim arrays corresponding to the rows. */ void rowRimResize_(const int newSize); /** Reallocate the rim arrays corresponding to the columns. */ void colRimResize_(const int newSize); /** For each row convert LB/UB style row constraints to sense/rhs style. */ void convertBoundsToSenses_(); /** For each row convert sense/rhs style row constraints to LB/UB style. */ void convertSensesToBounds_(); /** test whether the given matrix is 0/1/-1 entries only. */ bool test_zero_one_minusone_(const CoinPackedMatrix& m) const; //@} //--------------------------------------------------------------------------- private: //--------------------------------------------------------------------------- /**@name The problem matrix in row and column ordered forms
Note that at least one of the matrices is always current. */ //@{ /// A flag indicating whether the row ordered matrix is up-to-date mutable bool rowMatrixCurrent_; /// The problem matrix in a row ordered form mutable CoinPackedMatrix rowMatrix_; /// A flag indicating whether the column ordered matrix is up-to-date mutable bool colMatrixCurrent_; /// The problem matrix in a column ordered form mutable CoinPackedMatrix colMatrix_; //@} //--------------------------------------------------------------------------- /**@name Data members used when 0/1/-1 matrix is detected */ //@{ /// An indicator whether the matrix is 0/1/-1 bool isZeroOneMinusOne_; /// The row ordered matrix without the elements OsiVolMatrixOneMinusOne_* rowMatrixOneMinusOne_; /// The column ordered matrix without the elements OsiVolMatrixOneMinusOne_* colMatrixOneMinusOne_; //@} //--------------------------------------------------------------------------- /**@name The rim vectors */ //@{ /// Pointer to dense vector of structural variable upper bounds double *colupper_; /// Pointer to dense vector of structural variable lower bounds double *collower_; /// Pointer to dense vector of bool to indicate if column is continuous bool *continuous_; /// Pointer to dense vector of slack variable upper bounds double *rowupper_; /// Pointer to dense vector of slack variable lower bounds double *rowlower_; /// Pointer to dense vector of row sense indicators char *rowsense_; /// Pointer to dense vector of row right-hand side values double *rhs_; /** Pointer to dense vector of slack upper bounds for range constraints (undefined for non-range rows). */ double *rowrange_; /// Pointer to dense vector of objective coefficients double *objcoeffs_; //@} //--------------------------------------------------------------------------- /// Sense of objective (1 for min; -1 for max) double objsense_; //--------------------------------------------------------------------------- /**@name The solution */ //@{ /// Pointer to dense vector of primal structural variable values double *colsol_; /// Pointer to dense vector of dual row variable values double *rowprice_; /// Pointer to dense vector of reduced costs double *rc_; /// Pointer to dense vector of left hand sides (row activity levels) double *lhs_; /// The Lagrangean cost, a lower bound on the objective value double lagrangeanCost_; //@} //--------------------------------------------------------------------------- /** An array to store the hotstart information between solveHotStart() calls */ double *rowpriceHotStart_; /// allocated size of the row related rim vectors int maxNumrows_; /// allocated size of the column related rim vectors int maxNumcols_; /// The volume solver VOL_problem volprob_; }; /** A function that tests the methods in the OsiTestSolverInterface class. */ void OsiTestSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir); #endif DyLP-1.10.4/Osi/test/OsiTestSolverInterfaceIO.cpp0000644000175200017520000003067011536304054020135 0ustar coincoin// Copyright (C) 2001, International Business Machines // Corporation and others. All Rights Reserved. // This file is licensed under the terms of Eclipse Public License (EPL). // this is a copy of OsiVolSolverInterface (trunk rev. 1466) renamed to OsiTestSolverInterface #include "CoinPragma.hpp" #include #include #include "CoinHelperFunctions.hpp" #include "CoinMpsIO.hpp" #include "OsiTestSolverInterface.hpp" //############################################################################# void OsiTestSolverInterface::initFromRlbRub(const int rownum, const double* rowlb, const double* rowub) { if (maxNumrows_ > 0) { rowRimAllocator_(); if (rowub) { CoinDisjointCopyN(rowub, rownum, rowupper_); } else { CoinFillN(rowupper_, rownum, getInfinity()); } if (rowlb) { CoinDisjointCopyN(rowlb, rownum, rowlower_); } else { CoinFillN(rowlower_, rownum, -getInfinity()); } // Set the initial dual solution CoinFillN(rowprice_, rownum, 0.0); convertBoundsToSenses_(); } } //############################################################################# void OsiTestSolverInterface::initFromRhsSenseRange(const int rownum, const char* rowsen, const double* rowrhs, const double* rowrng) { if (maxNumrows_ > 0) { rowRimAllocator_(); if (rowsen) { CoinDisjointCopyN(rowsen, rownum, rowsense_); } else { CoinFillN(rowsense_, rownum, 'G'); } if (rowrhs) { CoinDisjointCopyN(rowrhs, rownum, rhs_); } else { CoinFillN(rhs_, rownum, 0.0); } if (rowrng) { CoinDisjointCopyN(rowrng, rownum, rowrange_); } else { CoinFillN(rowrange_, rownum, 0.0); } // Set the initial dual solution CoinFillN(rowprice_, rownum, 0.0); convertSensesToBounds_(); } } //############################################################################# void OsiTestSolverInterface::initFromClbCubObj(const int colnum, const double* collb, const double* colub, const double* obj) { if (maxNumcols_ > 0) { colRimAllocator_(); if (colub) { CoinDisjointCopyN(colub, colnum, colupper_); } else { CoinFillN(colupper_, colnum, getInfinity()); } if (collb) { CoinDisjointCopyN(collb, colnum, collower_); } else { CoinFillN(collower_, colnum, 0.0); } CoinFillN(continuous_,colnum,true); if (obj) { CoinDisjointCopyN(obj, colnum, objcoeffs_); } else { CoinFillN(objcoeffs_, colnum, 0.0); } int c; for ( c=0; c((1+colMatrix_.getExtraGap()) * colMatrix_.getMinorDim()); } else { rowMatrix_.setExtraGap(matrix.getExtraGap()); rowMatrix_.setExtraMajor(matrix.getExtraMajor()); rowMatrix_ = matrix; rowMatrixCurrent_ = true; colMatrixCurrent_ = false; maxNumcols_ = static_cast((1+rowMatrix_.getExtraGap()) * rowMatrix_.getMinorDim()); maxNumrows_ = rowMatrix_.getMaxMajorDim(); } initFromRlbRub(rownum, rowlb, rowub); initFromClbCubObj(colnum, collb, colub, obj); } //----------------------------------------------------------------------- void OsiTestSolverInterface::assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, double*& rowlb, double*& rowub) { gutsOfDestructor_(); const int rownum = matrix->getNumRows(); const int colnum = matrix->getNumCols(); maxNumcols_ = colnum; maxNumrows_ = rownum; if (matrix->isColOrdered()) { colMatrix_.swap(*matrix); colMatrixCurrent_ = true; rowMatrixCurrent_ = false; } else { rowMatrix_.swap(*matrix); rowMatrixCurrent_ = true; colMatrixCurrent_ = false; } delete matrix; matrix = 0; rowupper_ = rowub; rowub = 0; rowlower_ = rowlb; rowlb = 0; colupper_ = colub; colub = 0; collower_ = collb; collb = 0; objcoeffs_ = obj; obj = 0; if (maxNumrows_ > 0) { if (!rowupper_) { rowupper_ = new double[maxNumrows_]; CoinFillN(rowupper_, rownum, getInfinity()); } if (!rowlower_) { rowlower_ = new double[maxNumrows_]; CoinFillN(rowlower_, rownum, -getInfinity()); } rowsense_ = new char[maxNumrows_]; rhs_ = new double[maxNumrows_]; rowrange_ = new double[maxNumrows_]; rowprice_ = new double[maxNumrows_]; lhs_ = new double[maxNumrows_]; // Set the initial dual solution CoinFillN(rowprice_, rownum, 0.0); convertBoundsToSenses_(); } if (maxNumcols_ > 0) { if (!colupper_) { colupper_ = new double[maxNumcols_]; CoinFillN(colupper_, colnum, getInfinity()); } if (!collower_) { collower_ = new double[maxNumcols_]; CoinFillN(collower_, colnum, -getInfinity()); } if (!objcoeffs_) { objcoeffs_ = new double[maxNumcols_]; CoinFillN(objcoeffs_, colnum, -getInfinity()); } colsol_ = new double[maxNumcols_]; int c; for ( c=0; c((1+colMatrix_.getExtraGap()) * colMatrix_.getMinorDim()); } else { rowMatrix_ = matrix; rowMatrixCurrent_ = true; colMatrixCurrent_ = false; maxNumcols_ = static_cast((1+rowMatrix_.getExtraGap()) * rowMatrix_.getMinorDim()); maxNumrows_ = rowMatrix_.getMaxMajorDim(); } initFromRhsSenseRange(rownum, rowsen, rowrhs, rowrng); initFromClbCubObj(colnum, collb, colub, obj); } //----------------------------------------------------------------------- void OsiTestSolverInterface::assignProblem(CoinPackedMatrix*& matrix, double*& collb, double*& colub, double*& obj, char*& rowsen, double*& rowrhs, double*& rowrng) { gutsOfDestructor_(); const int rownum = matrix->getNumRows(); const int colnum = matrix->getNumCols(); maxNumcols_ = colnum; maxNumrows_ = rownum; if (matrix->isColOrdered()) { colMatrix_.swap(*matrix); colMatrixCurrent_ = true; rowMatrixCurrent_ = false; } else { rowMatrix_.swap(*matrix); rowMatrixCurrent_ = true; colMatrixCurrent_ = false; } delete matrix; matrix = 0; rowsense_ = rowsen; rowsen = 0; rhs_ = rowrhs; rowrhs = 0; rowrange_ = rowrng; rowrng = 0; colupper_ = colub; colub = 0; collower_ = collb; collb = 0; objcoeffs_ = obj; obj = 0; if (maxNumrows_ > 0) { if (!rowsense_) { rowsense_ = new char[maxNumrows_]; CoinFillN(rowsense_, rownum, 'G'); } if (!rhs_) { rhs_ = new double[maxNumrows_]; CoinFillN(rhs_, rownum, 0.0); } if (!rowrange_) { rowrange_ = new double[maxNumrows_]; CoinFillN(rowrange_, rownum, 0.0); } rowlower_ = new double[maxNumrows_]; rowupper_ = new double[maxNumrows_]; rowprice_ = new double[maxNumrows_]; lhs_ = new double[maxNumrows_]; // Set the initial dual solution CoinFillN(rowprice_, rownum, 0.0); convertSensesToBounds_(); } if (maxNumcols_ > 0) { if (!colupper_) { colupper_ = new double[maxNumcols_]; CoinFillN(colupper_, colnum, getInfinity()); } if (!collower_) { collower_ = new double[maxNumcols_]; CoinFillN(collower_, colnum, -getInfinity()); } if (!objcoeffs_) { objcoeffs_ = new double[maxNumcols_]; CoinFillN(objcoeffs_, colnum, -getInfinity()); } colsol_ = new double[maxNumcols_]; int c; for ( c=0; c((1+colMatrix_.getExtraGap()) * colMatrix_.getMinorDim()); initFromRlbRub(numrows, rowlb, rowub); initFromClbCubObj(numcols, collb, colub, obj); } //----------------------------------------------------------------------- void OsiTestSolverInterface::loadProblem(const int numcols, const int numrows, const int* start, const int* index, const double* value, const double* collb, const double* colub, const double* obj, const char* rowsen, const double* rowrhs, const double* rowrng) { gutsOfDestructor_(); colMatrix_.copyOf(true, numrows, numcols, start[numcols], value, index, start, 0); colMatrixCurrent_ = true; rowMatrixCurrent_ = false; maxNumcols_ = colMatrix_.getMaxMajorDim(); maxNumrows_ = static_cast((1+colMatrix_.getExtraGap()) * colMatrix_.getMinorDim()); initFromRhsSenseRange(numrows, rowsen, rowrhs, rowrng); initFromClbCubObj(numcols, collb, colub, obj); } //----------------------------------------------------------------------- int OsiTestSolverInterface::readMps(const char *filename, const char *extension) { CoinMpsIO reader; reader.setInfinity(getInfinity()); int retVal = reader.readMps(filename, extension); if (retVal == 0) { loadProblem(*reader.getMatrixByCol(), reader.getColLower(),reader.getColUpper(), reader.getObjCoefficients(), reader.getRowLower(),reader.getRowUpper()); int nc = getNumCols(); assert (continuous_); CoinFillN(continuous_, nc, true); } return retVal; } //----------------------------------------------------------------------- void OsiTestSolverInterface::writeMps(const char *filename, const char *extension, double /*objSense*/) const { CoinMpsIO writer; writer.setMpsData(*getMatrixByCol(), getInfinity(), getColLower(), getColUpper(), getObjCoefficients(), reinterpret_cast (NULL) /*integrality*/, getRowLower(), getRowUpper(), reinterpret_cast (NULL) /*colnam*/, reinterpret_cast (NULL) /*rownam*/); std::string fname = filename; if (extension) { if (extension[0] != '\0' && extension[0] != '.') fname += "." ; } fname += extension; writer.writeMps(fname.c_str()); } DyLP-1.10.4/Osi/test/unitTest.cpp0000644000175200017520000003042312104023262015101 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // Test individual classes or groups of classes // This file is licensed under the terms of Eclipse Public License (EPL). // $Id: unitTest.cpp 1891 2013-02-04 21:22:58Z stefan $ #include "CoinPragma.hpp" #include "OsiConfig.h" #include #include "OsiUnitTests.hpp" #include "OsiSolverInterface.hpp" #include "OsiTestSolverInterface.hpp" using namespace OsiUnitTest; /* Currently the Osi unit test is configured to exercise only the external solvers. The Osi interfaces for Coin solvers have been moved out to the project's repository and each has its own private Osi unit test. This unit test will include as many external solvers as are available. If none of them are available, the OsiTestSolver (currently a clone of Vol) will be used. If any other solver is available, its presence will disable use of the test solver. You can disable it manually by undefining USETESTSOLVER. You may want to use the Osi unit test to compare two or more Coin solvers. In particular, OsiSolverInterfaceMpsUnitTest, which runs the Netlib problem set, is set up for exactly this sort of comparison. To take advantage of it, you'll need to edit this file and Makefile in order to get it to work. */ #define USETESTSOLVER /* Some convenient undef's, to make it easy to isolate a particular solver. Uncomment to disable a solver that's included in the build. Leave them commented if you're happy with running the unitTest for all solvers in the build. */ // #undef COIN_HAS_XPR // #undef COIN_HAS_CPX // #undef COIN_HAS_GLPK // #undef COIN_HAS_MSK // #undef COIN_HAS_GRB // #undef COIN_HAS_SOPLEX #ifdef COIN_HAS_XPR #include "OsiXprSolverInterface.hpp" #ifdef USETESTSOLVER #undef USETESTSOLVER #endif #endif #ifdef COIN_HAS_CPX #include "OsiCpxSolverInterface.hpp" #undef USETESTSOLVER #ifdef USETESTSOLVER #undef USETESTSOLVER #endif #endif #ifdef COIN_HAS_GLPK #include "OsiGlpkSolverInterface.hpp" #ifdef USETESTSOLVER #undef USETESTSOLVER #endif #endif #ifdef COIN_HAS_MSK #include "OsiMskSolverInterface.hpp" #ifdef USETESTSOLVER #undef USETESTSOLVER #endif #endif #ifdef COIN_HAS_GRB #include "OsiGrbSolverInterface.hpp" #ifdef USETESTSOLVER #undef USETESTSOLVER #endif #endif #ifdef COIN_HAS_SOPLEX #include "OsiSpxSolverInterface.hpp" #ifdef USETESTSOLVER #undef USETESTSOLVER #endif #endif #ifdef USETESTSOLVER #include "OsiTestSolverInterface.hpp" #endif //---------------------------------------------------------------- // to see parameter list, call unitTest -usage //---------------------------------------------------------------- int main (int argc, const char *argv[]) { /* Start off with various bits of initialisation that don't really belong anywhere else. First off, synchronise C++ stream i/o with C stdio. This makes debugging output a bit more comprehensible. It still suffers from interleave of cout (stdout) and cerr (stderr), but -nobuf deals with that. */ std::ios::sync_with_stdio() ; /* Suppress an popup window that Windows shows in response to a crash. See note at head of file. */ WindowsErrorPopupBlocker(); /* Might as well make use of this convenient Xpress feature. */ #ifdef COIN_HAS_XPR OsiXprSolverInterface::setLogFileName("xprCallTrace.txt"); #endif /* Process command line parameters. */ std::map parms ; if (processParameters(argc,argv,parms) == false) return 1; std::string mpsDir = parms["-mpsDir"] ; std::string netlibDir = parms["-netlibDir"] ; /* Test Osi{Row,Col}Cut routines. */ #ifdef COIN_HAS_XPR { OsiXprSolverInterface xprSi; testingMessage( "Testing OsiRowCut with OsiXprSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&xprSi,mpsDir), {}, xprSi, "rowcut unittest"); } { OsiXprSolverInterface xprSi; testingMessage( "Testing OsiColCut with OsiXprSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&xprSi,mpsDir), {}, xprSi, "colcut unittest"); } { OsiXprSolverInterface xprSi; testingMessage( "Testing OsiRowCutDebugger with OsiXprSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutDebuggerUnitTest(&xprSi,mpsDir), {}, xprSi, "rowcut debugger unittest"); } #endif #ifdef COIN_HAS_CPX { OsiCpxSolverInterface cpxSi; testingMessage( "Testing OsiRowCut with OsiCpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&cpxSi,mpsDir), {}, cpxSi, "rowcut unittest"); } { OsiCpxSolverInterface cpxSi; testingMessage( "Testing OsiColCut with OsiCpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&cpxSi,mpsDir), {}, cpxSi, "colcut unittest"); } { OsiCpxSolverInterface cpxSi; testingMessage( "Testing OsiRowCutDebugger with OsiCpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutDebuggerUnitTest(&cpxSi,mpsDir), {}, cpxSi, "rowcut debugger unittest"); } #endif #ifdef USETESTSOLVER { OsiTestSolverInterface testSi; testingMessage( "Testing OsiRowCut with OsiTestSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&testSi,mpsDir), {}, testSi, "rowcut unittest"); } { OsiTestSolverInterface testSi; testingMessage( "Testing OsiColCut with OsiTestSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&testSi,mpsDir), {}, testSi, "colcut unittest"); } #endif #ifdef COIN_HAS_GLPK { OsiGlpkSolverInterface glpkSi; testingMessage( "Testing OsiRowCut with OsiGlpkSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&glpkSi,mpsDir), {}, glpkSi, "rowcut unittest"); } { OsiGlpkSolverInterface glpkSi; testingMessage( "Testing OsiColCut with OsiGlpkSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&glpkSi,mpsDir), {}, glpkSi, "colcut unittest"); } { OsiGlpkSolverInterface glpkSi; testingMessage( "Testing OsiRowCutDebugger with OsiGlpkSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutDebuggerUnitTest(&glpkSi,mpsDir), {}, glpkSi, "rowcut debugger unittest"); } #endif #ifdef COIN_HAS_MSK { OsiMskSolverInterface MskSi; testingMessage( "Testing OsiRowCut with OsiMskSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&MskSi,mpsDir), {}, MskSi, "rowcut unittest"); } { OsiMskSolverInterface MskSi; testingMessage( "Testing OsiColCut with OsiMskSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&MskSi,mpsDir), {}, MskSi, "colcut unittest"); } { OsiMskSolverInterface MskSi; testingMessage( "Testing OsiRowCutDebugger with OsiMskSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutDebuggerUnitTest(&MskSi,mpsDir), {}, MskSi, "rowcut debugger unittest"); } #endif #ifdef COIN_HAS_GRB { OsiGrbSolverInterface grbSi; testingMessage( "Testing OsiRowCut with OsiGrbSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&grbSi,mpsDir), {}, grbSi, "rowcut unittest"); } { OsiGrbSolverInterface grbSi; testingMessage( "Testing OsiColCut with OsiGrbSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&grbSi,mpsDir), {}, grbSi, "colcut unittest"); } { OsiGrbSolverInterface grbSi; testingMessage( "Testing OsiRowCutDebugger with OsiGrbSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutDebuggerUnitTest(&grbSi,mpsDir), {}, grbSi, "rowcut debugger unittest"); } #endif #ifdef COIN_HAS_SOPLEX { OsiSpxSolverInterface spxSi; testingMessage( "Testing OsiRowCut with OsiSpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutUnitTest(&spxSi,mpsDir), {}, spxSi, "rowcut unittest"); } { OsiSpxSolverInterface spxSi; testingMessage( "Testing OsiColCut with OsiSpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiColCutUnitTest(&spxSi,mpsDir), {}, spxSi, "colcut unittest"); } { OsiSpxSolverInterface spxSi; testingMessage( "Testing OsiRowCutDebugger with OsiSpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiRowCutDebuggerUnitTest(&spxSi,mpsDir), {}, spxSi, "rowcut debugger unittest"); } #endif testingMessage( "Testing OsiCuts\n" ); OSIUNITTEST_CATCH_ERROR(OsiCutsUnitTest(), {}, "osi", "osicuts unittest"); /* Testing OsiCuts only? A useful option when doing memory access and leak checks. Keeps the run time to something reasonable. */ if (parms.find("-cutsOnly") != parms.end()) { testingMessage( "Stopping after OsiCuts tests.\n" ); return 0; } /* Run the OsiXXX class test for each solver. It's up to the solver implementor to decide whether or not to run OsiSolverInterfaceCommonUnitTest. Arguably this should be required. */ #ifdef COIN_HAS_XPR testingMessage( "Testing OsiXprSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiXprSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "xpress", "osixpr unittest"); #endif #ifdef COIN_HAS_CPX testingMessage( "Testing OsiCpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiCpxSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "cplex", "osicpx unittest"); #endif #ifdef USETESTSOLVER testingMessage( "Testing OsiTestSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiTestSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "vol", "ositestsolver unittest"); #endif #ifdef COIN_HAS_GLPK testingMessage( "Testing OsiGlpkSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiGlpkSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "glpk", "osiglpk unittest"); #endif #ifdef COIN_HAS_MSK testingMessage( "Testing OsiMskSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiMskSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "mosek", "osimsk unittest"); #endif #ifdef COIN_HAS_GRB testingMessage( "Testing OsiGrbSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiGrbSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "gurobi", "osigrb unittest"); #endif #ifdef COIN_HAS_SOPLEX testingMessage( "Testing OsiSpxSolverInterface\n" ); OSIUNITTEST_CATCH_ERROR(OsiSpxSolverInterfaceUnitTest(mpsDir,netlibDir), {}, "soplex", "osispx unittest"); #endif /* Each solver has run its specialised unit test. Check now to see if we need to run through the Netlib problems. */ if (parms.find("-testOsiSolverInterface") != parms.end()) { // Create vector of solver interfaces std::vector vecSi; # if COIN_HAS_XPR OsiSolverInterface * xprSi = new OsiXprSolverInterface; vecSi.push_back(xprSi); # endif # if COIN_HAS_CPX OsiSolverInterface * cpxSi = new OsiCpxSolverInterface; vecSi.push_back(cpxSi); # endif # if COIN_HAS_GLPK OsiSolverInterface * glpkSi = new OsiGlpkSolverInterface; glpkSi->setHintParam(OsiDoPresolveInInitial,true,OsiHintTry) ; glpkSi->setHintParam(OsiDoReducePrint,true,OsiHintDo) ; vecSi.push_back(glpkSi); # endif # if COIN_HAS_MSK OsiSolverInterface * MskSi = new OsiMskSolverInterface; vecSi.push_back(MskSi); # endif # if COIN_HAS_GRB OsiSolverInterface * grbSi = new OsiGrbSolverInterface; vecSi.push_back(grbSi); # endif # if COIN_HAS_SOPLEX OsiSolverInterface * spxSi = new OsiSpxSolverInterface; vecSi.push_back(spxSi); # endif # ifdef USETESTSOLVER /* The test solver is normally Vol, which can't do any of the netlib problems. So let's not try. */ { std::string solverName ; OsiSolverInterface * testSi = new OsiTestSolverInterface; testSi->getStrParam(OsiSolverName,solverName) ; if (solverName != "vol") { vecSi.push_back(testSi); } else { testingMessage("Test solver vol cannot do Netlib. Skipping.\n") ; } } # endif if (vecSi.size() > 0) { testingMessage( "Testing OsiSolverInterface on Netlib problems.\n" ); OSIUNITTEST_CATCH_ERROR(OsiSolverInterfaceMpsUnitTest(vecSi,netlibDir), {}, "osi", "netlib unittest"); } unsigned int i; for (i=0; i nerrors_expected) std::cerr << "Tests completed with " << nerrors - nerrors_expected << " unexpected errors." << std::endl ; else std::cerr << "All tests completed successfully\n"; return nerrors - nerrors_expected; } DyLP-1.10.4/Osi/test/OsiXprSolverInterfaceTest.cpp0000644000175200017520000006431211612354477020410 0ustar coincoin// Copyright (C) 2000, International Business Machines // Corporation and others. All Rights Reserved. // This file is licensed under the terms of Eclipse Public License (EPL). #include "CoinPragma.hpp" #include "OsiConfig.h" //#include #include "OsiUnitTests.hpp" #include "OsiXprSolverInterface.hpp" #include "OsiCuts.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" // Added so build windows build with dsp files works, // when not building with xpress. #ifdef COIN_HAS_XPR #define __ANSIC_ #include #undef __ANSIC_ //----------------------------------------------------------------------- // Test XPRESS-MP solution methods. void OsiXprSolverInterfaceUnitTest(const std::string & mpsDir, const std::string & netlibDir) { unsigned int numInstancesStart = OsiXprSolverInterface::getNumInstances(); // Test default constructor { OsiXprSolverInterface m; OSIUNITTEST_ASSERT_ERROR(m.xprProbname_ == "", {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.collower_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colupper_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.vartype_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowlower_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowupper_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowprice_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colsol_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsol_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByCol_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.ivarind_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.ivartype_ == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 0, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getApplicationData() == NULL, {}, "xpress", "default constructor"); OSIUNITTEST_ASSERT_ERROR(OsiXprSolverInterface::getNumInstances() == numInstancesStart+1, {}, "xpress", "number of instances during first test"); int i=2346; m.setApplicationData(&i); OSIUNITTEST_ASSERT_ERROR(*((int *)(m.getApplicationData())) == i, {}, "xpress", "default constructor"); } OSIUNITTEST_ASSERT_ERROR(OsiXprSolverInterface::getNumInstances() == numInstancesStart, {}, "xpress", "number of instances after first test"); { CoinRelFltEq eq; OsiXprSolverInterface m; OSIUNITTEST_ASSERT_ERROR(OsiXprSolverInterface::getNumInstances() == numInstancesStart+1, {}, "xpress", "number of instances"); std::string fn = mpsDir+"exmip1"; m.readMps(fn.c_str()); // This assert fails on windows because fn is mixed case and xprProbname_is uppercase. //OSIUNITTEST_ASSERT_ERROR( m.xprProbname_ == fn, {}, "xpress", "exmip1 problem name" ); // Test copy constructor and assignment operator { OsiXprSolverInterface lhs; { OsiXprSolverInterface im(m); OsiXprSolverInterface imC1(im); OSIUNITTEST_ASSERT_ERROR(imC1.getNumCols() == im.getNumCols(), {}, "xpress", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumRows() == im.getNumRows(), {}, "xpress", "copy constructor"); OsiXprSolverInterface imC2(im); OSIUNITTEST_ASSERT_ERROR(imC2.getNumCols() == im.getNumCols(), {}, "xpress", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumRows() == im.getNumRows(), {}, "xpress", "copy constructor"); lhs = imC2; } // Test that lhs has correct values even though rhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.getNumCols() == m.getNumCols(), {}, "xpress", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumRows() == m.getNumRows(), {}, "xpress", "copy constructor"); } // Test clone { OsiXprSolverInterface xpressSi(m); OsiSolverInterface * siPtr = &xpressSi; OsiSolverInterface * siClone = siPtr->clone(); OsiXprSolverInterface * xpressClone = dynamic_cast(siClone); OSIUNITTEST_ASSERT_ERROR(xpressClone != NULL, {}, "xpress", "clone"); OSIUNITTEST_ASSERT_ERROR(xpressClone->getNumRows() == xpressSi.getNumRows(), {}, "xpress", "clone"); OSIUNITTEST_ASSERT_ERROR(xpressClone->getNumCols() == m.getNumCols(), {}, "xpress", "clone"); delete siClone; } // Test infinity { OsiXprSolverInterface si; OSIUNITTEST_ASSERT_ERROR(si.getInfinity() == XPRS_PLUSINFINITY, {}, "xpress", "value for infinity"); } { OsiXprSolverInterface xpressSi(m); int nc = xpressSi.getNumCols(); int nr = xpressSi.getNumRows(); const double * cl = xpressSi.getColLower(); const double * cu = xpressSi.getColUpper(); const double * rl = xpressSi.getRowLower(); const double * ru = xpressSi.getRowUpper(); OSIUNITTEST_ASSERT_ERROR(nc == 8, return, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(nr == 5, return, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[0],2.5), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[1],0.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[1],4.1), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[2],1.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[0],2.5), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[4],3.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[1],2.1), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[4],15.), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(!eq(cl[3],1.2345), {}, "xpress", "set col lower"); xpressSi.setColLower( 3, 1.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cl[3],1.2345), {}, "xpress", "set col lower"); OSIUNITTEST_ASSERT_ERROR(!eq(cu[4],10.2345), {}, "xpress", "set col upper"); xpressSi.setColUpper( 4, 10.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cu[4],10.2345), {}, "xpress", "set col upper"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[0], 1.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[1], 0.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[2], 0.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[3], 0.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[4], 2.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[5], 0.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[6], 0.0), {}, "xpress", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(xpressSi.getObjCoefficients()[7],-1.0), {}, "xpress", "read and copy exmip1"); } // Test getMatrixByRow method { const OsiXprSolverInterface si(m); const CoinPackedMatrix * smP = si.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(smP->getMajorDim() == 5, return, "xpress", "getMatrixByRow: major dim"); OSIUNITTEST_ASSERT_ERROR(smP->getNumElements() == 14, return, "xpress", "getMatrixByRow: num elements"); CoinRelFltEq eq; const double * ev = smP->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[0], 3.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[1], 1.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[2], -2.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[3], -1.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[4], -1.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[5], 2.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[6], 1.1), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[7], 1.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[8], 1.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[9], 2.8), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], -1.2), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "xpress", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "xpress", "getMatrixByRow: elements"); const int * mi = smP->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "xpress", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "xpress", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "xpress", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "xpress", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "xpress", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "xpress", "getMatrixByRow: vector starts"); const int * ei = smP->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "xpress", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "xpress", "getMatrixByRow: indices"); } //-------------- // Test rowsense, rhs, rowrange, getMatrixByRow { OsiXprSolverInterface lhs; { OsiXprSolverInterface siC1(m); OSIUNITTEST_ASSERT_WARNING(siC1.rowrange_ == NULL, {}, "xpress", "row range"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsense_ == NULL, {}, "xpress", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1.rhs_ == NULL, {}, "xpress", "right hand side"); assert( m.rowrange_==NULL ); assert( m.rowsense_==NULL ); assert( m.rhs_==NULL ); const char * siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "xpress", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "xpress", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "xpress", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "xpress", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "xpress", "row sense"); const double * siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "xpress", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "xpress", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "xpress", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "xpress", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "xpress", "right hand side"); const double * siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "xpress", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "xpress", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "xpress", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "xpress", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "xpress", "row range"); const CoinPackedMatrix * siC1mbr = siC1.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(siC1mbr != NULL, {}, "xpress", "matrix by row"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getMajorDim() == 5, return, "xpress", "matrix by row: major dim"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getNumElements() == 14, return, "xpress", "matrix by row: num elements"); const double * ev = siC1mbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "xpress", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "xpress", "matrix by row: elements"); const CoinBigIndex * mi = siC1mbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "xpress", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "xpress", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "xpress", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "xpress", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "xpress", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "xpress", "matrix by row: vector starts"); const int * ei = siC1mbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "xpress", "matrix by row: indices"); OSIUNITTEST_ASSERT_WARNING(siC1rs == siC1.getRowSense(), {}, "xpress", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1rhs == siC1.getRightHandSide(), {}, "xpress", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1rr == siC1.getRowRange(), {}, "xpress", "row range"); // Change XPRESS Model by adding free row OsiRowCut rc; rc.setLb(-COIN_DBL_MAX); rc.setUb( COIN_DBL_MAX); OsiCuts cuts; cuts.insert(rc); siC1.applyCuts(cuts); // Since model was changed, test that cached data is now freed. OSIUNITTEST_ASSERT_ERROR(siC1.rowrange_ == NULL, {}, "xpress", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsense_ == NULL, {}, "xpress", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rhs_ == NULL, {}, "xpress", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByRow_ == NULL, {}, "xpress", "free cached data after adding row"); siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "xpress", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "xpress", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "xpress", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "xpress", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "xpress", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[5] == 'N', {}, "xpress", "row sense after adding row"); siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "xpress", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "xpress", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "xpress", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "xpress", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "xpress", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[5],0.0), {}, "xpress", "right hand side after adding row"); siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "xpress", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "xpress", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "xpress", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "xpress", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "xpress", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[5],0.0), {}, "xpress", "row range after adding row"); lhs = siC1; } // Test that lhs has correct values even though siC1 has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.rowrange_ == NULL, {}, "xpress", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsense_ == NULL, {}, "xpress", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rhs_ == NULL, {}, "xpress", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByRow_ == NULL, {}, "xpress", "freed origin after assignment"); const char * lhsrs = lhs.getRowSense(); OSIUNITTEST_ASSERT_ERROR(lhsrs[0] == 'G', {}, "xpress", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[1] == 'L', {}, "xpress", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[2] == 'E', {}, "xpress", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[3] == 'R', {}, "xpress", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[4] == 'R', {}, "xpress", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[5] == 'N', {}, "xpress", "row sense after assignment"); const double * lhsrhs = lhs.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[0],2.5), {}, "xpress", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[1],2.1), {}, "xpress", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[2],4.0), {}, "xpress", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[3],5.0), {}, "xpress", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[4],15.), {}, "xpress", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[5],0.0), {}, "xpress", "right hand side after assignment"); const double *lhsrr = lhs.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[0],0.0), {}, "xpress", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[1],0.0), {}, "xpress", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[2],0.0), {}, "xpress", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[3],5.0-1.8), {}, "xpress", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[4],15.0-3.0), {}, "xpress", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[5],0.0), {}, "xpress", "row range after assignment"); const CoinPackedMatrix * lhsmbr = lhs.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(lhsmbr != NULL, {}, "xpress", "matrix by row after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getMajorDim() == 6, return, "xpress", "matrix by row after assignment: major dim"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getNumElements() == 14, return, "xpress", "matrix by row after assignment: num elements"); const double * ev = lhsmbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "xpress", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "xpress", "matrix by row after assignment: elements"); const CoinBigIndex * mi = lhsmbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "xpress", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "xpress", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "xpress", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "xpress", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "xpress", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "xpress", "matrix by row after assignment: vector starts"); const int * ei = lhsmbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "xpress", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "xpress", "matrix by row after assignment: indices"); } OSIUNITTEST_ASSERT_ERROR(OsiXprSolverInterface::getNumInstances() == numInstancesStart+1, {}, "xpress", "number of instances"); } OSIUNITTEST_ASSERT_ERROR(OsiXprSolverInterface::getNumInstances() == numInstancesStart, {}, "xpress", "number of instances at finish"); // Do common solverInterface testing by calling the // base class testing method. { OsiXprSolverInterface m; OsiSolverInterfaceCommonUnitTest(&m, mpsDir, netlibDir); } } #endif DyLP-1.10.4/Osi/test/Makefile.in0000644000175200017520000006203212502175645014643 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = unitTest$(EXEEXT) # Depending of what solvers are available, we add the corresponding files, # libraries and include dirs @COIN_HAS_CPX_TRUE@am__append_1 = OsiCpxSolverInterfaceTest.cpp @COIN_HAS_CPX_TRUE@am__append_2 = -I`$(CYGPATH_W) $(CPXINCDIR)` \ @COIN_HAS_CPX_TRUE@ -I`$(CYGPATH_W) $(srcdir)/../src/OsiCpx` @COIN_HAS_CPX_TRUE@am__append_3 = ../src/OsiCpx/libOsiCpx.la @COIN_HAS_CPX_TRUE@am__append_4 = ../src/OsiCpx/libOsiCpx.la @COIN_HAS_CPX_TRUE@am__append_5 = $(CPXLIB) @COIN_HAS_GLPK_TRUE@am__append_6 = OsiGlpkSolverInterfaceTest.cpp @COIN_HAS_GLPK_TRUE@am__append_7 = $(GLPK_CFLAGS) \ @COIN_HAS_GLPK_TRUE@ -I`$(CYGPATH_W) $(srcdir)/../src/OsiGlpk` @COIN_HAS_GLPK_TRUE@am__append_8 = ../src/OsiGlpk/libOsiGlpk.la @COIN_HAS_GLPK_TRUE@am__append_9 = ../src/OsiGlpk/libOsiGlpk.la @COIN_HAS_GLPK_TRUE@am__append_10 = $(GLPK_LIBS) @COIN_HAS_MSK_TRUE@am__append_11 = OsiMskSolverInterfaceTest.cpp @COIN_HAS_MSK_TRUE@am__append_12 = -I`$(CYGPATH_W) $(MSKINCDIR)` \ @COIN_HAS_MSK_TRUE@ -I`$(CYGPATH_W) $(srcdir)/../src/OsiMsk` @COIN_HAS_MSK_TRUE@am__append_13 = ../src/OsiMsk/libOsiMsk.la @COIN_HAS_MSK_TRUE@am__append_14 = ../src/OsiMsk/libOsiMsk.la @COIN_HAS_MSK_TRUE@am__append_15 = $(MSKLIB) @COIN_HAS_XPR_TRUE@am__append_16 = OsiXprSolverInterfaceTest.cpp @COIN_HAS_XPR_TRUE@am__append_17 = -I`$(CYGPATH_W) $(XPRINCDIR)` \ @COIN_HAS_XPR_TRUE@ -I`$(CYGPATH_W) $(srcdir)/../src/OsiXpr` @COIN_HAS_XPR_TRUE@am__append_18 = ../src/OsiXpr/libOsiXpr.la @COIN_HAS_XPR_TRUE@am__append_19 = ../src/OsiXpr/libOsiXpr.la @COIN_HAS_XPR_TRUE@am__append_20 = $(XPRLIB) @COIN_HAS_GRB_TRUE@am__append_21 = OsiGrbSolverInterfaceTest.cpp @COIN_HAS_GRB_TRUE@am__append_22 = -I`$(CYGPATH_W) $(GRBINCDIR)` \ @COIN_HAS_GRB_TRUE@ -I`$(CYGPATH_W) $(srcdir)/../src/OsiGrb` @COIN_HAS_GRB_TRUE@am__append_23 = ../src/OsiGrb/libOsiGrb.la @COIN_HAS_GRB_TRUE@am__append_24 = ../src/OsiGrb/libOsiGrb.la @COIN_HAS_GRB_TRUE@am__append_25 = $(GRBLIB) @COIN_HAS_SOPLEX_TRUE@am__append_26 = OsiSpxSolverInterfaceTest.cpp @COIN_HAS_SOPLEX_TRUE@am__append_27 = $(SOPLEX_CFLAGS) \ @COIN_HAS_SOPLEX_TRUE@ -I`$(CYGPATH_W) $(srcdir)/../src/OsiSpx` @COIN_HAS_SOPLEX_TRUE@am__append_28 = ../src/OsiSpx/libOsiSpx.la @COIN_HAS_SOPLEX_TRUE@am__append_29 = ../src/OsiSpx/libOsiSpx.la @COIN_HAS_SOPLEX_TRUE@am__append_30 = $(SOPLEX_LIBS) @COIN_HAS_SAMPLE_TRUE@am__append_31 = -mpsDir=`$(CYGPATH_W) $(SAMPLE_DATA)` @COIN_HAS_NETLIB_TRUE@am__append_32 = -netlibDir=`$(CYGPATH_W) $(NETLIB_DATA)` -testOsiSolverInterface subdir = test DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_FILES = PROGRAMS = $(noinst_PROGRAMS) am__unitTest_SOURCES_DIST = unitTest.cpp OsiTestSolver.cpp \ OsiTestSolverInterface.cpp OsiTestSolverInterfaceIO.cpp \ OsiTestSolverInterfaceTest.cpp OsiCpxSolverInterfaceTest.cpp \ OsiGlpkSolverInterfaceTest.cpp OsiMskSolverInterfaceTest.cpp \ OsiXprSolverInterfaceTest.cpp OsiGrbSolverInterfaceTest.cpp \ OsiSpxSolverInterfaceTest.cpp @COIN_HAS_CPX_TRUE@am__objects_1 = \ @COIN_HAS_CPX_TRUE@ OsiCpxSolverInterfaceTest.$(OBJEXT) @COIN_HAS_GLPK_TRUE@am__objects_2 = \ @COIN_HAS_GLPK_TRUE@ OsiGlpkSolverInterfaceTest.$(OBJEXT) @COIN_HAS_MSK_TRUE@am__objects_3 = \ @COIN_HAS_MSK_TRUE@ OsiMskSolverInterfaceTest.$(OBJEXT) @COIN_HAS_XPR_TRUE@am__objects_4 = \ @COIN_HAS_XPR_TRUE@ OsiXprSolverInterfaceTest.$(OBJEXT) @COIN_HAS_GRB_TRUE@am__objects_5 = \ @COIN_HAS_GRB_TRUE@ OsiGrbSolverInterfaceTest.$(OBJEXT) @COIN_HAS_SOPLEX_TRUE@am__objects_6 = \ @COIN_HAS_SOPLEX_TRUE@ OsiSpxSolverInterfaceTest.$(OBJEXT) am_unitTest_OBJECTS = unitTest.$(OBJEXT) OsiTestSolver.$(OBJEXT) \ OsiTestSolverInterface.$(OBJEXT) \ OsiTestSolverInterfaceIO.$(OBJEXT) \ OsiTestSolverInterfaceTest.$(OBJEXT) $(am__objects_1) \ $(am__objects_2) $(am__objects_3) $(am__objects_4) \ $(am__objects_5) $(am__objects_6) unitTest_OBJECTS = $(am_unitTest_OBJECTS) @COIN_HAS_CPX_TRUE@am__DEPENDENCIES_1 = ../src/OsiCpx/libOsiCpx.la @COIN_HAS_GLPK_TRUE@am__DEPENDENCIES_2 = ../src/OsiGlpk/libOsiGlpk.la @COIN_HAS_MSK_TRUE@am__DEPENDENCIES_3 = ../src/OsiMsk/libOsiMsk.la @COIN_HAS_XPR_TRUE@am__DEPENDENCIES_4 = ../src/OsiXpr/libOsiXpr.la @COIN_HAS_GRB_TRUE@am__DEPENDENCIES_5 = ../src/OsiGrb/libOsiGrb.la @COIN_HAS_SOPLEX_TRUE@am__DEPENDENCIES_6 = ../src/OsiSpx/libOsiSpx.la am__DEPENDENCIES_7 = depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(unitTest_SOURCES) DIST_SOURCES = $(am__unitTest_SOURCES_DIST) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ $(am__append_5) $(am__append_10) $(am__append_15) \ $(am__append_20) $(am__append_25) $(am__append_30) LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign unitTest_SOURCES = unitTest.cpp OsiTestSolver.cpp \ OsiTestSolverInterface.cpp OsiTestSolverInterfaceIO.cpp \ OsiTestSolverInterfaceTest.cpp $(am__append_1) $(am__append_6) \ $(am__append_11) $(am__append_16) $(am__append_21) \ $(am__append_26) # List libraries of COIN projects unitTest_LDADD = ../src/OsiCommonTest/libOsiCommonTests.la \ $(am__append_3) $(am__append_8) $(am__append_13) \ $(am__append_18) $(am__append_23) $(am__append_28) \ ../src/Osi/libOsi.la $(OSILIB_LIBS) unitTest_DEPENDENCIES = ../src/OsiCommonTest/libOsiCommonTests.la \ $(am__append_4) $(am__append_9) $(am__append_14) \ $(am__append_19) $(am__append_24) $(am__append_29) \ ../src/Osi/libOsi.la $(OSILIB_DEPENDENCIES) # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Windows AM_CPPFLAGS = -I`$(CYGPATH_W) $(srcdir)/../src/Osi` -I`$(CYGPATH_W) \ $(srcdir)/../src/OsiCommonTest` $(COINUTILS_CFLAGS) \ $(am__append_2) $(am__append_7) $(am__append_12) \ $(am__append_17) $(am__append_22) $(am__append_27) # This line is necessary to allow VPATH compilation DEFAULT_INCLUDES = -I. -I`$(CYGPATH_W) $(srcdir)` -I$(top_builddir)/src/Osi unittestflags = $(am__append_31) $(am__append_32) ######################################################################## # Cleaning stuff # ######################################################################## # Here we list everything that is not generated by the compiler, e.g., # output files of a program DISTCLEANFILES = *.mps *.mps.gz *.lp test2out *.out.gz *.out 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 \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign 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 clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done unitTest$(EXEEXT): $(unitTest_OBJECTS) $(unitTest_DEPENDENCIES) @rm -f unitTest$(EXEEXT) $(CXXLINK) $(unitTest_LDFLAGS) $(unitTest_OBJECTS) $(unitTest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiCpxSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiGlpkSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiGrbSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiMskSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiSpxSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiTestSolver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiTestSolverInterface.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiTestSolverInterfaceIO.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiTestSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OsiXprSolverInterfaceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unitTest.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here 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)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: 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: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS ctags 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-exec \ install-exec-am install-info install-info-am install-man \ 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 uninstall uninstall-am \ uninstall-info-am test: unitTest$(EXEEXT) ./unitTest$(EXEEXT) $(unittestflags) .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: DyLP-1.10.4/Osi/test/OsiCpxSolverInterfaceTest.cpp0000644000175200017520000006520311612344643020363 0ustar coincoin//----------------------------------------------------------------------------- // name: OSI Interface for CPLEX // author: Tobias Pfender // Konrad-Zuse-Zentrum Berlin (Germany) // date: 09/25/2000 // license: this file may be freely distributed under the terms of EPL // comments: please scan this file for '???' and read the comments //----------------------------------------------------------------------------- // Copyright (C) 2000, Tobias Pfender, International Business Machines // Corporation and others. All Rights Reserved. #include "CoinPragma.hpp" #include "OsiConfig.h" //#include //#include #include "OsiUnitTests.hpp" #include "OsiCpxSolverInterface.hpp" #include "OsiCuts.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" // Added so build windows build with dsp files works, // when not building with cplex. #ifdef COIN_HAS_CPX #include "cplex.h" void OsiCpxSolverInterfaceUnitTest( const std::string & mpsDir, const std::string & netlibDir ) { // Test default constructor { OsiCpxSolverInterface m; OSIUNITTEST_ASSERT_ERROR(m.obj_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.collower_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colupper_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.coltype_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.coltypesize_ == 0, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowlower_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowupper_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colsol_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsol_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByCol_ == NULL, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 0, {}, "cplex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getApplicationData() == NULL, {}, "cplex", "default constructor"); int i=2346; m.setApplicationData(&i); OSIUNITTEST_ASSERT_ERROR(*((int *)(m.getApplicationData())) == i, {}, "cplex", "default constructor"); } { CoinRelFltEq eq; OsiCpxSolverInterface m; std::string fn = mpsDir+"exmip1"; m.readMps(fn.c_str(),"mps"); { OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 8, {}, "cplex", "exmip1 read"); const CoinPackedMatrix * colCopy = m.getMatrixByCol(); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumCols() == 8, {}, "cplex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMajorDim() == 8, {}, "cplex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumRows() == 5, {}, "cplex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMinorDim() == 5, {}, "cplex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getVectorLengths()[7] == 2, {}, "cplex", "exmip1 matrix"); CoinPackedMatrix revColCopy; revColCopy.reverseOrderedCopyOf(*colCopy); CoinPackedMatrix rev2ColCopy; rev2ColCopy.reverseOrderedCopyOf(revColCopy); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumCols() == 8, {}, "cplex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMajorDim() == 8, {}, "cplex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumRows() == 5, {}, "cplex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMinorDim() == 5, {}, "cplex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getVectorLengths()[7] == 2, {}, "cplex", "twice reverse matrix copy"); } // Test copy constructor and assignment operator { OsiCpxSolverInterface lhs; { OsiCpxSolverInterface im(m); OsiCpxSolverInterface imC1(im); OSIUNITTEST_ASSERT_ERROR(imC1.lp_ != im.lp_, {}, "cplex", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumCols() == im.getNumCols(), {}, "cplex", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumRows() == im.getNumRows(), {}, "cplex", "copy constructor"); OsiCpxSolverInterface imC2(im); OSIUNITTEST_ASSERT_ERROR(imC2.lp_ != im.lp_, {}, "cplex", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumCols() == im.getNumCols(), {}, "cplex", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumRows() == im.getNumRows(), {}, "cplex", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.lp_ != imC2.lp_, {}, "cplex", "copy constructor"); lhs = imC2; } // Test that lhs has correct values even though rhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.lp_ != m.lp_, {}, "cplex", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumCols() == m.getNumCols(), {}, "cplex", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumRows() == m.getNumRows(), {}, "cplex", "copy constructor"); } // Test clone { OsiCpxSolverInterface cplexSi(m); OsiSolverInterface * siPtr = &cplexSi; OsiSolverInterface * siClone = siPtr->clone(); OsiCpxSolverInterface * cplexClone = dynamic_cast(siClone); OSIUNITTEST_ASSERT_ERROR(cplexClone != NULL, {}, "cplex", "clone"); OSIUNITTEST_ASSERT_ERROR(cplexClone->lp_ != cplexSi.lp_, {}, "cplex", "clone"); OSIUNITTEST_ASSERT_ERROR(cplexClone->getNumRows() == cplexSi.getNumRows(), {}, "cplex", "clone"); OSIUNITTEST_ASSERT_ERROR(cplexClone->getNumCols() == m.getNumCols(), {}, "cplex", "clone"); delete siClone; } // test infinity { OsiCpxSolverInterface si; OSIUNITTEST_ASSERT_ERROR(si.getInfinity() == CPX_INFBOUND, {}, "cplex", "value for infinity"); } // Test getMatrixByRow method { const OsiCpxSolverInterface si(m); const CoinPackedMatrix * smP = si.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(smP->getMajorDim() == 5, return, "cplex", "getMatrixByRow: major dim"); OSIUNITTEST_ASSERT_ERROR(smP->getNumElements() == 14, return, "cplex", "getMatrixByRow: num elements"); CoinRelFltEq eq; const double * ev = smP->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[0], 3.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[1], 1.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[2], -2.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[3], -1.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[4], -1.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[5], 2.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[6], 1.1), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[7], 1.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[8], 1.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[9], 2.8), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], -1.2), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "cplex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "cplex", "getMatrixByRow: elements"); const int * mi = smP->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "cplex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "cplex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "cplex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "cplex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "cplex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "cplex", "getMatrixByRow: vector starts"); const int * ei = smP->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "cplex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "cplex", "getMatrixByRow: indices"); } //-------------- // Test rowsense, rhs, rowrange, getMatrixByRow { OsiCpxSolverInterface lhs; { OsiCpxSolverInterface siC1(m); OSIUNITTEST_ASSERT_WARNING(siC1.obj_ == NULL, {}, "cplex", "objective"); OSIUNITTEST_ASSERT_WARNING(siC1.collower_ == NULL, {}, "cplex", "col lower"); OSIUNITTEST_ASSERT_WARNING(siC1.colupper_ == NULL, {}, "cplex", "col upper"); OSIUNITTEST_ASSERT_WARNING(siC1.rowrange_ == NULL, {}, "cplex", "row range"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsense_ == NULL, {}, "cplex", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1.rowlower_ == NULL, {}, "cplex", "row lower"); OSIUNITTEST_ASSERT_WARNING(siC1.rowupper_ == NULL, {}, "cplex", "row upper"); OSIUNITTEST_ASSERT_WARNING(siC1.rhs_ == NULL, {}, "cplex", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1.matrixByRow_ == NULL, {}, "cplex", "matrix by row"); OSIUNITTEST_ASSERT_WARNING(siC1.colsol_ != NULL, {}, "cplex", "col solution"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsol_ != NULL, {}, "cplex", "row solution"); const char * siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "cplex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "cplex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "cplex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "cplex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "cplex", "row sense"); const double * siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "cplex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "cplex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "cplex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "cplex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "cplex", "right hand side"); const double * siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "cplex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "cplex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "cplex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "cplex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "cplex", "row range"); const CoinPackedMatrix * siC1mbr = siC1.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(siC1mbr != NULL, {}, "cplex", "matrix by row"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getMajorDim() == 5, return, "cplex", "matrix by row: major dim"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getNumElements() == 14, return, "cplex", "matrix by row: num elements"); const double * ev = siC1mbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "cplex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "cplex", "matrix by row: elements"); const CoinBigIndex * mi = siC1mbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "cplex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "cplex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "cplex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "cplex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "cplex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "cplex", "matrix by row: vector starts"); const int * ei = siC1mbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "cplex", "matrix by row: indices"); OSIUNITTEST_ASSERT_WARNING(siC1rs == siC1.getRowSense(), {}, "cplex", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1rhs == siC1.getRightHandSide(), {}, "cplex", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1rr == siC1.getRowRange(), {}, "cplex", "row range"); // Change CPLEX Model by adding free row OsiRowCut rc; rc.setLb(-COIN_DBL_MAX); rc.setUb( COIN_DBL_MAX); OsiCuts cuts; cuts.insert(rc); siC1.applyCuts(cuts); // Since model was changed, test that cached data is now freed. OSIUNITTEST_ASSERT_ERROR(siC1.obj_ == NULL, {}, "cplex", "objective"); OSIUNITTEST_ASSERT_ERROR(siC1.collower_ == NULL, {}, "cplex", "col lower"); OSIUNITTEST_ASSERT_ERROR(siC1.colupper_ == NULL, {}, "cplex", "col upper"); OSIUNITTEST_ASSERT_ERROR(siC1.rowrange_ == NULL, {}, "cplex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsense_ == NULL, {}, "cplex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowlower_ == NULL, {}, "cplex", "row lower"); OSIUNITTEST_ASSERT_ERROR(siC1.rowupper_ == NULL, {}, "cplex", "row upper"); OSIUNITTEST_ASSERT_ERROR(siC1.rhs_ == NULL, {}, "cplex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByRow_ == NULL, {}, "cplex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByCol_ == NULL, {}, "cplex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.colsol_ == NULL, {}, "cplex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsol_ == NULL, {}, "cplex", "free cached data after adding row"); siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "cplex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "cplex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "cplex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "cplex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "cplex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[5] == 'N', {}, "cplex", "row sense after adding row"); siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "cplex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "cplex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "cplex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "cplex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "cplex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[5],0.0), {}, "cplex", "right hand side after adding row"); siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "cplex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "cplex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "cplex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "cplex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "cplex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[5],0.0), {}, "cplex", "row range after adding row"); lhs = siC1; } // Test that lhs has correct values even though siC1 has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.obj_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.collower_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.colupper_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowrange_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsense_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowlower_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowupper_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rhs_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByRow_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByCol_ == NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.colsol_ != NULL, {}, "cplex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsol_ != NULL, {}, "cplex", "freed origin after assignment"); const char * lhsrs = lhs.getRowSense(); OSIUNITTEST_ASSERT_ERROR(lhsrs[0] == 'G', {}, "cplex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[1] == 'L', {}, "cplex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[2] == 'E', {}, "cplex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[3] == 'R', {}, "cplex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[4] == 'R', {}, "cplex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[5] == 'N', {}, "cplex", "row sense after assignment"); const double * lhsrhs = lhs.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[0],2.5), {}, "cplex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[1],2.1), {}, "cplex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[2],4.0), {}, "cplex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[3],5.0), {}, "cplex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[4],15.), {}, "cplex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[5],0.0), {}, "cplex", "right hand side after assignment"); const double *lhsrr = lhs.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[0],0.0), {}, "cplex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[1],0.0), {}, "cplex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[2],0.0), {}, "cplex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[3],5.0-1.8), {}, "cplex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[4],15.0-3.0), {}, "cplex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[5],0.0), {}, "cplex", "row range after assignment"); const CoinPackedMatrix * lhsmbr = lhs.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(lhsmbr != NULL, {}, "cplex", "matrix by row after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getMajorDim() == 6, return, "cplex", "matrix by row after assignment: major dim"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getNumElements() == 14, return, "cplex", "matrix by row after assignment: num elements"); const double * ev = lhsmbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "cplex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "cplex", "matrix by row after assignment: elements"); const CoinBigIndex * mi = lhsmbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "cplex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "cplex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "cplex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "cplex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "cplex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "cplex", "matrix by row after assignment: vector starts"); const int * ei = lhsmbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "cplex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "cplex", "matrix by row after assignment: indices"); } } // Do common solverInterface testing by calling the // base class testing method. { OsiCpxSolverInterface m; OsiSolverInterfaceCommonUnitTest(&m, mpsDir, netlibDir); } } #endif DyLP-1.10.4/Osi/test/OsiGrbSolverInterfaceTest.cpp0000644000175200017520000007440412101340333020330 0ustar coincoin//----------------------------------------------------------------------------- // name: OSI Interface for GUROBI // template: OSI Cplex Interface written by T. Achterberg // author: Stefan Vigerske // Humboldt University Berlin // license: this file may be freely distributed under the terms of EPL // comments: please scan this file for '???' and 'TODO' and read the comments //----------------------------------------------------------------------------- // Copyright (C) 2009 Humboldt University Berlin and others. // Corporation and others. All Rights Reserved. #include "CoinPragma.hpp" #include "OsiConfig.h" //#include //#include #include "OsiUnitTests.hpp" #include "OsiGrbSolverInterface.hpp" #include "OsiCuts.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" // Added so build windows build with dsp files works, // when not building with gurobi. #ifdef COIN_HAS_GRB #include "gurobi_c.h" //-------------------------------------------------------------------------- void OsiGrbSolverInterfaceUnitTest( const std::string & mpsDir, const std::string & netlibDir ) { // Test default constructor { OsiGrbSolverInterface m; OSIUNITTEST_ASSERT_ERROR(m.obj_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.collower_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colupper_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.coltype_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colspace_ == 0, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowlower_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowupper_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colsol_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsol_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByCol_ == NULL, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 0, {}, "gurobi", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getApplicationData() == NULL, {}, "gurobi", "default constructor"); int i=2346; m.setApplicationData(&i); OSIUNITTEST_ASSERT_ERROR(*((int *)(m.getApplicationData())) == i, {}, "gurobi", "default constructor"); } { CoinRelFltEq eq; OsiGrbSolverInterface m; std::string fn = mpsDir+"exmip1"; m.readMps(fn.c_str(),"mps"); { OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 8, {}, "gurobi", "exmip1 read"); const CoinPackedMatrix * colCopy = m.getMatrixByCol(); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumCols() == 8, {}, "gurobi", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMajorDim() == 8, {}, "gurobi", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumRows() == 5, {}, "gurobi", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMinorDim() == 5, {}, "gurobi", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getVectorLengths()[7] == 2, {}, "gurobi", "exmip1 matrix"); CoinPackedMatrix revColCopy; revColCopy.reverseOrderedCopyOf(*colCopy); CoinPackedMatrix rev2ColCopy; rev2ColCopy.reverseOrderedCopyOf(revColCopy); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumCols() == 8, {}, "gurobi", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMajorDim() == 8, {}, "gurobi", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumRows() == 5, {}, "gurobi", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMinorDim() == 5, {}, "gurobi", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getVectorLengths()[7] == 2, {}, "gurobi", "twice reverse matrix copy"); } // Test copy constructor and assignment operator { OsiGrbSolverInterface lhs; { OsiGrbSolverInterface im(m); OsiGrbSolverInterface imC1(im); OSIUNITTEST_ASSERT_ERROR(imC1.lp_ != im.lp_, {}, "gurobi", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumCols() == im.getNumCols(), {}, "gurobi", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumRows() == im.getNumRows(), {}, "gurobi", "copy constructor"); OsiGrbSolverInterface imC2(im); OSIUNITTEST_ASSERT_ERROR(imC2.lp_ != im.lp_, {}, "gurobi", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumCols() == im.getNumCols(), {}, "gurobi", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumRows() == im.getNumRows(), {}, "gurobi", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.lp_ != imC2.lp_, {}, "gurobi", "copy constructor"); lhs = imC2; } // Test that lhs has correct values even though rhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.lp_ != m.lp_, {}, "gurobi", "assignment operator"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumCols() == m.getNumCols(), {}, "gurobi", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumRows() == m.getNumRows(), {}, "gurobi", "copy constructor"); } // Test clone { OsiGrbSolverInterface gurobiSi(m); OsiSolverInterface * siPtr = &gurobiSi; OsiSolverInterface * siClone = siPtr->clone(); OsiGrbSolverInterface * gurobiClone = dynamic_cast(siClone); OSIUNITTEST_ASSERT_ERROR(gurobiClone != NULL, {}, "gurobi", "clone"); OSIUNITTEST_ASSERT_ERROR(gurobiClone->lp_ != gurobiSi.lp_, {}, "gurobi", "clone"); OSIUNITTEST_ASSERT_ERROR(gurobiClone->getNumRows() == gurobiSi.getNumRows(), {}, "gurobi", "clone"); OSIUNITTEST_ASSERT_ERROR(gurobiClone->getNumCols() == m.getNumCols(), {}, "gurobi", "clone"); delete siClone; } // test infinity { OsiGrbSolverInterface si; OSIUNITTEST_ASSERT_ERROR(si.getInfinity() == GRB_INFINITY, {}, "gurobi", "value for infinity"); } { OsiGrbSolverInterface gurobiSi(m); int nc = gurobiSi.getNumCols(); int nr = gurobiSi.getNumRows(); const double * cl = gurobiSi.getColLower(); const double * cu = gurobiSi.getColUpper(); const double * rl = gurobiSi.getRowLower(); const double * ru = gurobiSi.getRowUpper(); OSIUNITTEST_ASSERT_ERROR(nc == 8, return, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(nr == 5, return, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[0],2.5), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[1],0.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[1],4.1), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[2],1.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[0],2.5), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[4],3.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[1],2.1), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[4],15.), {}, "gurobi", "read and copy exmip1"); double newCs[8] = {1., 2., 3., 4., 5., 6., 7., 8.}; gurobiSi.setColSolution(newCs); const double * cs = gurobiSi.getColSolution(); OSIUNITTEST_ASSERT_ERROR(eq(cs[0],1.0), {}, "gurobi", "set col solution"); OSIUNITTEST_ASSERT_ERROR(eq(cs[7],8.0), {}, "gurobi", "set col solution"); #if 0 // TODO set and copy of solutions not supported by OsiGrb currently { OsiGrbSolverInterface solnSi(gurobiSi); const double * cs = solnSi.getColSolution(); OSIUNITTEST_ASSERT_ERROR(eq(cs[0],1.0), {}, "gurobi", "set col solution and copy"); OSIUNITTEST_ASSERT_ERROR(eq(cs[7],8.0), {}, "gurobi", "set col solution and copy"); } #endif OSIUNITTEST_ASSERT_ERROR(!eq(cl[3],1.2345), {}, "gurobi", "set col lower"); gurobiSi.setColLower( 3, 1.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cl[3],1.2345), {}, "gurobi", "set col lower"); OSIUNITTEST_ASSERT_ERROR(!eq(cu[4],10.2345), {}, "gurobi", "set col upper"); gurobiSi.setColUpper( 4, 10.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cu[4],10.2345), {}, "gurobi", "set col upper"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[0], 1.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[1], 0.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[2], 0.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[3], 0.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[4], 2.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[5], 0.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[6], 0.0), {}, "gurobi", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(gurobiSi.getObjCoefficients()[7],-1.0), {}, "gurobi", "read and copy exmip1"); } // Test getMatrixByRow method { const OsiGrbSolverInterface si(m); const CoinPackedMatrix * smP = si.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(smP->getMajorDim() == 5, return, "gurobi", "getMatrixByRow: major dim"); OSIUNITTEST_ASSERT_ERROR(smP->getNumElements() == 14, return, "gurobi", "getMatrixByRow: num elements"); CoinRelFltEq eq; const double * ev = smP->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[0], 3.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[1], 1.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[2], -2.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[3], -1.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[4], -1.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[5], 2.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[6], 1.1), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[7], 1.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[8], 1.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[9], 2.8), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], -1.2), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "gurobi", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "gurobi", "getMatrixByRow: elements"); const int * mi = smP->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "gurobi", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "gurobi", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "gurobi", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "gurobi", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "gurobi", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "gurobi", "getMatrixByRow: vector starts"); const int * ei = smP->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "gurobi", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "gurobi", "getMatrixByRow: indices"); } //-------------- // Test rowsense, rhs, rowrange, getMatrixByRow { OsiGrbSolverInterface lhs; { OsiGrbSolverInterface siC1(m); OSIUNITTEST_ASSERT_WARNING(siC1.obj_ == NULL, {}, "gurobi", "objective"); OSIUNITTEST_ASSERT_WARNING(siC1.collower_ == NULL, {}, "gurobi", "col lower"); OSIUNITTEST_ASSERT_WARNING(siC1.colupper_ == NULL, {}, "gurobi", "col upper"); OSIUNITTEST_ASSERT_WARNING(siC1.rowrange_ == NULL, {}, "gurobi", "row range"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsense_ == NULL, {}, "gurobi", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1.rowlower_ == NULL, {}, "gurobi", "row lower"); OSIUNITTEST_ASSERT_WARNING(siC1.rowupper_ == NULL, {}, "gurobi", "row upper"); OSIUNITTEST_ASSERT_WARNING(siC1.rhs_ == NULL, {}, "gurobi", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1.matrixByRow_ == NULL, {}, "gurobi", "matrix by row"); //TODO OSIUNITTEST_ASSERT_WARNING(siC1.colsol_ != NULL, {}, "gurobi", "col solution"); //TODO OSIUNITTEST_ASSERT_WARNING(siC1.rowsol_ != NULL, {}, "gurobi", "row solution"); const char * siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "gurobi", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "gurobi", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "gurobi", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "gurobi", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "gurobi", "row sense"); const double * siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "gurobi", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "gurobi", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "gurobi", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "gurobi", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "gurobi", "right hand side"); const double * siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "gurobi", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "gurobi", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "gurobi", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "gurobi", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "gurobi", "row range"); const CoinPackedMatrix * siC1mbr = siC1.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(siC1mbr != NULL, {}, "gurobi", "matrix by row"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getMajorDim() == 5, return, "gurobi", "matrix by row: major dim"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getNumElements() == 14, return, "gurobi", "matrix by row: num elements"); const double * ev = siC1mbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "gurobi", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "gurobi", "matrix by row: elements"); const CoinBigIndex * mi = siC1mbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "gurobi", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "gurobi", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "gurobi", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "gurobi", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "gurobi", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "gurobi", "matrix by row: vector starts"); const int * ei = siC1mbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "gurobi", "matrix by row: indices"); OSIUNITTEST_ASSERT_WARNING(siC1rs == siC1.getRowSense(), {}, "gurobi", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1rhs == siC1.getRightHandSide(), {}, "gurobi", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1rr == siC1.getRowRange(), {}, "gurobi", "row range"); #if 0 // TODO: free rows not really supported by OsiGrb // Change GUROBI Model by adding free row OsiRowCut rc; rc.setLb(-COIN_DBL_MAX); rc.setUb( COIN_DBL_MAX); OsiCuts cuts; cuts.insert(rc); siC1.applyCuts(cuts); // Since model was changed, test that cached data is now freed. OSIUNITTEST_ASSERT_ERROR(siC1.obj_ == NULL, {}, "gurobi", "objective"); OSIUNITTEST_ASSERT_ERROR(siC1.collower_ == NULL, {}, "gurobi", "col lower"); OSIUNITTEST_ASSERT_ERROR(siC1.colupper_ == NULL, {}, "gurobi", "col upper"); OSIUNITTEST_ASSERT_ERROR(siC1.rowrange_ == NULL, {}, "gurobi", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsense_ == NULL, {}, "gurobi", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowlower_ == NULL, {}, "gurobi", "row lower"); OSIUNITTEST_ASSERT_ERROR(siC1.rowupper_ == NULL, {}, "gurobi", "row upper"); OSIUNITTEST_ASSERT_ERROR(siC1.rhs_ == NULL, {}, "gurobi", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByRow_ == NULL, {}, "gurobi", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByCol_ == NULL, {}, "gurobi", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.colsol_ == NULL, {}, "gurobi", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsol_ == NULL, {}, "gurobi", "free cached data after adding row"); siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "gurobi", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "gurobi", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "gurobi", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "gurobi", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "gurobi", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[5] == 'N', {}, "gurobi", "row sense after adding row"); siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "gurobi", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "gurobi", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "gurobi", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "gurobi", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "gurobi", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[5],0.0), {}, "gurobi", "right hand side after adding row"); siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "gurobi", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "gurobi", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "gurobi", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "gurobi", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "gurobi", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[5],0.0), {}, "gurobi", "row range after adding row"); #endif lhs = siC1; } // Test that lhs has correct values even though siC1 has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.obj_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.collower_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.colupper_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowrange_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsense_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowlower_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowupper_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rhs_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByRow_ == NULL, {}, "gurobi", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByCol_ == NULL, {}, "gurobi", "freed origin after assignment"); //TODO OSIUNITTEST_ASSERT_ERROR(lhs.colsol_ != NULL, {}, "gurobi", "freed origin after assignment"); //TODO OSIUNITTEST_ASSERT_ERROR(lhs.rowsol_ != NULL, {}, "gurobi", "freed origin after assignment"); #if 0 // TODO: free rows not really supported by OsiGrb const char * lhsrs = lhs.getRowSense(); OSIUNITTEST_ASSERT_ERROR(lhsrs[0] == 'G', {}, "gurobi", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[1] == 'L', {}, "gurobi", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[2] == 'E', {}, "gurobi", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[3] == 'R', {}, "gurobi", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[4] == 'R', {}, "gurobi", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[5] == 'N', {}, "gurobi", "row sense after assignment"); const double * lhsrhs = lhs.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[0],2.5), {}, "gurobi", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[1],2.1), {}, "gurobi", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[2],4.0), {}, "gurobi", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[3],5.0), {}, "gurobi", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[4],15.), {}, "gurobi", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[5],0.0), {}, "gurobi", "right hand side after assignment"); const double *lhsrr = lhs.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[0],0.0), {}, "gurobi", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[1],0.0), {}, "gurobi", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[2],0.0), {}, "gurobi", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[3],5.0-1.8), {}, "gurobi", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[4],15.0-3.0), {}, "gurobi", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[5],0.0), {}, "gurobi", "row range after assignment"); const CoinPackedMatrix * lhsmbr = lhs.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(lhsmbr != NULL, {}, "gurobi", "matrix by row after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getMajorDim() == 6, return, "gurobi", "matrix by row after assignment: major dim"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getNumElements() == 14, return, "gurobi", "matrix by row after assignment: num elements"); const double * ev = lhsmbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "gurobi", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "gurobi", "matrix by row after assignment: elements"); const CoinBigIndex * mi = lhsmbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "gurobi", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "gurobi", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "gurobi", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "gurobi", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "gurobi", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "gurobi", "matrix by row after assignment: vector starts"); const int * ei = lhsmbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "gurobi", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "gurobi", "matrix by row after assignment: indices"); #endif } } // Do common solverInterface testing by calling the // base class testing method. { OsiGrbSolverInterface m; OsiSolverInterfaceCommonUnitTest(&m, mpsDir, netlibDir); } } #endif DyLP-1.10.4/Osi/test/OsiMskSolverInterfaceTest.cpp0000644000175200017520000007302311612351731020356 0ustar coincoin/* Unit test for OsiMsk. This file is licensed under the terms of Eclipse Public License (EPL). */ #include "CoinPragma.hpp" #include "OsiConfig.h" //#include //#include #include "OsiUnitTests.hpp" #include "OsiMskSolverInterface.hpp" #include "OsiCuts.hpp" #include "OsiRowCut.hpp" #include "OsiColCut.hpp" #include "CoinPackedMatrix.hpp" // Added so build windows build with dsp files works, // when not building with gurobi. #ifdef COIN_HAS_MSK #include "mosek.h" //-------------------------------------------------------------------------- void OsiMskSolverInterfaceUnitTest( const std::string & mpsDir, const std::string & netlibDir ) { unsigned int numInstancesStart = OsiMskSolverInterface::getNumInstances(); // Test default constructor { OsiMskSolverInterface m; OSIUNITTEST_ASSERT_ERROR(m.obj_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.collower_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colupper_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.coltype_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.coltypesize_ == 0, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowlower_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowupper_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colsol_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsol_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByCol_ == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 0, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getApplicationData() == NULL, {}, "mosek", "default constructor"); OSIUNITTEST_ASSERT_ERROR(OsiMskSolverInterface::getNumInstances() == numInstancesStart+1, {}, "mosek", "number of instances during first test"); int i=2346; m.setApplicationData(&i); OSIUNITTEST_ASSERT_ERROR(*((int *)(m.getApplicationData())) == i, {}, "mosek", "default constructor"); } OSIUNITTEST_ASSERT_ERROR(OsiMskSolverInterface::getNumInstances() == numInstancesStart, {}, "mosek", "number of instances after first test"); { CoinRelFltEq eq; OsiMskSolverInterface m; OSIUNITTEST_ASSERT_ERROR(OsiMskSolverInterface::getNumInstances() == numInstancesStart+1, {}, "mosek", "number of instances"); std::string fn = mpsDir+"exmip1"; m.readMps(fn.c_str(),"mps"); { OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 8, {}, "mosek", "exmip1 read"); const CoinPackedMatrix * colCopy = m.getMatrixByCol(); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumCols() == 8, {}, "mosek", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMajorDim() == 8, {}, "mosek", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumRows() == 5, {}, "mosek", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMinorDim() == 5, {}, "mosek", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getVectorLengths()[7] == 2, {}, "mosek", "exmip1 matrix"); CoinPackedMatrix revColCopy; revColCopy.reverseOrderedCopyOf(*colCopy); CoinPackedMatrix rev2ColCopy; rev2ColCopy.reverseOrderedCopyOf(revColCopy); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumCols() == 8, {}, "mosek", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMajorDim() == 8, {}, "mosek", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumRows() == 5, {}, "mosek", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMinorDim() == 5, {}, "mosek", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getVectorLengths()[7] == 2, {}, "mosek", "twice reverse matrix copy"); } // Test copy constructor and assignment operator { OsiMskSolverInterface lhs; { OsiMskSolverInterface im(m); OsiMskSolverInterface imC1(im); OSIUNITTEST_ASSERT_ERROR(imC1.getNumCols() == im.getNumCols(), {}, "mosek", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC1.getNumRows() == im.getNumRows(), {}, "mosek", "copy constructor"); OsiMskSolverInterface imC2(im); OSIUNITTEST_ASSERT_ERROR(imC2.getNumCols() == im.getNumCols(), {}, "mosek", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(imC2.getNumRows() == im.getNumRows(), {}, "mosek", "copy constructor"); lhs = imC2; } // Test that lhs has correct values even though rhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.getNumCols() == m.getNumCols(), {}, "mosek", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumRows() == m.getNumRows(), {}, "mosek", "copy constructor"); } // Test clone { OsiMskSolverInterface mosekSi(m); OsiSolverInterface * siPtr = &mosekSi; OsiSolverInterface * siClone = siPtr->clone(); OsiMskSolverInterface * mosekClone = dynamic_cast(siClone); OSIUNITTEST_ASSERT_ERROR(mosekClone != NULL, {}, "mosek", "clone"); OSIUNITTEST_ASSERT_ERROR(mosekClone->getNumRows() == mosekSi.getNumRows(), {}, "mosek", "clone"); OSIUNITTEST_ASSERT_ERROR(mosekClone->getNumCols() == m.getNumCols(), {}, "mosek", "clone"); delete siClone; } // test infinity { OsiMskSolverInterface si; OSIUNITTEST_ASSERT_ERROR(si.getInfinity() == MSK_INFINITY, {}, "mosek", "value for infinity"); } { OsiMskSolverInterface mosekSi(m); int nc = mosekSi.getNumCols(); int nr = mosekSi.getNumRows(); const double * cl = mosekSi.getColLower(); const double * cu = mosekSi.getColUpper(); const double * rl = mosekSi.getRowLower(); const double * ru = mosekSi.getRowUpper(); OSIUNITTEST_ASSERT_ERROR(nc == 8, return, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(nr == 5, return, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[0],2.5), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[1],0.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[1],4.1), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[2],1.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[0],2.5), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[4],3.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[1],2.1), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[4],15.), {}, "mosek", "read and copy exmip1"); double newCs[8] = {1., 2., 3., 4., 5., 6., 7., 8.}; mosekSi.setColSolution(newCs); const double * cs = mosekSi.getColSolution(); OSIUNITTEST_ASSERT_ERROR(eq(cs[0],1.0), {}, "mosek", "set col solution"); OSIUNITTEST_ASSERT_ERROR(eq(cs[7],8.0), {}, "mosek", "set col solution"); { OsiMskSolverInterface solnSi(mosekSi); const double * cs = solnSi.getColSolution(); OSIUNITTEST_ASSERT_ERROR(eq(cs[0],1.0), {}, "mosek", "set col solution and copy"); OSIUNITTEST_ASSERT_ERROR(eq(cs[7],8.0), {}, "mosek", "set col solution and copy"); } OSIUNITTEST_ASSERT_ERROR(!eq(cl[3],1.2345), {}, "mosek", "set col lower"); mosekSi.setColLower( 3, 1.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cl[3],1.2345), {}, "mosek", "set col lower"); OSIUNITTEST_ASSERT_ERROR(!eq(cu[4],10.2345), {}, "mosek", "set col upper"); mosekSi.setColUpper( 4, 10.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cu[4],10.2345), {}, "mosek", "set col upper"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[0], 1.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[1], 0.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[2], 0.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[3], 0.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[4], 2.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[5], 0.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[6], 0.0), {}, "mosek", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(mosekSi.getObjCoefficients()[7],-1.0), {}, "mosek", "read and copy exmip1"); } // Test getMatrixByRow method { const OsiMskSolverInterface si(m); const CoinPackedMatrix * smP = si.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(smP->getMajorDim() == 5, return, "mosek", "getMatrixByRow: major dim"); OSIUNITTEST_ASSERT_ERROR(smP->getNumElements() == 14, return, "mosek", "getMatrixByRow: num elements"); CoinRelFltEq eq; const double * ev = smP->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[0], 3.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[1], 1.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[2], -2.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[3], -1.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[4], -1.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[5], 2.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[6], 1.1), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[7], 1.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[8], 1.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[9], 2.8), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], -1.2), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "mosek", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "mosek", "getMatrixByRow: elements"); const int * mi = smP->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "mosek", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "mosek", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "mosek", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "mosek", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "mosek", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "mosek", "getMatrixByRow: vector starts"); const int * ei = smP->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "mosek", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "mosek", "getMatrixByRow: indices"); } //-------------- // Test rowsense, rhs, rowrange, getMatrixByRow { OsiMskSolverInterface lhs; { OsiMskSolverInterface siC1(m); OSIUNITTEST_ASSERT_WARNING(siC1.obj_ == NULL, {}, "mosek", "objective"); OSIUNITTEST_ASSERT_WARNING(siC1.collower_ == NULL, {}, "mosek", "col lower"); OSIUNITTEST_ASSERT_WARNING(siC1.colupper_ == NULL, {}, "mosek", "col upper"); OSIUNITTEST_ASSERT_WARNING(siC1.rowrange_ == NULL, {}, "mosek", "row range"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsense_ == NULL, {}, "mosek", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1.rowlower_ == NULL, {}, "mosek", "row lower"); OSIUNITTEST_ASSERT_WARNING(siC1.rowupper_ == NULL, {}, "mosek", "row upper"); OSIUNITTEST_ASSERT_WARNING(siC1.rhs_ == NULL, {}, "mosek", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1.matrixByRow_ == NULL, {}, "mosek", "matrix by row"); OSIUNITTEST_ASSERT_WARNING(siC1.colsol_ == NULL, {}, "mosek", "col solution"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsol_ == NULL, {}, "mosek", "row solution"); const char * siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "mosek", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "mosek", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "mosek", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "mosek", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "mosek", "row sense"); const double * siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "mosek", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "mosek", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "mosek", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "mosek", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "mosek", "right hand side"); const double * siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "mosek", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "mosek", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "mosek", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "mosek", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "mosek", "row range"); const CoinPackedMatrix * siC1mbr = siC1.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(siC1mbr != NULL, {}, "mosek", "matrix by row"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getMajorDim() == 5, return, "mosek", "matrix by row: major dim"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getNumElements() == 14, return, "mosek", "matrix by row: num elements"); const double * ev = siC1mbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "mosek", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "mosek", "matrix by row: elements"); const CoinBigIndex * mi = siC1mbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "mosek", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "mosek", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "mosek", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "mosek", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "mosek", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "mosek", "matrix by row: vector starts"); const int * ei = siC1mbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "mosek", "matrix by row: indices"); OSIUNITTEST_ASSERT_WARNING(siC1rs == siC1.getRowSense(), {}, "mosek", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1rhs == siC1.getRightHandSide(), {}, "mosek", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1rr == siC1.getRowRange(), {}, "mosek", "row range"); // Change MOSEK Model by adding free row OsiRowCut rc; rc.setLb(-COIN_DBL_MAX); rc.setUb( COIN_DBL_MAX); OsiCuts cuts; cuts.insert(rc); siC1.applyCuts(cuts); // Since model was changed, test that cached data is now freed. OSIUNITTEST_ASSERT_ERROR(siC1.obj_ == NULL, {}, "mosek", "objective"); OSIUNITTEST_ASSERT_ERROR(siC1.collower_ == NULL, {}, "mosek", "col lower"); OSIUNITTEST_ASSERT_ERROR(siC1.colupper_ == NULL, {}, "mosek", "col upper"); OSIUNITTEST_ASSERT_ERROR(siC1.rowrange_ == NULL, {}, "mosek", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsense_ == NULL, {}, "mosek", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowlower_ == NULL, {}, "mosek", "row lower"); OSIUNITTEST_ASSERT_ERROR(siC1.rowupper_ == NULL, {}, "mosek", "row upper"); OSIUNITTEST_ASSERT_ERROR(siC1.rhs_ == NULL, {}, "mosek", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByRow_ == NULL, {}, "mosek", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByCol_ == NULL, {}, "mosek", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.colsol_ == NULL, {}, "mosek", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsol_ == NULL, {}, "mosek", "free cached data after adding row"); siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "mosek", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "mosek", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "mosek", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "mosek", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "mosek", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[5] == 'N', {}, "mosek", "row sense after adding row"); siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "mosek", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "mosek", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "mosek", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "mosek", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "mosek", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[5],0.0), {}, "mosek", "right hand side after adding row"); siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "mosek", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "mosek", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "mosek", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "mosek", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "mosek", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[5],0.0), {}, "mosek", "row range after adding row"); lhs = siC1; } // Test that lhs has correct values even though siC1 has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.obj_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.collower_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.colupper_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowrange_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsense_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowlower_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowupper_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rhs_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByRow_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByCol_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.colsol_ == NULL, {}, "mosek", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsol_ == NULL, {}, "mosek", "freed origin after assignment"); const char * lhsrs = lhs.getRowSense(); OSIUNITTEST_ASSERT_ERROR(lhsrs[0] == 'G', {}, "mosek", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[1] == 'L', {}, "mosek", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[2] == 'E', {}, "mosek", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[3] == 'R', {}, "mosek", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[4] == 'R', {}, "mosek", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[5] == 'N', {}, "mosek", "row sense after assignment"); const double * lhsrhs = lhs.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[0],2.5), {}, "mosek", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[1],2.1), {}, "mosek", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[2],4.0), {}, "mosek", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[3],5.0), {}, "mosek", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[4],15.), {}, "mosek", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[5],0.0), {}, "mosek", "right hand side after assignment"); const double *lhsrr = lhs.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[0],0.0), {}, "mosek", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[1],0.0), {}, "mosek", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[2],0.0), {}, "mosek", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[3],5.0-1.8), {}, "mosek", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[4],15.0-3.0), {}, "mosek", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[5],0.0), {}, "mosek", "row range after assignment"); const CoinPackedMatrix * lhsmbr = lhs.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(lhsmbr != NULL, {}, "mosek", "matrix by row after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getMajorDim() == 6, return, "mosek", "matrix by row after assignment: major dim"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getNumElements() == 14, return, "mosek", "matrix by row after assignment: num elements"); const double * ev = lhsmbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "mosek", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "mosek", "matrix by row after assignment: elements"); const CoinBigIndex * mi = lhsmbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "mosek", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "mosek", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "mosek", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "mosek", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "mosek", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "mosek", "matrix by row after assignment: vector starts"); const int * ei = lhsmbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "mosek", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "mosek", "matrix by row after assignment: indices"); } OSIUNITTEST_ASSERT_ERROR(OsiMskSolverInterface::getNumInstances() == numInstancesStart+1, {}, "mosek", "number of instances"); } OSIUNITTEST_ASSERT_ERROR(OsiMskSolverInterface::getNumInstances() == numInstancesStart, {}, "mosek", "number of instances at finish"); // Do common solverInterface testing by calling the // base class testing method. { OsiMskSolverInterface m; OsiSolverInterfaceCommonUnitTest(&m, mpsDir, netlibDir); } } #endif DyLP-1.10.4/Osi/test/OsiSpxSolverInterfaceTest.cpp0000644000175200017520000006665612346347404020423 0ustar coincoin//----------------------------------------------------------------------------- // name: OSI Interface for SOPLEX // author: Tobias Pfender // Konrad-Zuse-Zentrum Berlin (Germany) // license: this file may be freely distributed under the terms of EPL // date: 01/17/2002 //----------------------------------------------------------------------------- // Copyright (C) 2002, Tobias Pfender, International Business Machines // Corporation and others. All Rights Reserved. // // Last edit: $Id: OsiSpxSolverInterfaceTest.cpp 1967 2014-06-12 16:02:12Z stefan $ #include "CoinPragma.hpp" #include "OsiConfig.h" // Added so windows build with dsp files works, // when not building with soplex. #ifdef COIN_HAS_SOPLEX #include "OsiUnitTests.hpp" #include "OsiRowCut.hpp" #include "OsiCuts.hpp" #include "CoinFloatEqual.hpp" #include "CoinPackedMatrix.hpp" //#include #ifndef SOPLEX_LEGACY #define SOPLEX_LEGACY #endif // to check for value of infinity #include "soplex.h" // it's important to include this header after soplex.h #include "OsiSpxSolverInterface.hpp" void OsiSpxSolverInterfaceUnitTest( const std::string & mpsDir, const std::string & netlibDir ) { // Test default constructor { OsiSpxSolverInterface m; OSIUNITTEST_ASSERT_ERROR(m.soplex_ != NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getNumCols() == 0, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsense_ == NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rhs_ == NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowrange_ == NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.colsol_ == NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.rowsol_ == NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByRow_ == NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.matrixByCol_ == NULL, {}, "SoPlex", "default constructor"); OSIUNITTEST_ASSERT_ERROR(m.getApplicationData() == NULL, {}, "SoPlex", "default constructor"); int i=2346; m.setApplicationData(&i); OSIUNITTEST_ASSERT_ERROR(*((int *)(m.getApplicationData())) == i, {}, "SoPlex", "set application data"); } { CoinRelFltEq eq; OsiSpxSolverInterface m; std::string fn = mpsDir+"exmip1"; m.readMps(fn.c_str(),"mps"); // int ad = 13579; // m.setApplicationData(&ad); // OSIUNITTEST_ASSERT_ERROR(*((int *)(m.getApplicationData())) == ad, {}, "SoPlex", "set application data"); { const CoinPackedMatrix * colCopy = m.getMatrixByCol(); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumCols() == 8, {}, "SoPlex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMajorDim() == 8, {}, "SoPlex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getNumRows() == 5, {}, "SoPlex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getMinorDim() == 5, {}, "SoPlex", "exmip1 matrix"); OSIUNITTEST_ASSERT_ERROR(colCopy->getVectorLengths()[7] == 2, {}, "SoPlex", "exmip1 matrix"); CoinPackedMatrix revColCopy; revColCopy.reverseOrderedCopyOf(*colCopy); CoinPackedMatrix rev2ColCopy; rev2ColCopy.reverseOrderedCopyOf(revColCopy); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumCols() == 8, {}, "SoPlex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMajorDim() == 8, {}, "SoPlex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getNumRows() == 5, {}, "SoPlex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getMinorDim() == 5, {}, "SoPlex", "twice reverse matrix copy"); OSIUNITTEST_ASSERT_ERROR(rev2ColCopy.getVectorLengths()[7] == 2, {}, "SoPlex", "twice reverse matrix copy"); } // Test copy constructor and assignment operator { OsiSpxSolverInterface lhs; { OsiSpxSolverInterface im(m); OsiSpxSolverInterface imC1(im); OsiSpxSolverInterface imC2(im); lhs = imC2; } // Test that lhs has correct values even though rhs has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.getNumCols() == m.getNumCols(), {}, "SoPlex", "copy constructor"); OSIUNITTEST_ASSERT_ERROR(lhs.getNumRows() == m.getNumRows(), {}, "SoPlex", "copy constructor"); } // Test clone { OsiSpxSolverInterface soplexSi(m); OsiSolverInterface * siPtr = &soplexSi; OsiSolverInterface * siClone = siPtr->clone(); OsiSpxSolverInterface * soplexClone = dynamic_cast(siClone); OSIUNITTEST_ASSERT_ERROR(soplexClone != NULL, {}, "SoPlex", "clone"); OSIUNITTEST_ASSERT_ERROR(soplexClone->getNumRows() == soplexSi.getNumRows(), {}, "SoPlex", "clone"); OSIUNITTEST_ASSERT_ERROR(soplexClone->getNumCols() == m.getNumCols(), {}, "SoPlex", "clone"); delete siClone; } // test infinity { OsiSpxSolverInterface si; OSIUNITTEST_ASSERT_ERROR(si.getInfinity() == soplex::infinity, {}, "SoPlex", "value for infinity"); } { OsiSpxSolverInterface soplexSi(m); int nc = soplexSi.getNumCols(); int nr = soplexSi.getNumRows(); const double * cl = soplexSi.getColLower(); const double * cu = soplexSi.getColUpper(); const double * rl = soplexSi.getRowLower(); const double * ru = soplexSi.getRowUpper(); OSIUNITTEST_ASSERT_ERROR(nc == 8, return, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(nr == 5, return, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[0],2.5), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cl[1],0.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[1],4.1), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(cu[2],1.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[0],2.5), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(rl[4],3.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[1],2.1), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(ru[4],15.), {}, "SoPlex", "read and copy exmip1"); double newCs[8] = {1., 2., 3., 4., 5., 6., 7., 8.}; soplexSi.setColSolution(newCs); const double * cs = soplexSi.getColSolution(); OSIUNITTEST_ASSERT_ERROR(eq(cs[0],1.0), {}, "SoPlex", "set col solution"); OSIUNITTEST_ASSERT_ERROR(eq(cs[7],8.0), {}, "SoPlex", "set col solution"); { OsiSpxSolverInterface solnSi(soplexSi); const double * cs = solnSi.getColSolution(); OSIUNITTEST_ASSERT_ERROR(eq(cs[0],1.0), {}, "SoPlex", "set col solution and copy"); OSIUNITTEST_ASSERT_ERROR(eq(cs[7],8.0), {}, "SoPlex", "set col solution and copy"); } OSIUNITTEST_ASSERT_ERROR(!eq(cl[3],1.2345), {}, "SoPlex", "set col lower"); soplexSi.setColLower( 3, 1.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cl[3],1.2345), {}, "SoPlex", "set col lower"); OSIUNITTEST_ASSERT_ERROR(!eq(cu[4],10.2345), {}, "SoPlex", "set col upper"); soplexSi.setColUpper( 4, 10.2345 ); OSIUNITTEST_ASSERT_ERROR( eq(cu[4],10.2345), {}, "SoPlex", "set col upper"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[0], 1.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[1], 0.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[2], 0.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[3], 0.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[4], 2.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[5], 0.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[6], 0.0), {}, "SoPlex", "read and copy exmip1"); OSIUNITTEST_ASSERT_ERROR(eq(soplexSi.getObjCoefficients()[7],-1.0), {}, "SoPlex", "read and copy exmip1"); } // Test getMatrixByRow method { const OsiSpxSolverInterface si(m); const CoinPackedMatrix * smP = si.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(smP->getMajorDim() == 5, return, "SoPlex", "getMatrixByRow: major dim"); OSIUNITTEST_ASSERT_ERROR(smP->getNumElements() == 14, return, "SoPlex", "getMatrixByRow: num elements"); CoinRelFltEq eq; const double * ev = smP->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[0], 3.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[1], 1.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[2], -2.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[3], -1.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[4], -1.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[5], 2.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[6], 1.1), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[7], 1.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[8], 1.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[9], 2.8), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10], -1.2), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "SoPlex", "getMatrixByRow: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "SoPlex", "getMatrixByRow: elements"); const int * mi = smP->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "SoPlex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "SoPlex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "SoPlex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "SoPlex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "SoPlex", "getMatrixByRow: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "SoPlex", "getMatrixByRow: vector starts"); const int * ei = smP->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "SoPlex", "getMatrixByRow: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "SoPlex", "getMatrixByRow: indices"); } //-------------- // Test rowsense, rhs, rowrange, getMatrixByRow { OsiSpxSolverInterface lhs; { OsiSpxSolverInterface siC1(m); OSIUNITTEST_ASSERT_WARNING(siC1.rowrange_ == NULL, {}, "SoPlex", "row range"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsense_ == NULL, {}, "SoPlex", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1.rhs_ == NULL, {}, "SoPlex", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1.matrixByRow_ == NULL, {}, "SoPlex", "matrix by row"); OSIUNITTEST_ASSERT_WARNING(siC1.colsol_ == NULL, {}, "SoPlex", "col solution"); OSIUNITTEST_ASSERT_WARNING(siC1.rowsol_ == NULL, {}, "SoPlex", "row solution"); const char * siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "SoPlex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "SoPlex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "SoPlex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "SoPlex", "row sense"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "SoPlex", "row sense"); const double * siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "SoPlex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "SoPlex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "SoPlex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "SoPlex", "right hand side"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "SoPlex", "right hand side"); const double * siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "SoPlex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "SoPlex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "SoPlex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "SoPlex", "row range"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "SoPlex", "row range"); const CoinPackedMatrix * siC1mbr = siC1.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(siC1mbr != NULL, {}, "SoPlex", "matrix by row"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getMajorDim() == 5, return, "SoPlex", "matrix by row: major dim"); OSIUNITTEST_ASSERT_ERROR(siC1mbr->getNumElements() == 14, return, "SoPlex", "matrix by row: num elements"); const double * ev = siC1mbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "SoPlex", "matrix by row: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "SoPlex", "matrix by row: elements"); const CoinBigIndex * mi = siC1mbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "SoPlex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "SoPlex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "SoPlex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "SoPlex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "SoPlex", "matrix by row: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "SoPlex", "matrix by row: vector starts"); const int * ei = siC1mbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "SoPlex", "matrix by row: indices"); OSIUNITTEST_ASSERT_WARNING(siC1rs == siC1.getRowSense(), {}, "SoPlex", "row sense"); OSIUNITTEST_ASSERT_WARNING(siC1rhs == siC1.getRightHandSide(), {}, "SoPlex", "right hand side"); OSIUNITTEST_ASSERT_WARNING(siC1rr == siC1.getRowRange(), {}, "SoPlex", "row range"); // Change SOPLEX Model by adding free row OsiRowCut rc; rc.setLb(-COIN_DBL_MAX); rc.setUb( COIN_DBL_MAX); OsiCuts cuts; cuts.insert(rc); siC1.applyCuts(cuts); // Since model was changed, test that cached data is now freed. OSIUNITTEST_ASSERT_ERROR(siC1.rowrange_ == NULL, {}, "SoPlex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsense_ == NULL, {}, "SoPlex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rhs_ == NULL, {}, "SoPlex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByRow_ == NULL, {}, "SoPlex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.matrixByCol_ == NULL, {}, "SoPlex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.colsol_ == NULL, {}, "SoPlex", "free cached data after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1.rowsol_ == NULL, {}, "SoPlex", "free cached data after adding row"); siC1rs = siC1.getRowSense(); OSIUNITTEST_ASSERT_ERROR(siC1rs[0] == 'G', {}, "SoPlex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[1] == 'L', {}, "SoPlex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[2] == 'E', {}, "SoPlex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[3] == 'R', {}, "SoPlex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[4] == 'R', {}, "SoPlex", "row sense after adding row"); OSIUNITTEST_ASSERT_ERROR(siC1rs[5] == 'N', {}, "SoPlex", "row sense after adding row"); siC1rhs = siC1.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[0],2.5), {}, "SoPlex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[1],2.1), {}, "SoPlex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[2],4.0), {}, "SoPlex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[3],5.0), {}, "SoPlex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[4],15.), {}, "SoPlex", "right hand side after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rhs[5],0.0), {}, "SoPlex", "right hand side after adding row"); siC1rr = siC1.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[0],0.0), {}, "SoPlex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[1],0.0), {}, "SoPlex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[2],0.0), {}, "SoPlex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[3],5.0-1.8), {}, "SoPlex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[4],15.0-3.0), {}, "SoPlex", "row range after adding row"); OSIUNITTEST_ASSERT_ERROR(eq(siC1rr[5],0.0), {}, "SoPlex", "row range after adding row"); lhs = siC1; } // Test that lhs has correct values even though siC1 has gone out of scope OSIUNITTEST_ASSERT_ERROR(lhs.rowrange_ == NULL, {}, "SoPlex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsense_ == NULL, {}, "SoPlex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rhs_ == NULL, {}, "SoPlex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByRow_ == NULL, {}, "SoPlex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.matrixByCol_ == NULL, {}, "SoPlex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.colsol_ == NULL, {}, "SoPlex", "freed origin after assignment"); OSIUNITTEST_ASSERT_ERROR(lhs.rowsol_ == NULL, {}, "SoPlex", "freed origin after assignment"); const char * lhsrs = lhs.getRowSense(); OSIUNITTEST_ASSERT_ERROR(lhsrs[0] == 'G', {}, "SoPlex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[1] == 'L', {}, "SoPlex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[2] == 'E', {}, "SoPlex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[3] == 'R', {}, "SoPlex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[4] == 'R', {}, "SoPlex", "row sense after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsrs[5] == 'N', {}, "SoPlex", "row sense after assignment"); const double * lhsrhs = lhs.getRightHandSide(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[0],2.5), {}, "SoPlex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[1],2.1), {}, "SoPlex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[2],4.0), {}, "SoPlex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[3],5.0), {}, "SoPlex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[4],15.), {}, "SoPlex", "right hand side after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrhs[5],0.0), {}, "SoPlex", "right hand side after assignment"); const double *lhsrr = lhs.getRowRange(); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[0],0.0), {}, "SoPlex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[1],0.0), {}, "SoPlex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[2],0.0), {}, "SoPlex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[3],5.0-1.8), {}, "SoPlex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[4],15.0-3.0), {}, "SoPlex", "row range after assignment"); OSIUNITTEST_ASSERT_ERROR(eq(lhsrr[5],0.0), {}, "SoPlex", "row range after assignment"); const CoinPackedMatrix * lhsmbr = lhs.getMatrixByRow(); OSIUNITTEST_ASSERT_ERROR(lhsmbr != NULL, {}, "SoPlex", "matrix by row after assignment"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getMajorDim() == 6, return, "SoPlex", "matrix by row after assignment: major dim"); OSIUNITTEST_ASSERT_ERROR(lhsmbr->getNumElements() == 14, return, "SoPlex", "matrix by row after assignment: num elements"); const double * ev = lhsmbr->getElements(); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 0], 3.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 1], 1.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 2],-2.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 3],-1.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 4],-1.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 5], 2.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 6], 1.1), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 7], 1.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 8], 1.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[ 9], 2.8), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[10],-1.2), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[11], 5.6), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[12], 1.0), {}, "SoPlex", "matrix by row after assignment: elements"); OSIUNITTEST_ASSERT_ERROR(eq(ev[13], 1.9), {}, "SoPlex", "matrix by row after assignment: elements"); const CoinBigIndex * mi = lhsmbr->getVectorStarts(); OSIUNITTEST_ASSERT_ERROR(mi[0] == 0, {}, "SoPlex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[1] == 5, {}, "SoPlex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[2] == 7, {}, "SoPlex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[3] == 9, {}, "SoPlex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[4] == 11, {}, "SoPlex", "matrix by row after assignment: vector starts"); OSIUNITTEST_ASSERT_ERROR(mi[5] == 14, {}, "SoPlex", "matrix by row after assignment: vector starts"); const int * ei = lhsmbr->getIndices(); OSIUNITTEST_ASSERT_ERROR(ei[ 0] == 0, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 1] == 1, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 2] == 3, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 3] == 4, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 4] == 7, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 5] == 1, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 6] == 2, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 7] == 2, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 8] == 5, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[ 9] == 3, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[10] == 6, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[11] == 0, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[12] == 4, {}, "SoPlex", "matrix by row after assignment: indices"); OSIUNITTEST_ASSERT_ERROR(ei[13] == 7, {}, "SoPlex", "matrix by row after assignment: indices"); } //-------------- } // Do common solverInterface testing by calling the // base class testing method. { OsiSpxSolverInterface m; OsiSolverInterfaceCommonUnitTest(&m, mpsDir,netlibDir); } } #endif DyLP-1.10.4/Osi/osi-uninstalled.pc.in0000644000175200017520000000044711573725230015662 0ustar coincoinprefix=@prefix@ libdir=@ABSBUILDDIR@/src/Osi Name: Osi Description: COIN-OR Open Solver Interface URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsi.la @OSILIB_PCLIBS@ Cflags: -I@abs_source_dir@/src/Osi -I@ABSBUILDDIR@/src/Osi Requires: @OSILIB_PCREQUIRES@ DyLP-1.10.4/Osi/osi-unittests-uninstalled.pc.in0000644000175200017520000000045111507670402017712 0ustar coincoinprefix=@prefix@ libdir=@ABSBUILDDIR@/src/OsiCommonTest Name: OsiUnitTests Description: COIN-OR Open Solver Interface Common Unit Tests URL: https://projects.coin-or.org/Osi Version: @PACKAGE_VERSION@ Libs: ${libdir}/libOsiCommonTests.la Cflags: -I@abs_source_dir@/src/OsiCommonTest Requires: osi DyLP-1.10.4/Osi/configure0000755000175200017520000340002613434065666013536 0ustar coincoin#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for Osi 0.108.0. # # Report bugs to . # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # # # Copyright 2006 International Business Machines and others. # All Rights Reserved. # This file is part of the open source package Coin which is distributed # under the Eclipse Public License. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1 && unset CDPATH if test -z "$ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if (echo_test_string=`eval $cmd`) 2>/dev/null && echo_test_string=`eval $cmd` && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi tagnames=${tagnames+${tagnames},}CXX tagnames=${tagnames+${tagnames},}F77 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='Osi' PACKAGE_TARNAME='osi' PACKAGE_VERSION='0.108.0' PACKAGE_STRING='Osi 0.108.0' PACKAGE_BUGREPORT='osi@list.coin-or.org' ac_unique_file="src/Osi/OsiAuxInfo.cpp" ac_default_prefix=`pwd` # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os ALWAYS_FALSE_TRUE ALWAYS_FALSE_FALSE have_svnversion OSI_SVN_REV CDEFS ADD_CFLAGS DBG_CFLAGS OPT_CFLAGS sol_cc_compiler CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT COIN_CC_IS_CL_TRUE COIN_CC_IS_CL_FALSE MPICC CXXDEFS ADD_CXXFLAGS DBG_CXXFLAGS OPT_CXXFLAGS CXX CXXFLAGS ac_ct_CXX COIN_CXX_IS_CL_TRUE COIN_CXX_IS_CL_FALSE MPICXX EGREP LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOLM4 have_autoconf have_automake have_svn BUILDTOOLSDIR AUX_DIR abs_source_dir abs_lib_dir abs_include_dir abs_bin_dir HAVE_EXTERNALS_TRUE HAVE_EXTERNALS_FALSE host host_cpu host_vendor host_os ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL ac_c_preproc_warn_flag ac_cxx_preproc_warn_flag RPATH_FLAGS DEPENDENCY_LINKING_TRUE DEPENDENCY_LINKING_FALSE LT_LDFLAGS PKG_CONFIG ac_ct_PKG_CONFIG COIN_HAS_PKGCONFIG_TRUE COIN_HAS_PKGCONFIG_FALSE COIN_PKG_CONFIG_PATH COIN_PKG_CONFIG_PATH_UNINSTALLED COINUTILS_LIBS COINUTILS_CFLAGS COINUTILS_DATA COINUTILS_DEPENDENCIES COINUTILS_LIBS_INSTALLED COINUTILS_CFLAGS_INSTALLED COINUTILS_DATA_INSTALLED OSILIB_CFLAGS OSILIB_LIBS OSILIB_PCLIBS OSILIB_PCREQUIRES OSILIB_DEPENDENCIES OSILIB_CFLAGS_INSTALLED OSILIB_LIBS_INSTALLED COIN_HAS_COINUTILS_TRUE COIN_HAS_COINUTILS_FALSE GLPK_LIBS GLPK_CFLAGS GLPK_DATA GLPK_DEPENDENCIES GLPK_LIBS_INSTALLED GLPK_CFLAGS_INSTALLED GLPK_DATA_INSTALLED OSIGLPKLIB_CFLAGS OSIGLPKLIB_LIBS OSIGLPKLIB_PCLIBS OSIGLPKLIB_PCREQUIRES OSIGLPKLIB_DEPENDENCIES OSIGLPKLIB_CFLAGS_INSTALLED OSIGLPKLIB_LIBS_INSTALLED COIN_HAS_GLPK_TRUE COIN_HAS_GLPK_FALSE SOPLEX_LIBS SOPLEX_CFLAGS SOPLEX_DATA SOPLEX_DEPENDENCIES SOPLEX_LIBS_INSTALLED SOPLEX_CFLAGS_INSTALLED SOPLEX_DATA_INSTALLED OSISPXLIB_CFLAGS OSISPXLIB_LIBS OSISPXLIB_PCLIBS OSISPXLIB_PCREQUIRES OSISPXLIB_DEPENDENCIES OSISPXLIB_CFLAGS_INSTALLED OSISPXLIB_LIBS_INSTALLED COIN_HAS_SOPLEX_TRUE COIN_HAS_SOPLEX_FALSE SAMPLE_LIBS SAMPLE_CFLAGS SAMPLE_DATA SAMPLE_DEPENDENCIES SAMPLE_LIBS_INSTALLED SAMPLE_CFLAGS_INSTALLED SAMPLE_DATA_INSTALLED COIN_HAS_SAMPLE_TRUE COIN_HAS_SAMPLE_FALSE NETLIB_LIBS NETLIB_CFLAGS NETLIB_DATA NETLIB_DEPENDENCIES NETLIB_LIBS_INSTALLED NETLIB_CFLAGS_INSTALLED NETLIB_DATA_INSTALLED COIN_HAS_NETLIB_TRUE COIN_HAS_NETLIB_FALSE CPXINCDIR CPXLIB COIN_HAS_CPX_TRUE COIN_HAS_CPX_FALSE MSKINCDIR MSKLIB COIN_HAS_MSK_TRUE COIN_HAS_MSK_FALSE XPRINCDIR XPRLIB COIN_HAS_XPR_TRUE COIN_HAS_XPR_FALSE GRBINCDIR GRBLIB COIN_HAS_GRB_TRUE COIN_HAS_GRB_FALSE OSI_EXAMPLES_SOLVER_NAME OSI_EXAMPLES_SOLVER_CFLAGS OSI_EXAMPLES_SOLVER_LIBS OSI_EXAMPLES_SOLVER_PCNAME coin_have_doxygen coin_have_latex coin_doxy_usedot coin_doxy_tagname coin_doxy_logname COIN_HAS_DOXYGEN_TRUE COIN_HAS_DOXYGEN_FALSE COIN_HAS_LATEX_TRUE COIN_HAS_LATEX_FALSE coin_doxy_tagfiles coin_doxy_excludes LIBEXT VPATH_DISTCLEANFILES ABSBUILDDIR LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # 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. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= 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 ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -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 | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$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 ;; -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 ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) 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 ;; -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=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 ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && 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'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac 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 echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 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 # 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 its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | 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 if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CDEFS_set=${CDEFS+set} ac_env_CDEFS_value=$CDEFS ac_cv_env_CDEFS_set=${CDEFS+set} ac_cv_env_CDEFS_value=$CDEFS ac_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_cv_env_ADD_CFLAGS_set=${ADD_CFLAGS+set} ac_cv_env_ADD_CFLAGS_value=$ADD_CFLAGS ac_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_cv_env_DBG_CFLAGS_set=${DBG_CFLAGS+set} ac_cv_env_DBG_CFLAGS_value=$DBG_CFLAGS ac_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_cv_env_OPT_CFLAGS_set=${OPT_CFLAGS+set} ac_cv_env_OPT_CFLAGS_value=$OPT_CFLAGS ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_MPICC_set=${MPICC+set} ac_env_MPICC_value=$MPICC ac_cv_env_MPICC_set=${MPICC+set} ac_cv_env_MPICC_value=$MPICC ac_env_CXXDEFS_set=${CXXDEFS+set} ac_env_CXXDEFS_value=$CXXDEFS ac_cv_env_CXXDEFS_set=${CXXDEFS+set} ac_cv_env_CXXDEFS_value=$CXXDEFS ac_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_cv_env_ADD_CXXFLAGS_set=${ADD_CXXFLAGS+set} ac_cv_env_ADD_CXXFLAGS_value=$ADD_CXXFLAGS ac_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_cv_env_DBG_CXXFLAGS_set=${DBG_CXXFLAGS+set} ac_cv_env_DBG_CXXFLAGS_value=$DBG_CXXFLAGS ac_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_cv_env_OPT_CXXFLAGS_set=${OPT_CXXFLAGS+set} ac_cv_env_OPT_CXXFLAGS_value=$OPT_CXXFLAGS ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_MPICXX_set=${MPICXX+set} ac_env_MPICXX_value=$MPICXX ac_cv_env_MPICXX_set=${MPICXX+set} ac_cv_env_MPICXX_value=$MPICXX ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP ac_env_F77_set=${F77+set} ac_env_F77_value=$F77 ac_cv_env_F77_set=${F77+set} ac_cv_env_F77_value=$F77 ac_env_FFLAGS_set=${FFLAGS+set} ac_env_FFLAGS_value=$FFLAGS ac_cv_env_FFLAGS_set=${FFLAGS+set} ac_cv_env_FFLAGS_value=$FFLAGS ac_env_PKG_CONFIG_set=${PKG_CONFIG+set} ac_env_PKG_CONFIG_value=$PKG_CONFIG ac_cv_env_PKG_CONFIG_set=${PKG_CONFIG+set} ac_cv_env_PKG_CONFIG_value=$PKG_CONFIG # # 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 Osi 0.108.0 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 \`..'] _ACEOF cat <<_ACEOF 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] --datadir=DIR read-only architecture-independent data [PREFIX/share] --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] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _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 Osi 0.108.0:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug compile all projects with debug options tests (implies --disable-shared) --enable-debug-osi compile project Osi with debug compiler flags --enable-msvc Prefer (i)cl/ifort/link over GNU on MinGW/Cygwin. --enable-static[=PKGS] build static libraries [default=no] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --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-dependency-linking disable linking library dependencies into shared libraries --disable-pkg-config disable use of pkg-config (if available) --disable-interpackage-dependencies disables deduction of Makefile dependencies from package linker flags --disable-cplex-libcheck skip the link check at configuration time --disable-mosek-libcheck skip the link check at configuration time --disable-xpress-libcheck skip the link check at configuration time --disable-gurobi-libcheck skip the link check at configuration time Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-osi-verbosity specify the debug verbosity level for project Osi --with-osi-checklevel specify the sanity check level for project Osi --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] --with-coin-instdir prefix of installation directory for precompiled COIN packages --with-coinutils-lib linker flags for using package CoinUtils --with-coinutils-incdir directory with header files for using package CoinUtils --with-coinutils-datadir directory with data files for using package CoinUtils --with-glpk-lib linker flags for using package Glpk --with-glpk-incdir directory with header files for using package Glpk --with-glpk-datadir directory with data files for using package Glpk --with-soplex-lib linker flags for using package SoPlex --with-soplex-incdir directory with header files for using package SoPlex --with-soplex-datadir directory with data files for using package SoPlex --with-sample-lib linker flags for using package Sample --with-sample-incdir directory with header files for using package Sample --with-sample-datadir directory with data files for using package Sample --with-netlib-lib linker flags for using package Netlib --with-netlib-incdir directory with header files for using package Netlib --with-netlib-datadir directory with data files for using package Netlib --with-cplex-incdir specify the header file directory for library Cplex --with-cplex-lib specify the flags used to link with the library Cplex --with-mosek-incdir specify the header file directory for library Mosek --with-mosek-lib specify the flags used to link with the library Mosek --with-xpress-incdir specify the header file directory for library Xpress --with-xpress-lib specify the flags used to link with the library Xpress --with-gurobi-incdir specify the header file directory for library Gurobi --with-gurobi-lib specify the flags used to link with the library Gurobi --with-dot use dot (from graphviz) when creating documentation with doxygen if available; --without-dot to disable Some influential environment variables: CDEFS Additional -D flags to be used when compiling C code. ADD_CFLAGS Additional C compiler options DBG_CFLAGS Debug C compiler options OPT_CFLAGS Optimize C compiler options CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory MPICC C MPI Compiler CXXDEFS Additional -D flags to be used when compiling C++ code. ADD_CXXFLAGS Additional C++ compiler options DBG_CXXFLAGS Debug C++ compiler options OPT_CXXFLAGS Optimize C++ compiler options CXX C++ compiler command CXXFLAGS C++ compiler flags MPICXX C++ MPI Compiler CPP C preprocessor CXXCPP C++ preprocessor F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags PKG_CONFIG path to pkg-config utility 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 fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style 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 elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Osi configure 0.108.0 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Copyright 2006 International Business Machines and others. All Rights Reserved. This file is part of the open source package Coin which is distributed under the Eclipse Public License. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Osi $as_me 0.108.0, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { 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` hostinfo = `(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=. echo "PATH: $as_dir" done } >&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_sep= 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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$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 ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >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 # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" 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. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 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 `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 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 { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`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. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } 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 # List one file in the package so that the configure script can test # whether the package is actually there # Where should everything be installed by default? Here, we want it # to be installed directly in 'bin', 'lib', 'include' subdirectories # of the directory where configure is run. The default would be # /usr/local. ############################################################################# # Standard build tool stuff # ############################################################################# # Get the system type ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; 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 { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # A bit of initial setup # As backup, we make sure we don't loose an FLIBS if it has been set # by the user save_FLIBS="$FLIBS" # A useful makefile conditional that is always false if false; then ALWAYS_FALSE_TRUE= ALWAYS_FALSE_FALSE='#' else ALWAYS_FALSE_TRUE='#' ALWAYS_FALSE_FALSE= fi # We set the following variable so that we know later in AC_COIN_FINALIZE # that we are in a project main directory coin_projectdir=yes # Set the project's version numbers cat >>confdefs.h <<_ACEOF #define OSI_VERSION "$PACKAGE_VERSION" _ACEOF coin_majorver=`echo $PACKAGE_VERSION | sed -n -e 's/^\([0-9]*\).*/\1/gp'` coin_minorver=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.\([0-9]*\).*/\1/gp'` coin_releasever=`echo $PACKAGE_VERSION | sed -n -e 's/^[0-9]*\.[0-9]*\.\([0-9]*\).*/\1/gp'` if test "x$coin_majorver" = x ; then coin_majorver=9999 ; fi if test "x$coin_minorver" = x ; then coin_minorver=9999 ; fi if test "x$coin_releasever" = x ; then coin_releasever=9999 ; fi cat >>confdefs.h <<_ACEOF #define OSI_VERSION_MAJOR $coin_majorver _ACEOF cat >>confdefs.h <<_ACEOF #define OSI_VERSION_MINOR $coin_minorver _ACEOF cat >>confdefs.h <<_ACEOF #define OSI_VERSION_RELEASE $coin_releasever _ACEOF # We use the following variable to have a string with the upper case # version of the project name COIN_PRJCT=OSI # Set the project's SVN revision number. The complicated sed expression # (made worse by quadrigraphs) ensures that things like 4123:4168MS end up # as a single number. # Extract the first word of "svnversion", so it can be a program name with args. set dummy svnversion; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svnversion+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svnversion"; then ac_cv_prog_have_svnversion="$have_svnversion" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svnversion="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svnversion" && ac_cv_prog_have_svnversion="no" fi fi have_svnversion=$ac_cv_prog_have_svnversion if test -n "$have_svnversion"; then echo "$as_me:$LINENO: result: $have_svnversion" >&5 echo "${ECHO_T}$have_svnversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "x$have_svnversion" = xyes; then svn_rev_tmp=`LANG=en_EN svnversion $srcdir 2>/dev/null` if test "x$svn_rev_tmp" != xexported -a "x$svn_rev_tmp" != x -a "x$svn_rev_tmp" != "xUnversioned directory"; then OSI_SVN_REV=`echo $svn_rev_tmp | sed -n -e 's/^[0-9]*://' -e 's/\([0-9]\)[^0-9]*$/\1/p'` cat >>confdefs.h <<_ACEOF #define OSI_SVN_REV $OSI_SVN_REV _ACEOF fi fi # Capture libtool library version, if given. coin_libversion=14:0:13 # Check if user wants to produce debugging code echo "$as_me:$LINENO: checking whether we want to compile in debug mode" >&5 echo $ECHO_N "checking whether we want to compile in debug mode... $ECHO_C" >&6 # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" case "${enableval}" in yes) coin_debug_compile=true if test "${enable_shared+set}" = set; then :; else enable_shared=no fi ;; no) coin_debug_compile=false ;; *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug" >&5 echo "$as_me: error: bad value ${enableval} for --enable-debug" >&2;} { (exit 1); exit 1; }; } ;; esac else coin_debug_compile=false fi; # Check whether --enable-debug-osi or --disable-debug-osi was given. if test "${enable_debug_osi+set}" = set; then enableval="$enable_debug_osi" case "${enableval}" in yes) coin_debug_compile=true ;; no) coin_debug_compile=false ;; *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-debug-osi" >&5 echo "$as_me: error: bad value ${enableval} for --enable-debug-osi" >&2;} { (exit 1); exit 1; }; } ;; esac else : fi; # m4_ifvaln([Osi], if test $coin_debug_compile = true; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Check whether --with-osi-verbosity or --without-osi-verbosity was given. if test "${with_osi_verbosity+set}" = set; then withval="$with_osi_verbosity" if test "$withval" = yes; then withval=1 fi coin_osi_verbosity=$withval else coin_osi_verbosity=0 fi; cat >>confdefs.h <<_ACEOF #define COIN_OSI_VERBOSITY $coin_osi_verbosity _ACEOF # Check whether --with-osi-checklevel or --without-osi-checklevel was given. if test "${with_osi_checklevel+set}" = set; then withval="$with_osi_checklevel" if test "$withval" = yes; then withval=1 fi coin_osi_checklevel=$withval else coin_osi_checklevel=0 fi; cat >>confdefs.h <<_ACEOF #define COIN_OSI_CHECKLEVEL $coin_osi_checklevel _ACEOF # m4_ifvaln([Osi], # Get the name of the C++ compiler and appropriate compiler options # for backward compatibility # Check whether --enable-doscompile or --disable-doscompile was given. if test "${enable_doscompile+set}" = set; then enableval="$enable_doscompile" enable_doscompile=$enableval else enable_doscompile=no fi; # Check whether --enable-msvc or --disable-msvc was given. if test "${enable_msvc+set}" = set; then enableval="$enable_msvc" enable_msvc=$enableval else enable_msvc=no if test "$enable_doscompile" = msvc ; then enable_msvc=yes elif test "$enable_doscompile" != no ; then { { echo "$as_me:$LINENO: error: --enable-doscompile=$enable_doscompile not supported anymore." >&5 echo "$as_me: error: --enable-doscompile=$enable_doscompile not supported anymore." >&2;} { (exit 1); exit 1; }; } fi fi; if test "$enable_msvc" = MD; then enable_shared=yes enable_msvc=yes fi if test "$enable_msvc" = yes; then case $build in *-cygwin* | *-mingw*) ;; *) { { echo "$as_me:$LINENO: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&5 echo "$as_me: error: --enable-msvc option makes sense only under Cygwin or MinGW" >&2;} { (exit 1); exit 1; }; } ;; esac 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 # For consistency, we set the C compiler to the same value of the C++ # compiler, if the C++ is set, but the C compiler isn't (only for CXX=cl) if test x"$CXX" != x; then case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) if test x"$CC" = x; then CC="$CXX" { echo "$as_me:$LINENO: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&5 echo "$as_me: WARNING: C++ compiler name provided as $CXX, but CC is unset. Setting CC to $CXX" >&2;} fi ;; esac fi coin_has_cc=yes save_cflags="$CFLAGS" # For *-*-solaris*, promote Studio/Workshop cc compiler to front of list. # Depending on the user's PATH, when Studio/Workshop cc is not present we may # find /usr/ucb/cc, which is almost certainly not a good choice for the C # compiler. In this case, put cc after gcc. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl gcc" else comps="gcc icl cl" fi ;; *-*-solaris*) # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_sol_cc_compiler+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$sol_cc_compiler"; then ac_cv_prog_sol_cc_compiler="$sol_cc_compiler" # 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_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_sol_cc_compiler="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done 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_sol_cc_compiler 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 sol_cc_compiler to just the basename; use the full file name. shift ac_cv_prog_sol_cc_compiler="$as_dir/$ac_word${1+' '}$@" fi fi fi fi sol_cc_compiler=$ac_cv_prog_sol_cc_compiler if test -n "$sol_cc_compiler"; then echo "$as_me:$LINENO: result: $sol_cc_compiler" >&5 echo "${ECHO_T}$sol_cc_compiler" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$sol_cc_compiler" = "cc" ; then comps="cc xlc gcc pgcc icc" else comps="xlc gcc pgcc icc cc" fi ;; *-*-darwin*) comps="clang gcc cc" ;; *-linux-gnu*) comps="gcc cc pgcc icc xlc" ;; *-linux-*) comps="xlc gcc cc pgcc icc" ;; *) comps="xlc_r xlc cc gcc pgcc icc" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CC || test "${ac_cv_prog_CC+set}" != set || { ac_cv_prog_CC=; export ac_cv_prog_CC; } # AC_MSG_NOTICE([C compiler candidates: $comps]) 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 for ac_prog in $comps 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out 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. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* 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 -std1 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 -std1. */ int osf4_cc_array ['\x00' == 0 ? 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 # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f 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 -z "$CC" ; then { { echo "$as_me:$LINENO: error: Failed to find a C compiler!" >&5 echo "$as_me: error: Failed to find a C compiler!" >&2;} { (exit 1); exit 1; }; } fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cc_g" = yes ; then ac_cv_prog_cc_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CFLAGS="$save_cflags" # add automake conditional so we can recognize cl compiler in makefile coin_cc_is_cl=false case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_cc_is_cl=true ;; esac if test $coin_cc_is_cl = true; then COIN_CC_IS_CL_TRUE= COIN_CC_IS_CL_FALSE='#' else COIN_CC_IS_CL_TRUE='#' COIN_CC_IS_CL_FALSE= fi # Check if a project specific CFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CFLAGS+set} if test x$coin_tmp = xset; then eval CFLAGS=\${${COIN_PRJCT}_CFLAGS} fi fi if test x"$CFLAGS" = x; then coin_add_cflags= coin_opt_cflags= coin_dbg_cflags= coin_warn_cflags= if test "$GCC" = "yes"; then case "$CC" in icc* | */icc*) ;; *) coin_opt_cflags="-O3" coin_add_cflags="-pipe" coin_dbg_cflags="-g -O0" coin_warn_cflags="-Wimplicit -Wparentheses -Wsequence-point -Wreturn-type -Wcast-qual -Wall -Wno-unknown-pragmas -Wno-long-long" esac fi if test -z "$coin_opt_cflags"; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -O2' coin_dbg_cflags='-MDd' else coin_opt_cflags='-MT -O2' coin_dbg_cflags='-MTd' fi coin_add_cflags='-nologo -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cflags='-MD -Ox' coin_dbg_cflags='-MDd -debug' else coin_opt_cflags='-MT -Ox' coin_dbg_cflags='-MTd -debug' fi coin_add_cflags='-nologo -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CC" in icc* | */icc*) coin_opt_cflags="-O3 -ip -mp1" coin_add_cflags="" coin_dbg_cflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cflags="-i_dynamic $coin_add_cflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgcc* | */pgcc*) coin_opt_cflags="-fast" coin_add_cflags="-Kieee -pc 64" coin_dbg_cflags="-g" ;; esac ;; *-ibm-*) case "$CC" in xlc* | */xlc* | mpxlc* | */mpxlc*) coin_opt_cflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cflags="-bmaxdata:0x80000000 -qsuppress=1500-036 -qsuppress=1500-029" coin_dbg_cflags="-g" ;; esac ;; *-hp-*) coin_opt_cflags="-O" coin_add_cflags="-Ae" coin_dbg_cflags="-g" ;; *-*-solaris*) coin_opt_cflags="-xO4" coin_dbg_cflags="-g" ;; *-sgi-*) coin_opt_cflags="-O -OPT:Olimit=0" coin_dbg_cflags="-g" ;; esac fi if test "$ac_cv_prog_cc_g" = yes && test -z "$coin_dbg_cflags" ; then coin_dbg_cflags="-g" fi if test -z "$coin_opt_cflags"; then # Try if -O option works if nothing else is set CFLAGS="-O" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cflags" = xyes; then coin_warn_cflags= fi if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$coin_dbg_cflags $coin_add_cflags $coin_warn_cflags" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$coin_opt_cflags $coin_add_cflags -DNDEBUG $coin_warn_cflags" fi DBG_CFLAGS="$DBG_CFLAGS $ADD_CFLAGS $CDEFS" OPT_CFLAGS="$OPT_CFLAGS $ADD_CFLAGS $CDEFS" if test "$coin_debug_compile" = "true"; then CFLAGS="$DBG_CFLAGS" else CFLAGS="$OPT_CFLAGS" fi else CFLAGS="$CFLAGS $ADD_CFLAGS $CDEFS" if test x${DBG_CFLAGS+set} != xset; then DBG_CFLAGS="$CFLAGS" fi if test x${OPT_CFLAGS+set} != xset; then OPT_CFLAGS="$CFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CFLAGS="$CFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CFLAGS works save_CFLAGS="$CFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: The value CFLAGS=\"$save_CFLAGS\" do not work. I will now just try '-O', but you might want to set CFLAGS manually." >&2;} CFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&5 echo "$as_me: WARNING: This value for CFLAGS does not work. I will continue with empty CFLAGS, but you might want to set CFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C compiler options are: $CFLAGS" >&5 echo "$as_me: C compiler options are: $CFLAGS" >&6;} if test x"$MPICC" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C compiler $MPICC" >&5 echo "$as_me: Will use MPI C compiler $MPICC" >&6;} CC="$MPICC" fi # Correct the LD variable if we are using the MS or Intel-windows compiler case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac 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 #Let's try if that overcomes configuration problem with VC++ 6.0 ac_ext=cc 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 coin_has_cxx=yes save_cxxflags="$CXXFLAGS" # For *-*-solaris*, promote Studio/Workshop compiler to front of list. case $build in *-cygwin* | *-mingw*) if test "$enable_msvc" = yes ; then comps="icl cl g++" else comps="g++ icl cl" fi ;; *-*-solaris*) comps="CC xlC_r aCC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; *-darwin*) comps="clang++ g++ c++ CC" ;; *-linux-gnu*) comps="g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC xlC_r aCC CC" ;; *) comps="xlC_r aCC CC g++ c++ pgCC icpc gpp cxx cc++ cl FCC KCC RCC" ;; esac # We delete the cached value, since the test might not have been # performed with our choice of compilers earlier $as_unset ac_cv_prog_CXX || test "${ac_cv_prog_CXX+set}" != set || { ac_cv_prog_CXX=; export ac_cv_prog_CXX; } # AC_MSG_NOTICE([C++ compiler candidates: $comps]) ac_ext=cc 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 -n "$ac_tool_prefix"; then for ac_prog in $CCC $comps 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC $comps do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$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 for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=cc 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_PROG_CXX sets CXX to g++ if it cannot find a working C++ compiler #thus, we test here whether $CXX is actually working ac_ext=cc 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 echo "$as_me:$LINENO: checking whether C++ compiler $CXX works" >&5 echo $ECHO_N "checking whether C++ compiler $CXX works... $ECHO_C" >&6; cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&5 echo "$as_me: error: failed to find a C++ compiler or C++ compiler $CXX does not work" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cc 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 coin_cxx_is_cl=false # It seems that we need to cleanup something here for the Windows case "$CXX" in clang* | */clang*) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) sed -e 's/^void exit (int);//' confdefs.h >> confdefs.hh mv confdefs.hh confdefs.h coin_cxx_is_cl=true ;; esac # add automake conditional so we can recognize cl compiler in makefile if test $coin_cxx_is_cl = true; then COIN_CXX_IS_CL_TRUE= COIN_CXX_IS_CL_FALSE='#' else COIN_CXX_IS_CL_TRUE='#' COIN_CXX_IS_CL_FALSE= fi # Autoconf incorrectly concludes that cl recognises -g. It doesn't. case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* ) if test "$ac_cv_prog_cxx_g" = yes ; then ac_cv_prog_cxx_g=no { echo "$as_me:$LINENO: Overruling autoconf; cl does not recognise -g." >&5 echo "$as_me: Overruling autoconf; cl does not recognise -g." >&6;} fi ;; * ) if test x"$CYGPATH_W" = x ; then CYGPATH_W=echo fi ;; esac CXXFLAGS="$save_cxxflags" # Check if a project specific CXXFLAGS variable has been set if test x$COIN_PRJCT != x; then eval coin_tmp=\${${COIN_PRJCT}_CXXFLAGS+set} if test x$coin_tmp = xset; then eval CXXFLAGS=\${${COIN_PRJCT}_CXXFLAGS} fi fi if test x"$CXXFLAGS" = x; then # ToDo decide whether we want -DNDEBUG for optimization coin_add_cxxflags= coin_opt_cxxflags= coin_dbg_cxxflags= coin_warn_cxxflags= if test "$GXX" = "yes"; then case "$CXX" in icpc* | */icpc*) ;; *) # ToDo decide about unroll-loops coin_opt_cxxflags="-O3" coin_add_cxxflags="-pipe" coin_dbg_cxxflags="-g -O0" coin_warn_cxxflags="-Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas -Wno-long-long" esac fi # Note that we do not need to cover GCC in the following tests. if test -z "$coin_opt_cxxflags"; then case $build in *-cygwin* | *-mingw*) case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -O2' coin_dbg_cxxflags='-MDd' else coin_opt_cxxflags='-MT -O2' coin_dbg_cxxflags='-MTd' fi coin_add_cxxflags='-nologo -EHsc -GR -wd4996 -D_CRT_SECURE_NO_DEPRECATE' ;; icl* | */icl* | ICL* | */ICL*) # The MT and MTd options are mutually exclusive if test "$coin_disable_shared" = yes || test "$enable_shared" = yes ; then coin_opt_cxxflags='-MD -Ox' coin_dbg_cxxflags='-MDd -debug' else coin_opt_cxxflags='-MT -Ox' coin_dbg_cxxflags='-MTd -debug' fi coin_add_cxxflags='-nologo -EHsc -GR -D_CRT_SECURE_NO_DEPRECATE' ;; esac ;; *-linux-*) case "$CXX" in icpc* | */icpc*) coin_opt_cxxflags="-O3 -ip -mp1" coin_add_cxxflags="" coin_dbg_cxxflags="-g" # Check if -i_dynamic is necessary (for new glibc library) CXXFLAGS= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 coin_add_cxxflags="-i_dynamic $coin_add_cxxflags" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ;; pgCC* | */pgCC*) coin_opt_cxxflags="-fast" coin_add_cxxflags="-Kieee -pc 64" coin_dbg_cxxflags="-g" ;; esac ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) coin_opt_cxxflags="-O -qarch=auto -qcache=auto -qtune=auto -qmaxmem=-1" coin_add_cxxflags="-bmaxdata:0x80000000 -qrtti=dyna -qsuppress=1500-036 -qsuppress=1500-029 -qsourcetype=c++" coin_dbg_cxxflags="-g" ;; esac ;; *-hp-*) case "$CXX" in aCC* | */aCC* ) coin_opt_cxxflags="-O" coin_add_cxxflags="-AA" coin_dbg_cxxflags="-g" ;; esac ;; *-*-solaris*) coin_opt_cxxflags="-O4" coin_dbg_cxxflags="-g" ;; esac fi # Generic flag settings. If these don't work, add a case above. if test "$ac_cv_prog_cxx_g" = yes && test -z "$coin_dbg_cxxflags" ; then coin_dbg_cxxflags="-g" fi if test -z "$coin_opt_cxxflags"; then # Try if -O option works if nothing else is set CXXFLAGS=-O cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then coin_opt_cxxflags="-O" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # if PM doesn't want the warning messages, take them out if test x"$coin_skip_warn_cxxflags" = xyes; then coin_warn_cxxflags= fi # Do final setup of flags based on values determined above. if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$coin_dbg_cxxflags $coin_add_cxxflags $coin_warn_cxxflags" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$coin_opt_cxxflags $coin_add_cxxflags -DNDEBUG $coin_warn_cxxflags" fi DBG_CXXFLAGS="$DBG_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" OPT_CXXFLAGS="$OPT_CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test "$coin_debug_compile" = "true"; then CXXFLAGS="$DBG_CXXFLAGS" else CXXFLAGS="$OPT_CXXFLAGS" fi # Handle the case where CXXFLAGS was set externally. else CXXFLAGS="$CXXFLAGS $ADD_CXXFLAGS $CXXDEFS" if test x${DBG_CXXFLAGS+set} != xset; then DBG_CXXFLAGS="$CXXFLAGS" fi if test x${OPT_CXXFLAGS+set} != xset; then OPT_CXXFLAGS="$CXXFLAGS" fi fi # add -DPROJECT_BUILD to signal compiler preprocessor which config header file to include if test x$COIN_PRJCT != x; then CXXFLAGS="$CXXFLAGS -D${COIN_PRJCT}_BUILD" fi # Try if CXXFLAGS works save_CXXFLAGS="$CXXFLAGS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: The flags CXXFLAGS=\"$save_CXXFLAGS\" do not work. I will now just try '-O', but you might want to set CXXFLAGS manually." >&2;} CXXFLAGS='-O' cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { int i=0; i++; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS= fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$CXXFLAGS"; then { echo "$as_me:$LINENO: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&5 echo "$as_me: WARNING: This value for CXXFLAGS does not work. I will continue with empty CXXFLAGS, but you might want to set CXXFLAGS manually." >&2;} fi fi { echo "$as_me:$LINENO: C++ compiler options are: $CXXFLAGS" >&5 echo "$as_me: C++ compiler options are: $CXXFLAGS" >&6;} if test x"$MPICXX" = x; then :; else { echo "$as_me:$LINENO: Will use MPI C++ compiler $MPICXX" >&5 echo "$as_me: Will use MPI C++ compiler $MPICXX" >&6;} CXX="$MPICXX" fi # correct the LD variable in a build with MS or Intel-windows compiler case "$CXX" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LD=link ;; esac 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 # Initialize automake and libtool { # START coin_disable_shared=no # Test if force_shared has been set if test "x" = xforce_shared; then if test x$enable_shared = xno; then { { echo "$as_me:$LINENO: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&5 echo "$as_me: error: Shared libraries are disabled by user, but this is not feasible with the given options" >&2;} { (exit 1); exit 1; }; } fi enable_shared=yes; else case $build in *-cygwin* | *-mingw*) coin_disable_shared=yes if test x"$enable_shared" = xyes; then case "$CC" in clang* ) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Building of DLLs not supported in this configuration." >&5 echo "$as_me: Building of DLLs not supported in this configuration." >&6;} ;; *gcc*) if test x"$enable_dependency_linking" = xyes; then coin_disable_shared=no else { echo "$as_me:$LINENO: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&5 echo "$as_me: WARNING: Dependency linking seems to be disabled, so shared libraries (DLLs) will not be built" >&2;} fi ;; *) { echo "$as_me:$LINENO: WARNING: Building of DLLs not supported in this configuration." >&5 echo "$as_me: WARNING: Building of DLLs not supported in this configuration." >&2;} ;; esac fi ;; *-aix*) coin_disable_shared=yes platform=AIX if test x"$enable_shared" = xyes; then { echo "$as_me:$LINENO: WARNING: Shared objects are not supported." >&5 echo "$as_me: WARNING: Shared objects are not supported." >&2;} fi ;; esac fi if test x"$coin_disable_shared" = xyes; then if test x"$enable_shared" = xyes; then : else # we don't disable shared, because it was not selected anyway coin_disable_shared=no fi enable_shared=no fi # By default, we only want the shared objects to be compiled # Check whether --enable-static or --disable-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; # Initialize automake echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi am__api_version="1.9" # 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. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_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 ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done 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. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$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' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # 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 ( 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 rm -f conftest.file 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". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 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 $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-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='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi # AC_MSG_NOTICE([Beginning automake initialisation.]) # Stuff for automake # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } 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='osi' VERSION='0.108.0' 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"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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'. 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 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 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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 echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$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 depcc="$CXX" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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'. 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 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 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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 echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 # Check whether --enable-maintainer-mode or --disable-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; echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$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 coin_have_externals=no if test "$enable_maintainer_mode" = yes; then # If maintainer mode is chosen, we make sure that the correct versions # of the tools are used, and that we know where libtool.m4 is (to # recreate acinclude.m4) LIBTOOLM4= # Normally, $HOME AUTOTOOLS_DFLT=$HOME echo "$as_me:$LINENO: checking whether we are using the correct autotools" >&5 echo $ECHO_N "checking whether we are using the correct autotools... $ECHO_C" >&6 if test "${ac_cv_use_correct_autotools+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_use_correct_autotools=check fi echo "$as_me:$LINENO: result: $ac_cv_use_correct_autotools" >&5 echo "${ECHO_T}$ac_cv_use_correct_autotools" >&6 if test $ac_cv_use_correct_autotools = check; then ac_cv_use_correct_autotools=yes # Check if we have autoconf # Extract the first word of "autoconf", so it can be a program name with args. set dummy autoconf; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_autoconf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_autoconf"; then ac_cv_prog_have_autoconf="$have_autoconf" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_autoconf="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_autoconf" && ac_cv_prog_have_autoconf="no" fi fi have_autoconf=$ac_cv_prog_have_autoconf if test -n "$have_autoconf"; then echo "$as_me:$LINENO: result: $have_autoconf" >&5 echo "${ECHO_T}$have_autoconf" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_autoconf = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find autoconf in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether autoconf is the correct version correct_version='2.59' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of autoconf" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of autoconf... $ECHO_C" >&6 autoconf --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of autoconf as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of autoconf as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable autoconf is picked up from the correct location echo "$as_me:$LINENO: checking whether autoconf is coming from the correct location" >&5 echo $ECHO_N "checking whether autoconf is coming from the correct location... $ECHO_C" >&6 autoconf_dir=`which autoconf | sed -e 's=/autoconf=='` autoconf_dir=`cd $autoconf_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $autoconf_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The autoconf executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if we have automake # Extract the first word of "automake", so it can be a program name with args. set dummy automake; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_automake+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_automake"; then ac_cv_prog_have_automake="$have_automake" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_automake="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_automake" && ac_cv_prog_have_automake="no" fi fi have_automake=$ac_cv_prog_have_automake if test -n "$have_automake"; then echo "$as_me:$LINENO: result: $have_automake" >&5 echo "${ECHO_T}$have_automake" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test $have_automake = no; then { { echo "$as_me:$LINENO: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&5 echo "$as_me: error: You specified you want to use maintainer mode, but I cannot find automake in your path." >&2;} { (exit 1); exit 1; }; } fi # Check whether automake is the correct version correct_version='1.9.6' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of automake" >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of automake... $ECHO_C" >&6 automake --version > confauto.out 2>&1 if $EGREP $grep_version confauto.out >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of automake as the first one in your path." >&5 echo "$as_me: error: You don't have the correct version of automake as the first one in your path." >&2;} { (exit 1); exit 1; }; } fi rm -f confauto.out # Check if the executable automake is picked up from the correct location echo "$as_me:$LINENO: checking whether automake is coming from the correct location" >&5 echo $ECHO_N "checking whether automake is coming from the correct location... $ECHO_C" >&6 automake_dir=`which automake | sed -e 's=/automake=='` automake_dir=`cd $automake_dir; pwd` if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/bin else want_dir=$AUTOTOOLS_DIR/bin fi if test $automake_dir = `cd $want_dir; pwd`; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else rm -f confauto.out echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&5 echo "$as_me: error: The automake executable should be picked up from \$AUTOTOOLS_DFLT/bin or \$AUTOTOOLS_DIR/bin." >&2;} { (exit 1); exit 1; }; } fi # Check if this is the correct version of libtool (with escaped dots) if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi correct_version='1.5.22' grep_version=`echo $correct_version | sed -e 's/\\./\\\\\\./g'` if test -r $want_dir/libtool/ltmain.sh; then have_ltmain=yes : else have_ltmain=no : fi echo "$as_me:$LINENO: checking whether we are using the correct version ($correct_version) of libtool." >&5 echo $ECHO_N "checking whether we are using the correct version ($correct_version) of libtool.... $ECHO_C" >&6 if test $have_ltmain = yes; then if $EGREP $grep_version $want_dir/libtool/ltmain.sh >/dev/null 2>&1; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: You don't have the correct version of libtool." >&5 echo "$as_me: error: You don't have the correct version of libtool." >&2;} { (exit 1); exit 1; }; } fi else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: I cannot find the ltmain.sh file." >&5 echo "$as_me: error: I cannot find the ltmain.sh file." >&2;} { (exit 1); exit 1; }; } fi fi # Check if we can find the libtool file if test x$AUTOTOOLS_DIR = x; then want_dir=$AUTOTOOLS_DFLT/share else want_dir=$AUTOTOOLS_DIR/share fi if test -r $want_dir/aclocal/libtool.m4; then LIBTOOLM4="$want_dir/aclocal/libtool.m4" : else { { echo "$as_me:$LINENO: error: I cannot find the libtool.m4 file." >&5 echo "$as_me: error: I cannot find the libtool.m4 file." >&2;} { (exit 1); exit 1; }; } : fi # Check if we have an Dependencies file if test -r $srcdir/Dependencies; then coin_have_externals=yes fi # Check if subversion is installed and understands https # Extract the first word of "svn", so it can be a program name with args. set dummy svn; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_have_svn+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$have_svn"; then ac_cv_prog_have_svn="$have_svn" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_have_svn="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_have_svn" && ac_cv_prog_have_svn="no" fi fi have_svn=$ac_cv_prog_have_svn if test -n "$have_svn"; then echo "$as_me:$LINENO: result: $have_svn" >&5 echo "${ECHO_T}$have_svn" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test x$have_svn = xyes; then echo "$as_me:$LINENO: checking whether svn understands https" >&5 echo $ECHO_N "checking whether svn understands https... $ECHO_C" >&6 if test "${ac_cv_svn_understands_https+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else svn --version > confauto.out 2>&1 if $EGREP https confauto.out >/dev/null 2>&1; then ac_cv_svn_understands_https=yes else ac_cv_svn_understands_https=no have_svn=no ac_cv_prog_have_svn=no fi rm -f confauto.out fi echo "$as_me:$LINENO: result: $ac_cv_svn_understands_https" >&5 echo "${ECHO_T}$ac_cv_svn_understands_https" >&6 fi # Find the location of the BuildTools directory BUILDTOOLSDIR= if test -r $srcdir/BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/BuildTools else if test -r $srcdir/../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../BuildTools else if test -r $srcdir/../../BuildTools/coin.m4; then BUILDTOOLSDIR=$srcdir/../../BuildTools else { { echo "$as_me:$LINENO: error: Cannot find the BuildTools directory" >&5 echo "$as_me: error: Cannot find the BuildTools directory" >&2;} { (exit better disable maintainer mode.); exit better disable maintainer mode.; }; } fi fi fi # for running automake by make, we need to have Makemain.inc available at the place where it usually can be found during run_autotools if test "$BUILDTOOLSDIR" != "$srcdir/BuildTools" ; then $LN_S `cd $BUILDTOOLSDIR; pwd` "$srcdir/BuildTools" fi # The following variable is set to the name of the directory where # the autotool scripts are located AUX_DIR=$ac_aux_dir fi # helpful variable for the base directory of this package abs_source_dir=`cd $srcdir; pwd` # Stuff for example Makefiles if test x$prefix = xNONE; then full_prefix=$ac_default_prefix else full_prefix=$prefix fi full_prefix=`cd $full_prefix ; pwd` abs_lib_dir=$full_prefix/lib abs_include_dir=$full_prefix/include abs_bin_dir=$full_prefix/bin if test $coin_have_externals = yes && test x$have_svn = xyes; then HAVE_EXTERNALS_TRUE= HAVE_EXTERNALS_FALSE='#' else HAVE_EXTERNALS_TRUE='#' HAVE_EXTERNALS_FALSE= fi # AC_MSG_NOTICE([End automake initialisation.]) LIBTOOL= if test -f ../libtool; then coin_config_dir=.. LIBTOOL='$(SHELL) $(top_builddir)/../libtool' fi if test "x$LIBTOOL" = x; then if test -f ../../libtool; then coin_config_dir=../.. LIBTOOL='$(SHELL) $(top_builddir)/../../libtool' fi fi if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Creating libtool script (calling COIN_PROG_LIBTOOL).]) # Stuff for libtool # Check whether --enable-shared or --disable-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 --enable-fast-install or --disable-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; echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 if test "${lt_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # 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 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 fi SED=$lt_cv_path_SED echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 # Check whether --with-gnu-ld or --without-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. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&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 echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$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 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 echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 echo "${ECHO_T}$lt_cv_path_NM" >&6 NM="$lt_cv_path_NM" echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 aix4* | aix5*) 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'. lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | kfreebsd*-gnu | 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 ;; 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]) 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 ;; interix3*) # 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 Linux ELF. linux*) 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=unknown ;; 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 ;; solaris*) 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 ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac fi echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 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 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 whether --enable-libtool-lock or --disable-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:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 5829 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|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-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) 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" echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f 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 echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$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 ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) LD="${LD-ld} -64" ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" 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 echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f 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 echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #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)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF 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=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to osi@list.coin-or.org ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done 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=cc 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 echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f 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 echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc 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 fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done F77=$ac_ct_F77 fi # Provide some information about the compiler. echo "$as_me:6963:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo 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 # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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*) # 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; ;; 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 ;; 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 ;; *) # 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. SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done 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` ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 else echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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]*\)' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \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\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; linux*) if test "$host_cpu" = ia64; then symcode='[ABCDGIRSTW]' lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" 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 # 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 # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Try without a prefix undercore, 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. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$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=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && 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 < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_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 -f 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 echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6 else echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6 objdir=$lt_cv_objdir 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 # 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 to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' 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 \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 <&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 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 echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 <&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 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 echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAGIC_CMD=: fi fi fi ;; esac enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-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 # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi; test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= 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;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' # 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 printf "$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 printf "$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 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... lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$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:8030: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8034: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$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= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 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*) # 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' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # 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' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; interix3*) # 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 ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; hpux*) # 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='-fPIC' ;; esac ;; *) lt_prog_compiler_pic='-fPIC' ;; 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 ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic='-qnocommon' lt_prog_compiler_wl='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # 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' ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # 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' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) 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 echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 echo "${ECHO_T}$lt_prog_compiler_pic" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext printf "$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:8298: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8302: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 if test x"$lt_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 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 # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works=yes fi else lt_prog_compiler_static_works=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 if test x"$lt_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:8402: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8406: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag= enable_shared_with_static_runtimes=no archive_cmds= archive_expsym_cmds= old_archive_From_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported link_all_deplibs=unknown hardcode_automatic=no module_cmds= module_expsym_cmds= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # 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_" # 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. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # 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 if test "$with_gnu_ld" = 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>/dev/null` in *\ [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 aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) 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 # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs=no ;; 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*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' 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/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' 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 ;; interix3*) 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' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= 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; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # 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; $echo \"$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' ;; esac archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; 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 -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi 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 $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' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&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. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then 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 ;; 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 ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$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 $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 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 ;; aix4* | aix5*) 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 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")) && (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].*|aix5*) 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_libdir_separator=':' link_all_deplibs=yes 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 hardcode_direct=yes 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 # 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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 echo "${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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' 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*) 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 # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32*) # 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. 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 `echo "$deplibs" | $SED -e '\''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' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs=no ;; esac fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=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* | kfreebsd*-gnu | dragonfly*) archive_cmds='$CC -shared -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 -fPIC ${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 -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${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 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 -a "$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 ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${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' ;; *) archive_cmds='$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 hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=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 $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld='-rpath $libdir' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: 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 ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no 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 ;; 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" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi 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} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${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='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -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; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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 hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${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 ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else 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' 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 linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; 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*) 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='`test -z "$SCOABSPATH" && echo ${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,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$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 fi echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6 test "$ld_shlibs" = no && can_build_shared=no # # 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 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:$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=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 echo "${ECHO_T}$archive_cmds_need_lc" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var" || \ test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existant 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_AC_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 echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6 if test "$hardcode_action" = relink; 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 striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&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" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}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" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac 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*) 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 echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; 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 ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* 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_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* 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_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" 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" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 < #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 #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=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; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && 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 echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$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\" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 < #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 #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=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; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && 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 echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$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 # Report which library types will actually be built echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&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 ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler \ CC \ LD \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_prog_compiler_no_builtin_flag \ export_dynamic_flag_spec \ thread_safe_flag_spec \ whole_archive_flag_spec \ enable_shared_with_static_runtimes \ old_archive_cmds \ old_archive_from_new_cmds \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ archive_cmds \ archive_expsym_cmds \ postinstall_cmds \ postuninstall_cmds \ old_archive_from_expsyms_cmds \ allow_undefined_flag \ no_undefined_flag \ export_symbols_cmds \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ hardcode_automatic \ module_cmds \ module_expsym_cmds \ lt_cv_prog_compiler_c_o \ exclude_expsyms \ include_expsyms; do case $var in old_archive_cmds | \ old_archive_from_new_cmds | \ archive_cmds | \ archive_expsym_cmds | \ module_cmds | \ module_expsym_cmds | \ old_archive_from_expsyms_cmds | \ export_symbols_cmds | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" { echo "$as_me:$LINENO: creating $ofile" >&5 echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 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 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # 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. # 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//" # 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 # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # 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 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler # Is the compiler the GNU C compiler? with_gcc=$GCC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # 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 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # 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 and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps # Dependencies to place after the objects being linked to create a # shared library. 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 # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # 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 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 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # 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 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_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 # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\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 EOF ;; esac # 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) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" # Check whether --with-tags or --without-tags was given. if test "${with_tags+set}" = set; then withval="$with_tags" tagnames="$withval" fi; if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi if test -z "$LTCFLAGS"; then eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 echo "$as_me: error: invalid tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} { (exit 1); exit 1; }; } fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) 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=cc 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= export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # 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= # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC 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++"} 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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # We don't want -fno-exception wen 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 or --without-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. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&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 echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$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 -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -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 "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix4* | aix5*) 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].*|aix5*) 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_libdir_separator_CXX=':' link_all_deplibs_CXX=yes 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 hardcode_direct_CXX=yes 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 # 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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 echo "${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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' 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*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' 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 ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='' link_all_deplibs_CXX=yes if test "$GXX" = yes ; then lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else 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' fi module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_CXX=no ;; esac 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 ;; freebsd[12]*) # 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* | kfreebsd*-gnu | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; 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) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${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*) hardcode_libdir_flag_spec_ld_CXX='+b $libdir' ;; *) 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_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; echo $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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${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 ;; interix3*) 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" && echo -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 -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${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=: ;; linux*) 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; echo $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*) # 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*) # Portland Group C++ compiler 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' 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; $echo \"$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=`echo $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; echo $list' ;; 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::"' ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no 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='echo' ;; osf3*) 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 # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) 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" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' 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. # # 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=`echo $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; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' 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 "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; 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. old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) 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" && echo -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' 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=`echo $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; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' 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 "\-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*) # 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 C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. We must also pass each convience library through # to the system linker between allextract/defaultextract. # The C++ compiler will combine linker options so we # cannot just pass the convience library names through # without $wl. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='echo' # 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 -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 -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 \"\-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 \"\-L\"" fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' 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. # 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. # So that behaviour is only enabled if SCOABSPATH is set to a # non-empty value in the environment. Most likely only useful for # creating official distributions of packages. # This is a hack until libtool officially supports absolute path # names for shared libraries. 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='`test -z "$SCOABSPATH" && echo ${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,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$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 echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$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... cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` for p in `eval $output_verbose_link_cmd`; do case $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 else prev= fi if test "$pre_test_object_deps_done" = no; then case $p 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 ;; *.$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 # PORTME: override above test on systems where it is broken case $host_os in interix3*) # 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= ;; solaris*) case $cc_basename in CC*) # 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. postdeps_CXX='-lCstd -lCrun' ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 # 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*) # 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' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # 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' ;; 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= ;; interix3*) # 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 IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # 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_AC_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 ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_CXX='-qnocommon' lt_prog_compiler_wl_CXX='-Wl,' ;; esac ;; 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* | kfreebsd*-gnu | 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*) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; icpc* | ecpc*) # Intel C++ lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC*) # 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' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; 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*) # 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 ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; 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 ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext printf "$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:13191: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:13195: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_CXX=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 if test x"$lt_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 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 # # 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\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_CXX=yes fi else lt_prog_compiler_static_works_CXX=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6 if test x"$lt_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_CXX=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:13295: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:13299: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # 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 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")) && (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*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no # # 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 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:$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=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else 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* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&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-existant 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_AC_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 echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 echo "${ECHO_T}$hardcode_action_CXX" >&6 if test "$hardcode_action_CXX" = relink; 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 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_CXX \ CC_CXX \ LD_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ export_dynamic_flag_spec_CXX \ thread_safe_flag_spec_CXX \ whole_archive_flag_spec_CXX \ enable_shared_with_static_runtimes_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ postinstall_cmds_CXX \ postuninstall_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ export_symbols_cmds_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ hardcode_automatic_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ lt_cv_prog_compiler_c_o_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX; do case $var in old_archive_cmds_CXX | \ old_archive_from_new_cmds_CXX | \ archive_cmds_CXX | \ archive_expsym_cmds_CXX | \ module_cmds_CXX | \ module_expsym_cmds_CXX | \ old_archive_from_expsyms_cmds_CXX | \ export_symbols_cmds_CXX | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # 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 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_CXX # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_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 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_CXX old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # 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 and install a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_CXX # Dependencies to place after the objects being linked to create a # shared library. 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 # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_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 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 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_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 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # 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 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld 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 else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # Code to be used in simple compile tests lt_simple_compile_test_code=" subroutine t\n return\n end\n" # Code to be used in simple link tests lt_simple_link_test_code=" program t\n end\n" # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${F77-"f77"} compiler=$CC compiler_F77=$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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&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 ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 GCC_F77="$G77" LD_F77="$LD" lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-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_F77='-Bstatic' fi ;; amigaos*) # 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_F77='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # 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_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; interix3*) # 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_F77=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; hpux*) # 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_F77='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_F77='-qnocommon' lt_prog_compiler_wl_F77='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # 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_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-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_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # 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:14865: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:14869: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_F77=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 if test x"$lt_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_F77=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_F77=yes fi else lt_prog_compiler_static_works_F77=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6 if test x"$lt_prog_compiler_static_works_F77" = xyes; then : else lt_prog_compiler_static_F77= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_F77=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:14969: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:14973: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_F77=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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_F77= enable_shared_with_static_runtimes_F77=no archive_cmds_F77= archive_expsym_cmds_F77= old_archive_From_new_cmds_F77= old_archive_from_expsyms_cmds_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= thread_safe_flag_spec_F77= hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_direct_F77=no hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported link_all_deplibs_F77=unknown hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= always_export_symbols_F77=no export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # 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_F77="_GLOBAL_OFFSET_TABLE_" # 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. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # 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_F77=yes if test "$with_gnu_ld" = 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_F77='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${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_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [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 aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_F77='$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_F77='-L$libdir' hardcode_minus_L_F77=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_F77=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_F77='$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_F77='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_F77=no fi ;; interix3*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${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_F77='$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_F77='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' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;; esac archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs_F77=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $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_F77=no cat <&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. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_F77=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 ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = no; then runpath_var= hardcode_libdir_flag_spec_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$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_F77=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_F77=unsupported fi ;; aix4* | aix5*) 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 if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$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].*|aix5*) 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_F77='' hardcode_direct_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes 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 hardcode_direct_F77=yes else # We have old collect2 hardcode_direct_F77=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_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= 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 # 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_F77=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_F77='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${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_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$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. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${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_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77='$convenience' archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="\$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*) archive_cmds_F77='$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_F77='-L$libdir' hardcode_minus_L_F77=yes # see comment about different semantics on the GNU ld section ld_shlibs_F77=no ;; bsdi[45]*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32*) # 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. hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=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_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_F77='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_F77=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported whole_archive_flag_spec_F77='' link_all_deplibs_F77=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_F77=no ;; esac fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; freebsd1*) ld_shlibs_F77=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_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${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_F77='$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_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$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_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared -fPIC ${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_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$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 hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_F77='+b $libdir' hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; *) hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: link_all_deplibs_F77=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; openbsd*) hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$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_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_F77='-rpath $libdir' fi hardcode_libdir_separator_F77=: ;; solaris*) no_undefined_flag_F77=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$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' fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_F77=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_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_F77='${wl}-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$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_F77='${wl}-z,text' allow_undefined_flag_F77='${wl}-z,nodefs' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 echo "${ECHO_T}$ld_shlibs_F77" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 pic_flag=$lt_prog_compiler_pic_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_F77=no else archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || \ test -n "$runpath_var_F77" || \ test "X$hardcode_automatic_F77" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_F77" != 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_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 echo "${ECHO_T}$hardcode_action_F77" >&6 if test "$hardcode_action_F77" = relink; 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 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_F77 \ CC_F77 \ LD_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_static_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ export_dynamic_flag_spec_F77 \ thread_safe_flag_spec_F77 \ whole_archive_flag_spec_F77 \ enable_shared_with_static_runtimes_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ predep_objects_F77 \ postdep_objects_F77 \ predeps_F77 \ postdeps_F77 \ compiler_lib_search_path_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ postinstall_cmds_F77 \ postuninstall_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ export_symbols_cmds_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_ld_F77 \ hardcode_libdir_separator_F77 \ hardcode_automatic_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ lt_cv_prog_compiler_c_o_F77 \ exclude_expsyms_F77 \ include_expsyms_F77; do case $var in old_archive_cmds_F77 | \ old_archive_from_new_cmds_F77 | \ archive_cmds_F77 | \ archive_expsym_cmds_F77 | \ module_cmds_F77 | \ module_expsym_cmds_F77 | \ old_archive_from_expsyms_cmds_F77 | \ export_symbols_cmds_F77 | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_F77 # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_F77 old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_F77 # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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_F77 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # 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_F77 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_F77" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o objext_GCJ=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}\n" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n' # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${GCJ-"gcj"} compiler=$CC compiler_GCJ=$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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # GCJ did not exist at the time GCC didn't implicitly link libc in. archive_cmds_need_lc_GCJ=no old_archive_cmds_GCJ=$old_archive_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... lt_prog_compiler_no_builtin_flag_GCJ= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$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:17176: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17180: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_static_GCJ='-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_GCJ='-Bstatic' fi ;; amigaos*) # 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_GCJ='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # 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_GCJ='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_GCJ='-fno-common' ;; interix3*) # 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_GCJ=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_GCJ=-Kconform_pic fi ;; hpux*) # 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_GCJ='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_GCJ='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' else lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_GCJ='-qnocommon' lt_prog_compiler_wl_GCJ='-Wl,' ;; esac ;; mingw* | pw32* | os2*) # 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_GCJ='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_GCJ='-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_GCJ='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_GCJ='-non_shared' ;; newsos6) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; linux*) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-fpic' lt_prog_compiler_static_GCJ='-Bstatic' ;; ccc*) lt_prog_compiler_wl_GCJ='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_GCJ='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; solaris*) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_GCJ='-Qoption ld ';; *) lt_prog_compiler_wl_GCJ='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_GCJ='-Qoption ld ' lt_prog_compiler_pic_GCJ='-PIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_GCJ='-Kconform_pic' lt_prog_compiler_static_GCJ='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; unicos*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_can_build_shared_GCJ=no ;; uts4*) lt_prog_compiler_pic_GCJ='-pic' lt_prog_compiler_static_GCJ='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_GCJ" # 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:17444: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17448: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_pic_works_GCJ=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in "" | " "*) ;; *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; esac else lt_prog_compiler_pic_GCJ= lt_prog_compiler_can_build_shared_GCJ=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_GCJ= ;; *) lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works_GCJ=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" printf "$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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_prog_compiler_static_works_GCJ=yes fi else lt_prog_compiler_static_works_GCJ=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6 if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then : else lt_prog_compiler_static_GCJ= fi echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$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:17548: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:17552: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_GCJ=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 .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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 echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 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 echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_GCJ= enable_shared_with_static_runtimes_GCJ=no archive_cmds_GCJ= archive_expsym_cmds_GCJ= old_archive_From_new_cmds_GCJ= old_archive_from_expsyms_cmds_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= thread_safe_flag_spec_GCJ= hardcode_libdir_flag_spec_GCJ= hardcode_libdir_flag_spec_ld_GCJ= hardcode_libdir_separator_GCJ= hardcode_direct_GCJ=no hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=unsupported link_all_deplibs_GCJ=unknown hardcode_automatic_GCJ=no module_cmds_GCJ= module_expsym_cmds_GCJ= always_export_symbols_GCJ=no export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_GCJ= # 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_GCJ="_GLOBAL_OFFSET_TABLE_" # 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. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # 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_GCJ=yes if test "$with_gnu_ld" = 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_GCJ='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_GCJ='${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_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_GCJ= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [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 aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_GCJ=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_GCJ='$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_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_GCJ=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_GCJ=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_GCJ=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_GCJ='-L$libdir' allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=no enable_shared_with_static_runtimes_GCJ=yes export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_GCJ='$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_GCJ='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_GCJ=no fi ;; interix3*) hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${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_GCJ='$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_GCJ='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' ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;; esac archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi else ld_shlibs_GCJ=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $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_GCJ=no cat <&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. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_GCJ=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 ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac ;; sunos4*) archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac if test "$ld_shlibs_GCJ" = no; then runpath_var= hardcode_libdir_flag_spec_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=yes archive_expsym_cmds_GCJ='$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_GCJ=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_GCJ=unsupported fi ;; aix4* | aix5*) 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 if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_GCJ='$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].*|aix5*) 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_GCJ='' hardcode_direct_GCJ=yes hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes 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 hardcode_direct_GCJ=yes else # We have old collect2 hardcode_direct_GCJ=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_GCJ=yes hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_libdir_separator_GCJ= 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 # 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_GCJ=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_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${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_GCJ='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_GCJ="-z nodefs" archive_expsym_cmds_GCJ="\$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. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${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_GCJ=' ${wl}-bernotok' allow_undefined_flag_GCJ=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_GCJ='$convenience' archive_cmds_need_lc_GCJ=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_GCJ="\$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*) archive_cmds_GCJ='$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_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # see comment about different semantics on the GNU ld section ld_shlibs_GCJ=no ;; bsdi[45]*) export_dynamic_flag_spec_GCJ=-rdynamic ;; cygwin* | mingw* | pw32*) # 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. hardcode_libdir_flag_spec_GCJ=' ' allow_undefined_flag_GCJ=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_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_GCJ='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_GCJ=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_GCJ=no hardcode_direct_GCJ=no hardcode_automatic_GCJ=yes hardcode_shlibpath_var_GCJ=unsupported whole_archive_flag_spec_GCJ='' link_all_deplibs_GCJ=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_GCJ=no ;; esac fi ;; dgux*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; freebsd1*) ld_shlibs_GCJ=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_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu | dragonfly*) archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${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_GCJ='$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_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$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_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -shared -fPIC ${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_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$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 hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no ;; *) hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: link_all_deplibs_GCJ=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; newsos6) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_shlibpath_var_GCJ=no ;; openbsd*) hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' ;; *) archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes allow_undefined_flag_GCJ=unsupported archive_cmds_GCJ='$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_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_GCJ='-rpath $libdir' fi hardcode_libdir_separator_GCJ=: ;; solaris*) no_undefined_flag_GCJ=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$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' fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_shlibpath_var_GCJ=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine linker options so we # cannot just pass the convience library names through # without $wl, iff we do not link with $LD. # Luckily, gcc supports the same syntax we need for Sun Studio. # Supported since Solaris 2.6 (maybe 2.5.1?) case $wlarc in '') whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; *) whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; esac ;; esac link_all_deplibs_GCJ=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_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; sysv4) case $host_vendor in sni) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_GCJ='$CC -r -o $output$reload_objs' hardcode_direct_GCJ=no ;; motorola) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv4.3*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_GCJ=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*) no_undefined_flag_GCJ='${wl}-z,text' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$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_GCJ='${wl}-z,text' allow_undefined_flag_GCJ='${wl}-z,nodefs' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; *) ld_shlibs_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 echo "${ECHO_T}$ld_shlibs_GCJ" >&6 test "$ld_shlibs_GCJ" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_GCJ" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_GCJ=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_GCJ 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. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_GCJ pic_flag=$lt_prog_compiler_pic_GCJ compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_GCJ=no else archive_cmds_need_lc_GCJ=yes fi allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # 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. 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 else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi 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 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' ;; aix4* | aix5*) version_type=linux 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*) 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=`$echo "X$lib" | $Xsed -e '\''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' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux 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*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) 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' 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="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. 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 ;; 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 ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # 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}${versuffix}$shared_ext ${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`' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux 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 ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux 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='GNU ld.so' ;; 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[123]*) 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 ;; freebsd*) # from 4.6 on shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux 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 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' ;; interix3*) version_type=linux 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 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 Linux ELF. linux*) version_type=linux 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 # 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)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;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' ;; knetbsd*-gnu) version_type=linux 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='GNU 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 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=linux 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 ;; 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" ;; solaris*) version_type=linux 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 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 export_dynamic_flag_spec='${wl}-Blargedynsym' 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 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 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' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes 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' ;; uts4*) version_type=linux 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 echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var_GCJ" || \ test "X$hardcode_automatic_GCJ" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_GCJ" != 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_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && test "$hardcode_minus_L_GCJ" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_GCJ=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_GCJ=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_GCJ=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 echo "${ECHO_T}$hardcode_action_GCJ" >&6 if test "$hardcode_action_GCJ" = relink; 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 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_GCJ \ CC_GCJ \ LD_GCJ \ lt_prog_compiler_wl_GCJ \ lt_prog_compiler_pic_GCJ \ lt_prog_compiler_static_GCJ \ lt_prog_compiler_no_builtin_flag_GCJ \ export_dynamic_flag_spec_GCJ \ thread_safe_flag_spec_GCJ \ whole_archive_flag_spec_GCJ \ enable_shared_with_static_runtimes_GCJ \ old_archive_cmds_GCJ \ old_archive_from_new_cmds_GCJ \ predep_objects_GCJ \ postdep_objects_GCJ \ predeps_GCJ \ postdeps_GCJ \ compiler_lib_search_path_GCJ \ archive_cmds_GCJ \ archive_expsym_cmds_GCJ \ postinstall_cmds_GCJ \ postuninstall_cmds_GCJ \ old_archive_from_expsyms_cmds_GCJ \ allow_undefined_flag_GCJ \ no_undefined_flag_GCJ \ export_symbols_cmds_GCJ \ hardcode_libdir_flag_spec_GCJ \ hardcode_libdir_flag_spec_ld_GCJ \ hardcode_libdir_separator_GCJ \ hardcode_automatic_GCJ \ module_cmds_GCJ \ module_expsym_cmds_GCJ \ lt_cv_prog_compiler_c_o_GCJ \ exclude_expsyms_GCJ \ include_expsyms_GCJ; do case $var in old_archive_cmds_GCJ | \ old_archive_from_new_cmds_GCJ | \ archive_cmds_GCJ | \ archive_expsym_cmds_GCJ | \ module_cmds_GCJ | \ module_expsym_cmds_GCJ | \ old_archive_from_expsyms_cmds_GCJ | \ export_symbols_cmds_GCJ | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_GCJ # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_GCJ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_GCJ # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_GCJ # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_GCJ pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_GCJ # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_GCJ old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_GCJ archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_GCJ module_expsym_cmds=$lt_module_expsym_cmds_GCJ # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_GCJ # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_GCJ # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_GCJ # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_GCJ # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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_GCJ # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_GCJ # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_GCJ # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ # 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_GCJ # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_GCJ # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_GCJ" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_GCJ # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_GCJ # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_GCJ # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_GCJ # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" else tagname="" fi ;; RC) # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' # 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. # 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 printf "$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 printf "$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 conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${RC-"windres"} compiler=$CC compiler_RC=$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 "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` lt_cv_prog_compiler_c_o_RC=yes # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # 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 # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_RC \ CC_RC \ LD_RC \ lt_prog_compiler_wl_RC \ lt_prog_compiler_pic_RC \ lt_prog_compiler_static_RC \ lt_prog_compiler_no_builtin_flag_RC \ export_dynamic_flag_spec_RC \ thread_safe_flag_spec_RC \ whole_archive_flag_spec_RC \ enable_shared_with_static_runtimes_RC \ old_archive_cmds_RC \ old_archive_from_new_cmds_RC \ predep_objects_RC \ postdep_objects_RC \ predeps_RC \ postdeps_RC \ compiler_lib_search_path_RC \ archive_cmds_RC \ archive_expsym_cmds_RC \ postinstall_cmds_RC \ postuninstall_cmds_RC \ old_archive_from_expsyms_cmds_RC \ allow_undefined_flag_RC \ no_undefined_flag_RC \ export_symbols_cmds_RC \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_flag_spec_ld_RC \ hardcode_libdir_separator_RC \ hardcode_automatic_RC \ module_cmds_RC \ module_expsym_cmds_RC \ lt_cv_prog_compiler_c_o_RC \ exclude_expsyms_RC \ include_expsyms_RC; do case $var in old_archive_cmds_RC | \ old_archive_from_new_cmds_RC | \ archive_cmds_RC | \ archive_expsym_cmds_RC | \ module_cmds_RC | \ module_expsym_cmds_RC | \ old_archive_from_expsyms_cmds_RC | \ export_symbols_cmds_RC | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # 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 # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU C compiler? with_gcc=$GCC_RC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_RC # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Must we lock files when doing compilation? need_locks=$lt_need_locks # 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 # 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 # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC # Library versioning type. version_type=$version_type # 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 # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_RC old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_RC # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # 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 # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # 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 # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # 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_RC # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_RC # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # 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_RC # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # 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 # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_RC" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" 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 CC="$lt_save_CC" ;; *) { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 echo "$as_me: error: Unsupported tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 echo "$as_me: error: unable to update list of available tagged configurations." >&2;} { (exit 1); exit 1; }; } fi fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion # No longer needed now that CPPFLAGS is correctly set -- lh, 061214 -- # AC_REQUIRE([AC_COIN_DLFCN_H]) # NEW: If libtool exists in the directory higher up, we use that one # instead of creating a new one # It turns out that the code for AC_PROG_LIBTOOL is somehow AC_REQUIRED # out in front of this macro body. You'll notice that LIBTOOL is already # defined here. We'll have to count on this macro not being called if libtool # already exists, or at least move the libtool fixes outside the conditional. # AC_MSG_NOTICE([Entering coin_prog_libtool, LIBTOOL = "$LIBTOOL".]) # This test is therefore removed. -- lh, 061214 -- # if test "x$LIBTOOL" = x; then # AC_MSG_NOTICE([Calling PROG_LIBTOOL.]) # AC_MSG_NOTICE([Finished PROG_LIBTOOL.]) { echo "$as_me:$LINENO: Build is \"$build\"." >&5 echo "$as_me: Build is \"$build\"." >&6;} mydos2unix='| dos2unix' case $build in *-mingw*) CYGPATH_W=echo ;; esac case $build in # Here we need to check if -m32 is specified. If so, we need to correct # sys_lib_search_path_spec *-cygwin* | *-mingw*) case "$CXX" in clang* ) # we assume that libtool patches for CLANG are the same as for GNU compiler - correct??? { echo "$as_me:$LINENO: Applying patches to libtool for CLANG compiler" >&5 echo "$as_me: Applying patches to libtool for CLANG 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 ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { echo "$as_me:$LINENO: Applying patches to libtool for cl compiler" >&5 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 \\$('"$CYGPATH_W \$1"') '"$mydos2unix"' | xargs echo); echo \\$bla; for i in \\$bla; do lib -nologo -extract:\\$i \\$('"$CYGPATH_W \$1"'); done%' \ -e 's%$AR t "$f_ex_an_ar_oldlib"%lib -nologo -list \$('"$CYGPATH_W \$1"') '"$mydos2unix"'%' \ -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 ;; *) { echo "$as_me:$LINENO: Applying patches to libtool for GNU compiler" >&5 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 ;; esac mv conftest.bla libtool chmod 755 libtool ;; *x86_64-*) if test "$GCC" = yes && (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm32' >& /dev/null); then { echo "$as_me:$LINENO: Applying patches to libtool for 32bit compilation" >&5 echo "$as_me: Applying patches to libtool for 32bit compilation" >&6;} sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="/lib /usr/lib"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi ;; *-solaris*) if test "$GCC" = yes && \ (echo $CXXFLAGS $CFLAGS $FFLAGS | $EGREP 'm64' >/dev/null 2>&1) ; then hdwisa=`isainfo | sed -e 's/\([^ ]*\) .*$/\1/'` if `$EGREP 'sys_lib_search_path_spec=' libtool | $EGREP -v $hdwisa >/dev/null 2>&1` ; then { echo "$as_me:$LINENO: Applying patches to libtool for 64-bit GCC compilation" >&5 echo "$as_me: Applying patches to libtool for 64-bit GCC compilation" >&6;} fixlibtmp=`$CC -m64 -print-search-dirs | $EGREP '^libraries:'` fixlibtmp=`echo $fixlibtmp | sed -e 's/libraries: =//' -e 's/:/ /g'` if `echo "$fixlibtmp" | $EGREP -v $hdwisa >/dev/null 2>&1` ; then # AC_MSG_NOTICE(Compensating for broken gcc) for lib in $fixlibtmp ; do if test -d "${lib}${hdwisa}" ; then syslibpath64="$syslibpath64 ${lib}${hdwisa}/" fi done syslibpath64="${syslibpath64} ${fixlibtmp}" else syslibpath64="$fixlibtmp" fi sed -e 's|sys_lib_search_path_spec=".*"|sys_lib_search_path_spec="'"$syslibpath64"'"|' libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool fi # AC_MSG_NOTICE(Result is ) # $EGREP 'sys_lib_search_path_spec=' libtool fi ;; # Cygwin. Ah, cygwin. Too big and ugly to inline; see the macro. *-darwin*) { echo "$as_me:$LINENO: Applying patches to libtool for Darwin" >&5 echo "$as_me: Applying patches to libtool for Darwin" >&6;} sed -e 's/verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"/verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"/' \ -e 's/ -dynamiclib / -dynamiclib -single_module /g' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; esac # This fi matches the commented `if test "x$LIBTOOL" = x;' up at the head of # the macro. -- lh, 061214 -- # fi # AC_MSG_NOTICE([End libtool initialisation.]) # AC_MSG_NOTICE([Finished COIN_PROG_LIBTOOL.]) # set RPATH_FLAGS to the compiler link flags required to hardcode location # of the shared objects RPATH_FLAGS= if test $enable_shared = yes; then case $build in *-linux-*) if test "$GXX" = "yes"; then RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -Wl,--rpath -Wl,$dir" done fi ;; *-darwin*) RPATH_FLAGS=nothing ;; *-ibm-*) case "$CXX" in xlC* | */xlC* | mpxlC* | */mpxlC*) RPATH_FLAGS=nothing ;; esac ;; *-hp-*) RPATH_FLAGS=nothing ;; *-mingw32) RPATH_FLAGS=nothing ;; *-*-solaris*) RPATH_FLAGS= for dir in $abs_lib_dir; do RPATH_FLAGS="$RPATH_FLAGS -R$dir" done esac if test "$RPATH_FLAGS" = ""; then { echo "$as_me:$LINENO: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&5 echo "$as_me: WARNING: Could not automatically determine how to tell the linker about automatic inclusion of the path for shared libraries. The test examples might not work if you link against shared objects. You will need to set the LD_LIBRARY_PATH, DYLP_LIBRARY_PATH, or LIBDIR variable manually." >&2;} fi if test "$RPATH_FLAGS" = "nothing"; then RPATH_FLAGS= fi fi else { echo "$as_me:$LINENO: Using libtool script in directory $coin_config_dir" >&5 echo "$as_me: Using libtool script in directory $coin_config_dir" >&6;} # get all missing information from the config.log file # output variables and defines as_save_IFS=$IFS IFS=' ' for oneline in `cat $coin_config_dir/config.status`; do case "$oneline" in # First some automake conditionals s,@am__fastdep* | s,@AR@* | s,@CPP@* | s,@CPPFLAGS@* | s,@CXXCPP@* | \ s,@RANLIB@* | s,@STRIP@* | s,@ac_ct_AR@* | s,@ac_ct_RANLIB@* | \ s,@ac_ct_STRIP@* | s,@host* | s,@LN_S@* | s,@RPATH_FLAGS@* | \ s,@ac_c_preproc_warn_flag@* | s,@ac_cxx_preproc_warn_flag@* ) command=`echo $oneline | sed -e 's/^s,@//' -e 's/@,/="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; s,@DEFS@* ) command=`echo $oneline | sed -e 's/^s,@DEFS@,/defsline="/' -e 's/,;t t/"/'` # echo "$command" eval "$command" ;; esac done IFS=$as_save_IFS # And some defines (assuming here that the packages base dir # doesn't have a config.h file for word in $defsline; do # echo word $word case $word in -DHAVE_[A-Z_]*_H=1 | -DSTDC_HEADERS=1 ) i=`echo $word | sed -e 's/-D/#define /' -e 's/=/ /'` # echo dd $i echo $i >>confdefs.h ;; esac done fi # AC_MSG_NOTICE([End of INIT_AUTO_TOOLS.]) # Check whether --enable-dependency-linking or --disable-dependency-linking was given. if test "${enable_dependency_linking+set}" = set; then enableval="$enable_dependency_linking" dependency_linking="$enableval" else dependency_linking=auto fi; if test "$dependency_linking" = auto; then # On Cygwin and AIX, building DLLs doesn't work dependency_linking=no if test x"$coin_disable_shared" = xno; then case $build in *-cygwin* | *-mingw*) case "$CC" in clang* ) dependency_linking=yes ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) dependency_linking=no ;; *gcc*) dependency_linking=yes ;; *) dependency_linking=yes ;; esac ;; *) dependency_linking=yes ;; esac fi fi if test "$dependency_linking" = yes ; then LT_LDFLAGS="-no-undefined" else LT_LDFLAGS= fi if test "$dependency_linking" = yes; then DEPENDENCY_LINKING_TRUE= DEPENDENCY_LINKING_FALSE='#' else DEPENDENCY_LINKING_TRUE='#' DEPENDENCY_LINKING_FALSE= fi # Check if we want to set the library version echo "$as_me:$LINENO: checking if library version is set" >&5 echo $ECHO_N "checking if library version is set... $ECHO_C" >&6 if test x"$coin_libversion" != x; then LT_LDFLAGS="$LT_LDFLAGS -version-info $coin_libversion" echo "$as_me:$LINENO: result: $coin_libversion" >&5 echo "${ECHO_T}$coin_libversion" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi #END } ############################################################################# # COIN-OR components # ############################################################################# # Check whether --enable-pkg-config or --disable-pkg-config was given. if test "${enable_pkg_config+set}" = set; then enableval="$enable_pkg_config" use_pkgconfig="$enableval" else if test x$coin_cc_is_cl = xtrue; then use_pkgconfig=no else use_pkgconfig=yes fi fi; if test $use_pkgconfig = yes ; then if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="${ac_tool_prefix}pkg-config" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_PKG_CONFIG"; then ac_ct_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_PKG_CONFIG"; then ac_cv_prog_ac_ct_PKG_CONFIG="$ac_ct_PKG_CONFIG" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_PKG_CONFIG="pkg-config" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_PKG_CONFIG=$ac_cv_prog_ac_ct_PKG_CONFIG if test -n "$ac_ct_PKG_CONFIG"; then echo "$as_me:$LINENO: result: $ac_ct_PKG_CONFIG" >&5 echo "${ECHO_T}$ac_ct_PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi PKG_CONFIG=$ac_ct_PKG_CONFIG else PKG_CONFIG="$ac_cv_prog_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.16.0 echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5 echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6 if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 PKG_CONFIG="" fi fi # check if pkg-config supports the short-errors flag if test -n "$PKG_CONFIG" && \ $PKG_CONFIG --atleast-pkgconfig-version 0.20; then pkg_short_errors=" --short-errors " else pkg_short_errors="" fi fi if test -n "$PKG_CONFIG"; then COIN_HAS_PKGCONFIG_TRUE= COIN_HAS_PKGCONFIG_FALSE='#' else COIN_HAS_PKGCONFIG_TRUE='#' COIN_HAS_PKGCONFIG_FALSE= fi # assemble pkg-config search path for installed projects COIN_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" # let's assume that when installing into $prefix, then the user may have installed some other coin projects there before, so it's worth to have a look into there # best would actually to use ${libdir}, since .pc files get installed into ${libdir}/pkgconfig, # unfortunately, ${libdir} expands to ${exec_prefix}/lib and ${exec_prefix} to ${prefix}... if test "x${prefix}" = xNONE ; then COIN_PKG_CONFIG_PATH="${ac_default_prefix}/lib64/pkgconfig:${ac_default_prefix}/lib/pkgconfig:${ac_default_prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" else COIN_PKG_CONFIG_PATH="${prefix}/lib64/pkgconfig:${prefix}/lib/pkgconfig:${prefix}/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" fi # Check whether --with-coin-instdir or --without-coin-instdir was given. if test "${with_coin_instdir+set}" = set; then withval="$with_coin_instdir" if test -d "$withval"; then : ; else { { echo "$as_me:$LINENO: error: argument for --with-coin-instdir not a directory" >&5 echo "$as_me: error: argument for --with-coin-instdir not a directory" >&2;} { (exit 1); exit 1; }; } fi COIN_PKG_CONFIG_PATH="$withval/lib/pkgconfig:$withval/share/pkgconfig:${COIN_PKG_CONFIG_PATH}" fi; # assemble additional pkg-config search paths for uninstalled projects if test x$coin_projectdir = xyes ; then # if we are in a project setup, then in a classic setup, we want to find uninstalled projects # their (relative) location is written to coin_subdirs.txt by the configure in the project base directory # unfortunately, if the user set prefix, then we do not know where the project base directory is located # but it is likely to be either .. (if we are a usual coin project) or ../.. (if we are a unusual coin project like ThirdParty or Data) COIN_PKG_CONFIG_PATH_UNINSTALLED= if test -f ../coin_subdirs.txt ; then for i in `cat ../coin_subdirs.txt` ; do if test -d ../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi if test -f ../../coin_subdirs.txt ; then for i in `cat ../../coin_subdirs.txt` ; do if test -d ../../$i ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi if test -d ../../$i/pkgconfig ; then COIN_PKG_CONFIG_PATH_UNINSTALLED="`cd ../../$i/pkgconfig; pwd`:${COIN_PKG_CONFIG_PATH_UNINSTALLED}" fi done fi fi if test -n "$PKG_CONFIG" && test x$coin_cc_is_cl = xtrue; then { echo "$as_me:$LINENO: WARNING: Using pkg-config together with MS or Intel Compiler on Windows is not support by example Makefiles. Consider using --disable-pkg-config." >&5 echo "$as_me: WARNING: Using pkg-config together with MS or Intel Compiler on Windows is not support by example Makefiles. Consider using --disable-pkg-config." >&2;} fi echo "$as_me:$LINENO: checking for COIN-OR package CoinUtils" >&5 echo $ECHO_N "checking for COIN-OR package CoinUtils... $ECHO_C" >&6 coin_has_coinutils=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "CoinUtils"; then coin_has_coinutils=skipping fi done fi if test "$coin_has_coinutils" != skipping; then # Check whether --with-m4_tolower(CoinUtils) or --without-m4_tolower(CoinUtils) was given. if test "${with_coinutils+set}" = set; then withval="$with_coinutils" if test "$withval" = no ; then coin_has_coinutils=skipping fi fi; fi COINUTILS_LIBS= COINUTILS_CFLAGS= COINUTILS_DATA= COINUTILS_DEPENDENCIES= COINUTILS_PCLIBS= COINUTILS_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_coinutils != skipping; then # Check whether --with-m4_tolower(CoinUtils)-lib or --without-m4_tolower(CoinUtils)-lib was given. if test "${with_coinutils_lib+set}" = set; then withval="$with_coinutils_lib" if test "$withval" = no ; then coin_has_coinutils=skipping else coin_has_coinutils=yes COINUTILS_LIBS="$withval" COINUTILS_PCLIBS="$withval" OSILIB_PCLIBS="$withval $OSILIB_PCLIBS" OSILIB_LIBS="$withval $OSILIB_LIBS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then COINUTILS_LIBS_INSTALLED="$withval" OSILIB_LIBS_INSTALLED="$withval $OSILIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_coinutils != skipping; then # Check whether --with-m4_tolower(CoinUtils)-incdir or --without-m4_tolower(CoinUtils)-incdir was given. if test "${with_coinutils_incdir+set}" = set; then withval="$with_coinutils_incdir" if test "$withval" = no ; then coin_has_coinutils=skipping else coin_has_coinutils=yes COINUTILS_CFLAGS="-I`${CYGPATH_W} $withval`" OSILIB_CFLAGS="-I`${CYGPATH_W} $withval` $OSILIB_CFLAGS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then COINUTILS_CFLAGS_INSTALLED="$COINUTILS_CFLAGS" OSILIB_CFLAGS_INSTALLED="$COINUTILS_CFLAGS $OSILIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_coinutils != skipping; then # Check whether --with-m4_tolower(CoinUtils)-datadir or --without-m4_tolower(CoinUtils)-datadir was given. if test "${with_coinutils_datadir+set}" = set; then withval="$with_coinutils_datadir" if test "$withval" = no ; then coin_has_coinutils=skipping else coin_has_coinutils=yes COINUTILS_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then COINUTILS_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_coinutils = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coinutils"; then COINUTILS_VERSIONS=`$PKG_CONFIG --modversion "coinutils" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coinutils" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi COINUTILS_CFLAGS="$cflags" COINUTILS_LIBS=`$PKG_CONFIG --libs "coinutils" 2>/dev/null` COINUTILS_DATA=`$PKG_CONFIG --variable=datadir "coinutils" 2>/dev/null` coin_has_coinutils=yes echo "$as_me:$LINENO: result: yes: $COINUTILS_VERSIONS" >&5 echo "${ECHO_T}yes: $COINUTILS_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then COINUTILS_LIBS=`echo " $COINUTILS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi COINUTILS_PCREQUIRES="coinutils" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in OsiLib OSILIB_PCREQUIRES="coinutils $OSILIB_PCREQUIRES" OSILIB_CFLAGS="$COINUTILS_CFLAGS $OSILIB_CFLAGS" OSILIB_LIBS="$COINUTILS_LIBS $OSILIB_LIBS" else COINUTILS_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coinutils"` coin_has_coinutils=notGiven echo "$as_me:$LINENO: result: not given: $COINUTILS_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $COINUTILS_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module CoinUtils without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module CoinUtils without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package CoinUtils (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package CoinUtils (fallback)... $ECHO_C" >&6 coin_has_coinutils=notGiven COINUTILS_LIBS= COINUTILS_LIBS_INSTALLED= COINUTILS_CFLAGS= COINUTILS_CFLAGS_INSTALLED= COINUTILS_DATA= COINUTILS_DATA_INSTALLED= COINUTILS_PCLIBS= COINUTILS_PCREQUIRES= # initial list of dependencies is "coinutils", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coinutils" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$COINUTILS_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` COINUTILS_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$COINUTILS_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi COINUTILS_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi COINUTILS_CFLAGS="$projcflags $COINUTILS_CFLAGS" # set LIBS variable COINUTILS_LIBS="$projlibs $COINUTILS_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi COINUTILS_CFLAGS_INSTALLED="$projcflags $COINUTILS_CFLAGS_INSTALLED" # set LIBS variable COINUTILS_LIBS_INSTALLED="$projlibs $COINUTILS_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_coinutils=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_COINUTILS 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then COINUTILS_LIBS=`echo " $COINUTILS_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` COINUTILS_LIBS_INSTALLED=`echo " $COINUTILS_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi COINUTILS_PCREQUIRES="coinutils" OSILIB_PCREQUIRES="coinutils $OSILIB_PCREQUIRES" OSILIB_CFLAGS="$COINUTILS_CFLAGS $OSILIB_CFLAGS" OSILIB_LIBS="$COINUTILS_LIBS $OSILIB_LIBS" OSILIB_CFLAGS_INSTALLED="$COINUTILS_CFLAGS_INSTALLED $OSILIB_CFLAGS_INSTALLED" OSILIB_LIBS_INSTALLED="$COINUTILS_LIBS_INSTALLED $OSILIB_LIBS_INSTALLED" fi if test $coin_has_coinutils != notGiven && test $coin_has_coinutils != skipping; then COIN_HAS_COINUTILS_TRUE= COIN_HAS_COINUTILS_FALSE='#' else COIN_HAS_COINUTILS_TRUE='#' COIN_HAS_COINUTILS_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_coinutils" >&5 echo "${ECHO_T}$coin_has_coinutils" >&6 fi if test $coin_has_coinutils != skipping && test $coin_has_coinutils != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_COINUTILS 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) COINUTILS_DEPENDENCIES=`echo " $COINUTILS_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` OSILIB_DEPENDENCIES=`echo " $OSILIB_LIBS " | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$COINUTILS_CFLAGS" ; then { echo "$as_me:$LINENO: CoinUtils CFLAGS are $COINUTILS_CFLAGS" >&5 echo "$as_me: CoinUtils CFLAGS are $COINUTILS_CFLAGS" >&6;} fi if test -n "$COINUTILS_LIBS" ; then { echo "$as_me:$LINENO: CoinUtils LIBS are $COINUTILS_LIBS" >&5 echo "$as_me: CoinUtils LIBS are $COINUTILS_LIBS" >&6;} fi if test -n "$COINUTILS_DEPENDENCIES" ; then { echo "$as_me:$LINENO: CoinUtils DEPENDENCIES are $COINUTILS_DEPENDENCIES" >&5 echo "$as_me: CoinUtils DEPENDENCIES are $COINUTILS_DEPENDENCIES" >&6;} fi if test -n "$COINUTILS_DATA" ; then { echo "$as_me:$LINENO: CoinUtils DATA is $COINUTILS_DATA" >&5 echo "$as_me: CoinUtils DATA is $COINUTILS_DATA" >&6;} fi if test -n "$COINUTILS_PCLIBS" ; then { echo "$as_me:$LINENO: CoinUtils PCLIBS are $COINUTILS_PCLIBS" >&5 echo "$as_me: CoinUtils PCLIBS are $COINUTILS_PCLIBS" >&6;} fi if test -n "$COINUTILS_PCREQUIRES" ; then { echo "$as_me:$LINENO: CoinUtils PCREQUIRES are $COINUTILS_PCREQUIRES" >&5 echo "$as_me: CoinUtils PCREQUIRES are $COINUTILS_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: OsiLib CFLAGS are $OSILIB_CFLAGS" >&5 echo "$as_me: OsiLib CFLAGS are $OSILIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: OsiLib LIBS are $OSILIB_LIBS" >&5 echo "$as_me: OsiLib LIBS are $OSILIB_LIBS" >&6;} { echo "$as_me:$LINENO: OsiLib DEPENDENCIES are $OSILIB_DEPENDENCIES" >&5 echo "$as_me: OsiLib DEPENDENCIES are $OSILIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_coinutils != notGiven && test $coin_has_coinutils != skipping; then COIN_HAS_COINUTILS_TRUE= COIN_HAS_COINUTILS_FALSE='#' else COIN_HAS_COINUTILS_TRUE='#' COIN_HAS_COINUTILS_FALSE= fi if test $coin_has_coinutils != yes ; then { { echo "$as_me:$LINENO: error: Required package CoinUtils not available." >&5 echo "$as_me: error: Required package CoinUtils not available." >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: checking for COIN-OR package Glpk" >&5 echo $ECHO_N "checking for COIN-OR package Glpk... $ECHO_C" >&6 coin_has_glpk=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Glpk"; then coin_has_glpk=skipping fi done fi if test "$coin_has_glpk" != skipping; then # Check whether --with-m4_tolower(Glpk) or --without-m4_tolower(Glpk) was given. if test "${with_glpk+set}" = set; then withval="$with_glpk" if test "$withval" = no ; then coin_has_glpk=skipping fi fi; fi GLPK_LIBS= GLPK_CFLAGS= GLPK_DATA= GLPK_DEPENDENCIES= GLPK_PCLIBS= GLPK_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_glpk != skipping; then # Check whether --with-m4_tolower(Glpk)-lib or --without-m4_tolower(Glpk)-lib was given. if test "${with_glpk_lib+set}" = set; then withval="$with_glpk_lib" if test "$withval" = no ; then coin_has_glpk=skipping else coin_has_glpk=yes GLPK_LIBS="$withval" GLPK_PCLIBS="$withval" OSIGLPKLIB_PCLIBS="$withval $OSIGLPKLIB_PCLIBS" OSIGLPKLIB_LIBS="$withval $OSIGLPKLIB_LIBS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then GLPK_LIBS_INSTALLED="$withval" OSIGLPKLIB_LIBS_INSTALLED="$withval $OSIGLPKLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_glpk != skipping; then # Check whether --with-m4_tolower(Glpk)-incdir or --without-m4_tolower(Glpk)-incdir was given. if test "${with_glpk_incdir+set}" = set; then withval="$with_glpk_incdir" if test "$withval" = no ; then coin_has_glpk=skipping else coin_has_glpk=yes GLPK_CFLAGS="-I`${CYGPATH_W} $withval`" OSIGLPKLIB_CFLAGS="-I`${CYGPATH_W} $withval` $OSIGLPKLIB_CFLAGS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then GLPK_CFLAGS_INSTALLED="$GLPK_CFLAGS" OSIGLPKLIB_CFLAGS_INSTALLED="$GLPK_CFLAGS $OSIGLPKLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_glpk != skipping; then # Check whether --with-m4_tolower(Glpk)-datadir or --without-m4_tolower(Glpk)-datadir was given. if test "${with_glpk_datadir+set}" = set; then withval="$with_glpk_datadir" if test "$withval" = no ; then coin_has_glpk=skipping else coin_has_glpk=yes GLPK_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then GLPK_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_glpk = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coinglpk"; then GLPK_VERSIONS=`$PKG_CONFIG --modversion "coinglpk" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coinglpk" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi GLPK_CFLAGS="$cflags" GLPK_LIBS=`$PKG_CONFIG --libs "coinglpk" 2>/dev/null` GLPK_DATA=`$PKG_CONFIG --variable=datadir "coinglpk" 2>/dev/null` coin_has_glpk=yes echo "$as_me:$LINENO: result: yes: $GLPK_VERSIONS" >&5 echo "${ECHO_T}yes: $GLPK_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then GLPK_LIBS=`echo " $GLPK_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi GLPK_PCREQUIRES="coinglpk" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in OsiGlpkLib OSIGLPKLIB_PCREQUIRES="coinglpk $OSIGLPKLIB_PCREQUIRES" OSIGLPKLIB_CFLAGS="$GLPK_CFLAGS $OSIGLPKLIB_CFLAGS" OSIGLPKLIB_LIBS="$GLPK_LIBS $OSIGLPKLIB_LIBS" else GLPK_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coinglpk"` coin_has_glpk=notGiven echo "$as_me:$LINENO: result: not given: $GLPK_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $GLPK_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Glpk without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Glpk without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Glpk (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Glpk (fallback)... $ECHO_C" >&6 coin_has_glpk=notGiven GLPK_LIBS= GLPK_LIBS_INSTALLED= GLPK_CFLAGS= GLPK_CFLAGS_INSTALLED= GLPK_DATA= GLPK_DATA_INSTALLED= GLPK_PCLIBS= GLPK_PCREQUIRES= # initial list of dependencies is "coinglpk", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coinglpk" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$GLPK_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` GLPK_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$GLPK_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi GLPK_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi GLPK_CFLAGS="$projcflags $GLPK_CFLAGS" # set LIBS variable GLPK_LIBS="$projlibs $GLPK_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi GLPK_CFLAGS_INSTALLED="$projcflags $GLPK_CFLAGS_INSTALLED" # set LIBS variable GLPK_LIBS_INSTALLED="$projlibs $GLPK_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_glpk=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_GLPK 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then GLPK_LIBS=`echo " $GLPK_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` GLPK_LIBS_INSTALLED=`echo " $GLPK_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi GLPK_PCREQUIRES="coinglpk" OSIGLPKLIB_PCREQUIRES="coinglpk $OSIGLPKLIB_PCREQUIRES" OSIGLPKLIB_CFLAGS="$GLPK_CFLAGS $OSIGLPKLIB_CFLAGS" OSIGLPKLIB_LIBS="$GLPK_LIBS $OSIGLPKLIB_LIBS" OSIGLPKLIB_CFLAGS_INSTALLED="$GLPK_CFLAGS_INSTALLED $OSIGLPKLIB_CFLAGS_INSTALLED" OSIGLPKLIB_LIBS_INSTALLED="$GLPK_LIBS_INSTALLED $OSIGLPKLIB_LIBS_INSTALLED" fi if test $coin_has_glpk != notGiven && test $coin_has_glpk != skipping; then COIN_HAS_GLPK_TRUE= COIN_HAS_GLPK_FALSE='#' else COIN_HAS_GLPK_TRUE='#' COIN_HAS_GLPK_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_glpk" >&5 echo "${ECHO_T}$coin_has_glpk" >&6 fi if test $coin_has_glpk != skipping && test $coin_has_glpk != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_GLPK 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) GLPK_DEPENDENCIES=`echo " $GLPK_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` OSIGLPKLIB_DEPENDENCIES=`echo " $OSIGLPKLIB_LIBS " | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$GLPK_CFLAGS" ; then { echo "$as_me:$LINENO: Glpk CFLAGS are $GLPK_CFLAGS" >&5 echo "$as_me: Glpk CFLAGS are $GLPK_CFLAGS" >&6;} fi if test -n "$GLPK_LIBS" ; then { echo "$as_me:$LINENO: Glpk LIBS are $GLPK_LIBS" >&5 echo "$as_me: Glpk LIBS are $GLPK_LIBS" >&6;} fi if test -n "$GLPK_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Glpk DEPENDENCIES are $GLPK_DEPENDENCIES" >&5 echo "$as_me: Glpk DEPENDENCIES are $GLPK_DEPENDENCIES" >&6;} fi if test -n "$GLPK_DATA" ; then { echo "$as_me:$LINENO: Glpk DATA is $GLPK_DATA" >&5 echo "$as_me: Glpk DATA is $GLPK_DATA" >&6;} fi if test -n "$GLPK_PCLIBS" ; then { echo "$as_me:$LINENO: Glpk PCLIBS are $GLPK_PCLIBS" >&5 echo "$as_me: Glpk PCLIBS are $GLPK_PCLIBS" >&6;} fi if test -n "$GLPK_PCREQUIRES" ; then { echo "$as_me:$LINENO: Glpk PCREQUIRES are $GLPK_PCREQUIRES" >&5 echo "$as_me: Glpk PCREQUIRES are $GLPK_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: OsiGlpkLib CFLAGS are $OSIGLPKLIB_CFLAGS" >&5 echo "$as_me: OsiGlpkLib CFLAGS are $OSIGLPKLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: OsiGlpkLib LIBS are $OSIGLPKLIB_LIBS" >&5 echo "$as_me: OsiGlpkLib LIBS are $OSIGLPKLIB_LIBS" >&6;} { echo "$as_me:$LINENO: OsiGlpkLib DEPENDENCIES are $OSIGLPKLIB_DEPENDENCIES" >&5 echo "$as_me: OsiGlpkLib DEPENDENCIES are $OSIGLPKLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_glpk != notGiven && test $coin_has_glpk != skipping; then COIN_HAS_GLPK_TRUE= COIN_HAS_GLPK_FALSE='#' else COIN_HAS_GLPK_TRUE='#' COIN_HAS_GLPK_FALSE= fi echo "$as_me:$LINENO: checking for COIN-OR package SoPlex" >&5 echo $ECHO_N "checking for COIN-OR package SoPlex... $ECHO_C" >&6 coin_has_soplex=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "SoPlex"; then coin_has_soplex=skipping fi done fi if test "$coin_has_soplex" != skipping; then # Check whether --with-m4_tolower(SoPlex) or --without-m4_tolower(SoPlex) was given. if test "${with_soplex+set}" = set; then withval="$with_soplex" if test "$withval" = no ; then coin_has_soplex=skipping fi fi; fi SOPLEX_LIBS= SOPLEX_CFLAGS= SOPLEX_DATA= SOPLEX_DEPENDENCIES= SOPLEX_PCLIBS= SOPLEX_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_soplex != skipping; then # Check whether --with-m4_tolower(SoPlex)-lib or --without-m4_tolower(SoPlex)-lib was given. if test "${with_soplex_lib+set}" = set; then withval="$with_soplex_lib" if test "$withval" = no ; then coin_has_soplex=skipping else coin_has_soplex=yes SOPLEX_LIBS="$withval" SOPLEX_PCLIBS="$withval" OSISPXLIB_PCLIBS="$withval $OSISPXLIB_PCLIBS" OSISPXLIB_LIBS="$withval $OSISPXLIB_LIBS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SOPLEX_LIBS_INSTALLED="$withval" OSISPXLIB_LIBS_INSTALLED="$withval $OSISPXLIB_LIBS_INSTALLED" fi fi fi; fi if test $coin_has_soplex != skipping; then # Check whether --with-m4_tolower(SoPlex)-incdir or --without-m4_tolower(SoPlex)-incdir was given. if test "${with_soplex_incdir+set}" = set; then withval="$with_soplex_incdir" if test "$withval" = no ; then coin_has_soplex=skipping else coin_has_soplex=yes SOPLEX_CFLAGS="-I`${CYGPATH_W} $withval`" OSISPXLIB_CFLAGS="-I`${CYGPATH_W} $withval` $OSISPXLIB_CFLAGS" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SOPLEX_CFLAGS_INSTALLED="$SOPLEX_CFLAGS" OSISPXLIB_CFLAGS_INSTALLED="$SOPLEX_CFLAGS $OSISPXLIB_CFLAGS_INSTALLED" fi fi fi; fi if test $coin_has_soplex != skipping; then # Check whether --with-m4_tolower(SoPlex)-datadir or --without-m4_tolower(SoPlex)-datadir was given. if test "${with_soplex_datadir+set}" = set; then withval="$with_soplex_datadir" if test "$withval" = no ; then coin_has_soplex=skipping else coin_has_soplex=yes SOPLEX_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SOPLEX_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_soplex = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coinsoplex < 1.7"; then SOPLEX_VERSIONS=`$PKG_CONFIG --modversion "coinsoplex < 1.7" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coinsoplex < 1.7" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SOPLEX_CFLAGS="$cflags" SOPLEX_LIBS=`$PKG_CONFIG --libs "coinsoplex < 1.7" 2>/dev/null` SOPLEX_DATA=`$PKG_CONFIG --variable=datadir "coinsoplex < 1.7" 2>/dev/null` coin_has_soplex=yes echo "$as_me:$LINENO: result: yes: $SOPLEX_VERSIONS" >&5 echo "${ECHO_T}yes: $SOPLEX_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then SOPLEX_LIBS=`echo " $SOPLEX_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi SOPLEX_PCREQUIRES="coinsoplex < 1.7" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in OsiSpxLib OSISPXLIB_PCREQUIRES="coinsoplex < 1.7 $OSISPXLIB_PCREQUIRES" OSISPXLIB_CFLAGS="$SOPLEX_CFLAGS $OSISPXLIB_CFLAGS" OSISPXLIB_LIBS="$SOPLEX_LIBS $OSISPXLIB_LIBS" else SOPLEX_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coinsoplex < 1.7"` coin_has_soplex=notGiven echo "$as_me:$LINENO: result: not given: $SOPLEX_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $SOPLEX_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module SoPlex without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module SoPlex without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package SoPlex (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package SoPlex (fallback)... $ECHO_C" >&6 coin_has_soplex=notGiven SOPLEX_LIBS= SOPLEX_LIBS_INSTALLED= SOPLEX_CFLAGS= SOPLEX_CFLAGS_INSTALLED= SOPLEX_DATA= SOPLEX_DATA_INSTALLED= SOPLEX_PCLIBS= SOPLEX_PCREQUIRES= # initial list of dependencies is "coinsoplex < 1.7", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coinsoplex < 1.7" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$SOPLEX_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` SOPLEX_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$SOPLEX_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi SOPLEX_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SOPLEX_CFLAGS="$projcflags $SOPLEX_CFLAGS" # set LIBS variable SOPLEX_LIBS="$projlibs $SOPLEX_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SOPLEX_CFLAGS_INSTALLED="$projcflags $SOPLEX_CFLAGS_INSTALLED" # set LIBS variable SOPLEX_LIBS_INSTALLED="$projlibs $SOPLEX_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_soplex=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_SOPLEX 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then SOPLEX_LIBS=`echo " $SOPLEX_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` SOPLEX_LIBS_INSTALLED=`echo " $SOPLEX_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi SOPLEX_PCREQUIRES="coinsoplex < 1.7" OSISPXLIB_PCREQUIRES="coinsoplex < 1.7 $OSISPXLIB_PCREQUIRES" OSISPXLIB_CFLAGS="$SOPLEX_CFLAGS $OSISPXLIB_CFLAGS" OSISPXLIB_LIBS="$SOPLEX_LIBS $OSISPXLIB_LIBS" OSISPXLIB_CFLAGS_INSTALLED="$SOPLEX_CFLAGS_INSTALLED $OSISPXLIB_CFLAGS_INSTALLED" OSISPXLIB_LIBS_INSTALLED="$SOPLEX_LIBS_INSTALLED $OSISPXLIB_LIBS_INSTALLED" fi if test $coin_has_soplex != notGiven && test $coin_has_soplex != skipping; then COIN_HAS_SOPLEX_TRUE= COIN_HAS_SOPLEX_FALSE='#' else COIN_HAS_SOPLEX_TRUE='#' COIN_HAS_SOPLEX_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_soplex" >&5 echo "${ECHO_T}$coin_has_soplex" >&6 fi if test $coin_has_soplex != skipping && test $coin_has_soplex != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_SOPLEX 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) SOPLEX_DEPENDENCIES=`echo " $SOPLEX_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` OSISPXLIB_DEPENDENCIES=`echo " $OSISPXLIB_LIBS " | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$SOPLEX_CFLAGS" ; then { echo "$as_me:$LINENO: SoPlex CFLAGS are $SOPLEX_CFLAGS" >&5 echo "$as_me: SoPlex CFLAGS are $SOPLEX_CFLAGS" >&6;} fi if test -n "$SOPLEX_LIBS" ; then { echo "$as_me:$LINENO: SoPlex LIBS are $SOPLEX_LIBS" >&5 echo "$as_me: SoPlex LIBS are $SOPLEX_LIBS" >&6;} fi if test -n "$SOPLEX_DEPENDENCIES" ; then { echo "$as_me:$LINENO: SoPlex DEPENDENCIES are $SOPLEX_DEPENDENCIES" >&5 echo "$as_me: SoPlex DEPENDENCIES are $SOPLEX_DEPENDENCIES" >&6;} fi if test -n "$SOPLEX_DATA" ; then { echo "$as_me:$LINENO: SoPlex DATA is $SOPLEX_DATA" >&5 echo "$as_me: SoPlex DATA is $SOPLEX_DATA" >&6;} fi if test -n "$SOPLEX_PCLIBS" ; then { echo "$as_me:$LINENO: SoPlex PCLIBS are $SOPLEX_PCLIBS" >&5 echo "$as_me: SoPlex PCLIBS are $SOPLEX_PCLIBS" >&6;} fi if test -n "$SOPLEX_PCREQUIRES" ; then { echo "$as_me:$LINENO: SoPlex PCREQUIRES are $SOPLEX_PCREQUIRES" >&5 echo "$as_me: SoPlex PCREQUIRES are $SOPLEX_PCREQUIRES" >&6;} fi { echo "$as_me:$LINENO: OsiSpxLib CFLAGS are $OSISPXLIB_CFLAGS" >&5 echo "$as_me: OsiSpxLib CFLAGS are $OSISPXLIB_CFLAGS" >&6;} { echo "$as_me:$LINENO: OsiSpxLib LIBS are $OSISPXLIB_LIBS" >&5 echo "$as_me: OsiSpxLib LIBS are $OSISPXLIB_LIBS" >&6;} { echo "$as_me:$LINENO: OsiSpxLib DEPENDENCIES are $OSISPXLIB_DEPENDENCIES" >&5 echo "$as_me: OsiSpxLib DEPENDENCIES are $OSISPXLIB_DEPENDENCIES" >&6;} fi fi # Define the Makefile conditional if test $coin_has_soplex != notGiven && test $coin_has_soplex != skipping; then COIN_HAS_SOPLEX_TRUE= COIN_HAS_SOPLEX_FALSE='#' else COIN_HAS_SOPLEX_TRUE='#' COIN_HAS_SOPLEX_FALSE= fi echo "$as_me:$LINENO: checking for COIN-OR package Sample" >&5 echo $ECHO_N "checking for COIN-OR package Sample... $ECHO_C" >&6 coin_has_sample=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Sample"; then coin_has_sample=skipping fi done fi if test "$coin_has_sample" != skipping; then # Check whether --with-m4_tolower(Sample) or --without-m4_tolower(Sample) was given. if test "${with_sample+set}" = set; then withval="$with_sample" if test "$withval" = no ; then coin_has_sample=skipping fi fi; fi SAMPLE_LIBS= SAMPLE_CFLAGS= SAMPLE_DATA= SAMPLE_DEPENDENCIES= SAMPLE_PCLIBS= SAMPLE_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_sample != skipping; then # Check whether --with-m4_tolower(Sample)-lib or --without-m4_tolower(Sample)-lib was given. if test "${with_sample_lib+set}" = set; then withval="$with_sample_lib" if test "$withval" = no ; then coin_has_sample=skipping else coin_has_sample=yes SAMPLE_LIBS="$withval" SAMPLE_PCLIBS="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SAMPLE_LIBS_INSTALLED="$withval" fi fi fi; fi if test $coin_has_sample != skipping; then # Check whether --with-m4_tolower(Sample)-incdir or --without-m4_tolower(Sample)-incdir was given. if test "${with_sample_incdir+set}" = set; then withval="$with_sample_incdir" if test "$withval" = no ; then coin_has_sample=skipping else coin_has_sample=yes SAMPLE_CFLAGS="-I`${CYGPATH_W} $withval`" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SAMPLE_CFLAGS_INSTALLED="$SAMPLE_CFLAGS" fi fi fi; fi if test $coin_has_sample != skipping; then # Check whether --with-m4_tolower(Sample)-datadir or --without-m4_tolower(Sample)-datadir was given. if test "${with_sample_datadir+set}" = set; then withval="$with_sample_datadir" if test "$withval" = no ; then coin_has_sample=skipping else coin_has_sample=yes SAMPLE_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then SAMPLE_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_sample = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coindatasample"; then SAMPLE_VERSIONS=`$PKG_CONFIG --modversion "coindatasample" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coindatasample" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SAMPLE_CFLAGS="$cflags" SAMPLE_LIBS=`$PKG_CONFIG --libs "coindatasample" 2>/dev/null` SAMPLE_DATA=`$PKG_CONFIG --variable=datadir "coindatasample" 2>/dev/null` coin_has_sample=yes echo "$as_me:$LINENO: result: yes: $SAMPLE_VERSIONS" >&5 echo "${ECHO_T}yes: $SAMPLE_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then SAMPLE_LIBS=`echo " $SAMPLE_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi SAMPLE_PCREQUIRES="coindatasample" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in else SAMPLE_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coindatasample"` coin_has_sample=notGiven echo "$as_me:$LINENO: result: not given: $SAMPLE_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $SAMPLE_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Sample without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Sample without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Sample (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Sample (fallback)... $ECHO_C" >&6 coin_has_sample=notGiven SAMPLE_LIBS= SAMPLE_LIBS_INSTALLED= SAMPLE_CFLAGS= SAMPLE_CFLAGS_INSTALLED= SAMPLE_DATA= SAMPLE_DATA_INSTALLED= SAMPLE_PCLIBS= SAMPLE_PCREQUIRES= # initial list of dependencies is "coindatasample", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coindatasample" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$SAMPLE_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` SAMPLE_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$SAMPLE_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi SAMPLE_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SAMPLE_CFLAGS="$projcflags $SAMPLE_CFLAGS" # set LIBS variable SAMPLE_LIBS="$projlibs $SAMPLE_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi SAMPLE_CFLAGS_INSTALLED="$projcflags $SAMPLE_CFLAGS_INSTALLED" # set LIBS variable SAMPLE_LIBS_INSTALLED="$projlibs $SAMPLE_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_sample=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_SAMPLE 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then SAMPLE_LIBS=`echo " $SAMPLE_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` SAMPLE_LIBS_INSTALLED=`echo " $SAMPLE_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi SAMPLE_PCREQUIRES="coindatasample" fi if test $coin_has_sample != notGiven && test $coin_has_sample != skipping; then COIN_HAS_SAMPLE_TRUE= COIN_HAS_SAMPLE_FALSE='#' else COIN_HAS_SAMPLE_TRUE='#' COIN_HAS_SAMPLE_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_sample" >&5 echo "${ECHO_T}$coin_has_sample" >&6 fi if test $coin_has_sample != skipping && test $coin_has_sample != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_SAMPLE 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) SAMPLE_DEPENDENCIES=`echo " $SAMPLE_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$SAMPLE_CFLAGS" ; then { echo "$as_me:$LINENO: Sample CFLAGS are $SAMPLE_CFLAGS" >&5 echo "$as_me: Sample CFLAGS are $SAMPLE_CFLAGS" >&6;} fi if test -n "$SAMPLE_LIBS" ; then { echo "$as_me:$LINENO: Sample LIBS are $SAMPLE_LIBS" >&5 echo "$as_me: Sample LIBS are $SAMPLE_LIBS" >&6;} fi if test -n "$SAMPLE_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Sample DEPENDENCIES are $SAMPLE_DEPENDENCIES" >&5 echo "$as_me: Sample DEPENDENCIES are $SAMPLE_DEPENDENCIES" >&6;} fi if test -n "$SAMPLE_DATA" ; then { echo "$as_me:$LINENO: Sample DATA is $SAMPLE_DATA" >&5 echo "$as_me: Sample DATA is $SAMPLE_DATA" >&6;} fi if test -n "$SAMPLE_PCLIBS" ; then { echo "$as_me:$LINENO: Sample PCLIBS are $SAMPLE_PCLIBS" >&5 echo "$as_me: Sample PCLIBS are $SAMPLE_PCLIBS" >&6;} fi if test -n "$SAMPLE_PCREQUIRES" ; then { echo "$as_me:$LINENO: Sample PCREQUIRES are $SAMPLE_PCREQUIRES" >&5 echo "$as_me: Sample PCREQUIRES are $SAMPLE_PCREQUIRES" >&6;} fi fi fi # Define the Makefile conditional if test $coin_has_sample != notGiven && test $coin_has_sample != skipping; then COIN_HAS_SAMPLE_TRUE= COIN_HAS_SAMPLE_FALSE='#' else COIN_HAS_SAMPLE_TRUE='#' COIN_HAS_SAMPLE_FALSE= fi echo "$as_me:$LINENO: checking for COIN-OR package Netlib" >&5 echo $ECHO_N "checking for COIN-OR package Netlib... $ECHO_C" >&6 coin_has_netlib=notGiven # check if user wants to skip package in any case if test x"$COIN_SKIP_PROJECTS" != x; then for dir in $COIN_SKIP_PROJECTS; do if test $dir = "Netlib"; then coin_has_netlib=skipping fi done fi if test "$coin_has_netlib" != skipping; then # Check whether --with-m4_tolower(Netlib) or --without-m4_tolower(Netlib) was given. if test "${with_netlib+set}" = set; then withval="$with_netlib" if test "$withval" = no ; then coin_has_netlib=skipping fi fi; fi NETLIB_LIBS= NETLIB_CFLAGS= NETLIB_DATA= NETLIB_DEPENDENCIES= NETLIB_PCLIBS= NETLIB_PCREQUIRES= #check if user provided LIBS, CFLAGS, or DATA for package or disables use of package if test $coin_has_netlib != skipping; then # Check whether --with-m4_tolower(Netlib)-lib or --without-m4_tolower(Netlib)-lib was given. if test "${with_netlib_lib+set}" = set; then withval="$with_netlib_lib" if test "$withval" = no ; then coin_has_netlib=skipping else coin_has_netlib=yes NETLIB_LIBS="$withval" NETLIB_PCLIBS="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then NETLIB_LIBS_INSTALLED="$withval" fi fi fi; fi if test $coin_has_netlib != skipping; then # Check whether --with-m4_tolower(Netlib)-incdir or --without-m4_tolower(Netlib)-incdir was given. if test "${with_netlib_incdir+set}" = set; then withval="$with_netlib_incdir" if test "$withval" = no ; then coin_has_netlib=skipping else coin_has_netlib=yes NETLIB_CFLAGS="-I`${CYGPATH_W} $withval`" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then NETLIB_CFLAGS_INSTALLED="$NETLIB_CFLAGS" fi fi fi; fi if test $coin_has_netlib != skipping; then # Check whether --with-m4_tolower(Netlib)-datadir or --without-m4_tolower(Netlib)-datadir was given. if test "${with_netlib_datadir+set}" = set; then withval="$with_netlib_datadir" if test "$withval" = no ; then coin_has_netlib=skipping else coin_has_netlib=yes NETLIB_DATA="$withval" # if project flags are given by user and we build without pkg-config, then we need to setup the _INSTALLED variables if test -z "$PKG_CONFIG" ; then NETLIB_DATA_INSTALLED="$withval" fi fi fi; fi if test $coin_has_netlib = notGiven; then if test -n "$PKG_CONFIG" ; then # set search path for pkg-config # need to export variable to be sure that the following pkg-config gets these values coin_save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PKG_CONFIG_PATH="$COIN_PKG_CONFIG_PATH:$COIN_PKG_CONFIG_PATH_UNINSTALLED" export PKG_CONFIG_PATH # let pkg-config do it's magic if test -n "$PKG_CONFIG" ; then if $PKG_CONFIG --exists "coindatanetlib"; then NETLIB_VERSIONS=`$PKG_CONFIG --modversion "coindatanetlib" 2>/dev/null | tr '\n' ' '` cflags=`$PKG_CONFIG --cflags "coindatanetlib" 2>/dev/null` # pkg-config cannot handle spaces, so CYGPATH_W cannot be put into .pc files # thus, we modify the cflags extracted from pkg-config by putting CYGPATH_W behind -I's # but only do this if is not trivial if test "$CYGPATH_W" != "echo" ; then # need to put into brackets since otherwise autoconf replaces the brackets in the sed command cflags=`echo $cflags | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi NETLIB_CFLAGS="$cflags" NETLIB_LIBS=`$PKG_CONFIG --libs "coindatanetlib" 2>/dev/null` NETLIB_DATA=`$PKG_CONFIG --variable=datadir "coindatanetlib" 2>/dev/null` coin_has_netlib=yes echo "$as_me:$LINENO: result: yes: $NETLIB_VERSIONS" >&5 echo "${ECHO_T}yes: $NETLIB_VERSIONS" >&6 # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl) if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then NETLIB_LIBS=`echo " $NETLIB_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` fi NETLIB_PCREQUIRES="coindatanetlib" # augment X_PCREQUIRES, X_CFLAGS, and X_LIBS for each build target X in else NETLIB_PKG_ERRORS=`$PKG_CONFIG $pkg_short_errors --errors-to-stdout --print-errors "coindatanetlib"` coin_has_netlib=notGiven echo "$as_me:$LINENO: result: not given: $NETLIB_PKG_ERRORS" >&5 echo "${ECHO_T}not given: $NETLIB_PKG_ERRORS" >&6 fi else { { echo "$as_me:$LINENO: error: \"Cannot check for existance of module Netlib without pkg-config\"" >&5 echo "$as_me: error: \"Cannot check for existance of module Netlib without pkg-config\"" >&2;} { (exit 1); exit 1; }; } fi # reset PKG_CONFIG_PATH variable PKG_CONFIG_PATH="$coin_save_PKG_CONFIG_PATH" export PKG_CONFIG_PATH else echo "$as_me:$LINENO: result: skipped check via pkg-config, redirect to fallback" >&5 echo "${ECHO_T}skipped check via pkg-config, redirect to fallback" >&6 echo "$as_me:$LINENO: checking for COIN-OR package Netlib (fallback)" >&5 echo $ECHO_N "checking for COIN-OR package Netlib (fallback)... $ECHO_C" >&6 coin_has_netlib=notGiven NETLIB_LIBS= NETLIB_LIBS_INSTALLED= NETLIB_CFLAGS= NETLIB_CFLAGS_INSTALLED= NETLIB_DATA= NETLIB_DATA_INSTALLED= NETLIB_PCLIBS= NETLIB_PCREQUIRES= # initial list of dependencies is "coindatanetlib", but we need to filter out version number specifications (= x, <= x, >= x, != x) projtoprocess="coindatanetlib" # we first expand the list of projects to process by adding all dependencies just behind the project which depends on it # further, we collect the list of corresponding .pc files, but do this in reverse order, because we need this order afterwards # the latter we also do with .pc files corresponding to the installed projects, which will be needed to setup Makefiles for examples # also, we setup the DATA variable allproj="" allpcfiles="" allpcifiles="" while test "x$projtoprocess" != x ; do for proj in $projtoprocess ; do # if $proj is available and configured, then a project-uninstalled.pc file should have been created, so search for it pcfile="" save_IFS="$IFS" IFS=":" for dir in $COIN_PKG_CONFIG_PATH_UNINSTALLED ; do # the base directory configure should have setup coin_subdirs.txt in a way that it does not contain projects that should be skipped, so we do not need to test this here again if test -r "$dir/${proj}-uninstalled.pc" ; then pcfile="$dir/$proj-uninstalled.pc" if test -r "$dir/${proj}.pc" ; then pcifile="$dir/${proj}.pc" else { echo "$as_me:$LINENO: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&5 echo "$as_me: WARNING: Found $pcfile, but $dir/${proj}.pc is not available. This may break Makefile's of examples." >&2;} pcifile= fi break fi done IFS="$save_IFS" if test "x$pcfile" != x ; then # read dependencies from $pcfile and filter it projrequires=`sed -n -e 's/Requires://gp' "$pcfile" | sed -e 's/<\{0,1\}>\{0,1\}=[ ]\{0,\}[^ ]\{1,\}//g'` # add projrequires to the front of the list of projects that have to be processed next # at the same time, remove $proj from this list projtoprocess=`echo $projtoprocess | sed -e "s/$proj/$projrequires/"` # read DATA from $pcfile, if _DATA is still empty if test "x$NETLIB_DATA" = x ; then projdatadir= pcfilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcfile` eval `sh -c "$pcfilemod"` NETLIB_DATA="$projdatadir" fi allproj="$allproj $proj" allpcfiles="$pcfile:$allpcfiles" else echo "$as_me:$LINENO: result: no, dependency $proj not available" >&5 echo "${ECHO_T}no, dependency $proj not available" >&6 allproj=fail break 2 fi if test "x$pcifile" != x ; then allpcifiles="$pcifile:$allpcifiles" # read DATA_INSTALLED from $pcifile, if _DATA_INSTALLED is still empty if test "x$NETLIB_DATA_INSTALLED" = x ; then projdatadir= pcifilemod=`sed -e '/[a-zA-Z]:/d' -e 's/datadir=\(.*\)/echo projdatadir=\\\\"\1\\\\"/g' $pcifile` eval `sh -c "$pcifilemod"` if test "${CYGPATH_W}" != "echo"; then projdatadir="\`\$(CYGPATH_W) ${projdatadir} | sed -e 's/\\\\\\\\/\\\\\\\\\\\\\\\\/g'\`" fi NETLIB_DATA_INSTALLED="$projdatadir" fi fi break done # remove spaces on begin of $projtoprocess projtoprocess=`echo $projtoprocess | sed -e 's/^ *//'` done if test "$allproj" != fail ; then # now go through the list of .pc files and assemble compiler and linker flags # important is here to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcfiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi NETLIB_CFLAGS="$projcflags $NETLIB_CFLAGS" # set LIBS variable NETLIB_LIBS="$projlibs $NETLIB_LIBS" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # now go through the list of .pc files for installed projects and assemble compiler and linker flags # important is here again to obey the reverse order that has been setup before, # since then libraries that are required by several others should be after these other libraries pcfilesprocessed="" save_IFS="$IFS" IFS=":" for pcfile in $allpcifiles ; do # if $pcfile has been processed already, skip this round if test "x$pcfilesprocessed" != x ; then for pcfiledone in $pcfilesprocessed ; do if test "$pcfiledone" = "$pcfile" ; then continue 2 fi done fi # modify .pc file to a shell script that prints shell commands for setting the compiler and library flags: # replace "Libs:" by "echo projlibs=" # replace "Cflags:" by "echo projcflags=" # remove every line starting with : pcfilemod=`sed -e 's/Libs:\(.*\)$/echo projlibs=\\\\"\1\\\\"/g' -e 's/Cflags:\(.*\)/echo projcflags=\\\\"\1\\\\"/g' -e '/^[a-zA-Z]*:/d' $pcfile` # set projcflags and projlibs variables by running $pcfilemod # under mingw, the current IFS seem to make the : in the paths of the gfortran libs go away, so we temporarily set IFS back to its default projcflags= projlibs= IFS="$save_IFS" eval `sh -c "$pcfilemod"` IFS=":" # add CYGPATH_W cludge into include flags and set CFLAGS variable if test "${CYGPATH_W}" != "echo"; then projcflags=`echo "$projcflags" | sed -e 's/-I\([^ ]*\)/-I\`${CYGPATH_W} \1\`/g'` fi NETLIB_CFLAGS_INSTALLED="$projcflags $NETLIB_CFLAGS_INSTALLED" # set LIBS variable NETLIB_LIBS_INSTALLED="$projlibs $NETLIB_LIBS_INSTALLED" # remember that we have processed $pcfile pcfilesprocessed="$pcfilesprocessed:$pcfile" done IFS="$save_IFS" # finish up coin_has_netlib=yes echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 cat >>confdefs.h <<\_ACEOF #define COIN_HAS_NETLIB 1 _ACEOF # adjust linker flags for (i)cl compiler # for the LIBS, we replace everything of the form "/somepath/name.lib" by "`$(CYGPATH_W) /somepath/`name.lib | sed -e s|\|/|g" (where we have to use excessive many \ to get the \ into the command line for cl), # for the LIBS_INSTALLED, we replace everything of the form "/somepath/" by "`$(CYGPATH_W) /somepath/`", # everything of the form "-lname" by "libname.lib", and # everything of the form "-Lpath" by "-libpath:`$(CYGPATH_W) path` if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then NETLIB_LIBS=`echo " $NETLIB_LIBS " | sed -e 's/ \(\/[^ ]*\/\)\([^ ]*\)\.lib / \`$(CYGPATH_W) \1 | sed -e "s|\\\\\\\\\\\\\\\\\\\\|\/|g"\`\2.lib /g'` NETLIB_LIBS_INSTALLED=`echo " $NETLIB_LIBS_INSTALLED" | sed -e 's/ \(\/[^ ]*\/\)/ \`$(CYGPATH_W) \1\`/g' -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi NETLIB_PCREQUIRES="coindatanetlib" fi if test $coin_has_netlib != notGiven && test $coin_has_netlib != skipping; then COIN_HAS_NETLIB_TRUE= COIN_HAS_NETLIB_FALSE='#' else COIN_HAS_NETLIB_TRUE='#' COIN_HAS_NETLIB_FALSE= fi fi else echo "$as_me:$LINENO: result: $coin_has_netlib" >&5 echo "${ECHO_T}$coin_has_netlib" >&6 fi if test $coin_has_netlib != skipping && test $coin_has_netlib != notGiven ; then cat >>confdefs.h <<\_ACEOF #define COIN_HAS_NETLIB 1 _ACEOF # Check whether --enable-interpackage-dependencies or --disable-interpackage-dependencies was given. if test "${enable_interpackage_dependencies+set}" = set; then enableval="$enable_interpackage_dependencies" else enable_interpackage_dependencies=yes fi; if test $enable_interpackage_dependencies = yes ; then # construct dependencies variables from LIBS variables # we add an extra space in LIBS so we can substitute out everything starting with " -" # remove everything of the form -framework xxx as used on Mac and mkl* and libiomp5* and wsock32.lib as used on Windows # then remove everything of the form -xxx # also remove everything of the form `xxx`yyy (may have been added for cygwin/cl) NETLIB_DEPENDENCIES=`echo " $NETLIB_LIBS" | sed -e 's/ mkl[^ ]*//g' -e 's/ libiomp5[^ ]*//g' -e 's/ wsock32[^ ]*//g' -e 's/ -framework *[^ ]*//g' -e 's/ -[^ ]*//g' -e 's/\`[^\`]*\`[^ ]* //g'` fi if test 1 = 0 ; then #change this test to enable a bit of debugging output if test -n "$NETLIB_CFLAGS" ; then { echo "$as_me:$LINENO: Netlib CFLAGS are $NETLIB_CFLAGS" >&5 echo "$as_me: Netlib CFLAGS are $NETLIB_CFLAGS" >&6;} fi if test -n "$NETLIB_LIBS" ; then { echo "$as_me:$LINENO: Netlib LIBS are $NETLIB_LIBS" >&5 echo "$as_me: Netlib LIBS are $NETLIB_LIBS" >&6;} fi if test -n "$NETLIB_DEPENDENCIES" ; then { echo "$as_me:$LINENO: Netlib DEPENDENCIES are $NETLIB_DEPENDENCIES" >&5 echo "$as_me: Netlib DEPENDENCIES are $NETLIB_DEPENDENCIES" >&6;} fi if test -n "$NETLIB_DATA" ; then { echo "$as_me:$LINENO: Netlib DATA is $NETLIB_DATA" >&5 echo "$as_me: Netlib DATA is $NETLIB_DATA" >&6;} fi if test -n "$NETLIB_PCLIBS" ; then { echo "$as_me:$LINENO: Netlib PCLIBS are $NETLIB_PCLIBS" >&5 echo "$as_me: Netlib PCLIBS are $NETLIB_PCLIBS" >&6;} fi if test -n "$NETLIB_PCREQUIRES" ; then { echo "$as_me:$LINENO: Netlib PCREQUIRES are $NETLIB_PCREQUIRES" >&5 echo "$as_me: Netlib PCREQUIRES are $NETLIB_PCREQUIRES" >&6;} fi fi fi # Define the Makefile conditional if test $coin_has_netlib != notGiven && test $coin_has_netlib != skipping; then COIN_HAS_NETLIB_TRUE= COIN_HAS_NETLIB_FALSE='#' else COIN_HAS_NETLIB_TRUE='#' COIN_HAS_NETLIB_FALSE= fi ############################################################################# # Third party solvers # ############################################################################# # Check which third party solvers are available. Cplex detection has been # tested on a semi-regular basis, and Mosek detection most likely works. For # the rest, it's anyone's guess. -- lh, 080529 -- # fixed detection of Mosek and Xpress -- stefan, 091003 (linux32, gcc) -- echo "$as_me:$LINENO: checking if user provides library for Cplex" >&5 echo $ECHO_N "checking if user provides library for Cplex... $ECHO_C" >&6 # Check for header file directory # Check whether --with-cplex-incdir or --without-cplex-incdir was given. if test "${with_cplex_incdir+set}" = set; then withval="$with_cplex_incdir" CPXINCDIR=`cd $withval; pwd` fi; # Check for library directory # Check whether --with-cplex-lib or --without-cplex-lib was given. if test "${with_cplex_lib+set}" = set; then withval="$with_cplex_lib" CPXLIB=$withval fi; # Switch to disable library check if requested # Check whether --enable-cplex-libcheck or --disable-cplex-libcheck was given. if test "${enable_cplex_libcheck+set}" = set; then enableval="$enable_cplex_libcheck" cplex_libcheck=$enableval else cplex_libcheck=yes fi; # At this point, if we're going to use the library, both LBRYINCDIR and # LBRYLIB must be defined and not empty. if test x"$CPXINCDIR" != x || test x"$CPXLIB" != x; then if test x"$CPXINCDIR" = x || test x"$CPXLIB" = x; then { { echo "$as_me:$LINENO: error: You need to specify both an include directory and link flags to use library Cplex. Use --with-cplex-incdir of environment variable $CPXINCDIR to specify the include directory. Use --with-cplex-lib or environment variable $CPXLIB to specify link flags." >&5 echo "$as_me: error: You need to specify both an include directory and link flags to use library Cplex. Use --with-cplex-incdir of environment variable $CPXINCDIR to specify the include directory. Use --with-cplex-lib or environment variable $CPXLIB to specify link flags." >&2;} { (exit 1); exit 1; }; } fi coin_has_cpx=true echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else coin_has_cpx=false echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # If we have instructions for use, consider header and link checks. if test $coin_has_cpx = true; then # If argument 3 (file) is given, check for the file. Typically this will be a # header file, but that's not assumed. if test -r $CPXINCDIR/cplex.h; then : else { { echo "$as_me:$LINENO: error: Cannot find file cplex.h in $CPXINCDIR" >&5 echo "$as_me: error: Cannot find file cplex.h in $CPXINCDIR" >&2;} { (exit 1); exit 1; }; } : fi # Now see if we can link the function. There are arguments for and against # assuming argument 3 is a header file declaring the function. A correct # function declaration is the main argument in favour. Having to cope with # possible dependencies or other oddities are the main arguments against. # Force the use of C as the best single choice amongst C++, C, and Fortran. # Obviously, this has limits. if test x"$cplex_libcheck" != xno; then coin_save_LIBS="$LIBS" LIBS="$CPXLIB " coin_CPX_link=no 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 for fnm in CPXgetstat ; do echo "$as_me:$LINENO: checking whether symbol $fnm is available with CPX" >&5 echo $ECHO_N "checking whether symbol $fnm is available with CPX... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { $fnm() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 coin_CPX_link=yes break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext 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 LIBS="$coin_save_LIBS" if test x"$coin_CPX_link" != xyes ; then { { echo "$as_me:$LINENO: error: Cannot find symbol(s) CPXgetstat with CPX" >&5 echo "$as_me: error: Cannot find symbol(s) CPXgetstat with CPX" >&2;} { (exit 1); exit 1; }; } fi fi # If we make it this far, we've verified the file and linked the function. Add # the necessary link flags to _{PC}LIBS and define the preprocessor symbol # COIN_HAS_LBRY. cat >>confdefs.h <<\_ACEOF #define COIN_HAS_CPX 1 _ACEOF fi # Arrange for configure to substitute LBRYINCDIR and LBRYLIB and create the # automake conditional. These actions must occur unconditionally. if test $coin_has_cpx = true; then COIN_HAS_CPX_TRUE= COIN_HAS_CPX_FALSE='#' else COIN_HAS_CPX_TRUE='#' COIN_HAS_CPX_FALSE= fi echo "$as_me:$LINENO: checking if user provides library for Mosek" >&5 echo $ECHO_N "checking if user provides library for Mosek... $ECHO_C" >&6 # Check for header file directory # Check whether --with-mosek-incdir or --without-mosek-incdir was given. if test "${with_mosek_incdir+set}" = set; then withval="$with_mosek_incdir" MSKINCDIR=`cd $withval; pwd` fi; # Check for library directory # Check whether --with-mosek-lib or --without-mosek-lib was given. if test "${with_mosek_lib+set}" = set; then withval="$with_mosek_lib" MSKLIB=$withval fi; # Switch to disable library check if requested # Check whether --enable-mosek-libcheck or --disable-mosek-libcheck was given. if test "${enable_mosek_libcheck+set}" = set; then enableval="$enable_mosek_libcheck" mosek_libcheck=$enableval else mosek_libcheck=yes fi; # At this point, if we're going to use the library, both LBRYINCDIR and # LBRYLIB must be defined and not empty. if test x"$MSKINCDIR" != x || test x"$MSKLIB" != x; then if test x"$MSKINCDIR" = x || test x"$MSKLIB" = x; then { { echo "$as_me:$LINENO: error: You need to specify both an include directory and link flags to use library Mosek. Use --with-mosek-incdir of environment variable $MSKINCDIR to specify the include directory. Use --with-mosek-lib or environment variable $MSKLIB to specify link flags." >&5 echo "$as_me: error: You need to specify both an include directory and link flags to use library Mosek. Use --with-mosek-incdir of environment variable $MSKINCDIR to specify the include directory. Use --with-mosek-lib or environment variable $MSKLIB to specify link flags." >&2;} { (exit 1); exit 1; }; } fi coin_has_msk=true echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else coin_has_msk=false echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # If we have instructions for use, consider header and link checks. if test $coin_has_msk = true; then # If argument 3 (file) is given, check for the file. Typically this will be a # header file, but that's not assumed. if test -r $MSKINCDIR/mosek.h; then : else { { echo "$as_me:$LINENO: error: Cannot find file mosek.h in $MSKINCDIR" >&5 echo "$as_me: error: Cannot find file mosek.h in $MSKINCDIR" >&2;} { (exit 1); exit 1; }; } : fi # Now see if we can link the function. There are arguments for and against # assuming argument 3 is a header file declaring the function. A correct # function declaration is the main argument in favour. Having to cope with # possible dependencies or other oddities are the main arguments against. # Force the use of C as the best single choice amongst C++, C, and Fortran. # Obviously, this has limits. if test x"$mosek_libcheck" != xno; then coin_save_LIBS="$LIBS" LIBS="$MSKLIB " coin_MSK_link=no 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 for fnm in MSK_makeenv ; do echo "$as_me:$LINENO: checking whether symbol $fnm is available with MSK" >&5 echo $ECHO_N "checking whether symbol $fnm is available with MSK... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { $fnm() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 coin_MSK_link=yes break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext 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 LIBS="$coin_save_LIBS" if test x"$coin_MSK_link" != xyes ; then { { echo "$as_me:$LINENO: error: Cannot find symbol(s) MSK_makeenv with MSK" >&5 echo "$as_me: error: Cannot find symbol(s) MSK_makeenv with MSK" >&2;} { (exit 1); exit 1; }; } fi fi # If we make it this far, we've verified the file and linked the function. Add # the necessary link flags to _{PC}LIBS and define the preprocessor symbol # COIN_HAS_LBRY. cat >>confdefs.h <<\_ACEOF #define COIN_HAS_MSK 1 _ACEOF fi # Arrange for configure to substitute LBRYINCDIR and LBRYLIB and create the # automake conditional. These actions must occur unconditionally. if test $coin_has_msk = true; then COIN_HAS_MSK_TRUE= COIN_HAS_MSK_FALSE='#' else COIN_HAS_MSK_TRUE='#' COIN_HAS_MSK_FALSE= fi echo "$as_me:$LINENO: checking if user provides library for Xpress" >&5 echo $ECHO_N "checking if user provides library for Xpress... $ECHO_C" >&6 # Check for header file directory # Check whether --with-xpress-incdir or --without-xpress-incdir was given. if test "${with_xpress_incdir+set}" = set; then withval="$with_xpress_incdir" XPRINCDIR=`cd $withval; pwd` fi; # Check for library directory # Check whether --with-xpress-lib or --without-xpress-lib was given. if test "${with_xpress_lib+set}" = set; then withval="$with_xpress_lib" XPRLIB=$withval fi; # Switch to disable library check if requested # Check whether --enable-xpress-libcheck or --disable-xpress-libcheck was given. if test "${enable_xpress_libcheck+set}" = set; then enableval="$enable_xpress_libcheck" xpress_libcheck=$enableval else xpress_libcheck=yes fi; # At this point, if we're going to use the library, both LBRYINCDIR and # LBRYLIB must be defined and not empty. if test x"$XPRINCDIR" != x || test x"$XPRLIB" != x; then if test x"$XPRINCDIR" = x || test x"$XPRLIB" = x; then { { echo "$as_me:$LINENO: error: You need to specify both an include directory and link flags to use library Xpress. Use --with-xpress-incdir of environment variable $XPRINCDIR to specify the include directory. Use --with-xpress-lib or environment variable $XPRLIB to specify link flags." >&5 echo "$as_me: error: You need to specify both an include directory and link flags to use library Xpress. Use --with-xpress-incdir of environment variable $XPRINCDIR to specify the include directory. Use --with-xpress-lib or environment variable $XPRLIB to specify link flags." >&2;} { (exit 1); exit 1; }; } fi coin_has_xpr=true echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else coin_has_xpr=false echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # If we have instructions for use, consider header and link checks. if test $coin_has_xpr = true; then # If argument 3 (file) is given, check for the file. Typically this will be a # header file, but that's not assumed. if test -r $XPRINCDIR/xprs.h; then : else { { echo "$as_me:$LINENO: error: Cannot find file xprs.h in $XPRINCDIR" >&5 echo "$as_me: error: Cannot find file xprs.h in $XPRINCDIR" >&2;} { (exit 1); exit 1; }; } : fi # Now see if we can link the function. There are arguments for and against # assuming argument 3 is a header file declaring the function. A correct # function declaration is the main argument in favour. Having to cope with # possible dependencies or other oddities are the main arguments against. # Force the use of C as the best single choice amongst C++, C, and Fortran. # Obviously, this has limits. if test x"$xpress_libcheck" != xno; then coin_save_LIBS="$LIBS" LIBS="$XPRLIB " coin_XPR_link=no 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 for fnm in XPRSinit ; do echo "$as_me:$LINENO: checking whether symbol $fnm is available with XPR" >&5 echo $ECHO_N "checking whether symbol $fnm is available with XPR... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { $fnm() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 coin_XPR_link=yes break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext 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 LIBS="$coin_save_LIBS" if test x"$coin_XPR_link" != xyes ; then { { echo "$as_me:$LINENO: error: Cannot find symbol(s) XPRSinit with XPR" >&5 echo "$as_me: error: Cannot find symbol(s) XPRSinit with XPR" >&2;} { (exit 1); exit 1; }; } fi fi # If we make it this far, we've verified the file and linked the function. Add # the necessary link flags to _{PC}LIBS and define the preprocessor symbol # COIN_HAS_LBRY. cat >>confdefs.h <<\_ACEOF #define COIN_HAS_XPR 1 _ACEOF fi # Arrange for configure to substitute LBRYINCDIR and LBRYLIB and create the # automake conditional. These actions must occur unconditionally. if test $coin_has_xpr = true; then COIN_HAS_XPR_TRUE= COIN_HAS_XPR_FALSE='#' else COIN_HAS_XPR_TRUE='#' COIN_HAS_XPR_FALSE= fi echo "$as_me:$LINENO: checking if user provides library for Gurobi" >&5 echo $ECHO_N "checking if user provides library for Gurobi... $ECHO_C" >&6 # Check for header file directory # Check whether --with-gurobi-incdir or --without-gurobi-incdir was given. if test "${with_gurobi_incdir+set}" = set; then withval="$with_gurobi_incdir" GRBINCDIR=`cd $withval; pwd` fi; # Check for library directory # Check whether --with-gurobi-lib or --without-gurobi-lib was given. if test "${with_gurobi_lib+set}" = set; then withval="$with_gurobi_lib" GRBLIB=$withval fi; # Switch to disable library check if requested # Check whether --enable-gurobi-libcheck or --disable-gurobi-libcheck was given. if test "${enable_gurobi_libcheck+set}" = set; then enableval="$enable_gurobi_libcheck" gurobi_libcheck=$enableval else gurobi_libcheck=yes fi; # At this point, if we're going to use the library, both LBRYINCDIR and # LBRYLIB must be defined and not empty. if test x"$GRBINCDIR" != x || test x"$GRBLIB" != x; then if test x"$GRBINCDIR" = x || test x"$GRBLIB" = x; then { { echo "$as_me:$LINENO: error: You need to specify both an include directory and link flags to use library Gurobi. Use --with-gurobi-incdir of environment variable $GRBINCDIR to specify the include directory. Use --with-gurobi-lib or environment variable $GRBLIB to specify link flags." >&5 echo "$as_me: error: You need to specify both an include directory and link flags to use library Gurobi. Use --with-gurobi-incdir of environment variable $GRBINCDIR to specify the include directory. Use --with-gurobi-lib or environment variable $GRBLIB to specify link flags." >&2;} { (exit 1); exit 1; }; } fi coin_has_grb=true echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else coin_has_grb=false echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # If we have instructions for use, consider header and link checks. if test $coin_has_grb = true; then # If argument 3 (file) is given, check for the file. Typically this will be a # header file, but that's not assumed. if test -r $GRBINCDIR/gurobi_c.h; then : else { { echo "$as_me:$LINENO: error: Cannot find file gurobi_c.h in $GRBINCDIR" >&5 echo "$as_me: error: Cannot find file gurobi_c.h in $GRBINCDIR" >&2;} { (exit 1); exit 1; }; } : fi # Now see if we can link the function. There are arguments for and against # assuming argument 3 is a header file declaring the function. A correct # function declaration is the main argument in favour. Having to cope with # possible dependencies or other oddities are the main arguments against. # Force the use of C as the best single choice amongst C++, C, and Fortran. # Obviously, this has limits. if test x"$gurobi_libcheck" != xno; then coin_save_LIBS="$LIBS" LIBS="$GRBLIB " coin_GRB_link=no 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 for fnm in GRBloadenv ; do echo "$as_me:$LINENO: checking whether symbol $fnm is available with GRB" >&5 echo $ECHO_N "checking whether symbol $fnm is available with GRB... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { $fnm() ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 coin_GRB_link=yes break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext 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 LIBS="$coin_save_LIBS" if test x"$coin_GRB_link" != xyes ; then { { echo "$as_me:$LINENO: error: Cannot find symbol(s) GRBloadenv with GRB" >&5 echo "$as_me: error: Cannot find symbol(s) GRBloadenv with GRB" >&2;} { (exit 1); exit 1; }; } fi fi # If we make it this far, we've verified the file and linked the function. Add # the necessary link flags to _{PC}LIBS and define the preprocessor symbol # COIN_HAS_LBRY. cat >>confdefs.h <<\_ACEOF #define COIN_HAS_GRB 1 _ACEOF fi # Arrange for configure to substitute LBRYINCDIR and LBRYLIB and create the # automake conditional. These actions must occur unconditionally. if test $coin_has_grb = true; then COIN_HAS_GRB_TRUE= COIN_HAS_GRB_FALSE='#' else COIN_HAS_GRB_TRUE='#' COIN_HAS_GRB_FALSE= fi ############################################################################# # Examples solver # ############################################################################# # choose a solver interface that can be used in the examples if test $coin_has_glpk = yes ; then OSI_EXAMPLES_SOLVER_NAME=OsiGlpkSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="$GLPK_CFLAGS" OSI_EXAMPLES_SOLVER_LIBS="-lOsiGlpk $GLPK_LIBS_INSTALLED" OSI_EXAMPLES_SOLVER_PCNAME=osi-glpk elif test $coin_has_cpx = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiCpxSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$CPXINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiCpx $CPXLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-cplex elif test $coin_has_grb = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiGrbSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$GRBINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiGrb $GRBLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-gurobi elif test $coin_has_msk = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiMskSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$MSKINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiMsk $MSKLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-mosek elif test $coin_has_xpr = true ; then OSI_EXAMPLES_SOLVER_NAME=OsiXprSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="-I$XPRINCDIR" OSI_EXAMPLES_SOLVER_LIBS="-lOsiXpr $XPRLIB" OSI_EXAMPLES_SOLVER_PCNAME=osi-xpress elif test $coin_has_soplex = yes ; then OSI_EXAMPLES_SOLVER_NAME=OsiSpxSolverInterface OSI_EXAMPLES_SOLVER_CFLAGS="$SOPLEX_CFLAGS" OSI_EXAMPLES_SOLVER_LIBS="-lOsiSpx $SOPLEX_LIBS_INSTALLED" OSI_EXAMPLES_SOLVER_PCNAME=osi-soplex else { echo "$as_me:$LINENO: WARNING: No solver available, examples will not work." >&5 echo "$as_me: WARNING: No solver available, examples will not work." >&2;} fi # adjust linker flags for (i)cl compiler if test x$coin_cxx_is_cl = xtrue || test x$coin_cc_is_cl = xtrue ; then OSI_EXAMPLES_SOLVER_LIBS=`echo " $OSI_EXAMPLES_SOLVER_LIBS" | sed -e 's/ -l\([^ ]*\)/ lib\1.lib/g' -e 's/ -L\([^ ]*\)/ -libpath:\`$(CYGPATH_W) \1\`/g'` fi ############################################################################# # Configuration options for individual OSIs # ############################################################################# # If any of the tests performed in this section actually require the presence # of the solver (file presence, link checks, etc.) be sure to guard the call. # We assume that GLPK is not too old cat >>confdefs.h <<\_ACEOF #define GLPK_HAS_INTOPT 1 _ACEOF ############################################################################# # Check for doxygen # ############################################################################# { echo "$as_me:$LINENO: configuring doxygen documentation options" >&5 echo "$as_me: configuring doxygen documentation options" >&6;} # Check to see if doxygen is available. # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_doxygen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_doxygen"; then ac_cv_prog_coin_have_doxygen="$coin_have_doxygen" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_doxygen="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_doxygen" && ac_cv_prog_coin_have_doxygen="no" fi fi coin_have_doxygen=$ac_cv_prog_coin_have_doxygen if test -n "$coin_have_doxygen"; then echo "$as_me:$LINENO: result: $coin_have_doxygen" >&5 echo "${ECHO_T}$coin_have_doxygen" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "latex", so it can be a program name with args. set dummy latex; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_have_latex+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_have_latex"; then ac_cv_prog_coin_have_latex="$coin_have_latex" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_have_latex="yes" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_have_latex" && ac_cv_prog_coin_have_latex="no" fi fi coin_have_latex=$ac_cv_prog_coin_have_latex if test -n "$coin_have_latex"; then echo "$as_me:$LINENO: result: $coin_have_latex" >&5 echo "${ECHO_T}$coin_have_latex" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Look for the dot tool from the graphviz package, unless the user has # disabled it. # Check whether --with-dot or --without-dot was given. if test "${with_dot+set}" = set; then withval="$with_dot" else withval=yes fi; if test x"$withval" = xno ; then coin_doxy_usedot=NO echo "$as_me:$LINENO: checking for dot " >&5 echo $ECHO_N "checking for dot ... $ECHO_C" >&6 echo "$as_me:$LINENO: result: disabled" >&5 echo "${ECHO_T}disabled" >&6 else # Extract the first word of "dot", so it can be a program name with args. set dummy dot; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_coin_doxy_usedot+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$coin_doxy_usedot"; then ac_cv_prog_coin_doxy_usedot="$coin_doxy_usedot" # 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_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_coin_doxy_usedot="YES" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_coin_doxy_usedot" && ac_cv_prog_coin_doxy_usedot="NO" fi fi coin_doxy_usedot=$ac_cv_prog_coin_doxy_usedot if test -n "$coin_doxy_usedot"; then echo "$as_me:$LINENO: result: $coin_doxy_usedot" >&5 echo "${ECHO_T}$coin_doxy_usedot" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi # Generate a tag file name and a log file name coin_doxy_tagname=doxydoc/${PACKAGE}_doxy.tag coin_doxy_logname=doxydoc/${PACKAGE}_doxy.log if test $coin_have_doxygen = yes; then COIN_HAS_DOXYGEN_TRUE= COIN_HAS_DOXYGEN_FALSE='#' else COIN_HAS_DOXYGEN_TRUE='#' COIN_HAS_DOXYGEN_FALSE= fi if test $coin_have_latex = yes; then COIN_HAS_LATEX_TRUE= COIN_HAS_LATEX_FALSE='#' else COIN_HAS_LATEX_TRUE='#' COIN_HAS_LATEX_FALSE= fi # Process the list of project names and massage them into possible doxygen # doc'n directories. Prefer 1) classic external, source processed using # a project-specific doxygen.conf, we use the tag file; 2) classic # external, source processed using package doxygen.conf; 3) installed # doxydoc. Alternatives 1) and 2) are only possible if the directory will be # configured, which we can't know unless this is the package base configure, # since coin_subdirs is only set there. Hence it's sufficient to check for # membership. If we use a tag file from a classic external, exclude the # source from doxygen processing when doxygen runs in the base directory. coin_doxy_tagfiles= coin_doxy_excludes= tmp="CoinUtils" for proj in $tmp ; do lc_proj=`echo $proj | tr [A-Z] [a-z]` echo "$as_me:$LINENO: checking for doxygen doc'n for $proj " >&5 echo $ECHO_N "checking for doxygen doc'n for $proj ... $ECHO_C" >&6 doxytag=${lc_proj}_doxy.tag doxyfound=no # proj will be configured, hence doxydoc present in build tree doxysrcdir="${srcdir}/../${proj}" # AC_MSG_NOTICE([Considering $doxysrcdir (base)]) if test -d "$doxysrcdir" ; then # with a doxydoc directory? doxydir="$doxysrcdir/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (base)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) if test -d "$doxydir" ; then # use tag file; don't process source doxydir="../${proj}/doxydoc" coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=../../$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 coin_doxy_excludes="$coin_doxy_excludes */${proj}" else # will process the source -- nothing further to be done here echo "$as_me:$LINENO: result: $doxysrcdir (src)" >&5 echo "${ECHO_T}$doxysrcdir (src)" >&6 fi doxyfound=yes fi # Not built, fall back to installed tag file if test $doxyfound = no ; then eval doxydir="${datadir}/coin/doc/${proj}/doxydoc" # AC_MSG_NOTICE([Considering $doxydir (install)]) # AC_MSG_NOTICE([Subdirs: $coin_subdirs)]) coin_doxy_tagfiles="$coin_doxy_tagfiles $doxydir/$doxytag=$doxydir/html" echo "$as_me:$LINENO: result: $doxydir (tag)" >&5 echo "${ECHO_T}$doxydir (tag)" >&6 fi done ############################################################################# # System header # ############################################################################# ac_ext=cc 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 x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([cmath],[],[],[$hdr]) for ac_header in cmath do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to osi@list.coin-or.org ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_cmath" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([math.h],[],[],[$hdr]) for ac_header in math.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to osi@list.coin-or.org ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF 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 ac_ext=cc 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 x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([cfloat],[],[],[$hdr]) for ac_header in cfloat do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to osi@list.coin-or.org ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_cfloat" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([float.h],[],[],[$hdr]) for ac_header in float.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to osi@list.coin-or.org ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF 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 ac_ext=cc 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 x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([cieeefp],[],[],[$hdr]) for ac_header in cieeefp do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to osi@list.coin-or.org ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_cieeefp" != "yes"; then #if test x"" = x; then # hdr="#include " #else # hdr="" #fi #AC_CHECK_HEADERS([ieeefp.h],[],[],[$hdr]) for ac_header in ieeefp.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ----------------------------------- ## ## Report this to osi@list.coin-or.org ## ## ----------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF 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 ############################################################################## # Finishing up by writing all the output # ############################################################################## # Here list all the files that configure should create (except for the # configuration header file) ac_config_files="$ac_config_files Makefile examples/Makefile src/Osi/Makefile src/OsiCpx/Makefile src/OsiGlpk/Makefile src/OsiMsk/Makefile src/OsiXpr/Makefile src/OsiGrb/Makefile src/OsiSpx/Makefile src/OsiCommonTest/Makefile test/Makefile osi.pc osi-uninstalled.pc osi-unittests.pc osi-unittests-uninstalled.pc" if test $coin_has_cpx = true ; then ac_config_files="$ac_config_files osi-cplex.pc:src/OsiCpx/osi-cplex.pc.in osi-cplex-uninstalled.pc:src/OsiCpx/osi-cplex-uninstalled.pc.in" fi if test $coin_has_glpk = yes ; then ac_config_files="$ac_config_files osi-glpk.pc:src/OsiGlpk/osi-glpk.pc.in osi-glpk-uninstalled.pc:src/OsiGlpk/osi-glpk-uninstalled.pc.in" fi if test $coin_has_grb = true ; then ac_config_files="$ac_config_files osi-gurobi.pc:src/OsiGrb/osi-gurobi.pc.in osi-gurobi-uninstalled.pc:src/OsiGrb/osi-gurobi-uninstalled.pc.in" fi if test $coin_has_msk = true ; then ac_config_files="$ac_config_files osi-mosek.pc:src/OsiMsk/osi-mosek.pc.in osi-mosek-uninstalled.pc:src/OsiMsk/osi-mosek-uninstalled.pc.in" fi if test $coin_has_xpr = true ; then ac_config_files="$ac_config_files osi-xpress.pc:src/OsiXpr/osi-xpress.pc.in osi-xpress-uninstalled.pc:src/OsiXpr/osi-xpress-uninstalled.pc.in" fi if test $coin_has_soplex = yes ; then ac_config_files="$ac_config_files osi-soplex.pc:src/OsiSpx/osi-soplex.pc.in osi-soplex-uninstalled.pc:src/OsiSpx/osi-soplex-uninstalled.pc.in" fi ac_config_files="$ac_config_files doxydoc/doxygen.conf" # Here put the location and name of the configuration header file ac_config_headers="$ac_config_headers src/Osi/config.h src/Osi/config_osi.h" # Finally, we let configure write all the output... echo "$as_me:$LINENO: checking which command should be used to link input files" >&5 echo $ECHO_N "checking which command should be used to link input files... $ECHO_C" >&6 coin_link_input_cmd="$LN_S" case "$CC" in clang* ) ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) coin_link_input_cmd=cp ;; esac echo "$as_me:$LINENO: result: $coin_link_input_cmd" >&5 echo "${ECHO_T}$coin_link_input_cmd" >&6 if test x$coin_skip_ac_output != xyes; then # library extension case "$CC" in clang* ) LIBEXT=a ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) LIBEXT=lib ;; *) LIBEXT=a ;; esac # Define VPATH_DISTCLEANFILES to be everything that needs to be # cleaned for distclean in a vpath configuration VPATH_DISTCLEANFILES="$coin_vpath_link_files" # Take out subdirectories if their configuration concluded that they # don't need to be compiled if test x"$coin_ac_skip_subdirs" != x; then new_subdirs= for i in $subdirs; do skipme=no for j in $coin_ac_skip_subdirs; do if test $i = $j; then skipme=yes; fi done if test $skipme = no; then new_subdirs="$new_subdirs $i" fi done subdirs="$new_subdirs" fi # need to come before AC_OUTPUT if test x$coin_projectdir != xyes; then # write coin_subdirs to a file so that project configuration knows where to find uninstalled projects echo $coin_subdirs > coin_subdirs.txt else # substitute for OBJDIR, needed to setup .pc file for uninstalled project ABSBUILDDIR="`pwd`" fi 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, don't put newlines in cache variables' values. # 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. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *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 \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" 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}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ 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[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${ALWAYS_FALSE_TRUE}" && test -z "${ALWAYS_FALSE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"ALWAYS_FALSE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_CC_IS_CL_TRUE}" && test -z "${COIN_CC_IS_CL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_CC_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_CC_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_CXX_IS_CL_TRUE}" && test -z "${COIN_CXX_IS_CL_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_CXX_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_CXX_IS_CL\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${HAVE_EXTERNALS_TRUE}" && test -z "${HAVE_EXTERNALS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"HAVE_EXTERNALS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${DEPENDENCY_LINKING_TRUE}" && test -z "${DEPENDENCY_LINKING_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"DEPENDENCY_LINKING\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"DEPENDENCY_LINKING\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_PKGCONFIG_TRUE}" && test -z "${COIN_HAS_PKGCONFIG_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_PKGCONFIG\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_PKGCONFIG\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_COINUTILS_TRUE}" && test -z "${COIN_HAS_COINUTILS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_COINUTILS_TRUE}" && test -z "${COIN_HAS_COINUTILS_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_COINUTILS\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_GLPK_TRUE}" && test -z "${COIN_HAS_GLPK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_GLPK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_GLPK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_GLPK_TRUE}" && test -z "${COIN_HAS_GLPK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_GLPK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_GLPK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_SOPLEX_TRUE}" && test -z "${COIN_HAS_SOPLEX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_SOPLEX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_SOPLEX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_SOPLEX_TRUE}" && test -z "${COIN_HAS_SOPLEX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_SOPLEX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_SOPLEX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_SAMPLE_TRUE}" && test -z "${COIN_HAS_SAMPLE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_SAMPLE_TRUE}" && test -z "${COIN_HAS_SAMPLE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_SAMPLE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_NETLIB_TRUE}" && test -z "${COIN_HAS_NETLIB_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_NETLIB_TRUE}" && test -z "${COIN_HAS_NETLIB_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_NETLIB\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_CPX_TRUE}" && test -z "${COIN_HAS_CPX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_CPX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_CPX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_MSK_TRUE}" && test -z "${COIN_HAS_MSK_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_MSK\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_MSK\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_XPR_TRUE}" && test -z "${COIN_HAS_XPR_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_XPR\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_XPR\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_GRB_TRUE}" && test -z "${COIN_HAS_GRB_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_GRB\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_GRB\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_DOXYGEN_TRUE}" && test -z "${COIN_HAS_DOXYGEN_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_DOXYGEN\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${COIN_HAS_LATEX_TRUE}" && test -z "${COIN_HAS_LATEX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"COIN_HAS_LATEX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $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} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by Osi $as_me 0.108.0, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -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 --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_cs_version="\\ Osi config.status 0.108.0 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. 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=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; 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 if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "src/Osi/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Osi/Makefile" ;; "src/OsiCpx/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiCpx/Makefile" ;; "src/OsiGlpk/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiGlpk/Makefile" ;; "src/OsiMsk/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiMsk/Makefile" ;; "src/OsiXpr/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiXpr/Makefile" ;; "src/OsiGrb/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiGrb/Makefile" ;; "src/OsiSpx/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiSpx/Makefile" ;; "src/OsiCommonTest/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/OsiCommonTest/Makefile" ;; "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "osi.pc" ) CONFIG_FILES="$CONFIG_FILES osi.pc" ;; "osi-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-uninstalled.pc" ;; "osi-unittests.pc" ) CONFIG_FILES="$CONFIG_FILES osi-unittests.pc" ;; "osi-unittests-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-unittests-uninstalled.pc" ;; "osi-cplex.pc" ) CONFIG_FILES="$CONFIG_FILES osi-cplex.pc:src/OsiCpx/osi-cplex.pc.in" ;; "osi-cplex-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-cplex-uninstalled.pc:src/OsiCpx/osi-cplex-uninstalled.pc.in" ;; "osi-glpk.pc" ) CONFIG_FILES="$CONFIG_FILES osi-glpk.pc:src/OsiGlpk/osi-glpk.pc.in" ;; "osi-glpk-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-glpk-uninstalled.pc:src/OsiGlpk/osi-glpk-uninstalled.pc.in" ;; "osi-gurobi.pc" ) CONFIG_FILES="$CONFIG_FILES osi-gurobi.pc:src/OsiGrb/osi-gurobi.pc.in" ;; "osi-gurobi-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-gurobi-uninstalled.pc:src/OsiGrb/osi-gurobi-uninstalled.pc.in" ;; "osi-mosek.pc" ) CONFIG_FILES="$CONFIG_FILES osi-mosek.pc:src/OsiMsk/osi-mosek.pc.in" ;; "osi-mosek-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-mosek-uninstalled.pc:src/OsiMsk/osi-mosek-uninstalled.pc.in" ;; "osi-xpress.pc" ) CONFIG_FILES="$CONFIG_FILES osi-xpress.pc:src/OsiXpr/osi-xpress.pc.in" ;; "osi-xpress-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-xpress-uninstalled.pc:src/OsiXpr/osi-xpress-uninstalled.pc.in" ;; "osi-soplex.pc" ) CONFIG_FILES="$CONFIG_FILES osi-soplex.pc:src/OsiSpx/osi-soplex.pc.in" ;; "osi-soplex-uninstalled.pc" ) CONFIG_FILES="$CONFIG_FILES osi-soplex-uninstalled.pc:src/OsiSpx/osi-soplex-uninstalled.pc.in" ;; "doxydoc/doxygen.conf" ) CONFIG_FILES="$CONFIG_FILES doxydoc/doxygen.conf" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "src/Osi/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/Osi/config.h" ;; "src/Osi/config_osi.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/Osi/config_osi.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; 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 to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@ALWAYS_FALSE_TRUE@,$ALWAYS_FALSE_TRUE,;t t s,@ALWAYS_FALSE_FALSE@,$ALWAYS_FALSE_FALSE,;t t s,@have_svnversion@,$have_svnversion,;t t s,@OSI_SVN_REV@,$OSI_SVN_REV,;t t s,@CDEFS@,$CDEFS,;t t s,@ADD_CFLAGS@,$ADD_CFLAGS,;t t s,@DBG_CFLAGS@,$DBG_CFLAGS,;t t s,@OPT_CFLAGS@,$OPT_CFLAGS,;t t s,@sol_cc_compiler@,$sol_cc_compiler,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@COIN_CC_IS_CL_TRUE@,$COIN_CC_IS_CL_TRUE,;t t s,@COIN_CC_IS_CL_FALSE@,$COIN_CC_IS_CL_FALSE,;t t s,@MPICC@,$MPICC,;t t s,@CXXDEFS@,$CXXDEFS,;t t s,@ADD_CXXFLAGS@,$ADD_CXXFLAGS,;t t s,@DBG_CXXFLAGS@,$DBG_CXXFLAGS,;t t s,@OPT_CXXFLAGS@,$OPT_CXXFLAGS,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@COIN_CXX_IS_CL_TRUE@,$COIN_CXX_IS_CL_TRUE,;t t s,@COIN_CXX_IS_CL_FALSE@,$COIN_CXX_IS_CL_FALSE,;t t s,@MPICXX@,$MPICXX,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@mkdir_p@,$mkdir_p,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@AMTAR@,$AMTAR,;t t s,@am__tar@,$am__tar,;t t s,@am__untar@,$am__untar,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@CXXDEPMODE@,$CXXDEPMODE,;t t s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t s,@MAINT@,$MAINT,;t t s,@LIBTOOLM4@,$LIBTOOLM4,;t t s,@have_autoconf@,$have_autoconf,;t t s,@have_automake@,$have_automake,;t t s,@have_svn@,$have_svn,;t t s,@BUILDTOOLSDIR@,$BUILDTOOLSDIR,;t t s,@AUX_DIR@,$AUX_DIR,;t t s,@abs_source_dir@,$abs_source_dir,;t t s,@abs_lib_dir@,$abs_lib_dir,;t t s,@abs_include_dir@,$abs_include_dir,;t t s,@abs_bin_dir@,$abs_bin_dir,;t t s,@HAVE_EXTERNALS_TRUE@,$HAVE_EXTERNALS_TRUE,;t t s,@HAVE_EXTERNALS_FALSE@,$HAVE_EXTERNALS_FALSE,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@ECHO@,$ECHO,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@CPP@,$CPP,;t t s,@CXXCPP@,$CXXCPP,;t t s,@F77@,$F77,;t t s,@FFLAGS@,$FFLAGS,;t t s,@ac_ct_F77@,$ac_ct_F77,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@ac_c_preproc_warn_flag@,$ac_c_preproc_warn_flag,;t t s,@ac_cxx_preproc_warn_flag@,$ac_cxx_preproc_warn_flag,;t t s,@RPATH_FLAGS@,$RPATH_FLAGS,;t t s,@DEPENDENCY_LINKING_TRUE@,$DEPENDENCY_LINKING_TRUE,;t t s,@DEPENDENCY_LINKING_FALSE@,$DEPENDENCY_LINKING_FALSE,;t t s,@LT_LDFLAGS@,$LT_LDFLAGS,;t t s,@PKG_CONFIG@,$PKG_CONFIG,;t t s,@ac_ct_PKG_CONFIG@,$ac_ct_PKG_CONFIG,;t t s,@COIN_HAS_PKGCONFIG_TRUE@,$COIN_HAS_PKGCONFIG_TRUE,;t t s,@COIN_HAS_PKGCONFIG_FALSE@,$COIN_HAS_PKGCONFIG_FALSE,;t t s,@COIN_PKG_CONFIG_PATH@,$COIN_PKG_CONFIG_PATH,;t t s,@COIN_PKG_CONFIG_PATH_UNINSTALLED@,$COIN_PKG_CONFIG_PATH_UNINSTALLED,;t t s,@COINUTILS_LIBS@,$COINUTILS_LIBS,;t t s,@COINUTILS_CFLAGS@,$COINUTILS_CFLAGS,;t t s,@COINUTILS_DATA@,$COINUTILS_DATA,;t t s,@COINUTILS_DEPENDENCIES@,$COINUTILS_DEPENDENCIES,;t t s,@COINUTILS_LIBS_INSTALLED@,$COINUTILS_LIBS_INSTALLED,;t t s,@COINUTILS_CFLAGS_INSTALLED@,$COINUTILS_CFLAGS_INSTALLED,;t t s,@COINUTILS_DATA_INSTALLED@,$COINUTILS_DATA_INSTALLED,;t t s,@OSILIB_CFLAGS@,$OSILIB_CFLAGS,;t t s,@OSILIB_LIBS@,$OSILIB_LIBS,;t t s,@OSILIB_PCLIBS@,$OSILIB_PCLIBS,;t t s,@OSILIB_PCREQUIRES@,$OSILIB_PCREQUIRES,;t t s,@OSILIB_DEPENDENCIES@,$OSILIB_DEPENDENCIES,;t t s,@OSILIB_CFLAGS_INSTALLED@,$OSILIB_CFLAGS_INSTALLED,;t t s,@OSILIB_LIBS_INSTALLED@,$OSILIB_LIBS_INSTALLED,;t t s,@COIN_HAS_COINUTILS_TRUE@,$COIN_HAS_COINUTILS_TRUE,;t t s,@COIN_HAS_COINUTILS_FALSE@,$COIN_HAS_COINUTILS_FALSE,;t t s,@GLPK_LIBS@,$GLPK_LIBS,;t t s,@GLPK_CFLAGS@,$GLPK_CFLAGS,;t t s,@GLPK_DATA@,$GLPK_DATA,;t t s,@GLPK_DEPENDENCIES@,$GLPK_DEPENDENCIES,;t t s,@GLPK_LIBS_INSTALLED@,$GLPK_LIBS_INSTALLED,;t t s,@GLPK_CFLAGS_INSTALLED@,$GLPK_CFLAGS_INSTALLED,;t t s,@GLPK_DATA_INSTALLED@,$GLPK_DATA_INSTALLED,;t t s,@OSIGLPKLIB_CFLAGS@,$OSIGLPKLIB_CFLAGS,;t t s,@OSIGLPKLIB_LIBS@,$OSIGLPKLIB_LIBS,;t t s,@OSIGLPKLIB_PCLIBS@,$OSIGLPKLIB_PCLIBS,;t t s,@OSIGLPKLIB_PCREQUIRES@,$OSIGLPKLIB_PCREQUIRES,;t t s,@OSIGLPKLIB_DEPENDENCIES@,$OSIGLPKLIB_DEPENDENCIES,;t t s,@OSIGLPKLIB_CFLAGS_INSTALLED@,$OSIGLPKLIB_CFLAGS_INSTALLED,;t t s,@OSIGLPKLIB_LIBS_INSTALLED@,$OSIGLPKLIB_LIBS_INSTALLED,;t t s,@COIN_HAS_GLPK_TRUE@,$COIN_HAS_GLPK_TRUE,;t t s,@COIN_HAS_GLPK_FALSE@,$COIN_HAS_GLPK_FALSE,;t t s,@SOPLEX_LIBS@,$SOPLEX_LIBS,;t t s,@SOPLEX_CFLAGS@,$SOPLEX_CFLAGS,;t t s,@SOPLEX_DATA@,$SOPLEX_DATA,;t t s,@SOPLEX_DEPENDENCIES@,$SOPLEX_DEPENDENCIES,;t t s,@SOPLEX_LIBS_INSTALLED@,$SOPLEX_LIBS_INSTALLED,;t t s,@SOPLEX_CFLAGS_INSTALLED@,$SOPLEX_CFLAGS_INSTALLED,;t t s,@SOPLEX_DATA_INSTALLED@,$SOPLEX_DATA_INSTALLED,;t t s,@OSISPXLIB_CFLAGS@,$OSISPXLIB_CFLAGS,;t t s,@OSISPXLIB_LIBS@,$OSISPXLIB_LIBS,;t t s,@OSISPXLIB_PCLIBS@,$OSISPXLIB_PCLIBS,;t t s,@OSISPXLIB_PCREQUIRES@,$OSISPXLIB_PCREQUIRES,;t t s,@OSISPXLIB_DEPENDENCIES@,$OSISPXLIB_DEPENDENCIES,;t t s,@OSISPXLIB_CFLAGS_INSTALLED@,$OSISPXLIB_CFLAGS_INSTALLED,;t t s,@OSISPXLIB_LIBS_INSTALLED@,$OSISPXLIB_LIBS_INSTALLED,;t t s,@COIN_HAS_SOPLEX_TRUE@,$COIN_HAS_SOPLEX_TRUE,;t t s,@COIN_HAS_SOPLEX_FALSE@,$COIN_HAS_SOPLEX_FALSE,;t t s,@SAMPLE_LIBS@,$SAMPLE_LIBS,;t t s,@SAMPLE_CFLAGS@,$SAMPLE_CFLAGS,;t t s,@SAMPLE_DATA@,$SAMPLE_DATA,;t t s,@SAMPLE_DEPENDENCIES@,$SAMPLE_DEPENDENCIES,;t t s,@SAMPLE_LIBS_INSTALLED@,$SAMPLE_LIBS_INSTALLED,;t t s,@SAMPLE_CFLAGS_INSTALLED@,$SAMPLE_CFLAGS_INSTALLED,;t t s,@SAMPLE_DATA_INSTALLED@,$SAMPLE_DATA_INSTALLED,;t t s,@COIN_HAS_SAMPLE_TRUE@,$COIN_HAS_SAMPLE_TRUE,;t t s,@COIN_HAS_SAMPLE_FALSE@,$COIN_HAS_SAMPLE_FALSE,;t t s,@NETLIB_LIBS@,$NETLIB_LIBS,;t t s,@NETLIB_CFLAGS@,$NETLIB_CFLAGS,;t t s,@NETLIB_DATA@,$NETLIB_DATA,;t t s,@NETLIB_DEPENDENCIES@,$NETLIB_DEPENDENCIES,;t t s,@NETLIB_LIBS_INSTALLED@,$NETLIB_LIBS_INSTALLED,;t t s,@NETLIB_CFLAGS_INSTALLED@,$NETLIB_CFLAGS_INSTALLED,;t t s,@NETLIB_DATA_INSTALLED@,$NETLIB_DATA_INSTALLED,;t t s,@COIN_HAS_NETLIB_TRUE@,$COIN_HAS_NETLIB_TRUE,;t t s,@COIN_HAS_NETLIB_FALSE@,$COIN_HAS_NETLIB_FALSE,;t t s,@CPXINCDIR@,$CPXINCDIR,;t t s,@CPXLIB@,$CPXLIB,;t t s,@COIN_HAS_CPX_TRUE@,$COIN_HAS_CPX_TRUE,;t t s,@COIN_HAS_CPX_FALSE@,$COIN_HAS_CPX_FALSE,;t t s,@MSKINCDIR@,$MSKINCDIR,;t t s,@MSKLIB@,$MSKLIB,;t t s,@COIN_HAS_MSK_TRUE@,$COIN_HAS_MSK_TRUE,;t t s,@COIN_HAS_MSK_FALSE@,$COIN_HAS_MSK_FALSE,;t t s,@XPRINCDIR@,$XPRINCDIR,;t t s,@XPRLIB@,$XPRLIB,;t t s,@COIN_HAS_XPR_TRUE@,$COIN_HAS_XPR_TRUE,;t t s,@COIN_HAS_XPR_FALSE@,$COIN_HAS_XPR_FALSE,;t t s,@GRBINCDIR@,$GRBINCDIR,;t t s,@GRBLIB@,$GRBLIB,;t t s,@COIN_HAS_GRB_TRUE@,$COIN_HAS_GRB_TRUE,;t t s,@COIN_HAS_GRB_FALSE@,$COIN_HAS_GRB_FALSE,;t t s,@OSI_EXAMPLES_SOLVER_NAME@,$OSI_EXAMPLES_SOLVER_NAME,;t t s,@OSI_EXAMPLES_SOLVER_CFLAGS@,$OSI_EXAMPLES_SOLVER_CFLAGS,;t t s,@OSI_EXAMPLES_SOLVER_LIBS@,$OSI_EXAMPLES_SOLVER_LIBS,;t t s,@OSI_EXAMPLES_SOLVER_PCNAME@,$OSI_EXAMPLES_SOLVER_PCNAME,;t t s,@coin_have_doxygen@,$coin_have_doxygen,;t t s,@coin_have_latex@,$coin_have_latex,;t t s,@coin_doxy_usedot@,$coin_doxy_usedot,;t t s,@coin_doxy_tagname@,$coin_doxy_tagname,;t t s,@coin_doxy_logname@,$coin_doxy_logname,;t t s,@COIN_HAS_DOXYGEN_TRUE@,$COIN_HAS_DOXYGEN_TRUE,;t t s,@COIN_HAS_DOXYGEN_FALSE@,$COIN_HAS_DOXYGEN_FALSE,;t t s,@COIN_HAS_LATEX_TRUE@,$COIN_HAS_LATEX_TRUE,;t t s,@COIN_HAS_LATEX_FALSE@,$COIN_HAS_LATEX_FALSE,;t t s,@coin_doxy_tagfiles@,$coin_doxy_tagfiles,;t t s,@coin_doxy_excludes@,$coin_doxy_excludes,;t t s,@LIBEXT@,$LIBEXT,;t t s,@VPATH_DISTCLEANFILES@,$VPATH_DISTCLEANFILES,;t t s,@ABSBUILDDIR@,$ABSBUILDDIR,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # 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. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;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,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #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. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # 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. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi # Compute $ac_file's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $ac_file | $ac_file:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X$ac_file : 'X\(//\)[^/]' \| \ X$ac_file : 'X\(//\)$' \| \ X$ac_file : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X$ac_file | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'`/stamp-h$_am_stamp_count done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; 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. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || 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"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # 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 || { (exit 1); exit 1; } fi if test x"$coin_vpath_link_files" = x; then : ; else lnkcmd="$coin_link_input_cmd" if test "$lnkcmd" = cp; then { echo "$as_me:$LINENO: Copying data files for VPATH configuration" >&5 echo "$as_me: Copying data files for VPATH configuration" >&6;} else { echo "$as_me:$LINENO: Creating VPATH links for data files" >&5 echo "$as_me: Creating VPATH links for data files" >&6;} fi for file in $coin_vpath_link_files; do dir=`(dirname "./$file") 2>/dev/null || $as_expr X"./$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"./$file" : 'X\(//\)[^/]' \| \ X"./$file" : 'X\(//\)$' \| \ X"./$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"./$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` if test -d $dir; then : ; else { if $as_mkdir_p; then mkdir -p $dir else as_dir=$dir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dir" >&5 echo "$as_me: error: cannot create directory $dir" >&2;} { (exit 1); exit 1; }; }; } fi rm -f $file $lnkcmd $abs_source_dir/$file $file done fi { echo "$as_me:$LINENO: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&5 echo "$as_me: In case of trouble, first consult the troubleshooting page at https://projects.coin-or.org/BuildTools/wiki/user-troubleshooting" >&6;} if test x$coin_projectdir = xyes; then { echo "$as_me:$LINENO: Configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Configuration of $PACKAGE_NAME successful" >&6;} else { echo "$as_me:$LINENO: Main configuration of $PACKAGE_NAME successful" >&5 echo "$as_me: Main configuration of $PACKAGE_NAME successful" >&6;} fi else { echo "$as_me:$LINENO: No configuration of $PACKAGE_NAME necessary" >&5 echo "$as_me: No configuration of $PACKAGE_NAME necessary" >&6;} fi DyLP-1.10.4/Osi/Makefile.in0000644000175200017520000011454112504703233013657 0ustar coincoin# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 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@ # Copyright (C) 2006 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 # Copyright (C) 2006, 2007 International Business Machines and others. # All Rights Reserved. # This file is distributed under the Eclipse Public License. # Author: Andreas Waechter IBM 2006-04-13 ######################################################################## # Documentation installation # ######################################################################## srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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@ @COIN_HAS_CPX_TRUE@am__append_1 = src/OsiCpx @COIN_HAS_CPX_TRUE@am__append_2 = osi-cplex.pc @COIN_HAS_GLPK_TRUE@am__append_3 = src/OsiGlpk @COIN_HAS_GLPK_TRUE@am__append_4 = osi-glpk.pc @COIN_HAS_MSK_TRUE@am__append_5 = src/OsiMsk @COIN_HAS_MSK_TRUE@am__append_6 = osi-mosek.pc @COIN_HAS_XPR_TRUE@am__append_7 = src/OsiXpr @COIN_HAS_XPR_TRUE@am__append_8 = osi-xpress.pc @COIN_HAS_GRB_TRUE@am__append_9 = src/OsiGrb @COIN_HAS_GRB_TRUE@am__append_10 = osi-gurobi.pc @COIN_HAS_SOPLEX_TRUE@am__append_11 = src/OsiSpx @COIN_HAS_SOPLEX_TRUE@am__append_12 = osi-soplex.pc # We don't want to compile the test subdirectory, unless the test target is # specified. But we need to list it as subdirectory to make sure that it is # included in the tarball @ALWAYS_FALSE@am__append_13 = test DIST_COMMON = README $(am__configure_deps) \ $(srcdir)/BuildTools/Makemain.inc $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/osi-uninstalled.pc.in \ $(srcdir)/osi-unittests-uninstalled.pc.in \ $(srcdir)/osi-unittests.pc.in $(srcdir)/osi.pc.in \ $(top_srcdir)/configure $(top_srcdir)/doxydoc/doxygen.conf.in \ $(top_srcdir)/examples/Makefile.in \ $(top_srcdir)/src/OsiCpx/osi-cplex-uninstalled.pc.in \ $(top_srcdir)/src/OsiCpx/osi-cplex.pc.in \ $(top_srcdir)/src/OsiGlpk/osi-glpk-uninstalled.pc.in \ $(top_srcdir)/src/OsiGlpk/osi-glpk.pc.in \ $(top_srcdir)/src/OsiGrb/osi-gurobi-uninstalled.pc.in \ $(top_srcdir)/src/OsiGrb/osi-gurobi.pc.in \ $(top_srcdir)/src/OsiMsk/osi-mosek-uninstalled.pc.in \ $(top_srcdir)/src/OsiMsk/osi-mosek.pc.in \ $(top_srcdir)/src/OsiSpx/osi-soplex-uninstalled.pc.in \ $(top_srcdir)/src/OsiSpx/osi-soplex.pc.in \ $(top_srcdir)/src/OsiXpr/osi-xpress-uninstalled.pc.in \ $(top_srcdir)/src/OsiXpr/osi-xpress.pc.in AUTHORS config.guess \ config.sub depcomp install-sh ltmain.sh missing @HAVE_EXTERNALS_TRUE@am__append_14 = Dependencies @HAVE_EXTERNALS_TRUE@am__append_15 = .Dependencies-stamp subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.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 configure.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/Osi/config.h \ $(top_builddir)/src/Osi/config_osi.h CONFIG_CLEAN_FILES = examples/Makefile osi.pc osi-uninstalled.pc \ osi-unittests.pc osi-unittests-uninstalled.pc osi-cplex.pc \ osi-cplex-uninstalled.pc osi-glpk.pc osi-glpk-uninstalled.pc \ osi-gurobi.pc osi-gurobi-uninstalled.pc osi-mosek.pc \ osi-mosek-uninstalled.pc osi-xpress.pc \ osi-xpress-uninstalled.pc osi-soplex.pc \ osi-soplex-uninstalled.pc doxydoc/doxygen.conf SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive 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 = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(pkgconfiglibdir)" pkgconfiglibDATA_INSTALL = $(INSTALL_DATA) DATA = $(pkgconfiglib_DATA) ETAGS = etags CTAGS = ctags DIST_SUBDIRS = src/Osi src/OsiCommonTest src/OsiCpx src/OsiGlpk \ src/OsiMsk src/OsiXpr src/OsiGrb src/OsiSpx test DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ABSBUILDDIR = @ABSBUILDDIR@ ACLOCAL = @ACLOCAL@ ADD_CFLAGS = @ADD_CFLAGS@ ADD_CXXFLAGS = @ADD_CXXFLAGS@ ALWAYS_FALSE_FALSE = @ALWAYS_FALSE_FALSE@ ALWAYS_FALSE_TRUE = @ALWAYS_FALSE_TRUE@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AUX_DIR = @AUX_DIR@ AWK = @AWK@ BUILDTOOLSDIR = @BUILDTOOLSDIR@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CDEFS = @CDEFS@ CFLAGS = @CFLAGS@ COINUTILS_CFLAGS = @COINUTILS_CFLAGS@ COINUTILS_CFLAGS_INSTALLED = @COINUTILS_CFLAGS_INSTALLED@ COINUTILS_DATA = @COINUTILS_DATA@ COINUTILS_DATA_INSTALLED = @COINUTILS_DATA_INSTALLED@ COINUTILS_DEPENDENCIES = @COINUTILS_DEPENDENCIES@ COINUTILS_LIBS = @COINUTILS_LIBS@ COINUTILS_LIBS_INSTALLED = @COINUTILS_LIBS_INSTALLED@ COIN_CC_IS_CL_FALSE = @COIN_CC_IS_CL_FALSE@ COIN_CC_IS_CL_TRUE = @COIN_CC_IS_CL_TRUE@ COIN_CXX_IS_CL_FALSE = @COIN_CXX_IS_CL_FALSE@ COIN_CXX_IS_CL_TRUE = @COIN_CXX_IS_CL_TRUE@ COIN_HAS_COINUTILS_FALSE = @COIN_HAS_COINUTILS_FALSE@ COIN_HAS_COINUTILS_TRUE = @COIN_HAS_COINUTILS_TRUE@ COIN_HAS_CPX_FALSE = @COIN_HAS_CPX_FALSE@ COIN_HAS_CPX_TRUE = @COIN_HAS_CPX_TRUE@ COIN_HAS_DOXYGEN_FALSE = @COIN_HAS_DOXYGEN_FALSE@ COIN_HAS_DOXYGEN_TRUE = @COIN_HAS_DOXYGEN_TRUE@ COIN_HAS_GLPK_FALSE = @COIN_HAS_GLPK_FALSE@ COIN_HAS_GLPK_TRUE = @COIN_HAS_GLPK_TRUE@ COIN_HAS_GRB_FALSE = @COIN_HAS_GRB_FALSE@ COIN_HAS_GRB_TRUE = @COIN_HAS_GRB_TRUE@ COIN_HAS_LATEX_FALSE = @COIN_HAS_LATEX_FALSE@ COIN_HAS_LATEX_TRUE = @COIN_HAS_LATEX_TRUE@ COIN_HAS_MSK_FALSE = @COIN_HAS_MSK_FALSE@ COIN_HAS_MSK_TRUE = @COIN_HAS_MSK_TRUE@ COIN_HAS_NETLIB_FALSE = @COIN_HAS_NETLIB_FALSE@ COIN_HAS_NETLIB_TRUE = @COIN_HAS_NETLIB_TRUE@ COIN_HAS_PKGCONFIG_FALSE = @COIN_HAS_PKGCONFIG_FALSE@ COIN_HAS_PKGCONFIG_TRUE = @COIN_HAS_PKGCONFIG_TRUE@ COIN_HAS_SAMPLE_FALSE = @COIN_HAS_SAMPLE_FALSE@ COIN_HAS_SAMPLE_TRUE = @COIN_HAS_SAMPLE_TRUE@ COIN_HAS_SOPLEX_FALSE = @COIN_HAS_SOPLEX_FALSE@ COIN_HAS_SOPLEX_TRUE = @COIN_HAS_SOPLEX_TRUE@ COIN_HAS_XPR_FALSE = @COIN_HAS_XPR_FALSE@ COIN_HAS_XPR_TRUE = @COIN_HAS_XPR_TRUE@ COIN_PKG_CONFIG_PATH = @COIN_PKG_CONFIG_PATH@ COIN_PKG_CONFIG_PATH_UNINSTALLED = @COIN_PKG_CONFIG_PATH_UNINSTALLED@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPXINCDIR = @CPXINCDIR@ CPXLIB = @CPXLIB@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEFS = @CXXDEFS@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DBG_CFLAGS = @DBG_CFLAGS@ DBG_CXXFLAGS = @DBG_CXXFLAGS@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPENDENCY_LINKING_FALSE = @DEPENDENCY_LINKING_FALSE@ DEPENDENCY_LINKING_TRUE = @DEPENDENCY_LINKING_TRUE@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GLPK_CFLAGS = @GLPK_CFLAGS@ GLPK_CFLAGS_INSTALLED = @GLPK_CFLAGS_INSTALLED@ GLPK_DATA = @GLPK_DATA@ GLPK_DATA_INSTALLED = @GLPK_DATA_INSTALLED@ GLPK_DEPENDENCIES = @GLPK_DEPENDENCIES@ GLPK_LIBS = @GLPK_LIBS@ GLPK_LIBS_INSTALLED = @GLPK_LIBS_INSTALLED@ GRBINCDIR = @GRBINCDIR@ GRBLIB = @GRBLIB@ HAVE_EXTERNALS_FALSE = @HAVE_EXTERNALS_FALSE@ HAVE_EXTERNALS_TRUE = @HAVE_EXTERNALS_TRUE@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBEXT = @LIBEXT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLM4 = @LIBTOOLM4@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_LDFLAGS = @LT_LDFLAGS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MPICC = @MPICC@ MPICXX = @MPICXX@ MSKINCDIR = @MSKINCDIR@ MSKLIB = @MSKLIB@ NETLIB_CFLAGS = @NETLIB_CFLAGS@ NETLIB_CFLAGS_INSTALLED = @NETLIB_CFLAGS_INSTALLED@ NETLIB_DATA = @NETLIB_DATA@ NETLIB_DATA_INSTALLED = @NETLIB_DATA_INSTALLED@ NETLIB_DEPENDENCIES = @NETLIB_DEPENDENCIES@ NETLIB_LIBS = @NETLIB_LIBS@ NETLIB_LIBS_INSTALLED = @NETLIB_LIBS_INSTALLED@ OBJEXT = @OBJEXT@ OPT_CFLAGS = @OPT_CFLAGS@ OPT_CXXFLAGS = @OPT_CXXFLAGS@ OSIGLPKLIB_CFLAGS = @OSIGLPKLIB_CFLAGS@ OSIGLPKLIB_CFLAGS_INSTALLED = @OSIGLPKLIB_CFLAGS_INSTALLED@ OSIGLPKLIB_DEPENDENCIES = @OSIGLPKLIB_DEPENDENCIES@ OSIGLPKLIB_LIBS = @OSIGLPKLIB_LIBS@ OSIGLPKLIB_LIBS_INSTALLED = @OSIGLPKLIB_LIBS_INSTALLED@ OSIGLPKLIB_PCLIBS = @OSIGLPKLIB_PCLIBS@ OSIGLPKLIB_PCREQUIRES = @OSIGLPKLIB_PCREQUIRES@ OSILIB_CFLAGS = @OSILIB_CFLAGS@ OSILIB_CFLAGS_INSTALLED = @OSILIB_CFLAGS_INSTALLED@ OSILIB_DEPENDENCIES = @OSILIB_DEPENDENCIES@ OSILIB_LIBS = @OSILIB_LIBS@ OSILIB_LIBS_INSTALLED = @OSILIB_LIBS_INSTALLED@ OSILIB_PCLIBS = @OSILIB_PCLIBS@ OSILIB_PCREQUIRES = @OSILIB_PCREQUIRES@ OSISPXLIB_CFLAGS = @OSISPXLIB_CFLAGS@ OSISPXLIB_CFLAGS_INSTALLED = @OSISPXLIB_CFLAGS_INSTALLED@ OSISPXLIB_DEPENDENCIES = @OSISPXLIB_DEPENDENCIES@ OSISPXLIB_LIBS = @OSISPXLIB_LIBS@ OSISPXLIB_LIBS_INSTALLED = @OSISPXLIB_LIBS_INSTALLED@ OSISPXLIB_PCLIBS = @OSISPXLIB_PCLIBS@ OSISPXLIB_PCREQUIRES = @OSISPXLIB_PCREQUIRES@ OSI_EXAMPLES_SOLVER_CFLAGS = @OSI_EXAMPLES_SOLVER_CFLAGS@ OSI_EXAMPLES_SOLVER_LIBS = @OSI_EXAMPLES_SOLVER_LIBS@ OSI_EXAMPLES_SOLVER_NAME = @OSI_EXAMPLES_SOLVER_NAME@ OSI_EXAMPLES_SOLVER_PCNAME = @OSI_EXAMPLES_SOLVER_PCNAME@ OSI_SVN_REV = @OSI_SVN_REV@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RPATH_FLAGS = @RPATH_FLAGS@ SAMPLE_CFLAGS = @SAMPLE_CFLAGS@ SAMPLE_CFLAGS_INSTALLED = @SAMPLE_CFLAGS_INSTALLED@ SAMPLE_DATA = @SAMPLE_DATA@ SAMPLE_DATA_INSTALLED = @SAMPLE_DATA_INSTALLED@ SAMPLE_DEPENDENCIES = @SAMPLE_DEPENDENCIES@ SAMPLE_LIBS = @SAMPLE_LIBS@ SAMPLE_LIBS_INSTALLED = @SAMPLE_LIBS_INSTALLED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SOPLEX_CFLAGS = @SOPLEX_CFLAGS@ SOPLEX_CFLAGS_INSTALLED = @SOPLEX_CFLAGS_INSTALLED@ SOPLEX_DATA = @SOPLEX_DATA@ SOPLEX_DATA_INSTALLED = @SOPLEX_DATA_INSTALLED@ SOPLEX_DEPENDENCIES = @SOPLEX_DEPENDENCIES@ SOPLEX_LIBS = @SOPLEX_LIBS@ SOPLEX_LIBS_INSTALLED = @SOPLEX_LIBS_INSTALLED@ STRIP = @STRIP@ VERSION = @VERSION@ VPATH_DISTCLEANFILES = @VPATH_DISTCLEANFILES@ XPRINCDIR = @XPRINCDIR@ XPRLIB = @XPRLIB@ abs_bin_dir = @abs_bin_dir@ abs_include_dir = @abs_include_dir@ abs_lib_dir = @abs_lib_dir@ abs_source_dir = @abs_source_dir@ ac_c_preproc_warn_flag = @ac_c_preproc_warn_flag@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_PKG_CONFIG = @ac_ct_PKG_CONFIG@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ ac_cxx_preproc_warn_flag = @ac_cxx_preproc_warn_flag@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ 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@ coin_doxy_excludes = @coin_doxy_excludes@ coin_doxy_logname = @coin_doxy_logname@ coin_doxy_tagfiles = @coin_doxy_tagfiles@ coin_doxy_tagname = @coin_doxy_tagname@ coin_doxy_usedot = @coin_doxy_usedot@ coin_have_doxygen = @coin_have_doxygen@ coin_have_latex = @coin_have_latex@ datadir = @datadir@ exec_prefix = @exec_prefix@ have_autoconf = @have_autoconf@ have_automake = @have_automake@ have_svn = @have_svn@ have_svnversion = @have_svnversion@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sol_cc_compiler = @sol_cc_compiler@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign ######################################################################## # Subdirectories and installation of .pc files # ######################################################################## pkgconfiglibdir = $(libdir)/pkgconfig pkgconfiglib_DATA = osi.pc osi-unittests.pc $(am__append_2) \ $(am__append_4) $(am__append_6) $(am__append_8) \ $(am__append_10) $(am__append_12) SUBDIRS = src/Osi src/OsiCommonTest $(am__append_1) $(am__append_3) \ $(am__append_5) $(am__append_7) $(am__append_9) \ $(am__append_11) $(am__append_13) ######################################################################## # Additional files to be included in tarball # ######################################################################## # Here we need include all files that are not mentioned in other Makefiles EXTRA_DIST = examples/basic2.cpp examples/basic.cpp examples/build.cpp \ examples/Makefile.in examples/parameters.cpp \ examples/query.cpp examples/README examples/specific.cpp \ $(am__append_14) ######################################################################## # Installation of the addlibs file # ######################################################################## addlibsdir = $(DESTDIR)$(datadir)/coin/doc/Osi ######################################################################## # Maintainer Stuff # ######################################################################## CLEANFILES = # Files that are generated and should be cleaned with make distclean DISTCLEANFILES = $(am__append_15) $(VPATH_DISTCLEANFILES) DocFiles = README AUTHORS LICENSE DocInstallDir = $(datadir)/coin/doc/$(PACKAGE_NAME) COIN_HAS_DOXYGEN = @COIN_HAS_DOXYGEN_TRUE@TRUE COIN_HAS_LATEX = @COIN_HAS_LATEX_TRUE@TRUE all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/BuildTools/Makemain.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ cd $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ 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) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) examples/Makefile: $(top_builddir)/config.status $(top_srcdir)/examples/Makefile.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi.pc: $(top_builddir)/config.status $(srcdir)/osi.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/osi-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-unittests.pc: $(top_builddir)/config.status $(srcdir)/osi-unittests.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-unittests-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/osi-unittests-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-cplex.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiCpx/osi-cplex.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-cplex-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiCpx/osi-cplex-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-glpk.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiGlpk/osi-glpk.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-glpk-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiGlpk/osi-glpk-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-gurobi.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiGrb/osi-gurobi.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-gurobi-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiGrb/osi-gurobi-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-mosek.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiMsk/osi-mosek.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-mosek-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiMsk/osi-mosek-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-xpress.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiXpr/osi-xpress.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-xpress-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiXpr/osi-xpress-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-soplex.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiSpx/osi-soplex.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ osi-soplex-uninstalled.pc: $(top_builddir)/config.status $(top_srcdir)/src/OsiSpx/osi-soplex-uninstalled.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ doxydoc/doxygen.conf: $(top_builddir)/config.status $(top_srcdir)/doxydoc/doxygen.conf.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-pkgconfiglibDATA: $(pkgconfiglib_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfiglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfiglibdir)" @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(pkgconfiglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ $(pkgconfiglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done uninstall-pkgconfiglibDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfiglib_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pkgconfiglibdir)/$$f'"; \ rm -f "$(DESTDIR)$(pkgconfiglibdir)/$$f"; \ done # 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. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; 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; \ (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" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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 || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/. $(distdir)/BuildTools $(distdir)/doxydoc $(distdir)/examples $(distdir)/src/OsiCpx $(distdir)/src/OsiGlpk $(distdir)/src/OsiGrb $(distdir)/src/OsiMsk $(distdir)/src/OsiSpx $(distdir)/src/OsiXpr @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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 \ test -d "$(distdir)/$$subdir" \ || $(mkdir_p) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -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 $(SHELL) $(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__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__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) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(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 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { 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)$(pkgconfiglibdir)"; 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) 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 clean-local 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 info: info-recursive info-am: install-data-am: install-pkgconfiglibDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-exec-am: install-exec-local install-info: install-info-recursive install-man: 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-info-am uninstall-local \ uninstall-pkgconfiglibDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ check-am clean clean-generic clean-libtool clean-local \ clean-recursive ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \ distclean-generic distclean-libtool distclean-local \ distclean-recursive distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-hook install-exec install-exec-am \ install-exec-local install-info install-info-am install-man \ install-pkgconfiglibDATA install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic maintainer-clean-recursive \ mostlyclean mostlyclean-generic mostlyclean-libtool \ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-hook uninstall-info-am \ uninstall-local uninstall-pkgconfiglibDATA ######################################################################## # Extra Targets # ######################################################################## test: all cd test; $(MAKE) test unitTest: test # Doxygen documentation doxydoc: doxygen doxydoc/doxygen.conf clean-doxydoc: ( cd doxydoc ; rm -rf html *.log *.tag ) clean-local: clean-doxydoc if test -r test/Makefile; then cd test; $(MAKE) clean; fi distclean-local: if test -r test/Makefile; then cd test; $(MAKE) distclean; fi install-exec-local: install-doc uninstall-local: uninstall-doc .PHONY: test unitTest doxydoc install-data-hook: @$(mkdir_p) "$(addlibsdir)" @COIN_HAS_PKGCONFIG_TRUE@ PKG_CONFIG_PATH=@COIN_PKG_CONFIG_PATH@:$(DESTDIR)$(pkgconfiglibdir) \ @COIN_HAS_PKGCONFIG_TRUE@ $(PKG_CONFIG) --libs osi > $(addlibsdir)/osi_addlibs.txt @COIN_CXX_IS_CL_TRUE@@COIN_HAS_PKGCONFIG_FALSE@ echo "-libpath:`$(CYGPATH_W) @abs_lib_dir@` libOsi.lib @OSILIB_LIBS_INSTALLED@" > $(addlibsdir)/osi_addlibs.txt @COIN_CXX_IS_CL_FALSE@@COIN_HAS_PKGCONFIG_FALSE@ echo -L@abs_lib_dir@ -lOsi @OSILIB_LIBS_INSTALLED@ > $(addlibsdir)/osi_addlibs.txt uninstall-hook: rm -f $(addlibsdir)/osi_addlibs.txt doxygen-docs: if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ doxygen doxydoc/doxygen.conf;\ fi;\ fi pdf-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/latex"; then \ if test "$(COIN_HAS_LATEX)" = TRUE; then \ cd doxydoc/latex;\ $(MAKE) pdf;\ cd -;\ fi;\ fi;\ fi clean-doxygen-docs: if test -d "doxydoc/"; then \ cd doxydoc ;\ rm -rf html latex *.log *.tag;\ fi install-doxygen-docs: doxygen-docs if test "$(COIN_HAS_DOXYGEN)" = TRUE; then \ if test -d "doxydoc/"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc"; \ $(INSTALL_DATA) @coin_doxy_tagname@ "$(DESTDIR)$(DocInstallDir)/@coin_doxy_tagname@";\ if test -f "doxydoc/latex/refman.pdf"; then \ $(INSTALL_DATA) doxydoc/latex/refman.pdf "$(DESTDIR)$(DocInstallDir)";\ fi;\ if test -d "doxydoc/html"; then \ test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/search/" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)/doxydoc/search/"; \ $(INSTALL_DATA) doxydoc/html/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc";\ $(INSTALL_DATA) doxydoc/html/search/*.* "$(DESTDIR)$(DocInstallDir)/doxydoc/search";\ fi;\ fi;\ fi uninstall-doxygen-docs: if test -d "$(DESTDIR)$(DocInstallDir)/doxydoc/"; then \ rm -rf "$(DESTDIR)$(DocInstallDir)/doxydoc/"; \ fi if test -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; then \ rm -f "$(DESTDIR)$(DocInstallDir)/refman.pdf"; \ fi all-doxygen-docs: for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) doxygen-docs) \ fi ; \ done ; clean-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) clean-doxygen-docs) \ fi ; \ done ; install-all-doxygen-docs: all-doxygen-docs for dir in $(subdirs) ; do \ do_project=true;\ for proj in $(COIN_SKIP_DOXYGEN); do\ if test $$dir = $$proj; then\ do_project=false;\ fi;\ done;\ if test -r $$dir/doxydoc & $$do_project = true; then \ (cd $$dir ; $(MAKE) install-doxygen-docs) \ fi ; \ done ; uninstall-all-doxygen-docs: for dir in $(subdirs) ; do \ if test -r $$dir/doxydoc ; then \ (cd $$dir ; $(MAKE) uninstall-doxygen-docs) \ fi ; \ done ; install-doc: $(DocFiles) test -z "$(DocInstallDir)" || $(mkdir_p) "$(DESTDIR)$(DocInstallDir)" for file in $(DocFiles); do \ if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \ if test -f "$$dir$$file"; then $(INSTALL_DATA) "$$dir$$file" "$(DESTDIR)$(DocInstallDir)/$$file"; fi; \ done uninstall-doc: for file in $(DocFiles); do \ rm -f "$(DESTDIR)$(DocInstallDir)/$$file"; \ done ######################################################################## # Maintainer Stuff # ######################################################################## # Make sure acinclude is using most recent coin.m4 @MAINTAINER_MODE_TRUE@$(srcdir)/acinclude.m4: $(BUILDTOOLSDIR)/coin.m4 @MAINTAINER_MODE_TRUE@ cat $(LIBTOOLM4) $< > $@ # Make sure the autotools scripts are up to date @MAINTAINER_MODE_TRUE@$(AUX_DIR)/install-sh: $(BUILDTOOLSDIR)/install-sh @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/missing: $(BUILDTOOLSDIR)/missing @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.guess: $(BUILDTOOLSDIR)/config.guess @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/config.sub: $(BUILDTOOLSDIR)/config.sub @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/depcomp: $(BUILDTOOLSDIR)/depcomp @MAINTAINER_MODE_TRUE@ cp $< $@ @MAINTAINER_MODE_TRUE@$(AUX_DIR)/ltmain.sh: $(BUILDTOOLSDIR)/ltmain.sh @MAINTAINER_MODE_TRUE@ cp $< $@ # Take care of updating externals (if Dependencies file exists) @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@$(top_builddir)/Makefile: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@.Dependencies-stamp: $(srcdir)/Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); BuildTools/set_externals Dependencies @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ touch .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@update-externals: .Dependencies-stamp @HAVE_EXTERNALS_TRUE@@MAINTAINER_MODE_TRUE@ cd $(srcdir); svn update .PHONY: install-doc uninstall-doc update-externals # 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: DyLP-1.10.4/Osi/LICENSE0000644000175200017520000002622711507173764012636 0ustar coincoinEclipse 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.